ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDQ5Mjk5ZWUuLjg4MDk0MzUgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSwzICsxLDcgQEAKKyMgVHdvLXRyaWNrIHBvbnkgZm9yIE9TWCBhbmQgb3RoZXIgY2FzZSBpbnNlbnNpdGl2ZSBmaWxlIHN5c3RlbXM6CisjIElnbm9yZSAuL3B5dGhvbiBiaW5hcnkgb24gVW5peCBidXQgc3RpbGwgbG9vayBpbnRvIC4vUHl0aG9uLyBkaXJlY3RvcnkuCisvcHl0aG9uCishL1B5dGhvbi8qKgogKi5jb3ZlcgogKi5vCiAqLm9yaWcKQEAgLTE1LDExICsxOSwxMyBAQAogRG9jL3Rvb2xzL3B5Z21lbnRzLwogRG9jL3Rvb2xzL3NwaGlueC8KIExpYi9saWIydG8zLyoucGlja2xlCitMaWIvdGVzdC9kYXRhLyoKIExpYi9fc3lzY29uZmlnZGF0YS5weQogTGliL3BsYXQtbWFjL2Vycm9ycy5yc3JjLmRmLnJzcmMKIE1ha2VmaWxlCiBNYWtlZmlsZS5wcmUKIE1pc2MvcHl0aG9uLnBjCitNaXNjL3B5dGhvbi1jb25maWcuc2gKIE1vZHVsZXMvU2V0dXAKIE1vZHVsZXMvU2V0dXAuY29uZmlnCiBNb2R1bGVzL1NldHVwLmxvY2FsCkBAIC01Niw3ICs2Miw4IEBACiBwbGF0Zm9ybQogcHlidWlsZGRpci50eHQKIHB5Y29uZmlnLmgKLXB5dGhvbgorcHl0aG9uLWNvbmZpZworcHl0aG9uLWNvbmZpZy5weQogcHl0aG9uLmV4ZQogcHl0aG9uLWdkYi5weQogcHl0aG9uLmV4ZS1nZGIucHkKQEAgLTY2LDQgKzczLDUgQEAKIFRBR1MKIC5jb3ZlcmFnZQogY292ZXJhZ2UvCitleHRlcm5hbHMvCiBodG1sY292LwpkaWZmIC0tZ2l0IGEvLmhnZW9sIGIvLmhnZW9sCmluZGV4IDczYTQ3NzAuLjA1NTU3ODUgMTAwNjQ0Ci0tLSBhLy5oZ2VvbAorKysgYi8uaGdlb2wKQEAgLTI2LDYgKzI2LDcgQEAKICoqLnBzZCAgPSBCSU4KICoqLnRhciAgPSBCSU4KICoqLndhdiAgPSBCSU4KKyoqLndobCAgPSBCSU4KICoqLnhhciAgPSBCSU4KICoqLnppcCAgPSBCSU4KIApAQCAtMzksNiArNDAsMTIgQEAKIAogTGliL3Rlc3QvY29kaW5nMjA3MzEucHkgPSBCSU4KIAorIyBXaW5kb3dzIGJhdGNoIGZpbGVzIHdvcmsgYmVzdCB3aXRoIENSTEYsIHRoZXJlIGNhbiBiZSBzdWJ0bGUgcHJvYmxlbXMgd2l0aCBMRgorKiouYmF0ID0gQ1JMRgorCisjIFRoZSBXaW5kb3dzIHJlYWRtZSBpcyBsaWtlbHkgdG8gYmUgcmVhZCBpbiBOb3RlcGFkLCBzbyBtYWtlIGl0IHJlYWRhYmxlCitQQ2J1aWxkL3JlYWRtZS50eHQgPSBDUkxGCisKICMgQWxsIG90aGVyIGZpbGVzICh3aGljaCBwcmVzdW1hYmx5IGFyZSBodW1hbi1lZGl0YWJsZSkgYXJlICJuYXRpdmUiLgogIyBUaGlzIG11c3QgYmUgdGhlIGxhc3QgcnVsZSEKIApkaWZmIC0tZ2l0IGEvLmhnaWdub3JlIGIvLmhnaWdub3JlCmluZGV4IGM0MmRkMDMuLjllNWE1ODMgMTAwNjQ0Ci0tLSBhLy5oZ2lnbm9yZQorKysgYi8uaGdpZ25vcmUKQEAgLTE5LDIxICsxOSwyMCBAQAogcHljb25maWcuaCQKIHB5dGhvbiQKIHB5dGhvbi5leGUkCitweXRob24tY29uZmlnJAorcHl0aG9uLWNvbmZpZy5weSQKIHJlZmxvZy50eHQkCiB0YWdzJAogTGliL3BsYXQtbWFjL2Vycm9ycy5yc3JjLmRmLnJzcmMKLURvYy90b29scy9zcGhpbngvCi1Eb2MvdG9vbHMvZG9jdXRpbHMvCi1Eb2MvdG9vbHMvamluamEvCi1Eb2MvdG9vbHMvamluamEyLwotRG9jL3Rvb2xzL3B5Z21lbnRzLwogTWlzYy9weXRob24ucGMKK01pc2MvcHl0aG9uLWNvbmZpZy5zaCQKIE1vZHVsZXMvU2V0dXAkCiBNb2R1bGVzL1NldHVwLmNvbmZpZwogTW9kdWxlcy9TZXR1cC5sb2NhbAogTW9kdWxlcy9jb25maWcuYwogTW9kdWxlcy9sZF9zb19haXgkCiBQYXJzZXIvcGdlbiQKK15sY292LXJlcG9ydC8KIF5jb3JlCiBecHl0aG9uLWdkYi5weQogXnB5dGhvbi5leGUtZ2RiLnB5CkBAIC04MSwxMSArODAsMjEgQEAKIFBDYnVpbGQvKi4qc2RmCiBQQ2J1aWxkL1dpbjMyLXRlbXAtKgogUENidWlsZC94NjQtdGVtcC0qCitQQ2J1aWxkLyotcGdpCitQQ2J1aWxkLyotcGdvCiBQQ2J1aWxkL2FtZDY0CitQQ2J1aWxkL2lwY2gKK1Rvb2xzL3VuaWNvZGUvYnVpbGQvCitUb29scy91bmljb2RlL01BUFBJTkdTLwogQnVpbGRMb2cuaHRtCiBfX3B5Y2FjaGVfXwogTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYgogTW9kdWxlcy9fdGVzdGVtYmVkCiAuY292ZXJhZ2UKIGNvdmVyYWdlLworZXh0ZXJuYWxzLwogaHRtbGNvdi8KKyouZ2NkYQorKi5nY25vCisqLmdjb3YKK2NvdmVyYWdlLmluZm8KZGlmZiAtLWdpdCBhLy5oZ3RhZ3MgYi8uaGd0YWdzCmluZGV4IDRhYmJjNzEuLmUxNDFkNjMgMTAwNjQ0Ci0tLSBhLy5oZ3RhZ3MKKysrIGIvLmhndGFncwpAQCAtMTI3LDMgKzEyNywyNCBAQAogNjJjZjRlNzdmNzg1NjQ3MTRlN2VhM2Q0YmYxNDc5Y2ExZmJkMDc1OCB2My4zLjUKIDUxMzE3Yzk3ODZmNTQyNjc5NzVhYmYyZTljNTAyZTZhYWFhNGEyNDkgdjMuMy42cmMxCiA5NzFmZWMzMGRhMWZjNWJmMmI5ZmIyOGUwOTgxMmE1MTI3MDE0MjExIHYzLjMuNgorNDY1MzVmNjVlN2YzYmNkY2YxNzZmMzZkMzRiYzFmZWQ3MTlmZmQyYiB2My40LjBhMQorOTI2NWEyMTY4ZTJjYjJhODQ3ODVkODcxNzc5MmFjYzY2MWU2YjY5MiB2My40LjBhMgorZGQ5Y2RmOTBhNTA3MzUxMDg3N2U5ZGQ1MTEyZjhlNmNmMjBkNWU4OSB2My40LjBhMworZTI0NWIwZDcyMDliYjZkMGUxOTMxNmUxZTJhZjFhYTljMjEzOTEwNCB2My40LjBhNAorMzQwNWRjOWE2YWZhYTBhMDZkZDFmNmYxODJlYzVjOTk4ZGNlNmY1ZiB2My40LjBiMQorYmEzMjkxM2ViMTNlYzU0NWE0NmRkMGNlMTgwMzViNmM0MTZmMGQ3OCB2My40LjBiMgorYTk3Y2UzZWNjOTZhZjc5YmQyZTFhYzY2Y2U0OGQ5MTM4ZTBjYTc0OSB2My40LjBiMworNWUwODhjZWE4NjYwNjc3OTY5MTEzNzQxYzEzMTNkNTcwZDk3N2UwMiB2My40LjByYzEKK2EzMDA3MTJlZDM4YzlhMjQyYjczNmM0NGU4MDZjYWVhMjVhNmRjMDUgdjMuNC4wcmMyCis4YTgxY2RhYjNlOWQ1MjFkYWFlZjk4OWZhZGU5NGIxNjQ1NWZjM2I4IHYzLjQuMHJjMworMDRmNzE0NzY1YzEzODI0YzNiYzI4MzVkN2IwMDg5MDg4NjJlMDgzYSB2My40LjAKK2M2N2ExOWUxMWE3MTkxYmFmMzBmMzEzYmY1NWUyZTBiNmM2ZjU3NGUgdjMuNC4xcmMxCitjMGUzMTFlMDEwZmNiNWJhZThkODdjYTIyMDUxY2QwODQ1ZWEwY2EwIHYzLjQuMQorODcxMWEwOTUxMzg0OGNmYzQ4YzY4OWQ5ODM0OTVlZTY0ZjQ2NjhjYSB2My40LjJyYzEKK2FiMmMwMjNhOTQzMmYxNjY1MmU4OWM0MDRiYmM4NGFhOTFiZjU1YWYgdjMuNC4yCis2OWRkNTI4Y2E2MjU1YTY2YzM3Y2M1Y2Y2ODBlODM1N2QxMDhiMDM2IHYzLjQuM3JjMQorYjRjYmVjYmMwNzgxZTg5YTMwOWQwM2I2MGExZjc1Zjg0OTkyNTBlNiB2My40LjMKKzA0ZjNmNzI1ODk2YzY5NjEyMTJjM2ExMmU4YWMyNWJlNjk1OGY0ZmEgdjMuNC40cmMxCis3MzdlZmNhZGY1YTY3OGIxODRlMGZhNDMxYWFlMTEyNzZiZjA2NjQ4IHYzLjQuNAorMzYzMWJiNGEyNDkwMjkyZWJmODFkM2U5NDdhZTM2ZGExNDVkYTU2NCB2My40LjVyYzEKKzYxOWI2MWU1MDVkMGUyY2NjODUxNmIzNjZlNGRkZDE5NzFiNDZhNmYgdjMuNC41CmRpZmYgLS1naXQgYS8uaGd0b3VjaCBiLy5oZ3RvdWNoCmluZGV4IGE2MjlkZTkuLjdlM2E1ZTcgMTAwNjQ0Ci0tLSBhLy5oZ3RvdWNoCisrKyBiLy5oZ3RvdWNoCkBAIC00LDggKzQsNyBAQAogCiBQeXRob24vaW1wb3J0bGliLmg6IExpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weSBNb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKIAotSW5jbHVkZS9hc3QuaDogUGFyc2VyL1B5dGhvbi5hc2RsIFBhcnNlci9hc2RsLnB5IFBhcnNlci9hc2RsX2MucHkKLUluY2x1ZGUvUHl0aG9uLWFzdC5oOiBJbmNsdWRlL2FzdC5oCitJbmNsdWRlL1B5dGhvbi1hc3QuaDogUGFyc2VyL1B5dGhvbi5hc2RsIFBhcnNlci9hc2RsLnB5IFBhcnNlci9hc2RsX2MucHkKIFB5dGhvbi9QeXRob24tYXN0LmM6IEluY2x1ZGUvUHl0aG9uLWFzdC5oCiAKIFB5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oOiBQeXRob24vbWFrZW9wY29kZXRhcmdldHMucHkgTGliL29wY29kZS5weQpkaWZmIC0tZ2l0IGEvRG9jL01ha2VmaWxlIGIvRG9jL01ha2VmaWxlCmluZGV4IDgyZjViZWYuLjIyMjBkOTIgMTAwNjQ0Ci0tLSBhL0RvYy9NYWtlZmlsZQorKysgYi9Eb2MvTWFrZWZpbGUKQEAgLTUsMjQgKzUsMjMgQEAKIAogIyBZb3UgY2FuIHNldCB0aGVzZSB2YXJpYWJsZXMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgogUFlUSE9OICAgICAgID0gcHl0aG9uCi1TVk5ST09UICAgICAgPSBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMKLVNQSElOWE9QVFMgICA9CitTUEhJTlhCVUlMRCAgPSBzcGhpbngtYnVpbGQKIFBBUEVSICAgICAgICA9CiBTT1VSQ0VTICAgICAgPQotRElTVFZFUlNJT04gID0gJChzaGVsbCAkKFBZVEhPTikgdG9vbHMvc3BoaW54ZXh0L3BhdGNobGV2ZWwucHkpCitESVNUVkVSU0lPTiAgPSAkKHNoZWxsICQoUFlUSE9OKSB0b29scy9leHRlbnNpb25zL3BhdGNobGV2ZWwucHkpCiAKIEFMTFNQSElOWE9QVFMgPSAtYiAkKEJVSUxERVIpIC1kIGJ1aWxkL2RvY3RyZWVzIC1EIGxhdGV4X3BhcGVyX3NpemU9JChQQVBFUikgXAogICAgICAgICAgICAgICAgICQoU1BISU5YT1BUUykgLiBidWlsZC8kKEJVSUxERVIpICQoU09VUkNFUykKIAotLlBIT05ZOiBoZWxwIGNoZWNrb3V0IHVwZGF0ZSBidWlsZCBodG1sIGh0bWxoZWxwIGxhdGV4IHRleHQgY2hhbmdlcyBsaW5rY2hlY2sgXAorLlBIT05ZOiBoZWxwIGJ1aWxkIGh0bWwgaHRtbGhlbHAgbGF0ZXggdGV4dCBjaGFuZ2VzIGxpbmtjaGVjayBcCiAJc3VzcGljaW91cyBjb3ZlcmFnZSBkb2N0ZXN0IHB5ZG9jLXRvcGljcyBodG1sdmlldyBjbGVhbiBkaXN0IGNoZWNrIHNlcnZlIFwKIAlhdXRvYnVpbGQtZGV2IGF1dG9idWlsZC1zdGFibGUKIAogaGVscDoKIAlAZWNobyAiUGxlYXNlIHVzZSBcYG1ha2UgPHRhcmdldD4nIHdoZXJlIDx0YXJnZXQ+IGlzIG9uZSBvZiIKIAlAZWNobyAiICBjbGVhbiAgICAgIHRvIHJlbW92ZSBidWlsZCBmaWxlcyIKLQlAZWNobyAiICB1cGRhdGUgICAgIHRvIHVwZGF0ZSBidWlsZCB0b29scyIKIAlAZWNobyAiICBodG1sICAgICAgIHRvIG1ha2Ugc3RhbmRhbG9uZSBIVE1MIGZpbGVzIgorCUBlY2hvICIgIGh0bWx2aWV3ICAgdG8gb3BlbiB0aGUgaW5kZXggcGFnZSBidWlsdCBieSB0aGUgaHRtbCB0YXJnZXQgaW4geW91ciBicm93c2VyIgogCUBlY2hvICIgIGh0bWxoZWxwICAgdG8gbWFrZSBIVE1MIGZpbGVzIGFuZCBhIEhUTUwgaGVscCBwcm9qZWN0IgogCUBlY2hvICIgIGxhdGV4ICAgICAgdG8gbWFrZSBMYVRlWCBmaWxlcywgeW91IGNhbiBzZXQgUEFQRVI9YTQgb3IgUEFQRVI9bGV0dGVyIgogCUBlY2hvICIgIHRleHQgICAgICAgdG8gbWFrZSBwbGFpbiB0ZXh0IGZpbGVzIgpAQCAtMzcsMzAgKzM2LDggQEAKIAlAZWNobyAiICBjaGVjayAgICAgIHRvIHJ1biBhIGNoZWNrIGZvciBmcmVxdWVudCBtYXJrdXAgZXJyb3JzIgogCUBlY2hvICIgIHNlcnZlICAgICAgdG8gc2VydmUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGxvY2FsaG9zdCAoODAwMCkiCiAKLSMgTm90ZTogaWYgeW91IHVwZGF0ZSB2ZXJzaW9ucyBoZXJlLCBkbyB0aGUgc2FtZSBpbiBtYWtlLmJhdCBhbmQgUkVBRE1FLnR4dAotY2hlY2tvdXQ6Ci0JQGlmIFsgISAtZCB0b29scy9zcGhpbnggXTsgdGhlbiBcCi0JICBlY2hvICJDaGVja2luZyBvdXQgU3BoaW54Li4uIjsgXAotCSAgc3ZuIGNoZWNrb3V0ICQoU1ZOUk9PVCkvZXh0ZXJuYWwvU3BoaW54LTEuMi9zcGhpbnggdG9vbHMvc3BoaW54OyBcCi0JZmkKLQlAaWYgWyAhIC1kIHRvb2xzL2RvY3V0aWxzIF07IHRoZW4gXAotCSAgZWNobyAiQ2hlY2tpbmcgb3V0IERvY3V0aWxzLi4uIjsgXAotCSAgc3ZuIGNoZWNrb3V0ICQoU1ZOUk9PVCkvZXh0ZXJuYWwvZG9jdXRpbHMtMC4xMS9kb2N1dGlscyB0b29scy9kb2N1dGlsczsgXAotCWZpCi0JQGlmIFsgISAtZCB0b29scy9qaW5qYTIgXTsgdGhlbiBcCi0JICBlY2hvICJDaGVja2luZyBvdXQgSmluamEuLi4iOyBcCi0JICBzdm4gY2hlY2tvdXQgJChTVk5ST09UKS9leHRlcm5hbC9KaW5qYS0yLjMuMS9qaW5qYTIgdG9vbHMvamluamEyOyBcCi0JZmkKLQlAaWYgWyAhIC1kIHRvb2xzL3B5Z21lbnRzIF07IHRoZW4gXAotCSAgZWNobyAiQ2hlY2tpbmcgb3V0IFB5Z21lbnRzLi4uIjsgXAotCSAgc3ZuIGNoZWNrb3V0ICQoU1ZOUk9PVCkvZXh0ZXJuYWwvUHlnbWVudHMtMS42L3B5Z21lbnRzIHRvb2xzL3B5Z21lbnRzOyBcCi0JZmkKLQotdXBkYXRlOiBjbGVhbiBjaGVja291dAotCi1idWlsZDogY2hlY2tvdXQKLQlta2RpciAtcCBidWlsZC8kKEJVSUxERVIpIGJ1aWxkL2RvY3RyZWVzCi0JJChQWVRIT04pIHRvb2xzL3NwaGlueC1idWlsZC5weSAkKEFMTFNQSElOWE9QVFMpCitidWlsZDoKKwkkKFNQSElOWEJVSUxEKSAkKEFMTFNQSElOWE9QVFMpCiAJQGVjaG8KIAogaHRtbDogQlVJTERFUiA9IGh0bWwKQEAgLTkxLDI0ICs2OCwzMCBAQAogCUBlY2hvICJUaGUgb3ZlcnZpZXcgZmlsZSBpcyBpbiBidWlsZC9jaGFuZ2VzLiIKIAogbGlua2NoZWNrOiBCVUlMREVSID0gbGlua2NoZWNrCi1saW5rY2hlY2s6IGJ1aWxkCi0JQGVjaG8gIkxpbmsgY2hlY2sgY29tcGxldGU7IGxvb2sgZm9yIGFueSBlcnJvcnMgaW4gdGhlIGFib3ZlIG91dHB1dCIgXAotCSAgICAgICJvciBpbiBidWlsZC8kKEJVSUxERVIpL291dHB1dC50eHQiCitsaW5rY2hlY2s6CisJQCQoTUFLRSkgYnVpbGQgQlVJTERFUj0kKEJVSUxERVIpIHx8IHsgXAorCWVjaG8gIkxpbmsgY2hlY2sgY29tcGxldGU7IGxvb2sgZm9yIGFueSBlcnJvcnMgaW4gdGhlIGFib3ZlIG91dHB1dCIgXAorCSAgICAgIm9yIGluIGJ1aWxkLyQoQlVJTERFUikvb3V0cHV0LnR4dCI7IFwKKwlmYWxzZTsgfQogCiBzdXNwaWNpb3VzOiBCVUlMREVSID0gc3VzcGljaW91cwotc3VzcGljaW91czogYnVpbGQKLQlAZWNobyAiU3VzcGljaW91cyBjaGVjayBjb21wbGV0ZTsgbG9vayBmb3IgYW55IGVycm9ycyBpbiB0aGUgYWJvdmUgb3V0cHV0IiBcCi0JICAgICAgIm9yIGluIGJ1aWxkLyQoQlVJTERFUikvc3VzcGljaW91cy5jc3YuICBJZiBhbGwgaXNzdWVzIGFyZSBmYWxzZSIgXAotCSAgICAgICJwb3NpdGl2ZXMsIGFwcGVuZCB0aGF0IGZpbGUgdG8gdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YuIgorc3VzcGljaW91czoKKwlAJChNQUtFKSBidWlsZCBCVUlMREVSPSQoQlVJTERFUikgfHwgeyBcCisJZWNobyAiU3VzcGljaW91cyBjaGVjayBjb21wbGV0ZTsgbG9vayBmb3IgYW55IGVycm9ycyBpbiB0aGUgYWJvdmUgb3V0cHV0IiBcCisJICAgICAib3IgaW4gYnVpbGQvJChCVUlMREVSKS9zdXNwaWNpb3VzLmNzdi4gIElmIGFsbCBpc3N1ZXMgYXJlIGZhbHNlIiBcCisJICAgICAicG9zaXRpdmVzLCBhcHBlbmQgdGhhdCBmaWxlIHRvIHRvb2xzL3N1c3AtaWdub3JlZC5jc3YuIjsgXAorCWZhbHNlOyB9CiAKIGNvdmVyYWdlOiBCVUlMREVSID0gY292ZXJhZ2UKIGNvdmVyYWdlOiBidWlsZAogCUBlY2hvICJDb3ZlcmFnZSBmaW5pc2hlZDsgc2VlIGMudHh0IGFuZCBweXRob24udHh0IGluIGJ1aWxkL2NvdmVyYWdlIgogCiBkb2N0ZXN0OiBCVUlMREVSID0gZG9jdGVzdAotZG9jdGVzdDogYnVpbGQKLQlAZWNobyAiVGVzdGluZyBvZiBkb2N0ZXN0cyBpbiB0aGUgc291cmNlcyBmaW5pc2hlZCwgbG9vayBhdCB0aGUiIFwKLQkgICAgICAicmVzdWx0cyBpbiBidWlsZC9kb2N0ZXN0L291dHB1dC50eHQiCitkb2N0ZXN0OgorCUAkKE1BS0UpIGJ1aWxkIEJVSUxERVI9JChCVUlMREVSKSB8fCB7IFwKKwllY2hvICJUZXN0aW5nIG9mIGRvY3Rlc3RzIGluIHRoZSBzb3VyY2VzIGZpbmlzaGVkLCBsb29rIGF0IHRoZSIgXAorCSAgICAgInJlc3VsdHMgaW4gYnVpbGQvZG9jdGVzdC9vdXRwdXQudHh0IjsgXAorCWZhbHNlOyB9CiAKIHB5ZG9jLXRvcGljczogQlVJTERFUiA9IHB5ZG9jLXRvcGljcwogcHlkb2MtdG9waWNzOiBidWlsZApAQCAtMTIwLDEwICsxMDMsNiBAQAogCiBjbGVhbjoKIAktcm0gLXJmIGJ1aWxkLyoKLQktcm0gLXJmIHRvb2xzL3NwaGlueAotCS1ybSAtcmYgdG9vbHMvcHlnbWVudHMKLQktcm0gLXJmIHRvb2xzL2ppbmphMgotCS1ybSAtcmYgdG9vbHMvZG9jdXRpbHMKIAogZGlzdDoKIAlybSAtcmYgZGlzdApAQCAtMTYzLDE2ICsxNDIsMTAgQEAKIAljcCBidWlsZC9sYXRleC9kb2NzLXBkZi56aXAgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1wZGYtbGV0dGVyLnppcAogCWNwIGJ1aWxkL2xhdGV4L2RvY3MtcGRmLnRhci5iejIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1wZGYtbGV0dGVyLnRhci5iejIKIAotCSMgYXJjaGl2ZSB0aGUgZXB1YiBidWlsZAorCSMgY29weSB0aGUgZXB1YiBidWlsZAogCXJtIC1yZiBidWlsZC9lcHViCiAJbWFrZSBlcHViCi0JbWtkaXIgLXAgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViCi0JY3AgLXBQUiBidWlsZC9lcHViLyouZXB1YiBkaXN0L3B5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIvCi0JdGFyIC1DIGRpc3QgLWNmIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1Yi50YXIgcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1YgotCWJ6aXAyIC05IC1rIGRpc3QvcHl0aG9uLSQoRElTVFZFUlNJT04pLWRvY3MtZXB1Yi50YXIKLQkoY2QgZGlzdDsgemlwIC1xIC1yIC05IHB5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIuemlwIHB5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLWVwdWIpCi0Jcm0gLXIgZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViCi0Jcm0gZGlzdC9weXRob24tJChESVNUVkVSU0lPTiktZG9jcy1lcHViLnRhcgorCWNwIC1wUFIgYnVpbGQvZXB1Yi9QeXRob24uZXB1YiBkaXN0L3B5dGhvbi0kKERJU1RWRVJTSU9OKS1kb2NzLmVwdWIKIAogY2hlY2s6CiAJJChQWVRIT04pIHRvb2xzL3JzdGxpbnQucHkgLWkgdG9vbHMKQEAgLTE4NCwxOSArMTU3LDI1IEBACiAKICMgZm9yIGRldmVsb3BtZW50IHJlbGVhc2VzOiBhbHdheXMgYnVpbGQKIGF1dG9idWlsZC1kZXY6Ci0JbWFrZSB1cGRhdGUKIAltYWtlIGRpc3QgU1BISU5YT1BUUz0nLUEgZGFpbHk9MSAtQSB2ZXJzaW9uc3dpdGNoZXI9MScKIAktbWFrZSBzdXNwaWNpb3VzCiAKICMgZm9yIHF1aWNrIHJlYnVpbGRzIChIVE1MIG9ubHkpCi1hdXRvYnVpbGQtaHRtbDoKK2F1dG9idWlsZC1kZXYtaHRtbDoKIAltYWtlIGh0bWwgU1BISU5YT1BUUz0nLUEgZGFpbHk9MSAtQSB2ZXJzaW9uc3dpdGNoZXI9MScKIAotIyBmb3Igc3RhYmxlIHJlbGVhc2VzOiBvbmx5IGJ1aWxkIGlmIG5vdCBpbiBwcmUtcmVsZWFzZSBzdGFnZSAoYWxwaGEsIGJldGEsIHJjKQorIyBmb3Igc3RhYmxlIHJlbGVhc2VzOiBvbmx5IGJ1aWxkIGlmIG5vdCBpbiBwcmUtcmVsZWFzZSBzdGFnZSAoYWxwaGEsIGJldGEpCisjIHJlbGVhc2UgY2FuZGlkYXRlIGRvd25sb2FkcyBhcmUgb2theSwgc2luY2UgdGhlIHN0YWJsZSB0cmVlIGNhbiBiZSBpbiB0aGF0IHN0YWdlCiBhdXRvYnVpbGQtc3RhYmxlOgotCUBjYXNlICQoRElTVFZFUlNJT04pIGluICpbYWJjXSopIFwKKwlAY2FzZSAkKERJU1RWRVJTSU9OKSBpbiAqW2FiXSopIFwKIAkJZWNobyAiTm90IGJ1aWxkaW5nOyAkKERJU1RWRVJTSU9OKSBpcyBub3QgYSByZWxlYXNlIHZlcnNpb24uIjsgXAogCQlleGl0IDE7OyBcCiAJZXNhYwogCUBtYWtlIGF1dG9idWlsZC1kZXYKIAorYXV0b2J1aWxkLXN0YWJsZS1odG1sOgorCUBjYXNlICQoRElTVFZFUlNJT04pIGluICpbYWJdKikgXAorCQllY2hvICJOb3QgYnVpbGRpbmc7ICQoRElTVFZFUlNJT04pIGlzIG5vdCBhIHJlbGVhc2UgdmVyc2lvbi4iOyBcCisJCWV4aXQgMTs7IFwKKwllc2FjCisJQG1ha2UgYXV0b2J1aWxkLWRldi1odG1sCmRpZmYgLS1naXQgYS9Eb2MvUkVBRE1FLnR4dCBiL0RvYy9SRUFETUUudHh0CmluZGV4IGQxN2QwMzIuLmY5ODVlNmUgMTAwNjQ0Ci0tLSBhL0RvYy9SRUFETUUudHh0CisrKyBiL0RvYy9SRUFETUUudHh0CkBAIC0zLDM0ICszLDMwIEBACiAKIFRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIHRoZSByZVN0cnVjdHVyZWRUZXh0IChyZVNUKSBzb3VyY2VzIHRvIHRoZSBQeXRob24KIGRvY3VtZW50YXRpb24uICBZb3UgZG9uJ3QgbmVlZCB0byBidWlsZCB0aGVtIHlvdXJzZWxmLCBwcmVidWlsdCB2ZXJzaW9ucyBhcmUKLWF2YWlsYWJsZSBhdCBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rvd25sb2FkLy4KK2F2YWlsYWJsZSBhdCA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L2Rvd25sb2FkLmh0bWw+LgogCi1Eb2N1bWVudGF0aW9uIG9uIHRoZSBhdXRob3JpbmcgUHl0aG9uIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhYm91dAorRG9jdW1lbnRhdGlvbiBvbiBhdXRob3JpbmcgUHl0aG9uIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyBpbmZvcm1hdGlvbiBhYm91dAogYm90aCBzdHlsZSBhbmQgbWFya3VwLCBpcyBhdmFpbGFibGUgaW4gdGhlICJEb2N1bWVudGluZyBQeXRob24iIGNoYXB0ZXIgb2YgdGhlCi1kb2N1bWVudGF0aW9uLgorZGV2ZWxvcGVycyBndWlkZSA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvZG9jdW1lbnRpbmcuaHRtbD4uCiAKIAogQnVpbGRpbmcgdGhlIGRvY3MKID09PT09PT09PT09PT09PT09CiAKLVlvdSBuZWVkIHRvIGhhdmUgUHl0aG9uIDIgaW5zdGFsbGVkOyB0aGUgdG9vbHNldCB1c2VkIHRvIGJ1aWxkIHRoZQotZG9jcyBpcyB3cml0dGVuIGluIFB5dGhvbi4gIEl0IGlzIGNhbGxlZCAqU3BoaW54KiwgaXQgaXMgbm90IGluY2x1ZGVkIGluIHRoaXMKLXRyZWUsIGJ1dCBtYWludGFpbmVkIHNlcGFyYXRlbHkuICBBbHNvIG5lZWRlZCBhcmUgdGhlIGRvY3V0aWxzLCBzdXBwbHlpbmcgdGhlCi1iYXNlIG1hcmt1cCB0aGF0IFNwaGlueCB1c2VzLCBKaW5qYSwgYSB0ZW1wbGF0aW5nIGVuZ2luZSwgYW5kIG9wdGlvbmFsbHkKLVB5Z21lbnRzLCBhIGNvZGUgaGlnaGxpZ2h0ZXIuCitZb3UgbmVlZCB0byBoYXZlIFNwaGlueCA8aHR0cDovL3NwaGlueC1kb2Mub3JnLz4gaW5zdGFsbGVkOyBpdCBpcyB0aGUgdG9vbHNldAordXNlZCB0byBidWlsZCB0aGUgZG9jcy4gIEl0IGlzIG5vdCBpbmNsdWRlZCBpbiB0aGlzIHRyZWUsIGJ1dCBtYWludGFpbmVkCitzZXBhcmF0ZWx5IGFuZCBhdmFpbGFibGUgZnJvbSBQeVBJIDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL1NwaGlueD4uCiAKIAogVXNpbmcgbWFrZQogLS0tLS0tLS0tLQogCi1MdWNraWx5LCBhIE1ha2VmaWxlIGhhcyBiZWVuIHByZXBhcmVkIHNvIHRoYXQgb24gVW5peCwgcHJvdmlkZWQgeW91IGhhdmUKLWluc3RhbGxlZCBQeXRob24gYW5kIFN1YnZlcnNpb24sIHlvdSBjYW4ganVzdCBydW4gOjoKK0EgTWFrZWZpbGUgaGFzIGJlZW4gcHJlcGFyZWQgc28gdGhhdCBvbiBVbml4LCBwcm92aWRlZCB5b3UgaGF2ZSBpbnN0YWxsZWQKK1NwaGlueCwgeW91IGNhbiBqdXN0IHJ1biA6OgogCiAgICBtYWtlIGh0bWwKIAotdG8gY2hlY2sgb3V0IHRoZSBuZWNlc3NhcnkgdG9vbHNldCBpbiB0aGUgYHRvb2xzL2Agc3ViZGlyZWN0b3J5IGFuZCBidWlsZCB0aGUKLUhUTUwgb3V0cHV0IGZpbGVzLiAgVG8gdmlldyB0aGUgZ2VuZXJhdGVkIEhUTUwsIHBvaW50IHlvdXIgZmF2b3JpdGUgYnJvd3NlciBhdAotdGhlIHRvcC1sZXZlbCBpbmRleCBgYnVpbGQvaHRtbC9pbmRleC5odG1sYCBhZnRlciBydW5uaW5nICJtYWtlIi4KK3RvIGJ1aWxkIHRoZSBIVE1MIG91dHB1dCBmaWxlcy4KIAogT24gV2luZG93cywgd2UgdHJ5IHRvIGVtdWxhdGUgdGhlIE1ha2VmaWxlIGFzIGNsb3NlbHkgYXMgcG9zc2libGUgd2l0aCBhCiBgYG1ha2UuYmF0YGAgZmlsZS4KQEAgLTM4LDQ3ICszNCw2MiBAQAogVG8gdXNlIGEgUHl0aG9uIGludGVycHJldGVyIHRoYXQncyBub3QgY2FsbGVkIGBgcHl0aG9uYGAsIHVzZSB0aGUgc3RhbmRhcmQKIHdheSB0byBzZXQgTWFrZWZpbGUgdmFyaWFibGVzLCB1c2luZyBlLmcuIDo6CiAKLSAgIG1ha2UgaHRtbCBQWVRIT049L3Vzci9iaW4vcHl0aG9uMi41CisgICBtYWtlIGh0bWwgUFlUSE9OPXB5dGhvbjMKKworT24gV2luZG93cywgc2V0IHRoZSBQWVRIT04gZW52aXJvbm1lbnQgdmFyaWFibGUgaW5zdGVhZC4KKworVG8gdXNlIGEgc3BlY2lmaWMgc3BoaW54LWJ1aWxkIChzb21ldGhpbmcgb3RoZXIgdGhhbiBgYHNwaGlueC1idWlsZGBgKSwgc2V0Cit0aGUgU1BISU5YQlVJTEQgdmFyaWFibGUuCiAKIEF2YWlsYWJsZSBtYWtlIHRhcmdldHMgYXJlOgogCi0gKiAiaHRtbCIsIHdoaWNoIGJ1aWxkcyBzdGFuZGFsb25lIEhUTUwgZmlsZXMgZm9yIG9mZmxpbmUgdmlld2luZy4KKyogImNsZWFuIiwgd2hpY2ggcmVtb3ZlcyBhbGwgYnVpbGQgZmlsZXMuCiAKLSAqICJodG1saGVscCIsIHdoaWNoIGJ1aWxkcyBIVE1MIGZpbGVzIGFuZCBhIEhUTUwgSGVscCBwcm9qZWN0IGZpbGUgdXNhYmxlIHRvCi0gICBjb252ZXJ0IHRoZW0gaW50byBhIHNpbmdsZSBDb21waWxlZCBIVE1MICguY2htKSBmaWxlIC0tIHRoZXNlIGFyZSBwb3B1bGFyCi0gICB1bmRlciBNaWNyb3NvZnQgV2luZG93cywgYnV0IHZlcnkgaGFuZHkgb24gZXZlcnkgcGxhdGZvcm0uCisqICJodG1sIiwgd2hpY2ggYnVpbGRzIHN0YW5kYWxvbmUgSFRNTCBmaWxlcyBmb3Igb2ZmbGluZSB2aWV3aW5nLgogCi0gICBUbyBjcmVhdGUgdGhlIENITSBmaWxlLCB5b3UgbmVlZCB0byBydW4gdGhlIE1pY3Jvc29mdCBIVE1MIEhlbHAgV29ya3Nob3Agb3ZlcgotICAgdGhlIGdlbmVyYXRlZCBwcm9qZWN0ICguaGhwKSBmaWxlLgorKiAiaHRtbHZpZXciLCB3aGljaCByZS11c2VzIHRoZSAiaHRtbCIgYnVpbGRlciwgYnV0IHRoZW4gb3BlbnMgdGhlIG1haW4gcGFnZQorICBpbiB5b3VyIGRlZmF1bHQgd2ViIGJyb3dzZXIuCiAKLSAqICJsYXRleCIsIHdoaWNoIGJ1aWxkcyBMYVRlWCBzb3VyY2UgZmlsZXMgYXMgaW5wdXQgdG8gInBkZmxhdGV4IiB0byBwcm9kdWNlCi0gICBQREYgZG9jdW1lbnRzLgorKiAiaHRtbGhlbHAiLCB3aGljaCBidWlsZHMgSFRNTCBmaWxlcyBhbmQgYSBIVE1MIEhlbHAgcHJvamVjdCBmaWxlIHVzYWJsZSB0bworICBjb252ZXJ0IHRoZW0gaW50byBhIHNpbmdsZSBDb21waWxlZCBIVE1MICguY2htKSBmaWxlIC0tIHRoZXNlIGFyZSBwb3B1bGFyCisgIHVuZGVyIE1pY3Jvc29mdCBXaW5kb3dzLCBidXQgdmVyeSBoYW5keSBvbiBldmVyeSBwbGF0Zm9ybS4KIAotICogInRleHQiLCB3aGljaCBidWlsZHMgYSBwbGFpbiB0ZXh0IGZpbGUgZm9yIGVhY2ggc291cmNlIGZpbGUuCisgIFRvIGNyZWF0ZSB0aGUgQ0hNIGZpbGUsIHlvdSBuZWVkIHRvIHJ1biB0aGUgTWljcm9zb2Z0IEhUTUwgSGVscCBXb3Jrc2hvcAorICBvdmVyIHRoZSBnZW5lcmF0ZWQgcHJvamVjdCAoLmhocCkgZmlsZS4gIFRoZSBtYWtlLmJhdCBzY3JpcHQgZG9lcyB0aGlzIGZvcgorICB5b3Ugb24gV2luZG93cy4KIAotICogImVwdWIiLCB3aGljaCBidWlsZHMgYW4gRVBVQiBkb2N1bWVudCwgc3VpdGFibGUgdG8gYmUgdmlld2VkIG9uIGUtYm9vawotICAgcmVhZGVycy4KKyogImxhdGV4Iiwgd2hpY2ggYnVpbGRzIExhVGVYIHNvdXJjZSBmaWxlcyBhcyBpbnB1dCB0byAicGRmbGF0ZXgiIHRvIHByb2R1Y2UKKyAgUERGIGRvY3VtZW50cy4KIAotICogImxpbmtjaGVjayIsIHdoaWNoIGNoZWNrcyBhbGwgZXh0ZXJuYWwgcmVmZXJlbmNlcyB0byBzZWUgd2hldGhlciB0aGV5IGFyZQotICAgYnJva2VuLCByZWRpcmVjdGVkIG9yIG1hbGZvcm1lZCwgYW5kIG91dHB1dHMgdGhpcyBpbmZvcm1hdGlvbiB0byBzdGRvdXQgYXMKLSAgIHdlbGwgYXMgYSBwbGFpbi10ZXh0ICgudHh0KSBmaWxlLgorKiAidGV4dCIsIHdoaWNoIGJ1aWxkcyBhIHBsYWluIHRleHQgZmlsZSBmb3IgZWFjaCBzb3VyY2UgZmlsZS4KIAotICogImNoYW5nZXMiLCB3aGljaCBidWlsZHMgYW4gb3ZlcnZpZXcgb3ZlciBhbGwgdmVyc2lvbmFkZGVkL3ZlcnNpb25jaGFuZ2VkLwotICAgZGVwcmVjYXRlZCBpdGVtcyBpbiB0aGUgY3VycmVudCB2ZXJzaW9uLiBUaGlzIGlzIG1lYW50IGFzIGEgaGVscCBmb3IgdGhlCi0gICB3cml0ZXIgb2YgdGhlICJXaGF0J3MgTmV3IiBkb2N1bWVudC4KKyogImVwdWIiLCB3aGljaCBidWlsZHMgYW4gRVBVQiBkb2N1bWVudCwgc3VpdGFibGUgdG8gYmUgdmlld2VkIG9uIGUtYm9vaworICByZWFkZXJzLgogCi0gKiAiY292ZXJhZ2UiLCB3aGljaCBidWlsZHMgYSBjb3ZlcmFnZSBvdmVydmlldyBmb3Igc3RhbmRhcmQgbGlicmFyeSBtb2R1bGVzIGFuZAotICAgQyBBUEkuCisqICJsaW5rY2hlY2siLCB3aGljaCBjaGVja3MgYWxsIGV4dGVybmFsIHJlZmVyZW5jZXMgdG8gc2VlIHdoZXRoZXIgdGhleSBhcmUKKyAgYnJva2VuLCByZWRpcmVjdGVkIG9yIG1hbGZvcm1lZCwgYW5kIG91dHB1dHMgdGhpcyBpbmZvcm1hdGlvbiB0byBzdGRvdXQgYXMKKyAgd2VsbCBhcyBhIHBsYWluLXRleHQgKC50eHQpIGZpbGUuCiAKLSAqICJweWRvYy10b3BpY3MiLCB3aGljaCBidWlsZHMgYSBQeXRob24gbW9kdWxlIGNvbnRhaW5pbmcgYSBkaWN0aW9uYXJ5IHdpdGgKLSAgIHBsYWluIHRleHQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxhYmVscyBkZWZpbmVkIGluCi0gICBgdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHlgIC0tIHB5ZG9jIG5lZWRzIHRoZXNlIHRvIHNob3cgdG9waWMgYW5kCi0gICBrZXl3b3JkIGhlbHAuCisqICJjaGFuZ2VzIiwgd2hpY2ggYnVpbGRzIGFuIG92ZXJ2aWV3IG92ZXIgYWxsIHZlcnNpb25hZGRlZC92ZXJzaW9uY2hhbmdlZC8KKyAgZGVwcmVjYXRlZCBpdGVtcyBpbiB0aGUgY3VycmVudCB2ZXJzaW9uLiBUaGlzIGlzIG1lYW50IGFzIGEgaGVscCBmb3IgdGhlCisgIHdyaXRlciBvZiB0aGUgIldoYXQncyBOZXciIGRvY3VtZW50LgogCi0gKiAic3VzcGljaW91cyIsIHdoaWNoIGNoZWNrcyB0aGUgcGFyc2VkIG1hcmt1cCBmb3IgdGV4dCB0aGF0IGxvb2tzIGxpa2UKLSAgIG1hbGZvcm1lZCBhbmQgdGh1cyB1bmNvbnZlcnRlZCByZVNULgorKiAiY292ZXJhZ2UiLCB3aGljaCBidWlsZHMgYSBjb3ZlcmFnZSBvdmVydmlldyBmb3Igc3RhbmRhcmQgbGlicmFyeSBtb2R1bGVzIGFuZAorICBDIEFQSS4KIAotQSAibWFrZSB1cGRhdGUiIHVwZGF0ZXMgdGhlIFN1YnZlcnNpb24gY2hlY2tvdXRzIGluIGB0b29scy9gLgorKiAicHlkb2MtdG9waWNzIiwgd2hpY2ggYnVpbGRzIGEgUHl0aG9uIG1vZHVsZSBjb250YWluaW5nIGEgZGljdGlvbmFyeSB3aXRoCisgIHBsYWluIHRleHQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGxhYmVscyBkZWZpbmVkIGluCisgIGB0b29scy9weXNwZWNpZmljLnB5YCAtLSBweWRvYyBuZWVkcyB0aGVzZSB0byBzaG93IHRvcGljIGFuZCBrZXl3b3JkIGhlbHAuCisKKyogInN1c3BpY2lvdXMiLCB3aGljaCBjaGVja3MgdGhlIHBhcnNlZCBtYXJrdXAgZm9yIHRleHQgdGhhdCBsb29rcyBsaWtlCisgIG1hbGZvcm1lZCBhbmQgdGh1cyB1bmNvbnZlcnRlZCByZVNULgorCisqICJjaGVjayIsIHdoaWNoIGNoZWNrcyBmb3IgZnJlcXVlbnQgbWFya3VwIGVycm9ycy4KKworKiAic2VydmUiLCB3aGljaCBzZXJ2ZXMgdGhlIGJ1aWxkL2h0bWwgZGlyZWN0b3J5IG9uIHBvcnQgODAwMC4KKworKiAiZGlzdCIsIChVbml4IG9ubHkpIHdoaWNoIGNyZWF0ZXMgZGlzdHJpYnV0YWJsZSBhcmNoaXZlcyBvZiBIVE1MLCB0ZXh0LAorICBQREYsIGFuZCBFUFVCIGJ1aWxkcy4KIAogCiBXaXRob3V0IG1ha2UKQEAgLTg2LDcgKzk3LDcgQEAKIAogSW5zdGFsbCB0aGUgU3BoaW54IHBhY2thZ2UgYW5kIGl0cyBkZXBlbmRlbmNpZXMgZnJvbSBQeVBJLgogCi1UaGVuLCBmcm9tIHRoZSBgYERvY3NgYCBkaXJlY3RvcnksIHJ1biA6OgorVGhlbiwgZnJvbSB0aGUgYGBEb2NgYCBkaXJlY3RvcnksIHJ1biA6OgogCiAgICBzcGhpbngtYnVpbGQgLWI8YnVpbGRlcj4gLiBidWlsZC88YnVpbGRlcj4KIApAQCAtOTgsMTAgKzEwOSwxMCBAQAogPT09PT09PT09PT09CiAKIEJ1Z3MgaW4gdGhlIGNvbnRlbnQgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIHRoZSBQeXRob24gYnVnIHRyYWNrZXIgYXQKLWh0dHA6Ly9idWdzLnB5dGhvbi5vcmcuCitodHRwczovL2J1Z3MucHl0aG9uLm9yZy4KIAogQnVncyBpbiB0aGUgdG9vbHNldCBzaG91bGQgYmUgcmVwb3J0ZWQgaW4gdGhlIFNwaGlueCBidWcgdHJhY2tlciBhdAotaHR0cDovL3d3dy5iaXRidWNrZXQub3JnL2JpcmtlbmZlbGQvc3BoaW54L2lzc3Vlcy8uCitodHRwczovL3d3dy5iaXRidWNrZXQub3JnL2JpcmtlbmZlbGQvc3BoaW54L2lzc3Vlcy8uCiAKIFlvdSBjYW4gYWxzbyBzZW5kIGEgbWFpbCB0byB0aGUgUHl0aG9uIERvY3VtZW50YXRpb24gVGVhbSBhdCBkb2NzQHB5dGhvbi5vcmcsCiBhbmQgd2Ugd2lsbCBwcm9jZXNzIHlvdXIgcmVxdWVzdCBhcyBzb29uIGFzIHBvc3NpYmxlLgpkaWZmIC0tZ2l0IGEvRG9jL2Fib3V0LnJzdCBiL0RvYy9hYm91dC5yc3QKaW5kZXggNjc4MTY4Yi4uM2VhMzExZiAxMDA2NDQKLS0tIGEvRG9jL2Fib3V0LnJzdAorKysgYi9Eb2MvYWJvdXQucnN0CkBAIC02LDcgKzYsNyBAQAogVGhlc2UgZG9jdW1lbnRzIGFyZSBnZW5lcmF0ZWQgZnJvbSBgcmVTdHJ1Y3R1cmVkVGV4dGBfIHNvdXJjZXMgYnkgYFNwaGlueGBfLCBhCiBkb2N1bWVudCBwcm9jZXNzb3Igc3BlY2lmaWNhbGx5IHdyaXR0ZW4gZm9yIHRoZSBQeXRob24gZG9jdW1lbnRhdGlvbi4KIAotLi4gX3JlU3RydWN0dXJlZFRleHQ6IGh0dHA6Ly9kb2N1dGlscy5zZi5uZXQvcnN0Lmh0bWwKKy4uIF9yZVN0cnVjdHVyZWRUZXh0OiBodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0L3JzdC5odG1sCiAuLiBfU3BoaW54OiBodHRwOi8vc3BoaW54LWRvYy5vcmcvCiAKIC4uIEluIHRoZSBvbmxpbmUgdmVyc2lvbiBvZiB0aGVzZSBkb2N1bWVudHMsIHlvdSBjYW4gc3VibWl0IGNvbW1lbnRzIGFuZCBzdWdnZXN0CkBAIC0yMSw3ICsyMSw3IEBACiAKICogRnJlZCBMLiBEcmFrZSwgSnIuLCB0aGUgY3JlYXRvciBvZiB0aGUgb3JpZ2luYWwgUHl0aG9uIGRvY3VtZW50YXRpb24gdG9vbHNldAogICBhbmQgd3JpdGVyIG9mIG11Y2ggb2YgdGhlIGNvbnRlbnQ7Ci0qIHRoZSBgRG9jdXRpbHMgPGh0dHA6Ly9kb2N1dGlscy5zZi5uZXQvPmBfIHByb2plY3QgZm9yIGNyZWF0aW5nCisqIHRoZSBgRG9jdXRpbHMgPGh0dHA6Ly9kb2N1dGlscy5zb3VyY2Vmb3JnZS5uZXQvPmBfIHByb2plY3QgZm9yIGNyZWF0aW5nCiAgIHJlU3RydWN0dXJlZFRleHQgYW5kIHRoZSBEb2N1dGlscyBzdWl0ZTsKICogRnJlZHJpayBMdW5kaCBmb3IgaGlzIGBBbHRlcm5hdGl2ZSBQeXRob24gUmVmZXJlbmNlCiAgIDxodHRwOi8vZWZmYm90Lm9yZy96b25lL3B5cmVmLmh0bT5gXyBwcm9qZWN0IGZyb20gd2hpY2ggU3BoaW54IGdvdCBtYW55IGdvb2QKZGlmZiAtLWdpdCBhL0RvYy9idWdzLnJzdCBiL0RvYy9idWdzLnJzdAppbmRleCA4NDdjMDEwLi5mMDFhZTBlIDEwMDY0NAotLS0gYS9Eb2MvYnVncy5yc3QKKysrIGIvRG9jL2J1Z3MucnN0CkBAIC0yOSw3ICsyOSw3IEBACiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogQnVnIHJlcG9ydHMgZm9yIFB5dGhvbiBpdHNlbGYgc2hvdWxkIGJlIHN1Ym1pdHRlZCB2aWEgdGhlIFB5dGhvbiBCdWcgVHJhY2tlcgotKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvKS4gIFRoZSBidWcgdHJhY2tlciBvZmZlcnMgYSBXZWIgZm9ybSB3aGljaCBhbGxvd3MKKyhodHRwczovL2J1Z3MucHl0aG9uLm9yZy8pLiAgVGhlIGJ1ZyB0cmFja2VyIG9mZmVycyBhIFdlYiBmb3JtIHdoaWNoIGFsbG93cwogcGVydGluZW50IGluZm9ybWF0aW9uIHRvIGJlIGVudGVyZWQgYW5kIHN1Ym1pdHRlZCB0byB0aGUgZGV2ZWxvcGVycy4KIAogVGhlIGZpcnN0IHN0ZXAgaW4gZmlsaW5nIGEgcmVwb3J0IGlzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBwcm9ibGVtIGhhcwpAQCAtNjgsNyArNjgsNyBAQAogICAgICAgQXJ0aWNsZSB3aGljaCBnb2VzIGludG8gc29tZSBkZXRhaWwgYWJvdXQgaG93IHRvIGNyZWF0ZSBhIHVzZWZ1bCBidWcgcmVwb3J0LgogICAgICAgVGhpcyBkZXNjcmliZXMgd2hhdCBraW5kIG9mIGluZm9ybWF0aW9uIGlzIHVzZWZ1bCBhbmQgd2h5IGl0IGlzIHVzZWZ1bC4KIAotICAgYEJ1ZyBXcml0aW5nIEd1aWRlbGluZXMgPGh0dHA6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9CdWdfd3JpdGluZ19ndWlkZWxpbmVzPmBfCisgICBgQnVnIFdyaXRpbmcgR3VpZGVsaW5lcyA8aHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Nb3ppbGxhL1FBL0J1Z193cml0aW5nX2d1aWRlbGluZXM+YF8KICAgICAgIEluZm9ybWF0aW9uIGFib3V0IHdyaXRpbmcgYSBnb29kIGJ1ZyByZXBvcnQuICBTb21lIG9mIHRoaXMgaXMgc3BlY2lmaWMgdG8gdGhlCiAgICAgICBNb3ppbGxhIHByb2plY3QsIGJ1dCBkZXNjcmliZXMgZ2VuZXJhbCBnb29kIHByYWN0aWNlcy4KIApAQCAtODIsNiArODIsNiBAQAogdGhlIGBjb3JlLW1lbnRvcnNoaXAgbWFpbGluZyBsaXN0YF8gaXMgYSBmcmllbmRseSBwbGFjZSB0byBnZXQgYW5zd2VycyB0bwogYW55IGFuZCBhbGwgcXVlc3Rpb25zIHBlcnRhaW5pbmcgdG8gdGhlIHByb2Nlc3Mgb2YgZml4aW5nIGlzc3VlcyBpbiBQeXRob24uCiAKLS4uIF9Eb2N1bWVudGF0aW9uIGJ1Z3M6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU/QGZpbHRlcj1zdGF0dXMmQGZpbHRlcj1jb21wb25lbnRzJmNvbXBvbmVudHM9NCZzdGF0dXM9MSZAY29sdW1ucz1pZCxhY3Rpdml0eSx0aXRsZSxzdGF0dXMmQHNvcnQ9LWFjdGl2aXR5Ci0uLiBfUHl0aG9uIERldmVsb3BlcidzIEd1aWRlOiBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlLworLi4gX0RvY3VtZW50YXRpb24gYnVnczogaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU/QGZpbHRlcj1zdGF0dXMmQGZpbHRlcj1jb21wb25lbnRzJmNvbXBvbmVudHM9NCZzdGF0dXM9MSZAY29sdW1ucz1pZCxhY3Rpdml0eSx0aXRsZSxzdGF0dXMmQHNvcnQ9LWFjdGl2aXR5CisuLiBfUHl0aG9uIERldmVsb3BlcidzIEd1aWRlOiBodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS8KIC4uIF9jb3JlLW1lbnRvcnNoaXAgbWFpbGluZyBsaXN0OiBodHRwczovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2NvcmUtbWVudG9yc2hpcC8KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9hcmcucnN0IGIvRG9jL2MtYXBpL2FyZy5yc3QKaW5kZXggMjhhNDM0ZS4uODQyN2JjNCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2FyZy5yc3QKKysrIGIvRG9jL2MtYXBpL2FyZy5yc3QKQEAgLTY1LDE5ICs2NSwyMCBAQAogICAgOmV4YzpgVW5pY29kZUVycm9yYCBpcyByYWlzZWQuCiAKICAgIC4uIG5vdGU6OgotICAgICAgVGhpcyBmb3JtYXQgZG9lcyBub3QgYWNjZXB0IGJ5dGVzLWxpa2Ugb2JqZWN0cy4gIElmIHlvdSB3YW50IHRvIGFjY2VwdAorICAgICAgVGhpcyBmb3JtYXQgZG9lcyBub3QgYWNjZXB0IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdHMKKyAgICAgIDxieXRlcy1saWtlIG9iamVjdD5gLiAgSWYgeW91IHdhbnQgdG8gYWNjZXB0CiAgICAgICBmaWxlc3lzdGVtIHBhdGhzIGFuZCBjb252ZXJ0IHRoZW0gdG8gQyBjaGFyYWN0ZXIgc3RyaW5ncywgaXQgaXMKICAgICAgIHByZWZlcmFibGUgdG8gdXNlIHRoZSBgYE8mYGAgZm9ybWF0IHdpdGggOmM6ZnVuYzpgUHlVbmljb2RlX0ZTQ29udmVydGVyYAogICAgICAgYXMgKmNvbnZlcnRlciouCiAKLWBgcypgYCAoOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgIG9yIGJ1ZmZlciBjb21wYXRpYmxlIG9iamVjdCkgW1B5X2J1ZmZlcl0KLSAgIFRoaXMgZm9ybWF0IGFjY2VwdHMgVW5pY29kZSBvYmplY3RzIGFzIHdlbGwgYXMgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcy4KK2BgcypgYCAoOmNsYXNzOmBzdHJgIG9yIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGApIFtQeV9idWZmZXJdCisgICBUaGlzIGZvcm1hdCBhY2NlcHRzIFVuaWNvZGUgb2JqZWN0cyBhcyB3ZWxsIGFzIGJ5dGVzLWxpa2Ugb2JqZWN0cy4KICAgIEl0IGZpbGxzIGEgOmM6dHlwZTpgUHlfYnVmZmVyYCBzdHJ1Y3R1cmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KICAgIEluIHRoaXMgY2FzZSB0aGUgcmVzdWx0aW5nIEMgc3RyaW5nIG1heSBjb250YWluIGVtYmVkZGVkIE5VTCBieXRlcy4KICAgIFVuaWNvZGUgb2JqZWN0cyBhcmUgY29udmVydGVkIHRvIEMgc3RyaW5ncyB1c2luZyBgYCd1dGYtOCdgYCBlbmNvZGluZy4KIAotYGBzI2BgICg6Y2xhc3M6YHN0cmAsIDpjbGFzczpgYnl0ZXNgIG9yIHJlYWQtb25seSBidWZmZXIgY29tcGF0aWJsZSBvYmplY3QpIFtjb25zdCBjaGFyIFwqLCBpbnQgb3IgOmM6dHlwZTpgUHlfc3NpemVfdGBdCi0gICBMaWtlIGBgcypgYCwgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhY2NlcHQgbXV0YWJsZSBidWZmZXItbGlrZSBvYmplY3RzCitgYHMjYGAgKDpjbGFzczpgc3RyYCwgcmVhZC1vbmx5IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGApIFtjb25zdCBjaGFyIFwqLCBpbnQgb3IgOmM6dHlwZTpgUHlfc3NpemVfdGBdCisgICBMaWtlIGBgcypgYCwgZXhjZXB0IHRoYXQgaXQgZG9lc24ndCBhY2NlcHQgbXV0YWJsZSBieXRlcy1saWtlIG9iamVjdHMKICAgIHN1Y2ggYXMgOmNsYXNzOmBieXRlYXJyYXlgLiAgVGhlIHJlc3VsdCBpcyBzdG9yZWQgaW50byB0d28gQyB2YXJpYWJsZXMsCiAgICB0aGUgZmlyc3Qgb25lIGEgcG9pbnRlciB0byBhIEMgc3RyaW5nLCB0aGUgc2Vjb25kIG9uZSBpdHMgbGVuZ3RoLgogICAgVGhlIHN0cmluZyBtYXkgY29udGFpbiBlbWJlZGRlZCBudWxsIGJ5dGVzLiBVbmljb2RlIG9iamVjdHMgYXJlIGNvbnZlcnRlZApAQCAtODcsMjggKzg4LDI4IEBACiAgICBMaWtlIGBgc2BgLCBidXQgdGhlIFB5dGhvbiBvYmplY3QgbWF5IGFsc28gYmUgYGBOb25lYGAsIGluIHdoaWNoIGNhc2UgdGhlIEMKICAgIHBvaW50ZXIgaXMgc2V0IHRvICpOVUxMKi4KIAotYGB6KmBgICg6Y2xhc3M6YHN0cmAsIDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAsIGJ1ZmZlciBjb21wYXRpYmxlIG9iamVjdCBvciBgYE5vbmVgYCkgW1B5X2J1ZmZlcl0KK2BgeipgYCAoOmNsYXNzOmBzdHJgLCA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIGBgTm9uZWBgKSBbUHlfYnVmZmVyXQogICAgTGlrZSBgYHMqYGAsIGJ1dCB0aGUgUHl0aG9uIG9iamVjdCBtYXkgYWxzbyBiZSBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZSB0aGUKICAgIGBgYnVmYGAgbWVtYmVyIG9mIHRoZSA6Yzp0eXBlOmBQeV9idWZmZXJgIHN0cnVjdHVyZSBpcyBzZXQgdG8gKk5VTEwqLgogCi1gYHojYGAgKDpjbGFzczpgc3RyYCwgOmNsYXNzOmBieXRlc2AsIHJlYWQtb25seSBidWZmZXIgY29tcGF0aWJsZSBvYmplY3Qgb3IgYGBOb25lYGApIFtjb25zdCBjaGFyIFwqLCBpbnRdCitgYHojYGAgKDpjbGFzczpgc3RyYCwgcmVhZC1vbmx5IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgYGBOb25lYGApIFtjb25zdCBjaGFyIFwqLCBpbnRdCiAgICBMaWtlIGBgcyNgYCwgYnV0IHRoZSBQeXRob24gb2JqZWN0IG1heSBhbHNvIGJlIGBgTm9uZWBgLCBpbiB3aGljaCBjYXNlIHRoZSBDCiAgICBwb2ludGVyIGlzIHNldCB0byAqTlVMTCouCiAKLWBgeWBgICg6Y2xhc3M6YGJ5dGVzYCkgW2NvbnN0IGNoYXIgXCpdCitgYHlgYCAocmVhZC1vbmx5IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGApIFtjb25zdCBjaGFyIFwqXQogICAgVGhpcyBmb3JtYXQgY29udmVydHMgYSBieXRlcy1saWtlIG9iamVjdCB0byBhIEMgcG9pbnRlciB0byBhIGNoYXJhY3RlcgogICAgc3RyaW5nOyBpdCBkb2VzIG5vdCBhY2NlcHQgVW5pY29kZSBvYmplY3RzLiAgVGhlIGJ5dGVzIGJ1ZmZlciBtdXN0IG5vdAogICAgY29udGFpbiBlbWJlZGRlZCBOVUwgYnl0ZXM7IGlmIGl0IGRvZXMsIGEgOmV4YzpgVHlwZUVycm9yYAogICAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KIAotYGB5KmBgICg6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlYXJyYXlgIG9yIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGApIFtQeV9idWZmZXJdCitgYHkqYGAgKDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGApIFtQeV9idWZmZXJdCiAgICBUaGlzIHZhcmlhbnQgb24gYGBzKmBgIGRvZXNuJ3QgYWNjZXB0IFVuaWNvZGUgb2JqZWN0cywgb25seQotICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YFwgcy4gICoqVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgd2F5IHRvIGFjY2VwdAorICAgYnl0ZXMtbGlrZSBvYmplY3RzLiAgKipUaGlzIGlzIHRoZSByZWNvbW1lbmRlZCB3YXkgdG8gYWNjZXB0CiAgICBiaW5hcnkgZGF0YS4qKgogCi1gYHkjYGAgKDpjbGFzczpgYnl0ZXNgKSBbY29uc3QgY2hhciBcKiwgaW50XQotICAgVGhpcyB2YXJpYW50IG9uIGBgcyNgYCBkb2Vzbid0IGFjY2VwdCBVbmljb2RlIG9iamVjdHMsIG9ubHkgOnRlcm06YGJ5dGVzLWxpa2UKLSAgIG9iamVjdGBcIHMuCitgYHkjYGAgKHJlYWQtb25seSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgKSBbY29uc3QgY2hhciBcKiwgaW50XQorICAgVGhpcyB2YXJpYW50IG9uIGBgcyNgYCBkb2Vzbid0IGFjY2VwdCBVbmljb2RlIG9iamVjdHMsIG9ubHkgYnl0ZXMtbGlrZQorICAgb2JqZWN0cy4KIAogYGBTYGAgKDpjbGFzczpgYnl0ZXNgKSBbUHlCeXRlc09iamVjdCBcKl0KICAgIFJlcXVpcmVzIHRoYXQgdGhlIFB5dGhvbiBvYmplY3QgaXMgYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QsIHdpdGhvdXQKQEAgLTI5NSw2ICsyOTYsOCBAQAogICAgdGhlIG9iamVjdCBwb2ludGVyIGlzIHN0b3JlZC4gIElmIHRoZSBQeXRob24gb2JqZWN0IGRvZXMgbm90IGhhdmUgdGhlIHJlcXVpcmVkCiAgICB0eXBlLCA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4KIAorLi4gX29fYW1wZXJzYW5kOgorCiBgYE8mYGAgKG9iamVjdCkgWypjb252ZXJ0ZXIqLCAqYW55dGhpbmcqXQogICAgQ29udmVydCBhIFB5dGhvbiBvYmplY3QgdG8gYSBDIHZhcmlhYmxlIHRocm91Z2ggYSAqY29udmVydGVyKiBmdW5jdGlvbi4gIFRoaXMKICAgIHRha2VzIHR3byBhcmd1bWVudHM6IHRoZSBmaXJzdCBpcyBhIGZ1bmN0aW9uLCB0aGUgc2Vjb25kIGlzIHRoZSBhZGRyZXNzIG9mIGEgQwpAQCAtMzE5LDcgKzMyMiw3IEBACiAgICAgICBgYFB5X0NMRUFOVVBfU1VQUE9SVEVEYGAgd2FzIGFkZGVkLgogCiBgYHBgYCAoOmNsYXNzOmBib29sYCkgW2ludF0KLSAgIFRlc3RzIHRoZSB2YWx1ZSBwYXNzZWQgaW4gZm9yIHRydXRoIChhIGJvb2xlYW4gKipwKipccmVkaWNhdGUpIGFuZCBjb252ZXJ0cworICAgVGVzdHMgdGhlIHZhbHVlIHBhc3NlZCBpbiBmb3IgdHJ1dGggKGEgYm9vbGVhbiAqKnAqKlwgcmVkaWNhdGUpIGFuZCBjb252ZXJ0cwogICAgdGhlIHJlc3VsdCB0byBpdHMgZXF1aXZhbGVudCBDIHRydWUvZmFsc2UgaW50ZWdlciB2YWx1ZS4KICAgIFNldHMgdGhlIGludCB0byAxIGlmIHRoZSBleHByZXNzaW9uIHdhcyB0cnVlIGFuZCAwIGlmIGl0IHdhcyBmYWxzZS4KICAgIFRoaXMgYWNjZXB0cyBhbnkgdmFsaWQgUHl0aG9uIHZhbHVlLiAgU2VlIDpyZWY6YHRydXRoYCBmb3IgbW9yZQpAQCAtNDI3LDEwICs0MzAsMTEgQEAKIAogICAgRnVuY3Rpb24gdXNlZCB0byBkZWNvbnN0cnVjdCB0aGUgYXJndW1lbnQgbGlzdHMgb2YgIm9sZC1zdHlsZSIgZnVuY3Rpb25zIC0tLQogICAgdGhlc2UgYXJlIGZ1bmN0aW9ucyB3aGljaCB1c2UgdGhlIDpjb25zdDpgTUVUSF9PTERBUkdTYCBwYXJhbWV0ZXIgcGFyc2luZwotICAgbWV0aG9kLiAgVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZSBpbiBwYXJhbWV0ZXIgcGFyc2luZyBpbiBuZXcgY29kZSwgYW5kCi0gICBtb3N0IGNvZGUgaW4gdGhlIHN0YW5kYXJkIGludGVycHJldGVyIGhhcyBiZWVuIG1vZGlmaWVkIHRvIG5vIGxvbmdlciB1c2UgdGhpcwotICAgZm9yIHRoYXQgcHVycG9zZS4gIEl0IGRvZXMgcmVtYWluIGEgY29udmVuaWVudCB3YXkgdG8gZGVjb21wb3NlIG90aGVyIHR1cGxlcywKLSAgIGhvd2V2ZXIsIGFuZCBtYXkgY29udGludWUgdG8gYmUgdXNlZCBmb3IgdGhhdCBwdXJwb3NlLgorICAgbWV0aG9kLCB3aGljaCBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLiAgVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZQorICAgaW4gcGFyYW1ldGVyIHBhcnNpbmcgaW4gbmV3IGNvZGUsIGFuZCBtb3N0IGNvZGUgaW4gdGhlIHN0YW5kYXJkIGludGVycHJldGVyCisgICBoYXMgYmVlbiBtb2RpZmllZCB0byBubyBsb25nZXIgdXNlIHRoaXMgZm9yIHRoYXQgcHVycG9zZS4gIEl0IGRvZXMgcmVtYWluIGEKKyAgIGNvbnZlbmllbnQgd2F5IHRvIGRlY29tcG9zZSBvdGhlciB0dXBsZXMsIGhvd2V2ZXIsIGFuZCBtYXkgY29udGludWUgdG8gYmUKKyAgIHVzZWQgZm9yIHRoYXQgcHVycG9zZS4KIAogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5QXJnX1VucGFja1R1cGxlKFB5T2JqZWN0ICphcmdzLCBjb25zdCBjaGFyICpuYW1lLCBQeV9zc2l6ZV90IG1pbiwgUHlfc3NpemVfdCBtYXgsIC4uLikKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9idWZmZXIucnN0IGIvRG9jL2MtYXBpL2J1ZmZlci5yc3QKaW5kZXggYTdkZTM3ZS4uNzM2MTA5OSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2J1ZmZlci5yc3QKKysrIGIvRG9jL2MtYXBpL2J1ZmZlci5yc3QKQEAgLTQwLDcgKzQwLDcgQEAKIAogU2ltcGxlIG9iamVjdHMgc3VjaCBhcyA6Y2xhc3M6YGJ5dGVzYCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIGV4cG9zZSB0aGVpcgogdW5kZXJseWluZyBidWZmZXIgaW4gYnl0ZS1vcmllbnRlZCBmb3JtLiAgT3RoZXIgZm9ybXMgYXJlIHBvc3NpYmxlOyBmb3IgZXhhbXBsZSwKLXRoZSBlbGVtZW50cyBleHBvc2VkIGJ5IGEgOmNsYXNzOmBhcnJheS5hcnJheWAgY2FuIGJlIG11bHRpLWJ5dGUgdmFsdWVzLgordGhlIGVsZW1lbnRzIGV4cG9zZWQgYnkgYW4gOmNsYXNzOmBhcnJheS5hcnJheWAgY2FuIGJlIG11bHRpLWJ5dGUgdmFsdWVzLgogCiBBbiBleGFtcGxlIGNvbnN1bWVyIG9mIHRoZSBidWZmZXIgaW50ZXJmYWNlIGlzIHRoZSA6bWV0aDpgfmlvLkJ1ZmZlcmVkSU9CYXNlLndyaXRlYAogbWV0aG9kIG9mIGZpbGUgb2JqZWN0czogYW55IG9iamVjdCB0aGF0IGNhbiBleHBvcnQgYSBzZXJpZXMgb2YgYnl0ZXMgdGhyb3VnaApAQCAtMTMzLDE1ICsxMzMsMTUgQEAKICAgICAgIGNhbGxlZCBvbiBub24tTlVMTCA6YzptZW1iZXI6YH5QeV9idWZmZXIuZm9ybWF0YCB2YWx1ZXMuCiAKICAgICAgIEltcG9ydGFudCBleGNlcHRpb246IElmIGEgY29uc3VtZXIgcmVxdWVzdHMgYSBidWZmZXIgd2l0aG91dCB0aGUKLSAgICAgIDpjOm1hY3JvOmBQeUJVRl9GT1JNQVRgIGZsYWcsIDpjOm1lbWJlcjpgflB5X0J1ZmZlci5mb3JtYXRgIHdpbGwKKyAgICAgIDpjOm1hY3JvOmBQeUJVRl9GT1JNQVRgIGZsYWcsIDpjOm1lbWJlcjpgflB5X2J1ZmZlci5mb3JtYXRgIHdpbGwKICAgICAgIGJlIHNldCB0byAgKk5VTEwqLCAgYnV0IDpjOm1lbWJlcjpgflB5X2J1ZmZlci5pdGVtc2l6ZWAgc3RpbGwgaGFzCiAgICAgICB0aGUgdmFsdWUgZm9yIHRoZSBvcmlnaW5hbCBmb3JtYXQuCiAKLSAgICAgIElmIDpjOm1lbWJlcjpgflB5X0J1ZmZlci5zaGFwZWAgaXMgcHJlc2VudCwgdGhlIGVxdWFsaXR5CisgICAgICBJZiA6YzptZW1iZXI6YH5QeV9idWZmZXIuc2hhcGVgIGlzIHByZXNlbnQsIHRoZSBlcXVhbGl0eQogICAgICAgYGBwcm9kdWN0KHNoYXBlKSAqIGl0ZW1zaXplID09IGxlbmBgIHN0aWxsIGhvbGRzIGFuZCB0aGUgY29uc3VtZXIKICAgICAgIGNhbiB1c2UgOmM6bWVtYmVyOmB+UHlfYnVmZmVyLml0ZW1zaXplYCB0byBuYXZpZ2F0ZSB0aGUgYnVmZmVyLgogCi0gICAgICBJZiA6YzptZW1iZXI6YH5QeV9CdWZmZXIuc2hhcGVgIGlzICpOVUxMKiBhcyBhIHJlc3VsdCBvZiBhIDpjOm1hY3JvOmBQeUJVRl9TSU1QTEVgCisgICAgICBJZiA6YzptZW1iZXI6YH5QeV9idWZmZXIuc2hhcGVgIGlzICpOVUxMKiBhcyBhIHJlc3VsdCBvZiBhIDpjOm1hY3JvOmBQeUJVRl9TSU1QTEVgCiAgICAgICBvciBhIDpjOm1hY3JvOmBQeUJVRl9XUklUQUJMRWAgcmVxdWVzdCwgdGhlIGNvbnN1bWVyIG11c3QgZGlzcmVnYXJkCiAgICAgICA6YzptZW1iZXI6YH5QeV9idWZmZXIuaXRlbXNpemVgIGFuZCBhc3N1bWUgYGBpdGVtc2l6ZSA9PSAxYGAuCiAKQEAgLTE1Niw3ICsxNTYsNyBAQAogICAgLi4gYzptZW1iZXI6OiBpbnQgbmRpbQogCiAgICAgICBUaGUgbnVtYmVyIG9mIGRpbWVuc2lvbnMgdGhlIG1lbW9yeSByZXByZXNlbnRzIGFzIGFuIG4tZGltZW5zaW9uYWwgYXJyYXkuCi0gICAgICBJZiBpdCBpcyAwLCA6YzptZW1iZXI6YH5QeV9CdWZmZXIuYnVmYCBwb2ludHMgdG8gYSBzaW5nbGUgaXRlbSByZXByZXNlbnRpbmcKKyAgICAgIElmIGl0IGlzIDAsIDpjOm1lbWJlcjpgflB5X2J1ZmZlci5idWZgIHBvaW50cyB0byBhIHNpbmdsZSBpdGVtIHJlcHJlc2VudGluZwogICAgICAgYSBzY2FsYXIuIEluIHRoaXMgY2FzZSwgOmM6bWVtYmVyOmB+UHlfYnVmZmVyLnNoYXBlYCwgOmM6bWVtYmVyOmB+UHlfYnVmZmVyLnN0cmlkZXNgCiAgICAgICBhbmQgOmM6bWVtYmVyOmB+UHlfYnVmZmVyLnN1Ym9mZnNldHNgIE1VU1QgYmUgKk5VTEwqLgogCkBAIC0xOTgsNiArMTk4LDkgQEAKICAgICAgIGluZGljYXRlcyB0aGF0IG5vIGRlLXJlZmVyZW5jaW5nIHNob3VsZCBvY2N1ciAoc3RyaWRpbmcgaW4gYSBjb250aWd1b3VzCiAgICAgICBtZW1vcnkgYmxvY2spLgogCisgICAgICBJZiBhbGwgc3Vib2Zmc2V0cyBhcmUgbmVnYXRpdmUgKGkuZS4gbm8gZGUtcmVmZXJlbmNpbmcgaXMgbmVlZGVkLCB0aGVuCisgICAgICB0aGlzIGZpZWxkIG11c3QgYmUgTlVMTCAodGhlIGRlZmF1bHQgdmFsdWUpLgorCiAgICAgICBUaGlzIHR5cGUgb2YgYXJyYXkgcmVwcmVzZW50YXRpb24gaXMgdXNlZCBieSB0aGUgUHl0aG9uIEltYWdpbmcgTGlicmFyeQogICAgICAgKFBJTCkuIFNlZSBgY29tcGxleCBhcnJheXNgXyBmb3IgZnVydGhlciBpbmZvcm1hdGlvbiBob3cgdG8gYWNjZXNzIGVsZW1lbnRzCiAgICAgICBvZiBzdWNoIGFuIGFycmF5LgpAQCAtNDg5LDggKzQ5Miw4IEBACiAgICA6YzptZW1iZXI6YHZpZXctPm9iamAgdG8gKk5VTEwqIGFuZCByZXR1cm4gLTE7CiAKICAgIElmIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhcyBwYXJ0IG9mIGEgOnJlZjpgZ2V0YnVmZmVycHJvYyA8YnVmZmVyLXN0cnVjdHM+YCwKLSAgICpleHBvcnRlciogTVVTVCBiZSBzZXQgdG8gdGhlIGV4cG9ydGluZyBvYmplY3QuIE90aGVyd2lzZSwgKmV4cG9ydGVyKiBNVVNUCi0gICBiZSBOVUxMLgorICAgKmV4cG9ydGVyKiBNVVNUIGJlIHNldCB0byB0aGUgZXhwb3J0aW5nIG9iamVjdCBhbmQgKmZsYWdzKiBtdXN0IGJlIHBhc3NlZAorICAgdW5tb2RpZmllZC4gT3RoZXJ3aXNlLCAqZXhwb3J0ZXIqIE1VU1QgYmUgTlVMTC4KIAogCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9ieXRlYXJyYXkucnN0IGIvRG9jL2MtYXBpL2J5dGVhcnJheS5yc3QKaW5kZXggODIwMjIwNS4uNDFiNmUzYyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2J5dGVhcnJheS5yc3QKKysrIGIvRG9jL2MtYXBpL2J5dGVhcnJheS5yc3QKQEAgLTY0LDcgKzY0LDggQEAKIC4uIGM6ZnVuY3Rpb246OiBjaGFyKiBQeUJ5dGVBcnJheV9Bc1N0cmluZyhQeU9iamVjdCAqYnl0ZWFycmF5KQogCiAgICBSZXR1cm4gdGhlIGNvbnRlbnRzIG9mICpieXRlYXJyYXkqIGFzIGEgY2hhciBhcnJheSBhZnRlciBjaGVja2luZyBmb3IgYQotICAgKk5VTEwqIHBvaW50ZXIuCisgICAqTlVMTCogcG9pbnRlci4gIFRoZSByZXR1cm5lZCBhcnJheSBhbHdheXMgaGFzIGFuIGV4dHJhCisgICBudWxsIGJ5dGUgYXBwZW5kZWQuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUJ5dGVBcnJheV9SZXNpemUoUHlPYmplY3QgKmJ5dGVhcnJheSwgUHlfc3NpemVfdCBsZW4pCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvYnl0ZXMucnN0IGIvRG9jL2MtYXBpL2J5dGVzLnJzdAppbmRleCA1NjY2ZGFjLi4yM2I3MTI4IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvYnl0ZXMucnN0CisrKyBiL0RvYy9jLWFwaS9ieXRlcy5yc3QKQEAgLTY5LDggKzY5LDggQEAKICAgICs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKICAgIHwgOmF0dHI6YCUlYCAgICAgICAgfCAqbi9hKiAgICAgICAgIHwgVGhlIGxpdGVyYWwgJSBjaGFyYWN0ZXIuICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgOmF0dHI6YCVjYCAgICAgICAgfCBpbnQgICAgICAgICAgIHwgQSBzaW5nbGUgY2hhcmFjdGVyLCAgICAgICAgICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgcmVwcmVzZW50ZWQgYXMgYW4gQyBpbnQuICAgICAgIHwKKyAgIHwgOmF0dHI6YCVjYCAgICAgICAgfCBpbnQgICAgICAgICAgIHwgQSBzaW5nbGUgYnl0ZSwgICAgICAgICAgICAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgcmVwcmVzZW50ZWQgYXMgYSBDIGludC4gICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgOmF0dHI6YCVkYCAgICAgICAgfCBpbnQgICAgICAgICAgIHwgRXhhY3RseSBlcXVpdmFsZW50IHRvICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgIHwgYGBwcmludGYoIiVkIilgYC4gICAgICAgICAgICAgIHwKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAgICBBbiB1bnJlY29nbml6ZWQgZm9ybWF0IGNoYXJhY3RlciBjYXVzZXMgYWxsIHRoZSByZXN0IG9mIHRoZSBmb3JtYXQgc3RyaW5nIHRvIGJlCi0gICBjb3BpZWQgYXMtaXMgdG8gdGhlIHJlc3VsdCBzdHJpbmcsIGFuZCBhbnkgZXh0cmEgYXJndW1lbnRzIGRpc2NhcmRlZC4KKyAgIGNvcGllZCBhcy1pcyB0byB0aGUgcmVzdWx0IG9iamVjdCwgYW5kIGFueSBleHRyYSBhcmd1bWVudHMgZGlzY2FyZGVkLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlCeXRlc19Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCkBAIC0xMzYsMTEgKzEzNiwxMyBAQAogCiAuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlCeXRlc19Bc1N0cmluZyhQeU9iamVjdCAqbykKIAotICAgUmV0dXJuIGEgTlVMLXRlcm1pbmF0ZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mICpvKi4gIFRoZSBwb2ludGVyCi0gICByZWZlcnMgdG8gdGhlIGludGVybmFsIGJ1ZmZlciBvZiAqbyosIG5vdCBhIGNvcHkuICBUaGUgZGF0YSBtdXN0IG5vdCBiZQotICAgbW9kaWZpZWQgaW4gYW55IHdheSwgdW5sZXNzIHRoZSBzdHJpbmcgd2FzIGp1c3QgY3JlYXRlZCB1c2luZworICAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY29udGVudHMgb2YgKm8qLiAgVGhlIHBvaW50ZXIKKyAgIHJlZmVycyB0byB0aGUgaW50ZXJuYWwgYnVmZmVyIG9mICpvKiwgd2hpY2ggY29uc2lzdHMgb2YgYGBsZW4obykgKyAxYGAKKyAgIGJ5dGVzLiAgVGhlIGxhc3QgYnl0ZSBpbiB0aGUgYnVmZmVyIGlzIGFsd2F5cyBudWxsLCByZWdhcmRsZXNzIG9mCisgICB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3RoZXIgbnVsbCBieXRlcy4gIFRoZSBkYXRhIG11c3Qgbm90IGJlCisgICBtb2RpZmllZCBpbiBhbnkgd2F5LCB1bmxlc3MgdGhlIG9iamVjdCB3YXMganVzdCBjcmVhdGVkIHVzaW5nCiAgICBgYFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgc2l6ZSlgYC4gSXQgbXVzdCBub3QgYmUgZGVhbGxvY2F0ZWQuICBJZgotICAgKm8qIGlzIG5vdCBhIHN0cmluZyBvYmplY3QgYXQgYWxsLCA6YzpmdW5jOmBQeUJ5dGVzX0FzU3RyaW5nYCByZXR1cm5zICpOVUxMKgorICAgKm8qIGlzIG5vdCBhIGJ5dGVzIG9iamVjdCBhdCBhbGwsIDpjOmZ1bmM6YFB5Qnl0ZXNfQXNTdHJpbmdgIHJldHVybnMgKk5VTEwqCiAgICBhbmQgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAuCiAKIApAQCAtMTUxLDE2ICsxNTMsMTggQEAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShQeU9iamVjdCAqb2JqLCBjaGFyICoqYnVmZmVyLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiAKLSAgIFJldHVybiBhIE5VTC10ZXJtaW5hdGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0ICpvYmoqCisgICBSZXR1cm4gdGhlIG51bGwtdGVybWluYXRlZCBjb250ZW50cyBvZiB0aGUgb2JqZWN0ICpvYmoqCiAgICB0aHJvdWdoIHRoZSBvdXRwdXQgdmFyaWFibGVzICpidWZmZXIqIGFuZCAqbGVuZ3RoKi4KIAotICAgSWYgKmxlbmd0aCogaXMgKk5VTEwqLCB0aGUgcmVzdWx0aW5nIGJ1ZmZlciBtYXkgbm90IGNvbnRhaW4gTlVMIGNoYXJhY3RlcnM7CisgICBJZiAqbGVuZ3RoKiBpcyAqTlVMTCosIHRoZSBieXRlcyBvYmplY3QKKyAgIG1heSBub3QgY29udGFpbiBlbWJlZGRlZCBudWxsIGJ5dGVzOwogICAgaWYgaXQgZG9lcywgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGAtMWBgIGFuZCBhIDpleGM6YFR5cGVFcnJvcmAgaXMgcmFpc2VkLgogCi0gICBUaGUgYnVmZmVyIHJlZmVycyB0byBhbiBpbnRlcm5hbCBzdHJpbmcgYnVmZmVyIG9mICpvYmoqLCBub3QgYSBjb3B5LiBUaGUgZGF0YQotICAgbXVzdCBub3QgYmUgbW9kaWZpZWQgaW4gYW55IHdheSwgdW5sZXNzIHRoZSBzdHJpbmcgd2FzIGp1c3QgY3JlYXRlZCB1c2luZworICAgVGhlIGJ1ZmZlciByZWZlcnMgdG8gYW4gaW50ZXJuYWwgYnVmZmVyIG9mICpvYmoqLCB3aGljaCBpbmNsdWRlcyBhbgorICAgYWRkaXRpb25hbCBudWxsIGJ5dGUgYXQgdGhlIGVuZCAobm90IGNvdW50ZWQgaW4gKmxlbmd0aCopLiAgVGhlIGRhdGEKKyAgIG11c3Qgbm90IGJlIG1vZGlmaWVkIGluIGFueSB3YXksIHVubGVzcyB0aGUgb2JqZWN0IHdhcyBqdXN0IGNyZWF0ZWQgdXNpbmcKICAgIGBgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBzaXplKWBgLiAgSXQgbXVzdCBub3QgYmUgZGVhbGxvY2F0ZWQuICBJZgotICAgKnN0cmluZyogaXMgbm90IGEgc3RyaW5nIG9iamVjdCBhdCBhbGwsIDpjOmZ1bmM6YFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplYAorICAgKm9iaiogaXMgbm90IGEgYnl0ZXMgb2JqZWN0IGF0IGFsbCwgOmM6ZnVuYzpgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemVgCiAgICByZXR1cm5zIGBgLTFgYCBhbmQgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAuCiAKIApAQCAtMTY4LDE0ICsxNzIsMTQgQEAKIAogICAgQ3JlYXRlIGEgbmV3IGJ5dGVzIG9iamVjdCBpbiAqXCpieXRlcyogY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgKm5ld3BhcnQqCiAgICBhcHBlbmRlZCB0byAqYnl0ZXMqOyB0aGUgY2FsbGVyIHdpbGwgb3duIHRoZSBuZXcgcmVmZXJlbmNlLiAgVGhlIHJlZmVyZW5jZSB0bwotICAgdGhlIG9sZCB2YWx1ZSBvZiAqYnl0ZXMqIHdpbGwgYmUgc3RvbGVuLiAgSWYgdGhlIG5ldyBzdHJpbmcgY2Fubm90IGJlCisgICB0aGUgb2xkIHZhbHVlIG9mICpieXRlcyogd2lsbCBiZSBzdG9sZW4uICBJZiB0aGUgbmV3IG9iamVjdCBjYW5ub3QgYmUKICAgIGNyZWF0ZWQsIHRoZSBvbGQgcmVmZXJlbmNlIHRvICpieXRlcyogd2lsbCBzdGlsbCBiZSBkaXNjYXJkZWQgYW5kIHRoZSB2YWx1ZQogICAgb2YgKlwqYnl0ZXMqIHdpbGwgYmUgc2V0IHRvICpOVUxMKjsgdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiB3aWxsIGJlIHNldC4KIAogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUJ5dGVzX0NvbmNhdEFuZERlbChQeU9iamVjdCAqKmJ5dGVzLCBQeU9iamVjdCAqbmV3cGFydCkKIAotICAgQ3JlYXRlIGEgbmV3IHN0cmluZyBvYmplY3QgaW4gKlwqYnl0ZXMqIGNvbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mICpuZXdwYXJ0KgorICAgQ3JlYXRlIGEgbmV3IGJ5dGVzIG9iamVjdCBpbiAqXCpieXRlcyogY29udGFpbmluZyB0aGUgY29udGVudHMgb2YgKm5ld3BhcnQqCiAgICBhcHBlbmRlZCB0byAqYnl0ZXMqLiAgVGhpcyB2ZXJzaW9uIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBvZgogICAgKm5ld3BhcnQqLgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvY29kZS5yc3QgYi9Eb2MvYy1hcGkvY29kZS5yc3QKaW5kZXggNTdlODA3Mi4uOWM5MzU2MyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2NvZGUucnN0CisrKyBiL0RvYy9jLWFwaS9jb2RlLnJzdApAQCAtMjksNyArMjksNyBAQAogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5Q29kZV9DaGVjayhQeU9iamVjdCAqY28pCiAKLSAgIFJldHVybiB0cnVlIGlmICpjbyogaXMgYSA6Y2xhc3M6YGNvZGVgIG9iamVjdAorICAgUmV0dXJuIHRydWUgaWYgKmNvKiBpcyBhIDpjbGFzczpgY29kZWAgb2JqZWN0LgogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5Q29kZV9HZXROdW1GcmVlKFB5Q29kZU9iamVjdCAqY28pCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QgYi9Eb2MvYy1hcGkvY29uY3JldGUucnN0CmluZGV4IDY1OTA0ZWUuLjJkNTYzODYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9jb25jcmV0ZS5yc3QKKysrIGIvRG9jL2MtYXBpL2NvbmNyZXRlLnJzdApAQCAtNzQsMjYgKzc0LDM1IEBACiAKIC4uIF9tYXBvYmplY3RzOgogCi1NYXBwaW5nIE9iamVjdHMKLT09PT09PT09PT09PT09PQorQ29udGFpbmVyIE9iamVjdHMKKz09PT09PT09PT09PT09PT09CiAKIC4uIGluZGV4Ojogb2JqZWN0OiBtYXBwaW5nCiAKIC4uIHRvY3RyZWU6OgogCiAgICBkaWN0LnJzdAorICAgc2V0LnJzdAogCiAKIC4uIF9vdGhlcm9iamVjdHM6CiAKK0Z1bmN0aW9uIE9iamVjdHMKKz09PT09PT09PT09PT09PT0KKworLi4gdG9jdHJlZTo6CisKKyAgIGZ1bmN0aW9uLnJzdAorICAgbWV0aG9kLnJzdAorICAgY2VsbC5yc3QKKyAgIGNvZGUucnN0CisKKwogT3RoZXIgT2JqZWN0cwogPT09PT09PT09PT09PQogCiAuLiB0b2N0cmVlOjoKIAotICAgc2V0LnJzdAotICAgZnVuY3Rpb24ucnN0Ci0gICBtZXRob2QucnN0CiAgICBmaWxlLnJzdAogICAgbW9kdWxlLnJzdAogICAgaXRlcmF0b3IucnN0CkBAIC0xMDIsNyArMTExLDYgQEAKICAgIG1lbW9yeXZpZXcucnN0CiAgICB3ZWFrcmVmLnJzdAogICAgY2Fwc3VsZS5yc3QKLSAgIGNlbGwucnN0CiAgICBnZW4ucnN0CiAgICBkYXRldGltZS5yc3QKLSAgIGNvZGUucnN0CisKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9jb252ZXJzaW9uLnJzdCBiL0RvYy9jLWFwaS9jb252ZXJzaW9uLnJzdAppbmRleCA5NTc4Zjk4Li45NTY2ZDlkIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvY29udmVyc2lvbi5yc3QKKysrIGIvRG9jL2MtYXBpL2NvbnZlcnNpb24ucnN0CkBAIC0xMTksMTMgKzExOSwxMyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU9TX3N0cmljbXAoY2hhciAqczEsIGNoYXIgKnMyKQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU9TX3N0cmljbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQogCiAgICBDYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gb2Ygc3RyaW5ncy4gVGhlIGZ1bmN0aW9uIHdvcmtzIGFsbW9zdAogICAgaWRlbnRpY2FsbHkgdG8gOmM6ZnVuYzpgc3RyY21wYCBleGNlcHQgdGhhdCBpdCBpZ25vcmVzIHRoZSBjYXNlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPU19zdHJuaWNtcChjaGFyICpzMSwgY2hhciAqczIsIFB5X3NzaXplX3QgIHNpemUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5T1Nfc3RybmljbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBQeV9zc2l6ZV90ICBzaXplKQogCiAgICBDYXNlIGluc2Vuc2l0aXZlIGNvbXBhcmlzb24gb2Ygc3RyaW5ncy4gVGhlIGZ1bmN0aW9uIHdvcmtzIGFsbW9zdAogICAgaWRlbnRpY2FsbHkgdG8gOmM6ZnVuYzpgc3RybmNtcGAgZXhjZXB0IHRoYXQgaXQgaWdub3JlcyB0aGUgY2FzZS4KZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9kaWN0LnJzdCBiL0RvYy9jLWFwaS9kaWN0LnJzdAppbmRleCA2YmFjYzMyLi5hZWZmNjQwIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvZGljdC5yc3QKKysrIGIvRG9jL2MtYXBpL2RpY3QucnN0CkBAIC04NCw3ICs4NCw3IEBACiAgICBvbiBmYWlsdXJlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKnAsIGNoYXIgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEaWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKnAsIGNvbnN0IGNoYXIgKmtleSkKIAogICAgUmVtb3ZlIHRoZSBlbnRyeSBpbiBkaWN0aW9uYXJ5ICpwKiB3aGljaCBoYXMgYSBrZXkgc3BlY2lmaWVkIGJ5IHRoZSBzdHJpbmcKICAgICprZXkqLiAgUmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3Mgb3IgYGAtMWBgIG9uIGZhaWx1cmUuCkBAIC0xMTAsNiArMTEwLDE1IEBACiAgICA6Yzp0eXBlOmBjaGFyXCpgLCByYXRoZXIgdGhhbiBhIDpjOnR5cGU6YFB5T2JqZWN0XCpgLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlEaWN0X1NldERlZmF1bHQoUHlPYmplY3QgKnAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICpkZWZhdWx0KQorCisgICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBQeXRob24tbGV2ZWwgOm1ldGg6YGRpY3Quc2V0ZGVmYXVsdGAuICBJZiBwcmVzZW50LCBpdAorICAgcmV0dXJucyB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0byAqa2V5KiBmcm9tIHRoZSBkaWN0aW9uYXJ5ICpwKi4gIElmIHRoZSBrZXkKKyAgIGlzIG5vdCBpbiB0aGUgZGljdCwgaXQgaXMgaW5zZXJ0ZWQgd2l0aCB2YWx1ZSAqZGVmYXVsdG9iaiogYW5kICpkZWZhdWx0b2JqKgorICAgaXMgcmV0dXJuZWQuICBUaGlzIGZ1bmN0aW9uIGV2YWx1YXRlcyB0aGUgaGFzaCBmdW5jdGlvbiBvZiAqa2V5KiBvbmx5IG9uY2UsCisgICBpbnN0ZWFkIG9mIGV2YWx1YXRpbmcgaXQgaW5kZXBlbmRlbnRseSBmb3IgdGhlIGxvb2t1cCBhbmQgdGhlIGluc2VydGlvbi4KKworCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RGljdF9JdGVtcyhQeU9iamVjdCAqcCkKIAogICAgUmV0dXJuIGEgOmM6dHlwZTpgUHlMaXN0T2JqZWN0YCBjb250YWluaW5nIGFsbCB0aGUgaXRlbXMgZnJvbSB0aGUgZGljdGlvbmFyeS4KQEAgLTE5Miw4ICsyMDEsMTEgQEAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeURpY3RfVXBkYXRlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYikKIAotICAgVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFB5RGljdF9NZXJnZShhLCBiLCAxKWBgIGluIEMsIG9yIGBgYS51cGRhdGUoYilgYCBpbgotICAgUHl0aG9uLiAgUmV0dXJuIGBgMGBgIG9uIHN1Y2Nlc3Mgb3IgYGAtMWBgIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLgorICAgVGhpcyBpcyB0aGUgc2FtZSBhcyBgYFB5RGljdF9NZXJnZShhLCBiLCAxKWBgIGluIEMsIGFuZCBpcyBzaW1pbGFyIHRvCisgICBgYGEudXBkYXRlKGIpYGAgaW4gUHl0aG9uIGV4Y2VwdCB0aGF0IDpjOmZ1bmM6YFB5RGljdF9VcGRhdGVgIGRvZXNuJ3QgZmFsbAorICAgYmFjayB0byB0aGUgaXRlcmF0aW5nIG92ZXIgYSBzZXF1ZW5jZSBvZiBrZXkgdmFsdWUgcGFpcnMgaWYgdGhlIHNlY29uZAorICAgYXJndW1lbnQgaGFzIG5vICJrZXlzIiBhdHRyaWJ1dGUuICBSZXR1cm4gYGAwYGAgb24gc3VjY2VzcyBvciBgYC0xYGAgaWYgYW4KKyAgIGV4Y2VwdGlvbiB3YXMgcmFpc2VkLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlEaWN0X01lcmdlRnJvbVNlcTIoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpzZXEyLCBpbnQgb3ZlcnJpZGUpCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvYy1hcGkvZXhjZXB0aW9ucy5yc3QKaW5kZXggMGFhODkyZC4uYzJkZjc2NyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2V4Y2VwdGlvbnMucnN0CisrKyBiL0RvYy9jLWFwaS9leGNlcHRpb25zLnJzdApAQCAtNjQsNyArNjQsNyBAQAogICAgICAgRG8gbm90IGNvbXBhcmUgdGhlIHJldHVybiB2YWx1ZSB0byBhIHNwZWNpZmljIGV4Y2VwdGlvbjsgdXNlCiAgICAgICA6YzpmdW5jOmBQeUVycl9FeGNlcHRpb25NYXRjaGVzYCBpbnN0ZWFkLCBzaG93biBiZWxvdy4gIChUaGUgY29tcGFyaXNvbiBjb3VsZAogICAgICAgZWFzaWx5IGZhaWwgc2luY2UgdGhlIGV4Y2VwdGlvbiBtYXkgYmUgYW4gaW5zdGFuY2UgaW5zdGVhZCBvZiBhIGNsYXNzLCBpbiB0aGUKLSAgICAgIGNhc2Ugb2YgYSBjbGFzcyBleGNlcHRpb24sIG9yIGl0IG1heSB0aGUgYSBzdWJjbGFzcyBvZiB0aGUgZXhwZWN0ZWQgZXhjZXB0aW9uLikKKyAgICAgIGNhc2Ugb2YgYSBjbGFzcyBleGNlcHRpb24sIG9yIGl0IG1heSBiZSBhIHN1YmNsYXNzIG9mIHRoZSBleHBlY3RlZCBleGNlcHRpb24uKQogCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeU9iamVjdCAqZXhjKQpAQCAtOTAsNiArOTAsMTYgQEAKICAgIHRoZSBjbGFzcyBpbiB0aGF0IGNhc2UuICBJZiB0aGUgdmFsdWVzIGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQsIG5vdGhpbmcgaGFwcGVucy4KICAgIFRoZSBkZWxheWVkIG5vcm1hbGl6YXRpb24gaXMgaW1wbGVtZW50ZWQgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZS4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgIFRoaXMgZnVuY3Rpb24gKmRvZXMgbm90KiBpbXBsaWNpdGx5IHNldCB0aGUgYGBfX3RyYWNlYmFja19fYGAKKyAgICAgIGF0dHJpYnV0ZSBvbiB0aGUgZXhjZXB0aW9uIHZhbHVlLiBJZiBzZXR0aW5nIHRoZSB0cmFjZWJhY2sKKyAgICAgIGFwcHJvcHJpYXRlbHkgaXMgZGVzaXJlZCwgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIHNuaXBwZXQgaXMgbmVlZGVkOjoKKworICAgICAgICAgaWYgKHRiICE9IE5VTEwpIHsKKyAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgdGIpOworICAgICAgICAgfQorCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX0NsZWFyKCkKIApAQCAtMjI2LDE2ICsyMzYsMjUgQEAKIAogICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRGcm9tRXJybm9gLCB3aXRoIHRoZSBhZGRpdGlvbmFsIGJlaGF2aW9yIHRoYXQgaWYKICAgICpmaWxlbmFtZU9iamVjdCogaXMgbm90ICpOVUxMKiwgaXQgaXMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiAqdHlwZSogYXMKLSAgIGEgdGhpcmQgcGFyYW1ldGVyLiAgSW4gdGhlIGNhc2Ugb2YgZXhjZXB0aW9ucyBzdWNoIGFzIDpleGM6YElPRXJyb3JgIGFuZAotICAgOmV4YzpgT1NFcnJvcmAsIHRoaXMgaXMgdXNlZCB0byBkZWZpbmUgdGhlIDphdHRyOmBmaWxlbmFtZWAgYXR0cmlidXRlIG9mIHRoZQorICAgYSB0aGlyZCBwYXJhbWV0ZXIuICBJbiB0aGUgY2FzZSBvZiA6ZXhjOmBPU0Vycm9yYCBleGNlcHRpb24sCisgICB0aGlzIGlzIHVzZWQgdG8gZGVmaW5lIHRoZSA6YXR0cjpgZmlsZW5hbWVgIGF0dHJpYnV0ZSBvZiB0aGUKICAgIGV4Y2VwdGlvbiBpbnN0YW5jZS4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdCwgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0MikKKworICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RgLCBidXQgdGFrZXMgYSBzZWNvbmQKKyAgIGZpbGVuYW1lIG9iamVjdCwgZm9yIHJhaXNpbmcgZXJyb3JzIHdoZW4gYSBmdW5jdGlvbiB0aGF0IHRha2VzIHR3byBmaWxlbmFtZXMKKyAgIGZhaWxzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiAKICAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0YCwgYnV0IHRoZSBmaWxlbmFtZQogICAgaXMgZ2l2ZW4gYXMgYSBDIHN0cmluZy4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCi0gICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKyAgICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCBpZXJyKQpAQCAtMjU2LDE4ICsyNzUsMTEgQEAKICAgIHNwZWNpZnlpbmcgdGhlIGV4Y2VwdGlvbiB0eXBlIHRvIGJlIHJhaXNlZC4gQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoaW50IGllcnIsIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdCkKLQotICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUVycl9TZXRGcm9tV2luZG93c0VycmAsIHdpdGggdGhlIGFkZGl0aW9uYWwgYmVoYXZpb3IKLSAgIHRoYXQgaWYgKmZpbGVuYW1lT2JqZWN0KiBpcyBub3QgKk5VTEwqLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yIG9mCi0gICA6ZXhjOmBXaW5kb3dzRXJyb3JgIGFzIGEgdGhpcmQgcGFyYW1ldGVyLiAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgotCi0KIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoaW50IGllcnIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogCiAgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0YCwgYnV0IHRoZQogICAgZmlsZW5hbWUgaXMgZ2l2ZW4gYXMgYSBDIHN0cmluZy4gICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtCi0gICBlbmNvZGluZyAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4gIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKyAgIGVuY29kaW5nICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4gIEF2YWlsYWJpbGl0eTogV2luZG93cy4KIAogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KFB5T2JqZWN0ICp0eXBlLCBpbnQgaWVyciwgUHlPYmplY3QgKmZpbGVuYW1lKQpAQCAtMjc3LDYgKzI4OSwxNSBAQAogICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgogCiAKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKFB5T2JqZWN0ICp0eXBlLCBpbnQgaWVyciwgUHlPYmplY3QgKmZpbGVuYW1lLCBQeU9iamVjdCAqZmlsZW5hbWUyKQorCisgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0YCwKKyAgIGJ1dCBhY2NlcHRzIGEgc2Vjb25kIGZpbGVuYW1lIG9iamVjdC4KKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZShQeU9iamVjdCAqdHlwZSwgaW50IGllcnIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogCiAgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lYCwgd2l0aCBhbiBhZGRpdGlvbmFsCkBAIC0yOTMsMTggKzMxNCwyNSBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb25FeChjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCisuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChQeU9iamVjdCAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogCiAgICBTZXQgZmlsZSwgbGluZSwgYW5kIG9mZnNldCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiAgSWYgdGhlCiAgICBjdXJyZW50IGV4Y2VwdGlvbiBpcyBub3QgYSA6ZXhjOmBTeW50YXhFcnJvcmAsIHRoZW4gaXQgc2V0cyBhZGRpdGlvbmFsCiAgICBhdHRyaWJ1dGVzLCB3aGljaCBtYWtlIHRoZSBleGNlcHRpb24gcHJpbnRpbmcgc3Vic3lzdGVtIHRoaW5rIHRoZSBleGNlcHRpb24KLSAgIGlzIGEgOmV4YzpgU3ludGF4RXJyb3JgLiAqZmlsZW5hbWUqIGlzIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZwotICAgKDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCkuCisgICBpcyBhIDpleGM6YFN5bnRheEVycm9yYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlFcnJfU3ludGF4TG9jYXRpb25FeChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCisKKyAgIExpa2UgOmM6ZnVuYzpgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3RgLCBidXQgKmZpbGVuYW1lKiBpcyBhIGJ5dGUgc3RyaW5nCisgICBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKDpmdW5jOmBvcy5mc2RlY29kZWApLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAogCi0uLiBjOmZ1bmN0aW9uOjogdm9pZCBQeUVycl9TeW50YXhMb2NhdGlvbihjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5RXJyX1N5bnRheExvY2F0aW9uKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQogCiAgICBMaWtlIDpjOmZ1bmM6YFB5RXJyX1N5bnRheExvY2F0aW9uRXhgLCBidXQgdGhlIGNvbF9vZmZzZXQgcGFyYW1ldGVyIGlzCiAgICBvbWl0dGVkLgpAQCAtMzE4LDcgKzM0Niw3IEBACiAgICB1c2UuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXgoUHlPYmplY3QgKmNhdGVnb3J5LCBjaGFyICptZXNzYWdlLCBpbnQgc3RhY2tfbGV2ZWwpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeChQeU9iamVjdCAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIFB5X3NzaXplX3Qgc3RhY2tfbGV2ZWwpCiAKICAgIElzc3VlIGEgd2FybmluZyBtZXNzYWdlLiAgVGhlICpjYXRlZ29yeSogYXJndW1lbnQgaXMgYSB3YXJuaW5nIGNhdGVnb3J5IChzZWUKICAgIGJlbG93KSBvciAqTlVMTCo7IHRoZSAqbWVzc2FnZSogYXJndW1lbnQgaXMgYW4gVVRGLTggZW5jb2RlZCBzdHJpbmcuICAqc3RhY2tfbGV2ZWwqIGlzIGEKQEAgLTM1NSwxNSArMzgzLDIyIEBACiAgICBkb2N1bWVudGF0aW9uLiAgVGhlcmUgaXMgbm8gQyBBUEkgZm9yIHdhcm5pbmcgY29udHJvbC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5FeHBsaWNpdChQeU9iamVjdCAqY2F0ZWdvcnksIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBjb25zdCBjaGFyICptb2R1bGUsIFB5T2JqZWN0ICpyZWdpc3RyeSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KFB5T2JqZWN0ICpjYXRlZ29yeSwgUHlPYmplY3QgKm1lc3NhZ2UsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubywgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKnJlZ2lzdHJ5KQogCiAgICBJc3N1ZSBhIHdhcm5pbmcgbWVzc2FnZSB3aXRoIGV4cGxpY2l0IGNvbnRyb2wgb3ZlciBhbGwgd2FybmluZyBhdHRyaWJ1dGVzLiAgVGhpcwogICAgaXMgYSBzdHJhaWdodGZvcndhcmQgd3JhcHBlciBhcm91bmQgdGhlIFB5dGhvbiBmdW5jdGlvbgogICAgOmZ1bmM6YHdhcm5pbmdzLndhcm5fZXhwbGljaXRgLCBzZWUgdGhlcmUgZm9yIG1vcmUgaW5mb3JtYXRpb24uICBUaGUgKm1vZHVsZSoKICAgIGFuZCAqcmVnaXN0cnkqIGFyZ3VtZW50cyBtYXkgYmUgc2V0IHRvICpOVUxMKiB0byBnZXQgdGhlIGRlZmF1bHQgZWZmZWN0Ci0gICBkZXNjcmliZWQgdGhlcmUuICptZXNzYWdlKiBhbmQgKm1vZHVsZSogYXJlIFVURi04IGVuY29kZWQgc3RyaW5ncywKLSAgICpmaWxlbmFtZSogaXMgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nCi0gICAoOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgKS4KKyAgIGRlc2NyaWJlZCB0aGVyZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gYzpmdW5jdGlvbjo6IGludCBQeUVycl9XYXJuRXhwbGljaXQoUHlPYmplY3QgKmNhdGVnb3J5LCBjb25zdCBjaGFyICptZXNzYWdlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCisKKyAgIFNpbWlsYXIgdG8gOmM6ZnVuYzpgUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0YCBleGNlcHQgdGhhdCAqbWVzc2FnZSogYW5kCisgICAqbW9kdWxlKiBhcmUgVVRGLTggZW5jb2RlZCBzdHJpbmdzLCBhbmQgKmZpbGVuYW1lKiBpcyBkZWNvZGVkIGZyb20gdGhlCisgICBmaWxlc3lzdGVtIGVuY29kaW5nICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KIAogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXJyX1dhcm5Gb3JtYXQoUHlPYmplY3QgKmNhdGVnb3J5LCBQeV9zc2l6ZV90IHN0YWNrX2xldmVsLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKQEAgLTQxNiw3ICs0NTEsNyBAQAogICAgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9OZXdFeGNlcHRpb24oY2hhciAqbmFtZSwgUHlPYmplY3QgKmJhc2UsIFB5T2JqZWN0ICpkaWN0KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUVycl9OZXdFeGNlcHRpb24oY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmJhc2UsIFB5T2JqZWN0ICpkaWN0KQogCiAgICBUaGlzIHV0aWxpdHkgZnVuY3Rpb24gY3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBleGNlcHRpb24gY2xhc3MuIFRoZSAqbmFtZSoKICAgIGFyZ3VtZW50IG11c3QgYmUgdGhlIG5hbWUgb2YgdGhlIG5ldyBleGNlcHRpb24sIGEgQyBzdHJpbmcgb2YgdGhlIGZvcm0KQEAgLTQzMSw3ICs0NjYsNyBAQAogICAgYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhIGRpY3Rpb25hcnkgb2YgY2xhc3MgdmFyaWFibGVzIGFuZCBtZXRob2RzLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYyhjaGFyICpuYW1lLCBjaGFyICpkb2MsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFcnJfTmV3RXhjZXB0aW9uV2l0aERvYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb2MsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCkKIAogICAgU2FtZSBhcyA6YzpmdW5jOmBQeUVycl9OZXdFeGNlcHRpb25gLCBleGNlcHQgdGhhdCB0aGUgbmV3IGV4Y2VwdGlvbiBjbGFzcyBjYW4KICAgIGVhc2lseSBiZSBnaXZlbiBhIGRvY3N0cmluZzogSWYgKmRvYyogaXMgbm9uLSpOVUxMKiwgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZQpAQCAtNTg2LDcgKzYyMSw3IEBACiByZWN1cnNpdmUgY29kZSBkb2VzIG5vdCBuZWNlc3NhcmlseSBpbnZva2UgUHl0aG9uIGNvZGUgKHdoaWNoIHRyYWNrcyBpdHMKIHJlY3Vyc2lvbiBkZXB0aCBhdXRvbWF0aWNhbGx5KS4KIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoY2hhciAqd2hlcmUpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5X0VudGVyUmVjdXJzaXZlQ2FsbChjb25zdCBjaGFyICp3aGVyZSkKIAogICAgTWFya3MgYSBwb2ludCB3aGVyZSBhIHJlY3Vyc2l2ZSBDLWxldmVsIGNhbGwgaXMgYWJvdXQgdG8gYmUgcGVyZm9ybWVkLgogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZmlsZS5yc3QgYi9Eb2MvYy1hcGkvZmlsZS5yc3QKaW5kZXggY2MxOTBjOS4uNmYyZWNlZSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2ZpbGUucnN0CisrKyBiL0RvYy9jLWFwaS9maWxlLnJzdApAQCAtMTcsNyArMTcsNyBAQAogdGhlIDptb2Q6YGlvYCBBUElzIGluc3RlYWQuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5RmlsZV9Gcm9tRmQoaW50IGZkLCBjaGFyICpuYW1lLCBjaGFyICptb2RlLCBpbnQgYnVmZmVyaW5nLCBjaGFyICplbmNvZGluZywgY2hhciAqZXJyb3JzLCBjaGFyICpuZXdsaW5lLCBpbnQgY2xvc2VmZCkKKy4uIGM6ZnVuY3Rpb246OiBQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiAKICAgIENyZWF0ZSBhIFB5dGhvbiBmaWxlIG9iamVjdCBmcm9tIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYW4gYWxyZWFkeQogICAgb3BlbmVkIGZpbGUgKmZkKi4gIFRoZSBhcmd1bWVudHMgKm5hbWUqLCAqZW5jb2RpbmcqLCAqZXJyb3JzKiBhbmQgKm5ld2xpbmUqCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvZ2VuLnJzdCBiL0RvYy9jLWFwaS9nZW4ucnN0CmluZGV4IDMzY2QyN2EuLjBjODUxYTcgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9nZW4ucnN0CisrKyBiL0RvYy9jLWFwaS9nZW4ucnN0CkBAIC0xNyw3ICsxNyw3IEBACiAKIC4uIGM6dmFyOjogUHlUeXBlT2JqZWN0IFB5R2VuX1R5cGUKIAotICAgVGhlIHR5cGUgb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gZ2VuZXJhdG9yIG9iamVjdHMKKyAgIFRoZSB0eXBlIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIGdlbmVyYXRvciBvYmplY3RzLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBpbnQgUHlHZW5fQ2hlY2sob2IpCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW1wb3J0LnJzdCBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CmluZGV4IDI3MDE1MmUuLjYwODY1ZjQgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9pbXBvcnQucnN0CisrKyBiL0RvYy9jLWFwaS9pbXBvcnQucnN0CkBAIC0zOSw3ICszOSw3IEBACiAgICAgICBiZWhhdmlvdXIgaXNuJ3QgbmVlZGVkIGFueW1vcmUuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeChjaGFyICpuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgUHlPYmplY3QgKmZyb21saXN0KQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeChjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgUHlPYmplY3QgKmZyb21saXN0KQogCiAgICAuLiBpbmRleDo6IGJ1aWx0aW46IF9faW1wb3J0X18KIApAQCAtNzAsNyArNzAsNyBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbChjaGFyICpuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywgUHlPYmplY3QgKmZyb21saXN0LCBpbnQgbGV2ZWwpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0ltcG9ydE1vZHVsZUxldmVsKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLCBQeU9iamVjdCAqZnJvbWxpc3QsIGludCBsZXZlbCkKIAogICAgU2ltaWxhciB0byA6YzpmdW5jOmBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbE9iamVjdGAsIGJ1dCB0aGUgbmFtZSBpcyBhbgogICAgVVRGLTggZW5jb2RlZCBzdHJpbmcgaW5zdGVhZCBvZiBhIFVuaWNvZGUgb2JqZWN0LgpAQCAtMTE4LDcgKzExOCw3IEBACiAgICBlbmNvZGVkIHN0cmluZyBpbnN0ZWFkIG9mIGEgVW5pY29kZSBvYmplY3QuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZShjaGFyICpuYW1lLCBQeU9iamVjdCAqY28pCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjbykKIAogICAgLi4gaW5kZXg6OiBidWlsdGluOiBjb21waWxlCiAKQEAgLTEzMiw4ICsxMzIsMTQgQEAKICAgIHN1Y2ggbW9kdWxlcyBoYXZlIG5vIHdheSB0byBrbm93IHRoYXQgdGhlIG1vZHVsZSBvYmplY3QgaXMgYW4gdW5rbm93biAoYW5kCiAgICBwcm9iYWJseSBkYW1hZ2VkIHdpdGggcmVzcGVjdCB0byB0aGUgbW9kdWxlIGF1dGhvcidzIGludGVudHMpIHN0YXRlLgogCisgICBUaGUgbW9kdWxlJ3MgOmF0dHI6YF9fc3BlY19fYCBhbmQgOmF0dHI6YF9fbG9hZGVyX19gIHdpbGwgYmUgc2V0LCBpZgorICAgbm90IHNldCBhbHJlYWR5LCB3aXRoIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMuICBUaGUgc3BlYydzIGxvYWRlciB3aWxsCisgICBiZSBzZXQgdG8gdGhlIG1vZHVsZSdzIGBgX19sb2FkZXJfX2BgIChpZiBzZXQpIGFuZCB0byBhbiBpbnN0YW5jZSBvZgorICAgOmNsYXNzOmBTb3VyY2VGaWxlTG9hZGVyYCBvdGhlcndpc2UuCisKICAgIFRoZSBtb2R1bGUncyA6YXR0cjpgX19maWxlX19gIGF0dHJpYnV0ZSB3aWxsIGJlIHNldCB0byB0aGUgY29kZSBvYmplY3QncwotICAgOmM6bWVtYmVyOmBjb19maWxlbmFtZWAuCisgICA6YzptZW1iZXI6YGNvX2ZpbGVuYW1lYC4gIElmIGFwcGxpY2FibGUsIDphdHRyOmBfX2NhY2hlZF9fYCB3aWxsIGFsc28KKyAgIGJlIHNldC4KIAogICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlbG9hZCB0aGUgbW9kdWxlIGlmIGl0IHdhcyBhbHJlYWR5IGltcG9ydGVkLiAgU2VlCiAgICA6YzpmdW5jOmBQeUltcG9ydF9SZWxvYWRNb2R1bGVgIGZvciB0aGUgaW50ZW5kZWQgd2F5IHRvIHJlbG9hZCBhIG1vZHVsZS4KQEAgLTE0NSw3ICsxNTEsNyBAQAogICAgOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjaGFyICpwYXRobmFtZSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeChjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNvbnN0IGNoYXIgKnBhdGhuYW1lKQogCiAgICBMaWtlIDpjOmZ1bmM6YFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlYCwgYnV0IHRoZSA6YXR0cjpgX19maWxlX19gIGF0dHJpYnV0ZSBvZgogICAgdGhlIG1vZHVsZSBvYmplY3QgaXMgc2V0IHRvICpwYXRobmFtZSogaWYgaXQgaXMgbm9uLWBgTlVMTGBgLgpAQCAtMTYyLDcgKzE2OCw3IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcyhjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lLCBjaGFyICpjcGF0aG5hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcyhjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBjb25zdCBjaGFyICpjcGF0aG5hbWUpCiAKICAgIExpa2UgOmM6ZnVuYzpgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3RgLCBidXQgKm5hbWUqLCAqcGF0aG5hbWUqIGFuZAogICAgKmNwYXRobmFtZSogYXJlIFVURi04IGVuY29kZWQgc3RyaW5ncy4gQXR0ZW1wdHMgYXJlIGFsc28gbWFkZSB0byBmaWd1cmUgb3V0CkBAIC0yNDUsOCArMjUxLDExIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGBgX19maWxlX19gYCBhdHRyaWJ1dGUgaXMgbm8gbG9uZ2VyIHNldCBvbiB0aGUgbW9kdWxlLgogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZShjaGFyICpuYW1lKQorCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZShjb25zdCBjaGFyICpuYW1lKQogCiAgICBTaW1pbGFyIHRvIDpjOmZ1bmM6YFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZU9iamVjdGAsIGJ1dCB0aGUgbmFtZSBpcyBhCiAgICBVVEYtOCBlbmNvZGVkIHN0cmluZyBpbnN0ZWFkIG9mIGEgVW5pY29kZSBvYmplY3QuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvaW5pdC5yc3QgYi9Eb2MvYy1hcGkvaW5pdC5yc3QKaW5kZXggNGRhZDJjOC4uNGJiNTA2NCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL2luaXQucnN0CisrKyBiL0RvYy9jLWFwaS9pbml0LnJzdApAQCAtODYsNiArODYsMzYgQEAKID09PT09PT09PT09PT09PT09PT09PT09CiAKIAorLi4gYzpmdW5jdGlvbjo6IGludCBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisKKyAgIC4uIGluZGV4OjoKKyAgICAgIHNpbmdsZTogUHlfSW5pdGlhbGl6ZSgpCisgICAgICBzaW5nbGU6IG1haW4oKQorICAgICAgdHJpcGxlOiBzdGRpbjsgc3Rkb3V0OyBzZHRlcnIKKworICAgVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSA6YzpmdW5jOmBQeV9Jbml0aWFsaXplYCwgaWYgaXQgaXMKKyAgIGNhbGxlZCBhdCBhbGwuIEl0IHNwZWNpZmllcyB3aGljaCBlbmNvZGluZyBhbmQgZXJyb3IgaGFuZGxpbmcgdG8gdXNlCisgICB3aXRoIHN0YW5kYXJkIElPLCB3aXRoIHRoZSBzYW1lIG1lYW5pbmdzIGFzIGluIDpmdW5jOmBzdHIuZW5jb2RlYC4KKworICAgSXQgb3ZlcnJpZGVzIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIHZhbHVlcywgYW5kIGFsbG93cyBlbWJlZGRpbmcgY29kZQorICAgdG8gY29udHJvbCBJTyBlbmNvZGluZyB3aGVuIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBkb2VzIG5vdCB3b3JrLgorCisgICBgYGVuY29kaW5nYGAgYW5kL29yIGBgZXJyb3JzYGAgbWF5IGJlIE5VTEwgdG8gdXNlCisgICA6ZW52dmFyOmBQWVRIT05JT0VOQ09ESU5HYCBhbmQvb3IgZGVmYXVsdCB2YWx1ZXMgKGRlcGVuZGluZyBvbiBvdGhlcgorICAgc2V0dGluZ3MpLgorCisgICBOb3RlIHRoYXQgOmRhdGE6YHN5cy5zdGRlcnJgIGFsd2F5cyB1c2VzIHRoZSAiYmFja3NsYXNocmVwbGFjZSIgZXJyb3IKKyAgIGhhbmRsZXIsIHJlZ2FyZGxlc3Mgb2YgdGhpcyAob3IgYW55IG90aGVyKSBzZXR0aW5nLgorCisgICBJZiA6YzpmdW5jOmBQeV9GaW5hbGl6ZWAgaXMgY2FsbGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwgbmVlZCB0byBiZSBjYWxsZWQKKyAgIGFnYWluIGluIG9yZGVyIHRvIGFmZmVjdCBzdWJzZXF1ZW50IGNhbGxzIHRvIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLgorCisgICBSZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgYSBub256ZXJvIHZhbHVlIG9uIGVycm9yIChlLmcuIGNhbGxpbmcgYWZ0ZXIgdGhlCisgICBpbnRlcnByZXRlciBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlfU2V0UHJvZ3JhbU5hbWUod2NoYXJfdCAqbmFtZSkKIAogICAgLi4gaW5kZXg6OgpAQCAtMjA2LDEzICsyMzYsMTggQEAKICAgIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLCB0aGVuIDpjOmZ1bmM6YFB5X0dldFBhdGhgIHdvbid0IGF0dGVtcHQgdG8gY29tcHV0ZSBhCiAgICBkZWZhdWx0IHNlYXJjaCBwYXRoIGJ1dCB1c2VzIHRoZSBvbmUgcHJvdmlkZWQgaW5zdGVhZC4gIFRoaXMgaXMgdXNlZnVsIGlmCiAgICBQeXRob24gaXMgZW1iZWRkZWQgYnkgYW4gYXBwbGljYXRpb24gdGhhdCBoYXMgZnVsbCBrbm93bGVkZ2Ugb2YgdGhlIGxvY2F0aW9uCi0gICBvZiBhbGwgbW9kdWxlcy4gIFRoZSBwYXRoIGNvbXBvbmVudHMgc2hvdWxkIGJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLgorICAgb2YgYWxsIG1vZHVsZXMuICBUaGUgcGF0aCBjb21wb25lbnRzIHNob3VsZCBiZSBzZXBhcmF0ZWQgYnkgdGhlIHBsYXRmb3JtCisgICBkZXBlbmRlbnQgZGVsaW1pdGVyIGNoYXJhY3Rlciwgd2hpY2ggaXMgYGAnOidgYCBvbiBVbml4IGFuZCBNYWMgT1MgWCwgYGAnOydgYAorICAgb24gV2luZG93cy4KIAogICAgVGhpcyBhbHNvIGNhdXNlcyA6ZGF0YTpgc3lzLmV4ZWN1dGFibGVgIHRvIGJlIHNldCBvbmx5IHRvIHRoZSByYXcgcHJvZ3JhbQogICAgbmFtZSAoc2VlIDpjOmZ1bmM6YFB5X1NldFByb2dyYW1OYW1lYCkgYW5kIGZvciA6ZGF0YTpgc3lzLnByZWZpeGAgYW5kCiAgICA6ZGF0YTpgc3lzLmV4ZWNfcHJlZml4YCB0byBiZSBlbXB0eS4gIEl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gbW9kaWZ5IHRoZXNlCiAgICBpZiByZXF1aXJlZCBhZnRlciBjYWxsaW5nIDpjOmZ1bmM6YFB5X0luaXRpYWxpemVgLgogCisgICBUaGUgcGF0aCBhcmd1bWVudCBpcyBjb3BpZWQgaW50ZXJuYWxseSwgc28gdGhlIGNhbGxlciBtYXkgZnJlZSBpdCBhZnRlciB0aGUKKyAgIGNhbGwgY29tcGxldGVzLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBjb25zdCBjaGFyKiBQeV9HZXRWZXJzaW9uKCkKIApAQCAtMzI5LDcgKzM2NCwxMSBAQAogCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeVN5c19TZXRBcmd2KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKIAotICAgVGhpcyBmdW5jdGlvbiB3b3JrcyBsaWtlIDpjOmZ1bmM6YFB5U3lzX1NldEFyZ3ZFeGAgd2l0aCAqdXBkYXRlcGF0aCogc2V0IHRvIDEuCisgICBUaGlzIGZ1bmN0aW9uIHdvcmtzIGxpa2UgOmM6ZnVuYzpgUHlTeXNfU2V0QXJndkV4YCB3aXRoICp1cGRhdGVwYXRoKiBzZXQKKyAgIHRvIDEgdW5sZXNzIHRoZSA6cHJvZ3JhbTpgcHl0aG9uYCBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZQorICAgOm9wdGlvbjpgLUlgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCBUaGUgKnVwZGF0ZXBhdGgqIHZhbHVlIGRlcGVuZHMgb24gOm9wdGlvbjpgLUlgLgogCiAKIC4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5X1NldFB5dGhvbkhvbWUod2NoYXJfdCAqaG9tZSkKQEAgLTY1OCw2ICs2OTcsMjAgQEAKICAgIG1hZGUgb24gdGhlIG1haW4gdGhyZWFkLiAgVGhpcyBpcyBtYWlubHkgYSBoZWxwZXIvZGlhZ25vc3RpYyBmdW5jdGlvbi4KIAogCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5R0lMU3RhdGVfQ2hlY2soKQorCisgICBSZXR1cm4gMSBpZiB0aGUgY3VycmVudCB0aHJlYWQgaXMgaG9sZGluZyB0aGUgR0lMIGFuZCAwIG90aGVyd2lzZS4KKyAgIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBmcm9tIGFueSB0aHJlYWQgYXQgYW55IHRpbWUuCisgICBPbmx5IGlmIGl0IGhhcyBoYWQgaXRzIFB5dGhvbiB0aHJlYWQgc3RhdGUgaW5pdGlhbGl6ZWQgYW5kIGN1cnJlbnRseSBpcworICAgaG9sZGluZyB0aGUgR0lMIHdpbGwgaXQgcmV0dXJuIDEuCisgICBUaGlzIGlzIG1haW5seSBhIGhlbHBlci9kaWFnbm9zdGljIGZ1bmN0aW9uLiAgSXQgY2FuIGJlIHVzZWZ1bAorICAgZm9yIGV4YW1wbGUgaW4gY2FsbGJhY2sgY29udGV4dHMgb3IgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIHdoZW4KKyAgIGtub3dpbmcgdGhhdCB0aGUgR0lMIGlzIGxvY2tlZCBjYW4gYWxsb3cgdGhlIGNhbGxlciB0byBwZXJmb3JtIHNlbnNpdGl2ZQorICAgYWN0aW9ucyBvciBvdGhlcndpc2UgYmVoYXZlIGRpZmZlcmVudGx5LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgbm9ybWFsbHkgdXNlZCB3aXRob3V0IGEgdHJhaWxpbmcgc2VtaWNvbG9uOyBsb29rIGZvcgogZXhhbXBsZSB1c2FnZSBpbiB0aGUgUHl0aG9uIHNvdXJjZSBkaXN0cmlidXRpb24uCiAKQEAgLTExMjksNyArMTE4Miw3IEBACiAKIC4uIGM6ZnVuY3Rpb246OiBQeVRocmVhZFN0YXRlICogUHlJbnRlcnByZXRlclN0YXRlX1RocmVhZEhlYWQoUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnApCiAKLSAgIFJldHVybiB0aGUgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCA6Yzp0eXBlOmBQeVRocmVhZFN0YXRlYCBvYmplY3QgaW4gdGhlIGxpc3Qgb2YKKyAgIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgZmlyc3QgOmM6dHlwZTpgUHlUaHJlYWRTdGF0ZWAgb2JqZWN0IGluIHRoZSBsaXN0IG9mCiAgICB0aHJlYWRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW50ZXJwcmV0ZXIgKmludGVycCouCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL2xvbmcucnN0IGIvRG9jL2MtYXBpL2xvbmcucnN0CmluZGV4IGQ1NDMwZmQuLmIzNDgwMTUgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9sb25nLnJzdAorKysgYi9Eb2MvYy1hcGkvbG9uZy5yc3QKQEAgLTgwLDcgKzgwLDcgQEAKICAgICpOVUxMKiBvbiBmYWlsdXJlLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlMb25nX0Zyb21TdHJpbmcoY2hhciAqc3RyLCBjaGFyICoqcGVuZCwgaW50IGJhc2UpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogCiAgICBSZXR1cm4gYSBuZXcgOmM6dHlwZTpgUHlMb25nT2JqZWN0YCBiYXNlZCBvbiB0aGUgc3RyaW5nIHZhbHVlIGluICpzdHIqLCB3aGljaAogICAgaXMgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHRoZSByYWRpeCBpbiAqYmFzZSouICBJZiAqcGVuZCogaXMgbm9uLSpOVUxMKiwKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tYXBwaW5nLnJzdCBiL0RvYy9jLWFwaS9tYXBwaW5nLnJzdAppbmRleCAwZWYyOTYxLi5lMzQxMDQ3IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbWFwcGluZy5yc3QKKysrIGIvRG9jL2MtYXBpL21hcHBpbmcucnN0CkBAIC0yMiw3ICsyMiw3IEBACiAgICBleHByZXNzaW9uIGBgbGVuKG8pYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogCiAgICBSZW1vdmUgdGhlIG1hcHBpbmcgZm9yIG9iamVjdCAqa2V5KiBmcm9tIHRoZSBvYmplY3QgKm8qLiBSZXR1cm4gYGAtMWBgIG9uCiAgICBmYWlsdXJlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gc3RhdGVtZW50IGBgZGVsIG9ba2V5XWBgLgpAQCAtMzQsNyArMzQsNyBAQAogICAgZmFpbHVyZS4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIHN0YXRlbWVudCBgYGRlbCBvW2tleV1gYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX0hhc0tleVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KQogCiAgICBPbiBzdWNjZXNzLCByZXR1cm4gYGAxYGAgaWYgdGhlIG1hcHBpbmcgb2JqZWN0IGhhcyB0aGUga2V5ICprZXkqIGFuZCBgYDBgYAogICAgb3RoZXJ3aXNlLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGtleSBpbiBvYGAuCkBAIC02NywxMyArNjcsMTMgQEAKICAgIHRoZSBQeXRob24gZXhwcmVzc2lvbiBgYGxpc3Qoby5pdGVtcygpKWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIAogICAgUmV0dXJuIGVsZW1lbnQgb2YgKm8qIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCAqa2V5KiBvciAqTlVMTCogb24gZmFpbHVyZS4KICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgb1trZXldYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5LCBQeU9iamVjdCAqdikKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSwgUHlPYmplY3QgKnYpCiAKICAgIE1hcCB0aGUgb2JqZWN0ICprZXkqIHRvIHRoZSB2YWx1ZSAqdiogaW4gb2JqZWN0ICpvKi4gUmV0dXJucyBgYC0xYGAgb24gZmFpbHVyZS4KICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBvW2tleV0gPSB2YGAuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvbWFyc2hhbC5yc3QgYi9Eb2MvYy1hcGkvbWFyc2hhbC5yc3QKaW5kZXggZGE0MDJhOC4uYTZkMGY0NiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL21hcnNoYWwucnN0CisrKyBiL0RvYy9jLWFwaS9tYXJzaGFsLnJzdApAQCAtNTMsNiArNTMsOCBAQAogICAgZm9yIHJlYWRpbmcuICBPbmx5IGEgMzItYml0IHZhbHVlIGNhbiBiZSByZWFkIGluIHVzaW5nIHRoaXMgZnVuY3Rpb24sCiAgICByZWdhcmRsZXNzIG9mIHRoZSBuYXRpdmUgc2l6ZSBvZiA6Yzp0eXBlOmBsb25nYC4KIAorICAgT24gZXJyb3IsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIGBgLTFgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShGSUxFICpmaWxlKQogCkBAIC02MCwxMSArNjIsMTUgQEAKICAgIGZvciByZWFkaW5nLiAgT25seSBhIDE2LWJpdCB2YWx1ZSBjYW4gYmUgcmVhZCBpbiB1c2luZyB0aGlzIGZ1bmN0aW9uLAogICAgcmVnYXJkbGVzcyBvZiB0aGUgbmF0aXZlIHNpemUgb2YgOmM6dHlwZTpgc2hvcnRgLgogCisgICBPbiBlcnJvciwgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gYGAtMWBgLgorCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZShGSUxFICpmaWxlKQogCiAgICBSZXR1cm4gYSBQeXRob24gb2JqZWN0IGZyb20gdGhlIGRhdGEgc3RyZWFtIGluIGEgOmM6dHlwZTpgRklMRVwqYCBvcGVuZWQgZm9yCi0gICByZWFkaW5nLiAgT24gZXJyb3IsIHNldHMgdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiAoOmV4YzpgRU9GRXJyb3JgIG9yCisgICByZWFkaW5nLgorCisgICBPbiBlcnJvciwgc2V0cyB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uICg6ZXhjOmBFT0ZFcnJvcmAgb3IKICAgIDpleGM6YFR5cGVFcnJvcmApIGFuZCByZXR1cm5zICpOVUxMKi4KIAogCkBAIC03NiwxNCArODIsMTcgQEAKICAgIGFnZ3Jlc3NpdmVseSBsb2FkIGZpbGUgZGF0YSBpbnRvIG1lbW9yeSBzbyB0aGF0IHRoZSBkZS1zZXJpYWxpemF0aW9uIGNhbgogICAgb3BlcmF0ZSBmcm9tIGRhdGEgaW4gbWVtb3J5IHJhdGhlciB0aGFuIHJlYWRpbmcgYSBieXRlIGF0IGEgdGltZSBmcm9tIHRoZQogICAgZmlsZS4gIE9ubHkgdXNlIHRoZXNlIHZhcmlhbnQgaWYgeW91IGFyZSBjZXJ0YWluIHRoYXQgeW91IHdvbid0IGJlIHJlYWRpbmcKLSAgIGFueXRoaW5nIGVsc2UgZnJvbSB0aGUgZmlsZS4gIE9uIGVycm9yLCBzZXRzIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24KLSAgICg6ZXhjOmBFT0ZFcnJvcmAgb3IgOmV4YzpgVHlwZUVycm9yYCkgYW5kIHJldHVybnMgKk5VTEwqLgorICAgYW55dGhpbmcgZWxzZSBmcm9tIHRoZSBmaWxlLgorCisgICBPbiBlcnJvciwgc2V0cyB0aGUgYXBwcm9wcmlhdGUgZXhjZXB0aW9uICg6ZXhjOmBFT0ZFcnJvcmAgb3IKKyAgIDpleGM6YFR5cGVFcnJvcmApIGFuZCByZXR1cm5zICpOVUxMKi4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjaGFyICpzdHJpbmcsIFB5X3NzaXplX3QgbGVuKQorLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoY29uc3QgY2hhciAqc3RyaW5nLCBQeV9zc2l6ZV90IGxlbikKIAogICAgUmV0dXJuIGEgUHl0aG9uIG9iamVjdCBmcm9tIHRoZSBkYXRhIHN0cmVhbSBpbiBhIGNoYXJhY3RlciBidWZmZXIKLSAgIGNvbnRhaW5pbmcgKmxlbiogYnl0ZXMgcG9pbnRlZCB0byBieSAqc3RyaW5nKi4gIE9uIGVycm9yLCBzZXRzIHRoZQotICAgYXBwcm9wcmlhdGUgZXhjZXB0aW9uICg6ZXhjOmBFT0ZFcnJvcmAgb3IgOmV4YzpgVHlwZUVycm9yYCkgYW5kIHJldHVybnMKLSAgICpOVUxMKi4KKyAgIGNvbnRhaW5pbmcgKmxlbiogYnl0ZXMgcG9pbnRlZCB0byBieSAqc3RyaW5nKi4KKworICAgT24gZXJyb3IsIHNldHMgdGhlIGFwcHJvcHJpYXRlIGV4Y2VwdGlvbiAoOmV4YzpgRU9GRXJyb3JgIG9yCisgICA6ZXhjOmBUeXBlRXJyb3JgKSBhbmQgcmV0dXJucyAqTlVMTCouCiAKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9tZW1vcnkucnN0IGIvRG9jL2MtYXBpL21lbW9yeS5yc3QKaW5kZXggOGFmYTU2YS4uNzkwODYyMiAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL21lbW9yeS5yc3QKKysrIGIvRG9jL2MtYXBpL21lbW9yeS5yc3QKQEAgLTg0LDYgKzg0LDQ4IEBACiBmb3IgdGhlIEkvTyBidWZmZXIgZXNjYXBlcyBjb21wbGV0ZWx5IHRoZSBQeXRob24gbWVtb3J5IG1hbmFnZXIuCiAKIAorUmF3IE1lbW9yeSBJbnRlcmZhY2UKKz09PT09PT09PT09PT09PT09PT09CisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2V0cyBhcmUgd3JhcHBlcnMgdG8gdGhlIHN5c3RlbSBhbGxvY2F0b3IuIFRoZXNlCitmdW5jdGlvbnMgYXJlIHRocmVhZC1zYWZlLCB0aGUgOnRlcm06YEdJTCA8Z2xvYmFsIGludGVycHJldGVyIGxvY2s+YCBkb2VzIG5vdAorbmVlZCB0byBiZSBoZWxkLgorCitUaGUgZGVmYXVsdCByYXcgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciB1c2VzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorOmM6ZnVuYzpgbWFsbG9jYCwgOmM6ZnVuYzpgcmVhbGxvY2AgYW5kIDpjOmZ1bmM6YGZyZWVgOyBjYWxsIGBgbWFsbG9jKDEpYGAgd2hlbgorcmVxdWVzdGluZyB6ZXJvIGJ5dGVzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQqIFB5TWVtX1Jhd01hbGxvYyhzaXplX3QgbikKKworICAgQWxsb2NhdGVzICpuKiBieXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgb2YgdHlwZSA6Yzp0eXBlOmB2b2lkXCpgIHRvIHRoZQorICAgYWxsb2NhdGVkIG1lbW9yeSwgb3IgKk5VTEwqIGlmIHRoZSByZXF1ZXN0IGZhaWxzLiBSZXF1ZXN0aW5nIHplcm8gYnl0ZXMKKyAgIHJldHVybnMgYSBkaXN0aW5jdCBub24tKk5VTEwqIHBvaW50ZXIgaWYgcG9zc2libGUsIGFzIGlmCisgICBgYFB5TWVtX1Jhd01hbGxvYygxKWBgIGhhZCBiZWVuIGNhbGxlZCBpbnN0ZWFkLiBUaGUgbWVtb3J5IHdpbGwgbm90IGhhdmUKKyAgIGJlZW4gaW5pdGlhbGl6ZWQgaW4gYW55IHdheS4KKworCisuLiBjOmZ1bmN0aW9uOjogdm9pZCogUHlNZW1fUmF3UmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbikKKworICAgUmVzaXplcyB0aGUgbWVtb3J5IGJsb2NrIHBvaW50ZWQgdG8gYnkgKnAqIHRvICpuKiBieXRlcy4gVGhlIGNvbnRlbnRzIHdpbGwKKyAgIGJlIHVuY2hhbmdlZCB0byB0aGUgbWluaW11bSBvZiB0aGUgb2xkIGFuZCB0aGUgbmV3IHNpemVzLiBJZiAqcCogaXMgKk5VTEwqLAorICAgdGhlIGNhbGwgaXMgZXF1aXZhbGVudCB0byBgYFB5TWVtX1Jhd01hbGxvYyhuKWBgOyBlbHNlIGlmICpuKiBpcyBlcXVhbCB0bworICAgemVybywgdGhlIG1lbW9yeSBibG9jayBpcyByZXNpemVkIGJ1dCBpcyBub3QgZnJlZWQsIGFuZCB0aGUgcmV0dXJuZWQgcG9pbnRlcgorICAgaXMgbm9uLSpOVUxMKi4gVW5sZXNzICpwKiBpcyAqTlVMTCosIGl0IG11c3QgaGF2ZSBiZWVuIHJldHVybmVkIGJ5IGEKKyAgIHByZXZpb3VzIGNhbGwgdG8gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvciA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYC4gSWYKKyAgIHRoZSByZXF1ZXN0IGZhaWxzLCA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCByZXR1cm5zICpOVUxMKiBhbmQgKnAqIHJlbWFpbnMKKyAgIGEgdmFsaWQgcG9pbnRlciB0byB0aGUgcHJldmlvdXMgbWVtb3J5IGFyZWEuCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fUmF3RnJlZSh2b2lkICpwKQorCisgICBGcmVlcyB0aGUgbWVtb3J5IGJsb2NrIHBvaW50ZWQgdG8gYnkgKnAqLCB3aGljaCBtdXN0IGhhdmUgYmVlbiByZXR1cm5lZCBieSBhCisgICBwcmV2aW91cyBjYWxsIHRvIDpjOmZ1bmM6YFB5TWVtX1Jhd01hbGxvY2Agb3IgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AuCisgICBPdGhlcndpc2UsIG9yIGlmIGBgUHlNZW1fRnJlZShwKWBgIGhhcyBiZWVuIGNhbGxlZCBiZWZvcmUsIHVuZGVmaW5lZAorICAgYmVoYXZpb3Igb2NjdXJzLiBJZiAqcCogaXMgKk5VTEwqLCBubyBvcGVyYXRpb24gaXMgcGVyZm9ybWVkLgorCisKIC4uIF9tZW1vcnlpbnRlcmZhY2U6CiAKIE1lbW9yeSBJbnRlcmZhY2UKQEAgLTkxLDggKzEzMywxNiBAQAogCiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIHNldHMsIG1vZGVsZWQgYWZ0ZXIgdGhlIEFOU0kgQyBzdGFuZGFyZCwgYnV0IHNwZWNpZnlpbmcKIGJlaGF2aW9yIHdoZW4gcmVxdWVzdGluZyB6ZXJvIGJ5dGVzLCBhcmUgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW5nIGFuZCByZWxlYXNpbmcKLW1lbW9yeSBmcm9tIHRoZSBQeXRob24gaGVhcDoKK21lbW9yeSBmcm9tIHRoZSBQeXRob24gaGVhcC4KIAorVGhlIGRlZmF1bHQgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciB1c2VzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorOmM6ZnVuYzpgbWFsbG9jYCwgOmM6ZnVuYzpgcmVhbGxvY2AgYW5kIDpjOmZ1bmM6YGZyZWVgOyBjYWxsIGBgbWFsbG9jKDEpYGAgd2hlbgorcmVxdWVzdGluZyB6ZXJvIGJ5dGVzLgorCisuLiB3YXJuaW5nOjoKKworICAgVGhlIDp0ZXJtOmBHSUwgPGdsb2JhbCBpbnRlcnByZXRlciBsb2NrPmAgbXVzdCBiZSBoZWxkIHdoZW4gdXNpbmcgdGhlc2UKKyAgIGZ1bmN0aW9ucy4KIAogLi4gYzpmdW5jdGlvbjo6IHZvaWQqIFB5TWVtX01hbGxvYyhzaXplX3QgbikKIApAQCAtMTU1LDYgKzIwNSwxMjUgQEAKIDpjOmZ1bmM6YFB5TWVtX05FV2AsIDpjOmZ1bmM6YFB5TWVtX1JFU0laRWAsIDpjOmZ1bmM6YFB5TWVtX0RFTGAuCiAKIAorQ3VzdG9taXplIE1lbW9yeSBBbGxvY2F0b3JzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGM6dHlwZTo6IFB5TWVtQWxsb2NhdG9yCisKKyAgIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGEgbWVtb3J5IGJsb2NrIGFsbG9jYXRvci4gVGhlIHN0cnVjdHVyZSBoYXMKKyAgIGZvdXIgZmllbGRzOgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IEZpZWxkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IGBgdm9pZCAqY3R4YGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdXNlciBjb250ZXh0IHBhc3NlZCBhcyBmaXJzdCBhcmd1bWVudCB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCogbWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpYGAgICAgICAgICAgICAgICAgIHwgYWxsb2NhdGUgYSBtZW1vcnkgYmxvY2sgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCogcmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKWBgIHwgYWxsb2NhdGUgb3IgcmVzaXplIGEgbWVtb3J5IGJsb2NrICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCBmcmVlKHZvaWQgKmN0eCwgdm9pZCAqcHRyKWBgICAgICAgICAgICAgICAgICAgICAgIHwgZnJlZSBhIG1lbW9yeSBibG9jayAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKy4uIGM6dHlwZTo6IFB5TWVtQWxsb2NhdG9yRG9tYWluCisKKyAgIEVudW0gdXNlZCB0byBpZGVudGlmeSBhbiBhbGxvY2F0b3IgZG9tYWluLiBEb21haW5zOgorCisgICAqIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9SQVdgOiBmdW5jdGlvbnMgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AgYW5kIDpjOmZ1bmM6YFB5TWVtX1Jhd0ZyZWVgCisgICAqIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9NRU1gOiBmdW5jdGlvbnMgOmM6ZnVuYzpgUHlNZW1fTWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AgYW5kIDpjOmZ1bmM6YFB5TWVtX0ZyZWVgCisgICAqIDpjOmRhdGE6YFBZTUVNX0RPTUFJTl9PQkpgOiBmdW5jdGlvbnMgOmM6ZnVuYzpgUHlPYmplY3RfTWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlPYmplY3RfUmVhbGxvY2AgYW5kIDpjOmZ1bmM6YFB5T2JqZWN0X0ZyZWVgCisKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQgUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgR2V0IHRoZSBtZW1vcnkgYmxvY2sgYWxsb2NhdG9yIG9mIHRoZSBzcGVjaWZpZWQgZG9tYWluLgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5TWVtX1NldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpCisKKyAgIFNldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4KKworICAgVGhlIG5ldyBhbGxvY2F0b3IgbXVzdCByZXR1cm4gYSBkaXN0aW5jdCBub24tTlVMTCBwb2ludGVyIHdoZW4gcmVxdWVzdGluZworICAgemVybyBieXRlcy4KKworICAgRm9yIHRoZSA6YzpkYXRhOmBQWU1FTV9ET01BSU5fUkFXYCBkb21haW4sIHRoZSBhbGxvY2F0b3IgbXVzdCBiZQorICAgdGhyZWFkLXNhZmU6IHRoZSA6dGVybTpgR0lMIDxnbG9iYWwgaW50ZXJwcmV0ZXIgbG9jaz5gIGlzIG5vdCBoZWxkIHdoZW4gdGhlCisgICBhbGxvY2F0b3IgaXMgY2FsbGVkLgorCisgICBJZiB0aGUgbmV3IGFsbG9jYXRvciBpcyBub3QgYSBob29rIChkb2VzIG5vdCBjYWxsIHRoZSBwcmV2aW91cyBhbGxvY2F0b3IpLAorICAgdGhlIDpjOmZ1bmM6YFB5TWVtX1NldHVwRGVidWdIb29rc2AgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgdG8gcmVpbnN0YWxsIHRoZQorICAgZGVidWcgaG9va3Mgb24gdG9wIG9uIHRoZSBuZXcgYWxsb2NhdG9yLgorCisKKy4uIGM6ZnVuY3Rpb246OiB2b2lkIFB5TWVtX1NldHVwRGVidWdIb29rcyh2b2lkKQorCisgICBTZXR1cCBob29rcyB0byBkZXRlY3QgYnVncyBpbiB0aGUgZm9sbG93aW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9yCisgICBmdW5jdGlvbnM6CisKKyAgIC0gOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCwgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AsCisgICAgIDpjOmZ1bmM6YFB5TWVtX1Jhd0ZyZWVgCisgICAtIDpjOmZ1bmM6YFB5TWVtX01hbGxvY2AsIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgLCA6YzpmdW5jOmBQeU1lbV9GcmVlYAorICAgLSA6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLCA6YzpmdW5jOmBQeU9iamVjdF9SZWFsbG9jYCwKKyAgICAgOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAKKworICAgTmV3bHkgYWxsb2NhdGVkIG1lbW9yeSBpcyBmaWxsZWQgd2l0aCB0aGUgYnl0ZSBgYDB4Q0JgYCwgZnJlZWQgbWVtb3J5IGlzCisgICBmaWxsZWQgd2l0aCB0aGUgYnl0ZSBgYDB4REJgYC4gQWRkaXRpb25hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogOmM6ZnVuYzpgUHlPYmplY3RfRnJlZWAgY2FsbGVkIG9uIGEgYnVmZmVyCisgICAgIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgCisgICAtIGRldGVjdCB3cml0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBidWZmZXIgKGJ1ZmZlciB1bmRlcmZsb3cpCisgICAtIGRldGVjdCB3cml0ZSBhZnRlciB0aGUgZW5kIG9mIHRoZSBidWZmZXIgKGJ1ZmZlciBvdmVyZmxvdykKKworICAgVGhlIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBQeXRob24gaXMgbm90IGNvbXBpbGVkIGlzIGRlYnVnIG1vZGUuCisKKworQ3VzdG9taXplIFB5T2JqZWN0IEFyZW5hIEFsbG9jYXRvcgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gaGFzIGEgKnB5bWFsbG9jKiBhbGxvY2F0b3IgZm9yIGFsbG9jYXRpb25zIHNtYWxsZXIgdGhhbiA1MTIgYnl0ZXMuIFRoaXMKK2FsbG9jYXRvciBpcyBvcHRpbWl6ZWQgZm9yIHNtYWxsIG9iamVjdHMgd2l0aCBhIHNob3J0IGxpZmV0aW1lLiBJdCB1c2VzIG1lbW9yeQorbWFwcGluZ3MgY2FsbGVkICJhcmVuYXMiIHdpdGggYSBmaXhlZCBzaXplIG9mIDI1NiBLQi4gSXQgZmFsbHMgYmFjayB0bworOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBhbmQgOmM6ZnVuYzpgUHlNZW1fUmF3UmVhbGxvY2AgZm9yIGFsbG9jYXRpb25zIGxhcmdlcgordGhhbiA1MTIgYnl0ZXMuICAqcHltYWxsb2MqIGlzIHRoZSBkZWZhdWx0IGFsbG9jYXRvciB1c2VkIGJ5Cis6YzpmdW5jOmBQeU9iamVjdF9NYWxsb2NgLgorCitUaGUgZGVmYXVsdCBhcmVuYSBhbGxvY2F0b3IgdXNlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKworKiA6YzpmdW5jOmBWaXJ0dWFsQWxsb2NgIGFuZCA6YzpmdW5jOmBWaXJ0dWFsRnJlZWAgb24gV2luZG93cywKKyogOmM6ZnVuYzpgbW1hcGAgYW5kIDpjOmZ1bmM6YG11bm1hcGAgaWYgYXZhaWxhYmxlLAorKiA6YzpmdW5jOmBtYWxsb2NgIGFuZCA6YzpmdW5jOmBmcmVlYCBvdGhlcndpc2UuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBjOnR5cGU6OiBQeU9iamVjdEFyZW5hQWxsb2NhdG9yCisKKyAgIFN0cnVjdHVyZSB1c2VkIHRvIGRlc2NyaWJlIGFuIGFyZW5hIGFsbG9jYXRvci4gVGhlIHN0cnVjdHVyZSBoYXMKKyAgIHRocmVlIGZpZWxkczoKKworICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmllbGQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworICAgfCBgYHZvaWQgKmN0eGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIGZpcnN0IGFyZ3VtZW50IHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgdm9pZCogYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSlgYCAgICAgICAgICB8IGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgYGB2b2lkIGZyZWUodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSwgdm9pZCAqcHRyKWBgIHwgZnJlZSBhbiBhcmVuYSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQorCisgICBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4KKworLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKKworICAgU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuCisKKwogLi4gX21lbW9yeWV4YW1wbGVzOgogCiBFeGFtcGxlcwpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL21vZHVsZS5yc3QgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdAppbmRleCBiZDQ2MTcwLi45ODVhMzQ3IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvbW9kdWxlLnJzdAorKysgYi9Eb2MvYy1hcGkvbW9kdWxlLnJzdApAQCAtMzUsMTMgKzM1LDIwIEBACiAgICAgICBzaW5nbGU6IF9fbmFtZV9fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2RvY19fIChtb2R1bGUgYXR0cmlidXRlKQogICAgICAgc2luZ2xlOiBfX2ZpbGVfXyAobW9kdWxlIGF0dHJpYnV0ZSkKKyAgICAgIHNpbmdsZTogX19wYWNrYWdlX18gKG1vZHVsZSBhdHRyaWJ1dGUpCisgICAgICBzaW5nbGU6IF9fbG9hZGVyX18gKG1vZHVsZSBhdHRyaWJ1dGUpCiAKICAgIFJldHVybiBhIG5ldyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqbmFtZSouCi0gICBPbmx5IHRoZSBtb2R1bGUncyA6YXR0cjpgX19kb2NfX2AgYW5kIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlcyBhcmUgZmlsbGVkIGluOwotICAgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nIGEgOmF0dHI6YF9fZmlsZV9fYCBhdHRyaWJ1dGUuCisgICBUaGUgbW9kdWxlJ3MgOmF0dHI6YF9fbmFtZV9fYCwgOmF0dHI6YF9fZG9jX19gLCA6YXR0cjpgX19wYWNrYWdlX19gLCBhbmQKKyAgIDphdHRyOmBfX2xvYWRlcl9fYCBhdHRyaWJ1dGVzIGFyZSBmaWxsZWQgaW4gKGFsbCBidXQgOmF0dHI6YF9fbmFtZV9fYCBhcmUgc2V0CisgICB0byBgYE5vbmVgYCk7IHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyBhIDphdHRyOmBfX2ZpbGVfX2AKKyAgIGF0dHJpYnV0ZS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICA6YXR0cjpgX19wYWNrYWdlX19gIGFuZCA6YXR0cjpgX19sb2FkZXJfX2AgYXJlIHNldCB0byBgYE5vbmVgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5TW9kdWxlX05ldyhjb25zdCBjaGFyICpuYW1lKQogCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvb2JqZWN0LnJzdCBiL0RvYy9jLWFwaS9vYmplY3QucnN0CmluZGV4IDBhYmEzNjAuLjk3YjQ1YjEgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS9vYmplY3QucnN0CisrKyBiL0RvYy9jLWFwaS9vYmplY3QucnN0CkBAIC0xMDEsNyArMTAxLDcgQEAKICAgIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbiBzdGF0ZW1lbnQgYGBkZWwgby5hdHRyX25hbWVgYC4KIAogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VHlwZV9HZW5lcmljR2V0RGljdChQeU9iamVjdCAqbywgdm9pZCAqY29udGV4dCkKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfR2VuZXJpY0dldERpY3QoUHlPYmplY3QgKm8sIHZvaWQgKmNvbnRleHQpCiAKICAgIEEgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGdldHRlciBvZiBhIGBgX19kaWN0X19gYCBkZXNjcmlwdG9yLiBJdAogICAgY3JlYXRlcyB0aGUgZGljdGlvbmFyeSBpZiBuZWNlc3NhcnkuCkBAIC0xMDksNyArMTA5LDcgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlUeXBlX0dlbmVyaWNTZXREaWN0KFB5T2JqZWN0ICpvLCB2b2lkICpjb250ZXh0KQorLi4gYzpmdW5jdGlvbjo6IGludCBQeU9iamVjdF9HZW5lcmljU2V0RGljdChQeU9iamVjdCAqbywgdm9pZCAqY29udGV4dCkKIAogICAgQSBnZW5lcmljIGltcGxlbWVudGF0aW9uIGZvciB0aGUgc2V0dGVyIG9mIGEgYGBfX2RpY3RfX2BgIGRlc2NyaXB0b3IuIFRoaXMKICAgIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGFsbG93IHRoZSBkaWN0aW9uYXJ5IHRvIGJlIGRlbGV0ZWQuCkBAIC0xNDksNiArMTQ5LDkgQEAKICAgIHJlcHJlc2VudGF0aW9uIG9uIHN1Y2Nlc3MsICpOVUxMKiBvbiBmYWlsdXJlLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUKICAgIFB5dGhvbiBleHByZXNzaW9uIGBgcmVwcihvKWBgLiAgQ2FsbGVkIGJ5IHRoZSA6ZnVuYzpgcmVwcmAgYnVpbHQtaW4gZnVuY3Rpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyBhIGRlYnVnIGFzc2VydGlvbiB0byBoZWxwIGVuc3VyZSB0aGF0IGl0CisgICAgICBkb2VzIG5vdCBzaWxlbnRseSBkaXNjYXJkIGFuIGFjdGl2ZSBleGNlcHRpb24uCiAKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQVNDSUkoUHlPYmplY3QgKm8pCiAKQEAgLTE3MCw2ICsxNzMsMTAgQEAKICAgIFB5dGhvbiBleHByZXNzaW9uIGBgc3RyKG8pYGAuICBDYWxsZWQgYnkgdGhlIDpmdW5jOmBzdHJgIGJ1aWx0LWluIGZ1bmN0aW9uCiAgICBhbmQsIHRoZXJlZm9yZSwgYnkgdGhlIDpmdW5jOmBwcmludGAgZnVuY3Rpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIG5vdyBpbmNsdWRlcyBhIGRlYnVnIGFzc2VydGlvbiB0byBoZWxwIGVuc3VyZSB0aGF0IGl0CisgICAgICBkb2VzIG5vdCBzaWxlbnRseSBkaXNjYXJkIGFuIGFjdGl2ZSBleGNlcHRpb24uCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQnl0ZXMoUHlPYmplY3QgKm8pCiAKICAgIC4uIGluZGV4OjogYnVpbHRpbjogYnl0ZXMKQEAgLTE4MCw0MCArMTg3LDQ1IEBACiAgICBhIFR5cGVFcnJvciBpcyByYWlzZWQgd2hlbiAqbyogaXMgYW4gaW50ZWdlciBpbnN0ZWFkIG9mIGEgemVyby1pbml0aWFsaXplZAogICAgYnl0ZXMgb2JqZWN0LgogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X0lzSW5zdGFuY2UoUHlPYmplY3QgKmluc3QsIFB5T2JqZWN0ICpjbHMpCi0KLSAgIFJldHVybnMgYGAxYGAgaWYgKmluc3QqIGlzIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyAqY2xzKiBvciBhIHN1YmNsYXNzIG9mCi0gICAqY2xzKiwgb3IgYGAwYGAgaWYgbm90LiAgT24gZXJyb3IsIHJldHVybnMgYGAtMWBgIGFuZCBzZXRzIGFuIGV4Y2VwdGlvbi4gIElmCi0gICAqY2xzKiBpcyBhIHR5cGUgb2JqZWN0IHJhdGhlciB0aGFuIGEgY2xhc3Mgb2JqZWN0LCA6YzpmdW5jOmBQeU9iamVjdF9Jc0luc3RhbmNlYAotICAgcmV0dXJucyBgYDFgYCBpZiAqaW5zdCogaXMgb2YgdHlwZSAqY2xzKi4gIElmICpjbHMqIGlzIGEgdHVwbGUsIHRoZSBjaGVjayB3aWxsCi0gICBiZSBkb25lIGFnYWluc3QgZXZlcnkgZW50cnkgaW4gKmNscyouIFRoZSByZXN1bHQgd2lsbCBiZSBgYDFgYCB3aGVuIGF0IGxlYXN0IG9uZQotICAgb2YgdGhlIGNoZWNrcyByZXR1cm5zIGBgMWBgLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBgYDBgYC4gSWYgKmluc3QqIGlzIG5vdCBhCi0gICBjbGFzcyBpbnN0YW5jZSBhbmQgKmNscyogaXMgbmVpdGhlciBhIHR5cGUgb2JqZWN0LCBub3IgYSBjbGFzcyBvYmplY3QsIG5vciBhCi0gICB0dXBsZSwgKmluc3QqIG11c3QgaGF2ZSBhIDphdHRyOmB+aW5zdGFuY2UuX19jbGFzc19fYCBhdHRyaWJ1dGUgLS0tIHRoZQotICAgY2xhc3MgcmVsYXRpb25zaGlwIG9mIHRoZSB2YWx1ZSBvZiB0aGF0IGF0dHJpYnV0ZSB3aXRoICpjbHMqIHdpbGwgYmUgdXNlZAotICAgdG8gZGV0ZXJtaW5lIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbi4KLQotCi1TdWJjbGFzcyBkZXRlcm1pbmF0aW9uIGlzIGRvbmUgaW4gYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIHdheSwgYnV0IGluY2x1ZGVzIGEKLXdyaW5rbGUgdGhhdCBpbXBsZW1lbnRvcnMgb2YgZXh0ZW5zaW9ucyB0byB0aGUgY2xhc3Mgc3lzdGVtIG1heSB3YW50IHRvIGJlIGF3YXJlCi1vZi4gIElmIDpjbGFzczpgQWAgYW5kIDpjbGFzczpgQmAgYXJlIGNsYXNzIG9iamVjdHMsIDpjbGFzczpgQmAgaXMgYSBzdWJjbGFzcyBvZgotOmNsYXNzOmBBYCBpZiBpdCBpbmhlcml0cyBmcm9tIDpjbGFzczpgQWAgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkuICBJZgotZWl0aGVyIGlzIG5vdCBhIGNsYXNzIG9iamVjdCwgYSBtb3JlIGdlbmVyYWwgbWVjaGFuaXNtIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZQotY2xhc3MgcmVsYXRpb25zaGlwIG9mIHRoZSB0d28gb2JqZWN0cy4gIFdoZW4gdGVzdGluZyBpZiAqQiogaXMgYSBzdWJjbGFzcyBvZgotKkEqLCBpZiAqQSogaXMgKkIqLCA6YzpmdW5jOmBQeU9iamVjdF9Jc1N1YmNsYXNzYCByZXR1cm5zIHRydWUuICBJZiAqQSogYW5kICpCKgotYXJlIGRpZmZlcmVudCBvYmplY3RzLCAqQioncyA6YXR0cjpgfmNsYXNzLl9fYmFzZXNfX2AgYXR0cmlidXRlIGlzIHNlYXJjaGVkIGluCi1hIGRlcHRoLWZpcnN0IGZhc2hpb24gZm9yICpBKiAtLS0gdGhlIHByZXNlbmNlIG9mIHRoZSA6YXR0cjpgfmNsYXNzLl9fYmFzZXNfX2AKLWF0dHJpYnV0ZSBpcyBjb25zaWRlcmVkIHN1ZmZpY2llbnQgZm9yIHRoaXMgZGV0ZXJtaW5hdGlvbi4KLQogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5T2JqZWN0X0lzU3ViY2xhc3MoUHlPYmplY3QgKmRlcml2ZWQsIFB5T2JqZWN0ICpjbHMpCiAKLSAgIFJldHVybnMgYGAxYGAgaWYgdGhlIGNsYXNzICpkZXJpdmVkKiBpcyBpZGVudGljYWwgdG8gb3IgZGVyaXZlZCBmcm9tIHRoZSBjbGFzcwotICAgKmNscyosIG90aGVyd2lzZSByZXR1cm5zIGBgMGBgLiAgSW4gY2FzZSBvZiBhbiBlcnJvciwgcmV0dXJucyBgYC0xYGAuIElmICpjbHMqCi0gICBpcyBhIHR1cGxlLCB0aGUgY2hlY2sgd2lsbCBiZSBkb25lIGFnYWluc3QgZXZlcnkgZW50cnkgaW4gKmNscyouIFRoZSByZXN1bHQgd2lsbAotICAgYmUgYGAxYGAgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGNoZWNrcyByZXR1cm5zIGBgMWBgLCBvdGhlcndpc2UgaXQgd2lsbCBiZQotICAgYGAwYGAuIElmIGVpdGhlciAqZGVyaXZlZCogb3IgKmNscyogaXMgbm90IGFuIGFjdHVhbCBjbGFzcyBvYmplY3QgKG9yIHR1cGxlKSwKLSAgIHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgZ2VuZXJpYyBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlLgorICAgUmV0dXJuIGBgMWBgIGlmIHRoZSBjbGFzcyAqZGVyaXZlZCogaXMgaWRlbnRpY2FsIHRvIG9yIGRlcml2ZWQgZnJvbSB0aGUgY2xhc3MKKyAgICpjbHMqLCBvdGhlcndpc2UgcmV0dXJuIGBgMGBgLiAgSW4gY2FzZSBvZiBhbiBlcnJvciwgcmV0dXJuIGBgLTFgYC4KKworICAgSWYgKmNscyogaXMgYSB0dXBsZSwgdGhlIGNoZWNrIHdpbGwgYmUgZG9uZSBhZ2FpbnN0IGV2ZXJ5IGVudHJ5IGluICpjbHMqLgorICAgVGhlIHJlc3VsdCB3aWxsIGJlIGBgMWBgIHdoZW4gYXQgbGVhc3Qgb25lIG9mIHRoZSBjaGVja3MgcmV0dXJucyBgYDFgYCwKKyAgIG90aGVyd2lzZSBpdCB3aWxsIGJlIGBgMGBgLgorCisgICBJZiAqY2xzKiBoYXMgYSA6bWV0aDpgfmNsYXNzLl9fc3ViY2xhc3NjaGVja19fYCBtZXRob2QsIGl0IHdpbGwgYmUgY2FsbGVkIHRvCisgICBkZXRlcm1pbmUgdGhlIHN1YmNsYXNzIHN0YXR1cyBhcyBkZXNjcmliZWQgaW4gOnBlcDpgMzExOWAuICBPdGhlcndpc2UsCisgICAqZGVyaXZlZCogaXMgYSBzdWJjbGFzcyBvZiAqY2xzKiBpZiBpdCBpcyBhIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJjbGFzcywKKyAgIGkuZS4gY29udGFpbmVkIGluIGBgY2xzLl9fbXJvX19gYC4KKworICAgTm9ybWFsbHkgb25seSBjbGFzcyBvYmplY3RzLCBpLmUuIGluc3RhbmNlcyBvZiA6Y2xhc3M6YHR5cGVgIG9yIGEgZGVyaXZlZAorICAgY2xhc3MsIGFyZSBjb25zaWRlcmVkIGNsYXNzZXMuICBIb3dldmVyLCBvYmplY3RzIGNhbiBvdmVycmlkZSB0aGlzIGJ5IGhhdmluZworICAgYSA6YXR0cjpgX19iYXNlc19fYCBhdHRyaWJ1dGUgKHdoaWNoIG11c3QgYmUgYSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMpLgorCisKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlPYmplY3RfSXNJbnN0YW5jZShQeU9iamVjdCAqaW5zdCwgUHlPYmplY3QgKmNscykKKworICAgUmV0dXJuIGBgMWBgIGlmICppbnN0KiBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgKmNscyogb3IgYSBzdWJjbGFzcyBvZgorICAgKmNscyosIG9yIGBgMGBgIGlmIG5vdC4gIE9uIGVycm9yLCByZXR1cm5zIGBgLTFgYCBhbmQgc2V0cyBhbiBleGNlcHRpb24uCisKKyAgIElmICpjbHMqIGlzIGEgdHVwbGUsIHRoZSBjaGVjayB3aWxsIGJlIGRvbmUgYWdhaW5zdCBldmVyeSBlbnRyeSBpbiAqY2xzKi4KKyAgIFRoZSByZXN1bHQgd2lsbCBiZSBgYDFgYCB3aGVuIGF0IGxlYXN0IG9uZSBvZiB0aGUgY2hlY2tzIHJldHVybnMgYGAxYGAsCisgICBvdGhlcndpc2UgaXQgd2lsbCBiZSBgYDBgYC4KKworICAgSWYgKmNscyogaGFzIGEgOm1ldGg6YH5jbGFzcy5fX2luc3RhbmNlY2hlY2tfX2AgbWV0aG9kLCBpdCB3aWxsIGJlIGNhbGxlZCB0bworICAgZGV0ZXJtaW5lIHRoZSBzdWJjbGFzcyBzdGF0dXMgYXMgZGVzY3JpYmVkIGluIDpwZXA6YDMxMTlgLiAgT3RoZXJ3aXNlLCAqaW5zdCoKKyAgIGlzIGFuIGluc3RhbmNlIG9mICpjbHMqIGlmIGl0cyBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mICpjbHMqLgorCisgICBBbiBpbnN0YW5jZSAqaW5zdCogY2FuIG92ZXJyaWRlIHdoYXQgaXMgY29uc2lkZXJlZCBpdHMgY2xhc3MgYnkgaGF2aW5nIGEKKyAgIDphdHRyOmBfX2NsYXNzX19gIGF0dHJpYnV0ZS4KKworICAgQW4gb2JqZWN0ICpjbHMqIGNhbiBvdmVycmlkZSBpZiBpdCBpcyBjb25zaWRlcmVkIGEgY2xhc3MsIGFuZCB3aGF0IGl0cyBiYXNlCisgICBjbGFzc2VzIGFyZSwgYnkgaGF2aW5nIGEgOmF0dHI6YF9fYmFzZXNfX2AgYXR0cmlidXRlICh3aGljaCBtdXN0IGJlIGEgdHVwbGUKKyAgIG9mIGJhc2UgY2xhc3NlcykuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeUNhbGxhYmxlX0NoZWNrKFB5T2JqZWN0ICpvKQpAQCAtMjQwLDcgKzI1Miw3IEBACiAgICBvZiB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBjYWxsYWJsZV9vYmplY3QoKmFyZ3MpYGAuCiAKIAotLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5T2JqZWN0ICpjYWxsYWJsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiAKICAgIENhbGwgYSBjYWxsYWJsZSBQeXRob24gb2JqZWN0ICpjYWxsYWJsZSosIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YgQyBhcmd1bWVudHMuCiAgICBUaGUgQyBhcmd1bWVudHMgYXJlIGRlc2NyaWJlZCB1c2luZyBhIDpjOmZ1bmM6YFB5X0J1aWxkVmFsdWVgIHN0eWxlIGZvcm1hdApAQCAtMjUwLDggKzI2MiwxMSBAQAogICAgcGFzcyA6Yzp0eXBlOmBQeU9iamVjdCBcKmAgYXJncywgOmM6ZnVuYzpgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJnc2AgaXMgYQogICAgZmFzdGVyIGFsdGVybmF0aXZlLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHR5cGUgb2YgKmZvcm1hdCogd2FzIGNoYW5nZWQgZnJvbSBgYGNoYXIgKmBgLgogCi0uLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sIGNoYXIgKm1ldGhvZCwgY2hhciAqZm9ybWF0LCAuLi4pCisKKy4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY29uc3QgY2hhciAqbWV0aG9kLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIAogICAgQ2FsbCB0aGUgbWV0aG9kIG5hbWVkICptZXRob2QqIG9mIG9iamVjdCAqbyogd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZiBDCiAgICBhcmd1bWVudHMuICBUaGUgQyBhcmd1bWVudHMgYXJlIGRlc2NyaWJlZCBieSBhIDpjOmZ1bmM6YFB5X0J1aWxkVmFsdWVgIGZvcm1hdApAQCAtMjYxLDYgKzI3Niw5IEBACiAgICBOb3RlIHRoYXQgaWYgeW91IG9ubHkgcGFzcyA6Yzp0eXBlOmBQeU9iamVjdCBcKmAgYXJncywKICAgIDpjOmZ1bmM6YFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzYCBpcyBhIGZhc3RlciBhbHRlcm5hdGl2ZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSB0eXBlcyBvZiAqbWV0aG9kKiBhbmQgKmZvcm1hdCogd2VyZSBjaGFuZ2VkIGZyb20gYGBjaGFyICpgYC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoUHlPYmplY3QgKmNhbGxhYmxlLCAuLi4sIE5VTEwpCiAKQEAgLTM0Miw2ICszNjAsMTYgQEAKICAgIHJldHVybmVkLiAgVGhpcyBpcyB0aGUgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsZW4obylgYC4KIAogCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGRlZmF1bHQpCisKKyAgIFJldHVybiBhbiBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICpvKi4gRmlyc3QgdHJ5IHRvIHJldHVybiBpdHMKKyAgIGFjdHVhbCBsZW5ndGgsIHRoZW4gYW4gZXN0aW1hdGUgdXNpbmcgOm1ldGg6YH5vYmplY3QuX19sZW5ndGhfaGludF9fYCwgYW5kCisgICBmaW5hbGx5IHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4gT24gZXJyb3IgcmV0dXJuIGBgLTFgYC4gVGhpcyBpcyB0aGUKKyAgIGVxdWl2YWxlbnQgdG8gdGhlIFB5dGhvbiBleHByZXNzaW9uIGBgb3BlcmF0b3IubGVuZ3RoX2hpbnQobywgZGVmYXVsdClgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeU9iamVjdF9HZXRJdGVtKFB5T2JqZWN0ICpvLCBQeU9iamVjdCAqa2V5KQogCiAgICBSZXR1cm4gZWxlbWVudCBvZiAqbyogY29ycmVzcG9uZGluZyB0byB0aGUgb2JqZWN0ICprZXkqIG9yICpOVUxMKiBvbiBmYWlsdXJlLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3NlcXVlbmNlLnJzdCBiL0RvYy9jLWFwaS9zZXF1ZW5jZS5yc3QKaW5kZXggMDI5N2JhMy4uNTk2MGRiOSAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3NlcXVlbmNlLnJzdAorKysgYi9Eb2MvYy1hcGkvc2VxdWVuY2UucnN0CkBAIC0xMDcsOCArMTA3LDkgQEAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0xpc3QoUHlPYmplY3QgKm8pCiAKLSAgIFJldHVybiBhIGxpc3Qgb2JqZWN0IHdpdGggdGhlIHNhbWUgY29udGVudHMgYXMgdGhlIGFyYml0cmFyeSBzZXF1ZW5jZSAqbyouICBUaGUKLSAgIHJldHVybmVkIGxpc3QgaXMgZ3VhcmFudGVlZCB0byBiZSBuZXcuCisgICBSZXR1cm4gYSBsaXN0IG9iamVjdCB3aXRoIHRoZSBzYW1lIGNvbnRlbnRzIGFzIHRoZSBzZXF1ZW5jZSBvciBpdGVyYWJsZSAqbyosCisgICBvciAqTlVMTCogb24gZmFpbHVyZS4gIFRoZSByZXR1cm5lZCBsaXN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbmV3LiAgVGhpcyBpcworICAgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIGV4cHJlc3Npb24gYGBsaXN0KG8pYGAuCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX1R1cGxlKFB5T2JqZWN0ICpvKQpAQCAtMTIzLDEwICsxMjQsMTAgQEAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0Zhc3QoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm0pCiAKLSAgIFJldHVybnMgdGhlIHNlcXVlbmNlICpvKiBhcyBhIHR1cGxlLCB1bmxlc3MgaXQgaXMgYWxyZWFkeSBhIHR1cGxlIG9yIGxpc3QsIGluCi0gICB3aGljaCBjYXNlICpvKiBpcyByZXR1cm5lZC4gIFVzZSA6YzpmdW5jOmBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU1gIHRvIGFjY2VzcyB0aGUKLSAgIG1lbWJlcnMgb2YgdGhlIHJlc3VsdC4gIFJldHVybnMgKk5VTEwqIG9uIGZhaWx1cmUuICBJZiB0aGUgb2JqZWN0IGlzIG5vdCBhCi0gICBzZXF1ZW5jZSwgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAgd2l0aCAqbSogYXMgdGhlIG1lc3NhZ2UgdGV4dC4KKyAgIFJldHVybiB0aGUgc2VxdWVuY2UgKm8qIGFzIGEgbGlzdCwgdW5sZXNzIGl0IGlzIGFscmVhZHkgYSB0dXBsZSBvciBsaXN0LCBpbgorICAgd2hpY2ggY2FzZSAqbyogaXMgcmV0dXJuZWQuICBVc2UgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNYCB0byBhY2Nlc3MKKyAgIHRoZSBtZW1iZXJzIG9mIHRoZSByZXN1bHQuICBSZXR1cm5zICpOVUxMKiBvbiBmYWlsdXJlLiAgSWYgdGhlIG9iamVjdCBpcyBub3QKKyAgIGEgc2VxdWVuY2UsIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgIHdpdGggKm0qIGFzIHRoZSBtZXNzYWdlIHRleHQuCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgaSkKZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdCBiL0RvYy9jLWFwaS9zdHJ1Y3R1cmVzLnJzdAppbmRleCBiYjc0MWZiLi5lOWU4YWRkIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc3RydWN0dXJlcy5yc3QKKysrIGIvRG9jL2MtYXBpL3N0cnVjdHVyZXMucnN0CkBAIC0yMSw1MyArMjEsNjYgQEAKICAgIEFsbCBvYmplY3QgdHlwZXMgYXJlIGV4dGVuc2lvbnMgb2YgdGhpcyB0eXBlLiAgVGhpcyBpcyBhIHR5cGUgd2hpY2gKICAgIGNvbnRhaW5zIHRoZSBpbmZvcm1hdGlvbiBQeXRob24gbmVlZHMgdG8gdHJlYXQgYSBwb2ludGVyIHRvIGFuIG9iamVjdCBhcyBhbgogICAgb2JqZWN0LiAgSW4gYSBub3JtYWwgInJlbGVhc2UiIGJ1aWxkLCBpdCBjb250YWlucyBvbmx5IHRoZSBvYmplY3QncwotICAgcmVmZXJlbmNlIGNvdW50IGFuZCBhIHBvaW50ZXIgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSBvYmplY3QuICBJdAotICAgY29ycmVzcG9uZHMgdG8gdGhlIGZpZWxkcyBkZWZpbmVkIGJ5IHRoZSBleHBhbnNpb24gb2YgdGhlIGBgUHlPYmplY3RfSEVBRGBgCi0gICBtYWNyby4KKyAgIHJlZmVyZW5jZSBjb3VudCBhbmQgYSBwb2ludGVyIHRvIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUgb2JqZWN0LgorICAgTm90aGluZyBpcyBhY3R1YWxseSBkZWNsYXJlZCB0byBiZSBhIDpjOnR5cGU6YFB5T2JqZWN0YCwgYnV0IGV2ZXJ5IHBvaW50ZXIKKyAgIHRvIGEgUHl0aG9uIG9iamVjdCBjYW4gYmUgY2FzdCB0byBhIDpjOnR5cGU6YFB5T2JqZWN0KmAuICBBY2Nlc3MgdG8gdGhlCisgICBtZW1iZXJzIG11c3QgYmUgZG9uZSBieSB1c2luZyB0aGUgbWFjcm9zIDpjOm1hY3JvOmBQeV9SRUZDTlRgIGFuZAorICAgOmM6bWFjcm86YFB5X1RZUEVgLgogCiAKIC4uIGM6dHlwZTo6IFB5VmFyT2JqZWN0CiAKICAgIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIG9mIDpjOnR5cGU6YFB5T2JqZWN0YCB0aGF0IGFkZHMgdGhlIDphdHRyOmBvYl9zaXplYAogICAgZmllbGQuICBUaGlzIGlzIG9ubHkgdXNlZCBmb3Igb2JqZWN0cyB0aGF0IGhhdmUgc29tZSBub3Rpb24gb2YgKmxlbmd0aCouCi0gICBUaGlzIHR5cGUgZG9lcyBub3Qgb2Z0ZW4gYXBwZWFyIGluIHRoZSBQeXRob24vQyBBUEkuICBJdCBjb3JyZXNwb25kcyB0byB0aGUKLSAgIGZpZWxkcyBkZWZpbmVkIGJ5IHRoZSBleHBhbnNpb24gb2YgdGhlIGBgUHlPYmplY3RfVkFSX0hFQURgYCBtYWNyby4KKyAgIFRoaXMgdHlwZSBkb2VzIG5vdCBvZnRlbiBhcHBlYXIgaW4gdGhlIFB5dGhvbi9DIEFQSS4KKyAgIEFjY2VzcyB0byB0aGUgbWVtYmVycyBtdXN0IGJlIGRvbmUgYnkgdXNpbmcgdGhlIG1hY3JvcworICAgOmM6bWFjcm86YFB5X1JFRkNOVGAsIDpjOm1hY3JvOmBQeV9UWVBFYCwgYW5kIDpjOm1hY3JvOmBQeV9TSVpFYC4KIAotVGhlc2UgbWFjcm9zIGFyZSB1c2VkIGluIHRoZSBkZWZpbml0aW9uIG9mIDpjOnR5cGU6YFB5T2JqZWN0YCBhbmQKLTpjOnR5cGU6YFB5VmFyT2JqZWN0YDoKLQotLi4gWFhYIG5lZWQgdG8gZG9jdW1lbnQgUEVQIDMxMjMgY2hhbmdlcyBoZXJlCiAKIC4uIGM6bWFjcm86OiBQeU9iamVjdF9IRUFECiAKLSAgIFRoaXMgaXMgYSBtYWNybyB3aGljaCBleHBhbmRzIHRvIHRoZSBkZWNsYXJhdGlvbnMgb2YgdGhlIGZpZWxkcyBvZiB0aGUKLSAgIDpjOnR5cGU6YFB5T2JqZWN0YCB0eXBlOyBpdCBpcyB1c2VkIHdoZW4gZGVjbGFyaW5nIG5ldyB0eXBlcyB3aGljaCByZXByZXNlbnQKLSAgIG9iamVjdHMgd2l0aG91dCBhIHZhcnlpbmcgbGVuZ3RoLiAgVGhlIHNwZWNpZmljIGZpZWxkcyBpdCBleHBhbmRzIHRvIGRlcGVuZAotICAgb24gdGhlIGRlZmluaXRpb24gb2YgOmM6bWFjcm86YFB5X1RSQUNFX1JFRlNgLiAgQnkgZGVmYXVsdCwgdGhhdCBtYWNybyBpcwotICAgbm90IGRlZmluZWQsIGFuZCA6YzptYWNybzpgUHlPYmplY3RfSEVBRGAgZXhwYW5kcyB0bzo6CisgICBUaGlzIGlzIGEgbWFjcm8gdXNlZCB3aGVuIGRlY2xhcmluZyBuZXcgdHlwZXMgd2hpY2ggcmVwcmVzZW50IG9iamVjdHMKKyAgIHdpdGhvdXQgYSB2YXJ5aW5nIGxlbmd0aC4gIFRoZSBQeU9iamVjdF9IRUFEIG1hY3JvIGV4cGFuZHMgdG86OgogCi0gICAgICBQeV9zc2l6ZV90IG9iX3JlZmNudDsKLSAgICAgIFB5VHlwZU9iamVjdCAqb2JfdHlwZTsKKyAgICAgIFB5T2JqZWN0IG9iX2Jhc2U7CiAKLSAgIFdoZW4gOmM6bWFjcm86YFB5X1RSQUNFX1JFRlNgIGlzIGRlZmluZWQsIGl0IGV4cGFuZHMgdG86OgotCi0gICAgICBQeU9iamVjdCAqX29iX25leHQsICpfb2JfcHJldjsKLSAgICAgIFB5X3NzaXplX3Qgb2JfcmVmY250OwotICAgICAgUHlUeXBlT2JqZWN0ICpvYl90eXBlOworICAgU2VlIGRvY3VtZW50YXRpb24gb2YgOmM6dHlwZTpgUHlPYmplY3RgIGFib3ZlLgogCiAKIC4uIGM6bWFjcm86OiBQeU9iamVjdF9WQVJfSEVBRAogCi0gICBUaGlzIGlzIGEgbWFjcm8gd2hpY2ggZXhwYW5kcyB0byB0aGUgZGVjbGFyYXRpb25zIG9mIHRoZSBmaWVsZHMgb2YgdGhlCi0gICA6Yzp0eXBlOmBQeVZhck9iamVjdGAgdHlwZTsgaXQgaXMgdXNlZCB3aGVuIGRlY2xhcmluZyBuZXcgdHlwZXMgd2hpY2gKLSAgIHJlcHJlc2VudCBvYmplY3RzIHdpdGggYSBsZW5ndGggdGhhdCB2YXJpZXMgZnJvbSBpbnN0YW5jZSB0byBpbnN0YW5jZS4KLSAgIFRoaXMgbWFjcm8gYWx3YXlzIGV4cGFuZHMgdG86OgorICAgVGhpcyBpcyBhIG1hY3JvIHVzZWQgd2hlbiBkZWNsYXJpbmcgbmV3IHR5cGVzIHdoaWNoIHJlcHJlc2VudCBvYmplY3RzCisgICB3aXRoIGEgbGVuZ3RoIHRoYXQgdmFyaWVzIGZyb20gaW5zdGFuY2UgdG8gaW5zdGFuY2UuCisgICBUaGUgUHlPYmplY3RfVkFSX0hFQUQgbWFjcm8gZXhwYW5kcyB0bzo6CiAKLSAgICAgIFB5T2JqZWN0X0hFQUQKLSAgICAgIFB5X3NzaXplX3Qgb2Jfc2l6ZTsKKyAgICAgIFB5VmFyT2JqZWN0IG9iX2Jhc2U7CiAKLSAgIE5vdGUgdGhhdCA6YzptYWNybzpgUHlPYmplY3RfSEVBRGAgaXMgcGFydCBvZiB0aGUgZXhwYW5zaW9uLCBhbmQgdGhhdCBpdHMgb3duCi0gICBleHBhbnNpb24gdmFyaWVzIGRlcGVuZGluZyBvbiB0aGUgZGVmaW5pdGlvbiBvZiA6YzptYWNybzpgUHlfVFJBQ0VfUkVGU2AuCisgICBTZWUgZG9jdW1lbnRhdGlvbiBvZiA6Yzp0eXBlOmBQeVZhck9iamVjdGAgYWJvdmUuCisKKworLi4gYzptYWNybzo6IFB5X1RZUEUobykKKworICAgVGhpcyBtYWNybyBpcyB1c2VkIHRvIGFjY2VzcyB0aGUgOmF0dHI6YG9iX3R5cGVgIG1lbWJlciBvZiBhIFB5dGhvbiBvYmplY3QuCisgICBJdCBleHBhbmRzIHRvOjoKKworICAgICAgKCgoUHlPYmplY3QqKShvKSktPm9iX3R5cGUpCisKKworLi4gYzptYWNybzo6IFB5X1JFRkNOVChvKQorCisgICBUaGlzIG1hY3JvIGlzIHVzZWQgdG8gYWNjZXNzIHRoZSA6YXR0cjpgb2JfcmVmY250YCBtZW1iZXIgb2YgYSBQeXRob24KKyAgIG9iamVjdC4KKyAgIEl0IGV4cGFuZHMgdG86OgorCisgICAgICAoKChQeU9iamVjdCopKG8pKS0+b2JfcmVmY250KQorCisKKy4uIGM6bWFjcm86OiBQeV9TSVpFKG8pCisKKyAgIFRoaXMgbWFjcm8gaXMgdXNlZCB0byBhY2Nlc3MgdGhlIDphdHRyOmBvYl9zaXplYCBtZW1iZXIgb2YgYSBQeXRob24gb2JqZWN0LgorICAgSXQgZXhwYW5kcyB0bzo6CisKKyAgICAgICgoKFB5VmFyT2JqZWN0KikobykpLT5vYl9zaXplKQogCiAKIC4uIGM6bWFjcm86OiBQeU9iamVjdF9IRUFEX0lOSVQodHlwZSkKQEAgLTEzMSw3ICsxNDQsNyBAQAogdHlwZXMsIGJ1dCB0aGV5IGFsd2F5cyByZXR1cm4gOmM6dHlwZTpgUHlPYmplY3RcKmAuICBJZiB0aGUgZnVuY3Rpb24gaXMgbm90IG9mCiB0aGUgOmM6dHlwZTpgUHlDRnVuY3Rpb25gLCB0aGUgY29tcGlsZXIgd2lsbCByZXF1aXJlIGEgY2FzdCBpbiB0aGUgbWV0aG9kIHRhYmxlLgogRXZlbiB0aG91Z2ggOmM6dHlwZTpgUHlDRnVuY3Rpb25gIGRlZmluZXMgdGhlIGZpcnN0IHBhcmFtZXRlciBhcwotOmM6dHlwZTpgUHlPYmplY3RcKmAsIGl0IGlzIGNvbW1vbiB0aGF0IHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNlcyBhIHRoZQorOmM6dHlwZTpgUHlPYmplY3RcKmAsIGl0IGlzIGNvbW1vbiB0aGF0IHRoZSBtZXRob2QgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUKIHNwZWNpZmljIEMgdHlwZSBvZiB0aGUgKnNlbGYqIG9iamVjdC4KIAogVGhlIDphdHRyOmBtbF9mbGFnc2AgZmllbGQgaXMgYSBiaXRmaWVsZCB3aGljaCBjYW4gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGZsYWdzLgpkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3N5cy5yc3QgYi9Eb2MvYy1hcGkvc3lzLnJzdAppbmRleCA5NzYwZGNhLi43Y2VhZDA3IDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvc3lzLnJzdAorKysgYi9Eb2MvYy1hcGkvc3lzLnJzdApAQCAtNTYsMTIgKzU2LDEyIEBACiBhY2Nlc3NpYmxlIHRvIEMgY29kZS4gIFRoZXkgYWxsIHdvcmsgd2l0aCB0aGUgY3VycmVudCBpbnRlcnByZXRlciB0aHJlYWQncwogOm1vZDpgc3lzYCBtb2R1bGUncyBkaWN0LCB3aGljaCBpcyBjb250YWluZWQgaW4gdGhlIGludGVybmFsIHRocmVhZCBzdGF0ZSBzdHJ1Y3R1cmUuCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCAqUHlTeXNfR2V0T2JqZWN0KGNoYXIgKm5hbWUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QgKlB5U3lzX0dldE9iamVjdChjb25zdCBjaGFyICpuYW1lKQogCiAgICBSZXR1cm4gdGhlIG9iamVjdCAqbmFtZSogZnJvbSB0aGUgOm1vZDpgc3lzYCBtb2R1bGUgb3IgKk5VTEwqIGlmIGl0IGRvZXMKICAgIG5vdCBleGlzdCwgd2l0aG91dCBzZXR0aW5nIGFuIGV4Y2VwdGlvbi4KIAotLi4gYzpmdW5jdGlvbjo6IGludCBQeVN5c19TZXRPYmplY3QoY2hhciAqbmFtZSwgUHlPYmplY3QgKnYpCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5U3lzX1NldE9iamVjdChjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqdikKIAogICAgU2V0ICpuYW1lKiBpbiB0aGUgOm1vZDpgc3lzYCBtb2R1bGUgdG8gKnYqIHVubGVzcyAqdiogaXMgKk5VTEwqLCBpbiB3aGljaAogICAgY2FzZSAqbmFtZSogaXMgZGVsZXRlZCBmcm9tIHRoZSBzeXMgbW9kdWxlLiBSZXR1cm5zIGBgMGBgIG9uIHN1Y2Nlc3MsIGBgLTFgYApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3R1cGxlLnJzdCBiL0RvYy9jLWFwaS90dXBsZS5yc3QKaW5kZXggMTg0YWZmYi4uMzkyMmQ1MCAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3R1cGxlLnJzdAorKysgYi9Eb2MvYy1hcGkvdHVwbGUucnN0CkBAIC0xMjksNiArMTI5LDE0IEBACiAgICBJbml0aWFsaXplcyBhIHN0cnVjdCBzZXF1ZW5jZSB0eXBlICp0eXBlKiBmcm9tICpkZXNjKiBpbiBwbGFjZS4KIAogCisuLiBjOmZ1bmN0aW9uOjogaW50IFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQorCisgICBUaGUgc2FtZSBhcyBgYFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGVgYCwgYnV0IHJldHVybnMgYGAwYGAgb24gc3VjY2VzcyBhbmQgYGAtMWBgIG9uCisgICBmYWlsdXJlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjOnR5cGU6OiBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MKIAogICAgQ29udGFpbnMgdGhlIG1ldGEgaW5mb3JtYXRpb24gb2YgYSBzdHJ1Y3Qgc2VxdWVuY2UgdHlwZSB0byBjcmVhdGUuCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdHlwZS5yc3QgYi9Eb2MvYy1hcGkvdHlwZS5yc3QKaW5kZXggNWQ4MzI1NC4uNjBjNWU3MyAxMDA2NDQKLS0tIGEvRG9jL2MtYXBpL3R5cGUucnN0CisrKyBiL0RvYy9jLWFwaS90eXBlLnJzdApAQCAtNDQsNiArNDQsNyBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorCiAuLiBjOmZ1bmN0aW9uOjogdm9pZCBQeVR5cGVfTW9kaWZpZWQoUHlUeXBlT2JqZWN0ICp0eXBlKQogCiAgICBJbnZhbGlkYXRlIHRoZSBpbnRlcm5hbCBsb29rdXAgY2FjaGUgZm9yIHRoZSB0eXBlIGFuZCBhbGwgb2YgaXRzCkBAIC02Nyw2ICs2OCwxMSBAQAogCiAgICBSZXR1cm4gdHJ1ZSBpZiAqYSogaXMgYSBzdWJ0eXBlIG9mICpiKi4KIAorICAgVGhpcyBmdW5jdGlvbiBvbmx5IGNoZWNrcyBmb3IgYWN0dWFsIHN1YnR5cGVzLCB3aGljaCBtZWFucyB0aGF0CisgICA6bWV0aDpgfmNsYXNzLl9fc3ViY2xhc3NjaGVja19fYCBpcyBub3QgY2FsbGVkIG9uICpiKi4gIENhbGwKKyAgIDpjOmZ1bmM6YFB5T2JqZWN0X0lzU3ViY2xhc3NgIHRvIGRvIHRoZSBzYW1lIGNoZWNrIHRoYXQgOmZ1bmM6YGlzc3ViY2xhc3NgCisgICB3b3VsZCBkby4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VHlwZV9HZW5lcmljQWxsb2MoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeV9zc2l6ZV90IG5pdGVtcykKIApAQCAtOTcsMyArMTAzLDEzIEBACiAgICB0eXBlcy4gVGhpcyBhbGxvd3MgdGhlIGNhbGxlciB0byByZWZlcmVuY2Ugb3RoZXIgaGVhcCB0eXBlcyBhcyBiYXNlIHR5cGVzLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworLi4gYzpmdW5jdGlvbjo6IHZvaWQqIFB5VHlwZV9HZXRTbG90KFB5VHlwZU9iamVjdCAqdHlwZSwgaW50IHNsb3QpCisKKyAgIFJldHVybiB0aGUgZnVuY3Rpb24gcG9pbnRlciBzdG9yZWQgaW4gdGhlIGdpdmVuIHNsb3QuIElmIHRoZQorICAgcmVzdWx0IGlzICpOVUxMKiwgdGhpcyBpbmRpY2F0ZXMgdGhhdCBlaXRoZXIgdGhlIHNsb3QgaXMgKk5VTEwqLAorICAgb3IgdGhhdCB0aGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB3aXRoIGludmFsaWQgcGFyYW1ldGVycy4KKyAgIENhbGxlcnMgd2lsbCB0eXBpY2FsbHkgY2FzdCB0aGUgcmVzdWx0IHBvaW50ZXIgaW50byB0aGUgYXBwcm9wcmlhdGUKKyAgIGZ1bmN0aW9uIHR5cGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3R5cGVvYmoucnN0IGIvRG9jL2MtYXBpL3R5cGVvYmoucnN0CmluZGV4IGYzMDg5ZDAuLjVkZThiZTAgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS90eXBlb2JqLnJzdAorKysgYi9Eb2MvYy1hcGkvdHlwZW9iai5yc3QKQEAgLTk0LDcgKzk0LDcgQEAKICAgIFRoaXMgZmllbGQgaXMgbm90IGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KIAogCi0uLiBjOm1lbWJlcjo6IGNoYXIqIFB5VHlwZU9iamVjdC50cF9uYW1lCisuLiBjOm1lbWJlcjo6IGNvbnN0IGNoYXIqIFB5VHlwZU9iamVjdC50cF9uYW1lCiAKICAgIFBvaW50ZXIgdG8gYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgY29udGFpbmluZyB0aGUgbmFtZSBvZiB0aGUgdHlwZS4gRm9yIHR5cGVzCiAgICB0aGF0IGFyZSBhY2Nlc3NpYmxlIGFzIG1vZHVsZSBnbG9iYWxzLCB0aGUgc3RyaW5nIHNob3VsZCBiZSB0aGUgZnVsbCBtb2R1bGUKQEAgLTE4OSwzMCArMTg5LDcgQEAKIAogLi4gYzptZW1iZXI6OiBwcmludGZ1bmMgUHlUeXBlT2JqZWN0LnRwX3ByaW50CiAKLSAgIEFuIG9wdGlvbmFsIHBvaW50ZXIgdG8gdGhlIGluc3RhbmNlIHByaW50IGZ1bmN0aW9uLgotCi0gICBUaGUgcHJpbnQgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgcHJpbnRlZCB0byBhICpyZWFsKiBmaWxlOwotICAgd2hlbiBpdCBpcyBwcmludGVkIHRvIGEgcHNldWRvLWZpbGUgKGxpa2UgYSA6Y2xhc3M6YGlvLlN0cmluZ0lPYCBpbnN0YW5jZSksIHRoZQotICAgaW5zdGFuY2UncyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfcmVwcmAgb3IgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3N0cmAgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGNvbnZlcnQgaXQgdG8KLSAgIGEgc3RyaW5nLiAgVGhlc2UgYXJlIGFsc28gY2FsbGVkIHdoZW4gdGhlIHR5cGUncyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfcHJpbnRgIGZpZWxkIGlzCi0gICAqTlVMTCouICBBIHR5cGUgc2hvdWxkIG5ldmVyIGltcGxlbWVudCA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfcHJpbnRgIGluIGEgd2F5IHRoYXQgcHJvZHVjZXMKLSAgIGRpZmZlcmVudCBvdXRwdXQgdGhhbiA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfcmVwcmAgb3IgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3N0cmAgd291bGQuCi0KLSAgIFRoZSBwcmludCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgc2FtZSBzaWduYXR1cmUgYXMgOmM6ZnVuYzpgUHlPYmplY3RfUHJpbnRgOgotICAgYGBpbnQgdHBfcHJpbnQoUHlPYmplY3QgKnNlbGYsIEZJTEUgKmZpbGUsIGludCBmbGFncylgYC4gIFRoZSAqc2VsZiogYXJndW1lbnQgaXMKLSAgIHRoZSBpbnN0YW5jZSB0byBiZSBwcmludGVkLiAgVGhlICpmaWxlKiBhcmd1bWVudCBpcyB0aGUgc3RkaW8gZmlsZSB0byB3aGljaCBpdAotICAgaXMgdG8gYmUgcHJpbnRlZC4gIFRoZSAqZmxhZ3MqIGFyZ3VtZW50IGlzIGNvbXBvc2VkIG9mIGZsYWcgYml0cy4gVGhlIG9ubHkgZmxhZwotICAgYml0IGN1cnJlbnRseSBkZWZpbmVkIGlzIDpjb25zdDpgUHlfUFJJTlRfUkFXYC4gV2hlbiB0aGUgOmNvbnN0OmBQeV9QUklOVF9SQVdgCi0gICBmbGFnIGJpdCBpcyBzZXQsIHRoZSBpbnN0YW5jZSBzaG91bGQgYmUgcHJpbnRlZCB0aGUgc2FtZSB3YXkgYXMgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3N0cmAKLSAgIHdvdWxkIGZvcm1hdCBpdDsgd2hlbiB0aGUgOmNvbnN0OmBQeV9QUklOVF9SQVdgIGZsYWcgYml0IGlzIGNsZWFyLCB0aGUgaW5zdGFuY2UKLSAgIHNob3VsZCBiZSBwcmludGVkIHRoZSBzYW1lIHdheSBhcyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfcmVwcmAgd291bGQgZm9ybWF0IGl0LiBJdCBzaG91bGQKLSAgIHJldHVybiBgYC0xYGAgYW5kIHNldCBhbiBleGNlcHRpb24gY29uZGl0aW9uIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgotCi0gICBJdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfcHJpbnRgIGZpZWxkIHdpbGwgYmUgZGVwcmVjYXRlZC4gSW4gYW55IGNhc2UsCi0gICBpdCBpcyByZWNvbW1lbmRlZCBub3QgdG8gZGVmaW5lIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9wcmludGAsIGJ1dCBpbnN0ZWFkIHRvIHJlbHkgb24KLSAgIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9yZXByYCBhbmQgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX3N0cmAgZm9yIHByaW50aW5nLgotCi0gICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KKyAgIFJlc2VydmVkIHNsb3QsIGZvcm1lcmx5IHVzZWQgZm9yIHByaW50IGZvcm1hdHRpbmcgaW4gUHl0aG9uIDIueC4KIAogCiAuLiBjOm1lbWJlcjo6IGdldGF0dHJmdW5jIFB5VHlwZU9iamVjdC50cF9nZXRhdHRyCkBAIC0zOTAsNyArMzY3LDcgQEAKICAgIGluaGVyaXRlZCBpbmRpdmlkdWFsbHkuCiAKIAotLi4gYzptZW1iZXI6OiBsb25nIFB5VHlwZU9iamVjdC50cF9mbGFncworLi4gYzptZW1iZXI6OiB1bnNpZ25lZCBsb25nIFB5VHlwZU9iamVjdC50cF9mbGFncwogCiAgICBUaGlzIGZpZWxkIGlzIGEgYml0IG1hc2sgb2YgdmFyaW91cyBmbGFncy4gIFNvbWUgZmxhZ3MgaW5kaWNhdGUgdmFyaWFudAogICAgc2VtYW50aWNzIGZvciBjZXJ0YWluIHNpdHVhdGlvbnM7IG90aGVycyBhcmUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGNlcnRhaW4KQEAgLTQ2NCw3ICs0NDEsMzMgQEAKICAgICAgIDpjb25zdDpgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHYC4KIAogCi0uLiBjOm1lbWJlcjo6IGNoYXIqIFB5VHlwZU9iamVjdC50cF9kb2MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX0xJU1RfU1VCQ0xBU1MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX1RVUExFX1NVQkNMQVNTCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19CWVRFU19TVUJDTEFTUworICAgLi4gZGF0YTo6IFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUworICAgLi4gZGF0YTo6IFB5X1RQRkxBR1NfRElDVF9TVUJDTEFTUworICAgLi4gZGF0YTo6IFB5X1RQRkxBR1NfQkFTRV9FWENfU1VCQ0xBU1MKKyAgIC4uIGRhdGE6OiBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MKKworICAgICAgVGhlc2UgZmxhZ3MgYXJlIHVzZWQgYnkgZnVuY3Rpb25zIHN1Y2ggYXMKKyAgICAgIDpjOmZ1bmM6YFB5TG9uZ19DaGVja2AgdG8gcXVpY2tseSBkZXRlcm1pbmUgaWYgYSB0eXBlIGlzIGEgc3ViY2xhc3MKKyAgICAgIG9mIGEgYnVpbHQtaW4gdHlwZTsgc3VjaCBzcGVjaWZpYyBjaGVja3MgYXJlIGZhc3RlciB0aGFuIGEgZ2VuZXJpYworICAgICAgY2hlY2ssIGxpa2UgOmM6ZnVuYzpgUHlPYmplY3RfSXNJbnN0YW5jZWAuIEN1c3RvbSB0eXBlcyB0aGF0IGluaGVyaXQKKyAgICAgIGZyb20gYnVpbHQtaW5zIHNob3VsZCBoYXZlIHRoZWlyIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF9mbGFnc2AKKyAgICAgIHNldCBhcHByb3ByaWF0ZWx5LCBvciB0aGUgY29kZSB0aGF0IGludGVyYWN0cyB3aXRoIHN1Y2ggdHlwZXMKKyAgICAgIHdpbGwgYmVoYXZlIGRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGF0IGtpbmQgb2YgY2hlY2sgaXMgdXNlZC4KKworCisgICAuLiBkYXRhOjogUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFCisKKyAgICAgIFRoaXMgYml0IGlzIHNldCB3aGVuIHRoZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZmluYWxpemVgIHNsb3QgaXMgcHJlc2VudCBpbiB0aGUKKyAgICAgIHR5cGUgc3RydWN0dXJlLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBjOm1lbWJlcjo6IGNvbnN0IGNoYXIqIFB5VHlwZU9iamVjdC50cF9kb2MKIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhIE5VTC10ZXJtaW5hdGVkIEMgc3RyaW5nIGdpdmluZyB0aGUgZG9jc3RyaW5nIGZvciB0aGlzCiAgICB0eXBlIG9iamVjdC4gIFRoaXMgaXMgZXhwb3NlZCBhcyB0aGUgOmF0dHI6YF9fZG9jX19gIGF0dHJpYnV0ZSBvbiB0aGUgdHlwZSBhbmQKQEAgLTU3MSw3ICs1NzQsOSBAQAogLi4gYzptZW1iZXI6OiByaWNoY21wZnVuYyBQeVR5cGVPYmplY3QudHBfcmljaGNvbXBhcmUKIAogICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byB0aGUgcmljaCBjb21wYXJpc29uIGZ1bmN0aW9uLCB3aG9zZSBzaWduYXR1cmUgaXMKLSAgIGBgUHlPYmplY3QgKnRwX3JpY2hjb21wYXJlKFB5T2JqZWN0ICphLCBQeU9iamVjdCAqYiwgaW50IG9wKWBgLgorICAgYGBQeU9iamVjdCAqdHBfcmljaGNvbXBhcmUoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiLCBpbnQgb3ApYGAuIFRoZSBmaXJzdAorICAgcGFyYW1ldGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYW4gaW5zdGFuY2Ugb2YgdGhlIHR5cGUgdGhhdCBpcyBkZWZpbmVkCisgICBieSA6Yzp0eXBlOmBQeVR5cGVPYmplY3RgLgogCiAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uICh1c3VhbGx5IGBgUHlfVHJ1ZWBgCiAgICBvciBgYFB5X0ZhbHNlYGApLiAgSWYgdGhlIGNvbXBhcmlzb24gaXMgdW5kZWZpbmVkLCBpdCBtdXN0IHJldHVybgpAQCAtNjA5LDcgKzYxNCw3IEBACiAgICArLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rCiAKIAotLi4gYzptZW1iZXI6OiBsb25nIFB5VHlwZU9iamVjdC50cF93ZWFrbGlzdG9mZnNldAorLi4gYzptZW1iZXI6OiBQeV9zc2l6ZV90IFB5VHlwZU9iamVjdC50cF93ZWFrbGlzdG9mZnNldAogCiAgICBJZiB0aGUgaW5zdGFuY2VzIG9mIHRoaXMgdHlwZSBhcmUgd2Vha2x5IHJlZmVyZW5jZWFibGUsIHRoaXMgZmllbGQgaXMgZ3JlYXRlcgogICAgdGhhbiB6ZXJvIGFuZCBjb250YWlucyB0aGUgb2Zmc2V0IGluIHRoZSBpbnN0YW5jZSBzdHJ1Y3R1cmUgb2YgdGhlIHdlYWsKQEAgLTc3Niw3ICs3ODEsNyBAQAogICAgLi4gWFhYIGV4cGxhaW4uCiAKIAotLi4gYzptZW1iZXI6OiBsb25nIFB5VHlwZU9iamVjdC50cF9kaWN0b2Zmc2V0CisuLiBjOm1lbWJlcjo6IFB5X3NzaXplX3QgUHlUeXBlT2JqZWN0LnRwX2RpY3RvZmZzZXQKIAogICAgSWYgdGhlIGluc3RhbmNlcyBvZiB0aGlzIHR5cGUgaGF2ZSBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBpbnN0YW5jZSB2YXJpYWJsZXMsCiAgICB0aGlzIGZpZWxkIGlzIG5vbi16ZXJvIGFuZCBjb250YWlucyB0aGUgb2Zmc2V0IGluIHRoZSBpbnN0YW5jZXMgb2YgdGhlIHR5cGUgb2YKQEAgLTk2Nyw2ICs5NzIsNDcgQEAKICAgIFRoaXMgZmllbGQgaXMgbm90IGluaGVyaXRlZDsgaXQgaXMgY2FsY3VsYXRlZCBmcmVzaCBieSA6YzpmdW5jOmBQeVR5cGVfUmVhZHlgLgogCiAKKy4uIGM6bWVtYmVyOjogZGVzdHJ1Y3RvciBQeVR5cGVPYmplY3QudHBfZmluYWxpemUKKworICAgQW4gb3B0aW9uYWwgcG9pbnRlciB0byBhbiBpbnN0YW5jZSBmaW5hbGl6YXRpb24gZnVuY3Rpb24uICBJdHMgc2lnbmF0dXJlIGlzCisgICA6Yzp0eXBlOmBkZXN0cnVjdG9yYDo6CisKKyAgICAgIHZvaWQgdHBfZmluYWxpemUoUHlPYmplY3QgKikKKworICAgSWYgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBpcyBzZXQsIHRoZSBpbnRlcnByZXRlciBjYWxscyBpdCBvbmNlIHdoZW4KKyAgIGZpbmFsaXppbmcgYW4gaW5zdGFuY2UuICBJdCBpcyBjYWxsZWQgZWl0aGVyIGZyb20gdGhlIGdhcmJhZ2UKKyAgIGNvbGxlY3RvciAoaWYgdGhlIGluc3RhbmNlIGlzIHBhcnQgb2YgYW4gaXNvbGF0ZWQgcmVmZXJlbmNlIGN5Y2xlKSBvcgorICAganVzdCBiZWZvcmUgdGhlIG9iamVjdCBpcyBkZWFsbG9jYXRlZC4gIEVpdGhlciB3YXksIGl0IGlzIGd1YXJhbnRlZWQKKyAgIHRvIGJlIGNhbGxlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBicmVhayByZWZlcmVuY2UgY3ljbGVzLCBlbnN1cmluZworICAgdGhhdCBpdCBmaW5kcyB0aGUgb2JqZWN0IGluIGEgc2FuZSBzdGF0ZS4KKworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCBzaG91bGQgbm90IG11dGF0ZSB0aGUgY3VycmVudCBleGNlcHRpb24gc3RhdHVzOworICAgdGhlcmVmb3JlLCBhIHJlY29tbWVuZGVkIHdheSB0byB3cml0ZSBhIG5vbi10cml2aWFsIGZpbmFsaXplciBpczo6CisKKyAgICAgIHN0YXRpYyB2b2lkCisgICAgICBsb2NhbF9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKKyAgICAgIHsKKyAgICAgICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOworCisgICAgICAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICAgICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKworICAgICAgICAgIC8qIC4uLiAqLworCisgICAgICAgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7CisgICAgICB9CisKKyAgIEZvciB0aGlzIGZpZWxkIHRvIGJlIHRha2VuIGludG8gYWNjb3VudCAoZXZlbiB0aHJvdWdoIGluaGVyaXRhbmNlKSwKKyAgIHlvdSBtdXN0IGFsc28gc2V0IHRoZSA6Y29uc3Q6YFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRWAgZmxhZ3MgYml0LgorCisgICBUaGlzIGZpZWxkIGlzIGluaGVyaXRlZCBieSBzdWJ0eXBlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIHNlZWFsc286OiAiU2FmZSBvYmplY3QgZmluYWxpemF0aW9uIiAoOnBlcDpgNDQyYCkKKworCiAuLiBjOm1lbWJlcjo6IFB5T2JqZWN0KiBQeVR5cGVPYmplY3QudHBfY2FjaGUKIAogICAgVW51c2VkLiAgTm90IGluaGVyaXRlZC4gIEludGVybmFsIHVzZSBvbmx5LgpAQCAtMTE1MCw3ICsxMTk2LDggQEAKIAogICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IDpjOmZ1bmM6YFB5U2VxdWVuY2VfUmVwZWF0YCBhbmQgaGFzIHRoZSBzYW1lCiAgICBzaWduYXR1cmUuICBJdCBpcyBhbHNvIHVzZWQgYnkgdGhlIGBgKmBgIG9wZXJhdG9yLCBhZnRlciB0cnlpbmcgbnVtZXJpYwotICAgbXVsdGlwbGljYXRpb24gdmlhIHRoZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfYXNfbnVtYmVyLm5iX211bGAgc2xvdC4KKyAgIG11bHRpcGxpY2F0aW9uIHZpYSB0aGUgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2FzX251bWJlci5uYl9tdWx0aXBseWAKKyAgIHNsb3QuCiAKIC4uIGM6bWVtYmVyOjogc3NpemVhcmdmdW5jIFB5U2VxdWVuY2VNZXRob2RzLnNxX2l0ZW0KIApkaWZmIC0tZ2l0IGEvRG9jL2MtYXBpL3VuaWNvZGUucnN0IGIvRG9jL2MtYXBpL3VuaWNvZGUucnN0CmluZGV4IDM2NDljZmIuLmY3ZTk5ZDYgMTAwNjQ0Ci0tLSBhL0RvYy9jLWFwaS91bmljb2RlLnJzdAorKysgYi9Eb2MvYy1hcGkvdW5pY29kZS5yc3QKQEAgLTIyNyw3ICsyMjcsMTAgQEAKICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBQeVVuaWNvZGVfQVNfREFUQShQeU9iamVjdCAqbykKIAogICAgUmV0dXJuIGEgcG9pbnRlciB0byBhIDpjOnR5cGU6YFB5X1VOSUNPREVgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QuICBUaGUKLSAgIGBgQVNfREFUQWBgIGZvcm0gY2FzdHMgdGhlIHBvaW50ZXIgdG8gOmM6dHlwZTpgY29uc3QgY2hhciAqYC4gICpvKiBoYXMgdG8gYmUKKyAgIHJldHVybmVkIGJ1ZmZlciBpcyBhbHdheXMgdGVybWluYXRlZCB3aXRoIGFuIGV4dHJhIG51bGwgY29kZSBwb2ludC4gIEl0CisgICBtYXkgYWxzbyBjb250YWluIGVtYmVkZGVkIG51bGwgY29kZSBwb2ludHMsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBzdHJpbmcKKyAgIHRvIGJlIHRydW5jYXRlZCB3aGVuIHVzZWQgaW4gbW9zdCBDIGZ1bmN0aW9ucy4gIFRoZSBgYEFTX0RBVEFgYCBmb3JtCisgICBjYXN0cyB0aGUgcG9pbnRlciB0byA6Yzp0eXBlOmBjb25zdCBjaGFyICpgLiAgVGhlICpvKiBhcmd1bWVudCBoYXMgdG8gYmUKICAgIGEgVW5pY29kZSBvYmplY3QgKG5vdCBjaGVja2VkKS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKQEAgLTUyNiwxMiArNTI5LDIzIEBACiAgICAgICBUaGUgYCIlbGxkImAgYW5kIGAiJWxsdSJgIGZvcm1hdCBzcGVjaWZpZXJzIGFyZSBvbmx5IGF2YWlsYWJsZQogICAgICAgd2hlbiA6Y29uc3Q6YEhBVkVfTE9OR19MT05HYCBpcyBkZWZpbmVkLgogCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSB3aWR0aCBmb3JtYXR0ZXIgdW5pdCBpcyBudW1iZXIgb2YgY2hhcmFjdGVycyByYXRoZXIgdGhhbiBieXRlcy4KKyAgICAgIFRoZSBwcmVjaXNpb24gZm9ybWF0dGVyIHVuaXQgaXMgbnVtYmVyIG9mIGJ5dGVzIGZvciBgYCIlcyJgYCBhbmQKKyAgICAgIGBgIiVWImBgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBOVUxMKSwgYW5kIGEgbnVtYmVyIG9mCisgICAgICBjaGFyYWN0ZXJzIGZvciBgYCIlQSJgYCwgYGAiJVUiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhbmQgYGAiJVYiYGAKKyAgICAgIChpZiB0aGUgYGBQeU9iamVjdCpgYCBhcmd1bWVudCBpcyBub3QgTlVMTCkuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBTdXBwb3J0IGZvciBgYCIlbGxkImBgIGFuZCBgYCIlbGx1ImBgIGFkZGVkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgU3VwcG9ydCBmb3IgYGAiJWxpImBgLCBgYCIlbGxpImBgIGFuZCBgYCIlemkiYGAgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBTdXBwb3J0IHdpZHRoIGFuZCBwcmVjaXNpb24gZm9ybWF0dGVyIGZvciBgYCIlcyJgYCwgYGAiJUEiYGAsIGBgIiVVImBgLAorICAgICAgYGAiJVYiYGAsIGBgIiVTImBgLCBgYCIlUiJgYCBhZGRlZC4KKwogCiAuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgdmFyZ3MpCiAKQEAgLTU0NSw3ICs1NTksOCBAQAogICAgQ29lcmNlIGFuIGVuY29kZWQgb2JqZWN0ICpvYmoqIHRvIGFuIFVuaWNvZGUgb2JqZWN0IGFuZCByZXR1cm4gYSByZWZlcmVuY2Ugd2l0aAogICAgaW5jcmVtZW50ZWQgcmVmY291bnQuCiAKLSAgIDpjbGFzczpgYnl0ZXNgLCA6Y2xhc3M6YGJ5dGVhcnJheWAgYW5kIG90aGVyIGNoYXIgYnVmZmVyIGNvbXBhdGlibGUgb2JqZWN0cworICAgOmNsYXNzOmBieXRlc2AsIDpjbGFzczpgYnl0ZWFycmF5YCBhbmQgb3RoZXIKKyAgIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdHMgPGJ5dGVzLWxpa2Ugb2JqZWN0PmAKICAgIGFyZSBkZWNvZGVkIGFjY29yZGluZyB0byB0aGUgZ2l2ZW4gKmVuY29kaW5nKiBhbmQgdXNpbmcgdGhlIGVycm9yIGhhbmRsaW5nCiAgICBkZWZpbmVkIGJ5ICplcnJvcnMqLiBCb3RoIGNhbiBiZSAqTlVMTCogdG8gaGF2ZSB0aGUgaW50ZXJmYWNlIHVzZSB0aGUgZGVmYXVsdAogICAgdmFsdWVzIChzZWUgdGhlIG5leHQgc2VjdGlvbiBmb3IgZGV0YWlscykuCkBAIC02MzgsNyArNjUzLDggQEAKIAogICAgQ29weSB0aGUgc3RyaW5nICp1KiBpbnRvIGEgbmV3IFVDUzQgYnVmZmVyIHRoYXQgaXMgYWxsb2NhdGVkIHVzaW5nCiAgICA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgLiAgSWYgdGhpcyBmYWlscywgKk5VTEwqIGlzIHJldHVybmVkIHdpdGggYQotICAgOmV4YzpgTWVtb3J5RXJyb3JgIHNldC4KKyAgIDpleGM6YE1lbW9yeUVycm9yYCBzZXQuICBUaGUgcmV0dXJuZWQgYnVmZmVyIGFsd2F5cyBoYXMgYW4gZXh0cmEKKyAgIG51bGwgY29kZSBwb2ludCBhcHBlbmRlZC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKQEAgLTY3Nyw4ICs2OTMsOSBAQAogICAgUmV0dXJuIGEgcmVhZC1vbmx5IHBvaW50ZXIgdG8gdGhlIFVuaWNvZGUgb2JqZWN0J3MgaW50ZXJuYWwKICAgIDpjOnR5cGU6YFB5X1VOSUNPREVgIGJ1ZmZlciwgb3IgKk5VTEwqIG9uIGVycm9yLiBUaGlzIHdpbGwgY3JlYXRlIHRoZQogICAgOmM6dHlwZTpgUHlfVU5JQ09ERSpgIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgaWYgaXQgaXMgbm90IHlldAotICAgYXZhaWxhYmxlLiBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyA6Yzp0eXBlOmBQeV9VTklDT0RFYCBzdHJpbmcgbWF5IGNvbnRhaW4KLSAgIGVtYmVkZGVkIG51bGwgY2hhcmFjdGVycywgd2hpY2ggd291bGQgY2F1c2UgdGhlIHN0cmluZyB0byBiZSB0cnVuY2F0ZWQgd2hlbgorICAgYXZhaWxhYmxlLiBUaGUgYnVmZmVyIGlzIGFsd2F5cyB0ZXJtaW5hdGVkIHdpdGggYW4gZXh0cmEgbnVsbCBjb2RlIHBvaW50LgorICAgTm90ZSB0aGF0IHRoZSByZXN1bHRpbmcgOmM6dHlwZTpgUHlfVU5JQ09ERWAgc3RyaW5nIG1heSBhbHNvIGNvbnRhaW4KKyAgIGVtYmVkZGVkIG51bGwgY29kZSBwb2ludHMsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBzdHJpbmcgdG8gYmUgdHJ1bmNhdGVkIHdoZW4KICAgIHVzZWQgaW4gbW9zdCBDIGZ1bmN0aW9ucy4KIAogICAgUGxlYXNlIG1pZ3JhdGUgdG8gdXNpbmcgOmM6ZnVuYzpgUHlVbmljb2RlX0FzVUNTNGAsCkBAIC02OTYsOCArNzEzLDkgQEAKIC4uIGM6ZnVuY3Rpb246OiBQeV9VTklDT0RFKiBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZShQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCAqc2l6ZSkKIAogICAgTGlrZSA6YzpmdW5jOmBQeVVuaWNvZGVfQXNVbmljb2RlYCwgYnV0IGFsc28gc2F2ZXMgdGhlIDpjOmZ1bmM6YFB5X1VOSUNPREVgCi0gICBhcnJheSBsZW5ndGggaW4gKnNpemUqLiBOb3RlIHRoYXQgdGhlIHJlc3VsdGluZyA6Yzp0eXBlOmBQeV9VTklDT0RFKmAgc3RyaW5nCi0gICBtYXkgY29udGFpbiBlbWJlZGRlZCBudWxsIGNoYXJhY3RlcnMsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBzdHJpbmcgdG8gYmUKKyAgIGFycmF5IGxlbmd0aCAoZXhjbHVkaW5nIHRoZSBleHRyYSBudWxsIHRlcm1pbmF0b3IpIGluICpzaXplKi4KKyAgIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIDpjOnR5cGU6YFB5X1VOSUNPREUqYCBzdHJpbmcKKyAgIG1heSBjb250YWluIGVtYmVkZGVkIG51bGwgY29kZSBwb2ludHMsIHdoaWNoIHdvdWxkIGNhdXNlIHRoZSBzdHJpbmcgdG8gYmUKICAgIHRydW5jYXRlZCB3aGVuIHVzZWQgaW4gbW9zdCBDIGZ1bmN0aW9ucy4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCkBAIC03MDUsMTEgKzcyMywxMSBAQAogCiAuLiBjOmZ1bmN0aW9uOjogUHlfVU5JQ09ERSogUHlVbmljb2RlX0FzVW5pY29kZUNvcHkoUHlPYmplY3QgKnVuaWNvZGUpCiAKLSAgIENyZWF0ZSBhIGNvcHkgb2YgYSBVbmljb2RlIHN0cmluZyBlbmRpbmcgd2l0aCBhIG51bCBjaGFyYWN0ZXIuIFJldHVybiAqTlVMTCoKKyAgIENyZWF0ZSBhIGNvcHkgb2YgYSBVbmljb2RlIHN0cmluZyBlbmRpbmcgd2l0aCBhIG51bGwgY29kZSBwb2ludC4gUmV0dXJuICpOVUxMKgogICAgYW5kIHJhaXNlIGEgOmV4YzpgTWVtb3J5RXJyb3JgIGV4Y2VwdGlvbiBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLAogICAgb3RoZXJ3aXNlIHJldHVybiBhIG5ldyBhbGxvY2F0ZWQgYnVmZmVyICh1c2UgOmM6ZnVuYzpgUHlNZW1fRnJlZWAgdG8gZnJlZQogICAgdGhlIGJ1ZmZlcikuIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIDpjOnR5cGU6YFB5X1VOSUNPREUqYCBzdHJpbmcgbWF5Ci0gICBjb250YWluIGVtYmVkZGVkIG51bGwgY2hhcmFjdGVycywgd2hpY2ggd291bGQgY2F1c2UgdGhlIHN0cmluZyB0byBiZQorICAgY29udGFpbiBlbWJlZGRlZCBudWxsIGNvZGUgcG9pbnRzLCB3aGljaCB3b3VsZCBjYXVzZSB0aGUgc3RyaW5nIHRvIGJlCiAgICB0cnVuY2F0ZWQgd2hlbiB1c2VkIGluIG1vc3QgQyBmdW5jdGlvbnMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgpAQCAtODgzLDEwICs5MDEsMTAgQEAKIAogICAgQ29weSB0aGUgVW5pY29kZSBvYmplY3QgY29udGVudHMgaW50byB0aGUgOmM6dHlwZTpgd2NoYXJfdGAgYnVmZmVyICp3Ki4gIEF0IG1vc3QKICAgICpzaXplKiA6Yzp0eXBlOmB3Y2hhcl90YCBjaGFyYWN0ZXJzIGFyZSBjb3BpZWQgKGV4Y2x1ZGluZyBhIHBvc3NpYmx5IHRyYWlsaW5nCi0gICAwLXRlcm1pbmF0aW9uIGNoYXJhY3RlcikuICBSZXR1cm4gdGhlIG51bWJlciBvZiA6Yzp0eXBlOmB3Y2hhcl90YCBjaGFyYWN0ZXJzCisgICBudWxsIHRlcm1pbmF0aW9uIGNoYXJhY3RlcikuICBSZXR1cm4gdGhlIG51bWJlciBvZiA6Yzp0eXBlOmB3Y2hhcl90YCBjaGFyYWN0ZXJzCiAgICBjb3BpZWQgb3IgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4gIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIDpjOnR5cGU6YHdjaGFyX3QqYAotICAgc3RyaW5nIG1heSBvciBtYXkgbm90IGJlIDAtdGVybWluYXRlZC4gIEl0IGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyCi0gICB0byBtYWtlIHN1cmUgdGhhdCB0aGUgOmM6dHlwZTpgd2NoYXJfdCpgIHN0cmluZyBpcyAwLXRlcm1pbmF0ZWQgaW4gY2FzZSB0aGlzIGlzCisgICBzdHJpbmcgbWF5IG9yIG1heSBub3QgYmUgbnVsbC10ZXJtaW5hdGVkLiAgSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBjYWxsZXIKKyAgIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSA6Yzp0eXBlOmB3Y2hhcl90KmAgc3RyaW5nIGlzIG51bGwtdGVybWluYXRlZCBpbiBjYXNlIHRoaXMgaXMKICAgIHJlcXVpcmVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4gQWxzbywgbm90ZSB0aGF0IHRoZSA6Yzp0eXBlOmB3Y2hhcl90KmAgc3RyaW5nCiAgICBtaWdodCBjb250YWluIG51bGwgY2hhcmFjdGVycywgd2hpY2ggd291bGQgY2F1c2UgdGhlIHN0cmluZyB0byBiZSB0cnVuY2F0ZWQKICAgIHdoZW4gdXNlZCB3aXRoIG1vc3QgQyBmdW5jdGlvbnMuCkBAIC04OTUsOCArOTEzLDggQEAKIC4uIGM6ZnVuY3Rpb246OiB3Y2hhcl90KiBQeVVuaWNvZGVfQXNXaWRlQ2hhclN0cmluZyhQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCAqc2l6ZSkKIAogICAgQ29udmVydCB0aGUgVW5pY29kZSBvYmplY3QgdG8gYSB3aWRlIGNoYXJhY3RlciBzdHJpbmcuIFRoZSBvdXRwdXQgc3RyaW5nCi0gICBhbHdheXMgZW5kcyB3aXRoIGEgbnVsIGNoYXJhY3Rlci4gSWYgKnNpemUqIGlzIG5vdCAqTlVMTCosIHdyaXRlIHRoZSBudW1iZXIKLSAgIG9mIHdpZGUgY2hhcmFjdGVycyAoZXhjbHVkaW5nIHRoZSB0cmFpbGluZyAwLXRlcm1pbmF0aW9uIGNoYXJhY3RlcikgaW50bworICAgYWx3YXlzIGVuZHMgd2l0aCBhIG51bGwgY2hhcmFjdGVyLiBJZiAqc2l6ZSogaXMgbm90ICpOVUxMKiwgd3JpdGUgdGhlIG51bWJlcgorICAgb2Ygd2lkZSBjaGFyYWN0ZXJzIChleGNsdWRpbmcgdGhlIHRyYWlsaW5nIG51bGwgdGVybWluYXRpb24gY2hhcmFjdGVyKSBpbnRvCiAgICAqXCpzaXplKi4KIAogICAgUmV0dXJucyBhIGJ1ZmZlciBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fQWxsb2NgICh1c2UKQEAgLTEwMjYsOSArMTA0NCwxMSBAQAogCiAuLiBjOmZ1bmN0aW9uOjogY2hhciogUHlVbmljb2RlX0FzVVRGOEFuZFNpemUoUHlPYmplY3QgKnVuaWNvZGUsIFB5X3NzaXplX3QgKnNpemUpCiAKLSAgIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRlZmF1bHQgZW5jb2RpbmcgKFVURi04KSBvZiB0aGUgVW5pY29kZSBvYmplY3QsIGFuZAotICAgc3RvcmUgdGhlIHNpemUgb2YgdGhlIGVuY29kZWQgcmVwcmVzZW50YXRpb24gKGluIGJ5dGVzKSBpbiAqc2l6ZSouICAqc2l6ZSoKLSAgIGNhbiBiZSAqTlVMTCosIGluIHRoaXMgY2FzZSBubyBzaXplIHdpbGwgYmUgc3RvcmVkLgorICAgUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgb2JqZWN0LCBhbmQKKyAgIHN0b3JlIHRoZSBzaXplIG9mIHRoZSBlbmNvZGVkIHJlcHJlc2VudGF0aW9uIChpbiBieXRlcykgaW4gKnNpemUqLiAgVGhlCisgICAqc2l6ZSogYXJndW1lbnQgY2FuIGJlICpOVUxMKjsgaW4gdGhpcyBjYXNlIG5vIHNpemUgd2lsbCBiZSBzdG9yZWQuICBUaGUKKyAgIHJldHVybmVkIGJ1ZmZlciBhbHdheXMgaGFzIGFuIGV4dHJhIG51bGwgYnl0ZSBhcHBlbmRlZCAobm90IGluY2x1ZGVkIGluCisgICAqc2l6ZSopLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBudWxsIGNvZGUgcG9pbnRzLgogCiAgICBJbiB0aGUgY2FzZSBvZiBhbiBlcnJvciwgKk5VTEwqIGlzIHJldHVybmVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCBhbmQgbm8KICAgICpzaXplKiBpcyBzdG9yZWQuCkBAIC0xMTIyLDcgKzExNDIsNyBAQAogICAgbWFyayAoVStGRUZGKS4gSW4gdGhlIG90aGVyIHR3byBtb2Rlcywgbm8gQk9NIG1hcmsgaXMgcHJlcGVuZGVkLgogCiAgICBJZiAqUHlfVU5JQ09ERV9XSURFKiBpcyBub3QgZGVmaW5lZCwgc3Vycm9nYXRlIHBhaXJzIHdpbGwgYmUgb3V0cHV0Ci0gICBhcyBhIHNpbmdsZSBjb2RlcG9pbnQuCisgICBhcyBhIHNpbmdsZSBjb2RlIHBvaW50LgogCiAgICBSZXR1cm4gKk5VTEwqIGlmIGFuIGV4Y2VwdGlvbiB3YXMgcmFpc2VkIGJ5IHRoZSBjb2RlYy4KIApAQCAtMTU1Nyw3ICsxNTc3LDcgQEAKICAgIFVuaWNvZGUgc3RyaW5nLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlX1RhaWxtYXRjaChQeU9iamVjdCAqc3RyLCBQeU9iamVjdCAqc3Vic3RyLCBcCisuLiBjOmZ1bmN0aW9uOjogUHlfc3NpemVfdCBQeVVuaWNvZGVfVGFpbG1hdGNoKFB5T2JqZWN0ICpzdHIsIFB5T2JqZWN0ICpzdWJzdHIsIFwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc3RhcnQsIFB5X3NzaXplX3QgZW5kLCBpbnQgZGlyZWN0aW9uKQogCiAgICBSZXR1cm4gMSBpZiAqc3Vic3RyKiBtYXRjaGVzIGBgc3RyW3N0YXJ0OmVuZF1gYCBhdCB0aGUgZ2l2ZW4gdGFpbCBlbmQKQEAgLTE2MDgsMTIgKzE2MjgsMTIgQEAKICAgIHJlc3BlY3RpdmVseS4KIAogCi0uLiBjOmZ1bmN0aW9uOjogaW50IFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKFB5T2JqZWN0ICp1bmksIGNoYXIgKnN0cmluZykKKy4uIGM6ZnVuY3Rpb246OiBpbnQgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoUHlPYmplY3QgKnVuaSwgY29uc3QgY2hhciAqc3RyaW5nKQogCiAgICBDb21wYXJlIGEgdW5pY29kZSBvYmplY3QsICp1bmkqLCB3aXRoICpzdHJpbmcqIGFuZCByZXR1cm4gLTEsIDAsIDEgZm9yIGxlc3MKICAgIHRoYW4sIGVxdWFsLCBhbmQgZ3JlYXRlciB0aGFuLCByZXNwZWN0aXZlbHkuIEl0IGlzIGJlc3QgdG8gcGFzcyBvbmx5CiAgICBBU0NJSS1lbmNvZGVkIHN0cmluZ3MsIGJ1dCB0aGUgZnVuY3Rpb24gaW50ZXJwcmV0cyB0aGUgaW5wdXQgc3RyaW5nIGFzCi0gICBJU08tODg1OS0xIGlmIGl0IGNvbnRhaW5zIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIi4KKyAgIElTTy04ODU5LTEgaWYgaXQgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAKIAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfUmljaENvbXBhcmUoUHlPYmplY3QgKmxlZnQsICBQeU9iamVjdCAqcmlnaHQsICBpbnQgb3ApCkBAIC0xNjM1LDcgKzE2NTUsNyBAQAogLi4gYzpmdW5jdGlvbjo6IFB5T2JqZWN0KiBQeVVuaWNvZGVfRm9ybWF0KFB5T2JqZWN0ICpmb3JtYXQsIFB5T2JqZWN0ICphcmdzKQogCiAgICBSZXR1cm4gYSBuZXcgc3RyaW5nIG9iamVjdCBmcm9tICpmb3JtYXQqIGFuZCAqYXJncyo7IHRoaXMgaXMgYW5hbG9nb3VzIHRvCi0gICBgYGZvcm1hdCAlIGFyZ3NgYC4gIFRoZSAqYXJncyogYXJndW1lbnQgbXVzdCBiZSBhIHR1cGxlLgorICAgYGBmb3JtYXQgJSBhcmdzYGAuCiAKIAogLi4gYzpmdW5jdGlvbjo6IGludCBQeVVuaWNvZGVfQ29udGFpbnMoUHlPYmplY3QgKmNvbnRhaW5lciwgUHlPYmplY3QgKmVsZW1lbnQpCmRpZmYgLS1naXQgYS9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0IGIvRG9jL2MtYXBpL3ZlcnloaWdoLnJzdAppbmRleCAxNGVmOGRmLi5mOGFhZjBmIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvdmVyeWhpZ2gucnN0CisrKyBiL0RvYy9jLWFwaS92ZXJ5aGlnaC5yc3QKQEAgLTE0NCw2ICsxNDQsMzcgQEAKICAgICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgUmV0dXJucyBgYDBgYCBhdCBFT0YuCiAKIAorLi4gYzp2YXI6OiBpbnQgKCpQeU9TX0lucHV0SG9vaykodm9pZCkKKworICAgQ2FuIGJlIHNldCB0byBwb2ludCB0byBhIGZ1bmN0aW9uIHdpdGggdGhlIHByb3RvdHlwZQorICAgYGBpbnQgZnVuYyh2b2lkKWBgLiAgVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gUHl0aG9uJ3MKKyAgIGludGVycHJldGVyIHByb21wdCBpcyBhYm91dCB0byBiZWNvbWUgaWRsZSBhbmQgd2FpdCBmb3IgdXNlciBpbnB1dAorICAgZnJvbSB0aGUgdGVybWluYWwuICBUaGUgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuICBPdmVycmlkaW5nIHRoaXMKKyAgIGhvb2sgY2FuIGJlIHVzZWQgdG8gaW50ZWdyYXRlIHRoZSBpbnRlcnByZXRlcidzIHByb21wdCB3aXRoIG90aGVyCisgICBldmVudCBsb29wcywgYXMgZG9uZSBpbiB0aGUgOmZpbGU6YE1vZHVsZXMvX3RraW50ZXIuY2AgaW4gdGhlCisgICBQeXRob24gc291cmNlIGNvZGUuCisKKworLi4gYzp2YXI6OiBjaGFyKiAoKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopCisKKyAgIENhbiBiZSBzZXQgdG8gcG9pbnQgdG8gYSBmdW5jdGlvbiB3aXRoIHRoZSBwcm90b3R5cGUKKyAgIGBgY2hhciAqZnVuYyhGSUxFICpzdGRpbiwgRklMRSAqc3Rkb3V0LCBjaGFyICpwcm9tcHQpYGAsCisgICBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGZ1bmN0aW9uIHVzZWQgdG8gcmVhZCBhIHNpbmdsZSBsaW5lIG9mIGlucHV0CisgICBhdCB0aGUgaW50ZXJwcmV0ZXIncyBwcm9tcHQuICBUaGUgZnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gb3V0cHV0CisgICB0aGUgc3RyaW5nICpwcm9tcHQqIGlmIGl0J3Mgbm90ICpOVUxMKiwgYW5kIHRoZW4gcmVhZCBhIGxpbmUgb2YKKyAgIGlucHV0IGZyb20gdGhlIHByb3ZpZGVkIHN0YW5kYXJkIGlucHV0IGZpbGUsIHJldHVybmluZyB0aGUKKyAgIHJlc3VsdGluZyBzdHJpbmcuICBGb3IgZXhhbXBsZSwgVGhlIDptb2Q6YHJlYWRsaW5lYCBtb2R1bGUgc2V0cworICAgdGhpcyBob29rIHRvIHByb3ZpZGUgbGluZS1lZGl0aW5nIGFuZCB0YWItY29tcGxldGlvbiBmZWF0dXJlcy4KKworICAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgc3RyaW5nIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yCisgICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwgb3IgKk5VTEwqIGlmIGFuIGVycm9yIG9jY3VycmVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHJlc3VsdCBtdXN0IGJlIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9SYXdNYWxsb2NgIG9yCisgICAgICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwgaW5zdGVhZCBvZiBiZWluZyBhbGxvY2F0ZWQgYnkKKyAgICAgIDpjOmZ1bmM6YFB5TWVtX01hbGxvY2Agb3IgOmM6ZnVuYzpgUHlNZW1fUmVhbGxvY2AuCisKKwogLi4gYzpmdW5jdGlvbjo6IHN0cnVjdCBfbm9kZSogUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgc3RhcnQpCiAKICAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0bwpAQCAtMTcwLDcgKzIwMSw3IEBACiAuLiBjOmZ1bmN0aW9uOjogc3RydWN0IF9ub2RlKiBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQpCiAKICAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6YzpmdW5jOmBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFnc2AgYmVsb3csCi0gICBsZWF2aW5nICpmbGFncyogc2V0IHRvIGBgMGBgCisgICBsZWF2aW5nICpmbGFncyogc2V0IHRvIGBgMGBgLgogCiAKIC4uIGM6ZnVuY3Rpb246OiBzdHJ1Y3QgX25vZGUqIFB5UGFyc2VyX1NpbXBsZVBhcnNlRmlsZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBpbnQgZmxhZ3MpCkBAIC0yMzUsMTYgKzI2NiwxNSBAQAogICAgKm9wdGltaXplKiBzZXQgdG8gYGAtMWBgLgogCiAKLS4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3MoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgb3B0aW1pemUpCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQogCiAgICBQYXJzZSBhbmQgY29tcGlsZSB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlIGluICpzdHIqLCByZXR1cm5pbmcgdGhlIHJlc3VsdGluZyBjb2RlCiAgICBvYmplY3QuICBUaGUgc3RhcnQgdG9rZW4gaXMgZ2l2ZW4gYnkgKnN0YXJ0KjsgdGhpcyBjYW4gYmUgdXNlZCB0byBjb25zdHJhaW4gdGhlCiAgICBjb2RlIHdoaWNoIGNhbiBiZSBjb21waWxlZCBhbmQgc2hvdWxkIGJlIDpjb25zdDpgUHlfZXZhbF9pbnB1dGAsCiAgICA6Y29uc3Q6YFB5X2ZpbGVfaW5wdXRgLCBvciA6Y29uc3Q6YFB5X3NpbmdsZV9pbnB1dGAuICBUaGUgZmlsZW5hbWUgc3BlY2lmaWVkIGJ5CiAgICAqZmlsZW5hbWUqIGlzIHVzZWQgdG8gY29uc3RydWN0IHRoZSBjb2RlIG9iamVjdCBhbmQgbWF5IGFwcGVhciBpbiB0cmFjZWJhY2tzIG9yCi0gICA6ZXhjOmBTeW50YXhFcnJvcmAgZXhjZXB0aW9uIG1lc3NhZ2VzLCBpdCBpcyBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0KLSAgIGVuY29kaW5nICg6ZnVuYzpgc3lzLmdldGZpbGVzeXN0ZW1lbmNvZGluZ2ApLiAgVGhpcyByZXR1cm5zICpOVUxMKiBpZiB0aGUKLSAgIGNvZGUgY2Fubm90IGJlIHBhcnNlZCBvciBjb21waWxlZC4KKyAgIDpleGM6YFN5bnRheEVycm9yYCBleGNlcHRpb24gbWVzc2FnZXMuICBUaGlzIHJldHVybnMgKk5VTEwqIGlmIHRoZSBjb2RlCisgICBjYW5ub3QgYmUgcGFyc2VkIG9yIGNvbXBpbGVkLgogCiAgICBUaGUgaW50ZWdlciAqb3B0aW1pemUqIHNwZWNpZmllcyB0aGUgb3B0aW1pemF0aW9uIGxldmVsIG9mIHRoZSBjb21waWxlcjsgYQogICAgdmFsdWUgb2YgYGAtMWBgIHNlbGVjdHMgdGhlIG9wdGltaXphdGlvbiBsZXZlbCBvZiB0aGUgaW50ZXJwcmV0ZXIgYXMgZ2l2ZW4gYnkKQEAgLTI1Miw5ICsyODIsMTYgQEAKICAgIGBgX19kZWJ1Z19fYGAgaXMgdHJ1ZSksIGBgMWBgIChhc3NlcnRzIGFyZSByZW1vdmVkLCBgYF9fZGVidWdfX2BgIGlzIGZhbHNlKQogICAgb3IgYGAyYGAgKGRvY3N0cmluZ3MgYXJlIHJlbW92ZWQgdG9vKS4KIAotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogCisuLiBjOmZ1bmN0aW9uOjogUHlPYmplY3QqIFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQorCisgICBMaWtlIDpjOmZ1bmM6YFB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzYCwgYnV0ICpmaWxlbmFtZSogaXMgYSBieXRlIHN0cmluZworICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICg6ZnVuYzpgb3MuZnNkZWNvZGVgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCisKIC4uIGM6ZnVuY3Rpb246OiBQeU9iamVjdCogUHlFdmFsX0V2YWxDb2RlKFB5T2JqZWN0ICpjbywgUHlPYmplY3QgKmdsb2JhbHMsIFB5T2JqZWN0ICpsb2NhbHMpCiAKICAgIFRoaXMgaXMgYSBzaW1wbGlmaWVkIGludGVyZmFjZSB0byA6YzpmdW5jOmBQeUV2YWxfRXZhbENvZGVFeGAsIHdpdGgganVzdApAQCAtMjg1LDYgKzMyMiwxMCBAQAogICAgaXQgY2F1c2VzIGFuIGV4Y2VwdGlvbiB0byBpbW1lZGlhdGVseSBiZSB0aHJvd247IHRoaXMgaXMgdXNlZCBmb3IgdGhlCiAgICA6bWV0aDpgfmdlbmVyYXRvci50aHJvd2AgbWV0aG9kcyBvZiBnZW5lcmF0b3Igb2JqZWN0cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoaXMgZnVuY3Rpb24gbm93IGluY2x1ZGVzIGEgZGVidWcgYXNzZXJ0aW9uIHRvIGhlbHAgZW5zdXJlIHRoYXQgaXQKKyAgICAgIGRvZXMgbm90IHNpbGVudGx5IGRpc2NhcmQgYW4gYWN0aXZlIGV4Y2VwdGlvbi4KKwogCiAuLiBjOmZ1bmN0aW9uOjogaW50IFB5RXZhbF9NZXJnZUNvbXBpbGVyRmxhZ3MoUHlDb21waWxlckZsYWdzICpjZikKIApAQCAtMzM4LDQgKzM3OSwzIEBACiAKICAgIFRoaXMgYml0IGNhbiBiZSBzZXQgaW4gKmZsYWdzKiB0byBjYXVzZSBkaXZpc2lvbiBvcGVyYXRvciBgYC9gYCB0byBiZQogICAgaW50ZXJwcmV0ZWQgYXMgInRydWUgZGl2aXNpb24iIGFjY29yZGluZyB0byA6cGVwOmAyMzhgLgotCmRpZmYgLS1naXQgYS9Eb2MvY29uZi5weSBiL0RvYy9jb25mLnB5CmluZGV4IDViNjNjYWQuLmY4MDNkZTIgMTAwNjQ0Ci0tLSBhL0RvYy9jb25mLnB5CisrKyBiL0RvYy9jb25mLnB5CkBAIC03LDI2ICs3LDE4IEBACiAjIHRoYXQgYXJlbid0IHBpY2tsZWFibGUgKG1vZHVsZSBpbXBvcnRzIGFyZSBva2F5LCB0aGV5J3JlIHJlbW92ZWQgYXV0b21hdGljYWxseSkuCiAKIGltcG9ydCBzeXMsIG9zLCB0aW1lCi1zeXMucGF0aC5hcHBlbmQob3MucGF0aC5hYnNwYXRoKCd0b29scy9zcGhpbnhleHQnKSkKK3N5cy5wYXRoLmFwcGVuZChvcy5wYXRoLmFic3BhdGgoJ3Rvb2xzL2V4dGVuc2lvbnMnKSkKIAogIyBHZW5lcmFsIGNvbmZpZ3VyYXRpb24KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIGV4dGVuc2lvbnMgPSBbJ3NwaGlueC5leHQuY292ZXJhZ2UnLCAnc3BoaW54LmV4dC5kb2N0ZXN0JywKICAgICAgICAgICAgICAgJ3B5c3BlY2lmaWMnLCAnY19hbm5vdGF0aW9ucyddCi10ZW1wbGF0ZXNfcGF0aCA9IFsndG9vbHMvc3BoaW54ZXh0J10KIAogIyBHZW5lcmFsIHN1YnN0aXR1dGlvbnMuCiBwcm9qZWN0ID0gJ1B5dGhvbicKIGNvcHlyaWdodCA9ICcxOTkwLSVzLCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbicgJSB0aW1lLnN0cmZ0aW1lKCclWScpCiAKLSMgVGhlIGRlZmF1bHQgcmVwbGFjZW1lbnRzIGZvciB8dmVyc2lvbnwgYW5kIHxyZWxlYXNlfC4KLSMKLSMgVGhlIHNob3J0IFguWSB2ZXJzaW9uLgotIyB2ZXJzaW9uID0gJzIuNicKLSMgVGhlIGZ1bGwgdmVyc2lvbiwgaW5jbHVkaW5nIGFscGhhL2JldGEvcmMgdGFncy4KLSMgcmVsZWFzZSA9ICcyLjZhMCcKLQogIyBXZSBsb29rIGZvciB0aGUgSW5jbHVkZS9wYXRjaGxldmVsLmggZmlsZSBpbiB0aGUgY3VycmVudCBQeXRob24gc291cmNlIHRyZWUKICMgYW5kIHJlcGxhY2UgdGhlIHZhbHVlcyBhY2NvcmRpbmdseS4KIGltcG9ydCBwYXRjaGxldmVsCkBAIC0zOCw0NiArMzAsMzAgQEAKICMgRWxzZSwgdG9kYXlfZm10IGlzIHVzZWQgYXMgdGhlIGZvcm1hdCBmb3IgYSBzdHJmdGltZSBjYWxsLgogdG9kYXlfZm10ID0gJyVCICVkLCAlWScKIAotIyBMaXN0IG9mIGZpbGVzIHRoYXQgc2hvdWxkbid0IGJlIGluY2x1ZGVkIGluIHRoZSBidWlsZC4KLXVudXNlZF9kb2NzID0gWwotICAgICdtYWNsaWIvc2NyYXAnLAotICAgICdsaWJyYXJ5L3htbGxpYicsCi0gICAgJ2xpYnJhcnkveG1sLmV0cmVlJywKLV0KLQotIyBJZ25vcmUgLnJzdCBpbiBTcGhpbnggaXRzIHNlbGYuCi1leGNsdWRlX3RyZWVzID0gWyd0b29scy9zcGhpbngnXQotCi0jIFJlbGF0aXZlIGZpbGVuYW1lIG9mIHRoZSByZWZlcmVuY2UgY291bnQgZGF0YSBmaWxlLgotcmVmY291bnRfZmlsZSA9ICdkYXRhL3JlZmNvdW50cy5kYXQnCi0KLSMgSWYgdHJ1ZSwgJygpJyB3aWxsIGJlIGFwcGVuZGVkIHRvIDpmdW5jOiBldGMuIGNyb3NzLXJlZmVyZW5jZSB0ZXh0LgotYWRkX2Z1bmN0aW9uX3BhcmVudGhlc2VzID0gVHJ1ZQotCi0jIElmIHRydWUsIHRoZSBjdXJyZW50IG1vZHVsZSBuYW1lIHdpbGwgYmUgcHJlcGVuZGVkIHRvIGFsbCBkZXNjcmlwdGlvbgotIyB1bml0IHRpdGxlcyAoc3VjaCBhcyAuLiBmdW5jdGlvbjo6KS4KLWFkZF9tb2R1bGVfbmFtZXMgPSBUcnVlCi0KICMgQnkgZGVmYXVsdCwgaGlnaGxpZ2h0IGFzIFB5dGhvbiAzLgogaGlnaGxpZ2h0X2xhbmd1YWdlID0gJ3B5dGhvbjMnCiAKKyMgUmVxdWlyZSBTcGhpbnggMS4yIGZvciBidWlsZC4KK25lZWRzX3NwaGlueCA9ICcxLjInCisKIAogIyBPcHRpb25zIGZvciBIVE1MIG91dHB1dAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCisjIFVzZSBvdXIgY3VzdG9tIHRoZW1lLgogaHRtbF90aGVtZSA9ICdweWRvY3RoZW1lJwotaHRtbF90aGVtZV9wYXRoID0gWyd0b29scy9zcGhpbnhleHQnXQoraHRtbF90aGVtZV9wYXRoID0gWyd0b29scyddCiBodG1sX3RoZW1lX29wdGlvbnMgPSB7J2NvbGxhcHNpYmxlc2lkZWJhcic6IFRydWV9CiAKKyMgU2hvcnQgdGl0bGUgdXNlZCBlLmcuIGZvciA8dGl0bGU+IEhUTUwgdGFncy4KIGh0bWxfc2hvcnRfdGl0bGUgPSAnJXMgRG9jdW1lbnRhdGlvbicgJSByZWxlYXNlCiAKICMgSWYgbm90ICcnLCBhICdMYXN0IHVwZGF0ZWQgb246JyB0aW1lc3RhbXAgaXMgaW5zZXJ0ZWQgYXQgZXZlcnkgcGFnZSBib3R0b20sCiAjIHVzaW5nIHRoZSBnaXZlbiBzdHJmdGltZSBmb3JtYXQuCiBodG1sX2xhc3RfdXBkYXRlZF9mbXQgPSAnJWIgJWQsICVZJwogCi0jIElmIHRydWUsIFNtYXJ0eVBhbnRzIHdpbGwgYmUgdXNlZCB0byBjb252ZXJ0IHF1b3RlcyBhbmQgZGFzaGVzIHRvCi0jIHR5cG9ncmFwaGljYWxseSBjb3JyZWN0IGVudGl0aWVzLgotaHRtbF91c2Vfc21hcnR5cGFudHMgPSBUcnVlCisjIFBhdGggdG8gZmluZCBIVE1MIHRlbXBsYXRlcy4KK3RlbXBsYXRlc19wYXRoID0gWyd0b29scy90ZW1wbGF0ZXMnXQogCiAjIEN1c3RvbSBzaWRlYmFyIHRlbXBsYXRlcywgZmlsZW5hbWVzIHJlbGF0aXZlIHRvIHRoaXMgZmlsZS4KIGh0bWxfc2lkZWJhcnMgPSB7CkBAIC05MSwxMCArNjcsMTAgQEAKIH0KIAogIyBPdXRwdXQgYW4gT3BlblNlYXJjaCBkZXNjcmlwdGlvbiBmaWxlLgotaHRtbF91c2Vfb3BlbnNlYXJjaCA9ICdodHRwOi8vZG9jcy5weXRob24ub3JnLycgKyB2ZXJzaW9uCitodG1sX3VzZV9vcGVuc2VhcmNoID0gJ2h0dHBzOi8vZG9jcy5weXRob24ub3JnLycgKyB2ZXJzaW9uCiAKICMgQWRkaXRpb25hbCBzdGF0aWMgZmlsZXMuCi1odG1sX3N0YXRpY19wYXRoID0gWyd0b29scy9zcGhpbnhleHQvc3RhdGljJ10KK2h0bWxfc3RhdGljX3BhdGggPSBbJ3Rvb2xzL3N0YXRpYyddCiAKICMgT3V0cHV0IGZpbGUgYmFzZSBuYW1lIGZvciBIVE1MIGhlbHAgYnVpbGRlci4KIGh0bWxoZWxwX2Jhc2VuYW1lID0gJ3B5dGhvbicgKyByZWxlYXNlLnJlcGxhY2UoJy4nLCAnJykKQEAgLTExNCwxNSArOTAsMTUgQEAKIAogIyBHcm91cGluZyB0aGUgZG9jdW1lbnQgdHJlZSBpbnRvIExhVGVYIGZpbGVzLiBMaXN0IG9mIHR1cGxlcwogIyAoc291cmNlIHN0YXJ0IGZpbGUsIHRhcmdldCBuYW1lLCB0aXRsZSwgYXV0aG9yLCBkb2N1bWVudCBjbGFzcyBbaG93dG8vbWFudWFsXSkuCi1fc3RkYXV0aG9yID0gcidHdWlkbyB2YW4gUm9zc3VtXFxGcmVkIEwuIERyYWtlLCBKci4sIGVkaXRvcicKK19zdGRhdXRob3IgPSByJ0d1aWRvIHZhbiBSb3NzdW1cXGFuZCB0aGUgUHl0aG9uIGRldmVsb3BtZW50IHRlYW0nCiBsYXRleF9kb2N1bWVudHMgPSBbCiAgICAgKCdjLWFwaS9pbmRleCcsICdjLWFwaS50ZXgnLAogICAgICAnVGhlIFB5dGhvbi9DIEFQSScsIF9zdGRhdXRob3IsICdtYW51YWwnKSwKLSAgICAoJ2Rpc3R1dGlscy9pbmRleCcsICdkaXN0dXRpbHMudGV4JywKKyAgICAoJ2Rpc3RyaWJ1dGluZy9pbmRleCcsICdkaXN0cmlidXRpbmcudGV4JywKICAgICAgJ0Rpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlcycsIF9zdGRhdXRob3IsICdtYW51YWwnKSwKICAgICAoJ2V4dGVuZGluZy9pbmRleCcsICdleHRlbmRpbmcudGV4JywKICAgICAgJ0V4dGVuZGluZyBhbmQgRW1iZWRkaW5nIFB5dGhvbicsIF9zdGRhdXRob3IsICdtYW51YWwnKSwKLSAgICAoJ2luc3RhbGwvaW5kZXgnLCAnaW5zdGFsbC50ZXgnLAorICAgICgnaW5zdGFsbGluZy9pbmRleCcsICdpbnN0YWxsaW5nLnRleCcsCiAgICAgICdJbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGVzJywgX3N0ZGF1dGhvciwgJ21hbnVhbCcpLAogICAgICgnbGlicmFyeS9pbmRleCcsICdsaWJyYXJ5LnRleCcsCiAgICAgICdUaGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlJywgX3N0ZGF1dGhvciwgJ21hbnVhbCcpLApAQCAtMTU5LDYgKzEzNSw3IEBACiAjIEdldCBMYVRlWCB0byBoYW5kbGUgVW5pY29kZSBjb3JyZWN0bHkKIGxhdGV4X2VsZW1lbnRzID0geydpbnB1dGVuYyc6IHInXHVzZXBhY2thZ2VbdXRmOHhde2lucHV0ZW5jfScsICd1dGY4ZXh0cmEnOiAnJ30KIAorCiAjIE9wdGlvbnMgZm9yIHRoZSBjb3ZlcmFnZSBjaGVja2VyCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTE5NCwzICsxNzEsMTkgQEAKIGNvdmVyYWdlX2lnbm9yZV9jX2l0ZW1zID0gewogIyAgICAnY2Z1bmN0aW9uJzogWy4uLl0KIH0KKworCisjIE9wdGlvbnMgZm9yIHRoZSBsaW5rIGNoZWNrZXIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjIElnbm9yZSBjZXJ0YWluIFVSTHMuCitsaW5rY2hlY2tfaWdub3JlID0gW3InaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvKGlzc3VlKT9cZCsnLAorICAgICAgICAgICAgICAgICAgICAjIElnbm9yZSBQRVBzIGZvciBub3csIHRoZXkgYWxsIGhhdmUgcGVybWFuZW50IHJlZGlyZWN0cy4KKyAgICAgICAgICAgICAgICAgICAgcidodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLVxkKyddCisKKworIyBPcHRpb25zIGZvciBleHRlbnNpb25zCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIyBSZWxhdGl2ZSBmaWxlbmFtZSBvZiB0aGUgcmVmZXJlbmNlIGNvdW50IGRhdGEgZmlsZS4KK3JlZmNvdW50X2ZpbGUgPSAnZGF0YS9yZWZjb3VudHMuZGF0JwpkaWZmIC0tZ2l0IGEvRG9jL2NvbnRlbnRzLnJzdCBiL0RvYy9jb250ZW50cy5yc3QKaW5kZXggYzBjNmFmMy4uODY5MGRlNyAxMDA2NDQKLS0tIGEvRG9jL2NvbnRlbnRzLnJzdAorKysgYi9Eb2MvY29udGVudHMucnN0CkBAIC0xMSw4ICsxMSw4IEBACiAgICBsaWJyYXJ5L2luZGV4LnJzdAogICAgZXh0ZW5kaW5nL2luZGV4LnJzdAogICAgYy1hcGkvaW5kZXgucnN0Ci0gICBkaXN0dXRpbHMvaW5kZXgucnN0Ci0gICBpbnN0YWxsL2luZGV4LnJzdAorICAgZGlzdHJpYnV0aW5nL2luZGV4LnJzdAorICAgaW5zdGFsbGluZy9pbmRleC5yc3QKICAgIGhvd3RvL2luZGV4LnJzdAogICAgZmFxL2luZGV4LnJzdAogICAgZ2xvc3NhcnkucnN0CkBAIC0yMSwzICsyMSwxMSBAQAogICAgYnVncy5yc3QKICAgIGNvcHlyaWdodC5yc3QKICAgIGxpY2Vuc2UucnN0CisKKy4uIHRvIGluY2x1ZGUgbGVnYWN5IHBhY2thZ2luZyBkb2NzIGluIGJ1aWxkCisKKy4uIHRvY3RyZWU6OgorICAgOmhpZGRlbjoKKworICAgZGlzdHV0aWxzL2luZGV4LnJzdAorICAgaW5zdGFsbC9pbmRleC5yc3QKZGlmZiAtLWdpdCBhL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQgYi9Eb2MvZGF0YS9yZWZjb3VudHMuZGF0CmluZGV4IGE0MjU4NGMuLjYwMjU2MTcgMTAwNjQ0Ci0tLSBhL0RvYy9kYXRhL3JlZmNvdW50cy5kYXQKKysrIGIvRG9jL2RhdGEvcmVmY291bnRzLmRhdApAQCAtMjksNyArMjksNyBAQAogIyByZWZlcmVuY2UgdG8gdGhlIGl0ZW0gYXJndW1lbnQhCiAKICMgVGhlIHBhcmFtZXRlciBuYW1lcyBhcmUgYXMgdGhleSBhcHBlYXIgaW4gdGhlIEFQSSBtYW51YWwsIG5vdCB0aGUgc291cmNlCi0jIGNvZGUuIAorIyBjb2RlLgogCiBQeUJvb2xfRnJvbUxvbmc6UHlPYmplY3QqOjorMToKIFB5Qm9vbF9Gcm9tTG9uZzpsb25nOnY6MDoKQEAgLTIyMCw2ICsyMjAsMTEgQEAKIFB5RGljdF9HZXRJdGVtU3RyaW5nOlB5T2JqZWN0KjpwOjA6CiBQeURpY3RfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6OjA6CitQeURpY3RfU2V0RGVmYXVsdDpQeU9iamVjdCo6cDowOgorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmtleTowOmNvbmRpdGlvbmFsbHkgKzEgaWYgaW5zZXJ0ZWQgaW50byB0aGUgZGljdAorUHlEaWN0X1NldERlZmF1bHQ6UHlPYmplY3QqOmRlZmF1bHQ6MDpjb25kaXRpb25hbGx5ICsxIGlmIGluc2VydGVkIGludG8gdGhlIGRpY3QKKwogUHlEaWN0X0l0ZW1zOlB5T2JqZWN0Kjo6KzE6CiBQeURpY3RfSXRlbXM6UHlPYmplY3QqOnA6MDoKIApAQCAtNTAzLDEzICs1MDgsMTMgQEAKIFB5SW1wb3J0X0NsZWFudXA6dm9pZDo6OgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpQeU9iamVjdCo6OisxOgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGU6Y2hhcio6bmFtZTo6CitQeUltcG9ydF9FeGVjQ29kZU1vZHVsZTpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlOlB5T2JqZWN0KjpjbzowOgogCiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OlB5T2JqZWN0Kjo6KzE6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOm5hbWU6OgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeDpjb25zdCBjaGFyKjpuYW1lOjoKIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6UHlPYmplY3QqOmNvOjA6Ci1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4OmNoYXIqOnBhdGhuYW1lOjoKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg6Y29uc3QgY2hhcio6cGF0aG5hbWU6OgogCiBQeUltcG9ydF9HZXRNYWdpY051bWJlcjpsb25nOjo6CiAKQEAgLTUxOSw3ICs1MjQsNyBAQAogUHlJbXBvcnRfSW1wb3J0OlB5T2JqZWN0KjpuYW1lOjA6CiAKIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTppbnQ6OjoKLVB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZTpjaGFyKjo6OgorUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlOmNvbnN0IGNoYXIqOjo6CiAKIFB5SW1wb3J0X0ltcG9ydE1vZHVsZTpQeU9iamVjdCo6OisxOgogUHlJbXBvcnRfSW1wb3J0TW9kdWxlOmNvbnN0IGNoYXIqOm5hbWU6OgpAQCAtNjY4LDcgKzY3Myw3IEBACiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc6dW5zaWduZWQgbG9uZyBsb25nOnY6OgogCiBQeUxvbmdfRnJvbVN0cmluZzpQeU9iamVjdCo6OisxOgotUHlMb25nX0Zyb21TdHJpbmc6Y2hhcio6c3RyOjoKK1B5TG9uZ19Gcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cjo6CiBQeUxvbmdfRnJvbVN0cmluZzpjaGFyKio6cGVuZDo6CiBQeUxvbmdfRnJvbVN0cmluZzppbnQ6YmFzZTo6CiAKQEAgLTY5Niw3ICs3MDEsNyBAQAogCiBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmc6UHlPYmplY3QqOm86MDoKLVB5TWFwcGluZ19HZXRJdGVtU3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfR2V0SXRlbVN0cmluZzpjb25zdCBjaGFyKjprZXk6OgogCiBQeU1hcHBpbmdfSGFzS2V5OmludDo6OgogUHlNYXBwaW5nX0hhc0tleTpQeU9iamVjdCo6bzowOgpAQCAtNzA0LDcgKzcwOSw3IEBACiAKIFB5TWFwcGluZ19IYXNLZXlTdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOlB5T2JqZWN0KjpvOjA6Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNoYXIqOmtleTo6CitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiAKIFB5TWFwcGluZ19JdGVtczpQeU9iamVjdCo6OisxOgogUHlNYXBwaW5nX0l0ZW1zOlB5T2JqZWN0KjpvOjA6CkBAIC03MTcsNyArNzIyLDcgQEAKIAogUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6aW50Ojo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6bzowOgotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc6Y2hhcio6a2V5OjoKK1B5TWFwcGluZ19TZXRJdGVtU3RyaW5nOmNvbnN0IGNoYXIqOmtleTo6CiBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZzpQeU9iamVjdCo6djorMToKIAogUHlNYXBwaW5nX1ZhbHVlczpQeU9iamVjdCo6OisxOgpAQCAtNzMwLDcgKzczNSw3IEBACiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlOkZJTEUqOmZpbGU6OgogCiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6UHlPYmplY3QqOjorMToKLVB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZzpjaGFyKjpzdHJpbmc6OgorUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nOmNvbnN0IGNoYXIqOnN0cmluZzo6CiBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmc6aW50Omxlbjo6CiAKIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvU3RyaW5nOlB5T2JqZWN0Kjo6KzE6CkBAIC05MDIsNyArOTA3LDcgQEAKIFB5TnVtYmVyX1hvcjpQeU9iamVjdCo6bzE6MDoKIFB5TnVtYmVyX1hvcjpQeU9iamVjdCo6bzI6MDoKIAotUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcjppbnQ6OjogCitQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yOmludDo6OgogUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvcjpQeU9iamVjdCo6bzowOgogCiBQeU9iamVjdF9DYWxsOlB5T2JqZWN0Kjo6KzE6CkBAIC05MTIsNyArOTE3LDcgQEAKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOlB5T2JqZWN0Kjo6KzE6CiBQeU9iamVjdF9DYWxsRnVuY3Rpb246UHlPYmplY3QqOmNhbGxhYmxlX29iamVjdDowOgotUHlPYmplY3RfQ2FsbEZ1bmN0aW9uOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsRnVuY3Rpb246Y29uc3QgY2hhcio6Zm9ybWF0OjoKIFB5T2JqZWN0X0NhbGxGdW5jdGlvbjo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJnczpQeU9iamVjdCo6OisxOgpAQCAtOTIxLDggKzkyNiw4IEBACiAKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOjorMToKIFB5T2JqZWN0X0NhbGxNZXRob2Q6UHlPYmplY3QqOm86MDoKLVB5T2JqZWN0X0NhbGxNZXRob2Q6Y2hhcio6bTo6Ci1QeU9iamVjdF9DYWxsTWV0aG9kOmNoYXIqOmZvcm1hdDo6CitQeU9iamVjdF9DYWxsTWV0aG9kOmNvbnN0IGNoYXIqOm06OgorUHlPYmplY3RfQ2FsbE1ldGhvZDpjb25zdCBjaGFyKjpmb3JtYXQ6OgogUHlPYmplY3RfQ2FsbE1ldGhvZDo6Li4uOjoKIAogUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3M6UHlPYmplY3QqOjorMToKZGlmZiAtLWdpdCBhL0RvYy9kaXN0cmlidXRpbmcvaW5kZXgucnN0IGIvRG9jL2Rpc3RyaWJ1dGluZy9pbmRleC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc3NGQyMwotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9kaXN0cmlidXRpbmcvaW5kZXgucnN0CkBAIC0wLDAgKzEsMTcwIEBACisuLiBfZGlzdHJpYnV0aW5nLWluZGV4OgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIERpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlcworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCis6RW1haWw6IGRpc3R1dGlscy1zaWdAcHl0aG9uLm9yZworCisKK0FzIGEgcG9wdWxhciBvcGVuIHNvdXJjZSBkZXZlbG9wbWVudCBwcm9qZWN0LCBQeXRob24gaGFzIGFuIGFjdGl2ZQorc3VwcG9ydGluZyBjb21tdW5pdHkgb2YgY29udHJpYnV0b3JzIGFuZCB1c2VycyB0aGF0IGFsc28gbWFrZSB0aGVpciBzb2Z0d2FyZQorYXZhaWxhYmxlIGZvciBvdGhlciBQeXRob24gZGV2ZWxvcGVycyB0byB1c2UgdW5kZXIgb3BlbiBzb3VyY2UgbGljZW5zZSB0ZXJtcy4KKworVGhpcyBhbGxvd3MgUHl0aG9uIHVzZXJzIHRvIHNoYXJlIGFuZCBjb2xsYWJvcmF0ZSBlZmZlY3RpdmVseSwgYmVuZWZpdGluZworZnJvbSB0aGUgc29sdXRpb25zIG90aGVycyBoYXZlIGFscmVhZHkgY3JlYXRlZCB0byBjb21tb24gKGFuZCBzb21ldGltZXMKK2V2ZW4gcmFyZSEpIHByb2JsZW1zLCBhcyB3ZWxsIGFzIHBvdGVudGlhbGx5IGNvbnRyaWJ1dGluZyB0aGVpciBvd24KK3NvbHV0aW9ucyB0byB0aGUgY29tbW9uIHBvb2wuCisKK1RoaXMgZ3VpZGUgY292ZXJzIHRoZSBkaXN0cmlidXRpb24gcGFydCBvZiB0aGUgcHJvY2Vzcy4gRm9yIGEgZ3VpZGUgdG8KK2luc3RhbGxpbmcgb3RoZXIgUHl0aG9uIHByb2plY3RzLCByZWZlciB0byB0aGUKKzpyZWY6YGluc3RhbGxhdGlvbiBndWlkZSA8aW5zdGFsbGluZy1pbmRleD5gLgorCisuLiBub3RlOjoKKworICAgRm9yIGNvcnBvcmF0ZSBhbmQgb3RoZXIgaW5zdGl0dXRpb25hbCB1c2VycywgYmUgYXdhcmUgdGhhdCBtYW55CisgICBvcmdhbmlzYXRpb25zIGhhdmUgdGhlaXIgb3duIHBvbGljaWVzIGFyb3VuZCB1c2luZyBhbmQgY29udHJpYnV0aW5nIHRvCisgICBvcGVuIHNvdXJjZSBzb2Z0d2FyZS4gUGxlYXNlIHRha2Ugc3VjaCBwb2xpY2llcyBpbnRvIGFjY291bnQgd2hlbiBtYWtpbmcKKyAgIHVzZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGFuZCBpbnN0YWxsYXRpb24gdG9vbHMgcHJvdmlkZWQgd2l0aCBQeXRob24uCisKKworS2V5IHRlcm1zCis9PT09PT09PT0KKworKiB0aGUgYFB5dGhvbiBQYWNrYWdpbmcgSW5kZXggPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF9fIGlzIGEgcHVibGljCisgIHJlcG9zaXRvcnkgb2Ygb3BlbiBzb3VyY2UgbGljZW5zZWQgcGFja2FnZXMgbWFkZSBhdmFpbGFibGUgZm9yIHVzZSBieQorICBvdGhlciBQeXRob24gdXNlcnMKKyogdGhlIGBQeXRob24gUGFja2FnaW5nIEF1dGhvcml0eQorICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZnV0dXJlLmh0bWw+YF9fIGFyZSB0aGUgZ3JvdXAgb2YKKyAgZGV2ZWxvcGVycyBhbmQgZG9jdW1lbnRhdGlvbiBhdXRob3JzIHJlc3BvbnNpYmxlIGZvciB0aGUgbWFpbnRlbmFuY2UgYW5kCisgIGV2b2x1dGlvbiBvZiB0aGUgc3RhbmRhcmQgcGFja2FnaW5nIHRvb2xzIGFuZCB0aGUgYXNzb2NpYXRlZCBtZXRhZGF0YSBhbmQKKyAgZmlsZSBmb3JtYXQgc3RhbmRhcmRzLiBUaGV5IG1haW50YWluIGEgdmFyaWV0eSBvZiB0b29scywgZG9jdW1lbnRhdGlvbgorICBhbmQgaXNzdWUgdHJhY2tlcnMgb24gYm90aCBgR2l0SHViIDxodHRwczovL2dpdGh1Yi5jb20vcHlwYT5gX18gYW5kCisgIGBCaXRCdWNrZXQgPGh0dHBzOi8vYml0YnVja2V0Lm9yZy9weXBhLz5gX18uCisqIDptb2Q6YGRpc3R1dGlsc2AgaXMgdGhlIG9yaWdpbmFsIGJ1aWxkIGFuZCBkaXN0cmlidXRpb24gc3lzdGVtIGZpcnN0IGFkZGVkCisgIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeSBpbiAxOTk4LiBXaGlsZSBkaXJlY3QgdXNlIG9mIDptb2Q6YGRpc3R1dGlsc2AKKyAgaXMgYmVpbmcgcGhhc2VkIG91dCwgaXQgc3RpbGwgbGFpZCB0aGUgZm91bmRhdGlvbiBmb3IgdGhlIGN1cnJlbnQgcGFja2FnaW5nCisgIGFuZCBkaXN0cmlidXRpb24gaW5mcmFzdHJ1Y3R1cmUsIGFuZCBpdCBub3Qgb25seSByZW1haW5zIHBhcnQgb2YgdGhlCisgIHN0YW5kYXJkIGxpYnJhcnksIGJ1dCBpdHMgbmFtZSBsaXZlcyBvbiBpbiBvdGhlciB3YXlzIChzdWNoIGFzIHRoZSBuYW1lCisgIG9mIHRoZSBtYWlsaW5nIGxpc3QgdXNlZCB0byBjb29yZGluYXRlIFB5dGhvbiBwYWNrYWdpbmcgc3RhbmRhcmRzCisgIGRldmVsb3BtZW50KS4KKyogYHNldHVwdG9vbHNgXyBpcyBhIChsYXJnZWx5KSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciA6bW9kOmBkaXN0dXRpbHNgIGZpcnN0CisgIHB1Ymxpc2hlZCBpbiAyMDA0LiBJdHMgbW9zdCBub3RhYmxlIGFkZGl0aW9uIG92ZXIgdGhlIHVubW9kaWZpZWQKKyAgOm1vZDpgZGlzdHV0aWxzYCB0b29scyB3YXMgdGhlIGFiaWxpdHkgdG8gZGVjbGFyZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIKKyAgcGFja2FnZXMuIEl0IGlzIGN1cnJlbnRseSByZWNvbW1lbmRlZCBhcyBhIG1vcmUgcmVndWxhcmx5IHVwZGF0ZWQKKyAgYWx0ZXJuYXRpdmUgdG8gOm1vZDpgZGlzdHV0aWxzYCB0aGF0IG9mZmVycyBjb25zaXN0ZW50IHN1cHBvcnQgZm9yIG1vcmUKKyAgcmVjZW50IHBhY2thZ2luZyBzdGFuZGFyZHMgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBQeXRob24gdmVyc2lvbnMuCisqIGB3aGVlbGBfIChpbiB0aGlzIGNvbnRleHQpIGlzIGEgcHJvamVjdCB0aGF0IGFkZHMgdGhlIGBgYmRpc3Rfd2hlZWxgYAorICBjb21tYW5kIHRvIDptb2Q6YGRpc3R1dGlsc2AvYHNldHVwdG9vbHNgXy4gVGhpcyBwcm9kdWNlcyBhIGNyb3NzIHBsYXRmb3JtCisgIGJpbmFyeSBwYWNrYWdpbmcgZm9ybWF0IChjYWxsZWQgIndoZWVscyIgb3IgIndoZWVsIGZpbGVzIiBhbmQgZGVmaW5lZCBpbgorICA6cGVwOmA0MjdgKSB0aGF0IGFsbG93cyBQeXRob24gbGlicmFyaWVzLCBldmVuIHRob3NlIGluY2x1ZGluZyBiaW5hcnkKKyAgZXh0ZW5zaW9ucywgdG8gYmUgaW5zdGFsbGVkIG9uIGEgc3lzdGVtIHdpdGhvdXQgbmVlZGluZyB0byBiZSBidWlsdAorICBsb2NhbGx5LgorCisuLiBfc2V0dXB0b29sczogaHR0cHM6Ly9zZXR1cHRvb2xzLnB5cGEuaW8vZW4vbGF0ZXN0L3NldHVwdG9vbHMuaHRtbAorLi4gX3doZWVsOiBodHRwOi8vd2hlZWwucmVhZHRoZWRvY3Mub3JnCisKK09wZW4gc291cmNlIGxpY2Vuc2luZyBhbmQgY29sbGFib3JhdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0luIG1vc3QgcGFydHMgb2YgdGhlIHdvcmxkLCBzb2Z0d2FyZSBpcyBhdXRvbWF0aWNhbGx5IGNvdmVyZWQgYnkgY29weXJpZ2h0LgorVGhpcyBtZWFucyB0aGF0IG90aGVyIGRldmVsb3BlcnMgcmVxdWlyZSBleHBsaWNpdCBwZXJtaXNzaW9uIHRvIGNvcHksIHVzZSwKK21vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZS4KKworT3BlbiBzb3VyY2UgbGljZW5zaW5nIGlzIGEgd2F5IG9mIGV4cGxpY2l0bHkgZ3JhbnRpbmcgc3VjaCBwZXJtaXNzaW9uIGluIGEKK3JlbGF0aXZlbHkgY29uc2lzdGVudCB3YXksIGFsbG93aW5nIGRldmVsb3BlcnMgdG8gc2hhcmUgYW5kIGNvbGxhYm9yYXRlCitlZmZpY2llbnRseSBieSBtYWtpbmcgY29tbW9uIHNvbHV0aW9ucyB0byB2YXJpb3VzIHByb2JsZW1zIGZyZWVseSBhdmFpbGFibGUuCitUaGlzIGxlYXZlcyBtYW55IGRldmVsb3BlcnMgZnJlZSB0byBzcGVuZCBtb3JlIHRpbWUgZm9jdXNpbmcgb24gdGhlIHByb2JsZW1zCit0aGF0IGFyZSByZWxhdGl2ZWx5IHVuaXF1ZSB0byB0aGVpciBzcGVjaWZpYyBzaXR1YXRpb24uCisKK1RoZSBkaXN0cmlidXRpb24gdG9vbHMgcHJvdmlkZWQgd2l0aCBQeXRob24gYXJlIGRlc2lnbmVkIHRvIG1ha2UgaXQKK3JlYXNvbmFibHkgc3RyYWlnaHRmb3J3YXJkIGZvciBkZXZlbG9wZXJzIHRvIG1ha2UgdGhlaXIgb3duIGNvbnRyaWJ1dGlvbnMKK2JhY2sgdG8gdGhhdCBjb21tb24gcG9vbCBvZiBzb2Z0d2FyZSBpZiB0aGV5IGNob29zZSB0byBkbyBzby4KKworVGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRvb2xzIGNhbiBhbHNvIGJlIHVzZWQgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB3aXRoaW4KK2FuIG9yZ2FuaXNhdGlvbiwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoYXQgc29mdHdhcmUgaXMgcHVibGlzaGVkIGFzIG9wZW4KK3NvdXJjZSBzb2Z0d2FyZSBvciBub3QuCisKKworSW5zdGFsbGluZyB0aGUgdG9vbHMKKz09PT09PT09PT09PT09PT09PT09CisKK1RoZSBzdGFuZGFyZCBsaWJyYXJ5IGRvZXMgbm90IGluY2x1ZGUgYnVpbGQgdG9vbHMgdGhhdCBzdXBwb3J0IG1vZGVybgorUHl0aG9uIHBhY2thZ2luZyBzdGFuZGFyZHMsIGFzIHRoZSBjb3JlIGRldmVsb3BtZW50IHRlYW0gaGFzIGZvdW5kIHRoYXQgaXQKK2lzIGltcG9ydGFudCB0byBoYXZlIHN0YW5kYXJkIHRvb2xzIHRoYXQgd29yayBjb25zaXN0ZW50bHksIGV2ZW4gb24gb2xkZXIKK3ZlcnNpb25zIG9mIFB5dGhvbi4KKworVGhlIGN1cnJlbnRseSByZWNvbW1lbmRlZCBidWlsZCBhbmQgZGlzdHJpYnV0aW9uIHRvb2xzIGNhbiBiZSBpbnN0YWxsZWQKK2J5IGludm9raW5nIHRoZSBgYHBpcGBgIG1vZHVsZSBhdCB0aGUgY29tbWFuZCBsaW5lOjoKKworICAgIHB5dGhvbiAtbSBwaXAgaW5zdGFsbCBzZXR1cHRvb2xzIHdoZWVsIHR3aW5lCisKKy4uIG5vdGU6OgorCisgICBGb3IgUE9TSVggdXNlcnMgKGluY2x1ZGluZyBNYWMgT1MgWCBhbmQgTGludXggdXNlcnMpLCB0aGVzZSBpbnN0cnVjdGlvbnMKKyAgIGFzc3VtZSB0aGUgdXNlIG9mIGEgOnRlcm06YHZpcnR1YWwgZW52aXJvbm1lbnRgLgorCisgICBGb3IgV2luZG93cyB1c2VycywgdGhlc2UgaW5zdHJ1Y3Rpb25zIGFzc3VtZSB0aGF0IHRoZSBvcHRpb24gdG8KKyAgIGFkanVzdCB0aGUgc3lzdGVtIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgd2FzIHNlbGVjdGVkIHdoZW4gaW5zdGFsbGluZworICAgUHl0aG9uLgorCitUaGUgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlIGluY2x1ZGVzIG1vcmUgZGV0YWlscyBvbiB0aGUgYGN1cnJlbnRseQorcmVjb21tZW5kZWQgdG9vbHNgXy4KKworLi4gX2N1cnJlbnRseSByZWNvbW1lbmRlZCB0b29sczogaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvY3VycmVudC5odG1sI3BhY2thZ2luZy10b29sLXJlY29tbWVuZGF0aW9ucworCitSZWFkaW5nIHRoZSBndWlkZQorPT09PT09PT09PT09PT09PT0KKworVGhlIFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSBjb3ZlcnMgdGhlIHZhcmlvdXMga2V5IHN0ZXBzIGFuZCBlbGVtZW50cworaW52b2x2ZWQgaW4gY3JlYXRpbmcgYSBwcm9qZWN0OgorCisqIGBQcm9qZWN0IHN0cnVjdHVyZWBfCisqIGBCdWlsZGluZyBhbmQgcGFja2FnaW5nIHRoZSBwcm9qZWN0YF8KKyogYFVwbG9hZGluZyB0aGUgcHJvamVjdCB0byB0aGUgUHl0aG9uIFBhY2thZ2luZyBJbmRleGBfCisKKy4uIF9Qcm9qZWN0IHN0cnVjdHVyZTogXAorICAgaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZGlzdHJpYnV0aW5nLmh0bWwjY3JlYXRpbmcteW91ci1vd24tcHJvamVjdAorLi4gX0J1aWxkaW5nIGFuZCBwYWNrYWdpbmcgdGhlIHByb2plY3Q6IFwKKyAgIGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2Rpc3RyaWJ1dGluZy5odG1sI3BhY2thZ2luZy15b3VyLXByb2plY3QKKy4uIF9VcGxvYWRpbmcgdGhlIHByb2plY3QgdG8gdGhlIFB5dGhvbiBQYWNrYWdpbmcgSW5kZXg6IFwKKyAgIGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2Rpc3RyaWJ1dGluZy5odG1sI3VwbG9hZGluZy15b3VyLXByb2plY3QtdG8tcHlwaQorCisKK0hvdyBkbyBJLi4uPworPT09PT09PT09PT09CisKK1RoZXNlIGFyZSBxdWljayBhbnN3ZXJzIG9yIGxpbmtzIGZvciBzb21lIGNvbW1vbiB0YXNrcy4KKworLi4uIGNob29zZSBhIG5hbWUgZm9yIG15IHByb2plY3Q/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpc24ndCBhbiBlYXN5IHRvcGljLCBidXQgaGVyZSBhcmUgYSBmZXcgdGlwczoKKworKiBjaGVjayB0aGUgUHl0aG9uIFBhY2thZ2luZyBJbmRleCB0byBzZWUgaWYgdGhlIG5hbWUgaXMgYWxyZWFkeSBpbiB1c2UKKyogY2hlY2sgcG9wdWxhciBob3N0aW5nIHNpdGVzIGxpa2UgR2l0SHViLCBCaXRCdWNrZXQsIGV0YyB0byBzZWUgaWYgdGhlcmUKKyAgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGF0IG5hbWUKKyogY2hlY2sgd2hhdCBjb21lcyB1cCBpbiBhIHdlYiBzZWFyY2ggZm9yIHRoZSBuYW1lIHlvdSdyZSBjb25zaWRlcmluZworKiBhdm9pZCBwYXJ0aWN1bGFybHkgY29tbW9uIHdvcmRzLCBlc3BlY2lhbGx5IG9uZXMgd2l0aCBtdWx0aXBsZSBtZWFuaW5ncywKKyAgYXMgdGhleSBjYW4gbWFrZSBpdCBkaWZmaWN1bHQgZm9yIHVzZXJzIHRvIGZpbmQgeW91ciBzb2Z0d2FyZSB3aGVuCisgIHNlYXJjaGluZyBmb3IgaXQKKworCisuLi4gY3JlYXRlIGFuZCBkaXN0cmlidXRlIGJpbmFyeSBleHRlbnNpb25zPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBpcyBhY3R1YWxseSBxdWl0ZSBhIGNvbXBsZXggdG9waWMsIHdpdGggYSB2YXJpZXR5IG9mIGFsdGVybmF0aXZlcworYXZhaWxhYmxlIGRlcGVuZGluZyBvbiBleGFjdGx5IHdoYXQgeW91J3JlIGFpbWluZyB0byBhY2hpZXZlLiBTZWUgdGhlCitQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHJlY29tbWVuZGF0aW9ucy4KKworLi4gc2VlYWxzbzo6CisKKyAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IEJpbmFyeSBFeHRlbnNpb25zCisgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZXh0ZW5zaW9ucy5odG1sPmBfXworCisuLiBvdGhlciB0b3BpY3M6CisKKyAgIE9uY2UgdGhlIERldmVsb3BtZW50ICYgRGVwbG95bWVudCBwYXJ0IG9mIFBQVUcgaXMgZmxlc2hlZCBvdXQsIHNvbWUgb2YKKyAgIHRob3NlIHNlY3Rpb25zIHNob3VsZCBiZSBsaW5rZWQgZnJvbSBuZXcgcXVlc3Rpb25zIGhlcmUgKG1vc3Qgbm90YWJseSwKKyAgIHdlIHNob3VsZCBoYXZlIGEgcXVlc3Rpb24gYWJvdXQgYXZvaWRpbmcgZGVwZW5kaW5nIG9uIFB5UEkgdGhhdCBsaW5rcyB0bworICAgaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZGVwbG95bWVudC5odG1sI3B5cGktbWlycm9ycy1hbmQtY2FjaGVzKQpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0IGIvRG9jL2Rpc3R1dGlscy9hcGlyZWYucnN0CmluZGV4IDk4NTNmMDIuLmY2N2ZjNWEgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvYXBpcmVmLnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2FwaXJlZi5yc3QKQEAgLTc4LDcgKzc4LDcgQEAKICAgIHwgICAgICAgICAgICAgICAgICAgIHwgYmUgYnVpbHQgICAgICAgICAgICAgICAgICAgICAgIHwgOmNsYXNzOmBkaXN0dXRpbHMuY29yZS5FeHRlbnNpb25gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8ICpjbGFzc2lmaWVycyogICAgICB8IEEgbGlzdCBvZiBjYXRlZ29yaWVzIGZvciB0aGUgICB8IGEgbGlzdCBvZiBzdHJpbmdzOyB2YWxpZCBjbGFzc2lmaWVycyBhcmUgbGlzdGVkIG9uIGBQeVBJICAgIHwKLSAgIHwgICAgICAgICAgICAgICAgICAgIHwgcGFja2FnZSAgICAgICAgICAgICAgICAgICAgICAgIHwgPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT86YWN0aW9uPWxpc3RfY2xhc3NpZmllcnM+YF8uICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgfCBwYWNrYWdlICAgICAgICAgICAgICAgICAgICAgICAgfCA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT86YWN0aW9uPWxpc3RfY2xhc3NpZmllcnM+YF8uICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgKmRpc3RjbGFzcyogICAgICAgIHwgdGhlIDpjbGFzczpgRGlzdHJpYnV0aW9uYCAgICAgIHwgYSBzdWJjbGFzcyBvZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgfCAgICAgICAgICAgICAgICAgICAgfCBjbGFzcyB0byB1c2UgICAgICAgICAgICAgICAgICAgfCA6Y2xhc3M6YGRpc3R1dGlscy5jb3JlLkRpc3RyaWJ1dGlvbmAgICAgICAgICAgICAgICAgICAgICAgICB8CkBAIC01MjEsNyArNTIxLDcgQEAKIAogICAgLi4gbWV0aG9kOjogQ0NvbXBpbGVyLmxpYnJhcnlfb3B0aW9uKGxpYikKIAotICAgICAgUmV0dXJuIHRoZSBjb21waWxlciBvcHRpb24gdG8gYWRkICpkaXIqIHRvIHRoZSBsaXN0IG9mIGxpYnJhcmllcyBsaW5rZWQgaW50byB0aGUKKyAgICAgIFJldHVybiB0aGUgY29tcGlsZXIgb3B0aW9uIHRvIGFkZCAqbGliKiB0byB0aGUgbGlzdCBvZiBsaWJyYXJpZXMgbGlua2VkIGludG8gdGhlCiAgICAgICBzaGFyZWQgbGlicmFyeSBvciBleGVjdXRhYmxlLgogCiAKQEAgLTg1MywxNyArODUzLDYgQEAKIHBvcnQgb2YgR0NDIChzYW1lIGFzIGN5Z3dpbiBpbiBuby1jeWd3aW4gbW9kZSkuCiAKIAotOm1vZDpgZGlzdHV0aWxzLmVteGNjb21waWxlcmAgLS0tIE9TLzIgRU1YIENvbXBpbGVyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotLi4gbW9kdWxlOjogZGlzdHV0aWxzLmVteGNjb21waWxlcgotICAgOnN5bm9wc2lzOiBPUy8yIEVNWCBDb21waWxlciBzdXBwb3J0Ci0KLQotVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIEVNWENDb21waWxlciBjbGFzcywgYSBzdWJjbGFzcyBvZgotOmNsYXNzOmBVbml4Q0NvbXBpbGVyYCB0aGF0IGhhbmRsZXMgdGhlIEVNWCBwb3J0IG9mIHRoZSBHTlUgQyBjb21waWxlciB0byBPUy8yLgotCi0KIDptb2Q6YGRpc3R1dGlscy5hcmNoaXZlX3V0aWxgIC0tLSAgQXJjaGl2aW5nIHV0aWxpdGllcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTkzMSw3ICs5MjAsNyBAQAogCiAgICBXYWxrIHR3byBmaWxlbmFtZSBsaXN0cyBpbiBwYXJhbGxlbCwgdGVzdGluZyBpZiBlYWNoIHNvdXJjZSBpcyBuZXdlciB0aGFuIGl0cwogICAgY29ycmVzcG9uZGluZyB0YXJnZXQuICBSZXR1cm4gYSBwYWlyIG9mIGxpc3RzICgqc291cmNlcyosICp0YXJnZXRzKikgd2hlcmUKLSAgIHNvdXJjZSBpcyBuZXdlciB0aGFuIHRhcmdldCwgYWNjb3JkaW5nIHRvIHRoZSBzZW1hbnRpY3Mgb2YgOmZ1bmM6YG5ld2VyYAorICAgc291cmNlIGlzIG5ld2VyIHRoYW4gdGFyZ2V0LCBhY2NvcmRpbmcgdG8gdGhlIHNlbWFudGljcyBvZiA6ZnVuYzpgbmV3ZXJgLgogCiAgICAuLiAlICUgZXF1aXZhbGVudCB0byBhIGxpc3Rjb21wLi4uCiAKQEAgLTk3NSw3ICs5NjQsNyBAQAogLi4gZnVuY3Rpb246OiBjcmVhdGVfdHJlZShiYXNlX2RpciwgZmlsZXNbLCBtb2RlPTBvNzc3LCB2ZXJib3NlPTAsIGRyeV9ydW49MF0pCiAKICAgIENyZWF0ZSBhbGwgdGhlIGVtcHR5IGRpcmVjdG9yaWVzIHVuZGVyICpiYXNlX2RpciogbmVlZGVkIHRvIHB1dCAqZmlsZXMqIHRoZXJlLgotICAgKmJhc2VfZGlyKiBpcyBqdXN0IHRoZSBhIG5hbWUgb2YgYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseSBleGlzdAorICAgKmJhc2VfZGlyKiBpcyBqdXN0IHRoZSBuYW1lIG9mIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkgZXhpc3QKICAgIHlldDsgKmZpbGVzKiBpcyBhIGxpc3Qgb2YgZmlsZW5hbWVzIHRvIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvICpiYXNlX2RpciouCiAgICAqYmFzZV9kaXIqICsgdGhlIGRpcmVjdG9yeSBwb3J0aW9uIG9mIGV2ZXJ5IGZpbGUgaW4gKmZpbGVzKiB3aWxsIGJlIGNyZWF0ZWQgaWYKICAgIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gICptb2RlKiwgKnZlcmJvc2UqIGFuZCAqZHJ5X3J1biogZmxhZ3MgIGFyZSBhcyBmb3IKQEAgLTEwMDQsNyArOTkzLDcgQEAKIAogICAgRmlsZXMgaW4gKnNyYyogdGhhdCBiZWdpbiB3aXRoIDpmaWxlOmAubmZzYCBhcmUgc2tpcHBlZCAobW9yZSBpbmZvcm1hdGlvbiBvbgogICAgdGhlc2UgZmlsZXMgaXMgYXZhaWxhYmxlIGluIGFuc3dlciBEMiBvZiB0aGUgYE5GUyBGQVEgcGFnZQotICAgPGh0dHA6Ly9uZnMuc291cmNlZm9yZ2UubmV0LyNzZWN0aW9uX2Q+YF8uCisgICA8aHR0cDovL25mcy5zb3VyY2Vmb3JnZS5uZXQvI3NlY3Rpb25fZD5gXykuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjEKICAgICAgIE5GUyBmaWxlcyBhcmUgaWdub3JlZC4KQEAgLTExMTAsMTMgKzEwOTksMTMgQEAKICAgIGR1cmluZyB0aGUgYnVpbGQgb2YgUHl0aG9uKSwgbm90IHRoZSBPUyB2ZXJzaW9uIG9mIHRoZSBjdXJyZW50IHN5c3RlbS4KIAogICAgRm9yIHVuaXZlcnNhbCBiaW5hcnkgYnVpbGRzIG9uIE1hYyBPUyBYIHRoZSBhcmNoaXRlY3R1cmUgdmFsdWUgcmVmbGVjdHMKLSAgIHRoZSB1bml2ZXJhbCBiaW5hcnkgc3RhdHVzIGluc3RlYWQgb2YgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgY3VycmVudAorICAgdGhlIHVuaXZlcnNhbCBiaW5hcnkgc3RhdHVzIGluc3RlYWQgb2YgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGUgY3VycmVudAogICAgcHJvY2Vzc29yLiBGb3IgMzItYml0IHVuaXZlcnNhbCBiaW5hcmllcyB0aGUgYXJjaGl0ZWN0dXJlIGlzIGBgZmF0YGAsCiAgICBmb3IgNjQtYml0IHVuaXZlcnNhbCBiaW5hcmllcyB0aGUgYXJjaGl0ZWN0dXJlIGlzIGBgZmF0NjRgYCwgYW5kCiAgICBmb3IgNC13YXkgdW5pdmVyc2FsIGJpbmFyaWVzIHRoZSBhcmNoaXRlY3R1cmUgaXMgYGB1bml2ZXJzYWxgYC4gU3RhcnRpbmcKICAgIGZyb20gUHl0aG9uIDIuNyBhbmQgUHl0aG9uIDMuMiB0aGUgYXJjaGl0ZWN0dXJlIGBgZmF0M2BgIGlzIHVzZWQgZm9yCiAgICBhIDMtd2F5IHVuaXZlcnNhbCBidWlsZCAocHBjLCBpMzg2LCB4ODZfNjQpIGFuZCBgYGludGVsYGAgaXMgdXNlZCBmb3IKLSAgIGEgdW5pdmVyYWwgYnVpbGQgd2l0aCB0aGUgaTM4NiBhbmQgeDg2XzY0IGFyY2hpdGVjdHVyZXMKKyAgIGEgdW5pdmVyc2FsIGJ1aWxkIHdpdGggdGhlIGkzODYgYW5kIHg4Nl82NCBhcmNoaXRlY3R1cmVzCiAKICAgIEV4YW1wbGVzIG9mIHJldHVybmVkIHZhbHVlcyBvbiBNYWMgT1MgWDoKIApkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0IGIvRG9jL2Rpc3R1dGlscy9idWlsdGRpc3QucnN0CmluZGV4IGQxYWI3ZGIuLmM1ODI3YjYgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvYnVpbHRkaXN0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2J1aWx0ZGlzdC5yc3QKQEAgLTE4NiwyMSArMTg2LDIxIEBACiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IFJQTSA6ZmlsZTpgLnNwZWNgIGZpbGUgb3B0aW9uIG9yIHNlY3Rpb24gfCBEaXN0dXRpbHMgc2V0dXAgc2NyaXB0IG9wdGlvbiAgICAgICAgICAgICAgICB8CiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi18IE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBuYW1lYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYG5hbWVgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFN1bW1hcnkgKGluIHByZWFtYmxlKSAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBkZXNjcmlwdGlvbmAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFN1bW1hcnkgKGluIHByZWFtYmxlKSAgICAgICAgICAgICAgICAgICAgfCBgYGRlc2NyaXB0aW9uYGAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmB2ZXJzaW9uYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHZlcnNpb25gYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFZlbmRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBhdXRob3JgIGFuZCA6b3B0aW9uOmBhdXRob3JfZW1haWxgLCB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciAgLS0tICYgOm9wdGlvbjpgbWFpbnRhaW5lcmAgYW5kICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBtYWludGFpbmVyX2VtYWlsYCAgICAgICAgICAgICAgICAgICB8Cit8IFZlbmRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGF1dGhvcmBgIGFuZCBgYGF1dGhvcl9lbWFpbGBgLCAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvciAgLS0tICYgYGBtYWludGFpbmVyYGAgYW5kICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYG1haW50YWluZXJfZW1haWxgYCAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IENvcHlyaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBsaWNlbnNlYCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IENvcHlyaWdodCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYGxpY2Vuc2VgYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFVybCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmB1cmxgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFVybCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYHVybGBgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18ICVkZXNjcmlwdGlvbiAoc2VjdGlvbikgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBsb25nX2Rlc2NyaXB0aW9uYCAgICAgICAgICAgICAgICAgICB8Cit8ICVkZXNjcmlwdGlvbiAoc2VjdGlvbikgICAgICAgICAgICAgICAgICAgfCBgYGxvbmdfZGVzY3JpcHRpb25gYCAgICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIEFkZGl0aW9uYWxseSwgdGhlcmUgYXJlIG1hbnkgb3B0aW9ucyBpbiA6ZmlsZTpgLnNwZWNgIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZQpAQCAtMjExLDI3ICsyMTEsMjcgQEAKIHwgUlBNIDpmaWxlOmAuc3BlY2AgZmlsZSBvcHRpb24gfCA6Y29tbWFuZDpgYmRpc3RfcnBtYCBvcHRpb24gfCBkZWZhdWx0IHZhbHVlICAgICAgICAgICB8CiB8IG9yIHNlY3Rpb24gICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfAogKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgUmVsZWFzZSAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmByZWxlYXNlYCAgICAgICAgICAgfCAiMSIgICAgICAgICAgICAgICAgICAgICB8Cit8IFJlbGVhc2UgICAgICAgICAgICAgICAgICAgICAgIHwgYGByZWxlYXNlYGAgICAgICAgICAgICAgICAgIHwgIjEiICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgR3JvdXAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBncm91cGAgICAgICAgICAgICAgfCAiRGV2ZWxvcG1lbnQvTGlicmFyaWVzIiB8Cit8IEdyb3VwICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBncm91cGBgICAgICAgICAgICAgICAgICAgIHwgIkRldmVsb3BtZW50L0xpYnJhcmllcyIgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgVmVuZG9yICAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmB2ZW5kb3JgICAgICAgICAgICAgfCAoc2VlIGFib3ZlKSAgICAgICAgICAgICB8Cit8IFZlbmRvciAgICAgICAgICAgICAgICAgICAgICAgIHwgYGB2ZW5kb3JgYCAgICAgICAgICAgICAgICAgIHwgKHNlZSBhYm92ZSkgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgUGFja2FnZXIgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBwYWNrYWdlcmAgICAgICAgICAgfCAobm9uZSkgICAgICAgICAgICAgICAgICB8Cit8IFBhY2thZ2VyICAgICAgICAgICAgICAgICAgICAgIHwgYGBwYWNrYWdlcmBgICAgICAgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgUHJvdmlkZXMgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBwcm92aWRlc2AgICAgICAgICAgfCAobm9uZSkgICAgICAgICAgICAgICAgICB8Cit8IFByb3ZpZGVzICAgICAgICAgICAgICAgICAgICAgIHwgYGBwcm92aWRlc2BgICAgICAgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgUmVxdWlyZXMgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmByZXF1aXJlc2AgICAgICAgICAgfCAobm9uZSkgICAgICAgICAgICAgICAgICB8Cit8IFJlcXVpcmVzICAgICAgICAgICAgICAgICAgICAgIHwgYGByZXF1aXJlc2BgICAgICAgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgQ29uZmxpY3RzICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBjb25mbGljdHNgICAgICAgICAgfCAobm9uZSkgICAgICAgICAgICAgICAgICB8Cit8IENvbmZsaWN0cyAgICAgICAgICAgICAgICAgICAgIHwgYGBjb25mbGljdHNgYCAgICAgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgT2Jzb2xldGVzICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBvYnNvbGV0ZXNgICAgICAgICAgfCAobm9uZSkgICAgICAgICAgICAgICAgICB8Cit8IE9ic29sZXRlcyAgICAgICAgICAgICAgICAgICAgIHwgYGBvYnNvbGV0ZXNgYCAgICAgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgRGlzdHJpYnV0aW9uICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBkaXN0cmlidXRpb25fbmFtZWAgfCAobm9uZSkgICAgICAgICAgICAgICAgICB8Cit8IERpc3RyaWJ1dGlvbiAgICAgICAgICAgICAgICAgIHwgYGBkaXN0cmlidXRpb25fbmFtZWBgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgQnVpbGRSZXF1aXJlcyAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBidWlsZF9yZXF1aXJlc2AgICAgfCAobm9uZSkgICAgICAgICAgICAgICAgICB8Cit8IEJ1aWxkUmVxdWlyZXMgICAgICAgICAgICAgICAgIHwgYGBidWlsZF9yZXF1aXJlc2BgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgSWNvbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6b3B0aW9uOmBpY29uYCAgICAgICAgICAgICAgfCAobm9uZSkgICAgICAgICAgICAgICAgICB8Cit8IEljb24gICAgICAgICAgICAgICAgICAgICAgICAgIHwgYGBpY29uYGAgICAgICAgICAgICAgICAgICAgIHwgKG5vbmUpICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogT2J2aW91c2x5LCBzdXBwbHlpbmcgZXZlbiBhIGZldyBvZiB0aGVzZSBvcHRpb25zIG9uIHRoZSBjb21tYW5kLWxpbmUgd291bGQgYmUKQEAgLTIzOSw3ICsyMzksOCBAQAogY29uZmlndXJhdGlvbiBmaWxlLCA6ZmlsZTpgc2V0dXAuY2ZnYFwgLS0tc2VlIHNlY3Rpb24gOnJlZjpgc2V0dXAtY29uZmlnYC4gIElmCiB5b3UgZGlzdHJpYnV0ZSBvciBwYWNrYWdlIG1hbnkgUHl0aG9uIG1vZHVsZSBkaXN0cmlidXRpb25zLCB5b3UgbWlnaHQgd2FudCB0bwogcHV0IG9wdGlvbnMgdGhhdCBhcHBseSB0byBhbGwgb2YgdGhlbSBpbiB5b3VyIHBlcnNvbmFsIERpc3R1dGlscyBjb25maWd1cmF0aW9uCi1maWxlICg6ZmlsZTpgfi8ucHlkaXN0dXRpbHMuY2ZnYCkuCitmaWxlICg6ZmlsZTpgfi8ucHlkaXN0dXRpbHMuY2ZnYCkuICBJZiB5b3Ugd2FudCB0byB0ZW1wb3JhcmlseSBkaXNhYmxlCit0aGlzIGZpbGUsIHlvdSBjYW4gcGFzcyB0aGUgOm9wdGlvbjpgLS1uby11c2VyLWNmZ2Agb3B0aW9uIHRvIDpmaWxlOmBzZXR1cC5weWAuCiAKIFRoZXJlIGFyZSB0aHJlZSBzdGVwcyB0byBidWlsZGluZyBhIGJpbmFyeSBSUE0gcGFja2FnZSwgYWxsIG9mIHdoaWNoIGFyZQogaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBEaXN0dXRpbHM6CkBAIC0zNTQsNyArMzU1LDcgQEAKIHdvdWxkIGNyZWF0ZSBhIDY0Yml0IGluc3RhbGxhdGlvbiBleGVjdXRhYmxlIG9uIHlvdXIgMzJiaXQgdmVyc2lvbiBvZiBXaW5kb3dzLgogCiBUbyBjcm9zcy1jb21waWxlLCB5b3UgbXVzdCBkb3dubG9hZCB0aGUgUHl0aG9uIHNvdXJjZSBjb2RlIGFuZCBjcm9zcy1jb21waWxlCi1QeXRob24gaXRzZWxmIGZvciB0aGUgcGxhdGZvcm0geW91IGFyZSB0YXJnZXR0aW5nIC0gaXQgaXMgbm90IHBvc3NpYmxlIGZyb20gYQorUHl0aG9uIGl0c2VsZiBmb3IgdGhlIHBsYXRmb3JtIHlvdSBhcmUgdGFyZ2V0aW5nIC0gaXQgaXMgbm90IHBvc3NpYmxlIGZyb20gYQogYmluYXJ5IGluc3RhbGxhdGlvbiBvZiBQeXRob24gKGFzIHRoZSAubGliIGV0YyBmaWxlIGZvciBvdGhlciBwbGF0Zm9ybXMgYXJlCiBub3QgaW5jbHVkZWQuKSAgSW4gcHJhY3RpY2UsIHRoaXMgbWVhbnMgdGhlIHVzZXIgb2YgYSAzMiBiaXQgb3BlcmF0aW5nCiBzeXN0ZW0gd2lsbCBuZWVkIHRvIHVzZSBWaXN1YWwgU3R1ZGlvIDIwMDggdG8gb3BlbiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9kaXN0dXRpbHMvY29uZmlnZmlsZS5yc3QgYi9Eb2MvZGlzdHV0aWxzL2NvbmZpZ2ZpbGUucnN0CmluZGV4IGFjNzk2NzEuLjhmYWZmZTYgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvY29uZmlnZmlsZS5yc3QKKysrIGIvRG9jL2Rpc3R1dGlscy9jb25maWdmaWxlLnJzdApAQCAtNjcsNyArNjcsNyBAQAogICAgWy4uLl0KIAogTm90ZSB0aGF0IGFuIG9wdGlvbiBzcGVsbGVkIDpvcHRpb246YC0tZm9vLWJhcmAgb24gdGhlIGNvbW1hbmQtbGluZSAgaXMgc3BlbGxlZAotOm9wdGlvbjpgZm9vX2JhcmAgaW4gY29uZmlndXJhdGlvbiBmaWxlcy4KK2BgZm9vX2JhcmBgIGluIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAKIC4uIF9kaXN0dXRpbHMtYnVpbGQtZXh0LWlucGxhY2U6CiAKQEAgLTExNCw3ICsxMTQsNyBAQAogICAgICAgICAgICAgICAgZG9jLwogICAgICAgICAgICAgICAgZXhhbXBsZXMvCiAKLU5vdGUgdGhhdCB0aGUgOm9wdGlvbjpgZG9jX2ZpbGVzYCBvcHRpb24gaXMgc2ltcGx5IGEgd2hpdGVzcGFjZS1zZXBhcmF0ZWQgc3RyaW5nCitOb3RlIHRoYXQgdGhlIGBgZG9jX2ZpbGVzYGAgb3B0aW9uIGlzIHNpbXBseSBhIHdoaXRlc3BhY2Utc2VwYXJhdGVkIHN0cmluZwogc3BsaXQgYWNyb3NzIG11bHRpcGxlIGxpbmVzIGZvciByZWFkYWJpbGl0eS4KIAogCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL2V4YW1wbGVzLnJzdCBiL0RvYy9kaXN0dXRpbHMvZXhhbXBsZXMucnN0CmluZGV4IDVlYjY1NGEuLmFmOTEyNWEgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvZXhhbXBsZXMucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvZXhhbXBsZXMucnN0CkBAIC0xMSw3ICsxMSw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgRGlzdHV0aWxzIENvb2tib29rIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vRGlzdHV0aWxzL0Nvb2tib29rPmBfCisgICBgRGlzdHV0aWxzIENvb2tib29rIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL0Rpc3R1dGlscy9Db29rYm9vaz5gXwogICAgICAgQ29sbGVjdGlvbiBvZiByZWNpcGVzIHNob3dpbmcgaG93IHRvIGFjaGlldmUgbW9yZSBjb250cm9sIG92ZXIgZGlzdHV0aWxzLgogCiAKQEAgLTIyLDcgKzIyLDcgQEAKIAogSWYgeW91J3JlIGp1c3QgZGlzdHJpYnV0aW5nIGEgY291cGxlIG9mIG1vZHVsZXMsIGVzcGVjaWFsbHkgaWYgdGhleSBkb24ndCBsaXZlCiBpbiBhIHBhcnRpY3VsYXIgcGFja2FnZSwgeW91IGNhbiBzcGVjaWZ5IHRoZW0gaW5kaXZpZHVhbGx5IHVzaW5nIHRoZQotOm9wdGlvbjpgcHlfbW9kdWxlc2Agb3B0aW9uIGluIHRoZSBzZXR1cCBzY3JpcHQuCitgYHB5X21vZHVsZXNgYCBvcHRpb24gaW4gdGhlIHNldHVwIHNjcmlwdC4KIAogSW4gdGhlIHNpbXBsZXN0IGNhc2UsIHlvdSdsbCBoYXZlIHR3byBmaWxlcyB0byB3b3JyeSBhYm91dDogYSBzZXR1cCBzY3JpcHQgYW5kCiB0aGUgc2luZ2xlIG1vZHVsZSB5b3UncmUgZGlzdHJpYnV0aW5nLCA6ZmlsZTpgZm9vLnB5YCBpbiB0aGlzIGV4YW1wbGU6OgpAQCAtNDEsMTIgKzQxLDEyIEBACiAgICAgICAgICApCiAKIE5vdGUgdGhhdCB0aGUgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGlzIHNwZWNpZmllZCBpbmRlcGVuZGVudGx5IHdpdGggdGhlCi06b3B0aW9uOmBuYW1lYCBvcHRpb24sIGFuZCB0aGVyZSdzIG5vIHJ1bGUgdGhhdCBzYXlzIGl0IGhhcyB0byBiZSB0aGUgc2FtZSBhcworYGBuYW1lYGAgb3B0aW9uLCBhbmQgdGhlcmUncyBubyBydWxlIHRoYXQgc2F5cyBpdCBoYXMgdG8gYmUgdGhlIHNhbWUgYXMKIHRoZSBuYW1lIG9mIHRoZSBzb2xlIG1vZHVsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIChhbHRob3VnaCB0aGF0J3MgcHJvYmFibHkgYSBnb29kCiBjb252ZW50aW9uIHRvIGZvbGxvdykuICBIb3dldmVyLCB0aGUgZGlzdHJpYnV0aW9uIG5hbWUgaXMgdXNlZCB0byBnZW5lcmF0ZQogZmlsZW5hbWVzLCBzbyB5b3Ugc2hvdWxkIHN0aWNrIHRvIGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZXMsIGFuZCBoeXBoZW5zLgogCi1TaW5jZSA6b3B0aW9uOmBweV9tb2R1bGVzYCBpcyBhIGxpc3QsIHlvdSBjYW4gb2YgY291cnNlIHNwZWNpZnkgbXVsdGlwbGUKK1NpbmNlIGBgcHlfbW9kdWxlc2BgIGlzIGEgbGlzdCwgeW91IGNhbiBvZiBjb3Vyc2Ugc3BlY2lmeSBtdWx0aXBsZQogbW9kdWxlcywgZWcuIGlmIHlvdSdyZSBkaXN0cmlidXRpbmcgbW9kdWxlcyA6bW9kOmBmb29gIGFuZCA6bW9kOmBiYXJgLCB5b3VyCiBzZXR1cCBtaWdodCBsb29rIGxpa2UgdGhpczo6CiAKQEAgLTEzMCw3ICsxMzAsNyBAQAogICAgICAgICAgKQogCiBJZiB5b3Ugd2FudCB0byBwdXQgbW9kdWxlcyBpbiBkaXJlY3RvcmllcyBub3QgbmFtZWQgZm9yIHRoZWlyIHBhY2thZ2UsIHRoZW4geW91Ci1uZWVkIHRvIHVzZSB0aGUgOm9wdGlvbjpgcGFja2FnZV9kaXJgIG9wdGlvbiBhZ2Fpbi4gIEZvciBleGFtcGxlLCBpZiB0aGUKK25lZWQgdG8gdXNlIHRoZSBgYHBhY2thZ2VfZGlyYGAgb3B0aW9uIGFnYWluLiAgRm9yIGV4YW1wbGUsIGlmIHRoZQogOmZpbGU6YHNyY2AgZGlyZWN0b3J5IGhvbGRzIG1vZHVsZXMgaW4gdGhlIDptb2Q6YGZvb2JhcmAgcGFja2FnZTo6CiAKICAgIDxyb290Pi8KQEAgLTE2OSw4ICsxNjksOCBAQAogCiAoVGhlIGVtcHR5IHN0cmluZyBhbHNvIHN0YW5kcyBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LikKIAotSWYgeW91IGhhdmUgc3ViLXBhY2thZ2VzLCB0aGV5IG11c3QgYmUgZXhwbGljaXRseSBsaXN0ZWQgaW4gOm9wdGlvbjpgcGFja2FnZXNgLAotYnV0IGFueSBlbnRyaWVzIGluIDpvcHRpb246YHBhY2thZ2VfZGlyYCBhdXRvbWF0aWNhbGx5IGV4dGVuZCB0byBzdWItcGFja2FnZXMuCitJZiB5b3UgaGF2ZSBzdWItcGFja2FnZXMsIHRoZXkgbXVzdCBiZSBleHBsaWNpdGx5IGxpc3RlZCBpbiBgYHBhY2thZ2VzYGAsCitidXQgYW55IGVudHJpZXMgaW4gYGBwYWNrYWdlX2RpcmBgIGF1dG9tYXRpY2FsbHkgZXh0ZW5kIHRvIHN1Yi1wYWNrYWdlcy4KIChJbiBvdGhlciB3b3JkcywgdGhlIERpc3R1dGlscyBkb2VzICpub3QqIHNjYW4geW91ciBzb3VyY2UgdHJlZSwgdHJ5aW5nIHRvCiBmaWd1cmUgb3V0IHdoaWNoIGRpcmVjdG9yaWVzIGNvcnJlc3BvbmQgdG8gUHl0aG9uIHBhY2thZ2VzIGJ5IGxvb2tpbmcgZm9yCiA6ZmlsZTpgX19pbml0X18ucHlgIGZpbGVzLikgIFRodXMsIGlmIHRoZSBkZWZhdWx0IGxheW91dCBncm93cyBhIHN1Yi1wYWNrYWdlOjoKQEAgLTE5MywxNyArMTkzLDE0IEBACiAgICAgICAgICBwYWNrYWdlcz1bJ2Zvb2JhcicsICdmb29iYXIuc3ViZm9vJ10sCiAgICAgICAgICApCiAKLShBZ2FpbiwgdGhlIGVtcHR5IHN0cmluZyBpbiA6b3B0aW9uOmBwYWNrYWdlX2RpcmAgc3RhbmRzIGZvciB0aGUgY3VycmVudAotZGlyZWN0b3J5LikKLQogCiAuLiBfc2luZ2xlLWV4dDoKIAogU2luZ2xlIGV4dGVuc2lvbiBtb2R1bGUKID09PT09PT09PT09PT09PT09PT09PT09CiAKLUV4dGVuc2lvbiBtb2R1bGVzIGFyZSBzcGVjaWZpZWQgdXNpbmcgdGhlIDpvcHRpb246YGV4dF9tb2R1bGVzYCBvcHRpb24uCi06b3B0aW9uOmBwYWNrYWdlX2RpcmAgaGFzIG5vIGVmZmVjdCBvbiB3aGVyZSBleHRlbnNpb24gc291cmNlIGZpbGVzIGFyZSBmb3VuZDsKK0V4dGVuc2lvbiBtb2R1bGVzIGFyZSBzcGVjaWZpZWQgdXNpbmcgdGhlIGBgZXh0X21vZHVsZXNgYCBvcHRpb24uCitgYHBhY2thZ2VfZGlyYGAgaGFzIG5vIGVmZmVjdCBvbiB3aGVyZSBleHRlbnNpb24gc291cmNlIGZpbGVzIGFyZSBmb3VuZDsKIGl0IG9ubHkgYWZmZWN0cyB0aGUgc291cmNlIGZvciBwdXJlIFB5dGhvbiBtb2R1bGVzLiAgVGhlIHNpbXBsZXN0ICBjYXNlLCBhCiBzaW5nbGUgZXh0ZW5zaW9uIG1vZHVsZSBpbiBhIHNpbmdsZSBDIHNvdXJjZSBmaWxlLCBpczo6CiAKQEAgLTI2Nyw3ICsyNjQsNyBAQAogCiAgICAgZGVzYyA9ICIiIlwKICAgICBNeSBkZXNjcmlwdGlvbgotICAgID09PT09PT09PT09PT0KKyAgICA9PT09PT09PT09PT09PQogCiAgICAgVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZm9vYmFyYGAgcGFja2FnZS4KICAgICAiIiIKQEAgLTI4OSwyMCArMjg2LDIwIEBACiAKIFRoZSA6ZnVuYzpgZGlzdHV0aWxzLmNvcmUuc2V0dXBgIGZ1bmN0aW9uIHByb3ZpZGVzIGEgY29tbWFuZC1saW5lIGludGVyZmFjZQogdGhhdCBhbGxvd3MgeW91IHRvIHF1ZXJ5IHRoZSBtZXRhZGF0YSBmaWVsZHMgb2YgYSBwcm9qZWN0IHRocm91Z2ggdGhlCi1gc2V0dXAucHlgIHNjcmlwdCBvZiBhIGdpdmVuIHByb2plY3Q6OgorYGBzZXR1cC5weWBgIHNjcmlwdCBvZiBhIGdpdmVuIHByb2plY3Q6OgogCiAgICAgJCBweXRob24gc2V0dXAucHkgLS1uYW1lCiAgICAgZGlzdHJpYnV0ZQogCi1UaGlzIGNhbGwgcmVhZHMgdGhlIGBuYW1lYCBtZXRhZGF0YSBieSBydW5uaW5nIHRoZQorVGhpcyBjYWxsIHJlYWRzIHRoZSBgYG5hbWVgYCBtZXRhZGF0YSBieSBydW5uaW5nIHRoZQogOmZ1bmM6YGRpc3R1dGlscy5jb3JlLnNldHVwYCAgZnVuY3Rpb24uIEFsdGhvdWdoLCB3aGVuIGEgc291cmNlIG9yIGJpbmFyeQogZGlzdHJpYnV0aW9uIGlzIGNyZWF0ZWQgd2l0aCBEaXN0dXRpbHMsIHRoZSBtZXRhZGF0YSBmaWVsZHMgYXJlIHdyaXR0ZW4KIGluIGEgc3RhdGljIGZpbGUgY2FsbGVkIDpmaWxlOmBQS0ctSU5GT2AuIFdoZW4gYSBEaXN0dXRpbHMtYmFzZWQgcHJvamVjdCBpcwogaW5zdGFsbGVkIGluIFB5dGhvbiwgdGhlIDpmaWxlOmBQS0ctSU5GT2AgZmlsZSBpcyBjb3BpZWQgYWxvbmdzaWRlIHRoZSBtb2R1bGVzCiBhbmQgcGFja2FnZXMgb2YgdGhlIGRpc3RyaWJ1dGlvbiB1bmRlciA6ZmlsZTpgTkFNRS1WRVJTSU9OLXB5WC5YLmVnZy1pbmZvYCwKLXdoZXJlIGBOQU1FYCBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCwgYFZFUlNJT05gIGl0cyB2ZXJzaW9uIGFzIGRlZmluZWQKLWluIHRoZSBNZXRhZGF0YSwgYW5kIGBweVguWGAgdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG9mIFB5dGhvbiBsaWtlCi1gMi43YCBvciBgMy4yYC4KK3doZXJlIGBgTkFNRWBgIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0LCBgYFZFUlNJT05gYCBpdHMgdmVyc2lvbiBhcyBkZWZpbmVkCitpbiB0aGUgTWV0YWRhdGEsIGFuZCBgYHB5WC5YYGAgdGhlIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG9mIFB5dGhvbiBsaWtlCitgYDIuN2BgIG9yIGBgMy4yYGAuCiAKIFlvdSBjYW4gcmVhZCBiYWNrIHRoaXMgc3RhdGljIGZpbGUsIGJ5IHVzaW5nIHRoZQogOmNsYXNzOmBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb25NZXRhZGF0YWAgY2xhc3MgYW5kIGl0cwpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9leHRlbmRpbmcucnN0IGIvRG9jL2Rpc3R1dGlscy9leHRlbmRpbmcucnN0CmluZGV4IDVhNzBkMDMuLjUxMzljNmQgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvZXh0ZW5kaW5nLnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2V4dGVuZGluZy5yc3QKQEAgLTYxLDcgKzYxLDcgQEAKIHJlcXVpcmluZyBtb2RpZmljYXRpb25zIHRvIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uLiAgVGhpcyBpcyBleHBlY3RlZCB0byBhbGxvdwogdGhpcmQtcGFydHkgZXh0ZW5zaW9ucyB0byBwcm92aWRlIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgcGFja2FnaW5nIHN5c3RlbXMsIGJ1dAogdGhlIGNvbW1hbmRzIGNhbiBiZSB1c2VkIGZvciBhbnl0aGluZyBkaXN0dXRpbHMgY29tbWFuZHMgY2FuIGJlIHVzZWQgZm9yLiAgQSBuZXcKLWNvbmZpZ3VyYXRpb24gb3B0aW9uLCA6b3B0aW9uOmBjb21tYW5kX3BhY2thZ2VzYCAoY29tbWFuZC1saW5lIG9wdGlvbgorY29uZmlndXJhdGlvbiBvcHRpb24sIGBgY29tbWFuZF9wYWNrYWdlc2BgIChjb21tYW5kLWxpbmUgb3B0aW9uCiA6b3B0aW9uOmAtLWNvbW1hbmQtcGFja2FnZXNgKSwgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIHBhY2thZ2VzIHRvIGJlCiBzZWFyY2hlZCBmb3IgbW9kdWxlcyBpbXBsZW1lbnRpbmcgY29tbWFuZHMuICBMaWtlIGFsbCBkaXN0dXRpbHMgb3B0aW9ucywgdGhpcwogY2FuIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIGEgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyBvcHRpb24KQEAgLTc1LDcgKzc1LDcgQEAKIHBhY2thZ2VzIHNlYXJjaGVkIGZvciBjb21tYW5kIGltcGxlbWVudGF0aW9uczsgbXVsdGlwbGUgcGFja2FnZSBuYW1lcyBzaG91bGQgYmUKIHNlcGFyYXRlZCBieSBjb21tYXMuICBXaGVuIG5vdCBzcGVjaWZpZWQsIHRoZSBzZWFyY2ggaXMgb25seSBwZXJmb3JtZWQgaW4gdGhlCiA6bW9kOmBkaXN0dXRpbHMuY29tbWFuZGAgcGFja2FnZS4gIFdoZW4gOmZpbGU6YHNldHVwLnB5YCBpcyBydW4gd2l0aCB0aGUgb3B0aW9uCi06b3B0aW9uOmAtLWNvbW1hbmQtcGFja2FnZXNgIDpvcHRpb246YGRpc3RjbWRzLGJ1aWxkY21kc2AsIGhvd2V2ZXIsIHRoZSBwYWNrYWdlcworYGAtLWNvbW1hbmQtcGFja2FnZXMgZGlzdGNtZHMsYnVpbGRjbWRzYGAsIGhvd2V2ZXIsIHRoZSBwYWNrYWdlcwogOm1vZDpgZGlzdHV0aWxzLmNvbW1hbmRgLCA6bW9kOmBkaXN0Y21kc2AsIGFuZCA6bW9kOmBidWlsZGNtZHNgIHdpbGwgYmUgc2VhcmNoZWQKIGluIHRoYXQgb3JkZXIuICBOZXcgY29tbWFuZHMgYXJlIGV4cGVjdGVkIHRvIGJlIGltcGxlbWVudGVkIGluIG1vZHVsZXMgb2YgdGhlCiBzYW1lIG5hbWUgYXMgdGhlIGNvbW1hbmQgYnkgY2xhc3NlcyBzaGFyaW5nIHRoZSBzYW1lIG5hbWUuICBHaXZlbiB0aGUgZXhhbXBsZQpkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9pbmRleC5yc3QgYi9Eb2MvZGlzdHV0aWxzL2luZGV4LnJzdAppbmRleCAxYTZmMDRjLi4zMzVmODA0IDEwMDY0NAotLS0gYS9Eb2MvZGlzdHV0aWxzL2luZGV4LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL2luZGV4LnJzdApAQCAtMSw4ICsxLDggQEAKIC4uIF9kaXN0dXRpbHMtaW5kZXg6CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgRGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgIERpc3RyaWJ1dGluZyBQeXRob24gTW9kdWxlcyAoTGVnYWN5IHZlcnNpb24pCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKIDpBdXRob3JzOiBHcmVnIFdhcmQsIEFudGhvbnkgQmF4dGVyCiA6RW1haWw6IGRpc3R1dGlscy1zaWdAcHl0aG9uLm9yZwpAQCAtMTUsMTAgKzE1LDkgQEAKIC4uIG5vdGU6OgogCiAgICBUaGlzIGd1aWRlIG9ubHkgY292ZXJzIHRoZSBiYXNpYyB0b29scyBmb3IgYnVpbGRpbmcgYW5kIGRpc3RyaWJ1dGluZwotICAgZXh0ZW5zaW9ucyB0aGF0IGFyZSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoaXMgdmVyc2lvbiBvZiBQeXRob24uIFRoaXJkCi0gICBwYXJ0eSB0b29scyBvZmZlciBlYXNpZXIgdG8gdXNlIGFuZCBtb3JlIHNlY3VyZSBhbHRlcm5hdGl2ZXMuIFJlZmVyIHRvIHRoZQotICAgYHF1aWNrIHJlY29tbWVuZGF0aW9ucyBzZWN0aW9uCi0gICA8aHR0cHM6Ly9weXRob24tcGFja2FnaW5nLXVzZXItZ3VpZGUucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC9jdXJyZW50Lmh0bWw+YF9fCisgICBleHRlbnNpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbi4gVGhpcmQgcGFydHkKKyAgIHRvb2xzIG9mZmVyIGVhc2llciB0byB1c2UgYW5kIG1vcmUgc2VjdXJlIGFsdGVybmF0aXZlcy4gUmVmZXIgdG8gdGhlIGBxdWljaworICAgcmVjb21tZW5kYXRpb25zIHNlY3Rpb24gPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2N1cnJlbnQvPmBfXwogICAgaW4gdGhlIFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5yc3QgYi9Eb2MvZGlzdHV0aWxzL3BhY2thZ2VpbmRleC5yc3QKaW5kZXggZGFlOGM1NC4uMmQ3ZGFlZiAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9wYWNrYWdlaW5kZXgucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvcGFja2FnZWluZGV4LnJzdApAQCAtOCwyNiArOCw1NyBAQAogVGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4IChQeVBJKQogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1UaGUgYFB5dGhvbiBQYWNrYWdlIEluZGV4IChQeVBJKWBfIGhvbGRzIDpyZWY6YG1ldGEtZGF0YSA8bWV0YS1kYXRhPmAKK1RoZSBgUHl0aG9uIFBhY2thZ2UgSW5kZXggKFB5UEkpYF8gc3RvcmVzIDpyZWY6YG1ldGEtZGF0YSA8bWV0YS1kYXRhPmAKIGRlc2NyaWJpbmcgZGlzdHJpYnV0aW9ucyBwYWNrYWdlZCB3aXRoIGRpc3R1dGlscywgYXMgd2VsbCBhcyBwYWNrYWdlIGRhdGEgbGlrZQotZGlzdHJpYnV0aW9uIGZpbGVzIGlmIHRoZSBwYWNrYWdlIGF1dGhvciB3aXNoZXMuCitkaXN0cmlidXRpb24gZmlsZXMgaWYgYSBwYWNrYWdlIGF1dGhvciB3aXNoZXMuCisKK0Rpc3R1dGlscyBwcm92aWRlcyB0aGUgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBhbmQgOmNvbW1hbmQ6YHVwbG9hZGAgY29tbWFuZHMgZm9yCitwdXNoaW5nIG1ldGEtZGF0YSBhbmQgZGlzdHJpYnV0aW9uIGZpbGVzIHRvIFB5UEksIHJlc3BlY3RpdmVseS4gIFNlZQorOnJlZjpgcGFja2FnZS1jb21tYW5kc2AgZm9yIGluZm9ybWF0aW9uIG9uIHRoZXNlIGNvbW1hbmRzLgorCisKK1B5UEkgb3ZlcnZpZXcKKz09PT09PT09PT09PT0KKworUHlQSSBsZXRzIHlvdSBzdWJtaXQgYW55IG51bWJlciBvZiB2ZXJzaW9ucyBvZiB5b3VyIGRpc3RyaWJ1dGlvbiB0byB0aGUgaW5kZXguCitJZiB5b3UgYWx0ZXIgdGhlIG1ldGEtZGF0YSBmb3IgYSBwYXJ0aWN1bGFyIHZlcnNpb24sIHlvdSBjYW4gc3VibWl0IGl0IGFnYWluCithbmQgdGhlIGluZGV4IHdpbGwgYmUgdXBkYXRlZC4KKworUHlQSSBob2xkcyBhIHJlY29yZCBmb3IgZWFjaCAobmFtZSwgdmVyc2lvbikgY29tYmluYXRpb24gc3VibWl0dGVkLiAgVGhlIGZpcnN0Cit1c2VyIHRvIHN1Ym1pdCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBuYW1lIGlzIGRlc2lnbmF0ZWQgdGhlIE93bmVyIG9mIHRoYXQKK25hbWUuICBDaGFuZ2VzIGNhbiBiZSBzdWJtaXR0ZWQgdGhyb3VnaCB0aGUgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBjb21tYW5kIG9yCit0aHJvdWdoIHRoZSB3ZWIgaW50ZXJmYWNlLiAgT3duZXJzIGNhbiBkZXNpZ25hdGUgb3RoZXIgdXNlcnMgYXMgT3duZXJzIG9yCitNYWludGFpbmVycy4gIE1haW50YWluZXJzIGNhbiBlZGl0IHRoZSBwYWNrYWdlIGluZm9ybWF0aW9uLCBidXQgbm90IGRlc2lnbmF0ZQorbmV3IE93bmVycyBvciBNYWludGFpbmVycy4KKworQnkgZGVmYXVsdCBQeVBJIGRpc3BsYXlzIG9ubHkgdGhlIG5ld2VzdCB2ZXJzaW9uIG9mIGEgZ2l2ZW4gcGFja2FnZS4gIFRoZSB3ZWIKK2ludGVyZmFjZSBsZXRzIG9uZSBjaGFuZ2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGFuZCBtYW51YWxseSBzZWxlY3Qgd2hpY2gKK3ZlcnNpb25zIHRvIGRpc3BsYXkgYW5kIGhpZGUuCisKK0ZvciBlYWNoIHZlcnNpb24sIFB5UEkgZGlzcGxheXMgYSBob21lIHBhZ2UuICBUaGUgaG9tZSBwYWdlIGlzIGNyZWF0ZWQgZnJvbQordGhlIGBgbG9uZ19kZXNjcmlwdGlvbmBgIHdoaWNoIGNhbiBiZSBzdWJtaXR0ZWQgdmlhIHRoZSA6Y29tbWFuZDpgcmVnaXN0ZXJgCitjb21tYW5kLiAgU2VlIDpyZWY6YHBhY2thZ2UtZGlzcGxheWAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworLi4gX3BhY2thZ2UtY29tbWFuZHM6CisKK0Rpc3R1dGlscyBjb21tYW5kcworPT09PT09PT09PT09PT09PT09CiAKIERpc3R1dGlscyBleHBvc2VzIHR3byBjb21tYW5kcyBmb3Igc3VibWl0dGluZyBwYWNrYWdlIGRhdGEgdG8gUHlQSTogdGhlCiA6cmVmOmByZWdpc3RlciA8cGFja2FnZS1yZWdpc3Rlcj5gIGNvbW1hbmQgZm9yIHN1Ym1pdHRpbmcgbWV0YS1kYXRhIHRvIFB5UEkKIGFuZCB0aGUgOnJlZjpgdXBsb2FkIDxwYWNrYWdlLXVwbG9hZD5gIGNvbW1hbmQgZm9yIHN1Ym1pdHRpbmcgZGlzdHJpYnV0aW9uCi1maWxlcy4gIEJvdGggY29tbWFuZHMgcmVhZCBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSBhIHNwZWNpYWwgZmlsZSBjYWxsZWQgdGhlCi06cmVmOmAucHlwaXJjIGZpbGUgPHB5cGlyYz5gLiAgUHlQSSA6cmVmOmBkaXNwbGF5cyBhIGhvbWUgcGFnZQotPHBhY2thZ2UtZGlzcGxheT5gIGZvciBlYWNoIHBhY2thZ2UgY3JlYXRlZCBmcm9tIHRoZSBgYGxvbmdfZGVzY3JpcHRpb25gYAotc3VibWl0dGVkIGJ5IHRoZSA6Y29tbWFuZDpgcmVnaXN0ZXJgIGNvbW1hbmQuCitmaWxlcy4gIEJvdGggY29tbWFuZHMgcmVhZCBjb25maWd1cmF0aW9uIGRhdGEgZnJvbSBhIHNwZWNpYWwgZmlsZSBjYWxsZWQgYQorOnJlZjpgLnB5cGlyYyBmaWxlIDxweXBpcmM+YC4KIAogCiAuLiBfcGFja2FnZS1yZWdpc3RlcjoKIAotUmVnaXN0ZXJpbmcgUGFja2FnZXMKLT09PT09PT09PT09PT09PT09PT09CitUaGUgYGByZWdpc3RlcmBgIGNvbW1hbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgZGlzdHV0aWxzIGNvbW1hbmQgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBpcyB1c2VkIHRvIHN1Ym1pdCB5b3VyIGRpc3RyaWJ1dGlvbidzCi1tZXRhLWRhdGEgdG8gdGhlIGluZGV4LiBJdCBpcyBpbnZva2VkIGFzIGZvbGxvd3M6OgorbWV0YS1kYXRhIHRvIGFuIGluZGV4IHNlcnZlci4gSXQgaXMgaW52b2tlZCBhcyBmb2xsb3dzOjoKIAogICAgIHB5dGhvbiBzZXR1cC5weSByZWdpc3RlcgogCkBAIC00Miw3ICs3Myw4IEBACiAgICAgWW91ciBzZWxlY3Rpb24gW2RlZmF1bHQgMV06CiAKIE5vdGU6IGlmIHlvdXIgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGFyZSBzYXZlZCBsb2NhbGx5LCB5b3Ugd2lsbCBub3Qgc2VlIHRoaXMKLW1lbnUuCittZW51LiAgQWxzbywgcmVmZXIgdG8gOnJlZjpgcHlwaXJjYCBmb3IgaG93IHRvIHN0b3JlIHlvdXIgY3JlZGVudGlhbHMgaW4gYQorOmZpbGU6YC5weXBpcmNgIGZpbGUuCiAKIElmIHlvdSBoYXZlIG5vdCByZWdpc3RlcmVkIHdpdGggUHlQSSwgdGhlbiB5b3Ugd2lsbCBuZWVkIHRvIGRvIHNvIG5vdy4gWW91CiBzaG91bGQgY2hvb3NlIG9wdGlvbiAyLCBhbmQgZW50ZXIgeW91ciBkZXRhaWxzIGFzIHJlcXVpcmVkLiBTb29uIGFmdGVyCkBAIC01MywyNiArODUsMTMgQEAKIHByb21wdGVkIGZvciB5b3VyIFB5UEkgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLCBhbmQgOmNvbW1hbmQ6YHJlZ2lzdGVyYCB3aWxsIHRoZW4KIHN1Ym1pdCB5b3VyIG1ldGEtZGF0YSB0byB0aGUgaW5kZXguCiAKLVlvdSBtYXkgc3VibWl0IGFueSBudW1iZXIgb2YgdmVyc2lvbnMgb2YgeW91ciBkaXN0cmlidXRpb24gdG8gdGhlIGluZGV4LiBJZiB5b3UKLWFsdGVyIHRoZSBtZXRhLWRhdGEgZm9yIGEgcGFydGljdWxhciB2ZXJzaW9uLCB5b3UgbWF5IHN1Ym1pdCBpdCBhZ2FpbiBhbmQgdGhlCi1pbmRleCB3aWxsIGJlIHVwZGF0ZWQuCi0KLVB5UEkgaG9sZHMgYSByZWNvcmQgZm9yIGVhY2ggKG5hbWUsIHZlcnNpb24pIGNvbWJpbmF0aW9uIHN1Ym1pdHRlZC4gVGhlIGZpcnN0Ci11c2VyIHRvIHN1Ym1pdCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBuYW1lIGlzIGRlc2lnbmF0ZWQgdGhlIE93bmVyIG9mIHRoYXQKLW5hbWUuIFRoZXkgbWF5IHN1Ym1pdCBjaGFuZ2VzIHRocm91Z2ggdGhlIDpjb21tYW5kOmByZWdpc3RlcmAgY29tbWFuZCBvciB0aHJvdWdoCi10aGUgd2ViIGludGVyZmFjZS4gVGhleSBtYXkgYWxzbyBkZXNpZ25hdGUgb3RoZXIgdXNlcnMgYXMgT3duZXJzIG9yIE1haW50YWluZXJzLgotTWFpbnRhaW5lcnMgbWF5IGVkaXQgdGhlIHBhY2thZ2UgaW5mb3JtYXRpb24sIGJ1dCBub3QgZGVzaWduYXRlIG90aGVyIE93bmVycyBvcgotTWFpbnRhaW5lcnMuCi0KLUJ5IGRlZmF1bHQgUHlQSSBkaXNwbGF5cyBvbmx5IHRoZSBuZXdlc3QgdmVyc2lvbiBvZiBhIGdpdmVuIHBhY2thZ2UuIFRoZSB3ZWIKLWludGVyZmFjZSBsZXRzIG9uZSBjaGFuZ2UgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGFuZCBtYW51YWxseSBzZWxlY3Qgd2hpY2gKLXZlcnNpb25zIHRvIGRpc3BsYXkgYW5kIGhpZGUuCitTZWUgOnJlZjpgcGFja2FnZS1jbWRvcHRpb25zYCBmb3Igb3B0aW9ucyB0byB0aGUgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBjb21tYW5kLgogCiAKIC4uIF9wYWNrYWdlLXVwbG9hZDoKIAotVXBsb2FkaW5nIFBhY2thZ2VzCi09PT09PT09PT09PT09PT09PT0KK1RoZSBgYHVwbG9hZGBgIGNvbW1hbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIGRpc3R1dGlscyBjb21tYW5kIDpjb21tYW5kOmB1cGxvYWRgIHB1c2hlcyB0aGUgZGlzdHJpYnV0aW9uIGZpbGVzIHRvIFB5UEkuCiAKQEAgLTg2LDI5ICsxMDUsNDIgQEAKIGludm9jYXRpb24gb2YgOmZpbGU6YHNldHVwLnB5YCwgYnV0IHRoYXQgb25seSBkaXN0cmlidXRpb25zIG5hbWVkIG9uIHRoZSBjb21tYW5kCiBsaW5lIGZvciB0aGUgaW52b2NhdGlvbiBpbmNsdWRpbmcgdGhlIDpjb21tYW5kOmB1cGxvYWRgIGNvbW1hbmQgYXJlIHVwbG9hZGVkLgogCi1UaGUgOmNvbW1hbmQ6YHVwbG9hZGAgY29tbWFuZCB1c2VzIHRoZSB1c2VybmFtZSwgcGFzc3dvcmQsIGFuZCByZXBvc2l0b3J5IFVSTAotZnJvbSB0aGUgOmZpbGU6YCRIT01FLy5weXBpcmNgIGZpbGUgKHNlZSBzZWN0aW9uIDpyZWY6YHB5cGlyY2AgZm9yIG1vcmUgb24gdGhpcwotZmlsZSkuIElmIGEgOmNvbW1hbmQ6YHJlZ2lzdGVyYCBjb21tYW5kIHdhcyBwcmV2aW91c2x5IGNhbGxlZCBpbiB0aGUgc2FtZSBjb21tYW5kLAorSWYgYSA6Y29tbWFuZDpgcmVnaXN0ZXJgIGNvbW1hbmQgd2FzIHByZXZpb3VzbHkgY2FsbGVkIGluIHRoZSBzYW1lIGNvbW1hbmQsCiBhbmQgaWYgdGhlIHBhc3N3b3JkIHdhcyBlbnRlcmVkIGluIHRoZSBwcm9tcHQsIDpjb21tYW5kOmB1cGxvYWRgIHdpbGwgcmV1c2UgdGhlCi1lbnRlcmVkIHBhc3N3b3JkLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gc3RvcmUgYSBjbGVhciB0ZXh0Ci1wYXNzd29yZCBpbiB0aGUgOmZpbGU6YCRIT01FLy5weXBpcmNgIGZpbGUuCi0KLVlvdSBjYW4gc3BlY2lmeSBhbm90aGVyIFB5UEkgc2VydmVyIHdpdGggdGhlIGBgLS1yZXBvc2l0b3J5PXVybGBgIG9wdGlvbjo6Ci0KLSAgICBweXRob24gc2V0dXAucHkgc2Rpc3QgYmRpc3Rfd2luaW5zdCB1cGxvYWQgLXIgaHR0cDovL2V4YW1wbGUuY29tL3B5cGkKLQotU2VlIHNlY3Rpb24gOnJlZjpgcHlwaXJjYCBmb3IgbW9yZSBvbiBkZWZpbmluZyBzZXZlcmFsIHNlcnZlcnMuCitlbnRlcmVkIHBhc3N3b3JkLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IGRvIG5vdCB3YW50IHRvIHN0b3JlIGEgcGFzc3dvcmQgaW4KK2NsZWFyIHRleHQgaW4gYSA6ZmlsZTpgLnB5cGlyY2AgZmlsZS4KIAogWW91IGNhbiB1c2UgdGhlIGBgLS1zaWduYGAgb3B0aW9uIHRvIHRlbGwgOmNvbW1hbmQ6YHVwbG9hZGAgdG8gc2lnbiBlYWNoCiB1cGxvYWRlZCBmaWxlIHVzaW5nIEdQRyAoR05VIFByaXZhY3kgR3VhcmQpLiAgVGhlICA6cHJvZ3JhbTpgZ3BnYCBwcm9ncmFtIG11c3QKIGJlIGF2YWlsYWJsZSBmb3IgZXhlY3V0aW9uIG9uIHRoZSBzeXN0ZW0gOmVudnZhcjpgUEFUSGAuICBZb3UgY2FuIGFsc28gc3BlY2lmeQogd2hpY2gga2V5IHRvIHVzZSBmb3Igc2lnbmluZyB1c2luZyB0aGUgYGAtLWlkZW50aXR5PW5hbWVgYCBvcHRpb24uCiAKLU90aGVyIDpjb21tYW5kOmB1cGxvYWRgIG9wdGlvbnMgaW5jbHVkZSBgYC0tcmVwb3NpdG9yeT11cmxgYCBvcgotYGAtLXJlcG9zaXRvcnk9c2VjdGlvbmBgIHdoZXJlICp1cmwqIGlzIHRoZSB1cmwgb2YgdGhlIHNlcnZlciBhbmQKLSpzZWN0aW9uKiB0aGUgbmFtZSBvZiB0aGUgc2VjdGlvbiBpbiA6ZmlsZTpgJEhPTUUvLnB5cGlyY2AsIGFuZAotYGAtLXNob3ctcmVzcG9uc2VgYCAod2hpY2ggZGlzcGxheXMgdGhlIGZ1bGwgcmVzcG9uc2UgdGV4dCBmcm9tIHRoZSBQeVBJCi1zZXJ2ZXIgZm9yIGhlbHAgaW4gZGVidWdnaW5nIHVwbG9hZCBwcm9ibGVtcykuCitTZWUgOnJlZjpgcGFja2FnZS1jbWRvcHRpb25zYCBmb3IgYWRkaXRpb25hbCBvcHRpb25zIHRvIHRoZSA6Y29tbWFuZDpgdXBsb2FkYAorY29tbWFuZC4KKworCisuLiBfcGFja2FnZS1jbWRvcHRpb25zOgorCitBZGRpdGlvbmFsIGNvbW1hbmQgb3B0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyBvcHRpb25zIGNvbW1vbiB0byBib3RoIHRoZSA6Y29tbWFuZDpgcmVnaXN0ZXJgIGFuZAorOmNvbW1hbmQ6YHVwbG9hZGAgY29tbWFuZHMuCisKK1RoZSBgYC0tcmVwb3NpdG9yeWBgIG9yIGBgLXJgYCBvcHRpb24gbGV0cyB5b3Ugc3BlY2lmeSBhIFB5UEkgc2VydmVyCitkaWZmZXJlbnQgZnJvbSB0aGUgZGVmYXVsdC4gIEZvciBleGFtcGxlOjoKKworICAgIHB5dGhvbiBzZXR1cC5weSBzZGlzdCBiZGlzdF93aW5pbnN0IHVwbG9hZCAtciBodHRwczovL2V4YW1wbGUuY29tL3B5cGkKKworRm9yIGNvbnZlbmllbmNlLCBhIG5hbWUgY2FuIGJlIHVzZWQgaW4gcGxhY2Ugb2YgdGhlIFVSTCB3aGVuIHRoZQorOmZpbGU6YC5weXBpcmNgIGZpbGUgaXMgY29uZmlndXJlZCB0byBkbyBzby4gIEZvciBleGFtcGxlOjoKKworICAgIHB5dGhvbiBzZXR1cC5weSByZWdpc3RlciAtciBvdGhlcgorCitTZWUgOnJlZjpgcHlwaXJjYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBkZWZpbmluZyBhbHRlcm5hdGUgc2VydmVycy4KKworVGhlIGBgLS1zaG93LXJlc3BvbnNlYGAgb3B0aW9uIGRpc3BsYXlzIHRoZSBmdWxsIHJlc3BvbnNlIHRleHQgZnJvbSB0aGUgUHlQSQorc2VydmVyLCB3aGljaCBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmcgcHJvYmxlbXMgd2l0aCByZWdpc3RlcmluZyBhbmQgdXBsb2FkaW5nLgogCiAKIC4uIGluZGV4OjoKQEAgLTExNywxMCArMTQ5LDE0IEBACiAKIC4uIF9weXBpcmM6CiAKLVRoZSAucHlwaXJjIGZpbGUKLT09PT09PT09PT09PT09PT0KK1RoZSBgYC5weXBpcmNgYCBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgZm9ybWF0IG9mIHRoZSA6ZmlsZTpgLnB5cGlyY2AgZmlsZSBpcyBhcyBmb2xsb3dzOjoKK1RoZSA6Y29tbWFuZDpgcmVnaXN0ZXJgIGFuZCA6Y29tbWFuZDpgdXBsb2FkYCBjb21tYW5kcyBib3RoIGNoZWNrIGZvciB0aGUKK2V4aXN0ZW5jZSBvZiBhIDpmaWxlOmAucHlwaXJjYCBmaWxlIGF0IHRoZSBsb2NhdGlvbiA6ZmlsZTpgJEhPTUUvLnB5cGlyY2AuCitJZiB0aGlzIGZpbGUgZXhpc3RzLCB0aGUgY29tbWFuZCB1c2VzIHRoZSB1c2VybmFtZSwgcGFzc3dvcmQsIGFuZCByZXBvc2l0b3J5CitVUkwgY29uZmlndXJlZCBpbiB0aGUgZmlsZS4gIFRoZSBmb3JtYXQgb2YgYSA6ZmlsZTpgLnB5cGlyY2AgZmlsZSBpcyBhcworZm9sbG93czo6CiAKICAgICBbZGlzdHV0aWxzXQogICAgIGluZGV4LXNlcnZlcnMgPQpAQCAtMTMxLDEzICsxNjcsMTMgQEAKICAgICB1c2VybmFtZTogPHVzZXJuYW1lPgogICAgIHBhc3N3b3JkOiA8cGFzc3dvcmQ+CiAKLVRoZSAqZGlzdHV0aWxzKiBzZWN0aW9uIGRlZmluZXMgYSAqaW5kZXgtc2VydmVycyogdmFyaWFibGUgdGhhdCBsaXN0cyB0aGUKK1RoZSAqZGlzdHV0aWxzKiBzZWN0aW9uIGRlZmluZXMgYW4gKmluZGV4LXNlcnZlcnMqIHZhcmlhYmxlIHRoYXQgbGlzdHMgdGhlCiBuYW1lIG9mIGFsbCBzZWN0aW9ucyBkZXNjcmliaW5nIGEgcmVwb3NpdG9yeS4KIAogRWFjaCBzZWN0aW9uIGRlc2NyaWJpbmcgYSByZXBvc2l0b3J5IGRlZmluZXMgdGhyZWUgdmFyaWFibGVzOgogCiAtICpyZXBvc2l0b3J5KiwgdGhhdCBkZWZpbmVzIHRoZSB1cmwgb2YgdGhlIFB5UEkgc2VydmVyLiBEZWZhdWx0cyB0bwotICAgIGBgaHR0cDovL3d3dy5weXRob24ub3JnL3B5cGlgYC4KKyAgICBgYGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvcHlwaWBgLgogLSAqdXNlcm5hbWUqLCB3aGljaCBpcyB0aGUgcmVnaXN0ZXJlZCB1c2VybmFtZSBvbiB0aGUgUHlQSSBzZXJ2ZXIuCiAtICpwYXNzd29yZCosIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZS4gSWYgb21pdHRlZCB0aGUgdXNlcgogICAgIHdpbGwgYmUgcHJvbXB0IHRvIHR5cGUgaXQgd2hlbiBuZWVkZWQuCkBAIC0xNTYsMTkgKzE5MiwxNyBAQAogICAgIHBhc3N3b3JkOiA8cGFzc3dvcmQ+CiAKICAgICBbb3RoZXJdCi0gICAgcmVwb3NpdG9yeTogaHR0cDovL2V4YW1wbGUuY29tL3B5cGkKKyAgICByZXBvc2l0b3J5OiBodHRwczovL2V4YW1wbGUuY29tL3B5cGkKICAgICB1c2VybmFtZTogPHVzZXJuYW1lPgogICAgIHBhc3N3b3JkOiA8cGFzc3dvcmQ+CiAKLTpjb21tYW5kOmByZWdpc3RlcmAgY2FuIHRoZW4gYmUgY2FsbGVkIHdpdGggdGhlIC1yIG9wdGlvbiB0byBwb2ludCB0aGUKLXJlcG9zaXRvcnkgdG8gd29yayB3aXRoOjoKK1RoaXMgYWxsb3dzIHRoZSA6Y29tbWFuZDpgcmVnaXN0ZXJgIGFuZCA6Y29tbWFuZDpgdXBsb2FkYCBjb21tYW5kcyB0byBiZQorY2FsbGVkIHdpdGggdGhlIGBgLS1yZXBvc2l0b3J5YGAgb3B0aW9uIGFzIGRlc2NyaWJlZCBpbgorOnJlZjpgcGFja2FnZS1jbWRvcHRpb25zYC4KIAotICAgIHB5dGhvbiBzZXR1cC5weSByZWdpc3RlciAtciBodHRwOi8vZXhhbXBsZS5jb20vcHlwaQotCi1Gb3IgY29udmVuaWVuY2UsIHRoZSBuYW1lIG9mIHRoZSBzZWN0aW9uIHRoYXQgZGVzY3JpYmVzIHRoZSByZXBvc2l0b3J5Ci1tYXkgYWxzbyBiZSB1c2VkOjoKLQotICAgIHB5dGhvbiBzZXR1cC5weSByZWdpc3RlciAtciBvdGhlcgorU3BlY2lmaWNhbGx5LCB5b3UgbWlnaHQgd2FudCB0byBhZGQgdGhlIGBQeVBJIFRlc3QgUmVwb3NpdG9yeQorPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vVGVzdFB5UEk+YF8gdG8geW91ciBgYC5weXBpcmNgYCB0byBmYWNpbGl0YXRlCit0ZXN0aW5nIGJlZm9yZSBkb2luZyB5b3VyIGZpcnN0IHVwbG9hZCB0byBgYFB5UElgYCBpdHNlbGYuCiAKIAogLi4gX3BhY2thZ2UtZGlzcGxheToKQEAgLTIxMCw0ICsyNDQsNCBAQAogc3VjY2Vzc2Z1bGx5LgogCiAKLS4uIF9QeXRob24gUGFja2FnZSBJbmRleCAoUHlQSSk6IGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvCisuLiBfUHl0aG9uIFBhY2thZ2UgSW5kZXggKFB5UEkpOiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpCmRpZmYgLS1naXQgYS9Eb2MvZGlzdHV0aWxzL3NldHVwc2NyaXB0LnJzdCBiL0RvYy9kaXN0dXRpbHMvc2V0dXBzY3JpcHQucnN0CmluZGV4IGZiZTQyOTAuLjkxNGEzNGYgMTAwNjQ0Ci0tLSBhL0RvYy9kaXN0dXRpbHMvc2V0dXBzY3JpcHQucnN0CisrKyBiL0RvYy9kaXN0dXRpbHMvc2V0dXBzY3JpcHQucnN0CkBAIC0yOCw3ICsyOCw3IEBACiAgICAgICAgICAgZGVzY3JpcHRpb249J1B5dGhvbiBEaXN0cmlidXRpb24gVXRpbGl0aWVzJywKICAgICAgICAgICBhdXRob3I9J0dyZWcgV2FyZCcsCiAgICAgICAgICAgYXV0aG9yX2VtYWlsPSdnd2FyZEBweXRob24ubmV0JywKLSAgICAgICAgICB1cmw9J2h0dHA6Ly93d3cucHl0aG9uLm9yZy9zaWdzL2Rpc3R1dGlscy1zaWcvJywKKyAgICAgICAgICB1cmw9J2h0dHBzOi8vd3d3LnB5dGhvbi5vcmcvc2lncy9kaXN0dXRpbHMtc2lnLycsCiAgICAgICAgICAgcGFja2FnZXM9WydkaXN0dXRpbHMnLCAnZGlzdHV0aWxzLmNvbW1hbmQnXSwKICAgICAgICAgICkKIApAQCAtNjIsOSArNjIsOSBAQAogTGlzdGluZyB3aG9sZSBwYWNrYWdlcwogPT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgOm9wdGlvbjpgcGFja2FnZXNgIG9wdGlvbiB0ZWxscyB0aGUgRGlzdHV0aWxzIHRvIHByb2Nlc3MgKGJ1aWxkLCBkaXN0cmlidXRlLAorVGhlIGBgcGFja2FnZXNgYCBvcHRpb24gdGVsbHMgdGhlIERpc3R1dGlscyB0byBwcm9jZXNzIChidWlsZCwgZGlzdHJpYnV0ZSwKIGluc3RhbGwsIGV0Yy4pIGFsbCBwdXJlIFB5dGhvbiBtb2R1bGVzIGZvdW5kIGluIGVhY2ggcGFja2FnZSBtZW50aW9uZWQgaW4gdGhlCi06b3B0aW9uOmBwYWNrYWdlc2AgbGlzdC4gIEluIG9yZGVyIHRvIGRvIHRoaXMsIG9mIGNvdXJzZSwgdGhlcmUgaGFzIHRvIGJlIGEKK2BgcGFja2FnZXNgYCBsaXN0LiAgSW4gb3JkZXIgdG8gZG8gdGhpcywgb2YgY291cnNlLCB0aGVyZSBoYXMgdG8gYmUgYQogY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBwYWNrYWdlIG5hbWVzIGFuZCBkaXJlY3RvcmllcyBpbiB0aGUgZmlsZXN5c3RlbS4gIFRoZQogZGVmYXVsdCBjb3JyZXNwb25kZW5jZSBpcyB0aGUgbW9zdCBvYnZpb3VzIG9uZSwgaS5lLiBwYWNrYWdlIDptb2Q6YGRpc3R1dGlsc2AgaXMKIGZvdW5kIGluIHRoZSBkaXJlY3RvcnkgOmZpbGU6YGRpc3R1dGlsc2AgcmVsYXRpdmUgdG8gdGhlIGRpc3RyaWJ1dGlvbiByb290LgpAQCAtNzUsNyArNzUsNyBAQAogRGlzdHV0aWxzIHdpbGwgaXNzdWUgYSB3YXJuaW5nIGJ1dCBzdGlsbCBwcm9jZXNzIHRoZSBicm9rZW4gcGFja2FnZSBhbnl3YXkuCiAKIElmIHlvdSB1c2UgYSBkaWZmZXJlbnQgY29udmVudGlvbiB0byBsYXkgb3V0IHlvdXIgc291cmNlIGRpcmVjdG9yeSwgdGhhdCdzIG5vCi1wcm9ibGVtOiB5b3UganVzdCBoYXZlIHRvIHN1cHBseSB0aGUgOm9wdGlvbjpgcGFja2FnZV9kaXJgIG9wdGlvbiB0byB0ZWxsIHRoZQorcHJvYmxlbTogeW91IGp1c3QgaGF2ZSB0byBzdXBwbHkgdGhlIGBgcGFja2FnZV9kaXJgYCBvcHRpb24gdG8gdGVsbCB0aGUKIERpc3R1dGlscyBhYm91dCB5b3VyIGNvbnZlbnRpb24uICBGb3IgZXhhbXBsZSwgc2F5IHlvdSBrZWVwIGFsbCBQeXRob24gc291cmNlCiB1bmRlciA6ZmlsZTpgbGliYCwgc28gdGhhdCBtb2R1bGVzIGluIHRoZSAicm9vdCBwYWNrYWdlIiAoaS5lLiwgbm90IGluIGFueQogcGFja2FnZSBhdCBhbGwpIGFyZSBpbiA6ZmlsZTpgbGliYCwgbW9kdWxlcyBpbiB0aGUgOm1vZDpgZm9vYCBwYWNrYWdlIGFyZSBpbgpAQCAtOTQsMTMgKzk0LDEzIEBACiAKICAgICBwYWNrYWdlX2RpciA9IHsnZm9vJzogJ2xpYid9CiAKLUEgYGBwYWNrYWdlOiBkaXJgYCBlbnRyeSBpbiB0aGUgOm9wdGlvbjpgcGFja2FnZV9kaXJgIGRpY3Rpb25hcnkgaW1wbGljaXRseQorQSBgYHBhY2thZ2U6IGRpcmBgIGVudHJ5IGluIHRoZSBgYHBhY2thZ2VfZGlyYGAgZGljdGlvbmFyeSBpbXBsaWNpdGx5CiBhcHBsaWVzIHRvIGFsbCBwYWNrYWdlcyBiZWxvdyAqcGFja2FnZSosIHNvIHRoZSA6bW9kOmBmb28uYmFyYCBjYXNlIGlzCiBhdXRvbWF0aWNhbGx5IGhhbmRsZWQgaGVyZS4gIEluIHRoaXMgZXhhbXBsZSwgaGF2aW5nIGBgcGFja2FnZXMgPSBbJ2ZvbycsCiAnZm9vLmJhciddYGAgdGVsbHMgdGhlIERpc3R1dGlscyB0byBsb29rIGZvciA6ZmlsZTpgbGliL19faW5pdF9fLnB5YCBhbmQKLTpmaWxlOmBsaWIvYmFyL19faW5pdF9fLnB5YC4gIChLZWVwIGluIG1pbmQgdGhhdCBhbHRob3VnaCA6b3B0aW9uOmBwYWNrYWdlX2RpcmAKKzpmaWxlOmBsaWIvYmFyL19faW5pdF9fLnB5YC4gIChLZWVwIGluIG1pbmQgdGhhdCBhbHRob3VnaCBgYHBhY2thZ2VfZGlyYGAKIGFwcGxpZXMgcmVjdXJzaXZlbHksIHlvdSBtdXN0IGV4cGxpY2l0bHkgbGlzdCBhbGwgcGFja2FnZXMgaW4KLTpvcHRpb246YHBhY2thZ2VzYDogdGhlIERpc3R1dGlscyB3aWxsICpub3QqIHJlY3Vyc2l2ZWx5IHNjYW4geW91ciBzb3VyY2UgdHJlZQorYGBwYWNrYWdlc2BgOiB0aGUgRGlzdHV0aWxzIHdpbGwgKm5vdCogcmVjdXJzaXZlbHkgc2NhbiB5b3VyIHNvdXJjZSB0cmVlCiBsb29raW5nIGZvciBhbnkgZGlyZWN0b3J5IHdpdGggYW4gOmZpbGU6YF9faW5pdF9fLnB5YCBmaWxlLikKIAogCkBAIC0xMjAsNyArMTIwLDcgQEAKIDptb2Q6YHBrZ2AgcGFja2FnZS4gIEFnYWluLCB0aGUgZGVmYXVsdCBwYWNrYWdlL2RpcmVjdG9yeSBsYXlvdXQgaW1wbGllcyB0aGF0CiB0aGVzZSB0d28gbW9kdWxlcyBjYW4gYmUgZm91bmQgaW4gOmZpbGU6YG1vZDEucHlgIGFuZCA6ZmlsZTpgcGtnL21vZDIucHlgLCBhbmQKIHRoYXQgOmZpbGU6YHBrZy9fX2luaXRfXy5weWAgZXhpc3RzIGFzIHdlbGwuIEFuZCBhZ2FpbiwgeW91IGNhbiBvdmVycmlkZSB0aGUKLXBhY2thZ2UvZGlyZWN0b3J5IGNvcnJlc3BvbmRlbmNlIHVzaW5nIHRoZSA6b3B0aW9uOmBwYWNrYWdlX2RpcmAgb3B0aW9uLgorcGFja2FnZS9kaXJlY3RvcnkgY29ycmVzcG9uZGVuY2UgdXNpbmcgdGhlIGBgcGFja2FnZV9kaXJgYCBvcHRpb24uCiAKIAogLi4gX2Rlc2NyaWJpbmctZXh0ZW5zaW9uczoKQEAgLTEzOCw3ICsxMzgsNyBAQAogLi4gWFhYIHJlYWQgb3ZlciB0aGlzIHNlY3Rpb24KIAogQWxsIG9mIHRoaXMgaXMgZG9uZSB0aHJvdWdoIGFub3RoZXIga2V5d29yZCBhcmd1bWVudCB0byA6ZnVuYzpgc2V0dXBgLCB0aGUKLTpvcHRpb246YGV4dF9tb2R1bGVzYCBvcHRpb24uICA6b3B0aW9uOmBleHRfbW9kdWxlc2AgaXMganVzdCBhIGxpc3Qgb2YKK2BgZXh0X21vZHVsZXNgYCBvcHRpb24uICBgYGV4dF9tb2R1bGVzYGAgaXMganVzdCBhIGxpc3Qgb2YKIDpjbGFzczpgfmRpc3R1dGlscy5jb3JlLkV4dGVuc2lvbmAgaW5zdGFuY2VzLCBlYWNoIG9mIHdoaWNoIGRlc2NyaWJlcyBhCiBzaW5nbGUgZXh0ZW5zaW9uIG1vZHVsZS4KIFN1cHBvc2UgeW91ciBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSBzaW5nbGUgZXh0ZW5zaW9uLCBjYWxsZWQgOm1vZDpgZm9vYCBhbmQKQEAgLTE4MSw3ICsxODEsNyBAQAogcmVzdWx0aW5nIGV4dGVuc2lvbiBsaXZlcy4KIAogSWYgeW91IGhhdmUgYSBudW1iZXIgb2YgZXh0ZW5zaW9ucyBhbGwgaW4gdGhlIHNhbWUgcGFja2FnZSAob3IgYWxsIHVuZGVyIHRoZQotc2FtZSBiYXNlIHBhY2thZ2UpLCB1c2UgdGhlIDpvcHRpb246YGV4dF9wYWNrYWdlYCBrZXl3b3JkIGFyZ3VtZW50IHRvCitzYW1lIGJhc2UgcGFja2FnZSksIHVzZSB0aGUgYGBleHRfcGFja2FnZWBgIGtleXdvcmQgYXJndW1lbnQgdG8KIDpmdW5jOmBzZXR1cGAuICBGb3IgZXhhbXBsZSwgOjoKIAogICAgIHNldHVwKC4uLiwKQEAgLTMzNiwyNCArMzM2LDI0IEBACiAKIFRoZXJlIGFyZSBzdGlsbCBzb21lIG90aGVyIG9wdGlvbnMgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaGFuZGxlIHNwZWNpYWwgY2FzZXMuCiAKLVRoZSA6b3B0aW9uOmBvcHRpb25hbGAgb3B0aW9uIGlzIGEgYm9vbGVhbjsgaWYgaXQgaXMgdHJ1ZSwKK1RoZSBgYG9wdGlvbmFsYGAgb3B0aW9uIGlzIGEgYm9vbGVhbjsgaWYgaXQgaXMgdHJ1ZSwKIGEgYnVpbGQgZmFpbHVyZSBpbiB0aGUgZXh0ZW5zaW9uIHdpbGwgbm90IGFib3J0IHRoZSBidWlsZCBwcm9jZXNzLCBidXQKIGluc3RlYWQgc2ltcGx5IG5vdCBpbnN0YWxsIHRoZSBmYWlsaW5nIGV4dGVuc2lvbi4KIAotVGhlIDpvcHRpb246YGV4dHJhX29iamVjdHNgIG9wdGlvbiBpcyBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIHRvIGJlIHBhc3NlZCB0byB0aGUKK1RoZSBgYGV4dHJhX29iamVjdHNgYCBvcHRpb24gaXMgYSBsaXN0IG9mIG9iamVjdCBmaWxlcyB0byBiZSBwYXNzZWQgdG8gdGhlCiBsaW5rZXIuIFRoZXNlIGZpbGVzIG11c3Qgbm90IGhhdmUgZXh0ZW5zaW9ucywgYXMgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciB0aGUKIGNvbXBpbGVyIGlzIHVzZWQuCiAKLTpvcHRpb246YGV4dHJhX2NvbXBpbGVfYXJnc2AgYW5kIDpvcHRpb246YGV4dHJhX2xpbmtfYXJnc2AgY2FuIGJlIHVzZWQgdG8KK2BgZXh0cmFfY29tcGlsZV9hcmdzYGAgYW5kIGBgZXh0cmFfbGlua19hcmdzYGAgY2FuIGJlIHVzZWQgdG8KIHNwZWNpZnkgYWRkaXRpb25hbCBjb21tYW5kIGxpbmUgb3B0aW9ucyBmb3IgdGhlIHJlc3BlY3RpdmUgY29tcGlsZXIgYW5kIGxpbmtlcgogY29tbWFuZCBsaW5lcy4KIAotOm9wdGlvbjpgZXhwb3J0X3N5bWJvbHNgIGlzIG9ubHkgdXNlZnVsIG9uIFdpbmRvd3MuICBJdCBjYW4gY29udGFpbiBhIGxpc3Qgb2YKK2BgZXhwb3J0X3N5bWJvbHNgYCBpcyBvbmx5IHVzZWZ1bCBvbiBXaW5kb3dzLiAgSXQgY2FuIGNvbnRhaW4gYSBsaXN0IG9mCiBzeW1ib2xzIChmdW5jdGlvbnMgb3IgdmFyaWFibGVzKSB0byBiZSBleHBvcnRlZC4gVGhpcyBvcHRpb24gaXMgbm90IG5lZWRlZCB3aGVuCiBidWlsZGluZyBjb21waWxlZCBleHRlbnNpb25zOiBEaXN0dXRpbHMgIHdpbGwgYXV0b21hdGljYWxseSBhZGQgYGBpbml0bW9kdWxlYGAKIHRvIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMuCiAKLVRoZSA6b3B0aW9uOmBkZXBlbmRzYCBvcHRpb24gaXMgYSBsaXN0IG9mIGZpbGVzIHRoYXQgdGhlIGV4dGVuc2lvbiBkZXBlbmRzIG9uCitUaGUgYGBkZXBlbmRzYGAgb3B0aW9uIGlzIGEgbGlzdCBvZiBmaWxlcyB0aGF0IHRoZSBleHRlbnNpb24gZGVwZW5kcyBvbgogKGZvciBleGFtcGxlIGhlYWRlciBmaWxlcykuIFRoZSBidWlsZCBjb21tYW5kIHdpbGwgY2FsbCB0aGUgY29tcGlsZXIgb24gdGhlCiBzb3VyY2VzIHRvIHJlYnVpbGQgZXh0ZW5zaW9uIGlmIGFueSBvbiB0aGlzIGZpbGVzIGhhcyBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZQogcHJldmlvdXMgYnVpbGQuCkBAIC00NDksNyArNDQ5LDcgQEAKIHRoZSBjdXJyZW50IGludGVycHJldGVyIGxvY2F0aW9uLiAgVGhlIDpvcHRpb246YC0tZXhlY3V0YWJsZWAgKG9yIDpvcHRpb246YC1lYCkKIG9wdGlvbiB3aWxsIGFsbG93IHRoZSBpbnRlcnByZXRlciBwYXRoIHRvIGJlIGV4cGxpY2l0bHkgb3ZlcnJpZGRlbi4KIAotVGhlIDpvcHRpb246YHNjcmlwdHNgIG9wdGlvbiBzaW1wbHkgaXMgYSBsaXN0IG9mIGZpbGVzIHRvIGJlIGhhbmRsZWQgaW4gdGhpcworVGhlIGBgc2NyaXB0c2BgIG9wdGlvbiBzaW1wbHkgaXMgYSBsaXN0IG9mIGZpbGVzIHRvIGJlIGhhbmRsZWQgaW4gdGhpcwogd2F5LiAgRnJvbSB0aGUgUHlYTUwgc2V0dXAgc2NyaXB0OjoKIAogICAgIHNldHVwKC4uLiwKQEAgLTUxNCwxMSArNTE0LDExIEBACiBJbnN0YWxsaW5nIEFkZGl0aW9uYWwgRmlsZXMKID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgOm9wdGlvbjpgZGF0YV9maWxlc2Agb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYWRkaXRpb25hbCBmaWxlcyBuZWVkZWQKK1RoZSBgYGRhdGFfZmlsZXNgYCBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBhZGRpdGlvbmFsIGZpbGVzIG5lZWRlZAogYnkgdGhlIG1vZHVsZSBkaXN0cmlidXRpb246IGNvbmZpZ3VyYXRpb24gZmlsZXMsIG1lc3NhZ2UgY2F0YWxvZ3MsIGRhdGEgZmlsZXMsCiBhbnl0aGluZyB3aGljaCBkb2Vzbid0IGZpdCBpbiB0aGUgcHJldmlvdXMgY2F0ZWdvcmllcy4KIAotOm9wdGlvbjpgZGF0YV9maWxlc2Agc3BlY2lmaWVzIGEgc2VxdWVuY2Ugb2YgKCpkaXJlY3RvcnkqLCAqZmlsZXMqKSBwYWlycyBpbiB0aGUKK2BgZGF0YV9maWxlc2BgIHNwZWNpZmllcyBhIHNlcXVlbmNlIG9mICgqZGlyZWN0b3J5KiwgKmZpbGVzKikgcGFpcnMgaW4gdGhlCiBmb2xsb3dpbmcgd2F5OjoKIAogICAgIHNldHVwKC4uLiwKQEAgLTUzOSw3ICs1MzksNyBAQAogZGlyZWN0b3J5IGluZm9ybWF0aW9uIGZyb20gKmZpbGVzKiBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgZmluYWwgbG9jYXRpb24gb2YKIHRoZSBpbnN0YWxsZWQgZmlsZTsgb25seSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpcyB1c2VkLgogCi1Zb3UgY2FuIHNwZWNpZnkgdGhlIDpvcHRpb246YGRhdGFfZmlsZXNgIG9wdGlvbnMgYXMgYSBzaW1wbGUgc2VxdWVuY2Ugb2YgZmlsZXMKK1lvdSBjYW4gc3BlY2lmeSB0aGUgYGBkYXRhX2ZpbGVzYGAgb3B0aW9ucyBhcyBhIHNpbXBsZSBzZXF1ZW5jZSBvZiBmaWxlcwogd2l0aG91dCBzcGVjaWZ5aW5nIGEgdGFyZ2V0IGRpcmVjdG9yeSwgYnV0IHRoaXMgaXMgbm90IHJlY29tbWVuZGVkLCBhbmQgdGhlCiA6Y29tbWFuZDpgaW5zdGFsbGAgY29tbWFuZCB3aWxsIHByaW50IGEgd2FybmluZyBpbiB0aGlzIGNhc2UuIFRvIGluc3RhbGwgZGF0YQogZmlsZXMgZGlyZWN0bHkgaW4gdGhlIHRhcmdldCBkaXJlY3RvcnksIGFuIGVtcHR5IHN0cmluZyBzaG91bGQgYmUgZ2l2ZW4gYXMgdGhlCkBAIC02MDksNyArNjA5LDcgQEAKICg0KQogICAgIFRoZXNlIGZpZWxkcyBzaG91bGQgbm90IGJlIHVzZWQgaWYgeW91ciBwYWNrYWdlIGlzIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBQeXRob24KICAgICB2ZXJzaW9ucyBwcmlvciB0byAyLjIuMyBvciAyLjMuICBUaGUgbGlzdCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgYFB5UEkgd2Vic2l0ZQotICAgIDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF8uCisgICAgPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF8uCiAKICg1KQogICAgIFRoZSBgYGxvbmdfZGVzY3JpcHRpb25gYCBmaWVsZCBpcyB1c2VkIGJ5IFB5UEkgd2hlbiB5b3UgYXJlCkBAIC02MjgsNyArNjI4LDcgQEAKIAogJ2xvbmcgc3RyaW5nJwogICAgIE11bHRpcGxlIGxpbmVzIG9mIHBsYWluIHRleHQgaW4gcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXQgKHNlZQotICAgIGh0dHA6Ly9kb2N1dGlscy5zZi5uZXQvKS4KKyAgICBodHRwOi8vZG9jdXRpbHMuc291cmNlZm9yZ2UubmV0LykuCiAKICdsaXN0IG9mIHN0cmluZ3MnCiAgICAgU2VlIGJlbG93LgpAQCAtNjUwLDcgKzY1MCw3IEBACiAxLjAuMWEyCiAgICAgdGhlIHNlY29uZCBhbHBoYSByZWxlYXNlIG9mIHRoZSBmaXJzdCBwYXRjaCB2ZXJzaW9uIG9mIDEuMAogCi06b3B0aW9uOmBjbGFzc2lmaWVyc2AgYXJlIHNwZWNpZmllZCBpbiBhIFB5dGhvbiBsaXN0OjoKK2BgY2xhc3NpZmllcnNgYCBhcmUgc3BlY2lmaWVkIGluIGEgUHl0aG9uIGxpc3Q6OgogCiAgICAgc2V0dXAoLi4uLAogICAgICAgICAgIGNsYXNzaWZpZXJzPVsKQEAgLTY3MSwyMCArNjcxLDYgQEAKICAgICAgICAgICAgICAgXSwKICAgICAgICAgICApCiAKLUlmIHlvdSB3aXNoIHRvIGluY2x1ZGUgY2xhc3NpZmllcnMgaW4geW91ciA6ZmlsZTpgc2V0dXAucHlgIGZpbGUgYW5kIGFsc28gd2lzaAotdG8gcmVtYWluIGJhY2t3YXJkcy1jb21wYXRpYmxlIHdpdGggUHl0aG9uIHJlbGVhc2VzIHByaW9yIHRvIDIuMi4zLCB0aGVuIHlvdSBjYW4KLWluY2x1ZGUgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50IGluIHlvdXIgOmZpbGU6YHNldHVwLnB5YCBiZWZvcmUgdGhlCi06ZnVuYzpgc2V0dXBgIGNhbGwuIDo6Ci0KLSAgICAjIHBhdGNoIGRpc3R1dGlscyBpZiBpdCBjYW4ndCBjb3BlIHdpdGggdGhlICJjbGFzc2lmaWVycyIgb3IKLSAgICAjICJkb3dubG9hZF91cmwiIGtleXdvcmRzCi0gICAgZnJvbSBzeXMgaW1wb3J0IHZlcnNpb24KLSAgICBpZiB2ZXJzaW9uIDwgJzIuMi4zJzoKLSAgICAgICAgZnJvbSBkaXN0dXRpbHMuZGlzdCBpbXBvcnQgRGlzdHJpYnV0aW9uTWV0YWRhdGEKLSAgICAgICAgRGlzdHJpYnV0aW9uTWV0YWRhdGEuY2xhc3NpZmllcnMgPSBOb25lCi0gICAgICAgIERpc3RyaWJ1dGlvbk1ldGFkYXRhLmRvd25sb2FkX3VybCA9IE5vbmUKLQotCiAuLiBfZGVidWctc2V0dXAtc2NyaXB0OgogCiBEZWJ1Z2dpbmcgdGhlIHNldHVwIHNjcmlwdApkaWZmIC0tZ2l0IGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdCBiL0RvYy9kaXN0dXRpbHMvc291cmNlZGlzdC5yc3QKaW5kZXggMTY2NjQzNi4uYjlmMGNjOCAxMDA2NDQKLS0tIGEvRG9jL2Rpc3R1dGlscy9zb3VyY2VkaXN0LnJzdAorKysgYi9Eb2MvZGlzdHV0aWxzL3NvdXJjZWRpc3QucnN0CkBAIC0yNiwxNiArMjYsMTYgQEAKICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PSsKIHwgYGB6aXBgYCAgIHwgemlwIGZpbGUgKDpmaWxlOmAuemlwYCkgfCAoMSksKDMpIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCAoMiksKDQpIHwKK3wgYGBnenRhcmBgIHwgZ3ppcCdlZCB0YXIgZmlsZSAgICAgICAgfCBcKDIpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmd6YCkgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCBcKDQpICAgIHwKK3wgYGBienRhcmBgIHwgYnppcDInZWQgdGFyIGZpbGUgICAgICAgfCAgICAgICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLmJ6MmApICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIHwgYGB6dGFyYGAgIHwgY29tcHJlc3NlZCB0YXIgZmlsZSAgICAgfCBcKDQpICAgIHwKIHwgICAgICAgICAgIHwgKDpmaWxlOmAudGFyLlpgKSAgICAgICAgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKLXwgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCBcKDQpICAgIHwKK3wgYGB0YXJgYCAgIHwgdGFyIGZpbGUgKDpmaWxlOmAudGFyYCkgfCAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSsKIAogTm90ZXM6CkBAIC01MSw4ICs1MSwxNiBAQAogICAgb2YgdGhlIHN0YW5kYXJkIFB5dGhvbiBsaWJyYXJ5IHNpbmNlIFB5dGhvbiAxLjYpCiAKICg0KQotICAgcmVxdWlyZXMgZXh0ZXJuYWwgdXRpbGl0aWVzOiA6cHJvZ3JhbTpgdGFyYCBhbmQgcG9zc2libHkgb25lIG9mIDpwcm9ncmFtOmBnemlwYCwKLSAgIDpwcm9ncmFtOmBiemlwMmAsIG9yIDpwcm9ncmFtOmBjb21wcmVzc2AKKyAgIHJlcXVpcmVzIHRoZSA6cHJvZ3JhbTpgY29tcHJlc3NgIHByb2dyYW0uIE5vdGljZSB0aGF0IHRoaXMgZm9ybWF0IGlzIG5vdworICAgcGVuZGluZyBmb3IgZGVwcmVjYXRpb24gYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvbi4KKworV2hlbiB1c2luZyBhbnkgYGB0YXJgYCBmb3JtYXQgKGBgZ3p0YXJgYCwgYGBienRhcmBgLCBgYHp0YXJgYCBvcgorYGB0YXJgYCksIHVuZGVyIFVuaXggeW91IGNhbiBzcGVjaWZ5IHRoZSBgYG93bmVyYGAgYW5kIGBgZ3JvdXBgYCBuYW1lcwordGhhdCB3aWxsIGJlIHNldCBmb3IgZWFjaCBtZW1iZXIgb2YgdGhlIGFyY2hpdmUuCisKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCBhbGwgZmlsZXMgb2YgdGhlIGFyY2hpdmUgdG8gYmUgb3duZWQgYnkgcm9vdDo6CisKKyAgICBweXRob24gc2V0dXAucHkgc2Rpc3QgLS1vd25lcj1yb290IC0tZ3JvdXA9cm9vdAogCiAKIC4uIF9tYW5pZmVzdDoKQEAgLTY0LDE2ICs3MiwxNiBAQAogZ2VuZXJhdGUgb25lKSwgdGhlIDpjb21tYW5kOmBzZGlzdGAgY29tbWFuZCBwdXRzIGEgbWluaW1hbCBkZWZhdWx0IHNldCBpbnRvIHRoZQogc291cmNlIGRpc3RyaWJ1dGlvbjoKIAotKiBhbGwgUHl0aG9uIHNvdXJjZSBmaWxlcyBpbXBsaWVkIGJ5IHRoZSA6b3B0aW9uOmBweV9tb2R1bGVzYCBhbmQKLSAgOm9wdGlvbjpgcGFja2FnZXNgIG9wdGlvbnMKKyogYWxsIFB5dGhvbiBzb3VyY2UgZmlsZXMgaW1wbGllZCBieSB0aGUgYGBweV9tb2R1bGVzYGAgYW5kCisgIGBgcGFja2FnZXNgYCBvcHRpb25zCiAKLSogYWxsIEMgc291cmNlIGZpbGVzIG1lbnRpb25lZCBpbiB0aGUgOm9wdGlvbjpgZXh0X21vZHVsZXNgIG9yCi0gIDpvcHRpb246YGxpYnJhcmllc2Agb3B0aW9ucyAoCisqIGFsbCBDIHNvdXJjZSBmaWxlcyBtZW50aW9uZWQgaW4gdGhlIGBgZXh0X21vZHVsZXNgYCBvcgorICBgYGxpYnJhcmllc2BgIG9wdGlvbnMKIAogICAuLiBYWFggZ2V0dGluZyBDIGxpYnJhcnkgc291cmNlcyBjdXJyZW50bHkgYnJva2VuLS0tbm8KICAgICAgICAgIDptZXRoOmBnZXRfc291cmNlX2ZpbGVzYCBtZXRob2QgaW4gOmZpbGU6YGJ1aWxkX2NsaWIucHlgIQogCi0qIHNjcmlwdHMgaWRlbnRpZmllZCBieSB0aGUgOm9wdGlvbjpgc2NyaXB0c2Agb3B0aW9uCisqIHNjcmlwdHMgaWRlbnRpZmllZCBieSB0aGUgYGBzY3JpcHRzYGAgb3B0aW9uCiAgIFNlZSA6cmVmOmBkaXN0dXRpbHMtaW5zdGFsbGluZy1zY3JpcHRzYC4KIAogKiBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgYSB0ZXN0IHNjcmlwdDogOmZpbGU6YHRlc3QvdGVzdFwqLnB5YCAoY3VycmVudGx5LCB0aGUKQEAgLTE1OSw3ICsxNjcsNyBAQAogCiAjLiBpbmNsdWRlIGFsbCBQeXRob24gc291cmNlIGZpbGVzIGluIHRoZSA6ZmlsZTpgZGlzdHV0aWxzYCBhbmQKICAgIDpmaWxlOmBkaXN0dXRpbHMvY29tbWFuZGAgc3ViZGlyZWN0b3JpZXMgKGJlY2F1c2UgcGFja2FnZXMgY29ycmVzcG9uZGluZyB0bwotICAgdGhvc2UgdHdvIGRpcmVjdG9yaWVzIHdlcmUgbWVudGlvbmVkIGluIHRoZSA6b3B0aW9uOmBwYWNrYWdlc2Agb3B0aW9uIGluIHRoZQorICAgdGhvc2UgdHdvIGRpcmVjdG9yaWVzIHdlcmUgbWVudGlvbmVkIGluIHRoZSBgYHBhY2thZ2VzYGAgb3B0aW9uIGluIHRoZQogICAgc2V0dXAgc2NyaXB0LS0tc2VlIHNlY3Rpb24gOnJlZjpgc2V0dXAtc2NyaXB0YCkKIAogIy4gaW5jbHVkZSA6ZmlsZTpgUkVBRE1FLnR4dGAsIDpmaWxlOmBzZXR1cC5weWAsIGFuZCA6ZmlsZTpgc2V0dXAuY2ZnYCAoc3RhbmRhcmQKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvYnVpbGRpbmcucnN0IGIvRG9jL2V4dGVuZGluZy9idWlsZGluZy5yc3QKaW5kZXggMDhiMGNjMi4uNjU2YWY4OCAxMDA2NDQKLS0tIGEvRG9jL2V4dGVuZGluZy9idWlsZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9idWlsZGluZy5yc3QKQEAgLTU2LDcgKzU2LDcgQEAKIGRpc3R1dGlsczsgdGhpcyBzZWN0aW9uIGV4cGxhaW5zIGJ1aWxkaW5nIGV4dGVuc2lvbiBtb2R1bGVzIG9ubHkuCiAKIEl0IGlzIGNvbW1vbiB0byBwcmUtY29tcHV0ZSBhcmd1bWVudHMgdG8gOmZ1bmM6YHNldHVwYCwgdG8gYmV0dGVyIHN0cnVjdHVyZSB0aGUKLWRyaXZlciBzY3JpcHQuIEluIHRoZSBleGFtcGxlIGFib3ZlLCB0aGVcIGBgZXh0X21vZHVsZXNgYCBhcmd1bWVudCB0bworZHJpdmVyIHNjcmlwdC4gSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHRoZSBgYGV4dF9tb2R1bGVzYGAgYXJndW1lbnQgdG8KIDpmdW5jOmBzZXR1cGAgaXMgYSBsaXN0IG9mIGV4dGVuc2lvbiBtb2R1bGVzLCBlYWNoIG9mIHdoaWNoIGlzIGFuIGluc3RhbmNlIG9mCiB0aGUgOmNsYXNzOmB+ZGlzdHV0aWxzLmV4dGVuc2lvbi5FeHRlbnNpb25gLiBJbiB0aGUgZXhhbXBsZSwgdGhlIGluc3RhbmNlCiBkZWZpbmVzIGFuIGV4dGVuc2lvbiBuYW1lZCBgYGRlbW9gYCB3aGljaCBpcyBidWlsZCBieSBjb21waWxpbmcgYSBzaW5nbGUgc291cmNlCkBAIC04MSw3ICs4MSw3IEBACiAgICAgICAgICAgZGVzY3JpcHRpb24gPSAnVGhpcyBpcyBhIGRlbW8gcGFja2FnZScsCiAgICAgICAgICAgYXV0aG9yID0gJ01hcnRpbiB2LiBMb2V3aXMnLAogICAgICAgICAgIGF1dGhvcl9lbWFpbCA9ICdtYXJ0aW5Adi5sb2V3aXMuZGUnLAotICAgICAgICAgIHVybCA9ICdodHRwOi8vZG9jcy5weXRob24ub3JnL2V4dGVuZGluZy9idWlsZGluZycsCisgICAgICAgICAgdXJsID0gJ2h0dHBzOi8vZG9jcy5weXRob24ub3JnL2V4dGVuZGluZy9idWlsZGluZycsCiAgICAgICAgICAgbG9uZ19kZXNjcmlwdGlvbiA9ICcnJwogICAgVGhpcyBpcyByZWFsbHkganVzdCBhIGRlbW8gcGFja2FnZS4KICAgICcnJywKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdCBiL0RvYy9leHRlbmRpbmcvZW1iZWRkaW5nLnJzdAppbmRleCBiZDY2MDg2Li42Y2I2ODZhIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL2VtYmVkZGluZy5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9lbWJlZGRpbmcucnN0CkBAIC0yODUsMTQgKzI4NSwxNCBAQAogKiBgYHB5dGhvblguWS1jb25maWcgLS1jZmxhZ3NgYCB3aWxsIGdpdmUgeW91IHRoZSByZWNvbW1lbmRlZCBmbGFncyB3aGVuCiAgIGNvbXBpbGluZzo6CiAKLSAgICQgL29wdC9iaW4vcHl0aG9uMy4zLWNvbmZpZyAtLWNmbGFncwotICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy4zbSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjNtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKKyAgICQgL29wdC9iaW4vcHl0aG9uMy40LWNvbmZpZyAtLWNmbGFncworICAgLUkvb3B0L2luY2x1ZGUvcHl0aG9uMy40bSAtSS9vcHQvaW5jbHVkZS9weXRob24zLjRtIC1ETkRFQlVHIC1nIC1md3JhcHYgLU8zIC1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMKIAogKiBgYHB5dGhvblguWS1jb25maWcgLS1sZGZsYWdzYGAgd2lsbCBnaXZlIHlvdSB0aGUgcmVjb21tZW5kZWQgZmxhZ3Mgd2hlbgogICBsaW5raW5nOjoKIAotICAgJCAvb3B0L2Jpbi9weXRob24zLjMtY29uZmlnIC0tbGRmbGFncwotICAgLUwvb3B0L2xpYi9weXRob24zLjMvY29uZmlnLTMuM20gLWxwdGhyZWFkIC1sZGwgLWx1dGlsIC1sbSAtbHB5dGhvbjMuM20gLVhsaW5rZXIgLWV4cG9ydC1keW5hbWljCisgICAkIC9vcHQvYmluL3B5dGhvbjMuNC1jb25maWcgLS1sZGZsYWdzCisgICAtTC9vcHQvbGliL3B5dGhvbjMuNC9jb25maWctMy40bSAtbHB0aHJlYWQgLWxkbCAtbHV0aWwgLWxtIC1scHl0aG9uMy40bSAtWGxpbmtlciAtZXhwb3J0LWR5bmFtaWMKIAogLi4gbm90ZTo6CiAgICBUbyBhdm9pZCBjb25mdXNpb24gYmV0d2VlbiBzZXZlcmFsIFB5dGhvbiBpbnN0YWxsYXRpb25zIChhbmQgZXNwZWNpYWxseQpkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9leHRlbmRpbmcucnN0IGIvRG9jL2V4dGVuZGluZy9leHRlbmRpbmcucnN0CmluZGV4IGEzYmYyNjUuLmJhNmJmYTcgMTAwNjQ0Ci0tLSBhL0RvYy9leHRlbmRpbmcvZXh0ZW5kaW5nLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL2V4dGVuZGluZy5yc3QKQEAgLTIwLDEyICsyMCwxNyBAQAogVGhlIGNvbXBpbGF0aW9uIG9mIGFuIGV4dGVuc2lvbiBtb2R1bGUgZGVwZW5kcyBvbiBpdHMgaW50ZW5kZWQgdXNlIGFzIHdlbGwgYXMgb24KIHlvdXIgc3lzdGVtIHNldHVwOyBkZXRhaWxzIGFyZSBnaXZlbiBpbiBsYXRlciBjaGFwdGVycy4KIAotRG8gbm90ZSB0aGF0IGlmIHlvdXIgdXNlIGNhc2UgaXMgY2FsbGluZyBDIGxpYnJhcnkgZnVuY3Rpb25zIG9yIHN5c3RlbSBjYWxscywKLXlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdGhlIDptb2Q6YGN0eXBlc2AgbW9kdWxlIHJhdGhlciB0aGFuIHdyaXRpbmcgY3VzdG9tCi1DIGNvZGUuIE5vdCBvbmx5IGRvZXMgOm1vZDpgY3R5cGVzYCBsZXQgeW91IHdyaXRlIFB5dGhvbiBjb2RlIHRvIGludGVyZmFjZQotd2l0aCBDIGNvZGUsIGJ1dCBpdCBpcyBtb3JlIHBvcnRhYmxlIGJldHdlZW4gaW1wbGVtZW50YXRpb25zIG9mIFB5dGhvbiB0aGFuCi13cml0aW5nIGFuZCBjb21waWxpbmcgYW4gZXh0ZW5zaW9uIG1vZHVsZSB3aGljaCB0eXBpY2FsbHkgdGllcyB5b3UgdG8gQ1B5dGhvbi4KKy4uIG5vdGU6OgogCisgICBUaGUgQyBleHRlbnNpb24gaW50ZXJmYWNlIGlzIHNwZWNpZmljIHRvIENQeXRob24sIGFuZCBleHRlbnNpb24gbW9kdWxlcyBkbworICAgbm90IHdvcmsgb24gb3RoZXIgUHl0aG9uIGltcGxlbWVudGF0aW9ucy4gIEluIG1hbnkgY2FzZXMsIGl0IGlzIHBvc3NpYmxlIHRvCisgICBhdm9pZCB3cml0aW5nIEMgZXh0ZW5zaW9ucyBhbmQgcHJlc2VydmUgcG9ydGFiaWxpdHkgdG8gb3RoZXIgaW1wbGVtZW50YXRpb25zLgorICAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgdXNlIGNhc2UgaXMgY2FsbGluZyBDIGxpYnJhcnkgZnVuY3Rpb25zIG9yIHN5c3RlbSBjYWxscywKKyAgIHlvdSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdGhlIDptb2Q6YGN0eXBlc2AgbW9kdWxlIG9yIHRoZSBgY2ZmaQorICAgPGh0dHA6Ly9jZmZpLnJlYWR0aGVkb2NzLm9yZz5gXyBsaWJyYXJ5IHJhdGhlciB0aGFuIHdyaXRpbmcgY3VzdG9tIEMgY29kZS4KKyAgIFRoZXNlIG1vZHVsZXMgbGV0IHlvdSB3cml0ZSBQeXRob24gY29kZSB0byBpbnRlcmZhY2Ugd2l0aCBDIGNvZGUgYW5kIGFyZSBtb3JlCisgICBwb3J0YWJsZSBiZXR3ZWVuIGltcGxlbWVudGF0aW9ucyBvZiBQeXRob24gdGhhbiB3cml0aW5nIGFuZCBjb21waWxpbmcgYSBDCisgICBleHRlbnNpb24gbW9kdWxlLgogCiAKIC4uIF9leHRlbmRpbmctc2ltcGxlZXhhbXBsZToKQEAgLTU4NSw3ICs1OTAsNyBAQAogCiBUaGUgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgZnVuY3Rpb24gaXMgZGVjbGFyZWQgYXMgZm9sbG93czo6CiAKLSAgIGludCBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICphcmcsIGNoYXIgKmZvcm1hdCwgLi4uKTsKKyAgIGludCBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICphcmcsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogVGhlICphcmcqIGFyZ3VtZW50IG11c3QgYmUgYSB0dXBsZSBvYmplY3QgY29udGFpbmluZyBhbiBhcmd1bWVudCBsaXN0IHBhc3NlZAogZnJvbSBQeXRob24gdG8gYSBDIGZ1bmN0aW9uLiAgVGhlICpmb3JtYXQqIGFyZ3VtZW50IG11c3QgYmUgYSBmb3JtYXQgc3RyaW5nLApAQCAtNjc4LDcgKzY4Myw3IEBACiBUaGUgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBmb2xsb3dzOjoKIAogICAgaW50IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqYXJnLCBQeU9iamVjdCAqa3dkaWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIGNoYXIgKmt3bGlzdFtdLCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIGNoYXIgKmt3bGlzdFtdLCAuLi4pOwogCiBUaGUgKmFyZyogYW5kICpmb3JtYXQqIHBhcmFtZXRlcnMgYXJlIGlkZW50aWNhbCB0byB0aG9zZSBvZiB0aGUKIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIGZ1bmN0aW9uLiAgVGhlICprd2RpY3QqIHBhcmFtZXRlciBpcyB0aGUgZGljdGlvbmFyeSBvZgpAQCAtNzU1LDcgKzc2MCw3IEBACiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBjb3VudGVycGFydCB0byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYC4gIEl0IGlzIGRlY2xhcmVkCiBhcyBmb2xsb3dzOjoKIAotICAgUHlPYmplY3QgKlB5X0J1aWxkVmFsdWUoY2hhciAqZm9ybWF0LCAuLi4pOworICAgUHlPYmplY3QgKlB5X0J1aWxkVmFsdWUoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwogCiBJdCByZWNvZ25pemVzIGEgc2V0IG9mIGZvcm1hdCB1bml0cyBzaW1pbGFyIHRvIHRoZSBvbmVzIHJlY29nbml6ZWQgYnkKIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLCBidXQgdGhlIGFyZ3VtZW50cyAod2hpY2ggYXJlIGlucHV0IHRvIHRoZSBmdW5jdGlvbiwKQEAgLTg1NywxMSArODYyLDggQEAKIGZyb20gdGhlIG9iamVjdHMgaW4gdGhlIGN5Y2xlLCBldmVuIHRob3VnaCB0aGVyZSBhcmUgbm8gZnVydGhlciByZWZlcmVuY2VzIHRvCiB0aGUgY3ljbGUgaXRzZWxmLgogCi1UaGUgY3ljbGUgZGV0ZWN0b3IgaXMgYWJsZSB0byBkZXRlY3QgZ2FyYmFnZSBjeWNsZXMgYW5kIGNhbiByZWNsYWltIHRoZW0gc28gbG9uZwotYXMgdGhlcmUgYXJlIG5vIGZpbmFsaXplcnMgaW1wbGVtZW50ZWQgaW4gUHl0aG9uICg6bWV0aDpgX19kZWxfX2AgbWV0aG9kcykuCi1XaGVuIHRoZXJlIGFyZSBzdWNoIGZpbmFsaXplcnMsIHRoZSBkZXRlY3RvciBleHBvc2VzIHRoZSBjeWNsZXMgdGhyb3VnaCB0aGUKLTptb2Q6YGdjYCBtb2R1bGUgKHNwZWNpZmljYWxseSwgdGhlIDphdHRyOmB+Z2MuZ2FyYmFnZWAgdmFyaWFibGUgaW4gdGhhdCBtb2R1bGUpLgotVGhlIDptb2Q6YGdjYCBtb2R1bGUgYWxzbyBleHBvc2VzIGEgd2F5IHRvIHJ1biB0aGUgZGV0ZWN0b3IgKHRoZQorVGhlIGN5Y2xlIGRldGVjdG9yIGlzIGFibGUgdG8gZGV0ZWN0IGdhcmJhZ2UgY3ljbGVzIGFuZCBjYW4gcmVjbGFpbSB0aGVtLgorVGhlIDptb2Q6YGdjYCBtb2R1bGUgZXhwb3NlcyBhIHdheSB0byBydW4gdGhlIGRldGVjdG9yICh0aGUKIDpmdW5jOmB+Z2MuY29sbGVjdGAgZnVuY3Rpb24pLCBhcyB3ZWxsIGFzIGNvbmZpZ3VyYXRpb24KIGludGVyZmFjZXMgYW5kIHRoZSBhYmlsaXR5IHRvIGRpc2FibGUgdGhlIGRldGVjdG9yIGF0IHJ1bnRpbWUuICBUaGUgY3ljbGUKIGRldGVjdG9yIGlzIGNvbnNpZGVyZWQgYW4gb3B0aW9uYWwgY29tcG9uZW50OyB0aG91Z2ggaXQgaXMgaW5jbHVkZWQgYnkgZGVmYXVsdCwKZGlmZiAtLWdpdCBhL0RvYy9leHRlbmRpbmcvaW5kZXgucnN0IGIvRG9jL2V4dGVuZGluZy9pbmRleC5yc3QKaW5kZXggNDRhN2Y5Mi4uZGQ0MzkyNiAxMDA2NDQKLS0tIGEvRG9jL2V4dGVuZGluZy9pbmRleC5yc3QKKysrIGIvRG9jL2V4dGVuZGluZy9pbmRleC5yc3QKQEAgLTIxLDE0ICsyMSwzMSBAQAogRm9yIGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhlIHdob2xlIFB5dGhvbi9DIEFQSSwgc2VlIHRoZSBzZXBhcmF0ZQogOnJlZjpgYy1hcGktaW5kZXhgLgogCi0uLiBub3RlOjoKIAotICAgVGhpcyBndWlkZSBvbmx5IGNvdmVycyB0aGUgYmFzaWMgdG9vbHMgZm9yIGNyZWF0aW5nIGV4dGVuc2lvbnMgcHJvdmlkZWQKLSAgIGFzIHBhcnQgb2YgdGhpcyB2ZXJzaW9uIG9mIENQeXRob24uIFRoaXJkIHBhcnR5IHRvb2xzIG1heSBvZmZlciBzaW1wbGVyCi0gICBhbHRlcm5hdGl2ZXMuIFJlZmVyIHRvIHRoZSBgYmluYXJ5IGV4dGVuc2lvbnMgc2VjdGlvbgotICAgPGh0dHBzOi8vcHl0aG9uLXBhY2thZ2luZy11c2VyLWd1aWRlLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvZXh0ZW5zaW9ucy5odG1sPmBfXwotICAgaW4gdGhlIFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KK1JlY29tbWVuZGVkIHRoaXJkIHBhcnR5IHRvb2xzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCitUaGlzIGd1aWRlIG9ubHkgY292ZXJzIHRoZSBiYXNpYyB0b29scyBmb3IgY3JlYXRpbmcgZXh0ZW5zaW9ucyBwcm92aWRlZAorYXMgcGFydCBvZiB0aGlzIHZlcnNpb24gb2YgQ1B5dGhvbi4gVGhpcmQgcGFydHkgdG9vbHMgbGlrZSBDeXRob24sCitgYGNmZmlgYCwgU1dJRyBhbmQgTnVtYmEgb2ZmZXIgYm90aCBzaW1wbGVyIGFuZCBtb3JlIHNvcGhpc3RpY2F0ZWQKK2FwcHJvYWNoZXMgdG8gY3JlYXRpbmcgQyBhbmQgQysrIGV4dGVuc2lvbnMgZm9yIFB5dGhvbi4KKworLi4gc2VlYWxzbzo6CisKKyAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IEJpbmFyeSBFeHRlbnNpb25zIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9leHRlbnNpb25zLmh0bWw+YF8KKyAgICAgIFRoZSBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgbm90IG9ubHkgY292ZXJzIHNldmVyYWwgYXZhaWxhYmxlCisgICAgICB0b29scyB0aGF0IHNpbXBsaWZ5IHRoZSBjcmVhdGlvbiBvZiBiaW5hcnkgZXh0ZW5zaW9ucywgYnV0IGFsc28KKyAgICAgIGRpc2N1c3NlcyB0aGUgdmFyaW91cyByZWFzb25zIHdoeSBjcmVhdGluZyBhbiBleHRlbnNpb24gbW9kdWxlIG1heSBiZQorICAgICAgZGVzaXJhYmxlIGluIHRoZSBmaXJzdCBwbGFjZS4KKworCitDcmVhdGluZyBleHRlbnNpb25zIHdpdGhvdXQgdGhpcmQgcGFydHkgdG9vbHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gb2YgdGhlIGd1aWRlIGNvdmVycyBjcmVhdGluZyBDIGFuZCBDKysgZXh0ZW5zaW9ucyB3aXRob3V0Cithc3Npc3RhbmNlIGZyb20gdGhpcmQgcGFydHkgdG9vbHMuIEl0IGlzIGludGVuZGVkIHByaW1hcmlseSBmb3IgY3JlYXRvcnMKK29mIHRob3NlIHRvb2xzLCByYXRoZXIgdGhhbiBiZWluZyBhIHJlY29tbWVuZGVkIHdheSB0byBjcmVhdGUgeW91ciBvd24KK0MgZXh0ZW5zaW9ucy4KIAogLi4gdG9jdHJlZTo6CiAgICA6bWF4ZGVwdGg6IDIKQEAgLTM4LDQgKzU1LDE3IEBACiAgICBuZXd0eXBlcy5yc3QKICAgIGJ1aWxkaW5nLnJzdAogICAgd2luZG93cy5yc3QKKworRW1iZWRkaW5nIHRoZSBDUHl0aG9uIHJ1bnRpbWUgaW4gYSBsYXJnZXIgYXBwbGljYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NvbWV0aW1lcywgcmF0aGVyIHRoYW4gY3JlYXRpbmcgYW4gZXh0ZW5zaW9uIHRoYXQgcnVucyBpbnNpZGUgdGhlIFB5dGhvbgoraW50ZXJwcmV0ZXIgYXMgdGhlIG1haW4gYXBwbGljYXRpb24sIGl0IGlzIGRlc2lyYWJsZSB0byBpbnN0ZWFkIGVtYmVkCit0aGUgQ1B5dGhvbiBydW50aW1lIGluc2lkZSBhIGxhcmdlciBhcHBsaWNhdGlvbi4gVGhpcyBzZWN0aW9uIGNvdmVycworc29tZSBvZiB0aGUgZGV0YWlscyBpbnZvbHZlZCBpbiBkb2luZyB0aGF0IHN1Y2Nlc3NmdWxseS4KKworLi4gdG9jdHJlZTo6CisgICA6bWF4ZGVwdGg6IDIKKyAgIDpudW1iZXJlZDoKKwogICAgZW1iZWRkaW5nLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy9uZXd0eXBlcy5yc3QgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAppbmRleCBmNDg0YmE0Li4wODg0NDMwIDEwMDY0NAotLS0gYS9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL25ld3R5cGVzLnJzdApAQCAtMTU3LDcgKzE1Nyw4IEBACiAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAvKiB0cF9mbGFncyAqLwogCiBBbGwgdHlwZXMgc2hvdWxkIGluY2x1ZGUgdGhpcyBjb25zdGFudCBpbiB0aGVpciBmbGFncy4gIEl0IGVuYWJsZXMgYWxsIG9mIHRoZQotbWVtYmVycyBkZWZpbmVkIGJ5IHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUHl0aG9uLgorbWVtYmVycyBkZWZpbmVkIHVudGlsIGF0IGxlYXN0IFB5dGhvbiAzLjMuICBJZiB5b3UgbmVlZCBmdXJ0aGVyIG1lbWJlcnMsCit5b3Ugd2lsbCBuZWVkIHRvIE9SIHRoZSBjb3JyZXNwb25kaW5nIGZsYWdzLgogCiBXZSBwcm92aWRlIGEgZG9jIHN0cmluZyBmb3IgdGhlIHR5cGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RvY2AuIDo6CiAKQEAgLTM4Miw3ICszODMsOCBAQAogY2FuJ3QgZ3VhcmFudGVlIHRoYXQgdGhlIGluaXRpYWxpemVyIGlzIGNhbGxlZC4gIFRoZSBpbml0aWFsaXplciBpc24ndCBjYWxsZWQKIHdoZW4gdW5waWNrbGluZyBvYmplY3RzIGFuZCBpdCBjYW4gYmUgb3ZlcnJpZGRlbi4gIE91ciBpbml0aWFsaXplciBhY2NlcHRzCiBhcmd1bWVudHMgdG8gcHJvdmlkZSBpbml0aWFsIHZhbHVlcyBmb3Igb3VyIGluc3RhbmNlLiBJbml0aWFsaXplcnMgYWx3YXlzIGFjY2VwdAotcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMuCitwb3NpdGlvbmFsIGFuZCBrZXl3b3JkIGFyZ3VtZW50cy4gSW5pdGlhbGl6ZXJzIHNob3VsZCByZXR1cm4gZWl0aGVyIDAgb24KK3N1Y2Nlc3Mgb3IgLTEgb24gZXJyb3IuCiAKIEluaXRpYWxpemVycyBjYW4gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiAgQW55b25lIGNhbiBjYWxsIHRoZSA6bWV0aDpgX19pbml0X19gCiBtZXRob2Qgb24gb3VyIG9iamVjdHMuICBGb3IgdGhpcyByZWFzb24sIHdlIGhhdmUgdG8gYmUgZXh0cmEgY2FyZWZ1bCB3aGVuCkBAIC04OTEsMjAgKzg5MywyMCBAQAogYWxsIHRoZSBmaWVsZHMgeW91IG5lZWQgKGV2ZW4gaWYgdGhleSdyZSBpbml0aWFsaXplZCB0byBgYDBgYCkgYW5kIHRoZW4gY2hhbmdlCiB0aGUgdmFsdWVzIHRvIHN1aXQgeW91ciBuZXcgdHlwZS4gOjoKIAotICAgY2hhciAqdHBfbmFtZTsgLyogRm9yIHByaW50aW5nICovCisgICBjb25zdCBjaGFyICp0cF9uYW1lOyAvKiBGb3IgcHJpbnRpbmcgKi8KIAogVGhlIG5hbWUgb2YgdGhlIHR5cGUgLSBhcyBtZW50aW9uZWQgaW4gdGhlIGxhc3Qgc2VjdGlvbiwgdGhpcyB3aWxsIGFwcGVhciBpbgogdmFyaW91cyBwbGFjZXMsIGFsbW9zdCBlbnRpcmVseSBmb3IgZGlhZ25vc3RpYyBwdXJwb3Nlcy4gVHJ5IHRvIGNob29zZSBzb21ldGhpbmcKIHRoYXQgd2lsbCBiZSBoZWxwZnVsIGluIHN1Y2ggYSBzaXR1YXRpb24hIDo6CiAKLSAgIGludCB0cF9iYXNpY3NpemUsIHRwX2l0ZW1zaXplOyAvKiBGb3IgYWxsb2NhdGlvbiAqLworICAgUHlfc3NpemVfdCB0cF9iYXNpY3NpemUsIHRwX2l0ZW1zaXplOyAvKiBGb3IgYWxsb2NhdGlvbiAqLwogCiBUaGVzZSBmaWVsZHMgdGVsbCB0aGUgcnVudGltZSBob3cgbXVjaCBtZW1vcnkgdG8gYWxsb2NhdGUgd2hlbiBuZXcgb2JqZWN0cyBvZgogdGhpcyB0eXBlIGFyZSBjcmVhdGVkLiAgUHl0aG9uIGhhcyBzb21lIGJ1aWx0LWluIHN1cHBvcnQgZm9yIHZhcmlhYmxlIGxlbmd0aAogc3RydWN0dXJlcyAodGhpbms6IHN0cmluZ3MsIGxpc3RzKSB3aGljaCBpcyB3aGVyZSB0aGUgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2l0ZW1zaXplYCBmaWVsZAogY29tZXMgaW4uICBUaGlzIHdpbGwgYmUgZGVhbHQgd2l0aCBsYXRlci4gOjoKIAotICAgY2hhciAqdHBfZG9jOworICAgY29uc3QgY2hhciAqdHBfZG9jOwogCiBIZXJlIHlvdSBjYW4gcHV0IGEgc3RyaW5nIChvciBpdHMgYWRkcmVzcykgdGhhdCB5b3Ugd2FudCByZXR1cm5lZCB3aGVuIHRoZQogUHl0aG9uIHNjcmlwdCByZWZlcmVuY2VzIGBgb2JqLl9fZG9jX19gYCB0byByZXRyaWV2ZSB0aGUgZG9jIHN0cmluZy4KQEAgLTkyOCw4ICs5MzAsOSBAQAogCiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgb2YgdGhlIGluc3RhbmNlIG9mIHlvdXIgdHlwZSBpcwogcmVkdWNlZCB0byB6ZXJvIGFuZCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhbnRzIHRvIHJlY2xhaW0gaXQuICBJZiB5b3VyIHR5cGUKLWhhcyBtZW1vcnkgdG8gZnJlZSBvciBvdGhlciBjbGVhbi11cCB0byBwZXJmb3JtLCBwdXQgaXQgaGVyZS4gIFRoZSBvYmplY3QgaXRzZWxmCi1uZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcyBmdW5jdGlvbjo6CitoYXMgbWVtb3J5IHRvIGZyZWUgb3Igb3RoZXIgY2xlYW4tdXAgdG8gcGVyZm9ybSwgeW91IGNhbiBwdXQgaXQgaGVyZS4gIFRoZQorb2JqZWN0IGl0c2VsZiBuZWVkcyB0byBiZSBmcmVlZCBoZXJlIGFzIHdlbGwuICBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgdGhpcworZnVuY3Rpb246OgogCiAgICBzdGF0aWMgdm9pZAogICAgbmV3ZGF0YXR5cGVfZGVhbGxvYyhuZXdkYXRhdHlwZW9iamVjdCAqIG9iaikKQEAgLTk4MCw2ICs5ODMsMjIgQEAKICAgICAgICBQeV9UWVBFKG9iaiktPnRwX2ZyZWUoKFB5T2JqZWN0KilzZWxmKTsKICAgIH0KIAorLi4gbm90ZTo6CisgICBUaGVyZSBhcmUgbGltaXRhdGlvbnMgdG8gd2hhdCB5b3UgY2FuIHNhZmVseSBkbyBpbiBhIGRlYWxsb2NhdG9yIGZ1bmN0aW9uLgorICAgRmlyc3QsIGlmIHlvdXIgdHlwZSBzdXBwb3J0cyBnYXJiYWdlIGNvbGxlY3Rpb24gKHVzaW5nIDpjOm1lbWJlcjpgflB5VHlwZU9iamVjdC50cF90cmF2ZXJzZWAKKyAgIGFuZC9vciA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfY2xlYXJgKSwgc29tZSBvZiB0aGUgb2JqZWN0J3MgbWVtYmVycyBjYW4gaGF2ZSBiZWVuCisgICBjbGVhcmVkIG9yIGZpbmFsaXplZCBieSB0aGUgdGltZSA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgaXMgY2FsbGVkLiAgU2Vjb25kLCBpbgorICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCB5b3VyIG9iamVjdCBpcyBpbiBhbiB1bnN0YWJsZSBzdGF0ZTogaXRzIHJlZmVyZW5jZQorICAgY291bnQgaXMgZXF1YWwgdG8gemVyby4gIEFueSBjYWxsIHRvIGEgbm9uLXRyaXZpYWwgb2JqZWN0IG9yIEFQSSAoYXMgaW4gdGhlCisgICBleGFtcGxlIGFib3ZlKSBtaWdodCBlbmQgdXAgY2FsbGluZyA6YzptZW1iZXI6YH5QeVR5cGVPYmplY3QudHBfZGVhbGxvY2AgYWdhaW4sIGNhdXNpbmcgYQorICAgZG91YmxlIGZyZWUgYW5kIGEgY3Jhc2guCisKKyAgIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgaXQgaXMgcmVjb21tZW5kZWQgbm90IHRvIHB1dCBhbnkgY29tcGxleAorICAgZmluYWxpemF0aW9uIGNvZGUgaW4gOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2RlYWxsb2NgLCBhbmQgaW5zdGVhZCB1c2UgdGhlIG5ldworICAgOmM6bWVtYmVyOmB+UHlUeXBlT2JqZWN0LnRwX2ZpbmFsaXplYCB0eXBlIG1ldGhvZC4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICA6cGVwOmA0NDJgIGV4cGxhaW5zIHRoZSBuZXcgZmluYWxpemF0aW9uIHNjaGVtZS4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBzdHJpbmc7IG9iamVjdCByZXByZXNlbnRhdGlvbgpAQCAtMTE4Nyw3ICsxMjA2LDcgQEAKICAgIHsKICAgICAgICBpZiAoc3RyY21wKG5hbWUsICJkYXRhIikgPT0gMCkKICAgICAgICB7Ci0gICAgICAgICAgIHJldHVybiBQeUludF9Gcm9tTG9uZyhvYmotPmRhdGEpOworICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKG9iai0+ZGF0YSk7CiAgICAgICAgfQogCiAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLApkaWZmIC0tZ2l0IGEvRG9jL2V4dGVuZGluZy93aW5kb3dzLnJzdCBiL0RvYy9leHRlbmRpbmcvd2luZG93cy5yc3QKaW5kZXggM2ZkNWU1Ny4uNjdiZGQ0NyAxMDA2NDQKLS0tIGEvRG9jL2V4dGVuZGluZy93aW5kb3dzLnJzdAorKysgYi9Eb2MvZXh0ZW5kaW5nL3dpbmRvd3MucnN0CkBAIC0zNywxNTAgKzM3LDkgQEAKIGFyZSBvbiBVbml4OiB1c2UgdGhlIDptb2Q6YGRpc3R1dGlsc2AgcGFja2FnZSB0byBjb250cm9sIHRoZSBidWlsZCBwcm9jZXNzLCBvcgogZG8gdGhpbmdzIG1hbnVhbGx5LiAgVGhlIGRpc3R1dGlscyBhcHByb2FjaCB3b3JrcyB3ZWxsIGZvciBtb3N0IGV4dGVuc2lvbnM7CiBkb2N1bWVudGF0aW9uIG9uIHVzaW5nIDptb2Q6YGRpc3R1dGlsc2AgdG8gYnVpbGQgYW5kIHBhY2thZ2UgZXh0ZW5zaW9uIG1vZHVsZXMKLWlzIGF2YWlsYWJsZSBpbiA6cmVmOmBkaXN0dXRpbHMtaW5kZXhgLiAgVGhpcyBzZWN0aW9uIGRlc2NyaWJlcyB0aGUgbWFudWFsCi1hcHByb2FjaCB0byBidWlsZGluZyBQeXRob24gZXh0ZW5zaW9ucyB3cml0dGVuIGluIEMgb3IgQysrLgotCi1UbyBidWlsZCBleHRlbnNpb25zIHVzaW5nIHRoZXNlIGluc3RydWN0aW9ucywgeW91IG5lZWQgdG8gaGF2ZSBhIGNvcHkgb2YgdGhlCi1QeXRob24gc291cmNlcyBvZiB0aGUgc2FtZSB2ZXJzaW9uIGFzIHlvdXIgaW5zdGFsbGVkIFB5dGhvbi4gWW91IHdpbGwgbmVlZAotTWljcm9zb2Z0IFZpc3VhbCBDKysgIkRldmVsb3BlciBTdHVkaW8iOyBwcm9qZWN0IGZpbGVzIGFyZSBzdXBwbGllZCBmb3IgVkMrKwotdmVyc2lvbiA3LjEsIGJ1dCB5b3UgY2FuIHVzZSBvbGRlciB2ZXJzaW9ucyBvZiBWQysrLiAgTm90aWNlIHRoYXQgeW91IHNob3VsZCB1c2UKLXRoZSBzYW1lIHZlcnNpb24gb2YgVkMrK3RoYXQgd2FzIHVzZWQgdG8gYnVpbGQgUHl0aG9uIGl0c2VsZi4gVGhlIGV4YW1wbGUgZmlsZXMKLWRlc2NyaWJlZCBoZXJlIGFyZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBQeXRob24gc291cmNlcyBpbiB0aGUKLTpmaWxlOmBQQ1xcZXhhbXBsZV9udFxcYCBkaXJlY3RvcnkuCi0KLSMuICoqQ29weSB0aGUgZXhhbXBsZSBmaWxlcyoqIC0tLSAgVGhlIDpmaWxlOmBleGFtcGxlX250YCBkaXJlY3RvcnkgaXMgYQotICAgc3ViZGlyZWN0b3J5IG9mIHRoZSA6ZmlsZTpgUENgIGRpcmVjdG9yeSwgaW4gb3JkZXIgdG8ga2VlcCBhbGwgdGhlIFBDLXNwZWNpZmljCi0gICBmaWxlcyB1bmRlciB0aGUgc2FtZSBkaXJlY3RvcnkgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uICBIb3dldmVyLCB0aGUKLSAgIDpmaWxlOmBleGFtcGxlX250YCBkaXJlY3RvcnkgY2FuJ3QgYWN0dWFsbHkgYmUgdXNlZCBmcm9tIHRoaXMgbG9jYXRpb24uICBZb3UKLSAgIGZpcnN0IG5lZWQgdG8gY29weSBvciBtb3ZlIGl0IHVwIG9uZSBsZXZlbCwgc28gdGhhdCA6ZmlsZTpgZXhhbXBsZV9udGAgaXMgYQotICAgc2libGluZyBvZiB0aGUgOmZpbGU6YFBDYCBhbmQgOmZpbGU6YEluY2x1ZGVgIGRpcmVjdG9yaWVzLiAgRG8gYWxsIHlvdXIgd29yawotICAgZnJvbSB3aXRoaW4gdGhpcyBuZXcgbG9jYXRpb24uCi0KLSMuICoqT3BlbiB0aGUgcHJvamVjdCoqIC0tLSAgRnJvbSBWQysrLCB1c2UgdGhlIDptZW51c2VsZWN0aW9uOmBGaWxlIC0tPiBPcGVuCi0gICBTb2x1dGlvbmAgZGlhbG9nIChub3QgOm1lbnVzZWxlY3Rpb246YEZpbGUgLS0+IE9wZW5gISkuICBOYXZpZ2F0ZSB0byBhbmQgc2VsZWN0Ci0gICB0aGUgZmlsZSA6ZmlsZTpgZXhhbXBsZS5zbG5gLCBpbiB0aGUgKmNvcHkqIG9mIHRoZSA6ZmlsZTpgZXhhbXBsZV9udGAgZGlyZWN0b3J5Ci0gICB5b3UgbWFkZSBhYm92ZS4gIENsaWNrIE9wZW4uCi0KLSMuICoqQnVpbGQgdGhlIGV4YW1wbGUgRExMKiogLS0tICBJbiBvcmRlciB0byBjaGVjayB0aGF0IGV2ZXJ5dGhpbmcgaXMgc2V0IHVwCi0gICByaWdodCwgdHJ5IGJ1aWxkaW5nOgotCi0jLiBTZWxlY3QgYSBjb25maWd1cmF0aW9uLiAgVGhpcyBzdGVwIGlzIG9wdGlvbmFsLiAgQ2hvb3NlCi0gICA6bWVudXNlbGVjdGlvbjpgQnVpbGQgLS0+IENvbmZpZ3VyYXRpb24gTWFuYWdlciAtLT4gQWN0aXZlIFNvbHV0aW9uIENvbmZpZ3VyYXRpb25gCi0gICBhbmQgc2VsZWN0IGVpdGhlciA6Z3VpbGFiZWw6YFJlbGVhc2VgICBvciA6Z3VpbGFiZWw6YERlYnVnYC4gIElmIHlvdSBza2lwIHRoaXMKLSAgIHN0ZXAsIFZDKysgd2lsbCB1c2UgdGhlIERlYnVnIGNvbmZpZ3VyYXRpb24gYnkgZGVmYXVsdC4KLQotIy4gQnVpbGQgdGhlIERMTC4gIENob29zZSA6bWVudXNlbGVjdGlvbjpgQnVpbGQgLS0+IEJ1aWxkIFNvbHV0aW9uYC4gIFRoaXMKLSAgIGNyZWF0ZXMgYWxsIGludGVybWVkaWF0ZSBhbmQgcmVzdWx0IGZpbGVzIGluIGEgc3ViZGlyZWN0b3J5IGNhbGxlZCBlaXRoZXIKLSAgIDpmaWxlOmBEZWJ1Z2Agb3IgOmZpbGU6YFJlbGVhc2VgLCBkZXBlbmRpbmcgb24gd2hpY2ggY29uZmlndXJhdGlvbiB5b3Ugc2VsZWN0ZWQKLSAgIGluIHRoZSBwcmVjZWRpbmcgc3RlcC4KLQotIy4gKipUZXN0aW5nIHRoZSBkZWJ1Zy1tb2RlIERMTCoqIC0tLSAgT25jZSB0aGUgRGVidWcgYnVpbGQgaGFzIHN1Y2NlZWRlZCwgYnJpbmcKLSAgIHVwIGEgRE9TIGJveCwgYW5kIGNoYW5nZSB0byB0aGUgOmZpbGU6YGV4YW1wbGVfbnRcXERlYnVnYCBkaXJlY3RvcnkuICBZb3Ugc2hvdWxkCi0gICBub3cgYmUgYWJsZSB0byByZXBlYXQgdGhlIGZvbGxvd2luZyBzZXNzaW9uIChgYEM+YGAgaXMgdGhlIERPUyBwcm9tcHQsIGBgPj4+YGAKLSAgIGlzIHRoZSBQeXRob24gcHJvbXB0OyBub3RlIHRoYXQgYnVpbGQgaW5mb3JtYXRpb24gYW5kIHZhcmlvdXMgZGVidWcgb3V0cHV0IGZyb20KLSAgIFB5dGhvbiBtYXkgbm90IG1hdGNoIHRoaXMgc2NyZWVuIGR1bXAgZXhhY3RseSk6OgotCi0gICAgICBDPi4uXC4uXFBDYnVpbGRccHl0aG9uX2QKLSAgICAgIEFkZGluZyBwYXJzZXIgYWNjZWxlcmF0b3JzIC4uLgotICAgICAgRG9uZS4KLSAgICAgIFB5dGhvbiAyLjIgKCMyOCwgRGVjIDE5IDIwMDEsIDIzOjI2OjM3KSBbTVNDIDMyIGJpdCAoSW50ZWwpXSBvbiB3aW4zMgotICAgICAgVHlwZSAiY29weXJpZ2h0IiwgImNyZWRpdHMiIG9yICJsaWNlbnNlIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAgICAgID4+PiBpbXBvcnQgZXhhbXBsZQotICAgICAgWzQ4OTcgcmVmc10KLSAgICAgID4+PiBleGFtcGxlLmZvbygpCi0gICAgICBIZWxsbywgd29ybGQKLSAgICAgIFs0OTAzIHJlZnNdCi0gICAgICA+Pj4KLQotICAgQ29uZ3JhdHVsYXRpb25zISAgWW91J3ZlIHN1Y2Nlc3NmdWxseSBidWlsdCB5b3VyIGZpcnN0IFB5dGhvbiBleHRlbnNpb24gbW9kdWxlLgotCi0jLiAqKkNyZWF0aW5nIHlvdXIgb3duIHByb2plY3QqKiAtLS0gIENob29zZSBhIG5hbWUgYW5kIGNyZWF0ZSBhIGRpcmVjdG9yeSBmb3IKLSAgIGl0LiAgQ29weSB5b3VyIEMgc291cmNlcyBpbnRvIGl0LiAgTm90ZSB0aGF0IHRoZSBtb2R1bGUgc291cmNlIGZpbGUgbmFtZSBkb2VzCi0gICBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBtYXRjaCB0aGUgbW9kdWxlIG5hbWUsIGJ1dCB0aGUgbmFtZSBvZiB0aGUKLSAgIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIHNob3VsZCBtYXRjaCB0aGUgbW9kdWxlIG5hbWUgLS0tIHlvdSBjYW4gb25seSBpbXBvcnQgYQotICAgbW9kdWxlIDptb2Q6YHNwYW1gIGlmIGl0cyBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiBpcyBjYWxsZWQgOmM6ZnVuYzpgaW5pdHNwYW1gLAotICAgYW5kIGl0IHNob3VsZCBjYWxsIDpjOmZ1bmM6YFB5X0luaXRNb2R1bGVgIHdpdGggdGhlIHN0cmluZyBgYCJzcGFtImBgIGFzIGl0cwotICAgZmlyc3QgYXJndW1lbnQgKHVzZSB0aGUgbWluaW1hbCA6ZmlsZTpgZXhhbXBsZS5jYCBpbiB0aGlzIGRpcmVjdG9yeSBhcyBhIGd1aWRlKS4KLSAgIEJ5IGNvbnZlbnRpb24sIGl0IGxpdmVzIGluIGEgZmlsZSBjYWxsZWQgOmZpbGU6YHNwYW0uY2Agb3IgOmZpbGU6YHNwYW1tb2R1bGUuY2AuCi0gICBUaGUgb3V0cHV0IGZpbGUgc2hvdWxkIGJlIGNhbGxlZCA6ZmlsZTpgc3BhbS5weWRgIChpbiBSZWxlYXNlIG1vZGUpIG9yCi0gICA6ZmlsZTpgc3BhbV9kLnB5ZGAgKGluIERlYnVnIG1vZGUpLiBUaGUgZXh0ZW5zaW9uIDpmaWxlOmAucHlkYCB3YXMgY2hvc2VuCi0gICB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBhIHN5c3RlbSBsaWJyYXJ5IDpmaWxlOmBzcGFtLmRsbGAgdG8gd2hpY2ggeW91ciBtb2R1bGUKLSAgIGNvdWxkIGJlIGEgUHl0aG9uIGludGVyZmFjZS4KLQotICAgTm93IHlvdXIgb3B0aW9ucyBhcmU6Ci0KLSMuIENvcHkgOmZpbGU6YGV4YW1wbGUuc2xuYCBhbmQgOmZpbGU6YGV4YW1wbGUudmNwcm9qYCwgcmVuYW1lIHRoZW0gdG8KLSAgIDpmaWxlOmBzcGFtLlwqYCwgYW5kIGVkaXQgdGhlbSBieSBoYW5kLCBvcgotCi0jLiBDcmVhdGUgYSBicmFuZCBuZXcgcHJvamVjdDsgaW5zdHJ1Y3Rpb25zIGFyZSBiZWxvdy4KLQotICAgSW4gZWl0aGVyIGNhc2UsIGNvcHkgOmZpbGU6YGV4YW1wbGVfbnRcXGV4YW1wbGUuZGVmYCB0byA6ZmlsZTpgc3BhbVxcc3BhbS5kZWZgLAotICAgYW5kIGVkaXQgdGhlIG5ldyA6ZmlsZTpgc3BhbS5kZWZgIHNvIGl0cyBzZWNvbmQgbGluZSBjb250YWlucyB0aGUgc3RyaW5nCi0gICAnYGBpbml0c3BhbWBgJy4gIElmIHlvdSBjcmVhdGVkIGEgbmV3IHByb2plY3QgeW91cnNlbGYsIGFkZCB0aGUgZmlsZQotICAgOmZpbGU6YHNwYW0uZGVmYCB0byB0aGUgcHJvamVjdCBub3cuICAoVGhpcyBpcyBhbiBhbm5veWluZyBsaXR0bGUgZmlsZSB3aXRoIG9ubHkKLSAgIHR3byBsaW5lcy4gIEFuIGFsdGVybmF0aXZlIGFwcHJvYWNoIGlzIHRvIGZvcmdldCBhYm91dCB0aGUgOmZpbGU6YC5kZWZgIGZpbGUsCi0gICBhbmQgYWRkIHRoZSBvcHRpb24gOm9wdGlvbjpgL2V4cG9ydDppbml0c3BhbWAgc29tZXdoZXJlIHRvIHRoZSBMaW5rIHNldHRpbmdzLCBieQotICAgbWFudWFsbHkgZWRpdGluZyB0aGUgc2V0dGluZyBpbiBQcm9qZWN0IFByb3BlcnRpZXMgZGlhbG9nKS4KLQotIy4gKipDcmVhdGluZyBhIGJyYW5kIG5ldyBwcm9qZWN0KiogLS0tICBVc2UgdGhlIDptZW51c2VsZWN0aW9uOmBGaWxlIC0tPiBOZXcKLSAgIC0tPiBQcm9qZWN0YCBkaWFsb2cgdG8gY3JlYXRlIGEgbmV3IFByb2plY3QgV29ya3NwYWNlLiAgU2VsZWN0IDpndWlsYWJlbDpgVmlzdWFsCi0gICBDKysgUHJvamVjdHMvV2luMzIvIFdpbjMyIFByb2plY3RgLCBlbnRlciB0aGUgbmFtZSAoYGBzcGFtYGApLCBhbmQgbWFrZSBzdXJlIHRoZQotICAgTG9jYXRpb24gaXMgc2V0IHRvIHBhcmVudCBvZiB0aGUgOmZpbGU6YHNwYW1gIGRpcmVjdG9yeSB5b3UgaGF2ZSBjcmVhdGVkICh3aGljaAotICAgc2hvdWxkIGJlIGEgZGlyZWN0IHN1YmRpcmVjdG9yeSBvZiB0aGUgUHl0aG9uIGJ1aWxkIHRyZWUsIGEgc2libGluZyBvZgotICAgOmZpbGU6YEluY2x1ZGVgIGFuZCA6ZmlsZTpgUENgKS4gIFNlbGVjdCBXaW4zMiBhcyB0aGUgcGxhdGZvcm0gKGluIG15IHZlcnNpb24sCi0gICB0aGlzIGlzIHRoZSBvbmx5IGNob2ljZSkuICBNYWtlIHN1cmUgdGhlIENyZWF0ZSBuZXcgd29ya3NwYWNlIHJhZGlvIGJ1dHRvbiBpcwotICAgc2VsZWN0ZWQuICBDbGljayBPSy4KLQotICAgWW91IHNob3VsZCBub3cgY3JlYXRlIHRoZSBmaWxlIDpmaWxlOmBzcGFtLmRlZmAgYXMgaW5zdHJ1Y3RlZCBpbiB0aGUgcHJldmlvdXMKLSAgIHNlY3Rpb24uIEFkZCB0aGUgc291cmNlIGZpbGVzIHRvIHRoZSBwcm9qZWN0LCB1c2luZyA6bWVudXNlbGVjdGlvbjpgUHJvamVjdCAtLT4KLSAgIEFkZCBFeGlzdGluZyBJdGVtYC4gU2V0IHRoZSBwYXR0ZXJuIHRvIGBgKi4qYGAgYW5kIHNlbGVjdCBib3RoIDpmaWxlOmBzcGFtLmNgCi0gICBhbmQgOmZpbGU6YHNwYW0uZGVmYCBhbmQgY2xpY2sgT0suICAoSW5zZXJ0aW5nIHRoZW0gb25lIGJ5IG9uZSBpcyBmaW5lIHRvby4pCi0KLSAgIE5vdyBvcGVuIHRoZSA6bWVudXNlbGVjdGlvbjpgUHJvamVjdCAtLT4gc3BhbSBwcm9wZXJ0aWVzYCBkaWFsb2cuIFlvdSBvbmx5IG5lZWQKLSAgIHRvIGNoYW5nZSBhIGZldyBzZXR0aW5ncy4gIE1ha2Ugc3VyZSA6Z3VpbGFiZWw6YEFsbCBDb25maWd1cmF0aW9uc2AgaXMgc2VsZWN0ZWQKLSAgIGZyb20gdGhlIDpndWlsYWJlbDpgU2V0dGluZ3MgZm9yOmAgZHJvcGRvd24gbGlzdC4gIFNlbGVjdCB0aGUgQy9DKysgdGFiLiAgQ2hvb3NlCi0gICB0aGUgR2VuZXJhbCBjYXRlZ29yeSBpbiB0aGUgcG9wdXAgbWVudSBhdCB0aGUgdG9wLiAgVHlwZSB0aGUgZm9sbG93aW5nIHRleHQgaW4KLSAgIHRoZSBlbnRyeSBib3ggbGFiZWxlZCA6Z3VpbGFiZWw6YEFkZGl0aW9uYWwgSW5jbHVkZSBEaXJlY3Rvcmllc2A6OgotCi0gICAgICAuLlxJbmNsdWRlLC4uXFBDCi0KLSAgIFRoZW4sIGNob29zZSB0aGUgR2VuZXJhbCBjYXRlZ29yeSBpbiB0aGUgTGlua2VyIHRhYiwgYW5kIGVudGVyIDo6Ci0KLSAgICAgIC4uXFBDYnVpbGQKLQotICAgaW4gdGhlIHRleHQgYm94IGxhYmVsbGVkIDpndWlsYWJlbDpgQWRkaXRpb25hbCBsaWJyYXJ5IERpcmVjdG9yaWVzYC4KLQotICAgTm93IHlvdSBuZWVkIHRvIGFkZCBzb21lIG1vZGUtc3BlY2lmaWMgc2V0dGluZ3M6Ci0KLSAgIFNlbGVjdCA6Z3VpbGFiZWw6YFJlbGVhc2VgIGluIHRoZSA6Z3VpbGFiZWw6YENvbmZpZ3VyYXRpb25gIGRyb3Bkb3duIGxpc3QuCi0gICBDaG9vc2UgdGhlIDpndWlsYWJlbDpgTGlua2AgdGFiLCBjaG9vc2UgdGhlIDpndWlsYWJlbDpgSW5wdXRgIGNhdGVnb3J5LCBhbmQKLSAgIGFwcGVuZCBgYHB5dGhvblhZLmxpYmBgIHRvIHRoZSBsaXN0IGluIHRoZSA6Z3VpbGFiZWw6YEFkZGl0aW9uYWwgRGVwZW5kZW5jaWVzYAotICAgYm94LgotCi0gICBTZWxlY3QgOmd1aWxhYmVsOmBEZWJ1Z2AgaW4gdGhlIDpndWlsYWJlbDpgQ29uZmlndXJhdGlvbmAgZHJvcGRvd24gbGlzdCwgYW5kCi0gICBhcHBlbmQgYGBweXRob25YWV9kLmxpYmBgIHRvIHRoZSBsaXN0IGluIHRoZSA6Z3VpbGFiZWw6YEFkZGl0aW9uYWwgRGVwZW5kZW5jaWVzYAotICAgYm94LiAgVGhlbiBjbGljayB0aGUgQy9DKysgdGFiLCBzZWxlY3QgOmd1aWxhYmVsOmBDb2RlIEdlbmVyYXRpb25gLCBhbmQgc2VsZWN0Ci0gICA6Z3VpbGFiZWw6YE11bHRpLXRocmVhZGVkIERlYnVnIERMTGAgZnJvbSB0aGUgOmd1aWxhYmVsOmBSdW50aW1lIGxpYnJhcnlgCi0gICBkcm9wZG93biBsaXN0LgotCi0gICBTZWxlY3QgOmd1aWxhYmVsOmBSZWxlYXNlYCBhZ2FpbiBmcm9tIHRoZSA6Z3VpbGFiZWw6YENvbmZpZ3VyYXRpb25gIGRyb3Bkb3duCi0gICBsaXN0LiAgU2VsZWN0IDpndWlsYWJlbDpgTXVsdGktdGhyZWFkZWQgRExMYCBmcm9tIHRoZSA6Z3VpbGFiZWw6YFJ1bnRpbWUKLSAgIGxpYnJhcnlgIGRyb3Bkb3duIGxpc3QuCi0KLUlmIHlvdXIgbW9kdWxlIGNyZWF0ZXMgYSBuZXcgdHlwZSwgeW91IG1heSBoYXZlIHRyb3VibGUgd2l0aCB0aGlzIGxpbmU6OgotCi0gICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotCi1TdGF0aWMgdHlwZSBvYmplY3QgaW5pdGlhbGl6ZXJzIGluIGV4dGVuc2lvbiBtb2R1bGVzIG1heSBjYXVzZQotY29tcGlsZXMgdG8gZmFpbCB3aXRoIGFuIGVycm9yIG1lc3NhZ2UgbGlrZSAiaW5pdGlhbGl6ZXIgbm90IGEKLWNvbnN0YW50Ii4gIFRoaXMgc2hvd3MgdXAgd2hlbiBidWlsZGluZyBETEwgdW5kZXIgTVNWQy4gIENoYW5nZSBpdCB0bzo6Ci0KLSAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotCi1hbmQgYWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbjo6Ci0KLSAgIGlmIChQeVR5cGVfUmVhZHkoJk15T2JqZWN0X1R5cGUpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitpcyBhdmFpbGFibGUgaW4gOnJlZjpgZGlzdHV0aWxzLWluZGV4YC4gIElmIHlvdSBmaW5kIHlvdSByZWFsbHkgbmVlZCB0byBkbwordGhpbmdzIG1hbnVhbGx5LCBpdCBtYXkgYmUgaW5zdHJ1Y3RpdmUgdG8gc3R1ZHkgdGhlIHByb2plY3QgZmlsZSBmb3IgdGhlCis6c291cmNlOmB3aW5zb3VuZCA8UENidWlsZC93aW5zb3VuZC52Y3hwcm9qPmAgc3RhbmRhcmQgbGlicmFyeSBtb2R1bGUuCiAKIAogLi4gX2R5bmFtaWMtbGlua2luZzoKZGlmZiAtLWdpdCBhL0RvYy9mYXEvZGVzaWduLnJzdCBiL0RvYy9mYXEvZGVzaWduLnJzdAppbmRleCA0OWUwYzZkLi45ZmRmOGNiIDEwMDY0NAotLS0gYS9Eb2MvZmFxL2Rlc2lnbi5yc3QKKysrIGIvRG9jL2ZhcS9kZXNpZ24ucnN0CkBAIC00OSw3ICs0OSw3IEBACiBVc2VycyBhcmUgb2Z0ZW4gc3VycHJpc2VkIGJ5IHJlc3VsdHMgbGlrZSB0aGlzOjoKIAogICAgID4+PiAxLjIgLSAxLjAKLSAgICAwLjE5OTk5OTk5OTk5OTk5OTk5NgorICAgIDAuMTk5OTk5OTk5OTk5OTk5OTYKIAogYW5kIHRoaW5rIGl0IGlzIGEgYnVnIGluIFB5dGhvbi4gIEl0J3Mgbm90LiAgVGhpcyBoYXMgbGl0dGxlIHRvIGRvIHdpdGggUHl0aG9uLAogYW5kIG11Y2ggbW9yZSB0byBkbyB3aXRoIGhvdyB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSBoYW5kbGVzIGZsb2F0aW5nLXBvaW50CkBAIC0zNjgsOSArMzY4LDkgQEAKIAogUHJhY3RpY2FsIGFuc3dlcjoKIAotYEN5dGhvbiA8aHR0cDovL2N5dGhvbi5vcmcvPmBfIGFuZCBgUHlyZXggPGh0dHA6Ly93d3cuY29zYy5jYW50ZXJidXJ5LmFjLm56L35ncmVnL3B5dGhvbi9QeXJleC8+YF8KK2BDeXRob24gPGh0dHA6Ly9jeXRob24ub3JnLz5gXyBhbmQgYFB5cmV4IDxodHRwOi8vd3d3LmNvc2MuY2FudGVyYnVyeS5hYy5uei9ncmVnLmV3aW5nL3B5dGhvbi9QeXJleC8+YF8KIGNvbXBpbGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIFB5dGhvbiB3aXRoIG9wdGlvbmFsIGFubm90YXRpb25zIGludG8gQwotZXh0ZW5zaW9ucy4gIGBXZWF2ZSA8aHR0cDovL3d3dy5zY2lweS5vcmcvV2VhdmU+YF8gbWFrZXMgaXQgZWFzeSB0bworZXh0ZW5zaW9ucy4gIGBXZWF2ZSA8aHR0cDovL2RvY3Muc2NpcHkub3JnL2RvYy9zY2lweS1kZXYvcmVmZXJlbmNlL3R1dG9yaWFsL3dlYXZlLmh0bWw+YF8gbWFrZXMgaXQgZWFzeSB0bwogaW50ZXJtaW5nbGUgUHl0aG9uIGFuZCBDIGNvZGUgaW4gdmFyaW91cyB3YXlzIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlLgogYE51aXRrYSA8aHR0cDovL3d3dy5udWl0a2EubmV0Lz5gXyBpcyBhbiB1cC1hbmQtY29taW5nIGNvbXBpbGVyIG9mIFB5dGhvbgogaW50byBDKysgY29kZSwgYWltaW5nIHRvIHN1cHBvcnQgdGhlIGZ1bGwgUHl0aG9uIGxhbmd1YWdlLgpAQCAtMzg2LDEzICszODYsMTMgQEAKIG9wZXJhdGlvbnMgbGlrZSBgYHgrMWBgLgogCiBTZXZlcmFsIHByb2plY3RzIGRlc2NyaWJlZCBpbiB0aGUgUHl0aG9uIG5ld3Nncm91cCBvciBhdCBwYXN0IGBQeXRob24KLWNvbmZlcmVuY2VzIDxodHRwOi8vcHl0aG9uLm9yZy9jb21tdW5pdHkvd29ya3Nob3BzLz5gXyBoYXZlIHNob3duIHRoYXQgdGhpcworY29uZmVyZW5jZXMgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvY29tbXVuaXR5L3dvcmtzaG9wcy8+YF8gaGF2ZSBzaG93biB0aGF0IHRoaXMKIGFwcHJvYWNoIGlzIGZlYXNpYmxlLCBhbHRob3VnaCB0aGUgc3BlZWR1cHMgcmVhY2hlZCBzbyBmYXIgYXJlIG9ubHkgbW9kZXN0CiAoZS5nLiAyeCkuICBKeXRob24gdXNlcyB0aGUgc2FtZSBzdHJhdGVneSBmb3IgY29tcGlsaW5nIHRvIEphdmEgYnl0ZWNvZGUuICAoSmltCiBIdWd1bmluIGhhcyBkZW1vbnN0cmF0ZWQgdGhhdCBpbiBjb21iaW5hdGlvbiB3aXRoIHdob2xlLXByb2dyYW0gYW5hbHlzaXMsCiBzcGVlZHVwcyBvZiAxMDAweCBhcmUgZmVhc2libGUgZm9yIHNtYWxsIGRlbW8gcHJvZ3JhbXMuICBTZWUgdGhlIHByb2NlZWRpbmdzCiBmcm9tIHRoZSBgMTk5NyBQeXRob24gY29uZmVyZW5jZQotPGh0dHA6Ly9weXRob24ub3JnL3dvcmtzaG9wcy8xOTk3LTEwL3Byb2NlZWRpbmdzLz5gXyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4pCis8aHR0cDovL2xlZ2FjeS5weXRob24ub3JnL3dvcmtzaG9wcy8xOTk3LTEwL3Byb2NlZWRpbmdzLz5gXyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4pCiAKIAogSG93IGRvZXMgUHl0aG9uIG1hbmFnZSBtZW1vcnk/CkBAIC02NjQsNjIgKzY2NCw2IEBACiBzbG9wcHkgYW5kIG5vdCB3cml0ZSB0ZXN0IGNhc2VzIGF0IGFsbC4KIAogCi1XaHkgYXJlIGRlZmF1bHQgdmFsdWVzIHNoYXJlZCBiZXR3ZWVuIG9iamVjdHM/Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgdHlwZSBvZiBidWcgY29tbW9ubHkgYml0ZXMgbmVvcGh5dGUgcHJvZ3JhbW1lcnMuICBDb25zaWRlciB0aGlzIGZ1bmN0aW9uOjoKLQotICAgZGVmIGZvbyhteWRpY3Q9e30pOiAgIyBEYW5nZXI6IHNoYXJlZCByZWZlcmVuY2UgdG8gb25lIGRpY3QgZm9yIGFsbCBjYWxscwotICAgICAgIC4uLiBjb21wdXRlIHNvbWV0aGluZyAuLi4KLSAgICAgICBteWRpY3Rba2V5XSA9IHZhbHVlCi0gICAgICAgcmV0dXJuIG15ZGljdAotCi1UaGUgZmlyc3QgdGltZSB5b3UgY2FsbCB0aGlzIGZ1bmN0aW9uLCBgYG15ZGljdGBgIGNvbnRhaW5zIGEgc2luZ2xlIGl0ZW0uICBUaGUKLXNlY29uZCB0aW1lLCBgYG15ZGljdGBgIGNvbnRhaW5zIHR3byBpdGVtcyBiZWNhdXNlIHdoZW4gYGBmb28oKWBgIGJlZ2lucwotZXhlY3V0aW5nLCBgYG15ZGljdGBgIHN0YXJ0cyBvdXQgd2l0aCBhbiBpdGVtIGFscmVhZHkgaW4gaXQuCi0KLUl0IGlzIG9mdGVuIGV4cGVjdGVkIHRoYXQgYSBmdW5jdGlvbiBjYWxsIGNyZWF0ZXMgbmV3IG9iamVjdHMgZm9yIGRlZmF1bHQKLXZhbHVlcy4gVGhpcyBpcyBub3Qgd2hhdCBoYXBwZW5zLiBEZWZhdWx0IHZhbHVlcyBhcmUgY3JlYXRlZCBleGFjdGx5IG9uY2UsIHdoZW4KLXRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLiAgSWYgdGhhdCBvYmplY3QgaXMgY2hhbmdlZCwgbGlrZSB0aGUgZGljdGlvbmFyeSBpbiB0aGlzCi1leGFtcGxlLCBzdWJzZXF1ZW50IGNhbGxzIHRvIHRoZSBmdW5jdGlvbiB3aWxsIHJlZmVyIHRvIHRoaXMgY2hhbmdlZCBvYmplY3QuCi0KLUJ5IGRlZmluaXRpb24sIGltbXV0YWJsZSBvYmplY3RzIHN1Y2ggYXMgbnVtYmVycywgc3RyaW5ncywgdHVwbGVzLCBhbmQgYGBOb25lYGAsCi1hcmUgc2FmZSBmcm9tIGNoYW5nZS4gQ2hhbmdlcyB0byBtdXRhYmxlIG9iamVjdHMgc3VjaCBhcyBkaWN0aW9uYXJpZXMsIGxpc3RzLAotYW5kIGNsYXNzIGluc3RhbmNlcyBjYW4gbGVhZCB0byBjb25mdXNpb24uCi0KLUJlY2F1c2Ugb2YgdGhpcyBmZWF0dXJlLCBpdCBpcyBnb29kIHByb2dyYW1taW5nIHByYWN0aWNlIHRvIG5vdCB1c2UgbXV0YWJsZQotb2JqZWN0cyBhcyBkZWZhdWx0IHZhbHVlcy4gIEluc3RlYWQsIHVzZSBgYE5vbmVgYCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQKLWluc2lkZSB0aGUgZnVuY3Rpb24sIGNoZWNrIGlmIHRoZSBwYXJhbWV0ZXIgaXMgYGBOb25lYGAgYW5kIGNyZWF0ZSBhIG5ldwotbGlzdC9kaWN0aW9uYXJ5L3doYXRldmVyIGlmIGl0IGlzLiAgRm9yIGV4YW1wbGUsIGRvbid0IHdyaXRlOjoKLQotICAgZGVmIGZvbyhteWRpY3Q9e30pOgotICAgICAgIC4uLgotCi1idXQ6OgotCi0gICBkZWYgZm9vKG15ZGljdD1Ob25lKToKLSAgICAgICBpZiBteWRpY3QgaXMgTm9uZToKLSAgICAgICAgICAgbXlkaWN0ID0ge30gICMgY3JlYXRlIGEgbmV3IGRpY3QgZm9yIGxvY2FsIG5hbWVzcGFjZQotCi1UaGlzIGZlYXR1cmUgY2FuIGJlIHVzZWZ1bC4gIFdoZW4geW91IGhhdmUgYSBmdW5jdGlvbiB0aGF0J3MgdGltZS1jb25zdW1pbmcgdG8KLWNvbXB1dGUsIGEgY29tbW9uIHRlY2huaXF1ZSBpcyB0byBjYWNoZSB0aGUgcGFyYW1ldGVycyBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZQotb2YgZWFjaCBjYWxsIHRvIHRoZSBmdW5jdGlvbiwgYW5kIHJldHVybiB0aGUgY2FjaGVkIHZhbHVlIGlmIHRoZSBzYW1lIHZhbHVlIGlzCi1yZXF1ZXN0ZWQgYWdhaW4uICBUaGlzIGlzIGNhbGxlZCAibWVtb2l6aW5nIiwgYW5kIGNhbiBiZSBpbXBsZW1lbnRlZCBsaWtlIHRoaXM6OgotCi0gICAjIENhbGxlcnMgd2lsbCBuZXZlciBwcm92aWRlIGEgdGhpcmQgcGFyYW1ldGVyIGZvciB0aGlzIGZ1bmN0aW9uLgotICAgZGVmIGV4cGVuc2l2ZShhcmcxLCBhcmcyLCBfY2FjaGU9e30pOgotICAgICAgIGlmIChhcmcxLCBhcmcyKSBpbiBfY2FjaGU6Ci0gICAgICAgICAgIHJldHVybiBfY2FjaGVbKGFyZzEsIGFyZzIpXQotCi0gICAgICAgIyBDYWxjdWxhdGUgdGhlIHZhbHVlCi0gICAgICAgcmVzdWx0ID0gLi4uIGV4cGVuc2l2ZSBjb21wdXRhdGlvbiAuLi4KLSAgICAgICBfY2FjaGVbKGFyZzEsIGFyZzIpXSA9IHJlc3VsdCAgICAgICAgICAgIyBTdG9yZSByZXN1bHQgaW4gdGhlIGNhY2hlCi0gICAgICAgcmV0dXJuIHJlc3VsdAotCi1Zb3UgY291bGQgdXNlIGEgZ2xvYmFsIHZhcmlhYmxlIGNvbnRhaW5pbmcgYSBkaWN0aW9uYXJ5IGluc3RlYWQgb2YgdGhlIGRlZmF1bHQKLXZhbHVlOyBpdCdzIGEgbWF0dGVyIG9mIHRhc3RlLgotCi0KIFdoeSBpcyB0aGVyZSBubyBnb3RvPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvYy9mYXEvZXh0ZW5kaW5nLnJzdCBiL0RvYy9mYXEvZXh0ZW5kaW5nLnJzdAppbmRleCBhOWEyMzRiLi43YmI0ZGMyIDEwMDY0NAotLS0gYS9Eb2MvZmFxL2V4dGVuZGluZy5yc3QKKysrIGIvRG9jL2ZhcS9leHRlbmRpbmcucnN0CkBAIC00Miw3ICs0Miw3IEBACiAuLiBYWFggbWFrZSBzdXJlIHRoZXNlIGFsbCB3b3JrCiAKIGBDeXRob24gPGh0dHA6Ly9jeXRob24ub3JnPmBfIGFuZCBpdHMgcmVsYXRpdmUgYFB5cmV4Ci08aHR0cDovL3d3dy5jb3NjLmNhbnRlcmJ1cnkuYWMubnovfmdyZWcvcHl0aG9uL1B5cmV4Lz5gXyBhcmUgY29tcGlsZXJzCis8aHR0cDovL3d3dy5jb3NjLmNhbnRlcmJ1cnkuYWMubnovZ3JlZy5ld2luZy9weXRob24vUHlyZXgvPmBfIGFyZSBjb21waWxlcnMKIHRoYXQgYWNjZXB0IGEgc2xpZ2h0bHkgbW9kaWZpZWQgZm9ybSBvZiBQeXRob24gYW5kIGdlbmVyYXRlIHRoZSBjb3JyZXNwb25kaW5nCiBDIGNvZGUuICBDeXRob24gYW5kIFB5cmV4IG1ha2UgaXQgcG9zc2libGUgdG8gd3JpdGUgYW4gZXh0ZW5zaW9uIHdpdGhvdXQgaGF2aW5nCiB0byBsZWFybiBQeXRob24ncyBDIEFQSS4KQEAgLTUwLDExICs1MCwxMSBAQAogSWYgeW91IG5lZWQgdG8gaW50ZXJmYWNlIHRvIHNvbWUgQyBvciBDKysgbGlicmFyeSBmb3Igd2hpY2ggbm8gUHl0aG9uIGV4dGVuc2lvbgogY3VycmVudGx5IGV4aXN0cywgeW91IGNhbiB0cnkgd3JhcHBpbmcgdGhlIGxpYnJhcnkncyBkYXRhIHR5cGVzIGFuZCBmdW5jdGlvbnMKIHdpdGggYSB0b29sIHN1Y2ggYXMgYFNXSUcgPGh0dHA6Ly93d3cuc3dpZy5vcmc+YF8uICBgU0lQCi08aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvc2lwLz5gX18sIGBDWFgKKzxodHRwOi8vd3d3LnJpdmVyYmFua2NvbXB1dGluZy5jby51ay9zb2Z0d2FyZS9zaXAvaW50cm8+YF9fLCBgQ1hYCiA8aHR0cDovL2N4eC5zb3VyY2Vmb3JnZS5uZXQvPmBfIGBCb29zdAogPGh0dHA6Ly93d3cuYm9vc3Qub3JnL2xpYnMvcHl0aG9uL2RvYy9pbmRleC5odG1sPmBfLCBvciBgV2VhdmUKLTxodHRwOi8vd3d3LnNjaXB5Lm9yZy9XZWF2ZT5gXyBhcmUgYWxzbyBhbHRlcm5hdGl2ZXMgZm9yIHdyYXBwaW5nCi1DKysgbGlicmFyaWVzLgorPGh0dHA6Ly9kb2NzLnNjaXB5Lm9yZy9kb2Mvc2NpcHktZGV2L3JlZmVyZW5jZS90dXRvcmlhbC93ZWF2ZS5odG1sPmBfIGFyZSBhbHNvCithbHRlcm5hdGl2ZXMgZm9yIHdyYXBwaW5nIEMrKyBsaWJyYXJpZXMuCiAKIAogSG93IGNhbiBJIGV4ZWN1dGUgYXJiaXRyYXJ5IFB5dGhvbiBzdGF0ZW1lbnRzIGZyb20gQz8KQEAgLTk1LDggKzk1LDggQEAKIFRoZXJlIGlzIGFsc28gYSBoaWdoLWxldmVsIEFQSSB0byBQeXRob24gb2JqZWN0cyB3aGljaCBpcyBwcm92aWRlZCBieSB0aGUKIHNvLWNhbGxlZCAnYWJzdHJhY3QnIGludGVyZmFjZSAtLSByZWFkIGBgSW5jbHVkZS9hYnN0cmFjdC5oYGAgZm9yIGZ1cnRoZXIKIGRldGFpbHMuICBJdCBhbGxvd3MgaW50ZXJmYWNpbmcgd2l0aCBhbnkga2luZCBvZiBQeXRob24gc2VxdWVuY2UgdXNpbmcgY2FsbHMKLWxpa2UgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9MZW5ndGhgLCA6YzpmdW5jOmBQeVNlcXVlbmNlX0dldEl0ZW1gLCBldGMuKSBhcyB3ZWxsCi1hcyBtYW55IG90aGVyIHVzZWZ1bCBwcm90b2NvbHMgc3VjaCBhcyBudW1iZXJzICg6YzpmdW5jOmBQeU51bWJlcl9JbmRleGAgZXQuCitsaWtlIDpjOmZ1bmM6YFB5U2VxdWVuY2VfTGVuZ3RoYCwgOmM6ZnVuYzpgUHlTZXF1ZW5jZV9HZXRJdGVtYCwgZXRjLiBhcyB3ZWxsCithcyBtYW55IG90aGVyIHVzZWZ1bCBwcm90b2NvbHMgc3VjaCBhcyBudW1iZXJzICg6YzpmdW5jOmBQeU51bWJlcl9JbmRleGAgZXQKIGFsLikgYW5kIG1hcHBpbmdzIGluIHRoZSBQeU1hcHBpbmcgQVBJcy4KIAogCkBAIC0xMTUsOCArMTE1LDggQEAKIGFyZ3VtZW50IHZhbHVlczo6CiAKICAgIFB5T2JqZWN0ICoKLSAgIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm9iamVjdCwgY2hhciAqbWV0aG9kX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFyZ19mb3JtYXQsIC4uLik7CisgICBQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvYmplY3QsIGNvbnN0IGNoYXIgKm1ldGhvZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphcmdfZm9ybWF0LCAuLi4pOwogCiBUaGlzIHdvcmtzIGZvciBhbnkgb2JqZWN0IHRoYXQgaGFzIG1ldGhvZHMgLS0gd2hldGhlciBidWlsdC1pbiBvciB1c2VyLWRlZmluZWQuCiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBldmVudHVhbGx5IDpjOmZ1bmM6YFB5X0RFQ1JFRmBcICdpbmcgdGhlIHJldHVybiB2YWx1ZS4KQEAgLTM0OCw3ICszNDgsNyBAQAogICAgICB7CiAgICAgICAgbGluZSA9IHJlYWRsaW5lIChwcm9tcHQpOwogCi0gICAgICAgaWYgKE5VTEwgPT0gbGluZSkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENUUkwtRCBwcmVzc2VkICovCisgICAgICAgaWYgKE5VTEwgPT0gbGluZSkgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEN0cmwtRCBwcmVzc2VkICovCiAgICAgICAgewogICAgICAgICAgZG9uZSA9IDE7CiAgICAgICAgfQpAQCAtNDQzLDggKzQ0Myw4IEBACiBDYW4gSSBjcmVhdGUgYW4gb2JqZWN0IGNsYXNzIHdpdGggc29tZSBtZXRob2RzIGltcGxlbWVudGVkIGluIEMgYW5kIG90aGVycyBpbiBQeXRob24gKGUuZy4gdGhyb3VnaCBpbmhlcml0YW5jZSk/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUluIFB5dGhvbiAyLjIsIHlvdSBjYW4gaW5oZXJpdCBmcm9tIGJ1aWx0LWluIGNsYXNzZXMgc3VjaCBhcyA6Y2xhc3M6YGludGAsCi06Y2xhc3M6YGxpc3RgLCA6Y2xhc3M6YGRpY3RgLCBldGMuCitZZXMsIHlvdSBjYW4gaW5oZXJpdCBmcm9tIGJ1aWx0LWluIGNsYXNzZXMgc3VjaCBhcyA6Y2xhc3M6YGludGAsIDpjbGFzczpgbGlzdGAsCis6Y2xhc3M6YGRpY3RgLCBldGMuCiAKIFRoZSBCb29zdCBQeXRob24gTGlicmFyeSAoQlBMLCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9saWJzL3B5dGhvbi9kb2MvaW5kZXguaHRtbCkKIHByb3ZpZGVzIGEgd2F5IG9mIGRvaW5nIHRoaXMgZnJvbSBDKysgKGkuZS4geW91IGNhbiBpbmhlcml0IGZyb20gYW4gZXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9Eb2MvZmFxL2dlbmVyYWwucnN0IGIvRG9jL2ZhcS9nZW5lcmFsLnJzdAppbmRleCA2ZjQ3MzNmLi4yMjIxZjE0IDEwMDY0NAotLS0gYS9Eb2MvZmFxL2dlbmVyYWwucnN0CisrKyBiL0RvYy9mYXEvZ2VuZXJhbC5yc3QKQEAgLTI1LDcgKzI1LDcgQEAKIFdpbmRvd3MgMjAwMCBhbmQgbGF0ZXIuCiAKIFRvIGZpbmQgb3V0IG1vcmUsIHN0YXJ0IHdpdGggOnJlZjpgdHV0b3JpYWwtaW5kZXhgLiAgVGhlIGBCZWdpbm5lcidzIEd1aWRlIHRvCi1QeXRob24gPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9CZWdpbm5lcnNHdWlkZT5gXyBsaW5rcyB0byBvdGhlcgorUHl0aG9uIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL0JlZ2lubmVyc0d1aWRlPmBfIGxpbmtzIHRvIG90aGVyCiBpbnRyb2R1Y3RvcnkgdHV0b3JpYWxzIGFuZCByZXNvdXJjZXMgZm9yIGxlYXJuaW5nIFB5dGhvbi4KIAogCkBAIC0zNiwxMSArMzYsMTEgQEAKIGhvbGRzIHRoZSBjb3B5cmlnaHQgb24gUHl0aG9uIHZlcnNpb25zIDIuMSBhbmQgbmV3ZXIuICBUaGUgUFNGJ3MgbWlzc2lvbiBpcyB0bwogYWR2YW5jZSBvcGVuIHNvdXJjZSB0ZWNobm9sb2d5IHJlbGF0ZWQgdG8gdGhlIFB5dGhvbiBwcm9ncmFtbWluZyBsYW5ndWFnZSBhbmQgdG8KIHB1YmxpY2l6ZSB0aGUgdXNlIG9mIFB5dGhvbi4gIFRoZSBQU0YncyBob21lIHBhZ2UgaXMgYXQKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvLgoraHR0cHM6Ly93d3cucHl0aG9uLm9yZy9wc2YvLgogCiBEb25hdGlvbnMgdG8gdGhlIFBTRiBhcmUgdGF4LWV4ZW1wdCBpbiB0aGUgVVMuICBJZiB5b3UgdXNlIFB5dGhvbiBhbmQgZmluZCBpdAogaGVscGZ1bCwgcGxlYXNlIGNvbnRyaWJ1dGUgdmlhIGB0aGUgUFNGIGRvbmF0aW9uIHBhZ2UKLTxodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2RvbmF0aW9ucy8+YF8uCis8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9wc2YvZG9uYXRpb25zLz5gXy4KIAogCiBBcmUgdGhlcmUgY29weXJpZ2h0IHJlc3RyaWN0aW9ucyBvbiB0aGUgdXNlIG9mIFB5dGhvbj8KQEAgLTUzLDEyICs1MywxMiBAQAogdW5tb2RpZmllZCksIG9yIHRvIHNlbGwgcHJvZHVjdHMgdGhhdCBpbmNvcnBvcmF0ZSBQeXRob24gaW4gc29tZSBmb3JtLiAgV2Ugd291bGQKIHN0aWxsIGxpa2UgdG8ga25vdyBhYm91dCBhbGwgY29tbWVyY2lhbCB1c2Ugb2YgUHl0aG9uLCBvZiBjb3Vyc2UuCiAKLVNlZSBgdGhlIFBTRiBsaWNlbnNlIHBhZ2UgPGh0dHA6Ly9weXRob24ub3JnL3BzZi9saWNlbnNlLz5gXyB0byBmaW5kIGZ1cnRoZXIKK1NlZSBgdGhlIFBTRiBsaWNlbnNlIHBhZ2UgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UvPmBfIHRvIGZpbmQgZnVydGhlcgogZXhwbGFuYXRpb25zIGFuZCBhIGxpbmsgdG8gdGhlIGZ1bGwgdGV4dCBvZiB0aGUgbGljZW5zZS4KIAogVGhlIFB5dGhvbiBsb2dvIGlzIHRyYWRlbWFya2VkLCBhbmQgaW4gY2VydGFpbiBjYXNlcyBwZXJtaXNzaW9uIGlzIHJlcXVpcmVkIHRvCiB1c2UgaXQuICBDb25zdWx0IGB0aGUgVHJhZGVtYXJrIFVzYWdlIFBvbGljeQotPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvdHJhZGVtYXJrcy8+YF9fIGZvciBtb3JlIGluZm9ybWF0aW9uLgorPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvcHNmL3RyYWRlbWFya3MvPmBfXyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCiBXaHkgd2FzIFB5dGhvbiBjcmVhdGVkIGluIHRoZSBmaXJzdCBwbGFjZT8KQEAgLTExNyw3ICsxMTcsNyBAQAogUHl0aG9uIGNvZGUpLCBhbmQgb3BlcmF0aW5nIHN5c3RlbSBpbnRlcmZhY2VzIChzeXN0ZW0gY2FsbHMsIGZpbGVzeXN0ZW1zLCBUQ1AvSVAKIHNvY2tldHMpLiAgTG9vayBhdCB0aGUgdGFibGUgb2YgY29udGVudHMgZm9yIDpyZWY6YGxpYnJhcnktaW5kZXhgIHRvIGdldCBhbiBpZGVhCiBvZiB3aGF0J3MgYXZhaWxhYmxlLiAgQSB3aWRlIHZhcmlldHkgb2YgdGhpcmQtcGFydHkgZXh0ZW5zaW9ucyBhcmUgYWxzbwotYXZhaWxhYmxlLiAgQ29uc3VsdCBgdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4IDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF8gdG8KK2F2YWlsYWJsZS4gIENvbnN1bHQgYHRoZSBQeXRob24gUGFja2FnZSBJbmRleCA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT5gXyB0bwogZmluZCBwYWNrYWdlcyBvZiBpbnRlcmVzdCB0byB5b3UuCiAKIApAQCAtMTUxLDIzICsxNTEsMjQgQEAKIG5leHQgbWlub3IgdmVyc2lvbiwgd2hpY2ggYmVjb21lcyB0aGUgImEwIiB2ZXJzaW9uLAogZS5nLiAiMi40YTAiLgogCi1TZWUgYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgYGBzeXMudmVyc2lvbmBgLCBgYHN5cy5oZXh2ZXJzaW9uYGAsIGFuZAotYGBzeXMudmVyc2lvbl9pbmZvYGAuCitTZWUgYWxzbyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgOmRhdGE6YHN5cy52ZXJzaW9uYCwgOmRhdGE6YHN5cy5oZXh2ZXJzaW9uYCwgYW5kCis6ZGF0YTpgc3lzLnZlcnNpb25faW5mb2AuCiAKIAogSG93IGRvIEkgb2J0YWluIGEgY29weSBvZiB0aGUgUHl0aG9uIHNvdXJjZT8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBsYXRlc3QgUHl0aG9uIHNvdXJjZSBkaXN0cmlidXRpb24gaXMgYWx3YXlzIGF2YWlsYWJsZSBmcm9tIHB5dGhvbi5vcmcsIGF0Ci1odHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvLiAgVGhlIGxhdGVzdCBkZXZlbG9wbWVudCBzb3VyY2VzIGNhbiBiZSBvYnRhaW5lZAotdmlhIGFub255bW91cyBNZXJjdXJpYWwgYWNjZXNzIGF0IGh0dHA6Ly9oZy5weXRob24ub3JnL2NweXRob24uCitodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLy4gIFRoZSBsYXRlc3QgZGV2ZWxvcG1lbnQgc291cmNlcyBjYW4gYmUgb2J0YWluZWQKK3ZpYSBhbm9ueW1vdXMgTWVyY3VyaWFsIGFjY2VzcyBhdCBodHRwczovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi4KIAogVGhlIHNvdXJjZSBkaXN0cmlidXRpb24gaXMgYSBnemlwcGVkIHRhciBmaWxlIGNvbnRhaW5pbmcgdGhlIGNvbXBsZXRlIEMgc291cmNlLAogU3BoaW54LWZvcm1hdHRlZCBkb2N1bWVudGF0aW9uLCBQeXRob24gbGlicmFyeSBtb2R1bGVzLCBleGFtcGxlIHByb2dyYW1zLCBhbmQKIHNldmVyYWwgdXNlZnVsIHBpZWNlcyBvZiBmcmVlbHkgZGlzdHJpYnV0YWJsZSBzb2Z0d2FyZS4gIFRoZSBzb3VyY2Ugd2lsbCBjb21waWxlCiBhbmQgcnVuIG91dCBvZiB0aGUgYm94IG9uIG1vc3QgVU5JWCBwbGF0Zm9ybXMuCiAKLUNvbnN1bHQgdGhlIGBEZXZlbG9wZXIgRkFRIDxodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL2ZhcT5gX18gZm9yIG1vcmUKK0NvbnN1bHQgdGhlIGBHZXR0aW5nIFN0YXJ0ZWQgc2VjdGlvbiBvZiB0aGUgUHl0aG9uIERldmVsb3BlcidzIEd1aWRlCis8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvc2V0dXAuaHRtbD5gX18gZm9yIG1vcmUKIGluZm9ybWF0aW9uIG9uIGdldHRpbmcgdGhlIHNvdXJjZSBjb2RlIGFuZCBjb21waWxpbmcgaXQuCiAKIApAQCAtMTc3LDggKzE3OCw4IEBACiAuLiBYWFggbWVudGlvbiBweTNrCiAKIFRoZSBzdGFuZGFyZCBkb2N1bWVudGF0aW9uIGZvciB0aGUgY3VycmVudCBzdGFibGUgdmVyc2lvbiBvZiBQeXRob24gaXMgYXZhaWxhYmxlCi1hdCBodHRwOi8vZG9jcy5weXRob24ub3JnLy4gIFBERiwgcGxhaW4gdGV4dCwgYW5kIGRvd25sb2FkYWJsZSBIVE1MIHZlcnNpb25zIGFyZQotYWxzbyBhdmFpbGFibGUgYXQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9kb3dubG9hZC5odG1sLgorYXQgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy8uICBQREYsIHBsYWluIHRleHQsIGFuZCBkb3dubG9hZGFibGUgSFRNTCB2ZXJzaW9ucyBhcmUKK2Fsc28gYXZhaWxhYmxlIGF0IGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvZG93bmxvYWQuaHRtbC4KIAogVGhlIGRvY3VtZW50YXRpb24gaXMgd3JpdHRlbiBpbiByZVN0cnVjdHVyZWRUZXh0IGFuZCBwcm9jZXNzZWQgYnkgYHRoZSBTcGhpbngKIGRvY3VtZW50YXRpb24gdG9vbCA8aHR0cDovL3NwaGlueC1kb2Mub3JnLz5gX18uICBUaGUgcmVTdHJ1Y3R1cmVkVGV4dCBzb3VyY2UgZm9yCkBAIC0xOTEsNyArMTkyLDcgQEAKIFRoZXJlIGFyZSBudW1lcm91cyB0dXRvcmlhbHMgYW5kIGJvb2tzIGF2YWlsYWJsZS4gIFRoZSBzdGFuZGFyZCBkb2N1bWVudGF0aW9uCiBpbmNsdWRlcyA6cmVmOmB0dXRvcmlhbC1pbmRleGAuCiAKLUNvbnN1bHQgYHRoZSBCZWdpbm5lcidzIEd1aWRlIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vQmVnaW5uZXJzR3VpZGU+YF8gdG8KK0NvbnN1bHQgYHRoZSBCZWdpbm5lcidzIEd1aWRlIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL0JlZ2lubmVyc0d1aWRlPmBfIHRvCiBmaW5kIGluZm9ybWF0aW9uIGZvciBiZWdpbm5pbmcgUHl0aG9uIHByb2dyYW1tZXJzLCBpbmNsdWRpbmcgbGlzdHMgb2YgdHV0b3JpYWxzLgogCiAKQEAgLTE5OSw3ICsyMDAsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGVyZSBpcyBhIG5ld3Nncm91cCwgOm5ld3Nncm91cDpgY29tcC5sYW5nLnB5dGhvbmAsIGFuZCBhIG1haWxpbmcgbGlzdCwKLWBweXRob24tbGlzdCA8aHR0cDovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1saXN0PmBfLiAgVGhlCitgcHl0aG9uLWxpc3QgPGh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLWxpc3Q+YF8uICBUaGUKIG5ld3Nncm91cCBhbmQgbWFpbGluZyBsaXN0IGFyZSBnYXRld2F5ZWQgaW50byBlYWNoIG90aGVyIC0tIGlmIHlvdSBjYW4gcmVhZCBuZXdzCiBpdCdzIHVubmVjZXNzYXJ5IHRvIHN1YnNjcmliZSB0byB0aGUgbWFpbGluZyBsaXN0LgogOm5ld3Nncm91cDpgY29tcC5sYW5nLnB5dGhvbmAgaXMgaGlnaC10cmFmZmljLCByZWNlaXZpbmcgaHVuZHJlZHMgb2YgcG9zdGluZ3MKQEAgLTIwOCwzOCArMjA5LDM4IEBACiBBbm5vdW5jZW1lbnRzIG9mIG5ldyBzb2Z0d2FyZSByZWxlYXNlcyBhbmQgZXZlbnRzIGNhbiBiZSBmb3VuZCBpbgogY29tcC5sYW5nLnB5dGhvbi5hbm5vdW5jZSwgYSBsb3ctdHJhZmZpYyBtb2RlcmF0ZWQgbGlzdCB0aGF0IHJlY2VpdmVzIGFib3V0IGZpdmUKIHBvc3RpbmdzIHBlciBkYXkuICBJdCdzIGF2YWlsYWJsZSBhcyBgdGhlIHB5dGhvbi1hbm5vdW5jZSBtYWlsaW5nIGxpc3QKLTxodHRwOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLWFubm91bmNlLWxpc3Q+YF8uCis8aHR0cHM6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9weXRob24tYW5ub3VuY2UtbGlzdD5gXy4KIAogTW9yZSBpbmZvIGFib3V0IG90aGVyIG1haWxpbmcgbGlzdHMgYW5kIG5ld3Nncm91cHMKLWNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvY29tbXVuaXR5L2xpc3RzLy4KK2NhbiBiZSBmb3VuZCBhdCBodHRwczovL3d3dy5weXRob24ub3JnL2NvbW11bml0eS9saXN0cy8uCiAKIAogSG93IGRvIEkgZ2V0IGEgYmV0YSB0ZXN0IHZlcnNpb24gb2YgUHl0aG9uPwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1BbHBoYSBhbmQgYmV0YSByZWxlYXNlcyBhcmUgYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLy4gIEFsbAorQWxwaGEgYW5kIGJldGEgcmVsZWFzZXMgYXJlIGF2YWlsYWJsZSBmcm9tIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvLiAgQWxsCiByZWxlYXNlcyBhcmUgYW5ub3VuY2VkIG9uIHRoZSBjb21wLmxhbmcucHl0aG9uIGFuZCBjb21wLmxhbmcucHl0aG9uLmFubm91bmNlCi1uZXdzZ3JvdXBzIGFuZCBvbiB0aGUgUHl0aG9uIGhvbWUgcGFnZSBhdCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvOyBhbiBSU1MgZmVlZCBvZgorbmV3c2dyb3VwcyBhbmQgb24gdGhlIFB5dGhvbiBob21lIHBhZ2UgYXQgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy87IGFuIFJTUyBmZWVkIG9mCiBuZXdzIGlzIGF2YWlsYWJsZS4KIAotWW91IGNhbiBhbHNvIGFjY2VzcyB0aGUgZGV2ZWxvcG1lbnQgdmVyc2lvbiBvZiBQeXRob24gdGhyb3VnaCBTdWJ2ZXJzaW9uLiAgU2VlCi1odHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL2ZhcSBmb3IgZGV0YWlscy4KK1lvdSBjYW4gYWxzbyBhY2Nlc3MgdGhlIGRldmVsb3BtZW50IHZlcnNpb24gb2YgUHl0aG9uIHRocm91Z2ggTWVyY3VyaWFsLiAgU2VlCitodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9mYXEuaHRtbCBmb3IgZGV0YWlscy4KIAogCiBIb3cgZG8gSSBzdWJtaXQgYnVnIHJlcG9ydHMgYW5kIHBhdGNoZXMgZm9yIFB5dGhvbj8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBUbyByZXBvcnQgYSBidWcgb3Igc3VibWl0IGEgcGF0Y2gsIHBsZWFzZSB1c2UgdGhlIFJvdW5kdXAgaW5zdGFsbGF0aW9uIGF0Ci1odHRwOi8vYnVncy5weXRob24ub3JnLy4KK2h0dHBzOi8vYnVncy5weXRob24ub3JnLy4KIAogWW91IG11c3QgaGF2ZSBhIFJvdW5kdXAgYWNjb3VudCB0byByZXBvcnQgYnVnczsgdGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdXMgdG8KIGNvbnRhY3QgeW91IGlmIHdlIGhhdmUgZm9sbG93LXVwIHF1ZXN0aW9ucy4gIEl0IHdpbGwgYWxzbyBlbmFibGUgUm91bmR1cCB0byBzZW5kCiB5b3UgdXBkYXRlcyBhcyB3ZSBhY3Qgb24geW91ciBidWcuIElmIHlvdSBoYWQgcHJldmlvdXNseSB1c2VkIFNvdXJjZUZvcmdlIHRvCiByZXBvcnQgYnVncyB0byBQeXRob24sIHlvdSBjYW4gb2J0YWluIHlvdXIgUm91bmR1cCBwYXNzd29yZCB0aHJvdWdoIFJvdW5kdXAncwotYHBhc3N3b3JkIHJlc2V0IHByb2NlZHVyZSA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy91c2VyP0B0ZW1wbGF0ZT1mb3Jnb3R0ZW4+YF8uCitgcGFzc3dvcmQgcmVzZXQgcHJvY2VkdXJlIDxodHRwczovL2J1Z3MucHl0aG9uLm9yZy91c2VyP0B0ZW1wbGF0ZT1mb3Jnb3R0ZW4+YF8uCiAKIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyBQeXRob24gaXMgZGV2ZWxvcGVkLCBjb25zdWx0IGB0aGUgUHl0aG9uIERldmVsb3BlcidzCi1HdWlkZSA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS8+YF8uCitHdWlkZSA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvPmBfLgogCiAKIEFyZSB0aGVyZSBhbnkgcHVibGlzaGVkIGFydGljbGVzIGFib3V0IFB5dGhvbiB0aGF0IEkgY2FuIHJlZmVyZW5jZT8KQEAgLTI1OSw3ICsyNjAsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFllcywgdGhlcmUgYXJlIG1hbnksIGFuZCBtb3JlIGFyZSBiZWluZyBwdWJsaXNoZWQuICBTZWUgdGhlIHB5dGhvbi5vcmcgd2lraSBhdAotaHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1B5dGhvbkJvb2tzIGZvciBhIGxpc3QuCitodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1B5dGhvbkJvb2tzIGZvciBhIGxpc3QuCiAKIFlvdSBjYW4gYWxzbyBzZWFyY2ggb25saW5lIGJvb2tzdG9yZXMgZm9yICJQeXRob24iIGFuZCBmaWx0ZXIgb3V0IHRoZSBNb250eQogUHl0aG9uIHJlZmVyZW5jZXM7IG9yIHBlcmhhcHMgc2VhcmNoIGZvciAiUHl0aG9uIiBhbmQgImxhbmd1YWdlIi4KQEAgLTI2OSwxMSArMjcwLDEyIEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIFB5dGhvbiBwcm9qZWN0J3MgaW5mcmFzdHJ1Y3R1cmUgaXMgbG9jYXRlZCBhbGwgb3ZlciB0aGUgd29ybGQuCi1gd3d3LnB5dGhvbi5vcmcgPGh0dHA6Ly93d3cucHl0aG9uLm9yZz5gXyBpcyBjdXJyZW50bHkgaW4gQW1zdGVyZGFtLCBncmFjaW91c2x5Ci1ob3N0ZWQgYnkgYFhTNEFMTCA8aHR0cDovL3d3dy54czRhbGwubmw+YF8uICBgVXBmcm9udCBTeXN0ZW1zCitgd3d3LnB5dGhvbi5vcmcgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmc+YF8gaXMgZ3JhY2lvdXNseSBob3N0ZWQgYnkgYFJhY2tzcGFjZQorPGh0dHA6Ly93d3cucmFja3NwYWNlLmNvbT5gXywgd2l0aCBDRE4gY2FjaGluZyBwcm92aWRlZCBieSBgRmFzdGx5Cis8aHR0cHM6Ly93d3cuZmFzdGx5LmNvbT5gXy4gIGBVcGZyb250IFN5c3RlbXMKIDxodHRwOi8vd3d3LnVwZnJvbnRzeXN0ZW1zLmNvLnphPmBfIGhvc3RzIGBidWdzLnB5dGhvbi5vcmcKLTxodHRwOi8vYnVncy5weXRob24ub3JnPmBfLiAgTW9zdCBvdGhlciBQeXRob24gc2VydmljZXMgbGlrZSBgUHlQSQotPGh0dHBzOi8vcHlwaS5weXRob24ub3JnPmBfIGFuZCBoZy5weXRob24ub3JnIGFyZSBob3N0ZWQgYnkgYE9yZWdvbiBTdGF0ZQorPGh0dHBzOi8vYnVncy5weXRob24ub3JnPmBfLiAgTWFueSBvdGhlciBQeXRob24gc2VydmljZXMgbGlrZSBgdGhlIFdpa2kKKzxodHRwczovL3dpa2kucHl0aG9uLm9yZz5gXyBhcmUgaG9zdGVkIGJ5IGBPcmVnb24gU3RhdGUKIFVuaXZlcnNpdHkgT3BlbiBTb3VyY2UgTGFiIDxodHRwczovL29zdW9zbC5vcmc+YF8uCiAKIApAQCAtMjgyLDcgKzI4NCw3IEBACiAKIFdoZW4gaGUgYmVnYW4gaW1wbGVtZW50aW5nIFB5dGhvbiwgR3VpZG8gdmFuIFJvc3N1bSB3YXMgYWxzbyByZWFkaW5nIHRoZQogcHVibGlzaGVkIHNjcmlwdHMgZnJvbSBgIk1vbnR5IFB5dGhvbidzIEZseWluZyBDaXJjdXMiCi08aHR0cDovL3B5dGhvbmxpbmUuY29tLz5gX18sIGEgQkJDIGNvbWVkeSBzZXJpZXMgZnJvbSB0aGUgMTk3MHMuICBWYW4gUm9zc3VtCis8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb250eV9QeXRob24+YF9fLCBhIEJCQyBjb21lZHkgc2VyaWVzIGZyb20gdGhlIDE5NzBzLiAgVmFuIFJvc3N1bQogdGhvdWdodCBoZSBuZWVkZWQgYSBuYW1lIHRoYXQgd2FzIHNob3J0LCB1bmlxdWUsIGFuZCBzbGlnaHRseSBteXN0ZXJpb3VzLCBzbyBoZQogZGVjaWRlZCB0byBjYWxsIHRoZSBsYW5ndWFnZSBQeXRob24uCiAKQEAgLTMxMSw3ICszMTMsNyBAQAogcmVsZWFzZXMuCiAKIFRoZSBsYXRlc3Qgc3RhYmxlIHJlbGVhc2VzIGNhbiBhbHdheXMgYmUgZm91bmQgb24gdGhlIGBQeXRob24gZG93bmxvYWQgcGFnZQotPGh0dHA6Ly9weXRob24ub3JnL2Rvd25sb2FkLz5gXy4gIFRoZXJlIGFyZSB0d28gcmVjb21tZW5kZWQgcHJvZHVjdGlvbi1yZWFkeQorPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvPmBfLiAgVGhlcmUgYXJlIHR3byByZWNvbW1lbmRlZCBwcm9kdWN0aW9uLXJlYWR5CiB2ZXJzaW9ucyBhdCB0aGlzIHBvaW50IGluIHRpbWUsIGJlY2F1c2UgYXQgdGhlIG1vbWVudCB0aGVyZSBhcmUgdHdvIGJyYW5jaGVzIG9mCiBzdGFibGUgcmVsZWFzZXM6IDIueCBhbmQgMy54LiAgUHl0aG9uIDMueCBtYXkgYmUgbGVzcyB1c2VmdWwgdGhhbiAyLngsIHNpbmNlCiBjdXJyZW50bHkgdGhlcmUgaXMgbW9yZSB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBhdmFpbGFibGUgZm9yIFB5dGhvbiAyIHRoYW4gZm9yCkBAIC0zMzUsOSArMzM3LDkgQEAKIEhhdmUgYW55IHNpZ25pZmljYW50IHByb2plY3RzIGJlZW4gZG9uZSBpbiBQeXRob24/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TZWUgaHR0cDovL3B5dGhvbi5vcmcvYWJvdXQvc3VjY2VzcyBmb3IgYSBsaXN0IG9mIHByb2plY3RzIHRoYXQgdXNlIFB5dGhvbi4KK1NlZSBodHRwczovL3d3dy5weXRob24ub3JnL2Fib3V0L3N1Y2Nlc3MgZm9yIGEgbGlzdCBvZiBwcm9qZWN0cyB0aGF0IHVzZSBQeXRob24uCiBDb25zdWx0aW5nIHRoZSBwcm9jZWVkaW5ncyBmb3IgYHBhc3QgUHl0aG9uIGNvbmZlcmVuY2VzCi08aHR0cDovL3B5dGhvbi5vcmcvY29tbXVuaXR5L3dvcmtzaG9wcy8+YF8gd2lsbCByZXZlYWwgY29udHJpYnV0aW9ucyBmcm9tIG1hbnkKKzxodHRwczovL3d3dy5weXRob24ub3JnL2NvbW11bml0eS93b3Jrc2hvcHMvPmBfIHdpbGwgcmV2ZWFsIGNvbnRyaWJ1dGlvbnMgZnJvbSBtYW55CiBkaWZmZXJlbnQgY29tcGFuaWVzIGFuZCBvcmdhbml6YXRpb25zLgogCiBIaWdoLXByb2ZpbGUgUHl0aG9uIHByb2plY3RzIGluY2x1ZGUgYHRoZSBNYWlsbWFuIG1haWxpbmcgbGlzdCBtYW5hZ2VyCkBAIC0zNTEsMTQgKzM1MywxNCBAQAogV2hhdCBuZXcgZGV2ZWxvcG1lbnRzIGFyZSBleHBlY3RlZCBmb3IgUHl0aG9uIGluIHRoZSBmdXR1cmU/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy8gZm9yIHRoZSBQeXRob24gRW5oYW5jZW1lbnQgUHJvcG9zYWxzCitTZWUgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy8gZm9yIHRoZSBQeXRob24gRW5oYW5jZW1lbnQgUHJvcG9zYWxzCiAoUEVQcykuIFBFUHMgYXJlIGRlc2lnbiBkb2N1bWVudHMgZGVzY3JpYmluZyBhIHN1Z2dlc3RlZCBuZXcgZmVhdHVyZSBmb3IgUHl0aG9uLAogcHJvdmlkaW5nIGEgY29uY2lzZSB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbiBhbmQgYSByYXRpb25hbGUuICBMb29rIGZvciBhIFBFUAogdGl0bGVkICJQeXRob24gWC5ZIFJlbGVhc2UgU2NoZWR1bGUiLCB3aGVyZSBYLlkgaXMgYSB2ZXJzaW9uIHRoYXQgaGFzbid0IGJlZW4KIHB1YmxpY2x5IHJlbGVhc2VkIHlldC4KIAogTmV3IGRldmVsb3BtZW50IGlzIGRpc2N1c3NlZCBvbiBgdGhlIHB5dGhvbi1kZXYgbWFpbGluZyBsaXN0Ci08aHR0cDovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1kZXYvPmBfLgorPGh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLWRldi8+YF8uCiAKIAogSXMgaXQgcmVhc29uYWJsZSB0byBwcm9wb3NlIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIFB5dGhvbj8KQEAgLTM3Niw0MyArMzc4LDYgQEAKIGNoYW5nZXMgd2hpbGUgbWluaW1pemluZyBkaXNydXB0aW9uIGZvciB1c2Vycy4KIAogCi1JcyBQeXRob24gWTJLIChZZWFyIDIwMDApIENvbXBsaWFudD8KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0uLiByZW1vdmUgdGhpcyBxdWVzdGlvbj8KLQotQXMgb2YgQXVndXN0LCAyMDAzIG5vIG1ham9yIHByb2JsZW1zIGhhdmUgYmVlbiByZXBvcnRlZCBhbmQgWTJLIGNvbXBsaWFuY2Ugc2VlbXMKLXRvIGJlIGEgbm9uLWlzc3VlLgotCi1QeXRob24gZG9lcyB2ZXJ5IGZldyBkYXRlIGNhbGN1bGF0aW9ucyBhbmQgZm9yIHRob3NlIGl0IGRvZXMgcGVyZm9ybSByZWxpZXMgb24KLXRoZSBDIGxpYnJhcnkgZnVuY3Rpb25zLiAgUHl0aG9uIGdlbmVyYWxseSByZXByZXNlbnRzIHRpbWVzIGVpdGhlciBhcyBzZWNvbmRzCi1zaW5jZSAxOTcwIG9yIGFzIGEgYGAoeWVhciwgbW9udGgsIGRheSwgLi4uKWBgIHR1cGxlIHdoZXJlIHRoZSB5ZWFyIGlzIGV4cHJlc3NlZAotd2l0aCBmb3VyIGRpZ2l0cywgd2hpY2ggbWFrZXMgWTJLIGJ1Z3MgdW5saWtlbHkuICBTbyBhcyBsb25nIGFzIHlvdXIgQyBsaWJyYXJ5Ci1pcyBva2F5LCBQeXRob24gc2hvdWxkIGJlIG9rYXkuICBPZiBjb3Vyc2UsIGl0J3MgcG9zc2libGUgdGhhdCBhIHBhcnRpY3VsYXIKLWFwcGxpY2F0aW9uIHdyaXR0ZW4gaW4gUHl0aG9uIG1ha2VzIGFzc3VtcHRpb25zIGFib3V0IDItZGlnaXQgeWVhcnMuCi0KLUJlY2F1c2UgUHl0aG9uIGlzIGF2YWlsYWJsZSBmcmVlIG9mIGNoYXJnZSwgdGhlcmUgYXJlIG5vIGFic29sdXRlIGd1YXJhbnRlZXMuCi1JZiB0aGVyZSAqYXJlKiB1bmZvcmVzZWVuIHByb2JsZW1zLCBsaWFiaWxpdHkgaXMgdGhlIHVzZXIncyBwcm9ibGVtIHJhdGhlciB0aGFuCi10aGUgZGV2ZWxvcGVycycsIGFuZCB0aGVyZSBpcyBub2JvZHkgeW91IGNhbiBzdWUgZm9yIGRhbWFnZXMuICBUaGUgUHl0aG9uCi1jb3B5cmlnaHQgbm90aWNlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcjoKLQotICAgIDQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIDIuMyBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgotICAgIGJhc2lzLiAgUFNGIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQuICBCWQotICAgIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIFBTRiBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWQotICAgIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUgotICAgIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFBZVEhPTiAyLjMgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZCi0gICAgUklHSFRTLgotCi0gICAgNS4gUFNGIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgotICAgIDIuMyBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTCi0gICAgQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gMi4zLAotICAgIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KLQotVGhlIGdvb2QgbmV3cyBpcyB0aGF0ICppZiogeW91IGVuY291bnRlciBhIHByb2JsZW0sIHlvdSBoYXZlIGZ1bGwgc291cmNlCi1hdmFpbGFibGUgdG8gdHJhY2sgaXQgZG93biBhbmQgZml4IGl0LiAgVGhpcyBpcyBvbmUgYWR2YW50YWdlIG9mIGFuIG9wZW4gc291cmNlCi1wcm9ncmFtbWluZyBlbnZpcm9ubWVudC4KLQotCiBJcyBQeXRob24gYSBnb29kIGxhbmd1YWdlIGZvciBiZWdpbm5pbmcgcHJvZ3JhbW1lcnM/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTQ1MSwxNCArNDE2LDI1IEBACiByZW1lbWJlciB0aGUgbWV0aG9kcyBmb3IgYSBsaXN0LCB0aGV5IGNhbiBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOjoKIAogICAgPj4+IEwgPSBbXQotICAgPj4+IGRpcihMKQotICAgWydhcHBlbmQnLCAnY291bnQnLCAnZXh0ZW5kJywgJ2luZGV4JywgJ2luc2VydCcsICdwb3AnLCAncmVtb3ZlJywKKyAgID4+PiBkaXIoTCkgIyBkb2N0ZXN0OiArTk9STUFMSVpFX1dISVRFU1BBQ0UKKyAgIFsnX19hZGRfXycsICdfX2NsYXNzX18nLCAnX19jb250YWluc19fJywgJ19fZGVsYXR0cl9fJywgJ19fZGVsaXRlbV9fJywKKyAgICdfX2Rpcl9fJywgJ19fZG9jX18nLCAnX19lcV9fJywgJ19fZm9ybWF0X18nLCAnX19nZV9fJywKKyAgICdfX2dldGF0dHJpYnV0ZV9fJywgJ19fZ2V0aXRlbV9fJywgJ19fZ3RfXycsICdfX2hhc2hfXycsICdfX2lhZGRfXycsCisgICAnX19pbXVsX18nLCAnX19pbml0X18nLCAnX19pdGVyX18nLCAnX19sZV9fJywgJ19fbGVuX18nLCAnX19sdF9fJywKKyAgICdfX211bF9fJywgJ19fbmVfXycsICdfX25ld19fJywgJ19fcmVkdWNlX18nLCAnX19yZWR1Y2VfZXhfXycsCisgICAnX19yZXByX18nLCAnX19yZXZlcnNlZF9fJywgJ19fcm11bF9fJywgJ19fc2V0YXR0cl9fJywgJ19fc2V0aXRlbV9fJywKKyAgICdfX3NpemVvZl9fJywgJ19fc3RyX18nLCAnX19zdWJjbGFzc2hvb2tfXycsICdhcHBlbmQnLCAnY2xlYXInLAorICAgJ2NvcHknLCAnY291bnQnLCAnZXh0ZW5kJywgJ2luZGV4JywgJ2luc2VydCcsICdwb3AnLCAncmVtb3ZlJywKICAgICdyZXZlcnNlJywgJ3NvcnQnXQorICAgPj4+IFtkIGZvciBkIGluIGRpcihMKSBpZiAnX18nIG5vdCBpbiBkXQorICAgWydhcHBlbmQnLCAnY2xlYXInLCAnY29weScsICdjb3VudCcsICdleHRlbmQnLCAnaW5kZXgnLCAnaW5zZXJ0JywgJ3BvcCcsICdyZW1vdmUnLCAncmV2ZXJzZScsICdzb3J0J10KKwogICAgPj4+IGhlbHAoTC5hcHBlbmQpCiAgICBIZWxwIG9uIGJ1aWx0LWluIGZ1bmN0aW9uIGFwcGVuZDoKLQorICAgPEJMQU5LTElORT4KICAgIGFwcGVuZCguLi4pCi0gICAgICAgTC5hcHBlbmQob2JqZWN0KSAtLSBhcHBlbmQgb2JqZWN0IHRvIGVuZAorICAgICAgIEwuYXBwZW5kKG9iamVjdCkgLT4gTm9uZSAtLSBhcHBlbmQgb2JqZWN0IHRvIGVuZAorICAgPEJMQU5LTElORT4KICAgID4+PiBMLmFwcGVuZCgxKQogICAgPj4+IEwKICAgIFsxXQpAQCAtNDc2LDQgKzQ1Miw0IEBACiAKIElmIHlvdSB3YW50IHRvIGRpc2N1c3MgUHl0aG9uJ3MgdXNlIGluIGVkdWNhdGlvbiwgeW91IG1heSBiZSBpbnRlcmVzdGVkIGluCiBqb2luaW5nIGB0aGUgZWR1LXNpZyBtYWlsaW5nIGxpc3QKLTxodHRwOi8vcHl0aG9uLm9yZy9jb21tdW5pdHkvc2lncy9jdXJyZW50L2VkdS1zaWc+YF8uCis8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9jb21tdW5pdHkvc2lncy9jdXJyZW50L2VkdS1zaWc+YF8uCmRpZmYgLS1naXQgYS9Eb2MvZmFxL2d1aS5yc3QgYi9Eb2MvZmFxL2d1aS5yc3QKaW5kZXggNTgyN2YyOC4uNTEyMmRlMSAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9ndWkucnN0CisrKyBiL0RvYy9mYXEvZ3VpLnJzdApAQCAtMjksMTcgKzI5LDE3IEBACiBTdGFuZGFyZCBidWlsZHMgb2YgUHl0aG9uIGluY2x1ZGUgYW4gb2JqZWN0LW9yaWVudGVkIGludGVyZmFjZSB0byB0aGUgVGNsL1RrCiB3aWRnZXQgc2V0LCBjYWxsZWQgOnJlZjpgdGtpbnRlciA8VGtpbnRlcj5gLiAgVGhpcyBpcyBwcm9iYWJseSB0aGUgZWFzaWVzdCB0bwogaW5zdGFsbCAoc2luY2UgaXQgY29tZXMgaW5jbHVkZWQgd2l0aCBtb3N0Ci1gYmluYXJ5IGRpc3RyaWJ1dGlvbnMgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC8+YF8gb2YgUHl0aG9uKSBhbmQgdXNlLgorYGJpbmFyeSBkaXN0cmlidXRpb25zIDxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLz5gXyBvZiBQeXRob24pIGFuZCB1c2UuCiBGb3IgbW9yZSBpbmZvIGFib3V0IFRrLCBpbmNsdWRpbmcgcG9pbnRlcnMgdG8gdGhlIHNvdXJjZSwgc2VlIHRoZQogYFRjbC9UayBob21lIHBhZ2UgPGh0dHA6Ly93d3cudGNsLnRrPmBfLiAgVGNsL1RrIGlzIGZ1bGx5IHBvcnRhYmxlIHRvIHRoZQotTWFjT1MsIFdpbmRvd3MsIGFuZCBVbml4IHBsYXRmb3Jtcy4KK01hYyBPUyBYLCBXaW5kb3dzLCBhbmQgVW5peCBwbGF0Zm9ybXMuCiAKIHd4V2lkZ2V0cwogLS0tLS0tLS0tCiAKIHd4V2lkZ2V0cyAoaHR0cDovL3d3dy53eHdpZGdldHMub3JnKSBpcyBhIGZyZWUsIHBvcnRhYmxlIEdVSSBjbGFzcwogbGlicmFyeSB3cml0dGVuIGluIEMrKyB0aGF0IHByb3ZpZGVzIGEgbmF0aXZlIGxvb2sgYW5kIGZlZWwgb24gYQotbnVtYmVyIG9mIHBsYXRmb3Jtcywgd2l0aCBXaW5kb3dzLCBNYWNPUyBYLCBHVEssIFgxMSwgYWxsIGxpc3RlZCBhcworbnVtYmVyIG9mIHBsYXRmb3Jtcywgd2l0aCBXaW5kb3dzLCBNYWMgT1MgWCwgR1RLLCBYMTEsIGFsbCBsaXN0ZWQgYXMKIGN1cnJlbnQgc3RhYmxlIHRhcmdldHMuICBMYW5ndWFnZSBiaW5kaW5ncyBhcmUgYXZhaWxhYmxlIGZvciBhIG51bWJlcgogb2YgbGFuZ3VhZ2VzIGluY2x1ZGluZyBQeXRob24sIFBlcmwsIFJ1YnksIGV0Yy4KIApAQCAtNTgsMTQgKzU4LDE0IEBACiAtLS0KIAogVGhlcmUgYXJlIGJpbmRpbmdzIGF2YWlsYWJsZSBmb3IgdGhlIFF0IHRvb2xraXQgKHVzaW5nIGVpdGhlciBgUHlRdAotPGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3B5cXQvPmBfIG9yIGBQeVNpZGUKLTxodHRwOi8vd3d3LnB5c2lkZS5vcmcvPmBfKSBhbmQgZm9yIEtERSAoYFB5S0RFIDxodHRwOi8vd3d3LnJpdmVyYmFua2NvbXB1dGluZy5jby51ay9zb2Z0d2FyZS9weWtkZS9pbnRybz5gX18pLgorPGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3B5cXQvaW50cm8+YF8gb3IgYFB5U2lkZQorPGh0dHA6Ly93d3cucHlzaWRlLm9yZy8+YF8pIGFuZCBmb3IgS0RFIChgUHlLREUgPGh0dHBzOi8vdGVjaGJhc2Uua2RlLm9yZy9EZXZlbG9wbWVudC9MYW5ndWFnZXMvUHl0aG9uPmBfXykuCiBQeVF0IGlzIGN1cnJlbnRseSBtb3JlIG1hdHVyZSB0aGFuIFB5U2lkZSwgYnV0IHlvdSBtdXN0IGJ1eSBhIFB5UXQgbGljZW5zZSBmcm9tCiBgUml2ZXJiYW5rIENvbXB1dGluZyA8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlxdC9saWNlbnNlPmBfCiBpZiB5b3Ugd2FudCB0byB3cml0ZSBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMuICBQeVNpZGUgaXMgZnJlZSBmb3IgYWxsIGFwcGxpY2F0aW9ucy4KIAogUXQgNC41IHVwd2FyZHMgaXMgbGljZW5zZWQgdW5kZXIgdGhlIExHUEwgbGljZW5zZTsgYWxzbywgY29tbWVyY2lhbCBsaWNlbnNlcwotYXJlIGF2YWlsYWJsZSBmcm9tIGBOb2tpYSA8aHR0cDovL3F0Lm5va2lhLmNvbS8+YF8uCithcmUgYXZhaWxhYmxlIGZyb20gYFRoZSBRdCBDb21wYW55IDxodHRwOi8vd3d3LnF0LmlvL2xpY2Vuc2luZy8+YF8uCiAKIEd0aysKIC0tLS0KQEAgLTEwMiwxMyArMTAyLDkgQEAKIFdoYXQgcGxhdGZvcm0tc3BlY2lmaWMgR1VJIHRvb2xraXRzIGV4aXN0IGZvciBQeXRob24/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1gVGhlIE1hYyBwb3J0IDxodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC9tYWM+YF8gYnkgSmFjayBKYW5zZW4gaGFzIGEgcmljaCBhbmQKLWV2ZXItZ3Jvd2luZyBzZXQgb2YgbW9kdWxlcyB0aGF0IHN1cHBvcnQgdGhlIG5hdGl2ZSBNYWMgdG9vbGJveCBjYWxscy4gIFRoZSBwb3J0Ci1zdXBwb3J0cyBNYWNPUyBYJ3MgQ2FyYm9uIGxpYnJhcmllcy4KLQogQnkgaW5zdGFsbGluZyB0aGUgYFB5T2JqYyBPYmplY3RpdmUtQyBicmlkZ2UKLTxodHRwOi8vcHlvYmpjLnNvdXJjZWZvcmdlLm5ldD5gXywgUHl0aG9uIHByb2dyYW1zIGNhbiB1c2UgTWFjT1MgWCdzCi1Db2NvYSBsaWJyYXJpZXMuIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiB0aGF0IGNvbWVzIHdpdGggdGhlIE1hYyBwb3J0LgorPGh0dHBzOi8vcHl0aG9uaG9zdGVkLm9yZy9weW9iamMvPmBfLCBQeXRob24gcHJvZ3JhbXMgY2FuIHVzZSBNYWMgT1MgWCdzCitDb2NvYSBsaWJyYXJpZXMuCiAKIDpyZWY6YFB5dGhvbndpbiA8d2luZG93cy1mYXE+YCBieSBNYXJrIEhhbW1vbmQgaW5jbHVkZXMgYW4gaW50ZXJmYWNlIHRvIHRoZQogTWljcm9zb2Z0IEZvdW5kYXRpb24gQ2xhc3NlcyBhbmQgYSBQeXRob24gcHJvZ3JhbW1pbmcgZW52aXJvbm1lbnQKQEAgLTE0MywzMCArMTM5LDExIEBACiBDYW4gSSBoYXZlIFRrIGV2ZW50cyBoYW5kbGVkIHdoaWxlIHdhaXRpbmcgZm9yIEkvTz8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1ZZXMsIGFuZCB5b3UgZG9uJ3QgZXZlbiBuZWVkIHRocmVhZHMhICBCdXQgeW91J2xsIGhhdmUgdG8gcmVzdHJ1Y3R1cmUgeW91ciBJL08KK09uIHBsYXRmb3JtcyBvdGhlciB0aGFuIFdpbmRvd3MsIHllcywgYW5kIHlvdSBkb24ndCBldmVuCituZWVkIHRocmVhZHMhICBCdXQgeW91J2xsIGhhdmUgdG8gcmVzdHJ1Y3R1cmUgeW91ciBJL08KIGNvZGUgYSBiaXQuICBUayBoYXMgdGhlIGVxdWl2YWxlbnQgb2YgWHQncyA6YzpmdW5jOmBYdEFkZElucHV0KClgIGNhbGwsIHdoaWNoIGFsbG93cyB5b3UKIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgZnJvbSB0aGUgVGsgbWFpbmxvb3Agd2hlbgotSS9PIGlzIHBvc3NpYmxlIG9uIGEgZmlsZSBkZXNjcmlwdG9yLiAgSGVyZSdzIHdoYXQgeW91IG5lZWQ6OgotCi0gICBmcm9tIFRraW50ZXIgaW1wb3J0IHRraW50ZXIKLSAgIHRraW50ZXIuY3JlYXRlZmlsZWhhbmRsZXIoZmlsZSwgbWFzaywgY2FsbGJhY2spCi0KLVRoZSBmaWxlIG1heSBiZSBhIFB5dGhvbiBmaWxlIG9yIHNvY2tldCBvYmplY3QgKGFjdHVhbGx5LCBhbnl0aGluZyB3aXRoIGEKLWZpbGVubygpIG1ldGhvZCksIG9yIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yLiAgVGhlIG1hc2sgaXMgb25lIG9mIHRoZQotY29uc3RhbnRzIHRraW50ZXIuUkVBREFCTEUgb3IgdGtpbnRlci5XUklUQUJMRS4gIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgYXMKLWZvbGxvd3M6OgotCi0gICBjYWxsYmFjayhmaWxlLCBtYXNrKQotCi1Zb3UgbXVzdCB1bnJlZ2lzdGVyIHRoZSBjYWxsYmFjayB3aGVuIHlvdSdyZSBkb25lLCB1c2luZyA6OgotCi0gICB0a2ludGVyLmRlbGV0ZWZpbGVoYW5kbGVyKGZpbGUpCi0KLU5vdGU6IHNpbmNlIHlvdSBkb24ndCBrbm93ICpob3cgbWFueSBieXRlcyogYXJlIGF2YWlsYWJsZSBmb3IgcmVhZGluZywgeW91IGNhbid0Ci11c2UgdGhlIFB5dGhvbiBmaWxlIG9iamVjdCdzIHJlYWQgb3IgcmVhZGxpbmUgbWV0aG9kcywgc2luY2UgdGhlc2Ugd2lsbCBpbnNpc3QKLW9uIHJlYWRpbmcgYSBwcmVkZWZpbmVkIG51bWJlciBvZiBieXRlcy4gIEZvciBzb2NrZXRzLCB0aGUgOm1ldGg6YHJlY3ZgIG9yCi06bWV0aDpgcmVjdmZyb21gIG1ldGhvZHMgd2lsbCB3b3JrIGZpbmU7IGZvciBvdGhlciBmaWxlcywgdXNlCi1gYG9zLnJlYWQoZmlsZS5maWxlbm8oKSwgbWF4Ynl0ZWNvdW50KWBgLgorSS9PIGlzIHBvc3NpYmxlIG9uIGEgZmlsZSBkZXNjcmlwdG9yLiAgU2VlIDpyZWY6YHRraW50ZXItZmlsZS1oYW5kbGVyc2AuCiAKIAogSSBjYW4ndCBnZXQga2V5IGJpbmRpbmdzIHRvIHdvcmsgaW4gVGtpbnRlcjogd2h5PwpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9pbnN0YWxsZWQucnN0IGIvRG9jL2ZhcS9pbnN0YWxsZWQucnN0CmluZGV4IGVmZWM5YmYuLjQyMjk2NTMgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvaW5zdGFsbGVkLnJzdAorKysgYi9Eb2MvZmFxL2luc3RhbGxlZC5yc3QKQEAgLTExLDcgKzExLDcgQEAKIHNvZnR3YXJlIGRldmVsb3BlcnMgYXQgcGxhY2VzIHN1Y2ggYXMgR29vZ2xlLCBOQVNBLCBhbmQgTHVjYXNmaWxtIEx0ZC4KIAogSWYgeW91IHdpc2ggdG8gbGVhcm4gbW9yZSBhYm91dCBQeXRob24sIHN0YXJ0IHdpdGggdGhlIGBCZWdpbm5lcidzIEd1aWRlIHRvCi1QeXRob24gPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9CZWdpbm5lcnNHdWlkZT5gXy4KK1B5dGhvbiA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9CZWdpbm5lcnNHdWlkZT5gXy4KIAogCiBXaHkgaXMgUHl0aG9uIGluc3RhbGxlZCBvbiBteSBtYWNoaW5lPwpkaWZmIC0tZ2l0IGEvRG9jL2ZhcS9saWJyYXJ5LnJzdCBiL0RvYy9mYXEvbGlicmFyeS5yc3QKaW5kZXggMjU2NjkzMi4uMDY0NzI4ZiAxMDA2NDQKLS0tIGEvRG9jL2ZhcS9saWJyYXJ5LnJzdAorKysgYi9Eb2MvZmFxL2xpYnJhcnkucnN0CkBAIC0xOSw3ICsxOSw3IEBACiBsaWJyYXJ5IGFuZCB3aWxsIGJlIGFibGUgdG8gc2tpcCB0aGlzIHN0ZXAuKQogCiBGb3IgdGhpcmQtcGFydHkgcGFja2FnZXMsIHNlYXJjaCB0aGUgYFB5dGhvbiBQYWNrYWdlIEluZGV4Ci08aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfIG9yIHRyeSBgR29vZ2xlIDxodHRwOi8vd3d3Lmdvb2dsZS5jb20+YF8gb3IKKzxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfIG9yIHRyeSBgR29vZ2xlIDxodHRwczovL3d3dy5nb29nbGUuY29tPmBfIG9yCiBhbm90aGVyIFdlYiBzZWFyY2ggZW5naW5lLiAgU2VhcmNoaW5nIGZvciAiUHl0aG9uIiBwbHVzIGEga2V5d29yZCBvciB0d28gZm9yCiB5b3VyIHRvcGljIG9mIGludGVyZXN0IHdpbGwgdXN1YWxseSBmaW5kIHNvbWV0aGluZyBoZWxwZnVsLgogCkBAIC0xODEsOCArMTgxLDggQEAKIAogVGhlIDptb2Q6YHB5ZG9jYCBtb2R1bGUgY2FuIGNyZWF0ZSBIVE1MIGZyb20gdGhlIGRvYyBzdHJpbmdzIGluIHlvdXIgUHl0aG9uCiBzb3VyY2UgY29kZS4gIEFuIGFsdGVybmF0aXZlIGZvciBjcmVhdGluZyBBUEkgZG9jdW1lbnRhdGlvbiBwdXJlbHkgZnJvbQotZG9jc3RyaW5ncyBpcyBgZXB5ZG9jIDxodHRwOi8vZXB5ZG9jLnNmLm5ldC8+YF8uICBgU3BoaW54Ci08aHR0cDovL3NwaGlueC5wb2Nvby5vcmc+YF8gY2FuIGFsc28gaW5jbHVkZSBkb2NzdHJpbmcgY29udGVudC4KK2RvY3N0cmluZ3MgaXMgYGVweWRvYyA8aHR0cDovL2VweWRvYy5zb3VyY2Vmb3JnZS5uZXQvPmBfLiAgYFNwaGlueAorPGh0dHA6Ly9zcGhpbngtZG9jLm9yZz5gXyBjYW4gYWxzbyBpbmNsdWRlIGRvY3N0cmluZyBjb250ZW50LgogCiAKIEhvdyBkbyBJIGdldCBhIHNpbmdsZSBrZXlwcmVzcyBhdCBhIHRpbWU/CkBAIC0yMTEsNyArMjExLDcgQEAKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgYyA9IHN5cy5zdGRpbi5yZWFkKDEpCiAgICAgICAgICAgICAgICBwcmludCgiR290IGNoYXJhY3RlciIsIHJlcHIoYykpCi0gICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgIHBhc3MKICAgIGZpbmFsbHk6CiAgICAgICAgdGVybWlvcy50Y3NldGF0dHIoZmQsIHRlcm1pb3MuVENTQUZMVVNILCBvbGR0ZXJtKQpAQCAtMjI0LDcgKzIyNCwxMSBAQAogICAgOmZ1bmM6YHRlcm1pb3MudGNzZXRhdHRyYCB0dXJucyBvZmYgc3RkaW4ncyBlY2hvaW5nIGFuZCBkaXNhYmxlcyBjYW5vbmljYWwKICAgIG1vZGUuICA6ZnVuYzpgZmNudGwuZm5jdGxgIGlzIHVzZWQgdG8gb2J0YWluIHN0ZGluJ3MgZmlsZSBkZXNjcmlwdG9yIGZsYWdzCiAgICBhbmQgbW9kaWZ5IHRoZW0gZm9yIG5vbi1ibG9ja2luZyBtb2RlLiAgU2luY2UgcmVhZGluZyBzdGRpbiB3aGVuIGl0IGlzIGVtcHR5Ci0gICByZXN1bHRzIGluIGFuIDpleGM6YElPRXJyb3JgLCB0aGlzIGVycm9yIGlzIGNhdWdodCBhbmQgaWdub3JlZC4KKyAgIHJlc3VsdHMgaW4gYW4gOmV4YzpgT1NFcnJvcmAsIHRoaXMgZXJyb3IgaXMgY2F1Z2h0IGFuZCBpZ25vcmVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgKnN5cy5zdGRpbi5yZWFkKiB1c2VkIHRvIHJhaXNlIDpleGM6YElPRXJyb3JgLiBTdGFydGluZyBmcm9tIFB5dGhvbiAzLjMKKyAgICAgIDpleGM6YElPRXJyb3JgIGlzIGFsaWFzIGZvciA6ZXhjOmBPU0Vycm9yYC4KIAogCiBUaHJlYWRzCkBAIC02MDMsNyArNjA3LDcgQEAKICAgICJleHBlY3QiIGxpYnJhcnkuICBBIFB5dGhvbiBleHRlbnNpb24gdGhhdCBpbnRlcmZhY2VzIHRvIGV4cGVjdCBpcyBjYWxsZWQKICAgICJleHB5IiBhbmQgYXZhaWxhYmxlIGZyb20gaHR0cDovL2V4cGVjdHB5LnNvdXJjZWZvcmdlLm5ldC4gIEEgcHVyZSBQeXRob24KICAgIHNvbHV0aW9uIHRoYXQgd29ya3MgbGlrZSBleHBlY3QgaXMgYHBleHBlY3QKLSAgIDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcGV4cGVjdC8+YF8uCisgICA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9wZXhwZWN0Lz5gXy4KIAogCiBIb3cgZG8gSSBhY2Nlc3MgdGhlIHNlcmlhbCAoUlMyMzIpIHBvcnQ/CkBAIC02NTksNyArNjYzLDcgQEAKIC4uIFhYWCBjaGVjayBpZiB3aWtpIHBhZ2UgaXMgc3RpbGwgdXAgdG8gZGF0ZQogCiBBIHN1bW1hcnkgb2YgYXZhaWxhYmxlIGZyYW1ld29ya3MgaXMgbWFpbnRhaW5lZCBieSBQYXVsIEJvZGRpZSBhdAotaHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1dlYlByb2dyYW1taW5nXCAuCitodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1dlYlByb2dyYW1taW5nXCAuCiAKIENhbWVyb24gTGFpcmQgbWFpbnRhaW5zIGEgdXNlZnVsIHNldCBvZiBwYWdlcyBhYm91dCBQeXRob24gd2ViIHRlY2hub2xvZ2llcyBhdAogaHR0cDovL3BoYXNlaXQubmV0L2NsYWlyZC9jb21wLmxhbmcucHl0aG9uL3dlYl9weXRob24uCkBAIC02ODMsNyArNjg3LDggQEAKICAgICMjIyBjb25uZWN0IGFuZCBzZW5kIHRoZSBzZXJ2ZXIgYSBwYXRoCiAgICByZXEgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCdodHRwOi8vd3d3LnNvbWUtc2VydmVyLm91dC10aGVyZScKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9jZ2ktYmluL3NvbWUtY2dpLXNjcmlwdCcsIGRhdGE9cXMpCi0gICBtc2csIGhkcnMgPSByZXEucmVhZCgpLCByZXEuaW5mbygpCisgICB3aXRoIHJlcToKKyAgICAgICBtc2csIGhkcnMgPSByZXEucmVhZCgpLCByZXEuaW5mbygpCiAKIE5vdGUgdGhhdCBpbiBnZW5lcmFsIGZvciBwZXJjZW50LWVuY29kZWQgUE9TVCBvcGVyYXRpb25zLCBxdWVyeSBzdHJpbmdzIG11c3QgYmUKIHF1b3RlZCB1c2luZyA6ZnVuYzpgdXJsbGliLnBhcnNlLnVybGVuY29kZWAuICBGb3IgZXhhbXBsZSwgdG8gc2VuZApAQCAtNzAyLDcgKzcwNyw3IEBACiAuLiBYWFggYWRkIG1vZGVybiB0ZW1wbGF0ZSBsYW5ndWFnZXMKIAogWW91IGNhbiBmaW5kIGEgY29sbGVjdGlvbiBvZiB1c2VmdWwgbGlua3Mgb24gdGhlIGBXZWIgUHJvZ3JhbW1pbmcgd2lraSBwYWdlCi08aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1dlYlByb2dyYW1taW5nPmBfLgorPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vV2ViUHJvZ3JhbW1pbmc+YF8uCiAKIAogSG93IGRvIEkgc2VuZCBtYWlsIGZyb20gYSBQeXRob24gc2NyaXB0PwpAQCAtNzY5LDcgKzc3NCw3IEBACiAuLiBub3RlOjoKICAgIFRoZSA6bW9kOmBhc3luY29yZWAgbW9kdWxlIHByZXNlbnRzIGEgZnJhbWV3b3JrLWxpa2UgYXBwcm9hY2ggdG8gdGhlIHByb2JsZW0KICAgIG9mIHdyaXRpbmcgbm9uLWJsb2NraW5nIG5ldHdvcmtpbmcgY29kZS4KLSAgIFRoZSB0aGlyZC1wYXJ0eSBgVHdpc3RlZCA8aHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLz5gXyBsaWJyYXJ5IGlzCisgICBUaGUgdGhpcmQtcGFydHkgYFR3aXN0ZWQgPGh0dHBzOi8vdHdpc3RlZG1hdHJpeC5jb20vdHJhYy8+YF8gbGlicmFyeSBpcwogICAgYSBwb3B1bGFyIGFuZCBmZWF0dXJlLXJpY2ggYWx0ZXJuYXRpdmUuCiAKIApAQCAtNzg4LDcgKzc5Myw3IEBACiAKIFN1cHBvcnQgZm9yIG1vc3QgcmVsYXRpb25hbCBkYXRhYmFzZXMgaXMgYXZhaWxhYmxlLiAgU2VlIHRoZQogYERhdGFiYXNlUHJvZ3JhbW1pbmcgd2lraSBwYWdlCi08aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL0RhdGFiYXNlUHJvZ3JhbW1pbmc+YF8gZm9yIGRldGFpbHMuCis8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9EYXRhYmFzZVByb2dyYW1taW5nPmBfIGZvciBkZXRhaWxzLgogCiAKIEhvdyBkbyB5b3UgaW1wbGVtZW50IHBlcnNpc3RlbnQgb2JqZWN0cyBpbiBQeXRob24/CmRpZmYgLS1naXQgYS9Eb2MvZmFxL3Byb2dyYW1taW5nLnJzdCBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CmluZGV4IDI4MGQ1ZTEuLjk0YjQyOGQgMTAwNjQ0Ci0tLSBhL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CisrKyBiL0RvYy9mYXEvcHJvZ3JhbW1pbmcucnN0CkBAIC0yMywxNSArMjMsMTQgQEAKIAogVGhlIElETEUgaW50ZXJhY3RpdmUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHN0YW5kYXJkCiBQeXRob24gZGlzdHJpYnV0aW9uIChub3JtYWxseSBhdmFpbGFibGUgYXMgVG9vbHMvc2NyaXB0cy9pZGxlKSwgaW5jbHVkZXMgYQotZ3JhcGhpY2FsIGRlYnVnZ2VyLiAgVGhlcmUgaXMgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIElETEUgZGVidWdnZXIgYXQKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9pZGxlL2RvYy9pZGxlMi5odG1sI0RlYnVnZ2VyLgorZ3JhcGhpY2FsIGRlYnVnZ2VyLgogCiBQeXRob25XaW4gaXMgYSBQeXRob24gSURFIHRoYXQgaW5jbHVkZXMgYSBHVUkgZGVidWdnZXIgYmFzZWQgb24gcGRiLiAgVGhlCiBQeXRob253aW4gZGVidWdnZXIgY29sb3JzIGJyZWFrcG9pbnRzIGFuZCBoYXMgcXVpdGUgYSBmZXcgY29vbCBmZWF0dXJlcyBzdWNoIGFzCiBkZWJ1Z2dpbmcgbm9uLVB5dGhvbndpbiBwcm9ncmFtcy4gIFB5dGhvbndpbiBpcyBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgYFB5dGhvbgogZm9yIFdpbmRvd3MgRXh0ZW5zaW9ucyA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9weXdpbjMyLz5gX18gcHJvamVjdCBhbmQKIGFzIGEgcGFydCBvZiB0aGUgQWN0aXZlUHl0aG9uIGRpc3RyaWJ1dGlvbiAoc2VlCi1odHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9Qcm9kdWN0cy9BY3RpdmVQeXRob24vaW5kZXguaHRtbCkuCitodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVweXRob25cICkuCiAKIGBCb2EgQ29uc3RydWN0b3IgPGh0dHA6Ly9ib2EtY29uc3RydWN0b3Iuc291cmNlZm9yZ2UubmV0Lz5gXyBpcyBhbiBJREUgYW5kIEdVSQogYnVpbGRlciB0aGF0IHVzZXMgd3hXaWRnZXRzLiAgSXQgb2ZmZXJzIHZpc3VhbCBmcmFtZSBjcmVhdGlvbiBhbmQgbWFuaXB1bGF0aW9uLApAQCAtMzksNyArMzgsNyBAQAogaGllcmFyY2hpZXMsIGRvYyBzdHJpbmcgZ2VuZXJhdGVkIGh0bWwgZG9jdW1lbnRhdGlvbiwgYW4gYWR2YW5jZWQgZGVidWdnZXIsCiBpbnRlZ3JhdGVkIGhlbHAsIGFuZCBab3BlIHN1cHBvcnQuCiAKLWBFcmljIDxodHRwOi8vd3d3LmRpZS1vZmZlbmJhY2hzLmRlL2VyaWMvaW5kZXguaHRtbD5gXyBpcyBhbiBJREUgYnVpbHQgb24gUHlRdAorYEVyaWMgPGh0dHA6Ly9lcmljLWlkZS5weXRob24tcHJvamVjdHMub3JnLz5gXyBpcyBhbiBJREUgYnVpbHQgb24gUHlRdAogYW5kIHRoZSBTY2ludGlsbGEgZWRpdGluZyBjb21wb25lbnQuCiAKIFB5ZGIgaXMgYSB2ZXJzaW9uIG9mIHRoZSBzdGFuZGFyZCBQeXRob24gZGVidWdnZXIgcGRiLCBtb2RpZmllZCBmb3IgdXNlIHdpdGggRERECkBAIC01MSw3ICs1MCw4IEBACiBUaGV5IGluY2x1ZGU6CiAKICogV2luZyBJREUgKGh0dHA6Ly93aW5nd2FyZS5jb20vKQotKiBLb21vZG8gSURFIChodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9Qcm9kdWN0cy9Lb21vZG8pCisqIEtvbW9kbyBJREUgKGh0dHA6Ly9rb21vZG9pZGUuY29tLykKKyogUHlDaGFybSAoaHR0cHM6Ly93d3cuamV0YnJhaW5zLmNvbS9weWNoYXJtLykKIAogCiBJcyB0aGVyZSBhIHRvb2wgdG8gaGVscCBmaW5kIGJ1Z3Mgb3IgcGVyZm9ybSBzdGF0aWMgYW5hbHlzaXM/CkBAIC02MSw3ICs2MSw3IEBACiAKIFB5Q2hlY2tlciBpcyBhIHN0YXRpYyBhbmFseXNpcyB0b29sIHRoYXQgZmluZHMgYnVncyBpbiBQeXRob24gc291cmNlIGNvZGUgYW5kCiB3YXJucyBhYm91dCBjb2RlIGNvbXBsZXhpdHkgYW5kIHN0eWxlLiAgWW91IGNhbiBnZXQgUHlDaGVja2VyIGZyb20KLWh0dHA6Ly9weWNoZWNrZXIuc2YubmV0LgoraHR0cDovL3B5Y2hlY2tlci5zb3VyY2Vmb3JnZS5uZXQvLgogCiBgUHlsaW50IDxodHRwOi8vd3d3LmxvZ2lsYWIub3JnL3Byb2plY3RzL3B5bGludD5gXyBpcyBhbm90aGVyIHRvb2wgdGhhdCBjaGVja3MKIGlmIGEgbW9kdWxlIHNhdGlzZmllcyBhIGNvZGluZyBzdGFuZGFyZCwgYW5kIGFsc28gbWFrZXMgaXQgcG9zc2libGUgdG8gd3JpdGUKQEAgLTY5LDggKzY5LDcgQEAKIFB5Q2hlY2tlciBwZXJmb3JtcywgUHlsaW50IG9mZmVycyBzb21lIGFkZGl0aW9uYWwgZmVhdHVyZXMgc3VjaCBhcyBjaGVja2luZyBsaW5lCiBsZW5ndGgsIHdoZXRoZXIgdmFyaWFibGUgbmFtZXMgYXJlIHdlbGwtZm9ybWVkIGFjY29yZGluZyB0byB5b3VyIGNvZGluZwogc3RhbmRhcmQsIHdoZXRoZXIgZGVjbGFyZWQgaW50ZXJmYWNlcyBhcmUgZnVsbHkgaW1wbGVtZW50ZWQsIGFuZCBtb3JlLgotaHR0cDovL3d3dy5sb2dpbGFiLm9yZy9jYXJkL3B5bGludF9tYW51YWwgcHJvdmlkZXMgYSBmdWxsIGxpc3Qgb2YgUHlsaW50J3MKLWZlYXR1cmVzLgoraHR0cDovL2RvY3MucHlsaW50Lm9yZy8gcHJvdmlkZXMgYSBmdWxsIGxpc3Qgb2YgUHlsaW50J3MgZmVhdHVyZXMuCiAKIAogSG93IGNhbiBJIGNyZWF0ZSBhIHN0YW5kLWFsb25lIGJpbmFyeSBmcm9tIGEgUHl0aG9uIHNjcmlwdD8KQEAgLTEwMSwxMyArMTAwLDcgQEAKIAogICAgIGh0dHA6Ly93d3cucHkyZXhlLm9yZy8KIAotQW5vdGhlciBpcyBDaHJpc3RpYW4gVGlzbWVyJ3MgYFNRRlJFRVpFIDxodHRwOi8vc3RhcnNoaXAucHl0aG9uLm5ldC9jcmV3L3Bpcng+YF8KLXdoaWNoIGFwcGVuZHMgdGhlIGJ5dGUgY29kZSB0byBhIHNwZWNpYWxseS1wcmVwYXJlZCBQeXRob24gaW50ZXJwcmV0ZXIgdGhhdCBjYW4KLWZpbmQgdGhlIGJ5dGUgY29kZSBpbiB0aGUgZXhlY3V0YWJsZS4KLQotT3RoZXIgdG9vbHMgaW5jbHVkZSBGcmVkcmlrIEx1bmRoJ3MgYFNxdWVlemUKLTxodHRwOi8vd3d3LnB5dGhvbndhcmUuY29tL3Byb2R1Y3RzL3B5dGhvbi9zcXVlZXplPmBfIGFuZCBBbnRob255IFR1aW5pbmdhJ3MKLWBjeF9GcmVlemUgPGh0dHA6Ly9zdGFyc2hpcC5weXRob24ubmV0L2NyZXcvYXR1aW5pbmcvY3hfRnJlZXplL2luZGV4Lmh0bWw+YF8uCitBbm90aGVyIHRvb2wgaXMgQW50aG9ueSBUdWluaW5nYSdzIGBjeF9GcmVlemUgPGh0dHA6Ly9jeC1mcmVlemUuc291cmNlZm9yZ2UubmV0Lz5gXy4KIAogCiBBcmUgdGhlcmUgY29kaW5nIHN0YW5kYXJkcyBvciBhIHN0eWxlIGd1aWRlIGZvciBQeXRob24gcHJvZ3JhbXM/CkBAIC0xOTQsMTAgKzE4Nyw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSW4gUHl0aG9uLCB2YXJpYWJsZXMgdGhhdCBhcmUgb25seSByZWZlcmVuY2VkIGluc2lkZSBhIGZ1bmN0aW9uIGFyZSBpbXBsaWNpdGx5Ci1nbG9iYWwuICBJZiBhIHZhcmlhYmxlIGlzIGFzc2lnbmVkIGEgbmV3IHZhbHVlIGFueXdoZXJlIHdpdGhpbiB0aGUgZnVuY3Rpb24ncwotYm9keSwgaXQncyBhc3N1bWVkIHRvIGJlIGEgbG9jYWwuICBJZiBhIHZhcmlhYmxlIGlzIGV2ZXIgYXNzaWduZWQgYSBuZXcgdmFsdWUKLWluc2lkZSB0aGUgZnVuY3Rpb24sIHRoZSB2YXJpYWJsZSBpcyBpbXBsaWNpdGx5IGxvY2FsLCBhbmQgeW91IG5lZWQgdG8KLWV4cGxpY2l0bHkgZGVjbGFyZSBpdCBhcyAnZ2xvYmFsJy4KK2dsb2JhbC4gIElmIGEgdmFyaWFibGUgaXMgYXNzaWduZWQgYSB2YWx1ZSBhbnl3aGVyZSB3aXRoaW4gdGhlIGZ1bmN0aW9uJ3MgYm9keSwKK2l0J3MgYXNzdW1lZCB0byBiZSBhIGxvY2FsIHVubGVzcyBleHBsaWNpdGx5IGRlY2xhcmVkIGFzIGdsb2JhbC4KIAogVGhvdWdoIGEgYml0IHN1cnByaXNpbmcgYXQgZmlyc3QsIGEgbW9tZW50J3MgY29uc2lkZXJhdGlvbiBleHBsYWlucyB0aGlzLiAgT24KIG9uZSBoYW5kLCByZXF1aXJpbmcgOmtleXdvcmQ6YGdsb2JhbGAgZm9yIGFzc2lnbmVkIHZhcmlhYmxlcyBwcm92aWRlcyBhIGJhcgpAQCAtMjkyLDkgKzI4Myw4IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBJbiBnZW5lcmFsLCBkb24ndCB1c2UgYGBmcm9tIG1vZHVsZW5hbWUgaW1wb3J0ICpgYC4gIERvaW5nIHNvIGNsdXR0ZXJzIHRoZQotaW1wb3J0ZXIncyBuYW1lc3BhY2UuICBTb21lIHBlb3BsZSBhdm9pZCB0aGlzIGlkaW9tIGV2ZW4gd2l0aCB0aGUgZmV3IG1vZHVsZXMKLXRoYXQgd2VyZSBkZXNpZ25lZCB0byBiZSBpbXBvcnRlZCBpbiB0aGlzIG1hbm5lci4gIE1vZHVsZXMgZGVzaWduZWQgaW4gdGhpcwotbWFubmVyIGluY2x1ZGUgOm1vZDpgdGtpbnRlcmAsIGFuZCA6bW9kOmB0aHJlYWRpbmdgLgoraW1wb3J0ZXIncyBuYW1lc3BhY2UsIGFuZCBtYWtlcyBpdCBtdWNoIGhhcmRlciBmb3IgbGludGVycyB0byBkZXRlY3QgdW5kZWZpbmVkCituYW1lcy4KIAogSW1wb3J0IG1vZHVsZXMgYXQgdGhlIHRvcCBvZiBhIGZpbGUuICBEb2luZyBzbyBtYWtlcyBpdCBjbGVhciB3aGF0IG90aGVyIG1vZHVsZXMKIHlvdXIgY29kZSByZXF1aXJlcyBhbmQgYXZvaWRzIHF1ZXN0aW9ucyBvZiB3aGV0aGVyIHRoZSBtb2R1bGUgbmFtZSBpcyBpbiBzY29wZS4KQEAgLTMwOCwxMSArMjk4LDYgQEAKICAgIGRpcmVjdG9yeSkgLS0gZS5nLiBteC5EYXRlVGltZSwgWk9EQiwgUElMLkltYWdlLCBldGMuCiAzLiBsb2NhbGx5LWRldmVsb3BlZCBtb2R1bGVzCiAKLU5ldmVyIHVzZSByZWxhdGl2ZSBwYWNrYWdlIGltcG9ydHMuICBJZiB5b3UncmUgd3JpdGluZyBjb2RlIHRoYXQncyBpbiB0aGUKLWBgcGFja2FnZS5zdWIubTFgYCBtb2R1bGUgYW5kIHdhbnQgdG8gaW1wb3J0IGBgcGFja2FnZS5zdWIubTJgYCwgZG8gbm90IGp1c3QKLXdyaXRlIGBgZnJvbSAuIGltcG9ydCBtMmBgLCBldmVuIHRob3VnaCBpdCdzIGxlZ2FsLiAgV3JpdGUgYGBmcm9tIHBhY2thZ2Uuc3ViCi1pbXBvcnQgbTJgYCBpbnN0ZWFkLiAgU2VlIDpwZXA6YDMyOGAgZm9yIGRldGFpbHMuCi0KIEl0IGlzIHNvbWV0aW1lcyBuZWNlc3NhcnkgdG8gbW92ZSBpbXBvcnRzIHRvIGEgZnVuY3Rpb24gb3IgY2xhc3MgdG8gYXZvaWQKIHByb2JsZW1zIHdpdGggY2lyY3VsYXIgaW1wb3J0cy4gIEdvcmRvbiBNY01pbGxhbiBzYXlzOgogCkBAIC0zNDMsMTMgKzMyOCw2MSBAQAogY291cGxlIG9mIGRpY3Rpb25hcnkgbG9va3Vwcy4gIEV2ZW4gaWYgdGhlIG1vZHVsZSBuYW1lIGhhcyBnb25lIG91dCBvZiBzY29wZSwKIHRoZSBtb2R1bGUgaXMgcHJvYmFibHkgYXZhaWxhYmxlIGluIDpkYXRhOmBzeXMubW9kdWxlc2AuCiAKLUlmIG9ubHkgaW5zdGFuY2VzIG9mIGEgc3BlY2lmaWMgY2xhc3MgdXNlIGEgbW9kdWxlLCB0aGVuIGl0IGlzIHJlYXNvbmFibGUgdG8KLWltcG9ydCB0aGUgbW9kdWxlIGluIHRoZSBjbGFzcydzIGBgX19pbml0X19gYCBtZXRob2QgYW5kIHRoZW4gYXNzaWduIHRoZSBtb2R1bGUKLXRvIGFuIGluc3RhbmNlIHZhcmlhYmxlIHNvIHRoYXQgdGhlIG1vZHVsZSBpcyBhbHdheXMgYXZhaWxhYmxlICh2aWEgdGhhdAotaW5zdGFuY2UgdmFyaWFibGUpIGR1cmluZyB0aGUgbGlmZSBvZiB0aGUgb2JqZWN0LiAgTm90ZSB0aGF0IHRvIGRlbGF5IGFuIGltcG9ydAotdW50aWwgdGhlIGNsYXNzIGlzIGluc3RhbnRpYXRlZCwgdGhlIGltcG9ydCBtdXN0IGJlIGluc2lkZSBhIG1ldGhvZC4gIFB1dHRpbmcKLXRoZSBpbXBvcnQgaW5zaWRlIHRoZSBjbGFzcyBidXQgb3V0c2lkZSBvZiBhbnkgbWV0aG9kIHN0aWxsIGNhdXNlcyB0aGUgaW1wb3J0IHRvCi1vY2N1ciB3aGVuIHRoZSBtb2R1bGUgaXMgaW5pdGlhbGl6ZWQuCisKK1doeSBhcmUgZGVmYXVsdCB2YWx1ZXMgc2hhcmVkIGJldHdlZW4gb2JqZWN0cz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyB0eXBlIG9mIGJ1ZyBjb21tb25seSBiaXRlcyBuZW9waHl0ZSBwcm9ncmFtbWVycy4gIENvbnNpZGVyIHRoaXMgZnVuY3Rpb246OgorCisgICBkZWYgZm9vKG15ZGljdD17fSk6ICAjIERhbmdlcjogc2hhcmVkIHJlZmVyZW5jZSB0byBvbmUgZGljdCBmb3IgYWxsIGNhbGxzCisgICAgICAgLi4uIGNvbXB1dGUgc29tZXRoaW5nIC4uLgorICAgICAgIG15ZGljdFtrZXldID0gdmFsdWUKKyAgICAgICByZXR1cm4gbXlkaWN0CisKK1RoZSBmaXJzdCB0aW1lIHlvdSBjYWxsIHRoaXMgZnVuY3Rpb24sIGBgbXlkaWN0YGAgY29udGFpbnMgYSBzaW5nbGUgaXRlbS4gIFRoZQorc2Vjb25kIHRpbWUsIGBgbXlkaWN0YGAgY29udGFpbnMgdHdvIGl0ZW1zIGJlY2F1c2Ugd2hlbiBgYGZvbygpYGAgYmVnaW5zCitleGVjdXRpbmcsIGBgbXlkaWN0YGAgc3RhcnRzIG91dCB3aXRoIGFuIGl0ZW0gYWxyZWFkeSBpbiBpdC4KKworSXQgaXMgb2Z0ZW4gZXhwZWN0ZWQgdGhhdCBhIGZ1bmN0aW9uIGNhbGwgY3JlYXRlcyBuZXcgb2JqZWN0cyBmb3IgZGVmYXVsdAordmFsdWVzLiBUaGlzIGlzIG5vdCB3aGF0IGhhcHBlbnMuIERlZmF1bHQgdmFsdWVzIGFyZSBjcmVhdGVkIGV4YWN0bHkgb25jZSwgd2hlbgordGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQuICBJZiB0aGF0IG9iamVjdCBpcyBjaGFuZ2VkLCBsaWtlIHRoZSBkaWN0aW9uYXJ5IGluIHRoaXMKK2V4YW1wbGUsIHN1YnNlcXVlbnQgY2FsbHMgdG8gdGhlIGZ1bmN0aW9uIHdpbGwgcmVmZXIgdG8gdGhpcyBjaGFuZ2VkIG9iamVjdC4KKworQnkgZGVmaW5pdGlvbiwgaW1tdXRhYmxlIG9iamVjdHMgc3VjaCBhcyBudW1iZXJzLCBzdHJpbmdzLCB0dXBsZXMsIGFuZCBgYE5vbmVgYCwKK2FyZSBzYWZlIGZyb20gY2hhbmdlLiBDaGFuZ2VzIHRvIG11dGFibGUgb2JqZWN0cyBzdWNoIGFzIGRpY3Rpb25hcmllcywgbGlzdHMsCithbmQgY2xhc3MgaW5zdGFuY2VzIGNhbiBsZWFkIHRvIGNvbmZ1c2lvbi4KKworQmVjYXVzZSBvZiB0aGlzIGZlYXR1cmUsIGl0IGlzIGdvb2QgcHJvZ3JhbW1pbmcgcHJhY3RpY2UgdG8gbm90IHVzZSBtdXRhYmxlCitvYmplY3RzIGFzIGRlZmF1bHQgdmFsdWVzLiAgSW5zdGVhZCwgdXNlIGBgTm9uZWBgIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGFuZAoraW5zaWRlIHRoZSBmdW5jdGlvbiwgY2hlY2sgaWYgdGhlIHBhcmFtZXRlciBpcyBgYE5vbmVgYCBhbmQgY3JlYXRlIGEgbmV3CitsaXN0L2RpY3Rpb25hcnkvd2hhdGV2ZXIgaWYgaXQgaXMuICBGb3IgZXhhbXBsZSwgZG9uJ3Qgd3JpdGU6OgorCisgICBkZWYgZm9vKG15ZGljdD17fSk6CisgICAgICAgLi4uCisKK2J1dDo6CisKKyAgIGRlZiBmb28obXlkaWN0PU5vbmUpOgorICAgICAgIGlmIG15ZGljdCBpcyBOb25lOgorICAgICAgICAgICBteWRpY3QgPSB7fSAgIyBjcmVhdGUgYSBuZXcgZGljdCBmb3IgbG9jYWwgbmFtZXNwYWNlCisKK1RoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZnVsLiAgV2hlbiB5b3UgaGF2ZSBhIGZ1bmN0aW9uIHRoYXQncyB0aW1lLWNvbnN1bWluZyB0bworY29tcHV0ZSwgYSBjb21tb24gdGVjaG5pcXVlIGlzIHRvIGNhY2hlIHRoZSBwYXJhbWV0ZXJzIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlCitvZiBlYWNoIGNhbGwgdG8gdGhlIGZ1bmN0aW9uLCBhbmQgcmV0dXJuIHRoZSBjYWNoZWQgdmFsdWUgaWYgdGhlIHNhbWUgdmFsdWUgaXMKK3JlcXVlc3RlZCBhZ2Fpbi4gIFRoaXMgaXMgY2FsbGVkICJtZW1vaXppbmciLCBhbmQgY2FuIGJlIGltcGxlbWVudGVkIGxpa2UgdGhpczo6CisKKyAgICMgQ2FsbGVycyB3aWxsIG5ldmVyIHByb3ZpZGUgYSB0aGlyZCBwYXJhbWV0ZXIgZm9yIHRoaXMgZnVuY3Rpb24uCisgICBkZWYgZXhwZW5zaXZlKGFyZzEsIGFyZzIsIF9jYWNoZT17fSk6CisgICAgICAgaWYgKGFyZzEsIGFyZzIpIGluIF9jYWNoZToKKyAgICAgICAgICAgcmV0dXJuIF9jYWNoZVsoYXJnMSwgYXJnMildCisKKyAgICAgICAjIENhbGN1bGF0ZSB0aGUgdmFsdWUKKyAgICAgICByZXN1bHQgPSAuLi4gZXhwZW5zaXZlIGNvbXB1dGF0aW9uIC4uLgorICAgICAgIF9jYWNoZVsoYXJnMSwgYXJnMildID0gcmVzdWx0ICAgICAgICAgICAjIFN0b3JlIHJlc3VsdCBpbiB0aGUgY2FjaGUKKyAgICAgICByZXR1cm4gcmVzdWx0CisKK1lvdSBjb3VsZCB1c2UgYSBnbG9iYWwgdmFyaWFibGUgY29udGFpbmluZyBhIGRpY3Rpb25hcnkgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdAordmFsdWU7IGl0J3MgYSBtYXR0ZXIgb2YgdGFzdGUuCiAKIAogSG93IGNhbiBJIHBhc3Mgb3B0aW9uYWwgb3Iga2V5d29yZCBwYXJhbWV0ZXJzIGZyb20gb25lIGZ1bmN0aW9uIHRvIGFub3RoZXI/CkBAIC0zOTIsNiArNDI1LDgxIEBACiB0aGUgdmFsdWVzIGBgNDJgYCwgYGAzMTRgYCwgYW5kIGBgc29tZXZhcmBgIGFyZSBhcmd1bWVudHMuCiAKIAorV2h5IGRpZCBjaGFuZ2luZyBsaXN0ICd5JyBhbHNvIGNoYW5nZSBsaXN0ICd4Jz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3Ugd3JvdGUgY29kZSBsaWtlOjoKKworICAgPj4+IHggPSBbXQorICAgPj4+IHkgPSB4CisgICA+Pj4geS5hcHBlbmQoMTApCisgICA+Pj4geQorICAgWzEwXQorICAgPj4+IHgKKyAgIFsxMF0KKworeW91IG1pZ2h0IGJlIHdvbmRlcmluZyB3aHkgYXBwZW5kaW5nIGFuIGVsZW1lbnQgdG8gYGB5YGAgY2hhbmdlZCBgYHhgYCB0b28uCisKK1RoZXJlIGFyZSB0d28gZmFjdG9ycyB0aGF0IHByb2R1Y2UgdGhpcyByZXN1bHQ6CisKKzEpIFZhcmlhYmxlcyBhcmUgc2ltcGx5IG5hbWVzIHRoYXQgcmVmZXIgdG8gb2JqZWN0cy4gIERvaW5nIGBgeSA9IHhgYCBkb2Vzbid0CisgICBjcmVhdGUgYSBjb3B5IG9mIHRoZSBsaXN0IC0tIGl0IGNyZWF0ZXMgYSBuZXcgdmFyaWFibGUgYGB5YGAgdGhhdCByZWZlcnMgdG8KKyAgIHRoZSBzYW1lIG9iamVjdCBgYHhgYCByZWZlcnMgdG8uICBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgb2JqZWN0CisgICAodGhlIGxpc3QpLCBhbmQgYm90aCBgYHhgYCBhbmQgYGB5YGAgcmVmZXIgdG8gaXQuCisyKSBMaXN0cyBhcmUgOnRlcm06YG11dGFibGVgLCB3aGljaCBtZWFucyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZWlyIGNvbnRlbnQuCisKK0FmdGVyIHRoZSBjYWxsIHRvIDptZXRoOmB+bGlzdC5hcHBlbmRgLCB0aGUgY29udGVudCBvZiB0aGUgbXV0YWJsZSBvYmplY3QgaGFzCitjaGFuZ2VkIGZyb20gYGBbXWBgIHRvIGBgWzEwXWBgLiAgU2luY2UgYm90aCB0aGUgdmFyaWFibGVzIHJlZmVyIHRvIHRoZSBzYW1lCitvYmplY3QsIHVzaW5nIGVpdGhlciBuYW1lIGFjY2Vzc2VzIHRoZSBtb2RpZmllZCB2YWx1ZSBgYFsxMF1gYC4KKworSWYgd2UgaW5zdGVhZCBhc3NpZ24gYW4gaW1tdXRhYmxlIG9iamVjdCB0byBgYHhgYDo6CisKKyAgID4+PiB4ID0gNSAgIyBpbnRzIGFyZSBpbW11dGFibGUKKyAgID4+PiB5ID0geAorICAgPj4+IHggPSB4ICsgMSAgIyA1IGNhbid0IGJlIG11dGF0ZWQsIHdlIGFyZSBjcmVhdGluZyBhIG5ldyBvYmplY3QgaGVyZQorICAgPj4+IHgKKyAgIDYKKyAgID4+PiB5CisgICA1CisKK3dlIGNhbiBzZWUgdGhhdCBpbiB0aGlzIGNhc2UgYGB4YGAgYW5kIGBgeWBgIGFyZSBub3QgZXF1YWwgYW55bW9yZS4gIFRoaXMgaXMKK2JlY2F1c2UgaW50ZWdlcnMgYXJlIDp0ZXJtOmBpbW11dGFibGVgLCBhbmQgd2hlbiB3ZSBkbyBgYHggPSB4ICsgMWBgIHdlIGFyZSBub3QKK211dGF0aW5nIHRoZSBpbnQgYGA1YGAgYnkgaW5jcmVtZW50aW5nIGl0cyB2YWx1ZTsgaW5zdGVhZCwgd2UgYXJlIGNyZWF0aW5nIGEKK25ldyBvYmplY3QgKHRoZSBpbnQgYGA2YGApIGFuZCBhc3NpZ25pbmcgaXQgdG8gYGB4YGAgKHRoYXQgaXMsIGNoYW5naW5nIHdoaWNoCitvYmplY3QgYGB4YGAgcmVmZXJzIHRvKS4gIEFmdGVyIHRoaXMgYXNzaWdubWVudCB3ZSBoYXZlIHR3byBvYmplY3RzICh0aGUgaW50cworYGA2YGAgYW5kIGBgNWBgKSBhbmQgdHdvIHZhcmlhYmxlcyB0aGF0IHJlZmVyIHRvIHRoZW0gKGBgeGBgIG5vdyByZWZlcnMgdG8KK2BgNmBgIGJ1dCBgYHlgYCBzdGlsbCByZWZlcnMgdG8gYGA1YGApLgorCitTb21lIG9wZXJhdGlvbnMgKGZvciBleGFtcGxlIGBgeS5hcHBlbmQoMTApYGAgYW5kIGBgeS5zb3J0KClgYCkgbXV0YXRlIHRoZQorb2JqZWN0LCB3aGVyZWFzIHN1cGVyZmljaWFsbHkgc2ltaWxhciBvcGVyYXRpb25zIChmb3IgZXhhbXBsZSBgYHkgPSB5ICsgWzEwXWBgCithbmQgYGBzb3J0ZWQoeSlgYCkgY3JlYXRlIGEgbmV3IG9iamVjdC4gIEluIGdlbmVyYWwgaW4gUHl0aG9uIChhbmQgaW4gYWxsIGNhc2VzCitpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSkgYSBtZXRob2QgdGhhdCBtdXRhdGVzIGFuIG9iamVjdCB3aWxsIHJldHVybiBgYE5vbmVgYAordG8gaGVscCBhdm9pZCBnZXR0aW5nIHRoZSB0d28gdHlwZXMgb2Ygb3BlcmF0aW9ucyBjb25mdXNlZC4gIFNvIGlmIHlvdQorbWlzdGFrZW5seSB3cml0ZSBgYHkuc29ydCgpYGAgdGhpbmtpbmcgaXQgd2lsbCBnaXZlIHlvdSBhIHNvcnRlZCBjb3B5IG9mIGBgeWBgLAoreW91J2xsIGluc3RlYWQgZW5kIHVwIHdpdGggYGBOb25lYGAsIHdoaWNoIHdpbGwgbGlrZWx5IGNhdXNlIHlvdXIgcHJvZ3JhbSB0bworZ2VuZXJhdGUgYW4gZWFzaWx5IGRpYWdub3NlZCBlcnJvci4KKworSG93ZXZlciwgdGhlcmUgaXMgb25lIGNsYXNzIG9mIG9wZXJhdGlvbnMgd2hlcmUgdGhlIHNhbWUgb3BlcmF0aW9uIHNvbWV0aW1lcworaGFzIGRpZmZlcmVudCBiZWhhdmlvcnMgd2l0aCBkaWZmZXJlbnQgdHlwZXM6ICB0aGUgYXVnbWVudGVkIGFzc2lnbm1lbnQKK29wZXJhdG9ycy4gIEZvciBleGFtcGxlLCBgYCs9YGAgbXV0YXRlcyBsaXN0cyBidXQgbm90IHR1cGxlcyBvciBpbnRzIChgYGFfbGlzdAorKz0gWzEsIDIsIDNdYGAgaXMgZXF1aXZhbGVudCB0byBgYGFfbGlzdC5leHRlbmQoWzEsIDIsIDNdKWBgIGFuZCBtdXRhdGVzCitgYGFfbGlzdGBgLCB3aGVyZWFzIGBgc29tZV90dXBsZSArPSAoMSwgMiwgMylgYCBhbmQgYGBzb21lX2ludCArPSAxYGAgY3JlYXRlCituZXcgb2JqZWN0cykuCisKK0luIG90aGVyIHdvcmRzOgorCisqIElmIHdlIGhhdmUgYSBtdXRhYmxlIG9iamVjdCAoOmNsYXNzOmBsaXN0YCwgOmNsYXNzOmBkaWN0YCwgOmNsYXNzOmBzZXRgLAorICBldGMuKSwgd2UgY2FuIHVzZSBzb21lIHNwZWNpZmljIG9wZXJhdGlvbnMgdG8gbXV0YXRlIGl0IGFuZCBhbGwgdGhlIHZhcmlhYmxlcworICB0aGF0IHJlZmVyIHRvIGl0IHdpbGwgc2VlIHRoZSBjaGFuZ2UuCisqIElmIHdlIGhhdmUgYW4gaW1tdXRhYmxlIG9iamVjdCAoOmNsYXNzOmBzdHJgLCA6Y2xhc3M6YGludGAsIDpjbGFzczpgdHVwbGVgLAorICBldGMuKSwgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCByZWZlciB0byBpdCB3aWxsIGFsd2F5cyBzZWUgdGhlIHNhbWUgdmFsdWUsCisgIGJ1dCBvcGVyYXRpb25zIHRoYXQgdHJhbnNmb3JtIHRoYXQgdmFsdWUgaW50byBhIG5ldyB2YWx1ZSBhbHdheXMgcmV0dXJuIGEgbmV3CisgIG9iamVjdC4KKworSWYgeW91IHdhbnQgdG8ga25vdyBpZiB0d28gdmFyaWFibGVzIHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCBvciBub3QsIHlvdSBjYW4KK3VzZSB0aGUgOmtleXdvcmQ6YGlzYCBvcGVyYXRvciwgb3IgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmBpZGAuCisKKwogSG93IGRvIEkgd3JpdGUgYSBmdW5jdGlvbiB3aXRoIG91dHB1dCBwYXJhbWV0ZXJzIChjYWxsIGJ5IHJlZmVyZW5jZSk/CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNzExLDcgKzgxOSw3IEBACiAxNDRgYCBhbmQgYGBpbnQoJzB4MTQ0JylgYCByYWlzZXMgOmV4YzpgVmFsdWVFcnJvcmAuIGBgaW50KHN0cmluZywgYmFzZSlgYCB0YWtlcwogdGhlIGJhc2UgdG8gY29udmVydCBmcm9tIGFzIGEgc2Vjb25kIG9wdGlvbmFsIGFyZ3VtZW50LCBzbyBgYGludCgnMHgxNDQnLCAxNikgPT0KIDMyNGBgLiAgSWYgdGhlIGJhc2UgaXMgc3BlY2lmaWVkIGFzIDAsIHRoZSBudW1iZXIgaXMgaW50ZXJwcmV0ZWQgdXNpbmcgUHl0aG9uJ3MKLXJ1bGVzOiBhIGxlYWRpbmcgJzAnIGluZGljYXRlcyBvY3RhbCwgYW5kICcweCcgaW5kaWNhdGVzIGEgaGV4IG51bWJlci4KK3J1bGVzOiBhIGxlYWRpbmcgJzBvJyBpbmRpY2F0ZXMgb2N0YWwsIGFuZCAnMHgnIGluZGljYXRlcyBhIGhleCBudW1iZXIuCiAKIERvIG5vdCB1c2UgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmBldmFsYCBpZiBhbGwgeW91IG5lZWQgaXMgdG8gY29udmVydAogc3RyaW5ncyB0byBudW1iZXJzLiAgOmZ1bmM6YGV2YWxgIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBzbG93ZXIgYW5kIGl0IHByZXNlbnRzIGEKQEAgLTczMiw3ICs4NDAsNyBAQAogY29uc3RydWN0b3IgOmZ1bmM6YHN0cmAuICBJZiB5b3Ugd2FudCBhIGhleGFkZWNpbWFsIG9yIG9jdGFsIHJlcHJlc2VudGF0aW9uLCB1c2UKIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgOmZ1bmM6YGhleGAgb3IgOmZ1bmM6YG9jdGAuICBGb3IgZmFuY3kgZm9ybWF0dGluZywgc2VlCiB0aGUgOnJlZjpgc3RyaW5nLWZvcm1hdHRpbmdgIHNlY3Rpb24sIGUuZy4gYGAiezowNGR9Ii5mb3JtYXQoMTQ0KWBgIHlpZWxkcwotYGAnMDE0NCdgYCBhbmQgYGAiezouM2Z9Ii5mb3JtYXQoMS8zKWBgIHlpZWxkcyBgYCcwLjMzMydgYC4KK2BgJzAxNDQnYGAgYW5kIGBgIns6LjNmfSIuZm9ybWF0KDEuMC8zLjApYGAgeWllbGRzIGBgJzAuMzMzJ2BgLgogCiAKIEhvdyBkbyBJIG1vZGlmeSBhIHN0cmluZyBpbiBwbGFjZT8KQEAgLTc0MSw3ICs4NDksNyBAQAogWW91IGNhbid0LCBiZWNhdXNlIHN0cmluZ3MgYXJlIGltbXV0YWJsZS4gIEluIG1vc3Qgc2l0dWF0aW9ucywgeW91IHNob3VsZAogc2ltcGx5IGNvbnN0cnVjdCBhIG5ldyBzdHJpbmcgZnJvbSB0aGUgdmFyaW91cyBwYXJ0cyB5b3Ugd2FudCB0byBhc3NlbWJsZQogaXQgZnJvbS4gIEhvd2V2ZXIsIGlmIHlvdSBuZWVkIGFuIG9iamVjdCB3aXRoIHRoZSBhYmlsaXR5IHRvIG1vZGlmeSBpbi1wbGFjZQotdW5pY29kZSBkYXRhLCB0cnkgdXNpbmcgYSA6Y2xhc3M6YGlvLlN0cmluZ0lPYCBvYmplY3Qgb3IgdGhlIDptb2Q6YGFycmF5YAordW5pY29kZSBkYXRhLCB0cnkgdXNpbmcgYW4gOmNsYXNzOmBpby5TdHJpbmdJT2Agb2JqZWN0IG9yIHRoZSA6bW9kOmBhcnJheWAKIG1vZHVsZTo6CiAKICAgID4+PiBpbXBvcnQgaW8KQEAgLTkwMiw4ICsxMDEwLDcgQEAKICAgbWF5IGNvbWUgdXAgd2l0aC4gIFRoaXMgaXMgZG91Ymx5IHRydWUgZm9yIHByaW1pdGl2ZXMgd3JpdHRlbiBpbiBDLCBzdWNoCiAgIGFzIGJ1aWx0aW5zIGFuZCBzb21lIGV4dGVuc2lvbiB0eXBlcy4gIEZvciBleGFtcGxlLCBiZSBzdXJlIHRvIHVzZQogICBlaXRoZXIgdGhlIDptZXRoOmBsaXN0LnNvcnRgIGJ1aWx0LWluIG1ldGhvZCBvciB0aGUgcmVsYXRlZCA6ZnVuYzpgc29ydGVkYAotICBmdW5jdGlvbiB0byBkbyBzb3J0aW5nIChhbmQgc2VlIHRoZQotICBgc29ydGluZyBtaW5pLUhPV1RPIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vSG93VG8vU29ydGluZz5gXyBmb3IgZXhhbXBsZXMKKyAgZnVuY3Rpb24gdG8gZG8gc29ydGluZyAoYW5kIHNlZSB0aGUgOnJlZjpgc29ydGluZ2hvd3RvYCBmb3IgZXhhbXBsZXMKICAgb2YgbW9kZXJhdGVseSBhZHZhbmNlZCB1c2FnZSkuCiAKICogQWJzdHJhY3Rpb25zIHRlbmQgdG8gY3JlYXRlIGluZGlyZWN0aW9ucyBhbmQgZm9yY2UgdGhlIGludGVycHJldGVyIHRvIHdvcmsKQEAgLTkyMyw3ICsxMDMwLDcgQEAKIAogLi4gc2VlYWxzbzo6CiAgICBUaGUgd2lraSBwYWdlIGRldm90ZWQgdG8gYHBlcmZvcm1hbmNlIHRpcHMKLSAgIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vUHl0aG9uU3BlZWQvUGVyZm9ybWFuY2VUaXBzPmBfLgorICAgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vUHl0aG9uU3BlZWQvUGVyZm9ybWFuY2VUaXBzPmBfLgogCiAuLiBfZWZmaWNpZW50X3N0cmluZ19jb25jYXRlbmF0aW9uOgogCkBAIC0xMDA4LDcgKzExMTUsNyBAQAogCiBTZWUgdGhlIFB5dGhvbiBDb29rYm9vayBmb3IgYSBsb25nIGRpc2N1c3Npb24gb2YgbWFueSB3YXlzIHRvIGRvIHRoaXM6CiAKLSAgICBodHRwOi8vYXNwbi5hY3RpdmVzdGF0ZS5jb20vQVNQTi9Db29rYm9vay9QeXRob24vUmVjaXBlLzUyNTYwCisgICBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81MjU2MC8KIAogSWYgeW91IGRvbid0IG1pbmQgcmVvcmRlcmluZyB0aGUgbGlzdCwgc29ydCBpdCBhbmQgdGhlbiBzY2FuIGZyb20gdGhlIGVuZCBvZiB0aGUKIGxpc3QsIGRlbGV0aW5nIGR1cGxpY2F0ZXMgYXMgeW91IGdvOjoKQEAgLTEwNTYsNiArMTE2Myw4IEBACiB1c3VhbGx5IGEgbG90IHNsb3dlciB0aGFuIHVzaW5nIFB5dGhvbiBsaXN0cy4KIAogCisuLiBfZmFxLW11bHRpZGltZW5zaW9uYWwtbGlzdDoKKwogSG93IGRvIEkgY3JlYXRlIGEgbXVsdGlkaW1lbnNpb25hbCBsaXN0PwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNzMwLDE5ICsxODM5LDEwIEBACiBfX2ltcG9ydF9fKCd4LnkueicpIHJldHVybnMgPG1vZHVsZSAneCc+OyBob3cgZG8gSSBnZXQgej8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Ucnk6OgorQ29uc2lkZXIgdXNpbmcgdGhlIGNvbnZlbmllbmNlIGZ1bmN0aW9uIDpmdW5jOmB+aW1wb3J0bGliLmltcG9ydF9tb2R1bGVgIGZyb20KKzptb2Q6YGltcG9ydGxpYmAgaW5zdGVhZDo6CiAKLSAgIF9faW1wb3J0X18oJ3gueS56JykueS56Ci0KLUZvciBtb3JlIHJlYWxpc3RpYyBzaXR1YXRpb25zLCB5b3UgbWF5IGhhdmUgdG8gZG8gc29tZXRoaW5nIGxpa2UgOjoKLQotICAgbSA9IF9faW1wb3J0X18ocykKLSAgIGZvciBpIGluIHMuc3BsaXQoIi4iKVsxOl06Ci0gICAgICAgbSA9IGdldGF0dHIobSwgaSkKLQotU2VlIDptb2Q6YGltcG9ydGxpYmAgZm9yIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gY2FsbGVkCi06ZnVuYzpgfmltcG9ydGxpYi5pbXBvcnRfbW9kdWxlYC4KLQorICAgeiA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd4LnkueicpCiAKIAogV2hlbiBJIGVkaXQgYW4gaW1wb3J0ZWQgbW9kdWxlIGFuZCByZWltcG9ydCBpdCwgdGhlIGNoYW5nZXMgZG9uJ3Qgc2hvdyB1cC4gIFdoeSBkb2VzIHRoaXMgaGFwcGVuPwpAQCAtMTc1MSwxMiArMTg1MSwxMiBAQAogRm9yIHJlYXNvbnMgb2YgZWZmaWNpZW5jeSBhcyB3ZWxsIGFzIGNvbnNpc3RlbmN5LCBQeXRob24gb25seSByZWFkcyB0aGUgbW9kdWxlCiBmaWxlIG9uIHRoZSBmaXJzdCB0aW1lIGEgbW9kdWxlIGlzIGltcG9ydGVkLiAgSWYgaXQgZGlkbid0LCBpbiBhIHByb2dyYW0KIGNvbnNpc3Rpbmcgb2YgbWFueSBtb2R1bGVzIHdoZXJlIGVhY2ggb25lIGltcG9ydHMgdGhlIHNhbWUgYmFzaWMgbW9kdWxlLCB0aGUKLWJhc2ljIG1vZHVsZSB3b3VsZCBiZSBwYXJzZWQgYW5kIHJlLXBhcnNlZCBtYW55IHRpbWVzLiAgVG8gZm9yY2UgcmVyZWFkaW5nIG9mIGEKK2Jhc2ljIG1vZHVsZSB3b3VsZCBiZSBwYXJzZWQgYW5kIHJlLXBhcnNlZCBtYW55IHRpbWVzLiAgVG8gZm9yY2UgcmUtcmVhZGluZyBvZiBhCiBjaGFuZ2VkIG1vZHVsZSwgZG8gdGhpczo6CiAKLSAgIGltcG9ydCBpbXAKKyAgIGltcG9ydCBpbXBvcnRsaWIKICAgIGltcG9ydCBtb2RuYW1lCi0gICBpbXAucmVsb2FkKG1vZG5hbWUpCisgICBpbXBvcnRsaWIucmVsb2FkKG1vZG5hbWUpCiAKIFdhcm5pbmc6IHRoaXMgdGVjaG5pcXVlIGlzIG5vdCAxMDAlIGZvb2wtcHJvb2YuICBJbiBwYXJ0aWN1bGFyLCBtb2R1bGVzCiBjb250YWluaW5nIHN0YXRlbWVudHMgbGlrZSA6OgpAQCAtMTc2OCwxMCArMTg2OCwxMCBAQAogdXBkYXRlZCB0byB1c2UgdGhlIG5ldyBjbGFzcyBkZWZpbml0aW9uLiAgVGhpcyBjYW4gcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcKIHBhcmFkb3hpY2FsIGJlaGF2aW91cjoKIAotICAgPj4+IGltcG9ydCBpbXAKKyAgID4+PiBpbXBvcnQgaW1wb3J0bGliCiAgICA+Pj4gaW1wb3J0IGNscwogICAgPj4+IGMgPSBjbHMuQygpICAgICAgICAgICAgICAgICMgQ3JlYXRlIGFuIGluc3RhbmNlIG9mIEMKLSAgID4+PiBpbXAucmVsb2FkKGNscykKKyAgID4+PiBpbXBvcnRsaWIucmVsb2FkKGNscykKICAgIDxtb2R1bGUgJ2NscycgZnJvbSAnY2xzLnB5Jz4KICAgID4+PiBpc2luc3RhbmNlKGMsIGNscy5DKSAgICAgICAjIGlzaW5zdGFuY2UgaXMgZmFsc2U/IT8KICAgIEZhbHNlCmRpZmYgLS1naXQgYS9Eb2MvZmFxL3dpbmRvd3MucnN0IGIvRG9jL2ZhcS93aW5kb3dzLnJzdAppbmRleCA1OWY5NDgwLi42ZGI2NjM3IDEwMDY0NAotLS0gYS9Eb2MvZmFxL3dpbmRvd3MucnN0CisrKyBiL0RvYy9mYXEvd2luZG93cy5yc3QKQEAgLTMxLDcgKzMxLDcgQEAKIAogLi4gfFB5dGhvbiBEZXZlbG9wbWVudCBvbiBYUHwgaW1hZ2U6OiBweXRob24tdmlkZW8taWNvbi5wbmcKIC4uIF9gUHl0aG9uIERldmVsb3BtZW50IG9uIFhQYDoKLSAgIGh0dHA6Ly93d3cuc2hvd21lZG8uY29tL3ZpZGVvcy9zZXJpZXM/bmFtZT1weXRob25PenN2YWxkUHlOZXdiaWVTZXJpZXMKKyAgIGh0dHA6Ly9zaG93bWVkby5jb20vdmlkZW90dXRvcmlhbHMvc2VyaWVzP25hbWU9cHl0aG9uT3pzdmFsZFB5TmV3YmllU2VyaWVzCiAKIFVubGVzcyB5b3UgdXNlIHNvbWUgc29ydCBvZiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50LCB5b3Ugd2lsbCBlbmQgdXAKICp0eXBpbmcqIFdpbmRvd3MgY29tbWFuZHMgaW50byB3aGF0IGlzIHZhcmlvdXNseSByZWZlcnJlZCB0byBhcyBhICJET1Mgd2luZG93IgpAQCAtNzgsMTcgKzc4LDE3IEBACiAgICAgPj4+IHByaW50KCJIZWxsbyIpCiAgICAgSGVsbG8KICAgICA+Pj4gIkhlbGxvIiAqIDMKLSAgICBIZWxsb0hlbGxvSGVsbG8KKyAgICAnSGVsbG9IZWxsb0hlbGxvJwogCiBNYW55IHBlb3BsZSB1c2UgdGhlIGludGVyYWN0aXZlIG1vZGUgYXMgYSBjb252ZW5pZW50IHlldCBoaWdobHkgcHJvZ3JhbW1hYmxlCi1jYWxjdWxhdG9yLiAgV2hlbiB5b3Ugd2FudCB0byBlbmQgeW91ciBpbnRlcmFjdGl2ZSBQeXRob24gc2Vzc2lvbiwgaG9sZCB0aGUgQ3RybAota2V5IGRvd24gd2hpbGUgeW91IGVudGVyIGEgWiwgdGhlbiBoaXQgdGhlICJFbnRlciIga2V5IHRvIGdldCBiYWNrIHRvIHlvdXIKK2NhbGN1bGF0b3IuICBXaGVuIHlvdSB3YW50IHRvIGVuZCB5b3VyIGludGVyYWN0aXZlIFB5dGhvbiBzZXNzaW9uLCBob2xkIHRoZSA6a2JkOmBDdHJsYAora2V5IGRvd24gd2hpbGUgeW91IGVudGVyIGEgOmtiZDpgWmAsIHRoZW4gaGl0IHRoZSAiOmtiZDpgRW50ZXJgIiBrZXkgdG8gZ2V0IGJhY2sgdG8geW91cgogV2luZG93cyBjb21tYW5kIHByb21wdC4KIAogWW91IG1heSBhbHNvIGZpbmQgdGhhdCB5b3UgaGF2ZSBhIFN0YXJ0LW1lbnUgZW50cnkgc3VjaCBhcyA6bWVudXNlbGVjdGlvbjpgU3RhcnQKIC0tPiBQcm9ncmFtcyAtLT4gUHl0aG9uIDMuMyAtLT4gUHl0aG9uIChjb21tYW5kIGxpbmUpYCB0aGF0IHJlc3VsdHMgaW4geW91CiBzZWVpbmcgdGhlIGBgPj4+YGAgcHJvbXB0IGluIGEgbmV3IHdpbmRvdy4gIElmIHNvLCB0aGUgd2luZG93IHdpbGwgZGlzYXBwZWFyCi1hZnRlciB5b3UgZW50ZXIgdGhlIEN0cmwtWiBjaGFyYWN0ZXI7IFdpbmRvd3MgaXMgcnVubmluZyBhIHNpbmdsZSAicHl0aG9uIgorYWZ0ZXIgeW91IGVudGVyIHRoZSA6a2JkOmBDdHJsLVpgIGNoYXJhY3RlcjsgV2luZG93cyBpcyBydW5uaW5nIGEgc2luZ2xlICJweXRob24iCiBjb21tYW5kIGluIHRoZSB3aW5kb3csIGFuZCBjbG9zZXMgaXQgd2hlbiB5b3UgdGVybWluYXRlIHRoZSBpbnRlcnByZXRlci4KIAogSWYgdGhlIGBgcHl0aG9uYGAgY29tbWFuZCwgaW5zdGVhZCBvZiBkaXNwbGF5aW5nIHRoZSBpbnRlcnByZXRlciBwcm9tcHQgYGA+Pj5gYCwKQEAgLTEwNSw3ICsxMDUsNyBAQAogCiAuLiB8QWRkaW5nIFB5dGhvbiB0byBET1MgUGF0aHwgaW1hZ2U6OiBweXRob24tdmlkZW8taWNvbi5wbmcKIC4uIF9gQWRkaW5nIFB5dGhvbiB0byBET1MgUGF0aGA6Ci0gICBodHRwOi8vc2hvd21lZG8uY29tL3ZpZGVvcy92aWRlbz9uYW1lPTk2MDAwMCZmcm9tU2VyaWVzSUQ9OTYKKyAgIGh0dHA6Ly9zaG93bWVkby5jb20vdmlkZW90dXRvcmlhbHMvdmlkZW8/bmFtZT05NjAwMDAmZnJvbVNlcmllc0lEPTk2CiAKIAogb3I6OgpAQCAtMTMxLDggKzEzMSw4IEBACiAKICAgIGM6XFB5dGhvbjMzXHB5dGhvbgogCi1zdGFydHMgdXAgdGhlIGludGVycHJldGVyIGFzIGFib3ZlIChhbmQgZG9uJ3QgZm9yZ2V0IHlvdSdsbCBuZWVkIGEgIkNUUkwtWiIgYW5kCi1hbiAiRW50ZXIiIHRvIGdldCBvdXQgb2YgaXQpLiBPbmNlIHlvdSBoYXZlIHZlcmlmaWVkIHRoZSBkaXJlY3RvcnksIHlvdSBjYW4KK3N0YXJ0cyB1cCB0aGUgaW50ZXJwcmV0ZXIgYXMgYWJvdmUgKGFuZCBkb24ndCBmb3JnZXQgeW91J2xsIG5lZWQgYSAiOmtiZDpgQ3RybC1aYCIgYW5kCithbiAiOmtiZDpgRW50ZXJgIiB0byBnZXQgb3V0IG9mIGl0KS4gT25jZSB5b3UgaGF2ZSB2ZXJpZmllZCB0aGUgZGlyZWN0b3J5LCB5b3UgY2FuCiBhZGQgaXQgdG8gdGhlIHN5c3RlbSBwYXRoIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHN0YXJ0IFB5dGhvbiBieSBqdXN0IHJ1bm5pbmcKIHRoZSBgYHB5dGhvbmBgIGNvbW1hbmQuIFRoaXMgaXMgY3VycmVudGx5IGFuIG9wdGlvbiBpbiB0aGUgaW5zdGFsbGVyIGFzIG9mCiBDUHl0aG9uIDMuMy4KQEAgLTMyNyw3ICszMjcsNyBAQAogICAgICAgIHJldHVybiAoMCAhPSBrZXJuZWwzMi5UZXJtaW5hdGVQcm9jZXNzKGhhbmRsZSwgMCkpCiAKIEluIDIuNyBhbmQgMy4yLCA6ZnVuYzpgb3Mua2lsbGAgaXMgaW1wbGVtZW50ZWQgc2ltaWxhciB0byB0aGUgYWJvdmUgZnVuY3Rpb24sCi13aXRoIHRoZSBhZGRpdGlvbmFsIGZlYXR1cmUgb2YgYmVpbmcgYWJsZSB0byBzZW5kIENUUkwrQyBhbmQgQ1RSTCtCUkVBSword2l0aCB0aGUgYWRkaXRpb25hbCBmZWF0dXJlIG9mIGJlaW5nIGFibGUgdG8gc2VuZCA6a2JkOmBDdHJsK0NgIGFuZCA6a2JkOmBDdHJsK0JyZWFrYAogdG8gY29uc29sZSBzdWJwcm9jZXNzZXMgd2hpY2ggYXJlIGRlc2lnbmVkIHRvIGhhbmRsZSB0aG9zZSBzaWduYWxzLiBTZWUKIDpmdW5jOmBvcy5raWxsYCBmb3IgZnVydGhlciBkZXRhaWxzLgogCmRpZmYgLS1naXQgYS9Eb2MvZ2xvc3NhcnkucnN0IGIvRG9jL2dsb3NzYXJ5LnJzdAppbmRleCBiNDhlYjFlLi4zNjgzMmEzIDEwMDY0NAotLS0gYS9Eb2MvZ2xvc3NhcnkucnN0CisrKyBiL0RvYy9nbG9zc2FyeS5yc3QKQEAgLTc2LDcgKzc2LDcgQEAKIAogICAgQkRGTAogICAgICAgQmVuZXZvbGVudCBEaWN0YXRvciBGb3IgTGlmZSwgYS5rLmEuIGBHdWlkbyB2YW4gUm9zc3VtCi0gICAgICA8aHR0cDovL3d3dy5weXRob24ub3JnL35ndWlkby8+YF8sIFB5dGhvbidzIGNyZWF0b3IuCisgICAgICA8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9+Z3VpZG8vPmBfLCBQeXRob24ncyBjcmVhdG9yLgogCiAgICBiaW5hcnkgZmlsZQogICAgICAgQSA6dGVybTpgZmlsZSBvYmplY3RgIGFibGUgdG8gcmVhZCBhbmQgd3JpdGUKQEAgLTE0MSw3ICsxNDEsNyBAQAogCiAgICBDUHl0aG9uCiAgICAgICBUaGUgY2Fub25pY2FsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UsIGFzCi0gICAgICBkaXN0cmlidXRlZCBvbiBgcHl0aG9uLm9yZyA8aHR0cDovL3B5dGhvbi5vcmc+YF8uICBUaGUgdGVybSAiQ1B5dGhvbiIKKyAgICAgIGRpc3RyaWJ1dGVkIG9uIGBweXRob24ub3JnIDxodHRwczovL3d3dy5weXRob24ub3JnPmBfLiAgVGhlIHRlcm0gIkNQeXRob24iCiAgICAgICBpcyB1c2VkIHdoZW4gbmVjZXNzYXJ5IHRvIGRpc3Rpbmd1aXNoIHRoaXMgaW1wbGVtZW50YXRpb24gZnJvbSBvdGhlcnMKICAgICAgIHN1Y2ggYXMgSnl0aG9uIG9yIElyb25QeXRob24uCiAKQEAgLTE4Myw2ICsxODMsMTQgQEAKICAgICAgIGtleXMgY2FuIGJlIGFueSBvYmplY3Qgd2l0aCA6bWV0aDpgX19oYXNoX19gIGFuZCA6bWV0aDpgX19lcV9fYCBtZXRob2RzLgogICAgICAgQ2FsbGVkIGEgaGFzaCBpbiBQZXJsLgogCisgICBkaWN0aW9uYXJ5IHZpZXcKKyAgICAgIFRoZSBvYmplY3RzIHJldHVybmVkIGZyb20gOm1ldGg6YGRpY3Qua2V5c2AsIDptZXRoOmBkaWN0LnZhbHVlc2AsIGFuZAorICAgICAgOm1ldGg6YGRpY3QuaXRlbXNgIGFyZSBjYWxsZWQgZGljdGlvbmFyeSB2aWV3cy4gVGhleSBwcm92aWRlIGEgZHluYW1pYworICAgICAgdmlldyBvbiB0aGUgZGljdGlvbmFyeeKAmXMgZW50cmllcywgd2hpY2ggbWVhbnMgdGhhdCB3aGVuIHRoZSBkaWN0aW9uYXJ5CisgICAgICBjaGFuZ2VzLCB0aGUgdmlldyByZWZsZWN0cyB0aGVzZSBjaGFuZ2VzLiBUbyBmb3JjZSB0aGUKKyAgICAgIGRpY3Rpb25hcnkgdmlldyB0byBiZWNvbWUgYSBmdWxsIGxpc3QgdXNlIGBgbGlzdChkaWN0dmlldylgYC4gIFNlZQorICAgICAgOnJlZjpgZGljdC12aWV3c2AuCisKICAgIGRvY3N0cmluZwogICAgICAgQSBzdHJpbmcgbGl0ZXJhbCB3aGljaCBhcHBlYXJzIGFzIHRoZSBmaXJzdCBleHByZXNzaW9uIGluIGEgY2xhc3MsCiAgICAgICBmdW5jdGlvbiBvciBtb2R1bGUuICBXaGlsZSBpZ25vcmVkIHdoZW4gdGhlIHN1aXRlIGlzIGV4ZWN1dGVkLCBpdCBpcwpAQCAtMjkyLDcgKzMwMCw3IEBACiAgICBnZW5lcmF0b3IKICAgICAgIEEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBpdGVyYXRvci4gIEl0IGxvb2tzIGxpa2UgYSBub3JtYWwgZnVuY3Rpb24KICAgICAgIGV4Y2VwdCB0aGF0IGl0IGNvbnRhaW5zIDprZXl3b3JkOmB5aWVsZGAgc3RhdGVtZW50cyBmb3IgcHJvZHVjaW5nIGEgc2VyaWVzCi0gICAgICBhIHZhbHVlcyB1c2FibGUgaW4gYSBmb3ItbG9vcCBvciB0aGF0IGNhbiBiZSByZXRyaWV2ZWQgb25lIGF0IGEgdGltZSB3aXRoCisgICAgICBvZiB2YWx1ZXMgdXNhYmxlIGluIGEgZm9yLWxvb3Agb3IgdGhhdCBjYW4gYmUgcmV0cmlldmVkIG9uZSBhdCBhIHRpbWUgd2l0aAogICAgICAgdGhlIDpmdW5jOmBuZXh0YCBmdW5jdGlvbi4gRWFjaCA6a2V5d29yZDpgeWllbGRgIHRlbXBvcmFyaWx5IHN1c3BlbmRzCiAgICAgICBwcm9jZXNzaW5nLCByZW1lbWJlcmluZyB0aGUgbG9jYXRpb24gZXhlY3V0aW9uIHN0YXRlIChpbmNsdWRpbmcgbG9jYWwKICAgICAgIHZhcmlhYmxlcyBhbmQgcGVuZGluZyB0cnktc3RhdGVtZW50cykuICBXaGVuIHRoZSBnZW5lcmF0b3IgcmVzdW1lcywgaXQKQEAgLTMxMCw2ICszMTgsMTUgQEAKICAgICAgICAgID4+PiBzdW0oaSppIGZvciBpIGluIHJhbmdlKDEwKSkgICAgICAgICAjIHN1bSBvZiBzcXVhcmVzIDAsIDEsIDQsIC4uLiA4MQogICAgICAgICAgMjg1CiAKKyAgIGdlbmVyaWMgZnVuY3Rpb24KKyAgICAgIEEgZnVuY3Rpb24gY29tcG9zZWQgb2YgbXVsdGlwbGUgZnVuY3Rpb25zIGltcGxlbWVudGluZyB0aGUgc2FtZSBvcGVyYXRpb24KKyAgICAgIGZvciBkaWZmZXJlbnQgdHlwZXMuIFdoaWNoIGltcGxlbWVudGF0aW9uIHNob3VsZCBiZSB1c2VkIGR1cmluZyBhIGNhbGwgaXMKKyAgICAgIGRldGVybWluZWQgYnkgdGhlIGRpc3BhdGNoIGFsZ29yaXRobS4KKworICAgICAgU2VlIGFsc28gdGhlIDp0ZXJtOmBzaW5nbGUgZGlzcGF0Y2hgIGdsb3NzYXJ5IGVudHJ5LCB0aGUKKyAgICAgIDpmdW5jOmBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2hgIGRlY29yYXRvciwgYW5kIDpwZXA6YDQ0M2AuCisKKwogICAgR0lMCiAgICAgICBTZWUgOnRlcm06YGdsb2JhbCBpbnRlcnByZXRlciBsb2NrYC4KIApAQCAtMzQ2LDggKzM2Myw4IEBACiAgICAgICBBbGwgb2YgUHl0aG9uJ3MgaW1tdXRhYmxlIGJ1aWx0LWluIG9iamVjdHMgYXJlIGhhc2hhYmxlLCB3aGlsZSBubyBtdXRhYmxlCiAgICAgICBjb250YWluZXJzIChzdWNoIGFzIGxpc3RzIG9yIGRpY3Rpb25hcmllcykgYXJlLiAgT2JqZWN0cyB3aGljaCBhcmUKICAgICAgIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQgY2xhc3NlcyBhcmUgaGFzaGFibGUgYnkgZGVmYXVsdDsgdGhleSBhbGwKLSAgICAgIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGggdGhlbXNlbHZlcyksIGFuZCB0aGVpciBoYXNoIHZhbHVlIGlzIHRoZWlyCi0gICAgICA6ZnVuYzpgaWRgLgorICAgICAgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aCB0aGVtc2VsdmVzKSwgYW5kIHRoZWlyIGhhc2ggdmFsdWUgaXMgZGVyaXZlZAorICAgICAgZnJvbSB0aGVpciA6ZnVuYzpgaWRgLgogCiAgICBJRExFCiAgICAgICBBbiBJbnRlZ3JhdGVkIERldmVsb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24uICBJRExFIGlzIGEgYmFzaWMgZWRpdG9yCkBAIC01MjEsNyArNTM4LDcgQEAKICAgIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyCiAgICAgICBNZXRob2QgUmVzb2x1dGlvbiBPcmRlciBpcyB0aGUgb3JkZXIgaW4gd2hpY2ggYmFzZSBjbGFzc2VzIGFyZSBzZWFyY2hlZAogICAgICAgZm9yIGEgbWVtYmVyIGR1cmluZyBsb29rdXAuIFNlZSBgVGhlIFB5dGhvbiAyLjMgTWV0aG9kIFJlc29sdXRpb24gT3JkZXIKLSAgICAgIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8+YF8uCisgICAgICA8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLz5gXy4KIAogICAgbW9kdWxlCiAgICAgICBBbiBvYmplY3QgdGhhdCBzZXJ2ZXMgYXMgYW4gb3JnYW5pemF0aW9uYWwgdW5pdCBvZiBQeXRob24gY29kZS4gIE1vZHVsZXMKQEAgLTUzMCw2ICs1NDcsMTAgQEAKIAogICAgICAgU2VlIGFsc28gOnRlcm06YHBhY2thZ2VgLgogCisgICBtb2R1bGUgc3BlYworICAgICAgQSBuYW1lc3BhY2UgY29udGFpbmluZyB0aGUgaW1wb3J0LXJlbGF0ZWQgaW5mb3JtYXRpb24gdXNlZCB0byBsb2FkIGEKKyAgICAgIG1vZHVsZS4KKwogICAgTVJPCiAgICAgICBTZWUgOnRlcm06YG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyYC4KIApAQCAtNjcxLDIwICs2OTIsMjcgQEAKICAgIHBvc2l0aW9uYWwgYXJndW1lbnQKICAgICAgIFNlZSA6dGVybTpgYXJndW1lbnRgLgogCi0gICBwcm92aXNpb25hbCBwYWNrYWdlCi0gICAgICBBIHByb3Zpc2lvbmFsIHBhY2thZ2UgaXMgb25lIHdoaWNoIGhhcyBiZWVuIGRlbGliZXJhdGVseSBleGNsdWRlZCBmcm9tCisgICBwcm92aXNpb25hbCBBUEkKKyAgICAgIEEgcHJvdmlzaW9uYWwgQVBJIGlzIG9uZSB3aGljaCBoYXMgYmVlbiBkZWxpYmVyYXRlbHkgZXhjbHVkZWQgZnJvbQogICAgICAgdGhlIHN0YW5kYXJkIGxpYnJhcnkncyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSBndWFyYW50ZWVzLiAgV2hpbGUgbWFqb3IKLSAgICAgIGNoYW5nZXMgdG8gc3VjaCBwYWNrYWdlcyBhcmUgbm90IGV4cGVjdGVkLCBhcyBsb25nIGFzIHRoZXkgYXJlIG1hcmtlZAorICAgICAgY2hhbmdlcyB0byBzdWNoIGludGVyZmFjZXMgYXJlIG5vdCBleHBlY3RlZCwgYXMgbG9uZyBhcyB0aGV5IGFyZSBtYXJrZWQKICAgICAgIHByb3Zpc2lvbmFsLCBiYWNrd2FyZHMgaW5jb21wYXRpYmxlIGNoYW5nZXMgKHVwIHRvIGFuZCBpbmNsdWRpbmcgcmVtb3ZhbAotICAgICAgb2YgdGhlIHBhY2thZ2UpIG1heSBvY2N1ciBpZiBkZWVtZWQgbmVjZXNzYXJ5IGJ5IGNvcmUgZGV2ZWxvcGVycy4gIFN1Y2gKKyAgICAgIG9mIHRoZSBpbnRlcmZhY2UpIG1heSBvY2N1ciBpZiBkZWVtZWQgbmVjZXNzYXJ5IGJ5IGNvcmUgZGV2ZWxvcGVycy4gIFN1Y2gKICAgICAgIGNoYW5nZXMgd2lsbCBub3QgYmUgbWFkZSBncmF0dWl0b3VzbHkgLS0gdGhleSB3aWxsIG9jY3VyIG9ubHkgaWYgc2VyaW91cwotICAgICAgZmxhd3MgYXJlIHVuY292ZXJlZCB0aGF0IHdlcmUgbWlzc2VkIHByaW9yIHRvIHRoZSBpbmNsdXNpb24gb2YgdGhlCi0gICAgICBwYWNrYWdlLgorICAgICAgZnVuZGFtZW50YWwgZmxhd3MgYXJlIHVuY292ZXJlZCB0aGF0IHdlcmUgbWlzc2VkIHByaW9yIHRvIHRoZSBpbmNsdXNpb24KKyAgICAgIG9mIHRoZSBBUEkuCisKKyAgICAgIEV2ZW4gZm9yIHByb3Zpc2lvbmFsIEFQSXMsIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgY2hhbmdlcyBhcmUgc2VlbiBhcworICAgICAgYSAic29sdXRpb24gb2YgbGFzdCByZXNvcnQiIC0gZXZlcnkgYXR0ZW1wdCB3aWxsIHN0aWxsIGJlIG1hZGUgdG8gZmluZAorICAgICAgYSBiYWNrd2FyZHMgY29tcGF0aWJsZSByZXNvbHV0aW9uIHRvIGFueSBpZGVudGlmaWVkIHByb2JsZW1zLgogCiAgICAgICBUaGlzIHByb2Nlc3MgYWxsb3dzIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHRvIGNvbnRpbnVlIHRvIGV2b2x2ZSBvdmVyCiAgICAgICB0aW1lLCB3aXRob3V0IGxvY2tpbmcgaW4gcHJvYmxlbWF0aWMgZGVzaWduIGVycm9ycyBmb3IgZXh0ZW5kZWQgcGVyaW9kcwogICAgICAgb2YgdGltZS4gIFNlZSA6cGVwOmA0MTFgIGZvciBtb3JlIGRldGFpbHMuCiAKKyAgIHByb3Zpc2lvbmFsIHBhY2thZ2UKKyAgICAgIFNlZSA6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4KKwogICAgUHl0aG9uIDMwMDAKICAgICAgIE5pY2tuYW1lIGZvciB0aGUgUHl0aG9uIDMueCByZWxlYXNlIGxpbmUgKGNvaW5lZCBsb25nIGFnbyB3aGVuIHRoZQogICAgICAgcmVsZWFzZSBvZiB2ZXJzaW9uIDMgd2FzIHNvbWV0aGluZyBpbiB0aGUgZGlzdGFudCBmdXR1cmUuKSAgVGhpcyBpcyBhbHNvCkBAIC03NzEsNiArNzk5LDEwIEBACiAgICAgICBpbnRlcmZhY2UgY2FuIGJlIHJlZ2lzdGVyZWQgZXhwbGljaXRseSB1c2luZwogICAgICAgOmZ1bmM6YH5hYmMucmVnaXN0ZXJgLgogCisgICBzaW5nbGUgZGlzcGF0Y2gKKyAgICAgIEEgZm9ybSBvZiA6dGVybTpgZ2VuZXJpYyBmdW5jdGlvbmAgZGlzcGF0Y2ggd2hlcmUgdGhlIGltcGxlbWVudGF0aW9uIGlzCisgICAgICBjaG9zZW4gYmFzZWQgb24gdGhlIHR5cGUgb2YgYSBzaW5nbGUgYXJndW1lbnQuCisKICAgIHNsaWNlCiAgICAgICBBbiBvYmplY3QgdXN1YWxseSBjb250YWluaW5nIGEgcG9ydGlvbiBvZiBhIDp0ZXJtOmBzZXF1ZW5jZWAuICBBIHNsaWNlIGlzCiAgICAgICBjcmVhdGVkIHVzaW5nIHRoZSBzdWJzY3JpcHQgbm90YXRpb24sIGBgW11gYCB3aXRoIGNvbG9ucyBiZXR3ZWVuIG51bWJlcnMKQEAgLTc5NiwxMCArODI4LDEzIEBACiAgICAgICA6bWV0aDpgfmNvbGxlY3Rpb25zLnNvbWVuYW1lZHR1cGxlLl9hc2RpY3RgLiBFeGFtcGxlcyBvZiBzdHJ1Y3Qgc2VxdWVuY2VzCiAgICAgICBpbmNsdWRlIDpkYXRhOmBzeXMuZmxvYXRfaW5mb2AgYW5kIHRoZSByZXR1cm4gdmFsdWUgb2YgOmZ1bmM6YG9zLnN0YXRgLgogCisgICB0ZXh0IGVuY29kaW5nCisgICAgICBBIGNvZGVjIHdoaWNoIGVuY29kZXMgVW5pY29kZSBzdHJpbmdzIHRvIGJ5dGVzLgorCiAgICB0ZXh0IGZpbGUKICAgICAgIEEgOnRlcm06YGZpbGUgb2JqZWN0YCBhYmxlIHRvIHJlYWQgYW5kIHdyaXRlIDpjbGFzczpgc3RyYCBvYmplY3RzLgogICAgICAgT2Z0ZW4sIGEgdGV4dCBmaWxlIGFjdHVhbGx5IGFjY2Vzc2VzIGEgYnl0ZS1vcmllbnRlZCBkYXRhc3RyZWFtCi0gICAgICBhbmQgaGFuZGxlcyB0aGUgdGV4dCBlbmNvZGluZyBhdXRvbWF0aWNhbGx5LgorICAgICAgYW5kIGhhbmRsZXMgdGhlIDp0ZXJtOmB0ZXh0IGVuY29kaW5nYCBhdXRvbWF0aWNhbGx5LgogCiAgICAgICAuLiBzZWVhbHNvOjoKICAgICAgICAgIEEgOnRlcm06YGJpbmFyeSBmaWxlYCByZWFkcyBhbmQgd3JpdGUgOmNsYXNzOmBieXRlc2Agb2JqZWN0cy4KQEAgLTgyNCwxNCArODU5LDE1IEBACiAgICAgICByZWNvZ25pemVkIGFzIGVuZGluZyBhIGxpbmU6IHRoZSBVbml4IGVuZC1vZi1saW5lIGNvbnZlbnRpb24gYGAnXG4nYGAsCiAgICAgICB0aGUgV2luZG93cyBjb252ZW50aW9uIGBgJ1xyXG4nYGAsIGFuZCB0aGUgb2xkIE1hY2ludG9zaCBjb252ZW50aW9uCiAgICAgICBgYCdccidgYC4gIFNlZSA6cGVwOmAyNzhgIGFuZCA6cGVwOmAzMTE2YCwgYXMgd2VsbCBhcwotICAgICAgOmZ1bmM6YHN0ci5zcGxpdGxpbmVzYCBmb3IgYW4gYWRkaXRpb25hbCB1c2UuCisgICAgICA6ZnVuYzpgYnl0ZXMuc3BsaXRsaW5lc2AgZm9yIGFuIGFkZGl0aW9uYWwgdXNlLgogCi0gICB2aWV3Ci0gICAgICBUaGUgb2JqZWN0cyByZXR1cm5lZCBmcm9tIDptZXRoOmBkaWN0LmtleXNgLCA6bWV0aDpgZGljdC52YWx1ZXNgLCBhbmQKLSAgICAgIDptZXRoOmBkaWN0Lml0ZW1zYCBhcmUgY2FsbGVkIGRpY3Rpb25hcnkgdmlld3MuICBUaGV5IGFyZSBsYXp5IHNlcXVlbmNlcwotICAgICAgdGhhdCB3aWxsIHNlZSBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIGRpY3Rpb25hcnkuICBUbyBmb3JjZSB0aGUKLSAgICAgIGRpY3Rpb25hcnkgdmlldyB0byBiZWNvbWUgYSBmdWxsIGxpc3QgdXNlIGBgbGlzdChkaWN0dmlldylgYC4gIFNlZQotICAgICAgOnJlZjpgZGljdC12aWV3c2AuCisgICB2aXJ0dWFsIGVudmlyb25tZW50CisgICAgICBBIGNvb3BlcmF0aXZlbHkgaXNvbGF0ZWQgcnVudGltZSBlbnZpcm9ubWVudCB0aGF0IGFsbG93cyBQeXRob24gdXNlcnMKKyAgICAgIGFuZCBhcHBsaWNhdGlvbnMgdG8gaW5zdGFsbCBhbmQgdXBncmFkZSBQeXRob24gZGlzdHJpYnV0aW9uIHBhY2thZ2VzCisgICAgICB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggdGhlIGJlaGF2aW91ciBvZiBvdGhlciBQeXRob24gYXBwbGljYXRpb25zCisgICAgICBydW5uaW5nIG9uIHRoZSBzYW1lIHN5c3RlbS4KKworICAgICAgU2VlIGFsc28gOnJlZjpgc2NyaXB0cy1weXZlbnZgLgogCiAgICB2aXJ0dWFsIG1hY2hpbmUKICAgICAgIEEgY29tcHV0ZXIgZGVmaW5lZCBlbnRpcmVseSBpbiBzb2Z0d2FyZS4gIFB5dGhvbidzIHZpcnR1YWwgbWFjaGluZQpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2NsaW5pYy5yc3QgYi9Eb2MvaG93dG8vY2xpbmljLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzYyNjMxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2hvd3RvL2NsaW5pYy5yc3QKQEAgLTAsMCArMSwxNjg2IEBACisqKioqKioqKioqKioqKioqKioqKioqCitBcmd1bWVudCBDbGluaWMgSG93LVRvCisqKioqKioqKioqKioqKioqKioqKioqCisKKzphdXRob3I6IExhcnJ5IEhhc3RpbmdzCisKKworLi4gdG9waWM6OiBBYnN0cmFjdAorCisgIEFyZ3VtZW50IENsaW5pYyBpcyBhIHByZXByb2Nlc3NvciBmb3IgQ1B5dGhvbiBDIGZpbGVzLgorICBJdHMgcHVycG9zZSBpcyB0byBhdXRvbWF0ZSBhbGwgdGhlIGJvaWxlcnBsYXRlIGludm9sdmVkCisgIHdpdGggd3JpdGluZyBhcmd1bWVudCBwYXJzaW5nIGNvZGUgZm9yICJidWlsdGlucyIuCisgIFRoaXMgZG9jdW1lbnQgc2hvd3MgeW91IGhvdyB0byBjb252ZXJ0IHlvdXIgZmlyc3QgQworICBmdW5jdGlvbiB0byB3b3JrIHdpdGggQXJndW1lbnQgQ2xpbmljLCBhbmQgdGhlbiBpbnRyb2R1Y2VzCisgIHNvbWUgYWR2YW5jZWQgdG9waWNzIG9uIEFyZ3VtZW50IENsaW5pYyB1c2FnZS4KKworICBDdXJyZW50bHkgQXJndW1lbnQgQ2xpbmljIGlzIGNvbnNpZGVyZWQgaW50ZXJuYWwtb25seQorICBmb3IgQ1B5dGhvbi4gIEl0cyB1c2UgaXMgbm90IHN1cHBvcnRlZCBmb3IgZmlsZXMgb3V0c2lkZQorICBDUHl0aG9uLCBhbmQgbm8gZ3VhcmFudGVlcyBhcmUgbWFkZSByZWdhcmRpbmcgYmFja3dhcmRzCisgIGNvbXBhdGliaWxpdHkgZm9yIGZ1dHVyZSB2ZXJzaW9ucy4gIEluIG90aGVyIHdvcmRzOiBpZiB5b3UKKyAgbWFpbnRhaW4gYW4gZXh0ZXJuYWwgQyBleHRlbnNpb24gZm9yIENQeXRob24sIHlvdSdyZSB3ZWxjb21lCisgIHRvIGV4cGVyaW1lbnQgd2l0aCBBcmd1bWVudCBDbGluaWMgaW4geW91ciBvd24gY29kZS4gIEJ1dCB0aGUKKyAgdmVyc2lvbiBvZiBBcmd1bWVudCBDbGluaWMgdGhhdCBzaGlwcyB3aXRoIENQeXRob24gMy41ICpjb3VsZCoKKyAgYmUgdG90YWxseSBpbmNvbXBhdGlibGUgYW5kIGJyZWFrIGFsbCB5b3VyIGNvZGUuCisKK1RoZSBHb2FscyBPZiBBcmd1bWVudCBDbGluaWMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXJndW1lbnQgQ2xpbmljJ3MgcHJpbWFyeSBnb2FsCitpcyB0byB0YWtlIG92ZXIgcmVzcG9uc2liaWxpdHkgZm9yIGFsbCBhcmd1bWVudCBwYXJzaW5nIGNvZGUKK2luc2lkZSBDUHl0aG9uLiAgVGhpcyBtZWFucyB0aGF0LCB3aGVuIHlvdSBjb252ZXJ0IGEgZnVuY3Rpb24KK3RvIHdvcmsgd2l0aCBBcmd1bWVudCBDbGluaWMsIHRoYXQgZnVuY3Rpb24gc2hvdWxkIG5vIGxvbmdlcgorZG8gYW55IG9mIGl0cyBvd24gYXJndW1lbnQgcGFyc2luZy0tdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5CitBcmd1bWVudCBDbGluaWMgc2hvdWxkIGJlIGEgImJsYWNrIGJveCIgdG8geW91LCB3aGVyZSBDUHl0aG9uCitjYWxscyBpbiBhdCB0aGUgdG9wLCBhbmQgeW91ciBjb2RlIGdldHMgY2FsbGVkIGF0IHRoZSBib3R0b20sCit3aXRoIGBgUHlPYmplY3QgKmFyZ3NgYCAoYW5kIG1heWJlIGBgUHlPYmplY3QgKmt3YXJnc2BgKQorbWFnaWNhbGx5IGNvbnZlcnRlZCBpbnRvIHRoZSBDIHZhcmlhYmxlcyBhbmQgdHlwZXMgeW91IG5lZWQuCisKK0luIG9yZGVyIGZvciBBcmd1bWVudCBDbGluaWMgdG8gYWNjb21wbGlzaCBpdHMgcHJpbWFyeSBnb2FsLAoraXQgbXVzdCBiZSBlYXN5IHRvIHVzZS4gIEN1cnJlbnRseSwgd29ya2luZyB3aXRoIENQeXRob24ncworYXJndW1lbnQgcGFyc2luZyBsaWJyYXJ5IGlzIGEgY2hvcmUsIHJlcXVpcmluZyBtYWludGFpbmluZworcmVkdW5kYW50IGluZm9ybWF0aW9uIGluIGEgc3VycHJpc2luZyBudW1iZXIgb2YgcGxhY2VzLgorV2hlbiB5b3UgdXNlIEFyZ3VtZW50IENsaW5pYywgeW91IGRvbid0IGhhdmUgdG8gcmVwZWF0IHlvdXJzZWxmLgorCitPYnZpb3VzbHksIG5vIG9uZSB3b3VsZCB3YW50IHRvIHVzZSBBcmd1bWVudCBDbGluaWMgdW5sZXNzCitpdCdzIHNvbHZpbmcgdGhlaXIgcHJvYmxlbS0tYW5kIHdpdGhvdXQgY3JlYXRpbmcgbmV3IHByb2JsZW1zIG9mCitpdHMgb3duLgorU28gaXQncyBwYXJhbW91bnQgdGhhdCBBcmd1bWVudCBDbGluaWMgZ2VuZXJhdGUgY29ycmVjdCBjb2RlLgorSXQnZCBiZSBuaWNlIGlmIHRoZSBjb2RlIHdhcyBmYXN0ZXIsIHRvbywgYnV0IGF0IHRoZSB2ZXJ5IGxlYXN0CitpdCBzaG91bGQgbm90IGludHJvZHVjZSBhIG1ham9yIHNwZWVkIHJlZ3Jlc3Npb24uICAoRXZlbnR1YWxseSBBcmd1bWVudAorQ2xpbmljICpzaG91bGQqIG1ha2UgYSBtYWpvciBzcGVlZHVwIHBvc3NpYmxlLS13ZSBjb3VsZAorcmV3cml0ZSBpdHMgY29kZSBnZW5lcmF0b3IgdG8gcHJvZHVjZSB0YWlsb3ItbWFkZSBhcmd1bWVudAorcGFyc2luZyBjb2RlLCByYXRoZXIgdGhhbiBjYWxsaW5nIHRoZSBnZW5lcmFsLXB1cnBvc2UgQ1B5dGhvbgorYXJndW1lbnQgcGFyc2luZyBsaWJyYXJ5LiAgVGhhdCB3b3VsZCBtYWtlIGZvciB0aGUgZmFzdGVzdAorYXJndW1lbnQgcGFyc2luZyBwb3NzaWJsZSEpCisKK0FkZGl0aW9uYWxseSwgQXJndW1lbnQgQ2xpbmljIG11c3QgYmUgZmxleGlibGUgZW5vdWdoIHRvCit3b3JrIHdpdGggYW55IGFwcHJvYWNoIHRvIGFyZ3VtZW50IHBhcnNpbmcuICBQeXRob24gaGFzCitzb21lIGZ1bmN0aW9ucyB3aXRoIHNvbWUgdmVyeSBzdHJhbmdlIHBhcnNpbmcgYmVoYXZpb3JzOworQXJndW1lbnQgQ2xpbmljJ3MgZ29hbCBpcyB0byBzdXBwb3J0IGFsbCBvZiB0aGVtLgorCitGaW5hbGx5LCB0aGUgb3JpZ2luYWwgbW90aXZhdGlvbiBmb3IgQXJndW1lbnQgQ2xpbmljIHdhcwordG8gcHJvdmlkZSBpbnRyb3NwZWN0aW9uICJzaWduYXR1cmVzIiBmb3IgQ1B5dGhvbiBidWlsdGlucy4KK0l0IHVzZWQgdG8gYmUsIHRoZSBpbnRyb3NwZWN0aW9uIHF1ZXJ5IGZ1bmN0aW9ucyB3b3VsZCB0aHJvdworYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzZWQgaW4gYSBidWlsdGluLiAgV2l0aCBBcmd1bWVudAorQ2xpbmljLCB0aGF0J3MgYSB0aGluZyBvZiB0aGUgcGFzdCEKKworT25lIGlkZWEgeW91IHNob3VsZCBrZWVwIGluIG1pbmQsIGFzIHlvdSB3b3JrIHdpdGgKK0FyZ3VtZW50IENsaW5pYzogdGhlIG1vcmUgaW5mb3JtYXRpb24geW91IGdpdmUgaXQsIHRoZQorYmV0dGVyIGpvYiBpdCdsbCBiZSBhYmxlIHRvIGRvLgorQXJndW1lbnQgQ2xpbmljIGlzIGFkbWl0dGVkbHkgcmVsYXRpdmVseSBzaW1wbGUgcmlnaHQKK25vdy4gIEJ1dCBhcyBpdCBldm9sdmVzIGl0IHdpbGwgZ2V0IG1vcmUgc29waGlzdGljYXRlZCwKK2FuZCBpdCBzaG91bGQgYmUgYWJsZSB0byBkbyBtYW55IGludGVyZXN0aW5nIGFuZCBzbWFydAordGhpbmdzIHdpdGggYWxsIHRoZSBpbmZvcm1hdGlvbiB5b3UgZ2l2ZSBpdC4KKworCitCYXNpYyBDb25jZXB0cyBBbmQgVXNhZ2UKKz09PT09PT09PT09PT09PT09PT09PT09PQorCitBcmd1bWVudCBDbGluaWMgc2hpcHMgd2l0aCBDUHl0aG9uOyB5b3UnbGwgZmluZCBpdCBpbiBgYFRvb2xzL2NsaW5pYy9jbGluaWMucHlgYC4KK0lmIHlvdSBydW4gdGhhdCBzY3JpcHQsIHNwZWNpZnlpbmcgYSBDIGZpbGUgYXMgYW4gYXJndW1lbnQ6OgorCisgICAgJSBweXRob24zIFRvb2xzL2NsaW5pYy9jbGluaWMucHkgZm9vLmMKKworQXJndW1lbnQgQ2xpbmljIHdpbGwgc2NhbiBvdmVyIHRoZSBmaWxlIGxvb2tpbmcgZm9yIGxpbmVzIHRoYXQKK2xvb2sgZXhhY3RseSBsaWtlIHRoaXM6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorCitXaGVuIGl0IGZpbmRzIG9uZSwgaXQgcmVhZHMgZXZlcnl0aGluZyB1cCB0byBhIGxpbmUgdGhhdCBsb29rcworZXhhY3RseSBsaWtlIHRoaXM6OgorCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitFdmVyeXRoaW5nIGluIGJldHdlZW4gdGhlc2UgdHdvIGxpbmVzIGlzIGlucHV0IGZvciBBcmd1bWVudCBDbGluaWMuCitBbGwgb2YgdGhlc2UgbGluZXMsIGluY2x1ZGluZyB0aGUgYmVnaW5uaW5nIGFuZCBlbmRpbmcgY29tbWVudAorbGluZXMsIGFyZSBjb2xsZWN0aXZlbHkgY2FsbGVkIGFuIEFyZ3VtZW50IENsaW5pYyAiYmxvY2siLgorCitXaGVuIEFyZ3VtZW50IENsaW5pYyBwYXJzZXMgb25lIG9mIHRoZXNlIGJsb2NrcywgaXQKK2dlbmVyYXRlcyBvdXRwdXQuICBUaGlzIG91dHB1dCBpcyByZXdyaXR0ZW4gaW50byB0aGUgQyBmaWxlCitpbW1lZGlhdGVseSBhZnRlciB0aGUgYmxvY2ssIGZvbGxvd2VkIGJ5IGEgY29tbWVudCBjb250YWluaW5nIGEgY2hlY2tzdW0uCitUaGUgQXJndW1lbnQgQ2xpbmljIGJsb2NrIG5vdyBsb29rcyBsaWtlIHRoaXM6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIC4uLiBjbGluaWMgaW5wdXQgZ29lcyBoZXJlIC4uLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICAuLi4gY2xpbmljIG91dHB1dCBnb2VzIGhlcmUgLi4uCisgICAgLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogY2hlY2tzdW09Li4uXSovCisKK0lmIHlvdSBydW4gQXJndW1lbnQgQ2xpbmljIG9uIHRoZSBzYW1lIGZpbGUgYSBzZWNvbmQgdGltZSwgQXJndW1lbnQgQ2xpbmljCit3aWxsIGRpc2NhcmQgdGhlIG9sZCBvdXRwdXQgYW5kIHdyaXRlIG91dCB0aGUgbmV3IG91dHB1dCB3aXRoIGEgZnJlc2ggY2hlY2tzdW0KK2xpbmUuICBIb3dldmVyLCBpZiB0aGUgaW5wdXQgaGFzbid0IGNoYW5nZWQsIHRoZSBvdXRwdXQgd29uJ3QgY2hhbmdlIGVpdGhlci4KKworWW91IHNob3VsZCBuZXZlciBtb2RpZnkgdGhlIG91dHB1dCBwb3J0aW9uIG9mIGFuIEFyZ3VtZW50IENsaW5pYyBibG9jay4gIEluc3RlYWQsCitjaGFuZ2UgdGhlIGlucHV0IHVudGlsIGl0IHByb2R1Y2VzIHRoZSBvdXRwdXQgeW91IHdhbnQuICAoVGhhdCdzIHRoZSBwdXJwb3NlIG9mIHRoZQorY2hlY2tzdW0tLXRvIGRldGVjdCBpZiBzb21lb25lIGNoYW5nZWQgdGhlIG91dHB1dCwgYXMgdGhlc2UgZWRpdHMgd291bGQgYmUgbG9zdAordGhlIG5leHQgdGltZSBBcmd1bWVudCBDbGluaWMgd3JpdGVzIG91dCBmcmVzaCBvdXRwdXQuKQorCitGb3IgdGhlIHNha2Ugb2YgY2xhcml0eSwgaGVyZSdzIHRoZSB0ZXJtaW5vbG9neSB3ZSdsbCB1c2Ugd2l0aCBBcmd1bWVudCBDbGluaWM6CisKKyogVGhlIGZpcnN0IGxpbmUgb2YgdGhlIGNvbW1lbnQgKGBgLypbY2xpbmljIGlucHV0XWBgKSBpcyB0aGUgKnN0YXJ0IGxpbmUqLgorKiBUaGUgbGFzdCBsaW5lIG9mIHRoZSBpbml0aWFsIGNvbW1lbnQgKGBgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qL2BgKSBpcyB0aGUgKmVuZCBsaW5lKi4KKyogVGhlIGxhc3QgbGluZSAoYGAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT0uLi5dKi9gYCkgaXMgdGhlICpjaGVja3N1bSBsaW5lKi4KKyogSW4gYmV0d2VlbiB0aGUgc3RhcnQgbGluZSBhbmQgdGhlIGVuZCBsaW5lIGlzIHRoZSAqaW5wdXQqLgorKiBJbiBiZXR3ZWVuIHRoZSBlbmQgbGluZSBhbmQgdGhlIGNoZWNrc3VtIGxpbmUgaXMgdGhlICpvdXRwdXQqLgorKiBBbGwgdGhlIHRleHQgY29sbGVjdGl2ZWx5LCBmcm9tIHRoZSBzdGFydCBsaW5lIHRvIHRoZSBjaGVja3N1bSBsaW5lIGluY2x1c2l2ZWx5LAorICBpcyB0aGUgKmJsb2NrKi4gIChBIGJsb2NrIHRoYXQgaGFzbid0IGJlZW4gc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCBieSBBcmd1bWVudAorICBDbGluaWMgeWV0IGRvZXNuJ3QgaGF2ZSBvdXRwdXQgb3IgYSBjaGVja3N1bSBsaW5lLCBidXQgaXQncyBzdGlsbCBjb25zaWRlcmVkCisgIGEgYmxvY2suKQorCisKK0NvbnZlcnRpbmcgWW91ciBGaXJzdCBGdW5jdGlvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBiZXN0IHdheSB0byBnZXQgYSBzZW5zZSBvZiBob3cgQXJndW1lbnQgQ2xpbmljIHdvcmtzIGlzIHRvCitjb252ZXJ0IGEgZnVuY3Rpb24gdG8gd29yayB3aXRoIGl0LiAgSGVyZSwgdGhlbiwgYXJlIHRoZSBiYXJlCittaW5pbXVtIHN0ZXBzIHlvdSdkIG5lZWQgdG8gZm9sbG93IHRvIGNvbnZlcnQgYSBmdW5jdGlvbiB0bword29yayB3aXRoIEFyZ3VtZW50IENsaW5pYy4gIE5vdGUgdGhhdCBmb3IgY29kZSB5b3UgcGxhbiB0bworY2hlY2sgaW4gdG8gQ1B5dGhvbiwgeW91IHJlYWxseSBzaG91bGQgdGFrZSB0aGUgY29udmVyc2lvbiBmYXJ0aGVyLAordXNpbmcgc29tZSBvZiB0aGUgYWR2YW5jZWQgY29uY2VwdHMgeW91J2xsIHNlZSBsYXRlciBvbiBpbgordGhlIGRvY3VtZW50IChsaWtlICJyZXR1cm4gY29udmVydGVycyIgYW5kICJzZWxmIGNvbnZlcnRlcnMiKS4KK0J1dCB3ZSdsbCBrZWVwIGl0IHNpbXBsZSBmb3IgdGhpcyB3YWxrdGhyb3VnaCBzbyB5b3UgY2FuIGxlYXJuLgorCitMZXQncyBkaXZlIGluIQorCiswLiBNYWtlIHN1cmUgeW91J3JlIHdvcmtpbmcgd2l0aCBhIGZyZXNobHkgdXBkYXRlZCBjaGVja291dAorICAgb2YgdGhlIENQeXRob24gdHJ1bmsuCisKKzEuIEZpbmQgYSBQeXRob24gYnVpbHRpbiB0aGF0IGNhbGxzIGVpdGhlciA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYAorICAgb3IgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCwgYW5kIGhhc24ndCBiZWVuIGNvbnZlcnRlZAorICAgdG8gd29yayB3aXRoIEFyZ3VtZW50IENsaW5pYyB5ZXQuCisgICBGb3IgbXkgZXhhbXBsZSBJJ20gdXNpbmcgYGBfcGlja2xlLlBpY2tsZXIuZHVtcCgpYGAuCisKKzIuIElmIHRoZSBjYWxsIHRvIHRoZSBgYFB5QXJnX1BhcnNlYGAgZnVuY3Rpb24gdXNlcyBhbnkgb2YgdGhlCisgICBmb2xsb3dpbmcgZm9ybWF0IHVuaXRzOjoKKworICAgICAgIE8mCisgICAgICAgTyEKKyAgICAgICBlcworICAgICAgIGVzIworICAgICAgIGV0CisgICAgICAgZXQjCisKKyAgIG9yIGlmIGl0IGhhcyBtdWx0aXBsZSBjYWxscyB0byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCwKKyAgIHlvdSBzaG91bGQgY2hvb3NlIGEgZGlmZmVyZW50IGZ1bmN0aW9uLiAgQXJndW1lbnQgQ2xpbmljICpkb2VzKgorICAgc3VwcG9ydCBhbGwgb2YgdGhlc2Ugc2NlbmFyaW9zLiAgQnV0IHRoZXNlIGFyZSBhZHZhbmNlZAorICAgdG9waWNzLS1sZXQncyBkbyBzb21ldGhpbmcgc2ltcGxlciBmb3IgeW91ciBmaXJzdCBmdW5jdGlvbi4KKworICAgQWxzbywgaWYgdGhlIGZ1bmN0aW9uIGhhcyBtdWx0aXBsZSBjYWxscyB0byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYAorICAgb3IgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCB3aGVyZSBpdCBzdXBwb3J0cyBkaWZmZXJlbnQKKyAgIHR5cGVzIGZvciB0aGUgc2FtZSBhcmd1bWVudCwgb3IgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgc29tZXRoaW5nIGJlc2lkZXMKKyAgIFB5QXJnX1BhcnNlIGZ1bmN0aW9ucyB0byBwYXJzZSBpdHMgYXJndW1lbnRzLCBpdCBwcm9iYWJseQorICAgaXNuJ3Qgc3VpdGFibGUgZm9yIGNvbnZlcnNpb24gdG8gQXJndW1lbnQgQ2xpbmljLiAgQXJndW1lbnQgQ2xpbmljCisgICBkb2Vzbid0IHN1cHBvcnQgZ2VuZXJpYyBmdW5jdGlvbnMgb3IgcG9seW1vcnBoaWMgcGFyYW1ldGVycy4KKworMy4gQWRkIHRoZSBmb2xsb3dpbmcgYm9pbGVycGxhdGUgYWJvdmUgdGhlIGZ1bmN0aW9uLCBjcmVhdGluZyBvdXIgYmxvY2s6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworNC4gQ3V0IHRoZSBkb2NzdHJpbmcgYW5kIHBhc3RlIGl0IGluIGJldHdlZW4gdGhlIGBgW2NsaW5pY11gYCBsaW5lcywKKyAgIHJlbW92aW5nIGFsbCB0aGUganVuayB0aGF0IG1ha2VzIGl0IGEgcHJvcGVybHkgcXVvdGVkIEMgc3RyaW5nLgorICAgV2hlbiB5b3UncmUgZG9uZSB5b3Ugc2hvdWxkIGhhdmUganVzdCB0aGUgdGV4dCwgYmFzZWQgYXQgdGhlIGxlZnQKKyAgIG1hcmdpbiwgd2l0aCBubyBsaW5lIHdpZGVyIHRoYW4gODAgY2hhcmFjdGVycy4KKyAgIChBcmd1bWVudCBDbGluaWMgd2lsbCBwcmVzZXJ2ZSBpbmRlbnRzIGluc2lkZSB0aGUgZG9jc3RyaW5nLikKKworICAgSWYgdGhlIG9sZCBkb2NzdHJpbmcgaGFkIGEgZmlyc3QgbGluZSB0aGF0IGxvb2tlZCBsaWtlIGEgZnVuY3Rpb24KKyAgIHNpZ25hdHVyZSwgdGhyb3cgdGhhdCBsaW5lIGF3YXkuICAoVGhlIGRvY3N0cmluZyBkb2Vzbid0IG5lZWQgaXQKKyAgIGFueW1vcmUtLXdoZW4geW91IHVzZSBgYGhlbHAoKWBgIG9uIHlvdXIgYnVpbHRpbiBpbiB0aGUgZnV0dXJlLAorICAgdGhlIGZpcnN0IGxpbmUgd2lsbCBiZSBidWlsdCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIHRoZSBmdW5jdGlvbidzCisgICBzaWduYXR1cmUuKQorCisgICBTYW1wbGU6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKzUuIElmIHlvdXIgZG9jc3RyaW5nIGRvZXNuJ3QgaGF2ZSBhICJzdW1tYXJ5IiBsaW5lLCBBcmd1bWVudCBDbGluaWMgd2lsbAorICAgY29tcGxhaW4uICBTbyBsZXQncyBtYWtlIHN1cmUgaXQgaGFzIG9uZS4gIFRoZSAic3VtbWFyeSIgbGluZSBzaG91bGQKKyAgIGJlIGEgcGFyYWdyYXBoIGNvbnNpc3Rpbmcgb2YgYSBzaW5nbGUgODAtY29sdW1uIGxpbmUKKyAgIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRvY3N0cmluZy4KKworICAgKE91ciBleGFtcGxlIGRvY3N0cmluZyBjb25zaXN0cyBzb2xlbHkgb2YgYSBzdW1tYXJ5IGxpbmUsIHNvIHRoZSBzYW1wbGUKKyAgIGNvZGUgZG9lc24ndCBoYXZlIHRvIGNoYW5nZSBmb3IgdGhpcyBzdGVwLikKKworNi4gQWJvdmUgdGhlIGRvY3N0cmluZywgZW50ZXIgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLCBmb2xsb3dlZAorICAgYnkgYSBibGFuayBsaW5lLiAgVGhpcyBzaG91bGQgYmUgdGhlIFB5dGhvbiBuYW1lIG9mIHRoZSBmdW5jdGlvbiwKKyAgIGFuZCBzaG91bGQgYmUgdGhlIGZ1bGwgZG90dGVkIHBhdGgKKyAgIHRvIHRoZSBmdW5jdGlvbi0taXQgc2hvdWxkIHN0YXJ0IHdpdGggdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSwKKyAgIGluY2x1ZGUgYW55IHN1Yi1tb2R1bGVzLCBhbmQgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgbWV0aG9kIG9uCisgICBhIGNsYXNzIGl0IHNob3VsZCBpbmNsdWRlIHRoZSBjbGFzcyBuYW1lIHRvby4KKworICAgU2FtcGxlOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworNy4gSWYgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB0aGF0IG1vZHVsZSBvciBjbGFzcyBoYXMgYmVlbiB1c2VkIHdpdGggQXJndW1lbnQKKyAgIENsaW5pYyBpbiB0aGlzIEMgZmlsZSwKKyAgIHlvdSBtdXN0IGRlY2xhcmUgdGhlIG1vZHVsZSBhbmQvb3IgY2xhc3MuICBQcm9wZXIgQXJndW1lbnQgQ2xpbmljIGh5Z2llbmUKKyAgIHByZWZlcnMgZGVjbGFyaW5nIHRoZXNlIGluIGEgc2VwYXJhdGUgYmxvY2sgc29tZXdoZXJlIG5lYXIgdGhlCisgICB0b3Agb2YgdGhlIEMgZmlsZSwgaW4gdGhlIHNhbWUgd2F5IHRoYXQgaW5jbHVkZSBmaWxlcyBhbmQgc3RhdGljcyBnbyBhdAorICAgdGhlIHRvcC4gIChJbiBvdXIgc2FtcGxlIGNvZGUgd2UnbGwganVzdCBzaG93IHRoZSB0d28gYmxvY2tzIG5leHQgdG8KKyAgIGVhY2ggb3RoZXIuKQorCisgICBUaGUgbmFtZSBvZiB0aGUgY2xhc3MgYW5kIG1vZHVsZSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgdGhlIG9uZQorICAgc2VlbiBieSBQeXRob24uICBDaGVjayB0aGUgbmFtZSBkZWZpbmVkIGluIHRoZSA6Yzp0eXBlOmBQeU1vZHVsZURlZmAKKyAgIG9yIDpjOnR5cGU6YFB5VHlwZU9iamVjdGAgYXMgYXBwcm9wcmlhdGUuCisKKyAgIFdoZW4geW91IGRlY2xhcmUgYSBjbGFzcywgeW91IG11c3QgYWxzbyBzcGVjaWZ5IHR3byBhc3BlY3RzIG9mIGl0cyB0eXBlCisgICBpbiBDOiB0aGUgdHlwZSBkZWNsYXJhdGlvbiB5b3UnZCB1c2UgZm9yIGEgcG9pbnRlciB0byBhbiBpbnN0YW5jZSBvZgorICAgdGhpcyBjbGFzcywgYW5kIGEgcG9pbnRlciB0byB0aGUgOmM6dHlwZTpgUHlUeXBlT2JqZWN0YCBmb3IgdGhpcyBjbGFzcy4KKworICAgU2FtcGxlOjoKKworICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICBtb2R1bGUgX3BpY2tsZQorICAgICAgIGNsYXNzIF9waWNrbGUuUGlja2xlciAiUGlja2xlck9iamVjdCAqIiAiJlBpY2tsZXJfVHlwZSIKKyAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKworCisKKzguIERlY2xhcmUgZWFjaCBvZiB0aGUgcGFyYW1ldGVycyB0byB0aGUgZnVuY3Rpb24uICBFYWNoIHBhcmFtZXRlcgorICAgc2hvdWxkIGdldCBpdHMgb3duIGxpbmUuICBBbGwgdGhlIHBhcmFtZXRlciBsaW5lcyBzaG91bGQgYmUKKyAgIGluZGVudGVkIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBkb2NzdHJpbmcuCisKKyAgIFRoZSBnZW5lcmFsIGZvcm0gb2YgdGhlc2UgcGFyYW1ldGVyIGxpbmVzIGlzIGFzIGZvbGxvd3M6OgorCisgICAgICAgbmFtZV9vZl9wYXJhbWV0ZXI6IGNvbnZlcnRlcgorCisgICBJZiB0aGUgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFkZCB0aGF0IGFmdGVyIHRoZQorICAgY29udmVydGVyOjoKKworICAgICAgIG5hbWVfb2ZfcGFyYW1ldGVyOiBjb252ZXJ0ZXIgPSBkZWZhdWx0X3ZhbHVlCisKKyAgIEFyZ3VtZW50IENsaW5pYydzIHN1cHBvcnQgZm9yICJkZWZhdWx0IHZhbHVlcyIgaXMgcXVpdGUgc29waGlzdGljYXRlZDsKKyAgIHBsZWFzZSBzZWUgOnJlZjpgdGhlIHNlY3Rpb24gYmVsb3cgb24gZGVmYXVsdCB2YWx1ZXMgPGRlZmF1bHRfdmFsdWVzPmAKKyAgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICBBZGQgYSBibGFuayBsaW5lIGJlbG93IHRoZSBwYXJhbWV0ZXJzLgorCisgICBXaGF0J3MgYSAiY29udmVydGVyIj8gIEl0IGVzdGFibGlzaGVzIGJvdGggdGhlIHR5cGUKKyAgIG9mIHRoZSB2YXJpYWJsZSB1c2VkIGluIEMsIGFuZCB0aGUgbWV0aG9kIHRvIGNvbnZlcnQgdGhlIFB5dGhvbgorICAgdmFsdWUgaW50byBhIEMgdmFsdWUgYXQgcnVudGltZS4KKyAgIEZvciBub3cgeW91J3JlIGdvaW5nIHRvIHVzZSB3aGF0J3MgY2FsbGVkIGEgImxlZ2FjeSBjb252ZXJ0ZXIiLS1hCisgICBjb252ZW5pZW5jZSBzeW50YXggaW50ZW5kZWQgdG8gbWFrZSBwb3J0aW5nIG9sZCBjb2RlIGludG8gQXJndW1lbnQKKyAgIENsaW5pYyBlYXNpZXIuCisKKyAgIEZvciBlYWNoIHBhcmFtZXRlciwgY29weSB0aGUgImZvcm1hdCB1bml0IiBmb3IgdGhhdAorICAgcGFyYW1ldGVyIGZyb20gdGhlIGBgUHlBcmdfUGFyc2UoKWBgIGZvcm1hdCBhcmd1bWVudCBhbmQKKyAgIHNwZWNpZnkgKnRoYXQqIGFzIGl0cyBjb252ZXJ0ZXIsIGFzIGEgcXVvdGVkCisgICBzdHJpbmcuICAoImZvcm1hdCB1bml0IiBpcyB0aGUgZm9ybWFsIG5hbWUgZm9yIHRoZSBvbmUtdG8tdGhyZWUKKyAgIGNoYXJhY3RlciBzdWJzdHJpbmcgb2YgdGhlIGBgZm9ybWF0YGAgcGFyYW1ldGVyIHRoYXQgdGVsbHMKKyAgIHRoZSBhcmd1bWVudCBwYXJzaW5nIGZ1bmN0aW9uIHdoYXQgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlCisgICBpcyBhbmQgaG93IHRvIGNvbnZlcnQgaXQuICBGb3IgbW9yZSBvbiBmb3JtYXQgdW5pdHMgcGxlYXNlCisgICBzZWUgOnJlZjpgYXJnLXBhcnNpbmdgLikKKworICAgRm9yIG11bHRpY2hhcmFjdGVyIGZvcm1hdCB1bml0cyBsaWtlIGBgeiNgYCwgdXNlIHRoZQorICAgZW50aXJlIHR3by1vci10aHJlZSBjaGFyYWN0ZXIgc3RyaW5nLgorCisgICBTYW1wbGU6OgorCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgbW9kdWxlIF9waWNrbGUKKyAgICAgICAgY2xhc3MgX3BpY2tsZS5QaWNrbGVyICJQaWNrbGVyT2JqZWN0ICoiICImUGlja2xlcl9UeXBlIgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgICAgIG9iajogJ08nCisKKyAgICAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCis5LiBJZiB5b3VyIGZ1bmN0aW9uIGhhcyBgYHxgYCBpbiB0aGUgZm9ybWF0IHN0cmluZywgbWVhbmluZyBzb21lCisgICBwYXJhbWV0ZXJzIGhhdmUgZGVmYXVsdCB2YWx1ZXMsIHlvdSBjYW4gaWdub3JlIGl0LiAgQXJndW1lbnQKKyAgIENsaW5pYyBpbmZlcnMgd2hpY2ggcGFyYW1ldGVycyBhcmUgb3B0aW9uYWwgYmFzZWQgb24gd2hldGhlcgorICAgb3Igbm90IHRoZXkgaGF2ZSBkZWZhdWx0IHZhbHVlcy4KKworICAgSWYgeW91ciBmdW5jdGlvbiBoYXMgYGAkYGAgaW4gdGhlIGZvcm1hdCBzdHJpbmcsIG1lYW5pbmcgaXQKKyAgIHRha2VzIGtleXdvcmQtb25seSBhcmd1bWVudHMsIHNwZWNpZnkgYGAqYGAgb24gYSBsaW5lIGJ5CisgICBpdHNlbGYgYmVmb3JlIHRoZSBmaXJzdCBrZXl3b3JkLW9ubHkgYXJndW1lbnQsIGluZGVudGVkIHRoZQorICAgc2FtZSBhcyB0aGUgcGFyYW1ldGVyIGxpbmVzLgorCisgICAoYGBfcGlja2xlLlBpY2tsZXIuZHVtcGBgIGhhcyBuZWl0aGVyLCBzbyBvdXIgc2FtcGxlIGlzIHVuY2hhbmdlZC4pCisKKworMTAuIElmIHRoZSBleGlzdGluZyBDIGZ1bmN0aW9uIGNhbGxzIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgCisgICAgKGFzIG9wcG9zZWQgdG8gOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCksIHRoZW4gYWxsIGl0cworICAgIGFyZ3VtZW50cyBhcmUgcG9zaXRpb25hbC1vbmx5LgorCisgICAgVG8gbWFyayBhbGwgcGFyYW1ldGVycyBhcyBwb3NpdGlvbmFsLW9ubHkgaW4gQXJndW1lbnQgQ2xpbmljLAorICAgIGFkZCBhIGBgL2BgIG9uIGEgbGluZSBieSBpdHNlbGYgYWZ0ZXIgdGhlIGxhc3QgcGFyYW1ldGVyLAorICAgIGluZGVudGVkIHRoZSBzYW1lIGFzIHRoZSBwYXJhbWV0ZXIgbGluZXMuCisKKyAgICBDdXJyZW50bHkgdGhpcyBpcyBhbGwtb3Itbm90aGluZzsgZWl0aGVyIGFsbCBwYXJhbWV0ZXJzIGFyZQorICAgIHBvc2l0aW9uYWwtb25seSwgb3Igbm9uZSBvZiB0aGVtIGFyZS4gIChJbiB0aGUgZnV0dXJlIEFyZ3VtZW50CisgICAgQ2xpbmljIG1heSByZWxheCB0aGlzIHJlc3RyaWN0aW9uLikKKworICAgIFNhbXBsZTo6CisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBtb2R1bGUgX3BpY2tsZQorICAgICAgICBjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCisgICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIF9waWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgICAgICAgIG9iajogJ08nCisgICAgICAgICAgICAvCisKKyAgICAgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKzExLiBJdCdzIGhlbHBmdWwgdG8gd3JpdGUgYSBwZXItcGFyYW1ldGVyIGRvY3N0cmluZyBmb3IgZWFjaCBwYXJhbWV0ZXIuCisgICAgQnV0IHBlci1wYXJhbWV0ZXIgZG9jc3RyaW5ncyBhcmUgb3B0aW9uYWw7IHlvdSBjYW4gc2tpcCB0aGlzIHN0ZXAKKyAgICBpZiB5b3UgcHJlZmVyLgorCisgICAgSGVyZSdzIGhvdyB0byBhZGQgYSBwZXItcGFyYW1ldGVyIGRvY3N0cmluZy4gIFRoZSBmaXJzdCBsaW5lCisgICAgb2YgdGhlIHBlci1wYXJhbWV0ZXIgZG9jc3RyaW5nIG11c3QgYmUgaW5kZW50ZWQgZnVydGhlciB0aGFuIHRoZQorICAgIHBhcmFtZXRlciBkZWZpbml0aW9uLiAgVGhlIGxlZnQgbWFyZ2luIG9mIHRoaXMgZmlyc3QgbGluZSBlc3RhYmxpc2hlcworICAgIHRoZSBsZWZ0IG1hcmdpbiBmb3IgdGhlIHdob2xlIHBlci1wYXJhbWV0ZXIgZG9jc3RyaW5nOyBhbGwgdGhlIHRleHQKKyAgICB5b3Ugd3JpdGUgd2lsbCBiZSBvdXRkZW50ZWQgYnkgdGhpcyBhbW91bnQuICBZb3UgY2FuIHdyaXRlIGFzIG11Y2gKKyAgICB0ZXh0IGFzIHlvdSBsaWtlLCBhY3Jvc3MgbXVsdGlwbGUgbGluZXMgaWYgeW91IHdpc2guCisKKyAgICBTYW1wbGU6OgorCisgICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICAgbW9kdWxlIF9waWNrbGUKKyAgICAgICAgY2xhc3MgX3BpY2tsZS5QaWNrbGVyICJQaWNrbGVyT2JqZWN0ICoiICImUGlja2xlcl9UeXBlIgorICAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgICAgICBvYmo6ICdPJworICAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdG8gYmUgcGlja2xlZC4KKyAgICAgICAgICAgIC8KKworICAgICAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworMTIuIFNhdmUgYW5kIGNsb3NlIHRoZSBmaWxlLCB0aGVuIHJ1biBgYFRvb2xzL2NsaW5pYy9jbGluaWMucHlgYCBvbiBpdC4KKyAgICBXaXRoIGx1Y2sgZXZlcnl0aGluZyB3b3JrZWQgYW5kIHlvdXIgYmxvY2sgbm93IGhhcyBvdXRwdXQhICBSZW9wZW4KKyAgICB0aGUgZmlsZSBpbiB5b3VyIHRleHQgZWRpdG9yIHRvIHNlZTo6CisKKyAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgbW9kdWxlIF9waWNrbGUKKyAgICAgICBjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCisgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworICAgICAgIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPWRhMzlhM2VlNWU2YjRiMGQzMjU1YmZlZjk1NjAxODkwYWZkODA3MDldKi8KKworICAgICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgICAgIG9iajogJ08nCisgICAgICAgICAgICAgICBUaGUgb2JqZWN0IHRvIGJlIHBpY2tsZWQuCisgICAgICAgICAgIC8KKworICAgICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4KKyAgICAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyAgICAgICBQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyX2R1bXBfX2RvY19fLAorICAgICAgICJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuXG4iCisgICAgICAgIlxuIgorICAgICAgIC4uLgorICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCisgICAgICAgX3BpY2tsZV9QaWNrbGVyX2R1bXBfaW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQorICAgICAgIC8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IGNoZWNrc3VtPTNiZDMwNzQ1YmYyMDZhNDhmOGI1NzZhMWRhM2Q5MGY1NWEwYTQxODddKi8KKworICAgIE9idmlvdXNseSwgaWYgQXJndW1lbnQgQ2xpbmljIGRpZG4ndCBwcm9kdWNlIGFueSBvdXRwdXQsIGl0J3MgYmVjYXVzZQorICAgIGl0IGZvdW5kIGFuIGVycm9yIGluIHlvdXIgaW5wdXQuICBLZWVwIGZpeGluZyB5b3VyIGVycm9ycyBhbmQgcmV0cnlpbmcKKyAgICB1bnRpbCBBcmd1bWVudCBDbGluaWMgcHJvY2Vzc2VzIHlvdXIgZmlsZSB3aXRob3V0IGNvbXBsYWludC4KKworMTMuIERvdWJsZS1jaGVjayB0aGF0IHRoZSBhcmd1bWVudC1wYXJzaW5nIGNvZGUgQXJndW1lbnQgQ2xpbmljIGdlbmVyYXRlZAorICAgIGxvb2tzIGJhc2ljYWxseSB0aGUgc2FtZSBhcyB0aGUgZXhpc3RpbmcgY29kZS4KKworICAgIEZpcnN0LCBlbnN1cmUgYm90aCBwbGFjZXMgdXNlIHRoZSBzYW1lIGFyZ3VtZW50LXBhcnNpbmcgZnVuY3Rpb24uCisgICAgVGhlIGV4aXN0aW5nIGNvZGUgbXVzdCBjYWxsIGVpdGhlcgorICAgIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIG9yIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2A7CisgICAgZW5zdXJlIHRoYXQgdGhlIGNvZGUgZ2VuZXJhdGVkIGJ5IEFyZ3VtZW50IENsaW5pYyBjYWxscyB0aGUKKyAgICAqZXhhY3QqIHNhbWUgZnVuY3Rpb24uCisKKyAgICBTZWNvbmQsIHRoZSBmb3JtYXQgc3RyaW5nIHBhc3NlZCBpbiB0byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBvcgorICAgIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2Agc2hvdWxkIGJlICpleGFjdGx5KiB0aGUgc2FtZQorICAgIGFzIHRoZSBoYW5kLXdyaXR0ZW4gb25lIGluIHRoZSBleGlzdGluZyBmdW5jdGlvbiwgdXAgdG8gdGhlIGNvbG9uCisgICAgb3Igc2VtaS1jb2xvbi4KKworICAgIChBcmd1bWVudCBDbGluaWMgYWx3YXlzIGdlbmVyYXRlcyBpdHMgZm9ybWF0IHN0cmluZ3MKKyAgICB3aXRoIGEgYGA6YGAgZm9sbG93ZWQgYnkgdGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uLiAgSWYgdGhlCisgICAgZXhpc3RpbmcgY29kZSdzIGZvcm1hdCBzdHJpbmcgZW5kcyB3aXRoIGBgO2BgLCB0byBwcm92aWRlCisgICAgdXNhZ2UgaGVscCwgdGhpcyBjaGFuZ2UgaXMgaGFybWxlc3MtLWRvbid0IHdvcnJ5IGFib3V0IGl0LikKKworICAgIFRoaXJkLCBmb3IgcGFyYW1ldGVycyB3aG9zZSBmb3JtYXQgdW5pdHMgcmVxdWlyZSB0d28gYXJndW1lbnRzCisgICAgKGxpa2UgYSBsZW5ndGggdmFyaWFibGUsIG9yIGFuIGVuY29kaW5nIHN0cmluZywgb3IgYSBwb2ludGVyCisgICAgdG8gYSBjb252ZXJzaW9uIGZ1bmN0aW9uKSwgZW5zdXJlIHRoYXQgdGhlIHNlY29uZCBhcmd1bWVudCBpcworICAgICpleGFjdGx5KiB0aGUgc2FtZSBiZXR3ZWVuIHRoZSB0d28gaW52b2NhdGlvbnMuCisKKyAgICBGb3VydGgsIGluc2lkZSB0aGUgb3V0cHV0IHBvcnRpb24gb2YgdGhlIGJsb2NrIHlvdSdsbCBmaW5kIGEgcHJlcHJvY2Vzc29yCisgICAgbWFjcm8gZGVmaW5pbmcgdGhlIGFwcHJvcHJpYXRlIHN0YXRpYyA6Yzp0eXBlOmBQeU1ldGhvZERlZmAgc3RydWN0dXJlIGZvcgorICAgIHRoaXMgYnVpbHRpbjo6CisKKyAgICAgICAgI2RlZmluZSBfX1BJQ0tMRV9QSUNLTEVSX0RVTVBfTUVUSE9EREVGICAgIFwKKyAgICAgICAgeyJkdW1wIiwgKFB5Q0Z1bmN0aW9uKV9fcGlja2xlX1BpY2tsZXJfZHVtcCwgTUVUSF9PLCBfX3BpY2tsZV9QaWNrbGVyX2R1bXBfX2RvY19ffSwKKworICAgIFRoaXMgc3RhdGljIHN0cnVjdHVyZSBzaG91bGQgYmUgKmV4YWN0bHkqIHRoZSBzYW1lIGFzIHRoZSBleGlzdGluZyBzdGF0aWMKKyAgICA6Yzp0eXBlOmBQeU1ldGhvZERlZmAgc3RydWN0dXJlIGZvciB0aGlzIGJ1aWx0aW4uCisKKyAgICBJZiBhbnkgb2YgdGhlc2UgaXRlbXMgZGlmZmVyIGluICphbnkgd2F5KiwKKyAgICBhZGp1c3QgeW91ciBBcmd1bWVudCBDbGluaWMgZnVuY3Rpb24gc3BlY2lmaWNhdGlvbiBhbmQgcmVydW4KKyAgICBgYFRvb2xzL2NsaW5pYy9jbGluaWMucHlgYCB1bnRpbCB0aGV5ICphcmUqIHRoZSBzYW1lLgorCisKKzE0LiBOb3RpY2UgdGhhdCB0aGUgbGFzdCBsaW5lIG9mIGl0cyBvdXRwdXQgaXMgdGhlIGRlY2xhcmF0aW9uCisgICAgb2YgeW91ciAiaW1wbCIgZnVuY3Rpb24uICBUaGlzIGlzIHdoZXJlIHRoZSBidWlsdGluJ3MgaW1wbGVtZW50YXRpb24gZ29lcy4KKyAgICBEZWxldGUgdGhlIGV4aXN0aW5nIHByb3RvdHlwZSBvZiB0aGUgZnVuY3Rpb24geW91J3JlIG1vZGlmeWluZywgYnV0IGxlYXZlCisgICAgdGhlIG9wZW5pbmcgY3VybHkgYnJhY2UuICBOb3cgZGVsZXRlIGl0cyBhcmd1bWVudCBwYXJzaW5nIGNvZGUgYW5kIHRoZQorICAgIGRlY2xhcmF0aW9ucyBvZiBhbGwgdGhlIHZhcmlhYmxlcyBpdCBkdW1wcyB0aGUgYXJndW1lbnRzIGludG8uCisgICAgTm90aWNlIGhvdyB0aGUgUHl0aG9uIGFyZ3VtZW50cyBhcmUgbm93IGFyZ3VtZW50cyB0byB0aGlzIGltcGwgZnVuY3Rpb247CisgICAgaWYgdGhlIGltcGxlbWVudGF0aW9uIHVzZWQgZGlmZmVyZW50IG5hbWVzIGZvciB0aGVzZSB2YXJpYWJsZXMsIGZpeCBpdC4KKworICAgIExldCdzIHJlaXRlcmF0ZSwganVzdCBiZWNhdXNlIGl0J3Mga2luZCBvZiB3ZWlyZC4gIFlvdXIgY29kZSBzaG91bGQgbm93CisgICAgbG9vayBsaWtlIHRoaXM6OgorCisgICAgICAgIHN0YXRpYyByZXR1cm5fdHlwZQorICAgICAgICB5b3VyX2Z1bmN0aW9uX2ltcGwoLi4uKQorICAgICAgICAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT0uLi5dKi8KKyAgICAgICAgeworICAgICAgICAuLi4KKworICAgIEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZWQgdGhlIGNoZWNrc3VtIGxpbmUgYW5kIHRoZSBmdW5jdGlvbiBwcm90b3R5cGUganVzdAorICAgIGFib3ZlIGl0LiAgWW91IHNob3VsZCB3cml0ZSB0aGUgb3BlbmluZyAoYW5kIGNsb3NpbmcpIGN1cmx5IGJyYWNlcyBmb3IgdGhlCisgICAgZnVuY3Rpb24sIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gaW5zaWRlLgorCisgICAgU2FtcGxlOjoKKworICAgICAgICAvKltjbGluaWMgaW5wdXRdCisgICAgICAgIG1vZHVsZSBfcGlja2xlCisgICAgICAgIGNsYXNzIF9waWNrbGUuUGlja2xlciAiUGlja2xlck9iamVjdCAqIiAiJlBpY2tsZXJfVHlwZSIKKyAgICAgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworICAgICAgICAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT1kYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKKyAgICAgICAgLypbY2xpbmljIGlucHV0XQorICAgICAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICAgICAgICBvYmo6ICdPJworICAgICAgICAgICAgICAgIFRoZSBvYmplY3QgdG8gYmUgcGlja2xlZC4KKyAgICAgICAgICAgIC8KKworICAgICAgICBXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuCisgICAgICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworICAgICAgICBQeURvY19TVFJWQVIoX19waWNrbGVfUGlja2xlcl9kdW1wX19kb2NfXywKKyAgICAgICAgIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS5cbiIKKyAgICAgICAgIlxuIgorICAgICAgICAuLi4KKyAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKKyAgICAgICAgX3BpY2tsZV9QaWNrbGVyX2R1bXBfaW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQorICAgICAgICAvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT0zYmQzMDc0NWJmMjA2YTQ4ZjhiNTc2YTFkYTNkOTBmNTVhMGE0MTg3XSovCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIENoZWNrIHdoZXRoZXIgdGhlIFBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseSAoaXNzdWUzNjY0KS4KKyAgICAgICAgICAgICAgIERldmVsb3BlcnMgb2Z0ZW4gZm9yZ2V0IHRvIGNhbGwgX19pbml0X18oKSBpbiB0aGVpciBzdWJjbGFzc2VzLCB3aGljaAorICAgICAgICAgICAgICAgd291bGQgdHJpZ2dlciBhIHNlZ2ZhdWx0IHdpdGhvdXQgdGhpcyBjaGVjay4gKi8KKyAgICAgICAgICAgIGlmIChzZWxmLT53cml0ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQaWNrbGVyLl9faW5pdF9fKCkgd2FzIG5vdCBjYWxsZWQgYnkgJXMuX19pbml0X18oKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfQ2xlYXJCdWZmZXIoc2VsZikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgICAgICAuLi4KKworMTUuIFJlbWVtYmVyIHRoZSBtYWNybyB3aXRoIHRoZSA6Yzp0eXBlOmBQeU1ldGhvZERlZmAgc3RydWN0dXJlIGZvciB0aGlzCisgICAgZnVuY3Rpb24/ICBGaW5kIHRoZSBleGlzdGluZyA6Yzp0eXBlOmBQeU1ldGhvZERlZmAgc3RydWN0dXJlIGZvciB0aGlzCisgICAgZnVuY3Rpb24gYW5kIHJlcGxhY2UgaXQgd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgbWFjcm8uICAoSWYgdGhlIGJ1aWx0aW4KKyAgICBpcyBhdCBtb2R1bGUgc2NvcGUsIHRoaXMgd2lsbCBwcm9iYWJseSBiZSB2ZXJ5IG5lYXIgdGhlIGVuZCBvZiB0aGUgZmlsZTsKKyAgICBpZiB0aGUgYnVpbHRpbiBpcyBhIGNsYXNzIG1ldGhvZCwgdGhpcyB3aWxsIHByb2JhYmx5IGJlIGJlbG93IGJ1dCByZWxhdGl2ZWx5CisgICAgbmVhciB0byB0aGUgaW1wbGVtZW50YXRpb24uKQorCisgICAgTm90ZSB0aGF0IHRoZSBib2R5IG9mIHRoZSBtYWNybyBjb250YWlucyBhIHRyYWlsaW5nIGNvbW1hLiAgU28gd2hlbiB5b3UKKyAgICByZXBsYWNlIHRoZSBleGlzdGluZyBzdGF0aWMgOmM6dHlwZTpgUHlNZXRob2REZWZgIHN0cnVjdHVyZSB3aXRoIHRoZSBtYWNybywKKyAgICAqZG9uJ3QqIGFkZCBhIGNvbW1hIHRvIHRoZSBlbmQuCisKKyAgICBTYW1wbGU6OgorCisgICAgICAgIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgUGlja2xlcl9tZXRob2RzW10gPSB7CisgICAgICAgICAgICBfX1BJQ0tMRV9QSUNLTEVSX0RVTVBfTUVUSE9EREVGCisgICAgICAgICAgICBfX1BJQ0tMRV9QSUNLTEVSX0NMRUFSX01FTU9fTUVUSE9EREVGCisgICAgICAgICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KKyAgICAgICAgfTsKKworCisxNi4gQ29tcGlsZSwgdGhlbiBydW4gdGhlIHJlbGV2YW50IHBvcnRpb25zIG9mIHRoZSByZWdyZXNzaW9uLXRlc3Qgc3VpdGUuCisgICAgVGhpcyBjaGFuZ2Ugc2hvdWxkIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBjb21waWxlLXRpbWUgd2FybmluZ3Mgb3IgZXJyb3JzLAorICAgIGFuZCB0aGVyZSBzaG91bGQgYmUgbm8gZXh0ZXJuYWxseS12aXNpYmxlIGNoYW5nZSB0byBQeXRob24ncyBiZWhhdmlvci4KKworICAgIFdlbGwsIGV4Y2VwdCBmb3Igb25lIGRpZmZlcmVuY2U6IGBgaW5zcGVjdC5zaWduYXR1cmUoKWBgIHJ1biBvbiB5b3VyIGZ1bmN0aW9uCisgICAgc2hvdWxkIG5vdyBwcm92aWRlIGEgdmFsaWQgc2lnbmF0dXJlIQorCisgICAgQ29uZ3JhdHVsYXRpb25zLCB5b3UndmUgcG9ydGVkIHlvdXIgZmlyc3QgZnVuY3Rpb24gdG8gd29yayB3aXRoIEFyZ3VtZW50IENsaW5pYyEKKworQWR2YW5jZWQgVG9waWNzCis9PT09PT09PT09PT09PT0KKworTm93IHRoYXQgeW91J3ZlIGhhZCBzb21lIGV4cGVyaWVuY2Ugd29ya2luZyB3aXRoIEFyZ3VtZW50IENsaW5pYywgaXQncyB0aW1lCitmb3Igc29tZSBhZHZhbmNlZCB0b3BpY3MuCisKKworU3ltYm9saWMgZGVmYXVsdCB2YWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHZhbHVlIHlvdSBwcm92aWRlIGZvciBhIHBhcmFtZXRlciBjYW4ndCBiZSBhbnkgYXJiaXRyYXJ5CitleHByZXNzaW9uLiAgQ3VycmVudGx5IHRoZSBmb2xsb3dpbmcgYXJlIGV4cGxpY2l0bHkgc3VwcG9ydGVkOgorCisqIE51bWVyaWMgY29uc3RhbnRzIChpbnRlZ2VyIGFuZCBmbG9hdCkKKyogU3RyaW5nIGNvbnN0YW50cworKiBgYFRydWVgYCwgYGBGYWxzZWBgLCBhbmQgYGBOb25lYGAKKyogU2ltcGxlIHN5bWJvbGljIGNvbnN0YW50cyBsaWtlIGBgc3lzLm1heHNpemVgYCwgd2hpY2ggbXVzdAorICBzdGFydCB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUKKworSW4gY2FzZSB5b3UncmUgY3VyaW91cywgdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiAgYGBmcm9tX2J1aWx0aW4oKWBgCitpbiBgYExpYi9pbnNwZWN0LnB5YGAuCisKKyhJbiB0aGUgZnV0dXJlLCB0aGlzIG1heSBuZWVkIHRvIGdldCBldmVuIG1vcmUgZWxhYm9yYXRlLAordG8gYWxsb3cgZnVsbCBleHByZXNzaW9ucyBsaWtlIGBgQ09OU1RBTlQgLSAxYGAuKQorCisKK1JlbmFtaW5nIHRoZSBDIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGdlbmVyYXRlZCBieSBBcmd1bWVudCBDbGluaWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXJndW1lbnQgQ2xpbmljIGF1dG9tYXRpY2FsbHkgbmFtZXMgdGhlIGZ1bmN0aW9ucyBpdCBnZW5lcmF0ZXMgZm9yIHlvdS4KK09jY2FzaW9uYWxseSB0aGlzIG1heSBjYXVzZSBhIHByb2JsZW0sIGlmIHRoZSBnZW5lcmF0ZWQgbmFtZSBjb2xsaWRlcyB3aXRoCit0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBDIGZ1bmN0aW9uLiAgVGhlcmUncyBhbiBlYXN5IHNvbHV0aW9uOiBvdmVycmlkZSB0aGUgbmFtZXMKK3VzZWQgZm9yIHRoZSBDIGZ1bmN0aW9ucy4gIEp1c3QgYWRkIHRoZSBrZXl3b3JkIGBgImFzImBgCit0byB5b3VyIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGxpbmUsIGZvbGxvd2VkIGJ5IHRoZSBmdW5jdGlvbiBuYW1lIHlvdSB3aXNoIHRvIHVzZS4KK0FyZ3VtZW50IENsaW5pYyB3aWxsIHVzZSB0aGF0IGZ1bmN0aW9uIG5hbWUgZm9yIHRoZSBiYXNlIChnZW5lcmF0ZWQpIGZ1bmN0aW9uLAordGhlbiBhZGQgYGAiX2ltcGwiYGAgdG8gdGhlIGVuZCBhbmQgdXNlIHRoYXQgZm9yIHRoZSBuYW1lIG9mIHRoZSBpbXBsIGZ1bmN0aW9uLgorCitGb3IgZXhhbXBsZSwgaWYgd2Ugd2FudGVkIHRvIHJlbmFtZSB0aGUgQyBmdW5jdGlvbiBuYW1lcyBnZW5lcmF0ZWQgZm9yCitgYHBpY2tsZS5QaWNrbGVyLmR1bXBgYCwgaXQnZCBsb29rIGxpa2UgdGhpczo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgcGlja2xlLlBpY2tsZXIuZHVtcCBhcyBwaWNrbGVyX2R1bXBlcgorCisgICAgLi4uCisKK1RoZSBiYXNlIGZ1bmN0aW9uIHdvdWxkIG5vdyBiZSBuYW1lZCBgYHBpY2tsZXJfZHVtcGVyKClgYCwKK2FuZCB0aGUgaW1wbCBmdW5jdGlvbiB3b3VsZCBub3cgYmUgbmFtZWQgYGBwaWNrbGVyX2R1bXBlcl9pbXBsKClgYC4KKworCitTaW1pbGFybHksIHlvdSBtYXkgaGF2ZSBhIHByb2JsZW0gd2hlcmUgeW91IHdhbnQgdG8gZ2l2ZSBhIHBhcmFtZXRlcgorYSBzcGVjaWZpYyBQeXRob24gbmFtZSwgYnV0IHRoYXQgbmFtZSBtYXkgYmUgaW5jb252ZW5pZW50IGluIEMuICBBcmd1bWVudAorQ2xpbmljIGFsbG93cyB5b3UgdG8gZ2l2ZSBhIHBhcmFtZXRlciBkaWZmZXJlbnQgbmFtZXMgaW4gUHl0aG9uIGFuZCBpbiBDLAordXNpbmcgdGhlIHNhbWUgYGAiYXMiYGAgc3ludGF4OjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBwaWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgICAgb2JqOiBvYmplY3QKKyAgICAgICAgZmlsZSBhcyBmaWxlX29iajogb2JqZWN0CisgICAgICAgIHByb3RvY29sOiBvYmplY3QgPSBOVUxMCisgICAgICAgICoKKyAgICAgICAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisKK0hlcmUsIHRoZSBuYW1lIHVzZWQgaW4gUHl0aG9uIChpbiB0aGUgc2lnbmF0dXJlIGFuZCB0aGUgYGBrZXl3b3Jkc2BgCithcnJheSkgd291bGQgYmUgYGBmaWxlYGAsIGJ1dCB0aGUgQyB2YXJpYWJsZSB3b3VsZCBiZSBuYW1lZCBgYGZpbGVfb2JqYGAuCisKK1lvdSBjYW4gdXNlIHRoaXMgdG8gcmVuYW1lIHRoZSBgYHNlbGZgYCBwYXJhbWV0ZXIgdG9vIQorCisKK0NvbnZlcnRpbmcgZnVuY3Rpb25zIHVzaW5nIFB5QXJnX1VucGFja1R1cGxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBjb252ZXJ0IGEgZnVuY3Rpb24gcGFyc2luZyBpdHMgYXJndW1lbnRzIHdpdGggOmM6ZnVuYzpgUHlBcmdfVW5wYWNrVHVwbGVgLAorc2ltcGx5IHdyaXRlIG91dCBhbGwgdGhlIGFyZ3VtZW50cywgc3BlY2lmeWluZyBlYWNoIGFzIGFuIGBgb2JqZWN0YGAuICBZb3UKK21heSBzcGVjaWZ5IHRoZSBgYHR5cGVgYCBhcmd1bWVudCB0byBjYXN0IHRoZSB0eXBlIGFzIGFwcHJvcHJpYXRlLiAgQWxsCithcmd1bWVudHMgc2hvdWxkIGJlIG1hcmtlZCBwb3NpdGlvbmFsLW9ubHkgKGFkZCBhIGBgL2BgIG9uIGEgbGluZSBieSBpdHNlbGYKK2FmdGVyIHRoZSBsYXN0IGFyZ3VtZW50KS4KKworQ3VycmVudGx5IHRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIHVzZSA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCwgYnV0IHRoaXMKK3dpbGwgY2hhbmdlIHNvb24uCisKK09wdGlvbmFsIEdyb3VwcworLS0tLS0tLS0tLS0tLS0tCisKK1NvbWUgbGVnYWN5IGZ1bmN0aW9ucyBoYXZlIGEgdHJpY2t5IGFwcHJvYWNoIHRvIHBhcnNpbmcgdGhlaXIgYXJndW1lbnRzOgordGhleSBjb3VudCB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzLCB0aGVuIHVzZSBhIGBgc3dpdGNoYGAgc3RhdGVtZW50Cit0byBjYWxsIG9uZSBvZiBzZXZlcmFsIGRpZmZlcmVudCA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYCBjYWxscyBkZXBlbmRpbmcgb24KK2hvdyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoZXJlIGFyZS4gIChUaGVzZSBmdW5jdGlvbnMgY2Fubm90IGFjY2VwdAora2V5d29yZC1vbmx5IGFyZ3VtZW50cy4pICBUaGlzIGFwcHJvYWNoIHdhcyB1c2VkIHRvIHNpbXVsYXRlIG9wdGlvbmFsCithcmd1bWVudHMgYmFjayBiZWZvcmUgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzYCB3YXMgY3JlYXRlZC4KKworV2hpbGUgZnVuY3Rpb25zIHVzaW5nIHRoaXMgYXBwcm9hY2ggY2FuIG9mdGVuIGJlIGNvbnZlcnRlZCB0bwordXNlIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3Jkc2AsIG9wdGlvbmFsIGFyZ3VtZW50cywgYW5kIGRlZmF1bHQgdmFsdWVzLAoraXQncyBub3QgYWx3YXlzIHBvc3NpYmxlLiAgU29tZSBvZiB0aGVzZSBsZWdhY3kgZnVuY3Rpb25zIGhhdmUKK2JlaGF2aW9ycyA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNgIGRvZXNuJ3QgZGlyZWN0bHkgc3VwcG9ydC4KK1RoZSBtb3N0IG9idmlvdXMgZXhhbXBsZSBpcyB0aGUgYnVpbHRpbiBmdW5jdGlvbiBgYHJhbmdlKClgYCwgd2hpY2ggaGFzCithbiBvcHRpb25hbCBhcmd1bWVudCBvbiB0aGUgKmxlZnQqIHNpZGUgb2YgaXRzIHJlcXVpcmVkIGFyZ3VtZW50IQorQW5vdGhlciBleGFtcGxlIGlzIGBgY3Vyc2VzLndpbmRvdy5hZGRjaCgpYGAsIHdoaWNoIGhhcyBhIGdyb3VwIG9mIHR3bworYXJndW1lbnRzIHRoYXQgbXVzdCBhbHdheXMgYmUgc3BlY2lmaWVkIHRvZ2V0aGVyLiAgKFRoZSBhcmd1bWVudHMgYXJlCitjYWxsZWQgYGB4YGAgYW5kIGBgeWBgOyBpZiB5b3UgY2FsbCB0aGUgZnVuY3Rpb24gcGFzc2luZyBpbiBgYHhgYCwKK3lvdSBtdXN0IGFsc28gcGFzcyBpbiBgYHlgYC0tYW5kIGlmIHlvdSBkb24ndCBwYXNzIGluIGBgeGBgIHlvdSBtYXkgbm90CitwYXNzIGluIGBgeWBgIGVpdGhlci4pCisKK0luIGFueSBjYXNlLCB0aGUgZ29hbCBvZiBBcmd1bWVudCBDbGluaWMgaXMgdG8gc3VwcG9ydCBhcmd1bWVudCBwYXJzaW5nCitmb3IgYWxsIGV4aXN0aW5nIENQeXRob24gYnVpbHRpbnMgd2l0aG91dCBjaGFuZ2luZyB0aGVpciBzZW1hbnRpY3MuCitUaGVyZWZvcmUgQXJndW1lbnQgQ2xpbmljIHN1cHBvcnRzCit0aGlzIGFsdGVybmF0ZSBhcHByb2FjaCB0byBwYXJzaW5nLCB1c2luZyB3aGF0IGFyZSBjYWxsZWQgKm9wdGlvbmFsIGdyb3VwcyouCitPcHRpb25hbCBncm91cHMgYXJlIGdyb3VwcyBvZiBhcmd1bWVudHMgdGhhdCBtdXN0IGFsbCBiZSBwYXNzZWQgaW4gdG9nZXRoZXIuCitUaGV5IGNhbiBiZSB0byB0aGUgbGVmdCBvciB0aGUgcmlnaHQgb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50cy4gIFRoZXkKK2NhbiAqb25seSogYmUgdXNlZCB3aXRoIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLgorCisuLiBub3RlOjogT3B0aW9uYWwgZ3JvdXBzIGFyZSAqb25seSogaW50ZW5kZWQgZm9yIHVzZSB3aGVuIGNvbnZlcnRpbmcKKyAgICAgICAgICBmdW5jdGlvbnMgdGhhdCBtYWtlIG11bHRpcGxlIGNhbGxzIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgIQorICAgICAgICAgIEZ1bmN0aW9ucyB0aGF0IHVzZSAqYW55KiBvdGhlciBhcHByb2FjaCBmb3IgcGFyc2luZyBhcmd1bWVudHMKKyAgICAgICAgICBzaG91bGQgKmFsbW9zdCBuZXZlciogYmUgY29udmVydGVkIHRvIEFyZ3VtZW50IENsaW5pYyB1c2luZworICAgICAgICAgIG9wdGlvbmFsIGdyb3Vwcy4gIEZ1bmN0aW9ucyB1c2luZyBvcHRpb25hbCBncm91cHMgY3VycmVudGx5CisgICAgICAgICAgY2Fubm90IGhhdmUgYWNjdXJhdGUgc2lnYW50dXJlcyBpbiBQeXRob24sIGJlY2F1c2UgUHl0aG9uIGp1c3QKKyAgICAgICAgICBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlIGNvbmNlcHQuICBQbGVhc2UgYXZvaWQgdXNpbmcgb3B0aW9uYWwKKyAgICAgICAgICBncm91cHMgd2hlcmV2ZXIgcG9zc2libGUuCisKK1RvIHNwZWNpZnkgYW4gb3B0aW9uYWwgZ3JvdXAsIGFkZCBhIGBgW2BgIG9uIGEgbGluZSBieSBpdHNlbGYgYmVmb3JlCit0aGUgcGFyYW1ldGVycyB5b3Ugd2lzaCB0byBncm91cCB0b2dldGhlciwgYW5kIGEgYGBdYGAgb24gYSBsaW5lIGJ5IGl0c2VsZgorYWZ0ZXIgdGhlc2UgcGFyYW1ldGVycy4gIEFzIGFuIGV4YW1wbGUsIGhlcmUncyBob3cgYGBjdXJzZXMud2luZG93LmFkZGNoYGAKK3VzZXMgb3B0aW9uYWwgZ3JvdXBzIHRvIG1ha2UgdGhlIGZpcnN0IHR3byBwYXJhbWV0ZXJzIGFuZCB0aGUgbGFzdAorcGFyYW1ldGVyIG9wdGlvbmFsOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKworICAgIGN1cnNlcy53aW5kb3cuYWRkY2gKKworICAgICAgICBbCisgICAgICAgIHg6IGludAorICAgICAgICAgIFgtY29vcmRpbmF0ZS4KKyAgICAgICAgeTogaW50CisgICAgICAgICAgWS1jb29yZGluYXRlLgorICAgICAgICBdCisKKyAgICAgICAgY2g6IG9iamVjdAorICAgICAgICAgIENoYXJhY3RlciB0byBhZGQuCisKKyAgICAgICAgWworICAgICAgICBhdHRyOiBsb25nCisgICAgICAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICAgICAgXQorICAgICAgICAvCisKKyAgICAuLi4KKworCitOb3RlczoKKworKiBGb3IgZXZlcnkgb3B0aW9uYWwgZ3JvdXAsIG9uZSBhZGRpdGlvbmFsIHBhcmFtZXRlciB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZQorICBpbXBsIGZ1bmN0aW9uIHJlcHJlc2VudGluZyB0aGUgZ3JvdXAuICBUaGUgcGFyYW1ldGVyIHdpbGwgYmUgYW4gaW50IG5hbWVkCisgIGBgZ3JvdXBfe2RpcmVjdGlvbn1fe251bWJlcn1gYCwKKyAgd2hlcmUgYGB7ZGlyZWN0aW9ufWBgIGlzIGVpdGhlciBgYHJpZ2h0YGAgb3IgYGBsZWZ0YGAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGdyb3VwCisgIGlzIGJlZm9yZSBvciBhZnRlciB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycywgYW5kIGBge251bWJlcn1gYCBpcyBhIG1vbm90b25pY2FsbHkKKyAgaW5jcmVhc2luZyBudW1iZXIgKHN0YXJ0aW5nIGF0IDEpIGluZGljYXRpbmcgaG93IGZhciBhd2F5IHRoZSBncm91cCBpcyBmcm9tCisgIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLiAgV2hlbiB0aGUgaW1wbCBpcyBjYWxsZWQsIHRoaXMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0CisgIHRvIHplcm8gaWYgdGhpcyBncm91cCB3YXMgdW51c2VkLCBhbmQgc2V0IHRvIG5vbi16ZXJvIGlmIHRoaXMgZ3JvdXAgd2FzIHVzZWQuCisgIChCeSB1c2VkIG9yIHVudXNlZCwgSSBtZWFuIHdoZXRoZXIgb3Igbm90IHRoZSBwYXJhbWV0ZXJzIHJlY2VpdmVkIGFyZ3VtZW50cworICBpbiB0aGlzIGludm9jYXRpb24uKQorCisqIElmIHRoZXJlIGFyZSBubyByZXF1aXJlZCBhcmd1bWVudHMsIHRoZSBvcHRpb25hbCBncm91cHMgd2lsbCBiZWhhdmUKKyAgYXMgaWYgdGhleSdyZSB0byB0aGUgcmlnaHQgb2YgdGhlIHJlcXVpcmVkIGFyZ3VtZW50cy4KKworKiBJbiB0aGUgY2FzZSBvZiBhbWJpZ3VpdHksIHRoZSBhcmd1bWVudCBwYXJzaW5nIGNvZGUKKyAgZmF2b3JzIHBhcmFtZXRlcnMgb24gdGhlIGxlZnQgKGJlZm9yZSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycykuCisKKyogT3B0aW9uYWwgZ3JvdXBzIGNhbiBvbmx5IGNvbnRhaW4gcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMuCisKKyogT3B0aW9uYWwgZ3JvdXBzIGFyZSAqb25seSogaW50ZW5kZWQgZm9yIGxlZ2FjeSBjb2RlLiAgUGxlYXNlIGRvIG5vdAorICB1c2Ugb3B0aW9uYWwgZ3JvdXBzIGZvciBuZXcgY29kZS4KKworCitVc2luZyByZWFsIEFyZ3VtZW50IENsaW5pYyBjb252ZXJ0ZXJzLCBpbnN0ZWFkIG9mICJsZWdhY3kgY29udmVydGVycyIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyBzYXZlIHRpbWUsIGFuZCB0byBtaW5pbWl6ZSBob3cgbXVjaCB5b3UgbmVlZCB0byBsZWFybgordG8gYWNoaWV2ZSB5b3VyIGZpcnN0IHBvcnQgdG8gQXJndW1lbnQgQ2xpbmljLCB0aGUgd2Fsa3Rocm91Z2ggYWJvdmUgdGVsbHMKK3lvdSB0byB1c2UgImxlZ2FjeSBjb252ZXJ0ZXJzIi4gICJMZWdhY3kgY29udmVydGVycyIgYXJlIGEgY29udmVuaWVuY2UsCitkZXNpZ25lZCBleHBsaWNpdGx5IHRvIG1ha2UgcG9ydGluZyBleGlzdGluZyBjb2RlIHRvIEFyZ3VtZW50IENsaW5pYworZWFzaWVyLiAgQW5kIHRvIGJlIGNsZWFyLCB0aGVpciB1c2UgaXMgYWNjZXB0YWJsZSB3aGVuIHBvcnRpbmcgY29kZSBmb3IKK1B5dGhvbiAzLjQuCisKK0hvd2V2ZXIsIGluIHRoZSBsb25nIHRlcm0gd2UgcHJvYmFibHkgd2FudCBhbGwgb3VyIGJsb2NrcyB0bwordXNlIEFyZ3VtZW50IENsaW5pYydzIHJlYWwgc3ludGF4IGZvciBjb252ZXJ0ZXJzLiAgV2h5PyAgQSBjb3VwbGUKK3JlYXNvbnM6CisKKyogVGhlIHByb3BlciBjb252ZXJ0ZXJzIGFyZSBmYXIgZWFzaWVyIHRvIHJlYWQgYW5kIGNsZWFyZXIgaW4gdGhlaXIgaW50ZW50LgorKiBUaGVyZSBhcmUgc29tZSBmb3JtYXQgdW5pdHMgdGhhdCBhcmUgdW5zdXBwb3J0ZWQgYXMgImxlZ2FjeSBjb252ZXJ0ZXJzIiwKKyAgYmVjYXVzZSB0aGV5IHJlcXVpcmUgYXJndW1lbnRzLCBhbmQgdGhlIGxlZ2FjeSBjb252ZXJ0ZXIgc3ludGF4IGRvZXNuJ3QKKyAgc3VwcG9ydCBzcGVjaWZ5aW5nIGFyZ3VtZW50cy4KKyogSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgaGF2ZSBhIG5ldyBhcmd1bWVudCBwYXJzaW5nIGxpYnJhcnkgdGhhdCBpc24ndAorICByZXN0cmljdGVkIHRvIHdoYXQgOmM6ZnVuYzpgUHlBcmdfUGFyc2VUdXBsZWAgc3VwcG9ydHM7IHRoaXMgZmxleGliaWxpdHkKKyAgd29uJ3QgYmUgYXZhaWxhYmxlIHRvIHBhcmFtZXRlcnMgdXNpbmcgbGVnYWN5IGNvbnZlcnRlcnMuCisKK1RoZXJlZm9yZSwgaWYgeW91IGRvbid0IG1pbmQgYSBsaXR0bGUgZXh0cmEgZWZmb3J0LCBwbGVhc2UgdXNlIHRoZSBub3JtYWwKK2NvbnZlcnRlcnMgaW5zdGVhZCBvZiBsZWdhY3kgY29udmVydGVycy4KKworSW4gYSBudXRzaGVsbCwgdGhlIHN5bnRheCBmb3IgQXJndW1lbnQgQ2xpbmljIChub24tbGVnYWN5KSBjb252ZXJ0ZXJzCitsb29rcyBsaWtlIGEgUHl0aG9uIGZ1bmN0aW9uIGNhbGwuICBIb3dldmVyLCBpZiB0aGVyZSBhcmUgbm8gZXhwbGljaXQKK2FyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24gKGFsbCBmdW5jdGlvbnMgdGFrZSB0aGVpciBkZWZhdWx0IHZhbHVlcyksCit5b3UgbWF5IG9taXQgdGhlIHBhcmVudGhlc2VzLiAgVGh1cyBgYGJvb2xgYCBhbmQgYGBib29sKClgYCBhcmUgZXhhY3RseQordGhlIHNhbWUgY29udmVydGVycy4KKworQWxsIGFyZ3VtZW50cyB0byBBcmd1bWVudCBDbGluaWMgY29udmVydGVycyBhcmUga2V5d29yZC1vbmx5LgorQWxsIEFyZ3VtZW50IENsaW5pYyBjb252ZXJ0ZXJzIGFjY2VwdCB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKKworICBgYGNfZGVmYXVsdGBgCisgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyIHdoZW4gZGVmaW5lZCBpbiBDLgorICAgIFNwZWNpZmljYWxseSwgdGhpcyB3aWxsIGJlIHRoZSBpbml0aWFsaXplciBmb3IgdGhlIHZhcmlhYmxlIGRlY2xhcmVkCisgICAgaW4gdGhlICJwYXJzZSBmdW5jdGlvbiIuICBTZWUgOnJlZjpgdGhlIHNlY3Rpb24gb24gZGVmYXVsdCB2YWx1ZXMgPGRlZmF1bHRfdmFsdWVzPmAKKyAgICBmb3IgaG93IHRvIHVzZSB0aGlzLgorICAgIFNwZWNpZmllZCBhcyBhIHN0cmluZy4KKworICBgYGFubm90YXRpb25gYAorICAgIFRoZSBhbm5vdGF0aW9uIHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlci4gIE5vdCBjdXJyZW50bHkgc3VwcG9ydGVkLAorICAgIGJlY2F1c2UgUEVQIDggbWFuZGF0ZXMgdGhhdCB0aGUgUHl0aG9uIGxpYnJhcnkgbWF5IG5vdCB1c2UKKyAgICBhbm5vdGF0aW9ucy4KKworSW4gYWRkaXRpb24sIHNvbWUgY29udmVydGVycyBhY2NlcHQgYWRkaXRpb25hbCBhcmd1bWVudHMuICBIZXJlIGlzIGEgbGlzdAorb2YgdGhlc2UgYXJndW1lbnRzLCBhbG9uZyB3aXRoIHRoZWlyIG1lYW5pbmdzOgorCisgIGBgYml0d2lzZWBgCisgICAgT25seSBzdXBwb3J0ZWQgZm9yIHVuc2lnbmVkIGludGVnZXJzLiAgVGhlIG5hdGl2ZSBpbnRlZ2VyIHZhbHVlIG9mIHRoaXMKKyAgICBQeXRob24gYXJndW1lbnQgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBwYXJhbWV0ZXIgd2l0aG91dCBhbnkgcmFuZ2UgY2hlY2tpbmcsCisgICAgZXZlbiBmb3IgbmVnYXRpdmUgdmFsdWVzLgorCisgIGBgY29udmVydGVyYGAKKyAgICBPbmx5IHN1cHBvcnRlZCBieSB0aGUgYGBvYmplY3RgYCBjb252ZXJ0ZXIuICBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgYQorICAgIDpyZWY6YEMgImNvbnZlcnRlciBmdW5jdGlvbiIgPG9fYW1wZXJzYW5kPmAKKyAgICB0byB1c2UgdG8gY29udmVydCB0aGlzIG9iamVjdCB0byBhIG5hdGl2ZSB0eXBlLgorCisgIGBgZW5jb2RpbmdgYAorICAgIE9ubHkgc3VwcG9ydGVkIGZvciBzdHJpbmdzLiAgU3BlY2lmaWVzIHRoZSBlbmNvZGluZyB0byB1c2Ugd2hlbiBjb252ZXJ0aW5nCisgICAgdGhpcyBzdHJpbmcgZnJvbSBhIFB5dGhvbiBzdHIgKFVuaWNvZGUpIHZhbHVlIGludG8gYSBDIGBgY2hhciAqYGAgdmFsdWUuCisKKyAgYGBsZW5ndGhgYAorICAgIE9ubHkgc3VwcG9ydGVkIGZvciBzdHJpbmdzLiAgSWYgdHJ1ZSwgcmVxdWVzdHMgdGhhdCB0aGUgbGVuZ3RoIG9mIHRoZQorICAgIHN0cmluZyBiZSBwYXNzZWQgaW4gdG8gdGhlIGltcGwgZnVuY3Rpb24sIGp1c3QgYWZ0ZXIgdGhlIHN0cmluZyBwYXJhbWV0ZXIsCisgICAgaW4gYSBwYXJhbWV0ZXIgbmFtZWQgYGA8cGFyYW1ldGVyX25hbWU+X2xlbmd0aGBgLgorCisgIGBgbnVsbGFibGVgYAorICAgIE9ubHkgc3VwcG9ydGVkIGZvciBzdHJpbmdzLiAgSWYgdHJ1ZSwgdGhpcyBwYXJhbWV0ZXIgbWF5IGFsc28gYmUgc2V0IHRvCisgICAgYGBOb25lYGAsIGluIHdoaWNoIGNhc2UgdGhlIEMgcGFyYW1ldGVyIHdpbGwgYmUgc2V0IHRvIGBgTlVMTGBgLgorCisgIGBgc3ViY2xhc3Nfb2ZgYAorICAgIE9ubHkgc3VwcG9ydGVkIGZvciB0aGUgYGBvYmplY3RgYCBjb252ZXJ0ZXIuICBSZXF1aXJlcyB0aGF0IHRoZSBQeXRob24KKyAgICB2YWx1ZSBiZSBhIHN1YmNsYXNzIG9mIGEgUHl0aG9uIHR5cGUsIGFzIGV4cHJlc3NlZCBpbiBDLgorCisgIGBgdHlwZXNgYAorICAgIE9ubHkgc3VwcG9ydGVkIGZvciB0aGUgYGBvYmplY3RgYCAoYW5kIGBgc2VsZmBgKSBjb252ZXJ0ZXIuICBTcGVjaWZpZXMKKyAgICB0aGUgQyB0eXBlIHRoYXQgd2lsbCBiZSB1c2VkIHRvIGRlY2xhcmUgdGhlIHZhcmlhYmxlLiAgRGVmYXVsdCB2YWx1ZSBpcworICAgIGBgIlB5T2JqZWN0ICoiYGAuCisKKyAgYGB0eXBlc2BgCisgICAgQSBzdHJpbmcgY29udGFpbmluZyBhIGxpc3Qgb2YgUHl0aG9uIHR5cGVzIChhbmQgcG9zc2libHkgcHNldWRvLXR5cGVzKTsKKyAgICB0aGlzIHJlc3RyaWN0cyB0aGUgYWxsb3dhYmxlIFB5dGhvbiBhcmd1bWVudCB0byB2YWx1ZXMgb2YgdGhlc2UgdHlwZXMuCisgICAgKFRoaXMgaXMgbm90IGEgZ2VuZXJhbC1wdXJwb3NlIGZhY2lsaXR5OyBhcyBhIHJ1bGUgaXQgb25seSBzdXBwb3J0cworICAgIHNwZWNpZmljIGxpc3RzIG9mIHR5cGVzIGFzIHNob3duIGluIHRoZSBsZWdhY3kgY29udmVydGVyIHRhYmxlLikKKworICBgYHplcm9lc2BgCisgICAgT25seSBzdXBwb3J0ZWQgZm9yIHN0cmluZ3MuICBJZiB0cnVlLCBlbWJlZGRlZCBOVUwgYnl0ZXMgKGBgJ1xcMCdgYCkgYXJlCisgICAgcGVybWl0dGVkIGluc2lkZSB0aGUgdmFsdWUuCisKK1BsZWFzZSBub3RlLCBub3QgZXZlcnkgcG9zc2libGUgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIHdpbGwgd29yay4KK09mdGVuIHRoZXNlIGFyZ3VtZW50cyBhcmUgaW1wbGVtZW50ZWQgaW50ZXJuYWxseSBieSBzcGVjaWZpYyBgYFB5QXJnX1BhcnNlVHVwbGVgYAorKmZvcm1hdCB1bml0cyosIHdpdGggc3BlY2lmaWMgYmVoYXZpb3IuICBGb3IgZXhhbXBsZSwgY3VycmVudGx5IHlvdSBjYW5ub3QKK2NhbGwgYGBzdHJgYCBhbmQgcGFzcyBpbiBgYHplcm9lcz1UcnVlYGAgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgYW4gYGBlbmNvZGluZ2BgOworYWx0aG91Z2ggaXQncyBwZXJmZWN0bHkgcmVhc29uYWJsZSB0byB0aGluayB0aGlzIHdvdWxkIHdvcmssIHRoZXNlIHNlbWFudGljcyBkb24ndAorbWFwIHRvIGFueSBleGlzdGluZyBmb3JtYXQgdW5pdC4gIFNvIEFyZ3VtZW50IENsaW5pYyBkb2Vzbid0IHN1cHBvcnQgaXQuICAoT3IsIGF0CitsZWFzdCwgbm90IHlldC4pCisKK0JlbG93IGlzIGEgdGFibGUgc2hvd2luZyB0aGUgbWFwcGluZyBvZiBsZWdhY3kgY29udmVydGVycyBpbnRvIHJlYWwKK0FyZ3VtZW50IENsaW5pYyBjb252ZXJ0ZXJzLiAgT24gdGhlIGxlZnQgaXMgdGhlIGxlZ2FjeSBjb252ZXJ0ZXIsCitvbiB0aGUgcmlnaHQgaXMgdGhlIHRleHQgeW91J2QgcmVwbGFjZSBpdCB3aXRoLgorCis9PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK2BgJ0InYGAgICAgIGBgdW5zaWduZWRfY2hhcihiaXR3aXNlPVRydWUpYGAKK2BgJ2InYGAgICAgIGBgdW5zaWduZWRfY2hhcmBgCitgYCdjJ2BgICAgICBgYGNoYXJgYAorYGAnQydgYCAgICAgYGBpbnQodHlwZXM9J3N0cicpYGAKK2BgJ2QnYGAgICAgIGBgZG91YmxlYGAKK2BgJ0QnYGAgICAgIGBgUHlfY29tcGxleGBgCitgYCdlcyMnYGAgICBgYHN0cihlbmNvZGluZz0nbmFtZV9vZl9lbmNvZGluZycsIGxlbmd0aD1UcnVlLCB6ZXJvZXM9VHJ1ZSlgYAorYGAnZXMnYGAgICAgYGBzdHIoZW5jb2Rpbmc9J25hbWVfb2ZfZW5jb2RpbmcnKWBgCitgYCdldCMnYGAgICBgYHN0cihlbmNvZGluZz0nbmFtZV9vZl9lbmNvZGluZycsIHR5cGVzPSdieXRlcyBieXRlYXJyYXkgc3RyJywgbGVuZ3RoPVRydWUpYGAKK2BgJ2V0J2BgICAgIGBgc3RyKGVuY29kaW5nPSduYW1lX29mX2VuY29kaW5nJywgdHlwZXM9J2J5dGVzIGJ5dGVhcnJheSBzdHInKWBgCitgYCdmJ2BgICAgICBgYGZsb2F0YGAKK2BgJ2gnYGAgICAgIGBgc2hvcnRgYAorYGAnSCdgYCAgICAgYGB1bnNpZ25lZF9zaG9ydChiaXR3aXNlPVRydWUpYGAKK2BgJ2knYGAgICAgIGBgaW50YGAKK2BgJ0knYGAgICAgIGBgdW5zaWduZWRfaW50KGJpdHdpc2U9VHJ1ZSlgYAorYGAnaydgYCAgICAgYGB1bnNpZ25lZF9sb25nKGJpdHdpc2U9VHJ1ZSlgYAorYGAnSydgYCAgICAgYGB1bnNpZ25lZF9QWV9MT05HX0xPTkcoYml0d2lzZT1UcnVlKWBgCitgYCdMJ2BgICAgICBgYFBZX0xPTkdfTE9OR2BgCitgYCduJ2BgICAgICBgYFB5X3NzaXplX3RgYAorYGAnTyEnYGAgICAgYGBvYmplY3Qoc3ViY2xhc3Nfb2Y9JyZQeVNvbWV0aGluZ19UeXBlJylgYAorYGAnTyYnYGAgICAgYGBvYmplY3QoY29udmVydGVyPSduYW1lX29mX2NfZnVuY3Rpb24nKWBgCitgYCdPJ2BgICAgICBgYG9iamVjdGBgCitgYCdwJ2BgICAgICBgYGJvb2xgYAorYGAncyMnYGAgICAgYGBzdHIobGVuZ3RoPVRydWUpYGAKK2BgJ1MnYGAgICAgIGBgUHlCeXRlc09iamVjdGBgCitgYCdzJ2BgICAgICBgYHN0cmBgCitgYCdzKidgYCAgICBgYFB5X2J1ZmZlcih0eXBlcz0nc3RyIGJ5dGVzIGJ5dGVhcnJheSBidWZmZXInKWBgCitgYCd1IydgYCAgICBgYFB5X1VOSUNPREUobGVuZ3RoPVRydWUpYGAKK2BgJ3UnYGAgICAgIGBgUHlfVU5JQ09ERWBgCitgYCdVJ2BgICAgICBgYHVuaWNvZGVgYAorYGAndyonYGAgICAgYGBQeV9idWZmZXIodHlwZXM9J2J5dGVhcnJheSByd2J1ZmZlcicpYGAKK2BgJ3kjJ2BgICAgIGBgc3RyKHR5cGVzPSdieXRlcycsIGxlbmd0aD1UcnVlKWBgCitgYCdZJ2BgICAgICBgYFB5Qnl0ZUFycmF5T2JqZWN0YGAKK2BgJ3knYGAgICAgIGBgc3RyKHR5cGVzPSdieXRlcycpYGAKK2BgJ3kqJ2BgICAgIGBgUHlfYnVmZmVyYGAKK2BgJ1ojJ2BgICAgIGBgUHlfVU5JQ09ERShudWxsYWJsZT1UcnVlLCBsZW5ndGg9VHJ1ZSlgYAorYGAneiMnYGAgICAgYGBzdHIobnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpYGAKK2BgJ1onYGAgICAgIGBgUHlfVU5JQ09ERShudWxsYWJsZT1UcnVlKWBgCitgYCd6J2BgICAgICBgYHN0cihudWxsYWJsZT1UcnVlKWBgCitgYCd6KidgYCAgICBgYFB5X2J1ZmZlcih0eXBlcz0nc3RyIGJ5dGVzIGJ5dGVhcnJheSBidWZmZXInLCBudWxsYWJsZT1UcnVlKWBgCis9PT09PT09PT0gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQXMgYW4gZXhhbXBsZSwgaGVyZSdzIG91ciBzYW1wbGUgYGBwaWNrbGUuUGlja2xlci5kdW1wYGAgdXNpbmcgdGhlIHByb3BlcgorY29udmVydGVyOjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBwaWNrbGUuUGlja2xlci5kdW1wCisKKyAgICAgICAgb2JqOiBvYmplY3QKKyAgICAgICAgICAgIFRoZSBvYmplY3QgdG8gYmUgcGlja2xlZC4KKyAgICAgICAgLworCisgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIG9iaiB0byB0aGUgb3BlbiBmaWxlLgorICAgIFtjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworQXJndW1lbnQgQ2xpbmljIHdpbGwgc2hvdyB5b3UgYWxsIHRoZSBjb252ZXJ0ZXJzIGl0IGhhcworYXZhaWxhYmxlLiAgRm9yIGVhY2ggY29udmVydGVyIGl0J2xsIHNob3cgeW91IGFsbCB0aGUgcGFyYW1ldGVycworaXQgYWNjZXB0cywgYWxvbmcgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIuCitKdXN0IHJ1biBgYFRvb2xzL2NsaW5pYy9jbGluaWMucHkgLS1jb252ZXJ0ZXJzYGAgdG8gc2VlIHRoZSBmdWxsIGxpc3QuCisKK1B5X2J1ZmZlcgorLS0tLS0tLS0tCisKK1doZW4gdXNpbmcgdGhlIGBgUHlfYnVmZmVyYGAgY29udmVydGVyCisob3IgdGhlIGBgJ3MqJ2BgLCBgYCd3KidgYCwgYGAnKnknYGAsIG9yIGBgJ3oqJ2BgIGxlZ2FjeSBjb252ZXJ0ZXJzKSwKK3lvdSAqbXVzdCogbm90IGNhbGwgOmM6ZnVuYzpgUHlCdWZmZXJfUmVsZWFzZWAgb24gdGhlIHByb3ZpZGVkIGJ1ZmZlci4KK0FyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZXMgY29kZSB0aGF0IGRvZXMgaXQgZm9yIHlvdSAoaW4gdGhlIHBhcnNpbmcgZnVuY3Rpb24pLgorCisKKworQWR2YW5jZWQgY29udmVydGVycworLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSZW1lbWJlciB0aG9zZSBmb3JtYXQgdW5pdHMgeW91IHNraXBwZWQgZm9yIHlvdXIgZmlyc3QKK3RpbWUgYmVjYXVzZSB0aGV5IHdlcmUgYWR2YW5jZWQ/ICBIZXJlJ3MgaG93IHRvIGhhbmRsZSB0aG9zZSB0b28uCisKK1RoZSB0cmljayBpcywgYWxsIHRob3NlIGZvcm1hdCB1bml0cyB0YWtlIGFyZ3VtZW50cy0tZWl0aGVyCitjb252ZXJzaW9uIGZ1bmN0aW9ucywgb3IgdHlwZXMsIG9yIHN0cmluZ3Mgc3BlY2lmeWluZyBhbiBlbmNvZGluZy4KKyhCdXQgImxlZ2FjeSBjb252ZXJ0ZXJzIiBkb24ndCBzdXBwb3J0IGFyZ3VtZW50cy4gIFRoYXQncyB3aHkgd2UKK3NraXBwZWQgdGhlbSBmb3IgeW91ciBmaXJzdCBmdW5jdGlvbi4pICBUaGUgYXJndW1lbnQgeW91IHNwZWNpZmllZAordG8gdGhlIGZvcm1hdCB1bml0IGlzIG5vdyBhbiBhcmd1bWVudCB0byB0aGUgY29udmVydGVyOyB0aGlzCithcmd1bWVudCBpcyBlaXRoZXIgYGBjb252ZXJ0ZXJgYCAoZm9yIGBgTyZgYCksIGBgc3ViY2xhc3Nfb2ZgYCAoZm9yIGBgTyFgYCksCitvciBgYGVuY29kaW5nYGAgKGZvciBhbGwgdGhlIGZvcm1hdCB1bml0cyB0aGF0IHN0YXJ0IHdpdGggYGBlYGApLgorCitXaGVuIHVzaW5nIGBgc3ViY2xhc3Nfb2ZgYCwgeW91IG1heSBhbHNvIHdhbnQgdG8gdXNlIHRoZSBvdGhlcgorY3VzdG9tIGFyZ3VtZW50IGZvciBgYG9iamVjdCgpYGA6IGBgdHlwZWBgLCB3aGljaCBsZXRzIHlvdSBzZXQgdGhlIHR5cGUKK2FjdHVhbGx5IHVzZWQgZm9yIHRoZSBwYXJhbWV0ZXIuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZW5zdXJlCit0aGF0IHRoZSBvYmplY3QgaXMgYSBzdWJjbGFzcyBvZiBgYFB5VW5pY29kZV9UeXBlYGAsIHlvdSBwcm9iYWJseSB3YW50Cit0byB1c2UgdGhlIGNvbnZlcnRlciBgYG9iamVjdCh0eXBlPSdQeVVuaWNvZGVPYmplY3QgKicsIHN1YmNsYXNzX29mPScmUHlVbmljb2RlX1R5cGUnKWBgLgorCitPbmUgcG9zc2libGUgcHJvYmxlbSB3aXRoIHVzaW5nIEFyZ3VtZW50IENsaW5pYzogaXQgdGFrZXMgYXdheSBzb21lIHBvc3NpYmxlCitmbGV4aWJpbGl0eSBmb3IgdGhlIGZvcm1hdCB1bml0cyBzdGFydGluZyB3aXRoIGBgZWBgLiAgV2hlbiB3cml0aW5nIGEKK2BgUHlBcmdfUGFyc2VgYCBjYWxsIGJ5IGhhbmQsIHlvdSBjb3VsZCB0aGVvcmV0aWNhbGx5IGRlY2lkZSBhdCBydW50aW1lIHdoYXQKK2VuY29kaW5nIHN0cmluZyB0byBwYXNzIGluIHRvIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgLiAgIEJ1dCBub3cgdGhpcyBzdHJpbmcgbXVzdAorYmUgaGFyZC1jb2RlZCBhdCBBcmd1bWVudC1DbGluaWMtcHJlcHJvY2Vzc2luZy10aW1lLiAgVGhpcyBsaW1pdGF0aW9uIGlzIGRlbGliZXJhdGU7CitpdCBtYWRlIHN1cHBvcnRpbmcgdGhpcyBmb3JtYXQgdW5pdCBtdWNoIGVhc2llciwgYW5kIG1heSBhbGxvdyBmb3IgZnV0dXJlIG9wdGltaXphdGlvbnMuCitUaGlzIHJlc3RyaWN0aW9uIGRvZXNuJ3Qgc2VlbSB1bnJlYXNvbmFibGU7IENQeXRob24gaXRzZWxmIGFsd2F5cyBwYXNzZXMgaW4gc3RhdGljCitoYXJkLWNvZGVkIGVuY29kaW5nIHN0cmluZ3MgZm9yIHBhcmFtZXRlcnMgd2hvc2UgZm9ybWF0IHVuaXRzIHN0YXJ0IHdpdGggYGBlYGAuCisKKworLi4gX2RlZmF1bHRfdmFsdWVzOgorCitQYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitEZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1ldGVycyBjYW4gYmUgYW55IG9mIGEgbnVtYmVyIG9mIHZhbHVlcy4KK0F0IHRoZWlyIHNpbXBsZXN0LCB0aGV5IGNhbiBiZSBzdHJpbmcsIGludCwgb3IgZmxvYXQgbGl0ZXJhbHM6OgorCisgICAgZm9vOiBzdHIgPSAiYWJjIgorICAgIGJhcjogaW50ID0gMTIzCisgICAgYmF0OiBmbG9hdCA9IDQ1LjYKKworVGhleSBjYW4gYWxzbyB1c2UgYW55IG9mIFB5dGhvbidzIGJ1aWx0LWluIGNvbnN0YW50czo6CisKKyAgICB5ZXA6ICBib29sID0gVHJ1ZQorICAgIG5vcGU6IGJvb2wgPSBGYWxzZQorICAgIG5hZGE6IG9iamVjdCA9IE5vbmUKKworVGhlcmUncyBhbHNvIHNwZWNpYWwgc3VwcG9ydCBmb3IgYSBkZWZhdWx0IHZhbHVlIG9mIGBgTlVMTGBgLCBhbmQKK2ZvciBzaW1wbGUgZXhwcmVzc2lvbnMsIGRvY3VtZW50ZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KKworCitUaGUgYGBOVUxMYGAgZGVmYXVsdCB2YWx1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIHN0cmluZyBhbmQgb2JqZWN0IHBhcmFtZXRlcnMsIHlvdSBjYW4gc2V0IHRoZW0gdG8gYGBOb25lYGAgdG8gaW5kaWNhdGUKK3RoYXQgdGhlcmUncyBubyBkZWZhdWx0LiAgSG93ZXZlciwgdGhhdCBtZWFucyB0aGUgQyB2YXJpYWJsZSB3aWxsIGJlCitpbml0aWFsaXplZCB0byBgYFB5X05vbmVgYC4gIEZvciBjb252ZW5pZW5jZSdzIHNha2VzLCB0aGVyZSdzIGEgc3BlY2lhbAordmFsdWUgY2FsbGVkIGBgTlVMTGBgIGZvciBqdXN0IHRoaXMgcmVhc29uOiBmcm9tIFB5dGhvbidzIHBlcnNwZWN0aXZlIGl0CitiZWhhdmVzIGxpa2UgYSBkZWZhdWx0IHZhbHVlIG9mIGBgTm9uZWBgLCBidXQgdGhlIEMgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQKK3dpdGggYGBOVUxMYGAuCisKK0V4cHJlc3Npb25zIHNwZWNpZmllZCBhcyBkZWZhdWx0IHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciBhIHBhcmFtZXRlciBjYW4gYmUgbW9yZSB0aGFuIGp1c3QgYSBsaXRlcmFsIHZhbHVlLgorSXQgY2FuIGJlIGFuIGVudGlyZSBleHByZXNzaW9uLCB1c2luZyBtYXRoIG9wZXJhdG9ycyBhbmQgbG9va2luZyB1cCBhdHRyaWJ1dGVzCitvbiBvYmplY3RzLiAgSG93ZXZlciwgdGhpcyBzdXBwb3J0IGlzbid0IGV4YWN0bHkgc2ltcGxlLCBiZWNhdXNlIG9mIHNvbWUKK25vbi1vYnZpb3VzIHNlbWFudGljcy4KKworQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlOjoKKworICAgIGZvbzogUHlfc3NpemVfdCA9IHN5cy5tYXhzaXplIC0gMQorCitgYHN5cy5tYXhzaXplYGAgY2FuIGhhdmUgZGlmZmVyZW50IHZhbHVlcyBvbiBkaWZmZXJlbnQgcGxhdGZvcm1zLiAgVGhlcmVmb3JlCitBcmd1bWVudCBDbGluaWMgY2FuJ3Qgc2ltcGx5IGV2YWx1YXRlIHRoYXQgZXhwcmVzc2lvbiBsb2NhbGx5IGFuZCBoYXJkLWNvZGUgaXQKK2luIEMuICBTbyBpdCBzdG9yZXMgdGhlIGRlZmF1bHQgaW4gc3VjaCBhIHdheSB0aGF0IGl0IHdpbGwgZ2V0IGV2YWx1YXRlZCBhdAorcnVudGltZSwgd2hlbiB0aGUgdXNlciBhc2tzIGZvciB0aGUgZnVuY3Rpb24ncyBzaWduYXR1cmUuCisKK1doYXQgbmFtZXNwYWNlIGlzIGF2YWlsYWJsZSB3aGVuIHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZD8gIEl0J3MgZXZhbHVhdGVkCitpbiB0aGUgY29udGV4dCBvZiB0aGUgbW9kdWxlIHRoZSBidWlsdGluIGNhbWUgZnJvbS4gIFNvLCBpZiB5b3VyIG1vZHVsZSBoYXMgYW4KK2F0dHJpYnV0ZSBjYWxsZWQgImBgbWF4X3dpZGdldHNgYCIsIHlvdSBtYXkgc2ltcGx5IHVzZSBpdDo6CisKKyAgICBmb286IFB5X3NzaXplX3QgPSBtYXhfd2lkZ2V0cworCitJZiB0aGUgc3ltYm9sIGlzbid0IGZvdW5kIGluIHRoZSBjdXJyZW50IG1vZHVsZSwgaXQgZmFpbHMgb3ZlciB0byBsb29raW5nIGluCitgYHN5cy5tb2R1bGVzYGAuICBUaGF0J3MgaG93IGl0IGNhbiBmaW5kIGBgc3lzLm1heHNpemVgYCBmb3IgZXhhbXBsZS4gIChTaW5jZSB5b3UKK2Rvbid0IGtub3cgaW4gYWR2YW5jZSB3aGF0IG1vZHVsZXMgdGhlIHVzZXIgd2lsbCBsb2FkIGludG8gdGhlaXIgaW50ZXJwcmV0ZXIsCitpdCdzIGJlc3QgdG8gcmVzdHJpY3QgeW91cnNlbGYgdG8gbW9kdWxlcyB0aGF0IGFyZSBwcmVsb2FkZWQgYnkgUHl0aG9uIGl0c2VsZi4pCisKK0V2YWx1YXRpbmcgZGVmYXVsdCB2YWx1ZXMgb25seSBhdCBydW50aW1lIG1lYW5zIEFyZ3VtZW50IENsaW5pYyBjYW4ndCBjb21wdXRlCit0aGUgY29ycmVjdCBlcXVpdmFsZW50IEMgZGVmYXVsdCB2YWx1ZS4gIFNvIHlvdSBuZWVkIHRvIHRlbGwgaXQgZXhwbGljaXRseS4KK1doZW4geW91IHVzZSBhbiBleHByZXNzaW9uLCB5b3UgbXVzdCBhbHNvIHNwZWNpZnkgdGhlIGVxdWl2YWxlbnQgZXhwcmVzc2lvbgoraW4gQywgdXNpbmcgdGhlIGBgY19kZWZhdWx0YGAgcGFyYW1ldGVyIHRvIHRoZSBjb252ZXJ0ZXI6OgorCisgICAgZm9vOiBQeV9zc2l6ZV90KGNfZGVmYXVsdD0iUFlfU1NJWkVfVF9NQVggLSAxIikgPSBzeXMubWF4c2l6ZSAtIDEKKworQW5vdGhlciBjb21wbGljYXRpb246IEFyZ3VtZW50IENsaW5pYyBjYW4ndCBrbm93IGluIGFkdmFuY2Ugd2hldGhlciBvciBub3QgdGhlCitleHByZXNzaW9uIHlvdSBzdXBwbHkgaXMgdmFsaWQuICBJdCBwYXJzZXMgaXQgdG8gbWFrZSBzdXJlIGl0IGxvb2tzIGxlZ2FsLCBidXQKK2l0IGNhbid0ICphY3R1YWxseSoga25vdy4gIFlvdSBtdXN0IGJlIHZlcnkgY2FyZWZ1bCB3aGVuIHVzaW5nIGV4cHJlc3Npb25zIHRvCitzcGVjaWZ5IHZhbHVlcyB0aGF0IGFyZSBndWFyYW50ZWVkIHRvIGJlIHZhbGlkIGF0IHJ1bnRpbWUhCisKK0ZpbmFsbHksIGJlY2F1c2UgZXhwcmVzc2lvbnMgbXVzdCBiZSByZXByZXNlbnRhYmxlIGFzIHN0YXRpYyBDIHZhbHVlcywgdGhlcmUKK2FyZSBtYW55IHJlc3RyaWN0aW9ucyBvbiBsZWdhbCBleHByZXNzaW9ucy4gIEhlcmUncyBhIGxpc3Qgb2YgUHl0aG9uIGZlYXR1cmVzCit5b3UncmUgbm90IHBlcm1pdHRlZCB0byB1c2U6CisKKyogRnVuY3Rpb24gY2FsbHMuCisqIElubGluZSBpZiBzdGF0ZW1lbnRzIChgYDMgaWYgZm9vIGVsc2UgNWBgKS4KKyogQXV0b21hdGljIHNlcXVlbmNlIHVucGFja2luZyAoYGAqWzEsIDIsIDNdYGApLgorKiBMaXN0L3NldC9kaWN0IGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMuCisqIFR1cGxlL2xpc3Qvc2V0L2RpY3QgbGl0ZXJhbHMuCisKKworCitVc2luZyBhIHJldHVybiBjb252ZXJ0ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitCeSBkZWZhdWx0IHRoZSBpbXBsIGZ1bmN0aW9uIEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZXMgZm9yIHlvdSByZXR1cm5zIGBgUHlPYmplY3QgKmBgLgorQnV0IHlvdXIgQyBmdW5jdGlvbiBvZnRlbiBjb21wdXRlcyBzb21lIEMgdHlwZSwgdGhlbiBjb252ZXJ0cyBpdCBpbnRvIHRoZSBgYFB5T2JqZWN0ICpgYAorYXQgdGhlIGxhc3QgbW9tZW50LiAgQXJndW1lbnQgQ2xpbmljIGhhbmRsZXMgY29udmVydGluZyB5b3VyIGlucHV0cyBmcm9tIFB5dGhvbiB0eXBlcworaW50byBuYXRpdmUgQyB0eXBlcy0td2h5IG5vdCBoYXZlIGl0IGNvbnZlcnQgeW91ciByZXR1cm4gdmFsdWUgZnJvbSBhIG5hdGl2ZSBDIHR5cGUKK2ludG8gYSBQeXRob24gdHlwZSB0b28/CisKK1RoYXQncyB3aGF0IGEgInJldHVybiBjb252ZXJ0ZXIiIGRvZXMuICBJdCBjaGFuZ2VzIHlvdXIgaW1wbCBmdW5jdGlvbiB0byByZXR1cm4KK3NvbWUgQyB0eXBlLCB0aGVuIGFkZHMgY29kZSB0byB0aGUgZ2VuZXJhdGVkIChub24taW1wbCkgZnVuY3Rpb24gdG8gaGFuZGxlIGNvbnZlcnRpbmcKK3RoYXQgdmFsdWUgaW50byB0aGUgYXBwcm9wcmlhdGUgYGBQeU9iamVjdCAqYGAuCisKK1RoZSBzeW50YXggZm9yIHJldHVybiBjb252ZXJ0ZXJzIGlzIHNpbWlsYXIgdG8gdGhhdCBvZiBwYXJhbWV0ZXIgY29udmVydGVycy4KK1lvdSBzcGVjaWZ5IHRoZSByZXR1cm4gY29udmVydGVyIGxpa2UgaXQgd2FzIGEgcmV0dXJuIGFubm90YXRpb24gb24gdGhlCitmdW5jdGlvbiBpdHNlbGYuICBSZXR1cm4gY29udmVydGVycyBiZWhhdmUgbXVjaCB0aGUgc2FtZSBhcyBwYXJhbWV0ZXIgY29udmVydGVyczsKK3RoZXkgdGFrZSBhcmd1bWVudHMsIHRoZSBhcmd1bWVudHMgYXJlIGFsbCBrZXl3b3JkLW9ubHksIGFuZCBpZiB5b3UncmUgbm90IGNoYW5naW5nCithbnkgb2YgdGhlIGRlZmF1bHQgYXJndW1lbnRzIHlvdSBjYW4gb21pdCB0aGUgcGFyZW50aGVzZXMuCisKKyhJZiB5b3UgdXNlIGJvdGggYGAiYXMiYGAgKmFuZCogYSByZXR1cm4gY29udmVydGVyIGZvciB5b3VyIGZ1bmN0aW9uLAordGhlIGBgImFzImBgIHNob3VsZCBjb21lIGJlZm9yZSB0aGUgcmV0dXJuIGNvbnZlcnRlci4pCisKK1RoZXJlJ3Mgb25lIGFkZGl0aW9uYWwgY29tcGxpY2F0aW9uIHdoZW4gdXNpbmcgcmV0dXJuIGNvbnZlcnRlcnM6IGhvdyBkbyB5b3UKK2luZGljYXRlIGFuIGVycm9yIGhhcyBvY2N1cnJlZD8gIE5vcm1hbGx5LCBhIGZ1bmN0aW9uIHJldHVybnMgYSB2YWxpZCAobm9uLWBgTlVMTGBgKQorcG9pbnRlciBmb3Igc3VjY2VzcywgYW5kIGBgTlVMTGBgIGZvciBmYWlsdXJlLiAgQnV0IGlmIHlvdSB1c2UgYW4gaW50ZWdlciByZXR1cm4gY29udmVydGVyLAorYWxsIGludGVnZXJzIGFyZSB2YWxpZC4gIEhvdyBjYW4gQXJndW1lbnQgQ2xpbmljIGRldGVjdCBhbiBlcnJvcj8gIEl0cyBzb2x1dGlvbjogZWFjaCByZXR1cm4KK2NvbnZlcnRlciBpbXBsaWNpdGx5IGxvb2tzIGZvciBhIHNwZWNpYWwgdmFsdWUgdGhhdCBpbmRpY2F0ZXMgYW4gZXJyb3IuICBJZiB5b3UgcmV0dXJuCit0aGF0IHZhbHVlLCBhbmQgYW4gZXJyb3IgaGFzIGJlZW4gc2V0IChgYFB5RXJyX09jY3VycmVkKClgYCByZXR1cm5zIGEgdHJ1ZQordmFsdWUpLCB0aGVuIHRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIHByb3BhZ2F0ZSB0aGUgZXJyb3IuICBPdGhlcndpc2UgaXQgd2lsbAorZW5jb2RlIHRoZSB2YWx1ZSB5b3UgcmV0dXJuIGxpa2Ugbm9ybWFsLgorCitDdXJyZW50bHkgQXJndW1lbnQgQ2xpbmljIHN1cHBvcnRzIG9ubHkgYSBmZXcgcmV0dXJuIGNvbnZlcnRlcnM6OgorCisgICAgYm9vbAorICAgIGludAorICAgIHVuc2lnbmVkIGludAorICAgIGxvbmcKKyAgICB1bnNpZ25lZCBpbnQKKyAgICBzaXplX3QKKyAgICBQeV9zc2l6ZV90CisgICAgZmxvYXQKKyAgICBkb3VibGUKKyAgICBEZWNvZGVGU0RlZmF1bHQKKworTm9uZSBvZiB0aGVzZSB0YWtlIHBhcmFtZXRlcnMuICBGb3IgdGhlIGZpcnN0IHRocmVlLCByZXR1cm4gLTEgdG8gaW5kaWNhdGUKK2Vycm9yLiAgRm9yIGBgRGVjb2RlRlNEZWZhdWx0YGAsIHRoZSByZXR1cm4gdHlwZSBpcyBgYGNoYXIgKmBgOyByZXR1cm4gYSBOVUxMCitwb2ludGVyIHRvIGluZGljYXRlIGFuIGVycm9yLgorCisoVGhlcmUncyBhbHNvIGFuIGV4cGVyaW1lbnRhbCBgYE5vbmVUeXBlYGAgY29udmVydGVyLCB3aGljaCBsZXRzIHlvdQorcmV0dXJuIGBgUHlfTm9uZWBgIG9uIHN1Y2Nlc3Mgb3IgYGBOVUxMYGAgb24gZmFpbHVyZSwgd2l0aG91dCBoYXZpbmcKK3RvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIGBgUHlfTm9uZWBgLiAgSSdtIG5vdCBzdXJlIGl0IGFkZHMKK2Vub3VnaCBjbGFyaXR5IHRvIGJlIHdvcnRoIHVzaW5nLikKKworVG8gc2VlIGFsbCB0aGUgcmV0dXJuIGNvbnZlcnRlcnMgQXJndW1lbnQgQ2xpbmljIHN1cHBvcnRzLCBhbG9uZyB3aXRoCit0aGVpciBwYXJhbWV0ZXJzIChpZiBhbnkpLAoranVzdCBydW4gYGBUb29scy9jbGluaWMvY2xpbmljLnB5IC0tY29udmVydGVyc2BgIGZvciB0aGUgZnVsbCBsaXN0LgorCisKK0Nsb25pbmcgZXhpc3RpbmcgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiB5b3UgaGF2ZSBhIG51bWJlciBvZiBmdW5jdGlvbnMgdGhhdCBsb29rIHNpbWlsYXIsIHlvdSBtYXkgYmUgYWJsZSB0bwordXNlIENsaW5pYydzICJjbG9uZSIgZmVhdHVyZS4gIFdoZW4geW91IGNsb25lIGFuIGV4aXN0aW5nIGZ1bmN0aW9uLAoreW91IHJldXNlOgorCisqIGl0cyBwYXJhbWV0ZXJzLCBpbmNsdWRpbmcKKworICAqIHRoZWlyIG5hbWVzLAorCisgICogdGhlaXIgY29udmVydGVycywgd2l0aCBhbGwgcGFyYW1ldGVycywKKworICAqIHRoZWlyIGRlZmF1bHQgdmFsdWVzLAorCisgICogdGhlaXIgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmdzLAorCisgICogdGhlaXIgKmtpbmQqICh3aGV0aGVyIHRoZXkncmUgcG9zaXRpb25hbCBvbmx5LAorICAgIHBvc2l0aW9uYWwgb3Iga2V5d29yZCwgb3Iga2V5d29yZCBvbmx5KSwgYW5kCisKKyogaXRzIHJldHVybiBjb252ZXJ0ZXIuCisKK1RoZSBvbmx5IHRoaW5nIG5vdCBjb3BpZWQgZnJvbSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gaXMgaXRzIGRvY3N0cmluZzsKK3RoZSBzeW50YXggYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgbmV3IGRvY3N0cmluZy4KKworSGVyZSdzIHRoZSBzeW50YXggZm9yIGNsb25pbmcgYSBmdW5jdGlvbjo6CisKKyAgICAvKltjbGluaWMgaW5wdXRdCisgICAgbW9kdWxlLmNsYXNzLm5ld19mdW5jdGlvbiBbYXMgY19iYXNlbmFtZV0gPSBtb2R1bGUuY2xhc3MuZXhpc3RpbmdfZnVuY3Rpb24KKworICAgIERvY3N0cmluZyBmb3IgbmV3X2Z1bmN0aW9uIGdvZXMgaGVyZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyhUaGUgZnVuY3Rpb25zIGNhbiBiZSBpbiBkaWZmZXJlbnQgbW9kdWxlcyBvciBjbGFzc2VzLiAgSSB3cm90ZQorYGBtb2R1bGUuY2xhc3NgYCBpbiB0aGUgc2FtcGxlIGp1c3QgdG8gaWxsdXN0cmF0ZSB0aGF0IHlvdSBtdXN0Cit1c2UgdGhlIGZ1bGwgcGF0aCB0byAqYm90aCogZnVuY3Rpb25zLikKKworU29ycnksIHRoZXJlJ3Mgbm8gc3ludGF4IGZvciBwYXJ0aWFsbHktY2xvbmluZyBhIGZ1bmN0aW9uLCBvciBjbG9uaW5nIGEgZnVuY3Rpb24KK3RoZW4gbW9kaWZ5aW5nIGl0LiAgQ2xvbmluZyBpcyBhbiBhbGwtb3Igbm90aGluZyBwcm9wb3NpdGlvbi4KKworQWxzbywgdGhlIGZ1bmN0aW9uIHlvdSBhcmUgY2xvbmluZyBmcm9tIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgZGVmaW5lZAoraW4gdGhlIGN1cnJlbnQgZmlsZS4KKworQ2FsbGluZyBQeXRob24gY29kZQorLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgcmVzdCBvZiB0aGUgYWR2YW5jZWQgdG9waWNzIHJlcXVpcmUgeW91IHRvIHdyaXRlIFB5dGhvbiBjb2RlCit3aGljaCBsaXZlcyBpbnNpZGUgeW91ciBDIGZpbGUgYW5kIG1vZGlmaWVzIEFyZ3VtZW50IENsaW5pYydzCitydW50aW1lIHN0YXRlLiAgVGhpcyBpcyBzaW1wbGU6IHlvdSBzaW1wbHkgZGVmaW5lIGEgUHl0aG9uIGJsb2NrLgorCitBIFB5dGhvbiBibG9jayB1c2VzIGRpZmZlcmVudCBkZWxpbWl0ZXIgbGluZXMgdGhhbiBhbiBBcmd1bWVudAorQ2xpbmljIGZ1bmN0aW9uIGJsb2NrLiAgSXQgbG9va3MgbGlrZSB0aGlzOjoKKworICAgIC8qW3B5dGhvbiBpbnB1dF0KKyAgICAjIHB5dGhvbiBjb2RlIGdvZXMgaGVyZQorICAgIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworQWxsIHRoZSBjb2RlIGluc2lkZSB0aGUgUHl0aG9uIGJsb2NrIGlzIGV4ZWN1dGVkIGF0IHRoZQordGltZSBpdCdzIHBhcnNlZC4gIEFsbCB0ZXh0IHdyaXR0ZW4gdG8gc3Rkb3V0IGluc2lkZSB0aGUgYmxvY2sKK2lzIHJlZGlyZWN0ZWQgaW50byB0aGUgIm91dHB1dCIgYWZ0ZXIgdGhlIGJsb2NrLgorCitBcyBhbiBleGFtcGxlLCBoZXJlJ3MgYSBQeXRob24gYmxvY2sgdGhhdCBhZGRzIGEgc3RhdGljIGludGVnZXIKK3ZhcmlhYmxlIHRvIHRoZSBDIGNvZGU6OgorCisgICAgLypbcHl0aG9uIGlucHV0XQorICAgIHByaW50KCdzdGF0aWMgaW50IF9faWdub3JlZF91bnVzZWRfdmFyaWFibGVfXyA9IDA7JykKKyAgICBbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisgICAgc3RhdGljIGludCBfX2lnbm9yZWRfdW51c2VkX3ZhcmlhYmxlX18gPSAwOworICAgIC8qW3B5dGhvbiBjaGVja3N1bTouLi5dKi8KKworCitVc2luZyBhICJzZWxmIGNvbnZlcnRlciIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBcmd1bWVudCBDbGluaWMgYXV0b21hdGljYWxseSBhZGRzIGEgInNlbGYiIHBhcmFtZXRlciBmb3IgeW91Cit1c2luZyBhIGRlZmF1bHQgY29udmVydGVyLiAgSXQgYXV0b21hdGljYWxseSBzZXRzIHRoZSBgYHR5cGVgYAorb2YgdGhpcyBwYXJhbWV0ZXIgdG8gdGhlICJwb2ludGVyIHRvIGFuIGluc3RhbmNlIiB5b3Ugc3BlY2lmaWVkCit3aGVuIHlvdSBkZWNsYXJlZCB0aGUgdHlwZS4gIEhvd2V2ZXIsIHlvdSBjYW4gb3ZlcnJpZGUKK0FyZ3VtZW50IENsaW5pYydzIGNvbnZlcnRlciBhbmQgc3BlY2lmeSBvbmUgeW91cnNlbGYuCitKdXN0IGFkZCB5b3VyIG93biBgYHNlbGZgYCBwYXJhbWV0ZXIgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciBpbiBhCitibG9jaywgYW5kIGVuc3VyZSB0aGF0IGl0cyBjb252ZXJ0ZXIgaXMgYW4gaW5zdGFuY2Ugb2YKK2Bgc2VsZl9jb252ZXJ0ZXJgYCBvciBhIHN1YmNsYXNzIHRoZXJlb2YuCisKK1doYXQncyB0aGUgcG9pbnQ/ICBUaGlzIGxldHMgeW91IG92ZXJyaWRlIHRoZSB0eXBlIG9mIGBgc2VsZmBgLAorb3IgZ2l2ZSBpdCBhIGRpZmZlcmVudCBkZWZhdWx0IG5hbWUuCisKK0hvdyBkbyB5b3Ugc3BlY2lmeSB0aGUgY3VzdG9tIHR5cGUgeW91IHdhbnQgdG8gY2FzdCBgYHNlbGZgYCB0bz8KK0lmIHlvdSBvbmx5IGhhdmUgb25lIG9yIHR3byBmdW5jdGlvbnMgd2l0aCB0aGUgc2FtZSB0eXBlIGZvciBgYHNlbGZgYCwKK3lvdSBjYW4gZGlyZWN0bHkgdXNlIEFyZ3VtZW50IENsaW5pYydzIGV4aXN0aW5nIGBgc2VsZmBgIGNvbnZlcnRlciwKK3Bhc3NpbmcgaW4gdGhlIHR5cGUgeW91IHdhbnQgdG8gdXNlIGFzIHRoZSBgYHR5cGVgYCBwYXJhbWV0ZXI6OgorCisgICAgLypbY2xpbmljIGlucHV0XQorCisgICAgX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICAgICAgc2VsZjogc2VsZih0eXBlPSJQaWNrbGVyT2JqZWN0ICoiKQorICAgICAgb2JqOiBvYmplY3QKKyAgICAgIC8KKworICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBvcGVuIGZpbGUuCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGhhdmUgYSBsb3Qgb2YgZnVuY3Rpb25zIHRoYXQgd2lsbCB1c2UgdGhlIHNhbWUKK3R5cGUgZm9yIGBgc2VsZmBgLCBpdCdzIGJlc3QgdG8gY3JlYXRlIHlvdXIgb3duIGNvbnZlcnRlciwgc3ViY2xhc3NpbmcKK2Bgc2VsZl9jb252ZXJ0ZXJgYCBidXQgb3ZlcndyaXRpbmcgdGhlIGBgdHlwZWBgIG1lbWJlcjo6CisKKyAgICAvKltweXRob24gaW5wdXRdCisgICAgY2xhc3MgUGlja2xlck9iamVjdF9jb252ZXJ0ZXIoc2VsZl9jb252ZXJ0ZXIpOgorICAgICAgICB0eXBlID0gIlBpY2tsZXJPYmplY3QgKiIKKyAgICBbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyAgICAvKltjbGluaWMgaW5wdXRdCisKKyAgICBfcGlja2xlLlBpY2tsZXIuZHVtcAorCisgICAgICBzZWxmOiBQaWNrbGVyT2JqZWN0CisgICAgICBvYmo6IG9iamVjdAorICAgICAgLworCisgICAgV3JpdGUgYSBwaWNrbGVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gdGhlIG9wZW4gZmlsZS4KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKworCitXcml0aW5nIGEgY3VzdG9tIGNvbnZlcnRlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQXMgd2UgaGludGVkIGF0IGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLi4uIHlvdSBjYW4gd3JpdGUgeW91ciBvd24gY29udmVydGVycyEKK0EgY29udmVydGVyIGlzIHNpbXBseSBhIFB5dGhvbiBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gYGBDQ29udmVydGVyYGAuCitUaGUgbWFpbiBwdXJwb3NlIG9mIGEgY3VzdG9tIGNvbnZlcnRlciBpcyBpZiB5b3UgaGF2ZSBhIHBhcmFtZXRlciB1c2luZwordGhlIGBgTyZgYCBmb3JtYXQgdW5pdC0tcGFyc2luZyB0aGlzIHBhcmFtZXRlciBtZWFucyBjYWxsaW5nCithIDpjOmZ1bmM6YFB5QXJnX1BhcnNlVHVwbGVgICJjb252ZXJ0ZXIgZnVuY3Rpb24iLgorCitZb3VyIGNvbnZlcnRlciBjbGFzcyBzaG91bGQgYmUgbmFtZWQgYGAqc29tZXRoaW5nKl9jb252ZXJ0ZXJgYC4KK0lmIHRoZSBuYW1lIGZvbGxvd3MgdGhpcyBjb252ZW50aW9uLCB0aGVuIHlvdXIgY29udmVydGVyIGNsYXNzCit3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJlZCB3aXRoIEFyZ3VtZW50IENsaW5pYzsgaXRzIG5hbWUKK3dpbGwgYmUgdGhlIG5hbWUgb2YgeW91ciBjbGFzcyB3aXRoIHRoZSBgYF9jb252ZXJ0ZXJgYCBzdWZmaXgKK3N0cmlwcGVkIG9mZi4gIChUaGlzIGlzIGFjY29tcGxpc2hlZCB3aXRoIGEgbWV0YWNsYXNzLikKKworWW91IHNob3VsZG4ndCBzdWJjbGFzcyBgYENDb252ZXJ0ZXIuX19pbml0X19gYC4gIEluc3RlYWQsIHlvdSBzaG91bGQKK3dyaXRlIGEgYGBjb252ZXJ0ZXJfaW5pdCgpYGAgZnVuY3Rpb24uICBgYGNvbnZlcnRlcl9pbml0KClgYAorYWx3YXlzIGFjY2VwdHMgYSBgYHNlbGZgYCBwYXJhbWV0ZXI7IGFmdGVyIHRoYXQsIGFsbCBhZGRpdGlvbmFsCitwYXJhbWV0ZXJzICptdXN0KiBiZSBrZXl3b3JkLW9ubHkuICBBbnkgYXJndW1lbnRzIHBhc3NlZCBpbiB0bwordGhlIGNvbnZlcnRlciBpbiBBcmd1bWVudCBDbGluaWMgd2lsbCBiZSBwYXNzZWQgYWxvbmcgdG8geW91cgorYGBjb252ZXJ0ZXJfaW5pdCgpYGAuCisKK1RoZXJlIGFyZSBzb21lIGFkZGl0aW9uYWwgbWVtYmVycyBvZiBgYENDb252ZXJ0ZXJgYCB5b3UgbWF5IHdpc2gKK3RvIHNwZWNpZnkgaW4geW91ciBzdWJjbGFzcy4gIEhlcmUncyB0aGUgY3VycmVudCBsaXN0OgorCitgYHR5cGVgYAorICAgIFRoZSBDIHR5cGUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgIGBgdHlwZWBgIHNob3VsZCBiZSBhIFB5dGhvbiBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdHlwZSwgZS5nLiBgYGludGBgLgorICAgIElmIHRoaXMgaXMgYSBwb2ludGVyIHR5cGUsIHRoZSB0eXBlIHN0cmluZyBzaG91bGQgZW5kIHdpdGggYGAnIConYGAuCisKK2BgZGVmYXVsdGBgCisgICAgVGhlIFB5dGhvbiBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIHBhcmFtZXRlciwgYXMgYSBQeXRob24gdmFsdWUuCisgICAgT3IgdGhlIG1hZ2ljIHZhbHVlIGBgdW5zcGVjaWZpZWRgYCBpZiB0aGVyZSBpcyBubyBkZWZhdWx0LgorCitgYHB5X2RlZmF1bHRgYAorICAgIGBgZGVmYXVsdGBgIGFzIGl0IHNob3VsZCBhcHBlYXIgaW4gUHl0aG9uIGNvZGUsCisgICAgYXMgYSBzdHJpbmcuCisgICAgT3IgYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKworYGBjX2RlZmF1bHRgYAorICAgIGBgZGVmYXVsdGBgIGFzIGl0IHNob3VsZCBhcHBlYXIgaW4gQyBjb2RlLAorICAgIGFzIGEgc3RyaW5nLgorICAgIE9yIGBgTm9uZWBgIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisKK2BgY19pZ25vcmVkX2RlZmF1bHRgYAorICAgIFRoZSBkZWZhdWx0IHZhbHVlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgQyB2YXJpYWJsZSB3aGVuCisgICAgdGhlcmUgaXMgbm8gZGVmYXVsdCwgYnV0IG5vdCBzcGVjaWZ5aW5nIGEgZGVmYXVsdCBtYXkKKyAgICByZXN1bHQgaW4gYW4gInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiIHdhcm5pbmcuICBUaGlzIGNhbgorICAgIGVhc2lseSBoYXBwZW4gd2hlbiB1c2luZyBvcHRpb24gZ3JvdXBzLS1hbHRob3VnaAorICAgIHByb3Blcmx5LXdyaXR0ZW4gY29kZSB3aWxsIG5ldmVyIGFjdHVhbGx5IHVzZSB0aGlzIHZhbHVlLAorICAgIHRoZSB2YXJpYWJsZSBkb2VzIGdldCBwYXNzZWQgaW4gdG8gdGhlIGltcGwsIGFuZCB0aGUKKyAgICBDIGNvbXBpbGVyIHdpbGwgY29tcGxhaW4gYWJvdXQgdGhlICJ1c2UiIG9mIHRoZQorICAgIHVuaW5pdGlhbGl6ZWQgdmFsdWUuICBUaGlzIHZhbHVlIHNob3VsZCBhbHdheXMgYmUgYQorICAgIG5vbi1lbXB0eSBzdHJpbmcuCisKK2BgY29udmVydGVyYGAKKyAgICBUaGUgbmFtZSBvZiB0aGUgQyBjb252ZXJ0ZXIgZnVuY3Rpb24sIGFzIGEgc3RyaW5nLgorCitgYGltcGxfYnlfcmVmZXJlbmNlYGAKKyAgICBBIGJvb2xlYW4gdmFsdWUuICBJZiB0cnVlLAorICAgIEFyZ3VtZW50IENsaW5pYyB3aWxsIGFkZCBhIGBgJmBgIGluIGZyb250IG9mIHRoZSBuYW1lIG9mCisgICAgdGhlIHZhcmlhYmxlIHdoZW4gcGFzc2luZyBpdCBpbnRvIHRoZSBpbXBsIGZ1bmN0aW9uLgorCitgYHBhcnNlX2J5X3JlZmVyZW5jZWBgCisgICAgQSBib29sZWFuIHZhbHVlLiAgSWYgdHJ1ZSwKKyAgICBBcmd1bWVudCBDbGluaWMgd2lsbCBhZGQgYSBgYCZgYCBpbiBmcm9udCBvZiB0aGUgbmFtZSBvZgorICAgIHRoZSB2YXJpYWJsZSB3aGVuIHBhc3NpbmcgaXQgaW50byA6YzpmdW5jOmBQeUFyZ19QYXJzZVR1cGxlYC4KKworCitIZXJlJ3MgdGhlIHNpbXBsZXN0IGV4YW1wbGUgb2YgYSBjdXN0b20gY29udmVydGVyLCBmcm9tIGBgTW9kdWxlcy96bGlibW9kdWxlLmNgYDo6CisKKyAgICAvKltweXRob24gaW5wdXRdCisKKyAgICBjbGFzcyB1aW50X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICAgICAgdHlwZSA9ICd1bnNpZ25lZCBpbnQnCisgICAgICAgIGNvbnZlcnRlciA9ICd1aW50X2NvbnZlcnRlcicKKworICAgIFtweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKyAgICAvKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBjaGVja3N1bT1kYTM5YTNlZTVlNmI0YjBkMzI1NWJmZWY5NTYwMTg5MGFmZDgwNzA5XSovCisKK1RoaXMgYmxvY2sgYWRkcyBhIGNvbnZlcnRlciB0byBBcmd1bWVudCBDbGluaWMgbmFtZWQgYGB1aW50YGAuICBQYXJhbWV0ZXJzCitkZWNsYXJlZCBhcyBgYHVpbnRgYCB3aWxsIGJlIGRlY2xhcmVkIGFzIHR5cGUgYGB1bnNpZ25lZCBpbnRgYCwgYW5kIHdpbGwKK2JlIHBhcnNlZCBieSB0aGUgYGAnTyYnYGAgZm9ybWF0IHVuaXQsIHdoaWNoIHdpbGwgY2FsbCB0aGUgYGB1aW50X2NvbnZlcnRlcmBgCitjb252ZXJ0ZXIgZnVuY3Rpb24uCitgYHVpbnRgYCB2YXJpYWJsZXMgYXV0b21hdGljYWxseSBzdXBwb3J0IGRlZmF1bHQgdmFsdWVzLgorCitNb3JlIHNvcGhpc3RpY2F0ZWQgY3VzdG9tIGNvbnZlcnRlcnMgY2FuIGluc2VydCBjdXN0b20gQyBjb2RlIHRvCitoYW5kbGUgaW5pdGlhbGl6YXRpb24gYW5kIGNsZWFudXAuCitZb3UgY2FuIHNlZSBtb3JlIGV4YW1wbGVzIG9mIGN1c3RvbSBjb252ZXJ0ZXJzIGluIHRoZSBDUHl0aG9uCitzb3VyY2UgdHJlZTsgZ3JlcCB0aGUgQyBmaWxlcyBmb3IgdGhlIHN0cmluZyBgYENDb252ZXJ0ZXJgYC4KKworV3JpdGluZyBhIGN1c3RvbSByZXR1cm4gY29udmVydGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV3JpdGluZyBhIGN1c3RvbSByZXR1cm4gY29udmVydGVyIGlzIG11Y2ggbGlrZSB3cml0aW5nCithIGN1c3RvbSBjb252ZXJ0ZXIuICBFeGNlcHQgaXQncyBzb21ld2hhdCBzaW1wbGVyLCBiZWNhdXNlIHJldHVybgorY29udmVydGVycyBhcmUgdGhlbXNlbHZlcyBtdWNoIHNpbXBsZXIuCisKK1JldHVybiBjb252ZXJ0ZXJzIG11c3Qgc3ViY2xhc3MgYGBDUmV0dXJuQ29udmVydGVyYGAuCitUaGVyZSBhcmUgbm8gZXhhbXBsZXMgeWV0IG9mIGN1c3RvbSByZXR1cm4gY29udmVydGVycywKK2JlY2F1c2UgdGhleSBhcmUgbm90IHdpZGVseSB1c2VkIHlldC4gIElmIHlvdSB3aXNoIHRvCit3cml0ZSB5b3VyIG93biByZXR1cm4gY29udmVydGVyLCBwbGVhc2UgcmVhZCBgYFRvb2xzL2NsaW5pYy9jbGluaWMucHlgYCwKK3NwZWNpZmljYWxseSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGBDUmV0dXJuQ29udmVydGVyYGAgYW5kCithbGwgaXRzIHN1YmNsYXNzZXMuCisKK01FVEhfTyBhbmQgTUVUSF9OT0FSR1MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gY29udmVydCBhIGZ1bmN0aW9uIHVzaW5nIGBgTUVUSF9PYGAsIG1ha2Ugc3VyZSB0aGUgZnVuY3Rpb24ncworc2luZ2xlIGFyZ3VtZW50IGlzIHVzaW5nIHRoZSBgYG9iamVjdGBgIGNvbnZlcnRlciwgYW5kIG1hcmsgdGhlCithcmd1bWVudHMgYXMgcG9zaXRpb25hbC1vbmx5OjoKKworICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBtZXRoX29fc2FtcGxlCisKKyAgICAgICAgIGFyZ3VtZW50OiBvYmplY3QKKyAgICAgICAgIC8KKyAgICBbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKworVG8gY29udmVydCBhIGZ1bmN0aW9uIHVzaW5nIGBgTUVUSF9OT0FSR1NgYCwganVzdCBkb24ndCBzcGVjaWZ5CithbnkgYXJndW1lbnRzLgorCitZb3UgY2FuIHN0aWxsIHVzZSBhIHNlbGYgY29udmVydGVyLCBhIHJldHVybiBjb252ZXJ0ZXIsIGFuZCBzcGVjaWZ5CithIGBgdHlwZWBgIGFyZ3VtZW50IHRvIHRoZSBvYmplY3QgY29udmVydGVyIGZvciBgYE1FVEhfT2BgLgorCit0cF9uZXcgYW5kIHRwX2luaXQgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1lvdSBjYW4gY29udmVydCBgYHRwX25ld2BgIGFuZCBgYHRwX2luaXRgYCBmdW5jdGlvbnMuICBKdXN0IG5hbWUKK3RoZW0gYGBfX25ld19fYGAgb3IgYGBfX2luaXRfX2BgIGFzIGFwcHJvcHJpYXRlLiAgTm90ZXM6CisKKyogVGhlIGZ1bmN0aW9uIG5hbWUgZ2VuZXJhdGVkIGZvciBgYF9fbmV3X19gYCBkb2Vzbid0IGVuZCBpbiBgYF9fbmV3X19gYAorICBsaWtlIGl0IHdvdWxkIGJ5IGRlZmF1bHQuICBJdCdzIGp1c3QgdGhlIG5hbWUgb2YgdGhlIGNsYXNzLCBjb252ZXJ0ZWQKKyAgaW50byBhIHZhbGlkIEMgaWRlbnRpZmllci4KKworKiBObyBgYFB5TWV0aG9kRGVmYGAgYGAjZGVmaW5lYGAgaXMgZ2VuZXJhdGVkIGZvciB0aGVzZSBmdW5jdGlvbnMuCisKKyogYGBfX2luaXRfX2BgIGZ1bmN0aW9ucyByZXR1cm4gYGBpbnRgYCwgbm90IGBgUHlPYmplY3QgKmBgLgorCisqIFVzZSB0aGUgZG9jc3RyaW5nIGFzIHRoZSBjbGFzcyBkb2NzdHJpbmcuCisKKyogQWx0aG91Z2ggYGBfX25ld19fYGAgYW5kIGBgX19pbml0X19gYCBmdW5jdGlvbnMgbXVzdCBhbHdheXMKKyAgYWNjZXB0IGJvdGggdGhlIGBgYXJnc2BgIGFuZCBgYGt3YXJnc2BgIG9iamVjdHMsIHdoZW4gY29udmVydGluZworICB5b3UgbWF5IHNwZWNpZnkgYW55IHNpZ25hdHVyZSBmb3IgdGhlc2UgZnVuY3Rpb25zIHRoYXQgeW91IGxpa2UuCisgIChJZiB5b3VyIGZ1bmN0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBrZXl3b3JkcywgdGhlIHBhcnNpbmcgZnVuY3Rpb24KKyAgZ2VuZXJhdGVkIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGl0IHJlY2VpdmVzIGFueS4pCisKK0NoYW5naW5nIGFuZCByZWRpcmVjdGluZyBDbGluaWMncyBvdXRwdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgY2FuIGJlIGluY29udmVuaWVudCB0byBoYXZlIENsaW5pYydzIG91dHB1dCBpbnRlcnNwZXJzZWQgd2l0aAoreW91ciBjb252ZW50aW9uYWwgaGFuZC1lZGl0ZWQgQyBjb2RlLiAgTHVja2lseSwgQ2xpbmljIGlzIGNvbmZpZ3VyYWJsZToKK3lvdSBjYW4gYnVmZmVyIHVwIGl0cyBvdXRwdXQgZm9yIHByaW50aW5nIGxhdGVyIChvciBlYXJsaWVyISksIG9yIHdyaXRlCitpdHMgb3V0cHV0IHRvIGEgc2VwYXJhdGUgZmlsZS4gIFlvdSBjYW4gYWxzbyBhZGQgYSBwcmVmaXggb3Igc3VmZml4IHRvCitldmVyeSBsaW5lIG9mIENsaW5pYydzIGdlbmVyYXRlZCBvdXRwdXQuCisKK1doaWxlIGNoYW5naW5nIENsaW5pYydzIG91dHB1dCBpbiB0aGlzIG1hbm5lciBjYW4gYmUgYSBib29uIHRvIHJlYWRhYmlsaXR5LAoraXQgbWF5IHJlc3VsdCBpbiBDbGluaWMgY29kZSB1c2luZyB0eXBlcyBiZWZvcmUgdGhleSBhcmUgZGVmaW5lZCwgb3IKK3lvdXIgY29kZSBhdHRlbXB0aW5nIHRvIHVzZSBDbGluaWMtZ2VuZXJhdGVkIGNvZGUgYmVmaXJlIGl0IGlzIGRlZmluZWQuCitUaGVzZSBwcm9ibGVtcyBjYW4gYmUgZWFzaWx5IHNvbHZlZCBieSByZWFycmFuZ2luZyB0aGUgZGVjbGFyYXRpb25zIGluIHlvdXIgZmlsZSwKK29yIG1vdmluZyB3aGVyZSBDbGluaWMncyBnZW5lcmF0ZWQgY29kZSBnb2VzLiAgKFRoaXMgaXMgd2h5IHRoZSBkZWZhdWx0IGJlaGF2aW9yCitvZiBDbGluaWMgaXMgdG8gb3V0cHV0IGV2ZXJ5dGhpbmcgaW50byB0aGUgY3VycmVudCBibG9jazsgd2hpbGUgbWFueSBwZW9wbGUKK2NvbnNpZGVyIHRoaXMgaGFtcGVycyByZWFkYWJpbGl0eSwgaXQgd2lsbCBuZXZlciByZXF1aXJlIHJlYXJyYW5naW5nIHlvdXIKK2NvZGUgdG8gZml4IGRlZmluaXRpb24tYmVmb3JlLXVzZSBwcm9ibGVtcy4pCisKK0xldCdzIHN0YXJ0IHdpdGggZGVmaW5pbmcgc29tZSB0ZXJtaW5vbG9neToKKworKmZpZWxkKgorICBBIGZpZWxkLCBpbiB0aGlzIGNvbnRleHQsIGlzIGEgc3Vic2VjdGlvbiBvZiBDbGluaWMncyBvdXRwdXQuCisgIEZvciBleGFtcGxlLCB0aGUgYGAjZGVmaW5lYGAgZm9yIHRoZSBgYFB5TWV0aG9kRGVmYGAgc3RydWN0dXJlCisgIGlzIGEgZmllbGQsIGNhbGxlZCBgYG1ldGhvZGRlZl9kZWZpbmVgYC4gIENsaW5pYyBoYXMgc2V2ZW4KKyAgZGlmZmVyZW50IGZpZWxkcyBpdCBjYW4gb3V0cHV0IHBlciBmdW5jdGlvbiBkZWZpbml0aW9uOjoKKworICAgICAgZG9jc3RyaW5nX3Byb3RvdHlwZQorICAgICAgZG9jc3RyaW5nX2RlZmluaXRpb24KKyAgICAgIG1ldGhvZGRlZl9kZWZpbmUKKyAgICAgIGltcGxfcHJvdG90eXBlCisgICAgICBwYXJzZXJfcHJvdG90eXBlCisgICAgICBwYXJzZXJfZGVmaW5pdGlvbgorICAgICAgaW1wbF9kZWZpbml0aW9uCisKKyAgQWxsIHRoZSBuYW1lcyBhcmUgb2YgdGhlIGZvcm0gYGAiPGE+XzxiPiJgYCwKKyAgd2hlcmUgYGAiPGE+ImBgIGlzIHRoZSBzZW1hbnRpYyBvYmplY3QgcmVwcmVzZW50ZWQgKHRoZSBwYXJzaW5nIGZ1bmN0aW9uLAorICB0aGUgaW1wbCBmdW5jdGlvbiwgdGhlIGRvY3N0cmluZywgb3IgdGhlIG1ldGhvZGRlZiBzdHJ1Y3R1cmUpIGFuZCBgYCI8Yj4iYGAKKyAgcmVwcmVzZW50cyB3aGF0IGtpbmQgb2Ygc3RhdGVtZW50IHRoZSBmaWVsZCBpcy4gIEZpZWxkIG5hbWVzIHRoYXQgZW5kIGluCisgIGBgIl9wcm90b3R5cGUiYGAKKyAgcmVwcmVzZW50IGZvcndhcmQgZGVjbGFyYXRpb25zIG9mIHRoYXQgdGhpbmcsIHdpdGhvdXQgdGhlIGFjdHVhbCBib2R5L2RhdGEKKyAgb2YgdGhlIHRoaW5nOyBmaWVsZCBuYW1lcyB0aGF0IGVuZCBpbiBgYCJfZGVmaW5pdGlvbiJgYCByZXByZXNlbnQgdGhlIGFjdHVhbAorICBkZWZpbml0aW9uIG9mIHRoZSB0aGluZywgd2l0aCB0aGUgYm9keS9kYXRhIG9mIHRoZSB0aGluZy4gIChgYCJtZXRob2RkZWYiYGAKKyAgaXMgc3BlY2lhbCwgaXQncyB0aGUgb25seSBvbmUgdGhhdCBlbmRzIHdpdGggYGAiX2RlZmluZSJgYCwgcmVwcmVzZW50aW5nIHRoYXQKKyAgaXQncyBhIHByZXByb2Nlc3NvciAjZGVmaW5lLikKKworKmRlc3RpbmF0aW9uKgorICBBIGRlc3RpbmF0aW9uIGlzIGEgcGxhY2UgQ2xpbmljIGNhbiB3cml0ZSBvdXRwdXQgdG8uICBUaGVyZSBhcmUKKyAgZml2ZSBidWlsdC1pbiBkZXN0aW5hdGlvbnM6CisKKyAgYGBibG9ja2BgCisgICAgVGhlIGRlZmF1bHQgZGVzdGluYXRpb246IHByaW50ZWQgaW4gdGhlIG91dHB1dCBzZWN0aW9uIG9mCisgICAgdGhlIGN1cnJlbnQgQ2xpbmljIGJsb2NrLgorCisgIGBgYnVmZmVyYGAKKyAgICBBIHRleHQgYnVmZmVyIHdoZXJlIHlvdSBjYW4gc2F2ZSB0ZXh0IGZvciBsYXRlci4gIFRleHQgc2VudAorICAgIGhlcmUgaXMgYXBwZW5kZWQgdG8gdGhlIGVuZCBvZiBhbnkgZXhzaXRpbmcgdGV4dC4gIEl0J3MgYW4KKyAgICBlcnJvciB0byBoYXZlIGFueSB0ZXh0IGxlZnQgaW4gdGhlIGJ1ZmZlciB3aGVuIENsaW5pYyBmaW5pc2hlcworICAgIHByb2Nlc3NpbmcgYSBmaWxlLgorCisgIGBgZmlsZWBgCisgICAgQSBzZXBhcmF0ZSAiY2xpbmljIGZpbGUiIHRoYXQgd2lsbCBiZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgQ2xpbmljLgorICAgIFRoZSBmaWxlbmFtZSBjaG9zZW4gZm9yIHRoZSBmaWxlIGlzIGBge2Jhc2VuYW1lfS5jbGluaWN7ZXh0ZW5zaW9ufWBgLAorICAgIHdoZXJlIGBgYmFzZW5hbWVgYCBhbmQgYGBleHRlbnNpb25gYCB3ZXJlIGFzc2lnbmVkIHRoZSBvdXRwdXQKKyAgICBmcm9tIGBgb3MucGF0aC5zcGxpdGV4dCgpYGAgcnVuIG9uIHRoZSBjdXJyZW50IGZpbGUuICAoRXhhbXBsZToKKyAgICB0aGUgYGBmaWxlYGAgZGVzdGluYXRpb24gZm9yIGBgX3BpY2tsZS5jYGAgd291bGQgYmUgd3JpdHRlbiB0bworICAgIGBgX3BpY2tsZS5jbGluaWMuY2BgLikKKworICAgICoqSW1wb3J0YW50OiBXaGVuIHVzaW5nIGEqKiBgYGZpbGVgYCAqKmRlc3RpbmF0aW9uLCB5b3UqKgorICAgICptdXN0IGNoZWNrIGluKiAqKnRoZSBnZW5lcmF0ZWQgZmlsZSEqKgorCisgIGBgdHdvLXBhc3NgYAorICAgIEEgYnVmZmVyIGxpa2UgYGBidWZmZXJgYC4gIEhvd2V2ZXIsIGEgdHdvLXBhc3MgYnVmZmVyIGNhbiBvbmx5CisgICAgYmUgd3JpdHRlbiBvbmNlLCBhbmQgaXQgcHJpbnRzIG91dCBhbGwgdGV4dCBzZW50IHRvIGl0IGR1cmluZworICAgIGFsbCBvZiBwcm9jZXNzaW5nLCBldmVuIGZyb20gQ2xpbmljIGJsb2NrcyAqYWZ0ZXIqIHRoZQorCisgIGBgc3VwcHJlc3NgYAorICAgIFRoZSB0ZXh0IGlzIHN1cHByZXNzZWQtLXRocm93biBhd2F5LgorCisKK0NsaW5pYyBkZWZpbmVzIGZpdmUgbmV3IGRpcmVjdGl2ZXMgdGhhdCBsZXQgeW91IHJlY29uZmlndXJlIGl0cyBvdXRwdXQuCisKK1RoZSBmaXJzdCBuZXcgZGlyZWN0aXZlIGlzIGBgZHVtcGBgOjoKKworICAgZHVtcCA8ZGVzdGluYXRpb24+CisKK1RoaXMgZHVtcHMgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIG5hbWVkIGRlc3RpbmF0aW9uIGludG8gdGhlIG91dHB1dCBvZgordGhlIGN1cnJlbnQgYmxvY2ssIGFuZCBlbXB0aWVzIGl0LiAgVGhpcyBvbmx5IHdvcmtzIHdpdGggYGBidWZmZXJgYCBhbmQKK2BgdHdvLXBhc3NgYCBkZXN0aW5hdGlvbnMuCisKK1RoZSBzZWNvbmQgbmV3IGRpcmVjdGl2ZSBpcyBgYG91dHB1dGBgLiAgVGhlIG1vc3QgYmFzaWMgZm9ybSBvZiBgYG91dHB1dGBgCitpcyBsaWtlIHRoaXM6OgorCisgICAgb3V0cHV0IDxmaWVsZD4gPGRlc3RpbmF0aW9uPgorCitUaGlzIHRlbGxzIENsaW5pYyB0byBvdXRwdXQgKmZpZWxkKiB0byAqZGVzdGluYXRpb24qLiAgYGBvdXRwdXRgYCBhbHNvCitzdXBwb3J0cyBhIHNwZWNpYWwgbWV0YS1kZXN0aW5hdGlvbiwgY2FsbGVkIGBgZXZlcnl0aGluZ2BgLCB3aGljaCB0ZWxscworQ2xpbmljIHRvIG91dHB1dCAqYWxsKiBmaWVsZHMgdG8gdGhhdCAqZGVzdGluYXRpb24qLgorCitgYG91dHB1dGBgIGhhcyBhIG51bWJlciBvZiBvdGhlciBmdW5jdGlvbnM6OgorCisgICAgb3V0cHV0IHB1c2gKKyAgICBvdXRwdXQgcG9wCisgICAgb3V0cHV0IHByZXNldCA8cHJlc2V0PgorCisKK2Bgb3V0cHV0IHB1c2hgYCBhbmQgYGBvdXRwdXQgcG9wYGAgYWxsb3cgeW91IHRvIHB1c2ggYW5kIHBvcAorY29uZmlndXJhdGlvbnMgb24gYW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBzdGFjaywgc28gdGhhdCB5b3UKK2NhbiB0ZW1wb3JhcmlseSBtb2RpZnkgdGhlIG91dHB1dCBjb25maWd1cmF0aW9uLCB0aGVuIGVhc2lseSByZXN0b3JlCit0aGUgcHJldmlvdXMgY29uZmlndXJhdGlvbi4gIFNpbXBseSBwdXNoIGJlZm9yZSB5b3VyIGNoYW5nZSB0byBzYXZlCit0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLCB0aGVuIHBvcCB3aGVuIHlvdSB3aXNoIHRvIHJlc3RvcmUgdGhlCitwcmV2aW91cyBjb25maWd1cmF0aW9uLgorCitgYG91dHB1dCBwcmVzZXRgYCBzZXRzIENsaW5pYydzIG91dHB1dCB0byBvbmUgb2Ygc2V2ZXJhbCBidWlsdC1pbgorcHJlc2V0IGNvbmZpZ3VyYXRpb25zLCBhcyBmb2xsb3dzOgorCisgIGBgYmxvY2tgYAorICAgIENsaW5pYydzIG9yaWdpbmFsIHN0YXJ0aW5nIGNvbmZpZ3VyYXRpb24uICBXcml0ZXMgZXZlcnl0aGluZworICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBpbnB1dCBibG9jay4KKworICAgIFN1cHByZXNzIHRoZSBgYHBhcnNlcl9wcm90b3R5cGVgYAorICAgIGFuZCBgYGRvY3N0cmluZ19wcm90b3R5cGVgYCwgd3JpdGUgZXZlcnl0aGluZyBlbHNlIHRvIGBgYmxvY2tgYC4KKworICBgYGZpbGVgYAorICAgIERlc2lnbmVkIHRvIHdyaXRlIGV2ZXJ5dGhpbmcgdG8gdGhlICJjbGluaWMgZmlsZSIgdGhhdCBpdCBjYW4uCisgICAgWW91IHRoZW4gYGAjaW5jbHVkZWBgIHRoaXMgZmlsZSBuZWFyIHRoZSB0b3Agb2YgeW91ciBmaWxlLgorICAgIFlvdSBtYXkgbmVlZCB0byByZWFycmFuZ2UgeW91ciBmaWxlIHRvIG1ha2UgdGhpcyB3b3JrLCB0aG91Z2gKKyAgICB1c3VhbGx5IHRoaXMganVzdCBtZWFucyBjcmVhdGluZyBmb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgdmFyaW91cworICAgIGBgdHlwZWRlZmBgIGFuZCBgYFB5VHlwZU9iamVjdGBgIGRlZmluaXRpb25zLgorCisgICAgU3VwcHJlc3MgdGhlIGBgcGFyc2VyX3Byb3RvdHlwZWBgCisgICAgYW5kIGBgZG9jc3RyaW5nX3Byb3RvdHlwZWBgLCB3cml0ZSB0aGUgYGBpbXBsX2RlZmluaXRpb25gYCB0bworICAgIGBgYmxvY2tgYCwgYW5kIHdyaXRlIGV2ZXJ5dGhpbmcgZWxzZSB0byBgYGZpbGVgYC4KKworICAgIFRoZSBkZWZhdWx0IGZpbGVuYW1lIGlzIGBgIntkaXJuYW1lfS9jbGluaWMve2Jhc2VuYW1lfS5oImBgLgorCisgIGBgYnVmZmVyYGAKKyAgICBTYXZlIHVwIGFsbCBtb3N0IG9mIHRoZSBvdXRwdXQgZnJvbSBDbGluaWMsIHRvIGJlIHdyaXR0ZW4gaW50bworICAgIHlvdXIgZmlsZSBuZWFyIHRoZSBlbmQuICBGb3IgUHl0aG9uIGZpbGVzIGltcGxlbWVudGluZyBtb2R1bGVzCisgICAgb3IgYnVpbHRpbiB0eXBlcywgaXQncyByZWNvbW1lbmRlZCB0aGF0IHlvdSBkdW1wIHRoZSBidWZmZXIKKyAgICBqdXN0IGFib3ZlIHRoZSBzdGF0aWMgc3RydWN0dXJlcyBmb3IgeW91ciBtb2R1bGUgb3IKKyAgICBidWlsdGluIHR5cGU7IHRoZXNlIGFyZSBub3JtYWxseSB2ZXJ5IG5lYXIgdGhlIGVuZC4gIFVzaW5nCisgICAgYGBidWZmZXJgYCBtYXkgcmVxdWlyZSBldmVuIG1vcmUgZWRpdGluZyB0aGFuIGBgZmlsZWBgLCBpZgorICAgIHlvdXIgZmlsZSBoYXMgc3RhdGljIGBgUHlNZXRob2REZWZgYCBhcnJheXMgZGVmaW5lZCBpbiB0aGUKKyAgICBtaWRkbGUgb2YgdGhlIGZpbGUuCisKKyAgICBTdXBwcmVzcyB0aGUgYGBwYXJzZXJfcHJvdG90eXBlYGAsIGBgaW1wbF9wcm90b3R5cGVgYCwKKyAgICBhbmQgYGBkb2NzdHJpbmdfcHJvdG90eXBlYGAsIHdyaXRlIHRoZSBgYGltcGxfZGVmaW5pdGlvbmBgIHRvCisgICAgYGBibG9ja2BgLCBhbmQgd3JpdGUgZXZlcnl0aGluZyBlbHNlIHRvIGBgZmlsZWBgLgorCisgIGBgdHdvLXBhc3NgYAorICAgIFNpbWlsYXIgdG8gdGhlIGBgYnVmZmVyYGAgcHJlc2V0LCBidXQgd3JpdGVzIGZvcndhcmQgZGVjbGFyYXRpb25zIHRvCisgICAgdGhlIGBgdHdvLXBhc3NgYCBidWZmZXIsIGFuZCBkZWZpbml0aW9ucyB0byB0aGUgYGBidWZmZXJgYC4KKyAgICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIGBgYnVmZmVyYGAgcHJlc2V0LCBidXQgbWF5IHJlcXVpcmUKKyAgICBsZXNzIGVkaXRpbmcgdGhhbiBgYGJ1ZmZlcmBgLiAgRHVtcCB0aGUgYGB0d28tcGFzc2BgIGJ1ZmZlcgorICAgIG5lYXIgdGhlIHRvcCBvZiB5b3VyIGZpbGUsIGFuZCBkdW1wIHRoZSBgYGJ1ZmZlcmBgIG5lYXIKKyAgICB0aGUgZW5kIGp1c3QgbGlrZSB5b3Ugd291bGQgd2hlbiB1c2luZyB0aGUgYGBidWZmZXJgYCBwcmVzZXQuCisKKyAgICBTdXBwcmVzc2VzIHRoZSBgYGltcGxfcHJvdG90eXBlYGAsIHdyaXRlIHRoZSBgYGltcGxfZGVmaW5pdGlvbmBgCisgICAgdG8gYGBibG9ja2BgLCB3cml0ZSBgYGRvY3N0cmluZ19wcm90b3R5cGVgYCwgYGBtZXRob2RkZWZfZGVmaW5lYGAsCisgICAgYW5kIGBgcGFyc2VyX3Byb3RvdHlwZWBgIHRvIGBgdHdvLXBhc3NgYCwgd3JpdGUgZXZlcnl0aGluZyBlbHNlCisgICAgdG8gYGBidWZmZXJgYC4KKworICBgYHBhcnRpYWwtYnVmZmVyYGAKKyAgICBTaW1pbGFyIHRvIHRoZSBgYGJ1ZmZlcmBgIHByZXNldCwgYnV0IHdyaXRlcyBtb3JlIHRoaW5ncyB0byBgYGJsb2NrYGAsCisgICAgb25seSB3cml0aW5nIHRoZSByZWFsbHkgYmlnIGNodW5rcyBvZiBnZW5lcmF0ZWQgY29kZSB0byBgYGJ1ZmZlcmBgLgorICAgIFRoaXMgYXZvaWRzIHRoZSBkZWZpbml0aW9uLWJlZm9yZS11c2UgcHJvYmxlbSBvZiBgYGJ1ZmZlcmBgIGNvbXBsZXRlbHksCisgICAgYXQgdGhlIHNtYWxsIGNvc3Qgb2YgaGF2aW5nIHNsaWdodGx5IG1vcmUgc3R1ZmYgaW4gdGhlIGJsb2NrJ3Mgb3V0cHV0LgorICAgIER1bXAgdGhlIGBgYnVmZmVyYGAgbmVhciB0aGUgZW5kLCBqdXN0IGxpa2UgeW91IHdvdWxkIHdoZW4gdXNpbmcKKyAgICB0aGUgYGBidWZmZXJgYCBwcmVzZXQuCisKKyAgICBTdXBwcmVzc2VzIHRoZSBgYGltcGxfcHJvdG90eXBlYGAsIHdyaXRlIHRoZSBgYGRvY3N0cmluZ19kZWZpbml0aW9uYGAKKyAgICBhbmQgYGBwYXJzZXJfZGVmaW5pdGlvbmBgIHRvIGBgYnVmZmVyYGAsIHdyaXRlIGV2ZXJ5dGhpbmcgZWxzZSB0byBgYGJsb2NrYGAuCisKK1RoZSB0aGlyZCBuZXcgZGlyZWN0aXZlIGlzIGBgZGVzdGluYXRpb25gYDo6CisKKyAgICBkZXN0aW5hdGlvbiA8bmFtZT4gPGNvbW1hbmQ+IFsuLi5dCisKK1RoaXMgcGVyZm9ybXMgYW4gb3BlcmF0aW9uIG9uIHRoZSBkZXN0aW5hdGlvbiBuYW1lZCBgYG5hbWVgYC4KKworVGhlcmUgYXJlIHR3byBkZWZpbmVkIHN1YmNvbW1hbmRzOiBgYG5ld2BgIGFuZCBgYGNsZWFyYGAuCisKK1RoZSBgYG5ld2BgIHN1YmNvbW1hbmQgd29ya3MgbGlrZSB0aGlzOjoKKworICAgIGRlc3RpbmF0aW9uIDxuYW1lPiBuZXcgPHR5cGU+CisKK1RoaXMgY3JlYXRlcyBhIG5ldyBkZXN0aW5hdGlvbiB3aXRoIG5hbWUgYGA8bmFtZT5gYCBhbmQgdHlwZSBgYDx0eXBlPmBgLgorCitUaGVyZSBhcmUgZml2ZSBkZXN0aW5hdGlvbiB0eXBlczoKKworICAgIGBgc3VwcHJlc3NgYAorICAgICAgICBUaHJvd3MgdGhlIHRleHQgYXdheS4KKworICAgIGBgYmxvY2tgYAorICAgICAgICBXcml0ZXMgdGhlIHRleHQgdG8gdGhlIGN1cnJlbnQgYmxvY2suICBUaGlzIGlzIHdoYXQgQ2xpbmljCisgICAgICAgIG9yaWdpbmFsbHkgZGlkLgorCisgICAgYGBidWZmZXJgYAorICAgICAgICBBIHNpbXBsZSB0ZXh0IGJ1ZmZlciwgbGlrZSB0aGUgImJ1ZmZlciIgYnVpbHRpbiBkZXN0aW5hdGlvbiBhYm92ZS4KKworICAgIGBgZmlsZWBgCisgICAgICAgIEEgdGV4dCBmaWxlLiAgVGhlIGZpbGUgZGVzdGluYXRpb24gdGFrZXMgYW4gZXh0cmEgYXJndW1lbnQsCisgICAgICAgIGEgdGVtcGxhdGUgdG8gdXNlIGZvciBidWlsZGluZyB0aGUgZmlsZW5hbWUsIGxpa2Ugc286CisKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uIDxuYW1lPiBuZXcgPHR5cGU+IDxmaWxlX3RlbXBsYXRlPgorCisgICAgICAgIFRoZSB0ZW1wbGF0ZSBjYW4gdXNlIHRocmVlIHN0cmluZ3MgaW50ZXJuYWxseSB0aGF0IHdpbGwgYmUgcmVwbGFjZWQKKyAgICAgICAgYnkgYml0cyBvZiB0aGUgZmlsZW5hbWU6CisKKyAgICAgICAgICAgIHtwYXRofQorICAgICAgICAgICAgICAgIFRoZSBmdWxsIHBhdGggdG8gdGhlIGZpbGUsIGluY2x1ZGluZyBkaXJlY3RvcnkgYW5kIGZ1bGwgZmlsZW5hbWUuCisgICAgICAgICAgICB7ZGlybmFtZX0KKyAgICAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoZSBmaWxlIGlzIGluLgorICAgICAgICAgICAge2Jhc2VuYW1lfQorICAgICAgICAgICAgICAgIEp1c3QgdGhlIG5hbWUgb2YgdGhlIGZpbGUsIG5vdCBpbmNsdWRpbmcgdGhlIGRpcmVjdG9yeS4KKyAgICAgICAgICAgIHtiYXNlbmFtZV9yb290fQorICAgICAgICAgICAgICAgIEJhc2VuYW1lIHdpdGggdGhlIGV4dGVuc2lvbiBjbGlwcGVkIG9mZgorICAgICAgICAgICAgICAgIChldmVyeXRoaW5nIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBsYXN0ICcuJykuCisgICAgICAgICAgICB7YmFzZW5hbWVfZXh0ZW5zaW9ufQorICAgICAgICAgICAgICAgIFRoZSBsYXN0ICcuJyBhbmQgZXZlcnl0aGluZyBhZnRlciBpdC4gIElmIHRoZSBiYXNlbmFtZQorICAgICAgICAgICAgICAgIGRvZXMgbm90IGNvbnRhaW4gYSBwZXJpb2QsIHRoaXMgd2lsbCBiZSB0aGUgZW1wdHkgc3RyaW5nLgorCisgICAgICAgIElmIHRoZXJlIGFyZSBubyBwZXJpb2RzIGluIHRoZSBmaWxlbmFtZSwge2Jhc2VuYW1lfSBhbmQge2ZpbGVuYW1lfQorICAgICAgICBhcmUgdGhlIHNhbWUsIGFuZCB7ZXh0ZW5zaW9ufSBpcyBlbXB0eS4gICJ7YmFzZW5hbWV9e2V4dGVuc2lvbn0iCisgICAgICAgIGlzIGFsd2F5cyBleGFjdGx5IHRoZSBzYW1lIGFzICJ7ZmlsZW5hbWV9Ii4iCisKKyAgICBgYHR3by1wYXNzYGAKKyAgICAgICAgQSB0d28tcGFzcyBidWZmZXIsIGxpa2UgdGhlICJ0d28tcGFzcyIgYnVpbHRpbiBkZXN0aW5hdGlvbiBhYm92ZS4KKworCitUaGUgYGBjbGVhcmBgIHN1YmNvbW1hbmQgd29ya3MgbGlrZSB0aGlzOjoKKworICAgIGRlc3RpbmF0aW9uIDxuYW1lPiBjbGVhcgorCitJdCByZW1vdmVzIGFsbCB0aGUgYWNjdW11bGF0ZWQgdGV4dCB1cCB0byB0aGlzIHBvaW50IGluIHRoZSBkZXN0aW5hdGlvbi4KKyhJIGRvbid0IGtub3cgd2hhdCB5b3UnZCBuZWVkIHRoaXMgZm9yLCBidXQgSSB0aG91Z2h0IG1heWJlIGl0J2QgYmUKK3VzZWZ1bCB3aGlsZSBzb21lb25lJ3MgZXhwZXJpbWVudGluZy4pCisKK1RoZSBmb3VydGggbmV3IGRpcmVjdGl2ZSBpcyBgYHNldGBgOjoKKworICAgIHNldCBsaW5lX3ByZWZpeCAic3RyaW5nIgorICAgIHNldCBsaW5lX3N1ZmZpeCAic3RyaW5nIgorCitgYHNldGBgIGxldHMgeW91IHNldCB0d28gaW50ZXJuYWwgdmFyaWFibGVzIGluIENsaW5pYy4KK2BgbGluZV9wcmVmaXhgYCBpcyBhIHN0cmluZyB0aGF0IHdpbGwgYmUgcHJlcGVuZGVkIHRvIGV2ZXJ5IGxpbmUgb2YgQ2xpbmljJ3Mgb3V0cHV0OworYGBsaW5lX3N1ZmZpeGBgIGlzIGEgc3RyaW5nIHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byBldmVyeSBsaW5lIG9mIENsaW5pYydzIG91dHB1dC4KKworQm90aCBvZiB0aGVzZSBzdXBwb3J0IHR3byBmb3JtYXQgc3RyaW5nczoKKworICBgYHtibG9jayBjb21tZW50IHN0YXJ0fWBgCisgICAgVHVybnMgaW50byB0aGUgc3RyaW5nIGBgLypgYCwgdGhlIHN0YXJ0LWNvbW1lbnQgdGV4dCBzZXF1ZW5jZSBmb3IgQyBmaWxlcy4KKworICBgYHtibG9jayBjb21tZW50IGVuZH1gYAorICAgIFR1cm5zIGludG8gdGhlIHN0cmluZyBgYCovYGAsIHRoZSBlbmQtY29tbWVudCB0ZXh0IHNlcXVlbmNlIGZvciBDIGZpbGVzLgorCitUaGUgZmluYWwgbmV3IGRpcmVjdGl2ZSBpcyBvbmUgeW91IHNob3VsZG4ndCBuZWVkIHRvIHVzZSBkaXJlY3RseSwKK2NhbGxlZCBgYHByZXNlcnZlYGA6OgorCisgICAgcHJlc2VydmUKKworVGhpcyB0ZWxscyBDbGluaWMgdGhhdCB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgb3V0cHV0IHNob3VsZCBiZSBrZXB0LCB1bm1vZGlmZWQuCitUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBDbGluaWMgd2hlbiBkdW1waW5nIG91dHB1dCBpbnRvIGBgZmlsZWBgIGZpbGVzOyB3cmFwcGluZworaXQgaW4gYSBDbGluaWMgYmxvY2sgbGV0cyBDbGluaWMgdXNlIGl0cyBleGlzdGluZyBjaGVja3N1bSBmdW5jdGlvbmFsaXR5IHRvIGVuc3VyZQordGhlIGZpbGUgd2FzIG5vdCBtb2RpZmllZCBieSBoYW5kIGJlZm9yZSBpdCBnZXRzIG92ZXJ3cml0dGVuLgorCisKK1RoZSAjaWZkZWYgdHJpY2sKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgeW91J3JlIGNvbnZlcnRpbmcgYSBmdW5jdGlvbiB0aGF0IGlzbid0IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLAordGhlcmUncyBhIHRyaWNrIHlvdSBjYW4gdXNlIHRvIG1ha2UgbGlmZSBhIGxpdHRsZSBlYXNpZXIuICBUaGUgZXhpc3RpbmcKK2NvZGUgcHJvYmFibHkgbG9va3MgbGlrZSB0aGlzOjoKKworICAgICNpZmRlZiBIQVZFX0ZVTkNUSU9OTkFNRQorICAgIHN0YXRpYyBtb2R1bGVfZnVuY3Rpb25uYW1lKC4uLikKKyAgICB7CisgICAgLi4uCisgICAgfQorICAgICNlbmRpZiAvKiBIQVZFX0ZVTkNUSU9OTkFNRSAqLworCitBbmQgdGhlbiBpbiB0aGUgYGBQeU1ldGhvZERlZmBgIHN0cnVjdHVyZSBhdCB0aGUgYm90dG9tIHRoZSBleGlzdGluZyBjb2RlCit3aWxsIGhhdmU6OgorCisgICAgI2lmZGVmIEhBVkVfRlVOQ1RJT05OQU1FCisgICAgeydmdW5jdGlvbm5hbWUnLCAuLi4gfSwKKyAgICAjZW5kaWYgLyogSEFWRV9GVU5DVElPTk5BTUUgKi8KKworSW4gdGhpcyBzY2VuYXJpbywgeW91IHNob3VsZCBlbmNsb3NlIHRoZSBib2R5IG9mIHlvdXIgaW1wbCBmdW5jdGlvbiBpbnNpZGUgdGhlIGBgI2lmZGVmYGAsCitsaWtlIHNvOjoKKworICAgICNpZmRlZiBIQVZFX0ZVTkNUSU9OTkFNRQorICAgIC8qW2NsaW5pYyBpbnB1dF0KKyAgICBtb2R1bGUuZnVuY3Rpb25uYW1lCisgICAgLi4uCisgICAgW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworICAgIHN0YXRpYyBtb2R1bGVfZnVuY3Rpb25uYW1lKC4uLikKKyAgICB7CisgICAgLi4uCisgICAgfQorICAgICNlbmRpZiAvKiBIQVZFX0ZVTkNUSU9OTkFNRSAqLworCitUaGVuLCByZW1vdmUgdGhvc2UgdGhyZWUgbGluZXMgZnJvbSB0aGUgYGBQeU1ldGhvZERlZmBgIHN0cnVjdHVyZSwKK3JlcGxhY2luZyB0aGVtIHdpdGggdGhlIG1hY3JvIEFyZ3VtZW50IENsaW5pYyBnZW5lcmF0ZWQ6OgorCisgICAgTU9EVUxFX0ZVTkNUSU9OTkFNRV9NRVRIT0RERUYKKworKFlvdSBjYW4gZmluZCB0aGUgcmVhbCBuYW1lIGZvciB0aGlzIG1hY3JvIGluc2lkZSB0aGUgZ2VuZXJhdGVkIGNvZGUuCitPciB5b3UgY2FuIGNhbGN1bGF0ZSBpdCB5b3Vyc2VsZjogaXQncyB0aGUgbmFtZSBvZiB5b3VyIGZ1bmN0aW9uIGFzIGRlZmluZWQKK29uIHRoZSBmaXJzdCBsaW5lIG9mIHlvdXIgYmxvY2ssIGJ1dCB3aXRoIHBlcmlvZHMgY2hhbmdlZCB0byB1bmRlcnNjb3JlcywKK3VwcGVyY2FzZWQsIGFuZCBgYCJfTUVUSE9EREVGImBgIGFkZGVkIHRvIHRoZSBlbmQuKQorCitQZXJoYXBzIHlvdSdyZSB3b25kZXJpbmc6IHdoYXQgaWYgYGBIQVZFX0ZVTkNUSU9OTkFNRWBgIGlzbid0IGRlZmluZWQ/CitUaGUgYGBNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRmBgIG1hY3JvIHdvbid0IGJlIGRlZmluZWQgZWl0aGVyIQorCitIZXJlJ3Mgd2hlcmUgQXJndW1lbnQgQ2xpbmljIGdldHMgdmVyeSBjbGV2ZXIuICBJdCBhY3R1YWxseSBkZXRlY3RzIHRoYXQgdGhlCitBcmd1bWVudCBDbGluaWMgYmxvY2sgbWlnaHQgYmUgZGVhY3RpdmF0ZWQgYnkgdGhlIGBgI2lmZGVmYGAuICBXaGVuIHRoYXQKK2hhcHBlbnMsIGl0IGdlbmVyYXRlcyBhIGxpdHRsZSBleHRyYSBjb2RlIHRoYXQgbG9va3MgbGlrZSB0aGlzOjoKKworICAgICNpZm5kZWYgTU9EVUxFX0ZVTkNUSU9OTkFNRV9NRVRIT0RERUYKKyAgICAgICAgI2RlZmluZSBNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRgorICAgICNlbmRpZiAvKiAhZGVmaW5lZChNT0RVTEVfRlVOQ1RJT05OQU1FX01FVEhPRERFRikgKi8KKworVGhhdCBtZWFucyB0aGUgbWFjcm8gYWx3YXlzIHdvcmtzLiAgSWYgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIHRoaXMgdHVybnMKK2ludG8gdGhlIGNvcnJlY3Qgc3RydWN0dXJlLCBpbmNsdWRpbmcgdGhlIHRyYWlsaW5nIGNvbW1hLiAgSWYgdGhlIGZ1bmN0aW9uIGlzCit1bmRlZmluZWQsIHRoaXMgdHVybnMgaW50byBub3RoaW5nLgorCitIb3dldmVyLCB0aGlzIGNhdXNlcyBvbmUgdGlja2xpc2ggcHJvYmxlbTogd2hlcmUgc2hvdWxkIEFyZ3VtZW50IENsaW5pYyBwdXQgdGhpcworZXh0cmEgY29kZSB3aGVuIHVzaW5nIHRoZSAiYmxvY2siIG91dHB1dCBwcmVzZXQ/ICBJdCBjYW4ndCBnbyBpbiB0aGUgb3V0cHV0IGJsb2NrLAorYmVjYXVzZSB0aGF0IGNvdWxkIGJlIGRlY2F0aXZhdGVkIGJ5IHRoZSBgYCNpZmRlZmBgLiAgKFRoYXQncyB0aGUgd2hvbGUgcG9pbnQhKQorCitJbiB0aGlzIHNpdHVhdGlvbiwgQXJndW1lbnQgQ2xpbmljIHdyaXRlcyB0aGUgZXh0cmEgY29kZSB0byB0aGUgImJ1ZmZlciIgZGVzdGluYXRpb24uCitUaGlzIG1heSBtZWFuIHRoYXQgeW91IGdldCBhIGNvbXBsYWludCBmcm9tIEFyZ3VtZW50IENsaW5pYzo6CisKKyAgICBXYXJuaW5nIGluIGZpbGUgIk1vZHVsZXMvcG9zaXhtb2R1bGUuYyIgb24gbGluZSAxMjM1NzoKKyAgICBEZXN0aW5hdGlvbiBidWZmZXIgJ2J1ZmZlcicgbm90IGVtcHR5IGF0IGVuZCBvZiBmaWxlLCBlbXB0eWluZy4KKworV2hlbiB0aGlzIGhhcHBlbnMsIGp1c3Qgb3BlbiB5b3VyIGZpbGUsIGZpbmQgdGhlIGBgZHVtcCBidWZmZXJgYCBibG9jayB0aGF0CitBcmd1bWVudCBDbGluaWMgYWRkZWQgdG8geW91ciBmaWxlIChpdCdsbCBiZSBhdCB0aGUgdmVyeSBib3R0b20pLCB0aGVuCittb3ZlIGl0IGFib3ZlIHRoZSBgYFB5TWV0aG9kRGVmYGAgc3RydWN0dXJlIHdoZXJlIHRoYXQgbWFjcm8gaXMgdXNlZC4KKworCisKK1VzaW5nIEFyZ3VtZW50IENsaW5pYyBpbiBQeXRob24gZmlsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQncyBhY3R1YWxseSBwb3NzaWJsZSB0byB1c2UgQXJndW1lbnQgQ2xpbmljIHRvIHByZXByb2Nlc3MgUHl0aG9uIGZpbGVzLgorVGhlcmUncyBubyBwb2ludCB0byB1c2luZyBBcmd1bWVudCBDbGluaWMgYmxvY2tzLCBvZiBjb3Vyc2UsIGFzIHRoZSBvdXRwdXQKK3dvdWxkbid0IG1ha2UgYW55IHNlbnNlIHRvIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBCdXQgdXNpbmcgQXJndW1lbnQgQ2xpbmljCit0byBydW4gUHl0aG9uIGJsb2NrcyBsZXRzIHlvdSB1c2UgUHl0aG9uIGFzIGEgUHl0aG9uIHByZXByb2Nlc3NvciEKKworU2luY2UgUHl0aG9uIGNvbW1lbnRzIGFyZSBkaWZmZXJlbnQgZnJvbSBDIGNvbW1lbnRzLCBBcmd1bWVudCBDbGluaWMKK2Jsb2NrcyBlbWJlZGRlZCBpbiBQeXRob24gZmlsZXMgbG9vayBzbGlnaHRseSBkaWZmZXJlbnQuICBUaGV5IGxvb2sgbGlrZSB0aGlzOjoKKworICAgICMvKltweXRob24gaW5wdXRdCisgICAgI3ByaW50KCJkZWYgZm9vKCk6IHBhc3MiKQorICAgICNbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisgICAgZGVmIGZvbygpOiBwYXNzCisgICAgIy8qW3B5dGhvbiBjaGVja3N1bTouLi5dKi8KZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9jcG9ydGluZy5yc3QgYi9Eb2MvaG93dG8vY3BvcnRpbmcucnN0CmluZGV4IDFhZDc3ZDYuLmQ3YTcwODYgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9jcG9ydGluZy5yc3QKKysrIGIvRG9jL2hvd3RvL2Nwb3J0aW5nLnJzdApAQCAtNDMsMTAgKzQzLDkgQEAKIHN0ci91bmljb2RlIFVuaWZpY2F0aW9uCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0KLVB5dGhvbiAzJ3MgOmZ1bmM6YHN0cmAgKGBgUHlTdHJpbmdfKmBgIGZ1bmN0aW9ucyBpbiBDKSB0eXBlIGlzIGVxdWl2YWxlbnQgdG8KLVB5dGhvbiAyJ3MgOmZ1bmM6YHVuaWNvZGVgIChgYFB5VW5pY29kZV8qYGApLiAgVGhlIG9sZCA4LWJpdCBzdHJpbmcgdHlwZSBoYXMKLWJlY29tZSA6ZnVuYzpgYnl0ZXNgLiAgUHl0aG9uIDIuNiBhbmQgbGF0ZXIgcHJvdmlkZSBhIGNvbXBhdGliaWxpdHkgaGVhZGVyLAorUHl0aG9uIDMncyA6ZnVuYzpgc3RyYCB0eXBlIGlzIGVxdWl2YWxlbnQgdG8gUHl0aG9uIDIncyA6ZnVuYzpgdW5pY29kZWA7IHRoZSBDCitmdW5jdGlvbnMgYXJlIGNhbGxlZCBgYFB5VW5pY29kZV8qYGAgZm9yIGJvdGguICBUaGUgb2xkIDgtYml0IHN0cmluZyB0eXBlIGhhcyBiZWNvbWUKKzpmdW5jOmBieXRlc2AsIHdpdGggQyBmdW5jdGlvbnMgY2FsbGVkIGBgUHlCeXRlc18qYGAuICBQeXRob24gMi42IGFuZCBsYXRlciBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBoZWFkZXIsCiA6ZmlsZTpgYnl0ZXNvYmplY3QuaGAsIG1hcHBpbmcgYGBQeUJ5dGVzYGAgbmFtZXMgdG8gYGBQeVN0cmluZ2BgIG9uZXMuICBGb3IgYmVzdAogY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLCA6Yzp0eXBlOmBQeVVuaWNvZGVgIHNob3VsZCBiZSB1c2VkIGZvciB0ZXh0dWFsIGRhdGEgYW5kCiA6Yzp0eXBlOmBQeUJ5dGVzYCBmb3IgYmluYXJ5IGRhdGEuICBJdCdzIGFsc28gaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQKQEAgLTI1Myw2ICsyNTIsNiBAQAogPT09PT09PT09PT09PQogCiBJZiB5b3UgYXJlIHdyaXRpbmcgYSBuZXcgZXh0ZW5zaW9uIG1vZHVsZSwgeW91IG1pZ2h0IGNvbnNpZGVyIGBDeXRob24KLTxodHRwOi8vd3d3LmN5dGhvbi5vcmc+YF8uICBJdCB0cmFuc2xhdGVzIGEgUHl0aG9uLWxpa2UgbGFuZ3VhZ2UgdG8gQy4gIFRoZQorPGh0dHA6Ly9jeXRob24ub3JnLz5gXy4gIEl0IHRyYW5zbGF0ZXMgYSBQeXRob24tbGlrZSBsYW5ndWFnZSB0byBDLiAgVGhlCiBleHRlbnNpb24gbW9kdWxlcyBpdCBjcmVhdGVzIGFyZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMgYW5kIFB5dGhvbiAyLgogCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vY3Vyc2VzLnJzdCBiL0RvYy9ob3d0by9jdXJzZXMucnN0CmluZGV4IGVhNjJiMWMuLjg3YTVjYWIgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9jdXJzZXMucnN0CisrKyBiL0RvYy9ob3d0by9jdXJzZXMucnN0CkBAIC01MzgsMTIgKzUzOCwxMiBAQAogaW1wbGVtZW50LCBidXQgYmVjYXVzZSBubyBvbmUgaGFzIG5lZWRlZCB0aGVtIHlldC4gIEFsc28sIFB5dGhvbgogZG9lc24ndCB5ZXQgc3VwcG9ydCB0aGUgbWVudSBsaWJyYXJ5IGFzc29jaWF0ZWQgd2l0aCBuY3Vyc2VzLgogUGF0Y2hlcyBhZGRpbmcgc3VwcG9ydCBmb3IgdGhlc2Ugd291bGQgYmUgd2VsY29tZTsgc2VlCi1gdGhlIFB5dGhvbiBEZXZlbG9wZXIncyBHdWlkZSA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS8+YF8gdG8KK2B0aGUgUHl0aG9uIERldmVsb3BlcidzIEd1aWRlIDxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS8+YF8gdG8KIGxlYXJuIG1vcmUgYWJvdXQgc3VibWl0dGluZyBwYXRjaGVzIHRvIFB5dGhvbi4KIAogKiBgV3JpdGluZyBQcm9ncmFtcyB3aXRoIE5DVVJTRVMgPGh0dHA6Ly9pbnZpc2libGUtaXNsYW5kLm5ldC9uY3Vyc2VzL25jdXJzZXMtaW50cm8uaHRtbD5gXzoKICAgYSBsZW5ndGh5IHR1dG9yaWFsIGZvciBDIHByb2dyYW1tZXJzLgotKiBgVGhlIG5jdXJzZXMgbWFuIHBhZ2UgPGh0dHA6Ly93d3cubGludXhtYW5wYWdlcy5jb20vbWFuMy9uY3Vyc2VzLjN4LnBocD5gXworKiBgVGhlIG5jdXJzZXMgbWFuIHBhZ2UgPGh0dHA6Ly9saW51eC5kaWUubmV0L21hbi8zL25jdXJzZXM+YF8KICogYFRoZSBuY3Vyc2VzIEZBUSA8aHR0cDovL2ludmlzaWJsZS1pc2xhbmQubmV0L25jdXJzZXMvbmN1cnNlcy5mYXEuaHRtbD5gXwogKiBgIlVzZSBjdXJzZXMuLi4gZG9uJ3Qgc3dlYXIiIDxodHRwOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9ZU4xZVp0akxFblU+YF86CiAgIHZpZGVvIG9mIGEgUHlDb24gMjAxMyB0YWxrIG9uIGNvbnRyb2xsaW5nIHRlcm1pbmFscyB1c2luZyBjdXJzZXMgb3IgVXJ3aWQuCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vZGVzY3JpcHRvci5yc3QgYi9Eb2MvaG93dG8vZGVzY3JpcHRvci5yc3QKaW5kZXggYTBjNjk4OC4uNTMwZjM0YiAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2Rlc2NyaXB0b3IucnN0CisrKyBiL0RvYy9ob3d0by9kZXNjcmlwdG9yLnJzdApAQCAtOTIsOSArOTIsOSBAQAogdHJhbnNmb3JtcyBgYGIueGBgIGludG8gYGB0eXBlKGIpLl9fZGljdF9fWyd4J10uX19nZXRfXyhiLCB0eXBlKGIpKWBgLiAgVGhlCiBpbXBsZW1lbnRhdGlvbiB3b3JrcyB0aHJvdWdoIGEgcHJlY2VkZW5jZSBjaGFpbiB0aGF0IGdpdmVzIGRhdGEgZGVzY3JpcHRvcnMKIHByaW9yaXR5IG92ZXIgaW5zdGFuY2UgdmFyaWFibGVzLCBpbnN0YW5jZSB2YXJpYWJsZXMgcHJpb3JpdHkgb3ZlciBub24tZGF0YQotZGVzY3JpcHRvcnMsIGFuZCBhc3NpZ25zIGxvd2VzdCBwcmlvcml0eSB0byA6bWV0aDpgX19nZXRhdHRyX19gIGlmIHByb3ZpZGVkLiAgVGhlCi1mdWxsIEMgaW1wbGVtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluIDpjOmZ1bmM6YFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKClgIGluCi1gT2JqZWN0cy9vYmplY3QuYyA8aHR0cDovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL3RydW5rL09iamVjdHMvb2JqZWN0LmM/dmlldz1tYXJrdXA+YF9cLgorZGVzY3JpcHRvcnMsIGFuZCBhc3NpZ25zIGxvd2VzdCBwcmlvcml0eSB0byA6bWV0aDpgX19nZXRhdHRyX19gIGlmIHByb3ZpZGVkLgorVGhlIGZ1bGwgQyBpbXBsZW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gOmM6ZnVuYzpgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIoKWAgaW4KKzpzb3VyY2U6YE9iamVjdHMvb2JqZWN0LmNgLgogCiBGb3IgY2xhc3NlcywgdGhlIG1hY2hpbmVyeSBpcyBpbiA6bWV0aDpgdHlwZS5fX2dldGF0dHJpYnV0ZV9fYCB3aGljaCB0cmFuc2Zvcm1zCiBgYEIueGBgIGludG8gYGBCLl9fZGljdF9fWyd4J10uX19nZXRfXyhOb25lLCBCKWBgLiAgSW4gcHVyZSBQeXRob24sIGl0IGxvb2tzCkBAIC0xMjQsMTAgKzEyNCwxMCBAQAogc2VhcmNoIHVzaW5nIDptZXRoOmBvYmplY3QuX19nZXRhdHRyaWJ1dGVfX2AuCiAKIFRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSBpbiA6YzpmdW5jOmBzdXBlcl9nZXRhdHRybygpYCBpbgotYE9iamVjdHMvdHlwZW9iamVjdC5jIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vdHJ1bmsvT2JqZWN0cy90eXBlb2JqZWN0LmM/dmlldz1tYXJrdXA+YF8KLWFuZCBhIHB1cmUgUHl0aG9uIGVxdWl2YWxlbnQgY2FuIGJlIGZvdW5kIGluIGBHdWlkbydzIFR1dG9yaWFsYF8uCis6c291cmNlOmBPYmplY3RzL3R5cGVvYmplY3QuY2AuICBhbmQgYSBwdXJlIFB5dGhvbiBlcXVpdmFsZW50IGNhbiBiZSBmb3VuZCBpbgorYEd1aWRvJ3MgVHV0b3JpYWxgXy4KIAotLi4gX2BHdWlkbydzIFR1dG9yaWFsYDogaHR0cDovL3d3dy5weXRob24ub3JnLzIuMi4zL2Rlc2NyaW50cm8uaHRtbCNjb29wZXJhdGlvbgorLi4gX2BHdWlkbydzIFR1dG9yaWFsYDogaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjIuMy9kZXNjcmludHJvLyNjb29wZXJhdGlvbgogCiBUaGUgZGV0YWlscyBhYm92ZSBzaG93IHRoYXQgdGhlIG1lY2hhbmlzbSBmb3IgZGVzY3JpcHRvcnMgaXMgZW1iZWRkZWQgaW4gdGhlCiA6bWV0aDpgX19nZXRhdHRyaWJ1dGVfXygpYCBtZXRob2RzIGZvciA6Y2xhc3M6YG9iamVjdGAsIDpjbGFzczpgdHlwZWAsIGFuZApAQCAtMzAwLDEwICszMDAsOSBAQAogCiBUaGUgb3V0cHV0IHN1Z2dlc3RzIHRoYXQgYm91bmQgYW5kIHVuYm91bmQgbWV0aG9kcyBhcmUgdHdvIGRpZmZlcmVudCB0eXBlcy4KIFdoaWxlIHRoZXkgY291bGQgaGF2ZSBiZWVuIGltcGxlbWVudGVkIHRoYXQgd2F5LCB0aGUgYWN0dWFsIEMgaW1wbGVtZW50YXRpb24gb2YKLTpjOnR5cGU6YFB5TWV0aG9kX1R5cGVgIGluCi1gT2JqZWN0cy9jbGFzc29iamVjdC5jIDxodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vdHJ1bmsvT2JqZWN0cy9jbGFzc29iamVjdC5jP3ZpZXc9bWFya3VwPmBfCi1pcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0d28gZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUKLTphdHRyOmBpbV9zZWxmYCBmaWVsZCBpcyBzZXQgb3IgaXMgKk5VTEwqICh0aGUgQyBlcXVpdmFsZW50IG9mICpOb25lKikuCis6Yzp0eXBlOmBQeU1ldGhvZF9UeXBlYCBpbiA6c291cmNlOmBPYmplY3RzL2NsYXNzb2JqZWN0LmNgIGlzIGEgc2luZ2xlIG9iamVjdAord2l0aCB0d28gZGlmZmVyZW50IHJlcHJlc2VudGF0aW9ucyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgOmF0dHI6YGltX3NlbGZgCitmaWVsZCBpcyBzZXQgb3IgaXMgKk5VTEwqICh0aGUgQyBlcXVpdmFsZW50IG9mICpOb25lKikuCiAKIExpa2V3aXNlLCB0aGUgZWZmZWN0cyBvZiBjYWxsaW5nIGEgbWV0aG9kIG9iamVjdCBkZXBlbmQgb24gdGhlIDphdHRyOmBpbV9zZWxmYAogZmllbGQuIElmIHNldCAobWVhbmluZyBib3VuZCksIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiAoc3RvcmVkIGluIHRoZQpAQCAtMzIwLDcgKzMxOSw3IEBACiBwYXR0ZXJucyBvZiBiaW5kaW5nIGZ1bmN0aW9ucyBpbnRvIG1ldGhvZHMuCiAKIFRvIHJlY2FwLCBmdW5jdGlvbnMgaGF2ZSBhIDptZXRoOmBfX2dldF9fYCBtZXRob2Qgc28gdGhhdCB0aGV5IGNhbiBiZSBjb252ZXJ0ZWQKLXRvIGEgbWV0aG9kIHdoZW4gYWNjZXNzZWQgYXMgYXR0cmlidXRlcy4gIFRoZSBub24tZGF0YSBkZXNjcmlwdG9yIHRyYW5zZm9ybXMgYQordG8gYSBtZXRob2Qgd2hlbiBhY2Nlc3NlZCBhcyBhdHRyaWJ1dGVzLiAgVGhlIG5vbi1kYXRhIGRlc2NyaXB0b3IgdHJhbnNmb3JtcyBhbgogYGBvYmouZigqYXJncylgYCBjYWxsIGludG8gYGBmKG9iaiwgKmFyZ3MpYGAuICBDYWxsaW5nIGBga2xhc3MuZigqYXJncylgYAogYmVjb21lcyBgYGYoKmFyZ3MpYGAuCiAKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdCBiL0RvYy9ob3d0by9mdW5jdGlvbmFsLnJzdAppbmRleCA3MTg5YzY1Li4xOTY5YjMyIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vZnVuY3Rpb25hbC5yc3QKKysrIGIvRG9jL2hvd3RvL2Z1bmN0aW9uYWwucnN0CkBAIC0zLDcgKzMsNyBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogOkF1dGhvcjogQS4gTS4gS3VjaGxpbmcKLTpSZWxlYXNlOiAwLjMxCis6UmVsZWFzZTogMC4zMgogCiBJbiB0aGlzIGRvY3VtZW50LCB3ZSdsbCB0YWtlIGEgdG91ciBvZiBQeXRob24ncyBmZWF0dXJlcyBzdWl0YWJsZSBmb3IKIGltcGxlbWVudGluZyBwcm9ncmFtcyBpbiBhIGZ1bmN0aW9uYWwgc3R5bGUuICBBZnRlciBhbiBpbnRyb2R1Y3Rpb24gdG8gdGhlCkBAIC0xNSw5ICsxNSw5IEBACiBJbnRyb2R1Y3Rpb24KID09PT09PT09PT09PQogCi1UaGlzIHNlY3Rpb24gZXhwbGFpbnMgdGhlIGJhc2ljIGNvbmNlcHQgb2YgZnVuY3Rpb25hbCBwcm9ncmFtbWluZzsgaWYgeW91J3JlCi1qdXN0IGludGVyZXN0ZWQgaW4gbGVhcm5pbmcgYWJvdXQgUHl0aG9uIGxhbmd1YWdlIGZlYXR1cmVzLCBza2lwIHRvIHRoZSBuZXh0Ci1zZWN0aW9uLgorVGhpcyBzZWN0aW9uIGV4cGxhaW5zIHRoZSBiYXNpYyBjb25jZXB0IG9mIGZ1bmN0aW9uYWwgcHJvZ3JhbW1pbmc7IGlmCit5b3UncmUganVzdCBpbnRlcmVzdGVkIGluIGxlYXJuaW5nIGFib3V0IFB5dGhvbiBsYW5ndWFnZSBmZWF0dXJlcywKK3NraXAgdG8gdGhlIG5leHQgc2VjdGlvbiBvbiA6cmVmOmBmdW5jdGlvbmFsLWhvd3RvLWl0ZXJhdG9yc2AuCiAKIFByb2dyYW1taW5nIGxhbmd1YWdlcyBzdXBwb3J0IGRlY29tcG9zaW5nIHByb2JsZW1zIGluIHNldmVyYWwgZGlmZmVyZW50IHdheXM6CiAKQEAgLTE3Myw2ICsxNzMsOCBAQAogYSBmZXcgZnVuY3Rpb25zIHNwZWNpYWxpemVkIGZvciB0aGUgY3VycmVudCB0YXNrLgogCiAKKy4uIF9mdW5jdGlvbmFsLWhvd3RvLWl0ZXJhdG9yczoKKwogSXRlcmF0b3JzCiA9PT09PT09PT0KIApAQCAtNTgxLDcgKzU4Myw3IEBACiAKIEJlY2F1c2UgYGB5aWVsZGBgIHdpbGwgb2Z0ZW4gYmUgcmV0dXJuaW5nIGBgTm9uZWBgLCB5b3Ugc2hvdWxkIGFsd2F5cyBjaGVjayBmb3IKIHRoaXMgY2FzZS4gIERvbid0IGp1c3QgdXNlIGl0cyB2YWx1ZSBpbiBleHByZXNzaW9ucyB1bmxlc3MgeW91J3JlIHN1cmUgdGhhdCB0aGUKLTptZXRoOmB+Z2VuZXJhdG9yLnNlbmRgIG1ldGhvZCB3aWxsIGJlIHRoZSBvbmx5IG1ldGhvZCB1c2VkIHJlc3VtZSB5b3VyCis6bWV0aDpgfmdlbmVyYXRvci5zZW5kYCBtZXRob2Qgd2lsbCBiZSB0aGUgb25seSBtZXRob2QgdXNlZCB0byByZXN1bWUgeW91cgogZ2VuZXJhdG9yIGZ1bmN0aW9uLgogCiBJbiBhZGRpdGlvbiB0byA6bWV0aDpgfmdlbmVyYXRvci5zZW5kYCwgdGhlcmUgYXJlIHR3byBvdGhlciBtZXRob2RzIG9uCkBAIC02NzAsNyArNjcyLDcgQEAKIAogOmZ1bmM6YHNvcnRlZChpdGVyYWJsZSwga2V5PU5vbmUsIHJldmVyc2U9RmFsc2UpIDxzb3J0ZWQ+YCBjb2xsZWN0cyBhbGwgdGhlCiBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUgaW50byBhIGxpc3QsIHNvcnRzIHRoZSBsaXN0LCBhbmQgcmV0dXJucyB0aGUgc29ydGVkCi1yZXN1bHQuICBUaGUgKmtleSosIGFuZCAqcmV2ZXJzZSogYXJndW1lbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUKK3Jlc3VsdC4gIFRoZSAqa2V5KiBhbmQgKnJldmVyc2UqIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gdGhlCiBjb25zdHJ1Y3RlZCBsaXN0J3MgOm1ldGg6YH5saXN0LnNvcnRgIG1ldGhvZC4gOjoKIAogICAgID4+PiBpbXBvcnQgcmFuZG9tCkBAIC04MzYsNyArODM4LDggQEAKIHByZWRpY2F0ZS4KIAogOmZ1bmM6YGl0ZXJ0b29scy5maWx0ZXJmYWxzZShwcmVkaWNhdGUsIGl0ZXIpIDxpdGVydG9vbHMuZmlsdGVyZmFsc2U+YCBpcyB0aGUKLW9wcG9zaXRlLCByZXR1cm5pbmcgYWxsIGVsZW1lbnRzIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgZmFsc2U6Ogorb3Bwb3NpdGUgb2YgOmZ1bmM6YGZpbHRlcmAsIHJldHVybmluZyBhbGwgZWxlbWVudHMgZm9yIHdoaWNoIHRoZSBwcmVkaWNhdGUKK3JldHVybnMgZmFsc2U6OgogCiAgICAgaXRlcnRvb2xzLmZpbHRlcmZhbHNlKGlzX2V2ZW4sIGl0ZXJ0b29scy5jb3VudCgpKSA9PgogICAgICAgMSwgMywgNSwgNywgOSwgMTEsIDEzLCAxNSwgLi4uCkBAIC04NjQsNiArODY3LDc3IEBACiAgICAgaXRlcnRvb2xzLmRyb3B3aGlsZShpc19ldmVuLCBpdGVydG9vbHMuY291bnQoKSkgPT4KICAgICAgIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAuLi4KIAorOmZ1bmM6YGl0ZXJ0b29scy5jb21wcmVzcyhkYXRhLCBzZWxlY3RvcnMpIDxpdGVydG9vbHMuY29tcHJlc3M+YCB0YWtlcyB0d28KK2l0ZXJhdG9ycyBhbmQgcmV0dXJucyBvbmx5IHRob3NlIGVsZW1lbnRzIG9mICpkYXRhKiBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcKK2VsZW1lbnQgb2YgKnNlbGVjdG9ycyogaXMgdHJ1ZSwgc3RvcHBpbmcgd2hlbmV2ZXIgZWl0aGVyIG9uZSBpcyBleGhhdXN0ZWQ6OgorCisgICAgaXRlcnRvb2xzLmNvbXByZXNzKFsxLDIsMyw0LDVdLCBbVHJ1ZSwgVHJ1ZSwgRmFsc2UsIEZhbHNlLCBUcnVlXSkgPT4KKyAgICAgICAxLCAyLCA1CisKKworQ29tYmluYXRvcmljIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoaXRlcmFibGUsIHIpIDxpdGVydG9vbHMuY29tYmluYXRpb25zPmAKK3JldHVybnMgYW4gaXRlcmF0b3IgZ2l2aW5nIGFsbCBwb3NzaWJsZSAqciotdHVwbGUgY29tYmluYXRpb25zIG9mIHRoZQorZWxlbWVudHMgY29udGFpbmVkIGluICppdGVyYWJsZSouICA6OgorCisgICAgaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhbMSwgMiwgMywgNCwgNV0sIDIpID0+CisgICAgICAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDQpLCAoMywgNSksCisgICAgICAoNCwgNSkKKworICAgIGl0ZXJ0b29scy5jb21iaW5hdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAzKSA9PgorICAgICAgKDEsIDIsIDMpLCAoMSwgMiwgNCksICgxLCAyLCA1KSwgKDEsIDMsIDQpLCAoMSwgMywgNSksICgxLCA0LCA1KSwKKyAgICAgICgyLCAzLCA0KSwgKDIsIDMsIDUpLCAoMiwgNCwgNSksCisgICAgICAoMywgNCwgNSkKKworVGhlIGVsZW1lbnRzIHdpdGhpbiBlYWNoIHR1cGxlIHJlbWFpbiBpbiB0aGUgc2FtZSBvcmRlciBhcworKml0ZXJhYmxlKiByZXR1cm5lZCB0aGVtLiAgRm9yIGV4YW1wbGUsIHRoZSBudW1iZXIgMSBpcyBhbHdheXMgYmVmb3JlCisyLCAzLCA0LCBvciA1IGluIHRoZSBleGFtcGxlcyBhYm92ZS4gIEEgc2ltaWxhciBmdW5jdGlvbiwKKzpmdW5jOmBpdGVydG9vbHMucGVybXV0YXRpb25zKGl0ZXJhYmxlLCByPU5vbmUpIDxpdGVydG9vbHMucGVybXV0YXRpb25zPmAsCityZW1vdmVzIHRoaXMgY29uc3RyYWludCBvbiB0aGUgb3JkZXIsIHJldHVybmluZyBhbGwgcG9zc2libGUKK2FycmFuZ2VtZW50cyBvZiBsZW5ndGggKnIqOjoKKworICAgIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDIpLCAoMSwgMyksICgxLCA0KSwgKDEsIDUpLAorICAgICAgKDIsIDEpLCAoMiwgMyksICgyLCA0KSwgKDIsIDUpLAorICAgICAgKDMsIDEpLCAoMywgMiksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDEpLCAoNCwgMiksICg0LCAzKSwgKDQsIDUpLAorICAgICAgKDUsIDEpLCAoNSwgMiksICg1LCAzKSwgKDUsIDQpCisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKFsxLCAyLCAzLCA0LCA1XSkgPT4KKyAgICAgICgxLCAyLCAzLCA0LCA1KSwgKDEsIDIsIDMsIDUsIDQpLCAoMSwgMiwgNCwgMywgNSksCisgICAgICAuLi4KKyAgICAgICg1LCA0LCAzLCAyLCAxKQorCitJZiB5b3UgZG9uJ3Qgc3VwcGx5IGEgdmFsdWUgZm9yICpyKiB0aGUgbGVuZ3RoIG9mIHRoZSBpdGVyYWJsZSBpcyB1c2VkLAorbWVhbmluZyB0aGF0IGFsbCB0aGUgZWxlbWVudHMgYXJlIHBlcm11dGVkLgorCitOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHByb2R1Y2UgYWxsIG9mIHRoZSBwb3NzaWJsZSBjb21iaW5hdGlvbnMgYnkKK3Bvc2l0aW9uIGFuZCBkb24ndCByZXF1aXJlIHRoYXQgdGhlIGNvbnRlbnRzIG9mICppdGVyYWJsZSogYXJlIHVuaXF1ZTo6CisKKyAgICBpdGVydG9vbHMucGVybXV0YXRpb25zKCdhYmEnLCAzKSA9PgorICAgICAgKCdhJywgJ2InLCAnYScpLCAoJ2EnLCAnYScsICdiJyksICgnYicsICdhJywgJ2EnKSwKKyAgICAgICgnYicsICdhJywgJ2EnKSwgKCdhJywgJ2EnLCAnYicpLCAoJ2EnLCAnYicsICdhJykKKworVGhlIGlkZW50aWNhbCB0dXBsZSBgYCgnYScsICdhJywgJ2InKWBgIG9jY3VycyB0d2ljZSwgYnV0IHRoZSB0d28gJ2EnCitzdHJpbmdzIGNhbWUgZnJvbSBkaWZmZXJlbnQgcG9zaXRpb25zLgorCitUaGUgOmZ1bmM6YGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudChpdGVyYWJsZSwgcikgPGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudD5gCitmdW5jdGlvbiByZWxheGVzIGEgZGlmZmVyZW50IGNvbnN0cmFpbnQ6IGVsZW1lbnRzIGNhbiBiZSByZXBlYXRlZAord2l0aGluIGEgc2luZ2xlIHR1cGxlLiAgQ29uY2VwdHVhbGx5IGFuIGVsZW1lbnQgaXMgc2VsZWN0ZWQgZm9yIHRoZQorZmlyc3QgcG9zaXRpb24gb2YgZWFjaCB0dXBsZSBhbmQgdGhlbiBpcyByZXBsYWNlZCBiZWZvcmUgdGhlIHNlY29uZAorZWxlbWVudCBpcyBzZWxlY3RlZC4gIDo6CisKKyAgICBpdGVydG9vbHMuY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQoWzEsIDIsIDMsIDQsIDVdLCAyKSA9PgorICAgICAgKDEsIDEpLCAoMSwgMiksICgxLCAzKSwgKDEsIDQpLCAoMSwgNSksCisgICAgICAoMiwgMiksICgyLCAzKSwgKDIsIDQpLCAoMiwgNSksCisgICAgICAoMywgMyksICgzLCA0KSwgKDMsIDUpLAorICAgICAgKDQsIDQpLCAoNCwgNSksCisgICAgICAoNSwgNSkKKwogCiBHcm91cGluZyBlbGVtZW50cwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTk4Niw2ICsxMDYwLDE3IEBACiAgICBmb3IgaSBpbiBbMSwyLDNdOgogICAgICAgIHByb2R1Y3QgKj0gaQogCitBIHJlbGF0ZWQgZnVuY3Rpb24gaXMgYGl0ZXJ0b29scy5hY2N1bXVsYXRlKGl0ZXJhYmxlLCBmdW5jPW9wZXJhdG9yLmFkZCkgPGl0ZXJ0b29scy5hY2N1bXVsYXRlYC4KK0l0IHBlcmZvcm1zIHRoZSBzYW1lIGNhbGN1bGF0aW9uLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgb25seSB0aGUKK2ZpbmFsIHJlc3VsdCwgOmZ1bmM6YGFjY3VtdWxhdGVgIHJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCBhbHNvIHlpZWxkcworZWFjaCBwYXJ0aWFsIHJlc3VsdDo6CisKKyAgICBpdGVydG9vbHMuYWNjdW11bGF0ZShbMSwyLDMsNCw1XSkgPT4KKyAgICAgIDEsIDMsIDYsIDEwLCAxNQorCisgICAgaXRlcnRvb2xzLmFjY3VtdWxhdGUoWzEsMiwzLDQsNV0sIG9wZXJhdG9yLm11bCkgPT4KKyAgICAgIDEsIDIsIDYsIDI0LCAxMjAKKwogCiBUaGUgb3BlcmF0b3IgbW9kdWxlCiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTU5LDUxICsxMjQ0LDYgQEAKIAogLi4gY29tbWVudAogCi0gICAgVG9waWNzIHRvIHBsYWNlCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgIFhYWCBvcy53YWxrKCkKLQotICAgIFhYWCBOZWVkIGEgbGFyZ2UgZXhhbXBsZS4KLQotICAgIEJ1dCB3aWxsIGFuIGV4YW1wbGUgYWRkIG11Y2g/ICBJJ2xsIHBvc3QgYSBmaXJzdCBkcmFmdCBhbmQgc2VlCi0gICAgd2hhdCB0aGUgY29tbWVudHMgc2F5LgotCi0uLiBjb21tZW50Ci0KLSAgICBPcmlnaW5hbCBvdXRsaW5lOgotICAgIEludHJvZHVjdGlvbgotICAgICAgICAgICAgSWRlYSBvZiBGUAotICAgICAgICAgICAgICAgICAgICBQcm9ncmFtcyBidWlsdCBvdXQgb2YgZnVuY3Rpb25zCi0gICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9ucyBhcmUgc3RyaWN0bHkgaW5wdXQtb3V0cHV0LCBubyBpbnRlcm5hbCBzdGF0ZQotICAgICAgICAgICAgT3Bwb3NlZCB0byBPTyBwcm9ncmFtbWluZywgd2hlcmUgb2JqZWN0cyBoYXZlIHN0YXRlCi0KLSAgICAgICAgICAgIFdoeSBGUD8KLSAgICAgICAgICAgICAgICAgICAgRm9ybWFsIHByb3ZhYmlsaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzaWdubWVudCBpcyBkaWZmaWN1bHQgdG8gcmVhc29uIGFib3V0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IHZlcnkgcmVsZXZhbnQgdG8gUHl0aG9uCi0gICAgICAgICAgICAgICAgICAgIE1vZHVsYXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTbWFsbCBmdW5jdGlvbnMgdGhhdCBkbyBvbmUgdGhpbmcKLSAgICAgICAgICAgICAgICAgICAgRGVidWdnYWJpbGl0eToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHRlc3QgZHVlIHRvIGxhY2sgb2Ygc3RhdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBFYXN5IHRvIHZlcmlmeSBvdXRwdXQgZnJvbSBpbnRlcm1lZGlhdGUgc3RlcHMKLSAgICAgICAgICAgICAgICAgICAgQ29tcG9zYWJpbGl0eQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBhc3NlbWJsZSBhIHRvb2xib3ggb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIG1peGVkCi0KLSAgICBUYWNrbGluZyBhIHByb2JsZW0KLSAgICAgICAgICAgIE5lZWQgYSBzaWduaWZpY2FudCBleGFtcGxlCi0KLSAgICBJdGVyYXRvcnMKLSAgICBHZW5lcmF0b3JzCi0gICAgVGhlIGl0ZXJ0b29scyBtb2R1bGUKLSAgICBMaXN0IGNvbXByZWhlbnNpb25zCi0gICAgU21hbGwgZnVuY3Rpb25zIGFuZCB0aGUgbGFtYmRhIHN0YXRlbWVudAotICAgIEJ1aWx0LWluIGZ1bmN0aW9ucwotICAgICAgICAgICAgbWFwCi0gICAgICAgICAgICBmaWx0ZXIKLQotLi4gY29tbWVudAotCiAgICAgSGFuZHkgbGl0dGxlIGZ1bmN0aW9uIGZvciBwcmludGluZyBwYXJ0IG9mIGFuIGl0ZXJhdG9yIC0tIHVzZWQKICAgICB3aGlsZSB3cml0aW5nIHRoaXMgZG9jdW1lbnQuCiAKQEAgLTEyMTQsNSArMTI1NCwzIEBACiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZShzdHIoZWxlbSkpCiAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLCAnKQogICAgICAgICBwcmludChlbGVtWy0xXSkKLQotCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vaW5kZXgucnN0IGIvRG9jL2hvd3RvL2luZGV4LnJzdAppbmRleCA4MWE0ZjhiLi4yYzlkNjk5IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vaW5kZXgucnN0CisrKyBiL0RvYy9ob3d0by9pbmRleC5yc3QKQEAgLTI4LDQgKzI4LDUgQEAKICAgIHdlYnNlcnZlcnMucnN0CiAgICBhcmdwYXJzZS5yc3QKICAgIGlwYWRkcmVzcy5yc3QKKyAgIGNsaW5pYy5yc3QKIApkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0IGIvRG9jL2hvd3RvL2xvZ2dpbmctY29va2Jvb2sucnN0CmluZGV4IDU2M2RhOWQuLmFmODg4YzIgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9sb2dnaW5nLWNvb2tib29rLnJzdAorKysgYi9Eb2MvaG93dG8vbG9nZ2luZy1jb29rYm9vay5yc3QKQEAgLTQxNiw3ICs0MTYsNyBAQAogICAgICAgIFNpbXBsZSBUQ1Agc29ja2V0LWJhc2VkIGxvZ2dpbmcgcmVjZWl2ZXIgc3VpdGFibGUgZm9yIHRlc3RpbmcuCiAgICAgICAgIiIiCiAKLSAgICAgICBhbGxvd19yZXVzZV9hZGRyZXNzID0gMQorICAgICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSBUcnVlCiAKICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdD0nbG9jYWxob3N0JywKICAgICAgICAgICAgICAgICAgICAgcG9ydD1sb2dnaW5nLmhhbmRsZXJzLkRFRkFVTFRfVENQX0xPR0dJTkdfUE9SVCwKQEAgLTY0OSw3ICs2NDksNyBAQAogbm90IG1ha2UgdXNlIG9mIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgYXQgcHJlc2VudCwgdGhvdWdoIHRoZXkgbWF5IGRvIHNvIGluIHRoZQogZnV0dXJlLiBOb3RlIHRoYXQgYXQgcHJlc2VudCwgdGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlIGRvZXMgbm90IHByb3ZpZGUKIHdvcmtpbmcgbG9jayBmdW5jdGlvbmFsaXR5IG9uIGFsbCBwbGF0Zm9ybXMgKHNlZQotaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM3NzApLgoraHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzNzcwKS4KIAogLi4gY3VycmVudG1vZHVsZTo6IGxvZ2dpbmcuaGFuZGxlcnMKIApAQCAtNzA0LDkgKzcwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIocmVjb3JkLm5hbWUpCiAgICAgICAgICAgICAgICAgbG9nZ2VyLmhhbmRsZShyZWNvcmQpICMgTm8gbGV2ZWwgb3IgZmlsdGVyIGxvZ2ljIGFwcGxpZWQgLSBqdXN0IGRvIGl0IQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6Ci0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgaW1wb3J0IHN5cywgdHJhY2ViYWNrCiAgICAgICAgICAgICAgICAgcHJpbnQoJ1dob29wcyEgUHJvYmxlbTonLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRlcnIpCkBAIC0xMzEwLDcgKzEzMDgsNyBAQAogICAgIH0KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBjb25maWd1cmF0aW9uLCB5b3UgY2FuIHNlZSB0aGUgYHJlbGV2YW50Ci1zZWN0aW9uIDxodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS4zL3RvcGljcy9sb2dnaW5nLyNjb25maWd1cmluZy1sb2dnaW5nPmBfCitzZWN0aW9uIDxodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vMS42L3RvcGljcy9sb2dnaW5nLyNjb25maWd1cmluZy1sb2dnaW5nPmBfCiBvZiB0aGUgRGphbmdvIGRvY3VtZW50YXRpb24uCiAKIC4uIF9jb29rYm9vay1yb3RhdG9yLW5hbWVyOgpAQCAtMTQxMCw3ICsxNDA4LDcgQEAKICAgICBkZWYgd29ya2VyX3Byb2Nlc3MoY29uZmlnKToKICAgICAgICAgIiIiCiAgICAgICAgIEEgbnVtYmVyIG9mIHRoZXNlIGFyZSBzcGF3bmVkIGZvciB0aGUgcHVycG9zZSBvZiBpbGx1c3RyYXRpb24uIEluCi0gICAgICAgIHByYWN0aWNlLCB0aGV5IGNvdWxkIGJlIGEgaGV0ZXJvZ2Vub3VzIGJ1bmNoIG9mIHByb2Nlc3NlcyByYXRoZXIgdGhhbgorICAgICAgICBwcmFjdGljZSwgdGhleSBjb3VsZCBiZSBhIGhldGVyb2dlbmVvdXMgYnVuY2ggb2YgcHJvY2Vzc2VzIHJhdGhlciB0aGFuCiAgICAgICAgIG9uZXMgd2hpY2ggYXJlIGlkZW50aWNhbCB0byBlYWNoIG90aGVyLgogCiAgICAgICAgIFRoaXMgaW5pdGlhbGlzZXMgbG9nZ2luZyBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBjb25maWd1cmF0aW9uLApAQCAtMjAzNSwzICsyMDMzLDMxNSBAQAogICBpbmZvcm1hdGlvbiBvbiBob3cgbG9nZ2luZyBzdXBwb3J0cyB1c2luZyB1c2VyLWRlZmluZWQgb2JqZWN0cyBpbiBpdHMKICAgY29uZmlndXJhdGlvbiwgYW5kIHNlZSB0aGUgb3RoZXIgY29va2Jvb2sgcmVjaXBlIDpyZWY6YGN1c3RvbS1oYW5kbGVyc2AgYWJvdmUuCiAKKworLi4gX2N1c3RvbS1mb3JtYXQtZXhjZXB0aW9uOgorCitDdXN0b21pemVkIGV4Y2VwdGlvbiBmb3JtYXR0aW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXJlIG1pZ2h0IGJlIHRpbWVzIHdoZW4geW91IHdhbnQgdG8gZG8gY3VzdG9taXplZCBleGNlcHRpb24gZm9ybWF0dGluZyAtIGZvcgorYXJndW1lbnQncyBzYWtlLCBsZXQncyBzYXkgeW91IHdhbnQgZXhhY3RseSBvbmUgbGluZSBwZXIgbG9nZ2VkIGV2ZW50LCBldmVuCit3aGVuIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LiBZb3UgY2FuIGRvIHRoaXMgd2l0aCBhIGN1c3RvbSBmb3JtYXR0ZXIKK2NsYXNzLCBhcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6OgorCisgICAgaW1wb3J0IGxvZ2dpbmcKKworICAgIGNsYXNzIE9uZUxpbmVFeGNlcHRpb25Gb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIpOgorICAgICAgICBkZWYgZm9ybWF0RXhjZXB0aW9uKHNlbGYsIGV4Y19pbmZvKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgRm9ybWF0IGFuIGV4Y2VwdGlvbiBzbyB0aGF0IGl0IHByaW50cyBvbiBhIHNpbmdsZSBsaW5lLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICByZXN1bHQgPSBzdXBlcihPbmVMaW5lRXhjZXB0aW9uRm9ybWF0dGVyLCBzZWxmKS5mb3JtYXRFeGNlcHRpb24oZXhjX2luZm8pCisgICAgICAgICAgICByZXR1cm4gcmVwcihyZXN1bHQpICMgb3IgZm9ybWF0IGludG8gb25lIGxpbmUgaG93ZXZlciB5b3Ugd2FudCB0bworCisgICAgICAgIGRlZiBmb3JtYXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgIHMgPSBzdXBlcihPbmVMaW5lRXhjZXB0aW9uRm9ybWF0dGVyLCBzZWxmKS5mb3JtYXQocmVjb3JkKQorICAgICAgICAgICAgaWYgcmVjb3JkLmV4Y190ZXh0OgorICAgICAgICAgICAgICAgIHMgPSBzLnJlcGxhY2UoJ1xuJywgJycpICsgJ3wnCisgICAgICAgICAgICByZXR1cm4gcworCisgICAgZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKCk6CisgICAgICAgIGZoID0gbG9nZ2luZy5GaWxlSGFuZGxlcignb3V0cHV0LnR4dCcsICd3JykKKyAgICAgICAgZiA9IE9uZUxpbmVFeGNlcHRpb25Gb3JtYXR0ZXIoJyUoYXNjdGltZSlzfCUobGV2ZWxuYW1lKXN8JShtZXNzYWdlKXN8JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyVkLyVtLyVZICVIOiVNOiVTJykKKyAgICAgICAgZmguc2V0Rm9ybWF0dGVyKGYpCisgICAgICAgIHJvb3QgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgIHJvb3Quc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKyAgICAgICAgcm9vdC5hZGRIYW5kbGVyKGZoKQorCisgICAgZGVmIG1haW4oKToKKyAgICAgICAgY29uZmlndXJlX2xvZ2dpbmcoKQorICAgICAgICBsb2dnaW5nLmluZm8oJ1NhbXBsZSBtZXNzYWdlJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeCA9IDEgLyAwCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oJ1plcm9EaXZpc2lvbkVycm9yOiAlcycsIGUpCisKKyAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICBtYWluKCkKKworV2hlbiBydW4sIHRoaXMgcHJvZHVjZXMgYSBmaWxlIHdpdGggZXhhY3RseSB0d28gbGluZXM6OgorCisgICAgMjgvMDEvMjAxNSAwNzoyMToyM3xJTkZPfFNhbXBsZSBtZXNzYWdlfAorICAgIDI4LzAxLzIwMTUgMDc6MjE6MjN8RVJST1J8WmVyb0RpdmlzaW9uRXJyb3I6IGludGVnZXIgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm98J1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgRmlsZSAibG9ndGVzdDcucHkiLCBsaW5lIDMwLCBpbiBtYWluXG4gICAgeCA9IDEgLyAwXG5aZXJvRGl2aXNpb25FcnJvcjogaW50ZWdlciBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVybyd8CisKK1doaWxlIHRoZSBhYm92ZSB0cmVhdG1lbnQgaXMgc2ltcGxpc3RpYywgaXQgcG9pbnRzIHRoZSB3YXkgdG8gaG93IGV4Y2VwdGlvbgoraW5mb3JtYXRpb24gY2FuIGJlIGZvcm1hdHRlZCB0byB5b3VyIGxpa2luZy4gVGhlIDptb2Q6YHRyYWNlYmFja2AgbW9kdWxlIG1heSBiZQoraGVscGZ1bCBmb3IgbW9yZSBzcGVjaWFsaXplZCBuZWVkcy4KKworLi4gX3Nwb2tlbi1tZXNzYWdlczoKKworU3BlYWtpbmcgbG9nZ2luZyBtZXNzYWdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBtaWdodCBiZSBzaXR1YXRpb25zIHdoZW4gaXQgaXMgZGVzaXJhYmxlIHRvIGhhdmUgbG9nZ2luZyBtZXNzYWdlcyByZW5kZXJlZAoraW4gYW4gYXVkaWJsZSByYXRoZXIgdGhhbiBhIHZpc2libGUgZm9ybWF0LiBUaGlzIGlzIGVhc3kgdG8gZG8gaWYgeW91IGhhdmUgdGV4dC0KK3RvLXNwZWVjaCAoVFRTKSBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSBpbiB5b3VyIHN5c3RlbSwgZXZlbiBpZiBpdCBkb2Vzbid0IGhhdmUKK2EgUHl0aG9uIGJpbmRpbmcuIE1vc3QgVFRTIHN5c3RlbXMgaGF2ZSBhIGNvbW1hbmQgbGluZSBwcm9ncmFtIHlvdSBjYW4gcnVuLCBhbmQKK3RoaXMgY2FuIGJlIGludm9rZWQgZnJvbSBhIGhhbmRsZXIgdXNpbmcgOm1vZDpgc3VicHJvY2Vzc2AuIEl0J3MgYXNzdW1lZCBoZXJlCit0aGF0IFRUUyBjb21tYW5kIGxpbmUgcHJvZ3JhbXMgd29uJ3QgZXhwZWN0IHRvIGludGVyYWN0IHdpdGggdXNlcnMgb3IgdGFrZSBhCitsb25nIHRpbWUgdG8gY29tcGxldGUsIGFuZCB0aGF0IHRoZSBmcmVxdWVuY3kgb2YgbG9nZ2VkIG1lc3NhZ2VzIHdpbGwgYmUgbm90IHNvCitoaWdoIGFzIHRvIHN3YW1wIHRoZSB1c2VyIHdpdGggbWVzc2FnZXMsIGFuZCB0aGF0IGl0J3MgYWNjZXB0YWJsZSB0byBoYXZlIHRoZQorbWVzc2FnZXMgc3Bva2VuIG9uZSBhdCBhIHRpbWUgcmF0aGVyIHRoYW4gY29uY3VycmVudGx5LCBUaGUgZXhhbXBsZSBpbXBsZW1lbnRhdGlvbgorYmVsb3cgd2FpdHMgZm9yIG9uZSBtZXNzYWdlIHRvIGJlIHNwb2tlbiBiZWZvcmUgdGhlIG5leHQgaXMgcHJvY2Vzc2VkLCBhbmQgdGhpcworbWlnaHQgY2F1c2Ugb3RoZXIgaGFuZGxlcnMgdG8gYmUga2VwdCB3YWl0aW5nLiBIZXJlIGlzIGEgc2hvcnQgZXhhbXBsZSBzaG93aW5nCit0aGUgYXBwcm9hY2gsIHdoaWNoIGFzc3VtZXMgdGhhdCB0aGUgYGBlc3BlYWtgYCBUVFMgcGFja2FnZSBpcyBhdmFpbGFibGU6OgorCisgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIGltcG9ydCBzeXMKKworICAgIGNsYXNzIFRUU0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICAgICAgZGVmIGVtaXQoc2VsZiwgcmVjb3JkKToKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkKKyAgICAgICAgICAgICMgU3BlYWsgc2xvd2x5IGluIGEgZmVtYWxlIEVuZ2xpc2ggdm9pY2UKKyAgICAgICAgICAgIGNtZCA9IFsnZXNwZWFrJywgJy1zMTUwJywgJy12ZW4rZjMnLCBtc2ddCisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAgICAgICAgICAjIHdhaXQgZm9yIHRoZSBwcm9ncmFtIHRvIGZpbmlzaAorICAgICAgICAgICAgcC5jb21tdW5pY2F0ZSgpCisKKyAgICBkZWYgY29uZmlndXJlX2xvZ2dpbmcoKToKKyAgICAgICAgaCA9IFRUU0hhbmRsZXIoKQorICAgICAgICByb290ID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICByb290LmFkZEhhbmRsZXIoaCkKKyAgICAgICAgIyB0aGUgZGVmYXVsdCBmb3JtYXR0ZXIganVzdCByZXR1cm5zIHRoZSBtZXNzYWdlCisgICAgICAgIHJvb3Quc2V0TGV2ZWwobG9nZ2luZy5ERUJVRykKKworICAgIGRlZiBtYWluKCk6CisgICAgICAgIGxvZ2dpbmcuaW5mbygnSGVsbG8nKQorICAgICAgICBsb2dnaW5nLmRlYnVnKCdHb29kYnllJykKKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgIGNvbmZpZ3VyZV9sb2dnaW5nKCkKKyAgICAgICAgc3lzLmV4aXQobWFpbigpKQorCitXaGVuIHJ1biwgdGhpcyBzY3JpcHQgc2hvdWxkIHNheSAiSGVsbG8iIGFuZCB0aGVuICJHb29kYnllIiBpbiBhIGZlbWFsZSB2b2ljZS4KKworVGhlIGFib3ZlIGFwcHJvYWNoIGNhbiwgb2YgY291cnNlLCBiZSBhZGFwdGVkIHRvIG90aGVyIFRUUyBzeXN0ZW1zIGFuZCBldmVuCitvdGhlciBzeXN0ZW1zIGFsdG9nZXRoZXIgd2hpY2ggY2FuIHByb2Nlc3MgbWVzc2FnZXMgdmlhIGV4dGVybmFsIHByb2dyYW1zIHJ1bgorZnJvbSBhIGNvbW1hbmQgbGluZS4KKworCisuLiBfYnVmZmVyZWQtbG9nZ2luZzoKKworQnVmZmVyaW5nIGxvZ2dpbmcgbWVzc2FnZXMgYW5kIG91dHB1dHRpbmcgdGhlbSBjb25kaXRpb25hbGx5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlcmUgbWlnaHQgYmUgc2l0dWF0aW9ucyB3aGVyZSB5b3Ugd2FudCB0byBsb2cgbWVzc2FnZXMgaW4gYSB0ZW1wb3JhcnkgYXJlYQorYW5kIG9ubHkgb3V0cHV0IHRoZW0gaWYgYSBjZXJ0YWluIGNvbmRpdGlvbiBvY2N1cnMuIEZvciBleGFtcGxlLCB5b3UgbWF5IHdhbnQgdG8KK3N0YXJ0IGxvZ2dpbmcgZGVidWcgZXZlbnRzIGluIGEgZnVuY3Rpb24sIGFuZCBpZiB0aGUgZnVuY3Rpb24gY29tcGxldGVzIHdpdGhvdXQKK2Vycm9ycywgeW91IGRvbid0IHdhbnQgdG8gY2x1dHRlciB0aGUgbG9nIHdpdGggdGhlIGNvbGxlY3RlZCBkZWJ1ZyBpbmZvcm1hdGlvbiwKK2J1dCBpZiB0aGVyZSBpcyBhbiBlcnJvciwgeW91IHdhbnQgYWxsIHRoZSBkZWJ1ZyBpbmZvcm1hdGlvbiB0byBiZSBvdXRwdXQgYXMgd2VsbAorYXMgdGhlIGVycm9yLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgd2hpY2ggc2hvd3MgaG93IHlvdSBjb3VsZCBkbyB0aGlzIHVzaW5nIGEgZGVjb3JhdG9yIGZvciB5b3VyCitmdW5jdGlvbnMgd2hlcmUgeW91IHdhbnQgbG9nZ2luZyB0byBiZWhhdmUgdGhpcyB3YXkuIEl0IG1ha2VzIHVzZSBvZiB0aGUKKzpjbGFzczpgbG9nZ2luZy5oYW5kbGVycy5NZW1vcnlIYW5kbGVyYCwgd2hpY2ggYWxsb3dzIGJ1ZmZlcmluZyBvZiBsb2dnZWQgZXZlbnRzCit1bnRpbCBzb21lIGNvbmRpdGlvbiBvY2N1cnMsIGF0IHdoaWNoIHBvaW50IHRoZSBidWZmZXJlZCBldmVudHMgYXJlIGBgZmx1c2hlZGBgCistIHBhc3NlZCB0byBhbm90aGVyIGhhbmRsZXIgKHRoZSBgYHRhcmdldGBgIGhhbmRsZXIpIGZvciBwcm9jZXNzaW5nLiBCeSBkZWZhdWx0LAordGhlIGBgTWVtb3J5SGFuZGxlcmBgIGZsdXNoZWQgd2hlbiBpdHMgYnVmZmVyIGdldHMgZmlsbGVkIHVwIG9yIGFuIGV2ZW50IHdob3NlCitsZXZlbCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYSBzcGVjaWZpZWQgdGhyZXNob2xkIGlzIHNlZW4uIFlvdSBjYW4gdXNlIHRoaXMKK3JlY2lwZSB3aXRoIGEgbW9yZSBzcGVjaWFsaXNlZCBzdWJjbGFzcyBvZiBgYE1lbW9yeUhhbmRsZXJgYCBpZiB5b3Ugd2FudCBjdXN0b20KK2ZsdXNoaW5nIGJlaGF2aW9yLgorCitUaGUgZXhhbXBsZSBzY3JpcHQgaGFzIGEgc2ltcGxlIGZ1bmN0aW9uLCBgYGZvb2BgLCB3aGljaCBqdXN0IGN5Y2xlcyB0aHJvdWdoCithbGwgdGhlIGxvZ2dpbmcgbGV2ZWxzLCB3cml0aW5nIHRvIGBgc3lzLnN0ZGVycmBgIHRvIHNheSB3aGF0IGxldmVsIGl0J3MgYWJvdXQKK3RvIGxvZyBhdCwgYW5kIHRoZW4gYWN0dWFsbHkgbG9nZ2luZyBhIG1lc3NhZ2UgdGhhdCB0aGF0IGxldmVsLiBZb3UgY2FuIHBhc3MgYQorcGFyYW1ldGVyIHRvIGBgZm9vYGAgd2hpY2gsIGlmIHRydWUsIHdpbGwgbG9nIGF0IEVSUk9SIGFuZCBDUklUSUNBTCBsZXZlbHMgLQorb3RoZXJ3aXNlLCBpdCBvbmx5IGxvZ3MgYXQgREVCVUcsIElORk8gYW5kIFdBUk5JTkcgbGV2ZWxzLgorCitUaGUgc2NyaXB0IGp1c3QgYXJyYW5nZXMgdG8gZGVjb3JhdGUgYGBmb29gYCB3aXRoIGEgZGVjb3JhdG9yIHdoaWNoIHdpbGwgZG8gdGhlCitjb25kaXRpb25hbCBsb2dnaW5nIHRoYXQncyByZXF1aXJlZC4gVGhlIGRlY29yYXRvciB0YWtlcyBhIGxvZ2dlciBhcyBhIHBhcmFtZXRlcgorYW5kIGF0dGFjaGVzIGEgbWVtb3J5IGhhbmRsZXIgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FsbCB0byB0aGUgZGVjb3JhdGVkCitmdW5jdGlvbi4gVGhlIGRlY29yYXRvciBjYW4gYmUgYWRkaXRpb25hbGx5IHBhcmFtZXRlcmlzZWQgdXNpbmcgYSB0YXJnZXQgaGFuZGxlciwKK2EgbGV2ZWwgYXQgd2hpY2ggZmx1c2hpbmcgc2hvdWxkIG9jY3VyLCBhbmQgYSBjYXBhY2l0eSBmb3IgdGhlIGJ1ZmZlci4gVGhlc2UKK2RlZmF1bHQgdG8gYSA6Y2xhc3M6YH5sb2dnaW5nLlN0cmVhbUhhbmRsZXJgIHdoaWNoIHdyaXRlcyB0byBgYHN5cy5zdGRlcnJgYCwKK2BgbG9nZ2luZy5FUlJPUmBgIGFuZCBgYDEwMGBgIHJlc3BlY3RpdmVseS4KKworSGVyZSdzIHRoZSBzY3JpcHQ6OgorCisgICAgaW1wb3J0IGxvZ2dpbmcKKyAgICBmcm9tIGxvZ2dpbmcuaGFuZGxlcnMgaW1wb3J0IE1lbW9yeUhhbmRsZXIKKyAgICBpbXBvcnQgc3lzCisKKyAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX25hbWVfXykKKyAgICBsb2dnZXIuYWRkSGFuZGxlcihsb2dnaW5nLk51bGxIYW5kbGVyKCkpCisKKyAgICBkZWYgbG9nX2lmX2Vycm9ycyhsb2dnZXIsIHRhcmdldF9oYW5kbGVyPU5vbmUsIGZsdXNoX2xldmVsPU5vbmUsIGNhcGFjaXR5PU5vbmUpOgorICAgICAgICBpZiB0YXJnZXRfaGFuZGxlciBpcyBOb25lOgorICAgICAgICAgICAgdGFyZ2V0X2hhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoKQorICAgICAgICBpZiBmbHVzaF9sZXZlbCBpcyBOb25lOgorICAgICAgICAgICAgZmx1c2hfbGV2ZWwgPSBsb2dnaW5nLkVSUk9SCisgICAgICAgIGlmIGNhcGFjaXR5IGlzIE5vbmU6CisgICAgICAgICAgICBjYXBhY2l0eSA9IDEwMAorICAgICAgICBoYW5kbGVyID0gTWVtb3J5SGFuZGxlcihjYXBhY2l0eSwgZmx1c2hMZXZlbD1mbHVzaF9sZXZlbCwgdGFyZ2V0PXRhcmdldF9oYW5kbGVyKQorCisgICAgICAgIGRlZiBkZWNvcmF0b3IoZm4pOgorICAgICAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihoYW5kbGVyKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXhjZXB0aW9uKCdjYWxsIGZhaWxlZCcpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc3VwZXIoTWVtb3J5SGFuZGxlciwgaGFuZGxlcikuZmx1c2goKQorICAgICAgICAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoYW5kbGVyKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIKKworICAgICAgICByZXR1cm4gZGVjb3JhdG9yCisKKyAgICBkZWYgd3JpdGVfbGluZShzKToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXNcbicgJSBzKQorCisgICAgZGVmIGZvbyhmYWlsPUZhbHNlKToKKyAgICAgICAgd3JpdGVfbGluZSgnYWJvdXQgdG8gbG9nIGF0IERFQlVHIC4uLicpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnQWN0dWFsbHkgbG9nZ2VkIGF0IERFQlVHJykKKyAgICAgICAgd3JpdGVfbGluZSgnYWJvdXQgdG8gbG9nIGF0IElORk8gLi4uJykKKyAgICAgICAgbG9nZ2VyLmluZm8oJ0FjdHVhbGx5IGxvZ2dlZCBhdCBJTkZPJykKKyAgICAgICAgd3JpdGVfbGluZSgnYWJvdXQgdG8gbG9nIGF0IFdBUk5JTkcgLi4uJykKKyAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0FjdHVhbGx5IGxvZ2dlZCBhdCBXQVJOSU5HJykKKyAgICAgICAgaWYgZmFpbDoKKyAgICAgICAgICAgIHdyaXRlX2xpbmUoJ2Fib3V0IHRvIGxvZyBhdCBFUlJPUiAuLi4nKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdBY3R1YWxseSBsb2dnZWQgYXQgRVJST1InKQorICAgICAgICAgICAgd3JpdGVfbGluZSgnYWJvdXQgdG8gbG9nIGF0IENSSVRJQ0FMIC4uLicpCisgICAgICAgICAgICBsb2dnZXIuY3JpdGljYWwoJ0FjdHVhbGx5IGxvZ2dlZCBhdCBDUklUSUNBTCcpCisgICAgICAgIHJldHVybiBmYWlsCisKKyAgICBkZWNvcmF0ZWRfZm9vID0gbG9nX2lmX2Vycm9ycyhsb2dnZXIpKGZvbykKKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLkRFQlVHKQorICAgICAgICB3cml0ZV9saW5lKCdDYWxsaW5nIHVuZGVjb3JhdGVkIGZvbyB3aXRoIEZhbHNlJykKKyAgICAgICAgYXNzZXJ0IG5vdCBmb28oRmFsc2UpCisgICAgICAgIHdyaXRlX2xpbmUoJ0NhbGxpbmcgdW5kZWNvcmF0ZWQgZm9vIHdpdGggVHJ1ZScpCisgICAgICAgIGFzc2VydCBmb28oVHJ1ZSkKKyAgICAgICAgd3JpdGVfbGluZSgnQ2FsbGluZyBkZWNvcmF0ZWQgZm9vIHdpdGggRmFsc2UnKQorICAgICAgICBhc3NlcnQgbm90IGRlY29yYXRlZF9mb28oRmFsc2UpCisgICAgICAgIHdyaXRlX2xpbmUoJ0NhbGxpbmcgZGVjb3JhdGVkIGZvbyB3aXRoIFRydWUnKQorICAgICAgICBhc3NlcnQgZGVjb3JhdGVkX2ZvbyhUcnVlKQorCitXaGVuIHRoaXMgc2NyaXB0IGlzIHJ1biwgdGhlIGZvbGxvd2luZyBvdXRwdXQgc2hvdWxkIGJlIG9ic2VydmVkOjoKKworICAgIENhbGxpbmcgdW5kZWNvcmF0ZWQgZm9vIHdpdGggRmFsc2UKKyAgICBhYm91dCB0byBsb2cgYXQgREVCVUcgLi4uCisgICAgYWJvdXQgdG8gbG9nIGF0IElORk8gLi4uCisgICAgYWJvdXQgdG8gbG9nIGF0IFdBUk5JTkcgLi4uCisgICAgQ2FsbGluZyB1bmRlY29yYXRlZCBmb28gd2l0aCBUcnVlCisgICAgYWJvdXQgdG8gbG9nIGF0IERFQlVHIC4uLgorICAgIGFib3V0IHRvIGxvZyBhdCBJTkZPIC4uLgorICAgIGFib3V0IHRvIGxvZyBhdCBXQVJOSU5HIC4uLgorICAgIGFib3V0IHRvIGxvZyBhdCBFUlJPUiAuLi4KKyAgICBhYm91dCB0byBsb2cgYXQgQ1JJVElDQUwgLi4uCisgICAgQ2FsbGluZyBkZWNvcmF0ZWQgZm9vIHdpdGggRmFsc2UKKyAgICBhYm91dCB0byBsb2cgYXQgREVCVUcgLi4uCisgICAgYWJvdXQgdG8gbG9nIGF0IElORk8gLi4uCisgICAgYWJvdXQgdG8gbG9nIGF0IFdBUk5JTkcgLi4uCisgICAgQ2FsbGluZyBkZWNvcmF0ZWQgZm9vIHdpdGggVHJ1ZQorICAgIGFib3V0IHRvIGxvZyBhdCBERUJVRyAuLi4KKyAgICBhYm91dCB0byBsb2cgYXQgSU5GTyAuLi4KKyAgICBhYm91dCB0byBsb2cgYXQgV0FSTklORyAuLi4KKyAgICBhYm91dCB0byBsb2cgYXQgRVJST1IgLi4uCisgICAgQWN0dWFsbHkgbG9nZ2VkIGF0IERFQlVHCisgICAgQWN0dWFsbHkgbG9nZ2VkIGF0IElORk8KKyAgICBBY3R1YWxseSBsb2dnZWQgYXQgV0FSTklORworICAgIEFjdHVhbGx5IGxvZ2dlZCBhdCBFUlJPUgorICAgIGFib3V0IHRvIGxvZyBhdCBDUklUSUNBTCAuLi4KKyAgICBBY3R1YWxseSBsb2dnZWQgYXQgQ1JJVElDQUwKKworQXMgeW91IGNhbiBzZWUsIGFjdHVhbCBsb2dnaW5nIG91dHB1dCBvbmx5IG9jY3VycyB3aGVuIGFuIGV2ZW50IGlzIGxvZ2dlZCB3aG9zZQorc2V2ZXJpdHkgaXMgRVJST1Igb3IgZ3JlYXRlciwgYnV0IGluIHRoYXQgY2FzZSwgYW55IHByZXZpb3VzIGV2ZW50cyBhdCBsb3dlcgorc2V2ZXJpdGllcyBhcmUgYWxzbyBsb2dnZWQuCisKK1lvdSBjYW4gb2YgY291cnNlIHVzZSB0aGUgY29udmVudGlvbmFsIG1lYW5zIG9mIGRlY29yYXRpb246OgorCisgICAgQGxvZ19pZl9lcnJvcnMobG9nZ2VyKQorICAgIGRlZiBmb28oZmFpbD1GYWxzZSk6CisgICAgICAgIC4uLgorCisKKy4uIF91dGMtZm9ybWF0dGluZzoKKworRm9ybWF0dGluZyB0aW1lcyB1c2luZyBVVEMgKEdNVCkgdmlhIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1NvbWV0aW1lcyB5b3Ugd2FudCB0byBmb3JtYXQgdGltZXMgdXNpbmcgVVRDLCB3aGljaCBjYW4gYmUgZG9uZSB1c2luZyBhIGNsYXNzCitzdWNoIGFzIGBVVENGb3JtYXR0ZXJgLCBzaG93biBiZWxvdzo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIGltcG9ydCB0aW1lCisKKyAgICBjbGFzcyBVVENGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIpOgorICAgICAgICBjb252ZXJ0ZXIgPSB0aW1lLmdtdGltZQorCithbmQgeW91IGNhbiB0aGVuIHVzZSB0aGUgYGBVVENGb3JtYXR0ZXJgYCBpbiB5b3VyIGNvZGUgaW5zdGVhZCBvZgorOmNsYXNzOmB+bG9nZ2luZy5Gb3JtYXR0ZXJgLiBJZiB5b3Ugd2FudCB0byBkbyB0aGF0IHZpYSBjb25maWd1cmF0aW9uLCB5b3UgY2FuCit1c2UgdGhlIDpmdW5jOmB+bG9nZ2luZy5jb25maWcuZGljdENvbmZpZ2AgQVBJIHdpdGggYW4gYXBwcm9hY2ggaWxsdXN0cmF0ZWQgYnkKK3RoZSBmb2xsb3dpbmcgY29tcGxldGUgZXhhbXBsZTo6CisKKyAgICBpbXBvcnQgbG9nZ2luZworICAgIGltcG9ydCBsb2dnaW5nLmNvbmZpZworICAgIGltcG9ydCB0aW1lCisKKyAgICBjbGFzcyBVVENGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIpOgorICAgICAgICBjb252ZXJ0ZXIgPSB0aW1lLmdtdGltZQorCisgICAgTE9HR0lORyA9IHsKKyAgICAgICAgJ3ZlcnNpb24nOiAxLAorICAgICAgICAnZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzJzogRmFsc2UsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ3V0Yyc6IHsKKyAgICAgICAgICAgICAgICAnKCknOiBVVENGb3JtYXR0ZXIsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdCc6ICclKGFzY3RpbWUpcyAlKG1lc3NhZ2UpcycsCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgJ2xvY2FsJzogeworICAgICAgICAgICAgICAgICdmb3JtYXQnOiAnJShhc2N0aW1lKXMgJShtZXNzYWdlKXMnLAorICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICAnaGFuZGxlcnMnOiB7CisgICAgICAgICAgICAnY29uc29sZTEnOiB7CisgICAgICAgICAgICAgICAgJ2NsYXNzJzogJ2xvZ2dpbmcuU3RyZWFtSGFuZGxlcicsCisgICAgICAgICAgICAgICAgJ2Zvcm1hdHRlcic6ICd1dGMnLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICdjb25zb2xlMic6IHsKKyAgICAgICAgICAgICAgICAnY2xhc3MnOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJzogJ2xvY2FsJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JzogeworICAgICAgICAgICAgJ2hhbmRsZXJzJzogWydjb25zb2xlMScsICdjb25zb2xlMiddLAorICAgICAgIH0KKyAgICB9CisKKyAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICBsb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnKExPR0dJTkcpCisgICAgICAgIGxvZ2dpbmcud2FybmluZygnVGhlIGxvY2FsIHRpbWUgaXMgJXMnLCB0aW1lLmFzY3RpbWUoKSkKKworV2hlbiB0aGlzIHNjcmlwdCBpcyBydW4sIGl0IHNob3VsZCBwcmludCBzb21ldGhpbmcgbGlrZTo6CisKKyAgICAyMDE1LTEwLTE3IDEyOjUzOjI5LDUwMSBUaGUgbG9jYWwgdGltZSBpcyBTYXQgT2N0IDE3IDEzOjUzOjI5IDIwMTUKKyAgICAyMDE1LTEwLTE3IDEzOjUzOjI5LDUwMSBUaGUgbG9jYWwgdGltZSBpcyBTYXQgT2N0IDE3IDEzOjUzOjI5IDIwMTUKKworc2hvd2luZyBob3cgdGhlIHRpbWUgaXMgZm9ybWF0dGVkIGJvdGggYXMgbG9jYWwgdGltZSBhbmQgVVRDLCBvbmUgZm9yIGVhY2gKK2hhbmRsZXIuCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vbG9nZ2luZy5yc3QgYi9Eb2MvaG93dG8vbG9nZ2luZy5yc3QKaW5kZXggNTViMWM4Ni4uNGNlMTRmOSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL2xvZ2dpbmcucnN0CisrKyBiL0RvYy9ob3d0by9sb2dnaW5nLnJzdApAQCAtOTAxLDEwICs5MDEsMTAgQEAKICAgIGRpc2sgZmlsZXMsIHJvdGF0aW5nIHRoZSBsb2cgZmlsZSBhdCBjZXJ0YWluIHRpbWVkIGludGVydmFscy4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuU29ja2V0SGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gVENQL0lQCi0gICBzb2NrZXRzLgorICAgc29ja2V0cy4gU2luY2UgMy40LCBVbml4IGRvbWFpbiBzb2NrZXRzIGFyZSBhbHNvIHN1cHBvcnRlZC4KIAogIy4gOmNsYXNzOmB+aGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyYCBpbnN0YW5jZXMgc2VuZCBtZXNzYWdlcyB0byBVRFAKLSAgIHNvY2tldHMuCisgICBzb2NrZXRzLiBTaW5jZSAzLjQsIFVuaXggZG9tYWluIHNvY2tldHMgYXJlIGFsc28gc3VwcG9ydGVkLgogCiAjLiA6Y2xhc3M6YH5oYW5kbGVycy5TTVRQSGFuZGxlcmAgaW5zdGFuY2VzIHNlbmQgbWVzc2FnZXMgdG8gYSBkZXNpZ25hdGVkCiAgICBlbWFpbCBhZGRyZXNzLgpAQCAtMTAyNyw2ICsxMDI3LDE1IEBACiBzbyB0aGF0IGlmIHRoZSBsb2dnZXIncyB0aHJlc2hvbGQgaXMgc2V0IGFib3ZlIGBgREVCVUdgYCwgdGhlIGNhbGxzIHRvCiA6ZnVuYzpgZXhwZW5zaXZlX2Z1bmMxYCBhbmQgOmZ1bmM6YGV4cGVuc2l2ZV9mdW5jMmAgYXJlIG5ldmVyIG1hZGUuCiAKKy4uIG5vdGU6OiBJbiBzb21lIGNhc2VzLCA6bWV0aDpgfkxvZ2dlci5pc0VuYWJsZWRGb3JgIGNhbiBpdHNlbGYgYmUgbW9yZQorICAgZXhwZW5zaXZlIHRoYW4geW91J2QgbGlrZSAoZS5nLiBmb3IgZGVlcGx5IG5lc3RlZCBsb2dnZXJzIHdoZXJlIGFuIGV4cGxpY2l0CisgICBsZXZlbCBpcyBvbmx5IHNldCBoaWdoIHVwIGluIHRoZSBsb2dnZXIgaGllcmFyY2h5KS4gSW4gc3VjaCBjYXNlcyAob3IgaWYgeW91CisgICB3YW50IHRvIGF2b2lkIGNhbGxpbmcgYSBtZXRob2QgaW4gdGlnaHQgbG9vcHMpLCB5b3UgY2FuIGNhY2hlIHRoZSByZXN1bHQgb2YgYQorICAgY2FsbCB0byA6bWV0aDpgfkxvZ2dlci5pc0VuYWJsZWRGb3JgIGluIGEgbG9jYWwgb3IgaW5zdGFuY2UgdmFyaWFibGUsIGFuZCB1c2UKKyAgIHRoYXQgaW5zdGVhZCBvZiBjYWxsaW5nIHRoZSBtZXRob2QgZWFjaCB0aW1lLiBTdWNoIGEgY2FjaGVkIHZhbHVlIHdvdWxkIG9ubHkKKyAgIG5lZWQgdG8gYmUgcmVjb21wdXRlZCB3aGVuIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyBkeW5hbWljYWxseQorICAgd2hpbGUgdGhlIGFwcGxpY2F0aW9uIGlzIHJ1bm5pbmcgKHdoaWNoIGlzIG5vdCBhbGwgdGhhdCBjb21tb24pLgorCiBUaGVyZSBhcmUgb3RoZXIgb3B0aW1pemF0aW9ucyB3aGljaCBjYW4gYmUgbWFkZSBmb3Igc3BlY2lmaWMgYXBwbGljYXRpb25zIHdoaWNoCiBuZWVkIG1vcmUgcHJlY2lzZSBjb250cm9sIG92ZXIgd2hhdCBsb2dnaW5nIGluZm9ybWF0aW9uIGlzIGNvbGxlY3RlZC4gSGVyZSdzIGEKIGxpc3Qgb2YgdGhpbmdzIHlvdSBjYW4gZG8gdG8gYXZvaWQgcHJvY2Vzc2luZyBkdXJpbmcgbG9nZ2luZyB3aGljaCB5b3UgZG9uJ3QKQEAgLTEwMzYsNiArMTA0NSwxMiBAQAogfCBXaGF0IHlvdSBkb24ndCB3YW50IHRvIGNvbGxlY3QgICAgICAgICAgICAgICAgfCBIb3cgdG8gYXZvaWQgY29sbGVjdGluZyBpdCAgICAgICAgICAgICB8CiArPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKIHwgSW5mb3JtYXRpb24gYWJvdXQgd2hlcmUgY2FsbHMgd2VyZSBtYWRlIGZyb20uIHwgU2V0IGBgbG9nZ2luZy5fc3JjZmlsZWBgIHRvIGBgTm9uZWBgLiAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBUaGlzIGF2b2lkcyBjYWxsaW5nICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDpmdW5jOmBzeXMuX2dldGZyYW1lYCwgd2hpY2ggbWF5IGhlbHAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgdG8gc3BlZWQgdXAgeW91ciBjb2RlIGluIGVudmlyb25tZW50cyAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBsaWtlIFB5UHkgKHdoaWNoIGNhbid0IHNwZWVkIHVwIGNvZGUgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgdXNlcyA6ZnVuYzpgc3lzLl9nZXRmcmFtZWApLCBpZiAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5kIHdoZW4gUHlQeSBzdXBwb3J0cyBQeXRob24gMy54LiAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IFRocmVhZGluZyBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICB8IFNldCBgYGxvZ2dpbmcubG9nVGhyZWFkc2BgIHRvIGBgMGBgLiAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3B5cG9ydGluZy5yc3QgYi9Eb2MvaG93dG8vcHlwb3J0aW5nLnJzdAppbmRleCA5ZDdlODU5Li41ZTg3NWNkIDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vcHlwb3J0aW5nLnJzdAorKysgYi9Eb2MvaG93dG8vcHlwb3J0aW5nLnJzdApAQCAtMTksNjA3ICsxOSwzNzUgQEAKICAgIElmIHlvdSB3b3VsZCBsaWtlIHRvIHJlYWQgb25lIGNvcmUgUHl0aG9uIGRldmVsb3BlcidzIHRha2Ugb24gd2h5IFB5dGhvbiAzCiAgICBjYW1lIGludG8gZXhpc3RlbmNlLCB5b3UgY2FuIHJlYWQgTmljayBDb2dobGFuJ3MgYFB5dGhvbiAzIFEgJiBBYF8uCiAKLSAgIElmIHlvdSBwcmVmZXIgdG8gcmVhZCBhIChmcmVlKSBib29rIG9uIHBvcnRpbmcgYSBwcm9qZWN0IHRvIFB5dGhvbiAzLAotICAgY29uc2lkZXIgcmVhZGluZyBgUG9ydGluZyB0byBQeXRob24gM2BfIGJ5IExlbm5hcnQgUmVnZWJybyB3aGljaCBzaG91bGQgY292ZXIKLSAgIG11Y2ggb2Ygd2hhdCBpcyBkaXNjdXNzZWQgaW4gdGhpcyBIT1dUTy4KLQogICAgRm9yIGhlbHAgd2l0aCBwb3J0aW5nLCB5b3UgY2FuIGVtYWlsIHRoZSBweXRob24tcG9ydGluZ18gbWFpbGluZyBsaXN0IHdpdGgKICAgIHF1ZXN0aW9ucy4KIAotVGhlIFNob3J0IFZlcnNpb24KLT09PT09PT09PT09PT09PT09CitUaGUgU2hvcnQgRXhwbGFuYXRpb24KKz09PT09PT09PT09PT09PT09PT09PQogCi0qIERlY2lkZSB3aGF0J3MgdGhlIG9sZGVzdCB2ZXJzaW9uIG9mIFB5dGhvbiAyIHlvdSB3YW50IHRvIHN1cHBvcnQgKGlmIGF0IGFsbCkKLSogTWFrZSBzdXJlIHlvdSBoYXZlIGEgdGhvcm91Z2ggdGVzdCBzdWl0ZSBhbmQgdXNlIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24KLSAgdGVzdGluZyB0byBtYWtlIHN1cmUgeW91IHN0YXkgY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9ucyBvZiBQeXRob24geW91IGNhcmUKLSAgYWJvdXQKLSogSWYgeW91IGhhdmUgZGVwZW5kZW5jaWVzLCBjaGVjayB0aGVpciBQeXRob24gMyBzdGF0dXMgdXNpbmcgY2FuaXVzZXB5dGhvbjMKLSAgKGBjb21tYW5kLWxpbmUgdG9vbCA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jYW5pdXNlcHl0aG9uMz5gX18sCi0gIGB3ZWIgYXBwIDxodHRwczovL2Nhbml1c2VweXRob24zLmNvbS8+YF9fKQorVG8gbWFrZSB5b3VyIHByb2plY3QgYmUgc2luZ2xlLXNvdXJjZSBQeXRob24gMi8zIGNvbXBhdGlibGUsIHRoZSBiYXNpYyBzdGVwcworYXJlOgogCi1XaXRoIHRoYXQgZG9uZSwgeW91ciBvcHRpb25zIGFyZToKKyMuIE9ubHkgd29ycnkgYWJvdXQgc3VwcG9ydGluZyBQeXRob24gMi43CisjLiBNYWtlIHN1cmUgeW91IGhhdmUgZ29vZCB0ZXN0IGNvdmVyYWdlIChjb3ZlcmFnZS5weV8gY2FuIGhlbHA7CisgICBgYHBpcCBpbnN0YWxsIGNvdmVyYWdlYGApCisjLiBMZWFybiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBQeXRob24gMiAmIDMKKyMuIFVzZSBNb2Rlcm5pemVfIG9yIEZ1dHVyaXplXyB0byB1cGRhdGUgeW91ciBjb2RlIChgYHBpcCBpbnN0YWxsIG1vZGVybml6ZWBgIG9yCisgICBgYHBpcCBpbnN0YWxsIGZ1dHVyZWBgLCByZXNwZWN0aXZlbHkpCisjLiBVc2UgUHlsaW50XyB0byBoZWxwIG1ha2Ugc3VyZSB5b3UgZG9uJ3QgcmVncmVzcyBvbiB5b3VyIFB5dGhvbiAzIHN1cHBvcnQKKyAgIChgYHBpcCBpbnN0YWxsIHB5bGludGBgKQorIy4gVXNlIGNhbml1c2VweXRob24zXyB0byBmaW5kIG91dCB3aGljaCBvZiB5b3VyIGRlcGVuZGVuY2llcyBhcmUgYmxvY2tpbmcgeW91cgorICAgdXNlIG9mIFB5dGhvbiAzIChgYHBpcCBpbnN0YWxsIGNhbml1c2VweXRob24zYGApCisjLiBPbmNlIHlvdXIgZGVwZW5kZW5jaWVzIGFyZSBubyBsb25nZXIgYmxvY2tpbmcgeW91LCB1c2UgY29udGludW91cyBpbnRlZ3JhdGlvbgorICAgdG8gbWFrZSBzdXJlIHlvdSBzdGF5IGNvbXBhdGlibGUgd2l0aCBQeXRob24gMiAmIDMgKHRveF8gY2FuIGhlbHAgdGVzdAorICAgYWdhaW5zdCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBQeXRob247IGBgcGlwIGluc3RhbGwgdG94YGApCiAKLSogSWYgeW91IGFyZSBkcm9wcGluZyBQeXRob24gMiBzdXBwb3J0LCB1c2UgMnRvM18gdG8gcG9ydCB0byBQeXRob24gMwotKiBJZiB5b3UgYXJlIGtlZXBpbmcgUHl0aG9uIDIgc3VwcG9ydCwgdGhlbiBzdGFydCB3cml0aW5nIFB5dGhvbiAyLzMtY29tcGF0aWJsZQotICBjb2RlIHN0YXJ0aW5nICoqVE9EQVkqKgorSWYgeW91IGFyZSBkcm9wcGluZyBzdXBwb3J0IGZvciBQeXRob24gMiBlbnRpcmVseSwgdGhlbiBhZnRlciB5b3UgbGVhcm4gdGhlCitkaWZmZXJlbmNlcyBiZXR3ZWVuIFB5dGhvbiAyICYgMyB5b3UgY2FuIHJ1biAydG8zXyBvdmVyIHlvdXIgY29kZSBhbmQgc2tpcCB0aGUKK3Jlc3Qgb2YgdGhlIHN0ZXBzIG91dGxpbmVkIGFib3ZlLgogCi0gICsgSWYgeW91IGhhdmUgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBub3QgYmVlbiBwb3J0ZWQsIHJlYWNoIG91dCB0byB0aGVtIHRvIHBvcnQKLSAgICB0aGVpciBwcm9qZWN0IHdoaWxlIHdvcmtpbmcgdG8gbWFrZSB5b3VyIGNvZGUgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzIHNvCi0gICAgeW91J3JlIHJlYWR5IHdoZW4geW91ciBkZXBlbmRlbmNpZXMgYXJlIGFsbCBwb3J0ZWQKLSAgKyBJZiBhbGwgeW91ciBkZXBlbmRlbmNpZXMgaGF2ZSBiZWVuIHBvcnRlZCAob3IgeW91IGhhdmUgbm9uZSksIGdvIGFoZWFkIGFuZAotICAgIHBvcnQgdG8gUHl0aG9uIDMKIAotKiBJZiB5b3UgYXJlIGNyZWF0aW5nIGEgbmV3IHByb2plY3QgdGhhdCB3YW50cyB0byBoYXZlIDIvMyBjb21wYXRpYmlsaXR5LAotICBjb2RlIGluIFB5dGhvbiAzIGFuZCB0aGVuIGJhY2twb3J0IHRvIFB5dGhvbiAyCitEZXRhaWxzCis9PT09PT09CiAKK0Ega2V5IHBvaW50IGFib3V0IHN1cHBvcnRpbmcgUHl0aG9uIDIgJiAzIHNpbXVsdGFuZW91c2x5IGlzIHRoYXQgeW91IGNhbiBzdGFydAorKip0b2RheSoqISBFdmVuIGlmIHlvdXIgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGluZyBQeXRob24gMyB5ZXQgdGhhdCBkb2VzCitub3QgbWVhbiB5b3UgY2FuJ3QgbW9kZXJuaXplIHlvdXIgY29kZSAqKm5vdyoqIHRvIHN1cHBvcnQgUHl0aG9uIDMuIE1vc3QgY2hhbmdlcworcmVxdWlyZWQgdG8gc3VwcG9ydCBQeXRob24gMyBsZWFkIHRvIGNsZWFuZXIgY29kZSB1c2luZyBuZXdlciBwcmFjdGljZXMgZXZlbiBpbgorUHl0aG9uIDIuCiAKLUJlZm9yZSBZb3UgQmVnaW4KLT09PT09PT09PT09PT09PT0KK0Fub3RoZXIga2V5IHBvaW50IGlzIHRoYXQgbW9kZXJuaXppbmcgeW91ciBQeXRob24gMiBjb2RlIHRvIGFsc28gc3VwcG9ydAorUHl0aG9uIDMgaXMgbGFyZ2VseSBhdXRvbWF0ZWQgZm9yIHlvdS4gV2hpbGUgeW91IG1pZ2h0IGhhdmUgdG8gbWFrZSBzb21lIEFQSQorZGVjaXNpb25zIHRoYW5rcyB0byBQeXRob24gMyBjbGFyaWZ5aW5nIHRleHQgZGF0YSB2ZXJzdXMgYmluYXJ5IGRhdGEsIHRoZQorbG93ZXItbGV2ZWwgd29yayBpcyBub3cgbW9zdGx5IGRvbmUgZm9yIHlvdSBhbmQgdGh1cyBjYW4gYXQgbGVhc3QgYmVuZWZpdCBmcm9tCit0aGUgYXV0b21hdGVkIGNoYW5nZXMgaW1tZWRpYXRlbHkuCiAKLUlmIHlvdXIgcHJvamVjdCBpcyBvbiB0aGUgQ2hlZXNlc2hvcF8vUHlQSV8sIG1ha2Ugc3VyZSBpdCBoYXMgdGhlIHByb3BlcgotYHRyb3ZlIGNsYXNzaWZpZXJzYF8gdG8gc2lnbmlmeSB3aGF0IHZlcnNpb25zIG9mIFB5dGhvbiBpdCAqKmN1cnJlbnRseSoqCi1zdXBwb3J0cy4gQXQgbWluaW11bSB5b3Ugc2hvdWxkIHNwZWNpZnkgdGhlIG1ham9yIHZlcnNpb24ocyksIGUuZy4KLWBgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDJgYCBpZiB5b3VyIHByb2plY3QgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMKLVB5dGhvbiAyLiBJdCBpcyBwcmVmZXJyYWJsZSB0aGF0IHlvdSBiZSBhcyBzcGVjaWZpYyBhcyBwb3NzaWJsZSBieSBsaXN0aW5nIGV2ZXJ5Ci1tYWpvci9taW5vciB2ZXJzaW9uIG9mIFB5dGhvbiB0aGF0IHlvdSBzdXBwb3J0LCBlLmcuIGlmIHlvdXIgcHJvamVjdCBzdXBwb3J0cwotUHl0aG9uIDIuNiBhbmQgMi43LCB0aGVuIHlvdSB3YW50IHRoZSBjbGFzc2lmaWVycyBvZjo6CitLZWVwIHRob3NlIGtleSBwb2ludHMgaW4gbWluZCB3aGlsZSB5b3UgcmVhZCBvbiBhYm91dCB0aGUgZGV0YWlscyBvZiBwb3J0aW5nCit5b3VyIGNvZGUgdG8gc3VwcG9ydCBQeXRob24gMiAmIDMgc2ltdWx0YW5lb3VzbHkuCiAKLSBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMgotIFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYKLSBQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi43CiAKLU9uY2UgeW91ciBwcm9qZWN0IHN1cHBvcnRzIFB5dGhvbiAzIHlvdSB3aWxsIHdhbnQgdG8gZ28gYmFjayBhbmQgYWRkIHRoZQotYXBwcm9wcmlhdGUgY2xhc3NpZmllcnMgZm9yIFB5dGhvbiAzIGFzIHdlbGwuIFRoaXMgaXMgaW1wb3J0YW50IGFzIHNldHRpbmcgdGhlCi1gYFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzYGAgY2xhc3NpZmllciB3aWxsIGxlYWQgdG8geW91ciBwcm9qZWN0Ci1iZWluZyBsaXN0ZWQgdW5kZXIgdGhlIGBQeXRob24gMyBQYWNrYWdlc2BfIHNlY3Rpb24gb2YgUHlQSS4KK0Ryb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDIuNiBhbmQgb2xkZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotTWFrZSBzdXJlIHlvdSBoYXZlIGEgcm9idXN0IHRlc3Qgc3VpdGUuIFlvdSBuZWVkIHRvCi1tYWtlIHN1cmUgZXZlcnl0aGluZyBjb250aW51ZXMgdG8gd29yaywganVzdCBsaWtlIHdoZW4geW91IHN1cHBvcnQgYSBuZXcKLW1pbm9yL2ZlYXR1cmUgcmVsZWFzZSBvZiBQeXRob24uIFRoaXMgbWVhbnMgbWFraW5nIHN1cmUgeW91ciB0ZXN0IHN1aXRlIGlzCi10aG9yb3VnaCBhbmQgaXMgcG9ydGVkIHByb3Blcmx5IGJldHdlZW4gUHl0aG9uIDIgJiAzIChjb25zaWRlciB1c2luZyBjb3ZlcmFnZV8KLXRvIG1lYXN1cmUgdGhhdCB5b3UgaGF2ZSBlZmZlY3RpdmUgdGVzdCBjb3ZlcmFnZSkuIFlvdSB3aWxsIGFsc28gbW9zdCBsaWtlbHkKLXdhbnQgdG8gdXNlIHNvbWV0aGluZyBsaWtlIHRveF8gdG8gYXV0b21hdGUgdGVzdGluZyBiZXR3ZWVuIGFsbCBvZiB5b3VyCi1zdXBwb3J0ZWQgdmVyc2lvbnMgb2YgUHl0aG9uLiBZb3Ugd2lsbCBhbHNvIHdhbnQgdG8gKipwb3J0IHlvdXIgdGVzdHMgZmlyc3QqKiBzbwotdGhhdCB5b3UgY2FuIG1ha2Ugc3VyZSB0aGF0IHlvdSBkZXRlY3QgYnJlYWthZ2UgZHVyaW5nIHRoZSB0cmFuc2l0aW9uLiBUZXN0cyBhbHNvCi10ZW5kIHRvIGJlIHNpbXBsZXIgdGhhbiB0aGUgY29kZSB0aGV5IGFyZSB0ZXN0aW5nIHNvIGl0IGdpdmVzIHlvdSBhbiBpZGVhIG9mIGhvdwotZWFzeSBpdCBjYW4gYmUgdG8gcG9ydCBjb2RlLgorV2hpbGUgeW91IGNhbiBtYWtlIFB5dGhvbiAyLjUgd29yayB3aXRoIFB5dGhvbiAzLCBpdCBpcyAqKm11Y2gqKiBlYXNpZXIgaWYgeW91Citvbmx5IGhhdmUgdG8gd29yayB3aXRoIFB5dGhvbiAyLjcuIElmIGRyb3BwaW5nIFB5dGhvbiAyLjUgaXMgbm90IGFuCitvcHRpb24gdGhlbiB0aGUgc2l4XyBwcm9qZWN0IGNhbiBoZWxwIHlvdSBzdXBwb3J0IFB5dGhvbiAyLjUgJiAzIHNpbXVsdGFuZW91c2x5CisoYGBwaXAgaW5zdGFsbCBzaXhgYCkuIERvIHJlYWxpemUsIHRob3VnaCwgdGhhdCBuZWFybHkgYWxsIHRoZSBwcm9qZWN0cyBsaXN0ZWQKK2luIHRoaXMgSE9XVE8gd2lsbCBub3QgYmUgYXZhaWxhYmxlIHRvIHlvdS4KIAotRHJvcCBzdXBwb3J0IGZvciBvbGRlciBQeXRob24gdmVyc2lvbnMgaWYgcG9zc2libGUuIGBQeXRob24gMi41YF8KLWludHJvZHVjZWQgYSBsb3Qgb2YgdXNlZnVsIHN5bnRheCBhbmQgbGlicmFyaWVzIHdoaWNoIGhhdmUgYmVjb21lIGlkaW9tYXRpYwotaW4gUHl0aG9uIDMuIGBQeXRob24gMi42YF8gaW50cm9kdWNlZCBmdXR1cmUgc3RhdGVtZW50cyB3aGljaCBtYWtlcwotY29tcGF0aWJpbGl0eSBtdWNoIGVhc2llciBpZiB5b3UgYXJlIGdvaW5nIGZyb20gUHl0aG9uIDIgdG8gMy4KLWBQeXRob24gMi43YF8gY29udGludWVzIHRoZSB0cmVuZCBpbiB0aGUgc3RkbGliLiBDaG9vc2UgdGhlIG5ld2VzdCB2ZXJzaW9uCi1vZiBQeXRob24gd2hpY2ggeW91IGJlbGlldmUgY2FuIGJlIHlvdXIgbWluaW11bSBzdXBwb3J0IHZlcnNpb24KLWFuZCB3b3JrIGZyb20gdGhlcmUuCitJZiB5b3UgYXJlIGFibGUgdG8gc2tpcCBQeXRob24gMi41IGFuZCBvbGRlciwgdGhlbiB0aGUgcmVxdWlyZWQgY2hhbmdlcwordG8geW91ciBjb2RlIHNob3VsZCBjb250aW51ZSB0byBsb29rIGFuZCBmZWVsIGxpa2UgaWRpb21hdGljIFB5dGhvbiBjb2RlLiBBdAord29yc3QgeW91IHdpbGwgaGF2ZSB0byB1c2UgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgbWV0aG9kIGluIHNvbWUgaW5zdGFuY2VzIG9yCitoYXZlIHRvIGltcG9ydCBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgdXNpbmcgYSBidWlsdC1pbiBvbmUsIGJ1dCBvdGhlcndpc2UgdGhlCitvdmVyYWxsIHRyYW5zZm9ybWF0aW9uIHNob3VsZCBub3QgZmVlbCBmb3JlaWduIHRvIHlvdS4KIAotVGFyZ2V0IHRoZSBuZXdlc3QgdmVyc2lvbiBvZiBQeXRob24gMyB0aGF0IHlvdSBjYW4uIEJleW9uZCBqdXN0IHRoZSB1c3VhbAotYnVnZml4ZXMsIGNvbXBhdGliaWxpdHkgaGFzIGNvbnRpbnVlZCB0byBpbXByb3ZlIGJldHdlZW4gUHl0aG9uIDIgYW5kIDMgYXMgdGltZQotaGFzIHBhc3NlZC4gRS5nLiBQeXRob24gMy4zIGFkZGVkIGJhY2sgdGhlIGBgdWBgIHByZWZpeCBmb3IKLXN0cmluZ3MsIG1ha2luZyBzb3VyY2UtY29tcGF0aWJsZSBQeXRob24gY29kZSBlYXNpZXIgdG8gd3JpdGUuCitCdXQgeW91IHNob3VsZCBhaW0gZm9yIG9ubHkgc3VwcG9ydGluZyBQeXRob24gMi43LiBQeXRob24gMi42IGlzIG5vIGxvbmdlcgorc3VwcG9ydGVkIGFuZCB0aHVzIGlzIG5vdCByZWNlaXZpbmcgYnVnZml4ZXMuIFRoaXMgbWVhbnMgKip5b3UqKiB3aWxsIGhhdmUgdG8KK3dvcmsgYXJvdW5kIGFueSBpc3N1ZXMgeW91IGNvbWUgYWNyb3NzIHdpdGggUHl0aG9uIDIuNi4gVGhlcmUgYXJlIGFsc28gc29tZQordG9vbHMgbWVudGlvbmVkIGluIHRoaXMgSE9XVE8gd2hpY2ggZG8gbm90IHN1cHBvcnQgUHl0aG9uIDIuNiAoZS5nLiwgUHlsaW50XyksCithbmQgdGhpcyB3aWxsIGJlY29tZSBtb3JlIGNvbW1vbnBsYWNlIGFzIHRpbWUgZ29lcyBvbi4gSXQgd2lsbCBzaW1wbHkgYmUgZWFzaWVyCitmb3IgeW91IGlmIHlvdSBvbmx5IHN1cHBvcnQgdGhlIHZlcnNpb25zIG9mIFB5dGhvbiB0aGF0IHlvdSBoYXZlIHRvIHN1cHBvcnQuCiAKK01ha2Ugc3VyZSB5b3Ugc3BlY2lmeSB0aGUgcHJvcGVyIHZlcnNpb24gc3VwcG9ydCBpbiB5b3VyIGBgc2V0dXAucHlgYCBmaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Xcml0aW5nIFNvdXJjZS1Db21wYXRpYmxlIFB5dGhvbiAyLzMgQ29kZQotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0luIHlvdXIgYGBzZXR1cC5weWBgIGZpbGUgeW91IHNob3VsZCBoYXZlIHRoZSBwcm9wZXIgYHRyb3ZlIGNsYXNzaWZpZXJgXworc3BlY2lmeWluZyB3aGF0IHZlcnNpb25zIG9mIFB5dGhvbiB5b3Ugc3VwcG9ydC4gQXMgeW91ciBwcm9qZWN0IGRvZXMgbm90IHN1cHBvcnQKK1B5dGhvbiAzIHlldCB5b3Ugc2hvdWxkIGF0IGxlYXN0IGhhdmUKK2BgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIgOjogT25seWBgIHNwZWNpZmllZC4gSWRlYWxseSB5b3Ugc2hvdWxkCithbHNvIHNwZWNpZnkgZWFjaCBtYWpvci9taW5vciB2ZXJzaW9uIG9mIFB5dGhvbiB0aGF0IHlvdSBkbyBzdXBwb3J0LCBlLmcuCitgYFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjdgYC4KIAotT3ZlciB0aGUgeWVhcnMgdGhlIFB5dGhvbiBjb21tdW5pdHkgaGFzIGRpc2NvdmVyZWQgdGhhdCB0aGUgZWFzaWVzdCB3YXkgdG8KLXN1cHBvcnQgYm90aCBQeXRob24gMiBhbmQgMyBpbiBwYXJhbGxlbCBpcyB0byB3cml0ZSBQeXRob24gY29kZSB0aGF0IHdvcmtzIGluCi1laXRoZXIgdmVyc2lvbi4gV2hpbGUgdGhpcyBtaWdodCBzb3VuZCBjb3VudGVyLWludHVpdGl2ZSBhdCBmaXJzdCwgaXQgYWN0dWFsbHkKLWlzIG5vdCBkaWZmaWN1bHQgYW5kIHR5cGljYWxseSBvbmx5IHJlcXVpcmVzIGZvbGxvd2luZyBzb21lIHNlbGVjdAotKG5vbi1pZGlvbWF0aWMpIHByYWN0aWNlcyBhbmQgdXNpbmcgc29tZSBrZXkgcHJvamVjdHMgdG8gaGVscCBtYWtlIGJyaWRnaW5nCi1iZXR3ZWVuIFB5dGhvbiAyIGFuZCAzIGVhc2llci4KK0hhdmUgZ29vZCB0ZXN0IGNvdmVyYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1Qcm9qZWN0cyB0byBDb25zaWRlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0KK09uY2UgeW91IGhhdmUgeW91ciBjb2RlIHN1cHBvcnRpbmcgdGhlIG9sZGVzdCB2ZXJzaW9uIG9mIFB5dGhvbiAyIHlvdSB3YW50IGl0Cit0bywgeW91IHdpbGwgd2FudCB0byBtYWtlIHN1cmUgeW91ciB0ZXN0IHN1aXRlIGhhcyBnb29kIGNvdmVyYWdlLiBBIGdvb2QgcnVsZSBvZgordGh1bWIgaXMgdGhhdCBpZiB5b3Ugd2FudCB0byBiZSBjb25maWRlbnQgZW5vdWdoIGluIHlvdXIgdGVzdCBzdWl0ZSB0aGF0IGFueQorZmFpbHVyZXMgdGhhdCBhcHBlYXIgYWZ0ZXIgaGF2aW5nIHRvb2xzIHJld3JpdGUgeW91ciBjb2RlIGFyZSBhY3R1YWwgYnVncyBpbiB0aGUKK3Rvb2xzIGFuZCBub3QgaW4geW91ciBjb2RlLiBJZiB5b3Ugd2FudCBhIG51bWJlciB0byBhaW0gZm9yLCB0cnkgdG8gZ2V0IG92ZXIgODAlCitjb3ZlcmFnZSAoYW5kIGRvbid0IGZlZWwgYmFkIGlmIHlvdSBjYW4ndCBlYXNpbHkgZ2V0IHBhc3QgOTAlKS4gSWYgeW91Citkb24ndCBhbHJlYWR5IGhhdmUgYSB0b29sIHRvIG1lYXN1cmUgdGVzdCBjb3ZlcmFnZSB0aGVuIGNvdmVyYWdlLnB5XyBpcworcmVjb21tZW5kZWQuCiAKLVRoZSBsb3dlc3QgbGV2ZWwgbGlicmFyeSBmb3Igc3VwcG9ydGluZyBQeXRob24gMiAmIDMgc2ltdWx0YW5lb3VzbHkgaXMgc2l4Xy4KLVJlYWRpbmcgdGhyb3VnaCBpdHMgZG9jdW1lbnRhdGlvbiB3aWxsIGdpdmUgeW91IGFuIGlkZWEgb2Ygd2hlcmUgZXhhY3RseSB0aGUKLVB5dGhvbiBsYW5ndWFnZSBjaGFuZ2VkIGJldHdlZW4gdmVyc2lvbnMgMiAmIDMgYW5kIHRodXMgd2hhdCB5b3Ugd2lsbCB3YW50IHRoZQotbGlicmFyeSB0byBoZWxwIHlvdSBjb250aW51ZSB0byBzdXBwb3J0LgorTGVhcm4gdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gUHl0aG9uIDIgJiAzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRvIGhlbHAgYXV0b21hdGUgcG9ydGluZyB5b3VyIGNvZGUgb3ZlciB0byB1c2luZyBzaXgsIHlvdSBjYW4gdXNlCi1tb2Rlcm5pemVfLiBUaGlzIHByb2plY3Qgd2lsbCBhdHRlbXB0IHRvIHJld3JpdGUgeW91ciBjb2RlIHRvIGJlIGFzIG1vZGVybiBhcwotcG9zc2libGUgd2hpbGUgdXNpbmcgc2l4IHRvIHNtb290aCBvdXQgYW55IGRpZmZlcmVuY2VzIGJldHdlZW4gUHl0aG9uIDIgJiAzLgorT25jZSB5b3UgaGF2ZSB5b3VyIGNvZGUgd2VsbC10ZXN0ZWQgeW91IGFyZSByZWFkeSB0byBiZWdpbiBwb3J0aW5nIHlvdXIgY29kZSB0bworUHl0aG9uIDMhIEJ1dCB0byBmdWxseSB1bmRlcnN0YW5kIGhvdyB5b3VyIGNvZGUgaXMgZ29pbmcgdG8gY2hhbmdlIGFuZCB3aGF0Cit5b3Ugd2FudCB0byBsb29rIG91dCBmb3Igd2hpbGUgeW91IGNvZGUsIHlvdSB3aWxsIHdhbnQgdG8gbGVhcm4gd2hhdCBjaGFuZ2VzCitQeXRob24gMyBtYWtlcyBpbiB0ZXJtcyBvZiBQeXRob24gMi4gVHlwaWNhbGx5IHRoZSB0d28gYmVzdCB3YXlzIG9mIGRvaW5nIHRoYXQKK2lzIHJlYWRpbmcgdGhlIGAiV2hhdCdzIE5ldyJgXyBkb2MgZm9yIGVhY2ggcmVsZWFzZSBvZiBQeXRob24gMyBhbmQgdGhlCitgUG9ydGluZyB0byBQeXRob24gM2BfIGJvb2sgKHdoaWNoIGlzIGZyZWUgb25saW5lKS4gVGhlcmUgaXMgYWxzbyBhIGhhbmR5CitgY2hlYXQgc2hlZXRgXyBmcm9tIHRoZSBQeXRob24tRnV0dXJlIHByb2plY3QuCiAKLUlmIHlvdSB3YW50IHRvIHdyaXRlIHlvdXIgY29tcGF0aWJsZSBjb2RlIHRvIGZlZWwgbW9yZSBsaWtlIFB5dGhvbiAzIHRoZXJlIGlzCi10aGUgZnV0dXJlXyBwcm9qZWN0LiBJdCB0cmllcyB0byBwcm92aWRlIGJhY2twb3J0cyBvZiBvYmplY3RzIGZyb20gUHl0aG9uIDMgc28KLXRoYXQgeW91IGNhbiB1c2UgdGhlbSBmcm9tIFB5dGhvbiAyLWNvbXBhdGlibGUgY29kZSwgZS5nLiByZXBsYWNpbmcgdGhlCi1gYGJ5dGVzYGAgdHlwZSBmcm9tIFB5dGhvbiAyIHdpdGggdGhlIG9uZSBmcm9tIFB5dGhvbiAzLgotSXQgYWxzbyBwcm92aWRlcyBhIHRyYW5zbGF0aW9uIHNjcmlwdCBsaWtlIG1vZGVybml6ZSAoaXRzIHRyYW5zbGF0aW9uIGNvZGUgaXMKLWFjdHVhbGx5IHBhcnRpYWxseSBiYXNlZCBvbiBpdCkgdG8gaGVscCBzdGFydCB3b3JraW5nIHdpdGggYSBwcmUtZXhpc3RpbmcgY29kZQotYmFzZS4gSXQgaXMgYWxzbyB1bmlxdWUgaW4gdGhhdCBpdHMgdHJhbnNsYXRpb24gc2NyaXB0IHdpbGwgYWxzbyBwb3J0IFB5dGhvbiAzCi1jb2RlIGJhY2t3YXJkcyBhcyB3ZWxsIGFzIFB5dGhvbiAyIGNvZGUgZm9yd2FyZHMuCiAKK1VwZGF0ZSB5b3VyIGNvZGUKKy0tLS0tLS0tLS0tLS0tLS0KIAotVGlwcyAmIFRyaWNrcwotLS0tLS0tLS0tLS0tLQorT25jZSB5b3UgZmVlbCBsaWtlIHlvdSBrbm93IHdoYXQgaXMgZGlmZmVyZW50IGluIFB5dGhvbiAzIGNvbXBhcmVkIHRvIFB5dGhvbiAyLAoraXQncyB0aW1lIHRvIHVwZGF0ZSB5b3VyIGNvZGUhIFlvdSBoYXZlIGEgY2hvaWNlIGJldHdlZW4gdHdvIHRvb2xzIGluIHBvcnRpbmcKK3lvdXIgY29kZSBhdXRvbWF0aWNhbGx5OiBNb2Rlcm5pemVfIGFuZCBGdXR1cml6ZV8uIFdoaWNoIHRvb2wgeW91IGNob29zZSB3aWxsCitkZXBlbmQgb24gaG93IG11Y2ggbGlrZSBQeXRob24gMyB5b3Ugd2FudCB5b3VyIGNvZGUgdG8gYmUuIEZ1dHVyaXplXyBkb2VzIGl0cworYmVzdCB0byBtYWtlIFB5dGhvbiAzIGlkaW9tcyBhbmQgcHJhY3RpY2VzIGV4aXN0IGluIFB5dGhvbiAyLCBlLmcuIGJhY2twb3J0aW5nCit0aGUgYGBieXRlc2BgIHR5cGUgZnJvbSBQeXRob24gMyBzbyB0aGF0IHlvdSBoYXZlIHNlbWFudGljIHBhcml0eSBiZXR3ZWVuIHRoZQorbWFqb3IgdmVyc2lvbnMgb2YgUHl0aG9uLiBNb2Rlcm5pemVfLAorb24gdGhlIG90aGVyIGhhbmQsIGlzIG1vcmUgY29uc2VydmF0aXZlIGFuZCB0YXJnZXRzIGEgUHl0aG9uIDIvMyBzdWJzZXQgb2YKK1B5dGhvbiwgcmVseWluZyBvbiBzaXhfIHRvIGhlbHAgcHJvdmlkZSBjb21wYXRpYmlsaXR5LgogCi1UbyBoZWxwIHdpdGggd3JpdGluZyBzb3VyY2UtY29tcGF0aWJsZSBjb2RlIHVzaW5nIG9uZSBvZiB0aGUgcHJvamVjdHMgbWVudGlvbmVkCi1pbiBgUHJvamVjdHMgdG8gQ29uc2lkZXJgXywgY29uc2lkZXIgZm9sbG93aW5nIHRoZSBiZWxvdyBzdWdnZXN0aW9ucy4gU29tZSBvZgotdGhlbSBhcmUgaGFuZGxlZCBieSB0aGUgc3VnZ2VzdGVkIHByb2plY3RzLCBzbyBpZiB5b3UgZG8gdXNlIG9uZSBvZiB0aGVtIHRoZW4KLXJlYWQgdGhlaXIgZG9jdW1lbnRhdGlvbiBmaXJzdCB0byBzZWUgd2hpY2ggc3VnZ2VzdGlvbnMgYmVsb3cgd2lsbCB0YWtlbiBjYXJlIG9mCi1mb3IgeW91LgorUmVnYXJkbGVzcyBvZiB3aGljaCB0b29sIHlvdSBjaG9vc2UsIHRoZXkgd2lsbCB1cGRhdGUgeW91ciBjb2RlIHRvIHJ1biB1bmRlcgorUHl0aG9uIDMgd2hpbGUgc3RheWluZyBjb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gb2YgUHl0aG9uIDIgeW91IHN0YXJ0ZWQgd2l0aC4KK0RlcGVuZGluZyBvbiBob3cgY29uc2VydmF0aXZlIHlvdSB3YW50IHRvIGJlLCB5b3UgbWF5IHdhbnQgdG8gcnVuIHRoZSB0b29sIG92ZXIKK3lvdXIgdGVzdCBzdWl0ZSBmaXJzdCBhbmQgdmlzdWFsbHkgaW5zcGVjdCB0aGUgZGlmZiB0byBtYWtlIHN1cmUgdGhlCit0cmFuc2Zvcm1hdGlvbiBpcyBhY2N1cmF0ZS4gQWZ0ZXIgeW91IGhhdmUgdHJhbnNmb3JtZWQgeW91ciB0ZXN0IHN1aXRlIGFuZAordmVyaWZpZWQgdGhhdCBhbGwgdGhlIHRlc3RzIHN0aWxsIHBhc3MgYXMgZXhwZWN0ZWQsIHRoZW4geW91IGNhbiB0cmFuc2Zvcm0geW91cgorYXBwbGljYXRpb24gY29kZSBrbm93aW5nIHRoYXQgYW55IHRlc3RzIHdoaWNoIGZhaWwgaXMgYSB0cmFuc2xhdGlvbiBmYWlsdXJlLgogCi1TdXBwb3J0IFB5dGhvbiAyLjcKLS8vLy8vLy8vLy8vLy8vLy8vLworVW5mb3J0dW5hdGVseSB0aGUgdG9vbHMgY2FuJ3QgYXV0b21hdGUgZXZlcnl0aGluZyB0byBtYWtlIHlvdXIgY29kZSB3b3JrIHVuZGVyCitQeXRob24gMyBhbmQgc28gdGhlcmUgYXJlIGEgaGFuZGZ1bCBvZiB0aGluZ3MgeW91IHdpbGwgbmVlZCB0byB1cGRhdGUgbWFudWFsbHkKK3RvIGdldCBmdWxsIFB5dGhvbiAzIHN1cHBvcnQgKHdoaWNoIG9mIHRoZXNlIHN0ZXBzIGFyZSBuZWNlc3NhcnkgdmFyeSBiZXR3ZWVuCit0aGUgdG9vbHMpLiBSZWFkIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgdG9vbCB5b3UgY2hvb3NlIHRvIHVzZSB0byBzZWUgd2hhdCBpdAorZml4ZXMgYnkgZGVmYXVsdCBhbmQgd2hhdCBpdCBjYW4gZG8gb3B0aW9uYWxseSB0byBrbm93IHdoYXQgd2lsbCAobm90KSBiZSBmaXhlZAorZm9yIHlvdSBhbmQgd2hhdCB5b3UgbWF5IGhhdmUgdG8gZml4IG9uIHlvdXIgb3duIChlLmcuIHVzaW5nIGBgaW8ub3BlbigpYGAgb3ZlcgordGhlIGJ1aWx0LWluIGBgb3BlbigpYGAgZnVuY3Rpb24gaXMgb2ZmIGJ5IGRlZmF1bHQgaW4gTW9kZXJuaXplKS4gTHVja2lseSwKK3Rob3VnaCwgdGhlcmUgYXJlIG9ubHkgYSBjb3VwbGUgb2YgdGhpbmdzIHRvIHdhdGNoIG91dCBmb3Igd2hpY2ggY2FuIGJlCitjb25zaWRlcmVkIGxhcmdlIGlzc3VlcyB0aGF0IG1heSBiZSBoYXJkIHRvIGRlYnVnIGlmIG5vdCB3YXRjaGVkIGZvci4KIAotQXMgYSBmaXJzdCBzdGVwLCBtYWtlIHN1cmUgdGhhdCB5b3VyIHByb2plY3QgaXMgY29tcGF0aWJsZSB3aXRoIGBQeXRob24gMi43YF8uCi1UaGlzIGlzIGp1c3QgZ29vZCB0byBkbyBhcyBQeXRob24gMi43IGlzIHRoZSBsYXN0IHJlbGVhc2Ugb2YgUHl0aG9uIDIgYW5kIHRodXMKLXdpbGwgYmUgdXNlZCBmb3IgYSByYXRoZXIgbG9uZyB0aW1lLiBJdCBhbHNvIGFsbG93cyBmb3IgdXNlIG9mIHRoZSBgYC0zYGAgZmxhZwotdG8gUHl0aG9uIHRvIGhlbHAgZGlzY292ZXIgcGxhY2VzIGluIHlvdXIgY29kZSB3aGVyZSBjb21wYXRpYmlsaXR5IG1pZ2h0IGJlIGFuCi1pc3N1ZSAodGhlIGBgLTNgYCBmbGFnIGlzIGluIFB5dGhvbiAyLjYgYnV0IFB5dGhvbiAyLjcgYWRkcyBtb3JlIHdhcm5pbmdzKS4KK0RpdmlzaW9uCisrKysrKysrKwogCi1UcnkgdG8gU3VwcG9ydCBgUHl0aG9uIDIuNmBfIGFuZCBOZXdlciBPbmx5Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitJbiBQeXRob24gMywgYGA1IC8gMiA9PSAyLjVgYCBhbmQgbm90IGBgMmBgOyBhbGwgZGl2aXNpb24gYmV0d2VlbiBgYGludGBgIHZhbHVlcworcmVzdWx0IGluIGEgYGBmbG9hdGBgLiBUaGlzIGNoYW5nZSBoYXMgYWN0dWFsbHkgYmVlbiBwbGFubmVkIHNpbmNlIFB5dGhvbiAyLjIKK3doaWNoIHdhcyByZWxlYXNlZCBpbiAyMDAyLiBTaW5jZSB0aGVuIHVzZXJzIGhhdmUgYmVlbiBlbmNvdXJhZ2VkIHRvIGFkZAorYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uYGAgdG8gYW55IGFuZCBhbGwgZmlsZXMgd2hpY2ggdXNlIHRoZSBgYC9gYCBhbmQKK2BgLy9gYCBvcGVyYXRvcnMgb3IgdG8gYmUgcnVubmluZyB0aGUgaW50ZXJwcmV0ZXIgd2l0aCB0aGUgYGAtUWBgIGZsYWcuIElmIHlvdQoraGF2ZSBub3QgYmVlbiBkb2luZyB0aGlzIHRoZW4geW91IHdpbGwgbmVlZCB0byBnbyB0aHJvdWdoIHlvdXIgY29kZSBhbmQgZG8gdHdvCit0aGluZ3M6CiAKLVdoaWxlIG5vdCBwb3NzaWJsZSBmb3IgYWxsIHByb2plY3RzLCBpZiB5b3UgY2FuIHN1cHBvcnQgYFB5dGhvbiAyLjZgXyBhbmQgbmV3ZXIKLSoqb25seSoqLCB5b3VyIGxpZmUgd2lsbCBiZSBtdWNoIGVhc2llci4gVmFyaW91cyBmdXR1cmUgc3RhdGVtZW50cywgc3RkbGliCi1hZGRpdGlvbnMsIGV0Yy4gZXhpc3Qgb25seSBpbiBQeXRob24gMi42IGFuZCBsYXRlciB3aGljaCBncmVhdGx5IGFzc2lzdCBpbgotc3VwcG9ydGluZyBQeXRob24gMy4gQnV0IGlmIHlvdSBwcm9qZWN0IG11c3Qga2VlcCBzdXBwb3J0IGZvciBgUHl0aG9uIDIuNWBfIHRoZW4KLWl0IGlzIHN0aWxsIHBvc3NpYmxlIHRvIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgUHl0aG9uIDMuCi0KLUJlbG93IGFyZSB0aGUgYmVuZWZpdHMgeW91IGdhaW4gaWYgeW91IG9ubHkgaGF2ZSB0byBzdXBwb3J0IFB5dGhvbiAyLjYgYW5kCi1uZXdlci4gU29tZSBvZiB0aGVzZSBvcHRpb25zIGFyZSBwZXJzb25hbCBjaG9pY2Ugd2hpbGUgb3RoZXJzIGFyZQotKipzdHJvbmdseSoqIHJlY29tbWVuZGVkICh0aGUgb25lcyB0aGF0IGFyZSBtb3JlIGZvciBwZXJzb25hbCBjaG9pY2UgYXJlCi1sYWJlbGVkIGFzIHN1Y2gpLiAgSWYgeW91IGNvbnRpbnVlIHRvIHN1cHBvcnQgb2xkZXIgdmVyc2lvbnMgb2YgUHl0aG9uIHRoZW4geW91Ci1hdCBsZWFzdCBuZWVkIHRvIHdhdGNoIG91dCBmb3Igc2l0dWF0aW9ucyB0aGF0IHRoZXNlIHNvbHV0aW9ucyBmaXggYW5kIGhhbmRsZQotdGhlbSBhcHByb3ByaWF0ZWx5ICh3aGljaCBpcyB3aGVyZSBsaWJyYXJ5IGhlbHAgZnJvbSBlLmcuIHNpeF8gY29tZXMgaW4gaGFuZHkpLgotCi0KLWBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbmBgCi0nJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwotCi1JdCB3aWxsIG5vdCBvbmx5IGdldCB5b3UgdXNlZCB0byB0eXBpbmcgYGBwcmludCgpYGAgYXMgYSBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEKLXN0YXRlbWVudCwgYnV0IGl0IHdpbGwgYWxzbyBnaXZlIHlvdSB0aGUgdmFyaW91cyBiZW5lZml0cyB0aGUgZnVuY3Rpb24gaGFzIG92ZXIKLXRoZSBQeXRob24gMiBzdGF0ZW1lbnQgKHNpeF8gcHJvdmlkZXMgYSBmdW5jdGlvbiBpZiB5b3Ugc3VwcG9ydCBQeXRob24gMi41IG9yCi1vbGRlcikuCi0KLQotYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHNgYAotJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwotCi1JZiB5b3UgY2hvb3NlIHRvIHVzZSB0aGlzIGZ1dHVyZSBzdGF0ZW1lbnQgdGhlbiBhbGwgc3RyaW5nIGxpdGVyYWxzIGluCi1QeXRob24gMiB3aWxsIGJlIGFzc3VtZWQgdG8gYmUgVW5pY29kZSAoYXMgaXMgYWxyZWFkeSB0aGUgY2FzZSBpbiBQeXRob24gMykuCi1JZiB5b3UgY2hvb3NlIG5vdCB0byB1c2UgdGhpcyBmdXR1cmUgc3RhdGVtZW50IHRoZW4geW91IHNob3VsZCBtYXJrIGFsbCBvZiB5b3VyCi10ZXh0IHN0cmluZ3Mgd2l0aCBhIGBgdWBgIHByZWZpeCBhbmQgb25seSBzdXBwb3J0IFB5dGhvbiAzLjMgb3IgbmV3ZXIuIEJ1dCB5b3UKLWFyZSAqKnN0cm9uZ2x5KiogYWR2aXNlZCB0byBkbyBvbmUgb3IgdGhlIG90aGVyIChzaXhfIHByb3ZpZGVzIGEgZnVuY3Rpb24gaW4KLWNhc2UgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBmdXR1cmUgc3RhdGVtZW50ICoqYW5kKiogeW91IHdhbnQgdG8gc3VwcG9ydAotUHl0aG9uIDMuMiBvciBvbGRlcikuCi0KLQotQnl0ZXMvc3RyaW5nIGxpdGVyYWxzCi0nJycnJycnJycnJycnJycnJycnJycKLQotVGhpcyBpcyBhICoqdmVyeSoqIGltcG9ydGFudCBvbmUuIFByZWZpeCBQeXRob24gMiBzdHJpbmdzIHRoYXQKLWFyZSBtZWFudCB0byBjb250YWluIGJ5dGVzIHdpdGggYSBgYGJgYCBwcmVmaXggdG8gdmVyeSBjbGVhcmx5IGRlbGluZWF0ZQotd2hhdCBpcyBhbmQgaXMgbm90IGEgUHl0aG9uIDMgdGV4dCBzdHJpbmcgKHNpeF8gcHJvdmlkZXMgYSBmdW5jdGlvbiB0byB1c2UgZm9yCi1QeXRob24gMi41IGNvbXBhdGliaWxpdHkpLgotCi1UaGlzIHBvaW50IGNhbm5vdCBiZSBzdHJlc3NlZCBlbm91Z2g6IG1ha2Ugc3VyZSB5b3Uga25vdyB3aGF0IGFsbCBvZiB5b3VyIHN0cmluZwotbGl0ZXJhbHMgaW4gUHl0aG9uIDIgYXJlIG1lYW50IHRvIGJlIGluIFB5dGhvbiAzLiBBbnkgc3RyaW5nIGxpdGVyYWwgdGhhdAotc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYnl0ZXMgc2hvdWxkIGhhdmUgdGhlIGBgYmBgIHByZWZpeC4gQW55IHN0cmluZyBsaXRlcmFsCi10aGF0IHNob3VsZCBiZSBVbmljb2RlL3RleHQgaW4gUHl0aG9uIDIgc2hvdWxkIGVpdGhlciBoYXZlIHRoZSBgYHVgYCBsaXRlcmFsCi0oc3VwcG9ydGVkLCBidXQgaWdub3JlZCwgaW4gUHl0aG9uIDMuMyBhbmQgbGF0ZXIpIG9yIHlvdSBzaG91bGQgaGF2ZQotYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHNgYCBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLiBCdXQgdGhlIGtleQotcG9pbnQgaXMgeW91IHNob3VsZCBrbm93IGhvdyBQeXRob24gMyB3aWxsIHRyZWF0IGV2ZXJ5IG9uZSBvbmUgb2YgeW91ciBzdHJpbmcKLWxpdGVyYWxzIGFuZCB5b3Ugc2hvdWxkIG1hcmsgdGhlbSBhcyBhcHByb3ByaWF0ZS4KLQotVGhlcmUgYXJlIHNvbWUgZGlmZmVyZW5jZXMgYmV0d2VlbiBieXRlIGxpdGVyYWxzIGluIFB5dGhvbiAyIGFuZCB0aG9zZSBpbgotUHl0aG9uIDMgdGhhbmtzIHRvIHRoZSBieXRlcyB0eXBlIGp1c3QgYmVpbmcgYW4gYWxpYXMgdG8gYGBzdHJgYCBpbiBQeXRob24gMi4KLVNlZSB0aGUgYEhhbmRsZSBDb21tb24gIkdvdGNoYXMiYF8gc2VjdGlvbiBmb3Igd2hhdCB0byB3YXRjaCBvdXQgZm9yLgotCi1gYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0YGAKLScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwotRGlzY3Vzc2VkIGluIG1vcmUgZGV0YWlsIGJlbG93LCBidXQgeW91IHNob3VsZCB1c2UgdGhpcyBmdXR1cmUgc3RhdGVtZW50IHRvCi1wcmV2ZW50IHlvdXJzZWxmIGZyb20gYWNjaWRlbnRhbGx5IHVzaW5nIGltcGxpY2l0IHJlbGF0aXZlIGltcG9ydHMuCi0KLQotU3VwcG9ydGluZyBgUHl0aG9uIDIuNWBfIGFuZCBOZXdlciBPbmx5Ci0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotSWYgeW91IGFyZSBzdXBwb3J0aW5nIGBQeXRob24gMi41YF8gYW5kIG5ld2VyIHRoZXJlIGFyZSBzdGlsbCBzb21lIGZlYXR1cmVzIG9mCi1QeXRob24gdGhhdCB5b3UgY2FuIHV0aWxpemUuCi0KLQotYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydGBgCi0nJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKLQotSW1wbGljaXQgcmVsYXRpdmUgaW1wb3J0cyAoZS5nLiwgaW1wb3J0aW5nIGBgc3BhbS5iYWNvbmBgIGZyb20gd2l0aGluCi1gYHNwYW0uZWdnc2BgIHdpdGggdGhlIHN0YXRlbWVudCBgYGltcG9ydCBiYWNvbmBgKSBkbyBub3Qgd29yayBpbiBQeXRob24gMy4KLVRoaXMgZnV0dXJlIHN0YXRlbWVudCBtb3ZlcyBhd2F5IGZyb20gdGhhdCBhbmQgYWxsb3dzIHRoZSB1c2Ugb2YgZXhwbGljaXQKLXJlbGF0aXZlIGltcG9ydHMgKGUuZy4sIGBgZnJvbSAuIGltcG9ydCBiYWNvbmBgKS4KLQotSW4gYFB5dGhvbiAyLjVgXyB5b3UgbXVzdCB1c2UKLXRoZSBfX2Z1dHVyZV9fIHN0YXRlbWVudCB0byBnZXQgdG8gdXNlIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydHMgYW5kIHByZXZlbnQKLWltcGxpY2l0IG9uZXMuIEluIGBQeXRob24gMi42YF8gZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQKLXRoZSBzdGF0ZW1lbnQsIGJ1dCB5b3Ugc3RpbGwgd2FudCB0aGUgX19mdXR1cmVfXyBzdGF0ZW1lbnQgdG8gcHJldmVudCBpbXBsaWNpdAotcmVsYXRpdmUgaW1wb3J0cy4gSW4gYFB5dGhvbiAyLjdgXyB0aGUgX19mdXR1cmVfXyBzdGF0ZW1lbnQgaXMgbm90IG5lZWRlZC4gSW4KLW90aGVyIHdvcmRzLCB1bmxlc3MgeW91IGFyZSBvbmx5IHN1cHBvcnRpbmcgUHl0aG9uIDIuNyBvciBhIHZlcnNpb24gZWFybGllcgotdGhhbiBQeXRob24gMi41LCB1c2UgdGhpcyBfX2Z1dHVyZV9fIHN0YXRlbWVudC4KLQotCi1NYXJrIGFsbCBVbmljb2RlIHN0cmluZ3Mgd2l0aCBhIGBgdWBgIHByZWZpeAotJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCi0KLVdoaWxlIFB5dGhvbiAyLjYgaGFzIGEgYGBfX2Z1dHVyZV9fYGAgc3RhdGVtZW50IHRvIGF1dG9tYXRpY2FsbHkgY2F1c2UgUHl0aG9uIDIKLXRvIHRyZWF0IGFsbCBzdHJpbmcgbGl0ZXJhbHMgYXMgVW5pY29kZSwgUHl0aG9uIDIuNSBkb2VzIG5vdCBoYXZlIHRoYXQgc2hvcnRjdXQuCi1UaGlzIG1lYW5zIHlvdSBzaG91bGQgZ28gdGhyb3VnaCBhbmQgbWFyayBhbGwgc3RyaW5nIGxpdGVyYWxzIHdpdGggYSBgYHVgYAotcHJlZml4IHRvIHR1cm4gdGhlbSBleHBsaWNpdGx5IGludG8gdGV4dCBzdHJpbmdzIHdoZXJlIGFwcHJvcHJpYXRlIGFuZCBvbmx5Ci1zdXBwb3J0IFB5dGhvbiAzLjMgb3IgbmV3ZXIuIE90aGVyd2lzZSB1c2UgYSBwcm9qZWN0IGxpa2Ugc2l4XyB3aGljaCBwcm92aWRlcyBhCi1mdW5jdGlvbiB0byBwYXNzIGFsbCB0ZXh0IHN0cmluZyBsaXRlcmFscyB0aHJvdWdoLgotCi0KLUNhcHR1cmluZyB0aGUgQ3VycmVudGx5IFJhaXNlZCBFeGNlcHRpb24KLScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKLQotSW4gUHl0aG9uIDIuNSBhbmQgZWFybGllciB0aGUgc3ludGF4IHRvIGFjY2VzcyB0aGUgY3VycmVudCBleGNlcHRpb24gaXM6OgotCi0gICB0cnk6Ci0gICAgIHJhaXNlIEV4Y2VwdGlvbigpCi0gICBleGNlcHQgRXhjZXB0aW9uLCBleGM6Ci0gICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycuCi0gICAgIHBhc3MKLQotVGhpcyBzeW50YXggY2hhbmdlZCBpbiBQeXRob24gMyAoYW5kIGJhY2twb3J0ZWQgdG8gYFB5dGhvbiAyLjZgXyBhbmQgbGF0ZXIpCi10bzo6Ci0KLSAgIHRyeToKLSAgICAgcmFpc2UgRXhjZXB0aW9uKCkKLSAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgotICAgICAjIEN1cnJlbnQgZXhjZXB0aW9uIGlzICdleGMnLgotICAgICAjIEluIFB5dGhvbiAzLCAnZXhjJyBpcyByZXN0cmljdGVkIHRvIHRoZSBibG9jazsgaW4gUHl0aG9uIDIuNi8yLjcgaXQgd2lsbCAibGVhayIuCi0gICAgIHBhc3MKLQotQmVjYXVzZSBvZiB0aGlzIHN5bnRheCBjaGFuZ2UgeW91IG11c3QgY2hhbmdlIGhvdyB5b3UgY2FwdHVyZSB0aGUgY3VycmVudAotZXhjZXB0aW9uIGluIFB5dGhvbiAyLjUgYW5kIGVhcmxpZXIgdG86OgotCi0gICB0cnk6Ci0gICAgIHJhaXNlIEV4Y2VwdGlvbigpCi0gICBleGNlcHQgRXhjZXB0aW9uOgotICAgICBpbXBvcnQgc3lzCi0gICAgIGV4YyA9IHN5cy5leGNfaW5mbygpWzFdCi0gICAgICMgQ3VycmVudCBleGNlcHRpb24gaXMgJ2V4YycuCi0gICAgIHBhc3MKLQotWW91IGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcmFpc2VkIGV4Y2VwdGlvbiBmcm9tCi06ZnVuYzpgc3lzLmV4Y19pbmZvYCB0aGFuIHNpbXBseSB0aGUgY3VycmVudCBleGNlcHRpb24gaW5zdGFuY2UsIGJ1dCB5b3UgbW9zdAotbGlrZWx5IGRvbid0IG5lZWQgaXQuCi0KLS4uIG5vdGU6OgotICAgSW4gUHl0aG9uIDMsIHRoZSB0cmFjZWJhY2sgaXMgYXR0YWNoZWQgdG8gdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZQotICAgdGhyb3VnaCB0aGUgYGBfX3RyYWNlYmFja19fYGAgYXR0cmlidXRlLiBJZiB0aGUgaW5zdGFuY2UgaXMgc2F2ZWQgaW4KLSAgIGEgbG9jYWwgdmFyaWFibGUgdGhhdCBwZXJzaXN0cyBvdXRzaWRlIG9mIHRoZSBgYGV4Y2VwdGBgIGJsb2NrLCB0aGUKLSAgIHRyYWNlYmFjayB3aWxsIGNyZWF0ZSBhIHJlZmVyZW5jZSBjeWNsZSB3aXRoIHRoZSBjdXJyZW50IGZyYW1lIGFuZCBpdHMKLSAgIGRpY3Rpb25hcnkgb2YgbG9jYWwgdmFyaWFibGVzLiAgVGhpcyB3aWxsIGRlbGF5IHJlY2xhaW1pbmcgZGVhZAotICAgcmVzb3VyY2VzIHVudGlsIHRoZSBuZXh0IGN5Y2xpYyA6dGVybTpgZ2FyYmFnZSBjb2xsZWN0aW9uYCBwYXNzLgotCi0gICBJbiBQeXRob24gMiwgdGhpcyBwcm9ibGVtIG9ubHkgb2NjdXJzIGlmIHlvdSBzYXZlIHRoZSB0cmFjZWJhY2sgaXRzZWxmCi0gICAoZS5nLiB0aGUgdGhpcmQgZWxlbWVudCBvZiB0aGUgdHVwbGUgcmV0dXJuZWQgYnkgOmZ1bmM6YHN5cy5leGNfaW5mb2ApCi0gICBpbiBhIHZhcmlhYmxlLgotCisjLiBBZGQgYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uYGAgdG8geW91ciBmaWxlcworIy4gVXBkYXRlIGFueSBkaXZpc2lvbiBvcGVyYXRvciBhcyBuZWNlc3NhcnkgdG8gZWl0aGVyIHVzZSBgYC8vYGAgdG8gdXNlIGZsb29yCisgICBkaXZpc2lvbiBvciBjb250aW51ZSB1c2luZyBgYC9gYCBhbmQgZXhwZWN0IGEgZmxvYXQKIAotSGFuZGxlIENvbW1vbiAiR290Y2hhcyIKLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitUaGUgcmVhc29uIHRoYXQgYGAvYGAgaXNuJ3Qgc2ltcGx5IHRyYW5zbGF0ZWQgdG8gYGAvL2BgIGF1dG9tYXRpY2FsbHkgaXMgdGhhdCBpZgorYW4gb2JqZWN0IGRlZmluZXMgYSBgYF9fdHJ1ZWRpdl9fYGAgbWV0aG9kIGJ1dCBub3QgYGBfX2Zsb29yZGl2X19gYCB0aGVuIHlvdXIKK2NvZGUgd291bGQgYmVnaW4gdG8gZmFpbCAoZS5nLiBhIHVzZXItZGVmaW5lZCBjbGFzcyB0aGF0IHVzZXMgYGAvYGAgdG8KK3NpZ25pZnkgc29tZSBvcGVyYXRpb24gYnV0IG5vdCBgYC8vYGAgZm9yIHRoZSBzYW1lIHRoaW5nIG9yIGF0IGFsbCkuCiAKLVRoZXNlIGFyZSB0aGluZ3MgdG8gd2F0Y2ggb3V0IGZvciBubyBtYXR0ZXIgd2hhdCB2ZXJzaW9uIG9mIFB5dGhvbiAyIHlvdSBhcmUKLXN1cHBvcnRpbmcgd2hpY2ggYXJlIG5vdCBzeW50YWN0aWMgY29uc2lkZXJhdGlvbnMuCitUZXh0IHZlcnN1cyBiaW5hcnkgZGF0YQorKysrKysrKysrKysrKysrKysrKysrKysKIAorSW4gUHl0aG9uIDIgeW91IGNvdWxkIHVzZSB0aGUgYGBzdHJgYCB0eXBlIGZvciBib3RoIHRleHQgYW5kIGJpbmFyeSBkYXRhLgorVW5mb3J0dW5hdGVseSB0aGlzIGNvbmZsdWVuY2Ugb2YgdHdvIGRpZmZlcmVudCBjb25jZXB0cyBjb3VsZCBsZWFkIHRvIGJyaXR0bGUKK2NvZGUgd2hpY2ggc29tZXRpbWVzIHdvcmtlZCBmb3IgZWl0aGVyIGtpbmQgb2YgZGF0YSwgc29tZXRpbWVzIG5vdC4gSXQgYWxzbworY291bGQgbGVhZCB0byBjb25mdXNpbmcgQVBJcyBpZiBwZW9wbGUgZGlkbid0IGV4cGxpY2l0bHkgc3RhdGUgdGhhdCBzb21ldGhpbmcKK3RoYXQgYWNjZXB0ZWQgYGBzdHJgYCBhY2NlcHRlZCBlaXRoZXIgdGV4dCBvciBiaW5hcnkgZGF0YSBpbnN0ZWFkIG9mIG9uZQorc3BlY2lmaWMgdHlwZS4gVGhpcyBjb21wbGljYXRlZCB0aGUgc2l0dWF0aW9uIGVzcGVjaWFsbHkgZm9yIGFueW9uZSBzdXBwb3J0aW5nCittdWx0aXBsZSBsYW5ndWFnZXMgYXMgQVBJcyB3b3VsZG4ndCBib3RoZXIgZXhwbGljaXRseSBzdXBwb3J0aW5nIGBgdW5pY29kZWBgCit3aGVuIHRoZXkgY2xhaW1lZCB0ZXh0IGRhdGEgc3VwcG9ydC4KIAotYGBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGRpdmlzaW9uYGAKLScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCitUbyBtYWtlIHRoZSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRleHQgYW5kIGJpbmFyeSBkYXRhIGNsZWFyZXIgYW5kIG1vcmUKK3Byb25vdW5jZWQsIFB5dGhvbiAzIGRpZCB3aGF0IG1vc3QgbGFuZ3VhZ2VzIGNyZWF0ZWQgaW4gdGhlIGFnZSBvZiB0aGUgaW50ZXJuZXQKK2hhdmUgZG9uZSBhbmQgbWFkZSB0ZXh0IGFuZCBiaW5hcnkgZGF0YSBkaXN0aW5jdCB0eXBlcyB0aGF0IGNhbm5vdCBibGluZGx5IGJlCittaXhlZCB0b2dldGhlciAoUHl0aG9uIHByZWRhdGVzIHdpZGVzcHJlYWQgYWNjZXNzIHRvIHRoZSBpbnRlcm5ldCkuIEZvciBhbnkgY29kZQordGhhdCBvbmx5IGRlYWxzIHdpdGggdGV4dCBvciBvbmx5IGJpbmFyeSBkYXRhLCB0aGlzIHNlcGFyYXRpb24gZG9lc24ndCBwb3NlIGFuCitpc3N1ZS4gQnV0IGZvciBjb2RlIHRoYXQgaGFzIHRvIGRlYWwgd2l0aCBib3RoLCBpdCBkb2VzIG1lYW4geW91IG1pZ2h0IGhhdmUgdG8KK25vdyBjYXJlIGFib3V0IHdoZW4geW91IGFyZSB1c2luZyB0ZXh0IGNvbXBhcmVkIHRvIGJpbmFyeSBkYXRhLCB3aGljaCBpcyB3aHkKK3RoaXMgY2Fubm90IGJlIGVudGlyZWx5IGF1dG9tYXRlZC4KIAotV2hpbGUgdGhlIGV4YWN0IHNhbWUgb3V0Y29tZSBjYW4gYmUgaGFkIGJ5IHVzaW5nIHRoZSBgYC1RbmV3YGAgYXJndW1lbnQgdG8KLVB5dGhvbiwgdXNpbmcgdGhpcyBmdXR1cmUgc3RhdGVtZW50IGxpZnRzIHRoZSByZXF1aXJlbWVudCB0aGF0IHlvdXIgdXNlcnMgdXNlCi10aGUgZmxhZyB0byBnZXQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIG9mIGRpdmlzaW9uIGluIFB5dGhvbiAzCi0oZS5nLiwgYGAxLzIgPT0gMC41OyAxLy8yID09IDBgYCkuCitUbyBzdGFydCwgeW91IHdpbGwgbmVlZCB0byBkZWNpZGUgd2hpY2ggQVBJcyB0YWtlIHRleHQgYW5kIHdoaWNoIHRha2UgYmluYXJ5CisoaXQgaXMgKipoaWdobHkqKiByZWNvbW1lbmRlZCB5b3UgZG9uJ3QgZGVzaWduIEFQSXMgdGhhdCBjYW4gdGFrZSBib3RoIGR1ZSB0bwordGhlIGRpZmZpY3VsdHkgb2Yga2VlcGluZyB0aGUgY29kZSB3b3JraW5nOyBhcyBzdGF0ZWQgZWFybGllciBpdCBpcyBkaWZmaWN1bHQgdG8KK2RvIHdlbGwpLiBJbiBQeXRob24gMiB0aGlzIG1lYW5zIG1ha2luZyBzdXJlIHRoZSBBUElzIHRoYXQgdGFrZSB0ZXh0IGNhbiB3b3JrCit3aXRoIGBgdW5pY29kZWBgIGluIFB5dGhvbiAyIGFuZCB0aG9zZSB0aGF0IHdvcmsgd2l0aCBiaW5hcnkgZGF0YSB3b3JrIHdpdGggdGhlCitgYGJ5dGVzYGAgdHlwZSBmcm9tIFB5dGhvbiAzIGFuZCB0aHVzIGEgc3Vic2V0IG9mIGBgc3RyYGAgaW4gUHl0aG9uIDIgKHdoaWNoIHRoZQorYGBieXRlc2BgIHR5cGUgaW4gUHl0aG9uIDIgaXMgYW4gYWxpYXMgZm9yKS4gVXN1YWxseSB0aGUgYmlnZ2VzdCBpc3N1ZSBpcworcmVhbGl6aW5nIHdoaWNoIG1ldGhvZHMgZXhpc3QgZm9yIHdoaWNoIHR5cGVzIGluIFB5dGhvbiAyICYgMyBzaW11bHRhbmVvdXNseQorKGZvciB0ZXh0IHRoYXQncyBgYHVuaWNvZGVgYCBpbiBQeXRob24gMiBhbmQgYGBzdHJgYCBpbiBQeXRob24gMywgZm9yIGJpbmFyeQordGhhdCdzIGBgc3RyYGAvYGBieXRlc2BgIGluIFB5dGhvbiAyIGFuZCBgYGJ5dGVzYGAgaW4gUHl0aG9uIDMpLiBUaGUgZm9sbG93aW5nCit0YWJsZSBsaXN0cyB0aGUgKip1bmlxdWUqKiBtZXRob2RzIG9mIGVhY2ggZGF0YSB0eXBlIGFjcm9zcyBQeXRob24gMiAmIDMKKyhlLmcuLCB0aGUgYGBkZWNvZGUoKWBgIG1ldGhvZCBpcyB1c2FibGUgb24gdGhlIGVxdWl2YWxlbnQgYmluYXJ5IGRhdGEgdHlwZSBpbgorZWl0aGVyIFB5dGhvbiAyIG9yIDMsIGJ1dCBpdCBjYW4ndCBiZSB1c2VkIGJ5IHRoZSB0ZXh0IGRhdGEgdHlwZSBjb25zaXN0ZW50bHkKK2JldHdlZW4gUHl0aG9uIDIgYW5kIDMgYmVjYXVzZSBgYHN0cmBgIGluIFB5dGhvbiAzIGRvZXNuJ3QgaGF2ZSB0aGUgbWV0aG9kKS4KIAorPT09PT09PT09PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PQorKipUZXh0IGRhdGEqKiAgICAgICAgICAgICoqQmluYXJ5IGRhdGEqKgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorX19tb2RfXyAoYGAlYGAgb3BlcmF0b3IpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitcICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitlbmNvZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2Zvcm1hdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraXNkZWNpbWFsCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitpc251bWVyaWMKKz09PT09PT09PT09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT0KIAorTWFraW5nIHRoZSBkaXN0aW5jdGlvbiBlYXNpZXIgdG8gaGFuZGxlIGNhbiBiZSBhY2NvbXBsaXNoZWQgYnkgZW5jb2RpbmcgYW5kCitkZWNvZGluZyBiZXR3ZWVuIGJpbmFyeSBkYXRhIGFuZCB0ZXh0IGF0IHRoZSBlZGdlIG9mIHlvdXIgY29kZS4gVGhpcyBtZWFucyB0aGF0Cit3aGVuIHlvdSByZWNlaXZlIHRleHQgaW4gYmluYXJ5IGRhdGEsIHlvdSBzaG91bGQgaW1tZWRpYXRlbHkgZGVjb2RlIGl0LiBBbmQgaWYKK3lvdXIgY29kZSBuZWVkcyB0byBzZW5kIHRleHQgYXMgYmluYXJ5IGRhdGEgdGhlbiBlbmNvZGUgaXQgYXMgbGF0ZSBhcyBwb3NzaWJsZS4KK1RoaXMgYWxsb3dzIHlvdXIgY29kZSB0byB3b3JrIHdpdGggb25seSB0ZXh0IGludGVybmFsbHkgYW5kIHRodXMgZWxpbWluYXRlcworaGF2aW5nIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCB0eXBlIG9mIGRhdGEgeW91IGFyZSB3b3JraW5nIHdpdGguCiAKLVNwZWNpZnkgd2hlbiBvcGVuaW5nIGEgZmlsZSBhcyBiaW5hcnkKLScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKK1RoZSBuZXh0IGlzc3VlIGlzIG1ha2luZyBzdXJlIHlvdSBrbm93IHdoZXRoZXIgdGhlIHN0cmluZyBsaXRlcmFscyBpbiB5b3VyIGNvZGUKK3JlcHJlc2VudCB0ZXh0IG9yIGJpbmFyeSBkYXRhLiBBdCBtaW5pbXVtIHlvdSBzaG91bGQgYWRkIGEgYGBiYGAgcHJlZml4IHRvIGFueQorbGl0ZXJhbCB0aGF0IHByZXNlbnRzIGJpbmFyeSBkYXRhLiBGb3IgdGV4dCB5b3Ugc2hvdWxkIGVpdGhlciB1c2UgdGhlCitgYGZyb20gX19mdXR1cmVfXyBpbXBvcnQgdW5pY29kZV9saXRlcmFsc2BgIHN0YXRlbWVudCBvciBhZGQgYSBgYHVgYCBwcmVmaXggdG8KK3RoZSB0ZXh0IGxpdGVyYWwuCiAKK0FzIHBhcnQgb2YgdGhpcyBkaWNob3RvbXkgeW91IGFsc28gbmVlZCB0byBiZSBjYXJlZnVsIGFib3V0IG9wZW5pbmcgZmlsZXMuCiBVbmxlc3MgeW91IGhhdmUgYmVlbiB3b3JraW5nIG9uIFdpbmRvd3MsIHRoZXJlIGlzIGEgY2hhbmNlIHlvdSBoYXZlIG5vdCBhbHdheXMKIGJvdGhlcmVkIHRvIGFkZCB0aGUgYGBiYGAgbW9kZSB3aGVuIG9wZW5pbmcgYSBiaW5hcnkgZmlsZSAoZS5nLiwgYGByYmBgIGZvcgogYmluYXJ5IHJlYWRpbmcpLiAgVW5kZXIgUHl0aG9uIDMsIGJpbmFyeSBmaWxlcyBhbmQgdGV4dCBmaWxlcyBhcmUgY2xlYXJseQogZGlzdGluY3QgYW5kIG11dHVhbGx5IGluY29tcGF0aWJsZTsgc2VlIHRoZSA6bW9kOmBpb2AgbW9kdWxlIGZvciBkZXRhaWxzLgogVGhlcmVmb3JlLCB5b3UgKiptdXN0KiogbWFrZSBhIGRlY2lzaW9uIG9mIHdoZXRoZXIgYSBmaWxlIHdpbGwgYmUgdXNlZCBmb3IKLWJpbmFyeSBhY2Nlc3MgKGFsbG93aW5nIHRvIHJlYWQgYW5kL29yIHdyaXRlIGJ5dGVzIGRhdGEpIG9yIHRleHQgYWNjZXNzCi0oYWxsb3dpbmcgdG8gcmVhZCBhbmQvb3Igd3JpdGUgdW5pY29kZSBkYXRhKS4KK2JpbmFyeSBhY2Nlc3MgKGFsbG93aW5nIHRvIHJlYWQgYW5kL29yIHdyaXRlIGJpbmFyeSBkYXRhKSBvciB0ZXh0IGFjY2VzcworKGFsbG93aW5nIHRvIHJlYWQgYW5kL29yIHdyaXRlIHRleHQgZGF0YSkuIFlvdSBzaG91bGQgYWxzbyB1c2UgOmZ1bmM6YGlvLm9wZW5gCitmb3Igb3BlbmluZyBmaWxlcyBpbnN0ZWFkIG9mIHRoZSBidWlsdC1pbiA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24gYXMgdGhlIDptb2Q6YGlvYAorbW9kdWxlIGlzIGNvbnNpc3RlbnQgZnJvbSBQeXRob24gMiB0byAzIHdoaWxlIHRoZSBidWlsdC1pbiA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24KK2lzIG5vdCAoaW4gUHl0aG9uIDMgaXQncyBhY3R1YWxseSA6ZnVuYzpgaW8ub3BlbmApLgogCi1UZXh0IGZpbGVzCi0nJycnJycnJycnCitUaGUgY29uc3RydWN0b3JzIG9mIGJvdGggYGBzdHJgYCBhbmQgYGBieXRlc2BgIGhhdmUgZGlmZmVyZW50IHNlbWFudGljcyBmb3IgdGhlCitzYW1lIGFyZ3VtZW50cyBiZXR3ZWVuIFB5dGhvbiAyICYgMy4gUGFzc2luZyBhbiBpbnRlZ2VyIHRvIGBgYnl0ZXNgYCBpbiBQeXRob24gMgord2lsbCBnaXZlIHlvdSB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbnRlZ2VyOiBgYGJ5dGVzKDMpID09ICczJ2BgLgorQnV0IGluIFB5dGhvbiAzLCBhbiBpbnRlZ2VyIGFyZ3VtZW50IHRvIGBgYnl0ZXNgYCB3aWxsIGdpdmUgeW91IGEgYnl0ZXMgb2JqZWN0CithcyBsb25nIGFzIHRoZSBpbnRlZ2VyIHNwZWNpZmllZCwgZmlsbGVkIHdpdGggbnVsbCBieXRlczoKK2BgYnl0ZXMoMykgPT0gYidceDAwXHgwMFx4MDAnYGAuIEEgc2ltaWxhciB3b3JyeSBpcyBuZWNlc3Nhcnkgd2hlbiBwYXNzaW5nIGEKK2J5dGVzIG9iamVjdCB0byBgYHN0cmBgLiBJbiBQeXRob24gMiB5b3UganVzdCBnZXQgdGhlIGJ5dGVzIG9iamVjdCBiYWNrOgorYGBzdHIoYiczJykgPT0gYiczJ2BgLiBCdXQgaW4gUHl0aG9uIDMgeW91IGdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorYnl0ZXMgb2JqZWN0OiBgYHN0cihiJzMnKSA9PSAiYiczJyJgYC4KIAotVGV4dCBmaWxlcyBjcmVhdGVkIHVzaW5nIGBgb3BlbigpYGAgdW5kZXIgUHl0aG9uIDIgcmV0dXJuIGJ5dGUgc3RyaW5ncywKLXdoaWxlIHVuZGVyIFB5dGhvbiAzIHRoZXkgcmV0dXJuIHVuaWNvZGUgc3RyaW5ncy4gIERlcGVuZGluZyBvbiB5b3VyIHBvcnRpbmcKLXN0cmF0ZWd5LCB0aGlzIGNhbiBiZSBhbiBpc3N1ZS4KK0ZpbmFsbHksIHRoZSBpbmRleGluZyBvZiBiaW5hcnkgZGF0YSByZXF1aXJlcyBjYXJlZnVsIGhhbmRsaW5nIChzbGljaW5nIGRvZXMKKyoqbm90KiogcmVxdWlyZSBhbnkgc3BlY2lhbCBoYW5kbGluZykuIEluIFB5dGhvbiAyLAorYGBiJzEyMydbMV0gPT0gYicyJ2BgIHdoaWxlIGluIFB5dGhvbiAzIGBgYicxMjMnWzFdID09IDUwYGAuIEJlY2F1c2UgYmluYXJ5IGRhdGEKK2lzIHNpbXBseSBhIGNvbGxlY3Rpb24gb2YgYmluYXJ5IG51bWJlcnMsIFB5dGhvbiAzIHJldHVybnMgdGhlIGludGVnZXIgdmFsdWUgZm9yCit0aGUgYnl0ZSB5b3UgaW5kZXggb24uIEJ1dCBpbiBQeXRob24gMiBiZWNhdXNlIGBgYnl0ZXMgPT0gc3RyYGAsIGluZGV4aW5nCityZXR1cm5zIGEgb25lLWl0ZW0gc2xpY2Ugb2YgYnl0ZXMuIFRoZSBzaXhfIHByb2plY3QgaGFzIGEgZnVuY3Rpb24KK25hbWVkIGBgc2l4LmluZGV4Ynl0ZXMoKWBgIHdoaWNoIHdpbGwgcmV0dXJuIGFuIGludGVnZXIgbGlrZSBpbiBQeXRob24gMzoKK2Bgc2l4LmluZGV4Ynl0ZXMoYicxMjMnLCAxKWBgLgogCi1JZiB5b3Ugd2FudCB0ZXh0IGZpbGVzIHRvIHJldHVybiB1bmljb2RlIHN0cmluZ3MgaW4gUHl0aG9uIDIsIHlvdSBoYXZlIHR3bwotcG9zc2liaWxpdGllczoKK1RvIHN1bW1hcml6ZToKIAotKiBVbmRlciBQeXRob24gMi42IGFuZCBoaWdoZXIsIHVzZSA6ZnVuYzpgaW8ub3BlbmAuICBTaW5jZSA6ZnVuYzpgaW8ub3BlbmAKLSAgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgZnVuY3Rpb24gaW4gYm90aCBQeXRob24gMiBhbmQgUHl0aG9uIDMsIGl0IHdpbGwKLSAgaGVscCBpcm9uIG91dCBhbnkgaXNzdWVzIHRoYXQgbWlnaHQgYXJpc2UuCisjLiBEZWNpZGUgd2hpY2ggb2YgeW91ciBBUElzIHRha2UgdGV4dCBhbmQgd2hpY2ggdGFrZSBiaW5hcnkgZGF0YQorIy4gTWFrZSBzdXJlIHRoYXQgeW91ciBjb2RlIHRoYXQgd29ya3Mgd2l0aCB0ZXh0IGFsc28gd29ya3Mgd2l0aCBgYHVuaWNvZGVgYCBhbmQKKyAgIGNvZGUgZm9yIGJpbmFyeSBkYXRhIHdvcmtzIHdpdGggYGBieXRlc2BgIGluIFB5dGhvbiAyIChzZWUgdGhlIHRhYmxlIGFib3ZlCisgICBmb3Igd2hhdCBtZXRob2RzIHlvdSBjYW5ub3QgdXNlIGZvciBlYWNoIHR5cGUpCisjLiBNYXJrIGFsbCBiaW5hcnkgbGl0ZXJhbHMgd2l0aCBhIGBgYmBgIHByZWZpeCwgdXNlIGEgYGB1YGAgcHJlZml4IG9yCisgICA6bW9kOmBfX2Z1dHVyZV9fYCBpbXBvcnQgc3RhdGVtZW50IGZvciB0ZXh0IGxpdGVyYWxzCisjLiBEZWNvZGUgYmluYXJ5IGRhdGEgdG8gdGV4dCBhcyBzb29uIGFzIHBvc3NpYmxlLCBlbmNvZGUgdGV4dCBhcyBiaW5hcnkgZGF0YSBhcworICAgbGF0ZSBhcyBwb3NzaWJsZQorIy4gT3BlbiBmaWxlcyB1c2luZyA6ZnVuYzpgaW8ub3BlbmAgYW5kIG1ha2Ugc3VyZSB0byBzcGVjaWZ5IHRoZSBgYGJgYCBtb2RlIHdoZW4KKyAgIGFwcHJvcHJpYXRlCisjLiBCZSBjYXJlZnVsIHdoZW4gaW5kZXhpbmcgYmluYXJ5IGRhdGEKIAotKiBJZiBwcmUtMi42IGNvbXBhdGliaWxpdHkgaXMgbmVlZGVkLCB0aGVuIHlvdSBzaG91bGQgdXNlIDpmdW5jOmBjb2RlY3Mub3BlbmAKLSAgaW5zdGVhZC4gIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCB5b3UgZ2V0IGJhY2sgdW5pY29kZSBzdHJpbmdzIGluIFB5dGhvbiAyLgorUHJldmVudCBjb21wYXRpYmlsaXR5IHJlZ3Jlc3Npb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU3ViY2xhc3MgYGBvYmplY3RgYAotJycnJycnJycnJycnJycnJycnJworT25jZSB5b3UgaGF2ZSBmdWxseSB0cmFuc2xhdGVkIHlvdXIgY29kZSB0byBiZSBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMsIHlvdQord2lsbCB3YW50IHRvIG1ha2Ugc3VyZSB5b3VyIGNvZGUgZG9lc24ndCByZWdyZXNzIGFuZCBzdG9wIHdvcmtpbmcgdW5kZXIKK1B5dGhvbiAzLiBUaGlzIGlzIGVzcGVjaWFsbHkgdHJ1ZSBpZiB5b3UgaGF2ZSBhIGRlcGVuZGVuY3kgd2hpY2ggaXMgYmxvY2tpbmcgeW91Citmcm9tIGFjdHVhbGx5IHJ1bm5pbmcgdW5kZXIgUHl0aG9uIDMgYXQgdGhlIG1vbWVudC4KIAotTmV3LXN0eWxlIGNsYXNzZXMgaGF2ZSBiZWVuIGFyb3VuZCBzaW5jZSBgUHl0aG9uIDIuMmBfLiBZb3UgbmVlZCB0byBtYWtlIHN1cmUKLXlvdSBhcmUgc3ViY2xhc3NpbmcgZnJvbSBgYG9iamVjdGBgIHRvIGF2b2lkIG9kZCBlZGdlIGNhc2VzIGludm9sdmluZyBtZXRob2QKLXJlc29sdXRpb24gb3JkZXIsIGV0Yy4gVGhpcyBjb250aW51ZXMgdG8gYmUgdG90YWxseSB2YWxpZCBpbiBQeXRob24gMyAoYWx0aG91Z2gKLXVubmVlZGVkIGFzIGFsbCBjbGFzc2VzIGltcGxpY2l0bHkgaW5oZXJpdCBmcm9tIGBgb2JqZWN0YGApLgorVG8gaGVscCB3aXRoIHN0YXlpbmcgY29tcGF0aWJsZSwgYW55IG5ldyBtb2R1bGVzIHlvdSBjcmVhdGUgc2hvdWxkIGhhdmUKK2F0IGxlYXN0IHRoZSBmb2xsb3dpbmcgYmxvY2sgb2YgY29kZSBhdCB0aGUgdG9wIG9mIGl0OjoKIAorICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0CisgICAgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbgorICAgIGZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KKyAgICBmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHVuaWNvZGVfbGl0ZXJhbHMKIAotRGVhbCBXaXRoIHRoZSBCeXRlcy9TdHJpbmcgRGljaG90b215Ci0nJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycKK1lvdSBjYW4gYWxzbyBydW4gUHl0aG9uIDIgd2l0aCB0aGUgYGAtM2BgIGZsYWcgdG8gYmUgd2FybmVkIGFib3V0IHZhcmlvdXMKK2NvbXBhdGliaWxpdHkgaXNzdWVzIHlvdXIgY29kZSB0cmlnZ2VycyBkdXJpbmcgZXhlY3V0aW9uLiBJZiB5b3UgdHVybiB3YXJuaW5ncworaW50byBlcnJvcnMgd2l0aCBgYC1XZXJyb3JgYCB0aGVuIHlvdSBjYW4gbWFrZSBzdXJlIHRoYXQgeW91IGRvbid0IGFjY2lkZW50YWxseQorbWlzcyBhIHdhcm5pbmcuCiAKLU9uZSBvZiB0aGUgYmlnZ2VzdCBpc3N1ZXMgcGVvcGxlIGhhdmUgd2hlbiBwb3J0aW5nIGNvZGUgdG8gUHl0aG9uIDMgaXMgaGFuZGxpbmcKLXRoZSBieXRlcy9zdHJpbmcgZGljaG90b215LiBCZWNhdXNlIFB5dGhvbiAyIGFsbG93ZWQgdGhlIGBgc3RyYGAgdHlwZSB0byBob2xkCi10ZXh0dWFsIGRhdGEsIHBlb3BsZSBoYXZlIG92ZXIgdGhlIHllYXJzIGJlZW4gcmF0aGVyIGxvb3NlIGluIHRoZWlyIGRlbGluZWF0aW9uCi1vZiB3aGF0IGBgc3RyYGAgaW5zdGFuY2VzIGhlbGQgdGV4dCBjb21wYXJlZCB0byBieXRlcy4gSW4gUHl0aG9uIDMgeW91IGNhbm5vdAotYmUgc28gY2FyZS1mcmVlIGFueW1vcmUgYW5kIG5lZWQgdG8gcHJvcGVybHkgaGFuZGxlIHRoZSBkaWZmZXJlbmNlLiBUaGUga2V5IHRvCi1oYW5kbGluZyB0aGlzIGlzc3VlIGlzIHRvIG1ha2Ugc3VyZSB0aGF0ICoqZXZlcnkqKiBzdHJpbmcgbGl0ZXJhbCBpbiB5b3VyCi1QeXRob24gMiBjb2RlIGlzIGVpdGhlciBzeW50YWN0aWNhbGx5IG9yIGZ1bmN0aW9uYWxseSBtYXJrZWQgYXMgZWl0aGVyIGJ5dGVzIG9yCi10ZXh0IGRhdGEuIEFmdGVyIHRoaXMgaXMgZG9uZSB5b3UgdGhlbiBuZWVkIHRvIG1ha2Ugc3VyZSB5b3VyIEFQSXMgYXJlIGRlc2lnbmVkCi10byBlaXRoZXIgaGFuZGxlIGEgc3BlY2lmaWMgdHlwZSBvciBtYWRlIHRvIGJlIHByb3Blcmx5IHBvbHltb3JwaGljLgogCitZb3UgY2FuIGFsc28gdXNlIHRoZSBQeWxpbnRfIHByb2plY3QgYW5kIGl0cyBgYC0tcHkza2BgIGZsYWcgdG8gbGludCB5b3VyIGNvZGUKK3RvIHJlY2VpdmUgd2FybmluZ3Mgd2hlbiB5b3VyIGNvZGUgYmVnaW5zIHRvIGRldmlhdGUgZnJvbSBQeXRob24gMworY29tcGF0aWJpbGl0eS4gVGhpcyBhbHNvIHByZXZlbnRzIHlvdSBmcm9tIGhhdmluZyB0byBydW4gTW9kZXJuaXplXyBvciBGdXR1cml6ZV8KK292ZXIgeW91ciBjb2RlIHJlZ3VsYXJseSB0byBjYXRjaCBjb21wYXRpYmlsaXR5IHJlZ3Jlc3Npb25zLiBUaGlzIGRvZXMgcmVxdWlyZQoreW91IG9ubHkgc3VwcG9ydCBQeXRob24gMi43IGFuZCBQeXRob24gMy40IG9yIG5ld2VyIGFzIHRoYXQgaXMgUHlsaW50J3MKK21pbmltdW0gUHl0aG9uIHZlcnNpb24gc3VwcG9ydC4KIAotTWFyayBVcCBQeXRob24gMiBTdHJpbmcgTGl0ZXJhbHMKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLUZpcnN0IHRoaW5nIHlvdSBtdXN0IGRvIGlzIGRlc2lnbmF0ZSBldmVyeSBzaW5nbGUgc3RyaW5nIGxpdGVyYWwgaW4gUHl0aG9uIDIKLWFzIGVpdGhlciB0ZXh0dWFsIG9yIGJ5dGVzIGRhdGEuIElmIHlvdSBhcmUgb25seSBzdXBwb3J0aW5nIFB5dGhvbiAyLjYgb3IKLW5ld2VyLCB0aGlzIGNhbiBiZSBhY2NvbXBsaXNoZWQgYnkgbWFya2luZyBieXRlcyBsaXRlcmFscyB3aXRoIGEgYGBiYGAgcHJlZml4Ci1hbmQgdGhlbiBkZXNpZ25hdGluZyB0ZXh0dWFsIGRhdGEgd2l0aCBhIGBgdWBgIHByZWZpeCBvciB1c2luZyB0aGUKLWBgdW5pY29kZV9saXRlcmFsc2BgIGZ1dHVyZSBzdGF0ZW1lbnQuCitDaGVjayB3aGljaCBkZXBlbmRlbmNpZXMgYmxvY2sgeW91ciB0cmFuc2l0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUlmIHlvdXIgcHJvamVjdCBzdXBwb3J0cyB2ZXJzaW9ucyBvZiBQeXRob24gcHJlZGF0aW5nIDIuNiwgdGhlbiB5b3Ugc2hvdWxkIHVzZQotdGhlIHNpeF8gcHJvamVjdCBhbmQgaXRzIGBgYigpYGAgZnVuY3Rpb24gdG8gZGVub3RlIGJ5dGVzIGxpdGVyYWxzLiBGb3IgdGV4dAotbGl0ZXJhbHMgeW91IGNhbiBlaXRoZXIgdXNlIHNpeCdzIGBgdSgpYGAgZnVuY3Rpb24gb3IgdXNlIGEgYGB1YGAgcHJlZml4LgorKipBZnRlcioqIHlvdSBoYXZlIG1hZGUgeW91ciBjb2RlIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMyB5b3Ugc2hvdWxkIGJlZ2luIHRvCitjYXJlIGFib3V0IHdoZXRoZXIgeW91ciBkZXBlbmRlbmNpZXMgaGF2ZSBhbHNvIGJlZW4gcG9ydGVkLiBUaGUgY2FuaXVzZXB5dGhvbjNfCitwcm9qZWN0IHdhcyBjcmVhdGVkIHRvIGhlbHAgeW91IGRldGVybWluZSB3aGljaCBwcm9qZWN0cworLS0gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSAtLSBhcmUgYmxvY2tpbmcgeW91IGZyb20gc3VwcG9ydGluZyBQeXRob24gMy4gVGhlcmUKK2lzIGJvdGggYSBjb21tYW5kLWxpbmUgdG9vbCBhcyB3ZWxsIGFzIGEgd2ViIGludGVyZmFjZSBhdAoraHR0cHM6Ly9jYW5pdXNlcHl0aG9uMy5jb20gLgogCitUaGUgcHJvamVjdCBhbHNvIHByb3ZpZGVzIGNvZGUgd2hpY2ggeW91IGNhbiBpbnRlZ3JhdGUgaW50byB5b3VyIHRlc3Qgc3VpdGUgc28KK3RoYXQgeW91IHdpbGwgaGF2ZSBhIGZhaWxpbmcgdGVzdCB3aGVuIHlvdSBubyBsb25nZXIgaGF2ZSBkZXBlbmRlbmNpZXMgYmxvY2tpbmcKK3lvdSBmcm9tIHVzaW5nIFB5dGhvbiAzLiBUaGlzIGFsbG93cyB5b3UgdG8gYXZvaWQgaGF2aW5nIHRvIG1hbnVhbGx5IGNoZWNrIHlvdXIKK2RlcGVuZGVuY2llcyBhbmQgdG8gYmUgbm90aWZpZWQgcXVpY2tseSB3aGVuIHlvdSBjYW4gc3RhcnQgcnVubmluZyBvbiBQeXRob24gMy4KIAotRGVjaWRlIHdoYXQgQVBJcyBXaWxsIEFjY2VwdAotKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorVXBkYXRlIHlvdXIgYGBzZXR1cC5weWBgIGZpbGUgdG8gZGVub3RlIFB5dGhvbiAzIGNvbXBhdGliaWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUluIFB5dGhvbiAyIGl0IHdhcyB2ZXJ5IGVhc3kgdG8gYWNjaWRlbnRhbGx5IGNyZWF0ZSBhbiBBUEkgdGhhdCBhY2NlcHRlZCBib3RoCi1ieXRlcyBhbmQgdGV4dHVhbCBkYXRhLiBCdXQgaW4gUHl0aG9uIDMsIHRoYW5rcyB0byB0aGUgbW9yZSBzdHJpY3QgaGFuZGxpbmcgb2YKLWRpc3BhcmF0ZSB0eXBlcywgdGhpcyBsb29zZSB1c2FnZSBvZiBieXRlcyBhbmQgdGV4dCB0b2dldGhlciB0ZW5kcyB0byBmYWlsLgorT25jZSB5b3VyIGNvZGUgd29ya3MgdW5kZXIgUHl0aG9uIDMsIHlvdSBzaG91bGQgdXBkYXRlIHRoZSBjbGFzc2lmaWVycyBpbgoreW91ciBgYHNldHVwLnB5YGAgdG8gY29udGFpbiBgYFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzYGAgYW5kIHRvIG5vdAorc3BlY2lmeSBzb2xlIFB5dGhvbiAyIHN1cHBvcnQuIFRoaXMgd2lsbCB0ZWxsCithbnlvbmUgdXNpbmcgeW91ciBjb2RlIHRoYXQgeW91IHN1cHBvcnQgUHl0aG9uIDIgKiphbmQqKiAzLiBJZGVhbGx5IHlvdSB3aWxsCithbHNvIHdhbnQgdG8gYWRkIGNsYXNzaWZpZXJzIGZvciBlYWNoIG1ham9yL21pbm9yIHZlcnNpb24gb2YgUHl0aG9uIHlvdSBub3cKK3N1cHBvcnQuCiAKLVRha2UgdGhlIGRpY3QgYGB7YidhJzogJ2J5dGVzJywgdSdhJzogJ3RleHQnfWBgIGluIFB5dGhvbiAyLjYuIEl0IGNyZWF0ZXMgdGhlCi1kaWN0IGBge3UnYSc6ICd0ZXh0J31gYCBzaW5jZSBgYGInYScgPT0gdSdhJ2BgLiBCdXQgaW4gUHl0aG9uIDMgdGhlIGVxdWl2YWxlbnQKLWRpY3QgY3JlYXRlcyBgYHtiJ2EnOiAnYnl0ZXMnLCAnYSc6ICd0ZXh0J31gYCwgaS5lLiwgbm8gbG9zdCBkYXRhLiBTaW1pbGFyCi1pc3N1ZXMgY2FuIGNyb3AgdXAgd2hlbiB0cmFuc2l0aW9uaW5nIFB5dGhvbiAyIGNvZGUgdG8gUHl0aG9uIDMuCitVc2UgY29udGludW91cyBpbnRlZ3JhdGlvbiB0byBzdGF5IGNvbXBhdGlibGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGlzIG1lYW5zIHlvdSBuZWVkIHRvIGNob29zZSB3aGF0IGFuIEFQSSBpcyBnb2luZyB0byBhY2NlcHQgYW5kIGNyZWF0ZSBhbmQKLWNvbnNpc3RlbnRseSBzdGljayB0byB0aGF0IEFQSSBpbiBib3RoIFB5dGhvbiAyIGFuZCAzLgorT25jZSB5b3UgYXJlIGFibGUgdG8gZnVsbHkgcnVuIHVuZGVyIFB5dGhvbiAzIHlvdSB3aWxsIHdhbnQgdG8gbWFrZSBzdXJlIHlvdXIKK2NvZGUgYWx3YXlzIHdvcmtzIHVuZGVyIGJvdGggUHl0aG9uIDIgJiAzLiBQcm9iYWJseSB0aGUgYmVzdCB0b29sIGZvciBydW5uaW5nCit5b3VyIHRlc3RzIHVuZGVyIG11bHRpcGxlIFB5dGhvbiBpbnRlcnByZXRlcnMgaXMgdG94Xy4gWW91IGNhbiB0aGVuIGludGVncmF0ZQordG94IHdpdGggeW91ciBjb250aW51b3VzIGludGVncmF0aW9uIHN5c3RlbSBzbyB0aGF0IHlvdSBuZXZlciBhY2NpZGVudGFsbHkgYnJlYWsKK1B5dGhvbiAyIG9yIDMgc3VwcG9ydC4KIAorWW91IG1heSBhbHNvIHdhbnQgdG8gdXNlIHVzZSB0aGUgYGAtYmJgYCBmbGFnIHdpdGggdGhlIFB5dGhvbiAzIGludGVycHJldGVyIHRvCit0cmlnZ2VyIGFuIGV4Y2VwdGlvbiB3aGVuIHlvdSBhcmUgY29tcGFyaW5nIGJ5dGVzIHRvIHN0cmluZ3MuIFVzdWFsbHkgaXQncworc2ltcGx5IGBgRmFsc2VgYCwgYnV0IGlmIHlvdSBtYWRlIGEgbWlzdGFrZSBpbiB5b3VyIHNlcGFyYXRpb24gb2YgdGV4dC9iaW5hcnkKK2RhdGEgaGFuZGxpbmcgeW91IG1heSBiZSBhY2NpZGVudGFsbHkgY29tcGFyaW5nIHRleHQgYW5kIGJpbmFyeSBkYXRhLiBUaGlzIGZsYWcKK3dpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhhdCBvY2N1cnMgdG8gaGVscCB0cmFjayBkb3duIHN1Y2ggY2FzZXMuCiAKLUJ5dGVzIC8gVW5pY29kZSBDb21wYXJpc29uCi0qKioqKioqKioqKioqKioqKioqKioqKioqKgorQW5kIHRoYXQncyBtb3N0bHkgaXQhIEF0IHRoaXMgcG9pbnQgeW91ciBjb2RlIGJhc2UgaXMgY29tcGF0aWJsZSB3aXRoIGJvdGgKK1B5dGhvbiAyIGFuZCAzIHNpbXVsdGFuZW91c2x5LiBZb3VyIHRlc3Rpbmcgd2lsbCBhbHNvIGJlIHNldCB1cCBzbyB0aGF0IHlvdQorZG9uJ3QgYWNjaWRlbnRhbGx5IGJyZWFrIFB5dGhvbiAyIG9yIDMgY29tcGF0aWJpbGl0eSByZWdhcmRsZXNzIG9mIHdoaWNoIHZlcnNpb24KK3lvdSB0eXBpY2FsbHkgcnVuIHlvdXIgdGVzdHMgdW5kZXIgd2hpbGUgZGV2ZWxvcGluZy4KIAotSW4gUHl0aG9uIDMsIG1peGluZyBieXRlcyBhbmQgdW5pY29kZSBpcyBmb3JiaWRkZW4gaW4gbW9zdCBzaXR1YXRpb25zOyBpdAotd2lsbCByYWlzZSBhIDpjbGFzczpgVHlwZUVycm9yYCB3aGVyZSBQeXRob24gMiB3b3VsZCBoYXZlIGF0dGVtcHRlZCBhbiBpbXBsaWNpdAotY29lcmNpb24gYmV0d2VlbiB0eXBlcy4gIEhvd2V2ZXIsIHRoZXJlIGlzIG9uZSBjYXNlIHdoZXJlIGl0IGRvZXNuJ3QgYW5kCi1pdCBjYW4gYmUgdmVyeSBtaXNsZWFkaW5nOjoKIAotICAgPj4+IGIiIiA9PSAiIgotICAgRmFsc2UKK0Ryb3BwaW5nIFB5dGhvbiAyIHN1cHBvcnQgY29tcGxldGVseQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoaXMgaXMgYmVjYXVzZSBhbiBlcXVhbGl0eSBjb21wYXJpc29uIGlzIHJlcXVpcmVkIGJ5IHRoZSBsYW5ndWFnZSB0byBhbHdheXMKLXN1Y2NlZWQgKGFuZCByZXR1cm4gYGBGYWxzZWBgIGZvciBpbmNvbXBhdGlibGUgdHlwZXMpLiAgSG93ZXZlciwgdGhpcyBhbHNvCi1tZWFucyB0aGF0IGNvZGUgaW5jb3JyZWN0bHkgcG9ydGVkIHRvIFB5dGhvbiAzIGNhbiBkaXNwbGF5IGJ1Z2d5IGJlaGF2aW91cgotaWYgc3VjaCBjb21wYXJpc29ucyBhcmUgc2lsZW50bHkgZXhlY3V0ZWQuICBUbyBkZXRlY3Qgc3VjaCBzaXR1YXRpb25zLAotUHl0aG9uIDMgaGFzIGEgYGAtYmBgIGZsYWcgdGhhdCB3aWxsIGRpc3BsYXkgYSB3YXJuaW5nOjoKK0lmIHlvdSBhcmUgYWJsZSB0byBmdWxseSBkcm9wIHN1cHBvcnQgZm9yIFB5dGhvbiAyLCB0aGVuIHRoZSBzdGVwcyByZXF1aXJlZAordG8gdHJhbnNpdGlvbiB0byBQeXRob24gMyBzaW1wbGlmeSBncmVhdGx5LgogCi0gICAkIHB5dGhvbjMgLWIKLSAgID4+PiBiIiIgPT0gIiIKLSAgIF9fbWFpbl9fOjE6IEJ5dGVzV2FybmluZzogQ29tcGFyaXNvbiBiZXR3ZWVuIGJ5dGVzIGFuZCBzdHJpbmcKLSAgIEZhbHNlCisjLiBVcGRhdGUgeW91ciBjb2RlIHRvIG9ubHkgc3VwcG9ydCBQeXRob24gMi43CisjLiBNYWtlIHN1cmUgeW91IGhhdmUgZ29vZCB0ZXN0IGNvdmVyYWdlIChjb3ZlcmFnZS5weV8gY2FuIGhlbHApCisjLiBMZWFybiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiBQeXRob24gMiAmIDMKKyMuIFVzZSAydG8zXyB0byByZXdyaXRlIHlvdXIgY29kZSB0byBydW4gb25seSB1bmRlciBQeXRob24gMwogCi1UbyB0dXJuIHRoZSB3YXJuaW5nIGludG8gYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGBgLWJiYGAgZmxhZyBpbnN0ZWFkOjoKK0FmdGVyIHRoaXMgeW91ciBjb2RlIHdpbGwgYmUgZnVsbHkgUHl0aG9uIDMgY29tcGxpYW50IGJ1dCBpbiBhIHdheSB0aGF0IGlzIG5vdAorc3VwcG9ydGVkIGJ5IFB5dGhvbiAyLiBZb3Ugc2hvdWxkIGFsc28gdXBkYXRlIHRoZSBjbGFzc2lmaWVycyBpbiB5b3VyCitgYHNldHVwLnB5YGAgdG8gY29udGFpbiBgYFByb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzIDo6IE9ubHlgYC4KIAotICAgJCBweXRob24zIC1iYgotICAgPj4+IGIiIiA9PSAiIgotICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgotICAgQnl0ZXNXYXJuaW5nOiBDb21wYXJpc29uIGJldHdlZW4gYnl0ZXMgYW5kIHN0cmluZwogCi0KLUluZGV4aW5nIGJ5dGVzIG9iamVjdHMKLScnJycnJycnJycnJycnJycnJycnJycKLQotQW5vdGhlciBwb3RlbnRpYWxseSBzdXJwcmlzaW5nIGNoYW5nZSBpcyB0aGUgaW5kZXhpbmcgYmVoYXZpb3VyIG9mIGJ5dGVzCi1vYmplY3RzIGluIFB5dGhvbiAzOjoKLQotICAgPj4+IGIieHl6IlswXQotICAgMTIwCi0KLUluZGVlZCwgUHl0aG9uIDMgYnl0ZXMgb2JqZWN0cyAoYXMgd2VsbCBhcyA6Y2xhc3M6YGJ5dGVhcnJheWAgb2JqZWN0cykKLWFyZSBzZXF1ZW5jZXMgb2YgaW50ZWdlcnMuICBCdXQgY29kZSBjb252ZXJ0ZWQgZnJvbSBQeXRob24gMiB3aWxsIG9mdGVuCi1hc3N1bWUgdGhhdCBpbmRleGluZyBhIGJ5dGVzdHJpbmcgcHJvZHVjZXMgYW5vdGhlciBieXRlc3RyaW5nLCBub3QgYW4KLWludGVnZXIuICBUbyByZWNvbmNpbGUgYm90aCBiZWhhdmlvdXJzLCB1c2Ugc2xpY2luZzo6Ci0KLSAgID4+PiBiInh5eiJbMDoxXQotICAgYid4JwotICAgPj4+IG4gPSAxCi0gICA+Pj4gYiJ4eXoiW246bisxXQotICAgYid5JwotCi1UaGUgb25seSByZW1haW5pbmcgZ290Y2hhIGlzIHRoYXQgYW4gb3V0LW9mLWJvdW5kcyBzbGljZSByZXR1cm5zIGFuIGVtcHR5Ci1ieXRlcyBvYmplY3QgaW5zdGVhZCBvZiByYWlzaW5nIGBgSW5kZXhFcnJvcmBgOgotCi0gICA+Pj4gYiJ4eXoiWzNdCi0gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+Ci0gICBJbmRleEVycm9yOiBpbmRleCBvdXQgb2YgcmFuZ2UKLSAgID4+PiBiInh5eiJbMzo0XQotICAgYicnCi0KLQotYGBfX3N0cl9fKClgYC9gYF9fdW5pY29kZV9fKClgYAotJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwotCi1JbiBQeXRob24gMiwgb2JqZWN0cyBjYW4gc3BlY2lmeSBib3RoIGEgc3RyaW5nIGFuZCB1bmljb2RlIHJlcHJlc2VudGF0aW9uIG9mCi10aGVtc2VsdmVzLiBJbiBQeXRob24gMywgdGhvdWdoLCB0aGVyZSBpcyBvbmx5IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBUaGlzCi1iZWNvbWVzIGFuIGlzc3VlIGFzIHBlb3BsZSBjYW4gaW5hZHZlcnRlbnRseSBkbyB0aGluZ3MgaW4gdGhlaXIgYGBfX3N0cl9fKClgYAotbWV0aG9kcyB3aGljaCBoYXZlIHVucHJlZGljdGFibGUgcmVzdWx0cyAoZS5nLiwgaW5maW5pdGUgcmVjdXJzaW9uIGlmIHlvdQotaGFwcGVuIHRvIHVzZSB0aGUgYGB1bmljb2RlKHNlbGYpLmVuY29kZSgndXRmOCcpYGAgaWRpb20gYXMgdGhlIGJvZHkgb2YgeW91cgotYGBfX3N0cl9fKClgYCBtZXRob2QpLgotCi1Zb3UgY2FuIHVzZSBhIG1peGluIGNsYXNzIHRvIHdvcmsgYXJvdW5kIHRoaXMuIFRoaXMgYWxsb3dzIHlvdSB0byBvbmx5IGRlZmluZSBhCi1gYF9fdW5pY29kZV9fKClgYCBtZXRob2QgZm9yIHlvdXIgY2xhc3MgYW5kIGxldCB0aGUgbWl4aW4gZGVyaXZlCi1gYF9fc3RyX18oKWBgIGZvciB5b3UgKGNvZGUgZnJvbQotaHR0cDovL2x1Y3Vtci5wb2Nvby5vcmcvMjAxMS8xLzIyL2ZvcndhcmRzLWNvbXBhdGlibGUtcHl0aG9uLyk6OgotCi0gICBpbXBvcnQgc3lzCi0KLSAgIGNsYXNzIFVuaWNvZGVNaXhpbihvYmplY3QpOgotCi0gICAgICIiIk1peGluIGNsYXNzIHRvIGhhbmRsZSBkZWZpbmluZyB0aGUgcHJvcGVyIF9fc3RyX18vX191bmljb2RlX18KLSAgICAgbWV0aG9kcyBpbiBQeXRob24gMiBvciAzLiIiIgotCi0gICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPj0gMzogIyBQeXRob24gMwotICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgICAgICAgcmV0dXJuIHNlbGYuX191bmljb2RlX18oKQotICAgICBlbHNlOiAgIyBQeXRob24gMgotICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgICAgICAgcmV0dXJuIHNlbGYuX191bmljb2RlX18oKS5lbmNvZGUoJ3V0ZjgnKQotCi0KLSAgIGNsYXNzIFNwYW0oVW5pY29kZU1peGluKToKLQotICAgICBkZWYgX191bmljb2RlX18oc2VsZik6Ci0gICAgICAgICByZXR1cm4gdSdzcGFtLXNwYW0tYmFjb24tc3BhbScgICMgMnRvMyB3aWxsIHJlbW92ZSB0aGUgJ3UnIHByZWZpeAotCi0KLURvbid0IEluZGV4IG9uIEV4Y2VwdGlvbnMKLScnJycnJycnJycnJycnJycnJycnJycnJycKLQotSW4gUHl0aG9uIDIsIHRoZSBmb2xsb3dpbmcgd29ya2VkOjoKLQotICAgPj4+IGV4YyA9IEV4Y2VwdGlvbigxLCAyLCAzKQotICAgPj4+IGV4Yy5hcmdzWzFdCi0gICAyCi0gICA+Pj4gZXhjWzFdICAjIFB5dGhvbiAyIG9ubHkhCi0gICAyCi0KLUJ1dCBpbiBQeXRob24gMywgaW5kZXhpbmcgZGlyZWN0bHkgb24gYW4gZXhjZXB0aW9uIGlzIGFuIGVycm9yLiBZb3UgbmVlZCB0bwotbWFrZSBzdXJlIHRvIG9ubHkgaW5kZXggb24gdGhlIDphdHRyOmBCYXNlRXhjZXB0aW9uLmFyZ3NgIGF0dHJpYnV0ZSB3aGljaCBpcyBhCi1zZXF1ZW5jZSBjb250YWluaW5nIGFsbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSA6bWV0aDpgX19pbml0X19gIG1ldGhvZC4KLQotRXZlbiBiZXR0ZXIgaXMgdG8gdXNlIHRoZSBkb2N1bWVudGVkIGF0dHJpYnV0ZXMgdGhlIGV4Y2VwdGlvbiBwcm92aWRlcy4KLQotCi1Eb24ndCB1c2UgYGBfX2dldHNsaWNlX19gYCAmIEZyaWVuZHMKLScnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJwotCi1CZWVuIGRlcHJlY2F0ZWQgZm9yIGEgd2hpbGUsIGJ1dCBQeXRob24gMyBmaW5hbGx5IGRyb3BzIHN1cHBvcnQgZm9yCi1gYF9fZ2V0c2xpY2VfXygpYGAsIGV0Yy4gTW92ZSBjb21wbGV0ZWx5IG92ZXIgdG8gOm1ldGg6YF9fZ2V0aXRlbV9fYCBhbmQKLWZyaWVuZHMuCi0KLQotVXBkYXRpbmcgZG9jdGVzdHMKLScnJycnJycnJycnJycnJycnCi0KLURvbid0IGZvcmdldCB0byBtYWtlIHRoZW0gUHl0aG9uIDIvMyBjb21wYXRpYmxlIGFzIHdlbGwuIElmIHlvdSB3cm90ZSBhCi1tb25vbGl0aGljIHNldCBvZiBkb2N0ZXN0cyAoZS5nLiwgYSBzaW5nbGUgZG9jc3RyaW5nIGNvbnRhaW5pbmcgYWxsIG9mIHlvdXIKLWRvY3Rlc3RzKSwgeW91IHNob3VsZCBhdCBsZWFzdCBjb25zaWRlciBicmVha2luZyB0aGUgZG9jdGVzdHMgdXAgaW50byBzbWFsbGVyCi1waWVjZXMgdG8gbWFrZSBpdCBtb3JlIG1hbmFnZWFibGUgdG8gZml4LiBPdGhlcndpc2UgaXQgbWlnaHQgdmVyeSB3ZWxsIGJlIHdvcnRoCi15b3VyIHRpbWUgYW5kIGVmZm9ydCB0byBwb3J0IHlvdXIgdGVzdHMgdG8gOm1vZDpgdW5pdHRlc3RgLgotCi0KLVVwZGF0ZSBgYG1hcGBgIGZvciBpbWJhbGFuY2VkIGlucHV0IHNlcXVlbmNlcwotJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnCi0KLVdpdGggUHl0aG9uIDIsIHdoZW4gYGBtYXBgYCB3YXMgZ2l2ZW4gbW9yZSB0aGFuIG9uZSBpbnB1dCBzZXF1ZW5jZSBpdCB3b3VsZCBwYWQKLXRoZSBzaG9ydGVyIHNlcXVlbmNlcyB3aXRoIGBOb25lYCB2YWx1ZXMsIHJldHVybmluZyBhIHNlcXVlbmNlIGFzIGxvbmcgYXMgdGhlCi1sb25nZXN0IGlucHV0IHNlcXVlbmNlLgotCi1XaXRoIFB5dGhvbiAzLCBpZiB0aGUgaW5wdXQgc2VxdWVuY2VzIHRvIGBgbWFwYGAgYXJlIG9mIHVuZXF1YWwgbGVuZ3RoLCBgYG1hcGBgCi13aWxsIHN0b3AgYXQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoZSBzaG9ydGVzdCBvZiB0aGUgc2VxdWVuY2VzLiBGb3IgZnVsbAotY29tcGF0aWJpbGl0eSB3aXRoIGBgbWFwYGAgZnJvbSBQeXRob24gMi54LCB3cmFwIHRoZSBzZXF1ZW5jZSBhcmd1bWVudHMgaW4KLTpmdW5jOmBpdGVydG9vbHMuemlwX2xvbmdlc3RgLCBlLmcuIGBgbWFwKGZ1bmMsICpzZXF1ZW5jZXMpYGAgYmVjb21lcwotYGBsaXN0KG1hcChmdW5jLCBpdGVydG9vbHMuemlwX2xvbmdlc3QoKnNlcXVlbmNlcykpKWBgLgotCi1FbGltaW5hdGUgYGAtM2BgIFdhcm5pbmdzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdoZW4geW91IHJ1biB5b3VyIGFwcGxpY2F0aW9uJ3MgdGVzdCBzdWl0ZSwgcnVuIGl0IHVzaW5nIHRoZSBgYC0zYGAgZmxhZyBwYXNzZWQKLXRvIFB5dGhvbi4gVGhpcyB3aWxsIGNhdXNlIHZhcmlvdXMgd2FybmluZ3MgdG8gYmUgcmFpc2VkIGR1cmluZyBleGVjdXRpb24gYWJvdXQKLXRoaW5ncyB0aGF0IGFyZSBzZW1hbnRpYyBjaGFuZ2VzIGJldHdlZW4gUHl0aG9uIDIgYW5kIDMuIFRyeSB0byBlbGltaW5hdGUgdGhvc2UKLXdhcm5pbmdzIHRvIG1ha2UgeW91ciBjb2RlIGV2ZW4gbW9yZSBwb3J0YWJsZSB0byBQeXRob24gMy4KLQotCi1BbHRlcm5hdGl2ZSBBcHByb2FjaGVzCi09PT09PT09PT09PT09PT09PT09PT09Ci0KLVdoaWxlIHN1cHBvcnRpbmcgUHl0aG9uIDIgJiAzIHNpbXVsdGFuZW91c2x5IGlzIHR5cGljYWxseSB0aGUgcHJlZmVycmVkIGNob2ljZQotYnkgcGVvcGxlIHNvIHRoYXQgdGhleSBjYW4gY29udGludWUgdG8gaW1wcm92ZSBjb2RlIGFuZCBoYXZlIGl0IHdvcmsgZm9yIHRoZQotbW9zdCBudW1iZXIgb2YgdXNlcnMsIHlvdXIgbGlmZSBtYXkgYmUgZWFzaWVyIGlmIHlvdSBvbmx5IGhhdmUgdG8gc3VwcG9ydCBvbmUKLW1ham9yIHZlcnNpb24gb2YgUHl0aG9uIGdvaW5nIGZvcndhcmQuCi0KLVN1cHBvcnRpbmcgT25seSBQeXRob24gMyBHb2luZyBGb3J3YXJkIEZyb20gUHl0aG9uIDIgQ29kZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlmIHlvdSBoYXZlIFB5dGhvbiAyIGNvZGUgYnV0IGdvaW5nIGZvcndhcmQgb25seSB3YW50IHRvIGltcHJvdmUgaXQgYXMgUHl0aG9uIDMKLWNvZGUsIHRoZW4geW91IGNhbiB1c2UgMnRvM18gdG8gdHJhbnNsYXRlIHlvdXIgUHl0aG9uIDIgY29kZSB0byBQeXRob24gMyBjb2RlLgotVGhpcyBpcyBvbmx5IHJlY29tbWVuZGVkLCB0aG91Z2gsIGlmIHlvdXIgY3VycmVudCB2ZXJzaW9uIG9mIHlvdXIgcHJvamVjdCBpcwotZ29pbmcgaW50byBtYWludGVuYW5jZSBtb2RlIGFuZCB5b3Ugd2FudCBhbGwgbmV3IGZlYXR1cmVzIHRvIGJlIGV4Y2x1c2l2ZSB0bwotUHl0aG9uIDMuCi0KLQotQmFja3BvcnRpbmcgUHl0aG9uIDMgY29kZSB0byBQeXRob24gMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1JZiB5b3UgaGF2ZSBQeXRob24gMyBjb2RlIGFuZCBoYXZlIGxpdHRsZSBpbnRlcmVzdCBpbiBzdXBwb3J0aW5nIFB5dGhvbiAyIHlvdQotY2FuIHVzZSAzdG8yXyB0byB0cmFuc2xhdGUgZnJvbSBQeXRob24gMyBjb2RlIHRvIFB5dGhvbiAyIGNvZGUuIFRoaXMgaXMgb25seQotcmVjb21tZW5kZWQgaWYgeW91IGRvbid0IHBsYW4gdG8gaGVhdmlseSBzdXBwb3J0IFB5dGhvbiAyIHVzZXJzLiBPdGhlcndpc2UKLXdyaXRlIHlvdXIgY29kZSBmb3IgUHl0aG9uIDMgYW5kIHRoZW4gYmFja3BvcnQgYXMgZmFyIGJhY2sgYXMgeW91IHdhbnQuIFRoaXMKLWlzIHR5cGljYWxseSBlYXNpZXIgdGhhbiBnb2luZyBmcm9tIFB5dGhvbiAyIHRvIDMgYXMgeW91IHdpbGwgaGF2ZSB3b3JrZWQgb3V0Ci1hbnkgZGlmZmljdWx0aWVzIHdpdGggZS5nLiBieXRlcy9zdHJpbmdzLCBldGMuCi0KLQotT3RoZXIgUmVzb3VyY2VzCi09PT09PT09PT09PT09PT0KLQotVGhlIGF1dGhvcnMgb2YgdGhlIGZvbGxvd2luZyBibG9nIHBvc3RzLCB3aWtpIHBhZ2VzLCBhbmQgYm9va3MgZGVzZXJ2ZSBzcGVjaWFsCi10aGFua3MgZm9yIG1ha2luZyBwdWJsaWMgdGhlaXIgdGlwcyBmb3IgcG9ydGluZyBQeXRob24gMiBjb2RlIHRvIFB5dGhvbiAzIChhbmQKLXRodXMgaGVscGluZyBwcm92aWRlIGluZm9ybWF0aW9uIGZvciB0aGlzIGRvY3VtZW50IGFuZCBpdHMgdmFyaW91cyByZXZpc2lvbnMKLW92ZXIgdGhlIHllYXJzKToKLQotKiBodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vUG9ydGluZ1B5dGhvblRvUHkzawotKiBodHRwOi8vcHl0aG9uM3BvcnRpbmcuY29tLwotKiBodHRwOi8vZG9jcy5weXRob25zcHJpbnRzLmNvbS9weXRob24zX3BvcnRpbmcvcHktcG9ydGluZy5odG1sCi0qIGh0dHA6Ly90ZWNoc3BvdC56enplZWsub3JnLzIwMTEvMDEvMjQvenp6ZWVrLXMtZ3VpZGUtdG8tcHl0aG9uLTMtcG9ydGluZy8KLSogaHR0cDovL2RhYmVhei5ibG9nc3BvdC5jb20vMjAxMS8wMS9wb3J0aW5nLXB5NjUtYW5kLW15LXN1cGVyYm9hcmQtdG8uaHRtbAotKiBodHRwOi8vbHVjdW1yLnBvY29vLm9yZy8yMDExLzEvMjIvZm9yd2FyZHMtY29tcGF0aWJsZS1weXRob24vCi0qIGh0dHA6Ly9sdWN1bXIucG9jb28ub3JnLzIwMTAvMi8xMS9wb3J0aW5nLXRvLXB5dGhvbi0zLWEtZ3VpZGUvCi0qIGh0dHBzOi8vd2lraS51YnVudHUuY29tL1B5dGhvbi8zCi0KLUlmIHlvdSBmZWVsIHRoZXJlIGlzIHNvbWV0aGluZyBtaXNzaW5nIGZyb20gdGhpcyBkb2N1bWVudCB0aGF0IHNob3VsZCBiZSBhZGRlZCwKLXBsZWFzZSBlbWFpbCB0aGUgcHl0aG9uLXBvcnRpbmdfIG1haWxpbmcgbGlzdC4KLQotCi0KLS4uIF8ydG8zOiBodHRwOi8vZG9jcy5weXRob24ub3JnLzIvbGlicmFyeS8ydG8zLmh0bWwKLS4uIF8zdG8yOiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpLzN0bzIKLS4uIF9DaGVlc2VzaG9wOiBQeVBJXwotLi4gX2NvdmVyYWdlOiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvdmVyYWdlCi0uLiBfZnV0dXJlOiBodHRwOi8vcHl0aG9uLWZ1dHVyZS5vcmcvCi0uLiBfbW9kZXJuaXplOiBodHRwczovL2dpdGh1Yi5jb20vbWl0c3VoaWtvL3B5dGhvbi1tb2Rlcm5pemUKKy4uIF8ydG8zOiBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvMnRvMy5odG1sCisuLiBfY2FuaXVzZXB5dGhvbjM6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY2FuaXVzZXB5dGhvbjMKKy4uIF9jaGVhdCBzaGVldDogaHR0cDovL3B5dGhvbi1mdXR1cmUub3JnL2NvbXBhdGlibGVfaWRpb21zLmh0bWwKKy4uIF9jb3ZlcmFnZS5weTogaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9jb3ZlcmFnZQorLi4gX0Z1dHVyaXplOiBodHRwOi8vcHl0aG9uLWZ1dHVyZS5vcmcvYXV0b21hdGljX2NvbnZlcnNpb24uaHRtbAorLi4gX01vZGVybml6ZTogaHR0cDovL3B5dGhvbi1tb2Rlcm5pemUucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdC8KIC4uIF9Qb3J0aW5nIHRvIFB5dGhvbiAzOiBodHRwOi8vcHl0aG9uM3BvcnRpbmcuY29tLwotLi4gX1B5UEk6IGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvCi0uLiBfUHl0aG9uIDIuMjogaHR0cDovL3d3dy5weXRob24ub3JnLzIuMi54Ci0uLiBfUHl0aG9uIDIuNTogaHR0cDovL3d3dy5weXRob24ub3JnLzIuNS54Ci0uLiBfUHl0aG9uIDIuNjogaHR0cDovL3d3dy5weXRob24ub3JnLzIuNi54Ci0uLiBfUHl0aG9uIDIuNzogaHR0cDovL3d3dy5weXRob24ub3JnLzIuNy54Ci0uLiBfUHl0aG9uIDIuNTogaHR0cDovL3d3dy5weXRob24ub3JnLzIuNS54Ci0uLiBfUHl0aG9uIDMuMzogaHR0cDovL3d3dy5weXRob24ub3JnLzMuMy54Ci0uLiBfUHl0aG9uIDMgUGFja2FnZXM6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk/OmFjdGlvbj1icm93c2UmYz01MzMmc2hvdz1hbGwKKy4uIF9QeWxpbnQ6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcHlsaW50CiAuLiBfUHl0aG9uIDMgUSAmIEE6IGh0dHA6Ly9uY29naGxhbi1kZXZzLXB5dGhvbi1ub3Rlcy5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L3B5dGhvbjMvcXVlc3Rpb25zX2FuZF9hbnN3ZXJzLmh0bWwKLS4uIF9weXRob24tcG9ydGluZzogaHR0cDovL21haWwucHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3B5dGhvbi1wb3J0aW5nCisKKy4uIF9weXRob24tZnV0dXJlOiBodHRwOi8vcHl0aG9uLWZ1dHVyZS5vcmcvCisuLiBfcHl0aG9uLXBvcnRpbmc6IGh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8vcHl0aG9uLXBvcnRpbmcKIC4uIF9zaXg6IGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvc2l4CiAuLiBfdG94OiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL3RveAotLi4gX3Ryb3ZlIGNsYXNzaWZpZXJzOiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPyUzQWFjdGlvbj1saXN0X2NsYXNzaWZpZXJzCi0KKy4uIF90cm92ZSBjbGFzc2lmaWVyOiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPyUzQWFjdGlvbj1saXN0X2NsYXNzaWZpZXJzCisuLiBfIldoYXQncyBOZXciOiBodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL3doYXRzbmV3L2luZGV4Lmh0bWwKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9yZWdleC5yc3QgYi9Eb2MvaG93dG8vcmVnZXgucnN0CmluZGV4IDUyMDNlNTMuLjlhZTA0ZDcgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by9yZWdleC5yc3QKKysrIGIvRG9jL2hvd3RvL3JlZ2V4LnJzdApAQCAtMjcxLDggKzI3MSw4IEBACiAKICAgID4+PiBpbXBvcnQgcmUKICAgID4+PiBwID0gcmUuY29tcGlsZSgnYWIqJykKLSAgID4+PiBwICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfUGF0dGVybiBvYmplY3QgYXQgMHguLi4+CisgICA+Pj4gcAorICAgcmUuY29tcGlsZSgnYWIqJykKIAogOmZ1bmM6YHJlLmNvbXBpbGVgIGFsc28gYWNjZXB0cyBhbiBvcHRpb25hbCAqZmxhZ3MqIGFyZ3VtZW50LCB1c2VkIHRvIGVuYWJsZQogdmFyaW91cyBzcGVjaWFsIGZlYXR1cmVzIGFuZCBzeW50YXggdmFyaWF0aW9ucy4gIFdlJ2xsIGdvIG92ZXIgdGhlIGF2YWlsYWJsZQpAQCAtMzgzLDggKzM4Myw4IEBACiAKICAgID4+PiBpbXBvcnQgcmUKICAgID4+PiBwID0gcmUuY29tcGlsZSgnW2Etel0rJykKLSAgID4+PiBwICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfUGF0dGVybiBvYmplY3QgYXQgMHguLi4+CisgICA+Pj4gcAorICAgcmUuY29tcGlsZSgnW2Etel0rJykKIAogTm93LCB5b3UgY2FuIHRyeSBtYXRjaGluZyB2YXJpb3VzIHN0cmluZ3MgYWdhaW5zdCB0aGUgUkUgYGBbYS16XStgYC4gIEFuIGVtcHR5CiBzdHJpbmcgc2hvdWxkbid0IG1hdGNoIGF0IGFsbCwgc2luY2UgYGArYGAgbWVhbnMgJ29uZSBvciBtb3JlIHJlcGV0aXRpb25zJy4KQEAgLTQwMiw3ICs0MDIsNyBAQAogCiAgICA+Pj4gbSA9IHAubWF0Y2goJ3RlbXBvJykKICAgID4+PiBtICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNSksIG1hdGNoPSd0ZW1wbyc+CiAKIE5vdyB5b3UgY2FuIHF1ZXJ5IHRoZSA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YCBmb3IgaW5mb3JtYXRpb24KIGFib3V0IHRoZSBtYXRjaGluZyBzdHJpbmcuICA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YCBpbnN0YW5jZXMKQEAgLTQ0MSw3ICs0NDEsNyBAQAogICAgPj4+IHByaW50KHAubWF0Y2goJzo6OiBtZXNzYWdlJykpCiAgICBOb25lCiAgICA+Pj4gbSA9IHAuc2VhcmNoKCc6OjogbWVzc2FnZScpOyBwcmludChtKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDQsIDExKSwgbWF0Y2g9J21lc3NhZ2UnPgogICAgPj4+IG0uZ3JvdXAoKQogICAgJ21lc3NhZ2UnCiAgICA+Pj4gbS5zcGFuKCkKQEAgLTQ5Myw3ICs0OTMsNyBAQAogICAgPj4+IHByaW50KHJlLm1hdGNoKHInRnJvbVxzKycsICdGcm9tYWdlIGFtaycpKQogICAgTm9uZQogICAgPj4+IHJlLm1hdGNoKHInRnJvbVxzKycsICdGcm9tIGFtayBUaHUgTWF5IDE0IDE5OjEyOjEwIDE5OTgnKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDUpLCBtYXRjaD0nRnJvbSAnPgogCiBVbmRlciB0aGUgaG9vZCwgdGhlc2UgZnVuY3Rpb25zIHNpbXBseSBjcmVhdGUgYSBwYXR0ZXJuIG9iamVjdCBmb3IgeW91CiBhbmQgY2FsbCB0aGUgYXBwcm9wcmlhdGUgbWV0aG9kIG9uIGl0LiAgVGhleSBhbHNvIHN0b3JlIHRoZSBjb21waWxlZApAQCAtNjg1LDcgKzY4NSw3IEBACiAgICBsaW5lLCB0aGUgUkUgdG8gdXNlIGlzIGBgXkZyb21gYC4gOjoKIAogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnXkZyb20nLCAnRnJvbSBIZXJlIHRvIEV0ZXJuaXR5JykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNCksIG1hdGNoPSdGcm9tJz4KICAgICAgID4+PiBwcmludChyZS5zZWFyY2goJ15Gcm9tJywgJ1JlY2l0aW5nIEZyb20gTWVtb3J5JykpCiAgICAgICBOb25lCiAKQEAgLTY5NywxMSArNjk3LDExIEBACiAgICBvciBhbnkgbG9jYXRpb24gZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGNoYXJhY3Rlci4gICAgIDo6CiAKICAgICAgID4+PiBwcmludChyZS5zZWFyY2goJ30kJywgJ3tibG9ja30nKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSg2LCA3KSwgbWF0Y2g9J30nPgogICAgICAgPj4+IHByaW50KHJlLnNlYXJjaCgnfSQnLCAne2Jsb2NrfSAnKSkKICAgICAgIE5vbmUKICAgICAgID4+PiBwcmludChyZS5zZWFyY2goJ30kJywgJ3tibG9ja31cbicpKSAgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAweC4uLj4KKyAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDYsIDcpLCBtYXRjaD0nfSc+CiAKICAgIFRvIG1hdGNoIGEgbGl0ZXJhbCBgYCckJ2BgLCB1c2UgYGBcJGBgIG9yIGVuY2xvc2UgaXQgaW5zaWRlIGEgY2hhcmFjdGVyIGNsYXNzLAogICAgYXMgaW4gIGBgWyRdYGAuCkBAIC03MjYsNyArNzI2LDcgQEAKIAogICAgICAgPj4+IHAgPSByZS5jb21waWxlKHInXGJjbGFzc1xiJykKICAgICAgID4+PiBwcmludChwLnNlYXJjaCgnbm8gY2xhc3MgYXQgYWxsJykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMywgOCksIG1hdGNoPSdjbGFzcyc+CiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ3RoZSBkZWNsYXNzaWZpZWQgYWxnb3JpdGhtJykpCiAgICAgICBOb25lCiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ29uZSBzdWJjbGFzcyBpcycpKQpAQCAtNzQ0LDcgKzc0NCw3IEBACiAgICAgICA+Pj4gcHJpbnQocC5zZWFyY2goJ25vIGNsYXNzIGF0IGFsbCcpKQogICAgICAgTm9uZQogICAgICAgPj4+IHByaW50KHAuc2VhcmNoKCdcYicgKyAnY2xhc3MnICsgJ1xiJykpICAjZG9jdGVzdDogK0VMTElQU0lTCi0gICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IDB4Li4uPgorICAgICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNyksIG1hdGNoPSdceDA4Y2xhc3NceDA4Jz4KIAogICAgU2Vjb25kLCBpbnNpZGUgYSBjaGFyYWN0ZXIgY2xhc3MsIHdoZXJlIHRoZXJlJ3Mgbm8gdXNlIGZvciB0aGlzIGFzc2VydGlvbiwKICAgIGBgXGJgYCByZXByZXNlbnRzIHRoZSBiYWNrc3BhY2UgY2hhcmFjdGVyLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbidzCkBAIC04NTIsNyArODUyLDcgQEAKIHByb2JsZW0uICBCb3RoIG9mIHRoZW0gdXNlIGEgY29tbW9uIHN5bnRheCBmb3IgcmVndWxhciBleHByZXNzaW9uIGV4dGVuc2lvbnMsIHNvCiB3ZSdsbCBsb29rIGF0IHRoYXQgZmlyc3QuCiAKLVBlcmwgNSBpcyB3ZWxsLWtub3duIGZvciBpdHMgcG93ZXJmdWwgYWRkaXRpb25zIHRvIHN0YW5kYXJkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCitQZXJsIDUgaXMgd2VsbCBrbm93biBmb3IgaXRzIHBvd2VyZnVsIGFkZGl0aW9ucyB0byBzdGFuZGFyZCByZWd1bGFyIGV4cHJlc3Npb25zLgogRm9yIHRoZXNlIG5ldyBmZWF0dXJlcyB0aGUgUGVybCBkZXZlbG9wZXJzIGNvdWxkbid0IGNob29zZSBuZXcgc2luZ2xlLWtleXN0cm9rZSBtZXRhY2hhcmFjdGVycwogb3IgbmV3IHNwZWNpYWwgc2VxdWVuY2VzIGJlZ2lubmluZyB3aXRoIGBgXGBgIHdpdGhvdXQgbWFraW5nIFBlcmwncyByZWd1bGFyCiBleHByZXNzaW9ucyBjb25mdXNpbmdseSBkaWZmZXJlbnQgZnJvbSBzdGFuZGFyZCBSRXMuICBJZiB0aGV5IGNob3NlIGBgJmBgIGFzIGEKZGlmZiAtLWdpdCBhL0RvYy9ob3d0by9zb2NrZXRzLnJzdCBiL0RvYy9ob3d0by9zb2NrZXRzLnJzdAppbmRleCA3YTliMGVkLi4wNDM5NGQ0IDEwMDY0NAotLS0gYS9Eb2MvaG93dG8vc29ja2V0cy5yc3QKKysrIGIvRG9jL2hvd3RvL3NvY2tldHMucnN0CkBAIC0xODAsNyArMTgwLDcgQEAKIEFzc3VtaW5nIHlvdSBkb24ndCB3YW50IHRvIGVuZCB0aGUgY29ubmVjdGlvbiwgdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIGEgZml4ZWQKIGxlbmd0aCBtZXNzYWdlOjoKIAotICAgY2xhc3MgbXlzb2NrZXQ6CisgICBjbGFzcyBNeVNvY2tldDoKICAgICAgICAiIiJkZW1vbnN0cmF0aW9uIGNsYXNzIG9ubHkKICAgICAgICAgIC0gY29kZWQgZm9yIGNsYXJpdHksIG5vdCBlZmZpY2llbmN5CiAgICAgICAgIiIiCkBAIC0xODksOCArMTg5LDggQEAKICAgICAgICAgICAgaWYgc29jayBpcyBOb25lOgogICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQotICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrCisgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBzb2NrCiAKICAgICAgICBkZWYgY29ubmVjdChzZWxmLCBob3N0LCBwb3J0KToKICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3QoKGhvc3QsIHBvcnQpKQpAQCAtMjA0LDEzICsyMDQsMTUgQEAKICAgICAgICAgICAgICAgIHRvdGFsc2VudCA9IHRvdGFsc2VudCArIHNlbnQKIAogICAgICAgIGRlZiBteXJlY2VpdmUoc2VsZik6Ci0gICAgICAgICAgIG1zZyA9IGInJwotICAgICAgICAgICB3aGlsZSBsZW4obXNnKSA8IE1TR0xFTjoKLSAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5zb2NrLnJlY3YoTVNHTEVOLWxlbihtc2cpKQorICAgICAgICAgICBjaHVua3MgPSBbXQorICAgICAgICAgICBieXRlc19yZWNkID0gMAorICAgICAgICAgICB3aGlsZSBieXRlc19yZWNkIDwgTVNHTEVOOgorICAgICAgICAgICAgICAgY2h1bmsgPSBzZWxmLnNvY2sucmVjdihtaW4oTVNHTEVOIC0gYnl0ZXNfcmVjZCwgMjA0OCkpCiAgICAgICAgICAgICAgICBpZiBjaHVuayA9PSBiJyc6CiAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJzb2NrZXQgY29ubmVjdGlvbiBicm9rZW4iKQotICAgICAgICAgICAgICAgbXNnID0gbXNnICsgY2h1bmsKLSAgICAgICAgICAgcmV0dXJuIG1zZworICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChjaHVuaykKKyAgICAgICAgICAgICAgIGJ5dGVzX3JlY2QgPSBieXRlc19yZWNkICsgbGVuKGNodW5rKQorICAgICAgICAgICByZXR1cm4gYicnLmpvaW4oY2h1bmtzKQogCiBUaGUgc2VuZGluZyBjb2RlIGhlcmUgaXMgdXNhYmxlIGZvciBhbG1vc3QgYW55IG1lc3NhZ2luZyBzY2hlbWUgLSBpbiBQeXRob24geW91CiBzZW5kIHN0cmluZ3MsIGFuZCB5b3UgY2FuIHVzZSBgYGxlbigpYGAgdG8gZGV0ZXJtaW5lIGl0cyBsZW5ndGggKGV2ZW4gaWYgaXQgaGFzCkBAIC0yMzIsNyArMjM0LDcgQEAKIGZvbGxvd2luZyBtZXNzYWdlLiBZb3UnbGwgbmVlZCB0byBwdXQgdGhhdCBhc2lkZSBhbmQgaG9sZCBvbnRvIGl0LCB1bnRpbCBpdCdzCiBuZWVkZWQuCiAKLVByZWZpeGluZyB0aGUgbWVzc2FnZSB3aXRoIGl0J3MgbGVuZ3RoIChzYXksIGFzIDUgbnVtZXJpYyBjaGFyYWN0ZXJzKSBnZXRzIG1vcmUKK1ByZWZpeGluZyB0aGUgbWVzc2FnZSB3aXRoIGl0cyBsZW5ndGggKHNheSwgYXMgNSBudW1lcmljIGNoYXJhY3RlcnMpIGdldHMgbW9yZQogY29tcGxleCwgYmVjYXVzZSAoYmVsaWV2ZSBpdCBvciBub3QpLCB5b3UgbWF5IG5vdCBnZXQgYWxsIDUgY2hhcmFjdGVycyBpbiBvbmUKIGBgcmVjdmBgLiBJbiBwbGF5aW5nIGFyb3VuZCwgeW91J2xsIGdldCBhd2F5IHdpdGggaXQ7IGJ1dCBpbiBoaWdoIG5ldHdvcmsgbG9hZHMsCiB5b3VyIGNvZGUgd2lsbCB2ZXJ5IHF1aWNrbHkgYnJlYWsgdW5sZXNzIHlvdSB1c2UgdHdvIGBgcmVjdmBgIGxvb3BzIC0gdGhlIGZpcnN0CmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vdW5pY29kZS5yc3QgYi9Eb2MvaG93dG8vdW5pY29kZS5yc3QKaW5kZXggOWQ0OGE3OC4uYjQ5YWMzOSAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3VuaWNvZGUucnN0CisrKyBiL0RvYy9ob3d0by91bmljb2RlLnJzdApAQCAtMzIsMTEgKzMyLDExIEBACiBJbiB0aGUgbWlkLTE5ODBzIGFuIEFwcGxlIElJIEJBU0lDIHByb2dyYW0gd3JpdHRlbiBieSBhIEZyZW5jaCBzcGVha2VyCiBtaWdodCBoYXZlIGxpbmVzIGxpa2UgdGhlc2U6OgogCi0gICBQUklOVCAiRklDSElFUiBFU1QgQ09NUExFVEUuIgotICAgUFJJTlQgIkNBUkFDVEVSRSBOT04gQUNDRVBURS4iCisgICBQUklOVCAiTUlTRSBBIEpPVVIgVEVSTUlORUUiCisgICBQUklOVCAiUEFSQU1FVFJFUyBFTlJFR0lTVFJFUyIKIAotVGhvc2UgbWVzc2FnZXMgc2hvdWxkIGNvbnRhaW4gYWNjZW50cyAoY29tcGxldMOpLCBjYXJhY3TDqHJlLCBhY2NlcHTDqSksCi1hbmQgdGhleSBqdXN0IGxvb2sgd3JvbmcgdG8gc29tZW9uZSB3aG8gY2FuIHJlYWQgRnJlbmNoLgorVGhvc2UgbWVzc2FnZXMgc2hvdWxkIGNvbnRhaW4gYWNjZW50cyAodGVybWluw6llLCBwYXJhbcOodHJlLCBlbnJlZ2lzdHLDqXMpIGFuZAordGhleSBqdXN0IGxvb2sgd3JvbmcgdG8gc29tZW9uZSB3aG8gY2FuIHJlYWQgRnJlbmNoLgogCiBJbiB0aGUgMTk4MHMsIGFsbW9zdCBhbGwgcGVyc29uYWwgY29tcHV0ZXJzIHdlcmUgOC1iaXQsIG1lYW5pbmcgdGhhdCBieXRlcyBjb3VsZAogaG9sZCB2YWx1ZXMgcmFuZ2luZyBmcm9tIDAgdG8gMjU1LiAgQVNDSUkgY29kZXMgb25seSB3ZW50IHVwIHRvIDEyNywgc28gc29tZQpAQCAtNDksNyArNDksNyBAQAogCiAyNTUgY2hhcmFjdGVycyBhcmVuJ3QgdmVyeSBtYW55LiAgRm9yIGV4YW1wbGUsIHlvdSBjYW4ndCBmaXQgYm90aCB0aGUgYWNjZW50ZWQKIGNoYXJhY3RlcnMgdXNlZCBpbiBXZXN0ZXJuIEV1cm9wZSBhbmQgdGhlIEN5cmlsbGljIGFscGhhYmV0IHVzZWQgZm9yIFJ1c3NpYW4KLWludG8gdGhlIDEyOC0tMjU1IHJhbmdlIGJlY2F1c2UgdGhlcmUgYXJlIG1vcmUgdGhhbiAxMjcgc3VjaCBjaGFyYWN0ZXJzLgoraW50byB0aGUgMTI4LS0yNTUgcmFuZ2UgYmVjYXVzZSB0aGVyZSBhcmUgbW9yZSB0aGFuIDEyOCBzdWNoIGNoYXJhY3RlcnMuCiAKIFlvdSBjb3VsZCB3cml0ZSBmaWxlcyB1c2luZyBkaWZmZXJlbnQgY29kZXMgKGFsbCB5b3VyIFJ1c3NpYW4gZmlsZXMgaW4gYSBjb2RpbmcKIHN5c3RlbSBjYWxsZWQgS09JOCwgYWxsIHlvdXIgRnJlbmNoIGZpbGVzIGluIGEgZGlmZmVyZW50IGNvZGluZyBzeXN0ZW0gY2FsbGVkCkBAIC0yNDYsNyArMjQ2LDcgQEAKICAgIHRyeToKICAgICAgICB3aXRoIG9wZW4oJy90bXAvaW5wdXQudHh0JywgJ3InKSBhcyBmOgogICAgICAgICAgICAuLi4KLSAgIGV4Y2VwdCBJT0Vycm9yOgorICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIyAnRmlsZSBub3QgZm91bmQnIGVycm9yIG1lc3NhZ2UuCiAgICAgICAgcHJpbnQoIkZpY2hpZXIgbm9uIHRyb3V2w6kiKQogCkBAIC00OTMsMTAgKzQ5MywxMSBAQAogCiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDptb2Q6YGNvZGVjc2AgbW9kdWxlLgogCi1NYXJjLUFuZHLDqSBMZW1idXJnIGdhdmUgYGEgcHJlc2VudGF0aW9uIHRpdGxlZCAiUHl0aG9uIGFuZCBVbmljb2RlIiAoUERGIHNsaWRlcykgPGh0dHA6Ly9kb3dubG9hZHMuZWdlbml4LmNvbS9weXRob24vVW5pY29kZS1FUEMyMDAyLVRhbGsucGRmPmBfIGF0Ci1FdXJvUHl0aG9uIDIwMDIuICBUaGUgc2xpZGVzIGFyZSBhbiBleGNlbGxlbnQgb3ZlcnZpZXcgb2YgdGhlIGRlc2lnbgotb2YgUHl0aG9uIDIncyBVbmljb2RlIGZlYXR1cmVzICh3aGVyZSB0aGUgVW5pY29kZSBzdHJpbmcgdHlwZSBpcwotY2FsbGVkIGBgdW5pY29kZWBgIGFuZCBsaXRlcmFscyBzdGFydCB3aXRoIGBgdWBgKS4KK01hcmMtQW5kcsOpIExlbWJ1cmcgZ2F2ZSBgYSBwcmVzZW50YXRpb24gdGl0bGVkICJQeXRob24gYW5kIFVuaWNvZGUiIChQREYgc2xpZGVzKQorPGh0dHBzOi8vZG93bmxvYWRzLmVnZW5peC5jb20vcHl0aG9uL1VuaWNvZGUtRVBDMjAwMi1UYWxrLnBkZj5gXyBhdAorRXVyb1B5dGhvbiAyMDAyLiAgVGhlIHNsaWRlcyBhcmUgYW4gZXhjZWxsZW50IG92ZXJ2aWV3IG9mIHRoZSBkZXNpZ24gb2YgUHl0aG9uCisyJ3MgVW5pY29kZSBmZWF0dXJlcyAod2hlcmUgdGhlIFVuaWNvZGUgc3RyaW5nIHR5cGUgaXMgY2FsbGVkIGBgdW5pY29kZWBgIGFuZAorbGl0ZXJhbHMgc3RhcnQgd2l0aCBgYHVgYCkuCiAKIAogUmVhZGluZyBhbmQgV3JpdGluZyBVbmljb2RlIERhdGEKQEAgLTY5NiwxMyArNjk3LDIwIEBACiBSZWZlcmVuY2VzCiAtLS0tLS0tLS0tCiAKLU9uZSBzZWN0aW9uIG9mIGBNYXN0ZXJpbmcgUHl0aG9uIDMgSW5wdXQvT3V0cHV0IDxodHRwOi8vcHl2aWRlby5vcmcvdmlkZW8vMjg5L3B5Y29uLTIwMTAtLW1hc3RlcmluZy1weXRob24tMy1pLW8+YF8sICBhIFB5Q29uIDIwMTAgdGFsayBieSBEYXZpZCBCZWF6bGV5LCBkaXNjdXNzZXMgdGV4dCBwcm9jZXNzaW5nIGFuZCBiaW5hcnkgZGF0YSBoYW5kbGluZy4KK09uZSBzZWN0aW9uIG9mIGBNYXN0ZXJpbmcgUHl0aG9uIDMgSW5wdXQvT3V0cHV0Cis8aHR0cDovL3B5dmlkZW8ub3JnL3ZpZGVvLzI4OS9weWNvbi0yMDEwLS1tYXN0ZXJpbmctcHl0aG9uLTMtaS1vPmBfLAorYSBQeUNvbiAyMDEwIHRhbGsgYnkgRGF2aWQgQmVhemxleSwgZGlzY3Vzc2VzIHRleHQgcHJvY2Vzc2luZyBhbmQgYmluYXJ5IGRhdGEgaGFuZGxpbmcuCiAKLVRoZSBgUERGIHNsaWRlcyBmb3IgTWFyYy1BbmRyw6kgTGVtYnVyZydzIHByZXNlbnRhdGlvbiAiV3JpdGluZyBVbmljb2RlLWF3YXJlIEFwcGxpY2F0aW9ucyBpbiBQeXRob24iIDxodHRwOi8vZG93bmxvYWRzLmVnZW5peC5jb20vcHl0aG9uL0xTTTIwMDUtRGV2ZWxvcGluZy1Vbmljb2RlLWF3YXJlLWFwcGxpY2F0aW9ucy1pbi1QeXRob24ucGRmPmBfCitUaGUgYFBERiBzbGlkZXMgZm9yIE1hcmMtQW5kcsOpIExlbWJ1cmcncyBwcmVzZW50YXRpb24gIldyaXRpbmcgVW5pY29kZS1hd2FyZQorQXBwbGljYXRpb25zIGluIFB5dGhvbiIKKzxodHRwczovL2Rvd25sb2Fkcy5lZ2VuaXguY29tL3B5dGhvbi9MU00yMDA1LURldmVsb3BpbmctVW5pY29kZS1hd2FyZS1hcHBsaWNhdGlvbnMtaW4tUHl0aG9uLnBkZj5gXwogZGlzY3VzcyBxdWVzdGlvbnMgb2YgY2hhcmFjdGVyIGVuY29kaW5ncyBhcyB3ZWxsIGFzIGhvdyB0byBpbnRlcm5hdGlvbmFsaXplCiBhbmQgbG9jYWxpemUgYW4gYXBwbGljYXRpb24uICBUaGVzZSBzbGlkZXMgY292ZXIgUHl0aG9uIDIueCBvbmx5LgogCi1gVGhlIEd1dHMgb2YgVW5pY29kZSBpbiBQeXRob24gPGh0dHA6Ly9weXZpZGVvLm9yZy92aWRlby8xNzY4L3RoZS1ndXRzLW9mLXVuaWNvZGUtaW4tcHl0aG9uPmBfIGlzIGEgUHlDb24gMjAxMyB0YWxrIGJ5IEJlbmphbWluIFBldGVyc29uIHRoYXQgZGlzY3Vzc2VzIHRoZSBpbnRlcm5hbCBVbmljb2RlIHJlcHJlc2VudGF0aW9uIGluIFB5dGhvbiAzLjMuCitgVGhlIEd1dHMgb2YgVW5pY29kZSBpbiBQeXRob24KKzxodHRwOi8vcHl2aWRlby5vcmcvdmlkZW8vMTc2OC90aGUtZ3V0cy1vZi11bmljb2RlLWluLXB5dGhvbj5gXworaXMgYSBQeUNvbiAyMDEzIHRhbGsgYnkgQmVuamFtaW4gUGV0ZXJzb24gdGhhdCBkaXNjdXNzZXMgdGhlIGludGVybmFsIFVuaWNvZGUKK3JlcHJlc2VudGF0aW9uIGluIFB5dGhvbiAzLjMuCiAKIAogQWNrbm93bGVkZ2VtZW50cwpkaWZmIC0tZ2l0IGEvRG9jL2hvd3RvL3VybGxpYjIucnN0IGIvRG9jL2hvd3RvL3VybGxpYjIucnN0CmluZGV4IGNjMGQ4NWUuLjRhNjdiMzAgMTAwNjQ0Ci0tLSBhL0RvYy9ob3d0by91cmxsaWIyLnJzdAorKysgYi9Eb2MvaG93dG8vdXJsbGliMi5yc3QKQEAgLTI2LDcgKzI2LDcgQEAKIAogICAgICAgICBBIHR1dG9yaWFsIG9uICpCYXNpYyBBdXRoZW50aWNhdGlvbiosIHdpdGggZXhhbXBsZXMgaW4gUHl0aG9uLgogCi0qKnVybGxpYi5yZXF1ZXN0KiogaXMgYSBgUHl0aG9uIDxodHRwOi8vd3d3LnB5dGhvbi5vcmc+YF8gbW9kdWxlIGZvciBmZXRjaGluZyBVUkxzCisqKnVybGxpYi5yZXF1ZXN0KiogaXMgYSBQeXRob24gbW9kdWxlIGZvciBmZXRjaGluZyBVUkxzCiAoVW5pZm9ybSBSZXNvdXJjZSBMb2NhdG9ycykuIEl0IG9mZmVycyBhIHZlcnkgc2ltcGxlIGludGVyZmFjZSwgaW4gdGhlIGZvcm0gb2YKIHRoZSAqdXJsb3BlbiogZnVuY3Rpb24uIFRoaXMgaXMgY2FwYWJsZSBvZiBmZXRjaGluZyBVUkxzIHVzaW5nIGEgdmFyaWV0eSBvZgogZGlmZmVyZW50IHByb3RvY29scy4gSXQgYWxzbyBvZmZlcnMgYSBzbGlnaHRseSBtb3JlIGNvbXBsZXggaW50ZXJmYWNlIGZvcgpAQCAtNTMsOCArNTMsOCBAQAogVGhlIHNpbXBsZXN0IHdheSB0byB1c2UgdXJsbGliLnJlcXVlc3QgaXMgYXMgZm9sbG93czo6CiAKICAgICBpbXBvcnQgdXJsbGliLnJlcXVlc3QKLSAgICByZXNwb25zZSA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oJ2h0dHA6Ly9weXRob24ub3JnLycpCi0gICAgaHRtbCA9IHJlc3BvbnNlLnJlYWQoKQorICAgIHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbignaHR0cDovL3B5dGhvbi5vcmcvJykgYXMgcmVzcG9uc2U6CisgICAgICAgaHRtbCA9IHJlc3BvbnNlLnJlYWQoKQogCiBJZiB5b3Ugd2lzaCB0byByZXRyaWV2ZSBhIHJlc291cmNlIHZpYSBVUkwgYW5kIHN0b3JlIGl0IGluIGEgdGVtcG9yYXJ5IGxvY2F0aW9uLAogeW91IGNhbiBkbyBzbyB2aWEgdGhlIDpmdW5jOmB+dXJsbGliLnJlcXVlc3QudXJscmV0cmlldmVgIGZ1bmN0aW9uOjoKQEAgLTc5LDggKzc5LDggQEAKICAgICBpbXBvcnQgdXJsbGliLnJlcXVlc3QKIAogICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QoJ2h0dHA6Ly93d3cudm9pZHNwYWNlLm9yZy51aycpCi0gICAgcmVzcG9uc2UgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKLSAgICB0aGVfcGFnZSA9IHJlc3BvbnNlLnJlYWQoKQorICAgIHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpIGFzIHJlc3BvbnNlOgorICAgICAgIHRoZV9wYWdlID0gcmVzcG9uc2UucmVhZCgpCiAKIE5vdGUgdGhhdCB1cmxsaWIucmVxdWVzdCBtYWtlcyB1c2Ugb2YgdGhlIHNhbWUgUmVxdWVzdCBpbnRlcmZhY2UgdG8gaGFuZGxlIGFsbCBVUkwKIHNjaGVtZXMuICBGb3IgZXhhbXBsZSwgeW91IGNhbiBtYWtlIGFuIEZUUCByZXF1ZXN0IGxpa2Ugc286OgpAQCAtOTcsNyArOTcsNyBAQAogLS0tLQogCiBTb21ldGltZXMgeW91IHdhbnQgdG8gc2VuZCBkYXRhIHRvIGEgVVJMIChvZnRlbiB0aGUgVVJMIHdpbGwgcmVmZXIgdG8gYSBDR0kKLShDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UpIHNjcmlwdCBbI11fIG9yIG90aGVyIHdlYiBhcHBsaWNhdGlvbikuIFdpdGggSFRUUCwKKyhDb21tb24gR2F0ZXdheSBJbnRlcmZhY2UpIHNjcmlwdCBvciBvdGhlciB3ZWIgYXBwbGljYXRpb24pLiBXaXRoIEhUVFAsCiB0aGlzIGlzIG9mdGVuIGRvbmUgdXNpbmcgd2hhdCdzIGtub3duIGFzIGEgKipQT1NUKiogcmVxdWVzdC4gVGhpcyBpcyBvZnRlbiB3aGF0CiB5b3VyIGJyb3dzZXIgZG9lcyB3aGVuIHlvdSBzdWJtaXQgYSBIVE1MIGZvcm0gdGhhdCB5b3UgZmlsbGVkIGluIG9uIHRoZSB3ZWIuIE5vdAogYWxsIFBPU1RzIGhhdmUgdG8gY29tZSBmcm9tIGZvcm1zOiB5b3UgY2FuIHVzZSBhIFBPU1QgdG8gdHJhbnNtaXQgYXJiaXRyYXJ5IGRhdGEKQEAgLTExNSwxMCArMTE1LDEwIEBACiAgICAgICAgICAgICAgICdsYW5ndWFnZScgOiAnUHl0aG9uJyB9CiAKICAgICBkYXRhID0gdXJsbGliLnBhcnNlLnVybGVuY29kZSh2YWx1ZXMpCi0gICAgZGF0YSA9IGRhdGEuZW5jb2RlKCd1dGYtOCcpICMgZGF0YSBzaG91bGQgYmUgYnl0ZXMKKyAgICBkYXRhID0gZGF0YS5lbmNvZGUoJ2FzY2lpJykgIyBkYXRhIHNob3VsZCBiZSBieXRlcwogICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJsLCBkYXRhKQotICAgIHJlc3BvbnNlID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpCi0gICAgdGhlX3BhZ2UgPSByZXNwb25zZS5yZWFkKCkKKyAgICB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKSBhcyByZXNwb25zZToKKyAgICAgICB0aGVfcGFnZSA9IHJlc3BvbnNlLnJlYWQoKQogCiBOb3RlIHRoYXQgb3RoZXIgZW5jb2RpbmdzIGFyZSBzb21ldGltZXMgcmVxdWlyZWQgKGUuZy4gZm9yIGZpbGUgdXBsb2FkIGZyb20gSFRNTAogZm9ybXMgLSBzZWUgYEhUTUwgU3BlY2lmaWNhdGlvbiwgRm9ybSBTdWJtaXNzaW9uCkBAIC0xNzQsMTcgKzE3NCwxNyBAQAogICAgIGltcG9ydCB1cmxsaWIucmVxdWVzdAogCiAgICAgdXJsID0gJ2h0dHA6Ly93d3cuc29tZXNlcnZlci5jb20vY2dpLWJpbi9yZWdpc3Rlci5jZ2knCi0gICAgdXNlcl9hZ2VudCA9ICdNb3ppbGxhLzQuMCAoY29tcGF0aWJsZTsgTVNJRSA1LjU7IFdpbmRvd3MgTlQpJworICAgIHVzZXJfYWdlbnQgPSAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgNi4xOyBXaW42NDsgeDY0KScKICAgICB2YWx1ZXMgPSB7J25hbWUnIDogJ01pY2hhZWwgRm9vcmQnLAogICAgICAgICAgICAgICAnbG9jYXRpb24nIDogJ05vcnRoYW1wdG9uJywKICAgICAgICAgICAgICAgJ2xhbmd1YWdlJyA6ICdQeXRob24nIH0KICAgICBoZWFkZXJzID0geyAnVXNlci1BZ2VudCcgOiB1c2VyX2FnZW50IH0KIAotICAgIGRhdGEgID0gdXJsbGliLnBhcnNlLnVybGVuY29kZSh2YWx1ZXMpCi0gICAgZGF0YSA9IGRhdGEuZW5jb2RlKCd1dGYtOCcpCisgICAgZGF0YSA9IHVybGxpYi5wYXJzZS51cmxlbmNvZGUodmFsdWVzKQorICAgIGRhdGEgPSBkYXRhLmVuY29kZSgnYXNjaWknKQogICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJsLCBkYXRhLCBoZWFkZXJzKQotICAgIHJlc3BvbnNlID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbihyZXEpCi0gICAgdGhlX3BhZ2UgPSByZXNwb25zZS5yZWFkKCkKKyAgICB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKSBhcyByZXNwb25zZToKKyAgICAgICB0aGVfcGFnZSA9IHJlc3BvbnNlLnJlYWQoKQogCiBUaGUgcmVzcG9uc2UgYWxzbyBoYXMgdHdvIHVzZWZ1bCBtZXRob2RzLiBTZWUgdGhlIHNlY3Rpb24gb24gYGluZm8gYW5kIGdldHVybGBfCiB3aGljaCBjb21lcyBhZnRlciB3ZSBoYXZlIGEgbG9vayBhdCB3aGF0IGhhcHBlbnMgd2hlbiB0aGluZ3MgZ28gd3JvbmcuCkBAIC01MDcsNyArNTA3LDcgQEAKICAgICAtLSBgYFByb3h5SGFuZGxlcmBgIChpZiBhIHByb3h5IHNldHRpbmcgc3VjaCBhcyBhbiA6ZW52dmFyOmBodHRwX3Byb3h5YAogICAgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCksIGBgVW5rbm93bkhhbmRsZXJgYCwgYGBIVFRQSGFuZGxlcmBgLAogICAgIGBgSFRUUERlZmF1bHRFcnJvckhhbmRsZXJgYCwgYGBIVFRQUmVkaXJlY3RIYW5kbGVyYGAsIGBgRlRQSGFuZGxlcmBgLAotICAgIGBgRmlsZUhhbmRsZXJgYCwgYGBIVFRQRXJyb3JQcm9jZXNzb3JgYC4KKyAgICBgYEZpbGVIYW5kbGVyYGAsIGBgRGF0YUhhbmRsZXJgYCwgYGBIVFRQRXJyb3JQcm9jZXNzb3JgYC4KIAogYGB0b3BfbGV2ZWxfdXJsYGAgaXMgaW4gZmFjdCAqZWl0aGVyKiBhIGZ1bGwgVVJMIChpbmNsdWRpbmcgdGhlICdodHRwOicgc2NoZW1lCiBjb21wb25lbnQgYW5kIHRoZSBob3N0bmFtZSBhbmQgb3B0aW9uYWxseSB0aGUgcG9ydCBudW1iZXIpCkBAIC01NzcsMTIgKzU3Nyw3IEBACiAKIFRoaXMgZG9jdW1lbnQgd2FzIHJldmlld2VkIGFuZCByZXZpc2VkIGJ5IEpvaG4gTGVlLgogCi0uLiBbI10gRm9yIGFuIGludHJvZHVjdGlvbiB0byB0aGUgQ0dJIHByb3RvY29sIHNlZQotICAgICAgIGBXcml0aW5nIFdlYiBBcHBsaWNhdGlvbnMgaW4gUHl0aG9uIDxodHRwOi8vd3d3LnB5emluZS5jb20vSXNzdWUwMDgvU2VjdGlvbl9BcnRpY2xlcy9hcnRpY2xlX0NHSU9uZS5odG1sPmBfLgotLi4gWyNdIExpa2UgR29vZ2xlIGZvciBleGFtcGxlLiBUaGUgKnByb3Blciogd2F5IHRvIHVzZSBnb29nbGUgZnJvbSBhIHByb2dyYW0KLSAgICAgICBpcyB0byB1c2UgYFB5R29vZ2xlIDxodHRwOi8vcHlnb29nbGUuc291cmNlZm9yZ2UubmV0PmBfIG9mIGNvdXJzZS4gU2VlCi0gICAgICAgYFZvaWRzcGFjZSBHb29nbGUgPGh0dHA6Ly93d3cudm9pZHNwYWNlLm9yZy51ay9weXRob24vcmVjaXBlYm9vay5zaHRtbCNnb29nbGU+YF8KLSAgICAgICBmb3Igc29tZSBleGFtcGxlcyBvZiB1c2luZyB0aGUgR29vZ2xlIEFQSS4KKy4uIFsjXSBHb29nbGUgZm9yIGV4YW1wbGUuCiAuLiBbI10gQnJvd3NlciBzbmlmZmluZyBpcyBhIHZlcnkgYmFkIHByYWN0aXNlIGZvciB3ZWJzaXRlIGRlc2lnbiAtIGJ1aWxkaW5nCiAgICAgICAgc2l0ZXMgdXNpbmcgd2ViIHN0YW5kYXJkcyBpcyBtdWNoIG1vcmUgc2Vuc2libGUuIFVuZm9ydHVuYXRlbHkgYSBsb3Qgb2YKICAgICAgICBzaXRlcyBzdGlsbCBzZW5kIGRpZmZlcmVudCB2ZXJzaW9ucyB0byBkaWZmZXJlbnQgYnJvd3NlcnMuCkBAIC01OTYsNSArNTkxLDUgQEAKICAgICAgICBzY3JpcHRzIHdpdGggYSBsb2NhbGhvc3Qgc2VydmVyLCBJIGhhdmUgdG8gcHJldmVudCB1cmxsaWIgZnJvbSB1c2luZwogICAgICAgIHRoZSBwcm94eS4KIC4uIFsjXSB1cmxsaWIgb3BlbmVyIGZvciBTU0wgcHJveHkgKENPTk5FQ1QgbWV0aG9kKTogYEFTUE4gQ29va2Jvb2sgUmVjaXBlCi0gICAgICAgPGh0dHA6Ly9hc3BuLmFjdGl2ZXN0YXRlLmNvbS9BU1BOL0Nvb2tib29rL1B5dGhvbi9SZWNpcGUvNDU2MTk1PmBfLgorICAgICAgIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy80NTYxOTUvPmBfLgogCmRpZmYgLS1naXQgYS9Eb2MvaG93dG8vd2Vic2VydmVycy5yc3QgYi9Eb2MvaG93dG8vd2Vic2VydmVycy5yc3QKaW5kZXggNzJjY2QxZi4uOWU5YjY5ZCAxMDA2NDQKLS0tIGEvRG9jL2hvd3RvL3dlYnNlcnZlcnMucnN0CisrKyBiL0RvYy9ob3d0by93ZWJzZXJ2ZXJzLnJzdApAQCAtMjYsNyArMjYsNyBAQAogICAgV2hpbGUgdGhpcyBIT1dUTyB0cmllcyB0byBnaXZlIGFuIG92ZXJ2aWV3IG9mIFB5dGhvbiBpbiB0aGUgd2ViLCBpdCBjYW5ub3QKICAgIGFsd2F5cyBiZSBhcyB1cCB0byBkYXRlIGFzIGRlc2lyZWQuICBXZWIgZGV2ZWxvcG1lbnQgaW4gUHl0aG9uIGlzIHJhcGlkbHkKICAgIG1vdmluZyBmb3J3YXJkLCBzbyB0aGUgd2lraSBwYWdlIG9uIGBXZWIgUHJvZ3JhbW1pbmcKLSAgIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vV2ViUHJvZ3JhbW1pbmc+YF8gbWF5IGJlIG1vcmUgaW4gc3luYyB3aXRoCisgICA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9XZWJQcm9ncmFtbWluZz5gXyBtYXkgYmUgbW9yZSBpbiBzeW5jIHdpdGgKICAgIHJlY2VudCBkZXZlbG9wbWVudC4KIAogCkBAIC04Niw3ICs4Niw3IEBACiAgICAgIGFwcGxpY2F0aW9ucywgaW5zdGVhZCBvZiBwcmVzZW50aW5nIGEgIjUwMCBJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IiIG1lc3NhZ2UKIAogICAgVGhlIFB5dGhvbiB3aWtpIGZlYXR1cmVzIGEgcGFnZSBvbiBgQ0dJIHNjcmlwdHMKLSAgIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vQ2dpU2NyaXB0cz5gXyB3aXRoIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgorICAgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vQ2dpU2NyaXB0cz5gXyB3aXRoIHNvbWUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbgogICAgYWJvdXQgQ0dJIGluIFB5dGhvbi4KIAogCkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgdHV0b3JpYWwgYWxzbyBkZXNjcmliZXMgdGhlIG1vc3QgY29tbW9uIGdvdGNoYXMgdGhhdCBtaWdodCBhcmlzZS4KIAogKiBPbiBsaWdodHRwZCB5b3UgbmVlZCB0byB1c2UgdGhlIGBDR0kgbW9kdWxlCi0gIDxodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvd2lraS9saWdodHRwZC9Eb2NzOk1vZENHST5gX1wgLCB3aGljaCBjYW4gYmUgY29uZmlndXJlZAorICA8aHR0cDovL3JlZG1pbmUubGlnaHR0cGQubmV0L3Byb2plY3RzL2xpZ2h0dHBkL3dpa2kvRG9jc19Nb2RDR0k+YF9cICwgd2hpY2ggY2FuIGJlIGNvbmZpZ3VyZWQKICAgaW4gYSBzdHJhaWdodGZvcndhcmQgd2F5LiAgSXQgYm9pbHMgZG93biB0byBzZXR0aW5nIGBgY2dpLmFzc2lnbmBgIHByb3Blcmx5LgogCiAKQEAgLTIxMCw3ICsyMTAsNyBAQAogLS0tLS0tLS0tLQogCiBQZW9wbGUgY29taW5nIGZyb20gUEhQIG9mdGVuIGZpbmQgaXQgaGFyZCB0byBncmFzcCBob3cgdG8gdXNlIFB5dGhvbiBpbiB0aGUgd2ViLgotVGhlaXIgZmlyc3QgdGhvdWdodCBpcyBtb3N0bHkgYG1vZF9weXRob24gPGh0dHA6Ly93d3cubW9kcHl0aG9uLm9yZy8+YF9cICwKK1RoZWlyIGZpcnN0IHRob3VnaHQgaXMgbW9zdGx5IGBtb2RfcHl0aG9uIDxodHRwOi8vbW9kcHl0aG9uLm9yZy8+YF9cICwKIGJlY2F1c2UgdGhleSB0aGluayB0aGF0IHRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgdG8gYGBtb2RfcGhwYGAuICBBY3R1YWxseSwgdGhlcmUKIGFyZSBtYW55IGRpZmZlcmVuY2VzLiAgV2hhdCBgYG1vZF9weXRob25gYCBkb2VzIGlzIGVtYmVkIHRoZSBpbnRlcnByZXRlciBpbnRvCiB0aGUgQXBhY2hlIHByb2Nlc3MsIHRodXMgc3BlZWRpbmcgdXAgcmVxdWVzdHMgYnkgbm90IGhhdmluZyB0byBzdGFydCBhIFB5dGhvbgpAQCAtMjYwLDEzICsyNjAsNiBAQAogVGhlc2UgZGF5cywgRmFzdENHSSBpcyBuZXZlciB1c2VkIGRpcmVjdGx5LiAgSnVzdCBsaWtlIGBgbW9kX3B5dGhvbmBgLCBpdCBpcyBvbmx5CiB1c2VkIGZvciB0aGUgZGVwbG95bWVudCBvZiBXU0dJIGFwcGxpY2F0aW9ucy4KIAotLi4gc2VlYWxzbzo6Ci0KLSAgICogYEZhc3RDR0ksIFNDR0ksIGFuZCBBcGFjaGU6IEJhY2tncm91bmQgYW5kIEZ1dHVyZQotICAgICA8aHR0cDovL3d3dy52bXVuaXguY29tL21hcmsvYmxvZy9hcmNoaXZlcy8yMDA2LzAxLzAyL2Zhc3RjZ2ktc2NnaS1hbmQtYXBhY2hlLWJhY2tncm91bmQtYW5kLWZ1dHVyZS8+YF8KLSAgICAgaXMgYSBkaXNjdXNzaW9uIG9uIHdoeSB0aGUgY29uY2VwdCBvZiBGYXN0Q0dJIGFuZCBTQ0dJIGlzIGJldHRlciB0aGFuIHRoYXQKLSAgICAgb2YgbW9kX3B5dGhvbi4KLQogCiBTZXR0aW5nIHVwIEZhc3RDR0kKIF5eXl5eXl5eXl5eXl5eXl5eXgpAQCAtMjgwLDggKzI3Myw4IEBACiAgIHRvIGJlIGxvYWRlZCBieSBBcGFjaGUuCiAKICogbGlnaHR0cGQgc2hpcHMgaXRzIG93biBgRmFzdENHSSBtb2R1bGUKLSAgPGh0dHA6Ly9yZWRtaW5lLmxpZ2h0dHBkLm5ldC93aWtpL2xpZ2h0dHBkL0RvY3M6TW9kRmFzdENHST5gXyBhcyB3ZWxsIGFzIGFuCi0gIGBTQ0dJIG1vZHVsZSA8aHR0cDovL3JlZG1pbmUubGlnaHR0cGQubmV0L3dpa2kvbGlnaHR0cGQvRG9jczpNb2RTQ0dJPmBfLgorICA8aHR0cDovL3JlZG1pbmUubGlnaHR0cGQubmV0L3Byb2plY3RzL2xpZ2h0dHBkL3dpa2kvRG9jc19Nb2RGYXN0Q0dJPmBfIGFzIHdlbGwgYXMgYW4KKyAgYFNDR0kgbW9kdWxlIDxodHRwOi8vcmVkbWluZS5saWdodHRwZC5uZXQvcHJvamVjdHMvbGlnaHR0cGQvd2lraS9Eb2NzX01vZFNDR0k+YF8uCiAKICogYG5naW54IDxodHRwOi8vbmdpbngub3JnLz5gXyBhbHNvIHN1cHBvcnRzIGBGYXN0Q0dJCiAgIDxodHRwOi8vd2lraS5uZ2lueC5vcmcvTmdpbnhTaW1wbGVQeXRob25GQ0dJPmBfLgpAQCAtMzA5LDEzICszMDIsMTMgQEAKICAgICBXU0dJU2VydmVyKGFwcCkucnVuKCkKIAogVGhpcyBpcyBhIHNpbXBsZSBXU0dJIGFwcGxpY2F0aW9uLCBidXQgeW91IG5lZWQgdG8gaW5zdGFsbCBgZmx1cAotPGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9mbHVwLzEuMD5gXyBmaXJzdCwgYXMgZmx1cCBoYW5kbGVzIHRoZSBsb3cgbGV2ZWwKKzxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL2ZsdXAvMS4wPmBfIGZpcnN0LCBhcyBmbHVwIGhhbmRsZXMgdGhlIGxvdyBsZXZlbAogRmFzdENHSSBhY2Nlc3MuCiAKIC4uIHNlZWFsc286OgogCiAgICBUaGVyZSBpcyBzb21lIGRvY3VtZW50YXRpb24gb24gYHNldHRpbmcgdXAgRGphbmdvIHdpdGggRmFzdENHSQotICAgPGh0dHA6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuL2Rldi9ob3d0by9kZXBsb3ltZW50L2Zhc3RjZ2kvPmBfLCBtb3N0IG9mCisgICA8aHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuL2Rldi9ob3d0by9kZXBsb3ltZW50L2Zhc3RjZ2kvPmBfLCBtb3N0IG9mCiAgICB3aGljaCBjYW4gYmUgcmV1c2VkIGZvciBvdGhlciBXU0dJLWNvbXBsaWFudCBmcmFtZXdvcmtzIGFuZCBsaWJyYXJpZXMuCiAgICBPbmx5IHRoZSBgYG1hbmFnZS5weWBgIHBhcnQgaGFzIHRvIGJlIGNoYW5nZWQsIHRoZSBleGFtcGxlIHVzZWQgaGVyZSBjYW4gYmUKICAgIHVzZWQgaW5zdGVhZC4gIERqYW5nbyBkb2VzIG1vcmUgb3IgbGVzcyB0aGUgZXhhY3Qgc2FtZSB0aGluZy4KQEAgLTQ4Niw3ICs0NzksNyBAQAogCiAgICBUaGVyZSBhcmUgZmFyIG1vcmUgY29tcG9uZW50cyB0aGFuIGNhbiBiZSBwcmVzZW50ZWQgaGVyZS4gIFRoZSBQeXRob24gd2lraQogICAgaGFzIGEgcGFnZSBhYm91dCB0aGVzZSBjb21wb25lbnRzLCBjYWxsZWQKLSAgIGBXZWIgQ29tcG9uZW50cyA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1dlYkNvbXBvbmVudHM+YF8uCisgICBgV2ViIENvbXBvbmVudHMgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vV2ViQ29tcG9uZW50cz5gXy4KIAogCiBUZW1wbGF0ZXMKQEAgLTUyMiwxMyArNTE1LDEzIEBACiAKICAgICogYE1ha28gPGh0dHA6Ly93d3cubWFrb3RlbXBsYXRlcy5vcmcvPmBfCiAgICAqIGBHZW5zaGkgPGh0dHA6Ly9nZW5zaGkuZWRnZXdhbGwub3JnLz5gXwotICAgKiBgSmluamEgPGh0dHA6Ly9qaW5qYS5wb2Nvby5vcmcvMi8+YF8KKyAgICogYEppbmphIDxodHRwOi8vamluamEucG9jb28ub3JnLz5gXwogCiAuLiBzZWVhbHNvOjoKIAogICAgVGhlcmUgYXJlIG1hbnkgdGVtcGxhdGUgZW5naW5lcyBjb21wZXRpbmcgZm9yIGF0dGVudGlvbiwgYmVjYXVzZSBpdCBpcwogICAgcHJldHR5IGVhc3kgdG8gY3JlYXRlIHRoZW0gaW4gUHl0aG9uLiAgVGhlIHBhZ2UgYFRlbXBsYXRpbmcKLSAgIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vVGVtcGxhdGluZz5gXyBpbiB0aGUgd2lraSBsaXN0cyBhIGJpZywKKyAgIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1RlbXBsYXRpbmc+YF8gaW4gdGhlIHdpa2kgbGlzdHMgYSBiaWcsCiAgICBldmVyLWdyb3dpbmcgbnVtYmVyIG9mIHRoZXNlLiAgVGhlIHRocmVlIGxpc3RlZCBhYm92ZSBhcmUgY29uc2lkZXJlZCAic2Vjb25kCiAgICBnZW5lcmF0aW9uIiB0ZW1wbGF0ZSBlbmdpbmVzIGFuZCBhcmUgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgogCkBAIC01NzgsMTEgKzU3MSwxMSBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgKiBgUGVyc2lzdGVuY2UgVG9vbHMgPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QZXJzaXN0ZW5jZVRvb2xzPmBfIGxpc3RzCisgICAqIGBQZXJzaXN0ZW5jZSBUb29scyA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9QZXJzaXN0ZW5jZVRvb2xzPmBfIGxpc3RzCiAgICAgIHBvc3NpYmlsaXRpZXMgb24gaG93IHRvIHNhdmUgZGF0YSBpbiB0aGUgZmlsZSBzeXN0ZW0uICBTb21lIG9mIHRoZXNlCiAgICAgIG1vZHVsZXMgYXJlIHBhcnQgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkKIAotICAgKiBgRGF0YWJhc2UgUHJvZ3JhbW1pbmcgPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9EYXRhYmFzZVByb2dyYW1taW5nPmBfCisgICAqIGBEYXRhYmFzZSBQcm9ncmFtbWluZyA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9EYXRhYmFzZVByb2dyYW1taW5nPmBfCiAgICAgIGhlbHBzIHdpdGggY2hvb3NpbmcgYSBtZXRob2QgZm9yIHNhdmluZyBkYXRhCiAKICAgICogYFNRTEFsY2hlbXkgPGh0dHA6Ly93d3cuc3FsYWxjaGVteS5vcmcvPmBfLCB0aGUgbW9zdCBwb3dlcmZ1bCBPUi1NYXBwZXIKQEAgLTY0NCw3ICs2MzcsNyBAQAogRGphbmdvCiBeXl5eXl4KIAotYERqYW5nbyA8aHR0cDovL3d3dy5kamFuZ29wcm9qZWN0LmNvbS8+YF8gaXMgYSBmcmFtZXdvcmsgY29uc2lzdGluZyBvZiBzZXZlcmFsCitgRGphbmdvIDxodHRwczovL3d3dy5kamFuZ29wcm9qZWN0LmNvbS8+YF8gaXMgYSBmcmFtZXdvcmsgY29uc2lzdGluZyBvZiBzZXZlcmFsCiB0aWdodGx5IGNvdXBsZWQgZWxlbWVudHMgd2hpY2ggd2VyZSB3cml0dGVuIGZyb20gc2NyYXRjaCBhbmQgd29yayB0b2dldGhlciB2ZXJ5CiB3ZWxsLiAgSXQgaW5jbHVkZXMgYW4gT1JNIHdoaWNoIGlzIHF1aXRlIHBvd2VyZnVsIHdoaWxlIGJlaW5nIHNpbXBsZSB0byB1c2UsCiBhbmQgaGFzIGEgZ3JlYXQgb25saW5lIGFkbWluaXN0cmF0aW9uIGludGVyZmFjZSB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byBlZGl0CkBAIC02NTcsNyArNjUwLDcgQEAKIEl0IGhhcyBhIGJpZywgaW50ZXJuYXRpb25hbCBjb21tdW5pdHksIHRoZSBtZW1iZXJzIG9mIHdoaWNoIGhhdmUgY3JlYXRlZCBtYW55CiB3ZWIgc2l0ZXMuICBUaGVyZSBhcmUgYWxzbyBhIGxvdCBvZiBhZGQtb24gcHJvamVjdHMgd2hpY2ggZXh0ZW5kIERqYW5nbydzIG5vcm1hbAogZnVuY3Rpb25hbGl0eS4gIFRoaXMgaXMgcGFydGx5IGR1ZSB0byBEamFuZ28ncyB3ZWxsIHdyaXR0ZW4gYG9ubGluZQotZG9jdW1lbnRhdGlvbiA8aHR0cDovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vPmBfIGFuZCB0aGUgYERqYW5nbyBib29rCitkb2N1bWVudGF0aW9uIDxodHRwczovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vPmBfIGFuZCB0aGUgYERqYW5nbyBib29rCiA8aHR0cDovL3d3dy5kamFuZ29ib29rLmNvbS8+YF8uCiAKIApAQCAtNjY1LDcgKzY1OCw3IEBACiAKICAgIEFsdGhvdWdoIERqYW5nbyBpcyBhbiBNVkMtc3R5bGUgZnJhbWV3b3JrLCBpdCBuYW1lcyB0aGUgZWxlbWVudHMKICAgIGRpZmZlcmVudGx5LCB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIGBEamFuZ28gRkFRCi0gICA8aHR0cDovL2RvY3MuZGphbmdvcHJvamVjdC5jb20vZW4vZGV2L2ZhcS9nZW5lcmFsLyNkamFuZ28tYXBwZWFycy10by1iZS1hLW12Yy1mcmFtZXdvcmstYnV0LXlvdS1jYWxsLXRoZS1jb250cm9sbGVyLXRoZS12aWV3LWFuZC10aGUtdmlldy10aGUtdGVtcGxhdGUtaG93LWNvbWUteW91LWRvbi10LXVzZS10aGUtc3RhbmRhcmQtbmFtZXM+YF8uCisgICA8aHR0cHM6Ly9kb2NzLmRqYW5nb3Byb2plY3QuY29tL2VuL2Rldi9mYXEvZ2VuZXJhbC8jZGphbmdvLWFwcGVhcnMtdG8tYmUtYS1tdmMtZnJhbWV3b3JrLWJ1dC15b3UtY2FsbC10aGUtY29udHJvbGxlci10aGUtdmlldy1hbmQtdGhlLXZpZXctdGhlLXRlbXBsYXRlLWhvdy1jb21lLXlvdS1kb24tdC11c2UtdGhlLXN0YW5kYXJkLW5hbWVzPmBfLgogCiAKIFR1cmJvR2VhcnMKQEAgLTY4Nyw3ICs2ODAsNyBAQAogVGhlIG5ld2VzdCB2ZXJzaW9uIG9mIFR1cmJvR2VhcnMsIHZlcnNpb24gMi4wLCBtb3ZlcyBldmVuIGZ1cnRoZXIgaW4gZGlyZWN0aW9uCiBvZiBXU0dJIHN1cHBvcnQgYW5kIGEgY29tcG9uZW50LWJhc2VkIGFyY2hpdGVjdHVyZS4gIFR1cmJvR2VhcnMgMiBpcyBiYXNlZCBvbgogdGhlIFdTR0kgc3RhY2sgb2YgYW5vdGhlciBwb3B1bGFyIGNvbXBvbmVudC1iYXNlZCB3ZWIgZnJhbWV3b3JrLCBgUHlsb25zCi08aHR0cDovL3B5bG9uc2hxLmNvbS8+YF8uCis8aHR0cDovL3d3dy5weWxvbnNwcm9qZWN0Lm9yZy8+YF8uCiAKIAogWm9wZQpAQCAtNzA4LDcgKzcwMSw3IEBACiBzZXBhcmF0ZSBmcmFtZXdvcmsgYmFzZWQgb24gdGhlIFpvcGUgY29tcG9uZW50czogYEdyb2sKIDxodHRwOi8vZ3Jvay56b3BlLm9yZy8+YF8uCiAKLVpvcGUgaXMgYWxzbyB0aGUgaW5mcmFzdHJ1Y3R1cmUgdXNlZCBieSB0aGUgYFBsb25lIDxodHRwOi8vcGxvbmUub3JnLz5gXyBjb250ZW50Citab3BlIGlzIGFsc28gdGhlIGluZnJhc3RydWN0dXJlIHVzZWQgYnkgdGhlIGBQbG9uZSA8aHR0cHM6Ly9wbG9uZS5vcmcvPmBfIGNvbnRlbnQKIG1hbmFnZW1lbnQgc3lzdGVtLCBvbmUgb2YgdGhlIG1vc3QgcG93ZXJmdWwgYW5kIHBvcHVsYXIgY29udGVudCBtYW5hZ2VtZW50CiBzeXN0ZW1zIGF2YWlsYWJsZS4KIApAQCAtNzMyLDkgKzcyNSw3IEBACiAuLiBzZWVhbHNvOjoKIAogICAgVGhlIFB5dGhvbiB3aWtpIGNvbnRhaW5zIGFuIGV4dGVuc2l2ZSBsaXN0IG9mIGB3ZWIgZnJhbWV3b3JrcwotICAgPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9XZWJGcmFtZXdvcmtzPmBfLgorICAgPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vV2ViRnJhbWV3b3Jrcz5gXy4KIAogICAgTW9zdCBmcmFtZXdvcmtzIGFsc28gaGF2ZSB0aGVpciBvd24gbWFpbGluZyBsaXN0cyBhbmQgSVJDIGNoYW5uZWxzLCBsb29rIG91dAotICAgZm9yIHRoZXNlIG9uIHRoZSBwcm9qZWN0cycgd2ViIHNpdGVzLiAgVGhlcmUgaXMgYWxzbyBhIGdlbmVyYWwgIlB5dGhvbiBpbiB0aGUKLSAgIFdlYiIgSVJDIGNoYW5uZWwgb24gZnJlZW5vZGUgY2FsbGVkIGAjcHl0aG9uLndlYgotICAgPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9Qb3VuZFB5dGhvbldlYj5gXy4KKyAgIGZvciB0aGVzZSBvbiB0aGUgcHJvamVjdHMnIHdlYiBzaXRlcy4KZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLW5ldy1hcGkucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEyNTVhNgotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5CkBAIC0wLDAgKzEsNTYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbjMKKworaW1wb3J0IHNtdHBsaWIKKworZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBFbWFpbE1lc3NhZ2UKK2Zyb20gZW1haWwuaGVhZGVycmVnaXN0cnkgaW1wb3J0IEFkZHJlc3MKK2Zyb20gZW1haWwudXRpbHMgaW1wb3J0IG1ha2VfbXNnaWQKKworIyBDcmVhdGUgdGhlIGJhc2UgdGV4dCBtZXNzYWdlLgorbXNnID0gRW1haWxNZXNzYWdlKCkKK21zZ1snU3ViamVjdCddID0gIkF5b25zIGFzcGVyZ2VzIHBvdXIgbGUgZMOpamV1bmVyIgorbXNnWydGcm9tJ10gPSBBZGRyZXNzKCJQZXDDqSBMZSBQZXciLCAicGVwZUBleGFtcGxlLmNvbSIpCittc2dbJ1RvJ10gPSAoQWRkcmVzcygiUGVuZWxvcGUgUHVzc3ljYXQiLCAicGVuZWxvcGVAZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgICBBZGRyZXNzKCJGYWJyZXR0ZSBQdXNzeWNhdCIsICJmYWJyZXR0ZUBleGFtcGxlLmNvbSIpKQorbXNnLnNldF9jb250ZW50KCIiIlwKK1NhbHV0IQorCitDZWxhIHJlc3NlbWJsZSDDoCB1biBleGNlbGxlbnQgcmVjaXBpZVsxXSBkw6lqZXVuZXIuCisKK1sxXSBodHRwOi8vd3d3Lnl1bW1seS5jb20vcmVjaXBlL1JvYXN0ZWQtQXNwYXJhZ3VzLUVwaWN1cmlvdXMtMjAzNzE4CisKKy0tUGVww6kKKyIiIikKKworIyBBZGQgdGhlIGh0bWwgdmVyc2lvbi4gIFRoaXMgY29udmVydHMgdGhlIG1lc3NhZ2UgaW50byBhIG11bHRpcGFydC9hbHRlcm5hdGl2ZQorIyBjb250YWluZXIsIHdpdGggdGhlIG9yaWdpbmFsIHRleHQgbWVzc2FnZSBhcyB0aGUgZmlyc3QgcGFydCBhbmQgdGhlIG5ldyBodG1sCisjIG1lc3NhZ2UgYXMgdGhlIHNlY29uZCBwYXJ0LgorYXNwYXJhZ3VzX2NpZCA9IG1ha2VfbXNnaWQoKQorbXNnLmFkZF9hbHRlcm5hdGl2ZSgiIiJcCis8aHRtbD4KKyAgPGhlYWQ+PC9oZWFkPgorICA8Ym9keT4KKyAgICA8cD5TYWx1dCE8XHA+CisgICAgPHA+Q2VsYSByZXNzZW1ibGUgw6AgdW4gZXhjZWxsZW50CisgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly93d3cueXVtbWx5LmNvbS9yZWNpcGUvUm9hc3RlZC1Bc3BhcmFndXMtRXBpY3VyaW91cy0yMDM3MTg+CisgICAgICAgICAgICByZWNpcGllCisgICAgICAgIDwvYT4gZMOpamV1bmVyLgorICAgIDwvcD4KKyAgICA8aW1nIHNyYz0iY2lkOnthc3BhcmFndXNfY2lkfSIgXD4KKyAgPC9ib2R5PgorPC9odG1sPgorIiIiLmZvcm1hdChhc3BhcmFndXNfY2lkPWFzcGFyYWd1c19jaWRbMTotMV0pLCBzdWJ0eXBlPSdodG1sJykKKyMgbm90ZSB0aGF0IHdlIG5lZWRlZCB0byBwZWVsIHRoZSA8PiBvZmYgdGhlIG1zZ2lkIGZvciB1c2UgaW4gdGhlIGh0bWwuCisKKyMgTm93IGFkZCB0aGUgcmVsYXRlZCBpbWFnZSB0byB0aGUgaHRtbCBwYXJ0Lgord2l0aCBvcGVuKCJyb2FzdGVkLWFzcGFyYWd1cy5qcGciLCAncmInKSBhcyBpbWc6CisgICAgbXNnLmdldF9wYXlsb2FkKClbMV0uYWRkX3JlbGF0ZWQoaW1nLnJlYWQoKSwgJ2ltYWdlJywgJ2pwZWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZD1hc3BhcmFndXNfY2lkKQorCisjIE1ha2UgYSBsb2NhbCBjb3B5IG9mIHdoYXQgd2UgYXJlIGdvaW5nIHRvIHNlbmQuCit3aXRoIG9wZW4oJ291dGdvaW5nLm1zZycsICd3YicpIGFzIGY6CisgICAgZi53cml0ZShieXRlcyhtc2cpKQorCisjIFNlbmQgdGhlIG1lc3NhZ2UgdmlhIGxvY2FsIFNNVFAgc2VydmVyLgord2l0aCBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpIGFzIHM6CisgICAgcy5zZW5kX21lc3NhZ2UobXNnKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLnB5IGIvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggMzNjNDMwYS4uODUwNzBmMwotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtYWx0ZXJuYXRpdmUucHkKKysrIGIvRG9jL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLnB5CkBAIC0xNywxNCArMTcsMTQgQEAKIG1zZ1snVG8nXSA9IHlvdQogCiAjIENyZWF0ZSB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZSAoYSBwbGFpbi10ZXh0IGFuZCBhbiBIVE1MIHZlcnNpb24pLgotdGV4dCA9ICJIaSFcbkhvdyBhcmUgeW91P1xuSGVyZSBpcyB0aGUgbGluayB5b3Ugd2FudGVkOlxuaHR0cDovL3d3dy5weXRob24ub3JnIgordGV4dCA9ICJIaSFcbkhvdyBhcmUgeW91P1xuSGVyZSBpcyB0aGUgbGluayB5b3Ugd2FudGVkOlxuaHR0cHM6Ly93d3cucHl0aG9uLm9yZyIKIGh0bWwgPSAiIiJcCiA8aHRtbD4KICAgPGhlYWQ+PC9oZWFkPgogICA8Ym9keT4KICAgICA8cD5IaSE8YnI+CiAgICAgICAgSG93IGFyZSB5b3U/PGJyPgotICAgICAgIEhlcmUgaXMgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZyI+bGluazwvYT4geW91IHdhbnRlZC4KKyAgICAgICBIZXJlIGlzIHRoZSA8YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnIj5saW5rPC9hPiB5b3Ugd2FudGVkLgogICAgIDwvcD4KICAgPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1kaXIucHkKaW5kZXggY2M1NTI5ZS4uM2M3Yzc3MCAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL2VtYWlsLWRpci5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtZGlyLnB5CkBAIC04LDcgKzgsNyBAQAogIyBGb3IgZ3Vlc3NpbmcgTUlNRSB0eXBlIGJhc2VkIG9uIGZpbGUgbmFtZSBleHRlbnNpb24KIGltcG9ydCBtaW1ldHlwZXMKIAotZnJvbSBvcHRwYXJzZSBpbXBvcnQgT3B0aW9uUGFyc2VyCitmcm9tIGFyZ3BhcnNlIGltcG9ydCBBcmd1bWVudFBhcnNlcgogCiBmcm9tIGVtYWlsIGltcG9ydCBlbmNvZGVycwogZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBNZXNzYWdlCkBAIC0yMiw0NCArMjIsMzYgQEAKIAogCiBkZWYgbWFpbigpOgotICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT0iIiJcCisgICAgcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IiIiXAogU2VuZCB0aGUgY29udGVudHMgb2YgYSBkaXJlY3RvcnkgYXMgYSBNSU1FIG1lc3NhZ2UuCi0KLVVzYWdlOiAlcHJvZyBbb3B0aW9uc10KLQogVW5sZXNzIHRoZSAtbyBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBlbWFpbCBpcyBzZW50IGJ5IGZvcndhcmRpbmcgdG8geW91ciBsb2NhbAogU01UUCBzZXJ2ZXIsIHdoaWNoIHRoZW4gZG9lcyB0aGUgbm9ybWFsIGRlbGl2ZXJ5IHByb2Nlc3MuICBZb3VyIGxvY2FsIG1hY2hpbmUKIG11c3QgYmUgcnVubmluZyBhbiBTTVRQIHNlcnZlci4KICIiIikKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLWQnLCAnLS1kaXJlY3RvcnknLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nc3RvcmUnLAotICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiTWFpbCB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksCi0gICAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIHVzZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuICBPbmx5IHRoZSByZWd1bGFyCi0gICAgICAgICAgICAgICAgICAgICAgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSBhcmUgc2VudCwgYW5kIHdlIGRvbid0IHJlY3Vyc2UgdG8KLSAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcmllcy4iIiIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1vJywgJy0tb3V0cHV0JywKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J3N0b3JlJywgbWV0YXZhcj0nRklMRScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJQcmludCB0aGUgY29tcG9zZWQgbWVzc2FnZSB0byBGSUxFIGluc3RlYWQgb2YKLSAgICAgICAgICAgICAgICAgICAgICBzZW5kaW5nIHRoZSBtZXNzYWdlIHRvIHRoZSBTTVRQIHNlcnZlci4iIiIpCi0gICAgcGFyc2VyLmFkZF9vcHRpb24oJy1zJywgJy0tc2VuZGVyJywKLSAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdzdHJpbmcnLCBhY3Rpb249J3N0b3JlJywgbWV0YXZhcj0nU0VOREVSJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUaGUgdmFsdWUgb2YgdGhlIEZyb206IGhlYWRlciAocmVxdWlyZWQpJykKLSAgICBwYXJzZXIuYWRkX29wdGlvbignLXInLCAnLS1yZWNpcGllbnQnLAotICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J3N0cmluZycsIGFjdGlvbj0nYXBwZW5kJywgbWV0YXZhcj0nUkVDSVBJRU5UJywKLSAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PVtdLCBkZXN0PSdyZWNpcGllbnRzJywKLSAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdBIFRvOiBoZWFkZXIgdmFsdWUgKGF0IGxlYXN0IG9uZSByZXF1aXJlZCknKQotICAgIG9wdHMsIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0gICAgaWYgbm90IG9wdHMuc2VuZGVyIG9yIG5vdCBvcHRzLnJlY2lwaWVudHM6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBkaXJlY3RvcnkgPSBvcHRzLmRpcmVjdG9yeQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGlyZWN0b3J5JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiTWFpbCB0aGUgY29udGVudHMgb2YgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICBvdGhlcndpc2UgdXNlIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIE9ubHkgdGhlIHJlZ3VsYXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzIGluIHRoZSBkaXJlY3RvcnkgYXJlIHNlbnQsIGFuZCB3ZSBkb24ndCByZWN1cnNlIHRvCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJkaXJlY3Rvcmllcy4iIiIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1vdXRwdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YXZhcj0nRklMRScsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSIiIlByaW50IHRoZSBjb21wb3NlZCBtZXNzYWdlIHRvIEZJTEUgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGluZyB0aGUgbWVzc2FnZSB0byB0aGUgU01UUCBzZXJ2ZXIuIiIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1zJywgJy0tc2VuZGVyJywgcmVxdWlyZWQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1RoZSB2YWx1ZSBvZiB0aGUgRnJvbTogaGVhZGVyIChyZXF1aXJlZCknKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1yJywgJy0tcmVjaXBpZW50JywgcmVxdWlyZWQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nYXBwZW5kJywgbWV0YXZhcj0nUkVDSVBJRU5UJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9W10sIGRlc3Q9J3JlY2lwaWVudHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nQSBUbzogaGVhZGVyIHZhbHVlIChhdCBsZWFzdCBvbmUgcmVxdWlyZWQpJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIGRpcmVjdG9yeSA9IGFyZ3MuZGlyZWN0b3J5CiAgICAgaWYgbm90IGRpcmVjdG9yeToKICAgICAgICAgZGlyZWN0b3J5ID0gJy4nCiAgICAgIyBDcmVhdGUgdGhlIGVuY2xvc2luZyAob3V0ZXIpIG1lc3NhZ2UKICAgICBvdXRlciA9IE1JTUVNdWx0aXBhcnQoKQogICAgIG91dGVyWydTdWJqZWN0J10gPSAnQ29udGVudHMgb2YgZGlyZWN0b3J5ICVzJyAlIG9zLnBhdGguYWJzcGF0aChkaXJlY3RvcnkpCi0gICAgb3V0ZXJbJ1RvJ10gPSBDT01NQVNQQUNFLmpvaW4ob3B0cy5yZWNpcGllbnRzKQotICAgIG91dGVyWydGcm9tJ10gPSBvcHRzLnNlbmRlcgorICAgIG91dGVyWydUbyddID0gQ09NTUFTUEFDRS5qb2luKGFyZ3MucmVjaXBpZW50cykKKyAgICBvdXRlclsnRnJvbSddID0gYXJncy5zZW5kZXIKICAgICBvdXRlci5wcmVhbWJsZSA9ICdZb3Ugd2lsbCBub3Qgc2VlIHRoaXMgaW4gYSBNSU1FLWF3YXJlIG1haWwgcmVhZGVyLlxuJwogCiAgICAgZm9yIGZpbGVuYW1lIGluIG9zLmxpc3RkaXIoZGlyZWN0b3J5KToKQEAgLTc2LDIzICs2OCwxOSBAQAogICAgICAgICAgICAgY3R5cGUgPSAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJwogICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IGN0eXBlLnNwbGl0KCcvJywgMSkKICAgICAgICAgaWYgbWFpbnR5cGUgPT0gJ3RleHQnOgotICAgICAgICAgICAgZnAgPSBvcGVuKHBhdGgpCi0gICAgICAgICAgICAjIE5vdGU6IHdlIHNob3VsZCBoYW5kbGUgY2FsY3VsYXRpbmcgdGhlIGNoYXJzZXQKLSAgICAgICAgICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoKSBhcyBmcDoKKyAgICAgICAgICAgICAgICAjIE5vdGU6IHdlIHNob3VsZCBoYW5kbGUgY2FsY3VsYXRpbmcgdGhlIGNoYXJzZXQKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FVGV4dChmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCiAgICAgICAgIGVsaWYgbWFpbnR5cGUgPT0gJ2ltYWdlJzoKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUltYWdlKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBtc2cgPSBNSU1FSW1hZ2UoZnAucmVhZCgpLCBfc3VidHlwZT1zdWJ0eXBlKQogICAgICAgICBlbGlmIG1haW50eXBlID09ICdhdWRpbyc6Ci0gICAgICAgICAgICBmcCA9IG9wZW4ocGF0aCwgJ3JiJykKLSAgICAgICAgICAgIG1zZyA9IE1JTUVBdWRpbyhmcC5yZWFkKCksIF9zdWJ0eXBlPXN1YnR5cGUpCi0gICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4ocGF0aCwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICAgICAgbXNnID0gTUlNRUF1ZGlvKGZwLnJlYWQoKSwgX3N1YnR5cGU9c3VidHlwZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZwID0gb3BlbihwYXRoLCAncmInKQotICAgICAgICAgICAgbXNnID0gTUlNRUJhc2UobWFpbnR5cGUsIHN1YnR5cGUpCi0gICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQoZnAucmVhZCgpKQotICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG1zZyA9IE1JTUVCYXNlKG1haW50eXBlLCBzdWJ0eXBlKQorICAgICAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChmcC5yZWFkKCkpCiAgICAgICAgICAgICAjIEVuY29kZSB0aGUgcGF5bG9hZCB1c2luZyBCYXNlNjQKICAgICAgICAgICAgIGVuY29kZXJzLmVuY29kZV9iYXNlNjQobXNnKQogICAgICAgICAjIFNldCB0aGUgZmlsZW5hbWUgcGFyYW1ldGVyCkBAIC0xMDAsMTQgKzg4LDEyIEBACiAgICAgICAgIG91dGVyLmF0dGFjaChtc2cpCiAgICAgIyBOb3cgc2VuZCBvciBzdG9yZSB0aGUgbWVzc2FnZQogICAgIGNvbXBvc2VkID0gb3V0ZXIuYXNfc3RyaW5nKCkKLSAgICBpZiBvcHRzLm91dHB1dDoKLSAgICAgICAgZnAgPSBvcGVuKG9wdHMub3V0cHV0LCAndycpCi0gICAgICAgIGZwLndyaXRlKGNvbXBvc2VkKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgaWYgYXJncy5vdXRwdXQ6CisgICAgICAgIHdpdGggb3BlbihhcmdzLm91dHB1dCwgJ3cnKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGNvbXBvc2VkKQogICAgIGVsc2U6Ci0gICAgICAgIHMgPSBzbXRwbGliLlNNVFAoJ2xvY2FsaG9zdCcpCi0gICAgICAgIHMuc2VuZG1haWwob3B0cy5zZW5kZXIsIG9wdHMucmVjaXBpZW50cywgY29tcG9zZWQpCi0gICAgICAgIHMucXVpdCgpCisgICAgICAgIHdpdGggc210cGxpYi5TTVRQKCdsb2NhbGhvc3QnKSBhcyBzOgorICAgICAgICAgICAgcy5zZW5kbWFpbChhcmdzLnNlbmRlciwgYXJncy5yZWNpcGllbnRzLCBjb21wb3NlZCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLWhlYWRlcnMucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtaGVhZGVycy5weQppbmRleCBhNTMzMTdkLi44OWM4ZjNhIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtaGVhZGVycy5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtaGVhZGVycy5weQpAQCAtMSw4ICsxLDkgQEAKICMgSW1wb3J0IHRoZSBlbWFpbCBtb2R1bGVzIHdlJ2xsIG5lZWQKIGZyb20gZW1haWwucGFyc2VyIGltcG9ydCBQYXJzZXIKIAotIyAgSWYgdGhlIGUtbWFpbCBoZWFkZXJzIGFyZSBpbiBhIGZpbGUsIHVuY29tbWVudCB0aGlzIGxpbmU6Ci0jaGVhZGVycyA9IFBhcnNlcigpLnBhcnNlKG9wZW4obWVzc2FnZWZpbGUsICdyJykpCisjIElmIHRoZSBlLW1haWwgaGVhZGVycyBhcmUgaW4gYSBmaWxlLCB1bmNvbW1lbnQgdGhlc2UgdHdvIGxpbmVzOgorIyB3aXRoIG9wZW4obWVzc2FnZWZpbGUpIGFzIGZwOgorIyAgICAgaGVhZGVycyA9IFBhcnNlcigpLnBhcnNlKGZwKQogCiAjICBPciBmb3IgcGFyc2luZyBoZWFkZXJzIGluIGEgc3RyaW5nLCB1c2U6CiBoZWFkZXJzID0gUGFyc2VyKCkucGFyc2VzdHIoJ0Zyb206IDx1c2VyQGV4YW1wbGUuY29tPlxuJwpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLW1pbWUucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtbWltZS5weQppbmRleCBhOTBlZGMxLi42MWQwODMwIDEwMDY0NAotLS0gYS9Eb2MvaW5jbHVkZXMvZW1haWwtbWltZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtbWltZS5weQpAQCAtMjAsOSArMjAsOCBAQAogZm9yIGZpbGUgaW4gcG5nZmlsZXM6CiAgICAgIyBPcGVuIHRoZSBmaWxlcyBpbiBiaW5hcnkgbW9kZS4gIExldCB0aGUgTUlNRUltYWdlIGNsYXNzIGF1dG9tYXRpY2FsbHkKICAgICAjIGd1ZXNzIHRoZSBzcGVjaWZpYyBpbWFnZSB0eXBlLgotICAgIGZwID0gb3BlbihmaWxlLCAncmInKQotICAgIGltZyA9IE1JTUVJbWFnZShmcC5yZWFkKCkpCi0gICAgZnAuY2xvc2UoKQorICAgIHdpdGggb3BlbihmaWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgaW1nID0gTUlNRUltYWdlKGZwLnJlYWQoKSkKICAgICBtc2cuYXR0YWNoKGltZykKIAogIyBTZW5kIHRoZSBlbWFpbCB2aWEgb3VyIG93biBTTVRQIHNlcnZlci4KZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9lbWFpbC1yZWFkLWFsdGVybmF0aXZlLW5ldy1hcGkucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtcmVhZC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNWFiMjQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtcmVhZC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5CkBAIC0wLDAgKzEsNzUgQEAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgbWltZXR5cGVzCitpbXBvcnQgd2ViYnJvd3NlcgorCisjIEltcG9ydCB0aGUgZW1haWwgbW9kdWxlcyB3ZSdsbCBuZWVkCitmcm9tIGVtYWlsIGltcG9ydCBwb2xpY3kKK2Zyb20gZW1haWwucGFyc2VyIGltcG9ydCBCeXRlc1BhcnNlcgorCisjIEFuIGltYWdpbmFyeSBtb2R1bGUgdGhhdCB3b3VsZCBtYWtlIHRoaXMgd29yayBhbmQgYmUgc2FmZS4KK2Zyb20gaW1hZ2luYXJ5IGltcG9ydCBtYWdpY19odG1sX3BhcnNlcgorCisjIEluIGEgcmVhbCBwcm9ncmFtIHlvdSdkIGdldCB0aGUgZmlsZW5hbWUgZnJvbSB0aGUgYXJndW1lbnRzLgord2l0aCBvcGVuKCdvdXRnb2luZy5tc2cnLCAncmInKSBhcyBmcDoKKyAgICBtc2cgPSBCeXRlc1BhcnNlcihwb2xpY3k9cG9saWN5LmRlZmF1bHQpLnBhcnNlKGZwKQorCisjIE5vdyB0aGUgaGVhZGVyIGl0ZW1zIGNhbiBiZSBhY2Nlc3NlZCBhcyBhIGRpY3Rpb25hcnksIGFuZCBhbnkgbm9uLUFTQ0lJIHdpbGwKKyMgYmUgY29udmVydGVkIHRvIHVuaWNvZGU6CitwcmludCgnVG86JywgbXNnWyd0byddKQorcHJpbnQoJ0Zyb206JywgbXNnWydmcm9tJ10pCitwcmludCgnU3ViamVjdDonLCBtc2dbJ3N1YmplY3QnXSkKKworIyBJZiB3ZSB3YW50IHRvIHByaW50IGEgcHJpdmlldyBvZiB0aGUgbWVzc2FnZSBjb250ZW50LCB3ZSBjYW4gZXh0cmFjdCB3aGF0ZXZlcgorIyB0aGUgbGVhc3QgZm9ybWF0dGVkIHBheWxvYWQgaXMgYW5kIHByaW50IHRoZSBmaXJzdCB0aHJlZSBsaW5lcy4gIE9mIGNvdXJzZSwKKyMgaWYgdGhlIG1lc3NhZ2UgaGFzIG5vIHBsYWluIHRleHQgcGFydCBwcmludGluZyB0aGUgZmlyc3QgdGhyZWUgbGluZXMgb2YgaHRtbAorIyBpcyBwcm9iYWJseSB1c2VsZXNzLCBidXQgdGhpcyBpcyBqdXN0IGEgY29uY2VwdHVhbCBleGFtcGxlLgorc2ltcGxlc3QgPSBtc2cuZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdwbGFpbicsICdodG1sJykpCitwcmludCgpCitwcmludCgnJy5qb2luKHNpbXBsZXN0LmdldF9jb250ZW50KCkuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKVs6M10pKQorCithbnMgPSBpbnB1dCgiVmlldyBmdWxsIG1lc3NhZ2U/IikKK2lmIGFucy5sb3dlcigpWzBdID09ICduJzoKKyAgICBzeXMuZXhpdCgpCisKKyMgV2UgY2FuIGV4dHJhY3QgdGhlIHJpY2hlc3QgYWx0ZXJuYXRpdmUgaW4gb3JkZXIgdG8gZGlzcGxheSBpdDoKK3JpY2hlc3QgPSBtc2cuZ2V0X2JvZHkoKQorcGFydGZpbGVzID0ge30KK2lmIHJpY2hlc3RbJ2NvbnRlbnQtdHlwZSddLm1haW50eXBlID09ICd0ZXh0JzoKKyAgICBpZiByaWNoZXN0Wydjb250ZW50LXR5cGUnXS5zdWJ0eXBlID09ICdwbGFpbic6CisgICAgICAgIGZvciBsaW5lIGluIHJpY2hlc3QuZ2V0X2NvbnRlbnQoKS5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBwcmludChsaW5lKQorICAgICAgICBzeXMuZXhpdCgpCisgICAgZWxpZiByaWNoZXN0Wydjb250ZW50LXR5cGUnXS5zdWJ0eXBlID09ICdodG1sJzoKKyAgICAgICAgYm9keSA9IHJpY2hlc3QKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiRG9uJ3Qga25vdyBob3cgdG8gZGlzcGxheSB7fSIuZm9ybWF0KHJpY2hlc3QuZ2V0X2NvbnRlbnRfdHlwZSgpKSkKKyAgICAgICAgc3lzLmV4aXQoKQorZWxpZiByaWNoZXN0Wydjb250ZW50LXR5cGUnXS5jb250ZW50X3R5cGUgPT0gJ211bHRpcGFydC9yZWxhdGVkJzoKKyAgICBib2R5ID0gcmljaGVzdC5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ2h0bWwnKSkKKyAgICBmb3IgcGFydCBpbiByaWNoZXN0Lml0ZXJfYXR0YWNobWVudHMoKToKKyAgICAgICAgZm4gPSBwYXJ0LmdldF9maWxlbmFtZSgpCisgICAgICAgIGlmIGZuOgorICAgICAgICAgICAgZXh0ZW5zaW9uID0gb3MucGF0aC5zcGxpdGV4dChwYXJ0LmdldF9maWxlbmFtZSgpKVsxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXh0ZW5zaW9uID0gbWltZXR5cGVzLmd1ZXNzX2V4dGVuc2lvbihwYXJ0LmdldF9jb250ZW50X3R5cGUoKSkKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoc3VmZml4PWV4dGVuc2lvbiwgZGVsZXRlPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShwYXJ0LmdldF9jb250ZW50KCkpCisgICAgICAgICAgICAjIGFnYWluIHN0cmlwIHRoZSA8PiB0byBnbyBmcm9tIGVtYWlsIGZvcm0gb2YgY2lkIHRvIGh0bWwgZm9ybS4KKyAgICAgICAgICAgIHBhcnRmaWxlc1twYXJ0Wydjb250ZW50LWlkJ11bMTotMV1dID0gZi5uYW1lCitlbHNlOgorICAgIHByaW50KCJEb24ndCBrbm93IGhvdyB0byBkaXNwbGF5IHt9Ii5mb3JtYXQocmljaGVzdC5nZXRfY29udGVudF90eXBlKCkpKQorICAgIHN5cy5leGl0KCkKK3dpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3cnLCBkZWxldGU9RmFsc2UpIGFzIGY6CisgICAgIyBUaGUgbWFnaWNfaHRtbF9wYXJzZXIgaGFzIHRvIHJld3JpdGUgdGhlIGhyZWY9ImNpZDouLi4uIiBhdHRyaWJ1dGVzIHRvCisgICAgIyBwb2ludCB0byB0aGUgZmlsZW5hbWVzIGluIHBhcnRmaWxlcy4gIEl0IGFsc28gaGFzIHRvIGRvIGEgc2FmZXR5LXNhbml0aXplCisgICAgIyBvZiB0aGUgaHRtbC4gIEl0IGNvdWxkIGJlIHdyaXR0ZW4gdXNpbmcgaHRtbC5wYXJzZXIuCisgICAgZi53cml0ZShtYWdpY19odG1sX3BhcnNlcihib2R5LmdldF9jb250ZW50KCksIHBhcnRmaWxlcykpCit3ZWJicm93c2VyLm9wZW4oZi5uYW1lKQorb3MucmVtb3ZlKGYubmFtZSkKK2ZvciBmbiBpbiBwYXJ0ZmlsZXMudmFsdWVzKCk6CisgICAgb3MucmVtb3ZlKGZuKQorCisjIE9mIGNvdXJzZSwgdGhlcmUgYXJlIGxvdHMgb2YgZW1haWwgbWVzc2FnZXMgdGhhdCBjb3VsZCBicmVhayB0aGlzIHNpbXBsZQorIyBtaW5kZWQgcHJvZ3JhbSwgYnV0IGl0IHdpbGwgaGFuZGxlIHRoZSBtb3N0IGNvbW1vbiBvbmVzLgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL2VtYWlsLXNpbXBsZS5weSBiL0RvYy9pbmNsdWRlcy9lbWFpbC1zaW1wbGUucHkKaW5kZXggMDc3NTY4ZC4uYjliOGI0MSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL2VtYWlsLXNpbXBsZS5weQorKysgYi9Eb2MvaW5jbHVkZXMvZW1haWwtc2ltcGxlLnB5CkBAIC02LDEwICs2LDkgQEAKIAogIyBPcGVuIGEgcGxhaW4gdGV4dCBmaWxlIGZvciByZWFkaW5nLiAgRm9yIHRoaXMgZXhhbXBsZSwgYXNzdW1lIHRoYXQKICMgdGhlIHRleHQgZmlsZSBjb250YWlucyBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMuCi1mcCA9IG9wZW4odGV4dGZpbGUsICdyYicpCi0jIENyZWF0ZSBhIHRleHQvcGxhaW4gbWVzc2FnZQotbXNnID0gTUlNRVRleHQoZnAucmVhZCgpKQotZnAuY2xvc2UoKQord2l0aCBvcGVuKHRleHRmaWxlKSBhcyBmcDoKKyAgICAjIENyZWF0ZSBhIHRleHQvcGxhaW4gbWVzc2FnZQorICAgIG1zZyA9IE1JTUVUZXh0KGZwLnJlYWQoKSkKIAogIyBtZSA9PSB0aGUgc2VuZGVyJ3MgZW1haWwgYWRkcmVzcwogIyB5b3UgPT0gdGhlIHJlY2lwaWVudCdzIGVtYWlsIGFkZHJlc3MKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkgYi9Eb2MvaW5jbHVkZXMvZW1haWwtdW5wYWNrLnB5CmluZGV4IDM2NTM1NDMuLjU3NGEwYjYgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9lbWFpbC11bnBhY2sucHkKKysrIGIvRG9jL2luY2x1ZGVzL2VtYWlsLXVucGFjay5weQpAQCAtOCw0MSArOCwyNyBAQAogaW1wb3J0IGVycm5vCiBpbXBvcnQgbWltZXR5cGVzCiAKLWZyb20gb3B0cGFyc2UgaW1wb3J0IE9wdGlvblBhcnNlcgorZnJvbSBhcmdwYXJzZSBpbXBvcnQgQXJndW1lbnRQYXJzZXIKIAogCiBkZWYgbWFpbigpOgotICAgIHBhcnNlciA9IE9wdGlvblBhcnNlcih1c2FnZT0iIiJcCisgICAgcGFyc2VyID0gQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249IiIiXAogVW5wYWNrIGEgTUlNRSBtZXNzYWdlIGludG8gYSBkaXJlY3Rvcnkgb2YgZmlsZXMuCi0KLVVzYWdlOiAlcHJvZyBbb3B0aW9uc10gbXNnZmlsZQogIiIiKQotICAgIHBhcnNlci5hZGRfb3B0aW9uKCctZCcsICctLWRpcmVjdG9yeScsCi0gICAgICAgICAgICAgICAgICAgICAgdHlwZT0nc3RyaW5nJywgYWN0aW9uPSdzdG9yZScsCi0gICAgICAgICAgICAgICAgICAgICAgaGVscD0iIiJVbnBhY2sgdGhlIE1JTUUgbWVzc2FnZSBpbnRvIHRoZSBuYW1lZAotICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeQotICAgICAgICAgICAgICAgICAgICAgIGV4aXN0LiIiIikKLSAgICBvcHRzLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQotICAgIGlmIG5vdCBvcHRzLmRpcmVjdG9yeToKLSAgICAgICAgcGFyc2VyLnByaW50X2hlbHAoKQotICAgICAgICBzeXMuZXhpdCgxKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1kJywgJy0tZGlyZWN0b3J5JywgcmVxdWlyZWQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IiIiVW5wYWNrIHRoZSBNSU1FIG1lc3NhZ2UgaW50byB0aGUgbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeSwgd2hpY2ggd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3QuIiIiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ21zZ2ZpbGUnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICB3aXRoIG9wZW4oYXJncy5tc2dmaWxlKSBhcyBmcDoKKyAgICAgICAgbXNnID0gZW1haWwubWVzc2FnZV9mcm9tX2ZpbGUoZnApCiAKICAgICB0cnk6Ci0gICAgICAgIG1zZ2ZpbGUgPSBhcmdzWzBdCi0gICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgIHBhcnNlci5wcmludF9oZWxwKCkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIHRyeToKLSAgICAgICAgb3MubWtkaXIob3B0cy5kaXJlY3RvcnkpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgIyBJZ25vcmUgZGlyZWN0b3J5IGV4aXN0cyBlcnJvcgotICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0KLSAgICBmcCA9IG9wZW4obXNnZmlsZSkKLSAgICBtc2cgPSBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCkKLSAgICBmcC5jbG9zZSgpCisgICAgICAgIG9zLm1rZGlyKGFyZ3MuZGlyZWN0b3J5KQorICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgIHBhc3MKIAogICAgIGNvdW50ZXIgPSAxCiAgICAgZm9yIHBhcnQgaW4gbXNnLndhbGsoKToKQEAgLTU5LDkgKzQ1LDggQEAKICAgICAgICAgICAgICAgICBleHQgPSAnLmJpbicKICAgICAgICAgICAgIGZpbGVuYW1lID0gJ3BhcnQtJTAzZCVzJyAlIChjb3VudGVyLCBleHQpCiAgICAgICAgIGNvdW50ZXIgKz0gMQotICAgICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKG9wdHMuZGlyZWN0b3J5LCBmaWxlbmFtZSksICd3YicpCi0gICAgICAgIGZwLndyaXRlKHBhcnQuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpKQotICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oYXJncy5kaXJlY3RvcnksIGZpbGVuYW1lKSwgJ3diJykgYXMgZnA6CisgICAgICAgICAgICBmcC53cml0ZShwYXJ0LmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX2JlbmNobWFya3MucHkgYi9Eb2MvaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzc2M2VhOS4uMDAwMDAwMAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDIzOSArMCwwIEBACi0jCi0jIFNpbXBsZSBiZW5jaG1hcmtzIGZvciB0aGUgbXVsdGlwcm9jZXNzaW5nIHBhY2thZ2UKLSMKLSMgQ29weXJpZ2h0IChjKSAyMDA2LTIwMDgsIFIgT3Vka2VyawotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotCi1pbXBvcnQgdGltZQotaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IHF1ZXVlCi1pbXBvcnQgZ2MKLQotX3RpbWVyID0gdGltZS5wZXJmX2NvdW50ZXIKLQotZGVsdGEgPSAxCi0KLQotIyMjIyBURVNUX1FVRVVFU1BFRUQKLQotZGVmIHF1ZXVlc3BlZWRfZnVuYyhxLCBjLCBpdGVyYXRpb25zKToKLSAgICBhID0gJzAnICogMjU2Ci0gICAgYy5hY3F1aXJlKCkKLSAgICBjLm5vdGlmeSgpCi0gICAgYy5yZWxlYXNlKCkKLQotICAgIGZvciBpIGluIHJhbmdlKGl0ZXJhdGlvbnMpOgotICAgICAgICBxLnB1dChhKQotCi0gICAgcS5wdXQoJ1NUT1AnKQotCi1kZWYgdGVzdF9xdWV1ZXNwZWVkKFByb2Nlc3MsIHEsIGMpOgotICAgIGVsYXBzZWQgPSAwCi0gICAgaXRlcmF0aW9ucyA9IDEKLQotICAgIHdoaWxlIGVsYXBzZWQgPCBkZWx0YToKLSAgICAgICAgaXRlcmF0aW9ucyAqPSAyCi0KLSAgICAgICAgcCA9IFByb2Nlc3ModGFyZ2V0PXF1ZXVlc3BlZWRfZnVuYywgYXJncz0ocSwgYywgaXRlcmF0aW9ucykpCi0gICAgICAgIGMuYWNxdWlyZSgpCi0gICAgICAgIHAuc3RhcnQoKQotICAgICAgICBjLndhaXQoKQotICAgICAgICBjLnJlbGVhc2UoKQotCi0gICAgICAgIHJlc3VsdCA9IE5vbmUKLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgd2hpbGUgcmVzdWx0ICE9ICdTVE9QJzoKLSAgICAgICAgICAgIHJlc3VsdCA9IHEuZ2V0KCkKLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICAgICAgcC5qb2luKCkKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdvYmplY3RzIHBhc3NlZCB0aHJvdWdoIHRoZSBxdWV1ZSBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfUElQRVNQRUVECi0KLWRlZiBwaXBlX2Z1bmMoYywgY29uZCwgaXRlcmF0aW9ucyk6Ci0gICAgYSA9ICcwJyAqIDI1NgotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgY29uZC5ub3RpZnkoKQotICAgIGNvbmQucmVsZWFzZSgpCi0KLSAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgYy5zZW5kKGEpCi0KLSAgICBjLnNlbmQoJ1NUT1AnKQotCi1kZWYgdGVzdF9waXBlc3BlZWQoKToKLSAgICBjLCBkID0gbXVsdGlwcm9jZXNzaW5nLlBpcGUoKQotICAgIGNvbmQgPSBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKCkKLSAgICBlbGFwc2VkID0gMAotICAgIGl0ZXJhdGlvbnMgPSAxCi0KLSAgICB3aGlsZSBlbGFwc2VkIDwgZGVsdGE6Ci0gICAgICAgIGl0ZXJhdGlvbnMgKj0gMgotCi0gICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9cGlwZV9mdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oZCwgY29uZCwgaXRlcmF0aW9ucykpCi0gICAgICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgICAgIHAuc3RhcnQoKQotICAgICAgICBjb25kLndhaXQoKQotICAgICAgICBjb25kLnJlbGVhc2UoKQotCi0gICAgICAgIHJlc3VsdCA9IE5vbmUKLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgd2hpbGUgcmVzdWx0ICE9ICdTVE9QJzoKLSAgICAgICAgICAgIHJlc3VsdCA9IGMucmVjdigpCi0KLSAgICAgICAgZWxhcHNlZCA9IF90aW1lcigpIC0gdAotICAgICAgICBwLmpvaW4oKQotCi0gICAgcHJpbnQoaXRlcmF0aW9ucywgJ29iamVjdHMgcGFzc2VkIHRocm91Z2ggY29ubmVjdGlvbiBpbicsZWxhcHNlZCwnc2Vjb25kcycpCi0gICAgcHJpbnQoJ2F2ZXJhZ2UgbnVtYmVyL3NlYzonLCBpdGVyYXRpb25zL2VsYXBzZWQpCi0KLQotIyMjIyBURVNUX1NFUVNQRUVECi0KLWRlZiB0ZXN0X3NlcXNwZWVkKHNlcSk6Ci0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgICAgIGEgPSBzZXFbNV0KLQotICAgICAgICBlbGFwc2VkID0gX3RpbWVyKCkgLSB0Ci0KLSAgICBwcmludChpdGVyYXRpb25zLCAnaXRlcmF0aW9ucyBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMvZWxhcHNlZCkKLQotCi0jIyMjIFRFU1RfTE9DSwotCi1kZWYgdGVzdF9sb2Nrc3BlZWQobCk6Ci0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICB0ID0gX3RpbWVyKCkKLQotICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zKToKLSAgICAgICAgICAgIGwuYWNxdWlyZSgpCi0gICAgICAgICAgICBsLnJlbGVhc2UoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLQotICAgIHByaW50KGl0ZXJhdGlvbnMsICdpdGVyYXRpb25zIGluJywgZWxhcHNlZCwgJ3NlY29uZHMnKQotICAgIHByaW50KCdhdmVyYWdlIG51bWJlci9zZWM6JywgaXRlcmF0aW9ucy9lbGFwc2VkKQotCi0KLSMjIyMgVEVTVF9DT05ESVRJT04KLQotZGVmIGNvbmRpdGlvbnNwZWVkX2Z1bmMoYywgTik6Ci0gICAgYy5hY3F1aXJlKCkKLSAgICBjLm5vdGlmeSgpCi0KLSAgICBmb3IgaSBpbiByYW5nZShOKToKLSAgICAgICAgYy53YWl0KCkKLSAgICAgICAgYy5ub3RpZnkoKQotCi0gICAgYy5yZWxlYXNlKCkKLQotZGVmIHRlc3RfY29uZGl0aW9uc3BlZWQoUHJvY2VzcywgYyk6Ci0gICAgZWxhcHNlZCA9IDAKLSAgICBpdGVyYXRpb25zID0gMQotCi0gICAgd2hpbGUgZWxhcHNlZCA8IGRlbHRhOgotICAgICAgICBpdGVyYXRpb25zICo9IDIKLQotICAgICAgICBjLmFjcXVpcmUoKQotICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9Y29uZGl0aW9uc3BlZWRfZnVuYywgYXJncz0oYywgaXRlcmF0aW9ucykpCi0gICAgICAgIHAuc3RhcnQoKQotCi0gICAgICAgIGMud2FpdCgpCi0KLSAgICAgICAgdCA9IF90aW1lcigpCi0KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoaXRlcmF0aW9ucyk6Ci0gICAgICAgICAgICBjLm5vdGlmeSgpCi0gICAgICAgICAgICBjLndhaXQoKQotCi0gICAgICAgIGVsYXBzZWQgPSBfdGltZXIoKSAtIHQKLQotICAgICAgICBjLnJlbGVhc2UoKQotICAgICAgICBwLmpvaW4oKQotCi0gICAgcHJpbnQoaXRlcmF0aW9ucyAqIDIsICd3YWl0cyBpbicsIGVsYXBzZWQsICdzZWNvbmRzJykKLSAgICBwcmludCgnYXZlcmFnZSBudW1iZXIvc2VjOicsIGl0ZXJhdGlvbnMgKiAyIC8gZWxhcHNlZCkKLQotIyMjIwotCi1kZWYgdGVzdCgpOgotICAgIG1hbmFnZXIgPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCi0KLSAgICBnYy5kaXNhYmxlKCkKLQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBRdWV1ZS5RdWV1ZVxuJykKLSAgICB0ZXN0X3F1ZXVlc3BlZWQodGhyZWFkaW5nLlRocmVhZCwgcXVldWUuUXVldWUoKSwKLSAgICAgICAgICAgICAgICAgICAgdGhyZWFkaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuUXVldWVcbicpCi0gICAgdGVzdF9xdWV1ZXNwZWVkKG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLCBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKSwKLSAgICAgICAgICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBRdWV1ZSBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfcXVldWVzcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbWFuYWdlci5RdWV1ZSgpLAotICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBtdWx0aXByb2Nlc3NpbmcuUGlwZVxuJykKLSAgICB0ZXN0X3BpcGVzcGVlZCgpCi0KLSAgICBwcmludCgpCi0KLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbGlzdFxuJykKLSAgICB0ZXN0X3NlcXNwZWVkKGxpc3QocmFuZ2UoMTApKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbGlzdCBtYW5hZ2VkIGJ5IHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3Rfc2Vxc3BlZWQobWFuYWdlci5saXN0KGxpc3QocmFuZ2UoMTApKSkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIEFycmF5KCJpIiwgLi4uLCBsb2NrPUZhbHNlKVxuJykKLSAgICB0ZXN0X3NlcXNwZWVkKG11bHRpcHJvY2Vzc2luZy5BcnJheSgnaScsIGxpc3QocmFuZ2UoMTApKSwgbG9jaz1GYWxzZSkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIEFycmF5KCJpIiwgLi4uLCBsb2NrPVRydWUpXG4nKQotICAgIHRlc3Rfc2Vxc3BlZWQobXVsdGlwcm9jZXNzaW5nLkFycmF5KCdpJywgbGlzdChyYW5nZSgxMCkpLCBsb2NrPVRydWUpKQotCi0gICAgcHJpbnQoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIHRocmVhZGluZy5Mb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKHRocmVhZGluZy5Mb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIHRocmVhZGluZy5STG9ja1xuJykKLSAgICB0ZXN0X2xvY2tzcGVlZCh0aHJlYWRpbmcuUkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLkxvY2tcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQobXVsdGlwcm9jZXNzaW5nLkxvY2soKSkKLSAgICBwcmludCgnXG5cdCMjIyMjIyMjIHRlc3RpbmcgbXVsdGlwcm9jZXNzaW5nLlJMb2NrXG4nKQotICAgIHRlc3RfbG9ja3NwZWVkKG11bHRpcHJvY2Vzc2luZy5STG9jaygpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBsb2NrIG1hbmFnZWQgYnkgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQobWFuYWdlci5Mb2NrKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIHJsb2NrIG1hbmFnZWQgYnkgc2VydmVyIHByb2Nlc3NcbicpCi0gICAgdGVzdF9sb2Nrc3BlZWQobWFuYWdlci5STG9jaygpKQotCi0gICAgcHJpbnQoKQotCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIHRocmVhZGluZy5Db25kaXRpb25cbicpCi0gICAgdGVzdF9jb25kaXRpb25zcGVlZCh0aHJlYWRpbmcuVGhyZWFkLCB0aHJlYWRpbmcuQ29uZGl0aW9uKCkpCi0gICAgcHJpbnQoJ1xuXHQjIyMjIyMjIyB0ZXN0aW5nIG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb25cbicpCi0gICAgdGVzdF9jb25kaXRpb25zcGVlZChtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcywgbXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbigpKQotICAgIHByaW50KCdcblx0IyMjIyMjIyMgdGVzdGluZyBjb25kaXRpb24gbWFuYWdlZCBieSBhIHNlcnZlciBwcm9jZXNzXG4nKQotICAgIHRlc3RfY29uZGl0aW9uc3BlZWQobXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MsIG1hbmFnZXIuQ29uZGl0aW9uKCkpCi0KLSAgICBnYy5lbmFibGUoKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG11bHRpcHJvY2Vzc2luZy5mcmVlemVfc3VwcG9ydCgpCi0gICAgdGVzdCgpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfbmV3dHlwZS5weSBiL0RvYy9pbmNsdWRlcy9tcF9uZXd0eXBlLnB5CmluZGV4IDcyOTE3NDMuLjFjNzk2YTUgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF9uZXd0eXBlLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9tcF9uZXd0eXBlLnB5CkBAIC0xLDExICsxLDMgQEAKLSMKLSMgVGhpcyBtb2R1bGUgc2hvd3MgaG93IHRvIHVzZSBhcmJpdHJhcnkgY2FsbGFibGVzIHdpdGggYSBzdWJjbGFzcyBvZgotIyBgQmFzZU1hbmFnZXJgLgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBmcmVlemVfc3VwcG9ydAogZnJvbSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMgaW1wb3J0IEJhc2VNYW5hZ2VyLCBCYXNlUHJveHkKIGltcG9ydCBvcGVyYXRvcgpAQCAtMjcsMTIgKzE5LDEwIEBACiAKICMgUHJveHkgdHlwZSBmb3IgZ2VuZXJhdG9yIG9iamVjdHMKIGNsYXNzIEdlbmVyYXRvclByb3h5KEJhc2VQcm94eSk6Ci0gICAgX2V4cG9zZWRfID0gKCduZXh0JywgJ19fbmV4dF9fJykKKyAgICBfZXhwb3NlZF8gPSBbJ19fbmV4dF9fJ10KICAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCiAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5fY2FsbG1ldGhvZCgnbmV4dCcpCi0gICAgZGVmIF9fbmV4dF9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fY2FsbG1ldGhvZCgnX19uZXh0X18nKQogCiAjIEZ1bmN0aW9uIHRvIHJldHVybiB0aGUgb3BlcmF0b3IgbW9kdWxlCkBAIC05MCw4ICs4MCw2IEBACiAgICAgb3AgPSBtYW5hZ2VyLm9wZXJhdG9yKCkKICAgICBwcmludCgnb3AuYWRkKDIzLCA0NSkgPScsIG9wLmFkZCgyMywgNDUpKQogICAgIHByaW50KCdvcC5wb3coMiwgOTQpID0nLCBvcC5wb3coMiwgOTQpKQotICAgIHByaW50KCdvcC5nZXRzbGljZShyYW5nZSgxMCksIDIsIDYpID0nLCBvcC5nZXRzbGljZShsaXN0KHJhbmdlKDEwKSksIDIsIDYpKQotICAgIHByaW50KCdvcC5yZXBlYXQocmFuZ2UoNSksIDMpID0nLCBvcC5yZXBlYXQobGlzdChyYW5nZSg1KSksIDMpKQogICAgIHByaW50KCdvcC5fZXhwb3NlZF8gPScsIG9wLl9leHBvc2VkXykKIAogIyMKZGlmZiAtLWdpdCBhL0RvYy9pbmNsdWRlcy9tcF9wb29sLnB5IGIvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkKaW5kZXggMTU3ODQ5OC4uMTExMDFlMSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkKKysrIGIvRG9jL2luY2x1ZGVzL21wX3Bvb2wucHkKQEAgLTEsMTAgKzEsMyBAQAotIwotIyBBIHRlc3Qgb2YgYG11bHRpcHJvY2Vzc2luZy5Qb29sYCBjbGFzcwotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgcmFuZG9tCkBAIC00NiwyNjkgKzM5LDExNSBAQAogIwogCiBkZWYgdGVzdCgpOgotICAgIHByaW50KCdjcHVfY291bnQoKSA9ICVkXG4nICUgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpKQotCi0gICAgIwotICAgICMgQ3JlYXRlIHBvb2wKLSAgICAjCi0KICAgICBQUk9DRVNTRVMgPSA0CiAgICAgcHJpbnQoJ0NyZWF0aW5nIHBvb2wgd2l0aCAlZCBwcm9jZXNzZXNcbicgJSBQUk9DRVNTRVMpCi0gICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKFBST0NFU1NFUykKLSAgICBwcmludCgncG9vbCA9ICVzJyAlIHBvb2wpCi0gICAgcHJpbnQoKQogCi0gICAgIwotICAgICMgVGVzdHMKLSAgICAjCisgICAgd2l0aCBtdWx0aXByb2Nlc3NpbmcuUG9vbChQUk9DRVNTRVMpIGFzIHBvb2w6CisgICAgICAgICMKKyAgICAgICAgIyBUZXN0cworICAgICAgICAjCiAKLSAgICBUQVNLUyA9IFsobXVsLCAoaSwgNykpIGZvciBpIGluIHJhbmdlKDEwKV0gKyBcCi0gICAgICAgICAgICBbKHBsdXMsIChpLCA4KSkgZm9yIGkgaW4gcmFuZ2UoMTApXQorICAgICAgICBUQVNLUyA9IFsobXVsLCAoaSwgNykpIGZvciBpIGluIHJhbmdlKDEwKV0gKyBcCisgICAgICAgICAgICAgICAgWyhwbHVzLCAoaSwgOCkpIGZvciBpIGluIHJhbmdlKDEwKV0KIAotICAgIHJlc3VsdHMgPSBbcG9vbC5hcHBseV9hc3luYyhjYWxjdWxhdGUsIHQpIGZvciB0IGluIFRBU0tTXQotICAgIGltYXBfaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCi0gICAgaW1hcF91bm9yZGVyZWRfaXQgPSBwb29sLmltYXBfdW5vcmRlcmVkKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQorICAgICAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCB0KSBmb3IgdCBpbiBUQVNLU10KKyAgICAgICAgaW1hcF9pdCA9IHBvb2wuaW1hcChjYWxjdWxhdGVzdGFyLCBUQVNLUykKKyAgICAgICAgaW1hcF91bm9yZGVyZWRfaXQgPSBwb29sLmltYXBfdW5vcmRlcmVkKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQogCi0gICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmFwcGx5X2FzeW5jKCk6JykKLSAgICBmb3IgciBpbiByZXN1bHRzOgotICAgICAgICBwcmludCgnXHQnLCByLmdldCgpKQotICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmFwcGx5X2FzeW5jKCk6JykKKyAgICAgICAgZm9yIHIgaW4gcmVzdWx0czoKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHIuZ2V0KCkpCisgICAgICAgIHByaW50KCkKIAotICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5pbWFwKCk6JykKLSAgICBmb3IgeCBpbiBpbWFwX2l0OgotICAgICAgICBwcmludCgnXHQnLCB4KQotICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLmltYXAoKTonKQorICAgICAgICBmb3IgeCBpbiBpbWFwX2l0OgorICAgICAgICAgICAgcHJpbnQoJ1x0JywgeCkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgcHJpbnQoJ1Vub3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcF91bm9yZGVyZWQoKTonKQotICAgIGZvciB4IGluIGltYXBfdW5vcmRlcmVkX2l0OgotICAgICAgICBwcmludCgnXHQnLCB4KQotICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoJ1Vub3JkZXJlZCByZXN1bHRzIHVzaW5nIHBvb2wuaW1hcF91bm9yZGVyZWQoKTonKQorICAgICAgICBmb3IgeCBpbiBpbWFwX3Vub3JkZXJlZF9pdDoKKyAgICAgICAgICAgIHByaW50KCdcdCcsIHgpCisgICAgICAgIHByaW50KCkKIAotICAgIHByaW50KCdPcmRlcmVkIHJlc3VsdHMgdXNpbmcgcG9vbC5tYXAoKSAtLS0gd2lsbCBibG9jayB0aWxsIGNvbXBsZXRlOicpCi0gICAgZm9yIHggaW4gcG9vbC5tYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpOgotICAgICAgICBwcmludCgnXHQnLCB4KQotICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoJ09yZGVyZWQgcmVzdWx0cyB1c2luZyBwb29sLm1hcCgpIC0tLSB3aWxsIGJsb2NrIHRpbGwgY29tcGxldGU6JykKKyAgICAgICAgZm9yIHggaW4gcG9vbC5tYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpOgorICAgICAgICAgICAgcHJpbnQoJ1x0JywgeCkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgIwotICAgICMgU2ltcGxlIGJlbmNobWFya3MKLSAgICAjCisgICAgICAgICMKKyAgICAgICAgIyBUZXN0IGVycm9yIGhhbmRsaW5nCisgICAgICAgICMKIAotICAgIE4gPSAxMDAwMDAKLSAgICBwcmludCgnZGVmIHBvdzMoeCk6IHJldHVybiB4KiozJykKKyAgICAgICAgcHJpbnQoJ1Rlc3RpbmcgZXJyb3IgaGFuZGxpbmc6JykKIAotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEEgPSBsaXN0KG1hcChwb3czLCByYW5nZShOKSkpCi0gICAgcHJpbnQoJ1x0bWFwKHBvdzMsIHJhbmdlKCVkKSk6XG5cdFx0JXMgc2Vjb25kcycgJSBcCi0gICAgICAgICAgKE4sIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICB0ID0gdGltZS50aW1lKCkKLSAgICBCID0gcG9vbC5tYXAocG93MywgcmFuZ2UoTikpCi0gICAgcHJpbnQoJ1x0cG9vbC5tYXAocG93MywgcmFuZ2UoJWQpKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAoTiwgdGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEMgPSBsaXN0KHBvb2wuaW1hcChwb3czLCByYW5nZShOKSwgY2h1bmtzaXplPU4vLzgpKQotICAgIHByaW50KCdcdGxpc3QocG9vbC5pbWFwKHBvdzMsIHJhbmdlKCVkKSwgY2h1bmtzaXplPSVkKSk6XG5cdFx0JXMnIFwKLSAgICAgICAgICAnIHNlY29uZHMnICUgKE4sIE4vLzgsIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICBhc3NlcnQgQSA9PSBCID09IEMsIChsZW4oQSksIGxlbihCKSwgbGVuKEMpKQotICAgIHByaW50KCkKLQotICAgIEwgPSBbTm9uZV0gKiAxMDAwMDAwCi0gICAgcHJpbnQoJ2RlZiBub29wKHgpOiBwYXNzJykKLSAgICBwcmludCgnTCA9IFtOb25lXSAqIDEwMDAwMDAnKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQSA9IGxpc3QobWFwKG5vb3AsIEwpKQotICAgIHByaW50KCdcdG1hcChub29wLCBMKTpcblx0XHQlcyBzZWNvbmRzJyAlIFwKLSAgICAgICAgICAodGltZS50aW1lKCkgLSB0KSkKLQotICAgIHQgPSB0aW1lLnRpbWUoKQotICAgIEIgPSBwb29sLm1hcChub29wLCBMKQotICAgIHByaW50KCdcdHBvb2wubWFwKG5vb3AsIEwpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgICh0aW1lLnRpbWUoKSAtIHQpKQotCi0gICAgdCA9IHRpbWUudGltZSgpCi0gICAgQyA9IGxpc3QocG9vbC5pbWFwKG5vb3AsIEwsIGNodW5rc2l6ZT1sZW4oTCkvLzgpKQotICAgIHByaW50KCdcdGxpc3QocG9vbC5pbWFwKG5vb3AsIEwsIGNodW5rc2l6ZT0lZCkpOlxuXHRcdCVzIHNlY29uZHMnICUgXAotICAgICAgICAgIChsZW4oTCkvLzgsIHRpbWUudGltZSgpIC0gdCkpCi0KLSAgICBhc3NlcnQgQSA9PSBCID09IEMsIChsZW4oQSksIGxlbihCKSwgbGVuKEMpKQotICAgIHByaW50KCkKLQotICAgIGRlbCBBLCBCLCBDLCBMCi0KLSAgICAjCi0gICAgIyBUZXN0IGVycm9yIGhhbmRsaW5nCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgZXJyb3IgaGFuZGxpbmc6JykKLQotICAgIHRyeToKLSAgICAgICAgcHJpbnQocG9vbC5hcHBseShmLCAoNSwpKSkKLSAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIHBvb2wuYXBwbHkoKScpCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKLQotICAgIHRyeToKLSAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgbGlzdChyYW5nZSgxMCkpKSkKLSAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6Ci0gICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIHBvb2wubWFwKCknKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCi0KLSAgICB0cnk6Ci0gICAgICAgIHByaW50KGxpc3QocG9vbC5pbWFwKGYsIGxpc3QocmFuZ2UoMTApKSkpKQotICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gbGlzdChwb29sLmltYXAoKSknKQotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCi0KLSAgICBpdCA9IHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpCi0gICAgZm9yIGkgaW4gcmFuZ2UoMTApOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB4ID0gbmV4dChpdCkKKyAgICAgICAgICAgIHByaW50KHBvb2wuYXBwbHkoZiwgKDUsKSkpCiAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGlmIGkgPT0gNToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHByaW50KCdcdEdvdCBaZXJvRGl2aXNpb25FcnJvciBhcyBleHBlY3RlZCBmcm9tIHBvb2wuYXBwbHkoKScpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBpID09IDU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICBhc3NlcnQgaSA9PSA5Ci0gICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gSU1hcEl0ZXJhdG9yLm5leHQoKScpCi0gICAgcHJpbnQoKQotCi0gICAgIwotICAgICMgVGVzdGluZyB0aW1lb3V0cwotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIEFwcGx5UmVzdWx0LmdldCgpIHdpdGggdGltZW91dDonLCBlbmQ9JyAnKQotICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoY2FsY3VsYXRlLCBUQVNLU1swXSkKLSAgICB3aGlsZSAxOgotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG5cdCVzJyAlIHJlcy5nZXQoMC4wMikpCi0gICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQotICAgIHByaW50KCkKLSAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChwb29sLm1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKQorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBwb29sLm1hcCgpJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdleHBlY3RlZCBaZXJvRGl2aXNpb25FcnJvcicpCiAKLSAgICBwcmludCgnVGVzdGluZyBJTWFwSXRlcmF0b3IubmV4dCgpIHdpdGggdGltZW91dDonLCBlbmQ9JyAnKQotICAgIGl0ID0gcG9vbC5pbWFwKGNhbGN1bGF0ZXN0YXIsIFRBU0tTKQotICAgIHdoaWxlIDE6Ci0gICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcblx0JXMnICUgaXQubmV4dCgwLjAyKSkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKLSAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoJy4nKQotICAgIHByaW50KCkKLSAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChsaXN0KHBvb2wuaW1hcChmLCBsaXN0KHJhbmdlKDEwKSkpKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcHJpbnQoJ1x0R290IFplcm9EaXZpc2lvbkVycm9yIGFzIGV4cGVjdGVkIGZyb20gbGlzdChwb29sLmltYXAoKSknKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFplcm9EaXZpc2lvbkVycm9yJykKIAotICAgICMKLSAgICAjIFRlc3RpbmcgY2FsbGJhY2sKLSAgICAjCisgICAgICAgIGl0ID0gcG9vbC5pbWFwKGYsIGxpc3QocmFuZ2UoMTApKSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHggPSBuZXh0KGl0KQorICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgICAgIGlmIGkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgaSA9PSA1OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcignZXhwZWN0ZWQgWmVyb0RpdmlzaW9uRXJyb3InKQogCi0gICAgcHJpbnQoJ1Rlc3RpbmcgY2FsbGJhY2s6JykKKyAgICAgICAgYXNzZXJ0IGkgPT0gOQorICAgICAgICBwcmludCgnXHRHb3QgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZXhwZWN0ZWQgZnJvbSBJTWFwSXRlcmF0b3IubmV4dCgpJykKKyAgICAgICAgcHJpbnQoKQogCi0gICAgQSA9IFtdCi0gICAgQiA9IFs1NiwgMCwgMSwgOCwgMjcsIDY0LCAxMjUsIDIxNiwgMzQzLCA1MTIsIDcyOV0KKyAgICAgICAgIworICAgICAgICAjIFRlc3RpbmcgdGltZW91dHMKKyAgICAgICAgIwogCi0gICAgciA9IHBvb2wuYXBwbHlfYXN5bmMobXVsLCAoNywgOCksIGNhbGxiYWNrPUEuYXBwZW5kKQotICAgIHIud2FpdCgpCisgICAgICAgIHByaW50KCdUZXN0aW5nIEFwcGx5UmVzdWx0LmdldCgpIHdpdGggdGltZW91dDonLCBlbmQ9JyAnKQorICAgICAgICByZXMgPSBwb29sLmFwcGx5X2FzeW5jKGNhbGN1bGF0ZSwgVEFTS1NbMF0pCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcblx0JXMnICUgcmVzLmdldCgwLjAyKSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IG11bHRpcHJvY2Vzc2luZy5UaW1lb3V0RXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnLicpCisgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoKQogCi0gICAgciA9IHBvb2wubWFwX2FzeW5jKHBvdzMsIGxpc3QocmFuZ2UoMTApKSwgY2FsbGJhY2s9QS5leHRlbmQpCi0gICAgci53YWl0KCkKLQotICAgIGlmIEEgPT0gQjoKLSAgICAgICAgcHJpbnQoJ1x0Y2FsbGJhY2tzIHN1Y2NlZWRlZFxuJykKLSAgICBlbHNlOgotICAgICAgICBwcmludCgnXHQqKiogY2FsbGJhY2tzIGZhaWxlZFxuXHRcdCVzICE9ICVzXG4nICUgKEEsIEIpKQotCi0gICAgIwotICAgICMgQ2hlY2sgdGhlcmUgYXJlIG5vIG91dHN0YW5kaW5nIHRhc2tzCi0gICAgIwotCi0gICAgYXNzZXJ0IG5vdCBwb29sLl9jYWNoZSwgJ2NhY2hlID0gJXInICUgcG9vbC5fY2FjaGUKLQotICAgICMKLSAgICAjIENoZWNrIGNsb3NlKCkgbWV0aG9kcwotICAgICMKLQotICAgIHByaW50KCdUZXN0aW5nIGNsb3NlKCk6JykKLQotICAgIGZvciB3b3JrZXIgaW4gcG9vbC5fcG9vbDoKLSAgICAgICAgYXNzZXJ0IHdvcmtlci5pc19hbGl2ZSgpCi0KLSAgICByZXN1bHQgPSBwb29sLmFwcGx5X2FzeW5jKHRpbWUuc2xlZXAsIFswLjVdKQotICAgIHBvb2wuY2xvc2UoKQotICAgIHBvb2wuam9pbigpCi0KLSAgICBhc3NlcnQgcmVzdWx0LmdldCgpIGlzIE5vbmUKLQotICAgIGZvciB3b3JrZXIgaW4gcG9vbC5fcG9vbDoKLSAgICAgICAgYXNzZXJ0IG5vdCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcHJpbnQoJ1x0Y2xvc2UoKSBzdWNjZWVkZWRcbicpCi0KLSAgICAjCi0gICAgIyBDaGVjayB0ZXJtaW5hdGUoKSBtZXRob2QKLSAgICAjCi0KLSAgICBwcmludCgnVGVzdGluZyB0ZXJtaW5hdGUoKTonKQotCi0gICAgcG9vbCA9IG11bHRpcHJvY2Vzc2luZy5Qb29sKDIpCi0gICAgREVMVEEgPSAwLjEKLSAgICBpZ25vcmUgPSBwb29sLmFwcGx5KHBvdzMsIFsyXSkKLSAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmModGltZS5zbGVlcCwgW0RFTFRBXSkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0KLSAgICBwb29sLnRlcm1pbmF0ZSgpCi0gICAgcG9vbC5qb2luKCkKLQotICAgIGZvciB3b3JrZXIgaW4gcG9vbC5fcG9vbDoKLSAgICAgICAgYXNzZXJ0IG5vdCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcHJpbnQoJ1x0dGVybWluYXRlKCkgc3VjY2VlZGVkXG4nKQotCi0gICAgIwotICAgICMgQ2hlY2sgZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgIwotCi0gICAgcHJpbnQoJ1Rlc3RpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uOicpCi0KLSAgICBwb29sID0gbXVsdGlwcm9jZXNzaW5nLlBvb2woMikKLSAgICBERUxUQSA9IDAuMQotICAgIHByb2Nlc3NlcyA9IHBvb2wuX3Bvb2wKLSAgICBpZ25vcmUgPSBwb29sLmFwcGx5KHBvdzMsIFsyXSkKLSAgICByZXN1bHRzID0gW3Bvb2wuYXBwbHlfYXN5bmModGltZS5zbGVlcCwgW0RFTFRBXSkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0KLQotICAgIHJlc3VsdHMgPSBwb29sID0gTm9uZQotCi0gICAgdGltZS5zbGVlcChERUxUQSAqIDIpCi0KLSAgICBmb3Igd29ya2VyIGluIHByb2Nlc3NlczoKLSAgICAgICAgYXNzZXJ0IG5vdCB3b3JrZXIuaXNfYWxpdmUoKQotCi0gICAgcHJpbnQoJ1x0Z2FyYmFnZSBjb2xsZWN0aW9uIHN1Y2NlZWRlZFxuJykKKyAgICAgICAgcHJpbnQoJ1Rlc3RpbmcgSU1hcEl0ZXJhdG9yLm5leHQoKSB3aXRoIHRpbWVvdXQ6JywgZW5kPScgJykKKyAgICAgICAgaXQgPSBwb29sLmltYXAoY2FsY3VsYXRlc3RhciwgVEFTS1MpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcblx0JXMnICUgaXQubmV4dCgwLjAyKSkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgbXVsdGlwcm9jZXNzaW5nLlRpbWVvdXRFcnJvcjoKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCcuJykKKyAgICAgICAgcHJpbnQoKQorICAgICAgICBwcmludCgpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBtdWx0aXByb2Nlc3NpbmcuZnJlZXplX3N1cHBvcnQoKQotCi0gICAgYXNzZXJ0IGxlbihzeXMuYXJndikgaW4gKDEsIDIpCi0KLSAgICBpZiBsZW4oc3lzLmFyZ3YpID09IDEgb3Igc3lzLmFyZ3ZbMV0gPT0gJ3Byb2Nlc3Nlcyc6Ci0gICAgICAgIHByaW50KCcgVXNpbmcgcHJvY2Vzc2VzICcuY2VudGVyKDc5LCAnLScpKQotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gJ3RocmVhZHMnOgotICAgICAgICBwcmludCgnIFVzaW5nIHRocmVhZHMgJy5jZW50ZXIoNzksICctJykpCi0gICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcuZHVtbXkgYXMgbXVsdGlwcm9jZXNzaW5nCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoJ1VzYWdlOlxuXHQlcyBbcHJvY2Vzc2VzIHwgdGhyZWFkc10nICUgc3lzLmFyZ3ZbMF0pCi0gICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoMikKLQogICAgIHRlc3QoKQpkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5IGIvRG9jL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MWRiYzM4Li4wMDAwMDAwCi0tLSBhL0RvYy9pbmNsdWRlcy9tcF9zeW5jaHJvbml6ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDI3OCArMCwwIEBACi0jCi0jIEEgdGVzdCBmaWxlIGZvciB0aGUgYG11bHRpcHJvY2Vzc2luZ2AgcGFja2FnZQotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KLWltcG9ydCB0aW1lCi1pbXBvcnQgc3lzCi1pbXBvcnQgcmFuZG9tCi1mcm9tIHF1ZXVlIGltcG9ydCBFbXB0eQotCi1pbXBvcnQgbXVsdGlwcm9jZXNzaW5nICAgICAgICAgICAgICAgIyBtYXkgZ2V0IG92ZXJ3cml0dGVuCi0KLQotIyMjIyBURVNUX1ZBTFVFCi0KLWRlZiB2YWx1ZV9mdW5jKHJ1bm5pbmcsIG11dGV4KToKLSAgICByYW5kb20uc2VlZCgpCi0gICAgdGltZS5zbGVlcChyYW5kb20ucmFuZG9tKCkqNCkKLQotICAgIG11dGV4LmFjcXVpcmUoKQotICAgIHByaW50KCdcblx0XHRcdCcgKyBzdHIobXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKSArICcgaGFzIGZpbmlzaGVkJykKLSAgICBydW5uaW5nLnZhbHVlIC09IDEKLSAgICBtdXRleC5yZWxlYXNlKCkKLQotZGVmIHRlc3RfdmFsdWUoKToKLSAgICBUQVNLUyA9IDEwCi0gICAgcnVubmluZyA9IG11bHRpcHJvY2Vzc2luZy5WYWx1ZSgnaScsIFRBU0tTKQotICAgIG11dGV4ID0gbXVsdGlwcm9jZXNzaW5nLkxvY2soKQotCi0gICAgZm9yIGkgaW4gcmFuZ2UoVEFTS1MpOgotICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXZhbHVlX2Z1bmMsIGFyZ3M9KHJ1bm5pbmcsIG11dGV4KSkKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICB3aGlsZSBydW5uaW5nLnZhbHVlID4gMDoKLSAgICAgICAgdGltZS5zbGVlcCgwLjA4KQotICAgICAgICBtdXRleC5hY3F1aXJlKCkKLSAgICAgICAgcHJpbnQocnVubmluZy52YWx1ZSwgZW5kPScgJykKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIG11dGV4LnJlbGVhc2UoKQotCi0gICAgcHJpbnQoKQotICAgIHByaW50KCdObyBtb3JlIHJ1bm5pbmcgcHJvY2Vzc2VzJykKLQotCi0jIyMjIFRFU1RfUVVFVUUKLQotZGVmIHF1ZXVlX2Z1bmMocXVldWUpOgotICAgIGZvciBpIGluIHJhbmdlKDMwKToKLSAgICAgICAgdGltZS5zbGVlcCgwLjUgKiByYW5kb20ucmFuZG9tKCkpCi0gICAgICAgIHF1ZXVlLnB1dChpKmkpCi0gICAgcXVldWUucHV0KCdTVE9QJykKLQotZGVmIHRlc3RfcXVldWUoKToKLSAgICBxID0gbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKLQotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9cXVldWVfZnVuYywgYXJncz0ocSwpKQotICAgIHAuc3RhcnQoKQotCi0gICAgbyA9IE5vbmUKLSAgICB3aGlsZSBvICE9ICdTVE9QJzoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbyA9IHEuZ2V0KHRpbWVvdXQ9MC4zKQotICAgICAgICAgICAgcHJpbnQobywgZW5kPScgJykKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICBleGNlcHQgRW1wdHk6Ci0gICAgICAgICAgICBwcmludCgnVElNRU9VVCcpCi0KLSAgICBwcmludCgpCi0KLQotIyMjIyBURVNUX0NPTkRJVElPTgotCi1kZWYgY29uZGl0aW9uX2Z1bmMoY29uZCk6Ci0gICAgY29uZC5hY3F1aXJlKCkKLSAgICBwcmludCgnXHQnICsgc3RyKGNvbmQpKQotICAgIHRpbWUuc2xlZXAoMikKLSAgICBwcmludCgnXHRjaGlsZCBpcyBub3RpZnlpbmcnKQotICAgIHByaW50KCdcdCcgKyBzdHIoY29uZCkpCi0gICAgY29uZC5ub3RpZnkoKQotICAgIGNvbmQucmVsZWFzZSgpCi0KLWRlZiB0ZXN0X2NvbmRpdGlvbigpOgotICAgIGNvbmQgPSBtdWx0aXByb2Nlc3NpbmcuQ29uZGl0aW9uKCkKLQotICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9Y29uZGl0aW9uX2Z1bmMsIGFyZ3M9KGNvbmQsKSkKLSAgICBwcmludChjb25kKQotCi0gICAgY29uZC5hY3F1aXJlKCkKLSAgICBwcmludChjb25kKQotICAgIGNvbmQuYWNxdWlyZSgpCi0gICAgcHJpbnQoY29uZCkKLQotICAgIHAuc3RhcnQoKQotCi0gICAgcHJpbnQoJ21haW4gaXMgd2FpdGluZycpCi0gICAgY29uZC53YWl0KCkKLSAgICBwcmludCgnbWFpbiBoYXMgd29rZW4gdXAnKQotCi0gICAgcHJpbnQoY29uZCkKLSAgICBjb25kLnJlbGVhc2UoKQotICAgIHByaW50KGNvbmQpCi0gICAgY29uZC5yZWxlYXNlKCkKLQotICAgIHAuam9pbigpCi0gICAgcHJpbnQoY29uZCkKLQotCi0jIyMjIFRFU1RfU0VNQVBIT1JFCi0KLWRlZiBzZW1hcGhvcmVfZnVuYyhzZW1hLCBtdXRleCwgcnVubmluZyk6Ci0gICAgc2VtYS5hY3F1aXJlKCkKLQotICAgIG11dGV4LmFjcXVpcmUoKQotICAgIHJ1bm5pbmcudmFsdWUgKz0gMQotICAgIHByaW50KHJ1bm5pbmcudmFsdWUsICd0YXNrcyBhcmUgcnVubmluZycpCi0gICAgbXV0ZXgucmVsZWFzZSgpCi0KLSAgICByYW5kb20uc2VlZCgpCi0gICAgdGltZS5zbGVlcChyYW5kb20ucmFuZG9tKCkqMikKLQotICAgIG11dGV4LmFjcXVpcmUoKQotICAgIHJ1bm5pbmcudmFsdWUgLT0gMQotICAgIHByaW50KCclcyBoYXMgZmluaXNoZWQnICUgbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKQotICAgIG11dGV4LnJlbGVhc2UoKQotCi0gICAgc2VtYS5yZWxlYXNlKCkKLQotZGVmIHRlc3Rfc2VtYXBob3JlKCk6Ci0gICAgc2VtYSA9IG11bHRpcHJvY2Vzc2luZy5TZW1hcGhvcmUoMykKLSAgICBtdXRleCA9IG11bHRpcHJvY2Vzc2luZy5STG9jaygpCi0gICAgcnVubmluZyA9IG11bHRpcHJvY2Vzc2luZy5WYWx1ZSgnaScsIDApCi0KLSAgICBwcm9jZXNzZXMgPSBbCi0gICAgICAgIG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zZW1hcGhvcmVfZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oc2VtYSwgbXV0ZXgsIHJ1bm5pbmcpKQotICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCkKLSAgICAgICAgXQotCi0gICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgotICAgICAgICBwLnN0YXJ0KCkKLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5qb2luKCkKLQotCi0jIyMjIFRFU1RfSk9JTl9USU1FT1VUCi0KLWRlZiBqb2luX3RpbWVvdXRfZnVuYygpOgotICAgIHByaW50KCdcdGNoaWxkIHNsZWVwaW5nJykKLSAgICB0aW1lLnNsZWVwKDUuNSkKLSAgICBwcmludCgnXG5cdGNoaWxkIHRlcm1pbmF0aW5nJykKLQotZGVmIHRlc3Rfam9pbl90aW1lb3V0KCk6Ci0gICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1qb2luX3RpbWVvdXRfZnVuYykKLSAgICBwLnN0YXJ0KCkKLQotICAgIHByaW50KCd3YWl0aW5nIGZvciBwcm9jZXNzIHRvIGZpbmlzaCcpCi0KLSAgICB3aGlsZSAxOgotICAgICAgICBwLmpvaW4odGltZW91dD0xKQotICAgICAgICBpZiBub3QgcC5pc19hbGl2ZSgpOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgcHJpbnQoJy4nLCBlbmQ9JyAnKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLQotCi0jIyMjIFRFU1RfRVZFTlQKLQotZGVmIGV2ZW50X2Z1bmMoZXZlbnQpOgotICAgIHByaW50KCdcdCVyIGlzIHdhaXRpbmcnICUgbXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcygpKQotICAgIGV2ZW50LndhaXQoKQotICAgIHByaW50KCdcdCVyIGhhcyB3b2tlbiB1cCcgJSBtdWx0aXByb2Nlc3NpbmcuY3VycmVudF9wcm9jZXNzKCkpCi0KLWRlZiB0ZXN0X2V2ZW50KCk6Ci0gICAgZXZlbnQgPSBtdWx0aXByb2Nlc3NpbmcuRXZlbnQoKQotCi0gICAgcHJvY2Vzc2VzID0gW211bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1ldmVudF9mdW5jLCBhcmdzPShldmVudCwpKQotICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KV0KLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5zdGFydCgpCi0KLSAgICBwcmludCgnbWFpbiBpcyBzbGVlcGluZycpCi0gICAgdGltZS5zbGVlcCgyKQotCi0gICAgcHJpbnQoJ21haW4gaXMgc2V0dGluZyBldmVudCcpCi0gICAgZXZlbnQuc2V0KCkKLQotICAgIGZvciBwIGluIHByb2Nlc3NlczoKLSAgICAgICAgcC5qb2luKCkKLQotCi0jIyMjIFRFU1RfU0hBUkVEVkFMVUVTCi0KLWRlZiBzaGFyZWR2YWx1ZXNfZnVuYyh2YWx1ZXMsIGFycmF5cywgc2hhcmVkX3ZhbHVlcywgc2hhcmVkX2FycmF5cyk6Ci0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKHZhbHVlcykpOgotICAgICAgICB2ID0gdmFsdWVzW2ldWzFdCi0gICAgICAgIHN2ID0gc2hhcmVkX3ZhbHVlc1tpXS52YWx1ZQotICAgICAgICBhc3NlcnQgdiA9PSBzdgotCi0gICAgZm9yIGkgaW4gcmFuZ2UobGVuKHZhbHVlcykpOgotICAgICAgICBhID0gYXJyYXlzW2ldWzFdCi0gICAgICAgIHNhID0gbGlzdChzaGFyZWRfYXJyYXlzW2ldWzpdKQotICAgICAgICBhc3NlcnQgYSA9PSBzYQotCi0gICAgcHJpbnQoJ1Rlc3RzIHBhc3NlZCcpCi0KLWRlZiB0ZXN0X3NoYXJlZHZhbHVlcygpOgotICAgIHZhbHVlcyA9IFsKLSAgICAgICAgKCdpJywgMTApLAotICAgICAgICAoJ2gnLCAtMiksCi0gICAgICAgICgnZCcsIDEuMjUpCi0gICAgICAgIF0KLSAgICBhcnJheXMgPSBbCi0gICAgICAgICgnaScsIGxpc3QocmFuZ2UoMTAwKSkpLAotICAgICAgICAoJ2QnLCBbMC4yNSAqIGkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0pLAotICAgICAgICAoJ0gnLCBsaXN0KHJhbmdlKDEwMDApKSkKLSAgICAgICAgXQotCi0gICAgc2hhcmVkX3ZhbHVlcyA9IFttdWx0aXByb2Nlc3NpbmcuVmFsdWUoaWQsIHYpIGZvciBpZCwgdiBpbiB2YWx1ZXNdCi0gICAgc2hhcmVkX2FycmF5cyA9IFttdWx0aXByb2Nlc3NpbmcuQXJyYXkoaWQsIGEpIGZvciBpZCwgYSBpbiBhcnJheXNdCi0KLSAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MoCi0gICAgICAgIHRhcmdldD1zaGFyZWR2YWx1ZXNfZnVuYywKLSAgICAgICAgYXJncz0odmFsdWVzLCBhcnJheXMsIHNoYXJlZF92YWx1ZXMsIHNoYXJlZF9hcnJheXMpCi0gICAgICAgICkKLSAgICBwLnN0YXJ0KCkKLSAgICBwLmpvaW4oKQotCi0gICAgYXNzZXJ0IHAuZXhpdGNvZGUgPT0gMAotCi0KLSMjIyMKLQotZGVmIHRlc3QobmFtZXNwYWNlPW11bHRpcHJvY2Vzc2luZyk6Ci0gICAgZ2xvYmFsIG11bHRpcHJvY2Vzc2luZwotCi0gICAgbXVsdGlwcm9jZXNzaW5nID0gbmFtZXNwYWNlCi0KLSAgICBmb3IgZnVuYyBpbiBbdGVzdF92YWx1ZSwgdGVzdF9xdWV1ZSwgdGVzdF9jb25kaXRpb24sCi0gICAgICAgICAgICAgICAgIHRlc3Rfc2VtYXBob3JlLCB0ZXN0X2pvaW5fdGltZW91dCwgdGVzdF9ldmVudCwKLSAgICAgICAgICAgICAgICAgdGVzdF9zaGFyZWR2YWx1ZXNdOgotCi0gICAgICAgIHByaW50KCdcblx0IyMjIyMjIyMgJXNcbicgJSBmdW5jLl9fbmFtZV9fKQotICAgICAgICBmdW5jKCkKLQotICAgIGlnbm9yZSA9IG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4oKSAgICAgICMgY2xlYW51cCBhbnkgb2xkIHByb2Nlc3NlcwotICAgIGlmIGhhc2F0dHIobXVsdGlwcm9jZXNzaW5nLCAnX2RlYnVnX2luZm8nKToKLSAgICAgICAgaW5mbyA9IG11bHRpcHJvY2Vzc2luZy5fZGVidWdfaW5mbygpCi0gICAgICAgIGlmIGluZm86Ci0gICAgICAgICAgICBwcmludChpbmZvKQotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndGhlcmUgc2hvdWxkIGJlIG5vIHBvc2l0aXZlIHJlZmNvdW50cyBsZWZ0JykKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG11bHRpcHJvY2Vzc2luZy5mcmVlemVfc3VwcG9ydCgpCi0KLSAgICBhc3NlcnQgbGVuKHN5cy5hcmd2KSBpbiAoMSwgMikKLQotICAgIGlmIGxlbihzeXMuYXJndikgPT0gMSBvciBzeXMuYXJndlsxXSA9PSAncHJvY2Vzc2VzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyBwcm9jZXNzZXMgJy5jZW50ZXIoNzksICctJykpCi0gICAgICAgIG5hbWVzcGFjZSA9IG11bHRpcHJvY2Vzc2luZwotICAgIGVsaWYgc3lzLmFyZ3ZbMV0gPT0gJ21hbmFnZXInOgotICAgICAgICBwcmludCgnIFVzaW5nIHByb2Nlc3NlcyBhbmQgYSBtYW5hZ2VyICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBuYW1lc3BhY2UgPSBtdWx0aXByb2Nlc3NpbmcuTWFuYWdlcigpCi0gICAgICAgIG5hbWVzcGFjZS5Qcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKLSAgICAgICAgbmFtZXNwYWNlLmN1cnJlbnRfcHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MKLSAgICAgICAgbmFtZXNwYWNlLmFjdGl2ZV9jaGlsZHJlbiA9IG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4KLSAgICBlbGlmIHN5cy5hcmd2WzFdID09ICd0aHJlYWRzJzoKLSAgICAgICAgcHJpbnQoJyBVc2luZyB0aHJlYWRzICcuY2VudGVyKDc5LCAnLScpKQotICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmR1bW15IGFzIG5hbWVzcGFjZQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCdVc2FnZTpcblx0JXMgW3Byb2Nlc3NlcyB8IG1hbmFnZXIgfCB0aHJlYWRzXScgJSBzeXMuYXJndlswXSkKLSAgICAgICAgcmFpc2UgU3lzdGVtRXhpdCgyKQotCi0gICAgdGVzdChuYW1lc3BhY2UpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5IGIvRG9jL2luY2x1ZGVzL21wX3dlYnNlcnZlci5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUxMDI0ZC4uMDAwMDAwMAotLS0gYS9Eb2MvaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotIwotIyBFeGFtcGxlIHdoZXJlIGEgcG9vbCBvZiBodHRwIHNlcnZlcnMgc2hhcmUgYSBzaW5nbGUgbGlzdGVuaW5nIHNvY2tldAotIwotIyBPbiBXaW5kb3dzIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gdGhlIGFiaWxpdHkgdG8gcGlja2xlIGEgc29ja2V0Ci0jIG9iamVjdCBzbyB0aGF0IHRoZSB3b3JrZXIgcHJvY2Vzc2VzIGNhbiBpbmhlcml0IGEgY29weSBvZiB0aGUgc2VydmVyCi0jIG9iamVjdC4gIChXZSBpbXBvcnQgYG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb25gIHRvIGVuYWJsZSB0aGlzIHBpY2tsaW5nLikKLSMKLSMgTm90IHN1cmUgaWYgd2Ugc2hvdWxkIHN5bmNocm9uaXplIGFjY2VzcyB0byBgc29ja2V0LmFjY2VwdCgpYCBtZXRob2QgYnkKLSMgdXNpbmcgYSBwcm9jZXNzLXNoYXJlZCBsb2NrIC0tIGRvZXMgbm90IHNlZW0gdG8gYmUgbmVjZXNzYXJ5LgotIwotIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgY3VycmVudF9wcm9jZXNzLCBmcmVlemVfc3VwcG9ydAotZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgSFRUUFNlcnZlcgotZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyCi0KLWlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uICAgICMgbWFrZSBzb2NrZXRzIHBpY2thYmxlL2luaGVyaXRhYmxlCi0KLQotZGVmIG5vdGUoZm9ybWF0LCAqYXJncyk6Ci0gICAgc3lzLnN0ZGVyci53cml0ZSgnWyVzXVx0JXNcbicgJSAoY3VycmVudF9wcm9jZXNzKCkubmFtZSwgZm9ybWF0ICUgYXJncykpCi0KLQotY2xhc3MgUmVxdWVzdEhhbmRsZXIoU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKLSAgICAjIHdlIG92ZXJyaWRlIGxvZ19tZXNzYWdlKCkgdG8gc2hvdyB3aGljaCBwcm9jZXNzIGlzIGhhbmRsaW5nIHRoZSByZXF1ZXN0Ci0gICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgotICAgICAgICBub3RlKGZvcm1hdCwgKmFyZ3MpCi0KLWRlZiBzZXJ2ZV9mb3JldmVyKHNlcnZlcik6Ci0gICAgbm90ZSgnc3RhcnRpbmcgc2VydmVyJykKLSAgICB0cnk6Ci0gICAgICAgIHNlcnZlci5zZXJ2ZV9mb3JldmVyKCkKLSAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgIHBhc3MKLQotCi1kZWYgcnVucG9vbChhZGRyZXNzLCBudW1iZXJfb2ZfcHJvY2Vzc2VzKToKLSAgICAjIGNyZWF0ZSBhIHNpbmdsZSBzZXJ2ZXIgb2JqZWN0IC0tIGNoaWxkcmVuIHdpbGwgZWFjaCBpbmhlcml0IGEgY29weQotICAgIHNlcnZlciA9IEhUVFBTZXJ2ZXIoYWRkcmVzcywgUmVxdWVzdEhhbmRsZXIpCi0KLSAgICAjIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMgdG8gYWN0IGFzIHdvcmtlcnMKLSAgICBmb3IgaSBpbiByYW5nZShudW1iZXJfb2ZfcHJvY2Vzc2VzIC0gMSk6Ci0gICAgICAgIFByb2Nlc3ModGFyZ2V0PXNlcnZlX2ZvcmV2ZXIsIGFyZ3M9KHNlcnZlciwpKS5zdGFydCgpCi0KLSAgICAjIG1haW4gcHJvY2VzcyBhbHNvIGFjdHMgYXMgYSB3b3JrZXIKLSAgICBzZXJ2ZV9mb3JldmVyKHNlcnZlcikKLQotCi1kZWYgdGVzdCgpOgotICAgIERJUiA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nKQotICAgIEFERFJFU1MgPSAoJ2xvY2FsaG9zdCcsIDgwMDApCi0gICAgTlVNQkVSX09GX1BST0NFU1NFUyA9IDQKLQotICAgIHByaW50KCdTZXJ2aW5nIGF0IGh0dHA6Ly8lczolZCB1c2luZyAlZCB3b3JrZXIgcHJvY2Vzc2VzJyAlIFwKLSAgICAgICAgICAoQUREUkVTU1swXSwgQUREUkVTU1sxXSwgTlVNQkVSX09GX1BST0NFU1NFUykpCi0gICAgcHJpbnQoJ1RvIGV4aXQgcHJlc3MgQ3RybC0nICsgWydDJywgJ0JyZWFrJ11bc3lzLnBsYXRmb3JtPT0nd2luMzInXSkKLQotICAgIG9zLmNoZGlyKERJUikKLSAgICBydW5wb29sKEFERFJFU1MsIE5VTUJFUl9PRl9QUk9DRVNTRVMpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBmcmVlemVfc3VwcG9ydCgpCi0gICAgdGVzdCgpCmRpZmYgLS1naXQgYS9Eb2MvaW5jbHVkZXMvbXBfd29ya2Vycy5weSBiL0RvYy9pbmNsdWRlcy9tcF93b3JrZXJzLnB5CmluZGV4IGU2NmQ5N2IuLjNiOTIyNjkgMTAwNjQ0Ci0tLSBhL0RvYy9pbmNsdWRlcy9tcF93b3JrZXJzLnB5CisrKyBiL0RvYy9pbmNsdWRlcy9tcF93b3JrZXJzLnB5CkBAIC0xLDE2ICsxLDMgQEAKLSMKLSMgU2ltcGxlIGV4YW1wbGUgd2hpY2ggdXNlcyBhIHBvb2wgb2Ygd29ya2VycyB0byBjYXJyeSBvdXQgc29tZSB0YXNrcy4KLSMKLSMgTm90aWNlIHRoYXQgdGhlIHJlc3VsdHMgd2lsbCBwcm9iYWJseSBub3QgY29tZSBvdXQgb2YgdGhlIG91dHB1dAotIyBxdWV1ZSBpbiB0aGUgc2FtZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgY29ycmVzcG9uZGluZyB0YXNrcyB3ZXJlCi0jIHB1dCBvbiB0aGUgaW5wdXQgcXVldWUuICBJZiBpdCBpcyBpbXBvcnRhbnQgdG8gZ2V0IHRoZSByZXN1bHRzIGJhY2sKLSMgaW4gdGhlIG9yaWdpbmFsIG9yZGVyIHRoZW4gY29uc2lkZXIgdXNpbmcgYFBvb2wubWFwKClgIG9yCi0jIGBQb29sLmltYXAoKWAgKHdoaWNoIHdpbGwgc2F2ZSBvbiB0aGUgYW1vdW50IG9mIGNvZGUgbmVlZGVkIGFueXdheSkuCi0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLQogaW1wb3J0IHRpbWUKIGltcG9ydCByYW5kb20KIApkaWZmIC0tZ2l0IGEvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaCBiL0RvYy9pbmNsdWRlcy90eXBlc3RydWN0LmgKaW5kZXggMzI2NDdjMC4uNzI2NTAwOSAxMDA2NDQKLS0tIGEvRG9jL2luY2x1ZGVzL3R5cGVzdHJ1Y3QuaAorKysgYi9Eb2MvaW5jbHVkZXMvdHlwZXN0cnVjdC5oCkBAIC0xLDcgKzEsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgX3R5cGVvYmplY3QgewogICAgIFB5T2JqZWN0X1ZBUl9IRUFECi0gICAgY2hhciAqdHBfbmFtZTsgLyogRm9yIHByaW50aW5nLCBpbiBmb3JtYXQgIjxtb2R1bGU+LjxuYW1lPiIgKi8KLSAgICBpbnQgdHBfYmFzaWNzaXplLCB0cF9pdGVtc2l6ZTsgLyogRm9yIGFsbG9jYXRpb24gKi8KKyAgICBjb25zdCBjaGFyICp0cF9uYW1lOyAvKiBGb3IgcHJpbnRpbmcsIGluIGZvcm1hdCAiPG1vZHVsZT4uPG5hbWU+IiAqLworICAgIFB5X3NzaXplX3QgdHBfYmFzaWNzaXplLCB0cF9pdGVtc2l6ZTsgLyogRm9yIGFsbG9jYXRpb24gKi8KIAogICAgIC8qIE1ldGhvZHMgdG8gaW1wbGVtZW50IHN0YW5kYXJkIG9wZXJhdGlvbnMgKi8KIApAQCAtOSw3ICs5LDcgQEAKICAgICBwcmludGZ1bmMgdHBfcHJpbnQ7CiAgICAgZ2V0YXR0cmZ1bmMgdHBfZ2V0YXR0cjsKICAgICBzZXRhdHRyZnVuYyB0cF9zZXRhdHRyOwotICAgIHZvaWQgKnRwX3Jlc2VydmVkOworICAgIHZvaWQgKnRwX3Jlc2VydmVkOyAvKiBmb3JtZXJseSBrbm93biBhcyB0cF9jb21wYXJlICovCiAgICAgcmVwcmZ1bmMgdHBfcmVwcjsKIAogICAgIC8qIE1ldGhvZCBzdWl0ZXMgZm9yIHN0YW5kYXJkIGNsYXNzZXMgKi8KQEAgLTMwLDkgKzMwLDkgQEAKICAgICBQeUJ1ZmZlclByb2NzICp0cF9hc19idWZmZXI7CiAKICAgICAvKiBGbGFncyB0byBkZWZpbmUgcHJlc2VuY2Ugb2Ygb3B0aW9uYWwvZXhwYW5kZWQgZmVhdHVyZXMgKi8KLSAgICBsb25nIHRwX2ZsYWdzOworICAgIHVuc2lnbmVkIGxvbmcgdHBfZmxhZ3M7CiAKLSAgICBjaGFyICp0cF9kb2M7IC8qIERvY3VtZW50YXRpb24gc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqdHBfZG9jOyAvKiBEb2N1bWVudGF0aW9uIHN0cmluZyAqLwogCiAgICAgLyogY2FsbCBmdW5jdGlvbiBmb3IgYWxsIGFjY2Vzc2libGUgb2JqZWN0cyAqLwogICAgIHRyYXZlcnNlcHJvYyB0cF90cmF2ZXJzZTsKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICByaWNoY21wZnVuYyB0cF9yaWNoY29tcGFyZTsKIAogICAgIC8qIHdlYWsgcmVmZXJlbmNlIGVuYWJsZXIgKi8KLSAgICBsb25nIHRwX3dlYWtsaXN0b2Zmc2V0OworICAgIFB5X3NzaXplX3QgdHBfd2Vha2xpc3RvZmZzZXQ7CiAKICAgICAvKiBJdGVyYXRvcnMgKi8KICAgICBnZXRpdGVyZnVuYyB0cF9pdGVyOwpAQCAtNTgsNyArNTgsNyBAQAogICAgIFB5T2JqZWN0ICp0cF9kaWN0OwogICAgIGRlc2NyZ2V0ZnVuYyB0cF9kZXNjcl9nZXQ7CiAgICAgZGVzY3JzZXRmdW5jIHRwX2Rlc2NyX3NldDsKLSAgICBsb25nIHRwX2RpY3RvZmZzZXQ7CisgICAgUHlfc3NpemVfdCB0cF9kaWN0b2Zmc2V0OwogICAgIGluaXRwcm9jIHRwX2luaXQ7CiAgICAgYWxsb2NmdW5jIHRwX2FsbG9jOwogICAgIG5ld2Z1bmMgdHBfbmV3OwpAQCAtNjksNSArNjksMTEgQEAKICAgICBQeU9iamVjdCAqdHBfY2FjaGU7CiAgICAgUHlPYmplY3QgKnRwX3N1YmNsYXNzZXM7CiAgICAgUHlPYmplY3QgKnRwX3dlYWtsaXN0OworICAgIGRlc3RydWN0b3IgdHBfZGVsOworCisgICAgLyogVHlwZSBhdHRyaWJ1dGUgY2FjaGUgdmVyc2lvbiB0YWcuIEFkZGVkIGluIHZlcnNpb24gMi42ICovCisgICAgdW5zaWduZWQgaW50IHRwX3ZlcnNpb25fdGFnOworCisgICAgZGVzdHJ1Y3RvciB0cF9maW5hbGl6ZTsKIAogfSBQeVR5cGVPYmplY3Q7CmRpZmYgLS1naXQgYS9Eb2MvaW5zdGFsbC9pbmRleC5yc3QgYi9Eb2MvaW5zdGFsbC9pbmRleC5yc3QKaW5kZXggMGM5YTlmMi4uZTYzYjZjZCAxMDA2NDQKLS0tIGEvRG9jL2luc3RhbGwvaW5kZXgucnN0CisrKyBiL0RvYy9pbnN0YWxsL2luZGV4LnJzdApAQCAtMiw5ICsyLDkgQEAKIAogLi4gX2luc3RhbGwtaW5kZXg6CiAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gIEluc3RhbGxpbmcgUHl0aG9uIE1vZHVsZXMKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBJbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGVzIChMZWdhY3kgdmVyc2lvbikKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIDpBdXRob3I6IEdyZWcgV2FyZAogCkBAIC0yOCwxNiArMjgsMTYgQEAKIAogLi4gbm90ZTo6CiAKLSAgIFRoaXMgZ3VpZGUgb25seSBjb3ZlcnMgdGhlIGJhc2ljIHRvb2xzIGZvciBpbnN0YWxsaW5nIGV4dGVuc2lvbnMgdGhhdCBhcmUKLSAgIHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbi4gVGhpcmQgcGFydHkgdG9vbHMgb2ZmZXIgZWFzaWVyCi0gICB0byB1c2UgYW5kIG1vcmUgc2VjdXJlIGFsdGVybmF0aXZlcy4gUmVmZXIgdG8gdGhlCi0gICBgcXVpY2sgcmVjb21tZW5kYXRpb25zIHNlY3Rpb24KLSAgIDxodHRwczovL3B5dGhvbi1wYWNrYWdpbmctdXNlci1ndWlkZS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L2N1cnJlbnQuaHRtbD5gX18KKyAgIFRoaXMgZ3VpZGUgb25seSBjb3ZlcnMgdGhlIGJhc2ljIHRvb2xzIGZvciBidWlsZGluZyBhbmQgZGlzdHJpYnV0aW5nCisgICBleHRlbnNpb25zIHRoYXQgYXJlIHByb3ZpZGVkIGFzIHBhcnQgb2YgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbi4gVGhpcmQgcGFydHkKKyAgIHRvb2xzIG9mZmVyIGVhc2llciB0byB1c2UgYW5kIG1vcmUgc2VjdXJlIGFsdGVybmF0aXZlcy4gUmVmZXIgdG8gdGhlIGBxdWljaworICAgcmVjb21tZW5kYXRpb25zIHNlY3Rpb24gPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2N1cnJlbnQvPmBfXwogICAgaW4gdGhlIFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCiAuLiBfaW5zdC1pbnRybzoKIAorCiBJbnRyb2R1Y3Rpb24KID09PT09PT09PT09PQogCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAogT24gV2luZG93cywgeW91J2QgcHJvYmFibHkgZG93bmxvYWQgOmZpbGU6YGZvby0xLjAuemlwYC4gIElmIHlvdSBkb3dubG9hZGVkIHRoZQogYXJjaGl2ZSBmaWxlIHRvIDpmaWxlOmBDOlxcVGVtcGAsIHRoZW4gaXQgd291bGQgdW5wYWNrIGludG8KLTpmaWxlOmBDOlxcVGVtcFxcZm9vLTEuMGA7IHlvdSBjYW4gdXNlIGVpdGhlciBhIGFyY2hpdmUgbWFuaXB1bGF0b3Igd2l0aCBhCis6ZmlsZTpgQzpcXFRlbXBcXGZvby0xLjBgOyB5b3UgY2FuIHVzZSBlaXRoZXIgYW4gYXJjaGl2ZSBtYW5pcHVsYXRvciB3aXRoIGEKIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZSAoc3VjaCBhcyBXaW5aaXApIG9yIGEgY29tbWFuZC1saW5lIHRvb2wgKHN1Y2ggYXMKIDpwcm9ncmFtOmB1bnppcGAgb3IgOnByb2dyYW06YHBrdW56aXBgKSB0byB1bnBhY2sgdGhlIGFyY2hpdmUuICBUaGVuLCBvcGVuIGEKIGNvbW1hbmQgcHJvbXB0IHdpbmRvdyBhbmQgcnVuOjoKQEAgLTEwMTIsNyArMTAxMiw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgQysrQnVpbGRlciBDb21waWxlciA8aHR0cDovL3d3dy5jb2RlZ2Vhci5jb20vZG93bmxvYWRzL2ZyZWUvY3BwYnVpbGRlcj5gXworICAgYEMrK0J1aWxkZXIgQ29tcGlsZXIgPGh0dHA6Ly93d3cuZW1iYXJjYWRlcm8uY29tL2Rvd25sb2Fkcz5gXwogICAgICAgSW5mb3JtYXRpb24gYWJvdXQgdGhlIGZyZWUgQysrIGNvbXBpbGVyIGZyb20gQm9ybGFuZCwgaW5jbHVkaW5nIGxpbmtzIHRvIHRoZQogICAgICAgZG93bmxvYWQgcGFnZXMuCiAKQEAgLTEwODQsNyArMTA4NCw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgQnVpbGRpbmcgUHl0aG9uIG1vZHVsZXMgb24gTVMgV2luZG93cyBwbGF0Zm9ybSB3aXRoIE1pbkdXIDxodHRwOi8vd3d3LnpvcGUub3JnL01lbWJlcnMvYWxzL3RpcHMvd2luMzJfbWluZ3dfbW9kdWxlcz5gXworICAgYEJ1aWxkaW5nIFB5dGhvbiBtb2R1bGVzIG9uIE1TIFdpbmRvd3MgcGxhdGZvcm0gd2l0aCBNaW5HVyA8aHR0cDovL29sZC56b3BlLm9yZy9NZW1iZXJzL2Fscy90aXBzL3dpbjMyX21pbmd3X21vZHVsZXM+YF8KICAgICAgIEluZm9ybWF0aW9uIGFib3V0IGJ1aWxkaW5nIHRoZSByZXF1aXJlZCBsaWJyYXJpZXMgZm9yIHRoZSBNaW5HVyBlbnZpcm9ubWVudC4KIAogCkBAIC0xMDkzLDcgKzEwOTMsNyBAQAogLi4gWyNdIFRoaXMgYWxzbyBtZWFucyB5b3UgY291bGQgcmVwbGFjZSBhbGwgZXhpc3RpbmcgQ09GRi1saWJyYXJpZXMgd2l0aCBPTUYtbGlicmFyaWVzCiAgICBvZiB0aGUgc2FtZSBuYW1lLgogCi0uLiBbI10gQ2hlY2sgaHR0cDovL3NvdXJjZXMucmVkaGF0LmNvbS9jeWd3aW4vIGFuZCBodHRwOi8vd3d3Lm1pbmd3Lm9yZy8gZm9yIG1vcmUKKy4uIFsjXSBDaGVjayBodHRwOi8vd3d3LnNvdXJjZXdhcmUub3JnL2N5Z3dpbi8gYW5kIGh0dHA6Ly93d3cubWluZ3cub3JnLyBmb3IgbW9yZQogICAgaW5mb3JtYXRpb24KIAogLi4gWyNdIFRoZW4geW91IGhhdmUgbm8gUE9TSVggZW11bGF0aW9uIGF2YWlsYWJsZSwgYnV0IHlvdSBhbHNvIGRvbid0IG5lZWQKZGlmZiAtLWdpdCBhL0RvYy9pbnN0YWxsaW5nL2luZGV4LnJzdCBiL0RvYy9pbnN0YWxsaW5nL2luZGV4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzNjNjg5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2luc3RhbGxpbmcvaW5kZXgucnN0CkBAIC0wLDAgKzEsMjIwIEBACisuLiBoaWdobGlnaHRsYW5nOjogbm9uZQorCisuLiBfaW5zdGFsbGluZy1pbmRleDoKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgSW5zdGFsbGluZyBQeXRob24gTW9kdWxlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworOkVtYWlsOiBkaXN0dXRpbHMtc2lnQHB5dGhvbi5vcmcKKworQXMgYSBwb3B1bGFyIG9wZW4gc291cmNlIGRldmVsb3BtZW50IHByb2plY3QsIFB5dGhvbiBoYXMgYW4gYWN0aXZlCitzdXBwb3J0aW5nIGNvbW11bml0eSBvZiBjb250cmlidXRvcnMgYW5kIHVzZXJzIHRoYXQgYWxzbyBtYWtlIHRoZWlyIHNvZnR3YXJlCithdmFpbGFibGUgZm9yIG90aGVyIFB5dGhvbiBkZXZlbG9wZXJzIHRvIHVzZSB1bmRlciBvcGVuIHNvdXJjZSBsaWNlbnNlIHRlcm1zLgorCitUaGlzIGFsbG93cyBQeXRob24gdXNlcnMgdG8gc2hhcmUgYW5kIGNvbGxhYm9yYXRlIGVmZmVjdGl2ZWx5LCBiZW5lZml0aW5nCitmcm9tIHRoZSBzb2x1dGlvbnMgb3RoZXJzIGhhdmUgYWxyZWFkeSBjcmVhdGVkIHRvIGNvbW1vbiAoYW5kIHNvbWV0aW1lcworZXZlbiByYXJlISkgcHJvYmxlbXMsIGFzIHdlbGwgYXMgcG90ZW50aWFsbHkgY29udHJpYnV0aW5nIHRoZWlyIG93bgorc29sdXRpb25zIHRvIHRoZSBjb21tb24gcG9vbC4KKworVGhpcyBndWlkZSBjb3ZlcnMgdGhlIGluc3RhbGxhdGlvbiBwYXJ0IG9mIHRoZSBwcm9jZXNzLiBGb3IgYSBndWlkZSB0bworY3JlYXRpbmcgYW5kIHNoYXJpbmcgeW91ciBvd24gUHl0aG9uIHByb2plY3RzLCByZWZlciB0byB0aGUKKzpyZWY6YGRpc3RyaWJ1dGlvbiBndWlkZSA8ZGlzdHJpYnV0aW5nLWluZGV4PmAuCisKKy4uIG5vdGU6OgorCisgICBGb3IgY29ycG9yYXRlIGFuZCBvdGhlciBpbnN0aXR1dGlvbmFsIHVzZXJzLCBiZSBhd2FyZSB0aGF0IG1hbnkKKyAgIG9yZ2FuaXNhdGlvbnMgaGF2ZSB0aGVpciBvd24gcG9saWNpZXMgYXJvdW5kIHVzaW5nIGFuZCBjb250cmlidXRpbmcgdG8KKyAgIG9wZW4gc291cmNlIHNvZnR3YXJlLiBQbGVhc2UgdGFrZSBzdWNoIHBvbGljaWVzIGludG8gYWNjb3VudCB3aGVuIG1ha2luZworICAgdXNlIG9mIHRoZSBkaXN0cmlidXRpb24gYW5kIGluc3RhbGxhdGlvbiB0b29scyBwcm92aWRlZCB3aXRoIFB5dGhvbi4KKworCitLZXkgdGVybXMKKz09PT09PT09PQorCisqIGBgcGlwYGAgaXMgdGhlIHByZWZlcnJlZCBpbnN0YWxsZXIgcHJvZ3JhbS4gU3RhcnRpbmcgd2l0aCBQeXRob24gMy40LCBpdAorICBpcyBpbmNsdWRlZCBieSBkZWZhdWx0IHdpdGggdGhlIFB5dGhvbiBiaW5hcnkgaW5zdGFsbGVycy4KKyogYSB2aXJ0dWFsIGVudmlyb25tZW50IGlzIGEgc2VtaS1pc29sYXRlZCBQeXRob24gZW52aXJvbm1lbnQgdGhhdCBhbGxvd3MKKyAgcGFja2FnZXMgdG8gYmUgaW5zdGFsbGVkIGZvciB1c2UgYnkgYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLCByYXRoZXIgdGhhbgorICBiZWluZyBpbnN0YWxsZWQgc3lzdGVtIHdpZGUKKyogYGBweXZlbnZgYCBpcyB0aGUgc3RhbmRhcmQgdG9vbCBmb3IgY3JlYXRpbmcgdmlydHVhbCBlbnZpcm9ubWVudHMsIGFuZCBoYXMKKyAgYmVlbiBwYXJ0IG9mIFB5dGhvbiBzaW5jZSBQeXRob24gMy4zLiBTdGFydGluZyB3aXRoIFB5dGhvbiAzLjQsIGl0CisgIGRlZmF1bHRzIHRvIGluc3RhbGxpbmcgYGBwaXBgYCBpbnRvIGFsbCBjcmVhdGVkIHZpcnR1YWwgZW52aXJvbm1lbnRzCisqIGBgdmlydHVhbGVudmBgIGlzIGEgdGhpcmQgcGFydHkgYWx0ZXJuYXRpdmUgKGFuZCBwcmVkZWNlc3NvcikgdG8KKyAgYGBweXZlbnZgYC4gSXQgYWxsb3dzIHZpcnR1YWwgZW52aXJvbm1lbnRzIHRvIGJlIHVzZWQgb24gdmVyc2lvbnMgb2YKKyAgUHl0aG9uIHByaW9yIHRvIDMuNCwgd2hpY2ggZWl0aGVyIGRvbid0IHByb3ZpZGUgYGBweXZlbnZgYCBhdCBhbGwsIG9yCisgIGFyZW4ndCBhYmxlIHRvIGF1dG9tYXRpY2FsbHkgaW5zdGFsbCBgYHBpcGBgIGludG8gY3JlYXRlZCBlbnZpcm9ubWVudHMuCisqIHRoZSBgUHl0aG9uIFBhY2thZ2luZyBJbmRleCA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT5gX18gaXMgYSBwdWJsaWMKKyAgcmVwb3NpdG9yeSBvZiBvcGVuIHNvdXJjZSBsaWNlbnNlZCBwYWNrYWdlcyBtYWRlIGF2YWlsYWJsZSBmb3IgdXNlIGJ5CisgIG90aGVyIFB5dGhvbiB1c2VycworKiB0aGUgYFB5dGhvbiBQYWNrYWdpbmcgQXV0aG9yaXR5CisgIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9mdXR1cmUuaHRtbD5gX18gYXJlIHRoZSBncm91cCBvZgorICBkZXZlbG9wZXJzIGFuZCBkb2N1bWVudGF0aW9uIGF1dGhvcnMgcmVzcG9uc2libGUgZm9yIHRoZSBtYWludGVuYW5jZSBhbmQKKyAgZXZvbHV0aW9uIG9mIHRoZSBzdGFuZGFyZCBwYWNrYWdpbmcgdG9vbHMgYW5kIHRoZSBhc3NvY2lhdGVkIG1ldGFkYXRhIGFuZAorICBmaWxlIGZvcm1hdCBzdGFuZGFyZHMuIFRoZXkgbWFpbnRhaW4gYSB2YXJpZXR5IG9mIHRvb2xzLCBkb2N1bWVudGF0aW9uCisgIGFuZCBpc3N1ZSB0cmFja2VycyBvbiBib3RoIGBHaXRIdWIgPGh0dHBzOi8vZ2l0aHViLmNvbS9weXBhPmBfXyBhbmQKKyAgYEJpdEJ1Y2tldCA8aHR0cHM6Ly9iaXRidWNrZXQub3JnL3B5cGEvPmBfXy4KKyogYGBkaXN0dXRpbHNgYCBpcyB0aGUgb3JpZ2luYWwgYnVpbGQgYW5kIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gZmlyc3QgYWRkZWQgdG8KKyAgdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IGluIDE5OTguIFdoaWxlIGRpcmVjdCB1c2Ugb2YgYGBkaXN0dXRpbHNgYCBpcworICBiZWluZyBwaGFzZWQgb3V0LCBpdCBzdGlsbCBsYWlkIHRoZSBmb3VuZGF0aW9uIGZvciB0aGUgY3VycmVudCBwYWNrYWdpbmcKKyAgYW5kIGRpc3RyaWJ1dGlvbiBpbmZyYXN0cnVjdHVyZSwgYW5kIGl0IG5vdCBvbmx5IHJlbWFpbnMgcGFydCBvZiB0aGUKKyAgc3RhbmRhcmQgbGlicmFyeSwgYnV0IGl0cyBuYW1lIGxpdmVzIG9uIGluIG90aGVyIHdheXMgKHN1Y2ggYXMgdGhlIG5hbWUKKyAgb2YgdGhlIG1haWxpbmcgbGlzdCB1c2VkIHRvIGNvb3JkaW5hdGUgUHl0aG9uIHBhY2thZ2luZyBzdGFuZGFyZHMKKyAgZGV2ZWxvcG1lbnQpLgorCisKK0Jhc2ljIHVzYWdlCis9PT09PT09PT09PQorCitUaGUgc3RhbmRhcmQgcGFja2FnaW5nIHRvb2xzIGFyZSBhbGwgZGVzaWduZWQgdG8gYmUgdXNlZCBmcm9tIHRoZSBjb21tYW5kCitsaW5lLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgd2lsbCBpbnN0YWxsIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBhIG1vZHVsZSBhbmQgaXRzCitkZXBlbmRlbmNpZXMgZnJvbSB0aGUgUHl0aG9uIFBhY2thZ2luZyBJbmRleDo6CisKKyAgICBweXRob24gLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UKKworLi4gbm90ZTo6CisKKyAgIEZvciBQT1NJWCB1c2VycyAoaW5jbHVkaW5nIE1hYyBPUyBYIGFuZCBMaW51eCB1c2VycyksIHRoZSBleGFtcGxlcyBpbgorICAgdGhpcyBndWlkZSBhc3N1bWUgdGhlIHVzZSBvZiBhIDp0ZXJtOmB2aXJ0dWFsIGVudmlyb25tZW50YC4KKworICAgRm9yIFdpbmRvd3MgdXNlcnMsIHRoZSBleGFtcGxlcyBpbiB0aGlzIGd1aWRlIGFzc3VtZSB0aGF0IHRoZSBvcHRpb24gdG8KKyAgIGFkanVzdCB0aGUgc3lzdGVtIFBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUgd2FzIHNlbGVjdGVkIHdoZW4gaW5zdGFsbGluZworICAgUHl0aG9uLgorCitJdCdzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSBhbiBleGFjdCBvciBtaW5pbXVtIHZlcnNpb24gZGlyZWN0bHkgb24gdGhlCitjb21tYW5kIGxpbmU6OgorCisgICAgcHl0aG9uIC1tIHBpcCBpbnN0YWxsIFNvbWVQYWNrYWdlPT0xLjAuNCAgICAjIHNwZWNpZmljIHZlcnNpb24KKyAgICBweXRob24gLW0gcGlwIGluc3RhbGwgJ1NvbWVQYWNrYWdlPj0xLjAuNCcgICMgbWluaW11bSB2ZXJzaW9uCisKK05vcm1hbGx5LCBpZiBhIHN1aXRhYmxlIG1vZHVsZSBpcyBhbHJlYWR5IGluc3RhbGxlZCwgYXR0ZW1wdGluZyB0byBpbnN0YWxsCitpdCBhZ2FpbiB3aWxsIGhhdmUgbm8gZWZmZWN0LiBVcGdyYWRpbmcgZXhpc3RpbmcgbW9kdWxlcyBtdXN0IGJlIHJlcXVlc3RlZAorZXhwbGljaXRseTo6CisKKyAgICBweXRob24gLW0gcGlwIGluc3RhbGwgLS11cGdyYWRlIFNvbWVQYWNrYWdlCisKK01vcmUgaW5mb3JtYXRpb24gYW5kIHJlc291cmNlcyByZWdhcmRpbmcgYGBwaXBgYCBhbmQgaXRzIGNhcGFiaWxpdGllcyBjYW4gYmUKK2ZvdW5kIGluIHRoZSBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnPmBfXy4KKworYGBweXZlbnZgYCBoYXMgaXRzIG93biBkb2N1bWVudGF0aW9uIGF0IDpyZWY6YHNjcmlwdHMtcHl2ZW52YC4gSW5zdGFsbGluZworaW50byBhbiBhY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCB1c2VzIHRoZSBjb21tYW5kcyBzaG93biBhYm92ZS4KKworLi4gc2VlYWxzbzo6CisKKyAgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBJbnN0YWxsaW5nIFB5dGhvbiBEaXN0cmlidXRpb24gUGFja2FnZXMKKyAgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvaW5zdGFsbGluZy5odG1sI2luc3RhbGxpbmctcHl0aG9uLWRpc3RyaWJ1dGlvbi1wYWNrYWdlcz5gX18KKworCitIb3cgZG8gSSAuLi4/Cis9PT09PT09PT09PT09CisKK1RoZXNlIGFyZSBxdWljayBhbnN3ZXJzIG9yIGxpbmtzIGZvciBzb21lIGNvbW1vbiB0YXNrcy4KKworLi4uIGluc3RhbGwgYGBwaXBgYCBpbiB2ZXJzaW9ucyBvZiBQeXRob24gcHJpb3IgdG8gUHl0aG9uIDMuND8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B5dGhvbiBvbmx5IHN0YXJ0ZWQgYnVuZGxpbmcgYGBwaXBgYCB3aXRoIFB5dGhvbiAzLjQuIEZvciBlYXJsaWVyIHZlcnNpb25zLAorYGBwaXBgYCBuZWVkcyB0byBiZSAiYm9vdHN0cmFwcGVkIiBhcyBkZXNjcmliZWQgaW4gdGhlIFB5dGhvbiBQYWNrYWdpbmcKK1VzZXIgR3VpZGUuCisKKy4uIHNlZWFsc286OgorCisgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBTZXR1cCBmb3IgSW5zdGFsbGluZyBEaXN0cmlidXRpb24gUGFja2FnZXMKKyAgIDxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnL2VuL2xhdGVzdC9pbnN0YWxsaW5nLmh0bWwjc2V0dXAtZm9yLWluc3RhbGxpbmctZGlzdHJpYnV0aW9uLXBhY2thZ2VzPmBfXworCisKKy4uIGluc3RhbGxpbmctcGVyLXVzZXItaW5zdGFsbGF0aW9uOgorCisuLi4gaW5zdGFsbCBwYWNrYWdlcyBqdXN0IGZvciB0aGUgY3VycmVudCB1c2VyPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFzc2luZyB0aGUgYGAtLXVzZXJgYCBvcHRpb24gdG8gYGBweXRob24gLW0gcGlwIGluc3RhbGxgYCB3aWxsIGluc3RhbGwgYQorcGFja2FnZSBqdXN0IGZvciB0aGUgY3VycmVudCB1c2VyLCByYXRoZXIgdGhhbiBmb3IgYWxsIHVzZXJzIG9mIHRoZSBzeXN0ZW0uCisKKworLi4uIGluc3RhbGwgc2NpZW50aWZpYyBQeXRob24gcGFja2FnZXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQSBudW1iZXIgb2Ygc2NpZW50aWZpYyBQeXRob24gcGFja2FnZXMgaGF2ZSBjb21wbGV4IGJpbmFyeSBkZXBlbmRlbmNpZXMsIGFuZAorYXJlbid0IGN1cnJlbnRseSBlYXN5IHRvIGluc3RhbGwgdXNpbmcgYGBwaXBgYCBkaXJlY3RseS4gQXQgdGhpcyBwb2ludCBpbgordGltZSwgaXQgd2lsbCBvZnRlbiBiZSBlYXNpZXIgZm9yIHVzZXJzIHRvIGluc3RhbGwgdGhlc2UgcGFja2FnZXMgYnkKK2BvdGhlciBtZWFucworPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NjaWVuY2UuaHRtbD5gX18KK3JhdGhlciB0aGFuIGF0dGVtcHRpbmcgdG8gaW5zdGFsbCB0aGVtIHdpdGggYGBwaXBgYC4KKworLi4gc2VlYWxzbzo6CisKKyAgIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGU6IEluc3RhbGxpbmcgU2NpZW50aWZpYyBQYWNrYWdlcworICAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L3NjaWVuY2UuaHRtbD5gX18KKworCisuLi4gd29yayB3aXRoIG11bHRpcGxlIHZlcnNpb25zIG9mIFB5dGhvbiBpbnN0YWxsZWQgaW4gcGFyYWxsZWw/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIExpbnV4LCBNYWMgT1MgWCBhbmQgb3RoZXIgUE9TSVggc3lzdGVtcywgdXNlIHRoZSB2ZXJzaW9uZWQgUHl0aG9uIGNvbW1hbmRzCitpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBgYC1tYGAgc3dpdGNoIHRvIHJ1biB0aGUgYXBwcm9wcmlhdGUgY29weSBvZgorYGBwaXBgYDo6CisKKyAgIHB5dGhvbjIgICAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBkZWZhdWx0IFB5dGhvbiAyCisgICBweXRob24yLjcgLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UgICMgc3BlY2lmaWNhbGx5IFB5dGhvbiAyLjcKKyAgIHB5dGhvbjMgICAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBkZWZhdWx0IFB5dGhvbiAzCisgICBweXRob24zLjQgLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UgICMgc3BlY2lmaWNhbGx5IFB5dGhvbiAzLjQKKworKGFwcHJvcHJpYXRlbHkgdmVyc2lvbmVkIGBgcGlwYGAgY29tbWFuZHMgbWF5IGFsc28gYmUgYXZhaWxhYmxlKQorCitPbiBXaW5kb3dzLCB1c2UgdGhlIGBgcHlgYCBQeXRob24gbGF1bmNoZXIgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgYGAtbWBgCitzd2l0Y2g6OgorCisgICBweSAtMiAgIC1tIHBpcCBpbnN0YWxsIFNvbWVQYWNrYWdlICAjIGRlZmF1bHQgUHl0aG9uIDIKKyAgIHB5IC0yLjcgLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UgICMgc3BlY2lmaWNhbGx5IFB5dGhvbiAyLjcKKyAgIHB5IC0zICAgLW0gcGlwIGluc3RhbGwgU29tZVBhY2thZ2UgICMgZGVmYXVsdCBQeXRob24gMworICAgcHkgLTMuNCAtbSBwaXAgaW5zdGFsbCBTb21lUGFja2FnZSAgIyBzcGVjaWZpY2FsbHkgUHl0aG9uIDMuNAorCisuLiBvdGhlciBxdWVzdGlvbnM6CisKKyAgIE9uY2UgdGhlIERldmVsb3BtZW50ICYgRGVwbG95bWVudCBwYXJ0IG9mIFBQVUcgaXMgZmxlc2hlZCBvdXQsIHNvbWUgb2YKKyAgIHRob3NlIHNlY3Rpb25zIHNob3VsZCBiZSBsaW5rZWQgZnJvbSBuZXcgcXVlc3Rpb25zIGhlcmUgKG1vc3Qgbm90YWJseSwKKyAgIHdlIHNob3VsZCBoYXZlIGEgcXVlc3Rpb24gYWJvdXQgYXZvaWRpbmcgZGVwZW5kaW5nIG9uIFB5UEkgdGhhdCBsaW5rcyB0bworICAgaHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvZGVwbG95bWVudC5odG1sI3B5cGktbWlycm9ycy1hbmQtY2FjaGVzKQorCisKK0NvbW1vbiBpbnN0YWxsYXRpb24gaXNzdWVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJbnN0YWxsaW5nIGludG8gdGhlIHN5c3RlbSBQeXRob24gb24gTGludXgKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitPbiBMaW51eCBzeXN0ZW1zLCBhIFB5dGhvbiBpbnN0YWxsYXRpb24gd2lsbCB0eXBpY2FsbHkgYmUgaW5jbHVkZWQgYXMgcGFydAorb2YgdGhlIGRpc3RyaWJ1dGlvbi4gSW5zdGFsbGluZyBpbnRvIHRoaXMgUHl0aG9uIGluc3RhbGxhdGlvbiByZXF1aXJlcworcm9vdCBhY2Nlc3MgdG8gdGhlIHN5c3RlbSwgYW5kIG1heSBpbnRlcmZlcmUgd2l0aCB0aGUgb3BlcmF0aW9uIG9mIHRoZQorc3lzdGVtIHBhY2thZ2UgbWFuYWdlciBhbmQgb3RoZXIgY29tcG9uZW50cyBvZiB0aGUgc3lzdGVtIGlmIGEgY29tcG9uZW50CitpcyB1bmV4cGVjdGVkbHkgdXBncmFkZWQgdXNpbmcgYGBwaXBgYC4KKworT24gc3VjaCBzeXN0ZW1zLCBpdCBpcyBvZnRlbiBiZXR0ZXIgdG8gdXNlIGEgdmlydHVhbCBlbnZpcm9ubWVudCBvciBhCitwZXItdXNlciBpbnN0YWxsYXRpb24gd2hlbiBpbnN0YWxsaW5nIHBhY2thZ2VzIHdpdGggYGBwaXBgYC4KKworCitJbnN0YWxsaW5nIGJpbmFyeSBleHRlbnNpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B5dGhvbiBoYXMgdHlwaWNhbGx5IHJlbGllZCBoZWF2aWx5IG9uIHNvdXJjZSBiYXNlZCBkaXN0cmlidXRpb24sIHdpdGggZW5kCit1c2VycyBiZWluZyBleHBlY3RlZCB0byBjb21waWxlIGV4dGVuc2lvbiBtb2R1bGVzIGZyb20gc291cmNlIGFzIHBhcnQgb2YKK3RoZSBpbnN0YWxsYXRpb24gcHJvY2Vzcy4KKworV2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mIHN1cHBvcnQgZm9yIHRoZSBiaW5hcnkgYGB3aGVlbGBgIGZvcm1hdCwgYW5kIHRoZQorYWJpbGl0eSB0byBwdWJsaXNoIHdoZWVscyBmb3IgYXQgbGVhc3QgV2luZG93cyBhbmQgTWFjIE9TIFggdGhyb3VnaCB0aGUKK1B5dGhvbiBQYWNrYWdpbmcgSW5kZXgsIHRoaXMgcHJvYmxlbSBpcyBleHBlY3RlZCB0byBkaW1pbmlzaCBvdmVyIHRpbWUsCithcyB1c2VycyBhcmUgbW9yZSByZWd1bGFybHkgYWJsZSB0byBpbnN0YWxsIHByZS1idWlsdCBleHRlbnNpb25zIHJhdGhlcgordGhhbiBuZWVkaW5nIHRvIGJ1aWxkIHRoZW0gdGhlbXNlbHZlcy4KKworU29tZSBvZiB0aGUgc29sdXRpb25zIGZvciBpbnN0YWxsaW5nIGBzY2llbnRpZmljIHNvZnR3YXJlCis8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3Qvc2NpZW5jZS5odG1sPmBfXwordGhhdCBpcyBub3QgeWV0IGF2YWlsYWJsZSBhcyBwcmUtYnVpbHQgYGB3aGVlbGBgIGZpbGVzIG1heSBhbHNvIGhlbHAgd2l0aAorb2J0YWluaW5nIG90aGVyIGJpbmFyeSBleHRlbnNpb25zIHdpdGhvdXQgbmVlZGluZyB0byBidWlsZCB0aGVtIGxvY2FsbHkuCisKKy4uIHNlZWFsc286OgorCisgICBgUHl0aG9uIFBhY2thZ2luZyBVc2VyIEd1aWRlOiBCaW5hcnkgRXh0ZW5zaW9ucworICAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmcvZW4vbGF0ZXN0L2V4dGVuc2lvbnMuaHRtbD5gX18KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5LzJ0bzMucnN0IGIvRG9jL2xpYnJhcnkvMnRvMy5yc3QKaW5kZXggMWU1ZjQyZC4uMzFmNjgxZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvMnRvMy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvMnRvMy5yc3QKQEAgLTE0Miw2ICsxNDIsMzkgQEAKICAgIFJlbW92ZXMgdXNhZ2Ugb2YgOmZ1bmM6YGFwcGx5YC4gIEZvciBleGFtcGxlIGBgYXBwbHkoZnVuY3Rpb24sICphcmdzLAogICAgKiprd2FyZ3MpYGAgaXMgY29udmVydGVkIHRvIGBgZnVuY3Rpb24oKmFyZ3MsICoqa3dhcmdzKWBgLgogCisuLiAydG8zZml4ZXI6OiBhc3NlcnRzCisKKyAgIFJlcGxhY2VzIGRlcHJlY2F0ZWQgOm1vZDpgdW5pdHRlc3RgIG1ldGhvZCBuYW1lcyB3aXRoIHRoZSBjb3JyZWN0IG9uZXMuCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUbworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgYGBmYWlsVW5sZXNzRXF1YWwoYSwgYilgYCAgICAgICAgIDptZXRoOmBhc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRFcXVhbD5gCisgICBgYGFzc2VydEVxdWFscyhhLCBiKWBgICAgICAgICAgICAgOm1ldGg6YGFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEVxdWFsPmAKKyAgIGBgZmFpbElmRXF1YWwoYSwgYilgYCAgICAgICAgICAgICA6bWV0aDpgYXNzZXJ0Tm90RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90RXF1YWw+YAorICAgYGBhc3NlcnROb3RFcXVhbHMoYSwgYilgYCAgICAgICAgIDptZXRoOmBhc3NlcnROb3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RFcXVhbD5gCisgICBgYGZhaWxVbmxlc3MoYSlgYCAgICAgICAgICAgICAgICAgOm1ldGg6YGFzc2VydFRydWUoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0VHJ1ZT5gCisgICBgYGFzc2VydF8oYSlgYCAgICAgICAgICAgICAgICAgICAgOm1ldGg6YGFzc2VydFRydWUoYSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0VHJ1ZT5gCisgICBgYGZhaWxJZihhKWBgICAgICAgICAgICAgICAgICAgICAgOm1ldGg6YGFzc2VydEZhbHNlKGEpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEZhbHNlPmAKKyAgIGBgZmFpbFVubGVzc1JhaXNlcyhleGMsIGNhbClgYCAgICA6bWV0aDpgYXNzZXJ0UmFpc2VzKGV4YywgY2FsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRSYWlzZXM+YAorICAgYGBmYWlsVW5sZXNzQWxtb3N0RXF1YWwoYSwgYilgYCAgIDptZXRoOmBhc3NlcnRBbG1vc3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRBbG1vc3RFcXVhbD5gCisgICBgYGFzc2VydEFsbW9zdEVxdWFscyhhLCBiKWBgICAgICAgOm1ldGg6YGFzc2VydEFsbW9zdEVxdWFsKGEsIGIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsPmAKKyAgIGBgZmFpbElmQWxtb3N0RXF1YWwoYSwgYilgYCAgICAgICA6bWV0aDpgYXNzZXJ0Tm90QWxtb3N0RXF1YWwoYSwgYikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dW5pdHRlc3QuVGVzdENhc2UuYXNzZXJ0Tm90QWxtb3N0RXF1YWw+YAorICAgYGBhc3NlcnROb3RBbG1vc3RFcXVhbHMoYSwgYilgYCAgIDptZXRoOmBhc3NlcnROb3RBbG1vc3RFcXVhbChhLCBiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx1bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnROb3RBbG1vc3RFcXVhbD5gCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIC4uIDJ0bzNmaXhlcjo6IGJhc2VzdHJpbmcKIAogICAgQ29udmVydHMgOmNsYXNzOmBiYXNlc3RyaW5nYCB0byA6Y2xhc3M6YHN0cmAuCkBAIC0yMzgsNyArMjcxLDcgQEAKIAogLi4gMnRvM2ZpeGVyOjogaW5wdXQKIAotICAgQ29udmVydHMgYGBpbnB1dChwcm9tcHQpYGAgdG8gYGBldmFsKGlucHV0KHByb21wdCkpYGAKKyAgIENvbnZlcnRzIGBgaW5wdXQocHJvbXB0KWBgIHRvIGBgZXZhbChpbnB1dChwcm9tcHQpKWBgLgogCiAuLiAydG8zZml4ZXI6OiBpbnRlcm4KIApAQCAtMzQyLDYgKzM3NSwxMCBAQAogCiAgICBIYW5kbGVzIHRoZSBtb3ZlIG9mIDpmdW5jOmByZWR1Y2VgIHRvIDpmdW5jOmBmdW5jdG9vbHMucmVkdWNlYC4KIAorLi4gMnRvM2ZpeGVyOjogcmVsb2FkCisKKyAgIENvbnZlcnRzIDpmdW5jOmByZWxvYWRgIHRvIDpmdW5jOmBpbXAucmVsb2FkYC4KKwogLi4gMnRvM2ZpeGVyOjogcmVuYW1lcwogCiAgICBDaGFuZ2VzIDpkYXRhOmBzeXMubWF4aW50YCB0byA6ZGF0YTpgc3lzLm1heHNpemVgLgpAQCAtMzU1LDcgKzM5Miw3IEBACiAgICBSZXBsYWNlcyB1c2Ugb2YgdGhlIDpjbGFzczpgc2V0YCBjb25zdHJ1Y3RvciB3aXRoIHNldCBsaXRlcmFscy4gIFRoaXMgZml4ZXIKICAgIGlzIG9wdGlvbmFsLgogCi0uLiAydG8zZml4ZXI6OiBzdGFuZGFyZF9lcnJvcgorLi4gMnRvM2ZpeGVyOjogc3RhbmRhcmRlcnJvcgogCiAgICBSZW5hbWVzIDpleGM6YFN0YW5kYXJkRXJyb3JgIHRvIDpleGM6YEV4Y2VwdGlvbmAuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L19fbWFpbl9fLnJzdCBiL0RvYy9saWJyYXJ5L19fbWFpbl9fLnJzdAppbmRleCBhMWQzYzI0Li5hNDY5OTNkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9fX21haW5fXy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvX19tYWluX18ucnN0CkBAIC01LDEzICs1LDE5IEBACiAuLiBtb2R1bGU6OiBfX21haW5fXwogICAgOnN5bm9wc2lzOiBUaGUgZW52aXJvbm1lbnQgd2hlcmUgdGhlIHRvcC1sZXZlbCBzY3JpcHQgaXMgcnVuLgogCitgYCdfX21haW5fXydgYCBpcyB0aGUgbmFtZSBvZiB0aGUgc2NvcGUgaW4gd2hpY2ggdG9wLWxldmVsIGNvZGUgZXhlY3V0ZXMuCitBIG1vZHVsZSdzIF9fbmFtZV9fIGlzIHNldCBlcXVhbCB0byBgYCdfX21haW5fXydgYCB3aGVuIHJlYWQgZnJvbQorc3RhbmRhcmQgaW5wdXQsIGEgc2NyaXB0LCBvciBmcm9tIGFuIGludGVyYWN0aXZlIHByb21wdC4KIAotVGhpcyBtb2R1bGUgcmVwcmVzZW50cyB0aGUgKG90aGVyd2lzZSBhbm9ueW1vdXMpIHNjb3BlIGluIHdoaWNoIHRoZQotaW50ZXJwcmV0ZXIncyBtYWluIHByb2dyYW0gZXhlY3V0ZXMgLS0tIGNvbW1hbmRzIHJlYWQgZWl0aGVyIGZyb20gc3RhbmRhcmQKLWlucHV0LCBmcm9tIGEgc2NyaXB0IGZpbGUsIG9yIGZyb20gYW4gaW50ZXJhY3RpdmUgcHJvbXB0LiAgSXQgaXMgdGhpcwotZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGlkaW9tYXRpYyAiY29uZGl0aW9uYWwgc2NyaXB0IiBzdGFuemEgY2F1c2VzIGEgc2NyaXB0Ci10byBydW46OgorQSBtb2R1bGUgY2FuIGRpc2NvdmVyIHdoZXRoZXIgb3Igbm90IGl0IGlzIHJ1bm5pbmcgaW4gdGhlIG1haW4gc2NvcGUgYnkKK2NoZWNraW5nIGl0cyBvd24gYGBfX25hbWVfX2BgLCB3aGljaCBhbGxvd3MgYSBjb21tb24gaWRpb20gZm9yIGNvbmRpdGlvbmFsbHkKK2V4ZWN1dGluZyBjb2RlIGluIGEgbW9kdWxlIHdoZW4gaXQgaXMgcnVuIGFzIGEgc2NyaXB0IG9yIHdpdGggYGBweXRob24KKy1tYGAgYnV0IG5vdCB3aGVuIGl0IGlzIGltcG9ydGVkOjoKIAogICAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICAgICAjIGV4ZWN1dGUgb25seSBpZiBydW4gYXMgYSBzY3JpcHQKICAgICAgICBtYWluKCkKIAorRm9yIGEgcGFja2FnZSwgdGhlIHNhbWUgZWZmZWN0IGNhbiBiZSBhY2hpZXZlZCBieSBpbmNsdWRpbmcgYQorYGBfX21haW5fXy5weWBgIG1vZHVsZSwgdGhlIGNvbnRlbnRzIG9mIHdoaWNoIHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUKK21vZHVsZSBpcyBydW4gd2l0aCBgYC1tYGAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9fdGhyZWFkLnJzdCBiL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CmluZGV4IDJlMTMwYzEuLjcxMjI4NjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L190aHJlYWQucnN0CkBAIC05Myw3ICs5Myw4IEBACiAgICBSZXR1cm4gdGhlIHRocmVhZCBzdGFjayBzaXplIHVzZWQgd2hlbiBjcmVhdGluZyBuZXcgdGhyZWFkcy4gIFRoZSBvcHRpb25hbAogICAgKnNpemUqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgc3RhY2sgc2l6ZSB0byBiZSB1c2VkIGZvciBzdWJzZXF1ZW50bHkgY3JlYXRlZAogICAgdGhyZWFkcywgYW5kIG11c3QgYmUgMCAodXNlIHBsYXRmb3JtIG9yIGNvbmZpZ3VyZWQgZGVmYXVsdCkgb3IgYSBwb3NpdGl2ZQotICAgaW50ZWdlciB2YWx1ZSBvZiBhdCBsZWFzdCAzMiw3NjggKDMyIEtpQikuIElmIGNoYW5naW5nIHRoZSB0aHJlYWQgc3RhY2sgc2l6ZSBpcworICAgaW50ZWdlciB2YWx1ZSBvZiBhdCBsZWFzdCAzMiw3NjggKDMyIEtpQikuIElmICpzaXplKiBpcyBub3Qgc3BlY2lmaWVkLAorICAgMCBpcyB1c2VkLiAgSWYgY2hhbmdpbmcgdGhlIHRocmVhZCBzdGFjayBzaXplIGlzCiAgICB1bnN1cHBvcnRlZCwgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4gIElmIHRoZSBzcGVjaWZpZWQgc3RhY2sgc2l6ZSBpcwogICAgaW52YWxpZCwgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgYW5kIHRoZSBzdGFjayBzaXplIGlzIHVubW9kaWZpZWQuICAzMiBLaUIKICAgIGlzIGN1cnJlbnRseSB0aGUgbWluaW11bSBzdXBwb3J0ZWQgc3RhY2sgc2l6ZSB2YWx1ZSB0byBndWFyYW50ZWUgc3VmZmljaWVudApAQCAtMTc2LDEwICsxNzcsNiBAQAogKiBDYWxsaW5nIDpmdW5jOmBzeXMuZXhpdGAgb3IgcmFpc2luZyB0aGUgOmV4YzpgU3lzdGVtRXhpdGAgZXhjZXB0aW9uIGlzCiAgIGVxdWl2YWxlbnQgdG8gY2FsbGluZyA6ZnVuYzpgX3RocmVhZC5leGl0YC4KIAotKiBOb3QgYWxsIGJ1aWx0LWluIGZ1bmN0aW9ucyB0aGF0IG1heSBibG9jayB3YWl0aW5nIGZvciBJL08gYWxsb3cgb3RoZXIgdGhyZWFkcwotICB0byBydW4uICAoVGhlIG1vc3QgcG9wdWxhciBvbmVzICg6ZnVuYzpgdGltZS5zbGVlcGAsIDptZXRoOmBpby5GaWxlSU8ucmVhZGAsCi0gIDpmdW5jOmBzZWxlY3Quc2VsZWN0YCkgd29yayBhcyBleHBlY3RlZC4pCi0KICogSXQgaXMgbm90IHBvc3NpYmxlIHRvIGludGVycnVwdCB0aGUgOm1ldGg6YGFjcXVpcmVgIG1ldGhvZCBvbiBhIGxvY2sgLS0tIHRoZQogICA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgZXhjZXB0aW9uIHdpbGwgaGFwcGVuIGFmdGVyIHRoZSBsb2NrIGhhcyBiZWVuIGFjcXVpcmVkLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hYmMucnN0IGIvRG9jL2xpYnJhcnkvYWJjLnJzdAppbmRleCA5Mjk5MTI0Li43YTczNzA0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hYmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FiYy5yc3QKQEAgLTEyLDkgKzEyLDkgQEAKIC0tLS0tLS0tLS0tLS0tCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBpbmZyYXN0cnVjdHVyZSBmb3IgZGVmaW5pbmcgOnRlcm06YGFic3RyYWN0IGJhc2UKLWNsYXNzZXMgPGFic3RyYWN0IGJhc2UgY2xhc3M+YCAoQUJDcykgaW4gUHl0aG9uLCBhcyBvdXRsaW5lZCBpbiA6cGVwOmAzMTE5YDsgc2VlIHRoZSBQRVAgZm9yIHdoeSB0aGlzCi13YXMgYWRkZWQgdG8gUHl0aG9uLiAoU2VlIGFsc28gOnBlcDpgMzE0MWAgYW5kIHRoZSA6bW9kOmBudW1iZXJzYCBtb2R1bGUKLXJlZ2FyZGluZyBhIHR5cGUgaGllcmFyY2h5IGZvciBudW1iZXJzIGJhc2VkIG9uIEFCQ3MuKQorY2xhc3NlcyA8YWJzdHJhY3QgYmFzZSBjbGFzcz5gIChBQkNzKSBpbiBQeXRob24sIGFzIG91dGxpbmVkIGluIDpwZXA6YDMxMTlgOworc2VlIHRoZSBQRVAgZm9yIHdoeSB0aGlzIHdhcyBhZGRlZCB0byBQeXRob24uIChTZWUgYWxzbyA6cGVwOmAzMTQxYCBhbmQgdGhlCis6bW9kOmBudW1iZXJzYCBtb2R1bGUgcmVnYXJkaW5nIGEgdHlwZSBoaWVyYXJjaHkgZm9yIG51bWJlcnMgYmFzZWQgb24gQUJDcy4pCiAKIFRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlIGhhcyBzb21lIGNvbmNyZXRlIGNsYXNzZXMgdGhhdCBkZXJpdmUgZnJvbQogQUJDczsgdGhlc2UgY2FuLCBvZiBjb3Vyc2UsIGJlIGZ1cnRoZXIgZGVyaXZlZC4gSW4gYWRkaXRpb24gdGhlCkBAIC0yMyw3ICsyMyw3IEBACiBoYXNoYWJsZSBvciBhIG1hcHBpbmcuCiAKIAotVGhpcyBtb2R1bGUgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBjbGFzczoKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKIAogLi4gY2xhc3M6OiBBQkNNZXRhCiAKQEAgLTU4LDYgKzU4LDEwIEBACiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgICAgUmV0dXJucyB0aGUgcmVnaXN0ZXJlZCBzdWJjbGFzcywgdG8gYWxsb3cgdXNhZ2UgYXMgYSBjbGFzcyBkZWNvcmF0b3IuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBUbyBkZXRlY3QgY2FsbHMgdG8gOm1ldGg6YHJlZ2lzdGVyYCwgeW91IGNhbiB1c2UgdGhlCisgICAgICAgICA6ZnVuYzpgZ2V0X2NhY2hlX3Rva2VuYCBmdW5jdGlvbi4KKwogICAgWW91IGNhbiBhbHNvIG92ZXJyaWRlIHRoaXMgbWV0aG9kIGluIGFuIGFic3RyYWN0IGJhc2UgY2xhc3M6CiAKICAgIC4uIG1ldGhvZDo6IF9fc3ViY2xhc3Nob29rX18oc3ViY2xhc3MpCkBAIC0xMjcsNiArMTMxLDE5IEBACiAgICBhdmFpbGFibGUgYXMgYSBtZXRob2Qgb2YgYGBGb29gYCwgc28gaXQgaXMgcHJvdmlkZWQgc2VwYXJhdGVseS4KIAogCisuLiBjbGFzczo6IEFCQworCisgICBBIGhlbHBlciBjbGFzcyB0aGF0IGhhcyA6Y2xhc3M6YEFCQ01ldGFgIGFzIGl0cyBtZXRhY2xhc3MuICBXaXRoIHRoaXMgY2xhc3MsCisgICBhbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGNhbiBiZSBjcmVhdGVkIGJ5IHNpbXBseSBkZXJpdmluZyBmcm9tIDpjbGFzczpgQUJDYCwKKyAgIGF2b2lkaW5nIHNvbWV0aW1lcyBjb25mdXNpbmcgbWV0YWNsYXNzIHVzYWdlLgorCisgICBOb3RlIHRoYXQgdGhlIHR5cGUgb2YgOmNsYXNzOmBBQkNgIGlzIHN0aWxsIDpjbGFzczpgQUJDTWV0YWAsIHRoZXJlZm9yZQorICAgaW5oZXJpdGluZyBmcm9tIDpjbGFzczpgQUJDYCByZXF1aXJlcyB0aGUgdXN1YWwgcHJlY2F1dGlvbnMgcmVnYXJkaW5nIG1ldGFjbGFzcworICAgdXNhZ2UsIGFzIG11bHRpcGxlIGluaGVyaXRhbmNlIG1heSBsZWFkIHRvIG1ldGFjbGFzcyBjb25mbGljdHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIFRoZSA6bW9kOmBhYmNgIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZGVjb3JhdG9yczoKIAogLi4gZGVjb3JhdG9yOjogYWJzdHJhY3RtZXRob2QKQEAgLTI5NSw2ICszMTIsMTkgQEAKICAgICAgICA6ZnVuYzpgYWJzdHJhY3RtZXRob2RgLCBtYWtpbmcgdGhpcyBkZWNvcmF0b3IgcmVkdW5kYW50LgogCiAKK1RoZSA6bW9kOmBhYmNgIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgorCisuLiBmdW5jdGlvbjo6IGdldF9jYWNoZV90b2tlbigpCisKKyAgIFJldHVybnMgdGhlIGN1cnJlbnQgYWJzdHJhY3QgYmFzZSBjbGFzcyBjYWNoZSB0b2tlbi4KKworICAgVGhlIHRva2VuIGlzIGFuIG9wYXF1ZSBvYmplY3QgKHRoYXQgc3VwcG9ydHMgZXF1YWxpdHkgdGVzdGluZykgaWRlbnRpZnlpbmcKKyAgIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgY2FjaGUgZm9yIHZpcnR1YWwgc3ViY2xhc3Nlcy4KKyAgIFRoZSB0b2tlbiBjaGFuZ2VzIHdpdGggZXZlcnkgY2FsbCB0byA6bWV0aDpgQUJDTWV0YS5yZWdpc3RlcmAgb24gYW55IEFCQy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKIC4uIFsjXSBDKysgcHJvZ3JhbW1lcnMgc2hvdWxkIG5vdGUgdGhhdCBQeXRob24ncyB2aXJ0dWFsIGJhc2UgY2xhc3MKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FpZmMucnN0IGIvRG9jL2xpYnJhcnkvYWlmYy5yc3QKaW5kZXggOGEzNTQxYi4uNmZiY2YyOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYWlmYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWlmYy5yc3QKQEAgLTMwLDggKzMwLDggQEAKIHNhbXBsZWQuICBUaGUgbnVtYmVyIG9mIGNoYW5uZWxzIGluZGljYXRlIGlmIHRoZSBhdWRpbyBpcyBtb25vLCBzdGVyZW8sIG9yCiBxdWFkcm8uICBFYWNoIGZyYW1lIGNvbnNpc3RzIG9mIG9uZSBzYW1wbGUgcGVyIGNoYW5uZWwuICBUaGUgc2FtcGxlIHNpemUgaXMgdGhlCiBzaXplIGluIGJ5dGVzIG9mIGVhY2ggc2FtcGxlLiAgVGh1cyBhIGZyYW1lIGNvbnNpc3RzIG9mCi0qbmNoYW5uZWxzKlwqXCAqc2FtcGxlc2l6ZSogYnl0ZXMsIGFuZCBhIHNlY29uZCdzIHdvcnRoIG9mIGF1ZGlvIGNvbnNpc3RzIG9mCi0qbmNoYW5uZWxzKlwqXCAqc2FtcGxlc2l6ZSpcKlwgKmZyYW1lcmF0ZSogYnl0ZXMuCitgYG5jaGFubmVscyAqIHNhbXBsZXNpemVgYCBieXRlcywgYW5kIGEgc2Vjb25kJ3Mgd29ydGggb2YgYXVkaW8gY29uc2lzdHMgb2YKK2BgbmNoYW5uZWxzICogc2FtcGxlc2l6ZSAqIGZyYW1lcmF0ZWBgIGJ5dGVzLgogCiBGb3IgZXhhbXBsZSwgQ0QgcXVhbGl0eSBhdWRpbyBoYXMgYSBzYW1wbGUgc2l6ZSBvZiB0d28gYnl0ZXMgKDE2IGJpdHMpLCB1c2VzIHR3bwogY2hhbm5lbHMgKHN0ZXJlbykgYW5kIGhhcyBhIGZyYW1lIHJhdGUgb2YgNDQsMTAwIGZyYW1lcy9zZWNvbmQuICBUaGlzIGdpdmVzIGEKQEAgLTUxLDYgKzUxLDExIEBACiAgICB1c2VkIGZvciB3cml0aW5nLCB0aGUgZmlsZSBvYmplY3Qgc2hvdWxkIGJlIHNlZWthYmxlLCB1bmxlc3MgeW91IGtub3cgYWhlYWQgb2YKICAgIHRpbWUgaG93IG1hbnkgc2FtcGxlcyB5b3UgYXJlIGdvaW5nIHRvIHdyaXRlIGluIHRvdGFsIGFuZCB1c2UKICAgIDptZXRoOmB3cml0ZWZyYW1lc3Jhd2AgYW5kIDptZXRoOmBzZXRuZnJhbWVzYC4KKyAgIFRoZSA6ZnVuYzpgLm9wZW5gIGZ1bmN0aW9uIG1heSBiZSB1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudC4gIFdoZW4KKyAgIHRoZSA6a2V5d29yZDpgd2l0aGAgYmxvY2sgY29tcGxldGVzLCB0aGUgOm1ldGg6YH5haWZjLmNsb3NlYCBtZXRob2QgaXMgY2FsbGVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgogCiBPYmplY3RzIHJldHVybmVkIGJ5IDpmdW5jOmAub3BlbmAgd2hlbiBhIGZpbGUgaXMgb3BlbmVkIGZvciByZWFkaW5nIGhhdmUgdGhlCiBmb2xsb3dpbmcgbWV0aG9kczoKQEAgLTkyLDcgKzk3LDkgQEAKIAogLi4gbWV0aG9kOjogYWlmYy5nZXRwYXJhbXMoKQogCi0gICBSZXR1cm4gYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUgYWJvdmUgdmFsdWVzIGluIHRoZSBhYm92ZSBvcmRlci4KKyAgIFJldHVybnMgYSA6ZnVuYzpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLAorICAgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZQorICAgOm1ldGg6YGdldFwqYCBtZXRob2RzLgogCiAKIC4uIG1ldGhvZDo6IGFpZmMuZ2V0bWFya2VycygpCkBAIC0yMTgsMTIgKzIyNSwxOCBAQAogICAgV3JpdGUgZGF0YSB0byB0aGUgb3V0cHV0IGZpbGUuICBUaGlzIG1ldGhvZCBjYW4gb25seSBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGF1ZGlvCiAgICBmaWxlIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHNldC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBhaWZjLndyaXRlZnJhbWVzcmF3KGRhdGEpCiAKICAgIExpa2UgOm1ldGg6YHdyaXRlZnJhbWVzYCwgZXhjZXB0IHRoYXQgdGhlIGhlYWRlciBvZiB0aGUgYXVkaW8gZmlsZSBpcyBub3QKICAgIHVwZGF0ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCisKIAogLi4gbWV0aG9kOjogYWlmYy5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FsbG9zLnJzdCBiL0RvYy9saWJyYXJ5L2FsbG9zLnJzdAppbmRleCBiZjkxNzE3Li5mNzEwNWQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9hbGxvcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYWxsb3MucnN0CkBAIC0xNiw3ICsxNiw2IEBACiAgICBpby5yc3QKICAgIHRpbWUucnN0CiAgICBhcmdwYXJzZS5yc3QKLSAgIG9wdHBhcnNlLnJzdAogICAgZ2V0b3B0LnJzdAogICAgbG9nZ2luZy5yc3QKICAgIGxvZ2dpbmcuY29uZmlnLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0IGIvRG9jL2xpYnJhcnkvYXJncGFyc2UucnN0CmluZGV4IGRjOWMyN2YuLmQ5MDcyMDMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FyZ3BhcnNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9hcmdwYXJzZS5yc3QKQEAgLTk2OCw5ICs5NjgsOSBAQAogYGB0eXBlYGAgYXJndW1lbnQgaXMgYXBwbGllZCB0byBkZWZhdWx0IGFyZ3VtZW50cy4KIAogVG8gZWFzZSB0aGUgdXNlIG9mIHZhcmlvdXMgdHlwZXMgb2YgZmlsZXMsIHRoZSBhcmdwYXJzZSBtb2R1bGUgcHJvdmlkZXMgdGhlCi1mYWN0b3J5IEZpbGVUeXBlIHdoaWNoIHRha2VzIHRoZSBgYG1vZGU9YGAgYW5kIGBgYnVmc2l6ZT1gYCBhcmd1bWVudHMgb2YgdGhlCi06ZnVuYzpgb3BlbmAgZnVuY3Rpb24uICBGb3IgZXhhbXBsZSwgYGBGaWxlVHlwZSgndycpYGAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEKLXdyaXRhYmxlIGZpbGU6OgorZmFjdG9yeSBGaWxlVHlwZSB3aGljaCB0YWtlcyB0aGUgYGBtb2RlPWBgLCBgYGJ1ZnNpemU9YGAsIGBgZW5jb2Rpbmc9YGAgYW5kCitgYGVycm9ycz1gYCBhcmd1bWVudHMgb2YgdGhlIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4gIEZvciBleGFtcGxlLAorYGBGaWxlVHlwZSgndycpYGAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgd3JpdGFibGUgZmlsZTo6CiAKICAgID4+PiBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnYmFyJywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycpKQpAQCAtMTIzNSwxNiArMTIzNSwxNiBAQAogQWN0aW9uIGNsYXNzZXMgaW1wbGVtZW50IHRoZSBBY3Rpb24gQVBJLCBhIGNhbGxhYmxlIHdoaWNoIHJldHVybnMgYSBjYWxsYWJsZQogd2hpY2ggcHJvY2Vzc2VzIGFyZ3VtZW50cyBmcm9tIHRoZSBjb21tYW5kLWxpbmUuIEFueSBvYmplY3Qgd2hpY2ggZm9sbG93cwogdGhpcyBBUEkgbWF5IGJlIHBhc3NlZCBhcyB0aGUgYGBhY3Rpb25gYCBwYXJhbWV0ZXIgdG8KLTptZXRob2Q6YGFkZF9hcmd1bWVudGAuCis6bWV0aDpgYWRkX2FyZ3VtZW50YC4KIAotLi4gY2xhc3M6OiBBY3Rpb24ob3B0aW9uX3N0cmluZ3MsIGRlc3QsIG5hcmdzPU5vbmUsIGNvbnN0PU5vbmUsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgIHR5cGU9Tm9uZSwgY2hvaWNlcz1Ob25lLCByZXF1aXJlZD1GYWxzZSwgaGVscD1Ob25lLAorLi4gY2xhc3M6OiBBY3Rpb24ob3B0aW9uX3N0cmluZ3MsIGRlc3QsIG5hcmdzPU5vbmUsIGNvbnN0PU5vbmUsIGRlZmF1bHQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgdHlwZT1Ob25lLCBjaG9pY2VzPU5vbmUsIHJlcXVpcmVkPUZhbHNlLCBoZWxwPU5vbmUsIFwKICAgICAgICAgICAgICAgICAgIG1ldGF2YXI9Tm9uZSkKIAogQWN0aW9uIG9iamVjdHMgYXJlIHVzZWQgYnkgYW4gQXJndW1lbnRQYXJzZXIgdG8gcmVwcmVzZW50IHRoZSBpbmZvcm1hdGlvbgogbmVlZGVkIHRvIHBhcnNlIGEgc2luZ2xlIGFyZ3VtZW50IGZyb20gb25lIG9yIG1vcmUgc3RyaW5ncyBmcm9tIHRoZQogY29tbWFuZCBsaW5lLiBUaGUgQWN0aW9uIGNsYXNzIG11c3QgYWNjZXB0IHRoZSB0d28gcG9zaXRpb25hbCBhcmd1bWVudHMKLXBsdXMgYW55IGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCB0byA6bWV0aG9kOmBBcmd1bWVudFBhcnNlci5hZGRfYXJndW1lbnRgCitwbHVzIGFueSBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgdG8gOm1ldGg6YEFyZ3VtZW50UGFyc2VyLmFkZF9hcmd1bWVudGAKIGV4Y2VwdCBmb3IgdGhlIGBgYWN0aW9uYGAgaXRzZWxmLgogCiBJbnN0YW5jZXMgb2YgQWN0aW9uIChvciByZXR1cm4gdmFsdWUgb2YgYW55IGNhbGxhYmxlIHRvIHRoZSBgYGFjdGlvbmBgCkBAIC0xNTIxLDEyICsxNTIxLDE1IEBACiAgICAqIHBhcnNlcl9jbGFzcyAtIGNsYXNzIHdoaWNoIHdpbGwgYmUgdXNlZCB0byBjcmVhdGUgc3ViLXBhcnNlciBpbnN0YW5jZXMsIGJ5CiAgICAgIGRlZmF1bHQgdGhlIGNsYXNzIG9mIHRoZSBjdXJyZW50IHBhcnNlciAoZS5nLiBBcmd1bWVudFBhcnNlcikKIAotICAgKiBkZXN0IC0gbmFtZSBvZiB0aGUgYXR0cmlidXRlIHVuZGVyIHdoaWNoIHN1Yi1jb21tYW5kIG5hbWUgd2lsbCBiZQorICAgKiBhY3Rpb25fIC0gdGhlIGJhc2ljIHR5cGUgb2YgYWN0aW9uIHRvIGJlIHRha2VuIHdoZW4gdGhpcyBhcmd1bWVudCBpcworICAgICBlbmNvdW50ZXJlZCBhdCB0aGUgY29tbWFuZCBsaW5lCisKKyAgICogZGVzdF8gLSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdW5kZXIgd2hpY2ggc3ViLWNvbW1hbmQgbmFtZSB3aWxsIGJlCiAgICAgIHN0b3JlZDsgYnkgZGVmYXVsdCBOb25lIGFuZCBubyB2YWx1ZSBpcyBzdG9yZWQKIAotICAgKiBoZWxwIC0gaGVscCBmb3Igc3ViLXBhcnNlciBncm91cCBpbiBoZWxwIG91dHB1dCwgYnkgZGVmYXVsdCBOb25lCisgICAqIGhlbHBfIC0gaGVscCBmb3Igc3ViLXBhcnNlciBncm91cCBpbiBoZWxwIG91dHB1dCwgYnkgZGVmYXVsdCBOb25lCiAKLSAgICogbWV0YXZhciAtIHN0cmluZyBwcmVzZW50aW5nIGF2YWlsYWJsZSBzdWItY29tbWFuZHMgaW4gaGVscDsgYnkgZGVmYXVsdCBpdAorICAgKiBtZXRhdmFyXyAtIHN0cmluZyBwcmVzZW50aW5nIGF2YWlsYWJsZSBzdWItY29tbWFuZHMgaW4gaGVscDsgYnkgZGVmYXVsdCBpdAogICAgICBpcyBOb25lIGFuZCBwcmVzZW50cyBzdWItY29tbWFuZHMgaW4gZm9ybSB7Y21kMSwgY21kMiwgLi59CiAKICAgIFNvbWUgZXhhbXBsZSB1c2FnZTo6CkBAIC0xNjgyLDE3ICsxNjg1LDE5IEBACiBGaWxlVHlwZSBvYmplY3RzCiBeXl5eXl5eXl5eXl5eXl5eCiAKLS4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9Tm9uZSkKKy4uIGNsYXNzOjogRmlsZVR5cGUobW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKQogCiAgICBUaGUgOmNsYXNzOmBGaWxlVHlwZWAgZmFjdG9yeSBjcmVhdGVzIG9iamVjdHMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIHRoZSB0eXBlCiAgICBhcmd1bWVudCBvZiA6bWV0aDpgQXJndW1lbnRQYXJzZXIuYWRkX2FyZ3VtZW50YC4gIEFyZ3VtZW50cyB0aGF0IGhhdmUKLSAgIDpjbGFzczpgRmlsZVR5cGVgIG9iamVjdHMgYXMgdGhlaXIgdHlwZSB3aWxsIG9wZW4gY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcyBmaWxlcwotICAgd2l0aCB0aGUgcmVxdWVzdGVkIG1vZGVzIGFuZCBidWZmZXIgc2l6ZXM6OgorICAgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhcyB0aGVpciB0eXBlIHdpbGwgb3BlbiBjb21tYW5kLWxpbmUgYXJndW1lbnRzIGFzCisgICBmaWxlcyB3aXRoIHRoZSByZXF1ZXN0ZWQgbW9kZXMsIGJ1ZmZlciBzaXplcywgZW5jb2RpbmdzIGFuZCBlcnJvciBoYW5kbGluZworICAgKHNlZSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uIGZvciBtb3JlIGRldGFpbHMpOjoKIAogICAgICAgPj4+IHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKLSAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW91dHB1dCcsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCi0gICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctLW91dHB1dCcsICdvdXQnXSkKLSAgICAgIE5hbWVzcGFjZShvdXRwdXQ9PF9pby5CdWZmZXJlZFdyaXRlciBuYW1lPSdvdXQnPikKKyAgICAgID4+PiBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXJhdycsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoJ3diJywgMCkpCisgICAgICA+Pj4gcGFyc2VyLmFkZF9hcmd1bWVudCgnb3V0JywgdHlwZT1hcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdVVEYtOCcpKQorICAgICAgPj4+IHBhcnNlci5wYXJzZV9hcmdzKFsnLS1yYXcnLCAncmF3LmRhdCcsICdmaWxlLnR4dCddKQorICAgICAgTmFtZXNwYWNlKG91dD08X2lvLlRleHRJT1dyYXBwZXIgbmFtZT0nZmlsZS50eHQnIG1vZGU9J3cnIGVuY29kaW5nPSdVVEYtOCc+LCByYXc9PF9pby5GaWxlSU8gbmFtZT0ncmF3LmRhdCcgbW9kZT0nd2InPikKIAogICAgRmlsZVR5cGUgb2JqZWN0cyB1bmRlcnN0YW5kIHRoZSBwc2V1ZG8tYXJndW1lbnQgYGAnLSdgYCBhbmQgYXV0b21hdGljYWxseQogICAgY29udmVydCB0aGlzIGludG8gYGBzeXMuc3RkaW5gYCBmb3IgcmVhZGFibGUgOmNsYXNzOmBGaWxlVHlwZWAgb2JqZWN0cyBhbmQKQEAgLTE3MDMsNiArMTcwOCw5IEBACiAgICAgICA+Pj4gcGFyc2VyLnBhcnNlX2FyZ3MoWyctJ10pCiAgICAgICBOYW1lc3BhY2UoaW5maWxlPTxfaW8uVGV4dElPV3JhcHBlciBuYW1lPSc8c3RkaW4+JyBlbmNvZGluZz0nVVRGLTgnPikKIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKmVuY29kaW5ncyogYW5kICplcnJvcnMqIGtleXdvcmQgYXJndW1lbnRzLgorCiAKIEFyZ3VtZW50IGdyb3VwcwogXl5eXl5eXl5eXl5eXl5eCkBAIC0xOTAyLDcgKzE5MTAsNyBAQAogCiAgICBBcmd1bWVudHMgdGhhdCBhcmUgcmVhZCBmcm9tIGEgZmlsZSAoc2VlIHRoZSAqZnJvbWZpbGVfcHJlZml4X2NoYXJzKgogICAga2V5d29yZCBhcmd1bWVudCB0byB0aGUgOmNsYXNzOmBBcmd1bWVudFBhcnNlcmAgY29uc3RydWN0b3IpIGFyZSByZWFkIG9uZQotICAgYXJndW1lbnQgcGVyIGxpbmUuIDptZXRoOmBjb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3NgIGNhbiBiZSBvdmVycmlkZW4gZm9yCisgICBhcmd1bWVudCBwZXIgbGluZS4gOm1ldGg6YGNvbnZlcnRfYXJnX2xpbmVfdG9fYXJnc2AgY2FuIGJlIG92ZXJyaWRkZW4gZm9yCiAgICBmYW5jaWVyIHJlYWRpbmcuCiAKICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50ICphcmdfbGluZSogd2hpY2ggaXMgYSBzdHJpbmcgcmVhZCBmcm9tCkBAIC0xOTEzLDEwICsxOTIxLDcgQEAKICAgIGFzIGFuIGFyZ3VtZW50OjoKIAogICAgIGRlZiBjb252ZXJ0X2FyZ19saW5lX3RvX2FyZ3Moc2VsZiwgYXJnX2xpbmUpOgotICAgICAgICBmb3IgYXJnIGluIGFyZ19saW5lLnNwbGl0KCk6Ci0gICAgICAgICAgICBpZiBub3QgYXJnLnN0cmlwKCk6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIHlpZWxkIGFyZworICAgICAgICByZXR1cm4gYXJnX2xpbmUuc3BsaXQoKQogCiAKIEV4aXRpbmcgbWV0aG9kcwpAQCAtMTk0NCw2ICsxOTQ5LDE2IEBACiA6bW9kOmBvcHRwYXJzZWAgaGFkIGVpdGhlciBiZWVuIGNvcHktcGFzdGVkIG92ZXIgb3IgbW9ua2V5LXBhdGNoZWQsIGl0IG5vCiBsb25nZXIgc2VlbWVkIHByYWN0aWNhbCB0byB0cnkgdG8gbWFpbnRhaW4gdGhlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgogCitUaGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZSBpbXByb3ZlcyBvbiB0aGUgc3RhbmRhcmQgbGlicmFyeSA6bW9kOmBvcHRwYXJzZWAKK21vZHVsZSBpbiBhIG51bWJlciBvZiB3YXlzIGluY2x1ZGluZzoKKworKiBIYW5kbGluZyBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKyogU3VwcG9ydGluZyBzdWItY29tbWFuZHMuCisqIEFsbG93aW5nIGFsdGVybmF0aXZlIG9wdGlvbiBwcmVmaXhlcyBsaWtlIGBgK2BgIGFuZCBgYC9gYC4KKyogSGFuZGxpbmcgemVyby1vci1tb3JlIGFuZCBvbmUtb3ItbW9yZSBzdHlsZSBhcmd1bWVudHMuCisqIFByb2R1Y2luZyBtb3JlIGluZm9ybWF0aXZlIHVzYWdlIG1lc3NhZ2VzLgorKiBQcm92aWRpbmcgYSBtdWNoIHNpbXBsZXIgaW50ZXJmYWNlIGZvciBjdXN0b20gYGB0eXBlYGAgYW5kIGBgYWN0aW9uYGAuCisKIEEgcGFydGlhbCB1cGdyYWRlIHBhdGggZnJvbSA6bW9kOmBvcHRwYXJzZWAgdG8gOm1vZDpgYXJncGFyc2VgOgogCiAqIFJlcGxhY2UgYWxsIDptZXRoOmBvcHRwYXJzZS5PcHRpb25QYXJzZXIuYWRkX29wdGlvbmAgY2FsbHMgd2l0aApAQCAtMTk2OSw0ICsxOTg0LDQgQEAKICAgYGAlKGRlZmF1bHQpc2BgIGFuZCBgYCUocHJvZylzYGAuCiAKICogUmVwbGFjZSB0aGUgT3B0aW9uUGFyc2VyIGNvbnN0cnVjdG9yIGBgdmVyc2lvbmBgIGFyZ3VtZW50IHdpdGggYSBjYWxsIHRvCi0gIGBgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nPHRoZSB2ZXJzaW9uPicpYGAKKyAgYGBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXZlcnNpb24nLCBhY3Rpb249J3ZlcnNpb24nLCB2ZXJzaW9uPSc8dGhlIHZlcnNpb24+JylgYC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzdC5yc3QgYi9Eb2MvbGlicmFyeS9hc3QucnN0CmluZGV4IGRhZjI4ZGUuLjhjM2I3ZTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2FzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXN0LnJzdApAQCAtMTA0LDcgKzEwNCw3IEBACiA6bW9kOmBhc3RgIEhlbHBlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLQogCi1BcGFydCBmcm9tIHRoZSBub2RlIGNsYXNzZXMsIDptb2Q6YGFzdGAgbW9kdWxlIGRlZmluZXMgdGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMKK0FwYXJ0IGZyb20gdGhlIG5vZGUgY2xhc3NlcywgdGhlIDptb2Q6YGFzdGAgbW9kdWxlIGRlZmluZXMgdGhlc2UgdXRpbGl0eSBmdW5jdGlvbnMKIGFuZCBjbGFzc2VzIGZvciB0cmF2ZXJzaW5nIGFic3RyYWN0IHN5bnRheCB0cmVlczoKIAogLi4gZnVuY3Rpb246OiBwYXJzZShzb3VyY2UsIGZpbGVuYW1lPSc8dW5rbm93bj4nLCBtb2RlPSdleGVjJykKQEAgLTExNSwxMyArMTE1LDE1IEBACiAKIC4uIGZ1bmN0aW9uOjogbGl0ZXJhbF9ldmFsKG5vZGVfb3Jfc3RyaW5nKQogCi0gICBTYWZlbHkgZXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBub2RlIG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSBQeXRob24KLSAgIGV4cHJlc3Npb24uICBUaGUgc3RyaW5nIG9yIG5vZGUgcHJvdmlkZWQgbWF5IG9ubHkgY29uc2lzdCBvZiB0aGUgZm9sbG93aW5nCi0gICBQeXRob24gbGl0ZXJhbCBzdHJ1Y3R1cmVzOiBzdHJpbmdzLCBieXRlcywgbnVtYmVycywgdHVwbGVzLCBsaXN0cywgZGljdHMsCi0gICBzZXRzLCBib29sZWFucywgYW5kIGBgTm9uZWBgLgorICAgU2FmZWx5IGV2YWx1YXRlIGFuIGV4cHJlc3Npb24gbm9kZSBvciBhIHN0cmluZyBjb250YWluaW5nIGEgUHl0aG9uIGxpdGVyYWwgb3IKKyAgIGNvbnRhaW5lciBkaXNwbGF5LiAgVGhlIHN0cmluZyBvciBub2RlIHByb3ZpZGVkIG1heSBvbmx5IGNvbnNpc3Qgb2YgdGhlCisgICBmb2xsb3dpbmcgUHl0aG9uIGxpdGVyYWwgc3RydWN0dXJlczogc3RyaW5ncywgYnl0ZXMsIG51bWJlcnMsIHR1cGxlcywgbGlzdHMsCisgICBkaWN0cywgc2V0cywgYm9vbGVhbnMsIGFuZCBgYE5vbmVgYC4KIAotICAgVGhpcyBjYW4gYmUgdXNlZCBmb3Igc2FmZWx5IGV2YWx1YXRpbmcgc3RyaW5ncyBjb250YWluaW5nIFB5dGhvbiBleHByZXNzaW9ucwotICAgZnJvbSB1bnRydXN0ZWQgc291cmNlcyB3aXRob3V0IHRoZSBuZWVkIHRvIHBhcnNlIHRoZSB2YWx1ZXMgb25lc2VsZi4KKyAgIFRoaXMgY2FuIGJlIHVzZWQgZm9yIHNhZmVseSBldmFsdWF0aW5nIHN0cmluZ3MgY29udGFpbmluZyBQeXRob24gdmFsdWVzIGZyb20KKyAgIHVudHJ1c3RlZCBzb3VyY2VzIHdpdGhvdXQgdGhlIG5lZWQgdG8gcGFyc2UgdGhlIHZhbHVlcyBvbmVzZWxmLiAgSXQgaXMgbm90CisgICBjYXBhYmxlIG9mIGV2YWx1YXRpbmcgYXJiaXRyYXJpbHkgY29tcGxleCBleHByZXNzaW9ucywgZm9yIGV4YW1wbGUgaW52b2x2aW5nCisgICBvcGVyYXRvcnMgb3IgaW5kZXhpbmcuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBOb3cgYWxsb3dzIGJ5dGVzIGFuZCBzZXQgbGl0ZXJhbHMuCkBAIC0yNDcsMyArMjQ5LDggQEAKICAgIHdhbnRlZCAqYW5ub3RhdGVfZmllbGRzKiBtdXN0IGJlIHNldCB0byBgYEZhbHNlYGAuICBBdHRyaWJ1dGVzIHN1Y2ggYXMgbGluZQogICAgbnVtYmVycyBhbmQgY29sdW1uIG9mZnNldHMgYXJlIG5vdCBkdW1wZWQgYnkgZGVmYXVsdC4gIElmIHRoaXMgaXMgd2FudGVkLAogICAgKmluY2x1ZGVfYXR0cmlidXRlcyogY2FuIGJlIHNldCB0byBgYFRydWVgYC4KKworLi4gc2VlYWxzbzo6CisKKyAgICBgR3JlZW4gVHJlZSBTbmFrZXMgPGh0dHBzOi8vZ3JlZW50cmVlc25ha2VzLnJlYWR0aGVkb2NzLm9yZy8+YF8sIGFuIGV4dGVybmFsIGRvY3VtZW50YXRpb24gcmVzb3VyY2UsIGhhcyBnb29kCisgICAgZGV0YWlscyBvbiB3b3JraW5nIHdpdGggUHl0aG9uIEFTVHMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2hhdC5yc3QKaW5kZXggYWRiZDNiZS4uYzZmYTA2MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNoYXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaGF0LnJzdApAQCAtMTAsNiArMTAsMTEgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAorLi4gbm90ZTo6CisKKyAgIFRoaXMgbW9kdWxlIGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4gIEZvciBuZXcgY29kZSB3ZQorICAgcmVjb21tZW5kIHVzaW5nIDptb2Q6YGFzeW5jaW9gLgorCiBUaGlzIG1vZHVsZSBidWlsZHMgb24gdGhlIDptb2Q6YGFzeW5jb3JlYCBpbmZyYXN0cnVjdHVyZSwgc2ltcGxpZnlpbmcKIGFzeW5jaHJvbm91cyBjbGllbnRzIGFuZCBzZXJ2ZXJzIGFuZCBtYWtpbmcgaXQgZWFzaWVyIHRvIGhhbmRsZSBwcm90b2NvbHMKIHdob3NlIGVsZW1lbnRzIGFyZSB0ZXJtaW5hdGVkIGJ5IGFyYml0cmFyeSBzdHJpbmdzLCBvciBhcmUgb2YgdmFyaWFibGUgbGVuZ3RoLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1kZXYucnN0IGIvRG9jL2xpYnJhcnkvYXN5bmNpby1kZXYucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMWY3OTUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWRldi5yc3QKQEAgLTAsMCArMSw0MDIgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKKy4uIF9hc3luY2lvLWRldjoKKworRGV2ZWxvcCB3aXRoIGFzeW5jaW8KKz09PT09PT09PT09PT09PT09PT09CisKK0FzeW5jaHJvbm91cyBwcm9ncmFtbWluZyBpcyBkaWZmZXJlbnQgdGhhbiBjbGFzc2ljYWwgInNlcXVlbnRpYWwiIHByb2dyYW1taW5nLgorVGhpcyBwYWdlIGxpc3RzIGNvbW1vbiB0cmFwcyBhbmQgZXhwbGFpbnMgaG93IHRvIGF2b2lkIHRoZW0uCisKKworLi4gX2FzeW5jaW8tZGVidWctbW9kZToKKworRGVidWcgbW9kZSBvZiBhc3luY2lvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGltcGxlbWVudGF0aW9uIG9mIDptb2Q6YGFzeW5jaW9gIGhhcyBiZWVuIHdyaXR0ZW4gZm9yIHBlcmZvcm1hbmNlLgorSW4gb3JkZXIgdG8gZWFzZSB0aGUgZGV2ZWxvcG1lbnQgb2YgYXN5bmNocm9ub3VzIGNvZGUsIHlvdSBtYXkgd2lzaCB0bworZW5hYmxlICpkZWJ1ZyBtb2RlKi4KKworVG8gZW5hYmxlIGFsbCBkZWJ1ZyBjaGVja3MgZm9yIGFuIGFwcGxpY2F0aW9uOgorCisqIEVuYWJsZSB0aGUgYXN5bmNpbyBkZWJ1ZyBtb2RlIGdsb2JhbGx5IGJ5IHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCisgIDplbnZ2YXI6YFBZVEhPTkFTWU5DSU9ERUJVR2AgdG8gYGAxYGAsIG9yIGJ5IGNhbGxpbmcgOm1ldGg6YEJhc2VFdmVudExvb3Auc2V0X2RlYnVnYC4KKyogU2V0IHRoZSBsb2cgbGV2ZWwgb2YgdGhlIDpyZWY6YGFzeW5jaW8gbG9nZ2VyIDxhc3luY2lvLWxvZ2dlcj5gIHRvCisgIDpweTpkYXRhOmBsb2dnaW5nLkRFQlVHYC4gRm9yIGV4YW1wbGUsIGNhbGwKKyAgYGBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuREVCVUcpYGAgYXQgc3RhcnR1cC4KKyogQ29uZmlndXJlIHRoZSA6bW9kOmB3YXJuaW5nc2AgbW9kdWxlIHRvIGRpc3BsYXkgOmV4YzpgUmVzb3VyY2VXYXJuaW5nYAorICB3YXJuaW5ncy4gRm9yIGV4YW1wbGUsIHVzZSB0aGUgYGAtV2RlZmF1bHRgYCBjb21tYW5kIGxpbmUgb3B0aW9uIG9mIFB5dGhvbiB0bworICBkaXNwbGF5IHRoZW0uCisKK0V4YW1wbGVzIGRlYnVnIGNoZWNrczoKKworKiBMb2cgOnJlZjpgY29yb3V0aW5lcyBkZWZpbmVkIGJ1dCBuZXZlciAieWllbGRlZCBmcm9tIgorICA8YXN5bmNpby1jb3JvdXRpbmUtbm90LXNjaGVkdWxlZD5gCisqIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25gIGFuZCA6bWV0aDpgfkJhc2VFdmVudExvb3AuY2FsbF9hdGAgbWV0aG9kcworICByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhleSBhcmUgY2FsbGVkIGZyb20gdGhlIHdyb25nIHRocmVhZC4KKyogTG9nIHRoZSBleGVjdXRpb24gdGltZSBvZiB0aGUgc2VsZWN0b3IKKyogTG9nIGNhbGxiYWNrcyB0YWtpbmcgbW9yZSB0aGFuIDEwMCBtcyB0byBiZSBleGVjdXRlZC4gVGhlCisgIDphdHRyOmBCYXNlRXZlbnRMb29wLnNsb3dfY2FsbGJhY2tfZHVyYXRpb25gIGF0dHJpYnV0ZSBpcyB0aGUgbWluaW11bQorICBkdXJhdGlvbiBpbiBzZWNvbmRzIG9mICJzbG93IiBjYWxsYmFja3MuCisqIDpleGM6YFJlc291cmNlV2FybmluZ2Agd2FybmluZ3MgYXJlIGVtaXR0ZWQgd2hlbiB0cmFuc3BvcnRzIGFuZCBldmVudCBsb29wcworICBhcmUgOnJlZjpgbm90IGNsb3NlZCBleHBsaWNpdGx5IDxhc3luY2lvLWNsb3NlLXRyYW5zcG9ydHM+YC4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5zZXRfZGVidWdgIG1ldGhvZCBhbmQgdGhlIDpyZWY6YGFzeW5jaW8gbG9nZ2VyCisgICA8YXN5bmNpby1sb2dnZXI+YC4KKworCitDYW5jZWxsYXRpb24KKy0tLS0tLS0tLS0tLQorCitDYW5jZWxsYXRpb24gb2YgdGFza3MgaXMgbm90IGNvbW1vbiBpbiBjbGFzc2ljIHByb2dyYW1taW5nLiBJbiBhc3luY2hyb25vdXMKK3Byb2dyYW1taW5nLCBub3Qgb25seSBpdCBpcyBzb21ldGhpbmcgY29tbW9uLCBidXQgeW91IGhhdmUgdG8gcHJlcGFyZSB5b3VyCitjb2RlIHRvIGhhbmRsZSBpdC4KKworRnV0dXJlcyBhbmQgdGFza3MgY2FuIGJlIGNhbmNlbGxlZCBleHBsaWNpdGx5IHdpdGggdGhlaXIgOm1ldGg6YEZ1dHVyZS5jYW5jZWxgCittZXRob2QuIFRoZSA6ZnVuYzpgd2FpdF9mb3JgIGZ1bmN0aW9uIGNhbmNlbHMgdGhlIHdhaXRlZCB0YXNrIHdoZW4gdGhlIHRpbWVvdXQKK29jY3Vycy4gVGhlcmUgYXJlIG1hbnkgb3RoZXIgY2FzZXMgd2hlcmUgYSB0YXNrIGNhbiBiZSBjYW5jZWxsZWQgaW5kaXJlY3RseS4KKworRG9uJ3QgY2FsbCA6bWV0aDpgfkZ1dHVyZS5zZXRfcmVzdWx0YCBvciA6bWV0aDpgfkZ1dHVyZS5zZXRfZXhjZXB0aW9uYCBtZXRob2QKK29mIDpjbGFzczpgRnV0dXJlYCBpZiB0aGUgZnV0dXJlIGlzIGNhbmNlbGxlZDogaXQgd291bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvbi4KK0ZvciBleGFtcGxlLCB3cml0ZTo6CisKKyAgICBpZiBub3QgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICBmdXQuc2V0X3Jlc3VsdCgnZG9uZScpCisKK0Rvbid0IHNjaGVkdWxlIGRpcmVjdGx5IGEgY2FsbCB0byB0aGUgOm1ldGg6YH5GdXR1cmUuc2V0X3Jlc3VsdGAgb3IgdGhlCis6bWV0aDpgfkZ1dHVyZS5zZXRfZXhjZXB0aW9uYCBtZXRob2Qgb2YgYSBmdXR1cmUgd2l0aAorOm1ldGg6YEJhc2VFdmVudExvb3AuY2FsbF9zb29uYDogdGhlIGZ1dHVyZSBjYW4gYmUgY2FuY2VsbGVkIGJlZm9yZSBpdHMgbWV0aG9kCitpcyBjYWxsZWQuCisKK0lmIHlvdSB3YWl0IGZvciBhIGZ1dHVyZSwgeW91IHNob3VsZCBjaGVjayBlYXJseSBpZiB0aGUgZnV0dXJlIHdhcyBjYW5jZWxsZWQgdG8KK2F2b2lkIHVzZWxlc3Mgb3BlcmF0aW9ucy4gRXhhbXBsZTo6CisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHNsb3dfb3BlcmF0aW9uKGZ1dCk6CisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIC4uLiBzbG93IGNvbXB1dGF0aW9uIC4uLgorICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAjIC4uLgorCitUaGUgOmZ1bmM6YHNoaWVsZGAgZnVuY3Rpb24gY2FuIGFsc28gYmUgdXNlZCB0byBpZ25vcmUgY2FuY2VsbGF0aW9uLgorCisKKy4uIF9hc3luY2lvLW11bHRpdGhyZWFkaW5nOgorCitDb25jdXJyZW5jeSBhbmQgbXVsdGl0aHJlYWRpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBldmVudCBsb29wIHJ1bnMgaW4gYSB0aHJlYWQgYW5kIGV4ZWN1dGVzIGFsbCBjYWxsYmFja3MgYW5kIHRhc2tzIGluIHRoZSBzYW1lCit0aHJlYWQuIFdoaWxlIGEgdGFzayBpcyBydW5uaW5nIGluIHRoZSBldmVudCBsb29wLCBubyBvdGhlciB0YXNrIGlzIHJ1bm5pbmcgaW4KK3RoZSBzYW1lIHRocmVhZC4gQnV0IHdoZW4gdGhlIHRhc2sgdXNlcyBgYHlpZWxkIGZyb21gYCwgdGhlIHRhc2sgaXMgc3VzcGVuZGVkCithbmQgdGhlIGV2ZW50IGxvb3AgZXhlY3V0ZXMgdGhlIG5leHQgdGFzay4KKworVG8gc2NoZWR1bGUgYSBjYWxsYmFjayBmcm9tIGEgZGlmZmVyZW50IHRocmVhZCwgdGhlCis6bWV0aDpgQmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZWAgbWV0aG9kIHNob3VsZCBiZSB1c2VkLiBFeGFtcGxlOjoKKworICAgIGxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssICphcmdzKQorCitNb3N0IGFzeW5jaW8gb2JqZWN0cyBhcmUgbm90IHRocmVhZCBzYWZlLiBZb3Ugc2hvdWxkIG9ubHkgd29ycnkgaWYgeW91IGFjY2Vzcworb2JqZWN0cyBvdXRzaWRlIHRoZSBldmVudCBsb29wLiBGb3IgZXhhbXBsZSwgdG8gY2FuY2VsIGEgZnV0dXJlLCBkb24ndCBjYWxsCitkaXJlY3RseSBpdHMgOm1ldGg6YEZ1dHVyZS5jYW5jZWxgIG1ldGhvZCwgYnV0OjoKKworICAgIGxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoZnV0LmNhbmNlbCkKKworVG8gc2NoZWR1bGUgYSBjb3JvdXRpbmUgb2JqZWN0IGZyb20gYSBkaWZmZXJlbnQgdGhyZWFkLCB0aGUKKzpmdW5jOmBydW5fY29yb3V0aW5lX3RocmVhZHNhZmVgIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkLiBJdCByZXR1cm5zIGEKKzpjbGFzczpgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZWAgdG8gYWNjZXNzIHRoZSByZXN1bHQ6OgorCisgICAgIGZ1dHVyZSA9IGFzeW5jaW8ucnVuX2Nvcm91dGluZV90aHJlYWRzYWZlKGNvcm9fZnVuYygpLCBsb29wKQorICAgICByZXN1bHQgPSBmdXR1cmUucmVzdWx0KHRpbWVvdXQpICAjIFdhaXQgZm9yIHRoZSByZXN1bHQgd2l0aCBhIHRpbWVvdXQKKworVG8gaGFuZGxlIHNpZ25hbHMgYW5kIHRvIGV4ZWN1dGUgc3VicHJvY2Vzc2VzLCB0aGUgZXZlbnQgbG9vcCBtdXN0IGJlIHJ1biBpbgordGhlIG1haW4gdGhyZWFkLgorCitUaGUgOm1ldGg6YEJhc2VFdmVudExvb3AucnVuX2luX2V4ZWN1dG9yYCBtZXRob2QgY2FuIGJlIHVzZWQgd2l0aCBhIHRocmVhZCBwb29sCitleGVjdXRvciB0byBleGVjdXRlIGEgY2FsbGJhY2sgaW4gZGlmZmVyZW50IHRocmVhZCB0byBub3QgYmxvY2sgdGhlIHRocmVhZCBvZgordGhlIGV2ZW50IGxvb3AuCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgU3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgPGFzeW5jaW8tc3luYz5gIHNlY3Rpb24gZGVzY3JpYmVzIHdheXMKKyAgIHRvIHN5bmNocm9uaXplIHRhc2tzLgorCisgICBUaGUgOnJlZjpgU3VicHJvY2VzcyBhbmQgdGhyZWFkcyA8YXN5bmNpby1zdWJwcm9jZXNzLXRocmVhZHM+YCBzZWN0aW9uIGxpc3RzCisgICBhc3luY2lvIGxpbWl0YXRpb25zIHRvIHJ1biBzdWJwcm9jZXNzZXMgZnJvbSBkaWZmZXJlbnQgdGhyZWFkcy4KKworCisKKworLi4gX2FzeW5jaW8taGFuZGxlLWJsb2NraW5nOgorCitIYW5kbGUgYmxvY2tpbmcgZnVuY3Rpb25zIGNvcnJlY3RseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQmxvY2tpbmcgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5LiBGb3IgZXhhbXBsZSwgaWYgYSBmdW5jdGlvbgorYmxvY2tzIGZvciAxIHNlY29uZCwgb3RoZXIgdGFza3MgYXJlIGRlbGF5ZWQgYnkgMSBzZWNvbmQgd2hpY2ggY2FuIGhhdmUgYW4KK2ltcG9ydGFudCBpbXBhY3Qgb24gcmVhY3Rpdml0eS4KKworRm9yIG5ldHdvcmtpbmcgYW5kIHN1YnByb2Nlc3NlcywgdGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSBwcm92aWRlcyBoaWdoLWxldmVsCitBUElzIGxpa2UgOnJlZjpgcHJvdG9jb2xzIDxhc3luY2lvLXByb3RvY29sPmAuCisKK0FuIGV4ZWN1dG9yIGNhbiBiZSB1c2VkIHRvIHJ1biBhIHRhc2sgaW4gYSBkaWZmZXJlbnQgdGhyZWFkIG9yIGV2ZW4gaW4gYQorZGlmZmVyZW50IHByb2Nlc3MsIHRvIG5vdCBibG9jayB0aGUgdGhyZWFkIG9mIHRoZSBldmVudCBsb29wLiBTZWUgdGhlCis6bWV0aDpgQmFzZUV2ZW50TG9vcC5ydW5faW5fZXhlY3V0b3JgIG1ldGhvZC4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBEZWxheWVkIGNhbGxzIDxhc3luY2lvLWRlbGF5ZWQtY2FsbHM+YCBzZWN0aW9uIGRldGFpbHMgaG93IHRoZQorICAgZXZlbnQgbG9vcCBoYW5kbGVzIHRpbWUuCisKKworLi4gX2FzeW5jaW8tbG9nZ2VyOgorCitMb2dnaW5nCistLS0tLS0tCisKK1RoZSA6bW9kOmBhc3luY2lvYCBtb2R1bGUgbG9ncyBpbmZvcm1hdGlvbiB3aXRoIHRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUgaW4KK3RoZSBsb2dnZXIgYGAnYXN5bmNpbydgYC4KKworCisuLiBfYXN5bmNpby1jb3JvdXRpbmUtbm90LXNjaGVkdWxlZDoKKworRGV0ZWN0IGNvcm91dGluZSBvYmplY3RzIG5ldmVyIHNjaGVkdWxlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGVuIGEgY29yb3V0aW5lIGZ1bmN0aW9uIGlzIGNhbGxlZCBhbmQgaXRzIHJlc3VsdCBpcyBub3QgcGFzc2VkIHRvCis6ZnVuYzpgYXN5bmNgIG9yIHRvIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AgbWV0aG9kLCB0aGUgZXhlY3V0aW9uCitvZiB0aGUgY29yb3V0aW5lIG9iamVjdCB3aWxsIG5ldmVyIGJlIHNjaGVkdWxlZCB3aGljaCBpcyBwcm9iYWJseSBhIGJ1Zy4KKzpyZWY6YEVuYWJsZSB0aGUgZGVidWcgbW9kZSBvZiBhc3luY2lvIDxhc3luY2lvLWRlYnVnLW1vZGU+YCB0byA6cmVmOmBsb2cgYQord2FybmluZyA8YXN5bmNpby1sb2dnZXI+YCB0byBkZXRlY3QgaXQuCisKK0V4YW1wbGUgd2l0aCB0aGUgYnVnOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgdGVzdCgpOgorICAgICAgICBwcmludCgibmV2ZXIgc2NoZWR1bGVkIikKKworICAgIHRlc3QoKQorCitPdXRwdXQgaW4gZGVidWcgbW9kZTo6CisKKyAgICBDb3JvdXRpbmUgdGVzdCgpIGF0IHRlc3QucHk6MyB3YXMgbmV2ZXIgeWllbGRlZCBmcm9tCisgICAgQ29yb3V0aW5lIG9iamVjdCBjcmVhdGVkIGF0IChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAidGVzdC5weSIsIGxpbmUgNywgaW4gPG1vZHVsZT4KKyAgICAgICAgdGVzdCgpCisKK1RoZSBmaXggaXMgdG8gY2FsbCB0aGUgOmZ1bmM6YGFzeW5jYCBmdW5jdGlvbiBvciB0aGUKKzptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrYCBtZXRob2Qgd2l0aCB0aGUgY29yb3V0aW5lIG9iamVjdC4KKworLi4gc2VlYWxzbzo6CisKKyAgIDpyZWY6YFBlbmRpbmcgdGFzayBkZXN0cm95ZWQgPGFzeW5jaW8tcGVuZGluZy10YXNrLWRlc3Ryb3llZD5gLgorCisKK0RldGVjdCBleGNlcHRpb25zIG5ldmVyIGNvbnN1bWVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gdXN1YWxseSBjYWxscyA6ZnVuYzpgc3lzLmRpc3BsYXlob29rYCBvbiB1bmhhbmRsZWQgZXhjZXB0aW9ucy4gSWYKKzptZXRoOmBGdXR1cmUuc2V0X2V4Y2VwdGlvbmAgaXMgY2FsbGVkLCBidXQgdGhlIGV4Y2VwdGlvbiBpcyBuZXZlciBjb25zdW1lZCwKKzpmdW5jOmBzeXMuZGlzcGxheWhvb2tgIGlzIG5vdCBjYWxsZWQuIEluc3RlYWQsIDpyZWY6YGEgbG9nIGlzIGVtaXR0ZWQKKzxhc3luY2lvLWxvZ2dlcj5gIHdoZW4gdGhlIGZ1dHVyZSBpcyBkZWxldGVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvciwgd2l0aCB0aGUKK3RyYWNlYmFjayB3aGVyZSB0aGUgZXhjZXB0aW9uIHdhcyByYWlzZWQuCisKK0V4YW1wbGUgb2YgdW5oYW5kbGVkIGV4Y2VwdGlvbjo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGJ1ZygpOgorICAgICAgICByYWlzZSBFeGNlcHRpb24oIm5vdCBjb25zdW1lZCIpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKGJ1ZygpKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIGxvb3AuY2xvc2UoKQorCitPdXRwdXQ6OgorCisgICAgVGFzayBleGNlcHRpb24gd2FzIG5ldmVyIHJldHJpZXZlZAorICAgIGZ1dHVyZTogPFRhc2sgZmluaXNoZWQgY29ybz08Y29ybygpIGRvbmUsIGRlZmluZWQgYXQgYXN5bmNpby9jb3JvdXRpbmVzLnB5OjEzOT4gZXhjZXB0aW9uPUV4Y2VwdGlvbignbm90IGNvbnN1bWVkJywpPgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgImFzeW5jaW8vdGFza3MucHkiLCBsaW5lIDIzNywgaW4gX3N0ZXAKKyAgICAgICAgcmVzdWx0ID0gbmV4dChjb3JvKQorICAgICAgRmlsZSAiYXN5bmNpby9jb3JvdXRpbmVzLnB5IiwgbGluZSAxNDEsIGluIGNvcm8KKyAgICAgICAgcmVzID0gZnVuYygqYXJncywgKiprdykKKyAgICAgIEZpbGUgInRlc3QucHkiLCBsaW5lIDUsIGluIGJ1ZworICAgICAgICByYWlzZSBFeGNlcHRpb24oIm5vdCBjb25zdW1lZCIpCisgICAgRXhjZXB0aW9uOiBub3QgY29uc3VtZWQKKworOnJlZjpgRW5hYmxlIHRoZSBkZWJ1ZyBtb2RlIG9mIGFzeW5jaW8gPGFzeW5jaW8tZGVidWctbW9kZT5gIHRvIGdldCB0aGUKK3RyYWNlYmFjayB3aGVyZSB0aGUgdGFzayB3YXMgY3JlYXRlZC4gT3V0cHV0IGluIGRlYnVnIG1vZGU6OgorCisgICAgVGFzayBleGNlcHRpb24gd2FzIG5ldmVyIHJldHJpZXZlZAorICAgIGZ1dHVyZTogPFRhc2sgZmluaXNoZWQgY29ybz08YnVnKCkgZG9uZSwgZGVmaW5lZCBhdCB0ZXN0LnB5OjM+IGV4Y2VwdGlvbj1FeGNlcHRpb24oJ25vdCBjb25zdW1lZCcsKSBjcmVhdGVkIGF0IHRlc3QucHk6OD4KKyAgICBzb3VyY2VfdHJhY2ViYWNrOiBPYmplY3QgY3JlYXRlZCBhdCAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgInRlc3QucHkiLCBsaW5lIDgsIGluIDxtb2R1bGU+CisgICAgICAgIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShidWcoKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICJhc3luY2lvL3Rhc2tzLnB5IiwgbGluZSAyMzcsIGluIF9zdGVwCisgICAgICAgIHJlc3VsdCA9IG5leHQoY29ybykKKyAgICAgIEZpbGUgImFzeW5jaW8vY29yb3V0aW5lcy5weSIsIGxpbmUgNzksIGluIF9fbmV4dF9fCisgICAgICAgIHJldHVybiBuZXh0KHNlbGYuZ2VuKQorICAgICAgRmlsZSAiYXN5bmNpby9jb3JvdXRpbmVzLnB5IiwgbGluZSAxNDEsIGluIGNvcm8KKyAgICAgICAgcmVzID0gZnVuYygqYXJncywgKiprdykKKyAgICAgIEZpbGUgInRlc3QucHkiLCBsaW5lIDUsIGluIGJ1ZworICAgICAgICByYWlzZSBFeGNlcHRpb24oIm5vdCBjb25zdW1lZCIpCisgICAgRXhjZXB0aW9uOiBub3QgY29uc3VtZWQKKworVGhlcmUgYXJlIGRpZmZlcmVudCBvcHRpb25zIHRvIGZpeCB0aGlzIGlzc3VlLiBUaGUgZmlyc3Qgb3B0aW9uIGlzIHRvIGNoYWluIHRoZQorY29yb3V0aW5lIGluIGFub3RoZXIgY29yb3V0aW5lIGFuZCB1c2UgY2xhc3NpYyB0cnkvZXhjZXB0OjoKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBoYW5kbGVfZXhjZXB0aW9uKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYnVnKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHByaW50KCJleGNlcHRpb24gY29uc3VtZWQiKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShoYW5kbGVfZXhjZXB0aW9uKCkpCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgbG9vcC5jbG9zZSgpCisKK0Fub3RoZXIgb3B0aW9uIGlzIHRvIHVzZSB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlYAorZnVuY3Rpb246OgorCisgICAgdGFzayA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShidWcoKSkKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgcHJpbnQoImV4Y2VwdGlvbiBjb25zdW1lZCIpCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOm1ldGg6YEZ1dHVyZS5leGNlcHRpb25gIG1ldGhvZC4KKworCitDaGFpbiBjb3JvdXRpbmVzIGNvcnJlY3RseQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBhIGNvcm91dGluZSBmdW5jdGlvbiBjYWxscyBvdGhlciBjb3JvdXRpbmUgZnVuY3Rpb25zIGFuZCB0YXNrcywgdGhleQorc2hvdWxkIGJlIGNoYWluZWQgZXhwbGljaXRseSB3aXRoIGBgeWllbGQgZnJvbWBgLiBPdGhlcndpc2UsIHRoZSBleGVjdXRpb24gaXMKK25vdCBndWFyYW50ZWVkIHRvIGJlIHNlcXVlbnRpYWwuCisKK0V4YW1wbGUgd2l0aCBkaWZmZXJlbnQgYnVncyB1c2luZyA6ZnVuYzpgYXN5bmNpby5zbGVlcGAgdG8gc2ltdWxhdGUgc2xvdworb3BlcmF0aW9uczo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZSgpOgorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMy4wKQorICAgICAgICBwcmludCgiKDEpIGNyZWF0ZSBmaWxlIikKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiB3cml0ZSgpOgorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMS4wKQorICAgICAgICBwcmludCgiKDIpIHdyaXRlIGludG8gZmlsZSIpCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgY2xvc2UoKToKKyAgICAgICAgcHJpbnQoIigzKSBjbG9zZSBmaWxlIikKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiB0ZXN0KCk6CisgICAgICAgIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShjcmVhdGUoKSkKKyAgICAgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKHdyaXRlKCkpCisgICAgICAgIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShjbG9zZSgpKQorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMi4wKQorICAgICAgICBsb29wLnN0b3AoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZSh0ZXN0KCkpCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgcHJpbnQoIlBlbmRpbmcgdGFza3MgYXQgZXhpdDogJXMiICUgYXN5bmNpby5UYXNrLmFsbF90YXNrcyhsb29wKSkKKyAgICBsb29wLmNsb3NlKCkKKworRXhwZWN0ZWQgb3V0cHV0OjoKKworICAgICgxKSBjcmVhdGUgZmlsZQorICAgICgyKSB3cml0ZSBpbnRvIGZpbGUKKyAgICAoMykgY2xvc2UgZmlsZQorICAgIFBlbmRpbmcgdGFza3MgYXQgZXhpdDogc2V0KCkKKworQWN0dWFsIG91dHB1dDo6CisKKyAgICAoMykgY2xvc2UgZmlsZQorICAgICgyKSB3cml0ZSBpbnRvIGZpbGUKKyAgICBQZW5kaW5nIHRhc2tzIGF0IGV4aXQ6IHs8VGFzayBwZW5kaW5nIGNyZWF0ZSgpIGF0IHRlc3QucHk6NyB3YWl0X2Zvcj08RnV0dXJlIHBlbmRpbmcgY2I9W1Rhc2suX3dha2V1cCgpXT4+fQorICAgIFRhc2sgd2FzIGRlc3Ryb3llZCBidXQgaXQgaXMgcGVuZGluZyEKKyAgICB0YXNrOiA8VGFzayBwZW5kaW5nIGNyZWF0ZSgpIGRvbmUgYXQgdGVzdC5weTo1IHdhaXRfZm9yPTxGdXR1cmUgcGVuZGluZyBjYj1bVGFzay5fd2FrZXVwKCldPj4KKworVGhlIGxvb3Agc3RvcHBlZCBiZWZvcmUgdGhlIGBgY3JlYXRlKClgYCBmaW5pc2hlZCwgYGBjbG9zZSgpYGAgaGFzIGJlZW4gY2FsbGVkCitiZWZvcmUgYGB3cml0ZSgpYGAsIHdoZXJlYXMgY29yb3V0aW5lIGZ1bmN0aW9ucyB3ZXJlIGNhbGxlZCBpbiB0aGlzIG9yZGVyOgorYGBjcmVhdGUoKWBgLCBgYHdyaXRlKClgYCwgYGBjbG9zZSgpYGAuCisKK1RvIGZpeCB0aGUgZXhhbXBsZSwgdGFza3MgbXVzdCBiZSBtYXJrZWQgd2l0aCBgYHlpZWxkIGZyb21gYDo6CisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgdGVzdCgpOgorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShjcmVhdGUoKSkKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLmVuc3VyZV9mdXR1cmUod3JpdGUoKSkKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoY2xvc2UoKSkKKyAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDIuMCkKKyAgICAgICAgbG9vcC5zdG9wKCkKKworT3Igd2l0aG91dCBgYGFzeW5jaW8uZW5zdXJlX2Z1dHVyZSgpYGA6OgorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHRlc3QoKToKKyAgICAgICAgeWllbGQgZnJvbSBjcmVhdGUoKQorICAgICAgICB5aWVsZCBmcm9tIHdyaXRlKCkKKyAgICAgICAgeWllbGQgZnJvbSBjbG9zZSgpCisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgyLjApCisgICAgICAgIGxvb3Auc3RvcCgpCisKKworLi4gX2FzeW5jaW8tcGVuZGluZy10YXNrLWRlc3Ryb3llZDoKKworUGVuZGluZyB0YXNrIGRlc3Ryb3llZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBhIHBlbmRpbmcgdGFzayBpcyBkZXN0cm95ZWQsIHRoZSBleGVjdXRpb24gb2YgaXRzIHdyYXBwZWQgOnJlZjpgY29yb3V0aW5lCis8Y29yb3V0aW5lPmAgZGlkIG5vdCBjb21wbGV0ZS4gSXQgaXMgcHJvYmFibHkgYSBidWcgYW5kIHNvIGEgd2FybmluZyBpcyBsb2dnZWQuCisKK0V4YW1wbGUgb2YgbG9nOjoKKworICAgIFRhc2sgd2FzIGRlc3Ryb3llZCBidXQgaXQgaXMgcGVuZGluZyEKKyAgICB0YXNrOiA8VGFzayBwZW5kaW5nIGNvcm89PGtpbGxfbWUoKSBkb25lLCBkZWZpbmVkIGF0IHRlc3QucHk6NT4gd2FpdF9mb3I9PEZ1dHVyZSBwZW5kaW5nIGNiPVtUYXNrLl93YWtldXAoKV0+PgorCis6cmVmOmBFbmFibGUgdGhlIGRlYnVnIG1vZGUgb2YgYXN5bmNpbyA8YXN5bmNpby1kZWJ1Zy1tb2RlPmAgdG8gZ2V0IHRoZQordHJhY2ViYWNrIHdoZXJlIHRoZSB0YXNrIHdhcyBjcmVhdGVkLiBFeGFtcGxlIG9mIGxvZyBpbiBkZWJ1ZyBtb2RlOjoKKworICAgIFRhc2sgd2FzIGRlc3Ryb3llZCBidXQgaXQgaXMgcGVuZGluZyEKKyAgICBzb3VyY2VfdHJhY2ViYWNrOiBPYmplY3QgY3JlYXRlZCBhdCAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgInRlc3QucHkiLCBsaW5lIDE1LCBpbiA8bW9kdWxlPgorICAgICAgICB0YXNrID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGNvcm8sIGxvb3A9bG9vcCkKKyAgICB0YXNrOiA8VGFzayBwZW5kaW5nIGNvcm89PGtpbGxfbWUoKSBkb25lLCBkZWZpbmVkIGF0IHRlc3QucHk6NT4gd2FpdF9mb3I9PEZ1dHVyZSBwZW5kaW5nIGNiPVtUYXNrLl93YWtldXAoKV0gY3JlYXRlZCBhdCB0ZXN0LnB5Ojc+IGNyZWF0ZWQgYXQgdGVzdC5weToxNT4KKworCisuLiBzZWVhbHNvOjoKKworICAgOnJlZjpgRGV0ZWN0IGNvcm91dGluZSBvYmplY3RzIG5ldmVyIHNjaGVkdWxlZCA8YXN5bmNpby1jb3JvdXRpbmUtbm90LXNjaGVkdWxlZD5gLgorCisuLiBfYXN5bmNpby1jbG9zZS10cmFuc3BvcnRzOgorCitDbG9zZSB0cmFuc3BvcnRzIGFuZCBldmVudCBsb29wcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hlbiBhIHRyYW5zcG9ydCBpcyBubyBtb3JlIG5lZWRlZCwgY2FsbCBpdHMgYGBjbG9zZSgpYGAgbWV0aG9kIHRvIHJlbGVhc2UKK3Jlc291cmNlcy4gRXZlbnQgbG9vcHMgbXVzdCBhbHNvIGJlIGNsb3NlZCBleHBsaWNpdGx5LgorCitJZiBhIHRyYW5zcG9ydCBvciBhbiBldmVudCBsb29wIGlzIG5vdCBjbG9zZWQgZXhwbGljaXRseSwgYQorOmV4YzpgUmVzb3VyY2VXYXJuaW5nYCB3YXJuaW5nIHdpbGwgYmUgZW1pdHRlZCBpbiBpdHMgZGVzdHJ1Y3Rvci4gQnkgZGVmYXVsdCwKKzpleGM6YFJlc291cmNlV2FybmluZ2Agd2FybmluZ3MgYXJlIGlnbm9yZWQuIFRoZSA6cmVmOmBEZWJ1ZyBtb2RlIG9mIGFzeW5jaW8KKzxhc3luY2lvLWRlYnVnLW1vZGU+YCBzZWN0aW9uIGV4cGxhaW5zIGhvdyB0byBkaXNwbGF5IHRoZW0uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0NjhhZQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wLnJzdApAQCAtMCwwICsxLDkxOCBAQAorLi4gY3VycmVudG1vZHVsZTo6IGFzeW5jaW8KKworLi4gX2FzeW5jaW8tZXZlbnQtbG9vcDoKKworQmFzZSBFdmVudCBMb29wCis9PT09PT09PT09PT09PT0KKworVGhlIGV2ZW50IGxvb3AgaXMgdGhlIGNlbnRyYWwgZXhlY3V0aW9uIGRldmljZSBwcm92aWRlZCBieSA6bW9kOmBhc3luY2lvYC4KK0l0IHByb3ZpZGVzIG11bHRpcGxlIGZhY2lsaXRpZXMsIGluY2x1ZGluZzoKKworKiBSZWdpc3RlcmluZywgZXhlY3V0aW5nIGFuZCBjYW5jZWxsaW5nIGRlbGF5ZWQgY2FsbHMgKHRpbWVvdXRzKS4KKworKiBDcmVhdGluZyBjbGllbnQgYW5kIHNlcnZlciA6cmVmOmB0cmFuc3BvcnRzIDxhc3luY2lvLXRyYW5zcG9ydD5gIGZvciB2YXJpb3VzCisgIGtpbmRzIG9mIGNvbW11bmljYXRpb24uCisKKyogTGF1bmNoaW5nIHN1YnByb2Nlc3NlcyBhbmQgdGhlIGFzc29jaWF0ZWQgOnJlZjpgdHJhbnNwb3J0cworICA8YXN5bmNpby10cmFuc3BvcnQ+YCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIGFuIGV4dGVybmFsIHByb2dyYW0uCisKKyogRGVsZWdhdGluZyBjb3N0bHkgZnVuY3Rpb24gY2FsbHMgdG8gYSBwb29sIG9mIHRocmVhZHMuCisKKy4uIGNsYXNzOjogQmFzZUV2ZW50TG9vcAorCisgICBCYXNlIGNsYXNzIG9mIGV2ZW50IGxvb3BzLgorCisgICBUaGlzIGNsYXNzIGlzIDpyZWY6YG5vdCB0aHJlYWQgc2FmZSA8YXN5bmNpby1tdWx0aXRocmVhZGluZz5gLgorCitSdW4gYW4gZXZlbnQgbG9vcAorLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5ydW5fZm9yZXZlcigpCisKKyAgIFJ1biB1bnRpbCA6bWV0aDpgc3RvcGAgaXMgY2FsbGVkLiAgSWYgOm1ldGg6YHN0b3BgIGlzIGNhbGxlZCBiZWZvcmUKKyAgIDptZXRoOmBydW5fZm9yZXZlcigpYCBpcyBjYWxsZWQsIHRoaXMgcG9sbHMgdGhlIEkvTyBzZWxlY3RvciBvbmNlCisgICB3aXRoIGEgdGltZW91dCBvZiB6ZXJvLCBydW5zIGFsbCBjYWxsYmFja3Mgc2NoZWR1bGVkIGluIHJlc3BvbnNlIHRvCisgICBJL08gZXZlbnRzIChhbmQgdGhvc2UgdGhhdCB3ZXJlIGFscmVhZHkgc2NoZWR1bGVkKSwgYW5kIHRoZW4gZXhpdHMuCisgICBJZiA6bWV0aDpgc3RvcGAgaXMgY2FsbGVkIHdoaWxlIDptZXRoOmBydW5fZm9yZXZlcmAgaXMgcnVubmluZywKKyAgIHRoaXMgd2lsbCBydW4gdGhlIGN1cnJlbnQgYmF0Y2ggb2YgY2FsbGJhY2tzIGFuZCB0aGVuIGV4aXQuICBOb3RlCisgICB0aGF0IGNhbGxiYWNrcyBzY2hlZHVsZWQgYnkgY2FsbGJhY2tzIHdpbGwgbm90IHJ1biBpbiB0aGF0IGNhc2U7CisgICB0aGV5IHdpbGwgcnVuIHRoZSBuZXh0IHRpbWUgOm1ldGg6YHJ1bl9mb3JldmVyYCBpcyBjYWxsZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0dXJlKQorCisgICBSdW4gdW50aWwgdGhlIDpjbGFzczpgRnV0dXJlYCBpcyBkb25lLgorCisgICBJZiB0aGUgYXJndW1lbnQgaXMgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YCwgaXQgaXMgd3JhcHBlZCBieQorICAgOmZ1bmM6YGFzeW5jYC4KKworICAgUmV0dXJuIHRoZSBGdXR1cmUncyByZXN1bHQsIG9yIHJhaXNlIGl0cyBleGNlcHRpb24uCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuaXNfcnVubmluZygpCisKKyAgIFJldHVybnMgcnVubmluZyBzdGF0dXMgb2YgZXZlbnQgbG9vcC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zdG9wKCkKKworICAgU3RvcCBydW5uaW5nIHRoZSBldmVudCBsb29wLgorCisgICBUaGlzIGNhdXNlcyA6bWV0aDpgcnVuX2ZvcmV2ZXJgIHRvIGV4aXQgYXQgdGhlIG5leHQgc3VpdGFibGUKKyAgIG9wcG9ydHVuaXR5IChzZWUgdGhlcmUgZm9yIG1vcmUgZGV0YWlscykuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5pc19jbG9zZWQoKQorCisgICBSZXR1cm5zIGBgVHJ1ZWBgIGlmIHRoZSBldmVudCBsb29wIHdhcyBjbG9zZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNC4yCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2xvc2UoKQorCisgICBDbG9zZSB0aGUgZXZlbnQgbG9vcC4gVGhlIGxvb3AgbXVzdCBub3QgYmUgcnVubmluZy4gIFBlbmRpbmcKKyAgIGNhbGxiYWNrcyB3aWxsIGJlIGxvc3QuCisKKyAgIFRoaXMgY2xlYXJzIHRoZSBxdWV1ZXMgYW5kIHNodXRzIGRvd24gdGhlIGV4ZWN1dG9yLCBidXQgZG9lcyBub3Qgd2FpdCBmb3IKKyAgIHRoZSBleGVjdXRvciB0byBmaW5pc2guCisKKyAgIFRoaXMgaXMgaWRlbXBvdGVudCBhbmQgaXJyZXZlcnNpYmxlLiBObyBvdGhlciBtZXRob2RzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIKKyAgIHRoaXMgb25lLgorCisuLiBfYXN5bmNpby1wYXNzLWtleXdvcmRzOgorCitDYWxscworLS0tLS0KKworTW9zdCA6bW9kOmBhc3luY2lvYCBmdW5jdGlvbnMgZG9uJ3QgYWNjZXB0IGtleXdvcmRzLiBJZiB5b3Ugd2FudCB0byBwYXNzCitrZXl3b3JkcyB0byB5b3VyIGNhbGxiYWNrLCB1c2UgOmZ1bmM6YGZ1bmN0b29scy5wYXJ0aWFsYC4gRm9yIGV4YW1wbGUsCitgYGxvb3AuY2FsbF9zb29uKGZ1bmN0b29scy5wYXJ0aWFsKHByaW50LCAiSGVsbG8iLCBmbHVzaD1UcnVlKSlgYCB3aWxsIGNhbGwKK2BgcHJpbnQoIkhlbGxvIiwgZmx1c2g9VHJ1ZSlgYC4KKworLi4gbm90ZTo6CisgICA6ZnVuYzpgZnVuY3Rvb2xzLnBhcnRpYWxgIGlzIGJldHRlciB0aGFuIGBgbGFtYmRhYGAgZnVuY3Rpb25zLCBiZWNhdXNlCisgICA6bW9kOmBhc3luY2lvYCBjYW4gaW5zcGVjdCA6ZnVuYzpgZnVuY3Rvb2xzLnBhcnRpYWxgIG9iamVjdCB0byBkaXNwbGF5CisgICBwYXJhbWV0ZXJzIGluIGRlYnVnIG1vZGUsIHdoZXJlYXMgYGBsYW1iZGFgYCBmdW5jdGlvbnMgaGF2ZSBhIHBvb3IKKyAgIHJlcHJlc2VudGF0aW9uLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNhbGxfc29vbihjYWxsYmFjaywgXCphcmdzKQorCisgICBBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiAgVGhlIGNhbGxiYWNrIGlzCisgICBjYWxsZWQgYWZ0ZXIgOm1ldGg6YGNhbGxfc29vbmAgcmV0dXJucywgd2hlbiBjb250cm9sIHJldHVybnMgdG8gdGhlIGV2ZW50CisgICBsb29wLgorCisgICBUaGlzIG9wZXJhdGVzIGFzIGEgRklGTyBxdWV1ZSwgY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4gdGhlIG9yZGVyIGluCisgICB3aGljaCB0aGV5IGFyZSByZWdpc3RlcmVkLiAgRWFjaCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UuCisKKyAgIEFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdG8gdGhlCisgICBjYWxsYmFjayB3aGVuIGl0IGlzIGNhbGxlZC4KKworICAgQW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBhc3luY2lvLkhhbmRsZWAgaXMgcmV0dXJuZWQsIHdoaWNoIGNhbiBiZQorICAgdXNlZCB0byBjYW5jZWwgdGhlIGNhbGxiYWNrLgorCisgICA6cmVmOmBVc2UgZnVuY3Rvb2xzLnBhcnRpYWwgdG8gcGFzcyBrZXl3b3JkcyB0byB0aGUgY2FsbGJhY2sKKyAgIDxhc3luY2lvLXBhc3Mta2V5d29yZHM+YC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaywgXCphcmdzKQorCisgICBMaWtlIDptZXRoOmBjYWxsX3Nvb25gLCBidXQgdGhyZWFkIHNhZmUuCisKKyAgIFNlZSB0aGUgOnJlZjpgY29uY3VycmVuY3kgYW5kIG11bHRpdGhyZWFkaW5nIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAKKyAgIHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50YXRpb24uCisKKworLi4gX2FzeW5jaW8tZGVsYXllZC1jYWxsczoKKworRGVsYXllZCBjYWxscworLS0tLS0tLS0tLS0tLQorCitUaGUgZXZlbnQgbG9vcCBoYXMgaXRzIG93biBpbnRlcm5hbCBjbG9jayBmb3IgY29tcHV0aW5nIHRpbWVvdXRzLgorV2hpY2ggY2xvY2sgaXMgdXNlZCBkZXBlbmRzIG9uIHRoZSAocGxhdGZvcm0tc3BlY2lmaWMpIGV2ZW50IGxvb3AKK2ltcGxlbWVudGF0aW9uOyBpZGVhbGx5IGl0IGlzIGEgbW9ub3RvbmljIGNsb2NrLiAgVGhpcyB3aWxsIGdlbmVyYWxseSBiZQorYSBkaWZmZXJlbnQgY2xvY2sgdGhhbiA6ZnVuYzpgdGltZS50aW1lYC4KKworLi4gbm90ZTo6CisKKyAgIFRpbWVvdXRzIChyZWxhdGl2ZSAqZGVsYXkqIG9yIGFic29sdXRlICp3aGVuKikgc2hvdWxkIG5vdCBleGNlZWQgb25lIGRheS4KKworCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNhbGxfbGF0ZXIoZGVsYXksIGNhbGxiYWNrLCAqYXJncykKKworICAgQXJyYW5nZSBmb3IgdGhlICpjYWxsYmFjayogdG8gYmUgY2FsbGVkIGFmdGVyIHRoZSBnaXZlbiAqZGVsYXkqCisgICBzZWNvbmRzIChlaXRoZXIgYW4gaW50IG9yIGZsb2F0KS4KKworICAgQW4gaW5zdGFuY2Ugb2YgOmNsYXNzOmBhc3luY2lvLkhhbmRsZWAgaXMgcmV0dXJuZWQsIHdoaWNoIGNhbiBiZQorICAgdXNlZCB0byBjYW5jZWwgdGhlIGNhbGxiYWNrLgorCisgICAqY2FsbGJhY2sqIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBwZXIgY2FsbCB0byA6bWV0aDpgY2FsbF9sYXRlcmAuCisgICBJZiB0d28gY2FsbGJhY2tzIGFyZSBzY2hlZHVsZWQgZm9yIGV4YWN0bHkgdGhlIHNhbWUgdGltZSwgaXQgaXMKKyAgIHVuZGVmaW5lZCB3aGljaCB3aWxsIGJlIGNhbGxlZCBmaXJzdC4KKworICAgVGhlIG9wdGlvbmFsIHBvc2l0aW9uYWwgKmFyZ3MqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayB3aGVuIGl0CisgICBpcyBjYWxsZWQuIElmIHlvdSB3YW50IHRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2l0aCBzb21lIG5hbWVkCisgICBhcmd1bWVudHMsIHVzZSBhIGNsb3N1cmUgb3IgOmZ1bmM6YGZ1bmN0b29scy5wYXJ0aWFsYC4KKworICAgOnJlZjpgVXNlIGZ1bmN0b29scy5wYXJ0aWFsIHRvIHBhc3Mga2V5d29yZHMgdG8gdGhlIGNhbGxiYWNrCisgICA8YXN5bmNpby1wYXNzLWtleXdvcmRzPmAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2FsbF9hdCh3aGVuLCBjYWxsYmFjaywgKmFyZ3MpCisKKyAgIEFycmFuZ2UgZm9yIHRoZSAqY2FsbGJhY2sqIHRvIGJlIGNhbGxlZCBhdCB0aGUgZ2l2ZW4gYWJzb2x1dGUgdGltZXN0YW1wCisgICAqd2hlbiogKGFuIGludCBvciBmbG9hdCksIHVzaW5nIHRoZSBzYW1lIHRpbWUgcmVmZXJlbmNlIGFzCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC50aW1lYC4KKworICAgVGhpcyBtZXRob2QncyBiZWhhdmlvciBpcyB0aGUgc2FtZSBhcyA6bWV0aDpgY2FsbF9sYXRlcmAuCisKKyAgIEFuIGluc3RhbmNlIG9mIDpjbGFzczpgYXN5bmNpby5IYW5kbGVgIGlzIHJldHVybmVkLCB3aGljaCBjYW4gYmUKKyAgIHVzZWQgdG8gY2FuY2VsIHRoZSBjYWxsYmFjay4KKworICAgOnJlZjpgVXNlIGZ1bmN0b29scy5wYXJ0aWFsIHRvIHBhc3Mga2V5d29yZHMgdG8gdGhlIGNhbGxiYWNrCisgICA8YXN5bmNpby1wYXNzLWtleXdvcmRzPmAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AudGltZSgpCisKKyAgIFJldHVybiB0aGUgY3VycmVudCB0aW1lLCBhcyBhIDpjbGFzczpgZmxvYXRgIHZhbHVlLCBhY2NvcmRpbmcgdG8gdGhlCisgICBldmVudCBsb29wJ3MgaW50ZXJuYWwgY2xvY2suCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOmZ1bmM6YGFzeW5jaW8uc2xlZXBgIGZ1bmN0aW9uLgorCisKK1Rhc2tzCistLS0tLQorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNyZWF0ZV90YXNrKGNvcm8pCisKKyAgIFNjaGVkdWxlIHRoZSBleGVjdXRpb24gb2YgYSA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YDogd3JhcCBpdCBpbgorICAgYSBmdXR1cmUuIFJldHVybiBhIDpjbGFzczpgVGFza2Agb2JqZWN0LgorCisgICBUaGlyZC1wYXJ0eSBldmVudCBsb29wcyBjYW4gdXNlIHRoZWlyIG93biBzdWJjbGFzcyBvZiA6Y2xhc3M6YFRhc2tgIGZvcgorICAgaW50ZXJvcGVyYWJpbGl0eS4gSW4gdGhpcyBjYXNlLCB0aGUgcmVzdWx0IHR5cGUgaXMgYSBzdWJjbGFzcyBvZgorICAgOmNsYXNzOmBUYXNrYC4KKworICAgVGhpcyBtZXRob2Qgd2FzIGFkZGVkIGluIFB5dGhvbiAzLjQuMi4gVXNlIHRoZSA6ZnVuYzpgYXN5bmNgIGZ1bmN0aW9uIHRvCisgICBzdXBwb3J0IGFsc28gb2xkZXIgUHl0aG9uIHZlcnNpb25zLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuMgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNldF90YXNrX2ZhY3RvcnkoZmFjdG9yeSkKKworICAgU2V0IGEgdGFzayBmYWN0b3J5IHRoYXQgd2lsbCBiZSB1c2VkIGJ5CisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AuCisKKyAgIElmICpmYWN0b3J5KiBpcyBgYE5vbmVgYCB0aGUgZGVmYXVsdCB0YXNrIGZhY3Rvcnkgd2lsbCBiZSBzZXQuCisKKyAgIElmICpmYWN0b3J5KiBpcyBhICpjYWxsYWJsZSosIGl0IHNob3VsZCBoYXZlIGEgc2lnbmF0dXJlIG1hdGNoaW5nCisgICBgYChsb29wLCBjb3JvKWBgLCB3aGVyZSAqbG9vcCogd2lsbCBiZSBhIHJlZmVyZW5jZSB0byB0aGUgYWN0aXZlCisgICBldmVudCBsb29wLCAqY29ybyogd2lsbCBiZSBhIGNvcm91dGluZSBvYmplY3QuICBUaGUgY2FsbGFibGUKKyAgIG11c3QgcmV0dXJuIGFuIDpjbGFzczpgYXN5bmNpby5GdXR1cmVgIGNvbXBhdGlibGUgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuNAorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmdldF90YXNrX2ZhY3RvcnkoKQorCisgICBSZXR1cm4gYSB0YXNrIGZhY3RvcnksIG9yIGBgTm9uZWBgIGlmIHRoZSBkZWZhdWx0IG9uZSBpcyBpbiB1c2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNC40CisKKworQ3JlYXRpbmcgY29ubmVjdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb24ocHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsIFwqLCBzc2w9Tm9uZSwgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTAsIHNvY2s9Tm9uZSwgbG9jYWxfYWRkcj1Ob25lLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSkKKworICAgQ3JlYXRlIGEgc3RyZWFtaW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uIHRvIGEgZ2l2ZW4gSW50ZXJuZXQgKmhvc3QqIGFuZAorICAgKnBvcnQqOiBzb2NrZXQgZmFtaWx5IDpweTpkYXRhOmB+c29ja2V0LkFGX0lORVRgIG9yCisgICA6cHk6ZGF0YTpgfnNvY2tldC5BRl9JTkVUNmAgZGVwZW5kaW5nIG9uICpob3N0KiAob3IgKmZhbWlseSogaWYgc3BlY2lmaWVkKSwKKyAgIHNvY2tldCB0eXBlIDpweTpkYXRhOmB+c29ja2V0LlNPQ0tfU1RSRUFNYC4gICpwcm90b2NvbF9mYWN0b3J5KiBtdXN0IGJlIGEKKyAgIGNhbGxhYmxlIHJldHVybmluZyBhIDpyZWY6YHByb3RvY29sIDxhc3luY2lvLXByb3RvY29sPmAgaW5zdGFuY2UuCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YCB3aGljaCB3aWxsIHRyeSB0bworICAgZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uIGluIHRoZSBiYWNrZ3JvdW5kLiAgV2hlbiBzdWNjZXNzZnVsLCB0aGUKKyAgIGNvcm91dGluZSByZXR1cm5zIGEgYGAodHJhbnNwb3J0LCBwcm90b2NvbClgYCBwYWlyLgorCisgICBUaGUgY2hyb25vbG9naWNhbCBzeW5vcHNpcyBvZiB0aGUgdW5kZXJseWluZyBvcGVyYXRpb24gaXMgYXMgZm9sbG93czoKKworICAgIy4gVGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCBhIDpyZWY6YHRyYW5zcG9ydCA8YXN5bmNpby10cmFuc3BvcnQ+YAorICAgICAgaXMgY3JlYXRlZCB0byByZXByZXNlbnQgaXQuCisKKyAgICMuICpwcm90b2NvbF9mYWN0b3J5KiBpcyBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMgYW5kIG11c3QgcmV0dXJuIGEKKyAgICAgIDpyZWY6YHByb3RvY29sIDxhc3luY2lvLXByb3RvY29sPmAgaW5zdGFuY2UuCisKKyAgICMuIFRoZSBwcm90b2NvbCBpbnN0YW5jZSBpcyB0aWVkIHRvIHRoZSB0cmFuc3BvcnQsIGFuZCBpdHMKKyAgICAgIDptZXRoOmBjb25uZWN0aW9uX21hZGVgIG1ldGhvZCBpcyBjYWxsZWQuCisKKyAgICMuIFRoZSBjb3JvdXRpbmUgcmV0dXJucyBzdWNjZXNzZnVsbHkgd2l0aCB0aGUgYGAodHJhbnNwb3J0LCBwcm90b2NvbClgYAorICAgICAgcGFpci4KKworICAgVGhlIGNyZWF0ZWQgdHJhbnNwb3J0IGlzIGFuIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBiaWRpcmVjdGlvbmFsIHN0cmVhbS4KKworICAgLi4gbm90ZTo6CisgICAgICAqcHJvdG9jb2xfZmFjdG9yeSogY2FuIGJlIGFueSBraW5kIG9mIGNhbGxhYmxlLCBub3QgbmVjZXNzYXJpbHkKKyAgICAgIGEgY2xhc3MuICBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gdXNlIGEgcHJlLWNyZWF0ZWQKKyAgICAgIHByb3RvY29sIGluc3RhbmNlLCB5b3UgY2FuIHBhc3MgYGBsYW1iZGE6IG15X3Byb3RvY29sYGAuCisKKyAgIE9wdGlvbnMgYWxsb3dpbmcgdG8gY2hhbmdlIGhvdyB0aGUgY29ubmVjdGlvbiBpcyBjcmVhdGVkOgorCisgICAqICpzc2wqOiBpZiBnaXZlbiBhbmQgbm90IGZhbHNlLCBhIFNTTC9UTFMgdHJhbnNwb3J0IGlzIGNyZWF0ZWQKKyAgICAgKGJ5IGRlZmF1bHQgYSBwbGFpbiBUQ1AgdHJhbnNwb3J0IGlzIGNyZWF0ZWQpLiAgSWYgKnNzbCogaXMKKyAgICAgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QsIHRoaXMgY29udGV4dCBpcyB1c2VkIHRvIGNyZWF0ZQorICAgICB0aGUgdHJhbnNwb3J0OyBpZiAqc3NsKiBpcyA6Y29uc3Q6YFRydWVgLCBhIGNvbnRleHQgd2l0aCBzb21lCisgICAgIHVuc3BlY2lmaWVkIGRlZmF1bHQgc2V0dGluZ3MgaXMgdXNlZC4KKworICAgICAuLiBzZWVhbHNvOjogOnJlZjpgU1NML1RMUyBzZWN1cml0eSBjb25zaWRlcmF0aW9ucyA8c3NsLXNlY3VyaXR5PmAKKworICAgKiAqc2VydmVyX2hvc3RuYW1lKiwgaXMgb25seSBmb3IgdXNlIHRvZ2V0aGVyIHdpdGggKnNzbCosCisgICAgIGFuZCBzZXRzIG9yIG92ZXJyaWRlcyB0aGUgaG9zdG5hbWUgdGhhdCB0aGUgdGFyZ2V0IHNlcnZlcidzIGNlcnRpZmljYXRlCisgICAgIHdpbGwgYmUgbWF0Y2hlZCBhZ2FpbnN0LiAgQnkgZGVmYXVsdCB0aGUgdmFsdWUgb2YgdGhlICpob3N0KiBhcmd1bWVudAorICAgICBpcyB1c2VkLiAgSWYgKmhvc3QqIGlzIGVtcHR5LCB0aGVyZSBpcyBubyBkZWZhdWx0IGFuZCB5b3UgbXVzdCBwYXNzIGEKKyAgICAgdmFsdWUgZm9yICpzZXJ2ZXJfaG9zdG5hbWUqLiAgSWYgKnNlcnZlcl9ob3N0bmFtZSogaXMgYW4gZW1wdHkKKyAgICAgc3RyaW5nLCBob3N0bmFtZSBtYXRjaGluZyBpcyBkaXNhYmxlZCAod2hpY2ggaXMgYSBzZXJpb3VzIHNlY3VyaXR5CisgICAgIHJpc2ssIGFsbG93aW5nIGZvciBtYW4taW4tdGhlLW1pZGRsZS1hdHRhY2tzKS4KKworICAgKiAqZmFtaWx5KiwgKnByb3RvKiwgKmZsYWdzKiBhcmUgdGhlIG9wdGlvbmFsIGFkZHJlc3MgZmFtaWx5LCBwcm90b2NvbAorICAgICBhbmQgZmxhZ3MgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8gZ2V0YWRkcmluZm8oKSBmb3IgKmhvc3QqIHJlc29sdXRpb24uCisgICAgIElmIGdpdmVuLCB0aGVzZSBzaG91bGQgYWxsIGJlIGludGVnZXJzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgOm1vZDpgc29ja2V0YCBtb2R1bGUgY29uc3RhbnRzLgorCisgICAqICpzb2NrKiwgaWYgZ2l2ZW4sIHNob3VsZCBiZSBhbiBleGlzdGluZywgYWxyZWFkeSBjb25uZWN0ZWQKKyAgICAgOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBvYmplY3QgdG8gYmUgdXNlZCBieSB0aGUgdHJhbnNwb3J0LgorICAgICBJZiAqc29jayogaXMgZ2l2ZW4sIG5vbmUgb2YgKmhvc3QqLCAqcG9ydCosICpmYW1pbHkqLCAqcHJvdG8qLCAqZmxhZ3MqCisgICAgIGFuZCAqbG9jYWxfYWRkciogc2hvdWxkIGJlIHNwZWNpZmllZC4KKworICAgKiAqbG9jYWxfYWRkciosIGlmIGdpdmVuLCBpcyBhIGBgKGxvY2FsX2hvc3QsIGxvY2FsX3BvcnQpYGAgdHVwbGUgdXNlZAorICAgICB0byBiaW5kIHRoZSBzb2NrZXQgdG8gbG9jYWxseS4gIFRoZSAqbG9jYWxfaG9zdCogYW5kICpsb2NhbF9wb3J0KgorICAgICBhcmUgbG9va2VkIHVwIHVzaW5nIGdldGFkZHJpbmZvKCksIHNpbWlsYXJseSB0byAqaG9zdCogYW5kICpwb3J0Ki4KKworICAgT24gV2luZG93cyB3aXRoIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgLCBTU0wvVExTIGlzIG5vdCBzdXBwb3J0ZWQuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOmZ1bmM6YG9wZW5fY29ubmVjdGlvbmAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gZ2V0IGEgcGFpciBvZgorICAgICAgKDpjbGFzczpgU3RyZWFtUmVhZGVyYCwgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgKSBpbnN0ZWFkIG9mIGEgcHJvdG9jb2wuCisKKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQocHJvdG9jb2xfZmFjdG9yeSwgbG9jYWxfYWRkcj1Ob25lLCByZW1vdGVfYWRkcj1Ob25lLCBcKiwgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTAsIHJldXNlX2FkZHJlc3M9Tm9uZSwgcmV1c2VfcG9ydD1Ob25lLCBhbGxvd19icm9hZGNhc3Q9Tm9uZSwgc29jaz1Ob25lKQorCisgICBDcmVhdGUgZGF0YWdyYW0gY29ubmVjdGlvbjogc29ja2V0IGZhbWlseSA6cHk6ZGF0YTpgfnNvY2tldC5BRl9JTkVUYCBvcgorICAgOnB5OmRhdGE6YH5zb2NrZXQuQUZfSU5FVDZgIGRlcGVuZGluZyBvbiAqaG9zdCogKG9yICpmYW1pbHkqIGlmIHNwZWNpZmllZCksCisgICBzb2NrZXQgdHlwZSA6cHk6ZGF0YTpgfnNvY2tldC5TT0NLX0RHUkFNYC4gKnByb3RvY29sX2ZhY3RvcnkqIG11c3QgYmUgYQorICAgY2FsbGFibGUgcmV0dXJuaW5nIGEgOnJlZjpgcHJvdG9jb2wgPGFzeW5jaW8tcHJvdG9jb2w+YCBpbnN0YW5jZS4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gIHdoaWNoIHdpbGwgdHJ5IHRvCisgICBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gaW4gdGhlIGJhY2tncm91bmQuICBXaGVuIHN1Y2Nlc3NmdWwsIHRoZQorICAgY29yb3V0aW5lIHJldHVybnMgYSBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgIHBhaXIuCisKKyAgIE9wdGlvbnMgY2hhbmdpbmcgaG93IHRoZSBjb25uZWN0aW9uIGlzIGNyZWF0ZWQ6CisKKyAgICogKmxvY2FsX2FkZHIqLCBpZiBnaXZlbiwgaXMgYSBgYChsb2NhbF9ob3N0LCBsb2NhbF9wb3J0KWBgIHR1cGxlIHVzZWQKKyAgICAgdG8gYmluZCB0aGUgc29ja2V0IHRvIGxvY2FsbHkuICBUaGUgKmxvY2FsX2hvc3QqIGFuZCAqbG9jYWxfcG9ydCoKKyAgICAgYXJlIGxvb2tlZCB1cCB1c2luZyA6bWV0aDpgZ2V0YWRkcmluZm9gLgorCisgICAqICpyZW1vdGVfYWRkciosIGlmIGdpdmVuLCBpcyBhIGBgKHJlbW90ZV9ob3N0LCByZW1vdGVfcG9ydClgYCB0dXBsZSB1c2VkCisgICAgIHRvIGNvbm5lY3QgdGhlIHNvY2tldCB0byBhIHJlbW90ZSBhZGRyZXNzLiAgVGhlICpyZW1vdGVfaG9zdCogYW5kCisgICAgICpyZW1vdGVfcG9ydCogYXJlIGxvb2tlZCB1cCB1c2luZyA6bWV0aDpgZ2V0YWRkcmluZm9gLgorCisgICAqICpmYW1pbHkqLCAqcHJvdG8qLCAqZmxhZ3MqIGFyZSB0aGUgb3B0aW9uYWwgYWRkcmVzcyBmYW1pbHksIHByb3RvY29sCisgICAgIGFuZCBmbGFncyB0byBiZSBwYXNzZWQgdGhyb3VnaCB0byA6bWV0aDpgZ2V0YWRkcmluZm9gIGZvciAqaG9zdCoKKyAgICAgcmVzb2x1dGlvbi4gSWYgZ2l2ZW4sIHRoZXNlIHNob3VsZCBhbGwgYmUgaW50ZWdlcnMgZnJvbSB0aGUKKyAgICAgY29ycmVzcG9uZGluZyA6bW9kOmBzb2NrZXRgIG1vZHVsZSBjb25zdGFudHMuCisKKyAgICogKnJldXNlX2FkZHJlc3MqIHRlbGxzIHRoZSBrZXJuZWwgdG8gcmV1c2UgYSBsb2NhbCBzb2NrZXQgaW4KKyAgICAgVElNRV9XQUlUIHN0YXRlLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBuYXR1cmFsIHRpbWVvdXQgdG8KKyAgICAgZXhwaXJlLiBJZiBub3Qgc3BlY2lmaWVkIHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gVHJ1ZSBvbgorICAgICBVTklYLgorCisgICAqICpyZXVzZV9wb3J0KiB0ZWxscyB0aGUga2VybmVsIHRvIGFsbG93IHRoaXMgZW5kcG9pbnQgdG8gYmUgYm91bmQgdG8gdGhlCisgICAgIHNhbWUgcG9ydCBhcyBvdGhlciBleGlzdGluZyBlbmRwb2ludHMgYXJlIGJvdW5kIHRvLCBzbyBsb25nIGFzIHRoZXkgYWxsCisgICAgIHNldCB0aGlzIGZsYWcgd2hlbiBiZWluZyBjcmVhdGVkLiBUaGlzIG9wdGlvbiBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MKKyAgICAgYW5kIHNvbWUgVU5JWCdzLiBJZiB0aGUgOnB5OmRhdGE6YH5zb2NrZXQuU09fUkVVU0VQT1JUYCBjb25zdGFudCBpcyBub3QKKyAgICAgZGVmaW5lZCB0aGVuIHRoaXMgY2FwYWJpbGl0eSBpcyB1bnN1cHBvcnRlZC4KKworICAgKiAqYWxsb3dfYnJvYWRjYXN0KiB0ZWxscyB0aGUga2VybmVsIHRvIGFsbG93IHRoaXMgZW5kcG9pbnQgdG8gc2VuZAorICAgICBtZXNzYWdlcyB0byB0aGUgYnJvYWRjYXN0IGFkZHJlc3MuCisKKyAgICogKnNvY2sqIGNhbiBvcHRpb25hbGx5IGJlIHNwZWNpZmllZCBpbiBvcmRlciB0byB1c2UgYSBwcmVleGlzdGluZywKKyAgICAgYWxyZWFkeSBjb25uZWN0ZWQsIDpjbGFzczpgc29ja2V0LnNvY2tldGAgb2JqZWN0IHRvIGJlIHVzZWQgYnkgdGhlCisgICAgIHRyYW5zcG9ydC4gSWYgc3BlY2lmaWVkLCAqbG9jYWxfYWRkciogYW5kICpyZW1vdGVfYWRkciogc2hvdWxkIGJlIG9taXR0ZWQKKyAgICAgKG11c3QgYmUgOmNvbnN0OmBOb25lYCkuCisKKyAgIE9uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCwgdGhpcyBtZXRob2QgaXMgbm90IHN1cHBvcnRlZC4KKworICAgU2VlIDpyZWY6YFVEUCBlY2hvIGNsaWVudCBwcm90b2NvbCA8YXN5bmNpby11ZHAtZWNoby1jbGllbnQtcHJvdG9jb2w+YCBhbmQKKyAgIDpyZWY6YFVEUCBlY2hvIHNlcnZlciBwcm90b2NvbCA8YXN5bmNpby11ZHAtZWNoby1zZXJ2ZXItcHJvdG9jb2w+YCBleGFtcGxlcy4KKworCisuLiBjb3JvdXRpbmVtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24ocHJvdG9jb2xfZmFjdG9yeSwgcGF0aCwgXCosIHNzbD1Ob25lLCBzb2NrPU5vbmUsIHNlcnZlcl9ob3N0bmFtZT1Ob25lKQorCisgICBDcmVhdGUgVU5JWCBjb25uZWN0aW9uOiBzb2NrZXQgZmFtaWx5IDpweTpkYXRhOmB+c29ja2V0LkFGX1VOSVhgLCBzb2NrZXQKKyAgIHR5cGUgOnB5OmRhdGE6YH5zb2NrZXQuU09DS19TVFJFQU1gLiBUaGUgOnB5OmRhdGE6YH5zb2NrZXQuQUZfVU5JWGAgc29ja2V0CisgICBmYW1pbHkgaXMgdXNlZCB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIHByb2Nlc3NlcyBvbiB0aGUgc2FtZSBtYWNoaW5lCisgICBlZmZpY2llbnRseS4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gIHdoaWNoIHdpbGwgdHJ5IHRvCisgICBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gaW4gdGhlIGJhY2tncm91bmQuICBXaGVuIHN1Y2Nlc3NmdWwsIHRoZQorICAgY29yb3V0aW5lIHJldHVybnMgYSBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgIHBhaXIuCisKKyAgIFNlZSB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb25gIG1ldGhvZCBmb3IgcGFyYW1ldGVycy4KKworICAgQXZhaWxhYmlsaXR5OiBVTklYLgorCisKK0NyZWF0aW5nIGxpc3RlbmluZyBjb25uZWN0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcihwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgXCosIGZhbWlseT1zb2NrZXQuQUZfVU5TUEVDLCBmbGFncz1zb2NrZXQuQUlfUEFTU0lWRSwgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUsIHJldXNlX2FkZHJlc3M9Tm9uZSwgcmV1c2VfcG9ydD1Ob25lKQorCisgICBDcmVhdGUgYSBUQ1Agc2VydmVyIChzb2NrZXQgdHlwZSA6ZGF0YTpgfnNvY2tldC5TT0NLX1NUUkVBTWApIGJvdW5kIHRvCisgICAqaG9zdCogYW5kICpwb3J0Ki4KKworICAgUmV0dXJuIGEgOmNsYXNzOmBTZXJ2ZXJgIG9iamVjdCwgaXRzIDphdHRyOmB+U2VydmVyLnNvY2tldHNgIGF0dHJpYnV0ZQorICAgY29udGFpbnMgY3JlYXRlZCBzb2NrZXRzLiBVc2UgdGhlIDptZXRoOmBTZXJ2ZXIuY2xvc2VgIG1ldGhvZCB0byBzdG9wIHRoZQorICAgc2VydmVyOiBjbG9zZSBsaXN0ZW5pbmcgc29ja2V0cy4KKworICAgUGFyYW1ldGVyczoKKworICAgKiBUaGUgKmhvc3QqIHBhcmFtZXRlciBjYW4gYmUgYSBzdHJpbmcsIGluIHRoYXQgY2FzZSB0aGUgVENQIHNlcnZlciBpcworICAgICBib3VuZCB0byAqaG9zdCogYW5kICpwb3J0Ki4gVGhlICpob3N0KiBwYXJhbWV0ZXIgY2FuIGFsc28gYmUgYSBzZXF1ZW5jZQorICAgICBvZiBzdHJpbmdzIGFuZCBpbiB0aGF0IGNhc2UgdGhlIFRDUCBzZXJ2ZXIgaXMgYm91bmQgdG8gYWxsIGhvc3RzIG9mIHRoZQorICAgICBzZXF1ZW5jZS4gSWYgKmhvc3QqIGlzIGFuIGVtcHR5IHN0cmluZyBvciBgYE5vbmVgYCwgYWxsIGludGVyZmFjZXMgYXJlCisgICAgIGFzc3VtZWQgYW5kIGEgbGlzdCBvZiBtdWx0aXBsZSBzb2NrZXRzIHdpbGwgYmUgcmV0dXJuZWQgKG1vc3QgbGlrZWx5IG9uZQorICAgICBmb3IgSVB2NCBhbmQgYW5vdGhlciBvbmUgZm9yIElQdjYpLgorCisgICAqICpmYW1pbHkqIGNhbiBiZSBzZXQgdG8gZWl0aGVyIDpkYXRhOmBzb2NrZXQuQUZfSU5FVGAgb3IKKyAgICAgOmRhdGE6YH5zb2NrZXQuQUZfSU5FVDZgIHRvIGZvcmNlIHRoZSBzb2NrZXQgdG8gdXNlIElQdjQgb3IgSVB2Ni4gSWYgbm90IHNldAorICAgICBpdCB3aWxsIGJlIGRldGVybWluZWQgZnJvbSBob3N0IChkZWZhdWx0cyB0byA6ZGF0YTpgc29ja2V0LkFGX1VOU1BFQ2ApLgorCisgICAqICpmbGFncyogaXMgYSBiaXRtYXNrIGZvciA6bWV0aDpgZ2V0YWRkcmluZm9gLgorCisgICAqICpzb2NrKiBjYW4gb3B0aW9uYWxseSBiZSBzcGVjaWZpZWQgaW4gb3JkZXIgdG8gdXNlIGEgcHJlZXhpc3RpbmcKKyAgICAgc29ja2V0IG9iamVjdC4gSWYgc3BlY2lmaWVkLCAqaG9zdCogYW5kICpwb3J0KiBzaG91bGQgYmUgb21pdHRlZCAobXVzdCBiZQorICAgICA6Y29uc3Q6YE5vbmVgKS4KKworICAgKiAqYmFja2xvZyogaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb25uZWN0aW9ucyBwYXNzZWQgdG8KKyAgICAgOm1ldGg6YH5zb2NrZXQuc29ja2V0Lmxpc3RlbmAgKGRlZmF1bHRzIHRvIDEwMCkuCisKKyAgICogKnNzbCogY2FuIGJlIHNldCB0byBhbiA6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgdG8gZW5hYmxlIFNTTCBvdmVyIHRoZQorICAgICBhY2NlcHRlZCBjb25uZWN0aW9ucy4KKworICAgKiAqcmV1c2VfYWRkcmVzcyogdGVsbHMgdGhlIGtlcm5lbCB0byByZXVzZSBhIGxvY2FsIHNvY2tldCBpbgorICAgICBUSU1FX1dBSVQgc3RhdGUsIHdpdGhvdXQgd2FpdGluZyBmb3IgaXRzIG5hdHVyYWwgdGltZW91dCB0bworICAgICBleHBpcmUuIElmIG5vdCBzcGVjaWZpZWQgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byBUcnVlIG9uCisgICAgIFVOSVguCisKKyAgICogKnJldXNlX3BvcnQqIHRlbGxzIHRoZSBrZXJuZWwgdG8gYWxsb3cgdGhpcyBlbmRwb2ludCB0byBiZSBib3VuZCB0byB0aGUKKyAgICAgc2FtZSBwb3J0IGFzIG90aGVyIGV4aXN0aW5nIGVuZHBvaW50cyBhcmUgYm91bmQgdG8sIHNvIGxvbmcgYXMgdGhleSBhbGwKKyAgICAgc2V0IHRoaXMgZmxhZyB3aGVuIGJlaW5nIGNyZWF0ZWQuIFRoaXMgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgb24KKyAgICAgV2luZG93cy4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICBPbiBXaW5kb3dzIHdpdGggOmNsYXNzOmBQcm9hY3RvckV2ZW50TG9vcGAsIFNTTC9UTFMgaXMgbm90IHN1cHBvcnRlZC4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIFRoZSBmdW5jdGlvbiA6ZnVuYzpgc3RhcnRfc2VydmVyYCBjcmVhdGVzIGEgKDpjbGFzczpgU3RyZWFtUmVhZGVyYCwKKyAgICAgIDpjbGFzczpgU3RyZWFtV3JpdGVyYCkgcGFpciBhbmQgY2FsbHMgYmFjayBhIGZ1bmN0aW9uIHdpdGggdGhpcyBwYWlyLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC40CisKKyAgICAgIFRoZSAqaG9zdCogcGFyYW1ldGVyIGNhbiBub3cgYmUgYSBzZXF1ZW5jZSBvZiBzdHJpbmdzLgorCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3AuY3JlYXRlX3VuaXhfc2VydmVyKHByb3RvY29sX2ZhY3RvcnksIHBhdGg9Tm9uZSwgXCosIHNvY2s9Tm9uZSwgYmFja2xvZz0xMDAsIHNzbD1Ob25lKQorCisgICBTaW1pbGFyIHRvIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgLCBidXQgc3BlY2lmaWMgdG8gdGhlCisgICBzb2NrZXQgZmFtaWx5IDpweTpkYXRhOmB+c29ja2V0LkFGX1VOSVhgLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIEF2YWlsYWJpbGl0eTogVU5JWC4KKworCitXYXRjaCBmaWxlIGRlc2NyaXB0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCwgb25seSBzb2NrZXQgaGFuZGxlcyBhcmUgc3VwcG9ydGVkCisoZXg6IHBpcGUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgbm90IHN1cHBvcnRlZCkuCisKK09uIFdpbmRvd3Mgd2l0aCA6Y2xhc3M6YFByb2FjdG9yRXZlbnRMb29wYCwgdGhlc2UgbWV0aG9kcyBhcmUgbm90IHN1cHBvcnRlZC4KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5hZGRfcmVhZGVyKGZkLCBjYWxsYmFjaywgXCphcmdzKQorCisgICBTdGFydCB3YXRjaGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkIGF2YWlsYWJpbGl0eSBhbmQgdGhlbiBjYWxsIHRoZQorICAgKmNhbGxiYWNrKiB3aXRoIHNwZWNpZmllZCBhcmd1bWVudHMuCisKKyAgIDpyZWY6YFVzZSBmdW5jdG9vbHMucGFydGlhbCB0byBwYXNzIGtleXdvcmRzIHRvIHRoZSBjYWxsYmFjaworICAgPGFzeW5jaW8tcGFzcy1rZXl3b3Jkcz5gLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnJlbW92ZV9yZWFkZXIoZmQpCisKKyAgIFN0b3Agd2F0Y2hpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBmb3IgcmVhZCBhdmFpbGFiaWxpdHkuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuYWRkX3dyaXRlcihmZCwgY2FsbGJhY2ssIFwqYXJncykKKworICAgU3RhcnQgd2F0Y2hpbmcgdGhlIGZpbGUgZGVzY3JpcHRvciBmb3Igd3JpdGUgYXZhaWxhYmlsaXR5IGFuZCB0aGVuIGNhbGwgdGhlCisgICAqY2FsbGJhY2sqIHdpdGggc3BlY2lmaWVkIGFyZ3VtZW50cy4KKworICAgOnJlZjpgVXNlIGZ1bmN0b29scy5wYXJ0aWFsIHRvIHBhc3Mga2V5d29yZHMgdG8gdGhlIGNhbGxiYWNrCisgICA8YXN5bmNpby1wYXNzLWtleXdvcmRzPmAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucmVtb3ZlX3dyaXRlcihmZCkKKworICAgU3RvcCB3YXRjaGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciB3cml0ZSBhdmFpbGFiaWxpdHkuCisKK1RoZSA6cmVmOmB3YXRjaCBhIGZpbGUgZGVzY3JpcHRvciBmb3IgcmVhZCBldmVudHMgPGFzeW5jaW8td2F0Y2gtcmVhZC1ldmVudD5gCitleGFtcGxlIHVzZXMgdGhlIGxvdy1sZXZlbCA6bWV0aDpgQmFzZUV2ZW50TG9vcC5hZGRfcmVhZGVyYCBtZXRob2QgdG8gcmVnaXN0ZXIKK3RoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSBzb2NrZXQuCisKKworTG93LWxldmVsIHNvY2tldCBvcGVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zb2NrX3JlY3Yoc29jaywgbmJ5dGVzKQorCisgICBSZWNlaXZlIGRhdGEgZnJvbSB0aGUgc29ja2V0LiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdAorICAgcmVwcmVzZW50aW5nIHRoZSBkYXRhIHJlY2VpdmVkLiAgVGhlIG1heGltdW0gYW1vdW50IG9mIGRhdGEgdG8gYmUgcmVjZWl2ZWQKKyAgIGF0IG9uY2UgaXMgc3BlY2lmaWVkIGJ5ICpuYnl0ZXMqLgorCisgICBXaXRoIDpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIGV2ZW50IGxvb3AsIHRoZSBzb2NrZXQgKnNvY2sqIG11c3QgYmUKKyAgIG5vbi1ibG9ja2luZy4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIDptZXRoOmBzb2NrZXQuc29ja2V0LnJlY3ZgIG1ldGhvZC4KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zb2NrX3NlbmRhbGwoc29jaywgZGF0YSkKKworICAgU2VuZCBkYXRhIHRvIHRoZSBzb2NrZXQuICBUaGUgc29ja2V0IG11c3QgYmUgY29ubmVjdGVkIHRvIGEgcmVtb3RlIHNvY2tldC4KKyAgIFRoaXMgbWV0aG9kIGNvbnRpbnVlcyB0byBzZW5kIGRhdGEgZnJvbSAqZGF0YSogdW50aWwgZWl0aGVyIGFsbCBkYXRhIGhhcworICAgYmVlbiBzZW50IG9yIGFuIGVycm9yIG9jY3Vycy4gIGBgTm9uZWBgIGlzIHJldHVybmVkIG9uIHN1Y2Nlc3MuICBPbiBlcnJvciwKKyAgIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQsIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gZGV0ZXJtaW5lIGhvdyBtdWNoIGRhdGEsIGlmCisgICBhbnksIHdhcyBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGJ5IHRoZSByZWNlaXZpbmcgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgorCisgICBXaXRoIDpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIGV2ZW50IGxvb3AsIHRoZSBzb2NrZXQgKnNvY2sqIG11c3QgYmUKKyAgIG5vbi1ibG9ja2luZy4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIDptZXRoOmBzb2NrZXQuc29ja2V0LnNlbmRhbGxgIG1ldGhvZC4KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcmVzcykKKworICAgQ29ubmVjdCB0byBhIHJlbW90ZSBzb2NrZXQgYXQgKmFkZHJlc3MqLgorCisgICBUaGUgKmFkZHJlc3MqIG11c3QgYmUgYWxyZWFkeSByZXNvbHZlZCB0byBhdm9pZCB0aGUgdHJhcCBvZiBoYW5naW5nIHRoZQorICAgZW50aXJlIGV2ZW50IGxvb3Agd2hlbiB0aGUgYWRkcmVzcyByZXF1aXJlcyBkb2luZyBhIEROUyBsb29rdXAuICBGb3IKKyAgIGV4YW1wbGUsIGl0IG11c3QgYmUgYW4gSVAgYWRkcmVzcywgbm90IGFuIGhvc3RuYW1lLCBmb3IKKyAgIDpweTpkYXRhOmB+c29ja2V0LkFGX0lORVRgIGFuZCA6cHk6ZGF0YTpgfnNvY2tldC5BRl9JTkVUNmAgYWRkcmVzcyBmYW1pbGllcy4KKyAgIFVzZSA6bWV0aDpgZ2V0YWRkcmluZm9gIHRvIHJlc29sdmUgdGhlIGhvc3RuYW1lIGFzeW5jaHJvbm91c2x5LgorCisgICBXaXRoIDpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIGV2ZW50IGxvb3AsIHRoZSBzb2NrZXQgKnNvY2sqIG11c3QgYmUKKyAgIG5vbi1ibG9ja2luZy4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBzZWVhbHNvOjoKKworICAgICAgVGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uYCBtZXRob2QsIHRoZQorICAgICAgOmZ1bmM6YG9wZW5fY29ubmVjdGlvbmAgZnVuY3Rpb24gYW5kIHRoZSA6bWV0aDpgc29ja2V0LnNvY2tldC5jb25uZWN0YAorICAgICAgbWV0aG9kLgorCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3Auc29ja19hY2NlcHQoc29jaykKKworICAgQWNjZXB0IGEgY29ubmVjdGlvbi4gVGhlIHNvY2tldCBtdXN0IGJlIGJvdW5kIHRvIGFuIGFkZHJlc3MgYW5kIGxpc3RlbmluZworICAgZm9yIGNvbm5lY3Rpb25zLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcGFpciBgYChjb25uLCBhZGRyZXNzKWBgIHdoZXJlICpjb25uKgorICAgaXMgYSAqbmV3KiBzb2NrZXQgb2JqZWN0IHVzYWJsZSB0byBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24sCisgICBhbmQgKmFkZHJlc3MqIGlzIHRoZSBhZGRyZXNzIGJvdW5kIHRvIHRoZSBzb2NrZXQgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUKKyAgIGNvbm5lY3Rpb24uCisKKyAgIFRoZSBzb2NrZXQgKnNvY2sqIG11c3QgYmUgbm9uLWJsb2NraW5nLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcmAgbWV0aG9kLCB0aGUgOmZ1bmM6YHN0YXJ0X3NlcnZlcmAKKyAgICAgIGZ1bmN0aW9uIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5zb2NrZXQuYWNjZXB0YCBtZXRob2QuCisKKworUmVzb2x2ZSBob3N0IG5hbWUKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3AuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgXCosIGZhbWlseT0wLCB0eXBlPTAsIHByb3RvPTAsIGZsYWdzPTApCisKKyAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YCwgc2ltaWxhciB0bworICAgOm1ldGg6YHNvY2tldC5nZXRhZGRyaW5mb2AgZnVuY3Rpb24gYnV0IG5vbi1ibG9ja2luZy4KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5nZXRuYW1laW5mbyhzb2NrYWRkciwgZmxhZ3M9MCkKKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLCBzaW1pbGFyIHRvCisgICA6bWV0aDpgc29ja2V0LmdldG5hbWVpbmZvYCBmdW5jdGlvbiBidXQgbm9uLWJsb2NraW5nLgorCisKK0Nvbm5lY3QgcGlwZXMKKy0tLS0tLS0tLS0tLS0KKworT24gV2luZG93cyB3aXRoIDpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgLCB0aGVzZSBtZXRob2RzIGFyZSBub3Qgc3VwcG9ydGVkLgorVXNlIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIHRvIHN1cHBvcnQgcGlwZXMgb24gV2luZG93cy4KKworLi4gY29yb3V0aW5lbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5jb25uZWN0X3JlYWRfcGlwZShwcm90b2NvbF9mYWN0b3J5LCBwaXBlKQorCisgICBSZWdpc3RlciByZWFkIHBpcGUgaW4gZXZlbnRsb29wLgorCisgICAqcHJvdG9jb2xfZmFjdG9yeSogc2hvdWxkIGluc3RhbnRpYXRlIG9iamVjdCB3aXRoIDpjbGFzczpgUHJvdG9jb2xgCisgICBpbnRlcmZhY2UuICAqcGlwZSogaXMgYSA6dGVybTpgZmlsZS1saWtlIG9iamVjdCA8ZmlsZSBvYmplY3Q+YC4KKyAgIFJldHVybiBwYWlyIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAsIHdoZXJlICp0cmFuc3BvcnQqIHN1cHBvcnRzIHRoZQorICAgOmNsYXNzOmBSZWFkVHJhbnNwb3J0YCBpbnRlcmZhY2UuCisKKyAgIFdpdGggOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAgZXZlbnQgbG9vcCwgdGhlICpwaXBlKiBpcyBzZXQgdG8KKyAgIG5vbi1ibG9ja2luZyBtb2RlLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3AuY29ubmVjdF93cml0ZV9waXBlKHByb3RvY29sX2ZhY3RvcnksIHBpcGUpCisKKyAgIFJlZ2lzdGVyIHdyaXRlIHBpcGUgaW4gZXZlbnRsb29wLgorCisgICAqcHJvdG9jb2xfZmFjdG9yeSogc2hvdWxkIGluc3RhbnRpYXRlIG9iamVjdCB3aXRoIDpjbGFzczpgQmFzZVByb3RvY29sYAorICAgaW50ZXJmYWNlLiAqcGlwZSogaXMgOnRlcm06YGZpbGUtbGlrZSBvYmplY3QgPGZpbGUgb2JqZWN0PmAuCisgICBSZXR1cm4gcGFpciBgYCh0cmFuc3BvcnQsIHByb3RvY29sKWBgLCB3aGVyZSAqdHJhbnNwb3J0KiBzdXBwb3J0cworICAgOmNsYXNzOmBXcml0ZVRyYW5zcG9ydGAgaW50ZXJmYWNlLgorCisgICBXaXRoIDpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIGV2ZW50IGxvb3AsIHRoZSAqcGlwZSogaXMgc2V0IHRvCisgICBub24tYmxvY2tpbmcgbW9kZS4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLnN1YnByb2Nlc3NfZXhlY2AgYW5kCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX3NoZWxsYCBtZXRob2RzLgorCisKK1VOSVggc2lnbmFscworLS0tLS0tLS0tLS0tCisKK0F2YWlsYWJpbGl0eTogVU5JWCBvbmx5LgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWdudW0sIGNhbGxiYWNrLCBcKmFyZ3MpCisKKyAgIEFkZCBhIGhhbmRsZXIgZm9yIGEgc2lnbmFsLgorCisgICBSYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCBpZiB0aGUgc2lnbmFsIG51bWJlciBpcyBpbnZhbGlkIG9yIHVuY2F0Y2hhYmxlLgorICAgUmFpc2UgOmV4YzpgUnVudGltZUVycm9yYCBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKworICAgOnJlZjpgVXNlIGZ1bmN0b29scy5wYXJ0aWFsIHRvIHBhc3Mga2V5d29yZHMgdG8gdGhlIGNhbGxiYWNrCisgICA8YXN5bmNpby1wYXNzLWtleXdvcmRzPmAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNpZykKKworICAgUmVtb3ZlIGEgaGFuZGxlciBmb3IgYSBzaWduYWwuCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiBhIHNpZ25hbCBoYW5kbGVyIHdhcyByZW1vdmVkLCBgYEZhbHNlYGAgaWYgbm90LgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDptb2Q6YHNpZ25hbGAgbW9kdWxlLgorCisKK0V4ZWN1dG9yCistLS0tLS0tLQorCitDYWxsIGEgZnVuY3Rpb24gaW4gYW4gOmNsYXNzOmB+Y29uY3VycmVudC5mdXR1cmVzLkV4ZWN1dG9yYCAocG9vbCBvZiB0aHJlYWRzIG9yCitwb29sIG9mIHByb2Nlc3NlcykuIEJ5IGRlZmF1bHQsIGFuIGV2ZW50IGxvb3AgdXNlcyBhIHRocmVhZCBwb29sIGV4ZWN1dG9yCisoOmNsYXNzOmB+Y29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcmApLgorCisuLiBjb3JvdXRpbmVtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnJ1bl9pbl9leGVjdXRvcihleGVjdXRvciwgZnVuYywgXCphcmdzKQorCisgICBBcnJhbmdlIGZvciBhICpmdW5jKiB0byBiZSBjYWxsZWQgaW4gdGhlIHNwZWNpZmllZCBleGVjdXRvci4KKworICAgVGhlICpleGVjdXRvciogYXJndW1lbnQgc2hvdWxkIGJlIGFuIDpjbGFzczpgfmNvbmN1cnJlbnQuZnV0dXJlcy5FeGVjdXRvcmAKKyAgIGluc3RhbmNlLiBUaGUgZGVmYXVsdCBleGVjdXRvciBpcyB1c2VkIGlmICpleGVjdXRvciogaXMgYGBOb25lYGAuCisKKyAgIDpyZWY6YFVzZSBmdW5jdG9vbHMucGFydGlhbCB0byBwYXNzIGtleXdvcmRzIHRvIHRoZSAqZnVuYyoKKyAgIDxhc3luY2lvLXBhc3Mta2V5d29yZHM+YC4KKworICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yKGV4ZWN1dG9yKQorCisgICBTZXQgdGhlIGRlZmF1bHQgZXhlY3V0b3IgdXNlZCBieSA6bWV0aDpgcnVuX2luX2V4ZWN1dG9yYC4KKworCitFcnJvciBIYW5kbGluZyBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGxvd3MgdG8gY3VzdG9taXplIGhvdyBleGNlcHRpb25zIGFyZSBoYW5kbGVkIGluIHRoZSBldmVudCBsb29wLgorCisuLiBtZXRob2Q6OiBCYXNlRXZlbnRMb29wLnNldF9leGNlcHRpb25faGFuZGxlcihoYW5kbGVyKQorCisgICBTZXQgKmhhbmRsZXIqIGFzIHRoZSBuZXcgZXZlbnQgbG9vcCBleGNlcHRpb24gaGFuZGxlci4KKworICAgSWYgKmhhbmRsZXIqIGlzIGBgTm9uZWBgLCB0aGUgZGVmYXVsdCBleGNlcHRpb24gaGFuZGxlciB3aWxsCisgICBiZSBzZXQuCisKKyAgIElmICpoYW5kbGVyKiBpcyBhIGNhbGxhYmxlIG9iamVjdCwgaXQgc2hvdWxkIGhhdmUgYQorICAgbWF0Y2hpbmcgc2lnbmF0dXJlIHRvIGBgKGxvb3AsIGNvbnRleHQpYGAsIHdoZXJlIGBgbG9vcGBgCisgICB3aWxsIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgZXZlbnQgbG9vcCwgYGBjb250ZXh0YGAKKyAgIHdpbGwgYmUgYSBgYGRpY3RgYCBvYmplY3QgKHNlZSA6bWV0aDpgY2FsbF9leGNlcHRpb25faGFuZGxlcmAKKyAgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgYWJvdXQgY29udGV4dCkuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorCisgICBEZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgYW5kIG5vIGV4Y2VwdGlvbgorICAgaGFuZGxlciBpcyBzZXQsIGFuZCBjYW4gYmUgY2FsbGVkIGJ5IGEgY3VzdG9tIGV4Y2VwdGlvbgorICAgaGFuZGxlciB0aGF0IHdhbnRzIHRvIGRlZmVyIHRvIHRoZSBkZWZhdWx0IGJlaGF2aW9yLgorCisgICAqY29udGV4dCogcGFyYW1ldGVyIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCisgICA6bWV0aDpgY2FsbF9leGNlcHRpb25faGFuZGxlcmAuCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorCisgICBDYWxsIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgZXhjZXB0aW9uIGhhbmRsZXIuCisKKyAgICpjb250ZXh0KiBpcyBhIGBgZGljdGBgIG9iamVjdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcga2V5cworICAgKG5ldyBrZXlzIG1heSBiZSBpbnRyb2R1Y2VkIGxhdGVyKToKKworICAgKiAnbWVzc2FnZSc6IEVycm9yIG1lc3NhZ2U7CisgICAqICdleGNlcHRpb24nIChvcHRpb25hbCk6IEV4Y2VwdGlvbiBvYmplY3Q7CisgICAqICdmdXR1cmUnIChvcHRpb25hbCk6IDpjbGFzczpgYXN5bmNpby5GdXR1cmVgIGluc3RhbmNlOworICAgKiAnaGFuZGxlJyAob3B0aW9uYWwpOiA6Y2xhc3M6YGFzeW5jaW8uSGFuZGxlYCBpbnN0YW5jZTsKKyAgICogJ3Byb3RvY29sJyAob3B0aW9uYWwpOiA6cmVmOmBQcm90b2NvbCA8YXN5bmNpby1wcm90b2NvbD5gIGluc3RhbmNlOworICAgKiAndHJhbnNwb3J0JyAob3B0aW9uYWwpOiA6cmVmOmBUcmFuc3BvcnQgPGFzeW5jaW8tdHJhbnNwb3J0PmAgaW5zdGFuY2U7CisgICAqICdzb2NrZXQnIChvcHRpb25hbCk6IDpjbGFzczpgc29ja2V0LnNvY2tldGAgaW5zdGFuY2UuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICAgTm90ZTogdGhpcyBtZXRob2Qgc2hvdWxkIG5vdCBiZSBvdmVybG9hZGVkIGluIHN1YmNsYXNzZWQKKyAgICAgICBldmVudCBsb29wcy4gIEZvciBhbnkgY3VzdG9tIGV4Y2VwdGlvbiBoYW5kbGluZywgdXNlCisgICAgICAgOm1ldGg6YHNldF9leGNlcHRpb25faGFuZGxlcigpYCBtZXRob2QuCisKK0RlYnVnIG1vZGUKKy0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogQmFzZUV2ZW50TG9vcC5nZXRfZGVidWcoKQorCisgICBHZXQgdGhlIGRlYnVnIG1vZGUgKDpjbGFzczpgYm9vbGApIG9mIHRoZSBldmVudCBsb29wLgorCisgICBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgYFRydWVgYCBpZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKKyAgIDplbnZ2YXI6YFBZVEhPTkFTWU5DSU9ERUJVR2AgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgYGBGYWxzZWBgCisgICBvdGhlcndpc2UuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNC4yCisKKy4uIG1ldGhvZDo6IEJhc2VFdmVudExvb3Auc2V0X2RlYnVnKGVuYWJsZWQ6IGJvb2wpCisKKyAgIFNldCB0aGUgZGVidWcgbW9kZSBvZiB0aGUgZXZlbnQgbG9vcC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjIKKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBkZWJ1ZyBtb2RlIG9mIGFzeW5jaW8gPGFzeW5jaW8tZGVidWctbW9kZT5gLgorCitTZXJ2ZXIKKy0tLS0tLQorCisuLiBjbGFzczo6IFNlcnZlcgorCisgICBTZXJ2ZXIgbGlzdGVuaW5nIG9uIHNvY2tldHMuCisKKyAgIE9iamVjdCBjcmVhdGVkIGJ5IHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfc2VydmVyYCBtZXRob2QgYW5kIHRoZQorICAgOmZ1bmM6YHN0YXJ0X3NlcnZlcmAgZnVuY3Rpb24uIERvbid0IGluc3RhbnRpYXRlIHRoZSBjbGFzcyBkaXJlY3RseS4KKworICAgLi4gbWV0aG9kOjogY2xvc2UoKQorCisgICAgICBTdG9wIHNlcnZpbmc6IGNsb3NlIGxpc3RlbmluZyBzb2NrZXRzIGFuZCBzZXQgdGhlIDphdHRyOmBzb2NrZXRzYAorICAgICAgYXR0cmlidXRlIHRvIGBgTm9uZWBgLgorCisgICAgICBUaGUgc29ja2V0cyB0aGF0IHJlcHJlc2VudCBleGlzdGluZyBpbmNvbWluZyBjbGllbnQgY29ubmVjdGlvbnMgYXJlCisgICAgICBsZWF2ZWQgb3Blbi4KKworICAgICAgVGhlIHNlcnZlciBpcyBjbG9zZWQgYXN5bmNob25vdXNseSwgdXNlIHRoZSA6bWV0aDpgd2FpdF9jbG9zZWRgIGNvcm91dGluZQorICAgICAgdG8gd2FpdCB1bnRpbCB0aGUgc2VydmVyIGlzIGNsb3NlZC4KKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogd2FpdF9jbG9zZWQoKQorCisgICAgICBXYWl0IHVudGlsIHRoZSA6bWV0aDpgY2xvc2VgIG1ldGhvZCBjb21wbGV0ZXMuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gYXR0cmlidXRlOjogc29ja2V0cworCisgICAgICBMaXN0IG9mIDpjbGFzczpgc29ja2V0LnNvY2tldGAgb2JqZWN0cyB0aGUgc2VydmVyIGlzIGxpc3RlbmluZyB0bywgb3IKKyAgICAgIGBgTm9uZWBgIGlmIHRoZSBzZXJ2ZXIgaXMgY2xvc2VkLgorCisKK0hhbmRsZQorLS0tLS0tCisKKy4uIGNsYXNzOjogSGFuZGxlCisKKyAgIEEgY2FsbGJhY2sgd3JhcHBlciBvYmplY3QgcmV0dXJuZWQgYnkgOmZ1bmM6YEJhc2VFdmVudExvb3AuY2FsbF9zb29uYCwKKyAgIDpmdW5jOmBCYXNlRXZlbnRMb29wLmNhbGxfc29vbl90aHJlYWRzYWZlYCwgOmZ1bmM6YEJhc2VFdmVudExvb3AuY2FsbF9sYXRlcmAsCisgICBhbmQgOmZ1bmM6YEJhc2VFdmVudExvb3AuY2FsbF9hdGAuCisKKyAgIC4uIG1ldGhvZDo6IGNhbmNlbCgpCisKKyAgICAgIENhbmNlbCB0aGUgY2FsbC4gIElmIHRoZSBjYWxsYmFjayBpcyBhbHJlYWR5IGNhbmNlbGVkIG9yIGV4ZWN1dGVkLAorICAgICAgdGhpcyBtZXRob2QgaGFzIG5vIGVmZmVjdC4KKworCitFdmVudCBsb29wIGV4YW1wbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIF9hc3luY2lvLWhlbGxvLXdvcmxkLWNhbGxiYWNrOgorCitIZWxsbyBXb3JsZCB3aXRoIGNhbGxfc29vbigpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V4YW1wbGUgdXNpbmcgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNhbGxfc29vbmAgbWV0aG9kIHRvIHNjaGVkdWxlIGEKK2NhbGxiYWNrLiBUaGUgY2FsbGJhY2sgZGlzcGxheXMgYGAiSGVsbG8gV29ybGQiYGAgYW5kIHRoZW4gc3RvcHMgdGhlIGV2ZW50Citsb29wOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBkZWYgaGVsbG9fd29ybGQobG9vcCk6CisgICAgICAgIHByaW50KCdIZWxsbyBXb3JsZCcpCisgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAjIFNjaGVkdWxlIGEgY2FsbCB0byBoZWxsb193b3JsZCgpCisgICAgbG9vcC5jYWxsX3Nvb24oaGVsbG9fd29ybGQsIGxvb3ApCisKKyAgICAjIEJsb2NraW5nIGNhbGwgaW50ZXJydXB0ZWQgYnkgbG9vcC5zdG9wKCkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBsb29wLmNsb3NlKCkKKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBIZWxsbyBXb3JsZCBjb3JvdXRpbmUgPGFzeW5jaW8taGVsbG8td29ybGQtY29yb3V0aW5lPmAgZXhhbXBsZQorICAgdXNlcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKworLi4gX2FzeW5jaW8tZGF0ZS1jYWxsYmFjazoKKworRGlzcGxheSB0aGUgY3VycmVudCBkYXRlIHdpdGggY2FsbF9sYXRlcigpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRXhhbXBsZSBvZiBjYWxsYmFjayBkaXNwbGF5aW5nIHRoZSBjdXJyZW50IGRhdGUgZXZlcnkgc2Vjb25kLiBUaGUgY2FsbGJhY2sgdXNlcwordGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNhbGxfbGF0ZXJgIG1ldGhvZCB0byByZXNjaGVkdWxlIGl0c2VsZiBkdXJpbmcgNQorc2Vjb25kcywgYW5kIHRoZW4gc3RvcHMgdGhlIGV2ZW50IGxvb3A6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKyAgICBpbXBvcnQgZGF0ZXRpbWUKKworICAgIGRlZiBkaXNwbGF5X2RhdGUoZW5kX3RpbWUsIGxvb3ApOgorICAgICAgICBwcmludChkYXRldGltZS5kYXRldGltZS5ub3coKSkKKyAgICAgICAgaWYgKGxvb3AudGltZSgpICsgMS4wKSA8IGVuZF90aW1lOgorICAgICAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDEsIGRpc3BsYXlfZGF0ZSwgZW5kX3RpbWUsIGxvb3ApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb29wLnN0b3AoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgIyBTY2hlZHVsZSB0aGUgZmlyc3QgY2FsbCB0byBkaXNwbGF5X2RhdGUoKQorICAgIGVuZF90aW1lID0gbG9vcC50aW1lKCkgKyA1LjAKKyAgICBsb29wLmNhbGxfc29vbihkaXNwbGF5X2RhdGUsIGVuZF90aW1lLCBsb29wKQorCisgICAgIyBCbG9ja2luZyBjYWxsIGludGVycnVwdGVkIGJ5IGxvb3Auc3RvcCgpCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgbG9vcC5jbG9zZSgpCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgY29yb3V0aW5lIGRpc3BsYXlpbmcgdGhlIGN1cnJlbnQgZGF0ZQorICAgPGFzeW5jaW8tZGF0ZS1jb3JvdXRpbmU+YCBleGFtcGxlIHVzZXMgYSA6cmVmOmBjb3JvdXRpbmUKKyAgIDxjb3JvdXRpbmU+YC4KKworCisuLiBfYXN5bmNpby13YXRjaC1yZWFkLWV2ZW50OgorCitXYXRjaCBhIGZpbGUgZGVzY3JpcHRvciBmb3IgcmVhZCBldmVudHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitXYWl0IHVudGlsIGEgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmVkIHNvbWUgZGF0YSB1c2luZyB0aGUKKzptZXRoOmBCYXNlRXZlbnRMb29wLmFkZF9yZWFkZXJgIG1ldGhvZCBhbmQgdGhlbiBjbG9zZSB0aGUgZXZlbnQgbG9vcDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworICAgIHRyeToKKyAgICAgICAgZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldHBhaXIKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGZyb20gYXN5bmNpby53aW5kb3dzX3V0aWxzIGltcG9ydCBzb2NrZXRwYWlyCisKKyAgICAjIENyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIGZpbGUgZGVzY3JpcHRvcnMKKyAgICByc29jaywgd3NvY2sgPSBzb2NrZXRwYWlyKCkKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgcmVhZGVyKCk6CisgICAgICAgIGRhdGEgPSByc29jay5yZWN2KDEwMCkKKyAgICAgICAgcHJpbnQoIlJlY2VpdmVkOiIsIGRhdGEuZGVjb2RlKCkpCisgICAgICAgICMgV2UgYXJlIGRvbmU6IHVucmVnaXN0ZXIgdGhlIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICBsb29wLnJlbW92ZV9yZWFkZXIocnNvY2spCisgICAgICAgICMgU3RvcCB0aGUgZXZlbnQgbG9vcAorICAgICAgICBsb29wLnN0b3AoKQorCisgICAgIyBSZWdpc3RlciB0aGUgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkIGV2ZW50CisgICAgbG9vcC5hZGRfcmVhZGVyKHJzb2NrLCByZWFkZXIpCisKKyAgICAjIFNpbXVsYXRlIHRoZSByZWNlcHRpb24gb2YgZGF0YSBmcm9tIHRoZSBuZXR3b3JrCisgICAgbG9vcC5jYWxsX3Nvb24od3NvY2suc2VuZCwgJ2FiYycuZW5jb2RlKCkpCisKKyAgICAjIFJ1biB0aGUgZXZlbnQgbG9vcAorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCisgICAgIyBXZSBhcmUgZG9uZSwgY2xvc2Ugc29ja2V0cyBhbmQgdGhlIGV2ZW50IGxvb3AKKyAgICByc29jay5jbG9zZSgpCisgICAgd3NvY2suY2xvc2UoKQorICAgIGxvb3AuY2xvc2UoKQorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YHJlZ2lzdGVyIGFuIG9wZW4gc29ja2V0IHRvIHdhaXQgZm9yIGRhdGEgdXNpbmcgYSBwcm90b2NvbAorICAgPGFzeW5jaW8tcmVnaXN0ZXItc29ja2V0PmAgZXhhbXBsZSB1c2VzIGEgbG93LWxldmVsIHByb3RvY29sIGNyZWF0ZWQgYnkgdGhlCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgbWV0aG9kLgorCisgICBUaGUgOnJlZjpgcmVnaXN0ZXIgYW4gb3BlbiBzb2NrZXQgdG8gd2FpdCBmb3IgZGF0YSB1c2luZyBzdHJlYW1zCisgICA8YXN5bmNpby1yZWdpc3Rlci1zb2NrZXQtc3RyZWFtcz5gIGV4YW1wbGUgdXNlcyBoaWdoLWxldmVsIHN0cmVhbXMKKyAgIGNyZWF0ZWQgYnkgdGhlIDpmdW5jOmBvcGVuX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uIGluIGEgY29yb3V0aW5lLgorCisKK1NldCBzaWduYWwgaGFuZGxlcnMgZm9yIFNJR0lOVCBhbmQgU0lHVEVSTQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1JlZ2lzdGVyIGhhbmRsZXJzIGZvciBzaWduYWxzIDpweTpkYXRhOmBTSUdJTlRgIGFuZCA6cHk6ZGF0YTpgU0lHVEVSTWAgdXNpbmcKK3RoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5hZGRfc2lnbmFsX2hhbmRsZXJgIG1ldGhvZDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworICAgIGltcG9ydCBmdW5jdG9vbHMKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgc2lnbmFsCisKKyAgICBkZWYgYXNrX2V4aXQoc2lnbmFtZSk6CisgICAgICAgIHByaW50KCJnb3Qgc2lnbmFsICVzOiBleGl0IiAlIHNpZ25hbWUpCisgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgZm9yIHNpZ25hbWUgaW4gKCdTSUdJTlQnLCAnU0lHVEVSTScpOgorICAgICAgICBsb29wLmFkZF9zaWduYWxfaGFuZGxlcihnZXRhdHRyKHNpZ25hbCwgc2lnbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKGFza19leGl0LCBzaWduYW1lKSkKKworICAgIHByaW50KCJFdmVudCBsb29wIHJ1bm5pbmcgZm9yZXZlciwgcHJlc3MgQ3RybCtDIHRvIGludGVycnVwdC4iKQorICAgIHByaW50KCJwaWQgJXM6IHNlbmQgU0lHSU5UIG9yIFNJR1RFUk0gdG8gZXhpdC4iICUgb3MuZ2V0cGlkKCkpCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBsb29wLmNsb3NlKCkKKworVGhpcyBleGFtcGxlIG9ubHkgd29ya3Mgb24gVU5JWC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tZXZlbnRsb29wcy5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcHMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MmY2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLWV2ZW50bG9vcHMucnN0CkBAIC0wLDAgKzEsMTk4IEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworCitFdmVudCBsb29wcworPT09PT09PT09PT0KKworRXZlbnQgbG9vcCBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBjb252ZW5pZW50IHNob3J0Y3V0cyB0byBhY2Nlc3NpbmcgdGhlIG1ldGhvZHMgb2YgdGhlCitnbG9iYWwgcG9saWN5LiBOb3RlIHRoYXQgdGhpcyBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGRlZmF1bHQgcG9saWN5LCB1bmxlc3MgYW4KK2FsdGVybmF0aXZlIHBvbGljeSB3YXMgc2V0IGJ5IGNhbGxpbmcgOmZ1bmM6YHNldF9ldmVudF9sb29wX3BvbGljeWAgZWFybGllciBpbgordGhlIGV4ZWN1dGlvbiBvZiB0aGUgcHJvY2Vzcy4KKworLi4gZnVuY3Rpb246OiBnZXRfZXZlbnRfbG9vcCgpCisKKyAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBgYGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9ldmVudF9sb29wKClgYC4KKworLi4gZnVuY3Rpb246OiBzZXRfZXZlbnRfbG9vcChsb29wKQorCisgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgYGBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfZXZlbnRfbG9vcChsb29wKWBgLgorCisuLiBmdW5jdGlvbjo6IG5ld19ldmVudF9sb29wKCkKKworICAgRXF1aXZhbGVudCB0byBjYWxsaW5nIGBgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkubmV3X2V2ZW50X2xvb3AoKWBgLgorCisKKy4uIF9hc3luY2lvLWV2ZW50LWxvb3BzOgorCitBdmFpbGFibGUgZXZlbnQgbG9vcHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3luY2lvIGN1cnJlbnRseSBwcm92aWRlcyB0d28gaW1wbGVtZW50YXRpb25zIG9mIGV2ZW50IGxvb3BzOgorOmNsYXNzOmBTZWxlY3RvckV2ZW50TG9vcGAgYW5kIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgLgorCisuLiBjbGFzczo6IFNlbGVjdG9yRXZlbnRMb29wCisKKyAgIEV2ZW50IGxvb3AgYmFzZWQgb24gdGhlIDptb2Q6YHNlbGVjdG9yc2AgbW9kdWxlLiBTdWJjbGFzcyBvZgorICAgOmNsYXNzOmBCYXNlRXZlbnRMb29wYC4KKworICAgVXNlIHRoZSBtb3N0IGVmZmljaWVudCBzZWxlY3RvciBhdmFpbGFibGUgb24gdGhlIHBsYXRmb3JtLgorCisgICBPbiBXaW5kb3dzLCBvbmx5IHNvY2tldHMgYXJlIHN1cHBvcnRlZCAoZXg6IHBpcGVzIGFyZSBub3Qgc3VwcG9ydGVkKToKKyAgIHNlZSB0aGUgYE1TRE4gZG9jdW1lbnRhdGlvbiBvZiBzZWxlY3QKKyAgIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNzQwMTQxJTI4dj12cy44NSUyOS5hc3B4PmBfLgorCisuLiBjbGFzczo6IFByb2FjdG9yRXZlbnRMb29wCisKKyAgIFByb2FjdG9yIGV2ZW50IGxvb3AgZm9yIFdpbmRvd3MgdXNpbmcgIkkvTyBDb21wbGV0aW9uIFBvcnRzIiBha2EgSU9DUC4KKyAgIFN1YmNsYXNzIG9mIDpjbGFzczpgQmFzZUV2ZW50TG9vcGAuCisKKyAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgIGBNU0ROIGRvY3VtZW50YXRpb24gb24gSS9PIENvbXBsZXRpb24gUG9ydHMKKyAgICAgIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL2FhMzY1MTk4JTI4dj12cy44NSUyOS5hc3B4PmBfLgorCitFeGFtcGxlIHRvIHVzZSBhIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIG9uIFdpbmRvd3M6OgorCisgICAgaW1wb3J0IGFzeW5jaW8sIHN5cworCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIGxvb3AgPSBhc3luY2lvLlByb2FjdG9yRXZlbnRMb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wKQorCisuLiBfYXN5bmNpby1wbGF0Zm9ybS1zdXBwb3J0OgorCitQbGF0Zm9ybSBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tCisKK1RoZSA6bW9kOmBhc3luY2lvYCBtb2R1bGUgaGFzIGJlZW4gZGVzaWduZWQgdG8gYmUgcG9ydGFibGUsIGJ1dCBlYWNoIHBsYXRmb3JtCitzdGlsbCBoYXMgc3VidGxlIGRpZmZlcmVuY2VzIGFuZCBtYXkgbm90IHN1cHBvcnQgYWxsIDptb2Q6YGFzeW5jaW9gIGZlYXR1cmVzLgorCitXaW5kb3dzCiteXl5eXl5eCisKK0NvbW1vbiBsaW1pdHMgb2YgV2luZG93cyBldmVudCBsb29wczoKKworLSA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbmAgYW5kCisgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXJgIGFyZSBub3Qgc3VwcG9ydGVkOiB0aGUgc29ja2V0CisgIGZhbWlseSA6ZGF0YTpgc29ja2V0LkFGX1VOSVhgIGlzIHNwZWNpZmljIHRvIFVOSVgKKy0gOm1ldGg6YH5CYXNlRXZlbnRMb29wLmFkZF9zaWduYWxfaGFuZGxlcmAgYW5kCisgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXJgIGFyZSBub3Qgc3VwcG9ydGVkCistIDptZXRoOmBFdmVudExvb3BQb2xpY3kuc2V0X2NoaWxkX3dhdGNoZXJgIGlzIG5vdCBzdXBwb3J0ZWQuCisgIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIHN1cHBvcnRzIHN1YnByb2Nlc3Nlcy4gSXQgaGFzIG9ubHkgb25lCisgIGltcGxlbWVudGF0aW9uIHRvIHdhdGNoIGNoaWxkIHByb2Nlc3NlcywgdGhlcmUgaXMgbm8gbmVlZCB0byBjb25maWd1cmUgaXQuCisKKzpjbGFzczpgU2VsZWN0b3JFdmVudExvb3BgIHNwZWNpZmljIGxpbWl0czoKKworLSA6Y2xhc3M6YH5zZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3JgIGlzIHVzZWQgd2hpY2ggb25seSBzdXBwb3J0cyBzb2NrZXRzCisgIGFuZCBpcyBsaW1pdGVkIHRvIDUxMiBzb2NrZXRzLgorLSA6bWV0aDpgfkJhc2VFdmVudExvb3AuYWRkX3JlYWRlcmAgYW5kIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5hZGRfd3JpdGVyYCBvbmx5CisgIGFjY2VwdCBmaWxlIGRlc2NyaXB0b3JzIG9mIHNvY2tldHMKKy0gUGlwZXMgYXJlIG5vdCBzdXBwb3J0ZWQKKyAgKGV4OiA6bWV0aDpgfkJhc2VFdmVudExvb3AuY29ubmVjdF9yZWFkX3BpcGVgLAorICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY29ubmVjdF93cml0ZV9waXBlYCkKKy0gOnJlZjpgU3VicHJvY2Vzc2VzIDxhc3luY2lvLXN1YnByb2Nlc3M+YCBhcmUgbm90IHN1cHBvcnRlZAorICAoZXg6IDptZXRoOmB+QmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX2V4ZWNgLAorICA6bWV0aDpgfkJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19zaGVsbGApCisKKzpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIHNwZWNpZmljIGxpbWl0czoKKworLSBTU0wgaXMgbm90IHN1cHBvcnRlZDogOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uYCBhbmQKKyAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgIGNhbm5vdCBiZSB1c2VkIHdpdGggU1NMIGZvciBleGFtcGxlCistIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRgIChVRFApIGlzIG5vdCBzdXBwb3J0ZWQKKy0gOm1ldGg6YH5CYXNlRXZlbnRMb29wLmFkZF9yZWFkZXJgIGFuZCA6bWV0aDpgfkJhc2VFdmVudExvb3AuYWRkX3dyaXRlcmAgYXJlCisgIG5vdCBzdXBwb3J0ZWQKKworVGhlIHJlc29sdXRpb24gb2YgdGhlIG1vbm90b25pYyBjbG9jayBvbiBXaW5kb3dzIGlzIHVzdWFsbHkgYXJvdW5kIDE1LjYgbXNlYy4KK1RoZSBiZXN0IHJlc29sdXRpb24gaXMgMC41IG1zZWMuIFRoZSByZXNvbHV0aW9uIGRlcGVuZHMgb24gdGhlIGhhcmR3YXJlCisoYXZhaWxhYmlsaXR5IG9mIGBIUEVUCis8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9IaWdoX1ByZWNpc2lvbl9FdmVudF9UaW1lcj5gXykgYW5kIG9uIHRoZSBXaW5kb3dzCitjb25maWd1cmF0aW9uLiBTZWUgOnJlZjpgYXN5bmNpbyBkZWxheWVkIGNhbGxzIDxhc3luY2lvLWRlbGF5ZWQtY2FsbHM+YC4KKworCitNYWMgT1MgWAorXl5eXl5eXl4KKworQ2hhcmFjdGVyIGRldmljZXMgbGlrZSBQVFkgYXJlIG9ubHkgd2VsbCBzdXBwb3J0ZWQgc2luY2UgTWF2ZXJpY2tzIChNYWMgT1MKKzEwLjkpLiBUaGV5IGFyZSBub3Qgc3VwcG9ydGVkIGF0IGFsbCBvbiBNYWMgT1MgMTAuNSBhbmQgb2xkZXIuCisKK09uIE1hYyBPUyAxMC42LCAxMC43IGFuZCAxMC44LCB0aGUgZGVmYXVsdCBldmVudCBsb29wIGlzCis6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCB3aGljaCB1c2VzIDpjbGFzczpgc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9yYC4KKzpjbGFzczpgc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9yYCBkb2VzIG5vdCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIG9uIHRoZXNlCit2ZXJzaW9ucy4gIFRoZSA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCBjYW4gYmUgdXNlZCB3aXRoCis6Y2xhc3M6YH5zZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3JgIG9yIDpjbGFzczpgfnNlbGVjdG9ycy5Qb2xsU2VsZWN0b3JgIHRvCitzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIG9uIHRoZXNlIHZlcnNpb25zIG9mIE1hYyBPUyBYLiBFeGFtcGxlOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IHNlbGVjdG9ycworCisgICAgc2VsZWN0b3IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IoKQorICAgIGxvb3AgPSBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yKQorICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKKworCitFdmVudCBsb29wIHBvbGljaWVzIGFuZCB0aGUgZGVmYXVsdCBwb2xpY3kKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFdmVudCBsb29wIG1hbmFnZW1lbnQgaXMgYWJzdHJhY3RlZCB3aXRoIGEgKnBvbGljeSogcGF0dGVybiwgdG8gcHJvdmlkZSBtYXhpbWFsCitmbGV4aWJpbGl0eSBmb3IgY3VzdG9tIHBsYXRmb3JtcyBhbmQgZnJhbWV3b3Jrcy4gVGhyb3VnaG91dCB0aGUgZXhlY3V0aW9uIG9mIGEKK3Byb2Nlc3MsIGEgc2luZ2xlIGdsb2JhbCBwb2xpY3kgb2JqZWN0IG1hbmFnZXMgdGhlIGV2ZW50IGxvb3BzIGF2YWlsYWJsZSB0byB0aGUKK3Byb2Nlc3MgYmFzZWQgb24gdGhlIGNhbGxpbmcgY29udGV4dC4gQSBwb2xpY3kgaXMgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUKKzpjbGFzczpgQWJzdHJhY3RFdmVudExvb3BQb2xpY3lgIGludGVyZmFjZS4KKworRm9yIG1vc3QgdXNlcnMgb2YgOm1vZDpgYXN5bmNpb2AsIHBvbGljaWVzIG5ldmVyIGhhdmUgdG8gYmUgZGVhbHQgd2l0aAorZXhwbGljaXRseSwgc2luY2UgdGhlIGRlZmF1bHQgZ2xvYmFsIHBvbGljeSBpcyBzdWZmaWNpZW50LgorCitUaGUgZGVmYXVsdCBwb2xpY3kgZGVmaW5lcyBjb250ZXh0IGFzIHRoZSBjdXJyZW50IHRocmVhZCwgYW5kIG1hbmFnZXMgYW4gZXZlbnQKK2xvb3AgcGVyIHRocmVhZCB0aGF0IGludGVyYWN0cyB3aXRoIDptb2Q6YGFzeW5jaW9gLiBUaGUgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucworOmZ1bmM6YGdldF9ldmVudF9sb29wYCBhbmQgOmZ1bmM6YHNldF9ldmVudF9sb29wYCBwcm92aWRlIGNvbnZlbmllbnQgYWNjZXNzIHRvCitldmVudCBsb29wcyBtYW5hZ2VkIGJ5IHRoZSBkZWZhdWx0IHBvbGljeS4KKworCitFdmVudCBsb29wIHBvbGljeSBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbiBldmVudCBsb29wIHBvbGljeSBtdXN0IGltcGxlbWVudCB0aGUgZm9sbG93aW5nIGludGVyZmFjZToKKworLi4gY2xhc3M6OiBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeQorCisgICBFdmVudCBsb29wIHBvbGljeS4KKworICAgLi4gbWV0aG9kOjogZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICBHZXQgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQuCisKKyAgICAgIFJldHVybnMgYW4gZXZlbnQgbG9vcCBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSA6Y2xhc3M6YEJhc2VFdmVudExvb3BgCisgICAgICBpbnRlcmZhY2UuCisKKyAgICAgIFJhaXNlcyBhbiBleGNlcHRpb24gaW4gY2FzZSBubyBldmVudCBsb29wIGhhcyBiZWVuIHNldCBmb3IgdGhlIGN1cnJlbnQKKyAgICAgIGNvbnRleHQgYW5kIHRoZSBjdXJyZW50IHBvbGljeSBkb2VzIG5vdCBzcGVjaWZ5IHRvIGNyZWF0ZSBvbmUuIEl0IG11c3QKKyAgICAgIG5ldmVyIHJldHVybiBgYE5vbmVgYC4KKworICAgLi4gbWV0aG9kOjogc2V0X2V2ZW50X2xvb3AobG9vcCkKKworICAgICAgU2V0IHRoZSBldmVudCBsb29wIGZvciB0aGUgY3VycmVudCBjb250ZXh0IHRvICpsb29wKi4KKworICAgLi4gbWV0aG9kOjogbmV3X2V2ZW50X2xvb3AoKQorCisgICAgICBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBldmVudCBsb29wIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhpcyBwb2xpY3kncworICAgICAgcnVsZXMuCisKKyAgICAgIElmIHRoZXJlJ3MgbmVlZCB0byBzZXQgdGhpcyBsb29wIGFzIHRoZSBldmVudCBsb29wIGZvciB0aGUgY3VycmVudAorICAgICAgY29udGV4dCwgOm1ldGg6YHNldF9ldmVudF9sb29wYCBtdXN0IGJlIGNhbGxlZCBleHBsaWNpdGx5LgorCisKK0FjY2VzcyB0byB0aGUgZ2xvYmFsIGxvb3AgcG9saWN5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBmdW5jdGlvbjo6IGdldF9ldmVudF9sb29wX3BvbGljeSgpCisKKyAgIEdldCB0aGUgY3VycmVudCBldmVudCBsb29wIHBvbGljeS4KKworLi4gZnVuY3Rpb246OiBzZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KQorCisgICBTZXQgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBwb2xpY3kuIElmICpwb2xpY3kqIGlzIGBgTm9uZWBgLCB0aGUgZGVmYXVsdAorICAgcG9saWN5IGlzIHJlc3RvcmVkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXByb3RvY29sLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTI5OGIyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby1wcm90b2NvbC5yc3QKQEAgLTAsMCArMSw3MTYgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK1RyYW5zcG9ydHMgIGFuZCBwcm90b2NvbHMgKGNhbGxiYWNrIGJhc2VkIEFQSSkKKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKKworLi4gX2FzeW5jaW8tdHJhbnNwb3J0OgorCitUcmFuc3BvcnRzCis9PT09PT09PT09CisKK1RyYW5zcG9ydHMgYXJlIGNsYXNzZXMgcHJvdmlkZWQgYnkgOm1vZDpgYXN5bmNpb2AgaW4gb3JkZXIgdG8gYWJzdHJhY3QKK3ZhcmlvdXMga2luZHMgb2YgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gIFlvdSBnZW5lcmFsbHkgd29uJ3QgaW5zdGFudGlhdGUKK2EgdHJhbnNwb3J0IHlvdXJzZWxmOyBpbnN0ZWFkLCB5b3Ugd2lsbCBjYWxsIGEgOmNsYXNzOmBCYXNlRXZlbnRMb29wYCBtZXRob2QKK3doaWNoIHdpbGwgY3JlYXRlIHRoZSB0cmFuc3BvcnQgYW5kIHRyeSB0byBpbml0aWF0ZSB0aGUgdW5kZXJseWluZworY29tbXVuaWNhdGlvbiBjaGFubmVsLCBjYWxsaW5nIHlvdSBiYWNrIHdoZW4gaXQgc3VjY2VlZHMuCisKK09uY2UgdGhlIGNvbW11bmljYXRpb24gY2hhbm5lbCBpcyBlc3RhYmxpc2hlZCwgYSB0cmFuc3BvcnQgaXMgYWx3YXlzCitwYWlyZWQgd2l0aCBhIDpyZWY6YHByb3RvY29sIDxhc3luY2lvLXByb3RvY29sPmAgaW5zdGFuY2UuICBUaGUgcHJvdG9jb2wgY2FuCit0aGVuIGNhbGwgdGhlIHRyYW5zcG9ydCdzIG1ldGhvZHMgZm9yIHZhcmlvdXMgcHVycG9zZXMuCisKKzptb2Q6YGFzeW5jaW9gIGN1cnJlbnRseSBpbXBsZW1lbnRzIHRyYW5zcG9ydHMgZm9yIFRDUCwgVURQLCBTU0wsIGFuZAorc3VicHJvY2VzcyBwaXBlcy4gIFRoZSBtZXRob2RzIGF2YWlsYWJsZSBvbiBhIHRyYW5zcG9ydCBkZXBlbmQgb24KK3RoZSB0cmFuc3BvcnQncyBraW5kLgorCitUaGUgdHJhbnNwb3J0IGNsYXNzZXMgYXJlIDpyZWY6YG5vdCB0aHJlYWQgc2FmZSA8YXN5bmNpby1tdWx0aXRocmVhZGluZz5gLgorCisKK0Jhc2VUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBCYXNlVHJhbnNwb3J0CisKKyAgIEJhc2UgY2xhc3MgZm9yIHRyYW5zcG9ydHMuCisKKyAgIC4uIG1ldGhvZDo6IGNsb3NlKHNlbGYpCisKKyAgICAgIENsb3NlIHRoZSB0cmFuc3BvcnQuICBJZiB0aGUgdHJhbnNwb3J0IGhhcyBhIGJ1ZmZlciBmb3Igb3V0Z29pbmcKKyAgICAgIGRhdGEsIGJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBmbHVzaGVkIGFzeW5jaHJvbm91c2x5LiAgTm8gbW9yZSBkYXRhCisgICAgICB3aWxsIGJlIHJlY2VpdmVkLiAgQWZ0ZXIgYWxsIGJ1ZmZlcmVkIGRhdGEgaXMgZmx1c2hlZCwgdGhlCisgICAgICBwcm90b2NvbCdzIDptZXRoOmBjb25uZWN0aW9uX2xvc3RgIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCB3aXRoCisgICAgICA6Y29uc3Q6YE5vbmVgIGFzIGl0cyBhcmd1bWVudC4KKworICAgLi4gbWV0aG9kOjogaXNfY2xvc2luZyhzZWxmKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHRyYW5zcG9ydCBpcyBjbG9zaW5nIG9yIGlzIGNsb3NlZC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjQKKworICAgLi4gbWV0aG9kOjogZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdD1Ob25lKQorCisgICAgICBSZXR1cm4gb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uLiAgKm5hbWUqIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZworICAgICAgdGhlIHBpZWNlIG9mIHRyYW5zcG9ydC1zcGVjaWZpYyBpbmZvcm1hdGlvbiB0byBnZXQsICpkZWZhdWx0KiBpcyB0aGUKKyAgICAgIHZhbHVlIHRvIHJldHVybiBpZiB0aGUgaW5mb3JtYXRpb24gZG9lc24ndCBleGlzdC4KKworICAgICAgVGhpcyBtZXRob2QgYWxsb3dzIHRyYW5zcG9ydCBpbXBsZW1lbnRhdGlvbnMgdG8gZWFzaWx5IGV4cG9zZQorICAgICAgY2hhbm5lbC1zcGVjaWZpYyBpbmZvcm1hdGlvbi4KKworICAgICAgKiBzb2NrZXQ6CisKKyAgICAgICAgLSBgYCdwZWVybmFtZSdgYDogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHdoaWNoIHRoZSBzb2NrZXQgaXMgY29ubmVjdGVkLAorICAgICAgICAgIHJlc3VsdCBvZiA6bWV0aDpgc29ja2V0LnNvY2tldC5nZXRwZWVybmFtZWAgKGBgTm9uZWBgIG9uIGVycm9yKQorICAgICAgICAtIGBgJ3NvY2tldCdgYDogOmNsYXNzOmBzb2NrZXQuc29ja2V0YCBpbnN0YW5jZQorICAgICAgICAtIGBgJ3NvY2tuYW1lJ2BgOiB0aGUgc29ja2V0J3Mgb3duIGFkZHJlc3MsCisgICAgICAgICAgcmVzdWx0IG9mIDptZXRoOmBzb2NrZXQuc29ja2V0LmdldHNvY2tuYW1lYAorCisgICAgICAqIFNTTCBzb2NrZXQ6CisKKyAgICAgICAgLSBgYCdjb21wcmVzc2lvbidgYDogdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBiZWluZyB1c2VkIGFzIGEgc3RyaW5nLAorICAgICAgICAgIG9yIGBgTm9uZWBgIGlmIHRoZSBjb25uZWN0aW9uIGlzbid0IGNvbXByZXNzZWQ7IHJlc3VsdCBvZgorICAgICAgICAgIDptZXRoOmBzc2wuU1NMU29ja2V0LmNvbXByZXNzaW9uYAorICAgICAgICAtIGBgJ2NpcGhlcidgYDogYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIKKyAgICAgICAgICBiZWluZyB1c2VkLCB0aGUgdmVyc2lvbiBvZiB0aGUgU1NMIHByb3RvY29sIHRoYXQgZGVmaW5lcyBpdHMgdXNlLCBhbmQKKyAgICAgICAgICB0aGUgbnVtYmVyIG9mIHNlY3JldCBiaXRzIGJlaW5nIHVzZWQ7IHJlc3VsdCBvZgorICAgICAgICAgIDptZXRoOmBzc2wuU1NMU29ja2V0LmNpcGhlcmAKKyAgICAgICAgLSBgYCdwZWVyY2VydCdgYDogcGVlciBjZXJ0aWZpY2F0ZTsgcmVzdWx0IG9mCisgICAgICAgICAgOm1ldGg6YHNzbC5TU0xTb2NrZXQuZ2V0cGVlcmNlcnRgCisgICAgICAgIC0gYGAnc3NsY29udGV4dCdgYDogOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgaW5zdGFuY2UKKyAgICAgICAgLSBgYCdzc2xfb2JqZWN0J2BgOiA6Y2xhc3M6YHNzbC5TU0xPYmplY3RgIG9yIDpjbGFzczpgc3NsLlNTTFNvY2tldGAKKyAgICAgICAgICBpbnN0YW5jZQorCisgICAgICAqIHBpcGU6CisKKyAgICAgICAgLSBgYCdwaXBlJ2BgOiBwaXBlIG9iamVjdAorCisgICAgICAqIHN1YnByb2Nlc3M6CisKKyAgICAgICAgLSBgYCdzdWJwcm9jZXNzJ2BgOiA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gIGluc3RhbmNlCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKyAgICAgIGBgJ3NzbF9vYmplY3QnYGAgaW5mbyB3YXMgYWRkZWQgdG8gU1NMIHNvY2tldHMuCisKKworUmVhZFRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFJlYWRUcmFuc3BvcnQKKworICAgSW50ZXJmYWNlIGZvciByZWFkLW9ubHkgdHJhbnNwb3J0cy4KKworICAgLi4gbWV0aG9kOjogcGF1c2VfcmVhZGluZygpCisKKyAgICAgIFBhdXNlIHRoZSByZWNlaXZpbmcgZW5kIG9mIHRoZSB0cmFuc3BvcnQuICBObyBkYXRhIHdpbGwgYmUgcGFzc2VkIHRvCisgICAgICB0aGUgcHJvdG9jb2wncyA6bWV0aDpgZGF0YV9yZWNlaXZlZGAgbWV0aG9kIHVudGlsIDptZXRoOmByZXN1bWVfcmVhZGluZ2AKKyAgICAgIGlzIGNhbGxlZC4KKworICAgLi4gbWV0aG9kOjogcmVzdW1lX3JlYWRpbmcoKQorCisgICAgICBSZXN1bWUgdGhlIHJlY2VpdmluZyBlbmQuICBUaGUgcHJvdG9jb2wncyA6bWV0aDpgZGF0YV9yZWNlaXZlZGAgbWV0aG9kCisgICAgICB3aWxsIGJlIGNhbGxlZCBvbmNlIGFnYWluIGlmIHNvbWUgZGF0YSBpcyBhdmFpbGFibGUgZm9yIHJlYWRpbmcuCisKKworV3JpdGVUcmFuc3BvcnQKKy0tLS0tLS0tLS0tLS0tCisKKy4uIGNsYXNzOjogV3JpdGVUcmFuc3BvcnQKKworICAgSW50ZXJmYWNlIGZvciB3cml0ZS1vbmx5IHRyYW5zcG9ydHMuCisKKyAgIC4uIG1ldGhvZDo6IGFib3J0KCkKKworICAgICAgQ2xvc2UgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIGZvciBwZW5kaW5nIG9wZXJhdGlvbnMKKyAgICAgIHRvIGNvbXBsZXRlLiAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgIFRoZSBwcm90b2NvbCdzIDptZXRoOmBjb25uZWN0aW9uX2xvc3RgIG1ldGhvZCB3aWxsIGV2ZW50dWFsbHkgYmUKKyAgICAgIGNhbGxlZCB3aXRoIDpjb25zdDpgTm9uZWAgYXMgaXRzIGFyZ3VtZW50LgorCisgICAuLiBtZXRob2Q6OiBjYW5fd3JpdGVfZW9mKCkKKworICAgICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgdGhlIHRyYW5zcG9ydCBzdXBwb3J0cyA6bWV0aDpgd3JpdGVfZW9mYCwKKyAgICAgIDpjb25zdDpgRmFsc2VgIGlmIG5vdC4KKworICAgLi4gbWV0aG9kOjogZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCkKKworICAgICAgUmV0dXJuIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIgdXNlZCBieSB0aGUgdHJhbnNwb3J0LgorCisgICAuLiBtZXRob2Q6OiBnZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpCisKKyAgICAgIEdldCB0aGUgKmhpZ2gqLSBhbmQgKmxvdyotd2F0ZXIgbGltaXRzIGZvciB3cml0ZSBmbG93IGNvbnRyb2wuIFJldHVybiBhCisgICAgICB0dXBsZSBgYChsb3csIGhpZ2gpYGAgd2hlcmUgKmxvdyogYW5kICpoaWdoKiBhcmUgcG9zaXRpdmUgbnVtYmVyIG9mCisgICAgICBieXRlcy4KKworICAgICAgVXNlIDptZXRoOmBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0c2AgdG8gc2V0IHRoZSBsaW1pdHMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNC4yCisKKyAgIC4uIG1ldGhvZDo6IHNldF93cml0ZV9idWZmZXJfbGltaXRzKGhpZ2g9Tm9uZSwgbG93PU5vbmUpCisKKyAgICAgIFNldCB0aGUgKmhpZ2gqLSBhbmQgKmxvdyotd2F0ZXIgbGltaXRzIGZvciB3cml0ZSBmbG93IGNvbnRyb2wuCisKKyAgICAgIFRoZXNlIHR3byB2YWx1ZXMgY29udHJvbCB3aGVuIGNhbGwgdGhlIHByb3RvY29sJ3MKKyAgICAgIDptZXRoOmBwYXVzZV93cml0aW5nYCBhbmQgOm1ldGg6YHJlc3VtZV93cml0aW5nYCBtZXRob2RzIGFyZSBjYWxsZWQuCisgICAgICBJZiBzcGVjaWZpZWQsIHRoZSBsb3ctd2F0ZXIgbGltaXQgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgTmVpdGhlciAqaGlnaCogbm9yICpsb3cqIGNhbiBiZSBuZWdhdGl2ZS4KKworICAgICAgVGhlIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIElmIG9ubHkgdGhlCisgICAgICBoaWdoLXdhdGVyIGxpbWl0IGlzIGdpdmVuLCB0aGUgbG93LXdhdGVyIGxpbWl0IGRlZmF1bHRzIHRvIGFuCisgICAgICBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYyB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgU2V0dGluZyAqaGlnaCogdG8gemVybyBmb3JjZXMgKmxvdyogdG8gemVybyBhcworICAgICAgd2VsbCwgYW5kIGNhdXNlcyA6bWV0aDpgcGF1c2Vfd3JpdGluZ2AgdG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZQorICAgICAgYnVmZmVyIGJlY29tZXMgbm9uLWVtcHR5LiAgU2V0dGluZyAqbG93KiB0byB6ZXJvIGNhdXNlcworICAgICAgOm1ldGg6YHJlc3VtZV93cml0aW5nYCB0byBiZSBjYWxsZWQgb25seSBvbmNlIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICBVc2Ugb2YgemVybyBmb3IgZWl0aGVyIGxpbWl0IGlzIGdlbmVyYWxseSBzdWItb3B0aW1hbCBhcyBpdAorICAgICAgcmVkdWNlcyBvcHBvcnR1bml0aWVzIGZvciBkb2luZyBJL08gYW5kIGNvbXB1dGF0aW9uCisgICAgICBjb25jdXJyZW50bHkuCisKKyAgICAgIFVzZSA6bWV0aDpgZ2V0X3dyaXRlX2J1ZmZlcl9saW1pdHNgIHRvIGdldCB0aGUgbGltaXRzLgorCisgICAuLiBtZXRob2Q6OiB3cml0ZShkYXRhKQorCisgICAgICBXcml0ZSBzb21lICpkYXRhKiBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICBUaGlzIG1ldGhvZCBkb2VzIG5vdCBibG9jazsgaXQgYnVmZmVycyB0aGUgZGF0YSBhbmQgYXJyYW5nZXMgZm9yIGl0CisgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKworICAgLi4gbWV0aG9kOjogd3JpdGVsaW5lcyhsaXN0X29mX2RhdGEpCisKKyAgICAgIFdyaXRlIGEgbGlzdCAob3IgYW55IGl0ZXJhYmxlKSBvZiBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisgICAgICBUaGlzIGlzIGZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIGNhbGxpbmcgOm1ldGg6YHdyaXRlYCBvbiBlYWNoCisgICAgICBlbGVtZW50IHlpZWxkZWQgYnkgdGhlIGl0ZXJhYmxlLCBidXQgbWF5IGJlIGltcGxlbWVudGVkIG1vcmUgZWZmaWNpZW50bHkuCisKKyAgIC4uIG1ldGhvZDo6IHdyaXRlX2VvZigpCisKKyAgICAgIENsb3NlIHRoZSB3cml0ZSBlbmQgb2YgdGhlIHRyYW5zcG9ydCBhZnRlciBmbHVzaGluZyBidWZmZXJlZCBkYXRhLgorICAgICAgRGF0YSBtYXkgc3RpbGwgYmUgcmVjZWl2ZWQuCisKKyAgICAgIFRoaXMgbWV0aG9kIGNhbiByYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpZiB0aGUgdHJhbnNwb3J0CisgICAgICAoZS5nLiBTU0wpIGRvZXNuJ3Qgc3VwcG9ydCBoYWxmLWNsb3Nlcy4KKworCitEYXRhZ3JhbVRyYW5zcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbWV0aG9kOjogRGF0YWdyYW1UcmFuc3BvcnQuc2VuZHRvKGRhdGEsIGFkZHI9Tm9uZSkKKworICAgU2VuZCB0aGUgKmRhdGEqIGJ5dGVzIHRvIHRoZSByZW1vdGUgcGVlciBnaXZlbiBieSAqYWRkciogKGEKKyAgIHRyYW5zcG9ydC1kZXBlbmRlbnQgdGFyZ2V0IGFkZHJlc3MpLiAgSWYgKmFkZHIqIGlzIDpjb25zdDpgTm9uZWAsIHRoZQorICAgZGF0YSBpcyBzZW50IHRvIHRoZSB0YXJnZXQgYWRkcmVzcyBnaXZlbiBvbiB0cmFuc3BvcnQgY3JlYXRpb24uCisKKyAgIFRoaXMgbWV0aG9kIGRvZXMgbm90IGJsb2NrOyBpdCBidWZmZXJzIHRoZSBkYXRhIGFuZCBhcnJhbmdlcyBmb3IgaXQKKyAgIHRvIGJlIHNlbnQgb3V0IGFzeW5jaHJvbm91c2x5LgorCisuLiBtZXRob2Q6OiBEYXRhZ3JhbVRyYW5zcG9ydC5hYm9ydCgpCisKKyAgIENsb3NlIHRoZSB0cmFuc3BvcnQgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBmb3IgcGVuZGluZyBvcGVyYXRpb25zCisgICB0byBjb21wbGV0ZS4gIEJ1ZmZlcmVkIGRhdGEgd2lsbCBiZSBsb3N0LiAgTm8gbW9yZSBkYXRhIHdpbGwgYmUgcmVjZWl2ZWQuCisgICBUaGUgcHJvdG9jb2wncyA6bWV0aDpgY29ubmVjdGlvbl9sb3N0YCBtZXRob2Qgd2lsbCBldmVudHVhbGx5IGJlCisgICBjYWxsZWQgd2l0aCA6Y29uc3Q6YE5vbmVgIGFzIGl0cyBhcmd1bWVudC4KKworCitCYXNlU3VicHJvY2Vzc1RyYW5zcG9ydAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBCYXNlU3VicHJvY2Vzc1RyYW5zcG9ydAorCisgICAuLiBtZXRob2Q6OiBnZXRfcGlkKCkKKworICAgICAgUmV0dXJuIHRoZSBzdWJwcm9jZXNzIHByb2Nlc3MgaWQgYXMgYW4gaW50ZWdlci4KKworICAgLi4gbWV0aG9kOjogZ2V0X3BpcGVfdHJhbnNwb3J0KGZkKQorCisgICAgICBSZXR1cm4gdGhlIHRyYW5zcG9ydCBmb3IgdGhlIGNvbW11bmljYXRpb24gcGlwZSBjb3JyZXNwb25kaW5nIHRvIHRoZQorICAgICAgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgKmZkKjoKKworICAgICAgKiBgYDBgYDogcmVhZGFibGUgc3RyZWFtaW5nIHRyYW5zcG9ydCBvZiB0aGUgc3RhbmRhcmQgaW5wdXQgKCpzdGRpbiopLAorICAgICAgICBvciA6Y29uc3Q6YE5vbmVgIGlmIHRoZSBzdWJwcm9jZXNzIHdhcyBub3QgY3JlYXRlZCB3aXRoIGBgc3RkaW49UElQRWBgCisgICAgICAqIGBgMWBgOiB3cml0YWJsZSBzdHJlYW1pbmcgdHJhbnNwb3J0IG9mIHRoZSBzdGFuZGFyZCBvdXRwdXQgKCpzdGRvdXQqKSwKKyAgICAgICAgb3IgOmNvbnN0OmBOb25lYCBpZiB0aGUgc3VicHJvY2VzcyB3YXMgbm90IGNyZWF0ZWQgd2l0aCBgYHN0ZG91dD1QSVBFYGAKKyAgICAgICogYGAyYGA6IHdyaXRhYmxlIHN0cmVhbWluZyB0cmFuc3BvcnQgb2YgdGhlIHN0YW5kYXJkIGVycm9yICgqc3RkZXJyKiksCisgICAgICAgIG9yIDpjb25zdDpgTm9uZWAgaWYgdGhlIHN1YnByb2Nlc3Mgd2FzIG5vdCBjcmVhdGVkIHdpdGggYGBzdGRlcnI9UElQRWBgCisgICAgICAqIG90aGVyICpmZCo6IDpjb25zdDpgTm9uZWAKKworICAgLi4gbWV0aG9kOjogZ2V0X3JldHVybmNvZGUoKQorCisgICAgICBSZXR1cm4gdGhlIHN1YnByb2Nlc3MgcmV0dXJuY29kZSBhcyBhbiBpbnRlZ2VyIG9yIDpjb25zdDpgTm9uZWAKKyAgICAgIGlmIGl0IGhhc24ndCByZXR1cm5lZCwgc2ltaWxhcmx5IHRvIHRoZQorICAgICAgOmF0dHI6YHN1YnByb2Nlc3MuUG9wZW4ucmV0dXJuY29kZWAgYXR0cmlidXRlLgorCisgICAuLiBtZXRob2Q6OiBraWxsKHNlbGYpCisKKyAgICAgIEtpbGwgdGhlIHN1YnByb2Nlc3MsIGFzIGluIDptZXRoOmBzdWJwcm9jZXNzLlBvcGVuLmtpbGxgLgorCisgICAgICBPbiBQT1NJWCBzeXN0ZW1zLCB0aGUgZnVuY3Rpb24gc2VuZHMgU0lHS0lMTCB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgIE9uIFdpbmRvd3MsIHRoaXMgbWV0aG9kIGlzIGFuIGFsaWFzIGZvciA6bWV0aDpgdGVybWluYXRlYC4KKworICAgLi4gbWV0aG9kOjogc2VuZF9zaWduYWwoc2lnbmFsKQorCisgICAgICBTZW5kIHRoZSAqc2lnbmFsKiBudW1iZXIgdG8gdGhlIHN1YnByb2Nlc3MsIGFzIGluCisgICAgICA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbGAuCisKKyAgIC4uIG1ldGhvZDo6IHRlcm1pbmF0ZSgpCisKKyAgICAgIEFzayB0aGUgc3VicHJvY2VzcyB0byBzdG9wLCBhcyBpbiA6bWV0aDpgc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGVgLgorICAgICAgVGhpcyBtZXRob2QgaXMgYW4gYWxpYXMgZm9yIHRoZSA6bWV0aDpgY2xvc2VgIG1ldGhvZC4KKworICAgICAgT24gUE9TSVggc3lzdGVtcywgdGhpcyBtZXRob2Qgc2VuZHMgU0lHVEVSTSB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgIE9uIFdpbmRvd3MsIHRoZSBXaW5kb3dzIEFQSSBmdW5jdGlvbiBUZXJtaW5hdGVQcm9jZXNzKCkgaXMgY2FsbGVkIHRvCisgICAgICBzdG9wIHRoZSBzdWJwcm9jZXNzLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIEFzayB0aGUgc3VicHJvY2VzcyB0byBzdG9wIGJ5IGNhbGxpbmcgdGhlIDptZXRoOmB0ZXJtaW5hdGVgIG1ldGhvZCBpZiB0aGUKKyAgICAgIHN1YnByb2Nlc3MgaGFzbid0IHJldHVybmVkIHlldCwgYW5kIGNsb3NlIHRyYW5zcG9ydHMgb2YgYWxsIHBpcGVzCisgICAgICAoKnN0ZGluKiwgKnN0ZG91dCogYW5kICpzdGRlcnIqKS4KKworCisuLiBfYXN5bmNpby1wcm90b2NvbDoKKworUHJvdG9jb2xzCis9PT09PT09PT0KKworOm1vZDpgYXN5bmNpb2AgcHJvdmlkZXMgYmFzZSBjbGFzc2VzIHRoYXQgeW91IGNhbiBzdWJjbGFzcyB0byBpbXBsZW1lbnQKK3lvdXIgbmV0d29yayBwcm90b2NvbHMuICBUaG9zZSBjbGFzc2VzIGFyZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGgKKzpyZWY6YHRyYW5zcG9ydHMgPGFzeW5jaW8tdHJhbnNwb3J0PmAgKHNlZSBiZWxvdyk6IHRoZSBwcm90b2NvbCBwYXJzZXMgaW5jb21pbmcKK2RhdGEgYW5kIGFza3MgZm9yIHRoZSB3cml0aW5nIG9mIG91dGdvaW5nIGRhdGEsIHdoaWxlIHRoZSB0cmFuc3BvcnQgaXMKK3Jlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIEkvTyBhbmQgYnVmZmVyaW5nLgorCitXaGVuIHN1YmNsYXNzaW5nIGEgcHJvdG9jb2wgY2xhc3MsIGl0IGlzIHJlY29tbWVuZGVkIHlvdSBvdmVycmlkZSBjZXJ0YWluCittZXRob2RzLiAgVGhvc2UgbWV0aG9kcyBhcmUgY2FsbGJhY2tzOiB0aGV5IHdpbGwgYmUgY2FsbGVkIGJ5IHRoZSB0cmFuc3BvcnQKK29uIGNlcnRhaW4gZXZlbnRzIChmb3IgZXhhbXBsZSB3aGVuIHNvbWUgZGF0YSBpcyByZWNlaXZlZCk7IHlvdSBzaG91bGRuJ3QKK2NhbGwgdGhlbSB5b3Vyc2VsZiwgdW5sZXNzIHlvdSBhcmUgaW1wbGVtZW50aW5nIGEgdHJhbnNwb3J0LgorCisuLiBub3RlOjoKKyAgIEFsbCBjYWxsYmFja3MgaGF2ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucywgd2hpY2ggYXJlIGVtcHR5LiAgVGhlcmVmb3JlLAorICAgeW91IG9ubHkgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGNhbGxiYWNrcyBmb3IgdGhlIGV2ZW50cyBpbiB3aGljaCB5b3UKKyAgIGFyZSBpbnRlcmVzdGVkLgorCisKK1Byb3RvY29sIGNsYXNzZXMKKy0tLS0tLS0tLS0tLS0tLS0KKworLi4gY2xhc3M6OiBQcm90b2NvbAorCisgICBUaGUgYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIHN0cmVhbWluZyBwcm90b2NvbHMgKGZvciB1c2Ugd2l0aAorICAgZS5nLiBUQ1AgYW5kIFNTTCB0cmFuc3BvcnRzKS4KKworLi4gY2xhc3M6OiBEYXRhZ3JhbVByb3RvY29sCisKKyAgIFRoZSBiYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgZGF0YWdyYW0gcHJvdG9jb2xzIChmb3IgdXNlIHdpdGgKKyAgIGUuZy4gVURQIHRyYW5zcG9ydHMpLgorCisuLiBjbGFzczo6IFN1YnByb2Nlc3NQcm90b2NvbAorCisgICBUaGUgYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIHByb3RvY29scyBjb21tdW5pY2F0aW5nIHdpdGggY2hpbGQKKyAgIHByb2Nlc3NlcyAodGhyb3VnaCBhIHNldCBvZiB1bmlkaXJlY3Rpb25hbCBwaXBlcykuCisKKworQ29ubmVjdGlvbiBjYWxsYmFja3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgLCA6Y2xhc3M6YERhdGFncmFtUHJvdG9jb2xgCithbmQgOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogQmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisKKyAgIENhbGxlZCB3aGVuIGEgY29ubmVjdGlvbiBpcyBtYWRlLgorCisgICBUaGUgKnRyYW5zcG9ydCogYXJndW1lbnQgaXMgdGhlIHRyYW5zcG9ydCByZXByZXNlbnRpbmcgdGhlCisgICBjb25uZWN0aW9uLiAgWW91IGFyZSByZXNwb25zaWJsZSBmb3Igc3RvcmluZyBpdCBzb21ld2hlcmUKKyAgIChlLmcuIGFzIGFuIGF0dHJpYnV0ZSkgaWYgeW91IG5lZWQgdG8uCisKKy4uIG1ldGhvZDo6IEJhc2VQcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorCisgICBDYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0IG9yIGNsb3NlZC4KKworICAgVGhlIGFyZ3VtZW50IGlzIGVpdGhlciBhbiBleGNlcHRpb24gb2JqZWN0IG9yIDpjb25zdDpgTm9uZWAuCisgICBUaGUgbGF0dGVyIG1lYW5zIGEgcmVndWxhciBFT0YgaXMgcmVjZWl2ZWQsIG9yIHRoZSBjb25uZWN0aW9uIHdhcworICAgYWJvcnRlZCBvciBjbG9zZWQgYnkgdGhpcyBzaWRlIG9mIHRoZSBjb25uZWN0aW9uLgorCis6bWV0aDpgfkJhc2VQcm90b2NvbC5jb25uZWN0aW9uX21hZGVgIGFuZCA6bWV0aDpgfkJhc2VQcm90b2NvbC5jb25uZWN0aW9uX2xvc3RgCithcmUgY2FsbGVkIGV4YWN0bHkgb25jZSBwZXIgc3VjY2Vzc2Z1bCBjb25uZWN0aW9uLiAgQWxsIG90aGVyIGNhbGxiYWNrcyB3aWxsIGJlCitjYWxsZWQgYmV0d2VlbiB0aG9zZSB0d28gbWV0aG9kcywgd2hpY2ggYWxsb3dzIGZvciBlYXNpZXIgcmVzb3VyY2UgbWFuYWdlbWVudAoraW4geW91ciBwcm90b2NvbCBpbXBsZW1lbnRhdGlvbi4KKworVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgbWF5IGJlIGNhbGxlZCBvbmx5IG9uIDpjbGFzczpgU3VicHJvY2Vzc1Byb3RvY29sYAoraW5zdGFuY2VzOgorCisuLiBtZXRob2Q6OiBTdWJwcm9jZXNzUHJvdG9jb2wucGlwZV9kYXRhX3JlY2VpdmVkKGZkLCBkYXRhKQorCisgICBDYWxsZWQgd2hlbiB0aGUgY2hpbGQgcHJvY2VzcyB3cml0ZXMgZGF0YSBpbnRvIGl0cyBzdGRvdXQgb3Igc3RkZXJyIHBpcGUuCisgICAqZmQqIGlzIHRoZSBpbnRlZ2VyIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgcGlwZS4gICpkYXRhKiBpcyBhIG5vbi1lbXB0eQorICAgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRhdGEuCisKKy4uIG1ldGhvZDo6IFN1YnByb2Nlc3NQcm90b2NvbC5waXBlX2Nvbm5lY3Rpb25fbG9zdChmZCwgZXhjKQorCisgICBDYWxsZWQgd2hlbiBvbmUgb2YgdGhlIHBpcGVzIGNvbW11bmljYXRpbmcgd2l0aCB0aGUgY2hpbGQgcHJvY2VzcworICAgaXMgY2xvc2VkLiAgKmZkKiBpcyB0aGUgaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgdGhhdCB3YXMgY2xvc2VkLgorCisuLiBtZXRob2Q6OiBTdWJwcm9jZXNzUHJvdG9jb2wucHJvY2Vzc19leGl0ZWQoKQorCisgICBDYWxsZWQgd2hlbiB0aGUgY2hpbGQgcHJvY2VzcyBoYXMgZXhpdGVkLgorCisKK1N0cmVhbWluZyBwcm90b2NvbHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBvbiA6Y2xhc3M6YFByb3RvY29sYCBpbnN0YW5jZXM6CisKKy4uIG1ldGhvZDo6IFByb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKworICAgQ2FsbGVkIHdoZW4gc29tZSBkYXRhIGlzIHJlY2VpdmVkLiAgKmRhdGEqIGlzIGEgbm9uLWVtcHR5IGJ5dGVzIG9iamVjdAorICAgY29udGFpbmluZyB0aGUgaW5jb21pbmcgZGF0YS4KKworICAgLi4gbm90ZTo6CisgICAgICBXaGV0aGVyIHRoZSBkYXRhIGlzIGJ1ZmZlcmVkLCBjaHVua2VkIG9yIHJlYXNzZW1ibGVkIGRlcGVuZHMgb24KKyAgICAgIHRoZSB0cmFuc3BvcnQuICBJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkbid0IHJlbHkgb24gc3BlY2lmaWMgc2VtYW50aWNzCisgICAgICBhbmQgaW5zdGVhZCBtYWtlIHlvdXIgcGFyc2luZyBnZW5lcmljIGFuZCBmbGV4aWJsZSBlbm91Z2guICBIb3dldmVyLAorICAgICAgZGF0YSBpcyBhbHdheXMgcmVjZWl2ZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisKKy4uIG1ldGhvZDo6IFByb3RvY29sLmVvZl9yZWNlaXZlZCgpCisKKyAgIENhbGxzIHdoZW4gdGhlIG90aGVyIGVuZCBzaWduYWxzIGl0IHdvbid0IHNlbmQgYW55IG1vcmUgZGF0YQorICAgKGZvciBleGFtcGxlIGJ5IGNhbGxpbmcgOm1ldGg6YHdyaXRlX2VvZmAsIGlmIHRoZSBvdGhlciBlbmQgYWxzbyB1c2VzCisgICBhc3luY2lvKS4KKworICAgVGhpcyBtZXRob2QgbWF5IHJldHVybiBhIGZhbHNlIHZhbHVlIChpbmNsdWRpbmcgTm9uZSksIGluIHdoaWNoIGNhc2UKKyAgIHRoZSB0cmFuc3BvcnQgd2lsbCBjbG9zZSBpdHNlbGYuICBDb252ZXJzZWx5LCBpZiB0aGlzIG1ldGhvZCByZXR1cm5zIGEKKyAgIHRydWUgdmFsdWUsIGNsb3NpbmcgdGhlIHRyYW5zcG9ydCBpcyB1cCB0byB0aGUgcHJvdG9jb2wuICBTaW5jZSB0aGUKKyAgIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBOb25lLCBpdCBpbXBsaWNpdGx5IGNsb3NlcyB0aGUgY29ubmVjdGlvbi4KKworICAgLi4gbm90ZTo6CisgICAgICBTb21lIHRyYW5zcG9ydHMgc3VjaCBhcyBTU0wgZG9uJ3Qgc3VwcG9ydCBoYWxmLWNsb3NlZCBjb25uZWN0aW9ucywKKyAgICAgIGluIHdoaWNoIGNhc2UgcmV0dXJuaW5nIHRydWUgZnJvbSB0aGlzIG1ldGhvZCB3aWxsIG5vdCBwcmV2ZW50IGNsb3NpbmcKKyAgICAgIHRoZSBjb25uZWN0aW9uLgorCis6bWV0aDpgZGF0YV9yZWNlaXZlZGAgY2FuIGJlIGNhbGxlZCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHRpbWVzIGR1cmluZworYSBjb25uZWN0aW9uLiAgSG93ZXZlciwgOm1ldGg6YGVvZl9yZWNlaXZlZGAgaXMgY2FsbGVkIGF0IG1vc3Qgb25jZQorYW5kLCBpZiBjYWxsZWQsIDptZXRoOmBkYXRhX3JlY2VpdmVkYCB3b24ndCBiZSBjYWxsZWQgYWZ0ZXIgaXQuCisKK1N0YXRlIG1hY2hpbmU6CisKKyAgICBzdGFydCAtPiA6bWV0aDpgfkJhc2VQcm90b2NvbC5jb25uZWN0aW9uX21hZGVgCisgICAgWy0+IDptZXRoOmB+UHJvdG9jb2wuZGF0YV9yZWNlaXZlZGAgXCpdCisgICAgWy0+IDptZXRoOmB+UHJvdG9jb2wuZW9mX3JlY2VpdmVkYCA/XQorICAgIC0+IDptZXRoOmB+QmFzZVByb3RvY29sLmNvbm5lY3Rpb25fbG9zdGAgLT4gZW5kCisKKworRGF0YWdyYW0gcHJvdG9jb2xzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBjYWxsYmFja3MgYXJlIGNhbGxlZCBvbiA6Y2xhc3M6YERhdGFncmFtUHJvdG9jb2xgIGluc3RhbmNlcy4KKworLi4gbWV0aG9kOjogRGF0YWdyYW1Qcm90b2NvbC5kYXRhZ3JhbV9yZWNlaXZlZChkYXRhLCBhZGRyKQorCisgICBDYWxsZWQgd2hlbiBhIGRhdGFncmFtIGlzIHJlY2VpdmVkLiAgKmRhdGEqIGlzIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcKKyAgIHRoZSBpbmNvbWluZyBkYXRhLiAgKmFkZHIqIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBwZWVyIHNlbmRpbmcgdGhlIGRhdGE7CisgICB0aGUgZXhhY3QgZm9ybWF0IGRlcGVuZHMgb24gdGhlIHRyYW5zcG9ydC4KKworLi4gbWV0aG9kOjogRGF0YWdyYW1Qcm90b2NvbC5lcnJvcl9yZWNlaXZlZChleGMpCisKKyAgIENhbGxlZCB3aGVuIGEgcHJldmlvdXMgc2VuZCBvciByZWNlaXZlIG9wZXJhdGlvbiByYWlzZXMgYW4KKyAgIDpjbGFzczpgT1NFcnJvcmAuICAqZXhjKiBpcyB0aGUgOmNsYXNzOmBPU0Vycm9yYCBpbnN0YW5jZS4KKworICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIGluIHJhcmUgY29uZGl0aW9ucywgd2hlbiB0aGUgdHJhbnNwb3J0IChlLmcuIFVEUCkKKyAgIGRldGVjdHMgdGhhdCBhIGRhdGFncmFtIGNvdWxkbid0IGJlIGRlbGl2ZXJlZCB0byBpdHMgcmVjaXBpZW50LgorICAgSW4gbWFueSBjb25kaXRpb25zIHRob3VnaCwgdW5kZWxpdmVyYWJsZSBkYXRhZ3JhbXMgd2lsbCBiZSBzaWxlbnRseQorICAgZHJvcHBlZC4KKworCitGbG93IGNvbnRyb2wgY2FsbGJhY2tzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGNhbGxiYWNrcyBtYXkgYmUgY2FsbGVkIG9uIDpjbGFzczpgUHJvdG9jb2xgLAorOmNsYXNzOmBEYXRhZ3JhbVByb3RvY29sYCBhbmQgOmNsYXNzOmBTdWJwcm9jZXNzUHJvdG9jb2xgIGluc3RhbmNlczoKKworLi4gbWV0aG9kOjogQmFzZVByb3RvY29sLnBhdXNlX3dyaXRpbmcoKQorCisgICBDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGdvZXMgb3ZlciB0aGUgaGlnaC13YXRlciBtYXJrLgorCisuLiBtZXRob2Q6OiBCYXNlUHJvdG9jb2wucmVzdW1lX3dyaXRpbmcoKQorCisgICBDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGRyYWlucyBiZWxvdyB0aGUgbG93LXdhdGVyIG1hcmsuCisKKworOm1ldGg6YHBhdXNlX3dyaXRpbmdgIGFuZCA6bWV0aDpgcmVzdW1lX3dyaXRpbmdgIGNhbGxzIGFyZSBwYWlyZWQgLS0KKzptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBidWZmZXIgZ29lcyBzdHJpY3RseSBvdmVyCit0aGUgaGlnaC13YXRlciBtYXJrIChldmVuIGlmIHN1YnNlcXVlbnQgd3JpdGVzIGluY3JlYXNlcyB0aGUgYnVmZmVyIHNpemUKK2V2ZW4gbW9yZSksIGFuZCBldmVudHVhbGx5IDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUKK2J1ZmZlciBzaXplIHJlYWNoZXMgdGhlIGxvdy13YXRlciBtYXJrLgorCisuLiBub3RlOjoKKyAgIElmIHRoZSBidWZmZXIgc2l6ZSBlcXVhbHMgdGhlIGhpZ2gtd2F0ZXIgbWFyaywKKyAgIDptZXRoOmBwYXVzZV93cml0aW5nYCBpcyBub3QgY2FsbGVkIC0tIGl0IG11c3QgZ28gc3RyaWN0bHkgb3Zlci4KKyAgIENvbnZlcnNlbHksIDptZXRoOmByZXN1bWVfd3JpdGluZ2AgaXMgY2FsbGVkIHdoZW4gdGhlIGJ1ZmZlciBzaXplIGlzCisgICBlcXVhbCBvciBsb3dlciB0aGFuIHRoZSBsb3ctd2F0ZXIgbWFyay4gIFRoZXNlIGVuZCBjb25kaXRpb25zCisgICBhcmUgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0IHRoaW5ncyBnbyBhcyBleHBlY3RlZCB3aGVuIGVpdGhlcgorICAgbWFyayBpcyB6ZXJvLgorCisuLiBub3RlOjoKKyAgIE9uIEJTRCBzeXN0ZW1zIChPUyBYLCBGcmVlQlNELCBldGMuKSBmbG93IGNvbnRyb2wgaXMgbm90IHN1cHBvcnRlZAorICAgZm9yIDpjbGFzczpgRGF0YWdyYW1Qcm90b2NvbGAsIGJlY2F1c2Ugc2VuZCBmYWlsdXJlcyBjYXVzZWQgYnkKKyAgIHdyaXRpbmcgdG9vIG1hbnkgcGFja2V0cyBjYW5ub3QgYmUgZGV0ZWN0ZWQgZWFzaWx5LiAgVGhlIHNvY2tldAorICAgYWx3YXlzIGFwcGVhcnMgJ3JlYWR5JyBhbmQgZXhjZXNzIHBhY2tldHMgYXJlIGRyb3BwZWQ7IGFuCisgICA6Y2xhc3M6YE9TRXJyb3JgIHdpdGggZXJybm8gc2V0IHRvIDpjb25zdDpgZXJybm8uRU5PQlVGU2AgbWF5IG9yCisgICBtYXkgbm90IGJlIHJhaXNlZDsgaWYgaXQgaXMgcmFpc2VkLCBpdCB3aWxsIGJlIHJlcG9ydGVkIHRvCisgICA6bWV0aDpgRGF0YWdyYW1Qcm90b2NvbC5lcnJvcl9yZWNlaXZlZGAgYnV0IG90aGVyd2lzZSBpZ25vcmVkLgorCisKK0Nvcm91dGluZXMgYW5kIHByb3RvY29scworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Nvcm91dGluZXMgY2FuIGJlIHNjaGVkdWxlZCBpbiBhIHByb3RvY29sIG1ldGhvZCB1c2luZyA6ZnVuYzpgYXN5bmNgLCBidXQgdGhlcmUKK2lzIG5vIGd1YXJhbnRlZSBtYWRlIGFib3V0IHRoZSBleGVjdXRpb24gb3JkZXIuICBQcm90b2NvbHMgYXJlIG5vdCBhd2FyZSBvZgorY29yb3V0aW5lcyBjcmVhdGVkIGluIHByb3RvY29sIG1ldGhvZHMgYW5kIHNvIHdpbGwgbm90IHdhaXQgZm9yIHRoZW0uCisKK1RvIGhhdmUgYSByZWxpYWJsZSBleGVjdXRpb24gb3JkZXIsIHVzZSA6cmVmOmBzdHJlYW0gb2JqZWN0cyA8YXN5bmNpby1zdHJlYW1zPmAgaW4gYQorY29yb3V0aW5lIHdpdGggYGB5aWVsZCBmcm9tYGAuIEZvciBleGFtcGxlLCB0aGUgOm1ldGg6YFN0cmVhbVdyaXRlci5kcmFpbmAKK2Nvcm91dGluZSBjYW4gYmUgdXNlZCB0byB3YWl0IHVudGlsIHRoZSB3cml0ZSBidWZmZXIgaXMgZmx1c2hlZC4KKworCitQcm90b2NvbCBleGFtcGxlcworPT09PT09PT09PT09PT09PT0KKworLi4gX2FzeW5jaW8tdGNwLWVjaG8tY2xpZW50LXByb3RvY29sOgorCitUQ1AgZWNobyBjbGllbnQgcHJvdG9jb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUQ1AgZWNobyBjbGllbnQgIHVzaW5nIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgbWV0aG9kLCBzZW5kCitkYXRhIGFuZCB3YWl0IHVudGlsIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgY2xhc3MgRWNob0NsaWVudFByb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSwgbG9vcCk6CisgICAgICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisgICAgICAgICAgICBzZWxmLmxvb3AgPSBsb29wCisKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgdHJhbnNwb3J0LndyaXRlKHNlbGYubWVzc2FnZS5lbmNvZGUoKSkKKyAgICAgICAgICAgIHByaW50KCdEYXRhIHNlbnQ6IHshcn0nLmZvcm1hdChzZWxmLm1lc3NhZ2UpKQorCisgICAgICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcHJpbnQoJ0RhdGEgcmVjZWl2ZWQ6IHshcn0nLmZvcm1hdChkYXRhLmRlY29kZSgpKSkKKworICAgICAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgICAgICBwcmludCgnVGhlIHNlcnZlciBjbG9zZWQgdGhlIGNvbm5lY3Rpb24nKQorICAgICAgICAgICAgcHJpbnQoJ1N0b3AgdGhlIGV2ZW50IGxvb3AnKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIG1lc3NhZ2UgPSAnSGVsbG8gV29ybGQhJworICAgIGNvcm8gPSBsb29wLmNyZWF0ZV9jb25uZWN0aW9uKGxhbWJkYTogRWNob0NsaWVudFByb3RvY29sKG1lc3NhZ2UsIGxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxMjcuMC4wLjEnLCA4ODg4KQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgbG9vcC5jbG9zZSgpCisKK1RoZSBldmVudCBsb29wIGlzIHJ1bm5pbmcgdHdpY2UuIFRoZQorOm1ldGg6YH5CYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZWAgbWV0aG9kIGlzIHByZWZlcnJlZCBpbiB0aGlzIHNob3J0CitleGFtcGxlIHRvIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgc2VydmVyIGlzIG5vdCBsaXN0ZW5pbmcsIGluc3RlYWQgb2YKK2hhdmluZyB0byB3cml0ZSBhIHNob3J0IGNvcm91dGluZSB0byBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBhbmQgc3RvcCB0aGUKK3J1bm5pbmcgbG9vcC4gQXQgOm1ldGg6YH5CYXNlRXZlbnRMb29wLnJ1bl91bnRpbF9jb21wbGV0ZWAgZXhpdCwgdGhlIGxvb3AgaXMKK25vIGxvbmdlciBydW5uaW5nLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHN0b3AgdGhlIGxvb3AgaW4gY2FzZSBvZiBhbiBlcnJvci4KKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBUQ1AgZWNobyBjbGllbnQgdXNpbmcgc3RyZWFtcyA8YXN5bmNpby10Y3AtZWNoby1jbGllbnQtc3RyZWFtcz5gCisgICBleGFtcGxlIHVzZXMgdGhlIDpmdW5jOmBhc3luY2lvLm9wZW5fY29ubmVjdGlvbmAgZnVuY3Rpb24uCisKKworLi4gX2FzeW5jaW8tdGNwLWVjaG8tc2VydmVyLXByb3RvY29sOgorCitUQ1AgZWNobyBzZXJ2ZXIgcHJvdG9jb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUQ1AgZWNobyBzZXJ2ZXIgdXNpbmcgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgIG1ldGhvZCwgc2VuZCBiYWNrCityZWNlaXZlZCBkYXRhIGFuZCBjbG9zZSB0aGUgY29ubmVjdGlvbjo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgY2xhc3MgRWNob1NlcnZlckNsaWVudFByb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgICAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICAgICBwZWVybmFtZSA9IHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGVlcm5hbWUnKQorICAgICAgICAgICAgcHJpbnQoJ0Nvbm5lY3Rpb24gZnJvbSB7fScuZm9ybWF0KHBlZXJuYW1lKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICAgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBtZXNzYWdlID0gZGF0YS5kZWNvZGUoKQorICAgICAgICAgICAgcHJpbnQoJ0RhdGEgcmVjZWl2ZWQ6IHshcn0nLmZvcm1hdChtZXNzYWdlKSkKKworICAgICAgICAgICAgcHJpbnQoJ1NlbmQ6IHshcn0nLmZvcm1hdChtZXNzYWdlKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LndyaXRlKGRhdGEpCisKKyAgICAgICAgICAgIHByaW50KCdDbG9zZSB0aGUgY2xpZW50IHNvY2tldCcpCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC5jbG9zZSgpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgIyBFYWNoIGNsaWVudCBjb25uZWN0aW9uIHdpbGwgY3JlYXRlIGEgbmV3IHByb3RvY29sIGluc3RhbmNlCisgICAgY29ybyA9IGxvb3AuY3JlYXRlX3NlcnZlcihFY2hvU2VydmVyQ2xpZW50UHJvdG9jb2wsICcxMjcuMC4wLjEnLCA4ODg4KQorICAgIHNlcnZlciA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICAjIFNlcnZlIHJlcXVlc3RzIHVudGlsIEN0cmwrQyBpcyBwcmVzc2VkCisgICAgcHJpbnQoJ1NlcnZpbmcgb24ge30nLmZvcm1hdChzZXJ2ZXIuc29ja2V0c1swXS5nZXRzb2NrbmFtZSgpKSkKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgcGFzcworCisgICAgIyBDbG9zZSB0aGUgc2VydmVyCisgICAgc2VydmVyLmNsb3NlKCkKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZXJ2ZXIud2FpdF9jbG9zZWQoKSkKKyAgICBsb29wLmNsb3NlKCkKKworOm1ldGg6YFRyYW5zcG9ydC5jbG9zZWAgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlcgorOm1ldGg6YFdyaXRlVHJhbnNwb3J0LndyaXRlYCBldmVuIGlmIGRhdGEgYXJlIG5vdCBzZW50IHlldCBvbiB0aGUgc29ja2V0OiBib3RoCittZXRob2RzIGFyZSBhc3luY2hyb25vdXMuIGBgeWllbGQgZnJvbWBgIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGVzZSB0cmFuc3BvcnQKK21ldGhvZHMgYXJlIG5vdCBjb3JvdXRpbmVzLgorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YFRDUCBlY2hvIHNlcnZlciB1c2luZyBzdHJlYW1zIDxhc3luY2lvLXRjcC1lY2hvLXNlcnZlci1zdHJlYW1zPmAKKyAgIGV4YW1wbGUgdXNlcyB0aGUgOmZ1bmM6YGFzeW5jaW8uc3RhcnRfc2VydmVyYCBmdW5jdGlvbi4KKworCisuLiBfYXN5bmNpby11ZHAtZWNoby1jbGllbnQtcHJvdG9jb2w6CisKK1VEUCBlY2hvIGNsaWVudCBwcm90b2NvbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1VEUCBlY2hvIGNsaWVudCB1c2luZyB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50YAorbWV0aG9kLCBzZW5kIGRhdGEgYW5kIGNsb3NlIHRoZSB0cmFuc3BvcnQgd2hlbiB3ZSByZWNlaXZlZCB0aGUgYW5zd2VyOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBjbGFzcyBFY2hvQ2xpZW50UHJvdG9jb2w6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlLCBsb29wKToKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZSA9IG1lc3NhZ2UKKyAgICAgICAgICAgIHNlbGYubG9vcCA9IGxvb3AKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gTm9uZQorCisgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgICAgICBwcmludCgnU2VuZDonLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC5zZW5kdG8oc2VsZi5tZXNzYWdlLmVuY29kZSgpKQorCisgICAgICAgIGRlZiBkYXRhZ3JhbV9yZWNlaXZlZChzZWxmLCBkYXRhLCBhZGRyKToKKyAgICAgICAgICAgIHByaW50KCJSZWNlaXZlZDoiLCBkYXRhLmRlY29kZSgpKQorCisgICAgICAgICAgICBwcmludCgiQ2xvc2UgdGhlIHNvY2tldCIpCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC5jbG9zZSgpCisKKyAgICAgICAgZGVmIGVycm9yX3JlY2VpdmVkKHNlbGYsIGV4Yyk6CisgICAgICAgICAgICBwcmludCgnRXJyb3IgcmVjZWl2ZWQ6JywgZXhjKQorCisgICAgICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgICAgIHByaW50KCJTb2NrZXQgY2xvc2VkLCBzdG9wIHRoZSBldmVudCBsb29wIikKKyAgICAgICAgICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgbWVzc2FnZSA9ICJIZWxsbyBXb3JsZCEiCisgICAgY29ubmVjdCA9IGxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICBsYW1iZGE6IEVjaG9DbGllbnRQcm90b2NvbChtZXNzYWdlLCBsb29wKSwKKyAgICAgICAgcmVtb3RlX2FkZHI9KCcxMjcuMC4wLjEnLCA5OTk5KSkKKyAgICB0cmFuc3BvcnQsIHByb3RvY29sID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgIGxvb3AuY2xvc2UoKQorCisKKy4uIF9hc3luY2lvLXVkcC1lY2hvLXNlcnZlci1wcm90b2NvbDoKKworVURQIGVjaG8gc2VydmVyIHByb3RvY29sCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVURQIGVjaG8gc2VydmVyIHVzaW5nIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRgCittZXRob2QsIHNlbmQgYmFjayByZWNlaXZlZCBkYXRhOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBjbGFzcyBFY2hvU2VydmVyUHJvdG9jb2w6CisgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICAgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICAgICAgbWVzc2FnZSA9IGRhdGEuZGVjb2RlKCkKKyAgICAgICAgICAgIHByaW50KCdSZWNlaXZlZCAlciBmcm9tICVzJyAlIChtZXNzYWdlLCBhZGRyKSkKKyAgICAgICAgICAgIHByaW50KCdTZW5kICVyIHRvICVzJyAlIChtZXNzYWdlLCBhZGRyKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnNwb3J0LnNlbmR0byhkYXRhLCBhZGRyKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIHByaW50KCJTdGFydGluZyBVRFAgc2VydmVyIikKKyAgICAjIE9uZSBwcm90b2NvbCBpbnN0YW5jZSB3aWxsIGJlIGNyZWF0ZWQgdG8gc2VydmUgYWxsIGNsaWVudCByZXF1ZXN0cworICAgIGxpc3RlbiA9IGxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICBFY2hvU2VydmVyUHJvdG9jb2wsIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCA5OTk5KSkKKyAgICB0cmFuc3BvcnQsIHByb3RvY29sID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUobGlzdGVuKQorCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHBhc3MKKworICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgbG9vcC5jbG9zZSgpCisKKworLi4gX2FzeW5jaW8tcmVnaXN0ZXItc29ja2V0OgorCitSZWdpc3RlciBhbiBvcGVuIHNvY2tldCB0byB3YWl0IGZvciBkYXRhIHVzaW5nIGEgcHJvdG9jb2wKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXYWl0IHVudGlsIGEgc29ja2V0IHJlY2VpdmVzIGRhdGEgdXNpbmcgdGhlCis6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgbWV0aG9kIHdpdGggYSBwcm90b2NvbCwgYW5kIHRoZW4gY2xvc2UKK3RoZSBldmVudCBsb29wIDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworICAgIHRyeToKKyAgICAgICAgZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldHBhaXIKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGZyb20gYXN5bmNpby53aW5kb3dzX3V0aWxzIGltcG9ydCBzb2NrZXRwYWlyCisKKyAgICAjIENyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIHNvY2tldHMKKyAgICByc29jaywgd3NvY2sgPSBzb2NrZXRwYWlyKCkKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBjbGFzcyBNeVByb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgICAgICB0cmFuc3BvcnQgPSBOb25lCisKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKworICAgICAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgICAgIHByaW50KCJSZWNlaXZlZDoiLCBkYXRhLmRlY29kZSgpKQorCisgICAgICAgICAgICAjIFdlIGFyZSBkb25lOiBjbG9zZSB0aGUgdHJhbnNwb3J0IChpdCB3aWxsIGNhbGwgY29ubmVjdGlvbl9sb3N0KCkpCisgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC5jbG9zZSgpCisKKyAgICAgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICAgICAgIyBUaGUgc29ja2V0IGhhcyBiZWVuIGNsb3NlZCwgc3RvcCB0aGUgZXZlbnQgbG9vcAorICAgICAgICAgICAgbG9vcC5zdG9wKCkKKworICAgICMgUmVnaXN0ZXIgdGhlIHNvY2tldCB0byB3YWl0IGZvciBkYXRhCisgICAgY29ubmVjdF9jb3JvID0gbG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvY29sLCBzb2NrPXJzb2NrKQorICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0X2Nvcm8pCisKKyAgICAjIFNpbXVsYXRlIHRoZSByZWNlcHRpb24gb2YgZGF0YSBmcm9tIHRoZSBuZXR3b3JrCisgICAgbG9vcC5jYWxsX3Nvb24od3NvY2suc2VuZCwgJ2FiYycuZW5jb2RlKCkpCisKKyAgICAjIFJ1biB0aGUgZXZlbnQgbG9vcAorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCisgICAgIyBXZSBhcmUgZG9uZSwgY2xvc2Ugc29ja2V0cyBhbmQgdGhlIGV2ZW50IGxvb3AKKyAgICByc29jay5jbG9zZSgpCisgICAgd3NvY2suY2xvc2UoKQorICAgIGxvb3AuY2xvc2UoKQorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YHdhdGNoIGEgZmlsZSBkZXNjcmlwdG9yIGZvciByZWFkIGV2ZW50cworICAgPGFzeW5jaW8td2F0Y2gtcmVhZC1ldmVudD5gIGV4YW1wbGUgdXNlcyB0aGUgbG93LWxldmVsCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5hZGRfcmVhZGVyYCBtZXRob2QgdG8gcmVnaXN0ZXIgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiBhCisgICBzb2NrZXQuCisKKyAgIFRoZSA6cmVmOmByZWdpc3RlciBhbiBvcGVuIHNvY2tldCB0byB3YWl0IGZvciBkYXRhIHVzaW5nIHN0cmVhbXMKKyAgIDxhc3luY2lvLXJlZ2lzdGVyLXNvY2tldC1zdHJlYW1zPmAgZXhhbXBsZSB1c2VzIGhpZ2gtbGV2ZWwgc3RyZWFtcworICAgY3JlYXRlZCBieSB0aGUgOmZ1bmM6YG9wZW5fY29ubmVjdGlvbmAgZnVuY3Rpb24gaW4gYSBjb3JvdXRpbmUuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXF1ZXVlLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tcXVldWUucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNzA2NzIKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXF1ZXVlLnJzdApAQCAtMCwwICsxLDE2OSBAQAorLi4gY3VycmVudG1vZHVsZTo6IGFzeW5jaW8KKworUXVldWVzCis9PT09PT0KKworUXVldWVzOgorCisqIDpjbGFzczpgUXVldWVgCisqIDpjbGFzczpgUHJpb3JpdHlRdWV1ZWAKKyogOmNsYXNzOmBMaWZvUXVldWVgCisqIDpjbGFzczpgSm9pbmFibGVRdWV1ZWAKKworYXN5bmNpbyBxdWV1ZSBBUEkgd2FzIGRlc2lnbmVkIHRvIGJlIGNsb3NlIHRvIGNsYXNzZXMgb2YgdGhlIDptb2Q6YHF1ZXVlYAorbW9kdWxlICg6Y2xhc3M6YH5xdWV1ZS5RdWV1ZWAsIDpjbGFzczpgfnF1ZXVlLlByaW9yaXR5UXVldWVgLAorOmNsYXNzOmB+cXVldWUuTGlmb1F1ZXVlYCksIGJ1dCBpdCBoYXMgbm8gKnRpbWVvdXQqIHBhcmFtZXRlci4gVGhlCis6ZnVuYzpgYXN5bmNpby53YWl0X2ZvcmAgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gY2FuY2VsIGEgdGFzayBhZnRlciBhIHRpbWVvdXQuCisKK1F1ZXVlCistLS0tLQorCisuLiBjbGFzczo6IFF1ZXVlKG1heHNpemU9MCwgXCosIGxvb3A9Tm9uZSkKKworICAgQSBxdWV1ZSwgdXNlZnVsIGZvciBjb29yZGluYXRpbmcgcHJvZHVjZXIgYW5kIGNvbnN1bWVyIGNvcm91dGluZXMuCisKKyAgIElmICptYXhzaXplKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybywgdGhlIHF1ZXVlIHNpemUgaXMgaW5maW5pdGUuIElmCisgICBpdCBpcyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBgYDBgYCwgdGhlbiBgYHlpZWxkIGZyb20gcHV0KClgYCB3aWxsIGJsb2NrCisgICB3aGVuIHRoZSBxdWV1ZSByZWFjaGVzICptYXhzaXplKiwgdW50aWwgYW4gaXRlbSBpcyByZW1vdmVkIGJ5IDptZXRoOmBnZXRgLgorCisgICBVbmxpa2UgdGhlIHN0YW5kYXJkIGxpYnJhcnkgOm1vZDpgcXVldWVgLCB5b3UgY2FuIHJlbGlhYmx5IGtub3cgdGhpcyBRdWV1ZSdzCisgICBzaXplIHdpdGggOm1ldGg6YHFzaXplYCwgc2luY2UgeW91ciBzaW5nbGUtdGhyZWFkZWQgYXN5bmNpbyBhcHBsaWNhdGlvbiB3b24ndAorICAgYmUgaW50ZXJydXB0ZWQgYmV0d2VlbiBjYWxsaW5nIDptZXRoOmBxc2l6ZWAgYW5kIGRvaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUKKyAgIFF1ZXVlLgorCisgICBUaGlzIGNsYXNzIGlzIDpyZWY6YG5vdCB0aHJlYWQgc2FmZSA8YXN5bmNpby1tdWx0aXRocmVhZGluZz5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC40CisgICAgICBOZXcgOm1ldGg6YGpvaW5gIGFuZCA6bWV0aDpgdGFza19kb25lYCBtZXRob2RzLgorCisgICAuLiBtZXRob2Q6OiBlbXB0eSgpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcXVldWUgaXMgZW1wdHksIGBgRmFsc2VgYCBvdGhlcndpc2UuCisKKyAgIC4uIG1ldGhvZDo6IGZ1bGwoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgYXJlIDphdHRyOmBtYXhzaXplYCBpdGVtcyBpbiB0aGUgcXVldWUuCisKKyAgICAgIC4uIG5vdGU6OgorCisgICAgICAgICBJZiB0aGUgUXVldWUgd2FzIGluaXRpYWxpemVkIHdpdGggYGBtYXhzaXplPTBgYCAodGhlIGRlZmF1bHQpLCB0aGVuCisgICAgICAgICA6bWV0aDpgZnVsbCgpYCBpcyBuZXZlciBgYFRydWVgYC4KKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogZ2V0KCkKKworICAgICAgUmVtb3ZlIGFuZCByZXR1cm4gYW4gaXRlbSBmcm9tIHRoZSBxdWV1ZS4gSWYgcXVldWUgaXMgZW1wdHksIHdhaXQgdW50aWwKKyAgICAgIGFuIGl0ZW0gaXMgYXZhaWxhYmxlLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgICAgIC4uIHNlZWFsc286OgorCisgICAgICAgICBUaGUgOm1ldGg6YGVtcHR5YCBtZXRob2QuCisKKyAgIC4uIG1ldGhvZDo6IGdldF9ub3dhaXQoKQorCisgICAgICBSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICBSZXR1cm4gYW4gaXRlbSBpZiBvbmUgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLCBlbHNlIHJhaXNlCisgICAgICA6ZXhjOmBRdWV1ZUVtcHR5YC4KKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogam9pbigpCisKKyAgICAgIEJsb2NrIHVudGlsIGFsbCBpdGVtcyBpbiB0aGUgcXVldWUgaGF2ZSBiZWVuIGdvdHRlbiBhbmQgcHJvY2Vzc2VkLgorCisgICAgICBUaGUgY291bnQgb2YgdW5maW5pc2hlZCB0YXNrcyBnb2VzIHVwIHdoZW5ldmVyIGFuIGl0ZW0gaXMgYWRkZWQgdG8gdGhlCisgICAgICBxdWV1ZS4gVGhlIGNvdW50IGdvZXMgZG93biB3aGVuZXZlciBhIGNvbnN1bWVyIHRocmVhZCBjYWxscworICAgICAgOm1ldGg6YHRhc2tfZG9uZWAgdG8gaW5kaWNhdGUgdGhhdCB0aGUgaXRlbSB3YXMgcmV0cmlldmVkIGFuZCBhbGwgd29yayBvbgorICAgICAgaXQgaXMgY29tcGxldGUuICBXaGVuIHRoZSBjb3VudCBvZiB1bmZpbmlzaGVkIHRhc2tzIGRyb3BzIHRvIHplcm8sCisgICAgICA6bWV0aDpgam9pbmAgdW5ibG9ja3MuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjQKKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogcHV0KGl0ZW0pCisKKyAgICAgIFB1dCBhbiBpdGVtIGludG8gdGhlIHF1ZXVlLiBJZiB0aGUgcXVldWUgaXMgZnVsbCwgd2FpdCB1bnRpbCBhIGZyZWUgc2xvdAorICAgICAgaXMgYXZhaWxhYmxlIGJlZm9yZSBhZGRpbmcgaXRlbS4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAgICAuLiBzZWVhbHNvOjoKKworICAgICAgICAgVGhlIDptZXRoOmBmdWxsYCBtZXRob2QuCisKKyAgIC4uIG1ldGhvZDo6IHB1dF9ub3dhaXQoaXRlbSkKKworICAgICAgUHV0IGFuIGl0ZW0gaW50byB0aGUgcXVldWUgd2l0aG91dCBibG9ja2luZy4KKworICAgICAgSWYgbm8gZnJlZSBzbG90IGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZSwgcmFpc2UgOmV4YzpgUXVldWVGdWxsYC4KKworICAgLi4gbWV0aG9kOjogcXNpemUoKQorCisgICAgICBOdW1iZXIgb2YgaXRlbXMgaW4gdGhlIHF1ZXVlLgorCisgICAuLiBtZXRob2Q6OiB0YXNrX2RvbmUoKQorCisgICAgICBJbmRpY2F0ZSB0aGF0IGEgZm9ybWVybHkgZW5xdWV1ZWQgdGFzayBpcyBjb21wbGV0ZS4KKworICAgICAgVXNlZCBieSBxdWV1ZSBjb25zdW1lcnMuIEZvciBlYWNoIDptZXRoOmB+UXVldWUuZ2V0YCB1c2VkIHRvIGZldGNoIGEgdGFzaywgYQorICAgICAgc3Vic2VxdWVudCBjYWxsIHRvIDptZXRoOmB0YXNrX2RvbmVgIHRlbGxzIHRoZSBxdWV1ZSB0aGF0IHRoZSBwcm9jZXNzaW5nCisgICAgICBvbiB0aGUgdGFzayBpcyBjb21wbGV0ZS4KKworICAgICAgSWYgYSA6bWV0aDpgam9pbmAgaXMgY3VycmVudGx5IGJsb2NraW5nLCBpdCB3aWxsIHJlc3VtZSB3aGVuIGFsbCBpdGVtcworICAgICAgaGF2ZSBiZWVuIHByb2Nlc3NlZCAobWVhbmluZyB0aGF0IGEgOm1ldGg6YHRhc2tfZG9uZWAgY2FsbCB3YXMgcmVjZWl2ZWQKKyAgICAgIGZvciBldmVyeSBpdGVtIHRoYXQgaGFkIGJlZW4gOm1ldGg6YH5RdWV1ZS5wdXRgIGludG8gdGhlIHF1ZXVlKS4KKworICAgICAgUmFpc2VzIDpleGM6YFZhbHVlRXJyb3JgIGlmIGNhbGxlZCBtb3JlIHRpbWVzIHRoYW4gdGhlcmUgd2VyZSBpdGVtcworICAgICAgcGxhY2VkIGluIHRoZSBxdWV1ZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjQKKworICAgLi4gYXR0cmlidXRlOjogbWF4c2l6ZQorCisgICAgICBOdW1iZXIgb2YgaXRlbXMgYWxsb3dlZCBpbiB0aGUgcXVldWUuCisKKworUHJpb3JpdHlRdWV1ZQorLS0tLS0tLS0tLS0tLQorCisuLiBjbGFzczo6IFByaW9yaXR5UXVldWUKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFF1ZXVlYDsgcmV0cmlldmVzIGVudHJpZXMgaW4gcHJpb3JpdHkgb3JkZXIgKGxvd2VzdAorICAgZmlyc3QpLgorCisgICBFbnRyaWVzIGFyZSB0eXBpY2FsbHkgdHVwbGVzIG9mIHRoZSBmb3JtOiAocHJpb3JpdHkgbnVtYmVyLCBkYXRhKS4KKworCitMaWZvUXVldWUKKy0tLS0tLS0tLQorCisuLiBjbGFzczo6IExpZm9RdWV1ZQorCisgICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFF1ZXVlYCB0aGF0IHJldHJpZXZlcyBtb3N0IHJlY2VudGx5IGFkZGVkIGVudHJpZXMKKyAgICBmaXJzdC4KKworCitKb2luYWJsZVF1ZXVlCiteXl5eXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogSm9pbmFibGVRdWV1ZQorCisgICBEZXByZWNhdGVkIGFsaWFzIGZvciA6Y2xhc3M6YFF1ZXVlYC4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuNC40CisKKworRXhjZXB0aW9ucworXl5eXl5eXl5eXgorCisuLiBleGNlcHRpb246OiBRdWV1ZUVtcHR5CisKKyAgIEV4Y2VwdGlvbiByYWlzZWQgd2hlbiB0aGUgOm1ldGg6YH5RdWV1ZS5nZXRfbm93YWl0YCBtZXRob2QgaXMgY2FsbGVkIG9uIGEKKyAgIDpjbGFzczpgUXVldWVgIG9iamVjdCB3aGljaCBpcyBlbXB0eS4KKworCisuLiBleGNlcHRpb246OiBRdWV1ZUZ1bGwKKworICAgRXhjZXB0aW9uIHJhaXNlZCB3aGVuIHRoZSA6bWV0aDpgflF1ZXVlLnB1dF9ub3dhaXRgIG1ldGhvZCBpcyBjYWxsZWQgb24gYQorICAgOmNsYXNzOmBRdWV1ZWAgb2JqZWN0IHdoaWNoIGlzIGZ1bGwuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN0cmVhbS5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJiOTNmOQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3RyZWFtLnJzdApAQCAtMCwwICsxLDQzMSBAQAorLi4gY3VycmVudG1vZHVsZTo6IGFzeW5jaW8KKworLi4gX2FzeW5jaW8tc3RyZWFtczoKKworKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKK1N0cmVhbXMgKGNvcm91dGluZSBiYXNlZCBBUEkpCisrKysrKysrKysrKysrKysrKysrKysrKysrKysrKworCitTdHJlYW0gZnVuY3Rpb25zCis9PT09PT09PT09PT09PT09CisKKy4uIG5vdGU6OgorCisgICBUaGUgdG9wLWxldmVsIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSBhcmUgbWVhbnQgY29udmVuaWVuY2Ugd3JhcHBlcnMKKyAgIG9ubHk7IHRoZXJlJ3MgcmVhbGx5IG5vdGhpbmcgc3BlY2lhbCB0aGVyZSwgYW5kIGlmIHRoZXkgZG9uJ3QgZG8KKyAgIGV4YWN0bHkgd2hhdCB5b3Ugd2FudCwgZmVlbCBmcmVlIHRvIGNvcHkgdGhlaXIgY29kZS4KKworCisuLiBjb3JvdXRpbmVmdW5jdGlvbjo6IG9wZW5fY29ubmVjdGlvbihob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgXCosIGxvb3A9Tm9uZSwgbGltaXQ9Tm9uZSwgXCpcKmt3ZHMpCisKKyAgIEEgd3JhcHBlciBmb3IgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uKClgIHJldHVybmluZyBhIChyZWFkZXIsCisgICB3cml0ZXIpIHBhaXIuCisKKyAgIFRoZSByZWFkZXIgcmV0dXJuZWQgaXMgYSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgaW5zdGFuY2U7IHRoZSB3cml0ZXIgaXMKKyAgIGEgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIGluc3RhbmNlLgorCisgICBUaGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0bworICAgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb25gIGV4Y2VwdCAqcHJvdG9jb2xfZmFjdG9yeSo7IG1vc3QKKyAgIGNvbW1vbiBhcmUgcG9zaXRpb25hbCBob3N0IGFuZCBwb3J0LCB3aXRoIHZhcmlvdXMgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKKyAgIGZvbGxvd2luZy4KKworICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmxvb3AqICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgIGluc3RhbmNlIHRvIHVzZSkgYW5kICpsaW1pdCogKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgIDpjbGFzczpgU3RyZWFtUmVhZGVyYCkuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBjb3JvdXRpbmVmdW5jdGlvbjo6IHN0YXJ0X3NlcnZlcihjbGllbnRfY29ubmVjdGVkX2NiLCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgXCosIGxvb3A9Tm9uZSwgbGltaXQ9Tm9uZSwgXCpcKmt3ZHMpCisKKyAgIFN0YXJ0IGEgc29ja2V0IHNlcnZlciwgd2l0aCBhIGNhbGxiYWNrIGZvciBlYWNoIGNsaWVudCBjb25uZWN0ZWQuIFRoZSByZXR1cm4KKyAgIHZhbHVlIGlzIHRoZSBzYW1lIGFzIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jcmVhdGVfc2VydmVyKClgLgorCisgICBUaGUgKmNsaWVudF9jb25uZWN0ZWRfY2IqIHBhcmFtZXRlciBpcyBjYWxsZWQgd2l0aCB0d28gcGFyYW1ldGVyczoKKyAgICpjbGllbnRfcmVhZGVyKiwgKmNsaWVudF93cml0ZXIqLiAgKmNsaWVudF9yZWFkZXIqIGlzIGEKKyAgIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBvYmplY3QsIHdoaWxlICpjbGllbnRfd3JpdGVyKiBpcyBhCisgICA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgb2JqZWN0LiAgVGhlICpjbGllbnRfY29ubmVjdGVkX2NiKiBwYXJhbWV0ZXIgY2FuCisgICBlaXRoZXIgYmUgYSBwbGFpbiBjYWxsYmFjayBmdW5jdGlvbiBvciBhIDpyZWY6YGNvcm91dGluZSBmdW5jdGlvbgorICAgPGNvcm91dGluZT5gOyBpZiBpdCBpcyBhIGNvcm91dGluZSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5CisgICBjb252ZXJ0ZWQgaW50byBhIDpjbGFzczpgVGFza2AuCisKKyAgIFRoZSByZXN0IG9mIHRoZSBhcmd1bWVudHMgYXJlIGFsbCB0aGUgdXN1YWwgYXJndW1lbnRzIHRvCisgICA6bWV0aDpgfkJhc2VFdmVudExvb3AuY3JlYXRlX3NlcnZlcigpYCBleGNlcHQgKnByb3RvY29sX2ZhY3RvcnkqOyBtb3N0CisgICBjb21tb24gYXJlIHBvc2l0aW9uYWwgKmhvc3QqIGFuZCAqcG9ydCosIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkCisgICBhcmd1bWVudHMgZm9sbG93aW5nLgorCisgICBBZGRpdGlvbmFsIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqbG9vcCogKHRvIHNldCB0aGUgZXZlbnQgbG9vcAorICAgaW5zdGFuY2UgdG8gdXNlKSBhbmQgKmxpbWl0KiAodG8gc2V0IHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgKS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKy4uIGNvcm91dGluZWZ1bmN0aW9uOjogb3Blbl91bml4X2Nvbm5lY3Rpb24ocGF0aD1Ob25lLCBcKiwgbG9vcD1Ob25lLCBsaW1pdD1Ob25lLCAqKmt3ZHMpCisKKyAgIEEgd3JhcHBlciBmb3IgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oKWAgcmV0dXJuaW5nCisgICBhIChyZWFkZXIsIHdyaXRlcikgcGFpci4KKworICAgU2VlIDpmdW5jOmBvcGVuX2Nvbm5lY3Rpb25gIGZvciBpbmZvcm1hdGlvbiBhYm91dCByZXR1cm4gdmFsdWUgYW5kIG90aGVyCisgICBkZXRhaWxzLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgQXZhaWxhYmlsaXR5OiBVTklYLgorCisuLiBjb3JvdXRpbmVmdW5jdGlvbjo6IHN0YXJ0X3VuaXhfc2VydmVyKGNsaWVudF9jb25uZWN0ZWRfY2IsIHBhdGg9Tm9uZSwgXCosIGxvb3A9Tm9uZSwgbGltaXQ9Tm9uZSwgKiprd2RzKQorCisgICBTdGFydCBhIFVOSVggRG9tYWluIFNvY2tldCBzZXJ2ZXIsIHdpdGggYSBjYWxsYmFjayBmb3IgZWFjaCBjbGllbnQgY29ubmVjdGVkLgorCisgICBTZWUgOmZ1bmM6YHN0YXJ0X3NlcnZlcmAgZm9yIGluZm9ybWF0aW9uIGFib3V0IHJldHVybiB2YWx1ZSBhbmQgb3RoZXIKKyAgIGRldGFpbHMuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICBBdmFpbGFiaWxpdHk6IFVOSVguCisKKworU3RyZWFtUmVhZGVyCis9PT09PT09PT09PT0KKworLi4gY2xhc3M6OiBTdHJlYW1SZWFkZXIobGltaXQ9Tm9uZSwgbG9vcD1Ob25lKQorCisgICBUaGlzIGNsYXNzIGlzIDpyZWY6YG5vdCB0aHJlYWQgc2FmZSA8YXN5bmNpby1tdWx0aXRocmVhZGluZz5gLgorCisgICAuLiBtZXRob2Q6OiBleGNlcHRpb24oKQorCisgICAgICBHZXQgdGhlIGV4Y2VwdGlvbi4KKworICAgLi4gbWV0aG9kOjogZmVlZF9lb2YoKQorCisgICAgICBBY2tub3dsZWRnZSB0aGUgRU9GLgorCisgICAuLiBtZXRob2Q6OiBmZWVkX2RhdGEoZGF0YSkKKworICAgICAgRmVlZCAqZGF0YSogYnl0ZXMgaW4gdGhlIGludGVybmFsIGJ1ZmZlci4gIEFueSBvcGVyYXRpb25zIHdhaXRpbmcKKyAgICAgIGZvciB0aGUgZGF0YSB3aWxsIGJlIHJlc3VtZWQuCisKKyAgIC4uIG1ldGhvZDo6IHNldF9leGNlcHRpb24oZXhjKQorCisgICAgICBTZXQgdGhlIGV4Y2VwdGlvbi4KKworICAgLi4gbWV0aG9kOjogc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpCisKKyAgICAgIFNldCB0aGUgdHJhbnNwb3J0LgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiByZWFkKG49LTEpCisKKyAgICAgIFJlYWQgdXAgdG8gKm4qIGJ5dGVzLiAgSWYgKm4qIGlzIG5vdCBwcm92aWRlZCwgb3Igc2V0IHRvIGBgLTFgYCwKKyAgICAgIHJlYWQgdW50aWwgRU9GIGFuZCByZXR1cm4gYWxsIHJlYWQgYnl0ZXMuCisKKyAgICAgIElmIHRoZSBFT0Ygd2FzIHJlY2VpdmVkIGFuZCB0aGUgaW50ZXJuYWwgYnVmZmVyIGlzIGVtcHR5LAorICAgICAgcmV0dXJuIGFuIGVtcHR5IGBgYnl0ZXNgYCBvYmplY3QuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogcmVhZGxpbmUoKQorCisgICAgICBSZWFkIG9uZSBsaW5lLCB3aGVyZSAibGluZSIgaXMgYSBzZXF1ZW5jZSBvZiBieXRlcyBlbmRpbmcgd2l0aCBgYFxuYGAuCisKKyAgICAgIElmIEVPRiBpcyByZWNlaXZlZCwgYW5kIGBgXG5gYCB3YXMgbm90IGZvdW5kLCB0aGUgbWV0aG9kIHdpbGwKKyAgICAgIHJldHVybiB0aGUgcGFydGlhbCByZWFkIGJ5dGVzLgorCisgICAgICBJZiB0aGUgRU9GIHdhcyByZWNlaXZlZCBhbmQgdGhlIGludGVybmFsIGJ1ZmZlciBpcyBlbXB0eSwKKyAgICAgIHJldHVybiBhbiBlbXB0eSBgYGJ5dGVzYGAgb2JqZWN0LgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IHJlYWRleGFjdGx5KG4pCisKKyAgICAgIFJlYWQgZXhhY3RseSAqbiogYnl0ZXMuIFJhaXNlIGFuIDpleGM6YEluY29tcGxldGVSZWFkRXJyb3JgIGlmIHRoZSBlbmQgb2YKKyAgICAgIHRoZSBzdHJlYW0gaXMgcmVhY2hlZCBiZWZvcmUgKm4qIGNhbiBiZSByZWFkLCB0aGUKKyAgICAgIDphdHRyOmBJbmNvbXBsZXRlUmVhZEVycm9yLnBhcnRpYWxgIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIGNvbnRhaW5zCisgICAgICB0aGUgcGFydGlhbCByZWFkIGJ5dGVzLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IGF0X2VvZigpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgYnVmZmVyIGlzIGVtcHR5IGFuZCA6bWV0aDpgZmVlZF9lb2ZgIHdhcyBjYWxsZWQuCisKKworU3RyZWFtV3JpdGVyCis9PT09PT09PT09PT0KKworLi4gY2xhc3M6OiBTdHJlYW1Xcml0ZXIodHJhbnNwb3J0LCBwcm90b2NvbCwgcmVhZGVyLCBsb29wKQorCisgICBXcmFwcyBhIFRyYW5zcG9ydC4KKworICAgVGhpcyBleHBvc2VzIDptZXRoOmB3cml0ZWAsIDptZXRoOmB3cml0ZWxpbmVzYCwgOm1ldGg6YGNhbl93cml0ZV9lb2YoKWAsCisgICA6bWV0aDpgd3JpdGVfZW9mYCwgOm1ldGg6YGdldF9leHRyYV9pbmZvYCBhbmQgOm1ldGg6YGNsb3NlYC4gIEl0IGFkZHMKKyAgIDptZXRoOmBkcmFpbmAgd2hpY2ggcmV0dXJucyBhbiBvcHRpb25hbCA6Y2xhc3M6YEZ1dHVyZWAgb24gd2hpY2ggeW91IGNhbgorICAgd2FpdCBmb3IgZmxvdyBjb250cm9sLiAgSXQgYWxzbyBhZGRzIGEgdHJhbnNwb3J0IGF0dHJpYnV0ZSB3aGljaCByZWZlcmVuY2VzCisgICB0aGUgOmNsYXNzOmBUcmFuc3BvcnRgIGRpcmVjdGx5LgorCisgICBUaGlzIGNsYXNzIGlzIDpyZWY6YG5vdCB0aHJlYWQgc2FmZSA8YXN5bmNpby1tdWx0aXRocmVhZGluZz5gLgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFuc3BvcnQKKworICAgICAgVHJhbnNwb3J0LgorCisgICAuLiBtZXRob2Q6OiBjYW5fd3JpdGVfZW9mKCkKKworICAgICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgdGhlIHRyYW5zcG9ydCBzdXBwb3J0cyA6bWV0aDpgd3JpdGVfZW9mYCwKKyAgICAgIDpjb25zdDpgRmFsc2VgIGlmIG5vdC4gU2VlIDptZXRoOmBXcml0ZVRyYW5zcG9ydC5jYW5fd3JpdGVfZW9mYC4KKworICAgLi4gbWV0aG9kOjogY2xvc2UoKQorCisgICAgICBDbG9zZSB0aGUgdHJhbnNwb3J0OiBzZWUgOm1ldGg6YEJhc2VUcmFuc3BvcnQuY2xvc2VgLgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiBkcmFpbigpCisKKyAgICAgIExldCB0aGUgd3JpdGUgYnVmZmVyIG9mIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBhIGNoYW5jZSB0byBiZSBmbHVzaGVkLgorCisgICAgICBUaGUgaW50ZW5kZWQgdXNlIGlzIHRvIHdyaXRlOjoKKworICAgICAgICAgIHcud3JpdGUoZGF0YSkKKyAgICAgICAgICB5aWVsZCBmcm9tIHcuZHJhaW4oKQorCisgICAgICBXaGVuIHRoZSBzaXplIG9mIHRoZSB0cmFuc3BvcnQgYnVmZmVyIHJlYWNoZXMgdGhlIGhpZ2gtd2F0ZXIgbGltaXQgKHRoZQorICAgICAgcHJvdG9jb2wgaXMgcGF1c2VkKSwgYmxvY2sgdW50aWwgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpcyBkcmFpbmVkIGRvd24KKyAgICAgIHRvIHRoZSBsb3ctd2F0ZXIgbGltaXQgYW5kIHRoZSBwcm90b2NvbCBpcyByZXN1bWVkLiBXaGVuIHRoZXJlIGlzIG5vdGhpbmcKKyAgICAgIHRvIHdhaXQgZm9yLCB0aGUgeWllbGQtZnJvbSBjb250aW51ZXMgaW1tZWRpYXRlbHkuCisKKyAgICAgIFlpZWxkaW5nIGZyb20gOm1ldGg6YGRyYWluYCBnaXZlcyB0aGUgb3Bwb3J0dW5pdHkgZm9yIHRoZSBsb29wIHRvCisgICAgICBzY2hlZHVsZSB0aGUgd3JpdGUgb3BlcmF0aW9uIGFuZCBmbHVzaCB0aGUgYnVmZmVyLiBJdCBzaG91bGQgZXNwZWNpYWxseQorICAgICAgYmUgdXNlZCB3aGVuIGEgcG9zc2libHkgbGFyZ2UgYW1vdW50IG9mIGRhdGEgaXMgd3JpdHRlbiB0byB0aGUgdHJhbnNwb3J0LAorICAgICAgYW5kIHRoZSBjb3JvdXRpbmUgZG9lcyBub3QgeWllbGQtZnJvbSBiZXR3ZWVuIGNhbGxzIHRvIDptZXRoOmB3cml0ZWAuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdD1Ob25lKQorCisgICAgICBSZXR1cm4gb3B0aW9uYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uOiBzZWUKKyAgICAgIDptZXRoOmBCYXNlVHJhbnNwb3J0LmdldF9leHRyYV9pbmZvYC4KKworICAgLi4gbWV0aG9kOjogd3JpdGUoZGF0YSkKKworICAgICAgV3JpdGUgc29tZSAqZGF0YSogYnl0ZXMgdG8gdGhlIHRyYW5zcG9ydDogc2VlCisgICAgICA6bWV0aDpgV3JpdGVUcmFuc3BvcnQud3JpdGVgLgorCisgICAuLiBtZXRob2Q6OiB3cml0ZWxpbmVzKGRhdGEpCisKKyAgICAgIFdyaXRlIGEgbGlzdCAob3IgYW55IGl0ZXJhYmxlKSBvZiBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQ6CisgICAgICBzZWUgOm1ldGg6YFdyaXRlVHJhbnNwb3J0LndyaXRlbGluZXNgLgorCisgICAuLiBtZXRob2Q6OiB3cml0ZV9lb2YoKQorCisgICAgICBDbG9zZSB0aGUgd3JpdGUgZW5kIG9mIHRoZSB0cmFuc3BvcnQgYWZ0ZXIgZmx1c2hpbmcgYnVmZmVyZWQgZGF0YToKKyAgICAgIHNlZSA6bWV0aDpgV3JpdGVUcmFuc3BvcnQud3JpdGVfZW9mYC4KKworCitTdHJlYW1SZWFkZXJQcm90b2NvbAorPT09PT09PT09PT09PT09PT09PT0KKworLi4gY2xhc3M6OiBTdHJlYW1SZWFkZXJQcm90b2NvbChzdHJlYW1fcmVhZGVyLCBjbGllbnRfY29ubmVjdGVkX2NiPU5vbmUsIGxvb3A9Tm9uZSkKKworICAgIFRyaXZpYWwgaGVscGVyIGNsYXNzIHRvIGFkYXB0IGJldHdlZW4gOmNsYXNzOmBQcm90b2NvbGAgYW5kCisgICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgLiBTdWJsY2xhc3Mgb2YgOmNsYXNzOmBQcm90b2NvbGAuCisKKyAgICAqc3RyZWFtX3JlYWRlciogaXMgYSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgaW5zdGFuY2UsICpjbGllbnRfY29ubmVjdGVkX2NiKgorICAgIGlzIGFuIG9wdGlvbmFsIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIChzdHJlYW1fcmVhZGVyLCBzdHJlYW1fd3JpdGVyKSB3aGVuIGEKKyAgICBjb25uZWN0aW9uIGlzIG1hZGUsICpsb29wKiBpcyB0aGUgZXZlbnQgbG9vcCBpbnN0YW5jZSB0byB1c2UuCisKKyAgICAoVGhpcyBpcyBhIGhlbHBlciBjbGFzcyBpbnN0ZWFkIG9mIG1ha2luZyA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgaXRzZWxmIGEKKyAgICA6Y2xhc3M6YFByb3RvY29sYCBzdWJjbGFzcywgYmVjYXVzZSB0aGUgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGhhcyBvdGhlcgorICAgIHBvdGVudGlhbCB1c2VzLCBhbmQgdG8gcHJldmVudCB0aGUgdXNlciBvZiB0aGUgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGZyb20KKyAgICBhY2NpZGVudGFsbHkgY2FsbGluZyBpbmFwcHJvcHJpYXRlIG1ldGhvZHMgb2YgdGhlIHByb3RvY29sLikKKworCitJbmNvbXBsZXRlUmVhZEVycm9yCis9PT09PT09PT09PT09PT09PT09CisKKy4uIGV4Y2VwdGlvbjo6IEluY29tcGxldGVSZWFkRXJyb3IKKworICAgIEluY29tcGxldGUgcmVhZCBlcnJvciwgc3ViY2xhc3Mgb2YgOmV4YzpgRU9GRXJyb3JgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBleHBlY3RlZAorCisgICAgICBUb3RhbCBudW1iZXIgb2YgZXhwZWN0ZWQgYnl0ZXMgKDpjbGFzczpgaW50YCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBhcnRpYWwKKworICAgICAgUmVhZCBieXRlcyBzdHJpbmcgYmVmb3JlIHRoZSBlbmQgb2Ygc3RyZWFtIHdhcyByZWFjaGVkICg6Y2xhc3M6YGJ5dGVzYCkuCisKKworU3RyZWFtIGV4YW1wbGVzCis9PT09PT09PT09PT09PT0KKworLi4gX2FzeW5jaW8tdGNwLWVjaG8tY2xpZW50LXN0cmVhbXM6CisKK1RDUCBlY2hvIGNsaWVudCB1c2luZyBzdHJlYW1zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUQ1AgZWNobyBjbGllbnQgdXNpbmcgdGhlIDpmdW5jOmBhc3luY2lvLm9wZW5fY29ubmVjdGlvbmAgZnVuY3Rpb246OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiB0Y3BfZWNob19jbGllbnQobWVzc2FnZSwgbG9vcCk6CisgICAgICAgIHJlYWRlciwgd3JpdGVyID0geWllbGQgZnJvbSBhc3luY2lvLm9wZW5fY29ubmVjdGlvbignMTI3LjAuMC4xJywgODg4OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkKKworICAgICAgICBwcmludCgnU2VuZDogJXInICUgbWVzc2FnZSkKKyAgICAgICAgd3JpdGVyLndyaXRlKG1lc3NhZ2UuZW5jb2RlKCkpCisKKyAgICAgICAgZGF0YSA9IHlpZWxkIGZyb20gcmVhZGVyLnJlYWQoMTAwKQorICAgICAgICBwcmludCgnUmVjZWl2ZWQ6ICVyJyAlIGRhdGEuZGVjb2RlKCkpCisKKyAgICAgICAgcHJpbnQoJ0Nsb3NlIHRoZSBzb2NrZXQnKQorICAgICAgICB3cml0ZXIuY2xvc2UoKQorCisgICAgbWVzc2FnZSA9ICdIZWxsbyBXb3JsZCEnCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRjcF9lY2hvX2NsaWVudChtZXNzYWdlLCBsb29wKSkKKyAgICBsb29wLmNsb3NlKCkKKworLi4gc2VlYWxzbzo6CisKKyAgIFRoZSA6cmVmOmBUQ1AgZWNobyBjbGllbnQgcHJvdG9jb2wgPGFzeW5jaW8tdGNwLWVjaG8tY2xpZW50LXByb3RvY29sPmAKKyAgIGV4YW1wbGUgdXNlcyB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX2Nvbm5lY3Rpb25gIG1ldGhvZC4KKworCisuLiBfYXN5bmNpby10Y3AtZWNoby1zZXJ2ZXItc3RyZWFtczoKKworVENQIGVjaG8gc2VydmVyIHVzaW5nIHN0cmVhbXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RDUCBlY2hvIHNlcnZlciB1c2luZyB0aGUgOmZ1bmM6YGFzeW5jaW8uc3RhcnRfc2VydmVyYCBmdW5jdGlvbjo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGhhbmRsZV9lY2hvKHJlYWRlciwgd3JpdGVyKToKKyAgICAgICAgZGF0YSA9IHlpZWxkIGZyb20gcmVhZGVyLnJlYWQoMTAwKQorICAgICAgICBtZXNzYWdlID0gZGF0YS5kZWNvZGUoKQorICAgICAgICBhZGRyID0gd3JpdGVyLmdldF9leHRyYV9pbmZvKCdwZWVybmFtZScpCisgICAgICAgIHByaW50KCJSZWNlaXZlZCAlciBmcm9tICVyIiAlIChtZXNzYWdlLCBhZGRyKSkKKworICAgICAgICBwcmludCgiU2VuZDogJXIiICUgbWVzc2FnZSkKKyAgICAgICAgd3JpdGVyLndyaXRlKGRhdGEpCisgICAgICAgIHlpZWxkIGZyb20gd3JpdGVyLmRyYWluKCkKKworICAgICAgICBwcmludCgiQ2xvc2UgdGhlIGNsaWVudCBzb2NrZXQiKQorICAgICAgICB3cml0ZXIuY2xvc2UoKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIGNvcm8gPSBhc3luY2lvLnN0YXJ0X3NlcnZlcihoYW5kbGVfZWNobywgJzEyNy4wLjAuMScsIDg4ODgsIGxvb3A9bG9vcCkKKyAgICBzZXJ2ZXIgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgIyBTZXJ2ZSByZXF1ZXN0cyB1bnRpbCBDdHJsK0MgaXMgcHJlc3NlZAorICAgIHByaW50KCdTZXJ2aW5nIG9uIHt9Jy5mb3JtYXQoc2VydmVyLnNvY2tldHNbMF0uZ2V0c29ja25hbWUoKSkpCisgICAgdHJ5OgorICAgICAgICBsb29wLnJ1bl9mb3JldmVyKCkKKyAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgIHBhc3MKKworICAgICMgQ2xvc2UgdGhlIHNlcnZlcgorICAgIHNlcnZlci5jbG9zZSgpCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VydmVyLndhaXRfY2xvc2VkKCkpCisgICAgbG9vcC5jbG9zZSgpCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgVENQIGVjaG8gc2VydmVyIHByb3RvY29sIDxhc3luY2lvLXRjcC1lY2hvLXNlcnZlci1wcm90b2NvbD5gCisgICBleGFtcGxlIHVzZXMgdGhlIDptZXRoOmBCYXNlRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXJgIG1ldGhvZC4KKworCitHZXQgSFRUUCBoZWFkZXJzCistLS0tLS0tLS0tLS0tLS0tCisKK1NpbXBsZSBleGFtcGxlIHF1ZXJ5aW5nIEhUVFAgaGVhZGVycyBvZiB0aGUgVVJMIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IHVybGxpYi5wYXJzZQorICAgIGltcG9ydCBzeXMKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBwcmludF9odHRwX2hlYWRlcnModXJsKToKKyAgICAgICAgdXJsID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHVybCkKKyAgICAgICAgaWYgdXJsLnNjaGVtZSA9PSAnaHR0cHMnOgorICAgICAgICAgICAgY29ubmVjdCA9IGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKHVybC5ob3N0bmFtZSwgNDQzLCBzc2w9VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbm5lY3QgPSBhc3luY2lvLm9wZW5fY29ubmVjdGlvbih1cmwuaG9zdG5hbWUsIDgwKQorICAgICAgICByZWFkZXIsIHdyaXRlciA9IHlpZWxkIGZyb20gY29ubmVjdAorICAgICAgICBxdWVyeSA9ICgnSEVBRCB7cGF0aH0gSFRUUC8xLjBcclxuJworICAgICAgICAgICAgICAgICAnSG9zdDoge2hvc3RuYW1lfVxyXG4nCisgICAgICAgICAgICAgICAgICdcclxuJykuZm9ybWF0KHBhdGg9dXJsLnBhdGggb3IgJy8nLCBob3N0bmFtZT11cmwuaG9zdG5hbWUpCisgICAgICAgIHdyaXRlci53cml0ZShxdWVyeS5lbmNvZGUoJ2xhdGluLTEnKSkKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGxpbmUgPSB5aWVsZCBmcm9tIHJlYWRlci5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbGluZSA9IGxpbmUuZGVjb2RlKCdsYXRpbjEnKS5yc3RyaXAoKQorICAgICAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICAgICBwcmludCgnSFRUUCBoZWFkZXI+ICVzJyAlIGxpbmUpCisKKyAgICAgICAgIyBJZ25vcmUgdGhlIGJvZHksIGNsb3NlIHRoZSBzb2NrZXQKKyAgICAgICAgd3JpdGVyLmNsb3NlKCkKKworICAgIHVybCA9IHN5cy5hcmd2WzFdCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgIHRhc2sgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUocHJpbnRfaHR0cF9oZWFkZXJzKHVybCkpCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICBsb29wLmNsb3NlKCkKKworVXNhZ2U6OgorCisgICAgcHl0aG9uIGV4YW1wbGUucHkgaHR0cDovL2V4YW1wbGUuY29tL3BhdGgvcGFnZS5odG1sCisKK29yIHdpdGggSFRUUFM6OgorCisgICAgcHl0aG9uIGV4YW1wbGUucHkgaHR0cHM6Ly9leGFtcGxlLmNvbS9wYXRoL3BhZ2UuaHRtbAorCisuLiBfYXN5bmNpby1yZWdpc3Rlci1zb2NrZXQtc3RyZWFtczoKKworUmVnaXN0ZXIgYW4gb3BlbiBzb2NrZXQgdG8gd2FpdCBmb3IgZGF0YSB1c2luZyBzdHJlYW1zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29yb3V0aW5lIHdhaXRpbmcgdW50aWwgYSBzb2NrZXQgcmVjZWl2ZXMgZGF0YSB1c2luZyB0aGUKKzpmdW5jOmBvcGVuX2Nvbm5lY3Rpb25gIGZ1bmN0aW9uOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgdHJ5OgorICAgICAgICBmcm9tIHNvY2tldCBpbXBvcnQgc29ja2V0cGFpcgorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgZnJvbSBhc3luY2lvLndpbmRvd3NfdXRpbHMgaW1wb3J0IHNvY2tldHBhaXIKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiB3YWl0X2Zvcl9kYXRhKGxvb3ApOgorICAgICAgICAjIENyZWF0ZSBhIHBhaXIgb2YgY29ubmVjdGVkIHNvY2tldHMKKyAgICAgICAgcnNvY2ssIHdzb2NrID0gc29ja2V0cGFpcigpCisKKyAgICAgICAgIyBSZWdpc3RlciB0aGUgb3BlbiBzb2NrZXQgdG8gd2FpdCBmb3IgZGF0YQorICAgICAgICByZWFkZXIsIHdyaXRlciA9IHlpZWxkIGZyb20gYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb24oc29jaz1yc29jaywgbG9vcD1sb29wKQorCisgICAgICAgICMgU2ltdWxhdGUgdGhlIHJlY2VwdGlvbiBvZiBkYXRhIGZyb20gdGhlIG5ldHdvcmsKKyAgICAgICAgbG9vcC5jYWxsX3Nvb24od3NvY2suc2VuZCwgJ2FiYycuZW5jb2RlKCkpCisKKyAgICAgICAgIyBXYWl0IGZvciBkYXRhCisgICAgICAgIGRhdGEgPSB5aWVsZCBmcm9tIHJlYWRlci5yZWFkKDEwMCkKKworICAgICAgICAjIEdvdCBkYXRhLCB3ZSBhcmUgZG9uZTogY2xvc2UgdGhlIHNvY2tldAorICAgICAgICBwcmludCgiUmVjZWl2ZWQ6IiwgZGF0YS5kZWNvZGUoKSkKKyAgICAgICAgd3JpdGVyLmNsb3NlKCkKKworICAgICAgICAjIENsb3NlIHRoZSBzZWNvbmQgc29ja2V0CisgICAgICAgIHdzb2NrLmNsb3NlKCkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh3YWl0X2Zvcl9kYXRhKGxvb3ApKQorICAgIGxvb3AuY2xvc2UoKQorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YHJlZ2lzdGVyIGFuIG9wZW4gc29ja2V0IHRvIHdhaXQgZm9yIGRhdGEgdXNpbmcgYSBwcm90b2NvbAorICAgPGFzeW5jaW8tcmVnaXN0ZXItc29ja2V0PmAgZXhhbXBsZSB1c2VzIGEgbG93LWxldmVsIHByb3RvY29sIGNyZWF0ZWQgYnkgdGhlCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfY29ubmVjdGlvbmAgbWV0aG9kLgorCisgICBUaGUgOnJlZjpgd2F0Y2ggYSBmaWxlIGRlc2NyaXB0b3IgZm9yIHJlYWQgZXZlbnRzCisgICA8YXN5bmNpby13YXRjaC1yZWFkLWV2ZW50PmAgZXhhbXBsZSB1c2VzIHRoZSBsb3ctbGV2ZWwKKyAgIDptZXRoOmBCYXNlRXZlbnRMb29wLmFkZF9yZWFkZXJgIG1ldGhvZCB0byByZWdpc3RlciB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEKKyAgIHNvY2tldC4KKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby1zdWJwcm9jZXNzLnJzdCBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkYWU1NAotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3VicHJvY2Vzcy5yc3QKQEAgLTAsMCArMSw0MTkgQEAKKy4uIGN1cnJlbnRtb2R1bGU6OiBhc3luY2lvCisKKy4uIF9hc3luY2lvLXN1YnByb2Nlc3M6CisKK1N1YnByb2Nlc3MKKz09PT09PT09PT0KKworV2luZG93cyBldmVudCBsb29wCistLS0tLS0tLS0tLS0tLS0tLS0KKworT24gV2luZG93cywgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcCBpcyA6Y2xhc3M6YFNlbGVjdG9yRXZlbnRMb29wYCB3aGljaCBkb2VzIG5vdAorc3VwcG9ydCBzdWJwcm9jZXNzZXMuIDpjbGFzczpgUHJvYWN0b3JFdmVudExvb3BgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCitFeGFtcGxlIHRvIHVzZSBpdCBvbiBXaW5kb3dzOjoKKworICAgIGltcG9ydCBhc3luY2lvLCBzeXMKKworICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICBsb29wID0gYXN5bmNpby5Qcm9hY3RvckV2ZW50TG9vcCgpCisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcCkKKworLi4gc2VlYWxzbzo6CisKKyAgIDpyZWY6YEF2YWlsYWJsZSBldmVudCBsb29wcyA8YXN5bmNpby1ldmVudC1sb29wcz5gIGFuZCA6cmVmOmBQbGF0Zm9ybQorICAgc3VwcG9ydCA8YXN5bmNpby1wbGF0Zm9ybS1zdXBwb3J0PmAuCisKKworQ3JlYXRlIGEgc3VicHJvY2VzczogaGlnaC1sZXZlbCBBUEkgdXNpbmcgUHJvY2VzcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisuLiBjb3JvdXRpbmVmdW5jdGlvbjo6IGNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoXCphcmdzLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIGxvb3A9Tm9uZSwgbGltaXQ9Tm9uZSwgXCpcKmt3ZHMpCisKKyAgIENyZWF0ZSBhIHN1YnByb2Nlc3MuCisKKyAgIFRoZSAqbGltaXQqIHBhcmFtZXRlciBzZXRzIHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgLiBTZWUgOm1ldGg6YEJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19leGVjYCBmb3Igb3RoZXIKKyAgIHBhcmFtZXRlcnMuCisKKyAgIFJldHVybiBhIDpjbGFzczpgfmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzYCBpbnN0YW5jZS4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKy4uIGNvcm91dGluZWZ1bmN0aW9uOjogY3JlYXRlX3N1YnByb2Nlc3Nfc2hlbGwoY21kLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsIGxvb3A9Tm9uZSwgbGltaXQ9Tm9uZSwgXCpcKmt3ZHMpCisKKyAgIFJ1biB0aGUgc2hlbGwgY29tbWFuZCAqY21kKi4KKworICAgVGhlICpsaW1pdCogcGFyYW1ldGVyIHNldHMgdGhlIGJ1ZmZlciBsaW1pdCBwYXNzZWQgdG8gdGhlCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAuIFNlZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX3NoZWxsYCBmb3Igb3RoZXIKKyAgIHBhcmFtZXRlcnMuCisKKyAgIFJldHVybiBhIDpjbGFzczpgfmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzYCBpbnN0YW5jZS4KKworICAgSXQgaXMgdGhlIGFwcGxpY2F0aW9uJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgYWxsIHdoaXRlc3BhY2UgYW5kCisgICBtZXRhY2hhcmFjdGVycyBhcmUgcXVvdGVkIGFwcHJvcHJpYXRlbHkgdG8gYXZvaWQgYHNoZWxsIGluamVjdGlvbgorICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hlbGxfaW5qZWN0aW9uI1NoZWxsX2luamVjdGlvbj5gXworICAgdnVsbmVyYWJpbGl0aWVzLiBUaGUgOmZ1bmM6YHNobGV4LnF1b3RlYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBwcm9wZXJseQorICAgZXNjYXBlIHdoaXRlc3BhY2UgYW5kIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIGluIHN0cmluZ3MgdGhhdCBhcmUgZ29pbmcgdG8gYmUKKyAgIHVzZWQgdG8gY29uc3RydWN0IHNoZWxsIGNvbW1hbmRzLgorCisgICBUaGlzIGZ1bmN0aW9uIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworVXNlIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jb25uZWN0X3JlYWRfcGlwZWAgYW5kCis6bWV0aDpgQmFzZUV2ZW50TG9vcC5jb25uZWN0X3dyaXRlX3BpcGVgIG1ldGhvZHMgdG8gY29ubmVjdCBwaXBlcy4KKworCitDcmVhdGUgYSBzdWJwcm9jZXNzOiBsb3ctbGV2ZWwgQVBJIHVzaW5nIHN1YnByb2Nlc3MuUG9wZW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitSdW4gc3VicHJvY2Vzc2VzIGFzeW5jaHJvbm91c2x5IHVzaW5nIHRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUuCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19leGVjKHByb3RvY29sX2ZhY3RvcnksIFwqYXJncywgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLCBcKlwqa3dhcmdzKQorCisgICBDcmVhdGUgYSBzdWJwcm9jZXNzIGZyb20gb25lIG9yIG1vcmUgc3RyaW5nIGFyZ3VtZW50cyAoY2hhcmFjdGVyIHN0cmluZ3Mgb3IKKyAgIGJ5dGVzIHN0cmluZ3MgZW5jb2RlZCB0byB0aGUgOnJlZjpgZmlsZXN5c3RlbSBlbmNvZGluZworICAgPGZpbGVzeXN0ZW0tZW5jb2Rpbmc+YCksIHdoZXJlIHRoZSBmaXJzdCBzdHJpbmcKKyAgIHNwZWNpZmllcyB0aGUgcHJvZ3JhbSB0byBleGVjdXRlLCBhbmQgdGhlIHJlbWFpbmluZyBzdHJpbmdzIHNwZWNpZnkgdGhlCisgICBwcm9ncmFtJ3MgYXJndW1lbnRzLiAoVGh1cywgdG9nZXRoZXIgdGhlIHN0cmluZyBhcmd1bWVudHMgZm9ybSB0aGUKKyAgIGBgc3lzLmFyZ3ZgYCB2YWx1ZSBvZiB0aGUgcHJvZ3JhbSwgYXNzdW1pbmcgaXQgaXMgYSBQeXRob24gc2NyaXB0LikgVGhpcyBpcworICAgc2ltaWxhciB0byB0aGUgc3RhbmRhcmQgbGlicmFyeSA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gIGNsYXNzIGNhbGxlZCB3aXRoCisgICBzaGVsbD1GYWxzZSBhbmQgdGhlIGxpc3Qgb2Ygc3RyaW5ncyBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50OworICAgaG93ZXZlciwgd2hlcmUgOmNsYXNzOmB+c3VicHJvY2Vzcy5Qb3BlbmAgdGFrZXMgYSBzaW5nbGUgYXJndW1lbnQgd2hpY2ggaXMKKyAgIGxpc3Qgb2Ygc3RyaW5ncywgOmZ1bmM6YHN1YnByb2Nlc3NfZXhlY2AgdGFrZXMgbXVsdGlwbGUgc3RyaW5nIGFyZ3VtZW50cy4KKworICAgVGhlICpwcm90b2NvbF9mYWN0b3J5KiBtdXN0IGluc3RhbmNpYXRlIGEgc3ViY2xhc3Mgb2YgdGhlCisgICA6Y2xhc3M6YGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sYCBjbGFzcy4KKworICAgT3RoZXIgcGFyYW1ldGVyczoKKworICAgKiAqc3RkaW4qOiBFaXRoZXIgYSBmaWxlLWxpa2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGlwZSB0byBiZSBjb25uZWN0ZWQKKyAgICAgdG8gdGhlIHN1YnByb2Nlc3MncyBzdGFuZGFyZCBpbnB1dCBzdHJlYW0gdXNpbmcKKyAgICAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNvbm5lY3Rfd3JpdGVfcGlwZWAsIG9yIHRoZSBjb25zdGFudAorICAgICA6Y29uc3Q6YHN1YnByb2Nlc3MuUElQRWAgKHRoZSBkZWZhdWx0KS4gQnkgZGVmYXVsdCBhIG5ldyBwaXBlIHdpbGwgYmUKKyAgICAgY3JlYXRlZCBhbmQgY29ubmVjdGVkLgorCisgICAqICpzdGRvdXQqOiBFaXRoZXIgYSBmaWxlLWxpa2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGlwZSB0byBiZSBjb25uZWN0ZWQKKyAgICAgdG8gdGhlIHN1YnByb2Nlc3MncyBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtIHVzaW5nCisgICAgIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5jb25uZWN0X3JlYWRfcGlwZWAsIG9yIHRoZSBjb25zdGFudAorICAgICA6Y29uc3Q6YHN1YnByb2Nlc3MuUElQRWAgKHRoZSBkZWZhdWx0KS4gQnkgZGVmYXVsdCBhIG5ldyBwaXBlIHdpbGwgYmUKKyAgICAgY3JlYXRlZCBhbmQgY29ubmVjdGVkLgorCisgICAqICpzdGRlcnIqOiBFaXRoZXIgYSBmaWxlLWxpa2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGlwZSB0byBiZSBjb25uZWN0ZWQKKyAgICAgdG8gdGhlIHN1YnByb2Nlc3MncyBzdGFuZGFyZCBlcnJvciBzdHJlYW0gdXNpbmcKKyAgICAgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNvbm5lY3RfcmVhZF9waXBlYCwgb3Igb25lIG9mIHRoZSBjb25zdGFudHMKKyAgICAgOmNvbnN0OmBzdWJwcm9jZXNzLlBJUEVgICh0aGUgZGVmYXVsdCkgb3IgOmNvbnN0OmBzdWJwcm9jZXNzLlNURE9VVGAuCisgICAgIEJ5IGRlZmF1bHQgYSBuZXcgcGlwZSB3aWxsIGJlIGNyZWF0ZWQgYW5kIGNvbm5lY3RlZC4gV2hlbgorICAgICA6Y29uc3Q6YHN1YnByb2Nlc3MuU1RET1VUYCBpcyBzcGVjaWZpZWQsIHRoZSBzdWJwcm9jZXNzJ3Mgc3RhbmRhcmQgZXJyb3IKKyAgICAgc3RyZWFtIHdpbGwgYmUgY29ubmVjdGVkIHRvIHRoZSBzYW1lIHBpcGUgYXMgdGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uCisKKyAgICogQWxsIG90aGVyIGtleXdvcmQgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gOmNsYXNzOmBzdWJwcm9jZXNzLlBvcGVuYAorICAgICB3aXRob3V0IGludGVycHJldGF0aW9uLCBleGNlcHQgZm9yICpidWZzaXplKiwgKnVuaXZlcnNhbF9uZXdsaW5lcyogYW5kCisgICAgICpzaGVsbCosIHdoaWNoIHNob3VsZCBub3QgYmUgc3BlY2lmaWVkIGF0IGFsbC4KKworICAgUmV0dXJucyBhIHBhaXIgb2YgYGAodHJhbnNwb3J0LCBwcm90b2NvbClgYCwgd2hlcmUgKnRyYW5zcG9ydCogaXMgYW4KKyAgIGluc3RhbmNlIG9mIDpjbGFzczpgQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnRgLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIFNlZSB0aGUgY29uc3RydWN0b3Igb2YgdGhlIDpjbGFzczpgc3VicHJvY2Vzcy5Qb3BlbmAgY2xhc3MgZm9yIHBhcmFtZXRlcnMuCisKKy4uIGNvcm91dGluZW1ldGhvZDo6IEJhc2VFdmVudExvb3Auc3VicHJvY2Vzc19zaGVsbChwcm90b2NvbF9mYWN0b3J5LCBjbWQsIFwqLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsIFwqXCprd2FyZ3MpCisKKyAgIENyZWF0ZSBhIHN1YnByb2Nlc3MgZnJvbSAqY21kKiwgd2hpY2ggaXMgYSBjaGFyYWN0ZXIgc3RyaW5nIG9yIGEgYnl0ZXMKKyAgIHN0cmluZyBlbmNvZGVkIHRvIHRoZSA6cmVmOmBmaWxlc3lzdGVtIGVuY29kaW5nIDxmaWxlc3lzdGVtLWVuY29kaW5nPmAsCisgICB1c2luZyB0aGUgcGxhdGZvcm0ncyAic2hlbGwiIHN5bnRheC4gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5CisgICA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gIGNsYXNzIGNhbGxlZCB3aXRoIGBgc2hlbGw9VHJ1ZWBgLgorCisgICBUaGUgKnByb3RvY29sX2ZhY3RvcnkqIG11c3QgaW5zdGFuY2lhdGUgYSBzdWJjbGFzcyBvZiB0aGUKKyAgIDpjbGFzczpgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2xgIGNsYXNzLgorCisgICBTZWUgOm1ldGg6YH5CYXNlRXZlbnRMb29wLnN1YnByb2Nlc3NfZXhlY2AgZm9yIG1vcmUgZGV0YWlscyBhYm91dAorICAgdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCisKKyAgIFJldHVybnMgYSBwYWlyIG9mIGBgKHRyYW5zcG9ydCwgcHJvdG9jb2wpYGAsIHdoZXJlICp0cmFuc3BvcnQqIGlzIGFuCisgICBpbnN0YW5jZSBvZiA6Y2xhc3M6YEJhc2VTdWJwcm9jZXNzVHJhbnNwb3J0YC4KKworICAgSXQgaXMgdGhlIGFwcGxpY2F0aW9uJ3MgcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgYWxsIHdoaXRlc3BhY2UgYW5kCisgICBtZXRhY2hhcmFjdGVycyBhcmUgcXVvdGVkIGFwcHJvcHJpYXRlbHkgdG8gYXZvaWQgYHNoZWxsIGluamVjdGlvbgorICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hlbGxfaW5qZWN0aW9uI1NoZWxsX2luamVjdGlvbj5gXworICAgdnVsbmVyYWJpbGl0aWVzLiBUaGUgOmZ1bmM6YHNobGV4LnF1b3RlYCBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byBwcm9wZXJseQorICAgZXNjYXBlIHdoaXRlc3BhY2UgYW5kIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIGluIHN0cmluZ3MgdGhhdCBhcmUgZ29pbmcgdG8gYmUKKyAgIHVzZWQgdG8gY29uc3RydWN0IHNoZWxsIGNvbW1hbmRzLgorCisgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY29ubmVjdF9yZWFkX3BpcGVgIGFuZAorICAgOm1ldGg6YEJhc2VFdmVudExvb3AuY29ubmVjdF93cml0ZV9waXBlYCBtZXRob2RzLgorCisKK0NvbnN0YW50cworLS0tLS0tLS0tCisKKy4uIGRhdGE6OiBhc3luY2lvLnN1YnByb2Nlc3MuUElQRQorCisgICBTcGVjaWFsIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlICpzdGRpbiosICpzdGRvdXQqIG9yICpzdGRlcnIqIGFyZ3VtZW50CisgICB0byA6ZnVuYzpgY3JlYXRlX3N1YnByb2Nlc3Nfc2hlbGxgIGFuZCA6ZnVuYzpgY3JlYXRlX3N1YnByb2Nlc3NfZXhlY2AgYW5kCisgICBpbmRpY2F0ZXMgdGhhdCBhIHBpcGUgdG8gdGhlIHN0YW5kYXJkIHN0cmVhbSBzaG91bGQgYmUgb3BlbmVkLgorCisuLiBkYXRhOjogYXN5bmNpby5zdWJwcm9jZXNzLlNURE9VVAorCisgICBTcGVjaWFsIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlICpzdGRlcnIqIGFyZ3VtZW50IHRvCisgICA6ZnVuYzpgY3JlYXRlX3N1YnByb2Nlc3Nfc2hlbGxgIGFuZCA6ZnVuYzpgY3JlYXRlX3N1YnByb2Nlc3NfZXhlY2AgYW5kCisgICBpbmRpY2F0ZXMgdGhhdCBzdGFuZGFyZCBlcnJvciBzaG91bGQgZ28gaW50byB0aGUgc2FtZSBoYW5kbGUgYXMgc3RhbmRhcmQKKyAgIG91dHB1dC4KKworLi4gZGF0YTo6IGFzeW5jaW8uc3VicHJvY2Vzcy5ERVZOVUxMCisKKyAgIFNwZWNpYWwgdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCBhcyB0aGUgKnN0ZGluKiwgKnN0ZG91dCogb3IgKnN0ZGVyciogYXJndW1lbnQKKyAgIHRvIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbGAgYW5kIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYCBhbmQKKyAgIGluZGljYXRlcyB0aGF0IHRoZSBzcGVjaWFsIGZpbGUgOmRhdGE6YG9zLmRldm51bGxgIHdpbGwgYmUgdXNlZC4KKworCitQcm9jZXNzCistLS0tLS0tCisKKy4uIGNsYXNzOjogYXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3MKKworICAgQSBzdWJwcm9jZXNzIGNyZWF0ZWQgYnkgdGhlIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYCBvciB0aGUKKyAgIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19zaGVsbGAgZnVuY3Rpb24uCisKKyAgIFRoZSBBUEkgb2YgdGhlIDpjbGFzczpgfmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzYCBjbGFzcyB3YXMgZGVzaWduZWQgdG8gYmUKKyAgIGNsb3NlIHRvIHRoZSBBUEkgb2YgdGhlIDpjbGFzczpgc3VicHJvY2Vzcy5Qb3BlbmAgY2xhc3MsIGJ1dCB0aGVyZSBhcmUgc29tZQorICAgZGlmZmVyZW5jZXM6CisKKyAgICogVGhlcmUgaXMgbm8gZXhwbGljaXQgOm1ldGg6YH5zdWJwcm9jZXNzLlBvcGVuLnBvbGxgIG1ldGhvZAorICAgKiBUaGUgOm1ldGg6YH5zdWJwcm9jZXNzLlBvcGVuLmNvbW11bmljYXRlYCBhbmQKKyAgICAgOm1ldGg6YH5zdWJwcm9jZXNzLlBvcGVuLndhaXRgIG1ldGhvZHMgZG9uJ3QgdGFrZSBhICp0aW1lb3V0KiBwYXJhbWV0ZXI6CisgICAgIHVzZSB0aGUgOmZ1bmM6YHdhaXRfZm9yYCBmdW5jdGlvbgorICAgKiBUaGUgKnVuaXZlcnNhbF9uZXdsaW5lcyogcGFyYW1ldGVyIGlzIG5vdCBzdXBwb3J0ZWQgKG9ubHkgYnl0ZXMgc3RyaW5ncworICAgICBhcmUgc3VwcG9ydGVkKQorICAgKiBUaGUgOm1ldGg6YH5hc3luY2lvLnN1YnByb2Nlc3MuUHJvY2Vzcy53YWl0YCBtZXRob2Qgb2YKKyAgICAgdGhlIDpjbGFzczpgfmFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzYCBjbGFzcyBpcyBhc3luY2hyb25vdXMgd2hlcmVhcyB0aGUKKyAgICAgOm1ldGg6YH5zdWJwcm9jZXNzLlBvcGVuLndhaXRgIG1ldGhvZCBvZiB0aGUgOmNsYXNzOmB+c3VicHJvY2Vzcy5Qb3BlbmAKKyAgICAgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYXMgYSBidXN5IGxvb3AuCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuIFNlZSBhbHNvIHRoZQorICAgOnJlZjpgU3VicHJvY2VzcyBhbmQgdGhyZWFkcyA8YXN5bmNpby1zdWJwcm9jZXNzLXRocmVhZHM+YCBzZWN0aW9uLgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiB3YWl0KCkKKworICAgICAgV2FpdCBmb3IgY2hpbGQgcHJvY2VzcyB0byB0ZXJtaW5hdGUuICBTZXQgYW5kIHJldHVybiA6YXR0cjpgcmV0dXJuY29kZWAKKyAgICAgIGF0dHJpYnV0ZS4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAgICAuLiBub3RlOjoKKworICAgICAgICAgVGhpcyB3aWxsIGRlYWRsb2NrIHdoZW4gdXNpbmcgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYCBhbmQKKyAgICAgICAgIHRoZSBjaGlsZCBwcm9jZXNzIGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvIGEgcGlwZSBzdWNoIHRoYXQgaXQKKyAgICAgICAgIGJsb2NrcyB3YWl0aW5nIGZvciB0aGUgT1MgcGlwZSBidWZmZXIgdG8gYWNjZXB0IG1vcmUgZGF0YS4gVXNlIHRoZQorICAgICAgICAgOm1ldGg6YGNvbW11bmljYXRlYCBtZXRob2Qgd2hlbiB1c2luZyBwaXBlcyB0byBhdm9pZCB0aGF0LgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiBjb21tdW5pY2F0ZShpbnB1dD1Ob25lKQorCisgICAgICBJbnRlcmFjdCB3aXRoIHByb2Nlc3M6IFNlbmQgZGF0YSB0byBzdGRpbi4gIFJlYWQgZGF0YSBmcm9tIHN0ZG91dCBhbmQKKyAgICAgIHN0ZGVyciwgdW50aWwgZW5kLW9mLWZpbGUgaXMgcmVhY2hlZC4gIFdhaXQgZm9yIHByb2Nlc3MgdG8gdGVybWluYXRlLgorICAgICAgVGhlIG9wdGlvbmFsICppbnB1dCogYXJndW1lbnQgc2hvdWxkIGJlIGRhdGEgdG8gYmUgc2VudCB0byB0aGUgY2hpbGQKKyAgICAgIHByb2Nlc3MsIG9yIGBgTm9uZWBgLCBpZiBubyBkYXRhIHNob3VsZCBiZSBzZW50IHRvIHRoZSBjaGlsZC4gIFRoZSB0eXBlCisgICAgICBvZiAqaW5wdXQqIG11c3QgYmUgYnl0ZXMuCisKKyAgICAgIDptZXRoOmBjb21tdW5pY2F0ZWAgcmV0dXJucyBhIHR1cGxlIGBgKHN0ZG91dF9kYXRhLCBzdGRlcnJfZGF0YSlgYC4KKworICAgICAgSWYgYSA6ZXhjOmBCcm9rZW5QaXBlRXJyb3JgIG9yIDpleGM6YENvbm5lY3Rpb25SZXNldEVycm9yYCBleGNlcHRpb24gaXMKKyAgICAgIHJhaXNlZCB3aGVuIHdyaXRpbmcgKmlucHV0KiBpbnRvIHN0ZGluLCB0aGUgZXhjZXB0aW9uIGlzIGlnbm9yZWQuIEl0CisgICAgICBvY2N1cnMgd2hlbiB0aGUgcHJvY2VzcyBleGl0cyBiZWZvcmUgYWxsIGRhdGEgYXJlIHdyaXR0ZW4gaW50byBzdGRpbi4KKworICAgICAgTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHNlbmQgZGF0YSB0byB0aGUgcHJvY2VzcydzIHN0ZGluLCB5b3UgbmVlZCB0bworICAgICAgY3JlYXRlIHRoZSBQcm9jZXNzIG9iamVjdCB3aXRoIGBgc3RkaW49UElQRWBgLiAgU2ltaWxhcmx5LCB0byBnZXQgYW55dGhpbmcKKyAgICAgIG90aGVyIHRoYW4gYGBOb25lYGAgaW4gdGhlIHJlc3VsdCB0dXBsZSwgeW91IG5lZWQgdG8gZ2l2ZSBgYHN0ZG91dD1QSVBFYGAKKyAgICAgIGFuZC9vciBgYHN0ZGVycj1QSVBFYGAgdG9vLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgICAgIC4uIG5vdGU6OgorCisgICAgICAgICBUaGUgZGF0YSByZWFkIGlzIGJ1ZmZlcmVkIGluIG1lbW9yeSwgc28gZG8gbm90IHVzZSB0aGlzIG1ldGhvZCBpZiB0aGUKKyAgICAgICAgIGRhdGEgc2l6ZSBpcyBsYXJnZSBvciB1bmxpbWl0ZWQuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjIKKyAgICAgICAgIFRoZSBtZXRob2Qgbm93IGlnbm9yZXMgOmV4YzpgQnJva2VuUGlwZUVycm9yYCBhbmQKKyAgICAgICAgIDpleGM6YENvbm5lY3Rpb25SZXNldEVycm9yYC4KKworICAgLi4gbWV0aG9kOjogc2VuZF9zaWduYWwoc2lnbmFsKQorCisgICAgICBTZW5kcyB0aGUgc2lnbmFsICpzaWduYWwqIHRvIHRoZSBjaGlsZCBwcm9jZXNzLgorCisgICAgICAuLiBub3RlOjoKKworICAgICAgICAgT24gV2luZG93cywgOnB5OmRhdGE6YFNJR1RFUk1gIGlzIGFuIGFsaWFzIGZvciA6bWV0aDpgdGVybWluYXRlYC4KKyAgICAgICAgIGBgQ1RSTF9DX0VWRU5UYGAgYW5kIGBgQ1RSTF9CUkVBS19FVkVOVGBgIGNhbiBiZSBzZW50IHRvIHByb2Nlc3NlcworICAgICAgICAgc3RhcnRlZCB3aXRoIGEgKmNyZWF0aW9uZmxhZ3MqIHBhcmFtZXRlciB3aGljaCBpbmNsdWRlcworICAgICAgICAgYGBDUkVBVEVfTkVXX1BST0NFU1NfR1JPVVBgYC4KKworICAgLi4gbWV0aG9kOjogdGVybWluYXRlKCkKKworICAgICAgU3RvcCB0aGUgY2hpbGQuIE9uIFBvc2l4IE9TcyB0aGUgbWV0aG9kIHNlbmRzIDpweTpkYXRhOmBzaWduYWwuU0lHVEVSTWAKKyAgICAgIHRvIHRoZSBjaGlsZC4gT24gV2luZG93cyB0aGUgV2luMzIgQVBJIGZ1bmN0aW9uCisgICAgICA6YzpmdW5jOmBUZXJtaW5hdGVQcm9jZXNzYCBpcyBjYWxsZWQgdG8gc3RvcCB0aGUgY2hpbGQuCisKKyAgIC4uIG1ldGhvZDo6IGtpbGwoKQorCisgICAgICBLaWxscyB0aGUgY2hpbGQuIE9uIFBvc2l4IE9TcyB0aGUgZnVuY3Rpb24gc2VuZHMgOnB5OmRhdGE6YFNJR0tJTExgIHRvCisgICAgICB0aGUgY2hpbGQuICBPbiBXaW5kb3dzIDptZXRoOmBraWxsYCBpcyBhbiBhbGlhcyBmb3IgOm1ldGg6YHRlcm1pbmF0ZWAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0ZGluCisKKyAgICAgIFN0YW5kYXJkIGlucHV0IHN0cmVhbSAoOmNsYXNzOmBTdHJlYW1Xcml0ZXJgKSwgYGBOb25lYGAgaWYgdGhlIHByb2Nlc3MKKyAgICAgIHdhcyBjcmVhdGVkIHdpdGggYGBzdGRpbj1Ob25lYGAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0ZG91dAorCisgICAgICBTdGFuZGFyZCBvdXRwdXQgc3RyZWFtICg6Y2xhc3M6YFN0cmVhbVJlYWRlcmApLCBgYE5vbmVgYCBpZiB0aGUgcHJvY2VzcworICAgICAgd2FzIGNyZWF0ZWQgd2l0aCBgYHN0ZG91dD1Ob25lYGAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0ZGVycgorCisgICAgICBTdGFuZGFyZCBlcnJvciBzdHJlYW0gKDpjbGFzczpgU3RyZWFtUmVhZGVyYCksIGBgTm9uZWBgIGlmIHRoZSBwcm9jZXNzCisgICAgICB3YXMgY3JlYXRlZCB3aXRoIGBgc3RkZXJyPU5vbmVgYC4KKworICAgLi4gd2FybmluZzo6CisKKyAgICAgIFVzZSB0aGUgOm1ldGg6YGNvbW11bmljYXRlYCBtZXRob2QgcmF0aGVyIHRoYW4gOmF0dHI6YC5zdGRpbi53cml0ZQorICAgICAgPHN0ZGluPmAsIDphdHRyOmAuc3Rkb3V0LnJlYWQgPHN0ZG91dD5gIG9yIDphdHRyOmAuc3RkZXJyLnJlYWQgPHN0ZGVycj5gCisgICAgICB0byBhdm9pZCBkZWFkbG9ja3MgZHVlIHRvIHN0cmVhbXMgcGF1c2luZyByZWFkaW5nIG9yIHdyaXRpbmcgYW5kIGJsb2NraW5nCisgICAgICB0aGUgY2hpbGQgcHJvY2Vzcy4KKworICAgLi4gYXR0cmlidXRlOjogcGlkCisKKyAgICAgIFRoZSBpZGVudGlmaWVyIG9mIHRoZSBwcm9jZXNzLgorCisgICAgICBOb3RlIHRoYXQgZm9yIHByb2Nlc3NlcyBjcmVhdGVkIGJ5IHRoZSA6ZnVuYzpgY3JlYXRlX3N1YnByb2Nlc3Nfc2hlbGxgCisgICAgICBmdW5jdGlvbiwgdGhpcyBhdHRyaWJ1dGUgaXMgdGhlIHByb2Nlc3MgaWRlbnRpZmllciBvZiB0aGUgc3Bhd25lZCBzaGVsbC4KKworICAgLi4gYXR0cmlidXRlOjogcmV0dXJuY29kZQorCisgICAgICBSZXR1cm4gY29kZSBvZiB0aGUgcHJvY2VzcyB3aGVuIGl0IGV4aXRlZC4gIEEgYGBOb25lYGAgdmFsdWUgaW5kaWNhdGVzCisgICAgICB0aGF0IHRoZSBwcm9jZXNzIGhhcyBub3QgdGVybWluYXRlZCB5ZXQuCisKKyAgICAgIEEgbmVnYXRpdmUgdmFsdWUgYGAtTmBgIGluZGljYXRlcyB0aGF0IHRoZSBjaGlsZCB3YXMgdGVybWluYXRlZCBieSBzaWduYWwKKyAgICAgIGBgTmBgIChVbml4IG9ubHkpLgorCisKKy4uIF9hc3luY2lvLXN1YnByb2Nlc3MtdGhyZWFkczoKKworU3VicHJvY2VzcyBhbmQgdGhyZWFkcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCithc3luY2lvIHN1cHBvcnRzIHJ1bm5pbmcgc3VicHJvY2Vzc2VzIGZyb20gZGlmZmVyZW50IHRocmVhZHMsIGJ1dCB0aGVyZQorYXJlIGxpbWl0czoKKworKiBBbiBldmVudCBsb29wIG11c3QgcnVuIGluIHRoZSBtYWluIHRocmVhZAorKiBUaGUgY2hpbGQgd2F0Y2hlciBtdXN0IGJlIGluc3RhbnRpYXRlZCBpbiB0aGUgbWFpbiB0aHJlYWQsIGJlZm9yZSBleGVjdXRpbmcKKyAgc3VicHJvY2Vzc2VzIGZyb20gb3RoZXIgdGhyZWFkcy4gQ2FsbCB0aGUgOmZ1bmM6YGdldF9jaGlsZF93YXRjaGVyYAorICBmdW5jdGlvbiBpbiB0aGUgbWFpbiB0aHJlYWQgdG8gaW5zdGFudGlhdGUgdGhlIGNoaWxkIHdhdGNoZXIuCisKK1RoZSA6Y2xhc3M6YGFzeW5jaW8uc3VicHJvY2Vzcy5Qcm9jZXNzYCBjbGFzcyBpcyBub3QgdGhyZWFkIHNhZmUuCisKKy4uIHNlZWFsc286OgorCisgICBUaGUgOnJlZjpgQ29uY3VycmVuY3kgYW5kIG11bHRpdGhyZWFkaW5nIGluIGFzeW5jaW8KKyAgIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAgc2VjdGlvbi4KKworCitTdWJwcm9jZXNzIGV4YW1wbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1YnByb2Nlc3MgdXNpbmcgdHJhbnNwb3J0IGFuZCBwcm90b2NvbAorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V4YW1wbGUgb2YgYSBzdWJwcm9jZXNzIHByb3RvY29sIHVzaW5nIHRvIGdldCB0aGUgb3V0cHV0IG9mIGEgc3VicHJvY2VzcyBhbmQgdG8KK3dhaXQgZm9yIHRoZSBzdWJwcm9jZXNzIGV4aXQuIFRoZSBzdWJwcm9jZXNzIGlzIGNyZWF0ZWQgYnkgdGhlCis6bWV0aDpgQmFzZUV2ZW50TG9vcC5zdWJwcm9jZXNzX2V4ZWNgIG1ldGhvZDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworICAgIGltcG9ydCBzeXMKKworICAgIGNsYXNzIERhdGVQcm90b2NvbChhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGl0X2Z1dHVyZSk6CisgICAgICAgICAgICBzZWxmLmV4aXRfZnV0dXJlID0gZXhpdF9mdXR1cmUKKyAgICAgICAgICAgIHNlbGYub3V0cHV0ID0gYnl0ZWFycmF5KCkKKworICAgICAgICBkZWYgcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgICAgIHNlbGYub3V0cHV0LmV4dGVuZChkYXRhKQorCisgICAgICAgIGRlZiBwcm9jZXNzX2V4aXRlZChzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZXhpdF9mdXR1cmUuc2V0X3Jlc3VsdChUcnVlKQorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGdldF9kYXRlKGxvb3ApOgorICAgICAgICBjb2RlID0gJ2ltcG9ydCBkYXRldGltZTsgcHJpbnQoZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkpJworICAgICAgICBleGl0X2Z1dHVyZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKworICAgICAgICAjIENyZWF0ZSB0aGUgc3VicHJvY2VzcyBjb250cm9sbGVkIGJ5IHRoZSBwcm90b2NvbCBEYXRlUHJvdG9jb2wsCisgICAgICAgICMgcmVkaXJlY3QgdGhlIHN0YW5kYXJkIG91dHB1dCBpbnRvIGEgcGlwZQorICAgICAgICBjcmVhdGUgPSBsb29wLnN1YnByb2Nlc3NfZXhlYyhsYW1iZGE6IERhdGVQcm90b2NvbChleGl0X2Z1dHVyZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1Ob25lLCBzdGRlcnI9Tm9uZSkKKyAgICAgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHlpZWxkIGZyb20gY3JlYXRlCisKKyAgICAgICAgIyBXYWl0IGZvciB0aGUgc3VicHJvY2VzcyBleGl0IHVzaW5nIHRoZSBwcm9jZXNzX2V4aXRlZCgpIG1ldGhvZAorICAgICAgICAjIG9mIHRoZSBwcm90b2NvbAorICAgICAgICB5aWVsZCBmcm9tIGV4aXRfZnV0dXJlCisKKyAgICAgICAgIyBDbG9zZSB0aGUgc3Rkb3V0IHBpcGUKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKworICAgICAgICAjIFJlYWQgdGhlIG91dHB1dCB3aGljaCB3YXMgY29sbGVjdGVkIGJ5IHRoZSBwaXBlX2RhdGFfcmVjZWl2ZWQoKQorICAgICAgICAjIG1ldGhvZCBvZiB0aGUgcHJvdG9jb2wKKyAgICAgICAgZGF0YSA9IGJ5dGVzKHByb3RvY29sLm91dHB1dCkKKyAgICAgICAgcmV0dXJuIGRhdGEuZGVjb2RlKCdhc2NpaScpLnJzdHJpcCgpCisKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uUHJvYWN0b3JFdmVudExvb3AoKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgZWxzZToKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGF0ZSA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGdldF9kYXRlKGxvb3ApKQorICAgIHByaW50KCJDdXJyZW50IGRhdGU6ICVzIiAlIGRhdGUpCisgICAgbG9vcC5jbG9zZSgpCisKKworU3VicHJvY2VzcyB1c2luZyBzdHJlYW1zCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRXhhbXBsZSB1c2luZyB0aGUgOmNsYXNzOmB+YXN5bmNpby5zdWJwcm9jZXNzLlByb2Nlc3NgIGNsYXNzIHRvIGNvbnRyb2wgdGhlCitzdWJwcm9jZXNzIGFuZCB0aGUgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGNsYXNzIHRvIHJlYWQgZnJvbSB0aGUgc3RhbmRhcmQKK291dHB1dC4gIFRoZSBzdWJwcm9jZXNzIGlzIGNyZWF0ZWQgYnkgdGhlIDpmdW5jOmBjcmVhdGVfc3VicHJvY2Vzc19leGVjYAorZnVuY3Rpb246OgorCisgICAgaW1wb3J0IGFzeW5jaW8uc3VicHJvY2VzcworICAgIGltcG9ydCBzeXMKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBnZXRfZGF0ZSgpOgorICAgICAgICBjb2RlID0gJ2ltcG9ydCBkYXRldGltZTsgcHJpbnQoZGF0ZXRpbWUuZGF0ZXRpbWUubm93KCkpJworCisgICAgICAgICMgQ3JlYXRlIHRoZSBzdWJwcm9jZXNzLCByZWRpcmVjdCB0aGUgc3RhbmRhcmQgb3V0cHV0IGludG8gYSBwaXBlCisgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYyhzeXMuZXhlY3V0YWJsZSwgJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1hc3luY2lvLnN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgcHJvYyA9IHlpZWxkIGZyb20gY3JlYXRlCisKKyAgICAgICAgIyBSZWFkIG9uZSBsaW5lIG9mIG91dHB1dAorICAgICAgICBkYXRhID0geWllbGQgZnJvbSBwcm9jLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgIGxpbmUgPSBkYXRhLmRlY29kZSgnYXNjaWknKS5yc3RyaXAoKQorCisgICAgICAgICMgV2FpdCBmb3IgdGhlIHN1YnByb2Nlc3MgZXhpdAorICAgICAgICB5aWVsZCBmcm9tIHByb2Mud2FpdCgpCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uUHJvYWN0b3JFdmVudExvb3AoKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgZWxzZToKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGF0ZSA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGdldF9kYXRlKCkpCisgICAgcHJpbnQoIkN1cnJlbnQgZGF0ZTogJXMiICUgZGF0ZSkKKyAgICBsb29wLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tc3luYy5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN5bmMucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkM2I1MjMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXN5bmMucnN0CkBAIC0wLDAgKzEsMjkzIEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworLi4gX2FzeW5jaW8tc3luYzoKKworU3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0xvY2tzOgorCisqIDpjbGFzczpgTG9ja2AKKyogOmNsYXNzOmBFdmVudGAKKyogOmNsYXNzOmBDb25kaXRpb25gCisKK1NlbWFwaG9yZXM6CisKKyogOmNsYXNzOmBTZW1hcGhvcmVgCisqIDpjbGFzczpgQm91bmRlZFNlbWFwaG9yZWAKKworYXN5bmNpbyBsb2NrIEFQSSB3YXMgZGVzaWduZWQgdG8gYmUgY2xvc2UgdG8gY2xhc3NlcyBvZiB0aGUgOm1vZDpgdGhyZWFkaW5nYAorbW9kdWxlICg6Y2xhc3M6YH50aHJlYWRpbmcuTG9ja2AsIDpjbGFzczpgfnRocmVhZGluZy5FdmVudGAsCis6Y2xhc3M6YH50aHJlYWRpbmcuQ29uZGl0aW9uYCwgOmNsYXNzOmB+dGhyZWFkaW5nLlNlbWFwaG9yZWAsCis6Y2xhc3M6YH50aHJlYWRpbmcuQm91bmRlZFNlbWFwaG9yZWApLCBidXQgaXQgaGFzIG5vICp0aW1lb3V0KiBwYXJhbWV0ZXIuIFRoZQorOmZ1bmM6YGFzeW5jaW8ud2FpdF9mb3JgIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGNhbmNlbCBhIHRhc2sgYWZ0ZXIgYSB0aW1lb3V0LgorCitMb2NrcworLS0tLS0KKworTG9jaworXl5eXgorCisuLiBjbGFzczo6IExvY2soXCosIGxvb3A9Tm9uZSkKKworICAgUHJpbWl0aXZlIGxvY2sgb2JqZWN0cy4KKworICAgQSBwcmltaXRpdmUgbG9jayBpcyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgdGhhdCBpcyBub3Qgb3duZWQgYnkgYQorICAgcGFydGljdWxhciBjb3JvdXRpbmUgd2hlbiBsb2NrZWQuICBBIHByaW1pdGl2ZSBsb2NrIGlzIGluIG9uZSBvZiB0d28gc3RhdGVzLAorICAgJ2xvY2tlZCcgb3IgJ3VubG9ja2VkJy4KKworICAgSXQgaXMgY3JlYXRlZCBpbiB0aGUgdW5sb2NrZWQgc3RhdGUuICBJdCBoYXMgdHdvIGJhc2ljIG1ldGhvZHMsIDptZXRoOmBhY3F1aXJlYAorICAgYW5kIDptZXRoOmByZWxlYXNlYC4gIFdoZW4gdGhlIHN0YXRlIGlzIHVubG9ja2VkLCBhY3F1aXJlKCkgY2hhbmdlcyB0aGUgc3RhdGUgdG8KKyAgIGxvY2tlZCBhbmQgcmV0dXJucyBpbW1lZGlhdGVseS4gIFdoZW4gdGhlIHN0YXRlIGlzIGxvY2tlZCwgYWNxdWlyZSgpIGJsb2NrcworICAgdW50aWwgYSBjYWxsIHRvIHJlbGVhc2UoKSBpbiBhbm90aGVyIGNvcm91dGluZSBjaGFuZ2VzIGl0IHRvIHVubG9ja2VkLCB0aGVuCisgICB0aGUgYWNxdWlyZSgpIGNhbGwgcmVzZXRzIGl0IHRvIGxvY2tlZCBhbmQgcmV0dXJucy4gIFRoZSByZWxlYXNlKCkgbWV0aG9kCisgICBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gdGhlIGxvY2tlZCBzdGF0ZTsgaXQgY2hhbmdlcyB0aGUgc3RhdGUgdG8gdW5sb2NrZWQKKyAgIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgSWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHJlbGVhc2UgYW4gdW5sb2NrZWQgbG9jaywKKyAgIGEgOmV4YzpgUnVudGltZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KKworICAgV2hlbiBtb3JlIHRoYW4gb25lIGNvcm91dGluZSBpcyBibG9ja2VkIGluIGFjcXVpcmUoKSB3YWl0aW5nIGZvciB0aGUgc3RhdGUKKyAgIHRvIHR1cm4gdG8gdW5sb2NrZWQsIG9ubHkgb25lIGNvcm91dGluZSBwcm9jZWVkcyB3aGVuIGEgcmVsZWFzZSgpIGNhbGwKKyAgIHJlc2V0cyB0aGUgc3RhdGUgdG8gdW5sb2NrZWQ7IGZpcnN0IGNvcm91dGluZSB3aGljaCBpcyBibG9ja2VkIGluIGFjcXVpcmUoKQorICAgaXMgYmVpbmcgcHJvY2Vzc2VkLgorCisgICA6bWV0aDpgYWNxdWlyZWAgaXMgYSBjb3JvdXRpbmUgYW5kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBgYHlpZWxkIGZyb21gYC4KKworICAgTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICBgYCh5aWVsZCBmcm9tIGxvY2spYGAKKyAgIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uLgorCisgICBUaGlzIGNsYXNzIGlzIDpyZWY6YG5vdCB0aHJlYWQgc2FmZSA8YXN5bmNpby1tdWx0aXRocmVhZGluZz5gLgorCisgICBVc2FnZTo6CisKKyAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgLi4uCisgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgdHJ5OgorICAgICAgICAgICAuLi4KKyAgICAgICBmaW5hbGx5OgorICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICBDb250ZXh0IG1hbmFnZXIgdXNhZ2U6OgorCisgICAgICAgbG9jayA9IExvY2soKQorICAgICAgIC4uLgorICAgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICAgICAuLi4KKworICAgTG9jayBvYmplY3RzIGNhbiBiZSB0ZXN0ZWQgZm9yIGxvY2tpbmcgc3RhdGU6OgorCisgICAgICAgaWYgbm90IGxvY2subG9ja2VkKCk6CisgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgZWxzZToKKyAgICAgICAgICAjIGxvY2sgaXMgYWNxdWlyZWQKKyAgICAgICAgICAgLi4uCisKKyAgIC4uIG1ldGhvZDo6IGxvY2tlZCgpCisKKyAgICAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgbG9jayBpcyBhY3F1aXJlZC4KKworICAgLi4gY29yb3V0aW5lbWV0aG9kOjogYWNxdWlyZSgpCisKKyAgICAgIEFjcXVpcmUgYSBsb2NrLgorCisgICAgICBUaGlzIG1ldGhvZCBibG9ja3MgdW50aWwgdGhlIGxvY2sgaXMgdW5sb2NrZWQsIHRoZW4gc2V0cyBpdCB0byBsb2NrZWQgYW5kCisgICAgICByZXR1cm5zIGBgVHJ1ZWBgLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKyAgIC4uIG1ldGhvZDo6IHJlbGVhc2UoKQorCisgICAgICBSZWxlYXNlIGEgbG9jay4KKworICAgICAgV2hlbiB0aGUgbG9jayBpcyBsb2NrZWQsIHJlc2V0IGl0IHRvIHVubG9ja2VkLCBhbmQgcmV0dXJuLiAgSWYgYW55IG90aGVyCisgICAgICBjb3JvdXRpbmVzIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZSB1bmxvY2tlZCwgYWxsb3cKKyAgICAgIGV4YWN0bHkgb25lIG9mIHRoZW0gdG8gcHJvY2VlZC4KKworICAgICAgV2hlbiBpbnZva2VkIG9uIGFuIHVubG9ja2VkIGxvY2ssIGEgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKKyAgICAgIFRoZXJlIGlzIG5vIHJldHVybiB2YWx1ZS4KKworCitFdmVudAorXl5eXl4KKworLi4gY2xhc3M6OiBFdmVudChcKiwgbG9vcD1Ob25lKQorCisgICBBbiBFdmVudCBpbXBsZW1lbnRhdGlvbiwgYXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgdG8gOmNsYXNzOmB0aHJlYWRpbmcuRXZlbnRgLgorCisgICBDbGFzcyBpbXBsZW1lbnRpbmcgZXZlbnQgb2JqZWN0cy4gQW4gZXZlbnQgbWFuYWdlcyBhIGZsYWcgdGhhdCBjYW4gYmUgc2V0IHRvCisgICB0cnVlIHdpdGggdGhlIDptZXRoOmBzZXRgIG1ldGhvZCBhbmQgcmVzZXQgdG8gZmFsc2Ugd2l0aCB0aGUgOm1ldGg6YGNsZWFyYAorICAgbWV0aG9kLiAgVGhlIDptZXRoOmB3YWl0YCBtZXRob2QgYmxvY2tzIHVudGlsIHRoZSBmbGFnIGlzIHRydWUuIFRoZSBmbGFnIGlzCisgICBpbml0aWFsbHkgZmFsc2UuCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKKyAgIC4uIG1ldGhvZDo6IGNsZWFyKCkKKworICAgICAgUmVzZXQgdGhlIGludGVybmFsIGZsYWcgdG8gZmFsc2UuIFN1YnNlcXVlbnRseSwgY29yb3V0aW5lcyBjYWxsaW5nCisgICAgICA6bWV0aDpgd2FpdGAgd2lsbCBibG9jayB1bnRpbCA6bWV0aDpgc2V0YCBpcyBjYWxsZWQgdG8gc2V0IHRoZSBpbnRlcm5hbAorICAgICAgZmxhZyB0byB0cnVlIGFnYWluLgorCisgICAuLiBtZXRob2Q6OiBpc19zZXQoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgYW5kIG9ubHkgaWYgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4KKworICAgLi4gbWV0aG9kOjogc2V0KCkKKworICAgICAgU2V0IHRoZSBpbnRlcm5hbCBmbGFnIHRvIHRydWUuIEFsbCBjb3JvdXRpbmVzIHdhaXRpbmcgZm9yIGl0IHRvIGJlY29tZQorICAgICAgdHJ1ZSBhcmUgYXdha2VuZWQuIENvcm91dGluZSB0aGF0IGNhbGwgOm1ldGg6YHdhaXRgIG9uY2UgdGhlIGZsYWcgaXMgdHJ1ZQorICAgICAgd2lsbCBub3QgYmxvY2sgYXQgYWxsLgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiB3YWl0KCkKKworICAgICAgQmxvY2sgdW50aWwgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4KKworICAgICAgSWYgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZSBvbiBlbnRyeSwgcmV0dXJuIGBgVHJ1ZWBgIGltbWVkaWF0ZWx5LgorICAgICAgT3RoZXJ3aXNlLCBibG9jayB1bnRpbCBhbm90aGVyIGNvcm91dGluZSBjYWxscyA6bWV0aDpgc2V0YCB0byBzZXQgdGhlCisgICAgICBmbGFnIHRvIHRydWUsIHRoZW4gcmV0dXJuIGBgVHJ1ZWBgLgorCisgICAgICBUaGlzIG1ldGhvZCBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAuCisKKworQ29uZGl0aW9uCiteXl5eXl5eXl4KKworLi4gY2xhc3M6OiBDb25kaXRpb24obG9jaz1Ob25lLCBcKiwgbG9vcD1Ob25lKQorCisgICBBIENvbmRpdGlvbiBpbXBsZW1lbnRhdGlvbiwgYXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgdG8KKyAgIDpjbGFzczpgdGhyZWFkaW5nLkNvbmRpdGlvbmAuCisKKyAgIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBjb25kaXRpb24gdmFyaWFibGUgb2JqZWN0cy4gQSBjb25kaXRpb24gdmFyaWFibGUKKyAgIGFsbG93cyBvbmUgb3IgbW9yZSBjb3JvdXRpbmVzIHRvIHdhaXQgdW50aWwgdGhleSBhcmUgbm90aWZpZWQgYnkgYW5vdGhlcgorICAgY29yb3V0aW5lLgorCisgICBJZiB0aGUgKmxvY2sqIGFyZ3VtZW50IGlzIGdpdmVuIGFuZCBub3QgYGBOb25lYGAsIGl0IG11c3QgYmUgYSA6Y2xhc3M6YExvY2tgCisgICBvYmplY3QsIGFuZCBpdCBpcyB1c2VkIGFzIHRoZSB1bmRlcmx5aW5nIGxvY2suICBPdGhlcndpc2UsCisgICBhIG5ldyA6Y2xhc3M6YExvY2tgIG9iamVjdCBpcyBjcmVhdGVkIGFuZCB1c2VkIGFzIHRoZSB1bmRlcmx5aW5nIGxvY2suCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IGFjcXVpcmUoKQorCisgICAgICBBY3F1aXJlIHRoZSB1bmRlcmx5aW5nIGxvY2suCisKKyAgICAgIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgbG9jayBpcyB1bmxvY2tlZCwgdGhlbiBzZXRzIGl0IHRvIGxvY2tlZCBhbmQKKyAgICAgIHJldHVybnMgYGBUcnVlYGAuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogbm90aWZ5KG49MSkKKworICAgICAgQnkgZGVmYXVsdCwgd2FrZSB1cCBvbmUgY29yb3V0aW5lIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24sIGlmIGFueS4KKyAgICAgIElmIHRoZSBjYWxsaW5nIGNvcm91dGluZSBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcyBtZXRob2QgaXMKKyAgICAgIGNhbGxlZCwgYSA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZC4KKworICAgICAgVGhpcyBtZXRob2Qgd2FrZXMgdXAgYXQgbW9zdCAqbiogb2YgdGhlIGNvcm91dGluZXMgd2FpdGluZyBmb3IgdGhlCisgICAgICBjb25kaXRpb24gdmFyaWFibGU7IGl0IGlzIGEgbm8tb3AgaWYgbm8gY29yb3V0aW5lcyBhcmUgd2FpdGluZy4KKworICAgICAgLi4gbm90ZTo6CisKKyAgICAgICAgIEFuIGF3YWtlbmVkIGNvcm91dGluZSBkb2VzIG5vdCBhY3R1YWxseSByZXR1cm4gZnJvbSBpdHMgOm1ldGg6YHdhaXRgCisgICAgICAgICBjYWxsIHVudGlsIGl0IGNhbiByZWFjcXVpcmUgdGhlIGxvY2suIFNpbmNlIDptZXRoOmBub3RpZnlgIGRvZXMgbm90CisgICAgICAgICByZWxlYXNlIHRoZSBsb2NrLCBpdHMgY2FsbGVyIHNob3VsZC4KKworICAgLi4gbWV0aG9kOjogbG9ja2VkKCkKKworICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSB1bmRlcmx5aW5nIGxvY2sgaXMgYWNxdWlyZWQuCisKKyAgIC4uIG1ldGhvZDo6IG5vdGlmeV9hbGwoKQorCisgICAgICBXYWtlIHVwIGFsbCBjb3JvdXRpbmVzIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24uIFRoaXMgbWV0aG9kIGFjdHMgbGlrZQorICAgICAgOm1ldGg6YG5vdGlmeWAsIGJ1dCB3YWtlcyB1cCBhbGwgd2FpdGluZyBjb3JvdXRpbmVzIGluc3RlYWQgb2Ygb25lLiBJZiB0aGUKKyAgICAgIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIGEKKyAgICAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSB0aGUgdW5kZXJseWluZyBsb2NrLgorCisgICAgICBXaGVuIHRoZSBsb2NrIGlzIGxvY2tlZCwgcmVzZXQgaXQgdG8gdW5sb2NrZWQsIGFuZCByZXR1cm4uIElmIGFueSBvdGhlcgorICAgICAgY29yb3V0aW5lcyBhcmUgYmxvY2tlZCB3YWl0aW5nIGZvciB0aGUgbG9jayB0byBiZWNvbWUgdW5sb2NrZWQsIGFsbG93CisgICAgICBleGFjdGx5IG9uZSBvZiB0aGVtIHRvIHByb2NlZWQuCisKKyAgICAgIFdoZW4gaW52b2tlZCBvbiBhbiB1bmxvY2tlZCBsb2NrLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisgICAgICBUaGVyZSBpcyBubyByZXR1cm4gdmFsdWUuCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IHdhaXQoKQorCisgICAgICBXYWl0IHVudGlsIG5vdGlmaWVkLgorCisgICAgICBJZiB0aGUgY2FsbGluZyBjb3JvdXRpbmUgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kIGlzCisgICAgICBjYWxsZWQsIGEgOmV4YzpgUnVudGltZUVycm9yYCBpcyByYWlzZWQuCisKKyAgICAgIFRoaXMgbWV0aG9kIHJlbGVhc2VzIHRoZSB1bmRlcmx5aW5nIGxvY2ssIGFuZCB0aGVuIGJsb2NrcyB1bnRpbCBpdCBpcworICAgICAgYXdha2VuZWQgYnkgYSA6bWV0aDpgbm90aWZ5YCBvciA6bWV0aDpgbm90aWZ5X2FsbGAgY2FsbCBmb3IgdGhlIHNhbWUKKyAgICAgIGNvbmRpdGlvbiB2YXJpYWJsZSBpbiBhbm90aGVyIGNvcm91dGluZS4gIE9uY2UgYXdha2VuZWQsIGl0IHJlLWFjcXVpcmVzCisgICAgICB0aGUgbG9jayBhbmQgcmV0dXJucyBgYFRydWVgYC4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICAuLiBjb3JvdXRpbmVtZXRob2Q6OiB3YWl0X2ZvcihwcmVkaWNhdGUpCisKKyAgICAgIFdhaXQgdW50aWwgYSBwcmVkaWNhdGUgYmVjb21lcyB0cnVlLgorCisgICAgICBUaGUgcHJlZGljYXRlIHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIHJlc3VsdCB3aWxsIGJlIGludGVycHJldGVkIGFzIGEKKyAgICAgIGJvb2xlYW4gdmFsdWUuIFRoZSBmaW5hbCBwcmVkaWNhdGUgdmFsdWUgaXMgdGhlIHJldHVybiB2YWx1ZS4KKworICAgICAgVGhpcyBtZXRob2QgaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisKK1NlbWFwaG9yZXMKKy0tLS0tLS0tLS0KKworU2VtYXBob3JlCiteXl5eXl5eXl4KKworLi4gY2xhc3M6OiBTZW1hcGhvcmUodmFsdWU9MSwgXCosIGxvb3A9Tm9uZSkKKworICAgQSBTZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCisKKyAgIEEgc2VtYXBob3JlIG1hbmFnZXMgYW4gaW50ZXJuYWwgY291bnRlciB3aGljaCBpcyBkZWNyZW1lbnRlZCBieSBlYWNoCisgICA6bWV0aDpgYWNxdWlyZWAgY2FsbCBhbmQgaW5jcmVtZW50ZWQgYnkgZWFjaCA6bWV0aDpgcmVsZWFzZWAgY2FsbC4gVGhlCisgICBjb3VudGVyIGNhbiBuZXZlciBnbyBiZWxvdyB6ZXJvOyB3aGVuIDptZXRoOmBhY3F1aXJlYCBmaW5kcyB0aGF0IGl0IGlzIHplcm8sCisgICBpdCBibG9ja3MsIHdhaXRpbmcgdW50aWwgc29tZSBvdGhlciBjb3JvdXRpbmUgY2FsbHMgOm1ldGg6YHJlbGVhc2VgLgorCisgICBTZW1hcGhvcmVzIGFsc28gc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgorCisgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgZ2l2ZXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBpbnRlcm5hbCBjb3VudGVyOyBpdAorICAgZGVmYXVsdHMgdG8gYGAxYGAuIElmIHRoZSB2YWx1ZSBnaXZlbiBpcyBsZXNzIHRoYW4gYGAwYGAsIDpleGM6YFZhbHVlRXJyb3JgCisgICBpcyByYWlzZWQuCisKKyAgIFRoaXMgY2xhc3MgaXMgOnJlZjpgbm90IHRocmVhZCBzYWZlIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAuCisKKyAgIC4uIGNvcm91dGluZW1ldGhvZDo6IGFjcXVpcmUoKQorCisgICAgICBBY3F1aXJlIGEgc2VtYXBob3JlLgorCisgICAgICBJZiB0aGUgaW50ZXJuYWwgY291bnRlciBpcyBsYXJnZXIgdGhhbiB6ZXJvIG9uIGVudHJ5LCBkZWNyZW1lbnQgaXQgYnkgb25lCisgICAgICBhbmQgcmV0dXJuIGBgVHJ1ZWBgIGltbWVkaWF0ZWx5LiAgSWYgaXQgaXMgemVybyBvbiBlbnRyeSwgYmxvY2ssIHdhaXRpbmcKKyAgICAgIHVudGlsIHNvbWUgb3RoZXIgY29yb3V0aW5lIGhhcyBjYWxsZWQgOm1ldGg6YHJlbGVhc2VgIHRvIG1ha2UgaXQgbGFyZ2VyCisgICAgICB0aGFuIGBgMGBgLCBhbmQgdGhlbiByZXR1cm4gYGBUcnVlYGAuCisKKyAgICAgIFRoaXMgbWV0aG9kIGlzIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YC4KKworICAgLi4gbWV0aG9kOjogbG9ja2VkKCkKKworICAgICAgUmV0dXJucyBgYFRydWVgYCBpZiBzZW1hcGhvcmUgY2FuIG5vdCBiZSBhY3F1aXJlZCBpbW1lZGlhdGVseS4KKworICAgLi4gbWV0aG9kOjogcmVsZWFzZSgpCisKKyAgICAgIFJlbGVhc2UgYSBzZW1hcGhvcmUsIGluY3JlbWVudGluZyB0aGUgaW50ZXJuYWwgY291bnRlciBieSBvbmUuIFdoZW4gaXQKKyAgICAgIHdhcyB6ZXJvIG9uIGVudHJ5IGFuZCBhbm90aGVyIGNvcm91dGluZSBpcyB3YWl0aW5nIGZvciBpdCB0byBiZWNvbWUKKyAgICAgIGxhcmdlciB0aGFuIHplcm8gYWdhaW4sIHdha2UgdXAgdGhhdCBjb3JvdXRpbmUuCisKKworQm91bmRlZFNlbWFwaG9yZQorXl5eXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IEJvdW5kZWRTZW1hcGhvcmUodmFsdWU9MSwgXCosIGxvb3A9Tm9uZSkKKworICAgQSBib3VuZGVkIHNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbi4gSW5oZXJpdCBmcm9tIDpjbGFzczpgU2VtYXBob3JlYC4KKworICAgVGhpcyByYWlzZXMgOmV4YzpgVmFsdWVFcnJvcmAgaW4gOm1ldGg6YH5TZW1hcGhvcmUucmVsZWFzZWAgaWYgaXQgd291bGQKKyAgIGluY3JlYXNlIHRoZSB2YWx1ZSBhYm92ZSB0aGUgaW5pdGlhbCB2YWx1ZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2FzeW5jaW8tdGFzay5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXRhc2sucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ZjA4NGEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9hc3luY2lvLXRhc2sucnN0CkBAIC0wLDAgKzEsNzE5IEBACisuLiBjdXJyZW50bW9kdWxlOjogYXN5bmNpbworCitUYXNrcyBhbmQgY29yb3V0aW5lcworPT09PT09PT09PT09PT09PT09PT0KKworLi4gX2Nvcm91dGluZToKKworQ29yb3V0aW5lcworLS0tLS0tLS0tLQorCitBIGNvcm91dGluZSBpcyBhIGdlbmVyYXRvciB0aGF0IGZvbGxvd3MgY2VydGFpbiBjb252ZW50aW9ucy4gIEZvcgorZG9jdW1lbnRhdGlvbiBwdXJwb3NlcywgYWxsIGNvcm91dGluZXMgc2hvdWxkIGJlIGRlY29yYXRlZCB3aXRoCitgYEBhc3luY2lvLmNvcm91dGluZWBgLCBidXQgdGhpcyBjYW5ub3QgYmUgc3RyaWN0bHkgZW5mb3JjZWQuCisKK0Nvcm91dGluZXMgdXNlIHRoZSBgYHlpZWxkIGZyb21gYCBzeW50YXggaW50cm9kdWNlZCBpbiA6cGVwOmAzODBgLAoraW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgYGB5aWVsZGBgIHN5bnRheC4KKworVGhlIHdvcmQgImNvcm91dGluZSIsIGxpa2UgdGhlIHdvcmQgImdlbmVyYXRvciIsIGlzIHVzZWQgZm9yIHR3bworZGlmZmVyZW50ICh0aG91Z2ggcmVsYXRlZCkgY29uY2VwdHM6CisKKy0gVGhlIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGNvcm91dGluZSAoYSBmdW5jdGlvbiBkZWZpbml0aW9uCisgIGRlY29yYXRlZCB3aXRoIGBgQGFzeW5jaW8uY29yb3V0aW5lYGApLiAgSWYgZGlzYW1iaWd1YXRpb24gaXMgbmVlZGVkCisgIHdlIHdpbGwgY2FsbCB0aGlzIGEgKmNvcm91dGluZSBmdW5jdGlvbiogKDpmdW5jOmBpc2Nvcm91dGluZWZ1bmN0aW9uYAorICByZXR1cm5zIGBgVHJ1ZWBgKS4KKworLSBUaGUgb2JqZWN0IG9idGFpbmVkIGJ5IGNhbGxpbmcgYSBjb3JvdXRpbmUgZnVuY3Rpb24uICBUaGlzIG9iamVjdAorICByZXByZXNlbnRzIGEgY29tcHV0YXRpb24gb3IgYW4gSS9PIG9wZXJhdGlvbiAodXN1YWxseSBhIGNvbWJpbmF0aW9uKQorICB0aGF0IHdpbGwgY29tcGxldGUgZXZlbnR1YWxseS4gIElmIGRpc2FtYmlndWF0aW9uIGlzIG5lZWRlZCB3ZSB3aWxsCisgIGNhbGwgaXQgYSAqY29yb3V0aW5lIG9iamVjdCogKDpmdW5jOmBpc2Nvcm91dGluZWAgcmV0dXJucyBgYFRydWVgYCkuCisKK1RoaW5ncyBhIGNvcm91dGluZSBjYW4gZG86CisKKy0gYGByZXN1bHQgPSB5aWVsZCBmcm9tIGZ1dHVyZWBgIC0tIHN1c3BlbmRzIHRoZSBjb3JvdXRpbmUgdW50aWwgdGhlCisgIGZ1dHVyZSBpcyBkb25lLCB0aGVuIHJldHVybnMgdGhlIGZ1dHVyZSdzIHJlc3VsdCwgb3IgcmFpc2VzIGFuCisgIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBiZSBwcm9wYWdhdGVkLiAgKElmIHRoZSBmdXR1cmUgaXMgY2FuY2VsbGVkLAorICBpdCB3aWxsIHJhaXNlIGEgYGBDYW5jZWxsZWRFcnJvcmBgIGV4Y2VwdGlvbi4pICBOb3RlIHRoYXQgdGFza3MgYXJlCisgIGZ1dHVyZXMsIGFuZCBldmVyeXRoaW5nIHNhaWQgYWJvdXQgZnV0dXJlcyBhbHNvIGFwcGxpZXMgdG8gdGFza3MuCisKKy0gYGByZXN1bHQgPSB5aWVsZCBmcm9tIGNvcm91dGluZWBgIC0tIHdhaXQgZm9yIGFub3RoZXIgY29yb3V0aW5lIHRvCisgIHByb2R1Y2UgYSByZXN1bHQgKG9yIHJhaXNlIGFuIGV4Y2VwdGlvbiwgd2hpY2ggd2lsbCBiZSBwcm9wYWdhdGVkKS4KKyAgVGhlIGBgY29yb3V0aW5lYGAgZXhwcmVzc2lvbiBtdXN0IGJlIGEgKmNhbGwqIHRvIGFub3RoZXIgY29yb3V0aW5lLgorCistIGBgcmV0dXJuIGV4cHJlc3Npb25gYCAtLSBwcm9kdWNlIGEgcmVzdWx0IHRvIHRoZSBjb3JvdXRpbmUgdGhhdCBpcworICB3YWl0aW5nIGZvciB0aGlzIG9uZSB1c2luZyBgYHlpZWxkIGZyb21gYC4KKworLSBgYHJhaXNlIGV4Y2VwdGlvbmBgIC0tIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiB0aGUgY29yb3V0aW5lIHRoYXQgaXMKKyAgd2FpdGluZyBmb3IgdGhpcyBvbmUgdXNpbmcgYGB5aWVsZCBmcm9tYGAuCisKK0NhbGxpbmcgYSBjb3JvdXRpbmUgZG9lcyBub3Qgc3RhcnQgaXRzIGNvZGUgcnVubmluZyAtLSBpdCBpcyBqdXN0IGEKK2dlbmVyYXRvciwgYW5kIHRoZSBjb3JvdXRpbmUgb2JqZWN0IHJldHVybmVkIGJ5IHRoZSBjYWxsIGlzIHJlYWxseSBhCitnZW5lcmF0b3Igb2JqZWN0LCB3aGljaCBkb2Vzbid0IGRvIGFueXRoaW5nIHVudGlsIHlvdSBpdGVyYXRlIG92ZXIgaXQuCitJbiB0aGUgY2FzZSBvZiBhIGNvcm91dGluZSBvYmplY3QsIHRoZXJlIGFyZSB0d28gYmFzaWMgd2F5cyB0byBzdGFydAoraXQgcnVubmluZzogY2FsbCBgYHlpZWxkIGZyb20gY29yb3V0aW5lYGAgZnJvbSBhbm90aGVyIGNvcm91dGluZQorKGFzc3VtaW5nIHRoZSBvdGhlciBjb3JvdXRpbmUgaXMgYWxyZWFkeSBydW5uaW5nISksIG9yIHNjaGVkdWxlIGl0cyBleGVjdXRpb24KK3VzaW5nIHRoZSA6ZnVuYzpgYXN5bmNgIGZ1bmN0aW9uIG9yIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AKK21ldGhvZC4KKworCitDb3JvdXRpbmVzIChhbmQgdGFza3MpIGNhbiBvbmx5IHJ1biB3aGVuIHRoZSBldmVudCBsb29wIGlzIHJ1bm5pbmcuCisKKy4uIGRlY29yYXRvcjo6IGNvcm91dGluZQorCisgICAgRGVjb3JhdG9yIHRvIG1hcmsgY29yb3V0aW5lcy4KKworICAgIElmIHRoZSBjb3JvdXRpbmUgaXMgbm90IHlpZWxkZWQgZnJvbSBiZWZvcmUgaXQgaXMgZGVzdHJveWVkLCBhbiBlcnJvcgorICAgIG1lc3NhZ2UgaXMgbG9nZ2VkLiBTZWUgOnJlZjpgRGV0ZWN0IGNvcm91dGluZXMgbmV2ZXIgc2NoZWR1bGVkCisgICAgPGFzeW5jaW8tY29yb3V0aW5lLW5vdC1zY2hlZHVsZWQ+YC4KKworLi4gbm90ZTo6CisKKyAgICBJbiB0aGlzIGRvY3VtZW50YXRpb24sIHNvbWUgbWV0aG9kcyBhcmUgZG9jdW1lbnRlZCBhcyBjb3JvdXRpbmVzLAorICAgIGV2ZW4gaWYgdGhleSBhcmUgcGxhaW4gUHl0aG9uIGZ1bmN0aW9ucyByZXR1cm5pbmcgYSA6Y2xhc3M6YEZ1dHVyZWAuCisgICAgVGhpcyBpcyBpbnRlbnRpb25hbCB0byBoYXZlIGEgZnJlZWRvbSBvZiB0d2Vha2luZyB0aGUgaW1wbGVtZW50YXRpb24KKyAgICBvZiB0aGVzZSBmdW5jdGlvbnMgaW4gdGhlIGZ1dHVyZS4gSWYgc3VjaCBhIGZ1bmN0aW9uIGlzIG5lZWRlZCB0byBiZQorICAgIHVzZWQgaW4gYSBjYWxsYmFjay1zdHlsZSBjb2RlLCB3cmFwIGl0cyByZXN1bHQgd2l0aCA6ZnVuYzpgYXN5bmNgLgorCisKKy4uIF9hc3luY2lvLWhlbGxvLXdvcmxkLWNvcm91dGluZToKKworRXhhbXBsZTogSGVsbG8gV29ybGQgY29yb3V0aW5lCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRXhhbXBsZSBvZiBjb3JvdXRpbmUgZGlzcGxheWluZyBgYCJIZWxsbyBXb3JsZCJgYDo6CisKKyAgICBpbXBvcnQgYXN5bmNpbworCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIGhlbGxvX3dvcmxkKCk6CisgICAgICAgIHByaW50KCJIZWxsbyBXb3JsZCEiKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgICMgQmxvY2tpbmcgY2FsbCB3aGljaCByZXR1cm5zIHdoZW4gdGhlIGhlbGxvX3dvcmxkKCkgY29yb3V0aW5lIGlzIGRvbmUKKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShoZWxsb193b3JsZCgpKQorICAgIGxvb3AuY2xvc2UoKQorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YEhlbGxvIFdvcmxkIHdpdGggY2FsbF9zb29uKCkgPGFzeW5jaW8taGVsbG8td29ybGQtY2FsbGJhY2s+YAorICAgZXhhbXBsZSB1c2VzIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jYWxsX3Nvb25gIG1ldGhvZCB0byBzY2hlZHVsZSBhCisgICBjYWxsYmFjay4KKworCisuLiBfYXN5bmNpby1kYXRlLWNvcm91dGluZToKKworRXhhbXBsZTogQ29yb3V0aW5lIGRpc3BsYXlpbmcgdGhlIGN1cnJlbnQgZGF0ZQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFeGFtcGxlIG9mIGNvcm91dGluZSBkaXNwbGF5aW5nIHRoZSBjdXJyZW50IGRhdGUgZXZlcnkgc2Vjb25kIGR1cmluZyA1IHNlY29uZHMKK3VzaW5nIHRoZSA6bWV0aDpgc2xlZXBgIGZ1bmN0aW9uOjoKKworICAgIGltcG9ydCBhc3luY2lvCisgICAgaW1wb3J0IGRhdGV0aW1lCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgZGlzcGxheV9kYXRlKGxvb3ApOgorICAgICAgICBlbmRfdGltZSA9IGxvb3AudGltZSgpICsgNS4wCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBwcmludChkYXRldGltZS5kYXRldGltZS5ub3coKSkKKyAgICAgICAgICAgIGlmIChsb29wLnRpbWUoKSArIDEuMCkgPj0gZW5kX3RpbWU6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxKQorCisgICAgbG9vcCA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3AoKQorICAgICMgQmxvY2tpbmcgY2FsbCB3aGljaCByZXR1cm5zIHdoZW4gdGhlIGRpc3BsYXlfZGF0ZSgpIGNvcm91dGluZSBpcyBkb25lCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZGlzcGxheV9kYXRlKGxvb3ApKQorICAgIGxvb3AuY2xvc2UoKQorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDpyZWY6YGRpc3BsYXkgdGhlIGN1cnJlbnQgZGF0ZSB3aXRoIGNhbGxfbGF0ZXIoKQorICAgPGFzeW5jaW8tZGF0ZS1jYWxsYmFjaz5gIGV4YW1wbGUgdXNlcyBhIGNhbGxiYWNrIHdpdGggdGhlCisgICA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jYWxsX2xhdGVyYCBtZXRob2QuCisKKworRXhhbXBsZTogQ2hhaW4gY29yb3V0aW5lcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitFeGFtcGxlIGNoYWluaW5nIGNvcm91dGluZXM6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBjb21wdXRlKHgsIHkpOgorICAgICAgICBwcmludCgiQ29tcHV0ZSAlcyArICVzIC4uLiIgJSAoeCwgeSkpCisgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxLjApCisgICAgICAgIHJldHVybiB4ICsgeQorCisgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgZGVmIHByaW50X3N1bSh4LCB5KToKKyAgICAgICAgcmVzdWx0ID0geWllbGQgZnJvbSBjb21wdXRlKHgsIHkpCisgICAgICAgIHByaW50KCIlcyArICVzID0gJXMiICUgKHgsIHksIHJlc3VsdCkpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJpbnRfc3VtKDEsIDIpKQorICAgIGxvb3AuY2xvc2UoKQorCitgYGNvbXB1dGUoKWBgIGlzIGNoYWluZWQgdG8gYGBwcmludF9zdW0oKWBgOiBgYHByaW50X3N1bSgpYGAgY29yb3V0aW5lIHdhaXRzCit1bnRpbCBgYGNvbXB1dGUoKWBgIGlzIGNvbXBsZXRlZCBiZWZvcmUgcmV0dXJuaW5nIGl0cyByZXN1bHQuCisKK1NlcXVlbmNlIGRpYWdyYW0gb2YgdGhlIGV4YW1wbGU6CisKKy4uIGltYWdlOjogdHVsaXBfY29yby5wbmcKKyAgIDphbGlnbjogY2VudGVyCisKK1RoZSAiVGFzayIgaXMgY3JlYXRlZCBieSB0aGUgOm1ldGg6YEJhc2VFdmVudExvb3AucnVuX3VudGlsX2NvbXBsZXRlYCBtZXRob2QKK3doZW4gaXQgZ2V0cyBhIGNvcm91dGluZSBvYmplY3QgaW5zdGVhZCBvZiBhIHRhc2suCisKK1RoZSBkaWFncmFtIHNob3dzIHRoZSBjb250cm9sIGZsb3csIGl0IGRvZXMgbm90IGRlc2NyaWJlIGV4YWN0bHkgaG93IHRoaW5ncword29yayBpbnRlcm5hbGx5LiBGb3IgZXhhbXBsZSwgdGhlIHNsZWVwIGNvcm91dGluZSBjcmVhdGVzIGFuIGludGVybmFsIGZ1dHVyZQord2hpY2ggdXNlcyA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jYWxsX2xhdGVyYCB0byB3YWtlIHVwIHRoZSB0YXNrIGluIDEgc2Vjb25kLgorCisKK0ludmFsaWRTdGF0ZUVycm9yCistLS0tLS0tLS0tLS0tLS0tLQorCisuLiBleGNlcHRpb246OiBJbnZhbGlkU3RhdGVFcnJvcgorCisgICBUaGUgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgc3RhdGUuCisKKworVGltZW91dEVycm9yCistLS0tLS0tLS0tLS0KKworLi4gZXhjZXB0aW9uOjogVGltZW91dEVycm9yCisKKyAgIFRoZSBvcGVyYXRpb24gZXhjZWVkZWQgdGhlIGdpdmVuIGRlYWRsaW5lLgorCisuLiBub3RlOjoKKworICAgVGhpcyBleGNlcHRpb24gaXMgZGlmZmVyZW50IGZyb20gdGhlIGJ1aWx0aW4gOmV4YzpgVGltZW91dEVycm9yYCBleGNlcHRpb24hCisKKworRnV0dXJlCistLS0tLS0KKworLi4gY2xhc3M6OiBGdXR1cmUoXCosIGxvb3A9Tm9uZSkKKworICAgVGhpcyBjbGFzcyBpcyAqYWxtb3N0KiBjb21wYXRpYmxlIHdpdGggOmNsYXNzOmBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlYC4KKworICAgRGlmZmVyZW5jZXM6CisKKyAgIC0gOm1ldGg6YHJlc3VsdGAgYW5kIDptZXRoOmBleGNlcHRpb25gIGRvIG5vdCB0YWtlIGEgdGltZW91dCBhcmd1bWVudCBhbmQKKyAgICAgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldC4KKworICAgLSBDYWxsYmFja3MgcmVnaXN0ZXJlZCB3aXRoIDptZXRoOmBhZGRfZG9uZV9jYWxsYmFja2AgYXJlIGFsd2F5cyBjYWxsZWQKKyAgICAgdmlhIHRoZSBldmVudCBsb29wJ3MgOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNhbGxfc29vbl90aHJlYWRzYWZlYC4KKworICAgLSBUaGlzIGNsYXNzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIDpmdW5jOmB+Y29uY3VycmVudC5mdXR1cmVzLndhaXRgIGFuZAorICAgICA6ZnVuYzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5hc19jb21wbGV0ZWRgIGZ1bmN0aW9ucyBpbiB0aGUKKyAgICAgOm1vZDpgY29uY3VycmVudC5mdXR1cmVzYCBwYWNrYWdlLgorCisgICBUaGlzIGNsYXNzIGlzIDpyZWY6YG5vdCB0aHJlYWQgc2FmZSA8YXN5bmNpby1tdWx0aXRocmVhZGluZz5gLgorCisgICAuLiBtZXRob2Q6OiBjYW5jZWwoKQorCisgICAgICBDYW5jZWwgdGhlIGZ1dHVyZSBhbmQgc2NoZWR1bGUgY2FsbGJhY2tzLgorCisgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSBvciBjYW5jZWxsZWQsIHJldHVybiBgYEZhbHNlYGAuIE90aGVyd2lzZSwKKyAgICAgIGNoYW5nZSB0aGUgZnV0dXJlJ3Mgc3RhdGUgdG8gY2FuY2VsbGVkLCBzY2hlZHVsZSB0aGUgY2FsbGJhY2tzIGFuZCByZXR1cm4KKyAgICAgIGBgVHJ1ZWBgLgorCisgICAuLiBtZXRob2Q6OiBjYW5jZWxsZWQoKQorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLgorCisgICAuLiBtZXRob2Q6OiBkb25lKCkKKworICAgICAgUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSBpcyBkb25lLgorCisgICAgICBEb25lIG1lYW5zIGVpdGhlciB0aGF0IGEgcmVzdWx0IC8gZXhjZXB0aW9uIGFyZSBhdmFpbGFibGUsIG9yIHRoYXQgdGhlCisgICAgICBmdXR1cmUgd2FzIGNhbmNlbGxlZC4KKworICAgLi4gbWV0aG9kOjogcmVzdWx0KCkKKworICAgICAgUmV0dXJuIHRoZSByZXN1bHQgdGhpcyBmdXR1cmUgcmVwcmVzZW50cy4KKworICAgICAgSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcyA6ZXhjOmBDYW5jZWxsZWRFcnJvcmAuIElmIHRoZQorICAgICAgZnV0dXJlJ3MgcmVzdWx0IGlzbid0IHlldCBhdmFpbGFibGUsIHJhaXNlcyA6ZXhjOmBJbnZhbGlkU3RhdGVFcnJvcmAuIElmCisgICAgICB0aGUgZnV0dXJlIGlzIGRvbmUgYW5kIGhhcyBhbiBleGNlcHRpb24gc2V0LCB0aGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKKyAgIC4uIG1ldGhvZDo6IGV4Y2VwdGlvbigpCisKKyAgICAgIFJldHVybiB0aGUgZXhjZXB0aW9uIHRoYXQgd2FzIHNldCBvbiB0aGlzIGZ1dHVyZS4KKworICAgICAgVGhlIGV4Y2VwdGlvbiAob3IgYGBOb25lYGAgaWYgbm8gZXhjZXB0aW9uIHdhcyBzZXQpIGlzIHJldHVybmVkIG9ubHkgaWYKKyAgICAgIHRoZSBmdXR1cmUgaXMgZG9uZS4gSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcworICAgICAgOmV4YzpgQ2FuY2VsbGVkRXJyb3JgLiBJZiB0aGUgZnV0dXJlIGlzbid0IGRvbmUgeWV0LCByYWlzZXMKKyAgICAgIDpleGM6YEludmFsaWRTdGF0ZUVycm9yYC4KKworICAgLi4gbWV0aG9kOjogYWRkX2RvbmVfY2FsbGJhY2soZm4pCisKKyAgICAgIEFkZCBhIGNhbGxiYWNrIHRvIGJlIHJ1biB3aGVuIHRoZSBmdXR1cmUgYmVjb21lcyBkb25lLgorCisgICAgICBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgLSB0aGUgZnV0dXJlIG9iamVjdC4gSWYgdGhlCisgICAgICBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBpcyBjYWxsZWQsIHRoZSBjYWxsYmFjayBpcyBzY2hlZHVsZWQKKyAgICAgIHdpdGggOm1ldGg6YH5CYXNlRXZlbnRMb29wLmNhbGxfc29vbmAuCisKKyAgICAgIDpyZWY6YFVzZSBmdW5jdG9vbHMucGFydGlhbCB0byBwYXNzIHBhcmFtZXRlcnMgdG8gdGhlIGNhbGxiYWNrCisgICAgICA8YXN5bmNpby1wYXNzLWtleXdvcmRzPmAuIEZvciBleGFtcGxlLAorICAgICAgYGBmdXQuYWRkX2RvbmVfY2FsbGJhY2soZnVuY3Rvb2xzLnBhcnRpYWwocHJpbnQsICJGdXR1cmU6IiwKKyAgICAgIGZsdXNoPVRydWUpKWBgIHdpbGwgY2FsbCBgYHByaW50KCJGdXR1cmU6IiwgZnV0LCBmbHVzaD1UcnVlKWBgLgorCisgICAuLiBtZXRob2Q6OiByZW1vdmVfZG9uZV9jYWxsYmFjayhmbikKKworICAgICAgUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSBjYWxsYmFjayBmcm9tIHRoZSAiY2FsbCB3aGVuIGRvbmUiIGxpc3QuCisKKyAgICAgIFJldHVybnMgdGhlIG51bWJlciBvZiBjYWxsYmFja3MgcmVtb3ZlZC4KKworICAgLi4gbWV0aG9kOjogc2V0X3Jlc3VsdChyZXN1bHQpCisKKyAgICAgIE1hcmsgdGhlIGZ1dHVyZSBkb25lIGFuZCBzZXQgaXRzIHJlc3VsdC4KKworICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgOmV4YzpgSW52YWxpZFN0YXRlRXJyb3JgLgorCisgICAuLiBtZXRob2Q6OiBzZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKworICAgICAgTWFyayB0aGUgZnV0dXJlIGRvbmUgYW5kIHNldCBhbiBleGNlcHRpb24uCisKKyAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCByYWlzZXMKKyAgICAgIDpleGM6YEludmFsaWRTdGF0ZUVycm9yYC4KKworCitFeGFtcGxlOiBGdXR1cmUgd2l0aCBydW5fdW50aWxfY29tcGxldGUoKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworRXhhbXBsZSBjb21iaW5pbmcgYSA6Y2xhc3M6YEZ1dHVyZWAgYW5kIGEgOnJlZjpgY29yb3V0aW5lIGZ1bmN0aW9uCis8Y29yb3V0aW5lPmA6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBzbG93X29wZXJhdGlvbihmdXR1cmUpOgorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMSkKKyAgICAgICAgZnV0dXJlLnNldF9yZXN1bHQoJ0Z1dHVyZSBpcyBkb25lIScpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgZnV0dXJlID0gYXN5bmNpby5GdXR1cmUoKQorICAgIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShzbG93X29wZXJhdGlvbihmdXR1cmUpKQorICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dHVyZSkKKyAgICBwcmludChmdXR1cmUucmVzdWx0KCkpCisgICAgbG9vcC5jbG9zZSgpCisKK1RoZSBjb3JvdXRpbmUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRoZSBjb21wdXRhdGlvbiAod2hpY2ggdGFrZXMgMSBzZWNvbmQpCithbmQgaXQgc3RvcmVzIHRoZSByZXN1bHQgaW50byB0aGUgZnV0dXJlLiBUaGUKKzptZXRoOmB+QmFzZUV2ZW50TG9vcC5ydW5fdW50aWxfY29tcGxldGVgIG1ldGhvZCB3YWl0cyBmb3IgdGhlIGNvbXBsZXRpb24gb2YKK3RoZSBmdXR1cmUuCisKKy4uIG5vdGU6OgorICAgVGhlIDptZXRoOmB+QmFzZUV2ZW50TG9vcC5ydW5fdW50aWxfY29tcGxldGVgIG1ldGhvZCB1c2VzIGludGVybmFsbHkgdGhlCisgICA6bWV0aDpgfkZ1dHVyZS5hZGRfZG9uZV9jYWxsYmFja2AgbWV0aG9kIHRvIGJlIG5vdGlmaWVkIHdoZW4gdGhlIGZ1dHVyZSBpcworICAgZG9uZS4KKworCitFeGFtcGxlOiBGdXR1cmUgd2l0aCBydW5fZm9yZXZlcigpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBwcmV2aW91cyBleGFtcGxlIGNhbiBiZSB3cml0dGVuIGRpZmZlcmVudGx5IHVzaW5nIHRoZQorOm1ldGg6YEZ1dHVyZS5hZGRfZG9uZV9jYWxsYmFja2AgbWV0aG9kIHRvIGRlc2NyaWJlIGV4cGxpY2l0bHkgdGhlIGNvbnRyb2wKK2Zsb3c6OgorCisgICAgaW1wb3J0IGFzeW5jaW8KKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBzbG93X29wZXJhdGlvbihmdXR1cmUpOgorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMSkKKyAgICAgICAgZnV0dXJlLnNldF9yZXN1bHQoJ0Z1dHVyZSBpcyBkb25lIScpCisKKyAgICBkZWYgZ290X3Jlc3VsdChmdXR1cmUpOgorICAgICAgICBwcmludChmdXR1cmUucmVzdWx0KCkpCisgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICBsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpCisgICAgZnV0dXJlID0gYXN5bmNpby5GdXR1cmUoKQorICAgIGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShzbG93X29wZXJhdGlvbihmdXR1cmUpKQorICAgIGZ1dHVyZS5hZGRfZG9uZV9jYWxsYmFjayhnb3RfcmVzdWx0KQorICAgIHRyeToKKyAgICAgICAgbG9vcC5ydW5fZm9yZXZlcigpCisgICAgZmluYWxseToKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKK0luIHRoaXMgZXhhbXBsZSwgdGhlIGZ1dHVyZSBpcyB1c2VkIHRvIGxpbmsgYGBzbG93X29wZXJhdGlvbigpYGAgdG8KK2BgZ290X3Jlc3VsdCgpYGA6IHdoZW4gYGBzbG93X29wZXJhdGlvbigpYGAgaXMgZG9uZSwgYGBnb3RfcmVzdWx0KClgYCBpcyBjYWxsZWQKK3dpdGggdGhlIHJlc3VsdC4KKworCitUYXNrCistLS0tCisKKy4uIGNsYXNzOjogVGFzayhjb3JvLCBcKiwgbG9vcD1Ob25lKQorCisgICBTY2hlZHVsZSB0aGUgZXhlY3V0aW9uIG9mIGEgOnJlZjpgY29yb3V0aW5lIDxjb3JvdXRpbmU+YDogd3JhcCBpdCBpbiBhCisgICBmdXR1cmUuIEEgdGFzayBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgRnV0dXJlYC4KKworICAgQSB0YXNrIGlzIHJlc3BvbnNpYmxlIGZvciBleGVjdXRpbmcgYSBjb3JvdXRpbmUgb2JqZWN0IGluIGFuIGV2ZW50IGxvb3AuICBJZgorICAgdGhlIHdyYXBwZWQgY29yb3V0aW5lIHlpZWxkcyBmcm9tIGEgZnV0dXJlLCB0aGUgdGFzayBzdXNwZW5kcyB0aGUgZXhlY3V0aW9uCisgICBvZiB0aGUgd3JhcHBlZCBjb3JvdXRpbmUgYW5kIHdhaXRzIGZvciB0aGUgY29tcGxldGl0aW9uIG9mIHRoZSBmdXR1cmUuIFdoZW4KKyAgIHRoZSBmdXR1cmUgaXMgZG9uZSwgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgd3JhcHBlZCBjb3JvdXRpbmUgcmVzdGFydHMgd2l0aCB0aGUKKyAgIHJlc3VsdCBvciB0aGUgZXhjZXB0aW9uIG9mIHRoZSBmdXR1cmUuCisKKyAgIEV2ZW50IGxvb3BzIHVzZSBjb29wZXJhdGl2ZSBzY2hlZHVsaW5nOiBhbiBldmVudCBsb29wIG9ubHkgcnVucyBvbmUgdGFzayBhdAorICAgYSB0aW1lLiBPdGhlciB0YXNrcyBtYXkgcnVuIGluIHBhcmFsbGVsIGlmIG90aGVyIGV2ZW50IGxvb3BzIGFyZQorICAgcnVubmluZyBpbiBkaWZmZXJlbnQgdGhyZWFkcy4gV2hpbGUgYSB0YXNrIHdhaXRzIGZvciB0aGUgY29tcGxldGlvbiBvZiBhCisgICBmdXR1cmUsIHRoZSBldmVudCBsb29wIGV4ZWN1dGVzIGEgbmV3IHRhc2suCisKKyAgIFRoZSBjYW5jZWxsYXRpb24gb2YgYSB0YXNrIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjYW5jZWxhdGlvbiBvZiBhCisgICBmdXR1cmUuIENhbGxpbmcgOm1ldGg6YGNhbmNlbGAgd2lsbCB0aHJvdyBhCisgICA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYCB0byB0aGUgd3JhcHBlZAorICAgY29yb3V0aW5lLiA6bWV0aDpgfkZ1dHVyZS5jYW5jZWxsZWRgIG9ubHkgcmV0dXJucyBgYFRydWVgYCBpZiB0aGUKKyAgIHdyYXBwZWQgY29yb3V0aW5lIGRpZCBub3QgY2F0Y2ggdGhlCisgICA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYCBleGNlcHRpb24sIG9yIHJhaXNlZCBhCisgICA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYCBleGNlcHRpb24uCisKKyAgIElmIGEgcGVuZGluZyB0YXNrIGlzIGRlc3Ryb3llZCwgdGhlIGV4ZWN1dGlvbiBvZiBpdHMgd3JhcHBlZCA6cmVmOmBjb3JvdXRpbmUKKyAgIDxjb3JvdXRpbmU+YCBkaWQgbm90IGNvbXBsZXRlLiBJdCBpcyBwcm9iYWJseSBhIGJ1ZyBhbmQgYSB3YXJuaW5nIGlzCisgICBsb2dnZWQ6IHNlZSA6cmVmOmBQZW5kaW5nIHRhc2sgZGVzdHJveWVkIDxhc3luY2lvLXBlbmRpbmctdGFzay1kZXN0cm95ZWQ+YC4KKworICAgRG9uJ3QgZGlyZWN0bHkgY3JlYXRlIDpjbGFzczpgVGFza2AgaW5zdGFuY2VzOiB1c2UgdGhlIDpmdW5jOmBhc3luY2AKKyAgIGZ1bmN0aW9uIG9yIHRoZSA6bWV0aDpgQmFzZUV2ZW50TG9vcC5jcmVhdGVfdGFza2AgbWV0aG9kLgorCisgICBUaGlzIGNsYXNzIGlzIDpyZWY6YG5vdCB0aHJlYWQgc2FmZSA8YXN5bmNpby1tdWx0aXRocmVhZGluZz5gLgorCisgICAuLiBjbGFzc21ldGhvZDo6IGFsbF90YXNrcyhsb29wPU5vbmUpCisKKyAgICAgIFJldHVybiBhIHNldCBvZiBhbGwgdGFza3MgZm9yIGFuIGV2ZW50IGxvb3AuCisKKyAgICAgIEJ5IGRlZmF1bHQgYWxsIHRhc2tzIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGFyZSByZXR1cm5lZC4KKworICAgLi4gY2xhc3NtZXRob2Q6OiBjdXJyZW50X3Rhc2sobG9vcD1Ob25lKQorCisgICAgICBSZXR1cm4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHRhc2sgaW4gYW4gZXZlbnQgbG9vcCBvciBgYE5vbmVgYC4KKworICAgICAgQnkgZGVmYXVsdCB0aGUgY3VycmVudCB0YXNrIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGlzIHJldHVybmVkLgorCisgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZCB3aGVuIGNhbGxlZCBub3QgaW4gdGhlIGNvbnRleHQgb2YgYSA6Y2xhc3M6YFRhc2tgLgorCisgICAuLiBtZXRob2Q6OiBjYW5jZWwoKQorCisgICAgICBSZXF1ZXN0IHRoYXQgdGhpcyB0YXNrIGNhbmNlbCBpdHNlbGYuCisKKyAgICAgIFRoaXMgYXJyYW5nZXMgZm9yIGEgOmV4YzpgfmNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcmAgdG8gYmUKKyAgICAgIHRocm93biBpbnRvIHRoZSB3cmFwcGVkIGNvcm91dGluZSBvbiB0aGUgbmV4dCBjeWNsZSB0aHJvdWdoIHRoZSBldmVudAorICAgICAgbG9vcC4gVGhlIGNvcm91dGluZSB0aGVuIGhhcyBhIGNoYW5jZSB0byBjbGVhbiB1cCBvciBldmVuIGRlbnkgdGhlCisgICAgICByZXF1ZXN0IHVzaW5nIHRyeS9leGNlcHQvZmluYWxseS4KKworICAgICAgVW5saWtlIDptZXRoOmBGdXR1cmUuY2FuY2VsYCwgdGhpcyBkb2VzIG5vdCBndWFyYW50ZWUgdGhhdCB0aGUgdGFzaworICAgICAgd2lsbCBiZSBjYW5jZWxsZWQ6IHRoZSBleGNlcHRpb24gbWlnaHQgYmUgY2F1Z2h0IGFuZCBhY3RlZCB1cG9uLCBkZWxheWluZworICAgICAgY2FuY2VsbGF0aW9uIG9mIHRoZSB0YXNrIG9yIHByZXZlbnRpbmcgY2FuY2VsbGF0aW9uIGNvbXBsZXRlbHkuIFRoZSB0YXNrCisgICAgICBtYXkgYWxzbyByZXR1cm4gYSB2YWx1ZSBvciByYWlzZSBhIGRpZmZlcmVudCBleGNlcHRpb24uCisKKyAgICAgIEltbWVkaWF0ZWx5IGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgOm1ldGg6YH5GdXR1cmUuY2FuY2VsbGVkYCB3aWxsCisgICAgICBub3QgcmV0dXJuIGBgVHJ1ZWBgICh1bmxlc3MgdGhlIHRhc2sgd2FzIGFscmVhZHkgY2FuY2VsbGVkKS4gQSB0YXNrIHdpbGwKKyAgICAgIGJlIG1hcmtlZCBhcyBjYW5jZWxsZWQgd2hlbiB0aGUgd3JhcHBlZCBjb3JvdXRpbmUgdGVybWluYXRlcyB3aXRoIGEKKyAgICAgIDpleGM6YH5jb25jdXJyZW50LmZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3JgIGV4Y2VwdGlvbiAoZXZlbiBpZgorICAgICAgOm1ldGg6YGNhbmNlbGAgd2FzIG5vdCBjYWxsZWQpLgorCisgICAuLiBtZXRob2Q6OiBnZXRfc3RhY2soXCosIGxpbWl0PU5vbmUpCisKKyAgICAgIFJldHVybiB0aGUgbGlzdCBvZiBzdGFjayBmcmFtZXMgZm9yIHRoaXMgdGFzaydzIGNvcm91dGluZS4KKworICAgICAgSWYgdGhlIGNvcm91dGluZSBpcyBub3QgZG9uZSwgdGhpcyByZXR1cm5zIHRoZSBzdGFjayB3aGVyZSBpdCBpcworICAgICAgc3VzcGVuZGVkLiAgSWYgdGhlIGNvcm91dGluZSBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBvciB3YXMKKyAgICAgIGNhbmNlbGxlZCwgdGhpcyByZXR1cm5zIGFuIGVtcHR5IGxpc3QuICBJZiB0aGUgY29yb3V0aW5lIHdhcworICAgICAgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24sIHRoaXMgcmV0dXJucyB0aGUgbGlzdCBvZiB0cmFjZWJhY2sKKyAgICAgIGZyYW1lcy4KKworICAgICAgVGhlIGZyYW1lcyBhcmUgYWx3YXlzIG9yZGVyZWQgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0LgorCisgICAgICBUaGUgb3B0aW9uYWwgbGltaXQgZ2l2ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyB0byByZXR1cm47IGJ5CisgICAgICBkZWZhdWx0IGFsbCBhdmFpbGFibGUgZnJhbWVzIGFyZSByZXR1cm5lZC4gIEl0cyBtZWFuaW5nIGRpZmZlcnMgZGVwZW5kaW5nCisgICAgICBvbiB3aGV0aGVyIGEgc3RhY2sgb3IgYSB0cmFjZWJhY2sgaXMgcmV0dXJuZWQ6IHRoZSBuZXdlc3QgZnJhbWVzIG9mIGEKKyAgICAgIHN0YWNrIGFyZSByZXR1cm5lZCwgYnV0IHRoZSBvbGRlc3QgZnJhbWVzIG9mIGEgdHJhY2ViYWNrIGFyZSByZXR1cm5lZC4KKyAgICAgIChUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mIHRoZSB0cmFjZWJhY2sgbW9kdWxlLikKKworICAgICAgRm9yIHJlYXNvbnMgYmV5b25kIG91ciBjb250cm9sLCBvbmx5IG9uZSBzdGFjayBmcmFtZSBpcyByZXR1cm5lZCBmb3IgYQorICAgICAgc3VzcGVuZGVkIGNvcm91dGluZS4KKworICAgLi4gbWV0aG9kOjogcHJpbnRfc3RhY2soXCosIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSkKKworICAgICAgUHJpbnQgdGhlIHN0YWNrIG9yIHRyYWNlYmFjayBmb3IgdGhpcyB0YXNrJ3MgY29yb3V0aW5lLgorCisgICAgICBUaGlzIHByb2R1Y2VzIG91dHB1dCBzaW1pbGFyIHRvIHRoYXQgb2YgdGhlIHRyYWNlYmFjayBtb2R1bGUsIGZvciB0aGUKKyAgICAgIGZyYW1lcyByZXRyaWV2ZWQgYnkgZ2V0X3N0YWNrKCkuICBUaGUgbGltaXQgYXJndW1lbnQgaXMgcGFzc2VkIHRvCisgICAgICBnZXRfc3RhY2soKS4gIFRoZSBmaWxlIGFyZ3VtZW50IGlzIGFuIEkvTyBzdHJlYW0gdG8gd2hpY2ggdGhlIG91dHB1dAorICAgICAgaXMgd3JpdHRlbjsgYnkgZGVmYXVsdCBvdXRwdXQgaXMgd3JpdHRlbiB0byBzeXMuc3RkZXJyLgorCisKK0V4YW1wbGU6IFBhcmFsbGVsIGV4ZWN1dGlvbiBvZiB0YXNrcworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0V4YW1wbGUgZXhlY3V0aW5nIDMgdGFza3MgKEEsIEIsIEMpIGluIHBhcmFsbGVsOjoKKworICAgIGltcG9ydCBhc3luY2lvCisKKyAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICBkZWYgZmFjdG9yaWFsKG5hbWUsIG51bWJlcik6CisgICAgICAgIGYgPSAxCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIsIG51bWJlcisxKToKKyAgICAgICAgICAgIHByaW50KCJUYXNrICVzOiBDb21wdXRlIGZhY3RvcmlhbCglcykuLi4iICUgKG5hbWUsIGkpKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEpCisgICAgICAgICAgICBmICo9IGkKKyAgICAgICAgcHJpbnQoIlRhc2sgJXM6IGZhY3RvcmlhbCglcykgPSAlcyIgJSAobmFtZSwgbnVtYmVyLCBmKSkKKworICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wKCkKKyAgICB0YXNrcyA9IFsKKyAgICAgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKGZhY3RvcmlhbCgiQSIsIDIpKSwKKyAgICAgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKGZhY3RvcmlhbCgiQiIsIDMpKSwKKyAgICAgICAgYXN5bmNpby5lbnN1cmVfZnV0dXJlKGZhY3RvcmlhbCgiQyIsIDQpKV0KKyAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQodGFza3MpKQorICAgIGxvb3AuY2xvc2UoKQorCitPdXRwdXQ6OgorCisgICAgVGFzayBBOiBDb21wdXRlIGZhY3RvcmlhbCgyKS4uLgorICAgIFRhc2sgQjogQ29tcHV0ZSBmYWN0b3JpYWwoMikuLi4KKyAgICBUYXNrIEM6IENvbXB1dGUgZmFjdG9yaWFsKDIpLi4uCisgICAgVGFzayBBOiBmYWN0b3JpYWwoMikgPSAyCisgICAgVGFzayBCOiBDb21wdXRlIGZhY3RvcmlhbCgzKS4uLgorICAgIFRhc2sgQzogQ29tcHV0ZSBmYWN0b3JpYWwoMykuLi4KKyAgICBUYXNrIEI6IGZhY3RvcmlhbCgzKSA9IDYKKyAgICBUYXNrIEM6IENvbXB1dGUgZmFjdG9yaWFsKDQpLi4uCisgICAgVGFzayBDOiBmYWN0b3JpYWwoNCkgPSAyNAorCitBIHRhc2sgaXMgYXV0b21hdGljYWxseSBzY2hlZHVsZWQgZm9yIGV4ZWN1dGlvbiB3aGVuIGl0IGlzIGNyZWF0ZWQuIFRoZSBldmVudAorbG9vcCBzdG9wcyB3aGVuIGFsbCB0YXNrcyBhcmUgZG9uZS4KKworCitUYXNrIGZ1bmN0aW9ucworLS0tLS0tLS0tLS0tLS0KKworLi4gbm90ZTo6CisKKyAgIEluIHRoZSBmdW5jdGlvbnMgYmVsb3csIHRoZSBvcHRpb25hbCAqbG9vcCogYXJndW1lbnQgYWxsb3dzIHRvIGV4cGxpY2l0bHkgc2V0CisgICB0aGUgZXZlbnQgbG9vcCBvYmplY3QgdXNlZCBieSB0aGUgdW5kZXJseWluZyB0YXNrIG9yIGNvcm91dGluZS4gIElmIGl0J3MKKyAgIG5vdCBwcm92aWRlZCwgdGhlIGRlZmF1bHQgZXZlbnQgbG9vcCBpcyB1c2VkLgorCisuLiBmdW5jdGlvbjo6IGFzX2NvbXBsZXRlZChmcywgXCosIGxvb3A9Tm9uZSwgdGltZW91dD1Ob25lKQorCisgICBSZXR1cm4gYW4gaXRlcmF0b3Igd2hvc2UgdmFsdWVzLCB3aGVuIHdhaXRlZCBmb3IsIGFyZSA6Y2xhc3M6YEZ1dHVyZWAKKyAgIGluc3RhbmNlcy4KKworICAgUmFpc2VzIDpleGM6YGFzeW5jaW8uVGltZW91dEVycm9yYCBpZiB0aGUgdGltZW91dCBvY2N1cnMgYmVmb3JlIGFsbCBGdXR1cmVzCisgICBhcmUgZG9uZS4KKworICAgRXhhbXBsZTo6CisKKyAgICAgICBmb3IgZiBpbiBhc19jb21wbGV0ZWQoZnMpOgorICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGYgICMgVGhlICd5aWVsZCBmcm9tJyBtYXkgcmFpc2UKKyAgICAgICAgICAgIyBVc2UgcmVzdWx0CisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgZnV0dXJlcyBgYGZgYCBhcmUgbm90IG5lY2Vzc2FyaWx5IG1lbWJlcnMgb2YgZnMuCisKKy4uIGZ1bmN0aW9uOjogZW5zdXJlX2Z1dHVyZShjb3JvX29yX2Z1dHVyZSwgXCosIGxvb3A9Tm9uZSkKKworICAgU2NoZWR1bGUgdGhlIGV4ZWN1dGlvbiBvZiBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gOiB3cmFwIGl0IGluCisgICBhIGZ1dHVyZS4gUmV0dXJuIGEgOmNsYXNzOmBUYXNrYCBvYmplY3QuCisKKyAgIElmIHRoZSBhcmd1bWVudCBpcyBhIDpjbGFzczpgRnV0dXJlYCwgaXQgaXMgcmV0dXJuZWQgZGlyZWN0bHkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNC40CisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOm1ldGg6YEJhc2VFdmVudExvb3AuY3JlYXRlX3Rhc2tgIG1ldGhvZC4KKworLi4gZnVuY3Rpb246OiBhc3luYyhjb3JvX29yX2Z1dHVyZSwgXCosIGxvb3A9Tm9uZSkKKworICAgQSBkZXByZWNhdGVkIGFsaWFzIHRvIDpmdW5jOmBlbnN1cmVfZnV0dXJlYC4KKworICAgLi4gZGVwcmVjYXRlZDo6IDMuNC40CisKKy4uIGZ1bmN0aW9uOjogZ2F0aGVyKFwqY29yb3Nfb3JfZnV0dXJlcywgbG9vcD1Ob25lLCByZXR1cm5fZXhjZXB0aW9ucz1GYWxzZSkKKworICAgUmV0dXJuIGEgZnV0dXJlIGFnZ3JlZ2F0aW5nIHJlc3VsdHMgZnJvbSB0aGUgZ2l2ZW4gY29yb3V0aW5lIG9iamVjdHMgb3IKKyAgIGZ1dHVyZXMuCisKKyAgIEFsbCBmdXR1cmVzIG11c3Qgc2hhcmUgdGhlIHNhbWUgZXZlbnQgbG9vcC4gIElmIGFsbCB0aGUgdGFza3MgYXJlIGRvbmUKKyAgIHN1Y2Nlc3NmdWxseSwgdGhlIHJldHVybmVkIGZ1dHVyZSdzIHJlc3VsdCBpcyB0aGUgbGlzdCBvZiByZXN1bHRzIChpbiB0aGUKKyAgIG9yZGVyIG9mIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSwgbm90IG5lY2Vzc2FyaWx5IHRoZSBvcmRlciBvZiByZXN1bHRzCisgICBhcnJpdmFsKS4gIElmICpyZXR1cm5fZXhjZXB0aW9ucyogaXMgVHJ1ZSwgZXhjZXB0aW9ucyBpbiB0aGUgdGFza3MgYXJlCisgICB0cmVhdGVkIHRoZSBzYW1lIGFzIHN1Y2Nlc3NmdWwgcmVzdWx0cywgYW5kIGdhdGhlcmVkIGluIHRoZSByZXN1bHQgbGlzdDsKKyAgIG90aGVyd2lzZSwgdGhlIGZpcnN0IHJhaXNlZCBleGNlcHRpb24gd2lsbCBiZSBpbW1lZGlhdGVseSBwcm9wYWdhdGVkIHRvIHRoZQorICAgcmV0dXJuZWQgZnV0dXJlLgorCisgICBDYW5jZWxsYXRpb246IGlmIHRoZSBvdXRlciBGdXR1cmUgaXMgY2FuY2VsbGVkLCBhbGwgY2hpbGRyZW4gKHRoYXQgaGF2ZSBub3QKKyAgIGNvbXBsZXRlZCB5ZXQpIGFyZSBhbHNvIGNhbmNlbGxlZC4gIElmIGFueSBjaGlsZCBpcyBjYW5jZWxsZWQsIHRoaXMgaXMKKyAgIHRyZWF0ZWQgYXMgaWYgaXQgcmFpc2VkIDpleGM6YH5jb25jdXJyZW50LmZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3JgIC0tIHRoZQorICAgb3V0ZXIgRnV0dXJlIGlzICpub3QqIGNhbmNlbGxlZCBpbiB0aGlzIGNhc2UuICAoVGhpcyBpcyB0byBwcmV2ZW50IHRoZQorICAgY2FuY2VsbGF0aW9uIG9mIG9uZSBjaGlsZCB0byBjYXVzZSBvdGhlciBjaGlsZHJlbiB0byBiZSBjYW5jZWxsZWQuKQorCisuLiBmdW5jdGlvbjo6IGlzY29yb3V0aW5lKG9iaikKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmICpvYmoqIGlzIGEgOnJlZjpgY29yb3V0aW5lIG9iamVjdCA8Y29yb3V0aW5lPmAuCisKKy4uIGZ1bmN0aW9uOjogaXNjb3JvdXRpbmVmdW5jdGlvbihvYmopCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiAqZnVuYyogaXMgYSBkZWNvcmF0ZWQgOnJlZjpgY29yb3V0aW5lIGZ1bmN0aW9uCisgICA8Y29yb3V0aW5lPmAuCisKKy4uIGZ1bmN0aW9uOjogcnVuX2Nvcm91dGluZV90aHJlYWRzYWZlKGNvcm8sIGxvb3ApCisKKyAgIFN1Ym1pdCBhIDpyZWY6YGNvcm91dGluZSBvYmplY3QgPGNvcm91dGluZT5gIHRvIGEgZ2l2ZW4gZXZlbnQgbG9vcC4KKworICAgUmV0dXJuIGEgOmNsYXNzOmBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlYCB0byBhY2Nlc3MgdGhlIHJlc3VsdC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQgdGhhbiB0aGUgb25lCisgICB3aGVyZSB0aGUgZXZlbnQgbG9vcCBpcyBydW5uaW5nLiBVc2FnZTo6CisKKyAgICAgIyBDcmVhdGUgYSBjb3JvdXRpbmUKKyAgICAgY29ybyA9IGFzeW5jaW8uc2xlZXAoMSwgcmVzdWx0PTMpCisgICAgICMgU3VibWl0IHRoZSBjb3JvdXRpbmUgdG8gYSBnaXZlbiBsb29wCisgICAgIGZ1dHVyZSA9IGFzeW5jaW8ucnVuX2Nvcm91dGluZV90aHJlYWRzYWZlKGNvcm8sIGxvb3ApCisgICAgICMgV2FpdCBmb3IgdGhlIHJlc3VsdCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQgYXJndW1lbnQKKyAgICAgYXNzZXJ0IGZ1dHVyZS5yZXN1bHQodGltZW91dCkgPT0gMworCisgICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIHRoZSBjb3JvdXRpbmUsIHRoZSByZXR1cm5lZCBmdXR1cmUgd2lsbCBiZQorICAgbm90aWZpZWQuIEl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSB0YXNrIGluIHRoZSBldmVudCBsb29wOjoKKworICAgICB0cnk6CisgICAgICAgICByZXN1bHQgPSBmdXR1cmUucmVzdWx0KHRpbWVvdXQpCisgICAgIGV4Y2VwdCBhc3luY2lvLlRpbWVvdXRFcnJvcjoKKyAgICAgICAgIHByaW50KCdUaGUgY29yb3V0aW5lIHRvb2sgdG9vIGxvbmcsIGNhbmNlbGxpbmcgdGhlIHRhc2suLi4nKQorICAgICAgICAgZnV0dXJlLmNhbmNlbCgpCisgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgcHJpbnQoJ1RoZSBjb3JvdXRpbmUgcmFpc2VkIGFuIGV4Y2VwdGlvbjogeyFyfScuZm9ybWF0KGV4YykpCisgICAgIGVsc2U6CisgICAgICAgICBwcmludCgnVGhlIGNvcm91dGluZSByZXR1cm5lZDogeyFyfScuZm9ybWF0KHJlc3VsdCkpCisKKyAgIFNlZSB0aGUgOnJlZjpgY29uY3VycmVuY3kgYW5kIG11bHRpdGhyZWFkaW5nIDxhc3luY2lvLW11bHRpdGhyZWFkaW5nPmAKKyAgIHNlY3Rpb24gb2YgdGhlIGRvY3VtZW50YXRpb24uCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBVbmxpa2UgdGhlIGZ1bmN0aW9ucyBhYm92ZSwgOmZ1bmM6YHJ1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZWAgcmVxdWlyZXMgdGhlCisgICAgICAqbG9vcCogYXJndW1lbnQgdG8gYmUgcGFzc2VkIGV4cGxpY2l0ZWx5LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQuNCwgMy41LjEKKworLi4gY29yb3V0aW5lZnVuY3Rpb246OiBzbGVlcChkZWxheSwgcmVzdWx0PU5vbmUsIFwqLCBsb29wPU5vbmUpCisKKyAgIENyZWF0ZSBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAgdGhhdCBjb21wbGV0ZXMgYWZ0ZXIgYSBnaXZlbgorICAgdGltZSAoaW4gc2Vjb25kcykuICBJZiAqcmVzdWx0KiBpcyBwcm92aWRlZCwgaXQgaXMgcHJvZHVjZWQgdG8gdGhlIGNhbGxlcgorICAgd2hlbiB0aGUgY29yb3V0aW5lIGNvbXBsZXRlcy4KKworICAgVGhlIHJlc29sdXRpb24gb2YgdGhlIHNsZWVwIGRlcGVuZHMgb24gdGhlIDpyZWY6YGdyYW51bGFyaXR5IG9mIHRoZSBldmVudAorICAgbG9vcCA8YXN5bmNpby1kZWxheWVkLWNhbGxzPmAuCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisuLiBmdW5jdGlvbjo6IHNoaWVsZChhcmcsIFwqLCBsb29wPU5vbmUpCisKKyAgIFdhaXQgZm9yIGEgZnV0dXJlLCBzaGllbGRpbmcgaXQgZnJvbSBjYW5jZWxsYXRpb24uCisKKyAgIFRoZSBzdGF0ZW1lbnQ6OgorCisgICAgICAgcmVzID0geWllbGQgZnJvbSBzaGllbGQoc29tZXRoaW5nKCkpCisKKyAgIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byB0aGUgc3RhdGVtZW50OjoKKworICAgICAgIHJlcyA9IHlpZWxkIGZyb20gc29tZXRoaW5nKCkKKworICAgKmV4Y2VwdCogdGhhdCBpZiB0aGUgY29yb3V0aW5lIGNvbnRhaW5pbmcgaXQgaXMgY2FuY2VsbGVkLCB0aGUgdGFzayBydW5uaW5nCisgICBpbiBgYHNvbWV0aGluZygpYGAgaXMgbm90IGNhbmNlbGxlZC4gIEZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2YKKyAgIGBgc29tZXRoaW5nKClgYCwgdGhlIGNhbmNlbGxhdGlvbiBkaWQgbm90IGhhcHBlbi4gIEJ1dCBpdHMgY2FsbGVyIGlzIHN0aWxsCisgICBjYW5jZWxsZWQsIHNvIHRoZSB5aWVsZC1mcm9tIGV4cHJlc3Npb24gc3RpbGwgcmFpc2VzCisgICA6ZXhjOmB+Y29uY3VycmVudC5mdXR1cmVzLkNhbmNlbGxlZEVycm9yYC4gIE5vdGU6IElmIGBgc29tZXRoaW5nKClgYCBpcworICAgY2FuY2VsbGVkIGJ5IG90aGVyIG1lYW5zIHRoaXMgd2lsbCBzdGlsbCBjYW5jZWwgYGBzaGllbGQoKWBgLgorCisgICBJZiB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IGlnbm9yZSBjYW5jZWxsYXRpb24gKG5vdCByZWNvbW1lbmRlZCkgeW91IGNhbgorICAgY29tYmluZSBgYHNoaWVsZCgpYGAgd2l0aCBhIHRyeS9leGNlcHQgY2xhdXNlLCBhcyBmb2xsb3dzOjoKKworICAgICAgIHRyeToKKyAgICAgICAgICAgcmVzID0geWllbGQgZnJvbSBzaGllbGQoc29tZXRoaW5nKCkpCisgICAgICAgZXhjZXB0IENhbmNlbGxlZEVycm9yOgorICAgICAgICAgICByZXMgPSBOb25lCisKKy4uIGZ1bmN0aW9uOjogdGltZW91dCh0aW1lb3V0LCBcKiwgbG9vcD1Ob25lKQorCisgICBSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCBjYW5jZWxzIGEgYmxvY2sgb24gKnRpbWVvdXQqIGV4cGlyaW5nOjoKKworICAgICAgIHdpdGggdGltZW91dCgxLjUpOgorICAgICAgICAgICB5aWVsZCBmcm9tIGlubmVyKCkKKworICAgMS4gSWYgYGBpbm5lcigpYGAgaXMgZXhlY3V0ZWQgZmFzdGVyIHRoYW4gaW4gYGAxLjVgYCBzZWNvbmRzCisgICAgICBub3RoaW5nIGhhcHBlbnMuCisgICAyLiBPdGhlcndpc2UgYGBpbm5lcigpYGAgaXMgY2FuY2VsbGVkIGludGVybmFsbHkgYnV0CisgICAgICA6ZXhjOmBhc3luY2lvLlRpbWVvdXRFcnJvcmAgaXMgcmFpc2VkIG91dHNpZGUgb2YKKyAgICAgIGNvbnRleHQgbWFuYWdlciBzY29wZS4KKworLi4gY29yb3V0aW5lZnVuY3Rpb246OiB3YWl0KGZ1dHVyZXMsIFwqLCBsb29wPU5vbmUsIHRpbWVvdXQ9Tm9uZSxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3doZW49QUxMX0NPTVBMRVRFRCkKKworICAgV2FpdCBmb3IgdGhlIEZ1dHVyZXMgYW5kIGNvcm91dGluZSBvYmplY3RzIGdpdmVuIGJ5IHRoZSBzZXF1ZW5jZSAqZnV0dXJlcyoKKyAgIHRvIGNvbXBsZXRlLiAgQ29yb3V0aW5lcyB3aWxsIGJlIHdyYXBwZWQgaW4gVGFza3MuIFJldHVybnMgdHdvIHNldHMgb2YKKyAgIDpjbGFzczpgRnV0dXJlYDogKGRvbmUsIHBlbmRpbmcpLgorCisgICBUaGUgc2VxdWVuY2UgKmZ1dHVyZXMqIG11c3Qgbm90IGJlIGVtcHR5LgorCisgICAqdGltZW91dCogY2FuIGJlIHVzZWQgdG8gY29udHJvbCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJlZm9yZQorICAgcmV0dXJuaW5nLiAgKnRpbWVvdXQqIGNhbiBiZSBhbiBpbnQgb3IgZmxvYXQuICBJZiAqdGltZW91dCogaXMgbm90IHNwZWNpZmllZAorICAgb3IgYGBOb25lYGAsIHRoZXJlIGlzIG5vIGxpbWl0IHRvIHRoZSB3YWl0IHRpbWUuCisKKyAgICpyZXR1cm5fd2hlbiogaW5kaWNhdGVzIHdoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuLiAgSXQgbXVzdCBiZSBvbmUgb2YKKyAgIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIG9mIHRoZSA6bW9kOmBjb25jdXJyZW50LmZ1dHVyZXNgIG1vZHVsZToKKworICAgLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxMfAorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgQ29uc3RhbnQgICAgICAgICAgICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgRklSU1RfQ09NUExFVEVEYCAgICB8IFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGVuIGFueSAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnV0dXJlIGZpbmlzaGVzIG9yIGlzIGNhbmNlbGxlZC4gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgRklSU1RfRVhDRVBUSU9OYCAgICB8IFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGVuIGFueSAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnV0dXJlIGZpbmlzaGVzIGJ5IHJhaXNpbmcgYW4gICAgICAgICAgfAorICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBleGNlcHRpb24uICBJZiBubyBmdXR1cmUgcmFpc2VzIGFuICAgICB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGV4Y2VwdGlvbiB0aGVuIGl0IGlzIGVxdWl2YWxlbnQgdG8gICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgOmNvbnN0OmBBTExfQ09NUExFVEVEYC4gICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgQUxMX0NPTVBMRVRFRGAgICAgICB8IFRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiB3aGVuIGFsbCAgICAgIHwKKyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnV0dXJlcyBmaW5pc2ggb3IgYXJlIGNhbmNlbGxlZC4gICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSA6cmVmOmBjb3JvdXRpbmUgPGNvcm91dGluZT5gLgorCisgICBVc2FnZTo6CisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KGZzKQorCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBkb2VzIG5vdCByYWlzZSA6ZXhjOmBhc3luY2lvLlRpbWVvdXRFcnJvcmAhIEZ1dHVyZXMgdGhhdCBhcmVuJ3QgZG9uZQorICAgICAgd2hlbiB0aGUgdGltZW91dCBvY2N1cnMgYXJlIHJldHVybmVkIGluIHRoZSBzZWNvbmQgc2V0LgorCisKKy4uIGNvcm91dGluZWZ1bmN0aW9uOjogd2FpdF9mb3IoZnV0LCB0aW1lb3V0LCBcKiwgbG9vcD1Ob25lKQorCisgICBXYWl0IGZvciB0aGUgc2luZ2xlIDpjbGFzczpgRnV0dXJlYCBvciA6cmVmOmBjb3JvdXRpbmUgb2JqZWN0IDxjb3JvdXRpbmU+YAorICAgdG8gY29tcGxldGUgd2l0aCB0aW1lb3V0LiBJZiAqdGltZW91dCogaXMgYGBOb25lYGAsIGJsb2NrIHVudGlsIHRoZSBmdXR1cmUKKyAgIGNvbXBsZXRlcy4KKworICAgQ29yb3V0aW5lIHdpbGwgYmUgd3JhcHBlZCBpbiA6Y2xhc3M6YFRhc2tgLgorCisgICBSZXR1cm5zIHJlc3VsdCBvZiB0aGUgRnV0dXJlIG9yIGNvcm91dGluZS4gIFdoZW4gYSB0aW1lb3V0IG9jY3VycywgaXQKKyAgIGNhbmNlbHMgdGhlIHRhc2sgYW5kIHJhaXNlcyA6ZXhjOmBhc3luY2lvLlRpbWVvdXRFcnJvcmAuIFRvIGF2b2lkIHRoZSB0YXNrCisgICBjYW5jZWxsYXRpb24sIHdyYXAgaXQgaW4gOmZ1bmM6YHNoaWVsZGAuCisKKyAgIElmIHRoZSB3YWl0IGlzIGNhbmNlbGxlZCwgdGhlIGZ1dHVyZSAqZnV0KiBpcyBhbHNvIGNhbmNlbGxlZC4KKworICAgVGhpcyBmdW5jdGlvbiBpcyBhIDpyZWY6YGNvcm91dGluZSA8Y29yb3V0aW5lPmAsIHVzYWdlOjoKKworICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0X2ZvcihmdXQsIDYwLjApCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjMKKyAgICAgIElmIHRoZSB3YWl0IGlzIGNhbmNlbGxlZCwgdGhlIGZ1dHVyZSAqZnV0KiBpcyBub3cgYWxzbyBjYW5jZWxsZWQuCisKKwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYXN5bmNpby5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY2lvLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjRkNjVlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvYXN5bmNpby5yc3QKQEAgLTAsMCArMSw3MyBAQAorOm1vZDpgYXN5bmNpb2AgLS0gQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IGFzeW5jaW8KKyAgIDpzeW5vcHNpczogQXN5bmNocm9ub3VzIEkvTywgZXZlbnQgbG9vcCwgY29yb3V0aW5lcyBhbmQgdGFza3MuCisKKy4uIG5vdGU6OgorCisgICBUaGUgYXN5bmNpbyBwYWNrYWdlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uIGEKKyAgIDp0ZXJtOmBwcm92aXNpb25hbCBiYXNpcyA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLiBCYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIG1vZHVsZSkgbWF5IG9jY3VyIGlmIGRlZW1lZAorICAgbmVjZXNzYXJ5IGJ5IHRoZSBjb3JlIGRldmVsb3BlcnMuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9hc3luY2lvL2AKKworLS0tLS0tLS0tLS0tLS0KKworVGhpcyBtb2R1bGUgcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHdyaXRpbmcgc2luZ2xlLXRocmVhZGVkIGNvbmN1cnJlbnQKK2NvZGUgdXNpbmcgY29yb3V0aW5lcywgbXVsdGlwbGV4aW5nIEkvTyBhY2Nlc3Mgb3ZlciBzb2NrZXRzIGFuZCBvdGhlcgorcmVzb3VyY2VzLCBydW5uaW5nIG5ldHdvcmsgY2xpZW50cyBhbmQgc2VydmVycywgYW5kIG90aGVyIHJlbGF0ZWQgcHJpbWl0aXZlcy4KK0hlcmUgaXMgYSBtb3JlIGRldGFpbGVkIGxpc3Qgb2YgdGhlIHBhY2thZ2UgY29udGVudHM6CisKKyogYSBwbHVnZ2FibGUgOnJlZjpgZXZlbnQgbG9vcCA8YXN5bmNpby1ldmVudC1sb29wPmAgd2l0aCB2YXJpb3VzIHN5c3RlbS1zcGVjaWZpYworICBpbXBsZW1lbnRhdGlvbnM7CisKKyogOnJlZjpgdHJhbnNwb3J0IDxhc3luY2lvLXRyYW5zcG9ydD5gIGFuZCA6cmVmOmBwcm90b2NvbCA8YXN5bmNpby1wcm90b2NvbD5gIGFic3RyYWN0aW9ucworICAoc2ltaWxhciB0byB0aG9zZSBpbiBgVHdpc3RlZCA8aHR0cHM6Ly90d2lzdGVkbWF0cml4LmNvbS90cmFjLz5gXyk7CisKKyogY29uY3JldGUgc3VwcG9ydCBmb3IgVENQLCBVRFAsIFNTTCwgc3VicHJvY2VzcyBwaXBlcywgZGVsYXllZCBjYWxscywgYW5kCisgIG90aGVycyAoc29tZSBtYXkgYmUgc3lzdGVtLWRlcGVuZGVudCk7CisKKyogYSA6Y2xhc3M6YEZ1dHVyZWAgY2xhc3MgdGhhdCBtaW1pY3MgdGhlIG9uZSBpbiB0aGUgOm1vZDpgY29uY3VycmVudC5mdXR1cmVzYAorICBtb2R1bGUsIGJ1dCBhZGFwdGVkIGZvciB1c2Ugd2l0aCB0aGUgZXZlbnQgbG9vcDsKKworKiBjb3JvdXRpbmVzIGFuZCB0YXNrcyBiYXNlZCBvbiBgYHlpZWxkIGZyb21gYCAoOlBFUDpgMzgwYCksIHRvIGhlbHAgd3JpdGUKKyAgY29uY3VycmVudCBjb2RlIGluIGEgc2VxdWVudGlhbCBmYXNoaW9uOworCisqIGNhbmNlbGxhdGlvbiBzdXBwb3J0IGZvciA6Y2xhc3M6YEZ1dHVyZWBccyBhbmQgY29yb3V0aW5lczsKKworKiA6cmVmOmBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyA8YXN5bmNpby1zeW5jPmAgZm9yIHVzZSBiZXR3ZWVuIGNvcm91dGluZXMgaW4KKyAgYSBzaW5nbGUgdGhyZWFkLCBtaW1pY2tpbmcgdGhvc2UgaW4gdGhlIDptb2Q6YHRocmVhZGluZ2AgbW9kdWxlOworCisqIGFuIGludGVyZmFjZSBmb3IgcGFzc2luZyB3b3JrIG9mZiB0byBhIHRocmVhZHBvb2wsIGZvciB0aW1lcyB3aGVuCisgIHlvdSBhYnNvbHV0ZWx5LCBwb3NpdGl2ZWx5IGhhdmUgdG8gdXNlIGEgbGlicmFyeSB0aGF0IG1ha2VzIGJsb2NraW5nCisgIEkvTyBjYWxscy4KKworQXN5bmNocm9ub3VzIHByb2dyYW1taW5nIGlzIG1vcmUgY29tcGxleCB0aGFuIGNsYXNzaWNhbCAic2VxdWVudGlhbCIKK3Byb2dyYW1taW5nOiBzZWUgdGhlIDpyZWY6YERldmVsb3Agd2l0aCBhc3luY2lvIDxhc3luY2lvLWRldj5gIHBhZ2Ugd2hpY2ggbGlzdHMKK2NvbW1vbiB0cmFwcyBhbmQgZXhwbGFpbnMgaG93IHRvIGF2b2lkIHRoZW0uIDpyZWY6YEVuYWJsZSB0aGUgZGVidWcgbW9kZQorPGFzeW5jaW8tZGVidWctbW9kZT5gIGR1cmluZyBkZXZlbG9wbWVudCB0byBkZXRlY3QgY29tbW9uIGlzc3Vlcy4KKworVGFibGUgb2YgY29udGVudHM6CisKKy4uIHRvY3RyZWU6OgorICAgOm1heGRlcHRoOiAzCisKKyAgIGFzeW5jaW8tZXZlbnRsb29wLnJzdAorICAgYXN5bmNpby1ldmVudGxvb3BzLnJzdAorICAgYXN5bmNpby10YXNrLnJzdAorICAgYXN5bmNpby1wcm90b2NvbC5yc3QKKyAgIGFzeW5jaW8tc3RyZWFtLnJzdAorICAgYXN5bmNpby1zdWJwcm9jZXNzLnJzdAorICAgYXN5bmNpby1zeW5jLnJzdAorICAgYXN5bmNpby1xdWV1ZS5yc3QKKyAgIGFzeW5jaW8tZGV2LnJzdAorCisuLiBzZWVhbHNvOjoKKworICAgVGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSB3YXMgZGVzaWduZWQgaW4gOlBFUDpgMzE1NmAuIEZvciBhCisgICBtb3RpdmF0aW9uYWwgcHJpbWVyIG9uIHRyYW5zcG9ydHMgYW5kIHByb3RvY29scywgc2VlIDpQRVA6YDMxNTNgLgorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QgYi9Eb2MvbGlicmFyeS9hc3luY29yZS5yc3QKaW5kZXggMTUyMWU3Mi4uOTE3ZDA0NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXN5bmNvcmUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2FzeW5jb3JlLnJzdApAQCAtMTMsNiArMTMsMTEgQEAKIAogLS0tLS0tLS0tLS0tLS0KIAorLi4gbm90ZTo6CisKKyAgIFRoaXMgbW9kdWxlIGV4aXN0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb25seS4gIEZvciBuZXcgY29kZSB3ZQorICAgcmVjb21tZW5kIHVzaW5nIDptb2Q6YGFzeW5jaW9gLgorCiBUaGlzIG1vZHVsZSBwcm92aWRlcyB0aGUgYmFzaWMgaW5mcmFzdHJ1Y3R1cmUgZm9yIHdyaXRpbmcgYXN5bmNocm9ub3VzICBzb2NrZXQKIHNlcnZpY2UgY2xpZW50cyBhbmQgc2VydmVycy4KIApAQCAtMjExLDYgKzIxNiwxMCBAQAogICAgICAgZW1wdHkgYnl0ZXMgb2JqZWN0IGltcGxpZXMgdGhhdCB0aGUgY2hhbm5lbCBoYXMgYmVlbiBjbG9zZWQgZnJvbSB0aGUKICAgICAgIG90aGVyIGVuZC4KIAorICAgICAgTm90ZSB0aGF0IDptZXRoOmByZWN2YCBtYXkgcmFpc2UgOmV4YzpgQmxvY2tpbmdJT0Vycm9yYCAsIGV2ZW4gdGhvdWdoCisgICAgICA6ZnVuYzpgc2VsZWN0LnNlbGVjdGAgb3IgOmZ1bmM6YHNlbGVjdC5wb2xsYCBoYXMgcmVwb3J0ZWQgdGhlIHNvY2tldAorICAgICAgcmVhZHkgZm9yIHJlYWRpbmcuCisKIAogICAgLi4gbWV0aG9kOjogbGlzdGVuKGJhY2tsb2cpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2F1ZGlvb3AucnN0IGIvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKaW5kZXggZWRiMzg3MC4uY2UxMjdhYSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvYXVkaW9vcC5yc3QKQEAgLTYsOSArNiwxNCBAQAogCiAKIFRoZSA6bW9kOmBhdWRpb29wYCBtb2R1bGUgY29udGFpbnMgc29tZSB1c2VmdWwgb3BlcmF0aW9ucyBvbiBzb3VuZCBmcmFnbWVudHMuCi1JdCBvcGVyYXRlcyBvbiBzb3VuZCBmcmFnbWVudHMgY29uc2lzdGluZyBvZiBzaWduZWQgaW50ZWdlciBzYW1wbGVzIDgsIDE2IG9yIDMyCi1iaXRzIHdpZGUsIHN0b3JlZCBpbiBieXRlcyBvYmplY3RzLiAgQWxsIHNjYWxhciBpdGVtcyBhcmUgaW50ZWdlcnMsIHVubGVzcwotc3BlY2lmaWVkIG90aGVyd2lzZS4KK0l0IG9wZXJhdGVzIG9uIHNvdW5kIGZyYWdtZW50cyBjb25zaXN0aW5nIG9mIHNpZ25lZCBpbnRlZ2VyIHNhbXBsZXMgOCwgMTYsIDI0CitvciAzMiBiaXRzIHdpZGUsIHN0b3JlZCBpbiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzLiAgQWxsIHNjYWxhciBpdGVtcyBhcmUKK2ludGVnZXJzLCB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFN1cHBvcnQgZm9yIDI0LWJpdCBzYW1wbGVzIHdhcyBhZGRlZC4KKyAgIEFsbCBmdW5jdGlvbnMgbm93IGFjY2VwdCBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKyAgIFN0cmluZyBpbnB1dCBub3cgcmVzdWx0cyBpbiBhbiBpbW1lZGlhdGUgZXJyb3IuCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogSW50ZWwvRFZJIEFEUENNCkBAIC0zNSw3ICs0MCw3IEBACiAuLiBmdW5jdGlvbjo6IGFkZChmcmFnbWVudDEsIGZyYWdtZW50Miwgd2lkdGgpCiAKICAgIFJldHVybiBhIGZyYWdtZW50IHdoaWNoIGlzIHRoZSBhZGRpdGlvbiBvZiB0aGUgdHdvIHNhbXBsZXMgcGFzc2VkIGFzIHBhcmFtZXRlcnMuCi0gICAqd2lkdGgqIGlzIHRoZSBzYW1wbGUgd2lkdGggaW4gYnl0ZXMsIGVpdGhlciBgYDFgYCwgYGAyYGAgb3IgYGA0YGAuICBCb3RoCisgICAqd2lkdGgqIGlzIHRoZSBzYW1wbGUgd2lkdGggaW4gYnl0ZXMsIGVpdGhlciBgYDFgYCwgYGAyYGAsIGBgM2BgIG9yIGBgNGBgLiAgQm90aAogICAgZnJhZ21lbnRzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gIFNhbXBsZXMgYXJlIHRydW5jYXRlZCBpbiBjYXNlIG9mIG92ZXJmbG93LgogCiAKQEAgLTcwLDYgKzc1LDE0IEBACiAgICBzYW1wbGUuICBTYW1wbGVzIHdyYXAgYXJvdW5kIGluIGNhc2Ugb2Ygb3ZlcmZsb3cuCiAKIAorLi4gZnVuY3Rpb246OiBieXRlc3dhcChmcmFnbWVudCwgd2lkdGgpCisKKyAgICJCeXRlc3dhcCIgYWxsIHNhbXBsZXMgaW4gYSBmcmFnbWVudCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgZnJhZ21lbnQuCisgICBDb252ZXJ0cyBiaWctZW5kaWFuIHNhbXBsZXMgdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBjcm9zcyhmcmFnbWVudCwgd2lkdGgpCiAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHplcm8gY3Jvc3NpbmdzIGluIHRoZSBmcmFnbWVudCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuCkBAIC0xMzMsMTkgKzE0NiwxOSBAQAogCiAuLiBmdW5jdGlvbjo6IGxpbjJsaW4oZnJhZ21lbnQsIHdpZHRoLCBuZXd3aWR0aCkKIAotICAgQ29udmVydCBzYW1wbGVzIGJldHdlZW4gMS0sIDItIGFuZCA0LWJ5dGUgZm9ybWF0cy4KKyAgIENvbnZlcnQgc2FtcGxlcyBiZXR3ZWVuIDEtLCAyLSwgMy0gYW5kIDQtYnl0ZSBmb3JtYXRzLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgSW4gc29tZSBhdWRpbyBmb3JtYXRzLCBzdWNoIGFzIC5XQVYgZmlsZXMsIDE2IGFuZCAzMiBiaXQgc2FtcGxlcyBhcmUKKyAgICAgIEluIHNvbWUgYXVkaW8gZm9ybWF0cywgc3VjaCBhcyAuV0FWIGZpbGVzLCAxNiwgMjQgYW5kIDMyIGJpdCBzYW1wbGVzIGFyZQogICAgICAgc2lnbmVkLCBidXQgOCBiaXQgc2FtcGxlcyBhcmUgdW5zaWduZWQuICBTbyB3aGVuIGNvbnZlcnRpbmcgdG8gOCBiaXQgd2lkZQogICAgICAgc2FtcGxlcyBmb3IgdGhlc2UgZm9ybWF0cywgeW91IG5lZWQgdG8gYWxzbyBhZGQgMTI4IHRvIHRoZSByZXN1bHQ6OgogCiAgICAgICAgICBuZXdfZnJhbWVzID0gYXVkaW9vcC5saW4ybGluKGZyYW1lcywgb2xkX3dpZHRoLCAxKQogICAgICAgICAgbmV3X2ZyYW1lcyA9IGF1ZGlvb3AuYmlhcyhuZXdfZnJhbWVzLCAxLCAxMjgpCiAKLSAgICAgIFRoZSBzYW1lLCBpbiByZXZlcnNlLCBoYXMgdG8gYmUgYXBwbGllZCB3aGVuIGNvbnZlcnRpbmcgZnJvbSA4IHRvIDE2IG9yIDMyCi0gICAgICBiaXQgd2lkdGggc2FtcGxlcy4KKyAgICAgIFRoZSBzYW1lLCBpbiByZXZlcnNlLCBoYXMgdG8gYmUgYXBwbGllZCB3aGVuIGNvbnZlcnRpbmcgZnJvbSA4IHRvIDE2LCAyNAorICAgICAgb3IgMzIgYml0IHdpZHRoIHNhbXBsZXMuCiAKIAogLi4gZnVuY3Rpb246OiBsaW4ydWxhdyhmcmFnbWVudCwgd2lkdGgpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9iYXNlNjQucnN0IGIvRG9jL2xpYnJhcnkvYmFzZTY0LnJzdAppbmRleCBmMGQxMWIwLi5lYmE0YjM2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iYXNlNjQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Jhc2U2NC5yc3QKQEAgLTEsMzIgKzEsNDIgQEAKLTptb2Q6YGJhc2U2NGAgLS0tIFJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOm1vZDpgYmFzZTY0YCAtLS0gQmFzZTE2LCBCYXNlMzIsIEJhc2U2NCwgQmFzZTg1IERhdGEgRW5jb2RpbmdzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogLi4gbW9kdWxlOjogYmFzZTY0Ci0gICA6c3lub3BzaXM6IFJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzCisgICA6c3lub3BzaXM6IFJGQyAzNTQ4OiBCYXNlMTYsIEJhc2UzMiwgQmFzZTY0IERhdGEgRW5jb2RpbmdzOworICAgICAgICAgICAgICBCYXNlODUgYW5kIEFzY2lpODUKIAogCiAuLiBpbmRleDo6CiAgICBwYWlyOiBiYXNlNjQ7IGVuY29kaW5nCiAgICBzaW5nbGU6IE1JTUU7IGJhc2U2NCBlbmNvZGluZwogCi1UaGlzIG1vZHVsZSBwcm92aWRlcyBkYXRhIGVuY29kaW5nIGFuZCBkZWNvZGluZyBhcyBzcGVjaWZpZWQgaW4gOnJmYzpgMzU0OGAuCi1UaGlzIHN0YW5kYXJkIGRlZmluZXMgdGhlIEJhc2UxNiwgQmFzZTMyLCBhbmQgQmFzZTY0IGFsZ29yaXRobXMgZm9yIGVuY29kaW5nCi1hbmQgZGVjb2RpbmcgYXJiaXRyYXJ5IGJpbmFyeSBzdHJpbmdzIGludG8gQVNDSUktb25seSBieXRlIHN0cmluZ3MgdGhhdCBjYW4gYmUKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgZW5jb2RpbmcgYmluYXJ5IGRhdGEgdG8gcHJpbnRhYmxlCitBU0NJSSBjaGFyYWN0ZXJzIGFuZCBkZWNvZGluZyBzdWNoIGVuY29kaW5ncyBiYWNrIHRvIGJpbmFyeSBkYXRhLgorSXQgcHJvdmlkZXMgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGZ1bmN0aW9ucyBmb3IgdGhlIGVuY29kaW5ncyBzcGVjaWZpZWQgaW4KKzpyZmM6YDM1NDhgLCB3aGljaCBkZWZpbmVzIHRoZSBCYXNlMTYsIEJhc2UzMiwgYW5kIEJhc2U2NCBhbGdvcml0aG1zLAorYW5kIGZvciB0aGUgZGUtZmFjdG8gc3RhbmRhcmQgQXNjaWk4NSBhbmQgQmFzZTg1IGVuY29kaW5ncy4KKworVGhlIDpyZmM6YDM1NDhgIGVuY29kaW5ncyBhcmUgc3VpdGFibGUgZm9yIGVuY29kaW5nIGJpbmFyeSBkYXRhIHNvIHRoYXQgaXQgY2FuCiBzYWZlbHkgc2VudCBieSBlbWFpbCwgdXNlZCBhcyBwYXJ0cyBvZiBVUkxzLCBvciBpbmNsdWRlZCBhcyBwYXJ0IG9mIGFuIEhUVFAKIFBPU1QgcmVxdWVzdC4gIFRoZSBlbmNvZGluZyBhbGdvcml0aG0gaXMgbm90IHRoZSBzYW1lIGFzIHRoZQogOnByb2dyYW06YHV1ZW5jb2RlYCBwcm9ncmFtLgogCi1UaGVyZSBhcmUgdHdvIGludGVyZmFjZXMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuICBUaGUgbW9kZXJuIGludGVyZmFjZQotc3VwcG9ydHMgZW5jb2RpbmcgYW5kIGRlY29kaW5nIEFTQ0lJIGJ5dGUgc3RyaW5nIG9iamVjdHMgdXNpbmcgYWxsIHRocmVlCi1hbHBoYWJldHMuIEFkZGl0aW9uYWxseSwgdGhlIGRlY29kaW5nIGZ1bmN0aW9ucyBvZiB0aGUgbW9kZXJuIGludGVyZmFjZSBhbHNvCi1hY2NlcHQgVW5pY29kZSBzdHJpbmdzIGNvbnRhaW5pbmcgb25seSBBU0NJSSBjaGFyYWN0ZXJzLiBUaGUgbGVnYWN5IGludGVyZmFjZQotcHJvdmlkZXMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyB0byBhbmQgZnJvbSBmaWxlLWxpa2Ugb2JqZWN0cyBhcyB3ZWxsIGFzCi1ieXRlIHN0cmluZ3MsIGJ1dCBvbmx5IHVzaW5nIHRoZSBCYXNlNjQgc3RhbmRhcmQgYWxwaGFiZXQuCitUaGVyZSBhcmUgdHdvIDpyZmM6YDM1NDhgIGludGVyZmFjZXMgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGUuICBUaGUgbW9kZXJuCitpbnRlcmZhY2Ugc3VwcG9ydHMgZW5jb2RpbmcgYW5kIGRlY29kaW5nIEFTQ0lJIGJ5dGUgc3RyaW5nIG9iamVjdHMgdXNpbmcgYWxsCit0aHJlZSA6cmZjOmAzNTQ4YCBkZWZpbmVkIGFscGhhYmV0cyAobm9ybWFsLCBVUkwtc2FmZSwgYW5kIGZpbGVzeXN0ZW0tc2FmZSkuCitBZGRpdGlvbmFsbHksIHRoZSBkZWNvZGluZyBmdW5jdGlvbnMgb2YgdGhlIG1vZGVybiBpbnRlcmZhY2UgYWxzbyBhY2NlcHQKK1VuaWNvZGUgc3RyaW5ncyBjb250YWluaW5nIG9ubHkgQVNDSUkgY2hhcmFjdGVycy4gVGhlIGxlZ2FjeSBpbnRlcmZhY2UgcHJvdmlkZXMKK2ZvciBlbmNvZGluZyBhbmQgZGVjb2RpbmcgdG8gYW5kIGZyb20gZmlsZS1saWtlIG9iamVjdHMgYXMgd2VsbCBhcyBieXRlCitzdHJpbmdzLCBidXQgb25seSB1c2luZyB0aGUgQmFzZTY0IHN0YW5kYXJkIGFscGhhYmV0LgogCiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgQVNDSUktb25seSBVbmljb2RlIHN0cmluZ3MgYXJlIG5vdyBhY2NlcHRlZCBieSB0aGUgZGVjb2RpbmcgZnVuY3Rpb25zIG9mCiAgICB0aGUgbW9kZXJuIGludGVyZmFjZS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXCBzIGFyZSBub3cgYWNjZXB0ZWQgYnkgYWxsCisgICBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoaXMgbW9kdWxlLiAgQXNjaWk4NS9CYXNlODUgc3VwcG9ydCBhZGRlZC4KKwogVGhlIG1vZGVybiBpbnRlcmZhY2UgcHJvdmlkZXM6CiAKIC4uIGZ1bmN0aW9uOjogYjY0ZW5jb2RlKHMsIGFsdGNoYXJzPU5vbmUpCkBAIC0xMjgsNiArMTM4LDc2IEBACiAgICBzdHJpbmcuCiAKIAorLi4gZnVuY3Rpb246OiBhODVlbmNvZGUocywgKiwgZm9sZHNwYWNlcz1GYWxzZSwgd3JhcGNvbD0wLCBwYWQ9RmFsc2UsIGFkb2JlPUZhbHNlKQorCisgICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBBc2NpaTg1LgorCisgICAqcyogaXMgdGhlIHN0cmluZyB0byBlbmNvZGUuIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAqZm9sZHNwYWNlcyogaXMgYW4gb3B0aW9uYWwgZmxhZyB0aGF0IHVzZXMgdGhlIHNwZWNpYWwgc2hvcnQgc2VxdWVuY2UgJ3knCisgICBpbnN0ZWFkIG9mIDQgY29uc2VjdXRpdmUgc3BhY2VzIChBU0NJSSAweDIwKSBhcyBzdXBwb3J0ZWQgYnkgJ2J0b2EnLiBUaGlzCisgICBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQXNjaWk4NSBlbmNvZGluZy4KKworICAgKndyYXBjb2wqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIG91dHB1dCBzaG91bGQgaGF2ZSBuZXdsaW5lIChgYCdcbidgYCkKKyAgIGNoYXJhY3RlcnMgYWRkZWQgdG8gaXQuIElmIHRoaXMgaXMgbm9uLXplcm8sIGVhY2ggb3V0cHV0IGxpbmUgd2lsbCBiZQorICAgYXQgbW9zdCB0aGlzIG1hbnkgY2hhcmFjdGVycyBsb25nLgorCisgICAqcGFkKiBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzdHJpbmcgaXMgcGFkZGVkIHRvIGEgbXVsdGlwbGUgb2YgNAorICAgYmVmb3JlIGVuY29kaW5nLiBOb3RlIHRoYXQgdGhlIGBgYnRvYWBgIGltcGxlbWVudGF0aW9uIGFsd2F5cyBwYWRzLgorCisgICAqYWRvYmUqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGVuY29kZWQgYnl0ZSBzZXF1ZW5jZSBpcyBmcmFtZWQgd2l0aCBgYDx+YGAKKyAgIGFuZCBgYH4+YGAsIHdoaWNoIGlzIHVzZWQgYnkgdGhlIEFkb2JlIGltcGxlbWVudGF0aW9uLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IGE4NWRlY29kZShzLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCBhZG9iZT1GYWxzZSwgaWdub3JlY2hhcnM9YicgXFx0XFxuXFxyXFx2JykKKworICAgRGVjb2RlIGFuIEFzY2lpODUgZW5jb2RlZCBieXRlIHN0cmluZy4KKworICAgKnMqIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuCisKKyAgICpmb2xkc3BhY2VzKiBpcyBhIGZsYWcgdGhhdCBzcGVjaWZpZXMgd2hldGhlciB0aGUgJ3knIHNob3J0IHNlcXVlbmNlCisgICBzaG91bGQgYmUgYWNjZXB0ZWQgYXMgc2hvcnRoYW5kIGZvciA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkuCisgICBUaGlzIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgInN0YW5kYXJkIiBBc2NpaTg1IGVuY29kaW5nLgorCisgICAqYWRvYmUqIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHNlcXVlbmNlIGlzIGluIEFkb2JlIEFzY2lpODUgZm9ybWF0CisgICAoaS5lLiBpcyBmcmFtZWQgd2l0aCA8fiBhbmQgfj4pLgorCisgICAqaWdub3JlY2hhcnMqIHNob3VsZCBiZSBhIGJ5dGUgc3RyaW5nIGNvbnRhaW5pbmcgY2hhcmFjdGVycyB0byBpZ25vcmUKKyAgIGZyb20gdGhlIGlucHV0LiBUaGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gd2hpdGVzcGFjZSBjaGFyYWN0ZXJzLCBhbmQgYnkKKyAgIGRlZmF1bHQgY29udGFpbnMgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiBBU0NJSS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBiODVlbmNvZGUocywgcGFkPUZhbHNlKQorCisgICBFbmNvZGUgYSBieXRlIHN0cmluZyB1c2luZyBiYXNlODUsIGFzIHVzZWQgaW4gZS5nLiBnaXQtc3R5bGUgYmluYXJ5CisgICBkaWZmcy4KKworICAgSWYgKnBhZCogaXMgdHJ1ZSwgdGhlIGlucHV0IGlzIHBhZGRlZCB3aXRoICJcXDAiIHNvIGl0cyBsZW5ndGggaXMgYQorICAgbXVsdGlwbGUgb2YgNCBjaGFyYWN0ZXJzIGJlZm9yZSBlbmNvZGluZy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBiODVkZWNvZGUoYikKKworICAgRGVjb2RlIGJhc2U4NS1lbmNvZGVkIGJ5dGUgc3RyaW5nLiAgUGFkZGluZyBpcyBpbXBsaWNpdGx5IHJlbW92ZWQsIGlmCisgICBuZWNlc3NhcnkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIG5vdGU6OgorICAgQm90aCBCYXNlODUgYW5kIEFzY2lpODUgaGF2ZSBhbiBleHBhbnNpb24gZmFjdG9yIG9mIDUgdG8gNCAoNSBCYXNlODUgb3IKKyAgIEFzY2lpODUgY2hhcmFjdGVycyBjYW4gZW5jb2RlIDQgYmluYXJ5IGJ5dGVzKSwgd2hpbGUgdGhlIGJldHRlci1rbm93bgorICAgQmFzZTY0IGhhcyBhbiBleHBhbnNpb24gZmFjdG9yIG9mIDYgdG8gNC4gIFRoZXkgYXJlIHRoZXJlZm9yZSBtb3JlCisgICBlZmZpY2llbnQgd2hlbiBzcGFjZSBleHBlbnNpdmUuICBUaGV5IGRpZmZlciBieSBkZXRhaWxzIHN1Y2ggYXMgdGhlCisgICBjaGFyYWN0ZXIgbWFwIHVzZWQgZm9yIGVuY29kaW5nLgorCisKIFRoZSBsZWdhY3kgaW50ZXJmYWNlOgogCiAuLiBmdW5jdGlvbjo6IGRlY29kZShpbnB1dCwgb3V0cHV0KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmRiLnJzdCBiL0RvYy9saWJyYXJ5L2JkYi5yc3QKaW5kZXggNzIyOTA4Ny4uOGVlOTkyMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvYmRiLnJzdAorKysgYi9Eb2MvbGlicmFyeS9iZGIucnN0CkBAIC0yMzEsNyArMjMxLDcgQEAKICAgIC4uIG1ldGhvZDo6IHNldF91bnRpbChmcmFtZSkKIAogICAgICAgU3RvcCB3aGVuIHRoZSBsaW5lIHdpdGggdGhlIGxpbmUgbm8gZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcwotICAgICAgcmVhY2hlZCBvciB3aGVuIHJldHVybmluZyBmcm9tIGN1cnJlbnQgZnJhbWUKKyAgICAgIHJlYWNoZWQgb3Igd2hlbiByZXR1cm5pbmcgZnJvbSBjdXJyZW50IGZyYW1lLgogCiAgICAuLiBtZXRob2Q6OiBzZXRfdHJhY2UoW2ZyYW1lXSkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvYmluYXNjaWkucnN0IGIvRG9jL2xpYnJhcnkvYmluYXNjaWkucnN0CmluZGV4IGM5MmE4ZTEuLmRiZTUzNWQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2JpbmFzY2lpLnJzdAorKysgYi9Eb2MvbGlicmFyeS9iaW5hc2NpaS5yc3QKQEAgLTU1LDE5ICs1NSwxOCBAQAogLi4gZnVuY3Rpb246OiBiMmFfYmFzZTY0KGRhdGEpCiAKICAgIENvbnZlcnQgYmluYXJ5IGRhdGEgdG8gYSBsaW5lIG9mIEFTQ0lJIGNoYXJhY3RlcnMgaW4gYmFzZTY0IGNvZGluZy4gVGhlIHJldHVybgotICAgdmFsdWUgaXMgdGhlIGNvbnZlcnRlZCBsaW5lLCBpbmNsdWRpbmcgYSBuZXdsaW5lIGNoYXIuIFRoZSBsZW5ndGggb2YgKmRhdGEqCi0gICBzaG91bGQgYmUgYXQgbW9zdCA1NyB0byBhZGhlcmUgdG8gdGhlIGJhc2U2NCBzdGFuZGFyZC4KKyAgIHZhbHVlIGlzIHRoZSBjb252ZXJ0ZWQgbGluZSwgaW5jbHVkaW5nIGEgbmV3bGluZSBjaGFyLiAgVGhlIG5ld2xpbmUgaXMKKyAgIGFkZGVkIGJlY2F1c2UgdGhlIG9yaWdpbmFsIHVzZSBjYXNlIGZvciB0aGlzIGZ1bmN0aW9uIHdhcyB0byBmZWVkIGl0IGEKKyAgIHNlcmllcyBvZiA1NyBieXRlIGlucHV0IGxpbmVzIHRvIGdldCBvdXRwdXQgbGluZXMgdGhhdCBjb25mb3JtIHRvIHRoZQorICAgTUlNRS1iYXNlNjQgc3RhbmRhcmQuICBPdGhlcndpc2UgdGhlIG91dHB1dCBjb25mb3JtcyB0byA6cmZjOmAzNTQ4YC4KIAogCi0uLiBmdW5jdGlvbjo6IGEyYl9xcChzdHJpbmcsIGhlYWRlcj1GYWxzZSkKKy4uIGZ1bmN0aW9uOjogYTJiX3FwKGRhdGEsIGhlYWRlcj1GYWxzZSkKIAogICAgQ29udmVydCBhIGJsb2NrIG9mIHF1b3RlZC1wcmludGFibGUgZGF0YSBiYWNrIHRvIGJpbmFyeSBhbmQgcmV0dXJuIHRoZSBiaW5hcnkKICAgIGRhdGEuIE1vcmUgdGhhbiBvbmUgbGluZSBtYXkgYmUgcGFzc2VkIGF0IGEgdGltZS4gSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50CiAgICAqaGVhZGVyKiBpcyBwcmVzZW50IGFuZCB0cnVlLCB1bmRlcnNjb3JlcyB3aWxsIGJlIGRlY29kZWQgYXMgc3BhY2VzLgogCi0gICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgICAgQWNjZXB0IG9ubHkgYnl0ZXN0cmluZyBvciBieXRlYXJyYXkgb2JqZWN0cyBhcyBpbnB1dC4KLQogCiAuLiBmdW5jdGlvbjo6IGIyYV9xcChkYXRhLCBxdW90ZXRhYnM9RmFsc2UsIGlzdGV4dD1UcnVlLCBoZWFkZXI9RmFsc2UpCiAKQEAgLTE1Niw5ICsxNTUsNiBAQAogICAgb2YgaGV4YWRlY2ltYWwgZGlnaXRzICh3aGljaCBjYW4gYmUgdXBwZXIgb3IgbG93ZXIgY2FzZSksIG90aGVyd2lzZSBhCiAgICA6ZXhjOmBUeXBlRXJyb3JgIGlzIHJhaXNlZC4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgICAgIEFjY2VwdCBvbmx5IGJ5dGVzdHJpbmcgb3IgYnl0ZWFycmF5IG9iamVjdHMgYXMgaW5wdXQuCi0KIAogLi4gZXhjZXB0aW9uOjogRXJyb3IKIApAQCAtMTc0LDcgKzE3MCw4IEBACiAuLiBzZWVhbHNvOjoKIAogICAgTW9kdWxlIDptb2Q6YGJhc2U2NGAKLSAgICAgIFN1cHBvcnQgZm9yIGJhc2U2NCBlbmNvZGluZyB1c2VkIGluIE1JTUUgZW1haWwgbWVzc2FnZXMuCisgICAgICBTdXBwb3J0IGZvciBSRkMgY29tcGxpYW50IGJhc2U2NC1zdHlsZSBlbmNvZGluZyBpbiBiYXNlIDE2LCAzMiwgNjQsCisgICAgICBhbmQgODUuCiAKICAgIE1vZHVsZSA6bW9kOmBiaW5oZXhgCiAgICAgICBTdXBwb3J0IGZvciB0aGUgYmluaGV4IGZvcm1hdCB1c2VkIG9uIHRoZSBNYWNpbnRvc2guCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9iejIucnN0IGIvRG9jL2xpYnJhcnkvYnoyLnJzdAppbmRleCBiNzliY2NkLi40ODhjZGE1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9iejIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2J6Mi5yc3QKQEAgLTM3LDggKzM3LDggQEAKICAgIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAogICAgVGhlICptb2RlKiBhcmd1bWVudCBjYW4gYmUgYW55IG9mIGBgJ3InYGAsIGBgJ3JiJ2BgLCBgYCd3J2BgLCBgYCd3YidgYCwKLSAgIGBgJ2EnYGAsIG9yIGBgJ2FiJ2BgIGZvciBiaW5hcnkgbW9kZSwgb3IgYGAncnQnYGAsIGBgJ3d0J2BgLCBvciBgYCdhdCdgYCBmb3IKLSAgIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCisgICBgYCd4J2BgLCBgYCd4YidgYCwgYGAnYSdgYCBvciBgYCdhYidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLAorICAgYGAnd3QnYGAsIGBgJ3h0J2BgLCBvciBgYCdhdCdgYCBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBpcyBgYCdyYidgYC4KIAogICAgVGhlICpjb21wcmVzc2xldmVsKiBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMSB0byA5LCBhcyBmb3IgdGhlCiAgICA6Y2xhc3M6YEJaMkZpbGVgIGNvbnN0cnVjdG9yLgpAQCAtNTQsNiArNTQsOSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYCd4J2BgIChleGNsdXNpdmUgY3JlYXRpb24pIG1vZGUgd2FzIGFkZGVkLgorCiAKIC4uIGNsYXNzOjogQloyRmlsZShmaWxlbmFtZSwgbW9kZT0ncicsIGJ1ZmZlcmluZz1Ob25lLCBjb21wcmVzc2xldmVsPTkpCiAKQEAgLTY0LDggKzY3LDkgQEAKICAgIGJlIHVzZWQgdG8gcmVhZCBvciB3cml0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBlaXRoZXIgYGAncidgYCBmb3IgcmVhZGluZyAoZGVmYXVsdCksIGBgJ3cnYGAgZm9yCi0gICBvdmVyd3JpdGluZywgb3IgYGAnYSdgYCBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzCi0gICBgYCdyYidgYCwgYGAnd2InYGAsIGFuZCBgYCdhYidgYCByZXNwZWN0aXZlbHkuCisgICBvdmVyd3JpdGluZywgYGAneCdgYCBmb3IgZXhjbHVzaXZlIGNyZWF0aW9uLCBvciBgYCdhJ2BgIGZvciBhcHBlbmRpbmcuIFRoZXNlCisgICBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzIGBgJ3JiJ2BgLCBgYCd3YidgYCwgYGAneGInYGAgYW5kIGBgJ2FiJ2BgCisgICByZXNwZWN0aXZlbHkuCiAKICAgIElmICpmaWxlbmFtZSogaXMgYSBmaWxlIG9iamVjdCAocmF0aGVyIHRoYW4gYW4gYWN0dWFsIGZpbGUgbmFtZSksIGEgbW9kZSBvZgogICAgYGAndydgYCBkb2VzIG5vdCB0cnVuY2F0ZSB0aGUgZmlsZSwgYW5kIGlzIGluc3RlYWQgZXF1aXZhbGVudCB0byBgYCdhJ2BgLgpAQCAtMTEzLDYgKzExNyw5IEBACiAgICAgICBUaGUgYGAnYSdgYCAoYXBwZW5kKSBtb2RlIHdhcyBhZGRlZCwgYWxvbmcgd2l0aCBzdXBwb3J0IGZvciByZWFkaW5nCiAgICAgICBtdWx0aS1zdHJlYW0gZmlsZXMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGAneCdgYCAoZXhjbHVzaXZlIGNyZWF0aW9uKSBtb2RlIHdhcyBhZGRlZC4KKwogCiBJbmNyZW1lbnRhbCAoZGUpY29tcHJlc3Npb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY2dpLnJzdCBiL0RvYy9saWJyYXJ5L2NnaS5yc3QKaW5kZXggYzRlN2M2MC4uNzRhYmVkNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY2dpLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jZ2kucnN0CkBAIC0xNDIsOSArMTQyLDExIEBACiBtZXRob2QgcmVhZHMgdGhlIGVudGlyZSBmaWxlIGluIG1lbW9yeSBhcyBieXRlcy4gIFRoaXMgbWF5IG5vdCBiZSB3aGF0IHlvdQogd2FudC4gIFlvdSBjYW4gdGVzdCBmb3IgYW4gdXBsb2FkZWQgZmlsZSBieSB0ZXN0aW5nIGVpdGhlciB0aGUKIDphdHRyOmB+RmllbGRTdG9yYWdlLmZpbGVuYW1lYCBhdHRyaWJ1dGUgb3IgdGhlIDphdHRyOmB+RmllbGRTdG9yYWdlLmZpbGVgCi1hdHRyaWJ1dGUuICBZb3UgY2FuIHRoZW4gcmVhZCB0aGUgZGF0YSBhdCBsZWlzdXJlIGZyb20gdGhlIDphdHRyOmAhZmlsZWAKLWF0dHJpYnV0ZSAodGhlIDpmdW5jOmB+aW8uUmF3SU9CYXNlLnJlYWRgIGFuZCA6ZnVuYzpgfmlvLklPQmFzZS5yZWFkbGluZWAKLW1ldGhvZHMgd2lsbCByZXR1cm4gYnl0ZXMpOjoKK2F0dHJpYnV0ZS4gIFlvdSBjYW4gdGhlbiByZWFkIHRoZSBkYXRhIGZyb20gdGhlIDphdHRyOmAhZmlsZWAKK2F0dHJpYnV0ZSBiZWZvcmUgaXQgaXMgYXV0b21hdGljYWxseSBjbG9zZWQgYXMgcGFydCBvZiB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIG9mCit0aGUgOmNsYXNzOmBGaWVsZFN0b3JhZ2VgIGluc3RhbmNlCisodGhlIDpmdW5jOmB+aW8uUmF3SU9CYXNlLnJlYWRgIGFuZCA6ZnVuYzpgfmlvLklPQmFzZS5yZWFkbGluZWAgbWV0aG9kcyB3aWxsCityZXR1cm4gYnl0ZXMpOjoKIAogICAgZmlsZWl0ZW0gPSBmb3JtWyJ1c2VyZmlsZSJdCiAgICBpZiBmaWxlaXRlbS5maWxlOgpAQCAtMTc2LDYgKzE3OCwxMSBAQAogQSBmb3JtIHN1Ym1pdHRlZCB2aWEgUE9TVCB0aGF0IGFsc28gaGFzIGEgcXVlcnkgc3RyaW5nIHdpbGwgY29udGFpbiBib3RoCiA6Y2xhc3M6YEZpZWxkU3RvcmFnZWAgYW5kIDpjbGFzczpgTWluaUZpZWxkU3RvcmFnZWAgaXRlbXMuCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgOmF0dHI6YH5GaWVsZFN0b3JhZ2UuZmlsZWAgYXR0cmlidXRlIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHVwb24gdGhlCisgICBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgdGhlIGNyZWF0aW5nIDpjbGFzczpgRmllbGRTdG9yYWdlYCBpbnN0YW5jZS4KKworCiBIaWdoZXIgTGV2ZWwgSW50ZXJmYWNlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTI3OCw3ICsyODUsNyBAQAogCiAuLiBmdW5jdGlvbjo6IHBhcnNlX3FzbChxcywga2VlcF9ibGFua192YWx1ZXM9RmFsc2UsIHN0cmljdF9wYXJzaW5nPUZhbHNlKQogCi0gICBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gdGhpcyBtb2R1bGUuIFVzZSA6ZnVuYzpgdXJsbGliLnBhcnNlLnBhcnNlX3FzYAorICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGluIHRoaXMgbW9kdWxlLiBVc2UgOmZ1bmM6YHVybGxpYi5wYXJzZS5wYXJzZV9xc2xgCiAgICBpbnN0ZWFkLiBJdCBpcyBtYWludGFpbmVkIGhlcmUgb25seSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIAogLi4gZnVuY3Rpb246OiBwYXJzZV9tdWx0aXBhcnQoZnAsIHBkaWN0KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY2h1bmsucnN0IGIvRG9jL2xpYnJhcnkvY2h1bmsucnN0CmluZGV4IDUwYjY5NzkuLmE5MGU5ZjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NodW5rLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jaHVuay5yc3QKQEAgLTQ3LDcgKzQ3LDcgQEAKIHRoZSA6Y2xhc3M6YENodW5rYCBjbGFzcyBkZWZpbmVkIGhlcmUgaXMgdG8gaW5zdGFudGlhdGUgYW4gaW5zdGFuY2UgYXQgdGhlIHN0YXJ0CiBvZiBlYWNoIGNodW5rIGFuZCByZWFkIGZyb20gdGhlIGluc3RhbmNlIHVudGlsIGl0IHJlYWNoZXMgdGhlIGVuZCwgYWZ0ZXIgd2hpY2ggYQogbmV3IGluc3RhbmNlIGNhbiBiZSBpbnN0YW50aWF0ZWQuIEF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIGNyZWF0aW5nIGEgbmV3Ci1pbnN0YW5jZSB3aWxsIGZhaWwgd2l0aCBhIDpleGM6YEVPRkVycm9yYCBleGNlcHRpb24uCitpbnN0YW5jZSB3aWxsIGZhaWwgd2l0aCBhbiA6ZXhjOmBFT0ZFcnJvcmAgZXhjZXB0aW9uLgogCiAKIC4uIGNsYXNzOjogQ2h1bmsoZmlsZSwgYWxpZ249VHJ1ZSwgYmlnZW5kaWFuPVRydWUsIGluY2xoZWFkZXI9RmFsc2UpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jbWF0aC5yc3QgYi9Eb2MvbGlicmFyeS9jbWF0aC5yc3QKaW5kZXggZDc3NzhkZi4uYTk4MWQ5NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY21hdGgucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NtYXRoLnJzdApAQCAtMTQ5LDEzICsxNDksMTMgQEAKIAogLi4gZnVuY3Rpb246OiBhY29zaCh4KQogCi0gICBSZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjIGNvc2luZSBvZiAqeCouIFRoZXJlIGlzIG9uZSBicmFuY2ggY3V0LCBleHRlbmRpbmcgbGVmdAotICAgZnJvbSAxIGFsb25nIHRoZSByZWFsIGF4aXMgdG8gLeKIniwgY29udGludW91cyBmcm9tIGFib3ZlLgorICAgUmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lIG9mICp4Ki4gVGhlcmUgaXMgb25lIGJyYW5jaCBjdXQsCisgICBleHRlbmRpbmcgbGVmdCBmcm9tIDEgYWxvbmcgdGhlIHJlYWwgYXhpcyB0byAt4oieLCBjb250aW51b3VzIGZyb20gYWJvdmUuCiAKIAogLi4gZnVuY3Rpb246OiBhc2luaCh4KQogCi0gICBSZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjIHNpbmUgb2YgKngqLiBUaGVyZSBhcmUgdHdvIGJyYW5jaCBjdXRzOgorICAgUmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBvZiAqeCouIFRoZXJlIGFyZSB0d28gYnJhbmNoIGN1dHM6CiAgICBPbmUgZXh0ZW5kcyBmcm9tIGBgMWpgYCBhbG9uZyB0aGUgaW1hZ2luYXJ5IGF4aXMgdG8gYGDiiJ5qYGAsCiAgICBjb250aW51b3VzIGZyb20gdGhlIHJpZ2h0LiAgVGhlIG90aGVyIGV4dGVuZHMgZnJvbSBgYC0xamBgIGFsb25nCiAgICB0aGUgaW1hZ2luYXJ5IGF4aXMgdG8gYGAt4oieamBgLCBjb250aW51b3VzIGZyb20gdGhlIGxlZnQuCkBAIC0xNjMsNyArMTYzLDcgQEAKIAogLi4gZnVuY3Rpb246OiBhdGFuaCh4KQogCi0gICBSZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjIHRhbmdlbnQgb2YgKngqLiBUaGVyZSBhcmUgdHdvIGJyYW5jaCBjdXRzOiBPbmUKKyAgIFJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgKngqLiBUaGVyZSBhcmUgdHdvIGJyYW5jaCBjdXRzOiBPbmUKICAgIGV4dGVuZHMgZnJvbSBgYDFgYCBhbG9uZyB0aGUgcmVhbCBheGlzIHRvIGBg4oieYGAsIGNvbnRpbnVvdXMgZnJvbSBiZWxvdy4gVGhlCiAgICBvdGhlciBleHRlbmRzIGZyb20gYGAtMWBgIGFsb25nIHRoZSByZWFsIGF4aXMgdG8gYGAt4oieYGAsIGNvbnRpbnVvdXMgZnJvbQogICAgYWJvdmUuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jbWQucnN0IGIvRG9jL2xpYnJhcnkvY21kLnJzdAppbmRleCA5NzIyOTI4Li4xYWIyZDc0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jbWQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NtZC5yc3QKQEAgLTE0OCw4ICsxNDgsOCBAQAogICAgSG9vayBtZXRob2QgZXhlY3V0ZWQgb25jZSB3aGVuIDptZXRoOmBjbWRsb29wYCBpcyBhYm91dCB0byByZXR1cm4uIFRoaXMgbWV0aG9kCiAgICBpcyBhIHN0dWIgaW4gOmNsYXNzOmBDbWRgOyBpdCBleGlzdHMgdG8gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzLgogCi1JbnN0YW5jZXMgb2YgOmNsYXNzOmBDbWRgIHN1YmNsYXNzZXMgaGF2ZSBzb21lIHB1YmxpYyBpbnN0YW5jZSB2YXJpYWJsZXM6CiAKK0luc3RhbmNlcyBvZiA6Y2xhc3M6YENtZGAgc3ViY2xhc3NlcyBoYXZlIHNvbWUgcHVibGljIGluc3RhbmNlIHZhcmlhYmxlczoKIAogLi4gYXR0cmlidXRlOjogQ21kLnByb21wdAogCkBAIC0xNjYsNiArMTY2LDEzIEBACiAgICBUaGUgbGFzdCBub25lbXB0eSBjb21tYW5kIHByZWZpeCBzZWVuLgogCiAKKy4uIGF0dHJpYnV0ZTo6IENtZC5jbWRxdWV1ZQorCisgICBBIGxpc3Qgb2YgcXVldWVkIGlucHV0IGxpbmVzLiAgVGhlIGNtZHF1ZXVlIGxpc3QgaXMgY2hlY2tlZCBpbgorICAgOm1ldGg6YGNtZGxvb3BgIHdoZW4gbmV3IGlucHV0IGlzIG5lZWRlZDsgaWYgaXQgaXMgbm9uZW1wdHksIGl0cyBlbGVtZW50cworICAgd2lsbCBiZSBwcm9jZXNzZWQgaW4gb3JkZXIsIGFzIGlmIGVudGVyZWQgYXQgdGhlIHByb21wdC4KKworCiAuLiBhdHRyaWJ1dGU6OiBDbWQuaW50cm8KIAogICAgQSBzdHJpbmcgdG8gaXNzdWUgYXMgYW4gaW50cm8gb3IgYmFubmVyLiAgTWF5IGJlIG92ZXJyaWRkZW4gYnkgZ2l2aW5nIHRoZQpAQCAtMjUyLDcgKzI1OSw3IEBACiAgICAgICAgICAgICAnTW92ZSB0dXJ0bGUgdG8gYW4gYWJzb2x1dGUgcG9zaXRpb24gd2l0aCBjaGFuZ2luZyBvcmllbnRhdGlvbi4gIEdPVE8gMTAwIDIwMCcKICAgICAgICAgICAgIGdvdG8oKnBhcnNlKGFyZykpCiAgICAgICAgIGRlZiBkb19ob21lKHNlbGYsIGFyZyk6Ci0gICAgICAgICAgICAnUmV0dXJuIHR1cnRsZSB0byB0aGUgaG9tZSBwb3N0aW9uOiAgSE9NRScKKyAgICAgICAgICAgICdSZXR1cm4gdHVydGxlIHRvIHRoZSBob21lIHBvc2l0aW9uOiAgSE9NRScKICAgICAgICAgICAgIGhvbWUoKQogICAgICAgICBkZWYgZG9fY2lyY2xlKHNlbGYsIGFyZyk6CiAgICAgICAgICAgICAnRHJhdyBjaXJjbGUgd2l0aCBnaXZlbiByYWRpdXMgYW4gb3B0aW9ucyBleHRlbnQgYW5kIHN0ZXBzOiAgQ0lSQ0xFIDUwJwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29kZS5yc3QgYi9Eb2MvbGlicmFyeS9jb2RlLnJzdAppbmRleCBlODY5MDA0Li41YjVkN2NjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb2RlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2RlLnJzdApAQCAtMTMyLDEyICsxMzIsMTUgQEAKIAogLi4gbWV0aG9kOjogSW50ZXJhY3RpdmVDb25zb2xlLmludGVyYWN0KGJhbm5lcj1Ob25lKQogCi0gICBDbG9zZWx5IGVtdWxhdGUgdGhlIGludGVyYWN0aXZlIFB5dGhvbiBjb25zb2xlLiBUaGUgb3B0aW9uYWwgYmFubmVyIGFyZ3VtZW50CisgICBDbG9zZWx5IGVtdWxhdGUgdGhlIGludGVyYWN0aXZlIFB5dGhvbiBjb25zb2xlLiBUaGUgb3B0aW9uYWwgKmJhbm5lciogYXJndW1lbnQKICAgIHNwZWNpZnkgdGhlIGJhbm5lciB0byBwcmludCBiZWZvcmUgdGhlIGZpcnN0IGludGVyYWN0aW9uOyBieSBkZWZhdWx0IGl0IHByaW50cyBhCiAgICBiYW5uZXIgc2ltaWxhciB0byB0aGUgb25lIHByaW50ZWQgYnkgdGhlIHN0YW5kYXJkIFB5dGhvbiBpbnRlcnByZXRlciwgZm9sbG93ZWQKICAgIGJ5IHRoZSBjbGFzcyBuYW1lIG9mIHRoZSBjb25zb2xlIG9iamVjdCBpbiBwYXJlbnRoZXNlcyAoc28gYXMgbm90IHRvIGNvbmZ1c2UKICAgIHRoaXMgd2l0aCB0aGUgcmVhbCBpbnRlcnByZXRlciAtLSBzaW5jZSBpdCdzIHNvIGNsb3NlISkuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUbyBzdXBwcmVzcyBwcmludGluZyBhbnkgYmFubmVyLCBwYXNzIGFuIGVtcHR5IHN0cmluZy4KKwogCiAuLiBtZXRob2Q6OiBJbnRlcmFjdGl2ZUNvbnNvbGUucHVzaChsaW5lKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2RlY3MucnN0IGIvRG9jL2xpYnJhcnkvY29kZWNzLnJzdAppbmRleCAwMDlhZTI2Li42Mjg5NjljIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb2RlY3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvZGVjcy5yc3QKQEAgLTE3LDExMCArMTcsOTIgQEAKICAgIHBhaXI6IHN0YWNrYWJsZTsgc3RyZWFtcwogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIGJhc2UgY2xhc3NlcyBmb3Igc3RhbmRhcmQgUHl0aG9uIGNvZGVjcyAoZW5jb2RlcnMgYW5kCi1kZWNvZGVycykgYW5kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaW50ZXJuYWwgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5IHdoaWNoCi1tYW5hZ2VzIHRoZSBjb2RlYyBhbmQgZXJyb3IgaGFuZGxpbmcgbG9va3VwIHByb2Nlc3MuCitkZWNvZGVycykgYW5kIHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaW50ZXJuYWwgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5LCB3aGljaAorbWFuYWdlcyB0aGUgY29kZWMgYW5kIGVycm9yIGhhbmRsaW5nIGxvb2t1cCBwcm9jZXNzLiBNb3N0IHN0YW5kYXJkIGNvZGVjcworYXJlIDp0ZXJtOmB0ZXh0IGVuY29kaW5ncyA8dGV4dCBlbmNvZGluZz5gLCB3aGljaCBlbmNvZGUgdGV4dCB0byBieXRlcywKK2J1dCB0aGVyZSBhcmUgYWxzbyBjb2RlY3MgcHJvdmlkZWQgdGhhdCBlbmNvZGUgdGV4dCB0byB0ZXh0LCBhbmQgYnl0ZXMgdG8KK2J5dGVzLiBDdXN0b20gY29kZWNzIG1heSBlbmNvZGUgYW5kIGRlY29kZSBiZXR3ZWVuIGFyYml0cmFyeSB0eXBlcywgYnV0IHNvbWUKK21vZHVsZSBmZWF0dXJlcyBhcmUgcmVzdHJpY3RlZCB0byB1c2Ugc3BlY2lmaWNhbGx5IHdpdGgKKzp0ZXJtOmB0ZXh0IGVuY29kaW5ncyA8dGV4dCBlbmNvZGluZz5gLCBvciB3aXRoIGNvZGVjcyB0aGF0IGVuY29kZSB0bworOmNsYXNzOmBieXRlc2AuCiAKLUl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CitUaGUgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyB3aXRoCithbnkgY29kZWM6CiAKLS4uIGZ1bmN0aW9uOjogZW5jb2RlKG9iaiwgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKQorLi4gZnVuY3Rpb246OiBlbmNvZGUob2JqLCBbZW5jb2RpbmdbLCBlcnJvcnNdXSkKIAotICAgRW5jb2RlcyAqb2JqKiB1c2luZyB0aGUgY29kZWMgcmVnaXN0ZXJlZCBmb3IgKmVuY29kaW5nKi4KKyAgIEVuY29kZXMgKm9iaiogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yICplbmNvZGluZyouIFRoZSBkZWZhdWx0CisgICBlbmNvZGluZyBpcyBgYHV0Zi04YGAuCiAKICAgICpFcnJvcnMqIG1heSBiZSBnaXZlbiB0byBzZXQgdGhlIGRlc2lyZWQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBUaGUKLSAgIGRlZmF1bHQgZXJyb3IgaGFuZGxlciBpcyBgYHN0cmljdGBgIG1lYW5pbmcgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UKKyAgIGRlZmF1bHQgZXJyb3IgaGFuZGxlciBpcyBgYCdzdHJpY3QnYGAgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZQogICAgOmV4YzpgVmFsdWVFcnJvcmAgKG9yIGEgbW9yZSBjb2RlYyBzcGVjaWZpYyBzdWJjbGFzcywgc3VjaCBhcwogICAgOmV4YzpgVW5pY29kZUVuY29kZUVycm9yYCkuIFJlZmVyIHRvIDpyZWY6YGNvZGVjLWJhc2UtY2xhc3Nlc2AgZm9yIG1vcmUKICAgIGluZm9ybWF0aW9uIG9uIGNvZGVjIGVycm9yIGhhbmRsaW5nLgogCi0uLiBmdW5jdGlvbjo6IGRlY29kZShvYmosIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0nc3RyaWN0JykKKy4uIGZ1bmN0aW9uOjogZGVjb2RlKG9iaiwgW2VuY29kaW5nWywgZXJyb3JzXV0pCiAKLSAgIERlY29kZXMgKm9iaiogdXNpbmcgdGhlIGNvZGVjIHJlZ2lzdGVyZWQgZm9yICplbmNvZGluZyouCisgICBEZWNvZGVzICpvYmoqIHVzaW5nIHRoZSBjb2RlYyByZWdpc3RlcmVkIGZvciAqZW5jb2RpbmcqLiBUaGUgZGVmYXVsdAorICAgZW5jb2RpbmcgaXMgYGB1dGYtOGBgLgogCiAgICAqRXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IHRoZSBkZXNpcmVkIGVycm9yIGhhbmRsaW5nIHNjaGVtZS4gVGhlCi0gICBkZWZhdWx0IGVycm9yIGhhbmRsZXIgaXMgYGBzdHJpY3RgYCBtZWFuaW5nIHRoYXQgZGVjb2RpbmcgZXJyb3JzIHJhaXNlCisgICBkZWZhdWx0IGVycm9yIGhhbmRsZXIgaXMgYGAnc3RyaWN0J2BgIG1lYW5pbmcgdGhhdCBkZWNvZGluZyBlcnJvcnMgcmFpc2UKICAgIDpleGM6YFZhbHVlRXJyb3JgIChvciBhIG1vcmUgY29kZWMgc3BlY2lmaWMgc3ViY2xhc3MsIHN1Y2ggYXMKICAgIDpleGM6YFVuaWNvZGVEZWNvZGVFcnJvcmApLiBSZWZlciB0byA6cmVmOmBjb2RlYy1iYXNlLWNsYXNzZXNgIGZvciBtb3JlCiAgICBpbmZvcm1hdGlvbiBvbiBjb2RlYyBlcnJvciBoYW5kbGluZy4KIAotLi4gZnVuY3Rpb246OiByZWdpc3RlcihzZWFyY2hfZnVuY3Rpb24pCi0KLSAgIFJlZ2lzdGVyIGEgY29kZWMgc2VhcmNoIGZ1bmN0aW9uLiBTZWFyY2ggZnVuY3Rpb25zIGFyZSBleHBlY3RlZCB0byB0YWtlIG9uZQotICAgYXJndW1lbnQsIHRoZSBlbmNvZGluZyBuYW1lIGluIGFsbCBsb3dlciBjYXNlIGxldHRlcnMsIGFuZCByZXR1cm4gYQotICAgOmNsYXNzOmBDb2RlY0luZm9gIG9iamVjdCBoYXZpbmcgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgotCi0gICAqIGBgbmFtZWBgIFRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZzsKLQotICAgKiBgYGVuY29kZWBgIFRoZSBzdGF0ZWxlc3MgZW5jb2RpbmcgZnVuY3Rpb247Ci0KLSAgICogYGBkZWNvZGVgYCBUaGUgc3RhdGVsZXNzIGRlY29kaW5nIGZ1bmN0aW9uOwotCi0gICAqIGBgaW5jcmVtZW50YWxlbmNvZGVyYGAgQW4gaW5jcmVtZW50YWwgZW5jb2RlciBjbGFzcyBvciBmYWN0b3J5IGZ1bmN0aW9uOwotCi0gICAqIGBgaW5jcmVtZW50YWxkZWNvZGVyYGAgQW4gaW5jcmVtZW50YWwgZGVjb2RlciBjbGFzcyBvciBmYWN0b3J5IGZ1bmN0aW9uOwotCi0gICAqIGBgc3RyZWFtd3JpdGVyYGAgQSBzdHJlYW0gd3JpdGVyIGNsYXNzIG9yIGZhY3RvcnkgZnVuY3Rpb247Ci0KLSAgICogYGBzdHJlYW1yZWFkZXJgYCBBIHN0cmVhbSByZWFkZXIgY2xhc3Mgb3IgZmFjdG9yeSBmdW5jdGlvbi4KLQotICAgVGhlIHZhcmlvdXMgZnVuY3Rpb25zIG9yIGNsYXNzZXMgdGFrZSB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKLQotICAgKmVuY29kZSogYW5kICpkZWNvZGUqOiBUaGVzZSBtdXN0IGJlIGZ1bmN0aW9ucyBvciBtZXRob2RzIHdoaWNoIGhhdmUgdGhlIHNhbWUKLSAgIGludGVyZmFjZSBhcyB0aGUgOm1ldGg6YH5Db2RlYy5lbmNvZGVgLzptZXRoOmB+Q29kZWMuZGVjb2RlYCBtZXRob2RzIG9mIENvZGVjCi0gICBpbnN0YW5jZXMgKHNlZSA6cmVmOmBDb2RlYyBJbnRlcmZhY2UgPGNvZGVjLW9iamVjdHM+YCkuIFRoZSBmdW5jdGlvbnMvbWV0aG9kcwotICAgYXJlIGV4cGVjdGVkIHRvIHdvcmsgaW4gYSBzdGF0ZWxlc3MgbW9kZS4KLQotICAgKmluY3JlbWVudGFsZW5jb2RlciogYW5kICppbmNyZW1lbnRhbGRlY29kZXIqOiBUaGVzZSBoYXZlIHRvIGJlIGZhY3RvcnkKLSAgIGZ1bmN0aW9ucyBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBpbnRlcmZhY2U6Ci0KLSAgICAgIGBgZmFjdG9yeShlcnJvcnM9J3N0cmljdCcpYGAKLQotICAgVGhlIGZhY3RvcnkgZnVuY3Rpb25zIG11c3QgcmV0dXJuIG9iamVjdHMgcHJvdmlkaW5nIHRoZSBpbnRlcmZhY2VzIGRlZmluZWQgYnkKLSAgIHRoZSBiYXNlIGNsYXNzZXMgOmNsYXNzOmBJbmNyZW1lbnRhbEVuY29kZXJgIGFuZCA6Y2xhc3M6YEluY3JlbWVudGFsRGVjb2RlcmAsCi0gICByZXNwZWN0aXZlbHkuIEluY3JlbWVudGFsIGNvZGVjcyBjYW4gbWFpbnRhaW4gc3RhdGUuCi0KLSAgICpzdHJlYW1yZWFkZXIqIGFuZCAqc3RyZWFtd3JpdGVyKjogVGhlc2UgaGF2ZSB0byBiZSBmYWN0b3J5IGZ1bmN0aW9ucyBwcm92aWRpbmcKLSAgIHRoZSBmb2xsb3dpbmcgaW50ZXJmYWNlOgotCi0gICAgICBgYGZhY3Rvcnkoc3RyZWFtLCBlcnJvcnM9J3N0cmljdCcpYGAKLQotICAgVGhlIGZhY3RvcnkgZnVuY3Rpb25zIG11c3QgcmV0dXJuIG9iamVjdHMgcHJvdmlkaW5nIHRoZSBpbnRlcmZhY2VzIGRlZmluZWQgYnkKLSAgIHRoZSBiYXNlIGNsYXNzZXMgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGFuZCA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAsIHJlc3BlY3RpdmVseS4KLSAgIFN0cmVhbSBjb2RlY3MgY2FuIG1haW50YWluIHN0YXRlLgotCi0gICBQb3NzaWJsZSB2YWx1ZXMgZm9yIGVycm9ycyBhcmUKLQotICAgKiBgYCdzdHJpY3QnYGA6IHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiBjYXNlIG9mIGFuIGVuY29kaW5nIGVycm9yCi0gICAqIGBgJ3JlcGxhY2UnYGA6IHJlcGxhY2UgbWFsZm9ybWVkIGRhdGEgd2l0aCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50IG1hcmtlciwKLSAgICAgc3VjaCBhcyBgYCc/J2BgIG9yIGBgJ1x1ZmZmZCdgYAotICAgKiBgYCdpZ25vcmUnYGA6IGlnbm9yZSBtYWxmb3JtZWQgZGF0YSBhbmQgY29udGludWUgd2l0aG91dCBmdXJ0aGVyIG5vdGljZQotICAgKiBgYCd4bWxjaGFycmVmcmVwbGFjZSdgYDogcmVwbGFjZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBYTUwgY2hhcmFjdGVyCi0gICAgIHJlZmVyZW5jZSAoZm9yIGVuY29kaW5nIG9ubHkpCi0gICAqIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGA6IHJlcGxhY2Ugd2l0aCBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2VzIChmb3IKLSAgICAgZW5jb2Rpbmcgb25seSkKLSAgICogYGAnc3Vycm9nYXRlZXNjYXBlJ2BgOiBvbiBkZWNvZGluZywgcmVwbGFjZSB3aXRoIGNvZGUgcG9pbnRzIGluIHRoZSBVbmljb2RlCi0gICAgIFByaXZhdGUgVXNlIEFyZWEgcmFuZ2luZyBmcm9tIFUrREM4MCB0byBVK0RDRkYuICBUaGVzZSBwcml2YXRlIGNvZGUKLSAgICAgcG9pbnRzIHdpbGwgdGhlbiBiZSB0dXJuZWQgYmFjayBpbnRvIHRoZSBzYW1lIGJ5dGVzIHdoZW4gdGhlCi0gICAgIGBgc3Vycm9nYXRlZXNjYXBlYGAgZXJyb3IgaGFuZGxlciBpcyB1c2VkIHdoZW4gZW5jb2RpbmcgdGhlIGRhdGEuCi0gICAgIChTZWUgOnBlcDpgMzgzYCBmb3IgbW9yZS4pCi0KLSAgIGFzIHdlbGwgYXMgYW55IG90aGVyIGVycm9yIGhhbmRsaW5nIG5hbWUgZGVmaW5lZCB2aWEgOmZ1bmM6YHJlZ2lzdGVyX2Vycm9yYC4KLQotICAgSW4gY2FzZSBhIHNlYXJjaCBmdW5jdGlvbiBjYW5ub3QgZmluZCBhIGdpdmVuIGVuY29kaW5nLCBpdCBzaG91bGQgcmV0dXJuCi0gICBgYE5vbmVgYC4KLQorVGhlIGZ1bGwgZGV0YWlscyBmb3IgZWFjaCBjb2RlYyBjYW4gYWxzbyBiZSBsb29rZWQgdXAgZGlyZWN0bHk6CiAKIC4uIGZ1bmN0aW9uOjogbG9va3VwKGVuY29kaW5nKQogCiAgICBMb29rcyB1cCB0aGUgY29kZWMgaW5mbyBpbiB0aGUgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5IGFuZCByZXR1cm5zIGEKLSAgIDpjbGFzczpgQ29kZWNJbmZvYCBvYmplY3QgYXMgZGVmaW5lZCBhYm92ZS4KKyAgIDpjbGFzczpgQ29kZWNJbmZvYCBvYmplY3QgYXMgZGVmaW5lZCBiZWxvdy4KIAogICAgRW5jb2RpbmdzIGFyZSBmaXJzdCBsb29rZWQgdXAgaW4gdGhlIHJlZ2lzdHJ5J3MgY2FjaGUuIElmIG5vdCBmb3VuZCwgdGhlIGxpc3Qgb2YKICAgIHJlZ2lzdGVyZWQgc2VhcmNoIGZ1bmN0aW9ucyBpcyBzY2FubmVkLiBJZiBubyA6Y2xhc3M6YENvZGVjSW5mb2Agb2JqZWN0IGlzCiAgICBmb3VuZCwgYSA6ZXhjOmBMb29rdXBFcnJvcmAgaXMgcmFpc2VkLiBPdGhlcndpc2UsIHRoZSA6Y2xhc3M6YENvZGVjSW5mb2Agb2JqZWN0CiAgICBpcyBzdG9yZWQgaW4gdGhlIGNhY2hlIGFuZCByZXR1cm5lZCB0byB0aGUgY2FsbGVyLgogCi1UbyBzaW1wbGlmeSBhY2Nlc3MgdG8gdGhlIHZhcmlvdXMgY29kZWNzLCB0aGUgbW9kdWxlIHByb3ZpZGVzIHRoZXNlIGFkZGl0aW9uYWwKLWZ1bmN0aW9ucyB3aGljaCB1c2UgOmZ1bmM6YGxvb2t1cGAgZm9yIHRoZSBjb2RlYyBsb29rdXA6CisuLiBjbGFzczo6IENvZGVjSW5mbyhlbmNvZGUsIGRlY29kZSwgc3RyZWFtcmVhZGVyPU5vbmUsIHN0cmVhbXdyaXRlcj1Ob25lLCBpbmNyZW1lbnRhbGVuY29kZXI9Tm9uZSwgaW5jcmVtZW50YWxkZWNvZGVyPU5vbmUsIG5hbWU9Tm9uZSkKKworICAgQ29kZWMgZGV0YWlscyB3aGVuIGxvb2tpbmcgdXAgdGhlIGNvZGVjIHJlZ2lzdHJ5LiBUaGUgY29uc3RydWN0b3IKKyAgIGFyZ3VtZW50cyBhcmUgc3RvcmVkIGluIGF0dHJpYnV0ZXMgb2YgdGhlIHNhbWUgbmFtZToKKworCisgICAuLiBhdHRyaWJ1dGU6OiBuYW1lCisKKyAgICAgIFRoZSBuYW1lIG9mIHRoZSBlbmNvZGluZy4KKworCisgICAuLiBhdHRyaWJ1dGU6OiBlbmNvZGUKKyAgICAgICAgICAgICAgICAgIGRlY29kZQorCisgICAgICBUaGUgc3RhdGVsZXNzIGVuY29kaW5nIGFuZCBkZWNvZGluZyBmdW5jdGlvbnMuIFRoZXNlIG11c3QgYmUKKyAgICAgIGZ1bmN0aW9ucyBvciBtZXRob2RzIHdoaWNoIGhhdmUgdGhlIHNhbWUgaW50ZXJmYWNlIGFzCisgICAgICB0aGUgOm1ldGg6YH5Db2RlYy5lbmNvZGVgIGFuZCA6bWV0aDpgfkNvZGVjLmRlY29kZWAgbWV0aG9kcyBvZiBDb2RlYworICAgICAgaW5zdGFuY2VzIChzZWUgOnJlZjpgQ29kZWMgSW50ZXJmYWNlIDxjb2RlYy1vYmplY3RzPmApLgorICAgICAgVGhlIGZ1bmN0aW9ucyBvciBtZXRob2RzIGFyZSBleHBlY3RlZCB0byB3b3JrIGluIGEgc3RhdGVsZXNzIG1vZGUuCisKKworICAgLi4gYXR0cmlidXRlOjogaW5jcmVtZW50YWxlbmNvZGVyCisgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXIKKworICAgICAgSW5jcmVtZW50YWwgZW5jb2RlciBhbmQgZGVjb2RlciBjbGFzc2VzIG9yIGZhY3RvcnkgZnVuY3Rpb25zLgorICAgICAgVGhlc2UgaGF2ZSB0byBwcm92aWRlIHRoZSBpbnRlcmZhY2UgZGVmaW5lZCBieSB0aGUgYmFzZSBjbGFzc2VzCisgICAgICA6Y2xhc3M6YEluY3JlbWVudGFsRW5jb2RlcmAgYW5kIDpjbGFzczpgSW5jcmVtZW50YWxEZWNvZGVyYCwKKyAgICAgIHJlc3BlY3RpdmVseS4gSW5jcmVtZW50YWwgY29kZWNzIGNhbiBtYWludGFpbiBzdGF0ZS4KKworCisgICAuLiBhdHRyaWJ1dGU6OiBzdHJlYW13cml0ZXIKKyAgICAgICAgICAgICAgICAgIHN0cmVhbXJlYWRlcgorCisgICAgICBTdHJlYW0gd3JpdGVyIGFuZCByZWFkZXIgY2xhc3NlcyBvciBmYWN0b3J5IGZ1bmN0aW9ucy4gVGhlc2UgaGF2ZSB0bworICAgICAgcHJvdmlkZSB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3NlcworICAgICAgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIGFuZCA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAsIHJlc3BlY3RpdmVseS4KKyAgICAgIFN0cmVhbSBjb2RlY3MgY2FuIG1haW50YWluIHN0YXRlLgorCitUbyBzaW1wbGlmeSBhY2Nlc3MgdG8gdGhlIHZhcmlvdXMgY29kZWMgY29tcG9uZW50cywgdGhlIG1vZHVsZSBwcm92aWRlcwordGhlc2UgYWRkaXRpb25hbCBmdW5jdGlvbnMgd2hpY2ggdXNlIDpmdW5jOmBsb29rdXBgIGZvciB0aGUgY29kZWMgbG9va3VwOgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0ZW5jb2RlcihlbmNvZGluZykKQEAgLTE3MCw5MCArMTUyLDQzIEBACiAKICAgIFJhaXNlcyBhIDpleGM6YExvb2t1cEVycm9yYCBpbiBjYXNlIHRoZSBlbmNvZGluZyBjYW5ub3QgYmUgZm91bmQuCiAKK0N1c3RvbSBjb2RlY3MgYXJlIG1hZGUgYXZhaWxhYmxlIGJ5IHJlZ2lzdGVyaW5nIGEgc3VpdGFibGUgY29kZWMgc2VhcmNoCitmdW5jdGlvbjoKIAotLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9lcnJvcihuYW1lLCBlcnJvcl9oYW5kbGVyKQorLi4gZnVuY3Rpb246OiByZWdpc3RlcihzZWFyY2hfZnVuY3Rpb24pCiAKLSAgIFJlZ2lzdGVyIHRoZSBlcnJvciBoYW5kbGluZyBmdW5jdGlvbiAqZXJyb3JfaGFuZGxlciogdW5kZXIgdGhlIG5hbWUgKm5hbWUqLgotICAgKmVycm9yX2hhbmRsZXIqIHdpbGwgYmUgY2FsbGVkIGR1cmluZyBlbmNvZGluZyBhbmQgZGVjb2RpbmcgaW4gY2FzZSBvZiBhbiBlcnJvciwKLSAgIHdoZW4gKm5hbWUqIGlzIHNwZWNpZmllZCBhcyB0aGUgZXJyb3JzIHBhcmFtZXRlci4KLQotICAgRm9yIGVuY29kaW5nICplcnJvcl9oYW5kbGVyKiB3aWxsIGJlIGNhbGxlZCB3aXRoIGEgOmV4YzpgVW5pY29kZUVuY29kZUVycm9yYAotICAgaW5zdGFuY2UsIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgZXJyb3IuIFRoZQotICAgZXJyb3IgaGFuZGxlciBtdXN0IGVpdGhlciByYWlzZSB0aGlzIG9yIGEgZGlmZmVyZW50IGV4Y2VwdGlvbiBvciByZXR1cm4gYQotICAgdHVwbGUgd2l0aCBhIHJlcGxhY2VtZW50IGZvciB0aGUgdW5lbmNvZGFibGUgcGFydCBvZiB0aGUgaW5wdXQgYW5kIGEgcG9zaXRpb24KLSAgIHdoZXJlIGVuY29kaW5nIHNob3VsZCBjb250aW51ZS4gVGhlIHJlcGxhY2VtZW50IG1heSBiZSBlaXRoZXIgOmNsYXNzOmBzdHJgIG9yCi0gICA6Y2xhc3M6YGJ5dGVzYC4gIElmIHRoZSByZXBsYWNlbWVudCBpcyBieXRlcywgdGhlIGVuY29kZXIgd2lsbCBzaW1wbHkgY29weQotICAgdGhlbSBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLiBJZiB0aGUgcmVwbGFjZW1lbnQgaXMgYSBzdHJpbmcsIHRoZSBlbmNvZGVyIHdpbGwKLSAgIGVuY29kZSB0aGUgcmVwbGFjZW1lbnQuICBFbmNvZGluZyBjb250aW51ZXMgb24gb3JpZ2luYWwgaW5wdXQgYXQgdGhlCi0gICBzcGVjaWZpZWQgcG9zaXRpb24uIE5lZ2F0aXZlIHBvc2l0aW9uIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgYmVpbmcKLSAgIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGlucHV0IHN0cmluZy4gSWYgdGhlIHJlc3VsdGluZyBwb3NpdGlvbiBpcyBvdXQgb2YKLSAgIGJvdW5kIGFuIDpleGM6YEluZGV4RXJyb3JgIHdpbGwgYmUgcmFpc2VkLgotCi0gICBEZWNvZGluZyBhbmQgdHJhbnNsYXRpbmcgd29ya3Mgc2ltaWxhciwgZXhjZXB0IDpleGM6YFVuaWNvZGVEZWNvZGVFcnJvcmAgb3IKLSAgIDpleGM6YFVuaWNvZGVUcmFuc2xhdGVFcnJvcmAgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGhhbmRsZXIgYW5kIHRoYXQgdGhlCi0gICByZXBsYWNlbWVudCBmcm9tIHRoZSBlcnJvciBoYW5kbGVyIHdpbGwgYmUgcHV0IGludG8gdGhlIG91dHB1dCBkaXJlY3RseS4KLQotCi0uLiBmdW5jdGlvbjo6IGxvb2t1cF9lcnJvcihuYW1lKQotCi0gICBSZXR1cm4gdGhlIGVycm9yIGhhbmRsZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHVuZGVyIHRoZSBuYW1lICpuYW1lKi4KLQotICAgUmFpc2VzIGEgOmV4YzpgTG9va3VwRXJyb3JgIGluIGNhc2UgdGhlIGhhbmRsZXIgY2Fubm90IGJlIGZvdW5kLgotCi0KLS4uIGZ1bmN0aW9uOjogc3RyaWN0X2Vycm9ycyhleGNlcHRpb24pCi0KLSAgIEltcGxlbWVudHMgdGhlIGBgc3RyaWN0YGAgZXJyb3IgaGFuZGxpbmc6IGVhY2ggZW5jb2Rpbmcgb3IgZGVjb2RpbmcgZXJyb3IKLSAgIHJhaXNlcyBhIDpleGM6YFVuaWNvZGVFcnJvcmAuCi0KLQotLi4gZnVuY3Rpb246OiByZXBsYWNlX2Vycm9ycyhleGNlcHRpb24pCi0KLSAgIEltcGxlbWVudHMgdGhlIGBgcmVwbGFjZWBgIGVycm9yIGhhbmRsaW5nOiBtYWxmb3JtZWQgZGF0YSBpcyByZXBsYWNlZCB3aXRoIGEKLSAgIHN1aXRhYmxlIHJlcGxhY2VtZW50IGNoYXJhY3RlciBzdWNoIGFzIGBgJz8nYGAgaW4gYnl0ZXN0cmluZ3MgYW5kCi0gICBgYCdcdWZmZmQnYGAgaW4gVW5pY29kZSBzdHJpbmdzLgotCi0KLS4uIGZ1bmN0aW9uOjogaWdub3JlX2Vycm9ycyhleGNlcHRpb24pCi0KLSAgIEltcGxlbWVudHMgdGhlIGBgaWdub3JlYGAgZXJyb3IgaGFuZGxpbmc6IG1hbGZvcm1lZCBkYXRhIGlzIGlnbm9yZWQgYW5kCi0gICBlbmNvZGluZyBvciBkZWNvZGluZyBpcyBjb250aW51ZWQgd2l0aG91dCBmdXJ0aGVyIG5vdGljZS4KLQotCi0uLiBmdW5jdGlvbjo6IHhtbGNoYXJyZWZyZXBsYWNlX2Vycm9ycyhleGNlcHRpb24pCi0KLSAgIEltcGxlbWVudHMgdGhlIGBgeG1sY2hhcnJlZnJlcGxhY2VgYCBlcnJvciBoYW5kbGluZyAoZm9yIGVuY29kaW5nIG9ubHkpOiB0aGUKLSAgIHVuZW5jb2RhYmxlIGNoYXJhY3RlciBpcyByZXBsYWNlZCBieSBhbiBhcHByb3ByaWF0ZSBYTUwgY2hhcmFjdGVyIHJlZmVyZW5jZS4KLQotCi0uLiBmdW5jdGlvbjo6IGJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKGV4Y2VwdGlvbikKLQotICAgSW1wbGVtZW50cyB0aGUgYGBiYWNrc2xhc2hyZXBsYWNlYGAgZXJyb3IgaGFuZGxpbmcgKGZvciBlbmNvZGluZyBvbmx5KTogdGhlCi0gICB1bmVuY29kYWJsZSBjaGFyYWN0ZXIgaXMgcmVwbGFjZWQgYnkgYSBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2UuCi0KLVRvIHNpbXBsaWZ5IHdvcmtpbmcgd2l0aCBlbmNvZGVkIGZpbGVzIG9yIHN0cmVhbSwgdGhlIG1vZHVsZSBhbHNvIGRlZmluZXMgdGhlc2UKLXV0aWxpdHkgZnVuY3Rpb25zOgotCi0KLS4uIGZ1bmN0aW9uOjogb3BlbihmaWxlbmFtZSwgbW9kZVssIGVuY29kaW5nWywgZXJyb3JzWywgYnVmZmVyaW5nXV1dKQotCi0gICBPcGVuIGFuIGVuY29kZWQgZmlsZSB1c2luZyB0aGUgZ2l2ZW4gKm1vZGUqIGFuZCByZXR1cm4gYSB3cmFwcGVkIHZlcnNpb24KLSAgIHByb3ZpZGluZyB0cmFuc3BhcmVudCBlbmNvZGluZy9kZWNvZGluZy4gIFRoZSBkZWZhdWx0IGZpbGUgbW9kZSBpcyBgYCdyJ2BgCi0gICBtZWFuaW5nIHRvIG9wZW4gdGhlIGZpbGUgaW4gcmVhZCBtb2RlLgorICAgUmVnaXN0ZXIgYSBjb2RlYyBzZWFyY2ggZnVuY3Rpb24uIFNlYXJjaCBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIHRha2Ugb25lCisgICBhcmd1bWVudCwgYmVpbmcgdGhlIGVuY29kaW5nIG5hbWUgaW4gYWxsIGxvd2VyIGNhc2UgbGV0dGVycywgYW5kIHJldHVybiBhCisgICA6Y2xhc3M6YENvZGVjSW5mb2Agb2JqZWN0LiBJbiBjYXNlIGEgc2VhcmNoIGZ1bmN0aW9uIGNhbm5vdCBmaW5kCisgICBhIGdpdmVuIGVuY29kaW5nLCBpdCBzaG91bGQgcmV0dXJuIGBgTm9uZWBgLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgVGhlIHdyYXBwZWQgdmVyc2lvbidzIG1ldGhvZHMgd2lsbCBhY2NlcHQgYW5kIHJldHVybiBzdHJpbmdzIG9ubHkuICBCeXRlcwotICAgICAgYXJndW1lbnRzIHdpbGwgYmUgcmVqZWN0ZWQuCisgICAgICBTZWFyY2ggZnVuY3Rpb24gcmVnaXN0cmF0aW9uIGlzIG5vdCBjdXJyZW50bHkgcmV2ZXJzaWJsZSwKKyAgICAgIHdoaWNoIG1heSBjYXVzZSBwcm9ibGVtcyBpbiBzb21lIGNhc2VzLCBzdWNoIGFzIHVuaXQgdGVzdGluZyBvcgorICAgICAgbW9kdWxlIHJlbG9hZGluZy4KKworV2hpbGUgdGhlIGJ1aWx0aW4gOmZ1bmM6YG9wZW5gIGFuZCB0aGUgYXNzb2NpYXRlZCA6bW9kOmBpb2AgbW9kdWxlIGFyZSB0aGUKK3JlY29tbWVuZGVkIGFwcHJvYWNoIGZvciB3b3JraW5nIHdpdGggZW5jb2RlZCB0ZXh0IGZpbGVzLCB0aGlzIG1vZHVsZQorcHJvdmlkZXMgYWRkaXRpb25hbCB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgY2xhc3NlcyB0aGF0IGFsbG93IHRoZSB1c2Ugb2YgYQord2lkZXIgcmFuZ2Ugb2YgY29kZWNzIHdoZW4gd29ya2luZyB3aXRoIGJpbmFyeSBmaWxlczoKKworLi4gZnVuY3Rpb246OiBvcGVuKGZpbGVuYW1lLCBtb2RlPSdyJywgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPSdzdHJpY3QnLCBidWZmZXJpbmc9MSkKKworICAgT3BlbiBhbiBlbmNvZGVkIGZpbGUgdXNpbmcgdGhlIGdpdmVuICptb2RlKiBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIG9mCisgICA6Y2xhc3M6YFN0cmVhbVJlYWRlcldyaXRlcmAsIHByb3ZpZGluZyB0cmFuc3BhcmVudCBlbmNvZGluZy9kZWNvZGluZy4KKyAgIFRoZSBkZWZhdWx0IGZpbGUgbW9kZSBpcyBgYCdyJ2BgLCBtZWFuaW5nIHRvIG9wZW4gdGhlIGZpbGUgaW4gcmVhZCBtb2RlLgogCiAgICAuLiBub3RlOjoKIAotICAgICAgRmlsZXMgYXJlIGFsd2F5cyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUsIGV2ZW4gaWYgbm8gYmluYXJ5IG1vZGUgd2FzCi0gICAgICBzcGVjaWZpZWQuICBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgZGF0YSBsb3NzIGR1ZSB0byBlbmNvZGluZ3MgdXNpbmcgOC1iaXQKLSAgICAgIHZhbHVlcy4gIFRoaXMgbWVhbnMgdGhhdCBubyBhdXRvbWF0aWMgY29udmVyc2lvbiBvZiBgYGInXG4nYGAgaXMgZG9uZQotICAgICAgb24gcmVhZGluZyBhbmQgd3JpdGluZy4KKyAgICAgIFVuZGVybHlpbmcgZW5jb2RlZCBmaWxlcyBhcmUgYWx3YXlzIG9wZW5lZCBpbiBiaW5hcnkgbW9kZS4KKyAgICAgIE5vIGF1dG9tYXRpYyBjb252ZXJzaW9uIG9mIGBgJ1xuJ2BgIGlzIGRvbmUgb24gcmVhZGluZyBhbmQgd3JpdGluZy4KKyAgICAgIFRoZSAqbW9kZSogYXJndW1lbnQgbWF5IGJlIGFueSBiaW5hcnkgbW9kZSBhY2NlcHRhYmxlIHRvIHRoZSBidWlsdC1pbgorICAgICAgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uOyB0aGUgYGAnYidgYCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkLgogCiAgICAqZW5jb2RpbmcqIHNwZWNpZmllcyB0aGUgZW5jb2Rpbmcgd2hpY2ggaXMgdG8gYmUgdXNlZCBmb3IgdGhlIGZpbGUuCisgICBBbnkgZW5jb2RpbmcgdGhhdCBlbmNvZGVzIHRvIGFuZCBkZWNvZGVzIGZyb20gYnl0ZXMgaXMgYWxsb3dlZCwgYW5kCisgICB0aGUgZGF0YSB0eXBlcyBzdXBwb3J0ZWQgYnkgdGhlIGZpbGUgbWV0aG9kcyBkZXBlbmQgb24gdGhlIGNvZGVjIHVzZWQuCiAKICAgICplcnJvcnMqIG1heSBiZSBnaXZlbiB0byBkZWZpbmUgdGhlIGVycm9yIGhhbmRsaW5nLiBJdCBkZWZhdWx0cyB0byBgYCdzdHJpY3QnYGAKICAgIHdoaWNoIGNhdXNlcyBhIDpleGM6YFZhbHVlRXJyb3JgIHRvIGJlIHJhaXNlZCBpbiBjYXNlIGFuIGVuY29kaW5nIGVycm9yIG9jY3Vycy4KQEAgLTI2NCwxMiArMTk5LDE1IEBACiAKIC4uIGZ1bmN0aW9uOjogRW5jb2RlZEZpbGUoZmlsZSwgZGF0YV9lbmNvZGluZywgZmlsZV9lbmNvZGluZz1Ob25lLCBlcnJvcnM9J3N0cmljdCcpCiAKLSAgIFJldHVybiBhIHdyYXBwZWQgdmVyc2lvbiBvZiBmaWxlIHdoaWNoIHByb3ZpZGVzIHRyYW5zcGFyZW50IGVuY29kaW5nCi0gICB0cmFuc2xhdGlvbi4KKyAgIFJldHVybiBhIDpjbGFzczpgU3RyZWFtUmVjb2RlcmAgaW5zdGFuY2UsIGEgd3JhcHBlZCB2ZXJzaW9uIG9mICpmaWxlKgorICAgd2hpY2ggcHJvdmlkZXMgdHJhbnNwYXJlbnQgdHJhbnNjb2RpbmcuIFRoZSBvcmlnaW5hbCBmaWxlIGlzIGNsb3NlZAorICAgd2hlbiB0aGUgd3JhcHBlZCB2ZXJzaW9uIGlzIGNsb3NlZC4KIAotICAgQnl0ZXMgd3JpdHRlbiB0byB0aGUgd3JhcHBlZCBmaWxlIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuCi0gICAqZGF0YV9lbmNvZGluZyogYW5kIHRoZW4gd3JpdHRlbiB0byB0aGUgb3JpZ2luYWwgZmlsZSBhcyBieXRlcyB1c2luZyB0aGUKLSAgICpmaWxlX2VuY29kaW5nKi4KKyAgIERhdGEgd3JpdHRlbiB0byB0aGUgd3JhcHBlZCBmaWxlIGlzIGRlY29kZWQgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbgorICAgKmRhdGFfZW5jb2RpbmcqIGFuZCB0aGVuIHdyaXR0ZW4gdG8gdGhlIG9yaWdpbmFsIGZpbGUgYXMgYnl0ZXMgdXNpbmcKKyAgICpmaWxlX2VuY29kaW5nKi4gQnl0ZXMgcmVhZCBmcm9tIHRoZSBvcmlnaW5hbCBmaWxlIGFyZSBkZWNvZGVkCisgICBhY2NvcmRpbmcgdG8gKmZpbGVfZW5jb2RpbmcqLCBhbmQgdGhlIHJlc3VsdCBpcyBlbmNvZGVkCisgICB1c2luZyAqZGF0YV9lbmNvZGluZyouCiAKICAgIElmICpmaWxlX2VuY29kaW5nKiBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvICpkYXRhX2VuY29kaW5nKi4KIApAQCAtMjgxLDE0ICsyMTksMTYgQEAKIC4uIGZ1bmN0aW9uOjogaXRlcmVuY29kZShpdGVyYXRvciwgZW5jb2RpbmcsIGVycm9ycz0nc3RyaWN0JywgKiprd2FyZ3MpCiAKICAgIFVzZXMgYW4gaW5jcmVtZW50YWwgZW5jb2RlciB0byBpdGVyYXRpdmVseSBlbmNvZGUgdGhlIGlucHV0IHByb3ZpZGVkIGJ5Ci0gICAqaXRlcmF0b3IqLiBUaGlzIGZ1bmN0aW9uIGlzIGEgOnRlcm06YGdlbmVyYXRvcmAuICAqZXJyb3JzKiAoYXMgd2VsbCBhcyBhbnkKKyAgICppdGVyYXRvciouIFRoaXMgZnVuY3Rpb24gaXMgYSA6dGVybTpgZ2VuZXJhdG9yYC4KKyAgIFRoZSAqZXJyb3JzKiBhcmd1bWVudCAoYXMgd2VsbCBhcyBhbnkKICAgIG90aGVyIGtleXdvcmQgYXJndW1lbnQpIGlzIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBpbmNyZW1lbnRhbCBlbmNvZGVyLgogCiAKIC4uIGZ1bmN0aW9uOjogaXRlcmRlY29kZShpdGVyYXRvciwgZW5jb2RpbmcsIGVycm9ycz0nc3RyaWN0JywgKiprd2FyZ3MpCiAKICAgIFVzZXMgYW4gaW5jcmVtZW50YWwgZGVjb2RlciB0byBpdGVyYXRpdmVseSBkZWNvZGUgdGhlIGlucHV0IHByb3ZpZGVkIGJ5Ci0gICAqaXRlcmF0b3IqLiBUaGlzIGZ1bmN0aW9uIGlzIGEgOnRlcm06YGdlbmVyYXRvcmAuICAqZXJyb3JzKiAoYXMgd2VsbCBhcyBhbnkKKyAgICppdGVyYXRvciouIFRoaXMgZnVuY3Rpb24gaXMgYSA6dGVybTpgZ2VuZXJhdG9yYC4KKyAgIFRoZSAqZXJyb3JzKiBhcmd1bWVudCAoYXMgd2VsbCBhcyBhbnkKICAgIG90aGVyIGtleXdvcmQgYXJndW1lbnQpIGlzIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBpbmNyZW1lbnRhbCBkZWNvZGVyLgogCiAKQEAgLTMwNyw5ICsyNDcsMTAgQEAKICAgICAgICAgICBCT01fVVRGMzJfQkUKICAgICAgICAgICBCT01fVVRGMzJfTEUKIAotICAgVGhlc2UgY29uc3RhbnRzIGRlZmluZSB2YXJpb3VzIGVuY29kaW5ncyBvZiB0aGUgVW5pY29kZSBieXRlIG9yZGVyIG1hcmsgKEJPTSkKLSAgIHVzZWQgaW4gVVRGLTE2IGFuZCBVVEYtMzIgZGF0YSBzdHJlYW1zIHRvIGluZGljYXRlIHRoZSBieXRlIG9yZGVyIHVzZWQgaW4gdGhlCi0gICBzdHJlYW0gb3IgZmlsZSBhbmQgaW4gVVRGLTggYXMgYSBVbmljb2RlIHNpZ25hdHVyZS4gOmNvbnN0OmBCT01fVVRGMTZgIGlzIGVpdGhlcgorICAgVGhlc2UgY29uc3RhbnRzIGRlZmluZSB2YXJpb3VzIGJ5dGUgc2VxdWVuY2VzLAorICAgYmVpbmcgVW5pY29kZSBieXRlIG9yZGVyIG1hcmtzIChCT01zKSBmb3Igc2V2ZXJhbCBlbmNvZGluZ3MuIFRoZXkgYXJlCisgICB1c2VkIGluIFVURi0xNiBhbmQgVVRGLTMyIGRhdGEgc3RyZWFtcyB0byBpbmRpY2F0ZSB0aGUgYnl0ZSBvcmRlciB1c2VkLAorICAgYW5kIGluIFVURi04IGFzIGEgVW5pY29kZSBzaWduYXR1cmUuIDpjb25zdDpgQk9NX1VURjE2YCBpcyBlaXRoZXIKICAgIDpjb25zdDpgQk9NX1VURjE2X0JFYCBvciA6Y29uc3Q6YEJPTV9VVEYxNl9MRWAgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSdzCiAgICBuYXRpdmUgYnl0ZSBvcmRlciwgOmNvbnN0OmBCT01gIGlzIGFuIGFsaWFzIGZvciA6Y29uc3Q6YEJPTV9VVEYxNmAsCiAgICA6Y29uc3Q6YEJPTV9MRWAgZm9yIDpjb25zdDpgQk9NX1VURjE2X0xFYCBhbmQgOmNvbnN0OmBCT01fQkVgIGZvcgpAQCAtMzIzLDIwICsyNjQsMjUgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgY29kZWNzYCBtb2R1bGUgZGVmaW5lcyBhIHNldCBvZiBiYXNlIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZQotaW50ZXJmYWNlIGFuZCBjYW4gYWxzbyBiZSB1c2VkIHRvIGVhc2lseSB3cml0ZSB5b3VyIG93biBjb2RlY3MgZm9yIHVzZSBpbgotUHl0aG9uLgoraW50ZXJmYWNlcyBmb3Igd29ya2luZyB3aXRoIGNvZGVjIG9iamVjdHMsIGFuZCBjYW4gYWxzbyBiZSB1c2VkIGFzIHRoZSBiYXNpcworZm9yIGN1c3RvbSBjb2RlYyBpbXBsZW1lbnRhdGlvbnMuCiAKIEVhY2ggY29kZWMgaGFzIHRvIGRlZmluZSBmb3VyIGludGVyZmFjZXMgdG8gbWFrZSBpdCB1c2FibGUgYXMgY29kZWMgaW4gUHl0aG9uOgogc3RhdGVsZXNzIGVuY29kZXIsIHN0YXRlbGVzcyBkZWNvZGVyLCBzdHJlYW0gcmVhZGVyIGFuZCBzdHJlYW0gd3JpdGVyLiBUaGUKIHN0cmVhbSByZWFkZXIgYW5kIHdyaXRlcnMgdHlwaWNhbGx5IHJldXNlIHRoZSBzdGF0ZWxlc3MgZW5jb2Rlci9kZWNvZGVyIHRvCi1pbXBsZW1lbnQgdGhlIGZpbGUgcHJvdG9jb2xzLgoraW1wbGVtZW50IHRoZSBmaWxlIHByb3RvY29scy4gQ29kZWMgYXV0aG9ycyBhbHNvIG5lZWQgdG8gZGVmaW5lIGhvdyB0aGUKK2NvZGVjIHdpbGwgaGFuZGxlIGVuY29kaW5nIGFuZCBkZWNvZGluZyBlcnJvcnMuCiAKLVRoZSA6Y2xhc3M6YENvZGVjYCBjbGFzcyBkZWZpbmVzIHRoZSBpbnRlcmZhY2UgZm9yIHN0YXRlbGVzcyBlbmNvZGVycy9kZWNvZGVycy4KIAotVG8gc2ltcGxpZnkgYW5kIHN0YW5kYXJkaXplIGVycm9yIGhhbmRsaW5nLCB0aGUgOm1ldGg6YH5Db2RlYy5lbmNvZGVgIGFuZAotOm1ldGg6YH5Db2RlYy5kZWNvZGVgIG1ldGhvZHMgbWF5IGltcGxlbWVudCBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcgc2NoZW1lcyBieQotcHJvdmlkaW5nIHRoZSAqZXJyb3JzKiBzdHJpbmcgYXJndW1lbnQuICBUaGUgZm9sbG93aW5nIHN0cmluZyB2YWx1ZXMgYXJlIGRlZmluZWQKLWFuZCBpbXBsZW1lbnRlZCBieSBhbGwgc3RhbmRhcmQgUHl0aG9uIGNvZGVjczoKKy4uIF9lcnJvci1oYW5kbGVyczoKKworRXJyb3IgSGFuZGxlcnMKK15eXl5eXl5eXl5eXl5eCisKK1RvIHNpbXBsaWZ5IGFuZCBzdGFuZGFyZGl6ZSBlcnJvciBoYW5kbGluZywKK2NvZGVjcyBtYXkgaW1wbGVtZW50IGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWVzIGJ5CithY2NlcHRpbmcgdGhlICplcnJvcnMqIHN0cmluZyBhcmd1bWVudC4gIFRoZSBmb2xsb3dpbmcgc3RyaW5nIHZhbHVlcyBhcmUKK2RlZmluZWQgYW5kIGltcGxlbWVudGVkIGJ5IGFsbCBzdGFuZGFyZCBQeXRob24gY29kZWNzOgogCiAuLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8CiAKQEAgLTM0NCw2MyArMjkwLDE1NCBAQAogfCBWYWx1ZSAgICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiArPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKIHwgYGAnc3RyaWN0J2BgICAgICAgICAgICAgfCBSYWlzZSA6ZXhjOmBVbmljb2RlRXJyb3JgIChvciBhIHN1YmNsYXNzKTsgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoaXMgaXMgdGhlIGRlZmF1bHQuICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgdGhpcyBpcyB0aGUgZGVmYXVsdC4gIEltcGxlbWVudGVkIGluICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCA6ZnVuYzpgc3RyaWN0X2Vycm9yc2AuICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IGBgJ2lnbm9yZSdgYCAgICAgICAgICAgIHwgSWdub3JlIHRoZSBjaGFyYWN0ZXIgYW5kIGNvbnRpbnVlIHdpdGggdGhlICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBuZXh0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBgYCdpZ25vcmUnYGAgICAgICAgICAgICB8IElnbm9yZSB0aGUgbWFsZm9ybWVkIGRhdGEgYW5kIGNvbnRpbnVlICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2l0aG91dCBmdXJ0aGVyIG5vdGljZS4gIEltcGxlbWVudGVkIGluICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCA6ZnVuYzpgaWdub3JlX2Vycm9yc2AuICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1RoZSBmb2xsb3dpbmcgZXJyb3IgaGFuZGxlcnMgYXJlIG9ubHkgYXBwbGljYWJsZSB0bworOnRlcm06YHRleHQgZW5jb2RpbmdzIDx0ZXh0IGVuY29kaW5nPmA6CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBWYWx1ZSAgICAgICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKIHwgYGAncmVwbGFjZSdgYCAgICAgICAgICAgfCBSZXBsYWNlIHdpdGggYSBzdWl0YWJsZSByZXBsYWNlbWVudCAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGNoYXJhY3RlcjsgUHl0aG9uIHdpbGwgdXNlIHRoZSBvZmZpY2lhbCAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgIHwgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUiBmb3IgdGhlIGJ1aWx0LWluIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCBVbmljb2RlIGNvZGVjcyBvbiBkZWNvZGluZyBhbmQgJz8nIG9uICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGVuY29kaW5nLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgbWFya2VyOyBQeXRob24gd2lsbCB1c2UgdGhlIG9mZmljaWFsICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYFUrRkZGRGBgIFJFUExBQ0VNRU5UIENIQVJBQ1RFUiBmb3IgdGhlICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGJ1aWx0LWluIGNvZGVjcyBvbiBkZWNvZGluZywgYW5kICc/JyBvbiAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgZW5jb2RpbmcuICBJbXBsZW1lbnRlZCBpbiAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCA6ZnVuYzpgcmVwbGFjZV9lcnJvcnNgLiAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgJ3htbGNoYXJyZWZyZXBsYWNlJ2BgIHwgUmVwbGFjZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBYTUwgY2hhcmFjdGVyICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgICAgfCByZWZlcmVuY2UgKG9ubHkgZm9yIGVuY29kaW5nKS4gICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlZmVyZW5jZSAob25seSBmb3IgZW5jb2RpbmcpLiAgSW1wbGVtZW50ZWQgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW4gOmZ1bmM6YHhtbGNoYXJyZWZyZXBsYWNlX2Vycm9yc2AuICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgICB8IFJlcGxhY2Ugd2l0aCBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2VzICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgIHwgKG9ubHkgZm9yIGVuY29kaW5nKS4gICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCAob25seSBmb3IgZW5jb2RpbmcpLiAgSW1wbGVtZW50ZWQgaW4gICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IDpmdW5jOmBiYWNrc2xhc2hyZXBsYWNlX2Vycm9yc2AuICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgYGAnc3Vycm9nYXRlZXNjYXBlJ2BgICAgfCBSZXBsYWNlIGJ5dGUgd2l0aCBzdXJyb2dhdGUgVStEQ3h4LCBhcyBkZWZpbmVkfAotfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGluIDpwZXA6YDM4M2AuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYCAgIHwgT24gZGVjb2RpbmcsIHJlcGxhY2UgYnl0ZSB3aXRoIGluZGl2aWR1YWwgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdXJyb2dhdGUgY29kZSByYW5naW5nIGZyb20gYGBVK0RDODBgYCB0byAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgVStEQ0ZGYGAuICBUaGlzIGNvZGUgd2lsbCB0aGVuIGJlIHR1cm5lZCAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgYmFjayBpbnRvIHRoZSBzYW1lIGJ5dGUgd2hlbiB0aGUgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgfCBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgZXJyb3IgaGFuZGxlciBpcyB1c2VkICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoZW4gZW5jb2RpbmcgdGhlIGRhdGEuICAoU2VlIDpwZXA6YDM4M2AgZm9yICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgbW9yZS4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi1JbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBlcnJvciBoYW5kbGVycyBhcmUgc3BlY2lmaWMgdG8gYSBzaW5nbGUgY29kZWM6CitJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBlcnJvciBoYW5kbGVyIGlzIHNwZWNpZmljIHRvIHRoZSBnaXZlbiBjb2RlY3M6CiAKLSstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXxgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCAgIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAotfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBjb2RlcyBpbiBVVEYtOC4gICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBWYWx1ZSAgICAgICAgICAgICB8IENvZGVjcyAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3xgYCdzdXJyb2dhdGVwYXNzJ2BgfCB1dGYtOCwgdXRmLTE2LCB1dGYtMzIsIHwgQWxsb3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG9mIHN1cnJvZ2F0ZSAgfAorfCAgICAgICAgICAgICAgICAgICB8IHV0Zi0xNi1iZSwgdXRmLTE2LWxlLCAgfCBjb2Rlcy4gIFRoZXNlIGNvZGVjcyBub3JtYWxseSB0cmVhdCB0aGUgICB8Cit8ICAgICAgICAgICAgICAgICAgIHwgdXRmLTMyLWJlLCB1dGYtMzItbGUgICB8IHByZXNlbmNlIG9mIHN1cnJvZ2F0ZXMgYXMgYW4gZXJyb3IuICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKICAgIFRoZSBgYCdzdXJyb2dhdGVlc2NhcGUnYGAgYW5kIGBgJ3N1cnJvZ2F0ZXBhc3MnYGAgZXJyb3IgaGFuZGxlcnMuCiAKLVRoZSBzZXQgb2YgYWxsb3dlZCB2YWx1ZXMgY2FuIGJlIGV4dGVuZGVkIHZpYSA6bWV0aDpgcmVnaXN0ZXJfZXJyb3JgLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSBgYCdzdXJyb2dhdGVwYXNzJ2BgIGVycm9yIGhhbmRsZXJzIG5vdyB3b3JrcyB3aXRoIHV0Zi0xNlwqIGFuZCB1dGYtMzJcKiBjb2RlY3MuCisKK1RoZSBzZXQgb2YgYWxsb3dlZCB2YWx1ZXMgY2FuIGJlIGV4dGVuZGVkIGJ5IHJlZ2lzdGVyaW5nIGEgbmV3IG5hbWVkIGVycm9yCitoYW5kbGVyOgorCisuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyX2Vycm9yKG5hbWUsIGVycm9yX2hhbmRsZXIpCisKKyAgIFJlZ2lzdGVyIHRoZSBlcnJvciBoYW5kbGluZyBmdW5jdGlvbiAqZXJyb3JfaGFuZGxlciogdW5kZXIgdGhlIG5hbWUgKm5hbWUqLgorICAgVGhlICplcnJvcl9oYW5kbGVyKiBhcmd1bWVudCB3aWxsIGJlIGNhbGxlZCBkdXJpbmcgZW5jb2RpbmcgYW5kIGRlY29kaW5nCisgICBpbiBjYXNlIG9mIGFuIGVycm9yLCB3aGVuICpuYW1lKiBpcyBzcGVjaWZpZWQgYXMgdGhlIGVycm9ycyBwYXJhbWV0ZXIuCisKKyAgIEZvciBlbmNvZGluZywgKmVycm9yX2hhbmRsZXIqIHdpbGwgYmUgY2FsbGVkIHdpdGggYSA6ZXhjOmBVbmljb2RlRW5jb2RlRXJyb3JgCisgICBpbnN0YW5jZSwgd2hpY2ggY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBlcnJvci4gVGhlCisgICBlcnJvciBoYW5kbGVyIG11c3QgZWl0aGVyIHJhaXNlIHRoaXMgb3IgYSBkaWZmZXJlbnQgZXhjZXB0aW9uLCBvciByZXR1cm4gYQorICAgdHVwbGUgd2l0aCBhIHJlcGxhY2VtZW50IGZvciB0aGUgdW5lbmNvZGFibGUgcGFydCBvZiB0aGUgaW5wdXQgYW5kIGEgcG9zaXRpb24KKyAgIHdoZXJlIGVuY29kaW5nIHNob3VsZCBjb250aW51ZS4gVGhlIHJlcGxhY2VtZW50IG1heSBiZSBlaXRoZXIgOmNsYXNzOmBzdHJgIG9yCisgICA6Y2xhc3M6YGJ5dGVzYC4gIElmIHRoZSByZXBsYWNlbWVudCBpcyBieXRlcywgdGhlIGVuY29kZXIgd2lsbCBzaW1wbHkgY29weQorICAgdGhlbSBpbnRvIHRoZSBvdXRwdXQgYnVmZmVyLiBJZiB0aGUgcmVwbGFjZW1lbnQgaXMgYSBzdHJpbmcsIHRoZSBlbmNvZGVyIHdpbGwKKyAgIGVuY29kZSB0aGUgcmVwbGFjZW1lbnQuICBFbmNvZGluZyBjb250aW51ZXMgb24gb3JpZ2luYWwgaW5wdXQgYXQgdGhlCisgICBzcGVjaWZpZWQgcG9zaXRpb24uIE5lZ2F0aXZlIHBvc2l0aW9uIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgYmVpbmcKKyAgIHJlbGF0aXZlIHRvIHRoZSBlbmQgb2YgdGhlIGlucHV0IHN0cmluZy4gSWYgdGhlIHJlc3VsdGluZyBwb3NpdGlvbiBpcyBvdXQgb2YKKyAgIGJvdW5kIGFuIDpleGM6YEluZGV4RXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorCisgICBEZWNvZGluZyBhbmQgdHJhbnNsYXRpbmcgd29ya3Mgc2ltaWxhcmx5LCBleGNlcHQgOmV4YzpgVW5pY29kZURlY29kZUVycm9yYCBvcgorICAgOmV4YzpgVW5pY29kZVRyYW5zbGF0ZUVycm9yYCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgaGFuZGxlciBhbmQgdGhhdCB0aGUKKyAgIHJlcGxhY2VtZW50IGZyb20gdGhlIGVycm9yIGhhbmRsZXIgd2lsbCBiZSBwdXQgaW50byB0aGUgb3V0cHV0IGRpcmVjdGx5LgorCisKK1ByZXZpb3VzbHkgcmVnaXN0ZXJlZCBlcnJvciBoYW5kbGVycyAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBlcnJvciBoYW5kbGVycykKK2NhbiBiZSBsb29rZWQgdXAgYnkgbmFtZToKKworLi4gZnVuY3Rpb246OiBsb29rdXBfZXJyb3IobmFtZSkKKworICAgUmV0dXJuIHRoZSBlcnJvciBoYW5kbGVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB1bmRlciB0aGUgbmFtZSAqbmFtZSouCisKKyAgIFJhaXNlcyBhIDpleGM6YExvb2t1cEVycm9yYCBpbiBjYXNlIHRoZSBoYW5kbGVyIGNhbm5vdCBiZSBmb3VuZC4KKworVGhlIGZvbGxvd2luZyBzdGFuZGFyZCBlcnJvciBoYW5kbGVycyBhcmUgYWxzbyBtYWRlIGF2YWlsYWJsZSBhcyBtb2R1bGUgbGV2ZWwKK2Z1bmN0aW9uczoKKworLi4gZnVuY3Rpb246OiBzdHJpY3RfZXJyb3JzKGV4Y2VwdGlvbikKKworICAgSW1wbGVtZW50cyB0aGUgYGAnc3RyaWN0J2BgIGVycm9yIGhhbmRsaW5nOiBlYWNoIGVuY29kaW5nIG9yCisgICBkZWNvZGluZyBlcnJvciByYWlzZXMgYSA6ZXhjOmBVbmljb2RlRXJyb3JgLgorCisKKy4uIGZ1bmN0aW9uOjogcmVwbGFjZV9lcnJvcnMoZXhjZXB0aW9uKQorCisgICBJbXBsZW1lbnRzIHRoZSBgYCdyZXBsYWNlJ2BgIGVycm9yIGhhbmRsaW5nIChmb3IgOnRlcm06YHRleHQgZW5jb2RpbmdzCisgICA8dGV4dCBlbmNvZGluZz5gIG9ubHkpOiBzdWJzdGl0dXRlcyBgYCc/J2BgIGZvciBlbmNvZGluZyBlcnJvcnMKKyAgICh0byBiZSBlbmNvZGVkIGJ5IHRoZSBjb2RlYyksIGFuZCBgYCdcdWZmZmQnYGAgKHRoZSBVbmljb2RlIHJlcGxhY2VtZW50CisgICBjaGFyYWN0ZXIpIGZvciBkZWNvZGluZyBlcnJvcnMuCisKKworLi4gZnVuY3Rpb246OiBpZ25vcmVfZXJyb3JzKGV4Y2VwdGlvbikKKworICAgSW1wbGVtZW50cyB0aGUgYGAnaWdub3JlJ2BgIGVycm9yIGhhbmRsaW5nOiBtYWxmb3JtZWQgZGF0YSBpcyBpZ25vcmVkIGFuZAorICAgZW5jb2Rpbmcgb3IgZGVjb2RpbmcgaXMgY29udGludWVkIHdpdGhvdXQgZnVydGhlciBub3RpY2UuCisKKworLi4gZnVuY3Rpb246OiB4bWxjaGFycmVmcmVwbGFjZV9lcnJvcnMoZXhjZXB0aW9uKQorCisgICBJbXBsZW1lbnRzIHRoZSBgYCd4bWxjaGFycmVmcmVwbGFjZSdgYCBlcnJvciBoYW5kbGluZyAoZm9yIGVuY29kaW5nIHdpdGgKKyAgIDp0ZXJtOmB0ZXh0IGVuY29kaW5ncyA8dGV4dCBlbmNvZGluZz5gIG9ubHkpOiB0aGUKKyAgIHVuZW5jb2RhYmxlIGNoYXJhY3RlciBpcyByZXBsYWNlZCBieSBhbiBhcHByb3ByaWF0ZSBYTUwgY2hhcmFjdGVyIHJlZmVyZW5jZS4KKworCisuLiBmdW5jdGlvbjo6IGJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKGV4Y2VwdGlvbikKKworICAgSW1wbGVtZW50cyB0aGUgYGAnYmFja3NsYXNocmVwbGFjZSdgYCBlcnJvciBoYW5kbGluZyAoZm9yIGVuY29kaW5nIHdpdGgKKyAgIDp0ZXJtOmB0ZXh0IGVuY29kaW5ncyA8dGV4dCBlbmNvZGluZz5gIG9ubHkpOiB0aGUKKyAgIHVuZW5jb2RhYmxlIGNoYXJhY3RlciBpcyByZXBsYWNlZCBieSBhIGJhY2tzbGFzaGVkIGVzY2FwZSBzZXF1ZW5jZS4KIAogCiAuLiBfY29kZWMtb2JqZWN0czoKIAotQ29kZWMgT2JqZWN0cwotXl5eXl5eXl5eXl5eXgorU3RhdGVsZXNzIEVuY29kaW5nIGFuZCBEZWNvZGluZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1UaGUgOmNsYXNzOmBDb2RlY2AgY2xhc3MgZGVmaW5lcyB0aGVzZSBtZXRob2RzIHdoaWNoIGFsc28gZGVmaW5lIHRoZSBmdW5jdGlvbgotaW50ZXJmYWNlcyBvZiB0aGUgc3RhdGVsZXNzIGVuY29kZXIgYW5kIGRlY29kZXI6CitUaGUgYmFzZSA6Y2xhc3M6YENvZGVjYCBjbGFzcyBkZWZpbmVzIHRoZXNlIG1ldGhvZHMgd2hpY2ggYWxzbyBkZWZpbmUgdGhlCitmdW5jdGlvbiBpbnRlcmZhY2VzIG9mIHRoZSBzdGF0ZWxlc3MgZW5jb2RlciBhbmQgZGVjb2RlcjoKIAogCiAuLiBtZXRob2Q6OiBDb2RlYy5lbmNvZGUoaW5wdXRbLCBlcnJvcnNdKQogCiAgICBFbmNvZGVzIHRoZSBvYmplY3QgKmlucHV0KiBhbmQgcmV0dXJucyBhIHR1cGxlIChvdXRwdXQgb2JqZWN0LCBsZW5ndGggY29uc3VtZWQpLgotICAgRW5jb2RpbmcgY29udmVydHMgYSBzdHJpbmcgb2JqZWN0IHRvIGEgYnl0ZXMgb2JqZWN0IHVzaW5nIGEgcGFydGljdWxhcgorICAgRm9yIGluc3RhbmNlLCA6dGVybTpgdGV4dCBlbmNvZGluZ2AgY29udmVydHMKKyAgIGEgc3RyaW5nIG9iamVjdCB0byBhIGJ5dGVzIG9iamVjdCB1c2luZyBhIHBhcnRpY3VsYXIKICAgIGNoYXJhY3RlciBzZXQgZW5jb2RpbmcgKGUuZy4sIGBgY3AxMjUyYGAgb3IgYGBpc28tODg1OS0xYGApLgogCi0gICAqZXJyb3JzKiBkZWZpbmVzIHRoZSBlcnJvciBoYW5kbGluZyB0byBhcHBseS4gSXQgZGVmYXVsdHMgdG8gYGAnc3RyaWN0J2BgCi0gICBoYW5kbGluZy4KKyAgIFRoZSAqZXJyb3JzKiBhcmd1bWVudCBkZWZpbmVzIHRoZSBlcnJvciBoYW5kbGluZyB0byBhcHBseS4KKyAgIEl0IGRlZmF1bHRzIHRvIGBgJ3N0cmljdCdgYCBoYW5kbGluZy4KIAogICAgVGhlIG1ldGhvZCBtYXkgbm90IHN0b3JlIHN0YXRlIGluIHRoZSA6Y2xhc3M6YENvZGVjYCBpbnN0YW5jZS4gVXNlCi0gICA6Y2xhc3M6YFN0cmVhbUNvZGVjYCBmb3IgY29kZWNzIHdoaWNoIGhhdmUgdG8ga2VlcCBzdGF0ZSBpbiBvcmRlciB0byBtYWtlCi0gICBlbmNvZGluZy9kZWNvZGluZyBlZmZpY2llbnQuCisgICA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgZm9yIGNvZGVjcyB3aGljaCBoYXZlIHRvIGtlZXAgc3RhdGUgaW4gb3JkZXIgdG8gbWFrZQorICAgZW5jb2RpbmcgZWZmaWNpZW50LgogCiAgICBUaGUgZW5jb2RlciBtdXN0IGJlIGFibGUgdG8gaGFuZGxlIHplcm8gbGVuZ3RoIGlucHV0IGFuZCByZXR1cm4gYW4gZW1wdHkgb2JqZWN0CiAgICBvZiB0aGUgb3V0cHV0IG9iamVjdCB0eXBlIGluIHRoaXMgc2l0dWF0aW9uLgpAQCAtNDA5LDIyICs0NDYsMjggQEAKIC4uIG1ldGhvZDo6IENvZGVjLmRlY29kZShpbnB1dFssIGVycm9yc10pCiAKICAgIERlY29kZXMgdGhlIG9iamVjdCAqaW5wdXQqIGFuZCByZXR1cm5zIGEgdHVwbGUgKG91dHB1dCBvYmplY3QsIGxlbmd0aAotICAgY29uc3VtZWQpLiAgRGVjb2RpbmcgY29udmVydHMgYSBieXRlcyBvYmplY3QgZW5jb2RlZCB1c2luZyBhIHBhcnRpY3VsYXIKKyAgIGNvbnN1bWVkKS4gIEZvciBpbnN0YW5jZSwgZm9yIGEgOnRlcm06YHRleHQgZW5jb2RpbmdgLCBkZWNvZGluZyBjb252ZXJ0cworICAgYSBieXRlcyBvYmplY3QgZW5jb2RlZCB1c2luZyBhIHBhcnRpY3VsYXIKICAgIGNoYXJhY3RlciBzZXQgZW5jb2RpbmcgdG8gYSBzdHJpbmcgb2JqZWN0LgogCi0gICAqaW5wdXQqIG11c3QgYmUgYSBieXRlcyBvYmplY3Qgb3Igb25lIHdoaWNoIHByb3ZpZGVzIHRoZSByZWFkLW9ubHkgY2hhcmFjdGVyCisgICBGb3IgdGV4dCBlbmNvZGluZ3MgYW5kIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjcywKKyAgICppbnB1dCogbXVzdCBiZSBhIGJ5dGVzIG9iamVjdCBvciBvbmUgd2hpY2ggcHJvdmlkZXMgdGhlIHJlYWQtb25seQogICAgYnVmZmVyIGludGVyZmFjZSAtLSBmb3IgZXhhbXBsZSwgYnVmZmVyIG9iamVjdHMgYW5kIG1lbW9yeSBtYXBwZWQgZmlsZXMuCiAKLSAgICplcnJvcnMqIGRlZmluZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGFwcGx5LiBJdCBkZWZhdWx0cyB0byBgYCdzdHJpY3QnYGAKLSAgIGhhbmRsaW5nLgorICAgVGhlICplcnJvcnMqIGFyZ3VtZW50IGRlZmluZXMgdGhlIGVycm9yIGhhbmRsaW5nIHRvIGFwcGx5LgorICAgSXQgZGVmYXVsdHMgdG8gYGAnc3RyaWN0J2BgIGhhbmRsaW5nLgogCiAgICBUaGUgbWV0aG9kIG1heSBub3Qgc3RvcmUgc3RhdGUgaW4gdGhlIDpjbGFzczpgQ29kZWNgIGluc3RhbmNlLiBVc2UKLSAgIDpjbGFzczpgU3RyZWFtQ29kZWNgIGZvciBjb2RlY3Mgd2hpY2ggaGF2ZSB0byBrZWVwIHN0YXRlIGluIG9yZGVyIHRvIG1ha2UKLSAgIGVuY29kaW5nL2RlY29kaW5nIGVmZmljaWVudC4KKyAgIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBmb3IgY29kZWNzIHdoaWNoIGhhdmUgdG8ga2VlcCBzdGF0ZSBpbiBvcmRlciB0byBtYWtlCisgICBkZWNvZGluZyBlZmZpY2llbnQuCiAKICAgIFRoZSBkZWNvZGVyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgemVybyBsZW5ndGggaW5wdXQgYW5kIHJldHVybiBhbiBlbXB0eSBvYmplY3QKICAgIG9mIHRoZSBvdXRwdXQgb2JqZWN0IHR5cGUgaW4gdGhpcyBzaXR1YXRpb24uCiAKKworSW5jcmVtZW50YWwgRW5jb2RpbmcgYW5kIERlY29kaW5nCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKwogVGhlIDpjbGFzczpgSW5jcmVtZW50YWxFbmNvZGVyYCBhbmQgOmNsYXNzOmBJbmNyZW1lbnRhbERlY29kZXJgIGNsYXNzZXMgcHJvdmlkZQogdGhlIGJhc2ljIGludGVyZmFjZSBmb3IgaW5jcmVtZW50YWwgZW5jb2RpbmcgYW5kIGRlY29kaW5nLiBFbmNvZGluZy9kZWNvZGluZyB0aGUKIGlucHV0IGlzbid0IGRvbmUgd2l0aCBvbmUgY2FsbCB0byB0aGUgc3RhdGVsZXNzIGVuY29kZXIvZGVjb2RlciBmdW5jdGlvbiwgYnV0CkBAIC00NDIsMTQgKzQ4NSwxNCBAQAogLi4gX2luY3JlbWVudGFsLWVuY29kZXItb2JqZWN0czoKIAogSW5jcmVtZW50YWxFbmNvZGVyIE9iamVjdHMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiBUaGUgOmNsYXNzOmBJbmNyZW1lbnRhbEVuY29kZXJgIGNsYXNzIGlzIHVzZWQgZm9yIGVuY29kaW5nIGFuIGlucHV0IGluIG11bHRpcGxlCiBzdGVwcy4gSXQgZGVmaW5lcyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgd2hpY2ggZXZlcnkgaW5jcmVtZW50YWwgZW5jb2RlciBtdXN0CiBkZWZpbmUgaW4gb3JkZXIgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBQeXRob24gY29kZWMgcmVnaXN0cnkuCiAKIAotLi4gY2xhc3M6OiBJbmNyZW1lbnRhbEVuY29kZXIoW2Vycm9yc10pCisuLiBjbGFzczo6IEluY3JlbWVudGFsRW5jb2RlcihlcnJvcnM9J3N0cmljdCcpCiAKICAgIENvbnN0cnVjdG9yIGZvciBhbiA6Y2xhc3M6YEluY3JlbWVudGFsRW5jb2RlcmAgaW5zdGFuY2UuCiAKQEAgLTQ1OCwyNiArNTAxLDE0IEBACiAgICB0aGUgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5LgogCiAgICBUaGUgOmNsYXNzOmBJbmNyZW1lbnRhbEVuY29kZXJgIG1heSBpbXBsZW1lbnQgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nIHNjaGVtZXMKLSAgIGJ5IHByb3ZpZGluZyB0aGUgKmVycm9ycyoga2V5d29yZCBhcmd1bWVudC4gVGhlc2UgcGFyYW1ldGVycyBhcmUgcHJlZGVmaW5lZDoKLQotICAgKiBgYCdzdHJpY3QnYGAgUmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAgKG9yIGEgc3ViY2xhc3MpOyB0aGlzIGlzIHRoZSBkZWZhdWx0LgotCi0gICAqIGBgJ2lnbm9yZSdgYCBJZ25vcmUgdGhlIGNoYXJhY3RlciBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dC4KLQotICAgKiBgYCdyZXBsYWNlJ2BgIFJlcGxhY2Ugd2l0aCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50IGNoYXJhY3RlcgotCi0gICAqIGBgJ3htbGNoYXJyZWZyZXBsYWNlJ2BgIFJlcGxhY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlciByZWZlcmVuY2UKLQotICAgKiBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIFJlcGxhY2Ugd2l0aCBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2VzLgorICAgYnkgcHJvdmlkaW5nIHRoZSAqZXJyb3JzKiBrZXl3b3JkIGFyZ3VtZW50LiBTZWUgOnJlZjpgZXJyb3ItaGFuZGxlcnNgIGZvcgorICAgcG9zc2libGUgdmFsdWVzLgogCiAgICBUaGUgKmVycm9ycyogYXJndW1lbnQgd2lsbCBiZSBhc3NpZ25lZCB0byBhbiBhdHRyaWJ1dGUgb2YgdGhlIHNhbWUgbmFtZS4KICAgIEFzc2lnbmluZyB0byB0aGlzIGF0dHJpYnV0ZSBtYWtlcyBpdCBwb3NzaWJsZSB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgZXJyb3IKICAgIGhhbmRsaW5nIHN0cmF0ZWdpZXMgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgOmNsYXNzOmBJbmNyZW1lbnRhbEVuY29kZXJgCiAgICBvYmplY3QuCiAKLSAgIFRoZSBzZXQgb2YgYWxsb3dlZCB2YWx1ZXMgZm9yIHRoZSAqZXJyb3JzKiBhcmd1bWVudCBjYW4gYmUgZXh0ZW5kZWQgd2l0aAotICAgOmZ1bmM6YHJlZ2lzdGVyX2Vycm9yYC4KLQogCiAgICAuLiBtZXRob2Q6OiBlbmNvZGUob2JqZWN0WywgZmluYWxdKQogCkBAIC00ODksNyArNTIwLDggQEAKICAgIC4uIG1ldGhvZDo6IHJlc2V0KCkKIAogICAgICAgUmVzZXQgdGhlIGVuY29kZXIgdG8gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBvdXRwdXQgaXMgZGlzY2FyZGVkOiBjYWxsCi0gICAgICBgYC5lbmNvZGUoJycsIGZpbmFsPVRydWUpYGAgdG8gcmVzZXQgdGhlIGVuY29kZXIgYW5kIHRvIGdldCB0aGUgb3V0cHV0LgorICAgICAgYGAuZW5jb2RlKG9iamVjdCwgZmluYWw9VHJ1ZSlgYCwgcGFzc2luZyBhbiBlbXB0eSBieXRlIG9yIHRleHQgc3RyaW5nCisgICAgICBpZiBuZWNlc3NhcnksIHRvIHJlc2V0IHRoZSBlbmNvZGVyIGFuZCB0byBnZXQgdGhlIG91dHB1dC4KIAogCiAuLiBtZXRob2Q6OiBJbmNyZW1lbnRhbEVuY29kZXIuZ2V0c3RhdGUoKQpAQCAtNTEwLDE0ICs1NDIsMTQgQEAKIC4uIF9pbmNyZW1lbnRhbC1kZWNvZGVyLW9iamVjdHM6CiAKIEluY3JlbWVudGFsRGVjb2RlciBPYmplY3RzCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogVGhlIDpjbGFzczpgSW5jcmVtZW50YWxEZWNvZGVyYCBjbGFzcyBpcyB1c2VkIGZvciBkZWNvZGluZyBhbiBpbnB1dCBpbiBtdWx0aXBsZQogc3RlcHMuIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzIHdoaWNoIGV2ZXJ5IGluY3JlbWVudGFsIGRlY29kZXIgbXVzdAogZGVmaW5lIGluIG9yZGVyIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgUHl0aG9uIGNvZGVjIHJlZ2lzdHJ5LgogCiAKLS4uIGNsYXNzOjogSW5jcmVtZW50YWxEZWNvZGVyKFtlcnJvcnNdKQorLi4gY2xhc3M6OiBJbmNyZW1lbnRhbERlY29kZXIoZXJyb3JzPSdzdHJpY3QnKQogCiAgICBDb25zdHJ1Y3RvciBmb3IgYW4gOmNsYXNzOmBJbmNyZW1lbnRhbERlY29kZXJgIGluc3RhbmNlLgogCkBAIC01MjYsMjIgKzU1OCwxNCBAQAogICAgdGhlIFB5dGhvbiBjb2RlYyByZWdpc3RyeS4KIAogICAgVGhlIDpjbGFzczpgSW5jcmVtZW50YWxEZWNvZGVyYCBtYXkgaW1wbGVtZW50IGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWVzCi0gICBieSBwcm92aWRpbmcgdGhlICplcnJvcnMqIGtleXdvcmQgYXJndW1lbnQuIFRoZXNlIHBhcmFtZXRlcnMgYXJlIHByZWRlZmluZWQ6Ci0KLSAgICogYGAnc3RyaWN0J2BgIFJhaXNlIDpleGM6YFZhbHVlRXJyb3JgIChvciBhIHN1YmNsYXNzKTsgdGhpcyBpcyB0aGUgZGVmYXVsdC4KLQotICAgKiBgYCdpZ25vcmUnYGAgSWdub3JlIHRoZSBjaGFyYWN0ZXIgYW5kIGNvbnRpbnVlIHdpdGggdGhlIG5leHQuCi0KLSAgICogYGAncmVwbGFjZSdgYCBSZXBsYWNlIHdpdGggYSBzdWl0YWJsZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIuCisgICBieSBwcm92aWRpbmcgdGhlICplcnJvcnMqIGtleXdvcmQgYXJndW1lbnQuIFNlZSA6cmVmOmBlcnJvci1oYW5kbGVyc2AgZm9yCisgICBwb3NzaWJsZSB2YWx1ZXMuCiAKICAgIFRoZSAqZXJyb3JzKiBhcmd1bWVudCB3aWxsIGJlIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSBvZiB0aGUgc2FtZSBuYW1lLgogICAgQXNzaWduaW5nIHRvIHRoaXMgYXR0cmlidXRlIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBlcnJvcgogICAgaGFuZGxpbmcgc3RyYXRlZ2llcyBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIHRoZSA6Y2xhc3M6YEluY3JlbWVudGFsRGVjb2RlcmAKICAgIG9iamVjdC4KIAotICAgVGhlIHNldCBvZiBhbGxvd2VkIHZhbHVlcyBmb3IgdGhlICplcnJvcnMqIGFyZ3VtZW50IGNhbiBiZSBleHRlbmRlZCB3aXRoCi0gICA6ZnVuYzpgcmVnaXN0ZXJfZXJyb3JgLgotCiAKICAgIC4uIG1ldGhvZDo6IGRlY29kZShvYmplY3RbLCBmaW5hbF0pCiAKQEAgLTU4MCw2ICs2MDQsMTAgQEAKICAgICAgIHJldHVybmVkIGJ5IDptZXRoOmBnZXRzdGF0ZWAuCiAKIAorU3RyZWFtIEVuY29kaW5nIGFuZCBEZWNvZGluZworXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCisKIFRoZSA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgYW5kIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBjbGFzc2VzIHByb3ZpZGUgZ2VuZXJpYwogd29ya2luZyBpbnRlcmZhY2VzIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBuZXcgZW5jb2Rpbmcgc3VibW9kdWxlcyB2ZXJ5CiBlYXNpbHkuIFNlZSA6bW9kOmBlbmNvZGluZ3MudXRmXzhgIGZvciBhbiBleGFtcGxlIG9mIGhvdyB0aGlzIGlzIGRvbmUuCkBAIC01ODgsMTQgKzYxNiwxNCBAQAogLi4gX3N0cmVhbS13cml0ZXItb2JqZWN0czoKIAogU3RyZWFtV3JpdGVyIE9iamVjdHMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eCit+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiBUaGUgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBDb2RlY2AgYW5kIGRlZmluZXMgdGhlCiBmb2xsb3dpbmcgbWV0aG9kcyB3aGljaCBldmVyeSBzdHJlYW0gd3JpdGVyIG11c3QgZGVmaW5lIGluIG9yZGVyIHRvIGJlCiBjb21wYXRpYmxlIHdpdGggdGhlIFB5dGhvbiBjb2RlYyByZWdpc3RyeS4KIAogCi0uLiBjbGFzczo6IFN0cmVhbVdyaXRlcihzdHJlYW1bLCBlcnJvcnNdKQorLi4gY2xhc3M6OiBTdHJlYW1Xcml0ZXIoc3RyZWFtLCBlcnJvcnM9J3N0cmljdCcpCiAKICAgIENvbnN0cnVjdG9yIGZvciBhIDpjbGFzczpgU3RyZWFtV3JpdGVyYCBpbnN0YW5jZS4KIApAQCAtNjAzLDI5ICs2MzEsMTcgQEAKICAgIGFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMsIGJ1dCBvbmx5IHRoZSBvbmVzIGRlZmluZWQgaGVyZSBhcmUgdXNlZCBieSB0aGUKICAgIFB5dGhvbiBjb2RlYyByZWdpc3RyeS4KIAotICAgKnN0cmVhbSogbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3Qgb3BlbiBmb3Igd3JpdGluZyBiaW5hcnkgZGF0YS4KKyAgIFRoZSAqc3RyZWFtKiBhcmd1bWVudCBtdXN0IGJlIGEgZmlsZS1saWtlIG9iamVjdCBvcGVuIGZvciB3cml0aW5nCisgICB0ZXh0IG9yIGJpbmFyeSBkYXRhLCBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHNwZWNpZmljIGNvZGVjLgogCiAgICBUaGUgOmNsYXNzOmBTdHJlYW1Xcml0ZXJgIG1heSBpbXBsZW1lbnQgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nIHNjaGVtZXMgYnkKLSAgIHByb3ZpZGluZyB0aGUgKmVycm9ycyoga2V5d29yZCBhcmd1bWVudC4gVGhlc2UgcGFyYW1ldGVycyBhcmUgcHJlZGVmaW5lZDoKLQotICAgKiBgYCdzdHJpY3QnYGAgUmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAgKG9yIGEgc3ViY2xhc3MpOyB0aGlzIGlzIHRoZSBkZWZhdWx0LgotCi0gICAqIGBgJ2lnbm9yZSdgYCBJZ25vcmUgdGhlIGNoYXJhY3RlciBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dC4KLQotICAgKiBgYCdyZXBsYWNlJ2BgIFJlcGxhY2Ugd2l0aCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50IGNoYXJhY3RlcgotCi0gICAqIGBgJ3htbGNoYXJyZWZyZXBsYWNlJ2BgIFJlcGxhY2Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgWE1MIGNoYXJhY3RlciByZWZlcmVuY2UKLQotICAgKiBgYCdiYWNrc2xhc2hyZXBsYWNlJ2BgIFJlcGxhY2Ugd2l0aCBiYWNrc2xhc2hlZCBlc2NhcGUgc2VxdWVuY2VzLgorICAgcHJvdmlkaW5nIHRoZSAqZXJyb3JzKiBrZXl3b3JkIGFyZ3VtZW50LiBTZWUgOnJlZjpgZXJyb3ItaGFuZGxlcnNgIGZvcgorICAgdGhlIHN0YW5kYXJkIGVycm9yIGhhbmRsZXJzIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBjb2RlYyBtYXkgc3VwcG9ydC4KIAogICAgVGhlICplcnJvcnMqIGFyZ3VtZW50IHdpbGwgYmUgYXNzaWduZWQgdG8gYW4gYXR0cmlidXRlIG9mIHRoZSBzYW1lIG5hbWUuCiAgICBBc3NpZ25pbmcgdG8gdGhpcyBhdHRyaWJ1dGUgbWFrZXMgaXQgcG9zc2libGUgdG8gc3dpdGNoIGJldHdlZW4gZGlmZmVyZW50IGVycm9yCiAgICBoYW5kbGluZyBzdHJhdGVnaWVzIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlIDpjbGFzczpgU3RyZWFtV3JpdGVyYCBvYmplY3QuCiAKLSAgIFRoZSBzZXQgb2YgYWxsb3dlZCB2YWx1ZXMgZm9yIHRoZSAqZXJyb3JzKiBhcmd1bWVudCBjYW4gYmUgZXh0ZW5kZWQgd2l0aAotICAgOmZ1bmM6YHJlZ2lzdGVyX2Vycm9yYC4KLQotCiAgICAuLiBtZXRob2Q6OiB3cml0ZShvYmplY3QpCiAKICAgICAgIFdyaXRlcyB0aGUgb2JqZWN0J3MgY29udGVudHMgZW5jb2RlZCB0byB0aGUgc3RyZWFtLgpAQCAtNjM0LDcgKzY1MCw4IEBACiAgICAuLiBtZXRob2Q6OiB3cml0ZWxpbmVzKGxpc3QpCiAKICAgICAgIFdyaXRlcyB0aGUgY29uY2F0ZW5hdGVkIGxpc3Qgb2Ygc3RyaW5ncyB0byB0aGUgc3RyZWFtIChwb3NzaWJseSBieSByZXVzaW5nCi0gICAgICB0aGUgOm1ldGg6YHdyaXRlYCBtZXRob2QpLgorICAgICAgdGhlIDptZXRoOmB3cml0ZWAgbWV0aG9kKS4gVGhlIHN0YW5kYXJkIGJ5dGVzLXRvLWJ5dGVzIGNvZGVjcworICAgICAgZG8gbm90IHN1cHBvcnQgdGhpcyBtZXRob2QuCiAKIAogICAgLi4gbWV0aG9kOjogcmVzZXQoKQpAQCAtNjUzLDE0ICs2NzAsMTQgQEAKIC4uIF9zdHJlYW0tcmVhZGVyLW9iamVjdHM6CiAKIFN0cmVhbVJlYWRlciBPYmplY3RzCi1eXl5eXl5eXl5eXl5eXl5eXl5eXgorfn5+fn5+fn5+fn5+fn5+fn5+fn4KIAogVGhlIDpjbGFzczpgU3RyZWFtUmVhZGVyYCBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgQ29kZWNgIGFuZCBkZWZpbmVzIHRoZQogZm9sbG93aW5nIG1ldGhvZHMgd2hpY2ggZXZlcnkgc3RyZWFtIHJlYWRlciBtdXN0IGRlZmluZSBpbiBvcmRlciB0byBiZQogY29tcGF0aWJsZSB3aXRoIHRoZSBQeXRob24gY29kZWMgcmVnaXN0cnkuCiAKIAotLi4gY2xhc3M6OiBTdHJlYW1SZWFkZXIoc3RyZWFtWywgZXJyb3JzXSkKKy4uIGNsYXNzOjogU3RyZWFtUmVhZGVyKHN0cmVhbSwgZXJyb3JzPSdzdHJpY3QnKQogCiAgICBDb25zdHJ1Y3RvciBmb3IgYSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgaW5zdGFuY2UuCiAKQEAgLTY2OCwxNiArNjg1LDEyIEBACiAgICBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLCBidXQgb25seSB0aGUgb25lcyBkZWZpbmVkIGhlcmUgYXJlIHVzZWQgYnkgdGhlCiAgICBQeXRob24gY29kZWMgcmVnaXN0cnkuCiAKLSAgICpzdHJlYW0qIG11c3QgYmUgYSBmaWxlLWxpa2Ugb2JqZWN0IG9wZW4gZm9yIHJlYWRpbmcgKGJpbmFyeSkgZGF0YS4KKyAgIFRoZSAqc3RyZWFtKiBhcmd1bWVudCBtdXN0IGJlIGEgZmlsZS1saWtlIG9iamVjdCBvcGVuIGZvciByZWFkaW5nCisgICB0ZXh0IG9yIGJpbmFyeSBkYXRhLCBhcyBhcHByb3ByaWF0ZSBmb3IgdGhlIHNwZWNpZmljIGNvZGVjLgogCiAgICBUaGUgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIG1heSBpbXBsZW1lbnQgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nIHNjaGVtZXMgYnkKLSAgIHByb3ZpZGluZyB0aGUgKmVycm9ycyoga2V5d29yZCBhcmd1bWVudC4gVGhlc2UgcGFyYW1ldGVycyBhcmUgZGVmaW5lZDoKLQotICAgKiBgYCdzdHJpY3QnYGAgUmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAgKG9yIGEgc3ViY2xhc3MpOyB0aGlzIGlzIHRoZSBkZWZhdWx0LgotCi0gICAqIGBgJ2lnbm9yZSdgYCBJZ25vcmUgdGhlIGNoYXJhY3RlciBhbmQgY29udGludWUgd2l0aCB0aGUgbmV4dC4KLQotICAgKiBgYCdyZXBsYWNlJ2BgIFJlcGxhY2Ugd2l0aCBhIHN1aXRhYmxlIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4KKyAgIHByb3ZpZGluZyB0aGUgKmVycm9ycyoga2V5d29yZCBhcmd1bWVudC4gU2VlIDpyZWY6YGVycm9yLWhhbmRsZXJzYCBmb3IKKyAgIHRoZSBzdGFuZGFyZCBlcnJvciBoYW5kbGVycyB0aGUgdW5kZXJseWluZyBzdHJlYW0gY29kZWMgbWF5IHN1cHBvcnQuCiAKICAgIFRoZSAqZXJyb3JzKiBhcmd1bWVudCB3aWxsIGJlIGFzc2lnbmVkIHRvIGFuIGF0dHJpYnV0ZSBvZiB0aGUgc2FtZSBuYW1lLgogICAgQXNzaWduaW5nIHRvIHRoaXMgYXR0cmlidXRlIG1ha2VzIGl0IHBvc3NpYmxlIHRvIHN3aXRjaCBiZXR3ZWVuIGRpZmZlcmVudCBlcnJvcgpAQCAtNjkxLDE3ICs3MDQsMjAgQEAKIAogICAgICAgRGVjb2RlcyBkYXRhIGZyb20gdGhlIHN0cmVhbSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIG9iamVjdC4KIAotICAgICAgKmNoYXJzKiBpbmRpY2F0ZXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHJlYWQgZnJvbSB0aGUKLSAgICAgIHN0cmVhbS4gOmZ1bmM6YHJlYWRgIHdpbGwgbmV2ZXIgcmV0dXJuIG1vcmUgdGhhbiAqY2hhcnMqIGNoYXJhY3RlcnMsIGJ1dAotICAgICAgaXQgbWlnaHQgcmV0dXJuIGxlc3MsIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIGNoYXJhY3RlcnMgYXZhaWxhYmxlLgorICAgICAgVGhlICpjaGFycyogYXJndW1lbnQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZGVjb2RlZAorICAgICAgY29kZSBwb2ludHMgb3IgYnl0ZXMgdG8gcmV0dXJuLiBUaGUgOmZ1bmM6YHJlYWRgIG1ldGhvZCB3aWxsCisgICAgICBuZXZlciByZXR1cm4gbW9yZSBkYXRhIHRoYW4gcmVxdWVzdGVkLCBidXQgaXQgbWlnaHQgcmV0dXJuIGxlc3MsCisgICAgICBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIGF2YWlsYWJsZS4KIAotICAgICAgKnNpemUqIGluZGljYXRlcyB0aGUgYXBwcm94aW1hdGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZCBmcm9tIHRoZQotICAgICAgc3RyZWFtIGZvciBkZWNvZGluZyBwdXJwb3Nlcy4gVGhlIGRlY29kZXIgY2FuIG1vZGlmeSB0aGlzIHNldHRpbmcgYXMKKyAgICAgIFRoZSAqc2l6ZSogYXJndW1lbnQgaW5kaWNhdGVzIHRoZSBhcHByb3hpbWF0ZSBtYXhpbXVtCisgICAgICBudW1iZXIgb2YgZW5jb2RlZCBieXRlcyBvciBjb2RlIHBvaW50cyB0byByZWFkCisgICAgICBmb3IgZGVjb2RpbmcuIFRoZSBkZWNvZGVyIGNhbiBtb2RpZnkgdGhpcyBzZXR0aW5nIGFzCiAgICAgICBhcHByb3ByaWF0ZS4gVGhlIGRlZmF1bHQgdmFsdWUgLTEgaW5kaWNhdGVzIHRvIHJlYWQgYW5kIGRlY29kZSBhcyBtdWNoIGFzCi0gICAgICBwb3NzaWJsZS4gICpzaXplKiBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGhhdmluZyB0byBkZWNvZGUgaHVnZSBmaWxlcyBpbgotICAgICAgb25lIHN0ZXAuCisgICAgICBwb3NzaWJsZS4gIFRoaXMgcGFyYW1ldGVyIGlzIGludGVuZGVkIHRvCisgICAgICBwcmV2ZW50IGhhdmluZyB0byBkZWNvZGUgaHVnZSBmaWxlcyBpbiBvbmUgc3RlcC4KIAotICAgICAgKmZpcnN0bGluZSogaW5kaWNhdGVzIHRoYXQgaXQgd291bGQgYmUgc3VmZmljaWVudCB0byBvbmx5IHJldHVybiB0aGUgZmlyc3QKKyAgICAgIFRoZSAqZmlyc3RsaW5lKiBmbGFnIGluZGljYXRlcyB0aGF0CisgICAgICBpdCB3b3VsZCBiZSBzdWZmaWNpZW50IHRvIG9ubHkgcmV0dXJuIHRoZSBmaXJzdAogICAgICAgbGluZSwgaWYgdGhlcmUgYXJlIGRlY29kaW5nIGVycm9ycyBvbiBsYXRlciBsaW5lcy4KIAogICAgICAgVGhlIG1ldGhvZCBzaG91bGQgdXNlIGEgZ3JlZWR5IHJlYWQgc3RyYXRlZ3kgbWVhbmluZyB0aGF0IGl0IHNob3VsZCByZWFkCkBAIC03NDQsMTcgKzc2MCwxMyBAQAogSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIG1ldGhvZHMsIHRoZSA6Y2xhc3M6YFN0cmVhbVJlYWRlcmAgbXVzdCBhbHNvIGluaGVyaXQKIGFsbCBvdGhlciBtZXRob2RzIGFuZCBhdHRyaWJ1dGVzIGZyb20gdGhlIHVuZGVybHlpbmcgc3RyZWFtLgogCi1UaGUgbmV4dCB0d28gYmFzZSBjbGFzc2VzIGFyZSBpbmNsdWRlZCBmb3IgY29udmVuaWVuY2UuIFRoZXkgYXJlIG5vdCBuZWVkZWQgYnkKLXRoZSBjb2RlYyByZWdpc3RyeSwgYnV0IG1heSBwcm92aWRlIHVzZWZ1bCBpbiBwcmFjdGljZS4KLQotCiAuLiBfc3RyZWFtLXJlYWRlci13cml0ZXI6CiAKIFN0cmVhbVJlYWRlcldyaXRlciBPYmplY3RzCi1eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotVGhlIDpjbGFzczpgU3RyZWFtUmVhZGVyV3JpdGVyYCBhbGxvd3Mgd3JhcHBpbmcgc3RyZWFtcyB3aGljaCB3b3JrIGluIGJvdGggcmVhZAotYW5kIHdyaXRlIG1vZGVzLgorVGhlIDpjbGFzczpgU3RyZWFtUmVhZGVyV3JpdGVyYCBpcyBhIGNvbnZlbmllbmNlIGNsYXNzIHRoYXQgYWxsb3dzIHdyYXBwaW5nCitzdHJlYW1zIHdoaWNoIHdvcmsgaW4gYm90aCByZWFkIGFuZCB3cml0ZSBtb2Rlcy4KIAogVGhlIGRlc2lnbiBpcyBzdWNoIHRoYXQgb25lIGNhbiB1c2UgdGhlIGZhY3RvcnkgZnVuY3Rpb25zIHJldHVybmVkIGJ5IHRoZQogOmZ1bmM6YGxvb2t1cGAgZnVuY3Rpb24gdG8gY29uc3RydWN0IHRoZSBpbnN0YW5jZS4KQEAgLTc3NSw5ICs3ODcsOSBAQAogLi4gX3N0cmVhbS1yZWNvZGVyLW9iamVjdHM6CiAKIFN0cmVhbVJlY29kZXIgT2JqZWN0cwotXl5eXl5eXl5eXl5eXl5eXl5eXl5eCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotVGhlIDpjbGFzczpgU3RyZWFtUmVjb2RlcmAgcHJvdmlkZSBhIGZyb250ZW5kIC0gYmFja2VuZCB2aWV3IG9mIGVuY29kaW5nIGRhdGEKK1RoZSA6Y2xhc3M6YFN0cmVhbVJlY29kZXJgIHRyYW5zbGF0ZXMgZGF0YSBmcm9tIG9uZSBlbmNvZGluZyB0byBhbm90aGVyLAogd2hpY2ggaXMgc29tZXRpbWVzIHVzZWZ1bCB3aGVuIGRlYWxpbmcgd2l0aCBkaWZmZXJlbnQgZW5jb2RpbmcgZW52aXJvbm1lbnRzLgogCiBUaGUgZGVzaWduIGlzIHN1Y2ggdGhhdCBvbmUgY2FuIHVzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbnMgcmV0dXJuZWQgYnkgdGhlCkBAIC03ODcsMjIgKzc5OSwyMCBAQAogLi4gY2xhc3M6OiBTdHJlYW1SZWNvZGVyKHN0cmVhbSwgZW5jb2RlLCBkZWNvZGUsIFJlYWRlciwgV3JpdGVyLCBlcnJvcnMpCiAKICAgIENyZWF0ZXMgYSA6Y2xhc3M6YFN0cmVhbVJlY29kZXJgIGluc3RhbmNlIHdoaWNoIGltcGxlbWVudHMgYSB0d28td2F5IGNvbnZlcnNpb246Ci0gICAqZW5jb2RlKiBhbmQgKmRlY29kZSogd29yayBvbiB0aGUgZnJvbnRlbmQgKHRoZSBpbnB1dCB0byA6bWV0aDpgcmVhZGAgYW5kIG91dHB1dAotICAgb2YgOm1ldGg6YHdyaXRlYCkgd2hpbGUgKlJlYWRlciogYW5kICpXcml0ZXIqIHdvcmsgb24gdGhlIGJhY2tlbmQgKHJlYWRpbmcgYW5kCi0gICB3cml0aW5nIHRvIHRoZSBzdHJlYW0pLgorICAgKmVuY29kZSogYW5kICpkZWNvZGUqIHdvcmsgb24gdGhlIGZyb250ZW5kwqDigJQgdGhlIGRhdGEgdmlzaWJsZSB0bworICAgY29kZSBjYWxsaW5nIDptZXRoOmByZWFkYCBhbmQgOm1ldGg6YHdyaXRlYCwgd2hpbGUgKlJlYWRlciogYW5kICpXcml0ZXIqCisgICB3b3JrIG9uIHRoZSBiYWNrZW5kwqDigJQgdGhlIGRhdGEgaW4gKnN0cmVhbSouCiAKLSAgIFlvdSBjYW4gdXNlIHRoZXNlIG9iamVjdHMgdG8gZG8gdHJhbnNwYXJlbnQgZGlyZWN0IHJlY29kaW5ncyBmcm9tIGUuZy4gTGF0aW4tMQorICAgWW91IGNhbiB1c2UgdGhlc2Ugb2JqZWN0cyB0byBkbyB0cmFuc3BhcmVudCB0cmFuc2NvZGluZ3MgZnJvbSBlLmcuIExhdGluLTEKICAgIHRvIFVURi04IGFuZCBiYWNrLgogCi0gICAqc3RyZWFtKiBtdXN0IGJlIGEgZmlsZS1saWtlIG9iamVjdC4KKyAgIFRoZSAqc3RyZWFtKiBhcmd1bWVudCBtdXN0IGJlIGEgZmlsZS1saWtlIG9iamVjdC4KIAotICAgKmVuY29kZSosICpkZWNvZGUqIG11c3QgYWRoZXJlIHRvIHRoZSA6Y2xhc3M6YENvZGVjYCBpbnRlcmZhY2UuICpSZWFkZXIqLAorICAgVGhlICplbmNvZGUqIGFuZCAqZGVjb2RlKiBhcmd1bWVudHMgbXVzdAorICAgYWRoZXJlIHRvIHRoZSA6Y2xhc3M6YENvZGVjYCBpbnRlcmZhY2UuICpSZWFkZXIqIGFuZAogICAgKldyaXRlciogbXVzdCBiZSBmYWN0b3J5IGZ1bmN0aW9ucyBvciBjbGFzc2VzIHByb3ZpZGluZyBvYmplY3RzIG9mIHRoZQogICAgOmNsYXNzOmBTdHJlYW1SZWFkZXJgIGFuZCA6Y2xhc3M6YFN0cmVhbVdyaXRlcmAgaW50ZXJmYWNlIHJlc3BlY3RpdmVseS4KIAotICAgKmVuY29kZSogYW5kICpkZWNvZGUqIGFyZSBuZWVkZWQgZm9yIHRoZSBmcm9udGVuZCB0cmFuc2xhdGlvbiwgKlJlYWRlciogYW5kCi0gICAqV3JpdGVyKiBmb3IgdGhlIGJhY2tlbmQgdHJhbnNsYXRpb24uCi0KICAgIEVycm9yIGhhbmRsaW5nIGlzIGRvbmUgaW4gdGhlIHNhbWUgd2F5IGFzIGRlZmluZWQgZm9yIHRoZSBzdHJlYW0gcmVhZGVycyBhbmQKICAgIHdyaXRlcnMuCiAKQEAgLTgxNywzMSArODI3LDM0IEBACiBFbmNvZGluZ3MgYW5kIFVuaWNvZGUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TdHJpbmdzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBhcyBzZXF1ZW5jZXMgb2YgY29kZXBvaW50cyBpbiByYW5nZSBgYDAgLSAxMEZGRkZgYAotKHNlZSA6cGVwOmAzOTNgIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uKS4KLU9uY2UgYSBzdHJpbmcgb2JqZWN0IGlzIHVzZWQgb3V0c2lkZSBvZiBDUFUgYW5kIG1lbW9yeSwgQ1BVIGVuZGlhbm5lc3MKLWFuZCBob3cgdGhlc2UgYXJyYXlzIGFyZSBzdG9yZWQgYXMgYnl0ZXMgYmVjb21lIGFuIGlzc3VlLiAgVHJhbnNmb3JtaW5nIGEKLXN0cmluZyBvYmplY3QgaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIGlzIGNhbGxlZCBlbmNvZGluZyBhbmQgcmVjcmVhdGluZyB0aGUKLXN0cmluZyBvYmplY3QgZnJvbSB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgaXMga25vd24gYXMgZGVjb2RpbmcuICBUaGVyZSBhcmUgbWFueQotZGlmZmVyZW50IG1ldGhvZHMgZm9yIGhvdyB0aGlzIHRyYW5zZm9ybWF0aW9uIGNhbiBiZSBkb25lICh0aGVzZSBtZXRob2RzIGFyZQotYWxzbyBjYWxsZWQgZW5jb2RpbmdzKS4gVGhlIHNpbXBsZXN0IG1ldGhvZCBpcyB0byBtYXAgdGhlIGNvZGVwb2ludHMgMC0yNTUgdG8KLXRoZSBieXRlcyBgYDB4MGBgLWBgMHhmZmBgLiBUaGlzIG1lYW5zIHRoYXQgYSBzdHJpbmcgb2JqZWN0IHRoYXQgY29udGFpbnMKLWNvZGVwb2ludHMgYWJvdmUgYGBVKzAwRkZgYCBjYW4ndCBiZSBlbmNvZGVkIHdpdGggdGhpcyBtZXRob2QgKHdoaWNoIGlzIGNhbGxlZAotYGAnbGF0aW4tMSdgYCBvciBgYCdpc28tODg1OS0xJ2BgKS4gOmZ1bmM6YHN0ci5lbmNvZGVgIHdpbGwgcmFpc2UgYQotOmV4YzpgVW5pY29kZUVuY29kZUVycm9yYCB0aGF0IGxvb2tzIGxpa2UgdGhpczogYGBVbmljb2RlRW5jb2RlRXJyb3I6ICdsYXRpbi0xJwotY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlciAnXHUxMjM0JyBpbiBwb3NpdGlvbiAzOiBvcmRpbmFsIG5vdCBpbgotcmFuZ2UoMjU2KWBgLgorU3RyaW5ncyBhcmUgc3RvcmVkIGludGVybmFsbHkgYXMgc2VxdWVuY2VzIG9mIGNvZGUgcG9pbnRzIGluCityYW5nZSBgYDB4MGBgLWBgMHgxMEZGRkZgYC4gIChTZWUgOnBlcDpgMzkzYCBmb3IKK21vcmUgZGV0YWlscyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb24uKQorT25jZSBhIHN0cmluZyBvYmplY3QgaXMgdXNlZCBvdXRzaWRlIG9mIENQVSBhbmQgbWVtb3J5LCBlbmRpYW5uZXNzCithbmQgaG93IHRoZXNlIGFycmF5cyBhcmUgc3RvcmVkIGFzIGJ5dGVzIGJlY29tZSBhbiBpc3N1ZS4gIEFzIHdpdGggb3RoZXIKK2NvZGVjcywgc2VyaWFsaXNpbmcgYSBzdHJpbmcgaW50byBhIHNlcXVlbmNlIG9mIGJ5dGVzIGlzIGtub3duIGFzICplbmNvZGluZyosCithbmQgcmVjcmVhdGluZyB0aGUgc3RyaW5nIGZyb20gdGhlIHNlcXVlbmNlIG9mIGJ5dGVzIGlzIGtub3duIGFzICpkZWNvZGluZyouCitUaGVyZSBhcmUgYSB2YXJpZXR5IG9mIGRpZmZlcmVudCB0ZXh0IHNlcmlhbGlzYXRpb24gY29kZWNzLCB3aGljaCBhcmUKK2NvbGxlY3Rpdml0eSByZWZlcnJlZCB0byBhcyA6dGVybTpgdGV4dCBlbmNvZGluZ3MgPHRleHQgZW5jb2Rpbmc+YC4KKworVGhlIHNpbXBsZXN0IHRleHQgZW5jb2RpbmcgKGNhbGxlZCBgYCdsYXRpbi0xJ2BgIG9yIGBgJ2lzby04ODU5LTEnYGApIG1hcHMKK3RoZSBjb2RlIHBvaW50cyAwLTI1NSB0byB0aGUgYnl0ZXMgYGAweDBgYC1gYDB4ZmZgYCwgd2hpY2ggbWVhbnMgdGhhdCBhIHN0cmluZworb2JqZWN0IHRoYXQgY29udGFpbnMgY29kZSBwb2ludHMgYWJvdmUgYGBVKzAwRkZgYCBjYW4ndCBiZSBlbmNvZGVkIHdpdGggdGhpcworY29kZWMuIERvaW5nIHNvIHdpbGwgcmFpc2UgYSA6ZXhjOmBVbmljb2RlRW5jb2RlRXJyb3JgIHRoYXQgbG9va3MKK2xpa2UgdGhlIGZvbGxvd2luZyAoYWx0aG91Z2ggdGhlIGRldGFpbHMgb2YgdGhlIGVycm9yIG1lc3NhZ2UgbWF5IGRpZmZlcik6CitgYFVuaWNvZGVFbmNvZGVFcnJvcjogJ2xhdGluLTEnIGNvZGVjIGNhbid0IGVuY29kZSBjaGFyYWN0ZXIgJ1x1MTIzNCcgaW4KK3Bvc2l0aW9uIDM6IG9yZGluYWwgbm90IGluIHJhbmdlKDI1NilgYC4KIAogVGhlcmUncyBhbm90aGVyIGdyb3VwIG9mIGVuY29kaW5ncyAodGhlIHNvIGNhbGxlZCBjaGFybWFwIGVuY29kaW5ncykgdGhhdCBjaG9vc2UKLWEgZGlmZmVyZW50IHN1YnNldCBvZiBhbGwgVW5pY29kZSBjb2RlIHBvaW50cyBhbmQgaG93IHRoZXNlIGNvZGVwb2ludHMgYXJlCithIGRpZmZlcmVudCBzdWJzZXQgb2YgYWxsIFVuaWNvZGUgY29kZSBwb2ludHMgYW5kIGhvdyB0aGVzZSBjb2RlIHBvaW50cyBhcmUKIG1hcHBlZCB0byB0aGUgYnl0ZXMgYGAweDBgYC1gYDB4ZmZgYC4gVG8gc2VlIGhvdyB0aGlzIGlzIGRvbmUgc2ltcGx5IG9wZW4KIGUuZy4gOmZpbGU6YGVuY29kaW5ncy9jcDEyNTIucHlgICh3aGljaCBpcyBhbiBlbmNvZGluZyB0aGF0IGlzIHVzZWQgcHJpbWFyaWx5IG9uCiBXaW5kb3dzKS4gVGhlcmUncyBhIHN0cmluZyBjb25zdGFudCB3aXRoIDI1NiBjaGFyYWN0ZXJzIHRoYXQgc2hvd3MgeW91IHdoaWNoCiBjaGFyYWN0ZXIgaXMgbWFwcGVkIHRvIHdoaWNoIGJ5dGUgdmFsdWUuCiAKLUFsbCBvZiB0aGVzZSBlbmNvZGluZ3MgY2FuIG9ubHkgZW5jb2RlIDI1NiBvZiB0aGUgMTExNDExMiBjb2RlcG9pbnRzCitBbGwgb2YgdGhlc2UgZW5jb2RpbmdzIGNhbiBvbmx5IGVuY29kZSAyNTYgb2YgdGhlIDExMTQxMTIgY29kZSBwb2ludHMKIGRlZmluZWQgaW4gVW5pY29kZS4gQSBzaW1wbGUgYW5kIHN0cmFpZ2h0Zm9yd2FyZCB3YXkgdGhhdCBjYW4gc3RvcmUgZWFjaCBVbmljb2RlCi1jb2RlIHBvaW50LCBpcyB0byBzdG9yZSBlYWNoIGNvZGVwb2ludCBhcyBmb3VyIGNvbnNlY3V0aXZlIGJ5dGVzLiBUaGVyZSBhcmUgdHdvCitjb2RlIHBvaW50LCBpcyB0byBzdG9yZSBlYWNoIGNvZGUgcG9pbnQgYXMgZm91ciBjb25zZWN1dGl2ZSBieXRlcy4gVGhlcmUgYXJlIHR3bwogcG9zc2liaWxpdGllczogc3RvcmUgdGhlIGJ5dGVzIGluIGJpZyBlbmRpYW4gb3IgaW4gbGl0dGxlIGVuZGlhbiBvcmRlci4gVGhlc2UKIHR3byBlbmNvZGluZ3MgYXJlIGNhbGxlZCBgYFVURi0zMi1CRWBgIGFuZCBgYFVURi0zMi1MRWBgIHJlc3BlY3RpdmVseS4gVGhlaXIKIGRpc2FkdmFudGFnZSBpcyB0aGF0IGlmIGUuZy4geW91IHVzZSBgYFVURi0zMi1CRWBgIG9uIGEgbGl0dGxlIGVuZGlhbiBtYWNoaW5lIHlvdQpAQCAtOTY2LDYgKzk3OSwxMCBAQAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDAzNyAgICAgICAgICAgfCBJQk0wMzcsIElCTTAzOSAgICAgICAgICAgICAgICAgfCBFbmdsaXNoICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBjcDI3MyAgICAgICAgICAgfCAyNzMsIElCTTI3MywgY3NJQk0yNzMgICAgICAgICAgfCBHZXJtYW4gICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDQyNCAgICAgICAgICAgfCBFQkNESUMtQ1AtSEUsIElCTTQyNCAgICAgICAgICAgfCBIZWJyZXcgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjcDQzNyAgICAgICAgICAgfCA0MzcsIElCTTQzNyAgICAgICAgICAgICAgICAgICAgfCBFbmdsaXNoICAgICAgICAgICAgICAgICAgICAgICAgfApAQCAtMTAyMiw2ICsxMDM5LDEwIEBACiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGNwMTAyNiAgICAgICAgICB8IGlibTEwMjYgICAgICAgICAgICAgICAgICAgICAgICB8IFR1cmtpc2ggICAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGNwMTEyNSAgICAgICAgICB8IDExMjUsIGlibTExMjUsIGNwODY2dSwgcnVzY2lpICB8IFVrcmFpbmlhbiAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IC4uIHZlcnNpb25hZGRlZDo6IDMuNCAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGNwMTE0MCAgICAgICAgICB8IGlibTExNDAgICAgICAgICAgICAgICAgICAgICAgICB8IFdlc3Rlcm4gRXVyb3BlICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGNwMTI1MCAgICAgICAgICB8IHdpbmRvd3MtMTI1MCAgICAgICAgICAgICAgICAgICB8IENlbnRyYWwgYW5kIEVhc3Rlcm4gRXVyb3BlICAgICB8CkBAIC0xMTA5LDYgKzExMzAsOCBAQAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBpc284ODU5XzEwICAgICAgfCBpc28tODg1OS0xMCwgbGF0aW42LCBMNiAgICAgICAgfCBOb3JkaWMgbGFuZ3VhZ2VzICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBpc284ODU5XzExICAgICAgfCBpc28tODg1OS0xMSwgdGhhaSAgICAgICAgICAgICAgfCBUaGFpIGxhbmd1YWdlcyAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBpc284ODU5XzEzICAgICAgfCBpc28tODg1OS0xMywgbGF0aW43LCBMNyAgICAgICAgfCBCYWx0aWMgbGFuZ3VhZ2VzICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBpc284ODU5XzE0ICAgICAgfCBpc28tODg1OS0xNCwgbGF0aW44LCBMOCAgICAgICAgfCBDZWx0aWMgbGFuZ3VhZ2VzICAgICAgICAgICAgICAgfApAQCAtMTE2Nyw2ICsxMTkwLDEzIEBACiB8IHV0Zl84X3NpZyAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsbCBsYW5ndWFnZXMgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgdXRmLTE2XCogYW5kIHV0Zi0zMlwqIGVuY29kZXJzIG5vIGxvbmdlciBhbGxvdyBzdXJyb2dhdGUgY29kZSBwb2ludHMKKyAgIChgYFUrRDgwMGBgLS1gYFUrREZGRmBgKSB0byBiZSBlbmNvZGVkLgorICAgVGhlIHV0Zi0zMlwqIGRlY29kZXJzIG5vIGxvbmdlciBkZWNvZGUKKyAgIGJ5dGUgc2VxdWVuY2VzIHRoYXQgY29ycmVzcG9uZCB0byBzdXJyb2dhdGUgY29kZSBwb2ludHMuCisKKwogUHl0aG9uIFNwZWNpZmljIEVuY29kaW5ncwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTc3LDYgKzEyMDcsOSBAQAogYXJiaXRyYXJ5IGRhdGEgdHJhbnNmb3JtcyByYXRoZXIgdGhhbiBqdXN0IHRleHQgZW5jb2RpbmdzKS4gIEZvciBhc3ltbWV0cmljCiBjb2RlY3MsIHRoZSBzdGF0ZWQgcHVycG9zZSBkZXNjcmliZXMgdGhlIGVuY29kaW5nIGRpcmVjdGlvbi4KIAorVGV4dCBFbmNvZGluZ3MKK15eXl5eXl5eXl5eXl5eCisKIFRoZSBmb2xsb3dpbmcgY29kZWNzIHByb3ZpZGUgOmNsYXNzOmBzdHJgIHRvIDpjbGFzczpgYnl0ZXNgIGVuY29kaW5nIGFuZAogOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCB0byA6Y2xhc3M6YHN0cmAgZGVjb2RpbmcsIHNpbWlsYXIgdG8gdGhlIFVuaWNvZGUgdGV4dAogZW5jb2RpbmdzLgpAQCAtMTE4OCw3ICsxMjIxLDkgQEAKICs9PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09KwogfCBpZG5hICAgICAgICAgICAgICAgfCAgICAgICAgIHwgSW1wbGVtZW50cyA6cmZjOmAzNDkwYCwgICB8CiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBzZWUgYWxzbyAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IDptb2Q6YGVuY29kaW5ncy5pZG5hYCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgOm1vZDpgZW5jb2RpbmdzLmlkbmFgLiAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBPbmx5IGBgZXJyb3JzPSdzdHJpY3QnYGAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGlzIHN1cHBvcnRlZC4gICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IG1iY3MgICAgICAgICAgICAgICB8IGRiY3MgICAgfCBXaW5kb3dzIG9ubHk6IEVuY29kZSAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IG9wZXJhbmQgYWNjb3JkaW5nIHRvIHRoZSAgfApAQCAtMTE5Niw4NCArMTIzMSwxMjUgQEAKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBwYWxtb3MgICAgICAgICAgICAgfCAgICAgICAgIHwgRW5jb2Rpbmcgb2YgUGFsbU9TIDMuNSAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgcHVueWNvZGUgICAgICAgICAgIHwgICAgICAgICB8IEltcGxlbWVudHMgOnJmYzpgMzQ5MmAgICAgfAorfCBwdW55Y29kZSAgICAgICAgICAgfCAgICAgICAgIHwgSW1wbGVtZW50cyA6cmZjOmAzNDkyYC4gICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBTdGF0ZWZ1bCBjb2RlY3MgYXJlIG5vdCAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IHN1cHBvcnRlZC4gICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHJhd191bmljb2RlX2VzY2FwZSB8ICAgICAgICAgfCBQcm9kdWNlIGEgc3RyaW5nIHRoYXQgaXMgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IHN1aXRhYmxlIGFzIHJhdyBVbmljb2RlICAgfAotfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgbGl0ZXJhbCBpbiBQeXRob24gc291cmNlICB8Ci18ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBjb2RlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgcmF3X3VuaWNvZGVfZXNjYXBlIHwgICAgICAgICB8IExhdGluLTEgZW5jb2Rpbmcgd2l0aCAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgYGBcdVhYWFhgYCBhbmQgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBgYFxVWFhYWFhYWFhgYCBmb3Igb3RoZXIgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGNvZGUgcG9pbnRzLiBFeGlzdGluZyAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgYmFja3NsYXNoZXMgYXJlIG5vdCAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBlc2NhcGVkIGluIGFueSB3YXkuICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IEl0IGlzIHVzZWQgaW4gdGhlIFB5dGhvbiAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgcGlja2xlIHByb3RvY29sLiAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgdW5kZWZpbmVkICAgICAgICAgIHwgICAgICAgICB8IFJhaXNlIGFuIGV4Y2VwdGlvbiBmb3IgICAgfAotfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgYWxsIGNvbnZlcnNpb25zLiBDYW4gYmUgICB8Ci18ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCB1c2VkIGFzIHRoZSBzeXN0ZW0gICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGVuY29kaW5nIGlmIG5vIGF1dG9tYXRpYyAgfAotfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgY29lcmNpb24gYmV0d2VlbiBieXRlIGFuZCB8Ci18ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBVbmljb2RlIHN0cmluZ3MgaXMgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGRlc2lyZWQuICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgYWxsIGNvbnZlcnNpb25zLCBldmVuICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBlbXB0eSBzdHJpbmdzLiBUaGUgZXJyb3IgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGhhbmRsZXIgaXMgaWdub3JlZC4gICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHVuaWNvZGVfZXNjYXBlICAgICB8ICAgICAgICAgfCBQcm9kdWNlIGEgc3RyaW5nIHRoYXQgaXMgIHwKLXwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IHN1aXRhYmxlIGFzIFVuaWNvZGUgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgbGl0ZXJhbCBpbiBQeXRob24gc291cmNlICB8Ci18ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBjb2RlICAgICAgICAgICAgICAgICAgICAgIHwKK3wgdW5pY29kZV9lc2NhcGUgICAgIHwgICAgICAgICB8IEVuY29kaW5nIHN1aXRhYmxlIGFzIHRoZSAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgY29udGVudHMgb2YgYSBVbmljb2RlICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBsaXRlcmFsIGluIEFTQ0lJLWVuY29kZWQgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IFB5dGhvbiBzb3VyY2UgY29kZSwgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgZXhjZXB0IHRoYXQgcXVvdGVzIGFyZSAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBub3QgZXNjYXBlZC4gRGVjb2RlcyBmcm9tIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IExhdGluLTEgc291cmNlIGNvZGUuICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgQmV3YXJlIHRoYXQgUHl0aG9uIHNvdXJjZSB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBjb2RlIGFjdHVhbGx5IHVzZXMgVVRGLTggIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGJ5IGRlZmF1bHQuICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IHVuaWNvZGVfaW50ZXJuYWwgICB8ICAgICAgICAgfCBSZXR1cm4gdGhlIGludGVybmFsICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IHJlcHJlc2VudGF0aW9uIG9mIHRoZSAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgb3BlcmFuZCAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCBvcGVyYW5kLiBTdGF0ZWZ1bCBjb2RlY3MgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8IGFyZSBub3Qgc3VwcG9ydGVkLiAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAuLiBkZXByZWNhdGVkOjogMy4zICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgIFRoaXMgcmVwcmVzZW50YXRpb24gaXMgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgICAgb2Jzb2xldGVkIGJ5ICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfCAgICA6cGVwOmAzOTNgLiAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi1UaGUgZm9sbG93aW5nIGNvZGVjcyBwcm92aWRlIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgdG8gOmNsYXNzOmBieXRlc2AKLW1hcHBpbmdzLgorLi4gX2JpbmFyeS10cmFuc2Zvcm1zOgorCitCaW5hcnkgVHJhbnNmb3JtcworXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSBiaW5hcnkgdHJhbnNmb3JtczogOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YAordG8gOmNsYXNzOmBieXRlc2AgbWFwcGluZ3MuICBUaGV5IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IDptZXRoOmBieXRlcy5kZWNvZGVgCisod2hpY2ggb25seSBwcm9kdWNlcyA6Y2xhc3M6YHN0cmAgb3V0cHV0KS4KIAogCi0uLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8THwKKy4uIHRhYnVsYXJjb2x1bW5zOjogfGx8THxMfEx8CiAKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IENvZGVjICAgICAgICAgICAgICAgIHwgUHVycG9zZSAgICAgICAgICAgICAgICAgICB8IEVuY29kZXIvZGVjb2RlciAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgYmFzZTY0X2NvZGVjIFsjYjY0XV8gfCBDb252ZXJ0IG9wZXJhbmQgdG8gTUlNRSAgIHwgOm1ldGg6YGJhc2U2NC5iNjRlbmNvZGVgLCAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgYmFzZTY0ICh0aGUgcmVzdWx0IGFsd2F5cyB8IDptZXRoOmBiYXNlNjQuYjY0ZGVjb2RlYCAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGluY2x1ZGVzIGEgdHJhaWxpbmcgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBgYCdcbidgYCkgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBiejJfY29kZWMgICAgICAgICAgICB8IENvbXByZXNzIHRoZSBvcGVyYW5kICAgICAgfCA6bWV0aDpgYnoyLmNvbXByZXNzYCwgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCB1c2luZyBiejIgICAgICAgICAgICAgICAgIHwgOm1ldGg6YGJ6Mi5kZWNvbXByZXNzYCAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBoZXhfY29kZWMgICAgICAgICAgICB8IENvbnZlcnQgb3BlcmFuZCB0byAgICAgICAgfCA6bWV0aDpgYmFzZTY0LmIxNmVuY29kZWAsICAgIHwKLXwgICAgICAgICAgICAgICAgICAgICAgfCBoZXhhZGVjaW1hbCAgICAgICAgICAgICAgIHwgOm1ldGg6YGJhc2U2NC5iMTZkZWNvZGVgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgIHwgcmVwcmVzZW50YXRpb24sIHdpdGggdHdvICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IGRpZ2l0cyBwZXIgYnl0ZSAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHF1b3ByaV9jb2RlYyAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICB8IDptZXRoOmBxdW9wcmkuZW5jb2Rlc3RyaW5nYCwgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZCBwcmludGFibGUgICAgICAgICAgfCA6bWV0aDpgcXVvcHJpLmRlY29kZXN0cmluZ2AgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHV1X2NvZGVjICAgICAgICAgICAgIHwgQ29udmVydCB0aGUgb3BlcmFuZCB1c2luZyB8IDptZXRoOmB1dS5lbmNvZGVgLCAgICAgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHV1ZW5jb2RlICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgdXUuZGVjb2RlYCAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IHpsaWJfY29kZWMgICAgICAgICAgIHwgQ29tcHJlc3MgdGhlIG9wZXJhbmQgICAgICB8IDptZXRoOmB6bGliLmNvbXByZXNzYCwgICAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgICB8IHVzaW5nIGd6aXAgICAgICAgICAgICAgICAgfCA6bWV0aDpgemxpYi5kZWNvbXByZXNzYCAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgQ29kZWMgICAgICAgICAgICAgICAgfCBBbGlhc2VzICAgICAgICAgIHwgUHVycG9zZSAgICAgICAgICAgICAgICAgICAgICB8IEVuY29kZXIgLyBkZWNvZGVyICAgICAgICAgICAgfAorKz09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCit8IGJhc2U2NF9jb2RlYyBbI2I2NF1fIHwgYmFzZTY0LCBiYXNlXzY0ICB8IENvbnZlcnQgb3BlcmFuZCB0byBtdWx0aWxpbmUgfCA6bWV0aDpgYmFzZTY0LmVuY29kZWJ5dGVzYCAvIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgTUlNRSBiYXNlNjQgKHRoZSByZXN1bHQgICAgICB8IDptZXRoOmBiYXNlNjQuZGVjb2RlYnl0ZXNgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBhbHdheXMgaW5jbHVkZXMgYSB0cmFpbGluZyAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGBgJ1xuJ2BgKSAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNCAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIGFjY2VwdHMgYW55ICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCAgICBhcyBpbnB1dCBmb3IgZW5jb2RpbmcgYW5kIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIGRlY29kaW5nICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBiejJfY29kZWMgICAgICAgICAgICB8IGJ6MiAgICAgICAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgICAgIHwgOm1ldGg6YGJ6Mi5jb21wcmVzc2AgLyAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHVzaW5nIGJ6MiAgICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgYnoyLmRlY29tcHJlc3NgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBoZXhfY29kZWMgICAgICAgICAgICB8IGhleCAgICAgICAgICAgICAgfCBDb252ZXJ0IG9wZXJhbmQgdG8gICAgICAgICAgIHwgOm1ldGg6YGJpbmFzY2lpLmIyYV9oZXhgIC8gICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IGhleGFkZWNpbWFsICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgYmluYXNjaWkuYTJiX2hleGAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgIHwgcmVwcmVzZW50YXRpb24sIHdpdGggdHdvICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgfCBkaWdpdHMgcGVyIGJ5dGUgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgcXVvcHJpX2NvZGVjICAgICAgICAgfCBxdW9wcmksICAgICAgICAgIHwgQ29udmVydCBvcGVyYW5kIHRvIE1JTUUgICAgICB8IDptZXRoOmBxdW9wcmkuZW5jb2RlYCB3aXRoICAgfAorfCAgICAgICAgICAgICAgICAgICAgICB8IHF1b3RlZHByaW50YWJsZSwgfCBxdW90ZWQgcHJpbnRhYmxlICAgICAgICAgICAgIHwgYGBxdW90ZXRhYnM9VHJ1ZWBgIC8gICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgcXVvdGVkX3ByaW50YWJsZSB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgcXVvcHJpLmRlY29kZWAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCB1dV9jb2RlYyAgICAgICAgICAgICB8IHV1ICAgICAgICAgICAgICAgfCBDb252ZXJ0IHRoZSBvcGVyYW5kIHVzaW5nICAgIHwgOm1ldGg6YHV1LmVuY29kZWAgLyAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHV1ZW5jb2RlICAgICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgdXUuZGVjb2RlYCAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCB6bGliX2NvZGVjICAgICAgICAgICB8IHppcCwgemxpYiAgICAgICAgfCBDb21wcmVzcyB0aGUgb3BlcmFuZCAgICAgICAgIHwgOm1ldGg6YHpsaWIuY29tcHJlc3NgIC8gICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICB8IHVzaW5nIGd6aXAgICAgICAgICAgICAgICAgICAgfCA6bWV0aDpgemxpYi5kZWNvbXByZXNzYCAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCi0uLiBbI2I2NF0gUmF0aGVyIHRoYW4gYWNjZXB0aW5nIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLAotICAgYGAnYmFzZTY0X2NvZGVjJ2BgIGFjY2VwdHMgb25seSA6Y2xhc3M6YGJ5dGVzYCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIGZvcgotICAgZW5jb2RpbmcgYW5kIG9ubHkgOmNsYXNzOmBieXRlc2AsIDpjbGFzczpgYnl0ZWFycmF5YCwgYW5kIEFTQ0lJLW9ubHkKLSAgIGluc3RhbmNlcyBvZiA6Y2xhc3M6YHN0cmAgZm9yIGRlY29kaW5nCi0KLQotVGhlIGZvbGxvd2luZyBjb2RlY3MgcHJvdmlkZSA6Y2xhc3M6YHN0cmAgdG8gOmNsYXNzOmBzdHJgIG1hcHBpbmdzLgotCi0uLiB0YWJ1bGFyY29sdW1uczo6IHxsfEx8Ci0KLSstLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IENvZGVjICAgICAgICAgICAgICB8IFB1cnBvc2UgICAgICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLXwgcm90XzEzICAgICAgICAgICAgIHwgUmV0dXJucyB0aGUgQ2Flc2FyLWN5cGhlciB8Ci18ICAgICAgICAgICAgICAgICAgICB8IGVuY3J5cHRpb24gb2YgdGhlIG9wZXJhbmQgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKy4uIFsjYjY0XSBJbiBhZGRpdGlvbiB0byA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gLAorICAgYGAnYmFzZTY0X2NvZGVjJ2BgIGFsc28gYWNjZXB0cyBBU0NJSS1vbmx5IGluc3RhbmNlcyBvZiA6Y2xhc3M6YHN0cmAgZm9yCisgICBkZWNvZGluZwogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKLSAgIGJ5dGVzLXRvLWJ5dGVzIGFuZCBzdHItdG8tc3RyIGNvZGVjcy4KKyAgIFJlc3RvcmF0aW9uIG9mIHRoZSBiaW5hcnkgdHJhbnNmb3Jtcy4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFJlc3RvcmF0aW9uIG9mIHRoZSBhbGlhc2VzIGZvciB0aGUgYmluYXJ5IHRyYW5zZm9ybXMuCisKKworLi4gX3RleHQtdHJhbnNmb3JtczoKKworVGV4dCBUcmFuc2Zvcm1zCiteXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbGxvd2luZyBjb2RlYyBwcm92aWRlcyBhIHRleHQgdHJhbnNmb3JtOiBhIDpjbGFzczpgc3RyYCB0byA6Y2xhc3M6YHN0cmAKK21hcHBpbmcuICBJdCBpcyBub3Qgc3VwcG9ydGVkIGJ5IDptZXRoOmBzdHIuZW5jb2RlYCAod2hpY2ggb25seSBwcm9kdWNlcworOmNsYXNzOmBieXRlc2Agb3V0cHV0KS4KKworLi4gdGFidWxhcmNvbHVtbnM6OiB8bHxsfEx8CisKKystLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBDb2RlYyAgICAgICAgICAgICAgfCBBbGlhc2VzIHwgUHVycG9zZSAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PSsKK3wgcm90XzEzICAgICAgICAgICAgIHwgcm90MTMgICB8IFJldHVybnMgdGhlIENhZXNhci1jeXBoZXIgfAorfCAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHwgZW5jcnlwdGlvbiBvZiB0aGUgb3BlcmFuZCB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworLi4gdmVyc2lvbmFkZGVkOjogMy4yCisgICBSZXN0b3JhdGlvbiBvZiB0aGUgYGByb3RfMTNgYCB0ZXh0IHRyYW5zZm9ybS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFJlc3RvcmF0aW9uIG9mIHRoZSBgYHJvdDEzYGAgYWxpYXMuCiAKIAogOm1vZDpgZW5jb2RpbmdzLmlkbmFgIC0tLSBJbnRlcm5hdGlvbmFsaXplZCBEb21haW4gTmFtZXMgaW4gQXBwbGljYXRpb25zCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0IGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMuYWJjLnJzdAppbmRleCA0YjIxOTMyLi5kNzNmMDVhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5hYmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLmFiYy5yc3QKQEAgLTE1LDcgKzE1LDcgQEAKICAgIGltcG9ydCBpdGVydG9vbHMKICAgIF9fbmFtZV9fID0gJzxkb2N0ZXN0PicKIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvY29sbGVjdGlvbnMvYWJjLnB5YAorKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvX2NvbGxlY3Rpb25zX2FiYy5weWAKIAogLS0tLS0tLS0tLS0tLS0KIApAQCAtMTIyLDcgKzEyMiw3IEBACiAgICAgICAgICAgIEtleXNWaWV3CiAgICAgICAgICAgIFZhbHVlc1ZpZXcKIAotICAgQUJDcyBmb3IgbWFwcGluZywgaXRlbXMsIGtleXMsIGFuZCB2YWx1ZXMgOnRlcm06YHZpZXdzIDx2aWV3PmAuCisgICBBQkNzIGZvciBtYXBwaW5nLCBpdGVtcywga2V5cywgYW5kIHZhbHVlcyA6dGVybTpgdmlld3MgPGRpY3Rpb25hcnkgdmlldz5gLgogCiAKIFRoZXNlIEFCQ3MgYWxsb3cgdXMgdG8gYXNrIGNsYXNzZXMgb3IgaW5zdGFuY2VzIGlmIHRoZXkgcHJvdmlkZQpAQCAtMTM0LDcgKzEzNCw3IEBACiAKIFNldmVyYWwgb2YgdGhlIEFCQ3MgYXJlIGFsc28gdXNlZnVsIGFzIG1peGlucyB0aGF0IG1ha2UgaXQgZWFzaWVyIHRvIGRldmVsb3AKIGNsYXNzZXMgc3VwcG9ydGluZyBjb250YWluZXIgQVBJcy4gIEZvciBleGFtcGxlLCB0byB3cml0ZSBhIGNsYXNzIHN1cHBvcnRpbmcKLXRoZSBmdWxsIDpjbGFzczpgU2V0YCBBUEksIGl0IG9ubHkgbmVjZXNzYXJ5IHRvIHN1cHBseSB0aGUgdGhyZWUgdW5kZXJseWluZwordGhlIGZ1bGwgOmNsYXNzOmBTZXRgIEFQSSwgaXQgaXMgb25seSBuZWNlc3NhcnkgdG8gc3VwcGx5IHRoZSB0aHJlZSB1bmRlcmx5aW5nCiBhYnN0cmFjdCBtZXRob2RzOiA6bWV0aDpgX19jb250YWluc19fYCwgOm1ldGg6YF9faXRlcl9fYCwgYW5kIDptZXRoOmBfX2xlbl9fYC4KIFRoZSBBQkMgc3VwcGxpZXMgdGhlIHJlbWFpbmluZyBtZXRob2RzIHN1Y2ggYXMgOm1ldGg6YF9fYW5kX19gIGFuZAogOm1ldGg6YGlzZGlzam9pbnRgOjoKQEAgLTE3MywxMyArMTczLDEzIEBACiAKICgyKQogICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgcmVkZWZpbmUgOm1ldGg6YF9fbGVfX2AgYW5kCisgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgcmVkZWZpbmUgOm1ldGg6YF9fbGVfX2AgYW5kIDptZXRoOmBfX2dlX19gLAogICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCiAKICgzKQogICAgVGhlIDpjbGFzczpgU2V0YCBtaXhpbiBwcm92aWRlcyBhIDptZXRoOmBfaGFzaGAgbWV0aG9kIHRvIGNvbXB1dGUgYSBoYXNoIHZhbHVlCiAgICBmb3IgdGhlIHNldDsgaG93ZXZlciwgOm1ldGg6YF9faGFzaF9fYCBpcyBub3QgZGVmaW5lZCBiZWNhdXNlIG5vdCBhbGwgc2V0cwotICAgYXJlIGhhc2hhYmxlIG9yIGltbXV0YWJsZS4gIFRvIGFkZCBzZXQgaGFzaGFiaWx0eSB1c2luZyBtaXhpbnMsCisgICBhcmUgaGFzaGFibGUgb3IgaW1tdXRhYmxlLiAgVG8gYWRkIHNldCBoYXNoYWJpbGl0eSB1c2luZyBtaXhpbnMsCiAgICBpbmhlcml0IGZyb20gYm90aCA6bWV0aDpgU2V0YCBhbmQgOm1ldGg6YEhhc2hhYmxlYCwgdGhlbiBkZWZpbmUKICAgIGBgX19oYXNoX18gPSBTZXQuX2hhc2hgYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvY29sbGVjdGlvbnMucnN0CmluZGV4IDRkZWYxZGMuLjA5NzE4MjUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbGxlY3Rpb25zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb2xsZWN0aW9ucy5yc3QKQEAgLTc2LDE0ICs3NiwxOSBAQAogICAgICAgICBiZSBtb2RpZmllZCB0byBjaGFuZ2Ugd2hpY2ggbWFwcGluZ3MgYXJlIHNlYXJjaGVkLiAgVGhlIGxpc3Qgc2hvdWxkCiAgICAgICAgIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IG9uZSBtYXBwaW5nLgogCi0gICAgLi4gbWV0aG9kOjogbmV3X2NoaWxkKCkKKyAgICAuLiBtZXRob2Q6OiBuZXdfY2hpbGQobT1Ob25lKQogCi0gICAgICAgIFJldHVybnMgYSBuZXcgOmNsYXNzOmBDaGFpbk1hcGAgY29udGFpbmluZyBhIG5ldyA6Y2xhc3M6YGRpY3RgIGZvbGxvd2VkIGJ5Ci0gICAgICAgIGFsbCBvZiB0aGUgbWFwcyBpbiB0aGUgY3VycmVudCBpbnN0YW5jZS4gIEEgY2FsbCB0byBgYGQubmV3X2NoaWxkKClgYCBpcwotICAgICAgICBlcXVpdmFsZW50IHRvOiBgYENoYWluTWFwKHt9LCAqZC5tYXBzKWBgLiAgVGhpcyBtZXRob2QgaXMgdXNlZCBmb3IKKyAgICAgICAgUmV0dXJucyBhIG5ldyA6Y2xhc3M6YENoYWluTWFwYCBjb250YWluaW5nIGEgbmV3IG1hcCBmb2xsb3dlZCBieQorICAgICAgICBhbGwgb2YgdGhlIG1hcHMgaW4gdGhlIGN1cnJlbnQgaW5zdGFuY2UuICBJZiBgYG1gYCBpcyBzcGVjaWZpZWQsCisgICAgICAgIGl0IGJlY29tZXMgdGhlIG5ldyBtYXAgYXQgdGhlIGZyb250IG9mIHRoZSBsaXN0IG9mIG1hcHBpbmdzOyBpZiBub3QKKyAgICAgICAgc3BlY2lmaWVkLCBhbiBlbXB0eSBkaWN0IGlzIHVzZWQsIHNvIHRoYXQgYSBjYWxsIHRvIGBgZC5uZXdfY2hpbGQoKWBgCisgICAgICAgIGlzIGVxdWl2YWxlbnQgdG86IGBgQ2hhaW5NYXAoe30sICpkLm1hcHMpYGAuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvcgogICAgICAgICBjcmVhdGluZyBzdWJjb250ZXh0cyB0aGF0IGNhbiBiZSB1cGRhdGVkIHdpdGhvdXQgYWx0ZXJpbmcgdmFsdWVzIGluIGFueQogICAgICAgICBvZiB0aGUgcGFyZW50IG1hcHBpbmdzLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFRoZSBvcHRpb25hbCBgYG1gYCBwYXJhbWV0ZXIgd2FzIGFkZGVkLgorCiAgICAgLi4gYXR0cmlidXRlOjogcGFyZW50cwogCiAgICAgICAgIFByb3BlcnR5IHJldHVybmluZyBhIG5ldyA6Y2xhc3M6YENoYWluTWFwYCBjb250YWluaW5nIGFsbCBvZiB0aGUgbWFwcyBpbgpAQCAtMTA0LDcgKzEwOSw3IEBACiAgICAgICB3cml0aW5nIHRvIGFueSBtYXBwaW5nIGluIHRoZSBjaGFpbi4KIAogICAgICogRGphbmdvJ3MgYENvbnRleHQgY2xhc3MKLSAgICAgIDxodHRwOi8vY29kZS5kamFuZ29wcm9qZWN0LmNvbS9icm93c2VyL2RqYW5nby90cnVuay9kamFuZ28vdGVtcGxhdGUvY29udGV4dC5weT5gXworICAgICAgPGh0dHBzOi8vZ2l0aHViLmNvbS9kamFuZ28vZGphbmdvL2Jsb2IvbWFzdGVyL2RqYW5nby90ZW1wbGF0ZS9jb250ZXh0LnB5PmBfCiAgICAgICBmb3IgdGVtcGxhdGluZyBpcyBhIHJlYWQtb25seSBjaGFpbiBvZiBtYXBwaW5ncy4gIEl0IGFsc28gZmVhdHVyZXMKICAgICAgIHB1c2hpbmcgYW5kIHBvcHBpbmcgb2YgY29udGV4dHMgc2ltaWxhciB0byB0aGUKICAgICAgIDptZXRoOmB+Y29sbGVjdGlvbnMuQ2hhaW5NYXAubmV3X2NoaWxkYCBtZXRob2QgYW5kIHRoZQpAQCAtMjYzLDkgKzI2OCw5IEBACiAgICAgLi4gbWV0aG9kOjogbW9zdF9jb21tb24oW25dKQogCiAgICAgICAgIFJldHVybiBhIGxpc3Qgb2YgdGhlICpuKiBtb3N0IGNvbW1vbiBlbGVtZW50cyBhbmQgdGhlaXIgY291bnRzIGZyb20gdGhlCi0gICAgICAgIG1vc3QgY29tbW9uIHRvIHRoZSBsZWFzdC4gIElmICpuKiBpcyBub3Qgc3BlY2lmaWVkLCA6ZnVuYzpgbW9zdF9jb21tb25gCi0gICAgICAgIHJldHVybnMgKmFsbCogZWxlbWVudHMgaW4gdGhlIGNvdW50ZXIuICBFbGVtZW50cyB3aXRoIGVxdWFsIGNvdW50cyBhcmUKLSAgICAgICAgb3JkZXJlZCBhcmJpdHJhcmlseToKKyAgICAgICAgbW9zdCBjb21tb24gdG8gdGhlIGxlYXN0LiAgSWYgKm4qIGlzIG9taXR0ZWQgb3IgYGBOb25lYGAsCisgICAgICAgIDpmdW5jOmBtb3N0X2NvbW1vbmAgcmV0dXJucyAqYWxsKiBlbGVtZW50cyBpbiB0aGUgY291bnRlci4KKyAgICAgICAgRWxlbWVudHMgd2l0aCBlcXVhbCBjb3VudHMgYXJlIG9yZGVyZWQgYXJiaXRyYXJpbHk6CiAKICAgICAgICAgICAgID4+PiBDb3VudGVyKCdhYnJhY2FkYWJyYScpLm1vc3RfY29tbW9uKDMpCiAgICAgICAgICAgICBbKCdhJywgNSksICgncicsIDIpLCAoJ2InLCAyKV0KQEAgLTMyOCw3ICszMzMsNyBAQAogICAgID4+PiBjIHwgZCAgICAgICAgICAgICAgICAgICAgICAgIyB1bmlvbjogIG1heChjW3hdLCBkW3hdKQogICAgIENvdW50ZXIoeydhJzogMywgJ2InOiAyfSkKIAotVW5hcnkgYWRkaXRpb24gYW5kIHN1YnN0cmFjdGlvbiBhcmUgc2hvcnRjdXRzIGZvciBhZGRpbmcgYW4gZW1wdHkgY291bnRlcgorVW5hcnkgYWRkaXRpb24gYW5kIHN1YnRyYWN0aW9uIGFyZSBzaG9ydGN1dHMgZm9yIGFkZGluZyBhbiBlbXB0eSBjb3VudGVyCiBvciBzdWJ0cmFjdGluZyBmcm9tIGFuIGVtcHR5IGNvdW50ZXIuCiAKICAgICA+Pj4gYyA9IENvdW50ZXIoYT0yLCBiPS00KQpAQCAtMzY5LDEwICszNzQsNiBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgICogYENvdW50ZXIgY2xhc3MgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NjYxMS8+YF8KLSAgICAgIGFkYXB0ZWQgZm9yIFB5dGhvbiAyLjUgYW5kIGFuIGVhcmx5IGBCYWcgcmVjaXBlCi0gICAgICA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvMjU5MTc0Lz5gXyBmb3IgUHl0aG9uIDIuNC4KLQogICAgICogYEJhZyBjbGFzcyA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3NtYWxsdGFsay9tYW51YWwtYmFzZS9odG1sX25vZGUvQmFnLmh0bWw+YF8KICAgICAgIGluIFNtYWxsdGFsay4KIApAQCAtODE1LDEwICs4MTYsMTAgQEAKIC4uIG1ldGhvZDo6IHNvbWVuYW1lZHR1cGxlLl9hc2RpY3QoKQogCiAgICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgT3JkZXJlZERpY3RgIHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgY29ycmVzcG9uZGluZwotICAgIHZhbHVlcy4gIE5vdGUsIHRoaXMgbWV0aG9kIGlzIG5vIGxvbmdlciBuZWVkZWQgbm93IHRoYXQgdGhlIHNhbWUgZWZmZWN0IGNhbgotICAgIGJlIGFjaGlldmVkIGJ5IHVzaW5nIHRoZSBidWlsdC1pbiA6ZnVuYzpgdmFyc2AgZnVuY3Rpb246OgorICAgIHZhbHVlczo6CiAKLSAgICAgICAgPj4+IHZhcnMocCkKKyAgICAgICAgPj4+IHAgPSBQb2ludCh4PTExLCB5PTIyKQorICAgICAgICA+Pj4gcC5fYXNkaWN0KCkKICAgICAgICAgT3JkZXJlZERpY3QoWygneCcsIDExKSwgKCd5JywgMjIpXSkKIAogICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4xCkBAIC05MDcsMTkgKzkwOCwxOCBAQAogICAgID4+PiBqYW5lc19hY2NvdW50ID0gZGVmYXVsdF9hY2NvdW50Ll9yZXBsYWNlKG93bmVyPSdKYW5lJykKIAogRW51bWVyYXRlZCBjb25zdGFudHMgY2FuIGJlIGltcGxlbWVudGVkIHdpdGggbmFtZWQgdHVwbGVzLCBidXQgaXQgaXMgc2ltcGxlcgotYW5kIG1vcmUgZWZmaWNpZW50IHRvIHVzZSBhIHNpbXBsZSBjbGFzcyBkZWNsYXJhdGlvbjoKK2FuZCBtb3JlIGVmZmljaWVudCB0byB1c2UgYSBzaW1wbGUgOmNsYXNzOmB+ZW51bS5FbnVtYDoKIAogICAgID4+PiBTdGF0dXMgPSBuYW1lZHR1cGxlKCdTdGF0dXMnLCAnb3BlbiBwZW5kaW5nIGNsb3NlZCcpLl9tYWtlKHJhbmdlKDMpKQogICAgID4+PiBTdGF0dXMub3BlbiwgU3RhdHVzLnBlbmRpbmcsIFN0YXR1cy5jbG9zZWQKICAgICAoMCwgMSwgMikKLSAgICA+Pj4gY2xhc3MgU3RhdHVzOgotICAgICAgICBvcGVuLCBwZW5kaW5nLCBjbG9zZWQgPSByYW5nZSgzKQorICAgID4+PiBmcm9tIGVudW0gaW1wb3J0IEVudW0KKyAgICA+Pj4gY2xhc3MgU3RhdHVzKEVudW0pOgorICAgIC4uLiAgICAgb3BlbiwgcGVuZGluZywgY2xvc2VkID0gcmFuZ2UoMykKKwogCiAuLiBzZWVhbHNvOjoKIAotICAgICogYE5hbWVkIHR1cGxlIHJlY2lwZSA8aHR0cDovL2NvZGUuYWN0aXZlc3RhdGUuY29tL3JlY2lwZXMvNTAwMjYxLz5gXwotICAgICAgYWRhcHRlZCBmb3IgUHl0aG9uIDIuNC4KLQogICAgICogYFJlY2lwZSBmb3IgbmFtZWQgdHVwbGUgYWJzdHJhY3QgYmFzZSBjbGFzcyB3aXRoIGEgbWV0YWNsYXNzIG1peC1pbgogICAgICAgPGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzLzU3NzYyOS1uYW1lZHR1cGxlYWJjLWFic3RyYWN0LWJhc2UtY2xhc3MtbWl4LWluLWZvci1uYW1lZC8+YF8KICAgICAgIGJ5IEphbiBLYWxpc3pld3NraS4gIEJlc2lkZXMgcHJvdmlkaW5nIGFuIDp0ZXJtOmBhYnN0cmFjdCBiYXNlIGNsYXNzYCBmb3IKQEAgLTk4MCwxOCArOTgwLDE0IEBACiAKIFRoZSA6Y2xhc3M6YE9yZGVyZWREaWN0YCBjb25zdHJ1Y3RvciBhbmQgOm1ldGg6YHVwZGF0ZWAgbWV0aG9kIGJvdGggYWNjZXB0CiBrZXl3b3JkIGFyZ3VtZW50cywgYnV0IHRoZWlyIG9yZGVyIGlzIGxvc3QgYmVjYXVzZSBQeXRob24ncyBmdW5jdGlvbiBjYWxsCi1zZW1hbnRpY3MgcGFzcy1pbiBrZXl3b3JkIGFyZ3VtZW50cyB1c2luZyBhIHJlZ3VsYXIgdW5vcmRlcmVkIGRpY3Rpb25hcnkuCitzZW1hbnRpY3MgcGFzcyBpbiBrZXl3b3JkIGFyZ3VtZW50cyB1c2luZyBhIHJlZ3VsYXIgdW5vcmRlcmVkIGRpY3Rpb25hcnkuCiAKLS4uIHNlZWFsc286OgotCi0gICAgYEVxdWl2YWxlbnQgT3JkZXJlZERpY3QgcmVjaXBlIDxodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy81NzY2OTMvPmBfCi0gICAgdGhhdCBydW5zIG9uIFB5dGhvbiAyLjQgb3IgbGF0ZXIuCiAKIDpjbGFzczpgT3JkZXJlZERpY3RgIEV4YW1wbGVzIGFuZCBSZWNpcGVzCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBTaW5jZSBhbiBvcmRlcmVkIGRpY3Rpb25hcnkgcmVtZW1iZXJzIGl0cyBpbnNlcnRpb24gb3JkZXIsIGl0IGNhbiBiZSB1c2VkCi1pbiBjb25qdWN0aW9uIHdpdGggc29ydGluZyB0byBtYWtlIGEgc29ydGVkIGRpY3Rpb25hcnk6OgoraW4gY29uanVuY3Rpb24gd2l0aCBzb3J0aW5nIHRvIG1ha2UgYSBzb3J0ZWQgZGljdGlvbmFyeTo6CiAKICAgICA+Pj4gIyByZWd1bGFyIHVuc29ydGVkIGRpY3Rpb25hcnkKICAgICA+Pj4gZCA9IHsnYmFuYW5hJzogMywgJ2FwcGxlJzo0LCAncGVhcic6IDEsICdvcmFuZ2UnOiAyfQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29tcGlsZWFsbC5yc3QgYi9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdAppbmRleCBiMTJjMjE3Li45NzEyZGUyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb21waWxlYWxsLnJzdApAQCAtNCw2ICs0LDEwIEBACiAuLiBtb2R1bGU6OiBjb21waWxlYWxsCiAgICA6c3lub3BzaXM6IFRvb2xzIGZvciBieXRlLWNvbXBpbGluZyBhbGwgUHl0aG9uIHNvdXJjZSBmaWxlcyBpbiBhIGRpcmVjdG9yeSB0cmVlLgogCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9jb21waWxlYWxsLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiAKIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgdXRpbGl0eSBmdW5jdGlvbnMgdG8gc3VwcG9ydCBpbnN0YWxsaW5nIFB5dGhvbgogbGlicmFyaWVzLiAgVGhlc2UgZnVuY3Rpb25zIGNvbXBpbGUgUHl0aG9uIHNvdXJjZSBmaWxlcyBpbiBhIGRpcmVjdG9yeSB0cmVlLgpAQCAtMjAsNyArMjQsOCBAQAogCiAuLiBwcm9ncmFtOjogY29tcGlsZWFsbAogCi0uLiBjbWRvcHRpb246OiBbZGlyZWN0b3J5fGZpbGVdLi4uCisuLiBjbWRvcHRpb246OiBkaXJlY3RvcnkgLi4uCisgICAgICAgICAgICAgICBmaWxlIC4uLgogCiAgICBQb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUgZmlsZXMgdG8gY29tcGlsZSBvciBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4KICAgIHNvdXJjZSBmaWxlcywgdHJhdmVyc2VkIHJlY3Vyc2l2ZWx5LiAgSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIGJlaGF2ZSBhcyBpZgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVuY3kucnN0CmluZGV4IGYyYTUxMmYuLjBkZTI4MWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2NvbmN1cnJlbmN5LnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25jdXJyZW5jeS5yc3QKQEAgLTIwLDcgKzIwLDYgQEAKICAgIHN1YnByb2Nlc3MucnN0CiAgICBzY2hlZC5yc3QKICAgIHF1ZXVlLnJzdAotICAgc2VsZWN0LnJzdAogCiAKIFRoZSBmb2xsb3dpbmcgYXJlIHN1cHBvcnQgbW9kdWxlcyBmb3Igc29tZSBvZiB0aGUgYWJvdmUgc2VydmljZXM6CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0IGIvRG9jL2xpYnJhcnkvY29uY3VycmVudC5mdXR1cmVzLnJzdAppbmRleCA1NzViMWVhLi5lNjNlNzQxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb25jdXJyZW50LmZ1dHVyZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NvbmN1cnJlbnQuZnV0dXJlcy5yc3QKQEAgLTc1LDEzICs3NSwxMyBAQAogICAgICAgICAgICAgICBlLnN1Ym1pdChzaHV0aWwuY29weSwgJ3NyYzEudHh0JywgJ2Rlc3QxLnR4dCcpCiAgICAgICAgICAgICAgIGUuc3VibWl0KHNodXRpbC5jb3B5LCAnc3JjMi50eHQnLCAnZGVzdDIudHh0JykKICAgICAgICAgICAgICAgZS5zdWJtaXQoc2h1dGlsLmNvcHksICdzcmMzLnR4dCcsICdkZXN0My50eHQnKQotICAgICAgICAgICAgICBlLnN1Ym1pdChzaHV0aWwuY29weSwgJ3NyYzMudHh0JywgJ2Rlc3Q0LnR4dCcpCisgICAgICAgICAgICAgIGUuc3VibWl0KHNodXRpbC5jb3B5LCAnc3JjNC50eHQnLCAnZGVzdDQudHh0JykKIAogCiBUaHJlYWRQb29sRXhlY3V0b3IKIC0tLS0tLS0tLS0tLS0tLS0tLQogCi06Y2xhc3M6YFRocmVhZFBvb2xFeGVjdXRvcmAgaXMgYSA6Y2xhc3M6YEV4ZWN1dG9yYCBzdWJjbGFzcyB0aGF0IHVzZXMgYSBwb29sIG9mCis6Y2xhc3M6YFRocmVhZFBvb2xFeGVjdXRvcmAgaXMgYW4gOmNsYXNzOmBFeGVjdXRvcmAgc3ViY2xhc3MgdGhhdCB1c2VzIGEgcG9vbCBvZgogdGhyZWFkcyB0byBleGVjdXRlIGNhbGxzIGFzeW5jaHJvbm91c2x5LgogCiBEZWFkbG9ja3MgY2FuIG9jY3VyIHdoZW4gdGhlIGNhbGxhYmxlIGFzc29jaWF0ZWQgd2l0aCBhIDpjbGFzczpgRnV0dXJlYCB3YWl0cyBvbgpAQCAtMTM4LDggKzEzOCw4IEBACiAKICAgICMgUmV0cmlldmUgYSBzaW5nbGUgcGFnZSBhbmQgcmVwb3J0IHRoZSB1cmwgYW5kIGNvbnRlbnRzCiAgICBkZWYgbG9hZF91cmwodXJsLCB0aW1lb3V0KToKLSAgICAgICBjb25uID0gdXJsbGliLnJlcXVlc3QudXJsb3Blbih1cmwsIHRpbWVvdXQ9dGltZW91dCkKLSAgICAgICByZXR1cm4gY29ubi5yZWFkYWxsKCkKKyAgICAgICB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4odXJsLCB0aW1lb3V0PXRpbWVvdXQpIGFzIGNvbm46CisgICAgICAgICAgIHJldHVybiBjb25uLnJlYWQoKQogCiAgICAjIFdlIGNhbiB1c2UgYSB3aXRoIHN0YXRlbWVudCB0byBlbnN1cmUgdGhyZWFkcyBhcmUgY2xlYW5lZCB1cCBwcm9tcHRseQogICAgd2l0aCBjb25jdXJyZW50LmZ1dHVyZXMuVGhyZWFkUG9vbEV4ZWN1dG9yKG1heF93b3JrZXJzPTUpIGFzIGV4ZWN1dG9yOgpAQCAtMTY0LDYgKzE2NCw5IEBACiBhbGxvd3MgaXQgdG8gc2lkZS1zdGVwIHRoZSA6dGVybTpgR2xvYmFsIEludGVycHJldGVyIExvY2tgIGJ1dCBhbHNvIG1lYW5zIHRoYXQKIG9ubHkgcGlja2xhYmxlIG9iamVjdHMgY2FuIGJlIGV4ZWN1dGVkIGFuZCByZXR1cm5lZC4KIAorVGhlIGBgX19tYWluX19gYCBtb2R1bGUgbXVzdCBiZSBpbXBvcnRhYmxlIGJ5IHdvcmtlciBzdWJwcm9jZXNzZXMuIFRoaXMgbWVhbnMKK3RoYXQgOmNsYXNzOmBQcm9jZXNzUG9vbEV4ZWN1dG9yYCB3aWxsIG5vdCB3b3JrIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlci4KKwogQ2FsbGluZyA6Y2xhc3M6YEV4ZWN1dG9yYCBvciA6Y2xhc3M6YEZ1dHVyZWAgbWV0aG9kcyBmcm9tIGEgY2FsbGFibGUgc3VibWl0dGVkCiB0byBhIDpjbGFzczpgUHJvY2Vzc1Bvb2xFeGVjdXRvcmAgd2lsbCByZXN1bHQgaW4gZGVhZGxvY2suCiAKQEAgLTI4Miw3ICsyODUsNyBAQAogCiAgICAgICAgQWRkZWQgY2FsbGFibGVzIGFyZSBjYWxsZWQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSB3ZXJlIGFkZGVkIGFuZCBhcmUKICAgICAgICBhbHdheXMgY2FsbGVkIGluIGEgdGhyZWFkIGJlbG9uZ2luZyB0byB0aGUgcHJvY2VzcyB0aGF0IGFkZGVkIHRoZW0uICBJZgotICAgICAgIHRoZSBjYWxsYWJsZSByYWlzZXMgYSA6ZXhjOmBFeGNlcHRpb25gIHN1YmNsYXNzLCBpdCB3aWxsIGJlIGxvZ2dlZCBhbmQKKyAgICAgICB0aGUgY2FsbGFibGUgcmFpc2VzIGFuIDpleGM6YEV4Y2VwdGlvbmAgc3ViY2xhc3MsIGl0IHdpbGwgYmUgbG9nZ2VkIGFuZAogICAgICAgIGlnbm9yZWQuICBJZiB0aGUgY2FsbGFibGUgcmFpc2VzIGEgOmV4YzpgQmFzZUV4Y2VwdGlvbmAgc3ViY2xhc3MsIHRoZQogICAgICAgIGJlaGF2aW9yIGlzIHVuZGVmaW5lZC4KIApAQCAtMzg4LDYgKzM5MSw4IEBACiBFeGNlcHRpb24gY2xhc3NlcwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLi4gY3VycmVudG1vZHVsZTo6IGNvbmN1cnJlbnQuZnV0dXJlcy5wcm9jZXNzCisKIC4uIGV4Y2VwdGlvbjo6IEJyb2tlblByb2Nlc3NQb29sCiAKICAgIERlcml2ZWQgZnJvbSA6ZXhjOmBSdW50aW1lRXJyb3JgLCB0aGlzIGV4Y2VwdGlvbiBjbGFzcyBpcyByYWlzZWQgd2hlbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uZmlncGFyc2VyLnJzdCBiL0RvYy9saWJyYXJ5L2NvbmZpZ3BhcnNlci5yc3QKaW5kZXggMDI0ZDI3Yy4uOTI1NTFiYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29uZmlncGFyc2VyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25maWdwYXJzZXIucnN0CkBAIC0zODYsNyArMzg2LDcgQEAKICogQWxsIHNlY3Rpb25zIGluY2x1ZGUgYGBERUZBVUxUU0VDVGBgIHZhbHVlcyBhcyB3ZWxsIHdoaWNoIG1lYW5zIHRoYXQKICAgYGAuY2xlYXIoKWBgIG9uIGEgc2VjdGlvbiBtYXkgbm90IGxlYXZlIHRoZSBzZWN0aW9uIHZpc2libHkgZW1wdHkuICBUaGlzIGlzCiAgIGJlY2F1c2UgZGVmYXVsdCB2YWx1ZXMgY2Fubm90IGJlIGRlbGV0ZWQgZnJvbSB0aGUgc2VjdGlvbiAoYmVjYXVzZSB0ZWNobmljYWxseQotICB0aGV5IGFyZSBub3QgdGhlcmUpLiAgSWYgdGhleSBhcmUgb3ZlcnJpZGVuIGluIHRoZSBzZWN0aW9uLCBkZWxldGluZyBjYXVzZXMKKyAgdGhleSBhcmUgbm90IHRoZXJlKS4gIElmIHRoZXkgYXJlIG92ZXJyaWRkZW4gaW4gdGhlIHNlY3Rpb24sIGRlbGV0aW5nIGNhdXNlcwogICB0aGUgZGVmYXVsdCB2YWx1ZSB0byBiZSB2aXNpYmxlIGFnYWluLiAgVHJ5aW5nIHRvIGRlbGV0ZSBhIGRlZmF1bHQgdmFsdWUKICAgY2F1c2VzIGEgYGBLZXlFcnJvcmBgLgogCkBAIC02NjcsNyArNjY3LDcgQEAKIAogTW9yZSBhZHZhbmNlZCBjdXN0b21pemF0aW9uIG1heSBiZSBhY2hpZXZlZCBieSBvdmVycmlkaW5nIGRlZmF1bHQgdmFsdWVzIG9mCiB0aGVzZSBwYXJzZXIgYXR0cmlidXRlcy4gIFRoZSBkZWZhdWx0cyBhcmUgZGVmaW5lZCBvbiB0aGUgY2xhc3Nlcywgc28gdGhleQotbWF5IGJlIG92ZXJyaWRlbiBieSBzdWJjbGFzc2VzIG9yIGJ5IGF0dHJpYnV0ZSBhc3NpZ25tZW50LgorbWF5IGJlIG92ZXJyaWRkZW4gYnkgc3ViY2xhc3NlcyBvciBieSBhdHRyaWJ1dGUgYXNzaWdubWVudC4KIAogLi4gYXR0cmlidXRlOjogQk9PTEVBTl9TVEFURVMKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29uc3RhbnRzLnJzdCBiL0RvYy9saWJyYXJ5L2NvbnN0YW50cy5yc3QKaW5kZXggMDU5YTIxZC4uNDJiNWFmMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29uc3RhbnRzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb25zdGFudHMucnN0CkBAIC0yNiw5ICsyNiwyNCBAQAogCiAuLiBkYXRhOjogTm90SW1wbGVtZW50ZWQKIAotICAgU3BlY2lhbCB2YWx1ZSB3aGljaCBjYW4gYmUgcmV0dXJuZWQgYnkgdGhlICJyaWNoIGNvbXBhcmlzb24iIHNwZWNpYWwgbWV0aG9kcwotICAgKDptZXRoOmBfX2VxX19gLCA6bWV0aDpgX19sdF9fYCwgYW5kIGZyaWVuZHMpLCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjb21wYXJpc29uCi0gICBpcyBub3QgaW1wbGVtZW50ZWQgd2l0aCByZXNwZWN0IHRvIHRoZSBvdGhlciB0eXBlLgorICAgU3BlY2lhbCB2YWx1ZSB3aGljaCBzaG91bGQgYmUgcmV0dXJuZWQgYnkgdGhlIGJpbmFyeSBzcGVjaWFsIG1ldGhvZHMKKyAgIChlLmcuIDptZXRoOmBfX2VxX19gLCA6bWV0aDpgX19sdF9fYCwgOm1ldGg6YF9fYWRkX19gLCA6bWV0aDpgX19yc3ViX19gLAorICAgZXRjLikgdG8gaW5kaWNhdGUgdGhhdCB0aGUgb3BlcmF0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCB3aXRoIHJlc3BlY3QgdG8KKyAgIHRoZSBvdGhlciB0eXBlOyBtYXkgYmUgcmV0dXJuZWQgYnkgdGhlIGluLXBsYWNlIGJpbmFyeSBzcGVjaWFsIG1ldGhvZHMKKyAgIChlLmcuIDptZXRoOmBfX2ltdWxfX2AsIDptZXRoOmBfX2lhbmRfX2AsIGV0Yy4pIGZvciB0aGUgc2FtZSBwdXJwb3NlLgorICAgSXRzIHRydXRoIHZhbHVlIGlzIHRydWUuCisKKy4uIG5vdGU6OgorCisgICBXaGVuIGBgTm90SW1wbGVtZW50ZWRgYCBpcyByZXR1cm5lZCwgdGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlCisgICByZWZsZWN0ZWQgb3BlcmF0aW9uIG9uIHRoZSBvdGhlciB0eXBlLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcKKyAgIG9uIHRoZSBvcGVyYXRvci4gIElmIGFsbCBhdHRlbXB0ZWQgb3BlcmF0aW9ucyByZXR1cm4gYGBOb3RJbXBsZW1lbnRlZGBgLCB0aGUKKyAgIGludGVycHJldGVyIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgZXhjZXB0aW9uLgorCisgICBTZWUKKyAgIDpyZWY6YGltcGxlbWVudGluZy10aGUtYXJpdGhtZXRpYy1vcGVyYXRpb25zYAorICAgZm9yIG1vcmUgZGV0YWlscy4KKwogCiAKIC4uIGRhdGE6OiBFbGxpcHNpcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY29udGV4dGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdAppbmRleCBmYmE0OGY0Li4yYjJjZWNlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jb250ZXh0bGliLnJzdApAQCAtOTUsNiArOTUsODMgQEAKICAgIGBgcGFnZS5jbG9zZSgpYGAgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrIGlzIGV4aXRlZC4KIAogCisuLiBmdW5jdGlvbjo6IHN1cHByZXNzKCpleGNlcHRpb25zKQorCisgICBSZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCBzdXBwcmVzc2VzIGFueSBvZiB0aGUgc3BlY2lmaWVkIGV4Y2VwdGlvbnMKKyAgIGlmIHRoZXkgb2NjdXIgaW4gdGhlIGJvZHkgb2YgYSB3aXRoIHN0YXRlbWVudCBhbmQgdGhlbiByZXN1bWVzIGV4ZWN1dGlvbgorICAgd2l0aCB0aGUgZmlyc3Qgc3RhdGVtZW50IGZvbGxvd2luZyB0aGUgZW5kIG9mIHRoZSB3aXRoIHN0YXRlbWVudC4KKworICAgQXMgd2l0aCBhbnkgb3RoZXIgbWVjaGFuaXNtIHRoYXQgY29tcGxldGVseSBzdXBwcmVzc2VzIGV4Y2VwdGlvbnMsIHRoaXMKKyAgIGNvbnRleHQgbWFuYWdlciBzaG91bGQgYmUgdXNlZCBvbmx5IHRvIGNvdmVyIHZlcnkgc3BlY2lmaWMgZXJyb3JzIHdoZXJlCisgICBzaWxlbnRseSBjb250aW51aW5nIHdpdGggcHJvZ3JhbSBleGVjdXRpb24gaXMga25vd24gdG8gYmUgdGhlIHJpZ2h0CisgICB0aGluZyB0byBkby4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICAgZnJvbSBjb250ZXh0bGliIGltcG9ydCBzdXBwcmVzcworCisgICAgICAgd2l0aCBzdXBwcmVzcyhGaWxlTm90Rm91bmRFcnJvcik6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZWZpbGUudG1wJykKKworICAgICAgIHdpdGggc3VwcHJlc3MoRmlsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAgICBvcy5yZW1vdmUoJ3NvbWVvdGhlcmZpbGUudG1wJykKKworICAgVGhpcyBjb2RlIGlzIGVxdWl2YWxlbnQgdG86OgorCisgICAgICAgdHJ5OgorICAgICAgICAgICBvcy5yZW1vdmUoJ3NvbWVmaWxlLnRtcCcpCisgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICBwYXNzCisKKyAgICAgICB0cnk6CisgICAgICAgICAgIG9zLnJlbW92ZSgnc29tZW90aGVyZmlsZS50bXAnKQorICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgcGFzcworCisgICBUaGlzIGNvbnRleHQgbWFuYWdlciBpcyA6cmVmOmByZWVudHJhbnQgPHJlZW50cmFudC1jbXM+YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiByZWRpcmVjdF9zdGRvdXQobmV3X3RhcmdldCkKKworICAgQ29udGV4dCBtYW5hZ2VyIGZvciB0ZW1wb3JhcmlseSByZWRpcmVjdGluZyA6ZGF0YTpgc3lzLnN0ZG91dGAgdG8KKyAgIGFub3RoZXIgZmlsZSBvciBmaWxlLWxpa2Ugb2JqZWN0LgorCisgICBUaGlzIHRvb2wgYWRkcyBmbGV4aWJpbGl0eSB0byBleGlzdGluZyBmdW5jdGlvbnMgb3IgY2xhc3NlcyB3aG9zZSBvdXRwdXQKKyAgIGlzIGhhcmR3aXJlZCB0byBzdGRvdXQuCisKKyAgIEZvciBleGFtcGxlLCB0aGUgb3V0cHV0IG9mIDpmdW5jOmBoZWxwYCBub3JtYWxseSBpcyBzZW50IHRvICpzeXMuc3Rkb3V0Ki4KKyAgIFlvdSBjYW4gY2FwdHVyZSB0aGF0IG91dHB1dCBpbiBhIHN0cmluZyBieSByZWRpcmVjdGluZyB0aGUgb3V0cHV0IHRvIGFuCisgICA6Y2xhc3M6YGlvLlN0cmluZ0lPYCBvYmplY3Q6OgorCisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpOgorICAgICAgICAgICAgaGVscChwb3cpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKworICAgVG8gc2VuZCB0aGUgb3V0cHV0IG9mIDpmdW5jOmBoZWxwYCB0byBhIGZpbGUgb24gZGlzaywgcmVkaXJlY3QgdGhlIG91dHB1dAorICAgdG8gYSByZWd1bGFyIGZpbGU6OgorCisgICAgICAgIHdpdGggb3BlbignaGVscC50eHQnLCAndycpIGFzIGY6CisgICAgICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKToKKyAgICAgICAgICAgICAgICBoZWxwKHBvdykKKworICAgVG8gc2VuZCB0aGUgb3V0cHV0IG9mIDpmdW5jOmBoZWxwYCB0byAqc3lzLnN0ZGVycio6OgorCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KHN5cy5zdGRlcnIpOgorICAgICAgICAgICAgaGVscChwb3cpCisKKyAgIE5vdGUgdGhhdCB0aGUgZ2xvYmFsIHNpZGUgZWZmZWN0IG9uIDpkYXRhOmBzeXMuc3Rkb3V0YCBtZWFucyB0aGF0IHRoaXMKKyAgIGNvbnRleHQgbWFuYWdlciBpcyBub3Qgc3VpdGFibGUgZm9yIHVzZSBpbiBsaWJyYXJ5IGNvZGUgYW5kIG1vc3QgdGhyZWFkZWQKKyAgIGFwcGxpY2F0aW9ucy4gSXQgYWxzbyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBvdXRwdXQgb2Ygc3VicHJvY2Vzc2VzLgorICAgSG93ZXZlciwgaXQgaXMgc3RpbGwgYSB1c2VmdWwgYXBwcm9hY2ggZm9yIG1hbnkgdXRpbGl0eSBzY3JpcHRzLgorCisgICBUaGlzIGNvbnRleHQgbWFuYWdlciBpcyA6cmVmOmByZWVudHJhbnQgPHJlZW50cmFudC1jbXM+YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gY2xhc3M6OiBDb250ZXh0RGVjb3JhdG9yKCkKIAogICAgQSBiYXNlIGNsYXNzIHRoYXQgZW5hYmxlcyBhIGNvbnRleHQgbWFuYWdlciB0byBhbHNvIGJlIHVzZWQgYXMgYSBkZWNvcmF0b3IuCkBAIC0yOTQsNyArMzcxLDcgQEAKICAgICB3aXRoIEV4aXRTdGFjaygpIGFzIHN0YWNrOgogICAgICAgICBmb3IgcmVzb3VyY2UgaW4gcmVzb3VyY2VzOgogICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChyZXNvdXJjZSkKLSAgICAgICAgaWYgbmVlZF9zcGVjaWFsIHJlc291cmNlOgorICAgICAgICBpZiBuZWVkX3NwZWNpYWxfcmVzb3VyY2UoKToKICAgICAgICAgICAgIHNwZWNpYWwgPSBhY3F1aXJlX3NwZWNpYWxfcmVzb3VyY2UoKQogICAgICAgICAgICAgc3RhY2suY2FsbGJhY2socmVsZWFzZV9zcGVjaWFsX3Jlc291cmNlLCBzcGVjaWFsKQogICAgICAgICAjIFBlcmZvcm0gb3BlcmF0aW9ucyB0aGF0IHVzZSB0aGUgYWNxdWlyZWQgcmVzb3VyY2VzCkBAIC00NjYsNyArNTQzLDcgQEAKIAogRHVlIHRvIHRoZSB3YXkgdGhlIGRlY29yYXRvciBwcm90b2NvbCB3b3JrcywgYSBjYWxsYmFjayBmdW5jdGlvbgogZGVjbGFyZWQgdGhpcyB3YXkgY2Fubm90IHRha2UgYW55IHBhcmFtZXRlcnMuIEluc3RlYWQsIGFueSByZXNvdXJjZXMgdG8KLWJlIHJlbGVhc2VkIG11c3QgYmUgYWNjZXNzZWQgYXMgY2xvc3VyZSB2YXJpYWJsZXMKK2JlIHJlbGVhc2VkIG11c3QgYmUgYWNjZXNzZWQgYXMgY2xvc3VyZSB2YXJpYWJsZXMuCiAKIAogVXNpbmcgYSBjb250ZXh0IG1hbmFnZXIgYXMgYSBmdW5jdGlvbiBkZWNvcmF0b3IKQEAgLTQ5MSwxMCArNTY4LDEwIEBACiAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAKICAgICAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgICAgIGxvZ2dpbmcuaW5mbygnRW50ZXJpbmc6IHt9Jy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ0VudGVyaW5nOiB7fScuZm9ybWF0KHNlbGYubmFtZSkpCiAKICAgICAgICAgZGVmIF9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGMsIGV4Y190Yik6Ci0gICAgICAgICAgICBsb2dnaW5nLmluZm8oJ0V4aXRpbmc6IHt9Jy5mb3JtYXQobmFtZSkpCisgICAgICAgICAgICBsb2dnaW5nLmluZm8oJ0V4aXRpbmc6IHt9Jy5mb3JtYXQoc2VsZi5uYW1lKSkKIAogSW5zdGFuY2VzIG9mIHRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgYXMgYm90aCBhIGNvbnRleHQgbWFuYWdlcjo6CiAKQEAgLTUyMCwzICs1OTcsMTUzIEBACiAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uIDprZXl3b3JkOmB3aXRoYAogICAgICAgc3RhdGVtZW50LgogCisuLiBfc2luZ2xlLXVzZS1yZXVzYWJsZS1hbmQtcmVlbnRyYW50LWNtczoKKworU2luZ2xlIHVzZSwgcmV1c2FibGUgYW5kIHJlZW50cmFudCBjb250ZXh0IG1hbmFnZXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworTW9zdCBjb250ZXh0IG1hbmFnZXJzIGFyZSB3cml0dGVuIGluIGEgd2F5IHRoYXQgbWVhbnMgdGhleSBjYW4gb25seSBiZQordXNlZCBlZmZlY3RpdmVseSBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgb25jZS4gVGhlc2Ugc2luZ2xlIHVzZQorY29udGV4dCBtYW5hZ2VycyBtdXN0IGJlIGNyZWF0ZWQgYWZyZXNoIGVhY2ggdGltZSB0aGV5J3JlIHVzZWQgLQorYXR0ZW1wdGluZyB0byB1c2UgdGhlbSBhIHNlY29uZCB0aW1lIHdpbGwgdHJpZ2dlciBhbiBleGNlcHRpb24gb3IKK290aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkuCisKK1RoaXMgY29tbW9uIGxpbWl0YXRpb24gbWVhbnMgdGhhdCBpdCBpcyBnZW5lcmFsbHkgYWR2aXNhYmxlIHRvIGNyZWF0ZQorY29udGV4dCBtYW5hZ2VycyBkaXJlY3RseSBpbiB0aGUgaGVhZGVyIG9mIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50Cit3aGVyZSB0aGV5IGFyZSB1c2VkIChhcyBzaG93biBpbiBhbGwgb2YgdGhlIHVzYWdlIGV4YW1wbGVzIGFib3ZlKS4KKworRmlsZXMgYXJlIGFuIGV4YW1wbGUgb2YgZWZmZWN0aXZlbHkgc2luZ2xlIHVzZSBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZQordGhlIGZpcnN0IDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2lsbCBjbG9zZSB0aGUgZmlsZSwgcHJldmVudGluZyBhbnkKK2Z1cnRoZXIgSU8gb3BlcmF0aW9ucyB1c2luZyB0aGF0IGZpbGUgb2JqZWN0LgorCitDb250ZXh0IG1hbmFnZXJzIGNyZWF0ZWQgdXNpbmcgOmZ1bmM6YGNvbnRleHRtYW5hZ2VyYCBhcmUgYWxzbyBzaW5nbGUgdXNlCitjb250ZXh0IG1hbmFnZXJzLCBhbmQgd2lsbCBjb21wbGFpbiBhYm91dCB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZmFpbGluZwordG8geWllbGQgaWYgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHVzZSB0aGVtIGEgc2Vjb25kIHRpbWU6OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKKyAgICA+Pj4gQGNvbnRleHRtYW5hZ2VyCisgICAgLi4uIGRlZiBzaW5nbGV1c2UoKToKKyAgICAuLi4gICAgIHByaW50KCJCZWZvcmUiKQorICAgIC4uLiAgICAgeWllbGQKKyAgICAuLi4gICAgIHByaW50KCJBZnRlciIpCisgICAgLi4uCisgICAgPj4+IGNtID0gc2luZ2xldXNlKCkKKyAgICA+Pj4gd2l0aCBjbToKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4KKyAgICBCZWZvcmUKKyAgICBBZnRlcgorICAgID4+PiB3aXRoIGNtOgorICAgIC4uLiAgICBwYXNzCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICAuLi4KKyAgICBSdW50aW1lRXJyb3I6IGdlbmVyYXRvciBkaWRuJ3QgeWllbGQKKworCisuLiBfcmVlbnRyYW50LWNtczoKKworUmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK01vcmUgc29waGlzdGljYXRlZCBjb250ZXh0IG1hbmFnZXJzIG1heSBiZSAicmVlbnRyYW50Ii4gVGhlc2UgY29udGV4dAorbWFuYWdlcnMgY2FuIG5vdCBvbmx5IGJlIHVzZWQgaW4gbXVsdGlwbGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudHMsCitidXQgbWF5IGFsc28gYmUgdXNlZCAqaW5zaWRlKiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdGhhdCBpcyBhbHJlYWR5Cit1c2luZyB0aGUgc2FtZSBjb250ZXh0IG1hbmFnZXIuCisKKzpjbGFzczpgdGhyZWFkaW5nLlJMb2NrYCBpcyBhbiBleGFtcGxlIG9mIGEgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlciwgYXMgYXJlCis6ZnVuYzpgc3VwcHJlc3NgIGFuZCA6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YC4gSGVyZSdzIGEgdmVyeSBzaW1wbGUgZXhhbXBsZSBvZgorcmVlbnRyYW50IHVzZTo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCByZWRpcmVjdF9zdGRvdXQKKyAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KKyAgICA+Pj4gc3RyZWFtID0gU3RyaW5nSU8oKQorICAgID4+PiB3cml0ZV90b19zdHJlYW0gPSByZWRpcmVjdF9zdGRvdXQoc3RyZWFtKQorICAgID4+PiB3aXRoIHdyaXRlX3RvX3N0cmVhbToKKyAgICAuLi4gICAgIHByaW50KCJUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQiKQorICAgIC4uLiAgICAgd2l0aCB3cml0ZV90b19zdHJlYW06CisgICAgLi4uICAgICAgICAgcHJpbnQoIlRoaXMgaXMgYWxzbyB3cml0dGVuIHRvIHRoZSBzdHJlYW0iKQorICAgIC4uLgorICAgID4+PiBwcmludCgiVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dCIpCisgICAgVGhpcyBpcyB3cml0dGVuIGRpcmVjdGx5IHRvIHN0ZG91dAorICAgID4+PiBwcmludChzdHJlYW0uZ2V0dmFsdWUoKSkKKyAgICBUaGlzIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSByYXRoZXIgdGhhbiBzdGRvdXQKKyAgICBUaGlzIGlzIGFsc28gd3JpdHRlbiB0byB0aGUgc3RyZWFtCisKK1JlYWwgd29ybGQgZXhhbXBsZXMgb2YgcmVlbnRyYW5jeSBhcmUgbW9yZSBsaWtlbHkgdG8gaW52b2x2ZSBtdWx0aXBsZQorZnVuY3Rpb25zIGNhbGxpbmcgZWFjaCBvdGhlciBhbmQgaGVuY2UgYmUgZmFyIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGlzCitleGFtcGxlLgorCitOb3RlIGFsc28gdGhhdCBiZWluZyByZWVudHJhbnQgaXMgKm5vdCogdGhlIHNhbWUgdGhpbmcgYXMgYmVpbmcgdGhyZWFkIHNhZmUuCis6ZnVuYzpgcmVkaXJlY3Rfc3Rkb3V0YCwgZm9yIGV4YW1wbGUsIGlzIGRlZmluaXRlbHkgbm90IHRocmVhZCBzYWZlLCBhcyBpdAorbWFrZXMgYSBnbG9iYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSBzeXN0ZW0gc3RhdGUgYnkgYmluZGluZyA6ZGF0YTpgc3lzLnN0ZG91dGAKK3RvIGEgZGlmZmVyZW50IHN0cmVhbS4KKworCisuLiBfcmV1c2FibGUtY21zOgorCitSZXVzYWJsZSBjb250ZXh0IG1hbmFnZXJzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0Rpc3RpbmN0IGZyb20gYm90aCBzaW5nbGUgdXNlIGFuZCByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgInJldXNhYmxlIgorY29udGV4dCBtYW5hZ2VycyAob3IsIHRvIGJlIGNvbXBsZXRlbHkgZXhwbGljaXQsICJyZXVzYWJsZSwgYnV0IG5vdAorcmVlbnRyYW50IiBjb250ZXh0IG1hbmFnZXJzLCBzaW5jZSByZWVudHJhbnQgY29udGV4dCBtYW5hZ2VycyBhcmUgYWxzbworcmV1c2FibGUpLiBUaGVzZSBjb250ZXh0IG1hbmFnZXJzIHN1cHBvcnQgYmVpbmcgdXNlZCBtdWx0aXBsZSB0aW1lcywgYnV0Cit3aWxsIGZhaWwgKG9yIG90aGVyd2lzZSBub3Qgd29yayBjb3JyZWN0bHkpIGlmIHRoZSBzcGVjaWZpYyBjb250ZXh0IG1hbmFnZXIKK2luc3RhbmNlIGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiBhIGNvbnRhaW5pbmcgd2l0aCBzdGF0ZW1lbnQuCisKKzpjbGFzczpgdGhyZWFkaW5nLkxvY2tgIGlzIGFuIGV4YW1wbGUgb2YgYSByZXVzYWJsZSwgYnV0IG5vdCByZWVudHJhbnQsCitjb250ZXh0IG1hbmFnZXIgKGZvciBhIHJlZW50cmFudCBsb2NrLCBpdCBpcyBuZWNlc3NhcnkgdG8gdXNlCis6Y2xhc3M6YHRocmVhZGluZy5STG9ja2AgaW5zdGVhZCkuCisKK0Fub3RoZXIgZXhhbXBsZSBvZiBhIHJldXNhYmxlLCBidXQgbm90IHJlZW50cmFudCwgY29udGV4dCBtYW5hZ2VyIGlzCis6Y2xhc3M6YEV4aXRTdGFja2AsIGFzIGl0IGludm9rZXMgKmFsbCogY3VycmVudGx5IHJlZ2lzdGVyZWQgY2FsbGJhY2tzCit3aGVuIGxlYXZpbmcgYW55IHdpdGggc3RhdGVtZW50LCByZWdhcmRsZXNzIG9mIHdoZXJlIHRob3NlIGNhbGxiYWNrcword2VyZSBhZGRlZDo6CisKKyAgICA+Pj4gZnJvbSBjb250ZXh0bGliIGltcG9ydCBFeGl0U3RhY2sKKyAgICA+Pj4gc3RhY2sgPSBFeGl0U3RhY2soKQorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBmaXJzdCBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIGZpcnN0IGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgZmlyc3QgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGZpcnN0IGNvbnRleHQKKyAgICA+Pj4gd2l0aCBzdGFjazoKKyAgICAuLi4gICAgIHN0YWNrLmNhbGxiYWNrKHByaW50LCAiQ2FsbGJhY2s6IGZyb20gc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgc2Vjb25kIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgc2Vjb25kIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBzZWNvbmQgY29udGV4dAorICAgID4+PiB3aXRoIHN0YWNrOgorICAgIC4uLiAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0IikKKyAgICAuLi4gICAgIHdpdGggc3RhY2s6CisgICAgLi4uICAgICAgICAgc3RhY2suY2FsbGJhY2socHJpbnQsICJDYWxsYmFjazogZnJvbSBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgICAgICBwcmludCgiTGVhdmluZyBpbm5lciBjb250ZXh0IikKKyAgICAuLi4gICAgIHByaW50KCJMZWF2aW5nIG91dGVyIGNvbnRleHQiKQorICAgIC4uLgorICAgIExlYXZpbmcgaW5uZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQKKyAgICBDYWxsYmFjazogZnJvbSBvdXRlciBjb250ZXh0CisgICAgTGVhdmluZyBvdXRlciBjb250ZXh0CisKK0FzIHRoZSBvdXRwdXQgZnJvbSB0aGUgZXhhbXBsZSBzaG93cywgcmV1c2luZyBhIHNpbmdsZSBzdGFjayBvYmplY3QgYWNyb3NzCittdWx0aXBsZSB3aXRoIHN0YXRlbWVudHMgd29ya3MgY29ycmVjdGx5LCBidXQgYXR0ZW1wdGluZyB0byBuZXN0IHRoZW0KK3dpbGwgY2F1c2UgdGhlIHN0YWNrIHRvIGJlIGNsZWFyZWQgYXQgdGhlIGVuZCBvZiB0aGUgaW5uZXJtb3N0IHdpdGgKK3N0YXRlbWVudCwgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgZGVzaXJhYmxlIGJlaGF2aW91ci4KKworVXNpbmcgc2VwYXJhdGUgOmNsYXNzOmBFeGl0U3RhY2tgIGluc3RhbmNlcyBpbnN0ZWFkIG9mIHJldXNpbmcgYSBzaW5nbGUKK2luc3RhbmNlIGF2b2lkcyB0aGF0IHByb2JsZW06OgorCisgICAgPj4+IGZyb20gY29udGV4dGxpYiBpbXBvcnQgRXhpdFN0YWNrCisgICAgPj4+IHdpdGggRXhpdFN0YWNrKCkgYXMgb3V0ZXJfc3RhY2s6CisgICAgLi4uICAgICBvdXRlcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgd2l0aCBFeGl0U3RhY2soKSBhcyBpbm5lcl9zdGFjazoKKyAgICAuLi4gICAgICAgICBpbm5lcl9zdGFjay5jYWxsYmFjayhwcmludCwgIkNhbGxiYWNrOiBmcm9tIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgICAgIHByaW50KCJMZWF2aW5nIGlubmVyIGNvbnRleHQiKQorICAgIC4uLiAgICAgcHJpbnQoIkxlYXZpbmcgb3V0ZXIgY29udGV4dCIpCisgICAgLi4uCisgICAgTGVhdmluZyBpbm5lciBjb250ZXh0CisgICAgQ2FsbGJhY2s6IGZyb20gaW5uZXIgY29udGV4dAorICAgIExlYXZpbmcgb3V0ZXIgY29udGV4dAorICAgIENhbGxiYWNrOiBmcm9tIG91dGVyIGNvbnRleHQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvcHkucnN0IGIvRG9jL2xpYnJhcnkvY29weS5yc3QKaW5kZXggMWRiNWMyZC4uMDJlZjBlNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29weS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29weS5yc3QKQEAgLTY3LDggKzY3LDggQEAKIAogQ2xhc3NlcyBjYW4gdXNlIHRoZSBzYW1lIGludGVyZmFjZXMgdG8gY29udHJvbCBjb3B5aW5nIHRoYXQgdGhleSB1c2UgdG8gY29udHJvbAogcGlja2xpbmcuICBTZWUgdGhlIGRlc2NyaXB0aW9uIG9mIG1vZHVsZSA6bW9kOmBwaWNrbGVgIGZvciBpbmZvcm1hdGlvbiBvbiB0aGVzZQotbWV0aG9kcy4gIEluIGZhY3QsIDptb2Q6YGNvcHlgIG1vZHVsZSB1c2VzIHRoZSByZWdpc3RlcmVkIHBpY2tsZSBmdW5jdGlvbnMgZnJvbQotOm1vZDpgY29weXJlZ2AgbW9kdWxlLgorbWV0aG9kcy4gIEluIGZhY3QsIHRoZSA6bW9kOmBjb3B5YCBtb2R1bGUgdXNlcyB0aGUgcmVnaXN0ZXJlZAorcGlja2xlIGZ1bmN0aW9ucyBmcm9tIHRoZSA6bW9kOmBjb3B5cmVnYCBtb2R1bGUuCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogX19jb3B5X18oKSAoY29weSBwcm90b2NvbCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2NvcHlyZWcucnN0IGIvRG9jL2xpYnJhcnkvY29weXJlZy5yc3QKaW5kZXggNTBkNTg3OS4uMTgzMDZjNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY29weXJlZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvY29weXJlZy5yc3QKQEAgLTksNyArOSw3IEBACiAgICBtb2R1bGU6IHBpY2tsZQogICAgbW9kdWxlOiBjb3B5CiAKLVRoZSA6bW9kOmBjb3B5cmVnYCBtb2R1bGUgb2ZmZXJzIGEgd2F5IHRvIGRlZmluZSBmdWN0aW9ucyB1c2VkIHdoaWxlIHBpY2tsaW5nCitUaGUgOm1vZDpgY29weXJlZ2AgbW9kdWxlIG9mZmVycyBhIHdheSB0byBkZWZpbmUgZnVuY3Rpb25zIHVzZWQgd2hpbGUgcGlja2xpbmcKIHNwZWNpZmljIG9iamVjdHMuICBUaGUgOm1vZDpgcGlja2xlYCBhbmQgOm1vZDpgY29weWAgbW9kdWxlcyB1c2UgdGhvc2UgZnVuY3Rpb25zCiB3aGVuIHBpY2tsaW5nL2NvcHlpbmcgdGhvc2Ugb2JqZWN0cy4gIFRoZSBtb2R1bGUgcHJvdmlkZXMgY29uZmlndXJhdGlvbgogaW5mb3JtYXRpb24gYWJvdXQgb2JqZWN0IGNvbnN0cnVjdG9ycyB3aGljaCBhcmUgbm90IGNsYXNzZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jcnlwdG8ucnN0IGIvRG9jL2xpYnJhcnkvY3J5cHRvLnJzdAppbmRleCA0NjllZGU0Li4xZWRkZmRjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jcnlwdG8ucnN0CisrKyBiL0RvYy9saWJyYXJ5L2NyeXB0by5yc3QKQEAgLTE2LDE1ICsxNiwzIEBACiAKICAgIGhhc2hsaWIucnN0CiAgICBobWFjLnJzdAotCi0uLiBpbmRleDo6Ci0gICBwYWlyOiBBRVM7IGFsZ29yaXRobQotICAgc2luZ2xlOiBjcnlwdG9ncmFwaHkKLSAgIHNpbmdsZTogS3VjaGxpbmcsIEFuZHJldwotCi1IYXJkY29yZSBjeXBoZXJwdW5rcyB3aWxsIHByb2JhYmx5IGZpbmQgdGhlIGNyeXB0b2dyYXBoaWMgbW9kdWxlcyB3cml0dGVuIGJ5Ci1BLk0uIEt1Y2hsaW5nIG9mIGZ1cnRoZXIgaW50ZXJlc3Q7IHRoZSBwYWNrYWdlIGNvbnRhaW5zIG1vZHVsZXMgZm9yIHZhcmlvdXMKLWVuY3J5cHRpb24gYWxnb3JpdGhtcywgbW9zdCBub3RhYmx5IEFFUy4gIFRoZXNlIG1vZHVsZXMgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoCi1QeXRob24gYnV0IGF2YWlsYWJsZSBzZXBhcmF0ZWx5LiAgU2VlIHRoZSBVUkwKLWh0dHA6Ly93d3cucHljcnlwdG8ub3JnICBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3N2LnJzdCBiL0RvYy9saWJyYXJ5L2Nzdi5yc3QKaW5kZXggY2NjOWRjNi4uZTlhOWNiNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3N2LnJzdAorKysgYi9Eb2MvbGlicmFyeS9jc3YucnN0CkBAIC0xMDgsNyArMTA4LDcgQEAKICAgICAgICAgICBzcGFtd3JpdGVyLndyaXRlcm93KFsnU3BhbScsICdMb3ZlbHkgU3BhbScsICdXb25kZXJmdWwgU3BhbSddKQogCiAKLS4uIGZ1bmN0aW9uOjogcmVnaXN0ZXJfZGlhbGVjdChuYW1lWywgZGlhbGVjdF0sICoqZm10cGFyYW1zKQorLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9kaWFsZWN0KG5hbWVbLCBkaWFsZWN0WywgKipmbXRwYXJhbXNdXSkKIAogICAgQXNzb2NpYXRlICpkaWFsZWN0KiB3aXRoICpuYW1lKi4gICpuYW1lKiBtdXN0IGJlIGEgc3RyaW5nLiBUaGUKICAgIGRpYWxlY3QgY2FuIGJlIHNwZWNpZmllZCBlaXRoZXIgYnkgcGFzc2luZyBhIHN1Yi1jbGFzcyBvZiA6Y2xhc3M6YERpYWxlY3RgLCBvcgpAQCAtMTU4LDYgKzE1OCwxOCBAQAogICAgdGhlIG9wdGlvbmFsICpyZXN0dmFsKiBwYXJhbWV0ZXIuICBBbnkgb3RoZXIgb3B0aW9uYWwgb3Iga2V5d29yZCBhcmd1bWVudHMKICAgIGFyZSBwYXNzZWQgdG8gdGhlIHVuZGVybHlpbmcgOmNsYXNzOmByZWFkZXJgIGluc3RhbmNlLgogCisgICBBIHNob3J0IHVzYWdlIGV4YW1wbGU6OgorCisgICAgICAgPj4+IGltcG9ydCBjc3YKKyAgICAgICA+Pj4gd2l0aCBvcGVuKCduYW1lcy5jc3YnKSBhcyBjc3ZmaWxlOgorICAgICAgIC4uLiAgICAgcmVhZGVyID0gY3N2LkRpY3RSZWFkZXIoY3N2ZmlsZSkKKyAgICAgICAuLi4gICAgIGZvciByb3cgaW4gcmVhZGVyOgorICAgICAgIC4uLiAgICAgICAgIHByaW50KHJvd1snZmlyc3RfbmFtZSddLCByb3dbJ2xhc3RfbmFtZSddKQorICAgICAgIC4uLgorICAgICAgIEJha2VkIEJlYW5zCisgICAgICAgTG92ZWx5IFNwYW0KKyAgICAgICBXb25kZXJmdWwgU3BhbQorCiAKIC4uIGNsYXNzOjogRGljdFdyaXRlcihjc3ZmaWxlLCBmaWVsZG5hbWVzLCByZXN0dmFsPScnLCBleHRyYXNhY3Rpb249J3JhaXNlJywgXAogICAgICAgICAgICAgICAgICAgICAgIGRpYWxlY3Q9J2V4Y2VsJywgKmFyZ3MsICoqa3dkcykKQEAgLTE4MCw2ICsxOTIsMTkgQEAKICAgIG9iamVjdHMgYXJlIG5vdCBvcmRlcmVkLCB0aGVyZSBpcyBub3QgZW5vdWdoIGluZm9ybWF0aW9uIGF2YWlsYWJsZSB0byBkZWR1Y2UKICAgIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgcm93IHNob3VsZCBiZSB3cml0dGVuIHRvIHRoZSAqY3N2ZmlsZSouCiAKKyAgIEEgc2hvcnQgdXNhZ2UgZXhhbXBsZTo6CisKKyAgICAgICBpbXBvcnQgY3N2CisKKyAgICAgICB3aXRoIG9wZW4oJ25hbWVzLmNzdicsICd3JykgYXMgY3N2ZmlsZToKKyAgICAgICAgICAgZmllbGRuYW1lcyA9IFsnZmlyc3RfbmFtZScsICdsYXN0X25hbWUnXQorICAgICAgICAgICB3cml0ZXIgPSBjc3YuRGljdFdyaXRlcihjc3ZmaWxlLCBmaWVsZG5hbWVzPWZpZWxkbmFtZXMpCisKKyAgICAgICAgICAgd3JpdGVyLndyaXRlaGVhZGVyKCkKKyAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHsnZmlyc3RfbmFtZSc6ICdCYWtlZCcsICdsYXN0X25hbWUnOiAnQmVhbnMnfSkKKyAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHsnZmlyc3RfbmFtZSc6ICdMb3ZlbHknLCAnbGFzdF9uYW1lJzogJ1NwYW0nfSkKKyAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KHsnZmlyc3RfbmFtZSc6ICdXb25kZXJmdWwnLCAnbGFzdF9uYW1lJzogJ1NwYW0nfSkKKwogCiAuLiBjbGFzczo6IERpYWxlY3QKIApAQCAtMjk5LDcgKzMyNCw3IEBACiAKIC4uIGF0dHJpYnV0ZTo6IERpYWxlY3QuZG91YmxlcXVvdGUKIAotICAgQ29udHJvbHMgaG93IGluc3RhbmNlcyBvZiAqcXVvdGVjaGFyKiBhcHBlYXJpbmcgaW5zaWRlIGEgZmllbGQgc2hvdWxkIGJlCisgICBDb250cm9scyBob3cgaW5zdGFuY2VzIG9mICpxdW90ZWNoYXIqIGFwcGVhcmluZyBpbnNpZGUgYSBmaWVsZCBzaG91bGQKICAgIHRoZW1zZWx2ZXMgYmUgcXVvdGVkLiAgV2hlbiA6Y29uc3Q6YFRydWVgLCB0aGUgY2hhcmFjdGVyIGlzIGRvdWJsZWQuIFdoZW4KICAgIDpjb25zdDpgRmFsc2VgLCB0aGUgKmVzY2FwZWNoYXIqIGlzIHVzZWQgYXMgYSBwcmVmaXggdG8gdGhlICpxdW90ZWNoYXIqLiAgSXQKICAgIGRlZmF1bHRzIHRvIDpjb25zdDpgVHJ1ZWAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9jdHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvY3R5cGVzLnJzdAppbmRleCBmNDZkYTg1Li42MzBkMjc5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9jdHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2N0eXBlcy5yc3QKQEAgLTM5LDcgKzM5LDcgQEAKIGNvbnZlbnRpb24sIHdoaWxlICp3aW5kbGwqIGxpYnJhcmllcyBjYWxsIGZ1bmN0aW9ucyB1c2luZyB0aGUgYGBzdGRjYWxsYGAKIGNhbGxpbmcgY29udmVudGlvbi4gKm9sZWRsbCogYWxzbyB1c2VzIHRoZSBgYHN0ZGNhbGxgYCBjYWxsaW5nIGNvbnZlbnRpb24sIGFuZAogYXNzdW1lcyB0aGUgZnVuY3Rpb25zIHJldHVybiBhIFdpbmRvd3MgOmM6dHlwZTpgSFJFU1VMVGAgZXJyb3IgY29kZS4gVGhlIGVycm9yCi1jb2RlIGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSByYWlzZSBhIDpjbGFzczpgT1NFcnJvcmAgZXhjZXB0aW9uIHdoZW4gdGhlCitjb2RlIGlzIHVzZWQgdG8gYXV0b21hdGljYWxseSByYWlzZSBhbiA6Y2xhc3M6YE9TRXJyb3JgIGV4Y2VwdGlvbiB3aGVuIHRoZQogZnVuY3Rpb24gY2FsbCBmYWlscy4KIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKQEAgLTEwMzIsNyArMTAzMiw3IEBACiAgICBvdXRzaWRlIG9mIFB5dGhvbidzIGNvbnRyb2wgKGUuZy4gYnkgdGhlIGZvcmVpZ24gY29kZSB0aGF0IGNhbGxzIHRoZQogICAgY2FsbGJhY2spLCBjdHlwZXMgY3JlYXRlcyBhIG5ldyBkdW1teSBQeXRob24gdGhyZWFkIG9uIGV2ZXJ5IGludm9jYXRpb24uIFRoaXMKICAgIGJlaGF2aW9yIGlzIGNvcnJlY3QgZm9yIG1vc3QgcHVycG9zZXMsIGJ1dCBpdCBtZWFucyB0aGF0IHZhbHVlcyBzdG9yZWQgd2l0aAotICAgYHRocmVhZGluZy5sb2NhbGAgd2lsbCAqbm90KiBzdXJ2aXZlIGFjcm9zcyBkaWZmZXJlbnQgY2FsbGJhY2tzLCBldmVuIHdoZW4KKyAgIDpjbGFzczpgdGhyZWFkaW5nLmxvY2FsYCB3aWxsICpub3QqIHN1cnZpdmUgYWNyb3NzIGRpZmZlcmVudCBjYWxsYmFja3MsIGV2ZW4gd2hlbgogICAgdGhvc2UgY2FsbHMgYXJlIG1hZGUgZnJvbSB0aGUgc2FtZSBDIHRocmVhZC4KIAogLi4gX2N0eXBlcy1hY2Nlc3NpbmctdmFsdWVzLWV4cG9ydGVkLWZyb20tZGxsczoKQEAgLTEzODYsMTEgKzEzODYsMTYgQEAKICAgIFRoZSBkZWZhdWx0IG1vZGUgd2hpY2ggaXMgdXNlZCB0byBsb2FkIHNoYXJlZCBsaWJyYXJpZXMuICBPbiBPU1ggMTAuMywgdGhpcyBpcwogICAgKlJUTERfR0xPQkFMKiwgb3RoZXJ3aXNlIGl0IGlzIHRoZSBzYW1lIGFzICpSVExEX0xPQ0FMKi4KIAotSW5zdGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgaGF2ZSBubyBwdWJsaWMgbWV0aG9kcywgaG93ZXZlciA6bWV0aDpgX19nZXRhdHRyX19gCi1hbmQgOm1ldGg6YF9fZ2V0aXRlbV9fYCBoYXZlIHNwZWNpYWwgYmVoYXZpb3I6IGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGUgc2hhcmVkCi1saWJyYXJ5IGNhbiBiZSBhY2Nlc3NlZCBhcyBhdHRyaWJ1dGVzIG9mIGJ5IGluZGV4LiAgUGxlYXNlIG5vdGUgdGhhdCBib3RoCi06bWV0aDpgX19nZXRhdHRyX19gIGFuZCA6bWV0aDpgX19nZXRpdGVtX19gIGNhY2hlIHRoZWlyIHJlc3VsdCwgc28gY2FsbGluZyB0aGVtCi1yZXBlYXRlZGx5IHJldHVybnMgdGhlIHNhbWUgb2JqZWN0IGVhY2ggdGltZS4KK0luc3RhbmNlcyBvZiB0aGVzZSBjbGFzc2VzIGhhdmUgbm8gcHVibGljIG1ldGhvZHMuICBGdW5jdGlvbnMgZXhwb3J0ZWQgYnkgdGhlCitzaGFyZWQgbGlicmFyeSBjYW4gYmUgYWNjZXNzZWQgYXMgYXR0cmlidXRlcyBvciBieSBpbmRleC4gIFBsZWFzZSBub3RlIHRoYXQKK2FjY2Vzc2luZyB0aGUgZnVuY3Rpb24gdGhyb3VnaCBhbiBhdHRyaWJ1dGUgY2FjaGVzIHRoZSByZXN1bHQgYW5kIHRoZXJlZm9yZQorYWNjZXNzaW5nIGl0IHJlcGVhdGVkbHkgcmV0dXJucyB0aGUgc2FtZSBvYmplY3QgZWFjaCB0aW1lLiAgT24gdGhlIG90aGVyIGhhbmQsCithY2Nlc3NpbmcgaXQgdGhyb3VnaCBhbiBpbmRleCByZXR1cm5zIGEgbmV3IG9iamVjdCBlYWNoIHRpbWU6CisKKyAgID4+PiBsaWJjLnRpbWUgPT0gbGliYy50aW1lCisgICBUcnVlCisgICA+Pj4gbGliY1sndGltZSddID09IGxpYmNbJ3RpbWUnXQorICAgRmFsc2UKIAogVGhlIGZvbGxvd2luZyBwdWJsaWMgYXR0cmlidXRlcyBhcmUgYXZhaWxhYmxlLCB0aGVpciBuYW1lIHN0YXJ0cyB3aXRoIGFuCiB1bmRlcnNjb3JlIHRvIG5vdCBjbGFzaCB3aXRoIGV4cG9ydGVkIGZ1bmN0aW9uIG5hbWVzOgpAQCAtMTgyOCw3ICsxODMzLDcgQEAKIC4uIGZ1bmN0aW9uOjogZmluZF9tc3ZjcnQoKQogICAgOm1vZHVsZTogY3R5cGVzLnV0aWwKIAotICAgV2luZG93cyBvbmx5OiByZXR1cm4gdGhlIGZpbGVuYW1lIG9mIHRoZSBWQyBydW50eXBlIGxpYnJhcnkgdXNlZCBieSBQeXRob24sCisgICBXaW5kb3dzIG9ubHk6IHJldHVybiB0aGUgZmlsZW5hbWUgb2YgdGhlIFZDIHJ1bnRpbWUgbGlicmFyeSB1c2VkIGJ5IFB5dGhvbiwKICAgIGFuZCBieSB0aGUgZXh0ZW5zaW9uIG1vZHVsZXMuICBJZiB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBjYW5ub3QgYmUKICAgIGRldGVybWluZWQsIGBgTm9uZWBgIGlzIHJldHVybmVkLgogCkBAIC0yMzMwLDExICsyMzM1LDYgQEAKICAgICAgIGFuZCBzbyBvbikuICBMYXRlciBhc3NpZ25tZW50cyB0byB0aGUgOmF0dHI6YF9maWVsZHNfYCBjbGFzcyB2YXJpYWJsZSB3aWxsCiAgICAgICByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvci4KIAotICAgICAgU3RydWN0dXJlIGFuZCB1bmlvbiBzdWJjbGFzcyBjb25zdHJ1Y3RvcnMgYWNjZXB0IGJvdGggcG9zaXRpb25hbCBhbmQgbmFtZWQKLSAgICAgIGFyZ3VtZW50cy4gIFBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZSB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGZpZWxkcyBpbiB0aGUKLSAgICAgIHNhbWUgb3JkZXIgYXMgdGhleSBhcHBlYXIgaW4gdGhlIDphdHRyOmBfZmllbGRzX2AgZGVmaW5pdGlvbiwgbmFtZWQKLSAgICAgIGFyZ3VtZW50cyBhcmUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBmaWVsZHMgd2l0aCB0aGUgY29ycmVzcG9uZGluZyBuYW1lLgotCiAgICAgICBJdCBpcyBwb3NzaWJsZSB0byBkZWZpbmVkIHN1Yi1zdWJjbGFzc2VzIG9mIHN0cnVjdHVyZSB0eXBlcywgdGhleSBpbmhlcml0CiAgICAgICB0aGUgZmllbGRzIG9mIHRoZSBiYXNlIGNsYXNzIHBsdXMgdGhlIDphdHRyOmBfZmllbGRzX2AgZGVmaW5lZCBpbiB0aGUKICAgICAgIHN1Yi1zdWJjbGFzcywgaWYgYW55LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvY3Vyc2VzLnJzdCBiL0RvYy9saWJyYXJ5L2N1cnNlcy5yc3QKaW5kZXggMzE0NjM2ZS4uZjNlNjBiNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvY3Vyc2VzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9jdXJzZXMucnN0CkBAIC0xMiw3ICsxMiw3IEBACiBkZS1mYWN0byBzdGFuZGFyZCBmb3IgcG9ydGFibGUgYWR2YW5jZWQgdGVybWluYWwgaGFuZGxpbmcuCiAKIFdoaWxlIGN1cnNlcyBpcyBtb3N0IHdpZGVseSB1c2VkIGluIHRoZSBVbml4IGVudmlyb25tZW50LCB2ZXJzaW9ucyBhcmUgYXZhaWxhYmxlCi1mb3IgRE9TLCBPUy8yLCBhbmQgcG9zc2libHkgb3RoZXIgc3lzdGVtcyBhcyB3ZWxsLiAgVGhpcyBleHRlbnNpb24gbW9kdWxlIGlzCitmb3IgV2luZG93cywgRE9TLCBhbmQgcG9zc2libHkgb3RoZXIgc3lzdGVtcyBhcyB3ZWxsLiAgVGhpcyBleHRlbnNpb24gbW9kdWxlIGlzCiBkZXNpZ25lZCB0byBtYXRjaCB0aGUgQVBJIG9mIG5jdXJzZXMsIGFuIG9wZW4tc291cmNlIGN1cnNlcyBsaWJyYXJ5IGhvc3RlZCBvbgogTGludXggYW5kIHRoZSBCU0QgdmFyaWFudHMgb2YgVW5peC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L2RhdGF0eXBlcy5yc3QKaW5kZXggZDAzODJlMC4uNDhhZjA4MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGF0YXR5cGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kYXRhdHlwZXMucnN0CkBAIC0zMCwzICszMCw0IEBACiAgICBjb3B5LnJzdAogICAgcHByaW50LnJzdAogICAgcmVwcmxpYi5yc3QKKyAgIGVudW0ucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QgYi9Eb2MvbGlicmFyeS9kYXRldGltZS5yc3QKaW5kZXggMDY1ZTg1MC4uODhmM2Y2ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGF0ZXRpbWUucnN0CisrKyBiL0RvYy9saWJyYXJ5L2RhdGV0aW1lLnJzdApAQCAtMTcwLDEwICsxNzAsMTIgQEAKICAgICogYGAwIDw9IHNlY29uZHMgPCAzNjAwKjI0YGAgKHRoZSBudW1iZXIgb2Ygc2Vjb25kcyBpbiBvbmUgZGF5KQogICAgKiBgYC05OTk5OTk5OTkgPD0gZGF5cyA8PSA5OTk5OTk5OTlgYAogCi0gICBJZiBhbnkgYXJndW1lbnQgaXMgYSBmbG9hdCBhbmQgdGhlcmUgYXJlIGZyYWN0aW9uYWwgbWljcm9zZWNvbmRzLCB0aGUgZnJhY3Rpb25hbAotICAgbWljcm9zZWNvbmRzIGxlZnQgb3ZlciBmcm9tIGFsbCBhcmd1bWVudHMgYXJlIGNvbWJpbmVkIGFuZCB0aGVpciBzdW0gaXMgcm91bmRlZAotICAgdG8gdGhlIG5lYXJlc3QgbWljcm9zZWNvbmQuICBJZiBubyBhcmd1bWVudCBpcyBhIGZsb2F0LCB0aGUgY29udmVyc2lvbiBhbmQKLSAgIG5vcm1hbGl6YXRpb24gcHJvY2Vzc2VzIGFyZSBleGFjdCAobm8gaW5mb3JtYXRpb24gaXMgbG9zdCkuCisgICBJZiBhbnkgYXJndW1lbnQgaXMgYSBmbG9hdCBhbmQgdGhlcmUgYXJlIGZyYWN0aW9uYWwgbWljcm9zZWNvbmRzLAorICAgdGhlIGZyYWN0aW9uYWwgbWljcm9zZWNvbmRzIGxlZnQgb3ZlciBmcm9tIGFsbCBhcmd1bWVudHMgYXJlCisgICBjb21iaW5lZCBhbmQgdGhlaXIgc3VtIGlzIHJvdW5kZWQgdG8gdGhlIG5lYXJlc3QgbWljcm9zZWNvbmQgdXNpbmcKKyAgIHJvdW5kLWhhbGYtdG8tZXZlbiB0aWVicmVha2VyLiAgSWYgbm8gYXJndW1lbnQgaXMgYSBmbG9hdCwgdGhlCisgICBjb252ZXJzaW9uIGFuZCBub3JtYWxpemF0aW9uIHByb2Nlc3NlcyBhcmUgZXhhY3QgKG5vIGluZm9ybWF0aW9uIGlzCisgICBsb3N0KS4KIAogICAgSWYgdGhlIG5vcm1hbGl6ZWQgdmFsdWUgb2YgZGF5cyBsaWVzIG91dHNpZGUgdGhlIGluZGljYXRlZCByYW5nZSwKICAgIDpleGM6YE92ZXJmbG93RXJyb3JgIGlzIHJhaXNlZC4KQEAgLTU1Niw3ICs1NTgsNyBAQAogICAgUmV0dXJuIGEgMy10dXBsZSwgKElTTyB5ZWFyLCBJU08gd2VlayBudW1iZXIsIElTTyB3ZWVrZGF5KS4KIAogICAgVGhlIElTTyBjYWxlbmRhciBpcyBhIHdpZGVseSB1c2VkIHZhcmlhbnQgb2YgdGhlIEdyZWdvcmlhbiBjYWxlbmRhci4gU2VlCi0gICBodHRwOi8vd3d3LnBoeXMudXUubmwvfnZnZW50L2NhbGVuZGFyL2lzb2NhbGVuZGFyLmh0bSBmb3IgYSBnb29kCisgICBodHRwOi8vd3d3LnN0YWZmLnNjaWVuY2UudXUubmwvfmdlbnQwMTEzL2NhbGVuZGFyL2lzb2NhbGVuZGFyLmh0bSBmb3IgYSBnb29kCiAgICBleHBsYW5hdGlvbi4KIAogICAgVGhlIElTTyB5ZWFyIGNvbnNpc3RzIG9mIDUyIG9yIDUzIGZ1bGwgd2Vla3MsIGFuZCB3aGVyZSBhIHdlZWsgc3RhcnRzIG9uIGEKQEAgLTY2Miw4ICs2NjQsOCBAQAogCiAuLiBfZGF0ZXRpbWUtZGF0ZXRpbWU6CiAKLTpjbGFzczpgZGF0ZXRpbWVgIE9iamVjdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzpjbGFzczpgLmRhdGV0aW1lYCBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBBIDpjbGFzczpgLmRhdGV0aW1lYCBvYmplY3QgaXMgYSBzaW5nbGUgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHRoZSBpbmZvcm1hdGlvbgogZnJvbSBhIDpjbGFzczpgZGF0ZWAgb2JqZWN0IGFuZCBhIDpjbGFzczpgLnRpbWVgIG9iamVjdC4gIExpa2UgYSA6Y2xhc3M6YGRhdGVgCkBAIC0xNjg0LDEyICsxNjg2LDEyIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgcHl0eiA8aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL3B5dHovPmBfCi0gICAgICBUaGUgc3RhbmRhcmQgbGlicmFyeSBoYXMgbm8gOmNsYXNzOmB0emluZm9gIGluc3RhbmNlcyBleGNlcHQgZm9yIFVUQywgYnV0Ci0gICAgICB0aGVyZSBleGlzdHMgYSB0aGlyZC1wYXJ0eSBsaWJyYXJ5IHdoaWNoIGJyaW5ncyB0aGUgKklBTkEgdGltZXpvbmUKLSAgICAgIGRhdGFiYXNlKiAoYWxzbyBrbm93biBhcyB0aGUgT2xzb24gZGF0YWJhc2UpIHRvIFB5dGhvbjogKnB5dHoqLgorICAgYHB5dHogPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvcHl0ei8+YF8KKyAgICAgIFRoZSBzdGFuZGFyZCBsaWJyYXJ5IGhhcyA6Y2xhc3M6YHRpbWV6b25lYCBjbGFzcyBmb3IgaGFuZGxpbmcgYXJiaXRyYXJ5CisgICAgICBmaXhlZCBvZmZzZXRzIGZyb20gVVRDIGFuZCA6YXR0cjpgdGltZXpvbmUudXRjYCBhcyBVVEMgdGltZXpvbmUgaW5zdGFuY2UuCiAKLSAgICAgICpweXR6KiBjb250YWlucyB1cC10by1kYXRlIGluZm9ybWF0aW9uIGFuZCBpdHMgdXNhZ2UgaXMgcmVjb21tZW5kZWQuCisgICAgICAqcHl0eiogbGlicmFyeSBicmluZ3MgdGhlICpJQU5BIHRpbWV6b25lIGRhdGFiYXNlKiAoYWxzbyBrbm93biBhcyB0aGUKKyAgICAgIE9sc29uIGRhdGFiYXNlKSB0byBQeXRob24gYW5kIGl0cyB1c2FnZSBpcyByZWNvbW1lbmRlZC4KIAogICAgYElBTkEgdGltZXpvbmUgZGF0YWJhc2UgPGh0dHA6Ly93d3cuaWFuYS5vcmcvdGltZS16b25lcz5gXwogICAgICAgVGhlIFRpbWUgWm9uZSBEYXRhYmFzZSAob2Z0ZW4gY2FsbGVkIHR6IG9yIHpvbmVpbmZvKSBjb250YWlucyBjb2RlIGFuZApAQCAtMTcyNiw2ICsxNzI4LDggQEAKICAgKm9mZnNldCosIEhIIGFuZCBNTSBhcmUgdHdvIGRpZ2l0cyBvZiBgYG9mZnNldC5ob3Vyc2BgIGFuZAogICBgYG9mZnNldC5taW51dGVzYGAgcmVzcGVjdGl2ZWx5LgogCisgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCiAuLiBtZXRob2Q6OiB0aW1lem9uZS51dGNvZmZzZXQoZHQpCiAKICAgUmV0dXJuIHRoZSBmaXhlZCB2YWx1ZSBzcGVjaWZpZWQgd2hlbiB0aGUgOmNsYXNzOmB0aW1lem9uZWAgaW5zdGFuY2UgaXMKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RibS5yc3QgYi9Eb2MvbGlicmFyeS9kYm0ucnN0CmluZGV4IGJkODhmNDEuLmU2YTgyZDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RibS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGJtLnJzdApAQCAtNzMsMzMgKzczLDM5IEBACiBzdHJpbmdzIGFyZSB1c2VkIHRoZXkgYXJlIGltcGxpY2l0bHkgY29udmVydGVkIHRvIHRoZSBkZWZhdWx0IGVuY29kaW5nIGJlZm9yZQogYmVpbmcgc3RvcmVkLgogCitUaGVzZSBvYmplY3RzIGFsc28gc3VwcG9ydCBiZWluZyB1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgd2hpY2gKK3dpbGwgYXV0b21hdGljYWxseSBjbG9zZSB0aGVtIHdoZW4gZG9uZS4KKworLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFkZGVkIG5hdGl2ZSBzdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHRvIHRoZSBvYmplY3RzCisgICByZXR1cm5lZCBieSA6ZnVuYzpgLm9wZW5gLgorCiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgcmVjb3JkcyBzb21lIGhvc3RuYW1lcyBhbmQgYSBjb3JyZXNwb25kaW5nIHRpdGxlLCAgYW5kCiB0aGVuIHByaW50cyBvdXQgdGhlIGNvbnRlbnRzIG9mIHRoZSBkYXRhYmFzZTo6CiAKICAgIGltcG9ydCBkYm0KIAogICAgIyBPcGVuIGRhdGFiYXNlLCBjcmVhdGluZyBpdCBpZiBuZWNlc3NhcnkuCi0gICBkYiA9IGRibS5vcGVuKCdjYWNoZScsICdjJykKKyAgIHdpdGggZGJtLm9wZW4oJ2NhY2hlJywgJ2MnKSBhcyBkYjoKIAotICAgIyBSZWNvcmQgc29tZSB2YWx1ZXMKLSAgIGRiW2InaGVsbG8nXSA9IGIndGhlcmUnCi0gICBkYlsnd3d3LnB5dGhvbi5vcmcnXSA9ICdQeXRob24gV2Vic2l0ZScKLSAgIGRiWyd3d3cuY25uLmNvbSddID0gJ0NhYmxlIE5ld3MgTmV0d29yaycKKyAgICAgICAjIFJlY29yZCBzb21lIHZhbHVlcworICAgICAgIGRiW2InaGVsbG8nXSA9IGIndGhlcmUnCisgICAgICAgZGJbJ3d3dy5weXRob24ub3JnJ10gPSAnUHl0aG9uIFdlYnNpdGUnCisgICAgICAgZGJbJ3d3dy5jbm4uY29tJ10gPSAnQ2FibGUgTmV3cyBOZXR3b3JrJwogCi0gICAjIE5vdGUgdGhhdCB0aGUga2V5cyBhcmUgY29uc2lkZXJlZCBieXRlcyBub3cuCi0gICBhc3NlcnQgZGJbYid3d3cucHl0aG9uLm9yZyddID09IGInUHl0aG9uIFdlYnNpdGUnCi0gICAjIE5vdGljZSBob3cgdGhlIHZhbHVlIGlzIG5vdyBpbiBieXRlcy4KLSAgIGFzc2VydCBkYlsnd3d3LmNubi5jb20nXSA9PSBiJ0NhYmxlIE5ld3MgTmV0d29yaycKKyAgICAgICAjIE5vdGUgdGhhdCB0aGUga2V5cyBhcmUgY29uc2lkZXJlZCBieXRlcyBub3cuCisgICAgICAgYXNzZXJ0IGRiW2Ind3d3LnB5dGhvbi5vcmcnXSA9PSBiJ1B5dGhvbiBXZWJzaXRlJworICAgICAgICMgTm90aWNlIGhvdyB0aGUgdmFsdWUgaXMgbm93IGluIGJ5dGVzLgorICAgICAgIGFzc2VydCBkYlsnd3d3LmNubi5jb20nXSA9PSBiJ0NhYmxlIE5ld3MgTmV0d29yaycKIAotICAgIyBPZnRlbi11c2VkIG1ldGhvZHMgb2YgdGhlIGRpY3QgaW50ZXJmYWNlIHdvcmsgdG9vLgotICAgcHJpbnQoZGIuZ2V0KCdweXRob24ub3JnJywgYidub3QgcHJlc2VudCcpKQorICAgICAgICMgT2Z0ZW4tdXNlZCBtZXRob2RzIG9mIHRoZSBkaWN0IGludGVyZmFjZSB3b3JrIHRvby4KKyAgICAgICBwcmludChkYi5nZXQoJ3B5dGhvbi5vcmcnLCBiJ25vdCBwcmVzZW50JykpCiAKLSAgICMgU3RvcmluZyBhIG5vbi1zdHJpbmcga2V5IG9yIHZhbHVlIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIChtb3N0Ci0gICAjIGxpa2VseSBhIFR5cGVFcnJvcikuCi0gICBkYlsnd3d3LnlhaG9vLmNvbSddID0gNAorICAgICAgICMgU3RvcmluZyBhIG5vbi1zdHJpbmcga2V5IG9yIHZhbHVlIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIChtb3N0CisgICAgICAgIyBsaWtlbHkgYSBUeXBlRXJyb3IpLgorICAgICAgIGRiWyd3d3cueWFob28uY29tJ10gPSA0CiAKLSAgICMgQ2xvc2Ugd2hlbiBkb25lLgotICAgZGIuY2xvc2UoKQorICAgIyBkYiBpcyBhdXRvbWF0aWNhbGx5IGNsb3NlZCB3aGVuIGxlYXZpbmcgdGhlIHdpdGggc3RhdGVtZW50LgogCiAKIC4uIHNlZWFsc286OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGVidWcucnN0IGIvRG9jL2xpYnJhcnkvZGVidWcucnN0CmluZGV4IGM2OWZiMWMuLjg4YTJmYTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2RlYnVnLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kZWJ1Zy5yc3QKQEAgLTE1LDMgKzE1LDQgQEAKICAgIHByb2ZpbGUucnN0CiAgICB0aW1laXQucnN0CiAgICB0cmFjZS5yc3QKKyAgIHRyYWNlbWFsbG9jLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGVjaW1hbC5yc3QgYi9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdAppbmRleCAwNTlhZTdjLi5jYTQxYzNhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kZWNpbWFsLnJzdApAQCAtMjYxLDcgKzI2MSw3IEBACiBDb250ZXh0KCkgY29uc3RydWN0b3IuICBUbyBtYWtlIGFuIGFsdGVybmF0ZSBhY3RpdmUsIHVzZSB0aGUgOmZ1bmM6YHNldGNvbnRleHRgCiBmdW5jdGlvbi4KIAotSW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzdGFuZGFyZCwgdGhlIDptb2Q6YERlY2ltYWxgIG1vZHVsZSBwcm92aWRlcyB0d28gcmVhZHkgdG8KK0luIGFjY29yZGFuY2Ugd2l0aCB0aGUgc3RhbmRhcmQsIHRoZSA6bW9kOmBkZWNpbWFsYCBtb2R1bGUgcHJvdmlkZXMgdHdvIHJlYWR5IHRvCiB1c2Ugc3RhbmRhcmQgY29udGV4dHMsIDpjb25zdDpgQmFzaWNDb250ZXh0YCBhbmQgOmNvbnN0OmBFeHRlbmRlZENvbnRleHRgLiBUaGUKIGZvcm1lciBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgZGVidWdnaW5nIGJlY2F1c2UgbWFueSBvZiB0aGUgdHJhcHMgYXJlCiBlbmFibGVkOgpAQCAtODQ1LDcgKzg0NSw3IEBACiAKICAgICAgIEVuZ2luZWVyaW5nIG5vdGF0aW9uIGhhcyBhbiBleHBvbmVudCB3aGljaCBpcyBhIG11bHRpcGxlIG9mIDMsIHNvIHRoZXJlCiAgICAgICBhcmUgdXAgdG8gMyBkaWdpdHMgbGVmdCBvZiB0aGUgZGVjaW1hbCBwbGFjZS4gIEZvciBleGFtcGxlLCBjb252ZXJ0cwotICAgICAgYGBEZWNpbWFsKCcxMjNFKzEnKWBgIHRvIGBgRGVjaW1hbCgnMS4yM0UrMycpYGAKKyAgICAgIGBgRGVjaW1hbCgnMTIzRSsxJylgYCB0byBgYERlY2ltYWwoJzEuMjNFKzMnKWBgLgogCiAgICAuLiBtZXRob2Q6OiB0b19pbnRlZ3JhbChyb3VuZGluZz1Ob25lLCBjb250ZXh0PU5vbmUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdCBiL0RvYy9saWJyYXJ5L2RldmVsb3BtZW50LnJzdAppbmRleCAyMzY4NzY5Li4wNmU3MDQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kZXZlbG9wbWVudC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGV2ZWxvcG1lbnQucnN0CkBAIC0yMyw0ICsyMywzIEBACiAgICB1bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAogICAgMnRvMy5yc3QKICAgIHRlc3QucnN0Ci0gICB2ZW52LnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlmZmxpYi5yc3QgYi9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdAppbmRleCA4MWRjMGYxLi5jZWFkODE4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaWZmbGliLnJzdApAQCAtOTQsOSArOTQsOSBAQAogICAgICAgKndyYXBjb2x1bW4qIGlzIGFuIG9wdGlvbmFsIGtleXdvcmQgdG8gc3BlY2lmeSBjb2x1bW4gbnVtYmVyIHdoZXJlIGxpbmVzIGFyZQogICAgICAgYnJva2VuIGFuZCB3cmFwcGVkLCBkZWZhdWx0cyB0byBgYE5vbmVgYCB3aGVyZSBsaW5lcyBhcmUgbm90IHdyYXBwZWQuCiAKLSAgICAgICpsaW5lanVuayogYW5kICpjaGFyanVuayogYXJlIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCBpbnRvIGBgbmRpZmYoKWBgCisgICAgICAqbGluZWp1bmsqIGFuZCAqY2hhcmp1bmsqIGFyZSBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBwYXNzZWQgaW50byA6ZnVuYzpgbmRpZmZgCiAgICAgICAodXNlZCBieSA6Y2xhc3M6YEh0bWxEaWZmYCB0byBnZW5lcmF0ZSB0aGUgc2lkZSBieSBzaWRlIEhUTUwgZGlmZmVyZW5jZXMpLiAgU2VlCi0gICAgICBgYG5kaWZmKClgYCBkb2N1bWVudGF0aW9uIGZvciBhcmd1bWVudCBkZWZhdWx0IHZhbHVlcyBhbmQgZGVzY3JpcHRpb25zLgorICAgICAgOmZ1bmM6YG5kaWZmYCBkb2N1bWVudGF0aW9uIGZvciBhcmd1bWVudCBkZWZhdWx0IHZhbHVlcyBhbmQgZGVzY3JpcHRpb25zLgogCiAgICBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHB1YmxpYzoKIApAQCAtMjI2LDggKzIyNiw4IEBACiAKICAgIDpmaWxlOmBUb29scy9zY3JpcHRzL25kaWZmLnB5YCBpcyBhIGNvbW1hbmQtbGluZSBmcm9udC1lbmQgdG8gdGhpcyBmdW5jdGlvbi4KIAotICAgICAgPj4+IGRpZmYgPSBuZGlmZignb25lXG50d29cbnRocmVlXG4nLnNwbGl0bGluZXMoMSksCi0gICAgICAuLi4gICAgICAgICAgICAgICdvcmVcbnRyZWVcbmVtdVxuJy5zcGxpdGxpbmVzKDEpKQorICAgICAgPj4+IGRpZmYgPSBuZGlmZignb25lXG50d29cbnRocmVlXG4nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSksCisgICAgICAuLi4gICAgICAgICAgICAgICdvcmVcbnRyZWVcbmVtdVxuJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKQogICAgICAgPj4+IHByaW50KCcnLmpvaW4oZGlmZiksIGVuZD0iIikKICAgICAgIC0gb25lCiAgICAgICA/ICBeCkBAIC0yNTAsOCArMjUwLDggQEAKIAogICAgRXhhbXBsZToKIAotICAgICAgPj4+IGRpZmYgPSBuZGlmZignb25lXG50d29cbnRocmVlXG4nLnNwbGl0bGluZXMoMSksCi0gICAgICAuLi4gICAgICAgICAgICAgICdvcmVcbnRyZWVcbmVtdVxuJy5zcGxpdGxpbmVzKDEpKQorICAgICAgPj4+IGRpZmYgPSBuZGlmZignb25lXG50d29cbnRocmVlXG4nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSksCisgICAgICAuLi4gICAgICAgICAgICAgICdvcmVcbnRyZWVcbmVtdVxuJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKQogICAgICAgPj4+IGRpZmYgPSBsaXN0KGRpZmYpICMgbWF0ZXJpYWxpemUgdGhlIGdlbmVyYXRlZCBkZWx0YSBpbnRvIGEgbGlzdAogICAgICAgPj4+IHByaW50KCcnLmpvaW4ocmVzdG9yZShkaWZmLCAxKSksIGVuZD0iIikKICAgICAgIG9uZQpAQCAtMjY5LDcgKzI2OSw3IEBACiAgICBnZW5lcmF0aW5nIHRoZSBkZWx0YSBsaW5lcykgaW4gdW5pZmllZCBkaWZmIGZvcm1hdC4KIAogICAgVW5pZmllZCBkaWZmcyBhcmUgYSBjb21wYWN0IHdheSBvZiBzaG93aW5nIGp1c3QgdGhlIGxpbmVzIHRoYXQgaGF2ZSBjaGFuZ2VkIHBsdXMKLSAgIGEgZmV3IGxpbmVzIG9mIGNvbnRleHQuICBUaGUgY2hhbmdlcyBhcmUgc2hvd24gaW4gYSBpbmxpbmUgc3R5bGUgKGluc3RlYWQgb2YKKyAgIGEgZmV3IGxpbmVzIG9mIGNvbnRleHQuICBUaGUgY2hhbmdlcyBhcmUgc2hvd24gaW4gYW4gaW5saW5lIHN0eWxlIChpbnN0ZWFkIG9mCiAgICBzZXBhcmF0ZSBiZWZvcmUvYWZ0ZXIgYmxvY2tzKS4gIFRoZSBudW1iZXIgb2YgY29udGV4dCBsaW5lcyBpcyBzZXQgYnkgKm4qIHdoaWNoCiAgICBkZWZhdWx0cyB0byB0aHJlZS4KIApAQCAtMzIzLDkgKzMyMyw5IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgUGF0dGVybiBNYXRjaGluZzogVGhlIEdlc3RhbHQgQXBwcm9hY2ggPGh0dHA6Ly93d3cuZGRqLmNvbS8xODQ0MDc5NzA/cGdubz01PmBfCisgICBgUGF0dGVybiBNYXRjaGluZzogVGhlIEdlc3RhbHQgQXBwcm9hY2ggPGh0dHA6Ly93d3cuZHJkb2Jicy5jb20vZGF0YWJhc2UvcGF0dGVybi1tYXRjaGluZy10aGUtZ2VzdGFsdC1hcHByb2FjaC8xODQ0MDc5NzA+YF8KICAgICAgIERpc2N1c3Npb24gb2YgYSBzaW1pbGFyIGFsZ29yaXRobSBieSBKb2huIFcuIFJhdGNsaWZmIGFuZCBELiBFLiBNZXR6ZW5lci4gVGhpcwotICAgICAgd2FzIHB1Ymxpc2hlZCBpbiBgRHIuIERvYmIncyBKb3VybmFsIDxodHRwOi8vd3d3LmRkai5jb20vPmBfIGluIEp1bHksIDE5ODguCisgICAgICB3YXMgcHVibGlzaGVkIGluIGBEci4gRG9iYidzIEpvdXJuYWwgPGh0dHA6Ly93d3cuZHJkb2Jicy5jb20vPmBfIGluIEp1bHksIDE5ODguCiAKIAogLi4gX3NlcXVlbmNlLW1hdGNoZXI6CkBAIC02NTAsNyArNjUwLDcgQEAKICAgIC4uLiAgIDIuIEV4cGxpY2l0IGlzIGJldHRlciB0aGFuIGltcGxpY2l0LgogICAgLi4uICAgMy4gU2ltcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCiAgICAuLi4gICA0LiBDb21wbGV4IGlzIGJldHRlciB0aGFuIGNvbXBsaWNhdGVkLgotICAgLi4uICcnJy5zcGxpdGxpbmVzKDEpCisgICAuLi4gJycnLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkKICAgID4+PiBsZW4odGV4dDEpCiAgICA0CiAgICA+Pj4gdGV4dDFbMF1bLTFdCkBAIC02NTksNyArNjU5LDcgQEAKICAgIC4uLiAgIDMuICAgU2ltcGxlIGlzIGJldHRlciB0aGFuIGNvbXBsZXguCiAgICAuLi4gICA0LiBDb21wbGljYXRlZCBpcyBiZXR0ZXIgdGhhbiBjb21wbGV4LgogICAgLi4uICAgNS4gRmxhdCBpcyBiZXR0ZXIgdGhhbiBuZXN0ZWQuCi0gICAuLi4gJycnLnNwbGl0bGluZXMoMSkKKyAgIC4uLiAnJycuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKQogCiBOZXh0IHdlIGluc3RhbnRpYXRlIGEgRGlmZmVyIG9iamVjdDoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZGlzLnJzdCBiL0RvYy9saWJyYXJ5L2Rpcy5yc3QKaW5kZXggZWM3MTEyZC4uMjczZmIyMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZGlzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9kaXMucnN0CkBAIC05LDkgKzksOSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhlIDptb2Q6YGRpc2AgbW9kdWxlIHN1cHBvcnRzIHRoZSBhbmFseXNpcyBvZiBDUHl0aG9uIDp0ZXJtOmBieXRlY29kZWAgYnkKLWRpc2Fzc2VtYmxpbmcgaXQuIFRoZSBDUHl0aG9uIGJ5dGVjb2RlIHdoaWNoIHRoaXMgbW9kdWxlIHRha2VzIGFzIGFuCi1pbnB1dCBpcyBkZWZpbmVkIGluIHRoZSBmaWxlIDpmaWxlOmBJbmNsdWRlL29wY29kZS5oYCBhbmQgdXNlZCBieSB0aGUgY29tcGlsZXIKLWFuZCB0aGUgaW50ZXJwcmV0ZXIuCitkaXNhc3NlbWJsaW5nIGl0LiBUaGUgQ1B5dGhvbiBieXRlY29kZSB3aGljaCB0aGlzIG1vZHVsZSB0YWtlcyBhcyBhbiBpbnB1dCBpcworZGVmaW5lZCBpbiB0aGUgZmlsZSA6ZmlsZTpgSW5jbHVkZS9vcGNvZGUuaGAgYW5kIHVzZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCB0aGUKK2ludGVycHJldGVyLgogCiAuLiBpbXBsLWRldGFpbDo6CiAKQEAgLTI2LDcgKzI2LDggQEAKICAgIGRlZiBteWZ1bmMoYWxpc3QpOgogICAgICAgIHJldHVybiBsZW4oYWxpc3QpCiAKLXRoZSBmb2xsb3dpbmcgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBnZXQgdGhlIGRpc2Fzc2VtYmx5IG9mIDpmdW5jOmBteWZ1bmNgOjoKK3RoZSBmb2xsb3dpbmcgY29tbWFuZCBjYW4gYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBkaXNhc3NlbWJseSBvZgorOmZ1bmM6YG15ZnVuY2A6OgogCiAgICA+Pj4gZGlzLmRpcyhteWZ1bmMpCiAgICAgIDIgICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKGxlbikKQEAgLTM2LDggKzM3LDc0IEBACiAKIChUaGUgIjIiIGlzIGEgbGluZSBudW1iZXIpLgogCi1UaGUgOm1vZDpgZGlzYCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzOgorQnl0ZWNvZGUgYW5hbHlzaXMKKy0tLS0tLS0tLS0tLS0tLS0tCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgYnl0ZWNvZGUgYW5hbHlzaXMgQVBJIGFsbG93cyBwaWVjZXMgb2YgUHl0aG9uIGNvZGUgdG8gYmUgd3JhcHBlZCBpbiBhCis6Y2xhc3M6YEJ5dGVjb2RlYCBvYmplY3QgdGhhdCBwcm92aWRlcyBlYXN5IGFjY2VzcyB0byBkZXRhaWxzIG9mIHRoZSBjb21waWxlZAorY29kZS4KKworLi4gY2xhc3M6OiBCeXRlY29kZSh4LCAqLCBmaXJzdF9saW5lPU5vbmUsIGN1cnJlbnRfb2Zmc2V0PU5vbmUpCisKKyAgIEFuYWx5c2UgdGhlIGJ5dGVjb2RlIGNvcnJlc3BvbmRpbmcgdG8gYSBmdW5jdGlvbiwgbWV0aG9kLCBzdHJpbmcgb2Ygc291cmNlCisgICBjb2RlLCBvciBhIGNvZGUgb2JqZWN0IChhcyByZXR1cm5lZCBieSA6ZnVuYzpgY29tcGlsZWApLgorCisgICBUaGlzIGlzIGEgY29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgbWFueSBvZiB0aGUgZnVuY3Rpb25zIGxpc3RlZCBiZWxvdywgbW9zdAorICAgbm90YWJseSA6ZnVuYzpgZ2V0X2luc3RydWN0aW9uc2AsIGFzIGl0ZXJhdGluZyBvdmVyIGEgOmNsYXNzOmBCeXRlY29kZWAKKyAgIGluc3RhbmNlIHlpZWxkcyB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyBhcyA6Y2xhc3M6YEluc3RydWN0aW9uYCBpbnN0YW5jZXMuCisKKyAgIElmICpmaXJzdF9saW5lKiBpcyBub3QgTm9uZSwgaXQgaW5kaWNhdGVzIHRoZSBsaW5lIG51bWJlciB0aGF0IHNob3VsZCBiZQorICAgcmVwb3J0ZWQgZm9yIHRoZSBmaXJzdCBzb3VyY2UgbGluZSBpbiB0aGUgZGlzYXNzZW1ibGVkIGNvZGUuICBPdGhlcndpc2UsIHRoZQorICAgc291cmNlIGxpbmUgaW5mb3JtYXRpb24gKGlmIGFueSkgaXMgdGFrZW4gZGlyZWN0bHkgZnJvbSB0aGUgZGlzYXNzZW1ibGVkIGNvZGUKKyAgIG9iamVjdC4KKworICAgSWYgKmN1cnJlbnRfb2Zmc2V0KiBpcyBub3QgTm9uZSwgaXQgcmVmZXJzIHRvIGFuIGluc3RydWN0aW9uIG9mZnNldCBpbiB0aGUKKyAgIGRpc2Fzc2VtYmxlZCBjb2RlLiBTZXR0aW5nIHRoaXMgbWVhbnMgOm1ldGg6YC5kaXNgIHdpbGwgZGlzcGxheSBhICJjdXJyZW50CisgICBpbnN0cnVjdGlvbiIgbWFya2VyIGFnYWluc3QgdGhlIHNwZWNpZmllZCBvcGNvZGUuCisKKyAgIC4uIGNsYXNzbWV0aG9kOjogZnJvbV90cmFjZWJhY2sodGIpCisKKyAgICAgIENvbnN0cnVjdCBhIDpjbGFzczpgQnl0ZWNvZGVgIGluc3RhbmNlIGZyb20gdGhlIGdpdmVuIHRyYWNlYmFjaywgc2V0dGluZworICAgICAgKmN1cnJlbnRfb2Zmc2V0KiB0byB0aGUgaW5zdHJ1Y3Rpb24gcmVzcG9uc2libGUgZm9yIHRoZSBleGNlcHRpb24uCisKKyAgIC4uIGRhdGE6OiBjb2Rlb2JqCisKKyAgICAgIFRoZSBjb21waWxlZCBjb2RlIG9iamVjdC4KKworICAgLi4gZGF0YTo6IGZpcnN0X2xpbmUKKworICAgICAgVGhlIGZpcnN0IHNvdXJjZSBsaW5lIG9mIHRoZSBjb2RlIG9iamVjdCAoaWYgYXZhaWxhYmxlKQorCisgICAuLiBtZXRob2Q6OiBkaXMoKQorCisgICAgICBSZXR1cm4gYSBmb3JtYXR0ZWQgdmlldyBvZiB0aGUgYnl0ZWNvZGUgb3BlcmF0aW9ucyAodGhlIHNhbWUgYXMgcHJpbnRlZCBieQorICAgICAgOmZ1bmM6YGRpcy5kaXNgLCBidXQgcmV0dXJuZWQgYXMgYSBtdWx0aS1saW5lIHN0cmluZykuCisKKyAgIC4uIG1ldGhvZDo6IGluZm8oKQorCisgICAgICBSZXR1cm4gYSBmb3JtYXR0ZWQgbXVsdGktbGluZSBzdHJpbmcgd2l0aCBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCB0aGUKKyAgICAgIGNvZGUgb2JqZWN0LCBsaWtlIDpmdW5jOmBjb2RlX2luZm9gLgorCitFeGFtcGxlOjoKKworICAgID4+PiBieXRlY29kZSA9IGRpcy5CeXRlY29kZShteWZ1bmMpCisgICAgPj4+IGZvciBpbnN0ciBpbiBieXRlY29kZToKKyAgICAuLi4gICAgIHByaW50KGluc3RyLm9wbmFtZSkKKyAgICAuLi4KKyAgICBMT0FEX0dMT0JBTAorICAgIExPQURfRkFTVAorICAgIENBTExfRlVOQ1RJT04KKyAgICBSRVRVUk5fVkFMVUUKKworCitBbmFseXNpcyBmdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgZGlzYCBtb2R1bGUgYWxzbyBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgYW5hbHlzaXMgZnVuY3Rpb25zIHRoYXQgY29udmVydAordGhlIGlucHV0IGRpcmVjdGx5IHRvIHRoZSBkZXNpcmVkIG91dHB1dC4gVGhleSBjYW4gYmUgdXNlZnVsIGlmIG9ubHkgYSBzaW5nbGUKK29wZXJhdGlvbiBpcyBiZWluZyBwZXJmb3JtZWQsIHNvIHRoZSBpbnRlcm1lZGlhdGUgYW5hbHlzaXMgb2JqZWN0IGlzbid0IHVzZWZ1bDoKIAogLi4gZnVuY3Rpb246OiBjb2RlX2luZm8oeCkKIApAQCAtNTEsMTcgKzExOCwyMiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAotLi4gZnVuY3Rpb246OiBzaG93X2NvZGUoeCkKKy4uIGZ1bmN0aW9uOjogc2hvd19jb2RlKHgsICosIGZpbGU9Tm9uZSkKIAogICAgUHJpbnQgZGV0YWlsZWQgY29kZSBvYmplY3QgaW5mb3JtYXRpb24gZm9yIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLAotICAgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0IHRvIHN0ZG91dC4KKyAgIHNvdXJjZSBjb2RlIHN0cmluZyBvciBjb2RlIG9iamVjdCB0byAqZmlsZSogKG9yIGBgc3lzLnN0ZG91dGBgIGlmICpmaWxlKgorICAgaXMgbm90IHNwZWNpZmllZCkuCiAKLSAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCkpYGAsIGludGVuZGVkIGZvcgotICAgaW50ZXJhY3RpdmUgZXhwbG9yYXRpb24gYXQgdGhlIGludGVycHJldGVyIHByb21wdC4KKyAgIFRoaXMgaXMgYSBjb252ZW5pZW50IHNob3J0aGFuZCBmb3IgYGBwcmludChjb2RlX2luZm8oeCksIGZpbGU9ZmlsZSlgYCwKKyAgIGludGVuZGVkIGZvciBpbnRlcmFjdGl2ZSBleHBsb3JhdGlvbiBhdCB0aGUgaW50ZXJwcmV0ZXIgcHJvbXB0LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAotLi4gZnVuY3Rpb246OiBkaXMoeD1Ob25lKQorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkICpmaWxlKiBwYXJhbWV0ZXIuCisKKworLi4gZnVuY3Rpb246OiBkaXMoeD1Ob25lLCAqLCBmaWxlPU5vbmUpCiAKICAgIERpc2Fzc2VtYmxlIHRoZSAqeCogb2JqZWN0LiAgKngqIGNhbiBkZW5vdGUgZWl0aGVyIGEgbW9kdWxlLCBhIGNsYXNzLCBhCiAgICBtZXRob2QsIGEgZnVuY3Rpb24sIGEgY29kZSBvYmplY3QsIGEgc3RyaW5nIG9mIHNvdXJjZSBjb2RlIG9yIGEgYnl0ZSBzZXF1ZW5jZQpAQCAtNzIsMTYgKzE0NCwyOCBAQAogICAgZGlzYXNzZW1ibGVkLiAgSWYgbm8gb2JqZWN0IGlzIHByb3ZpZGVkLCB0aGlzIGZ1bmN0aW9uIGRpc2Fzc2VtYmxlcyB0aGUgbGFzdAogICAgdHJhY2ViYWNrLgogCisgICBUaGUgZGlzYXNzZW1ibHkgaXMgd3JpdHRlbiBhcyB0ZXh0IHRvIHRoZSBzdXBwbGllZCAqZmlsZSogYXJndW1lbnQgaWYKKyAgIHByb3ZpZGVkIGFuZCB0byBgYHN5cy5zdGRvdXRgYCBvdGhlcndpc2UuCiAKLS4uIGZ1bmN0aW9uOjogZGlzdGIodGI9Tm9uZSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCAqZmlsZSogcGFyYW1ldGVyLgorCisKKy4uIGZ1bmN0aW9uOjogZGlzdGIodGI9Tm9uZSwgKiwgZmlsZT1Ob25lKQogCiAgICBEaXNhc3NlbWJsZSB0aGUgdG9wLW9mLXN0YWNrIGZ1bmN0aW9uIG9mIGEgdHJhY2ViYWNrLCB1c2luZyB0aGUgbGFzdAogICAgdHJhY2ViYWNrIGlmIG5vbmUgd2FzIHBhc3NlZC4gIFRoZSBpbnN0cnVjdGlvbiBjYXVzaW5nIHRoZSBleGNlcHRpb24gaXMKICAgIGluZGljYXRlZC4KIAorICAgVGhlIGRpc2Fzc2VtYmx5IGlzIHdyaXR0ZW4gYXMgdGV4dCB0byB0aGUgc3VwcGxpZWQgKmZpbGUqIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgogCi0uLiBmdW5jdGlvbjo6IGRpc2Fzc2VtYmxlKGNvZGUsIGxhc3RpPS0xKQotICAgICAgICAgICAgICBkaXNjbyhjb2RlLCBsYXN0aT0tMSkKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCAqZmlsZSogcGFyYW1ldGVyLgorCisKKy4uIGZ1bmN0aW9uOjogZGlzYXNzZW1ibGUoY29kZSwgbGFzdGk9LTEsICosIGZpbGU9Tm9uZSkKKyAgICAgICAgICAgICAgZGlzY28oY29kZSwgbGFzdGk9LTEsICosIGZpbGU9Tm9uZSkKIAogICAgRGlzYXNzZW1ibGUgYSBjb2RlIG9iamVjdCwgaW5kaWNhdGluZyB0aGUgbGFzdCBpbnN0cnVjdGlvbiBpZiAqbGFzdGkqIHdhcwogICAgcHJvdmlkZWQuICBUaGUgb3V0cHV0IGlzIGRpdmlkZWQgaW4gdGhlIGZvbGxvd2luZyBjb2x1bW5zOgpAQCAtOTcsNiArMTgxLDI4IEBACiAgICBUaGUgcGFyYW1ldGVyIGludGVycHJldGF0aW9uIHJlY29nbml6ZXMgbG9jYWwgYW5kIGdsb2JhbCB2YXJpYWJsZSBuYW1lcywKICAgIGNvbnN0YW50IHZhbHVlcywgYnJhbmNoIHRhcmdldHMsIGFuZCBjb21wYXJlIG9wZXJhdG9ycy4KIAorICAgVGhlIGRpc2Fzc2VtYmx5IGlzIHdyaXR0ZW4gYXMgdGV4dCB0byB0aGUgc3VwcGxpZWQgKmZpbGUqIGFyZ3VtZW50IGlmCisgICBwcm92aWRlZCBhbmQgdG8gYGBzeXMuc3Rkb3V0YGAgb3RoZXJ3aXNlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgKmZpbGUqIHBhcmFtZXRlci4KKworCisuLiBmdW5jdGlvbjo6IGdldF9pbnN0cnVjdGlvbnMoeCwgKiwgZmlyc3RfbGluZT1Ob25lKQorCisgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBzdXBwbGllZCBmdW5jdGlvbiwgbWV0aG9kLAorICAgc291cmNlIGNvZGUgc3RyaW5nIG9yIGNvZGUgb2JqZWN0LgorCisgICBUaGUgaXRlcmF0b3IgZ2VuZXJhdGVzIGEgc2VyaWVzIG9mIDpjbGFzczpgSW5zdHJ1Y3Rpb25gIG5hbWVkIHR1cGxlcyBnaXZpbmcKKyAgIHRoZSBkZXRhaWxzIG9mIGVhY2ggb3BlcmF0aW9uIGluIHRoZSBzdXBwbGllZCBjb2RlLgorCisgICBJZiAqZmlyc3RfbGluZSogaXMgbm90IE5vbmUsIGl0IGluZGljYXRlcyB0aGUgbGluZSBudW1iZXIgdGhhdCBzaG91bGQgYmUKKyAgIHJlcG9ydGVkIGZvciB0aGUgZmlyc3Qgc291cmNlIGxpbmUgaW4gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlLiAgT3RoZXJ3aXNlLCB0aGUKKyAgIHNvdXJjZSBsaW5lIGluZm9ybWF0aW9uIChpZiBhbnkpIGlzIHRha2VuIGRpcmVjdGx5IGZyb20gdGhlIGRpc2Fzc2VtYmxlZCBjb2RlCisgICBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogZmluZGxpbmVzdGFydHMoY29kZSkKIApAQCAtMTExLDYxICsyMTcsNjcgQEAKICAgIHJldHVybiBhIGxpc3Qgb2YgdGhlc2Ugb2Zmc2V0cy4KIAogCi0uLiBkYXRhOjogb3BuYW1lCisuLiBmdW5jdGlvbjo6IHN0YWNrX2VmZmVjdChvcGNvZGUsIFtvcGFyZ10pCiAKLSAgIFNlcXVlbmNlIG9mIG9wZXJhdGlvbiBuYW1lcywgaW5kZXhhYmxlIHVzaW5nIHRoZSBieXRlY29kZS4KKyAgIENvbXB1dGUgdGhlIHN0YWNrIGVmZmVjdCBvZiAqb3Bjb2RlKiB3aXRoIGFyZ3VtZW50ICpvcGFyZyouCiAKLQotLi4gZGF0YTo6IG9wbWFwCi0KLSAgIERpY3Rpb25hcnkgbWFwcGluZyBvcGVyYXRpb24gbmFtZXMgdG8gYnl0ZWNvZGVzLgotCi0KLS4uIGRhdGE6OiBjbXBfb3AKLQotICAgU2VxdWVuY2Ugb2YgYWxsIGNvbXBhcmUgb3BlcmF0aW9uIG5hbWVzLgotCi0KLS4uIGRhdGE6OiBoYXNjb25zdAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGEgY29uc3RhbnQgcGFyYW1ldGVyLgotCi0KLS4uIGRhdGE6OiBoYXNmcmVlCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGZyZWUgdmFyaWFibGUuCi0KLQotLi4gZGF0YTo6IGhhc25hbWUKLQotICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgYWNjZXNzIGFuIGF0dHJpYnV0ZSBieSBuYW1lLgotCi0KLS4uIGRhdGE6OiBoYXNqcmVsCi0KLSAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYSByZWxhdGl2ZSBqdW1wIHRhcmdldC4KLQotCi0uLiBkYXRhOjogaGFzamFicwotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBoYXZlIGFuIGFic29sdXRlIGp1bXAgdGFyZ2V0LgotCi0KLS4uIGRhdGE6OiBoYXNsb2NhbAotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBsb2NhbCB2YXJpYWJsZS4KLQotCi0uLiBkYXRhOjogaGFzY29tcGFyZQotCi0gICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgb2YgQm9vbGVhbiBvcGVyYXRpb25zLgotCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gX2J5dGVjb2RlczoKIAogUHl0aG9uIEJ5dGVjb2RlIEluc3RydWN0aW9ucwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitUaGUgOmZ1bmM6YGdldF9pbnN0cnVjdGlvbnNgIGZ1bmN0aW9uIGFuZCA6Y2xhc3M6YEJ5dGVjb2RlYCBjbGFzcyBwcm92aWRlCitkZXRhaWxzIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBhcyA6Y2xhc3M6YEluc3RydWN0aW9uYCBpbnN0YW5jZXM6CisKKy4uIGNsYXNzOjogSW5zdHJ1Y3Rpb24KKworICAgRGV0YWlscyBmb3IgYSBieXRlY29kZSBvcGVyYXRpb24KKworICAgLi4gZGF0YTo6IG9wY29kZQorCisgICAgICBudW1lcmljIGNvZGUgZm9yIG9wZXJhdGlvbiwgY29ycmVzcG9uZGluZyB0byB0aGUgb3Bjb2RlIHZhbHVlcyBsaXN0ZWQKKyAgICAgIGJlbG93IGFuZCB0aGUgYnl0ZWNvZGUgdmFsdWVzIGluIHRoZSA6cmVmOmBvcGNvZGVfY29sbGVjdGlvbnNgLgorCisKKyAgIC4uIGRhdGE6OiBvcG5hbWUKKworICAgICAgaHVtYW4gcmVhZGFibGUgbmFtZSBmb3Igb3BlcmF0aW9uCisKKworICAgLi4gZGF0YTo6IGFyZworCisgICAgICBudW1lcmljIGFyZ3VtZW50IHRvIG9wZXJhdGlvbiAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKworCisgICAuLiBkYXRhOjogYXJndmFsCisKKyAgICAgIHJlc29sdmVkIGFyZyB2YWx1ZSAoaWYga25vd24pLCBvdGhlcndpc2Ugc2FtZSBhcyBhcmcKKworCisgICAuLiBkYXRhOjogYXJncmVwcgorCisgICAgICBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiBvcGVyYXRpb24gYXJndW1lbnQKKworCisgICAuLiBkYXRhOjogb2Zmc2V0CisKKyAgICAgIHN0YXJ0IGluZGV4IG9mIG9wZXJhdGlvbiB3aXRoaW4gYnl0ZWNvZGUgc2VxdWVuY2UKKworCisgICAuLiBkYXRhOjogc3RhcnRzX2xpbmUKKworICAgICAgbGluZSBzdGFydGVkIGJ5IHRoaXMgb3Bjb2RlIChpZiBhbnkpLCBvdGhlcndpc2UgTm9uZQorCisKKyAgIC4uIGRhdGE6OiBpc19qdW1wX3RhcmdldAorCisgICAgICBgYFRydWVgYCBpZiBvdGhlciBjb2RlIGp1bXBzIHRvIGhlcmUsIG90aGVyd2lzZSBgYEZhbHNlYGAKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlIFB5dGhvbiBjb21waWxlciBjdXJyZW50bHkgZ2VuZXJhdGVzIHRoZSBmb2xsb3dpbmcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zLgogCiAKQEAgLTM4Niw4ICs0OTgsOCBAQAogLi4gb3Bjb2RlOjogUFJJTlRfRVhQUgogCiAgICBJbXBsZW1lbnRzIHRoZSBleHByZXNzaW9uIHN0YXRlbWVudCBmb3IgdGhlIGludGVyYWN0aXZlIG1vZGUuICBUT1MgaXMgcmVtb3ZlZAotICAgZnJvbSB0aGUgc3RhY2sgYW5kIHByaW50ZWQuICBJbiBub24taW50ZXJhY3RpdmUgbW9kZSwgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnQgaXMKLSAgIHRlcm1pbmF0ZWQgd2l0aCBgYFBPUF9TVEFDS2BgLgorICAgZnJvbSB0aGUgc3RhY2sgYW5kIHByaW50ZWQuICBJbiBub24taW50ZXJhY3RpdmUgbW9kZSwgYW4gZXhwcmVzc2lvbiBzdGF0ZW1lbnQKKyAgIGlzIHRlcm1pbmF0ZWQgd2l0aCA6b3Bjb2RlOmBQT1BfVE9QYC4KIAogCiAuLiBvcGNvZGU6OiBCUkVBS19MT09QCkBAIC0zOTgsNyArNTEwLDcgQEAKIC4uIG9wY29kZTo6IENPTlRJTlVFX0xPT1AgKHRhcmdldCkKIAogICAgQ29udGludWVzIGEgbG9vcCBkdWUgdG8gYSA6a2V5d29yZDpgY29udGludWVgIHN0YXRlbWVudC4gICp0YXJnZXQqIGlzIHRoZQotICAgYWRkcmVzcyB0byBqdW1wIHRvICh3aGljaCBzaG91bGQgYmUgYSBgYEZPUl9JVEVSYGAgaW5zdHJ1Y3Rpb24pLgorICAgYWRkcmVzcyB0byBqdW1wIHRvICh3aGljaCBzaG91bGQgYmUgYSA6b3Bjb2RlOmBGT1JfSVRFUmAgaW5zdHJ1Y3Rpb24pLgogCiAKIC4uIG9wY29kZTo6IFNFVF9BREQgKGkpCkBAIC00MTYsOSArNTI4LDEwIEBACiAgICBDYWxscyBgYGRpY3Quc2V0aXRlbShUT1MxWy1pXSwgVE9TLCBUT1MxKWBgLiAgVXNlZCB0byBpbXBsZW1lbnQgZGljdAogICAgY29tcHJlaGVuc2lvbnMuCiAKLUZvciBhbGwgb2YgdGhlIFNFVF9BREQsIExJU1RfQVBQRU5EIGFuZCBNQVBfQUREIGluc3RydWN0aW9ucywgd2hpbGUgdGhlCi1hZGRlZCB2YWx1ZSBvciBrZXkvdmFsdWUgcGFpciBpcyBwb3BwZWQgb2ZmLCB0aGUgY29udGFpbmVyIG9iamVjdCByZW1haW5zIG9uCi10aGUgc3RhY2sgc28gdGhhdCBpdCBpcyBhdmFpbGFibGUgZm9yIGZ1cnRoZXIgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcC4KK0ZvciBhbGwgb2YgdGhlIDpvcGNvZGU6YFNFVF9BRERgLCA6b3Bjb2RlOmBMSVNUX0FQUEVORGAgYW5kIDpvcGNvZGU6YE1BUF9BRERgCitpbnN0cnVjdGlvbnMsIHdoaWxlIHRoZSBhZGRlZCB2YWx1ZSBvciBrZXkvdmFsdWUgcGFpciBpcyBwb3BwZWQgb2ZmLCB0aGUKK2NvbnRhaW5lciBvYmplY3QgcmVtYWlucyBvbiB0aGUgc3RhY2sgc28gdGhhdCBpdCBpcyBhdmFpbGFibGUgZm9yIGZ1cnRoZXIKK2l0ZXJhdGlvbnMgb2YgdGhlIGxvb3AuCiAKIAogLi4gb3Bjb2RlOjogUkVUVVJOX1ZBTFVFCkBAIC00MjgsMzUgKzU0MSwzNSBAQAogCiAuLiBvcGNvZGU6OiBZSUVMRF9WQUxVRQogCi0gICBQb3BzIGBgVE9TYGAgYW5kIHlpZWxkcyBpdCBmcm9tIGEgOnRlcm06YGdlbmVyYXRvcmAuCisgICBQb3BzIFRPUyBhbmQgeWllbGRzIGl0IGZyb20gYSA6dGVybTpgZ2VuZXJhdG9yYC4KIAogCiAuLiBvcGNvZGU6OiBZSUVMRF9GUk9NCiAKLSAgIFBvcHMgYGBUT1NgYCBhbmQgZGVsZWdhdGVzIHRvIGl0IGFzIGEgc3ViaXRlcmF0b3IgZnJvbSBhIDp0ZXJtOmBnZW5lcmF0b3JgLgorICAgUG9wcyBUT1MgYW5kIGRlbGVnYXRlcyB0byBpdCBhcyBhIHN1Yml0ZXJhdG9yIGZyb20gYSA6dGVybTpgZ2VuZXJhdG9yYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAogLi4gb3Bjb2RlOjogSU1QT1JUX1NUQVIKIAotICAgTG9hZHMgYWxsIHN5bWJvbHMgbm90IHN0YXJ0aW5nIHdpdGggYGAnXydgYCBkaXJlY3RseSBmcm9tIHRoZSBtb2R1bGUgVE9TIHRvIHRoZQotICAgbG9jYWwgbmFtZXNwYWNlLiBUaGUgbW9kdWxlIGlzIHBvcHBlZCBhZnRlciBsb2FkaW5nIGFsbCBuYW1lcy4gVGhpcyBvcGNvZGUKLSAgIGltcGxlbWVudHMgYGBmcm9tIG1vZHVsZSBpbXBvcnQgKmBgLgorICAgTG9hZHMgYWxsIHN5bWJvbHMgbm90IHN0YXJ0aW5nIHdpdGggYGAnXydgYCBkaXJlY3RseSBmcm9tIHRoZSBtb2R1bGUgVE9TIHRvCisgICB0aGUgbG9jYWwgbmFtZXNwYWNlLiBUaGUgbW9kdWxlIGlzIHBvcHBlZCBhZnRlciBsb2FkaW5nIGFsbCBuYW1lcy4gVGhpcworICAgb3Bjb2RlIGltcGxlbWVudHMgYGBmcm9tIG1vZHVsZSBpbXBvcnQgKmBgLgogCiAKIC4uIG9wY29kZTo6IFBPUF9CTE9DSwogCi0gICBSZW1vdmVzIG9uZSBibG9jayBmcm9tIHRoZSBibG9jayBzdGFjay4gIFBlciBmcmFtZSwgdGhlcmUgaXMgYSAgc3RhY2sgb2YgYmxvY2tzLAotICAgZGVub3RpbmcgbmVzdGVkIGxvb3BzLCB0cnkgc3RhdGVtZW50cywgYW5kIHN1Y2guCisgICBSZW1vdmVzIG9uZSBibG9jayBmcm9tIHRoZSBibG9jayBzdGFjay4gIFBlciBmcmFtZSwgdGhlcmUgaXMgYSBzdGFjayBvZgorICAgYmxvY2tzLCBkZW5vdGluZyBuZXN0ZWQgbG9vcHMsIHRyeSBzdGF0ZW1lbnRzLCBhbmQgc3VjaC4KIAogCiAuLiBvcGNvZGU6OiBQT1BfRVhDRVBUCiAKICAgIFJlbW92ZXMgb25lIGJsb2NrIGZyb20gdGhlIGJsb2NrIHN0YWNrLiBUaGUgcG9wcGVkIGJsb2NrIG11c3QgYmUgYW4gZXhjZXB0aW9uCi0gICBoYW5kbGVyIGJsb2NrLCBhcyBpbXBsaWNpdGx5IGNyZWF0ZWQgd2hlbiBlbnRlcmluZyBhbiBleGNlcHQgaGFuZGxlci4KLSAgIEluIGFkZGl0aW9uIHRvIHBvcHBpbmcgZXh0cmFuZW91cyB2YWx1ZXMgZnJvbSB0aGUgZnJhbWUgc3RhY2ssIHRoZQotICAgbGFzdCB0aHJlZSBwb3BwZWQgdmFsdWVzIGFyZSB1c2VkIHRvIHJlc3RvcmUgdGhlIGV4Y2VwdGlvbiBzdGF0ZS4KKyAgIGhhbmRsZXIgYmxvY2ssIGFzIGltcGxpY2l0bHkgY3JlYXRlZCB3aGVuIGVudGVyaW5nIGFuIGV4Y2VwdCBoYW5kbGVyLiAgSW4KKyAgIGFkZGl0aW9uIHRvIHBvcHBpbmcgZXh0cmFuZW91cyB2YWx1ZXMgZnJvbSB0aGUgZnJhbWUgc3RhY2ssIHRoZSBsYXN0IHRocmVlCisgICBwb3BwZWQgdmFsdWVzIGFyZSB1c2VkIHRvIHJlc3RvcmUgdGhlIGV4Y2VwdGlvbiBzdGF0ZS4KIAogCiAuLiBvcGNvZGU6OiBFTkRfRklOQUxMWQpAQCAtNDY5LDcgKzU4Miw3IEBACiAuLiBvcGNvZGU6OiBMT0FEX0JVSUxEX0NMQVNTCiAKICAgIFB1c2hlcyA6ZnVuYzpgYnVpbHRpbnMuX19idWlsZF9jbGFzc19fYCBvbnRvIHRoZSBzdGFjay4gIEl0IGlzIGxhdGVyIGNhbGxlZAotICAgYnkgYGBDQUxMX0ZVTkNUSU9OYGAgdG8gY29uc3RydWN0IGEgY2xhc3MuCisgICBieSA6b3Bjb2RlOmBDQUxMX0ZVTkNUSU9OYCB0byBjb25zdHJ1Y3QgYSBjbGFzcy4KIAogCiAuLiBvcGNvZGU6OiBTRVRVUF9XSVRIIChkZWx0YSkKQEAgLTQ4Niw5ICs1OTksOSBAQAogCiAuLiBvcGNvZGU6OiBXSVRIX0NMRUFOVVAKIAotICAgQ2xlYW5zIHVwIHRoZSBzdGFjayB3aGVuIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBibG9jayBleGl0cy4gIFRPUyBpcwotICAgdGhlIGNvbnRleHQgbWFuYWdlcidzIDptZXRoOmBfX2V4aXRfX2AgYm91bmQgbWV0aG9kLiBCZWxvdyBUT1MgYXJlIDEtLTMKLSAgIHZhbHVlcyBpbmRpY2F0aW5nIGhvdy93aHkgdGhlIGZpbmFsbHkgY2xhdXNlIHdhcyBlbnRlcmVkOgorICAgQ2xlYW5zIHVwIHRoZSBzdGFjayB3aGVuIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCBibG9jayBleGl0cy4gIFRPUyBpcyB0aGUKKyAgIGNvbnRleHQgbWFuYWdlcidzIDptZXRoOmBfX2V4aXRfX2AgYm91bmQgbWV0aG9kLiBCZWxvdyBUT1MgYXJlIDEtLTMgdmFsdWVzCisgICBpbmRpY2F0aW5nIGhvdy93aHkgdGhlIGZpbmFsbHkgY2xhdXNlIHdhcyBlbnRlcmVkOgogCiAgICAqIFNFQ09ORCA9IGBgTm9uZWBgCiAgICAqIChTRUNPTkQsIFRISVJEKSA9IChgYFdIWV97UkVUVVJOLENPTlRJTlVFfWBgKSwgcmV0dmFsCkBAIC00OTgsMjggKzYxMSwyMiBAQAogICAgSW4gdGhlIGxhc3QgY2FzZSwgYGBUT1MoU0VDT05ELCBUSElSRCwgRk9VUlRIKWBgIGlzIGNhbGxlZCwgb3RoZXJ3aXNlCiAgICBgYFRPUyhOb25lLCBOb25lLCBOb25lKWBgLiAgSW4gYWRkaXRpb24sIFRPUyBpcyByZW1vdmVkIGZyb20gdGhlIHN0YWNrLgogCi0gICBJZiB0aGUgc3RhY2sgcmVwcmVzZW50cyBhbiBleGNlcHRpb24sICphbmQqIHRoZSBmdW5jdGlvbiBjYWxsIHJldHVybnMKLSAgIGEgJ3RydWUnIHZhbHVlLCB0aGlzIGluZm9ybWF0aW9uIGlzICJ6YXBwZWQiIGFuZCByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCi0gICBgYFdIWV9TSUxFTkNFRGBgIHRvIHByZXZlbnQgYGBFTkRfRklOQUxMWWBgIGZyb20gcmUtcmFpc2luZyB0aGUgZXhjZXB0aW9uLgotICAgKEJ1dCBub24tbG9jYWwgZ290b3Mgd2lsbCBzdGlsbCBiZSByZXN1bWVkLikKKyAgIElmIHRoZSBzdGFjayByZXByZXNlbnRzIGFuIGV4Y2VwdGlvbiwgKmFuZCogdGhlIGZ1bmN0aW9uIGNhbGwgcmV0dXJucyBhCisgICAndHJ1ZScgdmFsdWUsIHRoaXMgaW5mb3JtYXRpb24gaXMgInphcHBlZCIgYW5kIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKKyAgIGBgV0hZX1NJTEVOQ0VEYGAgdG8gcHJldmVudCA6b3Bjb2RlOmBFTkRfRklOQUxMWWAgZnJvbSByZS1yYWlzaW5nIHRoZQorICAgZXhjZXB0aW9uLiAgKEJ1dCBub24tbG9jYWwgZ290b3Mgd2lsbCBzdGlsbCBiZSByZXN1bWVkLikKIAogICAgLi4gWFhYIGV4cGxhaW4gdGhlIFdIWSBzdHVmZiEKIAogCi0uLiBvcGNvZGU6OiBTVE9SRV9MT0NBTFMKLQotICAgUG9wcyBUT1MgZnJvbSB0aGUgc3RhY2sgYW5kIHN0b3JlcyBpdCBhcyB0aGUgY3VycmVudCBmcmFtZSdzIGBgZl9sb2NhbHNgYC4KLSAgIFRoaXMgaXMgdXNlZCBpbiBjbGFzcyBjb25zdHJ1Y3Rpb24uCi0KLQogQWxsIG9mIHRoZSBmb2xsb3dpbmcgb3Bjb2RlcyBleHBlY3QgYXJndW1lbnRzLiAgQW4gYXJndW1lbnQgaXMgdHdvIGJ5dGVzLCB3aXRoCiB0aGUgbW9yZSBzaWduaWZpY2FudCBieXRlIGxhc3QuCiAKIC4uIG9wY29kZTo6IFNUT1JFX05BTUUgKG5hbWVpKQogCiAgICBJbXBsZW1lbnRzIGBgbmFtZSA9IFRPU2BgLiAqbmFtZWkqIGlzIHRoZSBpbmRleCBvZiAqbmFtZSogaW4gdGhlIGF0dHJpYnV0ZQotICAgOmF0dHI6YGNvX25hbWVzYCBvZiB0aGUgY29kZSBvYmplY3QuIFRoZSBjb21waWxlciB0cmllcyB0byB1c2UgYGBTVE9SRV9GQVNUYGAKLSAgIG9yIGBgU1RPUkVfR0xPQkFMYGAgaWYgcG9zc2libGUuCisgICA6YXR0cjpgY29fbmFtZXNgIG9mIHRoZSBjb2RlIG9iamVjdC4gVGhlIGNvbXBpbGVyIHRyaWVzIHRvIHVzZQorICAgOm9wY29kZTpgU1RPUkVfRkFTVGAgb3IgOm9wY29kZTpgU1RPUkVfR0xPQkFMYCBpZiBwb3NzaWJsZS4KIAogCiAuLiBvcGNvZGU6OiBERUxFVEVfTkFNRSAobmFtZWkpCkBAIC01NTksMTIgKzY2NiwxMiBAQAogCiAuLiBvcGNvZGU6OiBTVE9SRV9HTE9CQUwgKG5hbWVpKQogCi0gICBXb3JrcyBhcyBgYFNUT1JFX05BTUVgYCwgYnV0IHN0b3JlcyB0aGUgbmFtZSBhcyBhIGdsb2JhbC4KKyAgIFdvcmtzIGFzIDpvcGNvZGU6YFNUT1JFX05BTUVgLCBidXQgc3RvcmVzIHRoZSBuYW1lIGFzIGEgZ2xvYmFsLgogCiAKIC4uIG9wY29kZTo6IERFTEVURV9HTE9CQUwgKG5hbWVpKQogCi0gICBXb3JrcyBhcyBgYERFTEVURV9OQU1FYGAsIGJ1dCBkZWxldGVzIGEgZ2xvYmFsIG5hbWUuCisgICBXb3JrcyBhcyA6b3Bjb2RlOmBERUxFVEVfTkFNRWAsIGJ1dCBkZWxldGVzIGEgZ2xvYmFsIG5hbWUuCiAKIAogLi4gb3Bjb2RlOjogTE9BRF9DT05TVCAoY29uc3RpKQpAQCAtNTc5LDE4ICs2ODYsMTggQEAKIAogLi4gb3Bjb2RlOjogQlVJTERfVFVQTEUgKGNvdW50KQogCi0gICBDcmVhdGVzIGEgdHVwbGUgY29uc3VtaW5nICpjb3VudCogaXRlbXMgZnJvbSB0aGUgc3RhY2ssIGFuZCBwdXNoZXMgdGhlIHJlc3VsdGluZwotICAgdHVwbGUgb250byB0aGUgc3RhY2suCisgICBDcmVhdGVzIGEgdHVwbGUgY29uc3VtaW5nICpjb3VudCogaXRlbXMgZnJvbSB0aGUgc3RhY2ssIGFuZCBwdXNoZXMgdGhlCisgICByZXN1bHRpbmcgdHVwbGUgb250byB0aGUgc3RhY2suCiAKIAogLi4gb3Bjb2RlOjogQlVJTERfTElTVCAoY291bnQpCiAKLSAgIFdvcmtzIGFzIGBgQlVJTERfVFVQTEVgYCwgYnV0IGNyZWF0ZXMgYSBsaXN0LgorICAgV29ya3MgYXMgOm9wY29kZTpgQlVJTERfVFVQTEVgLCBidXQgY3JlYXRlcyBhIGxpc3QuCiAKIAogLi4gb3Bjb2RlOjogQlVJTERfU0VUIChjb3VudCkKIAotICAgV29ya3MgYXMgYGBCVUlMRF9UVVBMRWBgLCBidXQgY3JlYXRlcyBhIHNldC4KKyAgIFdvcmtzIGFzIDpvcGNvZGU6YEJVSUxEX1RVUExFYCwgYnV0IGNyZWF0ZXMgYSBzZXQuCiAKIAogLi4gb3Bjb2RlOjogQlVJTERfTUFQIChjb3VudCkKQEAgLTYxNCw4ICs3MjEsOCBAQAogCiAgICBJbXBvcnRzIHRoZSBtb2R1bGUgYGBjb19uYW1lc1tuYW1laV1gYC4gIFRPUyBhbmQgVE9TMSBhcmUgcG9wcGVkIGFuZCBwcm92aWRlCiAgICB0aGUgKmZyb21saXN0KiBhbmQgKmxldmVsKiBhcmd1bWVudHMgb2YgOmZ1bmM6YF9faW1wb3J0X19gLiAgVGhlIG1vZHVsZQotICAgb2JqZWN0IGlzIHB1c2hlZCBvbnRvIHRoZSBzdGFjay4gIFRoZSBjdXJyZW50IG5hbWVzcGFjZSBpcyBub3QgYWZmZWN0ZWQ6Ci0gICBmb3IgYSBwcm9wZXIgaW1wb3J0IHN0YXRlbWVudCwgYSBzdWJzZXF1ZW50IGBgU1RPUkVfRkFTVGBgIGluc3RydWN0aW9uCisgICBvYmplY3QgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLiAgVGhlIGN1cnJlbnQgbmFtZXNwYWNlIGlzIG5vdCBhZmZlY3RlZDogZm9yCisgICBhIHByb3BlciBpbXBvcnQgc3RhdGVtZW50LCBhIHN1YnNlcXVlbnQgOm9wY29kZTpgU1RPUkVfRkFTVGAgaW5zdHJ1Y3Rpb24KICAgIG1vZGlmaWVzIHRoZSBuYW1lc3BhY2UuCiAKIApAQCAtNjIzLDcgKzczMCw3IEBACiAKICAgIExvYWRzIHRoZSBhdHRyaWJ1dGUgYGBjb19uYW1lc1tuYW1laV1gYCBmcm9tIHRoZSBtb2R1bGUgZm91bmQgaW4gVE9TLiBUaGUKICAgIHJlc3VsdGluZyBvYmplY3QgaXMgcHVzaGVkIG9udG8gdGhlIHN0YWNrLCB0byBiZSBzdWJzZXF1ZW50bHkgc3RvcmVkIGJ5IGEKLSAgIGBgU1RPUkVfRkFTVGBgIGluc3RydWN0aW9uLgorICAgOm9wY29kZTpgU1RPUkVfRkFTVGAgaW5zdHJ1Y3Rpb24uCiAKIAogLi4gb3Bjb2RlOjogSlVNUF9GT1JXQVJEIChkZWx0YSkKQEAgLTY0MywxNCArNzUwLDE0IEBACiAKIC4uIG9wY29kZTo6IEpVTVBfSUZfVFJVRV9PUl9QT1AgKHRhcmdldCkKIAotICAgSWYgVE9TIGlzIHRydWUsIHNldHMgdGhlIGJ5dGVjb2RlIGNvdW50ZXIgdG8gKnRhcmdldCogYW5kIGxlYXZlcyBUT1MKLSAgIG9uIHRoZSBzdGFjay4gIE90aGVyd2lzZSAoVE9TIGlzIGZhbHNlKSwgVE9TIGlzIHBvcHBlZC4KKyAgIElmIFRPUyBpcyB0cnVlLCBzZXRzIHRoZSBieXRlY29kZSBjb3VudGVyIHRvICp0YXJnZXQqIGFuZCBsZWF2ZXMgVE9TIG9uIHRoZQorICAgc3RhY2suICBPdGhlcndpc2UgKFRPUyBpcyBmYWxzZSksIFRPUyBpcyBwb3BwZWQuCiAKIAogLi4gb3Bjb2RlOjogSlVNUF9JRl9GQUxTRV9PUl9QT1AgKHRhcmdldCkKIAotICAgSWYgVE9TIGlzIGZhbHNlLCBzZXRzIHRoZSBieXRlY29kZSBjb3VudGVyIHRvICp0YXJnZXQqIGFuZCBsZWF2ZXMKLSAgIFRPUyBvbiB0aGUgc3RhY2suICBPdGhlcndpc2UgKFRPUyBpcyB0cnVlKSwgVE9TIGlzIHBvcHBlZC4KKyAgIElmIFRPUyBpcyBmYWxzZSwgc2V0cyB0aGUgYnl0ZWNvZGUgY291bnRlciB0byAqdGFyZ2V0KiBhbmQgbGVhdmVzIFRPUyBvbiB0aGUKKyAgIHN0YWNrLiAgT3RoZXJ3aXNlIChUT1MgaXMgdHJ1ZSksIFRPUyBpcyBwb3BwZWQuCiAKIAogLi4gb3Bjb2RlOjogSlVNUF9BQlNPTFVURSAodGFyZ2V0KQpAQCAtNjYwLDEwICs3NjcsMTAgQEAKIAogLi4gb3Bjb2RlOjogRk9SX0lURVIgKGRlbHRhKQogCi0gICBgYFRPU2BgIGlzIGFuIDp0ZXJtOmBpdGVyYXRvcmAuICBDYWxsIGl0cyA6bWV0aDpgfml0ZXJhdG9yLl9fbmV4dF9fYCBtZXRob2QuCi0gICBJZiB0aGlzIHlpZWxkcyBhIG5ldyB2YWx1ZSwgcHVzaCBpdCBvbiB0aGUgc3RhY2sgKGxlYXZpbmcgdGhlIGl0ZXJhdG9yIGJlbG93Ci0gICBpdCkuICBJZiB0aGUgaXRlcmF0b3IgaW5kaWNhdGVzIGl0IGlzIGV4aGF1c3RlZCBgYFRPU2BgIGlzIHBvcHBlZCwgYW5kIHRoZQotICAgYnl0ZSBjb2RlIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYnkgKmRlbHRhKi4KKyAgIFRPUyBpcyBhbiA6dGVybTpgaXRlcmF0b3JgLiAgQ2FsbCBpdHMgOm1ldGg6YH5pdGVyYXRvci5fX25leHRfX2AgbWV0aG9kLiAgSWYKKyAgIHRoaXMgeWllbGRzIGEgbmV3IHZhbHVlLCBwdXNoIGl0IG9uIHRoZSBzdGFjayAobGVhdmluZyB0aGUgaXRlcmF0b3IgYmVsb3cKKyAgIGl0KS4gIElmIHRoZSBpdGVyYXRvciBpbmRpY2F0ZXMgaXQgaXMgZXhoYXVzdGVkIFRPUyBpcyBwb3BwZWQsIGFuZCB0aGUgYnl0ZQorICAgY29kZSBjb3VudGVyIGlzIGluY3JlbWVudGVkIGJ5ICpkZWx0YSouCiAKIAogLi4gb3Bjb2RlOjogTE9BRF9HTE9CQUwgKG5hbWVpKQpAQCAtNjc5LDE5ICs3ODYsMTkgQEAKIAogLi4gb3Bjb2RlOjogU0VUVVBfRVhDRVBUIChkZWx0YSkKIAotICAgUHVzaGVzIGEgdHJ5IGJsb2NrIGZyb20gYSB0cnktZXhjZXB0IGNsYXVzZSBvbnRvIHRoZSBibG9jayBzdGFjay4gKmRlbHRhKiBwb2ludHMKLSAgIHRvIHRoZSBmaXJzdCBleGNlcHQgYmxvY2suCisgICBQdXNoZXMgYSB0cnkgYmxvY2sgZnJvbSBhIHRyeS1leGNlcHQgY2xhdXNlIG9udG8gdGhlIGJsb2NrIHN0YWNrLiAqZGVsdGEqCisgICBwb2ludHMgdG8gdGhlIGZpcnN0IGV4Y2VwdCBibG9jay4KIAogCiAuLiBvcGNvZGU6OiBTRVRVUF9GSU5BTExZIChkZWx0YSkKIAotICAgUHVzaGVzIGEgdHJ5IGJsb2NrIGZyb20gYSB0cnktZXhjZXB0IGNsYXVzZSBvbnRvIHRoZSBibG9jayBzdGFjay4gKmRlbHRhKiBwb2ludHMKLSAgIHRvIHRoZSBmaW5hbGx5IGJsb2NrLgorICAgUHVzaGVzIGEgdHJ5IGJsb2NrIGZyb20gYSB0cnktZXhjZXB0IGNsYXVzZSBvbnRvIHRoZSBibG9jayBzdGFjay4gKmRlbHRhKgorICAgcG9pbnRzIHRvIHRoZSBmaW5hbGx5IGJsb2NrLgogCiAuLiBvcGNvZGU6OiBTVE9SRV9NQVAKIAotICAgU3RvcmUgYSBrZXkgYW5kIHZhbHVlIHBhaXIgaW4gYSBkaWN0aW9uYXJ5LiAgUG9wcyB0aGUga2V5IGFuZCB2YWx1ZSB3aGlsZSBsZWF2aW5nCi0gICB0aGUgZGljdGlvbmFyeSBvbiB0aGUgc3RhY2suCisgICBTdG9yZSBhIGtleSBhbmQgdmFsdWUgcGFpciBpbiBhIGRpY3Rpb25hcnkuICBQb3BzIHRoZSBrZXkgYW5kIHZhbHVlIHdoaWxlCisgICBsZWF2aW5nIHRoZSBkaWN0aW9uYXJ5IG9uIHRoZSBzdGFjay4KIAogLi4gb3Bjb2RlOjogTE9BRF9GQVNUICh2YXJfbnVtKQogCkBAIC03MTEsOCArODE4LDggQEAKIC4uIG9wY29kZTo6IExPQURfQ0xPU1VSRSAoaSkKIAogICAgUHVzaGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBjZWxsIGNvbnRhaW5lZCBpbiBzbG90ICppKiBvZiB0aGUgY2VsbCBhbmQgZnJlZQotICAgdmFyaWFibGUgc3RvcmFnZS4gIFRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBpcyAgYGBjb19jZWxsdmFyc1tpXWBgIGlmICppKiBpcwotICAgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgKmNvX2NlbGx2YXJzKi4gIE90aGVyd2lzZSBpdCBpcyAgYGBjb19mcmVldmFyc1tpIC0KKyAgIHZhcmlhYmxlIHN0b3JhZ2UuICBUaGUgbmFtZSBvZiB0aGUgdmFyaWFibGUgaXMgYGBjb19jZWxsdmFyc1tpXWBgIGlmICppKiBpcworICAgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgKmNvX2NlbGx2YXJzKi4gIE90aGVyd2lzZSBpdCBpcyBgYGNvX2ZyZWV2YXJzW2kgLQogICAgbGVuKGNvX2NlbGx2YXJzKV1gYC4KIAogCkBAIC03MjIsNiArODI5LDEzIEBACiAgICBQdXNoZXMgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCB0aGUgY2VsbCBjb250YWlucyBvbiB0aGUgc3RhY2suCiAKIAorLi4gb3Bjb2RlOjogTE9BRF9DTEFTU0RFUkVGIChpKQorCisgICBNdWNoIGxpa2UgOm9wY29kZTpgTE9BRF9ERVJFRmAgYnV0IGZpcnN0IGNoZWNrcyB0aGUgbG9jYWxzIGRpY3Rpb25hcnkgYmVmb3JlCisgICBjb25zdWx0aW5nIHRoZSBjZWxsLiAgVGhpcyBpcyB1c2VkIGZvciBsb2FkaW5nIGZyZWUgdmFyaWFibGVzIGluIGNsYXNzCisgICBib2RpZXMuCisKKwogLi4gb3Bjb2RlOjogU1RPUkVfREVSRUYgKGkpCiAKICAgIFN0b3JlcyBUT1MgaW50byB0aGUgY2VsbCBjb250YWluZWQgaW4gc2xvdCAqaSogb2YgdGhlIGNlbGwgYW5kIGZyZWUgdmFyaWFibGUKQEAgLTc0NSwxMSArODU5LDEyIEBACiAKICAgIENhbGxzIGEgZnVuY3Rpb24uICBUaGUgbG93IGJ5dGUgb2YgKmFyZ2MqIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwKICAgIHBhcmFtZXRlcnMsIHRoZSBoaWdoIGJ5dGUgdGhlIG51bWJlciBvZiBrZXl3b3JkIHBhcmFtZXRlcnMuIE9uIHRoZSBzdGFjaywgdGhlCi0gICBvcGNvZGUgZmluZHMgdGhlIGtleXdvcmQgcGFyYW1ldGVycyBmaXJzdC4gIEZvciBlYWNoIGtleXdvcmQgYXJndW1lbnQsIHRoZSB2YWx1ZQotICAgaXMgb24gdG9wIG9mIHRoZSBrZXkuICBCZWxvdyB0aGUga2V5d29yZCBwYXJhbWV0ZXJzLCB0aGUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzCi0gICBhcmUgb24gdGhlIHN0YWNrLCB3aXRoIHRoZSByaWdodC1tb3N0IHBhcmFtZXRlciBvbiB0b3AuICBCZWxvdyB0aGUgcGFyYW1ldGVycywKLSAgIHRoZSBmdW5jdGlvbiBvYmplY3QgdG8gY2FsbCBpcyBvbiB0aGUgc3RhY2suICBQb3BzIGFsbCBmdW5jdGlvbiBhcmd1bWVudHMsIGFuZAotICAgdGhlIGZ1bmN0aW9uIGl0c2VsZiBvZmYgdGhlIHN0YWNrLCBhbmQgcHVzaGVzIHRoZSByZXR1cm4gdmFsdWUuCisgICBvcGNvZGUgZmluZHMgdGhlIGtleXdvcmQgcGFyYW1ldGVycyBmaXJzdC4gIEZvciBlYWNoIGtleXdvcmQgYXJndW1lbnQsIHRoZQorICAgdmFsdWUgaXMgb24gdG9wIG9mIHRoZSBrZXkuICBCZWxvdyB0aGUga2V5d29yZCBwYXJhbWV0ZXJzLCB0aGUgcG9zaXRpb25hbAorICAgcGFyYW1ldGVycyBhcmUgb24gdGhlIHN0YWNrLCB3aXRoIHRoZSByaWdodC1tb3N0IHBhcmFtZXRlciBvbiB0b3AuICBCZWxvdyB0aGUKKyAgIHBhcmFtZXRlcnMsIHRoZSBmdW5jdGlvbiBvYmplY3QgdG8gY2FsbCBpcyBvbiB0aGUgc3RhY2suICBQb3BzIGFsbCBmdW5jdGlvbgorICAgYXJndW1lbnRzLCBhbmQgdGhlIGZ1bmN0aW9uIGl0c2VsZiBvZmYgdGhlIHN0YWNrLCBhbmQgcHVzaGVzIHRoZSByZXR1cm4KKyAgIHZhbHVlLgogCiAKIC4uIG9wY29kZTo6IE1BS0VfRlVOQ1RJT04gKGFyZ2MpCkBAIC03NzIsOCArODg3LDggQEAKICAgIENyZWF0ZXMgYSBuZXcgZnVuY3Rpb24gb2JqZWN0LCBzZXRzIGl0cyAqX19jbG9zdXJlX18qIHNsb3QsIGFuZCBwdXNoZXMgaXQgb24KICAgIHRoZSBzdGFjay4gIFRPUyBpcyB0aGUgOnRlcm06YHF1YWxpZmllZCBuYW1lYCBvZiB0aGUgZnVuY3Rpb24sIFRPUzEgaXMgdGhlCiAgICBjb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb24sIGFuZCBUT1MyIGlzIHRoZSB0dXBsZSBjb250YWluaW5nIGNlbGxzIGZvcgotICAgdGhlIGNsb3N1cmUncyBmcmVlIHZhcmlhYmxlcy4gIFRoZSBmdW5jdGlvbiBhbHNvIGhhcyAqYXJnYyogZGVmYXVsdCBwYXJhbWV0ZXJzLAotICAgd2hpY2ggYXJlIGZvdW5kIGJlbG93IHRoZSBjZWxscy4KKyAgIHRoZSBjbG9zdXJlJ3MgZnJlZSB2YXJpYWJsZXMuICAqYXJnYyogaXMgaW50ZXJwcmV0ZWQgYXMgaW4gYGBNQUtFX0ZVTkNUSU9OYGA7CisgICB0aGUgYW5ub3RhdGlvbnMgYW5kIGRlZmF1bHRzIGFyZSBhbHNvIGluIHRoZSBzYW1lIG9yZGVyIGJlbG93IFRPUzIuCiAKIAogLi4gb3Bjb2RlOjogQlVJTERfU0xJQ0UgKGFyZ2MpCkBAIC03ODksMzQgKzkwNCw5NCBAQAogCiAgICBQcmVmaXhlcyBhbnkgb3Bjb2RlIHdoaWNoIGhhcyBhbiBhcmd1bWVudCB0b28gYmlnIHRvIGZpdCBpbnRvIHRoZSBkZWZhdWx0IHR3bwogICAgYnl0ZXMuICAqZXh0KiBob2xkcyB0d28gYWRkaXRpb25hbCBieXRlcyB3aGljaCwgdGFrZW4gdG9nZXRoZXIgd2l0aCB0aGUKLSAgIHN1YnNlcXVlbnQgb3Bjb2RlJ3MgYXJndW1lbnQsIGNvbXByaXNlIGEgZm91ci1ieXRlIGFyZ3VtZW50LCAqZXh0KiBiZWluZyB0aGUgdHdvCi0gICBtb3N0LXNpZ25pZmljYW50IGJ5dGVzLgorICAgc3Vic2VxdWVudCBvcGNvZGUncyBhcmd1bWVudCwgY29tcHJpc2UgYSBmb3VyLWJ5dGUgYXJndW1lbnQsICpleHQqIGJlaW5nIHRoZQorICAgdHdvIG1vc3Qtc2lnbmlmaWNhbnQgYnl0ZXMuCiAKIAogLi4gb3Bjb2RlOjogQ0FMTF9GVU5DVElPTl9WQVIgKGFyZ2MpCiAKLSAgIENhbGxzIGEgZnVuY3Rpb24uICphcmdjKiBpcyBpbnRlcnByZXRlZCBhcyBpbiBgYENBTExfRlVOQ1RJT05gYC4gVGhlIHRvcCBlbGVtZW50Ci0gICBvbiB0aGUgc3RhY2sgY29udGFpbnMgdGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QsIGZvbGxvd2VkIGJ5IGtleXdvcmQgYW5kCi0gICBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKyAgIENhbGxzIGEgZnVuY3Rpb24uICphcmdjKiBpcyBpbnRlcnByZXRlZCBhcyBpbiA6b3Bjb2RlOmBDQUxMX0ZVTkNUSU9OYC4gVGhlCisgICB0b3AgZWxlbWVudCBvbiB0aGUgc3RhY2sgY29udGFpbnMgdGhlIHZhcmlhYmxlIGFyZ3VtZW50IGxpc3QsIGZvbGxvd2VkIGJ5CisgICBrZXl3b3JkIGFuZCBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KIAogCiAuLiBvcGNvZGU6OiBDQUxMX0ZVTkNUSU9OX0tXIChhcmdjKQogCi0gICBDYWxscyBhIGZ1bmN0aW9uLiAqYXJnYyogaXMgaW50ZXJwcmV0ZWQgYXMgaW4gYGBDQUxMX0ZVTkNUSU9OYGAuIFRoZSB0b3AgZWxlbWVudAotICAgb24gdGhlIHN0YWNrIGNvbnRhaW5zIHRoZSBrZXl3b3JkIGFyZ3VtZW50cyBkaWN0aW9uYXJ5LCAgZm9sbG93ZWQgYnkgZXhwbGljaXQKLSAgIGtleXdvcmQgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorICAgQ2FsbHMgYSBmdW5jdGlvbi4gKmFyZ2MqIGlzIGludGVycHJldGVkIGFzIGluIDpvcGNvZGU6YENBTExfRlVOQ1RJT05gLiBUaGUKKyAgIHRvcCBlbGVtZW50IG9uIHRoZSBzdGFjayBjb250YWlucyB0aGUga2V5d29yZCBhcmd1bWVudHMgZGljdGlvbmFyeSwgZm9sbG93ZWQKKyAgIGJ5IGV4cGxpY2l0IGtleXdvcmQgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzLgogCiAKIC4uIG9wY29kZTo6IENBTExfRlVOQ1RJT05fVkFSX0tXIChhcmdjKQogCi0gICBDYWxscyBhIGZ1bmN0aW9uLiAqYXJnYyogaXMgaW50ZXJwcmV0ZWQgYXMgaW4gYGBDQUxMX0ZVTkNUSU9OYGAuICBUaGUgdG9wCi0gICBlbGVtZW50IG9uIHRoZSBzdGFjayBjb250YWlucyB0aGUga2V5d29yZCBhcmd1bWVudHMgZGljdGlvbmFyeSwgZm9sbG93ZWQgYnkgdGhlCi0gICB2YXJpYWJsZS1hcmd1bWVudHMgdHVwbGUsIGZvbGxvd2VkIGJ5IGV4cGxpY2l0IGtleXdvcmQgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzLgorICAgQ2FsbHMgYSBmdW5jdGlvbi4gKmFyZ2MqIGlzIGludGVycHJldGVkIGFzIGluIDpvcGNvZGU6YENBTExfRlVOQ1RJT05gLiAgVGhlCisgICB0b3AgZWxlbWVudCBvbiB0aGUgc3RhY2sgY29udGFpbnMgdGhlIGtleXdvcmQgYXJndW1lbnRzIGRpY3Rpb25hcnksIGZvbGxvd2VkCisgICBieSB0aGUgdmFyaWFibGUtYXJndW1lbnRzIHR1cGxlLCBmb2xsb3dlZCBieSBleHBsaWNpdCBrZXl3b3JkIGFuZCBwb3NpdGlvbmFsCisgICBhcmd1bWVudHMuCiAKIAogLi4gb3Bjb2RlOjogSEFWRV9BUkdVTUVOVAogCi0gICBUaGlzIGlzIG5vdCByZWFsbHkgYW4gb3Bjb2RlLiAgSXQgaWRlbnRpZmllcyB0aGUgZGl2aWRpbmcgbGluZSBiZXR3ZWVuIG9wY29kZXMKLSAgIHdoaWNoIGRvbid0IHRha2UgYXJndW1lbnRzIGBgPCBIQVZFX0FSR1VNRU5UYGAgYW5kIHRob3NlIHdoaWNoIGRvIGBgPj0KLSAgIEhBVkVfQVJHVU1FTlRgYC4KKyAgIFRoaXMgaXMgbm90IHJlYWxseSBhbiBvcGNvZGUuICBJdCBpZGVudGlmaWVzIHRoZSBkaXZpZGluZyBsaW5lIGJldHdlZW4KKyAgIG9wY29kZXMgd2hpY2ggZG9uJ3QgdGFrZSBhcmd1bWVudHMgYGA8IEhBVkVfQVJHVU1FTlRgYCBhbmQgdGhvc2Ugd2hpY2ggZG8KKyAgIGBgPj0gSEFWRV9BUkdVTUVOVGBgLgogCisuLiBfb3Bjb2RlX2NvbGxlY3Rpb25zOgorCitPcGNvZGUgY29sbGVjdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBjb2xsZWN0aW9ucyBhcmUgcHJvdmlkZWQgZm9yIGF1dG9tYXRpYyBpbnRyb3NwZWN0aW9uIG9mIGJ5dGVjb2RlCitpbnN0cnVjdGlvbnM6CisKKy4uIGRhdGE6OiBvcG5hbWUKKworICAgU2VxdWVuY2Ugb2Ygb3BlcmF0aW9uIG5hbWVzLCBpbmRleGFibGUgdXNpbmcgdGhlIGJ5dGVjb2RlLgorCisKKy4uIGRhdGE6OiBvcG1hcAorCisgICBEaWN0aW9uYXJ5IG1hcHBpbmcgb3BlcmF0aW9uIG5hbWVzIHRvIGJ5dGVjb2Rlcy4KKworCisuLiBkYXRhOjogY21wX29wCisKKyAgIFNlcXVlbmNlIG9mIGFsbCBjb21wYXJlIG9wZXJhdGlvbiBuYW1lcy4KKworCisuLiBkYXRhOjogaGFzY29uc3QKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhIGNvbnN0YW50IHBhcmFtZXRlci4KKworCisuLiBkYXRhOjogaGFzZnJlZQorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYSBmcmVlIHZhcmlhYmxlIChub3RlIHRoYXQgJ2ZyZWUnIGluIHRoaXMKKyAgIGNvbnRleHQgcmVmZXJzIHRvIG5hbWVzIGluIHRoZSBjdXJyZW50IHNjb3BlIHRoYXQgYXJlIHJlZmVyZW5jZWQgYnkgaW5uZXIKKyAgIHNjb3BlcyBvciBuYW1lcyBpbiBvdXRlciBzY29wZXMgdGhhdCBhcmUgcmVmZXJlbmNlZCBmcm9tIHRoaXMgc2NvcGUuICBJdCBkb2VzCisgICAqbm90KiBpbmNsdWRlIHJlZmVyZW5jZXMgdG8gZ2xvYmFsIG9yIGJ1aWx0aW4gc2NvcGVzKS4KKworCisuLiBkYXRhOjogaGFzbmFtZQorCisgICBTZXF1ZW5jZSBvZiBieXRlY29kZXMgdGhhdCBhY2Nlc3MgYW4gYXR0cmlidXRlIGJ5IG5hbWUuCisKKworLi4gZGF0YTo6IGhhc2pyZWwKKworICAgU2VxdWVuY2Ugb2YgYnl0ZWNvZGVzIHRoYXQgaGF2ZSBhIHJlbGF0aXZlIGp1bXAgdGFyZ2V0LgorCisKKy4uIGRhdGE6OiBoYXNqYWJzCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGhhdmUgYW4gYWJzb2x1dGUganVtcCB0YXJnZXQuCisKKworLi4gZGF0YTo6IGhhc2xvY2FsCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyB0aGF0IGFjY2VzcyBhIGxvY2FsIHZhcmlhYmxlLgorCisKKy4uIGRhdGE6OiBoYXNjb21wYXJlCisKKyAgIFNlcXVlbmNlIG9mIGJ5dGVjb2RlcyBvZiBCb29sZWFuIG9wZXJhdGlvbnMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9kaXN0cmlidXRpb24ucnN0IGIvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDk1NGQxCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZGlzdHJpYnV0aW9uLnJzdApAQCAtMCwwICsxLDE0IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorU29mdHdhcmUgUGFja2FnaW5nIGFuZCBEaXN0cmlidXRpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZXNlIGxpYnJhcmllcyBoZWxwIHlvdSB3aXRoIHB1Ymxpc2hpbmcgYW5kIGluc3RhbGxpbmcgUHl0aG9uIHNvZnR3YXJlLgorV2hpbGUgdGhlc2UgbW9kdWxlcyBhcmUgZGVzaWduZWQgdG8gd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZQorYFB5dGhvbiBQYWNrYWdlIEluZGV4IDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfXywgdGhleSBjYW4gYWxzbyBiZSB1c2VkCit3aXRoIGEgbG9jYWwgaW5kZXggc2VydmVyLCBvciB3aXRob3V0IGFueSBpbmRleCBzZXJ2ZXIgYXQgYWxsLgorCisuLiB0b2N0cmVlOjoKKworICAgZGlzdHV0aWxzLnJzdAorICAgZW5zdXJlcGlwLnJzdAorICAgdmVudi5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Rpc3R1dGlscy5yc3QgYi9Eb2MvbGlicmFyeS9kaXN0dXRpbHMucnN0CmluZGV4IDY2NjZhOWIuLmUzZDEzMTQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Rpc3R1dGlscy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZGlzdHV0aWxzLnJzdApAQCAtMTIsMTQgKzEyLDMxIEBACiAxMDAlLXB1cmUgUHl0aG9uLCBvciBtYXkgYmUgZXh0ZW5zaW9uIG1vZHVsZXMgd3JpdHRlbiBpbiBDLCBvciBtYXkgYmUKIGNvbGxlY3Rpb25zIG9mIFB5dGhvbiBwYWNrYWdlcyB3aGljaCBpbmNsdWRlIG1vZHVsZXMgY29kZWQgaW4gYm90aCBQeXRob24gYW5kIEMuCiAKK01vc3QgUHl0aG9uIHVzZXJzIHdpbGwgKm5vdCogd2FudCB0byB1c2UgdGhpcyBtb2R1bGUgZGlyZWN0bHksIGJ1dCBpbnN0ZWFkCit1c2UgdGhlIGNyb3NzLXZlcnNpb24gdG9vbHMgbWFpbnRhaW5lZCBieSB0aGUgUHl0aG9uIFBhY2thZ2luZyBBdXRob3JpdHkuIEluCitwYXJ0aWN1bGFyLAorYHNldHVwdG9vbHMgPGh0dHBzOi8vc2V0dXB0b29scy5weXBhLmlvL2VuL2xhdGVzdC9zZXR1cHRvb2xzLmh0bWw+YF9fIGlzIGFuCitlbmhhbmNlZCBhbHRlcm5hdGl2ZSB0byA6bW9kOmBkaXN0dXRpbHNgIHRoYXQgcHJvdmlkZXM6CiAKLVVzZXIgZG9jdW1lbnRhdGlvbiBhbmQgQVBJIHJlZmVyZW5jZSBhcmUgcHJvdmlkZWQgaW4gYW5vdGhlciBkb2N1bWVudDoKKyogc3VwcG9ydCBmb3IgZGVjbGFyaW5nIHByb2plY3QgZGVwZW5kZW5jaWVzCisqIGFkZGl0aW9uYWwgbWVjaGFuaXNtcyBmb3IgY29uZmlndXJpbmcgd2hpY2ggZmlsZXMgdG8gaW5jbHVkZSBpbiBzb3VyY2UKKyAgcmVsZWFzZXMgKGluY2x1ZGluZyBwbHVnaW5zIGZvciBpbnRlZ3JhdGlvbiB3aXRoIHZlcnNpb24gY29udHJvbCBzeXN0ZW1zKQorKiB0aGUgYWJpbGl0eSB0byBkZWNsYXJlIHByb2plY3QgImVudHJ5IHBvaW50cyIsIHdoaWNoIGNhbiBiZSB1c2VkIGFzIHRoZQorICBiYXNpcyBmb3IgYXBwbGljYXRpb24gcGx1Z2luIHN5c3RlbXMKKyogdGhlIGFiaWxpdHkgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBXaW5kb3dzIGNvbW1hbmQgbGluZSBleGVjdXRhYmxlcyBhdAorICBpbnN0YWxsYXRpb24gdGltZSByYXRoZXIgdGhhbiBuZWVkaW5nIHRvIHByZWJ1aWxkIHRoZW0KKyogY29uc2lzdGVudCBiZWhhdmlvdXIgYWNyb3NzIGFsbCBzdXBwb3J0ZWQgUHl0aG9uIHZlcnNpb25zCiAKLS4uIHNlZWFsc286OgorVGhlIHJlY29tbWVuZGVkIGBwaXAgPGh0dHBzOi8vcGlwLnB5cGEuaW8vPmBfXyBpbnN0YWxsZXIgcnVucyBhbGwKK2Bgc2V0dXAucHlgYCBzY3JpcHRzIHdpdGggYGBzZXR1cHRvb2xzYGAsIGV2ZW4gaWYgdGhlIHNjcmlwdCBpdHNlbGYgb25seQoraW1wb3J0cyBgYGRpc3R1dGlsc2BgLiBSZWZlciB0byB0aGUKK2BQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmc+YF8gZm9yIG1vcmUKK2luZm9ybWF0aW9uLgogCi0gICA6cmVmOmBkaXN0dXRpbHMtaW5kZXhgCi0gICAgICBUaGUgbWFudWFsIGZvciBkZXZlbG9wZXJzIGFuZCBwYWNrYWdlcnMgb2YgUHl0aG9uIG1vZHVsZXMuICBUaGlzIGRlc2NyaWJlcwotICAgICAgaG93IHRvIHByZXBhcmUgOm1vZDpgZGlzdHV0aWxzYFwgLWJhc2VkIHBhY2thZ2VzIHNvIHRoYXQgdGhleSBtYXkgYmUKLSAgICAgIGVhc2lseSBpbnN0YWxsZWQgaW50byBhbiBleGlzdGluZyBQeXRob24gaW5zdGFsbGF0aW9uLiAgSXQgYWxzbyBjb250YWlucwotICAgICAgaW5zdHJ1Y3Rpb25zIGZvciBlbmQtdXNlcnMgd2FudGluZyB0byBpbnN0YWxsIGEgZGlzdHV0aWxzLWJhc2VkIHBhY2thZ2UsCi0gICAgICA6cmVmOmBpbnN0YWxsLWluZGV4YC4KK0ZvciB0aGUgYmVuZWZpdHMgb2YgcGFja2FnaW5nIHRvb2wgYXV0aG9ycyBhbmQgdXNlcnMgc2Vla2luZyBhIGRlZXBlcgordW5kZXJzdGFuZGluZyBvZiB0aGUgZGV0YWlscyBvZiB0aGUgY3VycmVudCBwYWNrYWdpbmcgYW5kIGRpc3RyaWJ1dGlvbgorc3lzdGVtLCB0aGUgbGVnYWN5IDptb2Q6YGRpc3R1dGlsc2AgYmFzZWQgdXNlciBkb2N1bWVudGF0aW9uIGFuZCBBUEkKK3JlZmVyZW5jZSByZW1haW4gYXZhaWxhYmxlOgorCisqIDpyZWY6YGluc3RhbGwtaW5kZXhgCisqIDpyZWY6YGRpc3R1dGlscy1pbmRleGAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2RvY3Rlc3QucnN0IGIvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKaW5kZXggMjIyYzcxOS4uZWE2ZTFiNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZG9jdGVzdC5yc3QKQEAgLTI3OCw2ICsyNzgsMTAgQEAKIEFueSBjbGFzc2VzIGZvdW5kIGFyZSByZWN1cnNpdmVseSBzZWFyY2hlZCBzaW1pbGFybHksIHRvIHRlc3QgZG9jc3RyaW5ncyBpbgogdGhlaXIgY29udGFpbmVkIG1ldGhvZHMgYW5kIG5lc3RlZCBjbGFzc2VzLgogCisuLiBpbXBsLWRldGFpbDo6CisgICBQcmlvciB0byB2ZXJzaW9uIDMuNCwgZXh0ZW5zaW9uIG1vZHVsZXMgd3JpdHRlbiBpbiBDIHdlcmUgbm90IGZ1bGx5CisgICBzZWFyY2hlZCBieSBkb2N0ZXN0LgorCiAKIC4uIF9kb2N0ZXN0LWZpbmRpbmctZXhhbXBsZXM6CiAKQEAgLTQ5NSw3ICs0OTksMTEgQEAKIEEgbnVtYmVyIG9mIG9wdGlvbiBmbGFncyBjb250cm9sIHZhcmlvdXMgYXNwZWN0cyBvZiBkb2N0ZXN0J3MgYmVoYXZpb3IuCiBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWdzIGFyZSBzdXBwbGllZCBhcyBtb2R1bGUgY29uc3RhbnRzLCB3aGljaCBjYW4gYmUKIG9yJ2VkIHRvZ2V0aGVyIGFuZCBwYXNzZWQgdG8gdmFyaW91cyBmdW5jdGlvbnMuICBUaGUgbmFtZXMgY2FuIGFsc28gYmUgdXNlZCBpbgotOnJlZjpgZG9jdGVzdCBkaXJlY3RpdmVzIDxkb2N0ZXN0LWRpcmVjdGl2ZXM+YC4KKzpyZWY6YGRvY3Rlc3QgZGlyZWN0aXZlcyA8ZG9jdGVzdC1kaXJlY3RpdmVzPmAsIGFuZCBtYXkgYmUgcGFzc2VkIHRvIHRoZQorZG9jdGVzdCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIHZpYSB0aGUgYGAtb2BgIG9wdGlvbi4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICBUaGUgYGAtb2BgIGNvbW1hbmQgbGluZSBvcHRpb24uCiAKIFRoZSBmaXJzdCBncm91cCBvZiBvcHRpb25zIGRlZmluZSB0ZXN0IHNlbWFudGljcywgY29udHJvbGxpbmcgYXNwZWN0cyBvZiBob3cKIGRvY3Rlc3QgZGVjaWRlcyB3aGV0aGVyIGFjdHVhbCBvdXRwdXQgbWF0Y2hlcyBhbiBleGFtcGxlJ3MgZXhwZWN0ZWQgb3V0cHV0OgpAQCAtNjMzLDYgKzY0MSwxOSBAQAogICAgdGhlIG91dHB1dCBpcyBzdXBwcmVzc2VkLgogCiAKKy4uIGRhdGE6OiBGQUlMX0ZBU1QKKworICAgV2hlbiBzcGVjaWZpZWQsIGV4aXQgYWZ0ZXIgdGhlIGZpcnN0IGZhaWxpbmcgZXhhbXBsZSBhbmQgZG9uJ3QgYXR0ZW1wdCB0byBydW4KKyAgIHRoZSByZW1haW5pbmcgZXhhbXBsZXMuIFRodXMsIHRoZSBudW1iZXIgb2YgZmFpbHVyZXMgcmVwb3J0ZWQgd2lsbCBiZSBhdCBtb3N0CisgICAxLiAgVGhpcyBmbGFnIG1heSBiZSB1c2VmdWwgZHVyaW5nIGRlYnVnZ2luZywgc2luY2UgZXhhbXBsZXMgYWZ0ZXIgdGhlIGZpcnN0CisgICBmYWlsdXJlIHdvbid0IGV2ZW4gcHJvZHVjZSBkZWJ1Z2dpbmcgb3V0cHV0LgorCisgICBUaGUgZG9jdGVzdCBjb21tYW5kIGxpbmUgYWNjZXB0cyB0aGUgb3B0aW9uIGBgLWZgYCBhcyBhIHNob3J0aGFuZCBmb3IgYGAtbworICAgRkFJTF9GQVNUYGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGRhdGE6OiBSRVBPUlRJTkdfRkxBR1MKIAogICAgQSBiaXRtYXNrIG9yJ2luZyB0b2dldGhlciBhbGwgdGhlIHJlcG9ydGluZyBmbGFncyBhYm92ZS4KQEAgLTg0NCw4ICs4NjUsOCBAQAogICAgbm90aGluZyBhdCB0aGUgZW5kLiAgSW4gdmVyYm9zZSBtb2RlLCB0aGUgc3VtbWFyeSBpcyBkZXRhaWxlZCwgZWxzZSB0aGUgc3VtbWFyeQogICAgaXMgdmVyeSBicmllZiAoaW4gZmFjdCwgZW1wdHkgaWYgYWxsIHRlc3RzIHBhc3NlZCkuCiAKLSAgIE9wdGlvbmFsIGFyZ3VtZW50ICpvcHRpb25mbGFncyogb3IncyB0b2dldGhlciBvcHRpb24gZmxhZ3MuICBTZWUgc2VjdGlvbgotICAgOnJlZjpgZG9jdGVzdC1vcHRpb25zYC4KKyAgIE9wdGlvbmFsIGFyZ3VtZW50ICpvcHRpb25mbGFncyogKGRlZmF1bHQgdmFsdWUgMCkgdGFrZXMgdGhlIGJpdHdpc2Utb3Igb2YKKyAgIG9wdGlvbiBmbGFncy4gIFNlZSBzZWN0aW9uIDpyZWY6YGRvY3Rlc3Qtb3B0aW9uc2AuCiAKICAgIE9wdGlvbmFsIGFyZ3VtZW50ICpyYWlzZV9vbl9lcnJvciogZGVmYXVsdHMgdG8gZmFsc2UuICBJZiB0cnVlLCBhbiBleGNlcHRpb24gaXMKICAgIHJhaXNlZCB1cG9uIHRoZSBmaXJzdCBmYWlsdXJlIG9yIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIGluIGFuIGV4YW1wbGUuICBUaGlzCkBAIC04OTMsMTUgKzkxNCwxMCBAQAogICAgYWJvdmUsIGV4Y2VwdCB0aGF0ICpnbG9icyogZGVmYXVsdHMgdG8gYGBtLl9fZGljdF9fYGAuCiAKIAotVGhlcmUncyBhbHNvIGEgZnVuY3Rpb24gdG8gcnVuIHRoZSBkb2N0ZXN0cyBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgb2JqZWN0LgotVGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4gIFRoZXJlIGFyZSBubyBwbGFucyB0bwotZGVwcmVjYXRlIGl0LCBidXQgaXQncyByYXJlbHkgdXNlZnVsOgotCi0KIC4uIGZ1bmN0aW9uOjogcnVuX2RvY3N0cmluZ19leGFtcGxlcyhmLCBnbG9icywgdmVyYm9zZT1GYWxzZSwgbmFtZT0iTm9OYW1lIiwgY29tcGlsZWZsYWdzPU5vbmUsIG9wdGlvbmZsYWdzPTApCiAKLSAgIFRlc3QgZXhhbXBsZXMgYXNzb2NpYXRlZCB3aXRoIG9iamVjdCAqZio7IGZvciBleGFtcGxlLCAqZiogbWF5IGJlIGEgbW9kdWxlLAotICAgZnVuY3Rpb24sIG9yIGNsYXNzIG9iamVjdC4KKyAgIFRlc3QgZXhhbXBsZXMgYXNzb2NpYXRlZCB3aXRoIG9iamVjdCAqZio7IGZvciBleGFtcGxlLCAqZiogbWF5IGJlIGEgc3RyaW5nLAorICAgYSBtb2R1bGUsIGEgZnVuY3Rpb24sIG9yIGEgY2xhc3Mgb2JqZWN0LgogCiAgICBBIHNoYWxsb3cgY29weSBvZiBkaWN0aW9uYXJ5IGFyZ3VtZW50ICpnbG9icyogaXMgdXNlZCBmb3IgdGhlIGV4ZWN1dGlvbiBjb250ZXh0LgogCkBAIC0xMDc2LDcgKzEwOTIsNyBAQAogCiAgICBTZXQgdGhlIDptb2Q6YGRvY3Rlc3RgIHJlcG9ydGluZyBmbGFncyB0byB1c2UuCiAKLSAgIEFyZ3VtZW50ICpmbGFncyogb3IncyB0b2dldGhlciBvcHRpb24gZmxhZ3MuICBTZWUgc2VjdGlvbgorICAgQXJndW1lbnQgKmZsYWdzKiB0YWtlcyB0aGUgYml0d2lzZS1vciBvZiBvcHRpb24gZmxhZ3MuICBTZWUgc2VjdGlvbgogICAgOnJlZjpgZG9jdGVzdC1vcHRpb25zYC4gIE9ubHkgInJlcG9ydGluZyBmbGFncyIgY2FuIGJlIHVzZWQuCiAKICAgIFRoaXMgaXMgYSBtb2R1bGUtZ2xvYmFsIHNldHRpbmcsIGFuZCBhZmZlY3RzIGFsbCBmdXR1cmUgZG9jdGVzdHMgcnVuIGJ5IG1vZHVsZQpAQCAtMTI2OSw5ICsxMjg1LDggQEAKIAogICAgQSBwcm9jZXNzaW5nIGNsYXNzIHVzZWQgdG8gZXh0cmFjdCB0aGUgOmNsYXNzOmBEb2NUZXN0YFwgcyB0aGF0IGFyZSByZWxldmFudCB0bwogICAgYSBnaXZlbiBvYmplY3QsIGZyb20gaXRzIGRvY3N0cmluZyBhbmQgdGhlIGRvY3N0cmluZ3Mgb2YgaXRzIGNvbnRhaW5lZCBvYmplY3RzLgotICAgOmNsYXNzOmBEb2NUZXN0YFwgcyBjYW4gY3VycmVudGx5IGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBmb2xsb3dpbmcgb2JqZWN0IHR5cGVzOgotICAgbW9kdWxlcywgZnVuY3Rpb25zLCBjbGFzc2VzLCBtZXRob2RzLCBzdGF0aWNtZXRob2RzLCBjbGFzc21ldGhvZHMsIGFuZAotICAgcHJvcGVydGllcy4KKyAgIDpjbGFzczpgRG9jVGVzdGBcIHMgY2FuIGJlIGV4dHJhY3RlZCBmcm9tIG1vZHVsZXMsIGNsYXNzZXMsIGZ1bmN0aW9ucywKKyAgIG1ldGhvZHMsIHN0YXRpY21ldGhvZHMsIGNsYXNzbWV0aG9kcywgYW5kIHByb3BlcnRpZXMuCiAKICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqdmVyYm9zZSogY2FuIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgb2JqZWN0cyBzZWFyY2hlZCBieQogICAgdGhlIGZpbmRlci4gIEl0IGRlZmF1bHRzIHRvIGBgRmFsc2VgYCAobm8gb3V0cHV0KS4KQEAgLTE4MDEsNiArMTgxNiwyNyBAQAogKiBEZWZpbmUgYSBgYF9fdGVzdF9fYGAgZGljdGlvbmFyeSBtYXBwaW5nIGZyb20gcmVncmVzc2lvbiB0ZXN0IHRvcGljcyB0bwogICBkb2NzdHJpbmdzIGNvbnRhaW5pbmcgdGVzdCBjYXNlcy4KIAorV2hlbiB5b3UgaGF2ZSBwbGFjZWQgeW91ciB0ZXN0cyBpbiBhIG1vZHVsZSwgdGhlIG1vZHVsZSBjYW4gaXRzZWxmIGJlIHRoZSB0ZXN0CitydW5uZXIuICBXaGVuIGEgdGVzdCBmYWlscywgeW91IGNhbiBhcnJhbmdlIGZvciB5b3VyIHRlc3QgcnVubmVyIHRvIHJlLXJ1biBvbmx5Cit0aGUgZmFpbGluZyBkb2N0ZXN0IHdoaWxlIHlvdSBkZWJ1ZyB0aGUgcHJvYmxlbS4gIEhlcmUgaXMgYSBtaW5pbWFsIGV4YW1wbGUgb2YKK3N1Y2ggYSB0ZXN0IHJ1bm5lcjo6CisKKyAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICBpbXBvcnQgZG9jdGVzdAorICAgICAgICBmbGFncyA9IGRvY3Rlc3QuUkVQT1JUX05ESUZGfGRvY3Rlc3QuRkFJTF9GQVNUCisgICAgICAgIGlmIGxlbihzeXMuYXJndikgPiAxOgorICAgICAgICAgICAgbmFtZSA9IHN5cy5hcmd2WzFdCisgICAgICAgICAgICBpZiBuYW1lIGluIGdsb2JhbHMoKToKKyAgICAgICAgICAgICAgICBvYmogPSBnbG9iYWxzKClbbmFtZV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb2JqID0gX190ZXN0X19bbmFtZV0KKyAgICAgICAgICAgIGRvY3Rlc3QucnVuX2RvY3N0cmluZ19leGFtcGxlcyhvYmosIGdsb2JhbHMoKSwgbmFtZT1uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbmZsYWdzPWZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFpbCwgdG90YWwgPSBkb2N0ZXN0LnRlc3Rtb2Qob3B0aW9uZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICBwcmludCgie30gZmFpbHVyZXMgb3V0IG9mIHt9IHRlc3RzIi5mb3JtYXQoZmFpbCwgdG90YWwpKQorCisKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwogCiAuLiBbI10gRXhhbXBsZXMgY29udGFpbmluZyBib3RoIGV4cGVjdGVkIG91dHB1dCBhbmQgYW4gZXhjZXB0aW9uIGFyZSBub3Qgc3VwcG9ydGVkLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwtZXhhbXBsZXMucnN0CmluZGV4IDMyY2VjZjMuLmNiYmNiNzggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLWV4YW1wbGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC1leGFtcGxlcy5yc3QKQEAgLTQwLDYgKzQwLDM2IEBACiAuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL2VtYWlsLWFsdGVybmF0aXZlLnB5CiAKIAorLi4gX2VtYWlsLWNvbnRlbnRtYW5hZ2VyLWFwaS1leGFtcGxlczoKKworRXhhbXBsZXMgdXNpbmcgdGhlIFByb3Zpc2lvbmFsIEFQSQorfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorSGVyZSBpcyBhIHJld29ya2luZyBvZiB0aGUgbGFzdCBleGFtcGxlIHVzaW5nIHRoZSBwcm92aXNpb25hbCBBUEkuICBUbyBtYWtlCit0aGluZ3MgYSBiaXQgbW9yZSBpbnRlcmVzdGluZywgd2UgaW5jbHVkZSBhIHJlbGF0ZWQgaW1hZ2UgaW4gdGhlIGh0bWwgcGFydCwgYW5kCit3ZSBzYXZlIGEgY29weSBvZiB3aGF0IHdlIGFyZSBnb2luZyB0byBzZW5kIHRvIGRpc2ssIGFzIHdlbGwgYXMgc2VuZGluZyBpdC4KKworVGhpcyBleGFtcGxlIGFsc28gc2hvd3MgaG93IGVhc3kgaXQgaXMgdG8gaW5jbHVkZSBub24tQVNDSUksIGFuZCBzaW1wbGlmaWVzIHRoZQorc2VuZGluZyBvZiB0aGUgbWVzc2FnZSB1c2luZyB0aGUgOm1ldGg6YC5zZW5kX21lc3NhZ2VgIG1ldGhvZCBvZiB0aGUKKzptb2Q6YHNtdHBsaWJgIG1vZHVsZS4KKworLi4gbGl0ZXJhbGluY2x1ZGU6OiAuLi9pbmNsdWRlcy9lbWFpbC1hbHRlcm5hdGl2ZS1uZXctYXBpLnB5CisKK0lmIHdlIHdlcmUgaW5zdGVhZCBzZW50IHRoZSBtZXNzYWdlIGZyb20gdGhlIGxhc3QgZXhhbXBsZSwgaGVyZSBpcyBvbmUKK3dheSB3ZSBjb3VsZCBwcm9jZXNzIGl0OgorCisuLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL2VtYWlsLXJlYWQtYWx0ZXJuYXRpdmUtbmV3LWFwaS5weQorCitVcCB0byB0aGUgcHJvbXB0LCB0aGUgb3V0cHV0IGZyb20gdGhlIGFib3ZlIGlzOjoKKworICAgIFRvOiBQZW5lbG9wZSBQdXNzeWNhdCA8InBlbmVsb3BlQGV4YW1wbGUuY29tIj4sIEZhYnJldHRlIFB1c3N5Y2F0IDwiZmFicmV0dGVAZXhhbXBsZS5jb20iPgorICAgIEZyb206IFBlcMOpIExlIFBldyA8cGVwZUBleGFtcGxlLmNvbT4KKyAgICBTdWJqZWN0OiBBeW9ucyBhc3BlcmdlcyBwb3VyIGxlIGTDqWpldW5lcgorCisgICAgU2FsdXQhCisKKyAgICBDZWxhIHJlc3NlbWJsZSDDoCB1biBleGNlbGxlbnQgcmVjaXBpZVsxXSBkw6lqZXVuZXIuCisKKwogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKIC4uIFsxXSBUaGFua3MgdG8gTWF0dGhldyBEaXhvbiBDb3dsZXMgZm9yIHRoZSBvcmlnaW5hbCBpbnNwaXJhdGlvbiBhbmQgZXhhbXBsZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5jaGFyc2V0LnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQucnN0CmluZGV4IDE5YTY5NTMuLjgwZWYzZDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLmNoYXJzZXQucnN0CkBAIC0yMzQsNSArMjM0LDUgQEAKIAogICAgKmNoYXJzZXQqIGlzIHRoZSBjYW5vbmljYWwgbmFtZSBvZiBhIGNoYXJhY3RlciBzZXQuICpjb2RlY25hbWUqIGlzIHRoZSBuYW1lIG9mIGEKICAgIFB5dGhvbiBjb2RlYywgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIDpjbGFzczpgc3RyYCdzCi0gICA6bWV0aDpgfnN0ci5lbmNvZGVgIG1ldGhvZAorICAgOm1ldGg6YH5zdHIuZW5jb2RlYCBtZXRob2QuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTNkMzRiCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwuY29udGVudG1hbmFnZXIucnN0CkBAIC0wLDAgKzEsNDM0IEBACis6bW9kOmBlbWFpbC5jb250ZW50bWFuYWdlcmA6IE1hbmFnaW5nIE1JTUUgQ29udGVudAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gbW9kdWxlOjogZW1haWwuY29udGVudG1hbmFnZXIKKyAgIDpzeW5vcHNpczogU3RvcmluZyBhbmQgUmV0cmlldmluZyBDb250ZW50IGZyb20gTUlNRSBQYXJ0cworCisuLiBtb2R1bGVhdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KKy4uIHNlY3Rpb25hdXRob3I6OiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4KKworCisuLiBub3RlOjoKKworICAgVGhlIGNvbnRlbnRtYW5hZ2VyIG1vZHVsZSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBvbiBhCisgICA6dGVybTpgcHJvdmlzaW9uYWwgYmFzaXMgPHByb3Zpc2lvbmFsIHBhY2thZ2U+YC4gQmFja3dhcmRzIGluY29tcGF0aWJsZQorICAgY2hhbmdlcyAodXAgdG8gYW5kIGluY2x1ZGluZyByZW1vdmFsIG9mIHRoZSBtb2R1bGUpIG1heSBvY2N1ciBpZiBkZWVtZWQKKyAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgIGFzIGEgOnRlcm06YHByb3Zpc2lvbmFsIG1vZHVsZSA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLgorCitUaGUgOm1vZDpgfmVtYWlsLm1lc3NhZ2VgIG1vZHVsZSBwcm92aWRlcyBhIGNsYXNzIHRoYXQgY2FuIHJlcHJlc2VudCBhbgorYXJiaXRyYXJ5IGVtYWlsIG1lc3NhZ2UuICBUaGF0IGJhc2ljIG1lc3NhZ2UgbW9kZWwgaGFzIGEgdXNlZnVsIGFuZCBmbGV4aWJsZQorQVBJLCBidXQgaXQgcHJvdmlkZXMgb25seSBhIGxvd2VyLWxldmVsIEFQSSBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZ2VuZXJpYworcGFydHMgb2YgYSBtZXNzYWdlICh0aGUgaGVhZGVycywgZ2VuZXJpYyBoZWFkZXIgcGFyYW1ldGVycywgYW5kIHRoZSBwYXlsb2FkLAord2hpY2ggbWF5IGJlIGEgbGlzdCBvZiBzdWItcGFydHMpLiAgVGhpcyBtb2R1bGUgcHJvdmlkZXMgY2xhc3NlcyBhbmQgdG9vbHMKK3RoYXQgcHJvdmlkZSBhbiBlbmhhbmNlZCBhbmQgZXh0ZW5zaWJsZSBBUEkgZm9yIGRlYWxpbmcgd2l0aCB2YXJpb3VzIHNwZWNpZmljCit0eXBlcyBvZiBjb250ZW50LCBpbmNsdWRpbmcgdGhlIGFiaWxpdHkgdG8gcmV0cmlldmUgdGhlIGNvbnRlbnQgb2YgdGhlIG1lc3NhZ2UKK2FzIGEgc3BlY2lhbGl6ZWQgb2JqZWN0IHR5cGUgcmF0aGVyIHRoYW4gYXMgYSBzaW1wbGUgYnl0ZXMgb2JqZWN0LiAgVGhlIG1vZHVsZQorYXV0b21hdGljYWxseSB0YWtlcyBjYXJlIG9mIHRoZSBSRkMtc3BlY2lmaWVkIE1JTUUgZGV0YWlscyAocmVxdWlyZWQgaGVhZGVycworYW5kIHBhcmFtZXRlcnMsIGV0Yy4pIGZvciB0aGUgY2VydGFpbiBjb21tb24gY29udGVudCB0eXBlcyBjb250ZW50IHByb3BlcnRpZXMsCithbmQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbCB0eXBlcyBjYW4gYmUgYWRkZWQgYnkgYW4gYXBwbGljYXRpb24gdXNpbmcgdGhlCitleHRlbnNpb24gbWVjaGFuaXNtcy4KKworVGhpcyBtb2R1bGUgZGVmaW5lcyB0aGUgZXBvbnltb3VzICJDb250ZW50IE1hbmFnZXIiIGNsYXNzZXMuICBUaGUgYmFzZQorOmNsYXNzOmAuQ29udGVudE1hbmFnZXJgIGNsYXNzIGRlZmluZXMgYW4gQVBJIGZvciByZWdpc3RlcmluZyBjb250ZW50CittYW5hZ2VtZW50IGZ1bmN0aW9ucyB3aGljaCBleHRyYWN0IGRhdGEgZnJvbSBgYE1lc3NhZ2VgYCBvYmplY3RzIG9yIGluc2VydCBkYXRhCithbmQgaGVhZGVycyBpbnRvIGBgTWVzc2FnZWBgIG9iamVjdHMsIHRodXMgcHJvdmlkaW5nIGEgd2F5IG9mIGNvbnZlcnRpbmcKK2JldHdlZW4gYGBNZXNzYWdlYGAgb2JqZWN0cyBjb250YWluaW5nIGRhdGEgYW5kIG90aGVyIHJlcHJlc2VudGF0aW9ucyBvZiB0aGF0CitkYXRhIChQeXRob24gZGF0YSB0eXBlcywgc3BlY2lhbGl6ZWQgUHl0aG9uIG9iamVjdHMsIGV4dGVybmFsIGZpbGVzLCBldGMpLiAgVGhlCittb2R1bGUgYWxzbyBkZWZpbmVzIG9uZSBjb25jcmV0ZSBjb250ZW50IG1hbmFnZXI6IDpkYXRhOmByYXdfZGF0YV9tYW5hZ2VyYAorY29udmVydHMgYmV0d2VlbiBNSU1FIGNvbnRlbnQgdHlwZXMgYW5kIGBgc3RyYGAgb3IgYGBieXRlc2BgIGRhdGEuICBJdCBhbHNvCitwcm92aWRlcyBhIGNvbnZlbmllbnQgQVBJIGZvciBtYW5hZ2luZyB0aGUgTUlNRSBwYXJhbWV0ZXJzIHdoZW4gaW5zZXJ0aW5nCitjb250ZW50IGludG8gYGBNZXNzYWdlYGBcIHMuICBJdCBhbHNvIGhhbmRsZXMgaW5zZXJ0aW5nIGFuZCBleHRyYWN0aW5nCitgYE1lc3NhZ2VgYCBvYmplY3RzIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgYG1lc3NhZ2UvcmZjODIyYGAgY29udGVudCB0eXBlLgorCitBbm90aGVyIHBhcnQgb2YgdGhlIGVuaGFuY2VkIGludGVyZmFjZSBpcyBzdWJjbGFzc2VzIG9mCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHRoYXQgcHJvdmlkZSBuZXcgY29udmVuaWVuY2UgQVBJIGZ1bmN0aW9ucywKK2luY2x1ZGluZyBjb252ZW5pZW5jZSBtZXRob2RzIGZvciBjYWxsaW5nIHRoZSBDb250ZW50IE1hbmFnZXJzIGRlcml2ZWQgZnJvbQordGhpcyBtb2R1bGUuCisKKy4uIG5vdGU6OgorCisgICBBbHRob3VnaCA6Y2xhc3M6YC5FbWFpbE1lc3NhZ2VgIGFuZCA6Y2xhc3M6YC5NSU1FUGFydGAgYXJlIGN1cnJlbnRseQorICAgZG9jdW1lbnRlZCBpbiB0aGlzIG1vZHVsZSBiZWNhdXNlIG9mIHRoZSBwcm92aXNpb25hbCBuYXR1cmUgb2YgdGhlIGNvZGUsIHRoZQorICAgaW1wbGVtZW50YXRpb24gbGl2ZXMgaW4gdGhlIDptb2Q6YGVtYWlsLm1lc3NhZ2VgIG1vZHVsZS4KKworLi4gY3VycmVudG1vZHVsZTo6IGVtYWlsLm1lc3NhZ2UKKworLi4gY2xhc3M6OiBFbWFpbE1lc3NhZ2UocG9saWN5PWRlZmF1bHQpCisKKyAgIElmICpwb2xpY3kqIGlzIHNwZWNpZmllZCAoaXQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgCisgICBjbGFzcykgdXNlIHRoZSBydWxlcyBpdCBzcGVjaWZpZXMgdG8gdWRwYXRlIGFuZCBzZXJpYWxpemUgdGhlIHJlcHJlc2VudGF0aW9uCisgICBvZiB0aGUgbWVzc2FnZS4gIElmICpwb2xpY3kqIGlzIG5vdCBzZXQsIHVzZSB0aGUKKyAgIDpjbGFzczpgfmVtYWlsLnBvbGljeS5kZWZhdWx0YCBwb2xpY3ksIHdoaWNoIGZvbGxvd3MgdGhlIHJ1bGVzIG9mIHRoZSBlbWFpbAorICAgUkZDcyBleGNlcHQgZm9yIGxpbmUgZW5kaW5ncyAoaW5zdGVhZCBvZiB0aGUgUkZDIG1hbmRhdGVkIGBgXHJcbmBgLCBpdCB1c2VzCisgICB0aGUgUHl0aG9uIHN0YW5kYXJkIGBgXG5gYCBsaW5lIGVuZGluZ3MpLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgOm1vZDpgfmVtYWlsLnBvbGljeWAgZG9jdW1lbnRhdGlvbi4KKworICAgVGhpcyBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAuICBJdCBhZGRzCisgICB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CisKKworICAgLi4gbWV0aG9kOjogaXNfYXR0YWNobWVudAorCisgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlcmUgaXMgYSA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyCisgICAgICBhbmQgaXRzIChjYXNlIGluc2Vuc2l0aXZlKSB2YWx1ZSBpcyBgYGF0dGFjaG1lbnRgYCwgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuMgorICAgICAgICAgaXNfYXR0YWNobWVudCBpcyBub3cgYSBtZXRob2QgaW5zdGVhZCBvZiBhIHByb3BlcnR5LCBmb3IgY29uc2lzdGVuY3kKKyAgICAgICAgIHdpdGggOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuaXNfbXVsdGlwYXJ0YC4KKworCisgICAuLiBtZXRob2Q6OiBnZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpKQorCisgICAgICBSZXR1cm4gdGhlIE1JTUUgcGFydCB0aGF0IGlzIHRoZSBiZXN0IGNhbmRpZGF0ZSB0byBiZSB0aGUgImJvZHkiIG9mIHRoZQorICAgICAgbWVzc2FnZS4KKworICAgICAgKnByZWZlcmVuY2VsaXN0KiBtdXN0IGJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBmcm9tIHRoZSBzZXQgYGByZWxhdGVkYGAsCisgICAgICBgYGh0bWxgYCwgYW5kIGBgcGxhaW5gYCwgYW5kIGluZGljYXRlcyB0aGUgb3JkZXIgb2YgcHJlZmVyZW5jZSBmb3IgdGhlCisgICAgICBjb250ZW50IHR5cGUgb2YgdGhlIHBhcnQgcmV0dXJuZWQuCisKKyAgICAgIFN0YXJ0IGxvb2tpbmcgZm9yIGNhbmRpZGF0ZSBtYXRjaGVzIHdpdGggdGhlIG9iamVjdCBvbiB3aGljaCB0aGUKKyAgICAgIGBgZ2V0X2JvZHlgYCBtZXRob2QgaXMgY2FsbGVkLgorCisgICAgICBJZiBgYHJlbGF0ZWRgYCBpcyBub3QgaW5jbHVkZWQgaW4gKnByZWZlcmVuY2VsaXN0KiwgY29uc2lkZXIgdGhlIHJvb3QKKyAgICAgIHBhcnQgKG9yIHN1YnBhcnQgb2YgdGhlIHJvb3QgcGFydCkgb2YgYW55IHJlbGF0ZWQgZW5jb3VudGVyZWQgYXMgYQorICAgICAgY2FuZGlkYXRlIGlmIHRoZSAoc3ViLSlwYXJ0IG1hdGNoZXMgYSBwcmVmZXJlbmNlLgorCisgICAgICBXaGVuIGVuY291bnRlcmluZyBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgY2hlY2sgdGhlIGBgc3RhcnRgYCBwYXJhbWV0ZXIKKyAgICAgIGFuZCBpZiBhIHBhcnQgd2l0aCBhIG1hdGNoaW5nIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBpcyBmb3VuZCwgY29uc2lkZXIKKyAgICAgIG9ubHkgaXQgd2hlbiBsb29raW5nIGZvciBjYW5kaWRhdGUgbWF0Y2hlcy4gIE90aGVyd2lzZSBjb25zaWRlciBvbmx5IHRoZQorICAgICAgZmlyc3QgKGRlZmF1bHQgcm9vdCkgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLgorCisgICAgICBJZiBhIHBhcnQgaGFzIGEgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb25gIGhlYWRlciwgb25seSBjb25zaWRlcgorICAgICAgdGhlIHBhcnQgYSBjYW5kaWRhdGUgbWF0Y2ggaWYgdGhlIHZhbHVlIG9mIHRoZSBoZWFkZXIgaXMgYGBpbmxpbmVgYC4KKworICAgICAgSWYgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBtYXRjaGVzIGFueSBvZiB0aGUgcHJlZmVyZW5jZXMgaW4KKyAgICAgICpwcmVmZXJuZWNsaXN0KiwgcmV0dXJuIGBgTm9uZWBgLgorCisgICAgICBOb3RlczogKDEpIEZvciBtb3N0IGFwcGxpY2F0aW9ucyB0aGUgb25seSAqcHJlZmVyZW5jZWxpc3QqIGNvbWJpbmF0aW9ucworICAgICAgdGhhdCByZWFsbHkgbWFrZSBzZW5zZSBhcmUgYGAoJ3BsYWluJywpYGAsIGBgKCdodG1sJywgJ3BsYWluJylgYCwgYW5kIHRoZQorICAgICAgZGVmYXVsdCwgYGAoJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpYGAuICAoMikgQmVjYXVzZSBtYXRjaGluZyBzdGFydHMKKyAgICAgIHdpdGggdGhlIG9iamVjdCBvbiB3aGljaCBgYGdldF9ib2R5YGAgaXMgY2FsbGVkLCBjYWxsaW5nIGBgZ2V0X2JvZHlgYCBvbgorICAgICAgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgd2lsbCByZXR1cm4gdGhlIG9iamVjdCBpdHNlbGYgdW5sZXNzCisgICAgICAqcHJlZmVyZW5jZWxpc3QqIGhhcyBhIG5vbi1kZWZhdWx0IHZhbHVlLiAoMykgTWVzc2FnZXMgKG9yIG1lc3NhZ2UgcGFydHMpCisgICAgICB0aGF0IGRvIG5vdCBzcGVjaWZ5IGEgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgb3Igd2hvc2UKKyAgICAgIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlciBpcyBpbnZhbGlkIHdpbGwgYmUgdHJlYXRlZCBhcyBpZiB0aGV5CisgICAgICBhcmUgb2YgdHlwZSBgYHRleHQvcGxhaW5gYCwgd2hpY2ggbWF5IG9jY2FzaW9uYWxseSBjYXVzZSBgYGdldF9ib2R5YGAgdG8KKyAgICAgIHJldHVybiB1bmV4cGVjdGVkIHJlc3VsdHMuCisKKworICAgLi4gbWV0aG9kOjogaXRlcl9hdHRhY2htZW50cygpCisKKyAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBvZiB0aGUgcGFydHMgb2YgdGhlIG1lc3NhZ2UgdGhhdCBhcmUgbm90CisgICAgICBjYW5kaWRhdGUgImJvZHkiIHBhcnRzLiAgVGhhdCBpcywgc2tpcCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBlYWNoIG9mCisgICAgICBgYHRleHQvcGxhaW5gYCwgYGB0ZXh0L2h0bWxgYCwgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvcgorICAgICAgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCAodW5sZXNzIHRoZXkgYXJlIGV4cGxpY2l0bHkgbWFya2VkIGFzCisgICAgICBhdHRhY2htZW50cyB2aWEgOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnRgKSwgYW5kCisgICAgICByZXR1cm4gYWxsIHJlbWFpbmluZyBwYXJ0cy4gIFdoZW4gYXBwbGllZCBkaXJlY3RseSB0byBhCisgICAgICBgYG11bHRpcGFydC9yZWxhdGVkYGAsIHJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBhbGwgdGhlIHJlbGF0ZWQgcGFydHMKKyAgICAgIGV4Y2VwdCB0aGUgcm9vdCBwYXJ0IChpZTogdGhlIHBhcnQgcG9pbnRlZCB0byBieSB0aGUgYGBzdGFydGBgIHBhcmFtZXRlciwKKyAgICAgIG9yIHRoZSBmaXJzdCBwYXJ0IGlmIHRoZXJlIGlzIG5vIGBgc3RhcnRgYCBwYXJhbWV0ZXIgb3IgdGhlIGBgc3RhcnRgYAorICAgICAgcGFyYW1ldGVyIGRvZXNuJ3QgbWF0Y2ggdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBvZiBhbnkgb2YgdGhlCisgICAgICBwYXJ0cykuICBXaGVuIGFwcGxpZWQgZGlyZWN0bHkgdG8gYSBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgIG9yIGEKKyAgICAgIG5vbi1gYG11bHRpcGFydGBgLCByZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IuCisKKworICAgLi4gbWV0aG9kOjogaXRlcl9wYXJ0cygpCisKKyAgICAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBvZiB0aGUgaW1tZWRpYXRlIHN1Yi1wYXJ0cyBvZiB0aGUgbWVzc2FnZSwKKyAgICAgIHdoaWNoIHdpbGwgYmUgZW1wdHkgZm9yIGEgbm9uLWBgbXVsdGlwYXJ0YGAuICAoU2VlIGFsc28KKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS53YWxrYC4pCisKKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBDYWxsIHRoZSBgYGdldF9jb250ZW50YGAgbWV0aG9kIG9mIHRoZSAqY29udGVudF9tYW5hZ2VyKiwgcGFzc2luZyBzZWxmCisgICAgICBhcyB0aGUgbWVzc2FnZSBvYmplY3QsIGFuZCBwYXNzaW5nIGFsb25nIGFueSBvdGhlciBhcmd1bWVudHMgb3Iga2V5d29yZHMKKyAgICAgIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlCisgICAgICB0aGUgYGBjb250ZW50X21hbmFnZXJgYCBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisKKworICAgLi4gbWV0aG9kOjogc2V0X2NvbnRlbnQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBDYWxsIHRoZSBgYHNldF9jb250ZW50YGAgbWV0aG9kIG9mIHRoZSAqY29udGVudF9tYW5hZ2VyKiwgcGFzc2luZyBzZWxmCisgICAgICBhcyB0aGUgbWVzc2FnZSBvYmplY3QsIGFuZCBwYXNzaW5nIGFsb25nIGFueSBvdGhlciBhcmd1bWVudHMgb3Iga2V5d29yZHMKKyAgICAgIGFzIGFkZGl0aW9uYWwgYXJndW1lbnRzLiAgSWYgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlCisgICAgICB0aGUgYGBjb250ZW50X21hbmFnZXJgYCBzcGVjaWZpZWQgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9yZWxhdGVkKGJvdW5kYXJ5PU5vbmUpCisKKyAgICAgIENvbnZlcnQgYSBub24tYGBtdWx0aXBhcnRgYCBtZXNzYWdlIGludG8gYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgbWVzc2FnZSwKKyAgICAgIG1vdmluZyBhbnkgZXhpc3RpbmcgOm1haWxoZWFkZXI6YENvbnRlbnQtYCBoZWFkZXJzIGFuZCBwYXlsb2FkIGludG8gYQorICAgICAgKG5ldykgZmlyc3QgcGFydCBvZiB0aGUgYGBtdWx0aXBhcnRgYC4gIElmICpib3VuZGFyeSogaXMgc3BlY2lmaWVkLCB1c2UKKyAgICAgIGl0IGFzIHRoZSBib3VuZGFyeSBzdHJpbmcgaW4gdGhlIG11bHRpcGFydCwgb3RoZXJ3aXNlIGxlYXZlIHRoZSBib3VuZGFyeQorICAgICAgdG8gYmUgYXV0b21hdGljYWxseSBjcmVhdGVkIHdoZW4gaXQgaXMgbmVlZGVkIChmb3IgZXhhbXBsZSwgd2hlbiB0aGUKKyAgICAgIG1lc3NhZ2UgaXMgc2VyaWFsaXplZCkuCisKKworICAgLi4gbWV0aG9kOjogbWFrZV9hbHRlcm5hdGl2ZShib3VuZGFyeT1Ob25lKQorCisgICAgICBDb252ZXJ0IGEgbm9uLWBgbXVsdGlwYXJ0YGAgb3IgYSBgYG11bHRpcGFydC9yZWxhdGVkYGAgaW50byBhCisgICAgICBgYG11bHRpcGFydC9hbHRlcm5hdGl2ZWBgLCBtb3ZpbmcgYW55IGV4aXN0aW5nIDptYWlsaGVhZGVyOmBDb250ZW50LWAKKyAgICAgIGhlYWRlcnMgYW5kIHBheWxvYWQgaW50byBhIChuZXcpIGZpcnN0IHBhcnQgb2YgdGhlIGBgbXVsdGlwYXJ0YGAuICBJZgorICAgICAgKmJvdW5kYXJ5KiBpcyBzcGVjaWZpZWQsIHVzZSBpdCBhcyB0aGUgYm91bmRhcnkgc3RyaW5nIGluIHRoZSBtdWx0aXBhcnQsCisgICAgICBvdGhlcndpc2UgbGVhdmUgdGhlIGJvdW5kYXJ5IHRvIGJlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aGVuIGl0IGlzCisgICAgICBuZWVkZWQgKGZvciBleGFtcGxlLCB3aGVuIHRoZSBtZXNzYWdlIGlzIHNlcmlhbGl6ZWQpLgorCisKKyAgIC4uIG1ldGhvZDo6IG1ha2VfbWl4ZWQoYm91bmRhcnk9Tm9uZSkKKworICAgICAgQ29udmVydCBhIG5vbi1gYG11bHRpcGFydGBgLCBhIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgb3IgYQorICAgICAgYGBtdWx0aXBhcnQtYWx0ZXJuYXRpdmVgYCBpbnRvIGEgYGBtdWx0aXBhcnQvbWl4ZWRgYCwgbW92aW5nIGFueSBleGlzdGluZworICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtYCBoZWFkZXJzIGFuZCBwYXlsb2FkIGludG8gYSAobmV3KSBmaXJzdCBwYXJ0IG9mIHRoZQorICAgICAgYGBtdWx0aXBhcnRgYC4gIElmICpib3VuZGFyeSogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIGJvdW5kYXJ5IHN0cmluZworICAgICAgaW4gdGhlIG11bHRpcGFydCwgb3RoZXJ3aXNlIGxlYXZlIHRoZSBib3VuZGFyeSB0byBiZSBhdXRvbWF0aWNhbGx5CisgICAgICBjcmVhdGVkIHdoZW4gaXQgaXMgbmVlZGVkIChmb3IgZXhhbXBsZSwgd2hlbiB0aGUgbWVzc2FnZSBpcyBzZXJpYWxpemVkKS4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfcmVsYXRlZCgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBjcmVhdGUgYSBuZXcgbWVzc2FnZQorICAgICAgb2JqZWN0LCBwYXNzIGFsbCBvZiB0aGUgYXJndW1lbnRzIHRvIGl0cyA6bWV0aDpgc2V0X2NvbnRlbnRgIG1ldGhvZCwKKyAgICAgIGFuZCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hdHRhY2hgIGl0IHRvIHRoZSBgYG11bHRpcGFydGBgLiAgSWYKKyAgICAgIHRoZSBtZXNzYWdlIGlzIGEgbm9uLWBgbXVsdGlwYXJ0YGAsIGNhbGwgOm1ldGg6YG1ha2VfcmVsYXRlZGAgYW5kIHRoZW4KKyAgICAgIHByb2NlZWQgYXMgYWJvdmUuICBJZiB0aGUgbWVzc2FnZSBpcyBhbnkgb3RoZXIgdHlwZSBvZiBgYG11bHRpcGFydGBgLAorICAgICAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgLiBJZiAqY29udGVudF9tYW5hZ2VyKiBpcyBub3Qgc3BlY2lmaWVkLCB1c2UKKyAgICAgIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZCBieSB0aGUgY3VycmVudCA6bW9kOmB+ZW1haWwucG9saWN5YC4KKyAgICAgIElmIHRoZSBhZGRlZCBwYXJ0IGhhcyBubyA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLAorICAgICAgYWRkIG9uZSB3aXRoIHRoZSB2YWx1ZSBgYGlubGluZWBgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9hbHRlcm5hdGl2ZSgqYXJncywgY29udGVudF9tYW5hZ2VyPU5vbmUsICoqa3cpCisKKyAgICAgIElmIHRoZSBtZXNzYWdlIGlzIGEgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCwgY3JlYXRlIGEgbmV3IG1lc3NhZ2UKKyAgICAgIG9iamVjdCwgcGFzcyBhbGwgb2YgdGhlIGFyZ3VtZW50cyB0byBpdHMgOm1ldGg6YHNldF9jb250ZW50YCBtZXRob2QsIGFuZAorICAgICAgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXR0YWNoYCBpdCB0byB0aGUgYGBtdWx0aXBhcnRgYC4gIElmIHRoZQorICAgICAgbWVzc2FnZSBpcyBhIG5vbi1gYG11bHRpcGFydGBgIG9yIGBgbXVsdGlwYXJ0L3JlbGF0ZWRgYCwgY2FsbAorICAgICAgOm1ldGg6YG1ha2VfYWx0ZXJuYXRpdmVgIGFuZCB0aGVuIHByb2NlZWQgYXMgYWJvdmUuICBJZiB0aGUgbWVzc2FnZSBpcworICAgICAgYW55IG90aGVyIHR5cGUgb2YgYGBtdWx0aXBhcnRgYCwgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgLiBJZgorICAgICAgKmNvbnRlbnRfbWFuYWdlciogaXMgbm90IHNwZWNpZmllZCwgdXNlIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgIHNwZWNpZmllZAorICAgICAgYnkgdGhlIGN1cnJlbnQgOm1vZDpgfmVtYWlsLnBvbGljeWAuCisKKworICAgLi4gbWV0aG9kOjogYWRkX2F0dGFjaG1lbnQoKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KQorCisgICAgICBJZiB0aGUgbWVzc2FnZSBpcyBhIGBgbXVsdGlwYXJ0L21peGVkYGAsIGNyZWF0ZSBhIG5ldyBtZXNzYWdlIG9iamVjdCwKKyAgICAgIHBhc3MgYWxsIG9mIHRoZSBhcmd1bWVudHMgdG8gaXRzIDptZXRoOmBzZXRfY29udGVudGAgbWV0aG9kLCBhbmQKKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaGAgaXQgdG8gdGhlIGBgbXVsdGlwYXJ0YGAuICBJZiB0aGUKKyAgICAgIG1lc3NhZ2UgaXMgYSBub24tYGBtdWx0aXBhcnRgYCwgYGBtdWx0aXBhcnQvcmVsYXRlZGBgLCBvcgorICAgICAgYGBtdWx0aXBhcnQvYWx0ZXJuYXRpdmVgYCwgY2FsbCA6bWV0aDpgbWFrZV9taXhlZGAgYW5kIHRoZW4gcHJvY2VlZCBhcworICAgICAgYWJvdmUuIElmICpjb250ZW50X21hbmFnZXIqIGlzIG5vdCBzcGVjaWZpZWQsIHVzZSB0aGUgYGBjb250ZW50X21hbmFnZXJgYAorICAgICAgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IDptb2Q6YH5lbWFpbC5wb2xpY3lgLiAgSWYgdGhlIGFkZGVkIHBhcnQKKyAgICAgIGhhcyBubyA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLCBhZGQgb25lIHdpdGggdGhlIHZhbHVlCisgICAgICBgYGF0dGFjaG1lbnRgYC4gIFRoaXMgbWV0aG9kIGNhbiBiZSB1c2VkIGJvdGggZm9yIGV4cGxpY2l0IGF0dGFjaG1lbnRzCisgICAgICAoOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnRgIGFuZCBgYGlubGluZWBgIGF0dGFjaG1lbnRzCisgICAgICAoOm1haWxoZWFkZXI6YENvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZWApLCBieSBwYXNzaW5nIGFwcHJvcHJpYXRlCisgICAgICBvcHRpb25zIHRvIHRoZSBgYGNvbnRlbnRfbWFuYWdlcmBgLgorCisKKyAgIC4uIG1ldGhvZDo6IGNsZWFyKCkKKworICAgICAgUmVtb3ZlIHRoZSBwYXlsb2FkIGFuZCBhbGwgb2YgdGhlIGhlYWRlcnMuCisKKworICAgLi4gbWV0aG9kOjogY2xlYXJfY29udGVudCgpCisKKyAgICAgIFJlbW92ZSB0aGUgcGF5bG9hZCBhbmQgYWxsIG9mIHRoZSA6ZXhjOmBDb250ZW50LWAgaGVhZGVycywgbGVhdmluZworICAgICAgYWxsIG90aGVyIGhlYWRlcnMgaW50YWN0IGFuZCBpbiB0aGVpciBvcmlnaW5hbCBvcmRlci4KKworCisuLiBjbGFzczo6IE1JTUVQYXJ0KHBvbGljeT1kZWZhdWx0KQorCisgICAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGEgc3VicGFydCBvZiBhIE1JTUUgbWVzc2FnZS4gIEl0IGlzIGlkZW50aWNhbCB0bworICAgIDpjbGFzczpgRW1haWxNZXNzYWdlYCwgZXhjZXB0IHRoYXQgbm8gOm1haWxoZWFkZXI6YE1JTUUtVmVyc2lvbmAgaGVhZGVycyBhcmUKKyAgICBhZGRlZCB3aGVuIDptZXRoOmB+RW1haWxNZXNzYWdlLnNldF9jb250ZW50YCBpcyBjYWxsZWQsIHNpbmNlIHN1Yi1wYXJ0cyBkbworICAgIG5vdCBuZWVkIHRoZWlyIG93biA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzLgorCisKKy4uIGN1cnJlbnRtb2R1bGU6OiBlbWFpbC5jb250ZW50bWFuYWdlcgorCisuLiBjbGFzczo6IENvbnRlbnRNYW5hZ2VyKCkKKworICAgQmFzZSBjbGFzcyBmb3IgY29udGVudCBtYW5hZ2Vycy4gIFByb3ZpZGVzIHRoZSBzdGFuZGFyZCByZWdpc3RyeSBtZWNoYW5pc21zCisgICB0byByZWdpc3RlciBjb252ZXJ0ZXJzIGJldHdlZW4gTUlNRSBjb250ZW50IGFuZCBvdGhlciByZXByZXNlbnRhdGlvbnMsIGFzCisgICB3ZWxsIGFzIHRoZSBgYGdldF9jb250ZW50YGAgYW5kIGBgc2V0X2NvbnRlbnRgYCBkaXNwYXRjaCBtZXRob2RzLgorCisKKyAgIC4uIG1ldGhvZDo6IGdldF9jb250ZW50KG1zZywgKmFyZ3MsICoqa3cpCisKKyAgICAgIExvb2sgdXAgYSBoYW5kbGVyIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSBgYG1pbWV0eXBlYGAgb2YgKm1zZyogKHNlZSBuZXh0CisgICAgICBwYXJhZ3JhcGgpLCBjYWxsIGl0LCBwYXNzaW5nIHRocm91Z2ggYWxsIGFyZ3VtZW50cywgYW5kIHJldHVybiB0aGUgcmVzdWx0CisgICAgICBvZiB0aGUgY2FsbC4gIFRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZSBoYW5kbGVyIHdpbGwgZXh0cmFjdCB0aGUKKyAgICAgIHBheWxvYWQgZnJvbSAqbXNnKiBhbmQgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGVuY29kZXMgaW5mb3JtYXRpb24gYWJvdXQKKyAgICAgIHRoZSBleHRyYWN0ZWQgZGF0YS4KKworICAgICAgVG8gZmluZCB0aGUgaGFuZGxlciwgbG9vayBmb3IgdGhlIGZvbGxvd2luZyBrZXlzIGluIHRoZSByZWdpc3RyeSwKKyAgICAgIHN0b3BwaW5nIHdpdGggdGhlIGZpcnN0IG9uZSBmb3VuZDoKKworICAgICAgICAgICAgKiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZnVsbCBNSU1FIHR5cGUgKGBgbWFpbnR5cGUvc3VidHlwZWBgKQorICAgICAgICAgICAgKiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYGBtYWludHlwZWBgCisgICAgICAgICAgICAqIHRoZSBlbXB0eSBzdHJpbmcKKworICAgICAgSWYgbm9uZSBvZiB0aGVzZSBrZXlzIHByb2R1Y2UgYSBoYW5kbGVyLCByYWlzZSBhIDpleGM6YEtleUVycm9yYCBmb3IgdGhlCisgICAgICBmdWxsIE1JTUUgdHlwZS4KKworCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudChtc2csIG9iaiwgKmFyZ3MsICoqa3cpCisKKyAgICAgIElmIHRoZSBgYG1haW50eXBlYGAgaXMgYGBtdWx0aXBhcnRgYCwgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgOyBvdGhlcndpc2UKKyAgICAgIGxvb2sgdXAgYSBoYW5kbGVyIGZ1bmN0aW9uIGJhc2VkIG9uIHRoZSB0eXBlIG9mICpvYmoqIChzZWUgbmV4dAorICAgICAgcGFyYWdyYXBoKSwgY2FsbCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmNsZWFyX2NvbnRlbnRgIG9uIHRoZQorICAgICAgKm1zZyosIGFuZCBjYWxsIHRoZSBoYW5kbGVyIGZ1bmN0aW9uLCBwYXNzaW5nIHRocm91Z2ggYWxsIGFyZ3VtZW50cy4gIFRoZQorICAgICAgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUgaGFuZGxlciB3aWxsIHRyYW5zZm9ybSBhbmQgc3RvcmUgKm9iaiogaW50bworICAgICAgKm1zZyosIHBvc3NpYmx5IG1ha2luZyBvdGhlciBjaGFuZ2VzIHRvICptc2cqIGFzIHdlbGwsIHN1Y2ggYXMgYWRkaW5nCisgICAgICB2YXJpb3VzIE1JTUUgaGVhZGVycyB0byBlbmNvZGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIGludGVycHJldCB0aGUgc3RvcmVkCisgICAgICBkYXRhLgorCisgICAgICBUbyBmaW5kIHRoZSBoYW5kbGVyLCBvYnRhaW4gdGhlIHR5cGUgb2YgKm9iaiogKGBgdHlwID0gdHlwZShvYmopYGApLCBhbmQKKyAgICAgIGxvb2sgZm9yIHRoZSBmb2xsb3dpbmcga2V5cyBpbiB0aGUgcmVnaXN0cnksIHN0b3BwaW5nIHdpdGggdGhlIGZpcnN0IG9uZQorICAgICAgZm91bmQ6CisKKyAgICAgICAgICAgKiB0aGUgdHlwZSBpdHNlbGYgKGBgdHlwYGApCisgICAgICAgICAgICogdGhlIHR5cGUncyBmdWxseSBxdWFsaWZpZWQgbmFtZSAoYGB0eXAuX19tb2R1bGVfXyArICcuJyArCisgICAgICAgICAgICAgdHlwLl9fcXVhbG5hbWVfX2BgKS4KKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIHF1YWxuYW1lIChgYHR5cC5fX3F1YWxuYW1lX19gYCkKKyAgICAgICAgICAgKiB0aGUgdHlwZSdzIG5hbWUgKGBgdHlwLl9fbmFtZV9fYGApLgorCisgICAgICBJZiBub25lIG9mIHRoZSBhYm92ZSBtYXRjaCwgcmVwZWF0IGFsbCBvZiB0aGUgY2hlY2tzIGFib3ZlIGZvciBlYWNoIG9mCisgICAgICB0aGUgdHlwZXMgaW4gdGhlIDp0ZXJtOmBNUk9gIChgYHR5cC5fX21yb19fYGApLiAgRmluYWxseSwgaWYgbm8gb3RoZXIga2V5CisgICAgICB5aWVsZHMgYSBoYW5kbGVyLCBjaGVjayBmb3IgYSBoYW5kbGVyIGZvciB0aGUga2V5IGBgTm9uZWBgLiAgSWYgdGhlcmUgaXMKKyAgICAgIG5vIGhhbmRsZXIgZm9yIGBgTm9uZWBgLCByYWlzZSBhIDpleGM6YEtleUVycm9yYCBmb3IgdGhlIGZ1bGx5CisgICAgICBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdHlwZS4KKworICAgICAgQWxzbyBhZGQgYSA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXIgaWYgb25lIGlzIG5vdCBwcmVzZW50IChzZWUKKyAgICAgIGFsc28gOmNsYXNzOmAuTUlNRVBhcnRgKS4KKworCisgICAuLiBtZXRob2Q6OiBhZGRfZ2V0X2hhbmRsZXIoa2V5LCBoYW5kbGVyKQorCisgICAgICBSZWNvcmQgdGhlIGZ1bmN0aW9uICpoYW5kbGVyKiBhcyB0aGUgaGFuZGxlciBmb3IgKmtleSouICBGb3IgdGhlIHBvc3NpYmxlCisgICAgICB2YWx1ZXMgb2YgKmtleSosIHNlZSA6bWV0aDpgZ2V0X2NvbnRlbnRgLgorCisKKyAgIC4uIG1ldGhvZDo6IGFkZF9zZXRfaGFuZGxlcih0eXBla2V5LCBoYW5kbGVyKQorCisgICAgICBSZWNvcmQgKmhhbmRsZXIqIGFzIHRoZSBmdW5jdGlvbiB0byBjYWxsIHdoZW4gYW4gb2JqZWN0IG9mIGEgdHlwZQorICAgICAgbWF0Y2hpbmcgKnR5cGVrZXkqIGlzIHBhc3NlZCB0byA6bWV0aDpgc2V0X2NvbnRlbnRgLiAgRm9yIHRoZSBwb3NzaWJsZQorICAgICAgdmFsdWVzIG9mICp0eXBla2V5Kiwgc2VlIDptZXRoOmBzZXRfY29udGVudGAuCisKKworQ29udGVudCBNYW5hZ2VyIEluc3RhbmNlcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCitDdXJyZW50bHkgdGhlIGVtYWlsIHBhY2thZ2UgcHJvdmlkZXMgb25seSBvbmUgY29uY3JldGUgY29udGVudCBtYW5hZ2VyLAorOmRhdGE6YHJhd19kYXRhX21hbmFnZXJgLCBhbHRob3VnaCBtb3JlIG1heSBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLgorOmRhdGE6YHJhd19kYXRhX21hbmFnZXJgIGlzIHRoZQorOmF0dHI6YH5lbWFpbC5wb2xpY3kuRW1haWxQb2xpY3kuY29udGVudF9tYW5hZ2VyYCBwcm92aWRlZCBieQorOmF0dHI6YH5lbWFpbC5wb2xpY3kuRW1haWxQb2xpY3lgIGFuZCBpdHMgZGVyaXZhdGl2ZXMuCisKKworLi4gZGF0YTo6IHJhd19kYXRhX21hbmFnZXIKKworICAgVGhpcyBjb250ZW50IG1hbmFnZXIgcHJvdmlkZXMgb25seSBhIG1pbmltdW0gaW50ZXJmYWNlIGJleW9uZCB0aGF0IHByb3ZpZGVkCisgICBieSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGl0c2VsZjogIGl0IGRlYWxzIG9ubHkgd2l0aCB0ZXh0LCByYXcKKyAgIGJ5dGUgc3RyaW5ncywgYW5kIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cy4gIE5ldmVydGhlbGVzcywgaXQKKyAgIHByb3ZpZGVzIHNpZ25pZmljYW50IGFkdmFudGFnZXMgY29tcGFyZWQgdG8gdGhlIGJhc2UgQVBJOiBgYGdldF9jb250ZW50YGAgb24KKyAgIGEgdGV4dCBwYXJ0IHdpbGwgcmV0dXJuIGEgdW5pY29kZSBzdHJpbmcgd2l0aG91dCB0aGUgYXBwbGljYXRpb24gbmVlZGluZyB0bworICAgbWFudWFsbHkgZGVjb2RlIGl0LCBgYHNldF9jb250ZW50YGAgcHJvdmlkZXMgYSByaWNoIHNldCBvZiBvcHRpb25zIGZvcgorICAgY29udHJvbGxpbmcgdGhlIGhlYWRlcnMgYWRkZWQgdG8gYSBwYXJ0IGFuZCBjb250cm9sbGluZyB0aGUgY29udGVudCB0cmFuc2ZlcgorICAgZW5jb2RpbmcsIGFuZCBpdCBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIHZhcmlvdXMgYGBhZGRfYGAgbWV0aG9kcywgdGhlcmVieQorICAgc2ltcGxpZnlpbmcgdGhlIGNyZWF0aW9uIG9mIG11bHRpcGFydCBtZXNzYWdlcy4KKworICAgLi4gbWV0aG9kOjogZ2V0X2NvbnRlbnQobXNnLCBlcnJvcnM9J3JlcGxhY2UnKQorCisgICAgICBSZXR1cm4gdGhlIHBheWxvYWQgb2YgdGhlIHBhcnQgYXMgZWl0aGVyIGEgc3RyaW5nIChmb3IgYGB0ZXh0YGAgcGFydHMpLCBhCisgICAgICA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLkVtYWlsTWVzc2FnZWAgb2JqZWN0IChmb3IgYGBtZXNzYWdlL3JmYzgyMmBgCisgICAgICBwYXJ0cyksIG9yIGEgYGBieXRlc2BgIG9iamVjdCAoZm9yIGFsbCBvdGhlciBub24tbXVsdGlwYXJ0IHR5cGVzKS4gIFJhaXNlCisgICAgICBhIDpleGM6YEtleUVycm9yYCBpZiBjYWxsZWQgb24gYSBgYG11bHRpcGFydGBgLiAgSWYgdGhlIHBhcnQgaXMgYQorICAgICAgYGB0ZXh0YGAgcGFydCBhbmQgKmVycm9ycyogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIGVycm9yIGhhbmRsZXIgd2hlbgorICAgICAgZGVjb2RpbmcgdGhlIHBheWxvYWQgdG8gdW5pY29kZS4gIFRoZSBkZWZhdWx0IGVycm9yIGhhbmRsZXIgaXMKKyAgICAgIGBgcmVwbGFjZWBgLgorCisgICAuLiBtZXRob2Q6OiBzZXRfY29udGVudChtc2csIDwnc3RyJz4sIHN1YnR5cGU9InBsYWluIiwgY2hhcnNldD0ndXRmLTgnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0ZT1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKyAgICAgICAgICAgICAgIHNldF9jb250ZW50KG1zZywgPCdieXRlcyc+LCBtYWludHlwZSwgc3VidHlwZSwgY3RlPSJiYXNlNjQiLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKyAgICAgICAgICAgICAgIHNldF9jb250ZW50KG1zZywgPCdNZXNzYWdlJz4sIGN0ZT1Ob25lLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSkKKyAgICAgICAgICAgICAgIHNldF9jb250ZW50KG1zZywgPCdsaXN0Jz4sIHN1YnR5cGU9J21peGVkJywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcG9zaXRpb249Tm9uZSwgZmlsZW5hbWU9Tm9uZSwgY2lkPU5vbmUsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpCisKKyAgICAgICBBZGQgaGVhZGVycyBhbmQgcGF5bG9hZCB0byAqbXNnKjoKKworICAgICAgIEFkZCBhIDptYWlsaGVhZGVyOmBDb250ZW50LVR5cGVgIGhlYWRlciB3aXRoIGEgYGBtYWludHlwZS9zdWJ0eXBlYGAKKyAgICAgICB2YWx1ZS4KKworICAgICAgICAgICAqIEZvciBgYHN0cmBgLCBzZXQgdGhlIE1JTUUgYGBtYWludHlwZWBgIHRvIGBgdGV4dGBgLCBhbmQgc2V0IHRoZQorICAgICAgICAgICAgIHN1YnR5cGUgdG8gKnN1YnR5cGUqIGlmIGl0IGlzIHNwZWNpZmllZCwgb3IgYGBwbGFpbmBgIGlmIGl0IGlzIG5vdC4KKyAgICAgICAgICAgKiBGb3IgYGBieXRlc2BgLCB1c2UgdGhlIHNwZWNpZmllZCAqbWFpbnR5cGUqIGFuZCAqc3VidHlwZSosIG9yCisgICAgICAgICAgICAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGlmIHRoZXkgYXJlIG5vdCBzcGVjaWZpZWQuCisgICAgICAgICAgICogRm9yIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgb2JqZWN0cywgc2V0IHRoZSBtYWludHlwZSB0bworICAgICAgICAgICAgIGBgbWVzc2FnZWBgLCBhbmQgc2V0IHRoZSBzdWJ0eXBlIHRvICpzdWJ0eXBlKiBpZiBpdCBpcyBzcGVjaWZpZWQKKyAgICAgICAgICAgICBvciBgYHJmYzgyMmBgIGlmIGl0IGlzIG5vdC4gIElmICpzdWJ0eXBlKiBpcyBgYHBhcnRpYWxgYCwgcmFpc2UgYW4KKyAgICAgICAgICAgICBlcnJvciAoYGBieXRlc2BgIG9iamVjdHMgbXVzdCBiZSB1c2VkIHRvIGNvbnN0cnVjdAorICAgICAgICAgICAgIGBgbWVzc2FnZS9wYXJ0aWFsYGAgcGFydHMpLgorICAgICAgICAgICAqIEZvciAqPCdsaXN0Jz4qLCB3aGljaCBzaG91bGQgYmUgYSBsaXN0IG9mCisgICAgICAgICAgICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3RzLCBzZXQgdGhlIGBgbWFpbnR5cGVgYCB0bworICAgICAgICAgICAgIGBgbXVsdGlwYXJ0YGAsIGFuZCB0aGUgYGBzdWJ0eXBlYGAgdG8gKnN1YnR5cGUqIGlmIGl0IGlzCisgICAgICAgICAgICAgc3BlY2lmaWVkLCBhbmQgYGBtaXhlZGBgIGlmIGl0IGlzIG5vdC4gIElmIHRoZSBtZXNzYWdlIHBhcnRzIGluCisgICAgICAgICAgICAgdGhlICo8J2xpc3QnPiogaGF2ZSA6bWFpbGhlYWRlcjpgTUlNRS1WZXJzaW9uYCBoZWFkZXJzLCByZW1vdmUKKyAgICAgICAgICAgICB0aGVtLgorCisgICAgICAgSWYgKmNoYXJzZXQqIGlzIHByb3ZpZGVkICh3aGljaCBpcyB2YWxpZCBvbmx5IGZvciBgYHN0cmBgKSwgZW5jb2RlIHRoZQorICAgICAgIHN0cmluZyB0byBieXRlcyB1c2luZyB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBzZXQuICBUaGUgZGVmYXVsdCBpcworICAgICAgIGBgdXRmLThgYC4gIElmIHRoZSBzcGVjaWZpZWQgKmNoYXJzZXQqIGlzIGEga25vd24gYWxpYXMgZm9yIGEgc3RhbmRhcmQKKyAgICAgICBNSU1FIGNoYXJzZXQgbmFtZSwgdXNlIHRoZSBzdGFuZGFyZCBjaGFyc2V0IGluc3RlYWQuCisKKyAgICAgICBJZiAqY3RlKiBpcyBzZXQsIGVuY29kZSB0aGUgcGF5bG9hZCB1c2luZyB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgdHJhbnNmZXIKKyAgICAgICBlbmNvZGluZywgYW5kIHNldCB0aGUgOm1haWxoZWFkZXI6YENvbnRlbnQtVHJhbnNmZXItRW5kY29kaW5nYCBoZWFkZXIgdG8KKyAgICAgICB0aGF0IHZhbHVlLiAgRm9yIGBgc3RyYGAgb2JqZWN0cywgaWYgaXQgaXMgbm90IHNldCB1c2UgaGV1cmlzdGljcyB0bworICAgICAgIGRldGVybWluZSB0aGUgbW9zdCBjb21wYWN0IGVuY29kaW5nLiAgUG9zc2libGUgdmFsdWVzIGZvciAqY3RlKiBhcmUKKyAgICAgICBgYHF1b3RlZC1wcmludGFibGVgYCwgYGBiYXNlNjRgYCwgYGA3Yml0YGAsIGBgOGJpdGBgLCBhbmQgYGBiaW5hcnlgYC4KKyAgICAgICBJZiB0aGUgaW5wdXQgY2Fubm90IGJlIGVuY29kZWQgaW4gdGhlIHNwZWNpZmllZCBlbmNvZGluZyAoZWc6IGBgN2JpdGBgKSwKKyAgICAgICByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgLiAgRm9yIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAsIHBlcgorICAgICAgIDpyZmM6YDIwNDZgLCByYWlzZSBhbiBlcnJvciBpZiBhICpjdGUqIG9mIGBgcXVvdGVkLXByaW50YWJsZWBgIG9yCisgICAgICAgYGBiYXNlNjRgYCBpcyByZXF1ZXN0ZWQgZm9yICpzdWJ0eXBlKiBgYHJmYzgyMmBgLCBhbmQgZm9yIGFueSAqY3RlKgorICAgICAgIG90aGVyIHRoYW4gYGA3Yml0YGAgZm9yICpzdWJ0eXBlKiBgYGV4dGVybmFsLWJvZHlgYC4gIEZvcgorICAgICAgIGBgbWVzc2FnZS9yZmM4MjJgYCwgdXNlIGBgOGJpdGBgIGlmICpjdGUqIGlzIG5vdCBzcGVjaWZpZWQuICBGb3IgYWxsCisgICAgICAgb3RoZXIgdmFsdWVzIG9mICpzdWJ0eXBlKiwgdXNlIGBgN2JpdGBgLgorCisgICAgICAgLi4gbm90ZTo6IEEgKmN0ZSogb2YgYGBiaW5hcnlgYCBkb2VzIG5vdCBhY3R1YWxseSB3b3JrIGNvcnJlY3RseSB5ZXQuCisgICAgICAgICAgVGhlIGBgTWVzc2FnZWBgIG9iamVjdCBhcyBtb2RpZmllZCBieSBgYHNldF9jb250ZW50YGAgaXMgY29ycmVjdCwgYnV0CisgICAgICAgICAgOmNsYXNzOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yYCBkb2VzIG5vdCBzZXJpYWxpemUgaXQKKyAgICAgICAgICBjb3JyZWN0bHkuCisKKyAgICAgICBJZiAqZGlzcG9zaXRpb24qIGlzIHNldCwgdXNlIGl0IGFzIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICA6bWFpbGhlYWRlcjpgQ29udGVudC1EaXNwb3NpdGlvbmAgaGVhZGVyLiAgSWYgbm90IHNwZWNpZmllZCwgYW5kCisgICAgICAgKmZpbGVuYW1lKiBpcyBzcGVjaWZpZWQsIGFkZCB0aGUgaGVhZGVyIHdpdGggdGhlIHZhbHVlIGBgYXR0YWNobWVudGBgLgorICAgICAgIElmIGl0IGlzIG5vdCBzcGVjaWZpZWQgYW5kICpmaWxlbmFtZSogaXMgYWxzbyBub3Qgc3BlY2lmaWVkLCBkbyBub3QgYWRkCisgICAgICAgdGhlIGhlYWRlci4gIFRoZSBvbmx5IHZhbGlkIHZhbHVlcyBmb3IgKmRpc3Bvc2l0aW9uKiBhcmUgYGBhdHRhY2htZW50YGAKKyAgICAgICBhbmQgYGBpbmxpbmVgYC4KKworICAgICAgIElmICpmaWxlbmFtZSogaXMgc3BlY2lmaWVkLCB1c2UgaXQgYXMgdGhlIHZhbHVlIG9mIHRoZSBgYGZpbGVuYW1lYGAKKyAgICAgICBwYXJhbWV0ZXIgb2YgdGhlIDptYWlsaGVhZGVyOmBDb250ZW50LURpc3Bvc2l0aW9uYCBoZWFkZXIuICBUaGVyZSBpcyBubworICAgICAgIGRlZmF1bHQuCisKKyAgICAgICBJZiAqY2lkKiBpcyBzcGVjaWZpZWQsIGFkZCBhIDptYWlsaGVhZGVyOmBDb250ZW50LUlEYCBoZWFkZXIgd2l0aAorICAgICAgICpjaWQqIGFzIGl0cyB2YWx1ZS4KKworICAgICAgIElmICpwYXJhbXMqIGlzIHNwZWNpZmllZCwgaXRlcmF0ZSBpdHMgYGBpdGVtc2BgIG1ldGhvZCBhbmQgdXNlIHRoZQorICAgICAgIHJlc3VsdGluZyBgYChrZXksIHZhbHVlKWBgIHBhaXJzIHRvIHNldCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgb24gdGhlCisgICAgICAgOm1haWxoZWFkZXI6YENvbnRlbnQtVHlwZWAgaGVhZGVyLgorCisgICAgICAgSWYgKmhlYWRlcnMqIGlzIHNwZWNpZmllZCBhbmQgaXMgYSBsaXN0IG9mIHN0cmluZ3Mgb2YgdGhlIGZvcm0KKyAgICAgICBgYGhlYWRlcm5hbWU6IGhlYWRlcnZhbHVlYGAgb3IgYSBsaXN0IG9mIGBgaGVhZGVyYGAgb2JqZWN0cworICAgICAgIChkaXN0aW5ndWlzZWQgZnJvbSBzdHJpbmdzIGJ5IGhhdmluZyBhIGBgbmFtZWBgIGF0dHJpYnV0ZSksIGFkZCB0aGUKKyAgICAgICBoZWFkZXJzIHRvICptc2cqLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLmdlbmVyYXRvci5yc3QKaW5kZXggYzE3MmFjYi4uNDhkNDFlMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZW1haWwuZ2VuZXJhdG9yLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5nZW5lcmF0b3IucnN0CkBAIC0xMTIsNyArMTEyLDcgQEAKIDptb2Q6YGVtYWlsLm1lc3NhZ2VgLgogCiAuLiBjbGFzczo6IEJ5dGVzR2VuZXJhdG9yKG91dGZwLCBtYW5nbGVfZnJvbV89VHJ1ZSwgbWF4aGVhZGVybGVuPTc4LCAqLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PU5vbmUpCiAKICAgIFRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIDpjbGFzczpgQnl0ZXNHZW5lcmF0b3JgIGNsYXNzIHRha2VzIGEgYmluYXJ5CiAgICA6dGVybTpgZmlsZS1saWtlIG9iamVjdGAgY2FsbGVkICpvdXRmcCogZm9yIGFuIGFyZ3VtZW50LiAgKm91dGZwKiBtdXN0CkBAIC0xMzQsOSArMTM0LDExIEBACiAgICB3cmFwcGluZy4gIFRoZSBkZWZhdWx0IGlzIDc4LCBhcyByZWNvbW1lbmRlZCAoYnV0IG5vdCByZXF1aXJlZCkgYnkKICAgIDpyZmM6YDI4MjJgLgogCisKICAgIFRoZSAqcG9saWN5KiBrZXl3b3JkIHNwZWNpZmllcyBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgIG9iamVjdCB0aGF0IGNvbnRyb2xzIGEKLSAgIG51bWJlciBvZiBhc3BlY3RzIG9mIHRoZSBnZW5lcmF0b3IncyBvcGVyYXRpb24uICBUaGUgZGVmYXVsdCBwb2xpY3kKLSAgIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgbnVtYmVyIG9mIGFzcGVjdHMgb2YgdGhlIGdlbmVyYXRvcidzIG9wZXJhdGlvbi4gIElmIG5vICpwb2xpY3kqIGlzIHNwZWNpZmllZCwKKyAgIHRoZW4gdGhlICpwb2xpY3kqIGF0dGFjaGVkIHRvIHRoZSBtZXNzYWdlIG9iamVjdCBwYXNzZWQgdG8gOmF0dHI6YGZsYXR0ZW5gCisgICBpcyB1c2VkLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMyBBZGRlZCB0aGUgKnBvbGljeSoga2V5d29yZC4KIApAQCAtMTc0LDcgKzE3Niw3IEBACiAKICAgICAgIE9wdGlvbmFsICpsaW5lc2VwKiBzcGVjaWZpZXMgdGhlIGxpbmUgc2VwYXJhdG9yIGNoYXJhY3RlciB1c2VkIHRvCiAgICAgICB0ZXJtaW5hdGUgbGluZXMgaW4gdGhlIG91dHB1dC4gIElmIHNwZWNpZmllZCBpdCBvdmVycmlkZXMgdGhlIHZhbHVlCi0gICAgICBzcGVjaWZpZWQgYnkgdGhlIGBgR2VuZXJhdG9yYGBcICdzIGBgcG9saWN5YGAuCisgICAgICBzcGVjaWZpZWQgYnkgdGhlIGBgR2VuZXJhdG9yYGBcIG9yICptc2cqXCAncyBgYHBvbGljeWBgLgogCiAgICAuLiBtZXRob2Q6OiBjbG9uZShmcCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwubWVzc2FnZS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAppbmRleCAzMDc1ZTg2Li5hZWVhOTQyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5tZXNzYWdlLnJzdApAQCAtMzMsMjMgKzMzLDMxIEBACiAKIC4uIGNsYXNzOjogTWVzc2FnZShwb2xpY3k9Y29tcGF0MzIpCiAKLSAgIFRoZSAqcG9saWN5KiBhcmd1bWVudCBkZXRlcm1pZW5zIHRoZSA6bW9kOmB+ZW1haWwucG9saWN5YCB0aGF0IHdpbGwgYmUgdXNlZAotICAgdG8gdXBkYXRlIHRoZSBtZXNzYWdlIG1vZGVsLiAgVGhlIGRlZmF1bHQgdmFsdWUsIDpjbGFzczpgY29tcGF0MzIKLSAgIDxlbWFpbC5wb2xpY3kuQ29tcGF0MzI+YCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHRoZQotICAgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQorICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1cGRhdGUgYW5kIHNlcmlhbGl6ZSB0aGUgcmVwcmVzZW50YXRpb24KKyAgIG9mIHRoZSBtZXNzYWdlLiAgSWYgKnBvbGljeSogaXMgbm90IHNldCwgdXNlIHRoZSA6Y2xhc3M6YGNvbXBhdDMyCisgICA8ZW1haWwucG9saWN5LkNvbXBhdDMyPmAgcG9saWN5LCB3aGljaCBtYWludGFpbnMgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoCisgICB0aGUgUHl0aG9uIDMuMiB2ZXJzaW9uIG9mIHRoZSBlbWFpbCBwYWNrYWdlLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZQogICAgOm1vZDpgfmVtYWlsLnBvbGljeWAgZG9jdW1lbnRhdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMgVGhlICpwb2xpY3kqIGtleXdvcmQgYXJndW1lbnQgd2FzIGFkZGVkLgogCiAKLSAgIC4uIG1ldGhvZDo6IGFzX3N0cmluZyh1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTApCisgICAuLiBtZXRob2Q6OiBhc19zdHJpbmcodW5peGZyb209RmFsc2UsIG1heGhlYWRlcmxlbj0wLCBwb2xpY3k9Tm9uZSkKIAogICAgICAgUmV0dXJuIHRoZSBlbnRpcmUgbWVzc2FnZSBmbGF0dGVuZWQgYXMgYSBzdHJpbmcuICBXaGVuIG9wdGlvbmFsICp1bml4ZnJvbSoKLSAgICAgIGlzIGBgVHJ1ZWBgLCB0aGUgZW52ZWxvcGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCi0gICAgICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIEZsYXR0ZW5pbmcgdGhlIG1lc3NhZ2UgbWF5IHRyaWdnZXIKLSAgICAgIGNoYW5nZXMgdG8gdGhlIDpjbGFzczpgTWVzc2FnZWAgaWYgZGVmYXVsdHMgbmVlZCB0byBiZSBmaWxsZWQgaW4gdG8KLSAgICAgIGNvbXBsZXRlIHRoZSB0cmFuc2Zvcm1hdGlvbiB0byBhIHN0cmluZyAoZm9yIGV4YW1wbGUsIE1JTUUgYm91bmRhcmllcyBtYXkKLSAgICAgIGJlIGdlbmVyYXRlZCBvciBtb2RpZmllZCkuCisgICAgICBpcyB0cnVlLCB0aGUgZW52ZWxvcGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZCBzdHJpbmcuCisgICAgICAqdW5peGZyb20qIGRlZmF1bHRzIHRvIGBgRmFsc2VgYC4gIEZvciBiYWNrd2FyZCBjb21wYWJpdGlsaXR5IHJlYXNvbnMsCisgICAgICAqbWF4aGVhZGVybGVuKiBkZWZhdWx0cyB0byBgYDBgYCwgc28gaWYgeW91IHdhbnQgYSBkaWZmZXJlbnQgdmFsdWUgeW91CisgICAgICBtdXN0IG92ZXJyaWRlIGl0IGV4cGxpY2l0bHkgKHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yICptYXhfbGluZV9sZW5ndGgqIGluCisgICAgICB0aGUgcG9saWN5IHdpbGwgYmUgaWdub3JlZCBieSB0aGlzIG1ldGhvZCkuICBUaGUgKnBvbGljeSogYXJndW1lbnQgbWF5IGJlCisgICAgICB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBvbGljeSBvYnRhaW5lZCBmcm9tIHRoZSBtZXNzYWdlIGluc3RhbmNlLgorICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgcHJvZHVjZWQgYnkgdGhlCisgICAgICBtZXRob2QsIHNpbmNlIHRoZSBzcGVjaWZpZWQgKnBvbGljeSogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGBgR2VuZXJhdG9yYGAuCisKKyAgICAgIEZsYXR0ZW5pbmcgdGhlIG1lc3NhZ2UgbWF5IHRyaWdnZXIgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZgorICAgICAgZGVmYXVsdHMgbmVlZCB0byBiZSBmaWxsZWQgaW4gdG8gY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nCisgICAgICAoZm9yIGV4YW1wbGUsIE1JTUUgYm91bmRhcmllcyBtYXkgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KIAogICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2UgYW5kIG1heSBub3QgYWx3YXlzCiAgICAgICBmb3JtYXQgdGhlIG1lc3NhZ2UgdGhlIHdheSB5b3Ugd2FudC4gIEZvciBleGFtcGxlLCBieSBkZWZhdWx0IGl0IGRvZXMKQEAgLTY1LDE3ICs3Myw2OSBAQAogICAgICAgICAgZy5mbGF0dGVuKG1zZykKICAgICAgICAgIHRleHQgPSBmcC5nZXR2YWx1ZSgpCiAKKyAgICAgIElmIHRoZSBtZXNzYWdlIG9iamVjdCBjb250YWlucyBiaW5hcnkgZGF0YSB0aGF0IGlzIG5vdCBlbmNvZGVkIGFjY29yZGluZworICAgICAgdG8gUkZDIHN0YW5kYXJkcywgdGhlIG5vbi1jb21wbGlhbnQgZGF0YSB3aWxsIGJlIHJlcGxhY2VkIGJ5IHVuaWNvZGUKKyAgICAgICJ1bmtub3duIGNoYXJhY3RlciIgY29kZSBwb2ludHMuICAoU2VlIGFsc28gOm1ldGg6YC5hc19ieXRlc2AgYW5kCisgICAgICA6Y2xhc3M6YH5lbWFpbC5nZW5lcmF0b3IuQnl0ZXNHZW5lcmF0b3JgLikKKworICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgdGhlICpwb2xpY3kqIGtleXdvcmQgYXJndW1lbnQgd2FzIGFkZGVkLgorCiAKICAgIC4uIG1ldGhvZDo6IF9fc3RyX18oKQogCi0gICAgICBFcXVpdmFsZW50IHRvIGBgYXNfc3RyaW5nKHVuaXhmcm9tPVRydWUpYGAuCisgICAgICBFcXVpdmFsZW50IHRvIDptZXRoOmAuYXNfc3RyaW5nKClgLiAgQWxsb3dzIGBgc3RyKG1zZylgYCB0byBwcm9kdWNlIGEKKyAgICAgIHN0cmluZyBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgbWVzc2FnZS4KKworCisgICAuLiBtZXRob2Q6OiBhc19ieXRlcyh1bml4ZnJvbT1GYWxzZSwgcG9saWN5PU5vbmUpCisKKyAgICAgIFJldHVybiB0aGUgZW50aXJlIG1lc3NhZ2UgZmxhdHRlbmVkIGFzIGEgYnl0ZXMgb2JqZWN0LiAgV2hlbiBvcHRpb25hbAorICAgICAgKnVuaXhmcm9tKiBpcyB0cnVlLCB0aGUgZW52ZWxvcGUgaGVhZGVyIGlzIGluY2x1ZGVkIGluIHRoZSByZXR1cm5lZAorICAgICAgc3RyaW5nLiAgKnVuaXhmcm9tKiBkZWZhdWx0cyB0byBgYEZhbHNlYGAuICBUaGUgKnBvbGljeSogYXJndW1lbnQgbWF5IGJlCisgICAgICB1c2VkIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IHBvbGljeSBvYnRhaW5lZCBmcm9tIHRoZSBtZXNzYWdlIGluc3RhbmNlLgorICAgICAgVGhpcyBjYW4gYmUgdXNlZCB0byBjb250cm9sIHNvbWUgb2YgdGhlIGZvcm1hdHRpbmcgcHJvZHVjZWQgYnkgdGhlCisgICAgICBtZXRob2QsIHNpbmNlIHRoZSBzcGVjaWZpZWQgKnBvbGljeSogd2lsbCBiZSBwYXNzZWQgdG8gdGhlCisgICAgICBgYEJ5dGVzR2VuZXJhdG9yYGAuCisKKyAgICAgIEZsYXR0ZW5pbmcgdGhlIG1lc3NhZ2UgbWF5IHRyaWdnZXIgY2hhbmdlcyB0byB0aGUgOmNsYXNzOmBNZXNzYWdlYCBpZgorICAgICAgZGVmYXVsdHMgbmVlZCB0byBiZSBmaWxsZWQgaW4gdG8gY29tcGxldGUgdGhlIHRyYW5zZm9ybWF0aW9uIHRvIGEgc3RyaW5nCisgICAgICAoZm9yIGV4YW1wbGUsIE1JTUUgYm91bmRhcmllcyBtYXkgYmUgZ2VuZXJhdGVkIG9yIG1vZGlmaWVkKS4KKworICAgICAgTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIHByb3ZpZGVkIGFzIGEgY29udmVuaWVuY2UgYW5kIG1heSBub3QgYWx3YXlzCisgICAgICBmb3JtYXQgdGhlIG1lc3NhZ2UgdGhlIHdheSB5b3Ugd2FudC4gIEZvciBleGFtcGxlLCBieSBkZWZhdWx0IGl0IGRvZXMKKyAgICAgIG5vdCBkbyB0aGUgbWFuZ2xpbmcgb2YgbGluZXMgdGhhdCBiZWdpbiB3aXRoIGBgRnJvbWBgIHRoYXQgaXMKKyAgICAgIHJlcXVpcmVkIGJ5IHRoZSB1bml4IG1ib3ggZm9ybWF0LiAgRm9yIG1vcmUgZmxleGliaWxpdHksIGluc3RhbnRpYXRlIGEKKyAgICAgIDpjbGFzczpgfmVtYWlsLmdlbmVyYXRvci5CeXRlc0dlbmVyYXRvcmAgaW5zdGFuY2UgYW5kIHVzZSBpdHMKKyAgICAgIDptZXRoOmB+ZW1haWwuZ2VuZXJhdG9yLkJ5dGVzR2VuZXJhdG9yLmZsYXR0ZW5gIG1ldGhvZCBkaXJlY3RseS4KKyAgICAgIEZvciBleGFtcGxlOjoKKworICAgICAgICAgZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworICAgICAgICAgZnJvbSBlbWFpbC5nZW5lcmF0b3IgaW1wb3J0IEJ5dGVzR2VuZXJhdG9yCisgICAgICAgICBmcCA9IEJ5dGVzSU8oKQorICAgICAgICAgZyA9IEJ5dGVzR2VuZXJhdG9yKGZwLCBtYW5nbGVfZnJvbV89VHJ1ZSwgbWF4aGVhZGVybGVuPTYwKQorICAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgIHRleHQgPSBmcC5nZXR2YWx1ZSgpCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKyAgIC4uIG1ldGhvZDo6IF9fYnl0ZXNfXygpCisKKyAgICAgIEVxdWl2YWxlbnQgdG8gOm1ldGg6YC5hc19ieXRlcygpYC4gIEFsbG93cyBgYGJ5dGVzKG1zZylgYCB0byBwcm9kdWNlIGEKKyAgICAgIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIHRoZSBmb3JtYXR0ZWQgbWVzc2FnZS4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIAogICAgLi4gbWV0aG9kOjogaXNfbXVsdGlwYXJ0KCkKIAogICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBtZXNzYWdlJ3MgcGF5bG9hZCBpcyBhIGxpc3Qgb2Ygc3ViLVwKICAgICAgIDpjbGFzczpgTWVzc2FnZWAgb2JqZWN0cywgb3RoZXJ3aXNlIHJldHVybiBgYEZhbHNlYGAuICBXaGVuCi0gICAgICA6bWV0aDpgaXNfbXVsdGlwYXJ0YCByZXR1cm5zIGBgRmFsc2VgYCwgdGhlIHBheWxvYWQgc2hvdWxkIGJlIGEgc3RyaW5nIG9iamVjdC4KKyAgICAgIDptZXRoOmBpc19tdWx0aXBhcnRgIHJldHVybnMgYGBGYWxzZWBgLCB0aGUgcGF5bG9hZCBzaG91bGQgYmUgYSBzdHJpbmcKKyAgICAgIG9iamVjdC4gIChOb3RlIHRoYXQgOm1ldGg6YGlzX211bHRpcGFydGAgcmV0dXJuaW5nIGBgVHJ1ZWBgIGRvZXMgbm90CisgICAgICBuZWNlc3NhcmlseSBtZWFuIHRoYXQgIm1zZy5nZXRfY29udGVudF9tYWludHlwZSgpID09ICdtdWx0aXBhcnQnIiB3aWxsCisgICAgICByZXR1cm4gdGhlIGBgVHJ1ZWBgLiAgIEZvciBleGFtcGxlLCBgYGlzX211bHRpcGFydGBgIHdpbGwgcmV0dXJuIGBgVHJ1ZWBgCisgICAgICB3aGVuIHRoZSA6Y2xhc3M6YE1lc3NhZ2VgIGlzIG9mIHR5cGUgYGBtZXNzYWdlL3JmYzgyMmBgLikKIAogCiAgICAuLiBtZXRob2Q6OiBzZXRfdW5peGZyb20odW5peGZyb20pCkBAIC00MTAsNyArNDcwLDggQEAKICAgICAgIHRvIGBgRmFsc2VgYC4KIAogCi0gICAuLiBtZXRob2Q6OiBzZXRfcGFyYW0ocGFyYW0sIHZhbHVlLCBoZWFkZXI9J0NvbnRlbnQtVHlwZScsIHJlcXVvdGU9VHJ1ZSwgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJykKKyAgIC4uIG1ldGhvZDo6IHNldF9wYXJhbShwYXJhbSwgdmFsdWUsIGhlYWRlcj0nQ29udGVudC1UeXBlJywgcmVxdW90ZT1UcnVlLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJywgcmVwbGFjZT1GYWxzZSkKIAogICAgICAgU2V0IGEgcGFyYW1ldGVyIGluIHRoZSA6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBoZWFkZXIuICBJZiB0aGUKICAgICAgIHBhcmFtZXRlciBhbHJlYWR5IGV4aXN0cyBpbiB0aGUgaGVhZGVyLCBpdHMgdmFsdWUgd2lsbCBiZSByZXBsYWNlZCB3aXRoCkBAIC00MjcsNiArNDg4LDEyIEBACiAgICAgICBsYW5ndWFnZSwgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgc3RyaW5nLiAgQm90aCAqY2hhcnNldCogYW5kICpsYW5ndWFnZSoKICAgICAgIHNob3VsZCBiZSBzdHJpbmdzLgogCisgICAgICBJZiAqcmVwbGFjZSogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCkgdGhlIGhlYWRlciBpcyBtb3ZlZCB0byB0aGUKKyAgICAgIGVuZCBvZiB0aGUgbGlzdCBvZiBoZWFkZXJzLiAgSWYgKnJlcGxhY2UqIGlzIGBgVHJ1ZWBgLCB0aGUgaGVhZGVyCisgICAgICB3aWxsIGJlIHVwZGF0ZWQgaW4gcGxhY2UuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IGBgcmVwbGFjZWBgIGtleXdvcmQgd2FzIGFkZGVkLgorCiAKICAgIC4uIG1ldGhvZDo6IGRlbF9wYXJhbShwYXJhbSwgaGVhZGVyPSdjb250ZW50LXR5cGUnLCByZXF1b3RlPVRydWUpCiAKQEAgLTUyMSwyMyArNTg4LDU2IEBACiAgICAgICBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0IHByaW50cyB0aGUgTUlNRSB0eXBlIG9mIGV2ZXJ5IHBhcnQgb2YgYSBtdWx0aXBhcnQKICAgICAgIG1lc3NhZ2Ugc3RydWN0dXJlOgogCi0gICAgICAgLi4gdGVzdHNldHVwOjoKKyAgICAgIC4uIHRlc3RzZXR1cDo6CiAKLSAgICAgICAgICAgID4+PiBmcm9tIGVtYWlsIGltcG9ydCBtZXNzYWdlX2Zyb21fYmluYXJ5X2ZpbGUKLSAgICAgICAgICAgID4+PiB3aXRoIG9wZW4oJ0xpYi90ZXN0L3Rlc3RfZW1haWwvZGF0YS9tc2dfMTYudHh0JywgJ3JiJykgYXMgZjoKLSAgICAgICAgICAgIC4uLiAgICAgbXNnID0gbWVzc2FnZV9mcm9tX2JpbmFyeV9maWxlKGYpCisgICAgICAgICA+Pj4gZnJvbSBlbWFpbCBpbXBvcnQgbWVzc2FnZV9mcm9tX2JpbmFyeV9maWxlCisgICAgICAgICA+Pj4gd2l0aCBvcGVuKCdMaWIvdGVzdC90ZXN0X2VtYWlsL2RhdGEvbXNnXzE2LnR4dCcsICdyYicpIGFzIGY6CisgICAgICAgICAuLi4gICAgIG1zZyA9IG1lc3NhZ2VfZnJvbV9iaW5hcnlfZmlsZShmKQorICAgICAgICAgPj4+IGZyb20gZW1haWwuaXRlcmF0b3JzIGltcG9ydCBfc3RydWN0dXJlCiAKLSAgICAgICAuLiBkb2N0ZXN0OjoKKyAgICAgIC4uIGRvY3Rlc3Q6OgogCi0gICAgICAgICAgICA+Pj4gZm9yIHBhcnQgaW4gbXNnLndhbGsoKToKLSAgICAgICAgICAgIC4uLiAgICAgcHJpbnQocGFydC5nZXRfY29udGVudF90eXBlKCkpCi0gICAgICAgICAgICBtdWx0aXBhcnQvcmVwb3J0Ci0gICAgICAgICAgICB0ZXh0L3BsYWluCi0gICAgICAgICAgICBtZXNzYWdlL2RlbGl2ZXJ5LXN0YXR1cwotICAgICAgICAgICAgdGV4dC9wbGFpbgotICAgICAgICAgICAgdGV4dC9wbGFpbgotICAgICAgICAgICAgbWVzc2FnZS9yZmM4MjIKLSAgICAgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgID4+PiBmb3IgcGFydCBpbiBtc2cud2FsaygpOgorICAgICAgICAgLi4uICAgICBwcmludChwYXJ0LmdldF9jb250ZW50X3R5cGUoKSkKKyAgICAgICAgIG11bHRpcGFydC9yZXBvcnQKKyAgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgIG1lc3NhZ2UvZGVsaXZlcnktc3RhdHVzCisgICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgICB0ZXh0L3BsYWluCisgICAgICAgICBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgdGV4dC9wbGFpbgorCisgICAgICBgYHdhbGtgYCBpdGVyYXRlcyBvdmVyIHRoZSBzdWJwYXJ0cyBvZiBhbnkgcGFydCB3aGVyZQorICAgICAgOm1ldGg6YGlzX211bHRpcGFydGAgcmV0dXJucyBgYFRydWVgYCwgZXZlbiB0aG91Z2gKKyAgICAgIGBgbXNnLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCdgYCBtYXkgcmV0dXJuIGBgRmFsc2VgYC4gIFdlCisgICAgICBjYW4gc2VlIHRoaXMgaW4gb3VyIGV4YW1wbGUgYnkgbWFraW5nIHVzZSBvZiB0aGUgYGBfc3RydWN0dXJlYGAgZGVidWcKKyAgICAgIGhlbHBlciBmdW5jdGlvbjoKKworICAgICAgLi4gZG9jdGVzdDo6CisKKyAgICAgICAgID4+PiBmb3IgcGFydCBpbiBtc2cud2FsaygpOgorICAgICAgICAgLi4uICAgICBwcmludChwYXJ0LmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCcpLAorICAgICAgICAgLi4uICAgICAgICAgICBwYXJ0LmlzX211bHRpcGFydCgpKQorICAgICAgICAgVHJ1ZSBUcnVlCisgICAgICAgICBGYWxzZSBGYWxzZQorICAgICAgICAgRmFsc2UgVHJ1ZQorICAgICAgICAgRmFsc2UgRmFsc2UKKyAgICAgICAgIEZhbHNlIEZhbHNlCisgICAgICAgICBGYWxzZSBUcnVlCisgICAgICAgICBGYWxzZSBGYWxzZQorICAgICAgICAgPj4+IF9zdHJ1Y3R1cmUobXNnKQorICAgICAgICAgbXVsdGlwYXJ0L3JlcG9ydAorICAgICAgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgIG1lc3NhZ2UvZGVsaXZlcnktc3RhdHVzCisgICAgICAgICAgICAgdGV4dC9wbGFpbgorICAgICAgICAgICAgIHRleHQvcGxhaW4KKyAgICAgICAgIG1lc3NhZ2UvcmZjODIyCisgICAgICAgICAgICAgdGV4dC9wbGFpbgorCisgICAgICBIZXJlIHRoZSBgYG1lc3NhZ2VgYCBwYXJ0cyBhcmUgbm90IGBgbXVsdGlwYXJ0c2BgLCBidXQgdGhleSBkbyBjb250YWluCisgICAgICBzdWJwYXJ0cy4gYGBpc19tdWx0aXBhcnQoKWBgIHJldHVybnMgYGBUcnVlYGAgYW5kIGBgd2Fsa2BgIGRlc2NlbmRzCisgICAgICBpbnRvIHRoZSBzdWJwYXJ0cy4KKwogCiAgICA6Y2xhc3M6YE1lc3NhZ2VgIG9iamVjdHMgY2FuIGFsc28gb3B0aW9uYWxseSBjb250YWluIHR3byBpbnN0YW5jZSBhdHRyaWJ1dGVzLAogICAgd2hpY2ggY2FuIGJlIHVzZWQgd2hlbiBnZW5lcmF0aW5nIHRoZSBwbGFpbiB0ZXh0IG9mIGEgTUlNRSBtZXNzYWdlLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW1haWwubWltZS5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5taW1lLnJzdAppbmRleCA0Y2RiMzIyLi4xZDcwMjI1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5taW1lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9lbWFpbC5taW1lLnJzdApAQCAtMTk0LDcgKzE5NCw3IEBACiAgICBtaW5vciB0eXBlIGFuZCBkZWZhdWx0cyB0byA6bWltZXR5cGU6YHBsYWluYC4gICpfY2hhcnNldCogaXMgdGhlIGNoYXJhY3RlcgogICAgc2V0IG9mIHRoZSB0ZXh0IGFuZCBpcyBwYXNzZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlCiAgICA6Y2xhc3M6YH5lbWFpbC5taW1lLm5vbm11bHRpcGFydC5NSU1FTm9uTXVsdGlwYXJ0YCBjb25zdHJ1Y3RvcjsgaXQgZGVmYXVsdHMKLSAgIHRvIGBgdXMtYXNjaWlgYCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG9ubHkgYGBhc2NpaWBgIGNvZGVwb2ludHMsIGFuZAorICAgdG8gYGB1cy1hc2NpaWBgIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgb25seSBgYGFzY2lpYGAgY29kZSBwb2ludHMsIGFuZAogICAgYGB1dGYtOGBgIG90aGVyd2lzZS4KIAogICAgVW5sZXNzIHRoZSAqX2NoYXJzZXQqIGFyZ3VtZW50IGlzIGV4cGxpY2l0bHkgc2V0IHRvIGBgTm9uZWBgLCB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnBhcnNlci5yc3QgYi9Eb2MvbGlicmFyeS9lbWFpbC5wYXJzZXIucnN0CmluZGV4IGVlNmFmM2YuLjE3N2FkYzYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnBhcnNlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwucGFyc2VyLnJzdApAQCAtNjAsMTUgKzYwLDE4IEBACiBIZXJlIGlzIHRoZSBBUEkgZm9yIHRoZSA6Y2xhc3M6YEZlZWRQYXJzZXJgOgogCiAKLS4uIGNsYXNzOjogRmVlZFBhcnNlcihfZmFjdG9yeT1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIHBvbGljeT1wb2xpY3kuZGVmYXVsdCkKKy4uIGNsYXNzOjogRmVlZFBhcnNlcihfZmFjdG9yeT1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIHBvbGljeT1wb2xpY3kuY29tcGF0MzIpCiAKICAgIENyZWF0ZSBhIDpjbGFzczpgRmVlZFBhcnNlcmAgaW5zdGFuY2UuICBPcHRpb25hbCAqX2ZhY3RvcnkqIGlzIGEgbm8tYXJndW1lbnQKICAgIGNhbGxhYmxlIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgbWVzc2FnZSBvYmplY3QgaXMgbmVlZGVkLiAgSXQKICAgIGRlZmF1bHRzIHRvIHRoZSA6Y2xhc3M6YGVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgY2xhc3MuCiAKLSAgIFRoZSAqcG9saWN5KiBrZXl3b3JkIHNwZWNpZmllcyBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgIG9iamVjdCB0aGF0IGNvbnRyb2xzIGEKLSAgIG51bWJlciBvZiBhc3BlY3RzIG9mIHRoZSBwYXJzZXIncyBvcGVyYXRpb24uICBUaGUgZGVmYXVsdCBwb2xpY3kgbWFpbnRhaW5zCi0gICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1cGRhdGUgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgbWVzc2FnZS4gIElmICpwb2xpY3kqIGlzIG5vdCBzZXQsIHVzZSB0aGUgOmNsYXNzOmBjb21wYXQzMgorICAgPGVtYWlsLnBvbGljeS5Db21wYXQzMj5gIHBvbGljeSwgd2hpY2ggbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aAorICAgdGhlIFB5dGhvbiAzLjIgdmVyc2lvbiBvZiB0aGUgZW1haWwgcGFja2FnZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKKyAgIDptb2Q6YH5lbWFpbC5wb2xpY3lgIGRvY3VtZW50YXRpb24uCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zIEFkZGVkIHRoZSAqcG9saWN5KiBrZXl3b3JkLgogCkBAIC0xMTMsNyArMTE2LDcgQEAKICAgIFRoZSBCeXRlc0hlYWRlclBhcnNlciBjbGFzcy4KIAogCi0uLiBjbGFzczo6IFBhcnNlcihfY2xhc3M9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBwb2xpY3k9cG9saWN5LmRlZmF1bHQpCisuLiBjbGFzczo6IFBhcnNlcihfY2xhc3M9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBwb2xpY3k9cG9saWN5LmNvbXBhdDMyKQogCiAgICBUaGUgY29uc3RydWN0b3IgZm9yIHRoZSA6Y2xhc3M6YFBhcnNlcmAgY2xhc3MgdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQKICAgICpfY2xhc3MqLiAgVGhpcyBtdXN0IGJlIGEgY2FsbGFibGUgZmFjdG9yeSAoc3VjaCBhcyBhIGZ1bmN0aW9uIG9yIGEgY2xhc3MpLCBhbmQKQEAgLTEyMSw5ICsxMjQsMTIgQEAKICAgIDpjbGFzczpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgKHNlZSA6bW9kOmBlbWFpbC5tZXNzYWdlYCkuICBUaGUgZmFjdG9yeSB3aWxsCiAgICBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuCiAKLSAgIFRoZSAqcG9saWN5KiBrZXl3b3JkIHNwZWNpZmllcyBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgIG9iamVjdCB0aGF0IGNvbnRyb2xzIGEKLSAgIG51bWJlciBvZiBhc3BlY3RzIG9mIHRoZSBwYXJzZXIncyBvcGVyYXRpb24uICBUaGUgZGVmYXVsdCBwb2xpY3kgbWFpbnRhaW5zCi0gICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1cGRhdGUgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgbWVzc2FnZS4gIElmICpwb2xpY3kqIGlzIG5vdCBzZXQsIHVzZSB0aGUgOmNsYXNzOmBjb21wYXQzMgorICAgPGVtYWlsLnBvbGljeS5Db21wYXQzMj5gIHBvbGljeSwgd2hpY2ggbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aAorICAgdGhlIFB5dGhvbiAzLjIgdmVyc2lvbiBvZiB0aGUgZW1haWwgcGFja2FnZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKKyAgIDptb2Q6YH5lbWFpbC5wb2xpY3lgIGRvY3VtZW50YXRpb24uCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBSZW1vdmVkIHRoZSAqc3RyaWN0KiBhcmd1bWVudCB0aGF0IHdhcyBkZXByZWNhdGVkIGluIDIuNC4gIEFkZGVkIHRoZQpAQCAtMTQwLDcgKzE0Niw3IEBACiAgICAgICBtZXRob2RzIG9uIGZpbGUtbGlrZSBvYmplY3RzLgogCiAgICAgICBUaGUgdGV4dCBjb250YWluZWQgaW4gKmZwKiBtdXN0IGJlIGZvcm1hdHRlZCBhcyBhIGJsb2NrIG9mIDpyZmM6YDI4MjJgCi0gICAgICBzdHlsZSBoZWFkZXJzIGFuZCBoZWFkZXIgY29udGludWF0aW9uIGxpbmVzLCBvcHRpb25hbGx5IHByZWNlZGVkIGJ5IGEKKyAgICAgIHN0eWxlIGhlYWRlcnMgYW5kIGhlYWRlciBjb250aW51YXRpb24gbGluZXMsIG9wdGlvbmFsbHkgcHJlY2VkZWQgYnkgYW4KICAgICAgIGVudmVsb3BlIGhlYWRlci4gIFRoZSBoZWFkZXIgYmxvY2sgaXMgdGVybWluYXRlZCBlaXRoZXIgYnkgdGhlIGVuZCBvZiB0aGUKICAgICAgIGRhdGEgb3IgYnkgYSBibGFuayBsaW5lLiAgRm9sbG93aW5nIHRoZSBoZWFkZXIgYmxvY2sgaXMgdGhlIGJvZHkgb2YgdGhlCiAgICAgICBtZXNzYWdlICh3aGljaCBtYXkgY29udGFpbiBNSU1FLWVuY29kZWQgc3VicGFydHMpLgpAQCAtMTU5LDIwICsxNjUsMjMgQEAKICAgICAgIE9wdGlvbmFsICpoZWFkZXJzb25seSogaXMgYXMgd2l0aCB0aGUgOm1ldGg6YHBhcnNlYCBtZXRob2QuCiAKIAotLi4gY2xhc3M6OiBCeXRlc1BhcnNlcihfY2xhc3M9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBwb2xpY3k9cG9saWN5LmRlZmF1bHQpCisuLiBjbGFzczo6IEJ5dGVzUGFyc2VyKF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIHBvbGljeT1wb2xpY3kuY29tcGF0MzIpCiAKICAgIFRoaXMgY2xhc3MgaXMgZXhhY3RseSBwYXJhbGxlbCB0byA6Y2xhc3M6YFBhcnNlcmAsIGJ1dCBoYW5kbGVzIGJ5dGVzIGlucHV0LgogICAgVGhlICpfY2xhc3MqIGFuZCAqc3RyaWN0KiBhcmd1bWVudHMgYXJlIGludGVycHJldGVkIGluIHRoZSBzYW1lIHdheSBhcyBmb3IKICAgIHRoZSA6Y2xhc3M6YFBhcnNlcmAgY29uc3RydWN0b3IuCiAKLSAgIFRoZSAqcG9saWN5KiBrZXl3b3JkIHNwZWNpZmllcyBhIDptb2Q6YH5lbWFpbC5wb2xpY3lgIG9iamVjdCB0aGF0Ci0gICBjb250cm9scyBhIG51bWJlciBvZiBhc3BlY3RzIG9mIHRoZSBwYXJzZXIncyBvcGVyYXRpb24uICBUaGUgZGVmYXVsdAotICAgcG9saWN5IG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgSWYgKnBvbGljeSogaXMgc3BlY2lmaWVkIChpdCBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIGEgOm1vZDpgfmVtYWlsLnBvbGljeWAKKyAgIGNsYXNzKSB1c2UgdGhlIHJ1bGVzIGl0IHNwZWNpZmllcyB0byB1cGRhdGUgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZQorICAgbWVzc2FnZS4gIElmICpwb2xpY3kqIGlzIG5vdCBzZXQsIHVzZSB0aGUgOmNsYXNzOmBjb21wYXQzMgorICAgPGVtYWlsLnBvbGljeS5Db21wYXQzMj5gIHBvbGljeSwgd2hpY2ggbWFpbnRhaW5zIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aAorICAgdGhlIFB5dGhvbiAzLjIgdmVyc2lvbiBvZiB0aGUgZW1haWwgcGFja2FnZS4gIEZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUKKyAgIDptb2Q6YH5lbWFpbC5wb2xpY3lgIGRvY3VtZW50YXRpb24uCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBSZW1vdmVkIHRoZSAqc3RyaWN0KiBhcmd1bWVudC4gIEFkZGVkIHRoZSAqcG9saWN5KiBrZXl3b3JkLgogCi0gICAuLiBtZXRob2Q6OiBwYXJzZShmcCwgaGVhZGVyb25seT1GYWxzZSkKKyAgIC4uIG1ldGhvZDo6IHBhcnNlKGZwLCBoZWFkZXJzb25seT1GYWxzZSkKIAogICAgICAgUmVhZCBhbGwgdGhlIGRhdGEgZnJvbSB0aGUgYmluYXJ5IGZpbGUtbGlrZSBvYmplY3QgKmZwKiwgcGFyc2UgdGhlCiAgICAgICByZXN1bHRpbmcgYnl0ZXMsIGFuZCByZXR1cm4gdGhlIG1lc3NhZ2Ugb2JqZWN0LiAgKmZwKiBtdXN0IHN1cHBvcnQKQEAgLTE4MCw3ICsxODksNyBAQAogICAgICAgbWV0aG9kcyBvbiBmaWxlLWxpa2Ugb2JqZWN0cy4KIAogICAgICAgVGhlIGJ5dGVzIGNvbnRhaW5lZCBpbiAqZnAqIG11c3QgYmUgZm9ybWF0dGVkIGFzIGEgYmxvY2sgb2YgOnJmYzpgMjgyMmAKLSAgICAgIHN0eWxlIGhlYWRlcnMgYW5kIGhlYWRlciBjb250aW51YXRpb24gbGluZXMsIG9wdGlvbmFsbHkgcHJlY2VkZWQgYnkgYQorICAgICAgc3R5bGUgaGVhZGVycyBhbmQgaGVhZGVyIGNvbnRpbnVhdGlvbiBsaW5lcywgb3B0aW9uYWxseSBwcmVjZWRlZCBieSBhbgogICAgICAgZW52ZWxvcGUgaGVhZGVyLiAgVGhlIGhlYWRlciBibG9jayBpcyB0ZXJtaW5hdGVkIGVpdGhlciBieSB0aGUgZW5kIG9mIHRoZQogICAgICAgZGF0YSBvciBieSBhIGJsYW5rIGxpbmUuICBGb2xsb3dpbmcgdGhlIGhlYWRlciBibG9jayBpcyB0aGUgYm9keSBvZiB0aGUKICAgICAgIG1lc3NhZ2UgKHdoaWNoIG1heSBjb250YWluIE1JTUUtZW5jb2RlZCBzdWJwYXJ0cywgaW5jbHVkaW5nIHN1YnBhcnRzCkBAIC0yMDksNyArMjE4LDcgQEAKIC4uIGN1cnJlbnRtb2R1bGU6OiBlbWFpbAogCiAuLiBmdW5jdGlvbjo6IG1lc3NhZ2VfZnJvbV9zdHJpbmcocywgX2NsYXNzPWVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwgKiwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3k9cG9saWN5LmNvbXBhdDMyKQogCiAgICBSZXR1cm4gYSBtZXNzYWdlIG9iamVjdCBzdHJ1Y3R1cmUgZnJvbSBhIHN0cmluZy4gIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvCiAgICBgYFBhcnNlcigpLnBhcnNlc3RyKHMpYGAuICAqX2NsYXNzKiBhbmQgKnBvbGljeSogYXJlIGludGVycHJldGVkIGFzCkBAIC0yMTksNyArMjI4LDcgQEAKICAgICAgIFJlbW92ZWQgdGhlICpzdHJpY3QqIGFyZ3VtZW50LiAgQWRkZWQgdGhlICpwb2xpY3kqIGtleXdvcmQuCiAKIC4uIGZ1bmN0aW9uOjogbWVzc2FnZV9mcm9tX2J5dGVzKHMsIF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kuY29tcGF0MzIpCiAKICAgIFJldHVybiBhIG1lc3NhZ2Ugb2JqZWN0IHN0cnVjdHVyZSBmcm9tIGEgYnl0ZSBzdHJpbmcuICBUaGlzIGlzIGV4YWN0bHkKICAgIGVxdWl2YWxlbnQgdG8gYGBCeXRlc1BhcnNlcigpLnBhcnNlYnl0ZXMocylgYC4gIE9wdGlvbmFsICpfY2xhc3MqIGFuZApAQCAtMjMxLDcgKzI0MCw3IEBACiAgICAgICBSZW1vdmVkIHRoZSAqc3RyaWN0KiBhcmd1bWVudC4gIEFkZGVkIHRoZSAqcG9saWN5KiBrZXl3b3JkLgogCiAuLiBmdW5jdGlvbjo6IG1lc3NhZ2VfZnJvbV9maWxlKGZwLCBfY2xhc3M9ZW1haWwubWVzc2FnZS5NZXNzYWdlLCAqLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5PXBvbGljeS5jb21wYXQzMikKIAogICAgUmV0dXJuIGEgbWVzc2FnZSBvYmplY3Qgc3RydWN0dXJlIHRyZWUgZnJvbSBhbiBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAuCiAgICBUaGlzIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBgYFBhcnNlcigpLnBhcnNlKGZwKWBgLiAgKl9jbGFzcyoKQEAgLTI0Miw3ICsyNTEsNyBAQAogICAgICAgUmVtb3ZlZCB0aGUgKnN0cmljdCogYXJndW1lbnQuICBBZGRlZCB0aGUgKnBvbGljeSoga2V5d29yZC4KIAogLi4gZnVuY3Rpb246OiBtZXNzYWdlX2Zyb21fYmluYXJ5X2ZpbGUoZnAsIF9jbGFzcz1lbWFpbC5tZXNzYWdlLk1lc3NhZ2UsICosIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kuY29tcGF0MzIpCiAKICAgIFJldHVybiBhIG1lc3NhZ2Ugb2JqZWN0IHN0cnVjdHVyZSB0cmVlIGZyb20gYW4gb3BlbiBiaW5hcnkgOnRlcm06YGZpbGUKICAgIG9iamVjdGAuICBUaGlzIGlzIGV4YWN0bHkgZXF1aXZhbGVudCB0byBgYEJ5dGVzUGFyc2VyKCkucGFyc2UoZnApYGAuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0IGIvRG9jL2xpYnJhcnkvZW1haWwucG9saWN5LnJzdAppbmRleCBjYjIwMjNjLi5kNGUzZmMxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5wb2xpY3kucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLnBvbGljeS5yc3QKQEAgLTk3LDYgKzk3LDE3IEBACiBgYHNlbmRtYWlsJ3NgYCBgYHN0ZGluYGAsIHdoZXJlIHRoZSBkZWZhdWx0IHBvbGljeSB3b3VsZCB1c2UgYGBcbmBgIGxpbmUKIHNlcGFyYXRvcnMuCiAKK1NvbWUgZW1haWwgcGFja2FnZSBtZXRob2RzIGFjY2VwdCBhICpwb2xpY3kqIGtleXdvcmQgYXJndW1lbnQsIGFsbG93aW5nIHRoZQorcG9saWN5IHRvIGJlIG92ZXJyaWRkZW4gZm9yIHRoYXQgbWV0aG9kLiAgRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZSB1c2VzCit0aGUgOm1ldGg6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2UuYXNfYnl0ZXNgIG1ldGhvZCBvZiB0aGUgKm1zZyogb2JqZWN0IGZyb20KK3RoZSBwcmV2aW91cyBleGFtcGxlIGFuZCB3cml0ZXMgdGhlIG1lc3NhZ2UgdG8gYSBmaWxlIHVzaW5nIHRoZSBuYXRpdmUgbGluZQorc2VwYXJhdG9ycyBmb3IgdGhlIHBsYXRmb3JtIG9uIHdoaWNoIGl0IGlzIHJ1bm5pbmc6OgorCisgICA+Pj4gaW1wb3J0IG9zCisgICA+Pj4gd2l0aCBvcGVuKCdjb252ZXJ0ZWQudHh0JywgJ3diJykgYXMgZjoKKyAgIC4uLiAgICAgZi53cml0ZShtc2cuYXNfYnl0ZXMocG9saWN5PW1zZy5wb2xpY3kuY2xvbmUobGluZXNlcD1vcy5saW5lc2VwKSkpCisgICAxNworCiBQb2xpY3kgb2JqZWN0cyBjYW4gYWxzbyBiZSBjb21iaW5lZCB1c2luZyB0aGUgYWRkaXRpb24gb3BlcmF0b3IsIHByb2R1Y2luZyBhCiBwb2xpY3kgb2JqZWN0IHdob3NlIHNldHRpbmdzIGFyZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBub24tZGVmYXVsdCB2YWx1ZXMgb2YgdGhlCiBzdW1tZWQgb2JqZWN0czo6CkBAIC0zNjAsNyArMzcxLDcgQEAKICAgIHRvKSA6cmZjOmA1MzIyYCwgOnJmYzpgMjA0N2AsIGFuZCB0aGUgY3VycmVudCBNSU1FIFJGQ3MuCiAKICAgIFRoaXMgcG9saWN5IGFkZHMgbmV3IGhlYWRlciBwYXJzaW5nIGFuZCBmb2xkaW5nIGFsZ29yaXRobXMuICBJbnN0ZWFkIG9mCi0gICBzaW1wbGUgc3RyaW5ncywgaGVhZGVycyBhcmUgY3VzdG9tIG9iamVjdHMgd2l0aCBjdXN0b20gYXR0cmlidXRlcyBkZXBlbmRpbmcKKyAgIHNpbXBsZSBzdHJpbmdzLCBoZWFkZXJzIGFyZSBgYHN0cmBgIHN1YmNsYXNzZXMgd2l0aCBhdHRyaWJ1dGVzIHRoYXQgZGVwZW5kCiAgICBvbiB0aGUgdHlwZSBvZiB0aGUgZmllbGQuICBUaGUgcGFyc2luZyBhbmQgZm9sZGluZyBhbGdvcml0aG0gZnVsbHkgaW1wbGVtZW50CiAgICA6cmZjOmAyMDQ3YCBhbmQgOnJmYzpgNTMyMmAuCiAKQEAgLTM5Nyw2ICs0MDgsMjAgQEAKICAgICAgIGZpZWxkcyBhcmUgdHJlYXRlZCBhcyB1bnN0cnVjdHVyZWQuICBUaGlzIGxpc3Qgd2lsbCBiZSBjb21wbGV0ZWQgYmVmb3JlCiAgICAgICB0aGUgZXh0ZW5zaW9uIGlzIG1hcmtlZCBzdGFibGUuKQogCisgICAuLiBhdHRyaWJ1dGU6OiBjb250ZW50X21hbmFnZXIKKworICAgICAgQW4gb2JqZWN0IHdpdGggYXQgbGVhc3QgdHdvIG1ldGhvZHM6IGdldF9jb250ZW50IGFuZCBzZXRfY29udGVudC4gIFdoZW4KKyAgICAgIHRoZSA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5nZXRfY29udGVudGAgb3IKKyAgICAgIDptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9jb250ZW50YCBtZXRob2Qgb2YgYQorICAgICAgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBvYmplY3QgaXMgY2FsbGVkLCBpdCBjYWxscyB0aGUKKyAgICAgIGNvcnJlc3BvbmRpbmcgbWV0aG9kIG9mIHRoaXMgb2JqZWN0LCBwYXNzaW5nIGl0IHRoZSBtZXNzYWdlIG9iamVjdCBhcyBpdHMKKyAgICAgIGZpcnN0IGFyZ3VtZW50LCBhbmQgYW55IGFyZ3VtZW50cyBvciBrZXl3b3JkcyB0aGF0IHdlcmUgcGFzc2VkIHRvIGl0IGFzCisgICAgICBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gIEJ5IGRlZmF1bHQgYGBjb250ZW50X21hbmFnZXJgYCBpcyBzZXQgdG8KKyAgICAgIDpkYXRhOmB+ZW1haWwuY29udGVudG1hbmFnZXIucmF3X2RhdGFfbWFuYWdlcmAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKICAgIFRoZSBjbGFzcyBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNvbmNyZXRlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgYWJzdHJhY3QKICAgIG1ldGhvZHMgb2YgOmNsYXNzOmBQb2xpY3lgOgogCkBAIC00MTYsNyArNDQxLDcgQEAKICAgICAgIFRoZSBuYW1lIGlzIHJldHVybmVkIHVuY2hhbmdlZC4gIElmIHRoZSBpbnB1dCB2YWx1ZSBoYXMgYSBgYG5hbWVgYAogICAgICAgYXR0cmlidXRlIGFuZCBpdCBtYXRjaGVzICpuYW1lKiBpZ25vcmluZyBjYXNlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQKICAgICAgIHVuY2hhbmdlZC4gIE90aGVyd2lzZSB0aGUgKm5hbWUqIGFuZCAqdmFsdWUqIGFyZSBwYXNzZWQgdG8KLSAgICAgIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgY3VzdG9tIGhlYWRlciBvYmplY3QgaXMgcmV0dXJuZWQgYXMKKyAgICAgIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgaGVhZGVyIG9iamVjdCBpcyByZXR1cm5lZCBhcwogICAgICAgdGhlIHZhbHVlLiAgSW4gdGhpcyBjYXNlIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkIGlmIHRoZSBpbnB1dCB2YWx1ZQogICAgICAgY29udGFpbnMgQ1Igb3IgTEYgY2hhcmFjdGVycy4KIApAQCAtNDI0LDcgKzQ0OSw3IEBACiAKICAgICAgIElmIHRoZSB2YWx1ZSBoYXMgYSBgYG5hbWVgYCBhdHRyaWJ1dGUsIGl0IGlzIHJldHVybmVkIHRvIHVubW9kaWZpZWQuCiAgICAgICBPdGhlcndpc2UgdGhlICpuYW1lKiwgYW5kIHRoZSAqdmFsdWUqIHdpdGggYW55IENSIG9yIExGIGNoYXJhY3RlcnMKLSAgICAgIHJlbW92ZWQsIGFyZSBwYXNzZWQgdG8gdGhlIGBgaGVhZGVyX2ZhY3RvcnlgYCwgYW5kIHRoZSByZXN1bHRpbmcgY3VzdG9tCisgICAgICByZW1vdmVkLCBhcmUgcGFzc2VkIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAsIGFuZCB0aGUgcmVzdWx0aW5nCiAgICAgICBoZWFkZXIgb2JqZWN0IGlzIHJldHVybmVkLiAgQW55IHN1cnJvZ2F0ZWVzY2FwZWQgYnl0ZXMgZ2V0IHR1cm5lZCBpbnRvCiAgICAgICB0aGUgdW5pY29kZSB1bmtub3duLWNoYXJhY3RlciBnbHlwaC4KIApAQCAtNDM0LDkgKzQ1OSw5IEBACiAgICAgICBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYSAnc291cmNlIHZhbHVlJyBpZiBhbmQgb25seSBpZiBpdCBkb2VzIG5vdAogICAgICAgaGF2ZSBhIGBgbmFtZWBgIGF0dHJpYnV0ZSAoaGF2aW5nIGEgYGBuYW1lYGAgYXR0cmlidXRlIG1lYW5zIGl0IGlzIGEKICAgICAgIGhlYWRlciBvYmplY3Qgb2Ygc29tZSBzb3J0KS4gIElmIGEgc291cmNlIHZhbHVlIG5lZWRzIHRvIGJlIHJlZm9sZGVkCi0gICAgICBhY2NvcmRpbmcgdG8gdGhlIHBvbGljeSwgaXQgaXMgY29udmVydGVkIGludG8gYSBjdXN0b20gaGVhZGVyIG9iamVjdCBieQorICAgICAgYWNjb3JkaW5nIHRvIHRoZSBwb2xpY3ksIGl0IGlzIGNvbnZlcnRlZCBpbnRvIGEgaGVhZGVyIG9iamVjdCBieQogICAgICAgcGFzc2luZyB0aGUgKm5hbWUqIGFuZCB0aGUgKnZhbHVlKiB3aXRoIGFueSBDUiBhbmQgTEYgY2hhcmFjdGVycyByZW1vdmVkCi0gICAgICB0byB0aGUgYGBoZWFkZXJfZmFjdG9yeWBgLiAgRm9sZGluZyBvZiBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGlzIGRvbmUgYnkKKyAgICAgIHRvIHRoZSBgYGhlYWRlcl9mYWN0b3J5YGAuICBGb2xkaW5nIG9mIGEgaGVhZGVyIG9iamVjdCBpcyBkb25lIGJ5CiAgICAgICBjYWxsaW5nIGl0cyBgYGZvbGRgYCBtZXRob2Qgd2l0aCB0aGUgY3VycmVudCBwb2xpY3kuCiAKICAgICAgIFNvdXJjZSB2YWx1ZXMgYXJlIHNwbGl0IGludG8gbGluZXMgdXNpbmcgOm1ldGg6YH5zdHIuc3BsaXRsaW5lc2AuICBJZgpAQCAtNDkxLDIzICs1MTYsMjMgQEAKIHRoZSBlbWFpbCBwYWNrYWdlIGlzIGNoYW5nZWQgZnJvbSB0aGUgUHl0aG9uIDMuMiBBUEkgaW4gdGhlIGZvbGxvd2luZyB3YXlzOgogCiAgICAqIFNldHRpbmcgYSBoZWFkZXIgb24gYSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHJlc3VsdHMgaW4gdGhhdAotICAgICBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQuCisgICAgIGhlYWRlciBiZWluZyBwYXJzZWQgYW5kIGEgaGVhZGVyIG9iamVjdCBjcmVhdGVkLgogCiAgICAqIEZldGNoaW5nIGEgaGVhZGVyIHZhbHVlIGZyb20gYSA6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIHJlc3VsdHMKLSAgICAgaW4gdGhhdCBoZWFkZXIgYmVpbmcgcGFyc2VkIGFuZCBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQgYW5kCisgICAgIGluIHRoYXQgaGVhZGVyIGJlaW5nIHBhcnNlZCBhbmQgYSBoZWFkZXIgb2JqZWN0IGNyZWF0ZWQgYW5kCiAgICAgIHJldHVybmVkLgogCi0gICAqIEFueSBjdXN0b20gaGVhZGVyIG9iamVjdCwgb3IgYW55IGhlYWRlciB0aGF0IGlzIHJlZm9sZGVkIGR1ZSB0byB0aGUKKyAgICogQW55IGhlYWRlciBvYmplY3QsIG9yIGFueSBoZWFkZXIgdGhhdCBpcyByZWZvbGRlZCBkdWUgdG8gdGhlCiAgICAgIHBvbGljeSBzZXR0aW5ncywgaXMgZm9sZGVkIHVzaW5nIGFuIGFsZ29yaXRobSB0aGF0IGZ1bGx5IGltcGxlbWVudHMgdGhlCiAgICAgIFJGQyBmb2xkaW5nIGFsZ29yaXRobXMsIGluY2x1ZGluZyBrbm93aW5nIHdoZXJlIGVuY29kZWQgd29yZHMgYXJlIHJlcXVpcmVkCiAgICAgIGFuZCBhbGxvd2VkLgogCiBGcm9tIHRoZSBhcHBsaWNhdGlvbiB2aWV3LCB0aGlzIG1lYW5zIHRoYXQgYW55IGhlYWRlciBvYnRhaW5lZCB0aHJvdWdoIHRoZQotOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpcyBhIGN1c3RvbSBoZWFkZXIgb2JqZWN0IHdpdGggY3VzdG9tCis6Y2xhc3M6YH5lbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIGlzIGEgaGVhZGVyIG9iamVjdCB3aXRoIGV4dHJhCiBhdHRyaWJ1dGVzLCB3aG9zZSBzdHJpbmcgdmFsdWUgaXMgdGhlIGZ1bGx5IGRlY29kZWQgdW5pY29kZSB2YWx1ZSBvZiB0aGUKIGhlYWRlci4gIExpa2V3aXNlLCBhIGhlYWRlciBtYXkgYmUgYXNzaWduZWQgYSBuZXcgdmFsdWUsIG9yIGEgbmV3IGhlYWRlcgogY3JlYXRlZCwgdXNpbmcgYSB1bmljb2RlIHN0cmluZywgYW5kIHRoZSBwb2xpY3kgd2lsbCB0YWtlIGNhcmUgb2YgY29udmVydGluZwogdGhlIHVuaWNvZGUgc3RyaW5nIGludG8gdGhlIGNvcnJlY3QgUkZDIGVuY29kZWQgZm9ybS4KIAotVGhlIGN1c3RvbSBoZWFkZXIgb2JqZWN0cyBhbmQgdGhlaXIgYXR0cmlidXRlcyBhcmUgZGVzY3JpYmVkIGluCitUaGUgaGVhZGVyIG9iamVjdHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgYXJlIGRlc2NyaWJlZCBpbgogOm1vZDpgfmVtYWlsLmhlYWRlcnJlZ2lzdHJ5YC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2VtYWlsLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnJzdAppbmRleCBhNmNiYmNlLi45NWMwYTJmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9lbWFpbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZW1haWwucnN0CkBAIC01Myw2ICs1Myw3IEBACiAgICBlbWFpbC5nZW5lcmF0b3IucnN0CiAgICBlbWFpbC5wb2xpY3kucnN0CiAgICBlbWFpbC5oZWFkZXJyZWdpc3RyeS5yc3QKKyAgIGVtYWlsLmNvbnRlbnRtYW5hZ2VyLnJzdAogICAgZW1haWwubWltZS5yc3QKICAgIGVtYWlsLmhlYWRlci5yc3QKICAgIGVtYWlsLmNoYXJzZXQucnN0CkBAIC05MCwxNSArOTEsMTkgQEAKICstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6Y29uc3Q6YDIuNWAgIHwgUHl0aG9uIDIuMi4yKyBhbmQgUHl0aG9uIDIuMyB8IFB5dGhvbiAyLjEgdG8gMi41ICAgICB8CiArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmAzLjBgICB8IFB5dGhvbiAyLjQgICAgICAgICAgICAgICAgICAgfCBQeXRob24gMi4zIHRvIDIuNSAgICAgfAorfCA6Y29uc3Q6YDMuMGAgIHwgUHl0aG9uIDIuNCBhbmQgUHl0aG9uIDIuNSAgICB8IFB5dGhvbiAyLjMgdG8gMi42ICAgICB8CiArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLXwgOmNvbnN0OmA0LjBgICB8IFB5dGhvbiAyLjUgICAgICAgICAgICAgICAgICAgfCBQeXRob24gMi4zIHRvIDIuNSAgICAgfAorfCA6Y29uc3Q6YDQuMGAgIHwgUHl0aG9uIDIuNSB0byBQeXRob24gMi43ICAgICB8IFB5dGhvbiAyLjMgdG8gMi43ICAgICB8CiArLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgOmNvbnN0OmA1LjBgICB8IFB5dGhvbiAzLjAgYW5kIFB5dGhvbiAzLjEgICAgfCBQeXRob24gMy4wIHRvIDMuMiAgICAgfAogKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IDpjb25zdDpgNS4xYCAgfCBQeXRob24gMy4yICAgICAgICAgICAgICAgICAgIHwgUHl0aG9uIDMuMCB0byAzLjIgICAgIHwKK3wgOmNvbnN0OmA1LjFgICB8IFB5dGhvbiAzLjIgICAgICAgICAgICAgICAgICAgfCBQeXRob24gMy4yICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKK0FmdGVyIFZlcnNpb24gNS4xIChQeXRob24gMy4yKSwgdGhlIGVtYWlsIHBhY2thZ2Ugbm8gbG9uZ2VyIGhhcyBhIHZlcnNpb24gdGhhdAoraXMgc2VwYXJhdGUgZnJvbSB0aGUgUHl0aG9uIHZlcnNpb24uICAoU2VlIHRoZSA6cmVmOmB3aGF0c25ldy1pbmRleGAgZG9jdW1lbnRzCitmb3IgdGhlIHJlc3BlY3RpdmUgUHl0aG9uIHZlcnNpb25zIGZvciBkZXRhaWxzIG9uIGNoYW5nZXMuKQorCiBIZXJlIGFyZSB0aGUgbWFqb3IgZGlmZmVyZW5jZXMgYmV0d2VlbiA6bW9kOmBlbWFpbGAgdmVyc2lvbiA1LjEgYW5kCiB2ZXJzaW9uIDUuMDoKIApAQCAtMjU3LDcgKzI2Miw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSA6bW9kOmBlbWFpbGAgcGFja2FnZSB3YXMgb3JpZ2luYWxseSBwcm90b3R5cGVkIGFzIGEgc2VwYXJhdGUgbGlicmFyeSBjYWxsZWQKLWBtaW1lbGliIDxodHRwOi8vbWltZWxpYi5zZi5uZXQvPmBfLiBDaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHNvIHRoYXQgbWV0aG9kIG5hbWVzCitgbWltZWxpYiA8aHR0cDovL21pbWVsaWIuc291cmNlZm9yZ2UubmV0Lz5gXy4gQ2hhbmdlcyBoYXZlIGJlZW4gbWFkZSBzbyB0aGF0IG1ldGhvZCBuYW1lcwogYXJlIG1vcmUgY29uc2lzdGVudCwgYW5kIHNvbWUgbWV0aG9kcyBvciBtb2R1bGVzIGhhdmUgZWl0aGVyIGJlZW4gYWRkZWQgb3IKIHJlbW92ZWQuICBUaGUgc2VtYW50aWNzIG9mIHNvbWUgb2YgdGhlIG1ldGhvZHMgaGF2ZSBhbHNvIGNoYW5nZWQuICBGb3IgdGhlIG1vc3QKIHBhcnQsIGFueSBmdW5jdGlvbmFsaXR5IGF2YWlsYWJsZSBpbiA6bW9kOmBtaW1lbGliYCBpcyBzdGlsbCBhdmFpbGFibGUgaW4gdGhlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9lbWFpbC51dGlsLnJzdCBiL0RvYy9saWJyYXJ5L2VtYWlsLnV0aWwucnN0CmluZGV4IGY3NTk3NWUuLjIxOWUyODQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2VtYWlsLnV0aWwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2VtYWlsLnV0aWwucnN0CkBAIC05OCwxMiArOTgsOSBAQAogCiAuLiBmdW5jdGlvbjo6IG1rdGltZV90eih0dXBsZSkKIAotICAgVHVybiBhIDEwLXR1cGxlIGFzIHJldHVybmVkIGJ5IDpmdW5jOmBwYXJzZWRhdGVfdHpgIGludG8gYSBVVEMgdGltZXN0YW1wLiAgSXQKLSAgIHRoZSB0aW1lem9uZSBpdGVtIGluIHRoZSB0dXBsZSBpcyBgYE5vbmVgYCwgYXNzdW1lIGxvY2FsIHRpbWUuICBNaW5vcgotICAgZGVmaWNpZW5jeTogOmZ1bmM6YG1rdGltZV90emAgaW50ZXJwcmV0cyB0aGUgZmlyc3QgOCBlbGVtZW50cyBvZiAqdHVwbGUqIGFzIGEKLSAgIGxvY2FsIHRpbWUgYW5kIHRoZW4gY29tcGVuc2F0ZXMgZm9yIHRoZSB0aW1lem9uZSBkaWZmZXJlbmNlLiAgVGhpcyBtYXkgeWllbGQgYQotICAgc2xpZ2h0IGVycm9yIGFyb3VuZCBjaGFuZ2VzIGluIGRheWxpZ2h0IHNhdmluZ3MgdGltZSwgdGhvdWdoIG5vdCB3b3J0aCB3b3JyeWluZwotICAgYWJvdXQgZm9yIGNvbW1vbiB1c2UuCisgICBUdXJuIGEgMTAtdHVwbGUgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YHBhcnNlZGF0ZV90emAgaW50byBhIFVUQworICAgdGltZXN0YW1wIChzZWNvbmRzIHNpbmNlIHRoZSBFcG9jaCkuICBJZiB0aGUgdGltZXpvbmUgaXRlbSBpbiB0aGUKKyAgIHR1cGxlIGlzIGBgTm9uZWBgLCBhc3N1bWUgbG9jYWwgdGltZS4KIAogCiAuLiBmdW5jdGlvbjo6IGZvcm1hdGRhdGUodGltZXZhbD1Ob25lLCBsb2NhbHRpbWU9RmFsc2UsIHVzZWdtdD1GYWxzZSkKQEAgLTIxMCw0ICsyMDcsMyBAQAogLi4gWyNdIE5vdGUgdGhhdCB0aGUgc2lnbiBvZiB0aGUgdGltZXpvbmUgb2Zmc2V0IGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgc2lnbiBvZiB0aGUKICAgIGBgdGltZS50aW1lem9uZWBgIHZhcmlhYmxlIGZvciB0aGUgc2FtZSB0aW1lem9uZTsgdGhlIGxhdHRlciB2YXJpYWJsZSBmb2xsb3dzCiAgICB0aGUgUE9TSVggc3RhbmRhcmQgd2hpbGUgdGhpcyBtb2R1bGUgZm9sbG93cyA6cmZjOmAyODIyYC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW5zdXJlcGlwLnJzdCBiL0RvYy9saWJyYXJ5L2Vuc3VyZXBpcC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU4OWYxYwotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L2Vuc3VyZXBpcC5yc3QKQEAgLTAsMCArMSwxMzEgQEAKKzptb2Q6YGVuc3VyZXBpcGAgLS0tIEJvb3RzdHJhcHBpbmcgdGhlIGBgcGlwYGAgaW5zdGFsbGVyCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBlbnN1cmVwaXAKKyAgIDpzeW5vcHNpczogQm9vdHN0cmFwcGluZyB0aGUgInBpcCIgaW5zdGFsbGVyIGludG8gYW4gZXhpc3RpbmcgUHl0aG9uCisgICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBvciB2aXJ0dWFsIGVudmlyb25tZW50LgorCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworVGhlIDptb2Q6YGVuc3VyZXBpcGAgcGFja2FnZSBwcm92aWRlcyBzdXBwb3J0IGZvciBib290c3RyYXBwaW5nIHRoZSBgYHBpcGBgCitpbnN0YWxsZXIgaW50byBhbiBleGlzdGluZyBQeXRob24gaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwgZW52aXJvbm1lbnQuIFRoaXMKK2Jvb3RzdHJhcHBpbmcgYXBwcm9hY2ggcmVmbGVjdHMgdGhlIGZhY3QgdGhhdCBgYHBpcGBgIGlzIGFuIGluZGVwZW5kZW50Citwcm9qZWN0IHdpdGggaXRzIG93biByZWxlYXNlIGN5Y2xlLCBhbmQgdGhlIGxhdGVzdCBhdmFpbGFibGUgc3RhYmxlIHZlcnNpb24KK2lzIGJ1bmRsZWQgd2l0aCBtYWludGVuYW5jZSBhbmQgZmVhdHVyZSByZWxlYXNlcyBvZiB0aGUgQ1B5dGhvbiByZWZlcmVuY2UKK2ludGVycHJldGVyLgorCitJbiBtb3N0IGNhc2VzLCBlbmQgdXNlcnMgb2YgUHl0aG9uIHNob3VsZG4ndCBuZWVkIHRvIGludm9rZSB0aGlzIG1vZHVsZQorZGlyZWN0bHkgKGFzIGBgcGlwYGAgc2hvdWxkIGJlIGJvb3RzdHJhcHBlZCBieSBkZWZhdWx0KSwgYnV0IGl0IG1heSBiZQorbmVlZGVkIGlmIGluc3RhbGxpbmcgYGBwaXBgYCB3YXMgc2tpcHBlZCB3aGVuIGluc3RhbGxpbmcgUHl0aG9uIChvcgord2hlbiBjcmVhdGluZyBhIHZpcnR1YWwgZW52aXJvbm1lbnQpIG9yIGFmdGVyIGV4cGxpY2l0bHkgdW5pbnN0YWxsaW5nCitgYHBpcGBgLgorCisuLiBub3RlOjoKKworICAgVGhpcyBtb2R1bGUgKmRvZXMgbm90KiBhY2Nlc3MgdGhlIGludGVybmV0LiBBbGwgb2YgdGhlIGNvbXBvbmVudHMKKyAgIG5lZWRlZCB0byBib290c3RyYXAgYGBwaXBgYCBhcmUgaW5jbHVkZWQgYXMgaW50ZXJuYWwgcGFydHMgb2YgdGhlCisgICBwYWNrYWdlLgorCisuLiBzZWVhbHNvOjoKKworICAgOnJlZjpgaW5zdGFsbGluZy1pbmRleGAKKyAgICAgIFRoZSBlbmQgdXNlciBndWlkZSBmb3IgaW5zdGFsbGluZyBQeXRob24gcGFja2FnZXMKKworICAgOnBlcDpgNDUzYDogRXhwbGljaXQgYm9vdHN0cmFwcGluZyBvZiBwaXAgaW4gUHl0aG9uIGluc3RhbGxhdGlvbnMKKyAgICAgIFRoZSBvcmlnaW5hbCByYXRpb25hbGUgYW5kIHNwZWNpZmljYXRpb24gZm9yIHRoaXMgbW9kdWxlLgorCisKK0NvbW1hbmQgbGluZSBpbnRlcmZhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgaXMgaW52b2tlZCB1c2luZyB0aGUgaW50ZXJwcmV0ZXIncyBgYC1tYGAgc3dpdGNoLgorCitUaGUgc2ltcGxlc3QgcG9zc2libGUgaW52b2NhdGlvbiBpczo6CisKKyAgICBweXRob24gLW0gZW5zdXJlcGlwCisKK1RoaXMgaW52b2NhdGlvbiB3aWxsIGluc3RhbGwgYGBwaXBgYCBpZiBpdCBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQsCitidXQgb3RoZXJ3aXNlIGRvZXMgbm90aGluZy4gVG8gZW5zdXJlIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBgYHBpcGBgCitpcyBhdCBsZWFzdCBhcyByZWNlbnQgYXMgdGhlIG9uZSBidW5kbGVkIHdpdGggYGBlbnN1cmVwaXBgYCwgcGFzcyB0aGUKK2BgLS11cGdyYWRlYGAgb3B0aW9uOjoKKworICAgIHB5dGhvbiAtbSBlbnN1cmVwaXAgLS11cGdyYWRlCisKK0J5IGRlZmF1bHQsIGBgcGlwYGAgaXMgaW5zdGFsbGVkIGludG8gdGhlIGN1cnJlbnQgdmlydHVhbCBlbnZpcm9ubWVudAorKGlmIG9uZSBpcyBhY3RpdmUpIG9yIGludG8gdGhlIHN5c3RlbSBzaXRlIHBhY2thZ2VzIChpZiB0aGVyZSBpcyBubworYWN0aXZlIHZpcnR1YWwgZW52aXJvbm1lbnQpLiBUaGUgaW5zdGFsbGF0aW9uIGxvY2F0aW9uIGNhbiBiZSBjb250cm9sbGVkCit0aHJvdWdoIHR3byBhZGRpdGlvbmFsIGNvbW1hbmQgbGluZSBvcHRpb25zOgorCisqIGBgLS1yb290IDxkaXI+YGA6IEluc3RhbGxzIGBgcGlwYGAgcmVsYXRpdmUgdG8gdGhlIGdpdmVuIHJvb3QgZGlyZWN0b3J5CisgIHJhdGhlciB0aGFuIHRoZSByb290IG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHZpcnR1YWwgZW52aXJvbm1lbnQgKGlmIGFueSkKKyAgb3IgdGhlIGRlZmF1bHQgcm9vdCBmb3IgdGhlIGN1cnJlbnQgUHl0aG9uIGluc3RhbGxhdGlvbi4KKyogYGAtLXVzZXJgYDogSW5zdGFsbHMgYGBwaXBgYCBpbnRvIHRoZSB1c2VyIHNpdGUgcGFja2FnZXMgZGlyZWN0b3J5IHJhdGhlcgorICB0aGFuIGdsb2JhbGx5IGZvciB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uICh0aGlzIG9wdGlvbiBpcyBub3QKKyAgcGVybWl0dGVkIGluc2lkZSBhbiBhY3RpdmUgdmlydHVhbCBlbnZpcm9ubWVudCkuCisKK0J5IGRlZmF1bHQsIHRoZSBzY3JpcHRzIGBgcGlwWGBgIGFuZCBgYHBpcFguWWBgIHdpbGwgYmUgaW5zdGFsbGVkICh3aGVyZQorWC5ZIHN0YW5kcyBmb3IgdGhlIHZlcnNpb24gb2YgUHl0aG9uIHVzZWQgdG8gaW52b2tlIGBgZW5zdXJlcGlwYGApLiBUaGUKK3NjcmlwdHMgaW5zdGFsbGVkIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggdHdvIGFkZGl0aW9uYWwgY29tbWFuZCBsaW5lCitvcHRpb25zOgorCisqIGBgLS1hbHRpbnN0YWxsYGA6IGlmIGFuIGFsdGVybmF0ZSBpbnN0YWxsYXRpb24gaXMgcmVxdWVzdGVkLCB0aGUgYGBwaXBYYGAKKyAgc2NyaXB0IHdpbGwgKm5vdCogYmUgaW5zdGFsbGVkLgorCisqIGBgLS1kZWZhdWx0LXBpcGBgOiBpZiBhICJkZWZhdWx0IHBpcCIgaW5zdGFsbGF0aW9uIGlzIHJlcXVlc3RlZCwgdGhlCisgICBgYHBpcGBgIHNjcmlwdCB3aWxsIGJlIGluc3RhbGxlZCBpbiBhZGRpdGlvbiB0byB0aGUgdHdvIHJlZ3VsYXIgc2NyaXB0cy4KKworUHJvdmlkaW5nIGJvdGggb2YgdGhlIHNjcmlwdCBzZWxlY3Rpb24gb3B0aW9ucyB3aWxsIHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorCisKK01vZHVsZSBBUEkKKy0tLS0tLS0tLS0KKworOm1vZDpgZW5zdXJlcGlwYCBleHBvc2VzIHR3byBmdW5jdGlvbnMgZm9yIHByb2dyYW1tYXRpYyB1c2U6CisKKy4uIGZ1bmN0aW9uOjogdmVyc2lvbigpCisKKyAgIFJldHVybnMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIHBpcCB0aGF0IHdpbGwgYmUKKyAgIGluc3RhbGxlZCB3aGVuIGJvb3RzdHJhcHBpbmcgYW4gZW52aXJvbm1lbnQuCisKKy4uIGZ1bmN0aW9uOjogYm9vdHN0cmFwKHJvb3Q9Tm9uZSwgdXBncmFkZT1GYWxzZSwgdXNlcj1GYWxzZSwgXAorICAgICAgICAgICAgICAgICAgICAgICAgYWx0aW5zdGFsbD1GYWxzZSwgZGVmYXVsdF9waXA9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eT0wKQorCisgICBCb290c3RyYXBzIGBgcGlwYGAgaW50byB0aGUgY3VycmVudCBvciBkZXNpZ25hdGVkIGVudmlyb25tZW50LgorCisgICAqcm9vdCogc3BlY2lmaWVzIGFuIGFsdGVybmF0aXZlIHJvb3QgZGlyZWN0b3J5IHRvIGluc3RhbGwgcmVsYXRpdmUgdG8uCisgICBJZiAqcm9vdCogaXMgTm9uZSwgdGhlbiBpbnN0YWxsYXRpb24gdXNlcyB0aGUgZGVmYXVsdCBpbnN0YWxsIGxvY2F0aW9uCisgICBmb3IgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuCisKKyAgICp1cGdyYWRlKiBpbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdG8gdXBncmFkZSBhbiBleGlzdGluZyBpbnN0YWxsYXRpb24KKyAgIG9mIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiBgYHBpcGBgIHRvIHRoZSBidW5kbGVkIHZlcnNpb24uCisKKyAgICp1c2VyKiBpbmRpY2F0ZXMgd2hldGhlciB0byB1c2UgdGhlIHVzZXIgc2NoZW1lIHJhdGhlciB0aGFuIGluc3RhbGxpbmcKKyAgIGdsb2JhbGx5LgorCisgICBCeSBkZWZhdWx0LCB0aGUgc2NyaXB0cyBgYHBpcFhgYCBhbmQgYGBwaXBYLllgYCB3aWxsIGJlIGluc3RhbGxlZCAod2hlcmUKKyAgIFguWSBzdGFuZHMgZm9yIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUHl0aG9uKS4KKworICAgSWYgKmFsdGluc3RhbGwqIGlzIHNldCwgdGhlbiBgYHBpcFhgYCB3aWxsICpub3QqIGJlIGluc3RhbGxlZC4KKworICAgSWYgKmRlZmF1bHRfcGlwKiBpcyBzZXQsIHRoZW4gYGBwaXBgYCB3aWxsIGJlIGluc3RhbGxlZCBpbiBhZGRpdGlvbiB0bworICAgdGhlIHR3byByZWd1bGFyIHNjcmlwdHMuCisKKyAgIFNldHRpbmcgYm90aCAqYWx0aW5zdGFsbCogYW5kICpkZWZhdWx0X3BpcCogd2lsbCB0cmlnZ2VyCisgICA6ZXhjOmBWYWx1ZUVycm9yYC4KKworICAgKnZlcmJvc2l0eSogY29udHJvbHMgdGhlIGxldmVsIG9mIG91dHB1dCB0byA6ZGF0YTpgc3lzLnN0ZG91dGAgZnJvbSB0aGUKKyAgIGJvb3RzdHJhcHBpbmcgb3BlcmF0aW9uLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJvb3RzdHJhcHBpbmcgcHJvY2VzcyBoYXMgc2lkZSBlZmZlY3RzIG9uIGJvdGggYGBzeXMucGF0aGBgIGFuZAorICAgICAgYGBvcy5lbnZpcm9uYGAuIEludm9raW5nIHRoZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGluIGEgc3VicHJvY2VzcworICAgICAgaW5zdGVhZCBhbGxvd3MgdGhlc2Ugc2lkZSBlZmZlY3RzIHRvIGJlIGF2b2lkZWQuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYm9vdHN0cmFwcGluZyBwcm9jZXNzIG1heSBpbnN0YWxsIGFkZGl0aW9uYWwgbW9kdWxlcyByZXF1aXJlZCBieQorICAgICAgYGBwaXBgYCwgYnV0IG90aGVyIHNvZnR3YXJlIHNob3VsZCBub3QgYXNzdW1lIHRob3NlIGRlcGVuZGVuY2llcyB3aWxsCisgICAgICBhbHdheXMgYmUgcHJlc2VudCBieSBkZWZhdWx0IChhcyB0aGUgZGVwZW5kZW5jaWVzIG1heSBiZSByZW1vdmVkIGluIGEKKyAgICAgIGZ1dHVyZSB2ZXJzaW9uIG9mIGBgcGlwYGApLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZW51bS5yc3QgYi9Eb2MvbGlicmFyeS9lbnVtLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzc2ZTg3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvZW51bS5yc3QKQEAgLTAsMCArMSw3NTYgQEAKKzptb2Q6YGVudW1gIC0tLSBTdXBwb3J0IGZvciBlbnVtZXJhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogZW51bQorICAgOnN5bm9wc2lzOiBJbXBsZW1lbnRhdGlvbiBvZiBhbiBlbnVtZXJhdGlvbiBjbGFzcy4KKworLi4gOm1vZHVsZWF1dGhvcjo6IEV0aGFuIEZ1cm1hbiA8ZXRoYW5Ac3RvbmVsZWFmLnVzPgorLi4gOnNlY3Rpb25hdXRob3I6OiBCYXJyeSBXYXJzYXcgPGJhcnJ5QHB5dGhvbi5vcmc+LAorLi4gOnNlY3Rpb25hdXRob3I6OiBFbGkgQmVuZGVyc2t5IDxlbGliZW5AZ21haWwuY29tPiwKKy4uIDpzZWN0aW9uYXV0aG9yOjogRXRoYW4gRnVybWFuIDxldGhhbkBzdG9uZWxlYWYudXM+CisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9lbnVtLnB5YAorCistLS0tLS0tLS0tLS0tLS0tCisKK0FuIGVudW1lcmF0aW9uIGlzIGEgc2V0IG9mIHN5bWJvbGljIG5hbWVzIChtZW1iZXJzKSBib3VuZCB0byB1bmlxdWUsCitjb25zdGFudCB2YWx1ZXMuICBXaXRoaW4gYW4gZW51bWVyYXRpb24sIHRoZSBtZW1iZXJzIGNhbiBiZSBjb21wYXJlZAorYnkgaWRlbnRpdHksIGFuZCB0aGUgZW51bWVyYXRpb24gaXRzZWxmIGNhbiBiZSBpdGVyYXRlZCBvdmVyLgorCisKK01vZHVsZSBDb250ZW50cworLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIGRlZmluZXMgdHdvIGVudW1lcmF0aW9uIGNsYXNzZXMgdGhhdCBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdW5pcXVlCitzZXRzIG9mIG5hbWVzIGFuZCB2YWx1ZXM6IDpjbGFzczpgRW51bWAgYW5kIDpjbGFzczpgSW50RW51bWAuICBJdCBhbHNvIGRlZmluZXMKK29uZSBkZWNvcmF0b3IsIDpmdW5jOmB1bmlxdWVgLgorCisuLiBjbGFzczo6IEVudW0KKworICAgIEJhc2UgY2xhc3MgZm9yIGNyZWF0aW5nIGVudW1lcmF0ZWQgY29uc3RhbnRzLiAgU2VlIHNlY3Rpb24KKyAgICBgRnVuY3Rpb25hbCBBUElgXyBmb3IgYW4gYWx0ZXJuYXRlIGNvbnN0cnVjdGlvbiBzeW50YXguCisKKy4uIGNsYXNzOjogSW50RW51bQorCisgICAgQmFzZSBjbGFzcyBmb3IgY3JlYXRpbmcgZW51bWVyYXRlZCBjb25zdGFudHMgdGhhdCBhcmUgYWxzbworICAgIHN1YmNsYXNzZXMgb2YgOmNsYXNzOmBpbnRgLgorCisuLiBmdW5jdGlvbjo6IHVuaXF1ZQorCisgICAgRW51bSBjbGFzcyBkZWNvcmF0b3IgdGhhdCBlbnN1cmVzIG9ubHkgb25lIG5hbWUgaXMgYm91bmQgdG8gYW55IG9uZSB2YWx1ZS4KKworCitDcmVhdGluZyBhbiBFbnVtCistLS0tLS0tLS0tLS0tLS0tCisKK0VudW1lcmF0aW9ucyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgOmtleXdvcmQ6YGNsYXNzYCBzeW50YXgsIHdoaWNoIG1ha2VzIHRoZW0KK2Vhc3kgdG8gcmVhZCBhbmQgd3JpdGUuICBBbiBhbHRlcm5hdGl2ZSBjcmVhdGlvbiBtZXRob2QgaXMgZGVzY3JpYmVkIGluCitgRnVuY3Rpb25hbCBBUElgXy4gIFRvIGRlZmluZSBhbiBlbnVtZXJhdGlvbiwgc3ViY2xhc3MgOmNsYXNzOmBFbnVtYCBhcworZm9sbG93czo6CisKKyAgICA+Pj4gZnJvbSBlbnVtIGltcG9ydCBFbnVtCisgICAgPj4+IGNsYXNzIENvbG9yKEVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uICAgICBibHVlID0gMworICAgIC4uLgorCisuLiBub3RlOjogTm9tZW5jbGF0dXJlCisKKyAgLSBUaGUgY2xhc3MgOmNsYXNzOmBDb2xvcmAgaXMgYW4gKmVudW1lcmF0aW9uKiAob3IgKmVudW0qKQorICAtIFRoZSBhdHRyaWJ1dGVzIDphdHRyOmBDb2xvci5yZWRgLCA6YXR0cjpgQ29sb3IuZ3JlZW5gLCBldGMuLCBhcmUKKyAgICAqZW51bWVyYXRpb24gbWVtYmVycyogKG9yICplbnVtIG1lbWJlcnMqKS4KKyAgLSBUaGUgZW51bSBtZW1iZXJzIGhhdmUgKm5hbWVzKiBhbmQgKnZhbHVlcyogKHRoZSBuYW1lIG9mCisgICAgOmF0dHI6YENvbG9yLnJlZGAgaXMgYGByZWRgYCwgdGhlIHZhbHVlIG9mIDphdHRyOmBDb2xvci5ibHVlYCBpcworICAgIGBgM2BgLCBldGMuKQorCisuLiBub3RlOjoKKworICAgIEV2ZW4gdGhvdWdoIHdlIHVzZSB0aGUgOmtleXdvcmQ6YGNsYXNzYCBzeW50YXggdG8gY3JlYXRlIEVudW1zLCBFbnVtcworICAgIGFyZSBub3Qgbm9ybWFsIFB5dGhvbiBjbGFzc2VzLiAgU2VlIGBIb3cgYXJlIEVudW1zIGRpZmZlcmVudD9gXyBmb3IKKyAgICBtb3JlIGRldGFpbHMuCisKK0VudW1lcmF0aW9uIG1lbWJlcnMgaGF2ZSBodW1hbiByZWFkYWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb25zOjoKKworICAgID4+PiBwcmludChDb2xvci5yZWQpCisgICAgQ29sb3IucmVkCisKKy4uLndoaWxlIHRoZWlyIGBgcmVwcmBgIGhhcyBtb3JlIGluZm9ybWF0aW9uOjoKKworICAgID4+PiBwcmludChyZXByKENvbG9yLnJlZCkpCisgICAgPENvbG9yLnJlZDogMT4KKworVGhlICp0eXBlKiBvZiBhbiBlbnVtZXJhdGlvbiBtZW1iZXIgaXMgdGhlIGVudW1lcmF0aW9uIGl0IGJlbG9uZ3MgdG86OgorCisgICAgPj4+IHR5cGUoQ29sb3IucmVkKQorICAgIDxlbnVtICdDb2xvcic+CisgICAgPj4+IGlzaW5zdGFuY2UoQ29sb3IuZ3JlZW4sIENvbG9yKQorICAgIFRydWUKKyAgICA+Pj4KKworRW51bSBtZW1iZXJzIGFsc28gaGF2ZSBhIHByb3BlcnR5IHRoYXQgY29udGFpbnMganVzdCB0aGVpciBpdGVtIG5hbWU6OgorCisgICAgPj4+IHByaW50KENvbG9yLnJlZC5uYW1lKQorICAgIHJlZAorCitFbnVtZXJhdGlvbnMgc3VwcG9ydCBpdGVyYXRpb24sIGluIGRlZmluaXRpb24gb3JkZXI6OgorCisgICAgPj4+IGNsYXNzIFNoYWtlKEVudW0pOgorICAgIC4uLiAgICAgdmFuaWxsYSA9IDcKKyAgICAuLi4gICAgIGNob2NvbGF0ZSA9IDQKKyAgICAuLi4gICAgIGNvb2tpZXMgPSA5CisgICAgLi4uICAgICBtaW50ID0gMworICAgIC4uLgorICAgID4+PiBmb3Igc2hha2UgaW4gU2hha2U6CisgICAgLi4uICAgICBwcmludChzaGFrZSkKKyAgICAuLi4KKyAgICBTaGFrZS52YW5pbGxhCisgICAgU2hha2UuY2hvY29sYXRlCisgICAgU2hha2UuY29va2llcworICAgIFNoYWtlLm1pbnQKKworRW51bWVyYXRpb24gbWVtYmVycyBhcmUgaGFzaGFibGUsIHNvIHRoZXkgY2FuIGJlIHVzZWQgaW4gZGljdGlvbmFyaWVzIGFuZCBzZXRzOjoKKworICAgID4+PiBhcHBsZXMgPSB7fQorICAgID4+PiBhcHBsZXNbQ29sb3IucmVkXSA9ICdyZWQgZGVsaWNpb3VzJworICAgID4+PiBhcHBsZXNbQ29sb3IuZ3JlZW5dID0gJ2dyYW5ueSBzbWl0aCcKKyAgICA+Pj4gYXBwbGVzID09IHtDb2xvci5yZWQ6ICdyZWQgZGVsaWNpb3VzJywgQ29sb3IuZ3JlZW46ICdncmFubnkgc21pdGgnfQorICAgIFRydWUKKworCitQcm9ncmFtbWF0aWMgYWNjZXNzIHRvIGVudW1lcmF0aW9uIG1lbWJlcnMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21ldGltZXMgaXQncyB1c2VmdWwgdG8gYWNjZXNzIG1lbWJlcnMgaW4gZW51bWVyYXRpb25zIHByb2dyYW1tYXRpY2FsbHkgKGkuZS4KK3NpdHVhdGlvbnMgd2hlcmUgYGBDb2xvci5yZWRgYCB3b24ndCBkbyBiZWNhdXNlIHRoZSBleGFjdCBjb2xvciBpcyBub3Qga25vd24KK2F0IHByb2dyYW0td3JpdGluZyB0aW1lKS4gIGBgRW51bWBgIGFsbG93cyBzdWNoIGFjY2Vzczo6CisKKyAgICA+Pj4gQ29sb3IoMSkKKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvcigzKQorICAgIDxDb2xvci5ibHVlOiAzPgorCitJZiB5b3Ugd2FudCB0byBhY2Nlc3MgZW51bSBtZW1iZXJzIGJ5ICpuYW1lKiwgdXNlIGl0ZW0gYWNjZXNzOjoKKworICAgID4+PiBDb2xvclsncmVkJ10KKyAgICA8Q29sb3IucmVkOiAxPgorICAgID4+PiBDb2xvclsnZ3JlZW4nXQorICAgIDxDb2xvci5ncmVlbjogMj4KKworSWYgeW91IGhhdmUgYW4gZW51bSBtZW1iZXIgYW5kIG5lZWQgaXRzIDphdHRyOmBuYW1lYCBvciA6YXR0cjpgdmFsdWVgOjoKKworICAgID4+PiBtZW1iZXIgPSBDb2xvci5yZWQKKyAgICA+Pj4gbWVtYmVyLm5hbWUKKyAgICAncmVkJworICAgID4+PiBtZW1iZXIudmFsdWUKKyAgICAxCisKKworRHVwbGljYXRpbmcgZW51bSBtZW1iZXJzIGFuZCB2YWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0hhdmluZyB0d28gZW51bSBtZW1iZXJzIHdpdGggdGhlIHNhbWUgbmFtZSBpcyBpbnZhbGlkOjoKKworICAgID4+PiBjbGFzcyBTaGFwZShFbnVtKToKKyAgICAuLi4gICAgIHNxdWFyZSA9IDIKKyAgICAuLi4gICAgIHNxdWFyZSA9IDMKKyAgICAuLi4KKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVHlwZUVycm9yOiBBdHRlbXB0ZWQgdG8gcmV1c2Uga2V5OiAnc3F1YXJlJworCitIb3dldmVyLCB0d28gZW51bSBtZW1iZXJzIGFyZSBhbGxvd2VkIHRvIGhhdmUgdGhlIHNhbWUgdmFsdWUuICBHaXZlbiB0d28gbWVtYmVycworQSBhbmQgQiB3aXRoIHRoZSBzYW1lIHZhbHVlIChhbmQgQSBkZWZpbmVkIGZpcnN0KSwgQiBpcyBhbiBhbGlhcyB0byBBLiAgQnktdmFsdWUKK2xvb2t1cCBvZiB0aGUgdmFsdWUgb2YgQSBhbmQgQiB3aWxsIHJldHVybiBBLiAgQnktbmFtZSBsb29rdXAgb2YgQiB3aWxsIGFsc28KK3JldHVybiBBOjoKKworICAgID4+PiBjbGFzcyBTaGFwZShFbnVtKToKKyAgICAuLi4gICAgIHNxdWFyZSA9IDIKKyAgICAuLi4gICAgIGRpYW1vbmQgPSAxCisgICAgLi4uICAgICBjaXJjbGUgPSAzCisgICAgLi4uICAgICBhbGlhc19mb3Jfc3F1YXJlID0gMgorICAgIC4uLgorICAgID4+PiBTaGFwZS5zcXVhcmUKKyAgICA8U2hhcGUuc3F1YXJlOiAyPgorICAgID4+PiBTaGFwZS5hbGlhc19mb3Jfc3F1YXJlCisgICAgPFNoYXBlLnNxdWFyZTogMj4KKyAgICA+Pj4gU2hhcGUoMikKKyAgICA8U2hhcGUuc3F1YXJlOiAyPgorCisuLiBub3RlOjoKKworICAgIEF0dGVtcHRpbmcgdG8gY3JlYXRlIGEgbWVtYmVyIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbiBhbHJlYWR5CisgICAgZGVmaW5lZCBhdHRyaWJ1dGUgKGFub3RoZXIgbWVtYmVyLCBhIG1ldGhvZCwgZXRjLikgb3IgYXR0ZW1wdGluZyB0byBjcmVhdGUKKyAgICBhbiBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgbWVtYmVyIGlzIG5vdCBhbGxvd2VkLgorCisKK0Vuc3VyaW5nIHVuaXF1ZSBlbnVtZXJhdGlvbiB2YWx1ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgZW51bWVyYXRpb25zIGFsbG93IG11bHRpcGxlIG5hbWVzIGFzIGFsaWFzZXMgZm9yIHRoZSBzYW1lIHZhbHVlLgorV2hlbiB0aGlzIGJlaGF2aW9yIGlzbid0IGRlc2lyZWQsIHRoZSBmb2xsb3dpbmcgZGVjb3JhdG9yIGNhbiBiZSB1c2VkIHRvCitlbnN1cmUgZWFjaCB2YWx1ZSBpcyB1c2VkIG9ubHkgb25jZSBpbiB0aGUgZW51bWVyYXRpb246CisKKy4uIGRlY29yYXRvcjo6IHVuaXF1ZQorCitBIDprZXl3b3JkOmBjbGFzc2AgZGVjb3JhdG9yIHNwZWNpZmljYWxseSBmb3IgZW51bWVyYXRpb25zLiAgSXQgc2VhcmNoZXMgYW4KK2VudW1lcmF0aW9uJ3MgOmF0dHI6YF9fbWVtYmVyc19fYCBnYXRoZXJpbmcgYW55IGFsaWFzZXMgaXQgZmluZHM7IGlmIGFueSBhcmUKK2ZvdW5kIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCB3aXRoIHRoZSBkZXRhaWxzOjoKKworICAgID4+PiBmcm9tIGVudW0gaW1wb3J0IEVudW0sIHVuaXF1ZQorICAgID4+PiBAdW5pcXVlCisgICAgLi4uIGNsYXNzIE1pc3Rha2UoRW51bSk6CisgICAgLi4uICAgICBvbmUgPSAxCisgICAgLi4uICAgICB0d28gPSAyCisgICAgLi4uICAgICB0aHJlZSA9IDMKKyAgICAuLi4gICAgIGZvdXIgPSAzCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGR1cGxpY2F0ZSB2YWx1ZXMgZm91bmQgaW4gPGVudW0gJ01pc3Rha2UnPjogZm91ciAtPiB0aHJlZQorCisKK0l0ZXJhdGlvbgorLS0tLS0tLS0tCisKK0l0ZXJhdGluZyBvdmVyIHRoZSBtZW1iZXJzIG9mIGFuIGVudW0gZG9lcyBub3QgcHJvdmlkZSB0aGUgYWxpYXNlczo6CisKKyAgICA+Pj4gbGlzdChTaGFwZSkKKyAgICBbPFNoYXBlLnNxdWFyZTogMj4sIDxTaGFwZS5kaWFtb25kOiAxPiwgPFNoYXBlLmNpcmNsZTogMz5dCisKK1RoZSBzcGVjaWFsIGF0dHJpYnV0ZSBgYF9fbWVtYmVyc19fYGAgaXMgYW4gb3JkZXJlZCBkaWN0aW9uYXJ5IG1hcHBpbmcgbmFtZXMKK3RvIG1lbWJlcnMuICBJdCBpbmNsdWRlcyBhbGwgbmFtZXMgZGVmaW5lZCBpbiB0aGUgZW51bWVyYXRpb24sIGluY2x1ZGluZyB0aGUKK2FsaWFzZXM6OgorCisgICAgPj4+IGZvciBuYW1lLCBtZW1iZXIgaW4gU2hhcGUuX19tZW1iZXJzX18uaXRlbXMoKToKKyAgICAuLi4gICAgIG5hbWUsIG1lbWJlcgorICAgIC4uLgorICAgICgnc3F1YXJlJywgPFNoYXBlLnNxdWFyZTogMj4pCisgICAgKCdkaWFtb25kJywgPFNoYXBlLmRpYW1vbmQ6IDE+KQorICAgICgnY2lyY2xlJywgPFNoYXBlLmNpcmNsZTogMz4pCisgICAgKCdhbGlhc19mb3Jfc3F1YXJlJywgPFNoYXBlLnNxdWFyZTogMj4pCisKK1RoZSBgYF9fbWVtYmVyc19fYGAgYXR0cmlidXRlIGNhbiBiZSB1c2VkIGZvciBkZXRhaWxlZCBwcm9ncmFtbWF0aWMgYWNjZXNzIHRvCit0aGUgZW51bWVyYXRpb24gbWVtYmVycy4gIEZvciBleGFtcGxlLCBmaW5kaW5nIGFsbCB0aGUgYWxpYXNlczo6CisKKyAgICA+Pj4gW25hbWUgZm9yIG5hbWUsIG1lbWJlciBpbiBTaGFwZS5fX21lbWJlcnNfXy5pdGVtcygpIGlmIG1lbWJlci5uYW1lICE9IG5hbWVdCisgICAgWydhbGlhc19mb3Jfc3F1YXJlJ10KKworCitDb21wYXJpc29ucworLS0tLS0tLS0tLS0KKworRW51bWVyYXRpb24gbWVtYmVycyBhcmUgY29tcGFyZWQgYnkgaWRlbnRpdHk6OgorCisgICAgPj4+IENvbG9yLnJlZCBpcyBDb2xvci5yZWQKKyAgICBUcnVlCisgICAgPj4+IENvbG9yLnJlZCBpcyBDb2xvci5ibHVlCisgICAgRmFsc2UKKyAgICA+Pj4gQ29sb3IucmVkIGlzIG5vdCBDb2xvci5ibHVlCisgICAgVHJ1ZQorCitPcmRlcmVkIGNvbXBhcmlzb25zIGJldHdlZW4gZW51bWVyYXRpb24gdmFsdWVzIGFyZSAqbm90KiBzdXBwb3J0ZWQuICBFbnVtCittZW1iZXJzIGFyZSBub3QgaW50ZWdlcnMgKGJ1dCBzZWUgYEludEVudW1gXyBiZWxvdyk6OgorCisgICAgPj4+IENvbG9yLnJlZCA8IENvbG9yLmJsdWUKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIFR5cGVFcnJvcjogdW5vcmRlcmFibGUgdHlwZXM6IENvbG9yKCkgPCBDb2xvcigpCisKK0VxdWFsaXR5IGNvbXBhcmlzb25zIGFyZSBkZWZpbmVkIHRob3VnaDo6CisKKyAgICA+Pj4gQ29sb3IuYmx1ZSA9PSBDb2xvci5yZWQKKyAgICBGYWxzZQorICAgID4+PiBDb2xvci5ibHVlICE9IENvbG9yLnJlZAorICAgIFRydWUKKyAgICA+Pj4gQ29sb3IuYmx1ZSA9PSBDb2xvci5ibHVlCisgICAgVHJ1ZQorCitDb21wYXJpc29ucyBhZ2FpbnN0IG5vbi1lbnVtZXJhdGlvbiB2YWx1ZXMgd2lsbCBhbHdheXMgY29tcGFyZSBub3QgZXF1YWwKKyhhZ2FpbiwgOmNsYXNzOmBJbnRFbnVtYCB3YXMgZXhwbGljaXRseSBkZXNpZ25lZCB0byBiZWhhdmUgZGlmZmVyZW50bHksIHNlZQorYmVsb3cpOjoKKworICAgID4+PiBDb2xvci5ibHVlID09IDIKKyAgICBGYWxzZQorCisKK0FsbG93ZWQgbWVtYmVycyBhbmQgYXR0cmlidXRlcyBvZiBlbnVtZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGV4YW1wbGVzIGFib3ZlIHVzZSBpbnRlZ2VycyBmb3IgZW51bWVyYXRpb24gdmFsdWVzLiAgVXNpbmcgaW50ZWdlcnMgaXMKK3Nob3J0IGFuZCBoYW5keSAoYW5kIHByb3ZpZGVkIGJ5IGRlZmF1bHQgYnkgdGhlIGBGdW5jdGlvbmFsIEFQSWBfKSwgYnV0IG5vdAorc3RyaWN0bHkgZW5mb3JjZWQuICBJbiB0aGUgdmFzdCBtYWpvcml0eSBvZiB1c2UtY2FzZXMsIG9uZSBkb2Vzbid0IGNhcmUgd2hhdAordGhlIGFjdHVhbCB2YWx1ZSBvZiBhbiBlbnVtZXJhdGlvbiBpcy4gIEJ1dCBpZiB0aGUgdmFsdWUgKmlzKiBpbXBvcnRhbnQsCitlbnVtZXJhdGlvbnMgY2FuIGhhdmUgYXJiaXRyYXJ5IHZhbHVlcy4KKworRW51bWVyYXRpb25zIGFyZSBQeXRob24gY2xhc3NlcywgYW5kIGNhbiBoYXZlIG1ldGhvZHMgYW5kIHNwZWNpYWwgbWV0aG9kcyBhcwordXN1YWwuICBJZiB3ZSBoYXZlIHRoaXMgZW51bWVyYXRpb246OgorCisgICAgPj4+IGNsYXNzIE1vb2QoRW51bSk6CisgICAgLi4uICAgICBmdW5reSA9IDEKKyAgICAuLi4gICAgIGhhcHB5ID0gMworICAgIC4uLgorICAgIC4uLiAgICAgZGVmIGRlc2NyaWJlKHNlbGYpOgorICAgIC4uLiAgICAgICAgICMgc2VsZiBpcyB0aGUgbWVtYmVyIGhlcmUKKyAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5uYW1lLCBzZWxmLnZhbHVlCisgICAgLi4uCisgICAgLi4uICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAuLi4gICAgICAgICByZXR1cm4gJ215IGN1c3RvbSBzdHIhIHswfScuZm9ybWF0KHNlbGYudmFsdWUpCisgICAgLi4uCisgICAgLi4uICAgICBAY2xhc3NtZXRob2QKKyAgICAuLi4gICAgIGRlZiBmYXZvcml0ZV9tb29kKGNscyk6CisgICAgLi4uICAgICAgICAgIyBjbHMgaGVyZSBpcyB0aGUgZW51bWVyYXRpb24KKyAgICAuLi4gICAgICAgICByZXR1cm4gY2xzLmhhcHB5CisgICAgLi4uCisKK1RoZW46OgorCisgICAgPj4+IE1vb2QuZmF2b3JpdGVfbW9vZCgpCisgICAgPE1vb2QuaGFwcHk6IDM+CisgICAgPj4+IE1vb2QuaGFwcHkuZGVzY3JpYmUoKQorICAgICgnaGFwcHknLCAzKQorICAgID4+PiBzdHIoTW9vZC5mdW5reSkKKyAgICAnbXkgY3VzdG9tIHN0ciEgMScKKworVGhlIHJ1bGVzIGZvciB3aGF0IGlzIGFsbG93ZWQgYXJlIGFzIGZvbGxvd3M6IF9zdW5kZXJfIG5hbWVzIChzdGFydGluZyBhbmQKK2VuZGluZyB3aXRoIGEgc2luZ2xlIHVuZGVyc2NvcmUpIGFyZSByZXNlcnZlZCBieSBlbnVtIGFuZCBjYW5ub3QgYmUgdXNlZDsKK2FsbCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgd2l0aGluIGFuIGVudW1lcmF0aW9uIHdpbGwgYmVjb21lIG1lbWJlcnMgb2YgdGhpcworZW51bWVyYXRpb24sIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiAqX19kdW5kZXJfXyogbmFtZXMgYW5kIGRlc2NyaXB0b3JzIChtZXRob2RzCithcmUgYWxzbyBkZXNjcmlwdG9ycykuCisKK05vdGU6ICBpZiB5b3VyIGVudW1lcmF0aW9uIGRlZmluZXMgOm1ldGg6YF9fbmV3X19gIGFuZC9vciA6bWV0aDpgX19pbml0X19gIHRoZW4KK3doYXRldmVyIHZhbHVlKHMpIHdlcmUgZ2l2ZW4gdG8gdGhlIGVudW0gbWVtYmVyIHdpbGwgYmUgcGFzc2VkIGludG8gdGhvc2UKK21ldGhvZHMuICBTZWUgYFBsYW5ldGBfIGZvciBhbiBleGFtcGxlLgorCisKK1Jlc3RyaWN0ZWQgc3ViY2xhc3Npbmcgb2YgZW51bWVyYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTdWJjbGFzc2luZyBhbiBlbnVtZXJhdGlvbiBpcyBhbGxvd2VkIG9ubHkgaWYgdGhlIGVudW1lcmF0aW9uIGRvZXMgbm90IGRlZmluZQorYW55IG1lbWJlcnMuICBTbyB0aGlzIGlzIGZvcmJpZGRlbjo6CisKKyAgICA+Pj4gY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAuLi4gICAgIHBpbmsgPSAxNworICAgIC4uLgorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBUeXBlRXJyb3I6IENhbm5vdCBleHRlbmQgZW51bWVyYXRpb25zCisKK0J1dCB0aGlzIGlzIGFsbG93ZWQ6OgorCisgICAgPj4+IGNsYXNzIEZvbyhFbnVtKToKKyAgICAuLi4gICAgIGRlZiBzb21lX2JlaGF2aW9yKHNlbGYpOgorICAgIC4uLiAgICAgICAgIHBhc3MKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQmFyKEZvbyk6CisgICAgLi4uICAgICBoYXBweSA9IDEKKyAgICAuLi4gICAgIHNhZCA9IDIKKyAgICAuLi4KKworQWxsb3dpbmcgc3ViY2xhc3Npbmcgb2YgZW51bXMgdGhhdCBkZWZpbmUgbWVtYmVycyB3b3VsZCBsZWFkIHRvIGEgdmlvbGF0aW9uIG9mCitzb21lIGltcG9ydGFudCBpbnZhcmlhbnRzIG9mIHR5cGVzIGFuZCBpbnN0YW5jZXMuICBPbiB0aGUgb3RoZXIgaGFuZCwgaXQgbWFrZXMKK3NlbnNlIHRvIGFsbG93IHNoYXJpbmcgc29tZSBjb21tb24gYmVoYXZpb3IgYmV0d2VlbiBhIGdyb3VwIG9mIGVudW1lcmF0aW9ucy4KKyhTZWUgYE9yZGVyZWRFbnVtYF8gZm9yIGFuIGV4YW1wbGUuKQorCisKK1BpY2tsaW5nCistLS0tLS0tLQorCitFbnVtZXJhdGlvbnMgY2FuIGJlIHBpY2tsZWQgYW5kIHVucGlja2xlZDo6CisKKyAgICA+Pj4gZnJvbSB0ZXN0LnRlc3RfZW51bSBpbXBvcnQgRnJ1aXQKKyAgICA+Pj4gZnJvbSBwaWNrbGUgaW1wb3J0IGR1bXBzLCBsb2FkcworICAgID4+PiBGcnVpdC50b21hdG8gaXMgbG9hZHMoZHVtcHMoRnJ1aXQudG9tYXRvKSkKKyAgICBUcnVlCisKK1RoZSB1c3VhbCByZXN0cmljdGlvbnMgZm9yIHBpY2tsaW5nIGFwcGx5OiBwaWNrbGFibGUgZW51bXMgbXVzdCBiZSBkZWZpbmVkIGluCit0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlLCBzaW5jZSB1bnBpY2tsaW5nIHJlcXVpcmVzIHRoZW0gdG8gYmUgaW1wb3J0YWJsZQorZnJvbSB0aGF0IG1vZHVsZS4KKworLi4gbm90ZTo6CisKKyAgICBXaXRoIHBpY2tsZSBwcm90b2NvbCB2ZXJzaW9uIDQgaXQgaXMgcG9zc2libGUgdG8gZWFzaWx5IHBpY2tsZSBlbnVtcworICAgIG5lc3RlZCBpbiBvdGhlciBjbGFzc2VzLgorCitJdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgaG93IEVudW0gbWVtYmVycyBhcmUgcGlja2xlZC91bnBpY2tsZWQgYnkgZGVmaW5pbmcKKzptZXRoOmBfX3JlZHVjZV9leF9fYCBpbiB0aGUgZW51bWVyYXRpb24gY2xhc3MuCisKKworRnVuY3Rpb25hbCBBUEkKKy0tLS0tLS0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YEVudW1gIGNsYXNzIGlzIGNhbGxhYmxlLCBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbmFsIEFQSTo6CisKKyAgICA+Pj4gQW5pbWFsID0gRW51bSgnQW5pbWFsJywgJ2FudCBiZWUgY2F0IGRvZycpCisgICAgPj4+IEFuaW1hbAorICAgIDxlbnVtICdBbmltYWwnPgorICAgID4+PiBBbmltYWwuYW50CisgICAgPEFuaW1hbC5hbnQ6IDE+CisgICAgPj4+IEFuaW1hbC5hbnQudmFsdWUKKyAgICAxCisgICAgPj4+IGxpc3QoQW5pbWFsKQorICAgIFs8QW5pbWFsLmFudDogMT4sIDxBbmltYWwuYmVlOiAyPiwgPEFuaW1hbC5jYXQ6IDM+LCA8QW5pbWFsLmRvZzogND5dCisKK1RoZSBzZW1hbnRpY3Mgb2YgdGhpcyBBUEkgcmVzZW1ibGUgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAuIFRoZSBmaXJzdAorYXJndW1lbnQgb2YgdGhlIGNhbGwgdG8gOmNsYXNzOmBFbnVtYCBpcyB0aGUgbmFtZSBvZiB0aGUgZW51bWVyYXRpb24uCisKK1RoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlICpzb3VyY2UqIG9mIGVudW1lcmF0aW9uIG1lbWJlciBuYW1lcy4gIEl0IGNhbiBiZSBhCit3aGl0ZXNwYWNlLXNlcGFyYXRlZCBzdHJpbmcgb2YgbmFtZXMsIGEgc2VxdWVuY2Ugb2YgbmFtZXMsIGEgc2VxdWVuY2Ugb2YKKzItdHVwbGVzIHdpdGgga2V5L3ZhbHVlIHBhaXJzLCBvciBhIG1hcHBpbmcgKGUuZy4gZGljdGlvbmFyeSkgb2YgbmFtZXMgdG8KK3ZhbHVlcy4gIFRoZSBsYXN0IHR3byBvcHRpb25zIGVuYWJsZSBhc3NpZ25pbmcgYXJiaXRyYXJ5IHZhbHVlcyB0bworZW51bWVyYXRpb25zOyB0aGUgb3RoZXJzIGF1dG8tYXNzaWduIGluY3JlYXNpbmcgaW50ZWdlcnMgc3RhcnRpbmcgd2l0aCAxLiAgQQorbmV3IGNsYXNzIGRlcml2ZWQgZnJvbSA6Y2xhc3M6YEVudW1gIGlzIHJldHVybmVkLiAgSW4gb3RoZXIgd29yZHMsIHRoZSBhYm92ZQorYXNzaWdubWVudCB0byA6Y2xhc3M6YEFuaW1hbGAgaXMgZXF1aXZhbGVudCB0bzo6CisKKyAgICA+Pj4gY2xhc3MgQW5pbWFsKEVudW0pOgorICAgIC4uLiAgICAgYW50ID0gMQorICAgIC4uLiAgICAgYmVlID0gMgorICAgIC4uLiAgICAgY2F0ID0gMworICAgIC4uLiAgICAgZG9nID0gNAorICAgIC4uLgorCitUaGUgcmVhc29uIGZvciBkZWZhdWx0aW5nIHRvIGBgMWBgIGFzIHRoZSBzdGFydGluZyBudW1iZXIgYW5kIG5vdCBgYDBgYCBpcwordGhhdCBgYDBgYCBpcyBgYEZhbHNlYGAgaW4gYSBib29sZWFuIHNlbnNlLCBidXQgZW51bSBtZW1iZXJzIGFsbCBldmFsdWF0ZQordG8gYGBUcnVlYGAuCisKK1BpY2tsaW5nIGVudW1zIGNyZWF0ZWQgd2l0aCB0aGUgZnVuY3Rpb25hbCBBUEkgY2FuIGJlIHRyaWNreSBhcyBmcmFtZSBzdGFjaworaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgdXNlZCB0byB0cnkgYW5kIGZpZ3VyZSBvdXQgd2hpY2ggbW9kdWxlIHRoZQorZW51bWVyYXRpb24gaXMgYmVpbmcgY3JlYXRlZCBpbiAoZS5nLiBpdCB3aWxsIGZhaWwgaWYgeW91IHVzZSBhIHV0aWxpdHkKK2Z1bmN0aW9uIGluIHNlcGFyYXRlIG1vZHVsZSwgYW5kIGFsc28gbWF5IG5vdCB3b3JrIG9uIElyb25QeXRob24gb3IgSnl0aG9uKS4KK1RoZSBzb2x1dGlvbiBpcyB0byBzcGVjaWZ5IHRoZSBtb2R1bGUgbmFtZSBleHBsaWNpdGx5IGFzIGZvbGxvd3M6OgorCisgICAgPj4+IEFuaW1hbCA9IEVudW0oJ0FuaW1hbCcsICdhbnQgYmVlIGNhdCBkb2cnLCBtb2R1bGU9X19uYW1lX18pCisKKy4uIHdhcm5pbmc6OgorCisgICAgSWYgYGBtb2R1bGVgYCBpcyBub3Qgc3VwcGxpZWQsIGFuZCBFbnVtIGNhbm5vdCBkZXRlcm1pbmUgd2hhdCBpdCBpcywKKyAgICB0aGUgbmV3IEVudW0gbWVtYmVycyB3aWxsIG5vdCBiZSB1bnBpY2tsYWJsZTsgdG8ga2VlcCBlcnJvcnMgY2xvc2VyIHRvCisgICAgdGhlIHNvdXJjZSwgcGlja2xpbmcgd2lsbCBiZSBkaXNhYmxlZC4KKworVGhlIG5ldyBwaWNrbGUgcHJvdG9jb2wgNCBhbHNvLCBpbiBzb21lIGNpcmN1bXN0YW5jZXMsIHJlbGllcyBvbgorOmF0dHI6YF9fcXVhbG5hbWVfX2AgYmVpbmcgc2V0IHRvIHRoZSBsb2NhdGlvbiB3aGVyZSBwaWNrbGUgd2lsbCBiZSBhYmxlCit0byBmaW5kIHRoZSBjbGFzcy4gIEZvciBleGFtcGxlLCBpZiB0aGUgY2xhc3Mgd2FzIG1hZGUgYXZhaWxhYmxlIGluIGNsYXNzCitTb21lRGF0YSBpbiB0aGUgZ2xvYmFsIHNjb3BlOjoKKworICAgID4+PiBBbmltYWwgPSBFbnVtKCdBbmltYWwnLCAnYW50IGJlZSBjYXQgZG9nJywgcXVhbG5hbWU9J1NvbWVEYXRhLkFuaW1hbCcpCisKK1RoZSBjb21wbGV0ZSBzaWduYXR1cmUgaXM6OgorCisgICAgRW51bSh2YWx1ZT0nTmV3RW51bU5hbWUnLCBuYW1lcz08Li4uPiwgKiwgbW9kdWxlPScuLi4nLCBxdWFsbmFtZT0nLi4uJywgdHlwZT08bWl4ZWQtaW4gY2xhc3M+KQorCis6dmFsdWU6IFdoYXQgdGhlIG5ldyBFbnVtIGNsYXNzIHdpbGwgcmVjb3JkIGFzIGl0cyBuYW1lLgorCis6bmFtZXM6IFRoZSBFbnVtIG1lbWJlcnMuICBUaGlzIGNhbiBiZSBhIHdoaXRlc3BhY2Ugb3IgY29tbWEgc2VwYXJhdGVkIHN0cmluZworICAodmFsdWVzIHdpbGwgc3RhcnQgYXQgMSk6OgorCisgICAgJ3JlZCBncmVlbiBibHVlJyB8ICdyZWQsZ3JlZW4sYmx1ZScgfCAncmVkLCBncmVlbiwgYmx1ZScKKworICBvciBhbiBpdGVyYXRvciBvZiBuYW1lczo6CisKKyAgICBbJ3JlZCcsICdncmVlbicsICdibHVlJ10KKworICBvciBhbiBpdGVyYXRvciBvZiAobmFtZSwgdmFsdWUpIHBhaXJzOjoKKworICAgIFsoJ2N5YW4nLCA0KSwgKCdtYWdlbnRhJywgNSksICgneWVsbG93JywgNildCisKKyAgb3IgYSBtYXBwaW5nOjoKKworICAgIHsnY2hhcnRyZXVzZSc6IDcsICdzZWFfZ3JlZW4nOiAxMSwgJ3Jvc2VtYXJ5JzogNDJ9CisKKzptb2R1bGU6IG5hbWUgb2YgbW9kdWxlIHdoZXJlIG5ldyBFbnVtIGNsYXNzIGNhbiBiZSBmb3VuZC4KKworOnF1YWxuYW1lOiB3aGVyZSBpbiBtb2R1bGUgbmV3IEVudW0gY2xhc3MgY2FuIGJlIGZvdW5kLgorCis6dHlwZTogdHlwZSB0byBtaXggaW4gdG8gbmV3IEVudW0gY2xhc3MuCisKKworRGVyaXZlZCBFbnVtZXJhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ludEVudW0KK15eXl5eXl4KKworQSB2YXJpYXRpb24gb2YgOmNsYXNzOmBFbnVtYCBpcyBwcm92aWRlZCB3aGljaCBpcyBhbHNvIGEgc3ViY2xhc3Mgb2YKKzpjbGFzczpgaW50YC4gIE1lbWJlcnMgb2YgYW4gOmNsYXNzOmBJbnRFbnVtYCBjYW4gYmUgY29tcGFyZWQgdG8gaW50ZWdlcnM7CitieSBleHRlbnNpb24sIGludGVnZXIgZW51bWVyYXRpb25zIG9mIGRpZmZlcmVudCB0eXBlcyBjYW4gYWxzbyBiZSBjb21wYXJlZAordG8gZWFjaCBvdGhlcjo6CisKKyAgICA+Pj4gZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCisgICAgPj4+IGNsYXNzIFNoYXBlKEludEVudW0pOgorICAgIC4uLiAgICAgY2lyY2xlID0gMQorICAgIC4uLiAgICAgc3F1YXJlID0gMgorICAgIC4uLgorICAgID4+PiBjbGFzcyBSZXF1ZXN0KEludEVudW0pOgorICAgIC4uLiAgICAgcG9zdCA9IDEKKyAgICAuLi4gICAgIGdldCA9IDIKKyAgICAuLi4KKyAgICA+Pj4gU2hhcGUgPT0gMQorICAgIEZhbHNlCisgICAgPj4+IFNoYXBlLmNpcmNsZSA9PSAxCisgICAgVHJ1ZQorICAgID4+PiBTaGFwZS5jaXJjbGUgPT0gUmVxdWVzdC5wb3N0CisgICAgVHJ1ZQorCitIb3dldmVyLCB0aGV5IHN0aWxsIGNhbid0IGJlIGNvbXBhcmVkIHRvIHN0YW5kYXJkIDpjbGFzczpgRW51bWAgZW51bWVyYXRpb25zOjoKKworICAgID4+PiBjbGFzcyBTaGFwZShJbnRFbnVtKToKKyAgICAuLi4gICAgIGNpcmNsZSA9IDEKKyAgICAuLi4gICAgIHNxdWFyZSA9IDIKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQ29sb3IoRW51bSk6CisgICAgLi4uICAgICByZWQgPSAxCisgICAgLi4uICAgICBncmVlbiA9IDIKKyAgICAuLi4KKyAgICA+Pj4gU2hhcGUuY2lyY2xlID09IENvbG9yLnJlZAorICAgIEZhbHNlCisKKzpjbGFzczpgSW50RW51bWAgdmFsdWVzIGJlaGF2ZSBsaWtlIGludGVnZXJzIGluIG90aGVyIHdheXMgeW91J2QgZXhwZWN0OjoKKworICAgID4+PiBpbnQoU2hhcGUuY2lyY2xlKQorICAgIDEKKyAgICA+Pj4gWydhJywgJ2InLCAnYyddW1NoYXBlLmNpcmNsZV0KKyAgICAnYicKKyAgICA+Pj4gW2kgZm9yIGkgaW4gcmFuZ2UoU2hhcGUuc3F1YXJlKV0KKyAgICBbMCwgMV0KKworRm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mIGNvZGUsIDpjbGFzczpgRW51bWAgaXMgc3Ryb25nbHkgcmVjb21tZW5kZWQsCitzaW5jZSA6Y2xhc3M6YEludEVudW1gIGJyZWFrcyBzb21lIHNlbWFudGljIHByb21pc2VzIG9mIGFuIGVudW1lcmF0aW9uIChieQorYmVpbmcgY29tcGFyYWJsZSB0byBpbnRlZ2VycywgYW5kIHRodXMgYnkgdHJhbnNpdGl2aXR5IHRvIG90aGVyCit1bnJlbGF0ZWQgZW51bWVyYXRpb25zKS4gIEl0IHNob3VsZCBiZSB1c2VkIG9ubHkgaW4gc3BlY2lhbCBjYXNlcyB3aGVyZQordGhlcmUncyBubyBvdGhlciBjaG9pY2U7IGZvciBleGFtcGxlLCB3aGVuIGludGVnZXIgY29uc3RhbnRzIGFyZQorcmVwbGFjZWQgd2l0aCBlbnVtZXJhdGlvbnMgYW5kIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkIHdpdGggY29kZQordGhhdCBzdGlsbCBleHBlY3RzIGludGVnZXJzLgorCisKK090aGVycworXl5eXl5eCisKK1doaWxlIDpjbGFzczpgSW50RW51bWAgaXMgcGFydCBvZiB0aGUgOm1vZDpgZW51bWAgbW9kdWxlLCBpdCB3b3VsZCBiZSB2ZXJ5CitzaW1wbGUgdG8gaW1wbGVtZW50IGluZGVwZW5kZW50bHk6OgorCisgICAgY2xhc3MgSW50RW51bShpbnQsIEVudW0pOgorICAgICAgICBwYXNzCisKK1RoaXMgZGVtb25zdHJhdGVzIGhvdyBzaW1pbGFyIGRlcml2ZWQgZW51bWVyYXRpb25zIGNhbiBiZSBkZWZpbmVkOyBmb3IgZXhhbXBsZQorYSA6Y2xhc3M6YFN0ckVudW1gIHRoYXQgbWl4ZXMgaW4gOmNsYXNzOmBzdHJgIGluc3RlYWQgb2YgOmNsYXNzOmBpbnRgLgorCitTb21lIHJ1bGVzOgorCisxLiBXaGVuIHN1YmNsYXNzaW5nIDpjbGFzczpgRW51bWAsIG1peC1pbiB0eXBlcyBtdXN0IGFwcGVhciBiZWZvcmUKKyAgIDpjbGFzczpgRW51bWAgaXRzZWxmIGluIHRoZSBzZXF1ZW5jZSBvZiBiYXNlcywgYXMgaW4gdGhlIDpjbGFzczpgSW50RW51bWAKKyAgIGV4YW1wbGUgYWJvdmUuCisyLiBXaGlsZSA6Y2xhc3M6YEVudW1gIGNhbiBoYXZlIG1lbWJlcnMgb2YgYW55IHR5cGUsIG9uY2UgeW91IG1peCBpbiBhbgorICAgYWRkaXRpb25hbCB0eXBlLCBhbGwgdGhlIG1lbWJlcnMgbXVzdCBoYXZlIHZhbHVlcyBvZiB0aGF0IHR5cGUsIGUuZy4KKyAgIDpjbGFzczpgaW50YCBhYm92ZS4gIFRoaXMgcmVzdHJpY3Rpb24gZG9lcyBub3QgYXBwbHkgdG8gbWl4LWlucyB3aGljaCBvbmx5CisgICBhZGQgbWV0aG9kcyBhbmQgZG9uJ3Qgc3BlY2lmeSBhbm90aGVyIGRhdGEgdHlwZSBzdWNoIGFzIDpjbGFzczpgaW50YCBvcgorICAgOmNsYXNzOmBzdHJgLgorMy4gV2hlbiBhbm90aGVyIGRhdGEgdHlwZSBpcyBtaXhlZCBpbiwgdGhlIDphdHRyOmB2YWx1ZWAgYXR0cmlidXRlIGlzICpub3QgdGhlCisgICBzYW1lKiBhcyB0aGUgZW51bSBtZW1iZXIgaXRzZWxmLCBhbHRob3VnaCBpdCBpcyBlcXVpdmFsZW50IGFuZCB3aWxsIGNvbXBhcmUKKyAgIGVxdWFsLgorNC4gJS1zdHlsZSBmb3JtYXR0aW5nOiAgYCVzYCBhbmQgYCVyYCBjYWxsIDpjbGFzczpgRW51bWAncyA6bWV0aDpgX19zdHJfX2AgYW5kCisgICA6bWV0aDpgX19yZXByX19gIHJlc3BlY3RpdmVseTsgb3RoZXIgY29kZXMgKHN1Y2ggYXMgYCVpYCBvciBgJWhgIGZvcgorICAgSW50RW51bSkgdHJlYXQgdGhlIGVudW0gbWVtYmVyIGFzIGl0cyBtaXhlZC1pbiB0eXBlLgorNS4gOm1ldGg6YHN0ci5fX2Zvcm1hdF9fYCAob3IgOmZ1bmM6YGZvcm1hdGApIHdpbGwgdXNlIHRoZSBtaXhlZC1pbgorICAgdHlwZSdzIDptZXRoOmBfX2Zvcm1hdF9fYC4gIElmIHRoZSA6Y2xhc3M6YEVudW1gJ3MgOmZ1bmM6YHN0cmAgb3IKKyAgIDpmdW5jOmByZXByYCBpcyBkZXNpcmVkIHVzZSB0aGUgYCFzYCBvciBgIXJgIDpjbGFzczpgc3RyYCBmb3JtYXQgY29kZXMuCisKKworSW50ZXJlc3RpbmcgZXhhbXBsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doaWxlIDpjbGFzczpgRW51bWAgYW5kIDpjbGFzczpgSW50RW51bWAgYXJlIGV4cGVjdGVkIHRvIGNvdmVyIHRoZSBtYWpvcml0eSBvZgordXNlLWNhc2VzLCB0aGV5IGNhbm5vdCBjb3ZlciB0aGVtIGFsbC4gIEhlcmUgYXJlIHJlY2lwZXMgZm9yIHNvbWUgZGlmZmVyZW50Cit0eXBlcyBvZiBlbnVtZXJhdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCBkaXJlY3RseSwgb3IgYXMgZXhhbXBsZXMgZm9yIGNyZWF0aW5nCitvbmUncyBvd24uCisKKworQXV0b051bWJlcgorXl5eXl5eXl5eXgorCitBdm9pZHMgaGF2aW5nIHRvIHNwZWNpZnkgdGhlIHZhbHVlIGZvciBlYWNoIGVudW1lcmF0aW9uIG1lbWJlcjo6CisKKyAgICA+Pj4gY2xhc3MgQXV0b051bWJlcihFbnVtKToKKyAgICAuLi4gICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgLi4uICAgICAgICAgdmFsdWUgPSBsZW4oY2xzLl9fbWVtYmVyc19fKSArIDEKKyAgICAuLi4gICAgICAgICBvYmogPSBvYmplY3QuX19uZXdfXyhjbHMpCisgICAgLi4uICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBvYmoKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgLi4uICAgICByZWQgPSAoKQorICAgIC4uLiAgICAgZ3JlZW4gPSAoKQorICAgIC4uLiAgICAgYmx1ZSA9ICgpCisgICAgLi4uCisgICAgPj4+IENvbG9yLmdyZWVuLnZhbHVlID09IDIKKyAgICBUcnVlCisKKy4uIG5vdGU6OgorCisgICAgVGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QsIGlmIGRlZmluZWQsIGlzIHVzZWQgZHVyaW5nIGNyZWF0aW9uIG9mIHRoZSBFbnVtCisgICAgbWVtYmVyczsgaXQgaXMgdGhlbiByZXBsYWNlZCBieSBFbnVtJ3MgOm1ldGg6YF9fbmV3X19gIHdoaWNoIGlzIHVzZWQgYWZ0ZXIKKyAgICBjbGFzcyBjcmVhdGlvbiBmb3IgbG9va3VwIG9mIGV4aXN0aW5nIG1lbWJlcnMuCisKKworT3JkZXJlZEVudW0KK15eXl5eXl5eXl5eCisKK0FuIG9yZGVyZWQgZW51bWVyYXRpb24gdGhhdCBpcyBub3QgYmFzZWQgb24gOmNsYXNzOmBJbnRFbnVtYCBhbmQgc28gbWFpbnRhaW5zCit0aGUgbm9ybWFsIDpjbGFzczpgRW51bWAgaW52YXJpYW50cyAoc3VjaCBhcyBub3QgYmVpbmcgY29tcGFyYWJsZSB0byBvdGhlcgorZW51bWVyYXRpb25zKTo6CisKKyAgICA+Pj4gY2xhc3MgT3JkZXJlZEVudW0oRW51bSk6CisgICAgLi4uICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID49IG90aGVyLnZhbHVlCisgICAgLi4uICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgLi4uICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAuLi4gICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgLi4uICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID4gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAuLi4gICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAuLi4gICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgIC4uLiAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAuLi4gICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPCBvdGhlci52YWx1ZQorICAgIC4uLiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIC4uLgorICAgID4+PiBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgLi4uICAgICBBID0gNQorICAgIC4uLiAgICAgQiA9IDQKKyAgICAuLi4gICAgIEMgPSAzCisgICAgLi4uICAgICBEID0gMgorICAgIC4uLiAgICAgRiA9IDEKKyAgICAuLi4KKyAgICA+Pj4gR3JhZGUuQyA8IEdyYWRlLkEKKyAgICBUcnVlCisKKworRHVwbGljYXRlRnJlZUVudW0KK15eXl5eXl5eXl5eXl5eXl5eCisKK1JhaXNlcyBhbiBlcnJvciBpZiBhIGR1cGxpY2F0ZSBtZW1iZXIgbmFtZSBpcyBmb3VuZCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGFuCithbGlhczo6CisKKyAgICA+Pj4gY2xhc3MgRHVwbGljYXRlRnJlZUVudW0oRW51bSk6CisgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgIC4uLiAgICAgICAgIGNscyA9IHNlbGYuX19jbGFzc19fCisgICAgLi4uICAgICAgICAgaWYgYW55KHNlbGYudmFsdWUgPT0gZS52YWx1ZSBmb3IgZSBpbiBjbHMpOgorICAgIC4uLiAgICAgICAgICAgICBhID0gc2VsZi5uYW1lCisgICAgLi4uICAgICAgICAgICAgIGUgPSBjbHMoc2VsZi52YWx1ZSkubmFtZQorICAgIC4uLiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgIC4uLiAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gRHVwbGljYXRlRnJlZUVudW06ICAlciAtLT4gJXIiCisgICAgLi4uICAgICAgICAgICAgICAgICAlIChhLCBlKSkKKyAgICAuLi4KKyAgICA+Pj4gY2xhc3MgQ29sb3IoRHVwbGljYXRlRnJlZUVudW0pOgorICAgIC4uLiAgICAgcmVkID0gMQorICAgIC4uLiAgICAgZ3JlZW4gPSAyCisgICAgLi4uICAgICBibHVlID0gMworICAgIC4uLiAgICAgZ3JlbmUgPSAyCisgICAgLi4uCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIFZhbHVlRXJyb3I6IGFsaWFzZXMgbm90IGFsbG93ZWQgaW4gRHVwbGljYXRlRnJlZUVudW06ICAnZ3JlbmUnIC0tPiAnZ3JlZW4nCisKKy4uIG5vdGU6OgorCisgICAgVGhpcyBpcyBhIHVzZWZ1bCBleGFtcGxlIGZvciBzdWJjbGFzc2luZyBFbnVtIHRvIGFkZCBvciBjaGFuZ2Ugb3RoZXIKKyAgICBiZWhhdmlvcnMgYXMgd2VsbCBhcyBkaXNhbGxvd2luZyBhbGlhc2VzLiAgSWYgdGhlIG9ubHkgZGVzaXJlZCBjaGFuZ2UgaXMKKyAgICBkaXNhbGxvd2luZyBhbGlhc2VzLCB0aGUgOmZ1bmM6YHVuaXF1ZWAgZGVjb3JhdG9yIGNhbiBiZSB1c2VkIGluc3RlYWQuCisKKworUGxhbmV0CiteXl5eXl4KKworSWYgOm1ldGg6YF9fbmV3X19gIG9yIDptZXRoOmBfX2luaXRfX2AgaXMgZGVmaW5lZCB0aGUgdmFsdWUgb2YgdGhlIGVudW0gbWVtYmVyCit3aWxsIGJlIHBhc3NlZCB0byB0aG9zZSBtZXRob2RzOjoKKworICAgID4+PiBjbGFzcyBQbGFuZXQoRW51bSk6CisgICAgLi4uICAgICBNRVJDVVJZID0gKDMuMzAzZSsyMywgMi40Mzk3ZTYpCisgICAgLi4uICAgICBWRU5VUyAgID0gKDQuODY5ZSsyNCwgNi4wNTE4ZTYpCisgICAgLi4uICAgICBFQVJUSCAgID0gKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KQorICAgIC4uLiAgICAgTUFSUyAgICA9ICg2LjQyMWUrMjMsIDMuMzk3MmU2KQorICAgIC4uLiAgICAgSlVQSVRFUiA9ICgxLjllKzI3LCAgIDcuMTQ5MmU3KQorICAgIC4uLiAgICAgU0FUVVJOICA9ICg1LjY4OGUrMjYsIDYuMDI2OGU3KQorICAgIC4uLiAgICAgVVJBTlVTICA9ICg4LjY4NmUrMjUsIDIuNTU1OWU3KQorICAgIC4uLiAgICAgTkVQVFVORSA9ICgxLjAyNGUrMjYsIDIuNDc0NmU3KQorICAgIC4uLiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3MsIHJhZGl1cyk6CisgICAgLi4uICAgICAgICAgc2VsZi5tYXNzID0gbWFzcyAgICAgICAjIGluIGtpbG9ncmFtcworICAgIC4uLiAgICAgICAgIHNlbGYucmFkaXVzID0gcmFkaXVzICAgIyBpbiBtZXRlcnMKKyAgICAuLi4gICAgIEBwcm9wZXJ0eQorICAgIC4uLiAgICAgZGVmIHN1cmZhY2VfZ3Jhdml0eShzZWxmKToKKyAgICAuLi4gICAgICAgICAjIHVuaXZlcnNhbCBncmF2aXRhdGlvbmFsIGNvbnN0YW50ICAobTMga2ctMSBzLTIpCisgICAgLi4uICAgICAgICAgRyA9IDYuNjczMDBFLTExCisgICAgLi4uICAgICAgICAgcmV0dXJuIEcgKiBzZWxmLm1hc3MgLyAoc2VsZi5yYWRpdXMgKiBzZWxmLnJhZGl1cykKKyAgICAuLi4KKyAgICA+Pj4gUGxhbmV0LkVBUlRILnZhbHVlCisgICAgKDUuOTc2ZSsyNCwgNjM3ODE0MC4wKQorICAgID4+PiBQbGFuZXQuRUFSVEguc3VyZmFjZV9ncmF2aXR5CisgICAgOS44MDI2NTI3NDMzMzcxMjkKKworCitIb3cgYXJlIEVudW1zIGRpZmZlcmVudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbnVtcyBoYXZlIGEgY3VzdG9tIG1ldGFjbGFzcyB0aGF0IGFmZmVjdHMgbWFueSBhc3BlY3RzIG9mIGJvdGggZGVyaXZlZCBFbnVtCitjbGFzc2VzIGFuZCB0aGVpciBpbnN0YW5jZXMgKG1lbWJlcnMpLgorCisKK0VudW0gQ2xhc3NlcworXl5eXl5eXl5eXl5eCisKK1RoZSA6Y2xhc3M6YEVudW1NZXRhYCBtZXRhY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIHByb3ZpZGluZyB0aGUKKzptZXRoOmBfX2NvbnRhaW5zX19gLCA6bWV0aDpgX19kaXJfX2AsIDptZXRoOmBfX2l0ZXJfX2AgYW5kIG90aGVyIG1ldGhvZHMgdGhhdAorYWxsb3cgb25lIHRvIGRvIHRoaW5ncyB3aXRoIGFuIDpjbGFzczpgRW51bWAgY2xhc3MgdGhhdCBmYWlsIG9uIGEgdHlwaWNhbAorY2xhc3MsIHN1Y2ggYXMgYGxpc3QoQ29sb3IpYCBvciBgc29tZV92YXIgaW4gQ29sb3JgLiAgOmNsYXNzOmBFbnVtTWV0YWAgaXMKK3Jlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHZhcmlvdXMgb3RoZXIgbWV0aG9kcyBvbiB0aGUgZmluYWwgOmNsYXNzOmBFbnVtYAorY2xhc3MgYXJlIGNvcnJlY3QgKHN1Y2ggYXMgOm1ldGg6YF9fbmV3X19gLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gLAorOm1ldGg6YF9fc3RyX19gIGFuZCA6bWV0aDpgX19yZXByX19gKS4KKworCitFbnVtIE1lbWJlcnMgKGFrYSBpbnN0YW5jZXMpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBtb3N0IGludGVyZXN0aW5nIHRoaW5nIGFib3V0IEVudW0gbWVtYmVycyBpcyB0aGF0IHRoZXkgYXJlIHNpbmdsZXRvbnMuCis6Y2xhc3M6YEVudW1NZXRhYCBjcmVhdGVzIHRoZW0gYWxsIHdoaWxlIGl0IGlzIGNyZWF0aW5nIHRoZSA6Y2xhc3M6YEVudW1gCitjbGFzcyBpdHNlbGYsIGFuZCB0aGVuIHB1dHMgYSBjdXN0b20gOm1ldGg6YF9fbmV3X19gIGluIHBsYWNlIHRvIGVuc3VyZQordGhhdCBubyBuZXcgb25lcyBhcmUgZXZlciBpbnN0YW50aWF0ZWQgYnkgcmV0dXJuaW5nIG9ubHkgdGhlIGV4aXN0aW5nCittZW1iZXIgaW5zdGFuY2VzLgorCisKK0ZpbmVyIFBvaW50cworXl5eXl5eXl5eXl5eCisKK0VudW0gbWVtYmVycyBhcmUgaW5zdGFuY2VzIG9mIGFuIEVudW0gY2xhc3MsIGFuZCBldmVuIHRob3VnaCB0aGV5IGFyZQorYWNjZXNzaWJsZSBhcyBgRW51bUNsYXNzLm1lbWJlcmAsIHRoZXkgYXJlIG5vdCBhY2Nlc3NpYmxlIGRpcmVjdGx5IGZyb20KK3RoZSBtZW1iZXI6OgorCisgICAgPj4+IENvbG9yLnJlZAorICAgIDxDb2xvci5yZWQ6IDE+CisgICAgPj4+IENvbG9yLnJlZC5ibHVlCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgIC4uLgorICAgIEF0dHJpYnV0ZUVycm9yOiAnQ29sb3InIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdibHVlJworCitMaWtld2lzZSwgdGhlIDphdHRyOmBfX21lbWJlcnNfX2AgaXMgb25seSBhdmFpbGFibGUgb24gdGhlIGNsYXNzLgorCitJZiB5b3UgZ2l2ZSB5b3VyIDpjbGFzczpgRW51bWAgc3ViY2xhc3MgZXh0cmEgbWV0aG9kcywgbGlrZSB0aGUgYFBsYW5ldGBfCitjbGFzcyBhYm92ZSwgdGhvc2UgbWV0aG9kcyB3aWxsIHNob3cgdXAgaW4gYSA6ZnVuYzpgZGlyYCBvZiB0aGUgbWVtYmVyLAorYnV0IG5vdCBvZiB0aGUgY2xhc3M6OgorCisgICAgPj4+IGRpcihQbGFuZXQpCisgICAgWydFQVJUSCcsICdKVVBJVEVSJywgJ01BUlMnLCAnTUVSQ1VSWScsICdORVBUVU5FJywgJ1NBVFVSTicsICdVUkFOVVMnLCAnVkVOVVMnLCAnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXyddCisgICAgPj4+IGRpcihQbGFuZXQuRUFSVEgpCisgICAgWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAnc3VyZmFjZV9ncmF2aXR5JywgJ3ZhbHVlJ10KKworVGhlIDptZXRoOmBfX25ld19fYCBtZXRob2Qgd2lsbCBvbmx5IGJlIHVzZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUKKzpjbGFzczpgRW51bWAgbWVtYmVycyAtLSBhZnRlciB0aGF0IGl0IGlzIHJlcGxhY2VkLiAgQW55IGN1c3RvbSA6bWV0aDpgX19uZXdfX2AKK21ldGhvZCBtdXN0IGNyZWF0ZSB0aGUgb2JqZWN0IGFuZCBzZXQgdGhlIDphdHRyOmBfdmFsdWVfYCBhdHRyaWJ1dGUKK2FwcHJvcHJpYXRlbHkuCisKK0lmIHlvdSB3aXNoIHRvIGNoYW5nZSBob3cgOmNsYXNzOmBFbnVtYCBtZW1iZXJzIGFyZSBsb29rZWQgdXAgeW91IHNob3VsZCBlaXRoZXIKK3dyaXRlIGEgaGVscGVyIGZ1bmN0aW9uIG9yIGEgOmZ1bmM6YGNsYXNzbWV0aG9kYCBmb3IgdGhlIDpjbGFzczpgRW51bWAKK3N1YmNsYXNzLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZXhjZXB0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdAppbmRleCA2ZTQ1NTljLi5lZjM5ZTZjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdAorKysgYi9Eb2MvbGlicmFyeS9leGNlcHRpb25zLnJzdApAQCAtMjgsMTMgKzI4LDE0IEBACiBpbnRlcnByZXRlciByYWlzZXMgdGhlIHNhbWUgZXhjZXB0aW9uOyBidXQgYmV3YXJlIHRoYXQgdGhlcmUgaXMgbm90aGluZyB0bwogcHJldmVudCB1c2VyIGNvZGUgZnJvbSByYWlzaW5nIGFuIGluYXBwcm9wcmlhdGUgZXJyb3IuCiAKLVRoZSBidWlsdC1pbiBleGNlcHRpb24gY2xhc3NlcyBjYW4gYmUgc3ViLWNsYXNzZWQgdG8gZGVmaW5lIG5ldyBleGNlcHRpb25zOwotcHJvZ3JhbW1lcnMgYXJlIGVuY291cmFnZWQgdG8gYXQgbGVhc3QgZGVyaXZlIG5ldyBleGNlcHRpb25zIGZyb20gdGhlCi06ZXhjOmBFeGNlcHRpb25gIGNsYXNzIGFuZCBub3QgOmV4YzpgQmFzZUV4Y2VwdGlvbmAuICBNb3JlIGluZm9ybWF0aW9uIG9uCi1kZWZpbmluZyBleGNlcHRpb25zIGlzIGF2YWlsYWJsZSBpbiB0aGUgUHl0aG9uIFR1dG9yaWFsIHVuZGVyCitUaGUgYnVpbHQtaW4gZXhjZXB0aW9uIGNsYXNzZXMgY2FuIGJlIHN1YmNsYXNzZWQgdG8gZGVmaW5lIG5ldyBleGNlcHRpb25zOworcHJvZ3JhbW1lcnMgYXJlIGVuY291cmFnZWQgdG8gZGVyaXZlIG5ldyBleGNlcHRpb25zIGZyb20gdGhlIDpleGM6YEV4Y2VwdGlvbmAKK2NsYXNzIG9yIG9uZSBvZiBpdHMgc3ViY2xhc3NlcywgYW5kIG5vdCBmcm9tIDpleGM6YEJhc2VFeGNlcHRpb25gLiAgTW9yZQoraW5mb3JtYXRpb24gb24gZGVmaW5pbmcgZXhjZXB0aW9ucyBpcyBhdmFpbGFibGUgaW4gdGhlIFB5dGhvbiBUdXRvcmlhbCB1bmRlcgogOnJlZjpgdHV0LXVzZXJleGNlcHRpb25zYC4KIAotV2hlbiByYWlzaW5nIChvciByZS1yYWlzaW5nKSBhbiBleGNlcHRpb24gaW4gYW4gOmtleXdvcmQ6YGV4Y2VwdGAgY2xhdXNlCitXaGVuIHJhaXNpbmcgKG9yIHJlLXJhaXNpbmcpIGFuIGV4Y2VwdGlvbiBpbiBhbiA6a2V5d29yZDpgZXhjZXB0YCBvcgorOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZQogOmF0dHI6YF9fY29udGV4dF9fYCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0byB0aGUgbGFzdCBleGNlcHRpb24gY2F1Z2h0OyBpZiB0aGUKIG5ldyBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQgdGhlIHRyYWNlYmFjayB0aGF0IGlzIGV2ZW50dWFsbHkgZGlzcGxheWVkIHdpbGwKIGluY2x1ZGUgdGhlIG9yaWdpbmF0aW5nIGV4Y2VwdGlvbihzKSBhbmQgdGhlIGZpbmFsIGV4Y2VwdGlvbi4KQEAgLTgyLDcgKzgzLDcgQEAKICAgIC4uIGF0dHJpYnV0ZTo6IGFyZ3MKIAogICAgICAgVGhlIHR1cGxlIG9mIGFyZ3VtZW50cyBnaXZlbiB0byB0aGUgZXhjZXB0aW9uIGNvbnN0cnVjdG9yLiAgU29tZSBidWlsdC1pbgotICAgICAgZXhjZXB0aW9ucyAobGlrZSA6ZXhjOmBJT0Vycm9yYCkgZXhwZWN0IGEgY2VydGFpbiBudW1iZXIgb2YgYXJndW1lbnRzIGFuZAorICAgICAgZXhjZXB0aW9ucyAobGlrZSA6ZXhjOmBPU0Vycm9yYCkgZXhwZWN0IGEgY2VydGFpbiBudW1iZXIgb2YgYXJndW1lbnRzIGFuZAogICAgICAgYXNzaWduIGEgc3BlY2lhbCBtZWFuaW5nIHRvIHRoZSBlbGVtZW50cyBvZiB0aGlzIHR1cGxlLCB3aGlsZSBvdGhlcnMgYXJlCiAgICAgICB1c3VhbGx5IGNhbGxlZCBvbmx5IHdpdGggYSBzaW5nbGUgc3RyaW5nIGdpdmluZyBhbiBlcnJvciBtZXNzYWdlLgogCkBAIC0xNjEsNyArMTYyLDcgQEAKIAogLi4gZXhjZXB0aW9uOjogR2VuZXJhdG9yRXhpdAogCi0gICBSYWlzZSB3aGVuIGEgOnRlcm06YGdlbmVyYXRvcmBcJ3MgOm1ldGg6YGNsb3NlYCBtZXRob2QgaXMgY2FsbGVkLiAgSXQKKyAgIFJhaXNlZCB3aGVuIGEgOnRlcm06YGdlbmVyYXRvcmBcJ3MgOm1ldGg6YGNsb3NlYCBtZXRob2QgaXMgY2FsbGVkLiAgSXQKICAgIGRpcmVjdGx5IGluaGVyaXRzIGZyb20gOmV4YzpgQmFzZUV4Y2VwdGlvbmAgaW5zdGVhZCBvZiA6ZXhjOmBFeGNlcHRpb25gIHNpbmNlCiAgICBpdCBpcyB0ZWNobmljYWxseSBub3QgYW4gZXJyb3IuCiAKQEAgLTIzMCw0MyArMjMxLDgxIEBACiAgICBjbGFzc2VzIHRvIG92ZXJyaWRlIHRoZSBtZXRob2QuCiAKIAotLi4gZXhjZXB0aW9uOjogT1NFcnJvcgorLi4gZXhjZXB0aW9uOjogT1NFcnJvcihbYXJnXSkKKyAgICAgICAgICAgICAgIE9TRXJyb3IoZXJybm8sIHN0cmVycm9yWywgZmlsZW5hbWVbLCB3aW5lcnJvclssIGZpbGVuYW1lMl1dXSkKIAogICAgLi4gaW5kZXg6OiBtb2R1bGU6IGVycm5vCiAKICAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCB3aGVuIGEgc3lzdGVtIGZ1bmN0aW9uIHJldHVybnMgYSBzeXN0ZW0tcmVsYXRlZAogICAgZXJyb3IsIGluY2x1ZGluZyBJL08gZmFpbHVyZXMgc3VjaCBhcyAiZmlsZSBub3QgZm91bmQiIG9yICJkaXNrIGZ1bGwiCi0gICAobm90IGZvciBpbGxlZ2FsIGFyZ3VtZW50IHR5cGVzIG9yIG90aGVyIGluY2lkZW50YWwgZXJyb3JzKS4gIE9mdGVuIGEKLSAgIHN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgIHdpbGwgYWN0dWFsbHkgYmUgcmFpc2VkIGFzIGRlc2NyaWJlZCBpbgotICAgYE9TIGV4Y2VwdGlvbnNgXyBiZWxvdy4gIFRoZSA6YXR0cjpgZXJybm9gIGF0dHJpYnV0ZSBpcyBhIG51bWVyaWMgZXJyb3IKLSAgIGNvZGUgZnJvbSB0aGUgQyB2YXJpYWJsZSA6YzpkYXRhOmBlcnJub2AuCisgICAobm90IGZvciBpbGxlZ2FsIGFyZ3VtZW50IHR5cGVzIG9yIG90aGVyIGluY2lkZW50YWwgZXJyb3JzKS4KIAotICAgVW5kZXIgV2luZG93cywgdGhlIDphdHRyOmB3aW5lcnJvcmAgYXR0cmlidXRlIGdpdmVzIHlvdSB0aGUgbmF0aXZlCi0gICBXaW5kb3dzIGVycm9yIGNvZGUuICBUaGUgOmF0dHI6YGVycm5vYCBhdHRyaWJ1dGUgaXMgdGhlbiBhbiBhcHByb3hpbWF0ZQotICAgdHJhbnNsYXRpb24sIGluIFBPU0lYIHRlcm1zLCBvZiB0aGF0IG5hdGl2ZSBlcnJvciBjb2RlLgorICAgVGhlIHNlY29uZCBmb3JtIG9mIHRoZSBjb25zdHJ1Y3RvciBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZXMsCisgICBkZXNjcmliZWQgYmVsb3cuICBUaGUgYXR0cmlidXRlcyBkZWZhdWx0IHRvIDpjb25zdDpgTm9uZWAgaWYgbm90CisgICBzcGVjaWZpZWQuICBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGlmIHRocmVlIGFyZ3VtZW50cyBhcmUgcGFzc2VkLAorICAgdGhlIDphdHRyOmB+QmFzZUV4Y2VwdGlvbi5hcmdzYCBhdHRyaWJ1dGUgY29udGFpbnMgb25seSBhIDItdHVwbGUKKyAgIG9mIHRoZSBmaXJzdCB0d28gY29uc3RydWN0b3IgYXJndW1lbnRzLgogCi0gICBVbmRlciBhbGwgcGxhdGZvcm1zLCB0aGUgOmF0dHI6YHN0cmVycm9yYCBhdHRyaWJ1dGUgaXMgdGhlIGNvcnJlc3BvbmRpbmcKLSAgIGVycm9yIG1lc3NhZ2UgYXMgcHJvdmlkZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0gKGFzIGZvcm1hdHRlZCBieSB0aGUgQwotICAgZnVuY3Rpb25zIDpjOmZ1bmM6YHBlcnJvcmAgdW5kZXIgUE9TSVgsIGFuZCA6YzpmdW5jOmBGb3JtYXRNZXNzYWdlYAotICAgV2luZG93cykuCisgICBUaGUgY29uc3RydWN0b3Igb2Z0ZW4gYWN0dWFsbHkgcmV0dXJucyBhIHN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgLCBhcworICAgZGVzY3JpYmVkIGluIGBPUyBleGNlcHRpb25zYF8gYmVsb3cuICBUaGUgcGFydGljdWxhciBzdWJjbGFzcyBkZXBlbmRzIG9uCisgICB0aGUgZmluYWwgOmF0dHI6YC5lcnJub2AgdmFsdWUuICBUaGlzIGJlaGF2aW91ciBvbmx5IG9jY3VycyB3aGVuCisgICBjb25zdHJ1Y3RpbmcgOmV4YzpgT1NFcnJvcmAgZGlyZWN0bHkgb3IgdmlhIGFuIGFsaWFzLCBhbmQgaXMgbm90CisgICBpbmhlcml0ZWQgd2hlbiBzdWJjbGFzc2luZy4KIAotICAgRm9yIGV4Y2VwdGlvbnMgdGhhdCBpbnZvbHZlIGEgZmlsZSBzeXN0ZW0gcGF0aCAoc3VjaCBhcyA6ZnVuYzpgb3BlbmAgb3IKLSAgIDpmdW5jOmBvcy51bmxpbmtgKSwgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSB3aWxsIGNvbnRhaW4gYW4gYWRkaXRpb25hbAotICAgYXR0cmlidXRlLCA6YXR0cjpgZmlsZW5hbWVgLCB3aGljaCBpcyB0aGUgZmlsZSBuYW1lIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uCisgICAuLiBhdHRyaWJ1dGU6OiBlcnJubworCisgICAgICBBIG51bWVyaWMgZXJyb3IgY29kZSBmcm9tIHRoZSBDIHZhcmlhYmxlIDpjOmRhdGE6YGVycm5vYC4KKworICAgLi4gYXR0cmlidXRlOjogd2luZXJyb3IKKworICAgICAgVW5kZXIgV2luZG93cywgdGhpcyBnaXZlcyB5b3UgdGhlIG5hdGl2ZQorICAgICAgV2luZG93cyBlcnJvciBjb2RlLiAgVGhlIDphdHRyOmAuZXJybm9gIGF0dHJpYnV0ZSBpcyB0aGVuIGFuIGFwcHJveGltYXRlCisgICAgICB0cmFuc2xhdGlvbiwgaW4gUE9TSVggdGVybXMsIG9mIHRoYXQgbmF0aXZlIGVycm9yIGNvZGUuCisKKyAgICAgIFVuZGVyIFdpbmRvd3MsIGlmIHRoZSAqd2luZXJyb3IqIGNvbnN0cnVjdG9yIGFyZ3VtZW50IGlzIGFuIGludGVnZXIsCisgICAgICB0aGUgOmF0dHI6YC5lcnJub2AgYXR0cmlidXRlIGlzIGRldGVybWluZWQgZnJvbSB0aGUgV2luZG93cyBlcnJvciBjb2RlLAorICAgICAgYW5kIHRoZSAqZXJybm8qIGFyZ3VtZW50IGlzIGlnbm9yZWQuICBPbiBvdGhlciBwbGF0Zm9ybXMsIHRoZQorICAgICAgKndpbmVycm9yKiBhcmd1bWVudCBpcyBpZ25vcmVkLCBhbmQgdGhlIDphdHRyOmB3aW5lcnJvcmAgYXR0cmlidXRlCisgICAgICBkb2VzIG5vdCBleGlzdC4KKworICAgLi4gYXR0cmlidXRlOjogc3RyZXJyb3IKKworICAgICAgVGhlIGNvcnJlc3BvbmRpbmcgZXJyb3IgbWVzc2FnZSwgYXMgcHJvdmlkZWQgYnkKKyAgICAgIHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgSXQgaXMgZm9ybWF0dGVkIGJ5IHRoZSBDCisgICAgICBmdW5jdGlvbnMgOmM6ZnVuYzpgcGVycm9yYCB1bmRlciBQT1NJWCwgYW5kIDpjOmZ1bmM6YEZvcm1hdE1lc3NhZ2VgCisgICAgICB1bmRlciBXaW5kb3dzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmaWxlbmFtZQorICAgICAgICAgICAgICAgICAgZmlsZW5hbWUyCisKKyAgICAgIEZvciBleGNlcHRpb25zIHRoYXQgaW52b2x2ZSBhIGZpbGUgc3lzdGVtIHBhdGggKHN1Y2ggYXMgOmZ1bmM6YG9wZW5gIG9yCisgICAgICA6ZnVuYzpgb3MudW5saW5rYCksIDphdHRyOmBmaWxlbmFtZWAgaXMgdGhlIGZpbGUgbmFtZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorICAgICAgRm9yIGZ1bmN0aW9ucyB0aGF0IGludm9sdmUgdHdvIGZpbGUgc3lzdGVtIHBhdGhzIChzdWNoIGFzCisgICAgICA6ZnVuYzpgb3MucmVuYW1lYCksIDphdHRyOmBmaWxlbmFtZTJgIGNvcnJlc3BvbmRzIHRvIHRoZSBzZWNvbmQKKyAgICAgIGZpbGUgbmFtZSBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uLgorCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICA6ZXhjOmBFbnZpcm9ubWVudEVycm9yYCwgOmV4YzpgSU9FcnJvcmAsIDpleGM6YFdpbmRvd3NFcnJvcmAsCiAgICAgICA6ZXhjOmBWTVNFcnJvcmAsIDpleGM6YHNvY2tldC5lcnJvcmAsIDpleGM6YHNlbGVjdC5lcnJvcmAgYW5kCi0gICAgICA6ZXhjOmBtbWFwLmVycm9yYCBoYXZlIGJlZW4gbWVyZ2VkIGludG8gOmV4YzpgT1NFcnJvcmAuCisgICAgICA6ZXhjOmBtbWFwLmVycm9yYCBoYXZlIGJlZW4gbWVyZ2VkIGludG8gOmV4YzpgT1NFcnJvcmAsIGFuZCB0aGUKKyAgICAgIGNvbnN0cnVjdG9yIG1heSByZXR1cm4gYSBzdWJjbGFzcy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSA6YXR0cjpgZmlsZW5hbWVgIGF0dHJpYnV0ZSBpcyBub3cgdGhlIG9yaWdpbmFsIGZpbGUgbmFtZSBwYXNzZWQgdG8KKyAgICAgIHRoZSBmdW5jdGlvbiwgaW5zdGVhZCBvZiB0aGUgbmFtZSBlbmNvZGVkIHRvIG9yIGRlY29kZWQgZnJvbSB0aGUKKyAgICAgIGZpbGVzeXN0ZW0gZW5jb2RpbmcuICBBbHNvLCB0aGUgKmZpbGVuYW1lMiogY29uc3RydWN0b3IgYXJndW1lbnQgYW5kCisgICAgICBhdHRyaWJ1dGUgd2FzIGFkZGVkLgogCiAKIC4uIGV4Y2VwdGlvbjo6IE92ZXJmbG93RXJyb3IKIAogICAgUmFpc2VkIHdoZW4gdGhlIHJlc3VsdCBvZiBhbiBhcml0aG1ldGljIG9wZXJhdGlvbiBpcyB0b28gbGFyZ2UgdG8gYmUKICAgIHJlcHJlc2VudGVkLiAgVGhpcyBjYW5ub3Qgb2NjdXIgZm9yIGludGVnZXJzICh3aGljaCB3b3VsZCByYXRoZXIgcmFpc2UKLSAgIDpleGM6YE1lbW9yeUVycm9yYCB0aGFuIGdpdmUgdXApLiAgQmVjYXVzZSBvZiB0aGUgbGFjayBvZiBzdGFuZGFyZGl6YXRpb24gb2YKLSAgIGZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiBoYW5kbGluZyBpbiBDLCBtb3N0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgYWxzbwotICAgYXJlbid0IGNoZWNrZWQuCisgICA6ZXhjOmBNZW1vcnlFcnJvcmAgdGhhbiBnaXZlIHVwKS4gIEhvd2V2ZXIsIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMsCisgICBPdmVyZmxvd0Vycm9yIGlzIHNvbWV0aW1lcyByYWlzZWQgZm9yIGludGVnZXJzIHRoYXQgYXJlIG91dHNpZGUgYSByZXF1aXJlZAorICAgcmFuZ2UuICAgQmVjYXVzZSBvZiB0aGUgbGFjayBvZiBzdGFuZGFyZGl6YXRpb24gb2YgZmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uCisgICBoYW5kbGluZyBpbiBDLCBtb3N0IGZsb2F0aW5nIHBvaW50IG9wZXJhdGlvbnMgYXJlIG5vdCBjaGVja2VkLgogCiAKIC4uIGV4Y2VwdGlvbjo6IFJlZmVyZW5jZUVycm9yCkBAIC0zNDEsMTggKzM4MCwxNyBAQAogCiAuLiBleGNlcHRpb246OiBTeXN0ZW1FeGl0CiAKLSAgIFRoaXMgZXhjZXB0aW9uIGlzIHJhaXNlZCBieSB0aGUgOmZ1bmM6YHN5cy5leGl0YCBmdW5jdGlvbi4gIFdoZW4gaXQgaXMgbm90Ci0gICBoYW5kbGVkLCB0aGUgUHl0aG9uIGludGVycHJldGVyIGV4aXRzOyBubyBzdGFjayB0cmFjZWJhY2sgaXMgcHJpbnRlZC4gIElmIHRoZQotICAgYXNzb2NpYXRlZCB2YWx1ZSBpcyBhbiBpbnRlZ2VyLCBpdCBzcGVjaWZpZXMgdGhlIHN5c3RlbSBleGl0IHN0YXR1cyAocGFzc2VkCi0gICB0byBDJ3MgOmM6ZnVuYzpgZXhpdGAgZnVuY3Rpb24pOyBpZiBpdCBpcyBgYE5vbmVgYCwgdGhlIGV4aXQgc3RhdHVzIGlzIHplcm87Ci0gICBpZiBpdCBoYXMgYW5vdGhlciB0eXBlIChzdWNoIGFzIGEgc3RyaW5nKSwgdGhlIG9iamVjdCdzIHZhbHVlIGlzIHByaW50ZWQgYW5kCisgICBUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgYnkgdGhlIDpmdW5jOmBzeXMuZXhpdGAgZnVuY3Rpb24uICBJdCBpbmhlcml0cyBmcm9tCisgICA6ZXhjOmBCYXNlRXhjZXB0aW9uYCBpbnN0ZWFkIG9mIDpleGM6YEV4Y2VwdGlvbmAgc28gdGhhdCBpdCBpcyBub3QgYWNjaWRlbnRhbGx5CisgICBjYXVnaHQgYnkgY29kZSB0aGF0IGNhdGNoZXMgOmV4YzpgRXhjZXB0aW9uYC4gIFRoaXMgYWxsb3dzIHRoZSBleGNlcHRpb24gdG8KKyAgIHByb3Blcmx5IHByb3BhZ2F0ZSB1cCBhbmQgY2F1c2UgdGhlIGludGVycHJldGVyIHRvIGV4aXQuICBXaGVuIGl0IGlzIG5vdAorICAgaGFuZGxlZCwgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBleGl0czsgbm8gc3RhY2sgdHJhY2ViYWNrIGlzIHByaW50ZWQuICBUaGUKKyAgIGNvbnN0cnVjdG9yIGFjY2VwdHMgdGhlIHNhbWUgb3B0aW9uYWwgYXJndW1lbnQgcGFzc2VkIHRvIDpmdW5jOmBzeXMuZXhpdGAuCisgICBJZiB0aGUgdmFsdWUgaXMgYW4gaW50ZWdlciwgaXQgc3BlY2lmaWVzIHRoZSBzeXN0ZW0gZXhpdCBzdGF0dXMgKHBhc3NlZCB0bworICAgQydzIDpjOmZ1bmM6YGV4aXRgIGZ1bmN0aW9uKTsgaWYgaXQgaXMgYGBOb25lYGAsIHRoZSBleGl0IHN0YXR1cyBpcyB6ZXJvOyBpZgorICAgaXQgaGFzIGFub3RoZXIgdHlwZSAoc3VjaCBhcyBhIHN0cmluZyksIHRoZSBvYmplY3QncyB2YWx1ZSBpcyBwcmludGVkIGFuZAogICAgdGhlIGV4aXQgc3RhdHVzIGlzIG9uZS4KIAotICAgSW5zdGFuY2VzIGhhdmUgYW4gYXR0cmlidXRlIDphdHRyOmAhY29kZWAgd2hpY2ggaXMgc2V0IHRvIHRoZSBwcm9wb3NlZCBleGl0Ci0gICBzdGF0dXMgb3IgZXJyb3IgbWVzc2FnZSAoZGVmYXVsdGluZyB0byBgYE5vbmVgYCkuIEFsc28sIHRoaXMgZXhjZXB0aW9uIGRlcml2ZXMKLSAgIGRpcmVjdGx5IGZyb20gOmV4YzpgQmFzZUV4Y2VwdGlvbmAgYW5kIG5vdCA6ZXhjOmBFeGNlcHRpb25gLCBzaW5jZSBpdCBpcyBub3QKLSAgIHRlY2huaWNhbGx5IGFuIGVycm9yLgotCiAgICBBIGNhbGwgdG8gOmZ1bmM6YHN5cy5leGl0YCBpcyB0cmFuc2xhdGVkIGludG8gYW4gZXhjZXB0aW9uIHNvIHRoYXQgY2xlYW4tdXAKICAgIGhhbmRsZXJzICg6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlcyBvZiA6a2V5d29yZDpgdHJ5YCBzdGF0ZW1lbnRzKSBjYW4gYmUKICAgIGV4ZWN1dGVkLCBhbmQgc28gdGhhdCBhIGRlYnVnZ2VyIGNhbiBleGVjdXRlIGEgc2NyaXB0IHdpdGhvdXQgcnVubmluZyB0aGUgcmlzawpAQCAtMzYwLDkgKzM5OCwxMCBAQAogICAgYWJzb2x1dGVseSBwb3NpdGl2ZWx5IG5lY2Vzc2FyeSB0byBleGl0IGltbWVkaWF0ZWx5IChmb3IgZXhhbXBsZSwgaW4gdGhlIGNoaWxkCiAgICBwcm9jZXNzIGFmdGVyIGEgY2FsbCB0byA6ZnVuYzpgb3MuZm9ya2ApLgogCi0gICBUaGUgZXhjZXB0aW9uIGluaGVyaXRzIGZyb20gOmV4YzpgQmFzZUV4Y2VwdGlvbmAgaW5zdGVhZCBvZiA6ZXhjOmBFeGNlcHRpb25gIHNvCi0gICB0aGF0IGl0IGlzIG5vdCBhY2NpZGVudGFsbHkgY2F1Z2h0IGJ5IGNvZGUgdGhhdCBjYXRjaGVzIDpleGM6YEV4Y2VwdGlvbmAuICBUaGlzCi0gICBhbGxvd3MgdGhlIGV4Y2VwdGlvbiB0byBwcm9wZXJseSBwcm9wYWdhdGUgdXAgYW5kIGNhdXNlIHRoZSBpbnRlcnByZXRlciB0byBleGl0LgorICAgLi4gYXR0cmlidXRlOjogY29kZQorCisgICAgICBUaGUgZXhpdCBzdGF0dXMgb3IgZXJyb3IgbWVzc2FnZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuCisgICAgICAoRGVmYXVsdHMgdG8gYGBOb25lYGAuKQogCiAKIC4uIGV4Y2VwdGlvbjo6IFR5cGVFcnJvcgpAQCAtNDQ3LDEwICs0ODYsNiBAQAogCiAuLiBleGNlcHRpb246OiBJT0Vycm9yCiAKLS4uIGV4Y2VwdGlvbjo6IFZNU0Vycm9yCi0KLSAgIE9ubHkgYXZhaWxhYmxlIG9uIFZNUy4KLQogLi4gZXhjZXB0aW9uOjogV2luZG93c0Vycm9yCiAKICAgIE9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCkBAIC01OTUsNyArNjMwLDcgQEAKIAogLi4gZXhjZXB0aW9uOjogU3ludGF4V2FybmluZwogCi0gICBCYXNlIGNsYXNzIGZvciB3YXJuaW5ncyBhYm91dCBkdWJpb3VzIHN5bnRheAorICAgQmFzZSBjbGFzcyBmb3Igd2FybmluZ3MgYWJvdXQgZHViaW91cyBzeW50YXguCiAKIAogLi4gZXhjZXB0aW9uOjogUnVudGltZVdhcm5pbmcKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QgYi9Eb2MvbGlicmFyeS9mYXVsdGhhbmRsZXIucnN0CmluZGV4IDNjMzM2MjEuLmViMjAxNmEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZhdWx0aGFuZGxlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmF1bHRoYW5kbGVyLnJzdApAQCAtNCwxMiArNCwxNCBAQAogLi4gbW9kdWxlOjogZmF1bHRoYW5kbGVyCiAgICA6c3lub3BzaXM6IER1bXAgdGhlIFB5dGhvbiB0cmFjZWJhY2suCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuMworCiBUaGlzIG1vZHVsZSBjb250YWlucyBmdW5jdGlvbnMgdG8gZHVtcCBQeXRob24gdHJhY2ViYWNrcyBleHBsaWNpdGx5LCBvbiBhIGZhdWx0LAogYWZ0ZXIgYSB0aW1lb3V0LCBvciBvbiBhIHVzZXIgc2lnbmFsLiBDYWxsIDpmdW5jOmBmYXVsdGhhbmRsZXIuZW5hYmxlYCB0bwogaW5zdGFsbCBmYXVsdCBoYW5kbGVycyBmb3IgdGhlIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwKIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCwgYW5kIDpjb25zdDpgU0lHSUxMYCBzaWduYWxzLiBZb3UgY2FuIGFsc28KIGVuYWJsZSB0aGVtIGF0IHN0YXJ0dXAgYnkgc2V0dGluZyB0aGUgOmVudnZhcjpgUFlUSE9ORkFVTFRIQU5ETEVSYCBlbnZpcm9ubWVudAotdmFyaWFibGUgb3IgYnkgdXNpbmcgOm9wdGlvbjpgLVhgIGBgZmF1bHRoYW5kbGVyYGAgY29tbWFuZCBsaW5lIG9wdGlvbi4KK3ZhcmlhYmxlIG9yIGJ5IHVzaW5nIHRoZSA6b3B0aW9uOmAtWGAgYGBmYXVsdGhhbmRsZXJgYCBjb21tYW5kIGxpbmUgb3B0aW9uLgogCiBUaGUgZmF1bHQgaGFuZGxlciBpcyBjb21wYXRpYmxlIHdpdGggc3lzdGVtIGZhdWx0IGhhbmRsZXJzIGxpa2UgQXBwb3J0IG9yIHRoZQogV2luZG93cyBmYXVsdCBoYW5kbGVyLiBUaGUgbW9kdWxlIHVzZXMgYW4gYWx0ZXJuYXRpdmUgc3RhY2sgZm9yIHNpZ25hbCBoYW5kbGVycwpAQCAtMjcsNiArMjksNyBAQAogKiBPbmx5IHRoZSBmaWxlbmFtZSwgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIHRoZSBsaW5lIG51bWJlciBhcmUKICAgZGlzcGxheWVkLiAobm8gc291cmNlIGNvZGUpCiAqIEl0IGlzIGxpbWl0ZWQgdG8gMTAwIGZyYW1lcyBhbmQgMTAwIHRocmVhZHMuCisqIFRoZSBvcmRlciBpcyByZXZlcnNlZDogdGhlIG1vc3QgcmVjZW50IGNhbGwgaXMgc2hvd24gZmlyc3QuCiAKIEJ5IGRlZmF1bHQsIHRoZSBQeXRob24gdHJhY2ViYWNrIGlzIHdyaXR0ZW4gdG8gOmRhdGE6YHN5cy5zdGRlcnJgLiBUbyBzZWUKIHRyYWNlYmFja3MsIGFwcGxpY2F0aW9ucyBtdXN0IGJlIHJ1biBpbiB0aGUgdGVybWluYWwuIEEgbG9nIGZpbGUgY2FuCkBAIC0zNSwxMSArMzgsOSBAQAogVGhlIG1vZHVsZSBpcyBpbXBsZW1lbnRlZCBpbiBDLCBzbyB0cmFjZWJhY2tzIGNhbiBiZSBkdW1wZWQgb24gYSBjcmFzaCBvciB3aGVuCiBQeXRob24gaXMgZGVhZGxvY2tlZC4KIAotLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLQotRHVtcCB0aGUgdHJhY2ViYWNrCi0tLS0tLS0tLS0tLS0tLS0tLS0KK0R1bXBpbmcgdGhlIHRyYWNlYmFjaworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC4uIGZ1bmN0aW9uOjogZHVtcF90cmFjZWJhY2soZmlsZT1zeXMuc3RkZXJyLCBhbGxfdGhyZWFkcz1UcnVlKQogCkBAIC02OCw4ICs2OSw4IEBACiAgICBDaGVjayBpZiB0aGUgZmF1bHQgaGFuZGxlciBpcyBlbmFibGVkLgogCiAKLUR1bXAgdGhlIHRyYWNlYmFja3MgYWZ0ZXIgYSB0aW1lb3V0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRHVtcGluZyB0aGUgdHJhY2ViYWNrcyBhZnRlciBhIHRpbWVvdXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIC4uIGZ1bmN0aW9uOjogZHVtcF90cmFjZWJhY2tfbGF0ZXIodGltZW91dCwgcmVwZWF0PUZhbHNlLCBmaWxlPXN5cy5zdGRlcnIsIGV4aXQ9RmFsc2UpCiAKQEAgLTg5LDggKzkwLDggQEAKICAgIENhbmNlbCB0aGUgbGFzdCBjYWxsIHRvIDpmdW5jOmBkdW1wX3RyYWNlYmFja19sYXRlcmAuCiAKIAotRHVtcCB0aGUgdHJhY2ViYWNrIG9uIGEgdXNlciBzaWduYWwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitEdW1waW5nIHRoZSB0cmFjZWJhY2sgb24gYSB1c2VyIHNpZ25hbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLi4gZnVuY3Rpb246OiByZWdpc3RlcihzaWdudW0sIGZpbGU9c3lzLnN0ZGVyciwgYWxsX3RocmVhZHM9VHJ1ZSwgY2hhaW49RmFsc2UpCiAKQEAgLTEwOSw4ICsxMTAsOCBAQAogICAgTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgogCiAKLUZpbGUgZGVzY3JpcHRvciBpc3N1ZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJc3N1ZSB3aXRoIGZpbGUgZGVzY3JpcHRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiA6ZnVuYzpgZW5hYmxlYCwgOmZ1bmM6YGR1bXBfdHJhY2ViYWNrX2xhdGVyYCBhbmQgOmZ1bmM6YHJlZ2lzdGVyYCBrZWVwIHRoZQogZmlsZSBkZXNjcmlwdG9yIG9mIHRoZWlyICpmaWxlKiBhcmd1bWVudC4gSWYgdGhlIGZpbGUgaXMgY2xvc2VkIGFuZCBpdHMgZmlsZQpAQCAtMTIyLDE0ICsxMjMsMjAgQEAKIEV4YW1wbGUKIC0tLS0tLS0KIAotRXhhbXBsZSBvZiBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvbiBMaW51eDogOjoKKy4uIGhpZ2hsaWdodDo6IHNoCiAKLSAgICAkIHB5dGhvbiAtcSAtWCBmYXVsdGhhbmRsZXIKK0V4YW1wbGUgb2YgYSBzZWdtZW50YXRpb24gZmF1bHQgb24gTGludXggd2l0aCBhbmQgd2l0aG91dCBlbmFibGluZyB0aGUgZmF1bHQKK2hhbmRsZXI6OgorCisgICAgJCBweXRob24zIC1jICJpbXBvcnQgY3R5cGVzOyBjdHlwZXMuc3RyaW5nX2F0KDApIgorICAgIFNlZ21lbnRhdGlvbiBmYXVsdAorCisgICAgJCBweXRob24zIC1xIC1YIGZhdWx0aGFuZGxlcgogICAgID4+PiBpbXBvcnQgY3R5cGVzCiAgICAgPj4+IGN0eXBlcy5zdHJpbmdfYXQoMCkKICAgICBGYXRhbCBQeXRob24gZXJyb3I6IFNlZ21lbnRhdGlvbiBmYXVsdAogCi0gICAgQ3VycmVudCB0aHJlYWQgMHgwMDAwN2ZiODk5ZjM5NzAwOgorICAgIEN1cnJlbnQgdGhyZWFkIDB4MDAwMDdmYjg5OWYzOTcwMCAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6CiAgICAgICBGaWxlICIvaG9tZS9weXRob24vY3B5dGhvbi9MaWIvY3R5cGVzL19faW5pdF9fLnB5IiwgbGluZSA0ODYgaW4gc3RyaW5nX2F0CiAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxIGluIDxtb2R1bGU+CiAgICAgU2VnbWVudGF0aW9uIGZhdWx0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mY250bC5yc3QgYi9Eb2MvbGlicmFyeS9mY250bC5yc3QKaW5kZXggOGU5MzJmYi4uYjc5OGYyMiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmNudGwucnN0CisrKyBiL0RvYy9saWJyYXJ5L2ZjbnRsLnJzdApAQCAtMTYsMTMgKzE2LDEzIEBACiAKIEFsbCBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgdGFrZSBhIGZpbGUgZGVzY3JpcHRvciAqZmQqIGFzIHRoZWlyIGZpcnN0CiBhcmd1bWVudC4gIFRoaXMgY2FuIGJlIGFuIGludGVnZXIgZmlsZSBkZXNjcmlwdG9yLCBzdWNoIGFzIHJldHVybmVkIGJ5Ci1gYHN5cy5zdGRpbi5maWxlbm8oKWBgLCBvciBhIDpjbGFzczpgaW8uSU9CYXNlYCBvYmplY3QsIHN1Y2ggYXMgYGBzeXMuc3RkaW5gYAorYGBzeXMuc3RkaW4uZmlsZW5vKClgYCwgb3IgYW4gOmNsYXNzOmBpby5JT0Jhc2VgIG9iamVjdCwgc3VjaCBhcyBgYHN5cy5zdGRpbmBgCiBpdHNlbGYsIHdoaWNoIHByb3ZpZGVzIGEgOm1ldGg6YH5pby5JT0Jhc2UuZmlsZW5vYCB0aGF0IHJldHVybnMgYSBnZW51aW5lIGZpbGUKIGRlc2NyaXB0b3IuCiAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICBPcGVyYXRpb25zIGluIHRoaXMgbW9kdWxlIHVzZWQgdG8gcmFpc2UgYSA6ZXhjOmBJT0Vycm9yYCB3aGVyZSB0aGV5IG5vdwotICAgcmFpc2UgYSA6ZXhjOmBPU0Vycm9yYC4KKyAgIE9wZXJhdGlvbnMgaW4gdGhpcyBtb2R1bGUgdXNlZCB0byByYWlzZSBhbiA6ZXhjOmBJT0Vycm9yYCB3aGVyZSB0aGV5IG5vdworICAgcmFpc2UgYW4gOmV4YzpgT1NFcnJvcmAuCiAKIAogVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgpAQCAtODMsNiArODMsOCBAQAogICAgYnVmZmVyIDEwMjQgYnl0ZXMgbG9uZyB3aGljaCBpcyB0aGVuIHBhc3NlZCB0byA6ZnVuYzpgaW9jdGxgIGFuZCBjb3BpZWQgYmFjawogICAgaW50byB0aGUgc3VwcGxpZWQgYnVmZmVyLgogCisgICBJZiB0aGUgOmM6ZnVuYzpgaW9jdGxgIGZhaWxzLCBhbiA6ZXhjOmBJT0Vycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkLgorCiAgICBBbiBleGFtcGxlOjoKIAogICAgICAgPj4+IGltcG9ydCBhcnJheSwgZmNudGwsIHN0cnVjdCwgdGVybWlvcywgb3MKQEAgLTEwNCw2ICsxMDYsOCBAQAogICAgOm1hbnBhZ2U6YGZsb2NrKDIpYCBmb3IgZGV0YWlscy4gIChPbiBzb21lIHN5c3RlbXMsIHRoaXMgZnVuY3Rpb24gaXMgZW11bGF0ZWQKICAgIHVzaW5nIDpjOmZ1bmM6YGZjbnRsYC4pCiAKKyAgIElmIHRoZSA6YzpmdW5jOmBmbG9ja2AgZmFpbHMsIGFuIDpleGM6YElPRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCisKIAogLi4gZnVuY3Rpb246OiBsb2NrZihmZCwgb3BlcmF0aW9uLCBbbGVuZ3RoLCBbc3RhcnQsIFt3aGVuY2VdXV0pCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZpbGVjbXAucnN0IGIvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKaW5kZXggOGE4OGY4Yy4uMDZkM2YyMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmlsZWNtcC5yc3QKQEAgLTI3LDYgKzI3LDEwIEBACiAgICBOb3RlIHRoYXQgbm8gZXh0ZXJuYWwgcHJvZ3JhbXMgYXJlIGNhbGxlZCBmcm9tIHRoaXMgZnVuY3Rpb24sIGdpdmluZyBpdAogICAgcG9ydGFiaWxpdHkgYW5kIGVmZmljaWVuY3kuCiAKKyAgIFRoaXMgZnVuY3Rpb24gdXNlcyBhIGNhY2hlIGZvciBwYXN0IGNvbXBhcmlzb25zIGFuZCB0aGUgcmVzdWx0cywKKyAgIHdpdGggY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBpZiB0aGUgOmZ1bmM6YG9zLnN0YXRgIGluZm9ybWF0aW9uIGZvciB0aGUKKyAgIGZpbGUgY2hhbmdlcy4gIFRoZSBlbnRpcmUgY2FjaGUgbWF5IGJlIGNsZWFyZWQgdXNpbmcgOmZ1bmM6YGNsZWFyX2NhY2hlYC4KKwogCiAuLiBmdW5jdGlvbjo6IGNtcGZpbGVzKGRpcjEsIGRpcjIsIGNvbW1vbiwgc2hhbGxvdz1UcnVlKQogCkBAIC00OCw2ICs1MiwxNSBAQAogICAgb25lIG9mIHRoZSB0aHJlZSByZXR1cm5lZCBsaXN0cy4KIAogCisuLiBmdW5jdGlvbjo6IGNsZWFyX2NhY2hlKCkKKworICAgQ2xlYXIgdGhlIGZpbGVjbXAgY2FjaGUuIFRoaXMgbWF5IGJlIHVzZWZ1bCBpZiBhIGZpbGUgaXMgY29tcGFyZWQgc28gcXVpY2tseQorICAgYWZ0ZXIgaXQgaXMgbW9kaWZpZWQgdGhhdCBpdCBpcyB3aXRoaW4gdGhlIG10aW1lIHJlc29sdXRpb24gb2YKKyAgIHRoZSB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIF9kaXJjbXAtb2JqZWN0czoKIAogVGhlIDpjbGFzczpgZGlyY21wYCBjbGFzcwpAQCAtNTUsMjggKzY4LDI1IEBACiAKIC4uIGNsYXNzOjogZGlyY21wKGEsIGIsIGlnbm9yZT1Ob25lLCBoaWRlPU5vbmUpCiAKLSAgIENvbnN0cnVjdCBhIG5ldyBkaXJlY3RvcnkgY29tcGFyaXNvbiBvYmplY3QsIHRvIGNvbXBhcmUgdGhlIGRpcmVjdG9yaWVzICphKiBhbmQKLSAgICpiKi4gKmlnbm9yZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGlnbm9yZSwgYW5kIGRlZmF1bHRzIHRvIGBgWydSQ1MnLCAnQ1ZTJywKLSAgICd0YWdzJ11gYC4gKmhpZGUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBoaWRlLCBhbmQgZGVmYXVsdHMgdG8gYGBbb3MuY3VyZGlyLAotICAgb3MucGFyZGlyXWBgLgorICAgQ29uc3RydWN0IGEgbmV3IGRpcmVjdG9yeSBjb21wYXJpc29uIG9iamVjdCwgdG8gY29tcGFyZSB0aGUgZGlyZWN0b3JpZXMgKmEqCisgICBhbmQgKmIqLiAgKmlnbm9yZSogaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGlnbm9yZSwgYW5kIGRlZmF1bHRzIHRvCisgICA6YXR0cjpgZmlsZWNtcC5ERUZBVUxUX0lHTk9SRVNgLiAgKmhpZGUqIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBoaWRlLCBhbmQKKyAgIGRlZmF1bHRzIHRvIGBgW29zLmN1cmRpciwgb3MucGFyZGlyXWBgLgogCiAgICBUaGUgOmNsYXNzOmBkaXJjbXBgIGNsYXNzIGNvbXBhcmVzIGZpbGVzIGJ5IGRvaW5nICpzaGFsbG93KiBjb21wYXJpc29ucwogICAgYXMgZGVzY3JpYmVkIGZvciA6ZnVuYzpgZmlsZWNtcC5jbXBgLgogCiAgICBUaGUgOmNsYXNzOmBkaXJjbXBgIGNsYXNzIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAotCiAgICAuLiBtZXRob2Q6OiByZXBvcnQoKQogCiAgICAgICBQcmludCAodG8gOmRhdGE6YHN5cy5zdGRvdXRgKSBhIGNvbXBhcmlzb24gYmV0d2VlbiAqYSogYW5kICpiKi4KIAotCiAgICAuLiBtZXRob2Q6OiByZXBvcnRfcGFydGlhbF9jbG9zdXJlKCkKIAogICAgICAgUHJpbnQgYSBjb21wYXJpc29uIGJldHdlZW4gKmEqIGFuZCAqYiogYW5kIGNvbW1vbiBpbW1lZGlhdGUKICAgICAgIHN1YmRpcmVjdG9yaWVzLgogCi0KICAgIC4uIG1ldGhvZDo6IHJlcG9ydF9mdWxsX2Nsb3N1cmUoKQogCiAgICAgICBQcmludCBhIGNvbXBhcmlzb24gYmV0d2VlbiAqYSogYW5kICpiKiBhbmQgY29tbW9uIHN1YmRpcmVjdG9yaWVzCkBAIC0xMzMsNyArMTQzLDcgQEAKIAogICAgLi4gYXR0cmlidXRlOjogY29tbW9uX2ZpbGVzCiAKLSAgICAgIEZpbGVzIGluIGJvdGggKmEqIGFuZCAqYioKKyAgICAgIEZpbGVzIGluIGJvdGggKmEqIGFuZCAqYiouCiAKIAogICAgLi4gYXR0cmlidXRlOjogY29tbW9uX2Z1bm55CkBAIC0xNjQsNiArMTc0LDEyIEBACiAgICAgICBBIGRpY3Rpb25hcnkgbWFwcGluZyBuYW1lcyBpbiA6YXR0cjpgY29tbW9uX2RpcnNgIHRvIDpjbGFzczpgZGlyY21wYAogICAgICAgb2JqZWN0cy4KIAorLi4gYXR0cmlidXRlOjogREVGQVVMVF9JR05PUkVTCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICBMaXN0IG9mIGRpcmVjdG9yaWVzIGlnbm9yZWQgYnkgOmNsYXNzOmBkaXJjbXBgIGJ5IGRlZmF1bHQuCisKIAogSGVyZSBpcyBhIHNpbXBsaWZpZWQgZXhhbXBsZSBvZiB1c2luZyB0aGUgYGBzdWJkaXJzYGAgYXR0cmlidXRlIHRvIHNlYXJjaAogcmVjdXJzaXZlbHkgdGhyb3VnaCB0d28gZGlyZWN0b3JpZXMgdG8gc2hvdyBjb21tb24gZGlmZmVyZW50IGZpbGVzOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QgYi9Eb2MvbGlicmFyeS9maWxlaW5wdXQucnN0CmluZGV4IGQ1YTQ4NzUuLmVlMDY4MzAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZpbGVpbnB1dC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmlsZWlucHV0LnJzdApAQCAtMTYwLDYgKzE2MCw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQ2FuIGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgVGhlIGBgJ3JVJ2BgIGFuZCBgYCdVJ2BgIG1vZGVzLgorCiAKICoqT3B0aW9uYWwgaW4tcGxhY2UgZmlsdGVyaW5nOioqIGlmIHRoZSBrZXl3b3JkIGFyZ3VtZW50IGBgaW5wbGFjZT1UcnVlYGAgaXMKIHBhc3NlZCB0byA6ZnVuYzpgZmlsZWlucHV0LmlucHV0YCBvciB0byB0aGUgOmNsYXNzOmBGaWxlSW5wdXRgIGNvbnN0cnVjdG9yLCB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZpbGVzeXMucnN0IGIvRG9jL2xpYnJhcnkvZmlsZXN5cy5yc3QKaW5kZXggNTg5OThhOC4uMDNlMDg1YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZmlsZXN5cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZmlsZXN5cy5yc3QKQEAgLTEyLDYgKzEyLDcgQEAKIAogLi4gdG9jdHJlZTo6CiAKKyAgIHBhdGhsaWIucnN0CiAgICBvcy5wYXRoLnJzdAogICAgZmlsZWlucHV0LnJzdAogICAgc3RhdC5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZubWF0Y2gucnN0IGIvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QKaW5kZXggZTA0MzRiMC4uNjhiNDM3ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZm5tYXRjaC5yc3QKQEAgLTgzLDEwICs4MywxMCBAQAogICAgICAgPj4+CiAgICAgICA+Pj4gcmVnZXggPSBmbm1hdGNoLnRyYW5zbGF0ZSgnKi50eHQnKQogICAgICAgPj4+IHJlZ2V4Ci0gICAgICAnLipcXC50eHQkJworICAgICAgJy4qXFwudHh0XFxaKD9tcyknCiAgICAgICA+Pj4gcmVvYmogPSByZS5jb21waWxlKHJlZ2V4KQogICAgICAgPj4+IHJlb2JqLm1hdGNoKCdmb29iYXIudHh0JykKLSAgICAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgMHguLi4+CisgICAgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxMCksIG1hdGNoPSdmb29iYXIudHh0Jz4KIAogCiAuLiBzZWVhbHNvOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QgYi9Eb2MvbGlicmFyeS9mb3JtYXR0ZXIucnN0CmluZGV4IDg4YmUxMWMuLjE4NDdhODAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2Zvcm1hdHRlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZm9ybWF0dGVyLnJzdApAQCAtMyw2ICszLDExIEBACiAKIC4uIG1vZHVsZTo6IGZvcm1hdHRlcgogICAgOnN5bm9wc2lzOiBHZW5lcmljIG91dHB1dCBmb3JtYXR0ZXIgYW5kIGRldmljZSBpbnRlcmZhY2UuCisgICA6ZGVwcmVjYXRlZDoKKworLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgRHVlIHRvIGxhY2sgb2YgdXNhZ2UsIHRoZSBmb3JtYXR0ZXIgbW9kdWxlIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIGlzIHNsYXRlZAorICAgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNi4KIAogCiBUaGlzIG1vZHVsZSBzdXBwb3J0cyB0d28gaW50ZXJmYWNlIGRlZmluaXRpb25zLCBlYWNoIHdpdGggbXVsdGlwbGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ZyYWN0aW9ucy5yc3QgYi9Eb2MvbGlicmFyeS9mcmFjdGlvbnMucnN0CmluZGV4IGMyYzc0MDEuLjNkMjUyOWQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ZyYWN0aW9ucy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZnJhY3Rpb25zLnJzdApAQCAtOTcsNyArOTcsNyBAQAogCiAgICAgICBUaGlzIGNsYXNzIG1ldGhvZCBjb25zdHJ1Y3RzIGEgOmNsYXNzOmBGcmFjdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBleGFjdAogICAgICAgdmFsdWUgb2YgKmZsdCosIHdoaWNoIG11c3QgYmUgYSA6Y2xhc3M6YGZsb2F0YC4gQmV3YXJlIHRoYXQKLSAgICAgIGBgRnJhY3Rpb24uZnJvbV9mbG9hdCgwLjMpYGAgaXMgbm90IHRoZSBzYW1lIHZhbHVlIGFzIGBgRnJhY3Rpb24oMywgMTApYGAKKyAgICAgIGBgRnJhY3Rpb24uZnJvbV9mbG9hdCgwLjMpYGAgaXMgbm90IHRoZSBzYW1lIHZhbHVlIGFzIGBgRnJhY3Rpb24oMywgMTApYGAuCiAKICAgICAgIC4uIG5vdGU6OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdHBsaWIucnN0IGIvRG9jL2xpYnJhcnkvZnRwbGliLnJzdAppbmRleCBkY2IyYWM0Li5mMDZlNjc4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdHBsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z0cGxpYi5yc3QKQEAgLTUyLDggKzUyLDcgQEAKICAgIHdpbGwgYmUgdXNlZCkuICpzb3VyY2VfYWRkcmVzcyogaXMgYSAyLXR1cGxlIGBgKGhvc3QsIHBvcnQpYGAgZm9yIHRoZSBzb2NrZXQKICAgIHRvIGJpbmQgdG8gYXMgaXRzIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0aW5nLgogCi0gICA6Y2xhc3M6YEZUUGAgY2xhc3Mgc3VwcG9ydHMgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuIEhlcmUgaXMgYSBzYW1wbGUKLSAgIG9uIGhvdyB1c2luZyBpdDoKKyAgIFRoZSA6Y2xhc3M6YEZUUGAgY2xhc3Mgc3VwcG9ydHMgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIGUuZy46CiAKICAgICA+Pj4gZnJvbSBmdHBsaWIgaW1wb3J0IEZUUAogICAgID4+PiB3aXRoIEZUUCgiZnRwMS5hdC5wcm9mdHBkLm9yZyIpIGFzIGZ0cDoKQEAgLTgwLDQwICs3OSwzNCBAQAogICAgOnJmYzpgNDIxN2AuCiAgICBDb25uZWN0IGFzIHVzdWFsIHRvIHBvcnQgMjEgaW1wbGljaXRseSBzZWN1cmluZyB0aGUgRlRQIGNvbnRyb2wgY29ubmVjdGlvbgogICAgYmVmb3JlIGF1dGhlbnRpY2F0aW5nLiBTZWN1cmluZyB0aGUgZGF0YSBjb25uZWN0aW9uIHJlcXVpcmVzIHRoZSB1c2VyIHRvCi0gICBleHBsaWNpdGx5IGFzayBmb3IgaXQgYnkgY2FsbGluZyB0aGUgOm1ldGg6YHByb3RfcGAgbWV0aG9kLgotICAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBvcHRpb25hbCAtLSB0aGV5IGNhbiBjb250YWluIGEgUEVNIGZvcm1hdHRlZAotICAgcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlIGNoYWluIGZpbGUgbmFtZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLgotICAgKmNvbnRleHQqIHBhcmFtZXRlciBpcyBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCB3aGljaCBhbGxvd3MKLSAgIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBrZXlzIGludG8gYQotICAgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuICpzb3VyY2VfYWRkcmVzcyogaXMgYSAyLXR1cGxlCi0gICBgYChob3N0LCBwb3J0KWBgIGZvciB0aGUgc29ja2V0IHRvIGJpbmQgdG8gYXMgaXRzIHNvdXJjZSBhZGRyZXNzIGJlZm9yZQotICAgY29ubmVjdGluZy4KKyAgIGV4cGxpY2l0bHkgYXNrIGZvciBpdCBieSBjYWxsaW5nIHRoZSA6bWV0aDpgcHJvdF9wYCBtZXRob2QuICAqY29udGV4dCoKKyAgIGlzIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IHdoaWNoIGFsbG93cyBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbgorICAgb3B0aW9ucywgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIGtleXMgaW50byBhIHNpbmdsZSAocG90ZW50aWFsbHkKKyAgIGxvbmctbGl2ZWQpIHN0cnVjdHVyZS4gIFBsZWFzZSByZWFkIDpyZWY6YHNzbC1zZWN1cml0eWAgZm9yIGJlc3QgcHJhY3RpY2VzLgorCisgICAqa2V5ZmlsZSogYW5kICpjZXJ0ZmlsZSogYXJlIGEgbGVnYWN5IGFsdGVybmF0aXZlIHRvICpjb250ZXh0KiAtLSB0aGV5CisgICBjYW4gcG9pbnQgdG8gUEVNLWZvcm1hdHRlZCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgY2hhaW4gZmlsZXMKKyAgIChyZXNwZWN0aXZlbHkpIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnNvdXJjZV9hZGRyZXNzKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgogCi0gICBIZXJlJ3MgYSBzYW1wbGUgc2Vzc2lvbiB1c2luZyB0aGUgOmNsYXNzOmBGVFBfVExTYCBjbGFzczoKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgY2xhc3Mgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAotICAgPj4+IGZyb20gZnRwbGliIGltcG9ydCBGVFBfVExTCi0gICA+Pj4gZnRwcyA9IEZUUF9UTFMoJ2Z0cC5weXRob24ub3JnJykKLSAgID4+PiBmdHBzLmxvZ2luKCkgICAgICAgICAgICMgbG9naW4gYW5vbnltb3VzbHkgYmVmb3JlIHNlY3VyaW5nIGNvbnRyb2wgY2hhbm5lbAotICAgPj4+IGZ0cHMucHJvdF9wKCkgICAgICAgICAgIyBzd2l0Y2ggdG8gc2VjdXJlIGRhdGEgY29ubmVjdGlvbgotICAgPj4+IGZ0cHMucmV0cmxpbmVzKCdMSVNUJykgIyBsaXN0IGRpcmVjdG9yeSBjb250ZW50IHNlY3VyZWx5Ci0gICB0b3RhbCA5Ci0gICBkcnd4ci14ci14ICAgOCByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgLgotICAgZHJ3eHIteHIteCAgIDggcm9vdCAgICAgd2hlZWwgICAgICAgIDEwMjQgSmFuICAzICAxOTk0IC4uCi0gICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgYmluCi0gICBkcnd4ci14ci14ICAgMiByb290ICAgICB3aGVlbCAgICAgICAgMTAyNCBKYW4gIDMgIDE5OTQgZXRjCi0gICBkLXd4cnd4ci14ICAgMiBmdHAgICAgICB3aGVlbCAgICAgICAgMTAyNCBTZXAgIDUgMTM6NDMgaW5jb21pbmcKLSAgIGRyd3hyLXhyLXggICAyIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IE5vdiAxNyAgMTk5MyBsaWIKLSAgIGRyd3hyLXhyLXggICA2IDEwOTQgICAgIHdoZWVsICAgICAgICAxMDI0IFNlcCAxMyAxOTowNyBwdWIKLSAgIGRyd3hyLXhyLXggICAzIHJvb3QgICAgIHdoZWVsICAgICAgICAxMDI0IEphbiAgMyAgMTk5NCB1c3IKLSAgIC1ydy1yLS1yLS0gICAxIHJvb3QgICAgIHJvb3QgICAgICAgICAgMzEyIEF1ZyAgMSAgMTk5NCB3ZWxjb21lLm1zZwotICAgJzIyNiBUcmFuc2ZlciBjb21wbGV0ZS4nCi0gICA+Pj4gZnRwcy5xdWl0KCkKLSAgID4+PgorICAgSGVyZSdzIGEgc2FtcGxlIHNlc3Npb24gdXNpbmcgdGhlIDpjbGFzczpgRlRQX1RMU2AgY2xhc3M6OgorCisgICAgICA+Pj4gZnRwcyA9IEZUUF9UTFMoJ2Z0cC5wdXJlZnRwZC5vcmcnKQorICAgICAgPj4+IGZ0cHMubG9naW4oKQorICAgICAgJzIzMCBBbm9ueW1vdXMgdXNlciBsb2dnZWQgaW4nCisgICAgICA+Pj4gZnRwcy5wcm90X3AoKQorICAgICAgJzIwMCBEYXRhIHByb3RlY3Rpb24gbGV2ZWwgc2V0IHRvICJwcml2YXRlIicKKyAgICAgID4+PiBmdHBzLm5sc3QoKQorICAgICAgWyc2amFjaycsICdPcGVuQlNEJywgJ2FudGlsaW5rJywgJ2Jsb2diZW5jaCcsICdic2RjYW0nLCAnY2xvY2tzcGVlZCcsICdkamJkbnMtamVkaScsICdkb2NzJywgJ2VhY2NlbGVyYXRvci1qZWRpJywgJ2Zhdmljb24uaWNvJywgJ2ZyYW5jb3RvbmUnLCAnZnVndScsICdpZ25vcmUnLCAnbGlicHV6emxlJywgJ21ldGFsb2cnLCAnbWluaWRlbnRkJywgJ21pc2MnLCAnbXlzcWwtdWRmLWdsb2JhbC11c2VyLXZhcmlhYmxlcycsICdwaHAtamVua2lucy1oYXNoJywgJ3BocC1za2Vpbi1oYXNoJywgJ3BocC13ZWJkYXYnLCAncGhwYXVkaXQnLCAncGhwYmVuY2gnLCAncGluY2FzdGVyJywgJ3BpbmcnLCAncG9zdG8nLCAncHViJywgJ3B1YmxpYycsICdwdWJsaWNfa2V5cycsICdwdXJlLWZ0cGQnLCAncXNjYW4nLCAncXRjJywgJ3NoYXJlZGFuY2UnLCAnc2t5Y2FjaGUnLCAnc291bmQnLCAndG1wJywgJ3VjYXJwJ10KIAogCiAuLiBleGNlcHRpb246OiBlcnJvcl9yZXBseQpAQCAtMjY4LDEwICsyNjEsMTAgQEAKICAgIFBhc3NpdmUgbW9kZSBpcyBvbiBieSBkZWZhdWx0LgogCiAKLS4uIG1ldGhvZDo6IEZUUC5zdG9yYmluYXJ5KGNtZCwgZmlsZSwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSkKKy4uIG1ldGhvZDo6IEZUUC5zdG9yYmluYXJ5KGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lLCByZXN0PU5vbmUpCiAKICAgIFN0b3JlIGEgZmlsZSBpbiBiaW5hcnkgdHJhbnNmZXIgbW9kZS4gICpjbWQqIHNob3VsZCBiZSBhbiBhcHByb3ByaWF0ZQotICAgYGBTVE9SYGAgY29tbWFuZDogYGAiU1RPUiBmaWxlbmFtZSJgYC4gKmZpbGUqIGlzIGEgOnRlcm06YGZpbGUgb2JqZWN0YAorICAgYGBTVE9SYGAgY29tbWFuZDogYGAiU1RPUiBmaWxlbmFtZSJgYC4gKmZwKiBpcyBhIDp0ZXJtOmBmaWxlIG9iamVjdGAKICAgIChvcGVuZWQgaW4gYmluYXJ5IG1vZGUpIHdoaWNoIGlzIHJlYWQgdW50aWwgRU9GIHVzaW5nIGl0cyA6bWV0aDpgfmlvLklPQmFzZS5yZWFkYAogICAgbWV0aG9kIGluIGJsb2NrcyBvZiBzaXplICpibG9ja3NpemUqIHRvIHByb3ZpZGUgdGhlIGRhdGEgdG8gYmUgc3RvcmVkLgogICAgVGhlICpibG9ja3NpemUqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIDgxOTIuICAqY2FsbGJhY2sqIGlzIGFuIG9wdGlvbmFsIHNpbmdsZQpAQCAtMjgyLDIwICsyNzUsMjAgQEAKICAgICAgICpyZXN0KiBwYXJhbWV0ZXIgYWRkZWQuCiAKIAotLi4gbWV0aG9kOjogRlRQLnN0b3JsaW5lcyhjbWQsIGZpbGUsIGNhbGxiYWNrPU5vbmUpCisuLiBtZXRob2Q6OiBGVFAuc3RvcmxpbmVzKGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpCiAKICAgIFN0b3JlIGEgZmlsZSBpbiBBU0NJSSB0cmFuc2ZlciBtb2RlLiAgKmNtZCogc2hvdWxkIGJlIGFuIGFwcHJvcHJpYXRlCiAgICBgYFNUT1JgYCBjb21tYW5kIChzZWUgOm1ldGg6YHN0b3JiaW5hcnlgKS4gIExpbmVzIGFyZSByZWFkIHVudGlsIEVPRiBmcm9tIHRoZQotICAgOnRlcm06YGZpbGUgb2JqZWN0YCAqZmlsZSogKG9wZW5lZCBpbiBiaW5hcnkgbW9kZSkgdXNpbmcgaXRzIDptZXRoOmB+aW8uSU9CYXNlLnJlYWRsaW5lYAorICAgOnRlcm06YGZpbGUgb2JqZWN0YCAqZnAqIChvcGVuZWQgaW4gYmluYXJ5IG1vZGUpIHVzaW5nIGl0cyA6bWV0aDpgfmlvLklPQmFzZS5yZWFkbGluZWAKICAgIG1ldGhvZCB0byBwcm92aWRlIHRoZSBkYXRhIHRvIGJlIHN0b3JlZC4gICpjYWxsYmFjayogaXMgYW4gb3B0aW9uYWwgc2luZ2xlCiAgICBwYXJhbWV0ZXIgY2FsbGFibGUgdGhhdCBpcyBjYWxsZWQgb24gZWFjaCBsaW5lIGFmdGVyIGl0IGlzIHNlbnQuCiAKIAogLi4gbWV0aG9kOjogRlRQLnRyYW5zZmVyY21kKGNtZCwgcmVzdD1Ob25lKQogCi0gICBJbml0aWF0ZSBhIHRyYW5zZmVyIG92ZXIgdGhlIGRhdGEgY29ubmVjdGlvbi4gIElmIHRoZSB0cmFuc2ZlciBpcyBhY3RpdmUsIHNlbmQgYQorICAgSW5pdGlhdGUgYSB0cmFuc2ZlciBvdmVyIHRoZSBkYXRhIGNvbm5lY3Rpb24uICBJZiB0aGUgdHJhbnNmZXIgaXMgYWN0aXZlLCBzZW5kIGFuCiAgICBgYEVQUlRgYCBvciAgYGBQT1JUYGAgY29tbWFuZCBhbmQgdGhlIHRyYW5zZmVyIGNvbW1hbmQgc3BlY2lmaWVkIGJ5ICpjbWQqLCBhbmQKLSAgIGFjY2VwdCB0aGUgY29ubmVjdGlvbi4gIElmIHRoZSBzZXJ2ZXIgaXMgcGFzc2l2ZSwgc2VuZCBhIGBgRVBTVmBgIG9yIGBgUEFTVmBgCisgICBhY2NlcHQgdGhlIGNvbm5lY3Rpb24uICBJZiB0aGUgc2VydmVyIGlzIHBhc3NpdmUsIHNlbmQgYW4gYGBFUFNWYGAgb3IgYGBQQVNWYGAKICAgIGNvbW1hbmQsIGNvbm5lY3QgdG8gaXQsIGFuZCBzdGFydCB0aGUgdHJhbnNmZXIgY29tbWFuZC4gIEVpdGhlciB3YXksIHJldHVybiB0aGUKICAgIHNvY2tldCBmb3IgdGhlIGNvbm5lY3Rpb24uCiAKQEAgLTQyMCwxMiArNDEzLDE3IEBACiAKIC4uIGF0dHJpYnV0ZTo6IEZUUF9UTFMuc3NsX3ZlcnNpb24KIAotICAgVGhlIFNTTCB2ZXJzaW9uIHRvIHVzZSAoZGVmYXVsdHMgdG8gKlRMU3YxKikuCisgICBUaGUgU1NMIHZlcnNpb24gdG8gdXNlIChkZWZhdWx0cyB0byA6YXR0cjpgc3NsLlBST1RPQ09MX1NTTHYyM2ApLgogCiAuLiBtZXRob2Q6OiBGVFBfVExTLmF1dGgoKQogCi0gICBTZXQgdXAgc2VjdXJlIGNvbnRyb2wgY29ubmVjdGlvbiBieSB1c2luZyBUTFMgb3IgU1NMLCBkZXBlbmRpbmcgb24gd2hhdAotICAgc3BlY2lmaWVkIGluIDptZXRoOmBzc2xfdmVyc2lvbmAgYXR0cmlidXRlLgorICAgU2V0IHVwIGEgc2VjdXJlIGNvbnRyb2wgY29ubmVjdGlvbiBieSB1c2luZyBUTFMgb3IgU1NMLCBkZXBlbmRpbmcgb24gd2hhdAorICAgaXMgc3BlY2lmaWVkIGluIHRoZSA6YXR0cjpgc3NsX3ZlcnNpb25gIGF0dHJpYnV0ZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBtZXRob2Qgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAogLi4gbWV0aG9kOjogRlRQX1RMUy5jY2MoKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0IGIvRG9jL2xpYnJhcnkvZnVuY3Rpb25zLnJzdAppbmRleCA3ZWQyNWMxLi4yMWFlYWY5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9mdW5jdGlvbnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2Z1bmN0aW9ucy5yc3QKQEAgLTg1LDIyICs4NSwyMiBAQAogICAgOm1ldGg6YF9faW5kZXhfX2AgbWV0aG9kIHRoYXQgcmV0dXJucyBhbiBpbnRlZ2VyLgogCiAKLS4uIGZ1bmN0aW9uOjogYm9vbChbeF0pCisuLiBjbGFzczo6IGJvb2woW3hdKQogCi0gICBDb252ZXJ0IGEgdmFsdWUgdG8gYSBCb29sZWFuLCB1c2luZyB0aGUgc3RhbmRhcmQgOnJlZjpgdHJ1dGggdGVzdGluZwotICAgcHJvY2VkdXJlIDx0cnV0aD5gLiAgSWYgKngqIGlzIGZhbHNlIG9yIG9taXR0ZWQsIHRoaXMgcmV0dXJucyBgYEZhbHNlYGA7Ci0gICBvdGhlcndpc2UgaXQgcmV0dXJucyBgYFRydWVgYC4gOmNsYXNzOmBib29sYCBpcyBhbHNvIGEgY2xhc3MsIHdoaWNoIGlzIGEKLSAgIHN1YmNsYXNzIG9mIDpjbGFzczpgaW50YCAoc2VlIDpyZWY6YHR5cGVzbnVtZXJpY2ApLiAgQ2xhc3MgOmNsYXNzOmBib29sYAotICAgY2Fubm90IGJlIHN1YmNsYXNzZWQgZnVydGhlci4gIEl0cyBvbmx5IGluc3RhbmNlcyBhcmUgYGBGYWxzZWBgIGFuZAorICAgUmV0dXJuIGEgQm9vbGVhbiB2YWx1ZSwgaS5lLiBvbmUgb2YgYGBUcnVlYGAgb3IgYGBGYWxzZWBgLiAgKngqIGlzIGNvbnZlcnRlZAorICAgdXNpbmcgdGhlIHN0YW5kYXJkIDpyZWY6YHRydXRoIHRlc3RpbmcgcHJvY2VkdXJlIDx0cnV0aD5gLiAgSWYgKngqIGlzIGZhbHNlCisgICBvciBvbWl0dGVkLCB0aGlzIHJldHVybnMgYGBGYWxzZWBgOyBvdGhlcndpc2UgaXQgcmV0dXJucyBgYFRydWVgYC4gIFRoZQorICAgOmNsYXNzOmBib29sYCBjbGFzcyBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgaW50YCAoc2VlIDpyZWY6YHR5cGVzbnVtZXJpY2ApLgorICAgSXQgY2Fubm90IGJlIHN1YmNsYXNzZWQgZnVydGhlci4gIEl0cyBvbmx5IGluc3RhbmNlcyBhcmUgYGBGYWxzZWBgIGFuZAogICAgYGBUcnVlYGAgKHNlZSA6cmVmOmBibHRpbi1ib29sZWFuLXZhbHVlc2ApLgogCiAgICAuLiBpbmRleDo6IHBhaXI6IEJvb2xlYW47IHR5cGUKIAogCiAuLiBfZnVuYy1ieXRlYXJyYXk6Ci0uLiBmdW5jdGlvbjo6IGJ5dGVhcnJheShbc291cmNlWywgZW5jb2RpbmdbLCBlcnJvcnNdXV0pCisuLiBjbGFzczo6IGJ5dGVhcnJheShbc291cmNlWywgZW5jb2RpbmdbLCBlcnJvcnNdXV0pCiAKLSAgIFJldHVybiBhIG5ldyBhcnJheSBvZiBieXRlcy4gIFRoZSA6Y2xhc3M6YGJ5dGVhcnJheWAgdHlwZSBpcyBhIG11dGFibGUKKyAgIFJldHVybiBhIG5ldyBhcnJheSBvZiBieXRlcy4gIFRoZSA6Y2xhc3M6YGJ5dGVhcnJheWAgY2xhc3MgaXMgYSBtdXRhYmxlCiAgICBzZXF1ZW5jZSBvZiBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgMjU2LiAgSXQgaGFzIG1vc3Qgb2YgdGhlIHVzdWFsCiAgICBtZXRob2RzIG9mIG11dGFibGUgc2VxdWVuY2VzLCBkZXNjcmliZWQgaW4gOnJlZjpgdHlwZXNzZXEtbXV0YWJsZWAsIGFzIHdlbGwKICAgIGFzIG1vc3QgbWV0aG9kcyB0aGF0IHRoZSA6Y2xhc3M6YGJ5dGVzYCB0eXBlIGhhcywgc2VlIDpyZWY6YGJ5dGVzLW1ldGhvZHNgLgpAQCAtMTI3LDcgKzEyNyw3IEBACiAKIAogLi4gX2Z1bmMtYnl0ZXM6Ci0uLiBmdW5jdGlvbjo6IGJ5dGVzKFtzb3VyY2VbLCBlbmNvZGluZ1ssIGVycm9yc11dXSkKKy4uIGNsYXNzOjogYnl0ZXMoW3NvdXJjZVssIGVuY29kaW5nWywgZXJyb3JzXV1dKQogCiAgICBSZXR1cm4gYSBuZXcgImJ5dGVzIiBvYmplY3QsIHdoaWNoIGlzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSBvZiBpbnRlZ2VycyBpbgogICAgdGhlIHJhbmdlIGBgMCA8PSB4IDwgMjU2YGAuICA6Y2xhc3M6YGJ5dGVzYCBpcyBhbiBpbW11dGFibGUgdmVyc2lvbiBvZgpAQCAtMTU2LDcgKzE1Niw3IEBACiAKIC4uIGZ1bmN0aW9uOjogY2hyKGkpCiAKLSAgIFJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGNoYXJhY3RlciB3aG9zZSBVbmljb2RlIGNvZGVwb2ludCBpcyB0aGUgaW50ZWdlcgorICAgUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgY2hhcmFjdGVyIHdob3NlIFVuaWNvZGUgY29kZSBwb2ludCBpcyB0aGUgaW50ZWdlcgogICAgKmkqLiAgRm9yIGV4YW1wbGUsIGBgY2hyKDk3KWBgIHJldHVybnMgdGhlIHN0cmluZyBgYCdhJ2BgLiBUaGlzIGlzIHRoZQogICAgaW52ZXJzZSBvZiA6ZnVuYzpgb3JkYC4gIFRoZSB2YWxpZCByYW5nZSBmb3IgdGhlIGFyZ3VtZW50IGlzIGZyb20gMCB0aHJvdWdoCiAgICAxLDExNCwxMTEgKDB4MTBGRkZGIGluIGJhc2UgMTYpLiAgOmV4YzpgVmFsdWVFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgKmkqIGlzCkBAIC0yMTAsNyArMjEwLDcgQEAKICAgIFRoZSBvcHRpb25hbCBhcmd1bWVudHMgKmZsYWdzKiBhbmQgKmRvbnRfaW5oZXJpdCogY29udHJvbCB3aGljaCBmdXR1cmUKICAgIHN0YXRlbWVudHMgKHNlZSA6cGVwOmAyMzZgKSBhZmZlY3QgdGhlIGNvbXBpbGF0aW9uIG9mICpzb3VyY2UqLiAgSWYgbmVpdGhlcgogICAgaXMgcHJlc2VudCAob3IgYm90aCBhcmUgemVybykgdGhlIGNvZGUgaXMgY29tcGlsZWQgd2l0aCB0aG9zZSBmdXR1cmUKLSAgIHN0YXRlbWVudHMgdGhhdCBhcmUgaW4gZWZmZWN0IGluIHRoZSBjb2RlIHRoYXQgaXMgY2FsbGluZyBjb21waWxlLiAgSWYgdGhlCisgICBzdGF0ZW1lbnRzIHRoYXQgYXJlIGluIGVmZmVjdCBpbiB0aGUgY29kZSB0aGF0IGlzIGNhbGxpbmcgOmZ1bmM6YGNvbXBpbGVgLiAgSWYgdGhlCiAgICAqZmxhZ3MqIGFyZ3VtZW50IGlzIGdpdmVuIGFuZCAqZG9udF9pbmhlcml0KiBpcyBub3QgKG9yIGlzIHplcm8pIHRoZW4gdGhlCiAgICBmdXR1cmUgc3RhdGVtZW50cyBzcGVjaWZpZWQgYnkgdGhlICpmbGFncyogYXJndW1lbnQgYXJlIHVzZWQgaW4gYWRkaXRpb24gdG8KICAgIHRob3NlIHRoYXQgd291bGQgYmUgdXNlZCBhbnl3YXkuIElmICpkb250X2luaGVyaXQqIGlzIGEgbm9uLXplcm8gaW50ZWdlciB0aGVuCkBAIC0yMzEsNiArMjMxLDkgQEAKICAgIFRoaXMgZnVuY3Rpb24gcmFpc2VzIDpleGM6YFN5bnRheEVycm9yYCBpZiB0aGUgY29tcGlsZWQgc291cmNlIGlzIGludmFsaWQsCiAgICBhbmQgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGUgc291cmNlIGNvbnRhaW5zIG51bGwgYnl0ZXMuCiAKKyAgIElmIHlvdSB3YW50IHRvIHBhcnNlIFB5dGhvbiBjb2RlIGludG8gaXRzIEFTVCByZXByZXNlbnRhdGlvbiwgc2VlCisgICA6ZnVuYzpgYXN0LnBhcnNlYC4KKwogICAgLi4gbm90ZTo6CiAKICAgICAgIFdoZW4gY29tcGlsaW5nIGEgc3RyaW5nIHdpdGggbXVsdGktbGluZSBjb2RlIGluIGBgJ3NpbmdsZSdgYCBvcgpAQCAtMjQzLDE1ICsyNDYsMTYgQEAKICAgICAgIGRvZXMgbm90IGhhdmUgdG8gZW5kIGluIGEgbmV3bGluZSBhbnltb3JlLiAgQWRkZWQgdGhlICpvcHRpbWl6ZSogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogY29tcGxleChbcmVhbFssIGltYWddXSkKKy4uIGNsYXNzOjogY29tcGxleChbcmVhbFssIGltYWddXSkKIAotICAgQ3JlYXRlIGEgY29tcGxleCBudW1iZXIgd2l0aCB0aGUgdmFsdWUgKnJlYWwqICsgKmltYWcqXCpqIG9yIGNvbnZlcnQgYSBzdHJpbmcgb3IKLSAgIG51bWJlciB0byBhIGNvbXBsZXggbnVtYmVyLiAgSWYgdGhlIGZpcnN0IHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZQotICAgaW50ZXJwcmV0ZWQgYXMgYSBjb21wbGV4IG51bWJlciBhbmQgdGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgYSBzZWNvbmQKLSAgIHBhcmFtZXRlci4gIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGNhbiBuZXZlciBiZSBhIHN0cmluZy4gRWFjaCBhcmd1bWVudCBtYXkgYmUgYW55Ci0gICBudW1lcmljIHR5cGUgKGluY2x1ZGluZyBjb21wbGV4KS4gSWYgKmltYWcqIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHplcm8gYW5kCi0gICB0aGUgZnVuY3Rpb24gc2VydmVzIGFzIGEgbnVtZXJpYyBjb252ZXJzaW9uIGZ1bmN0aW9uIGxpa2UgOmZ1bmM6YGludGAKLSAgIGFuZCA6ZnVuYzpgZmxvYXRgLiAgSWYgYm90aCBhcmd1bWVudHMgYXJlIG9taXR0ZWQsIHJldHVybnMgYGAwamBgLgorICAgUmV0dXJuIGEgY29tcGxleCBudW1iZXIgd2l0aCB0aGUgdmFsdWUgKnJlYWwqICsgKmltYWcqXCoxaiBvciBjb252ZXJ0IGEgc3RyaW5nCisgICBvciBudW1iZXIgdG8gYSBjb21wbGV4IG51bWJlci4gIElmIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwKKyAgIGJlIGludGVycHJldGVkIGFzIGEgY29tcGxleCBudW1iZXIgYW5kIHRoZSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IGEKKyAgIHNlY29uZCBwYXJhbWV0ZXIuICBUaGUgc2Vjb25kIHBhcmFtZXRlciBjYW4gbmV2ZXIgYmUgYSBzdHJpbmcuIEVhY2ggYXJndW1lbnQKKyAgIG1heSBiZSBhbnkgbnVtZXJpYyB0eXBlIChpbmNsdWRpbmcgY29tcGxleCkuICBJZiAqaW1hZyogaXMgb21pdHRlZCwgaXQKKyAgIGRlZmF1bHRzIHRvIHplcm8gYW5kIHRoZSBjb25zdHJ1Y3RvciBzZXJ2ZXMgYXMgYSBudW1lcmljIGNvbnZlcnNpb24gbGlrZQorICAgOmNsYXNzOmBpbnRgIGFuZCA6Y2xhc3M6YGZsb2F0YC4gIElmIGJvdGggYXJndW1lbnRzIGFyZSBvbWl0dGVkLCByZXR1cm5zCisgICBgYDBqYGAuCiAKICAgIC4uIG5vdGU6OgogCkBAIC0yNzIsMTQgKzI3NiwxMyBAQAogCiAKIC4uIF9mdW5jLWRpY3Q6Ci0uLiBmdW5jdGlvbjo6IGRpY3QoKiprd2FyZykKLSAgICAgICAgICAgICAgZGljdChtYXBwaW5nLCAqKmt3YXJnKQotICAgICAgICAgICAgICBkaWN0KGl0ZXJhYmxlLCAqKmt3YXJnKQorLi4gY2xhc3M6OiBkaWN0KCoqa3dhcmcpCisgICAgICAgICAgIGRpY3QobWFwcGluZywgKiprd2FyZykKKyAgICAgICAgICAgZGljdChpdGVyYWJsZSwgKiprd2FyZykKICAgIDpub2luZGV4OgogCiAgICBDcmVhdGUgYSBuZXcgZGljdGlvbmFyeS4gIFRoZSA6Y2xhc3M6YGRpY3RgIG9iamVjdCBpcyB0aGUgZGljdGlvbmFyeSBjbGFzcy4KLSAgIFNlZSA6Y2xhc3M6YGRpY3RgIGFuZCA6cmVmOmB0eXBlc21hcHBpbmdgIGZvciBkb2N1bWVudGF0aW9uIGFib3V0IHRoaXMKLSAgIGNsYXNzLgorICAgU2VlIDpjbGFzczpgZGljdGAgYW5kIDpyZWY6YHR5cGVzbWFwcGluZ2AgZm9yIGRvY3VtZW50YXRpb24gYWJvdXQgdGhpcyBjbGFzcy4KIAogICAgRm9yIG90aGVyIGNvbnRhaW5lcnMgc2VlIHRoZSBidWlsdC1pbiA6Y2xhc3M6YGxpc3RgLCA6Y2xhc3M6YHNldGAsIGFuZAogICAgOmNsYXNzOmB0dXBsZWAgY2xhc3NlcywgYXMgd2VsbCBhcyB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZS4KQEAgLTQxMCw2ICs0MTMsNyBAQAogICAgU2VlIDpmdW5jOmBhc3QubGl0ZXJhbF9ldmFsYCBmb3IgYSBmdW5jdGlvbiB0aGF0IGNhbiBzYWZlbHkgZXZhbHVhdGUgc3RyaW5ncwogICAgd2l0aCBleHByZXNzaW9ucyBjb250YWluaW5nIG9ubHkgbGl0ZXJhbHMuCiAKKy4uIGluZGV4OjogYnVpbHRpbjogZXhlYwogCiAuLiBmdW5jdGlvbjo6IGV4ZWMob2JqZWN0WywgZ2xvYmFsc1ssIGxvY2Fsc11dKQogCkBAIC00NjksMTMgKzQ3MywxMyBAQAogICAgZWxlbWVudHMgb2YgKml0ZXJhYmxlKiBmb3Igd2hpY2ggKmZ1bmN0aW9uKiByZXR1cm5zIGZhbHNlLgogCiAKLS4uIGZ1bmN0aW9uOjogZmxvYXQoW3hdKQorLi4gY2xhc3M6OiBmbG9hdChbeF0pCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogTmFOCiAgICAgICBzaW5nbGU6IEluZmluaXR5CiAKLSAgIENvbnZlcnQgYSBzdHJpbmcgb3IgYSBudW1iZXIgdG8gZmxvYXRpbmcgcG9pbnQuCisgICBSZXR1cm4gYSBmbG9hdGluZyBwb2ludCBudW1iZXIgY29uc3RydWN0ZWQgZnJvbSBhIG51bWJlciBvciBzdHJpbmcgKngqLgogCiAgICBJZiB0aGUgYXJndW1lbnQgaXMgYSBzdHJpbmcsIGl0IHNob3VsZCBjb250YWluIGEgZGVjaW1hbCBudW1iZXIsIG9wdGlvbmFsbHkKICAgIHByZWNlZGVkIGJ5IGEgc2lnbiwgYW5kIG9wdGlvbmFsbHkgZW1iZWRkZWQgaW4gd2hpdGVzcGFjZS4gIFRoZSBvcHRpb25hbApAQCAtNTM4LDE0ICs1NDIsMTkgQEAKICAgIGVmZmVjdCBhcyBjYWxsaW5nIDpmdW5jOmBzdHIodmFsdWUpIDxzdHI+YC4KIAogICAgQSBjYWxsIHRvIGBgZm9ybWF0KHZhbHVlLCBmb3JtYXRfc3BlYylgYCBpcyB0cmFuc2xhdGVkIHRvCi0gICBgYHR5cGUodmFsdWUpLl9fZm9ybWF0X18oZm9ybWF0X3NwZWMpYGAgd2hpY2ggYnlwYXNzZXMgdGhlIGluc3RhbmNlCisgICBgYHR5cGUodmFsdWUpLl9fZm9ybWF0X18odmFsdWUsIGZvcm1hdF9zcGVjKWBgIHdoaWNoIGJ5cGFzc2VzIHRoZSBpbnN0YW5jZQogICAgZGljdGlvbmFyeSB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIHZhbHVlJ3MgOm1ldGg6YF9fZm9ybWF0X19gIG1ldGhvZC4gIEEKLSAgIDpleGM6YFR5cGVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZCBpZiB0aGUgbWV0aG9kIGlzIG5vdCBmb3VuZCBvciBpZiBlaXRoZXIKLSAgIHRoZSAqZm9ybWF0X3NwZWMqIG9yIHRoZSByZXR1cm4gdmFsdWUgYXJlIG5vdCBzdHJpbmdzLgorICAgOmV4YzpgVHlwZUVycm9yYCBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHRoZSBtZXRob2Qgc2VhcmNoIHJlYWNoZXMKKyAgIDptb2Q6YG9iamVjdGAgYW5kIHRoZSAqZm9ybWF0X3NwZWMqIGlzIG5vbi1lbXB0eSwgb3IgaWYgZWl0aGVyIHRoZQorICAgKmZvcm1hdF9zcGVjKiBvciB0aGUgcmV0dXJuIHZhbHVlIGFyZSBub3Qgc3RyaW5ncy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIGBgb2JqZWN0KCkuX19mb3JtYXRfXyhmb3JtYXRfc3BlYylgYCByYWlzZXMgOmV4YzpgVHlwZUVycm9yYAorICAgICAgaWYgKmZvcm1hdF9zcGVjKiBpcyBub3QgYW4gZW1wdHkgc3RyaW5nLgogCiAKIC4uIF9mdW5jLWZyb3plbnNldDoKLS4uIGZ1bmN0aW9uOjogZnJvemVuc2V0KFtpdGVyYWJsZV0pCisuLiBjbGFzczo6IGZyb3plbnNldChbaXRlcmFibGVdKQogICAgOm5vaW5kZXg6CiAKICAgIFJldHVybiBhIG5ldyA6Y2xhc3M6YGZyb3plbnNldGAgb2JqZWN0LCBvcHRpb25hbGx5IHdpdGggZWxlbWVudHMgdGFrZW4gZnJvbQpAQCAtNjA1LDYgKzYxNCwxMCBAQAogCiAgICBUaGlzIGZ1bmN0aW9uIGlzIGFkZGVkIHRvIHRoZSBidWlsdC1pbiBuYW1lc3BhY2UgYnkgdGhlIDptb2Q6YHNpdGVgIG1vZHVsZS4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIENoYW5nZXMgdG8gOm1vZDpgcHlkb2NgIGFuZCA6bW9kOmBpbnNwZWN0YCBtZWFuIHRoYXQgdGhlIHJlcG9ydGVkCisgICAgICBzaWduYXR1cmVzIGZvciBjYWxsYWJsZXMgYXJlIG5vdyBtb3JlIGNvbXByZWhlbnNpdmUgYW5kIGNvbnNpc3RlbnQuCisKIAogLi4gZnVuY3Rpb246OiBoZXgoeCkKIApAQCAtNjU0LDEyICs2NjcsMTMgQEAKICAgIHRvIHByb3ZpZGUgZWxhYm9yYXRlIGxpbmUgZWRpdGluZyBhbmQgaGlzdG9yeSBmZWF0dXJlcy4KIAogCi0uLiBmdW5jdGlvbjo6IGludCh4PTApCi0gICAgICAgICAgICAgIGludCh4LCBiYXNlPTEwKQorLi4gY2xhc3M6OiBpbnQoeD0wKQorICAgICAgICAgICBpbnQoeCwgYmFzZT0xMCkKIAotICAgQ29udmVydCBhIG51bWJlciBvciBzdHJpbmcgKngqIHRvIGFuIGludGVnZXIsIG9yIHJldHVybiBgYDBgYCBpZiBubwotICAgYXJndW1lbnRzIGFyZSBnaXZlbi4gIElmICp4KiBpcyBhIG51bWJlciwgcmV0dXJuIDptZXRoOmB4Ll9faW50X18oKQotICAgPG9iamVjdC5fX2ludF9fPmAuICBGb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgdGhpcyB0cnVuY2F0ZXMgdG93YXJkcyB6ZXJvLgorICAgUmV0dXJuIGFuIGludGVnZXIgb2JqZWN0IGNvbnN0cnVjdGVkIGZyb20gYSBudW1iZXIgb3Igc3RyaW5nICp4Kiwgb3IgcmV0dXJuCisgICBgYDBgYCBpZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLiAgSWYgKngqIGlzIGEgbnVtYmVyLCByZXR1cm4KKyAgIDptZXRoOmB4Ll9faW50X18oKSA8b2JqZWN0Ll9faW50X18+YC4gIEZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLCB0aGlzCisgICB0cnVuY2F0ZXMgdG93YXJkcyB6ZXJvLgogCiAgICBJZiAqeCogaXMgbm90IGEgbnVtYmVyIG9yIGlmICpiYXNlKiBpcyBnaXZlbiwgdGhlbiAqeCogbXVzdCBiZSBhIHN0cmluZywKICAgIDpjbGFzczpgYnl0ZXNgLCBvciA6Y2xhc3M6YGJ5dGVhcnJheWAgaW5zdGFuY2UgcmVwcmVzZW50aW5nIGFuIDpyZWY6YGludGVnZXIKQEAgLTY3NiwxNiArNjkwLDIyIEBACiAKICAgIFRoZSBpbnRlZ2VyIHR5cGUgaXMgZGVzY3JpYmVkIGluIDpyZWY6YHR5cGVzbnVtZXJpY2AuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiAqYmFzZSogaXMgbm90IGFuIGluc3RhbmNlIG9mIDpjbGFzczpgaW50YCBhbmQgdGhlICpiYXNlKiBvYmplY3QgaGFzIGEKKyAgICAgIDptZXRoOmBiYXNlLl9faW5kZXhfXyA8b2JqZWN0Ll9faW5kZXhfXz5gIG1ldGhvZCwgdGhhdCBtZXRob2QgaXMgY2FsbGVkCisgICAgICB0byBvYnRhaW4gYW4gaW50ZWdlciBmb3IgdGhlIGJhc2UuICBQcmV2aW91cyB2ZXJzaW9ucyB1c2VkCisgICAgICA6bWV0aDpgYmFzZS5fX2ludF9fIDxvYmplY3QuX19pbnRfXz5gIGluc3RlYWQgb2YgOm1ldGg6YGJhc2UuX19pbmRleF9fCisgICAgICA8b2JqZWN0Ll9faW5kZXhfXz5gLgogCiAuLiBmdW5jdGlvbjo6IGlzaW5zdGFuY2Uob2JqZWN0LCBjbGFzc2luZm8pCiAKICAgIFJldHVybiB0cnVlIGlmIHRoZSAqb2JqZWN0KiBhcmd1bWVudCBpcyBhbiBpbnN0YW5jZSBvZiB0aGUgKmNsYXNzaW5mbyoKICAgIGFyZ3VtZW50LCBvciBvZiBhIChkaXJlY3QsIGluZGlyZWN0IG9yIDp0ZXJtOmB2aXJ0dWFsIDxhYnN0cmFjdCBiYXNlCiAgICBjbGFzcz5gKSBzdWJjbGFzcyB0aGVyZW9mLiAgSWYgKm9iamVjdCogaXMgbm90Ci0gICBhbiBvYmplY3Qgb2YgdGhlIGdpdmVuIHR5cGUsIHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS4gIElmCi0gICAqY2xhc3NpbmZvKiBpcyBub3QgYSBjbGFzcyAodHlwZSBvYmplY3QpLCBpdCBtYXkgYmUgYSB0dXBsZSBvZiB0eXBlIG9iamVjdHMsCi0gICBvciBtYXkgcmVjdXJzaXZlbHkgY29udGFpbiBvdGhlciBzdWNoIHR1cGxlcyAob3RoZXIgc2VxdWVuY2UgdHlwZXMgYXJlIG5vdAotICAgYWNjZXB0ZWQpLiAgSWYgKmNsYXNzaW5mbyogaXMgbm90IGEgdHlwZSBvciB0dXBsZSBvZiB0eXBlcyBhbmQgc3VjaCB0dXBsZXMsCisgICBhbiBvYmplY3Qgb2YgdGhlIGdpdmVuIHR5cGUsIHRoZSBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBmYWxzZS4KKyAgIElmICpjbGFzc2luZm8qIGlzIGEgdHVwbGUgb2YgdHlwZSBvYmplY3RzIChvciByZWN1cnNpdmVseSwgb3RoZXIgc3VjaAorICAgdHVwbGVzKSwgcmV0dXJuIHRydWUgaWYgKm9iamVjdCogaXMgYW4gaW5zdGFuY2Ugb2YgYW55IG9mIHRoZSB0eXBlcy4KKyAgIElmICpjbGFzc2luZm8qIGlzIG5vdCBhIHR5cGUgb3IgdHVwbGUgb2YgdHlwZXMgYW5kIHN1Y2ggdHVwbGVzLAogICAgYSA6ZXhjOmBUeXBlRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKIApAQCAtNzI3LDExICs3NDcsMTIgQEAKIC4uIGZ1bmN0aW9uOjogbGVuKHMpCiAKICAgIFJldHVybiB0aGUgbGVuZ3RoICh0aGUgbnVtYmVyIG9mIGl0ZW1zKSBvZiBhbiBvYmplY3QuICBUaGUgYXJndW1lbnQgbWF5IGJlIGEKLSAgIHNlcXVlbmNlIChzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIGEgbWFwcGluZyAoZGljdGlvbmFyeSkuCisgICBzZXF1ZW5jZSAoc3VjaCBhcyBhIHN0cmluZywgYnl0ZXMsIHR1cGxlLCBsaXN0LCBvciByYW5nZSkgb3IgYSBjb2xsZWN0aW9uCisgICAoc3VjaCBhcyBhIGRpY3Rpb25hcnksIHNldCwgb3IgZnJvemVuIHNldCkuCiAKIAogLi4gX2Z1bmMtbGlzdDoKLS4uIGZ1bmN0aW9uOjogbGlzdChbaXRlcmFibGVdKQorLi4gY2xhc3M6OiBsaXN0KFtpdGVyYWJsZV0pCiAgICA6bm9pbmRleDoKIAogICAgUmF0aGVyIHRoYW4gYmVpbmcgYSBmdW5jdGlvbiwgOmNsYXNzOmBsaXN0YCBpcyBhY3R1YWxseSBhIG11dGFibGUKQEAgLTc1OCwyNSArNzc5LDMxIEBACiAgICBhbHJlYWR5IGFycmFuZ2VkIGludG8gYXJndW1lbnQgdHVwbGVzLCBzZWUgOmZ1bmM6YGl0ZXJ0b29scy5zdGFybWFwYFwuCiAKIAotLi4gZnVuY3Rpb246OiBtYXgoaXRlcmFibGUsICpbLCBrZXldKQorLi4gZnVuY3Rpb246OiBtYXgoaXRlcmFibGUsICpbLCBrZXksIGRlZmF1bHRdKQogICAgICAgICAgICAgICBtYXgoYXJnMSwgYXJnMiwgKmFyZ3NbLCBrZXldKQogCiAgICBSZXR1cm4gdGhlIGxhcmdlc3QgaXRlbSBpbiBhbiBpdGVyYWJsZSBvciB0aGUgbGFyZ2VzdCBvZiB0d28gb3IgbW9yZQogICAgYXJndW1lbnRzLgogCi0gICBJZiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBwcm92aWRlZCwgKml0ZXJhYmxlKiBtdXN0IGJlIGEgbm9uLWVtcHR5Ci0gICBpdGVyYWJsZSAoc3VjaCBhcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpLiAgVGhlIGxhcmdlc3QgaXRlbQotICAgaW4gdGhlIGl0ZXJhYmxlIGlzIHJldHVybmVkLiAgSWYgdHdvIG9yIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgYXJlCi0gICBwcm92aWRlZCwgdGhlIGxhcmdlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzIHJldHVybmVkLgorICAgSWYgb25lIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgcHJvdmlkZWQsIGl0IHNob3VsZCBiZSBhbiA6dGVybTpgaXRlcmFibGVgLgorICAgVGhlIGxhcmdlc3QgaXRlbSBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsCisgICBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCB0aGUgbGFyZ2VzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMKKyAgIHJldHVybmVkLgogCi0gICBUaGUgb3B0aW9uYWwga2V5d29yZC1vbmx5ICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcyBhIG9uZS1hcmd1bWVudCBvcmRlcmluZwotICAgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLgorICAgVGhlcmUgYXJlIHR3byBvcHRpb25hbCBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiBUaGUgKmtleSogYXJndW1lbnQgc3BlY2lmaWVzCisgICBhIG9uZS1hcmd1bWVudCBvcmRlcmluZyBmdW5jdGlvbiBsaWtlIHRoYXQgdXNlZCBmb3IgOm1ldGg6YGxpc3Quc29ydGAuIFRoZQorICAgKmRlZmF1bHQqIGFyZ3VtZW50IHNwZWNpZmllcyBhbiBvYmplY3QgdG8gcmV0dXJuIGlmIHRoZSBwcm92aWRlZCBpdGVyYWJsZSBpcworICAgZW1wdHkuIElmIHRoZSBpdGVyYWJsZSBpcyBlbXB0eSBhbmQgKmRlZmF1bHQqIGlzIG5vdCBwcm92aWRlZCwgYQorICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLgogCiAgICBJZiBtdWx0aXBsZSBpdGVtcyBhcmUgbWF4aW1hbCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IG9uZQogICAgZW5jb3VudGVyZWQuICBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCBvdGhlciBzb3J0LXN0YWJpbGl0eSBwcmVzZXJ2aW5nIHRvb2xzCiAgICBzdWNoIGFzIGBgc29ydGVkKGl0ZXJhYmxlLCBrZXk9a2V5ZnVuYywgcmV2ZXJzZT1UcnVlKVswXWBgIGFuZAogICAgYGBoZWFwcS5ubGFyZ2VzdCgxLCBpdGVyYWJsZSwga2V5PWtleWZ1bmMpYGAuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgVGhlICpkZWZhdWx0KiBrZXl3b3JkLW9ubHkgYXJndW1lbnQuCisKIAogLi4gX2Z1bmMtbWVtb3J5dmlldzoKIC4uIGZ1bmN0aW9uOjogbWVtb3J5dmlldyhvYmopCkBAIC03ODYsMjUgKzgxMywzMiBAQAogICAgOnJlZjpgdHlwZW1lbW9yeXZpZXdgIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCiAKLS4uIGZ1bmN0aW9uOjogbWluKGl0ZXJhYmxlLCAqWywga2V5XSkKKy4uIGZ1bmN0aW9uOjogbWluKGl0ZXJhYmxlLCAqWywga2V5LCBkZWZhdWx0XSkKICAgICAgICAgICAgICAgbWluKGFyZzEsIGFyZzIsICphcmdzWywga2V5XSkKIAogICAgUmV0dXJuIHRoZSBzbWFsbGVzdCBpdGVtIGluIGFuIGl0ZXJhYmxlIG9yIHRoZSBzbWFsbGVzdCBvZiB0d28gb3IgbW9yZQogICAgYXJndW1lbnRzLgogCi0gICBJZiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBwcm92aWRlZCwgKml0ZXJhYmxlKiBtdXN0IGJlIGEgbm9uLWVtcHR5Ci0gICBpdGVyYWJsZSAoc3VjaCBhcyBhIG5vbi1lbXB0eSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpLiAgVGhlIHNtYWxsZXN0IGl0ZW0KLSAgIGluIHRoZSBpdGVyYWJsZSBpcyByZXR1cm5lZC4gIElmIHR3byBvciBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGFyZQotICAgcHJvdmlkZWQsIHRoZSBzbWFsbGVzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaXMgcmV0dXJuZWQuCisgICBJZiBvbmUgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBwcm92aWRlZCwgaXQgc2hvdWxkIGJlIGFuIDp0ZXJtOmBpdGVyYWJsZWAuCisgICBUaGUgc21hbGxlc3QgaXRlbSBpbiB0aGUgaXRlcmFibGUgaXMgcmV0dXJuZWQuICBJZiB0d28gb3IgbW9yZSBwb3NpdGlvbmFsCisgICBhcmd1bWVudHMgYXJlIHByb3ZpZGVkLCB0aGUgc21hbGxlc3Qgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGlzCisgICByZXR1cm5lZC4KIAotICAgVGhlIG9wdGlvbmFsIGtleXdvcmQtb25seSAqa2V5KiBhcmd1bWVudCBzcGVjaWZpZXMgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcKLSAgIGZ1bmN0aW9uIGxpa2UgdGhhdCB1c2VkIGZvciA6bWV0aDpgbGlzdC5zb3J0YC4KKyAgIFRoZXJlIGFyZSB0d28gb3B0aW9uYWwga2V5d29yZC1vbmx5IGFyZ3VtZW50cy4gVGhlICprZXkqIGFyZ3VtZW50IHNwZWNpZmllcworICAgYSBvbmUtYXJndW1lbnQgb3JkZXJpbmcgZnVuY3Rpb24gbGlrZSB0aGF0IHVzZWQgZm9yIDptZXRoOmBsaXN0LnNvcnRgLiBUaGUKKyAgICpkZWZhdWx0KiBhcmd1bWVudCBzcGVjaWZpZXMgYW4gb2JqZWN0IHRvIHJldHVybiBpZiB0aGUgcHJvdmlkZWQgaXRlcmFibGUgaXMKKyAgIGVtcHR5LiBJZiB0aGUgaXRlcmFibGUgaXMgZW1wdHkgYW5kICpkZWZhdWx0KiBpcyBub3QgcHJvdmlkZWQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgSWYgbXVsdGlwbGUgaXRlbXMgYXJlIG1pbmltYWwsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBmaXJzdCBvbmUKICAgIGVuY291bnRlcmVkLiAgVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgc29ydC1zdGFiaWxpdHkgcHJlc2VydmluZyB0b29scwogICAgc3VjaCBhcyBgYHNvcnRlZChpdGVyYWJsZSwga2V5PWtleWZ1bmMpWzBdYGAgYW5kIGBgaGVhcHEubnNtYWxsZXN0KDEsCiAgICBpdGVyYWJsZSwga2V5PWtleWZ1bmMpYGAuCiAKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgVGhlICpkZWZhdWx0KiBrZXl3b3JkLW9ubHkgYXJndW1lbnQuCisKKwogLi4gZnVuY3Rpb246OiBuZXh0KGl0ZXJhdG9yWywgZGVmYXVsdF0pCiAKICAgIFJldHJpZXZlIHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgKml0ZXJhdG9yKiBieSBjYWxsaW5nIGl0cwpAQCAtODEyLDcgKzg0Niw3IEBACiAgICBpZiB0aGUgaXRlcmF0b3IgaXMgZXhoYXVzdGVkLCBvdGhlcndpc2UgOmV4YzpgU3RvcEl0ZXJhdGlvbmAgaXMgcmFpc2VkLgogCiAKLS4uIGZ1bmN0aW9uOjogb2JqZWN0KCkKKy4uIGNsYXNzOjogb2JqZWN0KCkKIAogICAgUmV0dXJuIGEgbmV3IGZlYXR1cmVsZXNzIG9iamVjdC4gIDpjbGFzczpgb2JqZWN0YCBpcyBhIGJhc2UgZm9yIGFsbCBjbGFzc2VzLgogICAgSXQgaGFzIHRoZSBtZXRob2RzIHRoYXQgYXJlIGNvbW1vbiB0byBhbGwgaW5zdGFuY2VzIG9mIFB5dGhvbiBjbGFzc2VzLiAgVGhpcwpAQCAtODY2LDggKzkwMCw3IEBACiAgICBgYCdiJ2BgICAgYmluYXJ5IG1vZGUKICAgIGBgJ3QnYGAgICB0ZXh0IG1vZGUgKGRlZmF1bHQpCiAgICBgYCcrJ2BgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpCi0gICBgYCdVJ2BgICAgdW5pdmVyc2FsIG5ld2xpbmVzIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgc2hvdWxkCi0gICAgICAgICAgICAgbm90IGJlIHVzZWQgaW4gbmV3IGNvZGUpCisgICBgYCdVJ2BgICAgOnRlcm06YHVuaXZlcnNhbCBuZXdsaW5lc2AgbW9kZSAoZGVwcmVjYXRlZCkKICAgID09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgVGhlIGRlZmF1bHQgbW9kZSBpcyBgYCdyJ2BgIChvcGVuIGZvciByZWFkaW5nIHRleHQsIHN5bm9ueW0gb2YgYGAncnQnYGApLgpAQCAtOTA2LDE1ICs5MzksMTcgQEAKICAgICplbmNvZGluZyogaXMgdGhlIG5hbWUgb2YgdGhlIGVuY29kaW5nIHVzZWQgdG8gZGVjb2RlIG9yIGVuY29kZSB0aGUgZmlsZS4KICAgIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiB0ZXh0IG1vZGUuICBUaGUgZGVmYXVsdCBlbmNvZGluZyBpcyBwbGF0Zm9ybQogICAgZGVwZW5kZW50ICh3aGF0ZXZlciA6ZnVuYzpgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nYCByZXR1cm5zKSwgYnV0IGFueQotICAgZW5jb2Rpbmcgc3VwcG9ydGVkIGJ5IFB5dGhvbiBjYW4gYmUgdXNlZC4gIFNlZSB0aGUgOm1vZDpgY29kZWNzYCBtb2R1bGUgZm9yCisgICA6dGVybTpgdGV4dCBlbmNvZGluZ2Agc3VwcG9ydGVkIGJ5IFB5dGhvbgorICAgY2FuIGJlIHVzZWQuICBTZWUgdGhlIDptb2Q6YGNvZGVjc2AgbW9kdWxlIGZvcgogICAgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIGVuY29kaW5ncy4KIAogICAgKmVycm9ycyogaXMgYW4gb3B0aW9uYWwgc3RyaW5nIHRoYXQgc3BlY2lmaWVzIGhvdyBlbmNvZGluZyBhbmQgZGVjb2RpbmcKICAgIGVycm9ycyBhcmUgdG8gYmUgaGFuZGxlZC0tdGhpcyBjYW5ub3QgYmUgdXNlZCBpbiBiaW5hcnkgbW9kZS4KLSAgIEEgdmFyaWV0eSBvZiBzdGFuZGFyZCBlcnJvciBoYW5kbGVycyBhcmUgYXZhaWxhYmxlLCB0aG91Z2ggYW55CisgICBBIHZhcmlldHkgb2Ygc3RhbmRhcmQgZXJyb3IgaGFuZGxlcnMgYXJlIGF2YWlsYWJsZQorICAgKGxpc3RlZCB1bmRlciA6cmVmOmBlcnJvci1oYW5kbGVyc2ApLCB0aG91Z2ggYW55CiAgICBlcnJvciBoYW5kbGluZyBuYW1lIHRoYXQgaGFzIGJlZW4gcmVnaXN0ZXJlZCB3aXRoCiAgICA6ZnVuYzpgY29kZWNzLnJlZ2lzdGVyX2Vycm9yYCBpcyBhbHNvIHZhbGlkLiAgVGhlIHN0YW5kYXJkIG5hbWVzCi0gICBhcmU6CisgICBpbmNsdWRlOgogCiAgICAqIGBgJ3N0cmljdCdgYCB0byByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgIGV4Y2VwdGlvbiBpZiB0aGVyZSBpcwogICAgICBhbiBlbmNvZGluZyBlcnJvci4gIFRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgTm9uZWBgIGhhcyB0aGUgc2FtZQpAQCAtOTczLDYgKzEwMDgsOCBAQAogICAgOm1vZDpgb3Mub3BlbmAgYXMgKm9wZW5lciogcmVzdWx0cyBpbiBmdW5jdGlvbmFsaXR5IHNpbWlsYXIgdG8gcGFzc2luZwogICAgYGBOb25lYGApLgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKwogICAgVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgdGhlIDpyZWY6YGRpcl9mZCA8ZGlyX2ZkPmAgcGFyYW1ldGVyIG9mIHRoZQogICAgOmZ1bmM6YG9zLm9wZW5gIGZ1bmN0aW9uIHRvIG9wZW4gYSBmaWxlIHJlbGF0aXZlIHRvIGEgZ2l2ZW4gZGlyZWN0b3J5OjoKIApAQCAtOTg2LDE5ICsxMDIzLDE1IEBACiAgICAgICAuLi4KICAgICAgID4+PiBvcy5jbG9zZShkaXJfZmQpICAjIGRvbid0IGxlYWsgYSBmaWxlIGRlc2NyaXB0b3IKIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIFRoZSAqb3BlbmVyKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgotICAgICAgVGhlIGBgJ3gnYGAgbW9kZSB3YXMgYWRkZWQuCi0KICAgIFRoZSB0eXBlIG9mIDp0ZXJtOmBmaWxlIG9iamVjdGAgcmV0dXJuZWQgYnkgdGhlIDpmdW5jOmBvcGVuYCBmdW5jdGlvbgogICAgZGVwZW5kcyBvbiB0aGUgbW9kZS4gIFdoZW4gOmZ1bmM6YG9wZW5gIGlzIHVzZWQgdG8gb3BlbiBhIGZpbGUgaW4gYSB0ZXh0CiAgICBtb2RlIChgYCd3J2BgLCBgYCdyJ2BgLCBgYCd3dCdgYCwgYGAncnQnYGAsIGV0Yy4pLCBpdCByZXR1cm5zIGEgc3ViY2xhc3Mgb2YKICAgIDpjbGFzczpgaW8uVGV4dElPQmFzZWAgKHNwZWNpZmljYWxseSA6Y2xhc3M6YGlvLlRleHRJT1dyYXBwZXJgKS4gIFdoZW4gdXNlZAogICAgdG8gb3BlbiBhIGZpbGUgaW4gYSBiaW5hcnkgbW9kZSB3aXRoIGJ1ZmZlcmluZywgdGhlIHJldHVybmVkIGNsYXNzIGlzIGEKICAgIHN1YmNsYXNzIG9mIDpjbGFzczpgaW8uQnVmZmVyZWRJT0Jhc2VgLiAgVGhlIGV4YWN0IGNsYXNzIHZhcmllczogaW4gcmVhZAotICAgYmluYXJ5IG1vZGUsIGl0IHJldHVybnMgYSA6Y2xhc3M6YGlvLkJ1ZmZlcmVkUmVhZGVyYDsgaW4gd3JpdGUgYmluYXJ5IGFuZAotICAgYXBwZW5kIGJpbmFyeSBtb2RlcywgaXQgcmV0dXJucyBhIDpjbGFzczpgaW8uQnVmZmVyZWRXcml0ZXJgLCBhbmQgaW4KLSAgIHJlYWQvd3JpdGUgbW9kZSwgaXQgcmV0dXJucyBhIDpjbGFzczpgaW8uQnVmZmVyZWRSYW5kb21gLiAgV2hlbiBidWZmZXJpbmcgaXMKKyAgIGJpbmFyeSBtb2RlLCBpdCByZXR1cm5zIGFuIDpjbGFzczpgaW8uQnVmZmVyZWRSZWFkZXJgOyBpbiB3cml0ZSBiaW5hcnkgYW5kCisgICBhcHBlbmQgYmluYXJ5IG1vZGVzLCBpdCByZXR1cm5zIGFuIDpjbGFzczpgaW8uQnVmZmVyZWRXcml0ZXJgLCBhbmQgaW4KKyAgIHJlYWQvd3JpdGUgbW9kZSwgaXQgcmV0dXJucyBhbiA6Y2xhc3M6YGlvLkJ1ZmZlcmVkUmFuZG9tYC4gIFdoZW4gYnVmZmVyaW5nIGlzCiAgICBkaXNhYmxlZCwgdGhlIHJhdyBzdHJlYW0sIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBpby5SYXdJT0Jhc2VgLAogICAgOmNsYXNzOmBpby5GaWxlSU9gLCBpcyByZXR1cm5lZC4KIApAQCAtMTAxNiwxMCArMTA0OSwxOSBAQAogICAgYW5kIDptb2Q6YHNodXRpbGAuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgKm9wZW5lciogcGFyYW1ldGVyIHdhcyBhZGRlZC4KKyAgICAgIFRoZSBgYCd4J2BgIG1vZGUgd2FzIGFkZGVkLgogICAgICAgOmV4YzpgSU9FcnJvcmAgdXNlZCB0byBiZSByYWlzZWQsIGl0IGlzIG5vdyBhbiBhbGlhcyBvZiA6ZXhjOmBPU0Vycm9yYC4KICAgICAgIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaXMgbm93IHJhaXNlZCBpZiB0aGUgZmlsZSBvcGVuZWQgaW4gZXhjbHVzaXZlCiAgICAgICBjcmVhdGlvbiBtb2RlIChgYCd4J2BgKSBhbHJlYWR5IGV4aXN0cy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmaWxlIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKKyAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuNCA0LjAKKworICAgICAgVGhlIGBgJ1UnYGAgbW9kZS4KKwogCiAuLiBYWFggd29ya3MgZm9yIGJ5dGVzIHRvbywgYnV0IHNob3VsZCBpdD8KIC4uIGZ1bmN0aW9uOjogb3JkKGMpCkBAIC0xMDQ4LDggKzEwOTAsOCBAQAogCiAuLiBmdW5jdGlvbjo6IHByaW50KCpvYmplY3RzLCBzZXA9JyAnLCBlbmQ9J1xcbicsIGZpbGU9c3lzLnN0ZG91dCwgZmx1c2g9RmFsc2UpCiAKLSAgIFByaW50ICpvYmplY3RzKiB0byB0aGUgc3RyZWFtICpmaWxlKiwgc2VwYXJhdGVkIGJ5ICpzZXAqIGFuZCBmb2xsb3dlZCBieQotICAgKmVuZCouICAqc2VwKiwgKmVuZCogYW5kICpmaWxlKiwgaWYgcHJlc2VudCwgbXVzdCBiZSBnaXZlbiBhcyBrZXl3b3JkCisgICBQcmludCAqb2JqZWN0cyogdG8gdGhlIHRleHQgc3RyZWFtICpmaWxlKiwgc2VwYXJhdGVkIGJ5ICpzZXAqIGFuZCBmb2xsb3dlZAorICAgYnkgKmVuZCouICAqc2VwKiwgKmVuZCogYW5kICpmaWxlKiwgaWYgcHJlc2VudCwgbXVzdCBiZSBnaXZlbiBhcyBrZXl3b3JkCiAgICBhcmd1bWVudHMuCiAKICAgIEFsbCBub24ta2V5d29yZCBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBzdHJpbmdzIGxpa2UgOmZ1bmM6YHN0cmAgZG9lcyBhbmQKQEAgLTEwNTksMjEgKzExMDEsMjYgQEAKICAgICplbmQqLgogCiAgICBUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0IHdpdGggYSBgYHdyaXRlKHN0cmluZylgYCBtZXRob2Q7IGlmIGl0Ci0gICBpcyBub3QgcHJlc2VudCBvciBgYE5vbmVgYCwgOmRhdGE6YHN5cy5zdGRvdXRgIHdpbGwgYmUgdXNlZC4gIFdoZXRoZXIgb3V0cHV0Ci0gICBpcyBidWZmZXJlZCBpcyB1c3VhbGx5IGRldGVybWluZWQgYnkgKmZpbGUqLCBidXQgaWYgdGhlICAqZmx1c2gqIGtleXdvcmQKLSAgIGFyZ3VtZW50IGlzIHRydWUsIHRoZSBzdHJlYW0gaXMgZm9yY2libHkgZmx1c2hlZC4KKyAgIGlzIG5vdCBwcmVzZW50IG9yIGBgTm9uZWBgLCA6ZGF0YTpgc3lzLnN0ZG91dGAgd2lsbCBiZSB1c2VkLiAgU2luY2UgcHJpbnRlZAorICAgYXJndW1lbnRzIGFyZSBjb252ZXJ0ZWQgdG8gdGV4dCBzdHJpbmdzLCA6ZnVuYzpgcHJpbnRgIGNhbm5vdCBiZSB1c2VkIHdpdGgKKyAgIGJpbmFyeSBtb2RlIGZpbGUgb2JqZWN0cy4gIEZvciB0aGVzZSwgdXNlIGBgZmlsZS53cml0ZSguLi4pYGAgaW5zdGVhZC4KKworICAgV2hldGhlciBvdXRwdXQgaXMgYnVmZmVyZWQgaXMgdXN1YWxseSBkZXRlcm1pbmVkIGJ5ICpmaWxlKiwgYnV0IGlmIHRoZQorICAgKmZsdXNoKiBrZXl3b3JkIGFyZ3VtZW50IGlzIHRydWUsIHRoZSBzdHJlYW0gaXMgZm9yY2libHkgZmx1c2hlZC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIEFkZGVkIHRoZSAqZmx1c2gqIGtleXdvcmQgYXJndW1lbnQuCiAKIAotLi4gZnVuY3Rpb246OiBwcm9wZXJ0eShmZ2V0PU5vbmUsIGZzZXQ9Tm9uZSwgZmRlbD1Ob25lLCBkb2M9Tm9uZSkKKy4uIGNsYXNzOjogcHJvcGVydHkoZmdldD1Ob25lLCBmc2V0PU5vbmUsIGZkZWw9Tm9uZSwgZG9jPU5vbmUpCiAKICAgIFJldHVybiBhIHByb3BlcnR5IGF0dHJpYnV0ZS4KIAotICAgKmZnZXQqIGlzIGEgZnVuY3Rpb24gZm9yIGdldHRpbmcgYW4gYXR0cmlidXRlIHZhbHVlLCBsaWtld2lzZSAqZnNldCogaXMgYQotICAgZnVuY3Rpb24gZm9yIHNldHRpbmcsIGFuZCAqZmRlbCogYSBmdW5jdGlvbiBmb3IgZGVsJ2luZywgYW4gYXR0cmlidXRlLiAgVHlwaWNhbAotICAgdXNlIGlzIHRvIGRlZmluZSBhIG1hbmFnZWQgYXR0cmlidXRlIGBgeGBgOjoKKyAgICpmZ2V0KiBpcyBhIGZ1bmN0aW9uIGZvciBnZXR0aW5nIGFuIGF0dHJpYnV0ZSB2YWx1ZS4gICpmc2V0KiBpcyBhIGZ1bmN0aW9uCisgICBmb3Igc2V0dGluZyBhbiBhdHRyaWJ1dGUgdmFsdWUuICpmZGVsKiBpcyBhIGZ1bmN0aW9uIGZvciBkZWxldGluZyBhbiBhdHRyaWJ1dGUKKyAgIHZhbHVlLiAgQW5kICpkb2MqIGNyZWF0ZXMgYSBkb2NzdHJpbmcgZm9yIHRoZSBhdHRyaWJ1dGUuCisKKyAgIEEgdHlwaWNhbCB1c2UgaXMgdG8gZGVmaW5lIGEgbWFuYWdlZCBhdHRyaWJ1dGUgYGB4YGA6OgogCiAgICAgICBjbGFzcyBDOgogICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTEwODEsMTMgKzExMjgsMTYgQEAKIAogICAgICAgICAgIGRlZiBnZXR4KHNlbGYpOgogICAgICAgICAgICAgICByZXR1cm4gc2VsZi5feAorCiAgICAgICAgICAgZGVmIHNldHgoc2VsZiwgdmFsdWUpOgogICAgICAgICAgICAgICBzZWxmLl94ID0gdmFsdWUKKwogICAgICAgICAgIGRlZiBkZWx4KHNlbGYpOgogICAgICAgICAgICAgICBkZWwgc2VsZi5feAorCiAgICAgICAgICAgeCA9IHByb3BlcnR5KGdldHgsIHNldHgsIGRlbHgsICJJJ20gdGhlICd4JyBwcm9wZXJ0eS4iKQogCi0gICBJZiB0aGVuICpjKiBpcyBhbiBpbnN0YW5jZSBvZiAqQyosIGBgYy54YGAgd2lsbCBpbnZva2UgdGhlIGdldHRlciwKKyAgIElmICpjKiBpcyBhbiBpbnN0YW5jZSBvZiAqQyosIGBgYy54YGAgd2lsbCBpbnZva2UgdGhlIGdldHRlciwKICAgIGBgYy54ID0gdmFsdWVgYCB3aWxsIGludm9rZSB0aGUgc2V0dGVyIGFuZCBgYGRlbCBjLnhgYCB0aGUgZGVsZXRlci4KIAogICAgSWYgZ2l2ZW4sICpkb2MqIHdpbGwgYmUgdGhlIGRvY3N0cmluZyBvZiB0aGUgcHJvcGVydHkgYXR0cmlidXRlLiBPdGhlcndpc2UsIHRoZQpAQCAtMTEwMyw4ICsxMTUzLDkgQEAKICAgICAgICAgICAgICAgIiIiR2V0IHRoZSBjdXJyZW50IHZvbHRhZ2UuIiIiCiAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92b2x0YWdlCiAKLSAgIHR1cm5zIHRoZSA6bWV0aDpgdm9sdGFnZWAgbWV0aG9kIGludG8gYSAiZ2V0dGVyIiBmb3IgYSByZWFkLW9ubHkgYXR0cmlidXRlCi0gICB3aXRoIHRoZSBzYW1lIG5hbWUuCisgICBUaGUgYGBAcHJvcGVydHlgYCBkZWNvcmF0b3IgdHVybnMgdGhlIDptZXRoOmB2b2x0YWdlYCBtZXRob2QgaW50byBhICJnZXR0ZXIiCisgICBmb3IgYSByZWFkLW9ubHkgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZSwgYW5kIGl0IHNldHMgdGhlIGRvY3N0cmluZyBmb3IKKyAgICp2b2x0YWdlKiB0byAiR2V0IHRoZSBjdXJyZW50IHZvbHRhZ2UuIgogCiAgICBBIHByb3BlcnR5IG9iamVjdCBoYXMgOmF0dHI6YH5wcm9wZXJ0eS5nZXR0ZXJgLCA6YXR0cjpgfnByb3BlcnR5LnNldHRlcmAsCiAgICBhbmQgOmF0dHI6YH5wcm9wZXJ0eS5kZWxldGVyYCBtZXRob2RzIHVzYWJsZSBhcyBkZWNvcmF0b3JzIHRoYXQgY3JlYXRlIGEKQEAgLTExMzIsNyArMTE4Myw3IEBACiAgICBhZGRpdGlvbmFsIGZ1bmN0aW9ucyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBvcmlnaW5hbCBwcm9wZXJ0eSAoYGB4YGAgaW4gdGhpcwogICAgY2FzZS4pCiAKLSAgIFRoZSByZXR1cm5lZCBwcm9wZXJ0eSBhbHNvIGhhcyB0aGUgYXR0cmlidXRlcyBgYGZnZXRgYCwgYGBmc2V0YGAsIGFuZAorICAgVGhlIHJldHVybmVkIHByb3BlcnR5IG9iamVjdCBhbHNvIGhhcyB0aGUgYXR0cmlidXRlcyBgYGZnZXRgYCwgYGBmc2V0YGAsIGFuZAogICAgYGBmZGVsYGAgY29ycmVzcG9uZGluZyB0byB0aGUgY29uc3RydWN0b3IgYXJndW1lbnRzLgogCiAKQEAgLTExODcsNyArMTIzOCw3IEBACiAKIAogLi4gX2Z1bmMtc2V0OgotLi4gZnVuY3Rpb246OiBzZXQoW2l0ZXJhYmxlXSkKKy4uIGNsYXNzOjogc2V0KFtpdGVyYWJsZV0pCiAgICA6bm9pbmRleDoKIAogICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgc2V0YCBvYmplY3QsIG9wdGlvbmFsbHkgd2l0aCBlbGVtZW50cyB0YWtlbiBmcm9tCkBAIC0xMjA4LDggKzEyNTksOCBAQAogICAgYGB4LmZvb2JhciA9IDEyM2BgLgogCiAKLS4uIGZ1bmN0aW9uOjogc2xpY2Uoc3RvcCkKLSAgICAgICAgICAgICAgc2xpY2Uoc3RhcnQsIHN0b3BbLCBzdGVwXSkKKy4uIGNsYXNzOjogc2xpY2Uoc3RvcCkKKyAgICAgICAgICAgc2xpY2Uoc3RhcnQsIHN0b3BbLCBzdGVwXSkKIAogICAgLi4gaW5kZXg6OiBzaW5nbGU6IE51bWVyaWNhbCBQeXRob24KIApAQCAtMTI0MCw4ICsxMjkxLDEyIEBACiAgICBVc2UgOmZ1bmM6YGZ1bmN0b29scy5jbXBfdG9fa2V5YCB0byBjb252ZXJ0IGFuIG9sZC1zdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhCiAgICAqa2V5KiBmdW5jdGlvbi4KIAotICAgRm9yIHNvcnRpbmcgZXhhbXBsZXMgYW5kIGEgYnJpZWYgc29ydGluZyB0dXRvcmlhbCwgc2VlIGBTb3J0aW5nIEhvd1RvCi0gICA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL0hvd1RvL1NvcnRpbmcvPmBfXC4KKyAgIFRoZSBidWlsdC1pbiA6ZnVuYzpgc29ydGVkYCBmdW5jdGlvbiBpcyBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZS4gQSBzb3J0IGlzCisgICBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZiBlbGVtZW50cyB0aGF0CisgICBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW4gbXVsdGlwbGUgcGFzc2VzIChmb3IKKyAgIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnkgZ3JhZGUpLgorCisgICBGb3Igc29ydGluZyBleGFtcGxlcyBhbmQgYSBicmllZiBzb3J0aW5nIHR1dG9yaWFsLCBzZWUgOnJlZjpgc29ydGluZ2hvd3RvYC4KIAogLi4gZnVuY3Rpb246OiBzdGF0aWNtZXRob2QoZnVuY3Rpb24pCiAKQEAgLTEyNzIsOCArMTMyNyw4IEBACiAKIAogLi4gX2Z1bmMtc3RyOgotLi4gZnVuY3Rpb246OiBzdHIob2JqZWN0PScnKQotICAgICAgICAgICAgICBzdHIob2JqZWN0PWInJywgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKQorLi4gY2xhc3M6OiBzdHIob2JqZWN0PScnKQorICAgICAgICAgICBzdHIob2JqZWN0PWInJywgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdHJpY3QnKQogICAgOm5vaW5kZXg6CiAKICAgIFJldHVybiBhIDpjbGFzczpgc3RyYCB2ZXJzaW9uIG9mICpvYmplY3QqLiAgU2VlIDpmdW5jOmBzdHJgIGZvciBkZXRhaWxzLgpAQCAtMTM2MCwxMiArMTQxNSwxMSBAQAogICAgc2VxdWVuY2UgdHlwZSwgYXMgZG9jdW1lbnRlZCBpbiA6cmVmOmB0eXBlc3NlcS10dXBsZWAgYW5kIDpyZWY6YHR5cGVzc2VxYC4KIAogCi0uLiBmdW5jdGlvbjo6IHR5cGUob2JqZWN0KQotICAgICAgICAgICAgICB0eXBlKG5hbWUsIGJhc2VzLCBkaWN0KQorLi4gY2xhc3M6OiB0eXBlKG9iamVjdCkKKyAgICAgICAgICAgdHlwZShuYW1lLCBiYXNlcywgZGljdCkKIAogICAgLi4gaW5kZXg6OiBvYmplY3Q6IHR5cGUKIAotCiAgICBXaXRoIG9uZSBhcmd1bWVudCwgcmV0dXJuIHRoZSB0eXBlIG9mIGFuICpvYmplY3QqLiAgVGhlIHJldHVybiB2YWx1ZSBpcyBhCiAgICB0eXBlIG9iamVjdCBhbmQgZ2VuZXJhbGx5IHRoZSBzYW1lIG9iamVjdCBhcyByZXR1cm5lZCBieQogICAgOmF0dHI6YG9iamVjdC5fX2NsYXNzX18gPGluc3RhbmNlLl9fY2xhc3NfXz5gLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2Z1bmN0b29scy5yc3QKaW5kZXggM2M5NDZlMy4uNDZhYTg4NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZnVuY3Rvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9mdW5jdG9vbHMucnN0CkBAIC02LDYgKzYsNyBAQAogLi4gbW9kdWxlYXV0aG9yOjogUGV0ZXIgSGFycmlzIDxzY2F2QGJsdWV5b25kZXIuY28udWs+CiAuLiBtb2R1bGVhdXRob3I6OiBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uQHJjbi5jb20+CiAuLiBtb2R1bGVhdXRob3I6OiBOaWNrIENvZ2hsYW4gPG5jb2dobGFuQGdtYWlsLmNvbT4KKy4uIG1vZHVsZWF1dGhvcjo6IMWBdWthc3ogTGFuZ2EgPGx1a2FzekBsYW5nYS5wbD4KIC4uIHNlY3Rpb25hdXRob3I6OiBQZXRlciBIYXJyaXMgPHNjYXZAYmx1ZXlvbmRlci5jby51az4KIAogKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvZnVuY3Rvb2xzLnB5YApAQCAtMjAsOCArMjEsOCBAQAogCiAuLiBmdW5jdGlvbjo6IGNtcF90b19rZXkoZnVuYykKIAotICAgVHJhbnNmb3JtIGFuIG9sZC1zdHlsZSBjb21wYXJpc29uIGZ1bmN0aW9uIHRvIGEga2V5IGZ1bmN0aW9uLiAgVXNlZCB3aXRoCi0gICB0b29scyB0aGF0IGFjY2VwdCBrZXkgZnVuY3Rpb25zIChzdWNoIGFzIDpmdW5jOmBzb3J0ZWRgLCA6ZnVuYzpgbWluYCwKKyAgIFRyYW5zZm9ybSBhbiBvbGQtc3R5bGUgY29tcGFyaXNvbiBmdW5jdGlvbiB0byBhIDp0ZXJtOmBrZXkgZnVuY3Rpb25gLiAgVXNlZAorICAgd2l0aCB0b29scyB0aGF0IGFjY2VwdCBrZXkgZnVuY3Rpb25zIChzdWNoIGFzIDpmdW5jOmBzb3J0ZWRgLCA6ZnVuYzpgbWluYCwKICAgIDpmdW5jOmBtYXhgLCA6ZnVuYzpgaGVhcHEubmxhcmdlc3RgLCA6ZnVuYzpgaGVhcHEubnNtYWxsZXN0YCwKICAgIDpmdW5jOmBpdGVydG9vbHMuZ3JvdXBieWApLiAgVGhpcyBmdW5jdGlvbiBpcyBwcmltYXJpbHkgdXNlZCBhcyBhIHRyYW5zaXRpb24KICAgIHRvb2wgZm9yIHByb2dyYW1zIGJlaW5nIGNvbnZlcnRlZCBmcm9tIFB5dGhvbiAyIHdoaWNoIHN1cHBvcnRlZCB0aGUgdXNlIG9mCkBAIC0zMCwxMyArMzEsMTQgQEAKICAgIEEgY29tcGFyaXNvbiBmdW5jdGlvbiBpcyBhbnkgY2FsbGFibGUgdGhhdCBhY2NlcHQgdHdvIGFyZ3VtZW50cywgY29tcGFyZXMgdGhlbSwKICAgIGFuZCByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIGZvciBsZXNzLXRoYW4sIHplcm8gZm9yIGVxdWFsaXR5LCBvciBhIHBvc2l0aXZlCiAgICBudW1iZXIgZm9yIGdyZWF0ZXItdGhhbi4gIEEga2V5IGZ1bmN0aW9uIGlzIGEgY2FsbGFibGUgdGhhdCBhY2NlcHRzIG9uZQotICAgYXJndW1lbnQgYW5kIHJldHVybnMgYW5vdGhlciB2YWx1ZSBpbmRpY2F0aW5nIHRoZSBwb3NpdGlvbiBpbiB0aGUgZGVzaXJlZAotICAgY29sbGF0aW9uIHNlcXVlbmNlLgorICAgYXJndW1lbnQgYW5kIHJldHVybnMgYW5vdGhlciB2YWx1ZSB0byBiZSB1c2VkIGFzIHRoZSBzb3J0IGtleS4KIAogICAgRXhhbXBsZTo6CiAKICAgICAgICBzb3J0ZWQoaXRlcmFibGUsIGtleT1jbXBfdG9fa2V5KGxvY2FsZS5zdHJjb2xsKSkgICMgbG9jYWxlLWF3YXJlIHNvcnQgb3JkZXIKIAorICAgRm9yIHNvcnRpbmcgZXhhbXBsZXMgYW5kIGEgYnJpZWYgc29ydGluZyB0dXRvcmlhbCwgc2VlIDpyZWY6YHNvcnRpbmdob3d0b2AuCisKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCiAKQEAgLTcxLDcgKzczLDcgQEAKICAgIGJ5cGFzc2luZyB0aGUgY2FjaGUsIG9yIGZvciByZXdyYXBwaW5nIHRoZSBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50IGNhY2hlLgogCiAgICBBbiBgTFJVIChsZWFzdCByZWNlbnRseSB1c2VkKSBjYWNoZQotICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2FjaGVfYWxnb3JpdGhtcyNMZWFzdF9SZWNlbnRseV9Vc2VkPmBfIHdvcmtzCisgICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DYWNoZV9hbGdvcml0aG1zI0V4YW1wbGVzPmBfIHdvcmtzCiAgICBiZXN0IHdoZW4gdGhlIG1vc3QgcmVjZW50IGNhbGxzIGFyZSB0aGUgYmVzdCBwcmVkaWN0b3JzIG9mIHVwY29taW5nIGNhbGxzIChmb3IKICAgIGV4YW1wbGUsIHRoZSBtb3N0IHBvcHVsYXIgYXJ0aWNsZXMgb24gYSBuZXdzIHNlcnZlciB0ZW5kIHRvIGNoYW5nZSBlYWNoIGRheSkuCiAgICBUaGUgY2FjaGUncyBzaXplIGxpbWl0IGFzc3VyZXMgdGhhdCB0aGUgY2FjaGUgZG9lcyBub3QgZ3JvdyB3aXRob3V0IGJvdW5kIG9uCkBAIC0xMzMsMTUgKzEzNSwzNCBAQAogCiAgICAgICAgQHRvdGFsX29yZGVyaW5nCiAgICAgICAgY2xhc3MgU3R1ZGVudDoKKyAgICAgICAgICAgZGVmIF9pc192YWxpZF9vcGVyYW5kKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgIHJldHVybiAoaGFzYXR0cihvdGhlciwgImxhc3RuYW1lIikgYW5kCisgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIob3RoZXIsICJmaXJzdG5hbWUiKSkKICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5faXNfdmFsaWRfb3BlcmFuZChvdGhlcik6CisgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgICAgICAgICByZXR1cm4gKChzZWxmLmxhc3RuYW1lLmxvd2VyKCksIHNlbGYuZmlyc3RuYW1lLmxvd2VyKCkpID09CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAgICAgICAgICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2lzX3ZhbGlkX29wZXJhbmQob3RoZXIpOgorICAgICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICAgICAgICAgcmV0dXJuICgoc2VsZi5sYXN0bmFtZS5sb3dlcigpLCBzZWxmLmZpcnN0bmFtZS5sb3dlcigpKSA8CiAgICAgICAgICAgICAgICAgICAgICAgIChvdGhlci5sYXN0bmFtZS5sb3dlcigpLCBvdGhlci5maXJzdG5hbWUubG93ZXIoKSkpCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBXaGlsZSB0aGlzIGRlY29yYXRvciBtYWtlcyBpdCBlYXN5IHRvIGNyZWF0ZSB3ZWxsIGJlaGF2ZWQgdG90YWxseQorICAgICAgb3JkZXJlZCB0eXBlcywgaXQgKmRvZXMqIGNvbWUgYXQgdGhlIGNvc3Qgb2Ygc2xvd2VyIGV4ZWN1dGlvbiBhbmQKKyAgICAgIG1vcmUgY29tcGxleCBzdGFjayB0cmFjZXMgZm9yIHRoZSBkZXJpdmVkIGNvbXBhcmlzb24gbWV0aG9kcy4gSWYKKyAgICAgIHBlcmZvcm1hbmNlIGJlbmNobWFya2luZyBpbmRpY2F0ZXMgdGhpcyBpcyBhIGJvdHRsZW5lY2sgZm9yIGEgZ2l2ZW4KKyAgICAgIGFwcGxpY2F0aW9uLCBpbXBsZW1lbnRpbmcgYWxsIHNpeCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBpbnN0ZWFkIGlzCisgICAgICBsaWtlbHkgdG8gcHJvdmlkZSBhbiBlYXN5IHNwZWVkIGJvb3N0LgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJldHVybmluZyBOb3RJbXBsZW1lbnRlZCBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yCisgICAgICB1bnJlY29nbmlzZWQgdHlwZXMgaXMgbm93IHN1cHBvcnRlZC4KIAogLi4gZnVuY3Rpb246OiBwYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKQogCkBAIC0xNzQsNiArMTk1LDUwIEBACiAgICAgICAxOAogCiAKKy4uIGNsYXNzOjogcGFydGlhbG1ldGhvZChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKKworICAgUmV0dXJuIGEgbmV3IDpjbGFzczpgcGFydGlhbG1ldGhvZGAgZGVzY3JpcHRvciB3aGljaCBiZWhhdmVzCisgICBsaWtlIDpjbGFzczpgcGFydGlhbGAgZXhjZXB0IHRoYXQgaXQgaXMgZGVzaWduZWQgdG8gYmUgdXNlZCBhcyBhIG1ldGhvZAorICAgZGVmaW5pdGlvbiByYXRoZXIgdGhhbiBiZWluZyBkaXJlY3RseSBjYWxsYWJsZS4KKworICAgKmZ1bmMqIG11c3QgYmUgYSA6dGVybTpgZGVzY3JpcHRvcmAgb3IgYSBjYWxsYWJsZSAob2JqZWN0cyB3aGljaCBhcmUgYm90aCwKKyAgIGxpa2Ugbm9ybWFsIGZ1bmN0aW9ucywgYXJlIGhhbmRsZWQgYXMgZGVzY3JpcHRvcnMpLgorCisgICBXaGVuICpmdW5jKiBpcyBhIGRlc2NyaXB0b3IgKHN1Y2ggYXMgYSBub3JtYWwgUHl0aG9uIGZ1bmN0aW9uLAorICAgOmZ1bmM6YGNsYXNzbWV0aG9kYCwgOmZ1bmM6YHN0YXRpY21ldGhvZGAsIDpmdW5jOmBhYnN0cmFjdG1ldGhvZGAgb3IKKyAgIGFub3RoZXIgaW5zdGFuY2Ugb2YgOmNsYXNzOmBwYXJ0aWFsbWV0aG9kYCksIGNhbGxzIHRvIGBgX19nZXRfX2BgIGFyZQorICAgZGVsZWdhdGVkIHRvIHRoZSB1bmRlcmx5aW5nIGRlc2NyaXB0b3IsIGFuZCBhbiBhcHByb3ByaWF0ZQorICAgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3QgcmV0dXJuZWQgYXMgdGhlIHJlc3VsdC4KKworICAgV2hlbiAqZnVuYyogaXMgYSBub24tZGVzY3JpcHRvciBjYWxsYWJsZSwgYW4gYXBwcm9wcmlhdGUgYm91bmQgbWV0aG9kIGlzCisgICBjcmVhdGVkIGR5bmFtaWNhbGx5LiBUaGlzIGJlaGF2ZXMgbGlrZSBhIG5vcm1hbCBQeXRob24gZnVuY3Rpb24gd2hlbgorICAgdXNlZCBhcyBhIG1ldGhvZDogdGhlICpzZWxmKiBhcmd1bWVudCB3aWxsIGJlIGluc2VydGVkIGFzIHRoZSBmaXJzdAorICAgcG9zaXRpb25hbCBhcmd1bWVudCwgZXZlbiBiZWZvcmUgdGhlICphcmdzKiBhbmQgKmtleXdvcmRzKiBzdXBwbGllZCB0bworICAgdGhlIDpjbGFzczpgcGFydGlhbG1ldGhvZGAgY29uc3RydWN0b3IuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICA+Pj4gY2xhc3MgQ2VsbChvYmplY3QpOgorICAgICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAuLi4gICAgICAgICBzZWxmLl9hbGl2ZSA9IEZhbHNlCisgICAgICAuLi4gICAgIEBwcm9wZXJ0eQorICAgICAgLi4uICAgICBkZWYgYWxpdmUoc2VsZik6CisgICAgICAuLi4gICAgICAgICByZXR1cm4gc2VsZi5fYWxpdmUKKyAgICAgIC4uLiAgICAgZGVmIHNldF9zdGF0ZShzZWxmLCBzdGF0ZSk6CisgICAgICAuLi4gICAgICAgICBzZWxmLl9hbGl2ZSA9IGJvb2woc3RhdGUpCisgICAgICAuLi4gICAgIHNldF9hbGl2ZSA9IHBhcnRpYWxtZXRob2Qoc2V0X3N0YXRlLCBUcnVlKQorICAgICAgLi4uICAgICBzZXRfZGVhZCA9IHBhcnRpYWxtZXRob2Qoc2V0X3N0YXRlLCBGYWxzZSkKKyAgICAgIC4uLgorICAgICAgPj4+IGMgPSBDZWxsKCkKKyAgICAgID4+PiBjLmFsaXZlCisgICAgICBGYWxzZQorICAgICAgPj4+IGMuc2V0X2FsaXZlKCkKKyAgICAgID4+PiBjLmFsaXZlCisgICAgICBUcnVlCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogcmVkdWNlKGZ1bmN0aW9uLCBpdGVyYWJsZVssIGluaXRpYWxpemVyXSkKIAogICAgQXBwbHkgKmZ1bmN0aW9uKiBvZiB0d28gYXJndW1lbnRzIGN1bXVsYXRpdmVseSB0byB0aGUgaXRlbXMgb2YgKnNlcXVlbmNlKiwgZnJvbQpAQCAtMTg1LDcgKzI1MCw3IEBACiAgICBhIGRlZmF1bHQgd2hlbiB0aGUgc2VxdWVuY2UgaXMgZW1wdHkuICBJZiAqaW5pdGlhbGl6ZXIqIGlzIG5vdCBnaXZlbiBhbmQKICAgICpzZXF1ZW5jZSogY29udGFpbnMgb25seSBvbmUgaXRlbSwgdGhlIGZpcnN0IGl0ZW0gaXMgcmV0dXJuZWQuCiAKLSAgIEVxdWl2YWxlbnQgdG86OgorICAgUm91Z2hseSBlcXVpdmFsZW50IHRvOjoKIAogICAgICAgZGVmIHJlZHVjZShmdW5jdGlvbiwgaXRlcmFibGUsIGluaXRpYWxpemVyPU5vbmUpOgogICAgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKQEAgLTE5OCw2ICsyNjMsMTExIEBACiAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAKIAorLi4gZGVjb3JhdG9yOjogc2luZ2xlZGlzcGF0Y2goZGVmYXVsdCkKKworICAgVHJhbnNmb3JtcyBhIGZ1bmN0aW9uIGludG8gYSA6dGVybTpgc2luZ2xlLWRpc3BhdGNoIDxzaW5nbGUKKyAgIGRpc3BhdGNoPmAgOnRlcm06YGdlbmVyaWMgZnVuY3Rpb25gLgorCisgICBUbyBkZWZpbmUgYSBnZW5lcmljIGZ1bmN0aW9uLCBkZWNvcmF0ZSBpdCB3aXRoIHRoZSBgYEBzaW5nbGVkaXNwYXRjaGBgCisgICBkZWNvcmF0b3IuIE5vdGUgdGhhdCB0aGUgZGlzcGF0Y2ggaGFwcGVucyBvbiB0aGUgdHlwZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQsCisgICBjcmVhdGUgeW91ciBmdW5jdGlvbiBhY2NvcmRpbmdseTo6CisKKyAgICAgPj4+IGZyb20gZnVuY3Rvb2xzIGltcG9ydCBzaW5nbGVkaXNwYXRjaAorICAgICA+Pj4gQHNpbmdsZWRpc3BhdGNoCisgICAgIC4uLiBkZWYgZnVuKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIkxldCBtZSBqdXN0IHNheSwiLCBlbmQ9IiAiKQorICAgICAuLi4gICAgIHByaW50KGFyZykKKworICAgVG8gYWRkIG92ZXJsb2FkZWQgaW1wbGVtZW50YXRpb25zIHRvIHRoZSBmdW5jdGlvbiwgdXNlIHRoZSA6ZnVuYzpgcmVnaXN0ZXJgCisgICBhdHRyaWJ1dGUgb2YgdGhlIGdlbmVyaWMgZnVuY3Rpb24uICBJdCBpcyBhIGRlY29yYXRvciwgdGFraW5nIGEgdHlwZQorICAgcGFyYW1ldGVyIGFuZCBkZWNvcmF0aW5nIGEgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBvcGVyYXRpb24gZm9yIHRoYXQKKyAgIHR5cGU6OgorCisgICAgID4+PiBAZnVuLnJlZ2lzdGVyKGludCkKKyAgICAgLi4uIGRlZiBfKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIlN0cmVuZ3RoIGluIG51bWJlcnMsIGVoPyIsIGVuZD0iICIpCisgICAgIC4uLiAgICAgcHJpbnQoYXJnKQorICAgICAuLi4KKyAgICAgPj4+IEBmdW4ucmVnaXN0ZXIobGlzdCkKKyAgICAgLi4uIGRlZiBfKGFyZywgdmVyYm9zZT1GYWxzZSk6CisgICAgIC4uLiAgICAgaWYgdmVyYm9zZToKKyAgICAgLi4uICAgICAgICAgcHJpbnQoIkVudW1lcmF0ZSB0aGlzOiIpCisgICAgIC4uLiAgICAgZm9yIGksIGVsZW0gaW4gZW51bWVyYXRlKGFyZyk6CisgICAgIC4uLiAgICAgICAgIHByaW50KGksIGVsZW0pCisKKyAgIFRvIGVuYWJsZSByZWdpc3RlcmluZyBsYW1iZGFzIGFuZCBwcmUtZXhpc3RpbmcgZnVuY3Rpb25zLCB0aGUKKyAgIDpmdW5jOmByZWdpc3RlcmAgYXR0cmlidXRlIGNhbiBiZSB1c2VkIGluIGEgZnVuY3Rpb25hbCBmb3JtOjoKKworICAgICA+Pj4gZGVmIG5vdGhpbmcoYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBwcmludCgiTm90aGluZy4iKQorICAgICAuLi4KKyAgICAgPj4+IGZ1bi5yZWdpc3Rlcih0eXBlKE5vbmUpLCBub3RoaW5nKQorCisgICBUaGUgOmZ1bmM6YHJlZ2lzdGVyYCBhdHRyaWJ1dGUgcmV0dXJucyB0aGUgdW5kZWNvcmF0ZWQgZnVuY3Rpb24gd2hpY2gKKyAgIGVuYWJsZXMgZGVjb3JhdG9yIHN0YWNraW5nLCBwaWNrbGluZywgYXMgd2VsbCBhcyBjcmVhdGluZyB1bml0IHRlc3RzIGZvcgorICAgZWFjaCB2YXJpYW50IGluZGVwZW5kZW50bHk6OgorCisgICAgID4+PiBAZnVuLnJlZ2lzdGVyKGZsb2F0KQorICAgICAuLi4gQGZ1bi5yZWdpc3RlcihEZWNpbWFsKQorICAgICAuLi4gZGVmIGZ1bl9udW0oYXJnLCB2ZXJib3NlPUZhbHNlKToKKyAgICAgLi4uICAgICBpZiB2ZXJib3NlOgorICAgICAuLi4gICAgICAgICBwcmludCgiSGFsZiBvZiB5b3VyIG51bWJlcjoiLCBlbmQ9IiAiKQorICAgICAuLi4gICAgIHByaW50KGFyZyAvIDIpCisgICAgIC4uLgorICAgICA+Pj4gZnVuX251bSBpcyBmdW4KKyAgICAgRmFsc2UKKworICAgV2hlbiBjYWxsZWQsIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGRpc3BhdGNoZXMgb24gdGhlIHR5cGUgb2YgdGhlIGZpcnN0CisgICBhcmd1bWVudDo6CisKKyAgICAgPj4+IGZ1bigiSGVsbG8sIHdvcmxkLiIpCisgICAgIEhlbGxvLCB3b3JsZC4KKyAgICAgPj4+IGZ1bigidGVzdC4iLCB2ZXJib3NlPVRydWUpCisgICAgIExldCBtZSBqdXN0IHNheSwgdGVzdC4KKyAgICAgPj4+IGZ1big0MiwgdmVyYm9zZT1UcnVlKQorICAgICBTdHJlbmd0aCBpbiBudW1iZXJzLCBlaD8gNDIKKyAgICAgPj4+IGZ1bihbJ3NwYW0nLCAnc3BhbScsICdlZ2dzJywgJ3NwYW0nXSwgdmVyYm9zZT1UcnVlKQorICAgICBFbnVtZXJhdGUgdGhpczoKKyAgICAgMCBzcGFtCisgICAgIDEgc3BhbQorICAgICAyIGVnZ3MKKyAgICAgMyBzcGFtCisgICAgID4+PiBmdW4oTm9uZSkKKyAgICAgTm90aGluZy4KKyAgICAgPj4+IGZ1bigxLjIzKQorICAgICAwLjYxNQorCisgICBXaGVyZSB0aGVyZSBpcyBubyByZWdpc3RlcmVkIGltcGxlbWVudGF0aW9uIGZvciBhIHNwZWNpZmljIHR5cGUsIGl0cworICAgbWV0aG9kIHJlc29sdXRpb24gb3JkZXIgaXMgdXNlZCB0byBmaW5kIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgorICAgVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIGRlY29yYXRlZCB3aXRoIGBgQHNpbmdsZWRpc3BhdGNoYGAgaXMgcmVnaXN0ZXJlZAorICAgZm9yIHRoZSBiYXNlIGBgb2JqZWN0YGAgdHlwZSwgd2hpY2ggbWVhbnMgaXQgaXMgdXNlZCBpZiBubyBiZXR0ZXIKKyAgIGltcGxlbWVudGF0aW9uIGlzIGZvdW5kLgorCisgICBUbyBjaGVjayB3aGljaCBpbXBsZW1lbnRhdGlvbiB3aWxsIHRoZSBnZW5lcmljIGZ1bmN0aW9uIGNob29zZSBmb3IKKyAgIGEgZ2l2ZW4gdHlwZSwgdXNlIHRoZSBgYGRpc3BhdGNoKClgYCBhdHRyaWJ1dGU6OgorCisgICAgID4+PiBmdW4uZGlzcGF0Y2goZmxvYXQpCisgICAgIDxmdW5jdGlvbiBmdW5fbnVtIGF0IDB4MTAzNWEyODQwPgorICAgICA+Pj4gZnVuLmRpc3BhdGNoKGRpY3QpICAgICMgbm90ZTogZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorICAgICA8ZnVuY3Rpb24gZnVuIGF0IDB4MTAzZmUwMDAwPgorCisgICBUbyBhY2Nlc3MgYWxsIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb25zLCB1c2UgdGhlIHJlYWQtb25seSBgYHJlZ2lzdHJ5YGAKKyAgIGF0dHJpYnV0ZTo6CisKKyAgICA+Pj4gZnVuLnJlZ2lzdHJ5LmtleXMoKQorICAgIGRpY3Rfa2V5cyhbPGNsYXNzICdOb25lVHlwZSc+LCA8Y2xhc3MgJ2ludCc+LCA8Y2xhc3MgJ29iamVjdCc+LAorICAgICAgICAgICAgICA8Y2xhc3MgJ2RlY2ltYWwuRGVjaW1hbCc+LCA8Y2xhc3MgJ2xpc3QnPiwKKyAgICAgICAgICAgICAgPGNsYXNzICdmbG9hdCc+XSkKKyAgICA+Pj4gZnVuLnJlZ2lzdHJ5W2Zsb2F0XQorICAgIDxmdW5jdGlvbiBmdW5fbnVtIGF0IDB4MTAzNWEyODQwPgorICAgID4+PiBmdW4ucmVnaXN0cnlbb2JqZWN0XQorICAgIDxmdW5jdGlvbiBmdW4gYXQgMHgxMDNmZTAwMDA+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogdXBkYXRlX3dyYXBwZXIod3JhcHBlciwgd3JhcHBlZCwgYXNzaWduZWQ9V1JBUFBFUl9BU1NJR05NRU5UUywgdXBkYXRlZD1XUkFQUEVSX1VQREFURVMpCiAKICAgIFVwZGF0ZSBhICp3cmFwcGVyKiBmdW5jdGlvbiB0byBsb29rIGxpa2UgdGhlICp3cmFwcGVkKiBmdW5jdGlvbi4gVGhlIG9wdGlvbmFsCkBAIC0yMTIsOCArMzgyLDggQEAKIAogICAgVG8gYWxsb3cgYWNjZXNzIHRvIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBmb3IgaW50cm9zcGVjdGlvbiBhbmQgb3RoZXIgcHVycG9zZXMKICAgIChlLmcuIGJ5cGFzc2luZyBhIGNhY2hpbmcgZGVjb3JhdG9yIHN1Y2ggYXMgOmZ1bmM6YGxydV9jYWNoZWApLCB0aGlzIGZ1bmN0aW9uCi0gICBhdXRvbWF0aWNhbGx5IGFkZHMgYSBfX3dyYXBwZWRfXyBhdHRyaWJ1dGUgdG8gdGhlIHdyYXBwZXIgdGhhdCByZWZlcnMgdG8KLSAgIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi4KKyAgIGF1dG9tYXRpY2FsbHkgYWRkcyBhIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgdG8gdGhlIHdyYXBwZXIgdGhhdCByZWZlcnMgdG8KKyAgIHRoZSBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLgogCiAgICBUaGUgbWFpbiBpbnRlbmRlZCB1c2UgZm9yIHRoaXMgZnVuY3Rpb24gaXMgaW4gOnRlcm06YGRlY29yYXRvcmAgZnVuY3Rpb25zIHdoaWNoCiAgICB3cmFwIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gYW5kIHJldHVybiB0aGUgd3JhcHBlci4gSWYgdGhlIHdyYXBwZXIgZnVuY3Rpb24gaXMKQEAgLTIzNiwxMiArNDA2LDE4IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgTWlzc2luZyBhdHRyaWJ1dGVzIG5vIGxvbmdlciB0cmlnZ2VyIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIG5vdyBhbHdheXMgcmVmZXJzIHRvIHRoZSB3cmFwcGVkCisgICAgICBmdW5jdGlvbiwgZXZlbiBpZiB0aGF0IGZ1bmN0aW9uIGRlZmluZWQgYSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlLgorICAgICAgKHNlZSA6aXNzdWU6YDE3NDgyYCkKKwogCiAuLiBkZWNvcmF0b3I6OiB3cmFwcyh3cmFwcGVkLCBhc3NpZ25lZD1XUkFQUEVSX0FTU0lHTk1FTlRTLCB1cGRhdGVkPVdSQVBQRVJfVVBEQVRFUykKIAotICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBpbnZva2luZyBgYHBhcnRpYWwodXBkYXRlX3dyYXBwZXIsCi0gICB3cmFwcGVkPXdyYXBwZWQsIGFzc2lnbmVkPWFzc2lnbmVkLCB1cGRhdGVkPXVwZGF0ZWQpYGAgYXMgYSBmdW5jdGlvbiBkZWNvcmF0b3IKLSAgIHdoZW4gZGVmaW5pbmcgYSB3cmFwcGVyIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZToKKyAgIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBmdW5jdGlvbiBmb3IgaW52b2tpbmcgOmZ1bmM6YHVwZGF0ZV93cmFwcGVyYCBhcyBhCisgICBmdW5jdGlvbiBkZWNvcmF0b3Igd2hlbiBkZWZpbmluZyBhIHdyYXBwZXIgZnVuY3Rpb24uICBJdCBpcyBlcXVpdmFsZW50IHRvCisgICBgYHBhcnRpYWwodXBkYXRlX3dyYXBwZXIsIHdyYXBwZWQ9d3JhcHBlZCwgYXNzaWduZWQ9YXNzaWduZWQsIHVwZGF0ZWQ9dXBkYXRlZClgYC4KKyAgIEZvciBleGFtcGxlOjoKIAogICAgICAgPj4+IGZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcwogICAgICAgPj4+IGRlZiBteV9kZWNvcmF0b3IoZik6CkBAIC0zMDEsNCArNDc3LDMgQEAKIGFyZSBub3QgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LiAgQWxzbywgOmNsYXNzOmBwYXJ0aWFsYCBvYmplY3RzIGRlZmluZWQgaW4KIGNsYXNzZXMgYmVoYXZlIGxpa2Ugc3RhdGljIG1ldGhvZHMgYW5kIGRvIG5vdCB0cmFuc2Zvcm0gaW50byBib3VuZCBtZXRob2RzCiBkdXJpbmcgaW5zdGFuY2UgYXR0cmlidXRlIGxvb2stdXAuCi0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2djLnJzdCBiL0RvYy9saWJyYXJ5L2djLnJzdAppbmRleCA3MTQ0OWEzLi44MTM1NTQyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2MucnN0CkBAIC02Nyw2ICs2NywyNSBAQAogICAgcmV0dXJuZWQuCiAKIAorLi4gZnVuY3Rpb246OiBnZXRfc3RhdHMoKQorCisgICBSZXR1cm4gYSBsaXN0IG9mIHRocmVlIHBlci1nZW5lcmF0aW9uIGRpY3Rpb25hcmllcyBjb250YWluaW5nIGNvbGxlY3Rpb24KKyAgIHN0YXRpc3RpY3Mgc2luY2UgaW50ZXJwcmV0ZXIgc3RhcnQuICBUaGUgbnVtYmVyIG9mIGtleXMgbWF5IGNoYW5nZQorICAgaW4gdGhlIGZ1dHVyZSwgYnV0IGN1cnJlbnRseSBlYWNoIGRpY3Rpb25hcnkgd2lsbCBjb250YWluIHRoZSBmb2xsb3dpbmcKKyAgIGl0ZW1zOgorCisgICAqIGBgY29sbGVjdGlvbnNgYCBpcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoaXMgZ2VuZXJhdGlvbiB3YXMgY29sbGVjdGVkOworCisgICAqIGBgY29sbGVjdGVkYGAgaXMgdGhlIHRvdGFsIG51bWJlciBvZiBvYmplY3RzIGNvbGxlY3RlZCBpbnNpZGUgdGhpcworICAgICBnZW5lcmF0aW9uOworCisgICAqIGBgdW5jb2xsZWN0YWJsZWBgIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Ygb2JqZWN0cyB3aGljaCB3ZXJlIGZvdW5kCisgICAgIHRvIGJlIHVuY29sbGVjdGFibGUgKGFuZCB3ZXJlIHRoZXJlZm9yZSBtb3ZlZCB0byB0aGUgOmRhdGE6YGdhcmJhZ2VgCisgICAgIGxpc3QpIGluc2lkZSB0aGlzIGdlbmVyYXRpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogc2V0X3RocmVzaG9sZCh0aHJlc2hvbGQwWywgdGhyZXNob2xkMVssIHRocmVzaG9sZDJdXSkKIAogICAgU2V0IHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24gdGhyZXNob2xkcyAodGhlIGNvbGxlY3Rpb24gZnJlcXVlbmN5KS4gU2V0dGluZwpAQCAtMTU4LDI0ICsxNzcsMTMgQEAKIAogLi4gZGF0YTo6IGdhcmJhZ2UKIAotICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQgbm90IGJlCi0gICBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIEJ5IGRlZmF1bHQsIHRoaXMgbGlzdCBjb250YWlucyBvbmx5IG9iamVjdHMgd2l0aAotICAgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMuIE9iamVjdHMgdGhhdCBoYXZlIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFuZCBhcmUKLSAgIHBhcnQgb2YgYSByZWZlcmVuY2UgY3ljbGUgY2F1c2UgdGhlIGVudGlyZSByZWZlcmVuY2UgY3ljbGUgdG8gYmUgdW5jb2xsZWN0YWJsZSwKLSAgIGluY2x1ZGluZyBvYmplY3RzIG5vdCBuZWNlc3NhcmlseSBpbiB0aGUgY3ljbGUgYnV0IHJlYWNoYWJsZSBvbmx5IGZyb20gaXQuCi0gICBQeXRob24gZG9lc24ndCBjb2xsZWN0IHN1Y2ggY3ljbGVzIGF1dG9tYXRpY2FsbHkgYmVjYXVzZSwgaW4gZ2VuZXJhbCwgaXQgaXNuJ3QKLSAgIHBvc3NpYmxlIGZvciBQeXRob24gdG8gZ3Vlc3MgYSBzYWZlIG9yZGVyIGluIHdoaWNoIHRvIHJ1biB0aGUgOm1ldGg6YF9fZGVsX19gCi0gICBtZXRob2RzLiAgSWYgeW91IGtub3cgYSBzYWZlIG9yZGVyLCB5b3UgY2FuIGZvcmNlIHRoZSBpc3N1ZSBieSBleGFtaW5pbmcgdGhlCi0gICAqZ2FyYmFnZSogbGlzdCwgYW5kIGV4cGxpY2l0bHkgYnJlYWtpbmcgY3ljbGVzIGR1ZSB0byB5b3VyIG9iamVjdHMgd2l0aGluIHRoZQotICAgbGlzdC4gIE5vdGUgdGhhdCB0aGVzZSBvYmplY3RzIGFyZSBrZXB0IGFsaXZlIGV2ZW4gc28gYnkgdmlydHVlIG9mIGJlaW5nIGluIHRoZQotICAgKmdhcmJhZ2UqIGxpc3QsIHNvIHRoZXkgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSAqZ2FyYmFnZSogdG9vLiAgRm9yIGV4YW1wbGUsCi0gICBhZnRlciBicmVha2luZyBjeWNsZXMsIGRvIGBgZGVsIGdjLmdhcmJhZ2VbOl1gYCB0byBlbXB0eSB0aGUgbGlzdC4gIEl0J3MKLSAgIGdlbmVyYWxseSBiZXR0ZXIgdG8gYXZvaWQgdGhlIGlzc3VlIGJ5IG5vdCBjcmVhdGluZyBjeWNsZXMgY29udGFpbmluZyBvYmplY3RzCi0gICB3aXRoIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzLCBhbmQgKmdhcmJhZ2UqIGNhbiBiZSBleGFtaW5lZCBpbiB0aGF0IGNhc2UgdG8KLSAgIHZlcmlmeSB0aGF0IG5vIHN1Y2ggY3ljbGVzIGFyZSBiZWluZyBjcmVhdGVkLgorICAgQSBsaXN0IG9mIG9iamVjdHMgd2hpY2ggdGhlIGNvbGxlY3RvciBmb3VuZCB0byBiZSB1bnJlYWNoYWJsZSBidXQgY291bGQKKyAgIG5vdCBiZSBmcmVlZCAodW5jb2xsZWN0YWJsZSBvYmplY3RzKS4gIFN0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgdGhpcworICAgbGlzdCBzaG91bGQgYmUgZW1wdHkgbW9zdCBvZiB0aGUgdGltZSwgZXhjZXB0IHdoZW4gdXNpbmcgaW5zdGFuY2VzIG9mCisgICBDIGV4dGVuc2lvbiB0eXBlcyB3aXRoIGEgbm9uLU5VTEwgYGB0cF9kZWxgYCBzbG90LgogCi0gICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlIGFkZGVkCi0gICB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCisgICBJZiA6Y29uc3Q6YERFQlVHX1NBVkVBTExgIGlzIHNldCwgdGhlbiBhbGwgdW5yZWFjaGFibGUgb2JqZWN0cyB3aWxsIGJlCisgICBhZGRlZCB0byB0aGlzIGxpc3QgcmF0aGVyIHRoYW4gZnJlZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBJZiB0aGlzIGxpc3QgaXMgbm9uLWVtcHR5IGF0IGludGVycHJldGVyIHNodXRkb3duLCBhCkBAIC0xODMsNiArMTkxLDEwIEBACiAgICAgICA6Y29uc3Q6YERFQlVHX1VOQ09MTEVDVEFCTEVgIGlzIHNldCwgaW4gYWRkaXRpb24gYWxsIHVuY29sbGVjdGFibGUgb2JqZWN0cwogICAgICAgYXJlIHByaW50ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBGb2xsb3dpbmcgOnBlcDpgNDQyYCwgb2JqZWN0cyB3aXRoIGEgOm1ldGg6YF9fZGVsX19gIG1ldGhvZCBkb24ndCBlbmQKKyAgICAgIHVwIGluIDphdHRyOmBnYy5nYXJiYWdlYCBhbnltb3JlLgorCiAuLiBkYXRhOjogY2FsbGJhY2tzCiAKICAgIEEgbGlzdCBvZiBjYWxsYmFja3MgdGhhdCB3aWxsIGJlIGludm9rZWQgYnkgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGJlZm9yZSBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2dldHBhc3MucnN0IGIvRG9jL2xpYnJhcnkvZ2V0cGFzcy5yc3QKaW5kZXggZmZlMmIxMi4uMjExNTYzZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvZ2V0cGFzcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvZ2V0cGFzcy5yc3QKQEAgLTEzLDEwICsxMywxMSBAQAogLi4gZnVuY3Rpb246OiBnZXRwYXNzKHByb21wdD0nUGFzc3dvcmQ6ICcsIHN0cmVhbT1Ob25lKQogCiAgICBQcm9tcHQgdGhlIHVzZXIgZm9yIGEgcGFzc3dvcmQgd2l0aG91dCBlY2hvaW5nLiAgVGhlIHVzZXIgaXMgcHJvbXB0ZWQgdXNpbmcKLSAgIHRoZSBzdHJpbmcgKnByb21wdCosIHdoaWNoIGRlZmF1bHRzIHRvIGBgJ1Bhc3N3b3JkOiAnYGAuICBPbiBVbml4LCB0aGUgcHJvbXB0Ci0gICBpcyB3cml0dGVuIHRvIHRoZSBmaWxlLWxpa2Ugb2JqZWN0ICpzdHJlYW0qLiAgKnN0cmVhbSogZGVmYXVsdHMgdG8gdGhlCi0gICBjb250cm9sbGluZyB0ZXJtaW5hbCAoOmZpbGU6YC9kZXYvdHR5YCkgb3IgaWYgdGhhdCBpcyB1bmF2YWlsYWJsZSB0bwotICAgYGBzeXMuc3RkZXJyYGAgKHRoaXMgYXJndW1lbnQgaXMgaWdub3JlZCBvbiBXaW5kb3dzKS4KKyAgIHRoZSBzdHJpbmcgKnByb21wdCosIHdoaWNoIGRlZmF1bHRzIHRvIGBgJ1Bhc3N3b3JkOiAnYGAuICBPbiBVbml4LCB0aGUKKyAgIHByb21wdCBpcyB3cml0dGVuIHRvIHRoZSBmaWxlLWxpa2Ugb2JqZWN0ICpzdHJlYW0qIHVzaW5nIHRoZSByZXBsYWNlIGVycm9yCisgICBoYW5kbGVyIGlmIG5lZWRlZC4gICpzdHJlYW0qIGRlZmF1bHRzIHRvIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbAorICAgKDpmaWxlOmAvZGV2L3R0eWApIG9yIGlmIHRoYXQgaXMgdW5hdmFpbGFibGUgdG8gYGBzeXMuc3RkZXJyYGAgKHRoaXMKKyAgIGFyZ3VtZW50IGlzIGlnbm9yZWQgb24gV2luZG93cykuCiAKICAgIElmIGVjaG8gZnJlZSBpbnB1dCBpcyB1bmF2YWlsYWJsZSBnZXRwYXNzKCkgZmFsbHMgYmFjayB0byBwcmludGluZwogICAgYSB3YXJuaW5nIG1lc3NhZ2UgdG8gKnN0cmVhbSogYW5kIHJlYWRpbmcgZnJvbSBgYHN5cy5zdGRpbmBgIGFuZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2V0dGV4dC5yc3QgYi9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdAppbmRleCA5ODI3ODBmLi5mZjIzYjU5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9nZXR0ZXh0LnJzdApAQCAtNDYwLDcgKzQ2MCw3IEBACiBpbnRlcm5hdGlvbmFsaXphdGlvbiBsaWJyYXJ5IHRoYXQgaW5jbHVkZXMgYSA6ZmlsZTpgcHliYWJlbGAgc2NyaXB0IHRvCiBleHRyYWN0IGFuZCBjb21waWxlIG1lc3NhZ2UgY2F0YWxvZ3MuICBGcmFuw6dvaXMgUGluYXJkJ3MgcHJvZ3JhbQogY2FsbGVkIDpwcm9ncmFtOmB4cG90YCBkb2VzIGEgc2ltaWxhciBqb2IgYW5kIGlzIGF2YWlsYWJsZSBhcyBwYXJ0IG9mCi1oaXMgYHBvLXV0aWxzIHBhY2thZ2UgPGh0dHA6Ly9wby11dGlscy5wcm9naWNpZWxzLWJwaS5jYS8+YF9fLgoraGlzIGBwby11dGlscyBwYWNrYWdlIDxodHRwczovL2dpdGh1Yi5jb20vcGluYXJkL3BvLXV0aWxzPmBfXy4KIAogKFB5dGhvbiBhbHNvIGluY2x1ZGVzIHB1cmUtUHl0aG9uIHZlcnNpb25zIG9mIHRoZXNlIHByb2dyYW1zLCBjYWxsZWQKIDpwcm9ncmFtOmBweWdldHRleHQucHlgIGFuZCA6cHJvZ3JhbTpgbXNnZm10LnB5YDsgc29tZSBQeXRob24gZGlzdHJpYnV0aW9ucwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvZ2xvYi5yc3QgYi9Eb2MvbGlicmFyeS9nbG9iLnJzdAppbmRleCBlZmYxMzhiLi44ZTlhZjM3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9nbG9iLnJzdAorKysgYi9Eb2MvbGlicmFyeS9nbG9iLnJzdApAQCAtMTIsMTkgKzEyLDIzIEBACiAtLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgZ2xvYmAgbW9kdWxlIGZpbmRzIGFsbCB0aGUgcGF0aG5hbWVzIG1hdGNoaW5nIGEgc3BlY2lmaWVkIHBhdHRlcm4KLWFjY29yZGluZyB0byB0aGUgcnVsZXMgdXNlZCBieSB0aGUgVW5peCBzaGVsbC4gIE5vIHRpbGRlIGV4cGFuc2lvbiBpcyBkb25lLCBidXQKLWBgKmBgLCBgYD9gYCwgYW5kIGNoYXJhY3RlciByYW5nZXMgZXhwcmVzc2VkIHdpdGggYGBbXWBgIHdpbGwgYmUgY29ycmVjdGx5Ci1tYXRjaGVkLiAgVGhpcyBpcyBkb25lIGJ5IHVzaW5nIHRoZSA6ZnVuYzpgb3MubGlzdGRpcmAgYW5kCi06ZnVuYzpgZm5tYXRjaC5mbm1hdGNoYCBmdW5jdGlvbnMgaW4gY29uY2VydCwgYW5kIG5vdCBieSBhY3R1YWxseSBpbnZva2luZyBhCi1zdWJzaGVsbC4gIE5vdGUgdGhhdCB1bmxpa2UgOmZ1bmM6YGZubWF0Y2guZm5tYXRjaGAsIDptb2Q6YGdsb2JgIHRyZWF0cwotZmlsZW5hbWVzIGJlZ2lubmluZyB3aXRoIGEgZG90IChgYC5gYCkgYXMgc3BlY2lhbCBjYXNlcy4gIChGb3IgdGlsZGUgYW5kIHNoZWxsCi12YXJpYWJsZSBleHBhbnNpb24sIHVzZSA6ZnVuYzpgb3MucGF0aC5leHBhbmR1c2VyYCBhbmQKK2FjY29yZGluZyB0byB0aGUgcnVsZXMgdXNlZCBieSB0aGUgVW5peCBzaGVsbCwgYWx0aG91Z2ggcmVzdWx0cyBhcmUgcmV0dXJuZWQgaW4KK2FyYml0cmFyeSBvcmRlci4gIE5vIHRpbGRlIGV4cGFuc2lvbiBpcyBkb25lLCBidXQgYGAqYGAsIGBgP2BgLCBhbmQgY2hhcmFjdGVyCityYW5nZXMgZXhwcmVzc2VkIHdpdGggYGBbXWBgIHdpbGwgYmUgY29ycmVjdGx5IG1hdGNoZWQuICBUaGlzIGlzIGRvbmUgYnkgdXNpbmcKK3RoZSA6ZnVuYzpgb3MubGlzdGRpcmAgYW5kIDpmdW5jOmBmbm1hdGNoLmZubWF0Y2hgIGZ1bmN0aW9ucyBpbiBjb25jZXJ0LCBhbmQKK25vdCBieSBhY3R1YWxseSBpbnZva2luZyBhIHN1YnNoZWxsLiAgTm90ZSB0aGF0IHVubGlrZSA6ZnVuYzpgZm5tYXRjaC5mbm1hdGNoYCwKKzptb2Q6YGdsb2JgIHRyZWF0cyBmaWxlbmFtZXMgYmVnaW5uaW5nIHdpdGggYSBkb3QgKGBgLmBgKSBhcyBzcGVjaWFsIGNhc2VzLgorKEZvciB0aWxkZSBhbmQgc2hlbGwgdmFyaWFibGUgZXhwYW5zaW9uLCB1c2UgOmZ1bmM6YG9zLnBhdGguZXhwYW5kdXNlcmAgYW5kCiA6ZnVuYzpgb3MucGF0aC5leHBhbmR2YXJzYC4pCiAKIEZvciBhIGxpdGVyYWwgbWF0Y2gsIHdyYXAgdGhlIG1ldGEtY2hhcmFjdGVycyBpbiBicmFja2V0cy4KIEZvciBleGFtcGxlLCBgYCdbP10nYGAgbWF0Y2hlcyB0aGUgY2hhcmFjdGVyIGBgJz8nYGAuCiAKIAorLi4gc2VlYWxzbzo6CisgICBUaGUgOm1vZDpgcGF0aGxpYmAgbW9kdWxlIG9mZmVycyBoaWdoLWxldmVsIHBhdGggb2JqZWN0cy4KKworCiAuLiBmdW5jdGlvbjo6IGdsb2IocGF0aG5hbWUpCiAKICAgIFJldHVybiBhIHBvc3NpYmx5LWVtcHR5IGxpc3Qgb2YgcGF0aCBuYW1lcyB0aGF0IG1hdGNoICpwYXRobmFtZSosIHdoaWNoIG11c3QgYmUKQEAgLTQwLDYgKzQ0LDE3IEBACiAgICB3aXRob3V0IGFjdHVhbGx5IHN0b3JpbmcgdGhlbSBhbGwgc2ltdWx0YW5lb3VzbHkuCiAKIAorLi4gZnVuY3Rpb246OiBlc2NhcGUocGF0aG5hbWUpCisKKyAgIEVzY2FwZSBhbGwgc3BlY2lhbCBjaGFyYWN0ZXJzIChgYCc/J2BgLCBgYCcqJ2BgIGFuZCBgYCdbJ2BgKS4KKyAgIFRoaXMgaXMgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1hdGNoIGFuIGFyYml0cmFyeSBsaXRlcmFsIHN0cmluZyB0aGF0IG1heQorICAgaGF2ZSBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gaXQuICBTcGVjaWFsIGNoYXJhY3RlcnMgaW4gZHJpdmUvVU5DCisgICBzaGFyZXBvaW50cyBhcmUgbm90IGVzY2FwZWQsIGUuZy4gb24gV2luZG93cworICAgYGBlc2NhcGUoJy8vPy9jOi9RdW8gdmFkaXM/LnR4dCcpYGAgcmV0dXJucyBgYCcvLz8vYzovUXVvIHZhZGlzWz9dLnR4dCdgYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgZGlyZWN0b3J5IGNvbnRhaW5pbmcgb25seSB0aGUgZm9sbG93aW5nIGZpbGVzOgogOmZpbGU6YDEuZ2lmYCwgOmZpbGU6YDIudHh0YCwgYW5kIDpmaWxlOmBjYXJkLmdpZmAuICA6ZnVuYzpgZ2xvYmAgd2lsbCBwcm9kdWNlCiB0aGUgZm9sbG93aW5nIHJlc3VsdHMuICBOb3RpY2UgaG93IGFueSBsZWFkaW5nIGNvbXBvbmVudHMgb2YgdGhlIHBhdGggYXJlCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9nemlwLnJzdCBiL0RvYy9saWJyYXJ5L2d6aXAucnN0CmluZGV4IDM1NGRlZWQuLjM1NWNmOWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2d6aXAucnN0CisrKyBiL0RvYy9saWJyYXJ5L2d6aXAucnN0CkBAIC0zNSw4ICszNSw4IEBACiAgICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QpLCBvciBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAnYSdgYCwgYGAnYWInYGAsCi0gICBgYCd3J2BgLCBvciBgYCd3YidgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgJ3J0J2BgLCBgYCdhdCdgYCwgb3IgYGAnd3QnYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAndydgYCwgYGAnd2InYGAsIGBgJ3gnYGAgb3IgYGAneGInYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCdydCdgYCwKKyAgIGBgJ2F0J2BgLCBgYCd3dCdgYCwgb3IgYGAneHQnYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAncmInYGAuCiAKICAgIFRoZSAqY29tcHJlc3NsZXZlbCogYXJndW1lbnQgaXMgYW4gaW50ZWdlciBmcm9tIDAgdG8gOSwgYXMgZm9yIHRoZQogICAgOmNsYXNzOmBHemlwRmlsZWAgY29uc3RydWN0b3IuCkBAIC01Myw2ICs1Myw5IEBACiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciAqZmlsZW5hbWUqIGJlaW5nIGEgZmlsZSBvYmplY3QsIHN1cHBvcnQgZm9yIHRleHQgbW9kZSwKICAgICAgIGFuZCB0aGUgKmVuY29kaW5nKiwgKmVycm9ycyogYW5kICpuZXdsaW5lKiBhcmd1bWVudHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAneCdgYCwgYGAneGInYGAgYW5kIGBgJ3h0J2BgIG1vZGVzLgorCiAKIC4uIGNsYXNzOjogR3ppcEZpbGUoZmlsZW5hbWU9Tm9uZSwgbW9kZT1Ob25lLCBjb21wcmVzc2xldmVsPTksIGZpbGVvYmo9Tm9uZSwgbXRpbWU9Tm9uZSkKIApAQCAtNjEsNyArNjQsNyBAQAogICAgbWV0aG9kLiAgQXQgbGVhc3Qgb25lIG9mICpmaWxlb2JqKiBhbmQgKmZpbGVuYW1lKiBtdXN0IGJlIGdpdmVuIGEgbm9uLXRyaXZpYWwKICAgIHZhbHVlLgogCi0gICBUaGUgbmV3IGNsYXNzIGluc3RhbmNlIGlzIGJhc2VkIG9uICpmaWxlb2JqKiwgd2hpY2ggY2FuIGJlIGEgcmVndWxhciBmaWxlLCBhCisgICBUaGUgbmV3IGNsYXNzIGluc3RhbmNlIGlzIGJhc2VkIG9uICpmaWxlb2JqKiwgd2hpY2ggY2FuIGJlIGEgcmVndWxhciBmaWxlLCBhbgogICAgOmNsYXNzOmBpby5CeXRlc0lPYCBvYmplY3QsIG9yIGFueSBvdGhlciBvYmplY3Qgd2hpY2ggc2ltdWxhdGVzIGEgZmlsZS4gIEl0CiAgICBkZWZhdWx0cyB0byBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZSAqZmlsZW5hbWUqIGlzIG9wZW5lZCB0byBwcm92aWRlIGEgZmlsZQogICAgb2JqZWN0LgpAQCAtNzMsOCArNzYsOSBAQAogICAgb3JpZ2luYWwgZmlsZW5hbWUgaXMgbm90IGluY2x1ZGVkIGluIHRoZSBoZWFkZXIuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGFueSBvZiBgYCdyJ2BgLCBgYCdyYidgYCwgYGAnYSdgYCwgYGAnYWInYGAsIGBgJ3cnYGAsCi0gICBvciBgYCd3YidgYCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAotICAgaXMgdGhlIG1vZGUgb2YgKmZpbGVvYmoqIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIHRoZSBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgorICAgYGAnd2InYGAsIGBgJ3gnYGAsIG9yIGBgJ3hiJ2BgLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3IKKyAgIHdyaXR0ZW4uICBUaGUgZGVmYXVsdCBpcyB0aGUgbW9kZSBvZiAqZmlsZW9iaiogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlCisgICBkZWZhdWx0IGlzIGBgJ3JiJ2BgLgogCiAgICBOb3RlIHRoYXQgdGhlIGZpbGUgaXMgYWx3YXlzIG9wZW5lZCBpbiBiaW5hcnkgbW9kZS4gVG8gb3BlbiBhIGNvbXByZXNzZWQgZmlsZQogICAgaW4gdGV4dCBtb2RlLCB1c2UgOmZ1bmM6YC5vcGVuYCAob3Igd3JhcCB5b3VyIDpjbGFzczpgR3ppcEZpbGVgIHdpdGggYW4KQEAgLTk2LDcgKzEwMCw3IEBACiAKICAgIENhbGxpbmcgYSA6Y2xhc3M6YEd6aXBGaWxlYCBvYmplY3QncyA6bWV0aDpgY2xvc2VgIG1ldGhvZCBkb2VzIG5vdCBjbG9zZQogICAgKmZpbGVvYmoqLCBzaW5jZSB5b3UgbWlnaHQgd2lzaCB0byBhcHBlbmQgbW9yZSBtYXRlcmlhbCBhZnRlciB0aGUgY29tcHJlc3NlZAotICAgZGF0YS4gIFRoaXMgYWxzbyBhbGxvd3MgeW91IHRvIHBhc3MgYSA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCBvcGVuZWQgZm9yCisgICBkYXRhLiAgVGhpcyBhbHNvIGFsbG93cyB5b3UgdG8gcGFzcyBhbiA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCBvcGVuZWQgZm9yCiAgICB3cml0aW5nIGFzICpmaWxlb2JqKiwgYW5kIHJldHJpZXZlIHRoZSByZXN1bHRpbmcgbWVtb3J5IGJ1ZmZlciB1c2luZyB0aGUKICAgIDpjbGFzczpgaW8uQnl0ZXNJT2Agb2JqZWN0J3MgOm1ldGg6YH5pby5CeXRlc0lPLmdldHZhbHVlYCBtZXRob2QuCiAKQEAgLTEzMCw2ICsxMzQsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFRoZSA6bWV0aDpgaW8uQnVmZmVyZWRJT0Jhc2UucmVhZDFgIG1ldGhvZCBpcyBub3cgaW1wbGVtZW50ZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAneCdgYCBhbmQgYGAneGInYGAgbW9kZXMuCisKIAogLi4gZnVuY3Rpb246OiBjb21wcmVzcyhkYXRhLCBjb21wcmVzc2xldmVsPTkpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2hhc2hsaWIucnN0IGIvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKaW5kZXggYTY5M2Y3ZS4uNzY5Zjk2ZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaGFzaGxpYi5yc3QKQEAgLTMyLDYgKzMyLDEyIEBACiAgICBTb21lIGFsZ29yaXRobXMgaGF2ZSBrbm93biBoYXNoIGNvbGxpc2lvbiB3ZWFrbmVzc2VzLCByZWZlciB0byB0aGUgIlNlZQogICAgYWxzbyIgc2VjdGlvbiBhdCB0aGUgZW5kLgogCisKKy4uIF9oYXNoLWFsZ29yaXRobXM6CisKK0hhc2ggYWxnb3JpdGhtcworLS0tLS0tLS0tLS0tLS0tCisKIFRoZXJlIGlzIG9uZSBjb25zdHJ1Y3RvciBtZXRob2QgbmFtZWQgZm9yIGVhY2ggdHlwZSBvZiA6ZGZuOmBoYXNoYC4gIEFsbCByZXR1cm4KIGEgaGFzaCBvYmplY3Qgd2l0aCB0aGUgc2FtZSBzaW1wbGUgaW50ZXJmYWNlLiBGb3IgZXhhbXBsZTogdXNlIDpmdW5jOmBzaGExYCB0bwogY3JlYXRlIGEgU0hBMSBoYXNoIG9iamVjdC4gWW91IGNhbiBub3cgZmVlZCB0aGlzIG9iamVjdCB3aXRoIDp0ZXJtOmBieXRlcy1saWtlCkBAIC01Myw5ICs1OSw5IEBACiAuLiBpbmRleDo6IHNpbmdsZTogT3BlblNTTDsgKHVzZSBpbiBtb2R1bGUgaGFzaGxpYikKIAogQ29uc3RydWN0b3JzIGZvciBoYXNoIGFsZ29yaXRobXMgdGhhdCBhcmUgYWx3YXlzIHByZXNlbnQgaW4gdGhpcyBtb2R1bGUgYXJlCi06ZnVuYzpgbWQ1YCwgOmZ1bmM6YHNoYTFgLCA6ZnVuYzpgc2hhMjI0YCwgOmZ1bmM6YHNoYTI1NmAsIDpmdW5jOmBzaGEzODRgLCBhbmQKLTpmdW5jOmBzaGE1MTJgLiAgQWRkaXRpb25hbCBhbGdvcml0aG1zIG1heSBhbHNvIGJlIGF2YWlsYWJsZSBkZXBlbmRpbmcgdXBvbiB0aGUKLU9wZW5TU0wgbGlicmFyeSB0aGF0IFB5dGhvbiB1c2VzIG9uIHlvdXIgcGxhdGZvcm0uCis6ZnVuYzpgbWQ1YCwgOmZ1bmM6YHNoYTFgLCA6ZnVuYzpgc2hhMjI0YCwgOmZ1bmM6YHNoYTI1NmAsIDpmdW5jOmBzaGEzODRgLAorYW5kIDpmdW5jOmBzaGE1MTJgLiBBZGRpdGlvbmFsIGFsZ29yaXRobXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlIGRlcGVuZGluZyB1cG9uCit0aGUgT3BlblNTTCBsaWJyYXJ5IHRoYXQgUHl0aG9uIHVzZXMgb24geW91ciBwbGF0Zm9ybS4KIAogRm9yIGV4YW1wbGUsIHRvIG9idGFpbiB0aGUgZGlnZXN0IG9mIHRoZSBieXRlIHN0cmluZyBgYGInTm9ib2R5IGluc3BlY3RzIHRoZQogc3BhbW1pc2ggcmVwZXRpdGlvbidgYDo6CkBAIC0xMjIsNiArMTI4LDE4IEBACiAKICAgIFRoZSBpbnRlcm5hbCBibG9jayBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSBpbiBieXRlcy4KIAorQSBoYXNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOgorCisuLiBhdHRyaWJ1dGU6OiBoYXNoLm5hbWUKKworICAgVGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoaXMgaGFzaCwgYWx3YXlzIGxvd2VyY2FzZSBhbmQgYWx3YXlzIHN1aXRhYmxlIGFzIGEKKyAgIHBhcmFtZXRlciB0byA6ZnVuYzpgbmV3YCB0byBjcmVhdGUgYW5vdGhlciBoYXNoIG9mIHRoaXMgdHlwZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuYW1lIGF0dHJpYnV0ZSBoYXMgYmVlbiBwcmVzZW50IGluIENQeXRob24gc2luY2UgaXRzIGluY2VwdGlvbiwgYnV0CisgICAgICB1bnRpbCBQeXRob24gMy40IHdhcyBub3QgZm9ybWFsbHkgc3BlY2lmaWVkLCBzbyBtYXkgbm90IGV4aXN0IG9uIHNvbWUKKyAgICAgIHBsYXRmb3Jtcy4KKwogQSBoYXNoIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAKQEAgLTE1OCw2ICsxNzYsNDYgQEAKICAgIGNvbXB1dGUgdGhlIGRpZ2VzdHMgb2YgZGF0YSBzaGFyaW5nIGEgY29tbW9uIGluaXRpYWwgc3Vic3RyaW5nLgogCiAKK0tleSBkZXJpdmF0aW9uCistLS0tLS0tLS0tLS0tLQorCitLZXkgZGVyaXZhdGlvbiBhbmQga2V5IHN0cmV0Y2hpbmcgYWxnb3JpdGhtcyBhcmUgZGVzaWduZWQgZm9yIHNlY3VyZSBwYXNzd29yZAoraGFzaGluZy4gTmFpdmUgYWxnb3JpdGhtcyBzdWNoIGFzIGBgc2hhMShwYXNzd29yZClgYCBhcmUgbm90IHJlc2lzdGFudCBhZ2FpbnN0CiticnV0ZS1mb3JjZSBhdHRhY2tzLiBBIGdvb2QgcGFzc3dvcmQgaGFzaGluZyBmdW5jdGlvbiBtdXN0IGJlIHR1bmFibGUsIHNsb3csIGFuZAoraW5jbHVkZSBhIGBzYWx0IDxodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TYWx0XyUyOGNyeXB0b2dyYXBoeSUyOT5gXy4KKworCisuLiBmdW5jdGlvbjo6IHBia2RmMl9obWFjKG5hbWUsIHBhc3N3b3JkLCBzYWx0LCByb3VuZHMsIGRrbGVuPU5vbmUpCisKKyAgIFRoZSBmdW5jdGlvbiBwcm92aWRlcyBQS0NTIzUgcGFzc3dvcmQtYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gMi4gSXQKKyAgIHVzZXMgSE1BQyBhcyBwc2V1ZG9yYW5kb20gZnVuY3Rpb24uCisKKyAgIFRoZSBzdHJpbmcgKm5hbWUqIGlzIHRoZSBkZXNpcmVkIG5hbWUgb2YgdGhlIGhhc2ggZGlnZXN0IGFsZ29yaXRobSBmb3IKKyAgIEhNQUMsIGUuZy4gJ3NoYTEnIG9yICdzaGEyNTYnLiAqcGFzc3dvcmQqIGFuZCAqc2FsdCogYXJlIGludGVycHJldGVkIGFzCisgICBidWZmZXJzIG9mIGJ5dGVzLiBBcHBsaWNhdGlvbnMgYW5kIGxpYnJhcmllcyBzaG91bGQgbGltaXQgKnBhc3N3b3JkKiB0bworICAgYSBzZW5zaWJsZSB2YWx1ZSAoZS5nLiAxMDI0KS4gKnNhbHQqIHNob3VsZCBiZSBhYm91dCAxNiBvciBtb3JlIGJ5dGVzIGZyb20KKyAgIGEgcHJvcGVyIHNvdXJjZSwgZS5nLiA6ZnVuYzpgb3MudXJhbmRvbWAuCisKKyAgIFRoZSBudW1iZXIgb2YgKnJvdW5kcyogc2hvdWxkIGJlIGNob3NlbiBiYXNlZCBvbiB0aGUgaGFzaCBhbGdvcml0aG0gYW5kCisgICBjb21wdXRpbmcgcG93ZXIuIEFzIG9mIDIwMTMsIGF0IGxlYXN0IDEwMCwwMDAgcm91bmRzIG9mIFNIQS0yNTYgaXMgc3VnZ2VzdGVkLgorCisgICAqZGtsZW4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIGRlcml2ZWQga2V5LiBJZiAqZGtsZW4qIGlzIGBgTm9uZWBgIHRoZW4gdGhlCisgICBkaWdlc3Qgc2l6ZSBvZiB0aGUgaGFzaCBhbGdvcml0aG0gKm5hbWUqIGlzIHVzZWQsIGUuZy4gNjQgZm9yIFNIQS01MTIuCisKKyAgID4+PiBpbXBvcnQgaGFzaGxpYiwgYmluYXNjaWkKKyAgID4+PiBkayA9IGhhc2hsaWIucGJrZGYyX2htYWMoJ3NoYTI1NicsIGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAxMDAwMDApCisgICA+Pj4gYmluYXNjaWkuaGV4bGlmeShkaykKKyAgIGInMDM5NGEyZWRlMzMyYzlhMTNlYjgyZTliMjQ2MzE2MDRjMzFkZjk3OGI0ZTJmMGZiZDJjNTQ5OTQ0ZjlkNzlhNScKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKyAgIC4uIG5vdGU6OgorCisgICAgICBBIGZhc3QgaW1wbGVtZW50YXRpb24gb2YgKnBia2RmMl9obWFjKiBpcyBhdmFpbGFibGUgd2l0aCBPcGVuU1NMLiAgVGhlCisgICAgICBQeXRob24gaW1wbGVtZW50YXRpb24gdXNlcyBhbiBpbmxpbmUgdmVyc2lvbiBvZiA6bW9kOmBobWFjYC4gSXQgaXMgYWJvdXQKKyAgICAgIHRocmVlIHRpbWVzIHNsb3dlciBhbmQgZG9lc24ndCByZWxlYXNlIHRoZSBHSUwuCisKKwogLi4gc2VlYWxzbzo6CiAKICAgIE1vZHVsZSA6bW9kOmBobWFjYApAQCAtMTY5LDcgKzIyNyw5IEBACiAgICBodHRwOi8vY3NyYy5uaXN0Lmdvdi9wdWJsaWNhdGlvbnMvZmlwcy9maXBzMTgwLTIvZmlwczE4MC0yLnBkZgogICAgICAgVGhlIEZJUFMgMTgwLTIgcHVibGljYXRpb24gb24gU2VjdXJlIEhhc2ggQWxnb3JpdGhtcy4KIAotICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9DcnlwdG9ncmFwaGljX2hhc2hfZnVuY3Rpb24jQ3J5cHRvZ3JhcGhpY19oYXNoX2FsZ29yaXRobXMKKyAgIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NyeXB0b2dyYXBoaWNfaGFzaF9mdW5jdGlvbiNDcnlwdG9ncmFwaGljX2hhc2hfYWxnb3JpdGhtcwogICAgICAgV2lraXBlZGlhIGFydGljbGUgd2l0aCBpbmZvcm1hdGlvbiBvbiB3aGljaCBhbGdvcml0aG1zIGhhdmUga25vd24gaXNzdWVzIGFuZAogICAgICAgd2hhdCB0aGF0IG1lYW5zIHJlZ2FyZGluZyB0aGVpciB1c2UuCiAKKyAgIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI4OTgudHh0CisgICAgICBQS0NTICM1OiBQYXNzd29yZC1CYXNlZCBDcnlwdG9ncmFwaHkgU3BlY2lmaWNhdGlvbiBWZXJzaW9uIDIuMApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaGVhcHEucnN0IGIvRG9jL2xpYnJhcnkvaGVhcHEucnN0CmluZGV4IDRmMWE2ODIuLmY4OTcwYmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2hlYXBxLnJzdAorKysgYi9Eb2MvbGlicmFyeS9oZWFwcS5yc3QKQEAgLTQ3LDcgKzQ3LDggQEAKIC4uIGZ1bmN0aW9uOjogaGVhcHBvcChoZWFwKQogCiAgICBQb3AgYW5kIHJldHVybiB0aGUgc21hbGxlc3QgaXRlbSBmcm9tIHRoZSAqaGVhcCosIG1haW50YWluaW5nIHRoZSBoZWFwCi0gICBpbnZhcmlhbnQuICBJZiB0aGUgaGVhcCBpcyBlbXB0eSwgOmV4YzpgSW5kZXhFcnJvcmAgaXMgcmFpc2VkLgorICAgaW52YXJpYW50LiAgSWYgdGhlIGhlYXAgaXMgZW1wdHksIDpleGM6YEluZGV4RXJyb3JgIGlzIHJhaXNlZC4gIFRvIGFjY2VzcyB0aGUKKyAgIHNtYWxsZXN0IGl0ZW0gd2l0aG91dCBwb3BwaW5nIGl0LCB1c2UgYGBoZWFwWzBdYGAuCiAKIAogLi4gZnVuY3Rpb246OiBoZWFwcHVzaHBvcChoZWFwLCBpdGVtKQpAQCAtMTEyLDcgKzExMyw4IEBACiBUaGUgbGF0dGVyIHR3byBmdW5jdGlvbnMgcGVyZm9ybSBiZXN0IGZvciBzbWFsbGVyIHZhbHVlcyBvZiAqbiouICBGb3IgbGFyZ2VyCiB2YWx1ZXMsIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIHVzZSB0aGUgOmZ1bmM6YHNvcnRlZGAgZnVuY3Rpb24uICBBbHNvLCB3aGVuCiBgYG49PTFgYCwgaXQgaXMgbW9yZSBlZmZpY2llbnQgdG8gdXNlIHRoZSBidWlsdC1pbiA6ZnVuYzpgbWluYCBhbmQgOmZ1bmM6YG1heGAKLWZ1bmN0aW9ucy4KK2Z1bmN0aW9ucy4gIElmIHJlcGVhdGVkIHVzYWdlIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyByZXF1aXJlZCwgY29uc2lkZXIgdHVybmluZwordGhlIGl0ZXJhYmxlIGludG8gYW4gYWN0dWFsIGhlYXAuCiAKIAogQmFzaWMgRXhhbXBsZXMKQEAgLTEyMyw3ICsxMjUsNiBAQAogdGltZTo6CiAKICAgID4+PiBkZWYgaGVhcHNvcnQoaXRlcmFibGUpOgotICAgLi4uICAgICAnRXF1aXZhbGVudCB0byBzb3J0ZWQoaXRlcmFibGUpJwogICAgLi4uICAgICBoID0gW10KICAgIC4uLiAgICAgZm9yIHZhbHVlIGluIGl0ZXJhYmxlOgogICAgLi4uICAgICAgICAgaGVhcHB1c2goaCwgdmFsdWUpCkBAIC0xMzIsNiArMTMzLDkgQEAKICAgID4+PiBoZWFwc29ydChbMSwgMywgNSwgNywgOSwgMiwgNCwgNiwgOCwgMF0pCiAgICBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOV0KIAorVGhpcyBpcyBzaW1pbGFyIHRvIGBgc29ydGVkKGl0ZXJhYmxlKWBgLCBidXQgdW5saWtlIDpmdW5jOmBzb3J0ZWRgLCB0aGlzCitpbXBsZW1lbnRhdGlvbiBpcyBub3Qgc3RhYmxlLgorCiBIZWFwIGVsZW1lbnRzIGNhbiBiZSB0dXBsZXMuICBUaGlzIGlzIHVzZWZ1bCBmb3IgYXNzaWduaW5nIGNvbXBhcmlzb24gdmFsdWVzCiAoc3VjaCBhcyB0YXNrIHByaW9yaXRpZXMpIGFsb25nc2lkZSB0aGUgbWFpbiByZWNvcmQgYmVpbmcgdHJhY2tlZDo6CiAKQEAgLTI1OCwxMSArMjYyLDExIEBACiB0aGUgd29yc3QgY2FzZXMgbWlnaHQgYmUgdGVycmlibGUuCiAKIEhlYXBzIGFyZSBhbHNvIHZlcnkgdXNlZnVsIGluIGJpZyBkaXNrIHNvcnRzLiAgWW91IG1vc3QgcHJvYmFibHkgYWxsIGtub3cgdGhhdCBhCi1iaWcgc29ydCBpbXBsaWVzIHByb2R1Y2luZyAicnVucyIgKHdoaWNoIGFyZSBwcmUtc29ydGVkIHNlcXVlbmNlcywgd2hpY2ggc2l6ZSBpcworYmlnIHNvcnQgaW1wbGllcyBwcm9kdWNpbmcgInJ1bnMiICh3aGljaCBhcmUgcHJlLXNvcnRlZCBzZXF1ZW5jZXMsIHdob3NlIHNpemUgaXMKIHVzdWFsbHkgcmVsYXRlZCB0byB0aGUgYW1vdW50IG9mIENQVSBtZW1vcnkpLCBmb2xsb3dlZCBieSBhIG1lcmdpbmcgcGFzc2VzIGZvcgogdGhlc2UgcnVucywgd2hpY2ggbWVyZ2luZyBpcyBvZnRlbiB2ZXJ5IGNsZXZlcmx5IG9yZ2FuaXNlZCBbI11fLiBJdCBpcyB2ZXJ5CiBpbXBvcnRhbnQgdGhhdCB0aGUgaW5pdGlhbCBzb3J0IHByb2R1Y2VzIHRoZSBsb25nZXN0IHJ1bnMgcG9zc2libGUuICBUb3VybmFtZW50cwotYXJlIGEgZ29vZCB3YXkgdG8gdGhhdC4gIElmLCB1c2luZyBhbGwgdGhlIG1lbW9yeSBhdmFpbGFibGUgdG8gaG9sZCBhCithcmUgYSBnb29kIHdheSB0byBhY2hpZXZlIHRoYXQuICBJZiwgdXNpbmcgYWxsIHRoZSBtZW1vcnkgYXZhaWxhYmxlIHRvIGhvbGQgYQogdG91cm5hbWVudCwgeW91IHJlcGxhY2UgYW5kIHBlcmNvbGF0ZSBpdGVtcyB0aGF0IGhhcHBlbiB0byBmaXQgdGhlIGN1cnJlbnQgcnVuLAogeW91J2xsIHByb2R1Y2UgcnVucyB3aGljaCBhcmUgdHdpY2UgdGhlIHNpemUgb2YgdGhlIG1lbW9yeSBmb3IgcmFuZG9tIGlucHV0LCBhbmQKIG11Y2ggYmV0dGVyIGZvciBpbnB1dCBmdXp6aWx5IG9yZGVyZWQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9obWFjLnJzdCBiL0RvYy9saWJyYXJ5L2htYWMucnN0CmluZGV4IDk1NzU2OTMuLjE0NDZkYTYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2htYWMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2htYWMucnN0CkBAIC0zLDcgKzMsNiBAQAogCiAuLiBtb2R1bGU6OiBobWFjCiAgICA6c3lub3BzaXM6IEtleWVkLUhhc2hpbmcgZm9yIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gKEhNQUMpIGltcGxlbWVudGF0aW9uCi0gICAgICAgICAgICAgIGZvciBQeXRob24uCiAuLiBtb2R1bGVhdXRob3I6OiBHZXJoYXJkIEjDpHJpbmcgPGdoYWVyaW5nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIC4uIHNlY3Rpb25hdXRob3I6OiBHZXJoYXJkIEjDpHJpbmcgPGdoYWVyaW5nQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIApAQCAtMTYsMjAgKzE1LDMyIEBACiAKIC4uIGZ1bmN0aW9uOjogbmV3KGtleSwgbXNnPU5vbmUsIGRpZ2VzdG1vZD1Ob25lKQogCi0gICBSZXR1cm4gYSBuZXcgaG1hYyBvYmplY3QuICAqa2V5KiBpcyBhIGJ5dGVzIG9iamVjdCBnaXZpbmcgdGhlIHNlY3JldCBrZXkuICBJZgotICAgKm1zZyogaXMgcHJlc2VudCwgdGhlIG1ldGhvZCBjYWxsIGBgdXBkYXRlKG1zZylgYCBpcyBtYWRlLiAgKmRpZ2VzdG1vZCogaXMKLSAgIHRoZSBkaWdlc3QgY29uc3RydWN0b3Igb3IgbW9kdWxlIGZvciB0aGUgSE1BQyBvYmplY3QgdG8gdXNlLiBJdCBkZWZhdWx0cyB0bwotICAgdGhlIDpkYXRhOmBoYXNobGliLm1kNWAgY29uc3RydWN0b3IuCisgICBSZXR1cm4gYSBuZXcgaG1hYyBvYmplY3QuICAqa2V5KiBpcyBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QgZ2l2aW5nIHRoZQorICAgc2VjcmV0IGtleS4gIElmICptc2cqIGlzIHByZXNlbnQsIHRoZSBtZXRob2QgY2FsbCBgYHVwZGF0ZShtc2cpYGAgaXMgbWFkZS4KKyAgICpkaWdlc3Rtb2QqIGlzIHRoZSBkaWdlc3QgbmFtZSwgZGlnZXN0IGNvbnN0cnVjdG9yIG9yIG1vZHVsZSBmb3IgdGhlIEhNQUMKKyAgIG9iamVjdCB0byB1c2UuIEl0IHN1cHBvcnRzIGFueSBuYW1lIHN1aXRhYmxlIHRvIDpmdW5jOmBoYXNobGliLm5ld2AgYW5kCisgICBkZWZhdWx0cyB0byB0aGUgOmRhdGE6YGhhc2hsaWIubWQ1YCBjb25zdHJ1Y3Rvci4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFBhcmFtZXRlciAqa2V5KiBjYW4gYmUgYSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0LgorICAgICAgUGFyYW1ldGVyICptc2cqIGNhbiBiZSBvZiBhbnkgdHlwZSBzdXBwb3J0ZWQgYnkgOm1vZDpgaGFzaGxpYmAuCisgICAgICBQYXJhbWV0ZXIgKmRpZ2VzdG1vZCogY2FuIGJlIHRoZSBuYW1lIG9mIGEgaGFzaCBhbGdvcml0aG0uCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIE1ENSBhcyBpbXBsaWNpdCBkZWZhdWx0IGRpZ2VzdCBmb3IgKmRpZ2VzdG1vZCogaXMgZGVwcmVjYXRlZC4KIAogCiBBbiBITUFDIG9iamVjdCBoYXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCiAuLiBtZXRob2Q6OiBITUFDLnVwZGF0ZShtc2cpCiAKLSAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCB0aGUgYnl0ZXMgb2JqZWN0ICptc2cqLiAgUmVwZWF0ZWQgY2FsbHMgYXJlCi0gICBlcXVpdmFsZW50IHRvIGEgc2luZ2xlIGNhbGwgd2l0aCB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIGFyZ3VtZW50czoKKyAgIFVwZGF0ZSB0aGUgaG1hYyBvYmplY3Qgd2l0aCAqbXNnKi4gIFJlcGVhdGVkIGNhbGxzIGFyZSBlcXVpdmFsZW50IHRvIGEKKyAgIHNpbmdsZSBjYWxsIHdpdGggdGhlIGNvbmNhdGVuYXRpb24gb2YgYWxsIHRoZSBhcmd1bWVudHM6CiAgICBgYG0udXBkYXRlKGEpOyBtLnVwZGF0ZShiKWBgIGlzIGVxdWl2YWxlbnQgdG8gYGBtLnVwZGF0ZShhICsgYilgYC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFBhcmFtZXRlciAqbXNnKiBjYW4gYmUgb2YgYW55IHR5cGUgc3VwcG9ydGVkIGJ5IDptb2Q6YGhhc2hsaWJgLgorCiAKIC4uIG1ldGhvZDo6IEhNQUMuZGlnZXN0KCkKIApAQCAtNjYsNiArNzcsMjUgQEAKICAgIGNvbXB1dGUgdGhlIGRpZ2VzdHMgb2Ygc3RyaW5ncyB0aGF0IHNoYXJlIGEgY29tbW9uIGluaXRpYWwgc3Vic3RyaW5nLgogCiAKK0EgaGFzaCBvYmplY3QgaGFzIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczoKKworLi4gYXR0cmlidXRlOjogSE1BQy5kaWdlc3Rfc2l6ZQorCisgICBUaGUgc2l6ZSBvZiB0aGUgcmVzdWx0aW5nIEhNQUMgZGlnZXN0IGluIGJ5dGVzLgorCisuLiBhdHRyaWJ1dGU6OiBITUFDLmJsb2NrX3NpemUKKworICAgVGhlIGludGVybmFsIGJsb2NrIHNpemUgb2YgdGhlIGhhc2ggYWxnb3JpdGhtIGluIGJ5dGVzLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gYXR0cmlidXRlOjogSE1BQy5uYW1lCisKKyAgIFRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGlzIEhNQUMsIGFsd2F5cyBsb3dlcmNhc2UsIGUuZy4gYGBobWFjLW1kNWBgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBUaGlzIG1vZHVsZSBhbHNvIHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9uOgogCiAuLiBmdW5jdGlvbjo6IGNvbXBhcmVfZGlnZXN0KGEsIGIpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLmVudGl0aWVzLnJzdCBiL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CmluZGV4IDBhYWJiYWQuLmUxMGU0NmUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwuZW50aXRpZXMucnN0CkBAIC0yMCw2ICsyMCw3IEBACiAgICBOb3RlIHRoYXQgdGhlIHRyYWlsaW5nIHNlbWljb2xvbiBpcyBpbmNsdWRlZCBpbiB0aGUgbmFtZSAoZS5nLiBgYCdndDsnYGApLAogICAgaG93ZXZlciBzb21lIG9mIHRoZSBuYW1lcyBhcmUgYWNjZXB0ZWQgYnkgdGhlIHN0YW5kYXJkIGV2ZW4gd2l0aG91dCB0aGUKICAgIHNlbWljb2xvbjogaW4gdGhpcyBjYXNlIHRoZSBuYW1lIGlzIHByZXNlbnQgd2l0aCBhbmQgd2l0aG91dCB0aGUgYGAnOydgYC4KKyAgIFNlZSBhbHNvIDpmdW5jOmBodG1sLnVuZXNjYXBlYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKQEAgLTMyLDEyICszMywxMiBAQAogCiAuLiBkYXRhOjogbmFtZTJjb2RlcG9pbnQKIAotICAgQSBkaWN0aW9uYXJ5IHRoYXQgbWFwcyBIVE1MIGVudGl0eSBuYW1lcyB0byB0aGUgVW5pY29kZSBjb2RlcG9pbnRzLgorICAgQSBkaWN0aW9uYXJ5IHRoYXQgbWFwcyBIVE1MIGVudGl0eSBuYW1lcyB0byB0aGUgVW5pY29kZSBjb2RlIHBvaW50cy4KIAogCiAuLiBkYXRhOjogY29kZXBvaW50Mm5hbWUKIAotICAgQSBkaWN0aW9uYXJ5IHRoYXQgbWFwcyBVbmljb2RlIGNvZGVwb2ludHMgdG8gSFRNTCBlbnRpdHkgbmFtZXMuCisgICBBIGRpY3Rpb25hcnkgdGhhdCBtYXBzIFVuaWNvZGUgY29kZSBwb2ludHMgdG8gSFRNTCBlbnRpdHkgbmFtZXMuCiAKIAogLi4gcnVicmljOjogRm9vdG5vdGVzCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnBhcnNlci5yc3QKaW5kZXggZTQxNTRlZi4uZmVmOWMzOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHRtbC5wYXJzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0bWwucGFyc2VyLnJzdApAQCAtMTYsMTQgKzE2LDIxIEBACiBUaGlzIG1vZHVsZSBkZWZpbmVzIGEgY2xhc3MgOmNsYXNzOmBIVE1MUGFyc2VyYCB3aGljaCBzZXJ2ZXMgYXMgdGhlIGJhc2lzIGZvcgogcGFyc2luZyB0ZXh0IGZpbGVzIGZvcm1hdHRlZCBpbiBIVE1MIChIeXBlclRleHQgTWFyay11cCBMYW5ndWFnZSkgYW5kIFhIVE1MLgogCi0uLiBjbGFzczo6IEhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlKQorLi4gY2xhc3M6OiBIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSwgKiwgY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAotICAgQ3JlYXRlIGEgcGFyc2VyIGluc3RhbmNlLiAgSWYgKnN0cmljdCogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCksIHRoZSBwYXJzZXIKLSAgIHdpbGwgYWNjZXB0IGFuZCBwYXJzZSBpbnZhbGlkIG1hcmt1cC4gIElmICpzdHJpY3QqIGlzIGBgVHJ1ZWBgIHRoZSBwYXJzZXIKLSAgIHdpbGwgcmFpc2UgYW4gOmV4Yzpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yYCBleGNlcHRpb24gaW5zdGVhZCBbI11fIHdoZW4KLSAgIGl0J3Mgbm90IGFibGUgdG8gcGFyc2UgdGhlIG1hcmt1cC4KLSAgIFRoZSB1c2Ugb2YgYGBzdHJpY3Q9VHJ1ZWBgIGlzIGRpc2NvdXJhZ2VkIGFuZCB0aGUgKnN0cmljdCogYXJndW1lbnQgaXMKLSAgIGRlcHJlY2F0ZWQuCisgICBDcmVhdGUgYSBwYXJzZXIgaW5zdGFuY2UuCisKKyAgIElmICpjb252ZXJ0X2NoYXJyZWZzKiBpcyBgYFRydWVgYCAoZGVmYXVsdDogYGBGYWxzZWBgKSwgYWxsIGNoYXJhY3RlcgorICAgcmVmZXJlbmNlcyAoZXhjZXB0IHRoZSBvbmVzIGluIGBgc2NyaXB0YGAvYGBzdHlsZWBgIGVsZW1lbnRzKSBhcmUKKyAgIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KKyAgIFRoZSB1c2Ugb2YgYGBjb252ZXJ0X2NoYXJyZWZzPVRydWVgYCBpcyBlbmNvdXJhZ2VkIGFuZCB3aWxsIGJlY29tZQorICAgdGhlIGRlZmF1bHQgaW4gUHl0aG9uIDMuNS4KKworICAgSWYgKnN0cmljdCogaXMgYGBGYWxzZWBgICh0aGUgZGVmYXVsdCksIHRoZSBwYXJzZXIgd2lsbCBhY2NlcHQgYW5kIHBhcnNlCisgICBpbnZhbGlkIG1hcmt1cC4gIElmICpzdHJpY3QqIGlzIGBgVHJ1ZWBgIHRoZSBwYXJzZXIgd2lsbCByYWlzZSBhbgorICAgOmV4Yzpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yYCBleGNlcHRpb24gaW5zdGVhZCBbI11fIHdoZW4gaXQncyBub3QKKyAgIGFibGUgdG8gcGFyc2UgdGhlIG1hcmt1cC4gIFRoZSB1c2Ugb2YgYGBzdHJpY3Q9VHJ1ZWBgIGlzIGRpc2NvdXJhZ2VkIGFuZAorICAgdGhlICpzdHJpY3QqIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQuCiAKICAgIEFuIDpjbGFzczpgLkhUTUxQYXJzZXJgIGluc3RhbmNlIGlzIGZlZCBIVE1MIGRhdGEgYW5kIGNhbGxzIGhhbmRsZXIgbWV0aG9kcwogICAgd2hlbiBzdGFydCB0YWdzLCBlbmQgdGFncywgdGV4dCwgY29tbWVudHMsIGFuZCBvdGhlciBtYXJrdXAgZWxlbWVudHMgYXJlCkBAIC0zNCwxMiArNDEsMTUgQEAKICAgIGhhbmRsZXIgZm9yIGVsZW1lbnRzIHdoaWNoIGFyZSBjbG9zZWQgaW1wbGljaXRseSBieSBjbG9zaW5nIGFuIG91dGVyIGVsZW1lbnQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCi0gICAgICAqc3RyaWN0KiBrZXl3b3JkIGFkZGVkLgorICAgICAgKnN0cmljdCogYXJndW1lbnQgYWRkZWQuCiAKICAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjUKICAgICAgIFRoZSAqc3RyaWN0KiBhcmd1bWVudCBhbmQgdGhlIHN0cmljdCBtb2RlIGhhdmUgYmVlbiBkZXByZWNhdGVkLgogICAgICAgVGhlIHBhcnNlciBpcyBub3cgYWJsZSB0byBhY2NlcHQgYW5kIHBhcnNlIGludmFsaWQgbWFya3VwIHRvby4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICpjb252ZXJ0X2NoYXJyZWZzKiBrZXl3b3JkIGFyZ3VtZW50IGFkZGVkLgorCiBBbiBleGNlcHRpb24gaXMgZGVmaW5lZCBhcyB3ZWxsOgogCiAKQEAgLTc0LDcgKzg0LDcgQEAKICAgICAgICBkZWYgaGFuZGxlX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJFbmNvdW50ZXJlZCBzb21lIGRhdGEgIDoiLCBkYXRhKQogCi0gICBwYXJzZXIgPSBNeUhUTUxQYXJzZXIoc3RyaWN0PUZhbHNlKQorICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKCkKICAgIHBhcnNlci5mZWVkKCc8aHRtbD48aGVhZD48dGl0bGU+VGVzdDwvdGl0bGU+PC9oZWFkPicKICAgICAgICAgICAgICAgICc8Ym9keT48aDE+UGFyc2UgbWUhPC9oMT48L2JvZHk+PC9odG1sPicpCiAKQEAgLTE4MSw3ICsxOTEsOCBAQAogCiAgICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcHJvY2VzcyBhIG5hbWVkIGNoYXJhY3RlciByZWZlcmVuY2Ugb2YgdGhlIGZvcm0KICAgIGBgJm5hbWU7YGAgKGUuZy4gYGAmZ3Q7YGApLCB3aGVyZSAqbmFtZSogaXMgYSBnZW5lcmFsIGVudGl0eSByZWZlcmVuY2UKLSAgIChlLmcuIGBgJ2d0J2BgKS4KKyAgIChlLmcuIGBgJ2d0J2BgKS4gIFRoaXMgbWV0aG9kIGlzIG5ldmVyIGNhbGxlZCBpZiAqY29udmVydF9jaGFycmVmcyogaXMKKyAgIGBgVHJ1ZWBgLgogCiAKIC4uIG1ldGhvZDo6IEhUTUxQYXJzZXIuaGFuZGxlX2NoYXJyZWYobmFtZSkKQEAgLTE4OSw3ICsyMDAsOCBAQAogICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHByb2Nlc3MgZGVjaW1hbCBhbmQgaGV4YWRlY2ltYWwgbnVtZXJpYyBjaGFyYWN0ZXIKICAgIHJlZmVyZW5jZXMgb2YgdGhlIGZvcm0gYGAmI05OTjtgYCBhbmQgYGAmI3hOTk47YGAuICBGb3IgZXhhbXBsZSwgdGhlIGRlY2ltYWwKICAgIGVxdWl2YWxlbnQgZm9yIGBgJmd0O2BgIGlzIGBgJiM2MjtgYCwgd2hlcmVhcyB0aGUgaGV4YWRlY2ltYWwgaXMgYGAmI3gzRTtgYDsKLSAgIGluIHRoaXMgY2FzZSB0aGUgbWV0aG9kIHdpbGwgcmVjZWl2ZSBgYCc2MidgYCBvciBgYCd4M0UnYGAuCisgICBpbiB0aGlzIGNhc2UgdGhlIG1ldGhvZCB3aWxsIHJlY2VpdmUgYGAnNjInYGAgb3IgYGAneDNFJ2BgLiAgVGhpcyBtZXRob2QKKyAgIGlzIG5ldmVyIGNhbGxlZCBpZiAqY29udmVydF9jaGFycmVmcyogaXMgYGBUcnVlYGAuCiAKIAogLi4gbWV0aG9kOjogSFRNTFBhcnNlci5oYW5kbGVfY29tbWVudChkYXRhKQpAQCAtMjAxLDcgKzIxMyw3IEBACiAKICAgIFRoZSBjb250ZW50IG9mIEludGVybmV0IEV4cGxvcmVyIGNvbmRpdGlvbmFsIGNvbW1lbnRzIChjb25kY29tcykgd2lsbCBhbHNvIGJlCiAgICBzZW50IHRvIHRoaXMgbWV0aG9kLCBzbywgZm9yIGBgPCEtLVtpZiBJRSA5XT5JRTktc3BlY2lmaWMgY29udGVudDwhW2VuZGlmXS0tPmBgLAotICAgdGhpcyBtZXRob2Qgd2lsbCByZWNlaXZlIGBgJ1tpZiBJRSA5XT5JRS1zcGVjaWZpYyBjb250ZW50PCFbZW5kaWZdJ2BgLgorICAgdGhpcyBtZXRob2Qgd2lsbCByZWNlaXZlIGBgJ1tpZiBJRSA5XT5JRTktc3BlY2lmaWMgY29udGVudDwhW2VuZGlmXSdgYC4KIAogCiAuLiBtZXRob2Q6OiBIVE1MUGFyc2VyLmhhbmRsZV9kZWNsKGRlY2wpCkBAIC0yNzIsNyArMjg0LDcgQEAKICAgICAgICBkZWYgaGFuZGxlX2RlY2woc2VsZiwgZGF0YSk6CiAgICAgICAgICAgIHByaW50KCJEZWNsICAgICA6IiwgZGF0YSkKIAotICAgcGFyc2VyID0gTXlIVE1MUGFyc2VyKHN0cmljdD1GYWxzZSkKKyAgIHBhcnNlciA9IE15SFRNTFBhcnNlcigpCiAKIFBhcnNpbmcgYSBkb2N0eXBlOjoKIApAQCAtMzI0LDcgKzMzNiw4IEBACiAgICBOdW0gZW50ICA6ID4KIAogRmVlZGluZyBpbmNvbXBsZXRlIGNodW5rcyB0byA6bWV0aDpgfkhUTUxQYXJzZXIuZmVlZGAgd29ya3MsIGJ1dAotOm1ldGg6YH5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhYCBtaWdodCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2U6OgorOm1ldGg6YH5IVE1MUGFyc2VyLmhhbmRsZV9kYXRhYCBtaWdodCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyh1bmxlc3MgKmNvbnZlcnRfY2hhcnJlZnMqIGlzIHNldCB0byBgYFRydWVgYCk6OgogCiAgICA+Pj4gZm9yIGNodW5rIGluIFsnPHNwJywgJ2FuPmJ1ZmYnLCAnZXJlZCAnLCAndGV4dDwvcycsICdwYW4+J106CiAgICAuLi4gICAgIHBhcnNlci5mZWVkKGNodW5rKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHRtbC5yc3QgYi9Eb2MvbGlicmFyeS9odG1sLnJzdAppbmRleCAxMTA3Y2E5Li5kMDcwNmJjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9odG1sLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odG1sLnJzdApAQCAtMjAsNiArMjAsMTcgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKworLi4gZnVuY3Rpb246OiB1bmVzY2FwZShzKQorCisgICBDb252ZXJ0IGFsbCBuYW1lZCBhbmQgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcyAoZS5nLiBgYCZndDtgYCwKKyAgIGBgJiM2MjtgYCwgYGAmeDNlO2BgKSBpbiB0aGUgc3RyaW5nICpzKiB0byB0aGUgY29ycmVzcG9uZGluZyB1bmljb2RlCisgICBjaGFyYWN0ZXJzLiAgVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBydWxlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MIDUgc3RhbmRhcmQKKyAgIGZvciBib3RoIHZhbGlkIGFuZCBpbnZhbGlkIGNoYXJhY3RlciByZWZlcmVuY2VzLCBhbmQgdGhlIDpkYXRhOmBsaXN0IG9mCisgICBIVE1MIDUgbmFtZWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMgPGh0bWwuZW50aXRpZXMuaHRtbDU+YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC0tLS0tLS0tLS0tLS0tCiAKIFN1Ym1vZHVsZXMgaW4gdGhlIGBgaHRtbGBgIHBhY2thZ2UgYXJlOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5jbGllbnQucnN0CmluZGV4IGJiMzBmMjQuLjgwN2Y2ODUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuY2xpZW50LnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNsaWVudC5yc3QKQEAgLTE5LDYgKzE5LDExIEBACiBIVFRQUyBwcm90b2NvbHMuICBJdCBpcyBub3JtYWxseSBub3QgdXNlZCBkaXJlY3RseSAtLS0gdGhlIG1vZHVsZQogOm1vZDpgdXJsbGliLnJlcXVlc3RgIHVzZXMgaXQgdG8gaGFuZGxlIFVSTHMgdGhhdCB1c2UgSFRUUCBhbmQgSFRUUFMuCiAKKy4uIHNlZWFsc286OgorCisgICAgVGhlIGBSZXF1ZXN0cyBwYWNrYWdlIDxodHRwOi8vcmVxdWVzdHMucmVhZHRoZWRvY3Mub3JnLz5gXworICAgIGlzIHJlY29tbWVuZGVkIGZvciBhIGhpZ2hlci1sZXZlbCBodHRwIGNsaWVudCBpbnRlcmZhY2UuCisKIC4uIG5vdGU6OgogCiAgICBIVFRQUyBzdXBwb3J0IGlzIG9ubHkgYXZhaWxhYmxlIGlmIFB5dGhvbiB3YXMgY29tcGlsZWQgd2l0aCBTU0wgc3VwcG9ydApAQCAtMjcsNyArMzIsNyBAQAogVGhlIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGNsYXNzZXM6CiAKIAotLi4gY2xhc3M6OiBIVFRQQ29ubmVjdGlvbihob3N0LCBwb3J0PU5vbmVbLCBzdHJpY3RdWywgdGltZW91dF0sIFwKKy4uIGNsYXNzOjogSFRUUENvbm5lY3Rpb24oaG9zdCwgcG9ydD1Ob25lWywgdGltZW91dF0sIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSkKIAogICAgQW4gOmNsYXNzOmBIVFRQQ29ubmVjdGlvbmAgaW5zdGFuY2UgcmVwcmVzZW50cyBvbmUgdHJhbnNhY3Rpb24gd2l0aCBhbiBIVFRQCkBAIC00Myw0NCArNDgsMzcgQEAKICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNhbGxzIGFsbCBjcmVhdGUgaW5zdGFuY2VzIHRoYXQgY29ubmVjdCB0byB0aGUgc2VydmVyCiAgICBhdCB0aGUgc2FtZSBob3N0IGFuZCBwb3J0OjoKIAotICAgICAgPj4+IGgxID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5jd2kubmwnKQotICAgICAgPj4+IGgyID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5jd2kubmw6ODAnKQotICAgICAgPj4+IGgzID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5jd2kubmwnLCA4MCkKLSAgICAgID4+PiBoMyA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKCd3d3cuY3dpLm5sJywgODAsIHRpbWVvdXQ9MTApCisgICAgICA+Pj4gaDEgPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbignd3d3LnB5dGhvbi5vcmcnKQorICAgICAgPj4+IGgyID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5weXRob24ub3JnOjgwJykKKyAgICAgID4+PiBoMyA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKCd3d3cucHl0aG9uLm9yZycsIDgwKQorICAgICAgPj4+IGg0ID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oJ3d3dy5weXRob24ub3JnJywgODAsIHRpbWVvdXQ9MTApCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAqc291cmNlX2FkZHJlc3MqIHdhcyBhZGRlZC4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAgKnN0cmljdCogcGFyYW1ldGVyIHdhcyByZW1vdmVkLiBIVFRQIDAuOS1zdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBub3QgbG9uZ2VyIHN1cHBvcnRlZC4KIAogCiAuLiBjbGFzczo6IEhUVFBTQ29ubmVjdGlvbihob3N0LCBwb3J0PU5vbmUsIGtleV9maWxlPU5vbmUsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfZmlsZT1Ob25lWywgc3RyaWN0XVssIHRpbWVvdXRdLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X2ZpbGU9Tm9uZVssIHRpbWVvdXRdLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lLCAqLCBjb250ZXh0PU5vbmUsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPU5vbmUpCiAKICAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBIVFRQQ29ubmVjdGlvbmAgdGhhdCB1c2VzIFNTTCBmb3IgY29tbXVuaWNhdGlvbiB3aXRoCiAgICBzZWN1cmUgc2VydmVycy4gIERlZmF1bHQgcG9ydCBpcyBgYDQ0M2BgLiAgSWYgKmNvbnRleHQqIGlzIHNwZWNpZmllZCwgaXQKICAgIG11c3QgYmUgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSB2YXJpb3VzIFNTTAotICAgb3B0aW9ucy4gIElmICpjb250ZXh0KiBpcyBzcGVjaWZpZWQgYW5kIGhhcyBhIDphdHRyOmB+c3NsLlNTTENvbnRleHQudmVyaWZ5X21vZGVgCi0gICBvZiBlaXRoZXIgOmRhdGE6YH5zc2wuQ0VSVF9PUFRJT05BTGAgb3IgOmRhdGE6YH5zc2wuQ0VSVF9SRVFVSVJFRGAsIHRoZW4KLSAgIGJ5IGRlZmF1bHQgKmhvc3QqIGlzIG1hdGNoZWQgYWdhaW5zdCB0aGUgaG9zdCBuYW1lKHMpIGFsbG93ZWQgYnkgdGhlCi0gICBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4gIElmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGF0IGJlaGF2aW91ciwgeW91IGNhbgotICAgZXhwbGljaXRseSBzZXQgKmNoZWNrX2hvc3RuYW1lKiB0byBGYWxzZS4KKyAgIG9wdGlvbnMuCiAKICAgICprZXlfZmlsZSogYW5kICpjZXJ0X2ZpbGUqIGFyZSBkZXByZWNhdGVkLCBwbGVhc2UgdXNlCi0gICA6bWV0aDpgc3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluYCBpbnN0ZWFkLgorICAgOm1ldGg6YHNzbC5TU0xDb250ZXh0LmxvYWRfY2VydF9jaGFpbmAgaW5zdGVhZCwgb3IgbGV0CisgICA6ZnVuYzpgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIHNlbGVjdCB0aGUgc3lzdGVtJ3MgdHJ1c3RlZCBDQQorICAgY2VydGlmaWNhdGVzIGZvciB5b3UuICBUaGUgKmNoZWNrX2hvc3RuYW1lKiBwYXJhbWV0ZXIgaXMgYWxzbyBkZXByZWNhdGVkOyB0aGUKKyAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYXR0cmlidXRlIG9mICpjb250ZXh0KiBzaG91bGQgYmUgdXNlZAorICAgaW5zdGVhZC4KIAotICAgSWYgeW91IGFjY2VzcyBhcmJpdHJhcnkgaG9zdHMgb24gdGhlIEludGVybmV0LCBpdCBpcyByZWNvbW1lbmRlZCB0bwotICAgcmVxdWlyZSBjZXJ0aWZpY2F0ZSBjaGVja2luZyBhbmQgZmVlZCB0aGUgKmNvbnRleHQqIHdpdGggYSBzZXQgb2YKLSAgIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGVzOjoKLQotICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKLSAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAotICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoJy9ldGMvcGtpL3Rscy9jZXJ0cy9jYS1idW5kbGUuY3J0JykKLSAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdzdm4ucHl0aG9uLm9yZycsIDQ0MywgY29udGV4dD1jb250ZXh0KQorICAgUGxlYXNlIHJlYWQgOnJlZjpgc3NsLXNlY3VyaXR5YCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBiZXN0IHByYWN0aWNlcy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpzb3VyY2VfYWRkcmVzcyosICpjb250ZXh0KiBhbmQgKmNoZWNrX2hvc3RuYW1lKiB3ZXJlIGFkZGVkLgpAQCAtODksMTkgKzg3LDI1IEBACiAgICAgICBUaGlzIGNsYXNzIG5vdyBzdXBwb3J0cyBIVFRQUyB2aXJ0dWFsIGhvc3RzIGlmIHBvc3NpYmxlICh0aGF0IGlzLAogICAgICAgaWYgOmRhdGE6YHNzbC5IQVNfU05JYCBpcyB0cnVlKS4KIAotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4yIDMuNAotICAgICAgVGhlICpzdHJpY3QqIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkLiAgSFRUUCAwLjktc3R5bGUgIlNpbXBsZSBSZXNwb25zZXMiCi0gICAgICBhcmUgbm90IHN1cHBvcnRlZCBhbnltb3JlLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgd2FzIHJlbW92ZWQuIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIiBhcmUKKyAgICAgIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjMKKyAgICAgIFRoaXMgY2xhc3Mgbm93IHBlcmZvcm1zIGFsbCB0aGUgbmVjZXNzYXJ5IGNlcnRpZmljYXRlIGFuZCBob3N0bmFtZSBjaGVja3MKKyAgICAgIGJ5IGRlZmF1bHQuIFRvIHJldmVydCB0byB0aGUgcHJldmlvdXMsIHVudmVyaWZpZWQsIGJlaGF2aW9yCisgICAgICA6ZnVuYzpgc3NsLl9jcmVhdGVfdW52ZXJpZmllZF9jb250ZXh0YCBjYW4gYmUgcGFzc2VkIHRvIHRoZSAqY29udGV4dCoKKyAgICAgIHBhcmFtZXRlci4KIAogCi0uLiBjbGFzczo6IEhUVFBSZXNwb25zZShzb2NrLCBkZWJ1Z2xldmVsPTBbLCBzdHJpY3RdLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpCisuLiBjbGFzczo6IEhUVFBSZXNwb25zZShzb2NrLCBkZWJ1Z2xldmVsPTAsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSkKIAogICAgQ2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSByZXR1cm5lZCB1cG9uIHN1Y2Nlc3NmdWwgY29ubmVjdGlvbi4gIE5vdAogICAgaW5zdGFudGlhdGVkIGRpcmVjdGx5IGJ5IHVzZXIuCiAKLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMiAzLjQKLSAgICAgIFRoZSAqc3RyaWN0KiBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZC4gIEhUVFAgMC45LXN0eWxlICJTaW1wbGUgUmVzcG9uc2VzIgotICAgICAgYXJlIG5vdCBzdXBwb3J0ZWQgYW55bW9yZS4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgKnN0cmljdCogcGFyYW1ldGVyIHdhcyByZW1vdmVkLiBIVFRQIDAuOSBzdHlsZSAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlCisgICAgICBubyBsb25nZXIgc3VwcG9ydGVkLgogCiAKIFRoZSBmb2xsb3dpbmcgZXhjZXB0aW9ucyBhcmUgcmFpc2VkIGFzIGFwcHJvcHJpYXRlOgpAQCAtMTcwLDYgKzE3NCwxMiBAQAogICAgc3RhdHVzIGNvZGUgdGhhdCB3ZSBkb24ndCB1bmRlcnN0YW5kLgogCiAKKy4uIGV4Y2VwdGlvbjo6IExpbmVUb29Mb25nCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmV4YzpgSFRUUEV4Y2VwdGlvbmAuICBSYWlzZWQgaWYgYW4gZXhjZXNzaXZlbHkgbG9uZyBsaW5lCisgICBpcyByZWNlaXZlZCBpbiB0aGUgSFRUUCBwcm90b2NvbCBmcm9tIHRoZSBzZXJ2ZXIuCisKKwogVGhlIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlIGFyZToKIAogLi4gZGF0YTo6IEhUVFBfUE9SVApAQCAtNDA4LDIzICs0MTgsMzMgQEAKIC4uIG1ldGhvZDo6IEhUVFBDb25uZWN0aW9uLnJlcXVlc3QobWV0aG9kLCB1cmwsIGJvZHk9Tm9uZSwgaGVhZGVycz17fSkKIAogICAgVGhpcyB3aWxsIHNlbmQgYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIEhUVFAgcmVxdWVzdAotICAgbWV0aG9kICptZXRob2QqIGFuZCB0aGUgc2VsZWN0b3IgKnVybCouICBJZiB0aGUgKmJvZHkqIGFyZ3VtZW50IGlzCi0gICBwcmVzZW50LCBpdCBzaG91bGQgYmUgc3RyaW5nIG9yIGJ5dGVzIG9iamVjdCBvZiBkYXRhIHRvIHNlbmQgYWZ0ZXIKLSAgIHRoZSBoZWFkZXJzIGFyZSBmaW5pc2hlZC4gIFN0cmluZ3MgYXJlIGVuY29kZWQgYXMgSVNPLTg4NTktMSwgdGhlCi0gICBkZWZhdWx0IGNoYXJzZXQgZm9yIEhUVFAuICBUbyB1c2Ugb3RoZXIgZW5jb2RpbmdzLCBwYXNzIGEgYnl0ZXMKLSAgIG9iamVjdC4gIFRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIgaXMgc2V0IHRvIHRoZSBsZW5ndGggb2YgdGhlCi0gICBzdHJpbmcuCisgICBtZXRob2QgKm1ldGhvZCogYW5kIHRoZSBzZWxlY3RvciAqdXJsKi4KIAotICAgVGhlICpib2R5KiBtYXkgYWxzbyBiZSBhbiBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAsIGluIHdoaWNoIGNhc2UgdGhlCi0gICBjb250ZW50cyBvZiB0aGUgZmlsZSBpcyBzZW50OyB0aGlzIGZpbGUgb2JqZWN0IHNob3VsZCBzdXBwb3J0IGBgZmlsZW5vKClgYAotICAgYW5kIGBgcmVhZCgpYGAgbWV0aG9kcy4gVGhlIGhlYWRlciBDb250ZW50LUxlbmd0aCBpcyBhdXRvbWF0aWNhbGx5IHNldCB0bwotICAgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZSBhcyByZXBvcnRlZCBieSBzdGF0LiBUaGUgKmJvZHkqIGFyZ3VtZW50IG1heSBhbHNvIGJlCi0gICBhbiBpdGVyYWJsZSBhbmQgQ29udGVudC1MZW5ndGggaGVhZGVyIHNob3VsZCBiZSBleHBsaWNpdGx5IHByb3ZpZGVkIHdoZW4gdGhlCi0gICBib2R5IGlzIGFuIGl0ZXJhYmxlLgorICAgSWYgKmJvZHkqIGlzIHNwZWNpZmllZCwgdGhlIHNwZWNpZmllZCBkYXRhIGlzIHNlbnQgYWZ0ZXIgdGhlIGhlYWRlcnMgYXJlCisgICBmaW5pc2hlZC4gIEl0IG1heSBiZSBhIHN0cmluZywgYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLCBhbiBvcGVuCisgICA6dGVybTpgZmlsZSBvYmplY3RgLCBvciBhbiBpdGVyYWJsZSBvZiA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgXHMuICBJZgorICAgKmJvZHkqIGlzIGEgc3RyaW5nLCBpdCBpcyBlbmNvZGVkIGFzIElTTy04ODUxLTEsIHRoZSBkZWZhdWx0IGZvciBIVFRQLiAgSWYKKyAgIGl0IGlzIGEgYnl0ZXMtbGlrZSBvYmplY3QgdGhlIGJ5dGVzIGFyZSBzZW50IGFzIGlzLiAgSWYgaXQgaXMgYSA6dGVybTpgZmlsZQorICAgb2JqZWN0YCwgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGlzIHNlbnQ7IHRoaXMgZmlsZSBvYmplY3Qgc2hvdWxkIHN1cHBvcnQKKyAgIGF0IGxlYXN0IHRoZSBgYHJlYWQoKWBgIG1ldGhvZC4gIElmIHRoZSBmaWxlIG9iamVjdCBoYXMgYSBgYG1vZGVgYAorICAgYXR0cmlidXRlLCB0aGUgZGF0YSByZXR1cm5lZCBieSB0aGUgYGByZWFkKClgYCBtZXRob2Qgd2lsbCBiZSBlbmNvZGVkIGFzCisgICBJU08tODg1MS0xIHVubGVzcyB0aGUgYGBtb2RlYGAgYXR0cmlidXRlIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcgYGBiYGAsCisgICBvdGhlcndpc2UgdGhlIGRhdGEgcmV0dXJuZWQgYnkgYGByZWFkKClgYCBpcyBzZW50IGFzIGlzLiAgSWYgKmJvZHkqIGlzIGFuCisgICBpdGVyYWJsZSwgdGhlIGVsZW1lbnRzIG9mIHRoZSBpdGVyYWJsZSBhcmUgc2VudCBhcyBpcyB1bnRpbCB0aGUgaXRlcmFibGUgaXMKKyAgIGV4aGF1c3RlZC4KIAogICAgVGhlICpoZWFkZXJzKiBhcmd1bWVudCBzaG91bGQgYmUgYSBtYXBwaW5nIG9mIGV4dHJhIEhUVFAKICAgIGhlYWRlcnMgdG8gc2VuZCB3aXRoIHRoZSByZXF1ZXN0LgogCisgICBJZiAqaGVhZGVycyogZG9lcyBub3QgY29udGFpbiBhIENvbnRlbnQtTGVuZ3RoIGl0ZW0sIG9uZSBpcyBhZGRlZAorICAgYXV0b21hdGljYWxseSBpZiBwb3NzaWJsZS4gIElmICpib2R5KiBpcyBgYE5vbmVgYCwgdGhlIENvbnRlbnQtTGVuZ3RoIGhlYWRlcgorICAgaXMgc2V0IHRvIGBgMGBgIGZvciBtZXRob2RzIHRoYXQgZXhwZWN0IGEgYm9keSAoYGBQVVRgYCwgYGBQT1NUYGAsIGFuZAorICAgYGBQQVRDSGBgKS4gIElmICpib2R5KiBpcyBhIHN0cmluZyBvciBieXRlcyBvYmplY3QsIHRoZSBDb250ZW50LUxlbmd0aAorICAgaGVhZGVyIGlzIHNldCB0byBpdHMgbGVuZ3RoLiAgSWYgKmJvZHkqIGlzIGEgOnRlcm06YGZpbGUgb2JqZWN0YCBhbmQgaXQKKyAgIHdvcmtzIHRvIGNhbGwgOmZ1bmM6YH5vcy5mc3RhdGAgb24gdGhlIHJlc3VsdCBvZiBpdHMgYGBmaWxlbm8oKWBgIG1ldGhvZCwKKyAgIHRoZW4gdGhlIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpcyBzZXQgdG8gdGhlIGBgc3Rfc2l6ZWBgIHJlcG9ydGVkIGJ5IHRoZQorICAgYGBmc3RhdGBgIGNhbGwuICBPdGhlcndpc2Ugbm8gQ29udGVudC1MZW5ndGggaGVhZGVyIGlzIGFkZGVkLgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKICAgICAgICpib2R5KiBjYW4gbm93IGJlIGFuIGl0ZXJhYmxlLgogCkBAIC01OTUsMTggKzYxNSwxOCBAQAogSGVyZSBpcyBhbiBleGFtcGxlIHNlc3Npb24gdGhhdCB1c2VzIHRoZSBgYEdFVGBgIG1ldGhvZDo6CiAKICAgID4+PiBpbXBvcnQgaHR0cC5jbGllbnQKLSAgID4+PiBjb25uID0gaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24oInd3dy5weXRob24ub3JnIikKLSAgID4+PiBjb25uLnJlcXVlc3QoIkdFVCIsICIvaW5kZXguaHRtbCIpCisgICA+Pj4gY29ubiA9IGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbigid3d3LnB5dGhvbi5vcmciKQorICAgPj4+IGNvbm4ucmVxdWVzdCgiR0VUIiwgIi8iKQogICAgPj4+IHIxID0gY29ubi5nZXRyZXNwb25zZSgpCiAgICA+Pj4gcHJpbnQocjEuc3RhdHVzLCByMS5yZWFzb24pCiAgICAyMDAgT0sKICAgID4+PiBkYXRhMSA9IHIxLnJlYWQoKSAgIyBUaGlzIHdpbGwgcmV0dXJuIGVudGlyZSBjb250ZW50LgogICAgPj4+ICMgVGhlIGZvbGxvd2luZyBleGFtcGxlIGRlbW9uc3RyYXRlcyByZWFkaW5nIGRhdGEgaW4gY2h1bmtzLgotICAgPj4+IGNvbm4ucmVxdWVzdCgiR0VUIiwgIi9pbmRleC5odG1sIikKKyAgID4+PiBjb25uLnJlcXVlc3QoIkdFVCIsICIvIikKICAgID4+PiByMSA9IGNvbm4uZ2V0cmVzcG9uc2UoKQogICAgPj4+IHdoaWxlIG5vdCByMS5jbG9zZWQ6CiAgICAuLi4gICAgIHByaW50KHIxLnJlYWQoMjAwKSkgIyAyMDAgYnl0ZXMKLSAgIGInPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIuLi4KKyAgIGInPCFkb2N0eXBlIGh0bWw+XG48IS0tW2lmIi4uLgogICAgLi4uCiAgICA+Pj4gIyBFeGFtcGxlIG9mIGFuIGludmFsaWQgcmVxdWVzdAogICAgPj4+IGNvbm4ucmVxdWVzdCgiR0VUIiwgIi9wYXJyb3Quc3BhbSIpCkBAIC02MjAsOCArNjQwLDggQEAKIGBgSEVBRGBgIG1ldGhvZCBuZXZlciByZXR1cm5zIGFueSBkYXRhLiA6OgogCiAgICA+Pj4gaW1wb3J0IGh0dHAuY2xpZW50Ci0gICA+Pj4gY29ubiA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKCJ3d3cucHl0aG9uLm9yZyIpCi0gICA+Pj4gY29ubi5yZXF1ZXN0KCJIRUFEIiwiL2luZGV4Lmh0bWwiKQorICAgPj4+IGNvbm4gPSBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oInd3dy5weXRob24ub3JnIikKKyAgID4+PiBjb25uLnJlcXVlc3QoIkhFQUQiLCAiLyIpCiAgICA+Pj4gcmVzID0gY29ubi5nZXRyZXNwb25zZSgpCiAgICA+Pj4gcHJpbnQocmVzLnN0YXR1cywgcmVzLnJlYXNvbikKICAgIDIwMCBPSwpAQCAtNjU2LDcgKzY3Niw3IEBACiAKICAgICA+Pj4gIyBUaGlzIGNyZWF0ZXMgYW4gSFRUUCBtZXNzYWdlCiAgICAgPj4+ICMgd2l0aCB0aGUgY29udGVudCBvZiBCT0RZIGFzIHRoZSBlbmNsb3NlZCByZXByZXNlbnRhdGlvbgotICAgID4+PiAjIGZvciB0aGUgcmVzb3VyY2UgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2Zvb2JhcgorICAgID4+PiAjIGZvciB0aGUgcmVzb3VyY2UgaHR0cDovL2xvY2FsaG9zdDo4MDgwL2ZpbGUKICAgICAuLi4KICAgICA+Pj4gaW1wb3J0IGh0dHAuY2xpZW50CiAgICAgPj4+IEJPRFkgPSAiKioqZmlsZWNvbnRlbnRzKioqIgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVqYXIucnN0IGIvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVqYXIucnN0CmluZGV4IDJmYWU0N2MuLmNhNjhhYWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2h0dHAuY29va2llamFyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNvb2tpZWphci5yc3QKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgOm1vZDpgaHR0cC5jb29raWVqYXJgIGFuZCA6bW9kOmBodHRwLmNvb2tpZXNgIG1vZHVsZXMgZG8gbm90IGRlcGVuZCBvbiBlYWNoCiAgICAgICBvdGhlci4KIAotICAgaHR0cDovL3dwLm5ldHNjYXBlLmNvbS9uZXdzcmVmL3N0ZC9jb29raWVfc3BlYy5odG1sCisgICBodHRwOi8vY3VybC5oYXh4LnNlL3JmYy9jb29raWVfc3BlYy5odG1sCiAgICAgICBUaGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgb3JpZ2luYWwgTmV0c2NhcGUgY29va2llIHByb3RvY29sLiAgVGhvdWdoIHRoaXMgaXMKICAgICAgIHN0aWxsIHRoZSBkb21pbmFudCBwcm90b2NvbCwgdGhlICdOZXRzY2FwZSBjb29raWUgcHJvdG9jb2wnIGltcGxlbWVudGVkIGJ5IGFsbAogICAgICAgdGhlIG1ham9yIGJyb3dzZXJzIChhbmQgOm1vZDpgaHR0cC5jb29raWVqYXJgKSBvbmx5IGJlYXJzIGEgcGFzc2luZyByZXNlbWJsYW5jZSB0bwpAQCAtMTc2LDcgKzE3Niw3IEBACiAKICAgIFRoZSAqcmVzcG9uc2UqIG9iamVjdCAodXN1YWxseSB0aGUgcmVzdWx0IG9mIGEgY2FsbCB0bwogICAgOm1ldGg6YHVybGxpYi5yZXF1ZXN0LnVybG9wZW5gLCBvciBzaW1pbGFyKSBzaG91bGQgc3VwcG9ydCBhbiA6bWV0aDpgaW5mb2AKLSAgIG1ldGhvZCwgd2hpY2ggcmV0dXJucyBhIDpjbGFzczpgZW1haWwubWVzc2FnZS5NZXNzYWdlYCBpbnN0YW5jZS4KKyAgIG1ldGhvZCwgd2hpY2ggcmV0dXJucyBhbiA6Y2xhc3M6YGVtYWlsLm1lc3NhZ2UuTWVzc2FnZWAgaW5zdGFuY2UuCiAKICAgIFRoZSAqcmVxdWVzdCogb2JqZWN0ICh1c3VhbGx5IGEgOmNsYXNzOmB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0YCBpbnN0YW5jZSkKICAgIG11c3Qgc3VwcG9ydCB0aGUgbWV0aG9kcyA6bWV0aDpgZ2V0X2Z1bGxfdXJsYCwgOm1ldGg6YGdldF9ob3N0YCwKQEAgLTU0MCw3ICs1NDAsNyBAQAogCiAuLiBhdHRyaWJ1dGU6OiBEZWZhdWx0Q29va2llUG9saWN5LnN0cmljdF9uc191bnZlcmlmaWFibGUKIAotICAgYXBwbHkgUkZDIDI5NjUgcnVsZXMgb24gdW52ZXJpZmlhYmxlIHRyYW5zYWN0aW9ucyBldmVuIHRvIE5ldHNjYXBlIGNvb2tpZXMKKyAgIEFwcGx5IFJGQyAyOTY1IHJ1bGVzIG9uIHVudmVyaWZpYWJsZSB0cmFuc2FjdGlvbnMgZXZlbiB0byBOZXRzY2FwZSBjb29raWVzLgogCiAKIC4uIGF0dHJpYnV0ZTo6IERlZmF1bHRDb29raWVQb2xpY3kuc3RyaWN0X25zX2RvbWFpbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVzLnJzdCBiL0RvYy9saWJyYXJ5L2h0dHAuY29va2llcy5yc3QKaW5kZXggNjQ2ZjJlOC4uZDBjMWU1NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cC5jb29raWVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9odHRwLmNvb2tpZXMucnN0CkBAIC04NCw3ICs4NCw3IEBACiAKICAgIFJldHVybiBhbiBlbmNvZGVkIHZhbHVlLiAqdmFsKiBjYW4gYmUgYW55IHR5cGUsIGJ1dCByZXR1cm4gdmFsdWUgbXVzdCBiZSBhCiAgICBzdHJpbmcuIFRoaXMgbWV0aG9kIGRvZXMgbm90aGluZyBpbiA6Y2xhc3M6YEJhc2VDb29raWVgIC0tLSBpdCBleGlzdHMgc28gaXQgY2FuCi0gICBiZSBvdmVycmlkZGVuCisgICBiZSBvdmVycmlkZGVuLgogCiAgICBJbiBnZW5lcmFsLCBpdCBzaG91bGQgYmUgdGhlIGNhc2UgdGhhdCA6bWV0aDpgdmFsdWVfZW5jb2RlYCBhbmQKICAgIDptZXRoOmB2YWx1ZV9kZWNvZGVgIGFyZSBpbnZlcnNlcyBvbiB0aGUgcmFuZ2Ugb2YgKnZhbHVlX2RlY29kZSouCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9odHRwLnNlcnZlci5yc3QKaW5kZXggNWFlYjcxOS4uMGJkZTM1YiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaHR0cC5zZXJ2ZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L2h0dHAuc2VydmVyLnJzdApAQCAtNjQsNiArNjQsMTggQEAKIAogICAgICAgQ29udGFpbnMgdGhlIHNlcnZlciBpbnN0YW5jZS4KIAorICAgLi4gYXR0cmlidXRlOjogY2xvc2VfY29ubmVjdGlvbgorCisgICAgICBCb29sZWFuIHRoYXQgc2hvdWxkIGJlIHNldCBiZWZvcmUgOm1ldGg6YGhhbmRsZV9vbmVfcmVxdWVzdGAgcmV0dXJucywKKyAgICAgIGluZGljYXRpbmcgaWYgYW5vdGhlciByZXF1ZXN0IG1heSBiZSBleHBlY3RlZCwgb3IgaWYgdGhlIGNvbm5lY3Rpb24gc2hvdWxkCisgICAgICBiZSBzaHV0IGRvd24uCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHJlcXVlc3RsaW5lCisKKyAgICAgIENvbnRhaW5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEhUVFAgcmVxdWVzdCBsaW5lLiBUaGUKKyAgICAgIHRlcm1pbmF0aW5nIENSTEYgaXMgc3RyaXBwZWQuIFRoaXMgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQgYnkKKyAgICAgIDptZXRoOmBoYW5kbGVfb25lX3JlcXVlc3RgLiBJZiBubyB2YWxpZCByZXF1ZXN0IGxpbmUgd2FzIHByb2Nlc3NlZCwgaXQKKyAgICAgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGVtcHR5IHN0cmluZy4KIAogICAgLi4gYXR0cmlidXRlOjogY29tbWFuZAogCkBAIC04MSw3ICs5MywxMCBAQAogCiAgICAgICBIb2xkcyBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3Mgc3BlY2lmaWVkIGJ5IHRoZSA6YXR0cjpgTWVzc2FnZUNsYXNzYCBjbGFzcwogICAgICAgdmFyaWFibGUuIFRoaXMgaW5zdGFuY2UgcGFyc2VzIGFuZCBtYW5hZ2VzIHRoZSBoZWFkZXJzIGluIHRoZSBIVFRQCi0gICAgICByZXF1ZXN0LgorICAgICAgcmVxdWVzdC4gVGhlIDpmdW5jOmB+aHR0cC5jbGllbnQucGFyc2VfaGVhZGVyc2AgZnVuY3Rpb24gZnJvbQorICAgICAgOm1vZDpgaHR0cC5jbGllbnRgIGlzIHVzZWQgdG8gcGFyc2UgdGhlIGhlYWRlcnMgYW5kIGl0IHJlcXVpcmVzIHRoYXQgdGhlCisgICAgICBIVFRQIHJlcXVlc3QgcHJvdmlkZSBhIHZhbGlkIDpyZmM6YDI4MjJgIHN0eWxlIGhlYWRlci4KKwogCiAgICAuLiBhdHRyaWJ1dGU6OiByZmlsZQogCkBAIC0xMTYsNyArMTMxLDcgQEAKICAgICAgIEhUVFAgZXJyb3IgY29kZSB2YWx1ZS4gKm1lc3NhZ2UqIHNob3VsZCBiZSBhIHN0cmluZyBjb250YWluaW5nIGEKICAgICAgIChkZXRhaWxlZCkgZXJyb3IgbWVzc2FnZSBvZiB3aGF0IG9jY3VycmVkLCBhbmQgKmV4cGxhaW4qIHNob3VsZCBiZSBhbgogICAgICAgZXhwbGFuYXRpb24gb2YgdGhlIGVycm9yIGNvZGUgbnVtYmVyLiBEZWZhdWx0ICptZXNzYWdlKiBhbmQgKmV4cGxhaW4qCi0gICAgICB2YWx1ZXMgY2FuIGZvdW5kIGluIHRoZSAqcmVzcG9uc2VzKiBjbGFzcyB2YXJpYWJsZS4KKyAgICAgIHZhbHVlcyBjYW4gZm91bmQgaW4gdGhlIDphdHRyOmByZXNwb25zZXNgIGNsYXNzIHZhcmlhYmxlLgogCiAgICAuLiBhdHRyaWJ1dGU6OiBlcnJvcl9jb250ZW50X3R5cGUKIApAQCAtMTYxLDcgKzE3Niw3IEBACiAKICAgIC4uIG1ldGhvZDo6IGhhbmRsZV9leHBlY3RfMTAwKCkKIAotICAgICAgV2hlbiBhIEhUVFAvMS4xIGNvbXBsaWFudCBzZXJ2ZXIgcmVjZWl2ZXMgYSBgYEV4cGVjdDogMTAwLWNvbnRpbnVlYGAKKyAgICAgIFdoZW4gYSBIVFRQLzEuMSBjb21wbGlhbnQgc2VydmVyIHJlY2VpdmVzIGFuIGBgRXhwZWN0OiAxMDAtY29udGludWVgYAogICAgICAgcmVxdWVzdCBoZWFkZXIgaXQgcmVzcG9uZHMgYmFjayB3aXRoIGEgYGAxMDAgQ29udGludWVgYCBmb2xsb3dlZCBieSBgYDIwMAogICAgICAgT0tgYCBoZWFkZXJzLgogICAgICAgVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gdG8gcmFpc2UgYW4gZXJyb3IgaWYgdGhlIHNlcnZlciBkb2VzIG5vdApAQCAtMTcwLDEyICsxODUsMjIgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKLSAgIC4uIG1ldGhvZDo6IHNlbmRfZXJyb3IoY29kZSwgbWVzc2FnZT1Ob25lKQorICAgLi4gbWV0aG9kOjogc2VuZF9lcnJvcihjb2RlLCBtZXNzYWdlPU5vbmUsIGV4cGxhaW49Tm9uZSkKIAogICAgICAgU2VuZHMgYW5kIGxvZ3MgYSBjb21wbGV0ZSBlcnJvciByZXBseSB0byB0aGUgY2xpZW50LiBUaGUgbnVtZXJpYyAqY29kZSoKLSAgICAgIHNwZWNpZmllcyB0aGUgSFRUUCBlcnJvciBjb2RlLCB3aXRoICptZXNzYWdlKiBhcyBvcHRpb25hbCwgbW9yZSBzcGVjaWZpYyB0ZXh0LiBBCi0gICAgICBjb21wbGV0ZSBzZXQgb2YgaGVhZGVycyBpcyBzZW50LCBmb2xsb3dlZCBieSB0ZXh0IGNvbXBvc2VkIHVzaW5nIHRoZQotICAgICAgOmF0dHI6YGVycm9yX21lc3NhZ2VfZm9ybWF0YCBjbGFzcyB2YXJpYWJsZS4KKyAgICAgIHNwZWNpZmllcyB0aGUgSFRUUCBlcnJvciBjb2RlLCB3aXRoICptZXNzYWdlKiBhcyBhbiBvcHRpb25hbCwgc2hvcnQsIGh1bWFuCisgICAgICByZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3IuICBUaGUgKmV4cGxhaW4qIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvCisgICAgICBwcm92aWRlIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yOyBpdCB3aWxsIGJlIGZvcm1hdHRlZAorICAgICAgdXNpbmcgdGhlIDphdHRyOmBlcnJvcl9tZXNzYWdlX2Zvcm1hdGAgY2xhc3MgdmFyaWFibGUgYW5kIGVtaXR0ZWQsIGFmdGVyCisgICAgICBhIGNvbXBsZXRlIHNldCBvZiBoZWFkZXJzLCBhcyB0aGUgcmVzcG9uc2UgYm9keS4gIFRoZSA6YXR0cjpgcmVzcG9uc2VzYAorICAgICAgY2xhc3MgdmFyaWFibGUgaG9sZHMgdGhlIGRlZmF1bHQgdmFsdWVzIGZvciAqbWVzc2FnZSogYW5kICpleHBsYWluKiB0aGF0CisgICAgICB3aWxsIGJlIHVzZWQgaWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQ7IGZvciB1bmtub3duIGNvZGVzIHRoZSBkZWZhdWx0IHZhbHVlCisgICAgICBmb3IgYm90aCBpcyB0aGUgc3RyaW5nIGBgPz8/YGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBUaGUgZXJyb3IgcmVzcG9uc2UgaW5jbHVkZXMgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIuCisgICAgICAgICBBZGRlZCB0aGUgKmV4cGxhaW4qIGFyZ3VtZW50LgorCiAKICAgIC4uIG1ldGhvZDo6IHNlbmRfcmVzcG9uc2UoY29kZSwgbWVzc2FnZT1Ob25lKQogCkBAIC0xODUsNyArMjEwLDcgQEAKICAgICAgIGFyZSBwaWNrZWQgdXAgZnJvbSB0aGUgOm1ldGg6YHZlcnNpb25fc3RyaW5nYCBhbmQKICAgICAgIDptZXRoOmBkYXRlX3RpbWVfc3RyaW5nYCBtZXRob2RzLCByZXNwZWN0aXZlbHkuIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3QKICAgICAgIGludGVuZCB0byBzZW5kIGFueSBvdGhlciBoZWFkZXJzIHVzaW5nIHRoZSA6bWV0aDpgc2VuZF9oZWFkZXJgIG1ldGhvZCwKLSAgICAgIHRoZW4gOm1ldGg6YHNlbmRfcmVzcG9uc2VgIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIDptZXRoOmBlbmRfaGVhZGVyc2AKKyAgICAgIHRoZW4gOm1ldGg6YHNlbmRfcmVzcG9uc2VgIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhbiA6bWV0aDpgZW5kX2hlYWRlcnNgCiAgICAgICBjYWxsLgogCiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwpAQCAtMjA3LDcgKzIzMiw3IEBACiAKICAgIC4uIG1ldGhvZDo6IHNlbmRfcmVzcG9uc2Vfb25seShjb2RlLCBtZXNzYWdlPU5vbmUpCiAKLSAgICAgIFNlbmRzIHRoZSByZXBvbnNlIGhlYWRlciBvbmx5LCB1c2VkIGZvciB0aGUgcHVycG9zZXMgd2hlbiBgYDEwMAorICAgICAgU2VuZHMgdGhlIHJlc3BvbnNlIGhlYWRlciBvbmx5LCB1c2VkIGZvciB0aGUgcHVycG9zZXMgd2hlbiBgYDEwMAogICAgICAgQ29udGludWVgYCByZXNwb25zZSBpcyBzZW50IGJ5IHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudC4gVGhlIGhlYWRlcnMgbm90CiAgICAgICBidWZmZXJlZCBhbmQgc2VudCBkaXJlY3RseSB0aGUgb3V0cHV0IHN0cmVhbS5JZiB0aGUgKm1lc3NhZ2UqIGlzIG5vdAogICAgICAgc3BlY2lmaWVkLCB0aGUgSFRUUCBtZXNzYWdlIGNvcnJlc3BvbmRpbmcgdGhlIHJlc3BvbnNlICpjb2RlKiAgaXMgc2VudC4KQEAgLTM0MSw3ICszNjYsNyBAQAogCiBUaGUgOmNsYXNzOmBTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgIGNsYXNzIGNhbiBiZSB1c2VkIGluIHRoZSBmb2xsb3dpbmcKIG1hbm5lciBpbiBvcmRlciB0byBjcmVhdGUgYSB2ZXJ5IGJhc2ljIHdlYnNlcnZlciBzZXJ2aW5nIGZpbGVzIHJlbGF0aXZlIHRvCi10aGUgY3VycmVudCBkaXJlY3RvcnkuIDo6Cit0aGUgY3VycmVudCBkaXJlY3Rvcnk6OgogCiAgICBpbXBvcnQgaHR0cC5zZXJ2ZXIKICAgIGltcG9ydCBzb2NrZXRzZXJ2ZXIKQEAgLTM1NSwxMiArMzgwLDIzIEBACiAgICBwcmludCgic2VydmluZyBhdCBwb3J0IiwgUE9SVCkKICAgIGh0dHBkLnNlcnZlX2ZvcmV2ZXIoKQogCisuLiBfaHR0cC1zZXJ2ZXItY2xpOgorCiA6bW9kOmBodHRwLnNlcnZlcmAgY2FuIGFsc28gYmUgaW52b2tlZCBkaXJlY3RseSB1c2luZyB0aGUgOm9wdGlvbjpgLW1gCiBzd2l0Y2ggb2YgdGhlIGludGVycHJldGVyIHdpdGggYSBgYHBvcnQgbnVtYmVyYGAgYXJndW1lbnQuICBTaW1pbGFyIHRvCi10aGUgcHJldmlvdXMgZXhhbXBsZSwgdGhpcyBzZXJ2ZXMgZmlsZXMgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiA6OgordGhlIHByZXZpb3VzIGV4YW1wbGUsIHRoaXMgc2VydmVzIGZpbGVzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeTo6CiAKICAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIDgwMDAKIAorQnkgZGVmYXVsdCwgc2VydmVyIGJpbmRzIGl0c2VsZiB0byBhbGwgaW50ZXJmYWNlcy4gIFRoZSBvcHRpb24gYGAtYi8tLWJpbmRgYAorc3BlY2lmaWVzIGEgc3BlY2lmaWMgYWRkcmVzcyB0byB3aGljaCBpdCBzaG91bGQgYmluZC4gIEZvciBleGFtcGxlLCB0aGUKK2ZvbGxvd2luZyBjb21tYW5kIGNhdXNlcyB0aGUgc2VydmVyIHRvIGJpbmQgdG8gbG9jYWxob3N0IG9ubHk6OgorCisgICAgICAgIHB5dGhvbiAtbSBodHRwLnNlcnZlciA4MDAwIC0tYmluZCAxMjcuMC4wLjEKKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgYGAtLWJpbmRgYCBhcmd1bWVudCB3YXMgaW50cm9kdWNlZC4KKwogCiAuLiBjbGFzczo6IENHSUhUVFBSZXF1ZXN0SGFuZGxlcihyZXF1ZXN0LCBjbGllbnRfYWRkcmVzcywgc2VydmVyKQogCkBAIC00MDMsNyArNDM5LDcgQEAKICAgIHJlYXNvbnMuICBQcm9ibGVtcyB3aXRoIHRoZSBDR0kgc2NyaXB0IHdpbGwgYmUgdHJhbnNsYXRlZCB0byBlcnJvciA0MDMuCiAKIDpjbGFzczpgQ0dJSFRUUFJlcXVlc3RIYW5kbGVyYCBjYW4gYmUgZW5hYmxlZCBpbiB0aGUgY29tbWFuZCBsaW5lIGJ5IHBhc3NpbmcKLXRoZSBgYC0tY2dpYGAgb3B0aW9uLjo6Cit0aGUgYGAtLWNnaWBgIG9wdGlvbjo6CiAKICAgICAgICAgcHl0aG9uIC1tIGh0dHAuc2VydmVyIC0tY2dpIDgwMDAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaWRsZS5yc3QgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdAppbmRleCAzNmQ3OGIwLi40Mzg0ZDU2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pZGxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pZGxlLnJzdApAQCAtMywyMDAgKzMsMzAwIEBACiBJRExFCiA9PT09CiAKLS4uIG1vZHVsZWF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQFB5dGhvbi5vcmc+Ci0KIC4uIGluZGV4OjoKICAgIHNpbmdsZTogSURMRQogICAgc2luZ2xlOiBQeXRob24gRWRpdG9yCiAgICBzaW5nbGU6IEludGVncmF0ZWQgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQKIAotSURMRSBpcyB0aGUgUHl0aG9uIElERSBidWlsdCB3aXRoIHRoZSA6bW9kOmB0a2ludGVyYCBHVUkgdG9vbGtpdC4KKy4uIG1vZHVsZWF1dGhvcjo6IEd1aWRvIHZhbiBSb3NzdW0gPGd1aWRvQHB5dGhvbi5vcmc+CisKK0lETEUgaXMgUHl0aG9uJ3MgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBhbmQgTGVhcm5pbmcgRW52aXJvbm1lbnQuCiAKIElETEUgaGFzIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXM6CiAKICogY29kZWQgaW4gMTAwJSBwdXJlIFB5dGhvbiwgdXNpbmcgdGhlIDptb2Q6YHRraW50ZXJgIEdVSSB0b29sa2l0CiAKLSogY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MgYW5kIFVuaXgKKyogY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG1vc3RseSB0aGUgc2FtZSBvbiBXaW5kb3dzLCBVbml4LCBhbmQgTWFjIE9TIFgKIAotKiBtdWx0aS13aW5kb3cgdGV4dCBlZGl0b3Igd2l0aCBtdWx0aXBsZSB1bmRvLCBQeXRob24gY29sb3JpemluZyBhbmQgbWFueSBvdGhlcgotICBmZWF0dXJlcywgZS5nLiBzbWFydCBpbmRlbnQgYW5kIGNhbGwgdGlwcworKiBQeXRob24gc2hlbGwgd2luZG93IChpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikgd2l0aCBjb2xvcml6aW5nCisgIG9mIGNvZGUgaW5wdXQsIG91dHB1dCwgYW5kIGVycm9yIG1lc3NhZ2VzCiAKLSogUHl0aG9uIHNoZWxsIHdpbmRvdyAoYS5rLmEuIGludGVyYWN0aXZlIGludGVycHJldGVyKQorKiBtdWx0aS13aW5kb3cgdGV4dCBlZGl0b3Igd2l0aCBtdWx0aXBsZSB1bmRvLCBQeXRob24gY29sb3JpemluZywKKyAgc21hcnQgaW5kZW50LCBjYWxsIHRpcHMsIGF1dG8gY29tcGxldGlvbiwgYW5kIG90aGVyIGZlYXR1cmVzCiAKLSogZGVidWdnZXIgKG5vdCBjb21wbGV0ZSwgYnV0IHlvdSBjYW4gc2V0IGJyZWFrcG9pbnRzLCB2aWV3ICBhbmQgc3RlcCkKKyogc2VhcmNoIHdpdGhpbiBhbnkgd2luZG93LCByZXBsYWNlIHdpdGhpbiBlZGl0b3Igd2luZG93cywgYW5kIHNlYXJjaAorICB0aHJvdWdoIG11bHRpcGxlIGZpbGVzIChncmVwKQogCisqIGRlYnVnZ2VyIHdpdGggcGVyc2lzdGVudCBicmVha3BvaW50cywgc3RlcHBpbmcsIGFuZCB2aWV3aW5nCisgIG9mIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlcworCisqIGNvbmZpZ3VyYXRpb24sIGJyb3dzZXJzLCBhbmQgb3RoZXIgZGlhbG9ncwogCiBNZW51cwogLS0tLS0KIAorSURMRSBoYXMgdHdvIG1haW4gd2luZG93IHR5cGVzLCB0aGUgU2hlbGwgd2luZG93IGFuZCB0aGUgRWRpdG9yIHdpbmRvdy4gIEl0IGlzCitwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGVkaXRvciB3aW5kb3dzIHNpbXVsdGFuZW91c2x5LiAgT3V0cHV0IHdpbmRvd3MsIHN1Y2gKK2FzIHVzZWQgZm9yIEVkaXQgLyBGaW5kIGluIEZpbGVzLCBhcmUgYSBzdWJ0eXBlIG9mIGVkaXQgd2luZG93LiAgVGhleSBjdXJyZW50bHkKK2hhdmUgdGhlIHNhbWUgdG9wIG1lbnUgYXMgRWRpdG9yIHdpbmRvd3MgYnV0IGEgZGlmZmVyZW50IGRlZmF1bHQgdGl0bGUgYW5kCitjb250ZXh0IG1lbnUuCiAKLUZpbGUgbWVudQotXl5eXl5eXl5eCitJRExFJ3MgbWVudXMgZHluYW1pY2FsbHkgY2hhbmdlIGJhc2VkIG9uIHdoaWNoIHdpbmRvdyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuCitFYWNoIG1lbnUgZG9jdW1lbnRlZCBiZWxvdyBpbmRpY2F0ZXMgd2hpY2ggd2luZG93IHR5cGUgaXQgaXMgYXNzb2NpYXRlZCB3aXRoLgogCi1OZXcgZmlsZQotICAgY3JlYXRlIGEgbmV3IGZpbGUgZWRpdGluZyB3aW5kb3cKK0ZpbGUgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworTmV3IEZpbGUKKyAgIENyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93LgogCiBPcGVuLi4uCi0gICBvcGVuIGFuIGV4aXN0aW5nIGZpbGUKKyAgIE9wZW4gYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGFuIE9wZW4gZGlhbG9nLgogCi1PcGVuIG1vZHVsZS4uLgotICAgb3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQorUmVjZW50IEZpbGVzCisgICBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMuICBDbGljayBvbmUgdG8gb3BlbiBpdC4KIAotQ2xhc3MgYnJvd3NlcgotICAgc2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQotCi1QYXRoIGJyb3dzZXIKLSAgIHNob3cgc3lzLnBhdGggZGlyZWN0b3JpZXMsIG1vZHVsZXMsIGNsYXNzZXMgYW5kIG1ldGhvZHMKK09wZW4gTW9kdWxlLi4uCisgICBPcGVuIGFuIGV4aXN0aW5nIG1vZHVsZSAoc2VhcmNoZXMgc3lzLnBhdGgpLgogCiAuLiBpbmRleDo6CiAgICBzaW5nbGU6IENsYXNzIGJyb3dzZXIKICAgIHNpbmdsZTogUGF0aCBicm93c2VyCiAKK0NsYXNzIEJyb3dzZXIKKyAgIFNob3cgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgbWV0aG9kcyBpbiB0aGUgY3VycmVudCBFZGl0b3IgZmlsZSBpbiBhCisgICB0cmVlIHN0cnVjdHVyZS4gIEluIHRoZSBzaGVsbCwgb3BlbiBhIG1vZHVsZSBmaXJzdC4KKworUGF0aCBCcm93c2VyCisgICBTaG93IHN5cy5wYXRoIGRpcmVjdG9yaWVzLCBtb2R1bGVzLCBmdW5jdGlvbnMsIGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gYQorICAgdHJlZSBzdHJ1Y3R1cmUuCisKIFNhdmUKLSAgIHNhdmUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSAodW5zYXZlZCB3aW5kb3dzIGhhdmUgYSBcKiBiZWZvcmUgYW5kCi0gICBhZnRlciB0aGUgd2luZG93IHRpdGxlKQorICAgU2F2ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSwgaWYgdGhlcmUgaXMgb25lLiAgV2luZG93cworICAgdGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBiZWluZyBvcGVuZWQgb3IgbGFzdCBzYXZlZCBoYXZlIGEgXCogYmVmb3JlCisgICBhbmQgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZS4gIElmIHRoZXJlIGlzIG5vIGFzc29jaWF0ZWQgZmlsZSwKKyAgIGRvIFNhdmUgQXMgaW5zdGVhZC4KIAogU2F2ZSBBcy4uLgotICAgc2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICBTYXZlIHRoZSBjdXJyZW50IHdpbmRvdyB3aXRoIGEgU2F2ZSBBcyBkaWFsb2cuICBUaGUgZmlsZSBzYXZlZCBiZWNvbWVzIHRoZQorICAgbmV3IGFzc29jaWF0ZWQgZmlsZSBmb3IgdGhlIHdpbmRvdy4KIAogU2F2ZSBDb3B5IEFzLi4uCi0gICBzYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQorICAgU2F2ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gZGlmZmVyZW50IGZpbGUgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZAorICAgZmlsZS4KKworUHJpbnQgV2luZG93CisgICBQcmludCB0aGUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGRlZmF1bHQgcHJpbnRlci4KIAogQ2xvc2UKLSAgIGNsb3NlIGN1cnJlbnQgd2luZG93IChhc2tzIHRvIHNhdmUgaWYgdW5zYXZlZCkKKyAgIENsb3NlIHRoZSBjdXJyZW50IHdpbmRvdyAoYXNrIHRvIHNhdmUgaWYgdW5zYXZlZCkuCiAKIEV4aXQKLSAgIGNsb3NlIGFsbCB3aW5kb3dzIGFuZCBxdWl0IElETEUgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQorICAgQ2xvc2UgYWxsIHdpbmRvd3MgYW5kIHF1aXQgSURMRSAoYXNrIHRvIHNhdmUgdW5zYXZlZCB3aW5kb3dzKS4KIAotCi1FZGl0IG1lbnUKLV5eXl5eXl5eXgorRWRpdCBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBVbmRvCi0gICBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93IChtYXggMTAwMCBjaGFuZ2VzKQorICAgVW5kbyB0aGUgbGFzdCBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgd2luZG93LiAgQSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkKKyAgIGJlIHVuZG9uZS4KIAogUmVkbwotICAgUmVkbyBsYXN0IHVuZG9uZSBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKKyAgIFJlZG8gdGhlIGxhc3QgdW5kb25lIGNoYW5nZSB0byB0aGUgY3VycmVudCB3aW5kb3cuCiAKIEN1dAotICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHNlbGVjdGlvbgorICAgQ29weSBzZWxlY3Rpb24gaW50byB0aGUgc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSB0aGUgc2VsZWN0aW9uLgogCiBDb3B5Ci0gICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAorICAgQ29weSBzZWxlY3Rpb24gaW50byB0aGUgc3lzdGVtLXdpZGUgY2xpcGJvYXJkLgogCiBQYXN0ZQotICAgSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgSW5zZXJ0IGNvbnRlbnRzIG9mIHRoZSBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB0aGUgY3VycmVudCB3aW5kb3cuCisKK1RoZSBjbGlwYm9hcmQgZnVuY3Rpb25zIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiBjb250ZXh0IG1lbnVzLgogCiBTZWxlY3QgQWxsCi0gICBTZWxlY3QgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZWRpdCBidWZmZXIKKyAgIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IHdpbmRvdy4KIAogRmluZC4uLgotICAgT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IHdpdGggbWFueSBvcHRpb25zCisgICBPcGVuIGEgc2VhcmNoIGRpYWxvZyB3aXRoIG1hbnkgb3B0aW9ucwogCi1GaW5kIGFnYWluCi0gICBSZXBlYXQgbGFzdCBzZWFyY2gKK0ZpbmQgQWdhaW4KKyAgIFJlcGVhdCB0aGUgbGFzdCBzZWFyY2gsIGlmIHRoZXJlIGlzIG9uZS4KIAotRmluZCBzZWxlY3Rpb24KLSAgIFNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgc2VsZWN0aW9uCitGaW5kIFNlbGVjdGlvbgorICAgU2VhcmNoIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHN0cmluZywgaWYgdGhlcmUgaXMgb25lLgogCiBGaW5kIGluIEZpbGVzLi4uCi0gICBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggZm9yIHNlYXJjaGluZyBmaWxlcworICAgT3BlbiBhIGZpbGUgc2VhcmNoIGRpYWxvZy4gIFB1dCByZXN1bHRzIGluIGFuIG5ldyBvdXRwdXQgd2luZG93LgogCiBSZXBsYWNlLi4uCi0gICBPcGVuIGEgc2VhcmNoLWFuZC1yZXBsYWNlIGRpYWxvZyBib3gKKyAgIE9wZW4gYSBzZWFyY2gtYW5kLXJlcGxhY2UgZGlhbG9nLgogCi1HbyB0byBsaW5lCi0gICBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCitHbyB0byBMaW5lCisgICBNb3ZlIGN1cnNvciB0byB0aGUgbGluZSBudW1iZXIgcmVxdWVzdGVkIGFuZCBtYWtlIHRoYXQgbGluZSB2aXNpYmxlLgogCi1JbmRlbnQgcmVnaW9uCi0gICBTaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCA0IHNwYWNlcworU2hvdyBDb21wbGV0aW9ucworICAgT3BlbiBhIHNjcm9sbGFibGUgbGlzdCBhbGxvd2luZyBzZWxlY3Rpb24gb2Yga2V5d29yZHMgYW5kIGF0dHJpYnV0ZXMuIFNlZQorICAgQ29tcGxldGlvbnMgaW4gdGhlIFRpcHMgc2VjdGlvbnMgYmVsb3cuCiAKLURlZGVudCByZWdpb24KLSAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgNCBzcGFjZXMKK0V4cGFuZCBXb3JkCisgICBFeHBhbmQgYSBwcmVmaXggeW91IGhhdmUgdHlwZWQgdG8gbWF0Y2ggYSBmdWxsIHdvcmQgaW4gdGhlIHNhbWUgd2luZG93OworICAgcmVwZWF0IHRvIGdldCBhIGRpZmZlcmVudCBleHBhbnNpb24uCiAKLUNvbW1lbnQgb3V0IHJlZ2lvbgotICAgSW5zZXJ0ICMjIGluIGZyb250IG9mIHNlbGVjdGVkIGxpbmVzCitTaG93IGNhbGwgdGlwCisgICBBZnRlciBhbiB1bmNsb3NlZCBwYXJlbnRoZXNpcyBmb3IgYSBmdW5jdGlvbiwgb3BlbiBhIHNtYWxsIHdpbmRvdyB3aXRoCisgICBmdW5jdGlvbiBwYXJhbWV0ZXIgaGludHMuCiAKLVVuY29tbWVudCByZWdpb24KLSAgIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcworU2hvdyBzdXJyb3VuZGluZyBwYXJlbnMKKyAgIEhpZ2hsaWdodCB0aGUgc3Vycm91bmRpbmcgcGFyZW50aGVzaXMuCiAKLVRhYmlmeSByZWdpb24KLSAgIFR1cm5zICpsZWFkaW5nKiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicworRm9ybWF0IG1lbnUgKEVkaXRvciB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVVudGFiaWZ5IHJlZ2lvbgotICAgVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIHJpZ2h0IG51bWJlciBvZiBzcGFjZXMKK0luZGVudCBSZWdpb24KKyAgIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IGJ5IHRoZSBpbmRlbnQgd2lkdGggKGRlZmF1bHQgNCBzcGFjZXMpLgogCi1FeHBhbmQgd29yZAotICAgRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdAotICAgdG8gZ2V0IGEgZGlmZmVyZW50IGV4cGFuc2lvbgorRGVkZW50IFJlZ2lvbgorICAgU2hpZnQgc2VsZWN0ZWQgbGluZXMgbGVmdCBieSB0aGUgaW5kZW50IHdpZHRoIChkZWZhdWx0IDQgc3BhY2VzKS4KKworQ29tbWVudCBPdXQgUmVnaW9uCisgICBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMuCisKK1VuY29tbWVudCBSZWdpb24KKyAgIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcy4KKworVGFiaWZ5IFJlZ2lvbgorICAgVHVybiAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMuIChOb3RlOiBXZSByZWNvbW1lbmQgdXNpbmcKKyAgIDQgc3BhY2UgYmxvY2tzIHRvIGluZGVudCBQeXRob24gY29kZS4pCisKK1VudGFiaWZ5IFJlZ2lvbgorICAgVHVybiAqYWxsKiB0YWJzIGludG8gdGhlIGNvcnJlY3QgbnVtYmVyIG9mIHNwYWNlcy4KKworVG9nZ2xlIFRhYnMKKyAgIE9wZW4gYSBkaWFsb2cgdG8gc3dpdGNoIGJldHdlZW4gaW5kZW50aW5nIHdpdGggc3BhY2VzIGFuZCB0YWJzLgorCitOZXcgSW5kZW50IFdpZHRoCisgICBPcGVuIGEgZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGguIFRoZSBhY2NlcHRlZCBkZWZhdWx0IGJ5IHRoZSBQeXRob24KKyAgIGNvbW11bml0eSBpcyA0IHNwYWNlcy4KIAogRm9ybWF0IFBhcmFncmFwaAotICAgUmVmb3JtYXQgdGhlIGN1cnJlbnQgYmxhbmstbGluZS1zZXBhcmF0ZWQgcGFyYWdyYXBoCisgICBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLWRlbGltaXRlZCBwYXJhZ3JhcGggaW4gY29tbWVudCBibG9jayBvcgorICAgbXVsdGlsaW5lIHN0cmluZyBvciBzZWxlY3RlZCBsaW5lIGluIGEgc3RyaW5nLiAgQWxsIGxpbmVzIGluIHRoZQorICAgcGFyYWdyYXBoIHdpbGwgYmUgZm9ybWF0dGVkIHRvIGxlc3MgdGhhbiBOIGNvbHVtbnMsIHdoZXJlIE4gZGVmYXVsdHMgdG8gNzIuCiAKLUltcG9ydCBtb2R1bGUKLSAgIEltcG9ydCBvciByZWxvYWQgdGhlIGN1cnJlbnQgbW9kdWxlCi0KLVJ1biBzY3JpcHQKLSAgIEV4ZWN1dGUgdGhlIGN1cnJlbnQgZmlsZSBpbiB0aGUgX19tYWluX18gbmFtZXNwYWNlCitTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlCisgICBSZW1vdmUgYW55IHNwYWNlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGxhc3Qgbm9uLXNwYWNlIGNoYXJhY3RlciBvZiBhIGxpbmUuCiAKIC4uIGluZGV4OjoKLSAgIHNpbmdsZTogSW1wb3J0IG1vZHVsZQogICAgc2luZ2xlOiBSdW4gc2NyaXB0CiAKK1J1biBtZW51IChFZGl0b3Igd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCi1XaW5kb3dzIG1lbnUKLV5eXl5eXl5eXl5eXgorUHl0aG9uIFNoZWxsCisgICBPcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cuCisKK0NoZWNrIE1vZHVsZQorICAgQ2hlY2sgdGhlIHN5bnRheCBvZiB0aGUgbW9kdWxlIGN1cnJlbnRseSBvcGVuIGluIHRoZSBFZGl0b3Igd2luZG93LiBJZiB0aGUKKyAgIG1vZHVsZSBoYXMgbm90IGJlZW4gc2F2ZWQgSURMRSB3aWxsIGVpdGhlciBwcm9tcHQgdGhlIHVzZXIgdG8gc2F2ZSBvcgorICAgYXV0b3NhdmUsIGFzIHNlbGVjdGVkIGluIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUgSWRsZSBTZXR0aW5ncyBkaWFsb2cuICBJZgorICAgdGhlcmUgaXMgYSBzeW50YXggZXJyb3IsIHRoZSBhcHByb3hpbWF0ZSBsb2NhdGlvbiBpcyBpbmRpY2F0ZWQgaW4gdGhlCisgICBFZGl0b3Igd2luZG93LgorCitSdW4gTW9kdWxlCisgICBEbyBDaGVjayBNb2R1bGUgKGFib3ZlKS4gIElmIG5vIGVycm9yLCByZXN0YXJ0IHRoZSBzaGVsbCB0byBjbGVhbiB0aGUKKyAgIGVudmlyb25tZW50LCB0aGVuIGV4ZWN1dGUgdGhlIG1vZHVsZS4gIE91dHB1dCBpcyBkaXNwbGF5ZWQgaW4gdGhlIFNoZWxsCisgICB3aW5kb3cuICBOb3RlIHRoYXQgb3V0cHV0IHJlcXVpcmVzIHVzZSBvZiBgYHByaW50YGAgb3IgYGB3cml0ZWBgLgorICAgV2hlbiBleGVjdXRpb24gaXMgY29tcGxldGUsIHRoZSBTaGVsbCByZXRhaW5zIGZvY3VzIGFuZCBkaXNwbGF5cyBhIHByb21wdC4KKyAgIEF0IHRoaXMgcG9pbnQsIG9uZSBtYXkgaW50ZXJhY3RpdmVseSBleHBsb3JlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW9uLgorICAgVGhpcyBpcyBzaW1pbGFyIHRvIGV4ZWN1dGluZyBhIGZpbGUgd2l0aCBgYHB5dGhvbiAtaSBmaWxlYGAgYXQgYSBjb21tYW5kCisgICBsaW5lLgorCitTaGVsbCBtZW51IChTaGVsbCB3aW5kb3cgb25seSkKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitWaWV3IExhc3QgUmVzdGFydAorICBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCBTaGVsbCByZXN0YXJ0LgorCitSZXN0YXJ0IFNoZWxsCisgIFJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZSBlbnZpcm9ubWVudC4KKworRGVidWcgbWVudSAoU2hlbGwgd2luZG93IG9ubHkpCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworR28gdG8gRmlsZS9MaW5lCisgICBMb29rIG9uIHRoZSBjdXJyZW50IGxpbmUuIHdpdGggdGhlIGN1cnNvciwgYW5kIHRoZSBsaW5lIGFib3ZlIGZvciBhIGZpbGVuYW1lCisgICBhbmQgbGluZSBudW1iZXIuICBJZiBmb3VuZCwgb3BlbiB0aGUgZmlsZSBpZiBub3QgYWxyZWFkeSBvcGVuLCBhbmQgc2hvdyB0aGUKKyAgIGxpbmUuICBVc2UgdGhpcyB0byB2aWV3IHNvdXJjZSBsaW5lcyByZWZlcmVuY2VkIGluIGFuIGV4Y2VwdGlvbiB0cmFjZWJhY2sKKyAgIGFuZCBsaW5lcyBmb3VuZCBieSBGaW5kIGluIEZpbGVzLiBBbHNvIGF2YWlsYWJsZSBpbiB0aGUgY29udGV4dCBtZW51IG9mCisgICB0aGUgU2hlbGwgd2luZG93IGFuZCBPdXRwdXQgd2luZG93cy4KKworLi4gaW5kZXg6OgorICAgc2luZ2xlOiBkZWJ1Z2dlcgorICAgc2luZ2xlOiBzdGFjayB2aWV3ZXIKKworRGVidWdnZXIgKHRvZ2dsZSkKKyAgIFdoZW4gYWN0aXZlZCwgY29kZSBlbnRlcmVkIGluIHRoZSBTaGVsbCBvciBydW4gZnJvbSBhbiBFZGl0b3Igd2lsbCBydW4KKyAgIHVuZGVyIHRoZSBkZWJ1Z2dlci4gIEluIHRoZSBFZGl0b3IsIGJyZWFrcG9pbnRzIGNhbiBiZSBzZXQgd2l0aCB0aGUgY29udGV4dAorICAgbWVudS4gIFRoaXMgZmVhdHVyZSBpcyBzdGlsbCBpbmNvbXBsZXRlIGFuZCBzb21ld2hhdCBleHBlcmltZW50YWwuCisKK1N0YWNrIFZpZXdlcgorICAgU2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbiBpbiBhIHRyZWUgd2lkZ2V0LCB3aXRoCisgICBhY2Nlc3MgdG8gbG9jYWxzIGFuZCBnbG9iYWxzLgorCitBdXRvLW9wZW4gU3RhY2sgVmlld2VyCisgICBUb2dnbGUgYXV0b21hdGljYWxseSBvcGVuaW5nIHRoZSBzdGFjayB2aWV3ZXIgb24gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi4KKworT3B0aW9ucyBtZW51IChTaGVsbCBhbmQgRWRpdG9yKQorXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitDb25maWd1cmUgSURMRQorICAgT3BlbiBhIGNvbmZpZ3VyYXRpb24gZGlhbG9nIGFuZCBjaGFuZ2UgcHJlZmVyZW5jZXMgZm9yIHRoZSBmb2xsb3dpbmc6CisgICBmb250cywgaW5kZW50YXRpb24sIGtleWJpbmRpbmdzLCB0ZXh0IGNvbG9yIHRoZW1lcywgc3RhcnR1cCB3aW5kb3dzIGFuZAorICAgc2l6ZSwgYWRkaXRpb25hbCBoZWxwIHNvdXJjZXMsIGFuZCBleHRlbnNpb25zIChzZWUgYmVsb3cpLiAgT24gT1MgWCwKKyAgIG9wZW4gdGhlIGNvbmZpZ3VyYXRpb24gZGlhbG9nIGJ5IHNlbGVjdGluZyBQcmVmZXJlbmNlcyBpbiB0aGUgYXBwbGljYXRpb24KKyAgIG1lbnUuICBUbyB1c2UgYSBuZXcgYnVpbHQtaW4gY29sb3IgdGhlbWUgKElETEUgRGFyaykgd2l0aCBvbGRlciBJRExFcywKKyAgIHNhdmUgaXQgYXMgYSBuZXcgY3VzdG9tIHRoZW1lLgorCisgICBOb24tZGVmYXVsdCB1c2VyIHNldHRpbmdzIGFyZSBzYXZlZCBpbiBhIC5pZGxlcmMgZGlyZWN0b3J5IGluIHRoZSB1c2VyJ3MKKyAgIGhvbWUgZGlyZWN0b3J5LiAgUHJvYmxlbXMgY2F1c2VkIGJ5IGJhZCB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHNvbHZlZAorICAgYnkgZWRpdGluZyBvciBkZWxldGluZyBvbmUgb3IgbW9yZSBvZiB0aGUgZmlsZXMgaW4gLmlkbGVyYy4KKworQ29kZSBDb250ZXh0ICh0b2dnbGUpKEVkaXRvciBXaW5kb3cgb25seSkKKyAgIE9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93IHdoaWNoIHNob3dzIHRoZSBibG9jayBjb250ZXh0CisgICBvZiB0aGUgY29kZSB3aGljaCBoYXMgc2Nyb2xsZWQgYWJvdmUgdGhlIHRvcCBvZiB0aGUgd2luZG93LgorCitXaW5kb3cgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBab29tIEhlaWdodAotICAgdG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDI0eDgwKSBhbmQgbWF4aW11bSBoZWlnaHQuCisgICBUb2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBub3JtYWwgc2l6ZSBhbmQgbWF4aW11bSBoZWlnaHQuIFRoZSBpbml0aWFsIHNpemUKKyAgIGRlZmF1bHRzIHRvIDQwIGxpbmVzIGJ5IDgwIGNoYXJzIHVubGVzcyBjaGFuZ2VkIG9uIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUKKyAgIENvbmZpZ3VyZSBJRExFIGRpYWxvZy4KIAogVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOyBzZWxlY3Qgb25lIHRvIGJyaW5nCiBpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmIG5lY2Vzc2FyeSkuCiAKK0hlbHAgbWVudSAoU2hlbGwgYW5kIEVkaXRvcikKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIAotRGVidWcgbWVudQotXl5eXl5eXl5eXgorQWJvdXQgSURMRQorICAgRGlzcGxheSB2ZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMsIGFuZCBtb3JlLgogCi0qIGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IG9ubHkKK0lETEUgSGVscAorICAgRGlzcGxheSBhIGhlbHAgZmlsZSBmb3IgSURMRSBkZXRhaWxpbmcgdGhlIG1lbnUgb3B0aW9ucywgYmFzaWMgZWRpdGluZyBhbmQKKyAgIG5hdmlnYXRpb24sIGFuZCBvdGhlciB0aXBzLgogCi1HbyB0byBmaWxlL2xpbmUKLSAgIExvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyLCBvcGVuIHRoZSBmaWxlLAotICAgYW5kIHNob3cgdGhlIGxpbmUuICBVc2VmdWwgdG8gdmlldyB0aGUgc291cmNlIGxpbmVzIHJlZmVyZW5jZWQgaW4gYW4KLSAgIGV4Y2VwdGlvbiB0cmFjZWJhY2suCitQeXRob24gRG9jcworICAgQWNjZXNzIGxvY2FsIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpZiBpbnN0YWxsZWQsIG9yIHN0YXJ0IGEgd2ViIGJyb3dzZXIKKyAgIGFuZCBvcGVuIGRvY3MucHl0aG9uLm9yZyBzaG93aW5nIHRoZSBsYXRlc3QgUHl0aG9uIGRvY3VtZW50YXRpb24uCiAKLURlYnVnZ2VyCi0gICBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlci4KK1R1cnRsZSBEZW1vCisgICBSdW4gdGhlIHR1cnRsZWRlbW8gbW9kdWxlIHdpdGggZXhhbXBsZSBweXRob24gY29kZSBhbmQgdHVydGxlIGRyYXdpbmdzLgogCi1TdGFjayB2aWV3ZXIKLSAgIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24uCi0KLUF1dG8tb3BlbiBTdGFjayBWaWV3ZXIKLSAgIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjay4KLQotLi4gaW5kZXg6OgotICAgc2luZ2xlOiBzdGFjayB2aWV3ZXIKLSAgIHNpbmdsZTogZGVidWdnZXIKLQotCi1FZGl0IGNvbnRleHQgbWVudQotXl5eXl5eXl5eXl5eXl5eXl4KLQotKiBSaWdodC1jbGljayBpbiBFZGl0IHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQotCi1DdXQKLSAgIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSBzZWxlY3Rpb24KLQotQ29weQotICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQotUGFzdGUKLSAgIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQotU2V0IEJyZWFrcG9pbnQKLSAgIFNldHMgYSBicmVha3BvaW50LiAgQnJlYWtwb2ludHMgYXJlIG9ubHkgZW5hYmxlZCB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBvcGVuLgotCi1DbGVhciBCcmVha3BvaW50Ci0gICBDbGVhcnMgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lLgorQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMgbWF5IGJlIGFkZGVkIGhlcmUgd2l0aCB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nIHVuZGVyCit0aGUgR2VuZXJhbCB0YWIuCiAKIC4uIGluZGV4OjoKICAgIHNpbmdsZTogQ3V0CkBAIC0yMDYsMzggKzMwNiw3OCBAQAogICAgc2luZ2xlOiBDbGVhciBCcmVha3BvaW50CiAgICBzaW5nbGU6IGJyZWFrcG9pbnRzCiAKK0NvbnRleHQgTWVudXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVNoZWxsIGNvbnRleHQgbWVudQotXl5eXl5eXl5eXl5eXl5eXl5eCi0KLSogUmlnaHQtY2xpY2sgaW4gUHl0aG9uIFNoZWxsIHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKQorT3BlbiBhIGNvbnRleHQgbWVudSBieSByaWdodC1jbGlja2luZyBpbiBhIHdpbmRvdyAoQ29udHJvbC1jbGljayBvbiBPUyBYKS4KK0NvbnRleHQgbWVudXMgaGF2ZSB0aGUgc3RhbmRhcmQgY2xpcGJvYXJkIGZ1bmN0aW9ucyBhbHNvIG9uIHRoZSBFZGl0IG1lbnUuCiAKIEN1dAotICAgQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQ7IHRoZW4gZGVsZXRlIHNlbGVjdGlvbgorICAgQ29weSBzZWxlY3Rpb24gaW50byB0aGUgc3lzdGVtLXdpZGUgY2xpcGJvYXJkOyB0aGVuIGRlbGV0ZSB0aGUgc2VsZWN0aW9uLgogCiBDb3B5Ci0gICBDb3B5IHNlbGVjdGlvbiBpbnRvIHN5c3RlbS13aWRlIGNsaXBib2FyZAorICAgQ29weSBzZWxlY3Rpb24gaW50byB0aGUgc3lzdGVtLXdpZGUgY2xpcGJvYXJkLgogCiBQYXN0ZQotICAgSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgSW5zZXJ0IGNvbnRlbnRzIG9mIHRoZSBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB0aGUgY3VycmVudCB3aW5kb3cuCisKK0VkaXRvciB3aW5kb3dzIGFsc28gaGF2ZSBicmVha3BvaW50IGZ1bmN0aW9ucy4gIExpbmVzIHdpdGggYSBicmVha3BvaW50IHNldCBhcmUKK3NwZWNpYWxseSBtYXJrZWQuICBCcmVha3BvaW50cyBvbmx5IGhhdmUgYW4gZWZmZWN0IHdoZW4gcnVubmluZyB1bmRlciB0aGUKK2RlYnVnZ2VyLiAgQnJlYWtwb2ludHMgZm9yIGEgZmlsZSBhcmUgc2F2ZWQgaW4gdGhlIHVzZXIncyAuaWRsZXJjIGRpcmVjdG9yeS4KKworU2V0IEJyZWFrcG9pbnQKKyAgIFNldCBhIGJyZWFrcG9pbnQgb24gdGhlIGN1cnJlbnQgbGluZS4KKworQ2xlYXIgQnJlYWtwb2ludAorICAgQ2xlYXIgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lLgorCitTaGVsbCBhbmQgT3V0cHV0IHdpbmRvd3MgaGF2ZSB0aGUgZm9sbG93aW5nLgogCiBHbyB0byBmaWxlL2xpbmUKICAgIFNhbWUgYXMgaW4gRGVidWcgbWVudS4KIAogCi1CYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFZGl0aW5nIGFuZCBuYXZpZ2F0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0luIHRoaXMgc2VjdGlvbiwgJ0MnIHJlZmVycyB0byB0aGUgOmtiZDpgQ29udHJvbGAga2V5IG9uIFdpbmRvd3MgYW5kIFVuaXggYW5kCit0aGUgOmtiZDpgQ29tbWFuZGAga2V5IG9uIE1hYyBPU1guCiAKICogOmtiZDpgQmFja3NwYWNlYCBkZWxldGVzIHRvIHRoZSBsZWZ0OyA6a2JkOmBEZWxgIGRlbGV0ZXMgdG8gdGhlIHJpZ2h0CiAKKyogOmtiZDpgQy1CYWNrc3BhY2VgIGRlbGV0ZSB3b3JkIGxlZnQ7IDprYmQ6YEMtRGVsYCBkZWxldGUgd29yZCB0byB0aGUgcmlnaHQKKwogKiBBcnJvdyBrZXlzIGFuZCA6a2JkOmBQYWdlIFVwYC86a2JkOmBQYWdlIERvd25gIHRvIG1vdmUgYXJvdW5kCiAKKyogOmtiZDpgQy1MZWZ0QXJyb3dgIGFuZCA6a2JkOmBDLVJpZ2h0QXJyb3dgIG1vdmVzIGJ5IHdvcmRzCisKICogOmtiZDpgSG9tZWAvOmtiZDpgRW5kYCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZQogCiAqIDprYmQ6YEMtSG9tZWAvOmtiZDpgQy1FbmRgIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlCiAKLSogU29tZSA6cHJvZ3JhbTpgRW1hY3NgIGJpbmRpbmdzIG1heSBhbHNvIHdvcmssIGluY2x1ZGluZyA6a2JkOmBDLUJgLAotICA6a2JkOmBDLVBgLCA6a2JkOmBDLUFgLCA6a2JkOmBDLUVgLCA6a2JkOmBDLURgLCA6a2JkOmBDLUxgCisqIFNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6CisKKyAgICogOmtiZDpgQy1hYCBiZWdpbm5pbmcgb2YgbGluZQorCisgICAqIDprYmQ6YEMtZWAgZW5kIG9mIGxpbmUKKworICAgKiA6a2JkOmBDLWtgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKKworICAgKiA6a2JkOmBDLWxgIGNlbnRlciB3aW5kb3cgYXJvdW5kIHRoZSBpbnNlcnRpb24gcG9pbnQKKworICAgKiA6a2JkOmBDLWJgIGdvIGJhY2t3YXJkcyBvbmUgY2hhcmFjdGVyIHdpdGhvdXQgZGVsZXRpbmcgKHVzdWFsbHkgeW91IGNhbgorICAgICBhbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcykKKworICAgKiA6a2JkOmBDLWZgIGdvIGZvcndhcmQgb25lIGNoYXJhY3RlciB3aXRob3V0IGRlbGV0aW5nICh1c3VhbGx5IHlvdSBjYW4KKyAgICAgYWxzbyB1c2UgdGhlIGN1cnNvciBrZXkgZm9yIHRoaXMpCisKKyAgICogOmtiZDpgQy1wYCBnbyB1cCBvbmUgbGluZSAodXN1YWxseSB5b3UgY2FuIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvcgorICAgICB0aGlzKQorCisgICAqIDprYmQ6YEMtZGAgZGVsZXRlIG5leHQgY2hhcmFjdGVyCisKK1N0YW5kYXJkIGtleWJpbmRpbmdzIChsaWtlIDprYmQ6YEMtY2AgdG8gY29weSBhbmQgOmtiZDpgQy12YCB0byBwYXN0ZSkKK21heSB3b3JrLiAgS2V5YmluZGluZ3MgYXJlIHNlbGVjdGVkIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cuCiAKIAogQXV0b21hdGljIGluZGVudGF0aW9uCkBAIC0yNDYsNzkgKzM4NiwxMzUgQEAKIEFmdGVyIGEgYmxvY2stb3BlbmluZyBzdGF0ZW1lbnQsIHRoZSBuZXh0IGxpbmUgaXMgaW5kZW50ZWQgYnkgNCBzcGFjZXMgKGluIHRoZQogUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMgKGJyZWFrLCByZXR1cm4gZXRjLikKIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nIGluZGVudGF0aW9uLCA6a2JkOmBCYWNrc3BhY2VgIGRlbGV0ZXMgdXAKLXRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiA6a2JkOmBUYWJgIGluc2VydHMgMS00IHNwYWNlcyAoaW4gdGhlIFB5dGhvbgotU2hlbGwgd2luZG93IG9uZSB0YWIpLiBTZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQKLW1lbnUuCit0byA0IHNwYWNlcyBpZiB0aGV5IGFyZSB0aGVyZS4gOmtiZDpgVGFiYCBpbnNlcnRzIHNwYWNlcyAoaW4gdGhlIFB5dGhvbgorU2hlbGwgd2luZG93IG9uZSB0YWIpLCBudW1iZXIgZGVwZW5kcyBvbiBJbmRlbnQgd2lkdGguIEN1cnJlbnRseSB0YWJzCithcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUgdG8gVGNsL1RrIGxpbWl0YXRpb25zLgogCitTZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQgbWVudS4KKworQ29tcGxldGlvbnMKK15eXl5eXl5eXl5eCisKK0NvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZiBjbGFzc2VzLAorYm90aCBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkLiBDb21wbGV0aW9ucyBhcmUgYWxzbyBwcm92aWRlZCBmb3IKK2ZpbGVuYW1lcy4KKworVGhlIEF1dG9Db21wbGV0ZVdpbmRvdyAoQUNXKSB3aWxsIG9wZW4gYWZ0ZXIgYSBwcmVkZWZpbmVkIGRlbGF5IChkZWZhdWx0IGlzCit0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMgdHlwZWQuIElmIGFmdGVyIG9uZQorb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIgY2hhcmFjdGVycykgYSB0YWIgaXMgdHlwZWQKK3RoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUgY29udGludWF0aW9uIGlzIGZvdW5kLgorCitJZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCis6a2JkOmBUYWJgIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KKworJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdywgYnkgZGVmYXVsdCB0aGUKKzprYmQ6YEMtc3BhY2VgIHdpbGwgb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gSW4gYW4gZW1wdHkKK3N0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gT24gYQorYmxhbmsgbGluZSwgaXQgd2lsbCBjb250YWluIHRoZSBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKK2NsYXNzZXMgaW4gdGhlIGN1cnJlbnQgbmFtZSBzcGFjZXMsIHBsdXMgYW55IG1vZHVsZXMgaW1wb3J0ZWQuIElmIHNvbWUKK2NoYXJhY3RlcnMgaGF2ZSBiZWVuIGVudGVyZWQsIHRoZSBBQ1cgd2lsbCBhdHRlbXB0IHRvIGJlIG1vcmUgc3BlY2lmaWMuCisKK0lmIGEgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKK2VudHJ5IG1vc3QgY2xvc2VseSBtYXRjaGluZyB0aG9zZSBjaGFyYWN0ZXJzLiAgRW50ZXJpbmcgYSA6a2JkOmB0YWJgIHdpbGwKK2NhdXNlIHRoZSBsb25nZXN0IG5vbi1hbWJpZ3VvdXMgbWF0Y2ggdG8gYmUgZW50ZXJlZCBpbiB0aGUgRWRpdG9yIHdpbmRvdyBvcgorU2hlbGwuICBUd28gOmtiZDpgdGFiYCBpbiBhIHJvdyB3aWxsIHN1cHBseSB0aGUgY3VycmVudCBBQ1cgc2VsZWN0aW9uLCBhcword2lsbCByZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZSBzZWxlY3Rpb24sCithbmQgdGhlIHNjcm9sbCB3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgorCisiSGlkZGVuIiBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KK25hbWUgYWZ0ZXIgYSAnLicsIGUuZy4gJ18nLiBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gbW9kdWxlcyB3aXRoCitgYF9fYWxsX19gYCBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy4KKworQ29tcGxldGlvbnMgYW5kIHRoZSAnRXhwYW5kIFdvcmQnIGZhY2lsaXR5IGNhbiBzYXZlIGEgbG90IG9mIHR5cGluZyEKKworQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiBOYW1lcyBpbgorYW4gRWRpdG9yIHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBgYF9fbWFpbl9fYGAgYW5kIDpkYXRhOmBzeXMubW9kdWxlc2Agd2lsbAorbm90IGJlIGZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMgc2l0dWF0aW9uLgorTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluIHN5cy5tb2R1bGVzLCBzbworbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgorCitJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQorbG9uZ2VyIG9yIGRpc2FibGUgdGhlIGV4dGVuc2lvbi4KKworQ2FsbHRpcHMKK15eXl5eXl5eCisKK0EgY2FsbHRpcCBpcyBzaG93biB3aGVuIG9uZSB0eXBlcyA6a2JkOmAoYCBhZnRlciB0aGUgbmFtZSBvZiBhbiAqYWNjY2Vzc2libGUqCitmdW5jdGlvbi4gIEEgbmFtZSBleHByZXNzaW9uIG1heSBpbmNsdWRlIGRvdHMgYW5kIHN1YnNjcmlwdHMuICBBIGNhbGx0aXAKK3JlbWFpbnMgdW50aWwgaXQgaXMgY2xpY2tlZCwgdGhlIGN1cnNvciBpcyBtb3ZlZCBvdXQgb2YgdGhlIGFyZ3VtZW50IGFyZWEsCitvciA6a2JkOmApYCBpcyB0eXBlZC4gIFdoZW4gdGhlIGN1cnNvciBpcyBpbiB0aGUgYXJndW1lbnQgcGFydCBvZiBhIGRlZmluaXRpb24sCit0aGUgbWVudSBvciBzaG9ydGN1dCBkaXNwbGF5IGEgY2FsbHRpcC4KKworQSBjYWxsdGlwIGNvbnNpc3RzIG9mIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSBmaXJzdCBsaW5lIG9mIHRoZQorZG9jc3RyaW5nLiAgRm9yIGJ1aWx0aW5zIHdpdGhvdXQgYW4gYWNjZXNzaWJsZSBzaWduYXR1cmUsIHRoZSBjYWxsdGlwCitjb25zaXN0cyBvZiBhbGwgbGluZXMgdXAgdGhlIGZpZnRoIGxpbmUgb3IgdGhlIGZpcnN0IGJsYW5rIGxpbmUuICBUaGVzZQorZGV0YWlscyBtYXkgY2hhbmdlLgorCitUaGUgc2V0IG9mICphY2Nlc3NpYmxlKiBmdW5jdGlvbnMgZGVwZW5kcyBvbiB3aGF0IG1vZHVsZXMgaGF2ZSBiZWVuIGltcG9ydGVkCitpbnRvIHRoZSB1c2VyIHByb2Nlc3MsIGluY2x1ZGluZyB0aG9zZSBpbXBvcnRlZCBieSBJZGxlIGl0c2VsZiwKK2FuZCB3aGF0IGRlZmluaXRpb25zIGhhdmUgYmVlbiBydW4sIGFsbCBzaW5jZSB0aGUgbGFzdCByZXN0YXJ0LgorCitGb3IgZXhhbXBsZSwgcmVzdGFydCB0aGUgU2hlbGwgYW5kIGVudGVyIGBgaXRlcnRvb2xzLmNvdW50KGBgLiAgQSBjYWxsdGlwCithcHBlYXJzIGJlY2F1c2UgSWRsZSBpbXBvcnRzIGl0ZXJ0b29scyBpbnRvIHRoZSB1c2VyIHByb2Nlc3MgZm9yIGl0cyBvd24gdXNlLgorKFRoaXMgY291bGQgY2hhbmdlLikgIEVudGVyIGBgdHVydGxlLndyaXRlKGBgIGFuZCBub3RoaW5nIGFwcGVhcnMuICBJZGxlIGRvZXMKK25vdCBpbXBvcnQgdHVydGxlLiAgVGhlIG1lbnUgb3Igc2hvcnRjdXQgZG8gbm90aGluZyBlaXRoZXIuICBFbnRlcgorYGBpbXBvcnQgdHVydGxlYGAgYW5kIHRoZW4gYGB0dXJ0bGUud3JpdGUoYGAgd2lsbCB3b3JrLgorCitJbiBhbiBlZGl0b3IsIGltcG9ydCBzdGF0ZW1lbnRzIGhhdmUgbm8gZWZmZWN0IHVudGlsIG9uZSBydW5zIHRoZSBmaWxlLiAgT25lCittaWdodCB3YW50IHRvIHJ1biBhIGZpbGUgYWZ0ZXIgd3JpdGluZyB0aGUgaW1wb3J0IHN0YXRlbWVudHMgYXQgdGhlIHRvcCwKK29yIGltbWVkaWF0ZWx5IHJ1biBhbiBleGlzdGluZyBmaWxlIGJlZm9yZSBlZGl0aW5nLgogCiBQeXRob24gU2hlbGwgd2luZG93CiBeXl5eXl5eXl5eXl5eXl5eXl5eCiAKLSogOmtiZDpgQy1DYCBpbnRlcnJ1cHRzIGV4ZWN1dGluZyBjb21tYW5kCisqIDprYmQ6YEMtY2AgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZAogCi0qIDprYmQ6YEMtRGAgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgYSBgYD4+PmBgIHByb21wdAorKiA6a2JkOmBDLWRgIHNlbmRzIGVuZC1vZi1maWxlOyBjbG9zZXMgd2luZG93IGlmIHR5cGVkIGF0IGEgYGA+Pj5gYCBwcm9tcHQKIAotKiA6a2JkOmBBbHQtcGAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZAorKiA6a2JkOmBBbHQtL2AgKEV4cGFuZCB3b3JkKSBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nCiAKLSogOmtiZDpgQWx0LW5gIHJldHJpZXZlcyBuZXh0CisgIENvbW1hbmQgaGlzdG9yeQogCi0qIDprYmQ6YFJldHVybmAgd2hpbGUgb24gYW55IHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZAorICAqIDprYmQ6YEFsdC1wYCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkLiBPbgorICAgIE9TIFggdXNlIDprYmQ6YEMtcGAuCiAKLSogOmtiZDpgQWx0LS9gIChFeHBhbmQgd29yZCkgaXMgYWxzbyB1c2VmdWwgaGVyZQorICAqIDprYmQ6YEFsdC1uYCByZXRyaWV2ZXMgbmV4dC4gT24gT1MgWCB1c2UgOmtiZDpgQy1uYC4KIAotLi4gaW5kZXg6OiBzaW5nbGU6IGluZGVudGF0aW9uCisgICogOmtiZDpgUmV0dXJuYCB3aGlsZSBvbiBhbnkgcHJldmlvdXMgY29tbWFuZCByZXRyaWV2ZXMgdGhhdCBjb21tYW5kCiAKIAotU3ludGF4IGNvbG9ycwotLS0tLS0tLS0tLS0tLQorVGV4dCBjb2xvcnMKK15eXl5eXl5eXl5eCiAKLVRoZSBjb2xvcmluZyBpcyBhcHBsaWVkIGluIGEgYmFja2dyb3VuZCAidGhyZWFkLCIgc28geW91IG1heSBvY2Nhc2lvbmFsbHkgc2VlCi11bmNvbG9yaXplZCB0ZXh0LiAgVG8gY2hhbmdlIHRoZSBjb2xvciBzY2hlbWUsIGVkaXQgdGhlIGBgW0NvbG9yc11gYCBzZWN0aW9uIGluCi06ZmlsZTpgY29uZmlnLnR4dGAuCitJZGxlIGRlZmF1bHRzIHRvIGJsYWNrIG9uIHdoaXRlIHRleHQsIGJ1dCBjb2xvcnMgdGV4dCB3aXRoIHNwZWNpYWwgbWVhbmluZ3MuCitGb3IgdGhlIHNoZWxsLCB0aGVzZSBhcmUgc2hlbGwgb3V0cHV0LCBzaGVsbCBlcnJvciwgdXNlciBvdXRwdXQsIGFuZAordXNlciBlcnJvci4gIEZvciBQeXRob24gY29kZSwgYXQgdGhlIHNoZWxsIHByb21wdCBvciBpbiBhbiBlZGl0b3IsIHRoZXNlIGFyZQora2V5d29yZHMsIGJ1aWx0aW4gY2xhc3MgYW5kIGZ1bmN0aW9uIG5hbWVzLCBuYW1lcyBmb2xsb3dpbmcgYGBjbGFzc2BgIGFuZAorYGBkZWZgYCwgc3RyaW5ncywgYW5kIGNvbW1lbnRzLiBGb3IgYW55IHRleHQgd2luZG93LCB0aGVzZSBhcmUgdGhlIGN1cnNvciAod2hlbgorcHJlc2VudCksIGZvdW5kIHRleHQgKHdoZW4gcG9zc2libGUpLCBhbmQgc2VsZWN0ZWQgdGV4dC4KIAotUHl0aG9uIHN5bnRheCBjb2xvcnM6Ci0gICBLZXl3b3JkcwotICAgICAgb3JhbmdlCi0KLSAgIFN0cmluZ3MKLSAgICAgIGdyZWVuCi0KLSAgIENvbW1lbnRzCi0gICAgICByZWQKLQotICAgRGVmaW5pdGlvbnMKLSAgICAgIGJsdWUKLQotU2hlbGwgY29sb3JzOgotICAgQ29uc29sZSBvdXRwdXQKLSAgICAgIGJyb3duCi0KLSAgIHN0ZG91dAotICAgICAgYmx1ZQotCi0gICBzdGRlcnIKLSAgICAgIGRhcmsgZ3JlZW4KLQotICAgc3RkaW4KLSAgICAgIGJsYWNrCitUZXh0IGNvbG9yaW5nIGlzIGRvbmUgaW4gdGhlIGJhY2tncm91bmQsIHNvIHVuY29sb3JpemVkIHRleHQgaXMgb2NjYXNpb25hbGx5Cit2aXNpYmxlLiAgVG8gY2hhbmdlIHRoZSBjb2xvciBzY2hlbWUsIHVzZSB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nCitIaWdobGlnaHRpbmcgdGFiLiAgVGhlIG1hcmtpbmcgb2YgZGVidWdnZXIgYnJlYWtwb2ludCBsaW5lcyBpbiB0aGUgZWRpdG9yIGFuZAordGV4dCBpbiBwb3B1cHMgYW5kIGRpYWxvZ3MgaXMgbm90IHVzZXItY29uZmlndXJhYmxlLgogCiAKLVN0YXJ0dXAKLS0tLS0tLS0KK1N0YXJ0dXAgYW5kIGNvZGUgZXhlY3V0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBVcG9uIHN0YXJ0dXAgd2l0aCB0aGUgYGAtc2BgIG9wdGlvbiwgSURMRSB3aWxsIGV4ZWN1dGUgdGhlIGZpbGUgcmVmZXJlbmNlZCBieQogdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyA6ZW52dmFyOmBJRExFU1RBUlRVUGAgb3IgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAuCi1JZGxlIGZpcnN0IGNoZWNrcyBmb3IgYGBJRExFU1RBUlRVUGBgOyBpZiBgYElETEVTVEFSVFVQYGAgaXMgcHJlc2VudCB0aGUgZmlsZQotcmVmZXJlbmNlZCBpcyBydW4uICBJZiBgYElETEVTVEFSVFVQYGAgaXMgbm90IHByZXNlbnQsIElkbGUgY2hlY2tzIGZvcgorSURMRSBmaXJzdCBjaGVja3MgZm9yIGBgSURMRVNUQVJUVVBgYDsgaWYgYGBJRExFU1RBUlRVUGBgIGlzIHByZXNlbnQgdGhlIGZpbGUKK3JlZmVyZW5jZWQgaXMgcnVuLiAgSWYgYGBJRExFU1RBUlRVUGBgIGlzIG5vdCBwcmVzZW50LCBJRExFIGNoZWNrcyBmb3IKIGBgUFlUSE9OU1RBUlRVUGBgLiAgRmlsZXMgcmVmZXJlbmNlZCBieSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCi1jb252ZW5pZW50IHBsYWNlcyB0byBzdG9yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmcmVxdWVudGx5IGZyb20gdGhlIElkbGUKK2NvbnZlbmllbnQgcGxhY2VzIHRvIHN0b3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSB1c2VkIGZyZXF1ZW50bHkgZnJvbSB0aGUgSURMRQogc2hlbGwsIG9yIGZvciBleGVjdXRpbmcgaW1wb3J0IHN0YXRlbWVudHMgdG8gaW1wb3J0IGNvbW1vbiBtb2R1bGVzLgogCiBJbiBhZGRpdGlvbiwgYGBUa2BgIGFsc28gbG9hZHMgYSBzdGFydHVwIGZpbGUgaWYgaXQgaXMgcHJlc2VudC4gIE5vdGUgdGhhdCB0aGUKIFRrIGZpbGUgaXMgbG9hZGVkIHVuY29uZGl0aW9uYWxseS4gIFRoaXMgYWRkaXRpb25hbCBmaWxlIGlzIGBgLklkbGUucHlgYCBhbmQgaXMKIGxvb2tlZCBmb3IgaW4gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFN0YXRlbWVudHMgaW4gdGhpcyBmaWxlIHdpbGwgYmUKLWV4ZWN1dGVkIGluIHRoZSBUayBuYW1lc3BhY2UsIHNvIHRoaXMgZmlsZSBpcyBub3QgdXNlZnVsIGZvciBpbXBvcnRpbmcgZnVuY3Rpb25zCi10byBiZSB1c2VkIGZyb20gSWRsZSdzIFB5dGhvbiBzaGVsbC4KK2V4ZWN1dGVkIGluIHRoZSBUayBuYW1lc3BhY2UsIHNvIHRoaXMgZmlsZSBpcyBub3QgdXNlZnVsIGZvciBpbXBvcnRpbmcKK2Z1bmN0aW9ucyB0byBiZSB1c2VkIGZyb20gSURMRSdzIFB5dGhvbiBzaGVsbC4KIAogCiBDb21tYW5kIGxpbmUgdXNhZ2UKQEAgLTMyNiwyNiArNTIyLDExOCBAQAogCiA6OgogCi0gICBpZGxlLnB5IFstYyBjb21tYW5kXSBbLWRdIFstZV0gWy1zXSBbLXQgdGl0bGVdIFthcmddIC4uLgorICAgaWRsZS5weSBbLWMgY29tbWFuZF0gWy1kXSBbLWVdIFstaF0gWy1pXSBbLXIgZmlsZV0gWy1zXSBbLXQgdGl0bGVdIFstXSBbYXJnXSAuLi4KIAotICAgLWMgY29tbWFuZCAgcnVuIHRoaXMgY29tbWFuZAotICAgLWQgICAgICAgICAgZW5hYmxlIGRlYnVnZ2VyCi0gICAtZSAgICAgICAgICBlZGl0IG1vZGU7IGFyZ3VtZW50cyBhcmUgZmlsZXMgdG8gYmUgZWRpdGVkCi0gICAtcyAgICAgICAgICBydW4gJElETEVTVEFSVFVQIG9yICRQWVRIT05TVEFSVFVQIGZpcnN0CisgICAtYyBjb21tYW5kICBydW4gY29tbWFuZCBpbiB0aGUgc2hlbGwgd2luZG93CisgICAtZCAgICAgICAgICBlbmFibGUgZGVidWdnZXIgYW5kIG9wZW4gc2hlbGwgd2luZG93CisgICAtZSAgICAgICAgICBvcGVuIGVkaXRvciB3aW5kb3cKKyAgIC1oICAgICAgICAgIHByaW50IGhlbHAgbWVzc2FnZSB3aXRoIGxlZ2FsIGNvbWJpbmF0aW9zIGFuZCBleGl0CisgICAtaSAgICAgICAgICBvcGVuIHNoZWxsIHdpbmRvdworICAgLXIgZmlsZSAgICAgcnVuIGZpbGUgaW4gc2hlbGwgd2luZG93CisgICAtcyAgICAgICAgICBydW4gJElETEVTVEFSVFVQIG9yICRQWVRIT05TVEFSVFVQIGZpcnN0LCBpbiBzaGVsbCB3aW5kb3cKICAgIC10IHRpdGxlICAgIHNldCB0aXRsZSBvZiBzaGVsbCB3aW5kb3cKKyAgIC0gICAgICAgICAgIHJ1biBzdGRpbiBpbiBzaGVsbCAoLSBtdXN0IGJlIGxhc3Qgb3B0aW9uIGJlZm9yZSBhcmdzKQogCiBJZiB0aGVyZSBhcmUgYXJndW1lbnRzOgogCi0jLiBJZiBgYC1lYGAgaXMgdXNlZCwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kCi0gICBgYHN5cy5hcmd2YGAgcmVmbGVjdHMgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gSURMRSBpdHNlbGYuCisqIElmIGBgLWBgLCBgYC1jYGAsIG9yIGBgcmBgIGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgorICBgYHN5cy5hcmd2WzE6Li4uXWBgIGFuZCBgYHN5cy5hcmd2WzBdYGAgaXMgc2V0IHRvIGBgJydgYCwgYGAnLWMnYGAsCisgIG9yIGBgJy1yJ2BgLiAgTm8gZWRpdG9yIHdpbmRvdyBpcyBvcGVuZWQsIGV2ZW4gaWYgdGhhdCBpcyB0aGUgZGVmYXVsdAorICBzZXQgaW4gdGhlIE9wdGlvbnMgZGlhbG9nLgogCi0jLiBPdGhlcndpc2UsIGlmIGBgLWNgYCBpcyB1c2VkLCBhbGwgYXJndW1lbnRzIGFyZSBwbGFjZWQgaW4KLSAgIGBgc3lzLmFyZ3ZbMTouLi5dYGAsIHdpdGggYGBzeXMuYXJndlswXWBgIHNldCB0byBgYCctYydgYC4KLQotIy4gT3RoZXJ3aXNlLCBpZiBuZWl0aGVyIGBgLWVgYCBub3IgYGAtY2BgIGlzIHVzZWQsIHRoZSBmaXJzdAotICAgYXJndW1lbnQgaXMgYSBzY3JpcHQgd2hpY2ggaXMgZXhlY3V0ZWQgd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cyBpbgotICAgYGBzeXMuYXJndlsxOi4uLl1gYCAgYW5kIGBgc3lzLmFyZ3ZbMF1gYCBzZXQgdG8gdGhlIHNjcmlwdCBuYW1lLiAgSWYgdGhlIHNjcmlwdAotICAgbmFtZSBpcyAnLScsIG5vIHNjcmlwdCBpcyBleGVjdXRlZCBidXQgYW4gaW50ZXJhY3RpdmUgUHl0aG9uIHNlc3Npb24gaXMgc3RhcnRlZDsKLSAgIHRoZSBhcmd1bWVudHMgYXJlIHN0aWxsIGF2YWlsYWJsZSBpbiBgYHN5cy5hcmd2YGAuCisqIE90aGVyd2lzZSwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kCisgIGBgc3lzLmFyZ3ZgYCByZWZsZWN0cyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBJRExFIGl0c2VsZi4KIAogCitJRExFLWNvbnNvbGUgZGlmZmVyZW5jZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitBcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBQeXRob24gY29kZSB3aXRoIElETEUgaXMgdGhlCitzYW1lIGFzIGV4ZWN1dGluZyB0aGUgc2FtZSBjb2RlIGluIGEgY29uc29sZSB3aW5kb3cuICBIb3dldmVyLCB0aGUgZGlmZmVyZW50CitpbnRlcmZhY2UgYW5kIG9wZXJhdGlvbiBvY2Nhc2lvbmFsbHkgYWZmZWN0cyByZXN1bHRzLgorCitGb3IgaW5zdGFuY2UsIElETEUgbm9ybWFsbHkgZXhlY3V0ZXMgdXNlciBjb2RlIGluIGEgc2VwYXJhdGUgcHJvY2VzcyBmcm9tCit0aGUgSURMRSBHVUkgaXRzZWxmLiAgVGhlIElETEUgdmVyc2lvbnMgb2Ygc3lzLnN0ZGluLCAuc3Rkb3V0LCBhbmQgLnN0ZGVyciBpbiB0aGUKK2V4ZWN1dGlvbiBwcm9jZXNzIGdldCBpbnB1dCBmcm9tIGFuZCBzZW5kIG91dHB1dCB0byB0aGUgR1VJIHByb2Nlc3MsCit3aGljaCBrZWVwcyBjb250cm9sIG9mIHRoZSBrZXlib2FyZCBhbmQgc2NyZWVuLiAgVGhpcyBpcyBub3JtYWxseSB0cmFuc3BhcmVudCwKK2J1dCBjb2RlIHRoYXQgYWNjZXNzIHRoZXNlIG9iamVjdCB3aWxsIHNlZSBkaWZmZXJlbnQgYXR0cmlidXRlIHZhbHVlcy4KK0Fsc28sIGZ1bmN0aW9ucyB0aGF0IGRpcmVjdGx5IGFjY2VzcyB0aGUga2V5Ym9hcmQgYW5kIHNjcmVlbiB3aWxsIG5vdCB3b3JrLgorCitXaXRoIElETEUncyBTaGVsbCwgb25lIGVudGVycywgZWRpdHMsIGFuZCByZWNhbGxzIGNvbXBsZXRlIHN0YXRlbWVudHMuCitTb21lIGNvbnNvbGVzIG9ubHkgd29yayB3aXRoIGEgc2luZ2xlIHBoeXNpY2FsIGxpbmUgYXQgYSB0aW1lLgorCitSdW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0J5IGRlZmF1bHQsIElETEUgZXhlY3V0ZXMgdXNlciBjb2RlIGluIGEgc2VwYXJhdGUgc3VicHJvY2VzcyB2aWEgYSBzb2NrZXQsCit3aGljaCB1c2VzIHRoZSBpbnRlcm5hbCBsb29wYmFjayBpbnRlcmZhY2UuICBUaGlzIGNvbm5lY3Rpb24gaXMgbm90CitleHRlcm5hbGx5IHZpc2libGUgYW5kIG5vIGRhdGEgaXMgc2VudCB0byBvciByZWNlaXZlZCBmcm9tIHRoZSBJbnRlcm5ldC4KK0lmIGZpcmV3YWxsIHNvZnR3YXJlIGNvbXBsYWlucyBhbnl3YXksIHlvdSBjYW4gaWdub3JlIGl0LgorCitJZiB0aGUgYXR0ZW1wdCB0byBtYWtlIHRoZSBzb2NrZXQgY29ubmVjdGlvbiBmYWlscywgSWRsZSB3aWxsIG5vdGlmeSB5b3UuCitTdWNoIGZhaWx1cmVzIGFyZSBzb21ldGltZXMgdHJhbnNpZW50LCBidXQgaWYgcGVyc2lzdGVudCwgdGhlIHByb2JsZW0KK21heSBiZSBlaXRoZXIgYSBmaXJld2FsbCBibG9ja2luZyB0aGUgY29ubmVjdG9uIG9yIG1pc2NvbmZpZ3VyYXRpb24gb2YKK2EgcGFydGljdWxhciBzeXN0ZW0uICBVbnRpbCB0aGUgcHJvYmxlbSBpcyBmaXhlZCwgb25lIGNhbiBydW4gSWRsZSB3aXRoCit0aGUgLW4gY29tbWFuZCBsaW5lIHN3aXRjaC4KKworSWYgSURMRSBpcyBzdGFydGVkIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXQgd2lsbCBydW4gaW4gYQorc2luZ2xlIHByb2Nlc3MgYW5kIHdpbGwgbm90IGNyZWF0ZSB0aGUgc3VicHJvY2VzcyB3aGljaCBydW5zIHRoZSBSUEMKK1B5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCit0aGUgc3VicHJvY2VzcyBvciB0aGUgUlBDIHNvY2tldCBpbnRlcmZhY2Ugb24geW91ciBwbGF0Zm9ybS4gIEhvd2V2ZXIsCitpbiB0aGlzIG1vZGUgdXNlciBjb2RlIGlzIG5vdCBpc29sYXRlZCBmcm9tIElETEUgaXRzZWxmLiAgQWxzbywgdGhlCitlbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCit5b3VyIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQsIHlvdSBtdXN0IHJlbG9hZCgpIHRoZSBhZmZlY3RlZCBtb2R1bGVzIGFuZAorcmUtaW1wb3J0IGFueSBzcGVjaWZpYyBpdGVtcyAoZS5nLiBmcm9tIGZvbyBpbXBvcnQgYmF6KSBpZiB0aGUgY2hhbmdlcworYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKK3dpdGggdGhlIGRlZmF1bHQgc3VicHJvY2VzcyBpZiBhdCBhbGwgcG9zc2libGUuCisKKy4uIGRlcHJlY2F0ZWQ6OiAzLjQKKworCitIZWxwIGFuZCBwcmVmZXJlbmNlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQWRkaXRpb25hbCBoZWxwIHNvdXJjZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0lETEUgaW5jbHVkZXMgYSBoZWxwIG1lbnUgZW50cnkgY2FsbGVkICJQeXRob24gRG9jcyIgdGhhdCB3aWxsIG9wZW4gdGhlCitleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcgdHV0b3JpYWxzLCBhdmFpbGFibGUgYXQgZG9jcy5weXRob24ub3JnLgorU2VsZWN0ZWQgVVJMcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBoZWxwIG1lbnUgYXQgYW55IHRpbWUgdXNpbmcgdGhlCitDb25maWd1cmUgSURMRSBkaWFsb2cuIFNlZSB0aGUgSURMRSBoZWxwIG9wdGlvbiBpbiB0aGUgaGVscCBtZW51IG9mIElETEUgZm9yCittb3JlIGluZm9ybWF0aW9uLgorCisKK1NldHRpbmcgcHJlZmVyZW5jZXMKK15eXl5eXl5eXl5eXl5eXl5eXl4KKworVGhlIGZvbnQgcHJlZmVyZW5jZXMsIGhpZ2hsaWdodGluZywga2V5cywgYW5kIGdlbmVyYWwgcHJlZmVyZW5jZXMgY2FuIGJlCitjaGFuZ2VkIHZpYSBDb25maWd1cmUgSURMRSBvbiB0aGUgT3B0aW9uIG1lbnUuICBLZXlzIGNhbiBiZSB1c2VyIGRlZmluZWQ7CitJRExFIHNoaXBzIHdpdGggZm91ciBidWlsdCBpbiBrZXkgc2V0cy4gSW4gYWRkaXRpb24gYSB1c2VyIGNhbiBjcmVhdGUgYQorY3VzdG9tIGtleSBzZXQgaW4gdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZyB1bmRlciB0aGUga2V5cyB0YWIuCisKKworRXh0ZW5zaW9ucworXl5eXl5eXl5eXgorCitJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFBlZmVyZW5jZXMgZm9yIGV4dGVuc2lvbnMgY2FuIGJlCitjaGFuZ2VkIHdpdGggQ29uZmlndXJlIEV4dGVuc2lvbnMuIFNlZSB0aGUgYmVnaW5uaW5nIG9mIGNvbmZpZy1leHRlbnNpb25zLmRlZgoraW4gdGhlIGlkbGVsaWIgZGlyZWN0b3J5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLiAgVGhlIGRlZmF1bHQgZXh0ZW5zaW9ucworYXJlIGN1cnJlbnRseToKKworKiBGb3JtYXRQYXJhZ3JhcGgKKworKiBBdXRvRXhwYW5kCisKKyogWm9vbUhlaWdodAorCisqIFNjcmlwdEJpbmRpbmcKKworKiBDYWxsVGlwcworCisqIFBhcmVuTWF0Y2gKKworKiBBdXRvQ29tcGxldGUKKworKiBDb2RlQ29udGV4dAorCisqIFJzdHJpcEV4dGVuc2lvbgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1hcGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAppbmRleCAwMTIzNmZiLi5mYTczNmZlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbWFwbGliLnJzdApAQCAtNjksMTcgKzY5LDI1IEBACiAgICBUaGlzIGlzIGEgc3ViY2xhc3MgZGVyaXZlZCBmcm9tIDpjbGFzczpgSU1BUDRgIHRoYXQgY29ubmVjdHMgb3ZlciBhbiBTU0wKICAgIGVuY3J5cHRlZCBzb2NrZXQgKHRvIHVzZSB0aGlzIGNsYXNzIHlvdSBuZWVkIGEgc29ja2V0IG1vZHVsZSB0aGF0IHdhcyBjb21waWxlZAogICAgd2l0aCBTU0wgc3VwcG9ydCkuICBJZiAqaG9zdCogaXMgbm90IHNwZWNpZmllZCwgYGAnJ2BgICh0aGUgbG9jYWwgaG9zdCkgaXMgdXNlZC4KLSAgIElmICpwb3J0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgSU1BUDQtb3Zlci1TU0wgcG9ydCAoOTkzKSBpcyB1c2VkLiAgKmtleWZpbGUqCi0gICBhbmQgKmNlcnRmaWxlKiBhcmUgYWxzbyBvcHRpb25hbCAtIHRoZXkgY2FuIGNvbnRhaW4gYSBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5Ci0gICBhbmQgY2VydGlmaWNhdGUgY2hhaW4gZmlsZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLiAqc3NsX2NvbnRleHQqIHBhcmFtZXRlciBpcyBhCi0gICA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uCi0gICBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvIGEgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKQotICAgc3RydWN0dXJlLiBOb3RlIHRoYXQgdGhlICprZXlmaWxlKi8qY2VydGZpbGUqIHBhcmFtZXRlcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoICpzc2xfY29udGV4dCosCi0gICBhIDpjbGFzczpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmICprZXlmaWxlKi8qY2VydGZpbGUqIGlzIHByb3ZpZGVkIGFsb25nIHdpdGggKnNzbF9jb250ZXh0Ki4KKyAgIElmICpwb3J0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgSU1BUDQtb3Zlci1TU0wgcG9ydCAoOTkzKSBpcyB1c2VkLgorICAgKnNzbF9jb250ZXh0KiBpcyBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCB3aGljaCBhbGxvd3MgYnVuZGxpbmcKKyAgIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBrZXlzIGludG8gYSBzaW5nbGUKKyAgIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvcgorICAgYmVzdCBwcmFjdGljZXMuCisKKyAgICprZXlmaWxlKiBhbmQgKmNlcnRmaWxlKiBhcmUgYSBsZWdhY3kgYWx0ZXJuYXRpdmUgdG8gKnNzbF9jb250ZXh0KiAtIHRoZXkKKyAgIGNhbiBwb2ludCB0byBQRU0tZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlcyBmb3IKKyAgIHRoZSBTU0wgY29ubmVjdGlvbi4gIE5vdGUgdGhhdCB0aGUgKmtleWZpbGUqLypjZXJ0ZmlsZSogcGFyYW1ldGVycyBhcmUKKyAgIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoICpzc2xfY29udGV4dCosIGEgOmNsYXNzOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQKKyAgIGlmICprZXlmaWxlKi8qY2VydGZpbGUqIGlzIHByb3ZpZGVkIGFsb25nIHdpdGggKnNzbF9jb250ZXh0Ki4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpzc2xfY29udGV4dCogcGFyYW1ldGVyIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIGNsYXNzIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgc3NsLlNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWVgIGFuZCAqU2VydmVyIE5hbWUgSW5kaWNhdGlvbiogKHNlZQorICAgICAgOmRhdGE6YHNzbC5IQVNfU05JYCkuCiAKIFRoZSBzZWNvbmQgc3ViY2xhc3MgYWxsb3dzIGZvciBjb25uZWN0aW9ucyBjcmVhdGVkIGJ5IGEgY2hpbGQgcHJvY2VzczoKIApAQCAtNDMzLDEwICs0NDEsMTYgQEAKIAogICAgU2VuZCBhIGBgU1RBUlRUTFNgYCBjb21tYW5kLiAgVGhlICpzc2xfY29udGV4dCogYXJndW1lbnQgaXMgb3B0aW9uYWwKICAgIGFuZCBzaG91bGQgYmUgYSA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QuICBUaGlzIHdpbGwgZW5hYmxlCi0gICBlbmNyeXB0aW9uIG9uIHRoZSBJTUFQIGNvbm5lY3Rpb24uCisgICBlbmNyeXB0aW9uIG9uIHRoZSBJTUFQIGNvbm5lY3Rpb24uICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvcgorICAgYmVzdCBwcmFjdGljZXMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG1ldGhvZCBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgorCiAKIC4uIG1ldGhvZDo6IElNQVA0LnN0YXR1cyhtYWlsYm94LCBuYW1lcykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW1wLnJzdCBiL0RvYy9saWJyYXJ5L2ltcC5yc3QKaW5kZXggMzY0ZDgxZS4uODNhNTJlNCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW1wLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbXAucnN0CkBAIC0zLDcgKzMsMTAgQEAKIAogLi4gbW9kdWxlOjogaW1wCiAgICA6c3lub3BzaXM6IEFjY2VzcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGltcG9ydCBzdGF0ZW1lbnQuCisgICA6ZGVwcmVjYXRlZDoKIAorLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgVGhlIDptb2Q6YGltcGAgcGFja2FnZSBpcyBwZW5kaW5nIGRlcHJlY2F0aW9uIGluIGZhdm9yIG9mIDptb2Q6YGltcG9ydGxpYmAuCiAKIC4uIGluZGV4Ojogc3RhdGVtZW50OiBpbXBvcnQKIApAQCAtMTEsMTAgKzE0LDYgQEAKIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4gIEl0IGRlZmluZXMgdGhlIGZvbGxvd2luZyBjb25zdGFudHMgYW5kIGZ1bmN0aW9uczoKIAogCi0uLiBub3RlOjoKLSAgIE5ldyBwcm9ncmFtcyBzaG91bGQgdXNlIDptb2Q6YGltcG9ydGxpYmAgcmF0aGVyIHRoYW4gdGhpcyBtb2R1bGUuCi0KLQogLi4gZnVuY3Rpb246OiBnZXRfbWFnaWMoKQogCiAgICAuLiBpbmRleDo6IHBhaXI6IGZpbGU7IGJ5dGUtY29kZQpAQCAtMjIsNiArMjEsOSBAQAogICAgUmV0dXJuIHRoZSBtYWdpYyBzdHJpbmcgdmFsdWUgdXNlZCB0byByZWNvZ25pemUgYnl0ZS1jb21waWxlZCBjb2RlIGZpbGVzCiAgICAoOmZpbGU6YC5weWNgIGZpbGVzKS4gIChUaGlzIHZhbHVlIG1heSBiZSBkaWZmZXJlbnQgZm9yIGVhY2ggUHl0aG9uIHZlcnNpb24uKQogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgVXNlIDphdHRyOmBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVJgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBnZXRfc3VmZml4ZXMoKQogCkBAIC03Nyw3ICs3OSw5IEBACiAgICBXaGVuICpQKiBpdHNlbGYgaGFzIGEgZG90dGVkIG5hbWUsIGFwcGx5IHRoaXMgcmVjaXBlIHJlY3Vyc2l2ZWx5LgogCiAgICAuLiBkZXByZWNhdGVkOjogMy4zCi0gICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi5maW5kX2xvYWRlcmAgaW5zdGVhZC4KKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjYCBpbnN0ZWFkIHVubGVzcyBQeXRob24gMy4zCisgICAgICBjb21wYXRpYmlsaXR5IGlzIHJlcXVpcmVkLCBpbiB3aGljaCBjYXNlIHVzZQorICAgICAgOmZ1bmM6YGltcG9ydGxpYi5maW5kX2xvYWRlcmAuCiAKIAogLi4gZnVuY3Rpb246OiBsb2FkX21vZHVsZShuYW1lLCBmaWxlLCBwYXRobmFtZSwgZGVzY3JpcHRpb24pCkBAIC0xMDEsOCArMTA1LDEyIEBACiAgICB1c2luZyBhIDprZXl3b3JkOmB0cnlgIC4uLiA6a2V5d29yZDpgZmluYWxseWAgc3RhdGVtZW50LgogCiAgICAuLiBkZXByZWNhdGVkOjogMy4zCi0gICAgICBVbm5lZWRlZCBhcyBsb2FkZXJzIHNob3VsZCBiZSB1c2VkIHRvIGxvYWQgbW9kdWxlcyBhbmQKLSAgICAgIDpmdW5jOmBmaW5kX21vZHVsZWAgaXMgZGVwcmVjYXRlZC4KKyAgICAgIElmIHByZXZpb3VzbHkgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIDpmdW5jOmBpbXAuZmluZF9tb2R1bGVgIHRoZW4KKyAgICAgIGNvbnNpZGVyIHVzaW5nIDpmdW5jOmBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAsIG90aGVyd2lzZSB1c2UgdGhlIGxvYWRlcgorICAgICAgcmV0dXJuZWQgYnkgdGhlIHJlcGxhY2VtZW50IHlvdSBjaG9zZSBmb3IgOmZ1bmM6YGltcC5maW5kX21vZHVsZWAuIElmIHlvdQorICAgICAgY2FsbGVkIDpmdW5jOmBpbXAubG9hZF9tb2R1bGVgIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBkaXJlY3RseSB0aGVuIHVzZSB0aGUKKyAgICAgIGNsYXNzZXMgaW4gOm1vZDpgaW1wb3J0bGliLm1hY2hpbmVyeWAsIGUuZy4KKyAgICAgIGBgaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGgpLmxvYWRfbW9kdWxlKClgYC4KIAogCiAuLiBmdW5jdGlvbjo6IG5ld19tb2R1bGUobmFtZSkKQEAgLTExMCw2ICsxMTgsOSBAQAogICAgUmV0dXJuIGEgbmV3IGVtcHR5IG1vZHVsZSBvYmplY3QgY2FsbGVkICpuYW1lKi4gIFRoaXMgb2JqZWN0IGlzICpub3QqIGluc2VydGVkCiAgICBpbiBgYHN5cy5tb2R1bGVzYGAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6Y2xhc3M6YHR5cGVzLk1vZHVsZVR5cGVgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiByZWxvYWQobW9kdWxlKQogCkBAIC0xMzgsMTIgKzE0OSw2IEBACiAKICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBvdGhlciBjYXZlYXRzOgogCi0gICBJZiBhIG1vZHVsZSBpcyBzeW50YWN0aWNhbGx5IGNvcnJlY3QgYnV0IGl0cyBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIGZpcnN0Ci0gICA6a2V5d29yZDpgaW1wb3J0YCBzdGF0ZW1lbnQgZm9yIGl0IGRvZXMgbm90IGJpbmQgaXRzIG5hbWUgbG9jYWxseSwgYnV0IGRvZXMKLSAgIHN0b3JlIGEgKHBhcnRpYWxseSBpbml0aWFsaXplZCkgbW9kdWxlIG9iamVjdCBpbiBgYHN5cy5tb2R1bGVzYGAuICBUbyByZWxvYWQgdGhlCi0gICBtb2R1bGUgeW91IG11c3QgZmlyc3QgOmtleXdvcmQ6YGltcG9ydGAgaXQgYWdhaW4gKHRoaXMgd2lsbCBiaW5kIHRoZSBuYW1lIHRvIHRoZQotICAgcGFydGlhbGx5IGluaXRpYWxpemVkIG1vZHVsZSBvYmplY3QpIGJlZm9yZSB5b3UgY2FuIDpmdW5jOmByZWxvYWRgIGl0LgotCiAgICBXaGVuIGEgbW9kdWxlIGlzIHJlbG9hZGVkLCBpdHMgZGljdGlvbmFyeSAoY29udGFpbmluZyB0aGUgbW9kdWxlJ3MgZ2xvYmFsCiAgICB2YXJpYWJsZXMpIGlzIHJldGFpbmVkLiAgUmVkZWZpbml0aW9ucyBvZiBuYW1lcyB3aWxsIG92ZXJyaWRlIHRoZSBvbGQKICAgIGRlZmluaXRpb25zLCBzbyB0aGlzIGlzIGdlbmVyYWxseSBub3QgYSBwcm9ibGVtLiAgSWYgdGhlIG5ldyB2ZXJzaW9uIG9mIGEgbW9kdWxlCkBAIC0xNzYsNiArMTgxLDkgQEAKICAgICAgIFJlbGllcyBvbiBib3RoIGBgX19uYW1lX19gYCBhbmQgYGBfX2xvYWRlcl9fYGAgYmVpbmcgZGVmaW5lZCBvbiB0aGUgbW9kdWxlCiAgICAgICBiZWluZyByZWxvYWRlZCBpbnN0ZWFkIG9mIGp1c3QgYGBfX25hbWVfX2BgLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi5yZWxvYWRgIGluc3RlYWQuCisKIAogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXJlIGNvbnZlbmllbmNlcyBmb3IgaGFuZGxpbmcgOnBlcDpgMzE0N2AgYnl0ZS1jb21waWxlZAogZmlsZSBwYXRocy4KQEAgLTIwMSw2ICsyMDksOSBAQAogICAgICAgSWYgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIGBgTm9uZWBgLCB0aGVuCiAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpcyByYWlzZWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2VgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiBzb3VyY2VfZnJvbV9jYWNoZShwYXRoKQogCkBAIC0yMTYsMTQgKzIyNywxNyBAQAogICAgICAgUmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2hlbgogICAgICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLgogCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmZ1bmM6YGltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlYCBpbnN0ZWFkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X3RhZygpCiAKICAgIFJldHVybiB0aGUgOnBlcDpgMzE0N2AgbWFnaWMgdGFnIHN0cmluZyBtYXRjaGluZyB0aGlzIHZlcnNpb24gb2YgUHl0aG9uJ3MKICAgIG1hZ2ljIG51bWJlciwgYXMgcmV0dXJuZWQgYnkgOmZ1bmM6YGdldF9tYWdpY2AuCiAKLSAgIC4uIG5vdGU6OgotICAgICAgWW91IG1heSB1c2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCisgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICBVc2UgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGRpcmVjdGx5IHN0YXJ0aW5nCiAgICAgICBpbiBQeXRob24gMy4zLgogCiAKQEAgLTI0NiwxMCArMjYwLDEyIEBACiAgICBleGNlcHRpb24gaXMgbWFkZSBmb3IgY2lyY3VsYXIgaW1wb3J0cywgd2hpY2ggYnkgY29uc3RydWN0aW9uIGhhdmUgdG8KICAgIGV4cG9zZSBhbiBpbmNvbXBsZXRlIG1vZHVsZSBvYmplY3QgYXQgc29tZSBwb2ludC4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIFRoZSBsb2NraW5nIHNjaGVtZSBoYXMgY2hhbmdlZCB0byBwZXItbW9kdWxlIGxvY2tzIGZvcgotICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCi0gICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGNoYW5nZWQgdG8gcGVyLW1vZHVsZSBsb2NrcyBmb3IKKyAgICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAorICAgICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKIAogCiAuLiBmdW5jdGlvbjo6IGFjcXVpcmVfbG9jaygpCkBAIC0yNjQsMTAgKzI4MCwxMiBAQAogCiAgICBPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIFRoZSBsb2NraW5nIHNjaGVtZSBoYXMgY2hhbmdlZCB0byBwZXItbW9kdWxlIGxvY2tzIGZvcgotICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCi0gICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGNoYW5nZWQgdG8gcGVyLW1vZHVsZSBsb2NrcyBmb3IKKyAgICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAorICAgICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKIAogCiAuLiBmdW5jdGlvbjo6IHJlbGVhc2VfbG9jaygpCkBAIC0yNzUsMTAgKzI5MywxMiBAQAogICAgUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXIncyBnbG9iYWwgaW1wb3J0IGxvY2suIE9uIHBsYXRmb3JtcyB3aXRob3V0CiAgICB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIFRoZSBsb2NraW5nIHNjaGVtZSBoYXMgY2hhbmdlZCB0byBwZXItbW9kdWxlIGxvY2tzIGZvcgotICAgdGhlIG1vc3QgcGFydC4gIEEgZ2xvYmFsIGltcG9ydCBsb2NrIGlzIGtlcHQgZm9yIHNvbWUgY3JpdGljYWwgdGFza3MsCi0gICBzdWNoIGFzIGluaXRpYWxpemluZyB0aGUgcGVyLW1vZHVsZSBsb2Nrcy4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBUaGUgbG9ja2luZyBzY2hlbWUgaGFzIGNoYW5nZWQgdG8gcGVyLW1vZHVsZSBsb2NrcyBmb3IKKyAgICAgIHRoZSBtb3N0IHBhcnQuICBBIGdsb2JhbCBpbXBvcnQgbG9jayBpcyBrZXB0IGZvciBzb21lIGNyaXRpY2FsIHRhc2tzLAorICAgICAgc3VjaCBhcyBpbml0aWFsaXppbmcgdGhlIHBlci1tb2R1bGUgbG9ja3MuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKIAogCiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3aXRoIGludGVnZXIgdmFsdWVzLCBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLCBhcmUgdXNlZApAQCAtMzQ1LDYgKzM2NSw5IEBACiAgICAgICBgYE5vbmVgYCBpcyBpbnNlcnRlZCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkIG9mIGFuCiAgICAgICBpbnN0YW5jZSBvZiA6Y2xhc3M6YE51bGxJbXBvcnRlcmAuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIEluc2VydCBgYE5vbmVgYCBpbnRvIGBgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgYCBpbnN0ZWFkLgorCiAKIC4uIF9leGFtcGxlcy1pbXA6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9pbXBvcnRsaWIucnN0CmluZGV4IDVmNzQwYTIuLjQyODEyZjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ltcG9ydGxpYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW1wb3J0bGliLnJzdApAQCAtMjksNyArMjksNyBAQAogICAgIDpyZWY6YGltcG9ydGAKICAgICAgICAgVGhlIGxhbmd1YWdlIHJlZmVyZW5jZSBmb3IgdGhlIDprZXl3b3JkOmBpbXBvcnRgIHN0YXRlbWVudC4KIAotICAgIGBQYWNrYWdlcyBzcGVjaWZpY2F0aW9uIDxodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG9jL2Vzc2F5cy9wYWNrYWdlcy5odG1sPmBfXworICAgIGBQYWNrYWdlcyBzcGVjaWZpY2F0aW9uIDxodHRwOi8vbGVnYWN5LnB5dGhvbi5vcmcvZG9jL2Vzc2F5cy9wYWNrYWdlcy5odG1sPmBfXwogICAgICAgICBPcmlnaW5hbCBzcGVjaWZpY2F0aW9uIG9mIHBhY2thZ2VzLiBTb21lIHNlbWFudGljcyBoYXZlIGNoYW5nZWQgc2luY2UKICAgICAgICAgdGhlIHdyaXRpbmcgb2YgdGhpcyBkb2N1bWVudCAoZS5nLiByZWRpcmVjdGluZyBiYXNlZCBvbiBgYE5vbmVgYAogICAgICAgICBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgKS4KQEAgLTk1LDcgKzk1LDcgQEAKIAogICAgRmluZCB0aGUgbG9hZGVyIGZvciBhIG1vZHVsZSwgb3B0aW9uYWxseSB3aXRoaW4gdGhlIHNwZWNpZmllZCAqcGF0aCouIElmIHRoZQogICAgbW9kdWxlIGlzIGluIDphdHRyOmBzeXMubW9kdWxlc2AsIHRoZW4gYGBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fYGAgaXMKLSAgIHJldHVybmVkICh1bmxlc3MgdGhlIGxvYWRlciB3b3VsZCBiZSBgYE5vbmVgYCwgaW4gd2hpY2ggY2FzZQorICAgcmV0dXJuZWQgKHVubGVzcyB0aGUgbG9hZGVyIHdvdWxkIGJlIGBgTm9uZWBgIG9yIGlzIG5vdCBzZXQsIGluIHdoaWNoIGNhc2UKICAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCkuIE90aGVyd2lzZSBhIHNlYXJjaCB1c2luZyA6YXR0cjpgc3lzLm1ldGFfcGF0aGAKICAgIGlzIGRvbmUuIGBgTm9uZWBgIGlzIHJldHVybmVkIGlmIG5vIGxvYWRlciBpcyBmb3VuZC4KIApAQCAtMTA0LDYgKzEwNCwxNSBAQAogICAgd2lsbCBuZWVkIHRvIGltcG9ydCBhbGwgcGFyZW50IHBhY2thZ2VzIG9mIHRoZSBzdWJtb2R1bGUgYW5kIHVzZSB0aGUgY29ycmVjdAogICAgYXJndW1lbnQgdG8gKnBhdGgqLgogCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmIGBgX19sb2FkZXJfX2BgIGlzIG5vdCBzZXQsIHJhaXNlIDpleGM6YFZhbHVlRXJyb3JgLCBqdXN0IGxpa2Ugd2hlbiB0aGUKKyAgICAgIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYGBOb25lYGAuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFVzZSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjYCBpbnN0ZWFkLgorCiAuLiBmdW5jdGlvbjo6IGludmFsaWRhdGVfY2FjaGVzKCkKIAogICAgSW52YWxpZGF0ZSB0aGUgaW50ZXJuYWwgY2FjaGVzIG9mIGZpbmRlcnMgc3RvcmVkIGF0CkBAIC0xMTQsNiArMTIzLDY4IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisuLiBmdW5jdGlvbjo6IHJlbG9hZChtb2R1bGUpCisKKyAgIFJlbG9hZCBhIHByZXZpb3VzbHkgaW1wb3J0ZWQgKm1vZHVsZSouICBUaGUgYXJndW1lbnQgbXVzdCBiZSBhIG1vZHVsZSBvYmplY3QsCisgICBzbyBpdCBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgYmVmb3JlLiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91CisgICBoYXZlIGVkaXRlZCB0aGUgbW9kdWxlIHNvdXJjZSBmaWxlIHVzaW5nIGFuIGV4dGVybmFsIGVkaXRvciBhbmQgd2FudCB0byB0cnkKKyAgIG91dCB0aGUgbmV3IHZlcnNpb24gd2l0aG91dCBsZWF2aW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIuICBUaGUgcmV0dXJuIHZhbHVlCisgICBpcyB0aGUgbW9kdWxlIG9iamVjdCAod2hpY2ggY2FuIGJlIGRpZmZlcmVudCBpZiByZS1pbXBvcnRpbmcgY2F1c2VzIGEKKyAgIGRpZmZlcmVudCBvYmplY3QgdG8gYmUgcGxhY2VkIGluIDpkYXRhOmBzeXMubW9kdWxlc2ApLgorCisgICBXaGVuIDpmdW5jOmByZWxvYWRgIGlzIGV4ZWN1dGVkOgorCisgICAqIFB5dGhvbiBtb2R1bGUncyBjb2RlIGlzIHJlY29tcGlsZWQgYW5kIHRoZSBtb2R1bGUtbGV2ZWwgY29kZSByZS1leGVjdXRlZCwKKyAgICAgZGVmaW5pbmcgYSBuZXcgc2V0IG9mIG9iamVjdHMgd2hpY2ggYXJlIGJvdW5kIHRvIG5hbWVzIGluIHRoZSBtb2R1bGUncworICAgICBkaWN0aW9uYXJ5IGJ5IHJldXNpbmcgdGhlIDp0ZXJtOmBsb2FkZXJgIHdoaWNoIG9yaWdpbmFsbHkgbG9hZGVkIHRoZQorICAgICBtb2R1bGUuICBUaGUgYGBpbml0YGAgZnVuY3Rpb24gb2YgZXh0ZW5zaW9uIG1vZHVsZXMgaXMgbm90IGNhbGxlZCBhIHNlY29uZAorICAgICB0aW1lLgorCisgICAqIEFzIHdpdGggYWxsIG90aGVyIG9iamVjdHMgaW4gUHl0aG9uIHRoZSBvbGQgb2JqZWN0cyBhcmUgb25seSByZWNsYWltZWQKKyAgICAgYWZ0ZXIgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBkcm9wIHRvIHplcm8uCisKKyAgICogVGhlIG5hbWVzIGluIHRoZSBtb2R1bGUgbmFtZXNwYWNlIGFyZSB1cGRhdGVkIHRvIHBvaW50IHRvIGFueSBuZXcgb3IKKyAgICAgY2hhbmdlZCBvYmplY3RzLgorCisgICAqIE90aGVyIHJlZmVyZW5jZXMgdG8gdGhlIG9sZCBvYmplY3RzIChzdWNoIGFzIG5hbWVzIGV4dGVybmFsIHRvIHRoZSBtb2R1bGUpIGFyZQorICAgICBub3QgcmVib3VuZCB0byByZWZlciB0byB0aGUgbmV3IG9iamVjdHMgYW5kIG11c3QgYmUgdXBkYXRlZCBpbiBlYWNoIG5hbWVzcGFjZQorICAgICB3aGVyZSB0aGV5IG9jY3VyIGlmIHRoYXQgaXMgZGVzaXJlZC4KKworICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIG90aGVyIGNhdmVhdHM6CisKKyAgIFdoZW4gYSBtb2R1bGUgaXMgcmVsb2FkZWQsIGl0cyBkaWN0aW9uYXJ5IChjb250YWluaW5nIHRoZSBtb2R1bGUncyBnbG9iYWwKKyAgIHZhcmlhYmxlcykgaXMgcmV0YWluZWQuICBSZWRlZmluaXRpb25zIG9mIG5hbWVzIHdpbGwgb3ZlcnJpZGUgdGhlIG9sZAorICAgZGVmaW5pdGlvbnMsIHNvIHRoaXMgaXMgZ2VuZXJhbGx5IG5vdCBhIHByb2JsZW0uICBJZiB0aGUgbmV3IHZlcnNpb24gb2YgYQorICAgbW9kdWxlIGRvZXMgbm90IGRlZmluZSBhIG5hbWUgdGhhdCB3YXMgZGVmaW5lZCBieSB0aGUgb2xkIHZlcnNpb24sIHRoZSBvbGQKKyAgIGRlZmluaXRpb24gcmVtYWlucy4gIFRoaXMgZmVhdHVyZSBjYW4gYmUgdXNlZCB0byB0aGUgbW9kdWxlJ3MgYWR2YW50YWdlIGlmIGl0CisgICBtYWludGFpbnMgYSBnbG9iYWwgdGFibGUgb3IgY2FjaGUgb2Ygb2JqZWN0cyAtLS0gd2l0aCBhIDprZXl3b3JkOmB0cnlgCisgICBzdGF0ZW1lbnQgaXQgY2FuIHRlc3QgZm9yIHRoZSB0YWJsZSdzIHByZXNlbmNlIGFuZCBza2lwIGl0cyBpbml0aWFsaXphdGlvbiBpZgorICAgZGVzaXJlZDo6CisKKyAgICAgIHRyeToKKyAgICAgICAgICBjYWNoZQorICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAgICAgICBjYWNoZSA9IHt9CisKKyAgIEl0IGlzIGdlbmVyYWxseSBub3QgdmVyeSB1c2VmdWwgdG8gcmVsb2FkIGJ1aWx0LWluIG9yIGR5bmFtaWNhbGx5IGxvYWRlZAorICAgbW9kdWxlcy4gIFJlbG9hZGluZyA6bW9kOmBzeXNgLCA6bW9kOmBfX21haW5fX2AsIDptb2Q6YGJ1aWx0aW5zYCBhbmQgb3RoZXIKKyAgIGtleSBtb2R1bGVzIGlzIG5vdCByZWNvbW1lbmRlZC4gIEluIG1hbnkgY2FzZXMgZXh0ZW5zaW9uIG1vZHVsZXMgYXJlIG5vdAorICAgZGVzaWduZWQgdG8gYmUgaW5pdGlhbGl6ZWQgbW9yZSB0aGFuIG9uY2UsIGFuZCBtYXkgZmFpbCBpbiBhcmJpdHJhcnkgd2F5cworICAgd2hlbiByZWxvYWRlZC4KKworICAgSWYgYSBtb2R1bGUgaW1wb3J0cyBvYmplY3RzIGZyb20gYW5vdGhlciBtb2R1bGUgdXNpbmcgOmtleXdvcmQ6YGZyb21gIC4uLgorICAgOmtleXdvcmQ6YGltcG9ydGAgLi4uLCBjYWxsaW5nIDpmdW5jOmByZWxvYWRgIGZvciB0aGUgb3RoZXIgbW9kdWxlIGRvZXMgbm90CisgICByZWRlZmluZSB0aGUgb2JqZWN0cyBpbXBvcnRlZCBmcm9tIGl0IC0tLSBvbmUgd2F5IGFyb3VuZCB0aGlzIGlzIHRvCisgICByZS1leGVjdXRlIHRoZSA6a2V5d29yZDpgZnJvbWAgc3RhdGVtZW50LCBhbm90aGVyIGlzIHRvIHVzZSA6a2V5d29yZDpgaW1wb3J0YAorICAgYW5kIHF1YWxpZmllZCBuYW1lcyAoKm1vZHVsZS5uYW1lKikgaW5zdGVhZC4KKworICAgSWYgYSBtb2R1bGUgaW5zdGFudGlhdGVzIGluc3RhbmNlcyBvZiBhIGNsYXNzLCByZWxvYWRpbmcgdGhlIG1vZHVsZSB0aGF0CisgICBkZWZpbmVzIHRoZSBjbGFzcyBkb2VzIG5vdCBhZmZlY3QgdGhlIG1ldGhvZCBkZWZpbml0aW9ucyBvZiB0aGUgaW5zdGFuY2VzIC0tLQorICAgdGhleSBjb250aW51ZSB0byB1c2UgdGhlIG9sZCBjbGFzcyBkZWZpbml0aW9uLiAgVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgZGVyaXZlZAorICAgY2xhc3Nlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogOm1vZDpgaW1wb3J0bGliLmFiY2AgLS0gQWJzdHJhY3QgYmFzZSBjbGFzc2VzIHJlbGF0ZWQgdG8gaW1wb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzNyw4ICsyMDgsNiBAQAogICAgICAgICAgICAgICAgKy0tIEV4ZWN1dGlvbkxvYWRlciAtLSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0gRmlsZUxvYWRlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBTb3VyY2VMb2FkZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBQeUxvYWRlciAoZGVwcmVjYXRlZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLSBQeVB5Y0xvYWRlciAoZGVwcmVjYXRlZCkKIAogCiAuLiBjbGFzczo6IEZpbmRlcgpAQCAtMTU0LDYgKzIyMywxMCBAQAogICAgICAgbW9kdWxlLiAgT3JpZ2luYWxseSBzcGVjaWZpZWQgaW4gOnBlcDpgMzAyYCwgdGhpcyBtZXRob2Qgd2FzIG1lYW50CiAgICAgICBmb3IgdXNlIGluIDpkYXRhOmBzeXMubWV0YV9wYXRoYCBhbmQgaW4gdGhlIHBhdGgtYmFzZWQgaW1wb3J0IHN1YnN5c3RlbS4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBOb25lYGAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZiByYWlzaW5nCisgICAgICAgICA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogCiAuLiBjbGFzczo6IE1ldGFQYXRoRmluZGVyCiAKQEAgLTE2MiwyMCArMjM1LDQ2IEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAuLiBtZXRob2Q6OiBmaW5kX3NwZWMoZnVsbG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKQorCisgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgZm9yIGZpbmRpbmcgYSA6dGVybTpgc3BlYyA8bW9kdWxlIHNwZWM+YCBmb3IKKyAgICAgIHRoZSBzcGVjaWZpZWQgbW9kdWxlLiAgSWYgdGhpcyBpcyBhIHRvcC1sZXZlbCBpbXBvcnQsICpwYXRoKiB3aWxsCisgICAgICBiZSBgYE5vbmVgYC4gIE90aGVyd2lzZSwgdGhpcyBpcyBhIHNlYXJjaCBmb3IgYSBzdWJwYWNrYWdlIG9yCisgICAgICBtb2R1bGUgYW5kICpwYXRoKiB3aWxsIGJlIHRoZSB2YWx1ZSBvZiA6YXR0cjpgX19wYXRoX19gIGZyb20gdGhlCisgICAgICBwYXJlbnQgcGFja2FnZS4gSWYgYSBzcGVjIGNhbm5vdCBiZSBmb3VuZCwgYGBOb25lYGAgaXMgcmV0dXJuZWQuCisgICAgICBXaGVuIHBhc3NlZCBpbiwgYGB0YXJnZXRgYCBpcyBhIG1vZHVsZSBvYmplY3QgdGhhdCB0aGUgZmluZGVyIG1heQorICAgICAgdXNlIHRvIG1ha2UgYSBtb3JlIGVkdWNhdGVkIGFib3V0IHdoYXQgc3BlYyB0byByZXR1cm4uCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBtZXRob2Q6OiBmaW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aCkKIAotICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIGZvciBmaW5kaW5nIGEgOnRlcm06YGxvYWRlcmAgZm9yIHRoZSBzcGVjaWZpZWQKKyAgICAgIEEgbGVnYWN5IG1ldGhvZCBmb3IgZmluZGluZyBhIDp0ZXJtOmBsb2FkZXJgIGZvciB0aGUgc3BlY2lmaWVkCiAgICAgICBtb2R1bGUuICBJZiB0aGlzIGlzIGEgdG9wLWxldmVsIGltcG9ydCwgKnBhdGgqIHdpbGwgYmUgYGBOb25lYGAuCiAgICAgICBPdGhlcndpc2UsIHRoaXMgaXMgYSBzZWFyY2ggZm9yIGEgc3VicGFja2FnZSBvciBtb2R1bGUgYW5kICpwYXRoKgogICAgICAgd2lsbCBiZSB0aGUgdmFsdWUgb2YgOmF0dHI6YF9fcGF0aF9fYCBmcm9tIHRoZSBwYXJlbnQKICAgICAgIHBhY2thZ2UuIElmIGEgbG9hZGVyIGNhbm5vdCBiZSBmb3VuZCwgYGBOb25lYGAgaXMgcmV0dXJuZWQuCiAKKyAgICAgIElmIDptZXRoOmBmaW5kX3NwZWNgIGlzIGRlZmluZWQsIGJhY2t3YXJkcy1jb21wYXRpYmxlIGZ1bmN0aW9uYWxpdHkgaXMKKyAgICAgIHByb3ZpZGVkLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgUmV0dXJucyBgYE5vbmVgYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLiBDYW4gdXNlIDptZXRoOmBmaW5kX3NwZWNgIHRvIHByb3ZpZGUKKyAgICAgICAgIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgIFVzZSA6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkLgorCiAgICAuLiBtZXRob2Q6OiBpbnZhbGlkYXRlX2NhY2hlcygpCiAKICAgICAgIEFuIG9wdGlvbmFsIG1ldGhvZCB3aGljaCwgd2hlbiBjYWxsZWQsIHNob3VsZCBpbnZhbGlkYXRlIGFueSBpbnRlcm5hbAogICAgICAgY2FjaGUgdXNlZCBieSB0aGUgZmluZGVyLiBVc2VkIGJ5IDpmdW5jOmBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXNgCiAgICAgICB3aGVuIGludmFsaWRhdGluZyB0aGUgY2FjaGVzIG9mIGFsbCBmaW5kZXJzIG9uIDpkYXRhOmBzeXMubWV0YV9wYXRoYC4KIAorICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgIFJldHVybnMgYGBOb25lYGAgd2hlbiBjYWxsZWQgaW5zdGVhZCBvZiBgYE5vdEltcGxlbWVudGVkYGAuCisKIAogLi4gY2xhc3M6OiBQYXRoRW50cnlGaW5kZXIKIApAQCAtMTgzLDI3ICsyODIsNTEgQEAKICAgIGl0IGJlYXJzIHNvbWUgc2ltaWxhcml0aWVzIHRvIDpjbGFzczpgTWV0YVBhdGhGaW5kZXJgLCBgYFBhdGhFbnRyeUZpbmRlcmBgCiAgICBpcyBtZWFudCBmb3IgdXNlIG9ubHkgd2l0aGluIHRoZSBwYXRoLWJhc2VkIGltcG9ydCBzdWJzeXN0ZW0gcHJvdmlkZWQKICAgIGJ5IDpjbGFzczpgUGF0aEZpbmRlcmAuIFRoaXMgQUJDIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBGaW5kZXJgIGZvcgotICAgY29tcGF0aWJpbGl0eS4KKyAgIGNvbXBhdGliaWxpdHkgcmVhc29ucyBvbmx5LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gbWV0aG9kOjogZmluZF9zcGVjKGZ1bGxuYW1lLCB0YXJnZXQ9Tm9uZSkKKworICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIGZvciBmaW5kaW5nIGEgOnRlcm06YHNwZWMgPG1vZHVsZSBzcGVjPmAgZm9yCisgICAgICB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gIFRoZSBmaW5kZXIgd2lsbCBzZWFyY2ggZm9yIHRoZSBtb2R1bGUgb25seQorICAgICAgd2l0aGluIHRoZSA6dGVybTpgcGF0aCBlbnRyeWAgdG8gd2hpY2ggaXQgaXMgYXNzaWduZWQuICBJZiBhIHNwZWMKKyAgICAgIGNhbm5vdCBiZSBmb3VuZCwgYGBOb25lYGAgaXMgcmV0dXJuZWQuICBXaGVuIHBhc3NlZCBpbiwgYGB0YXJnZXRgYAorICAgICAgaXMgYSBtb2R1bGUgb2JqZWN0IHRoYXQgdGhlIGZpbmRlciBtYXkgdXNlIHRvIG1ha2UgYSBtb3JlIGVkdWNhdGVkCisgICAgICBhYm91dCB3aGF0IHNwZWMgdG8gcmV0dXJuLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgLi4gbWV0aG9kOjogZmluZF9sb2FkZXIoZnVsbG5hbWUpCiAKLSAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCBmb3IgZmluZGluZyBhIDp0ZXJtOmBsb2FkZXJgIGZvciB0aGUgc3BlY2lmaWVkCisgICAgICBBIGxlZ2FjeSBtZXRob2QgZm9yIGZpbmRpbmcgYSA6dGVybTpgbG9hZGVyYCBmb3IgdGhlIHNwZWNpZmllZAogICAgICAgbW9kdWxlLiAgUmV0dXJucyBhIDItdHVwbGUgb2YgYGAobG9hZGVyLCBwb3J0aW9uKWBgIHdoZXJlIGBgcG9ydGlvbmBgCiAgICAgICBpcyBhIHNlcXVlbmNlIG9mIGZpbGUgc3lzdGVtIGxvY2F0aW9ucyBjb250cmlidXRpbmcgdG8gcGFydCBvZiBhIG5hbWVzcGFjZQogICAgICAgcGFja2FnZS4gVGhlIGxvYWRlciBtYXkgYmUgYGBOb25lYGAgd2hpbGUgc3BlY2lmeWluZyBgYHBvcnRpb25gYCB0bwogICAgICAgc2lnbmlmeSB0aGUgY29udHJpYnV0aW9uIG9mIHRoZSBmaWxlIHN5c3RlbSBsb2NhdGlvbnMgdG8gYSBuYW1lc3BhY2UKICAgICAgIHBhY2thZ2UuIEFuIGVtcHR5IGxpc3QgY2FuIGJlIHVzZWQgZm9yIGBgcG9ydGlvbmBgIHRvIHNpZ25pZnkgdGhlIGxvYWRlcgotICAgICAgaXMgbm90IHBhcnQgb2YgYSBwYWNrYWdlLiBJZiBgYGxvYWRlcmBgIGlzIGBgTm9uZWBgIGFuZCBgYHBvcnRpb25gYCBpcwotICAgICAgdGhlIGVtcHR5IGxpc3QgdGhlbiBubyBsb2FkZXIgb3IgbG9jYXRpb24gZm9yIGEgbmFtZXNwYWNlIHBhY2thZ2Ugd2VyZQotICAgICAgZm91bmQgKGkuZS4gZmFpbHVyZSB0byBmaW5kIGFueXRoaW5nIGZvciB0aGUgbW9kdWxlKS4KKyAgICAgIGlzIG5vdCBwYXJ0IG9mIGEgbmFtZXNwYWNlIHBhY2thZ2UuIElmIGBgbG9hZGVyYGAgaXMgYGBOb25lYGAgYW5kCisgICAgICBgYHBvcnRpb25gYCBpcyB0aGUgZW1wdHkgbGlzdCB0aGVuIG5vIGxvYWRlciBvciBsb2NhdGlvbiBmb3IgYSBuYW1lc3BhY2UKKyAgICAgIHBhY2thZ2Ugd2VyZSBmb3VuZCAoaS5lLiBmYWlsdXJlIHRvIGZpbmQgYW55dGhpbmcgZm9yIHRoZSBtb2R1bGUpLgorCisgICAgICBJZiA6bWV0aDpgZmluZF9zcGVjYCBpcyBkZWZpbmVkIHRoZW4gYmFja3dhcmRzLWNvbXBhdGlibGUgZnVuY3Rpb25hbGl0eSBpcworICAgICAgcHJvdmlkZWQuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgKE5vbmUsIFtdKWBgIGluc3RlYWQgb2YgcmFpc2luZyA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKyAgICAgICAgIFVzZXMgOm1ldGg6YGZpbmRfc3BlY2Agd2hlbiBhdmFpbGFibGUgdG8gcHJvdmlkZSBmdW5jdGlvbmFsaXR5LgorCisgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICBVc2UgOm1ldGg6YGZpbmRfc3BlY2AgaW5zdGVhZC4KIAogICAgLi4gbWV0aG9kOjogZmluZF9tb2R1bGUoZnVsbG5hbWUpCiAKICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YEZpbmRlci5maW5kX21vZHVsZWAgd2hpY2ggaXMKICAgICAgIGVxdWl2YWxlbnQgdG8gYGBzZWxmLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKVswXWBgLgogCisgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICBVc2UgOm1ldGg6YGZpbmRfc3BlY2AgaW5zdGVhZC4KKwogICAgLi4gbWV0aG9kOjogaW52YWxpZGF0ZV9jYWNoZXMoKQogCiAgICAgICBBbiBvcHRpb25hbCBtZXRob2Qgd2hpY2gsIHdoZW4gY2FsbGVkLCBzaG91bGQgaW52YWxpZGF0ZSBhbnkgaW50ZXJuYWwKQEAgLTIxNiw5ICszMzksMjYgQEAKICAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBhIDp0ZXJtOmBsb2FkZXJgLgogICAgIFNlZSA6cGVwOmAzMDJgIGZvciB0aGUgZXhhY3QgZGVmaW5pdGlvbiBmb3IgYSBsb2FkZXIuCiAKKyAgICAuLiBtZXRob2Q6OiBjcmVhdGVfbW9kdWxlKHNwZWMpCisKKyAgICAgICBBbiBvcHRpb25hbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgb2JqZWN0IHRvIHVzZSB3aGVuCisgICAgICAgaW1wb3J0aW5nIGEgbW9kdWxlLiAgY3JlYXRlX21vZHVsZSgpIG1heSBhbHNvIHJldHVybiBgYE5vbmVgYCwKKyAgICAgICBpbmRpY2F0aW5nIHRoYXQgdGhlIGRlZmF1bHQgbW9kdWxlIGNyZWF0aW9uIHNob3VsZCB0YWtlIHBsYWNlCisgICAgICAgaW5zdGVhZC4KKworICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAgLi4gbWV0aG9kOjogZXhlY19tb2R1bGUobW9kdWxlKQorCisgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgZXhlY3V0ZXMgdGhlIG1vZHVsZSBpbiBpdHMgb3duIG5hbWVzcGFjZQorICAgICAgIHdoZW4gYSBtb2R1bGUgaXMgaW1wb3J0ZWQgb3IgcmVsb2FkZWQuICBUaGUgbW9kdWxlIHNob3VsZCBhbHJlYWR5CisgICAgICAgYmUgaW5pdGlhbGl6ZWQgd2hlbiBleGVjX21vZHVsZSgpIGlzIGNhbGxlZC4KKworICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUoZnVsbG5hbWUpCiAKLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIGZvciBsb2FkaW5nIGEgbW9kdWxlLiBJZiB0aGUgbW9kdWxlIGNhbm5vdCBiZQorICAgICAgICBBIGxlZ2FjeSBtZXRob2QgZm9yIGxvYWRpbmcgYSBtb2R1bGUuIElmIHRoZSBtb2R1bGUgY2Fubm90IGJlCiAgICAgICAgIGxvYWRlZCwgOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZCwgb3RoZXJ3aXNlIHRoZSBsb2FkZWQgbW9kdWxlIGlzCiAgICAgICAgIHJldHVybmVkLgogCkBAIC0yMjksMTIgKzM2OSwxMSBAQAogICAgICAgICBmcm9tIHRoZSBpbXBvcnQuIElmIHRoZSBsb2FkZXIgaW5zZXJ0ZWQgYSBtb2R1bGUgYW5kIHRoZSBsb2FkIGZhaWxzLCBpdAogICAgICAgICBtdXN0IGJlIHJlbW92ZWQgYnkgdGhlIGxvYWRlciBmcm9tIDpkYXRhOmBzeXMubW9kdWxlc2A7IG1vZHVsZXMgYWxyZWFkeQogICAgICAgICBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIGJlZm9yZSB0aGUgbG9hZGVyIGJlZ2FuIGV4ZWN1dGlvbiBzaG91bGQgYmUgbGVmdAotICAgICAgICBhbG9uZS4gVGhlIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGhhbmRsZXMKLSAgICAgICAgYWxsIG9mIHRoZXNlIGRldGFpbHMuCisgICAgICAgIGFsb25lIChzZWUgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCkuCiAKICAgICAgICAgVGhlIGxvYWRlciBzaG91bGQgc2V0IHNldmVyYWwgYXR0cmlidXRlcyBvbiB0aGUgbW9kdWxlLgogICAgICAgICAoTm90ZSB0aGF0IHNvbWUgb2YgdGhlc2UgYXR0cmlidXRlcyBjYW4gY2hhbmdlIHdoZW4gYSBtb2R1bGUgaXMKLSAgICAgICAgcmVsb2FkZWQuKQorICAgICAgICByZWxvYWRlZCk6CiAKICAgICAgICAgLSA6YXR0cjpgX19uYW1lX19gCiAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlLgpAQCAtMjU0LDIwICszOTMsNDIgQEAKICAgICAgICAgLSA6YXR0cjpgX19wYWNrYWdlX19gCiAgICAgICAgICAgICBUaGUgcGFyZW50IHBhY2thZ2UgZm9yIHRoZSBtb2R1bGUvcGFja2FnZS4gSWYgdGhlIG1vZHVsZSBpcwogICAgICAgICAgICAgdG9wLWxldmVsIHRoZW4gaXQgaGFzIGEgdmFsdWUgb2YgdGhlIGVtcHR5IHN0cmluZy4gVGhlCi0gICAgICAgICAgICA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuc2V0X3BhY2thZ2VgIGRlY29yYXRvciBjYW4gaGFuZGxlIHRoZSBkZXRhaWxzCi0gICAgICAgICAgICBmb3IgOmF0dHI6YF9fcGFja2FnZV9fYC4KKyAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICAgICBkZXRhaWxzIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgogCiAgICAgICAgIC0gOmF0dHI6YF9fbG9hZGVyX19gCi0gICAgICAgICAgICBUaGUgbG9hZGVyIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLgotICAgICAgICAgICAgKFRoaXMgaXMgbm90IHNldCBieSB0aGUgYnVpbHQtaW4gaW1wb3J0IG1hY2hpbmVyeSwKLSAgICAgICAgICAgIGJ1dCBpdCBzaG91bGQgYmUgc2V0IHdoZW5ldmVyIGEgOnRlcm06YGxvYWRlcmAgaXMgdXNlZC4pCisgICAgICAgICAgICBUaGUgbG9hZGVyIHVzZWQgdG8gbG9hZCB0aGUgbW9kdWxlLiBUaGUKKyAgICAgICAgICAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcmAgZGVjb3JhdG9yIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICAgICBkZXRhaWxzIGZvciA6YXR0cjpgX19wYWNrYWdlX19gLgorCisgICAgICAgIFdoZW4gOm1ldGg6YGV4ZWNfbW9kdWxlYCBpcyBhdmFpbGFibGUgdGhlbiBiYWNrd2FyZHMtY29tcGF0aWJsZQorICAgICAgICBmdW5jdGlvbmFsaXR5IGlzIHByb3ZpZGVkLgorCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlIDpleGM6YEltcG9ydEVycm9yYCB3aGVuIGNhbGxlZCBpbnN0ZWFkIG9mCisgICAgICAgICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLiBGdW5jdGlvbmFsaXR5IHByb3ZpZGVkIHdoZW4KKyAgICAgICAgICAgOm1ldGg6YGV4ZWNfbW9kdWxlYCBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgICBUaGUgcmVjb21tZW5kZWQgQVBJIGZvciBsb2FkaW5nIGEgbW9kdWxlIGlzIDptZXRoOmBleGVjX21vZHVsZWAKKyAgICAgICAgICAgKGFuZCBvcHRpb25hbGx5IDptZXRoOmBjcmVhdGVfbW9kdWxlYCkuICBMb2FkZXJzIHNob3VsZCBpbXBsZW1lbnQKKyAgICAgICAgICAgaXQgaW5zdGVhZCBvZiBsb2FkX21vZHVsZSgpLiAgVGhlIGltcG9ydCBtYWNoaW5lcnkgdGFrZXMgY2FyZSBvZgorICAgICAgICAgICBhbGwgdGhlIG90aGVyIHJlc3BvbnNpYmlsaXRpZXMgb2YgbG9hZF9tb2R1bGUoKSB3aGVuIGV4ZWNfbW9kdWxlKCkKKyAgICAgICAgICAgaXMgaW1wbGVtZW50ZWQuCiAKICAgICAuLiBtZXRob2Q6OiBtb2R1bGVfcmVwcihtb2R1bGUpCiAKLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKLSAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwciwgYXMgYSBzdHJpbmcuCisgICAgICAgIEEgbGVnYWN5IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIGNhbGN1bGF0ZXMgYW5kIHJldHVybnMgdGhlCisgICAgICAgIGdpdmVuIG1vZHVsZSdzIHJlcHIsIGFzIGEgc3RyaW5nLiBUaGUgbW9kdWxlIHR5cGUncyBkZWZhdWx0IHJlcHIoKSB3aWxsCisgICAgICAgIHVzZSB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIGFzIGFwcHJvcHJpYXRlLgogCi0gICAgICAgIC4uIHZlcnNpb25hZGRlZDogMy4zCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMworCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIE1hZGUgb3B0aW9uYWwgaW5zdGVhZCBvZiBhbiBhYnN0cmFjdG1ldGhvZC4KKworICAgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICAgIFRoZSBpbXBvcnQgbWFjaGluZXJ5IG5vdyB0YWtlcyBjYXJlIG9mIHRoaXMgYXV0b21hdGljYWxseS4KIAogCiAuLiBjbGFzczo6IFJlc291cmNlTG9hZGVyCkBAIC0yODIsMTAgKzQ0MywxMyBAQAogICAgICAgICBMb2FkZXJzIHRoYXQgaGF2ZSBhIGZpbGUtbGlrZSBzdG9yYWdlIGJhY2stZW5kCiAgICAgICAgIHRoYXQgYWxsb3dzIHN0b3JpbmcgYXJiaXRyYXJ5IGRhdGEKICAgICAgICAgY2FuIGltcGxlbWVudCB0aGlzIGFic3RyYWN0IG1ldGhvZCB0byBnaXZlIGRpcmVjdCBhY2Nlc3MKLSAgICAgICAgdG8gdGhlIGRhdGEgc3RvcmVkLiA6ZXhjOmBJT0Vycm9yYCBpcyB0byBiZSByYWlzZWQgaWYgdGhlICpwYXRoKiBjYW5ub3QKKyAgICAgICAgdG8gdGhlIGRhdGEgc3RvcmVkLiA6ZXhjOmBPU0Vycm9yYCBpcyB0byBiZSByYWlzZWQgaWYgdGhlICpwYXRoKiBjYW5ub3QKICAgICAgICAgYmUgZm91bmQuIFRoZSAqcGF0aCogaXMgZXhwZWN0ZWQgdG8gYmUgY29uc3RydWN0ZWQgdXNpbmcgYSBtb2R1bGUncwogICAgICAgICA6YXR0cjpgX19maWxlX19gIGF0dHJpYnV0ZSBvciBhbiBpdGVtIGZyb20gYSBwYWNrYWdlJ3MgOmF0dHI6YF9fcGF0aF9fYC4KIAorICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZXMgOmV4YzpgT1NFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogCiAuLiBjbGFzczo6IEluc3BlY3RMb2FkZXIKIApAQCAtMjk0LDE0ICs0NTgsMjEgQEAKIAogICAgIC4uIG1ldGhvZDo6IGdldF9jb2RlKGZ1bGxuYW1lKQogCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB0byByZXR1cm4gdGhlIDpjbGFzczpgY29kZWAgb2JqZWN0IGZvciBhIG1vZHVsZS4KLSAgICAgICAgYGBOb25lYGAgaXMgcmV0dXJuZWQgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdCBoYXZlIGEgY29kZSBvYmplY3QKLSAgICAgICAgKGUuZy4gYnVpbHQtaW4gbW9kdWxlKS4gIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQgaWYgbG9hZGVyIGNhbm5vdAotICAgICAgICBmaW5kIHRoZSByZXF1ZXN0ZWQgbW9kdWxlLgorICAgICAgICBSZXR1cm4gdGhlIGNvZGUgb2JqZWN0IGZvciBhIG1vZHVsZSwgb3IgYGBOb25lYGAgaWYgdGhlIG1vZHVsZSBkb2VzIG5vdAorICAgICAgICBoYXZlIGEgY29kZSBvYmplY3QgKGFzIHdvdWxkIGJlIHRoZSBjYXNlLCBmb3IgZXhhbXBsZSwgZm9yIGEgYnVpbHQtaW4KKyAgICAgICAgbW9kdWxlKS4gIFJhaXNlIGFuIDpleGM6YEltcG9ydEVycm9yYCBpZiBsb2FkZXIgY2Fubm90IGZpbmQgdGhlCisgICAgICAgIHJlcXVlc3RlZCBtb2R1bGUuCisKKyAgICAgICAgLi4gbm90ZTo6CisgICAgICAgICAgIFdoaWxlIHRoZSBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiwgaXQgaXMgc3VnZ2VzdGVkIHRoYXQKKyAgICAgICAgICAgaXQgYmUgb3ZlcnJpZGRlbiBpZiBwb3NzaWJsZSBmb3IgcGVyZm9ybWFuY2UuCiAKICAgICAgICAgLi4gaW5kZXg6OgogICAgICAgICAgICBzaW5nbGU6IHVuaXZlcnNhbCBuZXdsaW5lczsgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2UgbWV0aG9kCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTm8gbG9uZ2VyIGFic3RyYWN0IGFuZCBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkLgorCiAgICAgLi4gbWV0aG9kOjogZ2V0X3NvdXJjZShmdWxsbmFtZSkKIAogICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdG8gcmV0dXJuIHRoZSBzb3VyY2Ugb2YgYSBtb2R1bGUuIEl0IGlzIHJldHVybmVkIGFzCkBAIC0zMTAsMTIgKzQ4MSw0MiBAQAogICAgICAgICBpZiBubyBzb3VyY2UgaXMgYXZhaWxhYmxlIChlLmcuIGEgYnVpbHQtaW4gbW9kdWxlKS4gUmFpc2VzCiAgICAgICAgIDpleGM6YEltcG9ydEVycm9yYCBpZiB0aGUgbG9hZGVyIGNhbm5vdCBmaW5kIHRoZSBtb2R1bGUgc3BlY2lmaWVkLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKwogICAgIC4uIG1ldGhvZDo6IGlzX3BhY2thZ2UoZnVsbG5hbWUpCiAKICAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHRvIHJldHVybiBhIHRydWUgdmFsdWUgaWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UsIGEKICAgICAgICAgZmFsc2UgdmFsdWUgb3RoZXJ3aXNlLiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZQogICAgICAgICA6dGVybTpgbG9hZGVyYCBjYW5ub3QgZmluZCB0aGUgbW9kdWxlLgogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaW5zdGVhZCBvZiA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4KKworICAgIC4uIG1ldGhvZDo6IHNvdXJjZV90b19jb2RlKGRhdGEsIHBhdGg9JzxzdHJpbmc+JykKKworICAgICAgICBDcmVhdGUgYSBjb2RlIG9iamVjdCBmcm9tIFB5dGhvbiBzb3VyY2UuCisKKyAgICAgICAgVGhlICpkYXRhKiBhcmd1bWVudCBjYW4gYmUgd2hhdGV2ZXIgdGhlIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbgorICAgICAgICBzdXBwb3J0cyAoaS5lLiBzdHJpbmcgb3IgYnl0ZXMpLiBUaGUgKnBhdGgqIGFyZ3VtZW50IHNob3VsZCBiZQorICAgICAgICB0aGUgInBhdGgiIHRvIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBvcmlnaW5hdGVkIGZyb20sIHdoaWNoIGNhbiBiZSBhbgorICAgICAgICBhYnN0cmFjdCBjb25jZXB0IChlLmcuIGxvY2F0aW9uIGluIGEgemlwIGZpbGUpLgorCisgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAgLi4gbWV0aG9kOjogZXhlY19tb2R1bGUobW9kdWxlKQorCisgICAgICAgSW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5leGVjX21vZHVsZWAuCisKKyAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorCisgICAgICAgSW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YExvYWRlci5sb2FkX21vZHVsZWAuCisKKyAgICAgICAuLiBkZXByZWNhdGVkOjogMy40CisgICAgICAgICAgdXNlIDptZXRoOmBleGVjX21vZHVsZWAgaW5zdGVhZC4KKwogCiAuLiBjbGFzczo6IEV4ZWN1dGlvbkxvYWRlcgogCkBAIC0zMzMsNiArNTM0LDkgQEAKICAgICAgICAgdGhlIHNvdXJjZSBmaWxlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgYSBieXRlY29kZSB3YXMgdXNlZCB0byBsb2FkIHRoZQogICAgICAgICBtb2R1bGUuCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgUmFpc2VzIDpleGM6YEltcG9ydEVycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgorCiAKIC4uIGNsYXNzOjogRmlsZUxvYWRlcihmdWxsbmFtZSwgcGF0aCkKIApAQCAtMzU3LDEzICs1NjEsMTYgQEAKIAogICAgICAgQ2FsbHMgc3VwZXIncyBgYGxvYWRfbW9kdWxlKClgYC4KIAorICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgVXNlIDptZXRoOmBMb2FkZXIuZXhlY19tb2R1bGVgIGluc3RlYWQuCisKICAgIC4uIG1ldGhvZDo6IGdldF9maWxlbmFtZShmdWxsbmFtZSkKIAogICAgICAgUmV0dXJucyA6YXR0cjpgcGF0aGAuCiAKICAgIC4uIG1ldGhvZDo6IGdldF9kYXRhKHBhdGgpCiAKLSAgICAgIFJldHVybnMgdGhlIG9wZW4sIGJpbmFyeSBmaWxlIGZvciAqcGF0aCouCisgICAgICBSZWFkcyAqcGF0aCogYXMgYSBiaW5hcnkgZmlsZSBhbmQgcmV0dXJucyB0aGUgYnl0ZXMgZnJvbSBpdC4KIAogCiAuLiBjbGFzczo6IFNvdXJjZUxvYWRlcgpAQCAtMzc4LDcgKzU4NSw4IEBACiAgICAgICAgICAgbG9hZGluZyBpcyBub3Qgc3VwcG9ydGVkLgogCiAgICAgVGhlIGFic3RyYWN0IG1ldGhvZHMgZGVmaW5lZCBieSB0aGlzIGNsYXNzIGFyZSB0byBhZGQgb3B0aW9uYWwgYnl0ZWNvZGUKLSAgICBmaWxlIHN1cHBvcnQuIE5vdCBpbXBsZW1lbnRpbmcgdGhlc2Ugb3B0aW9uYWwgbWV0aG9kcyBjYXVzZXMgdGhlIGxvYWRlciB0bworICAgIGZpbGUgc3VwcG9ydC4gTm90IGltcGxlbWVudGluZyB0aGVzZSBvcHRpb25hbCBtZXRob2RzIChvciBjYXVzaW5nIHRoZW0gdG8KKyAgICByYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCkgY2F1c2VzIHRoZSBsb2FkZXIgdG8KICAgICBvbmx5IHdvcmsgd2l0aCBzb3VyY2UgY29kZS4gSW1wbGVtZW50aW5nIHRoZSBtZXRob2RzIGFsbG93cyB0aGUgbG9hZGVyIHRvCiAgICAgd29yayB3aXRoIHNvdXJjZSAqYW5kKiBieXRlY29kZSBmaWxlczsgaXQgZG9lcyBub3QgYWxsb3cgZm9yICpzb3VyY2VsZXNzKgogICAgIGxvYWRpbmcgd2hlcmUgb25seSBieXRlY29kZSBpcyBwcm92aWRlZC4gIEJ5dGVjb2RlIGZpbGVzIGFyZSBhbgpAQCAtMzk1LDEwICs2MDMsMTMgQEAKICAgICAgICAgLSBgYCdzaXplJ2BgIChvcHRpb25hbCk6IHRoZSBzaXplIGluIGJ5dGVzIG9mIHRoZSBzb3VyY2UgY29kZS4KIAogICAgICAgICBBbnkgb3RoZXIga2V5cyBpbiB0aGUgZGljdGlvbmFyeSBhcmUgaWdub3JlZCwgdG8gYWxsb3cgZm9yIGZ1dHVyZQotICAgICAgICBleHRlbnNpb25zLgorICAgICAgICBleHRlbnNpb25zLiBJZiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZCwgOmV4YzpgT1NFcnJvcmAgaXMgcmFpc2VkLgogCiAgICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCisgICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICAgIFJhaXNlIDpleGM6YE9TRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAuCisKICAgICAuLiBtZXRob2Q6OiBwYXRoX210aW1lKHBhdGgpCiAKICAgICAgICAgT3B0aW9uYWwgYWJzdHJhY3QgbWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUKQEAgLTQwNyw3ICs2MTgsMTAgQEAKICAgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuMwogICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiA6bWV0aDpgcGF0aF9zdGF0c2AuICBZb3UgZG9uJ3QKICAgICAgICAgICAgaGF2ZSB0byBpbXBsZW1lbnQgaXQsIGJ1dCBpdCBpcyBzdGlsbCBhdmFpbGFibGUgZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgICAgcHVycG9zZXMuCisgICAgICAgICAgIHB1cnBvc2VzLiBSYWlzZSA6ZXhjOmBPU0Vycm9yYCBpZiB0aGUgcGF0aCBjYW5ub3QgYmUgaGFuZGxlZC4KKworICAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgICBSYWlzZSA6ZXhjOmBPU0Vycm9yYCBpbnN0ZWFkIG9mIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCiAgICAgLi4gbWV0aG9kOjogc2V0X2RhdGEocGF0aCwgZGF0YSkKIApAQCAtNDE5LDEzICs2MzMsMjUgQEAKICAgICAgICAgKDphdHRyOmBlcnJuby5FQUNDRVNgLzpleGM6YFBlcm1pc3Npb25FcnJvcmApLCBkbyBub3QgcHJvcGFnYXRlIHRoZQogICAgICAgICBleGNlcHRpb24uCiAKKyAgICAgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICAgICAgTm8gbG9uZ2VyIHJhaXNlcyA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCB3aGVuIGNhbGxlZC4KKwogICAgIC4uIG1ldGhvZDo6IGdldF9jb2RlKGZ1bGxuYW1lKQogCiAgICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBJbnNwZWN0TG9hZGVyLmdldF9jb2RlYC4KIAorICAgIC4uIG1ldGhvZDo6IGV4ZWNfbW9kdWxlKG1vZHVsZSkKKworICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIuZXhlY19tb2R1bGVgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQogCi0gICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIubG9hZF9tb2R1bGVgLgorICAgICAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBMb2FkZXIubG9hZF9tb2R1bGVgLgorCisgICAgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgICAgIFVzZSA6bWV0aDpgZXhlY19tb2R1bGVgIGluc3RlYWQuCiAKICAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQogCkBAIC00NDAsMTQyICs2NjYsNiBAQAogICAgICAgICBpdHNlbGYgZG9lcyBub3QgZW5kIGluIGBgX19pbml0X19gYC4KIAogCi0uLiBjbGFzczo6IFB5TG9hZGVyCi0KLSAgICBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGluaGVyaXRpbmcgZnJvbQotICAgIDpjbGFzczpgRXhlY3V0aW9uTG9hZGVyYCBhbmQKLSAgICA6Y2xhc3M6YFJlc291cmNlTG9hZGVyYCBkZXNpZ25lZCB0byBlYXNlIHRoZSBsb2FkaW5nIG9mCi0gICAgUHl0aG9uIHNvdXJjZSBtb2R1bGVzIChieXRlY29kZSBpcyBub3QgaGFuZGxlZDsgc2VlCi0gICAgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGZvciBhIHNvdXJjZS9ieXRlY29kZSBBQkMpLiBBIHN1YmNsYXNzCi0gICAgaW1wbGVtZW50aW5nIHRoaXMgQUJDIHdpbGwgb25seSBuZWVkIHRvIHdvcnJ5IGFib3V0IGV4cG9zaW5nIGhvdyB0aGUgc291cmNlCi0gICAgY29kZSBpcyBzdG9yZWQ7IGFsbCBvdGhlciBkZXRhaWxzIGZvciBsb2FkaW5nIFB5dGhvbiBzb3VyY2UgY29kZSB3aWxsIGJlCi0gICAgaGFuZGxlZCBieSB0aGUgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIG9mIGtleSBtZXRob2RzLgotCi0gICAgLi4gZGVwcmVjYXRlZDo6IDMuMgotICAgICAgICBUaGlzIGNsYXNzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgOmNsYXNzOmBTb3VyY2VMb2FkZXJgIGFuZCBpcwotICAgICAgICBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNC4gU2VlIGJlbG93IGZvciBob3cgdG8gY3JlYXRlIGEKLSAgICAgICAgc3ViY2xhc3MgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDMuMSBvbndhcmRzLgotCi0gICAgSWYgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjEgaXMgcmVxdWlyZWQsIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgaWRpb20KLSAgICB0byBpbXBsZW1lbnQgYSBzdWJjbGFzcyB0aGF0IHdpbGwgd29yayB3aXRoIFB5dGhvbiAzLjEgb253YXJkcyAobWFrZSBzdXJlCi0gICAgdG8gaW1wbGVtZW50IDptZXRoOmBFeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCk6OgotCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgU291cmNlTG9hZGVyCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIGZyb20gaW1wb3J0bGliLmFiYyBpbXBvcnQgUHlMb2FkZXIgYXMgU291cmNlTG9hZGVyCi0KLQotICAgICAgICBjbGFzcyBDdXN0b21Mb2FkZXIoU291cmNlTG9hZGVyKToKLSAgICAgICAgICAgIGRlZiBnZXRfZmlsZW5hbWUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAgICAgICAgICIiIlJldHVybiB0aGUgcGF0aCB0byB0aGUgc291cmNlIGZpbGUuIiIiCi0gICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgLi4uCi0KLSAgICAgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIiIiSW1wbGVtZW50IHNvdXJjZV9wYXRoIGluIHRlcm1zIG9mIGdldF9maWxlbmFtZS4iIiIKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICAiIiJJbXBsZW1lbnQgaXNfcGFja2FnZSBieSBsb29raW5nIGZvciBhbiBfX2luaXRfXyBmaWxlCi0gICAgICAgICAgICAgICAgbmFtZSBhcyByZXR1cm5lZCBieSBnZXRfZmlsZW5hbWUuIiIiCi0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSlbMF0gPT0gJ19faW5pdF9fJwotCi0KLSAgICAuLiBtZXRob2Q6OiBzb3VyY2VfcGF0aChmdWxsbmFtZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgY29kZSBmb3IgYQotICAgICAgICBtb2R1bGUuIFNob3VsZCByZXR1cm4gYGBOb25lYGAgaWYgdGhlcmUgaXMgbm8gc291cmNlIGNvZGUuCi0gICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBrbm93cyBpdCBjYW5ub3QgaGFuZGxlIHRoZQotICAgICAgICBtb2R1bGUuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXIuZ2V0X2ZpbGVuYW1lYCB0aGF0Ci0gICAgICAgIHJlbGllcyBvbiA6bWV0aDpgc291cmNlX3BhdGhgLiBJZiA6bWV0aDpgc291cmNlX3BhdGhgIHJldHVybnMKLSAgICAgICAgYGBOb25lYGAsIHRoZW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4KLQotICAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYAotICAgICAgICB0aGF0IGxvYWRzIFB5dGhvbiBzb3VyY2UgY29kZS4gQWxsIG5lZWRlZCBpbmZvcm1hdGlvbiBjb21lcyBmcm9tIHRoZQotICAgICAgICBhYnN0cmFjdCBtZXRob2RzIHJlcXVpcmVkIGJ5IHRoaXMgQUJDLiBUaGUgb25seSBwZXJ0aW5lbnQgYXNzdW1wdGlvbgotICAgICAgICBtYWRlIGJ5IHRoaXMgbWV0aG9kIGlzIHRoYXQgd2hlbiBsb2FkaW5nIGEgcGFja2FnZQotICAgICAgICA6YXR0cjpgX19wYXRoX19gIGlzIHNldCB0byBgYFtvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pXWBgLgotCi0gICAgLi4gbWV0aG9kOjogZ2V0X2NvZGUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9jb2RlYCB0aGF0IGNyZWF0ZXMgY29kZSBvYmplY3RzCi0gICAgICAgIGZyb20gUHl0aG9uIHNvdXJjZSBjb2RlLCBieSByZXF1ZXN0aW5nIHRoZSBzb3VyY2UgY29kZSAodXNpbmcKLSAgICAgICAgOm1ldGg6YHNvdXJjZV9wYXRoYCBhbmQgOm1ldGg6YGdldF9kYXRhYCkgYW5kIGNvbXBpbGluZyBpdCB3aXRoIHRoZQotICAgICAgICBidWlsdC1pbiA6ZnVuYzpgY29tcGlsZWAgZnVuY3Rpb24uCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfc291cmNlKGZ1bGxuYW1lKQotCi0gICAgICAgIEEgY29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YKLSAgICAgICAgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfc291cmNlYC4gVXNlcwotICAgICAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5SZXNvdXJjZUxvYWRlci5nZXRfZGF0YWAgYW5kIDptZXRoOmBzb3VyY2VfcGF0aGAKLSAgICAgICAgdG8gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEl0IHRyaWVzIHRvIGd1ZXNzIHRoZSBzb3VyY2UgZW5jb2RpbmcgdXNpbmcKLSAgICAgICAgOmZ1bmM6YHRva2VuaXplLmRldGVjdF9lbmNvZGluZ2AuCi0KLQotLi4gY2xhc3M6OiBQeVB5Y0xvYWRlcgotCi0gICAgQW4gYWJzdHJhY3QgYmFzZSBjbGFzcyBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBQeUxvYWRlcmAuCi0gICAgVGhpcyBBQkMgaXMgbWVhbnQgdG8gaGVscCBpbiBjcmVhdGluZyBsb2FkZXJzIHRoYXQgc3VwcG9ydCBib3RoIFB5dGhvbgotICAgIHNvdXJjZSBhbmQgYnl0ZWNvZGUuCi0KLSAgICAuLiBkZXByZWNhdGVkOjogMy4yCi0gICAgICAgIFRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIHRvCi0gICAgICAgIHByb3Blcmx5IHN1cHBvcnQgOnBlcDpgMzE0N2AuIElmIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQgd2l0aAotICAgICAgICBQeXRob24gMy4xLCBpbXBsZW1lbnQgYm90aCA6Y2xhc3M6YFNvdXJjZUxvYWRlcmAgYW5kIDpjbGFzczpgUHlMb2FkZXJgOwotICAgICAgICBpbnN0cnVjdGlvbnMgb24gaG93IHRvIGRvIHNvIGFyZSBpbmNsdWRlZCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IKLSAgICAgICAgOmNsYXNzOmBQeUxvYWRlcmAuIERvIG5vdGUgdGhhdCB0aGlzIHNvbHV0aW9uIHdpbGwgbm90IHN1cHBvcnQKLSAgICAgICAgc291cmNlbGVzcy9ieXRlY29kZS1vbmx5IGxvYWRpbmc7IG9ubHkgc291cmNlICphbmQqIGJ5dGVjb2RlIGxvYWRpbmcuCi0KLSAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwotICAgICAgIFVwZGF0ZWQgdG8gcGFyc2UgKGJ1dCBub3QgdXNlKSB0aGUgbmV3IHNvdXJjZSBzaXplIGZpZWxkIGluIGJ5dGVjb2RlCi0gICAgICAgZmlsZXMgd2hlbiByZWFkaW5nIGFuZCB0byB3cml0ZSBvdXQgdGhlIGZpZWxkIHByb3Blcmx5IHdoZW4gd3JpdGluZy4KLQotICAgIC4uIG1ldGhvZDo6IHNvdXJjZV9tdGltZShmdWxsbmFtZSkKLQotICAgICAgICBBbiBhYnN0cmFjdCBtZXRob2Qgd2hpY2ggcmV0dXJucyB0aGUgbW9kaWZpY2F0aW9uIHRpbWUgZm9yIHRoZSBzb3VyY2UKLSAgICAgICAgY29kZSBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gVGhlIG1vZGlmaWNhdGlvbiB0aW1lIHNob3VsZCBiZSBhbgotICAgICAgICBpbnRlZ2VyLiBJZiB0aGVyZSBpcyBubyBzb3VyY2UgY29kZSwgcmV0dXJuIGBgTm9uZWBgLiBJZiB0aGUKLSAgICAgICAgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZCB0aGVuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0KLSAgICAuLiBtZXRob2Q6OiBieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotCi0gICAgICAgIEFuIGFic3RyYWN0IG1ldGhvZCB3aGljaCByZXR1cm5zIHRoZSBwYXRoIHRvIHRoZSBieXRlY29kZSBmb3IgdGhlCi0gICAgICAgIHNwZWNpZmllZCBtb2R1bGUsIGlmIGl0IGV4aXN0cy4gSXQgcmV0dXJucyBgYE5vbmVgYAotICAgICAgICBpZiBubyBieXRlY29kZSBleGlzdHMgKHlldCkuCi0gICAgICAgIFJhaXNlcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaWYgdGhlIGxvYWRlciBrbm93cyBpdCBjYW5ub3QgaGFuZGxlIHRoZQotICAgICAgICBtb2R1bGUuCi0KLSAgICAuLiBtZXRob2Q6OiBnZXRfZmlsZW5hbWUoZnVsbG5hbWUpCi0KLSAgICAgICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZgotICAgICAgICA6bWV0aDpgRXhlY3V0aW9uTG9hZGVyLmdldF9maWxlbmFtZWAgdGhhdCByZWxpZXMgb24KLSAgICAgICAgOm1ldGg6YFB5TG9hZGVyLnNvdXJjZV9wYXRoYCBhbmQgOm1ldGg6YGJ5dGVjb2RlX3BhdGhgLgotICAgICAgICBJZiA6bWV0aDpgc291cmNlX3BhdGhgIHJldHVybnMgYSBwYXRoLCB0aGVuIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQuCi0gICAgICAgIEVsc2UgaWYgOm1ldGg6YGJ5dGVjb2RlX3BhdGhgIHJldHVybnMgYSBwYXRoLCB0aGF0IHBhdGggd2lsbCBiZQotICAgICAgICByZXR1cm5lZC4gSWYgYSBwYXRoIGlzIG5vdCBhdmFpbGFibGUgZnJvbSBib3RoIG1ldGhvZHMsCi0gICAgICAgIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0KLSAgICAuLiBtZXRob2Q6OiB3cml0ZV9ieXRlY29kZShmdWxsbmFtZSwgYnl0ZWNvZGUpCi0KLSAgICAgICAgQW4gYWJzdHJhY3QgbWV0aG9kIHdoaWNoIGhhcyB0aGUgbG9hZGVyIHdyaXRlICpieXRlY29kZSogZm9yIGZ1dHVyZQotICAgICAgICB1c2UuIElmIHRoZSBieXRlY29kZSBpcyB3cml0dGVuLCByZXR1cm4gYGBUcnVlYGAuIFJldHVybgotICAgICAgICBgYEZhbHNlYGAgaWYgdGhlIGJ5dGVjb2RlIGNvdWxkIG5vdCBiZSB3cml0dGVuLiBUaGlzIG1ldGhvZAotICAgICAgICBzaG91bGQgbm90IGJlIGNhbGxlZCBpZiA6ZGF0YTpgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGVgIGlzIHRydWUuCi0gICAgICAgIFRoZSAqYnl0ZWNvZGUqIGFyZ3VtZW50IHNob3VsZCBiZSBhIGJ5dGVzIHN0cmluZyBvciBieXRlcyBhcnJheS4KLQotCiA6bW9kOmBpbXBvcnRsaWIubWFjaGluZXJ5YCAtLSBJbXBvcnRlcnMgYW5kIHBhdGggaG9va3MKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC02MjcsNyArNzE3LDcgQEAKICAgIG1vZHVsZXMgcmVjb2duaXplZCBieSB0aGUgc3RhbmRhcmQgaW1wb3J0IG1hY2hpbmVyeS4gVGhpcyBpcyBhCiAgICBoZWxwZXIgZm9yIGNvZGUgd2hpY2ggc2ltcGx5IG5lZWRzIHRvIGtub3cgaWYgYSBmaWxlc3lzdGVtIHBhdGgKICAgIHBvdGVudGlhbGx5IHJlZmVycyB0byBhIG1vZHVsZSB3aXRob3V0IG5lZWRpbmcgYW55IGRldGFpbHMgb24gdGhlIGtpbmQKLSAgIG9mIG1vZHVsZSAoZm9yIGV4YW1wbGUsIDpmdW5jOmBpbnNwZWN0LmdldG1vZHVsZW5hbWVgKQorICAgb2YgbW9kdWxlIChmb3IgZXhhbXBsZSwgOmZ1bmM6YGluc3BlY3QuZ2V0bW9kdWxlbmFtZWApLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApAQCAtNjQyLDYgKzczMiwxMCBAQAogICAgIE9ubHkgY2xhc3MgbWV0aG9kcyBhcmUgZGVmaW5lZCBieSB0aGlzIGNsYXNzIHRvIGFsbGV2aWF0ZSB0aGUgbmVlZCBmb3IKICAgICBpbnN0YW50aWF0aW9uLgogCisgICAgLi4gbm90ZTo6CisgICAgICAgRHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSBleHRlbnNpb24gbW9kdWxlIEMtQVBJLCBmb3Igbm93CisgICAgICAgQnVpbHRpbkltcG9ydGVyIGRvZXMgbm90IGltcGxlbWVudCA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYC4KKwogCiAuLiBjbGFzczo6IEZyb3plbkltcG9ydGVyCiAKQEAgLTY3MiwyNCArNzY2LDM3IEBACiAgICBPbmx5IGNsYXNzIG1ldGhvZHMgYXJlIGRlZmluZWQgYnkgdGhpcyBjbGFzcyB0byBhbGxldmlhdGUgdGhlIG5lZWQgZm9yCiAgICBpbnN0YW50aWF0aW9uLgogCisgICAuLiBjbGFzc21ldGhvZDo6IGZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSkKKworICAgICAgQ2xhc3MgbWV0aG9kIHRoYXQgYXR0ZW1wdHMgdG8gZmluZCBhIDp0ZXJtOmBzcGVjIDxtb2R1bGUgc3BlYz5gCisgICAgICBmb3IgdGhlIG1vZHVsZSBzcGVjaWZpZWQgYnkgKmZ1bGxuYW1lKiBvbiA6ZGF0YTpgc3lzLnBhdGhgIG9yLCBpZgorICAgICAgZGVmaW5lZCwgb24gKnBhdGgqLiBGb3IgZWFjaCBwYXRoIGVudHJ5IHRoYXQgaXMgc2VhcmNoZWQsCisgICAgICA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIGlzIGNoZWNrZWQuIElmIGEgbm9uLWZhbHNlIG9iamVjdAorICAgICAgaXMgZm91bmQgdGhlbiBpdCBpcyB1c2VkIGFzIHRoZSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgIHRvIGxvb2sKKyAgICAgIGZvciB0aGUgbW9kdWxlIGJlaW5nIHNlYXJjaGVkIGZvci4gSWYgbm8gZW50cnkgaXMgZm91bmQgaW4KKyAgICAgIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAsIHRoZW4gOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCBpcworICAgICAgc2VhcmNoZWQgZm9yIGEgZmluZGVyIGZvciB0aGUgcGF0aCBlbnRyeSBhbmQsIGlmIGZvdW5kLCBpcyBzdG9yZWQKKyAgICAgIGluIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAgYWxvbmcgd2l0aCBiZWluZyBxdWVyaWVkIGFib3V0CisgICAgICB0aGUgbW9kdWxlLiBJZiBubyBmaW5kZXIgaXMgZXZlciBmb3VuZCB0aGVuIGBgTm9uZWBgIGlzIGJvdGgKKyAgICAgIHN0b3JlZCBpbiB0aGUgY2FjaGUgYW5kIHJldHVybmVkLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogICAgLi4gY2xhc3NtZXRob2Q6OiBmaW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aD1Ob25lKQogCi0gICAgIENsYXNzIG1ldGhvZCB0aGF0IGF0dGVtcHRzIHRvIGZpbmQgYSA6dGVybTpgbG9hZGVyYCBmb3IgdGhlIG1vZHVsZQotICAgICBzcGVjaWZpZWQgYnkgKmZ1bGxuYW1lKiBvbiA6ZGF0YTpgc3lzLnBhdGhgIG9yLCBpZiBkZWZpbmVkLCBvbgotICAgICAqcGF0aCouIEZvciBlYWNoIHBhdGggZW50cnkgdGhhdCBpcyBzZWFyY2hlZCwKLSAgICAgOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBpcyBjaGVja2VkLiBJZiBhIG5vbi1mYWxzZSBvYmplY3QgaXMKLSAgICAgZm91bmQgdGhlbiBpdCBpcyB1c2VkIGFzIHRoZSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgIHRvIGxvb2sgZm9yIHRoZQotICAgICBtb2R1bGUgYmVpbmcgc2VhcmNoZWQgZm9yLiBJZiBubyBlbnRyeSBpcyBmb3VuZCBpbgotICAgICA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLCB0aGVuIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgaXMKLSAgICAgc2VhcmNoZWQgZm9yIGEgZmluZGVyIGZvciB0aGUgcGF0aCBlbnRyeSBhbmQsIGlmIGZvdW5kLCBpcyBzdG9yZWQgaW4KLSAgICAgOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBhbG9uZyB3aXRoIGJlaW5nIHF1ZXJpZWQgYWJvdXQgdGhlCi0gICAgIG1vZHVsZS4gSWYgbm8gZmluZGVyIGlzIGV2ZXIgZm91bmQgdGhlbiBgYE5vbmVgYCBpcyBib3RoIHN0b3JlZCBpbgotICAgICB0aGUgY2FjaGUgYW5kIHJldHVybmVkLgorICAgICAgQSBsZWdhY3kgd3JhcHBlciBhcm91bmQgOm1ldGg6YGZpbmRfc3BlY2AuCisKKyAgICAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgICAgIFVzZSA6bWV0aDpgZmluZF9zcGVjYCBpbnN0ZWFkLgogCiAgICAuLiBjbGFzc21ldGhvZDo6IGludmFsaWRhdGVfY2FjaGVzKCkKIAotICAgICBDYWxscyA6bWV0aDpgaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuaW52YWxpZGF0ZV9jYWNoZXNgIG9uIGFsbAotICAgICBmaW5kZXJzIHN0b3JlZCBpbiA6YXR0cjpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgLgorICAgICAgQ2FsbHMgOm1ldGg6YGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmludmFsaWRhdGVfY2FjaGVzYCBvbiBhbGwKKyAgICAgIGZpbmRlcnMgc3RvcmVkIGluIDphdHRyOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBDYWxscyBvYmplY3RzIGluIDpkYXRhOmBzeXMucGF0aF9ob29rc2Agd2l0aCB0aGUgY3VycmVudCB3b3JraW5nCisgICAgICBkaXJlY3RvcnkgZm9yIGBgJydgYCAoaS5lLiB0aGUgZW1wdHkgc3RyaW5nKS4KIAogCiAuLiBjbGFzczo6IEZpbGVGaW5kZXIocGF0aCwgXCpsb2FkZXJfZGV0YWlscykKQEAgLTcyMSw2ICs4MjgsMTIgQEAKIAogICAgICAgVGhlIHBhdGggdGhlIGZpbmRlciB3aWxsIHNlYXJjaCBpbi4KIAorICAgLi4gbWV0aG9kOjogZmluZF9zcGVjKGZ1bGxuYW1lLCB0YXJnZXQ9Tm9uZSkKKworICAgICAgQXR0ZW1wdCB0byBmaW5kIHRoZSBzcGVjIHRvIGhhbmRsZSAqZnVsbG5hbWUqIHdpdGhpbiA6YXR0cjpgcGF0aGAuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBtZXRob2Q6OiBmaW5kX2xvYWRlcihmdWxsbmFtZSkKIAogICAgICAgQXR0ZW1wdCB0byBmaW5kIHRoZSBsb2FkZXIgdG8gaGFuZGxlICpmdWxsbmFtZSogd2l0aGluIDphdHRyOmBwYXRoYC4KQEAgLTc2OCw2ICs4ODEsMTEgQEAKIAogICAgICAgQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgOm1ldGg6YGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLnNldF9kYXRhYC4KIAorICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUobmFtZT1Ob25lKQorCisgICAgICBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIHdoZXJlCisgICAgICBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdG8gbG9hZCBpcyBvcHRpb25hbC4KKwogCiAuLiBjbGFzczo6IFNvdXJjZWxlc3NGaWxlTG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQogCkBAIC04MDIsMTAgKzkyMCwxNSBAQAogICAgICAgUmV0dXJucyBgYE5vbmVgYCBhcyBieXRlY29kZSBmaWxlcyBoYXZlIG5vIHNvdXJjZSB3aGVuIHRoaXMgbG9hZGVyIGlzCiAgICAgICB1c2VkLgogCisgICAuLiBtZXRob2Q6OiBsb2FkX21vZHVsZShuYW1lPU5vbmUpCisKKyAgIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAgd2hlcmUKKyAgIHNwZWNpZnlpbmcgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZSB0byBsb2FkIGlzIG9wdGlvbmFsLgorCiAKIC4uIGNsYXNzOjogRXh0ZW5zaW9uRmlsZUxvYWRlcihmdWxsbmFtZSwgcGF0aCkKIAotICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6Y2xhc3M6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlcmAgZm9yCisgICBBIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIDpjbGFzczpgaW1wb3J0bGliLmFiYy5FeGVjdXRpb25Mb2FkZXJgIGZvcgogICAgZXh0ZW5zaW9uIG1vZHVsZXMuCiAKICAgIFRoZSAqZnVsbG5hbWUqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBsb2FkZXIgaXMgdG8KQEAgLTgyMSwxMSArOTQ0LDE1IEBACiAKICAgICAgIFBhdGggdG8gdGhlIGV4dGVuc2lvbiBtb2R1bGUuCiAKLSAgIC4uIG1ldGhvZDo6IGxvYWRfbW9kdWxlKGZ1bGxuYW1lKQorICAgLi4gbWV0aG9kOjogbG9hZF9tb2R1bGUobmFtZT1Ob25lKQogCiAgICAgICBMb2FkcyB0aGUgZXh0ZW5zaW9uIG1vZHVsZSBpZiBhbmQgb25seSBpZiAqZnVsbG5hbWUqIGlzIHRoZSBzYW1lIGFzCiAgICAgICA6YXR0cjpgbmFtZWAgb3IgaXMgYGBOb25lYGAuCiAKKyAgICAgIC4uIG5vdGU6OgorICAgICAgICAgRHVlIHRvIGxpbWl0YXRpb25zIGluIHRoZSBleHRlbnNpb24gbW9kdWxlIEMtQVBJLCBmb3Igbm93CisgICAgICAgICBFeHRlbnNpb25GaWxlTG9hZGVyIGRvZXMgbm90IGltcGxlbWVudCA6bWV0aDpgTG9hZGVyLmV4ZWNfbW9kdWxlYC4KKwogICAgLi4gbWV0aG9kOjogaXNfcGFja2FnZShmdWxsbmFtZSkKIAogICAgICAgUmV0dXJucyBgYFRydWVgYCBpZiB0aGUgZmlsZSBwYXRoIHBvaW50cyB0byBhIHBhY2thZ2UncyBgYF9faW5pdF9fYGAKQEAgLTgzOSw2ICs5NjYsNzAgQEAKIAogICAgICAgUmV0dXJucyBgYE5vbmVgYCBhcyBleHRlbnNpb24gbW9kdWxlcyBkbyBub3QgaGF2ZSBzb3VyY2UgY29kZS4KIAorICAgLi4gbWV0aG9kOjogZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorCisgICAgICBSZXR1cm5zIDphdHRyOmBwYXRoYC4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gY2xhc3M6OiBNb2R1bGVTcGVjKG5hbWUsIGxvYWRlciwgKiwgb3JpZ2luPU5vbmUsIGxvYWRlcl9zdGF0ZT1Ob25lLCBpc19wYWNrYWdlPU5vbmUpCisKKyAgIEEgc3BlY2lmaWNhdGlvbiBmb3IgYSBtb2R1bGUncyBpbXBvcnQtc3lzdGVtLXJlbGF0ZWQgc3RhdGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisgICAuLiBhdHRyaWJ1dGU6OiBuYW1lCisKKyAgIChgYF9fbmFtZV9fYGApCisKKyAgIEEgc3RyaW5nIGZvciB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZS4KKworICAgLi4gYXR0cmlidXRlOjogbG9hZGVyCisKKyAgIChgYF9fbG9hZGVyX19gYCkKKworICAgVGhlIGxvYWRlciB0byB1c2UgZm9yIGxvYWRpbmcuICBGb3IgbmFtZXNwYWNlIHBhY2thZ2VzIHRoaXMgc2hvdWxkIGJlCisgICBzZXQgdG8gTm9uZS4KKworICAgLi4gYXR0cmlidXRlOjogb3JpZ2luCisKKyAgIChgYF9fZmlsZV9fYGApCisKKyAgIE5hbWUgb2YgdGhlIHBsYWNlIGZyb20gd2hpY2ggdGhlIG1vZHVsZSBpcyBsb2FkZWQsIGUuZy4gImJ1aWx0aW4iIGZvcgorICAgYnVpbHQtaW4gbW9kdWxlcyBhbmQgdGhlIGZpbGVuYW1lIGZvciBtb2R1bGVzIGxvYWRlZCBmcm9tIHNvdXJjZS4KKyAgIE5vcm1hbGx5ICJvcmlnaW4iIHNob3VsZCBiZSBzZXQsIGJ1dCBpdCBtYXkgYmUgTm9uZSAodGhlIGRlZmF1bHQpCisgICB3aGljaCBpbmRpY2F0ZXMgaXQgaXMgdW5zcGVjaWZpZWQuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisKKyAgIChgYF9fcGF0aF9fYGApCisKKyAgIExpc3Qgb2Ygc3RyaW5ncyBmb3Igd2hlcmUgdG8gZmluZCBzdWJtb2R1bGVzLCBpZiBhIHBhY2thZ2UgKE5vbmUKKyAgIG90aGVyd2lzZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxvYWRlcl9zdGF0ZQorCisgICBDb250YWluZXIgb2YgZXh0cmEgbW9kdWxlLXNwZWNpZmljIGRhdGEgZm9yIHVzZSBkdXJpbmcgbG9hZGluZyAob3IKKyAgIE5vbmUpLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjYWNoZWQKKworICAgKGBgX19jYWNoZWRfX2BgKQorCisgICBTdHJpbmcgZm9yIHdoZXJlIHRoZSBjb21waWxlZCBtb2R1bGUgc2hvdWxkIGJlIHN0b3JlZCAob3IgTm9uZSkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBhcmVudAorCisgICAoYGBfX3BhY2thZ2VfX2BgKQorCisgICAoUmVhZC1vbmx5KSBGdWxseS1xdWFsaWZpZWQgbmFtZSBvZiB0aGUgcGFja2FnZSB0byB3aGljaCB0aGUgbW9kdWxlCisgICBiZWxvbmdzIGFzIGEgc3VibW9kdWxlIChvciBOb25lKS4KKworICAgLi4gYXR0cmlidXRlOjogaGFzX2xvY2F0aW9uCisKKyAgIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCB0aGUgbW9kdWxlJ3MgIm9yaWdpbiIKKyAgIGF0dHJpYnV0ZSByZWZlcnMgdG8gYSBsb2FkYWJsZSBsb2NhdGlvbi4KIAogOm1vZDpgaW1wb3J0bGliLnV0aWxgIC0tIFV0aWxpdHkgY29kZSBmb3IgaW1wb3J0ZXJzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg0OSw2ICsxMDQwLDUxIEBACiBUaGlzIG1vZHVsZSBjb250YWlucyB0aGUgdmFyaW91cyBvYmplY3RzIHRoYXQgaGVscCBpbiB0aGUgY29uc3RydWN0aW9uIG9mCiBhbiA6dGVybTpgaW1wb3J0ZXJgLgogCisuLiBhdHRyaWJ1dGU6OiBNQUdJQ19OVU1CRVIKKworICAgVGhlIGJ5dGVzIHdoaWNoIHJlcHJlc2VudCB0aGUgYnl0ZWNvZGUgdmVyc2lvbiBudW1iZXIuIElmIHlvdSBuZWVkIGhlbHAgd2l0aAorICAgbG9hZGluZy93cml0aW5nIGJ5dGVjb2RlIHRoZW4gY29uc2lkZXIgOmNsYXNzOmBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcmAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlPU5vbmUpCisKKyAgIFJldHVybiB0aGUgOnBlcDpgMzE0N2AgcGF0aCB0byB0aGUgYnl0ZS1jb21waWxlZCBmaWxlIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAgIHNvdXJjZSAqcGF0aCouICBGb3IgZXhhbXBsZSwgaWYgKnBhdGgqIGlzIGBgL2Zvby9iYXIvYmF6LnB5YGAgdGhlIHJldHVybgorICAgdmFsdWUgd291bGQgYmUgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCBmb3IgUHl0aG9uIDMuMi4KKyAgIFRoZSBgYGNweXRob24tMzJgYCBzdHJpbmcgY29tZXMgZnJvbSB0aGUgY3VycmVudCBtYWdpYyB0YWcgKHNlZQorICAgOmZ1bmM6YGdldF90YWdgOyBpZiA6YXR0cjpgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZ2AgaXMgbm90IGRlZmluZWQgdGhlbgorICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgd2lsbCBiZSByYWlzZWQpLiAgVGhlIHJldHVybmVkIHBhdGggd2lsbCBlbmQgaW4KKyAgIGBgLnB5Y2BgIHdoZW4gYGBfX2RlYnVnX19gYCBpcyBgYFRydWVgYCBvciBgYC5weW9gYCBmb3IgYW4gb3B0aW1pemVkIFB5dGhvbgorICAgKGkuZS4gYGBfX2RlYnVnX19gYCBpcyBgYEZhbHNlYGApLiAgQnkgcGFzc2luZyBpbiBgYFRydWVgYCBvciBgYEZhbHNlYGAgZm9yCisgICAqZGVidWdfb3ZlcnJpZGUqIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIHN5c3RlbSdzIHZhbHVlIGZvciBgYF9fZGVidWdfX2BgIGZvcgorICAgZXh0ZW5zaW9uIHNlbGVjdGlvbi4KKworICAgKnBhdGgqIG5lZWQgbm90IGV4aXN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCisuLiBmdW5jdGlvbjo6IHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpCisKKyAgIEdpdmVuIHRoZSAqcGF0aCogdG8gYSA6cGVwOmAzMTQ3YCBmaWxlIG5hbWUsIHJldHVybiB0aGUgYXNzb2NpYXRlZCBzb3VyY2UgY29kZQorICAgZmlsZSBwYXRoLiAgRm9yIGV4YW1wbGUsIGlmICpwYXRoKiBpcworICAgYGAvZm9vL2Jhci9fX3B5Y2FjaGVfXy9iYXouY3B5dGhvbi0zMi5weWNgYCB0aGUgcmV0dXJuZWQgcGF0aCB3b3VsZCBiZQorICAgYGAvZm9vL2Jhci9iYXoucHlgYC4gICpwYXRoKiBuZWVkIG5vdCBleGlzdCwgaG93ZXZlciBpZiBpdCBkb2VzIG5vdCBjb25mb3JtCisgICB0byA6cGVwOmAzMTQ3YCBmb3JtYXQsIGEgYGBWYWx1ZUVycm9yYGAgaXMgcmFpc2VkLiBJZgorICAgOmF0dHI6YHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWdgIGlzIG5vdCBkZWZpbmVkLAorICAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgaXMgcmFpc2VkLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcykKKworICAgRGVjb2RlIHRoZSBnaXZlbiBieXRlcyByZXByZXNlbnRpbmcgc291cmNlIGNvZGUgYW5kIHJldHVybiBpdCBhcyBhIHN0cmluZworICAgd2l0aCB1bml2ZXJzYWwgbmV3bGluZXMgKGFzIHJlcXVpcmVkIGJ5CisgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmdldF9zb3VyY2VgKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpCiAKICAgIFJlc29sdmUgYSByZWxhdGl2ZSBtb2R1bGUgbmFtZSB0byBhbiBhYnNvbHV0ZSBvbmUuCkBAIC04NjUsOSArMTEwMSwyNSBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gZnVuY3Rpb246OiBmaW5kX3NwZWMobmFtZSwgcGFja2FnZT1Ob25lKQorCisgICBGaW5kIHRoZSA6dGVybTpgc3BlYyA8bW9kdWxlIHNwZWM+YCBmb3IgYSBtb2R1bGUsIG9wdGlvbmFsbHkgcmVsYXRpdmUgdG8KKyAgIHRoZSBzcGVjaWZpZWQgKipwYWNrYWdlKiogbmFtZS4gSWYgdGhlIG1vZHVsZSBpcyBpbiA6YXR0cjpgc3lzLm1vZHVsZXNgLAorICAgdGhlbiBgYHN5cy5tb2R1bGVzW25hbWVdLl9fc3BlY19fYGAgaXMgcmV0dXJuZWQgKHVubGVzcyB0aGUgc3BlYyB3b3VsZCBiZQorICAgYGBOb25lYGAgb3IgaXMgbm90IHNldCwgaW4gd2hpY2ggY2FzZSA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQpLgorICAgT3RoZXJ3aXNlIGEgc2VhcmNoIHVzaW5nIDphdHRyOmBzeXMubWV0YV9wYXRoYCBpcyBkb25lLiBgYE5vbmVgYCBpcworICAgcmV0dXJuZWQgaWYgbm8gc3BlYyBpcyBmb3VuZC4KKworICAgSWYgKipuYW1lKiogaXMgZm9yIGEgc3VibW9kdWxlIChjb250YWlucyBhIGRvdCksIHRoZSBwYXJlbnQgbW9kdWxlIGlzCisgICBhdXRvbWF0aWNhbGx5IGltcG9ydGVkLgorCisgICAqKm5hbWUqKiBhbmQgKipwYWNrYWdlKiogd29yayB0aGUgc2FtZSBhcyBmb3IgOmZ1bmM6YGltcG9ydF9tb2R1bGVgLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZGVjb3JhdG9yOjogbW9kdWxlX2Zvcl9sb2FkZXIKIAotICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIGEgOnRlcm06YGxvYWRlcmAgbWV0aG9kLAorICAgIEEgOnRlcm06YGRlY29yYXRvcmAgZm9yIDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAKICAgICB0byBoYW5kbGUgc2VsZWN0aW5nIHRoZSBwcm9wZXIKICAgICBtb2R1bGUgb2JqZWN0IHRvIGxvYWQgd2l0aC4gVGhlIGRlY29yYXRlZCBtZXRob2QgaXMgZXhwZWN0ZWQgdG8gaGF2ZSBhIGNhbGwKICAgICBzaWduYXR1cmUgdGFraW5nIHR3byBwb3NpdGlvbmFsIGFyZ3VtZW50cwpAQCAtODc4LDU1ICsxMTMwLDY4IEBACiAKICAgICBUaGUgZGVjb3JhdGVkIG1ldGhvZCB3aWxsIHRha2UgaW4gdGhlICoqbmFtZSoqIG9mIHRoZSBtb2R1bGUgdG8gYmUgbG9hZGVkCiAgICAgYXMgZXhwZWN0ZWQgZm9yIGEgOnRlcm06YGxvYWRlcmAuIElmIHRoZSBtb2R1bGUgaXMgbm90IGZvdW5kIGluCi0gICAgOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGEgbmV3IG9uZSBpcyBjb25zdHJ1Y3RlZCB3aXRoIGl0cwotICAgIDphdHRyOmBfX25hbWVfX2AgYXR0cmlidXRlIHNldCB0byAqKm5hbWUqKiwgOmF0dHI6YF9fbG9hZGVyX19gIHNldCB0bwotICAgICoqc2VsZioqLCBhbmQgOmF0dHI6YF9fcGFja2FnZV9fYCBzZXQgaWYKLSAgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmlzX3BhY2thZ2VgIGlzIGRlZmluZWQgZm9yICoqc2VsZioqIGFuZAotICAgIGRvZXMgbm90IHJhaXNlIDpleGM6YEltcG9ydEVycm9yYCBmb3IgKipuYW1lKiouIElmIGEgbmV3IG1vZHVsZSBpcyBub3QKLSAgICBuZWVkZWQgdGhlbiB0aGUgbW9kdWxlIGZvdW5kIGluIDpkYXRhOmBzeXMubW9kdWxlc2Agd2lsbCBiZSBwYXNzZWQgaW50byB0aGUKLSAgICBtZXRob2QuCisgICAgOmRhdGE6YHN5cy5tb2R1bGVzYCB0aGVuIGEgbmV3IG9uZSBpcyBjb25zdHJ1Y3RlZC4gUmVnYXJkbGVzcyBvZiB3aGVyZSB0aGUKKyAgICBtb2R1bGUgY2FtZSBmcm9tLCA6YXR0cjpgX19sb2FkZXJfX2Agc2V0IHRvICoqc2VsZioqIGFuZCA6YXR0cjpgX19wYWNrYWdlX19gCisgICAgaXMgc2V0IGJhc2VkIG9uIHdoYXQgOm1ldGg6YGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5pc19wYWNrYWdlYCByZXR1cm5zCisgICAgKGlmIGF2YWlsYWJsZSkuIFRoZXNlIGF0dHJpYnV0ZXMgYXJlIHNldCB1bmNvbmRpdGlvbmFsbHkgdG8gc3VwcG9ydAorICAgIHJlbG9hZGluZy4KIAogICAgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYnkgdGhlIGRlY29yYXRlZCBtZXRob2QgYW5kIGEgbW9kdWxlIHdhcyBhZGRlZCB0bwotICAgIDpkYXRhOmBzeXMubW9kdWxlc2AgaXQgd2lsbCBiZSByZW1vdmVkIHRvIHByZXZlbnQgYSBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQKLSAgICBtb2R1bGUgZnJvbSBiZWluZyBpbiBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuIElmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkKLSAgICBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gaXQgaXMgbGVmdCBhbG9uZS4KLQotICAgIFVzZSBvZiB0aGlzIGRlY29yYXRvciBoYW5kbGVzIGFsbCB0aGUgZGV0YWlscyBvZiB3aGljaCBtb2R1bGUgb2JqZWN0IGEKLSAgICBsb2FkZXIgc2hvdWxkIGluaXRpYWxpemUgYXMgc3BlY2lmaWVkIGJ5IDpwZXA6YDMwMmAgYXMgYmVzdCBhcyBwb3NzaWJsZS4KKyAgICA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGVuIHRoZSBtb2R1bGUgd2lsbCBiZSByZW1vdmVkIHRvIHByZXZlbnQgYSBwYXJ0aWFsbHkKKyAgICBpbml0aWFsaXplZCBtb2R1bGUgZnJvbSBiZWluZyBpbiBsZWZ0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AuIElmIHRoZSBtb2R1bGUKKyAgICB3YXMgYWxyZWFkeSBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgIHRoZW4gaXQgaXMgbGVmdCBhbG9uZS4KIAogICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAgOmF0dHI6YF9fbG9hZGVyX19gIGFuZCA6YXR0cjpgX19wYWNrYWdlX19gIGFyZSBhdXRvbWF0aWNhbGx5IHNldAogICAgICAgICh3aGVuIHBvc3NpYmxlKS4KIAorICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgU2V0IDphdHRyOmBfX25hbWVfX2AsIDphdHRyOmBfX2xvYWRlcl9fYCA6YXR0cjpgX19wYWNrYWdlX19gCisgICAgICAgdW5jb25kaXRpb25hbGx5IHRvIHN1cHBvcnQgcmVsb2FkaW5nLgorCisgICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorICAgICAgIFRoZSBpbXBvcnQgbWFjaGluZXJ5IG5vdyBkaXJlY3RseSBwZXJmb3JtcyBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkKKyAgICAgICBwcm92aWRlZCBieSB0aGlzIGZ1bmN0aW9uLgorCiAuLiBkZWNvcmF0b3I6OiBzZXRfbG9hZGVyCiAKLSAgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciBhIDp0ZXJtOmBsb2FkZXJgIG1ldGhvZCwKLSAgICB0byBzZXQgdGhlIDphdHRyOmBfX2xvYWRlcl9fYAotICAgIGF0dHJpYnV0ZSBvbiBsb2FkZWQgbW9kdWxlcy4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBhbHJlYWR5IHNldCB0aGUgZGVjb3JhdG9yCi0gICAgZG9lcyBub3RoaW5nLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgdG8gdGhlCi0gICAgd3JhcHBlZCBtZXRob2QgKGkuZS4gYGBzZWxmYGApIGlzIHdoYXQgOmF0dHI6YF9fbG9hZGVyX19gIHNob3VsZCBiZSBzZXQgdG8uCisgICBBIDp0ZXJtOmBkZWNvcmF0b3JgIGZvciA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgCisgICB0byBzZXQgdGhlIDphdHRyOmBfX2xvYWRlcl9fYAorICAgYXR0cmlidXRlIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIElmIHRoZSBhdHRyaWJ1dGUgaXMgYWxyZWFkeSBzZXQgdGhlCisgICBkZWNvcmF0b3IgZG9lcyBub3RoaW5nLiBJdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGZpcnN0IHBvc2l0aW9uYWwgYXJndW1lbnQgdG8KKyAgIHRoZSB3cmFwcGVkIG1ldGhvZCAoaS5lLiBgYHNlbGZgYCkgaXMgd2hhdCA6YXR0cjpgX19sb2FkZXJfX2Agc2hvdWxkIGJlIHNldAorICAgdG8uCiAKLSAgIC4uIG5vdGU6OgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFNldCBgYF9fbG9hZGVyX19gYCBpZiBzZXQgdG8gYGBOb25lYGAsIGFzIGlmIHRoZSBhdHRyaWJ1dGUgZG9lcyBub3QKKyAgICAgIGV4aXN0LgogCi0gICAgICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IDpmdW5jOmBtb2R1bGVfZm9yX2xvYWRlcmAgYmUgdXNlZCBvdmVyIHRoaXMKLSAgICAgIGRlY29yYXRvciBhcyBpdCBzdWJzdW1lcyB0aGlzIGZ1bmN0aW9uYWxpdHkuCi0KKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFRoZSBpbXBvcnQgbWFjaGluZXJ5IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LgogCiAuLiBkZWNvcmF0b3I6OiBzZXRfcGFja2FnZQogCi0gICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgYSA6dGVybTpgbG9hZGVyYCB0byBzZXQgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AKLSAgICBhdHRyaWJ1dGUgb24gdGhlIG1vZHVsZSByZXR1cm5lZCBieSB0aGUgbG9hZGVyLiBJZiA6YXR0cjpgX19wYWNrYWdlX19gIGlzCi0gICAgc2V0IGFuZCBoYXMgYSB2YWx1ZSBvdGhlciB0aGFuIGBgTm9uZWBgIGl0IHdpbGwgbm90IGJlIGNoYW5nZWQuCi0gICAgTm90ZSB0aGF0IHRoZSBtb2R1bGUgcmV0dXJuZWQgYnkgdGhlIGxvYWRlciBpcyB3aGF0IGhhcyB0aGUgYXR0cmlidXRlCi0gICAgc2V0IG9uIGFuZCBub3QgdGhlIG1vZHVsZSBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLgorICAgQSA6dGVybTpgZGVjb3JhdG9yYCBmb3IgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCB0byBzZXQgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYXR0cmlidXRlIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIElmIDphdHRyOmBfX3BhY2thZ2VfX2AKKyAgIGlzIHNldCBhbmQgaGFzIGEgdmFsdWUgb3RoZXIgdGhhbiBgYE5vbmVgYCBpdCB3aWxsIG5vdCBiZSBjaGFuZ2VkLgogCi0gICAgUmVsaWFuY2Ugb24gdGhpcyBkZWNvcmF0b3IgaXMgZGlzY291cmFnZWQgd2hlbiBpdCBpcyBwb3NzaWJsZSB0byBzZXQKLSAgICA6YXR0cjpgX19wYWNrYWdlX19gIGJlZm9yZSBpbXBvcnRpbmcuIEJ5Ci0gICAgc2V0dGluZyBpdCBiZWZvcmVoYW5kIHRoZSBjb2RlIGZvciB0aGUgbW9kdWxlIGlzIGV4ZWN1dGVkIHdpdGggdGhlCi0gICAgYXR0cmlidXRlIHNldCBhbmQgdGh1cyBjYW4gYmUgdXNlZCBieSBnbG9iYWwgbGV2ZWwgY29kZSBkdXJpbmcKLSAgICBpbml0aWFsaXphdGlvbi4KKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFRoZSBpbXBvcnQgbWFjaGluZXJ5IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LgogCi0gICAuLiBub3RlOjoKKy4uIGZ1bmN0aW9uOjogc3BlY19mcm9tX2xvYWRlcihuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBpc19wYWNrYWdlPU5vbmUpCiAKLSAgICAgIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgOmZ1bmM6YG1vZHVsZV9mb3JfbG9hZGVyYCBiZSB1c2VkIG92ZXIgdGhpcwotICAgICAgZGVjb3JhdG9yIGFzIGl0IHN1YnN1bWVzIHRoaXMgZnVuY3Rpb25hbGl0eS4KKyAgIEEgZmFjdG9yeSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgYSA6Y2xhc3M6YE1vZHVsZVNwZWNgIGluc3RhbmNlIGJhc2VkCisgICBvbiBhIGxvYWRlci4gIFRoZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyB0aGV5IGRvIGZvcgorICAgTW9kdWxlU3BlYy4gIFRoZSBmdW5jdGlvbiB1c2VzIGF2YWlsYWJsZSA6dGVybTpgbG9hZGVyYCBBUElzLCBzdWNoIGFzCisgICA6bWV0aDpgSW5zcGVjdExvYWRlci5pc19wYWNrYWdlYCwgdG8gZmlsbCBpbiBhbnkgbWlzc2luZworICAgaW5mb3JtYXRpb24gb24gdGhlIHNwZWMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIGxvY2F0aW9uLCAqLCBsb2FkZXI9Tm9uZSwgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSkKKworICAgQSBmYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIDpjbGFzczpgTW9kdWxlU3BlY2AgaW5zdGFuY2UgYmFzZWQKKyAgIG9uIHRoZSBwYXRoIHRvIGEgZmlsZS4gIE1pc3NpbmcgaW5mb3JtYXRpb24gd2lsbCBiZSBmaWxsZWQgaW4gb24gdGhlCisgICBzcGVjIGJ5IG1ha2luZyB1c2Ugb2YgbG9hZGVyIEFQSXMgYW5kIGJ5IHRoZSBpbXBsaWNhdGlvbiB0aGF0IHRoZQorICAgbW9kdWxlIHdpbGwgYmUgZmlsZS1iYXNlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pbmRleC5yc3QgYi9Eb2MvbGlicmFyeS9pbmRleC5yc3QKaW5kZXggMWIyNWM2ZS4uYTkyNWUxMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW5kZXgucnN0CisrKyBiL0RvYy9saWJyYXJ5L2luZGV4LnJzdApAQCAtMjAsNyArMjAsNyBAQAogZW5jb3VyYWdlIGFuZCBlbmhhbmNlIHRoZSBwb3J0YWJpbGl0eSBvZiBQeXRob24gcHJvZ3JhbXMgYnkgYWJzdHJhY3RpbmcKIGF3YXkgcGxhdGZvcm0tc3BlY2lmaWNzIGludG8gcGxhdGZvcm0tbmV1dHJhbCBBUElzLgogCi1UaGUgUHl0aG9uIGluc3RhbGxlcnMgZm9yIHRoZSBXaW5kb3dzIHBsYXRmb3JtIHVzdWFsbHkgaW5jbHVkZXMKK1RoZSBQeXRob24gaW5zdGFsbGVycyBmb3IgdGhlIFdpbmRvd3MgcGxhdGZvcm0gdXN1YWxseSBpbmNsdWRlCiB0aGUgZW50aXJlIHN0YW5kYXJkIGxpYnJhcnkgYW5kIG9mdGVuIGFsc28gaW5jbHVkZSBtYW55IGFkZGl0aW9uYWwKIGNvbXBvbmVudHMuIEZvciBVbml4LWxpa2Ugb3BlcmF0aW5nIHN5c3RlbXMgUHl0aG9uIGlzIG5vcm1hbGx5IHByb3ZpZGVkCiBhcyBhIGNvbGxlY3Rpb24gb2YgcGFja2FnZXMsIHNvIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdXNlIHRoZSBwYWNrYWdpbmcKQEAgLTMwLDcgKzMwLDcgQEAKIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCB0aGVyZSBpcyBhIGdyb3dpbmcgY29sbGVjdGlvbiBvZgogc2V2ZXJhbCB0aG91c2FuZCBjb21wb25lbnRzIChmcm9tIGluZGl2aWR1YWwgcHJvZ3JhbXMgYW5kIG1vZHVsZXMgdG8KIHBhY2thZ2VzIGFuZCBlbnRpcmUgYXBwbGljYXRpb24gZGV2ZWxvcG1lbnQgZnJhbWV3b3JrcyksIGF2YWlsYWJsZSBmcm9tCi10aGUgYFB5dGhvbiBQYWNrYWdlIEluZGV4IDxodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGk+YF8uCit0aGUgYFB5dGhvbiBQYWNrYWdlIEluZGV4IDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfLgogCiAKIC4uIHRvY3RyZWU6OgpAQCAtNjUsNiArNjUsNyBAQAogICAgdGsucnN0CiAgICBkZXZlbG9wbWVudC5yc3QKICAgIGRlYnVnLnJzdAorICAgZGlzdHJpYnV0aW9uLnJzdAogICAgcHl0aG9uLnJzdAogICAgY3VzdG9taW50ZXJwLnJzdAogICAgbW9kdWxlcy5yc3QKQEAgLTcyLDQgKzczLDUgQEAKICAgIG1pc2MucnN0CiAgICB3aW5kb3dzLnJzdAogICAgdW5peC5yc3QKKyAgIHN1cGVyc2VkZWQucnN0CiAgICB1bmRvYy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2luc3BlY3QucnN0IGIvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKaW5kZXggZDRjZjkwNS4uNTdlYjRmZiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW5zcGVjdC5yc3QKQEAgLTQzLDYgKzQzLDExIEBACiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjbGFzcyAgICAgfCBfX2RvY19fICAgICAgICAgfCBkb2N1bWVudGF0aW9uIHN0cmluZyAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IF9fbmFtZV9fICAgICAgICB8IG5hbWUgd2l0aCB3aGljaCB0aGlzICAgICAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBjbGFzcyB3YXMgZGVmaW5lZCAgICAgICAgIHwKKystLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IF9fcXVhbG5hbWVfXyAgICB8IHF1YWxpZmllZCBuYW1lICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgICAgICAgICAgIHwgX19tb2R1bGVfXyAgICAgIHwgbmFtZSBvZiBtb2R1bGUgaW4gd2hpY2ggICB8CiB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHRoaXMgY2xhc3Mgd2FzIGRlZmluZWQgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTUxLDYgKzU2LDggQEAKIHwgICAgICAgICAgIHwgX19uYW1lX18gICAgICAgIHwgbmFtZSB3aXRoIHdoaWNoIHRoaXMgICAgICB8CiB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IG1ldGhvZCB3YXMgZGVmaW5lZCAgICAgICAgfAogKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgIHwgX19xdWFsbmFtZV9fICAgIHwgcXVhbGlmaWVkIG5hbWUgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAgICAgICAgICAgfCBfX2Z1bmNfXyAgICAgICAgfCBmdW5jdGlvbiBvYmplY3QgICAgICAgICAgIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgY29udGFpbmluZyBpbXBsZW1lbnRhdGlvbiB8CiB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IG9mIG1ldGhvZCAgICAgICAgICAgICAgICAgfApAQCAtNjQsMTIgKzcxLDE5IEBACiB8ICAgICAgICAgICB8IF9fbmFtZV9fICAgICAgICB8IG5hbWUgd2l0aCB3aGljaCB0aGlzICAgICAgfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBmdW5jdGlvbiB3YXMgZGVmaW5lZCAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICB8IF9fcXVhbG5hbWVfXyAgICB8IHF1YWxpZmllZCBuYW1lICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgICAgICAgICAgIHwgX19jb2RlX18gICAgICAgIHwgY29kZSBvYmplY3QgY29udGFpbmluZyAgICB8CiB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IGNvbXBpbGVkIGZ1bmN0aW9uICAgICAgICAgfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCA6dGVybTpgYnl0ZWNvZGVgICAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IF9fZGVmYXVsdHNfXyAgICB8IHR1cGxlIG9mIGFueSBkZWZhdWx0ICAgICAgfAotfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB2YWx1ZXMgZm9yIGFyZ3VtZW50cyAgICAgIHwKK3wgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgdmFsdWVzIGZvciBwb3NpdGlvbmFsIG9yICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IGtleXdvcmQgcGFyYW1ldGVycyAgICAgICAgfAorKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgIHwgX19rd2RlZmF1bHRzX18gIHwgbWFwcGluZyBvZiBhbnkgZGVmYXVsdCAgICB8Cit8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8IHZhbHVlcyBmb3Iga2V5d29yZC1vbmx5ICAgfAorfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBwYXJhbWV0ZXJzICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IF9fZ2xvYmFsc19fICAgICB8IGdsb2JhbCBuYW1lc3BhY2UgaW4gd2hpY2ggfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCB0aGlzIGZ1bmN0aW9uIHdhcyBkZWZpbmVkIHwKQEAgLTE1OSw2ICsxNzMsOCBAQAogfCAgICAgICAgICAgfCBfX25hbWVfXyAgICAgICAgfCBvcmlnaW5hbCBuYW1lIG9mIHRoaXMgICAgIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb24gb3IgbWV0aG9kICAgICAgICB8CiArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCAgICAgICAgICAgfCBfX3F1YWxuYW1lX18gICAgfCBxdWFsaWZpZWQgbmFtZSAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8ICAgICAgICAgICB8IF9fc2VsZl9fICAgICAgICB8IGluc3RhbmNlIHRvIHdoaWNoIGEgICAgICAgfAogfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgfCBtZXRob2QgaXMgYm91bmQsIG9yICAgICAgIHwKIHwgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgYGBOb25lYGAgICAgICAgICAgICAgICAgICB8CkBAIC0xNzMsOCArMTg5LDkgQEAKIAogICAgLi4gbm90ZTo6CiAKLSAgICAgIDpmdW5jOmBnZXRtZW1iZXJzYCBkb2VzIG5vdCByZXR1cm4gbWV0YWNsYXNzIGF0dHJpYnV0ZXMgd2hlbiB0aGUgYXJndW1lbnQKLSAgICAgIGlzIGEgY2xhc3MgKHRoaXMgYmVoYXZpb3IgaXMgaW5oZXJpdGVkIGZyb20gdGhlIDpmdW5jOmBkaXJgIGZ1bmN0aW9uKS4KKyAgICAgIDpmdW5jOmBnZXRtZW1iZXJzYCB3aWxsIG9ubHkgcmV0dXJuIGNsYXNzIGF0dHJpYnV0ZXMgZGVmaW5lZCBpbiB0aGUKKyAgICAgIG1ldGFjbGFzcyB3aGVuIHRoZSBhcmd1bWVudCBpcyBhIGNsYXNzIGFuZCB0aG9zZSBhdHRyaWJ1dGVzIGhhdmUgYmVlbgorICAgICAgbGlzdGVkIGluIHRoZSBtZXRhY2xhc3MnIGN1c3RvbSA6bWV0aDpgX19kaXJfX2AuCiAKIAogLi4gZnVuY3Rpb246OiBnZXRtb2R1bGVpbmZvKHBhdGgpCkBAIC00MjgsMTEgKzQ0NSwxNCBAQAogICAgQWNjZXB0cyBhIHdpZGUgcmFuZ2Ugb2YgcHl0aG9uIGNhbGxhYmxlcywgZnJvbSBwbGFpbiBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgdG8KICAgIDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAgb2JqZWN0cy4KIAorICAgUmFpc2VzIDpleGM6YFZhbHVlRXJyb3JgIGlmIG5vIHNpZ25hdHVyZSBjYW4gYmUgcHJvdmlkZWQsIGFuZAorICAgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGF0IHR5cGUgb2Ygb2JqZWN0IGlzIG5vdCBzdXBwb3J0ZWQuCisKICAgIC4uIG5vdGU6OgogCiAgICAgICBTb21lIGNhbGxhYmxlcyBtYXkgbm90IGJlIGludHJvc3BlY3RhYmxlIGluIGNlcnRhaW4gaW1wbGVtZW50YXRpb25zIG9mCi0gICAgICBQeXRob24uICBGb3IgZXhhbXBsZSwgaW4gQ1B5dGhvbiwgYnVpbHQtaW4gZnVuY3Rpb25zIGRlZmluZWQgaW4gQyBwcm92aWRlCi0gICAgICBubyBtZXRhZGF0YSBhYm91dCB0aGVpciBhcmd1bWVudHMuCisgICAgICBQeXRob24uICBGb3IgZXhhbXBsZSwgaW4gQ1B5dGhvbiwgc29tZSBidWlsdC1pbiBmdW5jdGlvbnMgZGVmaW5lZCBpbgorICAgICAgQyBwcm92aWRlIG5vIG1ldGFkYXRhIGFib3V0IHRoZWlyIGFyZ3VtZW50cy4KIAogCiAuLiBjbGFzczo6IFNpZ25hdHVyZShwYXJhbWV0ZXJzPU5vbmUsIFwqLCByZXR1cm5fYW5ub3RhdGlvbj1TaWduYXR1cmUuZW1wdHkpCkBAIC01MTAsOSArNTMwLDggQEAKIAogICAgLi4gYXR0cmlidXRlOjogUGFyYW1ldGVyLm5hbWUKIAotICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBhcyBhIHN0cmluZy4gIE11c3QgYmUgYSB2YWxpZCBweXRob24gaWRlbnRpZmllcgotICAgICAgbmFtZSAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGBgUE9TSVRJT05BTF9PTkxZYGAgcGFyYW1ldGVycywgd2hpY2ggY2FuIGhhdmUKLSAgICAgIGl0IHNldCB0byBgYE5vbmVgYCkuCisgICAgICBUaGUgbmFtZSBvZiB0aGUgcGFyYW1ldGVyIGFzIGEgc3RyaW5nLiAgVGhlIG5hbWUgbXVzdCBiZSBhIHZhbGlkCisgICAgICBQeXRob24gaWRlbnRpZmllci4KIAogICAgLi4gYXR0cmlidXRlOjogUGFyYW1ldGVyLmRlZmF1bHQKIApAQCAtNTk2LDYgKzYxNSwxMCBAQAogICAgICAgICAgPj4+IHN0cihwYXJhbS5yZXBsYWNlKGRlZmF1bHQ9UGFyYW1ldGVyLmVtcHR5LCBhbm5vdGF0aW9uPSdzcGFtJykpCiAgICAgICAgICAiZm9vOidzcGFtJyIKIAorICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgIEluIFB5dGhvbiAzLjMgUGFyYW1ldGVyIG9iamVjdHMgd2VyZSBhbGxvd2VkIHRvIGhhdmUgYGBuYW1lYGAgc2V0CisgICAgICAgIHRvIGBgTm9uZWBgIGlmIHRoZWlyIGBga2luZGBgIHdhcyBzZXQgdG8gYGBQT1NJVElPTkFMX09OTFlgYC4KKyAgICAgICAgVGhpcyBpcyBubyBsb25nZXIgcGVybWl0dGVkLgogCiAuLiBjbGFzczo6IEJvdW5kQXJndW1lbnRzCiAKQEAgLTYzMCw3ICs2NTMsOCBAQAogICAgICAgICAoKDUsKSwge30pCiAKICAgICAgICAgPj4+IGZvciBwYXJhbSBpbiBzaWcucGFyYW1ldGVycy52YWx1ZXMoKToKLSAgICAgICAgLi4uICAgICBpZiBwYXJhbS5uYW1lIG5vdCBpbiBiYS5hcmd1bWVudHM6CisgICAgICAgIC4uLiAgICAgaWYgKHBhcmFtLm5hbWUgbm90IGluIGJhLmFyZ3VtZW50cworICAgICAgICAuLi4gICAgICAgICAgICAgYW5kIHBhcmFtLmRlZmF1bHQgaXMgbm90IHBhcmFtLmVtcHR5KToKICAgICAgICAgLi4uICAgICAgICAgYmEuYXJndW1lbnRzW3BhcmFtLm5hbWVdID0gcGFyYW0uZGVmYXVsdAogCiAgICAgICAgID4+PiBiYS5hcmdzLCBiYS5rd2FyZ3MKQEAgLTY0Nyw2ICs2NzEsMTAgQEAKICAgICAgIEEgZGljdCBvZiBrZXl3b3JkIGFyZ3VtZW50cyB2YWx1ZXMuICBEeW5hbWljYWxseSBjb21wdXRlZCBmcm9tIHRoZQogICAgICAgOmF0dHI6YGFyZ3VtZW50c2AgYXR0cmlidXRlLgogCisgICAuLiBhdHRyaWJ1dGU6OiBCb3VuZEFyZ3VtZW50cy5zaWduYXR1cmUKKworICAgICAgQSByZWZlcmVuY2UgdG8gdGhlIHBhcmVudCA6Y2xhc3M6YFNpZ25hdHVyZWAgb2JqZWN0LgorCiAgICBUaGUgOmF0dHI6YGFyZ3NgIGFuZCA6YXR0cjpga3dhcmdzYCBwcm9wZXJ0aWVzIGNhbiBiZSB1c2VkIHRvIGludm9rZQogICAgZnVuY3Rpb25zOjoKIApAQCAtNzE3LDYgKzc0NSwxMSBAQAogICAgICAgQ29uc2lkZXIgdXNpbmcgdGhlIG5ldyA6cmVmOmBTaWduYXR1cmUgT2JqZWN0IDxpbnNwZWN0LXNpZ25hdHVyZS1vYmplY3Q+YAogICAgICAgaW50ZXJmYWNlLCB3aGljaCBwcm92aWRlcyBhIGJldHRlciB3YXkgb2YgaW50cm9zcGVjdGluZyBmdW5jdGlvbnMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdyBiYXNlZCBvbiA6ZnVuYzpgc2lnbmF0dXJlYCwgYnV0IHN0aWxsIGlnbm9yZXMKKyAgICAgIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGVzIGFuZCBpbmNsdWRlcyB0aGUgYWxyZWFkeSBib3VuZCBmaXJzdAorICAgICAgcGFyYW1ldGVyIGluIHRoZSBzaWduYXR1cmUgb3V0cHV0IGZvciBib3VuZCBtZXRob2RzLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0YXJndmFsdWVzKGZyYW1lKQogCkBAIC03MzMsMTcgKzc2NiwyMCBAQAogICAgOmZ1bmM6YGdldGFyZ3NwZWNgIG9yIDpmdW5jOmBnZXRmdWxsYXJnc3BlY2AuCiAKICAgIFRoZSBmaXJzdCBzZXZlbiBhcmd1bWVudHMgYXJlIChgYGFyZ3NgYCwgYGB2YXJhcmdzYGAsIGBgdmFya3dgYCwKLSAgIGBgZGVmYXVsdHNgYCwgYGBrd29ubHlhcmdzYGAsIGBga3dvbmx5ZGVmYXVsdHNgYCwgYGBhbm5vdGF0aW9uc2BgKS4gVGhlCi0gICBvdGhlciBmaXZlIGFyZ3VtZW50cyBhcmUgdGhlIGNvcnJlc3BvbmRpbmcgb3B0aW9uYWwgZm9ybWF0dGluZyBmdW5jdGlvbnMKLSAgIHRoYXQgYXJlIGNhbGxlZCB0byB0dXJuIG5hbWVzIGFuZCB2YWx1ZXMgaW50byBzdHJpbmdzLiBUaGUgbGFzdCBhcmd1bWVudAotICAgaXMgYW4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gZm9ybWF0IHRoZSBzZXF1ZW5jZSBvZiBhcmd1bWVudHMuIEZvciBleGFtcGxlOjoKKyAgIGBgZGVmYXVsdHNgYCwgYGBrd29ubHlhcmdzYGAsIGBga3dvbmx5ZGVmYXVsdHNgYCwgYGBhbm5vdGF0aW9uc2BgKS4KIAotICAgID4+PiBmcm9tIGluc3BlY3QgaW1wb3J0IGZvcm1hdGFyZ3NwZWMsIGdldGZ1bGxhcmdzcGVjCi0gICAgPj4+IGRlZiBmKGE6IGludCwgYjogZmxvYXQpOgotICAgIC4uLiAgICAgcGFzcwotICAgIC4uLgotICAgID4+PiBmb3JtYXRhcmdzcGVjKCpnZXRmdWxsYXJnc3BlYyhmKSkKLSAgICAnKGE6IGludCwgYjogZmxvYXQpJworICAgVGhlIG90aGVyIHNpeCBhcmd1bWVudHMgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdG8gdHVybiBhcmd1bWVudCBuYW1lcywKKyAgIGBgKmBgIGFyZ3VtZW50IG5hbWUsIGBgKipgYCBhcmd1bWVudCBuYW1lLCBkZWZhdWx0IHZhbHVlcywgcmV0dXJuIGFubm90YXRpb24KKyAgIGFuZCBpbmRpdmlkdWFsIGFubm90YXRpb25zIGludG8gc3RyaW5ncywgcmVzcGVjdGl2ZWx5LgorCisgICBGb3IgZXhhbXBsZToKKworICAgPj4+IGZyb20gaW5zcGVjdCBpbXBvcnQgZm9ybWF0YXJnc3BlYywgZ2V0ZnVsbGFyZ3NwZWMKKyAgID4+PiBkZWYgZihhOiBpbnQsIGI6IGZsb2F0KToKKyAgIC4uLiAgICAgcGFzcworICAgLi4uCisgICA+Pj4gZm9ybWF0YXJnc3BlYygqZ2V0ZnVsbGFyZ3NwZWMoZikpCisgICAnKGE6IGludCwgYjogZmxvYXQpJwogCiAKIC4uIGZ1bmN0aW9uOjogZm9ybWF0YXJndmFsdWVzKGFyZ3NbLCB2YXJhcmdzLCB2YXJrdywgbG9jYWxzLCBmb3JtYXRhcmcsIGZvcm1hdHZhcmFyZ3MsIGZvcm1hdHZhcmt3LCBmb3JtYXR2YWx1ZV0pCkBAIC04MDYsNiArODQyLDIzIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCisuLiBmdW5jdGlvbjo6IHVud3JhcChmdW5jLCAqLCBzdG9wPU5vbmUpCisKKyAgIEdldCB0aGUgb2JqZWN0IHdyYXBwZWQgYnkgKmZ1bmMqLiBJdCBmb2xsb3dzIHRoZSBjaGFpbiBvZiA6YXR0cjpgX193cmFwcGVkX19gCisgICBhdHRyaWJ1dGVzIHJldHVybmluZyB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluLgorCisgICAqc3RvcCogaXMgYW4gb3B0aW9uYWwgY2FsbGJhY2sgYWNjZXB0aW5nIGFuIG9iamVjdCBpbiB0aGUgd3JhcHBlciBjaGFpbgorICAgYXMgaXRzIHNvbGUgYXJndW1lbnQgdGhhdCBhbGxvd3MgdGhlIHVud3JhcHBpbmcgdG8gYmUgdGVybWluYXRlZCBlYXJseSBpZgorICAgdGhlIGNhbGxiYWNrIHJldHVybnMgYSB0cnVlIHZhbHVlLiBJZiB0aGUgY2FsbGJhY2sgbmV2ZXIgcmV0dXJucyBhIHRydWUKKyAgIHZhbHVlLCB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIGNoYWluIGlzIHJldHVybmVkIGFzIHVzdWFsLiBGb3IgZXhhbXBsZSwKKyAgIDpmdW5jOmBzaWduYXR1cmVgIHVzZXMgdGhpcyB0byBzdG9wIHVud3JhcHBpbmcgaWYgYW55IG9iamVjdCBpbiB0aGUKKyAgIGNoYWluIGhhcyBhIGBgX19zaWduYXR1cmVfX2BgIGF0dHJpYnV0ZSBkZWZpbmVkLgorCisgICA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQgaWYgYSBjeWNsZSBpcyBlbmNvdW50ZXJlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gX2luc3BlY3Qtc3RhY2s6CiAKIFRoZSBpbnRlcnByZXRlciBzdGFjawpAQCAtODM4LDYgKzg5MSwxMCBAQAogICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgIGRlbCBmcmFtZQogCisgICBJZiB5b3Ugd2FudCB0byBrZWVwIHRoZSBmcmFtZSBhcm91bmQgKGZvciBleGFtcGxlIHRvIHByaW50IGEgdHJhY2ViYWNrCisgICBsYXRlciksIHlvdSBjYW4gYWxzbyBicmVhayByZWZlcmVuY2UgY3ljbGVzIGJ5IHVzaW5nIHRoZQorICAgOm1ldGg6YGZyYW1lLmNsZWFyYCBtZXRob2QuCisKIFRoZSBvcHRpb25hbCAqY29udGV4dCogYXJndW1lbnQgc3VwcG9ydGVkIGJ5IG1vc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIHNwZWNpZmllcwogdGhlIG51bWJlciBvZiBsaW5lcyBvZiBjb250ZXh0IHRvIHJldHVybiwgd2hpY2ggYXJlIGNlbnRlcmVkIGFyb3VuZCB0aGUgY3VycmVudAogbGluZS4KQEAgLTk5NCwzICsxMDUxLDIyIEBACiAgICAgICByZXR1cm4gYW4gZW1wdHkgZGljdGlvbmFyeS4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKworLi4gX2luc3BlY3QtbW9kdWxlLWNsaToKKworQ29tbWFuZCBMaW5lIEludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgYSBiYXNpYyBpbnRyb3NwZWN0aW9uIGNhcGFiaWxpdHkKK2Zyb20gdGhlIGNvbW1hbmQgbGluZS4KKworLi4gcHJvZ3JhbTo6IGluc3BlY3QKKworQnkgZGVmYXVsdCwgYWNjZXB0cyB0aGUgbmFtZSBvZiBhIG1vZHVsZSBhbmQgcHJpbnRzIHRoZSBzb3VyY2Ugb2YgdGhhdAorbW9kdWxlLiBBIGNsYXNzIG9yIGZ1bmN0aW9uIHdpdGhpbiB0aGUgbW9kdWxlIGNhbiBiZSBwcmludGVkIGluc3RlYWQgYnkKK2FwcGVuZGVkIGEgY29sb24gYW5kIHRoZSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgdGFyZ2V0IG9iamVjdC4KKworLi4gY21kb3B0aW9uOjogLS1kZXRhaWxzCisKKyAgIFByaW50IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgb2JqZWN0IHJhdGhlciB0aGFuIHRoZSBzb3VyY2UgY29kZQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaW50cm8ucnN0IGIvRG9jL2xpYnJhcnkvaW50cm8ucnN0CmluZGV4IGEwZjJkNjMuLmUzMjgzY2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2ludHJvLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pbnRyby5yc3QKQEAgLTMwLDEwICszMCw4IEBACiBvcHRpb24gd2FzIGNob3NlbiBhdCB0aGUgdGltZSB3aGVuIFB5dGhvbiB3YXMgY29tcGlsZWQgYW5kIGluc3RhbGxlZC4KIAogVGhpcyBtYW51YWwgaXMgb3JnYW5pemVkICJmcm9tIHRoZSBpbnNpZGUgb3V0OiIgaXQgZmlyc3QgZGVzY3JpYmVzIHRoZSBidWlsdC1pbgotZGF0YSB0eXBlcywgdGhlbiB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBleGNlcHRpb25zLCBhbmQgZmluYWxseSB0aGUgbW9kdWxlcywKLWdyb3VwZWQgaW4gY2hhcHRlcnMgb2YgcmVsYXRlZCBtb2R1bGVzLiAgVGhlIG9yZGVyaW5nIG9mIHRoZSBjaGFwdGVycyBhcyB3ZWxsIGFzCi10aGUgb3JkZXJpbmcgb2YgdGhlIG1vZHVsZXMgd2l0aGluIGVhY2ggY2hhcHRlciBpcyByb3VnaGx5IGZyb20gbW9zdCByZWxldmFudCB0bwotbGVhc3QgaW1wb3J0YW50LgorZnVuY3Rpb25zLCBkYXRhIHR5cGVzIGFuZCBleGNlcHRpb25zLCBhbmQgZmluYWxseSB0aGUgbW9kdWxlcywgZ3JvdXBlZCBpbgorY2hhcHRlcnMgb2YgcmVsYXRlZCBtb2R1bGVzLgogCiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHN0YXJ0IHJlYWRpbmcgdGhpcyBtYW51YWwgZnJvbSB0aGUgc3RhcnQsIGFuZCBza2lwIHRvIHRoZQogbmV4dCBjaGFwdGVyIHdoZW4geW91IGdldCBib3JlZCwgeW91IHdpbGwgZ2V0IGEgcmVhc29uYWJsZSBvdmVydmlldyBvZiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2lvLnJzdCBiL0RvYy9saWJyYXJ5L2lvLnJzdAppbmRleCA3MTY3NjdmLi41OTJiYzQ4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pby5yc3QKKysrIGIvRG9jL2xpYnJhcnkvaW8ucnN0CkBAIC0yODMsMTMgKzI4MywxMyBAQAogICAgICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBzdHJlYW0gY2FuIGJlIHJlYWQgZnJvbS4gIElmIGBgRmFsc2VgYCwgOm1ldGg6YHJlYWRgCiAgICAgICB3aWxsIHJhaXNlIDpleGM6YE9TRXJyb3JgLgogCi0gICAuLiBtZXRob2Q6OiByZWFkbGluZShsaW1pdD0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiBvbmUgbGluZSBmcm9tIHRoZSBzdHJlYW0uICBJZiAqbGltaXQqIGlzIHNwZWNpZmllZCwgYXQKLSAgICAgIG1vc3QgKmxpbWl0KiBieXRlcyB3aWxsIGJlIHJlYWQuCisgICAgICBSZWFkIGFuZCByZXR1cm4gb25lIGxpbmUgZnJvbSB0aGUgc3RyZWFtLiAgSWYgKnNpemUqIGlzIHNwZWNpZmllZCwgYXQKKyAgICAgIG1vc3QgKnNpemUqIGJ5dGVzIHdpbGwgYmUgcmVhZC4KIAogICAgICAgVGhlIGxpbmUgdGVybWluYXRvciBpcyBhbHdheXMgYGBiJ1xuJ2BgIGZvciBiaW5hcnkgZmlsZXM7IGZvciB0ZXh0IGZpbGVzLAotICAgICAgdGhlICpuZXdsaW5lcyogYXJndW1lbnQgdG8gOmZ1bmM6YG9wZW5gIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCB0aGUgbGluZQorICAgICAgdGhlICpuZXdsaW5lKiBhcmd1bWVudCB0byA6ZnVuYzpgb3BlbmAgY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCiAgICAgICB0ZXJtaW5hdG9yKHMpIHJlY29nbml6ZWQuCiAKICAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lcyhoaW50PS0xKQpAQCAtMzAxLDExICszMDEsMTEgQEAKICAgICAgIE5vdGUgdGhhdCBpdCdzIGFscmVhZHkgcG9zc2libGUgdG8gaXRlcmF0ZSBvbiBmaWxlIG9iamVjdHMgdXNpbmcgYGBmb3IKICAgICAgIGxpbmUgaW4gZmlsZTogLi4uYGAgd2l0aG91dCBjYWxsaW5nIGBgZmlsZS5yZWFkbGluZXMoKWBgLgogCi0gICAuLiBtZXRob2Q6OiBzZWVrKG9mZnNldCwgd2hlbmNlPVNFRUtfU0VUKQorICAgLi4gbWV0aG9kOjogc2VlayhvZmZzZXRbLCB3aGVuY2VdKQogCiAgICAgICBDaGFuZ2UgdGhlIHN0cmVhbSBwb3NpdGlvbiB0byB0aGUgZ2l2ZW4gYnl0ZSAqb2Zmc2V0Ki4gICpvZmZzZXQqIGlzCi0gICAgICBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgcG9zaXRpb24gaW5kaWNhdGVkIGJ5ICp3aGVuY2UqLiAgVmFsdWVzIGZvcgotICAgICAgKndoZW5jZSogYXJlOgorICAgICAgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIHBvc2l0aW9uIGluZGljYXRlZCBieSAqd2hlbmNlKi4gIFRoZSBkZWZhdWx0CisgICAgICB2YWx1ZSBmb3IgKndoZW5jZSogaXMgOmRhdGE6YFNFRUtfU0VUYC4gIFZhbHVlcyBmb3IgKndoZW5jZSogYXJlOgogCiAgICAgICAqIDpkYXRhOmBTRUVLX1NFVGAgb3IgYGAwYGAgLS0gc3RhcnQgb2YgdGhlIHN0cmVhbSAodGhlIGRlZmF1bHQpOwogICAgICAgICAqb2Zmc2V0KiBzaG91bGQgYmUgemVybyBvciBwb3NpdGl2ZQpAQCAtMzUzLDYgKzM1MywxMiBAQAogICAgICAgaXMgdXN1YWwgZm9yIGVhY2ggb2YgdGhlIGxpbmVzIHByb3ZpZGVkIHRvIGhhdmUgYSBsaW5lIHNlcGFyYXRvciBhdCB0aGUKICAgICAgIGVuZC4KIAorICAgLi4gbWV0aG9kOjogX19kZWxfXygpCisKKyAgICAgIFByZXBhcmUgZm9yIG9iamVjdCBkZXN0cnVjdGlvbi4gOmNsYXNzOmBJT0Jhc2VgIHByb3ZpZGVzIGEgZGVmYXVsdAorICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBtZXRob2QgdGhhdCBjYWxscyB0aGUgaW5zdGFuY2UncworICAgICAgOm1ldGg6YH5JT0Jhc2UuY2xvc2VgIG1ldGhvZC4KKwogCiAuLiBjbGFzczo6IFJhd0lPQmFzZQogCkBAIC0zNjYsMTQgKzM3MiwxNCBAQAogICAgSW4gYWRkaXRpb24gdG8gdGhlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMgZnJvbSA6Y2xhc3M6YElPQmFzZWAsCiAgICA6Y2xhc3M6YFJhd0lPQmFzZWAgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBtZXRob2RzOgogCi0gICAuLiBtZXRob2Q6OiByZWFkKG49LTEpCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemU9LTEpCiAKLSAgICAgIFJlYWQgdXAgdG8gKm4qIGJ5dGVzIGZyb20gdGhlIG9iamVjdCBhbmQgcmV0dXJuIHRoZW0uICBBcyBhIGNvbnZlbmllbmNlLAotICAgICAgaWYgKm4qIGlzIHVuc3BlY2lmaWVkIG9yIC0xLCA6bWV0aDpgcmVhZGFsbGAgaXMgY2FsbGVkLiAgT3RoZXJ3aXNlLAotICAgICAgb25seSBvbmUgc3lzdGVtIGNhbGwgaXMgZXZlciBtYWRlLiAgRmV3ZXIgdGhhbiAqbiogYnl0ZXMgbWF5IGJlCi0gICAgICByZXR1cm5lZCBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBjYWxsIHJldHVybnMgZmV3ZXIgdGhhbiAqbiogYnl0ZXMuCisgICAgICBSZWFkIHVwIHRvICpzaXplKiBieXRlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybiB0aGVtLiAgQXMgYSBjb252ZW5pZW5jZSwKKyAgICAgIGlmICpzaXplKiBpcyB1bnNwZWNpZmllZCBvciAtMSwgOm1ldGg6YHJlYWRhbGxgIGlzIGNhbGxlZC4gIE90aGVyd2lzZSwKKyAgICAgIG9ubHkgb25lIHN5c3RlbSBjYWxsIGlzIGV2ZXIgbWFkZS4gIEZld2VyIHRoYW4gKnNpemUqIGJ5dGVzIG1heSBiZQorICAgICAgcmV0dXJuZWQgaWYgdGhlIG9wZXJhdGluZyBzeXN0ZW0gY2FsbCByZXR1cm5zIGZld2VyIHRoYW4gKnNpemUqIGJ5dGVzLgogCi0gICAgICBJZiAwIGJ5dGVzIGFyZSByZXR1cm5lZCwgYW5kICpuKiB3YXMgbm90IDAsIHRoaXMgaW5kaWNhdGVzIGVuZCBvZiBmaWxlLgorICAgICAgSWYgMCBieXRlcyBhcmUgcmV0dXJuZWQsIGFuZCAqc2l6ZSogd2FzIG5vdCAwLCB0aGlzIGluZGljYXRlcyBlbmQgb2YgZmlsZS4KICAgICAgIElmIHRoZSBvYmplY3QgaXMgaW4gbm9uLWJsb2NraW5nIG1vZGUgYW5kIG5vIGJ5dGVzIGFyZSBhdmFpbGFibGUsCiAgICAgICBgYE5vbmVgYCBpcyByZXR1cm5lZC4KIApAQCAtNDQyLDEwICs0NDgsMTAgQEAKIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKLSAgIC4uIG1ldGhvZDo6IHJlYWQobj0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWQoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcy4gIElmIHRoZSBhcmd1bWVudCBpcyBvbWl0dGVkLCBgYE5vbmVgYCwgb3IKLSAgICAgIG5lZ2F0aXZlLCBkYXRhIGlzIHJlYWQgYW5kIHJldHVybmVkIHVudGlsIEVPRiBpcyByZWFjaGVkLiAgQW4gZW1wdHkKKyAgICAgIFJlYWQgYW5kIHJldHVybiB1cCB0byAqc2l6ZSogYnl0ZXMuICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgYGBOb25lYGAsCisgICAgICBvciBuZWdhdGl2ZSwgZGF0YSBpcyByZWFkIGFuZCByZXR1cm5lZCB1bnRpbCBFT0YgaXMgcmVhY2hlZC4gIEFuIGVtcHR5CiAgICAgICA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgaXMgcmV0dXJuZWQgaWYgdGhlIHN0cmVhbSBpcyBhbHJlYWR5IGF0IEVPRi4KIAogICAgICAgSWYgdGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlLCBhbmQgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyBub3QKQEAgLTQ1Nyw5ICs0NjMsOSBAQAogICAgICAgQSA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgdW5kZXJseWluZyByYXcgc3RyZWFtIGlzIGluCiAgICAgICBub24gYmxvY2tpbmctbW9kZSwgYW5kIGhhcyBubyBkYXRhIGF2YWlsYWJsZSBhdCB0aGUgbW9tZW50LgogCi0gICAuLiBtZXRob2Q6OiByZWFkMShuPS0xKQorICAgLi4gbWV0aG9kOjogcmVhZDEoc2l6ZT0tMSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcywgd2l0aCBhdCBtb3N0IG9uZSBjYWxsIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgICBSZWFkIGFuZCByZXR1cm4gdXAgdG8gKnNpemUqIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIGNhbGwgdG8gdGhlIHVuZGVybHlpbmcKICAgICAgIHJhdyBzdHJlYW0ncyA6bWV0aDpgflJhd0lPQmFzZS5yZWFkYCBtZXRob2QuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91CiAgICAgICBhcmUgaW1wbGVtZW50aW5nIHlvdXIgb3duIGJ1ZmZlcmluZyBvbiB0b3Agb2YgYSA6Y2xhc3M6YEJ1ZmZlcmVkSU9CYXNlYAogICAgICAgb2JqZWN0LgpAQCAtNTIyLDYgKzUyOCw4IEBACiAgICA6bW9kOmBvcy5vcGVuYCBhcyAqb3BlbmVyKiByZXN1bHRzIGluIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBwYXNzaW5nCiAgICBgYE5vbmVgYCkuCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIGZpbGUgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICBTZWUgdGhlIDpmdW5jOmBvcGVuYCBidWlsdC1pbiBmdW5jdGlvbiBmb3IgZXhhbXBsZXMgb24gdXNpbmcgdGhlICpvcGVuZXIqCiAgICBwYXJhbWV0ZXIuCiAKQEAgLTUyOSw2ICs1MzcsOSBAQAogICAgICAgVGhlICpvcGVuZXIqIHBhcmFtZXRlciB3YXMgYWRkZWQuCiAgICAgICBUaGUgYGAneCdgYCBtb2RlIHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmaWxlIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKICAgIEluIGFkZGl0aW9uIHRvIHRoZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIGZyb20gOmNsYXNzOmBJT0Jhc2VgIGFuZAogICAgOmNsYXNzOmBSYXdJT0Jhc2VgLCA6Y2xhc3M6YEZpbGVJT2AgcHJvdmlkZXMgdGhlIGZvbGxvd2luZyBkYXRhCiAgICBhdHRyaWJ1dGVzOgpAQCAtNTUyLDcgKzU2Myw4IEBACiAuLiBjbGFzczo6IEJ5dGVzSU8oW2luaXRpYWxfYnl0ZXNdKQogCiAgICBBIHN0cmVhbSBpbXBsZW1lbnRhdGlvbiB1c2luZyBhbiBpbi1tZW1vcnkgYnl0ZXMgYnVmZmVyLiAgSXQgaW5oZXJpdHMKLSAgIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgLgorICAgOmNsYXNzOmBCdWZmZXJlZElPQmFzZWAuICBUaGUgYnVmZmVyIGlzIGRpc2NhcmRlZCB3aGVuIHRoZQorICAgOm1ldGg6YH5JT0Jhc2UuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCiAKICAgIFRoZSBhcmd1bWVudCAqaW5pdGlhbF9ieXRlcyogY29udGFpbnMgb3B0aW9uYWwgaW5pdGlhbCA6Y2xhc3M6YGJ5dGVzYCBkYXRhLgogCkBAIC01NzMsNyArNTg1LDcgQEAKIAogICAgICAgLi4gbm90ZTo6CiAgICAgICAgICBBcyBsb25nIGFzIHRoZSB2aWV3IGV4aXN0cywgdGhlIDpjbGFzczpgQnl0ZXNJT2Agb2JqZWN0IGNhbm5vdCBiZQotICAgICAgICAgcmVzaXplZC4KKyAgICAgICAgIHJlc2l6ZWQgb3IgY2xvc2VkLgogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIApAQCAtNTgxLDYgKzU5Myw3IEBACiAKICAgICAgIFJldHVybiA6Y2xhc3M6YGJ5dGVzYCBjb250YWluaW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGJ1ZmZlci4KIAorCiAgICAuLiBtZXRob2Q6OiByZWFkMSgpCiAKICAgICAgIEluIDpjbGFzczpgQnl0ZXNJT2AsIHRoaXMgaXMgdGhlIHNhbWUgYXMgOm1ldGg6YHJlYWRgLgpAQCAtNjAxLDIxICs2MTQsMjEgQEAKICAgIDpjbGFzczpgQnVmZmVyZWRSZWFkZXJgIHByb3ZpZGVzIG9yIG92ZXJyaWRlcyB0aGVzZSBtZXRob2RzIGluIGFkZGl0aW9uIHRvCiAgICB0aG9zZSBmcm9tIDpjbGFzczpgQnVmZmVyZWRJT0Jhc2VgIGFuZCA6Y2xhc3M6YElPQmFzZWA6CiAKLSAgIC4uIG1ldGhvZDo6IHBlZWsoW25dKQorICAgLi4gbWV0aG9kOjogcGVlayhbc2l6ZV0pCiAKICAgICAgIFJldHVybiBieXRlcyBmcm9tIHRoZSBzdHJlYW0gd2l0aG91dCBhZHZhbmNpbmcgdGhlIHBvc2l0aW9uLiAgQXQgbW9zdCBvbmUKICAgICAgIHNpbmdsZSByZWFkIG9uIHRoZSByYXcgc3RyZWFtIGlzIGRvbmUgdG8gc2F0aXNmeSB0aGUgY2FsbC4gVGhlIG51bWJlciBvZgogICAgICAgYnl0ZXMgcmV0dXJuZWQgbWF5IGJlIGxlc3Mgb3IgbW9yZSB0aGFuIHJlcXVlc3RlZC4KIAotICAgLi4gbWV0aG9kOjogcmVhZChbbl0pCisgICAuLiBtZXRob2Q6OiByZWFkKFtzaXplXSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuICpuKiBieXRlcywgb3IgaWYgKm4qIGlzIG5vdCBnaXZlbiBvciBuZWdhdGl2ZSwgdW50aWwgRU9GCi0gICAgICBvciBpZiB0aGUgcmVhZCBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZyBtb2RlLgorICAgICAgUmVhZCBhbmQgcmV0dXJuICpzaXplKiBieXRlcywgb3IgaWYgKnNpemUqIGlzIG5vdCBnaXZlbiBvciBuZWdhdGl2ZSwgdW50aWwKKyAgICAgIEVPRiBvciBpZiB0aGUgcmVhZCBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZyBtb2RlLgogCi0gICAuLiBtZXRob2Q6OiByZWFkMShuKQorICAgLi4gbWV0aG9kOjogcmVhZDEoc2l6ZSkKIAotICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpuKiBieXRlcyB3aXRoIG9ubHkgb25lIGNhbGwgb24gdGhlIHJhdyBzdHJlYW0uICBJZgotICAgICAgYXQgbGVhc3Qgb25lIGJ5dGUgaXMgYnVmZmVyZWQsIG9ubHkgYnVmZmVyZWQgYnl0ZXMgYXJlIHJldHVybmVkLgorICAgICAgUmVhZCBhbmQgcmV0dXJuIHVwIHRvICpzaXplKiBieXRlcyB3aXRoIG9ubHkgb25lIGNhbGwgb24gdGhlIHJhdyBzdHJlYW0uCisgICAgICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgb25seSBidWZmZXJlZCBieXRlcyBhcmUgcmV0dXJuZWQuCiAgICAgICBPdGhlcndpc2UsIG9uZSByYXcgc3RyZWFtIHJlYWQgY2FsbCBpcyBtYWRlLgogCiAKQEAgLTczNSwyMiArNzQ4LDIzIEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQogCi0gICAuLiBtZXRob2Q6OiByZWFkKG4pCisgICAuLiBtZXRob2Q6OiByZWFkKHNpemUpCiAKLSAgICAgIFJlYWQgYW5kIHJldHVybiBhdCBtb3N0ICpuKiBjaGFyYWN0ZXJzIGZyb20gdGhlIHN0cmVhbSBhcyBhIHNpbmdsZQotICAgICAgOmNsYXNzOmBzdHJgLiAgSWYgKm4qIGlzIG5lZ2F0aXZlIG9yIGBgTm9uZWBgLCByZWFkcyB1bnRpbCBFT0YuCisgICAgICBSZWFkIGFuZCByZXR1cm4gYXQgbW9zdCAqc2l6ZSogY2hhcmFjdGVycyBmcm9tIHRoZSBzdHJlYW0gYXMgYSBzaW5nbGUKKyAgICAgIDpjbGFzczpgc3RyYC4gIElmICpzaXplKiBpcyBuZWdhdGl2ZSBvciBgYE5vbmVgYCwgcmVhZHMgdW50aWwgRU9GLgogCi0gICAuLiBtZXRob2Q6OiByZWFkbGluZShsaW1pdD0tMSkKKyAgIC4uIG1ldGhvZDo6IHJlYWRsaW5lKHNpemU9LTEpCiAKICAgICAgIFJlYWQgdW50aWwgbmV3bGluZSBvciBFT0YgYW5kIHJldHVybiBhIHNpbmdsZSBgYHN0cmBgLiAgSWYgdGhlIHN0cmVhbSBpcwogICAgICAgYWxyZWFkeSBhdCBFT0YsIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KIAotICAgICAgSWYgKmxpbWl0KiBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgKmxpbWl0KiBjaGFyYWN0ZXJzIHdpbGwgYmUgcmVhZC4KKyAgICAgIElmICpzaXplKiBpcyBzcGVjaWZpZWQsIGF0IG1vc3QgKnNpemUqIGNoYXJhY3RlcnMgd2lsbCBiZSByZWFkLgogCi0gICAuLiBtZXRob2Q6OiBzZWVrKG9mZnNldCwgd2hlbmNlPVNFRUtfU0VUKQorICAgLi4gbWV0aG9kOjogc2VlayhvZmZzZXRbLCB3aGVuY2VdKQogCi0gICAgICBDaGFuZ2UgdGhlIHN0cmVhbSBwb3NpdGlvbiB0byB0aGUgZ2l2ZW4gKm9mZnNldCouICBCZWhhdmlvdXIgZGVwZW5kcwotICAgICAgb24gdGhlICp3aGVuY2UqIHBhcmFtZXRlcjoKKyAgICAgIENoYW5nZSB0aGUgc3RyZWFtIHBvc2l0aW9uIHRvIHRoZSBnaXZlbiAqb2Zmc2V0Ki4gIEJlaGF2aW91ciBkZXBlbmRzIG9uCisgICAgICB0aGUgKndoZW5jZSogcGFyYW1ldGVyLiAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yICp3aGVuY2UqIGlzCisgICAgICA6ZGF0YTpgU0VFS19TRVRgLgogCiAgICAgICAqIDpkYXRhOmBTRUVLX1NFVGAgb3IgYGAwYGA6IHNlZWsgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbQogICAgICAgICAodGhlIGRlZmF1bHQpOyAqb2Zmc2V0KiBtdXN0IGVpdGhlciBiZSBhIG51bWJlciByZXR1cm5lZCBieQpAQCAtODQ3LDIxICs4NjEsMjggQEAKIAogLi4gY2xhc3M6OiBTdHJpbmdJTyhpbml0aWFsX3ZhbHVlPScnLCBuZXdsaW5lPSdcXG4nKQogCi0gICBBbiBpbi1tZW1vcnkgc3RyZWFtIGZvciB0ZXh0IEkvTy4KKyAgIEFuIGluLW1lbW9yeSBzdHJlYW0gZm9yIHRleHQgSS9PLiAgVGhlIHRleHQgYnVmZmVyIGlzIGRpc2NhcmRlZCB3aGVuIHRoZQorICAgOm1ldGg6YH5JT0Jhc2UuY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQuCiAKLSAgIFRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBidWZmZXIgKGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0KSBjYW4gYmUgc2V0IGJ5Ci0gICBwcm92aWRpbmcgKmluaXRpYWxfdmFsdWUqLiAgVGhlICpuZXdsaW5lKiBhcmd1bWVudCB3b3JrcyBsaWtlIHRoYXQgb2YKLSAgIDpjbGFzczpgVGV4dElPV3JhcHBlcmAuICBUaGUgZGVmYXVsdCBpcyB0byBjb25zaWRlciBvbmx5IGBgXG5gYCBjaGFyYWN0ZXJzCi0gICBhcyBlbmQgb2YgbGluZXMgYW5kIHRvIGRvIG5vIG5ld2xpbmUgdHJhbnNsYXRpb24uCisgICBUaGUgaW5pdGlhbCB2YWx1ZSBvZiB0aGUgYnVmZmVyIGNhbiBiZSBzZXQgYnkgcHJvdmlkaW5nICppbml0aWFsX3ZhbHVlKi4KKyAgIElmIG5ld2xpbmUgdHJhbnNsYXRpb24gaXMgZW5hYmxlZCwgbmV3bGluZXMgd2lsbCBiZSBlbmNvZGVkIGFzIGlmIGJ5CisgICA6bWV0aDpgflRleHRJT0Jhc2Uud3JpdGVgLiAgVGhlIHN0cmVhbSBpcyBwb3NpdGlvbmVkIGF0IHRoZSBzdGFydCBvZgorICAgdGhlIGJ1ZmZlci4KKworICAgVGhlICpuZXdsaW5lKiBhcmd1bWVudCB3b3JrcyBsaWtlIHRoYXQgb2YgOmNsYXNzOmBUZXh0SU9XcmFwcGVyYC4KKyAgIFRoZSBkZWZhdWx0IGlzIHRvIGNvbnNpZGVyIG9ubHkgYGBcbmBgIGNoYXJhY3RlcnMgYXMgZW5kcyBvZiBsaW5lcyBhbmQKKyAgIHRvIGRvIG5vIG5ld2xpbmUgdHJhbnNsYXRpb24uICBJZiAqbmV3bGluZSogaXMgc2V0IHRvIGBgTm9uZWBgLAorICAgbmV3bGluZXMgYXJlIHdyaXR0ZW4gYXMgYGBcbmBgIG9uIGFsbCBwbGF0Zm9ybXMsIGJ1dCB1bml2ZXJzYWwKKyAgIG5ld2xpbmUgZGVjb2RpbmcgaXMgc3RpbGwgcGVyZm9ybWVkIHdoZW4gcmVhZGluZy4KIAogICAgOmNsYXNzOmBTdHJpbmdJT2AgcHJvdmlkZXMgdGhpcyBtZXRob2QgaW4gYWRkaXRpb24gdG8gdGhvc2UgZnJvbQogICAgOmNsYXNzOmBUZXh0SU9CYXNlYCBhbmQgaXRzIHBhcmVudHM6CiAKICAgIC4uIG1ldGhvZDo6IGdldHZhbHVlKCkKIAotICAgICAgUmV0dXJuIGEgYGBzdHJgYCBjb250YWluaW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGJ1ZmZlciBhdCBhbnkKLSAgICAgIHRpbWUgYmVmb3JlIHRoZSA6Y2xhc3M6YFN0cmluZ0lPYCBvYmplY3QncyA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcwotICAgICAgY2FsbGVkLgorICAgICAgUmV0dXJuIGEgYGBzdHJgYCBjb250YWluaW5nIHRoZSBlbnRpcmUgY29udGVudHMgb2YgdGhlIGJ1ZmZlci4KKyAgICAgIE5ld2xpbmVzIGFyZSBkZWNvZGVkIGFzIGlmIGJ5IDptZXRoOmB+VGV4dElPQmFzZS5yZWFkYCwgYWx0aG91Z2gKKyAgICAgIHRoZSBzdHJlYW0gcG9zaXRpb24gaXMgbm90IGNoYW5nZWQuCiAKICAgIEV4YW1wbGUgdXNhZ2U6OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0IGIvRG9jL2xpYnJhcnkvaXBhZGRyZXNzLnJzdAppbmRleCA4ZWFjOTJmLi4zMDEwNDhlIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9pcGFkZHJlc3MucnN0CisrKyBiL0RvYy9saWJyYXJ5L2lwYWRkcmVzcy5yc3QKQEAgLTksMTMgKzksNiBAQAogCiAtLS0tLS0tLS0tLS0tLQogCi0uLiBub3RlOjoKLQotICAgVGhlIGBgaXBhZGRyZXNzYGAgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uIGEKLSAgIDp0ZXJtOmBwcm92aXNpb25hbCBiYXNpcyA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLiBCYWNrd2FyZHMgaW5jb21wYXRpYmxlCi0gICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIHBhY2thZ2UpIG1heSBvY2N1ciBpZiBkZWVtZWQKLSAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgotCiA6bW9kOmBpcGFkZHJlc3NgIHByb3ZpZGVzIHRoZSBjYXBhYmlsaXRpZXMgdG8gY3JlYXRlLCBtYW5pcHVsYXRlIGFuZAogb3BlcmF0ZSBvbiBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcyBhbmQgbmV0d29ya3MuCiAKQEAgLTI1LDggKzE4LDggQEAKIHN1Ym5ldCwgY2hlY2tpbmcgd2hldGhlciBvciBub3QgYSBzdHJpbmcgcmVwcmVzZW50cyBhIHZhbGlkIElQIGFkZHJlc3Mgb3IKIG5ldHdvcmsgZGVmaW5pdGlvbiwgYW5kIHNvIG9uLgogCi1UaGlzIGlzIHRoZSBmdWxsIG1vZHVsZSBBUEkgcmVmZXJlbmNlIC0gZm9yIGFuIG92ZXJ2aWV3IGFuZCBpbnRyb2R1Y3Rpb24sCi1zZWUgOnJlZjpgaXBhZGRyZXNzLWhvd3RvYC4KK1RoaXMgaXMgdGhlIGZ1bGwgbW9kdWxlIEFQSSByZWZlcmVuY2XigJRmb3IgYW4gb3ZlcnZpZXcgYW5kIGludHJvZHVjdGlvbiwgc2VlCis6cmVmOmBpcGFkZHJlc3MtaG93dG9gLgogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIApAQCAtMTEwLDcgKzEwMyw3IEBACiAgICAxLiBBIHN0cmluZyBpbiBkZWNpbWFsLWRvdCBub3RhdGlvbiwgY29uc2lzdGluZyBvZiBmb3VyIGRlY2ltYWwgaW50ZWdlcnMgaW4KICAgICAgIHRoZSBpbmNsdXNpdmUgcmFuZ2UgMC0yNTUsIHNlcGFyYXRlZCBieSBkb3RzIChlLmcuIGBgMTkyLjE2OC4wLjFgYCkuIEVhY2gKICAgICAgIGludGVnZXIgcmVwcmVzZW50cyBhbiBvY3RldCAoYnl0ZSkgaW4gdGhlIGFkZHJlc3MuIExlYWRpbmcgemVyb2VzIGFyZQotICAgICAgdG9sZXJhdGVkIG9ubHkgZm9yIHZhbHVlcyBsZXNzIHRoZW4gOCAoYXMgdGhlcmUgaXMgbm8gYW1iaWd1aXR5CisgICAgICB0b2xlcmF0ZWQgb25seSBmb3IgdmFsdWVzIGxlc3MgdGhhbiA4IChhcyB0aGVyZSBpcyBubyBhbWJpZ3VpdHkKICAgICAgIGJldHdlZW4gdGhlIGRlY2ltYWwgYW5kIG9jdGFsIGludGVycHJldGF0aW9ucyBvZiBzdWNoIHN0cmluZ3MpLgogICAgMi4gQW4gaW50ZWdlciB0aGF0IGZpdHMgaW50byAzMiBiaXRzLgogICAgMy4gQW4gaW50ZWdlciBwYWNrZWQgaW50byBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBvZiBsZW5ndGggNCAobW9zdApAQCAtMTYxLDcgKzE1NCwxNiBAQAogICAgLi4gYXR0cmlidXRlOjogaXNfcHJpdmF0ZQogCiAgICAgICBgYFRydWVgYCBpZiB0aGUgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuICBTZWUKLSAgICAgIDpSRkM6YDE5MThgIChmb3IgSVB2NCkgb3IgOlJGQzpgNDE5M2AgKGZvciBJUHY2KS4KKyAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5XyAoZm9yIElQdjQpIG9yIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5XworICAgICAgKGZvciBJUHY2KS4KKworICAgLi4gYXR0cmlidXRlOjogaXNfZ2xvYmFsCisKKyAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLiAgU2VlCisgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeV8gKGZvciBJUHY0KSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeV8KKyAgICAgIChmb3IgSVB2NikuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAgICAuLiBhdHRyaWJ1dGU6OiBpc191bnNwZWNpZmllZAogCkBAIC0xODIsNiArMTg0LDkgQEAKICAgICAgIGBgVHJ1ZWBgIGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIGZvciBsaW5rLWxvY2FsIHVzYWdlLiAgU2VlCiAgICAgICA6UkZDOmAzOTI3YC4KIAorLi4gX2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5OiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5L2lhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LnhodG1sCisuLiBfaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnk6IGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkvaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkueGh0bWwKKwogCiAuLiBjbGFzczo6IElQdjZBZGRyZXNzKGFkZHJlc3MpCiAKQEAgLTIxNiwxOCArMjIxLDIzIEBACiAgICBUaGUgbG9uZyBmb3JtIG9mIHRoZSBhZGRyZXNzIHJlcHJlc2VudGF0aW9uLCB3aXRoIGFsbCBsZWFkaW5nIHplcm9lcyBhbmQKICAgIGdyb3VwcyBjb25zaXN0aW5nIGVudGlyZWx5IG9mIHplcm9lcyBpbmNsdWRlZC4KIAorCisgICBGb3IgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzLCBzZWUgdGhlIGNvcnJlc3BvbmRpbmcgZG9jdW1lbnRpb24gb2YgdGhlCisgICA6Y2xhc3M6YElQdjRBZGRyZXNzYCBjbGFzczoKKwogICAgLi4gYXR0cmlidXRlOjogcGFja2VkCiAgICAuLiBhdHRyaWJ1dGU6OiB2ZXJzaW9uCiAgICAuLiBhdHRyaWJ1dGU6OiBtYXhfcHJlZml4bGVuCiAgICAuLiBhdHRyaWJ1dGU6OiBpc19tdWx0aWNhc3QKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3ByaXZhdGUKKyAgIC4uIGF0dHJpYnV0ZTo6IGlzX2dsb2JhbAogICAgLi4gYXR0cmlidXRlOjogaXNfdW5zcGVjaWZpZWQKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3Jlc2VydmVkCiAgICAuLiBhdHRyaWJ1dGU6OiBpc19sb29wYmFjawogICAgLi4gYXR0cmlidXRlOjogaXNfbGlua19sb2NhbAogCi0gICAgICBSZWZlciB0byB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgZG9jdW1lbnRhdGlvbiBpbgotICAgICAgOmNsYXNzOmBJUHY0QWRkcmVzc2AKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgICAgaXNfZ2xvYmFsCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGlzX3NpdGVfbG9jYWwKIApAQCAtNTQwLDcgKzU1MCw3IEBACiAgICAgICBzaW5nbGUtYWRkcmVzcyBuZXR3b3JrLCB3aXRoIHRoZSBuZXR3b3JrIGFkZHJlc3MgYmVpbmcgKmFkZHJlc3MqIGFuZAogICAgICAgdGhlIG1hc2sgYmVpbmcgYGAvMTI4YGAuCiAKLSAgIDMuIEFuIGludGVnZXIgcGFja2VkIGludG8gYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3Qgb2YgbGVuZ3RoIDE2LCBiaXQtZW5kaWFuLgorICAgMy4gQW4gaW50ZWdlciBwYWNrZWQgaW50byBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBvZiBsZW5ndGggMTYsIGJpZy1lbmRpYW4uCiAgICAgICBUaGUgaW50ZXJwcmV0YXRpb24gaXMgc2ltaWxhciB0byBhbiBpbnRlZ2VyICphZGRyZXNzKi4KIAogICAgQW4gOmV4YzpgQWRkcmVzc1ZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZiAqYWRkcmVzcyogaXMgbm90IGEgdmFsaWQgSVB2NgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaXBjLnJzdCBiL0RvYy9saWJyYXJ5L2lwYy5yc3QKaW5kZXggOTFlYzY5My4uNmIxNzU2MyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaXBjLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pcGMucnN0CkBAIC05LDcgKzksNyBAQAogCiBTb21lIG1vZHVsZXMgb25seSB3b3JrIGZvciB0d28gcHJvY2Vzc2VzIHRoYXQgYXJlIG9uIHRoZSBzYW1lIG1hY2hpbmUsIGUuZy4KIDptb2Q6YHNpZ25hbGAgYW5kIDptb2Q6YG1tYXBgLiAgT3RoZXIgbW9kdWxlcyBzdXBwb3J0IG5ldHdvcmtpbmcgcHJvdG9jb2xzCi10aGF0IHR3byBvciBtb3JlIHByb2Nlc3NlcyBjYW4gdXNlZCB0byBjb21tdW5pY2F0ZSBhY3Jvc3MgbWFjaGluZXMuCit0aGF0IHR3byBvciBtb3JlIHByb2Nlc3NlcyBjYW4gdXNlIHRvIGNvbW11bmljYXRlIGFjcm9zcyBtYWNoaW5lcy4KIAogVGhlIGxpc3Qgb2YgbW9kdWxlcyBkZXNjcmliZWQgaW4gdGhpcyBjaGFwdGVyIGlzOgogCkBAIC0xOCw2ICsxOCw5IEBACiAKICAgIHNvY2tldC5yc3QKICAgIHNzbC5yc3QKKyAgIHNlbGVjdC5yc3QKKyAgIHNlbGVjdG9ycy5yc3QKKyAgIGFzeW5jaW8ucnN0CiAgICBhc3luY29yZS5yc3QKICAgIGFzeW5jaGF0LnJzdAogICAgc2lnbmFsLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdCBiL0RvYy9saWJyYXJ5L2l0ZXJ0b29scy5yc3QKaW5kZXggNWQzZTUwYS4uZjQ4OTUzNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvaXRlcnRvb2xzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9pdGVydG9vbHMucnN0CkBAIC03ODQsNiArNzg0LDE5IEBACiAgICAgICAgZXhjZXB0IGV4Y2VwdGlvbjoKICAgICAgICAgICAgcGFzcwogCisgICBkZWYgZmlyc3RfdHJ1ZShpdGVyYWJsZSwgZGVmYXVsdD1GYWxzZSwgcHJlZD1Ob25lKToKKyAgICAgICAiIiJSZXR1cm5zIHRoZSBmaXJzdCB0cnVlIHZhbHVlIGluIHRoZSBpdGVyYWJsZS4KKworICAgICAgIElmIG5vIHRydWUgdmFsdWUgaXMgZm91bmQsIHJldHVybnMgKmRlZmF1bHQqCisKKyAgICAgICBJZiAqcHJlZCogaXMgbm90IE5vbmUsIHJldHVybnMgdGhlIGZpcnN0IGl0ZW0KKyAgICAgICBmb3Igd2hpY2ggcHJlZChpdGVtKSBpcyB0cnVlLgorCisgICAgICAgIiIiCisgICAgICAgIyBmaXJzdF90cnVlKFthLGIsY10sIHgpIC0tPiBhIG9yIGIgb3IgYyBvciB4CisgICAgICAgIyBmaXJzdF90cnVlKFthLGJdLCB4LCBmKSAtLT4gYSBpZiBmKGEpIGVsc2UgYiBpZiBmKGIpIGVsc2UgeAorICAgICAgIHJldHVybiBuZXh0KGZpbHRlcihwcmVkLCBpdGVyYWJsZSksIGRlZmF1bHQpCisKICAgIGRlZiByYW5kb21fcHJvZHVjdCgqYXJncywgcmVwZWF0PTEpOgogICAgICAgICJSYW5kb20gc2VsZWN0aW9uIGZyb20gaXRlcnRvb2xzLnByb2R1Y3QoKmFyZ3MsICoqa3dkcykiCiAgICAgICAgcG9vbHMgPSBbdHVwbGUocG9vbCkgZm9yIHBvb2wgaW4gYXJnc10gKiByZXBlYXQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L2pzb24ucnN0IGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKaW5kZXggZjY1MjAzOS4uYTAxZTYzNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvanNvbi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvanNvbi5yc3QKQEAgLTcsOSArNywxMSBAQAogLi4gc2VjdGlvbmF1dGhvcjo6IEJvYiBJcHBvbGl0byA8Ym9iQHJlZGl2aS5jb20+CiAKIGBKU09OIChKYXZhU2NyaXB0IE9iamVjdCBOb3RhdGlvbikgPGh0dHA6Ly9qc29uLm9yZz5gXywgc3BlY2lmaWVkIGJ5Ci06cmZjOmA0NjI3YCwgaXMgYSBsaWdodHdlaWdodCBkYXRhIGludGVyY2hhbmdlIGZvcm1hdCBiYXNlZCBvbiBhIHN1YnNldCBvZgotYEphdmFTY3JpcHQgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmF2YVNjcmlwdD5gXyBzeW50YXggKGBFQ01BLTI2MiAzcmQKLWVkaXRpb24gPGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC1BUkNIL0VDTUEtMjYyLCUyMDNyZCUyMGVkaXRpb24sJTIwRGVjZW1iZXIlMjAxOTk5LnBkZj5gXykuCis6cmZjOmA3MTU5YCAod2hpY2ggb2Jzb2xldGVzIDpyZmM6YDQ2MjdgKSBhbmQgYnkKK2BFQ01BLTQwNCA8aHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9zdGFuZGFyZHMvRWNtYS00MDQuaHRtPmBfLAoraXMgYSBsaWdodHdlaWdodCBkYXRhIGludGVyY2hhbmdlIGZvcm1hdCBpbnNwaXJlZCBieQorYEphdmFTY3JpcHQgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSmF2YVNjcmlwdD5gXyBvYmplY3QgbGl0ZXJhbCBzeW50YXgKKyhhbHRob3VnaCBpdCBpcyBub3QgYSBzdHJpY3Qgc3Vic2V0IG9mIEphdmFTY3JpcHQgWyNyZmMtZXJyYXRhXV8gKS4KIAogOm1vZDpganNvbmAgZXhwb3NlcyBhbiBBUEkgZmFtaWxpYXIgdG8gdXNlcnMgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkKIDptb2Q6YG1hcnNoYWxgIGFuZCA6bW9kOmBwaWNrbGVgIG1vZHVsZXMuCkBAIC00Miw4ICs0NCw3IEBACiBQcmV0dHkgcHJpbnRpbmc6OgogCiAgICAgPj4+IGltcG9ydCBqc29uCi0gICAgPj4+IHByaW50KGpzb24uZHVtcHMoeyc0JzogNSwgJzYnOiA3fSwgc29ydF9rZXlzPVRydWUsCi0gICAgLi4uICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpKQorICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkpCiAgICAgewogICAgICAgICAiNCI6IDUsCiAgICAgICAgICI2IjogNwpAQCAtOTgsMTEgKzk5LDExIEBACiAKIFVzaW5nIGpzb24udG9vbCBmcm9tIHRoZSBzaGVsbCB0byB2YWxpZGF0ZSBhbmQgcHJldHR5LXByaW50OjoKIAotICAgICQgZWNobyAneyJqc29uIjoib2JqIn0nIHwgcHl0aG9uIC1tanNvbi50b29sCisgICAgJCBlY2hvICd7Impzb24iOiJvYmoifScgfCBweXRob24gLW0ganNvbi50b29sCiAgICAgewogICAgICAgICAianNvbiI6ICJvYmoiCiAgICAgfQotICAgICQgZWNobyAnezEuMjozLjR9JyB8IHB5dGhvbiAtbWpzb24udG9vbAorICAgICQgZWNobyAnezEuMjozLjR9JyB8IHB5dGhvbiAtbSBqc29uLnRvb2wKICAgICBFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzOiBsaW5lIDEgY29sdW1uIDIgKGNoYXIgMSkKIAogLi4gaGlnaGxpZ2h0OjogcHl0aG9uMwpAQCAtMTU4LDE1ICsxNTksMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBbGxvdyBzdHJpbmdzIGZvciAqaW5kZW50KiBpbiBhZGRpdGlvbiB0byBpbnRlZ2Vycy4KIAotICAgLi4gbm90ZTo6CisgICBJZiBzcGVjaWZpZWQsICpzZXBhcmF0b3JzKiBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCi0gICAgICBTaW5jZSB0aGUgZGVmYXVsdCBpdGVtIHNlcGFyYXRvciBpcyBgYCcsICdgYCwgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZQotICAgICAgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuICppbmRlbnQqIGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICBgYHNlcGFyYXRvcnM9KCcsJywgJzogJylgYCB0byBhdm9pZCB0aGlzLgotCi0gICBJZiAqc2VwYXJhdG9ycyogaXMgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGRpY3Rfc2VwYXJhdG9yKWBgIHR1cGxlLCB0aGVuIGl0Ci0gICB3aWxsIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBgYCgnLCAnLCAnOiAnKWBgIHNlcGFyYXRvcnMuICBgYCgnLCcsCi0gICAnOicpYGAgaXMgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLgorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFVzZSBgYCgnLCcsICc6ICcpYGAgYXMgZGVmYXVsdCBpZiAqaW5kZW50KiBpcyBub3QgYGBOb25lYGAuCiAKICAgICpkZWZhdWx0KG9iaikqIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24gb2YKICAgICpvYmoqIG9yIHJhaXNlIDpleGM6YFR5cGVFcnJvcmAuICBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIDpleGM6YFR5cGVFcnJvcmAuCkBAIC0yNDgsNiArMjQ3LDggQEAKICAgIGt3YXJnOyBvdGhlcndpc2UgOmNsYXNzOmBKU09ORGVjb2RlcmAgaXMgdXNlZC4gIEFkZGl0aW9uYWwga2V5d29yZCBhcmd1bWVudHMKICAgIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MuCiAKKyAgIElmIHRoZSBkYXRhIGJlaW5nIGRlc2VyaWFsaXplZCBpcyBub3QgYSB2YWxpZCBKU09OIGRvY3VtZW50LCBhCisgICA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4KIAogLi4gZnVuY3Rpb246OiBsb2FkcyhzLCBlbmNvZGluZz1Ob25lLCBjbHM9Tm9uZSwgb2JqZWN0X2hvb2s9Tm9uZSwgcGFyc2VfZmxvYXQ9Tm9uZSwgcGFyc2VfaW50PU5vbmUsIHBhcnNlX2NvbnN0YW50PU5vbmUsIG9iamVjdF9wYWlyc19ob29rPU5vbmUsICoqa3cpCiAKQEAgLTI1Nyw2ICsyNTgsOCBAQAogICAgVGhlIG90aGVyIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4gOmZ1bmM6YGxvYWRgLCBleGNlcHQKICAgICplbmNvZGluZyogd2hpY2ggaXMgaWdub3JlZCBhbmQgZGVwcmVjYXRlZC4KIAorICAgSWYgdGhlIGRhdGEgYmVpbmcgZGVzZXJpYWxpemVkIGlzIG5vdCBhIHZhbGlkIEpTT04gZG9jdW1lbnQsIGEKKyAgIDpleGM6YFZhbHVlRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgogCiBFbmNvZGVycyBhbmQgRGVjb2RlcnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzM0LDcgKzMzNyw3IEBACiAgICAuLiBtZXRob2Q6OiBkZWNvZGUocykKIAogICAgICAgUmV0dXJuIHRoZSBQeXRob24gcmVwcmVzZW50YXRpb24gb2YgKnMqIChhIDpjbGFzczpgc3RyYCBpbnN0YW5jZQotICAgICAgY29udGFpbmluZyBhIEpTT04gZG9jdW1lbnQpCisgICAgICBjb250YWluaW5nIGEgSlNPTiBkb2N1bWVudCkuCiAKICAgIC4uIG1ldGhvZDo6IHJhd19kZWNvZGUocykKIApAQCAtMzU0LDIzICszNTcsMjYgQEAKIAogICAgLi4gX3B5LXRvLWpzb24tdGFibGU6CiAKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgUHl0aG9uICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwKLSAgICs9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKLSAgIHwgZGljdCAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgbGlzdCwgdHVwbGUgICAgICAgfCBhcnJheSAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgc3RyICAgICAgICAgICAgICAgfCBzdHJpbmcgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgaW50LCBmbG9hdCAgICAgICAgfCBudW1iZXIgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgVHJ1ZSAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgRmFsc2UgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgTm9uZSAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKLSAgICstLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgUHl0aG9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBKU09OICAgICAgICAgIHwKKyAgICs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PSsKKyAgIHwgZGljdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBvYmplY3QgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgbGlzdCwgdHVwbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcnJheSAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgc3RyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdHJpbmcgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgaW50LCBmbG9hdCwgaW50LSAmIGZsb2F0LWRlcml2ZWQgRW51bXMgfCBudW1iZXIgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgVHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cnVlICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgRmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmYWxzZSAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgTm9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBudWxsICAgICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSsKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGludC0gYW5kIGZsb2F0LWRlcml2ZWQgRW51bSBjbGFzc2VzLgogCiAgICBUbyBleHRlbmQgdGhpcyB0byByZWNvZ25pemUgb3RoZXIgb2JqZWN0cywgc3ViY2xhc3MgYW5kIGltcGxlbWVudCBhCiAgICA6bWV0aDpgZGVmYXVsdGAgbWV0aG9kIHdpdGggYW5vdGhlciBtZXRob2QgdGhhdCByZXR1cm5zIGEgc2VyaWFsaXphYmxlIG9iamVjdApAQCAtNDEwLDE1ICs0MTYsMTMgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBBbGxvdyBzdHJpbmdzIGZvciAqaW5kZW50KiBpbiBhZGRpdGlvbiB0byBpbnRlZ2Vycy4KIAotICAgLi4gbm90ZTo6Ci0KLSAgICAgIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlIG91dHB1dCBtaWdodCBpbmNsdWRlCi0gICAgICB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gKmluZGVudCogaXMgc3BlY2lmaWVkLiAgWW91IGNhbiB1c2UKLSAgICAgIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCi0KICAgIElmIHNwZWNpZmllZCwgKnNlcGFyYXRvcnMqIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAotICAgdHVwbGUuICBUaGUgZGVmYXVsdCBpcyBgYCgnLCAnLCAnOiAnKWBgLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgotICAgcmVwcmVzZW50YXRpb24sIHlvdSBzaG91bGQgc3BlY2lmeSBgYCgnLCcsICc6JylgYCB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKyAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgIGBgKCcsJywgJzogJylgYCBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXNlIGBgKCcsJywgJzogJylgYCBhcyBkZWZhdWx0IGlmICppbmRlbnQqIGlzIG5vdCBgYE5vbmVgYC4KIAogICAgSWYgc3BlY2lmaWVkLCAqZGVmYXVsdCogaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgY2FuJ3QKICAgIG90aGVyd2lzZSBiZSBzZXJpYWxpemVkLiAgSXQgc2hvdWxkIHJldHVybiBhIEpTT04gZW5jb2RhYmxlIHZlcnNpb24gb2YgdGhlCkBAIC00NjMsMTggKzQ2NywxOCBAQAogICAgICAgICAgICAgICAgIG15c29ja2V0LndyaXRlKGNodW5rKQogCiAKLVN0YW5kYXJkIENvbXBsaWFuY2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N0YW5kYXJkIENvbXBsaWFuY2UgYW5kIEludGVyb3BlcmFiaWxpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVGhlIEpTT04gZm9ybWF0IGlzIHNwZWNpZmllZCBieSA6cmZjOmA0NjI3YC4gIFRoaXMgc2VjdGlvbiBkZXRhaWxzIHRoaXMKLW1vZHVsZSdzIGxldmVsIG9mIGNvbXBsaWFuY2Ugd2l0aCB0aGUgUkZDLiAgRm9yIHNpbXBsaWNpdHksCi06Y2xhc3M6YEpTT05FbmNvZGVyYCBhbmQgOmNsYXNzOmBKU09ORGVjb2RlcmAgc3ViY2xhc3NlcywgYW5kIHBhcmFtZXRlcnMgb3RoZXIKLXRoYW4gdGhvc2UgZXhwbGljaXRseSBtZW50aW9uZWQsIGFyZSBub3QgY29uc2lkZXJlZC4KK1RoZSBKU09OIGZvcm1hdCBpcyBzcGVjaWZpZWQgYnkgOnJmYzpgNzE1OWAgYW5kIGJ5CitgRUNNQS00MDQgPGh0dHA6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvc3RhbmRhcmRzL0VjbWEtNDA0Lmh0bT5gXy4KK1RoaXMgc2VjdGlvbiBkZXRhaWxzIHRoaXMgbW9kdWxlJ3MgbGV2ZWwgb2YgY29tcGxpYW5jZSB3aXRoIHRoZSBSRkMuCitGb3Igc2ltcGxpY2l0eSwgOmNsYXNzOmBKU09ORW5jb2RlcmAgYW5kIDpjbGFzczpgSlNPTkRlY29kZXJgIHN1YmNsYXNzZXMsIGFuZAorcGFyYW1ldGVycyBvdGhlciB0aGFuIHRob3NlIGV4cGxpY2l0bHkgbWVudGlvbmVkLCBhcmUgbm90IGNvbnNpZGVyZWQuCiAKIFRoaXMgbW9kdWxlIGRvZXMgbm90IGNvbXBseSB3aXRoIHRoZSBSRkMgaW4gYSBzdHJpY3QgZmFzaGlvbiwgaW1wbGVtZW50aW5nIHNvbWUKIGV4dGVuc2lvbnMgdGhhdCBhcmUgdmFsaWQgSmF2YVNjcmlwdCBidXQgbm90IHZhbGlkIEpTT04uICBJbiBwYXJ0aWN1bGFyOgogCi0tIFRvcC1sZXZlbCBub24tb2JqZWN0LCBub24tYXJyYXkgdmFsdWVzIGFyZSBhY2NlcHRlZCBhbmQgb3V0cHV0OwogLSBJbmZpbml0ZSBhbmQgTmFOIG51bWJlciB2YWx1ZXMgYXJlIGFjY2VwdGVkIGFuZCBvdXRwdXQ7CiAtIFJlcGVhdGVkIG5hbWVzIHdpdGhpbiBhbiBvYmplY3QgYXJlIGFjY2VwdGVkLCBhbmQgb25seSB0aGUgdmFsdWUgb2YgdGhlIGxhc3QKICAgbmFtZS12YWx1ZSBwYWlyIGlzIHVzZWQuCkBAIC00ODYsOCArNDkwLDggQEAKIENoYXJhY3RlciBFbmNvZGluZ3MKIF5eXl5eXl5eXl5eXl5eXl5eXl4KIAotVGhlIFJGQyByZWNvbW1lbmRzIHRoYXQgSlNPTiBiZSByZXByZXNlbnRlZCB1c2luZyBlaXRoZXIgVVRGLTgsIFVURi0xNiwgb3IKLVVURi0zMiwgd2l0aCBVVEYtOCBiZWluZyB0aGUgZGVmYXVsdC4KK1RoZSBSRkMgcmVxdWlyZXMgdGhhdCBKU09OIGJlIHJlcHJlc2VudGVkIHVzaW5nIGVpdGhlciBVVEYtOCwgVVRGLTE2LCBvcgorVVRGLTMyLCB3aXRoIFVURi04IGJlaW5nIHRoZSByZWNvbW1lbmRlZCBkZWZhdWx0IGZvciBtYXhpbXVtIGludGVyb3BlcmFiaWxpdHkuCiAKIEFzIHBlcm1pdHRlZCwgdGhvdWdoIG5vdCByZXF1aXJlZCwgYnkgdGhlIFJGQywgdGhpcyBtb2R1bGUncyBzZXJpYWxpemVyIHNldHMKICplbnN1cmVfYXNjaWk9VHJ1ZSogYnkgZGVmYXVsdCwgdGh1cyBlc2NhcGluZyB0aGUgb3V0cHV0IHNvIHRoYXQgdGhlIHJlc3VsdGluZwpAQCAtNDk1LDM0ICs0OTksMjAgQEAKIAogT3RoZXIgdGhhbiB0aGUgKmVuc3VyZV9hc2NpaSogcGFyYW1ldGVyLCB0aGlzIG1vZHVsZSBpcyBkZWZpbmVkIHN0cmljdGx5IGluCiB0ZXJtcyBvZiBjb252ZXJzaW9uIGJldHdlZW4gUHl0aG9uIG9iamVjdHMgYW5kCi06Y2xhc3M6YFVuaWNvZGUgc3RyaW5ncyA8c3RyPmAsIGFuZCB0aHVzIGRvZXMgbm90IG90aGVyd2lzZSBhZGRyZXNzIHRoZSBpc3N1ZQotb2YgY2hhcmFjdGVyIGVuY29kaW5ncy4KKzpjbGFzczpgVW5pY29kZSBzdHJpbmdzIDxzdHI+YCwgYW5kIHRodXMgZG9lcyBub3Qgb3RoZXJ3aXNlIGRpcmVjdGx5IGFkZHJlc3MKK3RoZSBpc3N1ZSBvZiBjaGFyYWN0ZXIgZW5jb2RpbmdzLgogCitUaGUgUkZDIHByb2hpYml0cyBhZGRpbmcgYSBieXRlIG9yZGVyIG1hcmsgKEJPTSkgdG8gdGhlIHN0YXJ0IG9mIGEgSlNPTiB0ZXh0LAorYW5kIHRoaXMgbW9kdWxlJ3Mgc2VyaWFsaXplciBkb2VzIG5vdCBhZGQgYSBCT00gdG8gaXRzIG91dHB1dC4KK1RoZSBSRkMgcGVybWl0cywgYnV0IGRvZXMgbm90IHJlcXVpcmUsIEpTT04gZGVzZXJpYWxpemVycyB0byBpZ25vcmUgYW4gaW5pdGlhbAorQk9NIGluIHRoZWlyIGlucHV0LiAgVGhpcyBtb2R1bGUncyBkZXNlcmlhbGl6ZXIgcmFpc2VzIGEgOmV4YzpgVmFsdWVFcnJvcmAKK3doZW4gYW4gaW5pdGlhbCBCT00gaXMgcHJlc2VudC4KIAotVG9wLWxldmVsIE5vbi1PYmplY3QsIE5vbi1BcnJheSBWYWx1ZXMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCi0KLVRoZSBSRkMgc3BlY2lmaWVzIHRoYXQgdGhlIHRvcC1sZXZlbCB2YWx1ZSBvZiBhIEpTT04gdGV4dCBtdXN0IGJlIGVpdGhlciBhCi1KU09OIG9iamVjdCBvciBhcnJheSAoUHl0aG9uIDpjbGFzczpgZGljdGAgb3IgOmNsYXNzOmBsaXN0YCkuICBUaGlzIG1vZHVsZSdzCi1kZXNlcmlhbGl6ZXIgYWxzbyBhY2NlcHRzIGlucHV0IHRleHRzIGNvbnNpc3Rpbmcgc29sZWx5IG9mIGEKLUpTT04gbnVsbCwgYm9vbGVhbiwgbnVtYmVyLCBvciBzdHJpbmcgdmFsdWU6OgotCi0gICA+Pj4ganVzdF9hX2pzb25fc3RyaW5nID0gJyJzcGFtIGFuZCBlZ2dzIicgICMgTm90IGJ5IGl0c2VsZiBhIHZhbGlkIEpTT04gdGV4dAotICAgPj4+IGpzb24ubG9hZHMoanVzdF9hX2pzb25fc3RyaW5nKQotICAgJ3NwYW0gYW5kIGVnZ3MnCi0KLVRoaXMgbW9kdWxlIGl0c2VsZiBkb2VzIG5vdCBpbmNsdWRlIGEgd2F5IHRvIHJlcXVlc3QgdGhhdCBzdWNoIGlucHV0IHRleHRzIGJlCi1yZWdhcmRlZCBhcyBpbGxlZ2FsLiAgTGlrZXdpc2UsIHRoaXMgbW9kdWxlJ3Mgc2VyaWFsaXplciBhbHNvIGFjY2VwdHMgc2luZ2xlCi1QeXRob24gOmRhdGE6YE5vbmVgLCA6Y2xhc3M6YGJvb2xgLCBudW1lcmljLCBhbmQgOmNsYXNzOmBzdHJgCi12YWx1ZXMgYXMgaW5wdXQgYW5kIHdpbGwgZ2VuZXJhdGUgb3V0cHV0IHRleHRzIGNvbnNpc3Rpbmcgc29sZWx5IG9mIGEgdG9wLWxldmVsCi1KU09OIG51bGwsIGJvb2xlYW4sIG51bWJlciwgb3Igc3RyaW5nIHZhbHVlIHdpdGhvdXQgcmFpc2luZyBhbiBleGNlcHRpb246OgotCi0gICA+Pj4gbmVpdGhlcl9hX2xpc3Rfbm9yX2FfZGljdCA9ICJzcGFtIGFuZCBlZ2dzIgotICAgPj4+IGpzb24uZHVtcHMobmVpdGhlcl9hX2xpc3Rfbm9yX2FfZGljdCkgICMgVGhlIHJlc3VsdCBpcyBub3QgYSB2YWxpZCBKU09OIHRleHQKLSAgICcic3BhbSBhbmQgZWdncyInCi0KLVRoaXMgbW9kdWxlJ3Mgc2VyaWFsaXplciBkb2VzIG5vdCBpdHNlbGYgaW5jbHVkZSBhIHdheSB0byBlbmZvcmNlIHRoZQotYWZvcmVtZW50aW9uZWQgY29uc3RyYWludC4KK1RoZSBSRkMgZG9lcyBub3QgZXhwbGljaXRseSBmb3JiaWQgSlNPTiBzdHJpbmdzIHdoaWNoIGNvbnRhaW4gYnl0ZSBzZXF1ZW5jZXMKK3RoYXQgZG9uJ3QgY29ycmVzcG9uZCB0byB2YWxpZCBVbmljb2RlIGNoYXJhY3RlcnMgKGUuZy4gdW5wYWlyZWQgVVRGLTE2CitzdXJyb2dhdGVzKSwgYnV0IGl0IGRvZXMgbm90ZSB0aGF0IHRoZXkgbWF5IGNhdXNlIGludGVyb3BlcmFiaWxpdHkgcHJvYmxlbXMuCitCeSBkZWZhdWx0LCB0aGlzIG1vZHVsZSBhY2NlcHRzIGFuZCBvdXRwdXRzICh3aGVuIHByZXNlbnQgaW4gdGhlIG9yaWdpbmFsCis6Y2xhc3M6YHN0cmApIGNvZGUgcG9pbnRzIGZvciBzdWNoIHNlcXVlbmNlcy4KIAogCiBJbmZpbml0ZSBhbmQgTmFOIE51bWJlciBWYWx1ZXMKQEAgLTU1Miw3ICs1NDIsNyBAQAogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgogCiBUaGUgUkZDIHNwZWNpZmllcyB0aGF0IHRoZSBuYW1lcyB3aXRoaW4gYSBKU09OIG9iamVjdCBzaG91bGQgYmUgdW5pcXVlLCBidXQKLWRvZXMgbm90IHNwZWNpZnkgaG93IHJlcGVhdGVkIG5hbWVzIGluIEpTT04gb2JqZWN0cyBzaG91bGQgYmUgaGFuZGxlZC4gIEJ5Citkb2VzIG5vdCBtYW5kYXRlIGhvdyByZXBlYXRlZCBuYW1lcyBpbiBKU09OIG9iamVjdHMgc2hvdWxkIGJlIGhhbmRsZWQuICBCeQogZGVmYXVsdCwgdGhpcyBtb2R1bGUgZG9lcyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uOyBpbnN0ZWFkLCBpdCBpZ25vcmVzIGFsbCBidXQKIHRoZSBsYXN0IG5hbWUtdmFsdWUgcGFpciBmb3IgYSBnaXZlbiBuYW1lOjoKIApAQCAtNTYxLDMgKzU1MSw0OCBAQAogICAgeyd4JzogM30KIAogVGhlICpvYmplY3RfcGFpcnNfaG9vayogcGFyYW1ldGVyIGNhbiBiZSB1c2VkIHRvIGFsdGVyIHRoaXMgYmVoYXZpb3IuCisKKworVG9wLWxldmVsIE5vbi1PYmplY3QsIE5vbi1BcnJheSBWYWx1ZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RoZSBvbGQgdmVyc2lvbiBvZiBKU09OIHNwZWNpZmllZCBieSB0aGUgb2Jzb2xldGUgOnJmYzpgNDYyN2AgcmVxdWlyZWQgdGhhdAordGhlIHRvcC1sZXZlbCB2YWx1ZSBvZiBhIEpTT04gdGV4dCBtdXN0IGJlIGVpdGhlciBhIEpTT04gb2JqZWN0IG9yIGFycmF5CisoUHl0aG9uIDpjbGFzczpgZGljdGAgb3IgOmNsYXNzOmBsaXN0YCksIGFuZCBjb3VsZCBub3QgYmUgYSBKU09OIG51bGwsCitib29sZWFuLCBudW1iZXIsIG9yIHN0cmluZyB2YWx1ZS4gIDpyZmM6YDcxNTlgIHJlbW92ZWQgdGhhdCByZXN0cmljdGlvbiwgYW5kCit0aGlzIG1vZHVsZSBkb2VzIG5vdCBhbmQgaGFzIG5ldmVyIGltcGxlbWVudGVkIHRoYXQgcmVzdHJpY3Rpb24gaW4gZWl0aGVyIGl0cworc2VyaWFsaXplciBvciBpdHMgZGVzZXJpYWxpemVyLgorCitSZWdhcmRsZXNzLCBmb3IgbWF4aW11bSBpbnRlcm9wZXJhYmlsaXR5LCB5b3UgbWF5IHdpc2ggdG8gdm9sdW50YXJpbHkgYWRoZXJlCit0byB0aGUgcmVzdHJpY3Rpb24geW91cnNlbGYuCisKKworSW1wbGVtZW50YXRpb24gTGltaXRhdGlvbnMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1NvbWUgSlNPTiBkZXNlcmlhbGl6ZXIgaW1wbGVtZW50YXRpb25zIG1heSBzZXQgbGltaXRzIG9uOgorCisqIHRoZSBzaXplIG9mIGFjY2VwdGVkIEpTT04gdGV4dHMKKyogdGhlIG1heGltdW0gbGV2ZWwgb2YgbmVzdGluZyBvZiBKU09OIG9iamVjdHMgYW5kIGFycmF5cworKiB0aGUgcmFuZ2UgYW5kIHByZWNpc2lvbiBvZiBKU09OIG51bWJlcnMKKyogdGhlIGNvbnRlbnQgYW5kIG1heGltdW0gbGVuZ3RoIG9mIEpTT04gc3RyaW5ncworCitUaGlzIG1vZHVsZSBkb2VzIG5vdCBpbXBvc2UgYW55IHN1Y2ggbGltaXRzIGJleW9uZCB0aG9zZSBvZiB0aGUgcmVsZXZhbnQKK1B5dGhvbiBkYXRhdHlwZXMgdGhlbXNlbHZlcyBvciB0aGUgUHl0aG9uIGludGVycHJldGVyIGl0c2VsZi4KKworV2hlbiBzZXJpYWxpemluZyB0byBKU09OLCBiZXdhcmUgYW55IHN1Y2ggbGltaXRhdGlvbnMgaW4gYXBwbGljYXRpb25zIHRoYXQgbWF5Citjb25zdW1lIHlvdXIgSlNPTi4gIEluIHBhcnRpY3VsYXIsIGl0IGlzIGNvbW1vbiBmb3IgSlNPTiBudW1iZXJzIHRvIGJlCitkZXNlcmlhbGl6ZWQgaW50byBJRUVFIDc1NCBkb3VibGUgcHJlY2lzaW9uIG51bWJlcnMgYW5kIHRodXMgc3ViamVjdCB0byB0aGF0CityZXByZXNlbnRhdGlvbidzIHJhbmdlIGFuZCBwcmVjaXNpb24gbGltaXRhdGlvbnMuICBUaGlzIGlzIGVzcGVjaWFsbHkgcmVsZXZhbnQKK3doZW4gc2VyaWFsaXppbmcgUHl0aG9uIDpjbGFzczpgaW50YCB2YWx1ZXMgb2YgZXh0cmVtZWx5IGxhcmdlIG1hZ25pdHVkZSwgb3IKK3doZW4gc2VyaWFsaXppbmcgaW5zdGFuY2VzIG9mICJleG90aWMiIG51bWVyaWNhbCB0eXBlcyBzdWNoIGFzCis6Y2xhc3M6YGRlY2ltYWwuRGVjaW1hbGAuCisKKworLi4gcnVicmljOjogRm9vdG5vdGVzCisKKy4uIFsjcmZjLWVycmF0YV0gQXMgbm90ZWQgaW4gYHRoZSBlcnJhdGEgZm9yIFJGQyA3MTU5CisgICA8aHR0cDovL3d3dy5yZmMtZWRpdG9yLm9yZy9lcnJhdGFfc2VhcmNoLnBocD9yZmM9NzE1OT5gXywKKyAgIEpTT04gcGVybWl0cyBsaXRlcmFsIFUrMjAyOCAoTElORSBTRVBBUkFUT1IpIGFuZAorICAgVSsyMDI5IChQQVJBR1JBUEggU0VQQVJBVE9SKSBjaGFyYWN0ZXJzIGluIHN0cmluZ3MsIHdoZXJlYXMgSmF2YVNjcmlwdAorICAgKGFzIG9mIEVDTUFTY3JpcHQgRWRpdGlvbiA1LjEpIGRvZXMgbm90LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbGluZWNhY2hlLnJzdCBiL0RvYy9saWJyYXJ5L2xpbmVjYWNoZS5yc3QKaW5kZXggZGFjZjhhYS4uZjE4YjFjZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbGluZWNhY2hlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9saW5lY2FjaGUucnN0CkBAIC05LDExICs5LDE1IEBACiAKIC0tLS0tLS0tLS0tLS0tCiAKLVRoZSA6bW9kOmBsaW5lY2FjaGVgIG1vZHVsZSBhbGxvd3Mgb25lIHRvIGdldCBhbnkgbGluZSBmcm9tIGFueSBmaWxlLCB3aGlsZQorVGhlIDptb2Q6YGxpbmVjYWNoZWAgbW9kdWxlIGFsbG93cyBvbmUgdG8gZ2V0IGFueSBsaW5lIGZyb20gYSBQeXRob24gc291cmNlIGZpbGUsIHdoaWxlCiBhdHRlbXB0aW5nIHRvIG9wdGltaXplIGludGVybmFsbHksIHVzaW5nIGEgY2FjaGUsIHRoZSBjb21tb24gY2FzZSB3aGVyZSBtYW55CiBsaW5lcyBhcmUgcmVhZCBmcm9tIGEgc2luZ2xlIGZpbGUuICBUaGlzIGlzIHVzZWQgYnkgdGhlIDptb2Q6YHRyYWNlYmFja2AgbW9kdWxlCiB0byByZXRyaWV2ZSBzb3VyY2UgbGluZXMgZm9yIGluY2x1c2lvbiBpbiAgdGhlIGZvcm1hdHRlZCB0cmFjZWJhY2suCiAKK1RoZSA6ZnVuYzpgdG9rZW5pemUub3BlbmAgZnVuY3Rpb24gaXMgdXNlZCB0byBvcGVuIGZpbGVzLiBUaGlzCitmdW5jdGlvbiB1c2VzIDpmdW5jOmB0b2tlbml6ZS5kZXRlY3RfZW5jb2RpbmdgIHRvIGdldCB0aGUgZW5jb2Rpbmcgb2YgdGhlCitmaWxlOyBpbiB0aGUgYWJzZW5jZSBvZiBhbiBlbmNvZGluZyB0b2tlbiwgdGhlIGZpbGUgZW5jb2RpbmcgZGVmYXVsdHMgdG8gVVRGLTguCisKIFRoZSA6bW9kOmBsaW5lY2FjaGVgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKQEAgLTQ3LDYgKzUxLDUgQEAKIEV4YW1wbGU6OgogCiAgICA+Pj4gaW1wb3J0IGxpbmVjYWNoZQotICAgPj4+IGxpbmVjYWNoZS5nZXRsaW5lKCcvZXRjL3Bhc3N3ZCcsIDQpCi0gICAnc3lzOng6MzozOnN5czovZGV2Oi9iaW4vc2hcbicKLQorICAgPj4+IGxpbmVjYWNoZS5nZXRsaW5lKGxpbmVjYWNoZS5fX2ZpbGVfXywgOCkKKyAgICdpbXBvcnQgc3lzXG4nCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2NhbGUucnN0IGIvRG9jL2xpYnJhcnkvbG9jYWxlLnJzdAppbmRleCA5NjAwMTkzLi5iMTRjNTUxYiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbG9jYWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2NhbGUucnN0CkBAIC0yMDQsNyArMjA0LDcgQEAKIAogICAgLi4gZGF0YTo6IFJBRElYQ0hBUgogCi0gICAgICBHZXQgdGhlIHJhZGl4IGNoYXJhY3RlciAoZGVjaW1hbCBkb3QsIGRlY2ltYWwgY29tbWEsIGV0Yy4pCisgICAgICBHZXQgdGhlIHJhZGl4IGNoYXJhY3RlciAoZGVjaW1hbCBkb3QsIGRlY2ltYWwgY29tbWEsIGV0Yy4pLgogCiAgICAuLiBkYXRhOjogVEhPVVNFUAogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLmNvbmZpZy5yc3QKaW5kZXggMzAzYjRkOC4uZmQ2YTQ3NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5jb25maWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuY29uZmlnLnJzdApAQCAtODAsMjcgKzgwLDQ5IEBACiAKIC4uIGZ1bmN0aW9uOjogZmlsZUNvbmZpZyhmbmFtZSwgZGVmYXVsdHM9Tm9uZSwgZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzPVRydWUpCiAKLSAgIFJlYWRzIHRoZSBsb2dnaW5nIGNvbmZpZ3VyYXRpb24gZnJvbSBhIDptb2Q6YGNvbmZpZ3BhcnNlcmBcLWZvcm1hdCBmaWxlCi0gICBuYW1lZCAqZm5hbWUqLiBUaGUgZm9ybWF0IG9mIHRoZSBmaWxlIHNob3VsZCBiZSBhcyBkZXNjcmliZWQgaW4KLSAgIDpyZWY6YGxvZ2dpbmctY29uZmlnLWZpbGVmb3JtYXRgLiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgc2V2ZXJhbCB0aW1lcwotICAgZnJvbSBhbiBhcHBsaWNhdGlvbiwgYWxsb3dpbmcgYW4gZW5kIHVzZXIgdG8gc2VsZWN0IGZyb20gdmFyaW91cyBwcmUtY2FubmVkCi0gICBjb25maWd1cmF0aW9ucyAoaWYgdGhlIGRldmVsb3BlciBwcm92aWRlcyBhIG1lY2hhbmlzbSB0byBwcmVzZW50IHRoZSBjaG9pY2VzCi0gICBhbmQgbG9hZCB0aGUgY2hvc2VuIGNvbmZpZ3VyYXRpb24pLgorICAgUmVhZHMgdGhlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmcm9tIGEgOm1vZDpgY29uZmlncGFyc2VyYFwtZm9ybWF0IGZpbGUuIFRoZQorICAgZm9ybWF0IG9mIHRoZSBmaWxlIHNob3VsZCBiZSBhcyBkZXNjcmliZWQgaW4KKyAgIDpyZWY6YGxvZ2dpbmctY29uZmlnLWZpbGVmb3JtYXRgLgorICAgVGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIHNldmVyYWwgdGltZXMgZnJvbSBhbiBhcHBsaWNhdGlvbiwgYWxsb3dpbmcgYW4KKyAgIGVuZCB1c2VyIHRvIHNlbGVjdCBmcm9tIHZhcmlvdXMgcHJlLWNhbm5lZCBjb25maWd1cmF0aW9ucyAoaWYgdGhlIGRldmVsb3BlcgorICAgcHJvdmlkZXMgYSBtZWNoYW5pc20gdG8gcHJlc2VudCB0aGUgY2hvaWNlcyBhbmQgbG9hZCB0aGUgY2hvc2VuCisgICBjb25maWd1cmF0aW9uKS4KKworICAgOnBhcmFtIGZuYW1lOiBBIGZpbGVuYW1lLCBvciBhIGZpbGUtbGlrZSBvYmplY3QsIG9yIGFuIGluc3RhbmNlIGRlcml2ZWQKKyAgICAgICAgICAgICAgICAgZnJvbSA6Y2xhc3M6YH5jb25maWdwYXJzZXIuUmF3Q29uZmlnUGFyc2VyYC4gSWYgYQorICAgICAgICAgICAgICAgICBgYFJhd0NvbmZpZ1BhcnNlcmBgLWRlcml2ZWQgaW5zdGFuY2UgaXMgcGFzc2VkLCBpdCBpcyB1c2VkIGFzCisgICAgICAgICAgICAgICAgIGlzLiBPdGhlcndpc2UsIGEgOmNsYXNzOmB+Y29uZmlncGFyc2VyLkNvbmZpZ3BhcnNlcmAgaXMKKyAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGVkLCBhbmQgdGhlIGNvbmZpZ3VyYXRpb24gcmVhZCBieSBpdCBmcm9tIHRoZQorICAgICAgICAgICAgICAgICBvYmplY3QgcGFzc2VkIGluIGBgZm5hbWVgYC4gSWYgdGhhdCBoYXMgYSA6bWV0aDpgcmVhZGxpbmVgCisgICAgICAgICAgICAgICAgIG1ldGhvZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBhIGZpbGUtbGlrZSBvYmplY3QgYW5kIHJlYWQgdXNpbmcKKyAgICAgICAgICAgICAgICAgOm1ldGg6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRfZmlsZWA7IG90aGVyd2lzZSwKKyAgICAgICAgICAgICAgICAgaXQgaXMgYXNzdW1lZCB0byBiZSBhIGZpbGVuYW1lIGFuZCBwYXNzZWQgdG8KKyAgICAgICAgICAgICAgICAgOm1ldGg6YH5jb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyLnJlYWRgLgorCiAKICAgIDpwYXJhbSBkZWZhdWx0czogRGVmYXVsdHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBDb25maWdQYXJzZXIgY2FuIGJlIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICAgICBpbiB0aGlzIGFyZ3VtZW50LgogCiAgICA6cGFyYW0gZGlzYWJsZV9leGlzdGluZ19sb2dnZXJzOiBJZiBzcGVjaWZpZWQgYXMgYGBGYWxzZWBgLCBsb2dnZXJzIHdoaWNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGlzdCB3aGVuIHRoaXMgY2FsbCBpcyBtYWRlIGFyZSBsZWZ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbG9uZS4gVGhlIGRlZmF1bHQgaXMgYGBUcnVlYGAgYmVjYXVzZSB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkLiBUaGUgZGVmYXVsdCBpcyBgYFRydWVgYCBiZWNhdXNlIHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZXMgb2xkIGJlaGF2aW91ciBpbiBhIGJhY2t3YXJkLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZSB3YXkuIFRoaXMgYmVoYXZpb3VyIGlzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlIGFueSBleGlzdGluZyBsb2dnZXJzIHVubGVzcyB0aGV5IG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVpciBhbmNlc3RvcnMgYXJlIGV4cGxpY2l0bHkgbmFtZWQgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nIGNvbmZpZ3VyYXRpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbiBpbnN0YW5jZSBvZiBhIHN1YmNsYXNzIG9mIDpjbGFzczpgfmNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgIGlzCisgICAgICBub3cgYWNjZXB0ZWQgYXMgYSB2YWx1ZSBmb3IgYGBmbmFtZWBgLiBUaGlzIGZhY2lsaXRhdGVzOgogCi0uLiBmdW5jdGlvbjo6IGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCkKKyAgICAgICogVXNlIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlIHdoZXJlIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBpcyBqdXN0IHBhcnQKKyAgICAgICAgb2YgdGhlIG92ZXJhbGwgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbi4KKyAgICAgICogVXNlIG9mIGEgY29uZmlndXJhdGlvbiByZWFkIGZyb20gYSBmaWxlLCBhbmQgdGhlbiBtb2RpZmllZCBieSB0aGUgdXNpbmcKKyAgICAgICAgYXBwbGljYXRpb24gKGUuZy4gYmFzZWQgb24gY29tbWFuZC1saW5lIHBhcmFtZXRlcnMgb3Igb3RoZXIgYXNwZWN0cworICAgICAgICBvZiB0aGUgcnVudGltZSBlbnZpcm9ubWVudCkgYmVmb3JlIGJlaW5nIHBhc3NlZCB0byBgYGZpbGVDb25maWdgYC4KKworLi4gZnVuY3Rpb246OiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQsIHZlcmlmeT1Ob25lKQogCiAgICBTdGFydHMgdXAgYSBzb2NrZXQgc2VydmVyIG9uIHRoZSBzcGVjaWZpZWQgcG9ydCwgYW5kIGxpc3RlbnMgZm9yIG5ldwogICAgY29uZmlndXJhdGlvbnMuIElmIG5vIHBvcnQgaXMgc3BlY2lmaWVkLCB0aGUgbW9kdWxlJ3MgZGVmYXVsdApAQCAtMTExLDYgKzEzMywxNyBAQAogICAgOm1ldGg6YH50aHJlYWRpbmcuVGhyZWFkLmpvaW5gIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwKICAgIGNhbGwgOmZ1bmM6YHN0b3BMaXN0ZW5pbmdgLgogCisgICBUaGUgYGB2ZXJpZnlgYCBhcmd1bWVudCwgaWYgc3BlY2lmaWVkLCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaCBzaG91bGQKKyAgIHZlcmlmeSB3aGV0aGVyIGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgc29ja2V0IGFyZSB2YWxpZCBhbmQgc2hvdWxkIGJlCisgICBwcm9jZXNzZWQuIFRoaXMgY291bGQgYmUgZG9uZSBieSBlbmNyeXB0aW5nIGFuZC9vciBzaWduaW5nIHdoYXQgaXMgc2VudAorICAgYWNyb3NzIHRoZSBzb2NrZXQsIHN1Y2ggdGhhdCB0aGUgYGB2ZXJpZnlgYCBjYWxsYWJsZSBjYW4gcGVyZm9ybQorICAgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBhbmQvb3IgZGVjcnlwdGlvbi4gVGhlIGBgdmVyaWZ5YGAgY2FsbGFibGUgaXMgY2FsbGVkCisgICB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IC0gdGhlIGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgc29ja2V0IC0gYW5kIHNob3VsZAorICAgcmV0dXJuIHRoZSBieXRlcyB0byBiZSBwcm9jZXNzZWQsIG9yIE5vbmUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgYnl0ZXMgc2hvdWxkCisgICBiZSBkaXNjYXJkZWQuIFRoZSByZXR1cm5lZCBieXRlcyBjb3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgcGFzc2VkIGluIGJ5dGVzCisgICAoZS5nLiB3aGVuIG9ubHkgdmVyaWZpY2F0aW9uIGlzIGRvbmUpLCBvciB0aGV5IGNvdWxkIGJlIGNvbXBsZXRlbHkgZGlmZmVyZW50CisgICAocGVyaGFwcyBpZiBkZWNyeXB0aW9uIHdlcmUgcGVyZm9ybWVkKS4KKwogICAgVG8gc2VuZCBhIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHNvY2tldCwgcmVhZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGFuZAogICAgc2VuZCBpdCB0byB0aGUgc29ja2V0IGFzIGEgc3RyaW5nIG9mIGJ5dGVzIHByZWNlZGVkIGJ5IGEgZm91ci1ieXRlIGxlbmd0aAogICAgc3RyaW5nIHBhY2tlZCBpbiBiaW5hcnkgdXNpbmcgYGBzdHJ1Y3QucGFjaygnPkwnLCBuKWBgLgpAQCAtMTI5LDcgKzE2MiwxMiBAQAogICAgICAgOmZ1bmM6YGxpc3RlbmAgc29ja2V0IGFuZCBzZW5kaW5nIGEgY29uZmlndXJhdGlvbiB3aGljaCBydW5zIHdoYXRldmVyCiAgICAgICBjb2RlIHRoZSBhdHRhY2tlciB3YW50cyB0byBoYXZlIGV4ZWN1dGVkIGluIHRoZSB2aWN0aW0ncyBwcm9jZXNzLiBUaGlzIGlzCiAgICAgICBlc3BlY2lhbGx5IGVhc3kgdG8gZG8gaWYgdGhlIGRlZmF1bHQgcG9ydCBpcyB1c2VkLCBidXQgbm90IGhhcmQgZXZlbiBpZiBhCi0gICAgICBkaWZmZXJlbnQgcG9ydCBpcyB1c2VkKS4KKyAgICAgIGRpZmZlcmVudCBwb3J0IGlzIHVzZWQpLiBUbyBhdm9pZCB0aGUgcmlzayBvZiB0aGlzIGhhcHBlbmluZywgdXNlIHRoZQorICAgICAgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byA6ZnVuYzpgbGlzdGVuYCB0byBwcmV2ZW50IHVucmVjb2duaXNlZAorICAgICAgY29uZmlndXJhdGlvbnMgZnJvbSBiZWluZyBhcHBsaWVkLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4KKyAgICAgIFRoZSBgYHZlcmlmeWBgIGFyZ3VtZW50IHdhcyBhZGRlZC4KIAogLi4gZnVuY3Rpb246OiBzdG9wTGlzdGVuaW5nKCkKIApAQCAtNTc3LDYgKzYxNSwxOCBAQAogc3BlY2lmaWVkIGluIGEgc2VjdGlvbiBjYWxsZWQgYGBbZm9ybWF0dGVyX2Zvcm0wMV1gYC4gVGhlIHJvb3QgbG9nZ2VyCiBjb25maWd1cmF0aW9uIG11c3QgYmUgc3BlY2lmaWVkIGluIGEgc2VjdGlvbiBjYWxsZWQgYGBbbG9nZ2VyX3Jvb3RdYGAuCiAKKy4uIG5vdGU6OgorCisgICBUaGUgOmZ1bmM6YGZpbGVDb25maWdgIEFQSSBpcyBvbGRlciB0aGFuIHRoZSA6ZnVuYzpgZGljdENvbmZpZ2AgQVBJIGFuZCBkb2VzCisgICBub3QgcHJvdmlkZSBmdW5jdGlvbmFsaXR5IHRvIGNvdmVyIGNlcnRhaW4gYXNwZWN0cyBvZiBsb2dnaW5nLiBGb3IgZXhhbXBsZSwKKyAgIHlvdSBjYW5ub3QgY29uZmlndXJlIDpjbGFzczpgfmxvZ2dpbmcuRmlsdGVyYCBvYmplY3RzLCB3aGljaCBwcm92aWRlIGZvcgorICAgZmlsdGVyaW5nIG9mIG1lc3NhZ2VzIGJleW9uZCBzaW1wbGUgaW50ZWdlciBsZXZlbHMsIHVzaW5nIDpmdW5jOmBmaWxlQ29uZmlnYC4KKyAgIElmIHlvdSBuZWVkIHRvIGhhdmUgaW5zdGFuY2VzIG9mIDpjbGFzczpgfmxvZ2dpbmcuRmlsdGVyYCBpbiB5b3VyIGxvZ2dpbmcKKyAgIGNvbmZpZ3VyYXRpb24sIHlvdSB3aWxsIG5lZWQgdG8gdXNlIDpmdW5jOmBkaWN0Q29uZmlnYC4gTm90ZSB0aGF0IGZ1dHVyZQorICAgZW5oYW5jZW1lbnRzIHRvIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25hbGl0eSB3aWxsIGJlIGFkZGVkIHRvCisgICA6ZnVuYzpgZGljdENvbmZpZ2AsIHNvIGl0J3Mgd29ydGggY29uc2lkZXJpbmcgdHJhbnNpdGlvbmluZyB0byB0aGlzIG5ld2VyCisgICBBUEkgd2hlbiBpdCdzIGNvbnZlbmllbnQgdG8gZG8gc28uCisKIEV4YW1wbGVzIG9mIHRoZXNlIHNlY3Rpb25zIGluIHRoZSBmaWxlIGFyZSBnaXZlbiBiZWxvdy4gOjoKIAogICAgW2xvZ2dlcnNdCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9sb2dnaW5nLmhhbmRsZXJzLnJzdCBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CmluZGV4IDQxNWUzOTcuLjllNTU4ZTUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CisrKyBiL0RvYy9saWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMucnN0CkBAIC0yMzAsNyArMjMwLDcgQEAKICAgICAgIHJlbmFtZWQgdG8gdGhlIGRlc3RpbmF0aW9uLgogCiAgICAgICA6cGFyYW0gc291cmNlOiBUaGUgc291cmNlIGZpbGVuYW1lLiBUaGlzIGlzIG5vcm1hbGx5IHRoZSBiYXNlCi0gICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZS5nLiAndGVzdC5sb2cnCisgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZS5nLiAndGVzdC5sb2cnLgogICAgICAgOnBhcmFtIGRlc3Q6ICAgVGhlIGRlc3RpbmF0aW9uIGZpbGVuYW1lLiBUaGlzIGlzIG5vcm1hbGx5CiAgICAgICAgICAgICAgICAgICAgICB3aGF0IHRoZSBzb3VyY2UgaXMgcm90YXRlZCB0bywgZS5nLiAndGVzdC5sb2cuMScuCiAKQEAgLTI2OSwxNSArMjY5LDE2IEBACiAgICBZb3UgY2FuIHVzZSB0aGUgKm1heEJ5dGVzKiBhbmQgKmJhY2t1cENvdW50KiB2YWx1ZXMgdG8gYWxsb3cgdGhlIGZpbGUgdG8KICAgIDpkZm46YHJvbGxvdmVyYCBhdCBhIHByZWRldGVybWluZWQgc2l6ZS4gV2hlbiB0aGUgc2l6ZSBpcyBhYm91dCB0byBiZSBleGNlZWRlZCwKICAgIHRoZSBmaWxlIGlzIGNsb3NlZCBhbmQgYSBuZXcgZmlsZSBpcyBzaWxlbnRseSBvcGVuZWQgZm9yIG91dHB1dC4gUm9sbG92ZXIgb2NjdXJzCi0gICB3aGVuZXZlciB0aGUgY3VycmVudCBsb2cgZmlsZSBpcyBuZWFybHkgKm1heEJ5dGVzKiBpbiBsZW5ndGg7IGlmICptYXhCeXRlcyogaXMKLSAgIHplcm8sIHJvbGxvdmVyIG5ldmVyIG9jY3Vycy4gIElmICpiYWNrdXBDb3VudCogaXMgbm9uLXplcm8sIHRoZSBzeXN0ZW0gd2lsbCBzYXZlCi0gICBvbGQgbG9nIGZpbGVzIGJ5IGFwcGVuZGluZyB0aGUgZXh0ZW5zaW9ucyAnLjEnLCAnLjInIGV0Yy4sIHRvIHRoZSBmaWxlbmFtZS4gRm9yCi0gICBleGFtcGxlLCB3aXRoIGEgKmJhY2t1cENvdW50KiBvZiA1IGFuZCBhIGJhc2UgZmlsZSBuYW1lIG9mIDpmaWxlOmBhcHAubG9nYCwgeW91Ci0gICB3b3VsZCBnZXQgOmZpbGU6YGFwcC5sb2dgLCA6ZmlsZTpgYXBwLmxvZy4xYCwgOmZpbGU6YGFwcC5sb2cuMmAsIHVwIHRvCi0gICA6ZmlsZTpgYXBwLmxvZy41YC4gVGhlIGZpbGUgYmVpbmcgd3JpdHRlbiB0byBpcyBhbHdheXMgOmZpbGU6YGFwcC5sb2dgLiAgV2hlbgotICAgdGhpcyBmaWxlIGlzIGZpbGxlZCwgaXQgaXMgY2xvc2VkIGFuZCByZW5hbWVkIHRvIDpmaWxlOmBhcHAubG9nLjFgLCBhbmQgaWYgZmlsZXMKLSAgIDpmaWxlOmBhcHAubG9nLjFgLCA6ZmlsZTpgYXBwLmxvZy4yYCwgZXRjLiAgZXhpc3QsIHRoZW4gdGhleSBhcmUgcmVuYW1lZCB0bwotICAgOmZpbGU6YGFwcC5sb2cuMmAsIDpmaWxlOmBhcHAubG9nLjNgIGV0Yy4gIHJlc3BlY3RpdmVseS4KKyAgIHdoZW5ldmVyIHRoZSBjdXJyZW50IGxvZyBmaWxlIGlzIG5lYXJseSAqbWF4Qnl0ZXMqIGluIGxlbmd0aDsgaWYgZWl0aGVyIG9mCisgICAqbWF4Qnl0ZXMqIG9yICpiYWNrdXBDb3VudCogaXMgemVybywgcm9sbG92ZXIgbmV2ZXIgb2NjdXJzLiAgSWYgKmJhY2t1cENvdW50KgorICAgaXMgbm9uLXplcm8sIHRoZSBzeXN0ZW0gd2lsbCBzYXZlIG9sZCBsb2cgZmlsZXMgYnkgYXBwZW5kaW5nIHRoZSBleHRlbnNpb25zCisgICAnLjEnLCAnLjInIGV0Yy4sIHRvIHRoZSBmaWxlbmFtZS4gRm9yIGV4YW1wbGUsIHdpdGggYSAqYmFja3VwQ291bnQqIG9mIDUgYW5kCisgICBhIGJhc2UgZmlsZSBuYW1lIG9mIDpmaWxlOmBhcHAubG9nYCwgeW91IHdvdWxkIGdldCA6ZmlsZTpgYXBwLmxvZ2AsCisgICA6ZmlsZTpgYXBwLmxvZy4xYCwgOmZpbGU6YGFwcC5sb2cuMmAsIHVwIHRvIDpmaWxlOmBhcHAubG9nLjVgLiBUaGUgZmlsZSBiZWluZworICAgd3JpdHRlbiB0byBpcyBhbHdheXMgOmZpbGU6YGFwcC5sb2dgLiAgV2hlbiB0aGlzIGZpbGUgaXMgZmlsbGVkLCBpdCBpcyBjbG9zZWQKKyAgIGFuZCByZW5hbWVkIHRvIDpmaWxlOmBhcHAubG9nLjFgLCBhbmQgaWYgZmlsZXMgOmZpbGU6YGFwcC5sb2cuMWAsCisgICA6ZmlsZTpgYXBwLmxvZy4yYCwgZXRjLiAgZXhpc3QsIHRoZW4gdGhleSBhcmUgcmVuYW1lZCB0byA6ZmlsZTpgYXBwLmxvZy4yYCwKKyAgIDpmaWxlOmBhcHAubG9nLjNgIGV0Yy4gIHJlc3BlY3RpdmVseS4KIAogCiAgICAuLiBtZXRob2Q6OiBkb1JvbGxvdmVyKCkKQEAgLTMwMCw3ICszMDEsNyBAQAogdGltZWQgaW50ZXJ2YWxzLgogCiAKLS4uIGNsYXNzOjogVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSkKKy4uIGNsYXNzOjogVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSwgYXRUaW1lPU5vbmUpCiAKICAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyYCBjbGFzcy4gVGhlCiAgICBzcGVjaWZpZWQgZmlsZSBpcyBvcGVuZWQgYW5kIHVzZWQgYXMgdGhlIHN0cmVhbSBmb3IgbG9nZ2luZy4gT24gcm90YXRpbmcgaXQgYWxzbwpAQCAtMzUwLDYgKzM1MSwxMiBAQAogICAgSWYgKmRlbGF5KiBpcyB0cnVlLCB0aGVuIGZpbGUgb3BlbmluZyBpcyBkZWZlcnJlZCB1bnRpbCB0aGUgZmlyc3QgY2FsbCB0bwogICAgOm1ldGg6YGVtaXRgLgogCisgICBJZiAqYXRUaW1lKiBpcyBub3QgYGBOb25lYGAsIGl0IG11c3QgYmUgYSBgYGRhdGV0aW1lLnRpbWVgYCBpbnN0YW5jZSB3aGljaAorICAgc3BlY2lmaWVzIHRoZSB0aW1lIG9mIGRheSB3aGVuIHJvbGxvdmVyIG9jY3VycywgZm9yIHRoZSBjYXNlcyB3aGVyZSByb2xsb3ZlcgorICAgaXMgc2V0IHRvIGhhcHBlbiAiYXQgbWlkbmlnaHQiIG9yICJvbiBhIHBhcnRpY3VsYXIgd2Vla2RheSIuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAqYXRUaW1lKiBwYXJhbWV0ZXIgd2FzIGFkZGVkLgogCiAgICAuLiBtZXRob2Q6OiBkb1JvbGxvdmVyKCkKIApAQCAtMzc1LDYgKzM4Miw5IEBACiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YFNvY2tldEhhbmRsZXJgIGNsYXNzIGludGVuZGVkIHRvCiAgICBjb21tdW5pY2F0ZSB3aXRoIGEgcmVtb3RlIG1hY2hpbmUgd2hvc2UgYWRkcmVzcyBpcyBnaXZlbiBieSAqaG9zdCogYW5kICpwb3J0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIElmIGBgcG9ydGBgIGlzIHNwZWNpZmllZCBhcyBgYE5vbmVgYCwgYSBVbml4IGRvbWFpbiBzb2NrZXQgaXMgY3JlYXRlZAorICAgICAgdXNpbmcgdGhlIHZhbHVlIGluIGBgaG9zdGBgIC0gb3RoZXJ3aXNlLCBhIFRDUCBzb2NrZXQgaXMgY3JlYXRlZC4KIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCkBAIC00MjYsNyArNDM2LDcgQEAKICAgIC4uIG1ldGhvZDo6IGNyZWF0ZVNvY2tldCgpCiAKICAgICAgIFRyaWVzIHRvIGNyZWF0ZSBhIHNvY2tldDsgb24gZmFpbHVyZSwgdXNlcyBhbiBleHBvbmVudGlhbCBiYWNrLW9mZgotICAgICAgYWxnb3JpdGhtLiAgT24gaW50aWFsIGZhaWx1cmUsIHRoZSBoYW5kbGVyIHdpbGwgZHJvcCB0aGUgbWVzc2FnZSBpdCB3YXMKKyAgICAgIGFsZ29yaXRobS4gIE9uIGluaXRpYWwgZmFpbHVyZSwgdGhlIGhhbmRsZXIgd2lsbCBkcm9wIHRoZSBtZXNzYWdlIGl0IHdhcwogICAgICAgdHJ5aW5nIHRvIHNlbmQuICBXaGVuIHN1YnNlcXVlbnQgbWVzc2FnZXMgYXJlIGhhbmRsZWQgYnkgdGhlIHNhbWUKICAgICAgIGluc3RhbmNlLCBpdCB3aWxsIG5vdCB0cnkgY29ubmVjdGluZyB1bnRpbCBzb21lIHRpbWUgaGFzIHBhc3NlZC4gIFRoZQogICAgICAgZGVmYXVsdCBwYXJhbWV0ZXJzIGFyZSBzdWNoIHRoYXQgdGhlIGluaXRpYWwgZGVsYXkgaXMgb25lIHNlY29uZCwgYW5kIGlmCkBAIC00NjAsNiArNDcwLDkgQEAKICAgIFJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIDpjbGFzczpgRGF0YWdyYW1IYW5kbGVyYCBjbGFzcyBpbnRlbmRlZCB0bwogICAgY29tbXVuaWNhdGUgd2l0aCBhIHJlbW90ZSBtYWNoaW5lIHdob3NlIGFkZHJlc3MgaXMgZ2l2ZW4gYnkgKmhvc3QqIGFuZCAqcG9ydCouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJZiBgYHBvcnRgYCBpcyBzcGVjaWZpZWQgYXMgYGBOb25lYGAsIGEgVW5peCBkb21haW4gc29ja2V0IGlzIGNyZWF0ZWQKKyAgICAgIHVzaW5nIHRoZSB2YWx1ZSBpbiBgYGhvc3RgYCAtIG90aGVyd2lzZSwgYSBUQ1Agc29ja2V0IGlzIGNyZWF0ZWQuCiAKICAgIC4uIG1ldGhvZDo6IGVtaXQoKQogCkBAIC04MjcsMjEgKzg0MCw0MyBAQAogYGBQT1NUYGAgc2VtYW50aWNzLgogCiAKLS4uIGNsYXNzOjogSFRUUEhhbmRsZXIoaG9zdCwgdXJsLCBtZXRob2Q9J0dFVCcsIHNlY3VyZT1GYWxzZSwgY3JlZGVudGlhbHM9Tm9uZSkKKy4uIGNsYXNzOjogSFRUUEhhbmRsZXIoaG9zdCwgdXJsLCBtZXRob2Q9J0dFVCcsIHNlY3VyZT1GYWxzZSwgY3JlZGVudGlhbHM9Tm9uZSwgY29udGV4dD1Ob25lKQogCiAgICBSZXR1cm5zIGEgbmV3IGluc3RhbmNlIG9mIHRoZSA6Y2xhc3M6YEhUVFBIYW5kbGVyYCBjbGFzcy4gVGhlICpob3N0KiBjYW4gYmUKLSAgIG9mIHRoZSBmb3JtIGBgaG9zdDpwb3J0YGAsIHNob3VsZCB5b3UgbmVlZCB0byB1c2UgYSBzcGVjaWZpYyBwb3J0IG51bWJlci4KLSAgIElmIG5vICptZXRob2QqIGlzIHNwZWNpZmllZCwgYGBHRVRgYCBpcyB1c2VkLiBJZiAqc2VjdXJlKiBpcyB0cnVlLCBhbiBIVFRQUwotICAgY29ubmVjdGlvbiB3aWxsIGJlIHVzZWQuIElmICpjcmVkZW50aWFscyogaXMgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYQotICAgMi10dXBsZSBjb25zaXN0aW5nIG9mIHVzZXJpZCBhbmQgcGFzc3dvcmQsIHdoaWNoIHdpbGwgYmUgcGxhY2VkIGluIGFuIEhUVFAKKyAgIG9mIHRoZSBmb3JtIGBgaG9zdDpwb3J0YGAsIHNob3VsZCB5b3UgbmVlZCB0byB1c2UgYSBzcGVjaWZpYyBwb3J0IG51bWJlci4gIElmCisgICBubyAqbWV0aG9kKiBpcyBzcGVjaWZpZWQsIGBgR0VUYGAgaXMgdXNlZC4gSWYgKnNlY3VyZSogaXMgdHJ1ZSwgYSBIVFRQUworICAgY29ubmVjdGlvbiB3aWxsIGJlIHVzZWQuIFRoZSAqY29udGV4dCogcGFyYW1ldGVyIG1heSBiZSBzZXQgdG8gYQorICAgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgaW5zdGFuY2UgdG8gY29uZmlndXJlIHRoZSBTU0wgc2V0dGluZ3MgdXNlZCBmb3IgdGhlCisgICBIVFRQUyBjb25uZWN0aW9uLiBJZiAqY3JlZGVudGlhbHMqIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgMi10dXBsZQorICAgY29uc2lzdGluZyBvZiB1c2VyaWQgYW5kIHBhc3N3b3JkLCB3aGljaCB3aWxsIGJlIHBsYWNlZCBpbiBhIEhUVFAKICAgICdBdXRob3JpemF0aW9uJyBoZWFkZXIgdXNpbmcgQmFzaWMgYXV0aGVudGljYXRpb24uIElmIHlvdSBzcGVjaWZ5CiAgICBjcmVkZW50aWFscywgeW91IHNob3VsZCBhbHNvIHNwZWNpZnkgc2VjdXJlPVRydWUgc28gdGhhdCB5b3VyIHVzZXJpZCBhbmQKICAgIHBhc3N3b3JkIGFyZSBub3QgcGFzc2VkIGluIGNsZWFydGV4dCBhY3Jvc3MgdGhlIHdpcmUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjMKKyAgICAgIFRoZSAqY29udGV4dCogcGFyYW1ldGVyIHdhcyBhZGRlZC4KKworICAgLi4gbWV0aG9kOjogbWFwTG9nUmVjb3JkKHJlY29yZCkKKworICAgICAgUHJvdmlkZXMgYSBkaWN0aW9uYXJ5LCBiYXNlZCBvbiBgYHJlY29yZGBgLCB3aGljaCBpcyB0byBiZSBVUkwtZW5jb2RlZAorICAgICAgYW5kIHNlbnQgdG8gdGhlIHdlYiBzZXJ2ZXIuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGp1c3QgcmV0dXJucworICAgICAgYGByZWNvcmQuX19kaWN0X19gYC4gVGhpcyBtZXRob2QgY2FuIGJlIG92ZXJyaWRkZW4gaWYgZS5nLiBvbmx5IGEKKyAgICAgIHN1YnNldCBvZiA6Y2xhc3M6YH5sb2dnaW5nLkxvZ1JlY29yZGAgaXMgdG8gYmUgc2VudCB0byB0aGUgd2ViIHNlcnZlciwgb3IKKyAgICAgIGlmIG1vcmUgc3BlY2lmaWMgY3VzdG9taXphdGlvbiBvZiB3aGF0J3Mgc2VudCB0byB0aGUgc2VydmVyIGlzIHJlcXVpcmVkLgogCiAgICAuLiBtZXRob2Q6OiBlbWl0KHJlY29yZCkKIAotICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhIHBlcmNlbnQtZW5jb2RlZCBkaWN0aW9uYXJ5LgorICAgICAgU2VuZHMgdGhlIHJlY29yZCB0byB0aGUgV2ViIHNlcnZlciBhcyBhbiBVUkwtZW5jb2RlZCBkaWN0aW9uYXJ5LiBUaGUKKyAgICAgIDptZXRoOmBtYXBMb2dSZWNvcmRgIG1ldGhvZCBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIHJlY29yZCB0byB0aGUKKyAgICAgIGRpY3Rpb25hcnkgdG8gYmUgc2VudC4KKworICAgLi4gbm90ZTo6IFNpbmNlIHByZXBhcmluZyBhIHJlY29yZCBmb3Igc2VuZGluZyBpdCB0byBhIFdlYiBzZXJ2ZXIgaXMgbm90CisgICAgICB0aGUgc2FtZSBhcyBhIGdlbmVyaWMgZm9ybWF0dGluZyBvcGVyYXRpb24sIHVzaW5nCisgICAgICA6bWV0aDpgfmxvZ2dpbmcuSGFuZGxlci5zZXRGb3JtYXR0ZXJgIHRvIHNwZWNpZnkgYQorICAgICAgOmNsYXNzOmB+bG9nZ2luZy5Gb3JtYXR0ZXJgIGZvciBhIDpjbGFzczpgSFRUUEhhbmRsZXJgIGhhcyBubyBlZmZlY3QuCisgICAgICBJbnN0ZWFkIG9mIGNhbGxpbmcgOm1ldGg6YH5sb2dnaW5nLkhhbmRsZXIuZm9ybWF0YCwgdGhpcyBoYW5kbGVyIGNhbGxzCisgICAgICA6bWV0aDpgbWFwTG9nUmVjb3JkYCBhbmQgdGhlbiA6ZnVuYzpgdXJsbGliLnBhcnNlLnVybGVuY29kZWAgdG8gZW5jb2RlIHRoZQorICAgICAgZGljdGlvbmFyeSBpbiBhIGZvcm0gc3VpdGFibGUgZm9yIHNlbmRpbmcgdG8gYSBXZWIgc2VydmVyLgogCiAKIC4uIF9xdWV1ZS1oYW5kbGVyOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbG9nZ2luZy5yc3QgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdAppbmRleCA4ZDA5M2UxLi44ZmQ3ZTQwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sb2dnaW5nLnJzdApAQCAtMTE4LDcgKzExOCw5IEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgVGhlICpsdmwqIHBhcmFtZXRlciBub3cgYWNjZXB0cyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUKICAgICAgIGxldmVsIHN1Y2ggYXMgJ0lORk8nIGFzIGFuIGFsdGVybmF0aXZlIHRvIHRoZSBpbnRlZ2VyIGNvbnN0YW50cwotICAgICAgc3VjaCBhcyA6Y29uc3Q6YElORk9gLgorICAgICAgc3VjaCBhcyA6Y29uc3Q6YElORk9gLiBOb3RlLCBob3dldmVyLCB0aGF0IGxldmVscyBhcmUgaW50ZXJuYWxseSBzdG9yZWQKKyAgICAgIGFzIGludGVnZXJzLCBhbmQgbWV0aG9kcyBzdWNoIGFzIGUuZy4gOm1ldGg6YGdldEVmZmVjdGl2ZUxldmVsYCBhbmQKKyAgICAgIDptZXRoOmBpc0VuYWJsZWRGb3JgIHdpbGwgcmV0dXJuL2V4cGVjdCB0byBiZSBwYXNzZWQgaW50ZWdlcnMuCiAKIAogLi4gbWV0aG9kOjogTG9nZ2VyLmlzRW5hYmxlZEZvcihsdmwpCkBAIC0xMzQsNyArMTM2LDkgQEAKICAgIEluZGljYXRlcyB0aGUgZWZmZWN0aXZlIGxldmVsIGZvciB0aGlzIGxvZ2dlci4gSWYgYSB2YWx1ZSBvdGhlciB0aGFuCiAgICA6Y29uc3Q6YE5PVFNFVGAgaGFzIGJlZW4gc2V0IHVzaW5nIDptZXRoOmBzZXRMZXZlbGAsIGl0IGlzIHJldHVybmVkLiBPdGhlcndpc2UsCiAgICB0aGUgaGllcmFyY2h5IGlzIHRyYXZlcnNlZCB0b3dhcmRzIHRoZSByb290IHVudGlsIGEgdmFsdWUgb3RoZXIgdGhhbgotICAgOmNvbnN0OmBOT1RTRVRgIGlzIGZvdW5kLCBhbmQgdGhhdCB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgIDpjb25zdDpgTk9UU0VUYCBpcyBmb3VuZCwgYW5kIHRoYXQgdmFsdWUgaXMgcmV0dXJuZWQuIFRoZSB2YWx1ZSByZXR1cm5lZCBpcworICAgYW4gaW50ZWdlciwgdHlwaWNhbGx5IG9uZSBvZiA6Y29uc3Q6YGxvZ2dpbmcuREVCVUdgLCA6Y29uc3Q6YGxvZ2dpbmcuSU5GT2AKKyAgIGV0Yy4KIAogCiAuLiBtZXRob2Q6OiBMb2dnZXIuZ2V0Q2hpbGQoc3VmZml4KQpAQCAtMjUwLDcgKzI1NCw3IEBACiAgICBpbnRlcnByZXRlZCBhcyBmb3IgOm1ldGg6YGRlYnVnYC4KIAogCi0uLiBtZXRob2Q6OiBMb2dnZXIuZXhjZXB0aW9uKG1zZywgKmFyZ3MpCisuLiBtZXRob2Q6OiBMb2dnZXIuZXhjZXB0aW9uKG1zZywgKmFyZ3MsICoqa3dhcmdzKQogCiAgICBMb2dzIGEgbWVzc2FnZSB3aXRoIGxldmVsIDpjb25zdDpgRVJST1JgIG9uIHRoaXMgbG9nZ2VyLiBUaGUgYXJndW1lbnRzIGFyZQogICAgaW50ZXJwcmV0ZWQgYXMgZm9yIDptZXRoOmBkZWJ1Z2AuIEV4Y2VwdGlvbiBpbmZvIGlzIGFkZGVkIHRvIHRoZSBsb2dnaW5nCkBAIC00NzcsNyArNDgxLDkgQEAKIHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nIGEgOmNsYXNzOmBMb2dSZWNvcmRgIHRvICh1c3VhbGx5KSBhIHN0cmluZyB3aGljaCBjYW4KIGJlIGludGVycHJldGVkIGJ5IGVpdGhlciBhIGh1bWFuIG9yIGFuIGV4dGVybmFsIHN5c3RlbS4gVGhlIGJhc2UKIDpjbGFzczpgRm9ybWF0dGVyYCBhbGxvd3MgYSBmb3JtYXR0aW5nIHN0cmluZyB0byBiZSBzcGVjaWZpZWQuIElmIG5vbmUgaXMKLXN1cHBsaWVkLCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBgYCclKG1lc3NhZ2UpcydgYCBpcyB1c2VkLgorc3VwcGxpZWQsIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGBgJyUobWVzc2FnZSlzJ2BgIGlzIHVzZWQsIHdoaWNoIGp1c3QgaW5jbHVkZXMKK3RoZSBtZXNzYWdlIGluIHRoZSBsb2dnaW5nIGNhbGwuIFRvIGhhdmUgYWRkaXRpb25hbCBpdGVtcyBvZiBpbmZvcm1hdGlvbiBpbiB0aGUKK2Zvcm1hdHRlZCBvdXRwdXQgKHN1Y2ggYXMgYSB0aW1lc3RhbXApLCBrZWVwIHJlYWRpbmcuCiAKIEEgRm9ybWF0dGVyIGNhbiBiZSBpbml0aWFsaXplZCB3aXRoIGEgZm9ybWF0IHN0cmluZyB3aGljaCBtYWtlcyB1c2Ugb2Yga25vd2xlZGdlCiBvZiB0aGUgOmNsYXNzOmBMb2dSZWNvcmRgIGF0dHJpYnV0ZXMgLSBzdWNoIGFzIHRoZSBkZWZhdWx0IHZhbHVlIG1lbnRpb25lZCBhYm92ZQpAQCAtNzMyLDcgKzczOCw5IEBACiB8IEF0dHJpYnV0ZSBuYW1lIHwgRm9ybWF0ICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKz09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKIHwgYXJncyAgICAgICAgICAgfCBZb3Ugc2hvdWxkbid0IG5lZWQgdG8gICB8IFRoZSB0dXBsZSBvZiBhcmd1bWVudHMgbWVyZ2VkIGludG8gYGBtc2dgYCB0byB8Ci18ICAgICAgICAgICAgICAgIHwgZm9ybWF0IHRoaXMgeW91cnNlbGYuICAgfCBwcm9kdWNlIGBgbWVzc2FnZWBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICB8IGZvcm1hdCB0aGlzIHlvdXJzZWxmLiAgIHwgcHJvZHVjZSBgYG1lc3NhZ2VgYCwgb3IgYSBkaWN0IHdob3NlIHZhbHVlcyAgIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZSB1c2VkIGZvciB0aGUgbWVyZ2UgKHdoZW4gdGhlcmUgaXMgb25seSBvbmV8Cit8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudCwgYW5kIGl0IGlzIGEgZGljdGlvbmFyeSkuICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgYXNjdGltZSAgICAgICAgfCBgYCUoYXNjdGltZSlzYGAgICAgICAgICB8IEh1bWFuLXJlYWRhYmxlIHRpbWUgd2hlbiB0aGUgICAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCA6Y2xhc3M6YExvZ1JlY29yZGAgd2FzIGNyZWF0ZWQuICBCeSBkZWZhdWx0ICAgfApAQCAtOTkyLDcgKzEwMDAsNyBAQAogICAgYXJlIGludGVycHJldGVkIGFzIGZvciA6ZnVuYzpgZGVidWdgLgogCiAKLS4uIGZ1bmN0aW9uOjogZXhjZXB0aW9uKG1zZywgKmFyZ3MpCisuLiBmdW5jdGlvbjo6IGV4Y2VwdGlvbihtc2csICphcmdzLCAqKmt3YXJncykKIAogICAgTG9ncyBhIG1lc3NhZ2Ugd2l0aCBsZXZlbCA6Y29uc3Q6YEVSUk9SYCBvbiB0aGUgcm9vdCBsb2dnZXIuIFRoZSBhcmd1bWVudHMgYXJlCiAgICBpbnRlcnByZXRlZCBhcyBmb3IgOmZ1bmM6YGRlYnVnYC4gRXhjZXB0aW9uIGluZm8gaXMgYWRkZWQgdG8gdGhlIGxvZ2dpbmcKQEAgLTEwNDksNiArMTA1NywxNiBAQAogICAgb2YgdGhlIGRlZmluZWQgbGV2ZWxzIGlzIHBhc3NlZCBpbiwgdGhlIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGlzCiAgICByZXR1cm5lZC4gT3RoZXJ3aXNlLCB0aGUgc3RyaW5nICdMZXZlbCAlcycgJSBsdmwgaXMgcmV0dXJuZWQuCiAKKyAgIC4uIG5vdGU6OiBMZXZlbHMgYXJlIGludGVybmFsbHkgaW50ZWdlcnMgKGFzIHRoZXkgbmVlZCB0byBiZSBjb21wYXJlZCBpbiB0aGUKKyAgICAgIGxvZ2dpbmcgbG9naWMpLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29udmVydCBiZXR3ZWVuIGFuIGludGVnZXIgbGV2ZWwKKyAgICAgIGFuZCB0aGUgbGV2ZWwgbmFtZSBkaXNwbGF5ZWQgaW4gdGhlIGZvcm1hdHRlZCBsb2cgb3V0cHV0IGJ5IG1lYW5zIG9mIHRoZQorICAgICAgYGAlKGxldmVsbmFtZSlzYGAgZm9ybWF0IHNwZWNpZmllciAoc2VlIDpyZWY6YGxvZ3JlY29yZC1hdHRyaWJ1dGVzYCkuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBJbiBQeXRob24gdmVyc2lvbnMgZWFybGllciB0aGFuIDMuNCwgdGhpcyBmdW5jdGlvbiBjb3VsZCBhbHNvIGJlIHBhc3NlZCBhCisgICAgICB0ZXh0IGxldmVsLCBhbmQgd291bGQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIG51bWVyaWMgdmFsdWUgb2YgdGhlIGxldmVsLgorICAgICAgVGhpcyB1bmRvY3VtZW50ZWQgYmVoYXZpb3VyIHdhcyBjb25zaWRlcmVkIGEgbWlzdGFrZSwgYW5kIHdhcyByZW1vdmVkIGluCisgICAgICBQeXRob24gMy40LCBidXQgcmVpbnN0YXRlZCBpbiAzLjQuMiBkdWUgdG8gcmV0YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCiAKIC4uIGZ1bmN0aW9uOjogbWFrZUxvZ1JlY29yZChhdHRyZGljdCkKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbHptYS5yc3QgYi9Eb2MvbGlicmFyeS9sem1hLnJzdAppbmRleCAwN2I2OWViLi5iNzEwNTFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9sem1hLnJzdAorKysgYi9Eb2MvbGlicmFyeS9sem1hLnJzdApAQCAtMzksOCArMzksOCBAQAogICAgb3BlbmVkLCBvciBpdCBjYW4gYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCiAgICBUaGUgKm1vZGUqIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgYGAiciJgYCwgYGAicmIiYGAsIGBgInciYGAsIGBgIndiImBgLAotICAgYGAiYSJgYCBvciBgYCJhYiJgYCBmb3IgYmluYXJ5IG1vZGUsIG9yIGBgInJ0ImBgLCBgYCJ3dCJgYCwgb3IgYGAiYXQiYGAgZm9yCi0gICB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IGlzIGBgInJiImBgLgorICAgYGAieCJgYCwgYGAieGIiYGAsIGBgImEiYGAgb3IgYGAiYWIiYGAgZm9yIGJpbmFyeSBtb2RlLCBvciBgYCJydCJgYCwKKyAgIGBgInd0ImBgLCBgYCJ4dCJgYCwgb3IgYGAiYXQiYGAgZm9yIHRleHQgbW9kZS4gVGhlIGRlZmF1bHQgaXMgYGAicmIiYGAuCiAKICAgIFdoZW4gb3BlbmluZyBhIGZpbGUgZm9yIHJlYWRpbmcsIHRoZSAqZm9ybWF0KiBhbmQgKmZpbHRlcnMqIGFyZ3VtZW50cyBoYXZlCiAgICB0aGUgc2FtZSBtZWFuaW5ncyBhcyBmb3IgOmNsYXNzOmBMWk1BRGVjb21wcmVzc29yYC4gSW4gdGhpcyBjYXNlLCB0aGUgKmNoZWNrKgpAQCAtNTcsNiArNTcsOSBAQAogICAgOmNsYXNzOmBpby5UZXh0SU9XcmFwcGVyYCBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCiAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGBgIngiYGAsIGBgInhiImBgIGFuZCBgYCJ4dCJgYCBtb2Rlcy4KKwogCiAuLiBjbGFzczo6IExaTUFGaWxlKGZpbGVuYW1lPU5vbmUsIG1vZGU9InIiLCBcKiwgZm9ybWF0PU5vbmUsIGNoZWNrPS0xLCBwcmVzZXQ9Tm9uZSwgZmlsdGVycz1Ob25lKQogCkBAIC02OSw4ICs3Miw5IEBACiAgICBmaWxlIHdpbGwgbm90IGJlIGNsb3NlZCB3aGVuIHRoZSA6Y2xhc3M6YExaTUFGaWxlYCBpcyBjbG9zZWQuCiAKICAgIFRoZSAqbW9kZSogYXJndW1lbnQgY2FuIGJlIGVpdGhlciBgYCJyImBgIGZvciByZWFkaW5nIChkZWZhdWx0KSwgYGAidyJgYCBmb3IKLSAgIG92ZXJ3cml0aW5nLCBvciBgYCJhImBgIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMKLSAgIGBgInJiImBgLCBgYCJ3YiJgYCwgYW5kIGBgImFiImBgIHJlc3BlY3RpdmVseS4KKyAgIG92ZXJ3cml0aW5nLCBgYCJ4ImBgIGZvciBleGNsdXNpdmUgY3JlYXRpb24sIG9yIGBgImEiYGAgZm9yIGFwcGVuZGluZy4gVGhlc2UKKyAgIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgYGAicmIiYGAsIGBgIndiImBgLCBgYCJ4YiJgYCBhbmQgYGAiYWIiYGAKKyAgIHJlc3BlY3RpdmVseS4KIAogICAgSWYgKmZpbGVuYW1lKiBpcyBhIGZpbGUgb2JqZWN0IChyYXRoZXIgdGhhbiBhbiBhY3R1YWwgZmlsZSBuYW1lKSwgYSBtb2RlIG9mCiAgICBgYCJ3ImBgIGRvZXMgbm90IHRydW5jYXRlIHRoZSBmaWxlLCBhbmQgaXMgaW5zdGVhZCBlcXVpdmFsZW50IHRvIGBgImEiYGAuCkBAIC0xMDMsNiArMTA3LDkgQEAKICAgICAgICAgIGZpbGUgb2JqZWN0IChlLmcuIGlmIHRoZSA6Y2xhc3M6YExaTUFGaWxlYCB3YXMgY29uc3RydWN0ZWQgYnkgcGFzc2luZyBhCiAgICAgICAgICBmaWxlIG9iamVjdCBmb3IgKmZpbGVuYW1lKikuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzdXBwb3J0IGZvciB0aGUgYGAieCJgYCBhbmQgYGAieGIiYGAgbW9kZXMuCisKIAogQ29tcHJlc3NpbmcgYW5kIGRlY29tcHJlc3NpbmcgZGF0YSBpbiBtZW1vcnkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tYWlsYm94LnJzdCBiL0RvYy9saWJyYXJ5L21haWxib3gucnN0CmluZGV4IDA0NzhlZDEuLmQyOTkwMmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21haWxib3gucnN0CisrKyBiL0RvYy9saWJyYXJ5L21haWxib3gucnN0CkBAIC0yMDIsNyArMjAyLDcgQEAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAgICBUaGUgZmlsZSBvYmplY3QgcmVhbGx5IGlzIGEgYmluYXJ5IGZpbGU7IHByZXZpb3VzbHkgaXQgd2FzIGluY29ycmVjdGx5CiAgICAgICAgICByZXR1cm5lZCBpbiB0ZXh0IG1vZGUuICBBbHNvLCB0aGUgZmlsZS1saWtlIG9iamVjdCBub3cgc3VwcG9ydHMgdGhlCi0gICAgICAgICBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2w6IHlvdSBjYW4gdXNlIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0bworICAgICAgICAgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sOiB5b3UgY2FuIHVzZSBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgdG8KICAgICAgICAgIGF1dG9tYXRpY2FsbHkgY2xvc2UgaXQuCiAKICAgICAgIC4uIG5vdGU6OgpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAgICBgQ29uZmlndXJpbmcgTmV0c2NhcGUgTWFpbCBvbiBVbml4OiBXaHkgVGhlIENvbnRlbnQtTGVuZ3RoIEZvcm1hdCBpcyBCYWQgPGh0dHA6Ly93d3cuand6Lm9yZy9kb2MvY29udGVudC1sZW5ndGguaHRtbD5gXwogICAgICAgQW4gYXJndW1lbnQgZm9yIHVzaW5nIHRoZSBvcmlnaW5hbCBtYm94IGZvcm1hdCByYXRoZXIgdGhhbiBhIHZhcmlhdGlvbi4KIAotICAgYCJtYm94IiBpcyBhIGZhbWlseSBvZiBzZXZlcmFsIG11dHVhbGx5IGluY29tcGF0aWJsZSBtYWlsYm94IGZvcm1hdHMgPGh0dHA6Ly9ob21lcGFnZXMudGVzY28ubmV0Li9+Si5kZUJveW5lUG9sbGFyZC9GR0EvbWFpbC1tYm94LWZvcm1hdHMuaHRtbD5gXworICAgYCJtYm94IiBpcyBhIGZhbWlseSBvZiBzZXZlcmFsIG11dHVhbGx5IGluY29tcGF0aWJsZSBtYWlsYm94IGZvcm1hdHMgPGh0dHA6Ly9ob21lcGFnZS5udGx3b3JsZC5jb20vam9uYXRoYW4uZGVib3luZXBvbGxhcmQvRkdBL21haWwtbWJveC1mb3JtYXRzLmh0bWw+YF8KICAgICAgIEEgaGlzdG9yeSBvZiBtYm94IHZhcmlhdGlvbnMuCiAKIApAQCAtNjc0LDcgKzY3NCw3IEBACiAKICAgICAgIEluIEJhYnlsIG1haWxib3hlcywgdGhlIGhlYWRlcnMgb2YgYSBtZXNzYWdlIGFyZSBub3Qgc3RvcmVkIGNvbnRpZ3VvdXNseQogICAgICAgd2l0aCB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4gVG8gZ2VuZXJhdGUgYSBmaWxlLWxpa2UgcmVwcmVzZW50YXRpb24sIHRoZQotICAgICAgaGVhZGVycyBhbmQgYm9keSBhcmUgY29waWVkIHRvZ2V0aGVyIGludG8gYSA6Y2xhc3M6YGlvLkJ5dGVzSU9gIGluc3RhbmNlLAorICAgICAgaGVhZGVycyBhbmQgYm9keSBhcmUgY29waWVkIHRvZ2V0aGVyIGludG8gYW4gOmNsYXNzOmBpby5CeXRlc0lPYCBpbnN0YW5jZSwKICAgICAgIHdoaWNoIGhhcyBhbiBBUEkgaWRlbnRpY2FsIHRvIHRoYXQgb2YgYQogICAgICAgZmlsZS4gQXMgYSByZXN1bHQsIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGlzIHRydWx5IGluZGVwZW5kZW50IG9mIHRoZQogICAgICAgdW5kZXJseWluZyBtYWlsYm94IGJ1dCBkb2VzIG5vdCBzYXZlIG1lbW9yeSBjb21wYXJlZCB0byBhIHN0cmluZwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWFyc2hhbC5yc3QgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAppbmRleCAzYjllM2QyLi5hZjQzOTQ0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYXJzaGFsLnJzdApAQCAtNDAsMTAgKzQwLDExIEBACiBwb2ludCBudW1iZXJzLCBjb21wbGV4IG51bWJlcnMsIHN0cmluZ3MsIGJ5dGVzLCBieXRlYXJyYXlzLCB0dXBsZXMsIGxpc3RzLCBzZXRzLAogZnJvemVuc2V0cywgZGljdGlvbmFyaWVzLCBhbmQgY29kZSBvYmplY3RzLCB3aGVyZSBpdCBzaG91bGQgYmUgdW5kZXJzdG9vZCB0aGF0CiB0dXBsZXMsIGxpc3RzLCBzZXRzLCBmcm96ZW5zZXRzIGFuZCBkaWN0aW9uYXJpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGFzIGxvbmcgYXMKLXRoZSB2YWx1ZXMgY29udGFpbmVkIHRoZXJlaW4gYXJlIHRoZW1zZWx2ZXMgc3VwcG9ydGVkOyBhbmQgcmVjdXJzaXZlIGxpc3RzLCBzZXRzCi1hbmQgZGljdGlvbmFyaWVzIHNob3VsZCBub3QgYmUgd3JpdHRlbiAodGhleSB3aWxsIGNhdXNlIGluZmluaXRlIGxvb3BzKS4gIFRoZQordGhlIHZhbHVlcyBjb250YWluZWQgdGhlcmVpbiBhcmUgdGhlbXNlbHZlcyBzdXBwb3J0ZWQuCiBzaW5nbGV0b25zIDpjb25zdDpgTm9uZWAsIDpjb25zdDpgRWxsaXBzaXNgIGFuZCA6ZXhjOmBTdG9wSXRlcmF0aW9uYCBjYW4gYWxzbyBiZQogbWFyc2hhbGxlZCBhbmQgdW5tYXJzaGFsbGVkLgorRm9yIGZvcm1hdCAqdmVyc2lvbiogbG93ZXIgdGhhbiAzLCByZWN1cnNpdmUgbGlzdHMsIHNldHMgYW5kIGRpY3Rpb25hcmllcyBjYW5ub3QKK2JlIHdyaXR0ZW4gKHNlZSBiZWxvdykuCiAKIFRoZXJlIGFyZSBmdW5jdGlvbnMgdGhhdCByZWFkL3dyaXRlIGZpbGVzIGFzIHdlbGwgYXMgZnVuY3Rpb25zIG9wZXJhdGluZyBvbgogc3RyaW5ncy4KQEAgLTEwMyw3ICsxMDQsOSBAQAogCiAgICBJbmRpY2F0ZXMgdGhlIGZvcm1hdCB0aGF0IHRoZSBtb2R1bGUgdXNlcy4gVmVyc2lvbiAwIGlzIHRoZSBoaXN0b3JpY2FsCiAgICBmb3JtYXQsIHZlcnNpb24gMSBzaGFyZXMgaW50ZXJuZWQgc3RyaW5ncyBhbmQgdmVyc2lvbiAyIHVzZXMgYSBiaW5hcnkgZm9ybWF0Ci0gICBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyAyLgorICAgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuCisgICBWZXJzaW9uIDMgYWRkcyBzdXBwb3J0IGZvciBvYmplY3QgaW5zdGFuY2luZyBhbmQgcmVjdXJzaW9uLgorICAgVGhlIGN1cnJlbnQgdmVyc2lvbiBpcyA0LgogCiAKIC4uIHJ1YnJpYzo6IEZvb3Rub3RlcwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbWF0aC5yc3QgYi9Eb2MvbGlicmFyeS9tYXRoLnJzdAppbmRleCAzYzQxNjcyLi4wZmM3YzdjIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tYXRoLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tYXRoLnJzdApAQCAtMjgwLDEyICsyODAsMTIgQEAKIAogLi4gZnVuY3Rpb246OiBkZWdyZWVzKHgpCiAKLSAgIENvbnZlcnRzIGFuZ2xlICp4KiBmcm9tIHJhZGlhbnMgdG8gZGVncmVlcy4KKyAgIENvbnZlcnQgYW5nbGUgKngqIGZyb20gcmFkaWFucyB0byBkZWdyZWVzLgogCiAKIC4uIGZ1bmN0aW9uOjogcmFkaWFucyh4KQogCi0gICBDb252ZXJ0cyBhbmdsZSAqeCogZnJvbSBkZWdyZWVzIHRvIHJhZGlhbnMuCisgICBDb252ZXJ0IGFuZ2xlICp4KiBmcm9tIGRlZ3JlZXMgdG8gcmFkaWFucy4KIAogSHlwZXJib2xpYyBmdW5jdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9taW1ldHlwZXMucnN0IGIvRG9jL2xpYnJhcnkvbWltZXR5cGVzLnJzdAppbmRleCAxMmM5ZWNhLi44NzM5ZWEzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9taW1ldHlwZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L21pbWV0eXBlcy5yc3QKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgVGhlIG9wdGlvbmFsICpzdHJpY3QqIGFyZ3VtZW50IGlzIGEgZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgdGhlIGxpc3Qgb2Yga25vd24gTUlNRSB0eXBlcwogICAgaXMgbGltaXRlZCB0byBvbmx5IHRoZSBvZmZpY2lhbCB0eXBlcyBgcmVnaXN0ZXJlZCB3aXRoIElBTkEKLSAgIDxodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzLz5gXy4KKyAgIDxodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL21lZGlhLXR5cGVzL21lZGlhLXR5cGVzLnhodG1sPmBfLgogICAgV2hlbiAqc3RyaWN0KiBpcyBgYFRydWVgYCAodGhlIGRlZmF1bHQpLCBvbmx5IHRoZSBJQU5BIHR5cGVzIGFyZSBzdXBwb3J0ZWQ7IHdoZW4KICAgICpzdHJpY3QqIGlzIGBgRmFsc2VgYCwgc29tZSBhZGRpdGlvbmFsIG5vbi1zdGFuZGFyZCBidXQgY29tbW9ubHkgdXNlZCBNSU1FIHR5cGVzCiAgICBhcmUgYWxzbyByZWNvZ25pemVkLgpAQCAtMTA2LDggKzEwNiw4IEBACiAgICBleHRlbnNpb24gaXMgYWxyZWFkeSBrbm93biwgdGhlIG5ldyB0eXBlIHdpbGwgcmVwbGFjZSB0aGUgb2xkIG9uZS4gV2hlbiB0aGUgdHlwZQogICAgaXMgYWxyZWFkeSBrbm93biB0aGUgZXh0ZW5zaW9uIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2Yga25vd24gZXh0ZW5zaW9ucy4KIAotICAgV2hlbiAqc3RyaWN0KiBpcyBgYFRydWVgYCAodGhlIGRlZmF1bHQpLCB0aGUgbWFwcGluZyB3aWxsIGFkZGVkIHRvIHRoZSBvZmZpY2lhbCBNSU1FCi0gICB0eXBlcywgb3RoZXJ3aXNlIHRvIHRoZSBub24tc3RhbmRhcmQgb25lcy4KKyAgIFdoZW4gKnN0cmljdCogaXMgYGBUcnVlYGAgKHRoZSBkZWZhdWx0KSwgdGhlIG1hcHBpbmcgd2lsbCBiZSBhZGRlZCB0byB0aGUKKyAgIG9mZmljaWFsIE1JTUUgdHlwZXMsIG90aGVyd2lzZSB0byB0aGUgbm9uLXN0YW5kYXJkIG9uZXMuCiAKIAogLi4gZGF0YTo6IGluaXRlZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbW9kdWxlZmluZGVyLnJzdCBiL0RvYy9saWJyYXJ5L21vZHVsZWZpbmRlci5yc3QKaW5kZXggOTdhY2U2MC4uZTg0YTQ5NiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbW9kdWxlZmluZGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tb2R1bGVmaW5kZXIucnN0CkBAIC01Myw3ICs1Myw3IEBACiAgICAuLiBhdHRyaWJ1dGU6OiBtb2R1bGVzCiAKICAgICAgIEEgZGljdGlvbmFyeSBtYXBwaW5nIG1vZHVsZSBuYW1lcyB0byBtb2R1bGVzLiBTZWUKLSAgICAgIDpyZWY6YG1vZHVsZWZpbmRlci1leGFtcGxlYAorICAgICAgOnJlZjpgbW9kdWxlZmluZGVyLWV4YW1wbGVgLgogCiAKIC4uIF9tb2R1bGVmaW5kZXItZXhhbXBsZToKQEAgLTEwNCw3ICsxMDQsNyBAQAogICAgIHJlOiAgX19tb2R1bGVfXyxmaW5kaXRlcixfZXhwYW5kCiAgICAgaXRlcnRvb2xzOgogICAgIF9fbWFpbl9fOiAgcmUsaXRlcnRvb2xzLGJhY29uaGFtZWdncwotICAgIHNyZV9wYXJzZTogIF9fZ2V0c2xpY2VfXyxfUEFUVEVSTkVOREVSUyxTUkVfRkxBR19VTklDT0RFCisgICAgc3JlX3BhcnNlOiAgX1BBVFRFUk5FTkRFUlMsU1JFX0ZMQUdfVU5JQ09ERQogICAgIGFycmF5OgogICAgIHR5cGVzOiAgX19tb2R1bGVfXyxJbnRUeXBlLFR5cGVUeXBlCiAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tb2R1bGVzLnJzdCBiL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0CmluZGV4IGQ4OWVmMTAuLjZiMmE0MGEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0CisrKyBiL0RvYy9saWJyYXJ5L21vZHVsZXMucnN0CkBAIC0xMiw3ICsxMiw2IEBACiAKIC4uIHRvY3RyZWU6OgogCi0gICBpbXAucnN0CiAgICB6aXBpbXBvcnQucnN0CiAgICBwa2d1dGlsLnJzdAogICAgbW9kdWxlZmluZGVyLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbXNpbGliLnJzdCBiL0RvYy9saWJyYXJ5L21zaWxpYi5yc3QKaW5kZXggZDM0NTFjOC4uNDE0NWM4ZSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbXNpbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9tc2lsaWIucnN0CkBAIC0xMjAsOSArMTIwLDkgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBGQ0lDcmVhdGVGaWxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL2Rldm5vdGVzL3dpbnByb2cvZmNpY3JlYXRlLmFzcD5gXwotICAgYFV1aWRDcmVhdGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvcnBjL3JwYy91dWlkY3JlYXRlLmFzcD5gXwotICAgYFV1aWRUb1N0cmluZyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9ycGMvcnBjL3V1aWR0b3N0cmluZy5hc3A+YF8KKyAgIGBGQ0lDcmVhdGVGaWxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL2Rldm5vdGVzL3dpbnByb2cvZmNpY3JlYXRlLmFzcD5gXworICAgYFV1aWRDcmVhdGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvcnBjL3JwYy91dWlkY3JlYXRlLmFzcD5gXworICAgYFV1aWRUb1N0cmluZyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9ycGMvcnBjL3V1aWR0b3N0cmluZy5hc3A+YF8KIAogLi4gX2RhdGFiYXNlLW9iamVjdHM6CiAKQEAgLTE1MSw5ICsxNTEsOSBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYE1TSURhdGFiYXNlT3BlblZpZXcgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaWRhdGFiYXNlb3BlbnZpZXcuYXNwPmBfCi0gICBgTVNJRGF0YWJhc2VDb21taXQgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaWRhdGFiYXNlY29tbWl0LmFzcD5gXwotICAgYE1TSUdldFN1bW1hcnlJbmZvcm1hdGlvbiA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpZ2V0c3VtbWFyeWluZm9ybWF0aW9uLmFzcD5gXworICAgYE1TSURhdGFiYXNlT3BlblZpZXcgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaWRhdGFiYXNlb3BlbnZpZXcuYXNwPmBfCisgICBgTVNJRGF0YWJhc2VDb21taXQgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaWRhdGFiYXNlY29tbWl0LmFzcD5gXworICAgYE1TSUdldFN1bW1hcnlJbmZvcm1hdGlvbiA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpZ2V0c3VtbWFyeWluZm9ybWF0aW9uLmFzcD5gXwogCiAuLiBfdmlldy1vYmplY3RzOgogCkBAIC0xOTksMTEgKzE5OSwxMSBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYE1zaVZpZXdFeGVjdXRlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3ZXhlY3V0ZS5hc3A+YF8KLSAgIGBNU0lWaWV3R2V0Q29sdW1uSW5mbyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld2dldGNvbHVtbmluZm8uYXNwPmBfCi0gICBgTXNpVmlld0ZldGNoIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3ZmV0Y2guYXNwPmBfCi0gICBgTXNpVmlld01vZGlmeSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld21vZGlmeS5hc3A+YF8KLSAgIGBNc2lWaWV3Q2xvc2UgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXZpZXdjbG9zZS5hc3A+YF8KKyAgIGBNc2lWaWV3RXhlY3V0ZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld2V4ZWN1dGUuYXNwPmBfCisgICBgTVNJVmlld0dldENvbHVtbkluZm8gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXZpZXdnZXRjb2x1bW5pbmZvLmFzcD5gXworICAgYE1zaVZpZXdGZXRjaCA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpdmlld2ZldGNoLmFzcD5gXworICAgYE1zaVZpZXdNb2RpZnkgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXZpZXdtb2RpZnkuYXNwPmBfCisgICBgTXNpVmlld0Nsb3NlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2l2aWV3Y2xvc2UuYXNwPmBfCiAKIC4uIF9zdW1tYXJ5LW9iamVjdHM6CiAKQEAgLTI0MywxMCArMjQzLDEwIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgTXNpU3VtbWFyeUluZm9HZXRQcm9wZXJ0eSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpc3VtbWFyeWluZm9nZXRwcm9wZXJ0eS5hc3A+YF8KLSAgIGBNc2lTdW1tYXJ5SW5mb0dldFByb3BlcnR5Q291bnQgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXN1bW1hcnlpbmZvZ2V0cHJvcGVydHljb3VudC5hc3A+YF8KLSAgIGBNc2lTdW1tYXJ5SW5mb1NldFByb3BlcnR5IDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lzdW1tYXJ5aW5mb3NldHByb3BlcnR5LmFzcD5gXwotICAgYE1zaVN1bW1hcnlJbmZvUGVyc2lzdCA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpc3VtbWFyeWluZm9wZXJzaXN0LmFzcD5gXworICAgYE1zaVN1bW1hcnlJbmZvR2V0UHJvcGVydHkgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXN1bW1hcnlpbmZvZ2V0cHJvcGVydHkuYXNwPmBfCisgICBgTXNpU3VtbWFyeUluZm9HZXRQcm9wZXJ0eUNvdW50IDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lzdW1tYXJ5aW5mb2dldHByb3BlcnR5Y291bnQuYXNwPmBfCisgICBgTXNpU3VtbWFyeUluZm9TZXRQcm9wZXJ0eSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpc3VtbWFyeWluZm9zZXRwcm9wZXJ0eS5hc3A+YF8KKyAgIGBNc2lTdW1tYXJ5SW5mb1BlcnNpc3QgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXN1bW1hcnlpbmZvcGVyc2lzdC5hc3A+YF8KIAogLi4gX3JlY29yZC1vYmplY3RzOgogCkBAIC0yOTcsMTEgKzI5NywxMSBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYE1zaVJlY29yZEdldEZpZWxkQ291bnQgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXJlY29yZGdldGZpZWxkY291bnQuYXNwPmBfCi0gICBgTXNpUmVjb3JkU2V0U3RyaW5nIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRzZXRzdHJpbmcuYXNwPmBfCi0gICBgTXNpUmVjb3JkU2V0U3RyZWFtIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRzZXRzdHJlYW0uYXNwPmBfCi0gICBgTXNpUmVjb3JkU2V0SW50ZWdlciA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3Jkc2V0aW50ZWdlci5hc3A+YF8KLSAgIGBNc2lSZWNvcmRDbGVhciA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3JkY2xlYXIuYXNwPmBfCisgICBgTXNpUmVjb3JkR2V0RmllbGRDb3VudCA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvbXNpcmVjb3JkZ2V0ZmllbGRjb3VudC5hc3A+YF8KKyAgIGBNc2lSZWNvcmRTZXRTdHJpbmcgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXJlY29yZHNldHN0cmluZy5hc3A+YF8KKyAgIGBNc2lSZWNvcmRTZXRTdHJlYW0gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL21zaXJlY29yZHNldHN0cmVhbS5hc3A+YF8KKyAgIGBNc2lSZWNvcmRTZXRJbnRlZ2VyIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRzZXRpbnRlZ2VyLmFzcD5gXworICAgYE1zaVJlY29yZENsZWFyIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9tc2lyZWNvcmRjbGVhci5hc3A+YF8KIAogLi4gX21zaS1lcnJvcnM6CiAKQEAgLTM5MywxMCArMzkzLDEwIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgRGlyZWN0b3J5IFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9kaXJlY3RvcnlfdGFibGUuYXNwPmBfCi0gICBgRmlsZSBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmlsZV90YWJsZS5hc3A+YF8KLSAgIGBDb21wb25lbnQgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbXBvbmVudF90YWJsZS5hc3A+YF8KLSAgIGBGZWF0dXJlQ29tcG9uZW50cyBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmVhdHVyZWNvbXBvbmVudHNfdGFibGUuYXNwPmBfCisgICBgRGlyZWN0b3J5IFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9kaXJlY3RvcnlfdGFibGUuYXNwPmBfCisgICBgRmlsZSBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmlsZV90YWJsZS5hc3A+YF8KKyAgIGBDb21wb25lbnQgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbXBvbmVudF90YWJsZS5hc3A+YF8KKyAgIGBGZWF0dXJlQ29tcG9uZW50cyBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmVhdHVyZWNvbXBvbmVudHNfdGFibGUuYXNwPmBfCiAKIC4uIF9mZWF0dXJlczoKIApAQCAtNDIxLDcgKzQyMSw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgRmVhdHVyZSBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5L2RlZmF1bHQuYXNwP3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZmVhdHVyZV90YWJsZS5hc3A+YF8KKyAgIGBGZWF0dXJlIFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnk/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9mZWF0dXJlX3RhYmxlLmFzcD5gXwogCiAuLiBfbXNpLWd1aToKIApAQCAtNTE2LDEzICs1MTYsMTMgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIGBEaWFsb2cgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2RpYWxvZ190YWJsZS5hc3A+YF8KLSAgIGBDb250cm9sIFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9jb250cm9sX3RhYmxlLmFzcD5gXwotICAgYENvbnRyb2wgVHlwZXMgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xzLmFzcD5gXwotICAgYENvbnRyb2xDb25kaXRpb24gVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xjb25kaXRpb25fdGFibGUuYXNwPmBfCi0gICBgQ29udHJvbEV2ZW50IFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9jb250cm9sZXZlbnRfdGFibGUuYXNwPmBfCi0gICBgRXZlbnRNYXBwaW5nIFRhYmxlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZGVmYXVsdC5hc3A/dXJsPS9saWJyYXJ5L2VuLXVzL21zaS9zZXR1cC9ldmVudG1hcHBpbmdfdGFibGUuYXNwPmBfCi0gICBgUmFkaW9CdXR0b24gVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9kZWZhdWx0LmFzcD91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL3JhZGlvYnV0dG9uX3RhYmxlLmFzcD5gXworICAgYERpYWxvZyBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvZGlhbG9nX3RhYmxlLmFzcD5gXworICAgYENvbnRyb2wgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xfdGFibGUuYXNwPmBfCisgICBgQ29udHJvbCBUeXBlcyA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvY29udHJvbHMuYXNwPmBfCisgICBgQ29udHJvbENvbmRpdGlvbiBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvY29udHJvbGNvbmRpdGlvbl90YWJsZS5hc3A+YF8KKyAgIGBDb250cm9sRXZlbnQgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2NvbnRyb2xldmVudF90YWJsZS5hc3A+YF8KKyAgIGBFdmVudE1hcHBpbmcgVGFibGUgPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeT91cmw9L2xpYnJhcnkvZW4tdXMvbXNpL3NldHVwL2V2ZW50bWFwcGluZ190YWJsZS5hc3A+YF8KKyAgIGBSYWRpb0J1dHRvbiBUYWJsZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9saWJyYXJ5P3VybD0vbGlicmFyeS9lbi11cy9tc2kvc2V0dXAvcmFkaW9idXR0b25fdGFibGUuYXNwPmBfCiAKIC4uIF9tc2ktdGFibGVzOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tc3ZjcnQucnN0IGIvRG9jL2xpYnJhcnkvbXN2Y3J0LnJzdAppbmRleCA5ZDIzNzIwLi5mYWRhZjA1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tc3ZjcnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L21zdmNydC5yc3QKQEAgLTE4LDcgKzE4LDcgQEAKIFRoZSBtb2R1bGUgaW1wbGVtZW50cyBib3RoIHRoZSBub3JtYWwgYW5kIHdpZGUgY2hhciB2YXJpYW50cyBvZiB0aGUgY29uc29sZSBJL08KIGFwaS4gVGhlIG5vcm1hbCBBUEkgZGVhbHMgb25seSB3aXRoIEFTQ0lJIGNoYXJhY3RlcnMgYW5kIGlzIG9mIGxpbWl0ZWQgdXNlCiBmb3IgaW50ZXJuYXRpb25hbGl6ZWQgYXBwbGljYXRpb25zLiBUaGUgd2lkZSBjaGFyIEFQSSBzaG91bGQgYmUgdXNlZCB3aGVyZQotZXZlciBwb3NzaWJsZQorZXZlciBwb3NzaWJsZS4KIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgIE9wZXJhdGlvbnMgaW4gdGhpcyBtb2R1bGUgbm93IHJhaXNlIDpleGM6YE9TRXJyb3JgIHdoZXJlIDpleGM6YElPRXJyb3JgCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0IGIvRG9jL2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLnJzdAppbmRleCA1ZjUwY2YxLi5mN2RjMTFiIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcucnN0CisrKyBiL0RvYy9saWJyYXJ5L211bHRpcHJvY2Vzc2luZy5yc3QKQEAgLTE2LDQxICsxNiwyNyBAQAogbGV2ZXJhZ2UgbXVsdGlwbGUgcHJvY2Vzc29ycyBvbiBhIGdpdmVuIG1hY2hpbmUuICBJdCBydW5zIG9uIGJvdGggVW5peCBhbmQKIFdpbmRvd3MuCiAKLS4uIG5vdGU6OgorVGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlIGFsc28gaW50cm9kdWNlcyBBUElzIHdoaWNoIGRvIG5vdCBoYXZlCithbmFsb2dzIGluIHRoZSA6bW9kOmB0aHJlYWRpbmdgIG1vZHVsZS4gIEEgcHJpbWUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZQorOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLnBvb2wuUG9vbGAgb2JqZWN0IHdoaWNoIG9mZmVycyBhIGNvbnZlbmllbnQgbWVhbnMgb2YKK3BhcmFsbGVsaXppbmcgdGhlIGV4ZWN1dGlvbiBvZiBhIGZ1bmN0aW9uIGFjcm9zcyBtdWx0aXBsZSBpbnB1dCB2YWx1ZXMsCitkaXN0cmlidXRpbmcgdGhlIGlucHV0IGRhdGEgYWNyb3NzIHByb2Nlc3NlcyAoZGF0YSBwYXJhbGxlbGlzbSkuICBUaGUgZm9sbG93aW5nCitleGFtcGxlIGRlbW9uc3RyYXRlcyB0aGUgY29tbW9uIHByYWN0aWNlIG9mIGRlZmluaW5nIHN1Y2ggZnVuY3Rpb25zIGluIGEgbW9kdWxlCitzbyB0aGF0IGNoaWxkIHByb2Nlc3NlcyBjYW4gc3VjY2Vzc2Z1bGx5IGltcG9ydCB0aGF0IG1vZHVsZS4gIFRoaXMgYmFzaWMgZXhhbXBsZQorb2YgZGF0YSBwYXJhbGxlbGlzbSB1c2luZyA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29sYCwgOjoKIAotICAgIFNvbWUgb2YgdGhpcyBwYWNrYWdlJ3MgZnVuY3Rpb25hbGl0eSByZXF1aXJlcyBhIGZ1bmN0aW9uaW5nIHNoYXJlZCBzZW1hcGhvcmUKLSAgICBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgaG9zdCBvcGVyYXRpbmcgc3lzdGVtLiBXaXRob3V0IG9uZSwgdGhlCi0gICAgOm1vZDpgbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplYCBtb2R1bGUgd2lsbCBiZSBkaXNhYmxlZCwgYW5kIGF0dGVtcHRzIHRvCi0gICAgaW1wb3J0IGl0IHdpbGwgcmVzdWx0IGluIGFuIDpleGM6YEltcG9ydEVycm9yYC4gU2VlCi0gICAgOmlzc3VlOmAzNzcwYCBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KKyAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCiAKLS4uIG5vdGU6OgorICAgZGVmIGYoeCk6CisgICAgICAgcmV0dXJuIHgqeAogCi0gICAgRnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhpcyBwYWNrYWdlIHJlcXVpcmVzIHRoYXQgdGhlIGBgX19tYWluX19gYCBtb2R1bGUgYmUKLSAgICBpbXBvcnRhYmxlIGJ5IHRoZSBjaGlsZHJlbi4gVGhpcyBpcyBjb3ZlcmVkIGluIDpyZWY6YG11bHRpcHJvY2Vzc2luZy1wcm9ncmFtbWluZ2AKLSAgICBob3dldmVyIGl0IGlzIHdvcnRoIHBvaW50aW5nIG91dCBoZXJlLiBUaGlzIG1lYW5zIHRoYXQgc29tZSBleGFtcGxlcywgc3VjaAotICAgIGFzIHRoZSA6Y2xhc3M6YG11bHRpcHJvY2Vzc2luZy5wb29sLlBvb2xgIGV4YW1wbGVzIHdpbGwgbm90IHdvcmsgaW4gdGhlCi0gICAgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuIEZvciBleGFtcGxlOjoKKyAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgd2l0aCBQb29sKDUpIGFzIHA6CisgICAgICAgICAgIHByaW50KHAubWFwKGYsIFsxLCAyLCAzXSkpCiAKLSAgICAgICAgPj4+IGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCi0gICAgICAgID4+PiBwID0gUG9vbCg1KQotICAgICAgICA+Pj4gZGVmIGYoeCk6Ci0gICAgICAgIC4uLiAgICAgcmV0dXJuIHgqeAotICAgICAgICAuLi4KLSAgICAgICAgPj4+IHAubWFwKGYsIFsxLDIsM10pCi0gICAgICAgIFByb2Nlc3MgUG9vbFdvcmtlci0xOgotICAgICAgICBQcm9jZXNzIFBvb2xXb3JrZXItMjoKLSAgICAgICAgUHJvY2VzcyBQb29sV29ya2VyLTM6Ci0gICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLSAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6Ci0gICAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnZicKLSAgICAgICAgQXR0cmlidXRlRXJyb3I6ICdtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdmJwotICAgICAgICBBdHRyaWJ1dGVFcnJvcjogJ21vZHVsZScgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2YnCit3aWxsIHByaW50IHRvIHN0YW5kYXJkIG91dHB1dCA6OgogCi0gICAgKElmIHlvdSB0cnkgdGhpcyBpdCB3aWxsIGFjdHVhbGx5IG91dHB1dCB0aHJlZSBmdWxsIHRyYWNlYmFja3MKLSAgICBpbnRlcmxlYXZlZCBpbiBhIHNlbWktcmFuZG9tIGZhc2hpb24sIGFuZCB0aGVuIHlvdSBtYXkgaGF2ZSB0bwotICAgIHN0b3AgdGhlIG1hc3RlciBwcm9jZXNzIHNvbWVob3cuKQorICAgWzEsIDQsIDldCiAKIAogVGhlIDpjbGFzczpgUHJvY2Vzc2AgY2xhc3MKQEAgLTc5LDggKzY1LDcgQEAKICAgICBkZWYgaW5mbyh0aXRsZSk6CiAgICAgICAgIHByaW50KHRpdGxlKQogICAgICAgICBwcmludCgnbW9kdWxlIG5hbWU6JywgX19uYW1lX18pCi0gICAgICAgIGlmIGhhc2F0dHIob3MsICdnZXRwcGlkJyk6ICAjIG9ubHkgYXZhaWxhYmxlIG9uIFVuaXgKLSAgICAgICAgICAgIHByaW50KCdwYXJlbnQgcHJvY2VzczonLCBvcy5nZXRwcGlkKCkpCisgICAgICAgIHByaW50KCdwYXJlbnQgcHJvY2VzczonLCBvcy5nZXRwcGlkKCkpCiAgICAgICAgIHByaW50KCdwcm9jZXNzIGlkOicsIG9zLmdldHBpZCgpKQogCiAgICAgZGVmIGYobmFtZSk6CkBAIC05MywxMSArNzgsMTEyIEBACiAgICAgICAgIHAuc3RhcnQoKQogICAgICAgICBwLmpvaW4oKQogCi1Gb3IgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IChvbiBXaW5kb3dzKSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgcGFydCBpcworRm9yIGFuIGV4cGxhbmF0aW9uIG9mIHdoeSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgcGFydCBpcwogbmVjZXNzYXJ5LCBzZWUgOnJlZjpgbXVsdGlwcm9jZXNzaW5nLXByb2dyYW1taW5nYC4KIAogCiAKK0NvbnRleHRzIGFuZCBzdGFydCBtZXRob2RzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBfbXVsdGlwcm9jZXNzaW5nLXN0YXJ0LW1ldGhvZHM6CisKK0RlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0sIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agc3VwcG9ydHMgdGhyZWUgd2F5cwordG8gc3RhcnQgYSBwcm9jZXNzLiAgVGhlc2UgKnN0YXJ0IG1ldGhvZHMqIGFyZQorCisgICpzcGF3bioKKyAgICBUaGUgcGFyZW50IHByb2Nlc3Mgc3RhcnRzIGEgZnJlc2ggcHl0aG9uIGludGVycHJldGVyIHByb2Nlc3MuICBUaGUKKyAgICBjaGlsZCBwcm9jZXNzIHdpbGwgb25seSBpbmhlcml0IHRob3NlIHJlc291cmNlcyBuZWNlc3NhcnkgdG8gcnVuCisgICAgdGhlIHByb2Nlc3Mgb2JqZWN0cyA6bWV0aDpgflByb2Nlc3MucnVuYCBtZXRob2QuICBJbiBwYXJ0aWN1bGFyLAorICAgIHVubmVjZXNzYXJ5IGZpbGUgZGVzY3JpcHRvcnMgYW5kIGhhbmRsZXMgZnJvbSB0aGUgcGFyZW50IHByb2Nlc3MKKyAgICB3aWxsIG5vdCBiZSBpbmhlcml0ZWQuICBTdGFydGluZyBhIHByb2Nlc3MgdXNpbmcgdGhpcyBtZXRob2QgaXMKKyAgICByYXRoZXIgc2xvdyBjb21wYXJlZCB0byB1c2luZyAqZm9yayogb3IgKmZvcmtzZXJ2ZXIqLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuICBUaGUgZGVmYXVsdCBvbiBXaW5kb3dzLgorCisgICpmb3JrKgorICAgIFRoZSBwYXJlbnQgcHJvY2VzcyB1c2VzIDpmdW5jOmBvcy5mb3JrYCB0byBmb3JrIHRoZSBQeXRob24KKyAgICBpbnRlcnByZXRlci4gIFRoZSBjaGlsZCBwcm9jZXNzLCB3aGVuIGl0IGJlZ2lucywgaXMgZWZmZWN0aXZlbHkKKyAgICBpZGVudGljYWwgdG8gdGhlIHBhcmVudCBwcm9jZXNzLiAgQWxsIHJlc291cmNlcyBvZiB0aGUgcGFyZW50IGFyZQorICAgIGluaGVyaXRlZCBieSB0aGUgY2hpbGQgcHJvY2Vzcy4gIE5vdGUgdGhhdCBzYWZlbHkgZm9ya2luZyBhCisgICAgbXVsdGl0aHJlYWRlZCBwcm9jZXNzIGlzIHByb2JsZW1hdGljLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggb25seS4gIFRoZSBkZWZhdWx0IG9uIFVuaXguCisKKyAgKmZvcmtzZXJ2ZXIqCisgICAgV2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgYW5kIHNlbGVjdHMgdGhlICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2QsCisgICAgYSBzZXJ2ZXIgcHJvY2VzcyBpcyBzdGFydGVkLiAgRnJvbSB0aGVuIG9uLCB3aGVuZXZlciBhIG5ldyBwcm9jZXNzCisgICAgaXMgbmVlZGVkLCB0aGUgcGFyZW50IHByb2Nlc3MgY29ubmVjdHMgdG8gdGhlIHNlcnZlciBhbmQgcmVxdWVzdHMKKyAgICB0aGF0IGl0IGZvcmsgYSBuZXcgcHJvY2Vzcy4gIFRoZSBmb3JrIHNlcnZlciBwcm9jZXNzIGlzIHNpbmdsZQorICAgIHRocmVhZGVkIHNvIGl0IGlzIHNhZmUgZm9yIGl0IHRvIHVzZSA6ZnVuYzpgb3MuZm9ya2AuICBObworICAgIHVubmVjZXNzYXJ5IHJlc291cmNlcyBhcmUgaW5oZXJpdGVkLgorCisgICAgQXZhaWxhYmxlIG9uIFVuaXggcGxhdGZvcm1zIHdoaWNoIHN1cHBvcnQgcGFzc2luZyBmaWxlIGRlc2NyaXB0b3JzCisgICAgb3ZlciBVbml4IHBpcGVzLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgKnNwYXduKiBhZGRlZCBvbiBhbGwgdW5peCBwbGF0Zm9ybXMsIGFuZCAqZm9ya3NlcnZlciogYWRkZWQgZm9yCisgICBzb21lIHVuaXggcGxhdGZvcm1zLgorICAgQ2hpbGQgcHJvY2Vzc2VzIG5vIGxvbmdlciBpbmhlcml0IGFsbCBvZiB0aGUgcGFyZW50cyBpbmhlcml0YWJsZQorICAgaGFuZGxlcyBvbiBXaW5kb3dzLgorCitPbiBVbml4IHVzaW5nIHRoZSAqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzIHdpbGwgYWxzbworc3RhcnQgYSAqc2VtYXBob3JlIHRyYWNrZXIqIHByb2Nlc3Mgd2hpY2ggdHJhY2tzIHRoZSB1bmxpbmtlZCBuYW1lZAorc2VtYXBob3JlcyBjcmVhdGVkIGJ5IHByb2Nlc3NlcyBvZiB0aGUgcHJvZ3JhbS4gIFdoZW4gYWxsIHByb2Nlc3NlcworaGF2ZSBleGl0ZWQgdGhlIHNlbWFwaG9yZSB0cmFja2VyIHVubGlua3MgYW55IHJlbWFpbmluZyBzZW1hcGhvcmVzLgorVXN1YWxseSB0aGVyZSBzaG91bGQgYmUgbm9uZSwgYnV0IGlmIGEgcHJvY2VzcyB3YXMga2lsbGVkIGJ5IGEgc2lnbmFsCit0aGVyZSBtYXkgc29tZSAibGVha2VkIiBzZW1hcGhvcmVzLiAgKFVubGlua2luZyB0aGUgbmFtZWQgc2VtYXBob3JlcworaXMgYSBzZXJpb3VzIG1hdHRlciBzaW5jZSB0aGUgc3lzdGVtIGFsbG93cyBvbmx5IGEgbGltaXRlZCBudW1iZXIsIGFuZAordGhleSB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IHVubGlua2VkIHVudGlsIHRoZSBuZXh0IHJlYm9vdC4pCisKK1RvIHNlbGVjdCBhIHN0YXJ0IG1ldGhvZCB5b3UgdXNlIHRoZSA6ZnVuYzpgc2V0X3N0YXJ0X21ldGhvZGAgaW4KK3RoZSBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXydgYCBjbGF1c2Ugb2YgdGhlIG1haW4gbW9kdWxlLiAgRm9yCitleGFtcGxlOjoKKworICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgYXMgbXAKKworICAgICAgIGRlZiBmb28ocSk6CisgICAgICAgICAgIHEucHV0KCdoZWxsbycpCisKKyAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICBtcC5zZXRfc3RhcnRfbWV0aG9kKCdzcGF3bicpCisgICAgICAgICAgIHEgPSBtcC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBtcC5Qcm9jZXNzKHRhcmdldD1mb28sIGFyZ3M9KHEsKSkKKyAgICAgICAgICAgcC5zdGFydCgpCisgICAgICAgICAgIHByaW50KHEuZ2V0KCkpCisgICAgICAgICAgIHAuam9pbigpCisKKzpmdW5jOmBzZXRfc3RhcnRfbWV0aG9kYCBzaG91bGQgbm90IGJlIHVzZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlCitwcm9ncmFtLgorCitBbHRlcm5hdGl2ZWx5LCB5b3UgY2FuIHVzZSA6ZnVuYzpgZ2V0X2NvbnRleHRgIHRvIG9idGFpbiBhIGNvbnRleHQKK29iamVjdC4gIENvbnRleHQgb2JqZWN0cyBoYXZlIHRoZSBzYW1lIEFQSSBhcyB0aGUgbXVsdGlwcm9jZXNzaW5nCittb2R1bGUsIGFuZCBhbGxvdyBvbmUgdG8gdXNlIG11bHRpcGxlIHN0YXJ0IG1ldGhvZHMgaW4gdGhlIHNhbWUKK3Byb2dyYW0uIDo6CisKKyAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nIGFzIG1wCisKKyAgICAgICBkZWYgZm9vKHEpOgorICAgICAgICAgICBxLnB1dCgnaGVsbG8nKQorCisgICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICAgICAgICAgY3R4ID0gbXAuZ2V0X2NvbnRleHQoJ3NwYXduJykKKyAgICAgICAgICAgcSA9IGN0eC5RdWV1ZSgpCisgICAgICAgICAgIHAgPSBjdHguUHJvY2Vzcyh0YXJnZXQ9Zm9vLCBhcmdzPShxLCkpCisgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICBwcmludChxLmdldCgpKQorICAgICAgICAgICBwLmpvaW4oKQorCitOb3RlIHRoYXQgb2JqZWN0cyByZWxhdGVkIHRvIG9uZSBjb250ZXh0IG1heSBub3QgYmUgY29tcGF0aWJsZSB3aXRoCitwcm9jZXNzZXMgZm9yIGEgZGlmZmVyZW50IGNvbnRleHQuICBJbiBwYXJ0aWN1bGFyLCBsb2NrcyBjcmVhdGVkIHVzaW5nCit0aGUgKmZvcmsqIGNvbnRleHQgY2Fubm90IGJlIHBhc3NlZCB0byBhIHByb2Nlc3NlcyBzdGFydGVkIHVzaW5nIHRoZQorKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcy4KKworQSBsaWJyYXJ5IHdoaWNoIHdhbnRzIHRvIHVzZSBhIHBhcnRpY3VsYXIgc3RhcnQgbWV0aG9kIHNob3VsZCBwcm9iYWJseQordXNlIDpmdW5jOmBnZXRfY29udGV4dGAgdG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCB0aGUgY2hvaWNlIG9mIHRoZQorbGlicmFyeSB1c2VyLgorCisKIEV4Y2hhbmdpbmcgb2JqZWN0cyBiZXR3ZWVuIHByb2Nlc3Nlcwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKQEAgLTE2MSw4ICsyNDcsMTAgQEAKIAogICAgZGVmIGYobCwgaSk6CiAgICAgICAgbC5hY3F1aXJlKCkKLSAgICAgICBwcmludCgnaGVsbG8gd29ybGQnLCBpKQotICAgICAgIGwucmVsZWFzZSgpCisgICAgICAgdHJ5OgorICAgICAgICAgICBwcmludCgnaGVsbG8gd29ybGQnLCBpKQorICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgIGwucmVsZWFzZSgpCiAKICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgbG9jayA9IExvY2soKQpAQCAtMjc0LDE5ICszNjIsNjMgQEAKIEZvciBleGFtcGxlOjoKIAogICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wKKyAgIGZyb20gdGltZSBpbXBvcnQgc2xlZXAKIAogICAgZGVmIGYoeCk6CiAgICAgICAgcmV0dXJuIHgqeAogCiAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgIHdpdGggUG9vbChwcm9jZXNzZXM9NCkgYXMgcG9vbDogICAgICAgICMgc3RhcnQgNCB3b3JrZXIgcHJvY2Vzc2VzCi0gICAgICAgICAgIHJlc3VsdCA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgWzEwXSkgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5Ci0gICAgICAgICAgIHByaW50KHJlc3VsdC5nZXQodGltZW91dD0xKSkgICAgICAgIyBwcmludHMgIjEwMCIgdW5sZXNzIHlvdXIgY29tcHV0ZXIgaXMgKnZlcnkqIHNsb3cKLSAgICAgICAgICAgcHJpbnQocG9vbC5tYXAoZiwgcmFuZ2UoMTApKSkgICAgICAjIHByaW50cyAiWzAsIDEsIDQsLi4uLCA4MV0iCisgICAgICAgIyBzdGFydCA0IHdvcmtlciBwcm9jZXNzZXMKKyAgICAgICB3aXRoIFBvb2wocHJvY2Vzc2VzPTQpIGFzIHBvb2w6CisKKyAgICAgICAgICAgIyBwcmludCAiWzAsIDEsIDQsLi4uLCA4MV0iCisgICAgICAgICAgIHByaW50KHBvb2wubWFwKGYsIHJhbmdlKDEwKSkpCisKKyAgICAgICAgICAgIyBwcmludCBzYW1lIG51bWJlcnMgaW4gYXJiaXRyYXJ5IG9yZGVyCisgICAgICAgICAgIGZvciBpIGluIHBvb2wuaW1hcF91bm9yZGVyZWQoZiwgcmFuZ2UoMTApKToKKyAgICAgICAgICAgICAgIHByaW50KGkpCisKKyAgICAgICAgICAgIyBldmFsdWF0ZSAiZigxMCkiIGFzeW5jaHJvbm91c2x5CisgICAgICAgICAgIHJlcyA9IHBvb2wuYXBwbHlfYXN5bmMoZiwgWzEwXSkKKyAgICAgICAgICAgcHJpbnQocmVzLmdldCh0aW1lb3V0PTEpKSAgICAgICAgICAgICAjIHByaW50cyAiMTAwIgorCisgICAgICAgICAgICMgbWFrZSB3b3JrZXIgc2xlZXAgZm9yIDEwIHNlY3MKKyAgICAgICAgICAgcmVzID0gcG9vbC5hcHBseV9hc3luYyhzbGVlcCwgWzEwXSkKKyAgICAgICAgICAgcHJpbnQocmVzLmdldCh0aW1lb3V0PTEpKSAgICAgICAgICAgICAjIHJhaXNlcyBtdWx0aXByb2Nlc3NpbmcuVGltZW91dEVycm9yCisKKyAgICAgICAjIGV4aXRpbmcgdGhlICd3aXRoJy1ibG9jayBoYXMgc3RvcHBlZCB0aGUgcG9vbAogCiBOb3RlIHRoYXQgdGhlIG1ldGhvZHMgb2YgYSBwb29sIHNob3VsZCBvbmx5IGV2ZXIgYmUgdXNlZCBieSB0aGUKIHByb2Nlc3Mgd2hpY2ggY3JlYXRlZCBpdC4KIAorLi4gbm90ZTo6CisKKyAgIEZ1bmN0aW9uYWxpdHkgd2l0aGluIHRoaXMgcGFja2FnZSByZXF1aXJlcyB0aGF0IHRoZSBgYF9fbWFpbl9fYGAgbW9kdWxlIGJlCisgICBpbXBvcnRhYmxlIGJ5IHRoZSBjaGlsZHJlbi4gVGhpcyBpcyBjb3ZlcmVkIGluIDpyZWY6YG11bHRpcHJvY2Vzc2luZy1wcm9ncmFtbWluZ2AKKyAgIGhvd2V2ZXIgaXQgaXMgd29ydGggcG9pbnRpbmcgb3V0IGhlcmUuIFRoaXMgbWVhbnMgdGhhdCBzb21lIGV4YW1wbGVzLCBzdWNoCisgICBhcyB0aGUgOmNsYXNzOmBtdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29sYCBleGFtcGxlcyB3aWxsIG5vdCB3b3JrIGluIHRoZQorICAgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQb29sCisgICAgICA+Pj4gcCA9IFBvb2woNSkKKyAgICAgID4+PiBkZWYgZih4KToKKyAgICAgIC4uLiAgICAgcmV0dXJuIHgqeAorICAgICAgLi4uCisgICAgICA+Pj4gcC5tYXAoZiwgWzEsMiwzXSkKKyAgICAgIFByb2Nlc3MgUG9vbFdvcmtlci0xOgorICAgICAgUHJvY2VzcyBQb29sV29ya2VyLTI6CisgICAgICBQcm9jZXNzIFBvb2xXb3JrZXItMzoKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnZicKKyAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnZicKKyAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnZicKKworICAgKElmIHlvdSB0cnkgdGhpcyBpdCB3aWxsIGFjdHVhbGx5IG91dHB1dCB0aHJlZSBmdWxsIHRyYWNlYmFja3MKKyAgIGludGVybGVhdmVkIGluIGEgc2VtaS1yYW5kb20gZmFzaGlvbiwgYW5kIHRoZW4geW91IG1heSBoYXZlIHRvCisgICBzdG9wIHRoZSBtYXN0ZXIgcHJvY2VzcyBzb21laG93LikKKwogCiBSZWZlcmVuY2UKIC0tLS0tLS0tLQpAQCAtNjY3LDYgKzc5OSwxNCBAQAogICAgICAgaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIHRvIGZsdXNoIGVucXVldWVkIGRhdGEgdG8gdGhlCiAgICAgICB1bmRlcmx5aW5nIHBpcGUsIGFuZCB5b3UgZG9uJ3QgY2FyZSBhYm91dCBsb3N0IGRhdGEuCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGlzIGNsYXNzJ3MgZnVuY3Rpb25hbGl0eSByZXF1aXJlcyBhIGZ1bmN0aW9uaW5nIHNoYXJlZCBzZW1hcGhvcmUKKyAgICAgIGltcGxlbWVudGF0aW9uIG9uIHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uIFdpdGhvdXQgb25lLCB0aGUKKyAgICAgIGZ1bmN0aW9uYWxpdHkgaW4gdGhpcyBjbGFzcyB3aWxsIGJlIGRpc2FibGVkLCBhbmQgYXR0ZW1wdHMgdG8KKyAgICAgIGluc3RhbnRpYXRlIGEgOmNsYXNzOmBRdWV1ZWAgd2lsbCByZXN1bHQgaW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgLiBTZWUKKyAgICAgIDppc3N1ZTpgMzc3MGAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uICBUaGUgc2FtZSBob2xkcyB0cnVlIGZvciBhbnkKKyAgICAgIG9mIHRoZSBzcGVjaWFsaXplZCBxdWV1ZSB0eXBlcyBsaXN0ZWQgYmVsb3cuCiAKIC4uIGNsYXNzOjogU2ltcGxlUXVldWUoKQogCkBAIC03MjMsNyArODYzLDcgQEAKIAogICAgUmV0dXJuIGxpc3Qgb2YgYWxsIGxpdmUgY2hpbGRyZW4gb2YgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KIAotICAgQ2FsbGluZyB0aGlzIGhhcyB0aGUgc2lkZSBhZmZlY3Qgb2YgImpvaW5pbmciIGFueSBwcm9jZXNzZXMgd2hpY2ggaGF2ZQorICAgQ2FsbGluZyB0aGlzIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgImpvaW5pbmciIGFueSBwcm9jZXNzZXMgd2hpY2ggaGF2ZQogICAgYWxyZWFkeSBmaW5pc2hlZC4KIAogLi4gZnVuY3Rpb246OiBjcHVfY291bnQoKQpAQCAtNzMxLDYgKzg3MSw5IEBACiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uICBNYXkgcmFpc2UKICAgIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgLgogCisgICAuLiBzZWVhbHNvOjoKKyAgICAgIDpmdW5jOmBvcy5jcHVfY291bnRgCisKIC4uIGZ1bmN0aW9uOjogY3VycmVudF9wcm9jZXNzKCkKIAogICAgUmV0dXJuIHRoZSA6Y2xhc3M6YFByb2Nlc3NgIG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHByb2Nlc3MuCkBAIC03NjEsNiArOTA0LDQzIEBACiAgICBJZiB0aGUgbW9kdWxlIGlzIGJlaW5nIHJ1biBub3JtYWxseSBieSB0aGUgUHl0aG9uIGludGVycHJldGVyIHRoZW4KICAgIDpmdW5jOmBmcmVlemVfc3VwcG9ydGAgaGFzIG5vIGVmZmVjdC4KIAorLi4gZnVuY3Rpb246OiBnZXRfYWxsX3N0YXJ0X21ldGhvZHMoKQorCisgICBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgc3VwcG9ydGVkIHN0YXJ0IG1ldGhvZHMsIHRoZSBmaXJzdCBvZiB3aGljaAorICAgaXMgdGhlIGRlZmF1bHQuICBUaGUgcG9zc2libGUgc3RhcnQgbWV0aG9kcyBhcmUgYGAnZm9yaydgYCwKKyAgIGBgJ3NwYXduJ2BgIGFuZCBgYCdmb3Jrc2VydmVyJ2BgLiAgT24gV2luZG93cyBvbmx5IGBgJ3NwYXduJ2BgIGlzCisgICBhdmFpbGFibGUuICBPbiBVbml4IGBgJ2ZvcmsnYGAgYW5kIGBgJ3NwYXduJ2BgIGFyZSBhbHdheXMKKyAgIHN1cHBvcnRlZCwgd2l0aCBgYCdmb3JrJ2BgIGJlaW5nIHRoZSBkZWZhdWx0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfY29udGV4dChtZXRob2Q9Tm9uZSkKKworICAgUmV0dXJuIGEgY29udGV4dCBvYmplY3Qgd2hpY2ggaGFzIHRoZSBzYW1lIGF0dHJpYnV0ZXMgYXMgdGhlCisgICA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG1vZHVsZS4KKworICAgSWYgKm1ldGhvZCogaXMgKk5vbmUqIHRoZW4gdGhlIGRlZmF1bHQgY29udGV4dCBpcyByZXR1cm5lZC4KKyAgIE90aGVyd2lzZSAqbWV0aG9kKiBzaG91bGQgYmUgYGAnZm9yaydgYCwgYGAnc3Bhd24nYGAsCisgICBgYCdmb3Jrc2VydmVyJ2BgLiAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIGlmIHRoZSBzcGVjaWZpZWQKKyAgIHN0YXJ0IG1ldGhvZCBpcyBub3QgYXZhaWxhYmxlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBnZXRfc3RhcnRfbWV0aG9kKGFsbG93X25vbmU9RmFsc2UpCisKKyAgIFJldHVybiB0aGUgbmFtZSBvZiBzdGFydCBtZXRob2QgdXNlZCBmb3Igc3RhcnRpbmcgcHJvY2Vzc2VzLgorCisgICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqIGlzIGZhbHNlLAorICAgdGhlbiB0aGUgc3RhcnQgbWV0aG9kIGlzIGZpeGVkIHRvIHRoZSBkZWZhdWx0IGFuZCB0aGUgbmFtZSBpcworICAgcmV0dXJuZWQuICBJZiB0aGUgc3RhcnQgbWV0aG9kIGhhcyBub3QgYmVlbiBmaXhlZCBhbmQgKmFsbG93X25vbmUqCisgICBpcyB0cnVlIHRoZW4gKk5vbmUqIGlzIHJldHVybmVkLgorCisgICBUaGUgcmV0dXJuIHZhbHVlIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCwgYGAnZm9ya3NlcnZlcidgYAorICAgb3IgKk5vbmUqLiAgYGAnZm9yaydgYCBpcyB0aGUgZGVmYXVsdCBvbiBVbml4LCB3aGlsZSBgYCdzcGF3bidgYCBpcworICAgdGhlIGRlZmF1bHQgb24gV2luZG93cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIGZ1bmN0aW9uOjogc2V0X2V4ZWN1dGFibGUoKQogCiAgICBTZXRzIHRoZSBwYXRoIG9mIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgdG8gdXNlIHdoZW4gc3RhcnRpbmcgYSBjaGlsZCBwcm9jZXNzLgpAQCAtNzY5LDggKzk0OSwyMSBAQAogCiAgICAgICBzZXRfZXhlY3V0YWJsZShvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9udy5leGUnKSkKIAotICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuICAoV2luZG93cyBvbmx5KQorICAgYmVmb3JlIHRoZXkgY2FuIGNyZWF0ZSBjaGlsZCBwcm9jZXNzZXMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBOb3cgc3VwcG9ydGVkIG9uIFVuaXggd2hlbiB0aGUgYGAnc3Bhd24nYGAgc3RhcnQgbWV0aG9kIGlzIHVzZWQuCisKKy4uIGZ1bmN0aW9uOjogc2V0X3N0YXJ0X21ldGhvZChtZXRob2QpCisKKyAgIFNldCB0aGUgbWV0aG9kIHdoaWNoIHNob3VsZCBiZSB1c2VkIHRvIHN0YXJ0IGNoaWxkIHByb2Nlc3Nlcy4KKyAgICptZXRob2QqIGNhbiBiZSBgYCdmb3JrJ2BgLCBgYCdzcGF3bidgYCBvciBgYCdmb3Jrc2VydmVyJ2BgLgorCisgICBOb3RlIHRoYXQgdGhpcyBzaG91bGQgYmUgY2FsbGVkIGF0IG1vc3Qgb25jZSwgYW5kIGl0IHNob3VsZCBiZQorICAgcHJvdGVjdGVkIGluc2lkZSB0aGUgYGBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nYGAgY2xhdXNlIG9mIHRoZQorICAgbWFpbiBtb2R1bGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBub3RlOjoKIApAQCAtODQ4LDcgKzEwNDEsNyBAQAogICAgICAgcmVhZGFibGUuCiAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICAgICBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gcmFpc2UgYSA6ZXhjOmBJT0Vycm9yYCwgd2hpY2ggaXMgbm93IGFuCisgICAgICAgICBUaGlzIGZ1bmN0aW9uIHVzZWQgdG8gcmFpc2UgOmV4YzpgSU9FcnJvcmAsIHdoaWNoIGlzIG5vdyBhbgogICAgICAgICAgYWxpYXMgb2YgOmV4YzpgT1NFcnJvcmAuCiAKIApAQCAtODc0LDcgKzEwNjcsNyBAQAogICAgICAgdXNpbmcgOm1ldGg6YENvbm5lY3Rpb24uc2VuZGAgYW5kIDptZXRoOmBDb25uZWN0aW9uLnJlY3ZgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKLSAgICAgIENvbm5lY3Rpb24gb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIC0tIHNlZQorICAgICAgQ29ubmVjdGlvbiBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgLS0gc2VlCiAgICAgICA6cmVmOmB0eXBlY29udGV4dG1hbmFnZXJgLiAgOm1ldGg6YH5jb250ZXh0bWFuYWdlci5fX2VudGVyX19gIHJldHVybnMgdGhlCiAgICAgICBjb25uZWN0aW9uIG9iamVjdCwgYW5kIDptZXRoOmB+Y29udGV4dG1hbmFnZXIuX19leGl0X19gIGNhbGxzIDptZXRoOmBjbG9zZWAuCiAKQEAgLTkzNiwxMCArMTEyOSwxNSBAQAogCiAuLiBjbGFzczo6IEJvdW5kZWRTZW1hcGhvcmUoW3ZhbHVlXSkKIAotICAgQSBib3VuZGVkIHNlbWFwaG9yZSBvYmplY3Q6IGEgY2xvbmUgb2YgOmNsYXNzOmB0aHJlYWRpbmcuQm91bmRlZFNlbWFwaG9yZWAuCisgICBBIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdDogYSBjbG9zZSBhbmFsb2cgb2YKKyAgIDpjbGFzczpgdGhyZWFkaW5nLkJvdW5kZWRTZW1hcGhvcmVgLgogCi0gICAoT24gTWFjIE9TIFgsIHRoaXMgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSA6Y2xhc3M6YFNlbWFwaG9yZWAgYmVjYXVzZQotICAgYGBzZW1fZ2V0dmFsdWUoKWBgIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGF0IHBsYXRmb3JtKS4KKyAgIEEgc29saXRhcnkgZGlmZmVyZW5jZSBmcm9tIGl0cyBjbG9zZSBhbmFsb2cgZXhpc3RzOiBpdHMgYGBhY3F1aXJlYGAgbWV0aG9kJ3MKKyAgIGZpcnN0IGFyZ3VtZW50IGlzIG5hbWVkICpibG9jayosIGFzIGlzIGNvbnNpc3RlbnQgd2l0aCA6bWV0aDpgTG9jay5hY3F1aXJlYC4KKworICAgLi4gbm90ZTo6CisgICAgICBPbiBNYWMgT1MgWCwgdGhpcyBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIDpjbGFzczpgU2VtYXBob3JlYCBiZWNhdXNlCisgICAgICBgYHNlbV9nZXR2YWx1ZSgpYGAgaXMgbm90IGltcGxlbWVudGVkIG9uIHRoYXQgcGxhdGZvcm0uCiAKIC4uIGNsYXNzOjogQ29uZGl0aW9uKFtsb2NrXSkKIApAQCAtOTU1LDMyICsxMTUzLDEzNCBAQAogCiAgICBBIGNsb25lIG9mIDpjbGFzczpgdGhyZWFkaW5nLkV2ZW50YC4KIAorCiAuLiBjbGFzczo6IExvY2soKQogCi0gICBBIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3Q6IGEgY2xvbmUgb2YgOmNsYXNzOmB0aHJlYWRpbmcuTG9ja2AuCisgICBBIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3Q6IGEgY2xvc2UgYW5hbG9nIG9mIDpjbGFzczpgdGhyZWFkaW5nLkxvY2tgLgorICAgT25jZSBhIHByb2Nlc3Mgb3IgdGhyZWFkIGhhcyBhY3F1aXJlZCBhIGxvY2ssIHN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8KKyAgIGFjcXVpcmUgaXQgZnJvbSBhbnkgcHJvY2VzcyBvciB0aHJlYWQgd2lsbCBibG9jayB1bnRpbCBpdCBpcyByZWxlYXNlZDsKKyAgIGFueSBwcm9jZXNzIG9yIHRocmVhZCBtYXkgcmVsZWFzZSBpdC4gIFRoZSBjb25jZXB0cyBhbmQgYmVoYXZpb3JzIG9mCisgICA6Y2xhc3M6YHRocmVhZGluZy5Mb2NrYCBhcyBpdCBhcHBsaWVzIHRvIHRocmVhZHMgYXJlIHJlcGxpY2F0ZWQgaGVyZSBpbgorICAgOmNsYXNzOmBtdWx0aXByb2Nlc3NpbmcuTG9ja2AgYXMgaXQgYXBwbGllcyB0byBlaXRoZXIgcHJvY2Vzc2VzIG9yIHRocmVhZHMsCisgICBleGNlcHQgYXMgbm90ZWQuCisKKyAgIE5vdGUgdGhhdCA6Y2xhc3M6YExvY2tgIGlzIGFjdHVhbGx5IGEgZmFjdG9yeSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuCisgICBpbnN0YW5jZSBvZiBgYG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZS5Mb2NrYGAgaW5pdGlhbGl6ZWQgd2l0aCBhCisgICBkZWZhdWx0IGNvbnRleHQuCisKKyAgIDpjbGFzczpgTG9ja2Agc3VwcG9ydHMgdGhlIDp0ZXJtOmBjb250ZXh0IG1hbmFnZXJgIHByb3RvY29sIGFuZCB0aHVzIG1heSBiZQorICAgdXNlZCBpbiA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cy4KKworICAgLi4gbWV0aG9kOjogYWNxdWlyZShibG9jaz1UcnVlLCB0aW1lb3V0PU5vbmUpCisKKyAgICAgIEFjcXVpcmUgYSBsb2NrLCBibG9ja2luZyBvciBub24tYmxvY2tpbmcuCisKKyAgICAgIFdpdGggdGhlICpibG9jayogYXJndW1lbnQgc2V0IHRvIGBgVHJ1ZWBgICh0aGUgZGVmYXVsdCksIHRoZSBtZXRob2QgY2FsbAorICAgICAgd2lsbCBibG9jayB1bnRpbCB0aGUgbG9jayBpcyBpbiBhbiB1bmxvY2tlZCBzdGF0ZSwgdGhlbiBzZXQgaXQgdG8gbG9ja2VkCisgICAgICBhbmQgcmV0dXJuIGBgVHJ1ZWBgLiAgTm90ZSB0aGF0IHRoZSBuYW1lIG9mIHRoaXMgZmlyc3QgYXJndW1lbnQgZGlmZmVycworICAgICAgZnJvbSB0aGF0IGluIDptZXRoOmB0aHJlYWRpbmcuTG9jay5hY3F1aXJlYC4KKworICAgICAgV2l0aCB0aGUgKmJsb2NrKiBhcmd1bWVudCBzZXQgdG8gYGBGYWxzZWBgLCB0aGUgbWV0aG9kIGNhbGwgZG9lcyBub3QKKyAgICAgIGJsb2NrLiAgSWYgdGhlIGxvY2sgaXMgY3VycmVudGx5IGluIGEgbG9ja2VkIHN0YXRlLCByZXR1cm4gYGBGYWxzZWBgOworICAgICAgb3RoZXJ3aXNlIHNldCB0aGUgbG9jayB0byBhIGxvY2tlZCBzdGF0ZSBhbmQgcmV0dXJuIGBgVHJ1ZWBgLgorCisgICAgICBXaGVuIGludm9rZWQgd2l0aCBhIHBvc2l0aXZlLCBmbG9hdGluZy1wb2ludCB2YWx1ZSBmb3IgKnRpbWVvdXQqLCBibG9jaworICAgICAgZm9yIGF0IG1vc3QgdGhlIG51bWJlciBvZiBzZWNvbmRzIHNwZWNpZmllZCBieSAqdGltZW91dCogYXMgbG9uZyBhcworICAgICAgdGhlIGxvY2sgY2FuIG5vdCBiZSBhY3F1aXJlZC4gIEludm9jYXRpb25zIHdpdGggYSBuZWdhdGl2ZSB2YWx1ZSBmb3IKKyAgICAgICp0aW1lb3V0KiBhcmUgZXF1aXZhbGVudCB0byBhICp0aW1lb3V0KiBvZiB6ZXJvLiAgSW52b2NhdGlvbnMgd2l0aCBhCisgICAgICAqdGltZW91dCogdmFsdWUgb2YgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSBzZXQgdGhlIHRpbWVvdXQgcGVyaW9kIHRvCisgICAgICBpbmZpbml0ZS4gIE5vdGUgdGhhdCB0aGUgdHJlYXRtZW50IG9mIG5lZ2F0aXZlIG9yIGBgTm9uZWBgIHZhbHVlcyBmb3IKKyAgICAgICp0aW1lb3V0KiBkaWZmZXJzIGZyb20gdGhlIGltcGxlbWVudGVkIGJlaGF2aW9yIGluCisgICAgICA6bWV0aDpgdGhyZWFkaW5nLkxvY2suYWNxdWlyZWAuICBUaGUgKnRpbWVvdXQqIGFyZ3VtZW50IGhhcyBubyBwcmFjdGljYWwKKyAgICAgIGltcGxpY2F0aW9ucyBpZiB0aGUgKmJsb2NrKiBhcmd1bWVudCBpcyBzZXQgdG8gYGBGYWxzZWBgIGFuZCBpcyB0aHVzCisgICAgICBpZ25vcmVkLiAgUmV0dXJucyBgYFRydWVgYCBpZiB0aGUgbG9jayBoYXMgYmVlbiBhY3F1aXJlZCBvciBgYEZhbHNlYGAgaWYKKyAgICAgIHRoZSB0aW1lb3V0IHBlcmlvZCBoYXMgZWxhcHNlZC4KKworCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSBhIGxvY2suICBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBhbnkgcHJvY2VzcyBvciB0aHJlYWQsIG5vdCBvbmx5CisgICAgICB0aGUgcHJvY2VzcyBvciB0aHJlYWQgd2hpY2ggb3JpZ2luYWxseSBhY3F1aXJlZCB0aGUgbG9jay4KKworICAgICAgQmVoYXZpb3IgaXMgdGhlIHNhbWUgYXMgaW4gOm1ldGg6YHRocmVhZGluZy5Mb2NrLnJlbGVhc2VgIGV4Y2VwdCB0aGF0CisgICAgICB3aGVuIGludm9rZWQgb24gYW4gdW5sb2NrZWQgbG9jaywgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpcyByYWlzZWQuCisKIAogLi4gY2xhc3M6OiBSTG9jaygpCiAKLSAgIEEgcmVjdXJzaXZlIGxvY2sgb2JqZWN0OiBhIGNsb25lIG9mIDpjbGFzczpgdGhyZWFkaW5nLlJMb2NrYC4KKyAgIEEgcmVjdXJzaXZlIGxvY2sgb2JqZWN0OiBhIGNsb3NlIGFuYWxvZyBvZiA6Y2xhc3M6YHRocmVhZGluZy5STG9ja2AuICBBCisgICByZWN1cnNpdmUgbG9jayBtdXN0IGJlIHJlbGVhc2VkIGJ5IHRoZSBwcm9jZXNzIG9yIHRocmVhZCB0aGF0IGFjcXVpcmVkIGl0LgorICAgT25jZSBhIHByb2Nlc3Mgb3IgdGhyZWFkIGhhcyBhY3F1aXJlZCBhIHJlY3Vyc2l2ZSBsb2NrLCB0aGUgc2FtZSBwcm9jZXNzCisgICBvciB0aHJlYWQgbWF5IGFjcXVpcmUgaXQgYWdhaW4gd2l0aG91dCBibG9ja2luZzsgdGhhdCBwcm9jZXNzIG9yIHRocmVhZAorICAgbXVzdCByZWxlYXNlIGl0IG9uY2UgZm9yIGVhY2ggdGltZSBpdCBoYXMgYmVlbiBhY3F1aXJlZC4KKworICAgTm90ZSB0aGF0IDpjbGFzczpgUkxvY2tgIGlzIGFjdHVhbGx5IGEgZmFjdG9yeSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuCisgICBpbnN0YW5jZSBvZiBgYG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZS5STG9ja2BgIGluaXRpYWxpemVkIHdpdGggYQorICAgZGVmYXVsdCBjb250ZXh0LgorCisgICA6Y2xhc3M6YFJMb2NrYCBzdXBwb3J0cyB0aGUgOnRlcm06YGNvbnRleHQgbWFuYWdlcmAgcHJvdG9jb2wgYW5kIHRodXMgbWF5IGJlCisgICB1c2VkIGluIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzLgorCisKKyAgIC4uIG1ldGhvZDo6IGFjcXVpcmUoYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKQorCisgICAgICBBY3F1aXJlIGEgbG9jaywgYmxvY2tpbmcgb3Igbm9uLWJsb2NraW5nLgorCisgICAgICBXaGVuIGludm9rZWQgd2l0aCB0aGUgKmJsb2NrKiBhcmd1bWVudCBzZXQgdG8gYGBUcnVlYGAsIGJsb2NrIHVudGlsIHRoZQorICAgICAgbG9jayBpcyBpbiBhbiB1bmxvY2tlZCBzdGF0ZSAobm90IG93bmVkIGJ5IGFueSBwcm9jZXNzIG9yIHRocmVhZCkgdW5sZXNzCisgICAgICB0aGUgbG9jayBpcyBhbHJlYWR5IG93bmVkIGJ5IHRoZSBjdXJyZW50IHByb2Nlc3Mgb3IgdGhyZWFkLiAgVGhlIGN1cnJlbnQKKyAgICAgIHByb2Nlc3Mgb3IgdGhyZWFkIHRoZW4gdGFrZXMgb3duZXJzaGlwIG9mIHRoZSBsb2NrIChpZiBpdCBkb2VzIG5vdAorICAgICAgYWxyZWFkeSBoYXZlIG93bmVyc2hpcCkgYW5kIHRoZSByZWN1cnNpb24gbGV2ZWwgaW5zaWRlIHRoZSBsb2NrIGluY3JlbWVudHMKKyAgICAgIGJ5IG9uZSwgcmVzdWx0aW5nIGluIGEgcmV0dXJuIHZhbHVlIG9mIGBgVHJ1ZWBgLiAgTm90ZSB0aGF0IHRoZXJlIGFyZQorICAgICAgc2V2ZXJhbCBkaWZmZXJlbmNlcyBpbiB0aGlzIGZpcnN0IGFyZ3VtZW50J3MgYmVoYXZpb3IgY29tcGFyZWQgdG8gdGhlCisgICAgICBpbXBsZW1lbnRhdGlvbiBvZiA6bWV0aDpgdGhyZWFkaW5nLlJMb2NrLmFjcXVpcmVgLCBzdGFydGluZyB3aXRoIHRoZSBuYW1lCisgICAgICBvZiB0aGUgYXJndW1lbnQgaXRzZWxmLgorCisgICAgICBXaGVuIGludm9rZWQgd2l0aCB0aGUgKmJsb2NrKiBhcmd1bWVudCBzZXQgdG8gYGBGYWxzZWBgLCBkbyBub3QgYmxvY2suCisgICAgICBJZiB0aGUgbG9jayBoYXMgYWxyZWFkeSBiZWVuIGFjcXVpcmVkIChhbmQgdGh1cyBpcyBvd25lZCkgYnkgYW5vdGhlcgorICAgICAgcHJvY2VzcyBvciB0aHJlYWQsIHRoZSBjdXJyZW50IHByb2Nlc3Mgb3IgdGhyZWFkIGRvZXMgbm90IHRha2Ugb3duZXJzaGlwCisgICAgICBhbmQgdGhlIHJlY3Vyc2lvbiBsZXZlbCB3aXRoaW4gdGhlIGxvY2sgaXMgbm90IGNoYW5nZWQsIHJlc3VsdGluZyBpbgorICAgICAgYSByZXR1cm4gdmFsdWUgb2YgYGBGYWxzZWBgLiAgSWYgdGhlIGxvY2sgaXMgaW4gYW4gdW5sb2NrZWQgc3RhdGUsIHRoZQorICAgICAgY3VycmVudCBwcm9jZXNzIG9yIHRocmVhZCB0YWtlcyBvd25lcnNoaXAgYW5kIHRoZSByZWN1cnNpb24gbGV2ZWwgaXMKKyAgICAgIGluY3JlbWVudGVkLCByZXN1bHRpbmcgaW4gYSByZXR1cm4gdmFsdWUgb2YgYGBUcnVlYGAuCisKKyAgICAgIFVzZSBhbmQgYmVoYXZpb3JzIG9mIHRoZSAqdGltZW91dCogYXJndW1lbnQgYXJlIHRoZSBzYW1lIGFzIGluCisgICAgICA6bWV0aDpgTG9jay5hY3F1aXJlYC4gIE5vdGUgdGhhdCBzb21lIG9mIHRoZXNlIGJlaGF2aW9ycyBvZiAqdGltZW91dCoKKyAgICAgIGRpZmZlciBmcm9tIHRoZSBpbXBsZW1lbnRlZCBiZWhhdmlvcnMgaW4gOm1ldGg6YHRocmVhZGluZy5STG9jay5hY3F1aXJlYC4KKworCisgICAuLiBtZXRob2Q6OiByZWxlYXNlKCkKKworICAgICAgUmVsZWFzZSBhIGxvY2ssIGRlY3JlbWVudGluZyB0aGUgcmVjdXJzaW9uIGxldmVsLiAgSWYgYWZ0ZXIgdGhlCisgICAgICBkZWNyZW1lbnQgdGhlIHJlY3Vyc2lvbiBsZXZlbCBpcyB6ZXJvLCByZXNldCB0aGUgbG9jayB0byB1bmxvY2tlZCAobm90CisgICAgICBvd25lZCBieSBhbnkgcHJvY2VzcyBvciB0aHJlYWQpIGFuZCBpZiBhbnkgb3RoZXIgcHJvY2Vzc2VzIG9yIHRocmVhZHMKKyAgICAgIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZSB1bmxvY2tlZCwgYWxsb3cgZXhhY3RseSBvbmUKKyAgICAgIG9mIHRoZW0gdG8gcHJvY2VlZC4gIElmIGFmdGVyIHRoZSBkZWNyZW1lbnQgdGhlIHJlY3Vyc2lvbiBsZXZlbCBpcyBzdGlsbAorICAgICAgbm9uemVybywgdGhlIGxvY2sgcmVtYWlucyBsb2NrZWQgYW5kIG93bmVkIGJ5IHRoZSBjYWxsaW5nIHByb2Nlc3Mgb3IKKyAgICAgIHRocmVhZC4KKworICAgICAgT25seSBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gdGhlIGNhbGxpbmcgcHJvY2VzcyBvciB0aHJlYWQgb3ducyB0aGUgbG9jay4KKyAgICAgIEFuIDpleGM6YEFzc2VydGlvbkVycm9yYCBpcyByYWlzZWQgaWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGEgcHJvY2VzcworICAgICAgb3IgdGhyZWFkIG90aGVyIHRoYW4gdGhlIG93bmVyIG9yIGlmIHRoZSBsb2NrIGlzIGluIGFuIHVubG9ja2VkICh1bm93bmVkKQorICAgICAgc3RhdGUuICBOb3RlIHRoYXQgdGhlIHR5cGUgb2YgZXhjZXB0aW9uIHJhaXNlZCBpbiB0aGlzIHNpdHVhdGlvbgorICAgICAgZGlmZmVycyBmcm9tIHRoZSBpbXBsZW1lbnRlZCBiZWhhdmlvciBpbiA6bWV0aDpgdGhyZWFkaW5nLlJMb2NrLnJlbGVhc2VgLgorCiAKIC4uIGNsYXNzOjogU2VtYXBob3JlKFt2YWx1ZV0pCiAKLSAgIEEgc2VtYXBob3JlIG9iamVjdDogYSBjbG9uZSBvZiA6Y2xhc3M6YHRocmVhZGluZy5TZW1hcGhvcmVgLgorICAgQSBzZW1hcGhvcmUgb2JqZWN0OiBhIGNsb3NlIGFuYWxvZyBvZiA6Y2xhc3M6YHRocmVhZGluZy5TZW1hcGhvcmVgLgorCisgICBBIHNvbGl0YXJ5IGRpZmZlcmVuY2UgZnJvbSBpdHMgY2xvc2UgYW5hbG9nIGV4aXN0czogaXRzIGBgYWNxdWlyZWBgIG1ldGhvZCdzCisgICBmaXJzdCBhcmd1bWVudCBpcyBuYW1lZCAqYmxvY2sqLCBhcyBpcyBjb25zaXN0ZW50IHdpdGggOm1ldGg6YExvY2suYWNxdWlyZWAuCiAKIC4uIG5vdGU6OgogCi0gICBUaGUgOm1ldGg6YGFjcXVpcmVgIGFuZCA6bWV0aDpgd2FpdGAgbWV0aG9kcyBvZiBlYWNoIG9mIHRoZXNlIHR5cGVzCi0gICB0cmVhdCBuZWdhdGl2ZSB0aW1lb3V0cyBhcyB6ZXJvIHRpbWVvdXRzLiAgVGhpcyBkaWZmZXJzIGZyb20KLSAgIDptb2Q6YHRocmVhZGluZ2Agd2hlcmUsIHNpbmNlIHZlcnNpb24gMy4yLCB0aGUgZXF1aXZhbGVudAotICAgOm1ldGg6YGFjcXVpcmVgIG1ldGhvZHMgdHJlYXQgbmVnYXRpdmUgdGltZW91dHMgYXMgaW5maW5pdGUKLSAgIHRpbWVvdXRzLgotCiAgICBPbiBNYWMgT1MgWCwgYGBzZW1fdGltZWR3YWl0YGAgaXMgdW5zdXBwb3J0ZWQsIHNvIGNhbGxpbmcgYGBhY3F1aXJlKClgYCB3aXRoCiAgICBhIHRpbWVvdXQgd2lsbCBlbXVsYXRlIHRoYXQgZnVuY3Rpb24ncyBiZWhhdmlvciB1c2luZyBhIHNsZWVwaW5nIGxvb3AuCiAKIC4uIG5vdGU6OgogCi0gICBJZiB0aGUgU0lHSU5UIHNpZ25hbCBnZW5lcmF0ZWQgYnkgQ3RybC1DIGFycml2ZXMgd2hpbGUgdGhlIG1haW4gdGhyZWFkIGlzCisgICBJZiB0aGUgU0lHSU5UIHNpZ25hbCBnZW5lcmF0ZWQgYnkgOmtiZDpgQ3RybC1DYCBhcnJpdmVzIHdoaWxlIHRoZSBtYWluIHRocmVhZCBpcwogICAgYmxvY2tlZCBieSBhIGNhbGwgdG8gOm1ldGg6YEJvdW5kZWRTZW1hcGhvcmUuYWNxdWlyZWAsIDptZXRoOmBMb2NrLmFjcXVpcmVgLAogICAgOm1ldGg6YFJMb2NrLmFjcXVpcmVgLCA6bWV0aDpgU2VtYXBob3JlLmFjcXVpcmVgLCA6bWV0aDpgQ29uZGl0aW9uLmFjcXVpcmVgCiAgICBvciA6bWV0aDpgQ29uZGl0aW9uLndhaXRgIHRoZW4gdGhlIGNhbGwgd2lsbCBiZSBpbW1lZGlhdGVseSBpbnRlcnJ1cHRlZCBhbmQKQEAgLTk4OSw2ICsxMjg5LDE0IEBACiAgICBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgYmVoYXZpb3VyIG9mIDptb2Q6YHRocmVhZGluZ2Agd2hlcmUgU0lHSU5UIHdpbGwgYmUKICAgIGlnbm9yZWQgd2hpbGUgdGhlIGVxdWl2YWxlbnQgYmxvY2tpbmcgY2FsbHMgYXJlIGluIHByb2dyZXNzLgogCisuLiBub3RlOjoKKworICAgU29tZSBvZiB0aGlzIHBhY2thZ2UncyBmdW5jdGlvbmFsaXR5IHJlcXVpcmVzIGEgZnVuY3Rpb25pbmcgc2hhcmVkIHNlbWFwaG9yZQorICAgaW1wbGVtZW50YXRpb24gb24gdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS4gV2l0aG91dCBvbmUsIHRoZQorICAgOm1vZDpgbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplYCBtb2R1bGUgd2lsbCBiZSBkaXNhYmxlZCwgYW5kIGF0dGVtcHRzIHRvCisgICBpbXBvcnQgaXQgd2lsbCByZXN1bHQgaW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgLiBTZWUKKyAgIDppc3N1ZTpgMzc3MGAgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCisKIAogU2hhcmVkIDptb2Q6YGN0eXBlc2AgT2JqZWN0cwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMTMzMSw3ICsxNjM5LDcgQEAKICAgICAgIFRoZSBhZGRyZXNzIHVzZWQgYnkgdGhlIG1hbmFnZXIuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCi0gICAgICBNYW5hZ2VyIG9iamVjdHMgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIC0tIHNlZQorICAgICAgTWFuYWdlciBvYmplY3RzIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCAtLSBzZWUKICAgICAgIDpyZWY6YHR5cGVjb250ZXh0bWFuYWdlcmAuICA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZW50ZXJfX2Agc3RhcnRzIHRoZQogICAgICAgc2VydmVyIHByb2Nlc3MgKGlmIGl0IGhhcyBub3QgYWxyZWFkeSBzdGFydGVkKSBhbmQgdGhlbiByZXR1cm5zIHRoZQogICAgICAgbWFuYWdlciBvYmplY3QuICA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZXhpdF9fYCBjYWxscyA6bWV0aDpgc2h1dGRvd25gLgpAQCAtMTYyOCw3ICsxOTM2LDcgQEAKICAgICAgIHJhaXNlZCBieSA6bWV0aDpgX2NhbGxtZXRob2RgLgogCiAgICAgICBOb3RlIGluIHBhcnRpY3VsYXIgdGhhdCBhbiBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgaWYgKm1ldGhvZG5hbWUqIGhhcwotICAgICAgbm90IGJlZW4gKmV4cG9zZWQqCisgICAgICBub3QgYmVlbiAqZXhwb3NlZCouCiAKICAgICAgIEFuIGV4YW1wbGUgb2YgdGhlIHVzYWdlIG9mIDptZXRoOmBfY2FsbG1ldGhvZGA6CiAKQEAgLTE2MzcsNyArMTk0NSw3IEBACiAgICAgICAgICA+Pj4gbCA9IG1hbmFnZXIubGlzdChyYW5nZSgxMCkpCiAgICAgICAgICA+Pj4gbC5fY2FsbG1ldGhvZCgnX19sZW5fXycpCiAgICAgICAgICAxMAotICAgICAgICAgPj4+IGwuX2NhbGxtZXRob2QoJ19fZ2V0c2xpY2VfXycsICgyLCA3KSkgICAjIGVxdWl2IHRvIGBsWzI6N11gCisgICAgICAgICA+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoc2xpY2UoMiwgNyksKSkgICMgZXF1aXYgdG8gYGxbMjo3XWAKICAgICAgICAgIFsyLCAzLCA0LCA1LCA2XQogICAgICAgICAgPj4+IGwuX2NhbGxtZXRob2QoJ19fZ2V0aXRlbV9fJywgKDIwLCkpICAgICAjIGVxdWl2IHRvIGBsWzIwXWAKICAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKQEAgLTE2NzgsMjUgKzE5ODYsMzcgQEAKIE9uZSBjYW4gY3JlYXRlIGEgcG9vbCBvZiBwcm9jZXNzZXMgd2hpY2ggd2lsbCBjYXJyeSBvdXQgdGFza3Mgc3VibWl0dGVkIHRvIGl0CiB3aXRoIHRoZSA6Y2xhc3M6YFBvb2xgIGNsYXNzLgogCi0uLiBjbGFzczo6IFBvb2woW3Byb2Nlc3Nlc1ssIGluaXRpYWxpemVyWywgaW5pdGFyZ3NbLCBtYXh0YXNrc3BlcmNoaWxkXV1dXSkKKy4uIGNsYXNzOjogUG9vbChbcHJvY2Vzc2VzWywgaW5pdGlhbGl6ZXJbLCBpbml0YXJnc1ssIG1heHRhc2tzcGVyY2hpbGQgWywgY29udGV4dF1dXV1dKQogCiAgICBBIHByb2Nlc3MgcG9vbCBvYmplY3Qgd2hpY2ggY29udHJvbHMgYSBwb29sIG9mIHdvcmtlciBwcm9jZXNzZXMgdG8gd2hpY2ggam9icwogICAgY2FuIGJlIHN1Ym1pdHRlZC4gIEl0IHN1cHBvcnRzIGFzeW5jaHJvbm91cyByZXN1bHRzIHdpdGggdGltZW91dHMgYW5kCiAgICBjYWxsYmFja3MgYW5kIGhhcyBhIHBhcmFsbGVsIG1hcCBpbXBsZW1lbnRhdGlvbi4KIAogICAgKnByb2Nlc3NlcyogaXMgdGhlIG51bWJlciBvZiB3b3JrZXIgcHJvY2Vzc2VzIHRvIHVzZS4gIElmICpwcm9jZXNzZXMqIGlzCi0gICBgYE5vbmVgYCB0aGVuIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkgOmZ1bmM6YGNwdV9jb3VudGAgaXMgdXNlZC4gIElmCi0gICAqaW5pdGlhbGl6ZXIqIGlzIG5vdCBgYE5vbmVgYCB0aGVuIGVhY2ggd29ya2VyIHByb2Nlc3Mgd2lsbCBjYWxsCisgICBgYE5vbmVgYCB0aGVuIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkgOmZ1bmM6YG9zLmNwdV9jb3VudGAgaXMgdXNlZC4KKworICAgSWYgKmluaXRpYWxpemVyKiBpcyBub3QgYGBOb25lYGAgdGhlbiBlYWNoIHdvcmtlciBwcm9jZXNzIHdpbGwgY2FsbAogICAgYGBpbml0aWFsaXplcigqaW5pdGFyZ3MpYGAgd2hlbiBpdCBzdGFydHMuCiAKKyAgICptYXh0YXNrc3BlcmNoaWxkKiBpcyB0aGUgbnVtYmVyIG9mIHRhc2tzIGEgd29ya2VyIHByb2Nlc3MgY2FuIGNvbXBsZXRlCisgICBiZWZvcmUgaXQgd2lsbCBleGl0IGFuZCBiZSByZXBsYWNlZCB3aXRoIGEgZnJlc2ggd29ya2VyIHByb2Nlc3MsIHRvIGVuYWJsZQorICAgdW51c2VkIHJlc291cmNlcyB0byBiZSBmcmVlZC4gVGhlIGRlZmF1bHQgKm1heHRhc2tzcGVyY2hpbGQqIGlzIE5vbmUsIHdoaWNoCisgICBtZWFucyB3b3JrZXIgcHJvY2Vzc2VzIHdpbGwgbGl2ZSBhcyBsb25nIGFzIHRoZSBwb29sLgorCisgICAqY29udGV4dCogY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgY29udGV4dCB1c2VkIGZvciBzdGFydGluZworICAgdGhlIHdvcmtlciBwcm9jZXNzZXMuICBVc3VhbGx5IGEgcG9vbCBpcyBjcmVhdGVkIHVzaW5nIHRoZQorICAgZnVuY3Rpb24gOmZ1bmM6YG11bHRpcHJvY2Vzc2luZy5Qb29sYCBvciB0aGUgOm1ldGg6YFBvb2xgIG1ldGhvZAorICAgb2YgYSBjb250ZXh0IG9iamVjdC4gIEluIGJvdGggY2FzZXMgKmNvbnRleHQqIGlzIHNldAorICAgYXBwcm9wcmlhdGVseS4KKwogICAgTm90ZSB0aGF0IHRoZSBtZXRob2RzIG9mIHRoZSBwb29sIG9iamVjdCBzaG91bGQgb25seSBiZSBjYWxsZWQgYnkKICAgIHRoZSBwcm9jZXNzIHdoaWNoIGNyZWF0ZWQgdGhlIHBvb2wuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgotICAgICAgKm1heHRhc2tzcGVyY2hpbGQqIGlzIHRoZSBudW1iZXIgb2YgdGFza3MgYSB3b3JrZXIgcHJvY2VzcyBjYW4gY29tcGxldGUKLSAgICAgIGJlZm9yZSBpdCB3aWxsIGV4aXQgYW5kIGJlIHJlcGxhY2VkIHdpdGggYSBmcmVzaCB3b3JrZXIgcHJvY2VzcywgdG8gZW5hYmxlCi0gICAgICB1bnVzZWQgcmVzb3VyY2VzIHRvIGJlIGZyZWVkLiBUaGUgZGVmYXVsdCAqbWF4dGFza3NwZXJjaGlsZCogaXMgTm9uZSwgd2hpY2gKLSAgICAgIG1lYW5zIHdvcmtlciBwcm9jZXNzZXMgd2lsbCBsaXZlIGFzIGxvbmcgYXMgdGhlIHBvb2wuCisgICAgICAqbWF4dGFza3NwZXJjaGlsZCoKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAqY29udGV4dCoKIAogICAgLi4gbm90ZTo6CiAKQEAgLTE3MjIsNyArMjA0Miw3IEBACiAgICAgICBJZiAqY2FsbGJhY2sqIGlzIHNwZWNpZmllZCB0aGVuIGl0IHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIGFjY2VwdHMgYQogICAgICAgc2luZ2xlIGFyZ3VtZW50LiAgV2hlbiB0aGUgcmVzdWx0IGJlY29tZXMgcmVhZHkgKmNhbGxiYWNrKiBpcyBhcHBsaWVkIHRvCiAgICAgICBpdCwgdGhhdCBpcyB1bmxlc3MgdGhlIGNhbGwgZmFpbGVkLCBpbiB3aGljaCBjYXNlIHRoZSAqZXJyb3JfY2FsbGJhY2sqCi0gICAgICBpcyBhcHBsaWVkIGluc3RlYWQKKyAgICAgIGlzIGFwcGxpZWQgaW5zdGVhZC4KIAogICAgICAgSWYgKmVycm9yX2NhbGxiYWNrKiBpcyBzcGVjaWZpZWQgdGhlbiBpdCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaAogICAgICAgYWNjZXB0cyBhIHNpbmdsZSBhcmd1bWVudC4gIElmIHRoZSB0YXJnZXQgZnVuY3Rpb24gZmFpbHMsIHRoZW4KQEAgLTE3NDcsNyArMjA2Nyw3IEBACiAgICAgICBJZiAqY2FsbGJhY2sqIGlzIHNwZWNpZmllZCB0aGVuIGl0IHNob3VsZCBiZSBhIGNhbGxhYmxlIHdoaWNoIGFjY2VwdHMgYQogICAgICAgc2luZ2xlIGFyZ3VtZW50LiAgV2hlbiB0aGUgcmVzdWx0IGJlY29tZXMgcmVhZHkgKmNhbGxiYWNrKiBpcyBhcHBsaWVkIHRvCiAgICAgICBpdCwgdGhhdCBpcyB1bmxlc3MgdGhlIGNhbGwgZmFpbGVkLCBpbiB3aGljaCBjYXNlIHRoZSAqZXJyb3JfY2FsbGJhY2sqCi0gICAgICBpcyBhcHBsaWVkIGluc3RlYWQKKyAgICAgIGlzIGFwcGxpZWQgaW5zdGVhZC4KIAogICAgICAgSWYgKmVycm9yX2NhbGxiYWNrKiBpcyBzcGVjaWZpZWQgdGhlbiBpdCBzaG91bGQgYmUgYSBjYWxsYWJsZSB3aGljaAogICAgICAgYWNjZXB0cyBhIHNpbmdsZSBhcmd1bWVudC4gIElmIHRoZSB0YXJnZXQgZnVuY3Rpb24gZmFpbHMsIHRoZW4KQEAgLTE3NzgsMTggKzIwOTgsMTggQEAKIAogICAgLi4gbWV0aG9kOjogc3Rhcm1hcChmdW5jLCBpdGVyYWJsZVssIGNodW5rc2l6ZV0pCiAKLSAgICAgIExpa2UgOm1ldGg6YG1hcGAgZXhjZXB0IHRoYXQgdGhlIGVsZW1lbnRzIG9mIHRoZSBgaXRlcmFibGVgIGFyZSBleHBlY3RlZAorICAgICAgTGlrZSA6bWV0aDpgbWFwYCBleGNlcHQgdGhhdCB0aGUgZWxlbWVudHMgb2YgdGhlICppdGVyYWJsZSogYXJlIGV4cGVjdGVkCiAgICAgICB0byBiZSBpdGVyYWJsZXMgdGhhdCBhcmUgdW5wYWNrZWQgYXMgYXJndW1lbnRzLgogCi0gICAgICBIZW5jZSBhbiBgaXRlcmFibGVgIG9mIGBbKDEsMiksICgzLCA0KV1gIHJlc3VsdHMgaW4gYFtmdW5jKDEsMiksCi0gICAgICBmdW5jKDMsNCldYC4KKyAgICAgIEhlbmNlIGFuICppdGVyYWJsZSogb2YgYGBbKDEsMiksICgzLCA0KV1gYCByZXN1bHRzIGluIGBgW2Z1bmMoMSwyKSwKKyAgICAgIGZ1bmMoMyw0KV1gYC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKICAgIC4uIG1ldGhvZDo6IHN0YXJtYXBfYXN5bmMoZnVuYywgaXRlcmFibGVbLCBjaHVua3NpemVbLCBjYWxsYmFja1ssIGVycm9yX2JhY2tdXV0pCiAKICAgICAgIEEgY29tYmluYXRpb24gb2YgOm1ldGg6YHN0YXJtYXBgIGFuZCA6bWV0aDpgbWFwX2FzeW5jYCB0aGF0IGl0ZXJhdGVzIG92ZXIKLSAgICAgIGBpdGVyYWJsZWAgb2YgaXRlcmFibGVzIGFuZCBjYWxscyBgZnVuY2Agd2l0aCB0aGUgaXRlcmFibGVzIHVucGFja2VkLgorICAgICAgKml0ZXJhYmxlKiBvZiBpdGVyYWJsZXMgYW5kIGNhbGxzICpmdW5jKiB3aXRoIHRoZSBpdGVyYWJsZXMgdW5wYWNrZWQuCiAgICAgICBSZXR1cm5zIGEgcmVzdWx0IG9iamVjdC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCkBAIC0xODExLDcgKzIxMzEsNyBAQAogICAgICAgOm1ldGg6YHRlcm1pbmF0ZWAgYmVmb3JlIHVzaW5nIDptZXRoOmBqb2luYC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCi0gICAgICBQb29sIG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCAtLSBzZWUKKyAgICAgIFBvb2wgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIC0tIHNlZQogICAgICAgOnJlZjpgdHlwZWNvbnRleHRtYW5hZ2VyYC4gIDptZXRoOmB+Y29udGV4dG1hbmFnZXIuX19lbnRlcl9fYCByZXR1cm5zIHRoZQogICAgICAgcG9vbCBvYmplY3QsIGFuZCA6bWV0aDpgfmNvbnRleHRtYW5hZ2VyLl9fZXhpdF9fYCBjYWxscyA6bWV0aDpgdGVybWluYXRlYC4KIApAQCAtMTk4NCw3ICsyMzA0LDcgQEAKICAgICAgIHVuYXZhaWxhYmxlIHRoZW4gaXQgaXMgYGBOb25lYGAuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotICAgICAgTGlzdGVuZXIgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIC0tIHNlZQorICAgICAgTGlzdGVuZXIgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIC0tIHNlZQogICAgICAgOnJlZjpgdHlwZWNvbnRleHRtYW5hZ2VyYC4gIDptZXRoOmB+Y29udGV4dG1hbmFnZXIuX19lbnRlcl9fYCByZXR1cm5zIHRoZQogICAgICAgbGlzdGVuZXIgb2JqZWN0LCBhbmQgOm1ldGg6YH5jb250ZXh0bWFuYWdlci5fX2V4aXRfX2AgY2FsbHMgOm1ldGg6YGNsb3NlYC4KIApAQCAtMjE4OSw0MyArMjUwOSw4IEBACiAgICAgW0lORk8vTWFpblByb2Nlc3NdIHNlbmRpbmcgc2h1dGRvd24gbWVzc2FnZSB0byBtYW5hZ2VyCiAgICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIGV4aXRpbmcgd2l0aCBleGl0Y29kZSAwCiAKLUluIGFkZGl0aW9uIHRvIGhhdmluZyB0aGVzZSB0d28gbG9nZ2luZyBmdW5jdGlvbnMsIHRoZSBtdWx0aXByb2Nlc3NpbmcgYWxzbwotZXhwb3NlcyB0d28gYWRkaXRpb25hbCBsb2dnaW5nIGxldmVsIGF0dHJpYnV0ZXMuIFRoZXNlIGFyZSAgOmNvbnN0OmBTVUJXQVJOSU5HYAotYW5kIDpjb25zdDpgU1VCREVCVUdgLiBUaGUgdGFibGUgYmVsb3cgaWxsdXN0cmF0ZXMgd2hlcmUgdGhlc2VzIGZpdCBpbiB0aGUKLW5vcm1hbCBsZXZlbCBoaWVyYXJjaHkuCi0KLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi18IExldmVsICAgICAgICAgIHwgTnVtZXJpYyB2YWx1ZSAgfAotKz09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PSsKLXwgYGBTVUJXQVJOSU5HYGAgfCAyNSAgICAgICAgICAgICB8Ci0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwotfCBgYFNVQkRFQlVHYGAgICB8IDUgICAgICAgICAgICAgIHwKLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rCi0KIEZvciBhIGZ1bGwgdGFibGUgb2YgbG9nZ2luZyBsZXZlbHMsIHNlZSB0aGUgOm1vZDpgbG9nZ2luZ2AgbW9kdWxlLgogCi1UaGVzZSBhZGRpdGlvbmFsIGxvZ2dpbmcgbGV2ZWxzIGFyZSB1c2VkIHByaW1hcmlseSBmb3IgY2VydGFpbiBkZWJ1ZyBtZXNzYWdlcwotd2l0aGluIHRoZSBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlLiBCZWxvdyBpcyB0aGUgc2FtZSBleGFtcGxlIGFzIGFib3ZlLCBleGNlcHQKLXdpdGggOmNvbnN0OmBTVUJERUJVR2AgZW5hYmxlZDo6Ci0KLSAgICA+Pj4gaW1wb3J0IG11bHRpcHJvY2Vzc2luZywgbG9nZ2luZwotICAgID4+PiBsb2dnZXIgPSBtdWx0aXByb2Nlc3NpbmcubG9nX3RvX3N0ZGVycigpCi0gICAgPj4+IGxvZ2dlci5zZXRMZXZlbChtdWx0aXByb2Nlc3NpbmcuU1VCREVCVUcpCi0gICAgPj4+IGxvZ2dlci53YXJuaW5nKCdkb29tZWQnKQotICAgIFtXQVJOSU5HL01haW5Qcm9jZXNzXSBkb29tZWQKLSAgICA+Pj4gbSA9IG11bHRpcHJvY2Vzc2luZy5NYW5hZ2VyKCkKLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIGNoaWxkIHByb2Nlc3MgY2FsbGluZyBzZWxmLnJ1bigpCi0gICAgW0lORk8vU3luY01hbmFnZXItLi4uXSBjcmVhdGVkIHRlbXAgZGlyZWN0b3J5IC8uLi4vcHltcC0uLi4KLSAgICBbSU5GTy9TeW5jTWFuYWdlci0uLi5dIG1hbmFnZXIgc2VydmluZyBhdCAnLy4uLi9weW1wLWRqR0JYTi9saXN0ZW5lci0uLi4nCi0gICAgPj4+IGRlbCBtCi0gICAgW1NVQkRFQlVHL01haW5Qcm9jZXNzXSBmaW5hbGl6ZXIgY2FsbGluZyAuLi4KLSAgICBbSU5GTy9NYWluUHJvY2Vzc10gc2VuZGluZyBzaHV0ZG93biBtZXNzYWdlIHRvIG1hbmFnZXIKLSAgICBbREVCVUcvU3luY01hbmFnZXItLi4uXSBtYW5hZ2VyIHJlY2VpdmVkIHNodXRkb3duIG1lc3NhZ2UKLSAgICBbU1VCREVCVUcvU3luY01hbmFnZXItLi4uXSBjYWxsaW5nIDxGaW5hbGl6ZSBvYmplY3QsIGNhbGxiYWNrPXVubGluaywgLi4uCi0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gZmluYWxpemVyIGNhbGxpbmcgPGJ1aWx0LWluIGZ1bmN0aW9uIHVubGluaz4gLi4uCi0gICAgW1NVQkRFQlVHL1N5bmNNYW5hZ2VyLS4uLl0gY2FsbGluZyA8RmluYWxpemUgb2JqZWN0LCBkZWFkPgotICAgIFtTVUJERUJVRy9TeW5jTWFuYWdlci0uLi5dIGZpbmFsaXplciBjYWxsaW5nIDxmdW5jdGlvbiBybXRyZWUgYXQgMHg1YWE3MzA+IC4uLgotICAgIFtJTkZPL1N5bmNNYW5hZ2VyLS4uLl0gbWFuYWdlciBleGl0aW5nIHdpdGggZXhpdGNvZGUgMAogCiBUaGUgOm1vZDpgbXVsdGlwcm9jZXNzaW5nLmR1bW15YCBtb2R1bGUKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMjI0Niw4ICsyNTMxLDEwIEBACiA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgLgogCiAKLUFsbCBwbGF0Zm9ybXMKLX5+fn5+fn5+fn5+fn4KK0FsbCBzdGFydCBtZXRob2RzCit+fn5+fn5+fn5+fn5+fn5+fgorCitUaGUgZm9sbG93aW5nIGFwcGxpZXMgdG8gYWxsIHN0YXJ0IG1ldGhvZHMuCiAKIEF2b2lkIHNoYXJlZCBzdGF0ZQogCkBAIC0yMjgxLDExICsyNTY4LDEzIEBACiAKIEJldHRlciB0byBpbmhlcml0IHRoYW4gcGlja2xlL3VucGlja2xlCiAKLSAgICBPbiBXaW5kb3dzIG1hbnkgdHlwZXMgZnJvbSA6bW9kOmBtdWx0aXByb2Nlc3NpbmdgIG5lZWQgdG8gYmUgcGlja2xhYmxlIHNvCi0gICAgdGhhdCBjaGlsZCBwcm9jZXNzZXMgY2FuIHVzZSB0aGVtLiAgSG93ZXZlciwgb25lIHNob3VsZCBnZW5lcmFsbHkgYXZvaWQKLSAgICBzZW5kaW5nIHNoYXJlZCBvYmplY3RzIHRvIG90aGVyIHByb2Nlc3NlcyB1c2luZyBwaXBlcyBvciBxdWV1ZXMuICBJbnN0ZWFkCi0gICAgeW91IHNob3VsZCBhcnJhbmdlIHRoZSBwcm9ncmFtIHNvIHRoYXQgYSBwcm9jZXNzIHdoaWNoIG5lZWRzIGFjY2VzcyB0byBhCi0gICAgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgZWxzZXdoZXJlIGNhbiBpbmhlcml0IGl0IGZyb20gYW4gYW5jZXN0b3IgcHJvY2Vzcy4KKyAgICBXaGVuIHVzaW5nIHRoZSAqc3Bhd24qIG9yICpmb3Jrc2VydmVyKiBzdGFydCBtZXRob2RzIG1hbnkgdHlwZXMKKyAgICBmcm9tIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbmVlZCB0byBiZSBwaWNrbGFibGUgc28gdGhhdCBjaGlsZAorICAgIHByb2Nlc3NlcyBjYW4gdXNlIHRoZW0uICBIb3dldmVyLCBvbmUgc2hvdWxkIGdlbmVyYWxseSBhdm9pZAorICAgIHNlbmRpbmcgc2hhcmVkIG9iamVjdHMgdG8gb3RoZXIgcHJvY2Vzc2VzIHVzaW5nIHBpcGVzIG9yIHF1ZXVlcy4KKyAgICBJbnN0ZWFkIHlvdSBzaG91bGQgYXJyYW5nZSB0aGUgcHJvZ3JhbSBzbyB0aGF0IGEgcHJvY2VzcyB3aGljaAorICAgIG5lZWRzIGFjY2VzcyB0byBhIHNoYXJlZCByZXNvdXJjZSBjcmVhdGVkIGVsc2V3aGVyZSBjYW4gaW5oZXJpdCBpdAorICAgIGZyb20gYW4gYW5jZXN0b3IgcHJvY2Vzcy4KIAogQXZvaWQgdGVybWluYXRpbmcgcHJvY2Vzc2VzCiAKQEAgLTIzMTEsNyArMjYwMCw3IEBACiAgICAgaXRlbXMgd2hpY2ggaGF2ZSBiZWVuIHB1dCBvbiB0aGUgcXVldWUgd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQgYmVmb3JlIHRoZQogICAgIHByb2Nlc3MgaXMgam9pbmVkLiAgT3RoZXJ3aXNlIHlvdSBjYW5ub3QgYmUgc3VyZSB0aGF0IHByb2Nlc3NlcyB3aGljaCBoYXZlCiAgICAgcHV0IGl0ZW1zIG9uIHRoZSBxdWV1ZSB3aWxsIHRlcm1pbmF0ZS4gIFJlbWVtYmVyIGFsc28gdGhhdCBub24tZGFlbW9uaWMKLSAgICBwcm9jZXNzZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGJlIGpvaW5lZC4KKyAgICBwcm9jZXNzZXMgd2lsbCBiZSBqb2luZWQgYXV0b21hdGljYWxseS4KIAogICAgIEFuIGV4YW1wbGUgd2hpY2ggd2lsbCBkZWFkbG9jayBpcyB0aGUgZm9sbG93aW5nOjoKIApAQCAtMjMyNywyMCArMjYxNiwyMiBAQAogICAgICAgICAgICAgcC5qb2luKCkgICAgICAgICAgICAgICAgICAgICMgdGhpcyBkZWFkbG9ja3MKICAgICAgICAgICAgIG9iaiA9IHF1ZXVlLmdldCgpCiAKLSAgICBBIGZpeCBoZXJlIHdvdWxkIGJlIHRvIHN3YXAgdGhlIGxhc3QgdHdvIGxpbmVzIHJvdW5kIChvciBzaW1wbHkgcmVtb3ZlIHRoZQorICAgIEEgZml4IGhlcmUgd291bGQgYmUgdG8gc3dhcCB0aGUgbGFzdCB0d28gbGluZXMgKG9yIHNpbXBseSByZW1vdmUgdGhlCiAgICAgYGBwLmpvaW4oKWBgIGxpbmUpLgogCiBFeHBsaWNpdGx5IHBhc3MgcmVzb3VyY2VzIHRvIGNoaWxkIHByb2Nlc3NlcwogCi0gICAgT24gVW5peCBhIGNoaWxkIHByb2Nlc3MgY2FuIG1ha2UgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYQotICAgIHBhcmVudCBwcm9jZXNzIHVzaW5nIGEgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlCi0gICAgb2JqZWN0IGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCisgICAgT24gVW5peCB1c2luZyB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCwgYSBjaGlsZCBwcm9jZXNzIGNhbiBtYWtlCisgICAgdXNlIG9mIGEgc2hhcmVkIHJlc291cmNlIGNyZWF0ZWQgaW4gYSBwYXJlbnQgcHJvY2VzcyB1c2luZyBhCisgICAgZ2xvYmFsIHJlc291cmNlLiAgSG93ZXZlciwgaXQgaXMgYmV0dGVyIHRvIHBhc3MgdGhlIG9iamVjdCBhcyBhbgorICAgIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciBmb3IgdGhlIGNoaWxkIHByb2Nlc3MuCiAKLSAgICBBcGFydCBmcm9tIG1ha2luZyB0aGUgY29kZSAocG90ZW50aWFsbHkpIGNvbXBhdGlibGUgd2l0aCBXaW5kb3dzIHRoaXMgYWxzbwotICAgIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZSBjaGlsZCBwcm9jZXNzIGlzIHN0aWxsIGFsaXZlIHRoZSBvYmplY3Qgd2lsbCBub3QKLSAgICBiZSBnYXJiYWdlIGNvbGxlY3RlZCBpbiB0aGUgcGFyZW50IHByb2Nlc3MuICBUaGlzIG1pZ2h0IGJlIGltcG9ydGFudCBpZiBzb21lCi0gICAgcmVzb3VyY2UgaXMgZnJlZWQgd2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQKLSAgICBwcm9jZXNzLgorICAgIEFwYXJ0IGZyb20gbWFraW5nIHRoZSBjb2RlIChwb3RlbnRpYWxseSkgY29tcGF0aWJsZSB3aXRoIFdpbmRvd3MKKyAgICBhbmQgdGhlIG90aGVyIHN0YXJ0IG1ldGhvZHMgdGhpcyBhbHNvIGVuc3VyZXMgdGhhdCBhcyBsb25nIGFzIHRoZQorICAgIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUgdGhlIG9iamVjdCB3aWxsIG5vdCBiZSBnYXJiYWdlCisgICAgY29sbGVjdGVkIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy4gIFRoaXMgbWlnaHQgYmUgaW1wb3J0YW50IGlmIHNvbWUKKyAgICByZXNvdXJjZSBpcyBmcmVlZCB3aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQgaW4gdGhlCisgICAgcGFyZW50IHByb2Nlc3MuCiAKICAgICBTbyBmb3IgaW5zdGFuY2UgOjoKIApAQCAtMjM5OSwxNyArMjY5MCwxOSBAQAogCiAgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSA6aXNzdWU6YDUxNTVgLCA6aXNzdWU6YDUzMTNgIGFuZCA6aXNzdWU6YDUzMzFgCiAKLVdpbmRvd3MKLX5+fn5+fn4KK1RoZSAqc3Bhd24qIGFuZCAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kcworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLVNpbmNlIFdpbmRvd3MgbGFja3MgOmZ1bmM6YG9zLmZvcmtgIGl0IGhhcyBhIGZldyBleHRyYSByZXN0cmljdGlvbnM6CitUaGVyZSBhcmUgYSBmZXcgZXh0cmEgcmVzdHJpY3Rpb24gd2hpY2ggZG9uJ3QgYXBwbHkgdG8gdGhlICpmb3JrKgorc3RhcnQgbWV0aG9kLgogCiBNb3JlIHBpY2tsYWJpbGl0eQogCi0gICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlIHBpY2tsYWJsZS4gIFRoaXMKLSAgICBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kIG1ldGhvZHMgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHkKLSAgICBhcyB0aGUgYGB0YXJnZXRgYCBhcmd1bWVudCBvbiBXaW5kb3dzIC0tLSBqdXN0IGRlZmluZSBhIGZ1bmN0aW9uIGFuZCB1c2UKLSAgICB0aGF0IGluc3RlYWQuCisgICAgRW5zdXJlIHRoYXQgYWxsIGFyZ3VtZW50cyB0byA6bWV0aDpgUHJvY2Vzcy5fX2luaXRfX2AgYXJlCisgICAgcGlja2xhYmxlLiAgVGhpcyBtZWFucywgaW4gcGFydGljdWxhciwgdGhhdCBib3VuZCBvciB1bmJvdW5kCisgICAgbWV0aG9kcyBjYW5ub3QgYmUgdXNlZCBkaXJlY3RseSBhcyB0aGUgYGB0YXJnZXRgYCAodW5sZXNzIHlvdSB1c2UKKyAgICB0aGUgKmZvcmsqIHN0YXJ0IG1ldGhvZCkgLS0tIGp1c3QgZGVmaW5lIGEgZnVuY3Rpb24gYW5kIHVzZSB0aGF0CisgICAgaW5zdGVhZC4KIAogICAgIEFsc28sIGlmIHlvdSBzdWJjbGFzcyA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2AgdGhlbiBtYWtlIHN1cmUgdGhhdAogICAgIGluc3RhbmNlcyB3aWxsIGJlIHBpY2tsYWJsZSB3aGVuIHRoZSA6bWV0aDpgUHJvY2Vzcy5zdGFydApAQCAtMjQzMSw3ICsyNzI0LDggQEAKICAgICBpbnRlcnByZXRlciB3aXRob3V0IGNhdXNpbmcgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgKHN1Y2ggYSBzdGFydGluZyBhIG5ldwogICAgIHByb2Nlc3MpLgogCi0gICAgRm9yIGV4YW1wbGUsIHVuZGVyIFdpbmRvd3MgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQorICAgIEZvciBleGFtcGxlLCB1c2luZyB0aGUgKnNwYXduKiBvciAqZm9ya3NlcnZlciogc3RhcnQgbWV0aG9kCisgICAgcnVubmluZyB0aGUgZm9sbG93aW5nIG1vZHVsZSB3b3VsZCBmYWlsIHdpdGggYQogICAgIDpleGM6YFJ1bnRpbWVFcnJvcmA6OgogCiAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzCkBAIC0yNDQ1LDEzICsyNzM5LDE0IEBACiAgICAgSW5zdGVhZCBvbmUgc2hvdWxkIHByb3RlY3QgdGhlICJlbnRyeSBwb2ludCIgb2YgdGhlIHByb2dyYW0gYnkgdXNpbmcgYGBpZgogICAgIF9fbmFtZV9fID09ICdfX21haW5fXyc6YGAgYXMgZm9sbG93czo6CiAKLSAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQKKyAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUHJvY2VzcywgZnJlZXplX3N1cHBvcnQsIHNldF9zdGFydF9tZXRob2QKIAogICAgICAgIGRlZiBmb28oKToKICAgICAgICAgICAgcHJpbnQoJ2hlbGxvJykKIAogICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKyAgICAgICAgICAgc2V0X3N0YXJ0X21ldGhvZCgnc3Bhd24nKQogICAgICAgICAgICBwID0gUHJvY2Vzcyh0YXJnZXQ9Zm9vKQogICAgICAgICAgICBwLnN0YXJ0KCkKIApAQCAtMjQ4MiwyNiArMjc3Nyw3IEBACiAgICA6bGFuZ3VhZ2U6IHB5dGhvbjMKIAogCi1TeW5jaHJvbml6YXRpb24gdHlwZXMgbGlrZSBsb2NrcywgY29uZGl0aW9ucyBhbmQgcXVldWVzOgotCi0uLiBsaXRlcmFsaW5jbHVkZTo6IC4uL2luY2x1ZGVzL21wX3N5bmNocm9uaXplLnB5Ci0gICA6bGFuZ3VhZ2U6IHB5dGhvbjMKLQotCiBBbiBleGFtcGxlIHNob3dpbmcgaG93IHRvIHVzZSBxdWV1ZXMgdG8gZmVlZCB0YXNrcyB0byBhIGNvbGxlY3Rpb24gb2Ygd29ya2VyCiBwcm9jZXNzZXMgYW5kIGNvbGxlY3QgdGhlIHJlc3VsdHM6CiAKIC4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd29ya2Vycy5weQotCi0KLUFuIGV4YW1wbGUgb2YgaG93IGEgcG9vbCBvZiB3b3JrZXIgcHJvY2Vzc2VzIGNhbiBlYWNoIHJ1biBhCi06Y2xhc3M6YH5odHRwLnNlcnZlci5TaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXJgIGluc3RhbmNlIHdoaWxlIHNoYXJpbmcgYSBzaW5nbGUKLWxpc3RlbmluZyBzb2NrZXQuCi0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfd2Vic2VydmVyLnB5Ci0KLQotU29tZSBzaW1wbGUgYmVuY2htYXJrcyBjb21wYXJpbmcgOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCB3aXRoIDptb2Q6YHRocmVhZGluZ2A6Ci0KLS4uIGxpdGVyYWxpbmNsdWRlOjogLi4vaW5jbHVkZXMvbXBfYmVuY2htYXJrcy5weQotCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9uZXRyYy5yc3QgYi9Eb2MvbGlicmFyeS9uZXRyYy5yc3QKaW5kZXggNTY0ZjEwMS4uMjNmZmVkNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbmV0cmMucnN0CisrKyBiL0RvYy9saWJyYXJ5L25ldHJjLnJzdApAQCAtMjksNyArMjksNyBAQAogICAgVGhpcyBpbXBsZW1lbnRzIHNlY3VyaXR5IGJlaGF2aW9yIGVxdWl2YWxlbnQgdG8gdGhhdCBvZiBmdHAgYW5kIG90aGVyCiAgICBwcm9ncmFtcyB0aGF0IHVzZSA6ZmlsZTpgLm5ldHJjYC4KIAotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMuMyBBZGRlZCB0aGUgUE9TSVggcGVybWlzc2lvbiBjaGVjay4KKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40IEFkZGVkIHRoZSBQT1NJWCBwZXJtaXNzaW9uIGNoZWNrLgogCiAKIC4uIGV4Y2VwdGlvbjo6IE5ldHJjUGFyc2VFcnJvcgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbm50cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAppbmRleCBhMTVkN2Y3Li45ZmIxYjQ1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ubnRwbGliLnJzdApAQCAtMSw0ICsxLDMgQEAKLQogOm1vZDpgbm50cGxpYmAgLS0tIE5OVFAgcHJvdG9jb2wgY2xpZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNzAsOSArNjksOSBAQAogICAgY29ubmVjdGluZyB0byBhbiBOTlRQIHNlcnZlciBvbiB0aGUgbG9jYWwgbWFjaGluZSBhbmQgaW50ZW5kIHRvIGNhbGwKICAgIHJlYWRlci1zcGVjaWZpYyBjb21tYW5kcywgc3VjaCBhcyBgYGdyb3VwYGAuICBJZiB5b3UgZ2V0IHVuZXhwZWN0ZWQKICAgIDpleGM6YE5OVFBQZXJtYW5lbnRFcnJvcmBcIHMsIHlvdSBtaWdodCBuZWVkIHRvIHNldCAqcmVhZGVybW9kZSouCi0gICA6Y2xhc3M6YE5OVFBgIGNsYXNzIHN1cHBvcnRzIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHRvCi0gICB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBOTlRQCi0gICBjb25uZWN0aW9uIHdoZW4gZG9uZS4gSGVyZSBpcyBhIHNhbXBsZSBvbiBob3cgdXNpbmcgaXQ6CisgICBUaGUgOmNsYXNzOmBOTlRQYCBjbGFzcyBzdXBwb3J0cyB0aGUgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCB0bworICAgdW5jb25kaXRpb25hbGx5IGNvbnN1bWUgOmV4YzpgT1NFcnJvcmAgZXhjZXB0aW9ucyBhbmQgdG8gY2xvc2UgdGhlIE5OVFAKKyAgIGNvbm5lY3Rpb24gd2hlbiBkb25lLCBlLmcuOgogCiAgICAgPj4+IGZyb20gbm50cGxpYiBpbXBvcnQgTk5UUAogICAgID4+PiB3aXRoIE5OVFAoJ25ld3MuZ21hbmUub3JnJykgYXMgbjoKQEAgLTk1LDYgKzk0LDcgQEAKICAgIHBvcnQgKnBvcnQqLiAgOmNsYXNzOmBOTlRQX1NTTGAgb2JqZWN0cyBoYXZlIHRoZSBzYW1lIG1ldGhvZHMgYXMKICAgIDpjbGFzczpgTk5UUGAgb2JqZWN0cy4gIElmICpwb3J0KiBpcyBvbWl0dGVkLCBwb3J0IDU2MyAoTk5UUFMpIGlzIHVzZWQuCiAgICAqc3NsX2NvbnRleHQqIGlzIGFsc28gb3B0aW9uYWwsIGFuZCBpcyBhIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCBvYmplY3QuCisgICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvciBiZXN0IHByYWN0aWNlcy4KICAgIEFsbCBvdGhlciBwYXJhbWV0ZXJzIGJlaGF2ZSB0aGUgc2FtZSBhcyBmb3IgOmNsYXNzOmBOTlRQYC4KIAogICAgTm90ZSB0aGF0IFNTTC1vbi01NjMgaXMgZGlzY291cmFnZWQgcGVyIDpyZmM6YDQ2NDJgLCBpbiBmYXZvciBvZgpAQCAtMTAzLDYgKzEwMywxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgogCiAuLiBleGNlcHRpb246OiBOTlRQRXJyb3IKIApAQCAtMjMxLDkgKzIzNSwxMCBAQAogCiAuLiBtZXRob2Q6OiBOTlRQLnN0YXJ0dGxzKHNzbF9jb250ZXh0PU5vbmUpCiAKLSAgIFNlbmQgYSBgYFNUQVJUVExTYGAgY29tbWFuZC4gIFRoZSAqc3NsX2NvbnRleHQqIGFyZ3VtZW50IGlzIG9wdGlvbmFsCi0gICBhbmQgc2hvdWxkIGJlIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0LiAgVGhpcyB3aWxsIGVuYWJsZQotICAgZW5jcnlwdGlvbiBvbiB0aGUgTk5UUCBjb25uZWN0aW9uLgorICAgU2VuZCBhIGBgU1RBUlRUTFNgYCBjb21tYW5kLiAgVGhpcyB3aWxsIGVuYWJsZSBlbmNyeXB0aW9uIG9uIHRoZSBOTlRQCisgICBjb25uZWN0aW9uLiAgVGhlICpzc2xfY29udGV4dCogYXJndW1lbnQgaXMgb3B0aW9uYWwgYW5kIHNob3VsZCBiZSBhCisgICA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3QuICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgIGZvciBiZXN0CisgICBwcmFjdGljZXMuCiAKICAgIE5vdGUgdGhhdCB0aGlzIG1heSBub3QgYmUgZG9uZSBhZnRlciBhdXRoZW50aWNhdGlvbiBpbmZvcm1hdGlvbiBoYXMKICAgIGJlZW4gdHJhbnNtaXR0ZWQsIGFuZCBhdXRoZW50aWNhdGlvbiBvY2N1cnMgYnkgZGVmYXVsdCBpZiBwb3NzaWJsZSBkdXJpbmcgYQpAQCAtMjQyLDYgKzI0NywxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBtZXRob2Qgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAogLi4gbWV0aG9kOjogTk5UUC5uZXdncm91cHMoZGF0ZSwgKiwgZmlsZT1Ob25lKQogCkBAIC0zMzIsNyArMzQxLDcgQEAKIAogLi4gbWV0aG9kOjogTk5UUC5vdmVyKG1lc3NhZ2Vfc3BlYywgKiwgZmlsZT1Ob25lKQogCi0gICBTZW5kIGEgYGBPVkVSYGAgY29tbWFuZCwgb3IgYSBgYFhPVkVSYGAgY29tbWFuZCBvbiBsZWdhY3kgc2VydmVycy4KKyAgIFNlbmQgYW4gYGBPVkVSYGAgY29tbWFuZCwgb3IgYW4gYGBYT1ZFUmBgIGNvbW1hbmQgb24gbGVnYWN5IHNlcnZlcnMuCiAgICAqbWVzc2FnZV9zcGVjKiBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG1lc3NhZ2UgaWQsIG9yCiAgICBhIGBgKGZpcnN0LCBsYXN0KWBgIHR1cGxlIG9mIG51bWJlcnMgaW5kaWNhdGluZyBhIHJhbmdlIG9mIGFydGljbGVzIGluCiAgICB0aGUgY3VycmVudCBncm91cCwgb3IgYSBgYChmaXJzdCwgTm9uZSlgYCB0dXBsZSBpbmRpY2F0aW5nIGEgcmFuZ2Ugb2YKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L251bWJlcnMucnN0IGIvRG9jL2xpYnJhcnkvbnVtYmVycy5yc3QKaW5kZXggZmVjMDRlZC4uOGFiMDdkMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvbnVtYmVycy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvbnVtYmVycy5yc3QKQEAgLTExMCw2ICsxMTAsOCBAQAogICAgIE15Rm9vLnJlZ2lzdGVyKFJlYWwpCiAKIAorLi4gX2ltcGxlbWVudGluZy10aGUtYXJpdGhtZXRpYy1vcGVyYXRpb25zOgorCiBJbXBsZW1lbnRpbmcgdGhlIGFyaXRobWV0aWMgb3BlcmF0aW9ucwogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvbnVtZXJpYy5yc3QgYi9Eb2MvbGlicmFyeS9udW1lcmljLnJzdAppbmRleCAyNzMyYTg0Li43Yzc2YTQ3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9udW1lcmljLnJzdAorKysgYi9Eb2MvbGlicmFyeS9udW1lcmljLnJzdApAQCAtMjMsMyArMjMsNCBAQAogICAgZGVjaW1hbC5yc3QKICAgIGZyYWN0aW9ucy5yc3QKICAgIHJhbmRvbS5yc3QKKyAgIHN0YXRpc3RpY3MucnN0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QgYi9Eb2MvbGlicmFyeS9vcGVyYXRvci5yc3QKaW5kZXggMjRiZWNmOS4uZjllMmEzZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3BlcmF0b3IucnN0CisrKyBiL0RvYy9saWJyYXJ5L29wZXJhdG9yLnJzdApAQCAtMTEsNiArMTEsOSBAQAogICAgaW1wb3J0IG9wZXJhdG9yCiAgICBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyLCBpYWRkCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL29wZXJhdG9yLnB5YAorCistLS0tLS0tLS0tLS0tLQogCiBUaGUgOm1vZDpgb3BlcmF0b3JgIG1vZHVsZSBleHBvcnRzIGEgc2V0IG9mIGVmZmljaWVudCBmdW5jdGlvbnMgY29ycmVzcG9uZGluZyB0bwogdGhlIGludHJpbnNpYyBvcGVyYXRvcnMgb2YgUHl0aG9uLiAgRm9yIGV4YW1wbGUsIGBgb3BlcmF0b3IuYWRkKHgsIHkpYGAgaXMKQEAgLTIyNSwxNSArMjI4LDE0IEBACiAKICAgIFNldCB0aGUgdmFsdWUgb2YgKmEqIGF0IGluZGV4ICpiKiB0byAqYyouCiAKLUV4YW1wbGU6IEJ1aWxkIGEgZGljdGlvbmFyeSB0aGF0IG1hcHMgdGhlIG9yZGluYWxzIGZyb20gYGAwYGAgdG8gYGAyNTVgYCB0bwotdGhlaXIgY2hhcmFjdGVyIGVxdWl2YWxlbnRzLgogCi0gICA+Pj4gZCA9IHt9Ci0gICA+Pj4ga2V5cyA9IHJhbmdlKDI1NikKLSAgID4+PiB2YWxzID0gbWFwKGNociwga2V5cykKLSAgID4+PiBtYXAob3BlcmF0b3Iuc2V0aXRlbSwgW2RdKmxlbihrZXlzKSwga2V5cywgdmFscykgICAjIGRvY3Rlc3Q6ICtTS0lQCisuLiBmdW5jdGlvbjo6IGxlbmd0aF9oaW50KG9iaiwgZGVmYXVsdD0wKQogCi0uLiBYWFg6IGZpbmQgYSBiZXR0ZXIsIHJlYWRhYmxlLCBleGFtcGxlCisgICBSZXR1cm4gYW4gZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAqbyouIEZpcnN0IHRyeSB0byByZXR1cm4gaXRzCisgICBhY3R1YWwgbGVuZ3RoLCB0aGVuIGFuIGVzdGltYXRlIHVzaW5nIDptZXRoOmBvYmplY3QuX19sZW5ndGhfaGludF9fYCwgYW5kCisgICBmaW5hbGx5IHJldHVybiB0aGUgZGVmYXVsdCB2YWx1ZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CiAKIFRoZSA6bW9kOmBvcGVyYXRvcmAgbW9kdWxlIGFsc28gZGVmaW5lcyB0b29scyBmb3IgZ2VuZXJhbGl6ZWQgYXR0cmlidXRlIGFuZCBpdGVtCiBsb29rdXBzLiAgVGhlc2UgYXJlIHVzZWZ1bCBmb3IgbWFraW5nIGZhc3QgZmllbGQgZXh0cmFjdG9ycyBhcyBhcmd1bWVudHMgZm9yCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9vcHRwYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS9vcHRwYXJzZS5yc3QKaW5kZXggMTMzOTViNi4uMTYwYzI5ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3B0cGFyc2UucnN0CisrKyBiL0RvYy9saWJyYXJ5L29wdHBhcnNlLnJzdApAQCAtOCw4ICs4LDggQEAKIC4uIHNlY3Rpb25hdXRob3I6OiBHcmVnIFdhcmQgPGd3YXJkQHB5dGhvbi5uZXQ+CiAKIC4uIGRlcHJlY2F0ZWQ6OiAzLjIKLSAgVGhlIDptb2Q6YG9wdHBhcnNlYCBtb2R1bGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBub3QgYmUgZGV2ZWxvcGVkIGZ1cnRoZXI7Ci0gIGRldmVsb3BtZW50IHdpbGwgY29udGludWUgd2l0aCB0aGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZS4KKyAgIFRoZSA6bW9kOmBvcHRwYXJzZWAgbW9kdWxlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgbm90IGJlIGRldmVsb3BlZCBmdXJ0aGVyOworICAgZGV2ZWxvcG1lbnQgd2lsbCBjb250aW51ZSB3aXRoIHRoZSA6bW9kOmBhcmdwYXJzZWAgbW9kdWxlLgogCiAqKlNvdXJjZSBjb2RlOioqIDpzb3VyY2U6YExpYi9vcHRwYXJzZS5weWAKIApAQCAtMTMyNCw3ICsxMzI0LDcgQEAKICAgIHRoZSBsaXN0IG9mIGFyZ3VtZW50cyB0byBwcm9jZXNzIChkZWZhdWx0OiBgYHN5cy5hcmd2WzE6XWBgKQogCiBgYHZhbHVlc2BgCi0gICBhIDpjbGFzczpgb3B0cGFyc2UuVmFsdWVzYCBvYmplY3QgdG8gc3RvcmUgb3B0aW9uIGFyZ3VtZW50cyBpbiAoZGVmYXVsdDogYQorICAgYW4gOmNsYXNzOmBvcHRwYXJzZS5WYWx1ZXNgIG9iamVjdCB0byBzdG9yZSBvcHRpb24gYXJndW1lbnRzIGluIChkZWZhdWx0OiBhCiAgICBuZXcgaW5zdGFuY2Ugb2YgOmNsYXNzOmBWYWx1ZXNgKSAtLSBpZiB5b3UgZ2l2ZSBhbiBleGlzdGluZyBvYmplY3QsIHRoZQogICAgb3B0aW9uIGRlZmF1bHRzIHdpbGwgbm90IGJlIGluaXRpYWxpemVkIG9uIGl0CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29zLnBhdGgucnN0IGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKaW5kZXggNTdhNmJjYS4uMzNlZjU2NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3MucGF0aC5yc3QKQEAgLTIyLDYgKzIyLDExIEBACiBleHBsaWNpdGx5IHdoZW4gYW4gYXBwbGljYXRpb24gZGVzaXJlcyBzaGVsbC1saWtlIHBhdGggZXhwYW5zaW9uLiAgKFNlZSBhbHNvCiB0aGUgOm1vZDpgZ2xvYmAgbW9kdWxlLikKIAorCisuLiBzZWVhbHNvOjoKKyAgIFRoZSA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGhpZ2gtbGV2ZWwgcGF0aCBvYmplY3RzLgorCisKIC4uIG5vdGU6OgogCiAgICBBbGwgb2YgdGhlc2UgZnVuY3Rpb25zIGFjY2VwdCBlaXRoZXIgb25seSBieXRlcyBvciBvbmx5IHN0cmluZyBvYmplY3RzIGFzCkBAIC00Miw3ICs0Nyw2IEBACiAgICAqIDptb2Q6YHBvc2l4cGF0aGAgZm9yIFVOSVgtc3R5bGUgcGF0aHMKICAgICogOm1vZDpgbnRwYXRoYCBmb3IgV2luZG93cyBwYXRocwogICAgKiA6bW9kOmBtYWNwYXRoYCBmb3Igb2xkLXN0eWxlIE1hY09TIHBhdGhzCi0gICAqIDptb2Q6YG9zMmVteHBhdGhgIGZvciBPUy8yIEVNWCBwYXRocwogCiAKIC4uIGZ1bmN0aW9uOjogYWJzcGF0aChwYXRoKQpAQCAtMTg0LDI5ICsxODgsNDAgQEAKIC4uIGZ1bmN0aW9uOjogaXNsaW5rKHBhdGgpCiAKICAgIFJldHVybiBgYFRydWVgYCBpZiAqcGF0aCogcmVmZXJzIHRvIGEgZGlyZWN0b3J5IGVudHJ5IHRoYXQgaXMgYSBzeW1ib2xpYyBsaW5rLgotICAgQWx3YXlzIGBgRmFsc2VgYCBpZiBzeW1ib2xpYyBsaW5rcyBhcmUgbm90IHN1cHBvcnRlZC4KKyAgIEFsd2F5cyBgYEZhbHNlYGAgaWYgc3ltYm9saWMgbGlua3MgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHB5dGhvbiBydW50aW1lLgogCiAKIC4uIGZ1bmN0aW9uOjogaXNtb3VudChwYXRoKQogCi0gICBSZXR1cm4gYGBUcnVlYGAgaWYgcGF0aG5hbWUgKnBhdGgqIGlzIGEgOmRmbjpgbW91bnQgcG9pbnRgOiBhIHBvaW50IGluIGEgZmlsZQotICAgc3lzdGVtIHdoZXJlIGEgZGlmZmVyZW50IGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuICBUaGUgZnVuY3Rpb24gY2hlY2tzCi0gICB3aGV0aGVyICpwYXRoKidzIHBhcmVudCwgOmZpbGU6YHBhdGgvLi5gLCBpcyBvbiBhIGRpZmZlcmVudCBkZXZpY2UgdGhhbiAqcGF0aCosCi0gICBvciB3aGV0aGVyIDpmaWxlOmBwYXRoLy4uYCBhbmQgKnBhdGgqIHBvaW50IHRvIHRoZSBzYW1lIGktbm9kZSBvbiB0aGUgc2FtZQotICAgZGV2aWNlIC0tLSB0aGlzIHNob3VsZCBkZXRlY3QgbW91bnQgcG9pbnRzIGZvciBhbGwgVW5peCBhbmQgUE9TSVggdmFyaWFudHMuCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgcGF0aG5hbWUgKnBhdGgqIGlzIGEgOmRmbjpgbW91bnQgcG9pbnRgOiBhIHBvaW50IGluIGEKKyAgIGZpbGUgc3lzdGVtIHdoZXJlIGEgZGlmZmVyZW50IGZpbGUgc3lzdGVtIGhhcyBiZWVuIG1vdW50ZWQuICBPbiBQT1NJWCwgdGhlCisgICBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciAqcGF0aConcyBwYXJlbnQsIDpmaWxlOmBwYXRoLy4uYCwgaXMgb24gYSBkaWZmZXJlbnQKKyAgIGRldmljZSB0aGFuICpwYXRoKiwgb3Igd2hldGhlciA6ZmlsZTpgcGF0aC8uLmAgYW5kICpwYXRoKiBwb2ludCB0byB0aGUgc2FtZQorICAgaS1ub2RlIG9uIHRoZSBzYW1lIGRldmljZSAtLS0gdGhpcyBzaG91bGQgZGV0ZWN0IG1vdW50IHBvaW50cyBmb3IgYWxsIFVuaXgKKyAgIGFuZCBQT1NJWCB2YXJpYW50cy4gIE9uIFdpbmRvd3MsIGEgZHJpdmUgbGV0dGVyIHJvb3QgYW5kIGEgc2hhcmUgVU5DIGFyZQorICAgYWx3YXlzIG1vdW50IHBvaW50cywgYW5kIGZvciBhbnkgb3RoZXIgcGF0aCBgYEdldFZvbHVtZVBhdGhOYW1lYGAgaXMgY2FsbGVkCisgICB0byBzZWUgaWYgaXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIGlucHV0IHBhdGguCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgU3VwcG9ydCBmb3IgZGV0ZWN0aW5nIG5vbi1yb290IG1vdW50IHBvaW50cyBvbiBXaW5kb3dzLgogCiAKLS4uIGZ1bmN0aW9uOjogam9pbihwYXRoMVssIHBhdGgyWywgLi4uXV0pCisuLiBmdW5jdGlvbjo6IGpvaW4ocGF0aCwgKnBhdGhzKQogCi0gICBKb2luIG9uZSBvciBtb3JlIHBhdGggY29tcG9uZW50cyBpbnRlbGxpZ2VudGx5LiAgSWYgYW55IGNvbXBvbmVudCBpcyBhbiBhYnNvbHV0ZQotICAgcGF0aCwgYWxsIHByZXZpb3VzIGNvbXBvbmVudHMgKG9uIFdpbmRvd3MsIGluY2x1ZGluZyB0aGUgcHJldmlvdXMgZHJpdmUgbGV0dGVyLAotICAgaWYgdGhlcmUgd2FzIG9uZSkgYXJlIHRocm93biBhd2F5LCBhbmQgam9pbmluZyBjb250aW51ZXMuICBUaGUgcmV0dXJuIHZhbHVlIGlzCi0gICB0aGUgY29uY2F0ZW5hdGlvbiBvZiAqcGF0aDEqLCBhbmQgb3B0aW9uYWxseSAqcGF0aDIqLCBldGMuLCB3aXRoIGV4YWN0bHkgb25lCi0gICBkaXJlY3Rvcnkgc2VwYXJhdG9yIChgYG9zLnNlcGBgKSBmb2xsb3dpbmcgZWFjaCBub24tZW1wdHkgcGFydCBleGNlcHQgdGhlIGxhc3QuCi0gICAoVGhpcyBtZWFucyB0aGF0IGFuIGVtcHR5IGxhc3QgcGFydCB3aWxsIHJlc3VsdCBpbiBhIHBhdGggdGhhdCBlbmRzIHdpdGggYQotICAgc2VwYXJhdG9yLikgIE5vdGUgdGhhdCBvbiBXaW5kb3dzLCBzaW5jZSB0aGVyZSBpcyBhIGN1cnJlbnQgZGlyZWN0b3J5IGZvcgotICAgZWFjaCBkcml2ZSwgYGBvcy5wYXRoLmpvaW4oImM6IiwgImZvbyIpYGAgcmVwcmVzZW50cyBhIHBhdGggcmVsYXRpdmUgdG8gdGhlCi0gICBjdXJyZW50IGRpcmVjdG9yeSBvbiBkcml2ZSA6ZmlsZTpgQzpgICg6ZmlsZTpgYzpmb29gKSwgbm90IDpmaWxlOmBjOlxcZm9vYC4KKyAgIEpvaW4gb25lIG9yIG1vcmUgcGF0aCBjb21wb25lbnRzIGludGVsbGlnZW50bHkuICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZQorICAgY29uY2F0ZW5hdGlvbiBvZiAqcGF0aCogYW5kIGFueSBtZW1iZXJzIG9mICpcKnBhdGhzKiB3aXRoIGV4YWN0bHkgb25lCisgICBkaXJlY3Rvcnkgc2VwYXJhdG9yIChgYG9zLnNlcGBgKSBmb2xsb3dpbmcgZWFjaCBub24tZW1wdHkgcGFydCBleGNlcHQgdGhlCisgICBsYXN0LCBtZWFuaW5nIHRoYXQgdGhlIHJlc3VsdCB3aWxsIG9ubHkgZW5kIGluIGEgc2VwYXJhdG9yIGlmIHRoZSBsYXN0CisgICBwYXJ0IGlzIGVtcHR5LiAgSWYgYSBjb21wb25lbnQgaXMgYW4gYWJzb2x1dGUgcGF0aCwgYWxsIHByZXZpb3VzCisgICBjb21wb25lbnRzIGFyZSB0aHJvd24gYXdheSBhbmQgam9pbmluZyBjb250aW51ZXMgZnJvbSB0aGUgYWJzb2x1dGUgcGF0aAorICAgY29tcG9uZW50LgorCisgICBPbiBXaW5kb3dzLCB0aGUgZHJpdmUgbGV0dGVyIGlzIG5vdCByZXNldCB3aGVuIGFuIGFic29sdXRlIHBhdGggY29tcG9uZW50CisgICAoZS5nLiwgYGByJ1xmb28nYGApIGlzIGVuY291bnRlcmVkLiAgSWYgYSBjb21wb25lbnQgY29udGFpbnMgYSBkcml2ZQorICAgbGV0dGVyLCBhbGwgcHJldmlvdXMgY29tcG9uZW50cyBhcmUgdGhyb3duIGF3YXkgYW5kIHRoZSBkcml2ZSBsZXR0ZXIgaXMKKyAgIHJlc2V0LiAgTm90ZSB0aGF0IHNpbmNlIHRoZXJlIGlzIGEgY3VycmVudCBkaXJlY3RvcnkgZm9yIGVhY2ggZHJpdmUsCisgICBgYG9zLnBhdGguam9pbigiYzoiLCAiZm9vIilgYCByZXByZXNlbnRzIGEgcGF0aCByZWxhdGl2ZSB0byB0aGUgY3VycmVudAorICAgZGlyZWN0b3J5IG9uIGRyaXZlIDpmaWxlOmBDOmAgKDpmaWxlOmBjOmZvb2ApLCBub3QgOmZpbGU6YGM6XFxmb29gLgogCiAKIC4uIGZ1bmN0aW9uOjogbm9ybWNhc2UocGF0aCkKQEAgLTIzMiw3ICsyNDcsNyBAQAogICAgbGlua3MgZW5jb3VudGVyZWQgaW4gdGhlIHBhdGggKGlmIHRoZXkgYXJlIHN1cHBvcnRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSkuCiAKIAotLi4gZnVuY3Rpb246OiByZWxwYXRoKHBhdGgsIHN0YXJ0PU5vbmUpCisuLiBmdW5jdGlvbjo6IHJlbHBhdGgocGF0aCwgc3RhcnQ9b3MuY3VyZGlyKQogCiAgICBSZXR1cm4gYSByZWxhdGl2ZSBmaWxlcGF0aCB0byAqcGF0aCogZWl0aGVyIGZyb20gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yCiAgICBmcm9tIGFuIG9wdGlvbmFsICpzdGFydCogZGlyZWN0b3J5LiAgVGhpcyBpcyBhIHBhdGggY29tcHV0YXRpb246ICB0aGUKQEAgLTI0NywxOCArMjYyLDE3IEBACiAuLiBmdW5jdGlvbjo6IHNhbWVmaWxlKHBhdGgxLCBwYXRoMikKIAogICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIGJvdGggcGF0aG5hbWUgYXJndW1lbnRzIHJlZmVyIHRvIHRoZSBzYW1lIGZpbGUgb3IgZGlyZWN0b3J5LgotICAgT24gVW5peCwgdGhpcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBpLW5vZGUgbnVtYmVyIGFuZCByYWlzZXMgYW4KLSAgIGV4Y2VwdGlvbiBpZiBhIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KLQotICAgT24gV2luZG93cywgdHdvIGZpbGVzIGFyZSB0aGUgc2FtZSBpZiB0aGV5IHJlc29sdmUgdG8gdGhlIHNhbWUgZmluYWwgcGF0aAotICAgbmFtZSB1c2luZyB0aGUgV2luZG93cyBBUEkgY2FsbCBHZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUuIFRoaXMgZnVuY3Rpb24KLSAgIHJhaXNlcyBhbiBleGNlcHRpb24gaWYgaGFuZGxlcyBjYW5ub3QgYmUgb2J0YWluZWQgdG8gZWl0aGVyIGZpbGUuCisgICBUaGlzIGlzIGRldGVybWluZWQgYnkgdGhlIGRldmljZSBudW1iZXIgYW5kIGktbm9kZSBudW1iZXIgYW5kIHJhaXNlcyBhbgorICAgZXhjZXB0aW9uIGlmIGFuIDpmdW5jOmBvcy5zdGF0YCBjYWxsIG9uIGVpdGhlciBwYXRobmFtZSBmYWlscy4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgQWRkZWQgV2luZG93cyBzdXBwb3J0LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgV2luZG93cyBub3cgdXNlcyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyBhbGwgb3RoZXIgcGxhdGZvcm1zLgorCiAKIC4uIGZ1bmN0aW9uOjogc2FtZW9wZW5maWxlKGZwMSwgZnAyKQogCkBAIC0yNzcsNyArMjkxLDEwIEBACiAgICA6ZnVuYzpgb3MubHN0YXRgLCBvciA6ZnVuYzpgb3Muc3RhdGAuICBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlCiAgICB1bmRlcmx5aW5nIGNvbXBhcmlzb24gdXNlZCBieSA6ZnVuYzpgc2FtZWZpbGVgIGFuZCA6ZnVuYzpgc2FtZW9wZW5maWxlYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4LgorICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgV2luZG93cyBzdXBwb3J0LgogCiAKIC4uIGZ1bmN0aW9uOjogc3BsaXQocGF0aCkKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L29zLnJzdCBiL0RvYy9saWJyYXJ5L29zLnJzdAppbmRleCBkN2I5ODI5Li43YmM1OTg5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9vcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvb3MucnN0CkBAIC01Myw4ICs1Myw4IEBACiAuLiBkYXRhOjogbmFtZQogCiAgICBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQgbW9kdWxlIGltcG9ydGVkLiAgVGhlIGZvbGxvd2luZwotICAgbmFtZXMgaGF2ZSBjdXJyZW50bHkgYmVlbiByZWdpc3RlcmVkOiBgYCdwb3NpeCdgYCwgYGAnbnQnYGAsIGBgJ21hYydgYCwKLSAgIGBgJ29zMidgYCwgYGAnY2UnYGAsIGBgJ2phdmEnYGAuCisgICBuYW1lcyBoYXZlIGN1cnJlbnRseSBiZWVuIHJlZ2lzdGVyZWQ6IGBgJ3Bvc2l4J2BgLCBgYCdudCdgYCwKKyAgIGBgJ2NlJ2BgLCBgYCdqYXZhJ2BgLgogCiAgICAuLiBzZWVhbHNvOjoKICAgICAgIDphdHRyOmBzeXMucGxhdGZvcm1gIGhhcyBhIGZpbmVyIGdyYW51bGFyaXR5LiAgOmZ1bmM6YG9zLnVuYW1lYCBnaXZlcwpAQCAtNjUsNiArNjUsNyBAQAogCiAKIC4uIF9vcy1maWxlbmFtZXM6CisuLiBfZmlsZXN5c3RlbS1lbmNvZGluZzoKIAogRmlsZSBOYW1lcywgQ29tbWFuZCBMaW5lIEFyZ3VtZW50cywgYW5kIEVudmlyb25tZW50IFZhcmlhYmxlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjgwLDEwICsyODEsMTAgQEAKIC4uIGZ1bmN0aW9uOjogZ2V0bG9naW4oKQogCiAgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHVzZXIgbG9nZ2VkIGluIG9uIHRoZSBjb250cm9sbGluZyB0ZXJtaW5hbCBvZiB0aGUKLSAgIHByb2Nlc3MuICBGb3IgbW9zdCBwdXJwb3NlcywgaXQgaXMgbW9yZSB1c2VmdWwgdG8gdXNlIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLSAgIDplbnZ2YXI6YExPR05BTUVgIG9yIDplbnZ2YXI6YFVTRVJOQU1FYCB0byBmaW5kIG91dCB3aG8gdGhlIHVzZXIgaXMsIG9yCi0gICBgYHB3ZC5nZXRwd3VpZChvcy5nZXR1aWQoKSlbMF1gYCB0byBnZXQgdGhlIGxvZ2luIG5hbWUgb2YgdGhlIGN1cnJlbnRseQotICAgZWZmZWN0aXZlIHVzZXIgaWQuCisgICBwcm9jZXNzLiAgRm9yIG1vc3QgcHVycG9zZXMsIGl0IGlzIG1vcmUgdXNlZnVsIHRvIHVzZSB0aGUgZW52aXJvbm1lbnQKKyAgIHZhcmlhYmxlcyA6ZW52dmFyOmBMT0dOQU1FYCBvciA6ZW52dmFyOmBVU0VSTkFNRWAgdG8gZmluZCBvdXQgd2hvIHRoZSB1c2VyCisgICBpcywgb3IgYGBwd2QuZ2V0cHd1aWQob3MuZ2V0dWlkKCkpWzBdYGAgdG8gZ2V0IHRoZSBsb2dpbiBuYW1lIG9mIHRoZSBjdXJyZW50CisgICByZWFsIHVzZXIgaWQuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peCwgV2luZG93cy4KIApAQCAtMzc5LDcgKzM4MCw3IEBACiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiB1c2VyOyBpZAogCi0gICBSZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcydzIHVzZXIgaWQuCisgICBSZXR1cm4gdGhlIGN1cnJlbnQgcHJvY2VzcydzIHJlYWwgdXNlciBpZC4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCkBAIC02ODcsMTcgKzY4OCwzMCBAQAogCiAuLiBmdW5jdGlvbjo6IGR1cChmZCkKIAotICAgUmV0dXJuIGEgZHVwbGljYXRlIG9mIGZpbGUgZGVzY3JpcHRvciAqZmQqLgorICAgUmV0dXJuIGEgZHVwbGljYXRlIG9mIGZpbGUgZGVzY3JpcHRvciAqZmQqLiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcworICAgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICBPbiBXaW5kb3dzLCB3aGVuIGR1cGxpY2F0aW5nIGEgc3RhbmRhcmQgc3RyZWFtICgwOiBzdGRpbiwgMTogc3Rkb3V0LAorICAgMjogc3RkZXJyKSwgdGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgaW5oZXJpdGFibGUKKyAgIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgogCi0uLiBmdW5jdGlvbjo6IGR1cDIoZmQsIGZkMikKKworLi4gZnVuY3Rpb246OiBkdXAyKGZkLCBmZDIsIGluaGVyaXRhYmxlPVRydWUpCiAKICAgIER1cGxpY2F0ZSBmaWxlIGRlc2NyaXB0b3IgKmZkKiB0byAqZmQyKiwgY2xvc2luZyB0aGUgbGF0dGVyIGZpcnN0IGlmIG5lY2Vzc2FyeS4KKyAgIFRoZSBmaWxlIGRlc2NyaXB0b3IgKmZkMiogaXMgOnJlZjpgaW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAgYnkgZGVmYXVsdCwKKyAgIG9yIG5vbi1pbmhlcml0YWJsZSBpZiAqaW5oZXJpdGFibGUqIGlzIGBgRmFsc2VgYC4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkIHRoZSBvcHRpb25hbCAqaW5oZXJpdGFibGUqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IGZjaG1vZChmZCwgbW9kZSkKIApAQCAtNzUxLDggKzc2NSwxNCBAQAogCiAuLiBmdW5jdGlvbjo6IGZzdGF0KGZkKQogCi0gICBSZXR1cm4gc3RhdHVzIGZvciBmaWxlIGRlc2NyaXB0b3IgKmZkKiwgbGlrZSA6ZnVuYzpgfm9zLnN0YXRgLiAgQXMgb2YgUHl0aG9uCi0gICAzLjMsIHRoaXMgaXMgZXF1aXZhbGVudCB0byBgYG9zLnN0YXQoZmQpYGAuCisgICBHZXQgdGhlIHN0YXR1cyBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yICpmZCouIFJldHVybiBhIDpjbGFzczpgc3RhdF9yZXN1bHRgCisgICBvYmplY3QuCisKKyAgIEFzIG9mIFB5dGhvbiAzLjMsIHRoaXMgaXMgZXF1aXZhbGVudCB0byBgYG9zLnN0YXQoZmQpYGAuCisKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOmZ1bmM6YC5zdGF0YCBmdW5jdGlvbi4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCkBAIC04NDMsMjIgKzg2MywyNiBAQAogICAgICAgOmRhdGE6YG9zLlNFRUtfSE9MRWAgb3IgOmRhdGE6YG9zLlNFRUtfREFUQWAuCiAKIAotLi4gZnVuY3Rpb246OiBvcGVuKGZpbGUsIGZsYWdzLCBtb2RlPTBvNzc3LCAqLCBkaXJfZmQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogb3BlbihwYXRoLCBmbGFncywgbW9kZT0wbzc3NywgKiwgZGlyX2ZkPU5vbmUpCiAKLSAgIE9wZW4gdGhlIGZpbGUgKmZpbGUqIGFuZCBzZXQgdmFyaW91cyBmbGFncyBhY2NvcmRpbmcgdG8gKmZsYWdzKiBhbmQgcG9zc2libHkKKyAgIE9wZW4gdGhlIGZpbGUgKnBhdGgqIGFuZCBzZXQgdmFyaW91cyBmbGFncyBhY2NvcmRpbmcgdG8gKmZsYWdzKiBhbmQgcG9zc2libHkKICAgIGl0cyBtb2RlIGFjY29yZGluZyB0byAqbW9kZSouICBXaGVuIGNvbXB1dGluZyAqbW9kZSosIHRoZSBjdXJyZW50IHVtYXNrIHZhbHVlCiAgICBpcyBmaXJzdCBtYXNrZWQgb3V0LiAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBuZXdseSBvcGVuZWQgZmlsZS4KKyAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KIAogICAgRm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZsYWcgYW5kIG1vZGUgdmFsdWVzLCBzZWUgdGhlIEMgcnVuLXRpbWUgZG9jdW1lbnRhdGlvbjsKICAgIGZsYWcgY29uc3RhbnRzIChsaWtlIDpjb25zdDpgT19SRE9OTFlgIGFuZCA6Y29uc3Q6YE9fV1JPTkxZYCkgYXJlIGRlZmluZWQgaW4KLSAgIHRoaXMgbW9kdWxlIHRvbyAoc2VlIDpyZWY6YG9wZW4tY29uc3RhbnRzYCkuICBJbiBwYXJ0aWN1bGFyLCBvbiBXaW5kb3dzIGFkZGluZworICAgdGhlIDptb2Q6YG9zYCBtb2R1bGUuICBJbiBwYXJ0aWN1bGFyLCBvbiBXaW5kb3dzIGFkZGluZwogICAgOmNvbnN0OmBPX0JJTkFSWWAgaXMgbmVlZGVkIHRvIG9wZW4gZmlsZXMgaW4gYmluYXJ5IG1vZGUuCiAKICAgIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgOnJlZjpgcGF0aHMgcmVsYXRpdmUgdG8gZGlyZWN0b3J5IGRlc2NyaXB0b3JzCi0gICA8ZGlyX2ZkPmAuCisgICA8ZGlyX2ZkPmAgd2l0aCB0aGUgKmRpcl9mZCogcGFyYW1ldGVyLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAgICAuLiBub3RlOjoKIAogICAgICAgVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgbG93LWxldmVsIEkvTy4gIEZvciBub3JtYWwgdXNhZ2UsIHVzZSB0aGUKQEAgLTg2OSwyNSArODkzLDkzIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFRoZSAqZGlyX2ZkKiBhcmd1bWVudC4KIAorVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIG9wdGlvbnMgZm9yIHRoZSAqZmxhZ3MqIHBhcmFtZXRlciB0byB0aGUKKzpmdW5jOmB+b3Mub3BlbmAgZnVuY3Rpb24uICBUaGV5IGNhbiBiZSBjb21iaW5lZCB1c2luZyB0aGUgYml0d2lzZSBPUiBvcGVyYXRvcgorYGB8YGAuICBTb21lIG9mIHRoZW0gYXJlIG5vdCBhdmFpbGFibGUgb24gYWxsIHBsYXRmb3Jtcy4gIEZvciBkZXNjcmlwdGlvbnMgb2YKK3RoZWlyIGF2YWlsYWJpbGl0eSBhbmQgdXNlLCBjb25zdWx0IHRoZSA6bWFucGFnZTpgb3BlbigyKWAgbWFudWFsIHBhZ2Ugb24gVW5peAorb3IgYHRoZSBNU0ROIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvejBrYzhlM3ouYXNweD5gXyBvbiBXaW5kb3dzLgorCisKKy4uIGRhdGE6OiBPX1JET05MWQorICAgICAgICAgIE9fV1JPTkxZCisgICAgICAgICAgT19SRFdSCisgICAgICAgICAgT19BUFBFTkQKKyAgICAgICAgICBPX0NSRUFUCisgICAgICAgICAgT19FWENMCisgICAgICAgICAgT19UUlVOQworCisgICBUaGVzZSBjb25zdGFudHMgYXJlIGF2YWlsYWJsZSBvbiBVbml4IGFuZCBXaW5kb3dzLgorCisKKy4uIGRhdGE6OiBPX0RTWU5DCisgICAgICAgICAgT19SU1lOQworICAgICAgICAgIE9fU1lOQworICAgICAgICAgIE9fTkRFTEFZCisgICAgICAgICAgT19OT05CTE9DSworICAgICAgICAgIE9fTk9DVFRZCisgICAgICAgICAgT19TSExPQ0sKKyAgICAgICAgICBPX0VYTE9DSworICAgICAgICAgIE9fQ0xPRVhFQworCisgICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFVuaXguCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBBZGQgOmRhdGE6YE9fQ0xPRVhFQ2AgY29uc3RhbnQuCisKKy4uIGRhdGE6OiBPX0JJTkFSWQorICAgICAgICAgIE9fTk9JTkhFUklUCisgICAgICAgICAgT19TSE9SVF9MSVZFRAorICAgICAgICAgIE9fVEVNUE9SQVJZCisgICAgICAgICAgT19SQU5ET00KKyAgICAgICAgICBPX1NFUVVFTlRJQUwKKyAgICAgICAgICBPX1RFWFQKKworICAgVGhlc2UgY29uc3RhbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgorCisKKy4uIGRhdGE6OiBPX0FTWU5DCisgICAgICAgICAgT19ESVJFQ1QKKyAgICAgICAgICBPX0RJUkVDVE9SWQorICAgICAgICAgIE9fTk9GT0xMT1cKKyAgICAgICAgICBPX05PQVRJTUUKKyAgICAgICAgICBPX1BBVEgKKyAgICAgICAgICBPX1RNUEZJTEUKKworICAgVGhlc2UgY29uc3RhbnRzIGFyZSBHTlUgZXh0ZW5zaW9ucyBhbmQgbm90IHByZXNlbnQgaWYgdGhleSBhcmUgbm90IGRlZmluZWQgYnkKKyAgIHRoZSBDIGxpYnJhcnkuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGQgOmRhdGE6YE9fUEFUSGAgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQuCisgICAgICBBZGQgOmRhdGE6YE9fVE1QRklMRWAsIG9ubHkgYXZhaWxhYmxlIG9uIExpbnV4IEtlcm5lbCAzLjExCisgICAgICAgIG9yIG5ld2VyLgorCiAKIC4uIGZ1bmN0aW9uOjogb3BlbnB0eSgpCiAKICAgIC4uIGluZGV4OjogbW9kdWxlOiBwdHkKIAotICAgT3BlbiBhIG5ldyBwc2V1ZG8tdGVybWluYWwgcGFpci4gUmV0dXJuIGEgcGFpciBvZiBmaWxlIGRlc2NyaXB0b3JzIGBgKG1hc3RlciwKLSAgIHNsYXZlKWBgIGZvciB0aGUgcHR5IGFuZCB0aGUgdHR5LCByZXNwZWN0aXZlbHkuIEZvciBhIChzbGlnaHRseSkgbW9yZSBwb3J0YWJsZQotICAgYXBwcm9hY2gsIHVzZSB0aGUgOm1vZDpgcHR5YCBtb2R1bGUuCisgICBPcGVuIGEgbmV3IHBzZXVkby10ZXJtaW5hbCBwYWlyLiBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMKKyAgIGBgKG1hc3Rlciwgc2xhdmUpYGAgZm9yIHRoZSBwdHkgYW5kIHRoZSB0dHksIHJlc3BlY3RpdmVseS4gVGhlIG5ldyBmaWxlCisgICBkZXNjcmlwdG9ycyBhcmUgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLiBGb3IgYSAoc2xpZ2h0bHkpIG1vcmUKKyAgIHBvcnRhYmxlIGFwcHJvYWNoLCB1c2UgdGhlIDptb2Q6YHB0eWAgbW9kdWxlLgogCiAgICBBdmFpbGFiaWxpdHk6IHNvbWUgZmxhdm9ycyBvZiBVbml4LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogcGlwZSgpCiAKLSAgIENyZWF0ZSBhIHBpcGUuICBSZXR1cm4gYSBwYWlyIG9mIGZpbGUgZGVzY3JpcHRvcnMgYGAociwgdylgYCB1c2FibGUgZm9yIHJlYWRpbmcKLSAgIGFuZCB3cml0aW5nLCByZXNwZWN0aXZlbHkuCisgICBDcmVhdGUgYSBwaXBlLiAgUmV0dXJuIGEgcGFpciBvZiBmaWxlIGRlc2NyaXB0b3JzIGBgKHIsIHcpYGAgdXNhYmxlIGZvcgorICAgcmVhZGluZyBhbmQgd3JpdGluZywgcmVzcGVjdGl2ZWx5LiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcworICAgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBwaXBlMihmbGFncykKIApAQCAtOTUyLDEwICsxMDQ0LDEwIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBmdW5jdGlvbjo6IHB3cml0ZShmZCwgc3RyaW5nLCBvZmZzZXQpCisuLiBmdW5jdGlvbjo6IHB3cml0ZShmZCwgc3RyLCBvZmZzZXQpCiAKLSAgIFdyaXRlICpzdHJpbmcqIHRvIGEgZmlsZSBkZXNjcmlwdG9yLCAqZmQqLCBmcm9tICpvZmZzZXQqLCBsZWF2aW5nIHRoZSBmaWxlCi0gICBvZmZzZXQgdW5jaGFuZ2VkLgorICAgV3JpdGUgKmJ5dGVzdHJpbmcqIHRvIGEgZmlsZSBkZXNjcmlwdG9yLCAqZmQqLCBmcm9tICpvZmZzZXQqLAorICAgbGVhdmluZyB0aGUgZmlsZSBvZmZzZXQgdW5jaGFuZ2VkLgogCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKQEAgLTk3OSwxMCArMTA3MSwxMCBAQAogICAgICAgOm1ldGg6YH5maWxlLnJlYWRgIG9yIDptZXRoOmB+ZmlsZS5yZWFkbGluZWAgbWV0aG9kcy4KIAogCi0uLiBmdW5jdGlvbjo6IHNlbmRmaWxlKG91dCwgaW4sIG9mZnNldCwgbmJ5dGVzKQotICAgICAgICAgICAgICBzZW5kZmlsZShvdXQsIGluLCBvZmZzZXQsIG5ieXRlcywgaGVhZGVycz1Ob25lLCB0cmFpbGVycz1Ob25lLCBmbGFncz0wKQorLi4gZnVuY3Rpb246OiBzZW5kZmlsZShvdXQsIGluLCBvZmZzZXQsIGNvdW50KQorICAgICAgICAgICAgICBzZW5kZmlsZShvdXQsIGluLCBvZmZzZXQsIGNvdW50LCBbaGVhZGVyc10sIFt0cmFpbGVyc10sIGZsYWdzPTApCiAKLSAgIENvcHkgKm5ieXRlcyogYnl0ZXMgZnJvbSBmaWxlIGRlc2NyaXB0b3IgKmluKiB0byBmaWxlIGRlc2NyaXB0b3IgKm91dCoKKyAgIENvcHkgKmNvdW50KiBieXRlcyBmcm9tIGZpbGUgZGVzY3JpcHRvciAqaW4qIHRvIGZpbGUgZGVzY3JpcHRvciAqb3V0KgogICAgc3RhcnRpbmcgYXQgKm9mZnNldCouCiAgICBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBzZW50LiBXaGVuIEVPRiBpcyByZWFjaGVkIHJldHVybiAwLgogCkBAIC05OTYsMTIgKzEwODgsMTUgQEAKICAgICp0cmFpbGVycyogYXJlIGFyYml0cmFyeSBzZXF1ZW5jZXMgb2YgYnVmZmVycyB0aGF0IGFyZSB3cml0dGVuIGJlZm9yZSBhbmQKICAgIGFmdGVyIHRoZSBkYXRhIGZyb20gKmluKiBpcyB3cml0dGVuLiBJdCByZXR1cm5zIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCBjYXNlLgogCi0gICBPbiBNYWMgT1MgWCBhbmQgRnJlZUJTRCwgYSB2YWx1ZSBvZiAwIGZvciAqbmJ5dGVzKiBzcGVjaWZpZXMgdG8gc2VuZCB1bnRpbAorICAgT24gTWFjIE9TIFggYW5kIEZyZWVCU0QsIGEgdmFsdWUgb2YgMCBmb3IgKmNvdW50KiBzcGVjaWZpZXMgdG8gc2VuZCB1bnRpbAogICAgdGhlIGVuZCBvZiAqaW4qIGlzIHJlYWNoZWQuCiAKICAgIEFsbCBwbGF0Zm9ybXMgc3VwcG9ydCBzb2NrZXRzIGFzICpvdXQqIGZpbGUgZGVzY3JpcHRvciwgYW5kIHNvbWUgcGxhdGZvcm1zCiAgICBhbGxvdyBvdGhlciB0eXBlcyAoZS5nLiByZWd1bGFyIGZpbGUsIHBpcGUpIGFzIHdlbGwuCiAKKyAgIENyb3NzLXBsYXRmb3JtIGFwcGxpY2F0aW9ucyBzaG91bGQgbm90IHVzZSAqaGVhZGVycyosICp0cmFpbGVycyogYW5kICpmbGFncyoKKyAgIGFyZ3VtZW50cy4KKwogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKQEAgLTEwMjcsNyArMTEyMiw3IEBACiAgICBzZXF1ZW5jZSB0byBob2xkIHRoZSByZXN0IG9mIHRoZSBkYXRhLiA6ZnVuYzpgfm9zLnJlYWR2YCByZXR1cm5zIHRoZSB0b3RhbAogICAgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgKHdoaWNoIG1heSBiZSBsZXNzIHRoYW4gdGhlIHRvdGFsIGNhcGFjaXR5IG9mIGFsbCB0aGUKICAgIG9iamVjdHMpLgotICAgICAgICAgIAorCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwpAQCAtMTA4MCw4NCArMTE3NSwxMiBAQAogICAgc2VxdWVuY2Ugb2YgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YC4KICAgIDpmdW5jOmB+b3Mud3JpdGV2YCB3cml0ZXMgdGhlIGNvbnRlbnRzIG9mIGVhY2ggb2JqZWN0IHRvIHRoZSBmaWxlIGRlc2NyaXB0b3IKICAgIGFuZCByZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4KLSAgIAorCiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCiAKLS4uIF9vcGVuLWNvbnN0YW50czoKLQotYGBvcGVuKClgYCBmbGFnIGNvbnN0YW50cwotfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi1UaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgb3B0aW9ucyBmb3IgdGhlICpmbGFncyogcGFyYW1ldGVyIHRvIHRoZQotOmZ1bmM6YH5vcy5vcGVuYCBmdW5jdGlvbi4gIFRoZXkgY2FuIGJlIGNvbWJpbmVkIHVzaW5nIHRoZSBiaXR3aXNlIE9SIG9wZXJhdG9yCi1gYHxgYC4gIFNvbWUgb2YgdGhlbSBhcmUgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLiAgRm9yIGRlc2NyaXB0aW9ucyBvZgotdGhlaXIgYXZhaWxhYmlsaXR5IGFuZCB1c2UsIGNvbnN1bHQgdGhlIDptYW5wYWdlOmBvcGVuKDIpYCBtYW51YWwgcGFnZSBvbiBVbml4Ci1vciBgdGhlIE1TRE4gPGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS96MGtjOGUzei5hc3B4PmBfIG9uIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fUkRPTkxZCi0gICAgICAgICAgT19XUk9OTFkKLSAgICAgICAgICBPX1JEV1IKLSAgICAgICAgICBPX0FQUEVORAotICAgICAgICAgIE9fQ1JFQVQKLSAgICAgICAgICBPX0VYQ0wKLSAgICAgICAgICBPX1RSVU5DCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIG9uIFVuaXggYW5kIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fRFNZTkMKLSAgICAgICAgICBPX1JTWU5DCi0gICAgICAgICAgT19TWU5DCi0gICAgICAgICAgT19OREVMQVkKLSAgICAgICAgICBPX05PTkJMT0NLCi0gICAgICAgICAgT19OT0NUVFkKLSAgICAgICAgICBPX1NITE9DSwotICAgICAgICAgIE9fRVhMT0NLCi0gICAgICAgICAgT19DTE9FWEVDCi0KLSAgIFRoZXNlIGNvbnN0YW50cyBhcmUgb25seSBhdmFpbGFibGUgb24gVW5peC4KLQotICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIEFkZCA6ZGF0YTpgT19DTE9FWEVDYCBjb25zdGFudC4KLQotLi4gZGF0YTo6IE9fQklOQVJZCi0gICAgICAgICAgT19OT0lOSEVSSVQKLSAgICAgICAgICBPX1NIT1JUX0xJVkVECi0gICAgICAgICAgT19URU1QT1JBUlkKLSAgICAgICAgICBPX1JBTkRPTQotICAgICAgICAgIE9fU0VRVUVOVElBTAotICAgICAgICAgIE9fVEVYVAotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIG9ubHkgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCi0KLQotLi4gZGF0YTo6IE9fQVNZTkMKLSAgICAgICAgICBPX0RJUkVDVAotICAgICAgICAgIE9fRElSRUNUT1JZCi0gICAgICAgICAgT19OT0ZPTExPVwotICAgICAgICAgIE9fTk9BVElNRQotCi0gICBUaGVzZSBjb25zdGFudHMgYXJlIEdOVSBleHRlbnNpb25zIGFuZCBub3QgcHJlc2VudCBpZiB0aGV5IGFyZSBub3QgZGVmaW5lZCBieQotICAgdGhlIEMgbGlicmFyeS4KLQotCi0uLiBkYXRhOjogUlRMRF9MQVpZCi0gICAgICAgICAgUlRMRF9OT1cKLSAgICAgICAgICBSVExEX0dMT0JBTAotICAgICAgICAgIFJUTERfTE9DQUwKLSAgICAgICAgICBSVExEX05PREVMRVRFCi0gICAgICAgICAgUlRMRF9OT0xPQUQKLSAgICAgICAgICBSVExEX0RFRVBCSU5ECi0KLSAgIFNlZSB0aGUgVW5peCBtYW51YWwgcGFnZSA6bWFucGFnZTpgZGxvcGVuKDMpYC4KLQotICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCi0KLQogLi4gX3Rlcm1pbmFsLXNpemU6CiAKIFF1ZXJ5aW5nIHRoZSBzaXplIG9mIGEgdGVybWluYWwKQEAgLTExOTUsNiArMTIxOCw0OSBAQAogICAgICAgSGVpZ2h0IG9mIHRoZSB0ZXJtaW5hbCB3aW5kb3cgaW4gY2hhcmFjdGVycy4KIAogCisuLiBfZmRfaW5oZXJpdGFuY2U6CisKK0luaGVyaXRhbmNlIG9mIEZpbGUgRGVzY3JpcHRvcnMKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK0EgZmlsZSBkZXNjcmlwdG9yIGhhcyBhbiAiaW5oZXJpdGFibGUiIGZsYWcgd2hpY2ggaW5kaWNhdGVzIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IKK2NhbiBiZSBpbmhlcml0ZWQgYnkgY2hpbGQgcHJvY2Vzc2VzLiAgU2luY2UgUHl0aG9uIDMuNCwgZmlsZSBkZXNjcmlwdG9ycworY3JlYXRlZCBieSBQeXRob24gYXJlIG5vbi1pbmhlcml0YWJsZSBieSBkZWZhdWx0LgorCitPbiBVTklYLCBub24taW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9ycyBhcmUgY2xvc2VkIGluIGNoaWxkIHByb2Nlc3NlcyBhdCB0aGUKK2V4ZWN1dGlvbiBvZiBhIG5ldyBwcm9ncmFtLCBvdGhlciBmaWxlIGRlc2NyaXB0b3JzIGFyZSBpbmhlcml0ZWQuCisKK09uIFdpbmRvd3MsIG5vbi1pbmhlcml0YWJsZSBoYW5kbGVzIGFuZCBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaW4gY2hpbGQKK3Byb2Nlc3NlcywgZXhjZXB0IGZvciBzdGFuZGFyZCBzdHJlYW1zIChmaWxlIGRlc2NyaXB0b3JzIDAsIDEgYW5kIDI6IHN0ZGluLCBzdGRvdXQKK2FuZCBzdGRlcnIpLCB3aGljaCBhcmUgYWx3YXlzIGluaGVyaXRlZC4gIFVzaW5nIDpmdW5jOmBzcGF3blwqIDxzcGF3bmw+YCBmdW5jdGlvbnMsCithbGwgaW5oZXJpdGFibGUgaGFuZGxlcyBhbmQgYWxsIGluaGVyaXRhYmxlIGZpbGUgZGVzY3JpcHRvcnMgYXJlIGluaGVyaXRlZC4KK1VzaW5nIHRoZSA6bW9kOmBzdWJwcm9jZXNzYCBtb2R1bGUsIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGV4Y2VwdCBzdGFuZGFyZAorc3RyZWFtcyBhcmUgY2xvc2VkLCBhbmQgaW5oZXJpdGFibGUgaGFuZGxlcyBhcmUgb25seSBpbmhlcml0ZWQgaWYgdGhlCisqY2xvc2VfZmRzKiBwYXJhbWV0ZXIgaXMgYGBGYWxzZWBgLgorCisuLiBmdW5jdGlvbjo6IGdldF9pbmhlcml0YWJsZShmZCkKKworICAgR2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IgKGEgYm9vbGVhbikuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2luaGVyaXRhYmxlKGZkLCBpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSAiaW5oZXJpdGFibGUiIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisKKy4uIGZ1bmN0aW9uOjogZ2V0X2hhbmRsZV9pbmhlcml0YWJsZShoYW5kbGUpCisKKyAgIEdldCB0aGUgImluaGVyaXRhYmxlIiBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgaGFuZGxlIChhIGJvb2xlYW4pLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKy4uIGZ1bmN0aW9uOjogc2V0X2hhbmRsZV9pbmhlcml0YWJsZShoYW5kbGUsIGluaGVyaXRhYmxlKQorCisgICBTZXQgdGhlICJpbmhlcml0YWJsZSIgZmxhZyBvZiB0aGUgc3BlY2lmaWVkIGhhbmRsZS4KKworICAgQXZhaWxhYmlsaXR5OiBXaW5kb3dzLgorCisKIC4uIF9vcy1maWxlLWRpcjoKIAogRmlsZXMgYW5kIERpcmVjdG9yaWVzCkBAIC0xNTEzLDE3ICsxNTc5LDI1IEBACiAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBzcGVjaWZ5aW5nIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGZvciAqcGF0aCouCiAKIAotLi4gZnVuY3Rpb246OiBsc3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogbHN0YXQocGF0aCwgXCosIGRpcl9mZD1Ob25lKQogCiAgICBQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGFuIDpjOmZ1bmM6YGxzdGF0YCBzeXN0ZW0gY2FsbCBvbiB0aGUgZ2l2ZW4gcGF0aC4KLSAgIFNpbWlsYXIgdG8gOmZ1bmM6YH5vcy5zdGF0YCwgYnV0IGRvZXMgbm90IGZvbGxvdyBzeW1ib2xpYyBsaW5rcy4gIE9uCi0gICBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcywgdGhpcyBpcyBhbiBhbGlhcyBmb3IKLSAgIDpmdW5jOmB+b3Muc3RhdGAuICBBcyBvZiBQeXRob24gMy4zLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBvcy5zdGF0KHBhdGgsCi0gICBkaXJfZmQ9ZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpYGAuCisgICBTaW1pbGFyIHRvIDpmdW5jOmB+b3Muc3RhdGAsIGJ1dCBkb2VzIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3MuIFJldHVybiBhCisgICA6Y2xhc3M6YHN0YXRfcmVzdWx0YCBvYmplY3QuCisKKyAgIE9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IHN5bWJvbGljIGxpbmtzLCB0aGlzIGlzIGFuIGFsaWFzIGZvcgorICAgOmZ1bmM6YH5vcy5zdGF0YC4KKworICAgQXMgb2YgUHl0aG9uIDMuMywgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGBgb3Muc3RhdChwYXRoLCBkaXJfZmQ9ZGlyX2ZkLAorICAgZm9sbG93X3N5bWxpbmtzPUZhbHNlKWBgLgogCiAgICBUaGlzIGZ1bmN0aW9uIGNhbiBhbHNvIHN1cHBvcnQgOnJlZjpgcGF0aHMgcmVsYXRpdmUgdG8gZGlyZWN0b3J5IGRlc2NyaXB0b3JzCiAgICA8ZGlyX2ZkPmAuCiAKKyAgIC4uIHNlZWFsc286OgorCisgICAgICBUaGUgOmZ1bmM6YC5zdGF0YCBmdW5jdGlvbi4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIFdpbmRvd3MgNi4wIChWaXN0YSkgc3ltYm9saWMgbGlua3MuCiAKQEAgLTE1NTEsNyArMTYyNSw3IEBACiAgICAgICBUaGUgKmRpcl9mZCogYXJndW1lbnQuCiAKIAotLi4gZnVuY3Rpb246OiBtYWtlZGlycyhwYXRoLCBtb2RlPTBvNzc3LCBleGlzdF9vaz1GYWxzZSkKKy4uIGZ1bmN0aW9uOjogbWFrZWRpcnMobmFtZSwgbW9kZT0wbzc3NywgZXhpc3Rfb2s9RmFsc2UpCiAKICAgIC4uIGluZGV4OjoKICAgICAgIHNpbmdsZTogZGlyZWN0b3J5OyBjcmVhdGluZwpAQCAtMTU3NiwxMiArMTY1MCwxMiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAgICAgICBUaGUgKmV4aXN0X29rKiBwYXJhbWV0ZXIuCiAKLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjYKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjEKIAotICAgICAgQmVmb3JlIFB5dGhvbiAzLjMuNiwgaWYgKmV4aXN0X29rKiB3YXMgYGBUcnVlYGAgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RlZCwKKyAgICAgIEJlZm9yZSBQeXRob24gMy40LjEsIGlmICpleGlzdF9vayogd2FzIGBgVHJ1ZWBgIGFuZCB0aGUgZGlyZWN0b3J5IGV4aXN0ZWQsCiAgICAgICA6ZnVuYzpgbWFrZWRpcnNgIHdvdWxkIHN0aWxsIHJhaXNlIGFuIGVycm9yIGlmICptb2RlKiBkaWQgbm90IG1hdGNoIHRoZQogICAgICAgbW9kZSBvZiB0aGUgZXhpc3RpbmcgZGlyZWN0b3J5LiBTaW5jZSB0aGlzIGJlaGF2aW9yIHdhcyBpbXBvc3NpYmxlIHRvCi0gICAgICBpbXBsZW1lbnQgc2FmZWx5LCBpdCB3YXMgcmVtb3ZlZCBpbiBQeXRob24gMy4zLjYuIFNlZSA6aXNzdWU6YDIxMDgyYC4KKyAgICAgIGltcGxlbWVudCBzYWZlbHksIGl0IHdhcyByZW1vdmVkIGluIFB5dGhvbiAzLjQuMS4gU2VlIDppc3N1ZTpgMjEwODJgLgogCiAKIC4uIGZ1bmN0aW9uOjogbWtmaWZvKHBhdGgsIG1vZGU9MG82NjYsICosIGRpcl9mZD1Ob25lKQpAQCAtMTYwNCwxMCArMTY3OCwxMCBAQAogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCiAKLS4uIGZ1bmN0aW9uOjogbWtub2QoZmlsZW5hbWUsIG1vZGU9MG82MDAsIGRldmljZT0wLCAqLCBkaXJfZmQ9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogbWtub2QocGF0aCwgbW9kZT0wbzYwMCwgZGV2aWNlPTAsICosIGRpcl9mZD1Ob25lKQogCiAgICBDcmVhdGUgYSBmaWxlc3lzdGVtIG5vZGUgKGZpbGUsIGRldmljZSBzcGVjaWFsIGZpbGUgb3IgbmFtZWQgcGlwZSkgbmFtZWQKLSAgICpmaWxlbmFtZSouICptb2RlKiBzcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGUgdHlwZSBvZiBub2RlCisgICAqcGF0aCouICptb2RlKiBzcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGUgdHlwZSBvZiBub2RlCiAgICB0byBiZSBjcmVhdGVkLCBiZWluZyBjb21iaW5lZCAoYml0d2lzZSBPUikgd2l0aCBvbmUgb2YgYGBzdGF0LlNfSUZSRUdgYCwKICAgIGBgc3RhdC5TX0lGQ0hSYGAsIGBgc3RhdC5TX0lGQkxLYGAsIGFuZCBgYHN0YXQuU19JRklGT2BgICh0aG9zZSBjb25zdGFudHMgYXJlCiAgICBhdmFpbGFibGUgaW4gOm1vZDpgc3RhdGApLiAgRm9yIGBgc3RhdC5TX0lGQ0hSYGAgYW5kIGBgc3RhdC5TX0lGQkxLYGAsCkBAIC0xNzExLDcgKzE3ODUsNyBAQAogICAgICAgVGhlICpkaXJfZmQqIGFyZ3VtZW50LgogCiAKLS4uIGZ1bmN0aW9uOjogcmVtb3ZlZGlycyhwYXRoKQorLi4gZnVuY3Rpb246OiByZW1vdmVkaXJzKG5hbWUpCiAKICAgIC4uIGluZGV4Ojogc2luZ2xlOiBkaXJlY3Rvcnk7IGRlbGV0aW5nCiAKQEAgLTE3OTAsNTUgKzE4NjQsMTE2IEBACiAgICAgICBUaGUgKmRpcl9mZCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogc3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpCisuLiBmdW5jdGlvbjo6IHN0YXQocGF0aCwgXCosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkKIAotICAgUGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZiBhIDpjOmZ1bmM6YHN0YXRgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgotICAgKnBhdGgqIG1heSBiZSBzcGVjaWZpZWQgYXMgZWl0aGVyIGEgc3RyaW5nIG9yIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgotICAgKFRoaXMgZnVuY3Rpb24gbm9ybWFsbHkgZm9sbG93cyBzeW1saW5rczsgdG8gc3RhdCBhIHN5bWxpbmsgYWRkIHRoZSBhcmd1bWVudAotICAgYGBmb2xsb3dfc3ltbGlua3M9RmFsc2VgYCwgb3IgdXNlIDpmdW5jOmBsc3RhdGAuKQorICAgR2V0IHRoZSBzdGF0dXMgb2YgYSBmaWxlIG9yIGEgZmlsZSBkZXNjcmlwdG9yLiBQZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIGEKKyAgIDpjOmZ1bmM6YHN0YXRgIHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLiAqcGF0aCogbWF5IGJlIHNwZWNpZmllZCBhcworICAgZWl0aGVyIGEgc3RyaW5nIG9yIGFzIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLiBSZXR1cm4gYSA6Y2xhc3M6YHN0YXRfcmVzdWx0YAorICAgb2JqZWN0LgogCi0gICBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIG9iamVjdCB3aG9zZSBhdHRyaWJ1dGVzIGNvcnJlc3BvbmQgcm91Z2hseQotICAgdG8gdGhlIG1lbWJlcnMgb2YgdGhlIDpjOnR5cGU6YHN0YXRgIHN0cnVjdHVyZSwgbmFtZWx5OgorICAgVGhpcyBmdW5jdGlvbiBub3JtYWxseSBmb2xsb3dzIHN5bWxpbmtzOyB0byBzdGF0IGEgc3ltbGluayBhZGQgdGhlIGFyZ3VtZW50CisgICBgYGZvbGxvd19zeW1saW5rcz1GYWxzZWBgLCBvciB1c2UgOmZ1bmM6YGxzdGF0YC4KIAotICAgKiA6YXR0cjpgc3RfbW9kZWAgLSBwcm90ZWN0aW9uIGJpdHMsCi0gICAqIDphdHRyOmBzdF9pbm9gIC0gaW5vZGUgbnVtYmVyLAotICAgKiA6YXR0cjpgc3RfZGV2YCAtIGRldmljZSwKLSAgICogOmF0dHI6YHN0X25saW5rYCAtIG51bWJlciBvZiBoYXJkIGxpbmtzLAotICAgKiA6YXR0cjpgc3RfdWlkYCAtIHVzZXIgaWQgb2Ygb3duZXIsCi0gICAqIDphdHRyOmBzdF9naWRgIC0gZ3JvdXAgaWQgb2Ygb3duZXIsCi0gICAqIDphdHRyOmBzdF9zaXplYCAtIHNpemUgb2YgZmlsZSwgaW4gYnl0ZXMsCi0gICAqIDphdHRyOmBzdF9hdGltZWAgLSB0aW1lIG9mIG1vc3QgcmVjZW50IGFjY2VzcyBleHByZXNzZWQgaW4gc2Vjb25kcywKLSAgICogOmF0dHI6YHN0X210aW1lYCAtIHRpbWUgb2YgbW9zdCByZWNlbnQgY29udGVudCBtb2RpZmljYXRpb24KLSAgICAgZXhwcmVzc2VkIGluIHNlY29uZHMsCi0gICAqIDphdHRyOmBzdF9jdGltZWAgLSBwbGF0Zm9ybSBkZXBlbmRlbnQ7IHRpbWUgb2YgbW9zdCByZWNlbnQgbWV0YWRhdGEKLSAgICAgY2hhbmdlIG9uIFVuaXgsIG9yIHRoZSB0aW1lIG9mIGNyZWF0aW9uIG9uIFdpbmRvd3MsIGV4cHJlc3NlZCBpbiBzZWNvbmRzCi0gICAqIDphdHRyOmBzdF9hdGltZV9uc2AgLSB0aW1lIG9mIG1vc3QgcmVjZW50IGFjY2VzcwotICAgICBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgYXMgYW4gaW50ZWdlciwKLSAgICogOmF0dHI6YHN0X210aW1lX25zYCAtIHRpbWUgb2YgbW9zdCByZWNlbnQgY29udGVudCBtb2RpZmljYXRpb24KLSAgICAgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzIGFzIGFuIGludGVnZXIsCi0gICAqIDphdHRyOmBzdF9jdGltZV9uc2AgLSBwbGF0Zm9ybSBkZXBlbmRlbnQ7IHRpbWUgb2YgbW9zdCByZWNlbnQgbWV0YWRhdGEKLSAgICAgY2hhbmdlIG9uIFVuaXgsIG9yIHRoZSB0aW1lIG9mIGNyZWF0aW9uIG9uIFdpbmRvd3MsCi0gICAgIGV4cHJlc3NlZCBpbiBuYW5vc2Vjb25kcyBhcyBhbiBpbnRlZ2VyCisgICBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IDpyZWY6YHNwZWNpZnlpbmcgYSBmaWxlIGRlc2NyaXB0b3IgPHBhdGhfZmQ+YCBhbmQKKyAgIDpyZWY6YG5vdCBmb2xsb3dpbmcgc3ltbGlua3MgPGZvbGxvd19zeW1saW5rcz5gLgogCi0gICBPbiBzb21lIFVuaXggc3lzdGVtcyAoc3VjaCBhcyBMaW51eCksIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBtYXkgYWxzbyBiZQotICAgYXZhaWxhYmxlOgorICAgLi4gaW5kZXg6OiBtb2R1bGU6IHN0YXQKIAotICAgKiA6YXR0cjpgc3RfYmxvY2tzYCAtIG51bWJlciBvZiA1MTItYnl0ZSBibG9ja3MgYWxsb2NhdGVkIGZvciBmaWxlCi0gICAqIDphdHRyOmBzdF9ibGtzaXplYCAtIGZpbGVzeXN0ZW0gYmxvY2tzaXplIGZvciBlZmZpY2llbnQgZmlsZSBzeXN0ZW0gSS9PCi0gICAqIDphdHRyOmBzdF9yZGV2YCAtIHR5cGUgb2YgZGV2aWNlIGlmIGFuIGlub2RlIGRldmljZQotICAgKiA6YXR0cjpgc3RfZmxhZ3NgIC0gdXNlciBkZWZpbmVkIGZsYWdzIGZvciBmaWxlCisgICBFeGFtcGxlOjoKIAotICAgT24gb3RoZXIgVW5peCBzeXN0ZW1zIChzdWNoIGFzIEZyZWVCU0QpLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgbWF5IGJlCi0gICBhdmFpbGFibGUgKGJ1dCBtYXkgYmUgb25seSBmaWxsZWQgb3V0IGlmIHJvb3QgdHJpZXMgdG8gdXNlIHRoZW0pOgorICAgICAgPj4+IGltcG9ydCBvcworICAgICAgPj4+IHN0YXRpbmZvID0gb3Muc3RhdCgnc29tZWZpbGUudHh0JykKKyAgICAgID4+PiBzdGF0aW5mbworICAgICAgb3Muc3RhdF9yZXN1bHQoc3RfbW9kZT0zMzE4OCwgc3RfaW5vPTc4NzY5MzIsIHN0X2Rldj0yMzQ4ODEwMjYsCisgICAgICBzdF9ubGluaz0xLCBzdF91aWQ9NTAxLCBzdF9naWQ9NTAxLCBzdF9zaXplPTI2NCwgc3RfYXRpbWU9MTI5NzIzMDI5NSwKKyAgICAgIHN0X210aW1lPTEyOTcyMzAwMjcsIHN0X2N0aW1lPTEyOTcyMzAwMjcpCisgICAgICA+Pj4gc3RhdGluZm8uc3Rfc2l6ZQorICAgICAgMjY0CiAKLSAgICogOmF0dHI6YHN0X2dlbmAgLSBmaWxlIGdlbmVyYXRpb24gbnVtYmVyCi0gICAqIDphdHRyOmBzdF9iaXJ0aHRpbWVgIC0gdGltZSBvZiBmaWxlIGNyZWF0aW9uCisgICBBdmFpbGFiaWxpdHk6IFVuaXgsIFdpbmRvd3MuCiAKLSAgIE9uIE1hYyBPUyBzeXN0ZW1zLCB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgbWF5IGFsc28gYmUgYXZhaWxhYmxlOgorICAgLi4gc2VlYWxzbzo6CiAKLSAgICogOmF0dHI6YHN0X3JzaXplYAotICAgKiA6YXR0cjpgc3RfY3JlYXRvcmAKLSAgICogOmF0dHI6YHN0X3R5cGVgCisgICAgICA6ZnVuYzpgZnN0YXRgIGFuZCA6ZnVuYzpgbHN0YXRgIGZ1bmN0aW9ucy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisgICAgICBBZGRlZCB0aGUgKmRpcl9mZCogYW5kICpmb2xsb3dfc3ltbGlua3MqIGFyZ3VtZW50cywgc3BlY2lmeWluZyBhIGZpbGUKKyAgICAgIGRlc2NyaXB0b3IgaW5zdGVhZCBvZiBhIHBhdGguCisKKworLi4gY2xhc3M6OiBzdGF0X3Jlc3VsdAorCisgICBPYmplY3Qgd2hvc2UgYXR0cmlidXRlcyBjb3JyZXNwb25kIHJvdWdobHkgdG8gdGhlIG1lbWJlcnMgb2YgdGhlCisgICA6Yzp0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUuIEl0IGlzIHVzZWQgZm9yIHRoZSByZXN1bHQgb2YgOmZ1bmM6YG9zLnN0YXRgLAorICAgOmZ1bmM6YG9zLmZzdGF0YCBhbmQgOmZ1bmM6YG9zLmxzdGF0YC4KKworICAgQXR0cmlidXRlczoKKworICAgLi4gYXR0cmlidXRlOjogc3RfbW9kZQorCisgICAgICBGaWxlIG1vZGU6IGZpbGUgdHlwZSBhbmQgZmlsZSBtb2RlIGJpdHMgKHBlcm1pc3Npb25zKS4KKworICAgLi4gYXR0cmlidXRlOjogc3RfaW5vCisKKyAgICAgIElub2RlIG51bWJlci4KKworICAgLi4gYXR0cmlidXRlOjogc3RfZGV2CisKKyAgICAgIElkZW50aWZpZXIgb2YgdGhlIGRldmljZSBvbiB3aGljaCB0aGlzIGZpbGUgcmVzaWRlcy4KKworICAgLi4gYXR0cmlidXRlOjogc3RfbmxpbmsKKworICAgICAgTnVtYmVyIG9mIGhhcmQgbGlua3MuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X3VpZAorCisgICAgICBVc2VyIGlkZW50aWZpZXIgb2YgdGhlIGZpbGUgb3duZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2dpZAorCisgICAgICBHcm91cCBpZGVudGlmaWVyIG9mIHRoZSBmaWxlIG93bmVyLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9zaXplCisKKyAgICAgIFNpemUgb2YgdGhlIGZpbGUgaW4gYnl0ZXMsIGlmIGl0IGlzIGEgcmVndWxhciBmaWxlIG9yIGEgc3ltYm9saWMgbGluay4KKyAgICAgIFRoZSBzaXplIG9mIGEgc3ltYm9saWMgbGluayBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBwYXRobmFtZSBpdCBjb250YWlucywKKyAgICAgIHdpdGhvdXQgYSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuCisKKyAgIFRpbWVzdGFtcHM6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2F0aW1lCisKKyAgICAgIFRpbWUgb2YgbW9zdCByZWNlbnQgYWNjZXNzIGV4cHJlc3NlZCBpbiBzZWNvbmRzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9tdGltZQorCisgICAgICBUaW1lIG9mIG1vc3QgcmVjZW50IGNvbnRlbnQgbW9kaWZpY2F0aW9uIGV4cHJlc3NlZCBpbiBzZWNvbmRzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9jdGltZQorCisgICAgICBQbGF0Zm9ybSBkZXBlbmRlbnQ6CisKKyAgICAgICogdGhlIHRpbWUgb2YgbW9zdCByZWNlbnQgbWV0YWRhdGEgY2hhbmdlIG9uIFVuaXgsCisgICAgICAqIHRoZSB0aW1lIG9mIGNyZWF0aW9uIG9uIFdpbmRvd3MsIGV4cHJlc3NlZCBpbiBzZWNvbmRzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9hdGltZV9ucworCisgICAgICBUaW1lIG9mIG1vc3QgcmVjZW50IGFjY2VzcyBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgYXMgYW4gaW50ZWdlci4KKworICAgLi4gYXR0cmlidXRlOjogc3RfbXRpbWVfbnMKKworICAgICAgVGltZSBvZiBtb3N0IHJlY2VudCBjb250ZW50IG1vZGlmaWNhdGlvbiBleHByZXNzZWQgaW4gbmFub3NlY29uZHMgYXMgYW4KKyAgICAgIGludGVnZXIuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2N0aW1lX25zCisKKyAgICAgIFBsYXRmb3JtIGRlcGVuZGVudDoKKworICAgICAgKiB0aGUgdGltZSBvZiBtb3N0IHJlY2VudCBtZXRhZGF0YSBjaGFuZ2Ugb24gVW5peCwKKyAgICAgICogdGhlIHRpbWUgb2YgY3JlYXRpb24gb24gV2luZG93cywgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzIGFzIGFuCisgICAgICAgIGludGVnZXIuCisKKyAgIFNlZSBhbHNvIHRoZSA6ZnVuYzpgc3RhdF9mbG9hdF90aW1lc2AgZnVuY3Rpb24uCiAKICAgIC4uIG5vdGU6OgogCkBAIC0xODQ4LDYgKzE5ODMsNyBAQAogICAgICAgb3IgRkFUMzIgZmlsZSBzeXN0ZW1zLCA6YXR0cjpgc3RfbXRpbWVgIGhhcyAyLXNlY29uZCByZXNvbHV0aW9uLCBhbmQKICAgICAgIDphdHRyOmBzdF9hdGltZWAgaGFzIG9ubHkgMS1kYXkgcmVzb2x1dGlvbi4gIFNlZSB5b3VyIG9wZXJhdGluZyBzeXN0ZW0KICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMuCisKICAgICAgIFNpbWlsYXJseSwgYWx0aG91Z2ggOmF0dHI6YHN0X2F0aW1lX25zYCwgOmF0dHI6YHN0X210aW1lX25zYCwKICAgICAgIGFuZCA6YXR0cjpgc3RfY3RpbWVfbnNgIGFyZSBhbHdheXMgZXhwcmVzc2VkIGluIG5hbm9zZWNvbmRzLCBtYW55CiAgICAgICBzeXN0ZW1zIGRvIG5vdCBwcm92aWRlIG5hbm9zZWNvbmQgcHJlY2lzaW9uLiAgT24gc3lzdGVtcyB0aGF0IGRvCkBAIC0xODU3LDQxICsxOTkzLDY4IEBACiAgICAgICBJZiB5b3UgbmVlZCB0aGUgZXhhY3QgdGltZXN0YW1wcyB5b3Ugc2hvdWxkIGFsd2F5cyB1c2UKICAgICAgIDphdHRyOmBzdF9hdGltZV9uc2AsIDphdHRyOmBzdF9tdGltZV9uc2AsIGFuZCA6YXR0cjpgc3RfY3RpbWVfbnNgLgogCi0gICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdGhlIHJldHVybiB2YWx1ZSBvZiA6ZnVuYzpgfm9zLnN0YXRgIGlzIGFsc28KKyAgIE9uIHNvbWUgVW5peCBzeXN0ZW1zIChzdWNoIGFzIExpbnV4KSwgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG1heSBhbHNvIGJlCisgICBhdmFpbGFibGU6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2Jsb2NrcworCisgICAgICBOdW1iZXIgb2YgNTEyLWJ5dGUgYmxvY2tzIGFsbG9jYXRlZCBmb3IgZmlsZS4KKyAgICAgIFRoaXMgbWF5IGJlIHNtYWxsZXIgdGhhbiA6YXR0cjpgc3Rfc2l6ZWAvNTEyIHdoZW4gdGhlIGZpbGUgaGFzIGhvbGVzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9ibGtzaXplCisKKyAgICAgICJQcmVmZXJyZWQiIGJsb2Nrc2l6ZSBmb3IgZWZmaWNpZW50IGZpbGUgc3lzdGVtIEkvTy4gV3JpdGluZyB0byBhIGZpbGUgaW4KKyAgICAgIHNtYWxsZXIgY2h1bmtzIG1heSBjYXVzZSBhbiBpbmVmZmljaWVudCByZWFkLW1vZGlmeS1yZXdyaXRlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9yZGV2CisKKyAgICAgIFR5cGUgb2YgZGV2aWNlIGlmIGFuIGlub2RlIGRldmljZS4KKworICAgLi4gYXR0cmlidXRlOjogc3RfZmxhZ3MKKworICAgICAgVXNlciBkZWZpbmVkIGZsYWdzIGZvciBmaWxlLgorCisgICBPbiBvdGhlciBVbml4IHN5c3RlbXMgKHN1Y2ggYXMgRnJlZUJTRCksIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBtYXkgYmUKKyAgIGF2YWlsYWJsZSAoYnV0IG1heSBiZSBvbmx5IGZpbGxlZCBvdXQgaWYgcm9vdCB0cmllcyB0byB1c2UgdGhlbSk6CisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X2dlbgorCisgICAgICBGaWxlIGdlbmVyYXRpb24gbnVtYmVyLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9iaXJ0aHRpbWUKKworICAgICAgVGltZSBvZiBmaWxlIGNyZWF0aW9uLgorCisgICBPbiBNYWMgT1Mgc3lzdGVtcywgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIG1heSBhbHNvIGJlIGF2YWlsYWJsZToKKworICAgLi4gYXR0cmlidXRlOjogc3RfcnNpemUKKworICAgICAgUmVhbCBzaXplIG9mIHRoZSBmaWxlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzdF9jcmVhdG9yCisKKyAgICAgIENyZWF0b3Igb2YgdGhlIGZpbGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHN0X3R5cGUKKworICAgICAgRmlsZSB0eXBlLgorCisgICBUaGUgc3RhbmRhcmQgbW9kdWxlIDptb2Q6YHN0YXRgIGRlZmluZXMgZnVuY3Rpb25zIGFuZCBjb25zdGFudHMgdGhhdCBhcmUKKyAgIHVzZWZ1bCBmb3IgZXh0cmFjdGluZyBpbmZvcm1hdGlvbiBmcm9tIGEgOmM6dHlwZTpgc3RhdGAgc3RydWN0dXJlLiAoT24KKyAgIFdpbmRvd3MsIHNvbWUgaXRlbXMgYXJlIGZpbGxlZCB3aXRoIGR1bW15IHZhbHVlcy4pCisKKyAgIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBhIDpjbGFzczpgc3RhdF9yZXN1bHRgIGluc3RhbmNlIGlzIGFsc28KICAgIGFjY2Vzc2libGUgYXMgYSB0dXBsZSBvZiBhdCBsZWFzdCAxMCBpbnRlZ2VycyBnaXZpbmcgdGhlIG1vc3QgaW1wb3J0YW50IChhbmQKICAgIHBvcnRhYmxlKSBtZW1iZXJzIG9mIHRoZSA6Yzp0eXBlOmBzdGF0YCBzdHJ1Y3R1cmUsIGluIHRoZSBvcmRlcgogICAgOmF0dHI6YHN0X21vZGVgLCA6YXR0cjpgc3RfaW5vYCwgOmF0dHI6YHN0X2RldmAsIDphdHRyOmBzdF9ubGlua2AsCiAgICA6YXR0cjpgc3RfdWlkYCwgOmF0dHI6YHN0X2dpZGAsIDphdHRyOmBzdF9zaXplYCwgOmF0dHI6YHN0X2F0aW1lYCwKICAgIDphdHRyOmBzdF9tdGltZWAsIDphdHRyOmBzdF9jdGltZWAuIE1vcmUgaXRlbXMgbWF5IGJlIGFkZGVkIGF0IHRoZSBlbmQgYnkKLSAgIHNvbWUgaW1wbGVtZW50YXRpb25zLgotCi0gICBUaGlzIGZ1bmN0aW9uIGNhbiBzdXBwb3J0IDpyZWY6YHNwZWNpZnlpbmcgYSBmaWxlIGRlc2NyaXB0b3IgPHBhdGhfZmQ+YCBhbmQKLSAgIDpyZWY6YG5vdCBmb2xsb3dpbmcgc3ltbGlua3MgPGZvbGxvd19zeW1saW5rcz5gLgotCi0gICAuLiBpbmRleDo6IG1vZHVsZTogc3RhdAotCi0gICBUaGUgc3RhbmRhcmQgbW9kdWxlIDptb2Q6YHN0YXRgIGRlZmluZXMgZnVuY3Rpb25zIGFuZCBjb25zdGFudHMgdGhhdCBhcmUgdXNlZnVsCi0gICBmb3IgZXh0cmFjdGluZyBpbmZvcm1hdGlvbiBmcm9tIGEgOmM6dHlwZTpgc3RhdGAgc3RydWN0dXJlLiAoT24gV2luZG93cywgc29tZQotICAgaXRlbXMgYXJlIGZpbGxlZCB3aXRoIGR1bW15IHZhbHVlcy4pCi0KLSAgIEV4YW1wbGU6OgotCi0gICAgICA+Pj4gaW1wb3J0IG9zCi0gICAgICA+Pj4gc3RhdGluZm8gPSBvcy5zdGF0KCdzb21lZmlsZS50eHQnKQotICAgICAgPj4+IHN0YXRpbmZvCi0gICAgICBwb3NpeC5zdGF0X3Jlc3VsdChzdF9tb2RlPTMzMTg4LCBzdF9pbm89Nzg3NjkzMiwgc3RfZGV2PTIzNDg4MTAyNiwKLSAgICAgIHN0X25saW5rPTEsIHN0X3VpZD01MDEsIHN0X2dpZD01MDEsIHN0X3NpemU9MjY0LCBzdF9hdGltZT0xMjk3MjMwMjk1LAotICAgICAgc3RfbXRpbWU9MTI5NzIzMDAyNywgc3RfY3RpbWU9MTI5NzIzMDAyNykKLSAgICAgID4+PiBzdGF0aW5mby5zdF9zaXplCi0gICAgICAyNjQKLQotICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgorICAgc29tZSBpbXBsZW1lbnRhdGlvbnMuIEZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgUHl0aG9uIHZlcnNpb25zLAorICAgYWNjZXNzaW5nIDpjbGFzczpgc3RhdF9yZXN1bHRgIGFzIGEgdHVwbGUgYWx3YXlzIHJldHVybnMgaW50ZWdlcnMuCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotICAgICAgQWRkZWQgdGhlICpkaXJfZmQqIGFuZCAqZm9sbG93X3N5bWxpbmtzKiBhcmd1bWVudHMsCi0gICAgICBzcGVjaWZ5aW5nIGEgZmlsZSBkZXNjcmlwdG9yIGluc3RlYWQgb2YgYSBwYXRoLAotICAgICAgYW5kIHRoZSA6YXR0cjpgc3RfYXRpbWVfbnNgLCA6YXR0cjpgc3RfbXRpbWVfbnNgLAotICAgICAgYW5kIDphdHRyOmBzdF9jdGltZV9uc2AgbWVtYmVycy4KKyAgICAgIEFkZGVkIHRoZSA6YXR0cjpgc3RfYXRpbWVfbnNgLCA6YXR0cjpgc3RfbXRpbWVfbnNgLCBhbmQKKyAgICAgIDphdHRyOmBzdF9jdGltZV9uc2AgbWVtYmVycy4KIAogCiAuLiBmdW5jdGlvbjo6IHN0YXRfZmxvYXRfdGltZXMoW25ld3ZhbHVlXSkKQEAgLTE5MzUsMTEgKzIwOTgsMjYgQEAKICAgIHJlYWQtb25seSwgYW5kIGlmIDpjb25zdDpgU1RfTk9TVUlEYCBpcyBzZXQsIHRoZSBzZW1hbnRpY3Mgb2YKICAgIHNldHVpZC9zZXRnaWQgYml0cyBhcmUgZGlzYWJsZWQgb3Igbm90IHN1cHBvcnRlZC4KIAorICAgQWRkaXRpb25hbCBtb2R1bGUtbGV2ZWwgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGZvciBHTlUvZ2xpYmMgYmFzZWQgc3lzdGVtcy4KKyAgIFRoZXNlIGFyZSA6Y29uc3Q6YFNUX05PREVWYCAoZGlzYWxsb3cgYWNjZXNzIHRvIGRldmljZSBzcGVjaWFsIGZpbGVzKSwKKyAgIDpjb25zdDpgU1RfTk9FWEVDYCAoZGlzYWxsb3cgcHJvZ3JhbSBleGVjdXRpb24pLCA6Y29uc3Q6YFNUX1NZTkNIUk9OT1VTYAorICAgKHdyaXRlcyBhcmUgc3luY2VkIGF0IG9uY2UpLCA6Y29uc3Q6YFNUX01BTkRMT0NLYCAoYWxsb3cgbWFuZGF0b3J5IGxvY2tzIG9uIGFuIEZTKSwKKyAgIDpjb25zdDpgU1RfV1JJVEVgICh3cml0ZSBvbiBmaWxlL2RpcmVjdG9yeS9zeW1saW5rKSwgOmNvbnN0OmBTVF9BUFBFTkRgCisgICAoYXBwZW5kLW9ubHkgZmlsZSksIDpjb25zdDpgU1RfSU1NVVRBQkxFYCAoaW1tdXRhYmxlIGZpbGUpLCA6Y29uc3Q6YFNUX05PQVRJTUVgCisgICAoZG8gbm90IHVwZGF0ZSBhY2Nlc3MgdGltZXMpLCA6Y29uc3Q6YFNUX05PRElSQVRJTUVgIChkbyBub3QgdXBkYXRlIGRpcmVjdG9yeSBhY2Nlc3MKKyAgIHRpbWVzKSwgOmNvbnN0OmBTVF9SRUxBVElNRWAgKHVwZGF0ZSBhdGltZSByZWxhdGl2ZSB0byBtdGltZS9jdGltZSkuCisKICAgIFRoaXMgZnVuY3Rpb24gY2FuIHN1cHBvcnQgOnJlZjpgc3BlY2lmeWluZyBhIGZpbGUgZGVzY3JpcHRvciA8cGF0aF9mZD5gLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgVGhlIDpjb25zdDpgU1RfUkRPTkxZYCBhbmQgOmNvbnN0OmBTVF9OT1NVSURgIGNvbnN0YW50cyB3ZXJlIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIDpjb25zdDpgU1RfTk9ERVZgLCA6Y29uc3Q6YFNUX05PRVhFQ2AsIDpjb25zdDpgU1RfU1lOQ0hST05PVVNgLAorICAgICAgOmNvbnN0OmBTVF9NQU5ETE9DS2AsIDpjb25zdDpgU1RfV1JJVEVgLCA6Y29uc3Q6YFNUX0FQUEVORGAsCisgICAgICA6Y29uc3Q6YFNUX0lNTVVUQUJMRWAsIDpjb25zdDpgU1RfTk9BVElNRWAsIDpjb25zdDpgU1RfTk9ESVJBVElNRWAsCisgICAgICBhbmQgOmNvbnN0OmBTVF9SRUxBVElNRWAgY29uc3RhbnRzIHdlcmUgYWRkZWQuCisKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCkBAIC0xOTc2LDcgKzIxNTQsOCBAQAogICAgY29udGFpbiA6ZnVuYzpgb3MuYWNjZXNzYCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZW1wdHkuCiAKICAgIFRvIGNoZWNrIHdoZXRoZXIgeW91IGNhbiB1c2UgdGhlICplZmZlY3RpdmVfaWRzKiBwYXJhbWV0ZXIgZm9yCi0gICA6ZnVuYzpgb3MuYWNjZXNzYCwgdXNlIHRoZSBgYGluYGAgb3BlcmF0b3Igb24gYGBzdXBwb3J0c19kaXJfZmRgYCwgbGlrZSBzbzo6CisgICA6ZnVuYzpgb3MuYWNjZXNzYCwgdXNlIHRoZSBgYGluYGAgb3BlcmF0b3Igb24gYGBzdXBwb3J0c19lZmZlY3RpdmVfaWRzYGAsCisgICBsaWtlIHNvOjoKIAogICAgICAgIG9zLmFjY2VzcyBpbiBvcy5zdXBwb3J0c19lZmZlY3RpdmVfaWRzCiAKQEAgLTIwMjYsOSArMjIwNSw5IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAogCi0uLiBmdW5jdGlvbjo6IHN5bWxpbmsoc291cmNlLCBsaW5rX25hbWUsIHRhcmdldF9pc19kaXJlY3Rvcnk9RmFsc2UsICosIGRpcl9mZD1Ob25lKQorLi4gZnVuY3Rpb246OiBzeW1saW5rKHNyYywgZHN0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlLCAqLCBkaXJfZmQ9Tm9uZSkKIAotICAgQ3JlYXRlIGEgc3ltYm9saWMgbGluayBwb2ludGluZyB0byAqc291cmNlKiBuYW1lZCAqbGlua19uYW1lKi4KKyAgIENyZWF0ZSBhIHN5bWJvbGljIGxpbmsgcG9pbnRpbmcgdG8gKnNyYyogbmFtZWQgKmRzdCouCiAKICAgIE9uIFdpbmRvd3MsIGEgc3ltbGluayByZXByZXNlbnRzIGVpdGhlciBhIGZpbGUgb3IgYSBkaXJlY3RvcnksIGFuZCBkb2VzIG5vdAogICAgbW9ycGggdG8gdGhlIHRhcmdldCBkeW5hbWljYWxseS4gIElmIHRoZSB0YXJnZXQgaXMgcHJlc2VudCwgdGhlIHR5cGUgb2YgdGhlCkBAIC0yMDk4LDIwICsyMjc3LDIwIEBACiAgICAgICBUaGUgKmRpcl9mZCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogdXRpbWUocGF0aCwgdGltZXM9Tm9uZSwgKiwgbnM9Tm9uZSwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKQorLi4gZnVuY3Rpb246OiB1dGltZShwYXRoLCB0aW1lcz1Ob25lLCAqWywgbnNdLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpCiAKICAgIFNldCB0aGUgYWNjZXNzIGFuZCBtb2RpZmllZCB0aW1lcyBvZiB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgKnBhdGgqLgogCiAgICA6ZnVuYzpgdXRpbWVgIHRha2VzIHR3byBvcHRpb25hbCBwYXJhbWV0ZXJzLCAqdGltZXMqIGFuZCAqbnMqLgogICAgVGhlc2Ugc3BlY2lmeSB0aGUgdGltZXMgc2V0IG9uICpwYXRoKiBhbmQgYXJlIHVzZWQgYXMgZm9sbG93czoKIAotICAgLSBJZiAqbnMqIGlzIG5vdCBgYE5vbmVgYCwKKyAgIC0gSWYgKm5zKiBpcyBzcGVjaWZpZWQsCiAgICAgIGl0IG11c3QgYmUgYSAyLXR1cGxlIG9mIHRoZSBmb3JtIGBgKGF0aW1lX25zLCBtdGltZV9ucylgYAogICAgICB3aGVyZSBlYWNoIG1lbWJlciBpcyBhbiBpbnQgZXhwcmVzc2luZyBuYW5vc2Vjb25kcy4KICAgIC0gSWYgKnRpbWVzKiBpcyBub3QgYGBOb25lYGAsCiAgICAgIGl0IG11c3QgYmUgYSAyLXR1cGxlIG9mIHRoZSBmb3JtIGBgKGF0aW1lLCBtdGltZSlgYAogICAgICB3aGVyZSBlYWNoIG1lbWJlciBpcyBhbiBpbnQgb3IgZmxvYXQgZXhwcmVzc2luZyBzZWNvbmRzLgotICAgLSBJZiAqdGltZXMqIGFuZCAqbnMqIGFyZSBib3RoIGBgTm9uZWBgLAorICAgLSBJZiAqdGltZXMqIGlzIGBgTm9uZWBgIGFuZCAqbnMqIGlzIHVuc3BlY2lmaWVkLAogICAgICB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gc3BlY2lmeWluZyBgYG5zPShhdGltZV9ucywgbXRpbWVfbnMpYGAKICAgICAgd2hlcmUgYm90aCB0aW1lcyBhcmUgdGhlIGN1cnJlbnQgdGltZS4KIApAQCAtMjE1NywxOCArMjMzNiwyMCBAQAogCiAgICBJZiBvcHRpb25hbCBhcmd1bWVudCAqdG9wZG93biogaXMgYGBUcnVlYGAgb3Igbm90IHNwZWNpZmllZCwgdGhlIHRyaXBsZSBmb3IgYQogICAgZGlyZWN0b3J5IGlzIGdlbmVyYXRlZCBiZWZvcmUgdGhlIHRyaXBsZXMgZm9yIGFueSBvZiBpdHMgc3ViZGlyZWN0b3JpZXMKLSAgIChkaXJlY3RvcmllcyBhcmUgZ2VuZXJhdGVkIHRvcC1kb3duKS4gIElmICp0b3Bkb3duKiBpcyBgYEZhbHNlYGAsIHRoZSB0cmlwbGUgZm9yIGEKLSAgIGRpcmVjdG9yeSBpcyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIHRyaXBsZXMgZm9yIGFsbCBvZiBpdHMgc3ViZGlyZWN0b3JpZXMKLSAgIChkaXJlY3RvcmllcyBhcmUgZ2VuZXJhdGVkIGJvdHRvbS11cCkuCisgICAoZGlyZWN0b3JpZXMgYXJlIGdlbmVyYXRlZCB0b3AtZG93bikuICBJZiAqdG9wZG93biogaXMgYGBGYWxzZWBgLCB0aGUgdHJpcGxlCisgICBmb3IgYSBkaXJlY3RvcnkgaXMgZ2VuZXJhdGVkIGFmdGVyIHRoZSB0cmlwbGVzIGZvciBhbGwgb2YgaXRzIHN1YmRpcmVjdG9yaWVzCisgICAoZGlyZWN0b3JpZXMgYXJlIGdlbmVyYXRlZCBib3R0b20tdXApLiBObyBtYXR0ZXIgdGhlIHZhbHVlIG9mICp0b3Bkb3duKiwgdGhlCisgICBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGlzIHJldHJpZXZlZCBiZWZvcmUgdGhlIHR1cGxlcyBmb3IgdGhlIGRpcmVjdG9yeSBhbmQKKyAgIGl0cyBzdWJkaXJlY3RvcmllcyBhcmUgZ2VuZXJhdGVkLgogCiAgICBXaGVuICp0b3Bkb3duKiBpcyBgYFRydWVgYCwgdGhlIGNhbGxlciBjYW4gbW9kaWZ5IHRoZSAqZGlybmFtZXMqIGxpc3QgaW4tcGxhY2UKICAgIChwZXJoYXBzIHVzaW5nIDprZXl3b3JkOmBkZWxgIG9yIHNsaWNlIGFzc2lnbm1lbnQpLCBhbmQgOmZ1bmM6YHdhbGtgIHdpbGwgb25seQogICAgcmVjdXJzZSBpbnRvIHRoZSBzdWJkaXJlY3RvcmllcyB3aG9zZSBuYW1lcyByZW1haW4gaW4gKmRpcm5hbWVzKjsgdGhpcyBjYW4gYmUKICAgIHVzZWQgdG8gcHJ1bmUgdGhlIHNlYXJjaCwgaW1wb3NlIGEgc3BlY2lmaWMgb3JkZXIgb2YgdmlzaXRpbmcsIG9yIGV2ZW4gdG8gaW5mb3JtCiAgICA6ZnVuYzpgd2Fsa2AgYWJvdXQgZGlyZWN0b3JpZXMgdGhlIGNhbGxlciBjcmVhdGVzIG9yIHJlbmFtZXMgYmVmb3JlIGl0IHJlc3VtZXMKLSAgIDpmdW5jOmB3YWxrYCBhZ2Fpbi4gIE1vZGlmeWluZyAqZGlybmFtZXMqIHdoZW4gKnRvcGRvd24qIGlzIGBgRmFsc2VgYCBpcwotICAgaW5lZmZlY3RpdmUsIGJlY2F1c2UgaW4gYm90dG9tLXVwIG1vZGUgdGhlIGRpcmVjdG9yaWVzIGluICpkaXJuYW1lcyogYXJlCi0gICBnZW5lcmF0ZWQgYmVmb3JlICpkaXJwYXRoKiBpdHNlbGYgaXMgZ2VuZXJhdGVkLgorICAgOmZ1bmM6YHdhbGtgIGFnYWluLiAgTW9kaWZ5aW5nICpkaXJuYW1lcyogd2hlbiAqdG9wZG93biogaXMgYGBGYWxzZWBgIGhhcworICAgbm8gZWZmZWN0IG9uIHRoZSBiZWhhdmlvciBvZiB0aGUgd2FsaywgYmVjYXVzZSBpbiBib3R0b20tdXAgbW9kZSB0aGUgZGlyZWN0b3JpZXMKKyAgIGluICpkaXJuYW1lcyogYXJlIGdlbmVyYXRlZCBiZWZvcmUgKmRpcnBhdGgqIGl0c2VsZiBpcyBnZW5lcmF0ZWQuCiAKICAgIEJ5IGRlZmF1bHQsIGVycm9ycyBmcm9tIHRoZSA6ZnVuYzpgbGlzdGRpcmAgY2FsbCBhcmUgaWdub3JlZC4gIElmIG9wdGlvbmFsCiAgICBhcmd1bWVudCAqb25lcnJvciogaXMgc3BlY2lmaWVkLCBpdCBzaG91bGQgYmUgYSBmdW5jdGlvbjsgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aApAQCAtMjIwNSw4ICsyMzg2LDkgQEAKICAgICAgICAgICBpZiAnQ1ZTJyBpbiBkaXJzOgogICAgICAgICAgICAgICBkaXJzLnJlbW92ZSgnQ1ZTJykgICMgZG9uJ3QgdmlzaXQgQ1ZTIGRpcmVjdG9yaWVzCiAKLSAgIEluIHRoZSBuZXh0IGV4YW1wbGUsIHdhbGtpbmcgdGhlIHRyZWUgYm90dG9tLXVwIGlzIGVzc2VudGlhbDogOmZ1bmM6YHJtZGlyYAotICAgZG9lc24ndCBhbGxvdyBkZWxldGluZyBhIGRpcmVjdG9yeSBiZWZvcmUgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eTo6CisgICBJbiB0aGUgbmV4dCBleGFtcGxlIChzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgOmZ1bmM6YHNodXRpbC5ybXRyZWVgKSwKKyAgIHdhbGtpbmcgdGhlIHRyZWUgYm90dG9tLXVwIGlzIGVzc2VudGlhbCwgOmZ1bmM6YHJtZGlyYCBkb2Vzbid0IGFsbG93CisgICBkZWxldGluZyBhIGRpcmVjdG9yeSBiZWZvcmUgdGhlIGRpcmVjdG9yeSBpcyBlbXB0eTo6CiAKICAgICAgICMgRGVsZXRlIGV2ZXJ5dGhpbmcgcmVhY2hhYmxlIGZyb20gdGhlIGRpcmVjdG9yeSBuYW1lZCBpbiAidG9wIiwKICAgICAgICMgYXNzdW1pbmcgdGhlcmUgYXJlIG5vIHN5bWJvbGljIGxpbmtzLgpAQCAtMjU4OSw3ICsyNzcxLDcgQEAKICAgIEZvcmsgYSBjaGlsZCBwcm9jZXNzLiAgUmV0dXJuIGBgMGBgIGluIHRoZSBjaGlsZCBhbmQgdGhlIGNoaWxkJ3MgcHJvY2VzcyBpZCBpbiB0aGUKICAgIHBhcmVudC4gIElmIGFuIGVycm9yIG9jY3VycyA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQuCiAKLSAgIE5vdGUgdGhhdCBzb21lIHBsYXRmb3JtcyBpbmNsdWRpbmcgRnJlZUJTRCA8PSA2LjMsIEN5Z3dpbiBhbmQgT1MvMiBFTVggaGF2ZQorICAgTm90ZSB0aGF0IHNvbWUgcGxhdGZvcm1zIGluY2x1ZGluZyBGcmVlQlNEIDw9IDYuMyBhbmQgQ3lnd2luIGhhdmUKICAgIGtub3duIGlzc3VlcyB3aGVuIHVzaW5nIGZvcmsoKSBmcm9tIGEgdGhyZWFkLgogCiAgICAuLiB3YXJuaW5nOjoKQEAgLTI2NTksMTAgKzI4NDEsMjggQEAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KIAogCi0uLiBmdW5jdGlvbjo6IHBvcGVuKC4uLikKKy4uIGZ1bmN0aW9uOjogcG9wZW4oY21kLCBtb2RlPSdyJywgYnVmZmVyaW5nPS0xKQogCi0gICBSdW4gY2hpbGQgcHJvY2Vzc2VzLCByZXR1cm5pbmcgb3BlbmVkIHBpcGVzIGZvciBjb21tdW5pY2F0aW9ucy4gIFRoZXNlIGZ1bmN0aW9ucwotICAgYXJlIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDpyZWY6YG9zLW5ld3N0cmVhbXNgLgorICAgT3BlbiBhIHBpcGUgdG8gb3IgZnJvbSBjb21tYW5kICpjbWQqLgorICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBvcGVuIGZpbGUgb2JqZWN0CisgICBjb25uZWN0ZWQgdG8gdGhlIHBpcGUsIHdoaWNoIGNhbiBiZSByZWFkIG9yIHdyaXR0ZW4gZGVwZW5kaW5nIG9uIHdoZXRoZXIgKm1vZGUqCisgICBpcyBgYCdyJ2BgIChkZWZhdWx0KSBvciBgYCd3J2BgLiBUaGUgKmJ1ZmZlcmluZyogYXJndW1lbnQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMKKyAgIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IHRvIHRoZSBidWlsdC1pbiA6ZnVuYzpgb3BlbmAgZnVuY3Rpb24uIFRoZQorICAgcmV0dXJuZWQgZmlsZSBvYmplY3QgcmVhZHMgb3Igd3JpdGVzIHRleHQgc3RyaW5ncyByYXRoZXIgdGhhbiBieXRlcy4KKworICAgVGhlIGBgY2xvc2VgYCBtZXRob2QgcmV0dXJucyA6Y29uc3Q6YE5vbmVgIGlmIHRoZSBzdWJwcm9jZXNzIGV4aXRlZAorICAgc3VjY2Vzc2Z1bGx5LCBvciB0aGUgc3VicHJvY2VzcydzIHJldHVybiBjb2RlIGlmIHRoZXJlIHdhcyBhbgorICAgZXJyb3IuIE9uIFBPU0lYIHN5c3RlbXMsIGlmIHRoZSByZXR1cm4gY29kZSBpcyBwb3NpdGl2ZSBpdAorICAgcmVwcmVzZW50cyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBwcm9jZXNzIGxlZnQtc2hpZnRlZCBieSBvbmUKKyAgIGJ5dGUuICBJZiB0aGUgcmV0dXJuIGNvZGUgaXMgbmVnYXRpdmUsIHRoZSBwcm9jZXNzIHdhcyB0ZXJtaW5hdGVkCisgICBieSB0aGUgc2lnbmFsIGdpdmVuIGJ5IHRoZSBuZWdhdGVkIHZhbHVlIG9mIHRoZSByZXR1cm4gY29kZS4gIChGb3IKKyAgIGV4YW1wbGUsIHRoZSByZXR1cm4gdmFsdWUgbWlnaHQgYmUgYGAtIHNpZ25hbC5TSUdLSUxMYGAgaWYgdGhlCisgICBzdWJwcm9jZXNzIHdhcyBraWxsZWQuKSAgT24gV2luZG93cyBzeXN0ZW1zLCB0aGUgcmV0dXJuIHZhbHVlCisgICBjb250YWlucyB0aGUgc2lnbmVkIGludGVnZXIgcmV0dXJuIGNvZGUgZnJvbSB0aGUgY2hpbGQgcHJvY2Vzcy4KKworICAgVGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyA6Y2xhc3M6YHN1YnByb2Nlc3MuUG9wZW5gOyBzZWUgdGhhdCBjbGFzcydzCisgICBkb2N1bWVudGF0aW9uIGZvciBtb3JlIHBvd2VyZnVsIHdheXMgdG8gbWFuYWdlIGFuZCBjb21tdW5pY2F0ZSB3aXRoCisgICBzdWJwcm9jZXNzZXMuCiAKIAogLi4gZnVuY3Rpb246OiBzcGF3bmwobW9kZSwgcGF0aCwgLi4uKQpAQCAtMjgzNSw3ICszMDM1LDYgQEAKICAgIDptYW5wYWdlOmB0aW1lcygyKWAgb3IgdGhlIGNvcnJlc3BvbmRpbmcgV2luZG93cyBQbGF0Zm9ybSBBUEkgZG9jdW1lbnRhdGlvbi4KICAgIE9uIFdpbmRvd3MsIG9ubHkgOmF0dHI6YHVzZXJgIGFuZCA6YXR0cjpgc3lzdGVtYCBhcmUga25vd247IHRoZSBvdGhlcgogICAgYXR0cmlidXRlcyBhcmUgemVyby4KLSAgIE9uIE9TLzIsIG9ubHkgOmF0dHI6YGVsYXBzZWRgIGlzIGtub3duOyB0aGUgb3RoZXIgYXR0cmlidXRlcyBhcmUgemVyby4KIAogICAgQXZhaWxhYmlsaXR5OiBVbml4LCBXaW5kb3dzLgogCkBAIC0zMDU3LDcgKzMyNTYsNyBAQAogCiAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAotVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIGEgc3VwcG9ydGVkIGJ5IHRoZQorVGhlIGZvbGxvd2luZyBzY2hlZHVsaW5nIHBvbGljaWVzIGFyZSBleHBvc2VkIGlmIHRoZXkgYXJlIHN1cHBvcnRlZCBieSB0aGUKIG9wZXJhdGluZyBzeXN0ZW0uCiAKIC4uIGRhdGE6OiBTQ0hFRF9PVEhFUgpAQCAtMzE2NiwxMCArMzM2NSw2IEBACiAgICBSZXR1cm4gdGhlIHNldCBvZiBDUFVzIHRoZSBwcm9jZXNzIHdpdGggUElEICpwaWQqIChvciB0aGUgY3VycmVudCBwcm9jZXNzCiAgICBpZiB6ZXJvKSBpcyByZXN0cmljdGVkIHRvLgogCi0gICAuLiBzZWVhbHNvOjoKLSAgICAgIDpmdW5jOmBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50YCByZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUKLSAgICAgIHN5c3RlbS4KLQogCiAuLiBfb3MtcGF0aDoKIApAQCAtMzIwNyw2ICszNDAyLDEzIEBACiAgICBBdmFpbGFiaWxpdHk6IFVuaXguCiAKIAorLi4gZnVuY3Rpb246OiBjcHVfY291bnQoKQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBDUFVzIGluIHRoZSBzeXN0ZW0uIFJldHVybnMgTm9uZSBpZiB1bmRldGVybWluZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogZ2V0bG9hZGF2ZygpCiAKICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBpbiB0aGUgc3lzdGVtIHJ1biBxdWV1ZSBhdmVyYWdlZCBvdmVyIHRoZSBsYXN0CkBAIC0zMzA1LDYgKzM1MDcsMTkgQEAKICAgIFRoZSBmaWxlIHBhdGggb2YgdGhlIG51bGwgZGV2aWNlLiBGb3IgZXhhbXBsZTogYGAnL2Rldi9udWxsJ2BgIGZvcgogICAgUE9TSVgsIGBgJ251bCdgYCBmb3IgV2luZG93cy4gIEFsc28gYXZhaWxhYmxlIHZpYSA6bW9kOmBvcy5wYXRoYC4KIAorLi4gZGF0YTo6IFJUTERfTEFaWQorICAgICAgICAgIFJUTERfTk9XCisgICAgICAgICAgUlRMRF9HTE9CQUwKKyAgICAgICAgICBSVExEX0xPQ0FMCisgICAgICAgICAgUlRMRF9OT0RFTEVURQorICAgICAgICAgIFJUTERfTk9MT0FECisgICAgICAgICAgUlRMRF9ERUVQQklORAorCisgICBGbGFncyBmb3IgdXNlIHdpdGggdGhlIDpmdW5jOmB+c3lzLnNldGRsb3BlbmZsYWdzYCBhbmQKKyAgIDpmdW5jOmB+c3lzLmdldGRsb3BlbmZsYWdzYCBmdW5jdGlvbnMuICBTZWUgdGhlIFVuaXggbWFudWFsIHBhZ2UKKyAgIDptYW5wYWdlOmBkbG9wZW4oMylgIGZvciB3aGF0IHRoZSBkaWZmZXJlbnQgZmxhZ3MgbWVhbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIC4uIF9vcy1taXNjZnVuYzoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3NzYXVkaW9kZXYucnN0IGIvRG9jL2xpYnJhcnkvb3NzYXVkaW9kZXYucnN0CmluZGV4IDgwNTUxYWEuLmJiNTA4MWEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L29zc2F1ZGlvZGV2LnJzdAorKysgYi9Eb2MvbGlicmFyeS9vc3NhdWRpb2Rldi5yc3QKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgZGF0YSB3cml0dGVuIGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgYW1vdW50IG9mIGRhdGEgc3VwcGxpZWQuCiAKIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCi0gICBBdWRpbyBkZXZpY2Ugb2JqZWN0cyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCwgaS5lLiB0aGV5IGNhbgorICAgQXVkaW8gZGV2aWNlIG9iamVjdHMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wsIGkuZS4gdGhleSBjYW4KICAgIGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LgogCiAKQEAgLTM1Nyw3ICszNTcsNyBAQAogICAgUmV0dXJucyB0aGUgZmlsZSBoYW5kbGUgbnVtYmVyIG9mIHRoZSBvcGVuIG1peGVyIGRldmljZSBmaWxlLgogCiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgTWl4ZXIgb2JqZWN0cyBhbHNvIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4KKyAgIE1peGVyIG9iamVjdHMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCiAKIAogVGhlIHJlbWFpbmluZyBtZXRob2RzIGFyZSBzcGVjaWZpYyB0byBhdWRpbyBtaXhpbmc6CkBAIC00MDcsNyArNDA3LDcgQEAKICAgIChzaWxlbnQpIHRvIDEwMCAoZnVsbCB2b2x1bWUpLiAgSWYgdGhlIGNvbnRyb2wgaXMgbW9ub3Bob25pYywgYSAyLXR1cGxlIGlzIHN0aWxsCiAgICByZXR1cm5lZCwgYnV0IGJvdGggdm9sdW1lcyBhcmUgdGhlIHNhbWUuCiAKLSAgIFJhaXNlcyA6ZXhjOmBPU1NBdWRpb0Vycm9yYCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgd2FzIGlzIHNwZWNpZmllZCwgb3IKKyAgIFJhaXNlcyA6ZXhjOmBPU1NBdWRpb0Vycm9yYCBpZiBhbiBpbnZhbGlkIGNvbnRyb2wgaXMgc3BlY2lmaWVkLCBvcgogICAgOmV4YzpgT1NFcnJvcmAgaWYgYW4gdW5zdXBwb3J0ZWQgY29udHJvbCBpcyBzcGVjaWZpZWQuCiAKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvb3RoZXJndWkucnN0IGIvRG9jL2xpYnJhcnkvb3RoZXJndWkucnN0CmluZGV4IGViNDliOTkuLjQzNzIxYjIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L290aGVyZ3VpLnJzdAorKysgYi9Eb2MvbGlicmFyeS9vdGhlcmd1aS5yc3QKQEAgLTEwLDcgKzEwLDcgQEAKIAogICAgYFB5R09iamVjdCA8aHR0cHM6Ly9saXZlLmdub21lLm9yZy9QeUdPYmplY3Q+YF8KICAgICAgIHByb3ZpZGVzIGludHJvc3BlY3Rpb24gYmluZGluZ3MgZm9yIEMgbGlicmFyaWVzIHVzaW5nCi0gICAgICBgR09iamVjdCA8aHR0cDovL2RldmVsb3Blci5nbm9tZS5vcmcvZ29iamVjdC9zdGFibGUvPmBfLiAgT25lIG9mCisgICAgICBgR09iamVjdCA8aHR0cHM6Ly9kZXZlbG9wZXIuZ25vbWUub3JnL2dvYmplY3Qvc3RhYmxlLz5gXy4gIE9uZSBvZgogICAgICAgdGhlc2UgbGlicmFyaWVzIGlzIHRoZSBgR1RLKyAzIDxodHRwOi8vd3d3Lmd0ay5vcmcvPmBfIHdpZGdldCBzZXQuCiAgICAgICBHVEsrIGNvbWVzIHdpdGggbWFueSBtb3JlIHdpZGdldHMgdGhhbiBUa2ludGVyIHByb3ZpZGVzLiAgQW4gb25saW5lCiAgICAgICBgUHl0aG9uIEdUSysgMyBUdXRvcmlhbCA8aHR0cDovL3B5dGhvbi1ndGstMy10dXRvcmlhbC5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0Lz5gXwpAQCAtMjIsNyArMjIsNyBAQAogICAgICAgYEdOT01FIDxodHRwOi8vd3d3Lmdub21lLm9yZz5gXy4gIEFuIG9ubGluZSBgdHV0b3JpYWwKICAgICAgIDxodHRwOi8vd3d3LnB5Z3RrLm9yZy9weWd0azJ0dXRvcmlhbC9pbmRleC5odG1sPmBfIGlzIGF2YWlsYWJsZS4KIAotICAgYFB5UXQgPGh0dHA6Ly93d3cucml2ZXJiYW5rY29tcHV0aW5nLmNvLnVrL3NvZnR3YXJlL3B5cXQvPmBfCisgICBgUHlRdCA8aHR0cDovL3d3dy5yaXZlcmJhbmtjb21wdXRpbmcuY28udWsvc29mdHdhcmUvcHlxdC9pbnRybz5gXwogICAgICAgUHlRdCBpcyBhIDpwcm9ncmFtOmBzaXBgXCAtd3JhcHBlZCBiaW5kaW5nIHRvIHRoZSBRdCB0b29sa2l0LiAgUXQgaXMgYW4KICAgICAgIGV4dGVuc2l2ZSBDKysgR1VJIGFwcGxpY2F0aW9uIGRldmVsb3BtZW50IGZyYW1ld29yayB0aGF0IGlzCiAgICAgICBhdmFpbGFibGUgZm9yIFVuaXgsIFdpbmRvd3MgYW5kIE1hYyBPUyBYLiA6cHJvZ3JhbTpgc2lwYCBpcyBhIHRvb2wKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgIHdpdGggUHl0aG9uIGFuZCBRdCA8aHR0cDovL3d3dy5xdHJhYy5ldS9weXF0Ym9vay5odG1sPmBfLCBieSBNYXJrCiAgICAgICBTdW1tZXJmaWVsZC4KIAotICAgYFB5U2lkZSA8aHR0cDovL3d3dy5weXNpZGUub3JnLz5gXworICAgYFB5U2lkZSA8aHR0cDovL3F0LXByb2plY3Qub3JnL3dpa2kvUHlTaWRlPmBfCiAgICAgICBpcyBhIG5ld2VyIGJpbmRpbmcgdG8gdGhlIFF0IHRvb2xraXQsIHByb3ZpZGVkIGJ5IE5va2lhLgogICAgICAgQ29tcGFyZWQgdG8gUHlRdCwgaXRzIGxpY2Vuc2luZyBzY2hlbWUgaXMgZnJpZW5kbGllciB0byBub24tb3BlbiBzb3VyY2UKICAgICAgIGFwcGxpY2F0aW9ucy4KQEAgLTUwLDEzICs1MCwxMyBAQAogICAgICAgbG93LWxldmVsIGRldmljZSBjb250ZXh0IGRyYXdpbmcsIGRyYWcgYW5kIGRyb3AsIHN5c3RlbSBjbGlwYm9hcmQgYWNjZXNzLAogICAgICAgYW4gWE1MLWJhc2VkIHJlc291cmNlIGZvcm1hdCBhbmQgbW9yZSwgaW5jbHVkaW5nIGFuIGV2ZXIgZ3Jvd2luZyBsaWJyYXJ5CiAgICAgICBvZiB1c2VyLWNvbnRyaWJ1dGVkIG1vZHVsZXMuICB3eFB5dGhvbiBoYXMgYSBib29rLCBgd3hQeXRob24gaW4gQWN0aW9uCi0gICAgICA8aHR0cDovL3d3dy5hbWF6b24uY29tL2V4ZWMvb2JpZG9zL0FTSU4vMTkzMjM5NDYyMT5gXywgYnkgTm9lbCBSYXBwaW4gYW5kCisgICAgICA8aHR0cDovL3d3dy5tYW5uaW5nLmNvbS9yYXBwaW4vPmBfLCBieSBOb2VsIFJhcHBpbiBhbmQKICAgICAgIFJvYmluIER1bm4uCiAKIFB5R1RLLCBQeVF0LCBhbmQgd3hQeXRob24sIGFsbCBoYXZlIGEgbW9kZXJuIGxvb2sgYW5kIGZlZWwgYW5kIG1vcmUKIHdpZGdldHMgdGhhbiBUa2ludGVyLiBJbiBhZGRpdGlvbiwgdGhlcmUgYXJlIG1hbnkgb3RoZXIgR1VJIHRvb2xraXRzIGZvcgogUHl0aG9uLCBib3RoIGNyb3NzLXBsYXRmb3JtLCBhbmQgcGxhdGZvcm0tc3BlY2lmaWMuIFNlZSB0aGUgYEdVSSBQcm9ncmFtbWluZwotPGh0dHA6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9HdWlQcm9ncmFtbWluZz5gXyBwYWdlIGluIHRoZSBQeXRob24gV2lraSBmb3IgYQorPGh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vR3VpUHJvZ3JhbW1pbmc+YF8gcGFnZSBpbiB0aGUgUHl0aG9uIFdpa2kgZm9yIGEKIG11Y2ggbW9yZSBjb21wbGV0ZSBsaXN0LCBhbmQgYWxzbyBmb3IgbGlua3MgdG8gZG9jdW1lbnRzIHdoZXJlIHRoZQogZGlmZmVyZW50IEdVSSB0b29sa2l0cyBhcmUgY29tcGFyZWQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2UucG5nIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgxYzNkZQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2UucG5nCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2Uuc3ZnIGIvRG9jL2xpYnJhcnkvcGF0aGxpYi1pbmhlcml0YW5jZS5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY0MjAwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3BhdGhsaWItaW5oZXJpdGFuY2Uuc3ZnCkBAIC0wLDAgKzEsNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJ5ZXMiPz4KKworPHN2ZyB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAuMCAwLjAgNTM4LjAgNDk2LjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIgc3Ryb2tlLW1pdGVybGltaXQ9IjEwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48Y2xpcFBhdGggaWQ9InAuMCI+PHBhdGggZD0ibTAgMGw1MzguMCAwbDAgNDk2LjBsLTUzOC4wIDBsMCAtNDk2LjB6IiBjbGlwLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48L2NsaXBQYXRoPjxnIGNsaXAtcGF0aD0idXJsKCNwLjApIj48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTAgMGw1MzguOTE2IDBsMCA0OTYuMDgzOThsLTUzOC45MTYgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0xNzYuMCAyNC4wbDE4Ny40MzMwNyAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNyAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNzYuMCAyNC4wbDE4Ny40MzMwNyAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNyAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTIzNS4xODUyNyA2Ni44Nzc3MTZsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTEzLjkyOTY4NzUgLTIuMjM0Mzc1bDAgNS40ODQzNzVxMC41MTU2MjUgMCAwLjc1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjUxNTYyNSAwbDAgLTAuMzc1cS0wLjY4NzUgMC4zMTI1IC0xLjMxMjUgMC40Njg3NXEtMC42MjUgMC4xNzE4NzUgLTEuMTg3NSAwLjE3MTg3NXEtMC43OTY4NzUgMCAtMS4zNzUgLTAuMzI4MTI1cS0wLjU3ODEyNSAtMC4zNDM3NSAtMC45MDYyNSAtMC45Mzc1cS0wLjI1IC0wLjQyMTg3NSAtMC4yNSAtMS4wNDY4NzVsMCAtMy40NTMxMjVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuODc1IDBsMCA0Ljc2NTYyNXEwIDAuNSAwLjIzNDM3NSAwLjc1cTAuMjUgMC4yMzQzNzUgMC43NjU2MjUgMC4yMzQzNzVxMC40ODQzNzUgMCAxLjAzMTI1IC0wLjE4NzVxMC41NjI1IC0wLjIwMzEyNSAxLjM5MDYyNSAtMC43MDMxMjVsMCAtMy4yNjU2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTUuODY3MTg3NSAwbDAgMS4wcTEuMDE1NjI1IC0wLjczNDM3NSAxLjU5Mzc1IC0wLjk2ODc1cTAuNTc4MTI1IC0wLjI1IDEuMDkzNzUgLTAuMjVxMC43ODEyNSAwIDEuNTE1NjI1IDAuNTc4MTI1cTAuNSAwLjM5MDYyNSAwLjUgMC43OTY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTkzNzVxLTAuMjM0Mzc1IDAuMjM0Mzc1IC0wLjU2MjUgMC4yMzQzNzVxLTAuMjk2ODc1IDAgLTAuNjI1IC0wLjI5Njg3NXEtMC4zMjgxMjUgLTAuMjk2ODc1IC0wLjU5Mzc1IC0wLjI5Njg3NXEtMC4zMjgxMjUgMCAtMS4wIDAuNDIxODc1cS0wLjY3MTg3NSAwLjQyMTg3NSAtMS42NzE4NzUgMS4yNjU2MjVsMCAyLjQwNjI1bDIuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC00LjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuOTUzMTI1IDBsMCAtMy44OTA2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTEzLjk2MDkzNzUgNC4zNTkzNzVsLTYuNTc4MTI1IDBxMC4yNSAwLjYyNSAwLjg5MDYyNSAxLjAxNTYyNXEwLjY0MDYyNSAwLjM3NSAxLjcxODc1IDAuMzc1cTAuODkwNjI1IDAgMi4zNzUgLTAuMzkwNjI1cTAuNjA5Mzc1IC0wLjE1NjI1IDAuODQzNzUgLTAuMTU2MjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIxODc1IDAuMjE4NzUgMC4yMTg3NSAwLjU2MjVxMCAwLjMxMjUgLTAuMjM0Mzc1IDAuNTMxMjVxLTAuMzEyNSAwLjI5Njg3NSAtMS41MzEyNSAwLjU2MjVxLTEuMjAzMTI1IDAuMjY1NjI1IC0yLjMxMjUgMC4yNjU2MjVxLTEuOTIxODc1IDAgLTMuMDc4MTI1IC0xLjA5Mzc1cS0xLjE1NjI1IC0xLjA5Mzc1IC0xLjE1NjI1IC0yLjY3MTg3NXEwIC0xLjY4NzUgMS4yNSAtMi43NXExLjI1IC0xLjA2MjUgMi44NzUgLTEuMDYyNXEwLjk2ODc1IDAgMS43ODEyNSAwLjM0Mzc1cTAuODI4MTI1IDAuMzQzNzUgMS4yMTg3NSAwLjc1cTAuNTYyNSAwLjU3ODEyNSAwLjkzNzUgMS40MjE4NzVxMC4yNSAwLjU5Mzc1IDAuMjUgMS4zNzVsMCAwLjY4NzV6bS0xLjc4MTI1IC0xLjYwOTM3NXEtMC4zNTkzNzUgLTAuNjg3NSAtMC45NTMxMjUgLTEuMDE1NjI1cS0wLjU5Mzc1IC0wLjM0Mzc1IC0xLjQyMTg3NSAtMC4zNDM3NXEtMC44MTI1IDAgLTEuNDA2MjUgMC4zNDM3NXEtMC41OTM3NSAwLjMyODEyNSAtMC45Njg3NSAxLjAxNTYyNWw0Ljc1IDB6bTYuNDI5Njg3NSAxLjA5Mzc1bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMS45NzY1NjI1IDQuODU5Mzc1bDAgLTAuMzc1cS0wLjYwOTM3NSAwLjMxMjUgLTEuMzQzNzUgMC40Njg3NXEtMC43MTg3NSAwLjE3MTg3NSAtMS4zMTI1IDAuMTcxODc1cS0xLjI4MTI1IDAgLTIuMDkzNzUgLTAuNjg3NXEtMC43OTY4NzUgLTAuNjg3NSAtMC43OTY4NzUgLTEuNTE1NjI1cTAgLTEuMCAxLjAxNTYyNSAtMS44NTkzNzVxMS4wMzEyNSAtMC44NzUgMi44NDM3NSAtMC44NzVxMC43MzQzNzUgMCAxLjY4NzUgMC4xNTYyNWwwIC0wLjM3NXEwIC0wLjM1OTM3NSAtMC4zMTI1IC0wLjU3ODEyNXEtMC4zMTI1IC0wLjIzNDM3NSAtMS4xNzE4NzUgLTAuMjM0Mzc1cS0wLjcxODc1IDAgLTEuODQzNzUgMC4yODEyNXEtMC40MjE4NzUgMC4wOTM3NSAtMC42NTYyNSAwLjA5Mzc1cS0wLjMyODEyNSAwIC0wLjU0Njg3NSAtMC4yMTg3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTkzNzVxMCAtMC4yMDMxMjUgMC4wNzgxMjUgLTAuMzQzNzVxMC4wNzgxMjUgLTAuMTU2MjUgMC4yMTg3NSAtMC4yNXEwLjE0MDYyNSAtMC4wOTM3NSAwLjU3ODEyNSAtMC4yMTg3NXEwLjU5Mzc1IC0wLjE1NjI1IDEuMjAzMTI1IC0wLjI1cTAuNjI1IC0wLjEwOTM3NSAxLjEyNSAtMC4xMDkzNzVxMS41IDAgMi4zMTI1IDAuNjU2MjVxMC44MjgxMjUgMC42NDA2MjUgMC44MjgxMjUgMS43NWwwIDMuMjk2ODc1bDAuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjg3NSAwem0wIC0yLjg3NXEtMC45Njg3NSAtMC4xODc1IC0xLjc4MTI1IC0wLjE4NzVxLTAuOTY4NzUgMCAtMS42NzE4NzUgMC40ODQzNzVxLTAuNDM3NSAwLjI5Njg3NSAtMC40Mzc1IDAuNjA5Mzc1cTAgMC4yMzQzNzUgMC4yMDMxMjUgMC4zNzVxMC4zOTA2MjUgMC4yNSAxLjA3ODEyNSAwLjI1cTAuNTc4MTI1IDAgMS4yOTY4NzUgLTAuMjE4NzVxMC43MzQzNzUgLTAuMjM0Mzc1IDEuMzEyNSAtMC42MjVsMCAtMC42ODc1em03Ljc1NzgxMjUgLTIuNjI1bDAgMy4yMTg3NXEwIDAuNTE1NjI1IDAuMjE4NzUgMC42NzE4NzVxMC4zMjgxMjUgMC4yNjU2MjUgMS4xNzE4NzUgMC4yNjU2MjVxMS4yMTg3NSAwIDIuMjY1NjI1IC0wLjUzMTI1cTAuMzkwNjI1IC0wLjIwMzEyNSAwLjYyNSAtMC4yMDMxMjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIzNDM3NSAwLjIzNDM3NSAwLjIzNDM3NSAwLjU3ODEyNXEwIDAuMzEyNSAtMC4yNSAwLjUzMTI1cS0wLjM3NSAwLjM3NSAtMS41MTU2MjUgMC42ODc1cS0xLjEyNSAwLjMxMjUgLTEuODkwNjI1IDAuMzEyNXEtMS41IDAgLTIuMjUgLTAuNjQwNjI1cS0wLjczNDM3NSAtMC42NTYyNSAtMC43MzQzNzUgLTEuNTkzNzVsMCAtMy41MzEyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMC41NzgxMjUgMGwwIC0xLjQ1MzEyNXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjM1OTM3NSAwIDAuNTc4MTI1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDEuNDUzMTI1bDIuOTY4NzUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0yLjk2ODc1IDB6bTguMzUxNTYyNSAtNC42NDA2MjVsMCAzLjQyMTg3NXEwLjUgLTAuMjk2ODc1IDEuMCAtMC40Mzc1cTAuNTE1NjI1IC0wLjE1NjI1IDEuMDQ2ODc1IC0wLjE1NjI1cTAuODI4MTI1IDAgMS40Njg3NSAwLjI4MTI1cTAuNjU2MjUgMC4yODEyNSAxLjA3ODEyNSAwLjg5MDYyNXEwLjQyMTg3NSAwLjYwOTM3NSAwLjQyMTg3NSAxLjUzMTI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4yMDMxMjUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0yLjg5MDYyNXEwIC0wLjYyNSAtMC4yODEyNSAtMC44NzVxLTAuMzU5Mzc1IC0wLjMyODEyNSAtMS4wNzgxMjUgLTAuMzI4MTI1cS0wLjUzMTI1IDAgLTAuOTUzMTI1IDAuMjAzMTI1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA5Mzc1IDAuODkwNjI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtNi45MjE4NzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0xNi4wIDE0NC4wbDE4Ny40MzMwNiAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNiAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNi4wIDE0NC4wbDE4Ny40MzMwNiAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNiAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTUxLjE4MTM3NCAxODYuODc3NzJsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTEzLjkyOTY4NzUgLTIuMjM0Mzc1bDAgNS40ODQzNzVxMC41MTU2MjUgMCAwLjc1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjUxNTYyNSAwbDAgLTAuMzc1cS0wLjY4NzUgMC4zMTI1IC0xLjMxMjUgMC40Njg3NXEtMC42MjUgMC4xNzE4NzUgLTEuMTg3NSAwLjE3MTg3NXEtMC43OTY4NzUgMCAtMS4zNzUgLTAuMzI4MTI1cS0wLjU3ODEyNSAtMC4zNDM3NSAtMC45MDYyNSAtMC45Mzc1cS0wLjI1IC0wLjQyMTg3NSAtMC4yNSAtMS4wNDY4NzVsMCAtMy40NTMxMjVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuODc1IDBsMCA0Ljc2NTYyNXEwIDAuNSAwLjIzNDM3NSAwLjc1cTAuMjUgMC4yMzQzNzUgMC43NjU2MjUgMC4yMzQzNzVxMC40ODQzNzUgMCAxLjAzMTI1IC0wLjE4NzVxMC41NjI1IC0wLjIwMzEyNSAxLjM5MDYyNSAtMC43MDMxMjVsMCAtMy4yNjU2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTUuODY3MTg3NSAwbDAgMS4wcTEuMDE1NjI1IC0wLjczNDM3NSAxLjU5Mzc1IC0wLjk2ODc1cTAuNTc4MTI1IC0wLjI1IDEuMDkzNzUgLTAuMjVxMC43ODEyNSAwIDEuNTE1NjI1IDAuNTc4MTI1cTAuNSAwLjM5MDYyNSAwLjUgMC43OTY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTkzNzVxLTAuMjM0Mzc1IDAuMjM0Mzc1IC0wLjU2MjUgMC4yMzQzNzVxLTAuMjk2ODc1IDAgLTAuNjI1IC0wLjI5Njg3NXEtMC4zMjgxMjUgLTAuMjk2ODc1IC0wLjU5Mzc1IC0wLjI5Njg3NXEtMC4zMjgxMjUgMCAtMS4wIDAuNDIxODc1cS0wLjY3MTg3NSAwLjQyMTg3NSAtMS42NzE4NzUgMS4yNjU2MjVsMCAyLjQwNjI1bDIuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC00LjgyODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuOTUzMTI1IDBsMCAtMy44OTA2MjVsLTAuNTc4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuMTcxODc1IDB6bTEzLjk2MDkzNzUgNC4zNTkzNzVsLTYuNTc4MTI1IDBxMC4yNSAwLjYyNSAwLjg5MDYyNSAxLjAxNTYyNXEwLjY0MDYyNSAwLjM3NSAxLjcxODc1IDAuMzc1cTAuODkwNjI1IDAgMi4zNzUgLTAuMzkwNjI1cTAuNjA5Mzc1IC0wLjE1NjI1IDAuODQzNzUgLTAuMTU2MjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIxODc1IDAuMjE4NzUgMC4yMTg3NSAwLjU2MjVxMCAwLjMxMjUgLTAuMjM0Mzc1IDAuNTMxMjVxLTAuMzEyNSAwLjI5Njg3NSAtMS41MzEyNSAwLjU2MjVxLTEuMjAzMTI1IDAuMjY1NjI1IC0yLjMxMjUgMC4yNjU2MjVxLTEuOTIxODc1IDAgLTMuMDc4MTI1IC0xLjA5Mzc1cS0xLjE1NjI1IC0xLjA5Mzc1IC0xLjE1NjI1IC0yLjY3MTg3NXEwIC0xLjY4NzUgMS4yNSAtMi43NXExLjI1IC0xLjA2MjUgMi44NzUgLTEuMDYyNXEwLjk2ODc1IDAgMS43ODEyNSAwLjM0Mzc1cTAuODI4MTI1IDAuMzQzNzUgMS4yMTg3NSAwLjc1cTAuNTYyNSAwLjU3ODEyNSAwLjkzNzUgMS40MjE4NzVxMC4yNSAwLjU5Mzc1IDAuMjUgMS4zNzVsMCAwLjY4NzV6bS0xLjc4MTI1IC0xLjYwOTM3NXEtMC4zNTkzNzUgLTAuNjg3NSAtMC45NTMxMjUgLTEuMDE1NjI1cS0wLjU5Mzc1IC0wLjM0Mzc1IC0xLjQyMTg3NSAtMC4zNDM3NXEtMC44MTI1IDAgLTEuNDA2MjUgMC4zNDM3NXEtMC41OTM3NSAwLjMyODEyNSAtMC45Njg3NSAxLjAxNTYyNWw0Ljc1IDB6bTYuNDI5Njg3NSAxLjA5Mzc1bDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xNC42OTUzMTI1IDEuNDM3NXEwIDAuOTIxODc1IC0wLjUxNTYyNSAxLjc5Njg3NXEtMC41MTU2MjUgMC44NTkzNzUgLTEuNTMxMjUgMS4zNzVxLTEuMCAwLjUxNTYyNSAtMi4xMDkzNzUgMC41MTU2MjVxLTEuMDkzNzUgMCAtMi4wOTM3NSAtMC41cS0xLjAgLTAuNTE1NjI1IC0xLjUzMTI1IC0xLjM3NXEtMC41MTU2MjUgLTAuODc1IC0wLjUxNTYyNSAtMS44MjgxMjVxMCAtMC45NTMxMjUgMC41MzEyNSAtMS44NzVxMC41MzEyNSAtMC45Mzc1IDEuNTMxMjUgLTEuNDY4NzVxMS4wIC0wLjUzMTI1IDIuMDc4MTI1IC0wLjUzMTI1cTEuMDkzNzUgMCAyLjEwOTM3NSAwLjU0Njg3NXExLjAxNTYyNSAwLjU0Njg3NSAxLjUzMTI1IDEuNDY4NzVxMC41MTU2MjUgMC45MDYyNSAwLjUxNTYyNSAxLjg3NXptLTEuNjA5Mzc1IDAuMDE1NjI1cTAgLTAuNzgxMjUgLTAuNTQ2ODc1IC0xLjQyMTg3NXEtMC43NjU2MjUgLTAuODc1IC0yLjAgLTAuODc1cS0xLjA3ODEyNSAwIC0xLjgxMjUgMC43MDMxMjVxLTAuNzE4NzUgMC42ODc1IC0wLjcxODc1IDEuNTkzNzVxMCAwLjc1IDAuNzM0Mzc1IDEuNDA2MjVxMC43MzQzNzUgMC42NTYyNSAxLjc5Njg3NSAwLjY1NjI1cTEuMDc4MTI1IDAgMS44MTI1IC0wLjY1NjI1cTAuNzM0Mzc1IC0wLjY1NjI1IDAuNzM0Mzc1IC0xLjQwNjI1em04Ljc3MzQzNzUgLTEuODEyNXEtMC4zOTA2MjUgLTAuMjUgLTAuODI4MTI1IC0wLjM1OTM3NXEtMC40MjE4NzUgLTAuMTI1IC0wLjg5MDYyNSAtMC4xMjVxLTAuOTIxODc1IDAgLTEuNDY4NzUgMC4yOTY4NzVxLTAuMjUgMC4xNDA2MjUgLTAuMjUgMC4yOTY4NzVxMCAwLjE3MTg3NSAwLjMyODEyNSAwLjM0Mzc1cTAuMjUgMC4xMjUgMS4xMjUgMC4yNXExLjU5Mzc1IDAuMjE4NzUgMi4yMTg3NSAwLjQzNzVxMC44MTI1IDAuMjgxMjUgMS4yNSAwLjg1OTM3NXEwLjQ1MzEyNSAwLjU2MjUgMC40NTMxMjUgMS4yMDMxMjVxMCAwLjg1OTM3NSAtMC43NSAxLjQzNzVxLTEuMDkzNzUgMC44NDM3NSAtMi44MjgxMjUgMC44NDM3NXEtMC42ODc1IDAgLTEuMjgxMjUgLTAuMTI1cS0wLjU5Mzc1IC0wLjEyNSAtMS4wNzgxMjUgLTAuMzU5Mzc1cS0wLjEyNSAwLjA5Mzc1IC0wLjI2NTYyNSAwLjE1NjI1cS0wLjEyNSAwLjA0Njg3NSAtMC4yNjU2MjUgMC4wNDY4NzVxLTAuMzc1IDAgLTAuNTkzNzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjI1IC0wLjIxODc1IC0wLjgyODEyNWwwIC0wLjU0Njg3NXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjI5Njg3NSAwIDAuNDg0Mzc1IDAuMTU2MjVxMC4yMDMxMjUgMC4xNTYyNSAwLjMxMjUgMC41NDY4NzVxMC4zNTkzNzUgMC4zMTI1IDAuODc1IDAuNDg0Mzc1cTAuNTE1NjI1IDAuMTU2MjUgMS4xODc1IDAuMTU2MjVxMS4xMDkzNzUgMCAxLjcxODc1IC0wLjM0Mzc1cTAuMjgxMjUgLTAuMTcxODc1IDAuMjgxMjUgLTAuMzU5Mzc1cTAgLTAuMzEyNSAtMC40MDYyNSAtMC41MTU2MjVxLTAuNDIxODc1IC0wLjIwMzEyNSAtMS43MTg3NSAtMC4zNDM3NXEtMS45MjE4NzUgLTAuMjAzMTI1IC0yLjU3ODEyNSAtMC43ODEyNXEtMC42NDA2MjUgLTAuNTc4MTI1IC0wLjY0MDYyNSAtMS40MDYyNXEwIC0wLjg1OTM3NSAwLjcxODc1IC0xLjQzNzVxMC45ODQzNzUgLTAuNzgxMjUgMi41NzgxMjUgLTAuNzgxMjVxMC41NjI1IDAgMS4wNjI1IDAuMTA5Mzc1cTAuNTE1NjI1IDAuMTA5Mzc1IDAuOTg0Mzc1IDAuMzI4MTI1cTAuMTU2MjUgLTAuMTA5Mzc1IDAuMjgxMjUgLTAuMTU2MjVxMC4xMjUgLTAuMDYyNSAwLjIzNDM3NSAtMC4wNjI1cTAuMzI4MTI1IDAgMC41NDY4NzUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMC4zOTA2MjVxMCAwLjUzMTI1IC0wLjEyNSAwLjcxODc1cS0wLjI1IDAuMzU5Mzc1IC0wLjY3MTg3NSAwLjM1OTM3NXEtMC4yOTY4NzUgMCAtMC41MTU2MjUgLTAuMTcxODc1cS0wLjIxODc1IC0wLjE4NzUgLTAuMjgxMjUgLTAuNDg0Mzc1em04LjQ0NTMxMjUgLTQuOTIxODc1bDAgMS43MDMxMjVsLTEuOTA2MjUgMGwwIC0xLjcwMzEyNWwxLjkwNjI1IDB6bTAuMjE4NzUgMy4wNDY4NzVsMCA1LjQ4NDM3NWwxLjkyMTg3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTUuNDM3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuOTIxODc1IDBsMCAtMy44OTA2MjVsLTEuMjk2ODc1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuODkwNjI1IDB6bTEwLjAwNzgwNSAzLjQwNjI1bDIuNDM3NSAyLjA3ODEyNXEwLjQzNzUgMC4wMzEyNSAwLjY1NjI1IDAuMjVxMC4yMTg3NSAwLjIxODc1IDAuMjE4NzUgMC41NjI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0xLjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMjgxMjUgMC4xNzE4NzUgLTAuNXEwLjE4NzUgLTAuMjE4NzUgMC40ODQzNzUgLTAuMjk2ODc1bC0xLjE4NzUgLTEuMDMxMjVsLTEuMjE4NzQyNCAxLjAzMTI1cTAuMzU5MzY3MzcgMC4wOTM3NSAwLjUxNTYxNzQgMC4yOTY4NzVxMC4xNzE4NzUgMC4xODc1IDAuMTcxODc1IDAuNXEwIDAuMzU5Mzc1IC0wLjI1IDAuNTkzNzVxLTAuMjM0MzY3MzcgMC4yMTg3NSAtMC44MTI0OTI0IDAuMjE4NzVsLTEuODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjMyODEyNSAwLjIxODc1IC0wLjU0Njg3NXEwLjIxODc1IC0wLjIxODc1IDAuNjU2MjUgLTAuMjVsMi4zNzUgLTIuMDkzNzVsLTIuMTA5Mzc1IC0xLjc5Njg3NXEtMC40MDYyNSAtMC4wMzEyNSAtMC42MjUgLTAuMjVxLTAuMjE4NzUgLTAuMjE4NzUgLTAuMjE4NzUgLTAuNTQ2ODc1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS41IDBxMC41NzgxMjUgMCAwLjgxMjQ5MjQgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU2MjVxMCAwLjQ2ODc1IC0wLjQzNzQ5MjM3IDAuNzVsMC45Njg3NDI0IDAuODEyNWwwLjk1MzEyNSAtMC44MjgxMjVxLTAuNDIxODc1IC0wLjI5Njg3NSAtMC40MjE4NzUgLTAuNzAzMTI1cTAgLTAuMzc1IDAuMjM0Mzc1IC0wLjU5Mzc1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS40ODQzNzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjMyODEyNSAtMC4yMTg3NSAwLjU0Njg3NXEtMC4yMTg3NSAwLjIxODc1IC0wLjY0MDYyNSAwLjI1bC0yLjEwOTM3NSAxLjgxMjV6bTcuNDc2NTYyNSAwLjQzNzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU2MjUgNC44NTkzNzVsMCAtMC4zNzVxLTAuNjA5Mzc1IDAuMzEyNSAtMS4zNDM3NSAwLjQ2ODc1cS0wLjcxODc1IDAuMTcxODc1IC0xLjMxMjUgMC4xNzE4NzVxLTEuMjgxMjUgMCAtMi4wOTM3NSAtMC42ODc1cS0wLjc5Njg3NSAtMC42ODc1IC0wLjc5Njg3NSAtMS41MTU2MjVxMCAtMS4wIDEuMDE1NjI1IC0xLjg1OTM3NXExLjAzMTI1IC0wLjg3NSAyLjg0Mzc1IC0wLjg3NXEwLjczNDM3NSAwIDEuNjg3NSAwLjE1NjI1bDAgLTAuMzc1cTAgLTAuMzU5Mzc1IC0wLjMxMjUgLTAuNTc4MTI1cS0wLjMxMjUgLTAuMjM0Mzc1IC0xLjE3MTg3NSAtMC4yMzQzNzVxLTAuNzE4NzUgMCAtMS44NDM3NSAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjUgLTAuMTA5Mzc1IDEuMTI1IC0wLjEwOTM3NXExLjUgMCAyLjMxMjUgMC42NTYyNXEwLjgyODEyNSAwLjY0MDYyNSAwLjgyODEyNSAxLjc1bDAgMy4yOTY4NzVsMC4yODEyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODc1IDB6bTAgLTIuODc1cS0wLjk2ODc1IC0wLjE4NzUgLTEuNzgxMjUgLTAuMTg3NXEtMC45Njg3NSAwIC0xLjY3MTg3NSAwLjQ4NDM3NXEtMC40Mzc1IDAuMjk2ODc1IC0wLjQzNzUgMC42MDkzNzVxMCAwLjIzNDM3NSAwLjIwMzEyNSAwLjM3NXEwLjM5MDYyNSAwLjI1IDEuMDc4MTI1IDAuMjVxMC41NzgxMjUgMCAxLjI5Njg3NSAtMC4yMTg3NXEwLjczNDM3NSAtMC4yMzQzNzUgMS4zMTI1IC0wLjYyNWwwIC0wLjY4NzV6bTcuNzU3ODEyNSAtMi42MjVsMCAzLjIxODc1cTAgMC41MTU2MjUgMC4yMTg3NSAwLjY3MTg3NXEwLjMyODEyNSAwLjI2NTYyNSAxLjE3MTg3NSAwLjI2NTYyNXExLjIxODc1IDAgMi4yNjU2MjUgLTAuNTMxMjVxMC4zOTA2MjUgLTAuMjAzMTI1IDAuNjI1IC0wLjIwMzEyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjM0Mzc1IDAuMjM0Mzc1IDAuMjM0Mzc1IDAuNTc4MTI1cTAgMC4zMTI1IC0wLjI1IDAuNTMxMjVxLTAuMzc1IDAuMzc1IC0xLjUxNTYyNSAwLjY4NzVxLTEuMTI1IDAuMzEyNSAtMS44OTA2MjUgMC4zMTI1cS0xLjUgMCAtMi4yNSAtMC42NDA2MjVxLTAuNzM0Mzc1IC0wLjY1NjI1IC0wLjczNDM3NSAtMS41OTM3NWwwIC0zLjUzMTI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwwLjU3ODEyNSAwbDAgLTEuNDUzMTI1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMzU5Mzc1IDAgMC41NzgxMjUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMS40NTMxMjVsMi45Njg3NSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTIuOTY4NzUgMHptOC4zNTE1NjI1IC00LjY0MDYyNWwwIDMuNDIxODc1cTAuNSAtMC4yOTY4NzUgMS4wIC0wLjQzNzVxMC41MTU2MjUgLTAuMTU2MjUgMS4wNDY4NzUgLTAuMTU2MjVxMC44MjgxMjUgMCAxLjQ2ODc1IDAuMjgxMjVxMC42NTYyNSAwLjI4MTI1IDEuMDc4MTI1IDAuODkwNjI1cTAuNDIxODc1IDAuNjA5Mzc1IDAuNDIxODc1IDEuNTMxMjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjIwMzEyNSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTIuODkwNjI1cTAgLTAuNjI1IC0wLjI4MTI1IC0wLjg3NXEtMC4zNTkzNzUgLTAuMzI4MTI1IC0xLjA3ODEyNSAtMC4zMjgxMjVxLTAuNTMxMjUgMCAtMC45NTMxMjUgMC4yMDMxMjVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDkzNzUgMC44OTA2MjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC02LjkyMTg3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0ibTMzNi4wIDE0My40NjQ1N2wxODcuNDMzMDQgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDQgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMzM2LjAgMTQzLjQ2NDU3bDE4Ny40MzMwNCAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNCAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTM2MS41Nzk4IDE4Ni4zNDIyOWwwIDEuNjQwNjI1bDEuNjI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMy40Njg3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDAuMjUgMGwwIC02LjI2NTYyNWwtMC4yNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDMuNjg3NSAwLjAxNTYyNXExLjYyNSAwIDIuNTYyNSAwLjg5MDYyNXEwLjk1MzEyNSAwLjg3NSAwLjk1MzEyNSAyLjE1NjI1cTAgMC43MDMxMjUgLTAuMzEyNSAxLjMyODEyNXEtMC4yNSAwLjQ2ODc1IC0wLjgxMjUgMC45MjE4NzVxLTAuNTYyNSAwLjQ1MzEyNSAtMS4xNTYyNSAwLjY4NzVxLTAuNTkzNzUgMC4yMzQzNzUgLTEuNTYyNSAwLjIzNDM3NWwtMS41MTU2MjUgMHptMCAtMS42MDkzNzVsMS40ODQzNzUgMHExLjA0Njg3NSAwIDEuNjU2MjUgLTAuNDY4NzVxMC42MjUgLTAuNDY4NzUgMC42MjUgLTEuMTQwNjI1cTAgLTAuNTYyNSAtMC41IC0wLjk4NDM3NXEtMC41IC0wLjQyMTg3NSAtMS40MjE4NzUgLTAuNDIxODc1bC0xLjg0Mzc1IDBsMCAzLjAxNTYyNXptMTMuOTI5Njg3NSAtMi4yMzQzNzVsMCA1LjQ4NDM3NXEwLjUxNTYyNSAwIDAuNzUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuNTE1NjI1IDBsMCAtMC4zNzVxLTAuNjg3NSAwLjMxMjUgLTEuMzEyNSAwLjQ2ODc1cS0wLjYyNSAwLjE3MTg3NSAtMS4xODc1IDAuMTcxODc1cS0wLjc5Njg3NSAwIC0xLjM3NSAtMC4zMjgxMjVxLTAuNTc4MTI1IC0wLjM0Mzc1IC0wLjkwNjI1IC0wLjkzNzVxLTAuMjUgLTAuNDIxODc1IC0wLjI1IC0xLjA0Njg3NWwwIC0zLjQ1MzEyNWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS44NzUgMGwwIDQuNzY1NjI1cTAgMC41IDAuMjM0Mzc1IDAuNzVxMC4yNSAwLjIzNDM3NSAwLjc2NTYyNSAwLjIzNDM3NXEwLjQ4NDM3NSAwIDEuMDMxMjUgLTAuMTg3NXEwLjU2MjUgLTAuMjAzMTI1IDEuMzkwNjI1IC0wLjcwMzEyNWwwIC0zLjI2NTYyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi4xNzE4NzUgMHptNS44NjcxODc1IDBsMCAxLjBxMS4wMTU2MjUgLTAuNzM0Mzc1IDEuNTkzNzUgLTAuOTY4NzVxMC41NzgxMjUgLTAuMjUgMS4wOTM3NSAtMC4yNXEwLjc4MTI1IDAgMS41MTU2MjUgMC41NzgxMjVxMC41IDAuMzkwNjI1IDAuNSAwLjc5Njg3NXEwIDAuMzQzNzUgLTAuMjUgMC41OTM3NXEtMC4yMzQzNzUgMC4yMzQzNzUgLTAuNTYyNSAwLjIzNDM3NXEtMC4yOTY4NzUgMCAtMC42MjUgLTAuMjk2ODc1cS0wLjMyODEyNSAtMC4yOTY4NzUgLTAuNTkzNzUgLTAuMjk2ODc1cS0wLjMyODEyNSAwIC0xLjAgMC40MjE4NzVxLTAuNjcxODc1IDAuNDIxODc1IC0xLjY3MTg3NSAxLjI2NTYyNWwwIDIuNDA2MjVsMi4yODEyNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTQuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC45NTMxMjUgMGwwIC0zLjg5MDYyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMi4xNzE4NzUgMHptMTMuOTYwOTM3NSA0LjM1OTM3NWwtNi41NzgxMjUgMHEwLjI1IDAuNjI1IDAuODkwNjI1IDEuMDE1NjI1cTAuNjQwNjI1IDAuMzc1IDEuNzE4NzUgMC4zNzVxMC44OTA2MjUgMCAyLjM3NSAtMC4zOTA2MjVxMC42MDkzNzUgLTAuMTU2MjUgMC44NDM3NSAtMC4xNTYyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjE4NzUgMC4yMTg3NSAwLjIxODc1IDAuNTYyNXEwIDAuMzEyNSAtMC4yMzQzNzUgMC41MzEyNXEtMC4zMTI1IDAuMjk2ODc1IC0xLjUzMTI1IDAuNTYyNXEtMS4yMDMxMjUgMC4yNjU2MjUgLTIuMzEyNSAwLjI2NTYyNXEtMS45MjE4NzUgMCAtMy4wNzgxMjUgLTEuMDkzNzVxLTEuMTU2MjUgLTEuMDkzNzUgLTEuMTU2MjUgLTIuNjcxODc1cTAgLTEuNjg3NSAxLjI1IC0yLjc1cTEuMjUgLTEuMDYyNSAyLjg3NSAtMS4wNjI1cTAuOTY4NzUgMCAxLjc4MTI1IDAuMzQzNzVxMC44MjgxMjUgMC4zNDM3NSAxLjIxODc1IDAuNzVxMC41NjI1IDAuNTc4MTI1IDAuOTM3NSAxLjQyMTg3NXEwLjI1IDAuNTkzNzUgMC4yNSAxLjM3NWwwIDAuNjg3NXptLTEuNzgxMjUgLTEuNjA5Mzc1cS0wLjM1OTM3NSAtMC42ODc1IC0wLjk1MzEyNSAtMS4wMTU2MjVxLTAuNTkzNzUgLTAuMzQzNzUgLTEuNDIxODc1IC0wLjM0Mzc1cS0wLjgxMjUgMCAtMS40MDYyNSAwLjM0Mzc1cS0wLjU5Mzc1IDAuMzI4MTI1IC0wLjk2ODc1IDEuMDE1NjI1bDQuNzUgMHptNy4zNjcxODc1IC0wLjIwMzEyNWwtMS40ODQzNzUgNC41NDY4NzVsLTEuNzk2ODc1IDBsLTAuOTUzMTI1IC03Ljg3NXEtMC4zNzUgLTAuMDQ2ODc1IC0wLjU2MjUgLTAuMjVxLTAuMTg3NSAtMC4yMDMxMjUgLTAuMTg3NSAtMC41MzEyNXEwIC0wLjM3NSAwLjI1IC0wLjU5Mzc1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwyLjEyNSAwLjAxNTYyNXEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0wLjgyODEyNSAwbDAuNTMxMjUgNC40ODQzNzVsMS4yNSAtMy43MzQzNzVsMS42NzE4NzUgMGwxLjI1IDMuNzM0Mzc1bDAuNTMxMjUgLTQuNDg0Mzc1bC0wLjg0Mzc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMTg3NSAtMC4yMzQzNzUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMi4xMjUgMC4wMTU2MjVxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4yOTY4NzUgLTAuMjAzMTI1IDAuNTE1NjI1cS0wLjE4NzUgMC4yMTg3NSAtMC41NjI1IDAuMjgxMjVsLTAuOTIxODc1IDcuODc1bC0xLjc2NTYyNSAwbC0xLjUzMTI1IC00LjU0Njg3NXptMTAuMTY0MDYyNSAtNS41OTM3NWwwIDEuNzAzMTI1bC0xLjkwNjI1IDBsMCAtMS43MDMxMjVsMS45MDYyNSAwem0wLjIxODc1IDMuMDQ2ODc1bDAgNS40ODQzNzVsMS45MjE4NzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC01LjQzNzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjkyMTg3NSAwbDAgLTMuODkwNjI1bC0xLjI5Njg3NSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjg5MDYyNSAwem03LjE5NTMxMjUgMGwwIDAuNTMxMjVxMC40Mzc1IC0wLjM3NSAwLjk1MzEyNSAtMC41NjI1cTAuNTMxMjUgLTAuMTg3NSAxLjE1NjI1IC0wLjE4NzVxMS40MjE4NzUgMCAyLjI1IDAuODkwNjI1cTAuNjU2MjUgMC43MDMxMjUgMC42NTYyNSAxLjg0Mzc1bDAgMi45Njg3NXEwLjUgMCAwLjczNDM3NSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjQ1MzEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjM0Mzc1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC43NSAtMC4yMzQzNzVsMCAtMy4wMTU2MjVxMCAtMC41MzEyNSAtMC4yODEyNSAtMC43NjU2MjVxLTAuMzU5Mzc1IC0wLjMxMjUgLTEuMDkzNzUgLTAuMzEyNXEtMC41NjI1IDAgLTAuOTg0Mzc1IDAuMjE4NzVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDQ2ODc1IDAuOTA2MjVsMCAyLjk2ODc1cTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMy44OTA2MjVxLTAuNSAwIC0wLjc1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjUzMTI1IDB6bTE0Ljg5ODQzNzUgLTMuMDQ2ODc1bDAgOC41MzEyNWwwLjI2NTYyNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuODc1IDBsMCAtMC4zOTA2MjVxLTAuNTQ2ODc1IDAuMzEyNSAtMS4xNDA2MjUgMC40ODQzNzVxLTAuNTkzNzUgMC4xNzE4NzUgLTEuMjM0Mzc1IDAuMTcxODc1cS0xLjgxMjUgMCAtMi45MjE4NzUgLTEuMDQ2ODc1cS0xLjA5Mzc1IC0xLjA0Njg3NSAtMS4wOTM3NSAtMi42MDkzNzVxMCAtMS42MjUgMS4xNTYyNSAtMi43NjU2MjVxMS4xNTYyNSAtMS4xNTYyNSAyLjgyODEyNSAtMS4xNTYyNXEwLjYyNSAwIDEuMjE4NzUgMC4yMDMxMjVxMC42MDkzNzUgMC4xODc1IDEuMTg3NSAwLjU2MjVsMCAtMS45ODQzNzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6bS0xLjYwOTM3NSA2Ljc5Njg3NXEwIC0wLjk4NDM3NSAtMC43MDMxMjUgLTEuNjcxODc1cS0wLjY4NzUgLTAuNjg3NSAtMS42ODc1IC0wLjY4NzVxLTEuMCAwIC0xLjcwMzEyNSAwLjY4NzVxLTAuNjg3NSAwLjY4NzUgLTAuNjg3NSAxLjY1NjI1cTAgMC44NzUgMC42MjUgMS40NTMxMjVxMC42MjUgMC41NjI1IDEuNzY1NjI1IDAuNTYyNXExLjEyNSAwIDEuNzUgLTAuNTYyNXEwLjY0MDYyNSAtMC41NzgxMjUgMC42NDA2MjUgLTEuNDM3NXptMTEuNjk1MzEyNSAtMC4wNzgxMjVxMCAwLjkyMTg3NSAtMC41MTU2MjUgMS43OTY4NzVxLTAuNTE1NjI1IDAuODU5Mzc1IC0xLjUzMTI1IDEuMzc1cS0xLjAgMC41MTU2MjUgLTIuMTA5Mzc1IDAuNTE1NjI1cS0xLjA5Mzc1IDAgLTIuMDkzNzUgLTAuNXEtMS4wIC0wLjUxNTYyNSAtMS41MzEyNSAtMS4zNzVxLTAuNTE1NjI1IC0wLjg3NSAtMC41MTU2MjUgLTEuODI4MTI1cTAgLTAuOTUzMTI1IDAuNTMxMjUgLTEuODc1cTAuNTMxMjUgLTAuOTM3NSAxLjUzMTI1IC0xLjQ2ODc1cTEuMCAtMC41MzEyNSAyLjA3ODEyNSAtMC41MzEyNXExLjA5Mzc1IDAgMi4xMDkzNzUgMC41NDY4NzVxMS4wMTU2MjUgMC41NDY4NzUgMS41MzEyNSAxLjQ2ODc1cTAuNTE1NjI1IDAuOTA2MjUgMC41MTU2MjUgMS44NzV6bS0xLjYwOTM3NSAwLjAxNTYyNXEwIC0wLjc4MTI1IC0wLjU0Njg3NSAtMS40MjE4NzVxLTAuNzY1NjI1IC0wLjg3NSAtMi4wIC0wLjg3NXEtMS4wNzgxMjUgMCAtMS44MTI1IDAuNzAzMTI1cS0wLjcxODc1IDAuNjg3NSAtMC43MTg3NSAxLjU5Mzc1cTAgMC43NSAwLjczNDM3NSAxLjQwNjI1cTAuNzM0Mzc1IDAuNjU2MjUgMS43OTY4NzUgMC42NTYyNXExLjA3ODEyNSAwIDEuODEyNSAtMC42NTYyNXEwLjczNDM3NSAtMC42NTYyNSAwLjczNDM3NSAtMS40MDYyNXptNy4wNTQ2ODc1IDAuNDUzMTI1bC0xLjEwOTM3NSAyLjk1MzEyNWwtMS41IDBsLTEuMzQzNzUgLTUuNXEtMC40Mzc1IC0wLjAxNTYyNSAtMC42NzE4NzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41NjI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS40ODQzNzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yODEyNSAwLjYwOTM3NXEtMC4yMTg3NSAwLjE4NzUgLTAuODI4MTI1IDAuMTg3NWwwLjYwOTM3NSAyLjU0Njg3NWwwLjk4NDM3NSAtMi42MDkzNzVsMS40MjE4NzUgMGwxLjAgMi42MDkzNzVsMC42MjUgLTIuNTQ2ODc1cS0wLjU5Mzc1IDAgLTAuNzgxMjUgLTAuMTA5Mzc1cS0wLjM3NSAtMC4yNSAtMC4zNzUgLTAuNjg3NXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzI4MTI1IC0wLjIxODc1IDAuNTQ2ODc1cS0wLjIxODc1IDAuMjE4NzUgLTAuNjQwNjI1IDAuMjVsLTEuMzEyNSA1LjVsLTEuNDg0Mzc1IDBsLTEuMTcxODc1IC0yLjk1MzEyNXptMTEuMzIwMzEyNSAtMi4yNjU2MjVxLTAuMzkwNjI1IC0wLjI1IC0wLjgyODEyNSAtMC4zNTkzNzVxLTAuNDIxODc1IC0wLjEyNSAtMC44OTA2MjUgLTAuMTI1cS0wLjkyMTg3NSAwIC0xLjQ2ODc1IDAuMjk2ODc1cS0wLjI1IDAuMTQwNjI1IC0wLjI1IDAuMjk2ODc1cTAgMC4xNzE4NzUgMC4zMjgxMjUgMC4zNDM3NXEwLjI1IDAuMTI1IDEuMTI1IDAuMjVxMS41OTM3NSAwLjIxODc1IDIuMjE4NzUgMC40Mzc1cTAuODEyNSAwLjI4MTI1IDEuMjUgMC44NTkzNzVxMC40NTMxMjUgMC41NjI1IDAuNDUzMTI1IDEuMjAzMTI1cTAgMC44NTkzNzUgLTAuNzUgMS40Mzc1cS0xLjA5Mzc1IDAuODQzNzUgLTIuODI4MTI1IDAuODQzNzVxLTAuNjg3NSAwIC0xLjI4MTI1IC0wLjEyNXEtMC41OTM3NSAtMC4xMjUgLTEuMDc4MTI1IC0wLjM1OTM3NXEtMC4xMjUgMC4wOTM3NSAtMC4yNjU2MjUgMC4xNTYyNXEtMC4xMjUgMC4wNDY4NzUgLTAuMjY1NjI1IDAuMDQ2ODc1cS0wLjM3NSAwIC0wLjU5Mzc1IC0wLjIzNDM3NXEtMC4yMTg3NSAtMC4yNSAtMC4yMTg3NSAtMC44MjgxMjVsMCAtMC41NDY4NzVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4yOTY4NzUgMCAwLjQ4NDM3NSAwLjE1NjI1cTAuMjAzMTI1IDAuMTU2MjUgMC4zMTI1IDAuNTQ2ODc1cTAuMzU5Mzc1IDAuMzEyNSAwLjg3NSAwLjQ4NDM3NXEwLjUxNTYyNSAwLjE1NjI1IDEuMTg3NSAwLjE1NjI1cTEuMTA5Mzc1IDAgMS43MTg3NSAtMC4zNDM3NXEwLjI4MTI1IC0wLjE3MTg3NSAwLjI4MTI1IC0wLjM1OTM3NXEwIC0wLjMxMjUgLTAuNDA2MjUgLTAuNTE1NjI1cS0wLjQyMTg3NSAtMC4yMDMxMjUgLTEuNzE4NzUgLTAuMzQzNzVxLTEuOTIxODc1IC0wLjIwMzEyNSAtMi41NzgxMjUgLTAuNzgxMjVxLTAuNjQwNjI1IC0wLjU3ODEyNSAtMC42NDA2MjUgLTEuNDA2MjVxMCAtMC44NTkzNzUgMC43MTg3NSAtMS40Mzc1cTAuOTg0Mzc1IC0wLjc4MTI1IDIuNTc4MTI1IC0wLjc4MTI1cTAuNTYyNSAwIDEuMDYyNSAwLjEwOTM3NXEwLjUxNTYyNSAwLjEwOTM3NSAwLjk4NDM3NSAwLjMyODEyNXEwLjE1NjI1IC0wLjEwOTM3NSAwLjI4MTI1IC0wLjE1NjI1cTAuMTI1IC0wLjA2MjUgMC4yMzQzNzUgLTAuMDYyNXEwLjMyODEyNSAwIDAuNTQ2ODc1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDAuMzkwNjI1cTAgMC41MzEyNSAtMC4xMjUgMC43MTg3NXEtMC4yNSAwLjM1OTM3NSAtMC42NzE4NzUgMC4zNTkzNzVxLTAuMjk2ODc1IDAgLTAuNTE1NjI1IC0wLjE3MTg3NXEtMC4yMTg3NSAtMC4xODc1IC0wLjI4MTI1IC0wLjQ4NDM3NXptNi45NDUzMTI1IDEuOTY4NzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU2MjUgNC44NTkzNzVsMCAtMC4zNzVxLTAuNjA5Mzc1IDAuMzEyNSAtMS4zNDM3NSAwLjQ2ODc1cS0wLjcxODc1IDAuMTcxODc1IC0xLjMxMjUgMC4xNzE4NzVxLTEuMjgxMjUgMCAtMi4wOTM3NSAtMC42ODc1cS0wLjc5Njg3NSAtMC42ODc1IC0wLjc5Njg3NSAtMS41MTU2MjVxMCAtMS4wIDEuMDE1NjI1IC0xLjg1OTM3NXExLjAzMTI1IC0wLjg3NSAyLjg0Mzc1IC0wLjg3NXEwLjczNDM3NSAwIDEuNjg3NSAwLjE1NjI1bDAgLTAuMzc1cTAgLTAuMzU5Mzc1IC0wLjMxMjUgLTAuNTc4MTI1cS0wLjMxMjUgLTAuMjM0Mzc1IC0xLjE3MTg3NSAtMC4yMzQzNzVxLTAuNzE4NzUgMCAtMS44NDM3NSAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjUgLTAuMTA5Mzc1IDEuMTI1IC0wLjEwOTM3NXExLjUgMCAyLjMxMjUgMC42NTYyNXEwLjgyODEyNSAwLjY0MDYyNSAwLjgyODEyNSAxLjc1bDAgMy4yOTY4NzVsMC4yODEyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODc1IDB6bTAgLTIuODc1cS0wLjk2ODc1IC0wLjE4NzUgLTEuNzgxMjUgLTAuMTg3NXEtMC45Njg3NSAwIC0xLjY3MTg3NSAwLjQ4NDM3NXEtMC40Mzc1IDAuMjk2ODc1IC0wLjQzNzUgMC42MDkzNzVxMCAwLjIzNDM3NSAwLjIwMzEyNSAwLjM3NXEwLjM5MDYyNSAwLjI1IDEuMDc4MTI1IDAuMjVxMC41NzgxMjUgMCAxLjI5Njg3NSAtMC4yMTg3NXEwLjczNDM3NSAtMC4yMzQzNzUgMS4zMTI1IC0wLjYyNWwwIC0wLjY4NzV6bTcuNzU3ODEyNSAtMi42MjVsMCAzLjIxODc1cTAgMC41MTU2MjUgMC4yMTg3NSAwLjY3MTg3NXEwLjMyODEyNSAwLjI2NTYyNSAxLjE3MTg3NSAwLjI2NTYyNXExLjIxODc1IDAgMi4yNjU2MjUgLTAuNTMxMjVxMC4zOTA2MjUgLTAuMjAzMTI1IDAuNjI1IC0wLjIwMzEyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjM0Mzc1IDAuMjM0Mzc1IDAuMjM0Mzc1IDAuNTc4MTI1cTAgMC4zMTI1IC0wLjI1IDAuNTMxMjVxLTAuMzc1IDAuMzc1IC0xLjUxNTYyNSAwLjY4NzVxLTEuMTI1IDAuMzEyNSAtMS44OTA2MjUgMC4zMTI1cS0xLjUgMCAtMi4yNSAtMC42NDA2MjVxLTAuNzM0Mzc1IC0wLjY1NjI1IC0wLjczNDM3NSAtMS41OTM3NWwwIC0zLjUzMTI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwwLjU3ODEyNSAwbDAgLTEuNDUzMTI1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMzU5Mzc1IDAgMC41NzgxMjUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMS40NTMxMjVsMi45Njg3NSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTIuOTY4NzUgMHptOC4zNTE1NjI1IC00LjY0MDYyNWwwIDMuNDIxODc1cTAuNSAtMC4yOTY4NzUgMS4wIC0wLjQzNzVxMC41MTU2MjUgLTAuMTU2MjUgMS4wNDY4NzUgLTAuMTU2MjVxMC44MjgxMjUgMCAxLjQ2ODc1IDAuMjgxMjVxMC42NTYyNSAwLjI4MTI1IDEuMDc4MTI1IDAuODkwNjI1cTAuNDIxODc1IDAuNjA5Mzc1IDAuNDIxODc1IDEuNTMxMjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjIwMzEyNSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTIuODkwNjI1cTAgLTAuNjI1IC0wLjI4MTI1IC0wLjg3NXEtMC4zNTkzNzUgLTAuMzI4MTI1IC0xLjA3ODEyNSAtMC4zMjgxMjVxLTAuNTMxMjUgMCAtMC45NTMxMjUgMC4yMDMxMjVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDkzNzUgMC44OTA2MjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC02LjkyMTg3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iI2ZmZmZmZiIgZD0ibTE3Ni4wIDI3MS40NjQ1N2wxODcuNDMzMDcgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDcgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMTc2LjAgMjcxLjQ2NDU3bDE4Ny40MzMwNyAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNyAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTI1NC4zODg0IDMxNC4zNDIzbDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xMS45NzY1NjI1IDQuODU5Mzc1bDAgLTAuMzc1cS0wLjYwOTM3NSAwLjMxMjUgLTEuMzQzNzUgMC40Njg3NXEtMC43MTg3NSAwLjE3MTg3NSAtMS4zMTI1IDAuMTcxODc1cS0xLjI4MTI1IDAgLTIuMDkzNzUgLTAuNjg3NXEtMC43OTY4NzUgLTAuNjg3NSAtMC43OTY4NzUgLTEuNTE1NjI1cTAgLTEuMCAxLjAxNTYyNSAtMS44NTkzNzVxMS4wMzEyNSAtMC44NzUgMi44NDM3NSAtMC44NzVxMC43MzQzNzUgMCAxLjY4NzUgMC4xNTYyNWwwIC0wLjM3NXEwIC0wLjM1OTM3NSAtMC4zMTI1IC0wLjU3ODEyNXEtMC4zMTI1IC0wLjIzNDM3NSAtMS4xNzE4NzUgLTAuMjM0Mzc1cS0wLjcxODc1IDAgLTEuODQzNzUgMC4yODEyNXEtMC40MjE4NzUgMC4wOTM3NSAtMC42NTYyNSAwLjA5Mzc1cS0wLjMyODEyNSAwIC0wLjU0Njg3NSAtMC4yMTg3NXEtMC4yMTg3NSAtMC4yMzQzNzUgLTAuMjE4NzUgLTAuNTkzNzVxMCAtMC4yMDMxMjUgMC4wNzgxMjUgLTAuMzQzNzVxMC4wNzgxMjUgLTAuMTU2MjUgMC4yMTg3NSAtMC4yNXEwLjE0MDYyNSAtMC4wOTM3NSAwLjU3ODEyNSAtMC4yMTg3NXEwLjU5Mzc1IC0wLjE1NjI1IDEuMjAzMTI1IC0wLjI1cTAuNjI1IC0wLjEwOTM3NSAxLjEyNSAtMC4xMDkzNzVxMS41IDAgMi4zMTI1IDAuNjU2MjVxMC44MjgxMjUgMC42NDA2MjUgMC44MjgxMjUgMS43NWwwIDMuMjk2ODc1bDAuMjgxMjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjg3NSAwem0wIC0yLjg3NXEtMC45Njg3NSAtMC4xODc1IC0xLjc4MTI1IC0wLjE4NzVxLTAuOTY4NzUgMCAtMS42NzE4NzUgMC40ODQzNzVxLTAuNDM3NSAwLjI5Njg3NSAtMC40Mzc1IDAuNjA5Mzc1cTAgMC4yMzQzNzUgMC4yMDMxMjUgMC4zNzVxMC4zOTA2MjUgMC4yNSAxLjA3ODEyNSAwLjI1cTAuNTc4MTI1IDAgMS4yOTY4NzUgLTAuMjE4NzVxMC43MzQzNzUgLTAuMjM0Mzc1IDEuMzEyNSAtMC42MjVsMCAtMC42ODc1em03Ljc1NzgxMjUgLTIuNjI1bDAgMy4yMTg3NXEwIDAuNTE1NjI1IDAuMjE4NzUgMC42NzE4NzVxMC4zMjgxMjUgMC4yNjU2MjUgMS4xNzE4NzUgMC4yNjU2MjVxMS4yMTg3NSAwIDIuMjY1NjI1IC0wLjUzMTI1cTAuMzkwNjI1IC0wLjIwMzEyNSAwLjYyNSAtMC4yMDMxMjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIzNDM3NSAwLjIzNDM3NSAwLjIzNDM3NSAwLjU3ODEyNXEwIDAuMzEyNSAtMC4yNSAwLjUzMTI1cS0wLjM3NSAwLjM3NSAtMS41MTU2MjUgMC42ODc1cS0xLjEyNSAwLjMxMjUgLTEuODkwNjI1IDAuMzEyNXEtMS41IDAgLTIuMjUgLTAuNjQwNjI1cS0wLjczNDM3NSAtMC42NTYyNSAtMC43MzQzNzUgLTEuNTkzNzVsMCAtMy41MzEyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMC41NzgxMjUgMGwwIC0xLjQ1MzEyNXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjM1OTM3NSAwIDAuNTc4MTI1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDEuNDUzMTI1bDIuOTY4NzUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0yLjk2ODc1IDB6bTguMzUxNTYyNSAtNC42NDA2MjVsMCAzLjQyMTg3NXEwLjUgLTAuMjk2ODc1IDEuMCAtMC40Mzc1cTAuNTE1NjI1IC0wLjE1NjI1IDEuMDQ2ODc1IC0wLjE1NjI1cTAuODI4MTI1IDAgMS40Njg3NSAwLjI4MTI1cTAuNjU2MjUgMC4yODEyNSAxLjA3ODEyNSAwLjg5MDYyNXEwLjQyMTg3NSAwLjYwOTM3NSAwLjQyMTg3NSAxLjUzMTI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4yMDMxMjUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0yLjg5MDYyNXEwIC0wLjYyNSAtMC4yODEyNSAtMC44NzVxLTAuMzU5Mzc1IC0wLjMyODEyNSAtMS4wNzgxMjUgLTAuMzI4MTI1cS0wLjUzMTI1IDAgLTAuOTUzMTI1IDAuMjAzMTI1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA5Mzc1IDAuODkwNjI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtNi45MjE4NzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0xNi4wIDQwMC4wbDE4Ny40MzMwNiAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNiAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjEuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNi4wIDQwMC4wbDE4Ny40MzMwNiAwbDAgODAuNTM1NDNsLTE4Ny40MzMwNiAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZD0ibTcwLjM4NDUgNDQyLjg3NzcybDAgMS42NDA2MjVsMS42MjUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0zLjQ2ODc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMC4yNSAwbDAgLTYuMjY1NjI1bC0wLjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMy42ODc1IDAuMDE1NjI1cTEuNjI1IDAgMi41NjI1IDAuODkwNjI1cTAuOTUzMTI1IDAuODc1IDAuOTUzMTI1IDIuMTU2MjVxMCAwLjcwMzEyNSAtMC4zMTI1IDEuMzI4MTI1cS0wLjI1IDAuNDY4NzUgLTAuODEyNSAwLjkyMTg3NXEtMC41NjI1IDAuNDUzMTI1IC0xLjE1NjI1IDAuNjg3NXEtMC41OTM3NSAwLjIzNDM3NSAtMS41NjI1IDAuMjM0Mzc1bC0xLjUxNTYyNSAwem0wIC0xLjYwOTM3NWwxLjQ4NDM3NSAwcTEuMDQ2ODc1IDAgMS42NTYyNSAtMC40Njg3NXEwLjYyNSAtMC40Njg3NSAwLjYyNSAtMS4xNDA2MjVxMCAtMC41NjI1IC0wLjUgLTAuOTg0Mzc1cS0wLjUgLTAuNDIxODc1IC0xLjQyMTg3NSAtMC40MjE4NzVsLTEuODQzNzUgMGwwIDMuMDE1NjI1em0xNC42OTUzMTI1IDEuNDM3NXEwIDAuOTIxODc1IC0wLjUxNTYyNSAxLjc5Njg3NXEtMC41MTU2MjUgMC44NTkzNzUgLTEuNTMxMjUgMS4zNzVxLTEuMCAwLjUxNTYyNSAtMi4xMDkzNzUgMC41MTU2MjVxLTEuMDkzNzUgMCAtMi4wOTM3NSAtMC41cS0xLjAgLTAuNTE1NjI1IC0xLjUzMTI1IC0xLjM3NXEtMC41MTU2MjUgLTAuODc1IC0wLjUxNTYyNSAtMS44MjgxMjVxMCAtMC45NTMxMjUgMC41MzEyNSAtMS44NzVxMC41MzEyNSAtMC45Mzc1IDEuNTMxMjUgLTEuNDY4NzVxMS4wIC0wLjUzMTI1IDIuMDc4MTI1IC0wLjUzMTI1cTEuMDkzNzUgMCAyLjEwOTM3NSAwLjU0Njg3NXExLjAxNTYyNSAwLjU0Njg3NSAxLjUzMTI1IDEuNDY4NzVxMC41MTU2MjUgMC45MDYyNSAwLjUxNTYyNSAxLjg3NXptLTEuNjA5Mzc1IDAuMDE1NjI1cTAgLTAuNzgxMjUgLTAuNTQ2ODc1IC0xLjQyMTg3NXEtMC43NjU2MjUgLTAuODc1IC0yLjAgLTAuODc1cS0xLjA3ODEyNSAwIC0xLjgxMjUgMC43MDMxMjVxLTAuNzE4NzUgMC42ODc1IC0wLjcxODc1IDEuNTkzNzVxMCAwLjc1IDAuNzM0Mzc1IDEuNDA2MjVxMC43MzQzNzUgMC42NTYyNSAxLjc5Njg3NSAwLjY1NjI1cTEuMDc4MTI1IDAgMS44MTI1IC0wLjY1NjI1cTAuNzM0Mzc1IC0wLjY1NjI1IDAuNzM0Mzc1IC0xLjQwNjI1em04Ljc3MzQzNzUgLTEuODEyNXEtMC4zOTA2MjUgLTAuMjUgLTAuODI4MTI1IC0wLjM1OTM3NXEtMC40MjE4NzUgLTAuMTI1IC0wLjg5MDYyNSAtMC4xMjVxLTAuOTIxODc1IDAgLTEuNDY4NzUgMC4yOTY4NzVxLTAuMjUgMC4xNDA2MjUgLTAuMjUgMC4yOTY4NzVxMCAwLjE3MTg3NSAwLjMyODEyNSAwLjM0Mzc1cTAuMjUgMC4xMjUgMS4xMjUgMC4yNXExLjU5Mzc1IDAuMjE4NzUgMi4yMTg3NSAwLjQzNzVxMC44MTI1IDAuMjgxMjUgMS4yNSAwLjg1OTM3NXEwLjQ1MzEyNSAwLjU2MjUgMC40NTMxMjUgMS4yMDMxMjVxMCAwLjg1OTM3NSAtMC43NSAxLjQzNzVxLTEuMDkzNzUgMC44NDM3NSAtMi44MjgxMjUgMC44NDM3NXEtMC42ODc1IDAgLTEuMjgxMjUgLTAuMTI1cS0wLjU5Mzc1IC0wLjEyNSAtMS4wNzgxMjUgLTAuMzU5Mzc1cS0wLjEyNSAwLjA5Mzc1IC0wLjI2NTYyNSAwLjE1NjI1cS0wLjEyNSAwLjA0Njg3NSAtMC4yNjU2MjUgMC4wNDY4NzVxLTAuMzc1IDAgLTAuNTkzNzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjI1IC0wLjIxODc1IC0wLjgyODEyNWwwIC0wLjU0Njg3NXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjI5Njg3NSAwIDAuNDg0Mzc1IDAuMTU2MjVxMC4yMDMxMjUgMC4xNTYyNSAwLjMxMjUgMC41NDY4NzVxMC4zNTkzNzUgMC4zMTI1IDAuODc1IDAuNDg0Mzc1cTAuNTE1NjI1IDAuMTU2MjUgMS4xODc1IDAuMTU2MjVxMS4xMDkzNzUgMCAxLjcxODc1IC0wLjM0Mzc1cTAuMjgxMjUgLTAuMTcxODc1IDAuMjgxMjUgLTAuMzU5Mzc1cTAgLTAuMzEyNSAtMC40MDYyNSAtMC41MTU2MjVxLTAuNDIxODc1IC0wLjIwMzEyNSAtMS43MTg3NSAtMC4zNDM3NXEtMS45MjE4NzUgLTAuMjAzMTI1IC0yLjU3ODEyNSAtMC43ODEyNXEtMC42NDA2MjUgLTAuNTc4MTI1IC0wLjY0MDYyNSAtMS40MDYyNXEwIC0wLjg1OTM3NSAwLjcxODc1IC0xLjQzNzVxMC45ODQzNzUgLTAuNzgxMjUgMi41NzgxMjUgLTAuNzgxMjVxMC41NjI1IDAgMS4wNjI1IDAuMTA5Mzc1cTAuNTE1NjI1IDAuMTA5Mzc1IDAuOTg0Mzc1IDAuMzI4MTI1cTAuMTU2MjUgLTAuMTA5Mzc1IDAuMjgxMjUgLTAuMTU2MjVxMC4xMjUgLTAuMDYyNSAwLjIzNDM3NSAtMC4wNjI1cTAuMzI4MTI1IDAgMC41NDY4NzUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMC4zOTA2MjVxMCAwLjUzMTI1IC0wLjEyNSAwLjcxODc1cS0wLjI1IDAuMzU5Mzc1IC0wLjY3MTg3NSAwLjM1OTM3NXEtMC4yOTY4NzUgMCAtMC41MTU2MjUgLTAuMTcxODc1cS0wLjIxODc1IC0wLjE4NzUgLTAuMjgxMjUgLTAuNDg0Mzc1em04LjQ0NTMxMjUgLTQuOTIxODc1bDAgMS43MDMxMjVsLTEuOTA2MjUgMGwwIC0xLjcwMzEyNWwxLjkwNjI1IDB6bTAuMjE4NzUgMy4wNDY4NzVsMCA1LjQ4NDM3NWwxLjkyMTg3NSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTUuNDM3NSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC4zNDM3NSAwLjI1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuOTIxODc1IDBsMCAtMy44OTA2MjVsLTEuMjk2ODc1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDIuODkwNjI1IDB6bTEwLjAwNzgxMjUgMy40MDYyNWwyLjQzNzUgMi4wNzgxMjVxMC40Mzc1IDAuMDMxMjUgMC42NTYyNSAwLjI1cTAuMjE4NzUgMC4yMTg3NSAwLjIxODc1IDAuNTYyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjUgMC4yMTg3NSAtMC44MjgxMjUgMC4yMTg3NWwtMS44MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjI4MTI1IDAuMTcxODc1IC0wLjVxMC4xODc1IC0wLjIxODc1IDAuNDg0Mzc1IC0wLjI5Njg3NWwtMS4xODc1IC0xLjAzMTI1bC0xLjIxODc1IDEuMDMxMjVxMC4zNTkzNzUgMC4wOTM3NSAwLjUxNTYyNSAwLjI5Njg3NXEwLjE3MTg3NSAwLjE4NzUgMC4xNzE4NzUgMC41cTAgMC4zNTkzNzUgLTAuMjUgMC41OTM3NXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjMyODEyNSAwLjIxODc1IC0wLjU0Njg3NXEwLjIxODc1IC0wLjIxODc1IDAuNjU2MjUgLTAuMjVsMi4zNzUgLTIuMDkzNzVsLTIuMTA5Mzc1IC0xLjc5Njg3NXEtMC40MDYyNSAtMC4wMzEyNSAtMC42MjUgLTAuMjVxLTAuMjE4NzUgLTAuMjE4NzUgLTAuMjE4NzUgLTAuNTQ2ODc1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS41IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU2MjVxMCAwLjQ2ODc1IC0wLjQzNzUgMC43NWwwLjk2ODc1IDAuODEyNWwwLjk1MzEyNSAtMC44MjgxMjVxLTAuNDIxODc1IC0wLjI5Njg3NSAtMC40MjE4NzUgLTAuNzAzMTI1cTAgLTAuMzc1IDAuMjM0Mzc1IC0wLjU5Mzc1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS40ODQzNzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjMyODEyNSAtMC4yMTg3NSAwLjU0Njg3NXEtMC4yMTg3NSAwLjIxODc1IC0wLjY0MDYyNSAwLjI1bC0yLjEwOTM3NSAxLjgxMjV6bTcuNDc2NTYyNSAwLjQzNzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU1NSA0Ljg1OTM3NWwwIC0wLjM3NXEtMC42MDkzNzUgMC4zMTI1IC0xLjM0Mzc1IDAuNDY4NzVxLTAuNzE4NzUgMC4xNzE4NzUgLTEuMzEyNDkyNCAwLjE3MTg3NXEtMS4yODEyNSAwIC0yLjA5Mzc1IC0wLjY4NzVxLTAuNzk2ODc1IC0wLjY4NzUgLTAuNzk2ODc1IC0xLjUxNTYyNXEwIC0xLjAgMS4wMTU2MjUgLTEuODU5Mzc1cTEuMDMxMjUgLTAuODc1IDIuODQzNzQyNCAtMC44NzVxMC43MzQzNzUgMCAxLjY4NzUgMC4xNTYyNWwwIC0wLjM3NXEwIC0wLjM1OTM3NSAtMC4zMTI1IC0wLjU3ODEyNXEtMC4zMTI1IC0wLjIzNDM3NSAtMS4xNzE4NzUgLTAuMjM0Mzc1cS0wLjcxODc1IDAgLTEuODQzNzQyNCAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjQ5OTI0IC0wLjEwOTM3NSAxLjEyNDk5MjQgLTAuMTA5Mzc1cTEuNSAwIDIuMzEyNSAwLjY1NjI1cTAuODI4MTI1IDAuNjQwNjI1IDAuODI4MTI1IDEuNzVsMCAzLjI5Njg3NWwwLjI4MTI1IDBxMC41NzgxMjUgMCAwLjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44NzUgMHptMCAtMi44NzVxLTAuOTY4NzUgLTAuMTg3NSAtMS43ODEyNSAtMC4xODc1cS0wLjk2ODc0MjQgMCAtMS42NzE4Njc0IDAuNDg0Mzc1cS0wLjQzNzUgMC4yOTY4NzUgLTAuNDM3NSAwLjYwOTM3NXEwIDAuMjM0Mzc1IDAuMjAzMTI1IDAuMzc1cTAuMzkwNjI1IDAuMjUgMS4wNzgxMjUgMC4yNXEwLjU3ODExNzQgMCAxLjI5Njg2NzQgLTAuMjE4NzVxMC43MzQzNzUgLTAuMjM0Mzc1IDEuMzEyNSAtMC42MjVsMCAtMC42ODc1em03Ljc1NzgxMjUgLTIuNjI1bDAgMy4yMTg3NXEwIDAuNTE1NjI1IDAuMjE4NzUgMC42NzE4NzVxMC4zMjgxMjUgMC4yNjU2MjUgMS4xNzE4NzUgMC4yNjU2MjVxMS4yMTg3NSAwIDIuMjY1NjI1IC0wLjUzMTI1cTAuMzkwNjI1IC0wLjIwMzEyNSAwLjYyNSAtMC4yMDMxMjVxMC4zMTI1IDAgMC41MzEyNSAwLjIzNDM3NXEwLjIzNDM3NSAwLjIzNDM3NSAwLjIzNDM3NSAwLjU3ODEyNXEwIDAuMzEyNSAtMC4yNSAwLjUzMTI1cS0wLjM3NSAwLjM3NSAtMS41MTU2MjUgMC42ODc1cS0xLjEyNSAwLjMxMjUgLTEuODkwNjI1IDAuMzEyNXEtMS41IDAgLTIuMjUgLTAuNjQwNjI1cS0wLjczNDM3NSAtMC42NTYyNSAtMC43MzQzNzUgLTEuNTkzNzVsMCAtMy41MzEyNWwtMC41NzgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMC41NzgxMjUgMGwwIC0xLjQ1MzEyNXEwIC0wLjU3ODEyNSAwLjIxODc1IC0wLjgxMjVxMC4yMTg3NSAtMC4yNSAwLjU3ODEyNSAtMC4yNXEwLjM1OTM3NSAwIDAuNTc4MTI1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDEuNDUzMTI1bDIuOTY4NzUgMHEwLjU3ODEyNSAwIDAuODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNTkzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0yLjk2ODc1IDB6bTguMzUxNTYyNSAtNC42NDA2MjVsMCAzLjQyMTg3NXEwLjUgLTAuMjk2ODc1IDEuMCAtMC40Mzc1cTAuNTE1NjI1IC0wLjE1NjI1IDEuMDQ2ODc1IC0wLjE1NjI1cTAuODI4MTI1IDAgMS40Njg3NSAwLjI4MTI1cTAuNjU2MjUgMC4yODEyNSAxLjA3ODEyNSAwLjg5MDYyNXEwLjQyMTg3NSAwLjYwOTM3NSAwLjQyMTg3NSAxLjUzMTI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTYyNSAwIC0wLjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4yMDMxMjUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC0yLjg5MDYyNXEwIC0wLjYyNSAtMC4yODEyNSAtMC44NzVxLTAuMzU5Mzc1IC0wLjMyODEyNSAtMS4wNzgxMjUgLTAuMzI4MTI1cS0wLjUzMTI1IDAgLTAuOTUzMTI1IDAuMjAzMTI1cS0wLjQwNjI1IDAuMjAzMTI1IC0xLjA5Mzc1IDAuODkwNjI1bDAgMy4wcTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtNi45MjE4NzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjUgLTAuNTYyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMS44NzUgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIGZpbGw9IiNmZmZmZmYiIGQ9Im0zMzYuMCA0MDAuMGwxODcuNDMzMDQgMGwwIDgwLjUzNTQzbC0xODcuNDMzMDQgMHoiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIxLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMzM2LjAgNDAwLjBsMTg3LjQzMzA0IDBsMCA4MC41MzU0M2wtMTg3LjQzMzA0IDB6IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBkPSJtMzgxLjcyMDQzIDQ0MS41ODA4NGwtMS40ODQzNzUgNC41NDY4NzVsLTEuNzk2ODc1IDBsLTAuOTUzMTI1IC03Ljg3NXEtMC4zNzUgLTAuMDQ2ODc1IC0wLjU2MjUgLTAuMjVxLTAuMTg3NSAtMC4yMDMxMjUgLTAuMTg3NSAtMC41MzEyNXEwIC0wLjM3NSAwLjI1IC0wLjU5Mzc1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwyLjEyNSAwLjAxNTYyNXEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC0wLjgyODEyNSAwbDAuNTMxMjUgNC40ODQzNzVsMS4yNSAtMy43MzQzNzVsMS42NzE4NzUgMGwxLjI1IDMuNzM0Mzc1bDAuNTMxMjUgLTQuNDg0Mzc1bC0wLjg0Mzc1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMTg3NSAtMC4yMzQzNzUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjM0Mzc1IC0wLjU3ODEyNXEwLjI1IC0wLjIzNDM3NSAwLjgyODEyNSAtMC4yMzQzNzVsMi4xMjUgMC4wMTU2MjVxMC41NzgxMjUgMCAwLjgyODEyNSAwLjIxODc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4yOTY4NzUgLTAuMjAzMTI1IDAuNTE1NjI1cS0wLjE4NzUgMC4yMTg3NSAtMC41NjI1IDAuMjgxMjVsLTAuOTIxODc1IDcuODc1bC0xLjc2NTYyNSAwbC0xLjUzMTI1IC00LjU0Njg3NXptMTAuMTY0MDYyNSAtNS41OTM3NWwwIDEuNzAzMTI1bC0xLjkwNjI1IDBsMCAtMS43MDMxMjVsMS45MDYyNSAwem0wLjIxODc1IDMuMDQ2ODc1bDAgNS40ODQzNzVsMS45MjE4NzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yNSAwLjIxODc1IC0wLjgyODEyNSAwLjIxODc1bC01LjQzNzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjkyMTg3NSAwbDAgLTMuODkwNjI1bC0xLjI5Njg3NSAwcS0wLjU2MjUgMCAtMC44MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIxODc1IC0wLjI1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwyLjg5MDYyNSAwem03LjE5NTMxMjUgMGwwIDAuNTMxMjVxMC40Mzc1IC0wLjM3NSAwLjk1MzEyNSAtMC41NjI1cTAuNTMxMjUgLTAuMTg3NSAxLjE1NjI1IC0wLjE4NzVxMS40MjE4NzUgMCAyLjI1IDAuODkwNjI1cTAuNjU2MjUgMC43MDMxMjUgMC42NTYyNSAxLjg0Mzc1bDAgMi45Njg3NXEwLjUgMCAwLjczNDM3NSAwLjIzNDM3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzQzNzUgLTAuMjUgMC41NzgxMjVxLTAuMjM0Mzc1IDAuMjE4NzUgLTAuODEyNSAwLjIxODc1bC0xLjQ1MzEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC41OTM3NXEwIC0wLjM0Mzc1IDAuMjM0Mzc1IC0wLjU2MjVxMC4yNSAtMC4yMzQzNzUgMC43NSAtMC4yMzQzNzVsMCAtMy4wMTU2MjVxMCAtMC41MzEyNSAtMC4yODEyNSAtMC43NjU2MjVxLTAuMzU5Mzc1IC0wLjMxMjUgLTEuMDkzNzUgLTAuMzEyNXEtMC41NjI1IDAgLTAuOTg0Mzc1IDAuMjE4NzVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDQ2ODc1IDAuOTA2MjVsMCAyLjk2ODc1cTAuNjA5Mzc1IDAgMC43OTY4NzUgMC4xMjVxMC4zNzUgMC4yMzQzNzUgMC4zNzUgMC42ODc1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODI4MTI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU5Mzc1cTAgLTAuNDM3NSAwLjM3NSAtMC42NzE4NzVxMC4xODc1IC0wLjEyNSAwLjc5Njg3NSAtMC4xMjVsMCAtMy44OTA2MjVxLTAuNSAwIC0wLjc1IC0wLjIxODc1cS0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuMjM0Mzc1IC0wLjU3ODEyNXEwIC0wLjM1OTM3NSAwLjIzNDM3NSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwxLjUzMTI1IDB6bTE0Ljg5ODQzNzUgLTMuMDQ2ODc1bDAgOC41MzEyNWwwLjI2NTYyNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMzQzNzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjI1IDAuMjE4NzUgLTAuODI4MTI1IDAuMjE4NzVsLTEuODc1IDBsMCAtMC4zOTA2MjVxLTAuNTQ2ODc1IDAuMzEyNSAtMS4xNDA2MjUgMC40ODQzNzVxLTAuNTkzNzUgMC4xNzE4NzUgLTEuMjM0Mzc1IDAuMTcxODc1cS0xLjgxMjUgMCAtMi45MjE4NzUgLTEuMDQ2ODc1cS0xLjA5Mzc1IC0xLjA0Njg3NSAtMS4wOTM3NSAtMi42MDkzNzVxMCAtMS42MjUgMS4xNTYyNSAtMi43NjU2MjVxMS4xNTYyNSAtMS4xNTYyNSAyLjgyODEyNSAtMS4xNTYyNXEwLjYyNSAwIDEuMjE4NzUgMC4yMDMxMjVxMC42MDkzNzUgMC4xODc1IDEuMTg3NSAwLjU2MjVsMCAtMS45ODQzNzVsLTAuMjY1NjI1IDBxLTAuNTc4MTI1IDAgLTAuODI4MTI1IC0wLjIxODc1cS0wLjI1IC0wLjIzNDM3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMzQzNzUgMC44MjgxMjUgLTAuMjM0Mzc1bDEuODc1IDB6bS0xLjYwOTM3NSA2Ljc5Njg3NXEwIC0wLjk4NDM3NSAtMC43MDMxMjUgLTEuNjcxODc1cS0wLjY4NzUgLTAuNjg3NSAtMS42ODc1IC0wLjY4NzVxLTEuMCAwIC0xLjcwMzEyNSAwLjY4NzVxLTAuNjg3NSAwLjY4NzUgLTAuNjg3NSAxLjY1NjI1cTAgMC44NzUgMC42MjUgMS40NTMxMjVxMC42MjUgMC41NjI1IDEuNzY1NjI1IDAuNTYyNXExLjEyNSAwIDEuNzUgLTAuNTYyNXEwLjY0MDYyNSAtMC41NzgxMjUgMC42NDA2MjUgLTEuNDM3NXptMTEuNjk1MzEyNSAtMC4wNzgxMjVxMCAwLjkyMTg3NSAtMC41MTU2MjUgMS43OTY4NzVxLTAuNTE1NjI1IDAuODU5Mzc1IC0xLjUzMTI1IDEuMzc1cS0xLjAgMC41MTU2MjUgLTIuMTA5Mzc1IDAuNTE1NjI1cS0xLjA5Mzc1IDAgLTIuMDkzNzUgLTAuNXEtMS4wIC0wLjUxNTYyNSAtMS41MzEyNSAtMS4zNzVxLTAuNTE1NjI1IC0wLjg3NSAtMC41MTU2MjUgLTEuODI4MTI1cTAgLTAuOTUzMTI1IDAuNTMxMjUgLTEuODc1cTAuNTMxMjUgLTAuOTM3NSAxLjUzMTI1IC0xLjQ2ODc1cTEuMCAtMC41MzEyNSAyLjA3ODEyNSAtMC41MzEyNXExLjA5Mzc1IDAgMi4xMDkzNzUgMC41NDY4NzVxMS4wMTU2MjUgMC41NDY4NzUgMS41MzEyNSAxLjQ2ODc1cTAuNTE1NjI1IDAuOTA2MjUgMC41MTU2MjUgMS44NzV6bS0xLjYwOTM3NSAwLjAxNTYyNXEwIC0wLjc4MTI1IC0wLjU0Njg3NSAtMS40MjE4NzVxLTAuNzY1NjI1IC0wLjg3NSAtMi4wIC0wLjg3NXEtMS4wNzgxMjUgMCAtMS44MTI1IDAuNzAzMTI1cS0wLjcxODc1IDAuNjg3NSAtMC43MTg3NSAxLjU5Mzc1cTAgMC43NSAwLjczNDM3NSAxLjQwNjI1cTAuNzM0Mzc1IDAuNjU2MjUgMS43OTY4NzUgMC42NTYyNXExLjA3ODEyNSAwIDEuODEyNSAtMC42NTYyNXEwLjczNDM3NSAtMC42NTYyNSAwLjczNDM3NSAtMS40MDYyNXptNy4wNTQ2ODc1IDAuNDUzMTI1bC0xLjEwOTM3NSAyLjk1MzEyNWwtMS41IDBsLTEuMzQzNzUgLTUuNXEtMC40Mzc1IC0wLjAxNTYyNSAtMC42NzE4NzUgLTAuMjM0Mzc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41NjI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjE4NzUgMC44MjgxMjUgLTAuMjE4NzVsMS40ODQzNzUgMHEwLjU3ODEyNSAwIDAuODI4MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yODEyNSAwLjYwOTM3NXEtMC4yMTg3NSAwLjE4NzUgLTAuODI4MTI1IDAuMTg3NWwwLjYwOTM3NSAyLjU0Njg3NWwwLjk4NDM3NSAtMi42MDkzNzVsMS40MjE4NzUgMGwxLjAgMi42MDkzNzVsMC42MjUgLTIuNTQ2ODc1cS0wLjU5Mzc1IDAgLTAuNzgxMjUgLTAuMTA5Mzc1cS0wLjM3NSAtMC4yNSAtMC4zNzUgLTAuNjg3NXEwIC0wLjM1OTM3NSAwLjI1IC0wLjU3ODEyNXEwLjI1IC0wLjIxODc1IDAuODI4MTI1IC0wLjIxODc1bDEuNSAwcTAuNTc4MTI1IDAgMC44MjgxMjUgMC4yMTg3NXEwLjI1IDAuMjE4NzUgMC4yNSAwLjU3ODEyNXEwIDAuMzI4MTI1IC0wLjIxODc1IDAuNTQ2ODc1cS0wLjIxODc1IDAuMjE4NzUgLTAuNjQwNjI1IDAuMjVsLTEuMzEyNSA1LjVsLTEuNDg0Mzc1IDBsLTEuMTcxODc1IC0yLjk1MzEyNXptMTEuMzIwMzEyNSAtMi4yNjU2MjVxLTAuMzkwNjI1IC0wLjI1IC0wLjgyODEyNSAtMC4zNTkzNzVxLTAuNDIxODc1IC0wLjEyNSAtMC44OTA2MjUgLTAuMTI1cS0wLjkyMTg3NSAwIC0xLjQ2ODc1IDAuMjk2ODc1cS0wLjI1IDAuMTQwNjI1IC0wLjI1IDAuMjk2ODc1cTAgMC4xNzE4NzUgMC4zMjgxMjUgMC4zNDM3NXEwLjI1IDAuMTI1IDEuMTI1IDAuMjVxMS41OTM3NSAwLjIxODc1IDIuMjE4NzUgMC40Mzc1cTAuODEyNSAwLjI4MTI1IDEuMjUgMC44NTkzNzVxMC40NTMxMjUgMC41NjI1IDAuNDUzMTI1IDEuMjAzMTI1cTAgMC44NTkzNzUgLTAuNzUgMS40Mzc1cS0xLjA5Mzc1IDAuODQzNzUgLTIuODI4MTI1IDAuODQzNzVxLTAuNjg3NSAwIC0xLjI4MTI1IC0wLjEyNXEtMC41OTM3NSAtMC4xMjUgLTEuMDc4MTI1IC0wLjM1OTM3NXEtMC4xMjUgMC4wOTM3NSAtMC4yNjU2MjUgMC4xNTYyNXEtMC4xMjUgMC4wNDY4NzUgLTAuMjY1NjI1IDAuMDQ2ODc1cS0wLjM3NSAwIC0wLjU5Mzc1IC0wLjIzNDM3NXEtMC4yMTg3NSAtMC4yNSAtMC4yMTg3NSAtMC44MjgxMjVsMCAtMC41NDY4NzVxMCAtMC41NzgxMjUgMC4yMTg3NSAtMC44MTI1cTAuMjE4NzUgLTAuMjUgMC41NzgxMjUgLTAuMjVxMC4yOTY4NzUgMCAwLjQ4NDM3NSAwLjE1NjI1cTAuMjAzMTI1IDAuMTU2MjUgMC4zMTI1IDAuNTQ2ODc1cTAuMzU5Mzc1IDAuMzEyNSAwLjg3NSAwLjQ4NDM3NXEwLjUxNTYyNSAwLjE1NjI1IDEuMTg3NSAwLjE1NjI1cTEuMTA5Mzc1IDAgMS43MTg3NSAtMC4zNDM3NXEwLjI4MTI1IC0wLjE3MTg3NSAwLjI4MTI1IC0wLjM1OTM3NXEwIC0wLjMxMjUgLTAuNDA2MjUgLTAuNTE1NjI1cS0wLjQyMTg3NSAtMC4yMDMxMjUgLTEuNzE4NzUgLTAuMzQzNzVxLTEuOTIxODc1IC0wLjIwMzEyNSAtMi41NzgxMjUgLTAuNzgxMjVxLTAuNjQwNjI1IC0wLjU3ODEyNSAtMC42NDA2MjUgLTEuNDA2MjVxMCAtMC44NTkzNzUgMC43MTg3NSAtMS40Mzc1cTAuOTg0Mzc1IC0wLjc4MTI1IDIuNTc4MTI1IC0wLjc4MTI1cTAuNTYyNSAwIDEuMDYyNSAwLjEwOTM3NXEwLjUxNTYyNSAwLjEwOTM3NSAwLjk4NDM3NSAwLjMyODEyNXEwLjE1NjI1IC0wLjEwOTM3NSAwLjI4MTI1IC0wLjE1NjI1cTAuMTI1IC0wLjA2MjUgMC4yMzQzNzUgLTAuMDYyNXEwLjMyODEyNSAwIDAuNTQ2ODc1IDAuMjVxMC4yMTg3NSAwLjIzNDM3NSAwLjIxODc1IDAuODEyNWwwIDAuMzkwNjI1cTAgMC41MzEyNSAtMC4xMjUgMC43MTg3NXEtMC4yNSAwLjM1OTM3NSAtMC42NzE4NzUgMC4zNTkzNzVxLTAuMjk2ODc1IDAgLTAuNTE1NjI1IC0wLjE3MTg3NXEtMC4yMTg3NSAtMC4xODc1IC0wLjI4MTI1IC0wLjQ4NDM3NXptNi45NDUzMTI1IDEuOTY4NzVsMCAxLjY0MDYyNWwxLjYyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTMuNDY4NzUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwwLjI1IDBsMCAtNi4yNjU2MjVsLTAuMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjE4NzUgLTAuMjUgLTAuNTc4MTI1cTAgLTAuMzU5Mzc1IDAuMjUgLTAuNTc4MTI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwzLjY4NzUgMC4wMTU2MjVxMS42MjUgMCAyLjU2MjUgMC44OTA2MjVxMC45NTMxMjUgMC44NzUgMC45NTMxMjUgMi4xNTYyNXEwIDAuNzAzMTI1IC0wLjMxMjUgMS4zMjgxMjVxLTAuMjUgMC40Njg3NSAtMC44MTI1IDAuOTIxODc1cS0wLjU2MjUgMC40NTMxMjUgLTEuMTU2MjUgMC42ODc1cS0wLjU5Mzc1IDAuMjM0Mzc1IC0xLjU2MjUgMC4yMzQzNzVsLTEuNTE1NjI1IDB6bTAgLTEuNjA5Mzc1bDEuNDg0Mzc1IDBxMS4wNDY4NzUgMCAxLjY1NjI1IC0wLjQ2ODc1cTAuNjI1IC0wLjQ2ODc1IDAuNjI1IC0xLjE0MDYyNXEwIC0wLjU2MjUgLTAuNSAtMC45ODQzNzVxLTAuNSAtMC40MjE4NzUgLTEuNDIxODc1IC0wLjQyMTg3NWwtMS44NDM3NSAwbDAgMy4wMTU2MjV6bTExLjk3NjU2MjUgNC44NTkzNzVsMCAtMC4zNzVxLTAuNjA5Mzc1IDAuMzEyNSAtMS4zNDM3NSAwLjQ2ODc1cS0wLjcxODc1IDAuMTcxODc1IC0xLjMxMjUgMC4xNzE4NzVxLTEuMjgxMjUgMCAtMi4wOTM3NSAtMC42ODc1cS0wLjc5Njg3NSAtMC42ODc1IC0wLjc5Njg3NSAtMS41MTU2MjVxMCAtMS4wIDEuMDE1NjI1IC0xLjg1OTM3NXExLjAzMTI1IC0wLjg3NSAyLjg0Mzc1IC0wLjg3NXEwLjczNDM3NSAwIDEuNjg3NSAwLjE1NjI1bDAgLTAuMzc1cTAgLTAuMzU5Mzc1IC0wLjMxMjUgLTAuNTc4MTI1cS0wLjMxMjUgLTAuMjM0Mzc1IC0xLjE3MTg3NSAtMC4yMzQzNzVxLTAuNzE4NzUgMCAtMS44NDM3NSAwLjI4MTI1cS0wLjQyMTg3NSAwLjA5Mzc1IC0wLjY1NjI1IDAuMDkzNzVxLTAuMzI4MTI1IDAgLTAuNTQ2ODc1IC0wLjIxODc1cS0wLjIxODc1IC0wLjIzNDM3NSAtMC4yMTg3NSAtMC41OTM3NXEwIC0wLjIwMzEyNSAwLjA3ODEyNSAtMC4zNDM3NXEwLjA3ODEyNSAtMC4xNTYyNSAwLjIxODc1IC0wLjI1cTAuMTQwNjI1IC0wLjA5Mzc1IDAuNTc4MTI1IC0wLjIxODc1cTAuNTkzNzUgLTAuMTU2MjUgMS4yMDMxMjUgLTAuMjVxMC42MjUgLTAuMTA5Mzc1IDEuMTI1IC0wLjEwOTM3NXExLjUgMCAyLjMxMjUgMC42NTYyNXEwLjgyODEyNSAwLjY0MDYyNSAwLjgyODEyNSAxLjc1bDAgMy4yOTY4NzVsMC4yODEyNSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjM0Mzc1cTAuMjUgMC4yMTg3NSAwLjI1IDAuNTc4MTI1cTAgMC4zNDM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTEuODc1IDB6bTAgLTIuODc1cS0wLjk2ODc1IC0wLjE4NzUgLTEuNzgxMjUgLTAuMTg3NXEtMC45Njg3NSAwIC0xLjY3MTg3NSAwLjQ4NDM3NXEtMC40Mzc1IDAuMjk2ODc1IC0wLjQzNzUgMC42MDkzNzVxMCAwLjIzNDM3NSAwLjIwMzEyNSAwLjM3NXEwLjM5MDYyNSAwLjI1IDEuMDc4MTI1IDAuMjVxMC41NzgxMjUgMCAxLjI5Njg3NSAtMC4yMTg3NXEwLjczNDM3NSAtMC4yMzQzNzUgMS4zMTI1IC0wLjYyNWwwIC0wLjY4NzV6bTcuNzU3ODEyNSAtMi42MjVsMCAzLjIxODc1cTAgMC41MTU2MjUgMC4yMTg3NSAwLjY3MTg3NXEwLjMyODEyNSAwLjI2NTYyNSAxLjE3MTg3NSAwLjI2NTYyNXExLjIxODc1IDAgMi4yNjU2MjUgLTAuNTMxMjVxMC4zOTA2MjUgLTAuMjAzMTI1IDAuNjI1IC0wLjIwMzEyNXEwLjMxMjUgMCAwLjUzMTI1IDAuMjM0Mzc1cTAuMjM0Mzc1IDAuMjM0Mzc1IDAuMjM0Mzc1IDAuNTc4MTI1cTAgMC4zMTI1IC0wLjI1IDAuNTMxMjVxLTAuMzc1IDAuMzc1IC0xLjUxNTYyNSAwLjY4NzVxLTEuMTI1IDAuMzEyNSAtMS44OTA2MjUgMC4zMTI1cS0xLjUgMCAtMi4yNSAtMC42NDA2MjVxLTAuNzM0Mzc1IC0wLjY1NjI1IC0wLjczNDM3NSAtMS41OTM3NWwwIC0zLjUzMTI1bC0wLjU3ODEyNSAwcS0wLjU3ODEyNSAwIC0wLjgyODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMTg3NSAtMC4yNSAtMC41NzgxMjVxMCAtMC4zNTkzNzUgMC4yNSAtMC41NzgxMjVxMC4yNSAtMC4yMTg3NSAwLjgyODEyNSAtMC4yMTg3NWwwLjU3ODEyNSAwbDAgLTEuNDUzMTI1cTAgLTAuNTc4MTI1IDAuMjE4NzUgLTAuODEyNXEwLjIxODc1IC0wLjI1IDAuNTc4MTI1IC0wLjI1cTAuMzU5Mzc1IDAgMC41NzgxMjUgMC4yNXEwLjIxODc1IDAuMjM0Mzc1IDAuMjE4NzUgMC44MTI1bDAgMS40NTMxMjVsMi45Njg3NSAwcTAuNTc4MTI1IDAgMC44MTI1IDAuMjE4NzVxMC4yNSAwLjIxODc1IDAuMjUgMC41NzgxMjVxMCAwLjM1OTM3NSAtMC4yNSAwLjU3ODEyNXEtMC4yMzQzNzUgMC4yMTg3NSAtMC44MTI1IDAuMjE4NzVsLTIuOTY4NzUgMHptOC4zNTE1NjI1IC00LjY0MDYyNWwwIDMuNDIxODc1cTAuNSAtMC4yOTY4NzUgMS4wIC0wLjQzNzVxMC41MTU2MjUgLTAuMTU2MjUgMS4wNDY4NzUgLTAuMTU2MjVxMC44MjgxMjUgMCAxLjQ2ODc1IDAuMjgxMjVxMC42NTYyNSAwLjI4MTI1IDEuMDc4MTI1IDAuODkwNjI1cTAuNDIxODc1IDAuNjA5Mzc1IDAuNDIxODc1IDEuNTMxMjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NjI1IDAgLTAuODEyNSAtMC4yMTg3NXEtMC4yNSAtMC4yMzQzNzUgLTAuMjUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjIwMzEyNSAtMC4xMjUgMC43OTY4NzUgLTAuMTI1bDAgLTIuODkwNjI1cTAgLTAuNjI1IC0wLjI4MTI1IC0wLjg3NXEtMC4zNTkzNzUgLTAuMzI4MTI1IC0xLjA3ODEyNSAtMC4zMjgxMjVxLTAuNTMxMjUgMCAtMC45NTMxMjUgMC4yMDMxMjVxLTAuNDA2MjUgMC4yMDMxMjUgLTEuMDkzNzUgMC44OTA2MjVsMCAzLjBxMC42MDkzNzUgMCAwLjc5Njg3NSAwLjEyNXEwLjM3NSAwLjIzNDM3NSAwLjM3NSAwLjY4NzVxMCAwLjM0Mzc1IC0wLjI1IDAuNTc4MTI1cS0wLjIzNDM3NSAwLjIxODc1IC0wLjgxMjUgMC4yMTg3NWwtMS44MjgxMjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjM0Mzc1IC0wLjIzNDM3NSAtMC4yMzQzNzUgLTAuNTkzNzVxMCAtMC40Mzc1IDAuMzc1IC0wLjY3MTg3NXEwLjE4NzUgLTAuMTI1IDAuNzk2ODc1IC0wLjEyNWwwIC02LjkyMTg3NWwtMC4yNjU2MjUgMHEtMC41NzgxMjUgMCAtMC44MjgxMjUgLTAuMjE4NzVxLTAuMjUgLTAuMjM0Mzc1IC0wLjI1IC0wLjU5Mzc1cTAgLTAuMzQzNzUgMC4yNSAtMC41NjI1cTAuMjUgLTAuMjM0Mzc1IDAuODI4MTI1IC0wLjIzNDM3NWwxLjg3NSAweiIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im05Ni4wIDE0NC4wbDAgLTgwLjBsODAuMCAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTk2LjAgMTQ0LjBsMCAtODAuMGw2OC4wIDAiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMTY0LjAgNjcuMzAzNDdsOS4wNzYyMDIgLTMuMzAzNDY2OGwtOS4wNzYyMDIgLTMuMzAzNDYzeiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im00MzEuNTAxMyAxNDMuMDgzOThsMCAtNzguOTk5OTlsLTY4LjAgMCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im00MzEuNTAxMyAxNDMuMDgzOThsMCAtNzguOTk5OTlsLTU2LjAgMCIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0zNzUuNTAxMyA2MC43ODA1MjVsLTkuMDc2MjAyIDMuMzAzNDY2OGw5LjA3NjIwMiAzLjMwMzQ1OTJ6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTI2OS43MTY1MiAxMDQuNTM1NDNsMCAxNjYuOTI5MTQiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMjY5LjcxNjUyIDExNi41MzU0M2wwIDE1NC45MjkxNCIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0yNzMuMDIgMTE2LjUzNTQzbC0zLjMwMzQ2NjggLTkuMDc2MTk1bC0zLjMwMzQ2NjggOS4wNzYxOTV6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTY1LjAgMjIzLjA4Mzk4bC0xLjAwNzg3MzUgMTc2LjkxMzM5IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTY0LjkzMTYzIDIzNS4wODM3OWwtMC45Mzk1MDY1MyAxNjQuOTEzNTkiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtNjguMjM1MDUgMjM1LjEwMjYybC0zLjI1MTcwMTQgLTkuMDk0ODY0bC0zLjM1NTExNzggOS4wNTcyMnoiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIGZpbGw9IiMwMDAwMDAiIGZpbGwtb3BhY2l0eT0iMC4wIiBkPSJtNDcxLjAgMjI0LjM4MDU4bC0xLjAwNzg3MzUgMTc2LjkxMzM2IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD48cGF0aCBzdHJva2U9IiMwMDAwMDAiIHN0cm9rZS13aWR0aD0iMi4wIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2UtbGluZWNhcD0iYnV0dCIgZD0ibTQ3MC45MzE2NCAyMzYuMzgwMzdsLTAuOTM5NTE0MTYgMTY0LjkxMzYiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtNDc0LjIzNTA1IDIzNi4zOTkybC0zLjI1MTcwOSAtOS4wOTQ4NjRsLTMuMzU1MTAyNSA5LjA1NzIyeiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggZmlsbD0iIzAwMDAwMCIgZmlsbC1vcGFjaXR5PSIwLjAiIGQ9Im0xMjguNTAxMzEgNDAwLjAwMjY2bDAgLTg2LjE2OGw0Ny40OTYwMDIgMCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xMjguNTAxMzEgNDAwLjAwMjY2bDAgLTg2LjE2OGwzNS40OTYwMDIgMCIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im0xNjMuOTk3MzEgMzE3LjEzODEybDkuMDc2MjAyIC0zLjMwMzQ2NjhsLTkuMDc2MjAyIC0zLjMwMzQ2Njh6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjwvcGF0aD48cGF0aCBmaWxsPSIjMDAwMDAwIiBmaWxsLW9wYWNpdHk9IjAuMCIgZD0ibTQxNC43MTkwMiA0MDAuMDAyNjZsMCAtODYuMTY4bC01MS4yMTYwMDMgMCIgZmlsbC1ydWxlPSJub256ZXJvIj48L3BhdGg+PHBhdGggc3Ryb2tlPSIjMDAwMDAwIiBzdHJva2Utd2lkdGg9IjIuMCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9ImJ1dHQiIGQ9Im00MTQuNzE5MDIgNDAwLjAwMjY2bDAgLTg2LjE2OGwtMzkuMjE2MDAzIDAiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPjxwYXRoIHN0cm9rZT0iIzAwMDAwMCIgc3Ryb2tlLXdpZHRoPSIyLjAiIHN0cm9rZS1saW5lY2FwPSJidXR0IiBkPSJtMzc1LjUwMzAyIDMxMC41MzEybC05LjA3NjE3MiAzLjMwMzQ2NjhsOS4wNzYxNzIgMy4zMDM0NjY4eiIgZmlsbC1ydWxlPSJldmVub2RkIj48L3BhdGg+PC9nPjwvc3ZnPgorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wYXRobGliLnJzdCBiL0RvYy9saWJyYXJ5L3BhdGhsaWIucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0ZTJhMzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS9wYXRobGliLnJzdApAQCAtMCwwICsxLDkxOSBAQAorCis6bW9kOmBwYXRobGliYCAtLS0gT2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBtb2R1bGU6OiBwYXRobGliCisgICA6c3lub3BzaXM6IE9iamVjdC1vcmllbnRlZCBmaWxlc3lzdGVtIHBhdGhzCisKKy4uIGluZGV4Ojogc2luZ2xlOiBwYXRoOyBvcGVyYXRpb25zCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGlzIG1vZHVsZSBvZmZlcnMgY2xhc3NlcyByZXByZXNlbnRpbmcgZmlsZXN5c3RlbSBwYXRocyB3aXRoIHNlbWFudGljcworYXBwcm9wcmlhdGUgZm9yIGRpZmZlcmVudCBvcGVyYXRpbmcgc3lzdGVtcy4gIFBhdGggY2xhc3NlcyBhcmUgZGl2aWRlZAorYmV0d2VlbiA6cmVmOmBwdXJlIHBhdGhzIDxwdXJlLXBhdGhzPmAsIHdoaWNoIHByb3ZpZGUgcHVyZWx5IGNvbXB1dGF0aW9uYWwKK29wZXJhdGlvbnMgd2l0aG91dCBJL08sIGFuZCA6cmVmOmBjb25jcmV0ZSBwYXRocyA8Y29uY3JldGUtcGF0aHM+YCwgd2hpY2gKK2luaGVyaXQgZnJvbSBwdXJlIHBhdGhzIGJ1dCBhbHNvIHByb3ZpZGUgSS9PIG9wZXJhdGlvbnMuCisKKy4uIGltYWdlOjogcGF0aGxpYi1pbmhlcml0YW5jZS5wbmcKKyAgIDphbGlnbjogY2VudGVyCisKK0lmIHlvdSd2ZSBuZXZlciB1c2VkIHRoaXMgbW9kdWxlIGJlZm9yZSBvciBqdXN0IGFyZW4ndCBzdXJlIHdoaWNoIGNsYXNzIGlzCityaWdodCBmb3IgeW91ciB0YXNrLCA6Y2xhc3M6YFBhdGhgIGlzIG1vc3QgbGlrZWx5IHdoYXQgeW91IG5lZWQuIEl0IGluc3RhbnRpYXRlcworYSA6cmVmOmBjb25jcmV0ZSBwYXRoIDxjb25jcmV0ZS1wYXRocz5gIGZvciB0aGUgcGxhdGZvcm0gdGhlIGNvZGUgaXMgcnVubmluZyBvbi4KKworUHVyZSBwYXRocyBhcmUgdXNlZnVsIGluIHNvbWUgc3BlY2lhbCBjYXNlczsgZm9yIGV4YW1wbGU6CisKKyMuIElmIHlvdSB3YW50IHRvIG1hbmlwdWxhdGUgV2luZG93cyBwYXRocyBvbiBhIFVuaXggbWFjaGluZSAob3IgdmljZSB2ZXJzYSkuCisgICBZb3UgY2Fubm90IGluc3RhbnRpYXRlIGEgOmNsYXNzOmBXaW5kb3dzUGF0aGAgd2hlbiBydW5uaW5nIG9uIFVuaXgsIGJ1dCB5b3UKKyAgIGNhbiBpbnN0YW50aWF0ZSA6Y2xhc3M6YFB1cmVXaW5kb3dzUGF0aGAuCisjLiBZb3Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCB5b3VyIGNvZGUgb25seSBtYW5pcHVsYXRlcyBwYXRocyB3aXRob3V0IGFjdHVhbGx5CisgICBhY2Nlc3NpbmcgdGhlIE9TLiBJbiB0aGlzIGNhc2UsIGluc3RhbnRpYXRpbmcgb25lIG9mIHRoZSBwdXJlIGNsYXNzZXMgbWF5IGJlCisgICB1c2VmdWwgc2luY2UgdGhvc2Ugc2ltcGx5IGRvbid0IGhhdmUgYW55IE9TLWFjY2Vzc2luZyBvcGVyYXRpb25zLgorCisuLiBub3RlOjoKKyAgIFRoaXMgbW9kdWxlIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IG9uIGEKKyAgIDp0ZXJtOmBwcm92aXNpb25hbCBiYXNpcyA8cHJvdmlzaW9uYWwgcGFja2FnZT5gLiBCYWNrd2FyZHMgaW5jb21wYXRpYmxlCisgICBjaGFuZ2VzICh1cCB0byBhbmQgaW5jbHVkaW5nIHJlbW92YWwgb2YgdGhlIHBhY2thZ2UpIG1heSBvY2N1ciBpZiBkZWVtZWQKKyAgIG5lY2Vzc2FyeSBieSB0aGUgY29yZSBkZXZlbG9wZXJzLgorCisuLiBzZWVhbHNvOjoKKyAgIDpwZXA6YDQyOGA6IFRoZSBwYXRobGliIG1vZHVsZSAtLSBvYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocy4KKworLi4gc2VlYWxzbzo6CisgICBGb3IgbG93LWxldmVsIHBhdGggbWFuaXB1bGF0aW9uIG9uIHN0cmluZ3MsIHlvdSBjYW4gYWxzbyB1c2UgdGhlCisgICA6bW9kOmBvcy5wYXRoYCBtb2R1bGUuCisKKworQmFzaWMgdXNlCistLS0tLS0tLS0KKworSW1wb3J0aW5nIHRoZSBtYWluIGNsYXNzOjoKKworICAgPj4+IGZyb20gcGF0aGxpYiBpbXBvcnQgUGF0aAorCitMaXN0aW5nIHN1YmRpcmVjdG9yaWVzOjoKKworICAgPj4+IHAgPSBQYXRoKCcuJykKKyAgID4+PiBbeCBmb3IgeCBpbiBwLml0ZXJkaXIoKSBpZiB4LmlzX2RpcigpXQorICAgW1Bvc2l4UGF0aCgnLmhnJyksIFBvc2l4UGF0aCgnZG9jcycpLCBQb3NpeFBhdGgoJ2Rpc3QnKSwKKyAgICBQb3NpeFBhdGgoJ19fcHljYWNoZV9fJyksIFBvc2l4UGF0aCgnYnVpbGQnKV0KKworTGlzdGluZyBQeXRob24gc291cmNlIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IHRyZWU6OgorCisgICA+Pj4gbGlzdChwLmdsb2IoJyoqLyoucHknKSkKKyAgIFtQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpLCBQb3NpeFBhdGgoJ3NldHVwLnB5JyksCisgICAgUG9zaXhQYXRoKCdwYXRobGliLnB5JyksIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyksCisgICAgUG9zaXhQYXRoKCdidWlsZC9saWIvcGF0aGxpYi5weScpXQorCitOYXZpZ2F0aW5nIGluc2lkZSBhIGRpcmVjdG9yeSB0cmVlOjoKKworICAgPj4+IHAgPSBQYXRoKCcvZXRjJykKKyAgID4+PiBxID0gcCAvICdpbml0LmQnIC8gJ3JlYm9vdCcKKyAgID4+PiBxCisgICBQb3NpeFBhdGgoJy9ldGMvaW5pdC5kL3JlYm9vdCcpCisgICA+Pj4gcS5yZXNvbHZlKCkKKyAgIFBvc2l4UGF0aCgnL2V0Yy9yYy5kL2luaXQuZC9oYWx0JykKKworUXVlcnlpbmcgcGF0aCBwcm9wZXJ0aWVzOjoKKworICAgPj4+IHEuZXhpc3RzKCkKKyAgIFRydWUKKyAgID4+PiBxLmlzX2RpcigpCisgICBGYWxzZQorCitPcGVuaW5nIGEgZmlsZTo6CisKKyAgID4+PiB3aXRoIHEub3BlbigpIGFzIGY6IGYucmVhZGxpbmUoKQorICAgLi4uCisgICAnIyEvYmluL2Jhc2hcbicKKworCisuLiBfcHVyZS1wYXRoczoKKworUHVyZSBwYXRocworLS0tLS0tLS0tLQorCitQdXJlIHBhdGggb2JqZWN0cyBwcm92aWRlIHBhdGgtaGFuZGxpbmcgb3BlcmF0aW9ucyB3aGljaCBkb24ndCBhY3R1YWxseQorYWNjZXNzIGEgZmlsZXN5c3RlbS4gIFRoZXJlIGFyZSB0aHJlZSB3YXlzIHRvIGFjY2VzcyB0aGVzZSBjbGFzc2VzLCB3aGljaAord2UgYWxzbyBjYWxsICpmbGF2b3Vycyo6CisKKy4uIGNsYXNzOjogUHVyZVBhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBnZW5lcmljIGNsYXNzIHRoYXQgcmVwcmVzZW50cyB0aGUgc3lzdGVtJ3MgcGF0aCBmbGF2b3VyIChpbnN0YW50aWF0aW5nCisgICBpdCBjcmVhdGVzIGVpdGhlciBhIDpjbGFzczpgUHVyZVBvc2l4UGF0aGAgb3IgYSA6Y2xhc3M6YFB1cmVXaW5kb3dzUGF0aGApOjoKKworICAgICAgPj4+IFB1cmVQYXRoKCdzZXR1cC5weScpICAgICAgIyBSdW5uaW5nIG9uIGEgVW5peCBtYWNoaW5lCisgICAgICBQdXJlUG9zaXhQYXRoKCdzZXR1cC5weScpCisKKyAgIEVhY2ggZWxlbWVudCBvZiAqcGF0aHNlZ21lbnRzKiBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhCisgICBwYXRoIHNlZ21lbnQsIG9yIGFub3RoZXIgcGF0aCBvYmplY3Q6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJ2ZvbycsICdzb21lL3BhdGgnLCAnYmFyJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ2Zvby9zb21lL3BhdGgvYmFyJykKKyAgICAgID4+PiBQdXJlUGF0aChQYXRoKCdmb28nKSwgUGF0aCgnYmFyJykpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vYmFyJykKKworICAgV2hlbiAqcGF0aHNlZ21lbnRzKiBpcyBlbXB0eSwgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGlzIGFzc3VtZWQ6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoKQorICAgICAgUHVyZVBvc2l4UGF0aCgnLicpCisKKyAgIFdoZW4gc2V2ZXJhbCBhYnNvbHV0ZSBwYXRocyBhcmUgZ2l2ZW4sIHRoZSBsYXN0IGlzIHRha2VuIGFzIGFuIGFuY2hvcgorICAgKG1pbWlja2luZyA6ZnVuYzpgb3MucGF0aC5qb2luYCdzIGJlaGF2aW91cik6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJy9ldGMnLCAnL3VzcicsICdsaWI2NCcpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvdXNyL2xpYjY0JykKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1dpbmRvd3MnLCAnZDpiYXInKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdkOmJhcicpCisKKyAgIEhvd2V2ZXIsIGluIGEgV2luZG93cyBwYXRoLCBjaGFuZ2luZyB0aGUgbG9jYWwgcm9vdCBkb2Vzbid0IGRpc2NhcmQgdGhlCisgICBwcmV2aW91cyBkcml2ZSBzZXR0aW5nOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycsICcvUHJvZ3JhbSBGaWxlcycpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorCisgICBTcHVyaW91cyBzbGFzaGVzIGFuZCBzaW5nbGUgZG90cyBhcmUgY29sbGFwc2VkLCBidXQgZG91YmxlIGRvdHMgKGBgJy4uJ2BgKQorICAgYXJlIG5vdCwgc2luY2UgdGhpcyB3b3VsZCBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgYSBwYXRoIGluIHRoZSBmYWNlIG9mCisgICBzeW1ib2xpYyBsaW5rczo6CisKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vLy9iYXInKQorICAgICAgUHVyZVBvc2l4UGF0aCgnZm9vL2JhcicpCisgICAgICA+Pj4gUHVyZVBhdGgoJ2Zvby8uL2JhcicpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vYmFyJykKKyAgICAgID4+PiBQdXJlUGF0aCgnZm9vLy4uL2JhcicpCisgICAgICBQdXJlUG9zaXhQYXRoKCdmb28vLi4vYmFyJykKKworICAgKGEgbmHDr3ZlIGFwcHJvYWNoIHdvdWxkIG1ha2UgYGBQdXJlUG9zaXhQYXRoKCdmb28vLi4vYmFyJylgYCBlcXVpdmFsZW50CisgICB0byBgYFB1cmVQb3NpeFBhdGgoJ2JhcicpYGAsIHdoaWNoIGlzIHdyb25nIGlmIGBgZm9vYGAgaXMgYSBzeW1ib2xpYyBsaW5rCisgICB0byBhbm90aGVyIGRpcmVjdG9yeSkKKworLi4gY2xhc3M6OiBQdXJlUG9zaXhQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQdXJlUGF0aGAsIHRoaXMgcGF0aCBmbGF2b3VyIHJlcHJlc2VudHMgbm9uLVdpbmRvd3MKKyAgIGZpbGVzeXN0ZW0gcGF0aHM6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworLi4gY2xhc3M6OiBQdXJlV2luZG93c1BhdGgoKnBhdGhzZWdtZW50cykKKworICAgQSBzdWJjbGFzcyBvZiA6Y2xhc3M6YFB1cmVQYXRoYCwgdGhpcyBwYXRoIGZsYXZvdXIgcmVwcmVzZW50cyBXaW5kb3dzCisgICBmaWxlc3lzdGVtIHBhdGhzOjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Qcm9ncmFtIEZpbGVzJykKKworICAgKnBhdGhzZWdtZW50cyogaXMgc3BlY2lmaWVkIHNpbWlsYXJseSB0byA6Y2xhc3M6YFB1cmVQYXRoYC4KKworUmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtIHlvdSdyZSBydW5uaW5nIG9uLCB5b3UgY2FuIGluc3RhbnRpYXRlIGFsbCBvZgordGhlc2UgY2xhc3Nlcywgc2luY2UgdGhleSBkb24ndCBwcm92aWRlIGFueSBvcGVyYXRpb24gdGhhdCBkb2VzIHN5c3RlbSBjYWxscy4KKworCitHZW5lcmFsIHByb3BlcnRpZXMKK15eXl5eXl5eXl5eXl5eXl5eXgorCitQYXRocyBhcmUgaW1tdXRhYmxlIGFuZCBoYXNoYWJsZS4gIFBhdGhzIG9mIGEgc2FtZSBmbGF2b3VyIGFyZSBjb21wYXJhYmxlCithbmQgb3JkZXJhYmxlLiAgVGhlc2UgcHJvcGVydGllcyByZXNwZWN0IHRoZSBmbGF2b3VyJ3MgY2FzZS1mb2xkaW5nCitzZW1hbnRpY3M6OgorCisgICA+Pj4gUHVyZVBvc2l4UGF0aCgnZm9vJykgPT0gUHVyZVBvc2l4UGF0aCgnRk9PJykKKyAgIEZhbHNlCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdmb28nKSA9PSBQdXJlV2luZG93c1BhdGgoJ0ZPTycpCisgICBUcnVlCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdGT08nKSBpbiB7IFB1cmVXaW5kb3dzUGF0aCgnZm9vJykgfQorICAgVHJ1ZQorICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnQzonKSA8IFB1cmVXaW5kb3dzUGF0aCgnZDonKQorICAgVHJ1ZQorCitQYXRocyBvZiBhIGRpZmZlcmVudCBmbGF2b3VyIGNvbXBhcmUgdW5lcXVhbCBhbmQgY2Fubm90IGJlIG9yZGVyZWQ6OgorCisgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdmb28nKSA9PSBQdXJlUG9zaXhQYXRoKCdmb28nKQorICAgRmFsc2UKKyAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2ZvbycpIDwgUHVyZVBvc2l4UGF0aCgnZm9vJykKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgIFR5cGVFcnJvcjogdW5vcmRlcmFibGUgdHlwZXM6IFB1cmVXaW5kb3dzUGF0aCgpIDwgUHVyZVBvc2l4UGF0aCgpCisKKworT3BlcmF0b3JzCiteXl5eXl5eXl4KKworVGhlIHNsYXNoIG9wZXJhdG9yIGhlbHBzIGNyZWF0ZSBjaGlsZCBwYXRocywgc2ltaWxhcmx5IHRvIDpmdW5jOmBvcy5wYXRoLmpvaW5gOjoKKworICAgPj4+IHAgPSBQdXJlUGF0aCgnL2V0YycpCisgICA+Pj4gcAorICAgUHVyZVBvc2l4UGF0aCgnL2V0YycpCisgICA+Pj4gcCAvICdpbml0LmQnIC8gJ2FwYWNoZTInCisgICBQdXJlUG9zaXhQYXRoKCcvZXRjL2luaXQuZC9hcGFjaGUyJykKKyAgID4+PiBxID0gUHVyZVBhdGgoJ2JpbicpCisgICA+Pj4gJy91c3InIC8gcQorICAgUHVyZVBvc2l4UGF0aCgnL3Vzci9iaW4nKQorCitUaGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgcGF0aCBpcyB0aGUgcmF3IGZpbGVzeXN0ZW0gcGF0aCBpdHNlbGYKKyhpbiBuYXRpdmUgZm9ybSwgZS5nLiB3aXRoIGJhY2tzbGFzaGVzIHVuZGVyIFdpbmRvd3MpLCB3aGljaCB5b3UgY2FuCitwYXNzIHRvIGFueSBmdW5jdGlvbiB0YWtpbmcgYSBmaWxlIHBhdGggYXMgYSBzdHJpbmc6OgorCisgICA+Pj4gcCA9IFB1cmVQYXRoKCcvZXRjJykKKyAgID4+PiBzdHIocCkKKyAgICcvZXRjJworICAgPj4+IHAgPSBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorICAgPj4+IHN0cihwKQorICAgJ2M6XFxQcm9ncmFtIEZpbGVzJworCitTaW1pbGFybHksIGNhbGxpbmcgOmNsYXNzOmBieXRlc2Agb24gYSBwYXRoIGdpdmVzIHRoZSByYXcgZmlsZXN5c3RlbSBwYXRoIGFzIGEKK2J5dGVzIG9iamVjdCwgYXMgZW5jb2RlZCBieSA6ZnVuYzpgb3MuZnNlbmNvZGVgOjoKKworICAgPj4+IGJ5dGVzKHApCisgICBiJy9ldGMnCisKKy4uIG5vdGU6OgorICAgQ2FsbGluZyA6Y2xhc3M6YGJ5dGVzYCBpcyBvbmx5IHJlY29tbWVuZGVkIHVuZGVyIFVuaXguICBVbmRlciBXaW5kb3dzLAorICAgdGhlIHVuaWNvZGUgZm9ybSBpcyB0aGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aW9uIG9mIGZpbGVzeXN0ZW0gcGF0aHMuCisKKworQWNjZXNzaW5nIGluZGl2aWR1YWwgcGFydHMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK1RvIGFjY2VzcyB0aGUgaW5kaXZpZHVhbCAicGFydHMiIChjb21wb25lbnRzKSBvZiBhIHBhdGgsIHVzZSB0aGUgZm9sbG93aW5nCitwcm9wZXJ0eToKKworLi4gZGF0YTo6IFB1cmVQYXRoLnBhcnRzCisKKyAgIEEgdHVwbGUgZ2l2aW5nIGFjY2VzcyB0byB0aGUgcGF0aCdzIHZhcmlvdXMgY29tcG9uZW50czo6CisKKyAgICAgID4+PiBwID0gUHVyZVBhdGgoJy91c3IvYmluL3B5dGhvbjMnKQorICAgICAgPj4+IHAucGFydHMKKyAgICAgICgnLycsICd1c3InLCAnYmluJywgJ3B5dGhvbjMnKQorCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy9QU0YnKQorICAgICAgPj4+IHAucGFydHMKKyAgICAgICgnYzpcXCcsICdQcm9ncmFtIEZpbGVzJywgJ1BTRicpCisKKyAgIChub3RlIGhvdyB0aGUgZHJpdmUgYW5kIGxvY2FsIHJvb3QgYXJlIHJlZ3JvdXBlZCBpbiBhIHNpbmdsZSBwYXJ0KQorCisKK01ldGhvZHMgYW5kIHByb3BlcnRpZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworUHVyZSBwYXRocyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbmQgcHJvcGVydGllczoKKworLi4gZGF0YTo6IFB1cmVQYXRoLmRyaXZlCisKKyAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZHJpdmUgbGV0dGVyIG9yIG5hbWUsIGlmIGFueTo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykuZHJpdmUKKyAgICAgICdjOicKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy9Qcm9ncmFtIEZpbGVzLycpLmRyaXZlCisgICAgICAnJworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5kcml2ZQorICAgICAgJycKKworICAgVU5DIHNoYXJlcyBhcmUgYWxzbyBjb25zaWRlcmVkIGRyaXZlczo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vaG9zdC9zaGFyZS9mb28udHh0JykuZHJpdmUKKyAgICAgICdcXFxcaG9zdFxcc2hhcmUnCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5yb290CisKKyAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgKGxvY2FsIG9yIGdsb2JhbCkgcm9vdCwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKS5yb290CisgICAgICAnXFwnCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOlByb2dyYW0gRmlsZXMvJykucm9vdAorICAgICAgJycKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykucm9vdAorICAgICAgJy8nCisKKyAgIFVOQyBzaGFyZXMgYWx3YXlzIGhhdmUgYSByb290OjoKKworICAgICAgPj4+IFB1cmVXaW5kb3dzUGF0aCgnLy9ob3N0L3NoYXJlJykucm9vdAorICAgICAgJ1xcJworCisuLiBkYXRhOjogUHVyZVBhdGguYW5jaG9yCisKKyAgIFRoZSBjb25jYXRlbmF0aW9uIG9mIHRoZSBkcml2ZSBhbmQgcm9vdDo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMvJykuYW5jaG9yCisgICAgICAnYzpcXCcKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6UHJvZ3JhbSBGaWxlcy8nKS5hbmNob3IKKyAgICAgICdjOicKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuYW5jaG9yCisgICAgICAnLycKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vaG9zdC9zaGFyZScpLmFuY2hvcgorICAgICAgJ1xcXFxob3N0XFxzaGFyZVxcJworCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5wYXJlbnRzCisKKyAgIEFuIGltbXV0YWJsZSBzZXF1ZW5jZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBsb2dpY2FsIGFuY2VzdG9ycyBvZgorICAgdGhlIHBhdGg6OgorCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovZm9vL2Jhci9zZXR1cC5weScpCisgICAgICA+Pj4gcC5wYXJlbnRzWzBdCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L2Zvby9iYXInKQorICAgICAgPj4+IHAucGFyZW50c1sxXQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9mb28nKQorICAgICAgPj4+IHAucGFyZW50c1syXQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi8nKQorCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5wYXJlbnQKKworICAgVGhlIGxvZ2ljYWwgcGFyZW50IG9mIHRoZSBwYXRoOjoKKworICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcvYS9iL2MvZCcpCisgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9hL2IvYycpCisKKyAgIFlvdSBjYW5ub3QgZ28gcGFzdCBhbiBhbmNob3IsIG9yIGVtcHR5IHBhdGg6OgorCisgICAgICA+Pj4gcCA9IFB1cmVQb3NpeFBhdGgoJy8nKQorICAgICAgPj4+IHAucGFyZW50CisgICAgICBQdXJlUG9zaXhQYXRoKCcvJykKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnLicpCisgICAgICA+Pj4gcC5wYXJlbnQKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy4nKQorCisgICAuLiBub3RlOjoKKyAgICAgIFRoaXMgaXMgYSBwdXJlbHkgbGV4aWNhbCBvcGVyYXRpb24sIGhlbmNlIHRoZSBmb2xsb3dpbmcgYmVoYXZpb3VyOjoKKworICAgICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCdmb28vLi4nKQorICAgICAgICAgPj4+IHAucGFyZW50CisgICAgICAgICBQdXJlUG9zaXhQYXRoKCdmb28nKQorCisgICAgICBJZiB5b3Ugd2FudCB0byB3YWxrIGFuIGFyYml0cmFyeSBmaWxlc3lzdGVtIHBhdGggdXB3YXJkcywgaXQgaXMKKyAgICAgIHJlY29tbWVuZGVkIHRvIGZpcnN0IGNhbGwgOm1ldGg6YFBhdGgucmVzb2x2ZWAgc28gYXMgdG8gcmVzb2x2ZQorICAgICAgc3ltbGlua3MgYW5kIGVsaW1pbmF0ZSBgIi4uImAgY29tcG9uZW50cy4KKworCisuLiBkYXRhOjogUHVyZVBhdGgubmFtZQorCisgICBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCBleGNsdWRpbmcgdGhlIGRyaXZlIGFuZAorICAgcm9vdCwgaWYgYW55OjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkvc2V0dXAucHknKS5uYW1lCisgICAgICAnc2V0dXAucHknCisKKyAgIFVOQyBkcml2ZSBuYW1lcyBhcmUgbm90IGNvbnNpZGVyZWQ6OgorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL3NvbWUvc2hhcmUvc2V0dXAucHknKS5uYW1lCisgICAgICAnc2V0dXAucHknCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvL3NvbWUvc2hhcmUnKS5uYW1lCisgICAgICAnJworCisKKy4uIGRhdGE6OiBQdXJlUGF0aC5zdWZmaXgKKworICAgVGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRoZSBmaW5hbCBjb21wb25lbnQsIGlmIGFueTo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5L3NldHVwLnB5Jykuc3VmZml4CisgICAgICAnLnB5JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmd6Jykuc3VmZml4CisgICAgICAnLmd6JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnknKS5zdWZmaXgKKyAgICAgICcnCisKKworLi4gZGF0YTo6IFB1cmVQYXRoLnN1ZmZpeGVzCisKKyAgIEEgbGlzdCBvZiB0aGUgcGF0aCdzIGZpbGUgZXh0ZW5zaW9uczo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhci5nYXInKS5zdWZmaXhlcworICAgICAgWycudGFyJywgJy5nYXInXQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnkudGFyLmd6Jykuc3VmZml4ZXMKKyAgICAgIFsnLnRhcicsICcuZ3onXQorICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnknKS5zdWZmaXhlcworICAgICAgW10KKworCisuLiBkYXRhOjogUHVyZVBhdGguc3RlbQorCisgICBUaGUgZmluYWwgcGF0aCBjb21wb25lbnQsIHdpdGhvdXQgaXRzIHN1ZmZpeDo6CisKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhci5neicpLnN0ZW0KKyAgICAgICdsaWJyYXJ5LnRhcicKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdteS9saWJyYXJ5LnRhcicpLnN0ZW0KKyAgICAgICdsaWJyYXJ5JworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJ215L2xpYnJhcnknKS5zdGVtCisgICAgICAnbGlicmFyeScKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5hc19wb3NpeCgpCisKKyAgIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcGF0aCB3aXRoIGZvcndhcmQgc2xhc2hlcyAoYGAvYGApOjoKKworICAgICAgPj4+IHAgPSBQdXJlV2luZG93c1BhdGgoJ2M6XFx3aW5kb3dzJykKKyAgICAgID4+PiBzdHIocCkKKyAgICAgICdjOlxcd2luZG93cycKKyAgICAgID4+PiBwLmFzX3Bvc2l4KCkKKyAgICAgICdjOi93aW5kb3dzJworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmFzX3VyaSgpCisKKyAgIFJlcHJlc2VudCB0aGUgcGF0aCBhcyBhIGBgZmlsZWBgIFVSSS4gIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZgorICAgdGhlIHBhdGggaXNuJ3QgYWJzb2x1dGUuCisKKyAgICAgID4+PiBwID0gUHVyZVBvc2l4UGF0aCgnL2V0Yy9wYXNzd2QnKQorICAgICAgPj4+IHAuYXNfdXJpKCkKKyAgICAgICdmaWxlOi8vL2V0Yy9wYXNzd2QnCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovV2luZG93cycpCisgICAgICA+Pj4gcC5hc191cmkoKQorICAgICAgJ2ZpbGU6Ly8vYzovV2luZG93cycKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5pc19hYnNvbHV0ZSgpCisKKyAgIFJldHVybiB3aGV0aGVyIHRoZSBwYXRoIGlzIGFic29sdXRlIG9yIG5vdC4gIEEgcGF0aCBpcyBjb25zaWRlcmVkIGFic29sdXRlCisgICBpZiBpdCBoYXMgYm90aCBhIHJvb3QgYW5kIChpZiB0aGUgZmxhdm91ciBhbGxvd3MpIGEgZHJpdmU6OgorCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2EvYicpLmlzX2Fic29sdXRlKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdhL2InKS5pc19hYnNvbHV0ZSgpCisgICAgICBGYWxzZQorCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCdjOi9hL2InKS5pc19hYnNvbHV0ZSgpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVdpbmRvd3NQYXRoKCcvYS9iJykuaXNfYWJzb2x1dGUoKQorICAgICAgRmFsc2UKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6JykuaXNfYWJzb2x1dGUoKQorICAgICAgRmFsc2UKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJy8vc29tZS9zaGFyZScpLmlzX2Fic29sdXRlKCkKKyAgICAgIFRydWUKKworCisuLiBtZXRob2Q6OiBQdXJlUGF0aC5pc19yZXNlcnZlZCgpCisKKyAgIFdpdGggOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgLCByZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggaXMgY29uc2lkZXJlZAorICAgcmVzZXJ2ZWQgdW5kZXIgV2luZG93cywgYGBGYWxzZWBgIG90aGVyd2lzZS4gIFdpdGggOmNsYXNzOmBQdXJlUG9zaXhQYXRoYCwKKyAgIGBgRmFsc2VgYCBpcyBhbHdheXMgcmV0dXJuZWQuCisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ251bCcpLmlzX3Jlc2VydmVkKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCdudWwnKS5pc19yZXNlcnZlZCgpCisgICAgICBGYWxzZQorCisgICBGaWxlIHN5c3RlbSBjYWxscyBvbiByZXNlcnZlZCBwYXRocyBjYW4gZmFpbCBteXN0ZXJpb3VzbHkgb3IgaGF2ZQorICAgdW5pbnRlbmRlZCBlZmZlY3RzLgorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLmpvaW5wYXRoKCpvdGhlcikKKworICAgQ2FsbGluZyB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGNvbWJpbmluZyB0aGUgcGF0aCB3aXRoIGVhY2ggb2YKKyAgIHRoZSAqb3RoZXIqIGFyZ3VtZW50cyBpbiB0dXJuOjoKKworICAgICAgPj4+IFB1cmVQb3NpeFBhdGgoJy9ldGMnKS5qb2lucGF0aCgncGFzc3dkJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJy9ldGMvcGFzc3dkJykKKyAgICAgID4+PiBQdXJlUG9zaXhQYXRoKCcvZXRjJykuam9pbnBhdGgoUHVyZVBvc2l4UGF0aCgncGFzc3dkJykpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gUHVyZVBvc2l4UGF0aCgnL2V0YycpLmpvaW5wYXRoKCdpbml0LmQnLCAnYXBhY2hlMicpCisgICAgICBQdXJlUG9zaXhQYXRoKCcvZXRjL2luaXQuZC9hcGFjaGUyJykKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2M6Jykuam9pbnBhdGgoJy9Qcm9ncmFtIEZpbGVzJykKKyAgICAgIFB1cmVXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcycpCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGgubWF0Y2gocGF0dGVybikKKworICAgTWF0Y2ggdGhpcyBwYXRoIGFnYWluc3QgdGhlIHByb3ZpZGVkIGdsb2Itc3R5bGUgcGF0dGVybi4gIFJldHVybiBgYFRydWVgYAorICAgaWYgbWF0Y2hpbmcgaXMgc3VjY2Vzc2Z1bCwgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgSWYgKnBhdHRlcm4qIGlzIHJlbGF0aXZlLCB0aGUgcGF0aCBjYW4gYmUgZWl0aGVyIHJlbGF0aXZlIG9yIGFic29sdXRlLAorICAgYW5kIG1hdGNoaW5nIGlzIGRvbmUgZnJvbSB0aGUgcmlnaHQ6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJ2EvYi5weScpLm1hdGNoKCcqLnB5JykKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUGF0aCgnL2EvYi9jLnB5JykubWF0Y2goJ2IvKi5weScpCisgICAgICBUcnVlCisgICAgICA+Pj4gUHVyZVBhdGgoJy9hL2IvYy5weScpLm1hdGNoKCdhLyoucHknKQorICAgICAgRmFsc2UKKworICAgSWYgKnBhdHRlcm4qIGlzIGFic29sdXRlLCB0aGUgcGF0aCBtdXN0IGJlIGFic29sdXRlLCBhbmQgdGhlIHdob2xlIHBhdGgKKyAgIG11c3QgbWF0Y2g6OgorCisgICAgICA+Pj4gUHVyZVBhdGgoJy9hLnB5JykubWF0Y2goJy8qLnB5JykKKyAgICAgIFRydWUKKyAgICAgID4+PiBQdXJlUGF0aCgnYS9iLnB5JykubWF0Y2goJy8qLnB5JykKKyAgICAgIEZhbHNlCisKKyAgIEFzIHdpdGggb3RoZXIgbWV0aG9kcywgY2FzZS1zZW5zaXRpdml0eSBpcyBvYnNlcnZlZDo6CisKKyAgICAgID4+PiBQdXJlV2luZG93c1BhdGgoJ2IucHknKS5tYXRjaCgnKi5QWScpCisgICAgICBUcnVlCisKKworLi4gbWV0aG9kOjogUHVyZVBhdGgucmVsYXRpdmVfdG8oKm90aGVyKQorCisgICBDb21wdXRlIGEgdmVyc2lvbiBvZiB0aGlzIHBhdGggcmVsYXRpdmUgdG8gdGhlIHBhdGggcmVwcmVzZW50ZWQgYnkKKyAgICpvdGhlciouICBJZiBpdCdzIGltcG9zc2libGUsIFZhbHVlRXJyb3IgaXMgcmFpc2VkOjoKKworICAgICAgPj4+IHAgPSBQdXJlUG9zaXhQYXRoKCcvZXRjL3Bhc3N3ZCcpCisgICAgICA+Pj4gcC5yZWxhdGl2ZV90bygnLycpCisgICAgICBQdXJlUG9zaXhQYXRoKCdldGMvcGFzc3dkJykKKyAgICAgID4+PiBwLnJlbGF0aXZlX3RvKCcvZXRjJykKKyAgICAgIFB1cmVQb3NpeFBhdGgoJ3Bhc3N3ZCcpCisgICAgICA+Pj4gcC5yZWxhdGl2ZV90bygnL3VzcicpCisgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+CisgICAgICAgIEZpbGUgInBhdGhsaWIucHkiLCBsaW5lIDY5NCwgaW4gcmVsYXRpdmVfdG8KKyAgICAgICAgICAuZm9ybWF0KHN0cihzZWxmKSwgc3RyKGZvcm1hdHRlZCkpKQorICAgICAgVmFsdWVFcnJvcjogJy9ldGMvcGFzc3dkJyBkb2VzIG5vdCBzdGFydCB3aXRoICcvdXNyJworCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLndpdGhfbmFtZShuYW1lKQorCisgICBSZXR1cm4gYSBuZXcgcGF0aCB3aXRoIHRoZSA6YXR0cjpgbmFtZWAgY2hhbmdlZC4gIElmIHRoZSBvcmlnaW5hbCBwYXRoCisgICBkb2Vzbid0IGhhdmUgYSBuYW1lLCBWYWx1ZUVycm9yIGlzIHJhaXNlZDo6CisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9Eb3dubG9hZHMvcGF0aGxpYi50YXIuZ3onKQorICAgICAgPj4+IHAud2l0aF9uYW1lKCdzZXR1cC5weScpCisgICAgICBQdXJlV2luZG93c1BhdGgoJ2M6L0Rvd25sb2Fkcy9zZXR1cC5weScpCisgICAgICA+Pj4gcCA9IFB1cmVXaW5kb3dzUGF0aCgnYzovJykKKyAgICAgID4+PiBwLndpdGhfbmFtZSgnc2V0dXAucHknKQorICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgICAgICBGaWxlICIvaG9tZS9hbnRvaW5lL2NweXRob24vZGVmYXVsdC9MaWIvcGF0aGxpYi5weSIsIGxpbmUgNzUxLCBpbiB3aXRoX25hbWUKKyAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlciBoYXMgYW4gZW1wdHkgbmFtZSIgJSAoc2VsZiwpKQorICAgICAgVmFsdWVFcnJvcjogUHVyZVdpbmRvd3NQYXRoKCdjOi8nKSBoYXMgYW4gZW1wdHkgbmFtZQorCisKKy4uIG1ldGhvZDo6IFB1cmVQYXRoLndpdGhfc3VmZml4KHN1ZmZpeCkKKworICAgUmV0dXJuIGEgbmV3IHBhdGggd2l0aCB0aGUgOmF0dHI6YHN1ZmZpeGAgY2hhbmdlZC4gIElmIHRoZSBvcmlnaW5hbCBwYXRoCisgICBkb2Vzbid0IGhhdmUgYSBzdWZmaXgsIHRoZSBuZXcgKnN1ZmZpeCogaXMgYXBwZW5kZWQgaW5zdGVhZDo6CisKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdjOi9Eb3dubG9hZHMvcGF0aGxpYi50YXIuZ3onKQorICAgICAgPj4+IHAud2l0aF9zdWZmaXgoJy5iejInKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdjOi9Eb3dubG9hZHMvcGF0aGxpYi50YXIuYnoyJykKKyAgICAgID4+PiBwID0gUHVyZVdpbmRvd3NQYXRoKCdSRUFETUUnKQorICAgICAgPj4+IHAud2l0aF9zdWZmaXgoJy50eHQnKQorICAgICAgUHVyZVdpbmRvd3NQYXRoKCdSRUFETUUudHh0JykKKworCisuLiBfY29uY3JldGUtcGF0aHM6CisKKworQ29uY3JldGUgcGF0aHMKKy0tLS0tLS0tLS0tLS0tCisKK0NvbmNyZXRlIHBhdGhzIGFyZSBzdWJjbGFzc2VzIG9mIHRoZSBwdXJlIHBhdGggY2xhc3Nlcy4gIEluIGFkZGl0aW9uIHRvCitvcGVyYXRpb25zIHByb3ZpZGVkIGJ5IHRoZSBsYXR0ZXIsIHRoZXkgYWxzbyBwcm92aWRlIG1ldGhvZHMgdG8gZG8gc3lzdGVtCitjYWxscyBvbiBwYXRoIG9iamVjdHMuICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0byBpbnN0YW50aWF0ZSBjb25jcmV0ZSBwYXRoczoKKworLi4gY2xhc3M6OiBQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQdXJlUGF0aGAsIHRoaXMgY2xhc3MgcmVwcmVzZW50cyBjb25jcmV0ZSBwYXRocyBvZgorICAgdGhlIHN5c3RlbSdzIHBhdGggZmxhdm91ciAoaW5zdGFudGlhdGluZyBpdCBjcmVhdGVzIGVpdGhlciBhCisgICA6Y2xhc3M6YFBvc2l4UGF0aGAgb3IgYSA6Y2xhc3M6YFdpbmRvd3NQYXRoYCk6OgorCisgICAgICA+Pj4gUGF0aCgnc2V0dXAucHknKQorICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpCisKKyAgICpwYXRoc2VnbWVudHMqIGlzIHNwZWNpZmllZCBzaW1pbGFybHkgdG8gOmNsYXNzOmBQdXJlUGF0aGAuCisKKy4uIGNsYXNzOjogUG9zaXhQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQYXRoYCBhbmQgOmNsYXNzOmBQdXJlUG9zaXhQYXRoYCwgdGhpcyBjbGFzcworICAgcmVwcmVzZW50cyBjb25jcmV0ZSBub24tV2luZG93cyBmaWxlc3lzdGVtIHBhdGhzOjoKKworICAgICAgPj4+IFBvc2l4UGF0aCgnL2V0YycpCisgICAgICBQb3NpeFBhdGgoJy9ldGMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCisuLiBjbGFzczo6IFdpbmRvd3NQYXRoKCpwYXRoc2VnbWVudHMpCisKKyAgIEEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQYXRoYCBhbmQgOmNsYXNzOmBQdXJlV2luZG93c1BhdGhgLCB0aGlzIGNsYXNzCisgICByZXByZXNlbnRzIGNvbmNyZXRlIFdpbmRvd3MgZmlsZXN5c3RlbSBwYXRoczo6CisKKyAgICAgID4+PiBXaW5kb3dzUGF0aCgnYzovUHJvZ3JhbSBGaWxlcy8nKQorICAgICAgV2luZG93c1BhdGgoJ2M6L1Byb2dyYW0gRmlsZXMnKQorCisgICAqcGF0aHNlZ21lbnRzKiBpcyBzcGVjaWZpZWQgc2ltaWxhcmx5IHRvIDpjbGFzczpgUHVyZVBhdGhgLgorCitZb3UgY2FuIG9ubHkgaW5zdGFudGlhdGUgdGhlIGNsYXNzIGZsYXZvdXIgdGhhdCBjb3JyZXNwb25kcyB0byB5b3VyIHN5c3RlbQorKGFsbG93aW5nIHN5c3RlbSBjYWxscyBvbiBub24tY29tcGF0aWJsZSBwYXRoIGZsYXZvdXJzIGNvdWxkIGxlYWQgdG8KK2J1Z3Mgb3IgZmFpbHVyZXMgaW4geW91ciBhcHBsaWNhdGlvbik6OgorCisgICA+Pj4gaW1wb3J0IG9zCisgICA+Pj4gb3MubmFtZQorICAgJ3Bvc2l4JworICAgPj4+IFBhdGgoJ3NldHVwLnB5JykKKyAgIFBvc2l4UGF0aCgnc2V0dXAucHknKQorICAgPj4+IFBvc2l4UGF0aCgnc2V0dXAucHknKQorICAgUG9zaXhQYXRoKCdzZXR1cC5weScpCisgICA+Pj4gV2luZG93c1BhdGgoJ3NldHVwLnB5JykKKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICAgRmlsZSAicGF0aGxpYi5weSIsIGxpbmUgNzk4LCBpbiBfX25ld19fCisgICAgICAgJSAoY2xzLl9fbmFtZV9fLCkpCisgICBOb3RJbXBsZW1lbnRlZEVycm9yOiBjYW5ub3QgaW5zdGFudGlhdGUgJ1dpbmRvd3NQYXRoJyBvbiB5b3VyIHN5c3RlbQorCisKK01ldGhvZHMKK15eXl5eXl4KKworQ29uY3JldGUgcGF0aHMgcHJvdmlkZSB0aGUgZm9sbG93aW5nIG1ldGhvZHMgaW4gYWRkaXRpb24gdG8gcHVyZSBwYXRocworbWV0aG9kcy4gIE1hbnkgb2YgdGhlc2UgbWV0aG9kcyBjYW4gcmFpc2UgYW4gOmV4YzpgT1NFcnJvcmAgaWYgYSBzeXN0ZW0KK2NhbGwgZmFpbHMgKGZvciBleGFtcGxlIGJlY2F1c2UgdGhlIHBhdGggZG9lc24ndCBleGlzdCk6CisKKy4uIGNsYXNzbWV0aG9kOjogUGF0aC5jd2QoKQorCisgICBSZXR1cm4gYSBuZXcgcGF0aCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGRpcmVjdG9yeSAoYXMgcmV0dXJuZWQKKyAgIGJ5IDpmdW5jOmBvcy5nZXRjd2RgKTo6CisKKyAgICAgID4+PiBQYXRoLmN3ZCgpCisgICAgICBQb3NpeFBhdGgoJy9ob21lL2FudG9pbmUvcGF0aGxpYicpCisKKworLi4gbWV0aG9kOjogUGF0aC5zdGF0KCkKKworICAgUmV0dXJuIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGF0aCAoc2ltaWxhcmx5IHRvIDpmdW5jOmBvcy5zdGF0YCkuCisgICBUaGUgcmVzdWx0IGlzIGxvb2tlZCB1cCBhdCBlYWNoIGNhbGwgdG8gdGhpcyBtZXRob2QuCisKKyAgICAgID4+PiBwID0gUGF0aCgnc2V0dXAucHknKQorICAgICAgPj4+IHAuc3RhdCgpLnN0X3NpemUKKyAgICAgIDk1NgorICAgICAgPj4+IHAuc3RhdCgpLnN0X210aW1lCisgICAgICAxMzI3ODgzNTQ3Ljg1MjU1NAorCisKKy4uIG1ldGhvZDo6IFBhdGguY2htb2QobW9kZSkKKworICAgQ2hhbmdlIHRoZSBmaWxlIG1vZGUgYW5kIHBlcm1pc3Npb25zLCBsaWtlIDpmdW5jOmBvcy5jaG1vZGA6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ3NldHVwLnB5JykKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9tb2RlCisgICAgICAzMzI3NworICAgICAgPj4+IHAuY2htb2QoMG80NDQpCisgICAgICA+Pj4gcC5zdGF0KCkuc3RfbW9kZQorICAgICAgMzMwNjAKKworCisuLiBtZXRob2Q6OiBQYXRoLmV4aXN0cygpCisKKyAgIFdoZXRoZXIgdGhlIHBhdGggcG9pbnRzIHRvIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5OjoKKworICAgICAgPj4+IFBhdGgoJy4nKS5leGlzdHMoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IFBhdGgoJ3NldHVwLnB5JykuZXhpc3RzKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQYXRoKCcvZXRjJykuZXhpc3RzKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBQYXRoKCdub25leGlzdGVudGZpbGUnKS5leGlzdHMoKQorICAgICAgRmFsc2UKKworICAgLi4gbm90ZTo6CisgICAgICBJZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1saW5rLCA6bWV0aDpgZXhpc3RzYCByZXR1cm5zIHdoZXRoZXIgdGhlCisgICAgICBzeW1saW5rICpwb2ludHMgdG8qIGFuIGV4aXN0aW5nIGZpbGUgb3IgZGlyZWN0b3J5LgorCisKKy4uIG1ldGhvZDo6IFBhdGguZ2xvYihwYXR0ZXJuKQorCisgICBHbG9iIHRoZSBnaXZlbiAqcGF0dGVybiogaW4gdGhlIGRpcmVjdG9yeSByZXByZXNlbnRlZCBieSB0aGlzIHBhdGgsCisgICB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZmlsZXMgKG9mIGFueSBraW5kKTo6CisKKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgnLicpLmdsb2IoJyoucHknKSkKKyAgICAgIFtQb3NpeFBhdGgoJ3BhdGhsaWIucHknKSwgUG9zaXhQYXRoKCdzZXR1cC5weScpLCBQb3NpeFBhdGgoJ3Rlc3RfcGF0aGxpYi5weScpXQorICAgICAgPj4+IHNvcnRlZChQYXRoKCcuJykuZ2xvYignKi8qLnB5JykpCisgICAgICBbUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKV0KKworICAgVGhlICJgYCoqYGAiIHBhdHRlcm4gbWVhbnMgInRoaXMgZGlyZWN0b3J5IGFuZCBhbGwgc3ViZGlyZWN0b3JpZXMsCisgICByZWN1cnNpdmVseSIuICBJbiBvdGhlciB3b3JkcywgaXQgZW5hYmxlcyByZWN1cnNpdmUgZ2xvYmJpbmc6OgorCisgICAgICA+Pj4gc29ydGVkKFBhdGgoJy4nKS5nbG9iKCcqKi8qLnB5JykpCisgICAgICBbUG9zaXhQYXRoKCdidWlsZC9saWIvcGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdwYXRobGliLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpLAorICAgICAgIFBvc2l4UGF0aCgndGVzdF9wYXRobGliLnB5JyldCisKKyAgIC4uIG5vdGU6OgorICAgICAgVXNpbmcgdGhlICJgYCoqYGAiIHBhdHRlcm4gaW4gbGFyZ2UgZGlyZWN0b3J5IHRyZWVzIG1heSBjb25zdW1lCisgICAgICBhbiBpbm9yZGluYXRlIGFtb3VudCBvZiB0aW1lLgorCisKKy4uIG1ldGhvZDo6IFBhdGguZ3JvdXAoKQorCisgICBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGdyb3VwIG93bmluZyB0aGUgZmlsZS4gIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQKKyAgIGlmIHRoZSBmaWxlJ3MgZ2lkIGlzbid0IGZvdW5kIGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19kaXIoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5IChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgZGlyZWN0b3J5KSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2ZpbGUoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgcmVndWxhciBmaWxlIChvciBhIHN5bWJvbGljIGxpbmsKKyAgIHBvaW50aW5nIHRvIGEgcmVndWxhciBmaWxlKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX3N5bWxpbmsoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgc3ltYm9saWMgbGluaywgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdDsgb3RoZXIgZXJyb3JzIChzdWNoCisgICBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19zb2NrZXQoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgVW5peCBzb2NrZXQgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBVbml4IHNvY2tldCksIGBgRmFsc2VgYCBpZiBpdCBwb2ludHMgdG8gYW5vdGhlciBraW5kIG9mIGZpbGUuCisKKyAgIGBgRmFsc2VgYCBpcyBhbHNvIHJldHVybmVkIGlmIHRoZSBwYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluazsKKyAgIG90aGVyIGVycm9ycyAoc3VjaCBhcyBwZXJtaXNzaW9uIGVycm9ycykgYXJlIHByb3BhZ2F0ZWQuCisKKworLi4gbWV0aG9kOjogUGF0aC5pc19maWZvKCkKKworICAgUmV0dXJuIGBgVHJ1ZWBgIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIEZJRk8gKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBGSUZPKSwgYGBGYWxzZWBgIGlmIGl0IHBvaW50cyB0byBhbm90aGVyIGtpbmQgb2YgZmlsZS4KKworICAgYGBGYWxzZWBgIGlzIGFsc28gcmV0dXJuZWQgaWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rOworICAgb3RoZXIgZXJyb3JzIChzdWNoIGFzIHBlcm1pc3Npb24gZXJyb3JzKSBhcmUgcHJvcGFnYXRlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLmlzX2Jsb2NrX2RldmljZSgpCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBibG9jayBkZXZpY2UgKG9yIGEgc3ltYm9saWMgbGluaworICAgcG9pbnRpbmcgdG8gYSBibG9jayBkZXZpY2UpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXNfY2hhcl9kZXZpY2UoKQorCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIHBhdGggcG9pbnRzIHRvIGEgY2hhcmFjdGVyIGRldmljZSAob3IgYSBzeW1ib2xpYyBsaW5rCisgICBwb2ludGluZyB0byBhIGNoYXJhY3RlciBkZXZpY2UpLCBgYEZhbHNlYGAgaWYgaXQgcG9pbnRzIHRvIGFub3RoZXIga2luZCBvZiBmaWxlLgorCisgICBgYEZhbHNlYGAgaXMgYWxzbyByZXR1cm5lZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0IG9yIGlzIGEgYnJva2VuIHN5bWxpbms7CisgICBvdGhlciBlcnJvcnMgKHN1Y2ggYXMgcGVybWlzc2lvbiBlcnJvcnMpIGFyZSBwcm9wYWdhdGVkLgorCisKKy4uIG1ldGhvZDo6IFBhdGguaXRlcmRpcigpCisKKyAgIFdoZW4gdGhlIHBhdGggcG9pbnRzIHRvIGEgZGlyZWN0b3J5LCB5aWVsZCBwYXRoIG9iamVjdHMgb2YgdGhlIGRpcmVjdG9yeQorICAgY29udGVudHM6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ2RvY3MnKQorICAgICAgPj4+IGZvciBjaGlsZCBpbiBwLml0ZXJkaXIoKTogY2hpbGQKKyAgICAgIC4uLgorICAgICAgUG9zaXhQYXRoKCdkb2NzL2NvbmYucHknKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL190ZW1wbGF0ZXMnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL21ha2UuYmF0JykKKyAgICAgIFBvc2l4UGF0aCgnZG9jcy9pbmRleC5yc3QnKQorICAgICAgUG9zaXhQYXRoKCdkb2NzL19idWlsZCcpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvX3N0YXRpYycpCisgICAgICBQb3NpeFBhdGgoJ2RvY3MvTWFrZWZpbGUnKQorCisuLiBtZXRob2Q6OiBQYXRoLmxjaG1vZChtb2RlKQorCisgICBMaWtlIDptZXRoOmBQYXRoLmNobW9kYCBidXQsIGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWJvbGljIGxpbmssIHRoZQorICAgc3ltYm9saWMgbGluaydzIG1vZGUgaXMgY2hhbmdlZCByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisKKworLi4gbWV0aG9kOjogUGF0aC5sc3RhdCgpCisKKyAgIExpa2UgOm1ldGg6YFBhdGguc3RhdGAgYnV0LCBpZiB0aGUgcGF0aCBwb2ludHMgdG8gYSBzeW1ib2xpYyBsaW5rLCByZXR1cm4KKyAgIHRoZSBzeW1ib2xpYyBsaW5rJ3MgaW5mb3JtYXRpb24gcmF0aGVyIHRoYW4gaXRzIHRhcmdldCdzLgorCisKKy4uIG1ldGhvZDo6IFBhdGgubWtkaXIobW9kZT0wbzc3NywgcGFyZW50cz1GYWxzZSkKKworICAgQ3JlYXRlIGEgbmV3IGRpcmVjdG9yeSBhdCB0aGlzIGdpdmVuIHBhdGguICBJZiAqbW9kZSogaXMgZ2l2ZW4sIGl0IGlzCisgICBjb21iaW5lZCB3aXRoIHRoZSBwcm9jZXNzJyBgYHVtYXNrYGAgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG1vZGUKKyAgIGFuZCBhY2Nlc3MgZmxhZ3MuICBJZiB0aGUgcGF0aCBhbHJlYWR5IGV4aXN0cywgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYAorICAgaXMgcmFpc2VkLgorCisgICBJZiAqcGFyZW50cyogaXMgdHJ1ZSwgYW55IG1pc3NpbmcgcGFyZW50cyBvZiB0aGlzIHBhdGggYXJlIGNyZWF0ZWQKKyAgIGFzIG5lZWRlZDsgdGhleSBhcmUgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zIHdpdGhvdXQgdGFraW5nCisgICAqbW9kZSogaW50byBhY2NvdW50IChtaW1pY2tpbmcgdGhlIFBPU0lYIGBgbWtkaXIgLXBgYCBjb21tYW5kKS4KKworICAgSWYgKnBhcmVudHMqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCksIGEgbWlzc2luZyBwYXJlbnQgcmFpc2VzCisgICA6ZXhjOmBGaWxlTm90Rm91bmRFcnJvcmAuCisKKworLi4gbWV0aG9kOjogUGF0aC5vcGVuKG1vZGU9J3InLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpCisKKyAgIE9wZW4gdGhlIGZpbGUgcG9pbnRlZCB0byBieSB0aGUgcGF0aCwgbGlrZSB0aGUgYnVpbHQtaW4gOmZ1bmM6YG9wZW5gCisgICBmdW5jdGlvbiBkb2VzOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdzZXR1cC5weScpCisgICAgICA+Pj4gd2l0aCBwLm9wZW4oKSBhcyBmOgorICAgICAgLi4uICAgICBmLnJlYWRsaW5lKCkKKyAgICAgIC4uLgorICAgICAgJyMhL3Vzci9iaW4vZW52IHB5dGhvbjNcbicKKworCisuLiBtZXRob2Q6OiBQYXRoLm93bmVyKCkKKworICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB1c2VyIG93bmluZyB0aGUgZmlsZS4gIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQKKyAgIGlmIHRoZSBmaWxlJ3MgdWlkIGlzbid0IGZvdW5kIGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UuCisKKworLi4gbWV0aG9kOjogUGF0aC5yZW5hbWUodGFyZ2V0KQorCisgICBSZW5hbWUgdGhpcyBmaWxlIG9yIGRpcmVjdG9yeSB0byB0aGUgZ2l2ZW4gKnRhcmdldCouICAqdGFyZ2V0KiBjYW4gYmUKKyAgIGVpdGhlciBhIHN0cmluZyBvciBhbm90aGVyIHBhdGggb2JqZWN0OjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdmb28nKQorICAgICAgPj4+IHAub3BlbigndycpLndyaXRlKCdzb21lIHRleHQnKQorICAgICAgOQorICAgICAgPj4+IHRhcmdldCA9IFBhdGgoJ2JhcicpCisgICAgICA+Pj4gcC5yZW5hbWUodGFyZ2V0KQorICAgICAgPj4+IHRhcmdldC5vcGVuKCkucmVhZCgpCisgICAgICAnc29tZSB0ZXh0JworCisKKy4uIG1ldGhvZDo6IFBhdGgucmVwbGFjZSh0YXJnZXQpCisKKyAgIFJlbmFtZSB0aGlzIGZpbGUgb3IgZGlyZWN0b3J5IHRvIHRoZSBnaXZlbiAqdGFyZ2V0Ki4gIElmICp0YXJnZXQqIHBvaW50cworICAgdG8gYW4gZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnksIGl0IHdpbGwgYmUgdW5jb25kaXRpb25hbGx5IHJlcGxhY2VkLgorCisKKy4uIG1ldGhvZDo6IFBhdGgucmVzb2x2ZSgpCisKKyAgIE1ha2UgdGhlIHBhdGggYWJzb2x1dGUsIHJlc29sdmluZyBhbnkgc3ltbGlua3MuICBBIG5ldyBwYXRoIG9iamVjdCBpcworICAgcmV0dXJuZWQ6OgorCisgICAgICA+Pj4gcCA9IFBhdGgoKQorICAgICAgPj4+IHAKKyAgICAgIFBvc2l4UGF0aCgnLicpCisgICAgICA+Pj4gcC5yZXNvbHZlKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliJykKKworICAgYCIuLiJgIGNvbXBvbmVudHMgYXJlIGFsc28gZWxpbWluYXRlZCAodGhpcyBpcyB0aGUgb25seSBtZXRob2QgdG8gZG8gc28pOjoKKworICAgICAgPj4+IHAgPSBQYXRoKCdkb2NzLy4uL3NldHVwLnB5JykKKyAgICAgID4+PiBwLnJlc29sdmUoKQorICAgICAgUG9zaXhQYXRoKCcvaG9tZS9hbnRvaW5lL3BhdGhsaWIvc2V0dXAucHknKQorCisgICBJZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0LCA6ZXhjOmBGaWxlTm90Rm91bmRFcnJvcmAgaXMgcmFpc2VkLiAgSWYgYW4KKyAgIGluZmluaXRlIGxvb3AgaXMgZW5jb3VudGVyZWQgYWxvbmcgdGhlIHJlc29sdXRpb24gcGF0aCwKKyAgIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLgorCisKKy4uIG1ldGhvZDo6IFBhdGgucmdsb2IocGF0dGVybikKKworICAgVGhpcyBpcyBsaWtlIGNhbGxpbmcgOm1ldGg6YGdsb2JgIHdpdGggImBgKipgYCIgYWRkZWQgaW4gZnJvbnQgb2YgdGhlCisgICBnaXZlbiAqcGF0dGVybio6CisKKyAgICAgID4+PiBzb3J0ZWQoUGF0aCgpLnJnbG9iKCIqLnB5IikpCisgICAgICBbUG9zaXhQYXRoKCdidWlsZC9saWIvcGF0aGxpYi5weScpLAorICAgICAgIFBvc2l4UGF0aCgnZG9jcy9jb25mLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdwYXRobGliLnB5JyksCisgICAgICAgUG9zaXhQYXRoKCdzZXR1cC5weScpLAorICAgICAgIFBvc2l4UGF0aCgndGVzdF9wYXRobGliLnB5JyldCisKKworLi4gbWV0aG9kOjogUGF0aC5ybWRpcigpCisKKyAgIFJlbW92ZSB0aGlzIGRpcmVjdG9yeS4gIFRoZSBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eS4KKworCisuLiBtZXRob2Q6OiBQYXRoLnN5bWxpbmtfdG8odGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlKQorCisgICBNYWtlIHRoaXMgcGF0aCBhIHN5bWJvbGljIGxpbmsgdG8gKnRhcmdldCouICBVbmRlciBXaW5kb3dzLAorICAgKnRhcmdldF9pc19kaXJlY3RvcnkqIG11c3QgYmUgdHJ1ZSAoZGVmYXVsdCBgYEZhbHNlYGApIGlmIHRoZSBsaW5rJ3MgdGFyZ2V0CisgICBpcyBhIGRpcmVjdG9yeS4gIFVuZGVyIFBPU0lYLCAqdGFyZ2V0X2lzX2RpcmVjdG9yeSoncyB2YWx1ZSBpcyBpZ25vcmVkLgorCisgICAgICA+Pj4gcCA9IFBhdGgoJ215bGluaycpCisgICAgICA+Pj4gcC5zeW1saW5rX3RvKCdzZXR1cC5weScpCisgICAgICA+Pj4gcC5yZXNvbHZlKCkKKyAgICAgIFBvc2l4UGF0aCgnL2hvbWUvYW50b2luZS9wYXRobGliL3NldHVwLnB5JykKKyAgICAgID4+PiBwLnN0YXQoKS5zdF9zaXplCisgICAgICA5NTYKKyAgICAgID4+PiBwLmxzdGF0KCkuc3Rfc2l6ZQorICAgICAgOAorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSBvcmRlciBvZiBhcmd1bWVudHMgKGxpbmssIHRhcmdldCkgaXMgdGhlIHJldmVyc2UKKyAgICAgIG9mIDpmdW5jOmBvcy5zeW1saW5rYCdzLgorCisKKy4uIG1ldGhvZDo6IFBhdGgudG91Y2gobW9kZT0wbzc3NywgZXhpc3Rfb2s9VHJ1ZSkKKworICAgQ3JlYXRlIGEgZmlsZSBhdCB0aGlzIGdpdmVuIHBhdGguICBJZiAqbW9kZSogaXMgZ2l2ZW4sIGl0IGlzIGNvbWJpbmVkCisgICB3aXRoIHRoZSBwcm9jZXNzJyBgYHVtYXNrYGAgdmFsdWUgdG8gZGV0ZXJtaW5lIHRoZSBmaWxlIG1vZGUgYW5kIGFjY2VzcworICAgZmxhZ3MuICBJZiB0aGUgZmlsZSBhbHJlYWR5IGV4aXN0cywgdGhlIGZ1bmN0aW9uIHN1Y2NlZWRzIGlmICpleGlzdF9vayoKKyAgIGlzIHRydWUgKGFuZCBpdHMgbW9kaWZpY2F0aW9uIHRpbWUgaXMgdXBkYXRlZCB0byB0aGUgY3VycmVudCB0aW1lKSwKKyAgIG90aGVyd2lzZSA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIGlzIHJhaXNlZC4KKworCisuLiBtZXRob2Q6OiBQYXRoLnVubGluaygpCisKKyAgIFJlbW92ZSB0aGlzIGZpbGUgb3Igc3ltYm9saWMgbGluay4gIElmIHRoZSBwYXRoIHBvaW50cyB0byBhIGRpcmVjdG9yeSwKKyAgIHVzZSA6ZnVuYzpgUGF0aC5ybWRpcmAgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BkYi5yc3QgYi9Eb2MvbGlicmFyeS9wZGIucnN0CmluZGV4IGY0ZTM3YWMuLmMxNDRkYjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BkYi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcGRiLnJzdApAQCAtNiw2ICs2LDkgQEAKIC4uIG1vZHVsZTo6IHBkYgogICAgOnN5bm9wc2lzOiBUaGUgUHl0aG9uIGRlYnVnZ2VyIGZvciBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcnMuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3BkYi5weWAKKworLS0tLS0tLS0tLS0tLS0KIAogLi4gaW5kZXg6OiBzaW5nbGU6IGRlYnVnZ2luZwogCkBAIC00MSw3ICs0NCw3IEBACiAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgVGFiLWNvbXBsZXRpb24gdmlhIHRoZSA6bW9kOmByZWFkbGluZWAgbW9kdWxlIGlzIGF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kCiAgICBjb21tYW5kIGFyZ3VtZW50cywgZS5nLiB0aGUgY3VycmVudCBnbG9iYWwgYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzCi0gICBhcmd1bWVudHMgb2YgdGhlIGBgcHJpbnRgYCBjb21tYW5kLgorICAgYXJndW1lbnRzIG9mIHRoZSBgYHBgYCBjb21tYW5kLgogCiA6ZmlsZTpgcGRiLnB5YCBjYW4gYWxzbyBiZSBpbnZva2VkIGFzIGEgc2NyaXB0IHRvIGRlYnVnIG90aGVyIHNjcmlwdHMuICBGb3IKIGV4YW1wbGU6OgpAQCAtMTUzLDggKzE1Niw4IEBACiAgICB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLiBbMV1fCiAKICAgIEJ5IGRlZmF1bHQsIFBkYiBzZXRzIGEgaGFuZGxlciBmb3IgdGhlIFNJR0lOVCBzaWduYWwgKHdoaWNoIGlzIHNlbnQgd2hlbiB0aGUKLSAgIHVzZXIgcHJlc3NlcyBDdHJsLUMgb24gdGhlIGNvbnNvbGUpIHdoZW4geW91IGdpdmUgYSBgYGNvbnRpbnVlYGAgY29tbWFuZC4KLSAgIFRoaXMgYWxsb3dzIHlvdSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlciBhZ2FpbiBieSBwcmVzc2luZyBDdHJsLUMuICBJZiB5b3UKKyAgIHVzZXIgcHJlc3NlcyA6a2JkOmBDdHJsLUNgIG9uIHRoZSBjb25zb2xlKSB3aGVuIHlvdSBnaXZlIGEgYGBjb250aW51ZWBgIGNvbW1hbmQuCisgICBUaGlzIGFsbG93cyB5b3UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIgYWdhaW4gYnkgcHJlc3NpbmcgOmtiZDpgQ3RybC1DYC4gIElmIHlvdQogICAgd2FudCBQZGIgbm90IHRvIHRvdWNoIHRoZSBTSUdJTlQgaGFuZGxlciwgc2V0ICpub3NpZ2ludCogdG90IHRydWUuCiAKICAgIEV4YW1wbGUgY2FsbCB0byBlbmFibGUgdHJhY2luZyB3aXRoICpza2lwKjo6CkBAIC0zMDksNyArMzEyLDcgQEAKICAgIGBgZW5kYGAgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTo6CiAKICAgICAgIChQZGIpIGNvbW1hbmRzIDEKLSAgICAgIChjb20pIHByaW50IHNvbWVfdmFyaWFibGUKKyAgICAgIChjb20pIHAgc29tZV92YXJpYWJsZQogICAgICAgKGNvbSkgZW5kCiAgICAgICAoUGRiKQogCkBAIC00MDMsMTMgKzQwNiwxOSBAQAogCiAgICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi4KIAotLi4gcGRiY29tbWFuZDo6IHAocmludCkgZXhwcmVzc2lvbgorLi4gcGRiY29tbWFuZDo6IHAgZXhwcmVzc2lvbgogCiAgICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIGluIHRoZSBjdXJyZW50IGNvbnRleHQgYW5kIHByaW50IGl0cyB2YWx1ZS4KIAorICAgLi4gbm90ZTo6CisKKyAgICAgIGBgcHJpbnQoKWBgIGNhbiBhbHNvIGJlIHVzZWQsIGJ1dCBpcyBub3QgYSBkZWJ1Z2dlciBjb21tYW5kIC0tLSB0aGlzIGV4ZWN1dGVzIHRoZQorICAgICAgUHl0aG9uIDpmdW5jOmBwcmludGAgZnVuY3Rpb24uCisKKwogLi4gcGRiY29tbWFuZDo6IHBwIGV4cHJlc3Npb24KIAotICAgTGlrZSB0aGUgOnBkYmNtZDpgcHJpbnRgIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMKKyAgIExpa2UgdGhlIDpwZGJjbWQ6YHBgIGNvbW1hbmQsIGV4Y2VwdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMKICAgIHByZXR0eS1wcmludGVkIHVzaW5nIHRoZSA6bW9kOmBwcHJpbnRgIG1vZHVsZS4KIAogLi4gcGRiY29tbWFuZDo6IHdoYXRpcyBleHByZXNzaW9uCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0IGIvRG9jL2xpYnJhcnkvcGlja2xlLnJzdAppbmRleCAyNzNmYjM0Li4zMzA1MTk1IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9waWNrbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BpY2tsZS5yc3QKQEAgLTI2LDkgKzI2LDkgQEAKIAogLi4gd2FybmluZzo6CiAKLSAgIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBpcyBub3QgaW50ZW5kZWQgdG8gYmUgc2VjdXJlIGFnYWluc3QgZXJyb25lb3VzIG9yCi0gICBtYWxpY2lvdXNseSBjb25zdHJ1Y3RlZCBkYXRhLiAgTmV2ZXIgdW5waWNrbGUgZGF0YSByZWNlaXZlZCBmcm9tIGFuIHVudHJ1c3RlZAotICAgb3IgdW5hdXRoZW50aWNhdGVkIHNvdXJjZS4KKyAgIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBpcyBub3Qgc2VjdXJlIGFnYWluc3QgZXJyb25lb3VzIG9yIG1hbGljaW91c2x5CisgICBjb25zdHJ1Y3RlZCBkYXRhLiAgTmV2ZXIgdW5waWNrbGUgZGF0YSByZWNlaXZlZCBmcm9tIGFuIHVudHJ1c3RlZCBvcgorICAgdW5hdXRoZW50aWNhdGVkIHNvdXJjZS4KIAogCiBSZWxhdGlvbnNoaXAgdG8gb3RoZXIgUHl0aG9uIG1vZHVsZXMKQEAgLTk0LDYgKzk0LDkgQEAKICAgIFRoZSA6bW9kOmBqc29uYCBtb2R1bGU6IGEgc3RhbmRhcmQgbGlicmFyeSBtb2R1bGUgYWxsb3dpbmcgSlNPTgogICAgc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgogCisKKy4uIF9waWNrbGUtcHJvdG9jb2xzOgorCiBEYXRhIHN0cmVhbSBmb3JtYXQKIC0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMTMsNyArMTE2LDkgQEAKIGdlbmVyYXRlZCBieSA6bW9kOmBwaWNrbGVgLiAgOm1vZDpgcGlja2xldG9vbHNgIHNvdXJjZSBjb2RlIGhhcyBleHRlbnNpdmUKIGNvbW1lbnRzIGFib3V0IG9wY29kZXMgdXNlZCBieSBwaWNrbGUgcHJvdG9jb2xzLgogCi1UaGVyZSBhcmUgY3VycmVudGx5IDQgZGlmZmVyZW50IHByb3RvY29scyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcGlja2xpbmcuCitUaGVyZSBhcmUgY3VycmVudGx5IDUgZGlmZmVyZW50IHByb3RvY29scyB3aGljaCBjYW4gYmUgdXNlZCBmb3IgcGlja2xpbmcuCitUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZAordG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgogCiAqIFByb3RvY29sIHZlcnNpb24gMCBpcyB0aGUgb3JpZ2luYWwgImh1bWFuLXJlYWRhYmxlIiBwcm90b2NvbCBhbmQgaXMKICAgYmFja3dhcmRzIGNvbXBhdGlibGUgd2l0aCBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbi4KQEAgLTEyNSwxMCArMTMwLDE1IEBACiAgIGVmZmljaWVudCBwaWNrbGluZyBvZiA6dGVybTpgbmV3LXN0eWxlIGNsYXNzYFxlcy4gIFJlZmVyIHRvIDpwZXA6YDMwN2AgZm9yCiAgIGluZm9ybWF0aW9uIGFib3V0IGltcHJvdmVtZW50cyBicm91Z2h0IGJ5IHByb3RvY29sIDIuCiAKLSogUHJvdG9jb2wgdmVyc2lvbiAzIHdhcyBhZGRlZCBpbiBQeXRob24gMy4gIEl0IGhhcyBleHBsaWNpdCBzdXBwb3J0IGZvcgorKiBQcm90b2NvbCB2ZXJzaW9uIDMgd2FzIGFkZGVkIGluIFB5dGhvbiAzLjAuICBJdCBoYXMgZXhwbGljaXQgc3VwcG9ydCBmb3IKICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0cyBhbmQgY2Fubm90IGJlIHVucGlja2xlZCBieSBQeXRob24gMi54LiAgVGhpcyBpcwotICB0aGUgZGVmYXVsdCBhcyB3ZWxsIGFzIHRoZSBjdXJyZW50IHJlY29tbWVuZGVkIHByb3RvY29sOyB1c2UgaXQgd2hlbmV2ZXIKLSAgcG9zc2libGUuCisgIHRoZSBkZWZhdWx0IHByb3RvY29sLCBhbmQgdGhlIHJlY29tbWVuZGVkIHByb3RvY29sIHdoZW4gY29tcGF0aWJpbGl0eSB3aXRoCisgIG90aGVyIFB5dGhvbiAzIHZlcnNpb25zIGlzIHJlcXVpcmVkLgorCisqIFByb3RvY29sIHZlcnNpb24gNCB3YXMgYWRkZWQgaW4gUHl0aG9uIDMuNC4gIEl0IGFkZHMgc3VwcG9ydCBmb3IgdmVyeSBsYXJnZQorICBvYmplY3RzLCBwaWNrbGluZyBtb3JlIGtpbmRzIG9mIG9iamVjdHMsIGFuZCBzb21lIGRhdGEgZm9ybWF0CisgIG9wdGltaXphdGlvbnMuICBSZWZlciB0byA6cGVwOmAzMTU0YCBmb3IgaW5mb3JtYXRpb24gYWJvdXQgaW1wcm92ZW1lbnRzCisgIGJyb3VnaHQgYnkgcHJvdG9jb2wgNC4KIAogLi4gbm90ZTo6CiAgICBTZXJpYWxpemF0aW9uIGlzIGEgbW9yZSBwcmltaXRpdmUgbm90aW9uIHRoYW4gcGVyc2lzdGVuY2U7IGFsdGhvdWdoCkBAIC0xNTYsMTMgKzE2NiwxNiBAQAogCiAuLiBkYXRhOjogSElHSEVTVF9QUk9UT0NPTAogCi0gICBUaGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uIGF2YWlsYWJsZS4gIFRoaXMgdmFsdWUgY2FuIGJlIHBhc3NlZCBhcyBhCi0gICAqcHJvdG9jb2wqIHZhbHVlLgorICAgQW4gaW50ZWdlciwgdGhlIGhpZ2hlc3QgOnJlZjpgcHJvdG9jb2wgdmVyc2lvbiA8cGlja2xlLXByb3RvY29scz5gCisgICBhdmFpbGFibGUuICBUaGlzIHZhbHVlIGNhbiBiZSBwYXNzZWQgYXMgYSAqcHJvdG9jb2wqIHZhbHVlIHRvIGZ1bmN0aW9ucworICAgOmZ1bmM6YGR1bXBgIGFuZCA6ZnVuYzpgZHVtcHNgIGFzIHdlbGwgYXMgdGhlIDpjbGFzczpgUGlja2xlcmAKKyAgIGNvbnN0cnVjdG9yLgogCiAuLiBkYXRhOjogREVGQVVMVF9QUk9UT0NPTAogCi0gICBUaGUgZGVmYXVsdCBwcm90b2NvbCB1c2VkIGZvciBwaWNrbGluZy4gIE1heSBiZSBsZXNzIHRoYW4gSElHSEVTVF9QUk9UT0NPTC4KLSAgIEN1cnJlbnRseSB0aGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzLCBhIG5ldyBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KKyAgIEFuIGludGVnZXIsIHRoZSBkZWZhdWx0IDpyZWY6YHByb3RvY29sIHZlcnNpb24gPHBpY2tsZS1wcm90b2NvbHM+YCB1c2VkCisgICBmb3IgcGlja2xpbmcuICBNYXkgYmUgbGVzcyB0aGFuIDpkYXRhOmBISUdIRVNUX1BST1RPQ09MYC4gIEN1cnJlbnRseSB0aGUKKyAgIGRlZmF1bHQgcHJvdG9jb2wgaXMgMywgYSBuZXcgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLgogCiAKIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byBtYWtlIHRoZSBwaWNrbGluZwpAQCAtMTczLDc4ICsxODYsNjggQEAKICAgIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiAqb2JqKiB0byB0aGUgb3BlbiA6dGVybTpgZmlsZSBvYmplY3RgICpmaWxlKi4KICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKWBgLgogCi0gICBUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sOwotICAgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGEKLSAgIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuMC4KLQotICAgU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uCi0gICBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlIHZlcnNpb24gb2YKLSAgIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLgorICAgVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQsIGFuIGludGVnZXIsIHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZQorICAgdGhlIGdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwIHRvIDpkYXRhOmBISUdIRVNUX1BST1RPQ09MYC4KKyAgIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIDpkYXRhOmBERUZBVUxUX1BST1RPQ09MYC4gIElmIGEgbmVnYXRpdmUKKyAgIG51bWJlciBpcyBzcGVjaWZpZWQsIDpkYXRhOmBISUdIRVNUX1BST1RPQ09MYCBpcyBzZWxlY3RlZC4KIAogICAgVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUgYnl0ZXMKLSAgIGFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IgYmluYXJ5IHdyaXRpbmcsIGEKKyAgIGFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IgYmluYXJ5IHdyaXRpbmcsIGFuCiAgICA6Y2xhc3M6YGlvLkJ5dGVzSU9gIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMKICAgIGludGVyZmFjZS4KIAogICAgSWYgKmZpeF9pbXBvcnRzKiBpcyB0cnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAotICAgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KKyAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsIHNvCisgICB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KIAogLi4gZnVuY3Rpb246OiBkdW1wcyhvYmosIHByb3RvY29sPU5vbmUsIFwqLCBmaXhfaW1wb3J0cz1UcnVlKQogCi0gICBSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIDpjbGFzczpgYnl0ZXNgCi0gICBvYmplY3QsIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byBhIGZpbGUuCisgICBSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCwKKyAgIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byBhIGZpbGUuCiAKLSAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7Ci0gICBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYQotICAgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgotCi0gICBTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24KLSAgIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZgotICAgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCi0KLSAgIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvCi0gICBtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCwKLSAgIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguCisgICBBcmd1bWVudHMgKnByb3RvY29sKiBhbmQgKmZpeF9pbXBvcnRzKiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KKyAgIDpmdW5jOmBkdW1wYC4KIAogLi4gZnVuY3Rpb246OiBsb2FkKGZpbGUsIFwqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpCiAKLSAgIFJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIDp0ZXJtOmBmaWxlIG9iamVjdGAgKmZpbGUqCi0gICBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkgc3BlY2lmaWVkIHRoZXJlaW4uICBUaGlzIGlzCi0gICBlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLgorICAgUmVhZCBhIHBpY2tsZWQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG9wZW4gOnRlcm06YGZpbGUgb2JqZWN0YAorICAgKmZpbGUqIGFuZCByZXR1cm4gdGhlIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpbi4KKyAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYC4KIAotICAgVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbyBubyBwcm90b2NvbAotICAgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3QncyByZXByZXNlbnRhdGlvbiBhcmUKLSAgIGlnbm9yZWQuCisgICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vCisgICBwcm90b2NvbCBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzCisgICByZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC4KIAogICAgVGhlIGFyZ3VtZW50ICpmaWxlKiBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzIGFuCiAgICBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzIG5vIGFyZ3VtZW50cy4gIEJvdGgKLSAgIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhbiBvbi1kaXNrIGZpbGUgb3BlbmVkCi0gICBmb3IgYmluYXJ5IHJlYWRpbmcsIGEgOmNsYXNzOmBpby5CeXRlc0lPYCBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0CisgICBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IKKyAgIGJpbmFyeSByZWFkaW5nLCBhbiA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QKICAgIHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiwKICAgIHdoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZAotICAgYnkgUHl0aG9uIDIueC4gIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCi0gICBQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlICplbmNvZGluZyogYW5kCisgICBieSBQeXRob24gMi4gIElmICpmaXhfaW1wb3J0cyogaXMgdHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvIG1hcCB0aGUgb2xkCisgICBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGUgKmVuY29kaW5nKiBhbmQKICAgICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbgotICAgMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuCisgICAyOyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4KKyAgIGJlICdieXRlcycgdG8gcmVhZCB0aGVzZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCiAKIC4uIGZ1bmN0aW9uOjogbG9hZHMoYnl0ZXNfb2JqZWN0LCBcKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKQogCiAgICBSZWFkIGEgcGlja2xlZCBvYmplY3QgaGllcmFyY2h5IGZyb20gYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QgYW5kIHJldHVybiB0aGUKLSAgIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpbgorICAgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZCB0aGVyZWluLgogCi0gICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vIHByb3RvY29sCi0gICBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZQotICAgaWdub3JlZC4KKyAgIFRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KKyAgIHByb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKKyAgIHJlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgogCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCiAgICB3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWQKLSAgIGJ5IFB5dGhvbiAyLnguICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAotICAgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSAqZW5jb2RpbmcqIGFuZAorICAgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAorICAgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlICplbmNvZGluZyogYW5kCiAgICAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KLSAgIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorICAgMjsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuCisgICBiZSAnYnl0ZXMnIHRvIHJlYWQgdGhlc2UgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLgogCiAKIFRoZSA6bW9kOmBwaWNrbGVgIG1vZHVsZSBkZWZpbmVzIHRocmVlIGV4Y2VwdGlvbnM6CkBAIC0yNzksMjEgKzI4MiwxOSBAQAogCiAgICBUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCiAKLSAgIFRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7Ci0gICBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHQgcHJvdG9jb2wgaXMgMzsgYQotICAgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLgotCi0gICBTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24KLSAgIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZgotICAgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCisgICBUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCwgYW4gaW50ZWdlciwgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlCisgICB0aGUgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAgdG8gOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgLgorICAgSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgaXMgOmRhdGE6YERFRkFVTFRfUFJPVE9DT0xgLiAgSWYgYSBuZWdhdGl2ZQorICAgbnVtYmVyIGlzIHNwZWNpZmllZCwgOmRhdGE6YEhJR0hFU1RfUFJPVE9DT0xgIGlzIHNlbGVjdGVkLgogCiAgICBUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZSBieXRlcwotICAgYXJndW1lbnQuICBJdCBjYW4gdGh1cyBiZSBhbiBvbi1kaXNrIGZpbGUgb3BlbmVkIGZvciBiaW5hcnkgd3JpdGluZywgYQotICAgOmNsYXNzOmBpby5CeXRlc0lPYCBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KKyAgIGFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYW4gb24tZGlzayBmaWxlIG9wZW5lZCBmb3IgYmluYXJ5IHdyaXRpbmcsIGFuCisgICA6Y2xhc3M6YGlvLkJ5dGVzSU9gIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMKKyAgIGludGVyZmFjZS4KIAogICAgSWYgKmZpeF9pbXBvcnRzKiBpcyB0cnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LAotICAgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KKyAgIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIsIHNvCisgICB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KIAogICAgLi4gbWV0aG9kOjogZHVtcChvYmopCiAKQEAgLTM1NSwxNiArMzU2LDE3IEBACiAKICAgIFRoZSBhcmd1bWVudCAqZmlsZSogbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcyBhbgogICAgaW50ZWdlciBhcmd1bWVudCwgYW5kIGEgcmVhZGxpbmUoKSBtZXRob2QgdGhhdCByZXF1aXJlcyBubyBhcmd1bWVudHMuICBCb3RoCi0gICBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYW4gb24tZGlzayBmaWxlIG9iamVjdCBvcGVuZWQKLSAgIGZvciBiaW5hcnkgcmVhZGluZywgYSA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QKLSAgIHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCisgICBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYW4gb24tZGlzayBmaWxlIG9iamVjdAorICAgb3BlbmVkIGZvciBiaW5hcnkgcmVhZGluZywgYW4gOmNsYXNzOmBpby5CeXRlc0lPYCBvYmplY3QsIG9yIGFueSBvdGhlcgorICAgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLgogCiAgICBPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosCiAgICB3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWQKLSAgIGJ5IFB5dGhvbiAyLnguICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAotICAgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZSAqZW5jb2RpbmcqIGFuZAorICAgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIHRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZAorICAgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlICplbmNvZGluZyogYW5kCiAgICAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24KLSAgIDIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LgorICAgMjsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuCisgICBiZSAnYnl0ZXMnIHRvIHJlYWQgdGhlc2Ugw584LWJpdCBzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCiAKICAgIC4uIG1ldGhvZDo6IGxvYWQoKQogCkBAIC00MDksNyArNDExLDggQEAKIAogKiB0dXBsZXMsIGxpc3RzLCBzZXRzLCBhbmQgZGljdGlvbmFyaWVzIGNvbnRhaW5pbmcgb25seSBwaWNrbGFibGUgb2JqZWN0cwogCi0qIGZ1bmN0aW9ucyBkZWZpbmVkIGF0IHRoZSB0b3AgbGV2ZWwgb2YgYSBtb2R1bGUKKyogZnVuY3Rpb25zIGRlZmluZWQgYXQgdGhlIHRvcCBsZXZlbCBvZiBhIG1vZHVsZSAodXNpbmcgOmtleXdvcmQ6YGRlZmAsIG5vdAorICA6a2V5d29yZDpgbGFtYmRhYCkKIAogKiBidWlsdC1pbiBmdW5jdGlvbnMgZGVmaW5lZCBhdCB0aGUgdG9wIGxldmVsIG9mIGEgbW9kdWxlCiAKQEAgLTQyNyw3ICs0MzAsNyBAQAogOmZ1bmM6YHN5cy5zZXRyZWN1cnNpb25saW1pdGAuCiAKIE5vdGUgdGhhdCBmdW5jdGlvbnMgKGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQpIGFyZSBwaWNrbGVkIGJ5ICJmdWxseSBxdWFsaWZpZWQiCi1uYW1lIHJlZmVyZW5jZSwgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZWFucyB0aGF0IG9ubHkgdGhlIGZ1bmN0aW9uIG5hbWUgaXMKK25hbWUgcmVmZXJlbmNlLCBub3QgYnkgdmFsdWUuIFsjXV8gIFRoaXMgbWVhbnMgdGhhdCBvbmx5IHRoZSBmdW5jdGlvbiBuYW1lIGlzCiBwaWNrbGVkLCBhbG9uZyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQgaW4uICBOZWl0aGVyCiB0aGUgZnVuY3Rpb24ncyBjb2RlLCBub3IgYW55IG9mIGl0cyBmdW5jdGlvbiBhdHRyaWJ1dGVzIGFyZSBwaWNrbGVkLiAgVGh1cyB0aGUKIGRlZmluaW5nIG1vZHVsZSBtdXN0IGJlIGltcG9ydGFibGUgaW4gdGhlIHVucGlja2xpbmcgZW52aXJvbm1lbnQsIGFuZCB0aGUgbW9kdWxlCkBAIC00ODMsMTIgKzQ4NiwyOSBAQAogQ2xhc3NlcyBjYW4gYWx0ZXIgdGhlIGRlZmF1bHQgYmVoYXZpb3VyIGJ5IHByb3ZpZGluZyBvbmUgb3Igc2V2ZXJhbCBzcGVjaWFsCiBtZXRob2RzOgogCisuLiBtZXRob2Q6OiBvYmplY3QuX19nZXRuZXdhcmdzX2V4X18oKQorCisgICBJbiBwcm90b2NvbHMgNCBhbmQgbmV3ZXIsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnRzIHRoZQorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCBtZXRob2QgY2FuIGRpY3RhdGUgdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlCisgICA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24gdW5waWNrbGluZy4gIFRoZSBtZXRob2QgbXVzdCByZXR1cm4gYSBwYWlyCisgICBgYChhcmdzLCBrd2FyZ3MpYGAgd2hlcmUgKmFyZ3MqIGlzIGEgdHVwbGUgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMKKyAgIGFuZCAqa3dhcmdzKiBhIGRpY3Rpb25hcnkgb2YgbmFtZWQgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RpbmcgdGhlCisgICBvYmplY3QuICBUaG9zZSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCB1cG9uCisgICB1bnBpY2tsaW5nLgorCisgICBZb3Ugc2hvdWxkIGltcGxlbWVudCB0aGlzIG1ldGhvZCBpZiB0aGUgOm1ldGg6YF9fbmV3X19gIG1ldGhvZCBvZiB5b3VyCisgICBjbGFzcyByZXF1aXJlcyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzLiAgT3RoZXJ3aXNlLCBpdCBpcyByZWNvbW1lbmRlZCBmb3IKKyAgIGNvbXBhdGliaWxpdHkgdG8gaW1wbGVtZW50IDptZXRoOmBfX2dldG5ld2FyZ3NfX2AuCisKKwogLi4gbWV0aG9kOjogb2JqZWN0Ll9fZ2V0bmV3YXJnc19fKCkKIAotICAgSW4gcHJvdG9jb2wgMiBhbmQgbmV3ZXIsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnRzIHRoZSA6bWV0aDpgX19nZXRuZXdhcmdzX19gCi0gICBtZXRob2QgY2FuIGRpY3RhdGUgdGhlIHZhbHVlcyBwYXNzZWQgdG8gdGhlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdXBvbgotICAgdW5waWNrbGluZy4gIFRoaXMgaXMgb2Z0ZW4gbmVlZGVkIGZvciBjbGFzc2VzIHdob3NlIDptZXRoOmBfX25ld19fYCBtZXRob2QKLSAgIHJlcXVpcmVzIGFyZ3VtZW50cy4KKyAgIFRoaXMgbWV0aG9kIHNlcnZlIGEgc2ltaWxhciBwdXJwb3NlIGFzIDptZXRoOmBfX2dldG5ld2FyZ3NfZXhfX2AgYnV0CisgICBmb3IgcHJvdG9jb2xzIDIgYW5kIG5ld2VyLiAgSXQgbXVzdCByZXR1cm4gYSB0dXBsZSBvZiBhcmd1bWVudHMgYGBhcmdzYGAKKyAgIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSA6bWV0aDpgX19uZXdfX2AgbWV0aG9kIHVwb24gdW5waWNrbGluZy4KKworICAgSW4gcHJvdG9jb2xzIDQgYW5kIG5ld2VyLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gIHdpbGwgbm90IGJlIGNhbGxlZCBpZgorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCBpcyBkZWZpbmVkLgogCiAKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2dldHN0YXRlX18oKQpAQCAtNTIwLDEwICs1NDAsMTAgQEAKIAogICAgQXQgdW5waWNrbGluZyB0aW1lLCBzb21lIG1ldGhvZHMgbGlrZSA6bWV0aDpgX19nZXRhdHRyX19gLAogICAgOm1ldGg6YF9fZ2V0YXR0cmlidXRlX19gLCBvciA6bWV0aDpgX19zZXRhdHRyX19gIG1heSBiZSBjYWxsZWQgdXBvbiB0aGUKLSAgIGluc3RhbmNlLiAgSW4gY2FzZSB0aG9zZSBtZXRob2RzIHJlbHkgb24gc29tZSBpbnRlcm5hbCBpbnZhcmlhbnQgYmVpbmcgdHJ1ZSwKLSAgIHRoZSB0eXBlIHNob3VsZCBpbXBsZW1lbnQgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCB0byBlc3RhYmxpc2ggc3VjaCBhbgotICAgaW52YXJpYW50OyBvdGhlcndpc2UsIG5laXRoZXIgOm1ldGg6YF9fbmV3X19gIG5vciA6bWV0aDpgX19pbml0X19gIHdpbGwgYmUKLSAgIGNhbGxlZC4KKyAgIGluc3RhbmNlLiAgSW4gY2FzZSB0aG9zZSBtZXRob2RzIHJlbHkgb24gc29tZSBpbnRlcm5hbCBpbnZhcmlhbnQgYmVpbmcKKyAgIHRydWUsIHRoZSB0eXBlIHNob3VsZCBpbXBsZW1lbnQgOm1ldGg6YF9fZ2V0bmV3YXJnc19fYCBvcgorICAgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCB0byBlc3RhYmxpc2ggc3VjaCBhbiBpbnZhcmlhbnQ7IG90aGVyd2lzZSwKKyAgIG5laXRoZXIgOm1ldGg6YF9fbmV3X19gIG5vciA6bWV0aDpgX19pbml0X19gIHdpbGwgYmUgY2FsbGVkLgogCiAuLiBpbmRleDo6IHBhaXI6IGNvcHk7IHByb3RvY29sCiAKQEAgLTUzNSw3ICs1NTUsNyBAQAogCiBBbHRob3VnaCBwb3dlcmZ1bCwgaW1wbGVtZW50aW5nIDptZXRoOmBfX3JlZHVjZV9fYCBkaXJlY3RseSBpbiB5b3VyIGNsYXNzZXMgaXMKIGVycm9yIHByb25lLiAgRm9yIHRoaXMgcmVhc29uLCBjbGFzcyBkZXNpZ25lcnMgc2hvdWxkIHVzZSB0aGUgaGlnaC1sZXZlbAotaW50ZXJmYWNlIChpLmUuLCA6bWV0aDpgX19nZXRuZXdhcmdzX19gLCA6bWV0aDpgX19nZXRzdGF0ZV9fYCBhbmQKK2ludGVyZmFjZSAoaS5lLiwgOm1ldGg6YF9fZ2V0bmV3YXJnc19leF9fYCwgOm1ldGg6YF9fZ2V0c3RhdGVfX2AgYW5kCiA6bWV0aDpgX19zZXRzdGF0ZV9fYCkgd2hlbmV2ZXIgcG9zc2libGUuICBXZSB3aWxsIHNob3csIGhvd2V2ZXIsIGNhc2VzIHdoZXJlCiB1c2luZyA6bWV0aDpgX19yZWR1Y2VfX2AgaXMgdGhlIG9ubHkgb3B0aW9uIG9yIGxlYWRzIHRvIG1vcmUgZWZmaWNpZW50IHBpY2tsaW5nCiBvciBib3RoLgpAQCAtODgzLDYgKzkwMyw5IEBACiAKIC4uIFsjXSBEb24ndCBjb25mdXNlIHRoaXMgd2l0aCB0aGUgOm1vZDpgbWFyc2hhbGAgbW9kdWxlCiAKKy4uIFsjXSBUaGlzIGlzIHdoeSA6a2V5d29yZDpgbGFtYmRhYCBmdW5jdGlvbnMgY2Fubm90IGJlIHBpY2tsZWQ6ICBhbGwKKyAgICA6a2V5d29yZDpgbGFtYmRhYCBmdW5jdGlvbnMgc2hhcmUgdGhlIHNhbWUgbmFtZTogIGBgPGxhbWJkYT5gYC4KKwogLi4gWyNdIFRoZSBleGNlcHRpb24gcmFpc2VkIHdpbGwgbGlrZWx5IGJlIGFuIDpleGM6YEltcG9ydEVycm9yYCBvciBhbgogICAgOmV4YzpgQXR0cmlidXRlRXJyb3JgIGJ1dCBpdCBjb3VsZCBiZSBzb21ldGhpbmcgZWxzZS4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcGtndXRpbC5yc3QgYi9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdAppbmRleCA3YzRmOTEyLi4xM2VhN2I5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wa2d1dGlsLnJzdApAQCAtNzQsMTUgKzc0LDE3IEBACiAKICAgIFJldHJpZXZlIGEgOnBlcDpgMzAyYCBtb2R1bGUgbG9hZGVyIGZvciB0aGUgZ2l2ZW4gKmZ1bGxuYW1lKi4KIAotICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgYXJvdW5kIDpmdW5jOmBpbXBvcnRsaWIuZmluZF9sb2FkZXJgIHRoYXQKLSAgIHNldHMgdGhlICpwYXRoKiBhcmd1bWVudCBjb3JyZWN0bHkgd2hlbiBzZWFyY2hpbmcgZm9yIHN1Ym1vZHVsZXMsIGFuZAotICAgYWxzbyBlbnN1cmVzIHBhcmVudCBwYWNrYWdlcyAoaWYgYW55KSBhcmUgaW1wb3J0ZWQgYmVmb3JlIHNlYXJjaGluZyBmb3IKLSAgIHN1Ym1vZHVsZXMuCisgICBUaGlzIGlzIGEgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd3JhcHBlciBhcm91bmQKKyAgIDpmdW5jOmBpbXBvcnRsaWIudXRpbC5maW5kX3NwZWNgIHRoYXQgY29udmVydHMgbW9zdCBmYWlsdXJlcyB0bworICAgOmV4YzpgSW1wb3J0RXJyb3JgIGFuZCBvbmx5IHJldHVybnMgdGhlIGxvYWRlciByYXRoZXIgdGhhbiB0aGUgZnVsbAorICAgOmNsYXNzOmBNb2R1bGVTcGVjYC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFVwZGF0ZWQgdG8gYmUgYmFzZWQgZGlyZWN0bHkgb24gOm1vZDpgaW1wb3J0bGliYCByYXRoZXIgdGhhbiByZWx5aW5nCiAgICAgICBvbiB0aGUgcGFja2FnZSBpbnRlcm5hbCBQRVAgMzAyIGltcG9ydCBlbXVsYXRpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBVcGRhdGVkIHRvIGJlIGJhc2VkIG9uIDpwZXA6YDQ1MWAKIAogLi4gZnVuY3Rpb246OiBnZXRfaW1wb3J0ZXIocGF0aF9pdGVtKQogCkBAIC0xMDksMTQgKzExMSwxMyBAQAogICAgbm90IGFscmVhZHkgaW1wb3J0ZWQsIGl0cyBjb250YWluaW5nIHBhY2thZ2UgKGlmIGFueSkgaXMgaW1wb3J0ZWQsIGluIG9yZGVyCiAgICB0byBlc3RhYmxpc2ggdGhlIHBhY2thZ2UgYGBfX3BhdGhfX2BgLgogCi0gICBUaGlzIGZ1bmN0aW9uIHVzZXMgOmZ1bmM6YGl0ZXJfaW1wb3J0ZXJzYCwgYW5kIGlzIHRodXMgc3ViamVjdCB0byB0aGUgc2FtZQotICAgbGltaXRhdGlvbnMgcmVnYXJkaW5nIHBsYXRmb3JtLXNwZWNpZmljIHNwZWNpYWwgaW1wb3J0IGxvY2F0aW9ucyBzdWNoIGFzIHRoZQotICAgV2luZG93cyByZWdpc3RyeS4KLQogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFVwZGF0ZWQgdG8gYmUgYmFzZWQgZGlyZWN0bHkgb24gOm1vZDpgaW1wb3J0bGliYCByYXRoZXIgdGhhbiByZWx5aW5nCiAgICAgICBvbiB0aGUgcGFja2FnZSBpbnRlcm5hbCBQRVAgMzAyIGltcG9ydCBlbXVsYXRpb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBVcGRhdGVkIHRvIGJlIGJhc2VkIG9uIDpwZXA6YDQ1MWAKKwogCiAuLiBmdW5jdGlvbjo6IGl0ZXJfaW1wb3J0ZXJzKGZ1bGxuYW1lPScnKQogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wbGF0Zm9ybS5yc3QgYi9Eb2MvbGlicmFyeS9wbGF0Zm9ybS5yc3QKaW5kZXggZTI3ZjJhZC4uNjZiNjg5MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGxhdGZvcm0ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BsYXRmb3JtLnJzdApAQCAtMTE3LDcgKzExNyw3IEBACiAKIC4uIGZ1bmN0aW9uOjogcHl0aG9uX3ZlcnNpb24oKQogCi0gICBSZXR1cm5zIHRoZSBQeXRob24gdmVyc2lvbiBhcyBzdHJpbmcgYGAnbWFqb3IubWlub3IucGF0Y2hsZXZlbCdgYAorICAgUmV0dXJucyB0aGUgUHl0aG9uIHZlcnNpb24gYXMgc3RyaW5nIGBgJ21ham9yLm1pbm9yLnBhdGNobGV2ZWwnYGAuCiAKICAgIE5vdGUgdGhhdCB1bmxpa2UgdGhlIFB5dGhvbiBgYHN5cy52ZXJzaW9uYGAsIHRoZSByZXR1cm5lZCB2YWx1ZSB3aWxsIGFsd2F5cwogICAgaW5jbHVkZSB0aGUgcGF0Y2hsZXZlbCAoaXQgZGVmYXVsdHMgdG8gMCkuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9wbGlzdGxpYi5yc3QKaW5kZXggYTI2NzM2OC4uMmMxZjNkZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcGxpc3RsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3BsaXN0bGliLnJzdApAQCAtMTYsNjYgKzE2LDE3NCBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gaW50ZXJmYWNlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRoZSAicHJvcGVydHkgbGlzdCIKLVhNTCBmaWxlcyB1c2VkIG1haW5seSBieSBNYWMgT1MgWC4KK2ZpbGVzIHVzZWQgbWFpbmx5IGJ5IE1hYyBPUyBYIGFuZCBzdXBwb3J0cyBib3RoIGJpbmFyeSBhbmQgWE1MIHBsaXN0IGZpbGVzLgogCi1UaGUgcHJvcGVydHkgbGlzdCAoYGAucGxpc3RgYCkgZmlsZSBmb3JtYXQgaXMgYSBzaW1wbGUgWE1MIHBpY2tsZSBzdXBwb3J0aW5nCitUaGUgcHJvcGVydHkgbGlzdCAoYGAucGxpc3RgYCkgZmlsZSBmb3JtYXQgaXMgYSBzaW1wbGUgc2VyaWFsaXphdGlvbiBzdXBwb3J0aW5nCiBiYXNpYyBvYmplY3QgdHlwZXMsIGxpa2UgZGljdGlvbmFyaWVzLCBsaXN0cywgbnVtYmVycyBhbmQgc3RyaW5ncy4gIFVzdWFsbHkgdGhlCiB0b3AgbGV2ZWwgb2JqZWN0IGlzIGEgZGljdGlvbmFyeS4KIAotVG8gd3JpdGUgb3V0IGFuZCB0byBwYXJzZSBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgOmZ1bmM6YHdyaXRlUGxpc3RgIGFuZAotOmZ1bmM6YHJlYWRQbGlzdGAgZnVuY3Rpb25zLgorVG8gd3JpdGUgb3V0IGFuZCB0byBwYXJzZSBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgOmZ1bmM6YGR1bXBgIGFuZAorOmZ1bmM6YGxvYWRgIGZ1bmN0aW9ucy4KIAotVG8gd29yayB3aXRoIHBsaXN0IGRhdGEgaW4gYnl0ZXMgb2JqZWN0cywgdXNlIDpmdW5jOmB3cml0ZVBsaXN0VG9CeXRlc2AKLWFuZCA6ZnVuYzpgcmVhZFBsaXN0RnJvbUJ5dGVzYC4KK1RvIHdvcmsgd2l0aCBwbGlzdCBkYXRhIGluIGJ5dGVzIG9iamVjdHMsIHVzZSA6ZnVuYzpgZHVtcHNgCithbmQgOmZ1bmM6YGxvYWRzYC4KIAogVmFsdWVzIGNhbiBiZSBzdHJpbmdzLCBpbnRlZ2VycywgZmxvYXRzLCBib29sZWFucywgdHVwbGVzLCBsaXN0cywgZGljdGlvbmFyaWVzCi0oYnV0IG9ubHkgd2l0aCBzdHJpbmcga2V5cyksIDpjbGFzczpgRGF0YWAgb3IgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAKLW9iamVjdHMuICBTdHJpbmcgdmFsdWVzIChpbmNsdWRpbmcgZGljdGlvbmFyeSBrZXlzKSBoYXZlIHRvIGJlIHVuaWNvZGUgc3RyaW5ncyAtLQotdGhleSB3aWxsIGJlIHdyaXR0ZW4gb3V0IGFzIFVURi04LgorKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCA6Y2xhc3M6YERhdGFgLCA6Y2xhc3M6YGJ5dGVzYCwgOmNsYXNzOmBieXRlc2FycmF5YAorb3IgOmNsYXNzOmBkYXRldGltZS5kYXRldGltZWAgb2JqZWN0cy4KIAotVGhlIGBgPGRhdGE+YGAgcGxpc3QgdHlwZSBpcyBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgOmNsYXNzOmBEYXRhYCBjbGFzcy4gIFRoaXMgaXMKLWEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFB5dGhvbiBieXRlcyBvYmplY3QuICBVc2UgOmNsYXNzOmBEYXRhYCBpZiB5b3VyIHN0cmluZ3MKLWNvbnRhaW4gY29udHJvbCBjaGFyYWN0ZXJzLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIE5ldyBBUEksIG9sZCBBUEkgZGVwcmVjYXRlZC4gIFN1cHBvcnQgZm9yIGJpbmFyeSBmb3JtYXQgcGxpc3RzIGFkZGVkLgogCiAuLiBzZWVhbHNvOjoKIAotICAgYFBMaXN0IG1hbnVhbCBwYWdlIDxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL0Rhcndpbi9SZWZlcmVuY2UvTWFuUGFnZXMvbWFuNS9wbGlzdC41Lmh0bWw+YF8KKyAgIGBQTGlzdCBtYW51YWwgcGFnZSA8aHR0cHM6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2xpYnJhcnkvbWFjL2RvY3VtZW50YXRpb24vRGFyd2luL1JlZmVyZW5jZS9NYW5QYWdlcy9tYW41L3BsaXN0LjUuaHRtbD5gXwogICAgICAgQXBwbGUncyBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaWxlIGZvcm1hdC4KIAogCiBUaGlzIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCi0uLiBmdW5jdGlvbjo6IHJlYWRQbGlzdChwYXRoT3JGaWxlKQorLi4gZnVuY3Rpb246OiBsb2FkKGZwLCBcKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KQogCi0gICBSZWFkIGEgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUgb3IgYSAocmVhZGFibGUgYW5kCi0gICBiaW5hcnkpIGZpbGUgb2JqZWN0LiAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhCisgICBSZWFkIGEgcGxpc3QgZmlsZS4gKmZwKiBzaG91bGQgYmUgYSByZWFkYWJsZSBhbmQgYmluYXJ5IGZpbGUgb2JqZWN0LgorICAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhCiAgICBkaWN0aW9uYXJ5KS4KIAotICAgVGhlIFhNTCBkYXRhIGlzIHBhcnNlZCB1c2luZyB0aGUgRXhwYXQgcGFyc2VyIGZyb20gOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgCi0gICAtLSBzZWUgaXRzIGRvY3VtZW50YXRpb24gZm9yIHBvc3NpYmxlIGV4Y2VwdGlvbnMgb24gaWxsLWZvcm1lZCBYTUwuCi0gICBVbmtub3duIGVsZW1lbnRzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQgYnkgdGhlIHBsaXN0IHBhcnNlci4KKyAgIFRoZSAqZm10KiBpcyB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlIGFuZCB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgdmFsaWQ6CisKKyAgICogOmRhdGE6YE5vbmVgOiBBdXRvZGV0ZWN0IHRoZSBmaWxlIGZvcm1hdAorCisgICAqIDpkYXRhOmBGTVRfWE1MYDogWE1MIGZpbGUgZm9ybWF0CisKKyAgICogOmRhdGE6YEZNVF9CSU5BUllgOiBCaW5hcnkgcGxpc3QgZm9ybWF0CisKKyAgIElmICp1c2VfYnVpbHRpbl90eXBlcyogaXMgdHJ1ZSAodGhlIGRlZmF1bHQpIGJpbmFyeSBkYXRhIHdpbGwgYmUgcmV0dXJuZWQKKyAgIGFzIGluc3RhbmNlcyBvZiA6Y2xhc3M6YGJ5dGVzYCwgb3RoZXJ3aXNlIGl0IGlzIHJldHVybmVkIGFzIGluc3RhbmNlcyBvZgorICAgOmNsYXNzOmBEYXRhYC4KKworICAgVGhlICpkaWN0X3R5cGUqIGlzIHRoZSB0eXBlIHVzZWQgZm9yIGRpY3Rpb25hcmllcyB0aGF0IGFyZSByZWFkIGZyb20gdGhlCisgICBwbGlzdCBmaWxlLiBUaGUgZXhhY3Qgc3RydWN0dXJlIG9mIHRoZSBwbGlzdCBjYW4gYmUgcmVjb3ZlcmVkIGJ5IHVzaW5nCisgICA6Y2xhc3M6YGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0YCAoYWx0aG91Z2ggdGhlIG9yZGVyIG9mIGtleXMgc2hvdWxkbid0IGJlCisgICBpbXBvcnRhbnQgaW4gcGxpc3QgZmlsZXMpLgorCisgICBYTUwgZGF0YSBmb3IgdGhlIDpkYXRhOmBGTVRfWE1MYCBmb3JtYXQgaXMgcGFyc2VkIHVzaW5nIHRoZSBFeHBhdCBwYXJzZXIKKyAgIGZyb20gOm1vZDpgeG1sLnBhcnNlcnMuZXhwYXRgIC0tIHNlZSBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgcG9zc2libGUKKyAgIGV4Y2VwdGlvbnMgb24gaWxsLWZvcm1lZCBYTUwuICBVbmtub3duIGVsZW1lbnRzIHdpbGwgc2ltcGx5IGJlIGlnbm9yZWQKKyAgIGJ5IHRoZSBwbGlzdCBwYXJzZXIuCisKKyAgIFRoZSBwYXJzZXIgZm9yIHRoZSBiaW5hcnkgZm9ybWF0IHJhaXNlcyA6ZXhjOmBJbnZhbGlkRmlsZUV4Y2VwdGlvbmAKKyAgIHdoZW4gdGhlIGZpbGUgY2Fubm90IGJlIHBhcnNlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBsb2FkcyhkYXRhLCBcKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KQorCisgICBMb2FkIGEgcGxpc3QgZnJvbSBhIGJ5dGVzIG9iamVjdC4gU2VlIDpmdW5jOmBsb2FkYCBmb3IgYW4gZXhwbGFuYXRpb24gb2YKKyAgIHRoZSBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBkdW1wKHZhbHVlLCBmcCwgXCosIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisKKyAgIFdyaXRlICp2YWx1ZSogdG8gYSBwbGlzdCBmaWxlLiAqRnAqIHNob3VsZCBiZSBhIHdyaXRhYmxlLCBiaW5hcnkKKyAgIGZpbGUgb2JqZWN0LgorCisgICBUaGUgKmZtdCogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIHBsaXN0IGZpbGUgYW5kIGNhbiBiZQorICAgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorCisgICAqIDpkYXRhOmBGTVRfWE1MYDogWE1MIGZvcm1hdHRlZCBwbGlzdCBmaWxlCisKKyAgICogOmRhdGE6YEZNVF9CSU5BUllgOiBCaW5hcnkgZm9ybWF0dGVkIHBsaXN0IGZpbGUKKworICAgV2hlbiAqc29ydF9rZXlzKiBpcyB0cnVlICh0aGUgZGVmYXVsdCkgdGhlIGtleXMgZm9yIGRpY3Rpb25hcmllcyB3aWxsIGJlCisgICB3cml0dGVuIHRvIHRoZSBwbGlzdCBpbiBzb3J0ZWQgb3JkZXIsIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgd3JpdHRlbiBpbgorICAgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGUgZGljdGlvbmFyeS4KKworICAgV2hlbiAqc2tpcGtleXMqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgdGhlIGZ1bmN0aW9uIHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgCisgICB3aGVuIGEga2V5IG9mIGEgZGljdGlvbmFyeSBpcyBub3QgYSBzdHJpbmcsIG90aGVyd2lzZSBzdWNoIGtleXMgYXJlIHNraXBwZWQuCisKKyAgIEEgOmV4YzpgVHlwZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgb2JqZWN0IGlzIG9mIGFuIHVuc3VwcG9ydGVkIHR5cGUgb3IKKyAgIGEgY29udGFpbmVyIHRoYXQgY29udGFpbnMgb2JqZWN0cyBvZiB1bnN1cHBvcnRlZCB0eXBlcy4KKworICAgQW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgd2lsbCBiZSByYWlzZWQgZm9yIGludGVnZXIgdmFsdWVzIHRoYXQgY2Fubm90CisgICBiZSByZXByZXNlbnRlZCBpbiAoYmluYXJ5KSBwbGlzdCBmaWxlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZnVuY3Rpb246OiBkdW1wcyh2YWx1ZSwgXCosIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisKKyAgIFJldHVybiAqdmFsdWUqIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4gU2VlCisgICB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgOmZ1bmM6YGR1bXBgIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5d29yZAorICAgYXJndW1lbnRzIG9mIHRoaXMgZnVuY3Rpb24uCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGVwcmVjYXRlZDoKKworLi4gZnVuY3Rpb246OiByZWFkUGxpc3QocGF0aE9yRmlsZSkKKworICAgUmVhZCBhIHBsaXN0IGZpbGUuICpwYXRoT3JGaWxlKiBtYXkgYmUgZWl0aGVyIGEgZmlsZSBuYW1lIG9yIGEgKHJlYWRhYmxlCisgICBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdC4gUmV0dXJucyB0aGUgdW5wYWNrZWQgcm9vdCBvYmplY3QgKHdoaWNoIHVzdWFsbHkKKyAgIGlzIGEgZGljdGlvbmFyeSkuCisKKyAgIFRoaXMgZnVuY3Rpb24gY2FsbHMgOmZ1bmM6YGxvYWRgIHRvIGRvIHRoZSBhY3R1YWwgd29yaywgc2VlIHRoZSBkb2N1bWVudGF0aW9uCisgICBvZiA6ZnVuYzpgdGhhdCBmdW5jdGlvbiA8bG9hZD5gIGZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBEaWN0IHZhbHVlcyBpbiB0aGUgcmVzdWx0IGhhdmUgYSBgYF9fZ2V0YXR0cl9fYGAgbWV0aG9kIHRoYXQgZGVmZXJzCisgICAgICB0byBgYF9fZ2V0aXRlbV9gYC4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gdXNlIGF0dHJpYnV0ZSBhY2Nlc3MgdG8KKyAgICAgIGFjY2VzcyBpdGVtcyBvZiB0aGVzZSBkaWN0aW9uYXJpZXMuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQgVXNlIDpmdW5jOmBsb2FkYCBpbnN0ZWFkLgogCiAKIC4uIGZ1bmN0aW9uOjogd3JpdGVQbGlzdChyb290T2JqZWN0LCBwYXRoT3JGaWxlKQogCi0gICAgV3JpdGUgKnJvb3RPYmplY3QqIHRvIGEgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBlaXRoZXIgYmUgYSBmaWxlIG5hbWUKLSAgICBvciBhICh3cml0YWJsZSBhbmQgYmluYXJ5KSBmaWxlIG9iamVjdC4KKyAgIFdyaXRlICpyb290T2JqZWN0KiB0byBhbiBYTUwgcGxpc3QgZmlsZS4gKnBhdGhPckZpbGUqIG1heSBiZSBlaXRoZXIgYSBmaWxlIG5hbWUKKyAgIG9yIGEgKHdyaXRhYmxlIGFuZCBiaW5hcnkpIGZpbGUgb2JqZWN0CiAKLSAgICBBIDpleGM6YFR5cGVFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgdGhlIG9iamVjdCBpcyBvZiBhbiB1bnN1cHBvcnRlZCB0eXBlIG9yCi0gICAgYSBjb250YWluZXIgdGhhdCBjb250YWlucyBvYmplY3RzIG9mIHVuc3VwcG9ydGVkIHR5cGVzLgorICAgLi4gZGVwcmVjYXRlZDo6IDMuNCBVc2UgOmZ1bmM6YGR1bXBgIGluc3RlYWQuCiAKIAogLi4gZnVuY3Rpb246OiByZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSkKIAogICAgUmVhZCBhIHBsaXN0IGRhdGEgZnJvbSBhIGJ5dGVzIG9iamVjdC4gIFJldHVybiB0aGUgcm9vdCBvYmplY3QuCiAKKyAgIFNlZSA6ZnVuYzpgbG9hZGAgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAuLiBub3RlOjoKKworICAgICAgRGljdCB2YWx1ZXMgaW4gdGhlIHJlc3VsdCBoYXZlIGEgYGBfX2dldGF0dHJfX2BgIG1ldGhvZCB0aGF0IGRlZmVycworICAgICAgdG8gYGBfX2dldGl0ZW1fYGAuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHVzZSBhdHRyaWJ1dGUgYWNjZXNzIHRvCisgICAgICBhY2Nlc3MgaXRlbXMgb2YgdGhlc2UgZGljdGlvbmFyaWVzLgorCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSA6ZnVuYzpgbG9hZHNgIGluc3RlYWQuCisKIAogLi4gZnVuY3Rpb246OiB3cml0ZVBsaXN0VG9CeXRlcyhyb290T2JqZWN0KQogCi0gICBSZXR1cm4gKnJvb3RPYmplY3QqIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KKyAgIFJldHVybiAqcm9vdE9iamVjdCogYXMgYW4gWE1MIHBsaXN0LWZvcm1hdHRlZCBieXRlcyBvYmplY3QuCisKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQgVXNlIDpmdW5jOmBkdW1wc2AgaW5zdGVhZC4KIAogCi1UaGUgZm9sbG93aW5nIGNsYXNzIGlzIGF2YWlsYWJsZToKK1RoZSBmb2xsb3dpbmcgY2xhc3NlcyBhcmUgYXZhaWxhYmxlOgorCisuLiBjbGFzczo6IERpY3QoW2RpY3RdKToKKworICAgUmV0dXJuIGFuIGV4dGVuZGVkIG1hcHBpbmcgb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgYXMgZGljdGlvbmFyeQorICAgKmRpY3QqLgorCisgICBUaGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBkaWN0YCB3aGVyZSBhdHRyaWJ1dGUgYWNjZXNzIGNhbgorICAgYmUgdXNlZCB0byBhY2Nlc3MgaXRlbXMuIFRoYXQgaXMsIGBgYURpY3Qua2V5YGAgaXMgdGhlIHNhbWUgYXMKKyAgIGBgYURpY3RbJ2tleSddYGAgZm9yIGdldHRpbmcsIHNldHRpbmcgYW5kIGRlbGV0aW5nIGl0ZW1zIGluIHRoZSBtYXBwaW5nLgorCisgICAuLiBkZXByZWNhdGVkOjogMy4wCisKIAogLi4gY2xhc3M6OiBEYXRhKGRhdGEpCiAKQEAgLTg2LDYgKzE5NCwyNCBAQAogICAgSXQgaGFzIG9uZSBhdHRyaWJ1dGUsIDphdHRyOmBkYXRhYCwgdGhhdCBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSB0aGUgUHl0aG9uCiAgICBieXRlcyBvYmplY3Qgc3RvcmVkIGluIGl0LgogCisgICAuLiBkZXByZWNhdGVkOjogMy40IFVzZSBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdCBpbnN0ZWFkLgorCisKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSBhdmFpbGFibGU6CisKKy4uIGRhdGE6OiBGTVRfWE1MCisKKyAgIFRoZSBYTUwgZm9ybWF0IGZvciBwbGlzdCBmaWxlcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IEZNVF9CSU5BUlkKKworICAgVGhlIGJpbmFyeSBmb3JtYXQgZm9yIHBsaXN0IGZpbGVzCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIEV4YW1wbGVzCiAtLS0tLS0tLQpAQCAtMTAzLDEzICsyMjksMTUgQEAKICAgICAgICAgICAgIGFUcnVlVmFsdWUgPSBUcnVlLAogICAgICAgICAgICAgYUZhbHNlVmFsdWUgPSBGYWxzZSwKICAgICAgICAgKSwKLSAgICAgICAgc29tZURhdGEgPSBEYXRhKGIiPGJpbmFyeSBndW5rPiIpLAotICAgICAgICBzb21lTW9yZURhdGEgPSBEYXRhKGIiPGxvdHMgb2YgYmluYXJ5IGd1bms+IiAqIDEwKSwKKyAgICAgICAgc29tZURhdGEgPSBiIjxiaW5hcnkgZ3Vuaz4iLAorICAgICAgICBzb21lTW9yZURhdGEgPSBiIjxsb3RzIG9mIGJpbmFyeSBndW5rPiIgKiAxMCwKICAgICAgICAgYURhdGUgPSBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKHRpbWUubWt0aW1lKHRpbWUuZ210aW1lKCkpKSwKICAgICApCi0gICAgd3JpdGVQbGlzdChwbCwgZmlsZU5hbWUpCisgICAgd2l0aCBvcGVuKGZpbGVOYW1lLCAnd2InKSBhcyBmcDoKKyAgICAgICAgZHVtcChwbCwgZnApCiAKIFBhcnNpbmcgYSBwbGlzdDo6CiAKLSAgICBwbCA9IHJlYWRQbGlzdChwYXRoT3JGaWxlKQorICAgIHdpdGggb3BlbihmaWxlTmFtZSwgJ3JiJykgYXMgZnA6CisgICAgICAgIHBsID0gbG9hZChmcCkKICAgICBwcmludChwbFsiYUtleSJdKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcG9wbGliLnJzdCBiL0RvYy9saWJyYXJ5L3BvcGxpYi5yc3QKaW5kZXggYjQwODBkNi4uNDViYWFkOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcG9wbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9wb3BsaWIucnN0CkBAIC0xMyw4ICsxMywxMSBAQAogLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBtb2R1bGUgZGVmaW5lcyBhIGNsYXNzLCA6Y2xhc3M6YFBPUDNgLCB3aGljaCBlbmNhcHN1bGF0ZXMgYSBjb25uZWN0aW9uIHRvIGEKLVBPUDMgc2VydmVyIGFuZCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBhcyBkZWZpbmVkIGluIDpyZmM6YDE3MjVgLiAgVGhlCi06Y2xhc3M6YFBPUDNgIGNsYXNzIHN1cHBvcnRzIGJvdGggdGhlIG1pbmltYWwgYW5kIG9wdGlvbmFsIGNvbW1hbmQgc2V0cy4KK1BPUDMgc2VydmVyIGFuZCBpbXBsZW1lbnRzIHRoZSBwcm90b2NvbCBhcyBkZWZpbmVkIGluIDpyZmM6YDE5MzlgLiBUaGUKKzpjbGFzczpgUE9QM2AgY2xhc3Mgc3VwcG9ydHMgYm90aCB0aGUgbWluaW1hbCBhbmQgb3B0aW9uYWwgY29tbWFuZCBzZXRzIGZyb20KKzpyZmM6YDE5MzlgLiBUaGUgOmNsYXNzOmBQT1AzYCBjbGFzcyBhbHNvIHN1cHBvcnRzIHRoZSBgYFNUTFNgYCBjb21tYW5kIGludHJvZHVjZWQKK2luIDpyZmM6YDI1OTVgIHRvIGVuYWJsZSBlbmNyeXB0ZWQgY29tbXVuaWNhdGlvbiBvbiBhbiBhbHJlYWR5IGVzdGFibGlzaGVkIGNvbm5lY3Rpb24uCisKIEFkZGl0aW9uYWxseSwgdGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBjbGFzcyA6Y2xhc3M6YFBPUDNfU1NMYCwgd2hpY2ggcHJvdmlkZXMKIHN1cHBvcnQgZm9yIGNvbm5lY3RpbmcgdG8gUE9QMyBzZXJ2ZXJzIHRoYXQgdXNlIFNTTCBhcyBhbiB1bmRlcmx5aW5nIHByb3RvY29sCiBsYXllci4KQEAgLTQwLDE2ICs0MywyMyBAQAogCiAgICBUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBQT1AzYCB0aGF0IGNvbm5lY3RzIHRvIHRoZSBzZXJ2ZXIgb3ZlciBhbiBTU0wKICAgIGVuY3J5cHRlZCBzb2NrZXQuICBJZiAqcG9ydCogaXMgbm90IHNwZWNpZmllZCwgOTk1LCB0aGUgc3RhbmRhcmQgUE9QMy1vdmVyLVNTTAotICAgcG9ydCBpcyB1c2VkLiAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBhbHNvIG9wdGlvbmFsIC0gdGhleSBjYW4gY29udGFpbiBhCi0gICBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlIGZvciB0aGUgU1NMIGNvbm5lY3Rpb24uCi0gICAqdGltZW91dCogd29ya3MgYXMgaW4gdGhlIDpjbGFzczpgUE9QM2AgY29uc3RydWN0b3IuICpjb250ZXh0KiBwYXJhbWV0ZXIgaXMgYQotICAgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgb2JqZWN0IHdoaWNoIGFsbG93cyBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbgotICAgb3B0aW9ucywgY2VydGlmaWNhdGVzIGFuZCBwcml2YXRlIGtleXMgaW50byBhIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkKLSAgIHN0cnVjdHVyZS4KKyAgIHBvcnQgaXMgdXNlZC4gICp0aW1lb3V0KiB3b3JrcyBhcyBpbiB0aGUgOmNsYXNzOmBQT1AzYCBjb25zdHJ1Y3Rvci4KKyAgICpjb250ZXh0KiBpcyBhbiBvcHRpb25hbCA6Y2xhc3M6YHNzbC5TU0xDb250ZXh0YCBvYmplY3Qgd2hpY2ggYWxsb3dzCisgICBidW5kbGluZyBTU0wgY29uZmlndXJhdGlvbiBvcHRpb25zLCBjZXJ0aWZpY2F0ZXMgYW5kIHByaXZhdGUga2V5cyBpbnRvIGEKKyAgIHNpbmdsZSAocG90ZW50aWFsbHkgbG9uZy1saXZlZCkgc3RydWN0dXJlLiAgUGxlYXNlIHJlYWQgOnJlZjpgc3NsLXNlY3VyaXR5YAorICAgZm9yIGJlc3QgcHJhY3RpY2VzLgorCisgICAqa2V5ZmlsZSogYW5kICpjZXJ0ZmlsZSogYXJlIGEgbGVnYWN5IGFsdGVybmF0aXZlIHRvICpjb250ZXh0KiAtIHRoZXkgY2FuCisgICBwb2ludCB0byBQRU0tZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbiBmaWxlcywKKyAgIHJlc3BlY3RpdmVseSwgZm9yIHRoZSBTU0wgY29ubmVjdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKICAgICAgICpjb250ZXh0KiBwYXJhbWV0ZXIgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgY2xhc3Mgbm93IHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNrIHdpdGgKKyAgICAgIDphdHRyOmBzc2wuU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKiAoc2VlCisgICAgICA6ZGF0YTpgc3NsLkhBU19TTklgKS4KIAogT25lIGV4Y2VwdGlvbiBpcyBkZWZpbmVkIGFzIGFuIGF0dHJpYnV0ZSBvZiB0aGUgOm1vZDpgcG9wbGliYCBtb2R1bGU6CiAKQEAgLTk3LDYgKzEwNywxNCBAQAogICAgUmV0dXJucyB0aGUgZ3JlZXRpbmcgc3RyaW5nIHNlbnQgYnkgdGhlIFBPUDMgc2VydmVyLgogCiAKKy4uIG1ldGhvZDo6IFBPUDMuY2FwYSgpCisKKyAgIFF1ZXJ5IHRoZSBzZXJ2ZXIncyBjYXBhYmlsaXRpZXMgYXMgc3BlY2lmaWVkIGluIDpyZmM6YDI0NDlgLgorICAgUmV0dXJucyBhIGRpY3Rpb25hcnkgaW4gdGhlIGZvcm0gYGB7J25hbWUnOiBbJ3BhcmFtJy4uLl19YGAuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFBPUDMudXNlcih1c2VybmFtZSkKIAogICAgU2VuZCB1c2VyIGNvbW1hbmQsIHJlc3BvbnNlIHNob3VsZCBpbmRpY2F0ZSB0aGF0IGEgcGFzc3dvcmQgaXMgcmVxdWlyZWQuCkBAIC0xNzYsNiArMTk0LDIzIEBACiAgICB0aGUgdW5pcXVlIGlkIGZvciB0aGF0IG1lc3NhZ2UgaW4gdGhlIGZvcm0gYGAncmVzcG9uc2UgbWVzZ251bSB1aWRgYCwgb3RoZXJ3aXNlCiAgICByZXN1bHQgaXMgbGlzdCBgYChyZXNwb25zZSwgWydtZXNnbnVtIHVpZCcsIC4uLl0sIG9jdGV0cylgYC4KIAorLi4gbWV0aG9kOjogUE9QMy5zdGxzKGNvbnRleHQ9Tm9uZSkKKworICAgU3RhcnQgYSBUTFMgc2Vzc2lvbiBvbiB0aGUgYWN0aXZlIGNvbm5lY3Rpb24gYXMgc3BlY2lmaWVkIGluIDpyZmM6YDI1OTVgLgorICAgVGhpcyBpcyBvbmx5IGFsbG93ZWQgYmVmb3JlIHVzZXIgYXV0aGVudGljYXRpb24KKworICAgKmNvbnRleHQqIHBhcmFtZXRlciBpcyBhIDpjbGFzczpgc3NsLlNTTENvbnRleHRgIG9iamVjdCB3aGljaCBhbGxvd3MKKyAgIGJ1bmRsaW5nIFNTTCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGNlcnRpZmljYXRlcyBhbmQgcHJpdmF0ZSBrZXlzIGludG8KKyAgIGEgc2luZ2xlIChwb3RlbnRpYWxseSBsb25nLWxpdmVkKSBzdHJ1Y3R1cmUuICBQbGVhc2UgcmVhZCA6cmVmOmBzc2wtc2VjdXJpdHlgCisgICBmb3IgYmVzdCBwcmFjdGljZXMuCisKKyAgIFRoaXMgbWV0aG9kIHN1cHBvcnRzIGhvc3RuYW1lIGNoZWNraW5nIHZpYQorICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiBJbnN0YW5jZXMgb2YgOmNsYXNzOmBQT1AzX1NTTGAgaGF2ZSBubyBhZGRpdGlvbmFsIG1ldGhvZHMuIFRoZSBpbnRlcmZhY2Ugb2YgdGhpcwogc3ViY2xhc3MgaXMgaWRlbnRpY2FsIHRvIGl0cyBwYXJlbnQuCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QgYi9Eb2MvbGlicmFyeS9wcHJpbnQucnN0CmluZGV4IDNhODYzMzEuLmMwNTg5YTMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3BwcmludC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHByaW50LnJzdApAQCAtMTQsOCArMTQsOCBAQAogUHl0aG9uIGRhdGEgc3RydWN0dXJlcyBpbiBhIGZvcm0gd2hpY2ggY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gdGhlIGludGVycHJldGVyLgogSWYgdGhlIGZvcm1hdHRlZCBzdHJ1Y3R1cmVzIGluY2x1ZGUgb2JqZWN0cyB3aGljaCBhcmUgbm90IGZ1bmRhbWVudGFsIFB5dGhvbgogdHlwZXMsIHRoZSByZXByZXNlbnRhdGlvbiBtYXkgbm90IGJlIGxvYWRhYmxlLiAgVGhpcyBtYXkgYmUgdGhlIGNhc2UgaWYgb2JqZWN0cwotc3VjaCBhcyBmaWxlcywgc29ja2V0cywgY2xhc3Nlcywgb3IgaW5zdGFuY2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55Ci1vdGhlciBidWlsdC1pbiBvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gY29uc3RhbnRzLgorc3VjaCBhcyBmaWxlcywgc29ja2V0cyBvciBjbGFzc2VzIGFyZSBpbmNsdWRlZCwgYXMgd2VsbCBhcyBtYW55IG90aGVyCitvYmplY3RzIHdoaWNoIGFyZSBub3QgcmVwcmVzZW50YWJsZSBhcyBQeXRob24gbGl0ZXJhbHMuCiAKIFRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24ga2VlcHMgb2JqZWN0cyBvbiBhIHNpbmdsZSBsaW5lIGlmIGl0IGNhbiwgYW5kCiBicmVha3MgdGhlbSBvbnRvIG11bHRpcGxlIGxpbmVzIGlmIHRoZXkgZG9uJ3QgZml0IHdpdGhpbiB0aGUgYWxsb3dlZCB3aWR0aC4KQEAgLTI5LDE0ICsyOSwxNCBAQAogLi4gRmlyc3QgdGhlIGltcGxlbWVudGF0aW9uIGNsYXNzOgogCiAKLS4uIGNsYXNzOjogUHJldHR5UHJpbnRlcihpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsIHN0cmVhbT1Ob25lKQorLi4gY2xhc3M6OiBQcmV0dHlQcmludGVyKGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUsICosIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYWN0PUZhbHNlKQogCiAgICBDb25zdHJ1Y3QgYSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGluc3RhbmNlLiAgVGhpcyBjb25zdHJ1Y3RvciB1bmRlcnN0YW5kcwogICAgc2V2ZXJhbCBrZXl3b3JkIHBhcmFtZXRlcnMuICBBbiBvdXRwdXQgc3RyZWFtIG1heSBiZSBzZXQgdXNpbmcgdGhlICpzdHJlYW0qCiAgICBrZXl3b3JkOyB0aGUgb25seSBtZXRob2QgdXNlZCBvbiB0aGUgc3RyZWFtIG9iamVjdCBpcyB0aGUgZmlsZSBwcm90b2NvbCdzCiAgICA6bWV0aDpgd3JpdGVgIG1ldGhvZC4gIElmIG5vdCBzcGVjaWZpZWQsIHRoZSA6Y2xhc3M6YFByZXR0eVByaW50ZXJgIGFkb3B0cwotICAgYGBzeXMuc3Rkb3V0YGAuICBUaHJlZSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgbWF5IGJlIHVzZWQgdG8gY29udHJvbCB0aGUKLSAgIGZvcm1hdHRlZCByZXByZXNlbnRhdGlvbi4gIFRoZSBrZXl3b3JkcyBhcmUgKmluZGVudCosICpkZXB0aCosIGFuZCAqd2lkdGgqLiAgVGhlCisgICBgYHN5cy5zdGRvdXRgYC4gIFRoZQogICAgYW1vdW50IG9mIGluZGVudGF0aW9uIGFkZGVkIGZvciBlYWNoIHJlY3Vyc2l2ZSBsZXZlbCBpcyBzcGVjaWZpZWQgYnkgKmluZGVudCo7CiAgICB0aGUgZGVmYXVsdCBpcyBvbmUuICBPdGhlciB2YWx1ZXMgY2FuIGNhdXNlIG91dHB1dCB0byBsb29rIGEgbGl0dGxlIG9kZCwgYnV0IGNhbgogICAgbWFrZSBuZXN0aW5nIGVhc2llciB0byBzcG90LiAgVGhlIG51bWJlciBvZiBsZXZlbHMgd2hpY2ggbWF5IGJlIHByaW50ZWQgaXMKQEAgLTQ1LDcgKzQ1LDEyIEBACiAgICB0aGUgZGVwdGggb2YgdGhlIG9iamVjdHMgYmVpbmcgZm9ybWF0dGVkLiAgVGhlIGRlc2lyZWQgb3V0cHV0IHdpZHRoIGlzCiAgICBjb25zdHJhaW5lZCB1c2luZyB0aGUgKndpZHRoKiBwYXJhbWV0ZXI7IHRoZSBkZWZhdWx0IGlzIDgwIGNoYXJhY3RlcnMuICBJZiBhCiAgICBzdHJ1Y3R1cmUgY2Fubm90IGJlIGZvcm1hdHRlZCB3aXRoaW4gdGhlIGNvbnN0cmFpbmVkIHdpZHRoLCBhIGJlc3QgZWZmb3J0IHdpbGwKLSAgIGJlIG1hZGUuCisgICBiZSBtYWRlLiAgSWYgKmNvbXBhY3QqIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgZWFjaCBpdGVtIG9mIGEgbG9uZyBzZXF1ZW5jZQorICAgd2lsbCBiZSBmb3JtYXR0ZWQgb24gYSBzZXBhcmF0ZSBsaW5lLiAgSWYgKmNvbXBhY3QqIGlzIHRydWUsIGFzIG1hbnkgaXRlbXMKKyAgIGFzIHdpbGwgZml0IHdpdGhpbiB0aGUgKndpZHRoKiB3aWxsIGJlIGZvcm1hdHRlZCBvbiBlYWNoIG91dHB1dCBsaW5lLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICpjb21wYWN0KiBwYXJhbWV0ZXIuCiAKICAgICAgID4+PiBpbXBvcnQgcHByaW50CiAgICAgICA+Pj4gc3R1ZmYgPSBbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywgJ2tuaWdodHMnLCAnbmknXQpAQCAtNTgsNiArNjMsMTIgQEAKICAgICAgICAgICAnbHVtYmVyamFjaycsCiAgICAgICAgICAgJ2tuaWdodHMnLAogICAgICAgICAgICduaSddCisgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcih3aWR0aD00MSwgY29tcGFjdD1UcnVlKQorICAgICAgPj4+IHBwLnBwcmludChzdHVmZikKKyAgICAgIFtbJ3NwYW0nLCAnZWdncycsICdsdW1iZXJqYWNrJywKKyAgICAgICAgJ2tuaWdodHMnLCAnbmknXSwKKyAgICAgICAnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsCisgICAgICAgJ25pJ10KICAgICAgID4+PiB0dXAgPSAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywKICAgICAgIC4uLiAoJ3BhcnJvdCcsICgnZnJlc2ggZnJ1aXQnLCkpKSkpKSkpCiAgICAgICA+Pj4gcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcihkZXB0aD02KQpAQCAtNjUsMjMgKzc2LDMwIEBACiAgICAgICAoJ3NwYW0nLCAoJ2VnZ3MnLCAoJ2x1bWJlcmphY2snLCAoJ2tuaWdodHMnLCAoJ25pJywgKCdkZWFkJywgKC4uLikpKSkpKSkKIAogCi1UaGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjbGFzcyBzdXBwb3J0cyBzZXZlcmFsIGRlcml2YXRpdmUgZnVuY3Rpb25zOgorVGhlIDptb2Q6YHBwcmludGAgbW9kdWxlIGFsc28gcHJvdmlkZXMgc2V2ZXJhbCBzaG9ydGN1dCBmdW5jdGlvbnM6CiAKLS4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgY29tcGFjdD1GYWxzZSkKIAotICAgUmV0dXJuIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogYXMgYSBzdHJpbmcuICAqaW5kZW50KiwgKndpZHRoKgotICAgYW5kICpkZXB0aCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAgY29uc3RydWN0b3IgYXMKLSAgIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKyAgIFJldHVybiB0aGUgZm9ybWF0dGVkIHJlcHJlc2VudGF0aW9uIG9mICpvYmplY3QqIGFzIGEgc3RyaW5nLiAgKmluZGVudCosCisgICAqd2lkdGgqLCAqZGVwdGgqIGFuZCAqY29tcGFjdCogd2lsbCBiZSBwYXNzZWQgdG8gdGhlIDpjbGFzczpgUHJldHR5UHJpbnRlcmAKKyAgIGNvbnN0cnVjdG9yIGFzIGZvcm1hdHRpbmcgcGFyYW1ldGVycy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHRoZSAqY29tcGFjdCogcGFyYW1ldGVyLgogCiAKLS4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSkKKy4uIGZ1bmN0aW9uOjogcHByaW50KG9iamVjdCwgc3RyZWFtPU5vbmUsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1GYWxzZSkKIAogICAgUHJpbnRzIHRoZSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gb2YgKm9iamVjdCogb24gKnN0cmVhbSosIGZvbGxvd2VkIGJ5IGEKICAgIG5ld2xpbmUuICBJZiAqc3RyZWFtKiBpcyBgYE5vbmVgYCwgYGBzeXMuc3Rkb3V0YGAgaXMgdXNlZC4gIFRoaXMgbWF5IGJlIHVzZWQKICAgIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBpbnN0ZWFkIG9mIHRoZSA6ZnVuYzpgcHJpbnRgIGZ1bmN0aW9uIGZvcgogICAgaW5zcGVjdGluZyB2YWx1ZXMgKHlvdSBjYW4gZXZlbiByZWFzc2lnbiBgYHByaW50ID0gcHByaW50LnBwcmludGBgIGZvciB1c2UKLSAgIHdpdGhpbiBhIHNjb3BlKS4gICppbmRlbnQqLCAqd2lkdGgqIGFuZCAqZGVwdGgqIHdpbGwgYmUgcGFzc2VkIHRvIHRoZQotICAgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisgICB3aXRoaW4gYSBzY29wZSkuICAqaW5kZW50KiwgKndpZHRoKiwgKmRlcHRoKiBhbmQgKmNvbXBhY3QqIHdpbGwgYmUgcGFzc2VkCisgICB0byB0aGUgOmNsYXNzOmBQcmV0dHlQcmludGVyYCBjb25zdHJ1Y3RvciBhcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCB0aGUgKmNvbXBhY3QqIHBhcmFtZXRlci4KIAogICAgICAgPj4+IGltcG9ydCBwcHJpbnQKICAgICAgID4+PiBzdHVmZiA9IFsnc3BhbScsICdlZ2dzJywgJ2x1bWJlcmphY2snLCAna25pZ2h0cycsICduaSddCkBAIC0xOTMsMTAxICsyMTEsMTQxIEBACiAtLS0tLS0tCiAKIFRvIGRlbW9uc3RyYXRlIHNldmVyYWwgdXNlcyBvZiB0aGUgOmZ1bmM6YHBwcmludGAgZnVuY3Rpb24gYW5kIGl0cyBwYXJhbWV0ZXJzLAotbGV0J3MgZmV0Y2ggaW5mb3JtYXRpb24gYWJvdXQgYSBwcm9qZWN0IGZyb20gUHlQSTo6CitsZXQncyBmZXRjaCBpbmZvcm1hdGlvbiBhYm91dCBhIHByb2plY3QgZnJvbSBgUHlQSSA8aHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaT5gXzo6CiAKICAgID4+PiBpbXBvcnQganNvbgogICAgPj4+IGltcG9ydCBwcHJpbnQKICAgID4+PiBmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCi0gICA+Pj4gd2l0aCB1cmxvcGVuKCdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyL2pzb24nKSBhcyB1cmw6CisgICA+Pj4gd2l0aCB1cmxvcGVuKCdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvVHdpc3RlZC9qc29uJykgYXMgdXJsOgogICAgLi4uICAgICBodHRwX2luZm8gPSB1cmwuaW5mbygpCiAgICAuLi4gICAgIHJhd19kYXRhID0gdXJsLnJlYWQoKS5kZWNvZGUoaHR0cF9pbmZvLmdldF9jb250ZW50X2NoYXJzZXQoKSkKICAgID4+PiBwcm9qZWN0X2luZm8gPSBqc29uLmxvYWRzKHJhd19kYXRhKQotICAgPj4+IHJlc3VsdCA9IHsnaGVhZGVycyc6IGh0dHBfaW5mby5pdGVtcygpLCAnYm9keSc6IHByb2plY3RfaW5mb30KIAogSW4gaXRzIGJhc2ljIGZvcm0sIDpmdW5jOmBwcHJpbnRgIHNob3dzIHRoZSB3aG9sZSBvYmplY3Q6OgogCi0gICA+Pj4gcHByaW50LnBwcmludChyZXN1bHQpCi0gICB7J2JvZHknOiB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyLAotICAgICAgICAgICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsnRGV2ZWxvcG1lbnQgU3RhdHVzIDo6IDQgLSBCZXRhJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ludGVuZGVkIEF1ZGllbmNlIDo6IERldmVsb3BlcnMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTmF0dXJhbCBMYW5ndWFnZSA6OiBFbmdsaXNoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ09wZXJhdGluZyBTeXN0ZW0gOjogT1MgSW5kZXBlbmRlbnQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjYnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzIDo6IFB5dGhvbiBNb2R1bGVzJ10sCi0gICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKLSAgICAgICAgICAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAna2V5d29yZHMnOiAnY29uZmlncGFyc2VyIGluaSBwYXJzaW5nIGNvbmYgY2ZnIGNvbmZpZ3VyYXRpb24gZmlsZScsCi0gICAgICAgICAgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKLSAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdjb25maWdwYXJzZXInLAotICAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nOiAnYW55JywKLSAgICAgICAgICAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci8zLjIuMHIzJywKLSAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICdzdW1tYXJ5JzogJ1RoaXMgbGlicmFyeSBicmluZ3MgdGhlIHVwZGF0ZWQgY29uZmlncGFyc2VyIGZyb20gUHl0aG9uIDMuMisgdG8gUHl0aG9uIDIuNi0yLjcuJywKLSAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6ICczLjIuMHIzJ30sCi0gICAgICAgICAgICd1cmxzJzogW3snY29tbWVudF90ZXh0JzogJycsCi0gICAgICAgICAgICAgICAgICAgICAnZG93bmxvYWRzJzogNDcsCi0gICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnY29uZmlncGFyc2VyLTMuMi4wcjMudGFyLmd6JywKLSAgICAgICAgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAnbWQ1X2RpZ2VzdCc6ICc4NTAwZmQ4N2M2MWFjMGRlMzI4ZmM5OTZmY2U2OWI5NicsCi0gICAgICAgICAgICAgICAgICAgICAncGFja2FnZXR5cGUnOiAnc2Rpc3QnLAotICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbl92ZXJzaW9uJzogJ3NvdXJjZScsCi0gICAgICAgICAgICAgICAgICAgICAnc2l6ZSc6IDMyMjgxLAotICAgICAgICAgICAgICAgICAgICAgJ3VwbG9hZF90aW1lJzogJzIwMTEtMDUtMTBUMTY6Mjg6NTAnLAotICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9jL2NvbmZpZ3BhcnNlci9jb25maWdwYXJzZXItMy4yLjByMy50YXIuZ3onfV19LAotICAgJ2hlYWRlcnMnOiBbKCdEYXRlJywgJ1NhdCwgMTQgTWF5IDIwMTEgMTI6NDg6NTIgR01UJyksCi0gICAgICAgICAgICAgICAoJ1NlcnZlcicsICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtRGlzcG9zaXRpb24nLCAnaW5saW5lJyksCi0gICAgICAgICAgICAgICAoJ0Nvbm5lY3Rpb24nLCAnY2xvc2UnKSwKLSAgICAgICAgICAgICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLCAnY2h1bmtlZCcpLAotICAgICAgICAgICAgICAgKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD0iVVRGLTgiJyldfQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvKQorICAgeydpbmZvJzogeydfcHlwaV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAnX3B5cGlfb3JkZXJpbmcnOiAxMjUsCisgICAgICAgICAgICAgJ2F1dGhvcic6ICdHbHlwaCBMZWZrb3dpdHonLAorICAgICAgICAgICAgICdhdXRob3JfZW1haWwnOiAnZ2x5cGhAdHdpc3RlZG1hdHJpeC5jb20nLAorICAgICAgICAgICAgICdidWd0cmFja191cmwnOiAnJywKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9jb2RlX2t3YWxpdGVlX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9kb2N1bWVudGF0aW9uX2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2hlZXNlY2FrZV9pbnN0YWxsYWJpbGl0eV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWydQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMi42JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAyLjcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIgOjogT25seSddLAorICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlIGZyYW1ld29yayBmb3IgUHl0aG9uIHByb2dyYW1taW5nLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGggc3BlY2lhbCBmb2N1c1xyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkIG5ldHdvcmsgcHJvZ3JhbW1pbmcgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVsdGlwcm90b2NvbCBpbnRlZ3JhdGlvbi4nLAorICAgICAgICAgICAgICdkb2NzX3VybCc6ICcnLAorICAgICAgICAgICAgICdkb3dubG9hZF91cmwnOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ2hvbWVfcGFnZSc6ICdodHRwOi8vdHdpc3RlZG1hdHJpeC5jb20vJywKKyAgICAgICAgICAgICAna2V5d29yZHMnOiAnJywKKyAgICAgICAgICAgICAnbGljZW5zZSc6ICdNSVQnLAorICAgICAgICAgICAgICdtYWludGFpbmVyJzogJycsCisgICAgICAgICAgICAgJ21haW50YWluZXJfZW1haWwnOiAnJywKKyAgICAgICAgICAgICAnbmFtZSc6ICdUd2lzdGVkJywKKyAgICAgICAgICAgICAncGFja2FnZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQnLAorICAgICAgICAgICAgICdwbGF0Zm9ybSc6ICdVTktOT1dOJywKKyAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1R3aXN0ZWQvMTIuMy4wJywKKyAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAorICAgICAgICAgICAgICdzdW1tYXJ5JzogJ0FuIGFzeW5jaHJvbm91cyBuZXR3b3JraW5nIGZyYW1ld29yayB3cml0dGVuIGluIFB5dGhvbicsCisgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMTIuMy4wJ30sCisgICAgJ3VybHMnOiBbeydjb21tZW50X3RleHQnOiAnJywKKyAgICAgICAgICAgICAgJ2Rvd25sb2Fkcyc6IDcxODQ0LAorICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnVHdpc3RlZC0xMi4zLjAudGFyLmJ6MicsCisgICAgICAgICAgICAgICdoYXNfc2lnJzogRmFsc2UsCisgICAgICAgICAgICAgICdtZDVfZGlnZXN0JzogJzZlMjg5ODI1ZjNiZjU1OTFjZmQ2NzA4NzRjYzA4NjJkJywKKyAgICAgICAgICAgICAgJ3BhY2thZ2V0eXBlJzogJ3NkaXN0JywKKyAgICAgICAgICAgICAgJ3B5dGhvbl92ZXJzaW9uJzogJ3NvdXJjZScsCisgICAgICAgICAgICAgICdzaXplJzogMjYxNTczMywKKyAgICAgICAgICAgICAgJ3VwbG9hZF90aW1lJzogJzIwMTItMTItMjZUMTI6NDc6MDMnLAorICAgICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzL3NvdXJjZS9UL1R3aXN0ZWQvVHdpc3RlZC0xMi4zLjAudGFyLmJ6Mid9LAorICAgICAgICAgICAgIHsnY29tbWVudF90ZXh0JzogJycsCisgICAgICAgICAgICAgICdkb3dubG9hZHMnOiA1MjI0LAorICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnVHdpc3RlZC0xMi4zLjAud2luMzItcHkyLjcubXNpJywKKyAgICAgICAgICAgICAgJ2hhc19zaWcnOiBGYWxzZSwKKyAgICAgICAgICAgICAgJ21kNV9kaWdlc3QnOiAnNmI3NzhmNTIwMWI2MjJhNTUxOWEyYWNhMWEyZmU1MTInLAorICAgICAgICAgICAgICAncGFja2FnZXR5cGUnOiAnYmRpc3RfbXNpJywKKyAgICAgICAgICAgICAgJ3B5dGhvbl92ZXJzaW9uJzogJzIuNycsCisgICAgICAgICAgICAgICdzaXplJzogMjkxNjM1MiwKKyAgICAgICAgICAgICAgJ3VwbG9hZF90aW1lJzogJzIwMTItMTItMjZUMTI6NDg6MTUnLAorICAgICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3BhY2thZ2VzLzIuNy9UL1R3aXN0ZWQvVHdpc3RlZC0xMi4zLjAud2luMzItcHkyLjcubXNpJ31dfQogCiBUaGUgcmVzdWx0IGNhbiBiZSBsaW1pdGVkIHRvIGEgY2VydGFpbiAqZGVwdGgqIChlbGxpcHNpcyBpcyB1c2VkIGZvciBkZWVwZXIKIGNvbnRlbnRzKTo6CiAKLSAgID4+PiBwcHJpbnQucHByaW50KHJlc3VsdCwgZGVwdGg9MykKLSAgIHsnYm9keSc6IHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTIsCi0gICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzaWZpZXJzJzogWy4uLl0sCi0gICAgICAgICAgICAgICAgICAgICAgJ2Rvd25sb2FkX3VybCc6ICdVTktOT1dOJywKLSAgICAgICAgICAgICAgICAgICAgICAnaG9tZV9wYWdlJzogJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvcHkzay9saWJyYXJ5L2NvbmZpZ3BhcnNlci5odG1sJywKLSAgICAgICAgICAgICAgICAgICAgICAna2V5d29yZHMnOiAnY29uZmlncGFyc2VyIGluaSBwYXJzaW5nIGNvbmYgY2ZnIGNvbmZpZ3VyYXRpb24gZmlsZScsCi0gICAgICAgICAgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKLSAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6ICdjb25maWdwYXJzZXInLAotICAgICAgICAgICAgICAgICAgICAgICdwYWNrYWdlX3VybCc6ICdodHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvY29uZmlncGFyc2VyJywKLSAgICAgICAgICAgICAgICAgICAgICAncGxhdGZvcm0nOiAnYW55JywKLSAgICAgICAgICAgICAgICAgICAgICAncmVsZWFzZV91cmwnOiAnaHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL2NvbmZpZ3BhcnNlci8zLjIuMHIzJywKLSAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXNfcHl0aG9uJzogTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAnc3RhYmxlX3ZlcnNpb24nOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICdzdW1tYXJ5JzogJ1RoaXMgbGlicmFyeSBicmluZ3MgdGhlIHVwZGF0ZWQgY29uZmlncGFyc2VyIGZyb20gUHl0aG9uIDMuMisgdG8gUHl0aG9uIDIuNi0yLjcuJywKLSAgICAgICAgICAgICAgICAgICAgICAndmVyc2lvbic6ICczLjIuMHIzJ30sCi0gICAgICAgICAgICd1cmxzJzogW3suLi59XX0sCi0gICAnaGVhZGVycyc6IFsoJ0RhdGUnLCAnU2F0LCAxNCBNYXkgMjAxMSAxMjo0ODo1MiBHTVQnKSwKLSAgICAgICAgICAgICAgICgnU2VydmVyJywgJ0FwYWNoZS8yLjIuMTYgKERlYmlhbiknKSwKLSAgICAgICAgICAgICAgICgnQ29udGVudC1EaXNwb3NpdGlvbicsICdpbmxpbmUnKSwKLSAgICAgICAgICAgICAgICgnQ29ubmVjdGlvbicsICdjbG9zZScpLAotICAgICAgICAgICAgICAgKCdUcmFuc2Zlci1FbmNvZGluZycsICdjaHVua2VkJyksCi0gICAgICAgICAgICAgICAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PSJVVEYtOCInKV19CisgICA+Pj4gcHByaW50LnBwcmludChwcm9qZWN0X2luZm8sIGRlcHRoPTIpCisgICB7J2luZm8nOiB7J19weXBpX2hpZGRlbic6IEZhbHNlLAorICAgICAgICAgICAgICdfcHlwaV9vcmRlcmluZyc6IDEyNSwKKyAgICAgICAgICAgICAnYXV0aG9yJzogJ0dseXBoIExlZmtvd2l0eicsCisgICAgICAgICAgICAgJ2F1dGhvcl9lbWFpbCc6ICdnbHlwaEB0d2lzdGVkbWF0cml4LmNvbScsCisgICAgICAgICAgICAgJ2J1Z3RyYWNrX3VybCc6ICcnLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2NvZGVfa3dhbGl0ZWVfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2RvY3VtZW50YXRpb25faWQnOiBOb25lLAorICAgICAgICAgICAgICdjaGVlc2VjYWtlX2luc3RhbGxhYmlsaXR5X2lkJzogTm9uZSwKKyAgICAgICAgICAgICAnY2xhc3NpZmllcnMnOiBbLi4uXSwKKyAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQW4gZXh0ZW5zaWJsZSBmcmFtZXdvcmsgZm9yIFB5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgZm9jdXNcclxuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbiBldmVudC1iYXNlZCBuZXR3b3JrIHByb2dyYW1taW5nIGFuZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcHJvdG9jb2wgaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgbmV0d29ya2luZyBmcmFtZXdvcmsgd3JpdHRlbiBpbiBQeXRob24nLAorICAgICAgICAgICAgICd2ZXJzaW9uJzogJzEyLjMuMCd9LAorICAgICd1cmxzJzogW3suLi59LCB7Li4ufV19CiAKLUFkZGl0aW9uYWxseSwgbWF4aW11bSAqd2lkdGgqIGNhbiBiZSBzdWdnZXN0ZWQuIElmIGEgbG9uZyBvYmplY3QgY2Fubm90IGJlCi1zcGxpdCwgdGhlIHNwZWNpZmllZCB3aWR0aCB3aWxsIGJlIGV4Y2VlZGVkOjoKK0FkZGl0aW9uYWxseSwgbWF4aW11bSBjaGFyYWN0ZXIgKndpZHRoKiBjYW4gYmUgc3VnZ2VzdGVkLiBJZiBhIGxvbmcgb2JqZWN0CitjYW5ub3QgYmUgc3BsaXQsIHRoZSBzcGVjaWZpZWQgd2lkdGggd2lsbCBiZSBleGNlZWRlZDo6CiAKLSAgID4+PiBwcHJpbnQucHByaW50KHJlc3VsdFsnaGVhZGVycyddLCB3aWR0aD0zMCkKLSAgIFsoJ0RhdGUnLAotICAgICAnU2F0LCAxNCBNYXkgMjAxMSAxMjo0ODo1MiBHTVQnKSwKLSAgICAoJ1NlcnZlcicsCi0gICAgICdBcGFjaGUvMi4yLjE2IChEZWJpYW4pJyksCi0gICAgKCdDb250ZW50LURpc3Bvc2l0aW9uJywKLSAgICAgJ2lubGluZScpLAotICAgICgnQ29ubmVjdGlvbicsICdjbG9zZScpLAotICAgICgnVHJhbnNmZXItRW5jb2RpbmcnLAotICAgICAnY2h1bmtlZCcpLAotICAgICgnQ29udGVudC1UeXBlJywKLSAgICAgJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9IlVURi04IicpXQorICAgPj4+IHBwcmludC5wcHJpbnQocHJvamVjdF9pbmZvLCBkZXB0aD0yLCB3aWR0aD01MCkKKyAgIHsnaW5mbyc6IHsnX3B5cGlfaGlkZGVuJzogRmFsc2UsCisgICAgICAgICAgICAgJ19weXBpX29yZGVyaW5nJzogMTI1LAorICAgICAgICAgICAgICdhdXRob3InOiAnR2x5cGggTGVma293aXR6JywKKyAgICAgICAgICAgICAnYXV0aG9yX2VtYWlsJzogJ2dseXBoQHR3aXN0ZWRtYXRyaXguY29tJywKKyAgICAgICAgICAgICAnYnVndHJhY2tfdXJsJzogJycsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfY29kZV9rd2FsaXRlZV9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfZG9jdW1lbnRhdGlvbl9pZCc6IE5vbmUsCisgICAgICAgICAgICAgJ2NoZWVzZWNha2VfaW5zdGFsbGFiaWxpdHlfaWQnOiBOb25lLAorICAgICAgICAgICAgICdjbGFzc2lmaWVycyc6IFsuLi5dLAorICAgICAgICAgICAgICdkZXNjcmlwdGlvbic6ICdBbiBleHRlbnNpYmxlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJhbWV3b3JrIGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbiBwcm9ncmFtbWluZywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHNwZWNpYWwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb2N1c1xyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29uIGV2ZW50LWJhc2VkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV0d29yayBwcm9ncmFtbWluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZCBtdWx0aXByb3RvY29sICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50ZWdyYXRpb24uJywKKyAgICAgICAgICAgICAnZG9jc191cmwnOiAnJywKKyAgICAgICAgICAgICAnZG93bmxvYWRfdXJsJzogJ1VOS05PV04nLAorICAgICAgICAgICAgICdob21lX3BhZ2UnOiAnaHR0cDovL3R3aXN0ZWRtYXRyaXguY29tLycsCisgICAgICAgICAgICAgJ2tleXdvcmRzJzogJycsCisgICAgICAgICAgICAgJ2xpY2Vuc2UnOiAnTUlUJywKKyAgICAgICAgICAgICAnbWFpbnRhaW5lcic6ICcnLAorICAgICAgICAgICAgICdtYWludGFpbmVyX2VtYWlsJzogJycsCisgICAgICAgICAgICAgJ25hbWUnOiAnVHdpc3RlZCcsCisgICAgICAgICAgICAgJ3BhY2thZ2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkJywKKyAgICAgICAgICAgICAncGxhdGZvcm0nOiAnVU5LTk9XTicsCisgICAgICAgICAgICAgJ3JlbGVhc2VfdXJsJzogJ2h0dHA6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9Ud2lzdGVkLzEyLjMuMCcsCisgICAgICAgICAgICAgJ3JlcXVpcmVzX3B5dGhvbic6IE5vbmUsCisgICAgICAgICAgICAgJ3N0YWJsZV92ZXJzaW9uJzogTm9uZSwKKyAgICAgICAgICAgICAnc3VtbWFyeSc6ICdBbiBhc3luY2hyb25vdXMgJworICAgICAgICAgICAgICAgICAgICAgICAgJ25ldHdvcmtpbmcgZnJhbWV3b3JrICcKKyAgICAgICAgICAgICAgICAgICAgICAgICd3cml0dGVuIGluIFB5dGhvbicsCisgICAgICAgICAgICAgJ3ZlcnNpb24nOiAnMTIuMy4wJ30sCisgICAgJ3VybHMnOiBbey4uLn0sIHsuLi59XX0KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Byb2ZpbGUucnN0IGIvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QKaW5kZXggZjI0NTNmMS4uMjkyODgyMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHJvZmlsZS5yc3QKQEAgLTE3Miw3ICsxNzIsNyBAQAogZm9yIG9ubHkgdGhlIGNsYXNzIGluaXQgbWV0aG9kcyAoc2luY2UgdGhleSBhcmUgc3BlbGxlZCB3aXRoIGBgX19pbml0X19gYCBpbgogdGhlbSkuICBBcyBvbmUgZmluYWwgZXhhbXBsZSwgeW91IGNvdWxkIHRyeTo6CiAKLSAgIHAuc29ydF9zdGF0cygndGltZScsICdjdW0nKS5wcmludF9zdGF0cyguNSwgJ2luaXQnKQorICAgcC5zb3J0X3N0YXRzKCd0aW1lJywgJ2N1bXVsYXRpdmUnKS5wcmludF9zdGF0cyguNSwgJ2luaXQnKQogCiBUaGlzIGxpbmUgc29ydHMgc3RhdGlzdGljcyB3aXRoIGEgcHJpbWFyeSBrZXkgb2YgdGltZSwgYW5kIGEgc2Vjb25kYXJ5IGtleSBvZgogY3VtdWxhdGl2ZSB0aW1lLCBhbmQgdGhlbiBwcmludHMgb3V0IHNvbWUgb2YgdGhlIHN0YXRpc3RpY3MuIFRvIGJlIHNwZWNpZmljLCB0aGUKQEAgLTYzOCw3ICs2MzgsNyBAQAogCiAgICAgICBwciA9IGNQcm9maWxlLlByb2ZpbGUoeW91cl9pbnRlZ2VyX3RpbWVfZnVuYywgMC4wMDEpCiAKLSAgIEFzIHRoZSA6bW9kOmBjUHJvZmlsZS5Qcm9maWxlYCBjbGFzcyBjYW5ub3QgYmUgY2FsaWJyYXRlZCwgY3VzdG9tIHRpbWVyCisgICBBcyB0aGUgOmNsYXNzOmBjUHJvZmlsZS5Qcm9maWxlYCBjbGFzcyBjYW5ub3QgYmUgY2FsaWJyYXRlZCwgY3VzdG9tIHRpbWVyCiAgICBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXJlIGFuZCBzaG91bGQgYmUgYXMgZmFzdCBhcyBwb3NzaWJsZS4gIEZvcgogICAgdGhlIGJlc3QgcmVzdWx0cyB3aXRoIGEgY3VzdG9tIHRpbWVyLCBpdCBtaWdodCBiZSBuZWNlc3NhcnkgdG8gaGFyZC1jb2RlIGl0CiAgICBpbiB0aGUgQyBzb3VyY2Ugb2YgdGhlIGludGVybmFsIDptb2Q6YF9sc3Byb2ZgIG1vZHVsZS4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B0eS5yc3QgYi9Eb2MvbGlicmFyeS9wdHkucnN0CmluZGV4IDJiOTM4NWIuLmI4YTM4OTcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3B0eS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHR5LnJzdApAQCAtNDUsNiArNDUsOSBAQAogICAgYSBmaWxlIGRlc2NyaXB0b3IuIFRoZSBkZWZhdWx0cyB0cnkgdG8gcmVhZCAxMDI0IGJ5dGVzIGVhY2ggdGltZSB0aGV5IGFyZQogICAgY2FsbGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgOmZ1bmM6YHNwYXduYCBub3cgcmV0dXJucyB0aGUgc3RhdHVzIHZhbHVlIGZyb20gOmZ1bmM6YG9zLndhaXRwaWRgCisgICAgICBvbiB0aGUgY2hpbGQgcHJvY2Vzcy4KIAogRXhhbXBsZQogLS0tLS0tLQpAQCAtNTUsNDAgKzU4LDMyIEBACiBwc2V1ZG8tdGVybWluYWwgdG8gcmVjb3JkIGFsbCBpbnB1dCBhbmQgb3V0cHV0IG9mIGEgdGVybWluYWwgc2Vzc2lvbiBpbiBhCiAidHlwZXNjcmlwdCIuIDo6CiAKLSAgIGltcG9ydCBzeXMsIG9zLCB0aW1lLCBnZXRvcHQKLSAgIGltcG9ydCBwdHkKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBpbXBvcnQgb3MKKyAgICBpbXBvcnQgcHR5CisgICAgaW1wb3J0IHN5cworICAgIGltcG9ydCB0aW1lCiAKLSAgIG1vZGUgPSAnd2InCi0gICBzaGVsbCA9ICdzaCcKLSAgIGZpbGVuYW1lID0gJ3R5cGVzY3JpcHQnCi0gICBpZiAnU0hFTEwnIGluIG9zLmVudmlyb246Ci0gICAgICAgc2hlbGwgPSBvcy5lbnZpcm9uWydTSEVMTCddCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1hJywgZGVzdD0nYXBwZW5kJywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsIGRlc3Q9J3VzZV9weXRob24nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGVuYW1lJywgbmFyZ3M9Jz8nLCBkZWZhdWx0PSd0eXBlc2NyaXB0JykKKyAgICBvcHRpb25zID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogCi0gICB0cnk6Ci0gICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnYXAnKQotICAgZXhjZXB0IGdldG9wdC5lcnJvciBhcyBtc2c6Ci0gICAgICAgcHJpbnQoJyVzOiAlcycgJSAoc3lzLmFyZ3ZbMF0sIG1zZykpCi0gICAgICAgc3lzLmV4aXQoMikKKyAgICBzaGVsbCA9IHN5cy5leGVjdXRhYmxlIGlmIG9wdGlvbnMudXNlX3B5dGhvbiBlbHNlIG9zLmVudmlyb24uZ2V0KCdTSEVMTCcsICdzaCcpCisgICAgZmlsZW5hbWUgPSBvcHRpb25zLmZpbGVuYW1lCisgICAgbW9kZSA9ICdhYicgaWYgb3B0aW9ucy5hcHBlbmQgZWxzZSAnd2InCiAKLSAgIGZvciBvcHQsIGFyZyBpbiBvcHRzOgotICAgICAgICMgb3B0aW9uIC1hOiBhcHBlbmQgdG8gdHlwZXNjcmlwdCBmaWxlCi0gICAgICAgaWYgb3B0ID09ICctYSc6Ci0gICAgICAgICAgIG1vZGUgPSAnYWInCi0gICAgICAgIyBvcHRpb24gLXA6IHVzZSBhIFB5dGhvbiBzaGVsbCBhcyB0aGUgdGVybWluYWwgY29tbWFuZAotICAgICAgIGVsaWYgb3B0ID09ICctcCc6Ci0gICAgICAgICAgIHNoZWxsID0gc3lzLmV4ZWN1dGFibGUKLSAgIGlmIGFyZ3M6Ci0gICAgICAgZmlsZW5hbWUgPSBhcmdzWzBdCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCBtb2RlKSBhcyBzY3JpcHQ6CisgICAgICAgIGRlZiByZWFkKGZkKToKKyAgICAgICAgICAgIGRhdGEgPSBvcy5yZWFkKGZkLCAxMDI0KQorICAgICAgICAgICAgc2NyaXB0LndyaXRlKGRhdGEpCisgICAgICAgICAgICByZXR1cm4gZGF0YQogCi0gICBzY3JpcHQgPSBvcGVuKGZpbGVuYW1lLCBtb2RlKQorICAgICAgICBwcmludCgnU2NyaXB0IHN0YXJ0ZWQsIGZpbGUgaXMnLCBmaWxlbmFtZSkKKyAgICAgICAgc2NyaXB0LndyaXRlKCgnU2NyaXB0IHN0YXJ0ZWQgb24gJXNcbicgJSB0aW1lLmFzY3RpbWUoKSkuZW5jb2RlKCkpCiAKLSAgIGRlZiByZWFkKGZkKToKLSAgICAgICBkYXRhID0gb3MucmVhZChmZCwgMTAyNCkKLSAgICAgICBzY3JpcHQud3JpdGUoZGF0YSkKLSAgICAgICByZXR1cm4gZGF0YQorICAgICAgICBwdHkuc3Bhd24oc2hlbGwsIHJlYWQpCiAKLSAgIHN5cy5zdGRvdXQud3JpdGUoJ1NjcmlwdCBzdGFydGVkLCBmaWxlIGlzICVzXG4nICUgZmlsZW5hbWUpCi0gICBzY3JpcHQud3JpdGUoKCdTY3JpcHQgc3RhcnRlZCBvbiAlc1xuJyAlIHRpbWUuYXNjdGltZSgpKS5lbmNvZGUoKSkKLSAgIHB0eS5zcGF3bihzaGVsbCwgcmVhZCkKLSAgIHNjcmlwdC53cml0ZSgoJ1NjcmlwdCBkb25lIG9uICVzXG4nICUgdGltZS5hc2N0aW1lKCkpLmVuY29kZSgpKQotICAgc3lzLnN0ZG91dC53cml0ZSgnU2NyaXB0IGRvbmUsIGZpbGUgaXMgJXNcbicgJSBmaWxlbmFtZSkKKyAgICAgICAgc2NyaXB0LndyaXRlKCgnU2NyaXB0IGRvbmUgb24gJXNcbicgJSB0aW1lLmFzY3RpbWUoKSkuZW5jb2RlKCkpCisgICAgICAgIHByaW50KCdTY3JpcHQgZG9uZSwgZmlsZSBpcycsIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHlfY29tcGlsZS5yc3QgYi9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdAppbmRleCAwN2RkYzI1Li5iYWU4NDUwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weV9jb21waWxlLnJzdApAQCAtMjgsNyArMjgsNyBAQAogCiAuLiBmdW5jdGlvbjo6IGNvbXBpbGUoZmlsZSwgY2ZpbGU9Tm9uZSwgZGZpbGU9Tm9uZSwgZG9yYWlzZT1GYWxzZSwgb3B0aW1pemU9LTEpCiAKLSAgIENvbXBpbGUgYSBzb3VyY2UgZmlsZSB0byBieXRlLWNvZGUgYW5kIHdyaXRlIG91dCB0aGUgYnl0ZS1jb2RlIGNhY2hlICBmaWxlLgorICAgQ29tcGlsZSBhIHNvdXJjZSBmaWxlIHRvIGJ5dGUtY29kZSBhbmQgd3JpdGUgb3V0IHRoZSBieXRlLWNvZGUgY2FjaGUgZmlsZS4KICAgIFRoZSBzb3VyY2UgY29kZSBpcyBsb2FkZWQgZnJvbSB0aGUgZmlsZSBuYW1lICpmaWxlKi4gIFRoZSAgYnl0ZS1jb2RlIGlzCiAgICB3cml0dGVuIHRvICpjZmlsZSosIHdoaWNoIGRlZmF1bHRzIHRvIHRoZSA6UEVQOmAzMTQ3YCBwYXRoLCBlbmRpbmcgaW4KICAgIGBgLnB5Y2BgIChgYC5weW9gYCBpZiBvcHRpbWl6YXRpb24gaXMgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBpbnRlcnByZXRlcikuCkBAIC00MSw2ICs0MSwxMyBAQAogICAgaXMgcmFpc2VkLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBwYXRoIHRvIGJ5dGUtY29tcGlsZWQgZmlsZSwgaS5lLgogICAgd2hhdGV2ZXIgKmNmaWxlKiB2YWx1ZSB3YXMgdXNlZC4KIAorICAgSWYgdGhlIHBhdGggdGhhdCAqY2ZpbGUqIGJlY29tZXMgKGVpdGhlciBleHBsaWNpdGx5IHNwZWNpZmllZCBvciBjb21wdXRlZCkKKyAgIGlzIGEgc3ltbGluayBvciBub24tcmVndWxhciBmaWxlLCA6ZXhjOmBGaWxlRXhpc3RzRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgorICAgVGhpcyBpcyB0byBhY3QgYXMgYSB3YXJuaW5nIHRoYXQgaW1wb3J0IHdpbGwgdHVybiB0aG9zZSBwYXRocyBpbnRvIHJlZ3VsYXIKKyAgIGZpbGVzIGlmIGl0IGlzIGFsbG93ZWQgdG8gd3JpdGUgYnl0ZS1jb21waWxlZCBmaWxlcyB0byB0aG9zZSBwYXRocy4gVGhpcyBpcworICAgYSBzaWRlLWVmZmVjdCBvZiBpbXBvcnQgdXNpbmcgZmlsZSByZW5hbWluZyB0byBwbGFjZSB0aGUgZmluYWwgYnl0ZS1jb21waWxlZAorICAgZmlsZSBpbnRvIHBsYWNlIHRvIHByZXZlbnQgY29uY3VycmVudCBmaWxlIHdyaXRpbmcgaXNzdWVzLgorCiAgICAqb3B0aW1pemUqIGNvbnRyb2xzIHRoZSBvcHRpbWl6YXRpb24gbGV2ZWwgYW5kIGlzIHBhc3NlZCB0byB0aGUgYnVpbHQtaW4KICAgIDpmdW5jOmBjb21waWxlYCBmdW5jdGlvbi4gIFRoZSBkZWZhdWx0IG9mIGBgLTFgYCBzZWxlY3RzIHRoZSBvcHRpbWl6YXRpb24KICAgIGxldmVsIG9mIHRoZSBjdXJyZW50IGludGVycHJldGVyLgpAQCAtNTAsNiArNTcsMTMgQEAKICAgICAgIGRlZmF1bHQgd2FzICpmaWxlKiArIGBgJ2MnYGAgKGBgJ28nYGAgaWYgb3B0aW1pemF0aW9uIHdhcyBlbmFibGVkKS4KICAgICAgIEFsc28gYWRkZWQgdGhlICpvcHRpbWl6ZSogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQ2hhbmdlZCBjb2RlIHRvIHVzZSA6bW9kOmBpbXBvcnRsaWJgIGZvciB0aGUgYnl0ZS1jb2RlIGNhY2hlIGZpbGUgd3JpdGluZy4KKyAgICAgIFRoaXMgbWVhbnMgZmlsZSBjcmVhdGlvbi93cml0aW5nIHNlbWFudGljcyBub3cgbWF0Y2ggd2hhdCA6bW9kOmBpbXBvcnRsaWJgCisgICAgICBkb2VzLCBlLmcuIHBlcm1pc3Npb25zLCB3cml0ZS1hbmQtbW92ZSBzZW1hbnRpY3MsIGV0Yy4gQWxzbyBhZGRlZCB0aGUKKyAgICAgIGNhdmVhdCB0aGF0IDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaXMgcmFpc2VkIGlmICpjZmlsZSogaXMgYSBzeW1saW5rIG9yCisgICAgICBub24tcmVndWxhciBmaWxlLgorCiAKIC4uIGZ1bmN0aW9uOjogbWFpbihhcmdzPU5vbmUpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5ZG9jLnJzdCBiL0RvYy9saWJyYXJ5L3B5ZG9jLnJzdAppbmRleCBlMTAwODY1Li5iNWUzMjMzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9weWRvYy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlkb2MucnN0CkBAIC0yMCw2ICsyMCwxMyBAQAogbW9kdWxlcy4gIFRoZSBkb2N1bWVudGF0aW9uIGNhbiBiZSBwcmVzZW50ZWQgYXMgcGFnZXMgb2YgdGV4dCBvbiB0aGUgY29uc29sZSwKIHNlcnZlZCB0byBhIFdlYiBicm93c2VyLCBvciBzYXZlZCB0byBIVE1MIGZpbGVzLgogCitGb3IgbW9kdWxlcywgY2xhc3NlcywgZnVuY3Rpb25zIGFuZCBtZXRob2RzLCB0aGUgZGlzcGxheWVkIGRvY3VtZW50YXRpb24gaXMKK2Rlcml2ZWQgZnJvbSB0aGUgZG9jc3RyaW5nIChpLmUuIHRoZSA6YXR0cjpgX19kb2NfX2AgYXR0cmlidXRlKSBvZiB0aGUgb2JqZWN0LAorYW5kIHJlY3Vyc2l2ZWx5IG9mIGl0cyBkb2N1bWVudGFibGUgbWVtYmVycy4gIElmIHRoZXJlIGlzIG5vIGRvY3N0cmluZywKKzptb2Q6YHB5ZG9jYCB0cmllcyB0byBvYnRhaW4gYSBkZXNjcmlwdGlvbiBmcm9tIHRoZSBibG9jayBvZiBjb21tZW50IGxpbmVzIGp1c3QKK2Fib3ZlIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBjbGFzcywgZnVuY3Rpb24gb3IgbWV0aG9kIGluIHRoZSBzb3VyY2UgZmlsZSwgb3IgYXQKK3RoZSB0b3Agb2YgdGhlIG1vZHVsZSAoc2VlIDpmdW5jOmBpbnNwZWN0LmdldGNvbW1lbnRzYCkuCisKIFRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgaGVscGAgaW52b2tlcyB0aGUgb25saW5lIGhlbHAgc3lzdGVtIGluIHRoZQogaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIsIHdoaWNoIHVzZXMgOm1vZDpgcHlkb2NgIHRvIGdlbmVyYXRlIGl0cyBkb2N1bWVudGF0aW9uCiBhcyB0ZXh0IG9uIHRoZSBjb25zb2xlLiAgVGhlIHNhbWUgdGV4dCBkb2N1bWVudGF0aW9uIGNhbiBhbHNvIGJlIHZpZXdlZCBmcm9tCkBAIC00NCw2ICs1MSwxMCBAQAogICAgZXhlY3V0ZWQgb24gdGhhdCBvY2Nhc2lvbi4gIFVzZSBhbiBgYGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6YGAgZ3VhcmQgdG8KICAgIG9ubHkgZXhlY3V0ZSBjb2RlIHdoZW4gYSBmaWxlIGlzIGludm9rZWQgYXMgYSBzY3JpcHQgYW5kIG5vdCBqdXN0IGltcG9ydGVkLgogCitXaGVuIHByaW50aW5nIG91dHB1dCB0byB0aGUgY29uc29sZSwgOnByb2dyYW06YHB5ZG9jYCBhdHRlbXB0cyB0byBwYWdpbmF0ZSB0aGUKK291dHB1dCBmb3IgZWFzaWVyIHJlYWRpbmcuICBJZiB0aGUgOmVudnZhcjpgUEFHRVJgIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwKKzpwcm9ncmFtOmBweWRvY2Agd2lsbCB1c2UgaXRzIHZhbHVlIGFzIGEgcGFnaW5hdGlvbiBwcm9ncmFtLgorCiBTcGVjaWZ5aW5nIGEgYGAtd2BgIGZsYWcgYmVmb3JlIHRoZSBhcmd1bWVudCB3aWxsIGNhdXNlIEhUTUwgZG9jdW1lbnRhdGlvbgogdG8gYmUgd3JpdHRlbiBvdXQgdG8gYSBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgaW5zdGVhZCBvZiBkaXNwbGF5aW5nIHRleHQKIG9uIHRoZSBjb25zb2xlLgpAQCAtNTksMTEgKzcwLDYgQEAKIGRvY3VtZW50YXRpb24gYXQgYGBodHRwOi8vbG9jYWxob3N0OjEyMzQvYGAgaW4geW91ciBwcmVmZXJyZWQgV2ViIGJyb3dzZXIuCiBTcGVjaWZ5aW5nIGBgMGBgIGFzIHRoZSBwb3J0IG51bWJlciB3aWxsIHNlbGVjdCBhbiBhcmJpdHJhcnkgdW51c2VkIHBvcnQuCiAKLTpwcm9ncmFtOmBweWRvYyAtZ2Agd2lsbCBzdGFydCB0aGUgc2VydmVyIGFuZCBhZGRpdGlvbmFsbHkgYnJpbmcgdXAgYQotc21hbGwgOm1vZDpgdGtpbnRlcmBcIC1iYXNlZCBncmFwaGljYWwgaW50ZXJmYWNlIHRvIGhlbHAgeW91IHNlYXJjaCBmb3IKLWRvY3VtZW50YXRpb24gcGFnZXMuICBUaGUgYGAtZ2BgIG9wdGlvbiBpcyBkZXByZWNhdGVkLCBzaW5jZSB0aGUgc2VydmVyIGNhbgotbm93IGJlIGNvbnRyb2xsZWQgZGlyZWN0bHkgZnJvbSBIVFRQIGNsaWVudHMuCi0KIDpwcm9ncmFtOmBweWRvYyAtYmAgd2lsbCBzdGFydCB0aGUgc2VydmVyIGFuZCBhZGRpdGlvbmFsbHkgb3BlbiBhIHdlYgogYnJvd3NlciB0byBhIG1vZHVsZSBpbmRleCBwYWdlLiAgRWFjaCBzZXJ2ZWQgcGFnZSBoYXMgYSBuYXZpZ2F0aW9uIGJhciBhdCB0aGUKIHRvcCB3aGVyZSB5b3UgY2FuICpHZXQqIGhlbHAgb24gYW4gaW5kaXZpZHVhbCBpdGVtLCAqU2VhcmNoKiBhbGwgbW9kdWxlcyB3aXRoIGEKQEAgLTc2LDExICs4MiwxOSBAQAogUHl0aG9uIGludGVycHJldGVyIGFuZCB0eXBlZCBgYGltcG9ydCBzcGFtYGAuCiAKIE1vZHVsZSBkb2NzIGZvciBjb3JlIG1vZHVsZXMgYXJlIGFzc3VtZWQgdG8gcmVzaWRlIGluCi1gYGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvWC5ZL2xpYnJhcnkvYGAgd2hlcmUgYGBYYGAgYW5kIGBgWWBgIGFyZSB0aGUKK2BgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvWC5ZL2xpYnJhcnkvYGAgd2hlcmUgYGBYYGAgYW5kIGBgWWBgIGFyZSB0aGUKIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uIG51bWJlcnMgb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlci4gIFRoaXMgY2FuCiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIDplbnZ2YXI6YFBZVEhPTkRPQ1NgIGVudmlyb25tZW50IHZhcmlhYmxlCiB0byBhIGRpZmZlcmVudCBVUkwgb3IgdG8gYSBsb2NhbCBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgTGlicmFyeQogUmVmZXJlbmNlIE1hbnVhbCBwYWdlcy4KIAogLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjIKLSAgIEFkZGVkIHRoZSBgYC1iYGAgb3B0aW9uLCBkZXByZWNhdGVkIHRoZSBgYC1nYGAgb3B0aW9uLgorICAgQWRkZWQgdGhlIGBgLWJgYCBvcHRpb24uCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICBUaGUgYGAtZ2BgIGNvbW1hbmQgbGluZSBvcHRpb24gd2FzIHJlbW92ZWQuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICA6bW9kOmBweWRvY2Agbm93IHVzZXMgOmZ1bmM6YGluc3BlY3Quc2lnbmF0dXJlYCByYXRoZXIgdGhhbgorICAgOmZ1bmM6YGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWNgIHRvIGV4dHJhY3Qgc2lnbmF0dXJlIGluZm9ybWF0aW9uIGZyb20KKyAgIGNhbGxhYmxlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3B5ZXhwYXQucnN0IGIvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKaW5kZXggM2Q4OGQ4NS4uNjIwZmZiMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcHlleHBhdC5yc3QKQEAgLTEwMCw2ICsxMDAsMTEgQEAKICAgICAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9ucy8gZWxlbTEKICAgICAgIGVsZW0yCiAKKyAgIER1ZSB0byBsaW1pdGF0aW9ucyBpbiB0aGUgYGBFeHBhdGBgIGxpYnJhcnkgdXNlZCBieSA6bW9kOmBweWV4cGF0YCwKKyAgIHRoZSA6Y2xhc3M6YHhtbHBhcnNlcmAgaW5zdGFuY2UgcmV0dXJuZWQgY2FuIG9ubHkgYmUgdXNlZCB0byBwYXJzZSBhIHNpbmdsZQorICAgWE1MIGRvY3VtZW50LiAgQ2FsbCBgYFBhcnNlckNyZWF0ZWBgIGZvciBlYWNoIGRvY3VtZW50IHRvIHByb3ZpZGUgdW5pcXVlCisgICBwYXJzZXIgaW5zdGFuY2VzLgorCiAKIC4uIHNlZWFsc286OgogCkBAIC0xMTksNyArMTI0LDkgQEAKIAogICAgUGFyc2VzIHRoZSBjb250ZW50cyBvZiB0aGUgc3RyaW5nICpkYXRhKiwgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcgogICAgZnVuY3Rpb25zIHRvIHByb2Nlc3MgdGhlIHBhcnNlZCBkYXRhLiAgKmlzZmluYWwqIG11c3QgYmUgdHJ1ZSBvbiB0aGUgZmluYWwgY2FsbAotICAgdG8gdGhpcyBtZXRob2QuICAqZGF0YSogY2FuIGJlIHRoZSBlbXB0eSBzdHJpbmcgYXQgYW55IHRpbWUuCisgICB0byB0aGlzIG1ldGhvZDsgaXQgYWxsb3dzIHRoZSBwYXJzaW5nIG9mIGEgc2luZ2xlIGZpbGUgaW4gZnJhZ21lbnRzLAorICAgbm90IHRoZSBzdWJtaXNzaW9uIG9mIG11bHRpcGxlIGZpbGVzLgorICAgKmRhdGEqIGNhbiBiZSB0aGUgZW1wdHkgc3RyaW5nIGF0IGFueSB0aW1lLgogCiAKIC4uIG1ldGhvZDo6IHhtbHBhcnNlci5QYXJzZUZpbGUoZmlsZSkKQEAgLTc1Niw3ICs3NjMsNyBAQAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX1VOREVGSU5FRF9FTlRJVFkKIAotICAgQSByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gYSBlbnRpdHkgd2hpY2ggd2FzIG5vdCBkZWZpbmVkLgorICAgQSByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gYW4gZW50aXR5IHdoaWNoIHdhcyBub3QgZGVmaW5lZC4KIAogCiAuLiBkYXRhOjogWE1MX0VSUk9SX1VOS05PV05fRU5DT0RJTkcKQEAgLTg2MSw1ICs4NjgsNSBAQAogLi4gWyNdIFRoZSBlbmNvZGluZyBzdHJpbmcgaW5jbHVkZWQgaW4gWE1MIG91dHB1dCBzaG91bGQgY29uZm9ybSB0byB0aGUKICAgIGFwcHJvcHJpYXRlIHN0YW5kYXJkcy4gRm9yIGV4YW1wbGUsICJVVEYtOCIgaXMgdmFsaWQsIGJ1dCAiVVRGOCIgaXMKICAgIG5vdC4gU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKLSAgIGFuZCBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzXCAuCisgICBhbmQgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54aHRtbC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdCBiL0RvYy9saWJyYXJ5L3B5dGhvbi5yc3QKaW5kZXggYjY3ZmJmYy4uZjMwN2Q3ZCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcHl0aG9uLnJzdAorKysgYi9Eb2MvbGlicmFyeS9weXRob24ucnN0CkBAIC0yNSw0ICsyNSwzIEBACiAgICBpbnNwZWN0LnJzdAogICAgc2l0ZS5yc3QKICAgIGZwZWN0bC5yc3QKLSAgIGRpc3R1dGlscy5yc3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QgYi9Eb2MvbGlicmFyeS9xdW9wcmkucnN0CmluZGV4IDc1NTgxMWEuLjNhNzRjZjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3F1b3ByaS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcXVvcHJpLnJzdApAQCAtMjQsOSArMjQsOCBAQAogLi4gZnVuY3Rpb246OiBkZWNvZGUoaW5wdXQsIG91dHB1dCwgaGVhZGVyPUZhbHNlKQogCiAgICBEZWNvZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSAqaW5wdXQqIGZpbGUgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcgZGVjb2RlZCBiaW5hcnkKLSAgIGRhdGEgdG8gdGhlICpvdXRwdXQqIGZpbGUuICppbnB1dCogYW5kICpvdXRwdXQqIG11c3QgYmUgOnRlcm06YGZpbGUgb2JqZWN0cwotICAgPGZpbGUgb2JqZWN0PmAuICAqaW5wdXQqIHdpbGwgYmUgcmVhZCB1bnRpbCBgYGlucHV0LnJlYWRsaW5lKClgYCByZXR1cm5zIGFuCi0gICBlbXB0eSBzdHJpbmcuIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqaGVhZGVyKiBpcyBwcmVzZW50IGFuZCB0cnVlLCB1bmRlcnNjb3JlCisgICBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlIDp0ZXJtOmBiaW5hcnkgZmlsZSBvYmplY3RzCisgICA8ZmlsZSBvYmplY3Q+YC4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqaGVhZGVyKiBpcyBwcmVzZW50IGFuZCB0cnVlLCB1bmRlcnNjb3JlCiAgICB3aWxsIGJlIGRlY29kZWQgYXMgc3BhY2UuIFRoaXMgaXMgdXNlZCB0byBkZWNvZGUgIlEiLWVuY29kZWQgaGVhZGVycyBhcwogICAgZGVzY3JpYmVkIGluIDpyZmM6YDE1MjJgOiAiTUlNRSAoTXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9ucykKICAgIFBhcnQgVHdvOiBNZXNzYWdlIEhlYWRlciBFeHRlbnNpb25zIGZvciBOb24tQVNDSUkgVGV4dCIuCkBAIC0zNCwyNyArMzMsMjggQEAKIAogLi4gZnVuY3Rpb246OiBlbmNvZGUoaW5wdXQsIG91dHB1dCwgcXVvdGV0YWJzLCBoZWFkZXI9RmFsc2UpCiAKLSAgIEVuY29kZSB0aGUgY29udGVudHMgb2YgdGhlICppbnB1dCogZmlsZSBhbmQgd3JpdGUgdGhlIHJlc3VsdGluZyBxdW90ZWQtcHJpbnRhYmxlCi0gICBkYXRhIHRvIHRoZSAqb3V0cHV0KiBmaWxlLiAqaW5wdXQqIGFuZCAqb3V0cHV0KiBtdXN0IGJlIDp0ZXJtOmBmaWxlIG9iamVjdHMKLSAgIDxmaWxlIG9iamVjdD5gLiAgKmlucHV0KiB3aWxsIGJlIHJlYWQgdW50aWwgYGBpbnB1dC5yZWFkbGluZSgpYGAgcmV0dXJucyBhbgotICAgZW1wdHkgc3RyaW5nLiAqcXVvdGV0YWJzKiBpcyBhIGZsYWcgd2hpY2ggY29udHJvbHMgd2hldGhlciB0byBlbmNvZGUgZW1iZWRkZWQKLSAgIHNwYWNlcyBhbmQgdGFiczsgd2hlbiB0cnVlIGl0IGVuY29kZXMgc3VjaCBlbWJlZGRlZCB3aGl0ZXNwYWNlLCBhbmQgd2hlbgotICAgZmFsc2UgaXQgbGVhdmVzIHRoZW0gdW5lbmNvZGVkLiAgTm90ZSB0aGF0IHNwYWNlcyBhbmQgdGFicyBhcHBlYXJpbmcgYXQgdGhlCi0gICBlbmQgb2YgbGluZXMgYXJlIGFsd2F5cyBlbmNvZGVkLCBhcyBwZXIgOnJmYzpgMTUyMWAuICAqaGVhZGVyKiBpcyBhIGZsYWcKLSAgIHdoaWNoIGNvbnRyb2xzIGlmIHNwYWNlcyBhcmUgZW5jb2RlZCBhcyB1bmRlcnNjb3JlcyBhcyBwZXIgOnJmYzpgMTUyMmAuCisgICBFbmNvZGUgdGhlIGNvbnRlbnRzIG9mIHRoZSAqaW5wdXQqIGZpbGUgYW5kIHdyaXRlIHRoZSByZXN1bHRpbmcgcXVvdGVkLQorICAgcHJpbnRhYmxlIGRhdGEgdG8gdGhlICpvdXRwdXQqIGZpbGUuICppbnB1dCogYW5kICpvdXRwdXQqIG11c3QgYmUKKyAgIDp0ZXJtOmBiaW5hcnkgZmlsZSBvYmplY3RzIDxmaWxlIG9iamVjdD5gLiAqcXVvdGV0YWJzKiwgYSBmbGFnIHdoaWNoIGNvbnRyb2xzCisgICB3aGV0aGVyIHRvIGVuY29kZSBlbWJlZGRlZCBzcGFjZXMgYW5kIHRhYnMgbXVzdCBiZSBwcm92aWRlZGEgYW5kIHdoZW4gdHJ1ZSBpdAorICAgZW5jb2RlcyBzdWNoIGVtYmVkZGVkIHdoaXRlc3BhY2UsIGFuZCB3aGVuIGZhbHNlIGl0IGxlYXZlcyB0aGVtIHVuZW5jb2RlZC4KKyAgIE5vdGUgdGhhdCBzcGFjZXMgYW5kIHRhYnMgYXBwZWFyaW5nIGF0IHRoZSBlbmQgb2YgbGluZXMgYXJlIGFsd2F5cyBlbmNvZGVkLAorICAgYXMgcGVyIDpyZmM6YDE1MjFgLiAgKmhlYWRlciogaXMgYSBmbGFnIHdoaWNoIGNvbnRyb2xzIGlmIHNwYWNlcyBhcmUgZW5jb2RlZAorICAgYXMgdW5kZXJzY29yZXMgYXMgcGVyIDpyZmM6YDE1MjJgLgogCiAKIC4uIGZ1bmN0aW9uOjogZGVjb2Rlc3RyaW5nKHMsIGhlYWRlcj1GYWxzZSkKIAotICAgTGlrZSA6ZnVuYzpgZGVjb2RlYCwgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIHNvdXJjZSBzdHJpbmcgYW5kIHJldHVybnMgdGhlCi0gICBjb3JyZXNwb25kaW5nIGRlY29kZWQgc3RyaW5nLgorICAgTGlrZSA6ZnVuYzpgZGVjb2RlYCwgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIHNvdXJjZSA6Y2xhc3M6YGJ5dGVzYCBhbmQKKyAgIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgZGVjb2RlZCA6Y2xhc3M6YGJ5dGVzYC4KIAogCiAuLiBmdW5jdGlvbjo6IGVuY29kZXN0cmluZyhzLCBxdW90ZXRhYnM9RmFsc2UsIGhlYWRlcj1GYWxzZSkKIAotICAgTGlrZSA6ZnVuYzpgZW5jb2RlYCwgZXhjZXB0IHRoYXQgaXQgYWNjZXB0cyBhIHNvdXJjZSBzdHJpbmcgYW5kIHJldHVybnMgdGhlCi0gICBjb3JyZXNwb25kaW5nIGVuY29kZWQgc3RyaW5nLiAgKnF1b3RldGFicyogYW5kICpoZWFkZXIqIGFyZSBvcHRpb25hbAotICAgKGRlZmF1bHRpbmcgdG8gYGBGYWxzZWBgKSwgYW5kIGFyZSBwYXNzZWQgc3RyYWlnaHQgdGhyb3VnaCB0byA6ZnVuYzpgZW5jb2RlYC4KKyAgIExpa2UgOmZ1bmM6YGVuY29kZWAsIGV4Y2VwdCB0aGF0IGl0IGFjY2VwdHMgYSBzb3VyY2UgOmNsYXNzOmBieXRlc2AgYW5kCisgICByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGVuY29kZWQgOmNsYXNzOmBieXRlc2AuIEJ5IGRlZmF1bHQsIGl0IHNlbmRzIGEKKyAgIEZhbHNlIHZhbHVlIHRvICpxdW90ZXRhYnMqIHBhcmFtZXRlciBvZiB0aGUgOmZ1bmM6YGVuY29kZWAgZnVuY3Rpb24uCisKIAogCiAuLiBzZWVhbHNvOjoKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3JlLnJzdCBiL0RvYy9saWJyYXJ5L3JlLnJzdAppbmRleCBkZDc5MGU3Li5jYWU2ODc0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9yZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvcmUucnN0CkBAIC0zOCwxMyArMzgsNiBAQAogdGhhdCBkb24ndCByZXF1aXJlIHlvdSB0byBjb21waWxlIGEgcmVnZXggb2JqZWN0IGZpcnN0LCBidXQgbWlzcyBzb21lCiBmaW5lLXR1bmluZyBwYXJhbWV0ZXJzLgogCi0uLiBzZWVhbHNvOjoKLQotICAgTWFzdGVyaW5nIFJlZ3VsYXIgRXhwcmVzc2lvbnMKLSAgICAgIEJvb2sgb24gcmVndWxhciBleHByZXNzaW9ucyBieSBKZWZmcmV5IEZyaWVkbCwgcHVibGlzaGVkIGJ5IE8nUmVpbGx5LiAgVGhlCi0gICAgICBzZWNvbmQgZWRpdGlvbiBvZiB0aGUgYm9vayBubyBsb25nZXIgY292ZXJzIFB5dGhvbiBhdCBhbGwsIGJ1dCB0aGUgZmlyc3QKLSAgICAgIGVkaXRpb24gY292ZXJlZCB3cml0aW5nIGdvb2QgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm5zIGluIGdyZWF0IGRldGFpbC4KLQogCiAuLiBfcmUtc3ludGF4OgogCkBAIC0yODgsNyArMjgxLDkgQEAKICAgIGFzc2VydGlvbmAuIGBgKD88PWFiYylkZWZgYCB3aWxsIGZpbmQgYSBtYXRjaCBpbiBgYGFiY2RlZmBgLCBzaW5jZSB0aGUKICAgIGxvb2tiZWhpbmQgd2lsbCBiYWNrIHVwIDMgY2hhcmFjdGVycyBhbmQgY2hlY2sgaWYgdGhlIGNvbnRhaW5lZCBwYXR0ZXJuIG1hdGNoZXMuCiAgICBUaGUgY29udGFpbmVkIHBhdHRlcm4gbXVzdCBvbmx5IG1hdGNoIHN0cmluZ3Mgb2Ygc29tZSBmaXhlZCBsZW5ndGgsIG1lYW5pbmcgdGhhdAotICAgYGBhYmNgYCBvciBgYGF8YmBgIGFyZSBhbGxvd2VkLCBidXQgYGBhKmBgIGFuZCBgYGF7Myw0fWBgIGFyZSBub3QuICBOb3RlIHRoYXQKKyAgIGBgYWJjYGAgb3IgYGBhfGJgYCBhcmUgYWxsb3dlZCwgYnV0IGBgYSpgYCBhbmQgYGBhezMsNH1gYCBhcmUgbm90LiAgR3JvdXAKKyAgIHJlZmVyZW5jZXMgYXJlIG5vdCBzdXBwb3J0ZWQgZXZlbiBpZiB0aGV5IG1hdGNoIHN0cmluZ3Mgb2Ygc29tZSBmaXhlZCBsZW5ndGguCisgICBOb3RlIHRoYXQKICAgIHBhdHRlcm5zIHdoaWNoIHN0YXJ0IHdpdGggcG9zaXRpdmUgbG9va2JlaGluZCBhc3NlcnRpb25zIHdpbGwgbm90IG1hdGNoIGF0IHRoZQogICAgYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcgYmVpbmcgc2VhcmNoZWQ7IHlvdSB3aWxsIG1vc3QgbGlrZWx5IHdhbnQgdG8gdXNlIHRoZQogICAgOmZ1bmM6YHNlYXJjaGAgZnVuY3Rpb24gcmF0aGVyIHRoYW4gdGhlIDpmdW5jOmBtYXRjaGAgZnVuY3Rpb246CkBAIC0zMDgsNyArMzAzLDggQEAKICAgIE1hdGNoZXMgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIHN0cmluZyBpcyBub3QgcHJlY2VkZWQgYnkgYSBtYXRjaCBmb3IKICAgIGBgLi4uYGAuICBUaGlzIGlzIGNhbGxlZCBhIDpkZm46YG5lZ2F0aXZlIGxvb2tiZWhpbmQgYXNzZXJ0aW9uYC4gIFNpbWlsYXIgdG8KICAgIHBvc2l0aXZlIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucywgdGhlIGNvbnRhaW5lZCBwYXR0ZXJuIG11c3Qgb25seSBtYXRjaCBzdHJpbmdzIG9mCi0gICBzb21lIGZpeGVkIGxlbmd0aC4gIFBhdHRlcm5zIHdoaWNoIHN0YXJ0IHdpdGggbmVnYXRpdmUgbG9va2JlaGluZCBhc3NlcnRpb25zIG1heQorICAgc29tZSBmaXhlZCBsZW5ndGggYW5kIHNob3VsZG4ndCBjb250YWluIGdyb3VwIHJlZmVyZW5jZXMuCisgICBQYXR0ZXJucyB3aGljaCBzdGFydCB3aXRoIG5lZ2F0aXZlIGxvb2tiZWhpbmQgYXNzZXJ0aW9ucyBtYXkKICAgIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmluZyBiZWluZyBzZWFyY2hlZC4KIAogYGAoPyhpZC9uYW1lKXllcy1wYXR0ZXJufG5vLXBhdHRlcm4pYGAKQEAgLTQ0Myw2ICs0MzksMTQgQEAKICAgIFRoZSBgYCdcdSdgYCBhbmQgYGAnXFUnYGAgZXNjYXBlIHNlcXVlbmNlcyBoYXZlIGJlZW4gYWRkZWQuCiAKIAorLi4gc2VlYWxzbzo6CisKKyAgIE1hc3RlcmluZyBSZWd1bGFyIEV4cHJlc3Npb25zCisgICAgICBCb29rIG9uIHJlZ3VsYXIgZXhwcmVzc2lvbnMgYnkgSmVmZnJleSBGcmllZGwsIHB1Ymxpc2hlZCBieSBPJ1JlaWxseS4gIFRoZQorICAgICAgc2Vjb25kIGVkaXRpb24gb2YgdGhlIGJvb2sgbm8gbG9uZ2VyIGNvdmVycyBQeXRob24gYXQgYWxsLCBidXQgdGhlIGZpcnN0CisgICAgICBlZGl0aW9uIGNvdmVyZWQgd3JpdGluZyBnb29kIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJucyBpbiBncmVhdCBkZXRhaWwuCisKKwogCiAuLiBfY29udGVudHMtb2YtbW9kdWxlLXJlOgogCkBAIC00NTgsOCArNDYyLDggQEAKIC4uIGZ1bmN0aW9uOjogY29tcGlsZShwYXR0ZXJuLCBmbGFncz0wKQogCiAgICBDb21waWxlIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gaW50byBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3QsIHdoaWNoCi0gICBjYW4gYmUgdXNlZCBmb3IgbWF0Y2hpbmcgdXNpbmcgaXRzIDpmdW5jOmBtYXRjaGAgYW5kIDpmdW5jOmBzZWFyY2hgIG1ldGhvZHMsCi0gICBkZXNjcmliZWQgYmVsb3cuCisgICBjYW4gYmUgdXNlZCBmb3IgbWF0Y2hpbmcgdXNpbmcgaXRzIDpmdW5jOmB+cmVnZXgubWF0Y2hgIGFuZAorICAgOmZ1bmM6YH5yZWdleC5zZWFyY2hgIG1ldGhvZHMsIGRlc2NyaWJlZCBiZWxvdy4KIAogICAgVGhlIGV4cHJlc3Npb24ncyBiZWhhdmlvdXIgY2FuIGJlIG1vZGlmaWVkIGJ5IHNwZWNpZnlpbmcgYSAqZmxhZ3MqIHZhbHVlLgogICAgVmFsdWVzIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMsIGNvbWJpbmVkIHVzaW5nIGJpdHdpc2UgT1IgKHRoZQpAQCAtNDgxLDcgKzQ4NSw3IEBACiAgICAuLiBub3RlOjoKIAogICAgICAgVGhlIGNvbXBpbGVkIHZlcnNpb25zIG9mIHRoZSBtb3N0IHJlY2VudCBwYXR0ZXJucyBwYXNzZWQgdG8KLSAgICAgIDpmdW5jOmByZS5tYXRjaGAsIDpmdW5jOmByZS5zZWFyY2hgIG9yIDpmdW5jOmByZS5jb21waWxlYCBhcmUgY2FjaGVkLCBzbworICAgICAgOmZ1bmM6YHJlLmNvbXBpbGVgIGFuZCB0aGUgbW9kdWxlLWxldmVsIG1hdGNoaW5nIGZ1bmN0aW9ucyBhcmUgY2FjaGVkLCBzbwogICAgICAgcHJvZ3JhbXMgdGhhdCB1c2Ugb25seSBhIGZldyByZWd1bGFyIGV4cHJlc3Npb25zIGF0IGEgdGltZSBuZWVkbid0IHdvcnJ5CiAgICAgICBhYm91dCBjb21waWxpbmcgcmVndWxhciBleHByZXNzaW9ucy4KIApAQCAtNTQ0LDEzICs1NDgsMTUgQEAKIC4uIGRhdGE6OiBYCiAgICAgICAgICAgVkVSQk9TRQogCi0gICBUaGlzIGZsYWcgYWxsb3dzIHlvdSB0byB3cml0ZSByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbG9vayBuaWNlci4gV2hpdGVzcGFjZQotICAgd2l0aGluIHRoZSBwYXR0ZXJuIGlzIGlnbm9yZWQsIGV4Y2VwdCB3aGVuIGluIGEgY2hhcmFjdGVyIGNsYXNzIG9yIHByZWNlZGVkIGJ5Ci0gICBhbiB1bmVzY2FwZWQgYmFja3NsYXNoLCBhbmQsIHdoZW4gYSBsaW5lIGNvbnRhaW5zIGEgYGAnIydgYCBuZWl0aGVyIGluIGEKLSAgIGNoYXJhY3RlciBjbGFzcyBvciBwcmVjZWRlZCBieSBhbiB1bmVzY2FwZWQgYmFja3NsYXNoLCBhbGwgY2hhcmFjdGVycyBmcm9tIHRoZQotICAgbGVmdG1vc3Qgc3VjaCBgYCcjJ2BgIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgbGluZSBhcmUgaWdub3JlZC4KKyAgIFRoaXMgZmxhZyBhbGxvd3MgeW91IHRvIHdyaXRlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBsb29rIG5pY2VyIGFuZCBhcmUKKyAgIG1vcmUgcmVhZGFibGUgYnkgYWxsb3dpbmcgeW91IHRvIHZpc3VhbGx5IHNlcGFyYXRlIGxvZ2ljYWwgc2VjdGlvbnMgb2YgdGhlCisgICBwYXR0ZXJuIGFuZCBhZGQgY29tbWVudHMuIFdoaXRlc3BhY2Ugd2l0aGluIHRoZSBwYXR0ZXJuIGlzIGlnbm9yZWQsIGV4Y2VwdAorICAgd2hlbiBpbiBhIGNoYXJhY3RlciBjbGFzcyBvciB3aGVuIHByZWNlZGVkIGJ5IGFuIHVuZXNjYXBlZCBiYWNrc2xhc2guCisgICBXaGVuIGEgbGluZSBjb250YWlucyBhIGBgI2BgIHRoYXQgaXMgbm90IGluIGEgY2hhcmFjdGVyIGNsYXNzIGFuZCBpcyBub3QKKyAgIHByZWNlZGVkIGJ5IGFuIHVuZXNjYXBlZCBiYWNrc2xhc2gsIGFsbCBjaGFyYWN0ZXJzIGZyb20gdGhlIGxlZnRtb3N0IHN1Y2gKKyAgIGBgI2BgIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgbGluZSBhcmUgaWdub3JlZC4KIAotICAgVGhhdCBtZWFucyB0aGF0IHRoZSB0d28gZm9sbG93aW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzIHRoYXQgbWF0Y2ggYQorICAgVGhpcyBtZWFucyB0aGF0IHRoZSB0d28gZm9sbG93aW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBvYmplY3RzIHRoYXQgbWF0Y2ggYQogICAgZGVjaW1hbCBudW1iZXIgYXJlIGZ1bmN0aW9uYWxseSBlcXVhbDo6CiAKICAgICAgIGEgPSByZS5jb21waWxlKHIiIiJcZCArICAjIHRoZSBpbnRlZ3JhbCBwYXJ0CkBAIC01NjMsNyArNTY5LDcgQEAKIAogLi4gZnVuY3Rpb246OiBzZWFyY2gocGF0dGVybiwgc3RyaW5nLCBmbGFncz0wKQogCi0gICBTY2FuIHRocm91Z2ggKnN0cmluZyogbG9va2luZyBmb3IgYSBsb2NhdGlvbiB3aGVyZSB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICBTY2FuIHRocm91Z2ggKnN0cmluZyogbG9va2luZyBmb3IgdGhlIGZpcnN0IGxvY2F0aW9uIHdoZXJlIHRoZSByZWd1bGFyIGV4cHJlc3Npb24KICAgICpwYXR0ZXJuKiBwcm9kdWNlcyBhIG1hdGNoLCBhbmQgcmV0dXJuIGEgY29ycmVzcG9uZGluZyA6cmVmOmBtYXRjaCBvYmplY3QKICAgIDxtYXRjaC1vYmplY3RzPmAuICBSZXR1cm4gYGBOb25lYGAgaWYgbm8gcG9zaXRpb24gaW4gdGhlIHN0cmluZyBtYXRjaGVzIHRoZQogICAgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gZmluZGluZyBhIHplcm8tbGVuZ3RoIG1hdGNoIGF0IHNvbWUKQEAgLTU4NCw2ICs1OTAsMTYgQEAKICAgIGluc3RlYWQgKHNlZSBhbHNvIDpyZWY6YHNlYXJjaC12cy1tYXRjaGApLgogCiAKKy4uIGZ1bmN0aW9uOjogZnVsbG1hdGNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3M9MCkKKworICAgSWYgdGhlIHdob2xlICpzdHJpbmcqIG1hdGNoZXMgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAqcGF0dGVybiosIHJldHVybiBhCisgICBjb3JyZXNwb25kaW5nIDpyZWY6YG1hdGNoIG9iamVjdCA8bWF0Y2gtb2JqZWN0cz5gLiAgUmV0dXJuIGBgTm9uZWBgIGlmIHRoZQorICAgc3RyaW5nIGRvZXMgbm90IG1hdGNoIHRoZSBwYXR0ZXJuOyBub3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhCisgICB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzcGxpdChwYXR0ZXJuLCBzdHJpbmcsIG1heHNwbGl0PTAsIGZsYWdzPTApCiAKICAgIFNwbGl0ICpzdHJpbmcqIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiAqcGF0dGVybiouICBJZiBjYXB0dXJpbmcgcGFyZW50aGVzZXMgYXJlCkBAIC03NTUsNyArNzcxLDcgQEAKIAogICAgPj4+IHBhdHRlcm4gPSByZS5jb21waWxlKCJkIikKICAgID4+PiBwYXR0ZXJuLnNlYXJjaCgiZG9nIikgICAgICMgTWF0Y2ggYXQgaW5kZXggMAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCAxKSwgbWF0Y2g9J2QnPgogICAgPj4+IHBhdHRlcm4uc2VhcmNoKCJkb2ciLCAxKSAgIyBObyBtYXRjaDsgc2VhcmNoIGRvZXNuJ3QgaW5jbHVkZSB0aGUgImQiCiAKIApAQCAtNzcyLDEyICs3ODgsMzAgQEAKICAgID4+PiBwYXR0ZXJuID0gcmUuY29tcGlsZSgibyIpCiAgICA+Pj4gcGF0dGVybi5tYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgogICAgPj4+IHBhdHRlcm4ubWF0Y2goImRvZyIsIDEpICAgIyBNYXRjaCBhcyAibyIgaXMgdGhlIDJuZCBjaGFyYWN0ZXIgb2YgImRvZyIuCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDEsIDIpLCBtYXRjaD0nbyc+CiAKICAgIElmIHlvdSB3YW50IHRvIGxvY2F0ZSBhIG1hdGNoIGFueXdoZXJlIGluICpzdHJpbmcqLCB1c2UKICAgIDptZXRoOmB+cmVnZXguc2VhcmNoYCBpbnN0ZWFkIChzZWUgYWxzbyA6cmVmOmBzZWFyY2gtdnMtbWF0Y2hgKS4KIAogCisuLiBtZXRob2Q6OiByZWdleC5mdWxsbWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pCisKKyAgIElmIHRoZSB3aG9sZSAqc3RyaW5nKiBtYXRjaGVzIHRoaXMgcmVndWxhciBleHByZXNzaW9uLCByZXR1cm4gYSBjb3JyZXNwb25kaW5nCisgICA6cmVmOmBtYXRjaCBvYmplY3QgPG1hdGNoLW9iamVjdHM+YC4gIFJldHVybiBgYE5vbmVgYCBpZiB0aGUgc3RyaW5nIGRvZXMgbm90CisgICBtYXRjaCB0aGUgcGF0dGVybjsgbm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gYSB6ZXJvLWxlbmd0aCBtYXRjaC4KKworICAgVGhlIG9wdGlvbmFsICpwb3MqIGFuZCAqZW5kcG9zKiBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgdGhlCisgICA6bWV0aDpgfnJlZ2V4LnNlYXJjaGAgbWV0aG9kLgorCisgICA+Pj4gcGF0dGVybiA9IHJlLmNvbXBpbGUoIm9bZ2hdIikKKyAgID4+PiBwYXR0ZXJuLmZ1bGxtYXRjaCgiZG9nIikgICAgICAjIE5vIG1hdGNoIGFzICJvIiBpcyBub3QgYXQgdGhlIHN0YXJ0IG9mICJkb2ciLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJvZ3JlIikgICAgICMgTm8gbWF0Y2ggYXMgbm90IHRoZSBmdWxsIHN0cmluZyBtYXRjaGVzLgorICAgPj4+IHBhdHRlcm4uZnVsbG1hdGNoKCJkb2dnaWUiLCAxLCAzKSAgICMgTWF0Y2hlcyB3aXRoaW4gZ2l2ZW4gbGltaXRzLgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMSwgMyksIG1hdGNoPSdvZyc+CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IHJlZ2V4LnNwbGl0KHN0cmluZywgbWF4c3BsaXQ9MCkKIAogICAgSWRlbnRpY2FsIHRvIHRoZSA6ZnVuYzpgc3BsaXRgIGZ1bmN0aW9uLCB1c2luZyB0aGUgY29tcGlsZWQgcGF0dGVybi4KQEAgLTExMzksNyArMTE3Myw3IEBACiAKICAgID4+PiByZS5tYXRjaCgiYyIsICJhYmNkZWYiKSAgIyBObyBtYXRjaAogICAgPj4+IHJlLnNlYXJjaCgiYyIsICJhYmNkZWYiKSAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDIsIDMpLCBtYXRjaD0nYyc+CiAKIFJlZ3VsYXIgZXhwcmVzc2lvbnMgYmVnaW5uaW5nIHdpdGggYGAnXidgYCBjYW4gYmUgdXNlZCB3aXRoIDpmdW5jOmBzZWFyY2hgIHRvCiByZXN0cmljdCB0aGUgbWF0Y2ggYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nOjoKQEAgLTExNDcsNyArMTE4MSw3IEBACiAgICA+Pj4gcmUubWF0Y2goImMiLCAiYWJjZGVmIikgICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5jIiwgImFiY2RlZiIpICMgTm8gbWF0Y2gKICAgID4+PiByZS5zZWFyY2goIl5hIiwgImFiY2RlZiIpICAjIE1hdGNoCi0gICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0IGF0IC4uLj4KKyAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3Q7IHNwYW49KDAsIDEpLCBtYXRjaD0nYSc+CiAKIE5vdGUgaG93ZXZlciB0aGF0IGluIDpjb25zdDpgTVVMVElMSU5FYCBtb2RlIDpmdW5jOmBtYXRjaGAgb25seSBtYXRjaGVzIGF0IHRoZQogYmVnaW5uaW5nIG9mIHRoZSBzdHJpbmcsIHdoZXJlYXMgdXNpbmcgOmZ1bmM6YHNlYXJjaGAgd2l0aCBhIHJlZ3VsYXIgZXhwcmVzc2lvbgpAQCAtMTE1NSw3ICsxMTg5LDcgQEAKIAogICAgPj4+IHJlLm1hdGNoKCdYJywgJ0FcbkJcblgnLCByZS5NVUxUSUxJTkUpICAjIE5vIG1hdGNoCiAgICA+Pj4gcmUuc2VhcmNoKCdeWCcsICdBXG5CXG5YJywgcmUuTVVMVElMSU5FKSAgIyBNYXRjaAotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSg0LCA1KSwgbWF0Y2g9J1gnPgogCiAKIE1ha2luZyBhIFBob25lYm9vawpAQCAtMTI3NCw5ICsxMzA4LDkgQEAKIGZ1bmN0aW9uYWxseSBpZGVudGljYWw6CiAKICAgID4+PiByZS5tYXRjaChyIlxXKC4pXDFcVyIsICIgZmYgIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgNCksIG1hdGNoPScgZmYgJz4KICAgID4+PiByZS5tYXRjaCgiXFxXKC4pXFwxXFxXIiwgIiBmZiAiKQotICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdCBhdCAuLi4+CisgICA8X3NyZS5TUkVfTWF0Y2ggb2JqZWN0OyBzcGFuPSgwLCA0KSwgbWF0Y2g9JyBmZiAnPgogCiBXaGVuIG9uZSB3YW50cyB0byBtYXRjaCBhIGxpdGVyYWwgYmFja3NsYXNoLCBpdCBtdXN0IGJlIGVzY2FwZWQgaW4gdGhlIHJlZ3VsYXIKIGV4cHJlc3Npb24uICBXaXRoIHJhdyBzdHJpbmcgbm90YXRpb24sIHRoaXMgbWVhbnMgYGByIlxcImBgLiAgV2l0aG91dCByYXcgc3RyaW5nCkBAIC0xMjg0LDkgKzEzMTgsOSBAQAogZnVuY3Rpb25hbGx5IGlkZW50aWNhbDoKIAogICAgPj4+IHJlLm1hdGNoKHIiXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAgICA+Pj4gcmUubWF0Y2goIlxcXFwiLCByIlxcIikKLSAgIDxfc3JlLlNSRV9NYXRjaCBvYmplY3QgYXQgLi4uPgorICAgPF9zcmUuU1JFX01hdGNoIG9iamVjdDsgc3Bhbj0oMCwgMSksIG1hdGNoPSdcXCc+CiAKIAogV3JpdGluZyBhIFRva2VuaXplcgpAQCAtMTMwNSwzNiArMTMzOSwzNiBAQAogCiAgICAgVG9rZW4gPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCdUb2tlbicsIFsndHlwJywgJ3ZhbHVlJywgJ2xpbmUnLCAnY29sdW1uJ10pCiAKLSAgICBkZWYgdG9rZW5pemUocyk6CisgICAgZGVmIHRva2VuaXplKGNvZGUpOgogICAgICAgICBrZXl3b3JkcyA9IHsnSUYnLCAnVEhFTicsICdFTkRJRicsICdGT1InLCAnTkVYVCcsICdHT1NVQicsICdSRVRVUk4nfQogICAgICAgICB0b2tlbl9zcGVjaWZpY2F0aW9uID0gWwogICAgICAgICAgICAgKCdOVU1CRVInLCAgcidcZCsoXC5cZCopPycpLCAjIEludGVnZXIgb3IgZGVjaW1hbCBudW1iZXIKICAgICAgICAgICAgICgnQVNTSUdOJywgIHInOj0nKSwgICAgICAgICAgIyBBc3NpZ25tZW50IG9wZXJhdG9yCiAgICAgICAgICAgICAoJ0VORCcsICAgICByJzsnKSwgICAgICAgICAgICMgU3RhdGVtZW50IHRlcm1pbmF0b3IKICAgICAgICAgICAgICgnSUQnLCAgICAgIHInW0EtWmEtel0rJyksICAgIyBJZGVudGlmaWVycwotICAgICAgICAgICAgKCdPUCcsICAgICAgcidbKypcL1wtXScpLCAgICAjIEFyaXRobWV0aWMgb3BlcmF0b3JzCisgICAgICAgICAgICAoJ09QJywgICAgICByJ1srXC0qL10nKSwgICAgICMgQXJpdGhtZXRpYyBvcGVyYXRvcnMKICAgICAgICAgICAgICgnTkVXTElORScsIHInXG4nKSwgICAgICAgICAgIyBMaW5lIGVuZGluZ3MKLSAgICAgICAgICAgICgnU0tJUCcsICAgIHInWyBcdF0nKSwgICAgICAgIyBTa2lwIG92ZXIgc3BhY2VzIGFuZCB0YWJzCisgICAgICAgICAgICAoJ1NLSVAnLCAgICByJ1sgXHRdKycpLCAgICAgICMgU2tpcCBvdmVyIHNwYWNlcyBhbmQgdGFicworICAgICAgICAgICAgKCdNSVNNQVRDSCcscicuJyksICAgICAgICAgICAjIEFueSBvdGhlciBjaGFyYWN0ZXIKICAgICAgICAgXQogICAgICAgICB0b2tfcmVnZXggPSAnfCcuam9pbignKD9QPCVzPiVzKScgJSBwYWlyIGZvciBwYWlyIGluIHRva2VuX3NwZWNpZmljYXRpb24pCi0gICAgICAgIGdldF90b2tlbiA9IHJlLmNvbXBpbGUodG9rX3JlZ2V4KS5tYXRjaAotICAgICAgICBsaW5lID0gMQotICAgICAgICBwb3MgPSBsaW5lX3N0YXJ0ID0gMAotICAgICAgICBtbyA9IGdldF90b2tlbihzKQotICAgICAgICB3aGlsZSBtbyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHR5cCA9IG1vLmxhc3Rncm91cAotICAgICAgICAgICAgaWYgdHlwID09ICdORVdMSU5FJzoKLSAgICAgICAgICAgICAgICBsaW5lX3N0YXJ0ID0gcG9zCi0gICAgICAgICAgICAgICAgbGluZSArPSAxCi0gICAgICAgICAgICBlbGlmIHR5cCAhPSAnU0tJUCc6Ci0gICAgICAgICAgICAgICAgdmFsID0gbW8uZ3JvdXAodHlwKQotICAgICAgICAgICAgICAgIGlmIHR5cCA9PSAnSUQnIGFuZCB2YWwgaW4ga2V5d29yZHM6Ci0gICAgICAgICAgICAgICAgICAgIHR5cCA9IHZhbAotICAgICAgICAgICAgICAgIHlpZWxkIFRva2VuKHR5cCwgdmFsLCBsaW5lLCBtby5zdGFydCgpLWxpbmVfc3RhcnQpCi0gICAgICAgICAgICBwb3MgPSBtby5lbmQoKQotICAgICAgICAgICAgbW8gPSBnZXRfdG9rZW4ocywgcG9zKQotICAgICAgICBpZiBwb3MgIT0gbGVuKHMpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdVbmV4cGVjdGVkIGNoYXJhY3RlciAlciBvbiBsaW5lICVkJyAlKHNbcG9zXSwgbGluZSkpCisgICAgICAgIGxpbmVfbnVtID0gMQorICAgICAgICBsaW5lX3N0YXJ0ID0gMAorICAgICAgICBmb3IgbW8gaW4gcmUuZmluZGl0ZXIodG9rX3JlZ2V4LCBjb2RlKToKKyAgICAgICAgICAgIGtpbmQgPSBtby5sYXN0Z3JvdXAKKyAgICAgICAgICAgIHZhbHVlID0gbW8uZ3JvdXAoa2luZCkKKyAgICAgICAgICAgIGlmIGtpbmQgPT0gJ05FV0xJTkUnOgorICAgICAgICAgICAgICAgIGxpbmVfc3RhcnQgPSBtby5lbmQoKQorICAgICAgICAgICAgICAgIGxpbmVfbnVtICs9IDEKKyAgICAgICAgICAgIGVsaWYga2luZCA9PSAnU0tJUCc6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZiBraW5kID09ICdNSVNNQVRDSCc6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCclciB1bmV4cGVjdGVkIG9uIGxpbmUgJWQnICUgKHZhbHVlLCBsaW5lX251bSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGlmIGtpbmQgPT0gJ0lEJyBhbmQgdmFsdWUgaW4ga2V5d29yZHM6CisgICAgICAgICAgICAgICAgICAgIGtpbmQgPSB2YWx1ZQorICAgICAgICAgICAgICAgIGNvbHVtbiA9IG1vLnN0YXJ0KCkgLSBsaW5lX3N0YXJ0CisgICAgICAgICAgICAgICAgeWllbGQgVG9rZW4oa2luZCwgdmFsdWUsIGxpbmVfbnVtLCBjb2x1bW4pCiAKICAgICBzdGF0ZW1lbnRzID0gJycnCiAgICAgICAgIElGIHF1YW50aXR5IFRIRU4KQEAgLTEzNDgsMjIgKzEzODIsMjIgQEAKIAogVGhlIHRva2VuaXplciBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIG91dHB1dDo6CiAKLSAgICBUb2tlbih0eXA9J0lGJywgdmFsdWU9J0lGJywgbGluZT0yLCBjb2x1bW49NSkKLSAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3F1YW50aXR5JywgbGluZT0yLCBjb2x1bW49OCkKLSAgICBUb2tlbih0eXA9J1RIRU4nLCB2YWx1ZT0nVEhFTicsIGxpbmU9MiwgY29sdW1uPTE3KQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ndG90YWwnLCBsaW5lPTMsIGNvbHVtbj05KQotICAgIFRva2VuKHR5cD0nQVNTSUdOJywgdmFsdWU9Jzo9JywgbGluZT0zLCBjb2x1bW49MTUpCi0gICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0b3RhbCcsIGxpbmU9MywgY29sdW1uPTE4KQotICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKycsIGxpbmU9MywgY29sdW1uPTI0KQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncHJpY2UnLCBsaW5lPTMsIGNvbHVtbj0yNikKLSAgICBUb2tlbih0eXA9J09QJywgdmFsdWU9JyonLCBsaW5lPTMsIGNvbHVtbj0zMikKLSAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3F1YW50aXR5JywgbGluZT0zLCBjb2x1bW49MzQpCi0gICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9MywgY29sdW1uPTQyKQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ndGF4JywgbGluZT00LCBjb2x1bW49OSkKLSAgICBUb2tlbih0eXA9J0FTU0lHTicsIHZhbHVlPSc6PScsIGxpbmU9NCwgY29sdW1uPTEzKQotICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncHJpY2UnLCBsaW5lPTQsIGNvbHVtbj0xNikKLSAgICBUb2tlbih0eXA9J09QJywgdmFsdWU9JyonLCBsaW5lPTQsIGNvbHVtbj0yMikKLSAgICBUb2tlbih0eXA9J05VTUJFUicsIHZhbHVlPScwLjA1JywgbGluZT00LCBjb2x1bW49MjQpCi0gICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9NCwgY29sdW1uPTI4KQotICAgIFRva2VuKHR5cD0nRU5ESUYnLCB2YWx1ZT0nRU5ESUYnLCBsaW5lPTUsIGNvbHVtbj01KQotICAgIFRva2VuKHR5cD0nRU5EJywgdmFsdWU9JzsnLCBsaW5lPTUsIGNvbHVtbj0xMCkKKyAgICBUb2tlbih0eXA9J0lGJywgdmFsdWU9J0lGJywgbGluZT0yLCBjb2x1bW49NCkKKyAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3F1YW50aXR5JywgbGluZT0yLCBjb2x1bW49NykKKyAgICBUb2tlbih0eXA9J1RIRU4nLCB2YWx1ZT0nVEhFTicsIGxpbmU9MiwgY29sdW1uPTE2KQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ndG90YWwnLCBsaW5lPTMsIGNvbHVtbj04KQorICAgIFRva2VuKHR5cD0nQVNTSUdOJywgdmFsdWU9Jzo9JywgbGluZT0zLCBjb2x1bW49MTQpCisgICAgVG9rZW4odHlwPSdJRCcsIHZhbHVlPSd0b3RhbCcsIGxpbmU9MywgY29sdW1uPTE3KQorICAgIFRva2VuKHR5cD0nT1AnLCB2YWx1ZT0nKycsIGxpbmU9MywgY29sdW1uPTIzKQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncHJpY2UnLCBsaW5lPTMsIGNvbHVtbj0yNSkKKyAgICBUb2tlbih0eXA9J09QJywgdmFsdWU9JyonLCBsaW5lPTMsIGNvbHVtbj0zMSkKKyAgICBUb2tlbih0eXA9J0lEJywgdmFsdWU9J3F1YW50aXR5JywgbGluZT0zLCBjb2x1bW49MzMpCisgICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9MywgY29sdW1uPTQxKQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ndGF4JywgbGluZT00LCBjb2x1bW49OCkKKyAgICBUb2tlbih0eXA9J0FTU0lHTicsIHZhbHVlPSc6PScsIGxpbmU9NCwgY29sdW1uPTEyKQorICAgIFRva2VuKHR5cD0nSUQnLCB2YWx1ZT0ncHJpY2UnLCBsaW5lPTQsIGNvbHVtbj0xNSkKKyAgICBUb2tlbih0eXA9J09QJywgdmFsdWU9JyonLCBsaW5lPTQsIGNvbHVtbj0yMSkKKyAgICBUb2tlbih0eXA9J05VTUJFUicsIHZhbHVlPScwLjA1JywgbGluZT00LCBjb2x1bW49MjMpCisgICAgVG9rZW4odHlwPSdFTkQnLCB2YWx1ZT0nOycsIGxpbmU9NCwgY29sdW1uPTI3KQorICAgIFRva2VuKHR5cD0nRU5ESUYnLCB2YWx1ZT0nRU5ESUYnLCBsaW5lPTUsIGNvbHVtbj00KQorICAgIFRva2VuKHR5cD0nRU5EJywgdmFsdWU9JzsnLCBsaW5lPTUsIGNvbHVtbj05KQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0IGIvRG9jL2xpYnJhcnkvcmVhZGxpbmUucnN0CmluZGV4IDExMzQ2MTkuLjY5MjMxMGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlYWRsaW5lLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZWFkbGluZS5yc3QKQEAgLTE5MCwyOCArMTkwLDMyIEBACiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBkZW1vbnN0cmF0ZXMgaG93IHRvIHVzZSB0aGUgOm1vZDpgcmVhZGxpbmVgIG1vZHVsZSdzCiBoaXN0b3J5IHJlYWRpbmcgYW5kIHdyaXRpbmcgZnVuY3Rpb25zIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCBhbmQgc2F2ZSBhIGhpc3RvcnkKLWZpbGUgbmFtZWQgOmZpbGU6YC5weWhpc3RgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlIGJlbG93IHdvdWxkCi1ub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucyBmcm9tIHRoZSB1c2VyJ3MKLTplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CitmaWxlIG5hbWVkIDpmaWxlOmAucHl0aG9uX2hpc3RvcnlgIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeS4gIFRoZSBjb2RlCitiZWxvdyB3b3VsZCBub3JtYWxseSBiZSBleGVjdXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyBpbnRlcmFjdGl2ZSBzZXNzaW9ucworZnJvbSB0aGUgdXNlcidzIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUuIDo6CiAKKyAgIGltcG9ydCBhdGV4aXQKICAgIGltcG9ydCBvcwogICAgaW1wb3J0IHJlYWRsaW5lCi0gICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weWhpc3QiKQorCisgICBoaXN0ZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSwgIi5weXRob25faGlzdG9yeSIpCiAgICB0cnk6CiAgICAgICAgcmVhZGxpbmUucmVhZF9oaXN0b3J5X2ZpbGUoaGlzdGZpbGUpCiAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CiAgICAgICAgcGFzcwotICAgaW1wb3J0IGF0ZXhpdAorCiAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0ZmlsZSkKLSAgIGRlbCBvcywgaGlzdGZpbGUKKworVGhpcyBjb2RlIGlzIGFjdHVhbGx5IGF1dG9tYXRpY2FsbHkgcnVuIHdoZW4gUHl0aG9uIGlzIHJ1biBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIGV4dGVuZHMgdGhlIDpjbGFzczpgY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGVgIGNsYXNzIHRvCiBzdXBwb3J0IGhpc3Rvcnkgc2F2ZS9yZXN0b3JlLiA6OgogCi0gICBpbXBvcnQgY29kZQotICAgaW1wb3J0IHJlYWRsaW5lCiAgICBpbXBvcnQgYXRleGl0CisgICBpbXBvcnQgY29kZQogICAgaW1wb3J0IG9zCisgICBpbXBvcnQgcmVhZGxpbmUKIAogICAgY2xhc3MgSGlzdG9yeUNvbnNvbGUoY29kZS5JbnRlcmFjdGl2ZUNvbnNvbGUpOgogICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NhbHM9Tm9uZSwgZmlsZW5hbWU9Ijxjb25zb2xlPiIsCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9yZXBybGliLnJzdCBiL0RvYy9saWJyYXJ5L3JlcHJsaWIucnN0CmluZGV4IDI0YThlNTIuLmVlOWExMGQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JlcHJsaWIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3JlcHJsaWIucnN0CkBAIC00OSw4ICs0OSw4IEBACiAKICAgICAgICAgPj4+IGNsYXNzIE15TGlzdChsaXN0KToKICAgICAgICAgLi4uICAgICBAcmVjdXJzaXZlX3JlcHIoKQotICAgICAgICAuLi4gICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIC4uLiAgICAgICAgICByZXR1cm4gJzwnICsgJ3wnLmpvaW4obWFwKHJlcHIsIHNlbGYpKSArICc+JworICAgICAgICAuLi4gICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAgcmV0dXJuICc8JyArICd8Jy5qb2luKG1hcChyZXByLCBzZWxmKSkgKyAnPicKICAgICAgICAgLi4uCiAgICAgICAgID4+PiBtID0gTXlMaXN0KCdhYmMnKQogICAgICAgICA+Pj4gbS5hcHBlbmQobSkKQEAgLTEyOSw5ICsxMjksOSBAQAogCiAgICBGb3JtYXR0aW5nIG1ldGhvZHMgZm9yIHNwZWNpZmljIHR5cGVzIGFyZSBpbXBsZW1lbnRlZCBhcyBtZXRob2RzIHdpdGggYSBuYW1lCiAgICBiYXNlZCBvbiB0aGUgdHlwZSBuYW1lLiAgSW4gdGhlIG1ldGhvZCBuYW1lLCAqKlRZUEUqKiBpcyByZXBsYWNlZCBieQotICAgYGBzdHJpbmcuam9pbihzdHJpbmcuc3BsaXQodHlwZShvYmopLl9fbmFtZV9fLCAnXycpKWBgLiBEaXNwYXRjaCB0byB0aGVzZQotICAgbWV0aG9kcyBpcyBoYW5kbGVkIGJ5IDptZXRoOmByZXByMWAuIFR5cGUtc3BlY2lmaWMgbWV0aG9kcyB3aGljaCBuZWVkIHRvCi0gICByZWN1cnNpdmVseSBmb3JtYXQgYSB2YWx1ZSBzaG91bGQgY2FsbCBgYHNlbGYucmVwcjEoc3Vib2JqLCBsZXZlbCAtIDEpYGAuCisgICBgYCdfJy5qb2luKHR5cGUob2JqKS5fX25hbWVfXy5zcGxpdCgpKWBgLiBEaXNwYXRjaCB0byB0aGVzZSBtZXRob2RzIGlzCisgICBoYW5kbGVkIGJ5IDptZXRoOmByZXByMWAuIFR5cGUtc3BlY2lmaWMgbWV0aG9kcyB3aGljaCBuZWVkIHRvIHJlY3Vyc2l2ZWx5CisgICBmb3JtYXQgYSB2YWx1ZSBzaG91bGQgY2FsbCBgYHNlbGYucmVwcjEoc3Vib2JqLCBsZXZlbCAtIDEpYGAuCiAKIAogLi4gX3N1YmNsYXNzaW5nLXJlcHJzOgpAQCAtMTQ4LDEyICsxNDgsMTEgQEAKICAgIGltcG9ydCBzeXMKIAogICAgY2xhc3MgTXlSZXByKHJlcHJsaWIuUmVwcik6Ci0gICAgICAgZGVmIHJlcHJfZmlsZShzZWxmLCBvYmosIGxldmVsKToKLSAgICAgICAgICAgaWYgb2JqLm5hbWUgaW4gWyc8c3RkaW4+JywgJzxzdGRvdXQ+JywgJzxzdGRlcnI+J106CisKKyAgICAgICBkZWYgcmVwcl9UZXh0SU9XcmFwcGVyKHNlbGYsIG9iaiwgbGV2ZWwpOgorICAgICAgICAgICBpZiBvYmoubmFtZSBpbiB7JzxzdGRpbj4nLCAnPHN0ZG91dD4nLCAnPHN0ZGVycj4nfToKICAgICAgICAgICAgICAgIHJldHVybiBvYmoubmFtZQotICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgcmV0dXJuIHJlcHIob2JqKQorICAgICAgICAgICByZXR1cm4gcmVwcihvYmopCiAKICAgIGFSZXByID0gTXlSZXByKCkKICAgIHByaW50KGFSZXByLnJlcHIoc3lzLnN0ZGluKSkgICAgICAgICAjIHByaW50cyAnPHN0ZGluPicKLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0IGIvRG9jL2xpYnJhcnkvcmVzb3VyY2UucnN0CmluZGV4IGVkODU4NTAuLmE3YjIyOWUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3Jlc291cmNlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9yZXNvdXJjZS5yc3QKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogLi4gZGF0YTo6IFJMSU1fSU5GSU5JVFkKIAotICAgQ29uc3RhbnQgdXNlZCB0byByZXByZXNlbnQgdGhlIHRoZSBsaW1pdCBmb3IgYW4gdW5saW1pdGVkIHJlc291cmNlLgorICAgQ29uc3RhbnQgdXNlZCB0byByZXByZXNlbnQgdGhlIGxpbWl0IGZvciBhbiB1bmxpbWl0ZWQgcmVzb3VyY2UuCiAKIAogLi4gZnVuY3Rpb246OiBnZXRybGltaXQocmVzb3VyY2UpCkBAIC03NCw2ICs3NCwyNyBAQAogICAgYGBzZXRybGltaXRgYCBtYXkgYWxzbyByYWlzZSA6ZXhjOmBlcnJvcmAgaWYgdGhlIHVuZGVybHlpbmcgc3lzdGVtIGNhbGwKICAgIGZhaWxzLgogCisuLiBmdW5jdGlvbjo6IHBybGltaXQocGlkLCByZXNvdXJjZVssIGxpbWl0c10pCisKKyAgIENvbWJpbmVzIDpmdW5jOmBzZXRybGltaXRgIGFuZCA6ZnVuYzpgZ2V0cmxpbWl0YCBpbiBvbmUgZnVuY3Rpb24gYW5kCisgICBzdXBwb3J0cyB0byBnZXQgYW5kIHNldCB0aGUgcmVzb3VyY2VzIGxpbWl0cyBvZiBhbiBhcmJpdHJhcnkgcHJvY2Vzcy4gSWYKKyAgICpwaWQqIGlzIDAsIHRoZW4gdGhlIGNhbGwgYXBwbGllcyB0byB0aGUgY3VycmVudCBwcm9jZXNzLiAqcmVzb3VyY2UqIGFuZAorICAgKmxpbWl0cyogaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBzZXRybGltaXRgLCBleGNlcHQgdGhhdAorICAgKmxpbWl0cyogaXMgb3B0aW9uYWwuCisKKyAgIFdoZW4gKmxpbWl0cyogaXMgbm90IGdpdmVuIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSAqcmVzb3VyY2UqIGxpbWl0IG9mIHRoZQorICAgcHJvY2VzcyAqcGlkKi4gV2hlbiAqbGltaXRzKiBpcyBnaXZlbiB0aGUgKnJlc291cmNlKiBsaW1pdCBvZiB0aGUgcHJvY2VzcyBpcworICAgc2V0IGFuZCB0aGUgZm9ybWVyIHJlc291cmNlIGxpbWl0IGlzIHJldHVybmVkLgorCisgICBSYWlzZXMgOmV4YzpgUHJvY2Vzc0xvb2t1cEVycm9yYCB3aGVuICpwaWQqIGNhbid0IGJlIGZvdW5kIGFuZAorICAgOmV4YzpgUGVybWlzc2lvbkVycm9yYCB3aGVuIHRoZSB1c2VyIGRvZXNuJ3QgaGF2ZSBgYENBUF9TWVNfUkVTT1VSQ0VgYCBmb3IKKyAgIHRoZSBwcm9jZXNzLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4zNiBvciBsYXRlciB3aXRoIGdsaWJjIDIuMTMgb3IgbGF0ZXIKKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogVGhlc2Ugc3ltYm9scyBkZWZpbmUgcmVzb3VyY2VzIHdob3NlIGNvbnN1bXB0aW9uIGNhbiBiZSBjb250cm9sbGVkIHVzaW5nIHRoZQogOmZ1bmM6YHNldHJsaW1pdGAgYW5kIDpmdW5jOmBnZXRybGltaXRgIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3cuIFRoZSB2YWx1ZXMgb2YKIHRoZXNlIHN5bWJvbHMgYXJlIGV4YWN0bHkgdGhlIGNvbnN0YW50cyB1c2VkIGJ5IEMgcHJvZ3JhbXMuCkBAIC0xNTEsNiArMTcyLDgwIEBACiAgICBUaGUgbWF4aW11bSBhcmVhIChpbiBieXRlcykgb2YgYWRkcmVzcyBzcGFjZSB3aGljaCBtYXkgYmUgdGFrZW4gYnkgdGhlIHByb2Nlc3MuCiAKIAorLi4gZGF0YTo6IFJMSU1JVF9NU0dRVUVVRQorCisgICBUaGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIGFsbG9jYXRlZCBmb3IgUE9TSVggbWVzc2FnZSBxdWV1ZXMuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42Ljggb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfTklDRQorCisgICBUaGUgY2VpbGluZyBmb3IgdGhlIHByb2Nlc3MncyBuaWNlIGxldmVsIChjYWxjdWxhdGVkIGFzIDIwIC0gcmxpbV9jdXIpLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4xMiBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9SVFBSSU8KKworICAgVGhlIGNlaWxpbmcgb2YgdGhlIHJlYWwtdGltZSBwcmlvcml0eS4KKworICAgQXZhaWxhYmlsaXR5OiBMaW51eCAyLjYuMTIgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGRhdGE6OiBSTElNSVRfUlRUSU1FCisKKyAgIFRoZSB0aW1lIGxpbWl0IChpbiBtaWNyb3NlY29uZHMpIG9uIENQVSB0aW1lIHRoYXQgYSBwcm9jZXNzIGNhbiBzcGVuZAorICAgdW5kZXIgcmVhbC10aW1lIHNjaGVkdWxpbmcgd2l0aG91dCBtYWtpbmcgYSBibG9ja2luZyBzeXNjYWxsLgorCisgICBBdmFpbGFiaWxpdHk6IExpbnV4IDIuNi4yNSBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZGF0YTo6IFJMSU1JVF9TSUdQRU5ESU5HCisKKyAgIFRoZSBudW1iZXIgb2Ygc2lnbmFscyB3aGljaCB0aGUgcHJvY2VzcyBtYXkgcXVldWUuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggMi42Ljggb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUkxJTUlUX1NCU0laRQorCisgICBUaGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgb2Ygc29ja2V0IGJ1ZmZlciB1c2FnZSBmb3IgdGhpcyB1c2VyLgorICAgVGhpcyBsaW1pdHMgdGhlIGFtb3VudCBvZiBuZXR3b3JrIG1lbW9yeSwgYW5kIGhlbmNlIHRoZSBhbW91bnQgb2YgbWJ1ZnMsCisgICB0aGF0IHRoaXMgdXNlciBtYXkgaG9sZCBhdCBhbnkgdGltZS4KKworICAgQXZhaWxhYmlsaXR5OiBGcmVlQlNEIDkgb3IgbGF0ZXIuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUkxJTUlUX1NXQVAKKworICAgVGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBzd2FwIHNwYWNlIHRoYXQgbWF5IGJlIHJlc2VydmVkIG9yCisgICB1c2VkIGJ5IGFsbCBvZiB0aGlzIHVzZXIgaWQncyBwcm9jZXNzZXMuCisgICBUaGlzIGxpbWl0IGlzIGVuZm9yY2VkIG9ubHkgaWYgYml0IDEgb2YgdGhlIHZtLm92ZXJjb21taXQgc3lzY3RsIGlzIHNldC4KKyAgIFBsZWFzZSBzZWUgOm1hbnBhZ2U6YHR1bmluZyg3KWAgZm9yIGEgY29tcGxldGUgZGVzY3JpcHRpb24gb2YgdGhpcyBzeXNjdGwuCisKKyAgIEF2YWlsYWJpbGl0eTogRnJlZUJTRCA5IG9yIGxhdGVyLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFJMSU1JVF9OUFRTCisKKyAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwc2V1ZG8tdGVybWluYWxzIGNyZWF0ZWQgYnkgdGhpcyB1c2VyIGlkLgorCisgICBBdmFpbGFiaWxpdHk6IEZyZWVCU0QgOSBvciBsYXRlci4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIFJlc291cmNlIFVzYWdlCiAtLS0tLS0tLS0tLS0tLQogCkBAIC0yMjEsMTAgKzMxNiw3IEBACiAuLiBmdW5jdGlvbjo6IGdldHBhZ2VzaXplKCkKIAogICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgc3lzdGVtIHBhZ2UuIChUaGlzIG5lZWQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZQotICAgaGFyZHdhcmUgcGFnZSBzaXplLikgVGhpcyBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIGRldGVybWluaW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMKLSAgIG9mIG1lbW9yeSBhIHByb2Nlc3MgaXMgdXNpbmcuIFRoZSB0aGlyZCBlbGVtZW50IG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieQotICAgOmZ1bmM6YGdldHJ1c2FnZWAgZGVzY3JpYmVzIG1lbW9yeSB1c2FnZSBpbiBwYWdlczsgbXVsdGlwbHlpbmcgYnkgcGFnZSBzaXplCi0gICBwcm9kdWNlcyBudW1iZXIgb2YgYnl0ZXMuCisgICBoYXJkd2FyZSBwYWdlIHNpemUuKQogCiBUaGUgZm9sbG93aW5nIDpjb25zdDpgUlVTQUdFX1wqYCBzeW1ib2xzIGFyZSBwYXNzZWQgdG8gdGhlIDpmdW5jOmBnZXRydXNhZ2VgCiBmdW5jdGlvbiB0byBzcGVjaWZ5IHdoaWNoIHByb2Nlc3NlcyBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQgZm9yLgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0IGIvRG9jL2xpYnJhcnkvcmxjb21wbGV0ZXIucnN0CmluZGV4IDYzMzA4OGQuLjllZDAxYzcgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3JsY29tcGxldGVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS9ybGNvbXBsZXRlci5yc3QKQEAgLTI3LDE4ICsyNywxMCBAQAogICAgcmVhZGxpbmUuX19uYW1lX18gICAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgKICAgID4+PiByZWFkbGluZS4KIAotVGhlIDptb2Q6YHJsY29tcGxldGVyYCBtb2R1bGUgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIFB5dGhvbidzIGludGVyYWN0aXZlCi1tb2RlLiAgQSB1c2VyIGNhbiBhZGQgdGhlIGZvbGxvd2luZyBsaW5lcyB0byBoaXMgb3IgaGVyIGluaXRpYWxpemF0aW9uIGZpbGUKLShpZGVudGlmaWVkIGJ5IHRoZSA6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBlbnZpcm9ubWVudCB2YXJpYWJsZSkgdG8gZ2V0Ci1hdXRvbWF0aWMgOmtiZDpgVGFiYCBjb21wbGV0aW9uOjoKLQotICAgdHJ5OgotICAgICAgIGltcG9ydCByZWFkbGluZQotICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgIHByaW50KCJNb2R1bGUgcmVhZGxpbmUgbm90IGF2YWlsYWJsZS4iKQotICAgZWxzZToKLSAgICAgICBpbXBvcnQgcmxjb21wbGV0ZXIKLSAgICAgICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgidGFiOiBjb21wbGV0ZSIpCitUaGUgOm1vZDpgcmxjb21wbGV0ZXJgIG1vZHVsZSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggUHl0aG9uJ3MKKzpyZWY6YGludGVyYWN0aXZlIG1vZGUgPHR1dC1pbnRlcmFjdGl2ZT5gLiAgVW5sZXNzIFB5dGhvbiBpcyBydW4gd2l0aCB0aGUKKzpvcHRpb246YC1TYCBvcHRpb24sIHRoZSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBpbXBvcnRlZCBhbmQgY29uZmlndXJlZAorKHNlZSA6cmVmOmBybGNvbXBsZXRlci1jb25maWdgKS4KIAogT24gcGxhdGZvcm1zIHdpdGhvdXQgOm1vZDpgcmVhZGxpbmVgLCB0aGUgOmNsYXNzOmBDb21wbGV0ZXJgIGNsYXNzIGRlZmluZWQgYnkKIHRoaXMgbW9kdWxlIGNhbiBzdGlsbCBiZSB1c2VkIGZvciBjdXN0b20gcHVycG9zZXMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9ydW5weS5yc3QgYi9Eb2MvbGlicmFyeS9ydW5weS5yc3QKaW5kZXggNjkxOWJjMC4uNzI5M2YxNSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvcnVucHkucnN0CisrKyBiL0RvYy9saWJyYXJ5L3J1bnB5LnJzdApAQCAtMjgsNiArMjgsOSBAQAogCiAuLiBmdW5jdGlvbjo6IHJ1bl9tb2R1bGUobW9kX25hbWUsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lLCBhbHRlcl9zeXM9RmFsc2UpCiAKKyAgIC4uIGluZGV4OjoKKyAgICAgIG1vZHVsZTogX19tYWluX18KKwogICAgRXhlY3V0ZSB0aGUgY29kZSBvZiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBhbmQgcmV0dXJuIHRoZSByZXN1bHRpbmcgbW9kdWxlCiAgICBnbG9iYWxzIGRpY3Rpb25hcnkuIFRoZSBtb2R1bGUncyBjb2RlIGlzIGZpcnN0IGxvY2F0ZWQgdXNpbmcgdGhlIHN0YW5kYXJkCiAgICBpbXBvcnQgbWVjaGFuaXNtIChyZWZlciB0byA6cGVwOmAzMDJgIGZvciBkZXRhaWxzKSBhbmQgdGhlbiBleGVjdXRlZCBpbiBhCkBAIC00NCwyOCArNDcsMjIgQEAKICAgIGJlbG93IGFyZSBkZWZpbmVkIGluIHRoZSBzdXBwbGllZCBkaWN0aW9uYXJ5LCB0aG9zZSBkZWZpbml0aW9ucyBhcmUKICAgIG92ZXJyaWRkZW4gYnkgOmZ1bmM6YHJ1bl9tb2R1bGVgLgogCi0gICBUaGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGBgX19uYW1lX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fY2FjaGVkX19gYCwKLSAgIGBgX19sb2FkZXJfX2BgCi0gICBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMgZGljdGlvbmFyeSBiZWZvcmUgdGhlIG1vZHVsZQotICAgY29kZSBpcyBleGVjdXRlZCAoTm90ZSB0aGF0IHRoaXMgaXMgYSBtaW5pbWFsIHNldCBvZiB2YXJpYWJsZXMgLSBvdGhlcgotICAgdmFyaWFibGVzIG1heSBiZSBzZXQgaW1wbGljaXRseSBhcyBhbiBpbnRlcnByZXRlciBpbXBsZW1lbnRhdGlvbiBkZXRhaWwpLgorICAgVGhlIHNwZWNpYWwgZ2xvYmFsIHZhcmlhYmxlcyBgYF9fbmFtZV9fYGAsIGBgX19zcGVjX19gYCwgYGBfX2ZpbGVfX2BgLAorICAgYGBfX2NhY2hlZF9fYGAsIGBgX19sb2FkZXJfX2BgIGFuZCBgYF9fcGFja2FnZV9fYGAgYXJlIHNldCBpbiB0aGUgZ2xvYmFscworICAgZGljdGlvbmFyeSBiZWZvcmUgdGhlIG1vZHVsZSBjb2RlIGlzIGV4ZWN1dGVkIChOb3RlIHRoYXQgdGhpcyBpcyBhCisgICBtaW5pbWFsIHNldCBvZiB2YXJpYWJsZXMgLSBvdGhlciB2YXJpYWJsZXMgbWF5IGJlIHNldCBpbXBsaWNpdGx5IGFzIGFuCisgICBpbnRlcnByZXRlciBpbXBsZW1lbnRhdGlvbiBkZXRhaWwpLgogCiAgICBgYF9fbmFtZV9fYGAgaXMgc2V0IHRvICpydW5fbmFtZSogaWYgdGhpcyBvcHRpb25hbCBhcmd1bWVudCBpcyBub3QKICAgIDpjb25zdDpgTm9uZWAsIHRvIGBgbW9kX25hbWUgKyAnLl9fbWFpbl9fJ2BgIGlmIHRoZSBuYW1lZCBtb2R1bGUgaXMgYQogICAgcGFja2FnZSBhbmQgdG8gdGhlICptb2RfbmFtZSogYXJndW1lbnQgb3RoZXJ3aXNlLgogCi0gICBgYF9fZmlsZV9fYGAgaXMgc2V0IHRvIHRoZSBuYW1lIHByb3ZpZGVkIGJ5IHRoZSBtb2R1bGUgbG9hZGVyLiBJZiB0aGUKLSAgIGxvYWRlciBkb2VzIG5vdCBtYWtlIGZpbGVuYW1lIGluZm9ybWF0aW9uIGF2YWlsYWJsZSwgdGhpcyB2YXJpYWJsZSBpcyBzZXQKLSAgIHRvIDpjb25zdDpgTm9uZWAuCisgICBgYF9fc3BlY19fYGAgd2lsbCBiZSBzZXQgYXBwcm9wcmlhdGVseSBmb3IgdGhlICphY3R1YWxseSogaW1wb3J0ZWQKKyAgIG1vZHVsZSAodGhhdCBpcywgYGBfX3NwZWNfXy5uYW1lYGAgd2lsbCBhbHdheXMgYmUgKm1vZF9uYW1lKiBvcgorICAgYGBtb2RfbmFtZSArICcuX19tYWluX19gYCwgbmV2ZXIgKnJ1bl9uYW1lKikuCiAKLSAgIGBgX19jYWNoZWRfX2BgIHdpbGwgYmUgc2V0IHRvIGBgTm9uZWBgLgotCi0gICBgYF9fbG9hZGVyX19gYCBpcyBzZXQgdG8gdGhlIDpwZXA6YDMwMmAgbW9kdWxlIGxvYWRlciB1c2VkIHRvIHJldHJpZXZlIHRoZQotICAgY29kZSBmb3IgdGhlIG1vZHVsZSAoVGhpcyBsb2FkZXIgbWF5IGJlIGEgd3JhcHBlciBhcm91bmQgdGhlIHN0YW5kYXJkCi0gICBpbXBvcnQgbWVjaGFuaXNtKS4KLQotICAgYGBfX3BhY2thZ2VfX2BgIGlzIHNldCB0byAqbW9kX25hbWUqIGlmIHRoZSBuYW1lZCBtb2R1bGUgaXMgYSBwYWNrYWdlIGFuZAotICAgdG8gYGBtb2RfbmFtZS5ycGFydGl0aW9uKCcuJylbMF1gYCBvdGhlcndpc2UuCisgICBgYF9fZmlsZV9fYGAsIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZQorICAgOnJlZjpgc2V0IGFzIG5vcm1hbCA8aW1wb3J0LW1vZC1hdHRycz5gIGJhc2VkIG9uIHRoZSBtb2R1bGUgc3BlYy4KIAogICAgSWYgdGhlIGFyZ3VtZW50ICphbHRlcl9zeXMqIGlzIHN1cHBsaWVkIGFuZCBldmFsdWF0ZXMgdG8gOmNvbnN0OmBUcnVlYCwKICAgIHRoZW4gYGBzeXMuYXJndlswXWBgIGlzIHVwZGF0ZWQgd2l0aCB0aGUgdmFsdWUgb2YgYGBfX2ZpbGVfX2BgIGFuZApAQCAtNzgsMTYgKzc1LDI3IEBACiAgICBhcmd1bWVudHMuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgdGhlIDptb2Q6YHN5c2AgbW9kdWxlIGJlIGxlZnQgYWxvbmUgd2hlbgogICAgaW52b2tpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRocmVhZGVkIGNvZGUuCiAKKyAgIC4uIHNlZWFsc286OgorICAgICAgVGhlIDpvcHRpb246YC1tYCBvcHRpb24gb2ZmZXJpbmcgZXF1aXZhbGVudCBmdW5jdGlvbmFsaXR5IGZyb20gdGhlCisgICAgICBjb21tYW5kIGxpbmUuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4xCiAgICAgICBBZGRlZCBhYmlsaXR5IHRvIGV4ZWN1dGUgcGFja2FnZXMgYnkgbG9va2luZyBmb3IgYSBgYF9fbWFpbl9fYGAgc3VibW9kdWxlLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgotICAgICAgQWRkZWQgYGBfX2NhY2hlZF9fYGAgZ2xvYmFsIHZhcmlhYmxlIChzZWUgOlBFUDpgMzE0N2ApLgorICAgICAgQWRkZWQgYGBfX2NhY2hlZF9fYGAgZ2xvYmFsIHZhcmlhYmxlIChzZWUgOnBlcDpgMzE0N2ApLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXBkYXRlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbW9kdWxlIHNwZWMgZmVhdHVyZSBhZGRlZCBieQorICAgICAgOnBlcDpgNDUxYC4gVGhpcyBhbGxvd3MgYGBfX2NhY2hlZF9fYGAgdG8gYmUgc2V0IGNvcnJlY3RseSBmb3IgbW9kdWxlcworICAgICAgcnVuIHRoaXMgd2F5LCBhcyB3ZWxsIGFzIGVuc3VyaW5nIHRoZSByZWFsIG1vZHVsZSBuYW1lIGlzIGFsd2F5cworICAgICAgYWNjZXNzaWJsZSBhcyBgYF9fc3BlY19fLm5hbWVgYC4KIAogLi4gZnVuY3Rpb246OiBydW5fcGF0aChmaWxlX3BhdGgsIGluaXRfZ2xvYmFscz1Ob25lLCBydW5fbmFtZT1Ob25lKQogCisgICAuLiBpbmRleDo6CisgICAgICBtb2R1bGU6IF9fbWFpbl9fCisKICAgIEV4ZWN1dGUgdGhlIGNvZGUgYXQgdGhlIG5hbWVkIGZpbGVzeXN0ZW0gbG9jYXRpb24gYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nCiAgICBtb2R1bGUgZ2xvYmFscyBkaWN0aW9uYXJ5LiBBcyB3aXRoIGEgc2NyaXB0IG5hbWUgc3VwcGxpZWQgdG8gdGhlIENQeXRob24KICAgIGNvbW1hbmQgbGluZSwgdGhlIHN1cHBsaWVkIHBhdGggbWF5IHJlZmVyIHRvIGEgUHl0aG9uIHNvdXJjZSBmaWxlLCBhCkBAIC0xMDgsMjMgKzExNiwyNSBAQAogICAgYmVsb3cgYXJlIGRlZmluZWQgaW4gdGhlIHN1cHBsaWVkIGRpY3Rpb25hcnksIHRob3NlIGRlZmluaXRpb25zIGFyZQogICAgb3ZlcnJpZGRlbiBieSA6ZnVuYzpgcnVuX3BhdGhgLgogCi0gICBUaGUgc3BlY2lhbCBnbG9iYWwgdmFyaWFibGVzIGBgX19uYW1lX19gYCwgYGBfX2ZpbGVfX2BgLCBgYF9fbG9hZGVyX19gYAotICAgYW5kIGBgX19wYWNrYWdlX19gYCBhcmUgc2V0IGluIHRoZSBnbG9iYWxzIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUKLSAgIGNvZGUgaXMgZXhlY3V0ZWQgKE5vdGUgdGhhdCB0aGlzIGlzIGEgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIKLSAgIHZhcmlhYmxlcyBtYXkgYmUgc2V0IGltcGxpY2l0bHkgYXMgYW4gaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KKyAgIFRoZSBzcGVjaWFsIGdsb2JhbCB2YXJpYWJsZXMgYGBfX25hbWVfX2BgLCBgYF9fc3BlY19fYGAsIGBgX19maWxlX19gYCwKKyAgIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQgYGBfX3BhY2thZ2VfX2BgIGFyZSBzZXQgaW4gdGhlIGdsb2JhbHMKKyAgIGRpY3Rpb25hcnkgYmVmb3JlIHRoZSBtb2R1bGUgY29kZSBpcyBleGVjdXRlZCAoTm90ZSB0aGF0IHRoaXMgaXMgYQorICAgbWluaW1hbCBzZXQgb2YgdmFyaWFibGVzIC0gb3RoZXIgdmFyaWFibGVzIG1heSBiZSBzZXQgaW1wbGljaXRseSBhcyBhbgorICAgaW50ZXJwcmV0ZXIgaW1wbGVtZW50YXRpb24gZGV0YWlsKS4KIAogICAgYGBfX25hbWVfX2BgIGlzIHNldCB0byAqcnVuX25hbWUqIGlmIHRoaXMgb3B0aW9uYWwgYXJndW1lbnQgaXMgbm90CiAgICA6Y29uc3Q6YE5vbmVgIGFuZCB0byBgYCc8cnVuX3BhdGg+J2BgIG90aGVyd2lzZS4KIAotICAgYGBfX2ZpbGVfX2BgIGlzIHNldCB0byB0aGUgbmFtZSBwcm92aWRlZCBieSB0aGUgbW9kdWxlIGxvYWRlci4gSWYgdGhlCi0gICBsb2FkZXIgZG9lcyBub3QgbWFrZSBmaWxlbmFtZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUsIHRoaXMgdmFyaWFibGUgaXMgc2V0Ci0gICB0byA6Y29uc3Q6YE5vbmVgLiBGb3IgYSBzaW1wbGUgc2NyaXB0LCB0aGlzIHdpbGwgYmUgc2V0IHRvIGBgZmlsZV9wYXRoYGAuCisgICBJZiB0aGUgc3VwcGxpZWQgcGF0aCBkaXJlY3RseSByZWZlcmVuY2VzIGEgc2NyaXB0IGZpbGUgKHdoZXRoZXIgYXMgc291cmNlCisgICBvciBhcyBwcmVjb21waWxlZCBieXRlIGNvZGUpLCB0aGVuIGBgX19maWxlX19gYCB3aWxsIGJlIHNldCB0byB0aGUKKyAgIHN1cHBsaWVkIHBhdGgsIGFuZCBgYF9fc3BlY19fYGAsIGBgX19jYWNoZWRfX2BgLCBgYF9fbG9hZGVyX19gYCBhbmQKKyAgIGBgX19wYWNrYWdlX19gYCB3aWxsIGFsbCBiZSBzZXQgdG8gOmNvbnN0OmBOb25lYC4KIAotICAgYGBfX2xvYWRlcl9fYGAgaXMgc2V0IHRvIHRoZSA6cGVwOmAzMDJgIG1vZHVsZSBsb2FkZXIgdXNlZCB0byByZXRyaWV2ZSB0aGUKLSAgIGNvZGUgZm9yIHRoZSBtb2R1bGUgKFRoaXMgbG9hZGVyIG1heSBiZSBhIHdyYXBwZXIgYXJvdW5kIHRoZSBzdGFuZGFyZAotICAgaW1wb3J0IG1lY2hhbmlzbSkuIEZvciBhIHNpbXBsZSBzY3JpcHQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gOmNvbnN0OmBOb25lYC4KLQotICAgYGBfX3BhY2thZ2VfX2BgIGlzIHNldCB0byBgYF9fbmFtZV9fLnJwYXJ0aXRpb24oJy4nKVswXWBgLgorICAgSWYgdGhlIHN1cHBsaWVkIHBhdGggaXMgYSByZWZlcmVuY2UgdG8gYSB2YWxpZCBzeXMucGF0aCBlbnRyeSwgdGhlbgorICAgYGBfX3NwZWNfX2BgIHdpbGwgYmUgc2V0IGFwcHJvcHJpYXRlbHkgZm9yIHRoZSBpbXBvcnRlZCBgYF9fbWFpbl9fYGAKKyAgIG1vZHVsZSAodGhhdCBpcywgYGBfX3NwZWNfXy5uYW1lYGAgd2lsbCBhbHdheXMgYmUgYGBfX21haW5fX2BgKS4KKyAgIGBgX19maWxlX19gYCwgYGBfX2NhY2hlZF9fYGAsIGBgX19sb2FkZXJfX2BgIGFuZCBgYF9fcGFja2FnZV9fYGAgd2lsbCBiZQorICAgOnJlZjpgc2V0IGFzIG5vcm1hbCA8aW1wb3J0LW1vZC1hdHRycz5gIGJhc2VkIG9uIHRoZSBtb2R1bGUgc3BlYy4KIAogICAgQSBudW1iZXIgb2YgYWx0ZXJhdGlvbnMgYXJlIGFsc28gbWFkZSB0byB0aGUgOm1vZDpgc3lzYCBtb2R1bGUuIEZpcnN0bHksCiAgICBgYHN5cy5wYXRoYGAgbWF5IGJlIGFsdGVyZWQgYXMgZGVzY3JpYmVkIGFib3ZlLiBgYHN5cy5hcmd2WzBdYGAgaXMgdXBkYXRlZApAQCAtMTM5LDE2ICsxNDksMjkgQEAKICAgIGxpbWl0YXRpb25zIHN0aWxsIGFwcGx5LCB1c2Ugb2YgdGhpcyBmdW5jdGlvbiBpbiB0aHJlYWRlZCBjb2RlIHNob3VsZCBiZQogICAgZWl0aGVyIHNlcmlhbGlzZWQgd2l0aCB0aGUgaW1wb3J0IGxvY2sgb3IgZGVsZWdhdGVkIHRvIGEgc2VwYXJhdGUgcHJvY2Vzcy4KIAorICAgLi4gc2VlYWxzbzo6CisgICAgICA6cmVmOmB1c2luZy1vbi1pbnRlcmZhY2Utb3B0aW9uc2AgZm9yIGVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSBvbiB0aGUKKyAgICAgIGNvbW1hbmQgbGluZSAoYGBweXRob24gcGF0aC90by9zY3JpcHRgYCkuCisKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVXBkYXRlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbW9kdWxlIHNwZWMgZmVhdHVyZSBhZGRlZCBieQorICAgICAgOnBlcDpgNDUxYC4gVGhpcyBhbGxvd3MgYGBfX2NhY2hlZF9fYGAgdG8gYmUgc2V0IGNvcnJlY3RseSBpbiB0aGUKKyAgICAgIGNhc2Ugd2hlcmUgYGBfX21haW5fX2BgIGlzIGltcG9ydGVkIGZyb20gYSB2YWxpZCBzeXMucGF0aCBlbnRyeSByYXRoZXIKKyAgICAgIHRoYW4gYmVpbmcgZXhlY3V0ZWQgZGlyZWN0bHkuCisKIC4uIHNlZWFsc286OgogCi0gICA6cGVwOmAzMzhgIC0gRXhlY3V0aW5nIG1vZHVsZXMgYXMgc2NyaXB0cworICAgOnBlcDpgMzM4YCAtLSBFeGVjdXRpbmcgbW9kdWxlcyBhcyBzY3JpcHRzCiAgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgTmljayBDb2dobGFuLgogCi0gICA6cGVwOmAzNjZgIC0gTWFpbiBtb2R1bGUgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cworICAgOnBlcDpgMzY2YCAtLSBNYWluIG1vZHVsZSBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzCiAgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgTmljayBDb2dobGFuLgogCisgICA6cGVwOmA0NTFgIC0tIEEgTW9kdWxlU3BlYyBUeXBlIGZvciB0aGUgSW1wb3J0IFN5c3RlbQorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEVyaWMgU25vdworCiAgICA6cmVmOmB1c2luZy1vbi1nZW5lcmFsYCAtIENQeXRob24gY29tbWFuZCBsaW5lIGRldGFpbHMKIAogICAgVGhlIDpmdW5jOmBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zZWxlY3QucnN0CmluZGV4IGIxZmQzYTguLjUzMzRhZjggMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NlbGVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0LnJzdApAQCAtMTQsNiArMTQsMTQgQEAKIEl0IGNhbm5vdCBiZSB1c2VkIG9uIHJlZ3VsYXIgZmlsZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgYSBmaWxlIGhhcyBncm93biBzaW5jZQogaXQgd2FzIGxhc3QgcmVhZC4KIAorLi4gbm90ZTo6CisKKyAgIFRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSBhbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTworICAgbXVsdGlwbGV4aW5nLCBidWlsdCB1cG9uIHRoZSA6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLiBVc2VycyBhcmUKKyAgIGVuY291cmFnZWQgdG8gdXNlIHRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSBpbnN0ZWFkLCB1bmxlc3MgdGhleSB3YW50CisgICBwcmVjaXNlIGNvbnRyb2wgb3ZlciB0aGUgT1MtbGV2ZWwgcHJpbWl0aXZlcyB1c2VkLgorCisKIFRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nOgogCiAKQEAgLTM3LDIxICs0NSwzNyBAQAogICAgaW5jcmVhc2VzIHRoaXMgdmFsdWUsIDpjOmZ1bmM6YGRldnBvbGxgIG1heSByZXR1cm4gYW4KICAgIGluY29tcGxldGUgbGlzdCBvZiBhY3RpdmUgZmlsZSBkZXNjcmlwdG9ycy4KIAorICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIC4uIGZ1bmN0aW9uOjogZXBvbGwoc2l6ZWhpbnQ9LTEsIGZsYWdzPTApCiAKICAgIChPbmx5IHN1cHBvcnRlZCBvbiBMaW51eCAyLjUuNDQgYW5kIG5ld2VyLikgUmV0dXJuIGFuIGVkZ2UgcG9sbGluZyBvYmplY3QsCiAgICB3aGljaCBjYW4gYmUgdXNlZCBhcyBFZGdlIG9yIExldmVsIFRyaWdnZXJlZCBpbnRlcmZhY2UgZm9yIEkvTwogICAgZXZlbnRzLiAqc2l6ZWhpbnQqIGlzIGRlcHJlY2F0ZWQgYW5kIGNvbXBsZXRlbHkgaWdub3JlZC4gKmZsYWdzKiBjYW4gYmUgc2V0CiAgICB0byA6Y29uc3Q6YEVQT0xMX0NMT0VYRUNgLCB3aGljaCBjYXVzZXMgdGhlIGVwb2xsIGRlc2NyaXB0b3IgdG8gYmUgY2xvc2VkCi0gICBhdXRvbWF0aWNhbGx5IHdoZW4gOmZ1bmM6YG9zLmV4ZWN2ZWAgaXMgY2FsbGVkLiBTZWUgc2VjdGlvbgotICAgOnJlZjpgZXBvbGwtb2JqZWN0c2AgYmVsb3cgZm9yIHRoZSBtZXRob2RzIHN1cHBvcnRlZCBieSBlcG9sbGluZyBvYmplY3RzLgorICAgYXV0b21hdGljYWxseSB3aGVuIDpmdW5jOmBvcy5leGVjdmVgIGlzIGNhbGxlZC4KIAorICAgU2VlIHRoZSA6cmVmOmBlcG9sbC1vYmplY3RzYCBzZWN0aW9uIGJlbG93IGZvciB0aGUgbWV0aG9kcyBzdXBwb3J0ZWQgYnkKKyAgIGVwb2xsaW5nIG9iamVjdHMuCisKKyAgIGBgZXBvbGxgYCBvYmplY3RzIHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDogd2hlbiB1c2VkIGluIGEKKyAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQsIHRoZSBuZXcgZmlsZSBkZXNjcmlwdG9yIGlzIGF1dG9tYXRpY2FsbHkgY2xvc2VkCisgICBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4KKworICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgQWRkZWQgdGhlICpmbGFncyogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgU3VwcG9ydCBmb3IgdGhlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2FzIGFkZGVkLgorICAgICAgVGhlIG5ldyBmaWxlIGRlc2NyaXB0b3IgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IHBvbGwoKQogCkBAIC02Niw2ICs5MCwxMSBAQAogICAgKE9ubHkgc3VwcG9ydGVkIG9uIEJTRC4pICBSZXR1cm5zIGEga2VybmVsIHF1ZXVlIG9iamVjdDsgc2VlIHNlY3Rpb24KICAgIDpyZWY6YGtxdWV1ZS1vYmplY3RzYCBiZWxvdyBmb3IgdGhlIG1ldGhvZHMgc3VwcG9ydGVkIGJ5IGtxdWV1ZSBvYmplY3RzLgogCisgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjoga2V2ZW50KGlkZW50LCBmaWx0ZXI9S1FfRklMVEVSX1JFQUQsIGZsYWdzPUtRX0VWX0FERCwgZmZsYWdzPTAsIGRhdGE9MCwgdWRhdGE9MCkKIApAQCAtMTMxLDEwICsxNjAsNyBAQAogLi4gX2RldnBvbGwtb2JqZWN0czoKIAogYGAvZGV2L3BvbGxgYCBQb2xsaW5nIE9iamVjdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgaHR0cDovL2RldmVsb3BlcnMuc3VuLmNvbS9zb2xhcmlzL2FydGljbGVzL3VzaW5nX2RldnBvbGwuaHRtbAotICAgaHR0cDovL2RldmVsb3BlcnMuc3VuLmNvbS9zb2xhcmlzL2FydGljbGVzL3BvbGxpbmdfZWZmaWNpZW50Lmh0bWwKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFNvbGFyaXMgYW5kIGRlcml2YXRpdmVzIGhhdmUgYGAvZGV2L3BvbGxgYC4gV2hpbGUgOmM6ZnVuYzpgc2VsZWN0YCBpcwogTyhoaWdoZXN0IGZpbGUgZGVzY3JpcHRvcikgYW5kIDpjOmZ1bmM6YHBvbGxgIGlzIE8obnVtYmVyIG9mIGZpbGUKQEAgLTE0NCw2ICsxNzAsMjcgQEAKIG9iamVjdC4KIAogCisuLiBtZXRob2Q6OiBkZXZwb2xsLmNsb3NlKCkKKworICAgQ2xvc2UgdGhlIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgcG9sbGluZyBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIGF0dHJpYnV0ZTo6IGRldnBvbGwuY2xvc2VkCisKKyAgIGBgVHJ1ZWBgIGlmIHRoZSBwb2xsaW5nIG9iamVjdCBpcyBjbG9zZWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKy4uIG1ldGhvZDo6IGRldnBvbGwuZmlsZW5vKCkKKworICAgUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IgbnVtYmVyIG9mIHRoZSBwb2xsaW5nIG9iamVjdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogZGV2cG9sbC5yZWdpc3RlcihmZFssIGV2ZW50bWFza10pCiAKICAgIFJlZ2lzdGVyIGEgZmlsZSBkZXNjcmlwdG9yIHdpdGggdGhlIHBvbGxpbmcgb2JqZWN0LiAgRnV0dXJlIGNhbGxzIHRvIHRoZQpAQCAtMTYwLDcgKzIwNyw3IEBACiAgICAuLiB3YXJuaW5nOjoKIAogICAgICAgUmVnaXN0ZXJpbmcgYSBmaWxlIGRlc2NyaXB0b3IgdGhhdCdzIGFscmVhZHkgcmVnaXN0ZXJlZCBpcyBub3QgYW4KLSAgICAgIGVycm9yLCBidXQgdGhlIHJlc3VsdCBpcyB1bmRlZmluZWQuIFRoZSBhcHByb3BpYXRlIGFjdGlvbiBpcyB0bworICAgICAgZXJyb3IsIGJ1dCB0aGUgcmVzdWx0IGlzIHVuZGVmaW5lZC4gVGhlIGFwcHJvcHJpYXRlIGFjdGlvbiBpcyB0bwogICAgICAgdW5yZWdpc3RlciBvciBtb2RpZnkgaXQgZmlyc3QuIFRoaXMgaXMgYW4gaW1wb3J0YW50IGRpZmZlcmVuY2UKICAgICAgIGNvbXBhcmVkIHdpdGggOmM6ZnVuYzpgcG9sbGAuCiAKQEAgLTI0MSw2ICsyODgsMTEgQEAKICAgIENsb3NlIHRoZSBjb250cm9sIGZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXBvbGwgb2JqZWN0LgogCiAKKy4uIGF0dHJpYnV0ZTo6IGVwb2xsLmNsb3NlZAorCisgICBgYFRydWVgYCBpZiB0aGUgZXBvbGwgb2JqZWN0IGlzIGNsb3NlZC4KKworCiAuLiBtZXRob2Q6OiBlcG9sbC5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIGNvbnRyb2wgZmQuCkBAIC0yNTgsNyArMzEwLDcgQEAKIAogLi4gbWV0aG9kOjogZXBvbGwubW9kaWZ5KGZkLCBldmVudG1hc2spCiAKLSAgIE1vZGlmeSBhIHJlZ2lzdGVyIGZpbGUgZGVzY3JpcHRvci4KKyAgIE1vZGlmeSBhIHJlZ2lzdGVyZWQgZmlsZSBkZXNjcmlwdG9yLgogCiAKIC4uIG1ldGhvZDo6IGVwb2xsLnVucmVnaXN0ZXIoZmQpCkBAIC0zMjIsNyArMzc0LDcgQEAKIAogICAgTW9kaWZpZXMgYW4gYWxyZWFkeSByZWdpc3RlcmVkIGZkLiBUaGlzIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXMKICAgIGBgcmVnaXN0ZXIoZmQsIGV2ZW50bWFzaylgYC4gIEF0dGVtcHRpbmcgdG8gbW9kaWZ5IGEgZmlsZSBkZXNjcmlwdG9yCi0gICB0aGF0IHdhcyBuZXZlciByZWdpc3RlcmVkIGNhdXNlcyBhbiA6ZXhjOmBJT0Vycm9yYCBleGNlcHRpb24gd2l0aCBlcnJubworICAgdGhhdCB3YXMgbmV2ZXIgcmVnaXN0ZXJlZCBjYXVzZXMgYW4gOmV4YzpgT1NFcnJvcmAgZXhjZXB0aW9uIHdpdGggZXJybm8KICAgIDpjb25zdDpgRU5PRU5UYCB0byBiZSByYWlzZWQuCiAKIApAQCAtMzYwLDYgKzQxMiwxMSBAQAogICAgQ2xvc2UgdGhlIGNvbnRyb2wgZmlsZSBkZXNjcmlwdG9yIG9mIHRoZSBrcXVldWUgb2JqZWN0LgogCiAKKy4uIGF0dHJpYnV0ZTo6IGtxdWV1ZS5jbG9zZWQKKworICAgYGBUcnVlYGAgaWYgdGhlIGtxdWV1ZSBvYmplY3QgaXMgY2xvc2VkLgorCisKIC4uIG1ldGhvZDo6IGtxdWV1ZS5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIGZpbGUgZGVzY3JpcHRvciBudW1iZXIgb2YgdGhlIGNvbnRyb2wgZmQuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zZWxlY3RvcnMucnN0IGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODM3N2M4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc2VsZWN0b3JzLnJzdApAQCAtMCwwICsxLDI1NyBAQAorOm1vZDpgc2VsZWN0b3JzYCAtLSBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHNlbGVjdG9ycworICAgOnN5bm9wc2lzOiBIaWdoLWxldmVsIEkvTyBtdWx0aXBsZXhpbmcuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIGFsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKKzptb2Q6YHNlbGVjdGAgbW9kdWxlIHByaW1pdGl2ZXMuIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVzZSB0aGlzIG1vZHVsZQoraW5zdGVhZCwgdW5sZXNzIHRoZXkgd2FudCBwcmVjaXNlIGNvbnRyb2wgb3ZlciB0aGUgT1MtbGV2ZWwgcHJpbWl0aXZlcyB1c2VkLgorCitJdCBkZWZpbmVzIGEgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFic3RyYWN0IGJhc2UgY2xhc3MsIGFsb25nIHdpdGggc2V2ZXJhbAorY29uY3JldGUgaW1wbGVtZW50YXRpb25zICg6Y2xhc3M6YEtxdWV1ZVNlbGVjdG9yYCwgOmNsYXNzOmBFcG9sbFNlbGVjdG9yYC4uLiksCit0aGF0IGNhbiBiZSB1c2VkIHRvIHdhaXQgZm9yIEkvTyByZWFkaW5lc3Mgbm90aWZpY2F0aW9uIG9uIG11bHRpcGxlIGZpbGUKK29iamVjdHMuIEluIHRoZSBmb2xsb3dpbmcsICJmaWxlIG9iamVjdCIgcmVmZXJzIHRvIGFueSBvYmplY3Qgd2l0aCBhCis6bWV0aDpgZmlsZW5vKClgIG1ldGhvZCwgb3IgYSByYXcgZmlsZSBkZXNjcmlwdG9yLiBTZWUgOnRlcm06YGZpbGUgb2JqZWN0YC4KKworOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGlzIGFuIGFsaWFzIHRvIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtOiB0aGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yIG1vc3QKK3VzZXJzLgorCisuLiBub3RlOjoKKyAgIFRoZSB0eXBlIG9mIGZpbGUgb2JqZWN0cyBzdXBwb3J0ZWQgZGVwZW5kcyBvbiB0aGUgcGxhdGZvcm06IG9uIFdpbmRvd3MsCisgICBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQsIGJ1dCBub3QgcGlwZXMsIHdoZXJlYXMgb24gVW5peCwgYm90aCBhcmUgc3VwcG9ydGVkCisgICAoc29tZSBvdGhlciB0eXBlcyBtYXkgYmUgc3VwcG9ydGVkIGFzIHdlbGwsIHN1Y2ggYXMgZmlmb3Mgb3Igc3BlY2lhbCBmaWxlCisgICBkZXZpY2VzKS4KKworLi4gc2VlYWxzbzo6CisKKyAgIDptb2Q6YHNlbGVjdGAKKyAgICAgIExvdy1sZXZlbCBJL08gbXVsdGlwbGV4aW5nIG1vZHVsZS4KKworCitDbGFzc2VzCistLS0tLS0tCisKK0NsYXNzZXMgaGllcmFyY2h5OjoKKworICAgQmFzZVNlbGVjdG9yCisgICArLS0gU2VsZWN0U2VsZWN0b3IKKyAgICstLSBQb2xsU2VsZWN0b3IKKyAgICstLSBFcG9sbFNlbGVjdG9yCisgICArLS0gS3F1ZXVlU2VsZWN0b3IKKworCitJbiB0aGUgZm9sbG93aW5nLCAqZXZlbnRzKiBpcyBhIGJpdHdpc2UgbWFzayBpbmRpY2F0aW5nIHdoaWNoIEkvTyBldmVudHMgc2hvdWxkCitiZSB3YWl0ZWQgZm9yIG9uIGEgZ2l2ZW4gZmlsZSBvYmplY3QuIEl0IGNhbiBiZSBhIGNvbWJpbmF0aW9uIG9mIHRoZSBjb25zdGFudHMKK2JlbG93OgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IENvbnN0YW50ICAgICAgICAgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IDpjb25zdDpgRVZFTlRfUkVBRGAgICB8IEF2YWlsYWJsZSBmb3IgcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IDpjb25zdDpgRVZFTlRfV1JJVEVgICB8IEF2YWlsYWJsZSBmb3Igd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKworLi4gY2xhc3M6OiBTZWxlY3RvcktleQorCisgICBBIDpjbGFzczpgU2VsZWN0b3JLZXlgIGlzIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgdXNlZCB0bworICAgYXNzb2NpYXRlIGEgZmlsZSBvYmplY3QgdG8gaXRzIHVuZGVybHlpbmcgZmlsZSBkZWNyaXB0b3IsIHNlbGVjdGVkIGV2ZW50CisgICBtYXNrIGFuZCBhdHRhY2hlZCBkYXRhLiBJdCBpcyByZXR1cm5lZCBieSBzZXZlcmFsIDpjbGFzczpgQmFzZVNlbGVjdG9yYAorICAgbWV0aG9kcy4KKworICAgLi4gYXR0cmlidXRlOjogZmlsZW9iagorCisgICAgICBGaWxlIG9iamVjdCByZWdpc3RlcmVkLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmZAorCisgICAgICBVbmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci4KKworICAgLi4gYXR0cmlidXRlOjogZXZlbnRzCisKKyAgICAgIEV2ZW50cyB0aGF0IG11c3QgYmUgd2FpdGVkIGZvciBvbiB0aGlzIGZpbGUgb2JqZWN0LgorCisgICAuLiBhdHRyaWJ1dGU6OiBkYXRhCisKKyAgICAgIE9wdGlvbmFsIG9wYXF1ZSBkYXRhIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlIG9iamVjdDogZm9yIGV4YW1wbGUsIHRoaXMKKyAgICAgIGNvdWxkIGJlIHVzZWQgdG8gc3RvcmUgYSBwZXItY2xpZW50IHNlc3Npb24gSUQuCisKKworLi4gY2xhc3M6OiBCYXNlU2VsZWN0b3IKKworICAgQSA6Y2xhc3M6YEJhc2VTZWxlY3RvcmAgaXMgdXNlZCB0byB3YWl0IGZvciBJL08gZXZlbnQgcmVhZGluZXNzIG9uIG11bHRpcGxlCisgICBmaWxlIG9iamVjdHMuIEl0IHN1cHBvcnRzIGZpbGUgc3RyZWFtIHJlZ2lzdHJhdGlvbiwgdW5yZWdpc3RyYXRpb24sIGFuZCBhCisgICBtZXRob2QgdG8gd2FpdCBmb3IgSS9PIGV2ZW50cyBvbiB0aG9zZSBzdHJlYW1zLCB3aXRoIGFuIG9wdGlvbmFsIHRpbWVvdXQuCisgICBJdCdzIGFuIGFic3RyYWN0IGJhc2UgY2xhc3MsIHNvIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQuIFVzZQorICAgOmNsYXNzOmBEZWZhdWx0U2VsZWN0b3JgIGluc3RlYWQsIG9yIG9uZSBvZiA6Y2xhc3M6YFNlbGVjdFNlbGVjdG9yYCwKKyAgIDpjbGFzczpgS3F1ZXVlU2VsZWN0b3JgIGV0Yy4gaWYgeW91IHdhbnQgdG8gc3BlY2lmaWNhbGx5IHVzZSBhbgorICAgaW1wbGVtZW50YXRpb24sIGFuZCB5b3VyIHBsYXRmb3JtIHN1cHBvcnRzIGl0LgorICAgOmNsYXNzOmBCYXNlU2VsZWN0b3JgIGFuZCBpdHMgY29uY3JldGUgaW1wbGVtZW50YXRpb25zIHN1cHBvcnQgdGhlCisgICA6dGVybTpgY29udGV4dCBtYW5hZ2VyYCBwcm90b2NvbC4KKworICAgLi4gbWV0aG9kOjogcmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpCisKKyAgICAgIFJlZ2lzdGVyIGEgZmlsZSBvYmplY3QgZm9yIHNlbGVjdGlvbiwgbW9uaXRvcmluZyBpdCBmb3IgSS9PIGV2ZW50cy4KKworICAgICAgKmZpbGVvYmoqIGlzIHRoZSBmaWxlIG9iamVjdCB0byBtb25pdG9yLiAgSXQgbWF5IGVpdGhlciBiZSBhbiBpbnRlZ2VyCisgICAgICBmaWxlIGRlc2NyaXB0b3Igb3IgYW4gb2JqZWN0IHdpdGggYSBgYGZpbGVubygpYGAgbWV0aG9kLgorICAgICAgKmV2ZW50cyogaXMgYSBiaXR3aXNlIG1hc2sgb2YgZXZlbnRzIHRvIG1vbml0b3IuCisgICAgICAqZGF0YSogaXMgYW4gb3BhcXVlIG9iamVjdC4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaW4gY2FzZSBvZiBpbnZhbGlkIGV2ZW50IG1hc2sgb3IgZmlsZSBkZXNjcmlwdG9yLCBvcgorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuCisKKyAgIC4uIG1ldGhvZDo6IHVucmVnaXN0ZXIoZmlsZW9iaikKKworICAgICAgVW5yZWdpc3RlciBhIGZpbGUgb2JqZWN0IGZyb20gc2VsZWN0aW9uLCByZW1vdmluZyBpdCBmcm9tIG1vbml0b3JpbmcuIEEKKyAgICAgIGZpbGUgb2JqZWN0IHNoYWxsIGJlIHVucmVnaXN0ZXJlZCBwcmlvciB0byBiZWluZyBjbG9zZWQuCisKKyAgICAgICpmaWxlb2JqKiBtdXN0IGJlIGEgZmlsZSBvYmplY3QgcHJldmlvdXNseSByZWdpc3RlcmVkLgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UsIG9yIHJhaXNlcyBhCisgICAgICA6ZXhjOmBLZXlFcnJvcmAgaWYgKmZpbGVvYmoqIGlzIG5vdCByZWdpc3RlcmVkLiAgSXQgd2lsbCByYWlzZQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaWYgKmZpbGVvYmoqIGlzIGludmFsaWQgKGUuZy4gaXQgaGFzIG5vIGBgZmlsZW5vKClgYAorICAgICAgbWV0aG9kIG9yIGl0cyBgYGZpbGVubygpYGAgbWV0aG9kIGhhcyBhbiBpbnZhbGlkIHJldHVybiB2YWx1ZSkuCisKKyAgIC4uIG1ldGhvZDo6IG1vZGlmeShmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSkKKworICAgICAgQ2hhbmdlIGEgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdCdzIG1vbml0b3JlZCBldmVudHMgb3IgYXR0YWNoZWQgZGF0YS4KKworICAgICAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIDptZXRoOmBCYXNlU2VsZWN0b3IudW5yZWdpc3RlcihmaWxlb2JqKWAgZm9sbG93ZWQKKyAgICAgIGJ5IDptZXRoOmBCYXNlU2VsZWN0b3IucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKWAsIGV4Y2VwdCB0aGF0IGl0CisgICAgICBjYW4gYmUgaW1wbGVtZW50ZWQgbW9yZSBlZmZpY2llbnRseS4KKworICAgICAgVGhpcyByZXR1cm5zIGEgbmV3IDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlLCBvciByYWlzZXMgYQorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaW4gY2FzZSBvZiBpbnZhbGlkIGV2ZW50IG1hc2sgb3IgZmlsZSBkZXNjcmlwdG9yLCBvcgorICAgICAgOmV4YzpgS2V5RXJyb3JgIGlmIHRoZSBmaWxlIG9iamVjdCBpcyBub3QgcmVnaXN0ZXJlZC4KKworICAgLi4gbWV0aG9kOjogc2VsZWN0KHRpbWVvdXQ9Tm9uZSkKKworICAgICAgV2FpdCB1bnRpbCBzb21lIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3RzIGJlY29tZSByZWFkeSwgb3IgdGhlIHRpbWVvdXQKKyAgICAgIGV4cGlyZXMuCisKKyAgICAgIElmIGBgdGltZW91dCA+IDBgYCwgdGhpcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gd2FpdCB0aW1lLCBpbiBzZWNvbmRzLgorICAgICAgSWYgYGB0aW1lb3V0IDw9IDBgYCwgdGhlIGNhbGwgd29uJ3QgYmxvY2ssIGFuZCB3aWxsIHJlcG9ydCB0aGUgY3VycmVudGx5CisgICAgICByZWFkeSBmaWxlIG9iamVjdHMuCisgICAgICBJZiAqdGltZW91dCogaXMgYGBOb25lYGAsIHRoZSBjYWxsIHdpbGwgYmxvY2sgdW50aWwgYSBtb25pdG9yZWQgZmlsZSBvYmplY3QKKyAgICAgIGJlY29tZXMgcmVhZHkuCisKKyAgICAgIFRoaXMgcmV0dXJucyBhIGxpc3Qgb2YgYGAoa2V5LCBldmVudHMpYGAgdHVwbGVzLCBvbmUgZm9yIGVhY2ggcmVhZHkgZmlsZQorICAgICAgb2JqZWN0LgorCisgICAgICAqa2V5KiBpcyB0aGUgOmNsYXNzOmBTZWxlY3RvcktleWAgaW5zdGFuY2UgY29ycmVzcG9uZGluZyB0byBhIHJlYWR5IGZpbGUKKyAgICAgIG9iamVjdC4KKyAgICAgICpldmVudHMqIGlzIGEgYml0bWFzayBvZiBldmVudHMgcmVhZHkgb24gdGhpcyBmaWxlIG9iamVjdC4KKworICAgICAgLi4gbm90ZTo6CisgICAgICAgICAgVGhpcyBtZXRob2QgY2FuIHJldHVybiBiZWZvcmUgYW55IGZpbGUgb2JqZWN0IGJlY29tZXMgcmVhZHkgb3IgdGhlCisgICAgICAgICAgdGltZW91dCBoYXMgZWxhcHNlZCBpZiB0aGUgY3VycmVudCBwcm9jZXNzIHJlY2VpdmVzIGEgc2lnbmFsOiBpbiB0aGlzCisgICAgICAgICAgY2FzZSwgYW4gZW1wdHkgbGlzdCB3aWxsIGJlIHJldHVybmVkLgorCisgICAuLiBtZXRob2Q6OiBjbG9zZSgpCisKKyAgICAgIENsb3NlIHRoZSBzZWxlY3Rvci4KKworICAgICAgVGhpcyBtdXN0IGJlIGNhbGxlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgdW5kZXJseWluZyByZXNvdXJjZSBpcyBmcmVlZC4KKyAgICAgIFRoZSBzZWxlY3RvciBzaGFsbCBub3QgYmUgdXNlZCBvbmNlIGl0IGhhcyBiZWVuIGNsb3NlZC4KKworICAgLi4gbWV0aG9kOjogZ2V0X2tleShmaWxlb2JqKQorCisgICAgICBSZXR1cm4gdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggYSByZWdpc3RlcmVkIGZpbGUgb2JqZWN0LgorCisgICAgICBUaGlzIHJldHVybnMgdGhlIDpjbGFzczpgU2VsZWN0b3JLZXlgIGluc3RhbmNlIGFzc29jaWF0ZWQgdG8gdGhpcyBmaWxlCisgICAgICBvYmplY3QsIG9yIHJhaXNlcyA6ZXhjOmBLZXlFcnJvcmAgaWYgdGhlIGZpbGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkLgorCisgICAuLiBtZXRob2Q6OiBnZXRfbWFwKCkKKworICAgICAgUmV0dXJuIGEgbWFwcGluZyBvZiBmaWxlIG9iamVjdHMgdG8gc2VsZWN0b3Iga2V5cy4KKworICAgICAgVGhpcyByZXR1cm5zIGEgOmNsYXNzOmB+Y29sbGVjdGlvbnMuYWJjLk1hcHBpbmdgIGluc3RhbmNlIG1hcHBpbmcKKyAgICAgIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3RzIHRvIHRoZWlyIGFzc29jaWF0ZWQgOmNsYXNzOmBTZWxlY3RvcktleWAKKyAgICAgIGluc3RhbmNlLgorCisKKy4uIGNsYXNzOjogRGVmYXVsdFNlbGVjdG9yKCkKKworICAgVGhlIGRlZmF1bHQgc2VsZWN0b3IgY2xhc3MsIHVzaW5nIHRoZSBtb3N0IGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbgorICAgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBUaGlzIHNob3VsZCBiZSB0aGUgZGVmYXVsdCBjaG9pY2UgZm9yCisgICBtb3N0IHVzZXJzLgorCisKKy4uIGNsYXNzOjogU2VsZWN0U2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnNlbGVjdGAtYmFzZWQgc2VsZWN0b3IuCisKKworLi4gY2xhc3M6OiBQb2xsU2VsZWN0b3IoKQorCisgICA6ZnVuYzpgc2VsZWN0LnBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisKKy4uIGNsYXNzOjogRXBvbGxTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3QuZXBvbGxgLWJhc2VkIHNlbGVjdG9yLgorCisgICAuLiBtZXRob2Q6OiBmaWxlbm8oKQorCisgICAgICBUaGlzIHJldHVybnMgdGhlIGZpbGUgZGVzY3JpcHRvciB1c2VkIGJ5IHRoZSB1bmRlcmx5aW5nCisgICAgICA6ZnVuYzpgc2VsZWN0LmVwb2xsYCBvYmplY3QuCisKKworLi4gY2xhc3M6OiBLcXVldWVTZWxlY3RvcigpCisKKyAgIDpmdW5jOmBzZWxlY3Qua3F1ZXVlYC1iYXNlZCBzZWxlY3Rvci4KKworICAgLi4gbWV0aG9kOjogZmlsZW5vKCkKKworICAgICAgVGhpcyByZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0b3IgdXNlZCBieSB0aGUgdW5kZXJseWluZworICAgICAgOmZ1bmM6YHNlbGVjdC5rcXVldWVgIG9iamVjdC4KKworCitFeGFtcGxlcworLS0tLS0tLS0KKworSGVyZSBpcyBhIHNpbXBsZSBlY2hvIHNlcnZlciBpbXBsZW1lbnRhdGlvbjo6CisKKyAgIGltcG9ydCBzZWxlY3RvcnMKKyAgIGltcG9ydCBzb2NrZXQKKworICAgc2VsID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpCisKKyAgIGRlZiBhY2NlcHQoc29jaywgbWFzayk6CisgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkgICMgU2hvdWxkIGJlIHJlYWR5CisgICAgICAgcHJpbnQoJ2FjY2VwdGVkJywgY29ubiwgJ2Zyb20nLCBhZGRyKQorICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgc2VsLnJlZ2lzdGVyKGNvbm4sIHNlbGVjdG9ycy5FVkVOVF9SRUFELCByZWFkKQorCisgICBkZWYgcmVhZChjb25uLCBtYXNrKToKKyAgICAgICBkYXRhID0gY29ubi5yZWN2KDEwMDApICAjIFNob3VsZCBiZSByZWFkeQorICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgIHByaW50KCdlY2hvaW5nJywgcmVwcihkYXRhKSwgJ3RvJywgY29ubikKKyAgICAgICAgICAgY29ubi5zZW5kKGRhdGEpICAjIEhvcGUgaXQgd29uJ3QgYmxvY2sKKyAgICAgICBlbHNlOgorICAgICAgICAgICBwcmludCgnY2xvc2luZycsIGNvbm4pCisgICAgICAgICAgIHNlbC51bnJlZ2lzdGVyKGNvbm4pCisgICAgICAgICAgIGNvbm4uY2xvc2UoKQorCisgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICBzb2NrLmJpbmQoKCdsb2NhbGhvc3QnLCAxMjM0KSkKKyAgIHNvY2subGlzdGVuKDEwMCkKKyAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICBzZWwucmVnaXN0ZXIoc29jaywgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGFjY2VwdCkKKworICAgd2hpbGUgVHJ1ZToKKyAgICAgICBldmVudHMgPSBzZWwuc2VsZWN0KCkKKyAgICAgICBmb3Iga2V5LCBtYXNrIGluIGV2ZW50czoKKyAgICAgICAgICAgY2FsbGJhY2sgPSBrZXkuZGF0YQorICAgICAgICAgICBjYWxsYmFjayhrZXkuZmlsZW9iaiwgbWFzaykKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QgYi9Eb2MvbGlicmFyeS9zaGVsdmUucnN0CmluZGV4IDA0OGY4MGEuLjIyZTIwMmQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NoZWx2ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2hlbHZlLnJzdApAQCAtNDQsOCArNDQsMTEgQEAKICAgIC4uIG5vdGU6OgogCiAgICAgICBEbyBub3QgcmVseSBvbiB0aGUgc2hlbGYgYmVpbmcgY2xvc2VkIGF1dG9tYXRpY2FsbHk7IGFsd2F5cyBjYWxsCi0gICAgICA6bWV0aDpgY2xvc2VgIGV4cGxpY2l0bHkgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSwgb3IgdXNlIGEKLSAgICAgIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQgd2l0aCA6ZnVuYzpgY29udGV4dGxpYi5jbG9zaW5nYC4KKyAgICAgIDptZXRoOmB+U2hlbGYuY2xvc2VgIGV4cGxpY2l0bHkgd2hlbiB5b3UgZG9uJ3QgbmVlZCBpdCBhbnkgbW9yZSwgb3IKKyAgICAgIHVzZSA6ZnVuYzpgc2hlbHZlLm9wZW5gIGFzIGEgY29udGV4dCBtYW5hZ2VyOjoKKworICAgICAgICAgIHdpdGggc2hlbHZlLm9wZW4oJ3NwYW0nKSBhcyBkYjoKKyAgICAgICAgICAgICAgZGJbJ2VnZ3MnXSA9ICdlZ2dzJwogCiAuLiB3YXJuaW5nOjoKIApAQCAtMTE4LDEwICsxMjEsMTYgQEAKICAgIFRoZSAqa2V5ZW5jb2RpbmcqIHBhcmFtZXRlciBpcyB0aGUgZW5jb2RpbmcgdXNlZCB0byBlbmNvZGUga2V5cyBiZWZvcmUgdGhleQogICAgYXJlIHVzZWQgd2l0aCB0aGUgdW5kZXJseWluZyBkaWN0LgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKLSAgICAgIFRoZSAqa2V5ZW5jb2RpbmcqIHBhcmFtZXRlcjsgcHJldmlvdXNseSwga2V5cyB3ZXJlIGFsd2F5cyBlbmNvZGVkIGluCisgICBBIDpjbGFzczpgU2hlbGZgIG9iamVjdCBjYW4gYWxzbyBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCBpbiB3aGljaAorICAgY2FzZSBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY2xvc2VkIHdoZW4gdGhlIDprZXl3b3JkOmB3aXRoYCBibG9jayBlbmRzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgQWRkZWQgdGhlICprZXllbmNvZGluZyogcGFyYW1ldGVyOyBwcmV2aW91c2x5LCBrZXlzIHdlcmUgYWx3YXlzIGVuY29kZWQgaW4KICAgICAgIFVURi04LgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgY29udGV4dCBtYW5hZ2VyIHN1cHBvcnQuCisKIAogLi4gY2xhc3M6OiBCc2REYlNoZWxmKGRpY3QsIHByb3RvY29sPU5vbmUsIHdyaXRlYmFjaz1GYWxzZSwga2V5ZW5jb2Rpbmc9J3V0Zi04JykKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdCBiL0RvYy9saWJyYXJ5L3NodXRpbC5yc3QKaW5kZXggYTE0NTdkMC4uNzU2NjUyMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2h1dGlsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaHV0aWwucnN0CkBAIC01Myw3ICs1Myw3IEBACiAgICAqZHN0KiBhbmQgcmV0dXJuICpkc3QqLiAgKnNyYyogYW5kICpkc3QqIGFyZSBwYXRoIG5hbWVzIGdpdmVuIGFzIHN0cmluZ3MuCiAgICAqZHN0KiBtdXN0IGJlIHRoZSBjb21wbGV0ZSB0YXJnZXQgZmlsZSBuYW1lOyBsb29rIGF0IDpmdW5jOmBzaHV0aWwuY29weWAKICAgIGZvciBhIGNvcHkgdGhhdCBhY2NlcHRzIGEgdGFyZ2V0IGRpcmVjdG9yeSBwYXRoLiAgSWYgKnNyYyogYW5kICpkc3QqCi0gICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YEVycm9yYCBpcyByYWlzZWQuCisgICBzcGVjaWZ5IHRoZSBzYW1lIGZpbGUsIDpleGM6YFNhbWVGaWxlRXJyb3JgIGlzIHJhaXNlZC4KIAogICAgVGhlIGRlc3RpbmF0aW9uIGxvY2F0aW9uIG11c3QgYmUgd3JpdGFibGU7IG90aGVyd2lzZSwgYW4gOmV4YzpgT1NFcnJvcmAKICAgIGV4Y2VwdGlvbiB3aWxsIGJlIHJhaXNlZC4gSWYgKmRzdCogYWxyZWFkeSBleGlzdHMsIGl0IHdpbGwgYmUgcmVwbGFjZWQuCkBAIC02OSw2ICs2OSwxOSBAQAogICAgICAgQWRkZWQgKmZvbGxvd19zeW1saW5rcyogYXJndW1lbnQuCiAgICAgICBOb3cgcmV0dXJucyAqZHN0Ki4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFJhaXNlIDpleGM6YFNhbWVGaWxlRXJyb3JgIGluc3RlYWQgb2YgOmV4YzpgRXJyb3JgLiAgU2luY2UgdGhlIGZvcm1lciBpcworICAgICAgYSBzdWJjbGFzcyBvZiB0aGUgbGF0dGVyLCB0aGlzIGNoYW5nZSBpcyBiYWNrd2FyZCBjb21wYXRpYmxlLgorCisKKy4uIGV4Y2VwdGlvbjo6IFNhbWVGaWxlRXJyb3IKKworICAgVGhpcyBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW4gOmZ1bmM6YGNvcHlmaWxlYAorICAgYXJlIHRoZSBzYW1lIGZpbGUuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY29weW1vZGUoc3JjLCBkc3QsICosIGZvbGxvd19zeW1saW5rcz1UcnVlKQogCiAgICBDb3B5IHRoZSBwZXJtaXNzaW9uIGJpdHMgZnJvbSAqc3JjKiB0byAqZHN0Ki4gIFRoZSBmaWxlIGNvbnRlbnRzLCBvd25lciwgYW5kCkBAIC0xOTMsOCArMjA2LDggQEAKICAgIGFuZCBtZXRhZGF0YSBvZiB0aGUgbGlua2VkIGZpbGVzIGFyZSBjb3BpZWQgdG8gdGhlIG5ldyB0cmVlLgogCiAgICBXaGVuICpzeW1saW5rcyogaXMgZmFsc2UsIGlmIHRoZSBmaWxlIHBvaW50ZWQgYnkgdGhlIHN5bWxpbmsgZG9lc24ndAotICAgZXhpc3QsIGEgZXhjZXB0aW9uIHdpbGwgYmUgYWRkZWQgaW4gdGhlIGxpc3Qgb2YgZXJyb3JzIHJhaXNlZCBpbgotICAgYSA6ZXhjOmBFcnJvcmAgZXhjZXB0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGNvcHkgcHJvY2Vzcy4KKyAgIGV4aXN0LCBhbiBleGNlcHRpb24gd2lsbCBiZSBhZGRlZCBpbiB0aGUgbGlzdCBvZiBlcnJvcnMgcmFpc2VkIGluCisgICBhbiA6ZXhjOmBFcnJvcmAgZXhjZXB0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGNvcHkgcHJvY2Vzcy4KICAgIFlvdSBjYW4gc2V0IHRoZSBvcHRpb25hbCAqaWdub3JlX2RhbmdsaW5nX3N5bWxpbmtzKiBmbGFnIHRvIHRydWUgaWYgeW91CiAgICB3YW50IHRvIHNpbGVuY2UgdGhpcyBleGNlcHRpb24uIE5vdGljZSB0aGF0IHRoaXMgb3B0aW9uIGhhcyBubyBlZmZlY3QKICAgIG9uIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgOmZ1bmM6YG9zLnN5bWxpbmtgLgpAQCAtMjc0LDEyICsyODcsOSBAQAogICAgUmVjdXJzaXZlbHkgbW92ZSBhIGZpbGUgb3IgZGlyZWN0b3J5ICgqc3JjKikgdG8gYW5vdGhlciBsb2NhdGlvbiAoKmRzdCopCiAgICBhbmQgcmV0dXJuIHRoZSBkZXN0aW5hdGlvbi4KIAotICAgSWYgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5IG9yIGEgc3ltbGluayB0byBhIGRpcmVjdG9yeSwgdGhlbiAqc3JjKiBpcwotICAgbW92ZWQgaW5zaWRlIHRoYXQgZGlyZWN0b3J5LgotCi0gICBUaGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IG11c3Qgbm90IGFscmVhZHkgZXhpc3QuICBJZiB0aGUgZGVzdGluYXRpb24gYWxyZWFkeQotICAgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnksIGl0IG1heSBiZSBvdmVyd3JpdHRlbiBkZXBlbmRpbmcgb24KLSAgIDpmdW5jOmBvcy5yZW5hbWVgIHNlbWFudGljcy4KKyAgIElmIHRoZSBkZXN0aW5hdGlvbiBpcyBhbiBleGlzdGluZyBkaXJlY3RvcnksIHRoZW4gKnNyYyogaXMgbW92ZWQgaW5zaWRlIHRoYXQKKyAgIGRpcmVjdG9yeS4gSWYgdGhlIGRlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzIGJ1dCBpcyBub3QgYSBkaXJlY3RvcnksIGl0IG1heQorICAgYmUgb3ZlcndyaXR0ZW4gZGVwZW5kaW5nIG9uIDpmdW5jOmBvcy5yZW5hbWVgIHNlbWFudGljcy4KIAogICAgSWYgdGhlIGRlc3RpbmF0aW9uIGlzIG9uIHRoZSBjdXJyZW50IGZpbGVzeXN0ZW0sIHRoZW4gOmZ1bmM6YG9zLnJlbmFtZWAgaXMKICAgIHVzZWQuICBPdGhlcndpc2UsICpzcmMqIGlzIGNvcGllZCAodXNpbmcgOmZ1bmM6YHNodXRpbC5jb3B5MmApIHRvICpkc3QqIGFuZApAQCAtMzI4LDcgKzMzOCw3IEBACiAKICAgIE9uIFdpbmRvd3MsIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBhbHdheXMgcHJlcGVuZGVkIHRvIHRoZSAqcGF0aCogd2hldGhlcgogICAgb3Igbm90IHlvdSB1c2UgdGhlIGRlZmF1bHQgb3IgcHJvdmlkZSB5b3VyIG93biwgd2hpY2ggaXMgdGhlIGJlaGF2aW9yIHRoZQotICAgY29tbWFuZCBzaGVsbCB1c2VzIHdoZW4gZmluZGluZyBleGVjdXRhYmxlcy4gIEFkZGl0aW9uYWx5LCB3aGVuIGZpbmRpbmcgdGhlCisgICBjb21tYW5kIHNoZWxsIHVzZXMgd2hlbiBmaW5kaW5nIGV4ZWN1dGFibGVzLiAgQWRkaXRpb25hbGx5LCB3aGVuIGZpbmRpbmcgdGhlCiAgICAqY21kKiBpbiB0aGUgKnBhdGgqLCB0aGUgYGBQQVRIRVhUYGAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgY2hlY2tlZC4gIEZvcgogICAgZXhhbXBsZSwgaWYgeW91IGNhbGwgYGBzaHV0aWwud2hpY2goInB5dGhvbiIpYGAsIDpmdW5jOmB3aGljaGAgd2lsbCBzZWFyY2gKICAgIGBgUEFUSEVYVGBgIHRvIGtub3cgdGhhdCBpdCBzaG91bGQgbG9vayBmb3IgYGBweXRob24uZXhlYGAgd2l0aGluIHRoZSAqcGF0aCoKQEAgLTM4MCwxMSArMzkwLDEwIEBACiAgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQogICAgICAgIHRyeToKICAgICAgICAgICAgY29weXN0YXQoc3JjLCBkc3QpCi0gICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKLSAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKLSAgICAgICAgICAgcGFzcwogICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgICAgZXJyb3JzLmV4dGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKKyAgICAgICAgICAgIyBjYW4ndCBjb3B5IGZpbGUgYWNjZXNzIHRpbWVzIG9uIFdpbmRvd3MKKyAgICAgICAgICAgaWYgd2h5LndpbmVycm9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKChzcmMsIGRzdCwgc3RyKHdoeSkpKQogICAgICAgIGlmIGVycm9yczoKICAgICAgICAgICAgcmFpc2UgRXJyb3IoZXJyb3JzKQogCkBAIC00MzcsMTcgKzQ0NiwyMiBAQAogCiAgICAqcm9vdF9kaXIqIGFuZCAqYmFzZV9kaXIqIGJvdGggZGVmYXVsdCB0byB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAKKyAgIElmICpkcnlfcnVuKiBpcyB0cnVlLCBubyBhcmNoaXZlIGlzIGNyZWF0ZWQsIGJ1dCB0aGUgb3BlcmF0aW9ucyB0aGF0IHdvdWxkIGJlCisgICBleGVjdXRlZCBhcmUgbG9nZ2VkIHRvICpsb2dnZXIqLgorCiAgICAqb3duZXIqIGFuZCAqZ3JvdXAqIGFyZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgYXJjaGl2ZS4gQnkgZGVmYXVsdCwKICAgIHVzZXMgdGhlIGN1cnJlbnQgb3duZXIgYW5kIGdyb3VwLgogCiAgICAqbG9nZ2VyKiBtdXN0IGJlIGFuIG9iamVjdCBjb21wYXRpYmxlIHdpdGggOnBlcDpgMjgyYCwgdXN1YWxseSBhbiBpbnN0YW5jZSBvZgogICAgOmNsYXNzOmBsb2dnaW5nLkxvZ2dlcmAuCiAKKyAgIFRoZSAqdmVyYm9zZSogYXJndW1lbnQgaXMgdW51c2VkIGFuZCBkZXByZWNhdGVkLgorCiAKIC4uIGZ1bmN0aW9uOjogZ2V0X2FyY2hpdmVfZm9ybWF0cygpCiAKICAgIFJldHVybiBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGZvcm1hdHMgZm9yIGFyY2hpdmluZy4KLSAgIEVhY2ggZWxlbWVudCBvZiB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgaXMgYSB0dXBsZSBgYChuYW1lLCBkZXNjcmlwdGlvbilgYAorICAgRWFjaCBlbGVtZW50IG9mIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSBpcyBhIHR1cGxlIGBgKG5hbWUsIGRlc2NyaXB0aW9uKWBgLgogCiAgICBCeSBkZWZhdWx0IDptb2Q6YHNodXRpbGAgcHJvdmlkZXMgdGhlc2UgZm9ybWF0czoKIApAQCAtNDYyLDE0ICs0NzYsMTkgQEAKIAogLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChuYW1lLCBmdW5jdGlvbiwgW2V4dHJhX2FyZ3MsIFtkZXNjcmlwdGlvbl1dKQogCi0gICBSZWdpc3RlciBhbiBhcmNoaXZlciBmb3IgdGhlIGZvcm1hdCAqbmFtZSouICpmdW5jdGlvbiogaXMgYSBjYWxsYWJsZSB0aGF0Ci0gICB3aWxsIGJlIHVzZWQgdG8gaW52b2tlIHRoZSBhcmNoaXZlci4KKyAgIFJlZ2lzdGVyIGFuIGFyY2hpdmVyIGZvciB0aGUgZm9ybWF0ICpuYW1lKi4KKworICAgKmZ1bmN0aW9uKiBpcyB0aGUgY2FsbGFibGUgdGhhdCB3aWxsIGJlIHVzZWQgdG8gdW5wYWNrIGFyY2hpdmVzLiBUaGUgY2FsbGFibGUKKyAgIHdpbGwgcmVjZWl2ZSB0aGUgKmJhc2VfbmFtZSogb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBmb2xsb3dlZCBieSB0aGUKKyAgICpiYXNlX2RpciogKHdoaWNoIGRlZmF1bHRzIHRvIDpkYXRhOmBvcy5jdXJkaXJgKSB0byBzdGFydCBhcmNoaXZpbmcgZnJvbS4KKyAgIEZ1cnRoZXIgYXJndW1lbnRzIGFyZSBwYXNzZWQgYXMga2V5d29yZCBhcmd1bWVudHM6ICpvd25lciosICpncm91cCosCisgICAqZHJ5X3J1biogYW5kICpsb2dnZXIqIChhcyBwYXNzZWQgaW4gOmZ1bmM6YG1ha2VfYXJjaGl2ZWApLgogCiAgICBJZiBnaXZlbiwgKmV4dHJhX2FyZ3MqIGlzIGEgc2VxdWVuY2Ugb2YgYGAobmFtZSwgdmFsdWUpYGAgcGFpcnMgdGhhdCB3aWxsIGJlCiAgICB1c2VkIGFzIGV4dHJhIGtleXdvcmRzIGFyZ3VtZW50cyB3aGVuIHRoZSBhcmNoaXZlciBjYWxsYWJsZSBpcyB1c2VkLgogCiAgICAqZGVzY3JpcHRpb24qIGlzIHVzZWQgYnkgOmZ1bmM6YGdldF9hcmNoaXZlX2Zvcm1hdHNgIHdoaWNoIHJldHVybnMgdGhlCi0gICBsaXN0IG9mIGFyY2hpdmVycy4gRGVmYXVsdHMgdG8gYW4gZW1wdHkgbGlzdC4KKyAgIGxpc3Qgb2YgYXJjaGl2ZXJzLiAgRGVmYXVsdHMgdG8gYW4gZW1wdHkgc3RyaW5nLgogCiAKIC4uIGZ1bmN0aW9uOjogdW5yZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdChuYW1lKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdCBiL0RvYy9saWJyYXJ5L3NpZ25hbC5yc3QKaW5kZXggODRlMjgzNi4uOGI5MDk5NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2lnbmFsLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zaWduYWwucnN0CkBAIC05NSw3ICs5NSw3IEBACiAKIC4uIGRhdGE6OiBDVFJMX0NfRVZFTlQKIAotICAgVGhlIHNpZ25hbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBDVFJMK0Mga2V5c3Ryb2tlIGV2ZW50LiBUaGlzIHNpZ25hbCBjYW4KKyAgIFRoZSBzaWduYWwgY29ycmVzcG9uZGluZyB0byB0aGUgOmtiZDpgQ3RybCtDYCBrZXlzdHJva2UgZXZlbnQuIFRoaXMgc2lnbmFsIGNhbgogICAgb25seSBiZSB1c2VkIHdpdGggOmZ1bmM6YG9zLmtpbGxgLgogCiAgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogLi4gZGF0YTo6IENUUkxfQlJFQUtfRVZFTlQKIAotICAgVGhlIHNpZ25hbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBDVFJMK0JSRUFLIGtleXN0cm9rZSBldmVudC4gVGhpcyBzaWduYWwgY2FuCisgICBUaGUgc2lnbmFsIGNvcnJlc3BvbmRpbmcgdG8gdGhlIDprYmQ6YEN0cmwrQnJlYWtgIGtleXN0cm9rZSBldmVudC4gVGhpcyBzaWduYWwgY2FuCiAgICBvbmx5IGJlIHVzZWQgd2l0aCA6ZnVuYzpgb3Mua2lsbGAuCiAKICAgIEF2YWlsYWJpbGl0eTogV2luZG93cy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NpdGUucnN0IGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKaW5kZXggMzZiODBjMy4uNTFlNWRhOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc2l0ZS5yc3QKQEAgLTM4LDYgKzM4LDkgQEAKIGlmIGl0IHJlZmVycyB0byBhbiBleGlzdGluZyBkaXJlY3RvcnksIGFuZCBpZiBzbywgYWRkcyBpdCB0byBgYHN5cy5wYXRoYGAgYW5kCiBhbHNvIGluc3BlY3RzIHRoZSBuZXdseSBhZGRlZCBwYXRoIGZvciBjb25maWd1cmF0aW9uIGZpbGVzLgogCisuLiBkZXByZWNhdGVkOjogMy40CisgICBTdXBwb3J0IGZvciB0aGUgInNpdGUtcHl0aG9uIiBkaXJlY3Rvcnkgd2lsbCBiZSByZW1vdmVkIGluIDMuNS4KKwogSWYgYSBmaWxlIG5hbWVkICJweXZlbnYuY2ZnIiBleGlzdHMgb25lIGRpcmVjdG9yeSBhYm92ZSBzeXMuZXhlY3V0YWJsZSwKIHN5cy5wcmVmaXggYW5kIHN5cy5leGVjX3ByZWZpeCBhcmUgc2V0IHRvIHRoYXQgZGlyZWN0b3J5IGFuZAogaXQgaXMgYWxzbyBjaGVja2VkIGZvciBzaXRlLXBhY2thZ2VzIGFuZCBzaXRlLXB5dGhvbiAoc3lzLmJhc2VfcHJlZml4IGFuZApAQCAtOTYsNyArOTksMTEgQEAKIDptb2Q6YHNpdGVjdXN0b21pemVgLCB3aGljaCBjYW4gcGVyZm9ybSBhcmJpdHJhcnkgc2l0ZS1zcGVjaWZpYyBjdXN0b21pemF0aW9ucy4KIEl0IGlzIHR5cGljYWxseSBjcmVhdGVkIGJ5IGEgc3lzdGVtIGFkbWluaXN0cmF0b3IgaW4gdGhlIHNpdGUtcGFja2FnZXMKIGRpcmVjdG9yeS4gIElmIHRoaXMgaW1wb3J0IGZhaWxzIHdpdGggYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGV4Y2VwdGlvbiwgaXQgaXMKLXNpbGVudGx5IGlnbm9yZWQuCitzaWxlbnRseSBpZ25vcmVkLiAgSWYgUHl0aG9uIGlzIHN0YXJ0ZWQgd2l0aG91dCBvdXRwdXQgc3RyZWFtcyBhdmFpbGFibGUsIGFzCit3aXRoIDpmaWxlOmBweXRob253LmV4ZWAgb24gV2luZG93cyAod2hpY2ggaXMgdXNlZCBieSBkZWZhdWx0IHRvIHN0YXJ0IElETEUpLAorYXR0ZW1wdGVkIG91dHB1dCBmcm9tIDptb2Q6YHNpdGVjdXN0b21pemVgIGlzIGlnbm9yZWQuIEFueSBleGNlcHRpb24gb3RoZXIKK3RoYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGNhdXNlcyBhIHNpbGVudCBhbmQgcGVyaGFwcyBteXN0ZXJpb3VzIGZhaWx1cmUgb2YgdGhlCitwcm9jZXNzLgogCiAuLiBpbmRleDo6IG1vZHVsZTogdXNlcmN1c3RvbWl6ZQogCkBAIC0xMTEsNiArMTE4LDI3IEBACiA6bW9kOmBzaXRlY3VzdG9taXplYCBhbmQgOm1vZDpgdXNlcmN1c3RvbWl6ZWAgaXMgc3RpbGwgYXR0ZW1wdGVkLgogCiAKKy4uIF9ybGNvbXBsZXRlci1jb25maWc6CisKK1JlYWRsaW5lIGNvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgOm1vZDpgcmVhZGxpbmVgLCB0aGlzIG1vZHVsZSB3aWxsIGFsc28gaW1wb3J0IGFuZAorY29uZmlndXJlIHRoZSA6bW9kOmBybGNvbXBsZXRlcmAgbW9kdWxlLCBpZiBQeXRob24gaXMgc3RhcnRlZCBpbgorOnJlZjpgaW50ZXJhY3RpdmUgbW9kZSA8dHV0LWludGVyYWN0aXZlPmAgYW5kIHdpdGhvdXQgdGhlIDpvcHRpb246YC1TYCBvcHRpb24uCitUaGUgZGVmYXVsdCBiZWhhdmlvciBpcyBlbmFibGUgdGFiLWNvbXBsZXRpb24gYW5kIHRvIHVzZQorOmZpbGU6YH4vLnB5dGhvbl9oaXN0b3J5YCBhcyB0aGUgaGlzdG9yeSBzYXZlIGZpbGUuICBUbyBkaXNhYmxlIGl0LCBkZWxldGUgKG9yCitvdmVycmlkZSkgdGhlIDpkYXRhOmBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfX2AgYXR0cmlidXRlIGluIHlvdXIKKzptb2Q6YHNpdGVjdXN0b21pemVgIG9yIDptb2Q6YHVzZXJjdXN0b21pemVgIG1vZHVsZSBvciB5b3VyCis6ZW52dmFyOmBQWVRIT05TVEFSVFVQYCBmaWxlLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgQWN0aXZhdGlvbiBvZiBybGNvbXBsZXRlciBhbmQgaGlzdG9yeSB3YXMgbWFkZSBhdXRvbWF0aWMuCisKKworTW9kdWxlIGNvbnRlbnRzCistLS0tLS0tLS0tLS0tLS0KKwogLi4gZGF0YTo6IFBSRUZJWEVTCiAKICAgIEEgbGlzdCBvZiBwcmVmaXhlcyBmb3Igc2l0ZS1wYWNrYWdlcyBkaXJlY3Rvcmllcy4KQEAgLTE1MywxMSArMTgxLDEwIEBACiAKICAgIEFkZHMgYWxsIHRoZSBzdGFuZGFyZCBzaXRlLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBtb2R1bGUgc2VhcmNoCiAgICBwYXRoLiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoaXMgbW9kdWxlIGlzIGltcG9ydGVkLAotICAgdW5sZXNzIHRoZSA6cHJvZ3JhbTpgcHl0aG9uYCBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZSA6b3B0aW9uOmAtU2AKLSAgIGZsYWcuCisgICB1bmxlc3MgdGhlIFB5dGhvbiBpbnRlcnByZXRlciB3YXMgc3RhcnRlZCB3aXRoIHRoZSA6b3B0aW9uOmAtU2AgZmxhZy4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSBjYWxsZWQgdW5jb25kaXRpb25uYWxseS4KKyAgICAgIFRoaXMgZnVuY3Rpb24gdXNlZCB0byBiZSBjYWxsZWQgdW5jb25kaXRpb25hbGx5LgogCiAKIC4uIGZ1bmN0aW9uOjogYWRkc2l0ZWRpcihzaXRlZGlyLCBrbm93bl9wYXRocz1Ob25lKQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc210cGQucnN0IGIvRG9jL2xpYnJhcnkvc210cGQucnN0CmluZGV4IGYzMDU4MTguLjNlYmVkMDYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NtdHBkLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zbXRwZC5yc3QKQEAgLTI3LDcgKzI3LDggQEAKIC0tLS0tLS0tLS0tLS0tLS0tLQogCiAKLS4uIGNsYXNzOjogU01UUFNlcnZlcihsb2NhbGFkZHIsIHJlbW90ZWFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMikKKy4uIGNsYXNzOjogU01UUFNlcnZlcihsb2NhbGFkZHIsIHJlbW90ZWFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMixcCisgICAgICAgICAgICAgICAgICAgICAgbWFwPU5vbmUpCiAKICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YFNNVFBTZXJ2ZXJgIG9iamVjdCwgd2hpY2ggYmluZHMgdG8gbG9jYWwgYWRkcmVzcwogICAgKmxvY2FsYWRkciouICBJdCB3aWxsIHRyZWF0ICpyZW1vdGVhZGRyKiBhcyBhbiB1cHN0cmVhbSBTTVRQIHJlbGF5ZXIuICBJdApAQCAtMzgsNiArMzksOCBAQAogICAgYWNjZXB0ZWQgaW4gYSBgYERBVEFgYCBjb21tYW5kLiAgQSB2YWx1ZSBvZiBgYE5vbmVgYCBvciBgYDBgYCBtZWFucyBubwogICAgbGltaXQuCiAKKyAgIEEgZGljdGlvbmFyeSBjYW4gYmUgc3BlY2lmaWVkIGluICptYXAqIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIHNvY2tldCBtYXAuCisKICAgIC4uIG1ldGhvZDo6IHByb2Nlc3NfbWVzc2FnZShwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSkKIAogICAgICAgUmFpc2UgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgZXhjZXB0aW9uLiBPdmVycmlkZSB0aGlzIGluIHN1YmNsYXNzZXMgdG8KQEAgLTUzLDYgKzU2LDkgQEAKICAgICAgIE92ZXJyaWRlIHRoaXMgaW4gc3ViY2xhc3NlcyB0byB1c2UgYSBjdXN0b20gOmNsYXNzOmBTTVRQQ2hhbm5lbGAgZm9yCiAgICAgICBtYW5hZ2luZyBTTVRQIGNsaWVudHMuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgKm1hcCogYXJndW1lbnQgd2FzIGFkZGVkLgorCiAKIERlYnVnZ2luZ1NlcnZlciBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtOTAsMTEgKzk2LDIwIEBACiBTTVRQQ2hhbm5lbCBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKLS4uIGNsYXNzOjogU01UUENoYW5uZWwoc2VydmVyLCBjb25uLCBhZGRyKQorLi4gY2xhc3M6OiBTTVRQQ2hhbm5lbChzZXJ2ZXIsIGNvbm4sIGFkZHIsIGRhdGFfc2l6ZV9saW1pdD0zMzU1NDQzMixcCisgICAgICAgICAgICAgICAgICAgICAgIG1hcD1Ob25lKSkKIAogICAgQ3JlYXRlIGEgbmV3IDpjbGFzczpgU01UUENoYW5uZWxgIG9iamVjdCB3aGljaCBtYW5hZ2VzIHRoZSBjb21tdW5pY2F0aW9uCiAgICBiZXR3ZWVuIHRoZSBzZXJ2ZXIgYW5kIGEgc2luZ2xlIFNNVFAgY2xpZW50LgogCisgICAqY29ubiogYW5kICphZGRyKiBhcmUgYXMgcGVyIHRoZSBpbnN0YW5jZSB2YXJpYWJsZXMgZGVzY3JpYmVkIGJlbG93LgorCisgICAqZGF0YV9zaXplX2xpbWl0KiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgd2lsbCBiZQorICAgYWNjZXB0ZWQgaW4gYSBgYERBVEFgYCBjb21tYW5kLiAgQSB2YWx1ZSBvZiBgYE5vbmVgYCBvciBgYDBgYCBtZWFucyBubworICAgbGltaXQuCisKKyAgIEEgZGljdGlvbmFyeSBjYW4gYmUgc3BlY2lmaWVkIGluICptYXAqIHRvIGF2b2lkIHVzaW5nIGEgZ2xvYmFsIHNvY2tldCBtYXAuCisKICAgIFRvIHVzZSBhIGN1c3RvbSBTTVRQQ2hhbm5lbCBpbXBsZW1lbnRhdGlvbiB5b3UgbmVlZCB0byBvdmVycmlkZSB0aGUKICAgIDphdHRyOmBTTVRQU2VydmVyLmNoYW5uZWxfY2xhc3NgIG9mIHlvdXIgOmNsYXNzOmBTTVRQU2VydmVyYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc210cGxpYi5yc3QgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAppbmRleCBhZGRjNmJlLi5iODdhZDVmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zbXRwbGliLnJzdApAQCAtMjIsNyArMjIsNyBAQAogCiAuLiBjbGFzczo6IFNNVFAoaG9zdD0nJywgcG9ydD0wLCBsb2NhbF9ob3N0bmFtZT1Ob25lWywgdGltZW91dF0sIHNvdXJjZV9hZGRyZXNzPU5vbmUpCiAKLSAgIEEgOmNsYXNzOmBTTVRQYCBpbnN0YW5jZSBlbmNhcHN1bGF0ZXMgYW4gU01UUCBjb25uZWN0aW9uLiAgSXQgaGFzIG1ldGhvZHMKKyAgIEFuIDpjbGFzczpgU01UUGAgaW5zdGFuY2UgZW5jYXBzdWxhdGVzIGFuIFNNVFAgY29ubmVjdGlvbi4gIEl0IGhhcyBtZXRob2RzCiAgICB0aGF0IHN1cHBvcnQgYSBmdWxsIHJlcGVydG9pcmUgb2YgU01UUCBhbmQgRVNNVFAgb3BlcmF0aW9ucy4gSWYgdGhlIG9wdGlvbmFsCiAgICBob3N0IGFuZCBwb3J0IHBhcmFtZXRlcnMgYXJlIGdpdmVuLCB0aGUgU01UUCA6bWV0aDpgY29ubmVjdGAgbWV0aG9kIGlzCiAgICBjYWxsZWQgd2l0aCB0aG9zZSBwYXJhbWV0ZXJzIGR1cmluZyBpbml0aWFsaXphdGlvbi4gIElmIHNwZWNpZmllZCwKQEAgLTMyLDcgKzMyLDggQEAKICAgIHRoYW4gYSBzdWNjZXNzIGNvZGUsIGFuIDpleGM6YFNNVFBDb25uZWN0RXJyb3JgIGlzIHJhaXNlZC4gVGhlIG9wdGlvbmFsCiAgICAqdGltZW91dCogcGFyYW1ldGVyIHNwZWNpZmllcyBhIHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgYmxvY2tpbmcgb3BlcmF0aW9ucwogICAgbGlrZSB0aGUgY29ubmVjdGlvbiBhdHRlbXB0IChpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ2xvYmFsIGRlZmF1bHQgdGltZW91dAotICAgc2V0dGluZyB3aWxsIGJlIHVzZWQpLiBUaGUgb3B0aW9uYWwgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyIGFsbG93cyB0byBiaW5kCisgICBzZXR0aW5nIHdpbGwgYmUgdXNlZCkuICBJZiB0aGUgdGltZW91dCBleHBpcmVzLCA6ZXhjOmBzb2NrZXQudGltZW91dGAgaXMKKyAgIHJhaXNlZC4gIFRoZSBvcHRpb25hbCBzb3VyY2VfYWRkcmVzcyBwYXJhbWV0ZXIgYWxsb3dzIHRvIGJpbmQKICAgIHRvIHNvbWUgc3BlY2lmaWMgc291cmNlIGFkZHJlc3MgaW4gYSBtYWNoaW5lIHdpdGggbXVsdGlwbGUgbmV0d29yawogICAgaW50ZXJmYWNlcywgYW5kL29yIHRvIHNvbWUgc3BlY2lmaWMgc291cmNlIFRDUCBwb3J0LiBJdCB0YWtlcyBhIDItdHVwbGUKICAgIChob3N0LCBwb3J0KSwgZm9yIHRoZSBzb2NrZXQgdG8gYmluZCB0byBhcyBpdHMgc291cmNlIGFkZHJlc3MgYmVmb3JlCkBAIC02NCwyNSArNjUsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSBbLCB0aW1lb3V0XSwgY29udGV4dD1Ob25lLCBcCiAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpCiAKLSAgIEEgOmNsYXNzOmBTTVRQX1NTTGAgaW5zdGFuY2UgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lIGFzIGluc3RhbmNlcyBvZgorICAgQW4gOmNsYXNzOmBTTVRQX1NTTGAgaW5zdGFuY2UgYmVoYXZlcyBleGFjdGx5IHRoZSBzYW1lIGFzIGluc3RhbmNlcyBvZgogICAgOmNsYXNzOmBTTVRQYC4gOmNsYXNzOmBTTVRQX1NTTGAgc2hvdWxkIGJlIHVzZWQgZm9yIHNpdHVhdGlvbnMgd2hlcmUgU1NMIGlzCiAgICByZXF1aXJlZCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbm5lY3Rpb24gYW5kIHVzaW5nIDptZXRoOmBzdGFydHRsc2AgaXMKICAgIG5vdCBhcHByb3ByaWF0ZS4gSWYgKmhvc3QqIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBsb2NhbCBob3N0IGlzIHVzZWQuIElmCiAgICAqcG9ydCogaXMgemVybywgdGhlIHN0YW5kYXJkIFNNVFAtb3Zlci1TU0wgcG9ydCAoNDY1KSBpcyB1c2VkLiAgVGhlIG9wdGlvbmFsCi0gICBhcmd1bWVudHMgKmxvY2FsX2hvc3RuYW1lKiBhbmQgKnNvdXJjZV9hZGRyZXNzKiBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMKLSAgIHRoZXkgZG8gaW4gdGhlIDpjbGFzczpgU01UUGAgY2xhc3MuICAqa2V5ZmlsZSogYW5kICpjZXJ0ZmlsZSogYXJlIGFsc28KLSAgIG9wdGlvbmFsLCBhbmQgY2FuIGNvbnRhaW4gYSBQRU0gZm9ybWF0dGVkIHByaXZhdGUga2V5IGFuZCBjZXJ0aWZpY2F0ZSBjaGFpbgotICAgZmlsZSBmb3IgdGhlIFNTTCBjb25uZWN0aW9uLiAqY29udGV4dCogYWxzbyBvcHRpb25hbCwgY2FuIGNvbnRhaW4gYQotICAgU1NMQ29udGV4dCwgYW5kIGlzIGFuIGFsdGVybmF0aXZlIHRvIGtleWZpbGUgYW5kIGNlcnRmaWxlOyBJZiBpdCBpcwotICAgc3BlY2lmaWVkIGJvdGgga2V5ZmlsZSBhbmQgY2VydGZpbGUgbXVzdCBiZSBOb25lLiAgVGhlIG9wdGlvbmFsICp0aW1lb3V0KgotICAgcGFyYW1ldGVyIHNwZWNpZmllcyBhIHRpbWVvdXQgaW4gc2Vjb25kcyBmb3IgYmxvY2tpbmcgb3BlcmF0aW9ucyBsaWtlIHRoZQotICAgY29ubmVjdGlvbiBhdHRlbXB0IChpZiBub3Qgc3BlY2lmaWVkLCB0aGUgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBzZXR0aW5nCi0gICB3aWxsIGJlIHVzZWQpLiBUaGUgb3B0aW9uYWwgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyIGFsbG93cyB0byBiaW5kIHRvIHNvbWUKLSAgIHNwZWNpZmljIHNvdXJjZSBhZGRyZXNzIGluIGEgbWFjaGluZSB3aXRoIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlcywKLSAgIGFuZC9vciB0byBzb21lIHNwZWNpZmljIHNvdXJjZSB0Y3AgcG9ydC4gSXQgdGFrZXMgYSAyLXR1cGxlIChob3N0LCBwb3J0KSwKLSAgIGZvciB0aGUgc29ja2V0IHRvIGJpbmQgdG8gYXMgaXRzIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0aW5nLiBJZgotICAgb21pdHRlZCAob3IgaWYgaG9zdCBvciBwb3J0IGFyZSBgYCcnYGAgYW5kL29yIDAgcmVzcGVjdGl2ZWx5KSB0aGUgT1MgZGVmYXVsdAotICAgYmVoYXZpb3Igd2lsbCBiZSB1c2VkLgorICAgYXJndW1lbnRzICpsb2NhbF9ob3N0bmFtZSosICp0aW1lb3V0KiBhbmQgKnNvdXJjZV9hZGRyZXNzKiBoYXZlIHRoZSBzYW1lCisgICBtZWFuaW5nIGFzIHRoZXkgZG8gaW4gdGhlIDpjbGFzczpgU01UUGAgY2xhc3MuICAqY29udGV4dCosIGFsc28gb3B0aW9uYWwsCisgICBjYW4gY29udGFpbiBhIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCBhbmQgYWxsb3dzIHRvIGNvbmZpZ3VyZSB2YXJpb3VzCisgICBhc3BlY3RzIG9mIHRoZSBzZWN1cmUgY29ubmVjdGlvbi4gIFBsZWFzZSByZWFkIDpyZWY6YHNzbC1zZWN1cml0eWAgZm9yCisgICBiZXN0IHByYWN0aWNlcy4KKworICAgKmtleWZpbGUqIGFuZCAqY2VydGZpbGUqIGFyZSBhIGxlZ2FjeSBhbHRlcm5hdGl2ZSB0byAqY29udGV4dCosIGFuZCBjYW4KKyAgIHBvaW50IHRvIGEgUEVNIGZvcm1hdHRlZCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUgY2hhaW4gZmlsZSBmb3IgdGhlCisgICBTU0wgY29ubmVjdGlvbi4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpjb250ZXh0KiB3YXMgYWRkZWQuCkBAIC05MCw2ICs4NiwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIHNvdXJjZV9hZGRyZXNzIGFyZ3VtZW50IHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBjbGFzcyBub3cgc3VwcG9ydHMgaG9zdG5hbWUgY2hlY2sgd2l0aAorICAgICAgOmF0dHI6YHNzbC5TU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lYCBhbmQgKlNlcnZlciBOYW1lIEluZGljYXRpb24qIChzZWUKKyAgICAgIDpkYXRhOmBzc2wuSEFTX1NOSWApLgogCiAuLiBjbGFzczo6IExNVFAoaG9zdD0nJywgcG9ydD1MTVRQX1BPUlQsIGxvY2FsX2hvc3RuYW1lPU5vbmUsIHNvdXJjZV9hZGRyZXNzPU5vbmUpCiAKQEAgLTExMCw4ICsxMTAsMTEgQEAKIAogLi4gZXhjZXB0aW9uOjogU01UUEV4Y2VwdGlvbgogCi0gICBUaGUgYmFzZSBleGNlcHRpb24gY2xhc3MgZm9yIGFsbCB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzCi0gICBtb2R1bGUuCisgICBTdWJjbGFzcyBvZiA6ZXhjOmBPU0Vycm9yYCB0aGF0IGlzIHRoZSBiYXNlIGV4Y2VwdGlvbiBjbGFzcyBmb3IgYWxsCisgICB0aGUgb3RoZXIgZXhjZXB0aW9ucyBwcm92aWRlZCBieSB0aGlzIG1vZHVsZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFNNVFBFeGNlcHRpb24gYmVjYW1lIHN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgCiAKIAogLi4gZXhjZXB0aW9uOjogU01UUFNlcnZlckRpc2Nvbm5lY3RlZApAQCAtMzE2LDYgKzMxOSwxMSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgICpjb250ZXh0KiB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgbWV0aG9kIG5vdyBzdXBwb3J0cyBob3N0bmFtZSBjaGVjayB3aXRoCisgICAgICA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYW5kICpTZXJ2ZXIgTmFtZSBJbmRpY2F0b3IqIChzZWUKKyAgICAgIDpkYXRhOmB+c3NsLkhBU19TTklgKS4KKwogCiAuLiBtZXRob2Q6OiBTTVRQLnNlbmRtYWlsKGZyb21fYWRkciwgdG9fYWRkcnMsIG1zZywgbWFpbF9vcHRpb25zPVtdLCByY3B0X29wdGlvbnM9W10pCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXQucnN0CmluZGV4IDNhNDllZWQuLjg1NzdjM2MgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0LnJzdApAQCAtNiw4ICs2LDcgQEAKIAogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIEJTRCAqc29ja2V0KiBpbnRlcmZhY2UuIEl0IGlzIGF2YWlsYWJsZSBvbgotYWxsIG1vZGVybiBVbml4IHN5c3RlbXMsIFdpbmRvd3MsIE1hY09TLCBPUy8yLCBhbmQgcHJvYmFibHkgYWRkaXRpb25hbAotcGxhdGZvcm1zLgorYWxsIG1vZGVybiBVbml4IHN5c3RlbXMsIFdpbmRvd3MsIE1hY09TLCBhbmQgcHJvYmFibHkgYWRkaXRpb25hbCBwbGF0Zm9ybXMuCiAKIC4uIG5vdGU6OgogCkBAIC05MSw5ICs5MCw2IEBACiAgICAgSWYgKmFkZHJfdHlwZSogaXMgOmNvbnN0OmBUSVBDX0FERFJfSURgLCB0aGVuICp2MSogaXMgdGhlIG5vZGUsICp2MiogaXMgdGhlCiAgICAgcmVmZXJlbmNlLCBhbmQgKnYzKiBzaG91bGQgYmUgc2V0IHRvIDAuCiAKLSAgICBJZiAqYWRkcl90eXBlKiBpcyA6Y29uc3Q6YFRJUENfQUREUl9JRGAsIHRoZW4gKnYxKiBpcyB0aGUgbm9kZSwgKnYyKiBpcyB0aGUKLSAgICByZWZlcmVuY2UsIGFuZCAqdjMqIHNob3VsZCBiZSBzZXQgdG8gMC4KLQogLSBBIHR1cGxlIGBgKGludGVyZmFjZSwgKWBgIGlzIHVzZWQgZm9yIHRoZSA6Y29uc3Q6YEFGX0NBTmAgYWRkcmVzcyBmYW1pbHksCiAgIHdoZXJlICppbnRlcmZhY2UqIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG5ldHdvcmsgaW50ZXJmYWNlIG5hbWUgbGlrZQogICBgYCdjYW4wJ2BgLiBUaGUgbmV0d29yayBpbnRlcmZhY2UgbmFtZSBgYCcnYGAgY2FuIGJlIHVzZWQgdG8gcmVjZWl2ZSBwYWNrZXRzCkBAIC0xMDcsNyArMTAzLDI5IEBACiAKICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKLS0gQ2VydGFpbiBvdGhlciBhZGRyZXNzIGZhbWlsaWVzICg6Y29uc3Q6YEFGX0JMVUVUT09USGAsIDpjb25zdDpgQUZfUEFDS0VUYCkKKy0gOmNvbnN0OmBBRl9CTFVFVE9PVEhgIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFuZCBhZGRyZXNzCisgIGZvcm1hdHM6CisKKyAgLSA6Y29uc3Q6YEJUUFJPVE9fTDJDQVBgIGFjY2VwdHMgYGAoYmRhZGRyLCBwc20pYGAgd2hlcmUgYGBiZGFkZHJgYCBpcworICAgIHRoZSBCbHVldG9vdGggYWRkcmVzcyBhcyBhIHN0cmluZyBhbmQgYGBwc21gYCBpcyBhbiBpbnRlZ2VyLgorCisgIC0gOmNvbnN0OmBCVFBST1RPX1JGQ09NTWAgYWNjZXB0cyBgYChiZGFkZHIsIGNoYW5uZWwpYGAgd2hlcmUgYGBiZGFkZHJgYAorICAgIGlzIHRoZSBCbHVldG9vdGggYWRkcmVzcyBhcyBhIHN0cmluZyBhbmQgYGBjaGFubmVsYGAgaXMgYW4gaW50ZWdlci4KKworICAtIDpjb25zdDpgQlRQUk9UT19IQ0lgIGFjY2VwdHMgYGAoZGV2aWNlX2lkLClgYCB3aGVyZSBgYGRldmljZV9pZGBgIGlzCisgICAgZWl0aGVyIGFuIGludGVnZXIgb3IgYSBzdHJpbmcgd2l0aCB0aGUgQmx1ZXRvb3RoIGFkZHJlc3Mgb2YgdGhlCisgICAgaW50ZXJmYWNlLiAoVGhpcyBkZXBlbmRzIG9uIHlvdXIgT1M7IE5ldEJTRCBhbmQgRHJhZ29uRmx5QlNEIGV4cGVjdAorICAgIGEgQmx1ZXRvb3RoIGFkZHJlc3Mgd2hpbGUgZXZlcnl0aGluZyBlbHNlIGV4cGVjdHMgYW4gaW50ZWdlci4pCisKKyAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgorICAgICAgIE5ldEJTRCBhbmQgRHJhZ29uRmx5QlNEIHN1cHBvcnQgYWRkZWQuCisKKyAgLSA6Y29uc3Q6YEJUUFJPVE9fU0NPYCBhY2NlcHRzIGBgYmRhZGRyYGAgd2hlcmUgYGBiZGFkZHJgYCBpcyBhCisgICAgOmNsYXNzOmBieXRlc2Agb2JqZWN0IGNvbnRhaW5pbmcgdGhlIEJsdWV0b290aCBhZGRyZXNzIGluIGEKKyAgICBzdHJpbmcgZm9ybWF0LiAoZXguIGBgYicxMjoyMzozNDo0NTo1Njo2NydgYCkgVGhpcyBwcm90b2NvbCBpcyBub3QKKyAgICBzdXBwb3J0ZWQgdW5kZXIgRnJlZUJTRC4KKworLSBDZXJ0YWluIG90aGVyIGFkZHJlc3MgZmFtaWxpZXMgKDpjb25zdDpgQUZfUEFDS0VUYCwgOmNvbnN0OmBBRl9DQU5gKQogICBzdXBwb3J0IHNwZWNpZmljIHJlcHJlc2VudGF0aW9ucy4KIAogICAuLiBYWFggZG9jdW1lbnQgdGhlbSEKQEAgLTE5Myw2ICsyMTEsMTEgQEAKIENvbnN0YW50cwogXl5eXl5eXl5eCiAKKyAgIFRoZSBBRl8qIGFuZCBTT0NLXyogY29uc3RhbnRzIGFyZSBub3cgOmNsYXNzOmBBZGRyZXNzRmFtaWx5YCBhbmQKKyAgIDpjbGFzczpgU29ja2V0S2luZGAgOmNsYXNzOmAuSW50RW51bWAgY29sbGVjdGlvbnMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBkYXRhOjogQUZfVU5JWAogICAgICAgICAgIEFGX0lORVQKICAgICAgICAgICBBRl9JTkVUNgpAQCAtMjY0LDYgKzI4NywxNiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gZGF0YTo6IENBTl9CQ00KKyAgICAgICAgICBDQU5fQkNNXyoKKworICAgQ0FOX0JDTSwgaW4gdGhlIENBTiBwcm90b2NvbCBmYW1pbHksIGlzIHRoZSBicm9hZGNhc3QgbWFuYWdlciAoQkNNKSBwcm90b2NvbC4KKyAgIEJyb2FkY2FzdCBtYW5hZ2VyIGNvbnN0YW50cywgZG9jdW1lbnRlZCBpbiB0aGUgTGludXggZG9jdW1lbnRhdGlvbiwgYXJlIGFsc28KKyAgIGRlZmluZWQgaW4gdGhlIHNvY2tldCBtb2R1bGUuCisKKyAgIEF2YWlsYWJpbGl0eTogTGludXggPj0gMi42LjI1LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKIAogLi4gZGF0YTo6IEFGX1JEUwogICAgICAgICAgIFBGX1JEUwpAQCAtMjkwLDEyICszMjMsMzMgQEAKICAgIFRJUEMgcmVsYXRlZCBjb25zdGFudHMsIG1hdGNoaW5nIHRoZSBvbmVzIGV4cG9ydGVkIGJ5IHRoZSBDIHNvY2tldCBBUEkuIFNlZQogICAgdGhlIFRJUEMgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAorLi4gZGF0YTo6IEFGX0xJTksKKworICBBdmFpbGFiaWxpdHk6IEJTRCwgT1NYLgorCisgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBkYXRhOjogaGFzX2lwdjYKIAogICAgVGhpcyBjb25zdGFudCBjb250YWlucyBhIGJvb2xlYW4gdmFsdWUgd2hpY2ggaW5kaWNhdGVzIGlmIElQdjYgaXMgc3VwcG9ydGVkIG9uCiAgICB0aGlzIHBsYXRmb3JtLgogCisuLiBkYXRhOjogQkRBRERSX0FOWQorICAgICAgICAgIEJEQUREUl9MT0NBTAorCisgICBUaGVzZSBhcmUgc3RyaW5nIGNvbnN0YW50cyBjb250YWluaW5nIEJsdWV0b290aCBhZGRyZXNzZXMgd2l0aCBzcGVjaWFsCisgICBtZWFuaW5ncy4gRm9yIGV4YW1wbGUsIDpjb25zdDpgQkRBRERSX0FOWWAgY2FuIGJlIHVzZWQgdG8gaW5kaWNhdGUKKyAgIGFueSBhZGRyZXNzIHdoZW4gc3BlY2lmeWluZyB0aGUgYmluZGluZyBzb2NrZXQgd2l0aAorICAgOmNvbnN0OmBCVFBST1RPX1JGQ09NTWAuCisKKy4uIGRhdGE6OiBIQ0lfRklMVEVSCisgICAgICAgICAgSENJX1RJTUVfU1RBTVAKKyAgICAgICAgICBIQ0lfREFUQV9ESVIKKworICAgRm9yIHVzZSB3aXRoIDpjb25zdDpgQlRQUk9UT19IQ0lgLiA6Y29uc3Q6YEhDSV9GSUxURVJgIGlzIG5vdAorICAgYXZhaWxhYmxlIGZvciBOZXRCU0Qgb3IgRHJhZ29uRmx5QlNELiA6Y29uc3Q6YEhDSV9USU1FX1NUQU1QYCBhbmQKKyAgIDpjb25zdDpgSENJX0RBVEFfRElSYCBhcmUgbm90IGF2YWlsYWJsZSBmb3IgRnJlZUJTRCwgTmV0QlNELCBvcgorICAgRHJhZ29uRmx5QlNELgogCiBGdW5jdGlvbnMKIF5eXl5eXl5eXgpAQCAtMzA2LDIwICszNjAsMzMgQEAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFsbCBjcmVhdGUgOnJlZjpgc29ja2V0IG9iamVjdHMgPHNvY2tldC1vYmplY3RzPmAuCiAKIAotLi4gZnVuY3Rpb246OiBzb2NrZXQoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkKKy4uIGZ1bmN0aW9uOjogc29ja2V0KGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSkKIAogICAgQ3JlYXRlIGEgbmV3IHNvY2tldCB1c2luZyB0aGUgZ2l2ZW4gYWRkcmVzcyBmYW1pbHksIHNvY2tldCB0eXBlIGFuZCBwcm90b2NvbAogICAgbnVtYmVyLiAgVGhlIGFkZHJlc3MgZmFtaWx5IHNob3VsZCBiZSA6Y29uc3Q6YEFGX0lORVRgICh0aGUgZGVmYXVsdCksCiAgICA6Y29uc3Q6YEFGX0lORVQ2YCwgOmNvbnN0OmBBRl9VTklYYCwgOmNvbnN0OmBBRl9DQU5gIG9yIDpjb25zdDpgQUZfUkRTYC4gVGhlCiAgICBzb2NrZXQgdHlwZSBzaG91bGQgYmUgOmNvbnN0OmBTT0NLX1NUUkVBTWAgKHRoZSBkZWZhdWx0KSwKICAgIDpjb25zdDpgU09DS19ER1JBTWAsIDpjb25zdDpgU09DS19SQVdgIG9yIHBlcmhhcHMgb25lIG9mIHRoZSBvdGhlciBgYFNPQ0tfYGAKLSAgIGNvbnN0YW50cy4gVGhlIHByb3RvY29sIG51bWJlciBpcyB1c3VhbGx5IHplcm8gYW5kIG1heSBiZSBvbWl0dGVkIGluIHRoYXQKLSAgIGNhc2Ugb3IgOmNvbnN0OmBDQU5fUkFXYCBpbiBjYXNlIHRoZSBhZGRyZXNzIGZhbWlseSBpcyA6Y29uc3Q6YEFGX0NBTmAuCisgICBjb25zdGFudHMuIFRoZSBwcm90b2NvbCBudW1iZXIgaXMgdXN1YWxseSB6ZXJvIGFuZCBtYXkgYmUgb21pdHRlZCBvciBpbiB0aGUKKyAgIGNhc2Ugd2hlcmUgdGhlIGFkZHJlc3MgZmFtaWx5IGlzIDpjb25zdDpgQUZfQ0FOYCB0aGUgcHJvdG9jb2wgc2hvdWxkIGJlIG9uZQorICAgb2YgOmNvbnN0OmBDQU5fUkFXYCBvciA6Y29uc3Q6YENBTl9CQ01gLiAgSWYgKmZpbGVubyogaXMgc3BlY2lmaWVkLCB0aGUgb3RoZXIKKyAgIGFyZ3VtZW50cyBhcmUgaWdub3JlZCwgY2F1c2luZyB0aGUgc29ja2V0IHdpdGggdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IKKyAgIHRvIHJldHVybi4gIFVubGlrZSA6ZnVuYzpgc29ja2V0LmZyb21mZGAsICpmaWxlbm8qIHdpbGwgcmV0dXJuIHRoZSBzYW1lCisgICBzb2NrZXQgYW5kIG5vdCBhIGR1cGxpY2F0ZS4gVGhpcyBtYXkgaGVscCBjbG9zZSBhIGRldGFjaGVkIHNvY2tldCB1c2luZworICAgOm1ldGg6YHNvY2tldC5jbG9zZSgpYC4KKworICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIFRoZSBBRl9DQU4gZmFtaWx5IHdhcyBhZGRlZC4KICAgICAgIFRoZSBBRl9SRFMgZmFtaWx5IHdhcyBhZGRlZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBUaGUgQ0FOX0JDTSBwcm90b2NvbCB3YXMgYWRkZWQuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgcmV0dXJuZWQgc29ja2V0IGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gZnVuY3Rpb246OiBzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pCiAKQEAgLTMyOSwxMCArMzk2LDE1IEBACiAgICBpZiBkZWZpbmVkIG9uIHRoZSBwbGF0Zm9ybTsgb3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCBpcyA6Y29uc3Q6YEFGX0lORVRgLgogICAgQXZhaWxhYmlsaXR5OiBVbml4LgogCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXRzIGFyZSA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBUaGUgcmV0dXJuZWQgc29ja2V0IG9iamVjdHMgbm93IHN1cHBvcnQgdGhlIHdob2xlIHNvY2tldCBBUEksIHJhdGhlcgogICAgICAgdGhhbiBhIHN1YnNldC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXR1cm5lZCBzb2NrZXRzIGFyZSBub3cgbm9uLWluaGVyaXRhYmxlLgorCiAKIC4uIGZ1bmN0aW9uOjogY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzc1ssIHRpbWVvdXRbLCBzb3VyY2VfYWRkcmVzc11dKQogCkBAIC0zNjAsNyArNDMyLDcgQEAKICAgICAgIHN1cHBvcnQgZm9yIHRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IHdhcyBhZGRlZC4KIAogCi0uLiBmdW5jdGlvbjo6IGZyb21mZChmZCwgZmFtaWx5LCB0eXBlWywgcHJvdG9dKQorLi4gZnVuY3Rpb246OiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG89MCkKIAogICAgRHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3IgKmZkKiAoYW4gaW50ZWdlciBhcyByZXR1cm5lZCBieSBhIGZpbGUgb2JqZWN0J3MKICAgIDptZXRoOmBmaWxlbm9gIG1ldGhvZCkgYW5kIGJ1aWxkIGEgc29ja2V0IG9iamVjdCBmcm9tIHRoZSByZXN1bHQuICBBZGRyZXNzCkBAIC0zNzEsNiArNDQzLDExIEBACiAgICBhIHNvY2tldCBwYXNzZWQgdG8gYSBwcm9ncmFtIGFzIHN0YW5kYXJkIGlucHV0IG9yIG91dHB1dCAoc3VjaCBhcyBhIHNlcnZlcgogICAgc3RhcnRlZCBieSB0aGUgVW5peCBpbmV0IGRhZW1vbikuICBUaGUgc29ja2V0IGlzIGFzc3VtZWQgdG8gYmUgaW4gYmxvY2tpbmcgbW9kZS4KIAorICAgVGhlIG5ld2x5IGNyZWF0ZWQgc29ja2V0IGlzIDpyZWY6YG5vbi1pbmhlcml0YWJsZSA8ZmRfaW5oZXJpdGFuY2U+YC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSByZXR1cm5lZCBzb2NrZXQgaXMgbm93IG5vbi1pbmhlcml0YWJsZS4KKwogCiAuLiBmdW5jdGlvbjo6IGZyb21zaGFyZShkYXRhKQogCkBAIC00MjYsMTIgKzUwMywxNCBAQAogICAgbWV0aG9kLgogCiAgICBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZmV0Y2hlcyBhZGRyZXNzIGluZm9ybWF0aW9uIGZvciBhIGh5cG90aGV0aWNhbCBUQ1AKLSAgIGNvbm5lY3Rpb24gdG8gYGB3d3cucHl0aG9uLm9yZ2BgIG9uIHBvcnQgODAgKHJlc3VsdHMgbWF5IGRpZmZlciBvbiB5b3VyCisgICBjb25uZWN0aW9uIHRvIGBgZXhhbXBsZS5vcmdgYCBvbiBwb3J0IDgwIChyZXN1bHRzIG1heSBkaWZmZXIgb24geW91cgogICAgc3lzdGVtIGlmIElQdjYgaXNuJ3QgZW5hYmxlZCk6OgogCi0gICAgICA+Pj4gc29ja2V0LmdldGFkZHJpbmZvKCJ3d3cucHl0aG9uLm9yZyIsIDgwLCBwcm90bz1zb2NrZXQuU09MX1RDUCkKLSAgICAgIFsoMiwgMSwgNiwgJycsICgnODIuOTQuMTY0LjE2MicsIDgwKSksCi0gICAgICAgKDEwLCAxLCA2LCAnJywgKCcyMDAxOjg4ODoyMDAwOmQ6OmEyJywgODAsIDAsIDApKV0KKyAgICAgID4+PiBzb2NrZXQuZ2V0YWRkcmluZm8oImV4YW1wbGUub3JnIiwgODAsIHByb3RvPXNvY2tldC5JUFBST1RPX1RDUCkKKyAgICAgIFsoPEFkZHJlc3NGYW1pbHkuQUZfSU5FVDY6IDEwPiwgPFNvY2tldFR5cGUuU09DS19TVFJFQU06IDE+LAorICAgICAgIDYsICcnLCAoJzI2MDY6MjgwMDoyMjA6MToyNDg6MTg5MzoyNWM4OjE5NDYnLCA4MCwgMCwgMCkpLAorICAgICAgICg8QWRkcmVzc0ZhbWlseS5BRl9JTkVUOiAyPiwgPFNvY2tldFR5cGUuU09DS19TVFJFQU06IDE+LAorICAgICAgIDYsICcnLCAoJzkzLjE4NC4yMTYuMzQnLCA4MCkpXQogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgcGFyYW1ldGVycyBjYW4gbm93IGJlIHBhc3NlZCB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cy4KQEAgLTQ3OCw3ICs1NTcsNyBAQAogICAgYWx3YXlzIGhvbGQuCiAKICAgIE5vdGU6IDpmdW5jOmBnZXRob3N0bmFtZWAgZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZSBmdWxseSBxdWFsaWZpZWQgZG9tYWluCi0gICBuYW1lOyB1c2UgYGBnZXRmcWRuKClgYCAoc2VlIGFib3ZlKS4KKyAgIG5hbWU7IHVzZSA6ZnVuYzpgZ2V0ZnFkbmAgZm9yIHRoYXQuCiAKIAogLi4gZnVuY3Rpb246OiBnZXRob3N0YnlhZGRyKGlwX2FkZHJlc3MpCkBAIC01OTgsNyArNjc3LDEwIEBACiAgICBib3RoIHRoZSB2YWx1ZSBvZiAqYWRkcmVzc19mYW1pbHkqIGFuZCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBvZgogICAgOmM6ZnVuYzpgaW5ldF9wdG9uYC4KIAotICAgQXZhaWxhYmlsaXR5OiBVbml4IChtYXliZSBub3QgYWxsIHBsYXRmb3JtcykuCisgICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKSwgV2luZG93cy4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFdpbmRvd3Mgc3VwcG9ydCBhZGRlZAogCiAKIC4uIGZ1bmN0aW9uOjogaW5ldF9udG9wKGFkZHJlc3NfZmFtaWx5LCBwYWNrZWRfaXApCkBAIC02MTEsMTAgKzY5MywxMyBAQAogCiAgICBTdXBwb3J0ZWQgdmFsdWVzIGZvciAqYWRkcmVzc19mYW1pbHkqIGFyZSBjdXJyZW50bHkgOmNvbnN0OmBBRl9JTkVUYCBhbmQKICAgIDpjb25zdDpgQUZfSU5FVDZgLiBJZiB0aGUgc3RyaW5nICpwYWNrZWRfaXAqIGlzIG5vdCB0aGUgY29ycmVjdCBsZW5ndGggZm9yIHRoZQotICAgc3BlY2lmaWVkIGFkZHJlc3MgZmFtaWx5LCA6ZXhjOmBWYWx1ZUVycm9yYCB3aWxsIGJlIHJhaXNlZC4gIEEKKyAgIHNwZWNpZmllZCBhZGRyZXNzIGZhbWlseSwgOmV4YzpgVmFsdWVFcnJvcmAgd2lsbCBiZSByYWlzZWQuCiAgICA6ZXhjOmBPU0Vycm9yYCBpcyByYWlzZWQgZm9yIGVycm9ycyBmcm9tIHRoZSBjYWxsIHRvIDpmdW5jOmBpbmV0X250b3BgLgogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXggKG1heWJlIG5vdCBhbGwgcGxhdGZvcm1zKS4KKyAgIEF2YWlsYWJpbGl0eTogVW5peCAobWF5YmUgbm90IGFsbCBwbGF0Zm9ybXMpLCBXaW5kb3dzLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgV2luZG93cyBzdXBwb3J0IGFkZGVkCiAKIAogLi4KQEAgLTY3Nyw3ICs3NjIsNyBAQAogCiAuLiBmdW5jdGlvbjo6IHNldGhvc3RuYW1lKG5hbWUpCiAKLSAgIFNldCB0aGUgbWFjaGluZSdzIGhvc3RuYW1lIHRvICpuYW1lKi4gIFRoaXMgd2lsbCByYWlzZSBhCisgICBTZXQgdGhlIG1hY2hpbmUncyBob3N0bmFtZSB0byAqbmFtZSouICBUaGlzIHdpbGwgcmFpc2UgYW4KICAgIDpleGM6YE9TRXJyb3JgIGlmIHlvdSBkb24ndCBoYXZlIGVub3VnaCByaWdodHMuCiAKICAgIEF2YWlsYWJpbGl0eTogVW5peC4KQEAgLTcwOSw3ICs3OTQsNyBAQAogCiAuLiBmdW5jdGlvbjo6IGlmX2luZGV4dG9uYW1lKGlmX2luZGV4KQogCi0gICBSZXR1cm4gYSBuZXR3b3JrIGludGVyZmFjZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8gYQorICAgUmV0dXJuIGEgbmV0d29yayBpbnRlcmZhY2UgbmFtZSBjb3JyZXNwb25kaW5nIHRvIGFuCiAgICBpbnRlcmZhY2UgaW5kZXggbnVtYmVyLgogICAgOmV4YzpgT1NFcnJvcmAgaWYgbm8gaW50ZXJmYWNlIHdpdGggdGhlIGdpdmVuIGluZGV4IGV4aXN0cy4KIApAQCAtNzM1LDYgKzgyMCwxMSBAQAogICAgKm5ldyogc29ja2V0IG9iamVjdCB1c2FibGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBkYXRhIG9uIHRoZSBjb25uZWN0aW9uLCBhbmQKICAgICphZGRyZXNzKiBpcyB0aGUgYWRkcmVzcyBib3VuZCB0byB0aGUgc29ja2V0IG9uIHRoZSBvdGhlciBlbmQgb2YgdGhlIGNvbm5lY3Rpb24uCiAKKyAgIFRoZSBuZXdseSBjcmVhdGVkIHNvY2tldCBpcyA6cmVmOmBub24taW5oZXJpdGFibGUgPGZkX2luaGVyaXRhbmNlPmAuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgc29ja2V0IGlzIG5vdyBub24taW5oZXJpdGFibGUuCisKIAogLi4gbWV0aG9kOjogc29ja2V0LmJpbmQoYWRkcmVzcykKIApAQCAtNzg3LDYgKzg3NywxNiBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LmR1cCgpCisKKyAgIER1cGxpY2F0ZSB0aGUgc29ja2V0LgorCisgICBUaGUgbmV3bHkgY3JlYXRlZCBzb2NrZXQgaXMgOnJlZjpgbm9uLWluaGVyaXRhYmxlIDxmZF9pbmhlcml0YW5jZT5gLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgVGhlIHNvY2tldCBpcyBub3cgbm9uLWluaGVyaXRhYmxlLgorCisKIC4uIG1ldGhvZDo6IHNvY2tldC5maWxlbm8oKQogCiAgICBSZXR1cm4gdGhlIHNvY2tldCdzIGZpbGUgZGVzY3JpcHRvciAoYSBzbWFsbCBpbnRlZ2VyKS4gIFRoaXMgaXMgdXNlZnVsIHdpdGgKQEAgLTc5Nyw2ICs4OTcsMTUgQEAKICAgIHRoaXMgbGltaXRhdGlvbi4KIAogCisuLiBtZXRob2Q6OiBzb2NrZXQuZ2V0X2luaGVyaXRhYmxlKCkKKworICAgR2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZTogYGBUcnVlYGAgaWYgdGhlIHNvY2tldCBjYW4gYmUgaW5oZXJpdGVkIGluCisgICBjaGlsZCBwcm9jZXNzZXMsIGBgRmFsc2VgYCBpZiBpdCBjYW5ub3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IHNvY2tldC5nZXRwZWVybmFtZSgpCiAKICAgIFJldHVybiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gd2hpY2ggdGhlIHNvY2tldCBpcyBjb25uZWN0ZWQuICBUaGlzIGlzIHVzZWZ1bCB0bwpAQCAtODYwLDcgKzk2OSw3IEBACiAgICBpbnRlcnByZXRlZCB0aGUgc2FtZSB3YXkgYXMgYnkgdGhlIGJ1aWx0LWluIDpmdW5jOmBvcGVuYCBmdW5jdGlvbi4KIAogICAgVGhlIHNvY2tldCBtdXN0IGJlIGluIGJsb2NraW5nIG1vZGU7IGl0IGNhbiBoYXZlIGEgdGltZW91dCwgYnV0IHRoZSBmaWxlCi0gICBvYmplY3QncyBpbnRlcm5hbCBidWZmZXIgbWF5IGVuZCB1cCBpbiBhIGluY29uc2lzdGVudCBzdGF0ZSBpZiBhIHRpbWVvdXQKKyAgIG9iamVjdCdzIGludGVybmFsIGJ1ZmZlciBtYXkgZW5kIHVwIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSBpZiBhIHRpbWVvdXQKICAgIG9jY3Vycy4KIAogICAgQ2xvc2luZyB0aGUgZmlsZSBvYmplY3QgcmV0dXJuZWQgYnkgOm1ldGg6YG1ha2VmaWxlYCB3b24ndCBjbG9zZSB0aGUKQEAgLTEwNTMsNyArMTE2Miw4IEBACiAgICBTZW5kIG5vcm1hbCBhbmQgYW5jaWxsYXJ5IGRhdGEgdG8gdGhlIHNvY2tldCwgZ2F0aGVyaW5nIHRoZQogICAgbm9uLWFuY2lsbGFyeSBkYXRhIGZyb20gYSBzZXJpZXMgb2YgYnVmZmVycyBhbmQgY29uY2F0ZW5hdGluZyBpdAogICAgaW50byBhIHNpbmdsZSBtZXNzYWdlLiAgVGhlICpidWZmZXJzKiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlCi0gICBub24tYW5jaWxsYXJ5IGRhdGEgYXMgYW4gaXRlcmFibGUgb2YgYnVmZmVyLWNvbXBhdGlibGUgb2JqZWN0cworICAgbm9uLWFuY2lsbGFyeSBkYXRhIGFzIGFuIGl0ZXJhYmxlIG9mCisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RzIDxieXRlcy1saWtlIG9iamVjdD5gCiAgICAoZS5nLiA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzKTsgdGhlIG9wZXJhdGluZyBzeXN0ZW0gbWF5IHNldCBhIGxpbWl0CiAgICAoOmZ1bmM6YH5vcy5zeXNjb25mYCB2YWx1ZSBgYFNDX0lPVl9NQVhgYCkgb24gdGhlIG51bWJlciBvZiBidWZmZXJzCiAgICB0aGF0IGNhbiBiZSB1c2VkLiAgVGhlICphbmNkYXRhKiBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIGFuY2lsbGFyeQpAQCAtMTA2MSw3ICsxMTcxLDcgQEAKICAgIGBgKGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhKWBgLCB3aGVyZSAqY21zZ19sZXZlbCogYW5kCiAgICAqY21zZ190eXBlKiBhcmUgaW50ZWdlcnMgc3BlY2lmeWluZyB0aGUgcHJvdG9jb2wgbGV2ZWwgYW5kCiAgICBwcm90b2NvbC1zcGVjaWZpYyB0eXBlIHJlc3BlY3RpdmVseSwgYW5kICpjbXNnX2RhdGEqIGlzIGEKLSAgIGJ1ZmZlci1jb21wYXRpYmxlIG9iamVjdCBob2xkaW5nIHRoZSBhc3NvY2lhdGVkIGRhdGEuICBOb3RlIHRoYXQKKyAgIGJ5dGVzLWxpa2Ugb2JqZWN0IGhvbGRpbmcgdGhlIGFzc29jaWF0ZWQgZGF0YS4gIE5vdGUgdGhhdAogICAgc29tZSBzeXN0ZW1zIChpbiBwYXJ0aWN1bGFyLCBzeXN0ZW1zIHdpdGhvdXQgOmZ1bmM6YENNU0dfU1BBQ0VgKQogICAgbWlnaHQgc3VwcG9ydCBzZW5kaW5nIG9ubHkgb25lIGNvbnRyb2wgbWVzc2FnZSBwZXIgY2FsbC4gIFRoZQogICAgKmZsYWdzKiBhcmd1bWVudCBkZWZhdWx0cyB0byAwIGFuZCBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IKQEAgLTEwODMsNiArMTE5MywxNCBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gbWV0aG9kOjogc29ja2V0LnNldF9pbmhlcml0YWJsZShpbmhlcml0YWJsZSkKKworICAgU2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnIDxmZF9pbmhlcml0YW5jZT5gIG9mIHRoZSBzb2NrZXQncyBmaWxlCisgICBkZXNjcmlwdG9yIG9yIHNvY2tldCdzIGhhbmRsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gbWV0aG9kOjogc29ja2V0LnNldGJsb2NraW5nKGZsYWcpCiAKICAgIFNldCBibG9ja2luZyBvciBub24tYmxvY2tpbmcgbW9kZSBvZiB0aGUgc29ja2V0OiBpZiAqZmxhZyogaXMgZmFsc2UsIHRoZQpAQCAtMTM2NCw3ICsxNDgyLDE2IEBACiAgICBzLmlvY3RsKHNvY2tldC5TSU9fUkNWQUxMLCBzb2NrZXQuUkNWQUxMX09GRikKIAogVGhlIGxhc3QgZXhhbXBsZSBzaG93cyBob3cgdG8gdXNlIHRoZSBzb2NrZXQgaW50ZXJmYWNlIHRvIGNvbW11bmljYXRlIHRvIGEgQ0FOCi1uZXR3b3JrLiBUaGlzIGV4YW1wbGUgbWlnaHQgcmVxdWlyZSBzcGVjaWFsIHByaXZpbGVkZ2U6OgorbmV0d29yayB1c2luZyB0aGUgcmF3IHNvY2tldCBwcm90b2NvbC4gVG8gdXNlIENBTiB3aXRoIHRoZSBicm9hZGNhc3QKK21hbmFnZXIgcHJvdG9jb2wgaW5zdGVhZCwgb3BlbiBhIHNvY2tldCB3aXRoOjoKKworICAgIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0NBTiwgc29ja2V0LlNPQ0tfREdSQU0sIHNvY2tldC5DQU5fQkNNKQorCitBZnRlciBiaW5kaW5nICg6Y29uc3Q6YENBTl9SQVdgKSBvciBjb25uZWN0aW5nICg6Y29uc3Q6YENBTl9CQ01gKSB0aGUgc29ja2V0LCB5b3UKK2NhbiB1c2UgdGhlIDptZXRoOmBzb2NrZXQuc2VuZGAsIGFuZCB0aGUgOm1ldGg6YHNvY2tldC5yZWN2YCBvcGVyYXRpb25zIChhbmQKK3RoZWlyIGNvdW50ZXJwYXJ0cykgb24gdGhlIHNvY2tldCBvYmplY3QgYXMgdXN1YWwuCisKK1RoaXMgZXhhbXBsZSBtaWdodCByZXF1aXJlIHNwZWNpYWwgcHJpdmlsZWdlczo6CiAKICAgIGltcG9ydCBzb2NrZXQKICAgIGltcG9ydCBzdHJ1Y3QKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS9zb2NrZXRzZXJ2ZXIucnN0CmluZGV4IDFlYzQ0MzguLjNlNDlhZjYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NvY2tldHNlcnZlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc29ja2V0c2VydmVyLnJzdApAQCAtMzMsOSArMzMsMTAgQEAKIGhhbmRsZXIgY2xhc3MgYnkgc3ViY2xhc3NpbmcgdGhlIDpjbGFzczpgQmFzZVJlcXVlc3RIYW5kbGVyYCBjbGFzcyBhbmQKIG92ZXJyaWRpbmcgaXRzIDptZXRoOmBoYW5kbGVgIG1ldGhvZDsgdGhpcyBtZXRob2Qgd2lsbCBwcm9jZXNzIGluY29taW5nCiByZXF1ZXN0cy4gIFNlY29uZCwgeW91IG11c3QgaW5zdGFudGlhdGUgb25lIG9mIHRoZSBzZXJ2ZXIgY2xhc3NlcywgcGFzc2luZyBpdAotdGhlIHNlcnZlcidzIGFkZHJlc3MgYW5kIHRoZSByZXF1ZXN0IGhhbmRsZXIgY2xhc3MuICBGaW5hbGx5LCBjYWxsIHRoZQordGhlIHNlcnZlcidzIGFkZHJlc3MgYW5kIHRoZSByZXF1ZXN0IGhhbmRsZXIgY2xhc3MuICBUaGVuIGNhbGwgdGhlCiA6bWV0aDpgaGFuZGxlX3JlcXVlc3RgIG9yIDptZXRoOmBzZXJ2ZV9mb3JldmVyYCBtZXRob2Qgb2YgdGhlIHNlcnZlciBvYmplY3QgdG8KLXByb2Nlc3Mgb25lIG9yIG1hbnkgcmVxdWVzdHMuCitwcm9jZXNzIG9uZSBvciBtYW55IHJlcXVlc3RzLiAgRmluYWxseSwgY2FsbCA6bWV0aDpgfkJhc2VTZXJ2ZXIuc2VydmVyX2Nsb3NlYAordG8gY2xvc2UgdGhlIHNvY2tldC4KIAogV2hlbiBpbmhlcml0aW5nIGZyb20gOmNsYXNzOmBUaHJlYWRpbmdNaXhJbmAgZm9yIHRocmVhZGVkIGNvbm5lY3Rpb24gYmVoYXZpb3IsCiB5b3Ugc2hvdWxkIGV4cGxpY2l0bHkgZGVjbGFyZSBob3cgeW91IHdhbnQgeW91ciB0aHJlYWRzIHRvIGJlaGF2ZSBvbiBhbiBhYnJ1cHQKQEAgLTE3Nyw2ICsxNzgsMTMgQEAKICAgIFRlbGwgdGhlIDptZXRoOmBzZXJ2ZV9mb3JldmVyYCBsb29wIHRvIHN0b3AgYW5kIHdhaXQgdW50aWwgaXQgZG9lcy4KIAogCisuLiBtZXRob2Q6OiBCYXNlU2VydmVyLnNlcnZlcl9jbG9zZSgpCisKKyAgIENsZWFuIHVwIHRoZSBzZXJ2ZXIuIE1heSBiZSBvdmVycmlkZGVuLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjYKKworCiAuLiBhdHRyaWJ1dGU6OiBCYXNlU2VydmVyLmFkZHJlc3NfZmFtaWx5CiAKICAgIFRoZSBmYW1pbHkgb2YgcHJvdG9jb2xzIHRvIHdoaWNoIHRoZSBzZXJ2ZXIncyBzb2NrZXQgYmVsb25ncy4KQEAgLTU0Nyw2ICs1NTUsNyBAQAogICAgICAgIGNsaWVudChpcCwgcG9ydCwgIkhlbGxvIFdvcmxkIDMiKQogCiAgICAgICAgc2VydmVyLnNodXRkb3duKCkKKyAgICAgICBzZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKIAogCiBUaGUgb3V0cHV0IG9mIHRoZSBleGFtcGxlIHNob3VsZCBsb29rIHNvbWV0aGluZyBsaWtlIHRoaXM6OgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3B3ZC5yc3QgYi9Eb2MvbGlicmFyeS9zcHdkLnJzdAppbmRleCBhZGQ2MTFmLi41OGJlNzhmIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zcHdkLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zcHdkLnJzdApAQCAtMTksOSArMTksOSBAQAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgSW5kZXggfCBBdHRyaWJ1dGUgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICB8CiArPT09PT09PSs9PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCAwICAgICB8IGBgc3BfbmFtYGAgICAgfCBMb2dpbiBuYW1lICAgICAgICAgICAgICAgICAgICAgIHwKK3wgMCAgICAgfCBgYHNwX25hbXBgYCAgIHwgTG9naW4gbmFtZSAgICAgICAgICAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCAxICAgICB8IGBgc3BfcHdkYGAgICAgfCBFbmNyeXB0ZWQgcGFzc3dvcmQgICAgICAgICAgICAgIHwKK3wgMSAgICAgfCBgYHNwX3B3ZHBgYCAgIHwgRW5jcnlwdGVkIHBhc3N3b3JkICAgICAgICAgICAgICB8CiArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCAyICAgICB8IGBgc3BfbHN0Y2hnYGAgfCBEYXRlIG9mIGxhc3QgY2hhbmdlICAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0zNiwxNSArMzYsMTUgQEAKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDYgICAgIHwgYGBzcF9pbmFjdGBgICB8IE51bWJlciBvZiBkYXlzIGFmdGVyIHBhc3N3b3JkICAgfAogfCAgICAgICB8ICAgICAgICAgICAgICAgfCBleHBpcmVzIHVudGlsIGFjY291bnQgaXMgICAgICAgIHwKLXwgICAgICAgfCAgICAgICAgICAgICAgIHwgYmxvY2tlZCAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgIHwgICAgICAgICAgICAgICB8IGRpc2FibGVkICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgNyAgICAgfCBgYHNwX2V4cGlyZWBgIHwgTnVtYmVyIG9mIGRheXMgc2luY2UgMTk3MC0wMS0wMSB8Ci18ICAgICAgIHwgICAgICAgICAgICAgICB8IHVudGlsIGFjY291bnQgaXMgZGlzYWJsZWQgICAgICAgfAorfCAgICAgICB8ICAgICAgICAgICAgICAgfCB3aGVuIGFjY291bnQgZXhwaXJlcyAgICAgICAgICAgIHwKICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IDggICAgIHwgYGBzcF9mbGFnYGAgICB8IFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAotVGhlIHNwX25hbSBhbmQgc3BfcHdkIGl0ZW1zIGFyZSBzdHJpbmdzLCBhbGwgb3RoZXJzIGFyZSBpbnRlZ2Vycy4KK1RoZSBzcF9uYW1wIGFuZCBzcF9wd2RwIGl0ZW1zIGFyZSBzdHJpbmdzLCBhbGwgb3RoZXJzIGFyZSBpbnRlZ2Vycy4KIDpleGM6YEtleUVycm9yYCBpcyByYWlzZWQgaWYgdGhlIGVudHJ5IGFza2VkIGZvciBjYW5ub3QgYmUgZm91bmQuCiAKIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3FsaXRlMy5yc3QgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAppbmRleCA4YTUwZjg3Li43MTUzMjFhIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zcWxpdGUzLnJzdApAQCAtMTMsOCArMTMsOCBAQAogYXBwbGljYXRpb24gdXNpbmcgU1FMaXRlIGFuZCB0aGVuIHBvcnQgdGhlIGNvZGUgdG8gYSBsYXJnZXIgZGF0YWJhc2Ugc3VjaCBhcwogUG9zdGdyZVNRTCBvciBPcmFjbGUuCiAKLXNxbGl0ZTMgd2FzIHdyaXR0ZW4gYnkgR2VyaGFyZCBIw6RyaW5nIGFuZCBwcm92aWRlcyBhIFNRTCBpbnRlcmZhY2UgY29tcGxpYW50Ci13aXRoIHRoZSBEQi1BUEkgMi4wIHNwZWNpZmljYXRpb24gZGVzY3JpYmVkIGJ5IDpwZXA6YDI0OWAuCitUaGUgc3FsaXRlMyBtb2R1bGUgd2FzIHdyaXR0ZW4gYnkgR2VyaGFyZCBIw6RyaW5nLiAgSXQgcHJvdmlkZXMgYSBTUUwgaW50ZXJmYWNlCitjb21wbGlhbnQgd2l0aCB0aGUgREItQVBJIDIuMCBzcGVjaWZpY2F0aW9uIGRlc2NyaWJlZCBieSA6cGVwOmAyNDlgLgogCiBUbyB1c2UgdGhlIG1vZHVsZSwgeW91IG11c3QgZmlyc3QgY3JlYXRlIGEgOmNsYXNzOmBDb25uZWN0aW9uYCBvYmplY3QgdGhhdAogcmVwcmVzZW50cyB0aGUgZGF0YWJhc2UuICBIZXJlIHRoZSBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZQpAQCAtMzEsMjMgKzMxLDI5IEBACiAgICBjID0gY29ubi5jdXJzb3IoKQogCiAgICAjIENyZWF0ZSB0YWJsZQotICAgYy5leGVjdXRlKCcnJ2NyZWF0ZSB0YWJsZSBzdG9ja3MKLSAgIChkYXRlIHRleHQsIHRyYW5zIHRleHQsIHN5bWJvbCB0ZXh0LAotICAgIHF0eSByZWFsLCBwcmljZSByZWFsKScnJykKKyAgIGMuZXhlY3V0ZSgnJydDUkVBVEUgVEFCTEUgc3RvY2tzCisgICAgICAgICAgICAgICAgKGRhdGUgdGV4dCwgdHJhbnMgdGV4dCwgc3ltYm9sIHRleHQsIHF0eSByZWFsLCBwcmljZSByZWFsKScnJykKIAogICAgIyBJbnNlcnQgYSByb3cgb2YgZGF0YQotICAgYy5leGVjdXRlKCIiImluc2VydCBpbnRvIHN0b2NrcwotICAgICAgICAgICAgIHZhbHVlcyAoJzIwMDYtMDEtMDUnLCdCVVknLCdSSEFUJywxMDAsMzUuMTQpIiIiKQorICAgYy5leGVjdXRlKCJJTlNFUlQgSU5UTyBzdG9ja3MgVkFMVUVTICgnMjAwNi0wMS0wNScsJ0JVWScsJ1JIQVQnLDEwMCwzNS4xNCkiKQogCiAgICAjIFNhdmUgKGNvbW1pdCkgdGhlIGNoYW5nZXMKICAgIGNvbm4uY29tbWl0KCkKIAotICAgIyBXZSBjYW4gYWxzbyBjbG9zZSB0aGUgY3Vyc29yIGlmIHdlIGFyZSBkb25lIHdpdGggaXQKLSAgIGMuY2xvc2UoKQorICAgIyBXZSBjYW4gYWxzbyBjbG9zZSB0aGUgY29ubmVjdGlvbiBpZiB3ZSBhcmUgZG9uZSB3aXRoIGl0LgorICAgIyBKdXN0IGJlIHN1cmUgYW55IGNoYW5nZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZCBvciB0aGV5IHdpbGwgYmUgbG9zdC4KKyAgIGNvbm4uY2xvc2UoKQorCitUaGUgZGF0YSB5b3UndmUgc2F2ZWQgaXMgcGVyc2lzdGVudCBhbmQgaXMgYXZhaWxhYmxlIGluIHN1YnNlcXVlbnQgc2Vzc2lvbnM6OgorCisgICBpbXBvcnQgc3FsaXRlMworICAgY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgnZXhhbXBsZS5kYicpCisgICBjID0gY29ubi5jdXJzb3IoKQogCiBVc3VhbGx5IHlvdXIgU1FMIG9wZXJhdGlvbnMgd2lsbCBuZWVkIHRvIHVzZSB2YWx1ZXMgZnJvbSBQeXRob24gdmFyaWFibGVzLiAgWW91CiBzaG91bGRuJ3QgYXNzZW1ibGUgeW91ciBxdWVyeSB1c2luZyBQeXRob24ncyBzdHJpbmcgb3BlcmF0aW9ucyBiZWNhdXNlIGRvaW5nIHNvCi1pcyBpbnNlY3VyZTsgaXQgbWFrZXMgeW91ciBwcm9ncmFtIHZ1bG5lcmFibGUgdG8gYW4gU1FMIGluamVjdGlvbiBhdHRhY2suCitpcyBpbnNlY3VyZTsgaXQgbWFrZXMgeW91ciBwcm9ncmFtIHZ1bG5lcmFibGUgdG8gYW4gU1FMIGluamVjdGlvbiBhdHRhY2sKKyhzZWUgaHR0cDovL3hrY2QuY29tLzMyNy8gZm9yIGh1bW9yb3VzIGV4YW1wbGUgb2Ygd2hhdCBjYW4gZ28gd3JvbmcpLgogCiBJbnN0ZWFkLCB1c2UgdGhlIERCLUFQSSdzIHBhcmFtZXRlciBzdWJzdGl0dXRpb24uICBQdXQgYGA/YGAgYXMgYSBwbGFjZWhvbGRlcgogd2hlcmV2ZXIgeW91IHdhbnQgdG8gdXNlIGEgdmFsdWUsIGFuZCB0aGVuIHByb3ZpZGUgYSB0dXBsZSBvZiB2YWx1ZXMgYXMgdGhlCkBAIC01NiwxOSArNjIsMjAgQEAKIGV4YW1wbGU6OgogCiAgICAjIE5ldmVyIGRvIHRoaXMgLS0gaW5zZWN1cmUhCi0gICBzeW1ib2wgPSAnSUJNJwotICAgYy5leGVjdXRlKCJzZWxlY3QgKiBmcm9tIHN0b2NrcyB3aGVyZSBzeW1ib2wgPSAnJXMnIiAlIHN5bWJvbCkKKyAgIHN5bWJvbCA9ICdSSEFUJworICAgYy5leGVjdXRlKCJTRUxFQ1QgKiBGUk9NIHN0b2NrcyBXSEVSRSBzeW1ib2wgPSAnJXMnIiAlIHN5bWJvbCkKIAogICAgIyBEbyB0aGlzIGluc3RlYWQKLSAgIHQgPSAoJ0lCTScsKQotICAgYy5leGVjdXRlKCdzZWxlY3QgKiBmcm9tIHN0b2NrcyB3aGVyZSBzeW1ib2w9PycsIHQpCisgICB0ID0gKCdSSEFUJywpCisgICBjLmV4ZWN1dGUoJ1NFTEVDVCAqIEZST00gc3RvY2tzIFdIRVJFIHN5bWJvbD0/JywgdCkKKyAgIHByaW50KGMuZmV0Y2hvbmUoKSkKIAotICAgIyBMYXJnZXIgZXhhbXBsZQotICAgZm9yIHQgaW4gWygnMjAwNi0wMy0yOCcsICdCVVknLCAnSUJNJywgMTAwMCwgNDUuMDApLAotICAgICAgICAgICAgICgnMjAwNi0wNC0wNScsICdCVVknLCAnTVNGVCcsIDEwMDAsIDcyLjAwKSwKLSAgICAgICAgICAgICAoJzIwMDYtMDQtMDYnLCAnU0VMTCcsICdJQk0nLCA1MDAsIDUzLjAwKSwKLSAgICAgICAgICAgIF06Ci0gICAgICAgYy5leGVjdXRlKCdpbnNlcnQgaW50byBzdG9ja3MgdmFsdWVzICg/LD8sPyw/LD8pJywgdCkKKyAgICMgTGFyZ2VyIGV4YW1wbGUgdGhhdCBpbnNlcnRzIG1hbnkgcmVjb3JkcyBhdCBhIHRpbWUKKyAgIHB1cmNoYXNlcyA9IFsoJzIwMDYtMDMtMjgnLCAnQlVZJywgJ0lCTScsIDEwMDAsIDQ1LjAwKSwKKyAgICAgICAgICAgICAgICAoJzIwMDYtMDQtMDUnLCAnQlVZJywgJ01TRlQnLCAxMDAwLCA3Mi4wMCksCisgICAgICAgICAgICAgICAgKCcyMDA2LTA0LTA2JywgJ1NFTEwnLCAnSUJNJywgNTAwLCA1My4wMCksCisgICAgICAgICAgICAgICBdCisgICBjLmV4ZWN1dGVtYW55KCdJTlNFUlQgSU5UTyBzdG9ja3MgVkFMVUVTICg/LD8sPyw/LD8pJywgcHVyY2hhc2VzKQogCiBUbyByZXRyaWV2ZSBkYXRhIGFmdGVyIGV4ZWN1dGluZyBhIFNFTEVDVCBzdGF0ZW1lbnQsIHlvdSBjYW4gZWl0aGVyIHRyZWF0IHRoZQogY3Vyc29yIGFzIGFuIDp0ZXJtOmBpdGVyYXRvcmAsIGNhbGwgdGhlIGN1cnNvcidzIDptZXRoOmB+Q3Vyc29yLmZldGNob25lYCBtZXRob2QgdG8KQEAgLTc3LDE2ICs4NCwxMyBAQAogCiBUaGlzIGV4YW1wbGUgdXNlcyB0aGUgaXRlcmF0b3IgZm9ybTo6CiAKLSAgID4+PiBjID0gY29ubi5jdXJzb3IoKQotICAgPj4+IGMuZXhlY3V0ZSgnc2VsZWN0ICogZnJvbSBzdG9ja3Mgb3JkZXIgYnkgcHJpY2UnKQotICAgPj4+IGZvciByb3cgaW4gYzoKLSAgIC4uLiAgICAgcHJpbnQocm93KQotICAgLi4uCisgICA+Pj4gZm9yIHJvdyBpbiBjLmV4ZWN1dGUoJ1NFTEVDVCAqIEZST00gc3RvY2tzIE9SREVSIEJZIHByaWNlJyk6CisgICAgICAgICAgIHByaW50KHJvdykKKwogICAgKCcyMDA2LTAxLTA1JywgJ0JVWScsICdSSEFUJywgMTAwLCAzNS4xNCkKICAgICgnMjAwNi0wMy0yOCcsICdCVVknLCAnSUJNJywgMTAwMCwgNDUuMCkKICAgICgnMjAwNi0wNC0wNicsICdTRUxMJywgJ0lCTScsIDUwMCwgNTMuMCkKLSAgICgnMjAwNi0wNC0wNScsICdCVVknLCAnTVNPRlQnLCAxMDAwLCA3Mi4wKQotICAgPj4+CisgICAoJzIwMDYtMDQtMDUnLCAnQlVZJywgJ01TRlQnLCAxMDAwLCA3Mi4wKQogCiAKIC4uIHNlZWFsc286OgpAQCAtOTksNiArMTAzLDkgQEAKICAgICAgIFRoZSBTUUxpdGUgd2ViIHBhZ2U7IHRoZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJlcyB0aGUgc3ludGF4IGFuZCB0aGUKICAgICAgIGF2YWlsYWJsZSBkYXRhIHR5cGVzIGZvciB0aGUgc3VwcG9ydGVkIFNRTCBkaWFsZWN0LgogCisgICBodHRwOi8vd3d3Lnczc2Nob29scy5jb20vc3FsLworICAgICAgVHV0b3JpYWwsIHJlZmVyZW5jZSBhbmQgZXhhbXBsZXMgZm9yIGxlYXJuaW5nIFNRTCBzeW50YXguCisKICAgIDpwZXA6YDI0OWAgLSBEYXRhYmFzZSBBUEkgU3BlY2lmaWNhdGlvbiAyLjAKICAgICAgIFBFUCB3cml0dGVuIGJ5IE1hcmMtQW5kcsOpIExlbWJ1cmcuCiAKQEAgLTE1OSw3ICsxNjYsNyBAQAogICAgZmlyc3QgYmxhbmsgZm9yIHRoZSBjb2x1bW4gbmFtZTogdGhlIGNvbHVtbiBuYW1lIHdvdWxkIHNpbXBseSBiZSAieCIuCiAKIAotLi4gZnVuY3Rpb246OiBjb25uZWN0KGRhdGFiYXNlWywgdGltZW91dCwgZGV0ZWN0X3R5cGVzLCBpc29sYXRpb25fbGV2ZWwsIGNoZWNrX3NhbWVfdGhyZWFkLCBmYWN0b3J5LCBjYWNoZWRfc3RhdGVtZW50c10pCisuLiBmdW5jdGlvbjo6IGNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBkZXRlY3RfdHlwZXMsIGlzb2xhdGlvbl9sZXZlbCwgY2hlY2tfc2FtZV90aHJlYWQsIGZhY3RvcnksIGNhY2hlZF9zdGF0ZW1lbnRzLCB1cmldKQogCiAgICBPcGVucyBhIGNvbm5lY3Rpb24gdG8gdGhlIFNRTGl0ZSBkYXRhYmFzZSBmaWxlICpkYXRhYmFzZSouIFlvdSBjYW4gdXNlCiAgICBgYCI6bWVtb3J5OiJgYCB0byBvcGVuIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIHRoYXQgcmVzaWRlcyBpbiBSQU0KQEAgLTE5NSw2ICsyMDIsMTggQEAKICAgIGZvciB0aGUgY29ubmVjdGlvbiwgeW91IGNhbiBzZXQgdGhlICpjYWNoZWRfc3RhdGVtZW50cyogcGFyYW1ldGVyLiBUaGUgY3VycmVudGx5CiAgICBpbXBsZW1lbnRlZCBkZWZhdWx0IGlzIHRvIGNhY2hlIDEwMCBzdGF0ZW1lbnRzLgogCisgICBJZiAqdXJpKiBpcyB0cnVlLCAqZGF0YWJhc2UqIGlzIGludGVycHJldGVkIGFzIGEgVVJJLiBUaGlzIGFsbG93cyB5b3UKKyAgIHRvIHNwZWNpZnkgb3B0aW9ucy4gRm9yIGV4YW1wbGUsIHRvIG9wZW4gYSBkYXRhYmFzZSBpbiByZWFkLW9ubHkgbW9kZQorICAgeW91IGNhbiB1c2U6OgorCisgICAgICAgZGIgPSBzcWxpdGUzLmNvbm5lY3QoJ2ZpbGU6cGF0aC90by9kYXRhYmFzZT9tb2RlPXJvJywgdXJpPVRydWUpCisKKyAgIE1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBmZWF0dXJlLCBpbmNsdWRpbmcgYSBsaXN0IG9mIHJlY29nbml6ZWQgb3B0aW9ucywgY2FuCisgICBiZSBmb3VuZCBpbiB0aGUgYFNRTGl0ZSBVUkkgZG9jdW1lbnRhdGlvbiA8aHR0cDovL3d3dy5zcWxpdGUub3JnL3VyaS5odG1sPmBfLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlICp1cmkqIHBhcmFtZXRlci4KKwogCiAuLiBmdW5jdGlvbjo6IHJlZ2lzdGVyX2NvbnZlcnRlcih0eXBlbmFtZSwgY2FsbGFibGUpCiAKQEAgLTUwNSw3ICs1MjQsNyBAQAogCiAgICAuLiBtZXRob2Q6OiBleGVjdXRlKHNxbCwgW3BhcmFtZXRlcnNdKQogCi0gICAgICBFeGVjdXRlcyBhbiBTUUwgc3RhdGVtZW50LiBUaGUgU1FMIHN0YXRlbWVudCBtYXkgYmUgcGFyYW1ldHJpemVkIChpLiBlLgorICAgICAgRXhlY3V0ZXMgYW4gU1FMIHN0YXRlbWVudC4gVGhlIFNRTCBzdGF0ZW1lbnQgbWF5IGJlIHBhcmFtZXRlcml6ZWQgKGkuIGUuCiAgICAgICBwbGFjZWhvbGRlcnMgaW5zdGVhZCBvZiBTUUwgbGl0ZXJhbHMpLiBUaGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIHN1cHBvcnRzIHR3bwogICAgICAga2luZHMgb2YgcGxhY2Vob2xkZXJzOiBxdWVzdGlvbiBtYXJrcyAocW1hcmsgc3R5bGUpIGFuZCBuYW1lZCBwbGFjZWhvbGRlcnMKICAgICAgIChuYW1lZCBzdHlsZSkuCkBAIC01OTYsNyArNjE1LDcgQEAKICAgIC4uIGF0dHJpYnV0ZTo6IGxhc3Ryb3dpZAogCiAgICAgICBUaGlzIHJlYWQtb25seSBhdHRyaWJ1dGUgcHJvdmlkZXMgdGhlIHJvd2lkIG9mIHRoZSBsYXN0IG1vZGlmaWVkIHJvdy4gSXQgaXMKLSAgICAgIG9ubHkgc2V0IGlmIHlvdSBpc3N1ZWQgYSBgYElOU0VSVGBgIHN0YXRlbWVudCB1c2luZyB0aGUgOm1ldGg6YGV4ZWN1dGVgCisgICAgICBvbmx5IHNldCBpZiB5b3UgaXNzdWVkIGFuIGBgSU5TRVJUYGAgc3RhdGVtZW50IHVzaW5nIHRoZSA6bWV0aDpgZXhlY3V0ZWAKICAgICAgIG1ldGhvZC4gRm9yIG9wZXJhdGlvbnMgb3RoZXIgdGhhbiBgYElOU0VSVGBgIG9yIHdoZW4gOm1ldGg6YGV4ZWN1dGVtYW55YCBpcwogICAgICAgY2FsbGVkLCA6YXR0cjpgbGFzdHJvd2lkYCBpcyBzZXQgdG8gOmNvbnN0OmBOb25lYC4KIApAQCAtNjI3LDcgKzY0Niw3IEBACiAKICAgIC4uIG1ldGhvZDo6IGtleXMKIAotICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyBhIHR1cGxlIG9mIGNvbHVtbiBuYW1lcy4gSW1tZWRpYXRlbHkgYWZ0ZXIgYSBxdWVyeSwKKyAgICAgIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGNvbHVtbiBuYW1lcy4gSW1tZWRpYXRlbHkgYWZ0ZXIgYSBxdWVyeSwKICAgICAgIGl0IGlzIHRoZSBmaXJzdCBtZW1iZXIgb2YgZWFjaCB0dXBsZSBpbiA6YXR0cjpgQ3Vyc29yLmRlc2NyaXB0aW9uYC4KIAogTGV0J3MgYXNzdW1lIHdlIGluaXRpYWxpemUgYSB0YWJsZSBhcyBpbiB0aGUgZXhhbXBsZSBnaXZlbiBhYm92ZTo6CkBAIC03MDIsMTkgKzcyMSwyMCBAQAogCiBUaGlzIGlzIGhvdyBTUUxpdGUgdHlwZXMgYXJlIGNvbnZlcnRlZCB0byBQeXRob24gdHlwZXMgYnkgZGVmYXVsdDoKIAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBTUUxpdGUgdHlwZSB8IFB5dGhvbiB0eXBlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKz09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwotfCBgYE5VTExgYCAgICB8IDpjb25zdDpgTm9uZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYElOVEVHRVJgYCB8IDpjbGFzczpgaW50YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYFJFQUxgYCAgICB8IDpjbGFzczpgZmxvYXRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYFRFWFRgYCAgICB8IGRlcGVuZHMgb24gdGV4dF9mYWN0b3J5LCBzdHIgYnkgZGVmYXVsdCAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYEJMT0JgYCAgICB8IDpjbGFzczpgYnl0ZXNgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgU1FMaXRlIHR5cGUgfCBQeXRob24gdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrPT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBgYE5VTExgYCAgICB8IDpjb25zdDpgTm9uZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgSU5URUdFUmBgIHwgOmNsYXNzOmBpbnRgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGBSRUFMYGAgICAgfCA6Y2xhc3M6YGZsb2F0YCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYFRFWFRgYCAgICB8IGRlcGVuZHMgb24gOmF0dHI6YH5Db25uZWN0aW9uLnRleHRfZmFjdG9yeWAsIHwKK3wgICAgICAgICAgICAgfCA6Y2xhc3M6YHN0cmAgYnkgZGVmYXVsdCAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBgYEJMT0JgYCAgICB8IDpjbGFzczpgYnl0ZXNgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIFRoZSB0eXBlIHN5c3RlbSBvZiB0aGUgOm1vZDpgc3FsaXRlM2AgbW9kdWxlIGlzIGV4dGVuc2libGUgaW4gdHdvIHdheXM6IHlvdSBjYW4KIHN0b3JlIGFkZGl0aW9uYWwgUHl0aG9uIHR5cGVzIGluIGEgU1FMaXRlIGRhdGFiYXNlIHZpYSBvYmplY3QgYWRhcHRhdGlvbiwgYW5kCkBAIC03MzAsOSArNzUwLDYgQEAKIHNxbGl0ZTMgbW9kdWxlJ3Mgc3VwcG9ydGVkIHR5cGVzIGZvciBTUUxpdGU6IG9uZSBvZiBOb25lVHlwZSwgaW50LCBmbG9hdCwKIHN0ciwgYnl0ZXMuCiAKLVRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgdXNlcyBQeXRob24gb2JqZWN0IGFkYXB0YXRpb24sIGFzIGRlc2NyaWJlZCBpbgotOnBlcDpgMjQ2YCBmb3IgdGhpcy4gIFRoZSBwcm90b2NvbCB0byB1c2UgaXMgOmNsYXNzOmBQcmVwYXJlUHJvdG9jb2xgLgotCiBUaGVyZSBhcmUgdHdvIHdheXMgdG8gZW5hYmxlIHRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgdG8gYWRhcHQgYSBjdXN0b20gUHl0aG9uCiB0eXBlIHRvIG9uZSBvZiB0aGUgc3VwcG9ydGVkIG9uZXMuCiAKQEAgLTc4OCw4ICs4MDUsOCBAQAogCiAuLiBub3RlOjoKIAotICAgQ29udmVydGVyIGZ1bmN0aW9ucyAqKmFsd2F5cyoqIGdldCBjYWxsZWQgd2l0aCBhIHN0cmluZywgbm8gbWF0dGVyIHVuZGVyIHdoaWNoCi0gICBkYXRhIHR5cGUgeW91IHNlbnQgdGhlIHZhbHVlIHRvIFNRTGl0ZS4KKyAgIENvbnZlcnRlciBmdW5jdGlvbnMgKiphbHdheXMqKiBnZXQgY2FsbGVkIHdpdGggYSA6Y2xhc3M6YGJ5dGVzYCBvYmplY3QsIG5vCisgICBtYXR0ZXIgdW5kZXIgd2hpY2ggZGF0YSB0eXBlIHlvdSBzZW50IHRoZSB2YWx1ZSB0byBTUUxpdGUuCiAKIDo6CiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3NzbC5yc3QgYi9Eb2MvbGlicmFyeS9zc2wucnN0CmluZGV4IGFhNWE1MmYuLmIwY2Y0ZWIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3NzbC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3NsLnJzdApAQCAtMjYsNyArMjYsOCBAQAogCiAgICBTb21lIGJlaGF2aW9yIG1heSBiZSBwbGF0Zm9ybSBkZXBlbmRlbnQsIHNpbmNlIGNhbGxzIGFyZSBtYWRlIHRvIHRoZQogICAgb3BlcmF0aW5nIHN5c3RlbSBzb2NrZXQgQVBJcy4gIFRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBPcGVuU1NMIG1heSBhbHNvCi0gICBjYXVzZSB2YXJpYXRpb25zIGluIGJlaGF2aW9yLgorICAgY2F1c2UgdmFyaWF0aW9ucyBpbiBiZWhhdmlvci4gRm9yIGV4YW1wbGUsIFRMU3YxLjEgYW5kIFRMU3YxLjIgY29tZSB3aXRoCisgICBvcGVuc3NsIHZlcnNpb24gMS4wLjEuCiAKIC4uIHdhcm5pbmc6OgogICAgRG9uJ3QgdXNlIHRoaXMgbW9kdWxlIHdpdGhvdXQgcmVhZGluZyB0aGUgOnJlZjpgc3NsLXNlY3VyaXR5YC4gIERvaW5nIHNvCkBAIC0xODYsMjUgKzE4NywyMiBAQAogCiAgICAgIC4uIHRhYmxlOjoKIAotICAgICAgID09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT0gID09PT09PT09PQotICAgICAgICAqY2xpZW50KiAvICoqc2VydmVyKiogICAgKipTU0x2MioqICAqKlNTTHYzKiogICoqU1NMdjIzKiogICoqVExTdjEqKgotICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLQotICAgICAgICAqU1NMdjIqICAgICAgICAgICAgICAgICAgICB5ZXMgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgbm8KLSAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vCi0gICAgICAgICpTU0x2MjMqICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubwotICAgICAgICAqVExTdjEqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgeWVzCi0gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09CisgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09PSAgPT09PT09PT09PT0KKyAgICAgICAgKmNsaWVudCogLyAqKnNlcnZlcioqICAgICoqU1NMdjIqKiAgKipTU0x2MyoqICAqKlNTTHYyMyoqICAqKlRMU3YxKiogICoqVExTdjEuMSoqICAqKlRMU3YxLjIqKgorICAgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tICAtLS0tLS0tLS0gIC0tLS0tLS0tLS0gIC0tLS0tLS0tLSAgLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tCisgICAgICAgICpTU0x2MiogICAgICAgICAgICAgICAgICAgIHllcyAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgbm8KKyAgICAgICAgKlNTTHYzKiAgICAgICAgICAgICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICBubworICAgICAgICAqU1NMdjIzKiAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgeWVzICAgICAgICAgeWVzICAgICAgICB5ZXMgICAgICAgIHllcworICAgICAgICAqVExTdjEqICAgICAgICAgICAgICAgICAgICBubyAgICAgICAgIG5vICAgICAgICAgeWVzICAgICAgICAgeWVzICAgICAgICBubyAgICAgICAgIG5vCisgICAgICAgICpUTFN2MS4xKiAgICAgICAgICAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMgICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgbm8KKyAgICAgICAgKlRMU3YxLjIqICAgICAgICAgICAgICAgICAgbm8gICAgICAgICBubyAgICAgICAgIHllcyAgICAgICAgIG5vICAgICAgICAgbm8gICAgICAgICB5ZXMKKyAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PSAgPT09PT09PT09ICA9PT09PT09PT09ICA9PT09PT09PT0gID09PT09PT09PT09ICA9PT09PT09PT09PQogCiAgICAuLiBub3RlOjoKIAogICAgICAgV2hpY2ggY29ubmVjdGlvbnMgc3VjY2VlZCB3aWxsIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB2ZXJzaW9uIG9mCi0gICAgICBPcGVuU1NMLiAgRm9yIGluc3RhbmNlLCBpbiBzb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5TU0wgKHN1Y2gKLSAgICAgIGFzIDAuOS43bCBvbiBPUyBYIDEwLjQpLCBhbiBTU0x2MiBjbGllbnQgY291bGQgbm90IGNvbm5lY3QgdG8gYW4KLSAgICAgIFNTTHYyMyBzZXJ2ZXIuICBBbm90aGVyIGV4YW1wbGU6IGJlZ2lubmluZyB3aXRoIE9wZW5TU0wgMS4wLjAsCi0gICAgICBhbiBTU0x2MjMgY2xpZW50IHdpbGwgbm90IGFjdHVhbGx5IGF0dGVtcHQgU1NMdjIgY29ubmVjdGlvbnMKLSAgICAgIHVubGVzcyB5b3UgZXhwbGljaXRseSBlbmFibGUgU1NMdjIgY2lwaGVyczsgZm9yIGV4YW1wbGUsIHlvdQotICAgICAgbWlnaHQgc3BlY2lmeSBgYCJBTEwiYGAgb3IgYGAiU1NMdjIiYGAgYXMgdGhlICpjaXBoZXJzKiBwYXJhbWV0ZXIKLSAgICAgIHRvIGVuYWJsZSB0aGVtLgorICAgICAgT3BlblNTTC4gIEZvciBleGFtcGxlLCBiZWZvcmUgT3BlblNTTCAxLjAuMCwgYW4gU1NMdjIzIGNsaWVudAorICAgICAgd291bGQgYWx3YXlzIGF0dGVtcHQgU1NMdjIgY29ubmVjdGlvbnMuCiAKICAgIFRoZSAqY2lwaGVycyogcGFyYW1ldGVyIHNldHMgdGhlIGF2YWlsYWJsZSBjaXBoZXJzIGZvciB0aGlzIFNTTCBvYmplY3QuCiAgICBJdCBzaG91bGQgYmUgYSBzdHJpbmcgaW4gdGhlIGBPcGVuU1NMIGNpcGhlciBsaXN0IGZvcm1hdApAQCAtMjI3LDE3ICsyMjUsNzUgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICBOZXcgb3B0aW9uYWwgYXJndW1lbnQgKmNpcGhlcnMqLgogCisKK0NvbnRleHQgY3JlYXRpb24KK15eXl5eXl5eXl5eXl5eXl4KKworQSBjb252ZW5pZW5jZSBmdW5jdGlvbiBoZWxwcyBjcmVhdGUgOmNsYXNzOmBTU0xDb250ZXh0YCBvYmplY3RzIGZvciBjb21tb24KK3B1cnBvc2VzLgorCisuLiBmdW5jdGlvbjo6IGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQocHVycG9zZT1QdXJwb3NlLlNFUlZFUl9BVVRILCBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKQorCisgICBSZXR1cm4gYSBuZXcgOmNsYXNzOmBTU0xDb250ZXh0YCBvYmplY3Qgd2l0aCBkZWZhdWx0IHNldHRpbmdzIGZvcgorICAgdGhlIGdpdmVuICpwdXJwb3NlKi4gIFRoZSBzZXR0aW5ncyBhcmUgY2hvc2VuIGJ5IHRoZSA6bW9kOmBzc2xgIG1vZHVsZSwKKyAgIGFuZCB1c3VhbGx5IHJlcHJlc2VudCBhIGhpZ2hlciBzZWN1cml0eSBsZXZlbCB0aGFuIHdoZW4gY2FsbGluZyB0aGUKKyAgIDpjbGFzczpgU1NMQ29udGV4dGAgY29uc3RydWN0b3IgZGlyZWN0bHkuCisKKyAgICpjYWZpbGUqLCAqY2FwYXRoKiwgKmNhZGF0YSogcmVwcmVzZW50IG9wdGlvbmFsIENBIGNlcnRpZmljYXRlcyB0bworICAgdHJ1c3QgZm9yIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiwgYXMgaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9uc2AuICBJZiBhbGwgdGhyZWUgYXJlCisgICA6Y29uc3Q6YE5vbmVgLCB0aGlzIGZ1bmN0aW9uIGNhbiBjaG9vc2UgdG8gdHJ1c3QgdGhlIHN5c3RlbSdzIGRlZmF1bHQKKyAgIENBIGNlcnRpZmljYXRlcyBpbnN0ZWFkLgorCisgICBUaGUgc2V0dGluZ3MgYXJlOiA6ZGF0YTpgUFJPVE9DT0xfU1NMdjIzYCwgOmRhdGE6YE9QX05PX1NTTHYyYCwgYW5kCisgICA6ZGF0YTpgT1BfTk9fU1NMdjNgIHdpdGggaGlnaCBlbmNyeXB0aW9uIGNpcGhlciBzdWl0ZXMgd2l0aG91dCBSQzQgYW5kCisgICB3aXRob3V0IHVuYXV0aGVudGljYXRlZCBjaXBoZXIgc3VpdGVzLiBQYXNzaW5nIDpkYXRhOmB+UHVycG9zZS5TRVJWRVJfQVVUSGAKKyAgIGFzICpwdXJwb3NlKiBzZXRzIDpkYXRhOmB+U1NMQ29udGV4dC52ZXJpZnlfbW9kZWAgdG8gOmRhdGE6YENFUlRfUkVRVUlSRURgCisgICBhbmQgZWl0aGVyIGxvYWRzIENBIGNlcnRpZmljYXRlcyAod2hlbiBhdCBsZWFzdCBvbmUgb2YgKmNhZmlsZSosICpjYXBhdGgqIG9yCisgICAqY2FkYXRhKiBpcyBnaXZlbikgb3IgdXNlcyA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNgIHRvIGxvYWQKKyAgIGRlZmF1bHQgQ0EgY2VydGlmaWNhdGVzLgorCisgICAuLiBub3RlOjoKKyAgICAgIFRoZSBwcm90b2NvbCwgb3B0aW9ucywgY2lwaGVyIGFuZCBvdGhlciBzZXR0aW5ncyBtYXkgY2hhbmdlIHRvIG1vcmUKKyAgICAgIHJlc3RyaWN0aXZlIHZhbHVlcyBhbnl0aW1lIHdpdGhvdXQgcHJpb3IgZGVwcmVjYXRpb24uICBUaGUgdmFsdWVzCisgICAgICByZXByZXNlbnQgYSBmYWlyIGJhbGFuY2UgYmV0d2VlbiBjb21wYXRpYmlsaXR5IGFuZCBzZWN1cml0eS4KKworICAgICAgSWYgeW91ciBhcHBsaWNhdGlvbiBuZWVkcyBzcGVjaWZpYyBzZXR0aW5ncywgeW91IHNob3VsZCBjcmVhdGUgYQorICAgICAgOmNsYXNzOmBTU0xDb250ZXh0YCBhbmQgYXBwbHkgdGhlIHNldHRpbmdzIHlvdXJzZWxmLgorCisgICAuLiBub3RlOjoKKyAgICAgIElmIHlvdSBmaW5kIHRoYXQgd2hlbiBjZXJ0YWluIG9sZGVyIGNsaWVudHMgb3Igc2VydmVycyBhdHRlbXB0IHRvIGNvbm5lY3QKKyAgICAgIHdpdGggYSA6Y2xhc3M6YFNTTENvbnRleHRgIGNyZWF0ZWQgYnkgdGhpcyBmdW5jdGlvbiB0aGF0IHRoZXkgZ2V0IGFuIGVycm9yCisgICAgICBzdGF0aW5nICJQcm90b2NvbCBvciBjaXBoZXIgc3VpdGUgbWlzbWF0Y2giLCBpdCBtYXkgYmUgdGhhdCB0aGV5IG9ubHkKKyAgICAgIHN1cHBvcnQgU1NMMy4wIHdoaWNoIHRoaXMgZnVuY3Rpb24gZXhjbHVkZXMgdXNpbmcgdGhlCisgICAgICA6ZGF0YTpgT1BfTk9fU1NMdjNgLiBTU0wzLjAgaXMgd2lkZWx5IGNvbnNpZGVyZWQgdG8gYmUgYGNvbXBsZXRlbHkgYnJva2VuCisgICAgICA8aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUE9PRExFPmBfLiBJZiB5b3Ugc3RpbGwgd2lzaCB0byBjb250aW51ZSB0bworICAgICAgdXNlIHRoaXMgZnVuY3Rpb24gYnV0IHN0aWxsIGFsbG93IFNTTCAzLjAgY29ubmVjdGlvbnMgeW91IGNhbiByZS1lbmFibGUKKyAgICAgIHRoZW0gdXNpbmc6OgorCisgICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChQdXJwb3NlLkNMSUVOVF9BVVRIKQorICAgICAgICAgY3R4Lm9wdGlvbnMgJj0gfnNzbC5PUF9OT19TU0x2MworCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuNAorCisgICAgIFJDNCB3YXMgZHJvcHBlZCBmcm9tIHRoZSBkZWZhdWx0IGNpcGhlciBzdHJpbmcuCisKKwogUmFuZG9tIGdlbmVyYXRpb24KIF5eXl5eXl5eXl5eXl5eXl5eCiAKIC4uIGZ1bmN0aW9uOjogUkFORF9ieXRlcyhudW0pCiAKLSAgIFJldHVybnMgKm51bSogY3J5cHRvZ3JhcGhpY2FsbHkgc3Ryb25nIHBzZXVkby1yYW5kb20gYnl0ZXMuIFJhaXNlcyBhbgorICAgUmV0dXJuICpudW0qIGNyeXB0b2dyYXBoaWNhbGx5IHN0cm9uZyBwc2V1ZG8tcmFuZG9tIGJ5dGVzLiBSYWlzZXMgYW4KICAgIDpjbGFzczpgU1NMRXJyb3JgIGlmIHRoZSBQUk5HIGhhcyBub3QgYmVlbiBzZWVkZWQgd2l0aCBlbm91Z2ggZGF0YSBvciBpZiB0aGUKICAgIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IFJBTkQgbWV0aG9kLiA6ZnVuYzpgUkFORF9zdGF0dXNgCiAgICBjYW4gYmUgdXNlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBQUk5HIGFuZCA6ZnVuYzpgUkFORF9hZGRgIGNhbiBiZSB1c2VkCiAgICB0byBzZWVkIHRoZSBQUk5HLgogCisgICBGb3IgYWxtb3N0IGFsbCBhcHBsaWNhdGlvbnMgOmZ1bmM6YG9zLnVyYW5kb21gIGlzIHByZWZlcmFibGUuCisKICAgIFJlYWQgdGhlIFdpa2lwZWRpYSBhcnRpY2xlLCBgQ3J5cHRvZ3JhcGhpY2FsbHkgc2VjdXJlIHBzZXVkb3JhbmRvbSBudW1iZXIKICAgIGdlbmVyYXRvciAoQ1NQUk5HKQogICAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3J5cHRvZ3JhcGhpY2FsbHlfc2VjdXJlX3BzZXVkb3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yPmBfLApAQCAtMjQ3LDcgKzMwMyw3IEBACiAKIC4uIGZ1bmN0aW9uOjogUkFORF9wc2V1ZG9fYnl0ZXMobnVtKQogCi0gICBSZXR1cm5zIChieXRlcywgaXNfY3J5cHRvZ3JhcGhpYyk6IGJ5dGVzIGFyZSAqbnVtKiBwc2V1ZG8tcmFuZG9tIGJ5dGVzLAorICAgUmV0dXJuIChieXRlcywgaXNfY3J5cHRvZ3JhcGhpYyk6IGJ5dGVzIGFyZSAqbnVtKiBwc2V1ZG8tcmFuZG9tIGJ5dGVzLAogICAgaXNfY3J5cHRvZ3JhcGhpYyBpcyBgYFRydWVgYCBpZiB0aGUgYnl0ZXMgZ2VuZXJhdGVkIGFyZSBjcnlwdG9ncmFwaGljYWxseQogICAgc3Ryb25nLiBSYWlzZXMgYW4gOmNsYXNzOmBTU0xFcnJvcmAgaWYgdGhlIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZQogICAgY3VycmVudCBSQU5EIG1ldGhvZC4KQEAgLTI1NywxNCArMzEzLDE2IEBACiAgICBmb3Igbm9uLWNyeXB0b2dyYXBoaWMgcHVycG9zZXMgYW5kIGZvciBjZXJ0YWluIHB1cnBvc2VzIGluIGNyeXB0b2dyYXBoaWMKICAgIHByb3RvY29scywgYnV0IHVzdWFsbHkgbm90IGZvciBrZXkgZ2VuZXJhdGlvbiBldGMuCiAKKyAgIEZvciBhbG1vc3QgYWxsIGFwcGxpY2F0aW9ucyA6ZnVuYzpgb3MudXJhbmRvbWAgaXMgcHJlZmVyYWJsZS4KKwogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIC4uIGZ1bmN0aW9uOjogUkFORF9zdGF0dXMoKQogCi0gICBSZXR1cm5zIGBgVHJ1ZWBgIGlmIHRoZSBTU0wgcHNldWRvLXJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGhhcyBiZWVuIHNlZWRlZCB3aXRoCi0gICAnZW5vdWdoJyByYW5kb21uZXNzLCBhbmQgYGBGYWxzZWBgIG90aGVyd2lzZS4gIFlvdSBjYW4gdXNlIDpmdW5jOmBzc2wuUkFORF9lZ2RgCi0gICBhbmQgOmZ1bmM6YHNzbC5SQU5EX2FkZGAgdG8gaW5jcmVhc2UgdGhlIHJhbmRvbW5lc3Mgb2YgdGhlIHBzZXVkby1yYW5kb20KLSAgIG51bWJlciBnZW5lcmF0b3IuCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIFNTTCBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgaGFzIGJlZW4gc2VlZGVkCisgICB3aXRoICdlbm91Z2gnIHJhbmRvbW5lc3MsIGFuZCBgYEZhbHNlYGAgb3RoZXJ3aXNlLiAgWW91IGNhbiB1c2UKKyAgIDpmdW5jOmBzc2wuUkFORF9lZ2RgIGFuZCA6ZnVuYzpgc3NsLlJBTkRfYWRkYCB0byBpbmNyZWFzZSB0aGUgcmFuZG9tbmVzcyBvZgorICAgdGhlIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KIAogLi4gZnVuY3Rpb246OiBSQU5EX2VnZChwYXRoKQogCkBAIC0yNzksNyArMzM3LDcgQEAKIAogLi4gZnVuY3Rpb246OiBSQU5EX2FkZChieXRlcywgZW50cm9weSkKIAotICAgTWl4ZXMgdGhlIGdpdmVuICpieXRlcyogaW50byB0aGUgU1NMIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvci4gIFRoZQorICAgTWl4IHRoZSBnaXZlbiAqYnl0ZXMqIGludG8gdGhlIFNTTCBwc2V1ZG8tcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuICBUaGUKICAgIHBhcmFtZXRlciAqZW50cm9weSogKGEgZmxvYXQpIGlzIGEgbG93ZXIgYm91bmQgb24gdGhlIGVudHJvcHkgY29udGFpbmVkIGluCiAgICBzdHJpbmcgKHNvIHlvdSBjYW4gYWx3YXlzIHVzZSA6Y29uc3Q6YDAuMGApLiAgU2VlIDpyZmM6YDE3NTBgIGZvciBtb3JlCiAgICBpbmZvcm1hdGlvbiBvbiBzb3VyY2VzIG9mIGVudHJvcHkuCkBAIC0zNTYsNiArNDE0LDYxIEBACiAgICBHaXZlbiBhIGNlcnRpZmljYXRlIGFzIGFuIEFTQ0lJIFBFTSBzdHJpbmcsIHJldHVybnMgYSBERVItZW5jb2RlZCBzZXF1ZW5jZSBvZgogICAgYnl0ZXMgZm9yIHRoYXQgc2FtZSBjZXJ0aWZpY2F0ZS4KIAorLi4gZnVuY3Rpb246OiBnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorCisgICBSZXR1cm5zIGEgbmFtZWQgdHVwbGUgd2l0aCBwYXRocyB0byBPcGVuU1NMJ3MgZGVmYXVsdCBjYWZpbGUgYW5kIGNhcGF0aC4KKyAgIFRoZSBwYXRocyBhcmUgdGhlIHNhbWUgYXMgdXNlZCBieQorICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYC4gVGhlIHJldHVybiB2YWx1ZSBpcyBhCisgICA6dGVybTpgbmFtZWQgdHVwbGVgIGBgRGVmYXVsdFZlcmlmeVBhdGhzYGA6CisKKyAgICogOmF0dHI6YGNhZmlsZWAgLSByZXNvbHZlZCBwYXRoIHRvIGNhZmlsZSBvciBOb25lIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QsCisgICAqIDphdHRyOmBjYXBhdGhgIC0gcmVzb2x2ZWQgcGF0aCB0byBjYXBhdGggb3IgTm9uZSBpZiB0aGUgZGlyZWN0b3J5IGRvZXNuJ3QgZXhpc3QsCisgICAqIDphdHRyOmBvcGVuc3NsX2NhZmlsZV9lbnZgIC0gT3BlblNTTCdzIGVudmlyb25tZW50IGtleSB0aGF0IHBvaW50cyB0byBhIGNhZmlsZSwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FmaWxlYCAtIGhhcmQgY29kZWQgcGF0aCB0byBhIGNhZmlsZSwKKyAgICogOmF0dHI6YG9wZW5zc2xfY2FwYXRoX2VudmAgLSBPcGVuU1NMJ3MgZW52aXJvbm1lbnQga2V5IHRoYXQgcG9pbnRzIHRvIGEgY2FwYXRoLAorICAgKiA6YXR0cjpgb3BlbnNzbF9jYXBhdGhgIC0gaGFyZCBjb2RlZCBwYXRoIHRvIGEgY2FwYXRoIGRpcmVjdG9yeQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBlbnVtX2NlcnRpZmljYXRlcyhzdG9yZV9uYW1lKQorCisgICBSZXRyaWV2ZSBjZXJ0aWZpY2F0ZXMgZnJvbSBXaW5kb3dzJyBzeXN0ZW0gY2VydCBzdG9yZS4gKnN0b3JlX25hbWUqIG1heSBiZQorICAgb25lIG9mIGBgQ0FgYCwgYGBST09UYGAgb3IgYGBNWWBgLiBXaW5kb3dzIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgY2VydAorICAgc3RvcmVzLCB0b28uCisKKyAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoY2VydF9ieXRlcywgZW5jb2RpbmdfdHlwZSwgdHJ1c3QpIHR1cGxlcy4KKyAgIFRoZSBlbmNvZGluZ190eXBlIHNwZWNpZmllcyB0aGUgZW5jb2Rpbmcgb2YgY2VydF9ieXRlcy4gSXQgaXMgZWl0aGVyCisgICA6Y29uc3Q6YHg1MDlfYXNuYCBmb3IgWC41MDkgQVNOLjEgZGF0YSBvciA6Y29uc3Q6YHBrY3NfN19hc25gIGZvcgorICAgUEtDUyM3IEFTTi4xIGRhdGEuIFRydXN0IHNwZWNpZmllcyB0aGUgcHVycG9zZSBvZiB0aGUgY2VydGlmaWNhdGUgYXMgYSBzZXQKKyAgIG9mIE9JRFMgb3IgZXhhY3RseSBgYFRydWVgYCBpZiB0aGUgY2VydGlmaWNhdGUgaXMgdHJ1c3R3b3J0aHkgZm9yIGFsbAorICAgcHVycG9zZXMuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICA+Pj4gc3NsLmVudW1fY2VydGlmaWNhdGVzKCJDQSIpCisgICAgICBbKGInZGF0YS4uLicsICd4NTA5X2FzbicsIHsnMS4zLjYuMS41LjUuNy4zLjEnLCAnMS4zLjYuMS41LjUuNy4zLjInfSksCisgICAgICAgKGInZGF0YS4uLicsICd4NTA5X2FzbicsIFRydWUpXQorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBmdW5jdGlvbjo6IGVudW1fY3JscyhzdG9yZV9uYW1lKQorCisgICBSZXRyaWV2ZSBDUkxzIGZyb20gV2luZG93cycgc3lzdGVtIGNlcnQgc3RvcmUuICpzdG9yZV9uYW1lKiBtYXkgYmUKKyAgIG9uZSBvZiBgYENBYGAsIGBgUk9PVGBgIG9yIGBgTVlgYC4gV2luZG93cyBtYXkgcHJvdmlkZSBhZGRpdGlvbmFsIGNlcnQKKyAgIHN0b3JlcywgdG9vLgorCisgICBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGNlcnRfYnl0ZXMsIGVuY29kaW5nX3R5cGUsIHRydXN0KSB0dXBsZXMuCisgICBUaGUgZW5jb2RpbmdfdHlwZSBzcGVjaWZpZXMgdGhlIGVuY29kaW5nIG9mIGNlcnRfYnl0ZXMuIEl0IGlzIGVpdGhlcgorICAgOmNvbnN0OmB4NTA5X2FzbmAgZm9yIFguNTA5IEFTTi4xIGRhdGEgb3IgOmNvbnN0OmBwa2NzXzdfYXNuYCBmb3IKKyAgIFBLQ1MjNyBBU04uMSBkYXRhLgorCisgICBBdmFpbGFiaWxpdHk6IFdpbmRvd3MuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIENvbnN0YW50cwogXl5eXl5eXl5eCiAKQEAgLTM5MiwzNCArNTA1LDkxIEBACiAgICBiZSBwYXNzZWQsIGVpdGhlciB0byA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgIG9yIGFzIGEKICAgIHZhbHVlIG9mIHRoZSBgYGNhX2NlcnRzYGAgcGFyYW1ldGVyIHRvIDpmdW5jOmB3cmFwX3NvY2tldGAuCiAKKy4uIGRhdGE6OiBWRVJJRllfREVGQVVMVAorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYC4gSW4gdGhpcyBtb2RlLCBjZXJ0aWZpY2F0ZQorICAgcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykgYXJlIG5vdCBjaGVja2VkLiBCeSBkZWZhdWx0IE9wZW5TU0wgZG9lcyBuZWl0aGVyCisgICByZXF1aXJlIG5vciB2ZXJpZnkgQ1JMcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfQ1JMX0NIRUNLX0xFQUYKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AuIEluIHRoaXMgbW9kZSwgb25seSB0aGUKKyAgIHBlZXIgY2VydCBpcyBjaGVjayBidXQgbm9uIG9mIHRoZSBpbnRlcm1lZGlhdGUgQ0EgY2VydGlmaWNhdGVzLiBUaGUgbW9kZQorICAgcmVxdWlyZXMgYSB2YWxpZCBDUkwgdGhhdCBpcyBzaWduZWQgYnkgdGhlIHBlZXIgY2VydCdzIGlzc3VlciAoaXRzIGRpcmVjdAorICAgYW5jZXN0b3IgQ0EpLiBJZiBubyBwcm9wZXIgaGFzIGJlZW4gbG9hZGVkCisgICA6YXR0cjpgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgLCB2YWxpZGF0aW9uIHdpbGwgZmFpbC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfQ1JMX0NIRUNLX0NIQUlOCisKKyAgIFBvc3NpYmxlIHZhbHVlIGZvciA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgLiBJbiB0aGlzIG1vZGUsIENSTHMgb2YKKyAgIGFsbCBjZXJ0aWZpY2F0ZXMgaW4gdGhlIHBlZXIgY2VydCBjaGFpbiBhcmUgY2hlY2tlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBWRVJJRllfWDUwOV9TVFJJQ1QKKworICAgUG9zc2libGUgdmFsdWUgZm9yIDphdHRyOmBTU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AgdG8gZGlzYWJsZSB3b3JrYXJvdW5kcworICAgZm9yIGJyb2tlbiBYLjUwOSBjZXJ0aWZpY2F0ZXMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogVkVSSUZZX1g1MDlfVFJVU1RFRF9GSVJTVAorCisgICBQb3NzaWJsZSB2YWx1ZSBmb3IgOmF0dHI6YFNTTENvbnRleHQudmVyaWZ5X2ZsYWdzYC4gSXQgaW5zdHJ1Y3RzIE9wZW5TU0wgdG8KKyAgIHByZWZlciB0cnVzdGVkIGNlcnRpZmljYXRlcyB3aGVuIGJ1aWxkaW5nIHRoZSB0cnVzdCBjaGFpbiB0byB2YWxpZGF0ZSBhCisgICBjZXJ0aWZpY2F0ZS4gVGhpcyBmbGFnIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40LjQKKworLi4gZGF0YTo6IFBST1RPQ09MX1NTTHYyMworCisgICBTZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sIHZlcnNpb24gdGhhdCBib3RoIHRoZSBjbGllbnQgYW5kIHNlcnZlciBzdXBwb3J0LgorICAgRGVzcGl0ZSB0aGUgbmFtZSwgdGhpcyBvcHRpb24gY2FuIHNlbGVjdCAiVExTIiBwcm90b2NvbHMgYXMgd2VsbCBhcyAiU1NMIi4KKwogLi4gZGF0YTo6IFBST1RPQ09MX1NTTHYyCiAKICAgIFNlbGVjdHMgU1NMIHZlcnNpb24gMiBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLgogCi0gICBUaGlzIHByb3RvY29sIGlzIG5vdCBhdmFpbGFibGUgaWYgT3BlblNTTCBpcyBjb21waWxlZCB3aXRoIE9QRU5TU0xfTk9fU1NMMgotICAgZmxhZy4KKyAgIFRoaXMgcHJvdG9jb2wgaXMgbm90IGF2YWlsYWJsZSBpZiBPcGVuU1NMIGlzIGNvbXBpbGVkIHdpdGggdGhlCisgICBgYE9QRU5TU0xfTk9fU1NMMmBgIGZsYWcuCiAKICAgIC4uIHdhcm5pbmc6OgogCiAgICAgICBTU0wgdmVyc2lvbiAyIGlzIGluc2VjdXJlLiAgSXRzIHVzZSBpcyBoaWdobHkgZGlzY291cmFnZWQuCiAKLS4uIGRhdGE6OiBQUk9UT0NPTF9TU0x2MjMKLQotICAgU2VsZWN0cyBTU0wgdmVyc2lvbiAyIG9yIDMgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gIFRoaXMgaXMgYQotICAgc2V0dGluZyB0byB1c2Ugd2l0aCBzZXJ2ZXJzIGZvciBtYXhpbXVtIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb3RoZXIgZW5kIG9mCi0gICBhbiBTU0wgY29ubmVjdGlvbiwgYnV0IGl0IG1heSBjYXVzZSB0aGUgc3BlY2lmaWMgY2lwaGVycyBjaG9zZW4gZm9yIHRoZQotICAgZW5jcnlwdGlvbiB0byBiZSBvZiBmYWlybHkgbG93IHF1YWxpdHkuCi0KIC4uIGRhdGE6OiBQUk9UT0NPTF9TU0x2MwogCi0gICBTZWxlY3RzIFNTTCB2ZXJzaW9uIDMgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gIEZvciBjbGllbnRzLCB0aGlzCi0gICBpcyB0aGUgbWF4aW1hbGx5IGNvbXBhdGlibGUgU1NMIHZhcmlhbnQuCisgICBTZWxlY3RzIFNTTCB2ZXJzaW9uIDMgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4KKworICAgVGhpcyBwcm90b2NvbCBpcyBub3QgYmUgYXZhaWxhYmxlIGlmIE9wZW5TU0wgaXMgY29tcGlsZWQgd2l0aCB0aGUKKyAgIGBgT1BFTlNTTF9OT19TU0x2M2BgIGZsYWcuCisKKyAgIC4uIHdhcm5pbmc6OgorCisgICAgICBTU0wgdmVyc2lvbiAzIGlzIGluc2VjdXJlLiAgSXRzIHVzZSBpcyBoaWdobHkgZGlzY291cmFnZWQuCiAKIC4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MQogCi0gICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEgYXMgdGhlIGNoYW5uZWwgZW5jcnlwdGlvbiBwcm90b2NvbC4gIFRoaXMgaXMgdGhlIG1vc3QKLSAgIG1vZGVybiB2ZXJzaW9uLCBhbmQgcHJvYmFibHkgdGhlIGJlc3QgY2hvaWNlIGZvciBtYXhpbXVtIHByb3RlY3Rpb24sIGlmIGJvdGgKLSAgIHNpZGVzIGNhbiBzcGVhayBpdC4KKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4wIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCisKKy4uIGRhdGE6OiBQUk9UT0NPTF9UTFN2MV8xCisKKyAgIFNlbGVjdHMgVExTIHZlcnNpb24gMS4xIGFzIHRoZSBjaGFubmVsIGVuY3J5cHRpb24gcHJvdG9jb2wuCisgICBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAxLjAuMSsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogUFJPVE9DT0xfVExTdjFfMgorCisgICBTZWxlY3RzIFRMUyB2ZXJzaW9uIDEuMiBhcyB0aGUgY2hhbm5lbCBlbmNyeXB0aW9uIHByb3RvY29sLiBUaGlzIGlzIHRoZQorICAgbW9zdCBtb2Rlcm4gdmVyc2lvbiwgYW5kIHByb2JhYmx5IHRoZSBiZXN0IGNob2ljZSBmb3IgbWF4aW11bSBwcm90ZWN0aW9uLAorICAgaWYgYm90aCBzaWRlcyBjYW4gc3BlYWsgaXQuICBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAxLjAuMSsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBkYXRhOjogT1BfQUxMCiAKQEAgLTQ1Myw2ICs2MjMsMjIgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKy4uIGRhdGE6OiBPUF9OT19UTFN2MV8xCisKKyAgIFByZXZlbnRzIGEgVExTdjEuMSBjb25uZWN0aW9uLiBUaGlzIG9wdGlvbiBpcyBvbmx5IGFwcGxpY2FibGUgaW4gY29uanVuY3Rpb24KKyAgIHdpdGggOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgLiBJdCBwcmV2ZW50cyB0aGUgcGVlcnMgZnJvbSBjaG9vc2luZyBUTFN2MS4xIGFzCisgICB0aGUgcHJvdG9jb2wgdmVyc2lvbi4gQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMS4wLjErLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IE9QX05PX1RMU3YxXzIKKworICAgUHJldmVudHMgYSBUTFN2MS4yIGNvbm5lY3Rpb24uIFRoaXMgb3B0aW9uIGlzIG9ubHkgYXBwbGljYWJsZSBpbiBjb25qdW5jdGlvbgorICAgd2l0aCA6Y29uc3Q6YFBST1RPQ09MX1NTTHYyM2AuIEl0IHByZXZlbnRzIHRoZSBwZWVycyBmcm9tIGNob29zaW5nIFRMU3YxLjIgYXMKKyAgIHRoZSBwcm90b2NvbCB2ZXJzaW9uLiBBdmFpbGFibGUgb25seSB3aXRoIG9wZW5zc2wgdmVyc2lvbiAxLjAuMSsuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAuLiBkYXRhOjogT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFCiAKICAgIFVzZSB0aGUgc2VydmVyJ3MgY2lwaGVyIG9yZGVyaW5nIHByZWZlcmVuY2UsIHJhdGhlciB0aGFuIHRoZSBjbGllbnQncy4KQEAgLTQ5Niw5ICs2ODIsNyBAQAogLi4gZGF0YTo6IEhBU19TTkkKIAogICAgV2hldGhlciB0aGUgT3BlblNTTCBsaWJyYXJ5IGhhcyBidWlsdC1pbiBzdXBwb3J0IGZvciB0aGUgKlNlcnZlciBOYW1lCi0gICBJbmRpY2F0aW9uKiBleHRlbnNpb24gdG8gdGhlIFNTTHYzIGFuZCBUTFN2MSBwcm90b2NvbHMgKGFzIGRlZmluZWQgaW4KLSAgIDpyZmM6YDQzNjZgKS4gIFdoZW4gdHJ1ZSwgeW91IGNhbiB1c2UgdGhlICpzZXJ2ZXJfaG9zdG5hbWUqIGFyZ3VtZW50IHRvCi0gICA6bWV0aDpgU1NMQ29udGV4dC53cmFwX3NvY2tldGAuCisgICBJbmRpY2F0aW9uKiBleHRlbnNpb24gKGFzIGRlZmluZWQgaW4gOnJmYzpgNDM2NmApLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIApAQCAtNTQ5LDQ1ICs3MzMsMTIyIEBACiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisuLiBkYXRhOjogQUxFUlRfREVTQ1JJUFRJT05fSEFORFNIQUtFX0ZBSUxVUkUKKyAgICAgICAgICBBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorICAgICAgICAgIEFMRVJUX0RFU0NSSVBUSU9OXyoKKworICAgQWxlcnQgRGVzY3JpcHRpb25zIGZyb20gOnJmYzpgNTI0NmAgYW5kIG90aGVycy4gVGhlIGBJQU5BIFRMUyBBbGVydCBSZWdpc3RyeQorICAgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTY+YF8KKyAgIGNvbnRhaW5zIHRoaXMgbGlzdCBhbmQgcmVmZXJlbmNlcyB0byB0aGUgUkZDcyB3aGVyZSB0aGVpciBtZWFuaW5nIGlzIGRlZmluZWQuCisKKyAgIFVzZWQgYXMgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gaW4KKyAgIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLlNFUlZFUl9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgc2VydmVycyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBjbGllbnQtc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGRhdGE6OiBQdXJwb3NlLkNMSUVOVF9BVVRICisKKyAgIE9wdGlvbiBmb3IgOmZ1bmM6YGNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgIGFuZAorICAgOm1ldGg6YFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzYC4gIFRoaXMgdmFsdWUgaW5kaWNhdGVzIHRoYXQgdGhlCisgICBjb250ZXh0IG1heSBiZSB1c2VkIHRvIGF1dGhlbnRpY2F0ZSBXZWIgY2xpZW50cyAodGhlcmVmb3JlLCBpdCB3aWxsCisgICBiZSB1c2VkIHRvIGNyZWF0ZSBzZXJ2ZXItc2lkZSBzb2NrZXRzKS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIAogU1NMIFNvY2tldHMKIC0tLS0tLS0tLS0tCiAKLVNTTCBzb2NrZXRzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9mIDpyZWY6YHNvY2tldC1vYmplY3RzYDoKKy4uIGNsYXNzOjogU1NMU29ja2V0KHNvY2tldC5zb2NrZXQpCiAKLS0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmFjY2VwdCgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuYmluZCgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuY2xvc2UoKWAKLS0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmNvbm5lY3QoKWAKLS0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmRldGFjaCgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZmlsZW5vKClgCi0tIDptZXRoOmB+c29ja2V0LnNvY2tldC5nZXRwZWVybmFtZSgpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LmdldHNvY2tuYW1lKClgCi0tIDptZXRoOmB+c29ja2V0LnNvY2tldC5nZXRzb2Nrb3B0KClgLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2V0c29ja29wdCgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0dGltZW91dCgpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNldHRpbWVvdXQoKWAsCi0gIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZXRibG9ja2luZygpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQubGlzdGVuKClgCi0tIDptZXRoOmB+c29ja2V0LnNvY2tldC5tYWtlZmlsZSgpYAotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQucmVjdigpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3ZfaW50bygpYAotICAoYnV0IHBhc3NpbmcgYSBub24temVybyBgYGZsYWdzYGAgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQpCi0tIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZW5kKClgLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZGFsbCgpYCAod2l0aAotICB0aGUgc2FtZSBsaW1pdGF0aW9uKQotLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2h1dGRvd24oKWAKKyAgIFNTTCBzb2NrZXRzIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9mIDpyZWY6YHNvY2tldC1vYmplY3RzYDoKIAotSG93ZXZlciwgc2luY2UgdGhlIFNTTCAoYW5kIFRMUykgcHJvdG9jb2wgaGFzIGl0cyBvd24gZnJhbWluZyBhdG9wCi1vZiBUQ1AsIHRoZSBTU0wgc29ja2V0cyBhYnN0cmFjdGlvbiBjYW4sIGluIGNlcnRhaW4gcmVzcGVjdHMsIGRpdmVyZ2UgZnJvbQotdGhlIHNwZWNpZmljYXRpb24gb2Ygbm9ybWFsLCBPUy1sZXZlbCBzb2NrZXRzLiAgU2VlIGVzcGVjaWFsbHkgdGhlCi06cmVmOmBub3RlcyBvbiBub24tYmxvY2tpbmcgc29ja2V0cyA8c3NsLW5vbmJsb2NraW5nPmAuCisgICAtIDptZXRoOmB+c29ja2V0LnNvY2tldC5hY2NlcHQoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmJpbmQoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmNsb3NlKClgCisgICAtIDptZXRoOmB+c29ja2V0LnNvY2tldC5jb25uZWN0KClgCisgICAtIDptZXRoOmB+c29ja2V0LnNvY2tldC5kZXRhY2goKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmZpbGVubygpYAorICAgLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0cGVlcm5hbWUoKWAsIDptZXRoOmB+c29ja2V0LnNvY2tldC5nZXRzb2NrbmFtZSgpYAorICAgLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0c29ja29wdCgpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNldHNvY2tvcHQoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LmdldHRpbWVvdXQoKWAsIDptZXRoOmB+c29ja2V0LnNvY2tldC5zZXR0aW1lb3V0KClgLAorICAgICA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2V0YmxvY2tpbmcoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0Lmxpc3RlbigpYAorICAgLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQubWFrZWZpbGUoKWAKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3YoKWAsIDptZXRoOmB+c29ja2V0LnNvY2tldC5yZWN2X2ludG8oKWAKKyAgICAgKGJ1dCBwYXNzaW5nIGEgbm9uLXplcm8gYGBmbGFnc2BgIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkKQorICAgLSA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZCgpYCwgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNlbmRhbGwoKWAgKHdpdGgKKyAgICAgdGhlIHNhbWUgbGltaXRhdGlvbikKKyAgIC0gOm1ldGg6YH5zb2NrZXQuc29ja2V0LnNodXRkb3duKClgCisKKyAgIEhvd2V2ZXIsIHNpbmNlIHRoZSBTU0wgKGFuZCBUTFMpIHByb3RvY29sIGhhcyBpdHMgb3duIGZyYW1pbmcgYXRvcAorICAgb2YgVENQLCB0aGUgU1NMIHNvY2tldHMgYWJzdHJhY3Rpb24gY2FuLCBpbiBjZXJ0YWluIHJlc3BlY3RzLCBkaXZlcmdlIGZyb20KKyAgIHRoZSBzcGVjaWZpY2F0aW9uIG9mIG5vcm1hbCwgT1MtbGV2ZWwgc29ja2V0cy4gIFNlZSBlc3BlY2lhbGx5IHRoZQorICAgOnJlZjpgbm90ZXMgb24gbm9uLWJsb2NraW5nIHNvY2tldHMgPHNzbC1ub25ibG9ja2luZz5gLgorCisgICBVc3VhbGx5LCA6Y2xhc3M6YFNTTFNvY2tldGAgYXJlIG5vdCBjcmVhdGVkIGRpcmVjdGx5LCBidXQgdXNpbmcgdGhlCisgICA6ZnVuYzpgd3JhcF9zb2NrZXRgIGZ1bmN0aW9uIG9yIHRoZSA6bWV0aDpgU1NMQ29udGV4dC53cmFwX3NvY2tldGAgbWV0aG9kLgogCiBTU0wgc29ja2V0cyBhbHNvIGhhdmUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXM6CiAKKy4uIG1ldGhvZDo6IFNTTFNvY2tldC5yZWFkKGxlbj0wLCBidWZmZXI9Tm9uZSkKKworICAgUmVhZCB1cCB0byAqbGVuKiBieXRlcyBvZiBkYXRhIGZyb20gdGhlIFNTTCBzb2NrZXQgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzCisgICBhIGBgYnl0ZXNgYCBpbnN0YW5jZS4gSWYgKmJ1ZmZlciogaXMgc3BlY2lmaWVkLCB0aGVuIHJlYWQgaW50byB0aGUgYnVmZmVyCisgICBpbnN0ZWFkLCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KKworICAgUmFpc2UgOmV4YzpgU1NMV2FudFJlYWRFcnJvcmAgb3IgOmV4YzpgU1NMV2FudFdyaXRlRXJyb3JgIGlmIHRoZSBzb2NrZXQgaXMKKyAgIDpyZWY6YG5vbi1ibG9ja2luZyA8c3NsLW5vbmJsb2NraW5nPmAgYW5kIHRoZSByZWFkIHdvdWxkIGJsb2NrLgorCisgICBBcyBhdCBhbnkgdGltZSBhIHJlLW5lZ290aWF0aW9uIGlzIHBvc3NpYmxlLCBhIGNhbGwgdG8gOm1ldGg6YHJlYWRgIGNhbiBhbHNvCisgICBjYXVzZSB3cml0ZSBvcGVyYXRpb25zLgorCisuLiBtZXRob2Q6OiBTU0xTb2NrZXQud3JpdGUoYnVmKQorCisgICBXcml0ZSAqYnVmKiB0byB0aGUgU1NMIHNvY2tldCBhbmQgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbi4gVGhlCisgICAqYnVmKiBhcmd1bWVudCBtdXN0IGJlIGFuIG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLgorCisgICBSYWlzZSA6ZXhjOmBTU0xXYW50UmVhZEVycm9yYCBvciA6ZXhjOmBTU0xXYW50V3JpdGVFcnJvcmAgaWYgdGhlIHNvY2tldCBpcworICAgOnJlZjpgbm9uLWJsb2NraW5nIDxzc2wtbm9uYmxvY2tpbmc+YCBhbmQgdGhlIHdyaXRlIHdvdWxkIGJsb2NrLgorCisgICBBcyBhdCBhbnkgdGltZSBhIHJlLW5lZ290aWF0aW9uIGlzIHBvc3NpYmxlLCBhIGNhbGwgdG8gOm1ldGg6YHdyaXRlYCBjYW4KKyAgIGFsc28gY2F1c2UgcmVhZCBvcGVyYXRpb25zLgorCisuLiBub3RlOjoKKworICAgVGhlIDptZXRoOmB+U1NMU29ja2V0LnJlYWRgIGFuZCA6bWV0aDpgflNTTFNvY2tldC53cml0ZWAgbWV0aG9kcyBhcmUgdGhlCisgICBsb3ctbGV2ZWwgbWV0aG9kcyB0aGF0IHJlYWQgYW5kIHdyaXRlIHVuZW5jcnlwdGVkLCBhcHBsaWNhdGlvbi1sZXZlbCBkYXRhCisgICBhbmQgZGVjcnlwdC9lbmNyeXB0IGl0IHRvIGVuY3J5cHRlZCwgd2lyZS1sZXZlbCBkYXRhLiBUaGVzZSBtZXRob2RzCisgICByZXF1aXJlIGFuIGFjdGl2ZSBTU0wgY29ubmVjdGlvbiwgaS5lLiB0aGUgaGFuZHNoYWtlIHdhcyBjb21wbGV0ZWQgYW5kCisgICA6bWV0aDpgU1NMU29ja2V0LnVud3JhcGAgd2FzIG5vdCBjYWxsZWQuCisKKyAgIE5vcm1hbGx5IHlvdSBzaG91bGQgdXNlIHRoZSBzb2NrZXQgQVBJIG1ldGhvZHMgbGlrZQorICAgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3ZgIGFuZCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuc2VuZGAgaW5zdGVhZCBvZiB0aGVzZQorICAgbWV0aG9kcy4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmRvX2hhbmRzaGFrZSgpCiAKICAgIFBlcmZvcm0gdGhlIFNTTCBzZXR1cCBoYW5kc2hha2UuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgaGFuZHNoYWtlIG1ldGhvZCBhbHNvIHBlcmZvcm1zIDpmdW5jOmBtYXRjaF9ob3N0bmFtZWAgd2hlbiB0aGUKKyAgICAgIDphdHRyOmB+U1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgYXR0cmlidXRlIG9mIHRoZSBzb2NrZXQncworICAgICAgOmF0dHI6YH5TU0xTb2NrZXQuY29udGV4dGAgaXMgdHJ1ZS4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmdldHBlZXJjZXJ0KGJpbmFyeV9mb3JtPUZhbHNlKQogCiAgICBJZiB0aGVyZSBpcyBubyBjZXJ0aWZpY2F0ZSBmb3IgdGhlIHBlZXIgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbiwKLSAgIHJldHVybnMgYGBOb25lYGAuCisgICByZXR1cm4gYGBOb25lYGAuICBJZiB0aGUgU1NMIGhhbmRzaGFrZSBoYXNuJ3QgYmVlbiBkb25lIHlldCwgcmFpc2UKKyAgIDpleGM6YFZhbHVlRXJyb3JgLgogCiAgICBJZiB0aGUgYGBiaW5hcnlfZm9ybWBgIHBhcmFtZXRlciBpcyA6Y29uc3Q6YEZhbHNlYCwgYW5kIGEgY2VydGlmaWNhdGUgd2FzCiAgICByZWNlaXZlZCBmcm9tIHRoZSBwZWVyLCB0aGlzIG1ldGhvZCByZXR1cm5zIGEgOmNsYXNzOmBkaWN0YCBpbnN0YW5jZS4gIElmIHRoZQpAQCAtNjQ1LDYgKzkwNiwxMSBAQAogICAgICAgVGhlIHJldHVybmVkIGRpY3Rpb25hcnkgaW5jbHVkZXMgYWRkaXRpb25hbCBpdGVtcyBzdWNoIGFzIGBgaXNzdWVyYGAKICAgICAgIGFuZCBgYG5vdEJlZm9yZWBgLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkIHdoZW4gdGhlIGhhbmRzaGFrZSBpc24ndCBkb25lLgorICAgICAgVGhlIHJldHVybmVkIGRpY3Rpb25hcnkgaW5jbHVkZXMgYWRkaXRpb25hbCBYNTA5djMgZXh0ZW5zaW9uIGl0ZW1zCisgICAgICAgIHN1Y2ggYXMgYGBjcmxEaXN0cmlidXRpb25Qb2ludHNgYCwgYGBjYUlzc3VlcnNgYCBhbmQgYGBPQ1NQYGAgVVJJcy4KKwogLi4gbWV0aG9kOjogU1NMU29ja2V0LmNpcGhlcigpCiAKICAgIFJldHVybnMgYSB0aHJlZS12YWx1ZSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lIG9mIHRoZSBjaXBoZXIgYmVpbmcgdXNlZCwgdGhlCkBAIC02OTEsNiArOTU3LDExIEBACiAgICByZXR1cm5lZCBzb2NrZXQgc2hvdWxkIGFsd2F5cyBiZSB1c2VkIGZvciBmdXJ0aGVyIGNvbW11bmljYXRpb24gd2l0aCB0aGUKICAgIG90aGVyIHNpZGUgb2YgdGhlIGNvbm5lY3Rpb24sIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCBzb2NrZXQuCiAKKy4uIG1ldGhvZDo6IFNTTFNvY2tldC5wZW5kaW5nKCkKKworICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGFscmVhZHkgZGVjcnlwdGVkIGJ5dGVzIGF2YWlsYWJsZSBmb3IgcmVhZCwgcGVuZGluZyBvbgorICAgdGhlIGNvbm5lY3Rpb24uCisKIC4uIGF0dHJpYnV0ZTo6IFNTTFNvY2tldC5jb250ZXh0CiAKICAgIFRoZSA6Y2xhc3M6YFNTTENvbnRleHRgIG9iamVjdCB0aGlzIFNTTCBzb2NrZXQgaXMgdGllZCB0by4gIElmIHRoZSBTU0wKQEAgLTcwMCw2ICs5NzEsMjAgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKy4uIGF0dHJpYnV0ZTo6IFNTTFNvY2tldC5zZXJ2ZXJfc2lkZQorCisgICBBIGJvb2xlYW4gd2hpY2ggaXMgYGBUcnVlYGAgZm9yIHNlcnZlci1zaWRlIHNvY2tldHMgYW5kIGBgRmFsc2VgYCBmb3IKKyAgIGNsaWVudC1zaWRlIHNvY2tldHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgorCisuLiBhdHRyaWJ1dGU6OiBTU0xTb2NrZXQuc2VydmVyX2hvc3RuYW1lCisKKyAgIEhvc3RuYW1lIG9mIHRoZSBzZXJ2ZXI6IDpjbGFzczpgc3RyYCB0eXBlLCBvciBgYE5vbmVgYCBmb3Igc2VydmVyLXNpZGUKKyAgIHNvY2tldCBvciBpZiB0aGUgaG9zdG5hbWUgd2FzIG5vdCBzcGVjaWZpZWQgaW4gdGhlIGNvbnN0cnVjdG9yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKKwogCiBTU0wgQ29udGV4dHMKIC0tLS0tLS0tLS0tLQpAQCAtNzE1LDExICsxMDAwLDMwIEBACiAKICAgIENyZWF0ZSBhIG5ldyBTU0wgY29udGV4dC4gIFlvdSBtdXN0IHBhc3MgKnByb3RvY29sKiB3aGljaCBtdXN0IGJlIG9uZQogICAgb2YgdGhlIGBgUFJPVE9DT0xfKmBgIGNvbnN0YW50cyBkZWZpbmVkIGluIHRoaXMgbW9kdWxlLgotICAgOmRhdGE6YFBST1RPQ09MX1NTTHYyM2AgaXMgcmVjb21tZW5kZWQgZm9yIG1heGltdW0gaW50ZXJvcGVyYWJpbGl0eS4KKyAgIDpkYXRhOmBQUk9UT0NPTF9TU0x2MjNgIGlzIGN1cnJlbnRseSByZWNvbW1lbmRlZCBmb3IgbWF4aW11bQorICAgaW50ZXJvcGVyYWJpbGl0eS4KKworICAgLi4gc2VlYWxzbzo6CisgICAgICA6ZnVuYzpgY3JlYXRlX2RlZmF1bHRfY29udGV4dGAgbGV0cyB0aGUgOm1vZDpgc3NsYCBtb2R1bGUgY2hvb3NlCisgICAgICBzZWN1cml0eSBzZXR0aW5ncyBmb3IgYSBnaXZlbiBwdXJwb3NlLgogCiAKIDpjbGFzczpgU1NMQ29udGV4dGAgb2JqZWN0cyBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhbmQgYXR0cmlidXRlczoKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKworICAgR2V0IHN0YXRpc3RpY3MgYWJvdXQgcXVhbnRpdGllcyBvZiBsb2FkZWQgWC41MDkgY2VydGlmaWNhdGVzLCBjb3VudCBvZgorICAgWC41MDkgY2VydGlmaWNhdGVzIGZsYWdnZWQgYXMgQ0EgY2VydGlmaWNhdGVzIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uCisgICBsaXN0cyBhcyBkaWN0aW9uYXJ5LgorCisgICBFeGFtcGxlIGZvciBhIGNvbnRleHQgd2l0aCBvbmUgQ0EgY2VydCBhbmQgb25lIG90aGVyIGNlcnQ6OgorCisgICAgICA+Pj4gY29udGV4dC5jZXJ0X3N0b3JlX3N0YXRzKCkKKyAgICAgIHsnY3JsJzogMCwgJ3g1MDlfY2EnOiAxLCAneDUwOSc6IDJ9CisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlPU5vbmUsIHBhc3N3b3JkPU5vbmUpCiAKICAgIExvYWQgYSBwcml2YXRlIGtleSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2VydGlmaWNhdGUuICBUaGUgKmNlcnRmaWxlKgpAQCAtNzUwLDEyICsxMDU0LDMyIEBACiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpwYXNzd29yZCouCiAKLS4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSkKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCkKKworICAgTG9hZCBhIHNldCBvZiBkZWZhdWx0ICJjZXJ0aWZpY2F0aW9uIGF1dGhvcml0eSIgKENBKSBjZXJ0aWZpY2F0ZXMgZnJvbQorICAgZGVmYXVsdCBsb2NhdGlvbnMuIE9uIFdpbmRvd3MgaXQgbG9hZHMgQ0EgY2VydHMgZnJvbSB0aGUgYGBDQWBgIGFuZAorICAgYGBST09UYGAgc3lzdGVtIHN0b3Jlcy4gT24gb3RoZXIgc3lzdGVtcyBpdCBjYWxscworICAgOm1ldGg6YFNTTENvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYC4gSW4gdGhlIGZ1dHVyZSB0aGUgbWV0aG9kIG1heQorICAgbG9hZCBDQSBjZXJ0aWZpY2F0ZXMgZnJvbSBvdGhlciBsb2NhdGlvbnMsIHRvby4KKworICAgVGhlICpwdXJwb3NlKiBmbGFnIHNwZWNpZmllcyB3aGF0IGtpbmQgb2YgQ0EgY2VydGlmaWNhdGVzIGFyZSBsb2FkZWQuIFRoZQorICAgZGVmYXVsdCBzZXR0aW5ncyA6ZGF0YTpgUHVycG9zZS5TRVJWRVJfQVVUSGAgbG9hZHMgY2VydGlmaWNhdGVzLCB0aGF0IGFyZQorICAgZmxhZ2dlZCBhbmQgdHJ1c3RlZCBmb3IgVExTIHdlYiBzZXJ2ZXIgYXV0aGVudGljYXRpb24gKGNsaWVudCBzaWRlCisgICBzb2NrZXRzKS4gOmRhdGE6YFB1cnBvc2UuQ0xJRU5UX0FVVEhgIGxvYWRzIENBIGNlcnRpZmljYXRlcyBmb3IgY2xpZW50CisgICBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gb24gdGhlIHNlcnZlciBzaWRlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gbWV0aG9kOjogU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLCBjYWRhdGE9Tm9uZSkKIAogICAgTG9hZCBhIHNldCBvZiAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIHVzZWQgdG8gdmFsaWRhdGUKICAgIG90aGVyIHBlZXJzJyBjZXJ0aWZpY2F0ZXMgd2hlbiA6ZGF0YTpgdmVyaWZ5X21vZGVgIGlzIG90aGVyIHRoYW4KICAgIDpkYXRhOmBDRVJUX05PTkVgLiAgQXQgbGVhc3Qgb25lIG9mICpjYWZpbGUqIG9yICpjYXBhdGgqIG11c3QgYmUgc3BlY2lmaWVkLgogCisgICBUaGlzIG1ldGhvZCBjYW4gYWxzbyBsb2FkIGNlcnRpZmljYXRpb24gcmV2b2NhdGlvbiBsaXN0cyAoQ1JMcykgaW4gUEVNIG9yCisgICBERVIgZm9ybWF0LiBJbiBvcmRlciB0byBtYWtlIHVzZSBvZiBDUkxzLCA6YXR0cjpgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3NgCisgICBtdXN0IGJlIGNvbmZpZ3VyZWQgcHJvcGVybHkuCisKICAgIFRoZSAqY2FmaWxlKiBzdHJpbmcsIGlmIHByZXNlbnQsIGlzIHRoZSBwYXRoIHRvIGEgZmlsZSBvZiBjb25jYXRlbmF0ZWQKICAgIENBIGNlcnRpZmljYXRlcyBpbiBQRU0gZm9ybWF0LiBTZWUgdGhlIGRpc2N1c3Npb24gb2YKICAgIDpyZWY6YHNzbC1jZXJ0aWZpY2F0ZXNgIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBhcnJhbmdlIHRoZQpAQCAtNzY2LDYgKzEwOTAsMjkgQEAKICAgIGZvbGxvd2luZyBhbiBgT3BlblNTTCBzcGVjaWZpYyBsYXlvdXQKICAgIDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3Mvc3NsL1NTTF9DVFhfbG9hZF92ZXJpZnlfbG9jYXRpb25zLmh0bWw+YF8uCiAKKyAgIFRoZSAqY2FkYXRhKiBvYmplY3QsIGlmIHByZXNlbnQsIGlzIGVpdGhlciBhbiBBU0NJSSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUKKyAgIFBFTS1lbmNvZGVkIGNlcnRpZmljYXRlcyBvciBhIDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb2YgREVSLWVuY29kZWQKKyAgIGNlcnRpZmljYXRlcy4gTGlrZSB3aXRoICpjYXBhdGgqIGV4dHJhIGxpbmVzIGFyb3VuZCBQRU0tZW5jb2RlZAorICAgY2VydGlmaWNhdGVzIGFyZSBpZ25vcmVkIGJ1dCBhdCBsZWFzdCBvbmUgY2VydGlmaWNhdGUgbXVzdCBiZSBwcmVzZW50LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgTmV3IG9wdGlvbmFsIGFyZ3VtZW50ICpjYWRhdGEqCisKKy4uIG1ldGhvZDo6IFNTTENvbnRleHQuZ2V0X2NhX2NlcnRzKGJpbmFyeV9mb3JtPUZhbHNlKQorCisgICBHZXQgYSBsaXN0IG9mIGxvYWRlZCAiY2VydGlmaWNhdGlvbiBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzLiBJZiB0aGUKKyAgIGBgYmluYXJ5X2Zvcm1gYCBwYXJhbWV0ZXIgaXMgOmNvbnN0OmBGYWxzZWAgZWFjaCBsaXN0CisgICBlbnRyeSBpcyBhIGRpY3QgbGlrZSB0aGUgb3V0cHV0IG9mIDptZXRoOmBTU0xTb2NrZXQuZ2V0cGVlcmNlcnRgLiBPdGhlcndpc2UKKyAgIHRoZSBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgREVSLWVuY29kZWQgY2VydGlmaWNhdGVzLiBUaGUgcmV0dXJuZWQgbGlzdAorICAgZG9lcyBub3QgY29udGFpbiBjZXJ0aWZpY2F0ZXMgZnJvbSAqY2FwYXRoKiB1bmxlc3MgYSBjZXJ0aWZpY2F0ZSB3YXMKKyAgIHJlcXVlc3RlZCBhbmQgbG9hZGVkIGJ5IGEgU1NMIGNvbm5lY3Rpb24uCisKKyAgIC4uIG5vdGU6OgorICAgICAgQ2VydGlmaWNhdGVzIGluIGEgY2FwYXRoIGRpcmVjdG9yeSBhcmVuJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmUKKyAgICAgIGJlZW4gdXNlZCBhdCBsZWFzdCBvbmNlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQogCiAgICBMb2FkIGEgc2V0IG9mIGRlZmF1bHQgImNlcnRpZmljYXRpb24gYXV0aG9yaXR5IiAoQ0EpIGNlcnRpZmljYXRlcyBmcm9tCkBAIC04MDMsNiArMTE1MCw1NiBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhzZXJ2ZXJfbmFtZV9jYWxsYmFjaykKKworICAgUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSBUTFMgQ2xpZW50IEhlbGxvCisgICBoYW5kc2hha2UgbWVzc2FnZSBoYXMgYmVlbiByZWNlaXZlZCBieSB0aGUgU1NML1RMUyBzZXJ2ZXIgd2hlbiB0aGUgVExTIGNsaWVudAorICAgc3BlY2lmaWVzIGEgc2VydmVyIG5hbWUgaW5kaWNhdGlvbi4gVGhlIHNlcnZlciBuYW1lIGluZGljYXRpb24gbWVjaGFuaXNtCisgICBpcyBzcGVjaWZpZWQgaW4gOnJmYzpgNjA2NmAgc2VjdGlvbiAzIC0gU2VydmVyIE5hbWUgSW5kaWNhdGlvbi4KKworICAgT25seSBvbmUgY2FsbGJhY2sgY2FuIGJlIHNldCBwZXIgYGBTU0xDb250ZXh0YGAuICBJZiAqc2VydmVyX25hbWVfY2FsbGJhY2sqCisgICBpcyBgYE5vbmVgYCB0aGVuIHRoZSBjYWxsYmFjayBpcyBkaXNhYmxlZC4gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIGEKKyAgIHN1YnNlcXVlbnQgdGltZSB3aWxsIGRpc2FibGUgdGhlIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCBjYWxsYmFjay4KKworICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCAqc2VydmVyX25hbWVfY2FsbGJhY2sqLCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRocmVlCisgICBhcmd1bWVudHM7IHRoZSBmaXJzdCBiZWluZyB0aGUgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCwgdGhlIHNlY29uZCBpcyBhIHN0cmluZworICAgdGhhdCByZXByZXNlbnRzIHRoZSBzZXJ2ZXIgbmFtZSB0aGF0IHRoZSBjbGllbnQgaXMgaW50ZW5kaW5nIHRvIGNvbW11bmljYXRlCisgICAob3IgOmNvbnN0OmBOb25lYCBpZiB0aGUgVExTIENsaWVudCBIZWxsbyBkb2VzIG5vdCBjb250YWluIGEgc2VydmVyIG5hbWUpCisgICBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50IGlzIHRoZSBvcmlnaW5hbCA6Y2xhc3M6YFNTTENvbnRleHRgLiBUaGUgc2VydmVyIG5hbWUKKyAgIGFyZ3VtZW50IGlzIHRoZSBJRE5BIGRlY29kZWQgc2VydmVyIG5hbWUuCisKKyAgIEEgdHlwaWNhbCB1c2Ugb2YgdGhpcyBjYWxsYmFjayBpcyB0byBjaGFuZ2UgdGhlIDpjbGFzczpgc3NsLlNTTFNvY2tldGAncworICAgOmF0dHI6YFNTTFNvY2tldC5jb250ZXh0YCBhdHRyaWJ1dGUgdG8gYSBuZXcgb2JqZWN0IG9mIHR5cGUKKyAgIDpjbGFzczpgU1NMQ29udGV4dGAgcmVwcmVzZW50aW5nIGEgY2VydGlmaWNhdGUgY2hhaW4gdGhhdCBtYXRjaGVzIHRoZSBzZXJ2ZXIKKyAgIG5hbWUuCisKKyAgIER1ZSB0byB0aGUgZWFybHkgbmVnb3RpYXRpb24gcGhhc2Ugb2YgdGhlIFRMUyBjb25uZWN0aW9uLCBvbmx5IGxpbWl0ZWQKKyAgIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgYXJlIHVzYWJsZSBsaWtlCisgICA6bWV0aDpgU1NMU29ja2V0LnNlbGVjdGVkX25wbl9wcm90b2NvbGAgYW5kIDphdHRyOmBTU0xTb2NrZXQuY29udGV4dGAuCisgICA6bWV0aDpgU1NMU29ja2V0LmdldHBlZXJjZXJ0YCwgOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGAsCisgICA6bWV0aDpgU1NMU29ja2V0LmNpcGhlcmAgYW5kIDptZXRoOmBTU0xTb2NrZXQuY29tcHJlc3NgIG1ldGhvZHMgcmVxdWlyZSB0aGF0CisgICB0aGUgVExTIGNvbm5lY3Rpb24gaGFzIHByb2dyZXNzZWQgYmV5b25kIHRoZSBUTFMgQ2xpZW50IEhlbGxvIGFuZCB0aGVyZWZvcmUKKyAgIHdpbGwgbm90IGNvbnRhaW4gcmV0dXJuIG1lYW5pbmdmdWwgdmFsdWVzIG5vciBjYW4gdGhleSBiZSBjYWxsZWQgc2FmZWx5LgorCisgICBUaGUgKnNlcnZlcl9uYW1lX2NhbGxiYWNrKiBmdW5jdGlvbiBtdXN0IHJldHVybiBgYE5vbmVgYCB0byBhbGxvdyB0aGUKKyAgIFRMUyBuZWdvdGlhdGlvbiB0byBjb250aW51ZS4gIElmIGEgVExTIGZhaWx1cmUgaXMgcmVxdWlyZWQsIGEgY29uc3RhbnQKKyAgIDpjb25zdDpgQUxFUlRfREVTQ1JJUFRJT05fKiA8QUxFUlRfREVTQ1JJUFRJT05fSU5URVJOQUxfRVJST1I+YCBjYW4gYmUKKyAgIHJldHVybmVkLiAgT3RoZXIgcmV0dXJuIHZhbHVlcyB3aWxsIHJlc3VsdCBpbiBhIFRMUyBmYXRhbCBlcnJvciB3aXRoCisgICA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SYC4KKworICAgSWYgdGhlcmUgaXMgYW4gSUROQSBkZWNvZGluZyBlcnJvciBvbiB0aGUgc2VydmVyIG5hbWUsIHRoZSBUTFMgY29ubmVjdGlvbgorICAgd2lsbCB0ZXJtaW5hdGUgd2l0aCBhbiA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0lOVEVSTkFMX0VSUk9SYCBmYXRhbCBUTFMKKyAgIGFsZXJ0IG1lc3NhZ2UgdG8gdGhlIGNsaWVudC4KKworICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBmcm9tIHRoZSAqc2VydmVyX25hbWVfY2FsbGJhY2sqIGZ1bmN0aW9uIHRoZSBUTFMKKyAgIGNvbm5lY3Rpb24gd2lsbCB0ZXJtaW5hdGUgd2l0aCBhIGZhdGFsIFRMUyBhbGVydCBtZXNzYWdlCisgICA6Y29uc3Q6YEFMRVJUX0RFU0NSSVBUSU9OX0hBTkRTSEFLRV9GQUlMVVJFYC4KKworICAgVGhpcyBtZXRob2Qgd2lsbCByYWlzZSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYCBpZiB0aGUgT3BlblNTTCBsaWJyYXJ5CisgICBoYWQgT1BFTlNTTF9OT19UTFNFWFQgZGVmaW5lZCB3aGVuIGl0IHdhcyBidWlsdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIG1ldGhvZDo6IFNTTENvbnRleHQubG9hZF9kaF9wYXJhbXMoZGhmaWxlKQogCiAgICBMb2FkIHRoZSBrZXkgZ2VuZXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBEaWZmaWUtSGVsbWFuIChESCkga2V5IGV4Y2hhbmdlLgpAQCAtODUxLDExICsxMjQ4LDEyIEBACiAgICBPbiBjbGllbnQgY29ubmVjdGlvbnMsIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgKnNlcnZlcl9ob3N0bmFtZSogc3BlY2lmaWVzCiAgICB0aGUgaG9zdG5hbWUgb2YgdGhlIHNlcnZpY2Ugd2hpY2ggd2UgYXJlIGNvbm5lY3RpbmcgdG8uICBUaGlzIGFsbG93cyBhCiAgICBzaW5nbGUgc2VydmVyIHRvIGhvc3QgbXVsdGlwbGUgU1NMLWJhc2VkIHNlcnZpY2VzIHdpdGggZGlzdGluY3QgY2VydGlmaWNhdGVzLAotICAgcXVpdGUgc2ltaWxhcmx5IHRvIEhUVFAgdmlydHVhbCBob3N0cy4gIFNwZWNpZnlpbmcgKnNlcnZlcl9ob3N0bmFtZSoKLSAgIHdpbGwgcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpZiB0aGUgT3BlblNTTCBsaWJyYXJ5IGRvZXNuJ3QgaGF2ZSBzdXBwb3J0Ci0gICBmb3IgaXQgKHRoYXQgaXMsIGlmIDpkYXRhOmBIQVNfU05JYCBpcyA6Y29uc3Q6YEZhbHNlYCkuICBTcGVjaWZ5aW5nCi0gICAqc2VydmVyX2hvc3RuYW1lKiB3aWxsIGFsc28gcmFpc2UgYSA6ZXhjOmBWYWx1ZUVycm9yYCBpZiAqc2VydmVyX3NpZGUqCi0gICBpcyB0cnVlLgorICAgcXVpdGUgc2ltaWxhcmx5IHRvIEhUVFAgdmlydHVhbCBob3N0cy4gU3BlY2lmeWluZyAqc2VydmVyX2hvc3RuYW1lKiB3aWxsCisgICByYWlzZSBhIDpleGM6YFZhbHVlRXJyb3JgIGlmICpzZXJ2ZXJfc2lkZSogaXMgdHJ1ZS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuMworICAgICAgQWx3YXlzIGFsbG93IGEgc2VydmVyX2hvc3RuYW1lIHRvIGJlIHBhc3NlZCwgZXZlbiBpZiBPcGVuU1NMIGRvZXMgbm90CisgICAgICBoYXZlIFNOSS4KIAogLi4gbWV0aG9kOjogU1NMQ29udGV4dC5zZXNzaW9uX3N0YXRzKCkKIApAQCAtODY5LDYgKzEyNjcsMzMgQEAKICAgICAgID4+PiBzdGF0c1snaGl0cyddLCBzdGF0c1snbWlzc2VzJ10KICAgICAgICgwLCAwKQogCisuLiBhdHRyaWJ1dGU6OiBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lCisKKyAgIFdoZXRoZXIgdG8gbWF0Y2ggdGhlIHBlZXIgY2VydCdzIGhvc3RuYW1lIHdpdGggOmZ1bmM6YG1hdGNoX2hvc3RuYW1lYCBpbgorICAgOm1ldGg6YFNTTFNvY2tldC5kb19oYW5kc2hha2VgLiBUaGUgY29udGV4dCdzCisgICA6YXR0cjpgflNTTENvbnRleHQudmVyaWZ5X21vZGVgIG11c3QgYmUgc2V0IHRvIDpkYXRhOmBDRVJUX09QVElPTkFMYCBvcgorICAgOmRhdGE6YENFUlRfUkVRVUlSRURgLCBhbmQgeW91IG11c3QgcGFzcyAqc2VydmVyX2hvc3RuYW1lKiB0bworICAgOm1ldGg6YH5TU0xDb250ZXh0LndyYXBfc29ja2V0YCBpbiBvcmRlciB0byBtYXRjaCB0aGUgaG9zdG5hbWUuCisKKyAgIEV4YW1wbGU6OgorCisgICAgICBpbXBvcnQgc29ja2V0LCBzc2wKKworICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgY29udGV4dC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgIGNvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKCkKKworICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgIHNzbF9zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzLCBzZXJ2ZXJfaG9zdG5hbWU9J3d3dy52ZXJpc2lnbi5jb20nKQorICAgICAgc3NsX3NvY2suY29ubmVjdCgoJ3d3dy52ZXJpc2lnbi5jb20nLCA0NDMpKQorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworICAgLi4gbm90ZTo6CisKKyAgICAgVGhpcyBmZWF0dXJlcyByZXF1aXJlcyBPcGVuU1NMIDAuOS44ZiBvciBuZXdlci4KKwogLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC5vcHRpb25zCiAKICAgIEFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSBzZXQgb2YgU1NMIG9wdGlvbnMgZW5hYmxlZCBvbiB0aGlzIGNvbnRleHQuCkBAIC04ODUsNiArMTMxMCwxNSBAQAogICAgVGhlIHByb3RvY29sIHZlcnNpb24gY2hvc2VuIHdoZW4gY29uc3RydWN0aW5nIHRoZSBjb250ZXh0LiAgVGhpcyBhdHRyaWJ1dGUKICAgIGlzIHJlYWQtb25seS4KIAorLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3MKKworICAgVGhlIGZsYWdzIGZvciBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gb3BlcmF0aW9ucy4gWW91IGNhbiBzZXQgZmxhZ3MgbGlrZQorICAgOmRhdGE6YFZFUklGWV9DUkxfQ0hFQ0tfTEVBRmAgYnkgT1JpbmcgdGhlbSB0b2dldGhlci4gQnkgZGVmYXVsdCBPcGVuU1NMCisgICBkb2VzIG5laXRoZXIgcmVxdWlyZSBub3IgdmVyaWZ5IGNlcnRpZmljYXRlIHJldm9jYXRpb24gbGlzdHMgKENSTHMpLgorICAgQXZhaWxhYmxlIG9ubHkgd2l0aCBvcGVuc3NsIHZlcnNpb24gMC45LjgrLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gYXR0cmlidXRlOjogU1NMQ29udGV4dC52ZXJpZnlfbW9kZQogCiAgICBXaGV0aGVyIHRvIHRyeSB0byB2ZXJpZnkgb3RoZXIgcGVlcnMnIGNlcnRpZmljYXRlcyBhbmQgaG93IHRvIGJlaGF2ZQpAQCAtOTcwLDIwICsxNDA0LDkgQEAKIGNlcnRpZmljYXRlLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgIkNBIGNlcnRzIiBmaWxlLCBmaWxsZWQgd2l0aCB0aGUgY2VydGlmaWNhdGUKIGNoYWlucyBmb3IgZWFjaCBpc3N1ZXIgeW91IGFyZSB3aWxsaW5nIHRvIHRydXN0LiAgQWdhaW4sIHRoaXMgZmlsZSBqdXN0IGNvbnRhaW5zCiB0aGVzZSBjaGFpbnMgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyLiAgRm9yIHZhbGlkYXRpb24sIFB5dGhvbiB3aWxsIHVzZSB0aGUgZmlyc3QKLWNoYWluIGl0IGZpbmRzIGluIHRoZSBmaWxlIHdoaWNoIG1hdGNoZXMuICBTb21lICJzdGFuZGFyZCIgcm9vdCBjZXJ0aWZpY2F0ZXMgYXJlCi1hdmFpbGFibGUgZnJvbSB2YXJpb3VzIGNlcnRpZmljYXRpb24gYXV0aG9yaXRpZXM6IGBDQUNlcnQub3JnCi08aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0zPmBfLCBgVGhhd3RlCi08aHR0cDovL3d3dy50aGF3dGUuY29tL3Jvb3RzLz5gXywgYFZlcmlzaWduCi08aHR0cDovL3d3dy52ZXJpc2lnbi5jb20vc3VwcG9ydC9yb290cy5odG1sPmBfLCBgUG9zaXRpdmUgU1NMCi08aHR0cDovL3d3dy5Qb3NpdGl2ZVNTTC5jb20vc3NsLWNlcnRpZmljYXRlLXN1cHBvcnQvY2VydF9pbnN0YWxsYXRpb24vVVROLVVTRVJGaXJzdC1IYXJkd2FyZS5jcnQ+YF8KLSh1c2VkIGJ5IHB5dGhvbi5vcmcpLCBgRXF1aWZheCBhbmQgR2VvVHJ1c3QKLTxodHRwOi8vd3d3Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcm9vdF9jZXJ0aWZpY2F0ZXMvaW5kZXguYXNwPmBfLgotCi1JbiBnZW5lcmFsLCBpZiB5b3UgYXJlIHVzaW5nIFNTTDMgb3IgVExTMSwgeW91IGRvbid0IG5lZWQgdG8gcHV0IHRoZSBmdWxsIGNoYWluCi1pbiB5b3VyICJDQSBjZXJ0cyIgZmlsZTsgeW91IG9ubHkgbmVlZCB0aGUgcm9vdCBjZXJ0aWZpY2F0ZXMsIGFuZCB0aGUgcmVtb3RlCi1wZWVyIGlzIHN1cHBvc2VkIHRvIGZ1cm5pc2ggdGhlIG90aGVyIGNlcnRpZmljYXRlcyBuZWNlc3NhcnkgdG8gY2hhaW4gZnJvbSBpdHMKLWNlcnRpZmljYXRlIHRvIGEgcm9vdCBjZXJ0aWZpY2F0ZS4gIFNlZSA6cmZjOmA0MTU4YCBmb3IgbW9yZSBkaXNjdXNzaW9uIG9mIHRoZQotd2F5IGluIHdoaWNoIGNlcnRpZmljYXRpb24gY2hhaW5zIGNhbiBiZSBidWlsdC4KK2NoYWluIGl0IGZpbmRzIGluIHRoZSBmaWxlIHdoaWNoIG1hdGNoZXMuICBUaGUgcGxhdGZvcm0ncyBjZXJ0aWZpY2F0ZXMgZmlsZSBjYW4KK2JlIHVzZWQgYnkgY2FsbGluZyA6bWV0aDpgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNgLCB0aGlzIGlzIGRvbmUKK2F1dG9tYXRpY2FsbHkgd2l0aCA6ZnVuYzpgLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHRgLgogCiBDb21iaW5lZCBrZXkgYW5kIGNlcnRpZmljYXRlCiBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCkBAIC0xMDU3LDExOCArMTQ4MCwxMDAgQEAKIENsaWVudC1zaWRlIG9wZXJhdGlvbgogXl5eXl5eXl5eXl5eXl5eXl5eXl5eCiAKLVRoaXMgZXhhbXBsZSBjb25uZWN0cyB0byBhbiBTU0wgc2VydmVyIGFuZCBwcmludHMgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlOjoKK1RoaXMgZXhhbXBsZSBjcmVhdGVzIGEgU1NMIGNvbnRleHQgd2l0aCB0aGUgcmVjb21tZW5kZWQgc2VjdXJpdHkgc2V0dGluZ3MKK2ZvciBjbGllbnQgc29ja2V0cywgaW5jbHVkaW5nIGF1dG9tYXRpYyBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb246OgogCi0gICBpbXBvcnQgc29ja2V0LCBzc2wsIHBwcmludAorICAgPj4+IGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCiAKLSAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAjIHJlcXVpcmUgYSBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBzZXJ2ZXIKLSAgIHNzbF9zb2NrID0gc3NsLndyYXBfc29ja2V0KHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYV9jZXJ0cz0iL2V0Yy9jYV9jZXJ0c19maWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1zc2wuQ0VSVF9SRVFVSVJFRCkKLSAgIHNzbF9zb2NrLmNvbm5lY3QoKCd3d3cudmVyaXNpZ24uY29tJywgNDQzKSkKLQotICAgcHByaW50LnBwcmludChzc2xfc29jay5nZXRwZWVyY2VydCgpKQotICAgIyBub3RlIHRoYXQgY2xvc2luZyB0aGUgU1NMU29ja2V0IHdpbGwgYWxzbyBjbG9zZSB0aGUgdW5kZXJseWluZyBzb2NrZXQKLSAgIHNzbF9zb2NrLmNsb3NlKCkKLQotQXMgb2YgSmFudWFyeSA2LCAyMDEyLCB0aGUgY2VydGlmaWNhdGUgcHJpbnRlZCBieSB0aGlzIHByb2dyYW0gbG9va3MgbGlrZQotdGhpczo6Ci0KLSAgIHsnaXNzdWVyJzogKCgoJ2NvdW50cnlOYW1lJywgJ1VTJyksKSwKLSAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnVmVyaVNpZ24sIEluYy4nKSwpLAotICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uYWxVbml0TmFtZScsICdWZXJpU2lnbiBUcnVzdCBOZXR3b3JrJyksKSwKLSAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbmFsVW5pdE5hbWUnLAotICAgICAgICAgICAgICAgICAnVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDYnKSwpLAotICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsCi0gICAgICAgICAgICAgICAgICdWZXJpU2lnbiBDbGFzcyAzIEV4dGVuZGVkIFZhbGlkYXRpb24gU1NMIFNHQyBDQScpLCkpLAotICAgICdub3RBZnRlcic6ICdNYXkgMjUgMjM6NTk6NTkgMjAxMiBHTVQnLAotICAgICdub3RCZWZvcmUnOiAnTWF5IDI2IDAwOjAwOjAwIDIwMTAgR01UJywKLSAgICAnc2VyaWFsTnVtYmVyJzogJzUzRDJCRUY5MjRBNzI0NUU4M0NBMDFFNDZDQUEyNDc3JywKLSAgICAnc3ViamVjdCc6ICgoKCcxLjMuNi4xLjQuMS4zMTEuNjAuMi4xLjMnLCAnVVMnKSwpLAotICAgICAgICAgICAgICAgICgoJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMicsICdEZWxhd2FyZScpLCksCi0gICAgICAgICAgICAgICAgKCgnYnVzaW5lc3NDYXRlZ29yeScsICdWMS4wLCBDbGF1c2UgNS4oYiknKSwpLAotICAgICAgICAgICAgICAgICgoJ3NlcmlhbE51bWJlcicsICcyNDk3ODg2JyksKSwKLSAgICAgICAgICAgICAgICAoKCdjb3VudHJ5TmFtZScsICdVUycpLCksCi0gICAgICAgICAgICAgICAgKCgncG9zdGFsQ29kZScsICc5NDA0MycpLCksCi0gICAgICAgICAgICAgICAgKCgnc3RhdGVPclByb3ZpbmNlTmFtZScsICdDYWxpZm9ybmlhJyksKSwKLSAgICAgICAgICAgICAgICAoKCdsb2NhbGl0eU5hbWUnLCAnTW91bnRhaW4gVmlldycpLCksCi0gICAgICAgICAgICAgICAgKCgnc3RyZWV0QWRkcmVzcycsICc0ODcgRWFzdCBNaWRkbGVmaWVsZCBSb2FkJyksKSwKLSAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ1ZlcmlTaWduLCBJbmMuJyksKSwKLSAgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJyBQcm9kdWN0aW9uIFNlY3VyaXR5IFNlcnZpY2VzJyksKSwKLSAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ3d3dy52ZXJpc2lnbi5jb20nKSwpKSwKLSAgICAnc3ViamVjdEFsdE5hbWUnOiAoKCdETlMnLCAnd3d3LnZlcmlzaWduLmNvbScpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICd2ZXJpc2lnbi5jb20nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnd3d3LnZlcmlzaWduLm5ldCcpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICd2ZXJpc2lnbi5uZXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnd3d3LnZlcmlzaWduLm1vYmknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAndmVyaXNpZ24ubW9iaScpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICd3d3cudmVyaXNpZ24uZXUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAndmVyaXNpZ24uZXUnKSksCi0gICAgJ3ZlcnNpb24nOiAzfQotCi1UaGlzIG90aGVyIGV4YW1wbGUgZmlyc3QgY3JlYXRlcyBhbiBTU0wgY29udGV4dCwgaW5zdHJ1Y3RzIGl0IHRvIHZlcmlmeQotY2VydGlmaWNhdGVzIHNlbnQgYnkgcGVlcnMsIGFuZCBmZWVkcyBpdCBhIHNldCBvZiByZWNvZ25pemVkIGNlcnRpZmljYXRlCi1hdXRob3JpdGllcyAoQ0EpOjoKK0lmIHlvdSBwcmVmZXIgdG8gdHVuZSBzZWN1cml0eSBzZXR0aW5ncyB5b3Vyc2VsZiwgeW91IG1pZ2h0IGNyZWF0ZQorYSBjb250ZXh0IGZyb20gc2NyYXRjaCAoYnV0IGJld2FyZSB0aGF0IHlvdSBtaWdodCBub3QgZ2V0IHRoZSBzZXR0aW5ncworcmlnaHQpOjoKIAogICAgPj4+IGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgPj4+IGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgPj4+IGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCiAgICA+Pj4gY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoIi9ldGMvc3NsL2NlcnRzL2NhLWJ1bmRsZS5jcnQiKQogCi0oaXQgaXMgYXNzdW1lZCB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gcGxhY2VzIGEgYnVuZGxlIG9mIGFsbCBDQSBjZXJ0aWZpY2F0ZXMKLWluIGBgL2V0Yy9zc2wvY2VydHMvY2EtYnVuZGxlLmNydGBgOyBpZiBub3QsIHlvdSdsbCBnZXQgYW4gZXJyb3IgYW5kIGhhdmUKLXRvIGFkanVzdCB0aGUgbG9jYXRpb24pCisodGhpcyBzbmlwcGV0IGFzc3VtZXMgeW91ciBvcGVyYXRpbmcgc3lzdGVtIHBsYWNlcyBhIGJ1bmRsZSBvZiBhbGwgQ0EKK2NlcnRpZmljYXRlcyBpbiBgYC9ldGMvc3NsL2NlcnRzL2NhLWJ1bmRsZS5jcnRgYDsgaWYgbm90LCB5b3UnbGwgZ2V0IGFuCitlcnJvciBhbmQgaGF2ZSB0byBhZGp1c3QgdGhlIGxvY2F0aW9uKQogCiBXaGVuIHlvdSB1c2UgdGhlIGNvbnRleHQgdG8gY29ubmVjdCB0byBhIHNlcnZlciwgOmNvbnN0OmBDRVJUX1JFUVVJUkVEYAogdmFsaWRhdGVzIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGU6IGl0IGVuc3VyZXMgdGhhdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlCiB3YXMgc2lnbmVkIHdpdGggb25lIG9mIHRoZSBDQSBjZXJ0aWZpY2F0ZXMsIGFuZCBjaGVja3MgdGhlIHNpZ25hdHVyZSBmb3IKIGNvcnJlY3RuZXNzOjoKIAotICAgPj4+IGNvbm4gPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKQotICAgPj4+IGNvbm4uY29ubmVjdCgoImxpbnV4ZnIub3JnIiwgNDQzKSkKKyAgID4+PiBjb25uID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKKyAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9Ind3dy5weXRob24ub3JnIikKKyAgID4+PiBjb25uLmNvbm5lY3QoKCJ3d3cucHl0aG9uLm9yZyIsIDQ0MykpCiAKLVlvdSBzaG91bGQgdGhlbiBmZXRjaCB0aGUgY2VydGlmaWNhdGUgYW5kIGNoZWNrIGl0cyBmaWVsZHMgZm9yIGNvbmZvcm1pdHk6OgorWW91IG1heSB0aGVuIGZldGNoIHRoZSBjZXJ0aWZpY2F0ZTo6CiAKICAgID4+PiBjZXJ0ID0gY29ubi5nZXRwZWVyY2VydCgpCi0gICA+Pj4gc3NsLm1hdGNoX2hvc3RuYW1lKGNlcnQsICJsaW51eGZyLm9yZyIpCiAKIFZpc3VhbCBpbnNwZWN0aW9uIHNob3dzIHRoYXQgdGhlIGNlcnRpZmljYXRlIGRvZXMgaWRlbnRpZnkgdGhlIGRlc2lyZWQgc2VydmljZQotKHRoYXQgaXMsIHRoZSBIVFRQUyBob3N0IGBgbGludXhmci5vcmdgYCk6OgorKHRoYXQgaXMsIHRoZSBIVFRQUyBob3N0IGBgd3d3LnB5dGhvbi5vcmdgYCk6OgogCiAgICA+Pj4gcHByaW50LnBwcmludChjZXJ0KQotICAgeydpc3N1ZXInOiAoKCgnb3JnYW5pemF0aW9uTmFtZScsICdDQWNlcnQgSW5jLicpLCksCi0gICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ2h0dHA6Ly93d3cuQ0FjZXJ0Lm9yZycpLCksCi0gICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ0NBY2VydCBDbGFzcyAzIFJvb3QnKSwpKSwKLSAgICAnbm90QWZ0ZXInOiAnSnVuICA3IDIxOjAyOjI0IDIwMTMgR01UJywKLSAgICAnbm90QmVmb3JlJzogJ0p1biAgOCAyMTowMjoyNCAyMDExIEdNVCcsCi0gICAgJ3NlcmlhbE51bWJlcic6ICdEM0U5JywKLSAgICAnc3ViamVjdCc6ICgoKCdjb21tb25OYW1lJywgJ2xpbnV4ZnIub3JnJyksKSwpLAotICAgICdzdWJqZWN0QWx0TmFtZSc6ICgoJ0ROUycsICdsaW51eGZyLm9yZycpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ290aGVybmFtZScsICc8dW5zdXBwb3J0ZWQ+JyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ2xpbnV4ZnIub3JnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnb3RoZXJuYW1lJywgJzx1bnN1cHBvcnRlZD4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnZGV2LmxpbnV4ZnIub3JnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnb3RoZXJuYW1lJywgJzx1bnN1cHBvcnRlZD4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHJvZC5saW51eGZyLm9yZycpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ290aGVybmFtZScsICc8dW5zdXBwb3J0ZWQ+JyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ2FscGhhLmxpbnV4ZnIub3JnJyksCi0gICAgICAgICAgICAgICAgICAgICAgICgnb3RoZXJuYW1lJywgJzx1bnN1cHBvcnRlZD4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnKi5saW51eGZyLm9yZycpLAotICAgICAgICAgICAgICAgICAgICAgICAoJ290aGVybmFtZScsICc8dW5zdXBwb3J0ZWQ+JykpLAorICAgeydPQ1NQJzogKCdodHRwOi8vb2NzcC5kaWdpY2VydC5jb20nLCksCisgICAgJ2NhSXNzdWVycyc6ICgnaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkV4dGVuZGVkVmFsaWRhdGlvblNlcnZlckNBLmNydCcsKSwKKyAgICAnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJzogKCdodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vc2hhMi1ldi1zZXJ2ZXItZzEuY3JsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vc2hhMi1ldi1zZXJ2ZXItZzEuY3JsJyksCisgICAgJ2lzc3Vlcic6ICgoKCdjb3VudHJ5TmFtZScsICdVUycpLCksCisgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25OYW1lJywgJ0RpZ2lDZXJ0IEluYycpLCksCisgICAgICAgICAgICAgICAoKCdvcmdhbml6YXRpb25hbFVuaXROYW1lJywgJ3d3dy5kaWdpY2VydC5jb20nKSwpLAorICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdEaWdpQ2VydCBTSEEyIEV4dGVuZGVkIFZhbGlkYXRpb24gU2VydmVyIENBJyksKSksCisgICAgJ25vdEFmdGVyJzogJ1NlcCAgOSAxMjowMDowMCAyMDE2IEdNVCcsCisgICAgJ25vdEJlZm9yZSc6ICdTZXAgIDUgMDA6MDA6MDAgMjAxNCBHTVQnLAorICAgICdzZXJpYWxOdW1iZXInOiAnMDFCQjZGMDAxMjJCMTc3RjM2Q0FCNDlDRUE4QjZCMjYnLAorICAgICdzdWJqZWN0JzogKCgoJ2J1c2luZXNzQ2F0ZWdvcnknLCAnUHJpdmF0ZSBPcmdhbml6YXRpb24nKSwpLAorICAgICAgICAgICAgICAgICgoJzEuMy42LjEuNC4xLjMxMS42MC4yLjEuMycsICdVUycpLCksCisgICAgICAgICAgICAgICAgKCgnMS4zLjYuMS40LjEuMzExLjYwLjIuMS4yJywgJ0RlbGF3YXJlJyksKSwKKyAgICAgICAgICAgICAgICAoKCdzZXJpYWxOdW1iZXInLCAnMzM1OTMwMCcpLCksCisgICAgICAgICAgICAgICAgKCgnc3RyZWV0QWRkcmVzcycsICcxNiBBbGxlbiBSZCcpLCksCisgICAgICAgICAgICAgICAgKCgncG9zdGFsQ29kZScsICcwMzg5NC00ODAxJyksKSwKKyAgICAgICAgICAgICAgICAoKCdjb3VudHJ5TmFtZScsICdVUycpLCksCisgICAgICAgICAgICAgICAgKCgnc3RhdGVPclByb3ZpbmNlTmFtZScsICdOSCcpLCksCisgICAgICAgICAgICAgICAgKCgnbG9jYWxpdHlOYW1lJywgJ1dvbGZlYm9ybywnKSwpLAorICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nKSwpLAorICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnd3d3LnB5dGhvbi5vcmcnKSwpKSwKKyAgICAnc3ViamVjdEFsdE5hbWUnOiAoKCdETlMnLCAnd3d3LnB5dGhvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAncHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdweXBpLnB5dGhvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnZG9jcy5weXRob24ub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3Rlc3RweXBpLnB5dGhvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnYnVncy5weXRob24ub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3dpa2kucHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdoZy5weXRob24ub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ21haWwucHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdwYWNrYWdpbmcucHl0aG9uLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdweXRob25ob3N0ZWQub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3d3dy5weXRob25ob3N0ZWQub3JnJyksCisgICAgICAgICAgICAgICAgICAgICAgICgnRE5TJywgJ3Rlc3QucHl0aG9uaG9zdGVkLm9yZycpLAorICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICd1cy5weWNvbi5vcmcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKCdETlMnLCAnaWQucHl0aG9uLm9yZycpKSwKICAgICAndmVyc2lvbic6IDN9CiAKLU5vdyB0aGF0IHlvdSBhcmUgYXNzdXJlZCBvZiBpdHMgYXV0aGVudGljaXR5LCB5b3UgY2FuIHByb2NlZWQgdG8gdGFsayB3aXRoCi10aGUgc2VydmVyOjoKK05vdyB0aGUgU1NMIGNoYW5uZWwgaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBjZXJ0aWZpY2F0ZSB2ZXJpZmllZCwgeW91IGNhbgorcHJvY2VlZCB0byB0YWxrIHdpdGggdGhlIHNlcnZlcjo6CiAKICAgID4+PiBjb25uLnNlbmRhbGwoYiJIRUFEIC8gSFRUUC8xLjBcclxuSG9zdDogbGludXhmci5vcmdcclxuXHJcbiIpCiAgICA+Pj4gcHByaW50LnBwcmludChjb25uLnJlY3YoMTAyNCkuc3BsaXQoYiJcclxuIikpCi0gICBbYidIVFRQLzEuMSAzMDIgRm91bmQnLAotICAgIGInRGF0ZTogU3VuLCAxNiBNYXkgMjAxMCAxMzo0MzoyOCBHTVQnLAotICAgIGInU2VydmVyOiBBcGFjaGUvMi4yJywKLSAgICBiJ0xvY2F0aW9uOiBodHRwczovL2xpbnV4ZnIub3JnL3B1Yi8nLAotICAgIGInVmFyeTogQWNjZXB0LUVuY29kaW5nJywKKyAgIFtiJ0hUVFAvMS4xIDIwMCBPSycsCisgICAgYidEYXRlOiBTYXQsIDE4IE9jdCAyMDE0IDE4OjI3OjIwIEdNVCcsCisgICAgYidTZXJ2ZXI6IG5naW54JywKKyAgICBiJ0NvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04JywKKyAgICBiJ1gtRnJhbWUtT3B0aW9uczogU0FNRU9SSUdJTicsCisgICAgYidDb250ZW50LUxlbmd0aDogNDU2NzknLAorICAgIGInQWNjZXB0LVJhbmdlczogYnl0ZXMnLAorICAgIGInVmlhOiAxLjEgdmFybmlzaCcsCisgICAgYidBZ2U6IDIxODgnLAorICAgIGInWC1TZXJ2ZWQtQnk6IGNhY2hlLWxjeTExMzQtTENZJywKKyAgICBiJ1gtQ2FjaGU6IEhJVCcsCisgICAgYidYLUNhY2hlLUhpdHM6IDExJywKKyAgICBiJ1Zhcnk6IENvb2tpZScsCisgICAgYidTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5OiBtYXgtYWdlPTYzMDcyMDAwOyBpbmNsdWRlU3ViRG9tYWlucycsCiAgICAgYidDb25uZWN0aW9uOiBjbG9zZScsCi0gICAgYidDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD1pc28tODg1OS0xJywKICAgICBiJycsCiAgICAgYicnXQogCkBAIC0xMTg2LDcgKzE1OTEsNyBAQAogCiAgICBpbXBvcnQgc29ja2V0LCBzc2wKIAotICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChzc2wuUHVycG9zZS5DTElFTlRfQVVUSCkKICAgIGNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlPSJteWNlcnRmaWxlIiwga2V5ZmlsZT0ibXlrZXlmaWxlIikKIAogICAgYmluZHNvY2tldCA9IHNvY2tldC5zb2NrZXQoKQpAQCAtMTIzMCw4ICsxNjM1LDE5IEBACiBOb3RlcyBvbiBub24tYmxvY2tpbmcgc29ja2V0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hlbiB3b3JraW5nIHdpdGggbm9uLWJsb2NraW5nIHNvY2tldHMsIHRoZXJlIGFyZSBzZXZlcmFsIHRoaW5ncyB5b3UgbmVlZAotdG8gYmUgYXdhcmUgb2Y6CitTU0wgc29ja2V0cyBiZWhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gcmVndWxhciBzb2NrZXRzIGluCitub24tYmxvY2tpbmcgbW9kZS4gV2hlbiB3b3JraW5nIHdpdGggbm9uLWJsb2NraW5nIHNvY2tldHMsIHRoZXJlIGFyZQordGh1cyBzZXZlcmFsIHRoaW5ncyB5b3UgbmVlZCB0byBiZSBhd2FyZSBvZjoKKworLSBNb3N0IDpjbGFzczpgU1NMU29ja2V0YCBtZXRob2RzIHdpbGwgcmFpc2UgZWl0aGVyCisgIDpleGM6YFNTTFdhbnRXcml0ZUVycm9yYCBvciA6ZXhjOmBTU0xXYW50UmVhZEVycm9yYCBpbnN0ZWFkIG9mCisgIDpleGM6YEJsb2NraW5nSU9FcnJvcmAgaWYgYW4gSS9PIG9wZXJhdGlvbiB3b3VsZAorICBibG9jay4gOmV4YzpgU1NMV2FudFJlYWRFcnJvcmAgd2lsbCBiZSByYWlzZWQgaWYgYSByZWFkIG9wZXJhdGlvbiBvbgorICB0aGUgdW5kZXJseWluZyBzb2NrZXQgaXMgbmVjZXNzYXJ5LCBhbmQgOmV4YzpgU1NMV2FudFdyaXRlRXJyb3JgIGZvcgorICBhIHdyaXRlIG9wZXJhdGlvbiBvbiB0aGUgdW5kZXJseWluZyBzb2NrZXQuIE5vdGUgdGhhdCBhdHRlbXB0cyB0bworICAqd3JpdGUqIHRvIGFuIFNTTCBzb2NrZXQgbWF5IHJlcXVpcmUgKnJlYWRpbmcqIGZyb20gdGhlIHVuZGVybHlpbmcKKyAgc29ja2V0IGZpcnN0LCBhbmQgYXR0ZW1wdHMgdG8gKnJlYWQqIGZyb20gdGhlIFNTTCBzb2NrZXQgbWF5IHJlcXVpcmUKKyAgYSBwcmlvciAqd3JpdGUqIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldC4KIAogLSBDYWxsaW5nIDpmdW5jOmB+c2VsZWN0LnNlbGVjdGAgdGVsbHMgeW91IHRoYXQgdGhlIE9TLWxldmVsIHNvY2tldCBjYW4gYmUKICAgcmVhZCBmcm9tIChvciB3cml0dGVuIHRvKSwgYnV0IGl0IGRvZXMgbm90IGltcGx5IHRoYXQgdGhlcmUgaXMgc3VmZmljaWVudApAQCAtMTI0MCw4ICsxNjU2LDE0IEBACiAgIGFuZCA6bWV0aDpgU1NMU29ja2V0LnNlbmRgIGZhaWx1cmVzLCBhbmQgcmV0cnkgYWZ0ZXIgYW5vdGhlciBjYWxsIHRvCiAgIDpmdW5jOmB+c2VsZWN0LnNlbGVjdGAuCiAKKy0gQ29udmVyc2VseSwgc2luY2UgdGhlIFNTTCBsYXllciBoYXMgaXRzIG93biBmcmFtaW5nLCBhIFNTTCBzb2NrZXQgbWF5CisgIHN0aWxsIGhhdmUgZGF0YSBhdmFpbGFibGUgZm9yIHJlYWRpbmcgd2l0aG91dCA6ZnVuYzpgfnNlbGVjdC5zZWxlY3RgCisgIGJlaW5nIGF3YXJlIG9mIGl0LiAgVGhlcmVmb3JlLCB5b3Ugc2hvdWxkIGZpcnN0IGNhbGwKKyAgOm1ldGg6YFNTTFNvY2tldC5yZWN2YCB0byBkcmFpbiBhbnkgcG90ZW50aWFsbHkgYXZhaWxhYmxlIGRhdGEsIGFuZCB0aGVuCisgIG9ubHkgYmxvY2sgb24gYSA6ZnVuYzpgfnNlbGVjdC5zZWxlY3RgIGNhbGwgaWYgc3RpbGwgbmVjZXNzYXJ5LgorCiAgIChvZiBjb3Vyc2UsIHNpbWlsYXIgcHJvdmlzaW9ucyBhcHBseSB3aGVuIHVzaW5nIG90aGVyIHByaW1pdGl2ZXMgc3VjaCBhcwotICA6ZnVuYzpgfnNlbGVjdC5wb2xsYCkKKyAgOmZ1bmM6YH5zZWxlY3QucG9sbGAsIG9yIHRob3NlIGluIHRoZSA6bW9kOmBzZWxlY3RvcnNgIG1vZHVsZSkKIAogLSBUaGUgU1NMIGhhbmRzaGFrZSBpdHNlbGYgd2lsbCBiZSBub24tYmxvY2tpbmc6IHRoZQogICA6bWV0aDpgU1NMU29ja2V0LmRvX2hhbmRzaGFrZWAgbWV0aG9kIGhhcyB0byBiZSByZXRyaWVkIHVudGlsIGl0IHJldHVybnMKQEAgLTEyNTcsMTUgKzE2NzksNTQgQEAKICAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50V3JpdGVFcnJvcjoKICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW10sIFtzb2NrXSwgW10pCiAKKy4uIHNlZWFsc286OgorCisgICBUaGUgOm1vZDpgYXN5bmNpb2AgbW9kdWxlIHN1cHBvcnRzIG5vbi1ibG9ja2luZyBTU0wgc29ja2V0cyBhbmQgcHJvdmlkZXMgYQorICAgaGlnaGVyIGxldmVsIEFQSS4gSXQgcG9sbHMgZm9yIGV2ZW50cyB1c2luZyB0aGUgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgYW5kCisgICBoYW5kbGVzIDpleGM6YFNTTFdhbnRXcml0ZUVycm9yYCwgOmV4YzpgU1NMV2FudFJlYWRFcnJvcmAgYW5kCisgICA6ZXhjOmBCbG9ja2luZ0lPRXJyb3JgIGV4Y2VwdGlvbnMuIEl0IHJ1bnMgdGhlIFNTTCBoYW5kc2hha2UgYXN5bmNocm9ub3VzbHkKKyAgIGFzIHdlbGwuCisKIAogLi4gX3NzbC1zZWN1cml0eToKIAogU2VjdXJpdHkgY29uc2lkZXJhdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVZlcmlmeWluZyBjZXJ0aWZpY2F0ZXMKLV5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KK0Jlc3QgZGVmYXVsdHMKK15eXl5eXl5eXl5eXl4KIAorRm9yICoqY2xpZW50IHVzZSoqLCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbnkgc3BlY2lhbCByZXF1aXJlbWVudHMgZm9yIHlvdXIKK3NlY3VyaXR5IHBvbGljeSwgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IHVzZSB0aGUKKzpmdW5jOmBjcmVhdGVfZGVmYXVsdF9jb250ZXh0YCBmdW5jdGlvbiB0byBjcmVhdGUgeW91ciBTU0wgY29udGV4dC4KK0l0IHdpbGwgbG9hZCB0aGUgc3lzdGVtJ3MgdHJ1c3RlZCBDQSBjZXJ0aWZpY2F0ZXMsIGVuYWJsZSBjZXJ0aWZpY2F0ZQordmFsaWRhdGlvbiBhbmQgaG9zdG5hbWUgY2hlY2tpbmcsIGFuZCB0cnkgdG8gY2hvb3NlIHJlYXNvbmFibHkgc2VjdXJlCitwcm90b2NvbCBhbmQgY2lwaGVyIHNldHRpbmdzLgorCitGb3IgZXhhbXBsZSwgaGVyZSBpcyBob3cgeW91IHdvdWxkIHVzZSB0aGUgOmNsYXNzOmBzbXRwbGliLlNNVFBgIGNsYXNzIHRvCitjcmVhdGUgYSB0cnVzdGVkLCBzZWN1cmUgY29ubmVjdGlvbiB0byBhIFNNVFAgc2VydmVyOjoKKworICAgPj4+IGltcG9ydCBzc2wsIHNtdHBsaWIKKyAgID4+PiBzbXRwID0gc210cGxpYi5TTVRQKCJtYWlsLnB5dGhvbi5vcmciLCBwb3J0PTU4NykKKyAgID4+PiBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKQorICAgPj4+IHNtdHAuc3RhcnR0bHMoY29udGV4dD1jb250ZXh0KQorICAgKDIyMCwgYicyLjAuMCBSZWFkeSB0byBzdGFydCBUTFMnKQorCitJZiBhIGNsaWVudCBjZXJ0aWZpY2F0ZSBpcyBuZWVkZWQgZm9yIHRoZSBjb25uZWN0aW9uLCBpdCBjYW4gYmUgYWRkZWQgd2l0aAorOm1ldGg6YFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluYC4KKworQnkgY29udHJhc3QsIGlmIHlvdSBjcmVhdGUgdGhlIFNTTCBjb250ZXh0IGJ5IGNhbGxpbmcgdGhlIDpjbGFzczpgU1NMQ29udGV4dGAKK2NvbnN0cnVjdG9yIHlvdXJzZWxmLCBpdCB3aWxsIG5vdCBoYXZlIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gbm9yIGhvc3RuYW1lCitjaGVja2luZyBlbmFibGVkIGJ5IGRlZmF1bHQuICBJZiB5b3UgZG8gc28sIHBsZWFzZSByZWFkIHRoZSBwYXJhZ3JhcGhzIGJlbG93Cit0byBhY2hpZXZlIGEgZ29vZCBzZWN1cml0eSBsZXZlbC4KKworTWFudWFsIHNldHRpbmdzCiteXl5eXl5eXl5eXl5eXl4KKworVmVyaWZ5aW5nIGNlcnRpZmljYXRlcworJycnJycnJycnJycnJycnJycnJycnJworCitXaGVuIGNhbGxpbmcgdGhlIDpjbGFzczpgU1NMQ29udGV4dGAgY29uc3RydWN0b3IgZGlyZWN0bHksCiA6Y29uc3Q6YENFUlRfTk9ORWAgaXMgdGhlIGRlZmF1bHQuICBTaW5jZSBpdCBkb2VzIG5vdCBhdXRoZW50aWNhdGUgdGhlIG90aGVyCiBwZWVyLCBpdCBjYW4gYmUgaW5zZWN1cmUsIGVzcGVjaWFsbHkgaW4gY2xpZW50IG1vZGUgd2hlcmUgbW9zdCBvZiB0aW1lIHlvdQogd291bGQgbGlrZSB0byBlbnN1cmUgdGhlIGF1dGhlbnRpY2l0eSBvZiB0aGUgc2VydmVyIHlvdSdyZSB0YWxraW5nIHRvLgpAQCAtMTI3NCw3ICsxNzM1LDkgQEAKIGhhdmUgdG8gY2hlY2sgdGhhdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlLCB3aGljaCBjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZwogOm1ldGg6YFNTTFNvY2tldC5nZXRwZWVyY2VydGAsIG1hdGNoZXMgdGhlIGRlc2lyZWQgc2VydmljZS4gIEZvciBtYW55CiBwcm90b2NvbHMgYW5kIGFwcGxpY2F0aW9ucywgdGhlIHNlcnZpY2UgY2FuIGJlIGlkZW50aWZpZWQgYnkgdGhlIGhvc3RuYW1lOwotaW4gdGhpcyBjYXNlLCB0aGUgOmZ1bmM6YG1hdGNoX2hvc3RuYW1lYCBmdW5jdGlvbiBjYW4gYmUgdXNlZC4KK2luIHRoaXMgY2FzZSwgdGhlIDpmdW5jOmBtYXRjaF9ob3N0bmFtZWAgZnVuY3Rpb24gY2FuIGJlIHVzZWQuICBUaGlzIGNvbW1vbgorY2hlY2sgaXMgYXV0b21hdGljYWxseSBwZXJmb3JtZWQgd2hlbiA6YXR0cjpgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZWAgaXMKK2VuYWJsZWQuCiAKIEluIHNlcnZlciBtb2RlLCBpZiB5b3Ugd2FudCB0byBhdXRoZW50aWNhdGUgeW91ciBjbGllbnRzIHVzaW5nIHRoZSBTU0wgbGF5ZXIKIChyYXRoZXIgdGhhbiB1c2luZyBhIGhpZ2hlci1sZXZlbCBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc20pLCB5b3UnbGwgYWxzbyBoYXZlCkBAIC0xMjg3LDM3ICsxNzUwLDMyIEBACiAgICAgICBieSBkZWZhdWx0KS4KIAogUHJvdG9jb2wgdmVyc2lvbnMKLV5eXl5eXl5eXl5eXl5eXl5eCisnJycnJycnJycnJycnJycnJwogCi1TU0wgdmVyc2lvbiAyIGlzIGNvbnNpZGVyZWQgaW5zZWN1cmUgYW5kIGlzIHRoZXJlZm9yZSBkYW5nZXJvdXMgdG8gdXNlLiAgSWYKLXlvdSB3YW50IG1heGltdW0gY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGNsaWVudHMgYW5kIHNlcnZlcnMsIGl0IGlzIHJlY29tbWVuZGVkCi10byB1c2UgOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgIGFzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGFuZCB0aGVuIGRpc2FibGUKLVNTTHYyIGV4cGxpY2l0bHkgdXNpbmcgdGhlIDpkYXRhOmBTU0xDb250ZXh0Lm9wdGlvbnNgIGF0dHJpYnV0ZTo6CitTU0wgdmVyc2lvbnMgMiBhbmQgMyBhcmUgY29uc2lkZXJlZCBpbnNlY3VyZSBhbmQgYXJlIHRoZXJlZm9yZSBkYW5nZXJvdXMgdG8KK3VzZS4gIElmIHlvdSB3YW50IG1heGltdW0gY29tcGF0aWJpbGl0eSBiZXR3ZWVuIGNsaWVudHMgYW5kIHNlcnZlcnMsIGl0IGlzCityZWNvbW1lbmRlZCB0byB1c2UgOmNvbnN0OmBQUk9UT0NPTF9TU0x2MjNgIGFzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIGFuZCB0aGVuCitkaXNhYmxlIFNTTHYyIGFuZCBTU0x2MyBleHBsaWNpdGx5IHVzaW5nIHRoZSA6ZGF0YTpgU1NMQ29udGV4dC5vcHRpb25zYAorYXR0cmlidXRlOjoKIAogICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCiAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYzCiAKLVRoZSBTU0wgY29udGV4dCBjcmVhdGVkIGFib3ZlIHdpbGwgYWxsb3cgU1NMdjMgYW5kIFRMU3YxIGNvbm5lY3Rpb25zLCBidXQKLW5vdCBTU0x2Mi4KK1RoZSBTU0wgY29udGV4dCBjcmVhdGVkIGFib3ZlIHdpbGwgb25seSBhbGxvdyBUTFN2MSBhbmQgbGF0ZXIgKGlmCitzdXBwb3J0ZWQgYnkgeW91ciBzeXN0ZW0pIGNvbm5lY3Rpb25zLgogCiBDaXBoZXIgc2VsZWN0aW9uCi1eXl5eXl5eXl5eXl5eXl5eCisnJycnJycnJycnJycnJycnCiAKIElmIHlvdSBoYXZlIGFkdmFuY2VkIHNlY3VyaXR5IHJlcXVpcmVtZW50cywgZmluZS10dW5pbmcgb2YgdGhlIGNpcGhlcnMKIGVuYWJsZWQgd2hlbiBuZWdvdGlhdGluZyBhIFNTTCBzZXNzaW9uIGlzIHBvc3NpYmxlIHRocm91Z2ggdGhlCiA6bWV0aDpgU1NMQ29udGV4dC5zZXRfY2lwaGVyc2AgbWV0aG9kLiAgU3RhcnRpbmcgZnJvbSBQeXRob24gMy4yLjMsIHRoZQogc3NsIG1vZHVsZSBkaXNhYmxlcyBjZXJ0YWluIHdlYWsgY2lwaGVycyBieSBkZWZhdWx0LCBidXQgeW91IG1heSB3YW50Ci10byBmdXJ0aGVyIHJlc3RyaWN0IHRoZSBjaXBoZXIgY2hvaWNlLiAgRm9yIGV4YW1wbGU6OgotCi0gICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQotICAgY29udGV4dC5zZXRfY2lwaGVycygnSElHSDohYU5VTEw6IWVOVUxMJykKLQotVGhlIGBgIWFOVUxMOiFlTlVMTGBgIHBhcnQgb2YgdGhlIGNpcGhlciBzcGVjIGlzIG5lY2Vzc2FyeSB0byBkaXNhYmxlIGNpcGhlcnMKLXdoaWNoIGRvbid0IHByb3ZpZGUgYm90aCBlbmNyeXB0aW9uIGFuZCBhdXRoZW50aWNhdGlvbi4gIEJlIHN1cmUgdG8gcmVhZAotT3BlblNTTCdzIGRvY3VtZW50YXRpb24gYWJvdXQgdGhlIGBjaXBoZXIgbGlzdAotZm9ybWF0IDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWwjQ0lQSEVSX0xJU1RfRk9STUFUPmBfLgotSWYgeW91IHdhbnQgdG8gY2hlY2sgd2hpY2ggY2lwaGVycyBhcmUgZW5hYmxlZCBieSBhIGdpdmVuIGNpcGhlciBsaXN0LAotdXNlIHRoZSBgYG9wZW5zc2wgY2lwaGVyc2BgIGNvbW1hbmQgb24geW91ciBzeXN0ZW0uCit0byBmdXJ0aGVyIHJlc3RyaWN0IHRoZSBjaXBoZXIgY2hvaWNlLiBCZSBzdXJlIHRvIHJlYWQgT3BlblNTTCdzIGRvY3VtZW50YXRpb24KK2Fib3V0IHRoZSBgY2lwaGVyIGxpc3QgZm9ybWF0IDxodHRwOi8vd3d3Lm9wZW5zc2wub3JnL2RvY3MvYXBwcy9jaXBoZXJzLmh0bWwjQ0lQSEVSX0xJU1RfRk9STUFUPmBfLgorSWYgeW91IHdhbnQgdG8gY2hlY2sgd2hpY2ggY2lwaGVycyBhcmUgZW5hYmxlZCBieSBhIGdpdmVuIGNpcGhlciBsaXN0LCB1c2UgdGhlCitgYG9wZW5zc2wgY2lwaGVyc2BgIGNvbW1hbmQgb24geW91ciBzeXN0ZW0uCiAKIE11bHRpLXByb2Nlc3NpbmcKIF5eXl5eXl5eXl5eXl5eXl4KQEAgLTEzNTAsMyArMTgwOCwxMiBAQAogCiAgICBgUkZDIDQzNjY6IFRyYW5zcG9ydCBMYXllciBTZWN1cml0eSAoVExTKSBFeHRlbnNpb25zIDxodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmM0MzY2PmBfCiAgICAgICAgQmxha2UtV2lsc29uIGV0LiBhbC4KKworICAgYFJGQyA1MjQ2OiBUaGUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFByb3RvY29sIFZlcnNpb24gMS4yIDxodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MjQ2PmBfCisgICAgICAgVC4gRGllcmtzIGV0LiBhbC4KKworICAgYFJGQyA2MDY2OiBUcmFuc3BvcnQgTGF5ZXIgU2VjdXJpdHkgKFRMUykgRXh0ZW5zaW9ucyA8aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjA2Nj5gXworICAgICAgIEQuIEVhc3RsYWtlCisKKyAgIGBJQU5BIFRMUzogVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5IChUTFMpIFBhcmFtZXRlcnMgPGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sPmBfCisgICAgICAgSUFOQQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdC5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdAppbmRleCA2YzIwYWEyLi4yNDc2OWY2IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGF0LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdGF0LnJzdApAQCAtNiw3ICs2LDggQEAKICAgICAgICAgICAgICAgb3MubHN0YXQoKSBhbmQgb3MuZnN0YXQoKS4KIC4uIHNlY3Rpb25hdXRob3I6OiBTa2lwIE1vbnRhbmFybyA8c2tpcEBhdXRvbWF0cml4LmNvbT4KIAotKipTb3VyY2UgY29kZToqKiA6c291cmNlOmBMaWIvc3RhdC5weWAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTW9kdWxlcy9fc3RhdC5jYAorICAgICAgICAgICAgICAgICA6c291cmNlOmBMaWIvc3RhdC5weWAKIAogLS0tLS0tLS0tLS0tLS0KIApAQCAtMTUsNiArMTYsOSBAQAogZXhpc3QpLiAgRm9yIGNvbXBsZXRlIGRldGFpbHMgYWJvdXQgdGhlIDpjOmZ1bmM6YHN0YXRgLCA6YzpmdW5jOmBmc3RhdGAgYW5kCiA6YzpmdW5jOmBsc3RhdGAgY2FsbHMsIGNvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgc3lzdGVtLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHN0YXQgbW9kdWxlIGlzIGJhY2tlZCBieSBhIEMgaW1wbGVtZW50YXRpb24uCisKIFRoZSA6bW9kOmBzdGF0YCBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB0byB0ZXN0IGZvciBzcGVjaWZpYyBmaWxlCiB0eXBlczoKIApAQCAtNTMsNiArNTcsMjQgQEAKIAogICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBzb2NrZXQuCiAKKy4uIGZ1bmN0aW9uOjogU19JU0RPT1IobW9kZSkKKworICAgUmV0dXJuIG5vbi16ZXJvIGlmIHRoZSBtb2RlIGlzIGZyb20gYSBkb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTUE9SVChtb2RlKQorCisgICBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIG1vZGUgaXMgZnJvbSBhbiBldmVudCBwb3J0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZnVuY3Rpb246OiBTX0lTV0hUKG1vZGUpCisKKyAgIFJldHVybiBub24temVybyBpZiB0aGUgbW9kZSBpcyBmcm9tIGEgd2hpdGVvdXQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBUd28gYWRkaXRpb25hbCBmdW5jdGlvbnMgYXJlIGRlZmluZWQgZm9yIG1vcmUgZ2VuZXJhbCBtYW5pcHVsYXRpb24gb2YgdGhlIGZpbGUncwogbW9kZToKIApAQCAtMTEzLDYgKzEzNSwxMCBAQAogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIGFuZAorICAgICAgOmRhdGE6YFNfSUZXSFRgLgorCiAKIEFsbCB0aGUgdmFyaWFibGVzIGJlbG93IGFyZSBzaW1wbHkgc3ltYm9saWMgaW5kZXhlcyBpbnRvIHRoZSAxMC10dXBsZSByZXR1cm5lZAogYnkgOmZ1bmM6YG9zLnN0YXRgLCA6ZnVuYzpgb3MuZnN0YXRgIG9yIDpmdW5jOmBvcy5sc3RhdGAuCkBAIC0yMTAsNiArMjM2LDI5IEBACiAKICAgIEZJRk8uCiAKKy4uIGRhdGE6OiBTX0lGRE9PUgorCisgICBEb29yLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworLi4gZGF0YTo6IFNfSUZQT1JUCisKKyAgIEV2ZW50IHBvcnQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBkYXRhOjogU19JRldIVAorCisgICBXaGl0ZW91dC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIG5vdGU6OgorCisgICA6ZGF0YTpgU19JRkRPT1JgLCA6ZGF0YTpgU19JRlBPUlRgIG9yIDpkYXRhOmBTX0lGV0hUYCBhcmUgZGVmaW5lZCBhcworICAgMCB3aGVuIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIHRoZSBmaWxlIHR5cGVzLgorCiBUaGUgZm9sbG93aW5nIGZsYWdzIGNhbiBhbHNvIGJlIHVzZWQgaW4gdGhlICptb2RlKiBhcmd1bWVudCBvZiA6ZnVuYzpgb3MuY2htb2RgOgogCiAuLiBkYXRhOjogU19JU1VJRApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QgYi9Eb2MvbGlicmFyeS9zdGF0aXN0aWNzLnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzlkODhjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL2xpYnJhcnkvc3RhdGlzdGljcy5yc3QKQEAgLTAsMCArMSw0MTggQEAKKzptb2Q6YHN0YXRpc3RpY3NgIC0tLSBNYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLi4gbW9kdWxlOjogc3RhdGlzdGljcworICAgOnN5bm9wc2lzOiBtYXRoZW1hdGljYWwgc3RhdGlzdGljcyBmdW5jdGlvbnMKKy4uIG1vZHVsZWF1dGhvcjo6IFN0ZXZlbiBEJ0FwcmFubyA8c3RldmUrcHl0aG9uQHBlYXJ3b29kLmluZm8+CisuLiBzZWN0aW9uYXV0aG9yOjogU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIHRlc3RzZXR1cDo6ICoKKworICAgZnJvbSBzdGF0aXN0aWNzIGltcG9ydCAqCisgICBfX25hbWVfXyA9ICc8ZG9jdGVzdD4nCisKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N0YXRpc3RpY3MucHlgCisKKy0tLS0tLS0tLS0tLS0tCisKK1RoaXMgbW9kdWxlIHByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgY2FsY3VsYXRpbmcgbWF0aGVtYXRpY2FsIHN0YXRpc3RpY3Mgb2YKK251bWVyaWMgKDpjbGFzczpgUmVhbGAtdmFsdWVkKSBkYXRhLgorCisuLiBub3RlOjoKKworICAgVW5sZXNzIGV4cGxpY2l0bHkgbm90ZWQgb3RoZXJ3aXNlLCB0aGVzZSBmdW5jdGlvbnMgc3VwcG9ydCA6Y2xhc3M6YGludGAsCisgICA6Y2xhc3M6YGZsb2F0YCwgOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgIGFuZCA6Y2xhc3M6YGZyYWN0aW9ucy5GcmFjdGlvbmAuCisgICBCZWhhdmlvdXIgd2l0aCBvdGhlciB0eXBlcyAod2hldGhlciBpbiB0aGUgbnVtZXJpYyB0b3dlciBvciBub3QpIGlzCisgICBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuICBNaXhlZCB0eXBlcyBhcmUgYWxzbyB1bmRlZmluZWQgYW5kCisgICBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQuICBJZiB5b3VyIGlucHV0IGRhdGEgY29uc2lzdHMgb2YgbWl4ZWQgdHlwZXMsCisgICB5b3UgbWF5IGJlIGFibGUgdG8gdXNlIDpmdW5jOmBtYXBgIHRvIGVuc3VyZSBhIGNvbnNpc3RlbnQgcmVzdWx0LCBlLmcuCisgICBgYG1hcChmbG9hdCwgaW5wdXRfZGF0YSlgYC4KKworQXZlcmFnZXMgYW5kIG1lYXN1cmVzIG9mIGNlbnRyYWwgbG9jYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZXNlIGZ1bmN0aW9ucyBjYWxjdWxhdGUgYW4gYXZlcmFnZSBvciB0eXBpY2FsIHZhbHVlIGZyb20gYSBwb3B1bGF0aW9uCitvciBzYW1wbGUuCisKKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKzpmdW5jOmBtZWFuYCAgICAgICAgICAgICBBcml0aG1ldGljIG1lYW4gKCJhdmVyYWdlIikgb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5gICAgICAgICAgICBNZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5fbG93YCAgICAgICBMb3cgbWVkaWFuIG9mIGRhdGEuCis6ZnVuYzpgbWVkaWFuX2hpZ2hgICAgICAgSGlnaCBtZWRpYW4gb2YgZGF0YS4KKzpmdW5jOmBtZWRpYW5fZ3JvdXBlZGAgICBNZWRpYW4sIG9yIDUwdGggcGVyY2VudGlsZSwgb2YgZ3JvdXBlZCBkYXRhLgorOmZ1bmM6YG1vZGVgICAgICAgICAgICAgIE1vZGUgKG1vc3QgY29tbW9uIHZhbHVlKSBvZiBkaXNjcmV0ZSBkYXRhLgorPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitNZWFzdXJlcyBvZiBzcHJlYWQKKy0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVzZSBmdW5jdGlvbnMgY2FsY3VsYXRlIGEgbWVhc3VyZSBvZiBob3cgbXVjaCB0aGUgcG9wdWxhdGlvbiBvciBzYW1wbGUKK3RlbmRzIHRvIGRldmlhdGUgZnJvbSB0aGUgdHlwaWNhbCBvciBhdmVyYWdlIHZhbHVlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorOmZ1bmM6YHBzdGRldmAgICAgICAgICAgIFBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCis6ZnVuYzpgcHZhcmlhbmNlYCAgICAgICAgUG9wdWxhdGlvbiB2YXJpYW5jZSBvZiBkYXRhLgorOmZ1bmM6YHN0ZGV2YCAgICAgICAgICAgIFNhbXBsZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgZGF0YS4KKzpmdW5jOmB2YXJpYW5jZWAgICAgICAgICBTYW1wbGUgdmFyaWFuY2Ugb2YgZGF0YS4KKz09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitGdW5jdGlvbiBkZXRhaWxzCistLS0tLS0tLS0tLS0tLS0tCisKK05vdGU6IFRoZSBmdW5jdGlvbnMgZG8gbm90IHJlcXVpcmUgdGhlIGRhdGEgZ2l2ZW4gdG8gdGhlbSB0byBiZSBzb3J0ZWQuCitIb3dldmVyLCBmb3IgcmVhZGluZyBjb252ZW5pZW5jZSwgbW9zdCBvZiB0aGUgZXhhbXBsZXMgc2hvdyBzb3J0ZWQgc2VxdWVuY2VzLgorCisuLiBmdW5jdGlvbjo6IG1lYW4oZGF0YSkKKworICAgUmV0dXJuIHRoZSBzYW1wbGUgYXJpdGhtZXRpYyBtZWFuIG9mICpkYXRhKiwgYSBzZXF1ZW5jZSBvciBpdGVyYXRvciBvZgorICAgcmVhbC12YWx1ZWQgbnVtYmVycy4KKworICAgVGhlIGFyaXRobWV0aWMgbWVhbiBpcyB0aGUgc3VtIG9mIHRoZSBkYXRhIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZiBkYXRhCisgICBwb2ludHMuICBJdCBpcyBjb21tb25seSBjYWxsZWQgInRoZSBhdmVyYWdlIiwgYWx0aG91Z2ggaXQgaXMgb25seSBvbmUgb2YgbWFueQorICAgZGlmZmVyZW50IG1hdGhlbWF0aWNhbCBhdmVyYWdlcy4gIEl0IGlzIGEgbWVhc3VyZSBvZiB0aGUgY2VudHJhbCBsb2NhdGlvbiBvZgorICAgdGhlIGRhdGEuCisKKyAgIElmICpkYXRhKiBpcyBlbXB0eSwgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCB3aWxsIGJlIHJhaXNlZC4KKworICAgU29tZSBleGFtcGxlcyBvZiB1c2U6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVhbihbMSwgMiwgMywgNCwgNF0pCisgICAgICAyLjgKKyAgICAgID4+PiBtZWFuKFstMS4wLCAyLjUsIDMuMjUsIDUuNzVdKQorICAgICAgMi42MjUKKworICAgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgICA+Pj4gbWVhbihbRigzLCA3KSwgRigxLCAyMSksIEYoNSwgMyksIEYoMSwgMyldKQorICAgICAgRnJhY3Rpb24oMTMsIDIxKQorCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICAgID4+PiBtZWFuKFtEKCIwLjUiKSwgRCgiMC43NSIpLCBEKCIwLjYyNSIpLCBEKCIwLjM3NSIpXSkKKyAgICAgIERlY2ltYWwoJzAuNTYyNScpCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgbWVhbiBpcyBzdHJvbmdseSBhZmZlY3RlZCBieSBvdXRsaWVycyBhbmQgaXMgbm90IGEgcm9idXN0IGVzdGltYXRvcgorICAgICAgZm9yIGNlbnRyYWwgbG9jYXRpb246IHRoZSBtZWFuIGlzIG5vdCBuZWNlc3NhcmlseSBhIHR5cGljYWwgZXhhbXBsZSBvZiB0aGUKKyAgICAgIGRhdGEgcG9pbnRzLiAgRm9yIG1vcmUgcm9idXN0LCBhbHRob3VnaCBsZXNzIGVmZmljaWVudCwgbWVhc3VyZXMgb2YKKyAgICAgIGNlbnRyYWwgbG9jYXRpb24sIHNlZSA6ZnVuYzpgbWVkaWFuYCBhbmQgOmZ1bmM6YG1vZGVgLiAgKEluIHRoaXMgY2FzZSwKKyAgICAgICJlZmZpY2llbnQiIHJlZmVycyB0byBzdGF0aXN0aWNhbCBlZmZpY2llbmN5IHJhdGhlciB0aGFuIGNvbXB1dGF0aW9uYWwKKyAgICAgIGVmZmljaWVuY3kuKQorCisgICAgICBUaGUgc2FtcGxlIG1lYW4gZ2l2ZXMgYW4gdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuLAorICAgICAgd2hpY2ggbWVhbnMgdGhhdCwgdGFrZW4gb24gYXZlcmFnZSBvdmVyIGFsbCB0aGUgcG9zc2libGUgc2FtcGxlcywKKyAgICAgIGBgbWVhbihzYW1wbGUpYGAgY29udmVyZ2VzIG9uIHRoZSB0cnVlIG1lYW4gb2YgdGhlIGVudGlyZSBwb3B1bGF0aW9uLiAgSWYKKyAgICAgICpkYXRhKiByZXByZXNlbnRzIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiByYXRoZXIgdGhhbiBhIHNhbXBsZSwgdGhlbgorICAgICAgYGBtZWFuKGRhdGEpYGAgaXMgZXF1aXZhbGVudCB0byBjYWxjdWxhdGluZyB0aGUgdHJ1ZSBwb3B1bGF0aW9uIG1lYW4gzrwuCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW4oZGF0YSkKKworICAgUmV0dXJuIHRoZSBtZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgbnVtZXJpYyBkYXRhLCB1c2luZyB0aGUgY29tbW9uICJtZWFuIG9mCisgICBtaWRkbGUgdHdvIiBtZXRob2QuICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAgaXMgcmFpc2VkLgorCisgICBUaGUgbWVkaWFuIGlzIGEgcm9idXN0IG1lYXN1cmUgb2YgY2VudHJhbCBsb2NhdGlvbiwgYW5kIGlzIGxlc3MgYWZmZWN0ZWQgYnkKKyAgIHRoZSBwcmVzZW5jZSBvZiBvdXRsaWVycyBpbiB5b3VyIGRhdGEuICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YSBwb2ludHMgaXMKKyAgIG9kZCwgdGhlIG1pZGRsZSBkYXRhIHBvaW50IGlzIHJldHVybmVkOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbihbMSwgMywgNV0pCisgICAgICAzCisKKyAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBldmVuLCB0aGUgbWVkaWFuIGlzIGludGVycG9sYXRlZCBieSB0YWtpbmcKKyAgIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW4oWzEsIDMsIDUsIDddKQorICAgICAgNC4wCisKKyAgIFRoaXMgaXMgc3VpdGVkIGZvciB3aGVuIHlvdXIgZGF0YSBpcyBkaXNjcmV0ZSwgYW5kIHlvdSBkb24ndCBtaW5kIHRoYXQgdGhlCisgICBtZWRpYW4gbWF5IG5vdCBiZSBhbiBhY3R1YWwgZGF0YSBwb2ludC4KKworICAgLi4gc2VlYWxzbzo6IDpmdW5jOmBtZWRpYW5fbG93YCwgOmZ1bmM6YG1lZGlhbl9oaWdoYCwgOmZ1bmM6YG1lZGlhbl9ncm91cGVkYAorCisKKy4uIGZ1bmN0aW9uOjogbWVkaWFuX2xvdyhkYXRhKQorCisgICBSZXR1cm4gdGhlIGxvdyBtZWRpYW4gb2YgbnVtZXJpYyBkYXRhLiAgSWYgKmRhdGEqIGlzIGVtcHR5LAorICAgOmV4YzpgU3RhdGlzdGljc0Vycm9yYCBpcyByYWlzZWQuCisKKyAgIFRoZSBsb3cgbWVkaWFuIGlzIGFsd2F5cyBhIG1lbWJlciBvZiB0aGUgZGF0YSBzZXQuICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YQorICAgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gIFdoZW4gaXQgaXMgZXZlbiwgdGhlIHNtYWxsZXIgb2YKKyAgIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1XSkKKyAgICAgIDMKKyAgICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1LCA3XSkKKyAgICAgIDMKKworICAgVXNlIHRoZSBsb3cgbWVkaWFuIHdoZW4geW91ciBkYXRhIGFyZSBkaXNjcmV0ZSBhbmQgeW91IHByZWZlciB0aGUgbWVkaWFuIHRvCisgICBiZSBhbiBhY3R1YWwgZGF0YSBwb2ludCByYXRoZXIgdGhhbiBpbnRlcnBvbGF0ZWQuCisKKworLi4gZnVuY3Rpb246OiBtZWRpYW5faGlnaChkYXRhKQorCisgICBSZXR1cm4gdGhlIGhpZ2ggbWVkaWFuIG9mIGRhdGEuICBJZiAqZGF0YSogaXMgZW1wdHksIDpleGM6YFN0YXRpc3RpY3NFcnJvcmAKKyAgIGlzIHJhaXNlZC4KKworICAgVGhlIGhpZ2ggbWVkaWFuIGlzIGFsd2F5cyBhIG1lbWJlciBvZiB0aGUgZGF0YSBzZXQuICBXaGVuIHRoZSBudW1iZXIgb2YgZGF0YQorICAgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gIFdoZW4gaXQgaXMgZXZlbiwgdGhlIGxhcmdlciBvZgorICAgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9oaWdoKFsxLCAzLCA1XSkKKyAgICAgIDMKKyAgICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNSwgN10pCisgICAgICA1CisKKyAgIFVzZSB0aGUgaGlnaCBtZWRpYW4gd2hlbiB5b3VyIGRhdGEgYXJlIGRpc2NyZXRlIGFuZCB5b3UgcHJlZmVyIHRoZSBtZWRpYW4gdG8KKyAgIGJlIGFuIGFjdHVhbCBkYXRhIHBvaW50IHJhdGhlciB0aGFuIGludGVycG9sYXRlZC4KKworCisuLiBmdW5jdGlvbjo6IG1lZGlhbl9ncm91cGVkKGRhdGEsIGludGVydmFsPTEpCisKKyAgIFJldHVybiB0aGUgbWVkaWFuIG9mIGdyb3VwZWQgY29udGludW91cyBkYXRhLCBjYWxjdWxhdGVkIGFzIHRoZSA1MHRoCisgICBwZXJjZW50aWxlLCB1c2luZyBpbnRlcnBvbGF0aW9uLiAgSWYgKmRhdGEqIGlzIGVtcHR5LCA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgCisgICBpcyByYWlzZWQuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzUyLCA1MiwgNTMsIDU0XSkKKyAgICAgIDUyLjUKKworICAgSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCB0aGUgZGF0YSBhcmUgcm91bmRlZCwgc28gdGhhdCBlYWNoIHZhbHVlIHJlcHJlc2VudHMKKyAgIHRoZSBtaWRwb2ludCBvZiBkYXRhIGNsYXNzZXMsIGUuZy4gMSBpcyB0aGUgbWlkcG9pbnQgb2YgdGhlIGNsYXNzIDAuNS0xLjUsIDIKKyAgIGlzIHRoZSBtaWRwb2ludCBvZiAxLjUtMi41LCAzIGlzIHRoZSBtaWRwb2ludCBvZiAyLjUtMy41LCBldGMuICBXaXRoIHRoZSBkYXRhCisgICBnaXZlbiwgdGhlIG1pZGRsZSB2YWx1ZSBmYWxscyBzb21ld2hlcmUgaW4gdGhlIGNsYXNzIDMuNS00LjUsIGFuZAorICAgaW50ZXJwb2xhdGlvbiBpcyB1c2VkIHRvIGVzdGltYXRlIGl0OgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAyLCAyLCAzLCA0LCA0LCA0LCA0LCA0LCA1XSkKKyAgICAgIDMuNworCisgICBPcHRpb25hbCBhcmd1bWVudCAqaW50ZXJ2YWwqIHJlcHJlc2VudHMgdGhlIGNsYXNzIGludGVydmFsLCBhbmQgZGVmYXVsdHMKKyAgIHRvIDEuICBDaGFuZ2luZyB0aGUgY2xhc3MgaW50ZXJ2YWwgbmF0dXJhbGx5IHdpbGwgY2hhbmdlIHRoZSBpbnRlcnBvbGF0aW9uOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG1lZGlhbl9ncm91cGVkKFsxLCAzLCAzLCA1LCA3XSwgaW50ZXJ2YWw9MSkKKyAgICAgIDMuMjUKKyAgICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMywgMywgNSwgN10sIGludGVydmFsPTIpCisgICAgICAzLjUKKworICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIHBvaW50cyBhcmUgYXQgbGVhc3QKKyAgICppbnRlcnZhbCogYXBhcnQuCisKKyAgIC4uIGltcGwtZGV0YWlsOjoKKworICAgICAgVW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCA6ZnVuYzpgbWVkaWFuX2dyb3VwZWRgIG1heSBjb2VyY2UgZGF0YSBwb2ludHMgdG8KKyAgICAgIGZsb2F0cy4gIFRoaXMgYmVoYXZpb3VyIGlzIGxpa2VseSB0byBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KKworICAgLi4gc2VlYWxzbzo6CisKKyAgICAgICogIlN0YXRpc3RpY3MgZm9yIHRoZSBCZWhhdmlvcmFsIFNjaWVuY2VzIiwgRnJlZGVyaWNrIEogR3JhdmV0dGVyIGFuZAorICAgICAgICBMYXJyeSBCIFdhbGxuYXUgKDh0aCBFZGl0aW9uKS4KKworICAgICAgKiBDYWxjdWxhdGluZyB0aGUgYG1lZGlhbiA8aHR0cDovL3d3dy51YWxiZXJ0YS5jYS9+b3BzY2FuL21lZGlhbi5odG1sPmBfLgorCisgICAgICAqIFRoZSBgU1NNRURJQU4KKyAgICAgICAgPGh0dHBzOi8vaGVscC5nbm9tZS5vcmcvdXNlcnMvZ251bWVyaWMvc3RhYmxlL2dudW1lcmljLmh0bWwjZ251bWVyaWMtZnVuY3Rpb24tU1NNRURJQU4+YF8KKyAgICAgICAgZnVuY3Rpb24gaW4gdGhlIEdub21lIEdudW1lcmljIHNwcmVhZHNoZWV0LCBpbmNsdWRpbmcgYHRoaXMgZGlzY3Vzc2lvbgorICAgICAgICA8aHR0cHM6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy9nbnVtZXJpYy1saXN0LzIwMTEtQXByaWwvbXNnMDAwMTguaHRtbD5gXy4KKworCisuLiBmdW5jdGlvbjo6IG1vZGUoZGF0YSkKKworICAgUmV0dXJuIHRoZSBtb3N0IGNvbW1vbiBkYXRhIHBvaW50IGZyb20gZGlzY3JldGUgb3Igbm9taW5hbCAqZGF0YSouICBUaGUgbW9kZQorICAgKHdoZW4gaXQgZXhpc3RzKSBpcyB0aGUgbW9zdCB0eXBpY2FsIHZhbHVlLCBhbmQgaXMgYSByb2J1c3QgbWVhc3VyZSBvZgorICAgY2VudHJhbCBsb2NhdGlvbi4KKworICAgSWYgKmRhdGEqIGlzIGVtcHR5LCBvciBpZiB0aGVyZSBpcyBub3QgZXhhY3RseSBvbmUgbW9zdCBjb21tb24gdmFsdWUsCisgICA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlzIHJhaXNlZC4KKworICAgYGBtb2RlYGAgYXNzdW1lcyBkaXNjcmV0ZSBkYXRhLCBhbmQgcmV0dXJucyBhIHNpbmdsZSB2YWx1ZS4gVGhpcyBpcyB0aGUKKyAgIHN0YW5kYXJkIHRyZWF0bWVudCBvZiB0aGUgbW9kZSBhcyBjb21tb25seSB0YXVnaHQgaW4gc2Nob29sczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtb2RlKFsxLCAxLCAyLCAzLCAzLCAzLCAzLCA0XSkKKyAgICAgIDMKKworICAgVGhlIG1vZGUgaXMgdW5pcXVlIGluIHRoYXQgaXQgaXMgdGhlIG9ubHkgc3RhdGlzdGljIHdoaWNoIGFsc28gYXBwbGllcworICAgdG8gbm9taW5hbCAobm9uLW51bWVyaWMpIGRhdGE6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gbW9kZShbInJlZCIsICJibHVlIiwgImJsdWUiLCAicmVkIiwgImdyZWVuIiwgInJlZCIsICJyZWQiXSkKKyAgICAgICdyZWQnCisKKworLi4gZnVuY3Rpb246OiBwc3RkZXYoZGF0YSwgbXU9Tm9uZSkKKworICAgUmV0dXJuIHRoZSBwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiAodGhlIHNxdWFyZSByb290IG9mIHRoZSBwb3B1bGF0aW9uCisgICB2YXJpYW5jZSkuICBTZWUgOmZ1bmM6YHB2YXJpYW5jZWAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBwc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgICAgMC45ODY4OTMyNzM1MjcyNTEKKworCisuLiBmdW5jdGlvbjo6IHB2YXJpYW5jZShkYXRhLCBtdT1Ob25lKQorCisgICBSZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgKmRhdGEqLCBhIG5vbi1lbXB0eSBpdGVyYWJsZSBvZiByZWFsLXZhbHVlZAorICAgbnVtYmVycy4gIFZhcmlhbmNlLCBvciBzZWNvbmQgbW9tZW50IGFib3V0IHRoZSBtZWFuLCBpcyBhIG1lYXN1cmUgb2YgdGhlCisgICB2YXJpYWJpbGl0eSAoc3ByZWFkIG9yIGRpc3BlcnNpb24pIG9mIGRhdGEuICBBIGxhcmdlIHZhcmlhbmNlIGluZGljYXRlcyB0aGF0CisgICB0aGUgZGF0YSBpcyBzcHJlYWQgb3V0OyBhIHNtYWxsIHZhcmlhbmNlIGluZGljYXRlcyBpdCBpcyBjbHVzdGVyZWQgY2xvc2VseQorICAgYXJvdW5kIHRoZSBtZWFuLgorCisgICBJZiB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICptdSogaXMgZ2l2ZW4sIGl0IHNob3VsZCBiZSB0aGUgbWVhbiBvZgorICAgKmRhdGEqLiAgSWYgaXQgaXMgbWlzc2luZyBvciBgYE5vbmVgYCAodGhlIGRlZmF1bHQpLCB0aGUgbWVhbiBpcworICAgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLiAgVG8KKyAgIGVzdGltYXRlIHRoZSB2YXJpYW5jZSBmcm9tIGEgc2FtcGxlLCB0aGUgOmZ1bmM6YHZhcmlhbmNlYCBmdW5jdGlvbiBpcyB1c3VhbGx5CisgICBhIGJldHRlciBjaG9pY2UuCisKKyAgIFJhaXNlcyA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlmICpkYXRhKiBpcyBlbXB0eS4KKworICAgRXhhbXBsZXM6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZGF0YSA9IFswLjAsIDAuMjUsIDAuMjUsIDEuMjUsIDEuNSwgMS43NSwgMi43NSwgMy4yNV0KKyAgICAgID4+PiBwdmFyaWFuY2UoZGF0YSkKKyAgICAgIDEuMjUKKworICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZQorICAgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICptdSogdG8gYXZvaWQgcmVjYWxjdWxhdGlvbjoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBtdSA9IG1lYW4oZGF0YSkKKyAgICAgID4+PiBwdmFyaWFuY2UoZGF0YSwgbXUpCisgICAgICAxLjI1CisKKyAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgYXR0ZW1wdCB0byB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBwYXNzZWQgdGhlIGFjdHVhbCBtZWFuCisgICBhcyAqbXUqLiAgVXNpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgKm11KiBtYXkgbGVhZCB0byBpbnZhbGlkIG9yIGltcG9zc2libGUKKyAgIHJlc3VsdHMuCisKKyAgIERlY2ltYWxzIGFuZCBGcmFjdGlvbnMgYXJlIHN1cHBvcnRlZDoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwgYXMgRAorICAgICAgPj4+IHB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgICAgRGVjaW1hbCgnMjQuODE1JykKKworICAgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgICA+Pj4gcHZhcmlhbmNlKFtGKDEsIDQpLCBGKDUsIDQpLCBGKDEsIDIpXSkKKyAgICAgIEZyYWN0aW9uKDEzLCA3MikKKworICAgLi4gbm90ZTo6CisKKyAgICAgIFdoZW4gY2FsbGVkIHdpdGggdGhlIGVudGlyZSBwb3B1bGF0aW9uLCB0aGlzIGdpdmVzIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlCisgICAgICDPg8KyLiAgV2hlbiBjYWxsZWQgb24gYSBzYW1wbGUgaW5zdGVhZCwgdGhpcyBpcyB0aGUgYmlhc2VkIHNhbXBsZSB2YXJpYW5jZQorICAgICAgc8KyLCBhbHNvIGtub3duIGFzIHZhcmlhbmNlIHdpdGggTiBkZWdyZWVzIG9mIGZyZWVkb20uCisKKyAgICAgIElmIHlvdSBzb21laG93IGtub3cgdGhlIHRydWUgcG9wdWxhdGlvbiBtZWFuIM68LCB5b3UgbWF5IHVzZSB0aGlzIGZ1bmN0aW9uCisgICAgICB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIG9mIGEgc2FtcGxlLCBnaXZpbmcgdGhlIGtub3duIHBvcHVsYXRpb24gbWVhbiBhcworICAgICAgdGhlIHNlY29uZCBhcmd1bWVudC4gIFByb3ZpZGVkIHRoZSBkYXRhIHBvaW50cyBhcmUgcmVwcmVzZW50YXRpdmUKKyAgICAgIChlLmcuIGluZGVwZW5kZW50IGFuZCBpZGVudGljYWxseSBkaXN0cmlidXRlZCksIHRoZSByZXN1bHQgd2lsbCBiZSBhbgorICAgICAgdW5iaWFzZWQgZXN0aW1hdGUgb2YgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKworLi4gZnVuY3Rpb246OiBzdGRldihkYXRhLCB4YmFyPU5vbmUpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbiAodGhlIHNxdWFyZSByb290IG9mIHRoZSBzYW1wbGUKKyAgIHZhcmlhbmNlKS4gIFNlZSA6ZnVuYzpgdmFyaWFuY2VgIGZvciBhcmd1bWVudHMgYW5kIG90aGVyIGRldGFpbHMuCisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgICAgMS4wODEwODc0MTU1MjE5ODI3CisKKworLi4gZnVuY3Rpb246OiB2YXJpYW5jZShkYXRhLCB4YmFyPU5vbmUpCisKKyAgIFJldHVybiB0aGUgc2FtcGxlIHZhcmlhbmNlIG9mICpkYXRhKiwgYW4gaXRlcmFibGUgb2YgYXQgbGVhc3QgdHdvIHJlYWwtdmFsdWVkCisgICBudW1iZXJzLiAgVmFyaWFuY2UsIG9yIHNlY29uZCBtb21lbnQgYWJvdXQgdGhlIG1lYW4sIGlzIGEgbWVhc3VyZSBvZiB0aGUKKyAgIHZhcmlhYmlsaXR5IChzcHJlYWQgb3IgZGlzcGVyc2lvbikgb2YgZGF0YS4gIEEgbGFyZ2UgdmFyaWFuY2UgaW5kaWNhdGVzIHRoYXQKKyAgIHRoZSBkYXRhIGlzIHNwcmVhZCBvdXQ7IGEgc21hbGwgdmFyaWFuY2UgaW5kaWNhdGVzIGl0IGlzIGNsdXN0ZXJlZCBjbG9zZWx5CisgICBhcm91bmQgdGhlIG1lYW4uCisKKyAgIElmIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgKnhiYXIqIGlzIGdpdmVuLCBpdCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICpkYXRhKi4gIElmIGl0IGlzIG1pc3Npbmcgb3IgYGBOb25lYGAgKHRoZSBkZWZhdWx0KSwgdGhlIG1lYW4gaXMKKyAgIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KKworICAgVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB5b3VyIGRhdGEgaXMgYSBzYW1wbGUgZnJvbSBhIHBvcHVsYXRpb24uIFRvIGNhbGN1bGF0ZQorICAgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLCBzZWUgOmZ1bmM6YHB2YXJpYW5jZWAuCisKKyAgIFJhaXNlcyA6ZXhjOmBTdGF0aXN0aWNzRXJyb3JgIGlmICpkYXRhKiBoYXMgZmV3ZXIgdGhhbiB0d28gdmFsdWVzLgorCisgICBFeGFtcGxlczoKKworICAgLi4gZG9jdGVzdDo6CisKKyAgICAgID4+PiBkYXRhID0gWzIuNzUsIDEuNzUsIDEuMjUsIDAuMjUsIDAuNSwgMS4yNSwgMy41XQorICAgICAgPj4+IHZhcmlhbmNlKGRhdGEpCisgICAgICAxLjM3MjAyMzgwOTUyMzgwOTUKKworICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzIHRoZQorICAgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50ICp4YmFyKiB0byBhdm9pZCByZWNhbGN1bGF0aW9uOgorCisgICAuLiBkb2N0ZXN0OjoKKworICAgICAgPj4+IG0gPSBtZWFuKGRhdGEpCisgICAgICA+Pj4gdmFyaWFuY2UoZGF0YSwgbSkKKyAgICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gdmVyaWZ5IHRoYXQgeW91IGhhdmUgcGFzc2VkIHRoZSBhY3R1YWwgbWVhbgorICAgYXMgKnhiYXIqLiAgVXNpbmcgYXJiaXRyYXJ5IHZhbHVlcyBmb3IgKnhiYXIqIGNhbiBsZWFkIHRvIGludmFsaWQgb3IKKyAgIGltcG9zc2libGUgcmVzdWx0cy4KKworICAgRGVjaW1hbCBhbmQgRnJhY3Rpb24gdmFsdWVzIGFyZSBzdXBwb3J0ZWQ6CisKKyAgIC4uIGRvY3Rlc3Q6OgorCisgICAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICAgID4+PiB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgICAgRGVjaW1hbCgnMzEuMDE4NzUnKQorCisgICAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICAgID4+PiB2YXJpYW5jZShbRigxLCA2KSwgRigxLCAyKSwgRig1LCAzKV0pCisgICAgICBGcmFjdGlvbig2NywgMTA4KQorCisgICAuLiBub3RlOjoKKworICAgICAgVGhpcyBpcyB0aGUgc2FtcGxlIHZhcmlhbmNlIHPCsiB3aXRoIEJlc3NlbCdzIGNvcnJlY3Rpb24sIGFsc28ga25vd24gYXMKKyAgICAgIHZhcmlhbmNlIHdpdGggTi0xIGRlZ3JlZXMgb2YgZnJlZWRvbS4gIFByb3ZpZGVkIHRoYXQgdGhlIGRhdGEgcG9pbnRzIGFyZQorICAgICAgcmVwcmVzZW50YXRpdmUgKGUuZy4gaW5kZXBlbmRlbnQgYW5kIGlkZW50aWNhbGx5IGRpc3RyaWJ1dGVkKSwgdGhlIHJlc3VsdAorICAgICAgc2hvdWxkIGJlIGFuIHVuYmlhc2VkIGVzdGltYXRlIG9mIHRoZSB0cnVlIHBvcHVsYXRpb24gdmFyaWFuY2UuCisKKyAgICAgIElmIHlvdSBzb21laG93IGtub3cgdGhlIGFjdHVhbCBwb3B1bGF0aW9uIG1lYW4gzrwgeW91IHNob3VsZCBwYXNzIGl0IHRvIHRoZQorICAgICAgOmZ1bmM6YHB2YXJpYW5jZWAgZnVuY3Rpb24gYXMgdGhlICptdSogcGFyYW1ldGVyIHRvIGdldCB0aGUgdmFyaWFuY2Ugb2YgYQorICAgICAgc2FtcGxlLgorCitFeGNlcHRpb25zCistLS0tLS0tLS0tCisKK0Egc2luZ2xlIGV4Y2VwdGlvbiBpcyBkZWZpbmVkOgorCisuLiBleGNlcHRpb246OiBTdGF0aXN0aWNzRXJyb3IKKworICAgU3ViY2xhc3Mgb2YgOmV4YzpgVmFsdWVFcnJvcmAgZm9yIHN0YXRpc3RpY3MtcmVsYXRlZCBleGNlcHRpb25zLgorCisuLgorICAgIyBUaGlzIG1vZGVsaW5lcyBtdXN0IGFwcGVhciB3aXRoaW4gdGhlIGxhc3QgdGVuIGxpbmVzIG9mIHRoZSBmaWxlLgorICAga2F0ZTogaW5kZW50LXdpZHRoIDM7IHJlbW92ZS10cmFpbGluZy1zcGFjZSBvbjsgcmVwbGFjZS10YWJzIG9uOyBlbmNvZGluZyB1dGYtODsKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L3N0ZHR5cGVzLnJzdAppbmRleCBhYjc4Y2RjLi44ODE1ZDM4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdGR0eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0CkBAIC0yNjksOCArMjY5LDggQEAKIDpmdW5jOmBjb21wbGV4YCBjYW4gYmUgdXNlZCB0byBwcm9kdWNlIG51bWJlcnMgb2YgYSBzcGVjaWZpYyB0eXBlLgogCiBBbGwgbnVtZXJpYyB0eXBlcyAoZXhjZXB0IGNvbXBsZXgpIHN1cHBvcnQgdGhlIGZvbGxvd2luZyBvcGVyYXRpb25zLCBzb3J0ZWQgYnkKLWFzY2VuZGluZyBwcmlvcml0eSAob3BlcmF0aW9ucyBpbiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmlvcml0eTsgYWxsCi1udW1lcmljIG9wZXJhdGlvbnMgaGF2ZSBhIGhpZ2hlciBwcmlvcml0eSB0aGFuIGNvbXBhcmlzb24gb3BlcmF0aW9ucyk6Cithc2NlbmRpbmcgcHJpb3JpdHkgKGFsbCBudW1lcmljIG9wZXJhdGlvbnMgaGF2ZSBhIGhpZ2hlciBwcmlvcml0eSB0aGFuCitjb21wYXJpc29uIG9wZXJhdGlvbnMpOgogCiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IE9wZXJhdGlvbiAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8IEZ1bGwgZG9jdW1lbnRhdGlvbiB8CkBAIC0zNTQsNyArMzU0LDcgQEAKICAgIFRoZSBudW1lcmljIGxpdGVyYWxzIGFjY2VwdGVkIGluY2x1ZGUgdGhlIGRpZ2l0cyBgYDBgYCB0byBgYDlgYCBvciBhbnkKICAgIFVuaWNvZGUgZXF1aXZhbGVudCAoY29kZSBwb2ludHMgd2l0aCB0aGUgYGBOZGBgIHByb3BlcnR5KS4KIAotICAgU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMC4wL3VjZC9leHRyYWN0ZWQvRGVyaXZlZE51bWVyaWNUeXBlLnR4dAorICAgU2VlIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMy4wL3VjZC9leHRyYWN0ZWQvRGVyaXZlZE51bWVyaWNUeXBlLnR4dAogICAgZm9yIGEgY29tcGxldGUgbGlzdCBvZiBjb2RlIHBvaW50cyB3aXRoIHRoZSBgYE5kYGAgcHJvcGVydHkuCiAKIApAQCAtNDA0LDggKzQwNCw3IEBACiBvcGVyYXRpb25zIGFuZCBoaWdoZXIgdGhhbiB0aGUgY29tcGFyaXNvbnM7IHRoZSB1bmFyeSBvcGVyYXRpb24gYGB+YGAgaGFzIHRoZQogc2FtZSBwcmlvcml0eSBhcyB0aGUgb3RoZXIgdW5hcnkgbnVtZXJpYyBvcGVyYXRpb25zIChgYCtgYCBhbmQgYGAtYGApLgogCi1UaGlzIHRhYmxlIGxpc3RzIHRoZSBiaXR3aXNlIG9wZXJhdGlvbnMgc29ydGVkIGluIGFzY2VuZGluZyBwcmlvcml0eQotKG9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkpOgorVGhpcyB0YWJsZSBsaXN0cyB0aGUgYml0d2lzZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHk6CiAKICstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKIHwgT3BlcmF0aW9uICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgIHwKQEAgLTQ0NCw3ICs0NDMsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhlIGludCB0eXBlIGltcGxlbWVudHMgdGhlIDpjbGFzczpgbnVtYmVycy5JbnRlZ3JhbGAgOnRlcm06YGFic3RyYWN0IGJhc2UKLWNsYXNzYC4gSW4gYWRkaXRpb24sIGl0IHByb3ZpZGVzIG9uZSBtb3JlIG1ldGhvZDoKK2NsYXNzYC4gSW4gYWRkaXRpb24sIGl0IHByb3ZpZGVzIGEgZmV3IG1vcmUgbWV0aG9kczoKIAogLi4gbWV0aG9kOjogaW50LmJpdF9sZW5ndGgoKQogCkBAIC04MjAsMTAgKzgxOSwxMCBAQAogcHJvdmlkZWQgdG8gbWFrZSBpdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uCiBjdXN0b20gc2VxdWVuY2UgdHlwZXMuCiAKLVRoaXMgdGFibGUgbGlzdHMgdGhlIHNlcXVlbmNlIG9wZXJhdGlvbnMgc29ydGVkIGluIGFzY2VuZGluZyBwcmlvcml0eQotKG9wZXJhdGlvbnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJpb3JpdHkpLiAgSW4gdGhlIHRhYmxlLCAqcyogYW5kICp0KgotYXJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLCAqbiosICppKiwgKmoqIGFuZCAqayogYXJlIGludGVnZXJzIGFuZCAqeCogaXMKLWFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmQgdmFsdWUgcmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqLgorVGhpcyB0YWJsZSBsaXN0cyB0aGUgc2VxdWVuY2Ugb3BlcmF0aW9ucyBzb3J0ZWQgaW4gYXNjZW5kaW5nIHByaW9yaXR5LiAgSW4gdGhlCit0YWJsZSwgKnMqIGFuZCAqdCogYXJlIHNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLCAqbiosICppKiwgKmoqIGFuZCAqayogYXJlCitpbnRlZ2VycyBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmQgdmFsdWUKK3Jlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKi4KIAogVGhlIGBgaW5gYCBhbmQgYGBub3QgaW5gYCBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdGllcyBhcyB0aGUKIGNvbXBhcmlzb24gb3BlcmF0aW9ucy4gVGhlIGBgK2BgIChjb25jYXRlbmF0aW9uKSBhbmQgYGAqYGAgKHJlcGV0aXRpb24pCkBAIC04NTUsOCArODU0LDggQEAKIHwgYGBzICsgdGBgICAgICAgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAgIHwgKDYpKDcpICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqdCogICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8CiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKLXwgYGBzICogbmBgIG9yICAgICAgICAgICAgIHwgKm4qIHNoYWxsb3cgY29waWVzIG9mICpzKiAgICAgIHwgKDIpKDcpICAgfAotfCBgYG4gKiBzYGAgICAgICAgICAgICAgICAgfCBjb25jYXRlbmF0ZWQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICB8Cit8IGBgcyAqIG5gYCBvciAgICAgICAgICAgICB8IGVxdWl2YWxlbnQgdG8gYWRkaW5nICpzKiB0byAgICB8ICgyKSg3KSAgIHwKK3wgYGBuICogc2BgICAgICAgICAgICAgICAgIHwgaXRzZWxmICpuKiB0aW1lcyAgICAgICAgICAgICAgIHwgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCiB8IGBgc1tpXWBgICAgICAgICAgICAgICAgICB8ICppKlwgdGggaXRlbSBvZiAqcyosIG9yaWdpbiAwICB8IFwoMykgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tKwpAQCAtODk4LDkgKzg5Nyw5IEBACiAKICgyKQogICAgVmFsdWVzIG9mICpuKiBsZXNzIHRoYW4gYGAwYGAgYXJlIHRyZWF0ZWQgYXMgYGAwYGAgKHdoaWNoIHlpZWxkcyBhbiBlbXB0eQotICAgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNvcGllcyBhcmUgc2hhbGxvdzsKLSAgIG5lc3RlZCBzdHJ1Y3R1cmVzIGFyZSBub3QgY29waWVkLiAgVGhpcyBvZnRlbiBoYXVudHMgbmV3IFB5dGhvbiBwcm9ncmFtbWVyczsKLSAgIGNvbnNpZGVyOjoKKyAgIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUgYXMgKnMqKS4gIE5vdGUgdGhhdCBpdGVtcyBpbiB0aGUgc2VxdWVuY2UgKnMqCisgICBhcmUgbm90IGNvcGllZDsgdGhleSBhcmUgcmVmZXJlbmNlZCBtdWx0aXBsZSB0aW1lcy4gIFRoaXMgb2Z0ZW4gaGF1bnRzCisgICBuZXcgUHl0aG9uIHByb2dyYW1tZXJzOyBjb25zaWRlcjo6CiAKICAgICAgID4+PiBsaXN0cyA9IFtbXV0gKiAzCiAgICAgICA+Pj4gbGlzdHMKQEAgLTkxMCw3ICs5MDksNyBAQAogICAgICAgW1szXSwgWzNdLCBbM11dCiAKICAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgYGBbW11dYGAgaXMgYSBvbmUtZWxlbWVudCBsaXN0IGNvbnRhaW5pbmcgYW4gZW1wdHkKLSAgIGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIChwb2ludGVycyB0bykgdGhpcyBzaW5nbGUgZW1wdHkKKyAgIGxpc3QsIHNvIGFsbCB0aHJlZSBlbGVtZW50cyBvZiBgYFtbXV0gKiAzYGAgYXJlIHJlZmVyZW5jZXMgdG8gdGhpcyBzaW5nbGUgZW1wdHkKICAgIGxpc3QuICBNb2RpZnlpbmcgYW55IG9mIHRoZSBlbGVtZW50cyBvZiBgYGxpc3RzYGAgbW9kaWZpZXMgdGhpcyBzaW5nbGUgbGlzdC4KICAgIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZiBkaWZmZXJlbnQgbGlzdHMgdGhpcyB3YXk6OgogCkBAIC05MjEsNiArOTIwLDkgQEAKICAgICAgID4+PiBsaXN0cwogICAgICAgW1szXSwgWzVdLCBbN11dCiAKKyAgIEZ1cnRoZXIgZXhwbGFuYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBGQVEgZW50cnkKKyAgIDpyZWY6YGZhcS1tdWx0aWRpbWVuc2lvbmFsLWxpc3RgLgorCiAoMykKICAgIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mIHRoZSBzdHJpbmc6CiAgICBgYGxlbihzKSArIGlgYCBvciBgYGxlbihzKSArIGpgYCBpcyBzdWJzdGl0dXRlZC4gIEJ1dCBub3RlIHRoYXQgYGAtMGBgIGlzCkBAIC05NDksNyArOTUxLDcgQEAKICAgIHJ1bnRpbWUgY29zdCwgeW91IG11c3Qgc3dpdGNoIHRvIG9uZSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGJlbG93OgogCiAgICAqIGlmIGNvbmNhdGVuYXRpbmcgOmNsYXNzOmBzdHJgIG9iamVjdHMsIHlvdSBjYW4gYnVpbGQgYSBsaXN0IGFuZCB1c2UKLSAgICAgOm1ldGg6YHN0ci5qb2luYCBhdCB0aGUgZW5kIG9yIGVsc2Ugd3JpdGUgdG8gYSA6Y2xhc3M6YGlvLlN0cmluZ0lPYAorICAgICA6bWV0aDpgc3RyLmpvaW5gIGF0IHRoZSBlbmQgb3IgZWxzZSB3cml0ZSB0byBhbiA6Y2xhc3M6YGlvLlN0cmluZ0lPYAogICAgICBpbnN0YW5jZSBhbmQgcmV0cmlldmUgaXRzIHZhbHVlIHdoZW4gY29tcGxldGUKIAogICAgKiBpZiBjb25jYXRlbmF0aW5nIDpjbGFzczpgYnl0ZXNgIG9iamVjdHMsIHlvdSBjYW4gc2ltaWxhcmx5IHVzZQpAQCAtMTA2MSwxMCArMTA2MywxNCBAQAogfCBgYHMuY29weSgpYGAgICAgICAgICAgICAgICAgIHwgY3JlYXRlcyBhIHNoYWxsb3cgY29weSBvZiBgYHNgYHwgXCg1KSAgICAgICAgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoc2FtZSBhcyBgYHNbOl1gYCkgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBgYHMuZXh0ZW5kKHQpYGAgICAgICAgICAgICAgIHwgZXh0ZW5kcyAqcyogd2l0aCB0aGUgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb250ZW50cyBvZiAqdCogKHNhbWUgYXMgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKK3wgYGBzLmV4dGVuZCh0KWBgIG9yICAgICAgICAgICB8IGV4dGVuZHMgKnMqIHdpdGggdGhlICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorfCBgYHMgKz0gdGBgICAgICAgICAgICAgICAgICAgIHwgY29udGVudHMgb2YgKnQqIChmb3IgdGhlICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtb3N0IHBhcnQgdGhlIHNhbWUgYXMgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGBgc1tsZW4ocyk6bGVuKHMpXSA9IHRgYCkgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IGBgcyAqPSBuYGAgICAgICAgICAgICAgICAgICAgfCB1cGRhdGVzICpzKiB3aXRoIGl0cyBjb250ZW50cyAgfCBcKDYpICAgICAgICAgICAgICAgIHwKK3wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGVhdGVkICpuKiB0aW1lcyAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgcy5pbnNlcnQoaSwgeClgYCAgICAgICAgICAgfCBpbnNlcnRzICp4KiBpbnRvICpzKiBhdCB0aGUgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4IGdpdmVuIGJ5ICppKiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgYGBzW2k6aV0gPSBbeF1gYCkgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CkBAIC0xMTA1LDYgKzExMTEsMTIgQEAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogICAgICAgOm1ldGg6YGNsZWFyYCBhbmQgOm1ldGg6YCFjb3B5YCBtZXRob2RzLgogCisoNikKKyAgIFRoZSB2YWx1ZSAqbiogaXMgYW4gaW50ZWdlciwgb3IgYW4gb2JqZWN0IGltcGxlbWVudGluZworICAgOm1ldGg6YH5vYmplY3QuX19pbmRleF9fYC4gIFplcm8gYW5kIG5lZ2F0aXZlIHZhbHVlcyBvZiAqbiogY2xlYXIKKyAgIHRoZSBzZXF1ZW5jZS4gIEl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBhcmUgbm90IGNvcGllZDsgdGhleSBhcmUgcmVmZXJlbmNlZAorICAgbXVsdGlwbGUgdGltZXMsIGFzIGV4cGxhaW5lZCBmb3IgYGBzICogbmBgIHVuZGVyIDpyZWY6YHR5cGVzc2VxLWNvbW1vbmAuCisKIAogLi4gX3R5cGVzc2VxLWxpc3Q6CiAKQEAgLTE0OTMsNyArMTUwNSw5IEBACiAuLiBtZXRob2Q6OiBzdHIuY2VudGVyKHdpZHRoWywgZmlsbGNoYXJdKQogCiAgICBSZXR1cm4gY2VudGVyZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUKLSAgIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLgorICAgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUkgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzCisgICByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorCiAKIAogLi4gbWV0aG9kOjogc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pCkBAIC0xNTExLDcgKzE1MjUsNyBAQAogICAgYSA6ZXhjOmBVbmljb2RlRXJyb3JgLiBPdGhlciBwb3NzaWJsZQogICAgdmFsdWVzIGFyZSBgYCdpZ25vcmUnYGAsIGBgJ3JlcGxhY2UnYGAsIGBgJ3htbGNoYXJyZWZyZXBsYWNlJ2BgLAogICAgYGAnYmFja3NsYXNocmVwbGFjZSdgYCBhbmQgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB2aWEKLSAgIDpmdW5jOmBjb2RlY3MucmVnaXN0ZXJfZXJyb3JgLCBzZWUgc2VjdGlvbiA6cmVmOmBjb2RlYy1iYXNlLWNsYXNzZXNgLiBGb3IgYQorICAgOmZ1bmM6YGNvZGVjcy5yZWdpc3Rlcl9lcnJvcmAsIHNlZSBzZWN0aW9uIDpyZWY6YGVycm9yLWhhbmRsZXJzYC4gRm9yIGEKICAgIGxpc3Qgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiA6cmVmOmBzdGFuZGFyZC1lbmNvZGluZ3NgLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMQpAQCAtMTUyNiw3ICsxNTQwLDcgQEAKICAgIGF0IHRoYXQgcG9zaXRpb24uCiAKIAotLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnMoW3RhYnNpemVdKQorLi4gbWV0aG9kOjogc3RyLmV4cGFuZHRhYnModGFic2l6ZT04KQogCiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZCBieSBvbmUgb3IKICAgIG1vcmUgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgZ2l2ZW4gdGFiIHNpemUuICBUYWIKQEAgLTE1NDksMTAgKzE1NjMsOSBAQAogCiAuLiBtZXRob2Q6OiBzdHIuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKQogCi0gICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpcyBmb3VuZCwgc3VjaAotICAgdGhhdCAqc3ViKiBpcyBjb250YWluZWQgaW4gdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuICBPcHRpb25hbCBhcmd1bWVudHMKLSAgICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYKLSAgICpzdWIqIGlzIG5vdCBmb3VuZC4KKyAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzIGZvdW5kIHdpdGhpbgorICAgdGhlIHNsaWNlIGBgc1tzdGFydDplbmRdYGAuICBPcHRpb25hbCBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlCisgICBpbnRlcnByZXRlZCBhcyBpbiBzbGljZSBub3RhdGlvbi4gIFJldHVybiBgYC0xYGAgaWYgKnN1YiogaXMgbm90IGZvdW5kLgogCiAgICAuLiBub3RlOjoKIApAQCAtMTU5OCw3ICsxNjExLDggQEAKIAogLi4gbWV0aG9kOjogc3RyLmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pCiAKLSAgIExpa2UgOm1ldGg6YGZpbmRgLCBidXQgcmFpc2UgOmV4YzpgVmFsdWVFcnJvcmAgd2hlbiB0aGUgc3Vic3RyaW5nIGlzIG5vdCBmb3VuZC4KKyAgIExpa2UgOm1ldGg6YH5zdHIuZmluZGAsIGJ1dCByYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCB3aGVuIHRoZSBzdWJzdHJpbmcgaXMKKyAgIG5vdCBmb3VuZC4KIAogCiAuLiBtZXRob2Q6OiBzdHIuaXNhbG51bSgpCkBAIC0xNzAxLDkgKzE3MTUsOSBAQAogCiAuLiBtZXRob2Q6OiBzdHIubGp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pCiAKLSAgIFJldHVybiB0aGUgc3RyaW5nIGxlZnQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmUKLSAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhIHNwYWNlKS4gIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMKLSAgIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuCisgICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcworICAgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUkgc3BhY2UpLiBUaGUKKyAgIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgogCiAKIC4uIG1ldGhvZDo6IHN0ci5sb3dlcigpCkBAIC0xNzIwLDcgKzE3MzQsNyBAQAogICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggbGVhZGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGUgKmNoYXJzKgogICAgYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gIElmIG9taXR0ZWQKICAgIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyoKLSAgIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOgorICAgYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6OgogCiAgICAgICA+Pj4gJyAgIHNwYWNpb3VzICAgJy5sc3RyaXAoKQogICAgICAgJ3NwYWNpb3VzICAgJwpAQCAtMTc3Myw5ICsxNzg3LDkgQEAKIAogLi4gbWV0aG9kOjogc3RyLnJqdXN0KHdpZHRoWywgZmlsbGNoYXJdKQogCi0gICBSZXR1cm4gdGhlIHN0cmluZyByaWdodCBqdXN0aWZpZWQgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoICp3aWR0aCouIFBhZGRpbmcgaXMgZG9uZQotICAgdXNpbmcgdGhlIHNwZWNpZmllZCAqZmlsbGNoYXIqIChkZWZhdWx0IGlzIGEgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzCi0gICByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorICAgUmV0dXJuIHRoZSBzdHJpbmcgcmlnaHQganVzdGlmaWVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzCisgICBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhbiBBU0NJSSBzcGFjZSkuIFRoZQorICAgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuCiAKIAogLi4gbWV0aG9kOjogc3RyLnJwYXJ0aXRpb24oc2VwKQpAQCAtMTgwMCw3ICsxODE0LDcgQEAKICAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRyYWlsaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZSAqY2hhcnMqCiAgICBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZSByZW1vdmVkLiAgSWYgb21pdHRlZAogICAgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKgotICAgYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6CisgICBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDo6CiAKICAgICAgID4+PiAnICAgc3BhY2lvdXMgICAnLnJzdHJpcCgpCiAgICAgICAnICAgc3BhY2lvdXMnCkBAIC0xODIyLDYgKzE4MzYsMTUgQEAKICAgIChmb3IgZXhhbXBsZSwgYGAnMTw+Mjw+Mycuc3BsaXQoJzw+JylgYCByZXR1cm5zIGBgWycxJywgJzInLCAnMyddYGApLgogICAgU3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zIGBgWycnXWBgLgogCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiAnMSwyLDMnLnNwbGl0KCcsJykKKyAgICAgIFsnMScsICcyJywgJzMnXQorICAgICAgPj4+ICcxLDIsMycuc3BsaXQoJywnLCBtYXhzcGxpdD0xKQorICAgICAgWycxJywgJzIsMyddCisgICAgICA+Pj4gJzEsMiwsMywnLnNwbGl0KCcsJykKKyAgICAgIFsnMScsICcyJywgJycsICczJywgJyddCisKICAgIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3IgaXMgYGBOb25lYGAsIGEgZGlmZmVyZW50IHNwbGl0dGluZyBhbGdvcml0aG0gaXMKICAgIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWQgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLAogICAgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3MgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUKQEAgLTE4MjksOCArMTg1MiwxNCBAQAogICAgc3RyaW5nIG9yIGEgc3RyaW5nIGNvbnNpc3Rpbmcgb2YganVzdCB3aGl0ZXNwYWNlIHdpdGggYSBgYE5vbmVgYCBzZXBhcmF0b3IKICAgIHJldHVybnMgYGBbXWBgLgogCi0gICBGb3IgZXhhbXBsZSwgYGAnIDEgIDIgICAzICAnLnNwbGl0KClgYCByZXR1cm5zIGBgWycxJywgJzInLCAnMyddYGAsIGFuZAotICAgYGAnICAxICAyICAgMyAgJy5zcGxpdChOb25lLCAxKWBgIHJldHVybnMgYGBbJzEnLCAnMiAgIDMgICddYGAuCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiAnMSAyIDMnLnNwbGl0KCkKKyAgICAgIFsnMScsICcyJywgJzMnXQorICAgICAgPj4+ICcxIDIgMycuc3BsaXQobWF4c3BsaXQ9MSkKKyAgICAgIFsnMScsICcyIDMnXQorICAgICAgPj4+ICcgICAxICAgMiAgIDMgICAnLnNwbGl0KCkKKyAgICAgIFsnMScsICcyJywgJzMnXQogCiAKIC4uIGluZGV4OjoKQEAgLTE4MzgsMTggKzE4NjcsNjUgQEAKIAogLi4gbWV0aG9kOjogc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSkKIAotICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZSBib3VuZGFyaWVzLgotICAgVGhpcyBtZXRob2QgdXNlcyB0aGUgOnRlcm06YHVuaXZlcnNhbCBuZXdsaW5lc2AgYXBwcm9hY2ggdG8gc3BsaXR0aW5nIGxpbmVzLgotICAgTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3QgdW5sZXNzICprZWVwZW5kcyogaXMKLSAgIGdpdmVuIGFuZCB0cnVlLgorICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZSBib3VuZGFyaWVzLiAgTGluZQorICAgYnJlYWtzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdGluZyBsaXN0IHVubGVzcyAqa2VlcGVuZHMqIGlzIGdpdmVuIGFuZAorICAgdHJ1ZS4KIAotICAgRm9yIGV4YW1wbGUsIGBgJ2FiIGNcblxuZGUgZmdccmtsXHJcbicuc3BsaXRsaW5lcygpYGAgcmV0dXJucwotICAgYGBbJ2FiIGMnLCAnJywgJ2RlIGZnJywgJ2tsJ11gYCwgd2hpbGUgdGhlIHNhbWUgY2FsbCB3aXRoIGBgc3BsaXRsaW5lcyhUcnVlKWBgCi0gICByZXR1cm5zIGBgWydhYiBjXG4nLCAnXG4nLCAnZGUgZmdccicsICdrbFxyXG4nXWBgLgorICAgVGhpcyBtZXRob2Qgc3BsaXRzIG9uIHRoZSBmb2xsb3dpbmcgbGluZSBib3VuZGFyaWVzLiAgSW4gcGFydGljdWxhciwgdGhlCisgICBib3VuZGFyaWVzIGFyZSBhIHN1cGVyc2V0IG9mIDp0ZXJtOmB1bml2ZXJzYWwgbmV3bGluZXNgLgorCisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IFJlcHJlc2VudGF0aW9uICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICB8CisgICArPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCisgICB8IGBgXG5gYCAgICAgICAgICAgICAgICB8IExpbmUgRmVlZCAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXHJgYCAgICAgICAgICAgICAgICB8IENhcnJpYWdlIFJldHVybiAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXHJcbmBgICAgICAgICAgICAgICB8IENhcnJpYWdlIFJldHVybiArIExpbmUgRmVlZCB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXHZgYCBvciBgYFx4MGJgYCAgICB8IExpbmUgVGFidWxhdGlvbiAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXGZgYCBvciBgYFx4MGNgYCAgICB8IEZvcm0gRmVlZCAgICAgICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXHgxY2BgICAgICAgICAgICAgICB8IEZpbGUgU2VwYXJhdG9yICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXHgxZGBgICAgICAgICAgICAgICB8IEdyb3VwIFNlcGFyYXRvciAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXHgxZWBgICAgICAgICAgICAgICB8IFJlY29yZCBTZXBhcmF0b3IgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXHg4NWBgICAgICAgICAgICAgICB8IE5leHQgTGluZSAoQzEgQ29udHJvbCBDb2RlKSB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXHUyMDI4YGAgICAgICAgICAgICB8IExpbmUgU2VwYXJhdG9yICAgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICB8IGBgXHUyMDI5YGAgICAgICAgICAgICB8IFBhcmFncmFwaCBTZXBhcmF0b3IgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCisKKyAgICAgIGBgXHZgYCBhbmQgYGBcZmBgIGFkZGVkIHRvIGxpc3Qgb2YgbGluZSBib3VuZGFyaWVzLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiAnYWIgY1xuXG5kZSBmZ1xya2xcclxuJy5zcGxpdGxpbmVzKCkKKyAgICAgIFsnYWIgYycsICcnLCAnZGUgZmcnLCAna2wnXQorICAgICAgPj4+ICdhYiBjXG5cbmRlIGZnXHJrbFxyXG4nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkKKyAgICAgIFsnYWIgY1xuJywgJ1xuJywgJ2RlIGZnXHInLCAna2xcclxuJ10KIAogICAgVW5saWtlIDptZXRoOmB+c3RyLnNwbGl0YCB3aGVuIGEgZGVsaW1pdGVyIHN0cmluZyAqc2VwKiBpcyBnaXZlbiwgdGhpcwogICAgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgdGhlIGVtcHR5IHN0cmluZywgYW5kIGEgdGVybWluYWwgbGluZQotICAgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmUuCisgICBicmVhayBkb2VzIG5vdCByZXN1bHQgaW4gYW4gZXh0cmEgbGluZTo6CisKKyAgICAgID4+PiAiIi5zcGxpdGxpbmVzKCkKKyAgICAgIFtdCisgICAgICA+Pj4gIk9uZSBsaW5lXG4iLnNwbGl0bGluZXMoKQorICAgICAgWydPbmUgbGluZSddCisKKyAgIEZvciBjb21wYXJpc29uLCBgYHNwbGl0KCdcbicpYGAgZ2l2ZXM6OgorCisgICAgICA+Pj4gJycuc3BsaXQoJ1xuJykKKyAgICAgIFsnJ10KKyAgICAgID4+PiAnVHdvIGxpbmVzXG4nLnNwbGl0KCdcbicpCisgICAgICBbJ1R3byBsaW5lcycsICcnXQogCiAKIC4uIG1ldGhvZDo6IHN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pCkBAIC0xODY2LDcgKzE5NDIsNyBAQAogICAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4KICAgIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuCiAgICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzCi0gICB2YWx1ZXMgYXJlIHN0cmlwcGVkOgorICAgdmFsdWVzIGFyZSBzdHJpcHBlZDo6CiAKICAgICAgID4+PiAnICAgc3BhY2lvdXMgICAnLnN0cmlwKCkKICAgICAgICdzcGFjaW91cycKQEAgLTE4ODYsNiArMTk2MiwxMSBAQAogICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UKICAgIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuCiAKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+ICdIZWxsbyB3b3JsZCcudGl0bGUoKQorICAgICAgJ0hlbGxvIFdvcmxkJworCiAgICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhIHdvcmQgYXMKICAgIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW4gbWFueSBjb250ZXh0cyBidXQKICAgIGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZCBwb3NzZXNzaXZlcyBmb3JtIHdvcmQKQEAgLTE5MDcsMjEgKzE5ODgsMjIgQEAKICAgICAgICAgIlRoZXkncmUgQmlsbCdzIEZyaWVuZHMuIgogCiAKLS4uIG1ldGhvZDo6IHN0ci50cmFuc2xhdGUobWFwKQorLi4gbWV0aG9kOjogc3RyLnRyYW5zbGF0ZSh0YWJsZSkKIAotICAgUmV0dXJuIGEgY29weSBvZiB0aGUgKnMqIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWQgdGhyb3VnaCB0aGUKLSAgICptYXAqIHdoaWNoIG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIFVuaWNvZGUgb3JkaW5hbHMgKGludGVnZXJzKSB0byBVbmljb2RlCi0gICBvcmRpbmFscywgc3RyaW5ncyBvciBgYE5vbmVgYC4gIFVubWFwcGVkIGNoYXJhY3RlcnMgYXJlIGxlZnQgdW50b3VjaGVkLgotICAgQ2hhcmFjdGVycyBtYXBwZWQgdG8gYGBOb25lYGAgYXJlIGRlbGV0ZWQuCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgaW4gd2hpY2ggZWFjaCBjaGFyYWN0ZXIgaGFzIGJlZW4gbWFwcGVkIHRocm91Z2gKKyAgIHRoZSBnaXZlbiB0cmFuc2xhdGlvbiB0YWJsZS4gIFRoZSB0YWJsZSBtdXN0IGJlIGFuIG9iamVjdCB0aGF0IGltcGxlbWVudHMKKyAgIGluZGV4aW5nIHZpYSA6bWV0aDpgX19nZXRpdGVtX19gLCB0eXBpY2FsbHkgYSA6dGVybTpgbWFwcGluZ2Agb3IKKyAgIDp0ZXJtOmBzZXF1ZW5jZWAuICBXaGVuIGluZGV4ZWQgYnkgYSBVbmljb2RlIG9yZGluYWwgKGFuIGludGVnZXIpLCB0aGUKKyAgIHRhYmxlIG9iamVjdCBjYW4gZG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IHJldHVybiBhIFVuaWNvZGUgb3JkaW5hbCBvciBhCisgICBzdHJpbmcsIHRvIG1hcCB0aGUgY2hhcmFjdGVyIHRvIG9uZSBvciBtb3JlIG90aGVyIGNoYXJhY3RlcnM7IHJldHVybgorICAgYGBOb25lYGAsIHRvIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIGZyb20gdGhlIHJldHVybiBzdHJpbmc7IG9yIHJhaXNlIGEKKyAgIDpleGM6YExvb2t1cEVycm9yYCBleGNlcHRpb24sIHRvIG1hcCB0aGUgY2hhcmFjdGVyIHRvIGl0c2VsZi4KIAogICAgWW91IGNhbiB1c2UgOm1ldGg6YHN0ci5tYWtldHJhbnNgIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIG1hcCBmcm9tCiAgICBjaGFyYWN0ZXItdG8tY2hhcmFjdGVyIG1hcHBpbmdzIGluIGRpZmZlcmVudCBmb3JtYXRzLgogCi0gICAuLiBub3RlOjoKLQotICAgICAgQW4gZXZlbiBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIGlzIHRvIGNyZWF0ZSBhIGN1c3RvbSBjaGFyYWN0ZXIgbWFwcGluZwotICAgICAgY29kZWMgdXNpbmcgdGhlIDptb2Q6YGNvZGVjc2AgbW9kdWxlIChzZWUgOm1vZDpgZW5jb2RpbmdzLmNwMTI1MWAgZm9yIGFuCi0gICAgICBleGFtcGxlKS4KKyAgIFNlZSBhbHNvIHRoZSA6bW9kOmBjb2RlY3NgIG1vZHVsZSBmb3IgYSBtb3JlIGZsZXhpYmxlIGFwcHJvYWNoIHRvIGN1c3RvbQorICAgY2hhcmFjdGVyIG1hcHBpbmdzLgogCiAKIC4uIG1ldGhvZDo6IHN0ci51cHBlcigpCkBAIC0xOTM4LDkgKzIwMjAsMTggQEAKIAogLi4gbWV0aG9kOjogc3RyLnpmaWxsKHdpZHRoKQogCi0gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2YgbGVuZ3RoCi0gICAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMKLSAgIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHMpYGAuCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgbGVmdCBmaWxsZWQgd2l0aCBBU0NJSSBgYCcwJ2BgIGRpZ2l0cyB0bworICAgbWFrZSBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gQSBsZWFkaW5nIHNpZ24gcHJlZml4IChgYCcrJ2BgL2BgJy0nYGApCisgICBpcyBoYW5kbGVkIGJ5IGluc2VydGluZyB0aGUgcGFkZGluZyAqYWZ0ZXIqIHRoZSBzaWduIGNoYXJhY3RlciByYXRoZXIKKyAgIHRoYW4gYmVmb3JlLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuCisgICBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiAiNDIiLnpmaWxsKDUpCisgICAgICAnMDAwNDInCisgICAgICA+Pj4gIi00MiIuemZpbGwoNSkKKyAgICAgICctMDA0MicKIAogCiAKQEAgLTIxOTgsMTYgKzIyODksMjggQEAKIAogQWxzbyBzZWUgdGhlIDpyZWY6YGJ5dGVzIDxmdW5jLWJ5dGVzPmAgYnVpbHQtaW4uCiAKLVNpbmNlIGJ5dGVzIG9iamVjdHMgYXJlIHNlcXVlbmNlcyBvZiBpbnRlZ2VycywgZm9yIGEgYnl0ZXMgb2JqZWN0ICpiKiwKLWBgYlswXWBgIHdpbGwgYmUgYW4gaW50ZWdlciwgd2hpbGUgYGBiWzA6MV1gYCB3aWxsIGJlIGEgYnl0ZXMgb2JqZWN0IG9mCi1sZW5ndGggMS4gIChUaGlzIGNvbnRyYXN0cyB3aXRoIHRleHQgc3RyaW5ncywgd2hlcmUgYm90aCBpbmRleGluZyBhbmQKLXNsaWNpbmcgd2lsbCBwcm9kdWNlIGEgc3RyaW5nIG9mIGxlbmd0aCAxKQorU2luY2UgMiBoZXhhZGVjaW1hbCBkaWdpdHMgY29ycmVzcG9uZCBwcmVjaXNlbHkgdG8gYSBzaW5nbGUgYnl0ZSwgaGV4YWRlY2ltYWwKK251bWJlcnMgYXJlIGEgY29tbW9ubHkgdXNlZCBmb3JtYXQgZm9yIGRlc2NyaWJpbmcgYmluYXJ5IGRhdGEuIEFjY29yZGluZ2x5LAordGhlIGJ5dGVzIHR5cGUgaGFzIGFuIGFkZGl0aW9uYWwgY2xhc3MgbWV0aG9kIHRvIHJlYWQgZGF0YSBpbiB0aGF0IGZvcm1hdDoKKworLi4gY2xhc3NtZXRob2Q6OiBieXRlcy5mcm9taGV4KHN0cmluZykKKworICAgVGhpcyA6Y2xhc3M6YGJ5dGVzYCBjbGFzcyBtZXRob2QgcmV0dXJucyBhIGJ5dGVzIG9iamVjdCwgZGVjb2RpbmcgdGhlCisgICBnaXZlbiBzdHJpbmcgb2JqZWN0LiAgVGhlIHN0cmluZyBtdXN0IGNvbnRhaW4gdHdvIGhleGFkZWNpbWFsIGRpZ2l0cyBwZXIKKyAgIGJ5dGUsIHdpdGggQVNDSUkgc3BhY2VzIGJlaW5nIGlnbm9yZWQuCisKKyAgID4+PiBieXRlcy5mcm9taGV4KCcyRWYwIEYxZjIgICcpCisgICBiJy5ceGYwXHhmMVx4ZjInCisKK1NpbmNlIGJ5dGVzIG9iamVjdHMgYXJlIHNlcXVlbmNlcyBvZiBpbnRlZ2VycyAoYWtpbiB0byBhIHR1cGxlKSwgZm9yIGEgYnl0ZXMKK29iamVjdCAqYiosIGBgYlswXWBgIHdpbGwgYmUgYW4gaW50ZWdlciwgd2hpbGUgYGBiWzA6MV1gYCB3aWxsIGJlIGEgYnl0ZXMKK29iamVjdCBvZiBsZW5ndGggMS4gIChUaGlzIGNvbnRyYXN0cyB3aXRoIHRleHQgc3RyaW5ncywgd2hlcmUgYm90aCBpbmRleGluZworYW5kIHNsaWNpbmcgd2lsbCBwcm9kdWNlIGEgc3RyaW5nIG9mIGxlbmd0aCAxKQogCiBUaGUgcmVwcmVzZW50YXRpb24gb2YgYnl0ZXMgb2JqZWN0cyB1c2VzIHRoZSBsaXRlcmFsIGZvcm1hdCAoYGBiJy4uLidgYCkKIHNpbmNlIGl0IGlzIG9mdGVuIG1vcmUgdXNlZnVsIHRoYW4gZS5nLiBgYGJ5dGVzKFs0NiwgNDYsIDQ2XSlgYC4gIFlvdSBjYW4KIGFsd2F5cyBjb252ZXJ0IGEgYnl0ZXMgb2JqZWN0IGludG8gYSBsaXN0IG9mIGludGVnZXJzIHVzaW5nIGBgbGlzdChiKWBgLgogCi0KIC4uIG5vdGU6OgogICAgRm9yIFB5dGhvbiAyLnggdXNlcnM6IEluIHRoZSBQeXRob24gMi54IHNlcmllcywgYSB2YXJpZXR5IG9mIGltcGxpY2l0CiAgICBjb252ZXJzaW9ucyBiZXR3ZWVuIDgtYml0IHN0cmluZ3MgKHRoZSBjbG9zZXN0IHRoaW5nIDIueCBvZmZlcnMgdG8gYQpAQCAtMjI0MSw2ICsyMzQ0LDI5IEBACiAKIEFsc28gc2VlIHRoZSA6cmVmOmBieXRlYXJyYXkgPGZ1bmMtYnl0ZWFycmF5PmAgYnVpbHQtaW4uCiAKK1NpbmNlIDIgaGV4YWRlY2ltYWwgZGlnaXRzIGNvcnJlc3BvbmQgcHJlY2lzZWx5IHRvIGEgc2luZ2xlIGJ5dGUsIGhleGFkZWNpbWFsCitudW1iZXJzIGFyZSBhIGNvbW1vbmx5IHVzZWQgZm9ybWF0IGZvciBkZXNjcmliaW5nIGJpbmFyeSBkYXRhLiBBY2NvcmRpbmdseSwKK3RoZSBieXRlYXJyYXkgdHlwZSBoYXMgYW4gYWRkaXRpb25hbCBjbGFzcyBtZXRob2QgdG8gcmVhZCBkYXRhIGluIHRoYXQgZm9ybWF0OgorCisuLiBjbGFzc21ldGhvZDo6IGJ5dGVhcnJheS5mcm9taGV4KHN0cmluZykKKworICAgVGhpcyA6Y2xhc3M6YGJ5dGVhcnJheWAgY2xhc3MgbWV0aG9kIHJldHVybnMgYnl0ZWFycmF5IG9iamVjdCwgZGVjb2RpbmcKKyAgIHRoZSBnaXZlbiBzdHJpbmcgb2JqZWN0LiAgVGhlIHN0cmluZyBtdXN0IGNvbnRhaW4gdHdvIGhleGFkZWNpbWFsIGRpZ2l0cworICAgcGVyIGJ5dGUsIHdpdGggQVNDSUkgc3BhY2VzIGJlaW5nIGlnbm9yZWQuCisKKyAgID4+PiBieXRlYXJyYXkuZnJvbWhleCgnMkVmMCBGMWYyICAnKQorICAgYnl0ZWFycmF5KGInLlx4ZjBceGYxXHhmMicpCisKK1NpbmNlIGJ5dGVhcnJheSBvYmplY3RzIGFyZSBzZXF1ZW5jZXMgb2YgaW50ZWdlcnMgKGFraW4gdG8gYSBsaXN0KSwgZm9yIGEKK2J5dGVhcnJheSBvYmplY3QgKmIqLCBgYGJbMF1gYCB3aWxsIGJlIGFuIGludGVnZXIsIHdoaWxlIGBgYlswOjFdYGAgd2lsbCBiZQorYSBieXRlYXJyYXkgb2JqZWN0IG9mIGxlbmd0aCAxLiAgKFRoaXMgY29udHJhc3RzIHdpdGggdGV4dCBzdHJpbmdzLCB3aGVyZQorYm90aCBpbmRleGluZyBhbmQgc2xpY2luZyB3aWxsIHByb2R1Y2UgYSBzdHJpbmcgb2YgbGVuZ3RoIDEpCisKK1RoZSByZXByZXNlbnRhdGlvbiBvZiBieXRlYXJyYXkgb2JqZWN0cyB1c2VzIHRoZSBieXRlcyBsaXRlcmFsIGZvcm1hdAorKGBgYnl0ZWFycmF5KGInLi4uJylgYCkgc2luY2UgaXQgaXMgb2Z0ZW4gbW9yZSB1c2VmdWwgdGhhbiBlLmcuCitgYGJ5dGVhcnJheShbNDYsIDQ2LCA0Nl0pYGAuICBZb3UgY2FuIGFsd2F5cyBjb252ZXJ0IGEgYnl0ZWFycmF5IG9iamVjdCBpbnRvCithIGxpc3Qgb2YgaW50ZWdlcnMgdXNpbmcgYGBsaXN0KGIpYGAuCisKIAogLi4gX2J5dGVzLW1ldGhvZHM6CiAKQEAgLTIyNTIsMjUgKzIzNzgsMTAgQEAKIAogQm90aCBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgc3VwcG9ydCB0aGUgOnJlZjpgY29tbW9uIDx0eXBlc3NlcS1jb21tb24+YAogc2VxdWVuY2Ugb3BlcmF0aW9ucy4gVGhleSBpbnRlcm9wZXJhdGUgbm90IGp1c3Qgd2l0aCBvcGVyYW5kcyBvZiB0aGUgc2FtZQotdHlwZSwgYnV0IHdpdGggYW55IG9iamVjdCB0aGF0IHN1cHBvcnRzIHRoZQotOnJlZjpgYnVmZmVyIHByb3RvY29sIDxidWZmZXJvYmplY3RzPmAuIER1ZSB0byB0aGlzIGZsZXhpYmlsaXR5LCB0aGV5IGNhbiBiZQordHlwZSwgYnV0IHdpdGggYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuIER1ZSB0byB0aGlzIGZsZXhpYmlsaXR5LCB0aGV5IGNhbiBiZQogZnJlZWx5IG1peGVkIGluIG9wZXJhdGlvbnMgd2l0aG91dCBjYXVzaW5nIGVycm9ycy4gSG93ZXZlciwgdGhlIHJldHVybiB0eXBlCiBvZiB0aGUgcmVzdWx0IG1heSBkZXBlbmQgb24gdGhlIG9yZGVyIG9mIG9wZXJhbmRzLgogCi1EdWUgdG8gdGhlIGNvbW1vbiB1c2Ugb2YgQVNDSUkgdGV4dCBhcyB0aGUgYmFzaXMgZm9yIGJpbmFyeSBwcm90b2NvbHMsIGJ5dGVzCi1hbmQgYnl0ZWFycmF5IG9iamVjdHMgcHJvdmlkZSBhbG1vc3QgYWxsIG1ldGhvZHMgZm91bmQgb24gdGV4dCBzdHJpbmdzLCB3aXRoCi10aGUgZXhjZXB0aW9ucyBvZjoKLQotKiA6bWV0aDpgc3RyLmVuY29kZWAgKHdoaWNoIGNvbnZlcnRzIHRleHQgc3RyaW5ncyB0byBieXRlcyBvYmplY3RzKQotKiA6bWV0aDpgc3RyLmZvcm1hdGAgYW5kIDptZXRoOmBzdHIuZm9ybWF0X21hcGAgKHdoaWNoIGFyZSB1c2VkIHRvIGZvcm1hdAotICB0ZXh0IGZvciBkaXNwbGF5IHRvIHVzZXJzKQotKiA6bWV0aDpgc3RyLmlzaWRlbnRpZmllcmAsIDptZXRoOmBzdHIuaXNudW1lcmljYCwgOm1ldGg6YHN0ci5pc2RlY2ltYWxgLAotICA6bWV0aDpgc3RyLmlzcHJpbnRhYmxlYCAod2hpY2ggYXJlIHVzZWQgdG8gY2hlY2sgdmFyaW91cyBwcm9wZXJ0aWVzIG9mCi0gIHRleHQgc3RyaW5ncyB3aGljaCBhcmUgbm90IHR5cGljYWxseSBhcHBsaWNhYmxlIHRvIGJpbmFyeSBwcm90b2NvbHMpLgotCi1BbGwgb3RoZXIgc3RyaW5nIG1ldGhvZHMgYXJlIHN1cHBvcnRlZCwgYWx0aG91Z2ggc29tZXRpbWVzIHdpdGggc2xpZ2h0Ci1kaWZmZXJlbmNlcyBpbiBmdW5jdGlvbmFsaXR5IGFuZCBzZW1hbnRpY3MgKGFzIGRlc2NyaWJlZCBiZWxvdykuCi0KIC4uIG5vdGU6OgogCiAgICBUaGUgbWV0aG9kcyBvbiBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgZG9uJ3QgYWNjZXB0IHN0cmluZ3MgYXMgdGhlaXIKQEAgLTIyODUsMjUgKzIzOTYsMzAgQEAKICAgICAgIGEgPSBiImFiYyIKICAgICAgIGIgPSBhLnJlcGxhY2UoYiJhIiwgYiJmIikKIAotV2hlbmV2ZXIgYSBieXRlcyBvciBieXRlYXJyYXkgbWV0aG9kIG5lZWRzIHRvIGludGVycHJldCB0aGUgYnl0ZXMgYXMKLWNoYXJhY3RlcnMgKGUuZy4gdGhlIDptZXRoOmBpcy4uLmAgbWV0aG9kcywgOm1ldGg6YHNwbGl0YCwgOm1ldGg6YHN0cmlwYCksCi10aGUgQVNDSUkgY2hhcmFjdGVyIHNldCBpcyBhc3N1bWVkICh0ZXh0IHN0cmluZ3MgdXNlIFVuaWNvZGUgc2VtYW50aWNzKS4KK1NvbWUgYnl0ZXMgYW5kIGJ5dGVhcnJheSBvcGVyYXRpb25zIGFzc3VtZSB0aGUgdXNlIG9mIEFTQ0lJIGNvbXBhdGlibGUKK2JpbmFyeSBmb3JtYXRzLCBhbmQgaGVuY2Ugc2hvdWxkIGJlIGF2b2lkZWQgd2hlbiB3b3JraW5nIHdpdGggYXJiaXRyYXJ5CitiaW5hcnkgZGF0YS4gVGhlc2UgcmVzdHJpY3Rpb25zIGFyZSBjb3ZlcmVkIGJlbG93LgogCiAuLiBub3RlOjoKLSAgIFVzaW5nIHRoZXNlIEFTQ0lJIGJhc2VkIG1ldGhvZHMgdG8gbWFuaXB1bGF0ZSBiaW5hcnkgZGF0YSB0aGF0IGlzIG5vdAorICAgVXNpbmcgdGhlc2UgQVNDSUkgYmFzZWQgb3BlcmF0aW9ucyB0byBtYW5pcHVsYXRlIGJpbmFyeSBkYXRhIHRoYXQgaXMgbm90CiAgICBzdG9yZWQgaW4gYW4gQVNDSUkgYmFzZWQgZm9ybWF0IG1heSBsZWFkIHRvIGRhdGEgY29ycnVwdGlvbi4KIAotVGhlIHNlYXJjaCBvcGVyYXRpb25zICg6a2V5d29yZDpgaW5gLCA6bWV0aDpgY291bnRgLCA6bWV0aDpgZmluZGAsCi06bWV0aDpgaW5kZXhgLCA6bWV0aDpgcmZpbmRgIGFuZCA6bWV0aDpgcmluZGV4YCkgYWxsIGFjY2VwdCBib3RoIGludGVnZXJzCi1pbiB0aGUgcmFuZ2UgMCB0byAyNTUgKGluY2x1c2l2ZSkgYXMgd2VsbCBhcyBieXRlcyBhbmQgYnl0ZSBhcnJheSBzZXF1ZW5jZXMuCitUaGUgZm9sbG93aW5nIG1ldGhvZHMgb24gYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIGNhbiBiZSB1c2VkIHdpdGgKK2FyYml0cmFyeSBiaW5hcnkgZGF0YS4KIAotLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgIEFsbCBvZiB0aGUgc2VhcmNoIG1ldGhvZHMgYWxzbyBhY2NlcHQgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUKLSAgIChpbmNsdXNpdmUpIGFzIHRoZWlyIGZpcnN0IGFyZ3VtZW50LgorLi4gbWV0aG9kOjogYnl0ZXMuY291bnQoc3ViWywgc3RhcnRbLCBlbmRdXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKQogCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2Ygc3Vic2VxdWVuY2UgKnN1YiogaW4KKyAgIHRoZSByYW5nZSBbKnN0YXJ0KiwgKmVuZCpdLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZQorICAgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uCiAKLUVhY2ggYnl0ZXMgYW5kIGJ5dGVhcnJheSBpbnN0YW5jZSBwcm92aWRlcyBhIDptZXRoOmB+Ynl0ZXMuZGVjb2RlYCBjb252ZW5pZW5jZQotbWV0aG9kIHRoYXQgaXMgdGhlIGludmVyc2Ugb2YgOm1ldGg6YHN0ci5lbmNvZGVgOgorICAgVGhlIHN1YnNlcXVlbmNlIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIGFuCisgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFsc28gYWNjZXB0IGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1IGFzIHRoZSBzdWJzZXF1ZW5jZS4KKwogCiAuLiBtZXRob2Q6OiBieXRlcy5kZWNvZGUoZW5jb2Rpbmc9InV0Zi04IiwgZXJyb3JzPSJzdHJpY3QiKQogICAgICAgICAgICAgYnl0ZWFycmF5LmRlY29kZShlbmNvZGluZz0idXRmLTgiLCBlcnJvcnM9InN0cmljdCIpCkBAIC0yMzEzLDQwICsyNDI5LDE3OCBAQAogICAgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiAgVGhlIGRlZmF1bHQgZm9yICplcnJvcnMqIGlzIGBgJ3N0cmljdCdgYCwgbWVhbmluZwogICAgdGhhdCBlbmNvZGluZyBlcnJvcnMgcmFpc2UgYSA6ZXhjOmBVbmljb2RlRXJyb3JgLiAgT3RoZXIgcG9zc2libGUgdmFsdWVzIGFyZQogICAgYGAnaWdub3JlJ2BgLCBgYCdyZXBsYWNlJ2BgIGFuZCBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYQotICAgOmZ1bmM6YGNvZGVjcy5yZWdpc3Rlcl9lcnJvcmAsIHNlZSBzZWN0aW9uIDpyZWY6YGNvZGVjLWJhc2UtY2xhc3Nlc2AuIEZvciBhCisgICA6ZnVuYzpgY29kZWNzLnJlZ2lzdGVyX2Vycm9yYCwgc2VlIHNlY3Rpb24gOnJlZjpgZXJyb3ItaGFuZGxlcnNgLiBGb3IgYQogICAgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZSBzZWN0aW9uIDpyZWY6YHN0YW5kYXJkLWVuY29kaW5nc2AuCiAKKyAgIC4uIG5vdGU6OgorCisgICAgICBQYXNzaW5nIHRoZSAqZW5jb2RpbmcqIGFyZ3VtZW50IHRvIDpjbGFzczpgc3RyYCBhbGxvd3MgZGVjb2RpbmcgYW55CisgICAgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGRpcmVjdGx5LCB3aXRob3V0IG5lZWRpbmcgdG8gbWFrZSBhIHRlbXBvcmFyeQorICAgICAgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdC4KKwogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGtleXdvcmQgYXJndW1lbnRzLgogCi1TaW5jZSAyIGhleGFkZWNpbWFsIGRpZ2l0cyBjb3JyZXNwb25kIHByZWNpc2VseSB0byBhIHNpbmdsZSBieXRlLCBoZXhhZGVjaW1hbAotbnVtYmVycyBhcmUgYSBjb21tb25seSB1c2VkIGZvcm1hdCBmb3IgZGVzY3JpYmluZyBiaW5hcnkgZGF0YS4gQWNjb3JkaW5nbHksCi10aGUgYnl0ZXMgYW5kIGJ5dGVhcnJheSB0eXBlcyBoYXZlIGFuIGFkZGl0aW9uYWwgY2xhc3MgbWV0aG9kIHRvIHJlYWQgZGF0YSBpbgotdGhhdCBmb3JtYXQ6CiAKLS4uIGNsYXNzbWV0aG9kOjogYnl0ZXMuZnJvbWhleChzdHJpbmcpCi0gICAgICAgICAgICAgICAgIGJ5dGVhcnJheS5mcm9taGV4KHN0cmluZykKKy4uIG1ldGhvZDo6IGJ5dGVzLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pCisgICAgICAgICAgICBieXRlYXJyYXkuZW5kc3dpdGgoc3VmZml4Wywgc3RhcnRbLCBlbmRdXSkKIAotICAgVGhpcyA6Y2xhc3M6YGJ5dGVzYCBjbGFzcyBtZXRob2QgcmV0dXJucyBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3QsCi0gICBkZWNvZGluZyB0aGUgZ2l2ZW4gc3RyaW5nIG9iamVjdC4gIFRoZSBzdHJpbmcgbXVzdCBjb250YWluIHR3byBoZXhhZGVjaW1hbAotICAgZGlnaXRzIHBlciBieXRlLCBzcGFjZXMgYXJlIGlnbm9yZWQuCisgICBSZXR1cm4gYGBUcnVlYGAgaWYgdGhlIGJpbmFyeSBkYXRhIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkICpzdWZmaXgqLAorICAgb3RoZXJ3aXNlIHJldHVybiBgYEZhbHNlYGAuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHN1ZmZpeGVzIHRvCisgICBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXQgdGhhdCBwb3NpdGlvbi4gIFdpdGgKKyAgIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0IHBvc2l0aW9uLgogCi0gICA+Pj4gYnl0ZXMuZnJvbWhleCgnMkVmMCBGMWYyICAnKQotICAgYicuXHhmMFx4ZjFceGYyJworICAgVGhlIHN1ZmZpeChlcykgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCiAKIAotVGhlIG1ha2V0cmFucyBhbmQgdHJhbnNsYXRlIG1ldGhvZHMgZGlmZmVyIGluIHNlbWFudGljcyBmcm9tIHRoZSB2ZXJzaW9ucwotYXZhaWxhYmxlIG9uIHN0cmluZ3M6CisuLiBtZXRob2Q6OiBieXRlcy5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pCisgICAgICAgICAgICBieXRlYXJyYXkuZmluZChzdWJbLCBzdGFydFssIGVuZF1dKQorCisgICBSZXR1cm4gdGhlIGxvd2VzdCBpbmRleCBpbiB0aGUgZGF0YSB3aGVyZSB0aGUgc3Vic2VxdWVuY2UgKnN1YiogaXMgZm91bmQsCisgICBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIGluIHRoZSBzbGljZSBgYHNbc3RhcnQ6ZW5kXWBgLiAgT3B0aW9uYWwKKyAgIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uICBSZXR1cm4KKyAgIGBgLTFgYCBpZiAqc3ViKiBpcyBub3QgZm91bmQuCisKKyAgIFRoZSBzdWJzZXF1ZW5jZSB0byBzZWFyY2ggZm9yIG1heSBiZSBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBvciBhbgorICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgOm1ldGg6YH5ieXRlcy5maW5kYCBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgb25seSBpZiB5b3UgbmVlZCB0byBrbm93IHRoZQorICAgICAgcG9zaXRpb24gb2YgKnN1YiouICBUbyBjaGVjayBpZiAqc3ViKiBpcyBhIHN1YnN0cmluZyBvciBub3QsIHVzZSB0aGUKKyAgICAgIDprZXl3b3JkOmBpbmAgb3BlcmF0b3I6OgorCisgICAgICAgICA+Pj4gYidQeScgaW4gYidQeXRob24nCisgICAgICAgICBUcnVlCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCisgICAgICBBbHNvIGFjY2VwdCBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NSBhcyB0aGUgc3Vic2VxdWVuY2UuCisKKworLi4gbWV0aG9kOjogYnl0ZXMuaW5kZXgoc3ViWywgc3RhcnRbLCBlbmRdXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKQorCisgICBMaWtlIDptZXRoOmB+Ynl0ZXMuZmluZGAsIGJ1dCByYWlzZSA6ZXhjOmBWYWx1ZUVycm9yYCB3aGVuIHRoZQorICAgc3Vic2VxdWVuY2UgaXMgbm90IGZvdW5kLgorCisgICBUaGUgc3Vic2VxdWVuY2UgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgYW4KKyAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgQWxzbyBhY2NlcHQgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUgYXMgdGhlIHN1YnNlcXVlbmNlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmpvaW4oaXRlcmFibGUpCisgICAgICAgICAgICBieXRlYXJyYXkuam9pbihpdGVyYWJsZSkKKworICAgUmV0dXJuIGEgYnl0ZXMgb3IgYnl0ZWFycmF5IG9iamVjdCB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUKKyAgIGJpbmFyeSBkYXRhIHNlcXVlbmNlcyBpbiB0aGUgOnRlcm06YGl0ZXJhYmxlYCAqaXRlcmFibGUqLiAgQQorICAgOmV4YzpgVHlwZUVycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiB0aGVyZSBhcmUgYW55IHZhbHVlcyBpbiAqaXRlcmFibGUqCisgICB0aGF0IGFyZSBub3QgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCwgaW5jbHVkaW5nCisgICA6Y2xhc3M6YHN0cmAgb2JqZWN0cy4gIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGUgY29udGVudHMKKyAgIG9mIHRoZSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0IHByb3ZpZGluZyB0aGlzIG1ldGhvZC4KKworCisuLiBzdGF0aWNtZXRob2Q6OiBieXRlcy5tYWtldHJhbnMoZnJvbSwgdG8pCisgICAgICAgICAgICAgICAgICBieXRlYXJyYXkubWFrZXRyYW5zKGZyb20sIHRvKQorCisgICBUaGlzIHN0YXRpYyBtZXRob2QgcmV0dXJucyBhIHRyYW5zbGF0aW9uIHRhYmxlIHVzYWJsZSBmb3IKKyAgIDptZXRoOmBieXRlcy50cmFuc2xhdGVgIHRoYXQgd2lsbCBtYXAgZWFjaCBjaGFyYWN0ZXIgaW4gKmZyb20qIGludG8gdGhlCisgICBjaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4gKnRvKjsgKmZyb20qIGFuZCAqdG8qIG11c3QgYm90aCBiZQorICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0cyA8Ynl0ZXMtbGlrZSBvYmplY3Q+YCBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnBhcnRpdGlvbihzZXApCisgICAgICAgICAgICBieXRlYXJyYXkucGFydGl0aW9uKHNlcCkKKworICAgU3BsaXQgdGhlIHNlcXVlbmNlIGF0IHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGEgMy10dXBsZQorICAgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvciwgYW5kIHRoZSBwYXJ0CisgICBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3QgZm91bmQsIHJldHVybiBhIDMtdHVwbGUKKyAgIGNvbnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSwgZm9sbG93ZWQgYnkgdHdvIGVtcHR5IGJ5dGVzIG9yCisgICBieXRlYXJyYXkgb2JqZWN0cy4KKworICAgVGhlIHNlcGFyYXRvciB0byBzZWFyY2ggZm9yIG1heSBiZSBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKworCisuLiBtZXRob2Q6OiBieXRlcy5yZXBsYWNlKG9sZCwgbmV3WywgY291bnRdKQorICAgICAgICAgICAgYnl0ZWFycmF5LnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlIHdpdGggYWxsIG9jY3VycmVuY2VzIG9mIHN1YnNlcXVlbmNlICpvbGQqCisgICByZXBsYWNlZCBieSAqbmV3Ki4gIElmIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqY291bnQqIGlzIGdpdmVuLCBvbmx5IHRoZQorICAgZmlyc3QgKmNvdW50KiBvY2N1cnJlbmNlcyBhcmUgcmVwbGFjZWQuCisKKyAgIFRoZSBzdWJzZXF1ZW5jZSB0byBzZWFyY2ggZm9yIGFuZCBpdHMgcmVwbGFjZW1lbnQgbWF5IGJlIGFueQorICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLSBpdAorICAgICAgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5yZmluZChzdWJbLCBzdGFydFssIGVuZF1dKQorICAgICAgICAgICAgYnl0ZWFycmF5LnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pCisKKyAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc2VxdWVuY2Ugd2hlcmUgdGhlIHN1YnNlcXVlbmNlICpzdWIqIGlzCisgICBmb3VuZCwgc3VjaCB0aGF0ICpzdWIqIGlzIGNvbnRhaW5lZCB3aXRoaW4gYGBzW3N0YXJ0OmVuZF1gYC4gIE9wdGlvbmFsCisgICBhcmd1bWVudHMgKnN0YXJ0KiBhbmQgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLiBSZXR1cm4KKyAgIGBgLTFgYCBvbiBmYWlsdXJlLgorCisgICBUaGUgc3Vic2VxdWVuY2UgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgb3IgYW4KKyAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMworICAgICAgQWxzbyBhY2NlcHQgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMCB0byAyNTUgYXMgdGhlIHN1YnNlcXVlbmNlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKQorICAgICAgICAgICAgYnl0ZWFycmF5LnJpbmRleChzdWJbLCBzdGFydFssIGVuZF1dKQorCisgICBMaWtlIDptZXRoOmB+Ynl0ZXMucmZpbmRgIGJ1dCByYWlzZXMgOmV4YzpgVmFsdWVFcnJvcmAgd2hlbiB0aGUKKyAgIHN1YnNlcXVlbmNlICpzdWIqIGlzIG5vdCBmb3VuZC4KKworICAgVGhlIHN1YnNlcXVlbmNlIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIG9yIGFuCisgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKKyAgICAgIEFsc28gYWNjZXB0IGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDAgdG8gMjU1IGFzIHRoZSBzdWJzZXF1ZW5jZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5ycGFydGl0aW9uKHNlcCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5ycGFydGl0aW9uKHNlcCkKKworICAgU3BsaXQgdGhlIHNlcXVlbmNlIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYSAzLXR1cGxlCisgICBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yLCBhbmQgdGhlIHBhcnQKKyAgIGFmdGVyIHRoZSBzZXBhcmF0b3IuICBJZiB0aGUgc2VwYXJhdG9yIGlzIG5vdCBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZQorICAgY29udGFpbmluZyBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIHNlcXVlbmNlLCBmb2xsb3dlZCBieSB0d28gZW1wdHkgYnl0ZXMgb3IKKyAgIGJ5dGVhcnJheSBvYmplY3RzLgorCisgICBUaGUgc2VwYXJhdG9yIHRvIHNlYXJjaCBmb3IgbWF5IGJlIGFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pCisKKyAgIFJldHVybiBgYFRydWVgYCBpZiB0aGUgYmluYXJ5IGRhdGEgc3RhcnRzIHdpdGggdGhlIHNwZWNpZmllZCAqcHJlZml4KiwKKyAgIG90aGVyd2lzZSByZXR1cm4gYGBGYWxzZWBgLiAgKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0bworICAgbG9vayBmb3IuICBXaXRoIG9wdGlvbmFsICpzdGFydCosIHRlc3QgYmVnaW5uaW5nIGF0IHRoYXQgcG9zaXRpb24uICBXaXRoCisgICBvcHRpb25hbCAqZW5kKiwgc3RvcCBjb21wYXJpbmcgYXQgdGhhdCBwb3NpdGlvbi4KKworICAgVGhlIHByZWZpeChlcykgdG8gc2VhcmNoIGZvciBtYXkgYmUgYW55IDp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAuCisKIAogLi4gbWV0aG9kOjogYnl0ZXMudHJhbnNsYXRlKHRhYmxlWywgZGVsZXRlXSkKICAgICAgICAgICAgIGJ5dGVhcnJheS50cmFuc2xhdGUodGFibGVbLCBkZWxldGVdKQogCiAgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBieXRlcyBvciBieXRlYXJyYXkgb2JqZWN0IHdoZXJlIGFsbCBieXRlcyBvY2N1cnJpbmcgaW4KLSAgIHRoZSBvcHRpb25hbCBhcmd1bWVudCAqZGVsZXRlKiBhcmUgcmVtb3ZlZCwgYW5kIHRoZSByZW1haW5pbmcgYnl0ZXMgaGF2ZSBiZWVuCi0gICBtYXBwZWQgdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUsIHdoaWNoIG11c3QgYmUgYSBieXRlcyBvYmplY3Qgb2YKLSAgIGxlbmd0aCAyNTYuCisgICB0aGUgb3B0aW9uYWwgYXJndW1lbnQgKmRlbGV0ZSogYXJlIHJlbW92ZWQsIGFuZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGhhdmUKKyAgIGJlZW4gbWFwcGVkIHRocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLCB3aGljaCBtdXN0IGJlIGEgYnl0ZXMKKyAgIG9iamVjdCBvZiBsZW5ndGggMjU2LgogCi0gICBZb3UgY2FuIHVzZSB0aGUgOmZ1bmM6YGJ5dGVzLm1ha2V0cmFuc2AgbWV0aG9kIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIHRhYmxlLgorICAgWW91IGNhbiB1c2UgdGhlIDpmdW5jOmBieXRlcy5tYWtldHJhbnNgIG1ldGhvZCB0byBjcmVhdGUgYSB0cmFuc2xhdGlvbgorICAgdGFibGUuCiAKICAgIFNldCB0aGUgKnRhYmxlKiBhcmd1bWVudCB0byBgYE5vbmVgYCBmb3IgdHJhbnNsYXRpb25zIHRoYXQgb25seSBkZWxldGUKICAgIGNoYXJhY3RlcnM6OgpAQCAtMjM1NSwxNSArMjYwOSw0OTcgQEAKICAgICAgIGIncmQgdGhzIHNocnQgdHh0JwogCiAKLS4uIHN0YXRpY21ldGhvZDo6IGJ5dGVzLm1ha2V0cmFucyhmcm9tLCB0bykKLSAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheS5tYWtldHJhbnMoZnJvbSwgdG8pCitUaGUgZm9sbG93aW5nIG1ldGhvZHMgb24gYnl0ZXMgYW5kIGJ5dGVhcnJheSBvYmplY3RzIGhhdmUgZGVmYXVsdCBiZWhhdmlvdXJzCit0aGF0IGFzc3VtZSB0aGUgdXNlIG9mIEFTQ0lJIGNvbXBhdGlibGUgYmluYXJ5IGZvcm1hdHMsIGJ1dCBjYW4gc3RpbGwgYmUgdXNlZAord2l0aCBhcmJpdHJhcnkgYmluYXJ5IGRhdGEgYnkgcGFzc2luZyBhcHByb3ByaWF0ZSBhcmd1bWVudHMuIE5vdGUgdGhhdCBhbGwgb2YKK3RoZSBieXRlYXJyYXkgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gZG8gKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSwgYW5kIGluc3RlYWQKK3Byb2R1Y2UgbmV3IG9iamVjdHMuCiAKLSAgIFRoaXMgc3RhdGljIG1ldGhvZCByZXR1cm5zIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvcgotICAgOm1ldGg6YGJ5dGVzLnRyYW5zbGF0ZWAgdGhhdCB3aWxsIG1hcCBlYWNoIGNoYXJhY3RlciBpbiAqZnJvbSogaW50byB0aGUKLSAgIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiAqdG8qOyAqZnJvbSogYW5kICp0byogbXVzdCBiZSBieXRlcyBvYmplY3RzCi0gICBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguCisuLiBtZXRob2Q6OiBieXRlcy5jZW50ZXIod2lkdGhbLCBmaWxsYnl0ZV0pCisgICAgICAgICAgICBieXRlYXJyYXkuY2VudGVyKHdpZHRoWywgZmlsbGJ5dGVdKQogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIG9iamVjdCBjZW50ZXJlZCBpbiBhIHNlcXVlbmNlIG9mIGxlbmd0aCAqd2lkdGgqLgorICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxieXRlKiAoZGVmYXVsdCBpcyBhbiBBU0NJSQorICAgc3BhY2UpLiBGb3IgOmNsYXNzOmBieXRlc2Agb2JqZWN0cywgdGhlIG9yaWdpbmFsIHNlcXVlbmNlIGlzIHJldHVybmVkIGlmCisgICAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtCisgICAgICBpdCBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmxqdXN0KHdpZHRoWywgZmlsbGJ5dGVdKQorICAgICAgICAgICAgYnl0ZWFycmF5LmxqdXN0KHdpZHRoWywgZmlsbGJ5dGVdKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBvYmplY3QgbGVmdCBqdXN0aWZpZWQgaW4gYSBzZXF1ZW5jZSBvZiBsZW5ndGggKndpZHRoKi4KKyAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsYnl0ZSogKGRlZmF1bHQgaXMgYW4gQVNDSUkKKyAgIHNwYWNlKS4gRm9yIDpjbGFzczpgYnl0ZXNgIG9iamVjdHMsIHRoZSBvcmlnaW5hbCBzZXF1ZW5jZSBpcyByZXR1cm5lZCBpZgorICAgKndpZHRoKiBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYGBsZW4ocylgYC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLQorICAgICAgaXQgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5sc3RyaXAoW2NoYXJzXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5sc3RyaXAoW2NoYXJzXSkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBzcGVjaWZpZWQgbGVhZGluZyBieXRlcyByZW1vdmVkLiAgVGhlCisgICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgYmluYXJ5IHNlcXVlbmNlIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBieXRlIHZhbHVlcyB0bworICAgYmUgcmVtb3ZlZCAtIHRoZSBuYW1lIHJlZmVycyB0byB0aGUgZmFjdCB0aGlzIG1ldGhvZCBpcyB1c3VhbGx5IHVzZWQgd2l0aAorICAgQVNDSUkgY2hhcmFjdGVycy4gIElmIG9taXR0ZWQgb3IgYGBOb25lYGAsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzCisgICB0byByZW1vdmluZyBBU0NJSSB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgcHJlZml4OworICAgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOjoKKworICAgICAgPj4+IGInICAgc3BhY2lvdXMgICAnLmxzdHJpcCgpCisgICAgICBiJ3NwYWNpb3VzICAgJworICAgICAgPj4+IGInd3d3LmV4YW1wbGUuY29tJy5sc3RyaXAoYidjbW93ei4nKQorICAgICAgYidleGFtcGxlLmNvbScKKworICAgVGhlIGJpbmFyeSBzZXF1ZW5jZSBvZiBieXRlIHZhbHVlcyB0byByZW1vdmUgbWF5IGJlIGFueQorICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLQorICAgICAgaXQgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5yanVzdCh3aWR0aFssIGZpbGxieXRlXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5yanVzdCh3aWR0aFssIGZpbGxieXRlXSkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgb2JqZWN0IHJpZ2h0IGp1c3RpZmllZCBpbiBhIHNlcXVlbmNlIG9mIGxlbmd0aCAqd2lkdGgqLgorICAgUGFkZGluZyBpcyBkb25lIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxieXRlKiAoZGVmYXVsdCBpcyBhbiBBU0NJSQorICAgc3BhY2UpLiBGb3IgOmNsYXNzOmBieXRlc2Agb2JqZWN0cywgdGhlIG9yaWdpbmFsIHNlcXVlbmNlIGlzIHJldHVybmVkIGlmCisgICAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgYGxlbihzKWBgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtCisgICAgICBpdCBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpCisgICAgICAgICAgICBieXRlYXJyYXkucnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSkKKworICAgU3BsaXQgdGhlIGJpbmFyeSBzZXF1ZW5jZSBpbnRvIHN1YnNlcXVlbmNlcyBvZiB0aGUgc2FtZSB0eXBlLCB1c2luZyAqc2VwKgorICAgYXMgdGhlIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHMKKyAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3IgYGBOb25lYGAsCisgICBhbnkgc3Vic2VxdWVuY2UgY29uc2lzdGluZyBzb2xlbHkgb2YgQVNDSUkgd2hpdGVzcGFjZSBpcyBhIHNlcGFyYXRvci4KKyAgIEV4Y2VwdCBmb3Igc3BsaXR0aW5nIGZyb20gdGhlIHJpZ2h0LCA6bWV0aDpgcnNwbGl0YCBiZWhhdmVzIGxpa2UKKyAgIDptZXRoOmBzcGxpdGAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy4KKworCisuLiBtZXRob2Q6OiBieXRlcy5yc3RyaXAoW2NoYXJzXSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5yc3RyaXAoW2NoYXJzXSkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2Ugd2l0aCBzcGVjaWZpZWQgdHJhaWxpbmcgYnl0ZXMgcmVtb3ZlZC4gIFRoZQorICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIGJpbmFyeSBzZXF1ZW5jZSBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgYnl0ZSB2YWx1ZXMgdG8KKyAgIGJlIHJlbW92ZWQgLSB0aGUgbmFtZSByZWZlcnMgdG8gdGhlIGZhY3QgdGhpcyBtZXRob2QgaXMgdXN1YWxseSB1c2VkIHdpdGgKKyAgIEFTQ0lJIGNoYXJhY3RlcnMuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0bworICAgcmVtb3ZpbmcgQVNDSUkgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHN1ZmZpeDsgcmF0aGVyLAorICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDo6CisKKyAgICAgID4+PiBiJyAgIHNwYWNpb3VzICAgJy5yc3RyaXAoKQorICAgICAgYicgICBzcGFjaW91cycKKyAgICAgID4+PiBiJ21pc3Npc3NpcHBpJy5yc3RyaXAoYidpcHonKQorICAgICAgYidtaXNzaXNzJworCisgICBUaGUgYmluYXJ5IHNlcXVlbmNlIG9mIGJ5dGUgdmFsdWVzIHRvIHJlbW92ZSBtYXkgYmUgYW55CisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtCisgICAgICBpdCBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnNwbGl0KHNlcD1Ob25lLCBtYXhzcGxpdD0tMSkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpCisKKyAgIFNwbGl0IHRoZSBiaW5hcnkgc2VxdWVuY2UgaW50byBzdWJzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSwgdXNpbmcgKnNlcCoKKyAgIGFzIHRoZSBkZWxpbWl0ZXIgc3RyaW5nLiBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuIGFuZCBub24tbmVnYXRpdmUsIGF0IG1vc3QKKyAgICptYXhzcGxpdCogc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCBgYG1heHNwbGl0KzFgYAorICAgZWxlbWVudHMpLiAgSWYgKm1heHNwbGl0KiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzIGBgLTFgYCwgdGhlbiB0aGVyZSBpcyBubworICAgbGltaXQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLgorCisgICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXIgYW5kIGFyZQorICAgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3Vic2VxdWVuY2VzIChmb3IgZXhhbXBsZSwgYGBiJzEsLDInLnNwbGl0KGInLCcpYGAKKyAgIHJldHVybnMgYGBbYicxJywgYicnLCBiJzInXWBgKS4gIFRoZSAqc2VwKiBhcmd1bWVudCBtYXkgY29uc2lzdCBvZiBhCisgICBtdWx0aWJ5dGUgc2VxdWVuY2UgKGZvciBleGFtcGxlLCBgYGInMTw+Mjw+Mycuc3BsaXQoYic8PicpYGAgcmV0dXJucworICAgYGBbYicxJywgYicyJywgYiczJ11gYCkuIFNwbGl0dGluZyBhbiBlbXB0eSBzZXF1ZW5jZSB3aXRoIGEgc3BlY2lmaWVkCisgICBzZXBhcmF0b3IgcmV0dXJucyBgYFtiJyddYGAgb3IgYGBbYnl0ZWFycmF5KGInJyldYGAgZGVwZW5kaW5nIG9uIHRoZSB0eXBlCisgICBvZiBvYmplY3QgYmVpbmcgc3BsaXQuICBUaGUgKnNlcCogYXJndW1lbnQgbWF5IGJlIGFueQorICAgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYicxLDIsMycuc3BsaXQoYicsJykKKyAgICAgIFtiJzEnLCBiJzInLCBiJzMnXQorICAgICAgPj4+IGInMSwyLDMnLnNwbGl0KGInLCcsIG1heHNwbGl0PTEpCisgICAgICBbYicxJywgYicyLDMnXQorICAgICAgPj4+IGInMSwyLCwzLCcuc3BsaXQoYicsJykKKyAgICAgIFtiJzEnLCBiJzInLCBiJycsIGInMycsIGInJ10KKworICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyBgYE5vbmVgYCwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nIGFsZ29yaXRobQorICAgaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSBBU0NJSSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZCBhcyBhIHNpbmdsZQorICAgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5ncyBhdCB0aGUgc3RhcnQgb3IKKyAgIGVuZCBpZiB0aGUgc2VxdWVuY2UgaGFzIGxlYWRpbmcgb3IgdHJhaWxpbmcgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwKKyAgIHNwbGl0dGluZyBhbiBlbXB0eSBzZXF1ZW5jZSBvciBhIHNlcXVlbmNlIGNvbnNpc3Rpbmcgc29sZWx5IG9mIEFTQ0lJCisgICB3aGl0ZXNwYWNlIHdpdGhvdXQgYSBzcGVjaWZpZWQgc2VwYXJhdG9yIHJldHVybnMgYGBbXWBgLgorCisgICBGb3IgZXhhbXBsZTo6CisKKworICAgICAgPj4+IGInMSAyIDMnLnNwbGl0KCkKKyAgICAgIFtiJzEnLCBiJzInLCBiJzMnXQorICAgICAgPj4+IGInMSAyIDMnLnNwbGl0KG1heHNwbGl0PTEpCisgICAgICBbYicxJywgYicyIDMnXQorICAgICAgPj4+IGInICAgMSAgIDIgICAzICAgJy5zcGxpdCgpCisgICAgICBbYicxJywgYicyJywgYiczJ10KKworCisuLiBtZXRob2Q6OiBieXRlcy5zdHJpcChbY2hhcnNdKQorICAgICAgICAgICAgYnl0ZWFycmF5LnN0cmlwKFtjaGFyc10pCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlIHdpdGggc3BlY2lmaWVkIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGJ5dGVzCisgICByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIGJpbmFyeSBzZXF1ZW5jZSBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YKKyAgIGJ5dGUgdmFsdWVzIHRvIGJlIHJlbW92ZWQgLSB0aGUgbmFtZSByZWZlcnMgdG8gdGhlIGZhY3QgdGhpcyBtZXRob2QgaXMKKyAgIHVzdWFsbHkgdXNlZCB3aXRoIEFTQ0lJIGNoYXJhY3RlcnMuICBJZiBvbWl0dGVkIG9yIGBgTm9uZWBgLCB0aGUgKmNoYXJzKgorICAgYXJndW1lbnQgZGVmYXVsdHMgdG8gcmVtb3ZpbmcgQVNDSUkgd2hpdGVzcGFjZS4gVGhlICpjaGFycyogYXJndW1lbnQgaXMKKyAgIG5vdCBhIHByZWZpeCBvciBzdWZmaXg7IHJhdGhlciwgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZQorICAgc3RyaXBwZWQ6OgorCisgICAgICA+Pj4gYicgICBzcGFjaW91cyAgICcuc3RyaXAoKQorICAgICAgYidzcGFjaW91cycKKyAgICAgID4+PiBiJ3d3dy5leGFtcGxlLmNvbScuc3RyaXAoYidjbW93ei4nKQorICAgICAgYidleGFtcGxlJworCisgICBUaGUgYmluYXJ5IHNlcXVlbmNlIG9mIGJ5dGUgdmFsdWVzIHRvIHJlbW92ZSBtYXkgYmUgYW55CisgICA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtCisgICAgICBpdCBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKK1RoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbiBieXRlcyBhbmQgYnl0ZWFycmF5IG9iamVjdHMgYXNzdW1lIHRoZSB1c2Ugb2YgQVNDSUkKK2NvbXBhdGlibGUgYmluYXJ5IGZvcm1hdHMgYW5kIHNob3VsZCBub3QgYmUgYXBwbGllZCB0byBhcmJpdHJhcnkgYmluYXJ5IGRhdGEuCitOb3RlIHRoYXQgYWxsIG9mIHRoZSBieXRlYXJyYXkgbWV0aG9kcyBpbiB0aGlzIHNlY3Rpb24gZG8gKm5vdCogb3BlcmF0ZSBpbgorcGxhY2UsIGFuZCBpbnN0ZWFkIHByb2R1Y2UgbmV3IG9iamVjdHMuCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmNhcGl0YWxpemUoKQorICAgICAgICAgICAgYnl0ZWFycmF5LmNhcGl0YWxpemUoKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIGVhY2ggYnl0ZSBpbnRlcnByZXRlZCBhcyBhbiBBU0NJSQorICAgY2hhcmFjdGVyLCBhbmQgdGhlIGZpcnN0IGJ5dGUgY2FwaXRhbGl6ZWQgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuCisgICBOb24tQVNDSUkgYnl0ZSB2YWx1ZXMgYXJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLSBpdAorICAgICAgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy5leHBhbmR0YWJzKHRhYnNpemU9OCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5leHBhbmR0YWJzKHRhYnNpemU9OCkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2Ugd2hlcmUgYWxsIEFTQ0lJIHRhYiBjaGFyYWN0ZXJzIGFyZSByZXBsYWNlZAorICAgYnkgb25lIG9yIG1vcmUgQVNDSUkgc3BhY2VzLCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgY29sdW1uIGFuZCB0aGUgZ2l2ZW4KKyAgIHRhYiBzaXplLiAgVGFiIHBvc2l0aW9ucyBvY2N1ciBldmVyeSAqdGFic2l6ZSogYnl0ZXMgKGRlZmF1bHQgaXMgOCwKKyAgIGdpdmluZyB0YWIgcG9zaXRpb25zIGF0IGNvbHVtbnMgMCwgOCwgMTYgYW5kIHNvIG9uKS4gIFRvIGV4cGFuZCB0aGUKKyAgIHNlcXVlbmNlLCB0aGUgY3VycmVudCBjb2x1bW4gaXMgc2V0IHRvIHplcm8gYW5kIHRoZSBzZXF1ZW5jZSBpcyBleGFtaW5lZAorICAgYnl0ZSBieSBieXRlLiAgSWYgdGhlIGJ5dGUgaXMgYW4gQVNDSUkgdGFiIGNoYXJhY3RlciAoYGBiJ1x0J2BgKSwgb25lIG9yCisgICBtb3JlIHNwYWNlIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGluIHRoZSByZXN1bHQgdW50aWwgdGhlIGN1cnJlbnQgY29sdW1uCisgICBpcyBlcXVhbCB0byB0aGUgbmV4dCB0YWIgcG9zaXRpb24uIChUaGUgdGFiIGNoYXJhY3RlciBpdHNlbGYgaXMgbm90CisgICBjb3BpZWQuKSAgSWYgdGhlIGN1cnJlbnQgYnl0ZSBpcyBhbiBBU0NJSSBuZXdsaW5lIChgYGInXG4nYGApIG9yCisgICBjYXJyaWFnZSByZXR1cm4gKGBgYidccidgYCksIGl0IGlzIGNvcGllZCBhbmQgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHJlc2V0CisgICB0byB6ZXJvLiAgQW55IG90aGVyIGJ5dGUgdmFsdWUgaXMgY29waWVkIHVuY2hhbmdlZCBhbmQgdGhlIGN1cnJlbnQgY29sdW1uCisgICBpcyBpbmNyZW1lbnRlZCBieSBvbmUgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGJ5dGUgdmFsdWUgaXMgcmVwcmVzZW50ZWQgd2hlbgorICAgcHJpbnRlZDo6CisKKyAgICAgID4+PiBiJzAxXHQwMTJcdDAxMjNcdDAxMjM0Jy5leHBhbmR0YWJzKCkKKyAgICAgIGInMDEgICAgICAwMTIgICAgIDAxMjMgICAgMDEyMzQnCisgICAgICA+Pj4gYicwMVx0MDEyXHQwMTIzXHQwMTIzNCcuZXhwYW5kdGFicyg0KQorICAgICAgYicwMSAgMDEyIDAxMjMgICAgMDEyMzQnCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0gaXQKKyAgICAgIGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMuaXNhbG51bSgpCisgICAgICAgICAgICBieXRlYXJyYXkuaXNhbG51bSgpCisKKyAgIFJldHVybiB0cnVlIGlmIGFsbCBieXRlcyBpbiB0aGUgc2VxdWVuY2UgYXJlIGFscGhhYmV0aWNhbCBBU0NJSSBjaGFyYWN0ZXJzCisgICBvciBBU0NJSSBkZWNpbWFsIGRpZ2l0cyBhbmQgdGhlIHNlcXVlbmNlIGlzIG5vdCBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLgorICAgQWxwaGFiZXRpYyBBU0NJSSBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UKKyAgIGBgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2BgLiBBU0NJSSBkZWNpbWFsCisgICBkaWdpdHMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInMDEyMzQ1Njc4OSdgYC4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidBQkNhYmMxJy5pc2FsbnVtKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBiJ0FCQyBhYmMxJy5pc2FsbnVtKCkKKyAgICAgIEZhbHNlCisKKworLi4gbWV0aG9kOjogYnl0ZXMuaXNhbHBoYSgpCisgICAgICAgICAgICBieXRlYXJyYXkuaXNhbHBoYSgpCisKKyAgIFJldHVybiB0cnVlIGlmIGFsbCBieXRlcyBpbiB0aGUgc2VxdWVuY2UgYXJlIGFscGhhYmV0aWMgQVNDSUkgY2hhcmFjdGVycworICAgYW5kIHRoZSBzZXF1ZW5jZSBpcyBub3QgZW1wdHksIGZhbHNlIG90aGVyd2lzZS4gIEFscGhhYmV0aWMgQVNDSUkKKyAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZQorICAgYGBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYGAuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInQUJDYWJjJy5pc2FscGhhKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBiJ0FCQ2FiYzEnLmlzYWxwaGEoKQorICAgICAgRmFsc2UKKworCisuLiBtZXRob2Q6OiBieXRlcy5pc2RpZ2l0KCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS5pc2RpZ2l0KCkKKworICAgUmV0dXJuIHRydWUgaWYgYWxsIGJ5dGVzIGluIHRoZSBzZXF1ZW5jZSBhcmUgQVNDSUkgZGVjaW1hbCBkaWdpdHMKKyAgIGFuZCB0aGUgc2VxdWVuY2UgaXMgbm90IGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuIEFTQ0lJIGRlY2ltYWwgZGlnaXRzIGFyZQorICAgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlIGBgYicwMTIzNDU2Nzg5J2BgLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJzEyMzQnLmlzZGlnaXQoKQorICAgICAgVHJ1ZQorICAgICAgPj4+IGInMS4yMycuaXNkaWdpdCgpCisgICAgICBGYWxzZQorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmlzbG93ZXIoKQorICAgICAgICAgICAgYnl0ZWFycmF5LmlzbG93ZXIoKQorCisgICBSZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcgorICAgaW4gdGhlIHNlcXVlbmNlIGFuZCBubyB1cHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVycywgZmFsc2Ugb3RoZXJ3aXNlLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJ2hlbGxvIHdvcmxkJy5pc2xvd2VyKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBiJ0hlbGxvIHdvcmxkJy5pc2xvd2VyKCkKKyAgICAgIEZhbHNlCisKKyAgIExvd2VyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UKKyAgIGBgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgYC4gVXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UgYGBiJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2BgLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLmlzc3BhY2UoKQorICAgICAgICAgICAgYnl0ZWFycmF5Lmlzc3BhY2UoKQorCisgICBSZXR1cm4gdHJ1ZSBpZiBhbGwgYnl0ZXMgaW4gdGhlIHNlcXVlbmNlIGFyZSBBU0NJSSB3aGl0ZXNwYWNlIGFuZCB0aGUKKyAgIHNlcXVlbmNlIGlzIG5vdCBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiAgQVNDSUkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGFyZQorICAgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlIGBgYicgXHRcblxyXHgwYlxmJ2BgIChzcGFjZSwgdGFiLCBuZXdsaW5lLAorICAgY2FycmlhZ2UgcmV0dXJuLCB2ZXJ0aWNhbCB0YWIsIGZvcm0gZmVlZCkuCisKKworLi4gbWV0aG9kOjogYnl0ZXMuaXN0aXRsZSgpCisgICAgICAgICAgICBieXRlYXJyYXkuaXN0aXRsZSgpCisKKyAgIFJldHVybiB0cnVlIGlmIHRoZSBzZXF1ZW5jZSBpcyBBU0NJSSB0aXRsZWNhc2UgYW5kIHRoZSBzZXF1ZW5jZSBpcyBub3QKKyAgIGVtcHR5LCBmYWxzZSBvdGhlcndpc2UuIFNlZSA6bWV0aDpgYnl0ZXMudGl0bGVgIGZvciBtb3JlIGRldGFpbHMgb24gdGhlCisgICBkZWZpbml0aW9uIG9mICJ0aXRsZWNhc2UiLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJ0hlbGxvIFdvcmxkJy5pc3RpdGxlKCkKKyAgICAgIFRydWUKKyAgICAgID4+PiBiJ0hlbGxvIHdvcmxkJy5pc3RpdGxlKCkKKyAgICAgIEZhbHNlCisKKworLi4gbWV0aG9kOjogYnl0ZXMuaXN1cHBlcigpCisgICAgICAgICAgICBieXRlYXJyYXkuaXN1cHBlcigpCisKKyAgIFJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1cHBlcmNhc2UgYWxwaGFiZXRpYyBBU0NJSSBjaGFyYWN0ZXIKKyAgIGluIHRoZSBzZXF1ZW5jZSBhbmQgbm8gbG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMsIGZhbHNlIG90aGVyd2lzZS4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidIRUxMTyBXT1JMRCcuaXN1cHBlcigpCisgICAgICBUcnVlCisgICAgICA+Pj4gYidIZWxsbyB3b3JsZCcuaXN1cHBlcigpCisgICAgICBGYWxzZQorCisgICBMb3dlcmNhc2UgQVNDSUkgY2hhcmFjdGVycyBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlCisgICBgYGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYGAuIFVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzCisgICBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlIGBgYidBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgYC4KKworCisuLiBtZXRob2Q6OiBieXRlcy5sb3dlcigpCisgICAgICAgICAgICBieXRlYXJyYXkubG93ZXIoKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIGFsbCB0aGUgdXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGNvbnZlcnRlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIGxvd2VyY2FzZSBjb3VudGVycGFydC4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidIZWxsbyBXb3JsZCcubG93ZXIoKQorICAgICAgYidoZWxsbyB3b3JsZCcKKworICAgTG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZQorICAgYGBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2BgLiBVcHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVycworICAgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYGAuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0gaXQKKyAgICAgIGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gaW5kZXg6OgorICAgc2luZ2xlOiB1bml2ZXJzYWwgbmV3bGluZXM7IGJ5dGVzLnNwbGl0bGluZXMgbWV0aG9kCisgICBzaW5nbGU6IHVuaXZlcnNhbCBuZXdsaW5lczsgYnl0ZWFycmF5LnNwbGl0bGluZXMgbWV0aG9kCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnNwbGl0bGluZXMoa2VlcGVuZHM9RmFsc2UpCisgICAgICAgICAgICBieXRlYXJyYXkuc3BsaXRsaW5lcyhrZWVwZW5kcz1GYWxzZSkKKworICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIGJpbmFyeSBzZXF1ZW5jZSwgYnJlYWtpbmcgYXQgQVNDSUkKKyAgIGxpbmUgYm91bmRhcmllcy4gVGhpcyBtZXRob2QgdXNlcyB0aGUgOnRlcm06YHVuaXZlcnNhbCBuZXdsaW5lc2AgYXBwcm9hY2gKKyAgIHRvIHNwbGl0dGluZyBsaW5lcy4gTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3QKKyAgIHVubGVzcyAqa2VlcGVuZHMqIGlzIGdpdmVuIGFuZCB0cnVlLgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJ2FiIGNcblxuZGUgZmdccmtsXHJcbicuc3BsaXRsaW5lcygpCisgICAgICBbYidhYiBjJywgYicnLCBiJ2RlIGZnJywgYidrbCddCisgICAgICA+Pj4gYidhYiBjXG5cbmRlIGZnXHJrbFxyXG4nLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkKKyAgICAgIFtiJ2FiIGNcbicsIGInXG4nLCBiJ2RlIGZnXHInLCBiJ2tsXHJcbiddCisKKyAgIFVubGlrZSA6bWV0aDpgfmJ5dGVzLnNwbGl0YCB3aGVuIGEgZGVsaW1pdGVyIHN0cmluZyAqc2VwKiBpcyBnaXZlbiwgdGhpcworICAgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgdGhlIGVtcHR5IHN0cmluZywgYW5kIGEgdGVybWluYWwgbGluZQorICAgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmU6OgorCisgICAgICA+Pj4gYiIiLnNwbGl0KGInXG4nKSwgYiJUd28gbGluZXNcbiIuc3BsaXQoYidcbicpCisgICAgICAoW2InJ10sIFtiJ1R3byBsaW5lcycsIGInJ10pCisgICAgICA+Pj4gYiIiLnNwbGl0bGluZXMoKSwgYiJPbmUgbGluZVxuIi5zcGxpdGxpbmVzKCkKKyAgICAgIChbXSwgW2InT25lIGxpbmUnXSkKKworCisuLiBtZXRob2Q6OiBieXRlcy5zd2FwY2FzZSgpCisgICAgICAgICAgICBieXRlYXJyYXkuc3dhcGNhc2UoKQorCisgICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzZXF1ZW5jZSB3aXRoIGFsbCB0aGUgbG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGNvbnZlcnRlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHVwcGVyY2FzZSBjb3VudGVycGFydCBhbmQgdmljZS12ZXJzYS4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYidIZWxsbyBXb3JsZCcuc3dhcGNhc2UoKQorICAgICAgYidoRUxMTyB3T1JMRCcKKworICAgTG93ZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZQorICAgYGBiJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2BgLiBVcHBlcmNhc2UgQVNDSUkgY2hhcmFjdGVycworICAgYXJlIHRob3NlIGJ5dGUgdmFsdWVzIGluIHRoZSBzZXF1ZW5jZSBgYGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYGAuCisKKyAgIFVubGlrZSA6ZnVuYzpgc3RyLnN3YXBjYXNlKClgLCBpdCBpcyBhbHdheXMgdGhlIGNhc2UgdGhhdAorICAgYGBiaW4uc3dhcGNhc2UoKS5zd2FwY2FzZSgpID09IGJpbmBgIGZvciB0aGUgYmluYXJ5IHZlcnNpb25zLiBDYXNlCisgICBjb252ZXJzaW9ucyBhcmUgc3ltbWV0cmljYWwgaW4gQVNDSUksIGV2ZW4gdGhvdWdoIHRoYXQgaXMgbm90IGdlbmVyYWxseQorICAgdHJ1ZSBmb3IgYXJiaXRyYXJ5IFVuaWNvZGUgY29kZSBwb2ludHMuCisKKyAgIC4uIG5vdGU6OgorCisgICAgICBUaGUgYnl0ZWFycmF5IHZlcnNpb24gb2YgdGhpcyBtZXRob2QgZG9lcyAqbm90KiBvcGVyYXRlIGluIHBsYWNlIC0gaXQKKyAgICAgIGFsd2F5cyBwcm9kdWNlcyBhIG5ldyBvYmplY3QsIGV2ZW4gaWYgbm8gY2hhbmdlcyB3ZXJlIG1hZGUuCisKKworLi4gbWV0aG9kOjogYnl0ZXMudGl0bGUoKQorICAgICAgICAgICAgYnl0ZWFycmF5LnRpdGxlKCkKKworICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBiaW5hcnkgc2VxdWVuY2Ugd2hlcmUgd29yZHMgc3RhcnQgd2l0aAorICAgYW4gdXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuCisgICBVbmNhc2VkIGJ5dGUgdmFsdWVzIGFyZSBsZWZ0IHVubW9kaWZpZWQuCisKKyAgIEZvciBleGFtcGxlOjoKKworICAgICAgPj4+IGInSGVsbG8gd29ybGQnLnRpdGxlKCkKKyAgICAgIGInSGVsbG8gV29ybGQnCisKKyAgIExvd2VyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UKKyAgIGBgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgYC4gVXBwZXJjYXNlIEFTQ0lJIGNoYXJhY3RlcnMKKyAgIGFyZSB0aG9zZSBieXRlIHZhbHVlcyBpbiB0aGUgc2VxdWVuY2UgYGBiJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2BgLgorICAgQWxsIG90aGVyIGJ5dGUgdmFsdWVzIGFyZSB1bmNhc2VkLgorCisgICBUaGUgYWxnb3JpdGhtIHVzZXMgYSBzaW1wbGUgbGFuZ3VhZ2UtaW5kZXBlbmRlbnQgZGVmaW5pdGlvbiBvZiBhIHdvcmQgYXMKKyAgIGdyb3VwcyBvZiBjb25zZWN1dGl2ZSBsZXR0ZXJzLiAgVGhlIGRlZmluaXRpb24gd29ya3MgaW4gbWFueSBjb250ZXh0cyBidXQKKyAgIGl0IG1lYW5zIHRoYXQgYXBvc3Ryb3BoZXMgaW4gY29udHJhY3Rpb25zIGFuZCBwb3NzZXNzaXZlcyBmb3JtIHdvcmQKKyAgIGJvdW5kYXJpZXMsIHdoaWNoIG1heSBub3QgYmUgdGhlIGRlc2lyZWQgcmVzdWx0OjoKKworICAgICAgICA+Pj4gYiJ0aGV5J3JlIGJpbGwncyBmcmllbmRzIGZyb20gdGhlIFVLIi50aXRsZSgpCisgICAgICAgIGIiVGhleSdSZSBCaWxsJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayIKKworICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhciBleHByZXNzaW9uczo6CisKKyAgICAgICAgPj4+IGltcG9ydCByZQorICAgICAgICA+Pj4gZGVmIHRpdGxlY2FzZShzKToKKyAgICAgICAgLi4uICAgICByZXR1cm4gcmUuc3ViKHJiIltBLVphLXpdKygnW0EtWmEtel0rKT8iLAorICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgbGFtYmRhIG1vOiBtby5ncm91cCgwKVswOjFdLnVwcGVyKCkgKworICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSwKKyAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgIHMpCisgICAgICAgIC4uLgorICAgICAgICA+Pj4gdGl0bGVjYXNlKGIidGhleSdyZSBiaWxsJ3MgZnJpZW5kcy4iKQorICAgICAgICBiIlRoZXkncmUgQmlsbCdzIEZyaWVuZHMuIgorCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgorCisKKy4uIG1ldGhvZDo6IGJ5dGVzLnVwcGVyKCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS51cHBlcigpCisKKyAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHNlcXVlbmNlIHdpdGggYWxsIHRoZSBsb3dlcmNhc2UgQVNDSUkgY2hhcmFjdGVycworICAgY29udmVydGVkIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgdXBwZXJjYXNlIGNvdW50ZXJwYXJ0LgorCisgICBGb3IgZXhhbXBsZTo6CisKKyAgICAgID4+PiBiJ0hlbGxvIFdvcmxkJy51cHBlcigpCisgICAgICBiJ0hFTExPIFdPUkxEJworCisgICBMb3dlcmNhc2UgQVNDSUkgY2hhcmFjdGVycyBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlCisgICBgYGInYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonYGAuIFVwcGVyY2FzZSBBU0NJSSBjaGFyYWN0ZXJzCisgICBhcmUgdGhvc2UgYnl0ZSB2YWx1ZXMgaW4gdGhlIHNlcXVlbmNlIGBgYidBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgYC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBieXRlYXJyYXkgdmVyc2lvbiBvZiB0aGlzIG1ldGhvZCBkb2VzICpub3QqIG9wZXJhdGUgaW4gcGxhY2UgLSBpdAorICAgICAgYWx3YXlzIHByb2R1Y2VzIGEgbmV3IG9iamVjdCwgZXZlbiBpZiBubyBjaGFuZ2VzIHdlcmUgbWFkZS4KKworCisuLiBtZXRob2Q6OiBieXRlcy56ZmlsbCh3aWR0aCkKKyAgICAgICAgICAgIGJ5dGVhcnJheS56ZmlsbCh3aWR0aCkKKworICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc2VxdWVuY2UgbGVmdCBmaWxsZWQgd2l0aCBBU0NJSSBgYGInMCdgYCBkaWdpdHMgdG8KKyAgIG1ha2UgYSBzZXF1ZW5jZSBvZiBsZW5ndGggKndpZHRoKi4gQSBsZWFkaW5nIHNpZ24gcHJlZml4IChgYGInKydgYC8KKyAgIGBgYictJ2BgIGlzIGhhbmRsZWQgYnkgaW5zZXJ0aW5nIHRoZSBwYWRkaW5nICphZnRlciogdGhlIHNpZ24gY2hhcmFjdGVyCisgICByYXRoZXIgdGhhbiBiZWZvcmUuIEZvciA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzLCB0aGUgb3JpZ2luYWwgc2VxdWVuY2UgaXMKKyAgIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBgbGVuKHNlcSlgYC4KKworICAgRm9yIGV4YW1wbGU6OgorCisgICAgICA+Pj4gYiI0MiIuemZpbGwoNSkKKyAgICAgIGInMDAwNDInCisgICAgICA+Pj4gYiItNDIiLnpmaWxsKDUpCisgICAgICBiJy0wMDQyJworCisgICAuLiBub3RlOjoKKworICAgICAgVGhlIGJ5dGVhcnJheSB2ZXJzaW9uIG9mIHRoaXMgbWV0aG9kIGRvZXMgKm5vdCogb3BlcmF0ZSBpbiBwbGFjZSAtIGl0CisgICAgICBhbHdheXMgcHJvZHVjZXMgYSBuZXcgb2JqZWN0LCBldmVuIGlmIG5vIGNoYW5nZXMgd2VyZSBtYWRlLgogCiAKIC4uIF90eXBlbWVtb3J5dmlldzoKQEAgLTI0NjIsNiArMzE5OCwxMCBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIE9uZS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cyB3aXRoIGZvcm1hdHMgJ0InLCAnYicgb3IgJ2MnIGFyZSBub3cgaGFzaGFibGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBtZW1vcnl2aWV3IGlzIG5vdyByZWdpc3RlcmVkIGF1dG9tYXRpY2FsbHkgd2l0aAorICAgICAgOmNsYXNzOmBjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2VgCisKICAgIDpjbGFzczpgbWVtb3J5dmlld2AgaGFzIHNldmVyYWwgbWV0aG9kczoKIAogICAgLi4gbWV0aG9kOjogX19lcV9fKGV4cG9ydGVyKQpAQCAtMzAyNyw4ICszNzY3LDggQEAKICAgIElmIG5vIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4sIGFuIGVtcHR5IGRpY3Rpb25hcnkgaXMgY3JlYXRlZC4KICAgIElmIGEgcG9zaXRpb25hbCBhcmd1bWVudCBpcyBnaXZlbiBhbmQgaXQgaXMgYSBtYXBwaW5nIG9iamVjdCwgYSBkaWN0aW9uYXJ5CiAgICBpcyBjcmVhdGVkIHdpdGggdGhlIHNhbWUga2V5LXZhbHVlIHBhaXJzIGFzIHRoZSBtYXBwaW5nIG9iamVjdC4gIE90aGVyd2lzZSwKLSAgIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gOnRlcm06YGl0ZXJhdG9yYCBvYmplY3QuICBFYWNoIGl0ZW0gaW4KLSAgIHRoZSBpdGVyYWJsZSBtdXN0IGl0c2VsZiBiZSBhbiBpdGVyYXRvciB3aXRoIGV4YWN0bHkgdHdvIG9iamVjdHMuICBUaGUKKyAgIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IG11c3QgYmUgYW4gOnRlcm06YGl0ZXJhYmxlYCBvYmplY3QuICBFYWNoIGl0ZW0gaW4KKyAgIHRoZSBpdGVyYWJsZSBtdXN0IGl0c2VsZiBiZSBhbiBpdGVyYWJsZSB3aXRoIGV4YWN0bHkgdHdvIG9iamVjdHMuICBUaGUKICAgIGZpcnN0IG9iamVjdCBvZiBlYWNoIGl0ZW0gYmVjb21lcyBhIGtleSBpbiB0aGUgbmV3IGRpY3Rpb25hcnksIGFuZCB0aGUKICAgIHNlY29uZCBvYmplY3QgdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUuICBJZiBhIGtleSBvY2N1cnMgbW9yZSB0aGFuIG9uY2UsIHRoZQogICAgbGFzdCB2YWx1ZSBmb3IgdGhhdCBrZXkgYmVjb21lcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgbmV3CkBAIC0zMDY2LDExICszODA2LDEzIEBACiAgICAgICBSZXR1cm4gdGhlIGl0ZW0gb2YgKmQqIHdpdGgga2V5ICprZXkqLiAgUmFpc2VzIGEgOmV4YzpgS2V5RXJyb3JgIGlmICprZXkqIGlzCiAgICAgICBub3QgaW4gdGhlIG1hcC4KIAotICAgICAgSWYgYSBzdWJjbGFzcyBvZiBkaWN0IGRlZmluZXMgYSBtZXRob2QgOm1ldGg6YF9fbWlzc2luZ19fYCwgaWYgdGhlIGtleSAqa2V5KgorICAgICAgLi4gaW5kZXg6OiBfX21pc3NpbmdfXygpCisKKyAgICAgIElmIGEgc3ViY2xhc3Mgb2YgZGljdCBkZWZpbmVzIGEgbWV0aG9kIDptZXRoOmBfX21pc3NpbmdfX2AgYW5kICprZXkqCiAgICAgICBpcyBub3QgcHJlc2VudCwgdGhlIGBgZFtrZXldYGAgb3BlcmF0aW9uIGNhbGxzIHRoYXQgbWV0aG9kIHdpdGggdGhlIGtleSAqa2V5KgogICAgICAgYXMgYXJndW1lbnQuICBUaGUgYGBkW2tleV1gYCBvcGVyYXRpb24gdGhlbiByZXR1cm5zIG9yIHJhaXNlcyB3aGF0ZXZlciBpcwotICAgICAgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZSBgYF9fbWlzc2luZ19fKGtleSlgYCBjYWxsIGlmIHRoZSBrZXkgaXMgbm90Ci0gICAgICBwcmVzZW50LiBObyBvdGhlciBvcGVyYXRpb25zIG9yIG1ldGhvZHMgaW52b2tlIDptZXRoOmBfX21pc3NpbmdfX2AuIElmCisgICAgICByZXR1cm5lZCBvciByYWlzZWQgYnkgdGhlIGBgX19taXNzaW5nX18oa2V5KWBgIGNhbGwuCisgICAgICBObyBvdGhlciBvcGVyYXRpb25zIG9yIG1ldGhvZHMgaW52b2tlIDptZXRoOmBfX21pc3NpbmdfX2AuIElmCiAgICAgICA6bWV0aDpgX19taXNzaW5nX19gIGlzIG5vdCBkZWZpbmVkLCA6ZXhjOmBLZXlFcnJvcmAgaXMgcmFpc2VkLgogICAgICAgOm1ldGg6YF9fbWlzc2luZ19fYCBtdXN0IGJlIGEgbWV0aG9kOyBpdCBjYW5ub3QgYmUgYW4gaW5zdGFuY2UgdmFyaWFibGU6OgogCkBAIC0zMDg0LDggKzM4MjYsOSBAQAogICAgICAgICAgID4+PiBjWydyZWQnXQogICAgICAgICAgIDEKIAotICAgICAgU2VlIDpjbGFzczpgY29sbGVjdGlvbnMuQ291bnRlcmAgZm9yIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24gaW5jbHVkaW5nCi0gICAgICBvdGhlciBtZXRob2RzIGhlbHBmdWwgZm9yIGFjY3VtdWxhdGluZyBhbmQgbWFuYWdpbmcgdGFsbGllcy4KKyAgICAgIFRoZSBleGFtcGxlIGFib3ZlIHNob3dzIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mCisgICAgICA6Y2xhc3M6YGNvbGxlY3Rpb25zLkNvdW50ZXJgLiAgQSBkaWZmZXJlbnQgYGBfX21pc3NpbmdfX2BgIG1ldGhvZCBpcyB1c2VkCisgICAgICBieSA6Y2xhc3M6YGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0YC4KIAogICAgLi4gZGVzY3JpYmU6OiBkW2tleV0gPSB2YWx1ZQogCkBAIC0zMTc1LDYgKzM5MTgsMTAgQEAKICAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5J3MgdmFsdWVzLiAgU2VlIHRoZQogICAgICAgOnJlZjpgZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMgPGRpY3Qtdmlld3M+YC4KIAorICAgRGljdGlvbmFyaWVzIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZSBzYW1lIGBgKGtleSwKKyAgIHZhbHVlKWBgIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyAoJzwnLCAnPD0nLCAnPj0nLCAnPicpIHJhaXNlCisgICA6ZXhjOmBUeXBlRXJyb3JgLgorCiAuLiBzZWVhbHNvOjoKICAgIDpjbGFzczpgdHlwZXMuTWFwcGluZ1Byb3h5VHlwZWAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgcmVhZC1vbmx5IHZpZXcKICAgIG9mIGEgOmNsYXNzOmBkaWN0YC4KQEAgLTMzMTAsOCArNDA1Nyw4IEBACiAgICBUaGUgZXhjZXB0aW9uIHBhc3NlZCBpbiBzaG91bGQgbmV2ZXIgYmUgcmVyYWlzZWQgZXhwbGljaXRseSAtIGluc3RlYWQsIHRoaXMKICAgIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgZmFsc2UgdmFsdWUgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbWV0aG9kIGNvbXBsZXRlZAogICAgc3VjY2Vzc2Z1bGx5IGFuZCBkb2VzIG5vdCB3YW50IHRvIHN1cHByZXNzIHRoZSByYWlzZWQgZXhjZXB0aW9uLiBUaGlzIGFsbG93cwotICAgY29udGV4dCBtYW5hZ2VtZW50IGNvZGUgKHN1Y2ggYXMgYGBjb250ZXh0bGliLm5lc3RlZGBgKSB0byBlYXNpbHkgZGV0ZWN0IHdoZXRoZXIKLSAgIG9yIG5vdCBhbiA6bWV0aDpgX19leGl0X19gIG1ldGhvZCBoYXMgYWN0dWFsbHkgZmFpbGVkLgorICAgY29udGV4dCBtYW5hZ2VtZW50IGNvZGUgdG8gZWFzaWx5IGRldGVjdCB3aGV0aGVyIG9yIG5vdCBhbiA6bWV0aDpgX19leGl0X19gCisgICBtZXRob2QgaGFzIGFjdHVhbGx5IGZhaWxlZC4KIAogUHl0aG9uIGRlZmluZXMgc2V2ZXJhbCBjb250ZXh0IG1hbmFnZXJzIHRvIHN1cHBvcnQgZWFzeSB0aHJlYWQgc3luY2hyb25pc2F0aW9uLAogcHJvbXB0IGNsb3N1cmUgb2YgZmlsZXMgb3Igb3RoZXIgb2JqZWN0cywgYW5kIHNpbXBsZXIgbWFuaXB1bGF0aW9uIG9mIHRoZSBhY3RpdmUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0cmluZy5yc3QgYi9Eb2MvbGlicmFyeS9zdHJpbmcucnN0CmluZGV4IGU1YmFiNjguLjE5YmRiMjEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0cmluZy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RyaW5nLnJzdApAQCAtNDc4LDEwICs0NzgsMTIgQEAKICAgIHwgYGAnJSdgYCB8IFBlcmNlbnRhZ2UuIE11bHRpcGxpZXMgdGhlIG51bWJlciBieSAxMDAgYW5kIGRpc3BsYXlzICAgIHwKICAgIHwgICAgICAgICB8IGluIGZpeGVkIChgYCdmJ2BgKSBmb3JtYXQsIGZvbGxvd2VkIGJ5IGEgcGVyY2VudCBzaWduLiAgIHwKICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKLSAgIHwgTm9uZSAgICB8IFNpbWlsYXIgdG8gYGAnZydgYCwgZXhjZXB0IHdpdGggYXQgbGVhc3Qgb25lIGRpZ2l0IHBhc3QgIHwKLSAgIHwgICAgICAgICB8IHRoZSBkZWNpbWFsIHBvaW50IGFuZCBhIGRlZmF1bHQgcHJlY2lzaW9uIG9mIDEyLiBUaGlzIGlzIHwKLSAgIHwgICAgICAgICB8IGludGVuZGVkIHRvIG1hdGNoIDpmdW5jOmBzdHJgLCBleGNlcHQgeW91IGNhbiBhZGQgdGhlICAgIHwKLSAgIHwgICAgICAgICB8IG90aGVyIGZvcm1hdCBtb2RpZmllcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgIHwgTm9uZSAgICB8IFNpbWlsYXIgdG8gYGAnZydgYCwgZXhjZXB0IHRoYXQgZml4ZWQtcG9pbnQgbm90YXRpb24sICAgIHwKKyAgIHwgICAgICAgICB8IHdoZW4gdXNlZCwgaGFzIGF0IGxlYXN0IG9uZSBkaWdpdCBwYXN0IHRoZSBkZWNpbWFsIHBvaW50LnwKKyAgIHwgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyBhcyBoaWdoIGFzIG5lZWRlZCB0byByZXByZXNlbnQgIHwKKyAgIHwgICAgICAgICB8IHRoZSBwYXJ0aWN1bGFyIHZhbHVlLiBUaGUgb3ZlcmFsbCBlZmZlY3QgaXMgdG8gbWF0Y2ggdGhlIHwKKyAgIHwgICAgICAgICB8IG91dHB1dCBvZiA6ZnVuYzpgc3RyYCBhcyBhbHRlcmVkIGJ5IHRoZSBvdGhlciBmb3JtYXQgICAgIHwKKyAgIHwgICAgICAgICB8IG1vZGlmaWVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIAogCkBAIC02MzgsMTIgKzY0MCwxNCBAQAogKiBgYCQkYGAgaXMgYW4gZXNjYXBlOyBpdCBpcyByZXBsYWNlZCB3aXRoIGEgc2luZ2xlIGBgJGBgLgogCiAqIGBgJGlkZW50aWZpZXJgYCBuYW1lcyBhIHN1YnN0aXR1dGlvbiBwbGFjZWhvbGRlciBtYXRjaGluZyBhIG1hcHBpbmcga2V5IG9mCi0gIGBgImlkZW50aWZpZXIiYGAuICBCeSBkZWZhdWx0LCBgYCJpZGVudGlmaWVyImBgIG11c3Qgc3BlbGwgYSBQeXRob24KLSAgaWRlbnRpZmllci4gIFRoZSBmaXJzdCBub24taWRlbnRpZmllciBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGBgJGBgIGNoYXJhY3RlcgotICB0ZXJtaW5hdGVzIHRoaXMgcGxhY2Vob2xkZXIgc3BlY2lmaWNhdGlvbi4KKyAgYGAiaWRlbnRpZmllciJgYC4gIEJ5IGRlZmF1bHQsIGBgImlkZW50aWZpZXIiYGAgaXMgcmVzdHJpY3RlZCB0byBhbnkKKyAgY2FzZS1pbnNlbnNpdGl2ZSBBU0NJSSBhbHBoYW51bWVyaWMgc3RyaW5nIChpbmNsdWRpbmcgdW5kZXJzY29yZXMpIHRoYXQKKyAgc3RhcnRzIHdpdGggYW4gdW5kZXJzY29yZSBvciBBU0NJSSBsZXR0ZXIuICBUaGUgZmlyc3Qgbm9uLWlkZW50aWZpZXIKKyAgY2hhcmFjdGVyIGFmdGVyIHRoZSBgYCRgYCBjaGFyYWN0ZXIgdGVybWluYXRlcyB0aGlzIHBsYWNlaG9sZGVyCisgIHNwZWNpZmljYXRpb24uCiAKLSogYGAke2lkZW50aWZpZXJ9YGAgaXMgZXF1aXZhbGVudCB0byBgYCRpZGVudGlmaWVyYGAuICBJdCBpcyByZXF1aXJlZCB3aGVuIHZhbGlkCi0gIGlkZW50aWZpZXIgY2hhcmFjdGVycyBmb2xsb3cgdGhlIHBsYWNlaG9sZGVyIGJ1dCBhcmUgbm90IHBhcnQgb2YgdGhlCisqIGBgJHtpZGVudGlmaWVyfWBgIGlzIGVxdWl2YWxlbnQgdG8gYGAkaWRlbnRpZmllcmBgLiAgSXQgaXMgcmVxdWlyZWQgd2hlbgorICB2YWxpZCBpZGVudGlmaWVyIGNoYXJhY3RlcnMgZm9sbG93IHRoZSBwbGFjZWhvbGRlciBidXQgYXJlIG5vdCBwYXJ0IG9mIHRoZQogICBwbGFjZWhvbGRlciwgc3VjaCBhcyBgYCIke25vdW59aWZpY2F0aW9uImBgLgogCiBBbnkgb3RoZXIgYXBwZWFyYW5jZSBvZiBgYCRgYCBpbiB0aGUgc3RyaW5nIHdpbGwgcmVzdWx0IGluIGEgOmV4YzpgVmFsdWVFcnJvcmAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QgYi9Eb2MvbGlicmFyeS9zdHJ1Y3QucnN0CmluZGV4IGRkZTMyYjkuLjEyZDRmYmMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N0cnVjdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3RydWN0LnJzdApAQCAtMjQsNiArMjQsMTQgQEAKICAgIG9yIG9taXQgaW1wbGljaXQgcGFkIGJ5dGVzLCB1c2UgYGBzdGFuZGFyZGBgIHNpemUgYW5kIGFsaWdubWVudCBpbnN0ZWFkIG9mCiAgICBgYG5hdGl2ZWBgIHNpemUgYW5kIGFsaWdubWVudDogc2VlIDpyZWY6YHN0cnVjdC1hbGlnbm1lbnRgIGZvciBkZXRhaWxzLgogCitTZXZlcmFsIDptb2Q6YHN0cnVjdGAgZnVuY3Rpb25zIChhbmQgbWV0aG9kcyBvZiA6Y2xhc3M6YFN0cnVjdGApIHRha2UgYSAqYnVmZmVyKgorYXJndW1lbnQuICBUaGlzIHJlZmVycyB0byBvYmplY3RzIHRoYXQgaW1wbGVtZW50IHRoZSA6cmVmOmBidWZmZXJvYmplY3RzYCBhbmQKK3Byb3ZpZGUgZWl0aGVyIGEgcmVhZGFibGUgb3IgcmVhZC13cml0YWJsZSBidWZmZXIuICBUaGUgbW9zdCBjb21tb24gdHlwZXMgdXNlZAorZm9yIHRoYXQgcHVycG9zZSBhcmUgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCwgYnV0IG1hbnkgb3RoZXIgdHlwZXMKK3RoYXQgY2FuIGJlIHZpZXdlZCBhcyBhbiBhcnJheSBvZiBieXRlcyBpbXBsZW1lbnQgdGhlIGJ1ZmZlciBwcm90b2NvbCwgc28gdGhhdAordGhleSBjYW4gYmUgcmVhZC9maWxsZWQgd2l0aG91dCBhZGRpdGlvbmFsIGNvcHlpbmcgZnJvbSBhIDpjbGFzczpgYnl0ZXNgIG9iamVjdC4KKworCiBGdW5jdGlvbnMgYW5kIEV4Y2VwdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC00Nyw3ICs1NSw3IEBACiAKICAgIFBhY2sgdGhlIHZhbHVlcyAqdjEqLCAqdjIqLCAuLi4gYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQgc3RyaW5nICpmbXQqIGFuZAogICAgd3JpdGUgdGhlIHBhY2tlZCBieXRlcyBpbnRvIHRoZSB3cml0YWJsZSBidWZmZXIgKmJ1ZmZlciogc3RhcnRpbmcgYXQKLSAgIHBvc2l0aW9uICpvZmZzZXQqLiBOb3RlIHRoYXQgKm9mZnNldCogaXMgYSByZXF1aXJlZCBhcmd1bWVudC4KKyAgIHBvc2l0aW9uICpvZmZzZXQqLiAgTm90ZSB0aGF0ICpvZmZzZXQqIGlzIGEgcmVxdWlyZWQgYXJndW1lbnQuCiAKIAogLi4gZnVuY3Rpb246OiB1bnBhY2soZm10LCBidWZmZXIpCkBAIC02Niw2ICs3NCwxOSBAQAogICAgZm9ybWF0IChgYGxlbihidWZmZXJbb2Zmc2V0Ol0pYGAgbXVzdCBiZSBhdCBsZWFzdCBgYGNhbGNzaXplKGZtdClgYCkuCiAKIAorLi4gZnVuY3Rpb246OiBpdGVyX3VucGFjayhmbXQsIGJ1ZmZlcikKKworICAgSXRlcmF0aXZlbHkgdW5wYWNrIGZyb20gdGhlIGJ1ZmZlciAqYnVmZmVyKiBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdAorICAgc3RyaW5nICpmbXQqLiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGl0ZXJhdG9yIHdoaWNoIHdpbGwgcmVhZAorICAgZXF1YWxseS1zaXplZCBjaHVua3MgZnJvbSB0aGUgYnVmZmVyIHVudGlsIGFsbCBpdHMgY29udGVudHMgaGF2ZSBiZWVuCisgICBjb25zdW1lZC4gIFRoZSBidWZmZXIncyBzaXplIGluIGJ5dGVzIG11c3QgYmUgYSBtdWx0aXBsZSBvZiB0aGUgYW1vdW50CisgICBvZiBkYXRhIHJlcXVpcmVkIGJ5IHRoZSBmb3JtYXQsIGFzIHJlZmxlY3RlZCBieSA6ZnVuYzpgY2FsY3NpemVgLgorCisgICBFYWNoIGl0ZXJhdGlvbiB5aWVsZHMgYSB0dXBsZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGZvcm1hdCBzdHJpbmcuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGZ1bmN0aW9uOjogY2FsY3NpemUoZm10KQogCiAgICBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHN0cnVjdCAoYW5kIGhlbmNlIG9mIHRoZSBieXRlcyBvYmplY3QgcHJvZHVjZWQgYnkKQEAgLTM4OCw2ICs0MDksMTMgQEAKICAgICAgIChgYGxlbihidWZmZXJbb2Zmc2V0Ol0pYGAgbXVzdCBiZSBhdCBsZWFzdCA6YXR0cjpgc2VsZi5zaXplYCkuCiAKIAorICAgLi4gbWV0aG9kOjogaXRlcl91bnBhY2soYnVmZmVyKQorCisgICAgICBJZGVudGljYWwgdG8gdGhlIDpmdW5jOmBpdGVyX3VucGFja2AgZnVuY3Rpb24sIHVzaW5nIHRoZSBjb21waWxlZCBmb3JtYXQuCisgICAgICAoYGBsZW4oYnVmZmVyKWBgIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA6YXR0cjpgc2VsZi5zaXplYCkuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAgICAuLiBhdHRyaWJ1dGU6OiBmb3JtYXQKIAogICAgICAgVGhlIGZvcm1hdCBzdHJpbmcgdXNlZCB0byBjb25zdHJ1Y3QgdGhpcyBTdHJ1Y3Qgb2JqZWN0LgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3VicHJvY2Vzcy5yc3QgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAppbmRleCBhOWVlOTcwLi45YWM4ODgyIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdWJwcm9jZXNzLnJzdApAQCAtNTQsMTggKzU0LDEyIEBACiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jYWxsKCJleGl0IDEiLCBzaGVsbD1UcnVlKQogICAgICAgMQogCi0gICAuLiB3YXJuaW5nOjoKLQotICAgICAgSW52b2tpbmcgdGhlIHN5c3RlbSBzaGVsbCB3aXRoIGBgc2hlbGw9VHJ1ZWBgIGNhbiBiZSBhIHNlY3VyaXR5IGhhemFyZAotICAgICAgaWYgY29tYmluZWQgd2l0aCB1bnRydXN0ZWQgaW5wdXQuIFNlZSB0aGUgd2FybmluZyB1bmRlcgotICAgICAgOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgZm9yIGRldGFpbHMuCi0KICAgIC4uIG5vdGU6OgogCi0gICAgICBEbyBub3QgdXNlIGBgc3Rkb3V0PVBJUEVgYCBvciBgYHN0ZGVycj1QSVBFYGAgd2l0aCB0aGlzIGZ1bmN0aW9uLiBBcwotICAgICAgdGhlIHBpcGVzIGFyZSBub3QgYmVpbmcgcmVhZCBpbiB0aGUgY3VycmVudCBwcm9jZXNzLCB0aGUgY2hpbGQKLSAgICAgIHByb2Nlc3MgbWF5IGJsb2NrIGlmIGl0IGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvIGEgcGlwZSB0byBmaWxsIHVwCi0gICAgICB0aGUgT1MgcGlwZSBidWZmZXIuCisgICAgICBEbyBub3QgdXNlIGBgc3Rkb3V0PVBJUEVgYCBvciBgYHN0ZGVycj1QSVBFYGAgd2l0aCB0aGlzCisgICAgICBmdW5jdGlvbi4gIFRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmxvY2sgaWYgaXQgZ2VuZXJhdGVzIGVub3VnaAorICAgICAgb3V0cHV0IHRvIGEgcGlwZSB0byBmaWxsIHVwIHRoZSBPUyBwaXBlIGJ1ZmZlciBhcyB0aGUgcGlwZXMgYXJlCisgICAgICBub3QgYmVpbmcgcmVhZCBmcm9tLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KQEAgLTk5LDI0ICs5MywxOCBAQAogICAgICAgICAgLi4uCiAgICAgICBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcjogQ29tbWFuZCAnZXhpdCAxJyByZXR1cm5lZCBub24temVybyBleGl0IHN0YXR1cyAxCiAKLSAgIC4uIHdhcm5pbmc6OgotCi0gICAgICBJbnZva2luZyB0aGUgc3lzdGVtIHNoZWxsIHdpdGggYGBzaGVsbD1UcnVlYGAgY2FuIGJlIGEgc2VjdXJpdHkgaGF6YXJkCi0gICAgICBpZiBjb21iaW5lZCB3aXRoIHVudHJ1c3RlZCBpbnB1dC4gU2VlIHRoZSB3YXJuaW5nIHVuZGVyCi0gICAgICA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCBmb3IgZGV0YWlscy4KLQogICAgLi4gbm90ZTo6CiAKLSAgICAgIERvIG5vdCB1c2UgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYCB3aXRoIHRoaXMgZnVuY3Rpb24uIEFzCi0gICAgICB0aGUgcGlwZXMgYXJlIG5vdCBiZWluZyByZWFkIGluIHRoZSBjdXJyZW50IHByb2Nlc3MsIHRoZSBjaGlsZAotICAgICAgcHJvY2VzcyBtYXkgYmxvY2sgaWYgaXQgZ2VuZXJhdGVzIGVub3VnaCBvdXRwdXQgdG8gYSBwaXBlIHRvIGZpbGwgdXAKLSAgICAgIHRoZSBPUyBwaXBlIGJ1ZmZlci4KKyAgICAgIERvIG5vdCB1c2UgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYCB3aXRoIHRoaXMKKyAgICAgIGZ1bmN0aW9uLiAgVGhlIGNoaWxkIHByb2Nlc3Mgd2lsbCBibG9jayBpZiBpdCBnZW5lcmF0ZXMgZW5vdWdoCisgICAgICBvdXRwdXQgdG8gYSBwaXBlIHRvIGZpbGwgdXAgdGhlIE9TIHBpcGUgYnVmZmVyIGFzIHRoZSBwaXBlcyBhcmUKKyAgICAgIG5vdCBiZWluZyByZWFkIGZyb20uCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgogCiAKLS4uIGZ1bmN0aW9uOjogY2hlY2tfb3V0cHV0KGFyZ3MsICosIHN0ZGluPU5vbmUsIHN0ZGVycj1Ob25lLCBzaGVsbD1GYWxzZSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLCB0aW1lb3V0PU5vbmUpCisuLiBmdW5jdGlvbjo6IGNoZWNrX291dHB1dChhcmdzLCAqLCBpbnB1dD1Ob25lLCBzdGRpbj1Ob25lLCBzdGRlcnI9Tm9uZSwgc2hlbGw9RmFsc2UsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgdGltZW91dD1Ob25lKQogCiAgICBSdW4gY29tbWFuZCB3aXRoIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGl0cyBvdXRwdXQuCiAKQEAgLTEyOSwxNSArMTE3LDIxIEBACiAgICBpbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCAoaGVuY2UgdGhlIHVzZSBvZiBrZXl3b3JkLW9ubHkgbm90YXRpb24KICAgIGluIHRoZSBhYmJyZXZpYXRlZCBzaWduYXR1cmUpLiBUaGUgZnVsbCBmdW5jdGlvbiBzaWduYXR1cmUgaXMgbGFyZ2VseSB0aGUKICAgIHNhbWUgYXMgdGhhdCBvZiB0aGUgOmNsYXNzOmBQb3BlbmAgY29uc3RydWN0b3IgLSB0aGlzIGZ1bmN0aW9ucyBwYXNzZXMgYWxsCi0gICBzdXBwbGllZCBhcmd1bWVudHMgb3RoZXIgdGhhbiAqdGltZW91dCogZGlyZWN0bHkgdGhyb3VnaCB0byB0aGF0IGludGVyZmFjZS4KLSAgIEluIGFkZGl0aW9uLCAqc3Rkb3V0KiBpcyBub3QgcGVybWl0dGVkIGFzIGFuIGFyZ3VtZW50LCBhcyBpdCBpcyB1c2VkCi0gICBpbnRlcm5hbGx5IHRvIGNvbGxlY3QgdGhlIG91dHB1dCBmcm9tIHRoZSBzdWJwcm9jZXNzLgorICAgc3VwcGxpZWQgYXJndW1lbnRzIG90aGVyIHRoYW4gKmlucHV0KiBhbmQgKnRpbWVvdXQqIGRpcmVjdGx5IHRocm91Z2ggdG8KKyAgIHRoYXQgaW50ZXJmYWNlLiAgSW4gYWRkaXRpb24sICpzdGRvdXQqIGlzIG5vdCBwZXJtaXR0ZWQgYXMgYW4gYXJndW1lbnQsIGFzCisgICBpdCBpcyB1c2VkIGludGVybmFsbHkgdG8gY29sbGVjdCB0aGUgb3V0cHV0IGZyb20gdGhlIHN1YnByb2Nlc3MuCiAKICAgIFRoZSAqdGltZW91dCogYXJndW1lbnQgaXMgcGFzc2VkIHRvIDptZXRoOmBQb3Blbi53YWl0YC4gSWYgdGhlIHRpbWVvdXQKICAgIGV4cGlyZXMsIHRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgYmUga2lsbGVkIGFuZCB0aGVuIHdhaXRlZCBmb3IgYWdhaW4uICBUaGUKICAgIDpleGM6YFRpbWVvdXRFeHBpcmVkYCBleGNlcHRpb24gd2lsbCBiZSByZS1yYWlzZWQgYWZ0ZXIgdGhlIGNoaWxkIHByb2Nlc3MKICAgIGhhcyB0ZXJtaW5hdGVkLgogCisgICBUaGUgKmlucHV0KiBhcmd1bWVudCBpcyBwYXNzZWQgdG8gOm1ldGg6YFBvcGVuLmNvbW11bmljYXRlYCBhbmQgdGh1cyB0byB0aGUKKyAgIHN1YnByb2Nlc3MncyBzdGRpbi4gIElmIHVzZWQgaXQgbXVzdCBiZSBhIGJ5dGUgc2VxdWVuY2UsIG9yIGEgc3RyaW5nIGlmCisgICBgYHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlYGAuICBXaGVuIHVzZWQsIHRoZSBpbnRlcm5hbCA6Y2xhc3M6YFBvcGVuYCBvYmplY3QKKyAgIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB3aXRoIGBgc3RkaW49UElQRWBgLCBhbmQgdGhlICpzdGRpbiogYXJndW1lbnQgbWF5CisgICBub3QgYmUgdXNlZCBhcyB3ZWxsLgorCiAgICBFeGFtcGxlczo6CiAKICAgICAgID4+PiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbImVjaG8iLCAiSGVsbG8gV29ybGQhIl0pCkBAIC0xNDYsNiArMTQwLDEwIEBACiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyJlY2hvIiwgIkhlbGxvIFdvcmxkISJdLCB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKICAgICAgICdIZWxsbyBXb3JsZCFcbicKIAorICAgICAgPj4+IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsic2VkIiwgIi1lIiwgInMvZm9vL2Jhci8iXSwKKyAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dD1iIndoZW4gaW4gdGhlIGNvdXJzZSBvZiBmb29tYW4gZXZlbnRzXG4iKQorICAgICAgYid3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgYmFybWFuIGV2ZW50c1xuJworCiAgICAgICA+Pj4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoImV4aXQgMSIsIHNoZWxsPVRydWUpCiAgICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgICAuLi4KQEAgLTE2NywyNSArMTY1LDIwIEBACiAgICAgICAuLi4gICAgIHNoZWxsPVRydWUpCiAgICAgICAnbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMQotCi0gICAuLgotCi0gICAuLiB3YXJuaW5nOjoKLQotICAgICAgSW52b2tpbmcgdGhlIHN5c3RlbSBzaGVsbCB3aXRoIGBgc2hlbGw9VHJ1ZWBgIGNhbiBiZSBhIHNlY3VyaXR5IGhhemFyZAotICAgICAgaWYgY29tYmluZWQgd2l0aCB1bnRydXN0ZWQgaW5wdXQuIFNlZSB0aGUgd2FybmluZyB1bmRlcgotICAgICAgOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AgZm9yIGRldGFpbHMuCi0KICAgIC4uIG5vdGU6OgogCi0gICAgICBEbyBub3QgdXNlIGBgc3RkZXJyPVBJUEVgYCB3aXRoIHRoaXMgZnVuY3Rpb24uIEFzIHRoZSBwaXBlIGlzIG5vdCBiZWluZwotICAgICAgcmVhZCBpbiB0aGUgY3VycmVudCBwcm9jZXNzLCB0aGUgY2hpbGQgcHJvY2VzcyBtYXkgYmxvY2sgaWYgaXQKLSAgICAgIGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvIHRoZSBwaXBlIHRvIGZpbGwgdXAgdGhlIE9TIHBpcGUgYnVmZmVyLgorICAgICAgRG8gbm90IHVzZSBgYHN0ZG91dD1QSVBFYGAgb3IgYGBzdGRlcnI9UElQRWBgIHdpdGggdGhpcworICAgICAgZnVuY3Rpb24uICBUaGUgY2hpbGQgcHJvY2VzcyB3aWxsIGJsb2NrIGlmIGl0IGdlbmVyYXRlcyBlbm91Z2gKKyAgICAgIG91dHB1dCB0byBhIHBpcGUgdG8gZmlsbCB1cCB0aGUgT1MgcGlwZSBidWZmZXIgYXMgdGhlIHBpcGVzIGFyZQorICAgICAgbm90IGJlaW5nIHJlYWQgZnJvbS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqdGltZW91dCogd2FzIGFkZGVkLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgKmlucHV0KiB3YXMgYWRkZWQuCiAKIC4uIGRhdGE6OiBERVZOVUxMCiAKQEAgLTIwMCw3ICsxOTMsNyBAQAogCiAgICBTcGVjaWFsIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgYXMgdGhlICpzdGRpbiosICpzdGRvdXQqIG9yICpzdGRlcnIqIGFyZ3VtZW50CiAgICB0byA6Y2xhc3M6YFBvcGVuYCBhbmQgaW5kaWNhdGVzIHRoYXQgYSBwaXBlIHRvIHRoZSBzdGFuZGFyZCBzdHJlYW0gc2hvdWxkIGJlCi0gICBvcGVuZWQuCisgICBvcGVuZWQuICBNb3N0IHVzZWZ1bCB3aXRoIDptZXRoOmBQb3Blbi5jb21tdW5pY2F0ZWAuCiAKIAogLi4gZGF0YTo6IFNURE9VVApAQCAtMzI2LDI4ICszMTksOSBAQAogICAgICAgaW5zdGVhZCBvZiBgYGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpYGAuICBTZWUgdGhlCiAgICAgICA6Y2xhc3M6YGlvLlRleHRJT1dyYXBwZXJgIGNsYXNzIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY2hhbmdlLgogCi0gICAuLiB3YXJuaW5nOjoKKyAgIC4uIG5vdGU6OgogCi0gICAgICBFeGVjdXRpbmcgc2hlbGwgY29tbWFuZHMgdGhhdCBpbmNvcnBvcmF0ZSB1bnNhbml0aXplZCBpbnB1dCBmcm9tIGFuCi0gICAgICB1bnRydXN0ZWQgc291cmNlIG1ha2VzIGEgcHJvZ3JhbSB2dWxuZXJhYmxlIHRvIGBzaGVsbCBpbmplY3Rpb24KLSAgICAgIDxodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NoZWxsX2luamVjdGlvbiNTaGVsbF9pbmplY3Rpb24+YF8sCi0gICAgICBhIHNlcmlvdXMgc2VjdXJpdHkgZmxhdyB3aGljaCBjYW4gcmVzdWx0IGluIGFyYml0cmFyeSBjb21tYW5kIGV4ZWN1dGlvbi4KLSAgICAgIEZvciB0aGlzIHJlYXNvbiwgdGhlIHVzZSBvZiBgYHNoZWxsPVRydWVgYCBpcyAqKnN0cm9uZ2x5IGRpc2NvdXJhZ2VkKioKLSAgICAgIGluIGNhc2VzIHdoZXJlIHRoZSBjb21tYW5kIHN0cmluZyBpcyBjb25zdHJ1Y3RlZCBmcm9tIGV4dGVybmFsIGlucHV0OjoKLQotICAgICAgICAgPj4+IGZyb20gc3VicHJvY2VzcyBpbXBvcnQgY2FsbAotICAgICAgICAgPj4+IGZpbGVuYW1lID0gaW5wdXQoIldoYXQgZmlsZSB3b3VsZCB5b3UgbGlrZSB0byBkaXNwbGF5P1xuIikKLSAgICAgICAgIFdoYXQgZmlsZSB3b3VsZCB5b3UgbGlrZSB0byBkaXNwbGF5PwotICAgICAgICAgbm9uX2V4aXN0ZW50OyBybSAtcmYgLyAjCi0gICAgICAgICA+Pj4gY2FsbCgiY2F0ICIgKyBmaWxlbmFtZSwgc2hlbGw9VHJ1ZSkgIyBVaC1vaC4gVGhpcyB3aWxsIGVuZCBiYWRseS4uLgotCi0gICAgICBgYHNoZWxsPUZhbHNlYGAgZGlzYWJsZXMgYWxsIHNoZWxsIGJhc2VkIGZlYXR1cmVzLCBidXQgZG9lcyBub3Qgc3VmZmVyCi0gICAgICBmcm9tIHRoaXMgdnVsbmVyYWJpbGl0eTsgc2VlIHRoZSBOb3RlIGluIHRoZSA6Y2xhc3M6YFBvcGVuYCBjb25zdHJ1Y3RvcgotICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgaGVscGZ1bCBoaW50cyBpbiBnZXR0aW5nIGBgc2hlbGw9RmFsc2VgYCB0byB3b3JrLgotCi0gICAgICBXaGVuIHVzaW5nIGBgc2hlbGw9VHJ1ZWBgLCA6ZnVuYzpgc2hsZXgucXVvdGVgIGNhbiBiZSB1c2VkIHRvIHByb3Blcmx5Ci0gICAgICBlc2NhcGUgd2hpdGVzcGFjZSBhbmQgc2hlbGwgbWV0YWNoYXJhY3RlcnMgaW4gc3RyaW5ncyB0aGF0IGFyZSBnb2luZyB0bwotICAgICAgYmUgdXNlZCB0byBjb25zdHJ1Y3Qgc2hlbGwgY29tbWFuZHMuCisgICAgICBSZWFkIHRoZSBgU2VjdXJpdHkgQ29uc2lkZXJhdGlvbnNgXyBzZWN0aW9uIGJlZm9yZSB1c2luZyBgYHNoZWxsPVRydWVgYC4KIAogVGhlc2Ugb3B0aW9ucywgYWxvbmcgd2l0aCBhbGwgb2YgdGhlIG90aGVyIG9wdGlvbnMsIGFyZSBkZXNjcmliZWQgaW4gbW9yZQogZGV0YWlsIGluIHRoZSA6Y2xhc3M6YFBvcGVuYCBjb25zdHJ1Y3RvciBkb2N1bWVudGF0aW9uLgpAQCAtMzY4LDcgKzM0Miw3IEBACiAgICAgICAgICAgICAgICAgIHN0YXJ0dXBpbmZvPU5vbmUsIGNyZWF0aW9uZmxhZ3M9MCwgcmVzdG9yZV9zaWduYWxzPVRydWUsIFwKICAgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3Nlc3Npb249RmFsc2UsIHBhc3NfZmRzPSgpKQogCi0gICBFeGVjdXRlIGEgY2hpbGQgcHJvZ3JhbSBpbiBhIG5ldyBwcm9jZXNzLiAgT24gVW5peCwgdGhlIGNsYXNzIHVzZXMKKyAgIEV4ZWN1dGUgYSBjaGlsZCBwcm9ncmFtIGluIGEgbmV3IHByb2Nlc3MuICBPbiBQT1NJWCwgdGhlIGNsYXNzIHVzZXMKICAgIDptZXRoOmBvcy5leGVjdnBgLWxpa2UgYmVoYXZpb3IgdG8gZXhlY3V0ZSB0aGUgY2hpbGQgcHJvZ3JhbS4gIE9uIFdpbmRvd3MsCiAgICB0aGUgY2xhc3MgdXNlcyB0aGUgV2luZG93cyBgYENyZWF0ZVByb2Nlc3MoKWBgIGZ1bmN0aW9uLiAgVGhlIGFyZ3VtZW50cyB0bwogICAgOmNsYXNzOmBQb3BlbmAgYXJlIGFzIGZvbGxvd3MuCkBAIC0zODAsNyArMzU0LDcgQEAKICAgIGFyZ3VtZW50cyBmb3IgYWRkaXRpb25hbCBkaWZmZXJlbmNlcyBmcm9tIHRoZSBkZWZhdWx0IGJlaGF2aW9yLiAgVW5sZXNzCiAgICBvdGhlcndpc2Ugc3RhdGVkLCBpdCBpcyByZWNvbW1lbmRlZCB0byBwYXNzICphcmdzKiBhcyBhIHNlcXVlbmNlLgogCi0gICBPbiBVbml4LCBpZiAqYXJncyogaXMgYSBzdHJpbmcsIHRoZSBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUgb3IKKyAgIE9uIFBPU0lYLCBpZiAqYXJncyogaXMgYSBzdHJpbmcsIHRoZSBzdHJpbmcgaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUgb3IKICAgIHBhdGggb2YgdGhlIHByb2dyYW0gdG8gZXhlY3V0ZS4gIEhvd2V2ZXIsIHRoaXMgY2FuIG9ubHkgYmUgZG9uZSBpZiBub3QKICAgIHBhc3NpbmcgYXJndW1lbnRzIHRvIHRoZSBwcm9ncmFtLgogCkBAIC00MTEsNyArMzg1LDcgQEAKICAgIHRoZSBzaGVsbCBhcyB0aGUgcHJvZ3JhbSB0byBleGVjdXRlLiAgSWYgKnNoZWxsKiBpcyAqVHJ1ZSosIGl0IGlzCiAgICByZWNvbW1lbmRlZCB0byBwYXNzICphcmdzKiBhcyBhIHN0cmluZyByYXRoZXIgdGhhbiBhcyBhIHNlcXVlbmNlLgogCi0gICBPbiBVbml4IHdpdGggYGBzaGVsbD1UcnVlYGAsIHRoZSBzaGVsbCBkZWZhdWx0cyB0byA6ZmlsZTpgL2Jpbi9zaGAuICBJZgorICAgT24gUE9TSVggd2l0aCBgYHNoZWxsPVRydWVgYCwgdGhlIHNoZWxsIGRlZmF1bHRzIHRvIDpmaWxlOmAvYmluL3NoYC4gIElmCiAgICAqYXJncyogaXMgYSBzdHJpbmcsIHRoZSBzdHJpbmcgc3BlY2lmaWVzIHRoZSBjb21tYW5kCiAgICB0byBleGVjdXRlIHRocm91Z2ggdGhlIHNoZWxsLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBzdHJpbmcgbXVzdCBiZQogICAgZm9ybWF0dGVkIGV4YWN0bHkgYXMgaXQgd291bGQgYmUgd2hlbiB0eXBlZCBhdCB0aGUgc2hlbGwgcHJvbXB0LiAgVGhpcwpAQCAtNDI4LDE4ICs0MDIsMjIgQEAKICAgIGludG8gdGhlIHNoZWxsIChlLmcuIDpjb21tYW5kOmBkaXJgIG9yIDpjb21tYW5kOmBjb3B5YCkuICBZb3UgZG8gbm90IG5lZWQKICAgIGBgc2hlbGw9VHJ1ZWBgIHRvIHJ1biBhIGJhdGNoIGZpbGUgb3IgY29uc29sZS1iYXNlZCBleGVjdXRhYmxlLgogCi0gICAuLiB3YXJuaW5nOjoKKyAgIC4uIG5vdGU6OgogCi0gICAgICBQYXNzaW5nIGBgc2hlbGw9VHJ1ZWBgIGNhbiBiZSBhIHNlY3VyaXR5IGhhemFyZCBpZiBjb21iaW5lZCB3aXRoCi0gICAgICB1bnRydXN0ZWQgaW5wdXQuICBTZWUgdGhlIHdhcm5pbmcgdW5kZXIgOnJlZjpgZnJlcXVlbnRseS11c2VkLWFyZ3VtZW50c2AKLSAgICAgIGZvciBkZXRhaWxzLgorICAgICAgUmVhZCB0aGUgYFNlY3VyaXR5IENvbnNpZGVyYXRpb25zYF8gc2VjdGlvbiBiZWZvcmUgdXNpbmcgYGBzaGVsbD1UcnVlYGAuCiAKLSAgICpidWZzaXplKiB3aWxsIGJlIHN1cHBsaWVkIGFzIHRoZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50IHRvIHRoZSA6ZnVuYzpgb3BlbmAKLSAgIGZ1bmN0aW9uIHdoZW4gY3JlYXRpbmcgdGhlIHN0ZGluL3N0ZG91dC9zdGRlcnIgcGlwZSBmaWxlIG9iamVjdHM6IDpjb25zdDpgMGAKLSAgIG1lYW5zIHVuYnVmZmVyZWQgKHJlYWQgYW5kIHdyaXRlIGFyZSBvbmUgc3lzdGVtIGNhbGwgYW5kIGNhbiByZXR1cm4gc2hvcnQpLAotICAgOmNvbnN0OmAxYCBtZWFucyBsaW5lIGJ1ZmZlcmVkLCBhbnkgb3RoZXIgcG9zaXRpdmUgdmFsdWUgbWVhbnMgdXNlIGEgYnVmZmVyCi0gICBvZiBhcHByb3hpbWF0ZWx5IHRoYXQgc2l6ZS4gIEEgbmVnYXRpdmUgYnVmc2l6ZSAodGhlIGRlZmF1bHQpIG1lYW5zIHRoZQotICAgc3lzdGVtIGRlZmF1bHQgb2YgaW8uREVGQVVMVF9CVUZGRVJfU0laRSB3aWxsIGJlIHVzZWQuCisgICAqYnVmc2l6ZSogd2lsbCBiZSBzdXBwbGllZCBhcyB0aGUgY29ycmVzcG9uZGluZyBhcmd1bWVudCB0byB0aGUKKyAgIDpmdW5jOmBvcGVuYCBmdW5jdGlvbiB3aGVuIGNyZWF0aW5nIHRoZSBzdGRpbi9zdGRvdXQvc3RkZXJyIHBpcGUKKyAgIGZpbGUgb2JqZWN0czoKKworICAgLSA6Y29uc3Q6YDBgIG1lYW5zIHVuYnVmZmVyZWQgKHJlYWQgYW5kIHdyaXRlIGFyZSBvbmUKKyAgICAgc3lzdGVtIGNhbGwgYW5kIGNhbiByZXR1cm4gc2hvcnQpCisgICAtIDpjb25zdDpgMWAgbWVhbnMgbGluZSBidWZmZXJlZAorICAgICAob25seSB1c2FibGUgaWYgYGB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZWBgIGkuZS4sIGluIGEgdGV4dCBtb2RlKQorICAgLSBhbnkgb3RoZXIgcG9zaXRpdmUgdmFsdWUgbWVhbnMgdXNlIGEgYnVmZmVyIG9mIGFwcHJveGltYXRlbHkgdGhhdAorICAgICBzaXplCisgICAtIG5lZ2F0aXZlIGJ1ZnNpemUgKHRoZSBkZWZhdWx0KSBtZWFucyB0aGUgc3lzdGVtIGRlZmF1bHQgb2YKKyAgICAgaW8uREVGQVVMVF9CVUZGRVJfU0laRSB3aWxsIGJlIHVzZWQuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjEKICAgICAgICpidWZzaXplKiBub3cgZGVmYXVsdHMgdG8gLTEgdG8gZW5hYmxlIGJ1ZmZlcmluZyBieSBkZWZhdWx0IHRvIG1hdGNoIHRoZQpAQCAtNDUzLDkgKzQzMSw5IEBACiAgICBwcm9ncmFtIHRvIGV4ZWN1dGUgc3BlY2lmaWVkIGJ5ICphcmdzKi4gIEhvd2V2ZXIsIHRoZSBvcmlnaW5hbCAqYXJncyogaXMKICAgIHN0aWxsIHBhc3NlZCB0byB0aGUgcHJvZ3JhbS4gIE1vc3QgcHJvZ3JhbXMgdHJlYXQgdGhlIHByb2dyYW0gc3BlY2lmaWVkCiAgICBieSAqYXJncyogYXMgdGhlIGNvbW1hbmQgbmFtZSwgd2hpY2ggY2FuIHRoZW4gYmUgZGlmZmVyZW50IGZyb20gdGhlIHByb2dyYW0KLSAgIGFjdHVhbGx5IGV4ZWN1dGVkLiAgT24gVW5peCwgdGhlICphcmdzKiBuYW1lCisgICBhY3R1YWxseSBleGVjdXRlZC4gIE9uIFBPU0lYLCB0aGUgKmFyZ3MqIG5hbWUKICAgIGJlY29tZXMgdGhlIGRpc3BsYXkgbmFtZSBmb3IgdGhlIGV4ZWN1dGFibGUgaW4gdXRpbGl0aWVzIHN1Y2ggYXMKLSAgIDpwcm9ncmFtOmBwc2AuICBJZiBgYHNoZWxsPVRydWVgYCwgb24gVW5peCB0aGUgKmV4ZWN1dGFibGUqIGFyZ3VtZW50CisgICA6cHJvZ3JhbTpgcHNgLiAgSWYgYGBzaGVsbD1UcnVlYGAsIG9uIFBPU0lYIHRoZSAqZXhlY3V0YWJsZSogYXJndW1lbnQKICAgIHNwZWNpZmllcyBhIHJlcGxhY2VtZW50IHNoZWxsIGZvciB0aGUgZGVmYXVsdCA6ZmlsZTpgL2Jpbi9zaGAuCiAKICAgICpzdGRpbiosICpzdGRvdXQqIGFuZCAqc3RkZXJyKiBzcGVjaWZ5IHRoZSBleGVjdXRlZCBwcm9ncmFtJ3Mgc3RhbmRhcmQgaW5wdXQsCkBAIC00NzEsNyArNDQ5LDcgQEAKIAogICAgSWYgKnByZWV4ZWNfZm4qIGlzIHNldCB0byBhIGNhbGxhYmxlIG9iamVjdCwgdGhpcyBvYmplY3Qgd2lsbCBiZSBjYWxsZWQgaW4gdGhlCiAgICBjaGlsZCBwcm9jZXNzIGp1c3QgYmVmb3JlIHRoZSBjaGlsZCBpcyBleGVjdXRlZC4KLSAgIChVbml4IG9ubHkpCisgICAoUE9TSVggb25seSkKIAogICAgLi4gd2FybmluZzo6CiAKQEAgLTQ4OSw4ICs0NjcsOCBAQAogICAgICAgY29tbW9uIHVzZSBvZiAqcHJlZXhlY19mbiogdG8gY2FsbCBvcy5zZXRzaWQoKSBpbiB0aGUgY2hpbGQuCiAKICAgIElmICpjbG9zZV9mZHMqIGlzIHRydWUsIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGV4Y2VwdCA6Y29uc3Q6YDBgLCA6Y29uc3Q6YDFgIGFuZAotICAgOmNvbnN0OmAyYCB3aWxsIGJlIGNsb3NlZCBiZWZvcmUgdGhlIGNoaWxkIHByb2Nlc3MgaXMgZXhlY3V0ZWQuIChVbml4IG9ubHkpLgotICAgVGhlIGRlZmF1bHQgdmFyaWVzIGJ5IHBsYXRmb3JtOiAgQWx3YXlzIHRydWUgb24gVW5peC4gIE9uIFdpbmRvd3MgaXQgaXMKKyAgIDpjb25zdDpgMmAgd2lsbCBiZSBjbG9zZWQgYmVmb3JlIHRoZSBjaGlsZCBwcm9jZXNzIGlzIGV4ZWN1dGVkLiAoUE9TSVggb25seSkuCisgICBUaGUgZGVmYXVsdCB2YXJpZXMgYnkgcGxhdGZvcm06ICBBbHdheXMgdHJ1ZSBvbiBQT1NJWC4gIE9uIFdpbmRvd3MgaXQgaXMKICAgIHRydWUgd2hlbiAqc3RkaW4qLypzdGRvdXQqLypzdGRlcnIqIGFyZSA6Y29uc3Q6YE5vbmVgLCBmYWxzZSBvdGhlcndpc2UuCiAgICBPbiBXaW5kb3dzLCBpZiAqY2xvc2VfZmRzKiBpcyB0cnVlIHRoZW4gbm8gaGFuZGxlcyB3aWxsIGJlIGluaGVyaXRlZCBieSB0aGUKICAgIGNoaWxkIHByb2Nlc3MuICBOb3RlIHRoYXQgb24gV2luZG93cywgeW91IGNhbm5vdCBzZXQgKmNsb3NlX2ZkcyogdG8gdHJ1ZSBhbmQKQEAgLTUwMiw3ICs0ODAsNyBAQAogCiAgICAqcGFzc19mZHMqIGlzIGFuIG9wdGlvbmFsIHNlcXVlbmNlIG9mIGZpbGUgZGVzY3JpcHRvcnMgdG8ga2VlcCBvcGVuCiAgICBiZXR3ZWVuIHRoZSBwYXJlbnQgYW5kIGNoaWxkLiAgUHJvdmlkaW5nIGFueSAqcGFzc19mZHMqIGZvcmNlcwotICAgKmNsb3NlX2ZkcyogdG8gYmUgOmNvbnN0OmBUcnVlYC4gIChVbml4IG9ubHkpCisgICAqY2xvc2VfZmRzKiB0byBiZSA6Y29uc3Q6YFRydWVgLiAgKFBPU0lYIG9ubHkpCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogICAgICAgVGhlICpwYXNzX2ZkcyogcGFyYW1ldGVyIHdhcyBhZGRlZC4KQEAgLTUxNSwxMyArNDkzLDEzIEBACiAgICBJZiAqcmVzdG9yZV9zaWduYWxzKiBpcyB0cnVlICh0aGUgZGVmYXVsdCkgYWxsIHNpZ25hbHMgdGhhdCBQeXRob24gaGFzIHNldCB0bwogICAgU0lHX0lHTiBhcmUgcmVzdG9yZWQgdG8gU0lHX0RGTCBpbiB0aGUgY2hpbGQgcHJvY2VzcyBiZWZvcmUgdGhlIGV4ZWMuCiAgICBDdXJyZW50bHkgdGhpcyBpbmNsdWRlcyB0aGUgU0lHUElQRSwgU0lHWEZaIGFuZCBTSUdYRlNaIHNpZ25hbHMuCi0gICAoVW5peCBvbmx5KQorICAgKFBPU0lYIG9ubHkpCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAqcmVzdG9yZV9zaWduYWxzKiB3YXMgYWRkZWQuCiAKICAgIElmICpzdGFydF9uZXdfc2Vzc2lvbiogaXMgdHJ1ZSB0aGUgc2V0c2lkKCkgc3lzdGVtIGNhbGwgd2lsbCBiZSBtYWRlIGluIHRoZQotICAgY2hpbGQgcHJvY2VzcyBwcmlvciB0byB0aGUgZXhlY3V0aW9uIG9mIHRoZSBzdWJwcm9jZXNzLiAgKFVuaXggb25seSkKKyAgIGNoaWxkIHByb2Nlc3MgcHJpb3IgdG8gdGhlIGV4ZWN1dGlvbiBvZiB0aGUgc3VicHJvY2Vzcy4gIChQT1NJWCBvbmx5KQogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgKnN0YXJ0X25ld19zZXNzaW9uKiB3YXMgYWRkZWQuCkBAIC01ODgsMTQgKzU2NiwyMSBAQAogICAgICAgVGhlIDpleGM6YFN1YnByb2Nlc3NFcnJvcmAgYmFzZSBjbGFzcyB3YXMgYWRkZWQuCiAKIAotU2VjdXJpdHkKLV5eXl5eXl5eCitTZWN1cml0eSBDb25zaWRlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVW5saWtlIHNvbWUgb3RoZXIgcG9wZW4gZnVuY3Rpb25zLCB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgbmV2ZXIgY2FsbCBhCi1zeXN0ZW0gc2hlbGwgaW1wbGljaXRseS4gIFRoaXMgbWVhbnMgdGhhdCBhbGwgY2hhcmFjdGVycywgaW5jbHVkaW5nIHNoZWxsCi1tZXRhY2hhcmFjdGVycywgY2FuIHNhZmVseSBiZSBwYXNzZWQgdG8gY2hpbGQgcHJvY2Vzc2VzLiBPYnZpb3VzbHksIGlmIHRoZQotc2hlbGwgaXMgaW52b2tlZCBleHBsaWNpdGx5LCB0aGVuIGl0IGlzIHRoZSBhcHBsaWNhdGlvbidzIHJlc3BvbnNpYmlsaXR5IHRvCi1lbnN1cmUgdGhhdCBhbGwgd2hpdGVzcGFjZSBhbmQgbWV0YWNoYXJhY3RlcnMgYXJlIHF1b3RlZCBhcHByb3ByaWF0ZWx5LgorVW5saWtlIHNvbWUgb3RoZXIgcG9wZW4gZnVuY3Rpb25zLCB0aGlzIGltcGxlbWVudGF0aW9uIHdpbGwgbmV2ZXIKK2ltcGxpY2l0bHkgY2FsbCBhIHN5c3RlbSBzaGVsbC4gIFRoaXMgbWVhbnMgdGhhdCBhbGwgY2hhcmFjdGVycywKK2luY2x1ZGluZyBzaGVsbCBtZXRhY2hhcmFjdGVycywgY2FuIHNhZmVseSBiZSBwYXNzZWQgdG8gY2hpbGQgcHJvY2Vzc2VzLgorSWYgdGhlIHNoZWxsIGlzIGludm9rZWQgZXhwbGljaXRseSwgdmlhIGBgc2hlbGw9VHJ1ZWBgLCBpdCBpcyB0aGUgYXBwbGljYXRpb24ncworcmVzcG9uc2liaWxpdHkgdG8gZW5zdXJlIHRoYXQgYWxsIHdoaXRlc3BhY2UgYW5kIG1ldGFjaGFyYWN0ZXJzIGFyZQorcXVvdGVkIGFwcHJvcHJpYXRlbHkgdG8gYXZvaWQKK2BzaGVsbCBpbmplY3Rpb24gPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU2hlbGxfaW5qZWN0aW9uI1NoZWxsX2luamVjdGlvbj5gXwordnVsbmVyYWJpbGl0aWVzLgorCitXaGVuIHVzaW5nIGBgc2hlbGw9VHJ1ZWBgLCB0aGUgOmZ1bmM6YHNobGV4LnF1b3RlYCBmdW5jdGlvbiBjYW4gYmUKK3VzZWQgdG8gcHJvcGVybHkgZXNjYXBlIHdoaXRlc3BhY2UgYW5kIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIGluIHN0cmluZ3MKK3RoYXQgYXJlIGdvaW5nIHRvIGJlIHVzZWQgdG8gY29uc3RydWN0IHNoZWxsIGNvbW1hbmRzLgogCiAKIFBvcGVuIE9iamVjdHMKQEAgLTYxOSwxNiArNjA0LDI3IEBACiAgICA6ZXhjOmBUaW1lb3V0RXhwaXJlZGAgZXhjZXB0aW9uLiAgSXQgaXMgc2FmZSB0byBjYXRjaCB0aGlzIGV4Y2VwdGlvbiBhbmQKICAgIHJldHJ5IHRoZSB3YWl0LgogCi0gICAuLiB3YXJuaW5nOjoKKyAgIC4uIG5vdGU6OgogCi0gICAgICBUaGlzIHdpbGwgZGVhZGxvY2sgd2hlbiB1c2luZyBgYHN0ZG91dD1QSVBFYGAgYW5kL29yCi0gICAgICBgYHN0ZGVycj1QSVBFYGAgYW5kIHRoZSBjaGlsZCBwcm9jZXNzIGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvCi0gICAgICBhIHBpcGUgc3VjaCB0aGF0IGl0IGJsb2NrcyB3YWl0aW5nIGZvciB0aGUgT1MgcGlwZSBidWZmZXIgdG8KLSAgICAgIGFjY2VwdCBtb3JlIGRhdGEuICBVc2UgOm1ldGg6YGNvbW11bmljYXRlYCB0byBhdm9pZCB0aGF0LgorICAgICAgVGhpcyB3aWxsIGRlYWRsb2NrIHdoZW4gdXNpbmcgYGBzdGRvdXQ9UElQRWBgIG9yIGBgc3RkZXJyPVBJUEVgYAorICAgICAgYW5kIHRoZSBjaGlsZCBwcm9jZXNzIGdlbmVyYXRlcyBlbm91Z2ggb3V0cHV0IHRvIGEgcGlwZSBzdWNoIHRoYXQKKyAgICAgIGl0IGJsb2NrcyB3YWl0aW5nIGZvciB0aGUgT1MgcGlwZSBidWZmZXIgdG8gYWNjZXB0IG1vcmUgZGF0YS4KKyAgICAgIFVzZSA6bWV0aDpgUG9wZW4uY29tbXVuaWNhdGVgIHdoZW4gdXNpbmcgcGlwZXMgdG8gYXZvaWQgdGhhdC4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIFRoZSBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIGJ1c3kgbG9vcCAobm9uLWJsb2NraW5nIGNhbGwgYW5kCisgICAgICBzaG9ydCBzbGVlcHMpLiBVc2UgdGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZSBmb3IgYW4gYXN5bmNocm9ub3VzIHdhaXQ6CisgICAgICBzZWUgOmNsYXNzOmBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWNgLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgKnRpbWVvdXQqIHdhcyBhZGRlZC4KIAorICAgLi4gZGVwcmVjYXRlZDo6IDMuNAorCisgICAgICBEbyBub3QgdXNlIHRoZSAqZW5kdGltZSogcGFyYW1ldGVyLiAgSXQgaXMgd2FzIHVuaW50ZW50aW9uYWxseQorICAgICAgZXhwb3NlZCBpbiAzLjMgYnV0IHdhcyBsZWZ0IHVuZG9jdW1lbnRlZCBhcyBpdCB3YXMgaW50ZW5kZWQgdG8gYmUKKyAgICAgIHByaXZhdGUgZm9yIGludGVybmFsIHVzZS4gIFVzZSAqdGltZW91dCogaW5zdGVhZC4KIAogLi4gbWV0aG9kOjogUG9wZW4uY29tbXVuaWNhdGUoaW5wdXQ9Tm9uZSwgdGltZW91dD1Ob25lKQogCkBAIC02MzgsNyArNjM0LDcgQEAKICAgIGBgTm9uZWBgLCBpZiBubyBkYXRhIHNob3VsZCBiZSBzZW50IHRvIHRoZSBjaGlsZC4gIFRoZSB0eXBlIG9mICppbnB1dCoKICAgIG11c3QgYmUgYnl0ZXMgb3IsIGlmICp1bml2ZXJzYWxfbmV3bGluZXMqIHdhcyBgYFRydWVgYCwgYSBzdHJpbmcuCiAKLSAgIDptZXRoOmBjb21tdW5pY2F0ZWAgcmV0dXJucyBhIHR1cGxlIGBgKHN0ZG91dGRhdGEsIHN0ZGVycmRhdGEpYGAuCisgICA6bWV0aDpgY29tbXVuaWNhdGVgIHJldHVybnMgYSB0dXBsZSBgYChzdGRvdXRfZGF0YSwgc3RkZXJyX2RhdGEpYGAuCiAKICAgIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byBzZW5kIGRhdGEgdG8gdGhlIHByb2Nlc3MncyBzdGRpbiwgeW91IG5lZWQgdG8gY3JlYXRlCiAgICB0aGUgUG9wZW4gb2JqZWN0IHdpdGggYGBzdGRpbj1QSVBFYGAuICBTaW1pbGFybHksIHRvIGdldCBhbnl0aGluZyBvdGhlciB0aGFuCkBAIC02OTUsMTMgKzY5MSw2IEBACiAKIFRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgYWxzbyBhdmFpbGFibGU6CiAKLS4uIHdhcm5pbmc6OgotCi0gICBVc2UgOm1ldGg6YH5Qb3Blbi5jb21tdW5pY2F0ZWAgcmF0aGVyIHRoYW4gOmF0dHI6YC5zdGRpbi53cml0ZSA8UG9wZW4uc3RkaW4+YCwKLSAgIDphdHRyOmAuc3Rkb3V0LnJlYWQgPFBvcGVuLnN0ZG91dD5gIG9yIDphdHRyOmAuc3RkZXJyLnJlYWQgPFBvcGVuLnN0ZGVycj5gIHRvIGF2b2lkCi0gICBkZWFkbG9ja3MgZHVlIHRvIGFueSBvZiB0aGUgb3RoZXIgT1MgcGlwZSBidWZmZXJzIGZpbGxpbmcgdXAgYW5kIGJsb2NraW5nIHRoZQotICAgY2hpbGQgcHJvY2Vzcy4KLQogLi4gYXR0cmlidXRlOjogUG9wZW4uYXJncwogCiAgICBUaGUgKmFyZ3MqIGFyZ3VtZW50IGFzIGl0IHdhcyBwYXNzZWQgdG8gOmNsYXNzOmBQb3BlbmAgLS0gYQpAQCAtNzM1LDYgKzcyNCwxMyBAQAogICAgYGBUcnVlYGAsIHRoZSBzdHJlYW0gaXMgYSB0ZXh0IHN0cmVhbSwgb3RoZXJ3aXNlIGl0IGlzIGEgYnl0ZSBzdHJlYW0uIElmIHRoZQogICAgKnN0ZGVyciogYXJndW1lbnQgd2FzIG5vdCA6ZGF0YTpgUElQRWAsIHRoaXMgYXR0cmlidXRlIGlzIGBgTm9uZWBgLgogCisuLiB3YXJuaW5nOjoKKworICAgVXNlIDptZXRoOmB+UG9wZW4uY29tbXVuaWNhdGVgIHJhdGhlciB0aGFuIDphdHRyOmAuc3RkaW4ud3JpdGUgPFBvcGVuLnN0ZGluPmAsCisgICA6YXR0cjpgLnN0ZG91dC5yZWFkIDxQb3Blbi5zdGRvdXQ+YCBvciA6YXR0cjpgLnN0ZGVyci5yZWFkIDxQb3Blbi5zdGRlcnI+YCB0byBhdm9pZAorICAgZGVhZGxvY2tzIGR1ZSB0byBhbnkgb2YgdGhlIG90aGVyIE9TIHBpcGUgYnVmZmVycyBmaWxsaW5nIHVwIGFuZCBibG9ja2luZyB0aGUKKyAgIGNoaWxkIHByb2Nlc3MuCisKIAogLi4gYXR0cmlidXRlOjogUG9wZW4ucGlkCiAKQEAgLTc1MSw3ICs3NDcsNyBAQAogICAgaGFzbid0IHRlcm1pbmF0ZWQgeWV0LgogCiAgICBBIG5lZ2F0aXZlIHZhbHVlIGBgLU5gYCBpbmRpY2F0ZXMgdGhhdCB0aGUgY2hpbGQgd2FzIHRlcm1pbmF0ZWQgYnkgc2lnbmFsCi0gICBgYE5gYCAoVW5peCBvbmx5KS4KKyAgIGBgTmBgIChQT1NJWCBvbmx5KS4KIAogCiBXaW5kb3dzIFBvcGVuIEhlbHBlcnMKQEAgLTg0Nyw4ICs4NDMsNiBAQAogICAgVGhlIG5ldyBwcm9jZXNzIGhhcyBhIG5ldyBjb25zb2xlLCBpbnN0ZWFkIG9mIGluaGVyaXRpbmcgaXRzIHBhcmVudCdzCiAgICBjb25zb2xlICh0aGUgZGVmYXVsdCkuCiAKLSAgIFRoaXMgZmxhZyBpcyBhbHdheXMgc2V0IHdoZW4gOmNsYXNzOmBQb3BlbmAgaXMgY3JlYXRlZCB3aXRoIGBgc2hlbGw9VHJ1ZWBgLgotCiAuLiBkYXRhOjogQ1JFQVRFX05FV19QUk9DRVNTX0dST1VQCiAKICAgIEEgOmNsYXNzOmBQb3BlbmAgYGBjcmVhdGlvbmZsYWdzYGAgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhhdCBhIG5ldyBwcm9jZXNzCkBAIC0xMDA2LDcgKzEwMDAsNyBAQAogICAgaWYgcmMgaXMgbm90IE5vbmUgYW5kIHJjID4+IDg6CiAgICAgICAgcHJpbnQoIlRoZXJlIHdlcmUgc29tZSBlcnJvcnMiKQogICAgPT0+Ci0gICBwcm9jZXNzID0gUG9wZW4oY21kLCAndycsIHN0ZGluPVBJUEUpCisgICBwcm9jZXNzID0gUG9wZW4oY21kLCBzdGRpbj1QSVBFKQogICAgLi4uCiAgICBwcm9jZXNzLnN0ZGluLmNsb3NlKCkKICAgIGlmIHByb2Nlc3Mud2FpdCgpICE9IDA6CkBAIC0xMDI1LDcgKzEwMTksNyBAQAogCiAgICAoY2hpbGRfc3Rkb3V0LCBjaGlsZF9zdGRpbikgPSBwb3BlbjIucG9wZW4yKCJzb21lc3RyaW5nIiwgYnVmc2l6ZSwgbW9kZSkKICAgID09PgotICAgcCA9IFBvcGVuKFsic29tZXN0cmluZyJdLCBzaGVsbD1UcnVlLCBidWZzaXplPWJ1ZnNpemUsCisgICBwID0gUG9wZW4oInNvbWVzdHJpbmciLCBzaGVsbD1UcnVlLCBidWZzaXplPWJ1ZnNpemUsCiAgICAgICAgICAgICAgc3RkaW49UElQRSwgc3Rkb3V0PVBJUEUsIGNsb3NlX2Zkcz1UcnVlKQogICAgKGNoaWxkX3N0ZG91dCwgY2hpbGRfc3RkaW4pID0gKHAuc3Rkb3V0LCBwLnN0ZGluKQogCkBAIC0xMDYzLDkgKzEwNTcsOSBAQAogCiAgICBSZXR1cm4gYGAoc3RhdHVzLCBvdXRwdXQpYGAgb2YgZXhlY3V0aW5nICpjbWQqIGluIGEgc2hlbGwuCiAKLSAgIEV4ZWN1dGUgdGhlIHN0cmluZyAqY21kKiBpbiBhIHNoZWxsIHdpdGggOmNsYXNzOmBQb3BlbmAgYW5kIHJldHVybiBhIDItdHVwbGUKLSAgIGBgKHN0YXR1cywgb3V0cHV0KWBgIHZpYSA6ZnVuYzpgUG9wZW4uY29tbXVuaWNhdGVgLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZQotICAgaXMgdXNlZDsgc2VlIHRoZSBub3RlcyBvbiA6cmVmOmBmcmVxdWVudGx5LXVzZWQtYXJndW1lbnRzYCBmb3IgbW9yZSBkZXRhaWxzLgorICAgRXhlY3V0ZSB0aGUgc3RyaW5nICpjbWQqIGluIGEgc2hlbGwgd2l0aCA6bWV0aDpgUG9wZW4uY2hlY2tfb3V0cHV0YCBhbmQKKyAgIHJldHVybiBhIDItdHVwbGUgYGAoc3RhdHVzLCBvdXRwdXQpYGAuIFVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzIHVzZWQ7CisgICBzZWUgdGhlIG5vdGVzIG9uIDpyZWY6YGZyZXF1ZW50bHktdXNlZC1hcmd1bWVudHNgIGZvciBtb3JlIGRldGFpbHMuCiAKICAgIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuCiAgICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZSBpbnRlcnByZXRlZApAQCAtMTA3OCw3ICsxMDcyLDcgQEAKICAgICAgID4+PiBzdWJwcm9jZXNzLmdldHN0YXR1c291dHB1dCgnL2Jpbi9qdW5rJykKICAgICAgICgyNTYsICdzaDogL2Jpbi9qdW5rOiBub3QgZm91bmQnKQogCi0gICBBdmFpbGFiaWxpdHk6IFVuaXggJiBXaW5kb3dzCisgICBBdmFpbGFiaWxpdHk6IFBPU0lYICYgV2luZG93cwogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMy40CiAgICAgICBXaW5kb3dzIHN1cHBvcnQgYWRkZWQKQEAgLTEwOTQsNyArMTA4OCw3IEBACiAgICAgICA+Pj4gc3VicHJvY2Vzcy5nZXRvdXRwdXQoJ2xzIC9iaW4vbHMnKQogICAgICAgJy9iaW4vbHMnCiAKLSAgIEF2YWlsYWJpbGl0eTogVW5peCAmIFdpbmRvd3MKKyAgIEF2YWlsYWJpbGl0eTogUE9TSVggJiBXaW5kb3dzCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjQKICAgICAgIFdpbmRvd3Mgc3VwcG9ydCBhZGRlZApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3VuYXUucnN0IGIvRG9jL2xpYnJhcnkvc3VuYXUucnN0CmluZGV4IDRiZGI5OWIuLmJkMzdlZTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N1bmF1LnJzdAorKysgYi9Eb2MvbGlicmFyeS9zdW5hdS5yc3QKQEAgLTU0LDggKzU0LDggQEAKIAogICAgTm90ZSB0aGF0IGl0IGRvZXMgbm90IGFsbG93IHJlYWQvd3JpdGUgZmlsZXMuCiAKLSAgIEEgKm1vZGUqIG9mIGBgJ3InYGAgcmV0dXJucyBhIDpjbGFzczpgQVVfcmVhZGAgb2JqZWN0LCB3aGlsZSBhICptb2RlKiBvZiBgYCd3J2BgCi0gICBvciBgYCd3YidgYCByZXR1cm5zIGEgOmNsYXNzOmBBVV93cml0ZWAgb2JqZWN0LgorICAgQSAqbW9kZSogb2YgYGAncidgYCByZXR1cm5zIGFuIDpjbGFzczpgQVVfcmVhZGAgb2JqZWN0LCB3aGlsZSBhICptb2RlKiBvZiBgYCd3J2BgCisgICBvciBgYCd3YidgYCByZXR1cm5zIGFuIDpjbGFzczpgQVVfd3JpdGVgIG9iamVjdC4KIAogCiAuLiBmdW5jdGlvbjo6IG9wZW5mcChmaWxlLCBtb2RlKQpAQCAtMTUwLDggKzE1MCw5IEBACiAKIC4uIG1ldGhvZDo6IEFVX3JlYWQuZ2V0cGFyYW1zKCkKIAotICAgUmV0dXJucyBhIHR1cGxlIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLCBmcmFtZXJhdGUsIG5mcmFtZXMsIGNvbXB0eXBlLAotICAgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZSA6bWV0aDpgZ2V0XCpgIG1ldGhvZHMuCisgICBSZXR1cm5zIGEgOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYCBgYChuY2hhbm5lbHMsIHNhbXB3aWR0aCwKKyAgIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsIGNvbXBuYW1lKWBgLCBlcXVpdmFsZW50IHRvIG91dHB1dCBvZiB0aGUKKyAgIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KIAogCiAuLiBtZXRob2Q6OiBBVV9yZWFkLnJlYWRmcmFtZXMobikKQEAgLTIxMSw2ICsyMTIsOSBAQAogCiAgICBTZXQgdGhlIHNhbXBsZSB3aWR0aCAoaW4gYnl0ZXMuKQogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgc3VwcG9ydCBmb3IgMjQtYml0IHNhbXBsZXMuCisKIAogLi4gbWV0aG9kOjogQVVfd3JpdGUuc2V0ZnJhbWVyYXRlKG4pCiAKQEAgLTI0NiwxMSArMjUwLDE3IEBACiAKICAgIFdyaXRlIGF1ZGlvIGZyYW1lcywgd2l0aG91dCBjb3JyZWN0aW5nICpuZnJhbWVzKi4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBBVV93cml0ZS53cml0ZWZyYW1lcyhkYXRhKQogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMgYW5kIG1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFueSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgIGlzIG5vdyBhY2NlcHRlZC4KKwogCiAuLiBtZXRob2Q6OiBBVV93cml0ZS5jbG9zZSgpCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N1cGVyc2VkZWQucnN0IGIvRG9jL2xpYnJhcnkvc3VwZXJzZWRlZC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTBhNTk4MwotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3N1cGVyc2VkZWQucnN0CkBAIC0wLDAgKzEsMTQgQEAKKy4uIF9zdXBlcnNlZGVkOgorCisqKioqKioqKioqKioqKioqKioKK1N1cGVyc2VkZWQgTW9kdWxlcworKioqKioqKioqKioqKioqKioqCisKK1RoZSBtb2R1bGVzIGRlc2NyaWJlZCBpbiB0aGlzIGNoYXB0ZXIgYXJlIGRlcHJlY2F0ZWQgYW5kIG9ubHkga2VwdCBmb3IKK2JhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBUaGV5IGhhdmUgYmVlbiBzdXBlcnNlZGVkIGJ5IG90aGVyIG1vZHVsZXMuCisKKworLi4gdG9jdHJlZTo6CisKKyAgIG9wdHBhcnNlLnJzdAorICAgaW1wLnJzdApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvc3ltdGFibGUucnN0IGIvRG9jL2xpYnJhcnkvc3ltdGFibGUucnN0CmluZGV4IDQ3MmE5ZDYuLjI1MDNkMzMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5bXRhYmxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS9zeW10YWJsZS5yc3QKQEAgLTQsNiArNCwxMCBAQAogLi4gbW9kdWxlOjogc3ltdGFibGUKICAgIDpzeW5vcHNpczogSW50ZXJmYWNlIHRvIHRoZSBjb21waWxlcidzIGludGVybmFsIHN5bWJvbCB0YWJsZXMuCiAKKyoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3N5bXRhYmxlLnB5YAorCistLS0tLS0tLS0tLS0tLQorCiAuLiBtb2R1bGVhdXRob3I6OiBKZXJlbXkgSHlsdG9uIDxqZXJlbXlAYWx1bS5taXQuZWR1PgogLi4gc2VjdGlvbmF1dGhvcjo6IEJlbmphbWluIFBldGVyc29uIDxiZW5qYW1pbkBweXRob24ub3JnPgogCkBAIC0xODUsNCArMTg5LDQgQEAKICAgIC4uIG1ldGhvZDo6IGdldF9uYW1lc3BhY2UoKQogCiAgICAgICBSZXR1cm4gdGhlIG5hbWVzcGFjZSBib3VuZCB0byB0aGlzIG5hbWUuICBJZiBtb3JlIHRoYW4gb25lIG5hbWVzcGFjZSBpcwotICAgICAgYm91bmQsIGEgOmV4YzpgVmFsdWVFcnJvcmAgaXMgcmFpc2VkLgorICAgICAgYm91bmQsIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3N5cy5yc3QgYi9Eb2MvbGlicmFyeS9zeXMucnN0CmluZGV4IDM2YzYwOGMuLmMwMzc4ZTAgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3N5cy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvc3lzLnJzdApAQCAtMTIsMTEgKzEyLDEyIEBACiAKIC4uIGRhdGE6OiBhYmlmbGFncwogCi0gICBPbiBQT1NJWCBzeXN0ZW1zIHdoZXJlIFB5dGhvbiBpcyBidWlsZCB3aXRoIHRoZSBzdGFuZGFyZCBgYGNvbmZpZ3VyZWBgCisgICBPbiBQT1NJWCBzeXN0ZW1zIHdoZXJlIFB5dGhvbiB3YXMgYnVpbHQgd2l0aCB0aGUgc3RhbmRhcmQgYGBjb25maWd1cmVgYAogICAgc2NyaXB0LCB0aGlzIGNvbnRhaW5zIHRoZSBBQkkgZmxhZ3MgYXMgc3BlY2lmaWVkIGJ5IDpwZXA6YDMxNDlgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorCiAuLiBkYXRhOjogYXJndgogCiAgICBUaGUgbGlzdCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHBhc3NlZCB0byBhIFB5dGhvbiBzY3JpcHQuIGBgYXJndlswXWBgIGlzIHRoZQpAQCAtMzgyLDYgKzM4MywyMSBAQAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorLi4gZnVuY3Rpb246OiBnZXRhbGxvY2F0ZWRibG9ja3MoKQorCisgICBSZXR1cm4gdGhlIG51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGN1cnJlbnRseSBhbGxvY2F0ZWQgYnkgdGhlIGludGVycHJldGVyLAorICAgcmVnYXJkbGVzcyBvZiB0aGVpciBzaXplLiAgVGhpcyBmdW5jdGlvbiBpcyBtYWlubHkgdXNlZnVsIGZvciB0cmFja2luZworICAgYW5kIGRlYnVnZ2luZyBtZW1vcnkgbGVha3MuICBCZWNhdXNlIG9mIHRoZSBpbnRlcnByZXRlcidzIGludGVybmFsCisgICBjYWNoZXMsIHRoZSByZXN1bHQgY2FuIHZhcnkgZnJvbSBjYWxsIHRvIGNhbGw7IHlvdSBtYXkgaGF2ZSB0byBjYWxsCisgICA6ZnVuYzpgX2NsZWFyX3R5cGVfY2FjaGUoKWAgYW5kIDpmdW5jOmBnYy5jb2xsZWN0KClgIHRvIGdldCBtb3JlCisgICBwcmVkaWN0YWJsZSByZXN1bHRzLgorCisgICBJZiBhIFB5dGhvbiBidWlsZCBvciBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgcmVhc29uYWJseSBjb21wdXRlIHRoaXMKKyAgIGluZm9ybWF0aW9uLCA6ZnVuYzpgZ2V0YWxsb2NhdGVkYmxvY2tzKClgIGlzIGFsbG93ZWQgdG8gcmV0dXJuIDAgaW5zdGVhZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBnZXRjaGVja2ludGVydmFsKCkKIAogICAgUmV0dXJuIHRoZSBpbnRlcnByZXRlcidzICJjaGVjayBpbnRlcnZhbCI7IHNlZSA6ZnVuYzpgc2V0Y2hlY2tpbnRlcnZhbGAuCkBAIC0zOTgsOSArNDE0LDEwIEBACiAKIC4uIGZ1bmN0aW9uOjogZ2V0ZGxvcGVuZmxhZ3MoKQogCi0gICBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZsYWdzIHRoYXQgYXJlIHVzZWQgZm9yIDpjOmZ1bmM6YGRsb3BlbmAgY2FsbHMuCi0gICBUaGUgZmxhZyBjb25zdGFudHMgYXJlIGRlZmluZWQgaW4gdGhlIDptb2Q6YGN0eXBlc2AgYW5kIDptb2Q6YERMRkNOYCBtb2R1bGVzLgotICAgQXZhaWxhYmlsaXR5OiBVbml4LgorICAgUmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBmbGFncyB0aGF0IGFyZSB1c2VkIGZvcgorICAgOmM6ZnVuYzpgZGxvcGVuYCBjYWxscy4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyB2YWx1ZXMgY2FuIGJlCisgICBmb3VuZCBpbiB0aGUgOm1vZDpgb3NgIG1vZHVsZSAoYGBSVExEX3h4eGBgIGNvbnN0YW50cywgZS5nLgorICAgOmRhdGE6YG9zLlJUTERfTEFaWWApLiAgQXZhaWxhYmlsaXR5OiBVbml4LgogCiAKIC4uIGZ1bmN0aW9uOjogZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkKQEAgLTU3OSw5ICs1OTYsMjAgQEAKICAgIHwgOmNvbnN0OmBpbWFnYCAgICAgICB8IG11bHRpcGxpZXIgdXNlZCBmb3IgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgICAgfCBjb21wbGV4IG51bWJlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBhbGdvcml0aG1gICB8IG5hbWUgb2YgdGhlIGFsZ29yaXRobSBmb3IgaGFzaGluZyBvZiBzdHIsIGJ5dGVzLCB8CisgICB8ICAgICAgICAgICAgICAgICAgICAgfCBhbmQgbWVtb3J5dmlldyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgIHwgOmNvbnN0OmBoYXNoX2JpdHNgICB8IGludGVybmFsIG91dHB1dCBzaXplIG9mIHRoZSBoYXNoIGFsZ29yaXRobSAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgfCA6Y29uc3Q6YHNlZWRfYml0c2AgIHwgc2l6ZSBvZiB0aGUgc2VlZCBrZXkgb2YgdGhlIGhhc2ggYWxnb3JpdGhtICAgICAgIHwKKyAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCAqYWxnb3JpdGhtKiwgKmhhc2hfYml0cyogYW5kICpzZWVkX2JpdHMqCisKIAogLi4gZGF0YTo6IGhleHZlcnNpb24KIApAQCAtNjAxLDcgKzYyOSw3IEBACiAgICA6dGVybTpgc3RydWN0IHNlcXVlbmNlYCAgOmRhdGE6YHN5cy52ZXJzaW9uX2luZm9gIG1heSBiZSB1c2VkIGZvciBhIG1vcmUKICAgIGh1bWFuLWZyaWVuZGx5IGVuY29kaW5nIG9mIHRoZSBzYW1lIGluZm9ybWF0aW9uLgogCi0gICBNb3JlIGRldGFpbHMgb2YgYGBoZXh2ZXJzaW9uYGAgY2FuIGJlIGZvdW5kIGF0IDpyZWY6YGFwaWFiaXZlcnNpb25gCisgICBNb3JlIGRldGFpbHMgb2YgYGBoZXh2ZXJzaW9uYGAgY2FuIGJlIGZvdW5kIGF0IDpyZWY6YGFwaWFiaXZlcnNpb25gLgogCiAKIC4uIGRhdGE6OiBpbXBsZW1lbnRhdGlvbgpAQCAtNjM5LDcgKzY2Nyw3IEBACiAgICBhbiB1bmRlcnNjb3JlLCBhbmQgYXJlIG5vdCBkZXNjcmliZWQgaGVyZS4gIFJlZ2FyZGxlc3Mgb2YgaXRzIGNvbnRlbnRzLAogICAgOmRhdGE6YHN5cy5pbXBsZW1lbnRhdGlvbmAgd2lsbCBub3QgY2hhbmdlIGR1cmluZyBhIHJ1biBvZiB0aGUgaW50ZXJwcmV0ZXIsCiAgICBub3IgYmV0d2VlbiBpbXBsZW1lbnRhdGlvbiB2ZXJzaW9ucy4gIChJdCBtYXkgY2hhbmdlIGJldHdlZW4gUHl0aG9uCi0gICBsYW5ndWFnZSB2ZXJzaW9ucywgaG93ZXZlci4pICBTZWUgYFBFUCA0MjFgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICAgbGFuZ3VhZ2UgdmVyc2lvbnMsIGhvd2V2ZXIuKSAgU2VlIDpwZXA6YDQyMWAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwogCkBAIC02NjUsNiArNjkzLDE3IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjEKIAogCisuLiBkYXRhOjogX19pbnRlcmFjdGl2ZWhvb2tfXworCisgICBXaGVuIHRoaXMgYXR0cmlidXRlIGV4aXN0cywgaXRzIHZhbHVlIGlzIGF1dG9tYXRpY2FsbHkgY2FsbGVkICh3aXRoIG5vCisgICBhcmd1bWVudHMpIHdoZW4gdGhlIGludGVycHJldGVyIGlzIGxhdW5jaGVkIGluIDpyZWY6YGludGVyYWN0aXZlIG1vZGUKKyAgIDx0dXQtaW50ZXJhY3RpdmU+YC4gIFRoaXMgaXMgZG9uZSBhZnRlciB0aGUgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZmlsZSBpcworICAgcmVhZCwgc28gdGhhdCB5b3UgY2FuIHNldCB0aGlzIGhvb2sgdGhlcmUuICBUaGUgOm1vZDpgc2l0ZWAgbW9kdWxlCisgICA6cmVmOmBzZXRzIHRoaXMgPHJsY29tcGxldGVyLWNvbmZpZz5gLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBmdW5jdGlvbjo6IGludGVybihzdHJpbmcpCiAKICAgIEVudGVyICpzdHJpbmcqIGluIHRoZSB0YWJsZSBvZiAiaW50ZXJuZWQiIHN0cmluZ3MgYW5kIHJldHVybiB0aGUgaW50ZXJuZWQgc3RyaW5nCkBAIC04MTIsOCArODUxLDYgQEAKICAgIFdpbmRvd3MgICAgICAgICAgYGAnd2luMzInYGAKICAgIFdpbmRvd3MvQ3lnd2luICAgYGAnY3lnd2luJ2BgCiAgICBNYWMgT1MgWCAgICAgICAgIGBgJ2RhcndpbidgYAotICAgT1MvMiAgICAgICAgICAgICBgYCdvczInYGAKLSAgIE9TLzIgRU1YICAgICAgICAgYGAnb3MyZW14J2BgCiAgICA9PT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwpAQCAtODg0LDcgKzkyMSw3IEBACiAgICB0aGUgaW50ZXJwcmV0ZXIgbG9hZHMgZXh0ZW5zaW9uIG1vZHVsZXMuICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgd2lsbCBlbmFibGUgYQogICAgbGF6eSByZXNvbHZpbmcgb2Ygc3ltYm9scyB3aGVuIGltcG9ydGluZyBhIG1vZHVsZSwgaWYgY2FsbGVkIGFzCiAgICBgYHN5cy5zZXRkbG9wZW5mbGFncygwKWBgLiAgVG8gc2hhcmUgc3ltYm9scyBhY3Jvc3MgZXh0ZW5zaW9uIG1vZHVsZXMsIGNhbGwgYXMKLSAgIGBgc3lzLnNldGRsb3BlbmZsYWdzKG9zLlJUTERfR0xPQkFMKWBgLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIG1vZHVsZXMKKyAgIGBgc3lzLnNldGRsb3BlbmZsYWdzKG9zLlJUTERfR0xPQkFMKWBgLiAgU3ltYm9saWMgbmFtZXMgZm9yIHRoZSBmbGFnIHZhbHVlcwogICAgY2FuIGJlIGZvdW5kIGluIHRoZSA6bW9kOmBvc2AgbW9kdWxlIChgYFJUTERfeHh4YGAgY29uc3RhbnRzLCBlLmcuCiAgICA6ZGF0YTpgb3MuUlRMRF9MQVpZYCkuCiAKQEAgLTEwMjksOCArMTA2Niw5IEBACiAgICAgIHN0YXRlbWVudHMgYW5kIGZvciB0aGUgcHJvbXB0cyBvZiA6ZnVuYzpgaW5wdXRgOwogICAgKiBUaGUgaW50ZXJwcmV0ZXIncyBvd24gcHJvbXB0cyBhbmQgaXRzIGVycm9yIG1lc3NhZ2VzIGdvIHRvIGBgc3RkZXJyYGAuCiAKLSAgIEJ5IGRlZmF1bHQsIHRoZXNlIHN0cmVhbXMgYXJlIHJlZ3VsYXIgdGV4dCBzdHJlYW1zIGFzIHJldHVybmVkIGJ5IHRoZQotICAgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uLiAgVGhlaXIgcGFyYW1ldGVycyBhcmUgY2hvc2VuIGFzIGZvbGxvd3M6CisgICBUaGVzZSBzdHJlYW1zIGFyZSByZWd1bGFyIDp0ZXJtOmB0ZXh0IGZpbGVzIDx0ZXh0IGZpbGU+YCBsaWtlIHRob3NlCisgICByZXR1cm5lZCBieSB0aGUgOmZ1bmM6YG9wZW5gIGZ1bmN0aW9uLiAgVGhlaXIgcGFyYW1ldGVycyBhcmUgY2hvc2VuIGFzCisgICBmb2xsb3dzOgogCiAgICAqIFRoZSBjaGFyYWN0ZXIgZW5jb2RpbmcgaXMgcGxhdGZvcm0tZGVwZW5kZW50LiAgVW5kZXIgV2luZG93cywgaWYgdGhlIHN0cmVhbQogICAgICBpcyBpbnRlcmFjdGl2ZSAodGhhdCBpcywgaWYgaXRzIDptZXRoOmBpc2F0dHlgIG1ldGhvZCByZXR1cm5zIGBgVHJ1ZWBgKSwgdGhlCkBAIC0xMDM4LDI2ICsxMDc2LDIyIEBACiAgICAgIHBsYXRmb3JtcywgdGhlIGxvY2FsZSBlbmNvZGluZyBpcyB1c2VkIChzZWUgOm1ldGg6YGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZ2ApLgogCiAgICAgIFVuZGVyIGFsbCBwbGF0Zm9ybXMgdGhvdWdoLCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgdmFsdWUgYnkgc2V0dGluZyB0aGUKLSAgICAgOmVudnZhcjpgUFlUSE9OSU9FTkNPRElOR2AgZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGVudmlyb25tZW50IHZhcmlhYmxlIGJlZm9yZSBzdGFydGluZyBQeXRob24uCiAKICAgICogV2hlbiBpbnRlcmFjdGl2ZSwgc3RhbmRhcmQgc3RyZWFtcyBhcmUgbGluZS1idWZmZXJlZC4gIE90aGVyd2lzZSwgdGhleQogICAgICBhcmUgYmxvY2stYnVmZmVyZWQgbGlrZSByZWd1bGFyIHRleHQgZmlsZXMuICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMKICAgICAgdmFsdWUgd2l0aCB0aGUgOm9wdGlvbjpgLXVgIGNvbW1hbmQtbGluZSBvcHRpb24uCiAKLSAgIFRvIHdyaXRlIG9yIHJlYWQgYmluYXJ5IGRhdGEgZnJvbS90byB0aGUgc3RhbmRhcmQgc3RyZWFtcywgdXNlIHRoZQotICAgdW5kZXJseWluZyBiaW5hcnkgOmRhdGE6YH5pby5UZXh0SU9CYXNlLmJ1ZmZlcmAuICBGb3IgZXhhbXBsZSwgdG8gd3JpdGUKLSAgIGJ5dGVzIHRvIDpkYXRhOmBzdGRvdXRgLCB1c2UgYGBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShiJ2FiYycpYGAuICBVc2luZwotICAgOm1ldGg6YGlvLlRleHRJT0Jhc2UuZGV0YWNoYCwgc3RyZWFtcyBjYW4gYmUgbWFkZSBiaW5hcnkgYnkgZGVmYXVsdC4gIFRoaXMKLSAgIGZ1bmN0aW9uIHNldHMgOmRhdGE6YHN0ZGluYCBhbmQgOmRhdGE6YHN0ZG91dGAgdG8gYmluYXJ5OjoKKyAgIC4uIG5vdGU6OgogCi0gICAgICBkZWYgbWFrZV9zdHJlYW1zX2JpbmFyeSgpOgotICAgICAgICAgIHN5cy5zdGRpbiA9IHN5cy5zdGRpbi5kZXRhY2goKQotICAgICAgICAgIHN5cy5zdGRvdXQgPSBzeXMuc3Rkb3V0LmRldGFjaCgpCisgICAgICBUbyB3cml0ZSBvciByZWFkIGJpbmFyeSBkYXRhIGZyb20vdG8gdGhlIHN0YW5kYXJkIHN0cmVhbXMsIHVzZSB0aGUKKyAgICAgIHVuZGVybHlpbmcgYmluYXJ5IDpkYXRhOmB+aW8uVGV4dElPQmFzZS5idWZmZXJgIG9iamVjdC4gIEZvciBleGFtcGxlLCB0bworICAgICAgd3JpdGUgYnl0ZXMgdG8gOmRhdGE6YHN0ZG91dGAsIHVzZSBgYHN5cy5zdGRvdXQuYnVmZmVyLndyaXRlKGInYWJjJylgYC4KIAotICAgTm90ZSB0aGF0IHRoZSBzdHJlYW1zIG1heSBiZSByZXBsYWNlZCB3aXRoIG9iamVjdHMgKGxpa2UgOmNsYXNzOmBpby5TdHJpbmdJT2ApCi0gICB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZSA6YXR0cjpgfmlvLkJ1ZmZlcmVkSU9CYXNlLmJ1ZmZlcmAgYXR0cmlidXRlIG9yIHRoZQotICAgOm1ldGg6YH5pby5CdWZmZXJlZElPQmFzZS5kZXRhY2hgIG1ldGhvZCBhbmQgY2FuIHJhaXNlIDpleGM6YEF0dHJpYnV0ZUVycm9yYAotICAgb3IgOmV4YzpgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb25gLgorICAgICAgSG93ZXZlciwgaWYgeW91IGFyZSB3cml0aW5nIGEgbGlicmFyeSAoYW5kIGRvIG5vdCBjb250cm9sIGluIHdoaWNoCisgICAgICBjb250ZXh0IGl0cyBjb2RlIHdpbGwgYmUgZXhlY3V0ZWQpLCBiZSBhd2FyZSB0aGF0IHRoZSBzdGFuZGFyZCBzdHJlYW1zCisgICAgICBtYXkgYmUgcmVwbGFjZWQgd2l0aCBmaWxlLWxpa2Ugb2JqZWN0cyBsaWtlIDpjbGFzczpgaW8uU3RyaW5nSU9gIHdoaWNoCisgICAgICBkbyBub3Qgc3VwcG9ydCB0aGUgOmF0dHI6YH5pby5CdWZmZXJlZElPQmFzZS5idWZmZXJgIGF0dHJpYnV0ZS4KIAogCiAuLiBkYXRhOjogX19zdGRpbl9fCkBAIC0xMDk0LDcgKzExMjgsNiBAQAogICAgfCA6Y29uc3Q6YG5hbWVgICAgIHwgTmFtZSBvZiB0aGUgdGhyZWFkIGltcGxlbWVudGF0aW9uOiAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ250J2BgOiBXaW5kb3dzIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICAgfCAgICAgICAgICAgICAgICAgIHwgICogYGAnb3MyJ2BgOiBPUy8yIHRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICB8ICAgICAgICAgICAgICAgICAgfCAgKiBgYCdwdGhyZWFkJ2BgOiBQT1NJWCB0aHJlYWRzICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIHwgICAgICAgICAgICAgICAgICB8ICAqIGBgJ3NvbGFyaXMnYGA6IFNvbGFyaXMgdGhyZWFkcyAgICAgICAgICAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0IGIvRG9jL2xpYnJhcnkvc3lzY29uZmlnLnJzdAppbmRleCBjNDdkY2NlLi41MzVhYzU0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS9zeXNjb25maWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3N5c2NvbmZpZy5yc3QKQEAgLTgzLDggKzgzLDYgQEAKICAgbG9jYXRlZCB1bmRlciB0aGUgdXNlciBob21lIGRpcmVjdG9yeS4KIC0gKm50Kjogc2NoZW1lIGZvciBOVCBwbGF0Zm9ybXMgbGlrZSBXaW5kb3dzLgogLSAqbnRfdXNlcio6IHNjaGVtZSBmb3IgTlQgcGxhdGZvcm1zLCB3aGVuIHRoZSAqdXNlciogb3B0aW9uIGlzIHVzZWQuCi0tICpvczIqOiBzY2hlbWUgZm9yIE9TLzIgcGxhdGZvcm1zLgotLSAqb3MyX2hvbWUqOiBzY2hlbWUgZm9yIE9TLzIgcGF0Zm9ybXMsIHdoZW4gdGhlICp1c2VyKiBvcHRpb24gaXMgdXNlZC4KIAogRWFjaCBzY2hlbWUgaXMgaXRzZWxmIGNvbXBvc2VkIG9mIGEgc2VyaWVzIG9mIHBhdGhzIGFuZCBlYWNoIHBhdGggaGFzIGEgdW5pcXVlCiBpZGVudGlmaWVyLiAgUHl0aG9uIGN1cnJlbnRseSB1c2VzIGVpZ2h0IHBhdGhzOgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGFyZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdAppbmRleCAxZWFkNzFjLi4wNWYyOWFkIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdAorKysgYi9Eb2MvbGlicmFyeS90YXJmaWxlLnJzdApAQCAtMTksNyArMTksOCBAQAogCiBTb21lIGZhY3RzIGFuZCBmaWd1cmVzOgogCi0qIHJlYWRzIGFuZCB3cml0ZXMgOm1vZDpgZ3ppcGAsIDptb2Q6YGJ6MmAgYW5kIDptb2Q6YGx6bWFgIGNvbXByZXNzZWQgYXJjaGl2ZXMuCisqIHJlYWRzIGFuZCB3cml0ZXMgOm1vZDpgZ3ppcGAsIDptb2Q6YGJ6MmAgYW5kIDptb2Q6YGx6bWFgIGNvbXByZXNzZWQgYXJjaGl2ZXMKKyAgaWYgdGhlIHJlc3BlY3RpdmUgbW9kdWxlcyBhcmUgYXZhaWxhYmxlLgogCiAqIHJlYWQvd3JpdGUgc3VwcG9ydCBmb3IgdGhlIFBPU0lYLjEtMTk4OCAodXN0YXIpIGZvcm1hdC4KIApAQCAtODEsNiArODIsMTAgQEAKICAgIElmICpmaWxlb2JqKiBpcyBzcGVjaWZpZWQsIGl0IGlzIHVzZWQgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gYSA6dGVybTpgZmlsZSBvYmplY3RgCiAgICBvcGVuZWQgaW4gYmluYXJ5IG1vZGUgZm9yICpuYW1lKi4gSXQgaXMgc3VwcG9zZWQgdG8gYmUgYXQgcG9zaXRpb24gMC4KIAorICAgRm9yIG1vZGVzIGBgJ3c6Z3onYGAsIGBgJ3I6Z3onYGAsIGBgJ3c6YnoyJ2BgLCBgYCdyOmJ6MidgYCwgOmZ1bmM6YHRhcmZpbGUub3BlbmAKKyAgIGFjY2VwdHMgdGhlIGtleXdvcmQgYXJndW1lbnQgKmNvbXByZXNzbGV2ZWwqIHRvIHNwZWNpZnkgdGhlIGNvbXByZXNzaW9uIGxldmVsIG9mCisgICB0aGUgZmlsZS4KKwogICAgRm9yIHNwZWNpYWwgcHVycG9zZXMsIHRoZXJlIGlzIGEgc2Vjb25kIGZvcm1hdCBmb3IgKm1vZGUqOgogICAgYGAnZmlsZW1vZGV8W2NvbXByZXNzaW9uXSdgYC4gIDpmdW5jOmB0YXJmaWxlLm9wZW5gIHdpbGwgcmV0dXJuIGEgOmNsYXNzOmBUYXJGaWxlYAogICAgb2JqZWN0IHRoYXQgcHJvY2Vzc2VzIGl0cyBkYXRhIGFzIGEgc3RyZWFtIG9mIGJsb2Nrcy4gIE5vIHJhbmRvbSBzZWVraW5nIHdpbGwKQEAgLTE3Miw2ICsxNzcsMTMgQEAKICAgIElzIHJhaXNlZCBieSA6bWV0aDpgVGFySW5mby5mcm9tYnVmYCBpZiB0aGUgYnVmZmVyIGl0IGdldHMgaXMgaW52YWxpZC4KIAogCitUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlIGF0IHRoZSBtb2R1bGUgbGV2ZWw6CisKKy4uIGRhdGE6OiBFTkNPRElORworCisgICBUaGUgZGVmYXVsdCBjaGFyYWN0ZXIgZW5jb2Rpbmc6IGBgJ3V0Zi04J2BgIG9uIFdpbmRvd3MsIHRoZSB2YWx1ZSByZXR1cm5lZCBieQorICAgOmZ1bmM6YHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmdgIG90aGVyd2lzZS4KKwogCiBFYWNoIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGRlZmluZXMgYSB0YXIgYXJjaGl2ZSBmb3JtYXQgdGhhdCB0aGUKIDptb2Q6YHRhcmZpbGVgIG1vZHVsZSBpcyBhYmxlIHRvIGNyZWF0ZS4gU2VlIHNlY3Rpb24gOnJlZjpgdGFyLWZvcm1hdHNgIGZvcgpAQCAtMTk4LDIwICsyMTAsMTUgQEAKICAgIFRoZSBkZWZhdWx0IGZvcm1hdCBmb3IgY3JlYXRpbmcgYXJjaGl2ZXMuIFRoaXMgaXMgY3VycmVudGx5IDpjb25zdDpgR05VX0ZPUk1BVGAuCiAKIAotVGhlIGZvbGxvd2luZyB2YXJpYWJsZXMgYXJlIGF2YWlsYWJsZSBvbiBtb2R1bGUgbGV2ZWw6Ci0KLQotLi4gZGF0YTo6IEVOQ09ESU5HCi0KLSAgIFRoZSBkZWZhdWx0IGNoYXJhY3RlciBlbmNvZGluZzogYGAndXRmLTgnYGAgb24gV2luZG93cywKLSAgIDpmdW5jOmBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nYCBvdGhlcndpc2UuCi0KLQogLi4gc2VlYWxzbzo6CiAKICAgIE1vZHVsZSA6bW9kOmB6aXBmaWxlYAogICAgICAgRG9jdW1lbnRhdGlvbiBvZiB0aGUgOm1vZDpgemlwZmlsZWAgc3RhbmRhcmQgbW9kdWxlLgogCisgICA6cmVmOmBhcmNoaXZpbmctb3BlcmF0aW9uc2AKKyAgICAgIERvY3VtZW50YXRpb24gb2YgdGhlIGhpZ2hlci1sZXZlbCBhcmNoaXZpbmcgZmFjaWxpdGllcyBwcm92aWRlZCBieSB0aGUKKyAgICAgIHN0YW5kYXJkIDptb2Q6YHNodXRpbGAgbW9kdWxlLgorCiAgICBgR05VIHRhciBtYW51YWwsIEJhc2ljIFRhciBGb3JtYXQgPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS90YXIvbWFudWFsL2h0bWxfbm9kZS9TdGFuZGFyZC5odG1sPmBfCiAgICAgICBEb2N1bWVudGF0aW9uIGZvciB0YXIgYXJjaGl2ZSBmaWxlcywgaW5jbHVkaW5nIEdOVSB0YXIgZXh0ZW5zaW9ucy4KIApAQCAtMjM0LDcgKzI0MSw3IEBACiA6cmVmOmB0YXItZXhhbXBsZXNgIHNlY3Rpb24gZm9yIGEgdXNlIGNhc2UuCiAKIC4uIHZlcnNpb25hZGRlZDo6IDMuMgotICAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbC4KKyAgIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCiAKIC4uIGNsYXNzOjogVGFyRmlsZShuYW1lPU5vbmUsIG1vZGU9J3InLCBmaWxlb2JqPU5vbmUsIGZvcm1hdD1ERUZBVUxUX0ZPUk1BVCwgdGFyaW5mbz1UYXJJbmZvLCBkZXJlZmVyZW5jZT1GYWxzZSwgaWdub3JlX3plcm9zPUZhbHNlLCBlbmNvZGluZz1FTkNPRElORywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnLCBwYXhfaGVhZGVycz1Ob25lLCBkZWJ1Zz0wLCBlcnJvcmxldmVsPTApCiAKQEAgLTI5Miw3ICsyOTksNyBAQAogICAgd2lsbCBiZSBhZGRlZCBhcyBhIHBheCBnbG9iYWwgaGVhZGVyIGlmICpmb3JtYXQqIGlzIDpjb25zdDpgUEFYX0ZPUk1BVGAuCiAKIAotLi4gbWV0aG9kOjogVGFyRmlsZS5vcGVuKC4uLikKKy4uIGNsYXNzbWV0aG9kOjogVGFyRmlsZS5vcGVuKC4uLikKIAogICAgQWx0ZXJuYXRpdmUgY29uc3RydWN0b3IuIFRoZSA6ZnVuYzpgdGFyZmlsZS5vcGVuYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBhCiAgICBzaG9ydGN1dCB0byB0aGlzIGNsYXNzbWV0aG9kLgpAQCAtNDU4LDE0ICs0NjUsMTQgQEAKICAgIENyZWF0ZSBhIDpjbGFzczpgVGFySW5mb2Agb2JqZWN0LgogCiAKLS4uIG1ldGhvZDo6IFRhckluZm8uZnJvbWJ1ZihidWYpCisuLiBjbGFzc21ldGhvZDo6IFRhckluZm8uZnJvbWJ1ZihidWYsIGVuY29kaW5nLCBlcnJvcnMpCiAKICAgIENyZWF0ZSBhbmQgcmV0dXJuIGEgOmNsYXNzOmBUYXJJbmZvYCBvYmplY3QgZnJvbSBzdHJpbmcgYnVmZmVyICpidWYqLgogCi0gICBSYWlzZXMgOmV4YzpgSGVhZGVyRXJyb3JgIGlmIHRoZSBidWZmZXIgaXMgaW52YWxpZC4uCisgICBSYWlzZXMgOmV4YzpgSGVhZGVyRXJyb3JgIGlmIHRoZSBidWZmZXIgaXMgaW52YWxpZC4KIAogCi0uLiBtZXRob2Q6OiBUYXJJbmZvLmZyb210YXJmaWxlKHRhcmZpbGUpCisuLiBjbGFzc21ldGhvZDo6IFRhckluZm8uZnJvbXRhcmZpbGUodGFyZmlsZSkKIAogICAgUmVhZCB0aGUgbmV4dCBtZW1iZXIgZnJvbSB0aGUgOmNsYXNzOmBUYXJGaWxlYCBvYmplY3QgKnRhcmZpbGUqIGFuZCByZXR1cm4gaXQgYXMKICAgIGEgOmNsYXNzOmBUYXJJbmZvYCBvYmplY3QuCkBAIC01MDksNyArNTE2LDcgQEAKICAgIDpjb25zdDpgQVJFR1RZUEVgLCA6Y29uc3Q6YExOS1RZUEVgLCA6Y29uc3Q6YFNZTVRZUEVgLCA6Y29uc3Q6YERJUlRZUEVgLAogICAgOmNvbnN0OmBGSUZPVFlQRWAsIDpjb25zdDpgQ09OVFRZUEVgLCA6Y29uc3Q6YENIUlRZUEVgLCA6Y29uc3Q6YEJMS1RZUEVgLAogICAgOmNvbnN0OmBHTlVUWVBFX1NQQVJTRWAuICBUbyBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSA6Y2xhc3M6YFRhckluZm9gIG9iamVjdAotICAgbW9yZSBjb252ZW5pZW50bHksIHVzZSB0aGUgYGBpc18qKClgYCBtZXRob2RzIGJlbG93LgorICAgbW9yZSBjb252ZW5pZW50bHksIHVzZSB0aGUgYGBpcyooKWBgIG1ldGhvZHMgYmVsb3cuCiAKIAogLi4gYXR0cmlidXRlOjogVGFySW5mby5saW5rbmFtZQpAQCAtNTkxLDYgKzU5OCw2NyBAQAogICAgUmV0dXJuIDpjb25zdDpgVHJ1ZWAgaWYgaXQgaXMgb25lIG9mIGNoYXJhY3RlciBkZXZpY2UsIGJsb2NrIGRldmljZSBvciBGSUZPLgogCiAKKy4uIF90YXJmaWxlLWNvbW1hbmRsaW5lOgorCitDb21tYW5kIExpbmUgSW50ZXJmYWNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCitUaGUgOm1vZDpgdGFyZmlsZWAgbW9kdWxlIHByb3ZpZGVzIGEgc2ltcGxlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgdG8gaW50ZXJhY3QKK3dpdGggdGFyIGFyY2hpdmVzLgorCitJZiB5b3Ugd2FudCB0byBjcmVhdGUgYSBuZXcgdGFyIGFyY2hpdmUsIHNwZWNpZnkgaXRzIG5hbWUgYWZ0ZXIgdGhlIDpvcHRpb246YC1jYAorb3B0aW9uIGFuZCB0aGVuIGxpc3QgdGhlIGZpbGVuYW1lKHMpIHRoYXQgc2hvdWxkIGJlIGluY2x1ZGVkOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWMgbW9udHkudGFyICBzcGFtLnR4dCBlZ2dzLnR4dAorCitQYXNzaW5nIGEgZGlyZWN0b3J5IGlzIGFsc28gYWNjZXB0YWJsZTo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1jIG1vbnR5LnRhciBsaWZlLW9mLWJyaWFuXzE5NzkvCisKK0lmIHlvdSB3YW50IHRvIGV4dHJhY3QgYSB0YXIgYXJjaGl2ZSBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgdXNlCit0aGUgOm9wdGlvbjpgLWVgIG9wdGlvbjo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1lIG1vbnR5LnRhcgorCitZb3UgY2FuIGFsc28gZXh0cmFjdCBhIHRhciBhcmNoaXZlIGludG8gYSBkaWZmZXJlbnQgZGlyZWN0b3J5IGJ5IHBhc3NpbmcgdGhlCitkaXJlY3RvcnkncyBuYW1lOjoKKworICAgICQgcHl0aG9uIC1tIHRhcmZpbGUgLWUgbW9udHkudGFyICBvdGhlci1kaXIvCisKK0ZvciBhIGxpc3Qgb2YgdGhlIGZpbGVzIGluIGEgdGFyIGFyY2hpdmUsIHVzZSB0aGUgOm9wdGlvbjpgLWxgIG9wdGlvbjo6CisKKyAgICAkIHB5dGhvbiAtbSB0YXJmaWxlIC1sIG1vbnR5LnRhcgorCisKK0NvbW1hbmQgbGluZSBvcHRpb25zCit+fn5+fn5+fn5+fn5+fn5+fn5+fgorCisuLiBjbWRvcHRpb246OiAtbCA8dGFyZmlsZT4KKyAgICAgICAgICAgICAgIC0tbGlzdCA8dGFyZmlsZT4KKworICAgTGlzdCBmaWxlcyBpbiBhIHRhcmZpbGUuCisKKy4uIGNtZG9wdGlvbjo6IC1jIDx0YXJmaWxlPiA8c291cmNlMT4gPHNvdXJjZU4+CisgICAgICAgICAgICAgICAtLWNyZWF0ZSA8dGFyZmlsZT4gPHNvdXJjZTE+IDxzb3VyY2VOPgorCisgICBDcmVhdGUgdGFyZmlsZSBmcm9tIHNvdXJjZSBmaWxlcy4KKworLi4gY21kb3B0aW9uOjogLWUgPHRhcmZpbGU+IFs8b3V0cHV0X2Rpcj5dCisgICAgICAgICAgICAgICAtLWV4dHJhY3QgPHRhcmZpbGU+IFs8b3V0cHV0X2Rpcj5dCisKKyAgIEV4dHJhY3QgdGFyZmlsZSBpbnRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiAqb3V0cHV0X2RpciogaXMgbm90IHNwZWNpZmllZC4KKworLi4gY21kb3B0aW9uOjogLXQgPHRhcmZpbGU+CisgICAgICAgICAgICAgICAtLXRlc3QgPHRhcmZpbGU+CisKKyAgIFRlc3Qgd2hldGhlciB0aGUgdGFyZmlsZSBpcyB2YWxpZCBvciBub3QuCisKKy4uIGNtZG9wdGlvbjo6IC12LCAtLXZlcmJvc2UKKworICAgVmVyYm9zZSBvdXRwdXQKKwogLi4gX3Rhci1leGFtcGxlczoKIAogRXhhbXBsZXMKQEAgLTcyNiw3ICs3OTQsNyBAQAogYXBwcm9wcmlhdGVseSwgdGhpcyBjb252ZXJzaW9uIG1heSBmYWlsLgogCiBUaGUgKmVycm9ycyogYXJndW1lbnQgZGVmaW5lcyBob3cgY2hhcmFjdGVycyBhcmUgdHJlYXRlZCB0aGF0IGNhbm5vdCBiZQotY29udmVydGVkLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGxpc3RlZCBpbiBzZWN0aW9uIDpyZWY6YGNvZGVjLWJhc2UtY2xhc3Nlc2AuCitjb252ZXJ0ZWQuIFBvc3NpYmxlIHZhbHVlcyBhcmUgbGlzdGVkIGluIHNlY3Rpb24gOnJlZjpgZXJyb3ItaGFuZGxlcnNgLgogVGhlIGRlZmF1bHQgc2NoZW1lIGlzIGBgJ3N1cnJvZ2F0ZWVzY2FwZSdgYCB3aGljaCBQeXRob24gYWxzbyB1c2VzIGZvciBpdHMKIGZpbGUgc3lzdGVtIGNhbGxzLCBzZWUgOnJlZjpgb3MtZmlsZW5hbWVzYC4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdCBiL0RvYy9saWJyYXJ5L3RlbG5ldGxpYi5yc3QKaW5kZXggMzFlNWRiYi4uNDA0MGY3MiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVsbmV0bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZWxuZXRsaWIucnN0CkBAIC0zMSw3ICszMSw3IEBACiAgICA6Y2xhc3M6YFRlbG5ldGAgcmVwcmVzZW50cyBhIGNvbm5lY3Rpb24gdG8gYSBUZWxuZXQgc2VydmVyLiBUaGUgaW5zdGFuY2UgaXMKICAgIGluaXRpYWxseSBub3QgY29ubmVjdGVkIGJ5IGRlZmF1bHQ7IHRoZSA6bWV0aDpgb3BlbmAgbWV0aG9kIG11c3QgYmUgdXNlZCB0bwogICAgZXN0YWJsaXNoIGEgY29ubmVjdGlvbi4gIEFsdGVybmF0aXZlbHksIHRoZSBob3N0IG5hbWUgYW5kIG9wdGlvbmFsIHBvcnQKLSAgIG51bWJlciBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciwgdG8sIGluIHdoaWNoIGNhc2UgdGhlIGNvbm5lY3Rpb24gdG8KKyAgIG51bWJlciBjYW4gYmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciB0b28sIGluIHdoaWNoIGNhc2UgdGhlIGNvbm5lY3Rpb24gdG8KICAgIHRoZSBzZXJ2ZXIgd2lsbCBiZSBlc3RhYmxpc2hlZCBiZWZvcmUgdGhlIGNvbnN0cnVjdG9yIHJldHVybnMuICBUaGUgb3B0aW9uYWwKICAgICp0aW1lb3V0KiBwYXJhbWV0ZXIgc3BlY2lmaWVzIGEgdGltZW91dCBpbiBzZWNvbmRzIGZvciBibG9ja2luZyBvcGVyYXRpb25zCiAgICBsaWtlIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQgKGlmIG5vdCBzcGVjaWZpZWQsIHRoZSBnbG9iYWwgZGVmYXVsdCB0aW1lb3V0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90ZW1wZmlsZS5yc3QgYi9Eb2MvbGlicmFyeS90ZW1wZmlsZS5yc3QKaW5kZXggZDc4MTU5ZC4uMWVmYjVlNiAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVtcGZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3RlbXBmaWxlLnJzdApAQCAtODIsNyArODIsNyBAQAogICAgY2F1c2VzIHRoZSBmaWxlIHRvIHJvbGwgb3ZlciB0byBhbiBvbi1kaXNrIGZpbGUgcmVnYXJkbGVzcyBvZiBpdHMgc2l6ZS4KIAogICAgVGhlIHJldHVybmVkIG9iamVjdCBpcyBhIGZpbGUtbGlrZSBvYmplY3Qgd2hvc2UgOmF0dHI6YF9maWxlYCBhdHRyaWJ1dGUKLSAgIGlzIGVpdGhlciBhIDpjbGFzczpgaW8uQnl0ZXNJT2Agb3IgOmNsYXNzOmBpby5TdHJpbmdJT2Agb2JqZWN0IChkZXBlbmRpbmcgb24KKyAgIGlzIGVpdGhlciBhbiA6Y2xhc3M6YGlvLkJ5dGVzSU9gIG9yIDpjbGFzczpgaW8uU3RyaW5nSU9gIG9iamVjdCAoZGVwZW5kaW5nIG9uCiAgICB3aGV0aGVyIGJpbmFyeSBvciB0ZXh0ICptb2RlKiB3YXMgc3BlY2lmaWVkKSBvciBhIHRydWUgZmlsZQogICAgb2JqZWN0LCBkZXBlbmRpbmcgb24gd2hldGhlciA6ZnVuYzpgcm9sbG92ZXJgIGhhcyBiZWVuIGNhbGxlZC4gIFRoaXMKICAgIGZpbGUtbGlrZSBvYmplY3QgY2FuIGJlIHVzZWQgaW4gYSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50LCBqdXN0IGxpa2UKQEAgLTE5Miw3ICsxOTIsNyBAQAogICAgICAgICAgPj4+IG9zLnBhdGguZXhpc3RzKGYubmFtZSkKICAgICAgICAgIEZhbHNlCiAKLVRoZSBtb2R1bGUgdXNlcyB0d28gZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IHRlbGwgaXQgaG93IHRvIGNvbnN0cnVjdCBhCitUaGUgbW9kdWxlIHVzZXMgYSBnbG9iYWwgdmFyaWFibGUgdGhhdCB0ZWxsIGl0IGhvdyB0byBjb25zdHJ1Y3QgYQogdGVtcG9yYXJ5IG5hbWUuICBUaGV5IGFyZSBpbml0aWFsaXplZCBhdCB0aGUgZmlyc3QgY2FsbCB0byBhbnkgb2YgdGhlCiBmdW5jdGlvbnMgYWJvdmUuICBUaGUgY2FsbGVyIG1heSBjaGFuZ2UgdGhlbSwgYnV0IHRoaXMgaXMgZGlzY291cmFnZWQ7IHVzZQogdGhlIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIGFyZ3VtZW50cywgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3Rlc3QucnN0IGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKaW5kZXggYzI4NTM2ZC4uMmZkYWY4YyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGVzdC5yc3QKQEAgLTg1LDcgKzg1LDcgQEAKIAogVGhpcyBjb2RlIHBhdHRlcm4gYWxsb3dzIHRoZSB0ZXN0aW5nIHN1aXRlIHRvIGJlIHJ1biBieSA6bW9kOmB0ZXN0LnJlZ3J0ZXN0YCwKIG9uIGl0cyBvd24gYXMgYSBzY3JpcHQgdGhhdCBzdXBwb3J0cyB0aGUgOm1vZDpgdW5pdHRlc3RgIENMSSwgb3IgdmlhIHRoZQotYHB5dGhvbiAtbSB1bml0dGVzdGAgQ0xJLgorYGBweXRob24gLW0gdW5pdHRlc3RgYCBDTEkuCiAKIFRoZSBnb2FsIGZvciByZWdyZXNzaW9uIHRlc3RpbmcgaXMgdG8gdHJ5IHRvIGJyZWFrIGNvZGUuIFRoaXMgbGVhZHMgdG8gYSBmZXcKIGd1aWRlbGluZXMgdG8gYmUgZm9sbG93ZWQ6CkBAIC0xNDEsOSArMTQxLDkgQEAKICAgICAgICAgIGFyZyA9ICgxLCAyLCAzKQogCiAgIFdoZW4gdXNpbmcgdGhpcyBwYXR0ZXJuLCByZW1lbWJlciB0aGF0IGFsbCBjbGFzc2VzIHRoYXQgaW5oZXJpdCBmcm9tCi0gIGB1bml0dGVzdC5UZXN0Q2FzZWAgYXJlIHJ1biBhcyB0ZXN0cy4gIFRoZSBgTWl4aW5gIGNsYXNzIGluIHRoZSBleGFtcGxlIGFib3ZlCisgIDpjbGFzczpgdW5pdHRlc3QuVGVzdENhc2VgIGFyZSBydW4gYXMgdGVzdHMuICBUaGUgOmNsYXNzOmBNaXhpbmAgY2xhc3MgaW4gdGhlIGV4YW1wbGUgYWJvdmUKICAgZG9lcyBub3QgaGF2ZSBhbnkgZGF0YSBhbmQgc28gY2FuJ3QgYmUgcnVuIGJ5IGl0c2VsZiwgdGh1cyBpdCBkb2VzIG5vdAotICBpbmhlcml0IGZyb20gYHVuaXR0ZXN0LlRlc3RDYXNlYC4KKyAgaW5oZXJpdCBmcm9tIDpjbGFzczpgdW5pdHRlc3QuVGVzdENhc2VgLgogCiAKIC4uIHNlZWFsc286OgpAQCAtMTYwLDcgKzE2MCw3IEBACiBUaGUgOm1vZDpgdGVzdGAgcGFja2FnZSBjYW4gYmUgcnVuIGFzIGEgc2NyaXB0IHRvIGRyaXZlIFB5dGhvbidzIHJlZ3Jlc3Npb24KIHRlc3Qgc3VpdGUsIHRoYW5rcyB0byB0aGUgOm9wdGlvbjpgLW1gIG9wdGlvbjogOnByb2dyYW06YHB5dGhvbiAtbSB0ZXN0YC4gVW5kZXIKIHRoZSBob29kLCBpdCB1c2VzIDptb2Q6YHRlc3QucmVncnRlc3RgOyB0aGUgY2FsbCA6cHJvZ3JhbTpgcHl0aG9uIC1tCi10ZXN0LnJlZ3J0ZXN0YCB1c2VkIGluIHByZXZpb3VzIFB5dGhvbiB2ZXJzaW9ucyBzdGlsbCB3b3JrcykuICBSdW5uaW5nIHRoZQordGVzdC5yZWdydGVzdGAgdXNlZCBpbiBwcmV2aW91cyBQeXRob24gdmVyc2lvbnMgc3RpbGwgd29ya3MuICBSdW5uaW5nIHRoZQogc2NyaXB0IGJ5IGl0c2VsZiBhdXRvbWF0aWNhbGx5IHN0YXJ0cyBydW5uaW5nIGFsbCByZWdyZXNzaW9uIHRlc3RzIGluIHRoZQogOm1vZDpgdGVzdGAgcGFja2FnZS4gSXQgZG9lcyB0aGlzIGJ5IGZpbmRpbmcgYWxsIG1vZHVsZXMgaW4gdGhlIHBhY2thZ2Ugd2hvc2UKIG5hbWUgc3RhcnRzIHdpdGggYGB0ZXN0X2BgLCBpbXBvcnRpbmcgdGhlbSwgYW5kIGV4ZWN1dGluZyB0aGUgZnVuY3Rpb24KQEAgLTQ0MywxMyArNDQzLDYgQEAKICAgIEEgZGVjb3JhdG9yIGZvciBydW5uaW5nIHRlc3RzIHRoYXQgcmVxdWlyZSBzdXBwb3J0IGZvciBzeW1ib2xpYyBsaW5rcy4KIAogCi0uLiBmdW5jdGlvbjo6IHN1cHByZXNzX2NyYXNoX3BvcHVwKCkKLQotICAgQSBjb250ZXh0IG1hbmFnZXIgdGhhdCBkaXNhYmxlcyBXaW5kb3dzIEVycm9yIFJlcG9ydGluZyBkaWFsb2dzIHVzaW5nCi0gICBgU2V0RXJyb3JNb2RlIDxodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvd2luZG93cy9kZXNrdG9wL21zNjgwNjIxJTI4dj12cy44NSUyOS5hc3B4PmBfLgotICAgT24gb3RoZXIgcGxhdGZvcm1zIGl0J3MgYSBuby1vcC4KLQotCiAuLiBkZWNvcmF0b3I6OiBhbnRpY2lwYXRlX2ZhaWx1cmUoY29uZGl0aW9uKQogCiAgICBBIGRlY29yYXRvciB0byBjb25kaXRpb25hbGx5IG1hcmsgdGVzdHMgd2l0aApAQCAtNDY4LDcgKzQ2MSw3IEBACiAuLiBmdW5jdGlvbjo6IG1ha2VfYmFkX2ZkKCkKIAogICAgQ3JlYXRlIGFuIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yIGJ5IG9wZW5pbmcgYW5kIGNsb3NpbmcgYSB0ZW1wb3JhcnkgZmlsZSwKLSAgIGFuZCByZXR1cm5pbmcgaXRzIGRlc2NyaXBvci4KKyAgIGFuZCByZXR1cm5pbmcgaXRzIGRlc2NyaXB0b3IuCiAKIAogLi4gZnVuY3Rpb246OiBpbXBvcnRfbW9kdWxlKG5hbWUsIGRlcHJlY2F0ZWQ9RmFsc2UpCkBAIC01NjEsNiArNTU0LDIxIEBACiAgICBydW4gc2ltdWx0YW5lb3VzbHksIHdoaWNoIGlzIGEgcHJvYmxlbSBmb3IgYnVpbGRib3RzLgogCiAKKy4uIGZ1bmN0aW9uOjogbG9hZF9wYWNrYWdlX3Rlc3RzKHBrZ19kaXIsIGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pCisKKyAgIEdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIDptb2Q6YHVuaXR0ZXN0YCBgYGxvYWRfdGVzdHNgYCBwcm90b2NvbCBmb3IKKyAgIHVzZSBpbiB0ZXN0IHBhY2thZ2VzLiAgKnBrZ19kaXIqIGlzIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcGFja2FnZTsKKyAgICpsb2FkZXIqLCAqc3RhbmRhcmRfdGVzdHMqLCBhbmQgKnBhdHRlcm4qIGFyZSB0aGUgYXJndW1lbnRzIGV4cGVjdGVkIGJ5CisgICBgYGxvYWRfdGVzdHNgYC4gIEluIHNpbXBsZSBjYXNlcywgdGhlIHRlc3QgcGFja2FnZSdzIGBgX19pbml0X18ucHlgYAorICAgY2FuIGJlIHRoZSBmb2xsb3dpbmc6OgorCisgICAgICBpbXBvcnQgb3MKKyAgICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKKworICAgICAgZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgICAgICAgIHJldHVybiBsb2FkX3BhY2thZ2VfdGVzdHMob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgKmFyZ3MpCisKKwogVGhlIDptb2Q6YHRlc3Quc3VwcG9ydGAgbW9kdWxlIGRlZmluZXMgdGhlIGZvbGxvd2luZyBjbGFzc2VzOgogCiAuLiBjbGFzczo6IFRyYW5zaWVudFJlc291cmNlKGV4YywgKiprd2FyZ3MpCkBAIC01OTQsNiArNjAyLDIxIEBACiAgICBUZW1wb3JhcmlseSB1bnNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgYGBlbnZ2YXJgYC4KIAogCisuLiBjbGFzczo6IFN1cHByZXNzQ3Jhc2hSZXBvcnQoKQorCisgICBBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIHRyeSB0byBwcmV2ZW50IGNyYXNoIGRpYWxvZyBwb3B1cHMgb24gdGVzdHMgdGhhdAorICAgYXJlIGV4cGVjdGVkIHRvIGNyYXNoIGEgc3VicHJvY2Vzcy4KKworICAgT24gV2luZG93cywgaXQgZGlzYWJsZXMgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZworICAgYFNldEVycm9yTW9kZSA8aHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMS5hc3B4PmBfLgorCisgICBPbiBVTklYLCA6ZnVuYzpgcmVzb3VyY2Uuc2V0cmxpbWl0YCBpcyB1c2VkIHRvIHNldAorICAgOmF0dHI6YHJlc291cmNlLlJMSU1JVF9DT1JFYCdzIHNvZnQgbGltaXQgdG8gMCB0byBwcmV2ZW50IGNvcmVkdW1wIGZpbGUKKyAgIGNyZWF0aW9uLgorCisgICBPbiBib3RoIHBsYXRmb3JtcywgdGhlIG9sZCB2YWx1ZSBpcyByZXN0b3JlZCBieSA6bWV0aDpgX19leGl0X19gLgorCisKIC4uIGNsYXNzOjogV2FybmluZ3NSZWNvcmRlcigpCiAKICAgIENsYXNzIHVzZWQgdG8gcmVjb3JkIHdhcm5pbmdzIGZvciB1bml0IHRlc3RzLiBTZWUgZG9jdW1lbnRhdGlvbiBvZgpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0IGIvRG9jL2xpYnJhcnkvdGV4dHdyYXAucnN0CmluZGV4IGM2MjUyNTQuLjlmZTdhMzUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3RleHR3cmFwLnJzdAorKysgYi9Eb2MvbGlicmFyeS90ZXh0d3JhcC5yc3QKQEAgLTEwLDExICsxMCwxMSBAQAogCiAtLS0tLS0tLS0tLS0tLQogCi1UaGUgOm1vZDpgdGV4dHdyYXBgIG1vZHVsZSBwcm92aWRlcyB0d28gY29udmVuaWVuY2UgZnVuY3Rpb25zLCA6ZnVuYzpgd3JhcGAgYW5kCi06ZnVuYzpgZmlsbGAsIGFzIHdlbGwgYXMgOmNsYXNzOmBUZXh0V3JhcHBlcmAsIHRoZSBjbGFzcyB0aGF0IGRvZXMgYWxsIHRoZSB3b3JrLAotYW5kIHR3byB1dGlsaXR5IGZ1bmN0aW9ucywgOmZ1bmM6YGRlZGVudGAgYW5kIDpmdW5jOmBpbmRlbnRgLiAgSWYgeW91J3JlIGp1c3Qgd3JhcHBpbmcgb3IgZmlsbGluZyBvbmUKLW9yIHR3byAgdGV4dCBzdHJpbmdzLCB0aGUgY29udmVuaWVuY2UgZnVuY3Rpb25zIHNob3VsZCBiZSBnb29kIGVub3VnaDsKLW90aGVyd2lzZSwgIHlvdSBzaG91bGQgdXNlIGFuIGluc3RhbmNlIG9mIDpjbGFzczpgVGV4dFdyYXBwZXJgIGZvciBlZmZpY2llbmN5LgorVGhlIDptb2Q6YHRleHR3cmFwYCBtb2R1bGUgcHJvdmlkZXMgc29tZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMsCithcyB3ZWxsIGFzIDpjbGFzczpgVGV4dFdyYXBwZXJgLCB0aGUgY2xhc3MgdGhhdCBkb2VzIGFsbCB0aGUgd29yay4KK0lmIHlvdSdyZSBqdXN0IHdyYXBwaW5nIG9yIGZpbGxpbmcgb25lIG9yIHR3byB0ZXh0IHN0cmluZ3MsIHRoZSBjb252ZW5pZW5jZQorZnVuY3Rpb25zIHNob3VsZCBiZSBnb29kIGVub3VnaDsgb3RoZXJ3aXNlLCB5b3Ugc2hvdWxkIHVzZSBhbiBpbnN0YW5jZSBvZgorOmNsYXNzOmBUZXh0V3JhcHBlcmAgZm9yIGVmZmljaWVuY3kuCiAKIC4uIGZ1bmN0aW9uOjogd3JhcCh0ZXh0LCB3aWR0aD03MCwgKiprd2FyZ3MpCiAKQEAgLTM5LDE5ICszOSwzMSBAQAogICAgSW4gcGFydGljdWxhciwgOmZ1bmM6YGZpbGxgIGFjY2VwdHMgZXhhY3RseSB0aGUgc2FtZSBrZXl3b3JkIGFyZ3VtZW50cyBhcwogICAgOmZ1bmM6YHdyYXBgLgogCi1Cb3RoIDpmdW5jOmB3cmFwYCBhbmQgOmZ1bmM6YGZpbGxgIHdvcmsgYnkgY3JlYXRpbmcgYSA6Y2xhc3M6YFRleHRXcmFwcGVyYAotaW5zdGFuY2UgYW5kIGNhbGxpbmcgYSBzaW5nbGUgbWV0aG9kIG9uIGl0LiAgVGhhdCBpbnN0YW5jZSBpcyBub3QgcmV1c2VkLCBzbyBmb3IKLWFwcGxpY2F0aW9ucyB0aGF0IHdyYXAvZmlsbCBtYW55IHRleHQgc3RyaW5ncywgaXQgd2lsbCBiZSBtb3JlIGVmZmljaWVudCBmb3IgeW91Ci10byBjcmVhdGUgeW91ciBvd24gOmNsYXNzOmBUZXh0V3JhcHBlcmAgb2JqZWN0LgogCi1UZXh0IGlzIHByZWZlcmFibHkgd3JhcHBlZCBvbiB3aGl0ZXNwYWNlcyBhbmQgcmlnaHQgYWZ0ZXIgdGhlIGh5cGhlbnMgaW4KLWh5cGhlbmF0ZWQgd29yZHM7IG9ubHkgdGhlbiB3aWxsIGxvbmcgd29yZHMgYmUgYnJva2VuIGlmIG5lY2Vzc2FyeSwgdW5sZXNzCi06YXR0cjpgVGV4dFdyYXBwZXIuYnJlYWtfbG9uZ193b3Jkc2AgaXMgc2V0IHRvIGZhbHNlLgorLi4gZnVuY3Rpb246OiBzaG9ydGVuKHRleHQsIHdpZHRoLCAqKmt3YXJncykKIAotVHdvIGFkZGl0aW9uYWwgdXRpbGl0eSBmdW5jdGlvbiwgOmZ1bmM6YGRlZGVudGAgYW5kIDpmdW5jOmBpbmRlbnRgLCBhcmUKLXByb3ZpZGVkIHRvIHJlbW92ZSBpbmRlbnRhdGlvbiBmcm9tIHN0cmluZ3MgdGhhdCBoYXZlIHVud2FudGVkIHdoaXRlc3BhY2UKLXRvIHRoZSBsZWZ0IG9mIHRoZSB0ZXh0IGFuZCB0byBhZGQgYW4gYXJiaXRyYXJ5IHByZWZpeCB0byBzZWxlY3RlZCBsaW5lcwotaW4gYSBibG9jayBvZiB0ZXh0LgorICAgQ29sbGFwc2UgYW5kIHRydW5jYXRlIHRoZSBnaXZlbiAqdGV4dCogdG8gZml0IGluIHRoZSBnaXZlbiAqd2lkdGgqLgorCisgICBGaXJzdCB0aGUgd2hpdGVzcGFjZSBpbiAqdGV4dCogaXMgY29sbGFwc2VkIChhbGwgd2hpdGVzcGFjZSBpcyByZXBsYWNlZCBieQorICAgc2luZ2xlIHNwYWNlcykuICBJZiB0aGUgcmVzdWx0IGZpdHMgaW4gdGhlICp3aWR0aCosIGl0IGlzIHJldHVybmVkLgorICAgT3RoZXJ3aXNlLCBlbm91Z2ggd29yZHMgYXJlIGRyb3BwZWQgZnJvbSB0aGUgZW5kIHNvIHRoYXQgdGhlIHJlbWFpbmluZyB3b3JkcworICAgcGx1cyB0aGUgOmF0dHI6YHBsYWNlaG9sZGVyYCBmaXQgd2l0aGluIDphdHRyOmB3aWR0aGA6OgorCisgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTEyKQorICAgICAgJ0hlbGxvIHdvcmxkIScKKyAgICAgID4+PiB0ZXh0d3JhcC5zaG9ydGVuKCJIZWxsbyAgd29ybGQhIiwgd2lkdGg9MTEpCisgICAgICAnSGVsbG8gWy4uLl0nCisgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gd29ybGQiLCB3aWR0aD0xMCwgcGxhY2Vob2xkZXI9Ii4uLiIpCisgICAgICAnSGVsbG8uLi4nCisKKyAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGNvcnJlc3BvbmQgdG8gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZXMgb2YKKyAgIDpjbGFzczpgVGV4dFdyYXBwZXJgLCBkb2N1bWVudGVkIGJlbG93LiAgTm90ZSB0aGF0IHRoZSB3aGl0ZXNwYWNlIGlzCisgICBjb2xsYXBzZWQgYmVmb3JlIHRoZSB0ZXh0IGlzIHBhc3NlZCB0byB0aGUgOmNsYXNzOmBUZXh0V3JhcHBlcmAgOm1ldGg6YGZpbGxgCisgICBmdW5jdGlvbiwgc28gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIDphdHRyOmAudGFic2l6ZWAsIDphdHRyOmAuZXhwYW5kX3RhYnNgLAorICAgOmF0dHI6YC5kcm9wX3doaXRlc3BhY2VgLCBhbmQgOmF0dHI6YC5yZXBsYWNlX3doaXRlc3BhY2VgIHdpbGwgaGF2ZSBubyBlZmZlY3QuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKIC4uIGZ1bmN0aW9uOjogZGVkZW50KHRleHQpCiAKQEAgLTEwMSw2ICsxMTMsMTggQEAKICAgICAgICsKICAgICAgICsgd29ybGQKIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKworOmZ1bmM6YHdyYXBgLCA6ZnVuYzpgZmlsbGAgYW5kIDpmdW5jOmBzaG9ydGVuYCB3b3JrIGJ5IGNyZWF0aW5nIGEKKzpjbGFzczpgVGV4dFdyYXBwZXJgIGluc3RhbmNlIGFuZCBjYWxsaW5nIGEgc2luZ2xlIG1ldGhvZCBvbiBpdC4gIFRoYXQKK2luc3RhbmNlIGlzIG5vdCByZXVzZWQsIHNvIGZvciBhcHBsaWNhdGlvbnMgdGhhdCBwcm9jZXNzIG1hbnkgdGV4dAorc3RyaW5ncyB1c2luZyA6ZnVuYzpgd3JhcGAgYW5kL29yIDpmdW5jOmBmaWxsYCwgaXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50IHRvCitjcmVhdGUgeW91ciBvd24gOmNsYXNzOmBUZXh0V3JhcHBlcmAgb2JqZWN0LgorCitUZXh0IGlzIHByZWZlcmFibHkgd3JhcHBlZCBvbiB3aGl0ZXNwYWNlcyBhbmQgcmlnaHQgYWZ0ZXIgdGhlIGh5cGhlbnMgaW4KK2h5cGhlbmF0ZWQgd29yZHM7IG9ubHkgdGhlbiB3aWxsIGxvbmcgd29yZHMgYmUgYnJva2VuIGlmIG5lY2Vzc2FyeSwgdW5sZXNzCis6YXR0cjpgVGV4dFdyYXBwZXIuYnJlYWtfbG9uZ193b3Jkc2AgaXMgc2V0IHRvIGZhbHNlLgogCiAuLiBjbGFzczo6IFRleHRXcmFwcGVyKCoqa3dhcmdzKQogCkBAIC0yMzUsNyArMjU5LDIzIEBACiAgICAgICB3YXMgdG8gYWx3YXlzIGFsbG93IGJyZWFraW5nIGh5cGhlbmF0ZWQgd29yZHMuCiAKIAotICAgOmNsYXNzOmBUZXh0V3JhcHBlcmAgYWxzbyBwcm92aWRlcyB0d28gcHVibGljIG1ldGhvZHMsIGFuYWxvZ291cyB0byB0aGUKKyAgIC4uIGF0dHJpYnV0ZTo6IG1heF9saW5lcworCisgICAgICAoZGVmYXVsdDogYGBOb25lYGApIElmIG5vdCBgYE5vbmVgYCwgdGhlbiB0aGUgb3V0cHV0IHdpbGwgY29udGFpbiBhdCBtb3N0CisgICAgICAqbWF4X2xpbmVzKiBsaW5lcywgd2l0aCAqcGxhY2Vob2xkZXIqIGFwcGVhcmluZyBhdCB0aGUgZW5kIG9mIHRoZSBvdXRwdXQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHBsYWNlaG9sZGVyCisKKyAgICAgIChkZWZhdWx0OiBgYCcgWy4uLl0nYGApIFN0cmluZyB0aGF0IHdpbGwgYXBwZWFyIGF0IHRoZSBlbmQgb2YgdGhlIG91dHB1dAorICAgICAgdGV4dCBpZiBpdCBoYXMgYmVlbiB0cnVuY2F0ZWQuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKKyAgIDpjbGFzczpgVGV4dFdyYXBwZXJgIGFsc28gcHJvdmlkZXMgc29tZSBwdWJsaWMgbWV0aG9kcywgYW5hbG9nb3VzIHRvIHRoZQogICAgbW9kdWxlLWxldmVsIGNvbnZlbmllbmNlIGZ1bmN0aW9uczoKIAogICAgLi4gbWV0aG9kOjogd3JhcCh0ZXh0KQpAQCAtMjUxLDQgKzI5MSwzIEBACiAKICAgICAgIFdyYXBzIHRoZSBzaW5nbGUgcGFyYWdyYXBoIGluICp0ZXh0KiwgYW5kIHJldHVybnMgYSBzaW5nbGUgc3RyaW5nCiAgICAgICBjb250YWluaW5nIHRoZSB3cmFwcGVkIHBhcmFncmFwaC4KLQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdCBiL0RvYy9saWJyYXJ5L3RocmVhZGluZy5yc3QKaW5kZXggN2MzMjZkMS4uYzU2ZDcwNyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGhyZWFkaW5nLnJzdAorKysgYi9Eb2MvbGlicmFyeS90aHJlYWRpbmcucnN0CkBAIC01Nyw2ICs1NywxNSBAQAogICAgYW5kIHRocmVhZHMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbiBzdGFydGVkLgogCiAKKy4uIGZ1bmN0aW9uOjogbWFpbl90aHJlYWQoKQorCisgICBSZXR1cm4gdGhlIG1haW4gOmNsYXNzOmBUaHJlYWRgIG9iamVjdC4gIEluIG5vcm1hbCBjb25kaXRpb25zLCB0aGUKKyAgIG1haW4gdGhyZWFkIGlzIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhcworICAgc3RhcnRlZC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZnVuY3Rpb246OiBzZXR0cmFjZShmdW5jKQogCiAgICAuLiBpbmRleDo6IHNpbmdsZTogdHJhY2UgZnVuY3Rpb24KQEAgLTgwLDcgKzg5LDggQEAKICAgIFJldHVybiB0aGUgdGhyZWFkIHN0YWNrIHNpemUgdXNlZCB3aGVuIGNyZWF0aW5nIG5ldyB0aHJlYWRzLiAgVGhlIG9wdGlvbmFsCiAgICAqc2l6ZSogYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBzdGFjayBzaXplIHRvIGJlIHVzZWQgZm9yIHN1YnNlcXVlbnRseSBjcmVhdGVkCiAgICB0aHJlYWRzLCBhbmQgbXVzdCBiZSAwICh1c2UgcGxhdGZvcm0gb3IgY29uZmlndXJlZCBkZWZhdWx0KSBvciBhIHBvc2l0aXZlCi0gICBpbnRlZ2VyIHZhbHVlIG9mIGF0IGxlYXN0IDMyLDc2OCAoMzIgS2lCKS4gSWYgY2hhbmdpbmcgdGhlIHRocmVhZCBzdGFjayBzaXplIGlzCisgICBpbnRlZ2VyIHZhbHVlIG9mIGF0IGxlYXN0IDMyLDc2OCAoMzIgS2lCKS4gSWYgKnNpemUqIGlzIG5vdCBzcGVjaWZpZWQsCisgICAwIGlzIHVzZWQuICBJZiBjaGFuZ2luZyB0aGUgdGhyZWFkIHN0YWNrIHNpemUgaXMKICAgIHVuc3VwcG9ydGVkLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgaXMgcmFpc2VkLiAgSWYgdGhlIHNwZWNpZmllZCBzdGFjayBzaXplIGlzCiAgICBpbnZhbGlkLCBhIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBhbmQgdGhlIHN0YWNrIHNpemUgaXMgdW5tb2RpZmllZC4gIDMyIEtpQgogICAgaXMgY3VycmVudGx5IHRoZSBtaW5pbXVtIHN1cHBvcnRlZCBzdGFjayBzaXplIHZhbHVlIHRvIGd1YXJhbnRlZSBzdWZmaWNpZW50CkBAIC0zNDUsNyArMzU1LDcgQEAKIGltbWVkaWF0ZWx5LiBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVsZWFzZSBhbiB1bmxvY2tlZCBsb2NrLCBhCiA6ZXhjOmBSdW50aW1lRXJyb3JgIHdpbGwgYmUgcmFpc2VkLgogCi1Mb2NrcyBhbHNvIHN1cHBvcnQgdGhlIDpyZWY6YGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCA8d2l0aC1sb2Nrcz5gLgorTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YC4KIAogV2hlbiBtb3JlIHRoYW4gb25lIHRocmVhZCBpcyBibG9ja2VkIGluIDptZXRoOmB+TG9jay5hY3F1aXJlYCB3YWl0aW5nIGZvciB0aGUKIHN0YXRlIHRvIHR1cm4gdG8gdW5sb2NrZWQsIG9ubHkgb25lIHRocmVhZCBwcm9jZWVkcyB3aGVuIGEgOm1ldGg6YH5Mb2NrLnJlbGVhc2VgCkBAIC00MjQsNyArNDM0LDcgQEAKIDptZXRoOmB+TG9jay5yZWxlYXNlYCBvZiB0aGUgb3V0ZXJtb3N0IHBhaXIpIHJlc2V0cyB0aGUgbG9jayB0byB1bmxvY2tlZCBhbmQKIGFsbG93cyBhbm90aGVyIHRocmVhZCBibG9ja2VkIGluIDptZXRoOmB+TG9jay5hY3F1aXJlYCB0byBwcm9jZWVkLgogCi1SZWVudHJhbnQgbG9ja3MgYWxzbyBzdXBwb3J0IHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YC4KK1JlZW50cmFudCBsb2NrcyBhbHNvIHN1cHBvcnQgdGhlIDpyZWY6YGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCA8d2l0aC1sb2Nrcz5gLgogCiAKIC4uIGNsYXNzOjogUkxvY2soKQpAQCAtNDkyLDcgKzUwMiw3IEBACiBzZXZlcmFsIGNvbmRpdGlvbiB2YXJpYWJsZXMgbXVzdCBzaGFyZSB0aGUgc2FtZSBsb2NrLiAgVGhlIGxvY2sgaXMgcGFydCBvZgogdGhlIGNvbmRpdGlvbiBvYmplY3Q6IHlvdSBkb24ndCBoYXZlIHRvIHRyYWNrIGl0IHNlcGFyYXRlbHkuCiAKLUEgY29uZGl0aW9uIHZhcmlhYmxlIG9iZXlzIHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YDoKK0EgY29uZGl0aW9uIHZhcmlhYmxlIG9iZXlzIHRoZSA6cmVmOmBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgPHdpdGgtbG9ja3M+YDoKIHVzaW5nIHRoZSBgYHdpdGhgYCBzdGF0ZW1lbnQgYWNxdWlyZXMgdGhlIGFzc29jaWF0ZWQgbG9jayBmb3IgdGhlIGR1cmF0aW9uIG9mCiB0aGUgZW5jbG9zZWQgYmxvY2suICBUaGUgOm1ldGg6YH5Db25kaXRpb24uYWNxdWlyZWAgYW5kCiA6bWV0aDpgfkNvbmRpdGlvbi5yZWxlYXNlYCBtZXRob2RzIGFsc28gY2FsbCB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIG9mCkBAIC02MjEsNyArNjMxLDcgQEAKICAgICAgICAgICAgIGN2LndhaXQoKQogCiAgICAgICBUaGVyZWZvcmUsIHRoZSBzYW1lIHJ1bGVzIGFwcGx5IGFzIHdpdGggOm1ldGg6YHdhaXRgOiBUaGUgbG9jayBtdXN0IGJlCi0gICAgICBoZWxkIHdoZW4gY2FsbGVkIGFuZCBpcyByZS1hcXVpcmVkIG9uIHJldHVybi4gIFRoZSBwcmVkaWNhdGUgaXMgZXZhbHVhdGVkCisgICAgICBoZWxkIHdoZW4gY2FsbGVkIGFuZCBpcyByZS1hY3F1aXJlZCBvbiByZXR1cm4uICBUaGUgcHJlZGljYXRlIGlzIGV2YWx1YXRlZAogICAgICAgd2l0aCB0aGUgbG9jayBoZWxkLgogCiAgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKQEAgLTY2OCw3ICs2NzgsNyBAQAogZmluZHMgdGhhdCBpdCBpcyB6ZXJvLCBpdCBibG9ja3MsIHdhaXRpbmcgdW50aWwgc29tZSBvdGhlciB0aHJlYWQgY2FsbHMKIDptZXRoOmB+U2VtYXBob3JlLnJlbGVhc2VgLgogCi1TZW1hcGhvcmVzIGFsc28gc3VwcG9ydCB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIDx3aXRoLWxvY2tzPmAuCitTZW1hcGhvcmVzIGFsc28gc3VwcG9ydCB0aGUgOnJlZjpgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIDx3aXRoLWxvY2tzPmAuCiAKIAogLi4gY2xhc3M6OiBTZW1hcGhvcmUodmFsdWU9MSkKQEAgLTg2NSw3ICs4NzUsNyBAQAogb2YgdGhyZWFkcyB0aGF0IG5lZWQgdG8gd2FpdCBmb3IgZWFjaCBvdGhlci4gIEVhY2ggb2YgdGhlIHRocmVhZHMgdHJpZXMgdG8gcGFzcwogdGhlIGJhcnJpZXIgYnkgY2FsbGluZyB0aGUgOm1ldGg6YH5CYXJyaWVyLndhaXRgIG1ldGhvZCBhbmQgd2lsbCBibG9jayB1bnRpbAogYWxsIG9mIHRoZSB0aHJlYWRzIGhhdmUgbWFkZSB0aGUgY2FsbC4gIEF0IHRoaXMgcG9pbnRzLCB0aGUgdGhyZWFkcyBhcmUgcmVsZWFzZWQKLXNpbXVsdGFub3VzbHkuCitzaW11bHRhbmVvdXNseS4KIAogVGhlIGJhcnJpZXIgY2FuIGJlIHJldXNlZCBhbnkgbnVtYmVyIG9mIHRpbWVzIGZvciB0aGUgc2FtZSBudW1iZXIgb2YgdGhyZWFkcy4KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGltZS5yc3QgYi9Eb2MvbGlicmFyeS90aW1lLnJzdAppbmRleCA2NGI1ZTA0Li4wYTNkOTc3IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90aW1lLnJzdAorKysgYi9Eb2MvbGlicmFyeS90aW1lLnJzdApAQCAtMTMzLDggKzEzMyw3IEBACiAKICAgIE9uIFVuaXgsIHJldHVybiB0aGUgY3VycmVudCBwcm9jZXNzb3IgdGltZSBhcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciBleHByZXNzZWQKICAgIGluIHNlY29uZHMuICBUaGUgcHJlY2lzaW9uLCBhbmQgaW4gZmFjdCB0aGUgdmVyeSBkZWZpbml0aW9uIG9mIHRoZSBtZWFuaW5nIG9mCi0gICAicHJvY2Vzc29yIHRpbWUiLCBkZXBlbmRzIG9uIHRoYXQgb2YgdGhlIEMgZnVuY3Rpb24gb2YgdGhlIHNhbWUgbmFtZSwgYnV0IGluIGFueQotICAgY2FzZSwgdGhpcyBpcyB0aGUgZnVuY3Rpb24gdG8gdXNlIGZvciBiZW5jaG1hcmtpbmcgUHl0aG9uIG9yIHRpbWluZyBhbGdvcml0aG1zLgorICAgInByb2Nlc3NvciB0aW1lIiwgZGVwZW5kcyBvbiB0aGF0IG9mIHRoZSBDIGZ1bmN0aW9uIG9mIHRoZSBzYW1lIG5hbWUuCiAKICAgIE9uIFdpbmRvd3MsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB3YWxsLWNsb2NrIHNlY29uZHMgZWxhcHNlZCBzaW5jZSB0aGUgZmlyc3QKICAgIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiwgYXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIGJhc2VkIG9uIHRoZSBXaW4zMiBmdW5jdGlvbgpAQCAtMzQzLDEyICszNDIsMTMgQEAKIAogLi4gZnVuY3Rpb246OiBzbGVlcChzZWNzKQogCi0gICBTdXNwZW5kIGV4ZWN1dGlvbiBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLiAgVGhlIGFyZ3VtZW50IG1heSBiZSBhCi0gICBmbG9hdGluZyBwb2ludCBudW1iZXIgdG8gaW5kaWNhdGUgYSBtb3JlIHByZWNpc2Ugc2xlZXAgdGltZS4gVGhlIGFjdHVhbAotICAgc3VzcGVuc2lvbiB0aW1lIG1heSBiZSBsZXNzIHRoYW4gdGhhdCByZXF1ZXN0ZWQgYmVjYXVzZSBhbnkgY2F1Z2h0IHNpZ25hbCB3aWxsCi0gICB0ZXJtaW5hdGUgdGhlIDpmdW5jOmBzbGVlcGAgZm9sbG93aW5nIGV4ZWN1dGlvbiBvZiB0aGF0IHNpZ25hbCdzIGNhdGNoaW5nCi0gICByb3V0aW5lLiAgQWxzbywgdGhlIHN1c3BlbnNpb24gdGltZSBtYXkgYmUgbG9uZ2VyIHRoYW4gcmVxdWVzdGVkIGJ5IGFuIGFyYml0cmFyeQotICAgYW1vdW50IGJlY2F1c2Ugb2YgdGhlIHNjaGVkdWxpbmcgb2Ygb3RoZXIgYWN0aXZpdHkgaW4gdGhlIHN5c3RlbS4KKyAgIFN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZSBjYWxsaW5nIHRocmVhZCBmb3IgdGhlIGdpdmVuIG51bWJlciBvZiBzZWNvbmRzLgorICAgVGhlIGFyZ3VtZW50IG1heSBiZSBhIGZsb2F0aW5nIHBvaW50IG51bWJlciB0byBpbmRpY2F0ZSBhIG1vcmUgcHJlY2lzZSBzbGVlcAorICAgdGltZS4gVGhlIGFjdHVhbCBzdXNwZW5zaW9uIHRpbWUgbWF5IGJlIGxlc3MgdGhhbiB0aGF0IHJlcXVlc3RlZCBiZWNhdXNlIGFueQorICAgY2F1Z2h0IHNpZ25hbCB3aWxsIHRlcm1pbmF0ZSB0aGUgOmZ1bmM6YHNsZWVwYCBmb2xsb3dpbmcgZXhlY3V0aW9uIG9mIHRoYXQKKyAgIHNpZ25hbCdzIGNhdGNoaW5nIHJvdXRpbmUuICBBbHNvLCB0aGUgc3VzcGVuc2lvbiB0aW1lIG1heSBiZSBsb25nZXIgdGhhbgorICAgcmVxdWVzdGVkIGJ5IGFuIGFyYml0cmFyeSBhbW91bnQgYmVjYXVzZSBvZiB0aGUgc2NoZWR1bGluZyBvZiBvdGhlciBhY3Rpdml0eQorICAgaW4gdGhlIHN5c3RlbS4KIAogCiAuLiBmdW5jdGlvbjo6IHN0cmZ0aW1lKGZvcm1hdFssIHRdKQpAQCAtNTUwLDkgKzU1MCwxMSBAQAogICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKICAgIE5vdGUgdGhhdCB1bmxpa2UgdGhlIEMgc3RydWN0dXJlLCB0aGUgbW9udGggdmFsdWUgaXMgYSByYW5nZSBvZiBbMSwgMTJdLCBub3QKLSAgIFswLCAxMV0uICBBIGBgLTFgYCBhcmd1bWVudCBhcyB0aGUgZGF5bGlnaHQKLSAgIHNhdmluZ3MgZmxhZywgcGFzc2VkIHRvIDpmdW5jOmBta3RpbWVgIHdpbGwgdXN1YWxseSByZXN1bHQgaW4gdGhlIGNvcnJlY3QKLSAgIGRheWxpZ2h0IHNhdmluZ3Mgc3RhdGUgdG8gYmUgZmlsbGVkIGluLgorICAgWzAsIDExXS4KKworICAgSW4gY2FsbHMgdG8gOmZ1bmM6YG1rdGltZWAsIDphdHRyOmB0bV9pc2RzdGAgbWF5IGJlIHNldCB0byAxIHdoZW4gZGF5bGlnaHQKKyAgIHNhdmluZ3MgdGltZSBpcyBpbiBlZmZlY3QsIGFuZCAwIHdoZW4gaXQgaXMgbm90LiAgQSB2YWx1ZSBvZiAtMSBpbmRpY2F0ZXMgdGhhdAorICAgdGhpcyBpcyBub3Qga25vd24sIGFuZCB3aWxsIHVzdWFsbHkgcmVzdWx0IGluIHRoZSBjb3JyZWN0IHN0YXRlIGJlaW5nIGZpbGxlZCBpbi4KIAogICAgV2hlbiBhIHR1cGxlIHdpdGggYW4gaW5jb3JyZWN0IGxlbmd0aCBpcyBwYXNzZWQgdG8gYSBmdW5jdGlvbiBleHBlY3RpbmcgYQogICAgOmNsYXNzOmBzdHJ1Y3RfdGltZWAsIG9yIGhhdmluZyBlbGVtZW50cyBvZiB0aGUgd3JvbmcgdHlwZSwgYQpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdCBiL0RvYy9saWJyYXJ5L3RpbWVpdC5yc3QKaW5kZXggYTQ4NzkxNy4uNzBkZjQwOSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGltZWl0LnJzdAorKysgYi9Eb2MvbGlicmFyeS90aW1laXQucnN0CkBAIC0yOCwyMiArMjgsMjMgQEAKIAogLi4gY29kZS1ibG9jazo6IHNoCiAKLSAgICQgcHl0aG9uIC1tIHRpbWVpdCAnIi0iLmpvaW4oc3RyKG4pIGZvciBuIGluIHJhbmdlKDEwMCkpJwotICAgMTAwMDAgbG9vcHMsIGJlc3Qgb2YgMzogNDAuMyB1c2VjIHBlciBsb29wCi0gICAkIHB5dGhvbiAtbSB0aW1laXQgJyItIi5qb2luKFtzdHIobikgZm9yIG4gaW4gcmFuZ2UoMTAwKV0pJwotICAgMTAwMDAgbG9vcHMsIGJlc3Qgb2YgMzogMzMuNCB1c2VjIHBlciBsb29wCi0gICAkIHB5dGhvbiAtbSB0aW1laXQgJyItIi5qb2luKG1hcChzdHIsIHJhbmdlKDEwMCkpKScKLSAgIDEwMDAwIGxvb3BzLCBiZXN0IG9mIDM6IDI1LjIgdXNlYyBwZXIgbG9vcAorICAgJCBweXRob24zIC1tIHRpbWVpdCAnIi0iLmpvaW4oc3RyKG4pIGZvciBuIGluIHJhbmdlKDEwMCkpJworICAgMTAwMDAgbG9vcHMsIGJlc3Qgb2YgMzogMzAuMiB1c2VjIHBlciBsb29wCisgICAkIHB5dGhvbjMgLW0gdGltZWl0ICciLSIuam9pbihbc3RyKG4pIGZvciBuIGluIHJhbmdlKDEwMCldKScKKyAgIDEwMDAwIGxvb3BzLCBiZXN0IG9mIDM6IDI3LjUgdXNlYyBwZXIgbG9vcAorICAgJCBweXRob24zIC1tIHRpbWVpdCAnIi0iLmpvaW4obWFwKHN0ciwgcmFuZ2UoMTAwKSkpJworICAgMTAwMDAgbG9vcHMsIGJlc3Qgb2YgMzogMjMuMiB1c2VjIHBlciBsb29wCiAKIFRoaXMgY2FuIGJlIGFjaGlldmVkIGZyb20gdGhlIDpyZWY6YHB5dGhvbi1pbnRlcmZhY2VgIHdpdGg6OgogCiAgICA+Pj4gaW1wb3J0IHRpbWVpdAogICAgPj4+IHRpbWVpdC50aW1laXQoJyItIi5qb2luKHN0cihuKSBmb3IgbiBpbiByYW5nZSgxMDApKScsIG51bWJlcj0xMDAwMCkKLSAgIDAuODE4NzI2MDYyNzc0NjU4MgorICAgMC4zMDE4NjExODQ4ODIwMDAxCiAgICA+Pj4gdGltZWl0LnRpbWVpdCgnIi0iLmpvaW4oW3N0cihuKSBmb3IgbiBpbiByYW5nZSgxMDApXSknLCBudW1iZXI9MTAwMDApCi0gICAwLjcyODgzMDgxNDM2MTU3MjMKKyAgIDAuMjcyNzM2ODc5MDY1NjMyOAogICAgPj4+IHRpbWVpdC50aW1laXQoJyItIi5qb2luKG1hcChzdHIsIHJhbmdlKDEwMCkpKScsIG51bWJlcj0xMDAwMCkKLSAgIDAuNTg1ODk1MDYxNDkyOTE5OQorICAgMC4yMzcwMjY3OTgwNzMyMDIzNworCiAKIE5vdGUgaG93ZXZlciB0aGF0IDptb2Q6YHRpbWVpdGAgd2lsbCBhdXRvbWF0aWNhbGx5IGRldGVybWluZSB0aGUgbnVtYmVyIG9mCiByZXBldGl0aW9ucyBvbmx5IHdoZW4gdGhlIGNvbW1hbmQtbGluZSBpbnRlcmZhY2UgaXMgdXNlZC4gIEluIHRoZQpAQCAtOTMsNiArOTQsOCBAQAogICAgbWV0aG9kLiAgVGhlIDptZXRoOmAucmVwZWF0YCBtZXRob2QgaXMgYSBjb252ZW5pZW5jZSB0byBjYWxsIDptZXRoOmAudGltZWl0YAogICAgbXVsdGlwbGUgdGltZXMgYW5kIHJldHVybiBhIGxpc3Qgb2YgcmVzdWx0cy4KIAorICAgVGhlIGV4ZWN1dGlvbiB0aW1lIG9mICpzZXR1cCogaXMgZXhjbHVkZWQgZnJvbSB0aGUgb3ZlcmFsbCB0aW1lZCBleGVjdXRpb24gcnVuLgorCiAgICBUaGUgKnN0bXQqIGFuZCAqc2V0dXAqIHBhcmFtZXRlcnMgY2FuIGFsc28gdGFrZSBvYmplY3RzIHRoYXQgYXJlIGNhbGxhYmxlCiAgICB3aXRob3V0IGFyZ3VtZW50cy4gIFRoaXMgd2lsbCBlbWJlZCBjYWxscyB0byB0aGVtIGluIGEgdGltZXIgZnVuY3Rpb24gdGhhdAogICAgd2lsbCB0aGVuIGJlIGV4ZWN1dGVkIGJ5IDptZXRoOmAudGltZWl0YC4gIE5vdGUgdGhhdCB0aGUgdGltaW5nIG92ZXJoZWFkIGlzIGEKQEAgLTE1MSw3ICsxNTQsNyBAQAogICAgICAgICAgdCA9IFRpbWVyKC4uLikgICAgICAgIyBvdXRzaWRlIHRoZSB0cnkvZXhjZXB0CiAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgdC50aW1laXQoLi4uKSAgICAjIG9yIHQucmVwZWF0KC4uLikKLSAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgdC5wcmludF9leGMoKQogCiAgICAgICBUaGUgYWR2YW50YWdlIG92ZXIgdGhlIHN0YW5kYXJkIHRyYWNlYmFjayBpcyB0aGF0IHNvdXJjZSBsaW5lcyBpbiB0aGUKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RraW50ZXIucnN0IGIvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QKaW5kZXggZWViMWY4MC4uOGI3MzhjMyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGtpbnRlci5yc3QKQEAgLTE1LDE0ICsxNSwxNCBAQAogCiAuLiBzZWVhbHNvOjoKIAotICAgYFB5dGhvbiBUa2ludGVyIFJlc291cmNlcyA8aHR0cDovL3d3dy5weXRob24ub3JnL3RvcGljcy90a2ludGVyLz5gXworICAgYFB5dGhvbiBUa2ludGVyIFJlc291cmNlcyA8aHR0cHM6Ly93aWtpLnB5dGhvbi5vcmcvbW9pbi9Ua0ludGVyPmBfCiAgICAgICBUaGUgUHl0aG9uIFRraW50ZXIgVG9waWMgR3VpZGUgcHJvdmlkZXMgYSBncmVhdCBkZWFsIG9mIGluZm9ybWF0aW9uIG9uIHVzaW5nIFRrCiAgICAgICBmcm9tIFB5dGhvbiBhbmQgbGlua3MgdG8gb3RoZXIgc291cmNlcyBvZiBpbmZvcm1hdGlvbiBvbiBUay4KIAogICAgYFRLRG9jcyA8aHR0cDovL3d3dy50a2RvY3MuY29tLz5gXwogICAgICAgRXh0ZW5zaXZlIHR1dG9yaWFsIHBsdXMgZnJpZW5kbGllciB3aWRnZXQgcGFnZXMgZm9yIHNvbWUgb2YgdGhlIHdpZGdldHMuCiAKLSAgIGBUa2ludGVyIHJlZmVyZW5jZTogYSBHVUkgZm9yIFB5dGhvbiA8aHR0cDovL2luZm9ob3N0Lm5tdC5lZHUvdGNjL2hlbHAvcHVicy90a2ludGVyLz5gXworICAgYFRraW50ZXIgcmVmZXJlbmNlOiBhIEdVSSBmb3IgUHl0aG9uIDxodHRwOi8vaW5mb2hvc3Qubm10LmVkdS90Y2MvaGVscC9wdWJzL3RraW50ZXIvd2ViL2luZGV4Lmh0bWw+YF8KICAgICAgIE9uLWxpbmUgcmVmZXJlbmNlIG1hdGVyaWFsLgogCiAgICBgVGtpbnRlciBkb2NzIGZyb20gZWZmYm90IDxodHRwOi8vZWZmYm90Lm9yZy90a2ludGVyYm9vay8+YF8KQEAgLTMxLDEzICszMSwxMyBAQAogICAgYFRjbC9UayBtYW51YWwgPGh0dHA6Ly93d3cudGNsLnRrL21hbi90Y2w4LjUvPmBfCiAgICAgICBPZmZpY2lhbCBtYW51YWwgZm9yIHRoZSBsYXRlc3QgdGNsL3RrIHZlcnNpb24uCiAKLSAgIGBQcm9ncmFtbWluZyBQeXRob24gPGh0dHA6Ly93d3cuYW1hem9uLmNvbS9Qcm9ncmFtbWluZy1QeXRob24tTWFyay1MdXR6L2RwLzA1OTYxNTgxMDYvPmBfCisgICBgUHJvZ3JhbW1pbmcgUHl0aG9uIDxodHRwOi8vd3d3LnJtaS5uZXQvfmx1dHovYWJvdXQtcHA0ZS5odG1sPmBfCiAgICAgICBCb29rIGJ5IE1hcmsgTHV0eiwgaGFzIGV4Y2VsbGVudCBjb3ZlcmFnZSBvZiBUa2ludGVyLgogCiAgICBgTW9kZXJuIFRraW50ZXIgZm9yIEJ1c3kgUHl0aG9uIERldmVsb3BlcnMgPGh0dHA6Ly93d3cuYW1hem9uLmNvbS9Nb2Rlcm4tVGtpbnRlci1QeXRob24tRGV2ZWxvcGVycy1lYm9vay9kcC9CMDA3MVFETkxPLz5gXwogICAgICAgQm9vayBieSBNYXJrIFJvemVybWFuIGFib3V0IGJ1aWxkaW5nIGF0dHJhY3RpdmUgYW5kIG1vZGVybiBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzIHdpdGggUHl0aG9uIGFuZCBUa2ludGVyLgogCi0gICBgUHl0aG9uIGFuZCBUa2ludGVyIFByb2dyYW1taW5nIDxodHRwOi8vd3d3LmFtYXpvbi5jb20vZXhlYy9vYmlkb3MvQVNJTi8xODg0Nzc3ODEzPmBfCisgICBgUHl0aG9uIGFuZCBUa2ludGVyIFByb2dyYW1taW5nIDxodHRwOi8vd3d3Lm1hbm5pbmcuY29tL2dyYXlzb24vPmBfCiAgICAgICBUaGUgYm9vayBieSBKb2huIEdyYXlzb24gKElTQk4gMS04ODQ3NzctODEtMykuCiAKIApAQCAtMTgyLDcgKzE4Miw3IEBACiAgICBgVGNsIGFuZCB0aGUgVGsgVG9vbGtpdCA8aHR0cDovL3d3dy5hbWF6b24uY29tL2V4ZWMvb2JpZG9zL0FTSU4vMDIwMTYzMzM3WD5gXwogICAgICAgVGhlIGJvb2sgYnkgSm9obiBPdXN0ZXJob3V0LCB0aGUgaW52ZW50b3Igb2YgVGNsLgogCi0gICBgUHJhY3RpY2FsIFByb2dyYW1taW5nIGluIFRjbCBhbmQgVGsgPGh0dHA6Ly93d3cuYW1hem9uLmNvbS9leGVjL29iaWRvcy9BU0lOLzAxMzAyMjAyODA+YF8KKyAgIGBQcmFjdGljYWwgUHJvZ3JhbW1pbmcgaW4gVGNsIGFuZCBUayA8aHR0cDovL3d3dy5iZWVkdWIuY29tL2Jvb2svPmBfCiAgICAgICBCcmVudCBXZWxjaCdzIGVuY3ljbG9wZWRpYyBib29rLgogCiAKQEAgLTc0NywzMiArNzQ3LDYgQEAKICAgIGRpc3BsYXllZC4gIFlvdSBjYW4gdXNlIHRoZXNlIDptb2Q6YHRraW50ZXJgIGZ1bmN0aW9ucyB0byBhY2Nlc3MgdGhlc2Ugc3BlY2lhbAogICAgcG9pbnRzIGluIHRleHQgd2lkZ2V0czoKIAotLi4gZnVuY3Rpb246OiBBdEVuZCgpCi0gICAgICByZWZlcnMgdG8gdGhlIGxhc3QgcG9zaXRpb24gaW4gdGhlIHRleHQKLQotICAgLi4gZGVwcmVjYXRlZDo6IDMuMwotCi0uLiBmdW5jdGlvbjo6IEF0SW5zZXJ0KCkKLSAgICAgIHJlZmVycyB0byB0aGUgcG9pbnQgd2hlcmUgdGhlIHRleHQgY3Vyc29yIGlzCi0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdFNlbEZpcnN0KCkKLSAgICAgIGluZGljYXRlcyB0aGUgYmVnaW5uaW5nIHBvaW50IG9mIHRoZSBzZWxlY3RlZCB0ZXh0Ci0KLSAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjMKLQotLi4gZnVuY3Rpb246OiBBdFNlbExhc3QoKQotICAgICAgZGVub3RlcyB0aGUgbGFzdCBwb2ludCBvZiB0aGUgc2VsZWN0ZWQgdGV4dCBhbmQgZmluYWxseQotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KLS4uIGZ1bmN0aW9uOjogQXQoeFssIHldKQotICAgICAgcmVmZXJzIHRvIHRoZSBjaGFyYWN0ZXIgYXQgcGl4ZWwgbG9jYXRpb24gKngqLCAqeSogKHdpdGggKnkqIG5vdCB1c2VkIGluIHRoZQotICAgICAgY2FzZSBvZiBhIHRleHQgZW50cnkgd2lkZ2V0LCB3aGljaCBjb250YWlucyBhIHNpbmdsZSBsaW5lIG9mIHRleHQpLgotCi0gICAuLiBkZXByZWNhdGVkOjogMy4zCi0KIFRleHQgd2lkZ2V0IGluZGV4ZXMKICAgIFRoZSBpbmRleCBub3RhdGlvbiBmb3IgVGV4dCB3aWRnZXRzIGlzIHZlcnkgcmljaCBhbmQgaXMgYmVzdCBkZXNjcmliZWQgaW4gdGhlIFRrCiAgICBtYW4gcGFnZXMuCkBAIC04MjAsMyArNzk0LDUzIEBACiByZWZlcmVuY2UgdG8gdGhlIGltYWdlLiBXaGVuIHRoZSBsYXN0IFB5dGhvbiByZWZlcmVuY2UgdG8gdGhlIGltYWdlIG9iamVjdCBpcwogZGVsZXRlZCwgdGhlIGltYWdlIGRhdGEgaXMgZGVsZXRlZCBhcyB3ZWxsLCBhbmQgVGsgd2lsbCBkaXNwbGF5IGFuIGVtcHR5IGJveAogd2hlcmV2ZXIgdGhlIGltYWdlIHdhcyB1c2VkLgorCisKKy4uIF90a2ludGVyLWZpbGUtaGFuZGxlcnM6CisKK0ZpbGUgSGFuZGxlcnMKKy0tLS0tLS0tLS0tLS0KKworVGsgYWxsb3dzIHlvdSB0byByZWdpc3RlciBhbmQgdW5yZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUKK2NhbGxlZCBmcm9tIHRoZSBUayBtYWlubG9vcCB3aGVuIEkvTyBpcyBwb3NzaWJsZSBvbiBhIGZpbGUgZGVzY3JpcHRvci4KK09ubHkgb25lIGhhbmRsZXIgbWF5IGJlIHJlZ2lzdGVyZWQgcGVyIGZpbGUgZGVzY3JpcHRvci4gRXhhbXBsZSBjb2RlOjoKKworICAgaW1wb3J0IHRraW50ZXIKKyAgIHdpZGdldCA9IHRraW50ZXIuVGsoKQorICAgbWFzayA9IHRraW50ZXIuUkVBREFCTEUgfCB0a2ludGVyLldSSVRBQkxFCisgICB3aWRnZXQudGsuY3JlYXRlZmlsZWhhbmRsZXIoZmlsZSwgbWFzaywgY2FsbGJhY2spCisgICAuLi4KKyAgIHdpZGdldC50ay5kZWxldGVmaWxlaGFuZGxlcihmaWxlKQorCitUaGlzIGZlYXR1cmUgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgorCitTaW5jZSB5b3UgZG9uJ3Qga25vdyBob3cgbWFueSBieXRlcyBhcmUgYXZhaWxhYmxlIGZvciByZWFkaW5nLCB5b3UgbWF5IG5vdAord2FudCB0byB1c2UgdGhlIDpjbGFzczpgfmlvLkJ1ZmZlcmVkSU9CYXNlYCBvciA6Y2xhc3M6YH5pby5UZXh0SU9CYXNlYAorOm1ldGg6YH5pby5CdWZmZXJlZElPQmFzZS5yZWFkYCBvciA6bWV0aDpgfmlvLklPQmFzZS5yZWFkbGluZWAgbWV0aG9kcywKK3NpbmNlIHRoZXNlIHdpbGwgaW5zaXN0IG9uIHJlYWRpbmcgYSBwcmVkZWZpbmVkIG51bWJlciBvZiBieXRlcy4KK0ZvciBzb2NrZXRzLCB0aGUgOm1ldGg6YH5zb2NrZXQuc29ja2V0LnJlY3ZgIG9yCis6bWV0aDpgfnNvY2tldC5zb2NrZXQucmVjdmZyb21gIG1ldGhvZHMgd2lsbCB3b3JrIGZpbmU7IGZvciBvdGhlciBmaWxlcywKK3VzZSByYXcgcmVhZHMgb3IgYGBvcy5yZWFkKGZpbGUuZmlsZW5vKCksIG1heGJ5dGVjb3VudClgYC4KKworCisuLiBtZXRob2Q6OiBXaWRnZXQudGsuY3JlYXRlZmlsZWhhbmRsZXIoZmlsZSwgbWFzaywgZnVuYykKKworICAgUmVnaXN0ZXJzIHRoZSBmaWxlIGhhbmRsZXIgY2FsbGJhY2sgZnVuY3Rpb24gKmZ1bmMqLiBUaGUgKmZpbGUqIGFyZ3VtZW50CisgICBtYXkgZWl0aGVyIGJlIGFuIG9iamVjdCB3aXRoIGEgOm1ldGg6YH5pby5JT0Jhc2UuZmlsZW5vYCBtZXRob2QgKHN1Y2ggYXMKKyAgIGEgZmlsZSBvciBzb2NrZXQgb2JqZWN0KSwgb3IgYW4gaW50ZWdlciBmaWxlIGRlc2NyaXB0b3IuIFRoZSAqbWFzayoKKyAgIGFyZ3VtZW50IGlzIGFuIE9SZWQgY29tYmluYXRpb24gb2YgYW55IG9mIHRoZSB0aHJlZSBjb25zdGFudHMgYmVsb3cuCisgICBUaGUgY2FsbGJhY2sgaXMgY2FsbGVkIGFzIGZvbGxvd3M6OgorCisgICAgICBjYWxsYmFjayhmaWxlLCBtYXNrKQorCisKKy4uIG1ldGhvZDo6IFdpZGdldC50ay5kZWxldGVmaWxlaGFuZGxlcihmaWxlKQorCisgICBVbnJlZ2lzdGVycyBhIGZpbGUgaGFuZGxlci4KKworCisuLiBkYXRhOjogUkVBREFCTEUKKyAgICAgICAgICBXUklUQUJMRQorICAgICAgICAgIEVYQ0VQVElPTgorCisgICBDb25zdGFudHMgdXNlZCBpbiB0aGUgKm1hc2sqIGFyZ3VtZW50cy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3RraW50ZXIudHRrLnJzdCBiL0RvYy9saWJyYXJ5L3RraW50ZXIudHRrLnJzdAppbmRleCA2ZjhiZjFjLi40NjAxMTcxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90a2ludGVyLnR0ay5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdGtpbnRlci50dGsucnN0CkBAIC0xMTAsOCArMTEwLDkgQEAKICAgIHwgY2xhc3MgICAgIHwgU3BlY2lmaWVzIHRoZSB3aW5kb3cgY2xhc3MuIFRoZSBjbGFzcyBpcyB1c2VkIHdoZW4gcXVlcnlpbmcgIHwKICAgIHwgICAgICAgICAgIHwgdGhlIG9wdGlvbiBkYXRhYmFzZSBmb3IgdGhlIHdpbmRvdydzIG90aGVyIG9wdGlvbnMsIHRvICAgICAgIHwKICAgIHwgICAgICAgICAgIHwgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJpbmR0YWdzIGZvciB0aGUgd2luZG93LCBhbmQgdG8gc2VsZWN0IHwKLSAgIHwgICAgICAgICAgIHwgdGhlIHdpZGdldCdzIGRlZmF1bHQgbGF5b3V0IGFuZCBzdHlsZS4gVGhpcyBpcyBhIHJlYWQtb25seSAgIHwKLSAgIHwgICAgICAgICAgIHwgd2hpY2ggbWF5IG9ubHkgYmUgc3BlY2lmaWVkIHdoZW4gdGhlIHdpbmRvdyBpcyBjcmVhdGVkICAgICAgIHwKKyAgIHwgICAgICAgICAgIHwgdGhlIHdpZGdldCdzIGRlZmF1bHQgbGF5b3V0IGFuZCBzdHlsZS4gVGhpcyBvcHRpb24gaXMgICAgICAgIHwKKyAgIHwgICAgICAgICAgIHwgcmVhZC1vbmx5LCBhbmQgbWF5IG9ubHkgYmUgc3BlY2lmaWVkIHdoZW4gdGhlIHdpbmRvdyBpcyAgICAgIHwKKyAgIHwgICAgICAgICAgIHwgY3JlYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgY3Vyc29yICAgIHwgU3BlY2lmaWVzIHRoZSBtb3VzZSBjdXJzb3IgdG8gYmUgdXNlZCBmb3IgdGhlIHdpZGdldC4gSWYgc2V0IHwKICAgIHwgICAgICAgICAgIHwgdG8gdGhlIGVtcHR5IHN0cmluZyAodGhlIGRlZmF1bHQpLCB0aGUgY3Vyc29yIGlzIGluaGVyaXRlZCAgIHwKQEAgLTU1NCw5ICs1NTUsOSBAQAogICAgICAgVGhpcyB3aWxsIGV4dGVuZCB0aGUgYmluZGluZ3MgZm9yIHRoZSB0b3BsZXZlbCB3aW5kb3cgY29udGFpbmluZyB0aGUKICAgICAgIG5vdGVib29rIGFzIGZvbGxvd3M6CiAKLSAgICAgICogQ29udHJvbC1UYWI6IHNlbGVjdHMgdGhlIHRhYiBmb2xsb3dpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBvbmUuCi0gICAgICAqIFNoaWZ0LUNvbnRyb2wtVGFiOiBzZWxlY3RzIHRoZSB0YWIgcHJlY2VkaW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb25lLgotICAgICAgKiBBbHQtSzogd2hlcmUgSyBpcyB0aGUgbW5lbW9uaWMgKHVuZGVybGluZWQpIGNoYXJhY3RlciBvZiBhbnkgdGFiLCB3aWxsCisgICAgICAqIDprYmQ6YENvbnRyb2wtVGFiYDogc2VsZWN0cyB0aGUgdGFiIGZvbGxvd2luZyB0aGUgY3VycmVudGx5IHNlbGVjdGVkIG9uZS4KKyAgICAgICogOmtiZDpgU2hpZnQtQ29udHJvbC1UYWJgOiBzZWxlY3RzIHRoZSB0YWIgcHJlY2VkaW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgb25lLgorICAgICAgKiA6a2JkOmBBbHQtS2A6IHdoZXJlICpLKiBpcyB0aGUgbW5lbW9uaWMgKHVuZGVybGluZWQpIGNoYXJhY3RlciBvZiBhbnkgdGFiLCB3aWxsCiAgICAgICAgIHNlbGVjdCB0aGF0IHRhYi4KIAogICAgICAgTXVsdGlwbGUgbm90ZWJvb2tzIGluIGEgc2luZ2xlIHRvcGxldmVsIG1heSBiZSBlbmFibGVkIGZvciB0cmF2ZXJzYWwsCkBAIC0xMTY3LDcgKzExNjgsNyBAQAogRWFjaCB3aWRnZXQgaW4gOm1vZDpgdHRrYCBpcyBhc3NpZ25lZCBhIHN0eWxlLCB3aGljaCBzcGVjaWZpZXMgdGhlIHNldCBvZgogZWxlbWVudHMgbWFraW5nIHVwIHRoZSB3aWRnZXQgYW5kIGhvdyB0aGV5IGFyZSBhcnJhbmdlZCwgYWxvbmcgd2l0aCBkeW5hbWljCiBhbmQgZGVmYXVsdCBzZXR0aW5ncyBmb3IgZWxlbWVudCBvcHRpb25zLiBCeSBkZWZhdWx0IHRoZSBzdHlsZSBuYW1lIGlzIHRoZQotc2FtZSBhcyB0aGUgd2lkZ2V0J3MgY2xhc3MgbmFtZSwgYnV0IGl0IG1heSBiZSBvdmVycmlkZW4gYnkgdGhlIHdpZGdldCdzIHN0eWxlCitzYW1lIGFzIHRoZSB3aWRnZXQncyBjbGFzcyBuYW1lLCBidXQgaXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgdGhlIHdpZGdldCdzIHN0eWxlCiBvcHRpb24uIElmIHlvdSBkb24ndCBrbm93IHRoZSBjbGFzcyBuYW1lIG9mIGEgd2lkZ2V0LCB1c2UgdGhlIG1ldGhvZAogOm1ldGg6YE1pc2Mud2luZm9fY2xhc3NgIChzb21ld2lkZ2V0LndpbmZvX2NsYXNzKCkpLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90b2tlbml6ZS5yc3QgYi9Eb2MvbGlicmFyeS90b2tlbml6ZS5yc3QKaW5kZXggMzdkOWY0MS4uYzljYjUxOCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdG9rZW5pemUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3Rva2VuaXplLnJzdApAQCAtNDEsNyArNDEsNyBAQAogICAgcmV0dXJuZWQgYXMgYSA6dGVybTpgbmFtZWQgdHVwbGVgIHdpdGggdGhlIGZpZWxkIG5hbWVzOgogICAgYGB0eXBlIHN0cmluZyBzdGFydCBlbmQgbGluZWBgLgogCi0gICBUaGUgcmV0dXJuZWQgOnRlcm06YG5hbWVkIHR1cGxlYCBoYXMgYSBhZGRpdGlvbmFsIHByb3BlcnR5IG5hbWVkCisgICBUaGUgcmV0dXJuZWQgOnRlcm06YG5hbWVkIHR1cGxlYCBoYXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSBuYW1lZAogICAgYGBleGFjdF90eXBlYGAgdGhhdCBjb250YWlucyB0aGUgZXhhY3Qgb3BlcmF0b3IgdHlwZSBmb3IKICAgIDpkYXRhOmB0b2tlbi5PUGAgdG9rZW5zLiAgRm9yIGFsbCBvdGhlciB0b2tlbiB0eXBlcyBgYGV4YWN0X3R5cGVgYAogICAgZXF1YWxzIHRoZSBuYW1lZCB0dXBsZSBgYHR5cGVgYCBmaWVsZC4KQEAgLTEzMSw2ICsxMzEsMjQgQEAKIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4yCiAKKy4uIGV4Y2VwdGlvbjo6IFRva2VuRXJyb3IKKworICAgUmFpc2VkIHdoZW4gZWl0aGVyIGEgZG9jc3RyaW5nIG9yIGV4cHJlc3Npb24gdGhhdCBtYXkgYmUgc3BsaXQgb3ZlciBzZXZlcmFsCisgICBsaW5lcyBpcyBub3QgY29tcGxldGVkIGFueXdoZXJlIGluIHRoZSBmaWxlLCBmb3IgZXhhbXBsZTo6CisKKyAgICAgICIiIkJlZ2lubmluZyBvZgorICAgICAgZG9jc3RyaW5nCisKKyAgIG9yOjoKKworICAgICAgWzEsCisgICAgICAgMiwKKyAgICAgICAzCisKK05vdGUgdGhhdCB1bmNsb3NlZCBzaW5nbGUtcXVvdGVkIHN0cmluZ3MgZG8gbm90IGNhdXNlIGFuIGVycm9yIHRvIGJlCityYWlzZWQuIFRoZXkgYXJlIHRva2VuaXplZCBhcyBgYEVSUk9SVE9LRU5gYCwgZm9sbG93ZWQgYnkgdGhlIHRva2VuaXphdGlvbiBvZgordGhlaXIgY29udGVudHMuCisKIAogLi4gX3Rva2VuaXplLWNsaToKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdCBiL0RvYy9saWJyYXJ5L3RyYWNlYmFjay5yc3QKaW5kZXggMzJlNTczMy4uMTVmYmVkYyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdHJhY2ViYWNrLnJzdAorKysgYi9Eb2MvbGlicmFyeS90cmFjZWJhY2sucnN0CkBAIC03Miw3ICs3Miw3IEBACiAgICBSZXR1cm4gYSBsaXN0IG9mIHVwIHRvICpsaW1pdCogInByZS1wcm9jZXNzZWQiIHN0YWNrIHRyYWNlIGVudHJpZXMgZXh0cmFjdGVkCiAgICBmcm9tIHRoZSB0cmFjZWJhY2sgb2JqZWN0ICp0cmFjZWJhY2sqLiAgSXQgaXMgdXNlZnVsIGZvciBhbHRlcm5hdGUgZm9ybWF0dGluZyBvZgogICAgc3RhY2sgdHJhY2VzLiAgSWYgKmxpbWl0KiBpcyBvbWl0dGVkIG9yIGBgTm9uZWBgLCBhbGwgZW50cmllcyBhcmUgZXh0cmFjdGVkLiAgQQotICAgInByZS1wcm9jZXNzZWQiIHN0YWNrIHRyYWNlIGVudHJ5IGlzIGEgcXVhZHJ1cGxlICgqZmlsZW5hbWUqLCAqbGluZSBudW1iZXIqLAorICAgInByZS1wcm9jZXNzZWQiIHN0YWNrIHRyYWNlIGVudHJ5IGlzIGEgNC10dXBsZSAoKmZpbGVuYW1lKiwgKmxpbmUgbnVtYmVyKiwKICAgICpmdW5jdGlvbiBuYW1lKiwgKnRleHQqKSByZXByZXNlbnRpbmcgdGhlIGluZm9ybWF0aW9uIHRoYXQgaXMgdXN1YWxseSBwcmludGVkCiAgICBmb3IgYSBzdGFjayB0cmFjZS4gIFRoZSAqdGV4dCogaXMgYSBzdHJpbmcgd2l0aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlCiAgICBzdHJpcHBlZDsgaWYgdGhlIHNvdXJjZSBpcyBub3QgYXZhaWxhYmxlIGl0IGlzIGBgTm9uZWBgLgpAQCAtMTI5LDYgKzEyOSwxMyBAQAogCiAgICBBIHNob3J0aGFuZCBmb3IgYGBmb3JtYXRfbGlzdChleHRyYWN0X3N0YWNrKGYsIGxpbWl0KSlgYC4KIAorLi4gZnVuY3Rpb246OiBjbGVhcl9mcmFtZXModGIpCisKKyAgIENsZWFycyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIGFsbCB0aGUgc3RhY2sgZnJhbWVzIGluIGEgdHJhY2ViYWNrICp0YioKKyAgIGJ5IGNhbGxpbmcgdGhlIDptZXRoOmBjbGVhcmAgbWV0aG9kIG9mIGVhY2ggZnJhbWUgb2JqZWN0LgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogCiAuLiBfdHJhY2ViYWNrLWV4YW1wbGU6CiAKQEAgLTE0Niw3ICsxNTMsNyBAQAogICAgICAgIHNvdXJjZSA9IGlucHV0KCI+Pj4gIikKICAgICAgICB0cnk6CiAgICAgICAgICAgIGV4ZWMoc291cmNlLCBlbnZkaXIpCi0gICAgICAgZXhjZXB0OgorICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgIHByaW50KCJFeGNlcHRpb24gaW4gdXNlciBjb2RlOiIpCiAgICAgICAgICAgIHByaW50KCItIio2MCkKICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YyhmaWxlPXN5cy5zdGRvdXQpCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90cmFjZW1hbGxvYy5yc3QgYi9Eb2MvbGlicmFyeS90cmFjZW1hbGxvYy5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q2MmU1NQotLS0gL2Rldi9udWxsCisrKyBiL0RvYy9saWJyYXJ5L3RyYWNlbWFsbG9jLnJzdApAQCAtMCwwICsxLDYzNCBAQAorOm1vZDpgdHJhY2VtYWxsb2NgIC0tLSBUcmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKy4uIG1vZHVsZTo6IHRyYWNlbWFsbG9jCisgICA6c3lub3BzaXM6IFRyYWNlIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK1RoZSB0cmFjZW1hbGxvYyBtb2R1bGUgaXMgYSBkZWJ1ZyB0b29sIHRvIHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5CitQeXRob24uIEl0IHByb3ZpZGVzIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisKKyogVHJhY2ViYWNrIHdoZXJlIGFuIG9iamVjdCB3YXMgYWxsb2NhdGVkCisqIFN0YXRpc3RpY3Mgb24gYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MgcGVyIGZpbGVuYW1lIGFuZCBwZXIgbGluZSBudW1iZXI6CisgIHRvdGFsIHNpemUsIG51bWJlciBhbmQgYXZlcmFnZSBzaXplIG9mIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzCisqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIHNuYXBzaG90cyB0byBkZXRlY3QgbWVtb3J5IGxlYWtzCisKK1RvIHRyYWNlIG1vc3QgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLCB0aGUgbW9kdWxlIHNob3VsZCBiZSBzdGFydGVkCithcyBlYXJseSBhcyBwb3NzaWJsZSBieSBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQWVRIT05UUkFDRU1BTExPQ2AgZW52aXJvbm1lbnQKK3ZhcmlhYmxlIHRvIGBgMWBgLCBvciBieSB1c2luZyA6b3B0aW9uOmAtWGAgYGB0cmFjZW1hbGxvY2BgIGNvbW1hbmQgbGluZQorb3B0aW9uLiBUaGUgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkIGF0IHJ1bnRpbWUgdG8KK3N0YXJ0IHRyYWNpbmcgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworQnkgZGVmYXVsdCwgYSB0cmFjZSBvZiBhbiBhbGxvY2F0ZWQgbWVtb3J5IGJsb2NrIG9ubHkgc3RvcmVzIHRoZSBtb3N0IHJlY2VudAorZnJhbWUgKDEgZnJhbWUpLiBUbyBzdG9yZSAyNSBmcmFtZXMgYXQgc3RhcnR1cDogc2V0IHRoZQorOmVudnZhcjpgUFlUSE9OVFJBQ0VNQUxMT0NgIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGBgMjVgYCwgb3IgdXNlIHRoZQorOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2M9MjVgYCBjb21tYW5kIGxpbmUgb3B0aW9uLgorCisKK0V4YW1wbGVzCistLS0tLS0tLQorCitEaXNwbGF5IHRoZSB0b3AgMTAKK15eXl5eXl5eXl5eXl5eXl5eXgorCitEaXNwbGF5IHRoZSAxMCBmaWxlcyBhbGxvY2F0aW5nIHRoZSBtb3N0IG1lbW9yeTo6CisKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKworICAgIHRyYWNlbWFsbG9jLnN0YXJ0KCkKKworICAgICMgLi4uIHJ1biB5b3VyIGFwcGxpY2F0aW9uIC4uLgorCisgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICB0b3Bfc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdsaW5lbm8nKQorCisgICAgcHJpbnQoIlsgVG9wIDEwIF0iKQorICAgIGZvciBzdGF0IGluIHRvcF9zdGF0c1s6MTBdOgorICAgICAgICBwcmludChzdGF0KQorCisKK0V4YW1wbGUgb2Ygb3V0cHV0IG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZTo6CisKKyAgICBbIFRvcCAxMCBdCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46NzE2OiBzaXplPTQ4NTUgS2lCLCBjb3VudD0zOTMyOCwgYXZlcmFnZT0xMjYgQgorICAgIDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+OjI4NDogc2l6ZT01MjEgS2lCLCBjb3VudD0zMTk5LCBhdmVyYWdlPTE2NyBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2NvbGxlY3Rpb25zL19faW5pdF9fLnB5OjM2ODogc2l6ZT0yNDQgS2lCLCBjb3VudD0yMzE1LCBhdmVyYWdlPTEwOCBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VuaXR0ZXN0L2Nhc2UucHk6MzgxOiBzaXplPTE4NSBLaUIsIGNvdW50PTc3OSwgYXZlcmFnZT0yNDMgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC91bml0dGVzdC9jYXNlLnB5OjQwMjogc2l6ZT0xNTQgS2lCLCBjb3VudD0zNzgsIGF2ZXJhZ2U9NDE2IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvYWJjLnB5OjEzMzogc2l6ZT04OC43IEtpQiwgY291bnQ9MzQ3LCBhdmVyYWdlPTI2MiBCCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46MTQ0Njogc2l6ZT03MC40IEtpQiwgY291bnQ9OTExLCBhdmVyYWdlPTc5IEIKKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjoxNDU0OiBzaXplPTUyLjAgS2lCLCBjb3VudD0yNSwgYXZlcmFnZT0yMTMxIEIKKyAgICA8c3RyaW5nPjo1OiBzaXplPTQ5LjcgS2lCLCBjb3VudD0xNDgsIGF2ZXJhZ2U9MzQ0IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvc3lzY29uZmlnLnB5OjQxMTogc2l6ZT00OC4wIEtpQiwgY291bnQ9MSwgYXZlcmFnZT00OC4wIEtpQgorCitXZSBjYW4gc2VlIHRoYXQgUHl0aG9uIGxvYWRlZCBgYDQuOCBNaUJgYCBkYXRhIChieXRlY29kZSBhbmQgY29uc3RhbnRzKSBmcm9tCittb2R1bGVzIGFuZCB0aGF0IHRoZSA6bW9kOmBjb2xsZWN0aW9uc2AgbW9kdWxlIGFsbG9jYXRlZCBgYDI0NCBLaUJgYCB0byBidWlsZAorOmNsYXNzOmB+Y29sbGVjdGlvbnMubmFtZWR0dXBsZWAgdHlwZXMuCisKK1NlZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AgZm9yIG1vcmUgb3B0aW9ucy4KKworCitDb21wdXRlIGRpZmZlcmVuY2VzCiteXl5eXl5eXl5eXl5eXl5eXl5eCisKK1Rha2UgdHdvIHNuYXBzaG90cyBhbmQgZGlzcGxheSB0aGUgZGlmZmVyZW5jZXM6OgorCisgICAgaW1wb3J0IHRyYWNlbWFsbG9jCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoKQorICAgICMgLi4uIHN0YXJ0IHlvdXIgYXBwbGljYXRpb24gLi4uCisKKyAgICBzbmFwc2hvdDEgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICAjIC4uLiBjYWxsIHRoZSBmdW5jdGlvbiBsZWFraW5nIG1lbW9yeSAuLi4KKyAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKworICAgIHRvcF9zdGF0cyA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90MSwgJ2xpbmVubycpCisKKyAgICBwcmludCgiWyBUb3AgMTAgZGlmZmVyZW5jZXMgXSIpCisgICAgZm9yIHN0YXQgaW4gdG9wX3N0YXRzWzoxMF06CisgICAgICAgIHByaW50KHN0YXQpCisKK0V4YW1wbGUgb2Ygb3V0cHV0IGJlZm9yZS9hZnRlciBydW5uaW5nIHNvbWUgdGVzdHMgb2YgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlOjoKKworICAgIFsgVG9wIDEwIGRpZmZlcmVuY2VzIF0KKyAgICA8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPjo3MTY6IHNpemU9ODE3MyBLaUIgKCs0NDI4IEtpQiksIGNvdW50PTcxMzMyICgrMzkzNjkpLCBhdmVyYWdlPTExNyBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L2xpbmVjYWNoZS5weToxMjc6IHNpemU9OTQwIEtpQiAoKzk0MCBLaUIpLCBjb3VudD04MTA2ICgrODEwNiksIGF2ZXJhZ2U9MTE5IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvdW5pdHRlc3QvY2FzZS5weTo1NzE6IHNpemU9Mjk4IEtpQiAoKzI5OCBLaUIpLCBjb3VudD01ODkgKCs1ODkpLCBhdmVyYWdlPTUxOSBCCisgICAgPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD46Mjg0OiBzaXplPTEwMDUgS2lCICgrMTY2IEtpQiksIGNvdW50PTc0MjMgKCsxNTI2KSwgYXZlcmFnZT0xMzkgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9taW1ldHlwZXMucHk6MjE3OiBzaXplPTExMiBLaUIgKCsxMTIgS2lCKSwgY291bnQ9MTMzNCAoKzEzMzQpLCBhdmVyYWdlPTg2IEIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvaHR0cC9zZXJ2ZXIucHk6ODQ4OiBzaXplPTk2LjAgS2lCICgrOTYuMCBLaUIpLCBjb3VudD0xICgrMSksIGF2ZXJhZ2U9OTYuMCBLaUIKKyAgICAvdXNyL2xpYi9weXRob24zLjQvaW5zcGVjdC5weToxNDY1OiBzaXplPTgzLjUgS2lCICgrODMuNSBLaUIpLCBjb3VudD0xMDkgKCsxMDkpLCBhdmVyYWdlPTc4NCBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VuaXR0ZXN0L21vY2sucHk6NDkxOiBzaXplPTc3LjcgS2lCICgrNzcuNyBLaUIpLCBjb3VudD0xNDMgKCsxNDMpLCBhdmVyYWdlPTU1NyBCCisgICAgL3Vzci9saWIvcHl0aG9uMy40L3VybGxpYi9wYXJzZS5weTo0NzY6IHNpemU9NzEuOCBLaUIgKCs3MS44IEtpQiksIGNvdW50PTk2OSAoKzk2OSksIGF2ZXJhZ2U9NzYgQgorICAgIC91c3IvbGliL3B5dGhvbjMuNC9jb250ZXh0bGliLnB5OjM4OiBzaXplPTY3LjIgS2lCICgrNjcuMiBLaUIpLCBjb3VudD0xMjYgKCsxMjYpLCBhdmVyYWdlPTU0NiBCCisKK1dlIGNhbiBzZWUgdGhhdCBQeXRob24gaGFzIGxvYWRlZCBgYDguMiBNaUJgYCBvZiBtb2R1bGUgZGF0YSAoYnl0ZWNvZGUgYW5kCitjb25zdGFudHMpLCBhbmQgdGhhdCB0aGlzIGlzIGBgNC40IE1pQmBgIG1vcmUgdGhhbiBoYWQgYmVlbiBsb2FkZWQgYmVmb3JlIHRoZQordGVzdHMsIHdoZW4gdGhlIHByZXZpb3VzIHNuYXBzaG90IHdhcyB0YWtlbi4gU2ltaWxhcmx5LCB0aGUgOm1vZDpgbGluZWNhY2hlYAorbW9kdWxlIGhhcyBjYWNoZWQgYGA5NDAgS2lCYGAgb2YgUHl0aG9uIHNvdXJjZSBjb2RlIHRvIGZvcm1hdCB0cmFjZWJhY2tzLCBhbGwKK29mIGl0IHNpbmNlIHRoZSBwcmV2aW91cyBzbmFwc2hvdC4KKworSWYgdGhlIHN5c3RlbSBoYXMgbGl0dGxlIGZyZWUgbWVtb3J5LCBzbmFwc2hvdHMgY2FuIGJlIHdyaXR0ZW4gb24gZGlzayB1c2luZwordGhlIDptZXRoOmBTbmFwc2hvdC5kdW1wYCBtZXRob2QgdG8gYW5hbHl6ZSB0aGUgc25hcHNob3Qgb2ZmbGluZS4gVGhlbiB1c2UgdGhlCis6bWV0aDpgU25hcHNob3QubG9hZGAgbWV0aG9kIHJlbG9hZCB0aGUgc25hcHNob3QuCisKKworR2V0IHRoZSB0cmFjZWJhY2sgb2YgYSBtZW1vcnkgYmxvY2sKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eCisKK0NvZGUgdG8gZGlzcGxheSB0aGUgdHJhY2ViYWNrIG9mIHRoZSBiaWdnZXN0IG1lbW9yeSBibG9jazo6CisKKyAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKworICAgICMgU3RvcmUgMjUgZnJhbWVzCisgICAgdHJhY2VtYWxsb2Muc3RhcnQoMjUpCisKKyAgICAjIC4uLiBydW4geW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgdG9wX3N0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygndHJhY2ViYWNrJykKKworICAgICMgcGljayB0aGUgYmlnZ2VzdCBtZW1vcnkgYmxvY2sKKyAgICBzdGF0ID0gdG9wX3N0YXRzWzBdCisgICAgcHJpbnQoIiVzIG1lbW9yeSBibG9ja3M6ICUuMWYgS2lCIiAlIChzdGF0LmNvdW50LCBzdGF0LnNpemUgLyAxMDI0KSkKKyAgICBmb3IgbGluZSBpbiBzdGF0LnRyYWNlYmFjay5mb3JtYXQoKToKKyAgICAgICAgcHJpbnQobGluZSkKKworRXhhbXBsZSBvZiBvdXRwdXQgb2YgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlICh0cmFjZWJhY2sgbGltaXRlZCB0byAyNSBmcmFtZXMpOjoKKworICAgIDkwMyBtZW1vcnkgYmxvY2tzOiA4NzAuMSBLaUIKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA3MTYKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxMDM2CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgOTM0CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTA2OAorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDYxOQorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDE1ODEKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxNjE0CisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvZG9jdGVzdC5weSIsIGxpbmUgMTAxCisgICAgICAgIGltcG9ydCBwZGIKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAyODQKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSA5MzgKKyAgICAgIEZpbGUgIjxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+IiwgbGluZSAxMDY4CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgNjE5CisgICAgICBGaWxlICI8ZnJvemVuIGltcG9ydGxpYi5fYm9vdHN0cmFwPiIsIGxpbmUgMTU4MQorICAgICAgRmlsZSAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iLCBsaW5lIDE2MTQKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkiLCBsaW5lIDE3MjgKKyAgICAgICAgaW1wb3J0IGRvY3Rlc3QKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkiLCBsaW5lIDIxCisgICAgICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QocGlja2xldG9vbHMpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9yZWdydGVzdC5weSIsIGxpbmUgMTI3NgorICAgICAgICB0ZXN0X3J1bm5lcigpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9yZWdydGVzdC5weSIsIGxpbmUgOTc2CisgICAgICAgIGRpc3BsYXlfZmFpbHVyZT1ub3QgdmVyYm9zZSkKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L3JlZ3J0ZXN0LnB5IiwgbGluZSA3NjEKKyAgICAgICAgbWF0Y2hfdGVzdHM9bnMubWF0Y2hfdGVzdHMpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvdGVzdC9yZWdydGVzdC5weSIsIGxpbmUgMTU2MworICAgICAgICBtYWluKCkKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC90ZXN0L19fbWFpbl9fLnB5IiwgbGluZSAzCisgICAgICAgIHJlZ3J0ZXN0Lm1haW5faW5fdGVtcF9jd2QoKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3J1bnB5LnB5IiwgbGluZSA3MworICAgICAgICBleGVjKGNvZGUsIHJ1bl9nbG9iYWxzKQorICAgICAgRmlsZSAiL3Vzci9saWIvcHl0aG9uMy40L3J1bnB5LnB5IiwgbGluZSAxNjAKKyAgICAgICAgIl9fbWFpbl9fIiwgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpCisKK1dlIGNhbiBzZWUgdGhhdCB0aGUgbW9zdCBtZW1vcnkgd2FzIGFsbG9jYXRlZCBpbiB0aGUgOm1vZDpgaW1wb3J0bGliYCBtb2R1bGUgdG8KK2xvYWQgZGF0YSAoYnl0ZWNvZGUgYW5kIGNvbnN0YW50cykgZnJvbSBtb2R1bGVzOiBgYDg3MCBLaUJgYC4gVGhlIHRyYWNlYmFjayBpcword2hlcmUgdGhlIDptb2Q6YGltcG9ydGxpYmAgbG9hZGVkIGRhdGEgbW9zdCByZWNlbnRseTogb24gdGhlIGBgaW1wb3J0IHBkYmBgCitsaW5lIG9mIHRoZSA6bW9kOmBkb2N0ZXN0YCBtb2R1bGUuIFRoZSB0cmFjZWJhY2sgbWF5IGNoYW5nZSBpZiBhIG5ldyBtb2R1bGUgaXMKK2xvYWRlZC4KKworCitQcmV0dHkgdG9wCiteXl5eXl5eXl5eCisKK0NvZGUgdG8gZGlzcGxheSB0aGUgMTAgbGluZXMgYWxsb2NhdGluZyB0aGUgbW9zdCBtZW1vcnkgd2l0aCBhIHByZXR0eSBvdXRwdXQsCitpZ25vcmluZyBgYDxmcm96ZW4gaW1wb3J0bGliLl9ib290c3RyYXA+YGAgYW5kIGBgPHVua25vd24+YGAgZmlsZXM6OgorCisgICAgaW1wb3J0IGxpbmVjYWNoZQorICAgIGltcG9ydCBvcworICAgIGltcG9ydCB0cmFjZW1hbGxvYworCisgICAgZGVmIGRpc3BsYXlfdG9wKHNuYXBzaG90LCBncm91cF9ieT0nbGluZW5vJywgbGltaXQ9MTApOgorICAgICAgICBzbmFwc2hvdCA9IHNuYXBzaG90LmZpbHRlcl90cmFjZXMoKAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiPGZyb3plbiBpbXBvcnRsaWIuX2Jvb3RzdHJhcD4iKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIpLAorICAgICAgICApKQorICAgICAgICB0b3Bfc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKGdyb3VwX2J5KQorCisgICAgICAgIHByaW50KCJUb3AgJXMgbGluZXMiICUgbGltaXQpCisgICAgICAgIGZvciBpbmRleCwgc3RhdCBpbiBlbnVtZXJhdGUodG9wX3N0YXRzWzpsaW1pdF0sIDEpOgorICAgICAgICAgICAgZnJhbWUgPSBzdGF0LnRyYWNlYmFja1swXQorICAgICAgICAgICAgIyByZXBsYWNlICIvcGF0aC90by9tb2R1bGUvZmlsZS5weSIgd2l0aCAibW9kdWxlL2ZpbGUucHkiCisgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnNlcC5qb2luKGZyYW1lLmZpbGVuYW1lLnNwbGl0KG9zLnNlcClbLTI6XSkKKyAgICAgICAgICAgIHByaW50KCIjJXM6ICVzOiVzOiAlLjFmIEtpQiIKKyAgICAgICAgICAgICAgICAgICUgKGluZGV4LCBmaWxlbmFtZSwgZnJhbWUubGluZW5vLCBzdGF0LnNpemUgLyAxMDI0KSkKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmcmFtZS5maWxlbmFtZSwgZnJhbWUubGluZW5vKS5zdHJpcCgpCisgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIHByaW50KCcgICAgJXMnICUgbGluZSkKKworICAgICAgICBvdGhlciA9IHRvcF9zdGF0c1tsaW1pdDpdCisgICAgICAgIGlmIG90aGVyOgorICAgICAgICAgICAgc2l6ZSA9IHN1bShzdGF0LnNpemUgZm9yIHN0YXQgaW4gb3RoZXIpCisgICAgICAgICAgICBwcmludCgiJXMgb3RoZXI6ICUuMWYgS2lCIiAlIChsZW4ob3RoZXIpLCBzaXplIC8gMTAyNCkpCisgICAgICAgIHRvdGFsID0gc3VtKHN0YXQuc2l6ZSBmb3Igc3RhdCBpbiB0b3Bfc3RhdHMpCisgICAgICAgIHByaW50KCJUb3RhbCBhbGxvY2F0ZWQgc2l6ZTogJS4xZiBLaUIiICUgKHRvdGFsIC8gMTAyNCkpCisKKyAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisKKyAgICAjIC4uLiBydW4geW91ciBhcHBsaWNhdGlvbiAuLi4KKworICAgIHNuYXBzaG90ID0gdHJhY2VtYWxsb2MudGFrZV9zbmFwc2hvdCgpCisgICAgZGlzcGxheV90b3Aoc25hcHNob3QpCisKK0V4YW1wbGUgb2Ygb3V0cHV0IG9mIHRoZSBQeXRob24gdGVzdCBzdWl0ZTo6CisKKyAgICBUb3AgMTAgbGluZXMKKyAgICAjMTogTGliL2Jhc2U2NC5weTo0MTQ6IDQxOS44IEtpQgorICAgICAgICBfYjg1Y2hhcnMyID0gWyhhICsgYikgZm9yIGEgaW4gX2I4NWNoYXJzIGZvciBiIGluIF9iODVjaGFyc10KKyAgICAjMjogTGliL2Jhc2U2NC5weTozMDY6IDQxOS44IEtpQgorICAgICAgICBfYTg1Y2hhcnMyID0gWyhhICsgYikgZm9yIGEgaW4gX2E4NWNoYXJzIGZvciBiIGluIF9hODVjaGFyc10KKyAgICAjMzogY29sbGVjdGlvbnMvX19pbml0X18ucHk6MzY4OiAyOTMuNiBLaUIKKyAgICAgICAgZXhlYyhjbGFzc19kZWZpbml0aW9uLCBuYW1lc3BhY2UpCisgICAgIzQ6IExpYi9hYmMucHk6MTMzOiAxMTUuMiBLaUIKKyAgICAgICAgY2xzID0gc3VwZXIoKS5fX25ld19fKG1jbHMsIG5hbWUsIGJhc2VzLCBuYW1lc3BhY2UpCisgICAgIzU6IHVuaXR0ZXN0L2Nhc2UucHk6NTc0OiAxMDMuMSBLaUIKKyAgICAgICAgdGVzdE1ldGhvZCgpCisgICAgIzY6IExpYi9saW5lY2FjaGUucHk6MTI3OiA5NS40IEtpQgorICAgICAgICBsaW5lcyA9IGZwLnJlYWRsaW5lcygpCisgICAgIzc6IHVybGxpYi9wYXJzZS5weTo0NzY6IDcxLjggS2lCCisgICAgICAgIGZvciBhIGluIF9oZXhkaWcgZm9yIGIgaW4gX2hleGRpZ30KKyAgICAjODogPHN0cmluZz46NTogNjIuMCBLaUIKKyAgICAjOTogTGliL193ZWFrcmVmc2V0LnB5OjM3OiA2MC4wIEtpQgorICAgICAgICBzZWxmLmRhdGEgPSBzZXQoKQorICAgICMxMDogTGliL2Jhc2U2NC5weToxNDI6IDU5LjggS2lCCisgICAgICAgIF9iMzJ0YWIyID0gW2EgKyBiIGZvciBhIGluIF9iMzJ0YWIgZm9yIGIgaW4gX2IzMnRhYl0KKyAgICA2MjIwIG90aGVyOiAzNjAyLjggS2lCCisgICAgVG90YWwgYWxsb2NhdGVkIHNpemU6IDUzMDMuMSBLaUIKKworU2VlIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCBmb3IgbW9yZSBvcHRpb25zLgorCisKK0FQSQorLS0tCisKK0Z1bmN0aW9ucworXl5eXl5eXl5eCisKKy4uIGZ1bmN0aW9uOjogY2xlYXJfdHJhY2VzKCkKKworICAgQ2xlYXIgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4KKworICAgU2VlIGFsc28gOmZ1bmM6YHN0b3BgLgorCisKKy4uIGZ1bmN0aW9uOjogZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorCisgICBHZXQgdGhlIHRyYWNlYmFjayB3aGVyZSB0aGUgUHl0aG9uIG9iamVjdCAqb2JqKiB3YXMgYWxsb2NhdGVkLgorICAgUmV0dXJuIGEgOmNsYXNzOmBUcmFjZWJhY2tgIGluc3RhbmNlLCBvciBgYE5vbmVgYCBpZiB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgCisgICBtb2R1bGUgaXMgbm90IHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIGRpZCBub3QgdHJhY2UgdGhlIGFsbG9jYXRpb24gb2YKKyAgIHRoZSBvYmplY3QuCisKKyAgIFNlZSBhbHNvIDpmdW5jOmBnYy5nZXRfcmVmZXJyZXJzYCBhbmQgOmZ1bmM6YHN5cy5nZXRzaXplb2ZgIGZ1bmN0aW9ucy4KKworCisuLiBmdW5jdGlvbjo6IGdldF90cmFjZWJhY2tfbGltaXQoKQorCisgICBHZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyBzdG9yZWQgaW4gdGhlIHRyYWNlYmFjayBvZiBhIHRyYWNlLgorCisgICBUaGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSBtdXN0IGJlIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zIHRvCisgICBnZXQgdGhlIGxpbWl0LCBvdGhlcndpc2UgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworICAgVGhlIGxpbWl0IGlzIHNldCBieSB0aGUgOmZ1bmM6YHN0YXJ0YCBmdW5jdGlvbi4KKworCisuLiBmdW5jdGlvbjo6IGdldF90cmFjZWRfbWVtb3J5KCkKKworICAgR2V0IHRoZSBjdXJyZW50IHNpemUgYW5kIHBlYWsgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIHRyYWNlZCBieSB0aGUKKyAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgYXMgYSB0dXBsZTogYGAoY3VycmVudDogaW50LCBwZWFrOiBpbnQpYGAuCisKKworLi4gZnVuY3Rpb246OiBnZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkKKworICAgR2V0IHRoZSBtZW1vcnkgdXNhZ2UgaW4gYnl0ZXMgb2YgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgdXNlZCB0byBzdG9yZQorICAgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MuCisgICBSZXR1cm4gYW4gOmNsYXNzOmBpbnRgLgorCisKKy4uIGZ1bmN0aW9uOjogaXNfdHJhY2luZygpCisKKyAgICBgYFRydWVgYCBpZiB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZSBpcyB0cmFjaW5nIFB5dGhvbiBtZW1vcnkKKyAgICBhbGxvY2F0aW9ucywgYGBGYWxzZWBgIG90aGVyd2lzZS4KKworICAgIFNlZSBhbHNvIDpmdW5jOmBzdGFydGAgYW5kIDpmdW5jOmBzdG9wYCBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBzdGFydChuZnJhbWU6IGludD0xKQorCisgICBTdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnM6IGluc3RhbGwgaG9va3Mgb24gUHl0aG9uIG1lbW9yeQorICAgYWxsb2NhdG9ycy4gQ29sbGVjdGVkIHRyYWNlYmFja3Mgb2YgdHJhY2VzIHdpbGwgYmUgbGltaXRlZCB0byAqbmZyYW1lKgorICAgZnJhbWVzLiBCeSBkZWZhdWx0LCBhIHRyYWNlIG9mIGEgbWVtb3J5IGJsb2NrIG9ubHkgc3RvcmVzIHRoZSBtb3N0IHJlY2VudAorICAgZnJhbWU6IHRoZSBsaW1pdCBpcyBgYDFgYC4gKm5mcmFtZSogbXVzdCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIGBgMWBgLgorCisgICBTdG9yaW5nIG1vcmUgdGhhbiBgYDFgYCBmcmFtZSBpcyBvbmx5IHVzZWZ1bCB0byBjb21wdXRlIHN0YXRpc3RpY3MgZ3JvdXBlZAorICAgYnkgYGAndHJhY2ViYWNrJ2BgIG9yIHRvIGNvbXB1dGUgY3VtdWxhdGl2ZSBzdGF0aXN0aWNzOiBzZWUgdGhlCisgICA6bWV0aDpgU25hcHNob3QuY29tcGFyZV90b2AgYW5kIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYCBtZXRob2RzLgorCisgICBTdG9yaW5nIG1vcmUgZnJhbWVzIGluY3JlYXNlcyB0aGUgbWVtb3J5IGFuZCBDUFUgb3ZlcmhlYWQgb2YgdGhlCisgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBVc2UgdGhlIDpmdW5jOmBnZXRfdHJhY2VtYWxsb2NfbWVtb3J5YCBmdW5jdGlvbgorICAgdG8gbWVhc3VyZSBob3cgbXVjaCBtZW1vcnkgaXMgdXNlZCBieSB0aGUgOm1vZDpgdHJhY2VtYWxsb2NgIG1vZHVsZS4KKworICAgVGhlIDplbnZ2YXI6YFBZVEhPTlRSQUNFTUFMTE9DYCBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgKGBgUFlUSE9OVFJBQ0VNQUxMT0M9TkZSQU1FYGApIGFuZCB0aGUgOm9wdGlvbjpgLVhgIGBgdHJhY2VtYWxsb2M9TkZSQU1FYGAKKyAgIGNvbW1hbmQgbGluZSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gc3RhcnQgdHJhY2luZyBhdCBzdGFydHVwLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc3RvcGAsIDpmdW5jOmBpc190cmFjaW5nYCBhbmQgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgCisgICBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiBzdG9wKCkKKworICAgU3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnM6IHVuaW5zdGFsbCBob29rcyBvbiBQeXRob24gbWVtb3J5CisgICBhbGxvY2F0b3JzLiBBbHNvIGNsZWFycyBhbGwgcHJldmlvdXNseSBjb2xsZWN0ZWQgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MKKyAgIGFsbG9jYXRlZCBieSBQeXRob24uCisKKyAgIENhbGwgOmZ1bmM6YHRha2Vfc25hcHNob3RgIGZ1bmN0aW9uIHRvIHRha2UgYSBzbmFwc2hvdCBvZiB0cmFjZXMgYmVmb3JlCisgICBjbGVhcmluZyB0aGVtLgorCisgICBTZWUgYWxzbyA6ZnVuYzpgc3RhcnRgLCA6ZnVuYzpgaXNfdHJhY2luZ2AgYW5kIDpmdW5jOmBjbGVhcl90cmFjZXNgCisgICBmdW5jdGlvbnMuCisKKworLi4gZnVuY3Rpb246OiB0YWtlX3NuYXBzaG90KCkKKworICAgVGFrZSBhIHNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIFJldHVybiBhIG5ldworICAgOmNsYXNzOmBTbmFwc2hvdGAgaW5zdGFuY2UuCisKKyAgIFRoZSBzbmFwc2hvdCBkb2VzIG5vdCBpbmNsdWRlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJlZm9yZSB0aGUKKyAgIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgc3RhcnRlZCB0byB0cmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMuCisKKyAgIFRyYWNlYmFja3Mgb2YgdHJhY2VzIGFyZSBsaW1pdGVkIHRvIDpmdW5jOmBnZXRfdHJhY2ViYWNrX2xpbWl0YCBmcmFtZXMuIFVzZQorICAgdGhlICpuZnJhbWUqIHBhcmFtZXRlciBvZiB0aGUgOmZ1bmM6YHN0YXJ0YCBmdW5jdGlvbiB0byBzdG9yZSBtb3JlIGZyYW1lcy4KKworICAgVGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBtb2R1bGUgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0byB0YWtlIGEKKyAgIHNuYXBzaG90LCBzZWUgdGhlIDpmdW5jOmBzdGFydGAgZnVuY3Rpb24uCisKKyAgIFNlZSBhbHNvIHRoZSA6ZnVuYzpgZ2V0X29iamVjdF90cmFjZWJhY2tgIGZ1bmN0aW9uLgorCisKK0ZpbHRlcgorXl5eXl5eCisKKy4uIGNsYXNzOjogRmlsdGVyKGluY2x1c2l2ZTogYm9vbCwgZmlsZW5hbWVfcGF0dGVybjogc3RyLCBsaW5lbm86IGludD1Ob25lLCBhbGxfZnJhbWVzOiBib29sPUZhbHNlKQorCisgICBGaWx0ZXIgb24gdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MuCisKKyAgIFNlZSB0aGUgOmZ1bmM6YGZubWF0Y2guZm5tYXRjaGAgZnVuY3Rpb24gZm9yIHRoZSBzeW50YXggb2YKKyAgICpmaWxlbmFtZV9wYXR0ZXJuKi4gVGhlIGBgJy5weWMnYGAgYW5kIGBgJy5weW8nYGAgZmlsZSBleHRlbnNpb25zIGFyZQorICAgcmVwbGFjZWQgd2l0aCBgYCcucHknYGAuCisKKyAgIEV4YW1wbGVzOgorCisgICAqIGBgRmlsdGVyKFRydWUsIHN1YnByb2Nlc3MuX19maWxlX18pYGAgb25seSBpbmNsdWRlcyB0cmFjZXMgb2YgdGhlCisgICAgIDptb2Q6YHN1YnByb2Nlc3NgIG1vZHVsZQorICAgKiBgYEZpbHRlcihGYWxzZSwgdHJhY2VtYWxsb2MuX19maWxlX18pYGAgZXhjbHVkZXMgdHJhY2VzIG9mIHRoZQorICAgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlCisgICAqIGBgRmlsdGVyKEZhbHNlLCAiPHVua25vd24+IilgYCBleGNsdWRlcyBlbXB0eSB0cmFjZWJhY2tzCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGluY2x1c2l2ZQorCisgICAgICBJZiAqaW5jbHVzaXZlKiBpcyBgYFRydWVgYCAoaW5jbHVkZSksIG9ubHkgdHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQKKyAgICAgIGluIGEgZmlsZSB3aXRoIGEgbmFtZSBtYXRjaGluZyA6YXR0cjpgZmlsZW5hbWVfcGF0dGVybmAgYXQgbGluZSBudW1iZXIKKyAgICAgIDphdHRyOmBsaW5lbm9gLgorCisgICAgICBJZiAqaW5jbHVzaXZlKiBpcyBgYEZhbHNlYGAgKGV4Y2x1ZGUpLCBpZ25vcmUgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgaW4KKyAgICAgIGEgZmlsZSB3aXRoIGEgbmFtZSBtYXRjaGluZyA6YXR0cjpgZmlsZW5hbWVfcGF0dGVybmAgYXQgbGluZSBudW1iZXIKKyAgICAgIDphdHRyOmBsaW5lbm9gLgorCisgICAuLiBhdHRyaWJ1dGU6OiBsaW5lbm8KKworICAgICAgTGluZSBudW1iZXIgKGBgaW50YGApIG9mIHRoZSBmaWx0ZXIuIElmICpsaW5lbm8qIGlzIGBgTm9uZWBgLCB0aGUgZmlsdGVyCisgICAgICBtYXRjaGVzIGFueSBsaW5lIG51bWJlci4KKworICAgLi4gYXR0cmlidXRlOjogZmlsZW5hbWVfcGF0dGVybgorCisgICAgICBGaWxlbmFtZSBwYXR0ZXJuIG9mIHRoZSBmaWx0ZXIgKGBgc3RyYGApLgorCisgICAuLiBhdHRyaWJ1dGU6OiBhbGxfZnJhbWVzCisKKyAgICAgIElmICphbGxfZnJhbWVzKiBpcyBgYFRydWVgYCwgYWxsIGZyYW1lcyBvZiB0aGUgdHJhY2ViYWNrIGFyZSBjaGVja2VkLiBJZgorICAgICAgKmFsbF9mcmFtZXMqIGlzIGBgRmFsc2VgYCwgb25seSB0aGUgbW9zdCByZWNlbnQgZnJhbWUgaXMgY2hlY2tlZC4KKworICAgICAgVGhpcyBhdHRyaWJ1dGUgaGFzIG5vIGVmZmVjdCBpZiB0aGUgdHJhY2ViYWNrIGxpbWl0IGlzIGBgMWBgLiAgU2VlIHRoZQorICAgICAgOmZ1bmM6YGdldF90cmFjZWJhY2tfbGltaXRgIGZ1bmN0aW9uIGFuZCA6YXR0cjpgU25hcHNob3QudHJhY2ViYWNrX2xpbWl0YAorICAgICAgYXR0cmlidXRlLgorCisKK0ZyYW1lCiteXl5eXgorCisuLiBjbGFzczo6IEZyYW1lCisKKyAgIEZyYW1lIG9mIGEgdHJhY2ViYWNrLgorCisgICBUaGUgOmNsYXNzOmBUcmFjZWJhY2tgIGNsYXNzIGlzIGEgc2VxdWVuY2Ugb2YgOmNsYXNzOmBGcmFtZWAgaW5zdGFuY2VzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBmaWxlbmFtZQorCisgICAgICBGaWxlbmFtZSAoYGBzdHJgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGxpbmVubworCisgICAgICBMaW5lIG51bWJlciAoYGBpbnRgYCkuCisKKworU25hcHNob3QKK15eXl5eXl5eCisKKy4uIGNsYXNzOjogU25hcHNob3QKKworICAgU25hcHNob3Qgb2YgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4KKworICAgVGhlIDpmdW5jOmB0YWtlX3NuYXBzaG90YCBmdW5jdGlvbiBjcmVhdGVzIGEgc25hcHNob3QgaW5zdGFuY2UuCisKKyAgIC4uIG1ldGhvZDo6IGNvbXBhcmVfdG8ob2xkX3NuYXBzaG90OiBTbmFwc2hvdCwgZ3JvdXBfYnk6IHN0ciwgY3VtdWxhdGl2ZTogYm9vbD1GYWxzZSkKKworICAgICAgQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZXMgd2l0aCBhbiBvbGQgc25hcHNob3QuIEdldCBzdGF0aXN0aWNzIGFzIGEgc29ydGVkCisgICAgICBsaXN0IG9mIDpjbGFzczpgU3RhdGlzdGljRGlmZmAgaW5zdGFuY2VzIGdyb3VwZWQgYnkgKmdyb3VwX2J5Ki4KKworICAgICAgU2VlIHRoZSA6bWV0aDpgU25hcHNob3Quc3RhdGlzdGljc2AgbWV0aG9kIGZvciAqZ3JvdXBfYnkqIGFuZCAqY3VtdWxhdGl2ZSoKKyAgICAgIHBhcmFtZXRlcnMuCisKKyAgICAgIFRoZSByZXN1bHQgaXMgc29ydGVkIGZyb20gdGhlIGJpZ2dlc3QgdG8gdGhlIHNtYWxsZXN0IGJ5OiBhYnNvbHV0ZSB2YWx1ZQorICAgICAgb2YgOmF0dHI6YFN0YXRpc3RpY0RpZmYuc2l6ZV9kaWZmYCwgOmF0dHI6YFN0YXRpc3RpY0RpZmYuc2l6ZWAsIGFic29sdXRlCisgICAgICB2YWx1ZSBvZiA6YXR0cjpgU3RhdGlzdGljRGlmZi5jb3VudF9kaWZmYCwgOmF0dHI6YFN0YXRpc3RpYy5jb3VudGAgYW5kCisgICAgICB0aGVuIGJ5IDphdHRyOmBTdGF0aXN0aWNEaWZmLnRyYWNlYmFja2AuCisKKworICAgLi4gbWV0aG9kOjogZHVtcChmaWxlbmFtZSkKKworICAgICAgV3JpdGUgdGhlIHNuYXBzaG90IGludG8gYSBmaWxlLgorCisgICAgICBVc2UgOm1ldGg6YGxvYWRgIHRvIHJlbG9hZCB0aGUgc25hcHNob3QuCisKKworICAgLi4gbWV0aG9kOjogZmlsdGVyX3RyYWNlcyhmaWx0ZXJzKQorCisgICAgICBDcmVhdGUgYSBuZXcgOmNsYXNzOmBTbmFwc2hvdGAgaW5zdGFuY2Ugd2l0aCBhIGZpbHRlcmVkIDphdHRyOmB0cmFjZXNgCisgICAgICBzZXF1ZW5jZSwgKmZpbHRlcnMqIGlzIGEgbGlzdCBvZiA6Y2xhc3M6YEZpbHRlcmAgaW5zdGFuY2VzLiAgSWYgKmZpbHRlcnMqCisgICAgICBpcyBhbiBlbXB0eSBsaXN0LCByZXR1cm4gYSBuZXcgOmNsYXNzOmBTbmFwc2hvdGAgaW5zdGFuY2Ugd2l0aCBhIGNvcHkgb2YKKyAgICAgIHRoZSB0cmFjZXMuCisKKyAgICAgIEFsbCBpbmNsdXNpdmUgZmlsdGVycyBhcmUgYXBwbGllZCBhdCBvbmNlLCBhIHRyYWNlIGlzIGlnbm9yZWQgaWYgbm8KKyAgICAgIGluY2x1c2l2ZSBmaWx0ZXJzIG1hdGNoIGl0LiBBIHRyYWNlIGlzIGlnbm9yZWQgaWYgYXQgbGVhc3Qgb25lIGV4Y2x1c2l2ZQorICAgICAgZmlsdGVyIG1hdGNoZXMgaXQuCisKKworICAgLi4gY2xhc3NtZXRob2Q6OiBsb2FkKGZpbGVuYW1lKQorCisgICAgICBMb2FkIGEgc25hcHNob3QgZnJvbSBhIGZpbGUuCisKKyAgICAgIFNlZSBhbHNvIDptZXRoOmBkdW1wYC4KKworCisgICAuLiBtZXRob2Q6OiBzdGF0aXN0aWNzKGdyb3VwX2J5OiBzdHIsIGN1bXVsYXRpdmU6IGJvb2w9RmFsc2UpCisKKyAgICAgIEdldCBzdGF0aXN0aWNzIGFzIGEgc29ydGVkIGxpc3Qgb2YgOmNsYXNzOmBTdGF0aXN0aWNgIGluc3RhbmNlcyBncm91cGVkCisgICAgICBieSAqZ3JvdXBfYnkqOgorCisgICAgICA9PT09PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgZ3JvdXBfYnkgICAgICAgICAgICAgICBkZXNjcmlwdGlvbgorICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgIGBgJ2ZpbGVuYW1lJ2BgICAgICAgICAgZmlsZW5hbWUKKyAgICAgIGBgJ2xpbmVubydgYCAgICAgICAgICAgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyCisgICAgICBgYCd0cmFjZWJhY2snYGAgICAgICAgIHRyYWNlYmFjaworICAgICAgPT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgSWYgKmN1bXVsYXRpdmUqIGlzIGBgVHJ1ZWBgLCBjdW11bGF0ZSBzaXplIGFuZCBjb3VudCBvZiBtZW1vcnkgYmxvY2tzIG9mCisgICAgICBhbGwgZnJhbWVzIG9mIHRoZSB0cmFjZWJhY2sgb2YgYSB0cmFjZSwgbm90IG9ubHkgdGhlIG1vc3QgcmVjZW50IGZyYW1lLgorICAgICAgVGhlIGN1bXVsYXRpdmUgbW9kZSBjYW4gb25seSBiZSB1c2VkIHdpdGggKmdyb3VwX2J5KiBlcXVhbHMgdG8KKyAgICAgIGBgJ2ZpbGVuYW1lJ2BgIGFuZCBgYCdsaW5lbm8nYGAuCisKKyAgICAgIFRoZSByZXN1bHQgaXMgc29ydGVkIGZyb20gdGhlIGJpZ2dlc3QgdG8gdGhlIHNtYWxsZXN0IGJ5OgorICAgICAgOmF0dHI6YFN0YXRpc3RpYy5zaXplYCwgOmF0dHI6YFN0YXRpc3RpYy5jb3VudGAgYW5kIHRoZW4gYnkKKyAgICAgIDphdHRyOmBTdGF0aXN0aWMudHJhY2ViYWNrYC4KKworCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZWJhY2tfbGltaXQKKworICAgICAgTWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiB0aGUgdHJhY2ViYWNrIG9mIDphdHRyOmB0cmFjZXNgOgorICAgICAgcmVzdWx0IG9mIHRoZSA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgd2hlbiB0aGUgc25hcHNob3Qgd2FzIHRha2VuLgorCisgICAuLiBhdHRyaWJ1dGU6OiB0cmFjZXMKKworICAgICAgVHJhY2VzIG9mIGFsbCBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob246IHNlcXVlbmNlIG9mCisgICAgICA6Y2xhc3M6YFRyYWNlYCBpbnN0YW5jZXMuCisKKyAgICAgIFRoZSBzZXF1ZW5jZSBoYXMgYW4gdW5kZWZpbmVkIG9yZGVyLiBVc2UgdGhlIDptZXRoOmBTbmFwc2hvdC5zdGF0aXN0aWNzYAorICAgICAgbWV0aG9kIHRvIGdldCBhIHNvcnRlZCBsaXN0IG9mIHN0YXRpc3RpY3MuCisKKworU3RhdGlzdGljCiteXl5eXl5eXl4KKworLi4gY2xhc3M6OiBTdGF0aXN0aWMKKworICAgU3RhdGlzdGljIG9uIG1lbW9yeSBhbGxvY2F0aW9ucy4KKworICAgOmZ1bmM6YFNuYXBzaG90LnN0YXRpc3RpY3NgIHJldHVybnMgYSBsaXN0IG9mIDpjbGFzczpgU3RhdGlzdGljYCBpbnN0YW5jZXMuCisKKyAgIFNlZSBhbHNvIHRoZSA6Y2xhc3M6YFN0YXRpc3RpY0RpZmZgIGNsYXNzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBjb3VudAorCisgICAgICBOdW1iZXIgb2YgbWVtb3J5IGJsb2NrcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNpemUKKworICAgICAgVG90YWwgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIGluIGJ5dGVzIChgYGludGBgKS4KKworICAgLi4gYXR0cmlidXRlOjogdHJhY2ViYWNrCisKKyAgICAgIFRyYWNlYmFjayB3aGVyZSB0aGUgbWVtb3J5IGJsb2NrIHdhcyBhbGxvY2F0ZWQsIDpjbGFzczpgVHJhY2ViYWNrYAorICAgICAgaW5zdGFuY2UuCisKKworU3RhdGlzdGljRGlmZgorXl5eXl5eXl5eXl5eXgorCisuLiBjbGFzczo6IFN0YXRpc3RpY0RpZmYKKworICAgU3RhdGlzdGljIGRpZmZlcmVuY2Ugb24gbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gYW4gb2xkIGFuZCBhIG5ldworICAgOmNsYXNzOmBTbmFwc2hvdGAgaW5zdGFuY2UuCisKKyAgIDpmdW5jOmBTbmFwc2hvdC5jb21wYXJlX3RvYCByZXR1cm5zIGEgbGlzdCBvZiA6Y2xhc3M6YFN0YXRpc3RpY0RpZmZgCisgICBpbnN0YW5jZXMuIFNlZSBhbHNvIHRoZSA6Y2xhc3M6YFN0YXRpc3RpY2AgY2xhc3MuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvdW50CisKKyAgICAgIE51bWJlciBvZiBtZW1vcnkgYmxvY2tzIGluIHRoZSBuZXcgc25hcHNob3QgKGBgaW50YGApOiBgYDBgYCBpZgorICAgICAgdGhlIG1lbW9yeSBibG9ja3MgaGF2ZSBiZWVuIHJlbGVhc2VkIGluIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGNvdW50X2RpZmYKKworICAgICAgRGlmZmVyZW5jZSBvZiBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBiZXR3ZWVuIHRoZSBvbGQgYW5kIHRoZSBuZXcKKyAgICAgIHNuYXBzaG90cyAoYGBpbnRgYCk6IGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbiBhbGxvY2F0ZWQgaW4KKyAgICAgIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNpemUKKworICAgICAgVG90YWwgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIGluIGJ5dGVzIGluIHRoZSBuZXcgc25hcHNob3QgKGBgaW50YGApOgorICAgICAgYGAwYGAgaWYgdGhlIG1lbW9yeSBibG9ja3MgaGF2ZSBiZWVuIHJlbGVhc2VkIGluIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHNpemVfZGlmZgorCisgICAgICBEaWZmZXJlbmNlIG9mIHRvdGFsIHNpemUgb2YgbWVtb3J5IGJsb2NrcyBpbiBieXRlcyBiZXR3ZWVuIHRoZSBvbGQgYW5kCisgICAgICB0aGUgbmV3IHNuYXBzaG90cyAoYGBpbnRgYCk6IGBgMGBgIGlmIHRoZSBtZW1vcnkgYmxvY2tzIGhhdmUgYmVlbgorICAgICAgYWxsb2NhdGVkIGluIHRoZSBuZXcgc25hcHNob3QuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9ja3Mgd2VyZSBhbGxvY2F0ZWQsIDpjbGFzczpgVHJhY2ViYWNrYAorICAgICAgaW5zdGFuY2UuCisKKworVHJhY2UKK15eXl5eCisKKy4uIGNsYXNzOjogVHJhY2UKKworICAgVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2suCisKKyAgIFRoZSA6YXR0cjpgU25hcHNob3QudHJhY2VzYCBhdHRyaWJ1dGUgaXMgYSBzZXF1ZW5jZSBvZiA6Y2xhc3M6YFRyYWNlYAorICAgaW5zdGFuY2VzLgorCisgICAuLiBhdHRyaWJ1dGU6OiBzaXplCisKKyAgICAgIFNpemUgb2YgdGhlIG1lbW9yeSBibG9jayBpbiBieXRlcyAoYGBpbnRgYCkuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IHRyYWNlYmFjaworCisgICAgICBUcmFjZWJhY2sgd2hlcmUgdGhlIG1lbW9yeSBibG9jayB3YXMgYWxsb2NhdGVkLCA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgICAgIGluc3RhbmNlLgorCisKK1RyYWNlYmFjaworXl5eXl5eXl5eCisKKy4uIGNsYXNzOjogVHJhY2ViYWNrCisKKyAgIFNlcXVlbmNlIG9mIDpjbGFzczpgRnJhbWVgIGluc3RhbmNlcyBzb3J0ZWQgZnJvbSB0aGUgbW9zdCByZWNlbnQgZnJhbWUgdG8KKyAgIHRoZSBvbGRlc3QgZnJhbWUuCisKKyAgIEEgdHJhY2ViYWNrIGNvbnRhaW5zIGF0IGxlYXN0IGBgMWBgIGZyYW1lLiBJZiB0aGUgYGB0cmFjZW1hbGxvY2BgIG1vZHVsZQorICAgZmFpbGVkIHRvIGdldCBhIGZyYW1lLCB0aGUgZmlsZW5hbWUgYGAiPHVua25vd24+ImBgIGF0IGxpbmUgbnVtYmVyIGBgMGBgIGlzCisgICB1c2VkLgorCisgICBXaGVuIGEgc25hcHNob3QgaXMgdGFrZW4sIHRyYWNlYmFja3Mgb2YgdHJhY2VzIGFyZSBsaW1pdGVkIHRvCisgICA6ZnVuYzpgZ2V0X3RyYWNlYmFja19saW1pdGAgZnJhbWVzLiBTZWUgdGhlIDpmdW5jOmB0YWtlX3NuYXBzaG90YCBmdW5jdGlvbi4KKworICAgVGhlIDphdHRyOmBUcmFjZS50cmFjZWJhY2tgIGF0dHJpYnV0ZSBpcyBhbiBpbnN0YW5jZSBvZiA6Y2xhc3M6YFRyYWNlYmFja2AKKyAgIGluc3RhbmNlLgorCisgICAuLiBtZXRob2Q6OiBmb3JtYXQobGltaXQ9Tm9uZSkKKworICAgICAgRm9ybWF0IHRoZSB0cmFjZWJhY2sgYXMgYSBsaXN0IG9mIGxpbmVzIHdpdGggbmV3bGluZXMuICBVc2UgdGhlCisgICAgICA6bW9kOmBsaW5lY2FjaGVgIG1vZHVsZSB0byByZXRyaWV2ZSBsaW5lcyBmcm9tIHRoZSBzb3VyY2UgY29kZS4gIElmCisgICAgICAqbGltaXQqIGlzIHNldCwgb25seSBmb3JtYXQgdGhlICpsaW1pdCogbW9zdCByZWNlbnQgZnJhbWVzLgorCisgICAgICBTaW1pbGFyIHRvIHRoZSA6ZnVuYzpgdHJhY2ViYWNrLmZvcm1hdF90YmAgZnVuY3Rpb24sIGV4Y2VwdCB0aGF0CisgICAgICA6bWV0aDpgZm9ybWF0YCBkb2VzIG5vdCBpbmNsdWRlIG5ld2xpbmVzLgorCisgICAgICBFeGFtcGxlOjoKKworICAgICAgICAgIHByaW50KCJUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOiIpCisgICAgICAgICAgZm9yIGxpbmUgaW4gdHJhY2ViYWNrOgorICAgICAgICAgICAgICBwcmludChsaW5lKQorCisgICAgICBPdXRwdXQ6OgorCisgICAgICAgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KToKKyAgICAgICAgICAgIEZpbGUgInRlc3QucHkiLCBsaW5lIDkKKyAgICAgICAgICAgICAgb2JqID0gT2JqZWN0KCkKKyAgICAgICAgICAgIEZpbGUgInRlc3QucHkiLCBsaW5lIDEyCisgICAgICAgICAgICAgIHRiID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2soZigpKQorCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLmRpYSBiL0RvYy9saWJyYXJ5L3R1bGlwX2Nvcm8uZGlhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjY2Y0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLmRpYQpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLnBuZyBiL0RvYy9saWJyYXJ5L3R1bGlwX2Nvcm8ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjY5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvbGlicmFyeS90dWxpcF9jb3JvLnBuZwpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS90dXJ0bGUucnN0IGIvRG9jL2xpYnJhcnkvdHVydGxlLnJzdAppbmRleCBiMDE1NTMwLi5lZmU1YzU0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90dXJ0bGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3R1cnRsZS5yc3QKQEAgLTE4MDksNyArMTgwOSw3IEBACiAKICAgIFBvcCB1cCBhIGRpYWxvZyB3aW5kb3cgZm9yIGlucHV0IG9mIGEgbnVtYmVyLiB0aXRsZSBpcyB0aGUgdGl0bGUgb2YgdGhlCiAgICBkaWFsb2cgd2luZG93LCBwcm9tcHQgaXMgYSB0ZXh0IG1vc3RseSBkZXNjcmliaW5nIHdoYXQgbnVtZXJpY2FsIGluZm9ybWF0aW9uCi0gICB0byBpbnB1dC4gZGVmYXVsdDogZGVmYXVsdCB2YWx1ZSwgbWludmFsOiBtaW5pbXVtIHZhbHVlIGZvciBpbXB1dCwKKyAgIHRvIGlucHV0LiBkZWZhdWx0OiBkZWZhdWx0IHZhbHVlLCBtaW52YWw6IG1pbmltdW0gdmFsdWUgZm9yIGlucHV0LAogICAgbWF4dmFsOiBtYXhpbXVtIHZhbHVlIGZvciBpbnB1dAogICAgVGhlIG51bWJlciBpbnB1dCBtdXN0IGJlIGluIHRoZSByYW5nZSBtaW52YWwgLi4gbWF4dmFsIGlmIHRoZXNlIGFyZQogICAgZ2l2ZW4uIElmIG5vdCwgYSBoaW50IGlzIGlzc3VlZCBhbmQgdGhlIGRpYWxvZyByZW1haW5zIG9wZW4gZm9yCkBAIC0xOTgxLDcgKzE5ODEsNyBAQAogICAgOnBhcmFtIHN0YXJ0eDogaWYgcG9zaXRpdmUsIHN0YXJ0aW5nIHBvc2l0aW9uIGluIHBpeGVscyBmcm9tIHRoZSBsZWZ0CiAgICAgICAgICAgICAgICAgICBlZGdlIG9mIHRoZSBzY3JlZW4sIGlmIG5lZ2F0aXZlIGZyb20gdGhlIHJpZ2h0IGVkZ2UsIGlmIE5vbmUsCiAgICAgICAgICAgICAgICAgICBjZW50ZXIgd2luZG93IGhvcml6b250YWxseQotICAgOnBhcmFtIHN0YXJ0eDogaWYgcG9zaXRpdmUsIHN0YXJ0aW5nIHBvc2l0aW9uIGluIHBpeGVscyBmcm9tIHRoZSB0b3AKKyAgIDpwYXJhbSBzdGFydHk6IGlmIHBvc2l0aXZlLCBzdGFydGluZyBwb3NpdGlvbiBpbiBwaXhlbHMgZnJvbSB0aGUgdG9wCiAgICAgICAgICAgICAgICAgICBlZGdlIG9mIHRoZSBzY3JlZW4sIGlmIG5lZ2F0aXZlIGZyb20gdGhlIGJvdHRvbSBlZGdlLCBpZiBOb25lLAogICAgICAgICAgICAgICAgICAgY2VudGVyIHdpbmRvdyB2ZXJ0aWNhbGx5CiAKQEAgLTIyNzQsMTAgKzIyNzQsMTMgQEAKIG5vdCBmcm9tIHdpdGhpbiB0aGUgZGVtby12aWV3ZXIpLgogCiAKLURlbW8gc2NyaXB0cwotPT09PT09PT09PT09Cis6bW9kOmB0dXJ0bGVkZW1vYCAtLS0gRGVtbyBzY3JpcHRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZXJlIGlzIGEgc2V0IG9mIGRlbW8gc2NyaXB0cyBpbiB0aGUgOm1vZDpgdHVydGxlZGVtb2AgcGFja2FnZS4gIFRoZXNlCisuLiBtb2R1bGU6OiB0dXJ0bGVkZW1vCisgICA6c3lub3BzaXM6IEEgdmlld2VyIGZvciBleGFtcGxlIHR1cnRsZSBzY3JpcHRzCisKK1RoZSA6bW9kOmB0dXJ0bGVkZW1vYCBwYWNrYWdlIGluY2x1ZGVzIGEgc2V0IG9mIGRlbW8gc2NyaXB0cy4gIFRoZXNlCiBzY3JpcHRzIGNhbiBiZSBydW4gYW5kIHZpZXdlZCB1c2luZyB0aGUgc3VwcGxpZWQgZGVtbyB2aWV3ZXIgYXMgZm9sbG93czo6CiAKICAgIHB5dGhvbiAtbSB0dXJ0bGVkZW1vCkBAIC0yMjg4LDE2ICsyMjkxLDEzIEBACiAKIFRoZSA6bW9kOmB0dXJ0bGVkZW1vYCBwYWNrYWdlIGRpcmVjdG9yeSBjb250YWluczoKIAotLSBhIHNldCBvZiAxNSBkZW1vIHNjcmlwdHMgZGVtb25zdHJhdGluZyBkaWZmZXJlbnQgZmVhdHVyZXMgb2YgdGhlIG5ldyBtb2R1bGUKLSAgOm1vZDpgdHVydGxlYDsKLS0gYSBkZW1vIHZpZXdlciA6ZmlsZTpgX19tYWluX18ucHlgIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHZpZXcgdGhlIHNvdXJjZWNvZGUKLSAgb2YgdGhlIHNjcmlwdHMgYW5kIHJ1biB0aGVtIGF0IHRoZSBzYW1lIHRpbWUuIDE0IG9mIHRoZSBleGFtcGxlcyBjYW4gYmUKLSAgYWNjZXNzZWQgdmlhIHRoZSBFeGFtcGxlcyBtZW51OyBhbGwgb2YgdGhlbSBjYW4gYWxzbyBiZSBydW4gc3RhbmRhbG9uZS4KLS0gVGhlIGV4YW1wbGUgOm1vZDpgdHVydGxlZGVtby50d29fY2FudmFzZXNgIGRlbW9uc3RyYXRlcyB0aGUgc2ltdWx0YW5lb3VzCi0gIHVzZSBvZiB0d28gY2FudmFzZXMgd2l0aCB0aGUgdHVydGxlIG1vZHVsZS4gIFRoZXJlZm9yZSBpdCBvbmx5IGNhbiBiZSBydW4KLSAgc3RhbmRhbG9uZS4KLS0gVGhlcmUgaXMgYSA6ZmlsZTpgdHVydGxlLmNmZ2AgZmlsZSBpbiB0aGlzIGRpcmVjdG9yeSwgd2hpY2ggc2VydmVzIGFzIGFuCi0gIGV4YW1wbGUgZm9yIGhvdyB0byB3cml0ZSBhbmQgdXNlIHN1Y2ggZmlsZXMuCistIEEgZGVtbyB2aWV3ZXIgOmZpbGU6YF9fbWFpbl9fLnB5YCB3aGljaCBjYW4gYmUgdXNlZCB0byB2aWV3IHRoZSBzb3VyY2Vjb2RlCisgIG9mIHRoZSBzY3JpcHRzIGFuZCBydW4gdGhlbSBhdCB0aGUgc2FtZSB0aW1lLgorLSBNdWx0aXBsZSBzY3JpcHRzIGRlbW9uc3RyYXRpbmcgZGlmZmVyZW50IGZlYXR1cmVzIG9mIHRoZSA6bW9kOmB0dXJ0bGVgCisgIG1vZHVsZS4gIEV4YW1wbGVzIGNhbiBiZSBhY2Nlc3NlZCB2aWEgdGhlIEV4YW1wbGVzIG1lbnUuICBUaGV5IGNhbiBhbHNvCisgIGJlIHJ1biBzdGFuZGFsb25lLgorLSBBIDpmaWxlOmB0dXJ0bGUuY2ZnYCBmaWxlIHdoaWNoIHNlcnZlcyBhcyBhbiBleGFtcGxlIG9mIGhvdyB0byB3cml0ZQorICBhbmQgdXNlIHN1Y2ggZmlsZXMuCiAKIFRoZSBkZW1vIHNjcmlwdHMgYXJlOgogCkBAIC0yMzIwLDYgKzIzMjAsOCBAQAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBjb2xvcm1peGVyICAgICB8IGV4cGVyaW1lbnQgd2l0aCByLCBnLCBiICAgICAgfCA6ZnVuYzpgb25kcmFnYCAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBmb3Jlc3QgICAgICAgICB8IDMgYnJlYWR0aC1maXJzdCB0cmVlcyAgICAgICAgfCByYW5kb21pemF0aW9uICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBmcmFjdGFsY3VydmVzICB8IEhpbGJlcnQgJiBLb2NoIGN1cnZlcyAgICAgICAgfCByZWN1cnNpb24gICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBsaW5kZW5tYXllciAgICB8IGV0aG5vbWF0aGVtYXRpY3MgICAgICAgICAgICAgfCBMLVN5c3RlbSAgICAgICAgICAgICAgfApAQCAtMjM1Miw2ICsyMzU0LDkgQEAKIHwgdHJlZSAgICAgICAgICAgfCBhIChncmFwaGljYWwpIGJyZWFkdGggICAgICAgIHwgOmZ1bmM6YGNsb25lYCAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgfCBmaXJzdCB0cmVlICh1c2luZyBnZW5lcmF0b3JzKXwgICAgICAgICAgICAgICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgdHdvX2NhbnZhc2VzICAgfCBzaW1wbGUgZGVzaWduICAgICAgICAgICAgICAgIHwgdHVydGxlcyBvbiB0d28gICAgICAgIHwKK3wgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FudmFzZXMgICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKIHwgd2lraXBlZGlhICAgICAgfCBhIHBhdHRlcm4gZnJvbSB0aGUgd2lraXBlZGlhIHwgOmZ1bmM6YGNsb25lYCwgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgfCBhcnRpY2xlIG9uIHR1cnRsZSBncmFwaGljcyAgIHwgOmZ1bmM6YHVuZG9gICAgICAgICAgIHwKICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTIzOTcsNyArMjQwMiw3IEBACiAgIEFjY29yZGluZ2x5IHRoZSBsYXR0ZXIgaGFzIGdvdCBhbiBhbGlhczogOm1ldGg6YFNjcmVlbi5vbmtleXJlbGVhc2VgLgogCiAtIFRoZSBtZXRob2QgIDptZXRoOmBTY3JlZW4ubWFpbmxvb3BgIGhhcyBiZWVuIGFkZGVkLiBTbyB3aGVuIHdvcmtpbmcgb25seQotICB3aXRoIFNjcmVlbiBhbmQgVHVydGxlIG9iamVjdHMgb25lIG11c3Qgbm90IGFkZGl0b25hbGx5IGltcG9ydAorICB3aXRoIFNjcmVlbiBhbmQgVHVydGxlIG9iamVjdHMgb25lIG11c3Qgbm90IGFkZGl0aW9uYWxseSBpbXBvcnQKICAgOmZ1bmM6YG1haW5sb29wYCBhbnltb3JlLgogCiAtIFR3byBpbnB1dCBtZXRob2RzIGhhcyBiZWVuIGFkZGVkIDptZXRoOmBTY3JlZW4udGV4dGlucHV0YCBhbmQKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3R5cGVzLnJzdCBiL0RvYy9saWJyYXJ5L3R5cGVzLnJzdAppbmRleCA2OTU0ODBmLi5hYmRiOTM5IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS90eXBlcy5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdHlwZXMucnN0CkBAIC0xNSw2ICsxNSw5IEBACiBQeXRob24gaW50ZXJwcmV0ZXIsIGJ1dCBub3QgZXhwb3NlZCBhcyBidWlsdGlucyBsaWtlIDpjbGFzczpgaW50YCBvcgogOmNsYXNzOmBzdHJgIGFyZS4KIAorRmluYWxseSwgaXQgcHJvdmlkZXMgc29tZSBhZGRpdGlvbmFsIHR5cGUtcmVsYXRlZCB1dGlsaXR5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucwordGhhdCBhcmUgbm90IGZ1bmRhbWVudGFsIGVub3VnaCB0byBiZSBidWlsdGlucy4KKwogCiBEeW5hbWljIFR5cGUgQ3JlYXRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMTA3LDkgKzExMCwzNSBAQAogICAgQyIuKQogCiAKLS4uIGRhdGE6OiBNb2R1bGVUeXBlCisuLiBjbGFzczo6IE1vZHVsZVR5cGUobmFtZSwgZG9jPU5vbmUpCiAKLSAgIFRoZSB0eXBlIG9mIG1vZHVsZXMuCisgICBUaGUgdHlwZSBvZiA6dGVybTpgbW9kdWxlcyA8bW9kdWxlPmAuIENvbnN0cnVjdG9yIHRha2VzIHRoZSBuYW1lIG9mIHRoZQorICAgbW9kdWxlIHRvIGJlIGNyZWF0ZWQgYW5kIG9wdGlvbmFsbHkgaXRzIDp0ZXJtOmBkb2NzdHJpbmdgLgorCisgICAuLiBhdHRyaWJ1dGU6OiBfX2RvY19fCisKKyAgICAgIFRoZSA6dGVybTpgZG9jc3RyaW5nYCBvZiB0aGUgbW9kdWxlLiBEZWZhdWx0cyB0byBgYE5vbmVgYC4KKworICAgLi4gYXR0cmlidXRlOjogX19sb2FkZXJfXworCisgICAgICBUaGUgOnRlcm06YGxvYWRlcmAgd2hpY2ggbG9hZGVkIHRoZSBtb2R1bGUuIERlZmF1bHRzIHRvIGBgTm9uZWBgLgorCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgRGVmYXVsdHMgdG8gYGBOb25lYGAuIFByZXZpb3VzbHkgdGhlIGF0dHJpYnV0ZSB3YXMgb3B0aW9uYWwuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fbmFtZV9fCisKKyAgICAgIFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IF9fcGFja2FnZV9fCisKKyAgICAgIFdoaWNoIDp0ZXJtOmBwYWNrYWdlYCBhIG1vZHVsZSBiZWxvbmdzIHRvLiBJZiB0aGUgbW9kdWxlIGlzIHRvcC1sZXZlbAorICAgICAgKGkuZS4gbm90IGEgcGFydCBvZiBhbnkgc3BlY2lmaWMgcGFja2FnZSkgdGhlbiB0aGUgYXR0cmlidXRlIHNob3VsZCBiZSBzZXQKKyAgICAgIHRvIGBgJydgYCwgZWxzZSBpdCBzaG91bGQgYmUgc2V0IHRvIHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlICh3aGljaCBjYW4gYmUKKyAgICAgIDphdHRyOmBfX25hbWVfX2AgaWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UgaXRzZWxmKS4gRGVmYXVsdHMgdG8gYGBOb25lYGAuCisKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBEZWZhdWx0cyB0byBgYE5vbmVgYC4gUHJldmlvdXNseSB0aGUgYXR0cmlidXRlIHdhcyBvcHRpb25hbC4KIAogCiAuLiBkYXRhOjogVHJhY2ViYWNrVHlwZQpAQCAtMTk0LDYgKzIyMyw5IEBACiAgICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgdW5kZXJseWluZyBtYXBwaW5nJ3MgdmFsdWVzLgogCiAKK0FkZGl0aW9uYWwgVXRpbGl0eSBDbGFzc2VzIGFuZCBGdW5jdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogLi4gY2xhc3M6OiBTaW1wbGVOYW1lc3BhY2UKIAogICAgQSBzaW1wbGUgOmNsYXNzOmBvYmplY3RgIHN1YmNsYXNzIHRoYXQgcHJvdmlkZXMgYXR0cmlidXRlIGFjY2VzcyB0byBpdHMKQEAgLTIxMiw5ICsyNDQsMjYgQEAKICAgICAgICAgICAgICAgIGtleXMgPSBzb3J0ZWQoc2VsZi5fX2RpY3RfXykKICAgICAgICAgICAgICAgIGl0ZW1zID0gKCJ7fT17IXJ9Ii5mb3JtYXQoaywgc2VsZi5fX2RpY3RfX1trXSkgZm9yIGsgaW4ga2V5cykKICAgICAgICAgICAgICAgIHJldHVybiAie30oe30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywgIiwgIi5qb2luKGl0ZW1zKSkKKyAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXwogCiAgICBgYFNpbXBsZU5hbWVzcGFjZWBgIG1heSBiZSB1c2VmdWwgYXMgYSByZXBsYWNlbWVudCBmb3IgYGBjbGFzcyBOUzogcGFzc2BgLgogICAgSG93ZXZlciwgZm9yIGEgc3RydWN0dXJlZCByZWNvcmQgdHlwZSB1c2UgOmZ1bmM6YH5jb2xsZWN0aW9ucy5uYW1lZHR1cGxlYAogICAgaW5zdGVhZC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCisKKworLi4gZnVuY3Rpb246OiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUoZmdldD1Ob25lLCBmc2V0PU5vbmUsIGZkZWw9Tm9uZSwgZG9jPU5vbmUpCisKKyAgIFJvdXRlIGF0dHJpYnV0ZSBhY2Nlc3Mgb24gYSBjbGFzcyB0byBfX2dldGF0dHJfXy4KKworICAgVGhpcyBpcyBhIGRlc2NyaXB0b3IsIHVzZWQgdG8gZGVmaW5lIGF0dHJpYnV0ZXMgdGhhdCBhY3QgZGlmZmVyZW50bHkgd2hlbgorICAgYWNjZXNzZWQgdGhyb3VnaCBhbiBpbnN0YW5jZSBhbmQgdGhyb3VnaCBhIGNsYXNzLiAgSW5zdGFuY2UgYWNjZXNzIHJlbWFpbnMKKyAgIG5vcm1hbCwgYnV0IGFjY2VzcyB0byBhbiBhdHRyaWJ1dGUgdGhyb3VnaCBhIGNsYXNzIHdpbGwgYmUgcm91dGVkIHRvIHRoZQorICAgY2xhc3MncyBfX2dldGF0dHJfXyBtZXRob2Q7IHRoaXMgaXMgZG9uZSBieSByYWlzaW5nIEF0dHJpYnV0ZUVycm9yLgorCisgICBUaGlzIGFsbG93cyBvbmUgdG8gaGF2ZSBwcm9wZXJ0aWVzIGFjdGl2ZSBvbiBhbiBpbnN0YW5jZSwgYW5kIGhhdmUgdmlydHVhbAorICAgYXR0cmlidXRlcyBvbiB0aGUgY2xhc3Mgd2l0aCB0aGUgc2FtZSBuYW1lIChzZWUgRW51bSBmb3IgYW4gZXhhbXBsZSkuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5kb2MucnN0IGIvRG9jL2xpYnJhcnkvdW5kb2MucnN0CmluZGV4IDgwMzg2ZDIuLjIwODMwZTIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuZG9jLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bmRvYy5yc3QKQEAgLTIwLDcgKzIwLDcgQEAKIGRvY3VtZW50ZWQgYmV5b25kIHRoaXMgbWVudGlvbi4gIFRoZXJlJ3MgbGl0dGxlIG5lZWQgdG8gZG9jdW1lbnQgdGhlc2UuCiAKIDptb2Q6YG50cGF0aGAKLSAgIC0tLSBJbXBsZW1lbnRhdGlvbiBvZiA6bW9kOmBvcy5wYXRoYCBvbiBXaW4zMiwgV2luNjQsIFdpbkNFLCBhbmQgT1MvMiBwbGF0Zm9ybXMuCisgICAtLS0gSW1wbGVtZW50YXRpb24gb2YgOm1vZDpgb3MucGF0aGAgb24gV2luMzIsIFdpbjY0LCBhbmQgV2luQ0UgcGxhdGZvcm1zLgogCiA6bW9kOmBwb3NpeHBhdGhgCiAgICAtLS0gSW1wbGVtZW50YXRpb24gb2YgOm1vZDpgb3MucGF0aGAgb24gUE9TSVguCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QgYi9Eb2MvbGlicmFyeS91bmljb2RlZGF0YS5yc3QKaW5kZXggYWQ3MGRkOS4uM2IzZDNhMCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pY29kZWRhdGEucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdApAQCAtMTUsOCArMTUsOCBAQAogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIChVQ0QpIHdoaWNoCiBkZWZpbmVzIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGZvciBhbGwgVW5pY29kZSBjaGFyYWN0ZXJzLiBUaGUgZGF0YSBjb250YWluZWQgaW4KLXRoaXMgZGF0YWJhc2UgaXMgY29tcGlsZWQgZnJvbSB0aGUgYFVDRCB2ZXJzaW9uIDYuMS4wCi08aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4xLjAvdWNkPmBfLgordGhpcyBkYXRhYmFzZSBpcyBjb21waWxlZCBmcm9tIHRoZSBgVUNEIHZlcnNpb24gNi4zLjAKKzxodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2Q+YF8uCiAKIFRoZSBtb2R1bGUgdXNlcyB0aGUgc2FtZSBuYW1lcyBhbmQgc3ltYm9scyBhcyBkZWZpbmVkIGJ5IFVuaWNvZGUKIFN0YW5kYXJkIEFubmV4ICM0NCwgYCJVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSIKQEAgLTE2Niw2ICsxNjYsNiBAQAogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAotLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMS4wL3VjZC9OYW1lQWxpYXNlcy50eHQKKy4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2QvTmFtZUFsaWFzZXMudHh0CiAKLS4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjEuMC91Y2QvTmFtZWRTZXF1ZW5jZXMudHh0CisuLiBbI10gaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkL05hbWVkU2VxdWVuY2VzLnR4dApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QubW9jay1leGFtcGxlcy5yc3QgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAppbmRleCA1NTRlZjExLi4wNTVhYmUwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdAorKysgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLWV4YW1wbGVzLnJzdApAQCAtMjgsMjIgKzI4LDIyIEBACiAgICAgPj4+IHJlYWwubWV0aG9kKDMsIDQsIDUsIGtleT0ndmFsdWUnKQogICAgIDxNYWdpY01vY2sgbmFtZT0nbWV0aG9kKCknIGlkPScuLi4nPgogCi1PbmNlIG91ciBtb2NrIGhhcyBiZWVuIHVzZWQgKGByZWFsLm1ldGhvZGAgaW4gdGhpcyBleGFtcGxlKSBpdCBoYXMgbWV0aG9kcworT25jZSBvdXIgbW9jayBoYXMgYmVlbiB1c2VkIChgYHJlYWwubWV0aG9kYGAgaW4gdGhpcyBleGFtcGxlKSBpdCBoYXMgbWV0aG9kcwogYW5kIGF0dHJpYnV0ZXMgdGhhdCBhbGxvdyB5b3UgdG8gbWFrZSBhc3NlcnRpb25zIGFib3V0IGhvdyBpdCBoYXMgYmVlbiB1c2VkLgogCiAuLiBub3RlOjoKIAogICAgIEluIG1vc3Qgb2YgdGhlc2UgZXhhbXBsZXMgdGhlIDpjbGFzczpgTW9ja2AgYW5kIDpjbGFzczpgTWFnaWNNb2NrYCBjbGFzc2VzCi0gICAgYXJlIGludGVyY2hhbmdlYWJsZS4gQXMgdGhlIGBNYWdpY01vY2tgIGlzIHRoZSBtb3JlIGNhcGFibGUgY2xhc3MgaXQgbWFrZXMKKyAgICBhcmUgaW50ZXJjaGFuZ2VhYmxlLiBBcyB0aGUgYGBNYWdpY01vY2tgYCBpcyB0aGUgbW9yZSBjYXBhYmxlIGNsYXNzIGl0IG1ha2VzCiAgICAgYSBzZW5zaWJsZSBvbmUgdG8gdXNlIGJ5IGRlZmF1bHQuCiAKIE9uY2UgdGhlIG1vY2sgaGFzIGJlZW4gY2FsbGVkIGl0cyA6YXR0cjpgfk1vY2suY2FsbGVkYCBhdHRyaWJ1dGUgaXMgc2V0IHRvCi1gVHJ1ZWAuIE1vcmUgaW1wb3J0YW50bHkgd2UgY2FuIHVzZSB0aGUgOm1ldGg6YH5Nb2NrLmFzc2VydF9jYWxsZWRfd2l0aGAgb3IKK2BgVHJ1ZWBgLiBNb3JlIGltcG9ydGFudGx5IHdlIGNhbiB1c2UgdGhlIDptZXRoOmB+TW9jay5hc3NlcnRfY2FsbGVkX3dpdGhgIG9yCiA6bWV0aDpgfk1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhgIG1ldGhvZCB0byBjaGVjayB0aGF0IGl0IHdhcyBjYWxsZWQgd2l0aAogdGhlIGNvcnJlY3QgYXJndW1lbnRzLgogCi1UaGlzIGV4YW1wbGUgdGVzdHMgdGhhdCBjYWxsaW5nIGBQcm9kdWN0aW9uQ2xhc3MoKS5tZXRob2RgIHJlc3VsdHMgaW4gYSBjYWxsIHRvCi10aGUgYHNvbWV0aGluZ2AgbWV0aG9kOgorVGhpcyBleGFtcGxlIHRlc3RzIHRoYXQgY2FsbGluZyBgYFByb2R1Y3Rpb25DbGFzcygpLm1ldGhvZGBgIHJlc3VsdHMgaW4gYSBjYWxsIHRvCit0aGUgYGBzb21ldGhpbmdgYCBtZXRob2Q6CiAKICAgICA+Pj4gY2xhc3MgUHJvZHVjdGlvbkNsYXNzOgogICAgIC4uLiAgICAgZGVmIG1ldGhvZChzZWxmKToKQEAgLTY2LDE1ICs2NiwxNSBAQAogbWV0aG9kIChvciBzb21lIHBhcnQgb2YgdGhlIHN5c3RlbSB1bmRlciB0ZXN0KSBhbmQgdGhlbiBjaGVjayB0aGF0IGl0IGlzIHVzZWQKIGluIHRoZSBjb3JyZWN0IHdheS4KIAotVGhlIHNpbXBsZSBgUHJvZHVjdGlvbkNsYXNzYCBiZWxvdyBoYXMgYSBgY2xvc2VyYCBtZXRob2QuIElmIGl0IGlzIGNhbGxlZCB3aXRoCi1hbiBvYmplY3QgdGhlbiBpdCBjYWxscyBgY2xvc2VgIG9uIGl0LgorVGhlIHNpbXBsZSBgYFByb2R1Y3Rpb25DbGFzc2BgIGJlbG93IGhhcyBhIGBgY2xvc2VyYGAgbWV0aG9kLiBJZiBpdCBpcyBjYWxsZWQgd2l0aAorYW4gb2JqZWN0IHRoZW4gaXQgY2FsbHMgYGBjbG9zZWBgIG9uIGl0LgogCiAgICAgPj4+IGNsYXNzIFByb2R1Y3Rpb25DbGFzczoKICAgICAuLi4gICAgIGRlZiBjbG9zZXIoc2VsZiwgc29tZXRoaW5nKToKICAgICAuLi4gICAgICAgICBzb21ldGhpbmcuY2xvc2UoKQogICAgIC4uLgogCi1TbyB0byB0ZXN0IGl0IHdlIG5lZWQgdG8gcGFzcyBpbiBhbiBvYmplY3Qgd2l0aCBhIGBjbG9zZWAgbWV0aG9kIGFuZCBjaGVjaworU28gdG8gdGVzdCBpdCB3ZSBuZWVkIHRvIHBhc3MgaW4gYW4gb2JqZWN0IHdpdGggYSBgYGNsb3NlYGAgbWV0aG9kIGFuZCBjaGVjawogdGhhdCBpdCB3YXMgY2FsbGVkIGNvcnJlY3RseS4KIAogICAgID4+PiByZWFsID0gUHJvZHVjdGlvbkNsYXNzKCkKQEAgLTk2LDkgKzk2LDkgQEAKIGFyZSBjcmVhdGVkIGJ5ICpjYWxsaW5nIHRoZSBjbGFzcyouIFRoaXMgbWVhbnMgeW91IGFjY2VzcyB0aGUgIm1vY2sgaW5zdGFuY2UiCiBieSBsb29raW5nIGF0IHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1vY2tlZCBjbGFzcy4KIAotSW4gdGhlIGV4YW1wbGUgYmVsb3cgd2UgaGF2ZSBhIGZ1bmN0aW9uIGBzb21lX2Z1bmN0aW9uYCB0aGF0IGluc3RhbnRpYXRlcyBgRm9vYAotYW5kIGNhbGxzIGEgbWV0aG9kIG9uIGl0LiBUaGUgY2FsbCB0byBgcGF0Y2hgIHJlcGxhY2VzIHRoZSBjbGFzcyBgRm9vYCB3aXRoIGEKLW1vY2suIFRoZSBgRm9vYCBpbnN0YW5jZSBpcyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIG1vY2ssIHNvIGl0IGlzIGNvbmZpZ3VyZWQKK0luIHRoZSBleGFtcGxlIGJlbG93IHdlIGhhdmUgYSBmdW5jdGlvbiBgYHNvbWVfZnVuY3Rpb25gYCB0aGF0IGluc3RhbnRpYXRlcyBgYEZvb2BgCithbmQgY2FsbHMgYSBtZXRob2Qgb24gaXQuIFRoZSBjYWxsIHRvIDpmdW5jOmBwYXRjaGAgcmVwbGFjZXMgdGhlIGNsYXNzIGBgRm9vYGAgd2l0aCBhCittb2NrLiBUaGUgYGBGb29gYCBpbnN0YW5jZSBpcyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIG1vY2ssIHNvIGl0IGlzIGNvbmZpZ3VyZWQKIGJ5IG1vZGlmeWluZyB0aGUgbW9jayA6YXR0cjpgfk1vY2sucmV0dXJuX3ZhbHVlYC4KIAogICAgID4+PiBkZWYgc29tZV9mdW5jdGlvbigpOgpAQCAtMTQxLDEzICsxNDEsMTMgQEAKICAgICA+Pj4gbW9jay5tb2NrX2NhbGxzCiAgICAgW2NhbGwubWV0aG9kKCksIGNhbGwuYXR0cmlidXRlLm1ldGhvZCgxMCwgeD01MyldCiAKLUlmIHlvdSBtYWtlIGFuIGFzc2VydGlvbiBhYm91dCBgbW9ja19jYWxsc2AgYW5kIGFueSB1bmV4cGVjdGVkIG1ldGhvZHMKK0lmIHlvdSBtYWtlIGFuIGFzc2VydGlvbiBhYm91dCBgYG1vY2tfY2FsbHNgYCBhbmQgYW55IHVuZXhwZWN0ZWQgbWV0aG9kcwogaGF2ZSBiZWVuIGNhbGxlZCwgdGhlbiB0aGUgYXNzZXJ0aW9uIHdpbGwgZmFpbC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBhcyB3ZWxsCiBhcyBhc3NlcnRpbmcgdGhhdCB0aGUgY2FsbHMgeW91IGV4cGVjdGVkIGhhdmUgYmVlbiBtYWRlLCB5b3UgYXJlIGFsc28gY2hlY2tpbmcKIHRoYXQgdGhleSB3ZXJlIG1hZGUgaW4gdGhlIHJpZ2h0IG9yZGVyIGFuZCB3aXRoIG5vIGFkZGl0aW9uYWwgY2FsbHM6CiAKIFlvdSB1c2UgdGhlIDpkYXRhOmBjYWxsYCBvYmplY3QgdG8gY29uc3RydWN0IGxpc3RzIGZvciBjb21wYXJpbmcgd2l0aAotYG1vY2tfY2FsbHNgOgorYGBtb2NrX2NhbGxzYGA6CiAKICAgICA+Pj4gZXhwZWN0ZWQgPSBbY2FsbC5tZXRob2QoKSwgY2FsbC5hdHRyaWJ1dGUubWV0aG9kKDEwLCB4PTUzKV0KICAgICA+Pj4gbW9jay5tb2NrX2NhbGxzID09IGV4cGVjdGVkCkBAIC0xODUsNyArMTg1LDcgQEAKICAgICAzCiAKIFNvbWV0aW1lcyB5b3Ugd2FudCB0byBtb2NrIHVwIGEgbW9yZSBjb21wbGV4IHNpdHVhdGlvbiwgbGlrZSBmb3IgZXhhbXBsZQotYG1vY2suY29ubmVjdGlvbi5jdXJzb3IoKS5leGVjdXRlKCJTRUxFQ1QgMSIpYC4gSWYgd2Ugd2FudGVkIHRoaXMgY2FsbCB0bworYGBtb2NrLmNvbm5lY3Rpb24uY3Vyc29yKCkuZXhlY3V0ZSgiU0VMRUNUIDEiKWBgLiBJZiB3ZSB3YW50ZWQgdGhpcyBjYWxsIHRvCiByZXR1cm4gYSBsaXN0LCB0aGVuIHdlIGhhdmUgdG8gY29uZmlndXJlIHRoZSByZXN1bHQgb2YgdGhlIG5lc3RlZCBjYWxsLgogCiBXZSBjYW4gdXNlIDpkYXRhOmBjYWxsYCB0byBjb25zdHJ1Y3QgdGhlIHNldCBvZiBjYWxscyBpbiBhICJjaGFpbmVkIGNhbGwiIGxpa2UKQEAgLTIwMiw3ICsyMDIsNyBAQAogICAgID4+PiBtb2NrLm1vY2tfY2FsbHMgPT0gZXhwZWN0ZWQKICAgICBUcnVlCiAKLUl0IGlzIHRoZSBjYWxsIHRvIGAuY2FsbF9saXN0KClgIHRoYXQgdHVybnMgb3VyIGNhbGwgb2JqZWN0IGludG8gYSBsaXN0IG9mCitJdCBpcyB0aGUgY2FsbCB0byBgYC5jYWxsX2xpc3QoKWBgIHRoYXQgdHVybnMgb3VyIGNhbGwgb2JqZWN0IGludG8gYSBsaXN0IG9mCiBjYWxscyByZXByZXNlbnRpbmcgdGhlIGNoYWluZWQgY2FsbHMuCiAKIApAQCAtMjIzLDEwICsyMjMsMTAgQEAKIFNpZGUgZWZmZWN0IGZ1bmN0aW9ucyBhbmQgaXRlcmFibGVzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi1gc2lkZV9lZmZlY3RgIGNhbiBhbHNvIGJlIHNldCB0byBhIGZ1bmN0aW9uIG9yIGFuIGl0ZXJhYmxlLiBUaGUgdXNlIGNhc2UgZm9yCi1gc2lkZV9lZmZlY3RgIGFzIGFuIGl0ZXJhYmxlIGlzIHdoZXJlIHlvdXIgbW9jayBpcyBnb2luZyB0byBiZSBjYWxsZWQgc2V2ZXJhbAorYGBzaWRlX2VmZmVjdGBgIGNhbiBhbHNvIGJlIHNldCB0byBhIGZ1bmN0aW9uIG9yIGFuIGl0ZXJhYmxlLiBUaGUgdXNlIGNhc2UgZm9yCitgYHNpZGVfZWZmZWN0YGAgYXMgYW4gaXRlcmFibGUgaXMgd2hlcmUgeW91ciBtb2NrIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBzZXZlcmFsCiB0aW1lcywgYW5kIHlvdSB3YW50IGVhY2ggY2FsbCB0byByZXR1cm4gYSBkaWZmZXJlbnQgdmFsdWUuIFdoZW4geW91IHNldAotYHNpZGVfZWZmZWN0YCB0byBhbiBpdGVyYWJsZSBldmVyeSBjYWxsIHRvIHRoZSBtb2NrIHJldHVybnMgdGhlIG5leHQgdmFsdWUKK2Bgc2lkZV9lZmZlY3RgYCB0byBhbiBpdGVyYWJsZSBldmVyeSBjYWxsIHRvIHRoZSBtb2NrIHJldHVybnMgdGhlIG5leHQgdmFsdWUKIGZyb20gdGhlIGl0ZXJhYmxlOgogCiAgICAgPj4+IG1vY2sgPSBNYWdpY01vY2soc2lkZV9lZmZlY3Q9WzQsIDUsIDZdKQpAQCAtMjM5LDcgKzIzOSw3IEBACiAKIAogRm9yIG1vcmUgYWR2YW5jZWQgdXNlIGNhc2VzLCBsaWtlIGR5bmFtaWNhbGx5IHZhcnlpbmcgdGhlIHJldHVybiB2YWx1ZXMKLWRlcGVuZGluZyBvbiB3aGF0IHRoZSBtb2NrIGlzIGNhbGxlZCB3aXRoLCBgc2lkZV9lZmZlY3RgIGNhbiBiZSBhIGZ1bmN0aW9uLgorZGVwZW5kaW5nIG9uIHdoYXQgdGhlIG1vY2sgaXMgY2FsbGVkIHdpdGgsIGBgc2lkZV9lZmZlY3RgYCBjYW4gYmUgYSBmdW5jdGlvbi4KIFRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgbW9jay4gV2hhdGV2ZXIgdGhlCiBmdW5jdGlvbiByZXR1cm5zIGlzIHdoYXQgdGhlIGNhbGwgcmV0dXJuczoKIApAQCAtMjU5LDEzICsyNTksMTMgQEAKIAogT25lIHByb2JsZW0gd2l0aCBvdmVyIHVzZSBvZiBtb2NraW5nIGlzIHRoYXQgaXQgY291cGxlcyB5b3VyIHRlc3RzIHRvIHRoZQogaW1wbGVtZW50YXRpb24gb2YgeW91ciBtb2NrcyByYXRoZXIgdGhhbiB5b3VyIHJlYWwgY29kZS4gU3VwcG9zZSB5b3UgaGF2ZSBhCi1jbGFzcyB0aGF0IGltcGxlbWVudHMgYHNvbWVfbWV0aG9kYC4gSW4gYSB0ZXN0IGZvciBhbm90aGVyIGNsYXNzLCB5b3UKLXByb3ZpZGUgYSBtb2NrIG9mIHRoaXMgb2JqZWN0IHRoYXQgKmFsc28qIHByb3ZpZGVzIGBzb21lX21ldGhvZGAuIElmIGxhdGVyCi15b3UgcmVmYWN0b3IgdGhlIGZpcnN0IGNsYXNzLCBzbyB0aGF0IGl0IG5vIGxvbmdlciBoYXMgYHNvbWVfbWV0aG9kYCAtIHRoZW4KK2NsYXNzIHRoYXQgaW1wbGVtZW50cyBgYHNvbWVfbWV0aG9kYGAuIEluIGEgdGVzdCBmb3IgYW5vdGhlciBjbGFzcywgeW91Citwcm92aWRlIGEgbW9jayBvZiB0aGlzIG9iamVjdCB0aGF0ICphbHNvKiBwcm92aWRlcyBgYHNvbWVfbWV0aG9kYGAuIElmIGxhdGVyCit5b3UgcmVmYWN0b3IgdGhlIGZpcnN0IGNsYXNzLCBzbyB0aGF0IGl0IG5vIGxvbmdlciBoYXMgYGBzb21lX21ldGhvZGBgIC0gdGhlbgogeW91ciB0ZXN0cyB3aWxsIGNvbnRpbnVlIHRvIHBhc3MgZXZlbiB0aG91Z2ggeW91ciBjb2RlIGlzIG5vdyBicm9rZW4hCiAKLWBNb2NrYCBhbGxvd3MgeW91IHRvIHByb3ZpZGUgYW4gb2JqZWN0IGFzIGEgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIG1vY2ssCi11c2luZyB0aGUgYHNwZWNgIGtleXdvcmQgYXJndW1lbnQuIEFjY2Vzc2luZyBtZXRob2RzIC8gYXR0cmlidXRlcyBvbiB0aGUKKzpjbGFzczpgTW9ja2AgYWxsb3dzIHlvdSB0byBwcm92aWRlIGFuIG9iamVjdCBhcyBhIHNwZWNpZmljYXRpb24gZm9yIHRoZSBtb2NrLAordXNpbmcgdGhlICpzcGVjKiBrZXl3b3JkIGFyZ3VtZW50LiBBY2Nlc3NpbmcgbWV0aG9kcyAvIGF0dHJpYnV0ZXMgb24gdGhlCiBtb2NrIHRoYXQgZG9uJ3QgZXhpc3Qgb24geW91ciBzcGVjaWZpY2F0aW9uIG9iamVjdCB3aWxsIGltbWVkaWF0ZWx5IHJhaXNlIGFuCiBhdHRyaWJ1dGUgZXJyb3IuIElmIHlvdSBjaGFuZ2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIHlvdXIgc3BlY2lmaWNhdGlvbiwgdGhlbgogdGVzdHMgdGhhdCB1c2UgdGhhdCBjbGFzcyB3aWxsIHN0YXJ0IGZhaWxpbmcgaW1tZWRpYXRlbHkgd2l0aG91dCB5b3UgaGF2aW5nIHRvCkBAIC0yNzcsOSArMjc3LDIzIEBACiAgICAgICAgLi4uCiAgICAgQXR0cmlidXRlRXJyb3I6IG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdvbGRfbWV0aG9kJwogCitVc2luZyBhIHNwZWNpZmljYXRpb24gYWxzbyBlbmFibGVzIGEgc21hcnRlciBtYXRjaGluZyBvZiBjYWxscyBtYWRlIHRvIHRoZQorbW9jaywgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHNvbWUgcGFyYW1ldGVycyB3ZXJlIHBhc3NlZCBhcyBwb3NpdGlvbmFsIG9yCituYW1lZCBhcmd1bWVudHM6OgorCisgICA+Pj4gZGVmIGYoYSwgYiwgYyk6IHBhc3MKKyAgIC4uLgorICAgPj4+IG1vY2sgPSBNb2NrKHNwZWM9ZikKKyAgID4+PiBtb2NrKDEsIDIsIDMpCisgICA8TW9jayBuYW1lPSdtb2NrKCknIGlkPScxNDAxNjE1ODA0NTY1NzYnPgorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGE9MSwgYj0yLCBjPTMpCisKK0lmIHlvdSB3YW50IHRoaXMgc21hcnRlciBtYXRjaGluZyB0byBhbHNvIHdvcmsgd2l0aCBtZXRob2QgY2FsbHMgb24gdGhlIG1vY2ssCit5b3UgY2FuIHVzZSA6cmVmOmBhdXRvLXNwZWNjaW5nIDxhdXRvLXNwZWNjaW5nPmAuCisKIElmIHlvdSB3YW50IGEgc3Ryb25nZXIgZm9ybSBvZiBzcGVjaWZpY2F0aW9uIHRoYXQgcHJldmVudHMgdGhlIHNldHRpbmcKIG9mIGFyYml0cmFyeSBhdHRyaWJ1dGVzIGFzIHdlbGwgYXMgdGhlIGdldHRpbmcgb2YgdGhlbSB0aGVuIHlvdSBjYW4gdXNlCi1gc3BlY19zZXRgIGluc3RlYWQgb2YgYHNwZWNgLgorKnNwZWNfc2V0KiBpbnN0ZWFkIG9mICpzcGVjKi4KIAogCiAKQEAgLTI4OCw4ICszMDIsOCBAQAogCiAuLiBub3RlOjoKIAotICAgV2l0aCBgcGF0Y2hgIGl0IG1hdHRlcnMgdGhhdCB5b3UgcGF0Y2ggb2JqZWN0cyBpbiB0aGUgbmFtZXNwYWNlIHdoZXJlIHRoZXkKLSAgIGFyZSBsb29rZWQgdXAuIFRoaXMgaXMgbm9ybWFsbHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgZm9yIGEgcXVpY2sgZ3VpZGUKKyAgIFdpdGggOmZ1bmM6YHBhdGNoYCBpdCBtYXR0ZXJzIHRoYXQgeW91IHBhdGNoIG9iamVjdHMgaW4gdGhlIG5hbWVzcGFjZSB3aGVyZQorICAgdGhleSBhcmUgbG9va2VkIHVwLiBUaGlzIGlzIG5vcm1hbGx5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGZvciBhIHF1aWNrIGd1aWRlCiAgICByZWFkIDpyZWY6YHdoZXJlIHRvIHBhdGNoIDx3aGVyZS10by1wYXRjaD5gLgogCiAKQEAgLTI5OSwxNSArMzEzLDE1IEBACiB0aGVtIGhhcyB0byBiZSB1bmRvbmUgYWZ0ZXIgdGhlIHRlc3Qgb3IgdGhlIHBhdGNoIHdpbGwgcGVyc2lzdCBpbnRvIG90aGVyCiB0ZXN0cyBhbmQgY2F1c2UgaGFyZCB0byBkaWFnbm9zZSBwcm9ibGVtcy4KIAotbW9jayBwcm92aWRlcyB0aHJlZSBjb252ZW5pZW50IGRlY29yYXRvcnMgZm9yIHRoaXM6IGBwYXRjaGAsIGBwYXRjaC5vYmplY3RgIGFuZAotYHBhdGNoLmRpY3RgLiBgcGF0Y2hgIHRha2VzIGEgc2luZ2xlIHN0cmluZywgb2YgdGhlIGZvcm0KLWBwYWNrYWdlLm1vZHVsZS5DbGFzcy5hdHRyaWJ1dGVgIHRvIHNwZWNpZnkgdGhlIGF0dHJpYnV0ZSB5b3UgYXJlIHBhdGNoaW5nLiBJdAorbW9jayBwcm92aWRlcyB0aHJlZSBjb252ZW5pZW50IGRlY29yYXRvcnMgZm9yIHRoaXM6IDpmdW5jOmBwYXRjaGAsIDpmdW5jOmBwYXRjaC5vYmplY3RgIGFuZAorOmZ1bmM6YHBhdGNoLmRpY3RgLiBgYHBhdGNoYGAgdGFrZXMgYSBzaW5nbGUgc3RyaW5nLCBvZiB0aGUgZm9ybQorYGBwYWNrYWdlLm1vZHVsZS5DbGFzcy5hdHRyaWJ1dGVgYCB0byBzcGVjaWZ5IHRoZSBhdHRyaWJ1dGUgeW91IGFyZSBwYXRjaGluZy4gSXQKIGFsc28gb3B0aW9uYWxseSB0YWtlcyBhIHZhbHVlIHRoYXQgeW91IHdhbnQgdGhlIGF0dHJpYnV0ZSAob3IgY2xhc3Mgb3IKIHdoYXRldmVyKSB0byBiZSByZXBsYWNlZCB3aXRoLiAncGF0Y2gub2JqZWN0JyB0YWtlcyBhbiBvYmplY3QgYW5kIHRoZSBuYW1lIG9mCiB0aGUgYXR0cmlidXRlIHlvdSB3b3VsZCBsaWtlIHBhdGNoZWQsIHBsdXMgb3B0aW9uYWxseSB0aGUgdmFsdWUgdG8gcGF0Y2ggaXQKIHdpdGguCiAKLWBwYXRjaC5vYmplY3RgOgorYGBwYXRjaC5vYmplY3RgYDoKIAogICAgID4+PiBvcmlnaW5hbCA9IFNvbWVDbGFzcy5hdHRyaWJ1dGUKICAgICA+Pj4gQHBhdGNoLm9iamVjdChTb21lQ2xhc3MsICdhdHRyaWJ1dGUnLCBzZW50aW5lbC5hdHRyaWJ1dGUpCkBAIC0zMjQsOCArMzM4LDggQEAKICAgICAuLi4KICAgICA+Pj4gdGVzdCgpCiAKLUlmIHlvdSBhcmUgcGF0Y2hpbmcgYSBtb2R1bGUgKGluY2x1ZGluZyA6bW9kOmBidWlsdGluc2ApIHRoZW4gdXNlIGBwYXRjaGAKLWluc3RlYWQgb2YgYHBhdGNoLm9iamVjdGA6CitJZiB5b3UgYXJlIHBhdGNoaW5nIGEgbW9kdWxlIChpbmNsdWRpbmcgOm1vZDpgYnVpbHRpbnNgKSB0aGVuIHVzZSA6ZnVuYzpgcGF0Y2hgCitpbnN0ZWFkIG9mIDpmdW5jOmBwYXRjaC5vYmplY3RgOgogCiAgICAgPj4+IG1vY2sgPSBNYWdpY01vY2socmV0dXJuX3ZhbHVlPXNlbnRpbmVsLmZpbGVfaGFuZGxlKQogICAgID4+PiB3aXRoIHBhdGNoKCdidWlsdGlucy5vcGVuJywgbW9jayk6CkBAIC0zMzQsNyArMzQ4LDcgQEAKICAgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoJ2ZpbGVuYW1lJywgJ3InKQogICAgID4+PiBhc3NlcnQgaGFuZGxlID09IHNlbnRpbmVsLmZpbGVfaGFuZGxlLCAiaW5jb3JyZWN0IGZpbGUgaGFuZGxlIHJldHVybmVkIgogCi1UaGUgbW9kdWxlIG5hbWUgY2FuIGJlICdkb3R0ZWQnLCBpbiB0aGUgZm9ybSBgcGFja2FnZS5tb2R1bGVgIGlmIG5lZWRlZDoKK1RoZSBtb2R1bGUgbmFtZSBjYW4gYmUgJ2RvdHRlZCcsIGluIHRoZSBmb3JtIGBgcGFja2FnZS5tb2R1bGVgYCBpZiBuZWVkZWQ6CiAKICAgICA+Pj4gQHBhdGNoKCdwYWNrYWdlLm1vZHVsZS5DbGFzc05hbWUuYXR0cmlidXRlJywgc2VudGluZWwuYXR0cmlidXRlKQogICAgIC4uLiBkZWYgdGVzdCgpOgpAQCAtMzU0LDggKzM2OCw4IEBACiAgICAgPj4+IE15VGVzdCgndGVzdF9zb21ldGhpbmcnKS50ZXN0X3NvbWV0aGluZygpCiAgICAgPj4+IGFzc2VydCBTb21lQ2xhc3MuYXR0cmlidXRlID09IG9yaWdpbmFsCiAKLUlmIHlvdSB3YW50IHRvIHBhdGNoIHdpdGggYSBNb2NrLCB5b3UgY2FuIHVzZSBgcGF0Y2hgIHdpdGggb25seSBvbmUgYXJndW1lbnQKLShvciBgcGF0Y2gub2JqZWN0YCB3aXRoIHR3byBhcmd1bWVudHMpLiBUaGUgbW9jayB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSBhbmQKK0lmIHlvdSB3YW50IHRvIHBhdGNoIHdpdGggYSBNb2NrLCB5b3UgY2FuIHVzZSA6ZnVuYzpgcGF0Y2hgIHdpdGggb25seSBvbmUgYXJndW1lbnQKKyhvciA6ZnVuYzpgcGF0Y2gub2JqZWN0YCB3aXRoIHR3byBhcmd1bWVudHMpLiBUaGUgbW9jayB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSBhbmQKIHBhc3NlZCBpbnRvIHRoZSB0ZXN0IGZ1bmN0aW9uIC8gbWV0aG9kOgogCiAgICAgPj4+IGNsYXNzIE15VGVzdCh1bml0dGVzdDIuVGVzdENhc2UpOgpAQCAtMzgwLDcgKzM5NCw3IEBACiBXaGVuIHlvdSBuZXN0IHBhdGNoIGRlY29yYXRvcnMgdGhlIG1vY2tzIGFyZSBwYXNzZWQgaW4gdG8gdGhlIGRlY29yYXRlZAogZnVuY3Rpb24gaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBhcHBsaWVkICh0aGUgbm9ybWFsICpweXRob24qIG9yZGVyIHRoYXQKIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQpLiBUaGlzIG1lYW5zIGZyb20gdGhlIGJvdHRvbSB1cCwgc28gaW4gdGhlIGV4YW1wbGUKLWFib3ZlIHRoZSBtb2NrIGZvciBgdGVzdF9tb2R1bGUuQ2xhc3NOYW1lMmAgaXMgcGFzc2VkIGluIGZpcnN0LgorYWJvdmUgdGhlIG1vY2sgZm9yIGBgdGVzdF9tb2R1bGUuQ2xhc3NOYW1lMmBgIGlzIHBhc3NlZCBpbiBmaXJzdC4KIAogVGhlcmUgaXMgYWxzbyA6ZnVuYzpgcGF0Y2guZGljdGAgZm9yIHNldHRpbmcgdmFsdWVzIGluIGEgZGljdGlvbmFyeSBqdXN0CiBkdXJpbmcgYSBzY29wZSBhbmQgcmVzdG9yaW5nIHRoZSBkaWN0aW9uYXJ5IHRvIGl0cyBvcmlnaW5hbCBzdGF0ZSB3aGVuIHRoZSB0ZXN0CkBAIC0zOTMsOSArNDA3LDkgQEAKICAgIC4uLgogICAgPj4+IGFzc2VydCBmb28gPT0gb3JpZ2luYWwKIAotYHBhdGNoYCwgYHBhdGNoLm9iamVjdGAgYW5kIGBwYXRjaC5kaWN0YCBjYW4gYWxsIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2Vycy4KK2BgcGF0Y2hgYCwgYGBwYXRjaC5vYmplY3RgYCBhbmQgYGBwYXRjaC5kaWN0YGAgY2FuIGFsbCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlcnMuCiAKLVdoZXJlIHlvdSB1c2UgYHBhdGNoYCB0byBjcmVhdGUgYSBtb2NrIGZvciB5b3UsIHlvdSBjYW4gZ2V0IGEgcmVmZXJlbmNlIHRvIHRoZQorV2hlcmUgeW91IHVzZSA6ZnVuYzpgcGF0Y2hgIHRvIGNyZWF0ZSBhIG1vY2sgZm9yIHlvdSwgeW91IGNhbiBnZXQgYSByZWZlcmVuY2UgdG8gdGhlCiBtb2NrIHVzaW5nIHRoZSAiYXMiIGZvcm0gb2YgdGhlIHdpdGggc3RhdGVtZW50OgogCiAgICAgPj4+IGNsYXNzIFByb2R1Y3Rpb25DbGFzczoKQEAgLTQxMCw3ICs0MjQsNyBAQAogICAgID4+PiBtb2NrX21ldGhvZC5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMiwgMykKIAogCi1BcyBhbiBhbHRlcm5hdGl2ZSBgcGF0Y2hgLCBgcGF0Y2gub2JqZWN0YCBhbmQgYHBhdGNoLmRpY3RgIGNhbiBiZSB1c2VkIGFzCitBcyBhbiBhbHRlcm5hdGl2ZSBgYHBhdGNoYGAsIGBgcGF0Y2gub2JqZWN0YGAgYW5kIGBgcGF0Y2guZGljdGBgIGNhbiBiZSB1c2VkIGFzCiBjbGFzcyBkZWNvcmF0b3JzLiBXaGVuIHVzZWQgaW4gdGhpcyB3YXkgaXQgaXMgdGhlIHNhbWUgYXMgYXBwbHlpbmcgdGhlCiBkZWNvcmF0b3IgaW5kaXZpZHVhbGx5IHRvIGV2ZXJ5IG1ldGhvZCB3aG9zZSBuYW1lIHN0YXJ0cyB3aXRoICJ0ZXN0Ii4KIApAQCAtNDI5LDExICs0NDMsMTEgQEAKIAogTW9ja2luZyBjaGFpbmVkIGNhbGxzIGlzIGFjdHVhbGx5IHN0cmFpZ2h0Zm9yd2FyZCB3aXRoIG1vY2sgb25jZSB5b3UKIHVuZGVyc3RhbmQgdGhlIDphdHRyOmB+TW9jay5yZXR1cm5fdmFsdWVgIGF0dHJpYnV0ZS4gV2hlbiBhIG1vY2sgaXMgY2FsbGVkIGZvcgotdGhlIGZpcnN0IHRpbWUsIG9yIHlvdSBmZXRjaCBpdHMgYHJldHVybl92YWx1ZWAgYmVmb3JlIGl0IGhhcyBiZWVuIGNhbGxlZCwgYQotbmV3IGBNb2NrYCBpcyBjcmVhdGVkLgordGhlIGZpcnN0IHRpbWUsIG9yIHlvdSBmZXRjaCBpdHMgYGByZXR1cm5fdmFsdWVgYCBiZWZvcmUgaXQgaGFzIGJlZW4gY2FsbGVkLCBhCituZXcgOmNsYXNzOmBNb2NrYCBpcyBjcmVhdGVkLgogCiBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBzZWUgaG93IHRoZSBvYmplY3QgcmV0dXJuZWQgZnJvbSBhIGNhbGwgdG8gYSBtb2NrZWQKLW9iamVjdCBoYXMgYmVlbiB1c2VkIGJ5IGludGVycm9nYXRpbmcgdGhlIGByZXR1cm5fdmFsdWVgIG1vY2s6CitvYmplY3QgaGFzIGJlZW4gdXNlZCBieSBpbnRlcnJvZ2F0aW5nIHRoZSBgYHJldHVybl92YWx1ZWBgIG1vY2s6CiAKICAgICA+Pj4gbW9jayA9IE1vY2soKQogICAgID4+PiBtb2NrKCkuZm9vKGE9MiwgYj0zKQpAQCAtNDUzLDIyICs0NjcsMjIgQEAKICAgICAuLi4gICAgICAgICByZXNwb25zZSA9IHNlbGYuYmFja2VuZC5nZXRfZW5kcG9pbnQoJ2Zvb2JhcicpLmNyZWF0ZV9jYWxsKCdzcGFtJywgJ2VnZ3MnKS5zdGFydF9jYWxsKCkKICAgICAuLi4gICAgICAgICAjIG1vcmUgY29kZQogCi1Bc3N1bWluZyB0aGF0IGBCYWNrZW5kUHJvdmlkZXJgIGlzIGFscmVhZHkgd2VsbCB0ZXN0ZWQsIGhvdyBkbyB3ZSB0ZXN0Ci1gbWV0aG9kKClgPyBTcGVjaWZpY2FsbHksIHdlIHdhbnQgdG8gdGVzdCB0aGF0IHRoZSBjb2RlIHNlY3Rpb24gYCMgbW9yZQotY29kZWAgdXNlcyB0aGUgcmVzcG9uc2Ugb2JqZWN0IGluIHRoZSBjb3JyZWN0IHdheS4KK0Fzc3VtaW5nIHRoYXQgYGBCYWNrZW5kUHJvdmlkZXJgYCBpcyBhbHJlYWR5IHdlbGwgdGVzdGVkLCBob3cgZG8gd2UgdGVzdAorYGBtZXRob2QoKWBgPyBTcGVjaWZpY2FsbHksIHdlIHdhbnQgdG8gdGVzdCB0aGF0IHRoZSBjb2RlIHNlY3Rpb24gYGAjIG1vcmUKK2NvZGVgYCB1c2VzIHRoZSByZXNwb25zZSBvYmplY3QgaW4gdGhlIGNvcnJlY3Qgd2F5LgogCiBBcyB0aGlzIGNoYWluIG9mIGNhbGxzIGlzIG1hZGUgZnJvbSBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgd2UgY2FuIG1vbmtleSBwYXRjaAotdGhlIGBiYWNrZW5kYCBhdHRyaWJ1dGUgb24gYSBgU29tZXRoaW5nYCBpbnN0YW5jZS4gSW4gdGhpcyBwYXJ0aWN1bGFyIGNhc2UKK3RoZSBgYGJhY2tlbmRgYCBhdHRyaWJ1dGUgb24gYSBgYFNvbWV0aGluZ2BgIGluc3RhbmNlLiBJbiB0aGlzIHBhcnRpY3VsYXIgY2FzZQogd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aGUgcmV0dXJuIHZhbHVlIGZyb20gdGhlIGZpbmFsIGNhbGwgdG8KLWBzdGFydF9jYWxsYCBzbyB3ZSBkb24ndCBoYXZlIG11Y2ggY29uZmlndXJhdGlvbiB0byBkby4gTGV0J3MgYXNzdW1lIHRoZQorYGBzdGFydF9jYWxsYGAgc28gd2UgZG9uJ3QgaGF2ZSBtdWNoIGNvbmZpZ3VyYXRpb24gdG8gZG8uIExldCdzIGFzc3VtZSB0aGUKIG9iamVjdCBpdCByZXR1cm5zIGlzICdmaWxlLWxpa2UnLCBzbyB3ZSdsbCBlbnN1cmUgdGhhdCBvdXIgcmVzcG9uc2Ugb2JqZWN0Ci11c2VzIHRoZSBidWlsdGluIGBvcGVuYCBhcyBpdHMgYHNwZWNgLgordXNlcyB0aGUgYnVpbHRpbiA6ZnVuYzpgb3BlbmAgYXMgaXRzIGBgc3BlY2BgLgogCiBUbyBkbyB0aGlzIHdlIGNyZWF0ZSBhIG1vY2sgaW5zdGFuY2UgYXMgb3VyIG1vY2sgYmFja2VuZCBhbmQgY3JlYXRlIGEgbW9jawogcmVzcG9uc2Ugb2JqZWN0IGZvciBpdC4gVG8gc2V0IHRoZSByZXNwb25zZSBhcyB0aGUgcmV0dXJuIHZhbHVlIGZvciB0aGF0IGZpbmFsCi1gc3RhcnRfY2FsbGAgd2UgY291bGQgZG8gdGhpczoKK2Bgc3RhcnRfY2FsbGBgIHdlIGNvdWxkIGRvIHRoaXM6OgogCi0gICAgYG1vY2tfYmFja2VuZC5nZXRfZW5kcG9pbnQucmV0dXJuX3ZhbHVlLmNyZWF0ZV9jYWxsLnJldHVybl92YWx1ZS5zdGFydF9jYWxsLnJldHVybl92YWx1ZSA9IG1vY2tfcmVzcG9uc2VgLgorICAgIG1vY2tfYmFja2VuZC5nZXRfZW5kcG9pbnQucmV0dXJuX3ZhbHVlLmNyZWF0ZV9jYWxsLnJldHVybl92YWx1ZS5zdGFydF9jYWxsLnJldHVybl92YWx1ZSA9IG1vY2tfcmVzcG9uc2UKIAogV2UgY2FuIGRvIHRoYXQgaW4gYSBzbGlnaHRseSBuaWNlciB3YXkgdXNpbmcgdGhlIDptZXRoOmB+TW9jay5jb25maWd1cmVfbW9ja2AKIG1ldGhvZCB0byBkaXJlY3RseSBzZXQgdGhlIHJldHVybiB2YWx1ZSBmb3IgdXM6CkBAIC00ODcsNyArNTAxLDcgQEAKIAogVXNpbmcgOmF0dHI6YH5Nb2NrLm1vY2tfY2FsbHNgIHdlIGNhbiBjaGVjayB0aGUgY2hhaW5lZCBjYWxsIHdpdGggYSBzaW5nbGUKIGFzc2VydC4gQSBjaGFpbmVkIGNhbGwgaXMgc2V2ZXJhbCBjYWxscyBpbiBvbmUgbGluZSBvZiBjb2RlLCBzbyB0aGVyZSB3aWxsIGJlCi1zZXZlcmFsIGVudHJpZXMgaW4gYG1vY2tfY2FsbHNgLiBXZSBjYW4gdXNlIDptZXRoOmBjYWxsLmNhbGxfbGlzdGAgdG8gY3JlYXRlCitzZXZlcmFsIGVudHJpZXMgaW4gYGBtb2NrX2NhbGxzYGAuIFdlIGNhbiB1c2UgOm1ldGg6YGNhbGwuY2FsbF9saXN0YCB0byBjcmVhdGUKIHRoaXMgbGlzdCBvZiBjYWxscyBmb3IgdXM6CiAKICAgICA+Pj4gY2hhaW5lZCA9IGNhbGwuZ2V0X2VuZHBvaW50KCdmb29iYXInKS5jcmVhdGVfY2FsbCgnc3BhbScsICdlZ2dzJykuc3RhcnRfY2FsbCgpCkBAIC00OTgsMjEgKzUxMiwyMCBAQAogUGFydGlhbCBtb2NraW5nCiB+fn5+fn5+fn5+fn5+fn4KIAotSW4gc29tZSB0ZXN0cyBJIHdhbnRlZCB0byBtb2NrIG91dCBhIGNhbGwgdG8gYGRhdGV0aW1lLmRhdGUudG9kYXkoKQotPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS9kYXRldGltZS5odG1sI2RhdGV0aW1lLmRhdGUudG9kYXk+YF8gdG8gcmV0dXJuCi1hIGtub3duIGRhdGUsIGJ1dCBJIGRpZG4ndCB3YW50IHRvIHByZXZlbnQgdGhlIGNvZGUgdW5kZXIgdGVzdCBmcm9tCi1jcmVhdGluZyBuZXcgZGF0ZSBvYmplY3RzLiBVbmZvcnR1bmF0ZWx5IGBkYXRldGltZS5kYXRlYCBpcyB3cml0dGVuIGluIEMsIGFuZAotc28gSSBjb3VsZG4ndCBqdXN0IG1vbmtleS1wYXRjaCBvdXQgdGhlIHN0YXRpYyBgZGF0ZS50b2RheWAgbWV0aG9kLgorSW4gc29tZSB0ZXN0cyBJIHdhbnRlZCB0byBtb2NrIG91dCBhIGNhbGwgdG8gOm1ldGg6YGRhdGV0aW1lLmRhdGUudG9kYXlgCit0byByZXR1cm4gYSBrbm93biBkYXRlLCBidXQgSSBkaWRuJ3Qgd2FudCB0byBwcmV2ZW50IHRoZSBjb2RlIHVuZGVyIHRlc3QgZnJvbQorY3JlYXRpbmcgbmV3IGRhdGUgb2JqZWN0cy4gVW5mb3J0dW5hdGVseSA6Y2xhc3M6YGRhdGV0aW1lLmRhdGVgIGlzIHdyaXR0ZW4gaW4gQywgYW5kCitzbyBJIGNvdWxkbid0IGp1c3QgbW9ua2V5LXBhdGNoIG91dCB0aGUgc3RhdGljIDptZXRoOmBkYXRlLnRvZGF5YCBtZXRob2QuCiAKIEkgZm91bmQgYSBzaW1wbGUgd2F5IG9mIGRvaW5nIHRoaXMgdGhhdCBpbnZvbHZlZCBlZmZlY3RpdmVseSB3cmFwcGluZyB0aGUgZGF0ZQogY2xhc3Mgd2l0aCBhIG1vY2ssIGJ1dCBwYXNzaW5nIHRocm91Z2ggY2FsbHMgdG8gdGhlIGNvbnN0cnVjdG9yIHRvIHRoZSByZWFsCiBjbGFzcyAoYW5kIHJldHVybmluZyByZWFsIGluc3RhbmNlcykuCiAKIFRoZSA6ZnVuYzpgcGF0Y2ggZGVjb3JhdG9yIDxwYXRjaD5gIGlzIHVzZWQgaGVyZSB0bwotbW9jayBvdXQgdGhlIGBkYXRlYCBjbGFzcyBpbiB0aGUgbW9kdWxlIHVuZGVyIHRlc3QuIFRoZSA6YXR0cjpgc2lkZV9lZmZlY3RgCittb2NrIG91dCB0aGUgYGBkYXRlYGAgY2xhc3MgaW4gdGhlIG1vZHVsZSB1bmRlciB0ZXN0LiBUaGUgOmF0dHI6YHNpZGVfZWZmZWN0YAogYXR0cmlidXRlIG9uIHRoZSBtb2NrIGRhdGUgY2xhc3MgaXMgdGhlbiBzZXQgdG8gYSBsYW1iZGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zCiBhIHJlYWwgZGF0ZS4gV2hlbiB0aGUgbW9jayBkYXRlIGNsYXNzIGlzIGNhbGxlZCBhIHJlYWwgZGF0ZSB3aWxsIGJlCi1jb25zdHJ1Y3RlZCBhbmQgcmV0dXJuZWQgYnkgYHNpZGVfZWZmZWN0YC4KK2NvbnN0cnVjdGVkIGFuZCByZXR1cm5lZCBieSBgYHNpZGVfZWZmZWN0YGAuCiAKICAgICA+Pj4gZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQogICAgID4+PiB3aXRoIHBhdGNoKCdteW1vZHVsZS5kYXRlJykgYXMgbW9ja19kYXRlOgpAQCAtNTIzLDM0ICs1MzYsMzIgQEAKICAgICAuLi4gICAgIGFzc2VydCBteW1vZHVsZS5kYXRlKDIwMDksIDYsIDgpID09IGRhdGUoMjAwOSwgNiwgOCkKICAgICAuLi4KIAotTm90ZSB0aGF0IHdlIGRvbid0IHBhdGNoIGBkYXRldGltZS5kYXRlYCBnbG9iYWxseSwgd2UgcGF0Y2ggYGRhdGVgIGluIHRoZQorTm90ZSB0aGF0IHdlIGRvbid0IHBhdGNoIDpjbGFzczpgZGF0ZXRpbWUuZGF0ZWAgZ2xvYmFsbHksIHdlIHBhdGNoIGBgZGF0ZWBgIGluIHRoZQogbW9kdWxlIHRoYXQgKnVzZXMqIGl0LiBTZWUgOnJlZjpgd2hlcmUgdG8gcGF0Y2ggPHdoZXJlLXRvLXBhdGNoPmAuCiAKLVdoZW4gYGRhdGUudG9kYXkoKWAgaXMgY2FsbGVkIGEga25vd24gZGF0ZSBpcyByZXR1cm5lZCwgYnV0IGNhbGxzIHRvIHRoZQotYGRhdGUoLi4uKWAgY29uc3RydWN0b3Igc3RpbGwgcmV0dXJuIG5vcm1hbCBkYXRlcy4gV2l0aG91dCB0aGlzIHlvdSBjYW4gZmluZAorV2hlbiBgYGRhdGUudG9kYXkoKWBgIGlzIGNhbGxlZCBhIGtub3duIGRhdGUgaXMgcmV0dXJuZWQsIGJ1dCBjYWxscyB0byB0aGUKK2BgZGF0ZSguLi4pYGAgY29uc3RydWN0b3Igc3RpbGwgcmV0dXJuIG5vcm1hbCBkYXRlcy4gV2l0aG91dCB0aGlzIHlvdSBjYW4gZmluZAogeW91cnNlbGYgaGF2aW5nIHRvIGNhbGN1bGF0ZSBhbiBleHBlY3RlZCByZXN1bHQgdXNpbmcgZXhhY3RseSB0aGUgc2FtZQogYWxnb3JpdGhtIGFzIHRoZSBjb2RlIHVuZGVyIHRlc3QsIHdoaWNoIGlzIGEgY2xhc3NpYyB0ZXN0aW5nIGFudGktcGF0dGVybi4KIAotQ2FsbHMgdG8gdGhlIGRhdGUgY29uc3RydWN0b3IgYXJlIHJlY29yZGVkIGluIHRoZSBgbW9ja19kYXRlYCBhdHRyaWJ1dGVzCi0oYGNhbGxfY291bnRgIGFuZCBmcmllbmRzKSB3aGljaCBtYXkgYWxzbyBiZSB1c2VmdWwgZm9yIHlvdXIgdGVzdHMuCitDYWxscyB0byB0aGUgZGF0ZSBjb25zdHJ1Y3RvciBhcmUgcmVjb3JkZWQgaW4gdGhlIGBgbW9ja19kYXRlYGAgYXR0cmlidXRlcworKGBgY2FsbF9jb3VudGBgIGFuZCBmcmllbmRzKSB3aGljaCBtYXkgYWxzbyBiZSB1c2VmdWwgZm9yIHlvdXIgdGVzdHMuCiAKIEFuIGFsdGVybmF0aXZlIHdheSBvZiBkZWFsaW5nIHdpdGggbW9ja2luZyBkYXRlcywgb3Igb3RoZXIgYnVpbHRpbiBjbGFzc2VzLAogaXMgZGlzY3Vzc2VkIGluIGB0aGlzIGJsb2cgZW50cnkKLTxodHRwOi8vd2lsbGlhbWpvaG5iZXJ0LmNvbS8yMDExLzA3L2hvdy10by11bml0LXRlc3RpbmctaW4tZGphbmdvLXdpdGgtbW9ja2luZy1hbmQtcGF0Y2hpbmcvPmBfLgorPGh0dHA6Ly93d3cud2lsbGlhbWpvaG5iZXJ0LmNvbS8yMDExLzA3L2hvdy10by11bml0LXRlc3RpbmctaW4tZGphbmdvLXdpdGgtbW9ja2luZy1hbmQtcGF0Y2hpbmcvPmBfLgogCiAKIE1vY2tpbmcgYSBHZW5lcmF0b3IgTWV0aG9kCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCi1BIFB5dGhvbiBnZW5lcmF0b3IgaXMgYSBmdW5jdGlvbiBvciBtZXRob2QgdGhhdCB1c2VzIHRoZSBgeWllbGQgc3RhdGVtZW50Ci08aHR0cDovL2RvY3MucHl0aG9uLm9yZy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLmh0bWwjdGhlLXlpZWxkLXN0YXRlbWVudD5gXyB0bwotcmV0dXJuIGEgc2VyaWVzIG9mIHZhbHVlcyB3aGVuIGl0ZXJhdGVkIG92ZXIgWyNdXy4KK0EgUHl0aG9uIGdlbmVyYXRvciBpcyBhIGZ1bmN0aW9uIG9yIG1ldGhvZCB0aGF0IHVzZXMgdGhlIDprZXl3b3JkOmB5aWVsZGAgc3RhdGVtZW50Cit0byByZXR1cm4gYSBzZXJpZXMgb2YgdmFsdWVzIHdoZW4gaXRlcmF0ZWQgb3ZlciBbI11fLgogCiBBIGdlbmVyYXRvciBtZXRob2QgLyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gcmV0dXJuIHRoZSBnZW5lcmF0b3Igb2JqZWN0LiBJdCBpcwogdGhlIGdlbmVyYXRvciBvYmplY3QgdGhhdCBpcyB0aGVuIGl0ZXJhdGVkIG92ZXIuIFRoZSBwcm90b2NvbCBtZXRob2QgZm9yCi1pdGVyYXRpb24gaXMgYF9faXRlcl9fCi08aHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3N0ZHR5cGVzLmh0bWwjY29udGFpbmVyLl9faXRlcl9fPmBfLCBzbyB3ZSBjYW4KLW1vY2sgdGhpcyB1c2luZyBhIGBNYWdpY01vY2tgLgoraXRlcmF0aW9uIGlzIDptZXRoOmB+Y29udGFpbmVyLl9faXRlcl9fYCwgc28gd2UgY2FuCittb2NrIHRoaXMgdXNpbmcgYSA6Y2xhc3M6YE1hZ2ljTW9ja2AuCiAKIEhlcmUncyBhbiBleGFtcGxlIGNsYXNzIHdpdGggYW4gIml0ZXIiIG1ldGhvZCBpbXBsZW1lbnRlZCBhcyBhIGdlbmVyYXRvcjoKIApAQCAtNTY3LDcgKzU3OCw3IEBACiBIb3cgd291bGQgd2UgbW9jayB0aGlzIGNsYXNzLCBhbmQgaW4gcGFydGljdWxhciBpdHMgIml0ZXIiIG1ldGhvZD8KIAogVG8gY29uZmlndXJlIHRoZSB2YWx1ZXMgcmV0dXJuZWQgZnJvbSB0aGUgaXRlcmF0aW9uIChpbXBsaWNpdCBpbiB0aGUgY2FsbCB0bwotYGxpc3RgKSwgd2UgbmVlZCB0byBjb25maWd1cmUgdGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGUgY2FsbCB0byBgZm9vLml0ZXIoKWAuCis6Y2xhc3M6YGxpc3RgKSwgd2UgbmVlZCB0byBjb25maWd1cmUgdGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGUgY2FsbCB0byBgYGZvby5pdGVyKClgYC4KIAogICAgID4+PiBtb2NrX2ZvbyA9IE1hZ2ljTW9jaygpCiAgICAgPj4+IG1vY2tfZm9vLml0ZXIucmV0dXJuX3ZhbHVlID0gaXRlcihbMSwgMiwgM10pCkBAIC01ODYsMTAgKzU5NywxMCBAQAogCiBJZiB5b3Ugd2FudCBzZXZlcmFsIHBhdGNoZXMgaW4gcGxhY2UgZm9yIG11bHRpcGxlIHRlc3QgbWV0aG9kcyB0aGUgb2J2aW91cyB3YXkKIGlzIHRvIGFwcGx5IHRoZSBwYXRjaCBkZWNvcmF0b3JzIHRvIGV2ZXJ5IG1ldGhvZC4gVGhpcyBjYW4gZmVlbCBsaWtlIHVubmVjZXNzYXJ5Ci1yZXBldGl0aW9uLiBGb3IgUHl0aG9uIDIuNiBvciBtb3JlIHJlY2VudCB5b3UgY2FuIHVzZSBgcGF0Y2hgIChpbiBhbGwgaXRzCityZXBldGl0aW9uLiBGb3IgUHl0aG9uIDIuNiBvciBtb3JlIHJlY2VudCB5b3UgY2FuIHVzZSA6ZnVuYzpgcGF0Y2hgIChpbiBhbGwgaXRzCiB2YXJpb3VzIGZvcm1zKSBhcyBhIGNsYXNzIGRlY29yYXRvci4gVGhpcyBhcHBsaWVzIHRoZSBwYXRjaGVzIHRvIGFsbCB0ZXN0CiBtZXRob2RzIG9uIHRoZSBjbGFzcy4gQSB0ZXN0IG1ldGhvZCBpcyBpZGVudGlmaWVkIGJ5IG1ldGhvZHMgd2hvc2UgbmFtZXMgc3RhcnQKLXdpdGggYHRlc3RgOgord2l0aCBgYHRlc3RgYDoKIAogICAgID4+PiBAcGF0Y2goJ215bW9kdWxlLlNvbWVDbGFzcycpCiAgICAgLi4uIGNsYXNzIE15VGVzdChUZXN0Q2FzZSk6CkBAIC02MDksNyArNjIwLDcgQEAKICAgICAnc29tZXRoaW5nJwogCiBBbiBhbHRlcm5hdGl2ZSB3YXkgb2YgbWFuYWdpbmcgcGF0Y2hlcyBpcyB0byB1c2UgdGhlIDpyZWY6YHN0YXJ0LWFuZC1zdG9wYC4KLVRoZXNlIGFsbG93IHlvdSB0byBtb3ZlIHRoZSBwYXRjaGluZyBpbnRvIHlvdXIgYHNldFVwYCBhbmQgYHRlYXJEb3duYCBtZXRob2RzLgorVGhlc2UgYWxsb3cgeW91IHRvIG1vdmUgdGhlIHBhdGNoaW5nIGludG8geW91ciBgYHNldFVwYGAgYW5kIGBgdGVhckRvd25gYCBtZXRob2RzLgogCiAgICAgPj4+IGNsYXNzIE15VGVzdChUZXN0Q2FzZSk6CiAgICAgLi4uICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC02MjUsNyArNjM2LDcgQEAKICAgICA+Pj4gTXlUZXN0KCd0ZXN0X2ZvbycpLnJ1bigpCiAKIElmIHlvdSB1c2UgdGhpcyB0ZWNobmlxdWUgeW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIHBhdGNoaW5nIGlzICJ1bmRvbmUiIGJ5Ci1jYWxsaW5nIGBzdG9wYC4gVGhpcyBjYW4gYmUgZmlkZGxpZXIgdGhhbiB5b3UgbWlnaHQgdGhpbmssIGJlY2F1c2UgaWYgYW4KK2NhbGxpbmcgYGBzdG9wYGAuIFRoaXMgY2FuIGJlIGZpZGRsaWVyIHRoYW4geW91IG1pZ2h0IHRoaW5rLCBiZWNhdXNlIGlmIGFuCiBleGNlcHRpb24gaXMgcmFpc2VkIGluIHRoZSBzZXRVcCB0aGVuIHRlYXJEb3duIGlzIG5vdCBjYWxsZWQuCiA6bWV0aDpgdW5pdHRlc3QuVGVzdENhc2UuYWRkQ2xlYW51cGAgbWFrZXMgdGhpcyBlYXNpZXI6CiAKQEAgLTY1NSwxMyArNjY2LDEzIEBACiBwYXRjaCBvdXQgbWV0aG9kcyB3aXRoIGEgbW9jayB0aGF0IGhhdmluZyB0byBjcmVhdGUgYSByZWFsIGZ1bmN0aW9uIGJlY29tZXMgYQogbnVpc2FuY2UuCiAKLUlmIHlvdSBwYXNzIGBhdXRvc3BlYz1UcnVlYCB0byBwYXRjaCB0aGVuIGl0IGRvZXMgdGhlIHBhdGNoaW5nIHdpdGggYQorSWYgeW91IHBhc3MgYGBhdXRvc3BlYz1UcnVlYGAgdG8gcGF0Y2ggdGhlbiBpdCBkb2VzIHRoZSBwYXRjaGluZyB3aXRoIGEKICpyZWFsKiBmdW5jdGlvbiBvYmplY3QuIFRoaXMgZnVuY3Rpb24gb2JqZWN0IGhhcyB0aGUgc2FtZSBzaWduYXR1cmUgYXMgdGhlIG9uZQogaXQgaXMgcmVwbGFjaW5nLCBidXQgZGVsZWdhdGVzIHRvIGEgbW9jayB1bmRlciB0aGUgaG9vZC4gWW91IHN0aWxsIGdldCB5b3VyCiBtb2NrIGF1dG8tY3JlYXRlZCBpbiBleGFjdGx5IHRoZSBzYW1lIHdheSBhcyBiZWZvcmUuIFdoYXQgaXQgbWVhbnMgdGhvdWdoLCBpcwogdGhhdCBpZiB5b3UgdXNlIGl0IHRvIHBhdGNoIG91dCBhbiB1bmJvdW5kIG1ldGhvZCBvbiBhIGNsYXNzIHRoZSBtb2NrZWQKIGZ1bmN0aW9uIHdpbGwgYmUgdHVybmVkIGludG8gYSBib3VuZCBtZXRob2QgaWYgaXQgaXMgZmV0Y2hlZCBmcm9tIGFuIGluc3RhbmNlLgotSXQgd2lsbCBoYXZlIGBzZWxmYCBwYXNzZWQgaW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCB3aGljaCBpcyBleGFjdGx5IHdoYXQgSQorSXQgd2lsbCBoYXZlIGBgc2VsZmBgIHBhc3NlZCBpbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQsIHdoaWNoIGlzIGV4YWN0bHkgd2hhdCBJCiB3YW50ZWQ6CiAKICAgICA+Pj4gY2xhc3MgRm9vOgpAQCAtNjc2LDggKzY4Nyw4IEBACiAgICAgJ2ZvbycKICAgICA+Pj4gbW9ja19mb28uYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoZm9vKQogCi1JZiB3ZSBkb24ndCB1c2UgYGF1dG9zcGVjPVRydWVgIHRoZW4gdGhlIHVuYm91bmQgbWV0aG9kIGlzIHBhdGNoZWQgb3V0Ci13aXRoIGEgTW9jayBpbnN0YW5jZSBpbnN0ZWFkLCBhbmQgaXNuJ3QgY2FsbGVkIHdpdGggYHNlbGZgLgorSWYgd2UgZG9uJ3QgdXNlIGBgYXV0b3NwZWM9VHJ1ZWBgIHRoZW4gdGhlIHVuYm91bmQgbWV0aG9kIGlzIHBhdGNoZWQgb3V0Cit3aXRoIGEgTW9jayBpbnN0YW5jZSBpbnN0ZWFkLCBhbmQgaXNuJ3QgY2FsbGVkIHdpdGggYGBzZWxmYGAuCiAKIAogQ2hlY2tpbmcgbXVsdGlwbGUgY2FsbHMgd2l0aCBtb2NrCkBAIC03MDEsNyArNzEyLDcgQEAKICAgICAgICAgLi4uCiAgICAgQXNzZXJ0aW9uRXJyb3I6IEV4cGVjdGVkIHRvIGJlIGNhbGxlZCBvbmNlLiBDYWxsZWQgMiB0aW1lcy4KIAotQm90aCBgYXNzZXJ0X2NhbGxlZF93aXRoYCBhbmQgYGFzc2VydF9jYWxsZWRfb25jZV93aXRoYCBtYWtlIGFzc2VydGlvbnMgYWJvdXQKK0JvdGggYGBhc3NlcnRfY2FsbGVkX3dpdGhgYCBhbmQgYGBhc3NlcnRfY2FsbGVkX29uY2Vfd2l0aGBgIG1ha2UgYXNzZXJ0aW9ucyBhYm91dAogdGhlICptb3N0IHJlY2VudCogY2FsbC4gSWYgeW91ciBtb2NrIGlzIGdvaW5nIHRvIGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzLCBhbmQKIHlvdSB3YW50IHRvIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCAqYWxsKiB0aG9zZSBjYWxscyB5b3UgY2FuIHVzZQogOmF0dHI6YH5Nb2NrLmNhbGxfYXJnc19saXN0YDoKQEAgLTcxNCw4ICs3MjUsOCBAQAogICAgIFtjYWxsKDEsIDIsIDMpLCBjYWxsKDQsIDUsIDYpLCBjYWxsKCldCiAKIFRoZSA6ZGF0YTpgY2FsbGAgaGVscGVyIG1ha2VzIGl0IGVhc3kgdG8gbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIGNhbGxzLiBZb3UKLWNhbiBidWlsZCB1cCBhIGxpc3Qgb2YgZXhwZWN0ZWQgY2FsbHMgYW5kIGNvbXBhcmUgaXQgdG8gYGNhbGxfYXJnc19saXN0YC4gVGhpcwotbG9va3MgcmVtYXJrYWJseSBzaW1pbGFyIHRvIHRoZSByZXByIG9mIHRoZSBgY2FsbF9hcmdzX2xpc3RgOgorY2FuIGJ1aWxkIHVwIGEgbGlzdCBvZiBleHBlY3RlZCBjYWxscyBhbmQgY29tcGFyZSBpdCB0byBgYGNhbGxfYXJnc19saXN0YGAuIFRoaXMKK2xvb2tzIHJlbWFya2FibHkgc2ltaWxhciB0byB0aGUgcmVwciBvZiB0aGUgYGBjYWxsX2FyZ3NfbGlzdGBgOgogCiAgICAgPj4+IGV4cGVjdGVkID0gW2NhbGwoMSwgMiwgMyksIGNhbGwoNCwgNSwgNiksIGNhbGwoKV0KICAgICA+Pj4gbW9jay5jYWxsX2FyZ3NfbGlzdCA9PSBleHBlY3RlZApAQCAtNzI2LDcgKzczNyw3IEBACiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogCiBBbm90aGVyIHNpdHVhdGlvbiBpcyByYXJlLCBidXQgY2FuIGJpdGUgeW91LCBpcyB3aGVuIHlvdXIgbW9jayBpcyBjYWxsZWQgd2l0aAotbXV0YWJsZSBhcmd1bWVudHMuIGBjYWxsX2FyZ3NgIGFuZCBgY2FsbF9hcmdzX2xpc3RgIHN0b3JlICpyZWZlcmVuY2VzKiB0byB0aGUKK211dGFibGUgYXJndW1lbnRzLiBgYGNhbGxfYXJnc2BgIGFuZCBgYGNhbGxfYXJnc19saXN0YGAgc3RvcmUgKnJlZmVyZW5jZXMqIHRvIHRoZQogYXJndW1lbnRzLiBJZiB0aGUgYXJndW1lbnRzIGFyZSBtdXRhdGVkIGJ5IHRoZSBjb2RlIHVuZGVyIHRlc3QgdGhlbiB5b3UgY2FuIG5vCiBsb25nZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHdoYXQgdGhlIHZhbHVlcyB3ZXJlIHdoZW4gdGhlIG1vY2sgd2FzIGNhbGxlZC4KIApAQCAtNzQxLDI4ICs3NTIsMjggQEAKICAgICAgICAgZnJvYih2YWwpCiAgICAgICAgIHZhbC5jbGVhcigpCiAKLVdoZW4gd2UgdHJ5IHRvIHRlc3QgdGhhdCBgZ3JvYmAgY2FsbHMgYGZyb2JgIHdpdGggdGhlIGNvcnJlY3QgYXJndW1lbnQgbG9vaworV2hlbiB3ZSB0cnkgdG8gdGVzdCB0aGF0IGBgZ3JvYmBgIGNhbGxzIGBgZnJvYmBgIHdpdGggdGhlIGNvcnJlY3QgYXJndW1lbnQgbG9vawogd2hhdCBoYXBwZW5zOgogCiAgICAgPj4+IHdpdGggcGF0Y2goJ215bW9kdWxlLmZyb2InKSBhcyBtb2NrX2Zyb2I6Ci0gICAgLi4uICAgICB2YWwgPSBzZXQoWzZdKQorICAgIC4uLiAgICAgdmFsID0gezZ9CiAgICAgLi4uICAgICBteW1vZHVsZS5ncm9iKHZhbCkKICAgICAuLi4KICAgICA+Pj4gdmFsCi0gICAgc2V0KFtdKQotICAgID4+PiBtb2NrX2Zyb2IuYXNzZXJ0X2NhbGxlZF93aXRoKHNldChbNl0pKQorICAgIHNldCgpCisgICAgPj4+IG1vY2tfZnJvYi5hc3NlcnRfY2FsbGVkX3dpdGgoezZ9KQogICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAgLi4uCi0gICAgQXNzZXJ0aW9uRXJyb3I6IEV4cGVjdGVkOiAoKHNldChbNl0pLCksIHt9KQotICAgIENhbGxlZCB3aXRoOiAoKHNldChbXSksKSwge30pCisgICAgQXNzZXJ0aW9uRXJyb3I6IEV4cGVjdGVkOiAoKHs2fSwpLCB7fSkKKyAgICBDYWxsZWQgd2l0aDogKChzZXQoKSwpLCB7fSkKIAogT25lIHBvc3NpYmlsaXR5IHdvdWxkIGJlIGZvciBtb2NrIHRvIGNvcHkgdGhlIGFyZ3VtZW50cyB5b3UgcGFzcyBpbi4gVGhpcwogY291bGQgdGhlbiBjYXVzZSBwcm9ibGVtcyBpZiB5b3UgZG8gYXNzZXJ0aW9ucyB0aGF0IHJlbHkgb24gb2JqZWN0IGlkZW50aXR5CiBmb3IgZXF1YWxpdHkuCiAKIEhlcmUncyBvbmUgc29sdXRpb24gdGhhdCB1c2VzIHRoZSA6YXR0cjpgc2lkZV9lZmZlY3RgCi1mdW5jdGlvbmFsaXR5LiBJZiB5b3UgcHJvdmlkZSBhIGBzaWRlX2VmZmVjdGAgZnVuY3Rpb24gZm9yIGEgbW9jayB0aGVuCi1gc2lkZV9lZmZlY3RgIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgYXJncyBhcyB0aGUgbW9jay4gVGhpcyBnaXZlcyB1cyBhbgorZnVuY3Rpb25hbGl0eS4gSWYgeW91IHByb3ZpZGUgYSBgYHNpZGVfZWZmZWN0YGAgZnVuY3Rpb24gZm9yIGEgbW9jayB0aGVuCitgYHNpZGVfZWZmZWN0YGAgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgc2FtZSBhcmdzIGFzIHRoZSBtb2NrLiBUaGlzIGdpdmVzIHVzIGFuCiBvcHBvcnR1bml0eSB0byBjb3B5IHRoZSBhcmd1bWVudHMgYW5kIHN0b3JlIHRoZW0gZm9yIGxhdGVyIGFzc2VydGlvbnMuIEluIHRoaXMKIGV4YW1wbGUgSSdtIHVzaW5nICphbm90aGVyKiBtb2NrIHRvIHN0b3JlIHRoZSBhcmd1bWVudHMgc28gdGhhdCBJIGNhbiB1c2UgdGhlCiBtb2NrIG1ldGhvZHMgZm9yIGRvaW5nIHRoZSBhc3NlcnRpb24uIEFnYWluIGEgaGVscGVyIGZ1bmN0aW9uIHNldHMgdGhpcyB1cCBmb3IKQEAgLTc4MiwzNSArNzkzLDM1IEBACiAgICAgLi4uCiAgICAgPj4+IHdpdGggcGF0Y2goJ215bW9kdWxlLmZyb2InKSBhcyBtb2NrX2Zyb2I6CiAgICAgLi4uICAgICBuZXdfbW9jayA9IGNvcHlfY2FsbF9hcmdzKG1vY2tfZnJvYikKLSAgICAuLi4gICAgIHZhbCA9IHNldChbNl0pCisgICAgLi4uICAgICB2YWwgPSB7Nn0KICAgICAuLi4gICAgIG15bW9kdWxlLmdyb2IodmFsKQogICAgIC4uLgotICAgID4+PiBuZXdfbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoc2V0KFs2XSkpCisgICAgPj4+IG5ld19tb2NrLmFzc2VydF9jYWxsZWRfd2l0aCh7Nn0pCiAgICAgPj4+IG5ld19tb2NrLmNhbGxfYXJncwotICAgIGNhbGwoc2V0KFs2XSkpCisgICAgY2FsbCh7Nn0pCiAKLWBjb3B5X2NhbGxfYXJnc2AgaXMgY2FsbGVkIHdpdGggdGhlIG1vY2sgdGhhdCB3aWxsIGJlIGNhbGxlZC4gSXQgcmV0dXJucyBhIG5ldwotbW9jayB0aGF0IHdlIGRvIHRoZSBhc3NlcnRpb24gb24uIFRoZSBgc2lkZV9lZmZlY3RgIGZ1bmN0aW9uIG1ha2VzIGEgY29weSBvZgotdGhlIGFyZ3MgYW5kIGNhbGxzIG91ciBgbmV3X21vY2tgIHdpdGggdGhlIGNvcHkuCitgYGNvcHlfY2FsbF9hcmdzYGAgaXMgY2FsbGVkIHdpdGggdGhlIG1vY2sgdGhhdCB3aWxsIGJlIGNhbGxlZC4gSXQgcmV0dXJucyBhIG5ldworbW9jayB0aGF0IHdlIGRvIHRoZSBhc3NlcnRpb24gb24uIFRoZSBgYHNpZGVfZWZmZWN0YGAgZnVuY3Rpb24gbWFrZXMgYSBjb3B5IG9mCit0aGUgYXJncyBhbmQgY2FsbHMgb3VyIGBgbmV3X21vY2tgYCB3aXRoIHRoZSBjb3B5LgogCiAuLiBub3RlOjoKIAogICAgIElmIHlvdXIgbW9jayBpcyBvbmx5IGdvaW5nIHRvIGJlIHVzZWQgb25jZSB0aGVyZSBpcyBhbiBlYXNpZXIgd2F5IG9mCiAgICAgY2hlY2tpbmcgYXJndW1lbnRzIGF0IHRoZSBwb2ludCB0aGV5IGFyZSBjYWxsZWQuIFlvdSBjYW4gc2ltcGx5IGRvIHRoZQotICAgIGNoZWNraW5nIGluc2lkZSBhIGBzaWRlX2VmZmVjdGAgZnVuY3Rpb24uCisgICAgY2hlY2tpbmcgaW5zaWRlIGEgYGBzaWRlX2VmZmVjdGBgIGZ1bmN0aW9uLgogCiAgICAgICAgID4+PiBkZWYgc2lkZV9lZmZlY3QoYXJnKToKLSAgICAgICAgLi4uICAgICBhc3NlcnQgYXJnID09IHNldChbNl0pCisgICAgICAgIC4uLiAgICAgYXNzZXJ0IGFyZyA9PSB7Nn0KICAgICAgICAgLi4uCiAgICAgICAgID4+PiBtb2NrID0gTW9jayhzaWRlX2VmZmVjdD1zaWRlX2VmZmVjdCkKLSAgICAgICAgPj4+IG1vY2soc2V0KFs2XSkpCisgICAgICAgID4+PiBtb2NrKHs2fSkKICAgICAgICAgPj4+IG1vY2soc2V0KCkpCiAgICAgICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICAgICAgICAgICAgIC4uLgogICAgICAgICBBc3NlcnRpb25FcnJvcgogCi1BbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBzdWJjbGFzcyBvZiBgTW9ja2Agb3IgYE1hZ2ljTW9ja2AgdGhhdAotY29waWVzICh1c2luZyA6ZnVuYzpgY29weS5kZWVwY29weWApIHRoZSBhcmd1bWVudHMuCitBbiBhbHRlcm5hdGl2ZSBhcHByb2FjaCBpcyB0byBjcmVhdGUgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YE1vY2tgIG9yCis6Y2xhc3M6YE1hZ2ljTW9ja2AgdGhhdCBjb3BpZXMgKHVzaW5nIDpmdW5jOmBjb3B5LmRlZXBjb3B5YCkgdGhlIGFyZ3VtZW50cy4KIEhlcmUncyBhbiBleGFtcGxlIGltcGxlbWVudGF0aW9uOgogCiAgICAgPj4+IGZyb20gY29weSBpbXBvcnQgZGVlcGNvcHkKQEAgLTgyOCwxNCArODM5LDE0IEBACiAgICAgPj4+IGMuYXNzZXJ0X2NhbGxlZF93aXRoKGFyZykKICAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CiAgICAgICAgIC4uLgotICAgIEFzc2VydGlvbkVycm9yOiBFeHBlY3RlZCBjYWxsOiBtb2NrKHNldChbMV0pKQotICAgIEFjdHVhbCBjYWxsOiBtb2NrKHNldChbXSkpCisgICAgQXNzZXJ0aW9uRXJyb3I6IEV4cGVjdGVkIGNhbGw6IG1vY2soezF9KQorICAgIEFjdHVhbCBjYWxsOiBtb2NrKHNldCgpKQogICAgID4+PiBjLmZvbwogICAgIDxDb3B5aW5nTW9jayBuYW1lPSdtb2NrLmZvbycgaWQ9Jy4uLic+CiAKLVdoZW4geW91IHN1YmNsYXNzIGBNb2NrYCBvciBgTWFnaWNNb2NrYCBhbGwgZHluYW1pY2FsbHkgY3JlYXRlZCBhdHRyaWJ1dGVzLAotYW5kIHRoZSBgcmV0dXJuX3ZhbHVlYCB3aWxsIHVzZSB5b3VyIHN1YmNsYXNzIGF1dG9tYXRpY2FsbHkuIFRoYXQgbWVhbnMgYWxsCi1jaGlsZHJlbiBvZiBhIGBDb3B5aW5nTW9ja2Agd2lsbCBhbHNvIGhhdmUgdGhlIHR5cGUgYENvcHlpbmdNb2NrYC4KK1doZW4geW91IHN1YmNsYXNzIGBgTW9ja2BgIG9yIGBgTWFnaWNNb2NrYGAgYWxsIGR5bmFtaWNhbGx5IGNyZWF0ZWQgYXR0cmlidXRlcywKK2FuZCB0aGUgYGByZXR1cm5fdmFsdWVgYCB3aWxsIHVzZSB5b3VyIHN1YmNsYXNzIGF1dG9tYXRpY2FsbHkuIFRoYXQgbWVhbnMgYWxsCitjaGlsZHJlbiBvZiBhIGBgQ29weWluZ01vY2tgYCB3aWxsIGFsc28gaGF2ZSB0aGUgdHlwZSBgYENvcHlpbmdNb2NrYGAuCiAKIAogTmVzdGluZyBQYXRjaGVzCkBAIC04NTksOSArODcwLDkgQEAKICAgICA+Pj4gTXlUZXN0KCd0ZXN0X2ZvbycpLnRlc3RfZm9vKCkKICAgICA+Pj4gYXNzZXJ0IG15bW9kdWxlLkZvbyBpcyBvcmlnaW5hbAogCi1XaXRoIHVuaXR0ZXN0IGBjbGVhbnVwYCBmdW5jdGlvbnMgYW5kIHRoZSA6cmVmOmBzdGFydC1hbmQtc3RvcGAgd2UgY2FuCitXaXRoIHVuaXR0ZXN0IGBgY2xlYW51cGBgIGZ1bmN0aW9ucyBhbmQgdGhlIDpyZWY6YHN0YXJ0LWFuZC1zdG9wYCB3ZSBjYW4KIGFjaGlldmUgdGhlIHNhbWUgZWZmZWN0IHdpdGhvdXQgdGhlIG5lc3RlZCBpbmRlbnRhdGlvbi4gQSBzaW1wbGUgaGVscGVyCi1tZXRob2QsIGBjcmVhdGVfcGF0Y2hgLCBwdXRzIHRoZSBwYXRjaCBpbiBwbGFjZSBhbmQgcmV0dXJucyB0aGUgY3JlYXRlZCBtb2NrCittZXRob2QsIGBgY3JlYXRlX3BhdGNoYGAsIHB1dHMgdGhlIHBhdGNoIGluIHBsYWNlIGFuZCByZXR1cm5zIHRoZSBjcmVhdGVkIG1vY2sKIGZvciB1czoKIAogICAgID4+PiBjbGFzcyBNeVRlc3QoVGVzdENhc2UpOgpAQCAtODk2LDExICs5MDcsMTEgQEAKIGFuZCB1c2luZyA6ZGF0YTpgfk1vY2suc2lkZV9lZmZlY3RgIHRvIGRlbGVnYXRlIGRpY3Rpb25hcnkgYWNjZXNzIHRvIGEgcmVhbAogdW5kZXJseWluZyBkaWN0aW9uYXJ5IHRoYXQgaXMgdW5kZXIgb3VyIGNvbnRyb2wuCiAKLVdoZW4gdGhlIGBfX2dldGl0ZW1fX2AgYW5kIGBfX3NldGl0ZW1fX2AgbWV0aG9kcyBvZiBvdXIgYE1hZ2ljTW9ja2AgYXJlIGNhbGxlZAotKG5vcm1hbCBkaWN0aW9uYXJ5IGFjY2VzcykgdGhlbiBgc2lkZV9lZmZlY3RgIGlzIGNhbGxlZCB3aXRoIHRoZSBrZXkgKGFuZCBpbgotdGhlIGNhc2Ugb2YgYF9fc2V0aXRlbV9fYCB0aGUgdmFsdWUgdG9vKS4gV2UgY2FuIGFsc28gY29udHJvbCB3aGF0IGlzIHJldHVybmVkLgorV2hlbiB0aGUgOm1ldGg6YF9fZ2V0aXRlbV9fYCBhbmQgOm1ldGg6YF9fc2V0aXRlbV9fYCBtZXRob2RzIG9mIG91ciBgYE1hZ2ljTW9ja2BgIGFyZSBjYWxsZWQKKyhub3JtYWwgZGljdGlvbmFyeSBhY2Nlc3MpIHRoZW4gYGBzaWRlX2VmZmVjdGBgIGlzIGNhbGxlZCB3aXRoIHRoZSBrZXkgKGFuZCBpbgordGhlIGNhc2Ugb2YgYGBfX3NldGl0ZW1fX2BgIHRoZSB2YWx1ZSB0b28pLiBXZSBjYW4gYWxzbyBjb250cm9sIHdoYXQgaXMgcmV0dXJuZWQuCiAKLUFmdGVyIHRoZSBgTWFnaWNNb2NrYCBoYXMgYmVlbiB1c2VkIHdlIGNhbiB1c2UgYXR0cmlidXRlcyBsaWtlCitBZnRlciB0aGUgYGBNYWdpY01vY2tgYCBoYXMgYmVlbiB1c2VkIHdlIGNhbiB1c2UgYXR0cmlidXRlcyBsaWtlCiA6ZGF0YTpgfk1vY2suY2FsbF9hcmdzX2xpc3RgIHRvIGFzc2VydCBhYm91dCBob3cgdGhlIGRpY3Rpb25hcnkgd2FzIHVzZWQ6CiAKICAgICA+Pj4gbXlfZGljdCA9IHsnYSc6IDEsICdiJzogMiwgJ2MnOiAzfQpAQCAtOTE2LDIzICs5MjcsMjMgQEAKIAogLi4gbm90ZTo6CiAKLSAgICBBbiBhbHRlcm5hdGl2ZSB0byB1c2luZyBgTWFnaWNNb2NrYCBpcyB0byB1c2UgYE1vY2tgIGFuZCAqb25seSogcHJvdmlkZQorICAgIEFuIGFsdGVybmF0aXZlIHRvIHVzaW5nIGBgTWFnaWNNb2NrYGAgaXMgdG8gdXNlIGBgTW9ja2BgIGFuZCAqb25seSogcHJvdmlkZQogICAgIHRoZSBtYWdpYyBtZXRob2RzIHlvdSBzcGVjaWZpY2FsbHkgd2FudDoKIAogICAgICAgICA+Pj4gbW9jayA9IE1vY2soKQotICAgICAgICA+Pj4gbW9jay5fX3NldGl0ZW1fXyA9IE1vY2soc2lkZV9lZmZlY3Q9Z2V0aXRlbSkKLSAgICAgICAgPj4+IG1vY2suX19nZXRpdGVtX18gPSBNb2NrKHNpZGVfZWZmZWN0PXNldGl0ZW0pCisgICAgICAgID4+PiBtb2NrLl9fZ2V0aXRlbV9fID0gTW9jayhzaWRlX2VmZmVjdD1nZXRpdGVtKQorICAgICAgICA+Pj4gbW9jay5fX3NldGl0ZW1fXyA9IE1vY2soc2lkZV9lZmZlY3Q9c2V0aXRlbSkKIAotICAgIEEgKnRoaXJkKiBvcHRpb24gaXMgdG8gdXNlIGBNYWdpY01vY2tgIGJ1dCBwYXNzaW5nIGluIGBkaWN0YCBhcyB0aGUgYHNwZWNgCi0gICAgKG9yIGBzcGVjX3NldGApIGFyZ3VtZW50IHNvIHRoYXQgdGhlIGBNYWdpY01vY2tgIGNyZWF0ZWQgb25seSBoYXMKKyAgICBBICp0aGlyZCogb3B0aW9uIGlzIHRvIHVzZSBgYE1hZ2ljTW9ja2BgIGJ1dCBwYXNzaW5nIGluIGBgZGljdGBgIGFzIHRoZSAqc3BlYyoKKyAgICAob3IgKnNwZWNfc2V0KikgYXJndW1lbnQgc28gdGhhdCB0aGUgYGBNYWdpY01vY2tgYCBjcmVhdGVkIG9ubHkgaGFzCiAgICAgZGljdGlvbmFyeSBtYWdpYyBtZXRob2RzIGF2YWlsYWJsZToKIAogICAgICAgICA+Pj4gbW9jayA9IE1hZ2ljTW9jayhzcGVjX3NldD1kaWN0KQogICAgICAgICA+Pj4gbW9jay5fX2dldGl0ZW1fXy5zaWRlX2VmZmVjdCA9IGdldGl0ZW0KICAgICAgICAgPj4+IG1vY2suX19zZXRpdGVtX18uc2lkZV9lZmZlY3QgPSBzZXRpdGVtCiAKLVdpdGggdGhlc2Ugc2lkZSBlZmZlY3QgZnVuY3Rpb25zIGluIHBsYWNlLCB0aGUgYG1vY2tgIHdpbGwgYmVoYXZlIGxpa2UgYSBub3JtYWwKLWRpY3Rpb25hcnkgYnV0IHJlY29yZGluZyB0aGUgYWNjZXNzLiBJdCBldmVuIHJhaXNlcyBhIGBLZXlFcnJvcmAgaWYgeW91IHRyeQorV2l0aCB0aGVzZSBzaWRlIGVmZmVjdCBmdW5jdGlvbnMgaW4gcGxhY2UsIHRoZSBgYG1vY2tgYCB3aWxsIGJlaGF2ZSBsaWtlIGEgbm9ybWFsCitkaWN0aW9uYXJ5IGJ1dCByZWNvcmRpbmcgdGhlIGFjY2Vzcy4gSXQgZXZlbiByYWlzZXMgYSA6ZXhjOmBLZXlFcnJvcmAgaWYgeW91IHRyeQogdG8gYWNjZXNzIGEga2V5IHRoYXQgZG9lc24ndCBleGlzdC4KIAogICAgID4+PiBtb2NrWydhJ10KQEAgLTk2NCw4ICs5NzUsOCBAQAogTW9jayBzdWJjbGFzc2VzIGFuZCB0aGVpciBhdHRyaWJ1dGVzCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIAotVGhlcmUgYXJlIHZhcmlvdXMgcmVhc29ucyB3aHkgeW91IG1pZ2h0IHdhbnQgdG8gc3ViY2xhc3MgYE1vY2tgLiBPbmUgcmVhc29uCi1taWdodCBiZSB0byBhZGQgaGVscGVyIG1ldGhvZHMuIEhlcmUncyBhIHNpbGx5IGV4YW1wbGU6CitUaGVyZSBhcmUgdmFyaW91cyByZWFzb25zIHdoeSB5b3UgbWlnaHQgd2FudCB0byBzdWJjbGFzcyA6Y2xhc3M6YE1vY2tgLiBPbmUKK3JlYXNvbiBtaWdodCBiZSB0byBhZGQgaGVscGVyIG1ldGhvZHMuIEhlcmUncyBhIHNpbGx5IGV4YW1wbGU6CiAKICAgICA+Pj4gY2xhc3MgTXlNb2NrKE1hZ2ljTW9jayk6CiAgICAgLi4uICAgICBkZWYgaGFzX2JlZW5fY2FsbGVkKHNlbGYpOgpAQCAtOTgwLDkgKzk5MSw5IEBACiAgICAgPj4+IG15bW9jay5oYXNfYmVlbl9jYWxsZWQoKQogICAgIFRydWUKIAotVGhlIHN0YW5kYXJkIGJlaGF2aW91ciBmb3IgYE1vY2tgIGluc3RhbmNlcyBpcyB0aGF0IGF0dHJpYnV0ZXMgYW5kIHRoZSByZXR1cm4KK1RoZSBzdGFuZGFyZCBiZWhhdmlvdXIgZm9yIGBgTW9ja2BgIGluc3RhbmNlcyBpcyB0aGF0IGF0dHJpYnV0ZXMgYW5kIHRoZSByZXR1cm4KIHZhbHVlIG1vY2tzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoZSBtb2NrIHRoZXkgYXJlIGFjY2Vzc2VkIG9uLiBUaGlzIGVuc3VyZXMKLXRoYXQgYE1vY2tgIGF0dHJpYnV0ZXMgYXJlIGBNb2Nrc2AgYW5kIGBNYWdpY01vY2tgIGF0dHJpYnV0ZXMgYXJlIGBNYWdpY01vY2tzYAordGhhdCBgYE1vY2tgYCBhdHRyaWJ1dGVzIGFyZSBgYE1vY2tzYGAgYW5kIGBgTWFnaWNNb2NrYGAgYXR0cmlidXRlcyBhcmUgYGBNYWdpY01vY2tzYGAKIFsjXV8uIFNvIGlmIHlvdSdyZSBzdWJjbGFzc2luZyB0byBhZGQgaGVscGVyIG1ldGhvZHMgdGhlbiB0aGV5J2xsIGFsc28gYmUKIGF2YWlsYWJsZSBvbiB0aGUgYXR0cmlidXRlcyBhbmQgcmV0dXJuIHZhbHVlIG1vY2sgb2YgaW5zdGFuY2VzIG9mIHlvdXIKIHN1YmNsYXNzLgpAQCAtMTAwMiwxMCArMTAxMywxMCBAQAogPGh0dHA6Ly90d2lzdGVkbWF0cml4LmNvbS9kb2N1bWVudHMvMTEuMC4wL2FwaS90d2lzdGVkLnB5dGhvbi5jb21wb25lbnRzLmh0bWw+YF8uCiBIYXZpbmcgdGhpcyBhcHBsaWVkIHRvIGF0dHJpYnV0ZXMgdG9vIGFjdHVhbGx5IGNhdXNlcyBlcnJvcnMuCiAKLWBNb2NrYCAoaW4gYWxsIGl0cyBmbGF2b3VycykgdXNlcyBhIG1ldGhvZCBjYWxsZWQgYF9nZXRfY2hpbGRfbW9ja2AgdG8gY3JlYXRlCitgYE1vY2tgYCAoaW4gYWxsIGl0cyBmbGF2b3VycykgdXNlcyBhIG1ldGhvZCBjYWxsZWQgYGBfZ2V0X2NoaWxkX21vY2tgYCB0byBjcmVhdGUKIHRoZXNlICJzdWItbW9ja3MiIGZvciBhdHRyaWJ1dGVzIGFuZCByZXR1cm4gdmFsdWVzLiBZb3UgY2FuIHByZXZlbnQgeW91cgogc3ViY2xhc3MgYmVpbmcgdXNlZCBmb3IgYXR0cmlidXRlcyBieSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kLiBUaGUgc2lnbmF0dXJlIGlzCi10aGF0IGl0IHRha2VzIGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50cyAoYCoqa3dhcmdzYCkgd2hpY2ggYXJlIHRoZW4gcGFzc2VkCit0aGF0IGl0IHRha2VzIGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50cyAoYGAqKmt3YXJnc2BgKSB3aGljaCBhcmUgdGhlbiBwYXNzZWQKIG9udG8gdGhlIG1vY2sgY29uc3RydWN0b3I6CiAKICAgICA+Pj4gY2xhc3MgU3ViY2xhc3MoTWFnaWNNb2NrKToKQEAgLTEwMzgsMTcgKzEwNDksMTcgQEAKIGltcG9ydCAoc3RvcmUgdGhlIG1vZHVsZSBhcyBhIGNsYXNzIG9yIG1vZHVsZSBhdHRyaWJ1dGUgYW5kIG9ubHkgZG8gdGhlIGltcG9ydAogb24gZmlyc3QgdXNlKS4KIAotVGhhdCBhc2lkZSB0aGVyZSBpcyBhIHdheSB0byB1c2UgYG1vY2tgIHRvIGFmZmVjdCB0aGUgcmVzdWx0cyBvZiBhbiBpbXBvcnQuCi1JbXBvcnRpbmcgZmV0Y2hlcyBhbiAqb2JqZWN0KiBmcm9tIHRoZSBgc3lzLm1vZHVsZXNgIGRpY3Rpb25hcnkuIE5vdGUgdGhhdCBpdAorVGhhdCBhc2lkZSB0aGVyZSBpcyBhIHdheSB0byB1c2UgYGBtb2NrYGAgdG8gYWZmZWN0IHRoZSByZXN1bHRzIG9mIGFuIGltcG9ydC4KK0ltcG9ydGluZyBmZXRjaGVzIGFuICpvYmplY3QqIGZyb20gdGhlIDpkYXRhOmBzeXMubW9kdWxlc2AgZGljdGlvbmFyeS4gTm90ZSB0aGF0IGl0CiBmZXRjaGVzIGFuICpvYmplY3QqLCB3aGljaCBuZWVkIG5vdCBiZSBhIG1vZHVsZS4gSW1wb3J0aW5nIGEgbW9kdWxlIGZvciB0aGUKIGZpcnN0IHRpbWUgcmVzdWx0cyBpbiBhIG1vZHVsZSBvYmplY3QgYmVpbmcgcHV0IGluIGBzeXMubW9kdWxlc2AsIHNvIHVzdWFsbHkKIHdoZW4geW91IGltcG9ydCBzb21ldGhpbmcgeW91IGdldCBhIG1vZHVsZSBiYWNrLiBUaGlzIG5lZWQgbm90IGJlIHRoZSBjYXNlCiBob3dldmVyLgogCiBUaGlzIG1lYW5zIHlvdSBjYW4gdXNlIDpmdW5jOmBwYXRjaC5kaWN0YCB0byAqdGVtcG9yYXJpbHkqIHB1dCBhIG1vY2sgaW4gcGxhY2UKLWluIGBzeXMubW9kdWxlc2AuIEFueSBpbXBvcnRzIHdoaWxzdCB0aGlzIHBhdGNoIGlzIGFjdGl2ZSB3aWxsIGZldGNoIHRoZSBtb2NrLgoraW4gOmRhdGE6YHN5cy5tb2R1bGVzYC4gQW55IGltcG9ydHMgd2hpbHN0IHRoaXMgcGF0Y2ggaXMgYWN0aXZlIHdpbGwgZmV0Y2ggdGhlIG1vY2suCiBXaGVuIHRoZSBwYXRjaCBpcyBjb21wbGV0ZSAodGhlIGRlY29yYXRlZCBmdW5jdGlvbiBleGl0cywgdGhlIHdpdGggc3RhdGVtZW50Ci1ib2R5IGlzIGNvbXBsZXRlIG9yIGBwYXRjaGVyLnN0b3AoKWAgaXMgY2FsbGVkKSB0aGVuIHdoYXRldmVyIHdhcyB0aGVyZQorYm9keSBpcyBjb21wbGV0ZSBvciBgYHBhdGNoZXIuc3RvcCgpYGAgaXMgY2FsbGVkKSB0aGVuIHdoYXRldmVyIHdhcyB0aGVyZQogcHJldmlvdXNseSB3aWxsIGJlIHJlc3RvcmVkIHNhZmVseS4KIAogSGVyZSdzIGFuIGV4YW1wbGUgdGhhdCBtb2NrcyBvdXQgdGhlICdmb29ibGUnIG1vZHVsZS4KQEAgLTEwNjIsMTAgKzEwNzMsMTAgQEAKICAgICA+Pj4gYXNzZXJ0ICdmb29ibGUnIG5vdCBpbiBzeXMubW9kdWxlcwogICAgID4+PiBtb2NrLmJsb2IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQogCi1BcyB5b3UgY2FuIHNlZSB0aGUgYGltcG9ydCBmb29ibGVgIHN1Y2NlZWRzLCBidXQgb24gZXhpdCB0aGVyZSBpcyBubyAnZm9vYmxlJwotbGVmdCBpbiBgc3lzLm1vZHVsZXNgLgorQXMgeW91IGNhbiBzZWUgdGhlIGBgaW1wb3J0IGZvb2JsZWBgIHN1Y2NlZWRzLCBidXQgb24gZXhpdCB0aGVyZSBpcyBubyAnZm9vYmxlJworbGVmdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLgogCi1UaGlzIGFsc28gd29ya3MgZm9yIHRoZSBgZnJvbSBtb2R1bGUgaW1wb3J0IG5hbWVgIGZvcm06CitUaGlzIGFsc28gd29ya3MgZm9yIHRoZSBgYGZyb20gbW9kdWxlIGltcG9ydCBuYW1lYGAgZm9ybToKIAogICAgID4+PiBtb2NrID0gTW9jaygpCiAgICAgPj4+IHdpdGggcGF0Y2guZGljdCgnc3lzLm1vZHVsZXMnLCB7J2Zvb2JsZSc6IG1vY2t9KToKQEAgLTEwOTUsMTAgKzExMDYsMTAgQEAKIGRvZXNuJ3QgYWxsb3cgeW91IHRvIHRyYWNrIHRoZSBvcmRlciBvZiBjYWxscyBiZXR3ZWVuIHNlcGFyYXRlIG1vY2sgb2JqZWN0cywKIGhvd2V2ZXIgd2UgY2FuIHVzZSA6YXR0cjpgfk1vY2subW9ja19jYWxsc2AgdG8gYWNoaWV2ZSB0aGUgc2FtZSBlZmZlY3QuCiAKLUJlY2F1c2UgbW9ja3MgdHJhY2sgY2FsbHMgdG8gY2hpbGQgbW9ja3MgaW4gYG1vY2tfY2FsbHNgLCBhbmQgYWNjZXNzaW5nIGFuCitCZWNhdXNlIG1vY2tzIHRyYWNrIGNhbGxzIHRvIGNoaWxkIG1vY2tzIGluIGBgbW9ja19jYWxsc2BgLCBhbmQgYWNjZXNzaW5nIGFuCiBhcmJpdHJhcnkgYXR0cmlidXRlIG9mIGEgbW9jayBjcmVhdGVzIGEgY2hpbGQgbW9jaywgd2UgY2FuIGNyZWF0ZSBvdXIgc2VwYXJhdGUKIG1vY2tzIGZyb20gYSBwYXJlbnQgb25lLiBDYWxscyB0byB0aG9zZSBjaGlsZCBtb2NrIHdpbGwgdGhlbiBhbGwgYmUgcmVjb3JkZWQsCi1pbiBvcmRlciwgaW4gdGhlIGBtb2NrX2NhbGxzYCBvZiB0aGUgcGFyZW50OgoraW4gb3JkZXIsIGluIHRoZSBgYG1vY2tfY2FsbHNgYCBvZiB0aGUgcGFyZW50OgogCiAgICAgPj4+IG1hbmFnZXIgPSBNb2NrKCkKICAgICA+Pj4gbW9ja19mb28gPSBtYW5hZ2VyLmZvbwpAQCAtMTExMywxNSArMTEyNCwxNSBAQAogICAgIFtjYWxsLmZvby5zb21ldGhpbmcoKSwgY2FsbC5iYXIub3RoZXIudGhpbmcoKV0KIAogV2UgY2FuIHRoZW4gYXNzZXJ0IGFib3V0IHRoZSBjYWxscywgaW5jbHVkaW5nIHRoZSBvcmRlciwgYnkgY29tcGFyaW5nIHdpdGgKLXRoZSBgbW9ja19jYWxsc2AgYXR0cmlidXRlIG9uIHRoZSBtYW5hZ2VyIG1vY2s6Cit0aGUgYGBtb2NrX2NhbGxzYGAgYXR0cmlidXRlIG9uIHRoZSBtYW5hZ2VyIG1vY2s6CiAKICAgICA+Pj4gZXhwZWN0ZWRfY2FsbHMgPSBbY2FsbC5mb28uc29tZXRoaW5nKCksIGNhbGwuYmFyLm90aGVyLnRoaW5nKCldCiAgICAgPj4+IG1hbmFnZXIubW9ja19jYWxscyA9PSBleHBlY3RlZF9jYWxscwogICAgIFRydWUKIAotSWYgYHBhdGNoYCBpcyBjcmVhdGluZywgYW5kIHB1dHRpbmcgaW4gcGxhY2UsIHlvdXIgbW9ja3MgdGhlbiB5b3UgY2FuIGF0dGFjaAorSWYgYGBwYXRjaGBgIGlzIGNyZWF0aW5nLCBhbmQgcHV0dGluZyBpbiBwbGFjZSwgeW91ciBtb2NrcyB0aGVuIHlvdSBjYW4gYXR0YWNoCiB0aGVtIHRvIGEgbWFuYWdlciBtb2NrIHVzaW5nIHRoZSA6bWV0aDpgfk1vY2suYXR0YWNoX21vY2tgIG1ldGhvZC4gQWZ0ZXIKLWF0dGFjaGluZyBjYWxscyB3aWxsIGJlIHJlY29yZGVkIGluIGBtb2NrX2NhbGxzYCBvZiB0aGUgbWFuYWdlci4KK2F0dGFjaGluZyBjYWxscyB3aWxsIGJlIHJlY29yZGVkIGluIGBgbW9ja19jYWxsc2BgIG9mIHRoZSBtYW5hZ2VyLgogCiAgICAgPj4+IG1hbmFnZXIgPSBNYWdpY01vY2soKQogICAgID4+PiB3aXRoIHBhdGNoKCdteW1vZHVsZS5DbGFzczEnKSBhcyBNb2NrQ2xhc3MxOgpAQCAtMTE1MywxMiArMTE2NCwxMiBAQAogICAgID4+PiBjYWxscyA9IGNhbGwub25lKCkudHdvKCkudGhyZWUoKS5jYWxsX2xpc3QoKQogICAgID4+PiBtLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMpCiAKLUV2ZW4gdGhvdWdoIHRoZSBjaGFpbmVkIGNhbGwgYG0ub25lKCkudHdvKCkudGhyZWUoKWAgYXJlbid0IHRoZSBvbmx5IGNhbGxzIHRoYXQKK0V2ZW4gdGhvdWdoIHRoZSBjaGFpbmVkIGNhbGwgYGBtLm9uZSgpLnR3bygpLnRocmVlKClgYCBhcmVuJ3QgdGhlIG9ubHkgY2FsbHMgdGhhdAogaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIG1vY2ssIHRoZSBhc3NlcnQgc3RpbGwgc3VjY2VlZHMuCiAKIFNvbWV0aW1lcyBhIG1vY2sgbWF5IGhhdmUgc2V2ZXJhbCBjYWxscyBtYWRlIHRvIGl0LCBhbmQgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQKIGluIGFzc2VydGluZyBhYm91dCAqc29tZSogb2YgdGhvc2UgY2FsbHMuIFlvdSBtYXkgbm90IGV2ZW4gY2FyZSBhYm91dCB0aGUKLW9yZGVyLiBJbiB0aGlzIGNhc2UgeW91IGNhbiBwYXNzIGBhbnlfb3JkZXI9VHJ1ZWAgdG8gYGFzc2VydF9oYXNfY2FsbHNgOgorb3JkZXIuIEluIHRoaXMgY2FzZSB5b3UgY2FuIHBhc3MgYGBhbnlfb3JkZXI9VHJ1ZWBgIHRvIGBgYXNzZXJ0X2hhc19jYWxsc2BgOgogCiAgICAgPj4+IG0gPSBNYWdpY01vY2soKQogICAgID4+PiBtKDEpLCBtLnR3bygyLCAzKSwgbS5zZXZlbig3KSwgbS5maWZ0eSgnNTAnKQpAQCAtMTE4MCw3ICsxMTkxLDcgQEAKIG9mIHRoaXMgb2JqZWN0IHRoZW4gd2UgY2FuIGNyZWF0ZSBhIG1hdGNoZXIgdGhhdCB3aWxsIGNoZWNrIHRoZXNlIGF0dHJpYnV0ZXMKIGZvciB1cy4KIAotWW91IGNhbiBzZWUgaW4gdGhpcyBleGFtcGxlIGhvdyBhICdzdGFuZGFyZCcgY2FsbCB0byBgYXNzZXJ0X2NhbGxlZF93aXRoYCBpc24ndAorWW91IGNhbiBzZWUgaW4gdGhpcyBleGFtcGxlIGhvdyBhICdzdGFuZGFyZCcgY2FsbCB0byBgYGFzc2VydF9jYWxsZWRfd2l0aGBgIGlzbid0CiBzdWZmaWNpZW50OgogCiAgICAgPj4+IGNsYXNzIEZvbzoKQEAgLTExOTUsNyArMTIwNiw3IEBACiAgICAgQXNzZXJ0aW9uRXJyb3I6IEV4cGVjdGVkOiBjYWxsKDxfX21haW5fXy5Gb28gb2JqZWN0IGF0IDB4Li4uPikKICAgICBBY3R1YWwgY2FsbDogY2FsbCg8X19tYWluX18uRm9vIG9iamVjdCBhdCAweC4uLj4pCiAKLUEgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igb3VyIGBGb29gIGNsYXNzIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2UgdGhpczoKK0EgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3Igb3VyIGBgRm9vYGAgY2xhc3MgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZSB0aGlzOgogCiAgICAgPj4+IGRlZiBjb21wYXJlKHNlbGYsIG90aGVyKToKICAgICAuLi4gICAgIGlmIG5vdCB0eXBlKHNlbGYpID09IHR5cGUob3RoZXIpOgpAQCAtMTIyMywxMSArMTIzNCwxMSBAQAogICAgID4+PiBtYXRjaF9mb28gPSBNYXRjaGVyKGNvbXBhcmUsIEZvbygxLCAyKSkKICAgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgobWF0Y2hfZm9vKQogCi1UaGUgYE1hdGNoZXJgIGlzIGluc3RhbnRpYXRlZCB3aXRoIG91ciBjb21wYXJlIGZ1bmN0aW9uIGFuZCB0aGUgYEZvb2Agb2JqZWN0Ci13ZSB3YW50IHRvIGNvbXBhcmUgYWdhaW5zdC4gSW4gYGFzc2VydF9jYWxsZWRfd2l0aGAgdGhlIGBNYXRjaGVyYCBlcXVhbGl0eQorVGhlIGBgTWF0Y2hlcmBgIGlzIGluc3RhbnRpYXRlZCB3aXRoIG91ciBjb21wYXJlIGZ1bmN0aW9uIGFuZCB0aGUgYGBGb29gYCBvYmplY3QKK3dlIHdhbnQgdG8gY29tcGFyZSBhZ2FpbnN0LiBJbiBgYGFzc2VydF9jYWxsZWRfd2l0aGBgIHRoZSBgYE1hdGNoZXJgYCBlcXVhbGl0eQogbWV0aG9kIHdpbGwgYmUgY2FsbGVkLCB3aGljaCBjb21wYXJlcyB0aGUgb2JqZWN0IHRoZSBtb2NrIHdhcyBjYWxsZWQgd2l0aAogYWdhaW5zdCB0aGUgb25lIHdlIGNyZWF0ZWQgb3VyIG1hdGNoZXIgd2l0aC4gSWYgdGhleSBtYXRjaCB0aGVuCi1gYXNzZXJ0X2NhbGxlZF93aXRoYCBwYXNzZXMsIGFuZCBpZiB0aGV5IGRvbid0IGFuIGBBc3NlcnRpb25FcnJvcmAgaXMgcmFpc2VkOgorYGBhc3NlcnRfY2FsbGVkX3dpdGhgYCBwYXNzZXMsIGFuZCBpZiB0aGV5IGRvbid0IGFuIDpleGM6YEFzc2VydGlvbkVycm9yYCBpcyByYWlzZWQ6CiAKICAgICA+Pj4gbWF0Y2hfd3JvbmcgPSBNYXRjaGVyKGNvbXBhcmUsIEZvbygzLCA0KSkKICAgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgobWF0Y2hfd3JvbmcpCkBAIC0xMjM3LDEwICsxMjQ4LDEwIEBACiAgICAgQ2FsbGVkIHdpdGg6ICgoPEZvbyBvYmplY3QgYXQgMHguLi4+LCksIHt9KQogCiBXaXRoIGEgYml0IG9mIHR3ZWFraW5nIHlvdSBjb3VsZCBoYXZlIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uIHJhaXNlIHRoZQotYEFzc2VydGlvbkVycm9yYCBkaXJlY3RseSBhbmQgcHJvdmlkZSBhIG1vcmUgdXNlZnVsIGZhaWx1cmUgbWVzc2FnZS4KKzpleGM6YEFzc2VydGlvbkVycm9yYCBkaXJlY3RseSBhbmQgcHJvdmlkZSBhIG1vcmUgdXNlZnVsIGZhaWx1cmUgbWVzc2FnZS4KIAogQXMgb2YgdmVyc2lvbiAxLjUsIHRoZSBQeXRob24gdGVzdGluZyBsaWJyYXJ5IGBQeUhhbWNyZXN0Ci08aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL1B5SGFtY3Jlc3Q+YF8gcHJvdmlkZXMgc2ltaWxhciBmdW5jdGlvbmFsaXR5LAorPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkvUHlIYW1jcmVzdD5gXyBwcm92aWRlcyBzaW1pbGFyIGZ1bmN0aW9uYWxpdHksCiB0aGF0IG1heSBiZSB1c2VmdWwgaGVyZSwgaW4gdGhlIGZvcm0gb2YgaXRzIGVxdWFsaXR5IG1hdGNoZXIKIChgaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eQotPGh0dHA6Ly9wYWNrYWdlcy5weXRob24ub3JnL1B5SGFtY3Jlc3QvaW50ZWdyYXRpb24uaHRtbCNoYW1jcmVzdC5saWJyYXJ5LmludGVncmF0aW9uLm1hdGNoX2VxdWFsaXR5PmBfKS4KKzxodHRwOi8vcHl0aG9uaG9zdGVkLm9yZy9QeUhhbWNyZXN0L2ludGVncmF0aW9uLmh0bWwjaGFtY3Jlc3QubGlicmFyeS5pbnRlZ3JhdGlvbi5tYXRjaF9lcXVhbGl0eS5tYXRjaF9lcXVhbGl0eT5gXykuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5tb2NrLnJzdCBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CmluZGV4IGY4MDVkZjMuLmQ3ZDczNWMgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0Lm1vY2sucnN0CkBAIC0xMyw3ICsxMyw3IEBACiByZXBsYWNlIHBhcnRzIG9mIHlvdXIgc3lzdGVtIHVuZGVyIHRlc3Qgd2l0aCBtb2NrIG9iamVjdHMgYW5kIG1ha2UgYXNzZXJ0aW9ucwogYWJvdXQgaG93IHRoZXkgaGF2ZSBiZWVuIHVzZWQuCiAKLWB1bml0dGVzdC5tb2NrYCBwcm92aWRlcyBhIGNvcmUgOmNsYXNzOmBNb2NrYCBjbGFzcyByZW1vdmluZyB0aGUgbmVlZCB0bworOm1vZDpgdW5pdHRlc3QubW9ja2AgcHJvdmlkZXMgYSBjb3JlIDpjbGFzczpgTW9ja2AgY2xhc3MgcmVtb3ZpbmcgdGhlIG5lZWQgdG8KIGNyZWF0ZSBhIGhvc3Qgb2Ygc3R1YnMgdGhyb3VnaG91dCB5b3VyIHRlc3Qgc3VpdGUuIEFmdGVyIHBlcmZvcm1pbmcgYW4KIGFjdGlvbiwgeW91IGNhbiBtYWtlIGFzc2VydGlvbnMgYWJvdXQgd2hpY2ggbWV0aG9kcyAvIGF0dHJpYnV0ZXMgd2VyZSB1c2VkCiBhbmQgYXJndW1lbnRzIHRoZXkgd2VyZSBjYWxsZWQgd2l0aC4gWW91IGNhbiBhbHNvIHNwZWNpZnkgcmV0dXJuIHZhbHVlcyBhbmQKQEAgLTI2LDExICsyNiwxMSBAQAogOmZ1bmM6YHBhdGNoYC4KIAogTW9jayBpcyB2ZXJ5IGVhc3kgdG8gdXNlIGFuZCBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggOm1vZDpgdW5pdHRlc3RgLiBNb2NrCi1pcyBiYXNlZCBvbiB0aGUgJ2FjdGlvbiAtPiBhc3NlcnRpb24nIHBhdHRlcm4gaW5zdGVhZCBvZiBgJ3JlY29yZCAtPiByZXBsYXknYAoraXMgYmFzZWQgb24gdGhlICdhY3Rpb24gLT4gYXNzZXJ0aW9uJyBwYXR0ZXJuIGluc3RlYWQgb2YgJ3JlY29yZCAtPiByZXBsYXknCiB1c2VkIGJ5IG1hbnkgbW9ja2luZyBmcmFtZXdvcmtzLgogCi1UaGVyZSBpcyBhIGJhY2twb3J0IG9mIGB1bml0dGVzdC5tb2NrYCBmb3IgZWFybGllciB2ZXJzaW9ucyBvZiBQeXRob24sCi1hdmFpbGFibGUgYXMgYG1vY2sgb24gUHlQSSA8aHR0cDovL3B5cGkucHl0aG9uLm9yZy9weXBpL21vY2s+YF8uCitUaGVyZSBpcyBhIGJhY2twb3J0IG9mIDptb2Q6YHVuaXR0ZXN0Lm1vY2tgIGZvciBlYXJsaWVyIHZlcnNpb25zIG9mIFB5dGhvbiwKK2F2YWlsYWJsZSBhcyBgbW9jayBvbiBQeVBJIDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpL21vY2s+YF8uCiAKICoqU291cmNlIGNvZGU6KiogOnNvdXJjZTpgTGliL3VuaXR0ZXN0L21vY2sucHlgCiAKQEAgLTcxLDkgKzcxLDkgQEAKICAgICg1LCA0LCAzKQogCiBNb2NrIGhhcyBtYW55IG90aGVyIHdheXMgeW91IGNhbiBjb25maWd1cmUgaXQgYW5kIGNvbnRyb2wgaXRzIGJlaGF2aW91ci4gRm9yCi1leGFtcGxlIHRoZSBgc3BlY2AgYXJndW1lbnQgY29uZmlndXJlcyB0aGUgbW9jayB0byB0YWtlIGl0cyBzcGVjaWZpY2F0aW9uCitleGFtcGxlIHRoZSAqc3BlYyogYXJndW1lbnQgY29uZmlndXJlcyB0aGUgbW9jayB0byB0YWtlIGl0cyBzcGVjaWZpY2F0aW9uCiBmcm9tIGFub3RoZXIgb2JqZWN0LiBBdHRlbXB0aW5nIHRvIGFjY2VzcyBhdHRyaWJ1dGVzIG9yIG1ldGhvZHMgb24gdGhlIG1vY2sKLXRoYXQgZG9uJ3QgZXhpc3Qgb24gdGhlIHNwZWMgd2lsbCBmYWlsIHdpdGggYW4gYEF0dHJpYnV0ZUVycm9yYC4KK3RoYXQgZG9uJ3QgZXhpc3Qgb24gdGhlIHNwZWMgd2lsbCBmYWlsIHdpdGggYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLgogCiBUaGUgOmZ1bmM6YHBhdGNoYCBkZWNvcmF0b3IgLyBjb250ZXh0IG1hbmFnZXIgbWFrZXMgaXQgZWFzeSB0byBtb2NrIGNsYXNzZXMgb3IKIG9iamVjdHMgaW4gYSBtb2R1bGUgdW5kZXIgdGVzdC4gVGhlIG9iamVjdCB5b3Ugc3BlY2lmeSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYQpAQCAtOTcsMTMgKzk3LDEzIEBACiAgICBXaGVuIHlvdSBuZXN0IHBhdGNoIGRlY29yYXRvcnMgdGhlIG1vY2tzIGFyZSBwYXNzZWQgaW4gdG8gdGhlIGRlY29yYXRlZAogICAgZnVuY3Rpb24gaW4gdGhlIHNhbWUgb3JkZXIgdGhleSBhcHBsaWVkICh0aGUgbm9ybWFsICpweXRob24qIG9yZGVyIHRoYXQKICAgIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQpLiBUaGlzIG1lYW5zIGZyb20gdGhlIGJvdHRvbSB1cCwgc28gaW4gdGhlIGV4YW1wbGUKLSAgIGFib3ZlIHRoZSBtb2NrIGZvciBgbW9kdWxlLkNsYXNzTmFtZTFgIGlzIHBhc3NlZCBpbiBmaXJzdC4KKyAgIGFib3ZlIHRoZSBtb2NrIGZvciBgYG1vZHVsZS5DbGFzc05hbWUxYGAgaXMgcGFzc2VkIGluIGZpcnN0LgogCi0gICBXaXRoIGBwYXRjaGAgaXQgbWF0dGVycyB0aGF0IHlvdSBwYXRjaCBvYmplY3RzIGluIHRoZSBuYW1lc3BhY2Ugd2hlcmUgdGhleQorICAgV2l0aCA6ZnVuYzpgcGF0Y2hgIGl0IG1hdHRlcnMgdGhhdCB5b3UgcGF0Y2ggb2JqZWN0cyBpbiB0aGUgbmFtZXNwYWNlIHdoZXJlIHRoZXkKICAgIGFyZSBsb29rZWQgdXAuIFRoaXMgaXMgbm9ybWFsbHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgZm9yIGEgcXVpY2sgZ3VpZGUKICAgIHJlYWQgOnJlZjpgd2hlcmUgdG8gcGF0Y2ggPHdoZXJlLXRvLXBhdGNoPmAuCiAKLUFzIHdlbGwgYXMgYSBkZWNvcmF0b3IgYHBhdGNoYCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciBpbiBhIHdpdGgKK0FzIHdlbGwgYXMgYSBkZWNvcmF0b3IgOmZ1bmM6YHBhdGNoYCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciBpbiBhIHdpdGgKIHN0YXRlbWVudDoKIAogICAgID4+PiB3aXRoIHBhdGNoLm9iamVjdChQcm9kdWN0aW9uQ2xhc3MsICdtZXRob2QnLCByZXR1cm5fdmFsdWU9Tm9uZSkgYXMgbW9ja19tZXRob2Q6CkBAIC0xMzUsNyArMTM1LDcgQEAKICAgICA+Pj4gbW9jay5fX3N0cl9fLmFzc2VydF9jYWxsZWRfd2l0aCgpCiAKIE1vY2sgYWxsb3dzIHlvdSB0byBhc3NpZ24gZnVuY3Rpb25zIChvciBvdGhlciBNb2NrIGluc3RhbmNlcykgdG8gbWFnaWMgbWV0aG9kcwotYW5kIHRoZXkgd2lsbCBiZSBjYWxsZWQgYXBwcm9wcmlhdGVseS4gVGhlIGBNYWdpY01vY2tgIGNsYXNzIGlzIGp1c3QgYSBNb2NrCithbmQgdGhleSB3aWxsIGJlIGNhbGxlZCBhcHByb3ByaWF0ZWx5LiBUaGUgOmNsYXNzOmBNYWdpY01vY2tgIGNsYXNzIGlzIGp1c3QgYSBNb2NrCiB2YXJpYW50IHRoYXQgaGFzIGFsbCBvZiB0aGUgbWFnaWMgbWV0aG9kcyBwcmUtY3JlYXRlZCBmb3IgeW91ICh3ZWxsLCBhbGwgdGhlCiB1c2VmdWwgb25lcyBhbnl3YXkpLgogCkBAIC0xNDksNyArMTQ5LDcgQEAKIAogRm9yIGVuc3VyaW5nIHRoYXQgdGhlIG1vY2sgb2JqZWN0cyBpbiB5b3VyIHRlc3RzIGhhdmUgdGhlIHNhbWUgYXBpIGFzIHRoZQogb2JqZWN0cyB0aGV5IGFyZSByZXBsYWNpbmcsIHlvdSBjYW4gdXNlIDpyZWY6YGF1dG8tc3BlY2NpbmcgPGF1dG8tc3BlY2Npbmc+YC4KLUF1dG8tc3BlY2NpbmcgY2FuIGJlIGRvbmUgdGhyb3VnaCB0aGUgYGF1dG9zcGVjYCBhcmd1bWVudCB0byBwYXRjaCwgb3IgdGhlCitBdXRvLXNwZWNjaW5nIGNhbiBiZSBkb25lIHRocm91Z2ggdGhlICphdXRvc3BlYyogYXJndW1lbnQgdG8gcGF0Y2gsIG9yIHRoZQogOmZ1bmM6YGNyZWF0ZV9hdXRvc3BlY2AgZnVuY3Rpb24uIEF1dG8tc3BlY2NpbmcgY3JlYXRlcyBtb2NrIG9iamVjdHMgdGhhdAogaGF2ZSB0aGUgc2FtZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIGFzIHRoZSBvYmplY3RzIHRoZXkgYXJlIHJlcGxhY2luZywgYW5kCiBhbnkgZnVuY3Rpb25zIGFuZCBtZXRob2RzIChpbmNsdWRpbmcgY29uc3RydWN0b3JzKSBoYXZlIHRoZSBzYW1lIGNhbGwKQEAgLTE3MSw5ICsxNzEsOSBAQAogICAgIC4uLgogICAgVHlwZUVycm9yOiA8bGFtYmRhPigpIHRha2VzIGV4YWN0bHkgMyBhcmd1bWVudHMgKDEgZ2l2ZW4pCiAKLWBjcmVhdGVfYXV0b3NwZWNgIGNhbiBhbHNvIGJlIHVzZWQgb24gY2xhc3Nlcywgd2hlcmUgaXQgY29waWVzIHRoZSBzaWduYXR1cmUgb2YKLXRoZSBgX19pbml0X19gIG1ldGhvZCwgYW5kIG9uIGNhbGxhYmxlIG9iamVjdHMgd2hlcmUgaXQgY29waWVzIHRoZSBzaWduYXR1cmUgb2YKLXRoZSBgX19jYWxsX19gIG1ldGhvZC4KKzpmdW5jOmBjcmVhdGVfYXV0b3NwZWNgIGNhbiBhbHNvIGJlIHVzZWQgb24gY2xhc3Nlcywgd2hlcmUgaXQgY29waWVzIHRoZSBzaWduYXR1cmUgb2YKK3RoZSBgYF9faW5pdF9fYGAgbWV0aG9kLCBhbmQgb24gY2FsbGFibGUgb2JqZWN0cyB3aGVyZSBpdCBjb3BpZXMgdGhlIHNpZ25hdHVyZSBvZgordGhlIGBgX19jYWxsX19gYCBtZXRob2QuCiAKIAogCkBAIC0xODEsNzEgKzE4MSw3MSBAQAogLS0tLS0tLS0tLS0tLS0KIAogCi1gTW9ja2AgaXMgYSBmbGV4aWJsZSBtb2NrIG9iamVjdCBpbnRlbmRlZCB0byByZXBsYWNlIHRoZSB1c2Ugb2Ygc3R1YnMgYW5kCis6Y2xhc3M6YE1vY2tgIGlzIGEgZmxleGlibGUgbW9jayBvYmplY3QgaW50ZW5kZWQgdG8gcmVwbGFjZSB0aGUgdXNlIG9mIHN0dWJzIGFuZAogdGVzdCBkb3VibGVzIHRocm91Z2hvdXQgeW91ciBjb2RlLiBNb2NrcyBhcmUgY2FsbGFibGUgYW5kIGNyZWF0ZSBhdHRyaWJ1dGVzIGFzCiBuZXcgbW9ja3Mgd2hlbiB5b3UgYWNjZXNzIHRoZW0gWyNdXy4gQWNjZXNzaW5nIHRoZSBzYW1lIGF0dHJpYnV0ZSB3aWxsIGFsd2F5cwogcmV0dXJuIHRoZSBzYW1lIG1vY2suIE1vY2tzIHJlY29yZCBob3cgeW91IHVzZSB0aGVtLCBhbGxvd2luZyB5b3UgdG8gbWFrZQogYXNzZXJ0aW9ucyBhYm91dCB3aGF0IHlvdXIgY29kZSBoYXMgZG9uZSB0byB0aGVtLgogCi06Y2xhc3M6YE1hZ2ljTW9ja2AgaXMgYSBzdWJjbGFzcyBvZiBgTW9ja2Agd2l0aCBhbGwgdGhlIG1hZ2ljIG1ldGhvZHMKKzpjbGFzczpgTWFnaWNNb2NrYCBpcyBhIHN1YmNsYXNzIG9mIDpjbGFzczpgTW9ja2Agd2l0aCBhbGwgdGhlIG1hZ2ljIG1ldGhvZHMKIHByZS1jcmVhdGVkIGFuZCByZWFkeSB0byB1c2UuIFRoZXJlIGFyZSBhbHNvIG5vbi1jYWxsYWJsZSB2YXJpYW50cywgdXNlZnVsCiB3aGVuIHlvdSBhcmUgbW9ja2luZyBvdXQgb2JqZWN0cyB0aGF0IGFyZW4ndCBjYWxsYWJsZToKIDpjbGFzczpgTm9uQ2FsbGFibGVNb2NrYCBhbmQgOmNsYXNzOmBOb25DYWxsYWJsZU1hZ2ljTW9ja2AKIAogVGhlIDpmdW5jOmBwYXRjaGAgZGVjb3JhdG9ycyBtYWtlcyBpdCBlYXN5IHRvIHRlbXBvcmFyaWx5IHJlcGxhY2UgY2xhc3NlcwotaW4gYSBwYXJ0aWN1bGFyIG1vZHVsZSB3aXRoIGEgYE1vY2tgIG9iamVjdC4gQnkgZGVmYXVsdCBgcGF0Y2hgIHdpbGwgY3JlYXRlCi1hIGBNYWdpY01vY2tgIGZvciB5b3UuIFlvdSBjYW4gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBjbGFzcyBvZiBgTW9ja2AgdXNpbmcKLXRoZSBgbmV3X2NhbGxhYmxlYCBhcmd1bWVudCB0byBgcGF0Y2hgLgoraW4gYSBwYXJ0aWN1bGFyIG1vZHVsZSB3aXRoIGEgOmNsYXNzOmBNb2NrYCBvYmplY3QuIEJ5IGRlZmF1bHQgOmZ1bmM6YHBhdGNoYCB3aWxsIGNyZWF0ZQorYSA6Y2xhc3M6YE1hZ2ljTW9ja2AgZm9yIHlvdS4gWW91IGNhbiBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIGNsYXNzIG9mIDpjbGFzczpgTW9ja2AgdXNpbmcKK3RoZSAqbmV3X2NhbGxhYmxlKiBhcmd1bWVudCB0byA6ZnVuYzpgcGF0Y2hgLgogCiAKIC4uIGNsYXNzOjogTW9jayhzcGVjPU5vbmUsIHNpZGVfZWZmZWN0PU5vbmUsIHJldHVybl92YWx1ZT1ERUZBVUxULCB3cmFwcz1Ob25lLCBuYW1lPU5vbmUsIHNwZWNfc2V0PU5vbmUsICoqa3dhcmdzKQogCi0gICAgQ3JlYXRlIGEgbmV3IGBNb2NrYCBvYmplY3QuIGBNb2NrYCB0YWtlcyBzZXZlcmFsIG9wdGlvbmFsIGFyZ3VtZW50cworICAgIENyZWF0ZSBhIG5ldyA6Y2xhc3M6YE1vY2tgIG9iamVjdC4gOmNsYXNzOmBNb2NrYCB0YWtlcyBzZXZlcmFsIG9wdGlvbmFsIGFyZ3VtZW50cwogICAgIHRoYXQgc3BlY2lmeSB0aGUgYmVoYXZpb3VyIG9mIHRoZSBNb2NrIG9iamVjdDoKIAotICAgICogYHNwZWNgOiBUaGlzIGNhbiBiZSBlaXRoZXIgYSBsaXN0IG9mIHN0cmluZ3Mgb3IgYW4gZXhpc3Rpbmcgb2JqZWN0IChhCisgICAgKiAqc3BlYyo6IFRoaXMgY2FuIGJlIGVpdGhlciBhIGxpc3Qgb2Ygc3RyaW5ncyBvciBhbiBleGlzdGluZyBvYmplY3QgKGEKICAgICAgIGNsYXNzIG9yIGluc3RhbmNlKSB0aGF0IGFjdHMgYXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBtb2NrIG9iamVjdC4gSWYKICAgICAgIHlvdSBwYXNzIGluIGFuIG9iamVjdCB0aGVuIGEgbGlzdCBvZiBzdHJpbmdzIGlzIGZvcm1lZCBieSBjYWxsaW5nIGRpciBvbgogICAgICAgdGhlIG9iamVjdCAoZXhjbHVkaW5nIHVuc3VwcG9ydGVkIG1hZ2ljIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMpLgotICAgICAgQWNjZXNzaW5nIGFueSBhdHRyaWJ1dGUgbm90IGluIHRoaXMgbGlzdCB3aWxsIHJhaXNlIGFuIGBBdHRyaWJ1dGVFcnJvcmAuCisgICAgICBBY2Nlc3NpbmcgYW55IGF0dHJpYnV0ZSBub3QgaW4gdGhpcyBsaXN0IHdpbGwgcmFpc2UgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLgogCi0gICAgICBJZiBgc3BlY2AgaXMgYW4gb2JqZWN0IChyYXRoZXIgdGhhbiBhIGxpc3Qgb2Ygc3RyaW5ncykgdGhlbgorICAgICAgSWYgKnNwZWMqIGlzIGFuIG9iamVjdCAocmF0aGVyIHRoYW4gYSBsaXN0IG9mIHN0cmluZ3MpIHRoZW4KICAgICAgIDphdHRyOmB+aW5zdGFuY2UuX19jbGFzc19fYCByZXR1cm5zIHRoZSBjbGFzcyBvZiB0aGUgc3BlYyBvYmplY3QuIFRoaXMKLSAgICAgIGFsbG93cyBtb2NrcyB0byBwYXNzIGBpc2luc3RhbmNlYCB0ZXN0cy4KKyAgICAgIGFsbG93cyBtb2NrcyB0byBwYXNzIDpmdW5jOmBpc2luc3RhbmNlYCB0ZXN0cy4KIAotICAgICogYHNwZWNfc2V0YDogQSBzdHJpY3RlciB2YXJpYW50IG9mIGBzcGVjYC4gSWYgdXNlZCwgYXR0ZW1wdGluZyB0byAqc2V0KgorICAgICogKnNwZWNfc2V0KjogQSBzdHJpY3RlciB2YXJpYW50IG9mICpzcGVjKi4gSWYgdXNlZCwgYXR0ZW1wdGluZyB0byAqc2V0KgogICAgICAgb3IgZ2V0IGFuIGF0dHJpYnV0ZSBvbiB0aGUgbW9jayB0aGF0IGlzbid0IG9uIHRoZSBvYmplY3QgcGFzc2VkIGFzCi0gICAgICBgc3BlY19zZXRgIHdpbGwgcmFpc2UgYW4gYEF0dHJpYnV0ZUVycm9yYC4KKyAgICAgICpzcGVjX3NldCogd2lsbCByYWlzZSBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAuCiAKLSAgICAqIGBzaWRlX2VmZmVjdGA6IEEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSBNb2NrIGlzIGNhbGxlZC4gU2VlCisgICAgKiAqc2lkZV9lZmZlY3QqOiBBIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgTW9jayBpcyBjYWxsZWQuIFNlZQogICAgICAgdGhlIDphdHRyOmB+TW9jay5zaWRlX2VmZmVjdGAgYXR0cmlidXRlLiBVc2VmdWwgZm9yIHJhaXNpbmcgZXhjZXB0aW9ucyBvcgogICAgICAgZHluYW1pY2FsbHkgY2hhbmdpbmcgcmV0dXJuIHZhbHVlcy4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZSBzYW1lCiAgICAgICBhcmd1bWVudHMgYXMgdGhlIG1vY2ssIGFuZCB1bmxlc3MgaXQgcmV0dXJucyA6ZGF0YTpgREVGQVVMVGAsIHRoZSByZXR1cm4KICAgICAgIHZhbHVlIG9mIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgcmV0dXJuIHZhbHVlLgogCi0gICAgICBBbHRlcm5hdGl2ZWx5IGBzaWRlX2VmZmVjdGAgY2FuIGJlIGFuIGV4Y2VwdGlvbiBjbGFzcyBvciBpbnN0YW5jZS4gSW4KKyAgICAgIEFsdGVybmF0aXZlbHkgKnNpZGVfZWZmZWN0KiBjYW4gYmUgYW4gZXhjZXB0aW9uIGNsYXNzIG9yIGluc3RhbmNlLiBJbgogICAgICAgdGhpcyBjYXNlIHRoZSBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQgd2hlbiB0aGUgbW9jayBpcyBjYWxsZWQuCiAKLSAgICAgIElmIGBzaWRlX2VmZmVjdGAgaXMgYW4gaXRlcmFibGUgdGhlbiBlYWNoIGNhbGwgdG8gdGhlIG1vY2sgd2lsbCByZXR1cm4KKyAgICAgIElmICpzaWRlX2VmZmVjdCogaXMgYW4gaXRlcmFibGUgdGhlbiBlYWNoIGNhbGwgdG8gdGhlIG1vY2sgd2lsbCByZXR1cm4KICAgICAgIHRoZSBuZXh0IHZhbHVlIGZyb20gdGhlIGl0ZXJhYmxlLgogCi0gICAgICBBIGBzaWRlX2VmZmVjdGAgY2FuIGJlIGNsZWFyZWQgYnkgc2V0dGluZyBpdCB0byBgTm9uZWAuCisgICAgICBBICpzaWRlX2VmZmVjdCogY2FuIGJlIGNsZWFyZWQgYnkgc2V0dGluZyBpdCB0byBgYE5vbmVgYC4KIAotICAgICogYHJldHVybl92YWx1ZWA6IFRoZSB2YWx1ZSByZXR1cm5lZCB3aGVuIHRoZSBtb2NrIGlzIGNhbGxlZC4gQnkgZGVmYXVsdAorICAgICogKnJldHVybl92YWx1ZSo6IFRoZSB2YWx1ZSByZXR1cm5lZCB3aGVuIHRoZSBtb2NrIGlzIGNhbGxlZC4gQnkgZGVmYXVsdAogICAgICAgdGhpcyBpcyBhIG5ldyBNb2NrIChjcmVhdGVkIG9uIGZpcnN0IGFjY2VzcykuIFNlZSB0aGUKICAgICAgIDphdHRyOmByZXR1cm5fdmFsdWVgIGF0dHJpYnV0ZS4KIAotICAgICogYHdyYXBzYDogSXRlbSBmb3IgdGhlIG1vY2sgb2JqZWN0IHRvIHdyYXAuIElmIGB3cmFwc2AgaXMgbm90IE5vbmUgdGhlbgorICAgICogKndyYXBzKjogSXRlbSBmb3IgdGhlIG1vY2sgb2JqZWN0IHRvIHdyYXAuIElmICp3cmFwcyogaXMgbm90IE5vbmUgdGhlbgogICAgICAgY2FsbGluZyB0aGUgTW9jayB3aWxsIHBhc3MgdGhlIGNhbGwgdGhyb3VnaCB0byB0aGUgd3JhcHBlZCBvYmplY3QKICAgICAgIChyZXR1cm5pbmcgdGhlIHJlYWwgcmVzdWx0KS4gQXR0cmlidXRlIGFjY2VzcyBvbiB0aGUgbW9jayB3aWxsIHJldHVybiBhCiAgICAgICBNb2NrIG9iamVjdCB0aGF0IHdyYXBzIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZSBvZiB0aGUgd3JhcHBlZAogICAgICAgb2JqZWN0IChzbyBhdHRlbXB0aW5nIHRvIGFjY2VzcyBhbiBhdHRyaWJ1dGUgdGhhdCBkb2Vzbid0IGV4aXN0IHdpbGwKLSAgICAgIHJhaXNlIGFuIGBBdHRyaWJ1dGVFcnJvcmApLgorICAgICAgcmFpc2UgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgKS4KIAotICAgICAgSWYgdGhlIG1vY2sgaGFzIGFuIGV4cGxpY2l0IGByZXR1cm5fdmFsdWVgIHNldCB0aGVuIGNhbGxzIGFyZSBub3QgcGFzc2VkCi0gICAgICB0byB0aGUgd3JhcHBlZCBvYmplY3QgYW5kIHRoZSBgcmV0dXJuX3ZhbHVlYCBpcyByZXR1cm5lZCBpbnN0ZWFkLgorICAgICAgSWYgdGhlIG1vY2sgaGFzIGFuIGV4cGxpY2l0ICpyZXR1cm5fdmFsdWUqIHNldCB0aGVuIGNhbGxzIGFyZSBub3QgcGFzc2VkCisgICAgICB0byB0aGUgd3JhcHBlZCBvYmplY3QgYW5kIHRoZSAqcmV0dXJuX3ZhbHVlKiBpcyByZXR1cm5lZCBpbnN0ZWFkLgogCi0gICAgKiBgbmFtZWA6IElmIHRoZSBtb2NrIGhhcyBhIG5hbWUgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHJlcHIgb2YgdGhlCisgICAgKiAqbmFtZSo6IElmIHRoZSBtb2NrIGhhcyBhIG5hbWUgdGhlbiBpdCB3aWxsIGJlIHVzZWQgaW4gdGhlIHJlcHIgb2YgdGhlCiAgICAgICBtb2NrLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGRlYnVnZ2luZy4gVGhlIG5hbWUgaXMgcHJvcGFnYXRlZCB0byBjaGlsZAogICAgICAgbW9ja3MuCiAKQEAgLTI2NCw3ICsyNjQsNiBAQAogICAgICAgICAgICAgPE1vY2sgbmFtZT0nbW9jay5tZXRob2QoKScgaWQ9Jy4uLic+CiAgICAgICAgICAgICA+Pj4gbW9jay5tZXRob2QuYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMsIHRlc3Q9J3dvdycpCiAKLQogICAgIC4uIG1ldGhvZDo6IGFzc2VydF9jYWxsZWRfb25jZV93aXRoKCphcmdzLCAqKmt3YXJncykKIAogICAgICAgIEFzc2VydCB0aGF0IHRoZSBtb2NrIHdhcyBjYWxsZWQgZXhhY3RseSBvbmNlIGFuZCB3aXRoIHRoZSBzcGVjaWZpZWQKQEAgLTI5NywxMyArMjk2LDEzIEBACiAgICAgLi4gbWV0aG9kOjogYXNzZXJ0X2hhc19jYWxscyhjYWxscywgYW55X29yZGVyPUZhbHNlKQogCiAgICAgICAgIGFzc2VydCB0aGUgbW9jayBoYXMgYmVlbiBjYWxsZWQgd2l0aCB0aGUgc3BlY2lmaWVkIGNhbGxzLgotICAgICAgICBUaGUgYG1vY2tfY2FsbHNgIGxpc3QgaXMgY2hlY2tlZCBmb3IgdGhlIGNhbGxzLgorICAgICAgICBUaGUgOmF0dHI6YG1vY2tfY2FsbHNgIGxpc3QgaXMgY2hlY2tlZCBmb3IgdGhlIGNhbGxzLgogCi0gICAgICAgIElmIGBhbnlfb3JkZXJgIGlzIGZhbHNlICh0aGUgZGVmYXVsdCkgdGhlbiB0aGUgY2FsbHMgbXVzdCBiZQorICAgICAgICBJZiAqYW55X29yZGVyKiBpcyBmYWxzZSAodGhlIGRlZmF1bHQpIHRoZW4gdGhlIGNhbGxzIG11c3QgYmUKICAgICAgICAgc2VxdWVudGlhbC4gVGhlcmUgY2FuIGJlIGV4dHJhIGNhbGxzIGJlZm9yZSBvciBhZnRlciB0aGUKICAgICAgICAgc3BlY2lmaWVkIGNhbGxzLgogCi0gICAgICAgIElmIGBhbnlfb3JkZXJgIGlzIHRydWUgdGhlbiB0aGUgY2FsbHMgY2FuIGJlIGluIGFueSBvcmRlciwgYnV0CisgICAgICAgIElmICphbnlfb3JkZXIqIGlzIHRydWUgdGhlbiB0aGUgY2FsbHMgY2FuIGJlIGluIGFueSBvcmRlciwgYnV0CiAgICAgICAgIHRoZXkgbXVzdCBhbGwgYXBwZWFyIGluIDphdHRyOmBtb2NrX2NhbGxzYC4KIAogICAgICAgICAgICAgPj4+IG1vY2sgPSBNb2NrKHJldHVybl92YWx1ZT1Ob25lKQpAQCAtMzMwLDcgKzMyOSw3IEBACiAgICAgICAgICAgICBGYWxzZQogCiAgICAgICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVyZSB5b3Ugd2FudCB0byBtYWtlIGEgc2VyaWVzIG9mIGFzc2VydGlvbnMgdGhhdAotICAgICAgICByZXVzZSB0aGUgc2FtZSBvYmplY3QuIE5vdGUgdGhhdCBgcmVzZXRfbW9ja2AgKmRvZXNuJ3QqIGNsZWFyIHRoZQorICAgICAgICByZXVzZSB0aGUgc2FtZSBvYmplY3QuIE5vdGUgdGhhdCA6bWV0aDpgcmVzZXRfbW9ja2AgKmRvZXNuJ3QqIGNsZWFyIHRoZQogICAgICAgICByZXR1cm4gdmFsdWUsIDphdHRyOmBzaWRlX2VmZmVjdGAgb3IgYW55IGNoaWxkIGF0dHJpYnV0ZXMgeW91IGhhdmUKICAgICAgICAgc2V0IHVzaW5nIG5vcm1hbCBhc3NpZ25tZW50LiBDaGlsZCBtb2NrcyBhbmQgdGhlIHJldHVybiB2YWx1ZSBtb2NrCiAgICAgICAgIChpZiBhbnkpIGFyZSByZXNldCBhcyB3ZWxsLgpAQCAtMzM4LDExICszMzcsMTEgQEAKIAogICAgIC4uIG1ldGhvZDo6IG1vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQ9RmFsc2UpCiAKLSAgICAgICAgQWRkIGEgc3BlYyB0byBhIG1vY2suIGBzcGVjYCBjYW4gZWl0aGVyIGJlIGFuIG9iamVjdCBvciBhCi0gICAgICAgIGxpc3Qgb2Ygc3RyaW5ncy4gT25seSBhdHRyaWJ1dGVzIG9uIHRoZSBgc3BlY2AgY2FuIGJlIGZldGNoZWQgYXMKKyAgICAgICAgQWRkIGEgc3BlYyB0byBhIG1vY2suICpzcGVjKiBjYW4gZWl0aGVyIGJlIGFuIG9iamVjdCBvciBhCisgICAgICAgIGxpc3Qgb2Ygc3RyaW5ncy4gT25seSBhdHRyaWJ1dGVzIG9uIHRoZSAqc3BlYyogY2FuIGJlIGZldGNoZWQgYXMKICAgICAgICAgYXR0cmlidXRlcyBmcm9tIHRoZSBtb2NrLgogCi0gICAgICAgIElmIGBzcGVjX3NldGAgaXMgYFRydWVgIHRoZW4gb25seSBhdHRyaWJ1dGVzIG9uIHRoZSBzcGVjIGNhbiBiZSBzZXQuCisgICAgICAgIElmICpzcGVjX3NldCogaXMgdHJ1ZSB0aGVuIG9ubHkgYXR0cmlidXRlcyBvbiB0aGUgc3BlYyBjYW4gYmUgc2V0LgogCiAKICAgICAuLiBtZXRob2Q6OiBhdHRhY2hfbW9jayhtb2NrLCBhdHRyaWJ1dGUpCkBAIC0zODMsMTQgKzM4MiwxNCBAQAogICAgICAgICAgICAgICAuLi4KICAgICAgICAgICAgIEtleUVycm9yCiAKLSAgICAgICAgYGNvbmZpZ3VyZV9tb2NrYCBleGlzdHMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZG8gY29uZmlndXJhdGlvbgorICAgICAgICA6bWV0aDpgY29uZmlndXJlX21vY2tgIGV4aXN0cyB0byBtYWtlIGl0IGVhc2llciB0byBkbyBjb25maWd1cmF0aW9uCiAgICAgICAgIGFmdGVyIHRoZSBtb2NrIGhhcyBiZWVuIGNyZWF0ZWQuCiAKIAogICAgIC4uIG1ldGhvZDo6IF9fZGlyX18oKQogCi0gICAgICAgIGBNb2NrYCBvYmplY3RzIGxpbWl0IHRoZSByZXN1bHRzIG9mIGBkaXIoc29tZV9tb2NrKWAgdG8gdXNlZnVsIHJlc3VsdHMuCi0gICAgICAgIEZvciBtb2NrcyB3aXRoIGEgYHNwZWNgIHRoaXMgaW5jbHVkZXMgYWxsIHRoZSBwZXJtaXR0ZWQgYXR0cmlidXRlcworICAgICAgICA6Y2xhc3M6YE1vY2tgIG9iamVjdHMgbGltaXQgdGhlIHJlc3VsdHMgb2YgYGBkaXIoc29tZV9tb2NrKWBgIHRvIHVzZWZ1bCByZXN1bHRzLgorICAgICAgICBGb3IgbW9ja3Mgd2l0aCBhICpzcGVjKiB0aGlzIGluY2x1ZGVzIGFsbCB0aGUgcGVybWl0dGVkIGF0dHJpYnV0ZXMKICAgICAgICAgZm9yIHRoZSBtb2NrLgogCiAgICAgICAgIFNlZSA6ZGF0YTpgRklMVEVSX0RJUmAgZm9yIHdoYXQgdGhpcyBmaWx0ZXJpbmcgZG9lcywgYW5kIGhvdyB0bwpAQCAtNDUwLDcgKzQ0OSw3IEBACiAgICAgICAgICAgICA8TW9jayBuYW1lPSdtb2NrKCkoKScgaWQ9Jy4uLic+CiAgICAgICAgICAgICA+Pj4gbW9jay5yZXR1cm5fdmFsdWUuYXNzZXJ0X2NhbGxlZF93aXRoKCkKIAotICAgICAgICBgcmV0dXJuX3ZhbHVlYCBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yOgorICAgICAgICA6YXR0cjpgcmV0dXJuX3ZhbHVlYCBjYW4gYWxzbyBiZSBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yOgogCiAgICAgICAgICAgICA+Pj4gbW9jayA9IE1vY2socmV0dXJuX3ZhbHVlPTMpCiAgICAgICAgICAgICA+Pj4gbW9jay5yZXR1cm5fdmFsdWUKQEAgLTQ2Miw3ICs0NjEsNyBAQAogICAgIC4uIGF0dHJpYnV0ZTo6IHNpZGVfZWZmZWN0CiAKICAgICAgICAgVGhpcyBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gdGhlIG1vY2sgaXMgY2FsbGVkLAotICAgICAgICBvciBhbiBleGNlcHRpb24gKGNsYXNzIG9yIGluc3RhbmNlKSB0byBiZSByYWlzZWQuCisgICAgICAgIGFuIGl0ZXJhYmxlIG9yIGFuIGV4Y2VwdGlvbiAoY2xhc3Mgb3IgaW5zdGFuY2UpIHRvIGJlIHJhaXNlZC4KIAogICAgICAgICBJZiB5b3UgcGFzcyBpbiBhIGZ1bmN0aW9uIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggc2FtZSBhcmd1bWVudHMgYXMgdGhlCiAgICAgICAgIG1vY2sgYW5kIHVubGVzcyB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgOmRhdGE6YERFRkFVTFRgIHNpbmdsZXRvbiB0aGUKQEAgLTQ3MCw2ICs0NjksMTEgQEAKICAgICAgICAgZnVuY3Rpb24gcmV0dXJucyA6ZGF0YTpgREVGQVVMVGAgdGhlbiB0aGUgbW9jayB3aWxsIHJldHVybiBpdHMgbm9ybWFsCiAgICAgICAgIHZhbHVlIChmcm9tIHRoZSA6YXR0cjpgcmV0dXJuX3ZhbHVlYCkuCiAKKyAgICAgICAgSWYgeW91IHBhc3MgaW4gYW4gaXRlcmFibGUsIGl0IGlzIHVzZWQgdG8gcmV0cmlldmUgYW4gaXRlcmF0b3Igd2hpY2gKKyAgICAgICAgbXVzdCB5aWVsZCBhIHZhbHVlIG9uIGV2ZXJ5IGNhbGwuICBUaGlzIHZhbHVlIGNhbiBlaXRoZXIgYmUgYW4gZXhjZXB0aW9uCisgICAgICAgIGluc3RhbmNlIHRvIGJlIHJhaXNlZCwgb3IgYSB2YWx1ZSB0byBiZSByZXR1cm5lZCBmcm9tIHRoZSBjYWxsIHRvIHRoZQorICAgICAgICBtb2NrICg6ZGF0YTpgREVGQVVMVGAgaGFuZGxpbmcgaXMgaWRlbnRpY2FsIHRvIHRoZSBmdW5jdGlvbiBjYXNlKS4KKwogICAgICAgICBBbiBleGFtcGxlIG9mIGEgbW9jayB0aGF0IHJhaXNlcyBhbiBleGNlcHRpb24gKHRvIHRlc3QgZXhjZXB0aW9uCiAgICAgICAgIGhhbmRsaW5nIG9mIGFuIEFQSSk6CiAKQEAgLTQ4MCwxOCArNDg0LDE0IEBACiAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgRXhjZXB0aW9uOiBCb29tIQogCi0gICAgICAgIFVzaW5nIGBzaWRlX2VmZmVjdGAgdG8gcmV0dXJuIGEgc2VxdWVuY2Ugb2YgdmFsdWVzOgorICAgICAgICBVc2luZyA6YXR0cjpgc2lkZV9lZmZlY3RgIHRvIHJldHVybiBhIHNlcXVlbmNlIG9mIHZhbHVlczoKIAogICAgICAgICAgICAgPj4+IG1vY2sgPSBNb2NrKCkKICAgICAgICAgICAgID4+PiBtb2NrLnNpZGVfZWZmZWN0ID0gWzMsIDIsIDFdCiAgICAgICAgICAgICA+Pj4gbW9jaygpLCBtb2NrKCksIG1vY2soKQogICAgICAgICAgICAgKDMsIDIsIDEpCiAKLSAgICAgICAgVGhlIGBzaWRlX2VmZmVjdGAgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzIGFzIHRoZQotICAgICAgICBtb2NrIChzbyBpdCBpcyB3aXNlIGZvciBpdCB0byB0YWtlIGFyYml0cmFyeSBhcmdzIGFuZCBrZXl3b3JkCi0gICAgICAgIGFyZ3VtZW50cykgYW5kIHdoYXRldmVyIGl0IHJldHVybnMgaXMgdXNlZCBhcyB0aGUgcmV0dXJuIHZhbHVlIGZvcgotICAgICAgICB0aGUgY2FsbC4gVGhlIGV4Y2VwdGlvbiBpcyBpZiBgc2lkZV9lZmZlY3RgIHJldHVybnMgOmRhdGE6YERFRkFVTFRgLAotICAgICAgICBpbiB3aGljaCBjYXNlIHRoZSBub3JtYWwgOmF0dHI6YHJldHVybl92YWx1ZWAgaXMgdXNlZC4KKyAgICAgICAgVXNpbmcgYSBjYWxsYWJsZToKIAogICAgICAgICAgICAgPj4+IG1vY2sgPSBNb2NrKHJldHVybl92YWx1ZT0zKQogICAgICAgICAgICAgPj4+IGRlZiBzaWRlX2VmZmVjdCgqYXJncywgKiprd2FyZ3MpOgpAQCAtNTAxLDcgKzUwMSw3IEBACiAgICAgICAgICAgICA+Pj4gbW9jaygpCiAgICAgICAgICAgICAzCiAKLSAgICAgICAgYHNpZGVfZWZmZWN0YCBjYW4gYmUgc2V0IGluIHRoZSBjb25zdHJ1Y3Rvci4gSGVyZSdzIGFuIGV4YW1wbGUgdGhhdAorICAgICAgICA6YXR0cjpgc2lkZV9lZmZlY3RgIGNhbiBiZSBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yLiBIZXJlJ3MgYW4gZXhhbXBsZSB0aGF0CiAgICAgICAgIGFkZHMgb25lIHRvIHRoZSB2YWx1ZSB0aGUgbW9jayBpcyBjYWxsZWQgd2l0aCBhbmQgcmV0dXJucyBpdDoKIAogICAgICAgICAgICAgPj4+IHNpZGVfZWZmZWN0ID0gbGFtYmRhIHZhbHVlOiB2YWx1ZSArIDEKQEAgLTUxMSw3ICs1MTEsNyBAQAogICAgICAgICAgICAgPj4+IG1vY2soLTgpCiAgICAgICAgICAgICAtNwogCi0gICAgICAgIFNldHRpbmcgYHNpZGVfZWZmZWN0YCB0byBgTm9uZWAgY2xlYXJzIGl0OgorICAgICAgICBTZXR0aW5nIDphdHRyOmBzaWRlX2VmZmVjdGAgdG8gYGBOb25lYGAgY2xlYXJzIGl0OgogCiAgICAgICAgICAgICA+Pj4gbSA9IE1vY2soc2lkZV9lZmZlY3Q9S2V5RXJyb3IsIHJldHVybl92YWx1ZT0zKQogICAgICAgICAgICAgPj4+IG0oKQpAQCAtNTI1LDE0ICs1MjUsMTQgQEAKIAogICAgIC4uIGF0dHJpYnV0ZTo6IGNhbGxfYXJncwogCi0gICAgICAgIFRoaXMgaXMgZWl0aGVyIGBOb25lYCAoaWYgdGhlIG1vY2sgaGFzbid0IGJlZW4gY2FsbGVkKSwgb3IgdGhlCisgICAgICAgIFRoaXMgaXMgZWl0aGVyIGBgTm9uZWBgIChpZiB0aGUgbW9jayBoYXNuJ3QgYmVlbiBjYWxsZWQpLCBvciB0aGUKICAgICAgICAgYXJndW1lbnRzIHRoYXQgdGhlIG1vY2sgd2FzIGxhc3QgY2FsbGVkIHdpdGguIFRoaXMgd2lsbCBiZSBpbiB0aGUKICAgICAgICAgZm9ybSBvZiBhIHR1cGxlOiB0aGUgZmlyc3QgbWVtYmVyIGlzIGFueSBvcmRlcmVkIGFyZ3VtZW50cyB0aGUgbW9jawogICAgICAgICB3YXMgY2FsbGVkIHdpdGggKG9yIGFuIGVtcHR5IHR1cGxlKSBhbmQgdGhlIHNlY29uZCBtZW1iZXIgaXMgYW55CiAgICAgICAgIGtleXdvcmQgYXJndW1lbnRzIChvciBhbiBlbXB0eSBkaWN0aW9uYXJ5KS4KIAogICAgICAgICAgICAgPj4+IG1vY2sgPSBNb2NrKHJldHVybl92YWx1ZT1Ob25lKQotICAgICAgICAgICAgPj4+IHByaW50IG1vY2suY2FsbF9hcmdzCisgICAgICAgICAgICA+Pj4gcHJpbnQobW9jay5jYWxsX2FyZ3MpCiAgICAgICAgICAgICBOb25lCiAgICAgICAgICAgICA+Pj4gbW9jaygpCiAgICAgICAgICAgICA+Pj4gbW9jay5jYWxsX2FyZ3MKQEAgLTU0OCw3ICs1NDgsNyBAQAogICAgICAgICAgICAgPj4+IG1vY2suY2FsbF9hcmdzCiAgICAgICAgICAgICBjYWxsKDMsIDQsIDUsIGtleT0nZmlzaCcsIG5leHQ9J3cwMHQhJykKIAotICAgICAgICBgY2FsbF9hcmdzYCwgYWxvbmcgd2l0aCBtZW1iZXJzIG9mIHRoZSBsaXN0cyA6YXR0cjpgY2FsbF9hcmdzX2xpc3RgLAorICAgICAgICA6YXR0cjpgY2FsbF9hcmdzYCwgYWxvbmcgd2l0aCBtZW1iZXJzIG9mIHRoZSBsaXN0cyA6YXR0cjpgY2FsbF9hcmdzX2xpc3RgLAogICAgICAgICA6YXR0cjpgbWV0aG9kX2NhbGxzYCBhbmQgOmF0dHI6YG1vY2tfY2FsbHNgIGFyZSA6ZGF0YTpgY2FsbGAgb2JqZWN0cy4KICAgICAgICAgVGhlc2UgYXJlIHR1cGxlcywgc28gdGhleSBjYW4gYmUgdW5wYWNrZWQgdG8gZ2V0IGF0IHRoZSBpbmRpdmlkdWFsCiAgICAgICAgIGFyZ3VtZW50cyBhbmQgbWFrZSBtb3JlIGNvbXBsZXggYXNzZXJ0aW9ucy4gU2VlCkBAIC01NjEsNyArNTYxLDcgQEAKICAgICAgICAgKHNvIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgaXMgdGhlIG51bWJlciBvZiB0aW1lcyBpdCBoYXMgYmVlbgogICAgICAgICBjYWxsZWQpLiBCZWZvcmUgYW55IGNhbGxzIGhhdmUgYmVlbiBtYWRlIGl0IGlzIGFuIGVtcHR5IGxpc3QuIFRoZQogICAgICAgICA6ZGF0YTpgY2FsbGAgb2JqZWN0IGNhbiBiZSB1c2VkIGZvciBjb252ZW5pZW50bHkgY29uc3RydWN0aW5nIGxpc3RzIG9mCi0gICAgICAgIGNhbGxzIHRvIGNvbXBhcmUgd2l0aCBgY2FsbF9hcmdzX2xpc3RgLgorICAgICAgICBjYWxscyB0byBjb21wYXJlIHdpdGggOmF0dHI6YGNhbGxfYXJnc19saXN0YC4KIAogICAgICAgICAgICAgPj4+IG1vY2sgPSBNb2NrKHJldHVybl92YWx1ZT1Ob25lKQogICAgICAgICAgICAgPj4+IG1vY2soKQpAQCAtNTczLDcgKzU3Myw3IEBACiAgICAgICAgICAgICA+Pj4gbW9jay5jYWxsX2FyZ3NfbGlzdCA9PSBleHBlY3RlZAogICAgICAgICAgICAgVHJ1ZQogCi0gICAgICAgIE1lbWJlcnMgb2YgYGNhbGxfYXJnc19saXN0YCBhcmUgOmRhdGE6YGNhbGxgIG9iamVjdHMuIFRoZXNlIGNhbiBiZQorICAgICAgICBNZW1iZXJzIG9mIDphdHRyOmBjYWxsX2FyZ3NfbGlzdGAgYXJlIDpkYXRhOmBjYWxsYCBvYmplY3RzLiBUaGVzZSBjYW4gYmUKICAgICAgICAgdW5wYWNrZWQgYXMgdHVwbGVzIHRvIGdldCBhdCB0aGUgaW5kaXZpZHVhbCBhcmd1bWVudHMuIFNlZQogICAgICAgICA6cmVmOmBjYWxscyBhcyB0dXBsZXMgPGNhbGxzLWFzLXR1cGxlcz5gLgogCkBAIC01OTEsMTUgKzU5MSwxNSBAQAogICAgICAgICAgICAgPj4+IG1vY2subWV0aG9kX2NhbGxzCiAgICAgICAgICAgICBbY2FsbC5tZXRob2QoKSwgY2FsbC5wcm9wZXJ0eS5tZXRob2QuYXR0cmlidXRlKCldCiAKLSAgICAgICAgTWVtYmVycyBvZiBgbWV0aG9kX2NhbGxzYCBhcmUgOmRhdGE6YGNhbGxgIG9iamVjdHMuIFRoZXNlIGNhbiBiZQorICAgICAgICBNZW1iZXJzIG9mIDphdHRyOmBtZXRob2RfY2FsbHNgIGFyZSA6ZGF0YTpgY2FsbGAgb2JqZWN0cy4gVGhlc2UgY2FuIGJlCiAgICAgICAgIHVucGFja2VkIGFzIHR1cGxlcyB0byBnZXQgYXQgdGhlIGluZGl2aWR1YWwgYXJndW1lbnRzLiBTZWUKICAgICAgICAgOnJlZjpgY2FsbHMgYXMgdHVwbGVzIDxjYWxscy1hcy10dXBsZXM+YC4KIAogCiAgICAgLi4gYXR0cmlidXRlOjogbW9ja19jYWxscwogCi0gICAgICAgIGBtb2NrX2NhbGxzYCByZWNvcmRzICphbGwqIGNhbGxzIHRvIHRoZSBtb2NrIG9iamVjdCwgaXRzIG1ldGhvZHMsIG1hZ2ljCi0gICAgICAgIG1ldGhvZHMgKmFuZCogcmV0dXJuIHZhbHVlIG1vY2tzLgorICAgICAgICA6YXR0cjpgbW9ja19jYWxsc2AgcmVjb3JkcyAqYWxsKiBjYWxscyB0byB0aGUgbW9jayBvYmplY3QsIGl0cyBtZXRob2RzLAorICAgICAgICBtYWdpYyBtZXRob2RzICphbmQqIHJldHVybiB2YWx1ZSBtb2Nrcy4KIAogICAgICAgICAgICAgPj4+IG1vY2sgPSBNYWdpY01vY2soKQogICAgICAgICAgICAgPj4+IHJlc3VsdCA9IG1vY2soMSwgMiwgMykKQEAgLTYxNiwyNCArNjE2LDI0IEBACiAgICAgICAgICAgICA+Pj4gbW9jay5tb2NrX2NhbGxzID09IGV4cGVjdGVkCiAgICAgICAgICAgICBUcnVlCiAKLSAgICAgICAgTWVtYmVycyBvZiBgbW9ja19jYWxsc2AgYXJlIDpkYXRhOmBjYWxsYCBvYmplY3RzLiBUaGVzZSBjYW4gYmUKKyAgICAgICAgTWVtYmVycyBvZiA6YXR0cjpgbW9ja19jYWxsc2AgYXJlIDpkYXRhOmBjYWxsYCBvYmplY3RzLiBUaGVzZSBjYW4gYmUKICAgICAgICAgdW5wYWNrZWQgYXMgdHVwbGVzIHRvIGdldCBhdCB0aGUgaW5kaXZpZHVhbCBhcmd1bWVudHMuIFNlZQogICAgICAgICA6cmVmOmBjYWxscyBhcyB0dXBsZXMgPGNhbGxzLWFzLXR1cGxlcz5gLgogCiAKICAgICAuLiBhdHRyaWJ1dGU6OiBfX2NsYXNzX18KIAotICAgICAgICBOb3JtYWxseSB0aGUgYF9fY2xhc3NfX2AgYXR0cmlidXRlIG9mIGFuIG9iamVjdCB3aWxsIHJldHVybiBpdHMgdHlwZS4KLSAgICAgICAgRm9yIGEgbW9jayBvYmplY3Qgd2l0aCBhIGBzcGVjYCBgX19jbGFzc19fYCByZXR1cm5zIHRoZSBzcGVjIGNsYXNzCi0gICAgICAgIGluc3RlYWQuIFRoaXMgYWxsb3dzIG1vY2sgb2JqZWN0cyB0byBwYXNzIGBpc2luc3RhbmNlYCB0ZXN0cyBmb3IgdGhlCisgICAgICAgIE5vcm1hbGx5IHRoZSA6YXR0cjpgX19jbGFzc19fYCBhdHRyaWJ1dGUgb2YgYW4gb2JqZWN0IHdpbGwgcmV0dXJuIGl0cyB0eXBlLgorICAgICAgICBGb3IgYSBtb2NrIG9iamVjdCB3aXRoIGEgOmF0dHI6YHNwZWNgLCBgYF9fY2xhc3NfX2BgIHJldHVybnMgdGhlIHNwZWMgY2xhc3MKKyAgICAgICAgaW5zdGVhZC4gVGhpcyBhbGxvd3MgbW9jayBvYmplY3RzIHRvIHBhc3MgOmZ1bmM6YGlzaW5zdGFuY2VgIHRlc3RzIGZvciB0aGUKICAgICAgICAgb2JqZWN0IHRoZXkgYXJlIHJlcGxhY2luZyAvIG1hc3F1ZXJhZGluZyBhczoKIAogICAgICAgICAgICAgPj4+IG1vY2sgPSBNb2NrKHNwZWM9MykKICAgICAgICAgICAgID4+PiBpc2luc3RhbmNlKG1vY2ssIGludCkKICAgICAgICAgICAgIFRydWUKIAotICAgICAgICBgX19jbGFzc19fYCBpcyBhc3NpZ25hYmxlIHRvLCB0aGlzIGFsbG93cyBhIG1vY2sgdG8gcGFzcyBhbgotICAgICAgICBgaXNpbnN0YW5jZWAgY2hlY2sgd2l0aG91dCBmb3JjaW5nIHlvdSB0byB1c2UgYSBzcGVjOgorICAgICAgICA6YXR0cjpgX19jbGFzc19fYCBpcyBhc3NpZ25hYmxlIHRvLCB0aGlzIGFsbG93cyBhIG1vY2sgdG8gcGFzcyBhbgorICAgICAgICA6ZnVuYzpgaXNpbnN0YW5jZWAgY2hlY2sgd2l0aG91dCBmb3JjaW5nIHlvdSB0byB1c2UgYSBzcGVjOgogCiAgICAgICAgICAgICA+Pj4gbW9jayA9IE1vY2soKQogICAgICAgICAgICAgPj4+IG1vY2suX19jbGFzc19fID0gZGljdApAQCAtNjQyLDEyICs2NDIsMTIgQEAKIAogLi4gY2xhc3M6OiBOb25DYWxsYWJsZU1vY2soc3BlYz1Ob25lLCB3cmFwcz1Ob25lLCBuYW1lPU5vbmUsIHNwZWNfc2V0PU5vbmUsICoqa3dhcmdzKQogCi0gICAgQSBub24tY2FsbGFibGUgdmVyc2lvbiBvZiBgTW9ja2AuIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUKLSAgICBtZWFuaW5nIG9mIGBNb2NrYCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGByZXR1cm5fdmFsdWVgIGFuZCBgc2lkZV9lZmZlY3RgCisgICAgQSBub24tY2FsbGFibGUgdmVyc2lvbiBvZiA6Y2xhc3M6YE1vY2tgLiBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lCisgICAgbWVhbmluZyBvZiA6Y2xhc3M6YE1vY2tgLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgKnJldHVybl92YWx1ZSogYW5kICpzaWRlX2VmZmVjdCoKICAgICB3aGljaCBoYXZlIG5vIG1lYW5pbmcgb24gYSBub24tY2FsbGFibGUgbW9jay4KIAotTW9jayBvYmplY3RzIHRoYXQgdXNlIGEgY2xhc3Mgb3IgYW4gaW5zdGFuY2UgYXMgYSBgc3BlY2Agb3IgYHNwZWNfc2V0YCBhcmUgYWJsZQotdG8gcGFzcyBgaXNpbnN0YW5jZWAgdGVzdHM6CitNb2NrIG9iamVjdHMgdGhhdCB1c2UgYSBjbGFzcyBvciBhbiBpbnN0YW5jZSBhcyBhIDphdHRyOmBzcGVjYCBvcgorOmF0dHI6YHNwZWNfc2V0YCBhcmUgYWJsZSB0byBwYXNzIDpmdW5jOmBpc2luc3RhbmNlYCB0ZXN0czoKIAogICAgID4+PiBtb2NrID0gTW9jayhzcGVjPVNvbWVDbGFzcykKICAgICA+Pj4gaXNpbnN0YW5jZShtb2NrLCBTb21lQ2xhc3MpCkBAIC02NTYsMTEgKzY1NiwxMSBAQAogICAgID4+PiBpc2luc3RhbmNlKG1vY2ssIFNvbWVDbGFzcykKICAgICBUcnVlCiAKLVRoZSBgTW9ja2AgY2xhc3NlcyBoYXZlIHN1cHBvcnQgZm9yIG1vY2tpbmcgbWFnaWMgbWV0aG9kcy4gU2VlIDpyZWY6YG1hZ2ljCitUaGUgOmNsYXNzOmBNb2NrYCBjbGFzc2VzIGhhdmUgc3VwcG9ydCBmb3IgbW9ja2luZyBtYWdpYyBtZXRob2RzLiBTZWUgOnJlZjpgbWFnaWMKIG1ldGhvZHMgPG1hZ2ljLW1ldGhvZHM+YCBmb3IgdGhlIGZ1bGwgZGV0YWlscy4KIAogVGhlIG1vY2sgY2xhc3NlcyBhbmQgdGhlIDpmdW5jOmBwYXRjaGAgZGVjb3JhdG9ycyBhbGwgdGFrZSBhcmJpdHJhcnkga2V5d29yZAotYXJndW1lbnRzIGZvciBjb25maWd1cmF0aW9uLiBGb3IgdGhlIGBwYXRjaGAgZGVjb3JhdG9ycyB0aGUga2V5d29yZHMgYXJlCithcmd1bWVudHMgZm9yIGNvbmZpZ3VyYXRpb24uIEZvciB0aGUgOmZ1bmM6YHBhdGNoYCBkZWNvcmF0b3JzIHRoZSBrZXl3b3JkcyBhcmUKIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3Igb2YgdGhlIG1vY2sgYmVpbmcgY3JlYXRlZC4gVGhlIGtleXdvcmQgYXJndW1lbnRzCiBhcmUgZm9yIGNvbmZpZ3VyaW5nIGF0dHJpYnV0ZXMgb2YgdGhlIG1vY2s6CiAKQEAgLTY3Miw3ICs2NzIsNyBAQAogCiBUaGUgcmV0dXJuIHZhbHVlIGFuZCBzaWRlIGVmZmVjdCBvZiBjaGlsZCBtb2NrcyBjYW4gYmUgc2V0IGluIHRoZSBzYW1lIHdheSwKIHVzaW5nIGRvdHRlZCBub3RhdGlvbi4gQXMgeW91IGNhbid0IHVzZSBkb3R0ZWQgbmFtZXMgZGlyZWN0bHkgaW4gYSBjYWxsIHlvdQotaGF2ZSB0byBjcmVhdGUgYSBkaWN0aW9uYXJ5IGFuZCB1bnBhY2sgaXQgdXNpbmcgYCoqYDoKK2hhdmUgdG8gY3JlYXRlIGEgZGljdGlvbmFyeSBhbmQgdW5wYWNrIGl0IHVzaW5nIGBgKipgYDoKIAogICAgID4+PiBhdHRycyA9IHsnbWV0aG9kLnJldHVybl92YWx1ZSc6IDMsICdvdGhlci5zaWRlX2VmZmVjdCc6IEtleUVycm9yfQogICAgID4+PiBtb2NrID0gTW9jayhzb21lX2F0dHJpYnV0ZT0nZWdncycsICoqYXR0cnMpCkBAIC02ODUsMTQgKzY4NSwzNSBAQAogICAgICAgLi4uCiAgICAgS2V5RXJyb3IKIAorQSBjYWxsYWJsZSBtb2NrIHdoaWNoIHdhcyBjcmVhdGVkIHdpdGggYSAqc3BlYyogKG9yIGEgKnNwZWNfc2V0Kikgd2lsbAoraW50cm9zcGVjdCB0aGUgc3BlY2lmaWNhdGlvbiBvYmplY3QncyBzaWduYXR1cmUgd2hlbiBtYXRjaGluZyBjYWxscyB0bwordGhlIG1vY2suICBUaGVyZWZvcmUsIGl0IGNhbiBtYXRjaCB0aGUgYWN0dWFsIGNhbGwncyBhcmd1bWVudHMgcmVnYXJkbGVzcworb2Ygd2hldGhlciB0aGV5IHdlcmUgcGFzc2VkIHBvc2l0aW9uYWxseSBvciBieSBuYW1lOjoKKworICAgPj4+IGRlZiBmKGEsIGIsIGMpOiBwYXNzCisgICAuLi4KKyAgID4+PiBtb2NrID0gTW9jayhzcGVjPWYpCisgICA+Pj4gbW9jaygxLCAyLCBjPTMpCisgICA8TW9jayBuYW1lPSdtb2NrKCknIGlkPScxNDAxNjE1ODA0NTY1NzYnPgorICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMpCisgICA+Pj4gbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoYT0xLCBiPTIsIGM9MykKKworVGhpcyBhcHBsaWVzIHRvIDptZXRoOmB+TW9jay5hc3NlcnRfY2FsbGVkX3dpdGhgLAorOm1ldGg6YH5Nb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoYCwgOm1ldGg6YH5Nb2NrLmFzc2VydF9oYXNfY2FsbHNgIGFuZAorOm1ldGg6YH5Nb2NrLmFzc2VydF9hbnlfY2FsbGAuICBXaGVuIDpyZWY6YGF1dG8tc3BlY2NpbmdgLCBpdCB3aWxsIGFsc28KK2FwcGx5IHRvIG1ldGhvZCBjYWxscyBvbiB0aGUgbW9jayBvYmplY3QuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBZGRlZCBzaWduYXR1cmUgaW50cm9zcGVjdGlvbiBvbiBzcGVjY2VkIGFuZCBhdXRvc3BlY2NlZCBtb2NrIG9iamVjdHMuCisKIAogLi4gY2xhc3M6OiBQcm9wZXJ0eU1vY2soKmFyZ3MsICoqa3dhcmdzKQogCiAgICBBIG1vY2sgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIHByb3BlcnR5LCBvciBvdGhlciBkZXNjcmlwdG9yLCBvbiBhIGNsYXNzLgotICAgYFByb3BlcnR5TW9ja2AgcHJvdmlkZXMgYF9fZ2V0X19gIGFuZCBgX19zZXRfX2AgbWV0aG9kcyBzbyB5b3UgY2FuIHNwZWNpZnkKLSAgIGEgcmV0dXJuIHZhbHVlIHdoZW4gaXQgaXMgZmV0Y2hlZC4KKyAgIDpjbGFzczpgUHJvcGVydHlNb2NrYCBwcm92aWRlcyA6bWV0aDpgX19nZXRfX2AgYW5kIDptZXRoOmBfX3NldF9fYCBtZXRob2RzCisgICBzbyB5b3UgY2FuIHNwZWNpZnkgYSByZXR1cm4gdmFsdWUgd2hlbiBpdCBpcyBmZXRjaGVkLgogCi0gICBGZXRjaGluZyBhIGBQcm9wZXJ0eU1vY2tgIGluc3RhbmNlIGZyb20gYW4gb2JqZWN0IGNhbGxzIHRoZSBtb2NrLCB3aXRoCisgICBGZXRjaGluZyBhIDpjbGFzczpgUHJvcGVydHlNb2NrYCBpbnN0YW5jZSBmcm9tIGFuIG9iamVjdCBjYWxscyB0aGUgbW9jaywgd2l0aAogICAgbm8gYXJncy4gU2V0dGluZyBpdCBjYWxscyB0aGUgbW9jayB3aXRoIHRoZSB2YWx1ZSBiZWluZyBzZXQuCiAKICAgICAgICAgPj4+IGNsYXNzIEZvbzoKQEAgLTcwNiw3ICs3MjcsNyBAQAogICAgICAgICA+Pj4gd2l0aCBwYXRjaCgnX19tYWluX18uRm9vLmZvbycsIG5ld19jYWxsYWJsZT1Qcm9wZXJ0eU1vY2spIGFzIG1vY2tfZm9vOgogICAgICAgICAuLi4gICAgIG1vY2tfZm9vLnJldHVybl92YWx1ZSA9ICdtb2NraXR5LW1vY2snCiAgICAgICAgIC4uLiAgICAgdGhpc19mb28gPSBGb28oKQotICAgICAgICAuLi4gICAgIHByaW50IHRoaXNfZm9vLmZvbworICAgICAgICAuLi4gICAgIHByaW50KHRoaXNfZm9vLmZvbykKICAgICAgICAgLi4uICAgICB0aGlzX2Zvby5mb28gPSA2CiAgICAgICAgIC4uLgogICAgICAgICBtb2NraXR5LW1vY2sKQEAgLTcxNCw3ICs3MzUsNyBAQAogICAgICAgICBbY2FsbCgpLCBjYWxsKDYpXQogCiBCZWNhdXNlIG9mIHRoZSB3YXkgbW9jayBhdHRyaWJ1dGVzIGFyZSBzdG9yZWQgeW91IGNhbid0IGRpcmVjdGx5IGF0dGFjaCBhCi1gUHJvcGVydHlNb2NrYCB0byBhIG1vY2sgb2JqZWN0LiBJbnN0ZWFkIHlvdSBjYW4gYXR0YWNoIGl0IHRvIHRoZSBtb2NrIHR5cGUKKzpjbGFzczpgUHJvcGVydHlNb2NrYCB0byBhIG1vY2sgb2JqZWN0LiBJbnN0ZWFkIHlvdSBjYW4gYXR0YWNoIGl0IHRvIHRoZSBtb2NrIHR5cGUKIG9iamVjdDo6CiAKICAgICA+Pj4gbSA9IE1hZ2ljTW9jaygpCkBAIC03MzgsNyArNzU5LDcgQEAKIGxpa2UgOmF0dHI6YH5Nb2NrLmNhbGxfYXJnc2AgYW5kIDphdHRyOmB+TW9jay5jYWxsX2FyZ3NfbGlzdGAuCiAKIElmIDphdHRyOmB+TW9jay5zaWRlX2VmZmVjdGAgaXMgc2V0IHRoZW4gaXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGNhbGwgaGFzCi1iZWVuIHJlY29yZGVkLCBzbyBpZiBgc2lkZV9lZmZlY3RgIHJhaXNlcyBhbiBleGNlcHRpb24gdGhlIGNhbGwgaXMgc3RpbGwKK2JlZW4gcmVjb3JkZWQsIHNvIGlmIDphdHRyOmBzaWRlX2VmZmVjdGAgcmFpc2VzIGFuIGV4Y2VwdGlvbiB0aGUgY2FsbCBpcyBzdGlsbAogcmVjb3JkZWQuCiAKIFRoZSBzaW1wbGVzdCB3YXkgdG8gbWFrZSBhIG1vY2sgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gY2FsbGVkIGlzIHRvIG1ha2UKQEAgLTc1OSw4ICs3ODAsOCBAQAogICAgICAgICA+Pj4gbS5tb2NrX2NhbGxzCiAgICAgICAgIFtjYWxsKDEsIDIsIDMpLCBjYWxsKCd0d28nLCAndGhyZWUnLCAnZm91cicpXQogCi1JZiBgc2lkZV9lZmZlY3RgIGlzIGEgZnVuY3Rpb24gdGhlbiB3aGF0ZXZlciB0aGF0IGZ1bmN0aW9uIHJldHVybnMgaXMgd2hhdAotY2FsbHMgdG8gdGhlIG1vY2sgcmV0dXJuLiBUaGUgYHNpZGVfZWZmZWN0YCBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUKK0lmIDphdHRyOmBzaWRlX2VmZmVjdGAgaXMgYSBmdW5jdGlvbiB0aGVuIHdoYXRldmVyIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBpcyB3aGF0CitjYWxscyB0byB0aGUgbW9jayByZXR1cm4uIFRoZSA6YXR0cjpgc2lkZV9lZmZlY3RgIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIHRoZQogc2FtZSBhcmd1bWVudHMgYXMgdGhlIG1vY2suIFRoaXMgYWxsb3dzIHlvdSB0byB2YXJ5IHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlCiBjYWxsIGR5bmFtaWNhbGx5LCBiYXNlZCBvbiB0aGUgaW5wdXQ6CiAKQEAgLTc3Nyw3ICs3OTgsNyBAQAogCiBJZiB5b3Ugd2FudCB0aGUgbW9jayB0byBzdGlsbCByZXR1cm4gdGhlIGRlZmF1bHQgcmV0dXJuIHZhbHVlIChhIG5ldyBtb2NrKSwgb3IKIGFueSBzZXQgcmV0dXJuIHZhbHVlLCB0aGVuIHRoZXJlIGFyZSB0d28gd2F5cyBvZiBkb2luZyB0aGlzLiBFaXRoZXIgcmV0dXJuCi1gbW9jay5yZXR1cm5fdmFsdWVgIGZyb20gaW5zaWRlIGBzaWRlX2VmZmVjdGAsIG9yIHJldHVybiA6ZGF0YTpgREVGQVVMVGA6Cis6YXR0cjpgbW9jay5yZXR1cm5fdmFsdWVgIGZyb20gaW5zaWRlIDphdHRyOmBzaWRlX2VmZmVjdGAsIG9yIHJldHVybiA6ZGF0YTpgREVGQVVMVGA6CiAKICAgICAgICAgPj4+IG0gPSBNYWdpY01vY2soKQogICAgICAgICA+Pj4gZGVmIHNpZGVfZWZmZWN0KCphcmdzLCAqKmt3YXJncyk6CkBAIC03OTQsOCArODE1LDggQEAKICAgICAgICAgPj4+IG0oKQogICAgICAgICAzCiAKLVRvIHJlbW92ZSBhIGBzaWRlX2VmZmVjdGAsIGFuZCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXQgdGhlCi1gc2lkZV9lZmZlY3RgIHRvIGBOb25lYDoKK1RvIHJlbW92ZSBhIDphdHRyOmBzaWRlX2VmZmVjdGAsIGFuZCByZXR1cm4gdG8gdGhlIGRlZmF1bHQgYmVoYXZpb3VyLCBzZXQgdGhlCis6YXR0cjpgc2lkZV9lZmZlY3RgIHRvIGBgTm9uZWBgOgogCiAgICAgICAgID4+PiBtID0gTWFnaWNNb2NrKHJldHVybl92YWx1ZT02KQogICAgICAgICA+Pj4gZGVmIHNpZGVfZWZmZWN0KCphcmdzLCAqKmt3YXJncyk6CkBAIC04MDgsOSArODI5LDkgQEAKICAgICAgICAgPj4+IG0oKQogICAgICAgICA2CiAKLVRoZSBgc2lkZV9lZmZlY3RgIGNhbiBhbHNvIGJlIGFueSBpdGVyYWJsZSBvYmplY3QuIFJlcGVhdGVkIGNhbGxzIHRvIHRoZSBtb2NrCitUaGUgOmF0dHI6YHNpZGVfZWZmZWN0YCBjYW4gYWxzbyBiZSBhbnkgaXRlcmFibGUgb2JqZWN0LiBSZXBlYXRlZCBjYWxscyB0byB0aGUgbW9jawogd2lsbCByZXR1cm4gdmFsdWVzIGZyb20gdGhlIGl0ZXJhYmxlICh1bnRpbCB0aGUgaXRlcmFibGUgaXMgZXhoYXVzdGVkIGFuZAotYSBgU3RvcEl0ZXJhdGlvbmAgaXMgcmFpc2VkKToKK2EgOmV4YzpgU3RvcEl0ZXJhdGlvbmAgaXMgcmFpc2VkKToKIAogICAgICAgICA+Pj4gbSA9IE1hZ2ljTW9jayhzaWRlX2VmZmVjdD1bMSwgMiwgM10pCiAgICAgICAgID4+PiBtKCkKQEAgLTg0NywxMiArODY4LDEyIEBACiBNb2NrIG9iamVjdHMgY3JlYXRlIGF0dHJpYnV0ZXMgb24gZGVtYW5kLiBUaGlzIGFsbG93cyB0aGVtIHRvIHByZXRlbmQgdG8gYmUKIG9iamVjdHMgb2YgYW55IHR5cGUuCiAKLVlvdSBtYXkgd2FudCBhIG1vY2sgb2JqZWN0IHRvIHJldHVybiBgRmFsc2VgIHRvIGEgYGhhc2F0dHJgIGNhbGwsIG9yIHJhaXNlIGFuCi1gQXR0cmlidXRlRXJyb3JgIHdoZW4gYW4gYXR0cmlidXRlIGlzIGZldGNoZWQuIFlvdSBjYW4gZG8gdGhpcyBieSBwcm92aWRpbmcKLWFuIG9iamVjdCBhcyBhIGBzcGVjYCBmb3IgYSBtb2NrLCBidXQgdGhhdCBpc24ndCBhbHdheXMgY29udmVuaWVudC4KK1lvdSBtYXkgd2FudCBhIG1vY2sgb2JqZWN0IHRvIHJldHVybiBgYEZhbHNlYGAgdG8gYSA6ZnVuYzpgaGFzYXR0cmAgY2FsbCwgb3IgcmFpc2UgYW4KKzpleGM6YEF0dHJpYnV0ZUVycm9yYCB3aGVuIGFuIGF0dHJpYnV0ZSBpcyBmZXRjaGVkLiBZb3UgY2FuIGRvIHRoaXMgYnkgcHJvdmlkaW5nCithbiBvYmplY3QgYXMgYSA6YXR0cjpgc3BlY2AgZm9yIGEgbW9jaywgYnV0IHRoYXQgaXNuJ3QgYWx3YXlzIGNvbnZlbmllbnQuCiAKIFlvdSAiYmxvY2siIGF0dHJpYnV0ZXMgYnkgZGVsZXRpbmcgdGhlbS4gT25jZSBkZWxldGVkLCBhY2Nlc3NpbmcgYW4gYXR0cmlidXRlCi13aWxsIHJhaXNlIGFuIGBBdHRyaWJ1dGVFcnJvcmAuCit3aWxsIHJhaXNlIGFuIDpleGM6YEF0dHJpYnV0ZUVycm9yYC4KIAogICAgID4+PiBtb2NrID0gTWFnaWNNb2NrKCkKICAgICA+Pj4gaGFzYXR0cihtb2NrLCAnbScpCkBAIC05MzgsNyArOTU5LDcgQEAKIAogLi4gWyNdIFRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlIG1hZ2ljIG1ldGhvZHMgYW5kIGF0dHJpYnV0ZXMgKHRob3NlIHRoYXQgaGF2ZQogICAgICAgIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGRvdWJsZSB1bmRlcnNjb3JlcykuIE1vY2sgZG9lc24ndCBjcmVhdGUgdGhlc2UgYnV0Ci0gICAgICAgaW5zdGVhZCByYWlzZXMgYW4gYGBBdHRyaWJ1dGVFcnJvcmBgLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGludGVycHJldGVyCisgICAgICAgaW5zdGVhZCByYWlzZXMgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGludGVycHJldGVyCiAgICAgICAgd2lsbCBvZnRlbiBpbXBsaWNpdGx5IHJlcXVlc3QgdGhlc2UgbWV0aG9kcywgYW5kIGdldHMgKnZlcnkqIGNvbmZ1c2VkIHRvCiAgICAgICAgZ2V0IGEgbmV3IE1vY2sgb2JqZWN0IHdoZW4gaXQgZXhwZWN0cyBhIG1hZ2ljIG1ldGhvZC4gSWYgeW91IG5lZWQgbWFnaWMKICAgICAgICBtZXRob2Qgc3VwcG9ydCBzZWUgOnJlZjpgbWFnaWMgbWV0aG9kcyA8bWFnaWMtbWV0aG9kcz5gLgpAQCAtOTU4LDc4ICs5NzksNzggQEAKIAogLi4gbm90ZTo6CiAKLSAgICBgcGF0Y2hgIGlzIHN0cmFpZ2h0Zm9yd2FyZCB0byB1c2UuIFRoZSBrZXkgaXMgdG8gZG8gdGhlIHBhdGNoaW5nIGluIHRoZQorICAgIDpmdW5jOmBwYXRjaGAgaXMgc3RyYWlnaHRmb3J3YXJkIHRvIHVzZS4gVGhlIGtleSBpcyB0byBkbyB0aGUgcGF0Y2hpbmcgaW4gdGhlCiAgICAgcmlnaHQgbmFtZXNwYWNlLiBTZWUgdGhlIHNlY3Rpb24gYHdoZXJlIHRvIHBhdGNoYF8uCiAKIC4uIGZ1bmN0aW9uOjogcGF0Y2godGFyZ2V0LCBuZXc9REVGQVVMVCwgc3BlYz1Ob25lLCBjcmVhdGU9RmFsc2UsIHNwZWNfc2V0PU5vbmUsIGF1dG9zcGVjPU5vbmUsIG5ld19jYWxsYWJsZT1Ob25lLCAqKmt3YXJncykKIAotICAgIGBwYXRjaGAgYWN0cyBhcyBhIGZ1bmN0aW9uIGRlY29yYXRvciwgY2xhc3MgZGVjb3JhdG9yIG9yIGEgY29udGV4dAotICAgIG1hbmFnZXIuIEluc2lkZSB0aGUgYm9keSBvZiB0aGUgZnVuY3Rpb24gb3Igd2l0aCBzdGF0ZW1lbnQsIHRoZSBgdGFyZ2V0YAotICAgIGlzIHBhdGNoZWQgd2l0aCBhIGBuZXdgIG9iamVjdC4gV2hlbiB0aGUgZnVuY3Rpb24vd2l0aCBzdGF0ZW1lbnQgZXhpdHMKKyAgICA6ZnVuYzpgcGF0Y2hgIGFjdHMgYXMgYSBmdW5jdGlvbiBkZWNvcmF0b3IsIGNsYXNzIGRlY29yYXRvciBvciBhIGNvbnRleHQKKyAgICBtYW5hZ2VyLiBJbnNpZGUgdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uIG9yIHdpdGggc3RhdGVtZW50LCB0aGUgKnRhcmdldCoKKyAgICBpcyBwYXRjaGVkIHdpdGggYSAqbmV3KiBvYmplY3QuIFdoZW4gdGhlIGZ1bmN0aW9uL3dpdGggc3RhdGVtZW50IGV4aXRzCiAgICAgdGhlIHBhdGNoIGlzIHVuZG9uZS4KIAotICAgIElmIGBuZXdgIGlzIG9taXR0ZWQsIHRoZW4gdGhlIHRhcmdldCBpcyByZXBsYWNlZCB3aXRoIGEKLSAgICA6Y2xhc3M6YE1hZ2ljTW9ja2AuIElmIGBwYXRjaGAgaXMgdXNlZCBhcyBhIGRlY29yYXRvciBhbmQgYG5ld2AgaXMKKyAgICBJZiAqbmV3KiBpcyBvbWl0dGVkLCB0aGVuIHRoZSB0YXJnZXQgaXMgcmVwbGFjZWQgd2l0aCBhCisgICAgOmNsYXNzOmBNYWdpY01vY2tgLiBJZiA6ZnVuYzpgcGF0Y2hgIGlzIHVzZWQgYXMgYSBkZWNvcmF0b3IgYW5kICpuZXcqIGlzCiAgICAgb21pdHRlZCwgdGhlIGNyZWF0ZWQgbW9jayBpcyBwYXNzZWQgaW4gYXMgYW4gZXh0cmEgYXJndW1lbnQgdG8gdGhlCi0gICAgZGVjb3JhdGVkIGZ1bmN0aW9uLiBJZiBgcGF0Y2hgIGlzIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgdGhlIGNyZWF0ZWQKKyAgICBkZWNvcmF0ZWQgZnVuY3Rpb24uIElmIDpmdW5jOmBwYXRjaGAgaXMgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciB0aGUgY3JlYXRlZAogICAgIG1vY2sgaXMgcmV0dXJuZWQgYnkgdGhlIGNvbnRleHQgbWFuYWdlci4KIAotICAgIGB0YXJnZXRgIHNob3VsZCBiZSBhIHN0cmluZyBpbiB0aGUgZm9ybSBgJ3BhY2thZ2UubW9kdWxlLkNsYXNzTmFtZSdgLiBUaGUKLSAgICBgdGFyZ2V0YCBpcyBpbXBvcnRlZCBhbmQgdGhlIHNwZWNpZmllZCBvYmplY3QgcmVwbGFjZWQgd2l0aCB0aGUgYG5ld2AKLSAgICBvYmplY3QsIHNvIHRoZSBgdGFyZ2V0YCBtdXN0IGJlIGltcG9ydGFibGUgZnJvbSB0aGUgZW52aXJvbm1lbnQgeW91IGFyZQotICAgIGNhbGxpbmcgYHBhdGNoYCBmcm9tLiBUaGUgdGFyZ2V0IGlzIGltcG9ydGVkIHdoZW4gdGhlIGRlY29yYXRlZCBmdW5jdGlvbgorICAgICp0YXJnZXQqIHNob3VsZCBiZSBhIHN0cmluZyBpbiB0aGUgZm9ybSBgYCdwYWNrYWdlLm1vZHVsZS5DbGFzc05hbWUnYGAuIFRoZQorICAgICp0YXJnZXQqIGlzIGltcG9ydGVkIGFuZCB0aGUgc3BlY2lmaWVkIG9iamVjdCByZXBsYWNlZCB3aXRoIHRoZSAqbmV3KgorICAgIG9iamVjdCwgc28gdGhlICp0YXJnZXQqIG11c3QgYmUgaW1wb3J0YWJsZSBmcm9tIHRoZSBlbnZpcm9ubWVudCB5b3UgYXJlCisgICAgY2FsbGluZyA6ZnVuYzpgcGF0Y2hgIGZyb20uIFRoZSB0YXJnZXQgaXMgaW1wb3J0ZWQgd2hlbiB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uCiAgICAgaXMgZXhlY3V0ZWQsIG5vdCBhdCBkZWNvcmF0aW9uIHRpbWUuCiAKLSAgICBUaGUgYHNwZWNgIGFuZCBgc3BlY19zZXRgIGtleXdvcmQgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlIGBNYWdpY01vY2tgCisgICAgVGhlICpzcGVjKiBhbmQgKnNwZWNfc2V0KiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHRvIHRoZSA6Y2xhc3M6YE1hZ2ljTW9ja2AKICAgICBpZiBwYXRjaCBpcyBjcmVhdGluZyBvbmUgZm9yIHlvdS4KIAotICAgIEluIGFkZGl0aW9uIHlvdSBjYW4gcGFzcyBgc3BlYz1UcnVlYCBvciBgc3BlY19zZXQ9VHJ1ZWAsIHdoaWNoIGNhdXNlcworICAgIEluIGFkZGl0aW9uIHlvdSBjYW4gcGFzcyBgYHNwZWM9VHJ1ZWBgIG9yIGBgc3BlY19zZXQ9VHJ1ZWBgLCB3aGljaCBjYXVzZXMKICAgICBwYXRjaCB0byBwYXNzIGluIHRoZSBvYmplY3QgYmVpbmcgbW9ja2VkIGFzIHRoZSBzcGVjL3NwZWNfc2V0IG9iamVjdC4KIAotICAgIGBuZXdfY2FsbGFibGVgIGFsbG93cyB5b3UgdG8gc3BlY2lmeSBhIGRpZmZlcmVudCBjbGFzcywgb3IgY2FsbGFibGUgb2JqZWN0LAotICAgIHRoYXQgd2lsbCBiZSBjYWxsZWQgdG8gY3JlYXRlIHRoZSBgbmV3YCBvYmplY3QuIEJ5IGRlZmF1bHQgYE1hZ2ljTW9ja2AgaXMKKyAgICAqbmV3X2NhbGxhYmxlKiBhbGxvd3MgeW91IHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQgY2xhc3MsIG9yIGNhbGxhYmxlIG9iamVjdCwKKyAgICB0aGF0IHdpbGwgYmUgY2FsbGVkIHRvIGNyZWF0ZSB0aGUgKm5ldyogb2JqZWN0LiBCeSBkZWZhdWx0IDpjbGFzczpgTWFnaWNNb2NrYCBpcwogICAgIHVzZWQuCiAKLSAgICBBIG1vcmUgcG93ZXJmdWwgZm9ybSBvZiBgc3BlY2AgaXMgYGF1dG9zcGVjYC4gSWYgeW91IHNldCBgYXV0b3NwZWM9VHJ1ZWAKLSAgICB0aGVuIHRoZSBtb2NrIHdpdGggYmUgY3JlYXRlZCB3aXRoIGEgc3BlYyBmcm9tIHRoZSBvYmplY3QgYmVpbmcgcmVwbGFjZWQuCisgICAgQSBtb3JlIHBvd2VyZnVsIGZvcm0gb2YgKnNwZWMqIGlzICphdXRvc3BlYyouIElmIHlvdSBzZXQgYGBhdXRvc3BlYz1UcnVlYGAKKyAgICB0aGVuIHRoZSBtb2NrIHdpbGwgYmUgY3JlYXRlZCB3aXRoIGEgc3BlYyBmcm9tIHRoZSBvYmplY3QgYmVpbmcgcmVwbGFjZWQuCiAgICAgQWxsIGF0dHJpYnV0ZXMgb2YgdGhlIG1vY2sgd2lsbCBhbHNvIGhhdmUgdGhlIHNwZWMgb2YgdGhlIGNvcnJlc3BvbmRpbmcKICAgICBhdHRyaWJ1dGUgb2YgdGhlIG9iamVjdCBiZWluZyByZXBsYWNlZC4gTWV0aG9kcyBhbmQgZnVuY3Rpb25zIGJlaW5nIG1vY2tlZAotICAgIHdpbGwgaGF2ZSB0aGVpciBhcmd1bWVudHMgY2hlY2tlZCBhbmQgd2lsbCByYWlzZSBhIGBUeXBlRXJyb3JgIGlmIHRoZXkgYXJlCisgICAgd2lsbCBoYXZlIHRoZWlyIGFyZ3VtZW50cyBjaGVja2VkIGFuZCB3aWxsIHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGV5IGFyZQogICAgIGNhbGxlZCB3aXRoIHRoZSB3cm9uZyBzaWduYXR1cmUuIEZvciBtb2NrcwogICAgIHJlcGxhY2luZyBhIGNsYXNzLCB0aGVpciByZXR1cm4gdmFsdWUgKHRoZSAnaW5zdGFuY2UnKSB3aWxsIGhhdmUgdGhlIHNhbWUKICAgICBzcGVjIGFzIHRoZSBjbGFzcy4gU2VlIHRoZSA6ZnVuYzpgY3JlYXRlX2F1dG9zcGVjYCBmdW5jdGlvbiBhbmQKICAgICA6cmVmOmBhdXRvLXNwZWNjaW5nYC4KIAotICAgIEluc3RlYWQgb2YgYGF1dG9zcGVjPVRydWVgIHlvdSBjYW4gcGFzcyBgYXV0b3NwZWM9c29tZV9vYmplY3RgIHRvIHVzZSBhbgorICAgIEluc3RlYWQgb2YgYGBhdXRvc3BlYz1UcnVlYGAgeW91IGNhbiBwYXNzIGBgYXV0b3NwZWM9c29tZV9vYmplY3RgYCB0byB1c2UgYW4KICAgICBhcmJpdHJhcnkgb2JqZWN0IGFzIHRoZSBzcGVjIGluc3RlYWQgb2YgdGhlIG9uZSBiZWluZyByZXBsYWNlZC4KIAotICAgIEJ5IGRlZmF1bHQgYHBhdGNoYCB3aWxsIGZhaWwgdG8gcmVwbGFjZSBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgZXhpc3QuIElmCi0gICAgeW91IHBhc3MgaW4gYGNyZWF0ZT1UcnVlYCwgYW5kIHRoZSBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdCwgcGF0Y2ggd2lsbAorICAgIEJ5IGRlZmF1bHQgOmZ1bmM6YHBhdGNoYCB3aWxsIGZhaWwgdG8gcmVwbGFjZSBhdHRyaWJ1dGVzIHRoYXQgZG9uJ3QgZXhpc3QuIElmCisgICAgeW91IHBhc3MgaW4gYGBjcmVhdGU9VHJ1ZWBgLCBhbmQgdGhlIGF0dHJpYnV0ZSBkb2Vzbid0IGV4aXN0LCBwYXRjaCB3aWxsCiAgICAgY3JlYXRlIHRoZSBhdHRyaWJ1dGUgZm9yIHlvdSB3aGVuIHRoZSBwYXRjaGVkIGZ1bmN0aW9uIGlzIGNhbGxlZCwgYW5kCiAgICAgZGVsZXRlIGl0IGFnYWluIGFmdGVyd2FyZHMuIFRoaXMgaXMgdXNlZnVsIGZvciB3cml0aW5nIHRlc3RzIGFnYWluc3QKICAgICBhdHRyaWJ1dGVzIHRoYXQgeW91ciBwcm9kdWN0aW9uIGNvZGUgY3JlYXRlcyBhdCBydW50aW1lLiBJdCBpcyBvZmYgYnkKICAgICBkZWZhdWx0IGJlY2F1c2UgaXQgY2FuIGJlIGRhbmdlcm91cy4gV2l0aCBpdCBzd2l0Y2hlZCBvbiB5b3UgY2FuIHdyaXRlCiAgICAgcGFzc2luZyB0ZXN0cyBhZ2FpbnN0IEFQSXMgdGhhdCBkb24ndCBhY3R1YWxseSBleGlzdCEKIAotICAgIFBhdGNoIGNhbiBiZSB1c2VkIGFzIGEgYFRlc3RDYXNlYCBjbGFzcyBkZWNvcmF0b3IuIEl0IHdvcmtzIGJ5CisgICAgUGF0Y2ggY2FuIGJlIHVzZWQgYXMgYSA6Y2xhc3M6YFRlc3RDYXNlYCBjbGFzcyBkZWNvcmF0b3IuIEl0IHdvcmtzIGJ5CiAgICAgZGVjb3JhdGluZyBlYWNoIHRlc3QgbWV0aG9kIGluIHRoZSBjbGFzcy4gVGhpcyByZWR1Y2VzIHRoZSBib2lsZXJwbGF0ZQotICAgIGNvZGUgd2hlbiB5b3VyIHRlc3QgbWV0aG9kcyBzaGFyZSBhIGNvbW1vbiBwYXRjaGluZ3Mgc2V0LiBgcGF0Y2hgIGZpbmRzCi0gICAgdGVzdHMgYnkgbG9va2luZyBmb3IgbWV0aG9kIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBgcGF0Y2guVEVTVF9QUkVGSVhgLgotICAgIEJ5IGRlZmF1bHQgdGhpcyBpcyBgdGVzdGAsIHdoaWNoIG1hdGNoZXMgdGhlIHdheSBgdW5pdHRlc3RgIGZpbmRzIHRlc3RzLgotICAgIFlvdSBjYW4gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBwcmVmaXggYnkgc2V0dGluZyBgcGF0Y2guVEVTVF9QUkVGSVhgLgorICAgIGNvZGUgd2hlbiB5b3VyIHRlc3QgbWV0aG9kcyBzaGFyZSBhIGNvbW1vbiBwYXRjaGluZ3Mgc2V0LiA6ZnVuYzpgcGF0Y2hgIGZpbmRzCisgICAgdGVzdHMgYnkgbG9va2luZyBmb3IgbWV0aG9kIG5hbWVzIHRoYXQgc3RhcnQgd2l0aCBgYHBhdGNoLlRFU1RfUFJFRklYYGAuCisgICAgQnkgZGVmYXVsdCB0aGlzIGlzIGBgJ3Rlc3QnYGAsIHdoaWNoIG1hdGNoZXMgdGhlIHdheSA6bW9kOmB1bml0dGVzdGAgZmluZHMgdGVzdHMuCisgICAgWW91IGNhbiBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIHByZWZpeCBieSBzZXR0aW5nIGBgcGF0Y2guVEVTVF9QUkVGSVhgYC4KIAogICAgIFBhdGNoIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCB3aXRoIHRoZSB3aXRoIHN0YXRlbWVudC4gSGVyZSB0aGUKICAgICBwYXRjaGluZyBhcHBsaWVzIHRvIHRoZSBpbmRlbnRlZCBibG9jayBhZnRlciB0aGUgd2l0aCBzdGF0ZW1lbnQuIElmIHlvdQogICAgIHVzZSAiYXMiIHRoZW4gdGhlIHBhdGNoZWQgb2JqZWN0IHdpbGwgYmUgYm91bmQgdG8gdGhlIG5hbWUgYWZ0ZXIgdGhlCi0gICAgImFzIjsgdmVyeSB1c2VmdWwgaWYgYHBhdGNoYCBpcyBjcmVhdGluZyBhIG1vY2sgb2JqZWN0IGZvciB5b3UuCisgICAgImFzIjsgdmVyeSB1c2VmdWwgaWYgOmZ1bmM6YHBhdGNoYCBpcyBjcmVhdGluZyBhIG1vY2sgb2JqZWN0IGZvciB5b3UuCiAKLSAgICBgcGF0Y2hgIHRha2VzIGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50cy4gVGhlc2Ugd2lsbCBiZSBwYXNzZWQgdG8KLSAgICB0aGUgYE1vY2tgIChvciBgbmV3X2NhbGxhYmxlYCkgb24gY29uc3RydWN0aW9uLgorICAgIDpmdW5jOmBwYXRjaGAgdGFrZXMgYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzLiBUaGVzZSB3aWxsIGJlIHBhc3NlZCB0bworICAgIHRoZSA6Y2xhc3M6YE1vY2tgIChvciAqbmV3X2NhbGxhYmxlKikgb24gY29uc3RydWN0aW9uLgogCi0gICAgYHBhdGNoLmRpY3QoLi4uKWAsIGBwYXRjaC5tdWx0aXBsZSguLi4pYCBhbmQgYHBhdGNoLm9iamVjdCguLi4pYCBhcmUKKyAgICBgYHBhdGNoLmRpY3QoLi4uKWBgLCBgYHBhdGNoLm11bHRpcGxlKC4uLilgYCBhbmQgYGBwYXRjaC5vYmplY3QoLi4uKWBgIGFyZQogICAgIGF2YWlsYWJsZSBmb3IgYWx0ZXJuYXRlIHVzZS1jYXNlcy4KIAotYHBhdGNoYCBhcyBmdW5jdGlvbiBkZWNvcmF0b3IsIGNyZWF0aW5nIHRoZSBtb2NrIGZvciB5b3UgYW5kIHBhc3NpbmcgaXQgaW50bworOmZ1bmM6YHBhdGNoYCBhcyBmdW5jdGlvbiBkZWNvcmF0b3IsIGNyZWF0aW5nIHRoZSBtb2NrIGZvciB5b3UgYW5kIHBhc3NpbmcgaXQgaW50bwogdGhlIGRlY29yYXRlZCBmdW5jdGlvbjoKIAogICAgID4+PiBAcGF0Y2goJ19fbWFpbl9fLlNvbWVDbGFzcycpCkBAIC0xMDM5LDE2ICsxMDYwLDE2IEBACiAgICAgPj4+IGZ1bmN0aW9uKE5vbmUpCiAgICAgVHJ1ZQogCi1QYXRjaGluZyBhIGNsYXNzIHJlcGxhY2VzIHRoZSBjbGFzcyB3aXRoIGEgYE1hZ2ljTW9ja2AgKmluc3RhbmNlKi4gSWYgdGhlCitQYXRjaGluZyBhIGNsYXNzIHJlcGxhY2VzIHRoZSBjbGFzcyB3aXRoIGEgOmNsYXNzOmBNYWdpY01vY2tgICppbnN0YW5jZSouIElmIHRoZQogY2xhc3MgaXMgaW5zdGFudGlhdGVkIGluIHRoZSBjb2RlIHVuZGVyIHRlc3QgdGhlbiBpdCB3aWxsIGJlIHRoZQogOmF0dHI6YH5Nb2NrLnJldHVybl92YWx1ZWAgb2YgdGhlIG1vY2sgdGhhdCB3aWxsIGJlIHVzZWQuCiAKIElmIHRoZSBjbGFzcyBpcyBpbnN0YW50aWF0ZWQgbXVsdGlwbGUgdGltZXMgeW91IGNvdWxkIHVzZQogOmF0dHI6YH5Nb2NrLnNpZGVfZWZmZWN0YCB0byByZXR1cm4gYSBuZXcgbW9jayBlYWNoIHRpbWUuIEFsdGVybmF0aXZlbHkgeW91Ci1jYW4gc2V0IHRoZSBgcmV0dXJuX3ZhbHVlYCB0byBiZSBhbnl0aGluZyB5b3Ugd2FudC4KK2NhbiBzZXQgdGhlICpyZXR1cm5fdmFsdWUqIHRvIGJlIGFueXRoaW5nIHlvdSB3YW50LgogCiBUbyBjb25maWd1cmUgcmV0dXJuIHZhbHVlcyBvbiBtZXRob2RzIG9mICppbnN0YW5jZXMqIG9uIHRoZSBwYXRjaGVkIGNsYXNzCi15b3UgbXVzdCBkbyB0aGlzIG9uIHRoZSBgcmV0dXJuX3ZhbHVlYC4gRm9yIGV4YW1wbGU6Cit5b3UgbXVzdCBkbyB0aGlzIG9uIHRoZSA6YXR0cjpgcmV0dXJuX3ZhbHVlYC4gRm9yIGV4YW1wbGU6CiAKICAgICA+Pj4gY2xhc3MgQ2xhc3M6CiAgICAgLi4uICAgICBkZWYgbWV0aG9kKHNlbGYpOgpAQCAtMTA2MSw3ICsxMDgyLDcgQEAKICAgICAuLi4gICAgIGFzc2VydCBDbGFzcygpLm1ldGhvZCgpID09ICdmb28nCiAgICAgLi4uCiAKLUlmIHlvdSB1c2UgYHNwZWNgIG9yIGBzcGVjX3NldGAgYW5kIGBwYXRjaGAgaXMgcmVwbGFjaW5nIGEgKmNsYXNzKiwgdGhlbiB0aGUKK0lmIHlvdSB1c2UgKnNwZWMqIG9yICpzcGVjX3NldCogYW5kIDpmdW5jOmBwYXRjaGAgaXMgcmVwbGFjaW5nIGEgKmNsYXNzKiwgdGhlbiB0aGUKIHJldHVybiB2YWx1ZSBvZiB0aGUgY3JlYXRlZCBtb2NrIHdpbGwgaGF2ZSB0aGUgc2FtZSBzcGVjLgogCiAgICAgPj4+IE9yaWdpbmFsID0gQ2xhc3MKQEAgLTEwNzEsNyArMTA5Miw3IEBACiAgICAgPj4+IGFzc2VydCBpc2luc3RhbmNlKGluc3RhbmNlLCBPcmlnaW5hbCkKICAgICA+Pj4gcGF0Y2hlci5zdG9wKCkKIAotVGhlIGBuZXdfY2FsbGFibGVgIGFyZ3VtZW50IGlzIHVzZWZ1bCB3aGVyZSB5b3Ugd2FudCB0byB1c2UgYW4gYWx0ZXJuYXRpdmUKK1RoZSAqbmV3X2NhbGxhYmxlKiBhcmd1bWVudCBpcyB1c2VmdWwgd2hlcmUgeW91IHdhbnQgdG8gdXNlIGFuIGFsdGVybmF0aXZlCiBjbGFzcyB0byB0aGUgZGVmYXVsdCA6Y2xhc3M6YE1hZ2ljTW9ja2AgZm9yIHRoZSBjcmVhdGVkIG1vY2suIEZvciBleGFtcGxlLCBpZgogeW91IHdhbnRlZCBhIDpjbGFzczpgTm9uQ2FsbGFibGVNb2NrYCB0byBiZSB1c2VkOgogCkBAIC0xMDg0LDExICsxMTA1LDExIEBACiAgICAgICAuLi4KICAgICBUeXBlRXJyb3I6ICdOb25DYWxsYWJsZU1vY2snIG9iamVjdCBpcyBub3QgY2FsbGFibGUKIAotQW5vdGhlciB1c2UgY2FzZSBtaWdodCBiZSB0byByZXBsYWNlIGFuIG9iamVjdCB3aXRoIGEgYGlvLlN0cmluZ0lPYCBpbnN0YW5jZToKK0Fub3RoZXIgdXNlIGNhc2UgbWlnaHQgYmUgdG8gcmVwbGFjZSBhbiBvYmplY3Qgd2l0aCBhbiA6Y2xhc3M6YGlvLlN0cmluZ0lPYCBpbnN0YW5jZToKIAogICAgID4+PiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogICAgID4+PiBkZWYgZm9vKCk6Ci0gICAgLi4uICAgICBwcmludCAnU29tZXRoaW5nJworICAgIC4uLiAgICAgcHJpbnQoJ1NvbWV0aGluZycpCiAgICAgLi4uCiAgICAgPj4+IEBwYXRjaCgnc3lzLnN0ZG91dCcsIG5ld19jYWxsYWJsZT1TdHJpbmdJTykKICAgICAuLi4gZGVmIHRlc3QobW9ja19zdGRvdXQpOgpAQCAtMTA5Nyw3ICsxMTE4LDcgQEAKICAgICAuLi4KICAgICA+Pj4gdGVzdCgpCiAKLVdoZW4gYHBhdGNoYCBpcyBjcmVhdGluZyBhIG1vY2sgZm9yIHlvdSwgaXQgaXMgY29tbW9uIHRoYXQgdGhlIGZpcnN0IHRoaW5nCitXaGVuIDpmdW5jOmBwYXRjaGAgaXMgY3JlYXRpbmcgYSBtb2NrIGZvciB5b3UsIGl0IGlzIGNvbW1vbiB0aGF0IHRoZSBmaXJzdCB0aGluZwogeW91IG5lZWQgdG8gZG8gaXMgdG8gY29uZmlndXJlIHRoZSBtb2NrLiBTb21lIG9mIHRoYXQgY29uZmlndXJhdGlvbiBjYW4gYmUgZG9uZQogaW4gdGhlIGNhbGwgdG8gcGF0Y2guIEFueSBhcmJpdHJhcnkga2V5d29yZHMgeW91IHBhc3MgaW50byB0aGUgY2FsbCB3aWxsIGJlCiB1c2VkIHRvIHNldCBhdHRyaWJ1dGVzIG9uIHRoZSBjcmVhdGVkIG1vY2s6CkBAIC0xMTEzLDcgKzExMzQsNyBAQAogOmF0dHI6YH5Nb2NrLnJldHVybl92YWx1ZWAgYW5kIDphdHRyOmB+TW9jay5zaWRlX2VmZmVjdGAsIG9mIGNoaWxkIG1vY2tzIGNhbgogYWxzbyBiZSBjb25maWd1cmVkLiBUaGVzZSBhcmVuJ3Qgc3ludGFjdGljYWxseSB2YWxpZCB0byBwYXNzIGluIGRpcmVjdGx5IGFzCiBrZXl3b3JkIGFyZ3VtZW50cywgYnV0IGEgZGljdGlvbmFyeSB3aXRoIHRoZXNlIGFzIGtleXMgY2FuIHN0aWxsIGJlIGV4cGFuZGVkCi1pbnRvIGEgYHBhdGNoYCBjYWxsIHVzaW5nIGAqKmA6CitpbnRvIGEgOmZ1bmM6YHBhdGNoYCBjYWxsIHVzaW5nIGBgKipgYDoKIAogICAgID4+PiBjb25maWcgPSB7J21ldGhvZC5yZXR1cm5fdmFsdWUnOiAzLCAnb3RoZXIuc2lkZV9lZmZlY3QnOiBLZXlFcnJvcn0KICAgICA+Pj4gcGF0Y2hlciA9IHBhdGNoKCdfX21haW5fXy50aGluZycsICoqY29uZmlnKQpAQCAtMTEzMSwxOSArMTE1MiwxOSBAQAogCiAuLiBmdW5jdGlvbjo6IHBhdGNoLm9iamVjdCh0YXJnZXQsIGF0dHJpYnV0ZSwgbmV3PURFRkFVTFQsIHNwZWM9Tm9uZSwgY3JlYXRlPUZhbHNlLCBzcGVjX3NldD1Ob25lLCBhdXRvc3BlYz1Ob25lLCBuZXdfY2FsbGFibGU9Tm9uZSwgKiprd2FyZ3MpCiAKLSAgICBwYXRjaCB0aGUgbmFtZWQgbWVtYmVyIChgYXR0cmlidXRlYCkgb24gYW4gb2JqZWN0IChgdGFyZ2V0YCkgd2l0aCBhIG1vY2sKKyAgICBwYXRjaCB0aGUgbmFtZWQgbWVtYmVyICgqYXR0cmlidXRlKikgb24gYW4gb2JqZWN0ICgqdGFyZ2V0Kikgd2l0aCBhIG1vY2sKICAgICBvYmplY3QuCiAKLSAgICBgcGF0Y2gub2JqZWN0YCBjYW4gYmUgdXNlZCBhcyBhIGRlY29yYXRvciwgY2xhc3MgZGVjb3JhdG9yIG9yIGEgY29udGV4dAotICAgIG1hbmFnZXIuIEFyZ3VtZW50cyBgbmV3YCwgYHNwZWNgLCBgY3JlYXRlYCwgYHNwZWNfc2V0YCwgYGF1dG9zcGVjYCBhbmQKLSAgICBgbmV3X2NhbGxhYmxlYCBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIGBwYXRjaGAuIExpa2UgYHBhdGNoYCwKLSAgICBgcGF0Y2gub2JqZWN0YCB0YWtlcyBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHMgZm9yIGNvbmZpZ3VyaW5nIHRoZSBtb2NrCisgICAgOmZ1bmM6YHBhdGNoLm9iamVjdGAgY2FuIGJlIHVzZWQgYXMgYSBkZWNvcmF0b3IsIGNsYXNzIGRlY29yYXRvciBvciBhIGNvbnRleHQKKyAgICBtYW5hZ2VyLiBBcmd1bWVudHMgKm5ldyosICpzcGVjKiwgKmNyZWF0ZSosICpzcGVjX3NldCosICphdXRvc3BlYyogYW5kCisgICAgKm5ld19jYWxsYWJsZSogaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciA6ZnVuYzpgcGF0Y2hgLiBMaWtlIDpmdW5jOmBwYXRjaGAsCisgICAgOmZ1bmM6YHBhdGNoLm9iamVjdGAgdGFrZXMgYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzIGZvciBjb25maWd1cmluZyB0aGUgbW9jawogICAgIG9iamVjdCBpdCBjcmVhdGVzLgogCi0gICAgV2hlbiB1c2VkIGFzIGEgY2xhc3MgZGVjb3JhdG9yIGBwYXRjaC5vYmplY3RgIGhvbm91cnMgYHBhdGNoLlRFU1RfUFJFRklYYAorICAgIFdoZW4gdXNlZCBhcyBhIGNsYXNzIGRlY29yYXRvciA6ZnVuYzpgcGF0Y2gub2JqZWN0YCBob25vdXJzIGBgcGF0Y2guVEVTVF9QUkVGSVhgYAogICAgIGZvciBjaG9vc2luZyB3aGljaCBtZXRob2RzIHRvIHdyYXAuCiAKLVlvdSBjYW4gZWl0aGVyIGNhbGwgYHBhdGNoLm9iamVjdGAgd2l0aCB0aHJlZSBhcmd1bWVudHMgb3IgdHdvIGFyZ3VtZW50cy4gVGhlCitZb3UgY2FuIGVpdGhlciBjYWxsIDpmdW5jOmBwYXRjaC5vYmplY3RgIHdpdGggdGhyZWUgYXJndW1lbnRzIG9yIHR3byBhcmd1bWVudHMuIFRoZQogdGhyZWUgYXJndW1lbnQgZm9ybSB0YWtlcyB0aGUgb2JqZWN0IHRvIGJlIHBhdGNoZWQsIHRoZSBhdHRyaWJ1dGUgbmFtZSBhbmQgdGhlCiBvYmplY3QgdG8gcmVwbGFjZSB0aGUgYXR0cmlidXRlIHdpdGguCiAKQEAgLTExNTgsOCArMTE3OSw4IEBACiAgICAgLi4uCiAgICAgPj4+IHRlc3QoKQogCi1gc3BlY2AsIGBjcmVhdGVgIGFuZCB0aGUgb3RoZXIgYXJndW1lbnRzIHRvIGBwYXRjaC5vYmplY3RgIGhhdmUgdGhlIHNhbWUKLW1lYW5pbmcgYXMgdGhleSBkbyBmb3IgYHBhdGNoYC4KKypzcGVjKiwgKmNyZWF0ZSogYW5kIHRoZSBvdGhlciBhcmd1bWVudHMgdG8gOmZ1bmM6YHBhdGNoLm9iamVjdGAgaGF2ZSB0aGUgc2FtZQorbWVhbmluZyBhcyB0aGV5IGRvIGZvciA6ZnVuYzpgcGF0Y2hgLgogCiAKIHBhdGNoLmRpY3QKQEAgLTExNzAsMjcgKzExOTEsMjcgQEAKICAgICBQYXRjaCBhIGRpY3Rpb25hcnksIG9yIGRpY3Rpb25hcnkgbGlrZSBvYmplY3QsIGFuZCByZXN0b3JlIHRoZSBkaWN0aW9uYXJ5CiAgICAgdG8gaXRzIG9yaWdpbmFsIHN0YXRlIGFmdGVyIHRoZSB0ZXN0LgogCi0gICAgYGluX2RpY3RgIGNhbiBiZSBhIGRpY3Rpb25hcnkgb3IgYSBtYXBwaW5nIGxpa2UgY29udGFpbmVyLiBJZiBpdCBpcyBhCisgICAgKmluX2RpY3QqIGNhbiBiZSBhIGRpY3Rpb25hcnkgb3IgYSBtYXBwaW5nIGxpa2UgY29udGFpbmVyLiBJZiBpdCBpcyBhCiAgICAgbWFwcGluZyB0aGVuIGl0IG11c3QgYXQgbGVhc3Qgc3VwcG9ydCBnZXR0aW5nLCBzZXR0aW5nIGFuZCBkZWxldGluZyBpdGVtcwogICAgIHBsdXMgaXRlcmF0aW5nIG92ZXIga2V5cy4KIAotICAgIGBpbl9kaWN0YCBjYW4gYWxzbyBiZSBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSBkaWN0aW9uYXJ5LCB3aGljaAorICAgICppbl9kaWN0KiBjYW4gYWxzbyBiZSBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBuYW1lIG9mIHRoZSBkaWN0aW9uYXJ5LCB3aGljaAogICAgIHdpbGwgdGhlbiBiZSBmZXRjaGVkIGJ5IGltcG9ydGluZyBpdC4KIAotICAgIGB2YWx1ZXNgIGNhbiBiZSBhIGRpY3Rpb25hcnkgb2YgdmFsdWVzIHRvIHNldCBpbiB0aGUgZGljdGlvbmFyeS4gYHZhbHVlc2AKLSAgICBjYW4gYWxzbyBiZSBhbiBpdGVyYWJsZSBvZiBgKGtleSwgdmFsdWUpYCBwYWlycy4KKyAgICAqdmFsdWVzKiBjYW4gYmUgYSBkaWN0aW9uYXJ5IG9mIHZhbHVlcyB0byBzZXQgaW4gdGhlIGRpY3Rpb25hcnkuICp2YWx1ZXMqCisgICAgY2FuIGFsc28gYmUgYW4gaXRlcmFibGUgb2YgYGAoa2V5LCB2YWx1ZSlgYCBwYWlycy4KIAotICAgIElmIGBjbGVhcmAgaXMgdHJ1ZSB0aGVuIHRoZSBkaWN0aW9uYXJ5IHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIG5ldworICAgIElmICpjbGVhciogaXMgdHJ1ZSB0aGVuIHRoZSBkaWN0aW9uYXJ5IHdpbGwgYmUgY2xlYXJlZCBiZWZvcmUgdGhlIG5ldwogICAgIHZhbHVlcyBhcmUgc2V0LgogCi0gICAgYHBhdGNoLmRpY3RgIGNhbiBhbHNvIGJlIGNhbGxlZCB3aXRoIGFyYml0cmFyeSBrZXl3b3JkIGFyZ3VtZW50cyB0byBzZXQKKyAgICA6ZnVuYzpgcGF0Y2guZGljdGAgY2FuIGFsc28gYmUgY2FsbGVkIHdpdGggYXJiaXRyYXJ5IGtleXdvcmQgYXJndW1lbnRzIHRvIHNldAogICAgIHZhbHVlcyBpbiB0aGUgZGljdGlvbmFyeS4KIAotICAgIGBwYXRjaC5kaWN0YCBjYW4gYmUgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlciwgZGVjb3JhdG9yIG9yIGNsYXNzCi0gICAgZGVjb3JhdG9yLiBXaGVuIHVzZWQgYXMgYSBjbGFzcyBkZWNvcmF0b3IgYHBhdGNoLmRpY3RgIGhvbm91cnMKLSAgICBgcGF0Y2guVEVTVF9QUkVGSVhgIGZvciBjaG9vc2luZyB3aGljaCBtZXRob2RzIHRvIHdyYXAuCisgICAgOmZ1bmM6YHBhdGNoLmRpY3RgIGNhbiBiZSB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCBkZWNvcmF0b3Igb3IgY2xhc3MKKyAgICBkZWNvcmF0b3IuIFdoZW4gdXNlZCBhcyBhIGNsYXNzIGRlY29yYXRvciA6ZnVuYzpgcGF0Y2guZGljdGAgaG9ub3VycworICAgIGBgcGF0Y2guVEVTVF9QUkVGSVhgYCBmb3IgY2hvb3Npbmcgd2hpY2ggbWV0aG9kcyB0byB3cmFwLgogCi1gcGF0Y2guZGljdGAgY2FuIGJlIHVzZWQgdG8gYWRkIG1lbWJlcnMgdG8gYSBkaWN0aW9uYXJ5LCBvciBzaW1wbHkgbGV0IGEgdGVzdAorOmZ1bmM6YHBhdGNoLmRpY3RgIGNhbiBiZSB1c2VkIHRvIGFkZCBtZW1iZXJzIHRvIGEgZGljdGlvbmFyeSwgb3Igc2ltcGx5IGxldCBhIHRlc3QKIGNoYW5nZSBhIGRpY3Rpb25hcnksIGFuZCBlbnN1cmUgdGhlIGRpY3Rpb25hcnkgaXMgcmVzdG9yZWQgd2hlbiB0aGUgdGVzdAogZW5kcy4KIApAQCAtMTIwMiwxMiArMTIyMywxMiBAQAogCiAgICAgPj4+IGltcG9ydCBvcwogICAgID4+PiB3aXRoIHBhdGNoLmRpY3QoJ29zLmVudmlyb24nLCB7J25ld2tleSc6ICduZXd2YWx1ZSd9KToKLSAgICAuLi4gICAgIHByaW50IG9zLmVudmlyb25bJ25ld2tleSddCisgICAgLi4uICAgICBwcmludChvcy5lbnZpcm9uWyduZXdrZXknXSkKICAgICAuLi4KICAgICBuZXd2YWx1ZQogICAgID4+PiBhc3NlcnQgJ25ld2tleScgbm90IGluIG9zLmVudmlyb24KIAotS2V5d29yZHMgY2FuIGJlIHVzZWQgaW4gdGhlIGBwYXRjaC5kaWN0YCBjYWxsIHRvIHNldCB2YWx1ZXMgaW4gdGhlIGRpY3Rpb25hcnk6CitLZXl3b3JkcyBjYW4gYmUgdXNlZCBpbiB0aGUgOmZ1bmM6YHBhdGNoLmRpY3RgIGNhbGwgdG8gc2V0IHZhbHVlcyBpbiB0aGUgZGljdGlvbmFyeToKIAogICAgID4+PiBteW1vZHVsZSA9IE1hZ2ljTW9jaygpCiAgICAgPj4+IG15bW9kdWxlLmZ1bmN0aW9uLnJldHVybl92YWx1ZSA9ICdmaXNoJwpAQCAtMTIxNywxMSArMTIzOCwxMSBAQAogICAgIC4uLgogICAgICdmaXNoJwogCi1gcGF0Y2guZGljdGAgY2FuIGJlIHVzZWQgd2l0aCBkaWN0aW9uYXJ5IGxpa2Ugb2JqZWN0cyB0aGF0IGFyZW4ndCBhY3R1YWxseQorOmZ1bmM6YHBhdGNoLmRpY3RgIGNhbiBiZSB1c2VkIHdpdGggZGljdGlvbmFyeSBsaWtlIG9iamVjdHMgdGhhdCBhcmVuJ3QgYWN0dWFsbHkKIGRpY3Rpb25hcmllcy4gQXQgdGhlIHZlcnkgbWluaW11bSB0aGV5IG11c3Qgc3VwcG9ydCBpdGVtIGdldHRpbmcsIHNldHRpbmcsCiBkZWxldGluZyBhbmQgZWl0aGVyIGl0ZXJhdGlvbiBvciBtZW1iZXJzaGlwIHRlc3QuIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlCi1tYWdpYyBtZXRob2RzIGBfX2dldGl0ZW1fX2AsIGBfX3NldGl0ZW1fX2AsIGBfX2RlbGl0ZW1fX2AgYW5kIGVpdGhlcgotYF9faXRlcl9fYCBvciBgX19jb250YWluc19fYC4KK21hZ2ljIG1ldGhvZHMgOm1ldGg6YF9fZ2V0aXRlbV9fYCwgOm1ldGg6YF9fc2V0aXRlbV9fYCwgOm1ldGg6YF9fZGVsaXRlbV9fYCBhbmQgZWl0aGVyCis6bWV0aDpgX19pdGVyX19gIG9yIDptZXRoOmBfX2NvbnRhaW5zX19gLgogCiAgICAgPj4+IGNsYXNzIENvbnRhaW5lcjoKICAgICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTEyNTcsMjEgKzEyNzgsMjEgQEAKICAgICAgICAgd2l0aCBwYXRjaC5tdWx0aXBsZShzZXR0aW5ncywgRklSU1RfUEFUQ0g9J29uZScsIFNFQ09ORF9QQVRDSD0ndHdvJyk6CiAgICAgICAgICAgICAuLi4KIAotICAgIFVzZSA6ZGF0YTpgREVGQVVMVGAgYXMgdGhlIHZhbHVlIGlmIHlvdSB3YW50IGBwYXRjaC5tdWx0aXBsZWAgdG8gY3JlYXRlCisgICAgVXNlIDpkYXRhOmBERUZBVUxUYCBhcyB0aGUgdmFsdWUgaWYgeW91IHdhbnQgOmZ1bmM6YHBhdGNoLm11bHRpcGxlYCB0byBjcmVhdGUKICAgICBtb2NrcyBmb3IgeW91LiBJbiB0aGlzIGNhc2UgdGhlIGNyZWF0ZWQgbW9ja3MgYXJlIHBhc3NlZCBpbnRvIGEgZGVjb3JhdGVkCi0gICAgZnVuY3Rpb24gYnkga2V5d29yZCwgYW5kIGEgZGljdGlvbmFyeSBpcyByZXR1cm5lZCB3aGVuIGBwYXRjaC5tdWx0aXBsZWAgaXMKKyAgICBmdW5jdGlvbiBieSBrZXl3b3JkLCBhbmQgYSBkaWN0aW9uYXJ5IGlzIHJldHVybmVkIHdoZW4gOmZ1bmM6YHBhdGNoLm11bHRpcGxlYCBpcwogICAgIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIuCiAKLSAgICBgcGF0Y2gubXVsdGlwbGVgIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yLCBjbGFzcyBkZWNvcmF0b3Igb3IgYSBjb250ZXh0Ci0gICAgbWFuYWdlci4gVGhlIGFyZ3VtZW50cyBgc3BlY2AsIGBzcGVjX3NldGAsIGBjcmVhdGVgLCBgYXV0b3NwZWNgIGFuZAotICAgIGBuZXdfY2FsbGFibGVgIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgYHBhdGNoYC4gVGhlc2UgYXJndW1lbnRzIHdpbGwKLSAgICBiZSBhcHBsaWVkIHRvICphbGwqIHBhdGNoZXMgZG9uZSBieSBgcGF0Y2gubXVsdGlwbGVgLgorICAgIDpmdW5jOmBwYXRjaC5tdWx0aXBsZWAgY2FuIGJlIHVzZWQgYXMgYSBkZWNvcmF0b3IsIGNsYXNzIGRlY29yYXRvciBvciBhIGNvbnRleHQKKyAgICBtYW5hZ2VyLiBUaGUgYXJndW1lbnRzICpzcGVjKiwgKnNwZWNfc2V0KiwgKmNyZWF0ZSosICphdXRvc3BlYyogYW5kCisgICAgKm5ld19jYWxsYWJsZSogaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGFzIGZvciA6ZnVuYzpgcGF0Y2hgLiBUaGVzZSBhcmd1bWVudHMgd2lsbAorICAgIGJlIGFwcGxpZWQgdG8gKmFsbCogcGF0Y2hlcyBkb25lIGJ5IDpmdW5jOmBwYXRjaC5tdWx0aXBsZWAuCiAKLSAgICBXaGVuIHVzZWQgYXMgYSBjbGFzcyBkZWNvcmF0b3IgYHBhdGNoLm11bHRpcGxlYCBob25vdXJzIGBwYXRjaC5URVNUX1BSRUZJWGAKKyAgICBXaGVuIHVzZWQgYXMgYSBjbGFzcyBkZWNvcmF0b3IgOmZ1bmM6YHBhdGNoLm11bHRpcGxlYCBob25vdXJzIGBgcGF0Y2guVEVTVF9QUkVGSVhgYAogICAgIGZvciBjaG9vc2luZyB3aGljaCBtZXRob2RzIHRvIHdyYXAuCiAKLUlmIHlvdSB3YW50IGBwYXRjaC5tdWx0aXBsZWAgdG8gY3JlYXRlIG1vY2tzIGZvciB5b3UsIHRoZW4geW91IGNhbiB1c2UKLTpkYXRhOmBERUZBVUxUYCBhcyB0aGUgdmFsdWUuIElmIHlvdSB1c2UgYHBhdGNoLm11bHRpcGxlYCBhcyBhIGRlY29yYXRvcgorSWYgeW91IHdhbnQgOmZ1bmM6YHBhdGNoLm11bHRpcGxlYCB0byBjcmVhdGUgbW9ja3MgZm9yIHlvdSwgdGhlbiB5b3UgY2FuIHVzZQorOmRhdGE6YERFRkFVTFRgIGFzIHRoZSB2YWx1ZS4gSWYgeW91IHVzZSA6ZnVuYzpgcGF0Y2gubXVsdGlwbGVgIGFzIGEgZGVjb3JhdG9yCiB0aGVuIHRoZSBjcmVhdGVkIG1vY2tzIGFyZSBwYXNzZWQgaW50byB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIGJ5IGtleXdvcmQuCiAKICAgICA+Pj4gdGhpbmcgPSBvYmplY3QoKQpAQCAtMTI4NCw4ICsxMzA1LDggQEAKICAgICAuLi4KICAgICA+Pj4gdGVzdF9mdW5jdGlvbigpCiAKLWBwYXRjaC5tdWx0aXBsZWAgY2FuIGJlIG5lc3RlZCB3aXRoIG90aGVyIGBwYXRjaGAgZGVjb3JhdG9ycywgYnV0IHB1dCBhcmd1bWVudHMKLXBhc3NlZCBieSBrZXl3b3JkICphZnRlciogYW55IG9mIHRoZSBzdGFuZGFyZCBhcmd1bWVudHMgY3JlYXRlZCBieSBgcGF0Y2hgOgorOmZ1bmM6YHBhdGNoLm11bHRpcGxlYCBjYW4gYmUgbmVzdGVkIHdpdGggb3RoZXIgYGBwYXRjaGBgIGRlY29yYXRvcnMsIGJ1dCBwdXQgYXJndW1lbnRzCitwYXNzZWQgYnkga2V5d29yZCAqYWZ0ZXIqIGFueSBvZiB0aGUgc3RhbmRhcmQgYXJndW1lbnRzIGNyZWF0ZWQgYnkgOmZ1bmM6YHBhdGNoYDoKIAogICAgID4+PiBAcGF0Y2goJ3N5cy5leGl0JykKICAgICAuLi4gQHBhdGNoLm11bHRpcGxlKCdfX21haW5fXycsIHRoaW5nPURFRkFVTFQsIG90aGVyPURFRkFVTFQpCkBAIC0xMjk2LDcgKzEzMTcsNyBAQAogICAgIC4uLgogICAgID4+PiB0ZXN0X2Z1bmN0aW9uKCkKIAotSWYgYHBhdGNoLm11bHRpcGxlYCBpcyB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlCitJZiA6ZnVuYzpgcGF0Y2gubXVsdGlwbGVgIGlzIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUKIGNvbnRleHQgbWFuZ2VyIGlzIGEgZGljdGlvbmFyeSB3aGVyZSBjcmVhdGVkIG1vY2tzIGFyZSBrZXllZCBieSBuYW1lOgogCiAgICAgPj4+IHdpdGggcGF0Y2gubXVsdGlwbGUoJ19fbWFpbl9fJywgdGhpbmc9REVGQVVMVCwgb3RoZXI9REVGQVVMVCkgYXMgdmFsdWVzOgpAQCAtMTMxMiwxNiArMTMzMywxNiBAQAogcGF0Y2ggbWV0aG9kczogc3RhcnQgYW5kIHN0b3AKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKLUFsbCB0aGUgcGF0Y2hlcnMgaGF2ZSBgc3RhcnRgIGFuZCBgc3RvcGAgbWV0aG9kcy4gVGhlc2UgbWFrZSBpdCBzaW1wbGVyIHRvIGRvCi1wYXRjaGluZyBpbiBgc2V0VXBgIG1ldGhvZHMgb3Igd2hlcmUgeW91IHdhbnQgdG8gZG8gbXVsdGlwbGUgcGF0Y2hlcyB3aXRob3V0CitBbGwgdGhlIHBhdGNoZXJzIGhhdmUgOm1ldGg6YHN0YXJ0YCBhbmQgOm1ldGg6YHN0b3BgIG1ldGhvZHMuIFRoZXNlIG1ha2UgaXQgc2ltcGxlciB0byBkbworcGF0Y2hpbmcgaW4gYGBzZXRVcGBgIG1ldGhvZHMgb3Igd2hlcmUgeW91IHdhbnQgdG8gZG8gbXVsdGlwbGUgcGF0Y2hlcyB3aXRob3V0CiBuZXN0aW5nIGRlY29yYXRvcnMgb3Igd2l0aCBzdGF0ZW1lbnRzLgogCi1UbyB1c2UgdGhlbSBjYWxsIGBwYXRjaGAsIGBwYXRjaC5vYmplY3RgIG9yIGBwYXRjaC5kaWN0YCBhcyBub3JtYWwgYW5kIGtlZXAgYQotcmVmZXJlbmNlIHRvIHRoZSByZXR1cm5lZCBgcGF0Y2hlcmAgb2JqZWN0LiBZb3UgY2FuIHRoZW4gY2FsbCBgc3RhcnRgIHRvIHB1dAotdGhlIHBhdGNoIGluIHBsYWNlIGFuZCBgc3RvcGAgdG8gdW5kbyBpdC4KK1RvIHVzZSB0aGVtIGNhbGwgOmZ1bmM6YHBhdGNoYCwgOmZ1bmM6YHBhdGNoLm9iamVjdGAgb3IgOmZ1bmM6YHBhdGNoLmRpY3RgIGFzCitub3JtYWwgYW5kIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIHJldHVybmVkIGBgcGF0Y2hlcmBgIG9iamVjdC4gWW91IGNhbiB0aGVuCitjYWxsIDptZXRoOmBzdGFydGAgdG8gcHV0IHRoZSBwYXRjaCBpbiBwbGFjZSBhbmQgOm1ldGg6YHN0b3BgIHRvIHVuZG8gaXQuCiAKLUlmIHlvdSBhcmUgdXNpbmcgYHBhdGNoYCB0byBjcmVhdGUgYSBtb2NrIGZvciB5b3UgdGhlbiBpdCB3aWxsIGJlIHJldHVybmVkIGJ5Ci10aGUgY2FsbCB0byBgcGF0Y2hlci5zdGFydGAuCitJZiB5b3UgYXJlIHVzaW5nIDpmdW5jOmBwYXRjaGAgdG8gY3JlYXRlIGEgbW9jayBmb3IgeW91IHRoZW4gaXQgd2lsbCBiZSByZXR1cm5lZCBieQordGhlIGNhbGwgdG8gYGBwYXRjaGVyLnN0YXJ0YGAuCiAKICAgICA+Pj4gcGF0Y2hlciA9IHBhdGNoKCdwYWNrYWdlLm1vZHVsZS5DbGFzc05hbWUnKQogICAgID4+PiBmcm9tIHBhY2thZ2UgaW1wb3J0IG1vZHVsZQpAQCAtMTMzNCw4ICsxMzU1LDggQEAKICAgICA+Pj4gYXNzZXJ0IG1vZHVsZS5DbGFzc05hbWUgaXMgbm90IG5ld19tb2NrCiAKIAotQSB0eXBpY2FsIHVzZSBjYXNlIGZvciB0aGlzIG1pZ2h0IGJlIGZvciBkb2luZyBtdWx0aXBsZSBwYXRjaGVzIGluIHRoZSBgc2V0VXBgCi1tZXRob2Qgb2YgYSBgVGVzdENhc2VgOgorQSB0eXBpY2FsIHVzZSBjYXNlIGZvciB0aGlzIG1pZ2h0IGJlIGZvciBkb2luZyBtdWx0aXBsZSBwYXRjaGVzIGluIHRoZSBgYHNldFVwYGAKK21ldGhvZCBvZiBhIDpjbGFzczpgVGVzdENhc2VgOgogCiAgICAgPj4+IGNsYXNzIE15VGVzdChUZXN0Q2FzZSk6CiAgICAgLi4uICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xMzU3LDcgKzEzNzgsNyBAQAogLi4gY2F1dGlvbjo6CiAKICAgICBJZiB5b3UgdXNlIHRoaXMgdGVjaG5pcXVlIHlvdSBtdXN0IGVuc3VyZSB0aGF0IHRoZSBwYXRjaGluZyBpcyAidW5kb25lIiBieQotICAgIGNhbGxpbmcgYHN0b3BgLiBUaGlzIGNhbiBiZSBmaWRkbGllciB0aGFuIHlvdSBtaWdodCB0aGluaywgYmVjYXVzZSBpZiBhbgorICAgIGNhbGxpbmcgYGBzdG9wYGAuIFRoaXMgY2FuIGJlIGZpZGRsaWVyIHRoYW4geW91IG1pZ2h0IHRoaW5rLCBiZWNhdXNlIGlmIGFuCiAgICAgZXhjZXB0aW9uIGlzIHJhaXNlZCBpbiB0aGUgYGBzZXRVcGBgIHRoZW4gYGB0ZWFyRG93bmBgIGlzIG5vdCBjYWxsZWQuCiAgICAgOm1ldGg6YHVuaXR0ZXN0LlRlc3RDYXNlLmFkZENsZWFudXBgIG1ha2VzIHRoaXMgZWFzaWVyOgogCkBAIC0xMzcxLDE1ICsxMzkyLDE1IEBACiAgICAgICAgIC4uLiAgICAgICAgIGFzc2VydCBwYWNrYWdlLm1vZHVsZS5DbGFzcyBpcyBzZWxmLk1vY2tDbGFzcwogICAgICAgICAuLi4KIAotICAgIEFzIGFuIGFkZGVkIGJvbnVzIHlvdSBubyBsb25nZXIgbmVlZCB0byBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBgcGF0Y2hlcmAKKyAgICBBcyBhbiBhZGRlZCBib251cyB5b3Ugbm8gbG9uZ2VyIG5lZWQgdG8ga2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgYGBwYXRjaGVyYGAKICAgICBvYmplY3QuCiAKIEl0IGlzIGFsc28gcG9zc2libGUgdG8gc3RvcCBhbGwgcGF0Y2hlcyB3aGljaCBoYXZlIGJlZW4gc3RhcnRlZCBieSB1c2luZwotYHBhdGNoLnN0b3BhbGxgLgorOmZ1bmM6YHBhdGNoLnN0b3BhbGxgLgogCiAuLiBmdW5jdGlvbjo6IHBhdGNoLnN0b3BhbGwKIAotICAgIFN0b3AgYWxsIGFjdGl2ZSBwYXRjaGVzLiBPbmx5IHN0b3BzIHBhdGNoZXMgc3RhcnRlZCB3aXRoIGBzdGFydGAuCisgICAgU3RvcCBhbGwgYWN0aXZlIHBhdGNoZXMuIE9ubHkgc3RvcHMgcGF0Y2hlcyBzdGFydGVkIHdpdGggYGBzdGFydGBgLgogCiAKIFRFU1RfUFJFRklYCkBAIC0xMzg3LDExICsxNDA4LDExIEBACiAKIEFsbCBvZiB0aGUgcGF0Y2hlcnMgY2FuIGJlIHVzZWQgYXMgY2xhc3MgZGVjb3JhdG9ycy4gV2hlbiB1c2VkIGluIHRoaXMgd2F5CiB0aGV5IHdyYXAgZXZlcnkgdGVzdCBtZXRob2Qgb24gdGhlIGNsYXNzLiBUaGUgcGF0Y2hlcnMgcmVjb2duaXNlIG1ldGhvZHMgdGhhdAotc3RhcnQgd2l0aCBgdGVzdGAgYXMgYmVpbmcgdGVzdCBtZXRob2RzLiBUaGlzIGlzIHRoZSBzYW1lIHdheSB0aGF0IHRoZQorc3RhcnQgd2l0aCBgYCd0ZXN0J2BgIGFzIGJlaW5nIHRlc3QgbWV0aG9kcy4gVGhpcyBpcyB0aGUgc2FtZSB3YXkgdGhhdCB0aGUKIDpjbGFzczpgdW5pdHRlc3QuVGVzdExvYWRlcmAgZmluZHMgdGVzdCBtZXRob2RzIGJ5IGRlZmF1bHQuCiAKIEl0IGlzIHBvc3NpYmxlIHRoYXQgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHByZWZpeCBmb3IgeW91ciB0ZXN0cy4gWW91IGNhbgotaW5mb3JtIHRoZSBwYXRjaGVycyBvZiB0aGUgZGlmZmVyZW50IHByZWZpeCBieSBzZXR0aW5nIGBwYXRjaC5URVNUX1BSRUZJWGA6CitpbmZvcm0gdGhlIHBhdGNoZXJzIG9mIHRoZSBkaWZmZXJlbnQgcHJlZml4IGJ5IHNldHRpbmcgYGBwYXRjaC5URVNUX1BSRUZJWGBgOgogCiAgICAgPj4+IHBhdGNoLlRFU1RfUFJFRklYID0gJ2ZvbycKICAgICA+Pj4gdmFsdWUgPSAzCkBAIC0xMzk5LDkgKzE0MjAsOSBAQAogICAgID4+PiBAcGF0Y2goJ19fbWFpbl9fLnZhbHVlJywgJ25vdCB0aHJlZScpCiAgICAgLi4uIGNsYXNzIFRoaW5nOgogICAgIC4uLiAgICAgZGVmIGZvb19vbmUoc2VsZik6Ci0gICAgLi4uICAgICAgICAgcHJpbnQgdmFsdWUKKyAgICAuLi4gICAgICAgICBwcmludCh2YWx1ZSkKICAgICAuLi4gICAgIGRlZiBmb29fdHdvKHNlbGYpOgotICAgIC4uLiAgICAgICAgIHByaW50IHZhbHVlCisgICAgLi4uICAgICAgICAgcHJpbnQodmFsdWUpCiAgICAgLi4uCiAgICAgPj4+CiAgICAgPj4+IFRoaW5nKCkuZm9vX29uZSgpCkBAIC0xNDQ0LDcgKzE0NjUsNyBAQAogV2hlcmUgdG8gcGF0Y2gKIH5+fn5+fn5+fn5+fn5+CiAKLWBwYXRjaGAgd29ya3MgYnkgKHRlbXBvcmFyaWx5KSBjaGFuZ2luZyB0aGUgb2JqZWN0IHRoYXQgYSAqbmFtZSogcG9pbnRzIHRvIHdpdGgKKzpmdW5jOmBwYXRjaGAgd29ya3MgYnkgKHRlbXBvcmFyaWx5KSBjaGFuZ2luZyB0aGUgb2JqZWN0IHRoYXQgYSAqbmFtZSogcG9pbnRzIHRvIHdpdGgKIGFub3RoZXIgb25lLiBUaGVyZSBjYW4gYmUgbWFueSBuYW1lcyBwb2ludGluZyB0byBhbnkgaW5kaXZpZHVhbCBvYmplY3QsIHNvCiBmb3IgcGF0Y2hpbmcgdG8gd29yayB5b3UgbXVzdCBlbnN1cmUgdGhhdCB5b3UgcGF0Y2ggdGhlIG5hbWUgdXNlZCBieSB0aGUgc3lzdGVtCiB1bmRlciB0ZXN0LgpAQCAtMTQ2MiwyMyArMTQ4MywyMyBAQAogICAgICAgICAtPiBmcm9tIGEgaW1wb3J0IFNvbWVDbGFzcwogICAgICAgICAtPiBzb21lX2Z1bmN0aW9uIGluc3RhbnRpYXRlcyBTb21lQ2xhc3MKIAotTm93IHdlIHdhbnQgdG8gdGVzdCBgc29tZV9mdW5jdGlvbmAgYnV0IHdlIHdhbnQgdG8gbW9jayBvdXQgYFNvbWVDbGFzc2AgdXNpbmcKLWBwYXRjaGAuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2hlbiB3ZSBpbXBvcnQgbW9kdWxlIGIsIHdoaWNoIHdlIHdpbGwgaGF2ZSB0bwotZG8gdGhlbiBpdCBpbXBvcnRzIGBTb21lQ2xhc3NgIGZyb20gbW9kdWxlIGEuIElmIHdlIHVzZSBgcGF0Y2hgIHRvIG1vY2sgb3V0Ci1gYS5Tb21lQ2xhc3NgIHRoZW4gaXQgd2lsbCBoYXZlIG5vIGVmZmVjdCBvbiBvdXIgdGVzdDsgbW9kdWxlIGIgYWxyZWFkeSBoYXMgYQotcmVmZXJlbmNlIHRvIHRoZSAqcmVhbCogYFNvbWVDbGFzc2AgYW5kIGl0IGxvb2tzIGxpa2Ugb3VyIHBhdGNoaW5nIGhhZCBubworTm93IHdlIHdhbnQgdG8gdGVzdCBgYHNvbWVfZnVuY3Rpb25gYCBidXQgd2Ugd2FudCB0byBtb2NrIG91dCBgYFNvbWVDbGFzc2BgIHVzaW5nCis6ZnVuYzpgcGF0Y2hgLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gd2UgaW1wb3J0IG1vZHVsZSBiLCB3aGljaCB3ZSB3aWxsIGhhdmUgdG8KK2RvIHRoZW4gaXQgaW1wb3J0cyBgYFNvbWVDbGFzc2BgIGZyb20gbW9kdWxlIGEuIElmIHdlIHVzZSA6ZnVuYzpgcGF0Y2hgIHRvIG1vY2sgb3V0CitgYGEuU29tZUNsYXNzYGAgdGhlbiBpdCB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uIG91ciB0ZXN0OyBtb2R1bGUgYiBhbHJlYWR5IGhhcyBhCityZWZlcmVuY2UgdG8gdGhlICpyZWFsKiBgYFNvbWVDbGFzc2BgIGFuZCBpdCBsb29rcyBsaWtlIG91ciBwYXRjaGluZyBoYWQgbm8KIGVmZmVjdC4KIAotVGhlIGtleSBpcyB0byBwYXRjaCBvdXQgYFNvbWVDbGFzc2Agd2hlcmUgaXQgaXMgdXNlZCAob3Igd2hlcmUgaXQgaXMgbG9va2VkIHVwCi0pLiBJbiB0aGlzIGNhc2UgYHNvbWVfZnVuY3Rpb25gIHdpbGwgYWN0dWFsbHkgbG9vayB1cCBgU29tZUNsYXNzYCBpbiBtb2R1bGUgYiwKK1RoZSBrZXkgaXMgdG8gcGF0Y2ggb3V0IGBgU29tZUNsYXNzYGAgd2hlcmUgaXQgaXMgdXNlZCAob3Igd2hlcmUgaXQgaXMgbG9va2VkIHVwCispLiBJbiB0aGlzIGNhc2UgYGBzb21lX2Z1bmN0aW9uYGAgd2lsbCBhY3R1YWxseSBsb29rIHVwIGBgU29tZUNsYXNzYGAgaW4gbW9kdWxlIGIsCiB3aGVyZSB3ZSBoYXZlIGltcG9ydGVkIGl0LiBUaGUgcGF0Y2hpbmcgc2hvdWxkIGxvb2sgbGlrZTo6CiAKICAgICBAcGF0Y2goJ2IuU29tZUNsYXNzJykKIAotSG93ZXZlciwgY29uc2lkZXIgdGhlIGFsdGVybmF0aXZlIHNjZW5hcmlvIHdoZXJlIGluc3RlYWQgb2YgYGZyb20gYSBpbXBvcnQKLVNvbWVDbGFzc2AgbW9kdWxlIGIgZG9lcyBgaW1wb3J0IGFgIGFuZCBgc29tZV9mdW5jdGlvbmAgdXNlcyBgYS5Tb21lQ2xhc3NgLiBCb3RoCitIb3dldmVyLCBjb25zaWRlciB0aGUgYWx0ZXJuYXRpdmUgc2NlbmFyaW8gd2hlcmUgaW5zdGVhZCBvZiBgYGZyb20gYSBpbXBvcnQKK1NvbWVDbGFzc2BgIG1vZHVsZSBiIGRvZXMgYGBpbXBvcnQgYWBgIGFuZCBgYHNvbWVfZnVuY3Rpb25gYCB1c2VzIGBgYS5Tb21lQ2xhc3NgYC4gQm90aAogb2YgdGhlc2UgaW1wb3J0IGZvcm1zIGFyZSBjb21tb24uIEluIHRoaXMgY2FzZSB0aGUgY2xhc3Mgd2Ugd2FudCB0byBwYXRjaCBpcwotYmVpbmcgbG9va2VkIHVwIG9uIHRoZSBhIG1vZHVsZSBhbmQgc28gd2UgaGF2ZSB0byBwYXRjaCBgYS5Tb21lQ2xhc3NgIGluc3RlYWQ6OgorYmVpbmcgbG9va2VkIHVwIGluIHRoZSBtb2R1bGUgYW5kIHNvIHdlIGhhdmUgdG8gcGF0Y2ggYGBhLlNvbWVDbGFzc2BgIGluc3RlYWQ6OgogCiAgICAgQHBhdGNoKCdhLlNvbWVDbGFzcycpCiAKQEAgLTE1MzQsNyArMTU1NSw3IEBACiAgICBbXQogCiBPbmUgdXNlIGNhc2UgZm9yIHRoaXMgaXMgZm9yIG1vY2tpbmcgb2JqZWN0cyB1c2VkIGFzIGNvbnRleHQgbWFuYWdlcnMgaW4gYQotYHdpdGhgIHN0YXRlbWVudDoKKzprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQ6CiAKICAgID4+PiBtb2NrID0gTW9jaygpCiAgICA+Pj4gbW9jay5fX2VudGVyX18gPSBNb2NrKHJldHVybl92YWx1ZT0nZm9vJykKQEAgLTE1NTAsMjcgKzE1NzEsMjcgQEAKIAogLi4gbm90ZTo6CiAKLSAgIElmIHlvdSB1c2UgdGhlIGBzcGVjYCBrZXl3b3JkIGFyZ3VtZW50IHRvIGNyZWF0ZSBhIG1vY2sgdGhlbiBhdHRlbXB0aW5nIHRvCi0gICBzZXQgYSBtYWdpYyBtZXRob2QgdGhhdCBpc24ndCBpbiB0aGUgc3BlYyB3aWxsIHJhaXNlIGFuIGBBdHRyaWJ1dGVFcnJvcmAuCisgICBJZiB5b3UgdXNlIHRoZSAqc3BlYyoga2V5d29yZCBhcmd1bWVudCB0byBjcmVhdGUgYSBtb2NrIHRoZW4gYXR0ZW1wdGluZyB0bworICAgc2V0IGEgbWFnaWMgbWV0aG9kIHRoYXQgaXNuJ3QgaW4gdGhlIHNwZWMgd2lsbCByYWlzZSBhbiA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAuCiAKIFRoZSBmdWxsIGxpc3Qgb2Ygc3VwcG9ydGVkIG1hZ2ljIG1ldGhvZHMgaXM6CiAKICogYGBfX2hhc2hfX2BgLCBgYF9fc2l6ZW9mX19gYCwgYGBfX3JlcHJfX2BgIGFuZCBgYF9fc3RyX19gYAogKiBgYF9fZGlyX19gYCwgYGBfX2Zvcm1hdF9fYGAgYW5kIGBgX19zdWJjbGFzc2VzX19gYAogKiBgYF9fZmxvb3JfX2BgLCBgYF9fdHJ1bmNfX2BgIGFuZCBgYF9fY2VpbF9fYGAKLSogQ29tcGFyaXNvbnM6IGBgX19jbXBfX2BgLCBgYF9fbHRfX2BgLCBgYF9fZ3RfX2BgLCBgYF9fbGVfX2BgLCBgYF9fZ2VfX2BgLAorKiBDb21wYXJpc29uczogYGBfX2x0X19gYCwgYGBfX2d0X19gYCwgYGBfX2xlX19gYCwgYGBfX2dlX19gYCwKICAgYGBfX2VxX19gYCBhbmQgYGBfX25lX19gYAogKiBDb250YWluZXIgbWV0aG9kczogYGBfX2dldGl0ZW1fX2BgLCBgYF9fc2V0aXRlbV9fYGAsIGBgX19kZWxpdGVtX19gYCwKLSAgYGBfX2NvbnRhaW5zX19gYCwgYGBfX2xlbl9fYGAsIGBgX19pdGVyX19gYCwgYGBfX2dldHNsaWNlX19gYCwKLSAgYGBfX3NldHNsaWNlX19gYCwgYGBfX3JldmVyc2VkX19gYCBhbmQgYGBfX21pc3NpbmdfX2BgCisgIGBgX19jb250YWluc19fYGAsIGBgX19sZW5fX2BgLCBgYF9faXRlcl9fYGAsIGBgX19yZXZlcnNlZF9fYGAKKyAgYW5kIGBgX19taXNzaW5nX19gYAogKiBDb250ZXh0IG1hbmFnZXI6IGBgX19lbnRlcl9fYGAgYW5kIGBgX19leGl0X19gYAogKiBVbmFyeSBudW1lcmljIG1ldGhvZHM6IGBgX19uZWdfX2BgLCBgYF9fcG9zX19gYCBhbmQgYGBfX2ludmVydF9fYGAKICogVGhlIG51bWVyaWMgbWV0aG9kcyAoaW5jbHVkaW5nIHJpZ2h0IGhhbmQgYW5kIGluLXBsYWNlIHZhcmlhbnRzKToKLSAgYGBfX2FkZF9fYGAsIGBgX19zdWJfX2BgLCBgYF9fbXVsX19gYCwgYGBfX2Rpdl9fYGAsCisgIGBgX19hZGRfX2BgLCBgYF9fc3ViX19gYCwgYGBfX211bF9fYGAsIGBgX19kaXZfX2BgLCBgYF9fdHJ1ZWRpdl9fYGAsCiAgIGBgX19mbG9vcmRpdl9fYGAsIGBgX19tb2RfX2BgLCBgYF9fZGl2bW9kX19gYCwgYGBfX2xzaGlmdF9fYGAsCiAgIGBgX19yc2hpZnRfX2BgLCBgYF9fYW5kX19gYCwgYGBfX3hvcl9fYGAsIGBgX19vcl9fYGAsIGFuZCBgYF9fcG93X19gYAotKiBOdW1lcmljIGNvbnZlcnNpb24gbWV0aG9kczogYGBfX2NvbXBsZXhfX2BgLCBgYF9faW50X19gYCwgYGBfX2Zsb2F0X19gYCwKLSAgYGBfX2luZGV4X19gYCBhbmQgYGBfX2NvZXJjZV9fYGAKKyogTnVtZXJpYyBjb252ZXJzaW9uIG1ldGhvZHM6IGBgX19jb21wbGV4X19gYCwgYGBfX2ludF9fYGAsIGBgX19mbG9hdF9fYGAKKyAgYW5kIGBgX19pbmRleF9fYGAKICogRGVzY3JpcHRvciBtZXRob2RzOiBgYF9fZ2V0X19gYCwgYGBfX3NldF9fYGAgYW5kIGBgX19kZWxldGVfX2BgCiAqIFBpY2tsaW5nOiBgYF9fcmVkdWNlX19gYCwgYGBfX3JlZHVjZV9leF9fYGAsIGBgX19nZXRpbml0YXJnc19fYGAsCiAgIGBgX19nZXRuZXdhcmdzX19gYCwgYGBfX2dldHN0YXRlX19gYCBhbmQgYGBfX3NldHN0YXRlX19gYApAQCAtMTU4Nyw3ICsxNjA4LDcgQEAKIE1hZ2ljIE1vY2sKIH5+fn5+fn5+fn4KIAotVGhlcmUgYXJlIHR3byBgTWFnaWNNb2NrYCB2YXJpYW50czogYE1hZ2ljTW9ja2AgYW5kIGBOb25DYWxsYWJsZU1hZ2ljTW9ja2AuCitUaGVyZSBhcmUgdHdvIGBgTWFnaWNNb2NrYGAgdmFyaWFudHM6IDpjbGFzczpgTWFnaWNNb2NrYCBhbmQgOmNsYXNzOmBOb25DYWxsYWJsZU1hZ2ljTW9ja2AuCiAKIAogLi4gY2xhc3M6OiBNYWdpY01vY2soKmFyZ3MsICoqa3cpCkBAIC0xNTk4LDE5ICsxNjE5LDE5IEBACiAKICAgIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IgOmNsYXNzOmBNb2NrYC4KIAotICAgSWYgeW91IHVzZSB0aGUgYHNwZWNgIG9yIGBzcGVjX3NldGAgYXJndW1lbnRzIHRoZW4gKm9ubHkqIG1hZ2ljIG1ldGhvZHMKKyAgIElmIHlvdSB1c2UgdGhlICpzcGVjKiBvciAqc3BlY19zZXQqIGFyZ3VtZW50cyB0aGVuICpvbmx5KiBtYWdpYyBtZXRob2RzCiAgICB0aGF0IGV4aXN0IGluIHRoZSBzcGVjIHdpbGwgYmUgY3JlYXRlZC4KIAogCiAuLiBjbGFzczo6IE5vbkNhbGxhYmxlTWFnaWNNb2NrKCphcmdzLCAqKmt3KQogCi0gICAgQSBub24tY2FsbGFibGUgdmVyc2lvbiBvZiBgTWFnaWNNb2NrYC4KKyAgICBBIG5vbi1jYWxsYWJsZSB2ZXJzaW9uIG9mIDpjbGFzczpgTWFnaWNNb2NrYC4KIAogICAgIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbWVhbmluZyBhcyBmb3IKLSAgICA6Y2xhc3M6YE1hZ2ljTW9ja2AsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBgcmV0dXJuX3ZhbHVlYCBhbmQKLSAgICBgc2lkZV9lZmZlY3RgIHdoaWNoIGhhdmUgbm8gbWVhbmluZyBvbiBhIG5vbi1jYWxsYWJsZSBtb2NrLgorICAgIDpjbGFzczpgTWFnaWNNb2NrYCwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mICpyZXR1cm5fdmFsdWUqIGFuZAorICAgICpzaWRlX2VmZmVjdCogd2hpY2ggaGF2ZSBubyBtZWFuaW5nIG9uIGEgbm9uLWNhbGxhYmxlIG1vY2suCiAKLVRoZSBtYWdpYyBtZXRob2RzIGFyZSBzZXR1cCB3aXRoIGBNYWdpY01vY2tgIG9iamVjdHMsIHNvIHlvdSBjYW4gY29uZmlndXJlIHRoZW0KK1RoZSBtYWdpYyBtZXRob2RzIGFyZSBzZXR1cCB3aXRoIDpjbGFzczpgTWFnaWNNb2NrYCBvYmplY3RzLCBzbyB5b3UgY2FuIGNvbmZpZ3VyZSB0aGVtCiBhbmQgdXNlIHRoZW0gaW4gdGhlIHVzdWFsIHdheToKIAogICAgPj4+IG1vY2sgPSBNYWdpY01vY2soKQpAQCAtMTY1Nyw5ICsxNjc4LDEwIEBACiAgICA+Pj4gb2JqZWN0KCkgaW4gbW9jawogICAgRmFsc2UKIAotVGhlIHR3byBlcXVhbGl0eSBtZXRob2QsIGBfX2VxX19gIGFuZCBgX19uZV9fYCwgYXJlIHNwZWNpYWwuCi1UaGV5IGRvIHRoZSBkZWZhdWx0IGVxdWFsaXR5IGNvbXBhcmlzb24gb24gaWRlbnRpdHksIHVzaW5nIGEgc2lkZQotZWZmZWN0LCB1bmxlc3MgeW91IGNoYW5nZSB0aGVpciByZXR1cm4gdmFsdWUgdG8gcmV0dXJuIHNvbWV0aGluZyBlbHNlOgorVGhlIHR3byBlcXVhbGl0eSBtZXRob2RzLCA6bWV0aDpgX19lcV9fYCBhbmQgOm1ldGg6YF9fbmVfX2AsIGFyZSBzcGVjaWFsLgorVGhleSBkbyB0aGUgZGVmYXVsdCBlcXVhbGl0eSBjb21wYXJpc29uIG9uIGlkZW50aXR5LCB1c2luZyB0aGUKKzphdHRyOmB+TW9jay5zaWRlX2VmZmVjdGAgYXR0cmlidXRlLCB1bmxlc3MgeW91IGNoYW5nZSB0aGVpciByZXR1cm4gdmFsdWUgdG8KK3JldHVybiBzb21ldGhpbmcgZWxzZTo6CiAKICAgID4+PiBNYWdpY01vY2soKSA9PSAzCiAgICBGYWxzZQpAQCAtMTY3MCw3ICsxNjkyLDcgQEAKICAgID4+PiBtb2NrID09IDMKICAgIFRydWUKIAotVGhlIHJldHVybiB2YWx1ZSBvZiBgTWFnaWNNb2NrLl9faXRlcl9fYCBjYW4gYmUgYW55IGl0ZXJhYmxlIG9iamVjdCBhbmQgaXNuJ3QKK1RoZSByZXR1cm4gdmFsdWUgb2YgOm1ldGg6YE1hZ2ljTW9jay5fX2l0ZXJfX2AgY2FuIGJlIGFueSBpdGVyYWJsZSBvYmplY3QgYW5kIGlzbid0CiByZXF1aXJlZCB0byBiZSBhbiBpdGVyYXRvcjoKIAogICAgPj4+IG1vY2sgPSBNYWdpY01vY2soKQpAQCAtMTczMCwxMCArMTc1MiwxMCBAQAogCiBTb21ldGltZXMgd2hlbiB0ZXN0aW5nIHlvdSBuZWVkIHRvIHRlc3QgdGhhdCBhIHNwZWNpZmljIG9iamVjdCBpcyBwYXNzZWQgYXMgYW4KIGFyZ3VtZW50IHRvIGFub3RoZXIgbWV0aG9kLCBvciByZXR1cm5lZC4gSXQgY2FuIGJlIGNvbW1vbiB0byBjcmVhdGUgbmFtZWQKLXNlbnRpbmVsIG9iamVjdHMgdG8gdGVzdCB0aGlzLiBgc2VudGluZWxgIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgb2YKK3NlbnRpbmVsIG9iamVjdHMgdG8gdGVzdCB0aGlzLiA6ZGF0YTpgc2VudGluZWxgIHByb3ZpZGVzIGEgY29udmVuaWVudCB3YXkgb2YKIGNyZWF0aW5nIGFuZCB0ZXN0aW5nIHRoZSBpZGVudGl0eSBvZiBvYmplY3RzIGxpa2UgdGhpcy4KIAotSW4gdGhpcyBleGFtcGxlIHdlIG1vbmtleSBwYXRjaCBgbWV0aG9kYCB0byByZXR1cm4gYHNlbnRpbmVsLnNvbWVfb2JqZWN0YDoKK0luIHRoaXMgZXhhbXBsZSB3ZSBtb25rZXkgcGF0Y2ggYGBtZXRob2RgYCB0byByZXR1cm4gYGBzZW50aW5lbC5zb21lX29iamVjdGBgOgogCiAgICAgPj4+IHJlYWwgPSBQcm9kdWN0aW9uQ2xhc3MoKQogICAgID4+PiByZWFsLm1ldGhvZCA9IE1vY2sobmFtZT0ibWV0aG9kIikKQEAgLTE3NTAsOCArMTc3Miw4IEBACiAKIC4uIGRhdGE6OiBERUZBVUxUCiAKLSAgICBUaGUgYERFRkFVTFRgIG9iamVjdCBpcyBhIHByZS1jcmVhdGVkIHNlbnRpbmVsIChhY3R1YWxseQotICAgIGBzZW50aW5lbC5ERUZBVUxUYCkuIEl0IGNhbiBiZSB1c2VkIGJ5IDphdHRyOmB+TW9jay5zaWRlX2VmZmVjdGAKKyAgICBUaGUgOmRhdGE6YERFRkFVTFRgIG9iamVjdCBpcyBhIHByZS1jcmVhdGVkIHNlbnRpbmVsIChhY3R1YWxseQorICAgIGBgc2VudGluZWwuREVGQVVMVGBgKS4gSXQgY2FuIGJlIHVzZWQgYnkgOmF0dHI6YH5Nb2NrLnNpZGVfZWZmZWN0YAogICAgIGZ1bmN0aW9ucyB0byBpbmRpY2F0ZSB0aGF0IHRoZSBub3JtYWwgcmV0dXJuIHZhbHVlIHNob3VsZCBiZSB1c2VkLgogCiAKQEAgLTE3NjAsOSArMTc4Miw5IEBACiAKIC4uIGZ1bmN0aW9uOjogY2FsbCgqYXJncywgKiprd2FyZ3MpCiAKLSAgICBgY2FsbGAgaXMgYSBoZWxwZXIgb2JqZWN0IGZvciBtYWtpbmcgc2ltcGxlciBhc3NlcnRpb25zLCBmb3IgY29tcGFyaW5nIHdpdGgKKyAgICA6ZnVuYzpgY2FsbGAgaXMgYSBoZWxwZXIgb2JqZWN0IGZvciBtYWtpbmcgc2ltcGxlciBhc3NlcnRpb25zLCBmb3IgY29tcGFyaW5nIHdpdGgKICAgICA6YXR0cjpgfk1vY2suY2FsbF9hcmdzYCwgOmF0dHI6YH5Nb2NrLmNhbGxfYXJnc19saXN0YCwKLSAgICA6YXR0cjpgfk1vY2subW9ja19jYWxsc2AgYW5kIDphdHRyOmB+TW9jay5tZXRob2RfY2FsbHNgLiBgY2FsbGAgY2FuIGFsc28gYmUKKyAgICA6YXR0cjpgfk1vY2subW9ja19jYWxsc2AgYW5kIDphdHRyOmB+TW9jay5tZXRob2RfY2FsbHNgLiA6ZnVuYzpgY2FsbGAgY2FuIGFsc28gYmUKICAgICB1c2VkIHdpdGggOm1ldGg6YH5Nb2NrLmFzc2VydF9oYXNfY2FsbHNgLgogCiAgICAgICAgID4+PiBtID0gTWFnaWNNb2NrKHJldHVybl92YWx1ZT1Ob25lKQpAQCAtMTc3MywxMSArMTc5NSwxMSBAQAogCiAuLiBtZXRob2Q6OiBjYWxsLmNhbGxfbGlzdCgpCiAKLSAgICBGb3IgYSBjYWxsIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgbXVsdGlwbGUgY2FsbHMsIGBjYWxsX2xpc3RgCisgICAgRm9yIGEgY2FsbCBvYmplY3QgdGhhdCByZXByZXNlbnRzIG11bHRpcGxlIGNhbGxzLCA6bWV0aDpgY2FsbF9saXN0YAogICAgIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aGUgaW50ZXJtZWRpYXRlIGNhbGxzIGFzIHdlbGwgYXMgdGhlCiAgICAgZmluYWwgY2FsbC4KIAotYGNhbGxfbGlzdGAgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgbWFraW5nIGFzc2VydGlvbnMgb24gImNoYWluZWQgY2FsbHMiLiBBCitgYGNhbGxfbGlzdGBgIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIG1ha2luZyBhc3NlcnRpb25zIG9uICJjaGFpbmVkIGNhbGxzIi4gQQogY2hhaW5lZCBjYWxsIGlzIG11bHRpcGxlIGNhbGxzIG9uIGEgc2luZ2xlIGxpbmUgb2YgY29kZS4gVGhpcyByZXN1bHRzIGluCiBtdWx0aXBsZSBlbnRyaWVzIGluIDphdHRyOmB+TW9jay5tb2NrX2NhbGxzYCBvbiBhIG1vY2suIE1hbnVhbGx5IGNvbnN0cnVjdGluZwogdGhlIHNlcXVlbmNlIG9mIGNhbGxzIGNhbiBiZSB0ZWRpb3VzLgpAQCAtMTc5OSwxNSArMTgyMSwxNSBAQAogCiAuLiBfY2FsbHMtYXMtdHVwbGVzOgogCi1BIGBjYWxsYCBvYmplY3QgaXMgZWl0aGVyIGEgdHVwbGUgb2YgKHBvc2l0aW9uYWwgYXJncywga2V5d29yZCBhcmdzKSBvcgorQSBgYGNhbGxgYCBvYmplY3QgaXMgZWl0aGVyIGEgdHVwbGUgb2YgKHBvc2l0aW9uYWwgYXJncywga2V5d29yZCBhcmdzKSBvcgogKG5hbWUsIHBvc2l0aW9uYWwgYXJncywga2V5d29yZCBhcmdzKSBkZXBlbmRpbmcgb24gaG93IGl0IHdhcyBjb25zdHJ1Y3RlZC4gV2hlbgoteW91IGNvbnN0cnVjdCB0aGVtIHlvdXJzZWxmIHRoaXMgaXNuJ3QgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBidXQgdGhlIGBjYWxsYAoreW91IGNvbnN0cnVjdCB0aGVtIHlvdXJzZWxmIHRoaXMgaXNuJ3QgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLCBidXQgdGhlIGBgY2FsbGBgCiBvYmplY3RzIHRoYXQgYXJlIGluIHRoZSA6YXR0cjpgTW9jay5jYWxsX2FyZ3NgLCA6YXR0cjpgTW9jay5jYWxsX2FyZ3NfbGlzdGAgYW5kCiA6YXR0cjpgTW9jay5tb2NrX2NhbGxzYCBhdHRyaWJ1dGVzIGNhbiBiZSBpbnRyb3NwZWN0ZWQgdG8gZ2V0IGF0IHRoZSBpbmRpdmlkdWFsCiBhcmd1bWVudHMgdGhleSBjb250YWluLgogCi1UaGUgYGNhbGxgIG9iamVjdHMgaW4gOmF0dHI6YE1vY2suY2FsbF9hcmdzYCBhbmQgOmF0dHI6YE1vY2suY2FsbF9hcmdzX2xpc3RgCi1hcmUgdHdvLXR1cGxlcyBvZiAocG9zaXRpb25hbCBhcmdzLCBrZXl3b3JkIGFyZ3MpIHdoZXJlYXMgdGhlIGBjYWxsYCBvYmplY3RzCitUaGUgYGBjYWxsYGAgb2JqZWN0cyBpbiA6YXR0cjpgTW9jay5jYWxsX2FyZ3NgIGFuZCA6YXR0cjpgTW9jay5jYWxsX2FyZ3NfbGlzdGAKK2FyZSB0d28tdHVwbGVzIG9mIChwb3NpdGlvbmFsIGFyZ3MsIGtleXdvcmQgYXJncykgd2hlcmVhcyB0aGUgYGBjYWxsYGAgb2JqZWN0cwogaW4gOmF0dHI6YE1vY2subW9ja19jYWxsc2AsIGFsb25nIHdpdGggb25lcyB5b3UgY29uc3RydWN0IHlvdXJzZWxmLCBhcmUKIHRocmVlLXR1cGxlcyBvZiAobmFtZSwgcG9zaXRpb25hbCBhcmdzLCBrZXl3b3JkIGFyZ3MpLgogCkBAIC0xODUwLDI1ICsxODcyLDI1IEBACiAuLiBmdW5jdGlvbjo6IGNyZWF0ZV9hdXRvc3BlYyhzcGVjLCBzcGVjX3NldD1GYWxzZSwgaW5zdGFuY2U9RmFsc2UsICoqa3dhcmdzKQogCiAgICAgQ3JlYXRlIGEgbW9jayBvYmplY3QgdXNpbmcgYW5vdGhlciBvYmplY3QgYXMgYSBzcGVjLiBBdHRyaWJ1dGVzIG9uIHRoZQotICAgIG1vY2sgd2lsbCB1c2UgdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIG9uIHRoZSBgc3BlY2Agb2JqZWN0IGFzIHRoZWlyCisgICAgbW9jayB3aWxsIHVzZSB0aGUgY29ycmVzcG9uZGluZyBhdHRyaWJ1dGUgb24gdGhlICpzcGVjKiBvYmplY3QgYXMgdGhlaXIKICAgICBzcGVjLgogCiAgICAgRnVuY3Rpb25zIG9yIG1ldGhvZHMgYmVpbmcgbW9ja2VkIHdpbGwgaGF2ZSB0aGVpciBhcmd1bWVudHMgY2hlY2tlZCB0bwogICAgIGVuc3VyZSB0aGF0IHRoZXkgYXJlIGNhbGxlZCB3aXRoIHRoZSBjb3JyZWN0IHNpZ25hdHVyZS4KIAotICAgIElmIGBzcGVjX3NldGAgaXMgYFRydWVgIHRoZW4gYXR0ZW1wdGluZyB0byBzZXQgYXR0cmlidXRlcyB0aGF0IGRvbid0IGV4aXN0Ci0gICAgb24gdGhlIHNwZWMgb2JqZWN0IHdpbGwgcmFpc2UgYW4gYEF0dHJpYnV0ZUVycm9yYC4KKyAgICBJZiAqc3BlY19zZXQqIGlzIGBgVHJ1ZWBgIHRoZW4gYXR0ZW1wdGluZyB0byBzZXQgYXR0cmlidXRlcyB0aGF0IGRvbid0IGV4aXN0CisgICAgb24gdGhlIHNwZWMgb2JqZWN0IHdpbGwgcmFpc2UgYW4gOmV4YzpgQXR0cmlidXRlRXJyb3JgLgogCiAgICAgSWYgYSBjbGFzcyBpcyB1c2VkIGFzIGEgc3BlYyB0aGVuIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIG1vY2sgKHRoZQogICAgIGluc3RhbmNlIG9mIHRoZSBjbGFzcykgd2lsbCBoYXZlIHRoZSBzYW1lIHNwZWMuIFlvdSBjYW4gdXNlIGEgY2xhc3MgYXMgdGhlCi0gICAgc3BlYyBmb3IgYW4gaW5zdGFuY2Ugb2JqZWN0IGJ5IHBhc3NpbmcgYGluc3RhbmNlPVRydWVgLiBUaGUgcmV0dXJuZWQgbW9jaworICAgIHNwZWMgZm9yIGFuIGluc3RhbmNlIG9iamVjdCBieSBwYXNzaW5nIGBgaW5zdGFuY2U9VHJ1ZWBgLiBUaGUgcmV0dXJuZWQgbW9jawogICAgIHdpbGwgb25seSBiZSBjYWxsYWJsZSBpZiBpbnN0YW5jZXMgb2YgdGhlIG1vY2sgYXJlIGNhbGxhYmxlLgogCi0gICAgYGNyZWF0ZV9hdXRvc3BlY2AgYWxzbyB0YWtlcyBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgcGFzc2VkIHRvCisgICAgOmZ1bmM6YGNyZWF0ZV9hdXRvc3BlY2AgYWxzbyB0YWtlcyBhcmJpdHJhcnkga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgcGFzc2VkIHRvCiAgICAgdGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBjcmVhdGVkIG1vY2suCiAKIFNlZSA6cmVmOmBhdXRvLXNwZWNjaW5nYCBmb3IgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSBhdXRvLXNwZWNjaW5nIHdpdGgKLWBjcmVhdGVfYXV0b3NwZWNgIGFuZCB0aGUgYGF1dG9zcGVjYCBhcmd1bWVudCB0byA6ZnVuYzpgcGF0Y2hgLgorOmZ1bmM6YGNyZWF0ZV9hdXRvc3BlY2AgYW5kIHRoZSAqYXV0b3NwZWMqIGFyZ3VtZW50IHRvIDpmdW5jOmBwYXRjaGAuCiAKIAogQU5ZCkBAIC0xODkwLDcgKzE5MTIsNyBAQAogICAgID4+PiBtb2NrKCdmb28nLCBiYXI9b2JqZWN0KCkpCiAgICAgPj4+IG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ2ZvbycsIGJhcj1BTlkpCiAKLWBBTllgIGNhbiBhbHNvIGJlIHVzZWQgaW4gY29tcGFyaXNvbnMgd2l0aCBjYWxsIGxpc3RzIGxpa2UKKzpkYXRhOmBBTllgIGNhbiBhbHNvIGJlIHVzZWQgaW4gY29tcGFyaXNvbnMgd2l0aCBjYWxsIGxpc3RzIGxpa2UKIDphdHRyOmB+TW9jay5tb2NrX2NhbGxzYDoKIAogICAgID4+PiBtID0gTWFnaWNNb2NrKHJldHVybl92YWx1ZT1Ob25lKQpAQCAtMTkwNywxNSArMTkyOSwxNSBAQAogCiAuLiBkYXRhOjogRklMVEVSX0RJUgogCi1gRklMVEVSX0RJUmAgaXMgYSBtb2R1bGUgbGV2ZWwgdmFyaWFibGUgdGhhdCBjb250cm9scyB0aGUgd2F5IG1vY2sgb2JqZWN0cwotcmVzcG9uZCB0byBgZGlyYCAob25seSBmb3IgUHl0aG9uIDIuNiBvciBtb3JlIHJlY2VudCkuIFRoZSBkZWZhdWx0IGlzIGBUcnVlYCwKKzpkYXRhOmBGSUxURVJfRElSYCBpcyBhIG1vZHVsZSBsZXZlbCB2YXJpYWJsZSB0aGF0IGNvbnRyb2xzIHRoZSB3YXkgbW9jayBvYmplY3RzCityZXNwb25kIHRvIDpmdW5jOmBkaXJgIChvbmx5IGZvciBQeXRob24gMi42IG9yIG1vcmUgcmVjZW50KS4gVGhlIGRlZmF1bHQgaXMgYGBUcnVlYGAsCiB3aGljaCB1c2VzIHRoZSBmaWx0ZXJpbmcgZGVzY3JpYmVkIGJlbG93LCB0byBvbmx5IHNob3cgdXNlZnVsIG1lbWJlcnMuIElmIHlvdQogZGlzbGlrZSB0aGlzIGZpbHRlcmluZywgb3IgbmVlZCB0byBzd2l0Y2ggaXQgb2ZmIGZvciBkaWFnbm9zdGljIHB1cnBvc2VzLCB0aGVuCi1zZXQgYG1vY2suRklMVEVSX0RJUiA9IEZhbHNlYC4KK3NldCBgYG1vY2suRklMVEVSX0RJUiA9IEZhbHNlYGAuCiAKLVdpdGggZmlsdGVyaW5nIG9uLCBgZGlyKHNvbWVfbW9jaylgIHNob3dzIG9ubHkgdXNlZnVsIGF0dHJpYnV0ZXMgYW5kIHdpbGwKK1dpdGggZmlsdGVyaW5nIG9uLCBgYGRpcihzb21lX21vY2spYGAgc2hvd3Mgb25seSB1c2VmdWwgYXR0cmlidXRlcyBhbmQgd2lsbAogaW5jbHVkZSBhbnkgZHluYW1pY2FsbHkgY3JlYXRlZCBhdHRyaWJ1dGVzIHRoYXQgd291bGRuJ3Qgbm9ybWFsbHkgYmUgc2hvd24uCi1JZiB0aGUgbW9jayB3YXMgY3JlYXRlZCB3aXRoIGEgYHNwZWNgIChvciBgYXV0b3NwZWNgIG9mIGNvdXJzZSkgdGhlbiBhbGwgdGhlCitJZiB0aGUgbW9jayB3YXMgY3JlYXRlZCB3aXRoIGEgKnNwZWMqIChvciAqYXV0b3NwZWMqIG9mIGNvdXJzZSkgdGhlbiBhbGwgdGhlCiBhdHRyaWJ1dGVzIGZyb20gdGhlIG9yaWdpbmFsIGFyZSBzaG93biwgZXZlbiBpZiB0aGV5IGhhdmVuJ3QgYmVlbiBhY2Nlc3NlZAogeWV0OgogCkBAIC0xOTM0LDExICsxOTU2LDExIEBACiAgICAgICdCYXNlSGFuZGxlcicsCiAgICAgIC4uLgogCi1NYW55IG9mIHRoZSBub3QtdmVyeS11c2VmdWwgKHByaXZhdGUgdG8gYE1vY2tgIHJhdGhlciB0aGFuIHRoZSB0aGluZyBiZWluZworTWFueSBvZiB0aGUgbm90LXZlcnktdXNlZnVsIChwcml2YXRlIHRvIDpjbGFzczpgTW9ja2AgcmF0aGVyIHRoYW4gdGhlIHRoaW5nIGJlaW5nCiBtb2NrZWQpIHVuZGVyc2NvcmUgYW5kIGRvdWJsZSB1bmRlcnNjb3JlIHByZWZpeGVkIGF0dHJpYnV0ZXMgaGF2ZSBiZWVuCi1maWx0ZXJlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyBgZGlyYCBvbiBhIGBNb2NrYC4gSWYgeW91IGRpc2xpa2UgdGhpcworZmlsdGVyZWQgZnJvbSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgOmZ1bmM6YGRpcmAgb24gYSA6Y2xhc3M6YE1vY2tgLiBJZiB5b3UgZGlzbGlrZSB0aGlzCiBiZWhhdmlvdXIgeW91IGNhbiBzd2l0Y2ggaXQgb2ZmIGJ5IHNldHRpbmcgdGhlIG1vZHVsZSBsZXZlbCBzd2l0Y2gKLWBGSUxURVJfRElSYDoKKzpkYXRhOmBGSUxURVJfRElSYDoKIAogICAgID4+PiBmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCiAgICAgPj4+IG1vY2suRklMVEVSX0RJUiA9IEZhbHNlCkBAIC0xOTUyLDkgKzE5NzQsOSBAQAogICAgICAnX19jbGFzc19fJywKICAgICAgLi4uCiAKLUFsdGVybmF0aXZlbHkgeW91IGNhbiBqdXN0IHVzZSBgdmFycyhteV9tb2NrKWAgKGluc3RhbmNlIG1lbWJlcnMpIGFuZAotYGRpcih0eXBlKG15X21vY2spKWAgKHR5cGUgbWVtYmVycykgdG8gYnlwYXNzIHRoZSBmaWx0ZXJpbmcgaXJyZXNwZWN0aXZlIG9mCi1gbW9jay5GSUxURVJfRElSYC4KK0FsdGVybmF0aXZlbHkgeW91IGNhbiBqdXN0IHVzZSBgYHZhcnMobXlfbW9jaylgYCAoaW5zdGFuY2UgbWVtYmVycykgYW5kCitgYGRpcih0eXBlKG15X21vY2spKWBgICh0eXBlIG1lbWJlcnMpIHRvIGJ5cGFzcyB0aGUgZmlsdGVyaW5nIGlycmVzcGVjdGl2ZSBvZgorOmRhdGE6YG1vY2suRklMVEVSX0RJUmAuCiAKIAogbW9ja19vcGVuCkBAIC0xOTYyLDI1ICsxOTg0LDQwIEBACiAKIC4uIGZ1bmN0aW9uOjogbW9ja19vcGVuKG1vY2s9Tm9uZSwgcmVhZF9kYXRhPU5vbmUpCiAKLSAgICBBIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBtb2NrIHRvIHJlcGxhY2UgdGhlIHVzZSBvZiBgb3BlbmAuIEl0IHdvcmtzCi0gICAgZm9yIGBvcGVuYCBjYWxsZWQgZGlyZWN0bHkgb3IgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KKyAgICBBIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBtb2NrIHRvIHJlcGxhY2UgdGhlIHVzZSBvZiA6ZnVuYzpgb3BlbmAuIEl0IHdvcmtzCisgICAgZm9yIDpmdW5jOmBvcGVuYCBjYWxsZWQgZGlyZWN0bHkgb3IgdXNlZCBhcyBhIGNvbnRleHQgbWFuYWdlci4KIAotICAgIFRoZSBgbW9ja2AgYXJndW1lbnQgaXMgdGhlIG1vY2sgb2JqZWN0IHRvIGNvbmZpZ3VyZS4gSWYgYE5vbmVgICh0aGUKLSAgICBkZWZhdWx0KSB0aGVuIGEgYE1hZ2ljTW9ja2Agd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UsIHdpdGggdGhlIEFQSSBsaW1pdGVkCisgICAgVGhlICptb2NrKiBhcmd1bWVudCBpcyB0aGUgbW9jayBvYmplY3QgdG8gY29uZmlndXJlLiBJZiBgYE5vbmVgYCAodGhlCisgICAgZGVmYXVsdCkgdGhlbiBhIDpjbGFzczpgTWFnaWNNb2NrYCB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdSwgd2l0aCB0aGUgQVBJIGxpbWl0ZWQKICAgICB0byBtZXRob2RzIG9yIGF0dHJpYnV0ZXMgYXZhaWxhYmxlIG9uIHN0YW5kYXJkIGZpbGUgaGFuZGxlcy4KIAotICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgYH5pby5JT0Jhc2UucmVhZGAgbWV0aG9kIG9mIHRoZSBmaWxlIGhhbmRsZQotICAgIHRvIHJldHVybi4gIFRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCisgICAgKnJlYWRfZGF0YSogaXMgYSBzdHJpbmcgZm9yIHRoZSA6bWV0aDpgfmlvLklPQmFzZS5yZWFkYCwKKyAgICA6bWV0aDpgfmlvLklPQmFzZS5yZWFkbGluZWAsIGFuZCA6bWV0aDpgfmlvLklPQmFzZS5yZWFkbGluZXNgIG1ldGhvZHMKKyAgICBvZiB0aGUgZmlsZSBoYW5kbGUgdG8gcmV0dXJuLiAgQ2FsbHMgdG8gdGhvc2UgbWV0aG9kcyB3aWxsIHRha2UgZGF0YSBmcm9tCisgICAgKnJlYWRfZGF0YSogdW50aWwgaXQgaXMgZGVwbGV0ZWQuICBUaGUgbW9jayBvZiB0aGVzZSBtZXRob2RzIGlzIHByZXR0eQorICAgIHNpbXBsaXN0aWM6IGV2ZXJ5IHRpbWUgdGhlICptb2NrKiBpcyBjYWxsZWQsIHRoZSAqcmVhZF9kYXRhKiBpcyByZXdvdW5kIHRvCisgICAgdGhlIHN0YXJ0LiAgSWYgeW91IG5lZWQgbW9yZSBjb250cm9sIG92ZXIgdGhlIGRhdGEgdGhhdCB5b3UgYXJlIGZlZWRpbmcgdG8KKyAgICB0aGUgdGVzdGVkIGNvZGUgeW91IHdpbGwgbmVlZCB0byBjdXN0b21pemUgdGhpcyBtb2NrIGZvciB5b3Vyc2VsZi4gIFdoZW4gdGhhdAorICAgIGlzIGluc3VmZmljaWVudCwgb25lIG9mIHRoZSBpbi1tZW1vcnkgZmlsZXN5c3RlbSBwYWNrYWdlcyBvbiBgUHlQSQorICAgIDxodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpPmBfIGNhbiBvZmZlciBhIHJlYWxpc3RpYyBmaWxlc3lzdGVtIGZvciB0ZXN0aW5nLgogCi1Vc2luZyBgb3BlbmAgYXMgYSBjb250ZXh0IG1hbmFnZXIgaXMgYSBncmVhdCB3YXkgdG8gZW5zdXJlIHlvdXIgZmlsZSBoYW5kbGVzCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgOm1ldGg6YH5pby5JT0Jhc2UucmVhZGxpbmVgIGFuZCA6bWV0aDpgfmlvLklPQmFzZS5yZWFkbGluZXNgIHN1cHBvcnQuCisgICAgICBUaGUgbW9jayBvZiA6bWV0aDpgfmlvLklPQmFzZS5yZWFkYCBjaGFuZ2VkIHRvIGNvbnN1bWUgKnJlYWRfZGF0YSogcmF0aGVyCisgICAgICB0aGFuIHJldHVybmluZyBpdCBvbiBlYWNoIGNhbGwuCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjQKKyAgICAgICpyZWFkX2RhdGEqIGlzIG5vdyByZXNldCBvbiBlYWNoIGNhbGwgdG8gdGhlICptb2NrKi4KKworVXNpbmcgOmZ1bmM6YG9wZW5gIGFzIGEgY29udGV4dCBtYW5hZ2VyIGlzIGEgZ3JlYXQgd2F5IHRvIGVuc3VyZSB5b3VyIGZpbGUgaGFuZGxlcwogYXJlIGNsb3NlZCBwcm9wZXJseSBhbmQgaXMgYmVjb21pbmcgY29tbW9uOjoKIAogICAgIHdpdGggb3BlbignL3NvbWUvcGF0aCcsICd3JykgYXMgZjoKICAgICAgICAgZi53cml0ZSgnc29tZXRoaW5nJykKIAotVGhlIGlzc3VlIGlzIHRoYXQgZXZlbiBpZiB5b3UgbW9jayBvdXQgdGhlIGNhbGwgdG8gYG9wZW5gIGl0IGlzIHRoZQotKnJldHVybmVkIG9iamVjdCogdGhhdCBpcyB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIChhbmQgaGFzIGBfX2VudGVyX19gIGFuZAotYF9fZXhpdF9fYCBjYWxsZWQpLgorVGhlIGlzc3VlIGlzIHRoYXQgZXZlbiBpZiB5b3UgbW9jayBvdXQgdGhlIGNhbGwgdG8gOmZ1bmM6YG9wZW5gIGl0IGlzIHRoZQorKnJldHVybmVkIG9iamVjdCogdGhhdCBpcyB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyIChhbmQgaGFzIDptZXRoOmBfX2VudGVyX19gIGFuZAorOm1ldGg6YF9fZXhpdF9fYCBjYWxsZWQpLgogCiBNb2NraW5nIGNvbnRleHQgbWFuYWdlcnMgd2l0aCBhIDpjbGFzczpgTWFnaWNNb2NrYCBpcyBjb21tb24gZW5vdWdoIGFuZCBmaWRkbHkKIGVub3VnaCB0aGF0IGEgaGVscGVyIGZ1bmN0aW9uIGlzIHVzZWZ1bC4KQEAgLTIwMTQsMjEgKzIwNTEsMjEgQEAKIEF1dG9zcGVjY2luZwogfn5+fn5+fn5+fn5+CiAKLUF1dG9zcGVjY2luZyBpcyBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgYHNwZWNgIGZlYXR1cmUgb2YgbW9jay4gSXQgbGltaXRzIHRoZQorQXV0b3NwZWNjaW5nIGlzIGJhc2VkIG9uIHRoZSBleGlzdGluZyA6YXR0cjpgc3BlY2AgZmVhdHVyZSBvZiBtb2NrLiBJdCBsaW1pdHMgdGhlCiBhcGkgb2YgbW9ja3MgdG8gdGhlIGFwaSBvZiBhbiBvcmlnaW5hbCBvYmplY3QgKHRoZSBzcGVjKSwgYnV0IGl0IGlzIHJlY3Vyc2l2ZQogKGltcGxlbWVudGVkIGxhemlseSkgc28gdGhhdCBhdHRyaWJ1dGVzIG9mIG1vY2tzIG9ubHkgaGF2ZSB0aGUgc2FtZSBhcGkgYXMKIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBzcGVjLiBJbiBhZGRpdGlvbiBtb2NrZWQgZnVuY3Rpb25zIC8gbWV0aG9kcyBoYXZlIHRoZQotc2FtZSBjYWxsIHNpZ25hdHVyZSBhcyB0aGUgb3JpZ2luYWwgc28gdGhleSByYWlzZSBhIGBUeXBlRXJyb3JgIGlmIHRoZXkgYXJlCitzYW1lIGNhbGwgc2lnbmF0dXJlIGFzIHRoZSBvcmlnaW5hbCBzbyB0aGV5IHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYCBpZiB0aGV5IGFyZQogY2FsbGVkIGluY29ycmVjdGx5LgogCiBCZWZvcmUgSSBleHBsYWluIGhvdyBhdXRvLXNwZWNjaW5nIHdvcmtzLCBoZXJlJ3Mgd2h5IGl0IGlzIG5lZWRlZC4KIAotYE1vY2tgIGlzIGEgdmVyeSBwb3dlcmZ1bCBhbmQgZmxleGlibGUgb2JqZWN0LCBidXQgaXQgc3VmZmVycyBmcm9tIHR3byBmbGF3cworOmNsYXNzOmBNb2NrYCBpcyBhIHZlcnkgcG93ZXJmdWwgYW5kIGZsZXhpYmxlIG9iamVjdCwgYnV0IGl0IHN1ZmZlcnMgZnJvbSB0d28gZmxhd3MKIHdoZW4gdXNlZCB0byBtb2NrIG91dCBvYmplY3RzIGZyb20gYSBzeXN0ZW0gdW5kZXIgdGVzdC4gT25lIG9mIHRoZXNlIGZsYXdzIGlzCi1zcGVjaWZpYyB0byB0aGUgYE1vY2tgIGFwaSBhbmQgdGhlIG90aGVyIGlzIGEgbW9yZSBnZW5lcmFsIHByb2JsZW0gd2l0aCB1c2luZworc3BlY2lmaWMgdG8gdGhlIDpjbGFzczpgTW9ja2AgYXBpIGFuZCB0aGUgb3RoZXIgaXMgYSBtb3JlIGdlbmVyYWwgcHJvYmxlbSB3aXRoIHVzaW5nCiBtb2NrIG9iamVjdHMuCiAKLUZpcnN0IHRoZSBwcm9ibGVtIHNwZWNpZmljIHRvIGBNb2NrYC4gYE1vY2tgIGhhcyB0d28gYXNzZXJ0IG1ldGhvZHMgdGhhdCBhcmUKK0ZpcnN0IHRoZSBwcm9ibGVtIHNwZWNpZmljIHRvIDpjbGFzczpgTW9ja2AuIDpjbGFzczpgTW9ja2AgaGFzIHR3byBhc3NlcnQgbWV0aG9kcyB0aGF0IGFyZQogZXh0cmVtZWx5IGhhbmR5OiA6bWV0aDpgfk1vY2suYXNzZXJ0X2NhbGxlZF93aXRoYCBhbmQKIDptZXRoOmB+TW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aGAuCiAKQEAgLTIwNjMsOCArMjEwMCw4IEBACiBkb24ndCB0ZXN0IGhvdyB5b3VyIHVuaXRzIGFyZSAid2lyZWQgdG9nZXRoZXIiIHRoZXJlIGlzIHN0aWxsIGxvdHMgb2Ygcm9vbQogZm9yIGJ1Z3MgdGhhdCB0ZXN0cyBtaWdodCBoYXZlIGNhdWdodC4KIAotYG1vY2tgIGFscmVhZHkgcHJvdmlkZXMgYSBmZWF0dXJlIHRvIGhlbHAgd2l0aCB0aGlzLCBjYWxsZWQgc3BlY2NpbmcuIElmIHlvdQotdXNlIGEgY2xhc3Mgb3IgaW5zdGFuY2UgYXMgdGhlIGBzcGVjYCBmb3IgYSBtb2NrIHRoZW4geW91IGNhbiBvbmx5IGFjY2VzcworOm1vZDpgbW9ja2AgYWxyZWFkeSBwcm92aWRlcyBhIGZlYXR1cmUgdG8gaGVscCB3aXRoIHRoaXMsIGNhbGxlZCBzcGVjY2luZy4gSWYgeW91Cit1c2UgYSBjbGFzcyBvciBpbnN0YW5jZSBhcyB0aGUgOmF0dHI6YHNwZWNgIGZvciBhIG1vY2sgdGhlbiB5b3UgY2FuIG9ubHkgYWNjZXNzCiBhdHRyaWJ1dGVzIG9uIHRoZSBtb2NrIHRoYXQgZXhpc3Qgb24gdGhlIHJlYWwgY2xhc3M6CiAKICAgICA+Pj4gZnJvbSB1cmxsaWIgaW1wb3J0IHJlcXVlc3QKQEAgLTIwODMsOSArMjEyMCw5IEBACiAgICAgPG1vY2suTW9jayBvYmplY3QgYXQgMHguLi4+CiAgICAgPj4+IG1vY2suaGFzX2RhdGEuYXNzcmV0X2NhbGxlZF93aXRoKCkKIAotQXV0by1zcGVjY2luZyBzb2x2ZXMgdGhpcyBwcm9ibGVtLiBZb3UgY2FuIGVpdGhlciBwYXNzIGBhdXRvc3BlYz1UcnVlYCB0bwotYHBhdGNoYCAvIGBwYXRjaC5vYmplY3RgIG9yIHVzZSB0aGUgYGNyZWF0ZV9hdXRvc3BlY2AgZnVuY3Rpb24gdG8gY3JlYXRlIGEKLW1vY2sgd2l0aCBhIHNwZWMuIElmIHlvdSB1c2UgdGhlIGBhdXRvc3BlYz1UcnVlYCBhcmd1bWVudCB0byBgcGF0Y2hgIHRoZW4gdGhlCitBdXRvLXNwZWNjaW5nIHNvbHZlcyB0aGlzIHByb2JsZW0uIFlvdSBjYW4gZWl0aGVyIHBhc3MgYGBhdXRvc3BlYz1UcnVlYGAgdG8KKzpmdW5jOmBwYXRjaGAgLyA6ZnVuYzpgcGF0Y2gub2JqZWN0YCBvciB1c2UgdGhlIDpmdW5jOmBjcmVhdGVfYXV0b3NwZWNgIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhCittb2NrIHdpdGggYSBzcGVjLiBJZiB5b3UgdXNlIHRoZSBgYGF1dG9zcGVjPVRydWVgYCBhcmd1bWVudCB0byA6ZnVuYzpgcGF0Y2hgIHRoZW4gdGhlCiBvYmplY3QgdGhhdCBpcyBiZWluZyByZXBsYWNlZCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNwZWMgb2JqZWN0LiBCZWNhdXNlIHRoZQogc3BlY2NpbmcgaXMgZG9uZSAibGF6aWx5IiAodGhlIHNwZWMgaXMgY3JlYXRlZCBhcyBhdHRyaWJ1dGVzIG9uIHRoZSBtb2NrIGFyZQogYWNjZXNzZWQpIHlvdSBjYW4gdXNlIGl0IHdpdGggdmVyeSBjb21wbGV4IG9yIGRlZXBseSBuZXN0ZWQgb2JqZWN0cyAobGlrZQpAQCAtMjEwMiw4ICsyMTM5LDggQEAKICAgICA+Pj4gbW9ja19yZXF1ZXN0LlJlcXVlc3QKICAgICA8TWFnaWNNb2NrIG5hbWU9J3JlcXVlc3QuUmVxdWVzdCcgc3BlYz0nUmVxdWVzdCcgaWQ9Jy4uLic+CiAKLVlvdSBjYW4gc2VlIHRoYXQgYHJlcXVlc3QuUmVxdWVzdGAgaGFzIGEgc3BlYy4gYHJlcXVlc3QuUmVxdWVzdGAgdGFrZXMgdHdvCi1hcmd1bWVudHMgaW4gdGhlIGNvbnN0cnVjdG9yIChvbmUgb2Ygd2hpY2ggaXMgYHNlbGZgKS4gSGVyZSdzIHdoYXQgaGFwcGVucyBpZgorWW91IGNhbiBzZWUgdGhhdCA6Y2xhc3M6YHJlcXVlc3QuUmVxdWVzdGAgaGFzIGEgc3BlYy4gOmNsYXNzOmByZXF1ZXN0LlJlcXVlc3RgIHRha2VzIHR3bworYXJndW1lbnRzIGluIHRoZSBjb25zdHJ1Y3RvciAob25lIG9mIHdoaWNoIGlzICpzZWxmKikuIEhlcmUncyB3aGF0IGhhcHBlbnMgaWYKIHdlIHRyeSB0byBjYWxsIGl0IGluY29ycmVjdGx5OgogCiAgICAgPj4+IHJlcSA9IHJlcXVlc3QuUmVxdWVzdCgpCkBAIC0yMTE4LDggKzIxNTUsOCBAQAogICAgID4+PiByZXEKICAgICA8Tm9uQ2FsbGFibGVNYWdpY01vY2sgbmFtZT0ncmVxdWVzdC5SZXF1ZXN0KCknIHNwZWM9J1JlcXVlc3QnIGlkPScuLi4nPgogCi1gUmVxdWVzdGAgb2JqZWN0cyBhcmUgbm90IGNhbGxhYmxlLCBzbyB0aGUgcmV0dXJuIHZhbHVlIG9mIGluc3RhbnRpYXRpbmcgb3VyCi1tb2NrZWQgb3V0IGByZXF1ZXN0LlJlcXVlc3RgIGlzIGEgbm9uLWNhbGxhYmxlIG1vY2suIFdpdGggdGhlIHNwZWMgaW4gcGxhY2UKKzpjbGFzczpgUmVxdWVzdGAgb2JqZWN0cyBhcmUgbm90IGNhbGxhYmxlLCBzbyB0aGUgcmV0dXJuIHZhbHVlIG9mIGluc3RhbnRpYXRpbmcgb3VyCittb2NrZWQgb3V0IDpjbGFzczpgcmVxdWVzdC5SZXF1ZXN0YCBpcyBhIG5vbi1jYWxsYWJsZSBtb2NrLiBXaXRoIHRoZSBzcGVjIGluIHBsYWNlCiBhbnkgdHlwb3MgaW4gb3VyIGFzc2VydHMgd2lsbCByYWlzZSB0aGUgY29ycmVjdCBlcnJvcjoKIAogICAgID4+PiByZXEuYWRkX2hlYWRlcignc3BhbScsICdlZ2dzJykKQEAgLTIxMzAsMTEgKzIxNjcsMTEgQEAKICAgICBBdHRyaWJ1dGVFcnJvcjogTW9jayBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnYXNzcmV0X2NhbGxlZF93aXRoJwogICAgID4+PiByZXEuYWRkX2hlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NwYW0nLCAnZWdncycpCiAKLUluIG1hbnkgY2FzZXMgeW91IHdpbGwganVzdCBiZSBhYmxlIHRvIGFkZCBgYXV0b3NwZWM9VHJ1ZWAgdG8geW91ciBleGlzdGluZwotYHBhdGNoYCBjYWxscyBhbmQgdGhlbiBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBidWdzIGR1ZSB0byB0eXBvcyBhbmQgYXBpCitJbiBtYW55IGNhc2VzIHlvdSB3aWxsIGp1c3QgYmUgYWJsZSB0byBhZGQgYGBhdXRvc3BlYz1UcnVlYGAgdG8geW91ciBleGlzdGluZworOmZ1bmM6YHBhdGNoYCBjYWxscyBhbmQgdGhlbiBiZSBwcm90ZWN0ZWQgYWdhaW5zdCBidWdzIGR1ZSB0byB0eXBvcyBhbmQgYXBpCiBjaGFuZ2VzLgogCi1BcyB3ZWxsIGFzIHVzaW5nIGBhdXRvc3BlY2AgdGhyb3VnaCBgcGF0Y2hgIHRoZXJlIGlzIGEKK0FzIHdlbGwgYXMgdXNpbmcgKmF1dG9zcGVjKiB0aHJvdWdoIDpmdW5jOmBwYXRjaGAgdGhlcmUgaXMgYQogOmZ1bmM6YGNyZWF0ZV9hdXRvc3BlY2AgZm9yIGNyZWF0aW5nIGF1dG9zcGVjY2VkIG1vY2tzIGRpcmVjdGx5OgogCiAgICAgPj4+IGZyb20gdXJsbGliIGltcG9ydCByZXF1ZXN0CkBAIC0yMTUyLDggKzIxODksOCBAQAogb2JqZWN0cyBzbyB0aGF0IGludHJvc3BlY3Rpb24gaXMgc2FmZSBbI11fLgogCiBBIG1vcmUgc2VyaW91cyBwcm9ibGVtIGlzIHRoYXQgaXQgaXMgY29tbW9uIGZvciBpbnN0YW5jZSBhdHRyaWJ1dGVzIHRvIGJlCi1jcmVhdGVkIGluIHRoZSBgX19pbml0X19gIG1ldGhvZCBhbmQgbm90IHRvIGV4aXN0IG9uIHRoZSBjbGFzcyBhdCBhbGwuCi1gYXV0b3NwZWNgIGNhbid0IGtub3cgYWJvdXQgYW55IGR5bmFtaWNhbGx5IGNyZWF0ZWQgYXR0cmlidXRlcyBhbmQgcmVzdHJpY3RzCitjcmVhdGVkIGluIHRoZSA6bWV0aDpgX19pbml0X19gIG1ldGhvZCBhbmQgbm90IHRvIGV4aXN0IG9uIHRoZSBjbGFzcyBhdCBhbGwuCisqYXV0b3NwZWMqIGNhbid0IGtub3cgYWJvdXQgYW55IGR5bmFtaWNhbGx5IGNyZWF0ZWQgYXR0cmlidXRlcyBhbmQgcmVzdHJpY3RzCiB0aGUgYXBpIHRvIHZpc2libGUgYXR0cmlidXRlcy4KIAogICAgID4+PiBjbGFzcyBTb21ldGhpbmc6CkBAIC0yMTcwLDcgKzIyMDcsNyBAQAogCiBUaGVyZSBhcmUgYSBmZXcgZGlmZmVyZW50IHdheXMgb2YgcmVzb2x2aW5nIHRoaXMgcHJvYmxlbS4gVGhlIGVhc2llc3QsIGJ1dAogbm90IG5lY2Vzc2FyaWx5IHRoZSBsZWFzdCBhbm5veWluZywgd2F5IGlzIHRvIHNpbXBseSBzZXQgdGhlIHJlcXVpcmVkCi1hdHRyaWJ1dGVzIG9uIHRoZSBtb2NrIGFmdGVyIGNyZWF0aW9uLiBKdXN0IGJlY2F1c2UgYGF1dG9zcGVjYCBkb2Vzbid0IGFsbG93CithdHRyaWJ1dGVzIG9uIHRoZSBtb2NrIGFmdGVyIGNyZWF0aW9uLiBKdXN0IGJlY2F1c2UgKmF1dG9zcGVjKiBkb2Vzbid0IGFsbG93CiB5b3UgdG8gZmV0Y2ggYXR0cmlidXRlcyB0aGF0IGRvbid0IGV4aXN0IG9uIHRoZSBzcGVjIGl0IGRvZXNuJ3QgcHJldmVudCB5b3UKIHNldHRpbmcgdGhlbToKIApAQCAtMjE3OSw3ICsyMjE2LDcgQEAKICAgICAuLi4gICB0aGluZy5hID0gMzMKICAgICAuLi4KIAotVGhlcmUgaXMgYSBtb3JlIGFnZ3Jlc3NpdmUgdmVyc2lvbiBvZiBib3RoIGBzcGVjYCBhbmQgYGF1dG9zcGVjYCB0aGF0ICpkb2VzKgorVGhlcmUgaXMgYSBtb3JlIGFnZ3Jlc3NpdmUgdmVyc2lvbiBvZiBib3RoICpzcGVjKiBhbmQgKmF1dG9zcGVjKiB0aGF0ICpkb2VzKgogcHJldmVudCB5b3Ugc2V0dGluZyBub24tZXhpc3RlbnQgYXR0cmlidXRlcy4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IHdhbnQgdG8KIGVuc3VyZSB5b3VyIGNvZGUgb25seSAqc2V0cyogdmFsaWQgYXR0cmlidXRlcyB0b28sIGJ1dCBvYnZpb3VzbHkgaXQgcHJldmVudHMKIHRoaXMgcGFydGljdWxhciBzY2VuYXJpbzoKQEAgLTIxOTMsOCArMjIzMCw4IEBACiAgICAgQXR0cmlidXRlRXJyb3I6IE1vY2sgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgJ2EnCiAKIFByb2JhYmx5IHRoZSBiZXN0IHdheSBvZiBzb2x2aW5nIHRoZSBwcm9ibGVtIGlzIHRvIGFkZCBjbGFzcyBhdHRyaWJ1dGVzIGFzCi1kZWZhdWx0IHZhbHVlcyBmb3IgaW5zdGFuY2UgbWVtYmVycyBpbml0aWFsaXNlZCBpbiBgX19pbml0X19gLiBOb3RlIHRoYXQgaWYKLXlvdSBhcmUgb25seSBzZXR0aW5nIGRlZmF1bHQgYXR0cmlidXRlcyBpbiBgX19pbml0X19gIHRoZW4gcHJvdmlkaW5nIHRoZW0gdmlhCitkZWZhdWx0IHZhbHVlcyBmb3IgaW5zdGFuY2UgbWVtYmVycyBpbml0aWFsaXNlZCBpbiA6bWV0aDpgX19pbml0X19gLiBOb3RlIHRoYXQgaWYKK3lvdSBhcmUgb25seSBzZXR0aW5nIGRlZmF1bHQgYXR0cmlidXRlcyBpbiA6bWV0aDpgX19pbml0X19gIHRoZW4gcHJvdmlkaW5nIHRoZW0gdmlhCiBjbGFzcyBhdHRyaWJ1dGVzIChzaGFyZWQgYmV0d2VlbiBpbnN0YW5jZXMgb2YgY291cnNlKSBpcyBmYXN0ZXIgdG9vLiBlLmcuCiAKIC4uIGNvZGUtYmxvY2s6OiBweXRob24KQEAgLTIyMDMsMTIgKzIyNDAsMTIgQEAKICAgICAgICAgYSA9IDMzCiAKIFRoaXMgYnJpbmdzIHVwIGFub3RoZXIgaXNzdWUuIEl0IGlzIHJlbGF0aXZlbHkgY29tbW9uIHRvIHByb3ZpZGUgYSBkZWZhdWx0Ci12YWx1ZSBvZiBgTm9uZWAgZm9yIG1lbWJlcnMgdGhhdCB3aWxsIGxhdGVyIGJlIGFuIG9iamVjdCBvZiBhIGRpZmZlcmVudCB0eXBlLgotYE5vbmVgIHdvdWxkIGJlIHVzZWxlc3MgYXMgYSBzcGVjIGJlY2F1c2UgaXQgd291bGRuJ3QgbGV0IHlvdSBhY2Nlc3MgKmFueSoKLWF0dHJpYnV0ZXMgb3IgbWV0aG9kcyBvbiBpdC4gQXMgYE5vbmVgIGlzICpuZXZlciogZ29pbmcgdG8gYmUgdXNlZnVsIGFzIGEKK3ZhbHVlIG9mIGBgTm9uZWBgIGZvciBtZW1iZXJzIHRoYXQgd2lsbCBsYXRlciBiZSBhbiBvYmplY3Qgb2YgYSBkaWZmZXJlbnQgdHlwZS4KK2BgTm9uZWBgIHdvdWxkIGJlIHVzZWxlc3MgYXMgYSBzcGVjIGJlY2F1c2UgaXQgd291bGRuJ3QgbGV0IHlvdSBhY2Nlc3MgKmFueSoKK2F0dHJpYnV0ZXMgb3IgbWV0aG9kcyBvbiBpdC4gQXMgYGBOb25lYGAgaXMgKm5ldmVyKiBnb2luZyB0byBiZSB1c2VmdWwgYXMgYQogc3BlYywgYW5kIHByb2JhYmx5IGluZGljYXRlcyBhIG1lbWJlciB0aGF0IHdpbGwgbm9ybWFsbHkgb2Ygc29tZSBvdGhlciB0eXBlLAotYGF1dG9zcGVjYCBkb2Vzbid0IHVzZSBhIHNwZWMgZm9yIG1lbWJlcnMgdGhhdCBhcmUgc2V0IHRvIGBOb25lYC4gVGhlc2Ugd2lsbAotanVzdCBiZSBvcmRpbmFyeSBtb2NrcyAod2VsbCAtIGBNYWdpY01vY2tzYCk6CithdXRvc3BlYyBkb2Vzbid0IHVzZSBhIHNwZWMgZm9yIG1lbWJlcnMgdGhhdCBhcmUgc2V0IHRvIGBgTm9uZWBgLiBUaGVzZSB3aWxsCitqdXN0IGJlIG9yZGluYXJ5IG1vY2tzICh3ZWxsIC0gTWFnaWNNb2Nrcyk6CiAKICAgICA+Pj4gY2xhc3MgU29tZXRoaW5nOgogICAgIC4uLiAgICAgbWVtYmVyID0gTm9uZQpAQCAtMjIyMiw4ICsyMjU5LDggQEAKIHNwZWMgcmF0aGVyIHRoYW4gdGhlIGNsYXNzLiBUaGUgb3RoZXIgaXMgdG8gY3JlYXRlIGEgc3ViY2xhc3Mgb2YgdGhlCiBwcm9kdWN0aW9uIGNsYXNzIGFuZCBhZGQgdGhlIGRlZmF1bHRzIHRvIHRoZSBzdWJjbGFzcyB3aXRob3V0IGFmZmVjdGluZyB0aGUKIHByb2R1Y3Rpb24gY2xhc3MuIEJvdGggb2YgdGhlc2UgcmVxdWlyZSB5b3UgdG8gdXNlIGFuIGFsdGVybmF0aXZlIG9iamVjdCBhcwotdGhlIHNwZWMuIFRoYW5rZnVsbHkgYHBhdGNoYCBzdXBwb3J0cyB0aGlzIC0geW91IGNhbiBzaW1wbHkgcGFzcyB0aGUKLWFsdGVybmF0aXZlIG9iamVjdCBhcyB0aGUgYGF1dG9zcGVjYCBhcmd1bWVudDoKK3RoZSBzcGVjLiBUaGFua2Z1bGx5IDpmdW5jOmBwYXRjaGAgc3VwcG9ydHMgdGhpcyAtIHlvdSBjYW4gc2ltcGx5IHBhc3MgdGhlCithbHRlcm5hdGl2ZSBvYmplY3QgYXMgdGhlICphdXRvc3BlYyogYXJndW1lbnQ6CiAKICAgICA+Pj4gY2xhc3MgU29tZXRoaW5nOgogICAgIC4uLiAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTIyNDAsNSArMjI3Nyw1IEBACiAKIC4uIFsjXSBUaGlzIG9ubHkgYXBwbGllcyB0byBjbGFzc2VzIG9yIGFscmVhZHkgaW5zdGFudGlhdGVkIG9iamVjdHMuIENhbGxpbmcKICAgIGEgbW9ja2VkIGNsYXNzIHRvIGNyZWF0ZSBhIG1vY2sgaW5zdGFuY2UgKmRvZXMgbm90KiBjcmVhdGUgYSByZWFsIGluc3RhbmNlLgotICAgSXQgaXMgb25seSBhdHRyaWJ1dGUgbG9va3VwcyAtIGFsb25nIHdpdGggY2FsbHMgdG8gYGRpcmAgLSB0aGF0IGFyZSBkb25lLgorICAgSXQgaXMgb25seSBhdHRyaWJ1dGUgbG9va3VwcyAtIGFsb25nIHdpdGggY2FsbHMgdG8gOmZ1bmM6YGRpcmAgLSB0aGF0IGFyZSBkb25lLgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QgYi9Eb2MvbGlicmFyeS91bml0dGVzdC5yc3QKaW5kZXggZmRjOTQwOS4uYTg5NmZjMSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdW5pdHRlc3QucnN0CisrKyBiL0RvYy9saWJyYXJ5L3VuaXR0ZXN0LnJzdApAQCAtNDcsMTUgKzQ3LDE1IEBACiAgICBNb2R1bGUgOm1vZDpgZG9jdGVzdGAKICAgICAgIEFub3RoZXIgdGVzdC1zdXBwb3J0IG1vZHVsZSB3aXRoIGEgdmVyeSBkaWZmZXJlbnQgZmxhdm9yLgogCi0gICBgU2ltcGxlIFNtYWxsdGFsayBUZXN0aW5nOiBXaXRoIFBhdHRlcm5zIDxodHRwOi8vd3d3LlhQcm9ncmFtbWluZy5jb20vdGVzdGZyYW0uaHRtPmBfCisgICBgU2ltcGxlIFNtYWxsdGFsayBUZXN0aW5nOiBXaXRoIFBhdHRlcm5zIDxodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNTAzMTUwNzM4MTcvaHR0cDovL3d3dy54cHJvZ3JhbW1pbmcuY29tL3Rlc3RmcmFtLmh0bT5gXwogICAgICAgS2VudCBCZWNrJ3Mgb3JpZ2luYWwgcGFwZXIgb24gdGVzdGluZyBmcmFtZXdvcmtzIHVzaW5nIHRoZSBwYXR0ZXJuIHNoYXJlZAogICAgICAgYnkgOm1vZDpgdW5pdHRlc3RgLgogCi0gICBgTm9zZSA8aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3B5dGhvbi1ub3NlLz5gXyBhbmQgYHB5LnRlc3QgPGh0dHA6Ly9weXRlc3Qub3JnPmBfCisgICBgTm9zZSA8aHR0cHM6Ly9ub3NlLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvPmBfIGFuZCBgcHkudGVzdCA8aHR0cDovL3B5dGVzdC5vcmc+YF8KICAgICAgIFRoaXJkLXBhcnR5IHVuaXR0ZXN0IGZyYW1ld29ya3Mgd2l0aCBhIGxpZ2h0ZXItd2VpZ2h0IHN5bnRheCBmb3Igd3JpdGluZwogICAgICAgdGVzdHMuICBGb3IgZXhhbXBsZSwgYGBhc3NlcnQgZnVuYygxMCkgPT0gNDJgYC4KIAotICAgYFRoZSBQeXRob24gVGVzdGluZyBUb29scyBUYXhvbm9teSA8aHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL1B5dGhvblRlc3RpbmdUb29sc1RheG9ub215PmBfCisgICBgVGhlIFB5dGhvbiBUZXN0aW5nIFRvb2xzIFRheG9ub215IDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL1B5dGhvblRlc3RpbmdUb29sc1RheG9ub215PmBfCiAgICAgICBBbiBleHRlbnNpdmUgbGlzdCBvZiBQeXRob24gdGVzdGluZyB0b29scyBpbmNsdWRpbmcgZnVuY3Rpb25hbCB0ZXN0aW5nCiAgICAgICBmcmFtZXdvcmtzIGFuZCBtb2NrIG9iamVjdCBsaWJyYXJpZXMuCiAKQEAgLTY3LDcgKzY3LDcgQEAKICAgIGEgR1VJIHRvb2wgZm9yIHRlc3QgZGlzY292ZXJ5IGFuZCBleGVjdXRpb24uICBUaGlzIGlzIGludGVuZGVkIGxhcmdlbHkgZm9yIGVhc2Ugb2YgdXNlCiAgICBmb3IgdGhvc2UgbmV3IHRvIHVuaXQgdGVzdGluZy4gIEZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50cyBpdCBpcwogICAgcmVjb21tZW5kZWQgdGhhdCB0ZXN0cyBiZSBkcml2ZW4gYnkgYSBjb250aW51b3VzIGludGVncmF0aW9uIHN5c3RlbSBzdWNoIGFzCi0gICBgQnVpbGRib3QgPGh0dHA6Ly9idWlsZGJvdC5uZXQvdHJhYz5gXywgYEplbmtpbnMgPGh0dHA6Ly9qZW5raW5zLWNpLm9yZz5gXworICAgYEJ1aWxkYm90IDxodHRwOi8vYnVpbGRib3QubmV0Lz5gXywgYEplbmtpbnMgPGh0dHA6Ly9qZW5raW5zLWNpLm9yZy8+YF8KICAgIG9yICBgSHVkc29uIDxodHRwOi8vaHVkc29uLWNpLm9yZy8+YF8uCiAKIApAQCAtODAsMzcgKzgwLDI5IEBACiBydW5uaW5nIHRlc3RzLiAgVGhpcyBzZWN0aW9uIGRlbW9uc3RyYXRlcyB0aGF0IGEgc21hbGwgc3Vic2V0IG9mIHRoZSB0b29scwogc3VmZmljZSB0byBtZWV0IHRoZSBuZWVkcyBvZiBtb3N0IHVzZXJzLgogCi1IZXJlIGlzIGEgc2hvcnQgc2NyaXB0IHRvIHRlc3QgdGhyZWUgZnVuY3Rpb25zIGZyb20gdGhlIDptb2Q6YHJhbmRvbWAgbW9kdWxlOjoKK0hlcmUgaXMgYSBzaG9ydCBzY3JpcHQgdG8gdGVzdCB0aHJlZSBzdHJpbmcgbWV0aG9kczo6CiAKLSAgIGltcG9ydCByYW5kb20KLSAgIGltcG9ydCB1bml0dGVzdAorICBpbXBvcnQgdW5pdHRlc3QKIAotICAgY2xhc3MgVGVzdFNlcXVlbmNlRnVuY3Rpb25zKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgY2xhc3MgVGVzdFN0cmluZ01ldGhvZHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICBzZWxmLnNlcSA9IGxpc3QocmFuZ2UoMTApKQorICAgIGRlZiB0ZXN0X3VwcGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdmb28nLnVwcGVyKCksICdGT08nKQogCi0gICAgICAgZGVmIHRlc3Rfc2h1ZmZsZShzZWxmKToKLSAgICAgICAgICAgIyBtYWtlIHN1cmUgdGhlIHNodWZmbGVkIHNlcXVlbmNlIGRvZXMgbm90IGxvc2UgYW55IGVsZW1lbnRzCi0gICAgICAgICAgIHJhbmRvbS5zaHVmZmxlKHNlbGYuc2VxKQotICAgICAgICAgICBzZWxmLnNlcS5zb3J0KCkKLSAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNlcSwgbGlzdChyYW5nZSgxMCkpKQorICAgIGRlZiB0ZXN0X2lzdXBwZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnRk9PJy5pc3VwcGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoJ0ZvbycuaXN1cHBlcigpKQogCi0gICAgICAgICAgICMgc2hvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbiBmb3IgYW4gaW1tdXRhYmxlIHNlcXVlbmNlCi0gICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmFuZG9tLnNodWZmbGUsICgxLDIsMykpCisgICAgZGVmIHRlc3Rfc3BsaXQoc2VsZik6CisgICAgICAgIHMgPSAnaGVsbG8gd29ybGQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zcGxpdCgpLCBbJ2hlbGxvJywgJ3dvcmxkJ10pCisgICAgICAgICMgY2hlY2sgdGhhdCBzLnNwbGl0IGZhaWxzIHdoZW4gdGhlIHNlcGFyYXRvciBpcyBub3QgYSBzdHJpbmcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcy5zcGxpdCgyKQogCi0gICAgICAgZGVmIHRlc3RfY2hvaWNlKHNlbGYpOgotICAgICAgICAgICBlbGVtZW50ID0gcmFuZG9tLmNob2ljZShzZWxmLnNlcSkKLSAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVsZW1lbnQgaW4gc2VsZi5zZXEpCisgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICB1bml0dGVzdC5tYWluKCkKIAotICAgICAgIGRlZiB0ZXN0X3NhbXBsZShzZWxmKToKLSAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgIHJhbmRvbS5zYW1wbGUoc2VsZi5zZXEsIDIwKQotICAgICAgICAgICBmb3IgZWxlbWVudCBpbiByYW5kb20uc2FtcGxlKHNlbGYuc2VxLCA1KToKLSAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbGVtZW50IGluIHNlbGYuc2VxKQotCi0gICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICAgIHVuaXR0ZXN0Lm1haW4oKQogCiBBIHRlc3RjYXNlIGlzIGNyZWF0ZWQgYnkgc3ViY2xhc3NpbmcgOmNsYXNzOmB1bml0dGVzdC5UZXN0Q2FzZWAuICBUaGUgdGhyZWUKIGluZGl2aWR1YWwgdGVzdHMgYXJlIGRlZmluZWQgd2l0aCBtZXRob2RzIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggdGhlIGxldHRlcnMKQEAgLTExOCwxNiArMTEwLDE1IEBACiByZXByZXNlbnQgdGVzdHMuCiAKIFRoZSBjcnV4IG9mIGVhY2ggdGVzdCBpcyBhIGNhbGwgdG8gOm1ldGg6YH5UZXN0Q2FzZS5hc3NlcnRFcXVhbGAgdG8gY2hlY2sgZm9yIGFuCi1leHBlY3RlZCByZXN1bHQ7IDptZXRoOmB+VGVzdENhc2UuYXNzZXJ0VHJ1ZWAgdG8gdmVyaWZ5IGEgY29uZGl0aW9uOyBvcgotOm1ldGg6YH5UZXN0Q2FzZS5hc3NlcnRSYWlzZXNgIHRvIHZlcmlmeSB0aGF0IGFuIGV4cGVjdGVkIGV4Y2VwdGlvbiBnZXRzIHJhaXNlZC4KLVRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgaW5zdGVhZCBvZiB0aGUgOmtleXdvcmQ6YGFzc2VydGAgc3RhdGVtZW50IHNvIHRoZSB0ZXN0Ci1ydW5uZXIgY2FuIGFjY3VtdWxhdGUgYWxsIHRlc3QgcmVzdWx0cyBhbmQgcHJvZHVjZSBhIHJlcG9ydC4KK2V4cGVjdGVkIHJlc3VsdDsgOm1ldGg6YH5UZXN0Q2FzZS5hc3NlcnRUcnVlYCBvciA6bWV0aDpgflRlc3RDYXNlLmFzc2VydEZhbHNlYAordG8gdmVyaWZ5IGEgY29uZGl0aW9uOyBvciA6bWV0aDpgflRlc3RDYXNlLmFzc2VydFJhaXNlc2AgdG8gdmVyaWZ5IHRoYXQgYQorc3BlY2lmaWMgZXhjZXB0aW9uIGdldHMgcmFpc2VkLiAgVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBpbnN0ZWFkIG9mIHRoZQorOmtleXdvcmQ6YGFzc2VydGAgc3RhdGVtZW50IHNvIHRoZSB0ZXN0IHJ1bm5lciBjYW4gYWNjdW11bGF0ZSBhbGwgdGVzdCByZXN1bHRzCithbmQgcHJvZHVjZSBhIHJlcG9ydC4KIAotV2hlbiBhIDptZXRoOmB+VGVzdENhc2Uuc2V0VXBgIG1ldGhvZCBpcyBkZWZpbmVkLCB0aGUgdGVzdCBydW5uZXIgd2lsbCBydW4gdGhhdAotbWV0aG9kIHByaW9yIHRvIGVhY2ggdGVzdC4gIExpa2V3aXNlLCBpZiBhIDptZXRoOmB+VGVzdENhc2UudGVhckRvd25gIG1ldGhvZCBpcwotZGVmaW5lZCwgdGhlIHRlc3QgcnVubmVyIHdpbGwgaW52b2tlIHRoYXQgbWV0aG9kIGFmdGVyIGVhY2ggdGVzdC4gIEluIHRoZQotZXhhbXBsZSwgOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcGAgd2FzIHVzZWQgdG8gY3JlYXRlIGEgZnJlc2ggc2VxdWVuY2UgZm9yIGVhY2gKLXRlc3QuCitUaGUgOm1ldGg6YH5UZXN0Q2FzZS5zZXRVcGAgYW5kIDptZXRoOmB+VGVzdENhc2UudGVhckRvd25gIG1ldGhvZHMgYWxsb3cgeW91Cit0byBkZWZpbmUgaW5zdHJ1Y3Rpb25zIHRoYXQgd2lsbCBiZSBleGVjdXRlZCBiZWZvcmUgYW5kIGFmdGVyIGVhY2ggdGVzdCBtZXRob2QuCitUaGV5IGFyZSBjb3ZlcmVkIGluIG1vcmUgZGV0YWlsIGluIHRoZSBzZWN0aW9uIDpyZWY6YG9yZ2FuaXppbmctdGVzdHNgLgogCiBUaGUgZmluYWwgYmxvY2sgc2hvd3MgYSBzaW1wbGUgd2F5IHRvIHJ1biB0aGUgdGVzdHMuIDpmdW5jOmB1bml0dGVzdC5tYWluYAogcHJvdmlkZXMgYSBjb21tYW5kLWxpbmUgaW50ZXJmYWNlIHRvIHRoZSB0ZXN0IHNjcmlwdC4gIFdoZW4gcnVuIGZyb20gdGhlIGNvbW1hbmQKQEAgLTE0MiwxMiArMTMzLDEyIEBACiBQYXNzaW5nIHRoZSBgYC12YGAgb3B0aW9uIHRvIHlvdXIgdGVzdCBzY3JpcHQgd2lsbCBpbnN0cnVjdCA6ZnVuYzpgdW5pdHRlc3QubWFpbmAKIHRvIGVuYWJsZSBhIGhpZ2hlciBsZXZlbCBvZiB2ZXJib3NpdHksIGFuZCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgb3V0cHV0OjoKIAotICAgdGVzdF9jaG9pY2UgKF9fbWFpbl9fLlRlc3RTZXF1ZW5jZUZ1bmN0aW9ucykgLi4uIG9rCi0gICB0ZXN0X3NhbXBsZSAoX19tYWluX18uVGVzdFNlcXVlbmNlRnVuY3Rpb25zKSAuLi4gb2sKLSAgIHRlc3Rfc2h1ZmZsZSAoX19tYWluX18uVGVzdFNlcXVlbmNlRnVuY3Rpb25zKSAuLi4gb2sKKyAgIHRlc3RfaXN1cHBlciAoX19tYWluX18uVGVzdFN0cmluZ01ldGhvZHMpIC4uLiBvaworICAgdGVzdF9zcGxpdCAoX19tYWluX18uVGVzdFN0cmluZ01ldGhvZHMpIC4uLiBvaworICAgdGVzdF91cHBlciAoX19tYWluX18uVGVzdFN0cmluZ01ldGhvZHMpIC4uLiBvawogCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBSYW4gMyB0ZXN0cyBpbiAwLjExMHMKKyAgIFJhbiAzIHRlc3RzIGluIDAuMDAxcwogCiAgICBPSwogCkBAIC0yMTMsOCArMjA0LDggQEAKIAogLi4gY21kb3B0aW9uOjogLWMsIC0tY2F0Y2gKIAotICAgQ29udHJvbC1DIGR1cmluZyB0aGUgdGVzdCBydW4gd2FpdHMgZm9yIHRoZSBjdXJyZW50IHRlc3QgdG8gZW5kIGFuZCB0aGVuCi0gICByZXBvcnRzIGFsbCB0aGUgcmVzdWx0cyBzbyBmYXIuIEEgc2Vjb25kIGNvbnRyb2wtQyByYWlzZXMgdGhlIG5vcm1hbAorICAgOmtiZDpgQ29udHJvbC1DYCBkdXJpbmcgdGhlIHRlc3QgcnVuIHdhaXRzIGZvciB0aGUgY3VycmVudCB0ZXN0IHRvIGVuZCBhbmQgdGhlbgorICAgcmVwb3J0cyBhbGwgdGhlIHJlc3VsdHMgc28gZmFyLiBBIHNlY29uZCA6a2JkOmBDb250cm9sLUNgIHJhaXNlcyB0aGUgbm9ybWFsCiAgICA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgZXhjZXB0aW9uLgogCiAgICBTZWUgYFNpZ25hbCBIYW5kbGluZ2BfIGZvciB0aGUgZnVuY3Rpb25zIHRoYXQgcHJvdmlkZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCkBAIC0yMzksOSArMjMwLDEwIEBACiAKIFVuaXR0ZXN0IHN1cHBvcnRzIHNpbXBsZSB0ZXN0IGRpc2NvdmVyeS4gSW4gb3JkZXIgdG8gYmUgY29tcGF0aWJsZSB3aXRoIHRlc3QKIGRpc2NvdmVyeSwgYWxsIG9mIHRoZSB0ZXN0IGZpbGVzIG11c3QgYmUgOnJlZjpgbW9kdWxlcyA8dHV0LW1vZHVsZXM+YCBvcgotOnJlZjpgcGFja2FnZXMgPHR1dC1wYWNrYWdlcz5gIGltcG9ydGFibGUgZnJvbSB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZgotdGhlIHByb2plY3QgKHRoaXMgbWVhbnMgdGhhdCB0aGVpciBmaWxlbmFtZXMgbXVzdCBiZSB2YWxpZAotOnJlZjpgaWRlbnRpZmllcnMgPGlkZW50aWZpZXJzPmApLgorOnJlZjpgcGFja2FnZXMgPHR1dC1wYWNrYWdlcz5gIChpbmNsdWRpbmcgOnRlcm06YG5hbWVzcGFjZSBwYWNrYWdlcworPG5hbWVzcGFjZSBwYWNrYWdlPmApIGltcG9ydGFibGUgZnJvbSB0aGUgdG9wLWxldmVsIGRpcmVjdG9yeSBvZgordGhlIHByb2plY3QgKHRoaXMgbWVhbnMgdGhhdCB0aGVpciBmaWxlbmFtZXMgbXVzdCBiZSB2YWxpZCA6cmVmOmBpZGVudGlmaWVycworPGlkZW50aWZpZXJzPmApLgogCiBUZXN0IGRpc2NvdmVyeSBpcyBpbXBsZW1lbnRlZCBpbiA6bWV0aDpgVGVzdExvYWRlci5kaXNjb3ZlcmAsIGJ1dCBjYW4gYWxzbyBiZQogdXNlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUuIFRoZSBiYXNpYyBjb21tYW5kLWxpbmUgdXNhZ2UgaXM6OgpAQCAtMjc5LDggKzI3MSw4IEBACiBhcyBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbiB0aGF0IG9yZGVyLiBUaGUgZm9sbG93aW5nIHR3byBjb21tYW5kIGxpbmVzCiBhcmUgZXF1aXZhbGVudDo6CiAKLSAgIHB5dGhvbiAtbSB1bml0dGVzdCBkaXNjb3ZlciAtcyBwcm9qZWN0X2RpcmVjdG9yeSAtcCAnKl90ZXN0LnB5JwotICAgcHl0aG9uIC1tIHVuaXR0ZXN0IGRpc2NvdmVyIHByb2plY3RfZGlyZWN0b3J5ICcqX3Rlc3QucHknCisgICBweXRob24gLW0gdW5pdHRlc3QgZGlzY292ZXIgLXMgcHJvamVjdF9kaXJlY3RvcnkgLXAgIipfdGVzdC5weSIKKyAgIHB5dGhvbiAtbSB1bml0dGVzdCBkaXNjb3ZlciBwcm9qZWN0X2RpcmVjdG9yeSAiKl90ZXN0LnB5IgogCiBBcyB3ZWxsIGFzIGJlaW5nIGEgcGF0aCBpdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEgcGFja2FnZSBuYW1lLCBmb3IgZXhhbXBsZQogYGBteXByb2plY3Quc3VicGFja2FnZS50ZXN0YGAsIGFzIHRoZSBzdGFydCBkaXJlY3RvcnkuIFRoZSBwYWNrYWdlIG5hbWUgeW91CkBAIC0zMDYsNiArMjk4LDkgQEAKIFRlc3QgbW9kdWxlcyBhbmQgcGFja2FnZXMgY2FuIGN1c3RvbWl6ZSB0ZXN0IGxvYWRpbmcgYW5kIGRpc2NvdmVyeSBieSB0aHJvdWdoCiB0aGUgYGxvYWRfdGVzdHMgcHJvdG9jb2xgXy4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRlc3QgZGlzY292ZXJ5IHN1cHBvcnRzIDp0ZXJtOmBuYW1lc3BhY2UgcGFja2FnZXMgPG5hbWVzcGFjZSBwYWNrYWdlPmAuCisKIAogLi4gX29yZ2FuaXppbmctdGVzdHM6CiAKQEAgLTQ2OSw3ICs0NjQsNyBAQAogLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIFVuaXR0ZXN0IHN1cHBvcnRzIHNraXBwaW5nIGluZGl2aWR1YWwgdGVzdCBtZXRob2RzIGFuZCBldmVuIHdob2xlIGNsYXNzZXMgb2YKLXRlc3RzLiAgSW4gYWRkaXRpb24sIGl0IHN1cHBvcnRzIG1hcmtpbmcgYSB0ZXN0IGFzIGEgImV4cGVjdGVkIGZhaWx1cmUsIiBhIHRlc3QKK3Rlc3RzLiAgSW4gYWRkaXRpb24sIGl0IHN1cHBvcnRzIG1hcmtpbmcgYSB0ZXN0IGFzIGFuICJleHBlY3RlZCBmYWlsdXJlLCIgYSB0ZXN0CiB0aGF0IGlzIGJyb2tlbiBhbmQgd2lsbCBmYWlsLCBidXQgc2hvdWxkbid0IGJlIGNvdW50ZWQgYXMgYSBmYWlsdXJlIG9uIGEKIDpjbGFzczpgVGVzdFJlc3VsdGAuCiAKQEAgLTU1OSw4ICs1NTQsNzEgQEAKICAgIFVzdWFsbHkgeW91IGNhbiB1c2UgOm1ldGg6YFRlc3RDYXNlLnNraXBUZXN0YCBvciBvbmUgb2YgdGhlIHNraXBwaW5nCiAgICBkZWNvcmF0b3JzIGluc3RlYWQgb2YgcmFpc2luZyB0aGlzIGRpcmVjdGx5LgogCi1Ta2lwcGVkIHRlc3RzIHdpbGwgbm90IGhhdmUgOm1ldGg6YHNldFVwYCBvciA6bWV0aDpgdGVhckRvd25gIHJ1biBhcm91bmQgdGhlbS4KLVNraXBwZWQgY2xhc3NlcyB3aWxsIG5vdCBoYXZlIDptZXRoOmBzZXRVcENsYXNzYCBvciA6bWV0aDpgdGVhckRvd25DbGFzc2AgcnVuLgorU2tpcHBlZCB0ZXN0cyB3aWxsIG5vdCBoYXZlIDptZXRoOmB+VGVzdENhc2Uuc2V0VXBgIG9yIDptZXRoOmB+VGVzdENhc2UudGVhckRvd25gIHJ1biBhcm91bmQgdGhlbS4KK1NraXBwZWQgY2xhc3NlcyB3aWxsIG5vdCBoYXZlIDptZXRoOmB+VGVzdENhc2Uuc2V0VXBDbGFzc2Agb3IgOm1ldGg6YH5UZXN0Q2FzZS50ZWFyRG93bkNsYXNzYCBydW4uCitTa2lwcGVkIG1vZHVsZXMgd2lsbCBub3QgaGF2ZSA6ZnVuYzpgc2V0VXBNb2R1bGVgIG9yIDpmdW5jOmB0ZWFyRG93bk1vZHVsZWAgcnVuLgorCisKKy4uIF9zdWJ0ZXN0czoKKworRGlzdGluZ3Vpc2hpbmcgdGVzdCBpdGVyYXRpb25zIHVzaW5nIHN1YnRlc3RzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gdmVyc2lvbmFkZGVkOjogMy40CisKK1doZW4gc29tZSBvZiB5b3VyIHRlc3RzIGRpZmZlciBvbmx5IGJ5IGEgc29tZSB2ZXJ5IHNtYWxsIGRpZmZlcmVuY2VzLCBmb3IKK2luc3RhbmNlIHNvbWUgcGFyYW1ldGVycywgdW5pdHRlc3QgYWxsb3dzIHlvdSB0byBkaXN0aW5ndWlzaCB0aGVtIGluc2lkZQordGhlIGJvZHkgb2YgYSB0ZXN0IG1ldGhvZCB1c2luZyB0aGUgOm1ldGg6YH5UZXN0Q2FzZS5zdWJUZXN0YCBjb250ZXh0IG1hbmFnZXIuCisKK0ZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRlc3Q6OgorCisgICBjbGFzcyBOdW1iZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAgICBkZWYgdGVzdF9ldmVuKHNlbGYpOgorICAgICAgICAgICAiIiIKKyAgICAgICAgICAgVGVzdCB0aGF0IG51bWJlcnMgYmV0d2VlbiAwIGFuZCA1IGFyZSBhbGwgZXZlbi4KKyAgICAgICAgICAgIiIiCisgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIDYpOgorICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT1pKToKKyAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorCit3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBvdXRwdXQ6OgorCisgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICBGQUlMOiB0ZXN0X2V2ZW4gKF9fbWFpbl9fLk51bWJlcnNUZXN0KSAoaT0xKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICBGaWxlICJzdWJ0ZXN0cy5weSIsIGxpbmUgMzIsIGluIHRlc3RfZXZlbgorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSAlIDIsIDApCisgICBBc3NlcnRpb25FcnJvcjogMSAhPSAwCisKKyAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgIEZBSUw6IHRlc3RfZXZlbiAoX19tYWluX18uTnVtYmVyc1Rlc3QpIChpPTMpCisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgIEZpbGUgInN1YnRlc3RzLnB5IiwgbGluZSAzMiwgaW4gdGVzdF9ldmVuCisgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpICUgMiwgMCkKKyAgIEFzc2VydGlvbkVycm9yOiAxICE9IDAKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkgKGk9NSkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAorCitXaXRob3V0IHVzaW5nIGEgc3VidGVzdCwgZXhlY3V0aW9uIHdvdWxkIHN0b3AgYWZ0ZXIgdGhlIGZpcnN0IGZhaWx1cmUsCithbmQgdGhlIGVycm9yIHdvdWxkIGJlIGxlc3MgZWFzeSB0byBkaWFnbm9zZSBiZWNhdXNlIHRoZSB2YWx1ZSBvZiBgYGlgYAord291bGRuJ3QgYmUgZGlzcGxheWVkOjoKKworICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgRkFJTDogdGVzdF9ldmVuIChfX21haW5fXy5OdW1iZXJzVGVzdCkKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgRmlsZSAic3VidGVzdHMucHkiLCBsaW5lIDMyLCBpbiB0ZXN0X2V2ZW4KKyAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorICAgQXNzZXJ0aW9uRXJyb3I6IDEgIT0gMAogCiAKIC4uIF91bml0dGVzdC1jb250ZW50czoKQEAgLTU4NiwxMCArNjQ0LDggQEAKICAgIGtpbmRzIG9mIGZhaWx1cmUuCiAKICAgIEVhY2ggaW5zdGFuY2Ugb2YgOmNsYXNzOmBUZXN0Q2FzZWAgd2lsbCBydW4gYSBzaW5nbGUgYmFzZSBtZXRob2Q6IHRoZSBtZXRob2QKLSAgIG5hbWVkICptZXRob2ROYW1lKi4gIEhvd2V2ZXIsIHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZGVmYXVsdAotICAgKm1ldGhvZE5hbWUqLCBgYHJ1blRlc3QoKWBgLCB3aWxsIHJ1biBldmVyeSBtZXRob2Qgc3RhcnRpbmcgd2l0aCBgYHRlc3RgYAotICAgYXMgYW4gaW5kaXZpZHVhbCB0ZXN0LCBhbmQgY291bnQgc3VjY2Vzc2VzIGFuZCBmYWlsdXJlcyBhY2NvcmRpbmdseS4KLSAgIFRoZXJlZm9yZSwgaW4gbW9zdCB1c2VzIG9mIDpjbGFzczpgVGVzdENhc2VgLCB5b3Ugd2lsbCBuZWl0aGVyIGNoYW5nZQorICAgbmFtZWQgKm1ldGhvZE5hbWUqLgorICAgSW4gbW9zdCB1c2VzIG9mIDpjbGFzczpgVGVzdENhc2VgLCB5b3Ugd2lsbCBuZWl0aGVyIGNoYW5nZQogICAgdGhlICptZXRob2ROYW1lKiBub3IgcmVpbXBsZW1lbnQgdGhlIGRlZmF1bHQgYGBydW5UZXN0KClgYCBtZXRob2QuCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCkBAIC02MDcsOSArNjYzLDkgQEAKICAgIC4uIG1ldGhvZDo6IHNldFVwKCkKIAogICAgICAgTWV0aG9kIGNhbGxlZCB0byBwcmVwYXJlIHRoZSB0ZXN0IGZpeHR1cmUuICBUaGlzIGlzIGNhbGxlZCBpbW1lZGlhdGVseQotICAgICAgYmVmb3JlIGNhbGxpbmcgdGhlIHRlc3QgbWV0aG9kOyBhbnkgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGlzIG1ldGhvZCB3aWxsCi0gICAgICBiZSBjb25zaWRlcmVkIGFuIGVycm9yIHJhdGhlciB0aGFuIGEgdGVzdCBmYWlsdXJlLiBUaGUgZGVmYXVsdAotICAgICAgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgorICAgICAgYmVmb3JlIGNhbGxpbmcgdGhlIHRlc3QgbWV0aG9kOyBvdGhlciB0aGFuIDpleGM6YEFzc2VydGlvbkVycm9yYCBvciA6ZXhjOmBTa2lwVGVzdGAsCisgICAgICBhbnkgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGlzIG1ldGhvZCB3aWxsIGJlIGNvbnNpZGVyZWQgYW4gZXJyb3IgcmF0aGVyIHRoYW4KKyAgICAgIGEgdGVzdCBmYWlsdXJlLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcuCiAKIAogICAgLi4gbWV0aG9kOjogdGVhckRvd24oKQpAQCAtNjE3LDEwICs2NzMsMTAgQEAKICAgICAgIE1ldGhvZCBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRlc3QgbWV0aG9kIGhhcyBiZWVuIGNhbGxlZCBhbmQgdGhlCiAgICAgICByZXN1bHQgcmVjb3JkZWQuICBUaGlzIGlzIGNhbGxlZCBldmVuIGlmIHRoZSB0ZXN0IG1ldGhvZCByYWlzZWQgYW4KICAgICAgIGV4Y2VwdGlvbiwgc28gdGhlIGltcGxlbWVudGF0aW9uIGluIHN1YmNsYXNzZXMgbWF5IG5lZWQgdG8gYmUgcGFydGljdWxhcmx5Ci0gICAgICBjYXJlZnVsIGFib3V0IGNoZWNraW5nIGludGVybmFsIHN0YXRlLiAgQW55IGV4Y2VwdGlvbiByYWlzZWQgYnkgdGhpcwotICAgICAgbWV0aG9kIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBlcnJvciByYXRoZXIgdGhhbiBhIHRlc3QgZmFpbHVyZS4gIFRoaXMKLSAgICAgIG1ldGhvZCB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIHRoZSA6bWV0aDpgc2V0VXBgIHN1Y2NlZWRzLCByZWdhcmRsZXNzIG9mCi0gICAgICB0aGUgb3V0Y29tZSBvZiB0aGUgdGVzdCBtZXRob2QuIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRvZXMgbm90aGluZy4KKyAgICAgIGNhcmVmdWwgYWJvdXQgY2hlY2tpbmcgaW50ZXJuYWwgc3RhdGUuICBBbnkgZXhjZXB0aW9uLCBvdGhlciB0aGFuIDpleGM6YEFzc2VydGlvbkVycm9yYAorICAgICAgb3IgOmV4YzpgU2tpcFRlc3RgLCByYWlzZWQgYnkgdGhpcyBtZXRob2Qgd2lsbCBiZSBjb25zaWRlcmVkIGFuIGVycm9yIHJhdGhlciB0aGFuIGEKKyAgICAgIHRlc3QgZmFpbHVyZS4gIFRoaXMgbWV0aG9kIHdpbGwgb25seSBiZSBjYWxsZWQgaWYgdGhlIDptZXRoOmBzZXRVcGAgc3VjY2VlZHMsCisgICAgICByZWdhcmRsZXNzIG9mIHRoZSBvdXRjb21lIG9mIHRoZSB0ZXN0IG1ldGhvZC4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nLgogCiAKICAgIC4uIG1ldGhvZDo6IHNldFVwQ2xhc3MoKQpAQCAtNjc2LDYgKzczMiwyMSBAQAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAorICAgLi4gbWV0aG9kOjogc3ViVGVzdChtc2c9Tm9uZSwgKipwYXJhbXMpCisKKyAgICAgIFJldHVybiBhIGNvbnRleHQgbWFuYWdlciB3aGljaCBleGVjdXRlcyB0aGUgZW5jbG9zZWQgY29kZSBibG9jayBhcyBhCisgICAgICBzdWJ0ZXN0LiAgKm1zZyogYW5kICpwYXJhbXMqIGFyZSBvcHRpb25hbCwgYXJiaXRyYXJ5IHZhbHVlcyB3aGljaCBhcmUKKyAgICAgIGRpc3BsYXllZCB3aGVuZXZlciBhIHN1YnRlc3QgZmFpbHMsIGFsbG93aW5nIHlvdSB0byBpZGVudGlmeSB0aGVtCisgICAgICBjbGVhcmx5LgorCisgICAgICBBIHRlc3QgY2FzZSBjYW4gY29udGFpbiBhbnkgbnVtYmVyIG9mIHN1YnRlc3QgZGVjbGFyYXRpb25zLCBhbmQKKyAgICAgIHRoZXkgY2FuIGJlIGFyYml0cmFyaWx5IG5lc3RlZC4KKworICAgICAgU2VlIDpyZWY6YHN1YnRlc3RzYCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogICAgLi4gbWV0aG9kOjogZGVidWcoKQogCiAgICAgICBSdW4gdGhlIHRlc3Qgd2l0aG91dCBjb2xsZWN0aW5nIHRoZSByZXN1bHQuICBUaGlzIGFsbG93cyBleGNlcHRpb25zIHJhaXNlZApAQCAtODA2LDggKzg3Nyw4IEBACiAKIAogCi0gICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNoZWNrIHRoYXQgZXhjZXB0aW9ucyBhbmQgd2FybmluZ3MgYXJlIHJhaXNlZCB1c2luZwotICAgdGhlIGZvbGxvd2luZyBtZXRob2RzOgorICAgSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjaGVjayB0aGUgcHJvZHVjdGlvbiBvZiBleGNlcHRpb25zLCB3YXJuaW5ncyBhbmQKKyAgIGxvZyBtZXNzYWdlcyB1c2luZyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CiAKICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogICAgfCBNZXRob2QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ2hlY2tzIHRoYXQgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmV3IGluICAgICB8CkBAIC04MjQsNiArODk1LDkgQEAKICAgIHwgOm1ldGg6YGFzc2VydFdhcm5zUmVnZXgod2FybiwgciwgZnVuLCAqYXJncywgKiprd2RzKSAgICB8IGBgZnVuKCphcmdzLCAqKmt3ZHMpYGAgcmFpc2VzICp3YXJuKiB8IDMuMiAgICAgICAgfAogICAgfCA8VGVzdENhc2UuYXNzZXJ0V2FybnNSZWdleD5gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5kIHRoZSBtZXNzYWdlIG1hdGNoZXMgcmVnZXggKnIqICAgIHwgICAgICAgICAgICB8CiAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKKyAgIHwgOm1ldGg6YGFzc2VydExvZ3MobG9nZ2VyLCBsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICB8IFRoZSBgYHdpdGhgYCBibG9jayBsb2dzIG9uICpsb2dnZXIqICB8IDMuNCAgICAgICAgfAorICAgfCA8VGVzdENhc2UuYXNzZXJ0TG9ncz5gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2l0aCBtaW5pbXVtICpsZXZlbCogICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8CisgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSsKIAogICAgLi4gbWV0aG9kOjogYXNzZXJ0UmFpc2VzKGV4Y2VwdGlvbiwgY2FsbGFibGUsICphcmdzLCAqKmt3ZHMpCiAgICAgICAgICAgICAgICBhc3NlcnRSYWlzZXMoZXhjZXB0aW9uLCBtc2c9Tm9uZSkKQEAgLTk1NCw2ICsxMDI4LDQ3IEBACiAgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgICAgQWRkZWQgdGhlICptc2cqIGtleXdvcmQgYXJndW1lbnQgd2hlbiB1c2VkIGFzIGEgY29udGV4dCBtYW5hZ2VyLgogCisgICAuLiBtZXRob2Q6OiBhc3NlcnRMb2dzKGxvZ2dlcj1Ob25lLCBsZXZlbD1Ob25lKQorCisgICAgICBBIGNvbnRleHQgbWFuYWdlciB0byB0ZXN0IHRoYXQgYXQgbGVhc3Qgb25lIG1lc3NhZ2UgaXMgbG9nZ2VkIG9uCisgICAgICB0aGUgKmxvZ2dlciogb3Igb25lIG9mIGl0cyBjaGlsZHJlbiwgd2l0aCBhdCBsZWFzdCB0aGUgZ2l2ZW4KKyAgICAgICpsZXZlbCouCisKKyAgICAgIElmIGdpdmVuLCAqbG9nZ2VyKiBzaG91bGQgYmUgYSA6Y2xhc3M6YGxvZ2dpbmcuTG9nZ2VyYCBvYmplY3Qgb3IgYQorICAgICAgOmNsYXNzOmBzdHJgIGdpdmluZyB0aGUgbmFtZSBvZiBhIGxvZ2dlci4gIFRoZSBkZWZhdWx0IGlzIHRoZSByb290CisgICAgICBsb2dnZXIsIHdoaWNoIHdpbGwgY2F0Y2ggYWxsIG1lc3NhZ2VzLgorCisgICAgICBJZiBnaXZlbiwgKmxldmVsKiBzaG91bGQgYmUgZWl0aGVyIGEgbnVtZXJpYyBsb2dnaW5nIGxldmVsIG9yCisgICAgICBpdHMgc3RyaW5nIGVxdWl2YWxlbnQgKGZvciBleGFtcGxlIGVpdGhlciBgYCJFUlJPUiJgYCBvcgorICAgICAgOmF0dHI6YGxvZ2dpbmcuRVJST1JgKS4gIFRoZSBkZWZhdWx0IGlzIDphdHRyOmBsb2dnaW5nLklORk9gLgorCisgICAgICBUaGUgdGVzdCBwYXNzZXMgaWYgYXQgbGVhc3Qgb25lIG1lc3NhZ2UgZW1pdHRlZCBpbnNpZGUgdGhlIGBgd2l0aGBgCisgICAgICBibG9jayBtYXRjaGVzIHRoZSAqbG9nZ2VyKiBhbmQgKmxldmVsKiBjb25kaXRpb25zLCBvdGhlcndpc2UgaXQgZmFpbHMuCisKKyAgICAgIFRoZSBvYmplY3QgcmV0dXJuZWQgYnkgdGhlIGNvbnRleHQgbWFuYWdlciBpcyBhIHJlY29yZGluZyBoZWxwZXIKKyAgICAgIHdoaWNoIGtlZXBzIHRyYWNrcyBvZiB0aGUgbWF0Y2hpbmcgbG9nIG1lc3NhZ2VzLiAgSXQgaGFzIHR3bworICAgICAgYXR0cmlidXRlczoKKworICAgICAgLi4gYXR0cmlidXRlOjogcmVjb3JkcworCisgICAgICAgICBBIGxpc3Qgb2YgOmNsYXNzOmBsb2dnaW5nLkxvZ1JlY29yZGAgb2JqZWN0cyBvZiB0aGUgbWF0Y2hpbmcKKyAgICAgICAgIGxvZyBtZXNzYWdlcy4KKworICAgICAgLi4gYXR0cmlidXRlOjogb3V0cHV0CisKKyAgICAgICAgIEEgbGlzdCBvZiA6Y2xhc3M6YHN0cmAgb2JqZWN0cyB3aXRoIHRoZSBmb3JtYXR0ZWQgb3V0cHV0IG9mCisgICAgICAgICBtYXRjaGluZyBtZXNzYWdlcy4KKworICAgICAgRXhhbXBsZTo6CisKKyAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCdmb28nLCBsZXZlbD0nSU5GTycpIGFzIGNtOgorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpLmluZm8oJ2ZpcnN0IG1lc3NhZ2UnKQorICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKS5lcnJvcignc2Vjb25kIG1lc3NhZ2UnKQorICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiAKICAgIFRoZXJlIGFyZSBhbHNvIG90aGVyIG1ldGhvZHMgdXNlZCB0byBwZXJmb3JtIG1vcmUgc3BlY2lmaWMgY2hlY2tzLCBzdWNoIGFzOgogCkBAIC0xMzkzLDE1ICsxNTA4LDI0IEBACiAKICAgICAgIFRlc3RzIGdyb3VwZWQgYnkgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgYXJlIGFsd2F5cyBhY2Nlc3NlZCBieSBpdGVyYXRpb24uCiAgICAgICBTdWJjbGFzc2VzIGNhbiBsYXppbHkgcHJvdmlkZSB0ZXN0cyBieSBvdmVycmlkaW5nIDptZXRoOmBfX2l0ZXJfX2AuIE5vdGUKLSAgICAgIHRoYXQgdGhpcyBtZXRob2QgbWF5YmUgY2FsbGVkIHNldmVyYWwgdGltZXMgb24gYSBzaW5nbGUgc3VpdGUKLSAgICAgIChmb3IgZXhhbXBsZSB3aGVuIGNvdW50aW5nIHRlc3RzIG9yIGNvbXBhcmluZyBmb3IgZXF1YWxpdHkpCi0gICAgICBzbyB0aGUgdGVzdHMgcmV0dXJuZWQgbXVzdCBiZSB0aGUgc2FtZSBmb3IgcmVwZWF0ZWQgaXRlcmF0aW9ucy4KKyAgICAgIHRoYXQgdGhpcyBtZXRob2QgbWF5IGJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIG9uIGEgc2luZ2xlIHN1aXRlIChmb3IKKyAgICAgIGV4YW1wbGUgd2hlbiBjb3VudGluZyB0ZXN0cyBvciBjb21wYXJpbmcgZm9yIGVxdWFsaXR5KSBzbyB0aGUgdGVzdHMKKyAgICAgIHJldHVybmVkIGJ5IHJlcGVhdGVkIGl0ZXJhdGlvbnMgYmVmb3JlIDptZXRoOmBUZXN0U3VpdGUucnVuYCBtdXN0IGJlIHRoZQorICAgICAgc2FtZSBmb3IgZWFjaCBjYWxsIGl0ZXJhdGlvbi4gQWZ0ZXIgOm1ldGg6YFRlc3RTdWl0ZS5ydW5gLCBjYWxsZXJzIHNob3VsZAorICAgICAgbm90IHJlbHkgb24gdGhlIHRlc3RzIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kIHVubGVzcyB0aGUgY2FsbGVyIHVzZXMgYQorICAgICAgc3ViY2xhc3MgdGhhdCBvdmVycmlkZXMgOm1ldGg6YFRlc3RTdWl0ZS5fcmVtb3ZlVGVzdEF0SW5kZXhgIHRvIHByZXNlcnZlCisgICAgICB0ZXN0IHJlZmVyZW5jZXMuCiAKICAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4yCiAgICAgICAgICBJbiBlYXJsaWVyIHZlcnNpb25zIHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAgYWNjZXNzZWQgdGVzdHMgZGlyZWN0bHkgcmF0aGVyCiAgICAgICAgICB0aGFuIHRocm91Z2ggaXRlcmF0aW9uLCBzbyBvdmVycmlkaW5nIDptZXRoOmBfX2l0ZXJfX2Agd2Fzbid0IHN1ZmZpY2llbnQKICAgICAgICAgIGZvciBwcm92aWRpbmcgdGVzdHMuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBJbiBlYXJsaWVyIHZlcnNpb25zIHRoZSA6Y2xhc3M6YFRlc3RTdWl0ZWAgaGVsZCByZWZlcmVuY2VzIHRvIGVhY2gKKyAgICAgICAgIDpjbGFzczpgVGVzdENhc2VgIGFmdGVyIDptZXRoOmBUZXN0U3VpdGUucnVuYC4gU3ViY2xhc3NlcyBjYW4gcmVzdG9yZQorICAgICAgICAgdGhhdCBiZWhhdmlvciBieSBvdmVycmlkaW5nIDptZXRoOmBUZXN0U3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4YC4KKwogICAgSW4gdGhlIHR5cGljYWwgdXNhZ2Ugb2YgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgb2JqZWN0LCB0aGUgOm1ldGg6YHJ1bmAgbWV0aG9kCiAgICBpcyBpbnZva2VkIGJ5IGEgOmNsYXNzOmBUZXN0UnVubmVyYCByYXRoZXIgdGhhbiBieSB0aGUgZW5kLXVzZXIgdGVzdCBoYXJuZXNzLgogCkBAIC0xNDI1LDYgKzE1NDksMTIgQEAKICAgICAgIFJldHVybiBhIHN1aXRlIG9mIGFsbCB0ZXN0cyBjYXNlcyBjb250YWluZWQgaW4gdGhlIDpjbGFzczpgVGVzdENhc2VgXCAtZGVyaXZlZAogICAgICAgOmNsYXNzOmB0ZXN0Q2FzZUNsYXNzYC4KIAorICAgICAgQSB0ZXN0IGNhc2UgaW5zdGFuY2UgaXMgY3JlYXRlZCBmb3IgZWFjaCBtZXRob2QgbmFtZWQgYnkKKyAgICAgIDptZXRoOmBnZXRUZXN0Q2FzZU5hbWVzYC4gQnkgZGVmYXVsdCB0aGVzZSBhcmUgdGhlIG1ldGhvZCBuYW1lcworICAgICAgYmVnaW5uaW5nIHdpdGggYGB0ZXN0YGAuIElmIDptZXRoOmBnZXRUZXN0Q2FzZU5hbWVzYCByZXR1cm5zIG5vCisgICAgICBtZXRob2RzLCBidXQgdGhlIDptZXRoOmBydW5UZXN0YCBtZXRob2QgaXMgaW1wbGVtZW50ZWQsIGEgc2luZ2xlIHRlc3QKKyAgICAgIGNhc2UgaXMgY3JlYXRlZCBmb3IgdGhhdCBtZXRob2QgaW5zdGVhZC4KKwogCiAgICAuLiBtZXRob2Q6OiBsb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKIApAQCAtMTUwMCwxNCArMTYzMCwxNiBAQAogICAgICAgZGlyZWN0b3J5IG11c3QgYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkuCiAKICAgICAgIElmIGltcG9ydGluZyBhIG1vZHVsZSBmYWlscywgZm9yIGV4YW1wbGUgZHVlIHRvIGEgc3ludGF4IGVycm9yLCB0aGVuIHRoaXMKLSAgICAgIHdpbGwgYmUgcmVjb3JkZWQgYXMgYSBzaW5nbGUgZXJyb3IgYW5kIGRpc2NvdmVyeSB3aWxsIGNvbnRpbnVlLgorICAgICAgd2lsbCBiZSByZWNvcmRlZCBhcyBhIHNpbmdsZSBlcnJvciBhbmQgZGlzY292ZXJ5IHdpbGwgY29udGludWUuICBJZiB0aGUKKyAgICAgIGltcG9ydCBmYWlsdXJlIGlzIGR1ZSB0byA6ZXhjOmBTa2lwVGVzdGAgYmVpbmcgcmFpc2VkLCBpdCB3aWxsIGJlIHJlY29yZGVkCisgICAgICBhcyBhIHNraXAgaW5zdGVhZCBvZiBhbiBlcnJvci4KIAogICAgICAgSWYgYSB0ZXN0IHBhY2thZ2UgbmFtZSAoZGlyZWN0b3J5IHdpdGggOmZpbGU6YF9faW5pdF9fLnB5YCkgbWF0Y2hlcyB0aGUKICAgICAgIHBhdHRlcm4gdGhlbiB0aGUgcGFja2FnZSB3aWxsIGJlIGNoZWNrZWQgZm9yIGEgYGBsb2FkX3Rlc3RzYGAKICAgICAgIGZ1bmN0aW9uLiBJZiB0aGlzIGV4aXN0cyB0aGVuIGl0IHdpbGwgYmUgY2FsbGVkIHdpdGggKmxvYWRlciosICp0ZXN0cyosCiAgICAgICAqcGF0dGVybiouCiAKLSAgICAgIElmIGxvYWRfdGVzdHMgZXhpc3RzIHRoZW4gZGlzY292ZXJ5IGRvZXMgKm5vdCogcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlLAorICAgICAgSWYgYGBsb2FkX3Rlc3RzYGAgZXhpc3RzIHRoZW4gZGlzY292ZXJ5IGRvZXMgKm5vdCogcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlLAogICAgICAgYGBsb2FkX3Rlc3RzYGAgaXMgcmVzcG9uc2libGUgZm9yIGxvYWRpbmcgYWxsIHRlc3RzIGluIHRoZSBwYWNrYWdlLgogCiAgICAgICBUaGUgcGF0dGVybiBpcyBkZWxpYmVyYXRlbHkgbm90IHN0b3JlZCBhcyBhIGxvYWRlciBhdHRyaWJ1dGUgc28gdGhhdApAQCAtMTUxOSw2ICsxNjUxLDE0IEBACiAKICAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogCisgICAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgICAgTW9kdWxlcyB0aGF0IHJhaXNlIDpleGM6YFNraXBUZXN0YCBvbiBpbXBvcnQgYXJlIHJlY29yZGVkIGFzIHNraXBzLAorICAgICAgICAgICBub3QgZXJyb3JzLgorICAgICAgICAgRGlzY292ZXJ5IHdvcmtzIGZvciA6dGVybTpgbmFtZXNwYWNlIHBhY2thZ2VzIDxuYW1lc3BhY2UgcGFja2FnZT5gLgorICAgICAgICAgUGF0aHMgYXJlIHNvcnRlZCBiZWZvcmUgYmVpbmcgaW1wb3J0ZWQgc28gdGhhdCBleGVjdXRpb24gb3JkZXIgaXMKKyAgICAgICAgICAgdGhlIHNhbWUgZXZlbiBpZiB0aGUgdW5kZXJseWluZyBmaWxlIHN5c3RlbSdzIG9yZGVyaW5nIGlzIG5vdAorICAgICAgICAgICBkZXBlbmRlbnQgb24gZmlsZSBuYW1lLgorCiAKICAgIFRoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBvZiBhIDpjbGFzczpgVGVzdExvYWRlcmAgY2FuIGJlIGNvbmZpZ3VyZWQgZWl0aGVyIGJ5CiAgICBzdWJjbGFzc2luZyBvciBhc3NpZ25tZW50IG9uIGFuIGluc3RhbmNlOgpAQCAtMTYzMCw2ICsxNzcwLDEwIEBACiAgICAgICBSZXR1cm4gYGBUcnVlYGAgaWYgYWxsIHRlc3RzIHJ1biBzbyBmYXIgaGF2ZSBwYXNzZWQsIG90aGVyd2lzZSByZXR1cm5zCiAgICAgICBgYEZhbHNlYGAuCiAKKyAgICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgICBSZXR1cm5zIGBgRmFsc2VgYCBpZiB0aGVyZSB3ZXJlIGFueSA6YXR0cjpgdW5leHBlY3RlZFN1Y2Nlc3Nlc2AKKyAgICAgICAgIGZyb20gdGVzdHMgbWFya2VkIHdpdGggdGhlIDpmdW5jOmBleHBlY3RlZEZhaWx1cmVgIGRlY29yYXRvci4KKwogCiAgICAuLiBtZXRob2Q6OiBzdG9wKCkKIApAQCAtMTY1OCwxNCArMTgwMiwxNCBAQAogICAgICAgQ2FsbGVkIGFmdGVyIHRoZSB0ZXN0IGNhc2UgKnRlc3QqIGhhcyBiZWVuIGV4ZWN1dGVkLCByZWdhcmRsZXNzIG9mIHRoZQogICAgICAgb3V0Y29tZS4KIAotICAgLi4gbWV0aG9kOjogc3RhcnRUZXN0UnVuKHRlc3QpCisgICAuLiBtZXRob2Q6OiBzdGFydFRlc3RSdW4oKQogCiAgICAgICBDYWxsZWQgb25jZSBiZWZvcmUgYW55IHRlc3RzIGFyZSBleGVjdXRlZC4KIAogICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy4xCiAKIAotICAgLi4gbWV0aG9kOjogc3RvcFRlc3RSdW4odGVzdCkKKyAgIC4uIG1ldGhvZDo6IHN0b3BUZXN0UnVuKCkKIAogICAgICAgQ2FsbGVkIG9uY2UgYWZ0ZXIgYWxsIHRlc3RzIGFyZSBleGVjdXRlZC4KIApAQCAtMTcyOCw2ICsxODcyLDIyIEBACiAgICAgICA6YXR0cjpgdW5leHBlY3RlZFN1Y2Nlc3Nlc2AgYXR0cmlidXRlLgogCiAKKyAgIC4uIG1ldGhvZDo6IGFkZFN1YlRlc3QodGVzdCwgc3VidGVzdCwgb3V0Y29tZSkKKworICAgICAgQ2FsbGVkIHdoZW4gYSBzdWJ0ZXN0IGZpbmlzaGVzLiAgKnRlc3QqIGlzIHRoZSB0ZXN0IGNhc2UKKyAgICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHRlc3QgbWV0aG9kLiAgKnN1YnRlc3QqIGlzIGEgY3VzdG9tCisgICAgICA6Y2xhc3M6YFRlc3RDYXNlYCBpbnN0YW5jZSBkZXNjcmliaW5nIHRoZSBzdWJ0ZXN0LgorCisgICAgICBJZiAqb3V0Y29tZSogaXMgOmNvbnN0OmBOb25lYCwgdGhlIHN1YnRlc3Qgc3VjY2VlZGVkLiAgT3RoZXJ3aXNlLAorICAgICAgaXQgZmFpbGVkIHdpdGggYW4gZXhjZXB0aW9uIHdoZXJlICpvdXRjb21lKiBpcyBhIHR1cGxlIG9mIHRoZSBmb3JtCisgICAgICByZXR1cm5lZCBieSA6ZnVuYzpgc3lzLmV4Y19pbmZvYDogYGAodHlwZSwgdmFsdWUsIHRyYWNlYmFjaylgYC4KKworICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nIHdoZW4gdGhlIG91dGNvbWUgaXMgYQorICAgICAgc3VjY2VzcywgYW5kIHJlY29yZHMgc3VidGVzdCBmYWlsdXJlcyBhcyBub3JtYWwgZmFpbHVyZXMuCisKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisKIC4uIGNsYXNzOjogVGV4dFRlc3RSZXN1bHQoc3RyZWFtLCBkZXNjcmlwdGlvbnMsIHZlcmJvc2l0eSkKIAogICAgQSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiA6Y2xhc3M6YFRlc3RSZXN1bHRgIHVzZWQgYnkgdGhlCkBAIC0xNzgzLDYgKzE5NDMsMTQgQEAKIAogICAgICAgICBzdHJlYW0sIGRlc2NyaXB0aW9ucywgdmVyYm9zaXR5CiAKKyAgIC4uIG1ldGhvZDo6IHJ1bih0ZXN0KQorCisgICAgICBUaGlzIG1ldGhvZCBpcyB0aGUgbWFpbiBwdWJsaWMgaW50ZXJmYWNlIHRvIHRoZSBgVGV4dFRlc3RSdW5uZXJgLiBUaGlzCisgICAgICBtZXRob2QgdGFrZXMgYSA6Y2xhc3M6YFRlc3RTdWl0ZWAgb3IgOmNsYXNzOmBUZXN0Q2FzZWAgaW5zdGFuY2UuIEEKKyAgICAgIDpjbGFzczpgVGVzdFJlc3VsdGAgaXMgY3JlYXRlZCBieSBjYWxsaW5nCisgICAgICA6ZnVuYzpgX21ha2VSZXN1bHRgIGFuZCB0aGUgdGVzdChzKSBhcmUgcnVuIGFuZCB0aGUKKyAgICAgIHJlc3VsdHMgcHJpbnRlZCB0byBzdGRvdXQuCisKIAogLi4gZnVuY3Rpb246OiBtYWluKG1vZHVsZT0nX19tYWluX18nLCBkZWZhdWx0VGVzdD1Ob25lLCBhcmd2PU5vbmUsIHRlc3RSdW5uZXI9Tm9uZSwgXAogICAgICAgICAgICAgICAgICAgIHRlc3RMb2FkZXI9dW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIsIGV4aXQ9VHJ1ZSwgdmVyYm9zaXR5PTEsIFwKQEAgLTE4MDIsOSArMTk3MCwxMCBAQAogICAgICAgaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAgICAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQogCi0gICBUaGUgKmRlZmF1bHRUZXN0KiBhcmd1bWVudCBpcyB0aGUgbmFtZSBvZiB0aGUgdGVzdCB0byBydW4gaWYgbm8gdGVzdCBuYW1lcwotICAgYXJlIHNwZWNpZmllZCB2aWEgKmFyZ3YqLiAgSWYgbm90IHNwZWNpZmllZCBvciBgYE5vbmVgYCBhbmQgbm8gdGVzdCBuYW1lcyBhcmUKLSAgIHByb3ZpZGVkIHZpYSAqYXJndiosIGFsbCB0ZXN0cyBmb3VuZCBpbiAqbW9kdWxlKiBhcmUgcnVuLgorICAgVGhlICpkZWZhdWx0VGVzdCogYXJndW1lbnQgaXMgZWl0aGVyIHRoZSBuYW1lIG9mIGEgc2luZ2xlIHRlc3Qgb3IgYW4KKyAgIGl0ZXJhYmxlIG9mIHRlc3QgbmFtZXMgdG8gcnVuIGlmIG5vIHRlc3QgbmFtZXMgYXJlIHNwZWNpZmllZCB2aWEgKmFyZ3YqLiAgSWYKKyAgIG5vdCBzcGVjaWZpZWQgb3IgYGBOb25lYGAgYW5kIG5vIHRlc3QgbmFtZXMgYXJlIHByb3ZpZGVkIHZpYSAqYXJndiosIGFsbAorICAgdGVzdHMgZm91bmQgaW4gKm1vZHVsZSogYXJlIHJ1bi4KIAogICAgVGhlICphcmd2KiBhcmd1bWVudCBjYW4gYmUgYSBsaXN0IG9mIG9wdGlvbnMgcGFzc2VkIHRvIHRoZSBwcm9ncmFtLCB3aXRoIHRoZQogICAgZmlyc3QgZWxlbWVudCBiZWluZyB0aGUgcHJvZ3JhbSBuYW1lLiAgSWYgbm90IHNwZWNpZmllZCBvciBgYE5vbmVgYCwKQEAgLTE4NDIsNiArMjAxMSwxMCBAQAogICAgICAgVGhlICp2ZXJib3NpdHkqLCAqZmFpbGZhc3QqLCAqY2F0Y2hicmVhayosICpidWZmZXIqCiAgICAgICBhbmQgKndhcm5pbmdzKiBwYXJhbWV0ZXJzIHdlcmUgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgKmRlZmF1bHRUZXN0KiBwYXJhbWV0ZXIgd2FzIGNoYW5nZWQgdG8gYWxzbyBhY2NlcHQgYW4gaXRlcmFibGUgb2YKKyAgICAgIHRlc3QgbmFtZXMuCisKIAogbG9hZF90ZXN0cyBQcm90b2NvbAogIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5lcnJvci5yc3QKaW5kZXggMjVjMTNiZC4uZjdmMGM5NyAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvdXJsbGliLmVycm9yLnJzdAorKysgYi9Eb2MvbGlicmFyeS91cmxsaWIuZXJyb3IucnN0CkBAIC00Niw2ICs0NiwxMyBAQAogCiAgICAgICBUaGlzIGlzIHVzdWFsbHkgYSBzdHJpbmcgZXhwbGFpbmluZyB0aGUgcmVhc29uIGZvciB0aGlzIGVycm9yLgogCisgICAuLiBhdHRyaWJ1dGU6OiBoZWFkZXJzCisKKyAgICAgIFRoZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgZm9yIHRoZSBIVFRQIHJlcXVlc3QgdGhhdCBjYXVzZWQgdGhlCisgICAgICA6ZXhjOmBIVFRQRXJyb3JgLgorCisgICAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKwogLi4gZXhjZXB0aW9uOjogQ29udGVudFRvb1Nob3J0RXJyb3IobXNnLCBjb250ZW50KQogCiAgICBUaGlzIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiB0aGUgOmZ1bmM6YH51cmxsaWIucmVxdWVzdC51cmxyZXRyaWV2ZWAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VybGxpYi5wYXJzZS5yc3QgYi9Eb2MvbGlicmFyeS91cmxsaWIucGFyc2UucnN0CmluZGV4IGI5NTE0MjAuLmFjMDRmOTkgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3VybGxpYi5wYXJzZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdXJsbGliLnBhcnNlLnJzdApAQCAtNzYsMTIgKzc2LDE1IEBACiAgICAgICAgUGFyc2VSZXN1bHQoc2NoZW1lPScnLCBuZXRsb2M9JycsIHBhdGg9J2hlbHAvUHl0aG9uLmh0bWwnLCBwYXJhbXM9JycsCiAgICAgICAgICAgICAgICAgICBxdWVyeT0nJywgZnJhZ21lbnQ9JycpCiAKLSAgIElmIHRoZSAqc2NoZW1lKiBhcmd1bWVudCBpcyBzcGVjaWZpZWQsIGl0IGdpdmVzIHRoZSBkZWZhdWx0IGFkZHJlc3NpbmcKLSAgIHNjaGVtZSwgdG8gYmUgdXNlZCBvbmx5IGlmIHRoZSBVUkwgZG9lcyBub3Qgc3BlY2lmeSBvbmUuICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IKLSAgIHRoaXMgYXJndW1lbnQgaXMgdGhlIGVtcHR5IHN0cmluZy4KKyAgIFRoZSAqc2NoZW1lKiBhcmd1bWVudCBnaXZlcyB0aGUgZGVmYXVsdCBhZGRyZXNzaW5nIHNjaGVtZSwgdG8gYmUKKyAgIHVzZWQgb25seSBpZiB0aGUgVVJMIGRvZXMgbm90IHNwZWNpZnkgb25lLiAgSXQgc2hvdWxkIGJlIHRoZSBzYW1lIHR5cGUKKyAgICh0ZXh0IG9yIGJ5dGVzKSBhcyAqdXJsc3RyaW5nKiwgZXhjZXB0IHRoYXQgdGhlIGRlZmF1bHQgdmFsdWUgYGAnJ2BgIGlzCisgICBhbHdheXMgYWxsb3dlZCwgYW5kIGlzIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGBgYicnYGAgaWYgYXBwcm9wcmlhdGUuCiAKICAgIElmIHRoZSAqYWxsb3dfZnJhZ21lbnRzKiBhcmd1bWVudCBpcyBmYWxzZSwgZnJhZ21lbnQgaWRlbnRpZmllcnMgYXJlIG5vdAotICAgYWxsb3dlZC4gIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIGFyZ3VtZW50IGlzIDpjb25zdDpgVHJ1ZWAuCisgICByZWNvZ25pemVkLiAgSW5zdGVhZCwgdGhleSBhcmUgcGFyc2VkIGFzIHBhcnQgb2YgdGhlIHBhdGgsIHBhcmFtZXRlcnMKKyAgIG9yIHF1ZXJ5IGNvbXBvbmVudCwgYW5kIDphdHRyOmBmcmFnbWVudGAgaXMgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgaW4KKyAgIHRoZSByZXR1cm4gdmFsdWUuCiAKICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYWN0dWFsbHkgYW4gaW5zdGFuY2Ugb2YgYSBzdWJjbGFzcyBvZiA6Y2xhc3M6YHR1cGxlYC4gIFRoaXMKICAgIGNsYXNzIGhhcyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcmVhZC1vbmx5IGNvbnZlbmllbmNlIGF0dHJpYnV0ZXM6CkBAIC04OSw3ICs5Miw3IEBACiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIHwgQXR0cmlidXRlICAgICAgICB8IEluZGV4IHwgVmFsdWUgICAgICAgICAgICAgICAgICAgIHwgVmFsdWUgaWYgbm90IHByZXNlbnQgfAogICAgKz09PT09PT09PT09PT09PT09PSs9PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT0rCi0gICB8IDphdHRyOmBzY2hlbWVgICAgfCAwICAgICB8IFVSTCBzY2hlbWUgc3BlY2lmaWVyICAgICB8IGVtcHR5IHN0cmluZyAgICAgICAgIHwKKyAgIHwgOmF0dHI6YHNjaGVtZWAgICB8IDAgICAgIHwgVVJMIHNjaGVtZSBzcGVjaWZpZXIgICAgIHwgKnNjaGVtZSogcGFyYW1ldGVyICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IDphdHRyOmBuZXRsb2NgICAgfCAxICAgICB8IE5ldHdvcmsgbG9jYXRpb24gcGFydCAgICB8IGVtcHR5IHN0cmluZyAgICAgICAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMjA1LDcgKzIwOCw3IEBACiAgICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBBdHRyaWJ1dGUgICAgICAgIHwgSW5kZXggfCBWYWx1ZSAgICAgICAgICAgICAgICAgICB8IFZhbHVlIGlmIG5vdCBwcmVzZW50IHwKICAgICs9PT09PT09PT09PT09PT09PT0rPT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT0rCi0gICB8IDphdHRyOmBzY2hlbWVgICAgfCAwICAgICB8IFVSTCBzY2hlbWUgc3BlY2lmaWVyICAgIHwgZW1wdHkgc3RyaW5nICAgICAgICAgfAorICAgfCA6YXR0cjpgc2NoZW1lYCAgIHwgMCAgICAgfCBVUkwgc2NoZW1lIHNwZWNpZmllciAgICB8ICpzY2hlbWUqIHBhcmFtZXRlciAgIHwKICAgICstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgICB8IDphdHRyOmBuZXRsb2NgICAgfCAxICAgICB8IE5ldHdvcmsgbG9jYXRpb24gcGFydCAgIHwgZW1wdHkgc3RyaW5nICAgICAgICAgfAogICAgKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTUxNiwxMCArNTE5LDExIEBACiAuLiBmdW5jdGlvbjo6IHVybGVuY29kZShxdWVyeSwgZG9zZXE9RmFsc2UsIHNhZmU9JycsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKQogCiAgICBDb252ZXJ0IGEgbWFwcGluZyBvYmplY3Qgb3IgYSBzZXF1ZW5jZSBvZiB0d28tZWxlbWVudCB0dXBsZXMsIHdoaWNoIG1heQotICAgZWl0aGVyIGJlIGEgOmNsYXNzOmBzdHJgIG9yIGEgOmNsYXNzOmBieXRlc2AsICB0byBhICJwZXJjZW50LWVuY29kZWQiCi0gICBzdHJpbmcuICBJZiB0aGUgcmVzdWx0YW50IHN0cmluZyBpcyB0byBiZSB1c2VkIGFzIGEgKmRhdGEqIGZvciBQT1NUCi0gICBvcGVyYXRpb24gd2l0aCA6ZnVuYzpgfnVybGxpYi5yZXF1ZXN0LnVybG9wZW5gIGZ1bmN0aW9uLCB0aGVuIGl0IHNob3VsZCBiZQotICAgcHJvcGVybHkgZW5jb2RlZCB0byBieXRlcywgb3RoZXJ3aXNlIGl0IHdvdWxkIHJlc3VsdCBpbiBhIDpleGM6YFR5cGVFcnJvcmAuCisgICBjb250YWluIDpjbGFzczpgc3RyYCBvciA6Y2xhc3M6YGJ5dGVzYCBvYmplY3RzLCB0byBhIHBlcmNlbnQtZW5jb2RlZCBBU0NJSQorICAgdGV4dCBzdHJpbmcuICBJZiB0aGUgcmVzdWx0YW50IHN0cmluZyBpcyB0byBiZSB1c2VkIGFzIGEgKmRhdGEqIGZvciBQT1NUCisgICBvcGVyYXRpb24gd2l0aCB0aGUgOmZ1bmM6YH51cmxsaWIucmVxdWVzdC51cmxvcGVuYCBmdW5jdGlvbiwgdGhlbgorICAgaXQgc2hvdWxkIGJlIGVuY29kZWQgdG8gYnl0ZXMsIG90aGVyd2lzZSBpdCB3b3VsZCByZXN1bHQgaW4gYQorICAgOmV4YzpgVHlwZUVycm9yYC4KIAogICAgVGhlIHJlc3VsdGluZyBzdHJpbmcgaXMgYSBzZXJpZXMgb2YgYGBrZXk9dmFsdWVgYCBwYWlycyBzZXBhcmF0ZWQgYnkgYGAnJidgYAogICAgY2hhcmFjdGVycywgd2hlcmUgYm90aCAqa2V5KiBhbmQgKnZhbHVlKiBhcmUgcXVvdGVkIHVzaW5nIDpmdW5jOmBxdW90ZV9wbHVzYApAQCAtNTMxLDggKzUzNSw5IEBACiAgICB0aGUgdmFsdWUgc2VxdWVuY2UgZm9yIHRoZSBrZXkuICBUaGUgb3JkZXIgb2YgcGFyYW1ldGVycyBpbiB0aGUgZW5jb2RlZAogICAgc3RyaW5nIHdpbGwgbWF0Y2ggdGhlIG9yZGVyIG9mIHBhcmFtZXRlciB0dXBsZXMgaW4gdGhlIHNlcXVlbmNlLgogCi0gICBXaGVuICpxdWVyeSogcGFyYW1ldGVyIGlzIGEgOmNsYXNzOmBzdHJgLCB0aGUgKnNhZmUqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3IqCi0gICBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgZG93biB0byA6ZnVuYzpgcXVvdGVfcGx1c2AgZm9yIGVuY29kaW5nLgorICAgVGhlICpzYWZlKiwgKmVuY29kaW5nKiwgYW5kICplcnJvcnMqIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBkb3duIHRvCisgICA6ZnVuYzpgcXVvdGVfcGx1c2AgKHRoZSAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiBwYXJhbWV0ZXJzIGFyZSBvbmx5IHBhc3NlZAorICAgd2hlbiBhIHF1ZXJ5IGVsZW1lbnQgaXMgYSA6Y2xhc3M6YHN0cmApLgogCiAgICBUbyByZXZlcnNlIHRoaXMgZW5jb2RpbmcgcHJvY2VzcywgOmZ1bmM6YHBhcnNlX3FzYCBhbmQgOmZ1bmM6YHBhcnNlX3FzbGAgYXJlCiAgICBwcm92aWRlZCBpbiB0aGlzIG1vZHVsZSB0byBwYXJzZSBxdWVyeSBzdHJpbmdzIGludG8gUHl0aG9uIGRhdGEgc3RydWN0dXJlcy4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdCBiL0RvYy9saWJyYXJ5L3VybGxpYi5yZXF1ZXN0LnJzdAppbmRleCBmNGY4NjkyLi40NGRiM2UxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS91cmxsaWIucmVxdWVzdC5yc3QKKysrIGIvRG9jL2xpYnJhcnkvdXJsbGliLnJlcXVlc3QucnN0CkBAIC0xMiwxMSArMTIsMTYgQEAKIG9wZW5pbmcgVVJMcyAobW9zdGx5IEhUVFApIGluIGEgY29tcGxleCB3b3JsZCAtLS0gYmFzaWMgYW5kIGRpZ2VzdAogYXV0aGVudGljYXRpb24sIHJlZGlyZWN0aW9ucywgY29va2llcyBhbmQgbW9yZS4KIAorLi4gc2VlYWxzbzo6CisKKyAgICBUaGUgYFJlcXVlc3RzIHBhY2thZ2UgPGh0dHA6Ly9yZXF1ZXN0cy5yZWFkdGhlZG9jcy5vcmcvPmBfCisgICAgaXMgcmVjb21tZW5kZWQgZm9yIGEgaGlnaGVyLWxldmVsIGh0dHAgY2xpZW50IGludGVyZmFjZS4KKwogCiBUaGUgOm1vZDpgdXJsbGliLnJlcXVlc3RgIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOgogCiAKLS4uIGZ1bmN0aW9uOjogdXJsb3Blbih1cmwsIGRhdGE9Tm9uZVssIHRpbWVvdXRdLCAqLCBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGVmYXVsdD1GYWxzZSkKKy4uIGZ1bmN0aW9uOjogdXJsb3Blbih1cmwsIGRhdGE9Tm9uZVssIHRpbWVvdXRdLCAqLCBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGVmYXVsdD1GYWxzZSwgY29udGV4dD1Ob25lKQogCiAgICBPcGVuIHRoZSBVUkwgKnVybCosIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBzdHJpbmcgb3IgYQogICAgOmNsYXNzOmBSZXF1ZXN0YCBvYmplY3QuCkBAIC0zMSwxMyArMzYsOCBAQAogICAgKmRhdGEqIHNob3VsZCBiZSBhIGJ1ZmZlciBpbiB0aGUgc3RhbmRhcmQKICAgIDptaW1ldHlwZTpgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYCBmb3JtYXQuICBUaGUKICAgIDpmdW5jOmB1cmxsaWIucGFyc2UudXJsZW5jb2RlYCBmdW5jdGlvbiB0YWtlcyBhIG1hcHBpbmcgb3Igc2VxdWVuY2Ugb2YKLSAgIDItdHVwbGVzIGFuZCByZXR1cm5zIGEgc3RyaW5nIGluIHRoaXMgZm9ybWF0LiBJdCBzaG91bGQgYmUgZW5jb2RlZCB0byBieXRlcwotICAgYmVmb3JlIGJlaW5nIHVzZWQgYXMgdGhlICpkYXRhKiBwYXJhbWV0ZXIuIFRoZSBjaGFyc2V0IHBhcmFtZXRlciBpbgotICAgYGBDb250ZW50LVR5cGVgYCBoZWFkZXIgbWF5IGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgZW5jb2RpbmcuIElmIGNoYXJzZXQKLSAgIHBhcmFtZXRlciBpcyBub3Qgc2VudCB3aXRoIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLCB0aGUgc2VydmVyIGZvbGxvd2luZyB0aGUKLSAgIEhUVFAgMS4xIHJlY29tbWVuZGF0aW9uIG1heSBhc3N1bWUgdGhhdCB0aGUgZGF0YSBpcyBlbmNvZGVkIGluIElTTy04ODU5LTEKLSAgIGVuY29kaW5nLiBJdCBpcyBhZHZpc2FibGUgdG8gdXNlIGNoYXJzZXQgcGFyYW1ldGVyIHdpdGggZW5jb2RpbmcgdXNlZCBpbgotICAgYGBDb250ZW50LVR5cGVgYCBoZWFkZXIgd2l0aCB0aGUgOmNsYXNzOmBSZXF1ZXN0YC4KKyAgIDItdHVwbGVzIGFuZCByZXR1cm5zIGFuIEFTQ0lJIHRleHQgc3RyaW5nIGluIHRoaXMgZm9ybWF0LiBJdCBzaG91bGQKKyAgIGJlIGVuY29kZWQgdG8gYnl0ZXMgYmVmb3JlIGJlaW5nIHVzZWQgYXMgdGhlICpkYXRhKiBwYXJhbWV0ZXIuCiAKICAgIHVybGxpYi5yZXF1ZXN0IG1vZHVsZSB1c2VzIEhUVFAvMS4xIGFuZCBpbmNsdWRlcyBgYENvbm5lY3Rpb246Y2xvc2VgYCBoZWFkZXIKICAgIGluIGl0cyBIVFRQIHJlcXVlc3RzLgpAQCAtNDcsMjkgKzQ3LDE5IEBACiAgICB0aGUgZ2xvYmFsIGRlZmF1bHQgdGltZW91dCBzZXR0aW5nIHdpbGwgYmUgdXNlZCkuICBUaGlzIGFjdHVhbGx5CiAgICBvbmx5IHdvcmtzIGZvciBIVFRQLCBIVFRQUyBhbmQgRlRQIGNvbm5lY3Rpb25zLgogCisgICBJZiAqY29udGV4dCogaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGEgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgaW5zdGFuY2UKKyAgIGRlc2NyaWJpbmcgdGhlIHZhcmlvdXMgU1NMIG9wdGlvbnMuIFNlZSA6Y2xhc3M6YH5odHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb25gCisgICBmb3IgbW9yZSBkZXRhaWxzLgorCiAgICBUaGUgb3B0aW9uYWwgKmNhZmlsZSogYW5kICpjYXBhdGgqIHBhcmFtZXRlcnMgc3BlY2lmeSBhIHNldCBvZiB0cnVzdGVkCiAgICBDQSBjZXJ0aWZpY2F0ZXMgZm9yIEhUVFBTIHJlcXVlc3RzLiAgKmNhZmlsZSogc2hvdWxkIHBvaW50IHRvIGEgc2luZ2xlCiAgICBmaWxlIGNvbnRhaW5pbmcgYSBidW5kbGUgb2YgQ0EgY2VydGlmaWNhdGVzLCB3aGVyZWFzICpjYXBhdGgqIHNob3VsZAogICAgcG9pbnQgdG8gYSBkaXJlY3Rvcnkgb2YgaGFzaGVkIGNlcnRpZmljYXRlIGZpbGVzLiAgTW9yZSBpbmZvcm1hdGlvbiBjYW4KICAgIGJlIGZvdW5kIGluIDptZXRoOmBzc2wuU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnNgLgogCi0gICBUaGUgKmNhZGVmYXVsdCogcGFyYW1ldGVyIHNwZWNpZmllcyB3aGV0aGVyIHRvIGZhbGwgYmFjayB0byBsb2FkaW5nIGEKLSAgIGRlZmF1bHQgY2VydGlmaWNhdGUgc3RvcmUgZGVmaW5lZCBieSB0aGUgdW5kZXJseWluZyBPcGVuU1NMIGxpYnJhcnkgaWYgdGhlCi0gICAqY2FmaWxlKiBhbmQgKmNhcGF0aCogcGFyYW1ldGVycyBhcmUgb21pdHRlZC4gIFRoaXMgd2lsbCBvbmx5IHdvcmsgb24KLSAgIHNvbWUgbm9uLVdpbmRvd3MgcGxhdGZvcm1zLgorICAgVGhlICpjYWRlZmF1bHQqIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogCi0gICAuLiB3YXJuaW5nOjoKLSAgICAgIElmIG5laXRoZXIgKmNhZmlsZSogbm9yICpjYXBhdGgqIGlzIHNwZWNpZmllZCwgYW5kICpjYWRlZmF1bHQqIGlzIGBgRmFsc2VgYCwKLSAgICAgIGFuIEhUVFBTIHJlcXVlc3Qgd2lsbCBub3QgZG8gYW55IHZlcmlmaWNhdGlvbiBvZiB0aGUgc2VydmVyJ3MKLSAgICAgIGNlcnRpZmljYXRlLgotCi0gICBGb3IgaHR0cCBhbmQgaHR0cHMgdXJscywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEKLSAgIDpjbGFzczpgaHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlYCBvYmplY3Qgd2hpY2ggaGFzIHRoZSBmb2xsb3dpbmcKLSAgIDpyZWY6YGh0dHByZXNwb25zZS1vYmplY3RzYCBtZXRob2RzLgotCi0gICBGb3IgZnRwLCBmaWxlLCBhbmQgZGF0YSB1cmxzIGFuZCByZXF1ZXN0cyBleHBsaWNpdHkgaGFuZGxlZCBieSBsZWdhY3kKLSAgIDpjbGFzczpgVVJMb3BlbmVyYCBhbmQgOmNsYXNzOmBGYW5jeVVSTG9wZW5lcmAgY2xhc3NlcywgdGhpcyBmdW5jdGlvbgotICAgcmV0dXJucyBhIDpjbGFzczpgdXJsbGliLnJlc3BvbnNlLmFkZGluZm91cmxgIG9iamVjdCB3aGljaCBjYW4gd29yayBhcworICAgVGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhbiBvYmplY3Qgd2hpY2ggY2FuIHdvcmsgYXMKICAgIDp0ZXJtOmBjb250ZXh0IG1hbmFnZXJgIGFuZCBoYXMgbWV0aG9kcyBzdWNoIGFzCiAKICAgICogOm1ldGg6YH51cmxsaWIucmVzcG9uc2UuYWRkaW5mb3VybC5nZXR1cmxgIC0tLSByZXR1cm4gdGhlIFVSTCBvZiB0aGUgcmVzb3VyY2UgcmV0cmlldmVkLApAQCAtODEsNiArNzEsMTggQEAKIAogICAgKiA6bWV0aDpgfnVybGxpYi5yZXNwb25zZS5hZGRpbmZvdXJsLmdldGNvZGVgIC0tIHJldHVybiB0aGUgSFRUUCBzdGF0dXMgY29kZSBvZiB0aGUgcmVzcG9uc2UuCiAKKyAgIEZvciBodHRwIGFuZCBodHRwcyB1cmxzLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYQorICAgOmNsYXNzOmBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2VgIG9iamVjdCBzbGlnaHRseSBtb2RpZmllZC4gSW4gYWRkaXRpb24KKyAgIHRvIHRoZSB0aHJlZSBuZXcgbWV0aG9kcyBhYm92ZSwgdGhlIG1zZyBhdHRyaWJ1dGUgY29udGFpbnMgdGhlCisgICBzYW1lIGluZm9ybWF0aW9uIGFzIHRoZSA6YXR0cjpgfmh0dHAuY2xpZW50LkhUVFBSZXNwb25zZS5yZWFzb25gCisgICBhdHRyaWJ1dGUgLS0tIHRoZSByZWFzb24gcGhyYXNlIHJldHVybmVkIGJ5IHNlcnZlciAtLS0gaW5zdGVhZCBvZgorICAgdGhlIHJlc3BvbnNlIGhlYWRlcnMgYXMgaXQgaXMgc3BlY2lmaWVkIGluIHRoZSBkb2N1bWVudGF0aW9uIGZvcgorICAgOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUFJlc3BvbnNlYC4KKworICAgRm9yIGZ0cCwgZmlsZSwgYW5kIGRhdGEgdXJscyBhbmQgcmVxdWVzdHMgZXhwbGljaXRseSBoYW5kbGVkIGJ5IGxlZ2FjeQorICAgOmNsYXNzOmBVUkxvcGVuZXJgIGFuZCA6Y2xhc3M6YEZhbmN5VVJMb3BlbmVyYCBjbGFzc2VzLCB0aGlzIGZ1bmN0aW9uCisgICByZXR1cm5zIGEgOmNsYXNzOmB1cmxsaWIucmVzcG9uc2UuYWRkaW5mb3VybGAgb2JqZWN0LgorCiAgICBSYWlzZXMgOmV4YzpgfnVybGxpYi5lcnJvci5VUkxFcnJvcmAgb24gZXJyb3JzLgogCiAgICBOb3RlIHRoYXQgYGBOb25lYGAgbWF5IGJlIHJldHVybmVkIGlmIG5vIGhhbmRsZXIgaGFuZGxlcyB0aGUgcmVxdWVzdCAodGhvdWdoCkBAIC0xMTEsNiArMTEzLDkgQEAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICAqY2FkZWZhdWx0KiB3YXMgYWRkZWQuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40LjMKKyAgICAgICpjb250ZXh0KiB3YXMgYWRkZWQuCisKIC4uIGZ1bmN0aW9uOjogaW5zdGFsbF9vcGVuZXIob3BlbmVyKQogCiAgICBJbnN0YWxsIGFuIDpjbGFzczpgT3BlbmVyRGlyZWN0b3JgIGluc3RhbmNlIGFzIHRoZSBkZWZhdWx0IGdsb2JhbCBvcGVuZXIuCkBAIC0xODMsMTYgKzE4OCw5IEBACiAgICB0aGUgb25seSBvbmVzIHRoYXQgdXNlICpkYXRhKjsgdGhlIEhUVFAgcmVxdWVzdCB3aWxsIGJlIGEgUE9TVCBpbnN0ZWFkIG9mIGEKICAgIEdFVCB3aGVuIHRoZSAqZGF0YSogcGFyYW1ldGVyIGlzIHByb3ZpZGVkLiAgKmRhdGEqIHNob3VsZCBiZSBhIGJ1ZmZlciBpbiB0aGUKICAgIHN0YW5kYXJkIDptaW1ldHlwZTpgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkYCBmb3JtYXQuCi0KICAgIFRoZSA6ZnVuYzpgdXJsbGliLnBhcnNlLnVybGVuY29kZWAgZnVuY3Rpb24gdGFrZXMgYSBtYXBwaW5nIG9yIHNlcXVlbmNlIG9mCi0gICAyLXR1cGxlcyBhbmQgcmV0dXJucyBhIHN0cmluZyBpbiB0aGlzIGZvcm1hdC4gSXQgc2hvdWxkIGJlIGVuY29kZWQgdG8gYnl0ZXMKLSAgIGJlZm9yZSBiZWluZyB1c2VkIGFzIHRoZSAqZGF0YSogcGFyYW1ldGVyLiBUaGUgY2hhcnNldCBwYXJhbWV0ZXIgaW4KLSAgIGBgQ29udGVudC1UeXBlYGAgaGVhZGVyIG1heSBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGVuY29kaW5nLiBJZiBjaGFyc2V0Ci0gICBwYXJhbWV0ZXIgaXMgbm90IHNlbnQgd2l0aCB0aGUgQ29udGVudC1UeXBlIGhlYWRlciwgdGhlIHNlcnZlciBmb2xsb3dpbmcgdGhlCi0gICBIVFRQIDEuMSByZWNvbW1lbmRhdGlvbiBtYXkgYXNzdW1lIHRoYXQgdGhlIGRhdGEgaXMgZW5jb2RlZCBpbiBJU08tODg1OS0xCi0gICBlbmNvZGluZy4gSXQgaXMgYWR2aXNhYmxlIHRvIHVzZSBjaGFyc2V0IHBhcmFtZXRlciB3aXRoIGVuY29kaW5nIHVzZWQgaW4KLSAgIGBgQ29udGVudC1UeXBlYGAgaGVhZGVyIHdpdGggdGhlIDpjbGFzczpgUmVxdWVzdGAuCi0KKyAgIDItdHVwbGVzIGFuZCByZXR1cm5zIGFuIEFTQ0lJIHN0cmluZyBpbiB0aGlzIGZvcm1hdC4gSXQgc2hvdWxkIGJlCisgICBlbmNvZGVkIHRvIGJ5dGVzIGJlZm9yZSBiZWluZyB1c2VkIGFzIHRoZSAqZGF0YSogcGFyYW1ldGVyLgogCiAgICAqaGVhZGVycyogc2hvdWxkIGJlIGEgZGljdGlvbmFyeSwgYW5kIHdpbGwgYmUgdHJlYXRlZCBhcyBpZgogICAgOm1ldGg6YGFkZF9oZWFkZXJgIHdhcyBjYWxsZWQgd2l0aCBlYWNoIGtleSBhbmQgdmFsdWUgYXMgYXJndW1lbnRzLgpAQCAtMjA1LDcgKzIwMyw3IEBACiAgICBgYCJQeXRob24tdXJsbGliLzIuNiJgYCAob24gUHl0aG9uIDIuNikuCiAKICAgIEFuIGV4YW1wbGUgb2YgdXNpbmcgYGBDb250ZW50LVR5cGVgYCBoZWFkZXIgd2l0aCAqZGF0YSogYXJndW1lbnQgd291bGQgYmUKLSAgIHNlbmRpbmcgYSBkaWN0aW9uYXJ5IGxpa2UgYGB7IkNvbnRlbnQtVHlwZSI6IiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCJ9YGAKKyAgIHNlbmRpbmcgYSBkaWN0aW9uYXJ5IGxpa2UgYGB7IkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQifWBgLgogCiAgICBUaGUgZmluYWwgdHdvIGFyZ3VtZW50cyBhcmUgb25seSBvZiBpbnRlcmVzdCBmb3IgY29ycmVjdCBoYW5kbGluZwogICAgb2YgdGhpcmQtcGFydHkgSFRUUCBjb29raWVzOgpAQCAtMjI2LDEyICsyMjQsMTcgQEAKICAgIGZldGNoaW5nIG9mIHRoZSBpbWFnZSwgdGhpcyBzaG91bGQgYmUgdHJ1ZS4KIAogICAgKm1ldGhvZCogc2hvdWxkIGJlIGEgc3RyaW5nIHRoYXQgaW5kaWNhdGVzIHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIHRoYXQKLSAgIHdpbGwgYmUgdXNlZCAoZS5nLiBgYCdIRUFEJ2BgKS4gIEl0cyB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlCisgICB3aWxsIGJlIHVzZWQgKGUuZy4gYGAnSEVBRCdgYCkuICBJZiBwcm92aWRlZCwgaXRzIHZhbHVlIGlzIHN0b3JlZCBpbiB0aGUKICAgIDphdHRyOmB+UmVxdWVzdC5tZXRob2RgIGF0dHJpYnV0ZSBhbmQgaXMgdXNlZCBieSA6bWV0aDpgZ2V0X21ldGhvZCgpYC4KKyAgIFN1YmNsYXNzZXMgbWF5IGluZGljYXRlIGEgZGVmYXVsdCBtZXRob2QgYnkgc2V0dGluZyB0aGUKKyAgIDphdHRyOmB+UmVxdWVzdC5tZXRob2RgIGF0dHJpYnV0ZSBpbiB0aGUgY2xhc3MgaXRzZWxmLgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMwogICAgICAgOmF0dHI6YFJlcXVlc3QubWV0aG9kYCBhcmd1bWVudCBpcyBhZGRlZCB0byB0aGUgUmVxdWVzdCBjbGFzcy4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIERlZmF1bHQgOmF0dHI6YFJlcXVlc3QubWV0aG9kYCBtYXkgYmUgaW5kaWNhdGVkIGF0IHRoZSBjbGFzcyBsZXZlbC4KKwogCiAuLiBjbGFzczo6IE9wZW5lckRpcmVjdG9yKCkKIApAQCAtMzY5LDYgKzM3MiwxMSBAQAogCiAgICBPcGVuIGxvY2FsIGZpbGVzLgogCisuLiBjbGFzczo6IERhdGFIYW5kbGVyKCkKKworICAgT3BlbiBkYXRhIFVSTHMuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAogCiAuLiBjbGFzczo6IEZUUEhhbmRsZXIoKQogCkBAIC00MDQsNiArNDEyLDEyIEBACiAKICAgIFRoZSBvcmlnaW5hbCBVUkwgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKworICAgUmVxdWVzdC5mdWxsX3VybCBpcyBhIHByb3BlcnR5IHdpdGggc2V0dGVyLCBnZXR0ZXIgYW5kIGEgZGVsZXRlci4gR2V0dGluZworICAgOmF0dHI6YH5SZXF1ZXN0LmZ1bGxfdXJsYCByZXR1cm5zIHRoZSBvcmlnaW5hbCByZXF1ZXN0IFVSTCB3aXRoIHRoZQorICAgZnJhZ21lbnQsIGlmIGl0IHdhcyBwcmVzZW50LgorCiAuLiBhdHRyaWJ1dGU6OiBSZXF1ZXN0LnR5cGUKIAogICAgVGhlIFVSSSBzY2hlbWUuCkBAIC00MjYsNiArNDQwLDEwIEBACiAKICAgIFRoZSBlbnRpdHkgYm9keSBmb3IgdGhlIHJlcXVlc3QsIG9yIE5vbmUgaWYgbm90IHNwZWNpZmllZC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIENoYW5naW5nIHZhbHVlIG9mIDphdHRyOmBSZXF1ZXN0LmRhdGFgIG5vdyBkZWxldGVzICJDb250ZW50LUxlbmd0aCIKKyAgICAgIGhlYWRlciBpZiBpdCB3YXMgcHJldmlvdXNseSBzZXQgb3IgY2FsY3VsYXRlZC4KKwogLi4gYXR0cmlidXRlOjogUmVxdWVzdC51bnZlcmlmaWFibGUKIAogICAgYm9vbGVhbiwgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgdW52ZXJpZmlhYmxlIGFzIGRlZmluZWQKQEAgLTQzMywxMyArNDUxLDIwIEBACiAKIC4uIGF0dHJpYnV0ZTo6IFJlcXVlc3QubWV0aG9kCiAKLSAgIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIHVzZS4gIFRoaXMgdmFsdWUgaXMgdXNlZCBieQotICAgOm1ldGg6YH5SZXF1ZXN0LmdldF9tZXRob2RgIHRvIG92ZXJyaWRlIHRoZSBjb21wdXRlZCBIVFRQIHJlcXVlc3QKLSAgIG1ldGhvZCB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSByZXR1cm5lZC4gIFRoaXMgYXR0cmlidXRlIGlzIGluaXRpYWxpemVkIHdpdGgKLSAgIHRoZSB2YWx1ZSBvZiB0aGUgKm1ldGhvZCogYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KKyAgIFRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kIHRvIHVzZS4gIEJ5IGRlZmF1bHQgaXRzIHZhbHVlIGlzIDpjb25zdDpgTm9uZWAsCisgICB3aGljaCBtZWFucyB0aGF0IDptZXRoOmB+UmVxdWVzdC5nZXRfbWV0aG9kYCB3aWxsIGRvIGl0cyBub3JtYWwgY29tcHV0YXRpb24KKyAgIG9mIHRoZSBtZXRob2QgdG8gYmUgdXNlZC4gIEl0cyB2YWx1ZSBjYW4gYmUgc2V0ICh0aHVzIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHQKKyAgIGNvbXB1dGF0aW9uIGluIDptZXRoOmB+UmVxdWVzdC5nZXRfbWV0aG9kYCkgZWl0aGVyIGJ5IHByb3ZpZGluZyBhIGRlZmF1bHQKKyAgIHZhbHVlIGJ5IHNldHRpbmcgaXQgYXQgdGhlIGNsYXNzIGxldmVsIGluIGEgOmNsYXNzOmBSZXF1ZXN0YCBzdWJjbGFzcywgb3IgYnkKKyAgIHBhc3NpbmcgYSB2YWx1ZSBpbiB0byB0aGUgOmNsYXNzOmBSZXF1ZXN0YCBjb25zdHJ1Y3RvciB2aWEgdGhlICptZXRob2QqCisgICBhcmd1bWVudC4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBIGRlZmF1bHQgdmFsdWUgY2FuIG5vdyBiZSBzZXQgaW4gc3ViY2xhc3NlczsgcHJldmlvdXNseSBpdCBjb3VsZCBvbmx5CisgICAgICBiZSBzZXQgdmlhIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudC4KKwogCiAuLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9tZXRob2QoKQogCkBAIC00NzQsMTAgKzQ5OSwyMiBAQAogICAgdW5yZWRpcmVjdGVkKS4KIAogCisuLiBtZXRob2Q6OiBSZXF1ZXN0LnJlbW92ZV9oZWFkZXIoaGVhZGVyKQorCisgICBSZW1vdmUgbmFtZWQgaGVhZGVyIGZyb20gdGhlIHJlcXVlc3QgaW5zdGFuY2UgKGJvdGggZnJvbSByZWd1bGFyIGFuZAorICAgdW5yZWRpcmVjdGVkIGhlYWRlcnMpLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9mdWxsX3VybCgpCiAKICAgIFJldHVybiB0aGUgVVJMIGdpdmVuIGluIHRoZSBjb25zdHJ1Y3Rvci4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKworICAgUmV0dXJucyA6YXR0cjpgUmVxdWVzdC5mdWxsX3VybGAKKwogCiAuLiBtZXRob2Q6OiBSZXF1ZXN0LnNldF9wcm94eShob3N0LCB0eXBlKQogCkBAIC00ODYsNTQgKzUyMyw2IEBACiAgICBVUkwgZ2l2ZW4gaW4gdGhlIGNvbnN0cnVjdG9yLgogCiAKLS4uIG1ldGhvZDo6IFJlcXVlc3QuYWRkX2RhdGEoZGF0YSkKLQotICAgU2V0IHRoZSA6Y2xhc3M6YFJlcXVlc3RgIGRhdGEgdG8gKmRhdGEqLiAgVGhpcyBpcyBpZ25vcmVkIGJ5IGFsbCBoYW5kbGVycyBleGNlcHQKLSAgIEhUVFAgaGFuZGxlcnMgLS0tIGFuZCB0aGVyZSBpdCBzaG91bGQgYmUgYSBieXRlIHN0cmluZywgYW5kIHdpbGwgY2hhbmdlIHRoZQotICAgcmVxdWVzdCB0byBiZSBgYFBPU1RgYCByYXRoZXIgdGhhbiBgYEdFVGBgLiAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZQotICAgOmF0dHI6YFJlcXVlc3QuZGF0YWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0Lmhhc19kYXRhKCkKLQotICAgUmV0dXJuIHdoZXRoZXIgdGhlIGluc3RhbmNlIGhhcyBhIG5vbi1cIGBgTm9uZWBgIGRhdGEuIERlcHJlY2F0ZWQgaW4gMy4zLAotICAgdXNlIDphdHRyOmBSZXF1ZXN0LmRhdGFgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfZGF0YSgpCi0KLSAgIFJldHVybiB0aGUgaW5zdGFuY2UncyBkYXRhLiAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZSA6YXR0cjpgUmVxdWVzdC5kYXRhYC4KLQotICAgLi4gZGVwcmVjYXRlZC1yZW1vdmVkOjogMy4zIDMuNAotCi0KLS4uIG1ldGhvZDo6IFJlcXVlc3QuZ2V0X3R5cGUoKQotCi0gICBSZXR1cm4gdGhlIHR5cGUgb2YgdGhlIFVSTCAtLS0gYWxzbyBrbm93biBhcyB0aGUgc2NoZW1lLiAgRGVwcmVjYXRlZCBpbiAzLjMsCi0gICB1c2UgOmF0dHI6YFJlcXVlc3QudHlwZWAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9ob3N0KCkKLQotICAgUmV0dXJuIHRoZSBob3N0IHRvIHdoaWNoIGEgY29ubmVjdGlvbiB3aWxsIGJlIG1hZGUuIERlcHJlY2F0ZWQgaW4gMy4zLCB1c2UKLSAgIDphdHRyOmBSZXF1ZXN0Lmhvc3RgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40Ci0KLQotLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfc2VsZWN0b3IoKQotCi0gICBSZXR1cm4gdGhlIHNlbGVjdG9yIC0tLSB0aGUgcGFydCBvZiB0aGUgVVJMIHRoYXQgaXMgc2VudCB0byB0aGUgc2VydmVyLgotICAgRGVwcmVjYXRlZCBpbiAzLjMsIHVzZSA6YXR0cjpgUmVxdWVzdC5zZWxlY3RvcmAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQogLi4gbWV0aG9kOjogUmVxdWVzdC5nZXRfaGVhZGVyKGhlYWRlcl9uYW1lLCBkZWZhdWx0PU5vbmUpCiAKICAgIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGdpdmVuIGhlYWRlci4gSWYgdGhlIGhlYWRlciBpcyBub3QgcHJlc2VudCwgcmV0dXJuCkBAIC01NDQsMjUgKzUzMywxMCBAQAogCiAgICBSZXR1cm4gYSBsaXN0IG9mIHR1cGxlcyAoaGVhZGVyX25hbWUsIGhlYWRlcl92YWx1ZSkgb2YgdGhlIFJlcXVlc3QgaGVhZGVycy4KIAotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LnNldF9wcm94eShob3N0LCB0eXBlKQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmdldF9vcmlnaW5fcmVxX2hvc3QoKQotCi0gICBSZXR1cm4gdGhlIHJlcXVlc3QtaG9zdCBvZiB0aGUgb3JpZ2luIHRyYW5zYWN0aW9uLCBhcyBkZWZpbmVkIGJ5Ci0gICA6cmZjOmAyOTY1YC4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDpjbGFzczpgUmVxdWVzdGAgY29uc3RydWN0b3IuCi0gICBEZXByZWNhdGVkIGluIDMuMywgdXNlIDphdHRyOmBSZXF1ZXN0Lm9yaWdpbl9yZXFfaG9zdGAuCi0KLSAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuMyAzLjQKLQotCi0uLiBtZXRob2Q6OiBSZXF1ZXN0LmlzX3VudmVyaWZpYWJsZSgpCi0KLSAgIFJldHVybiB3aGV0aGVyIHRoZSByZXF1ZXN0IGlzIHVudmVyaWZpYWJsZSwgYXMgZGVmaW5lZCBieSBSRkMgMjk2NS4gU2VlIHRoZQotICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDpjbGFzczpgUmVxdWVzdGAgY29uc3RydWN0b3IuICBEZXByZWNhdGVkIGluIDMuMywgdXNlCi0gICA6YXR0cjpgUmVxdWVzdC51bnZlcmlmaWFibGVgLgotCi0gICAuLiBkZXByZWNhdGVkLXJlbW92ZWQ6OiAzLjMgMy40CisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIHJlcXVlc3QgbWV0aG9kcyBhZGRfZGF0YSwgaGFzX2RhdGEsIGdldF9kYXRhLCBnZXRfdHlwZSwgZ2V0X2hvc3QsCisgICBnZXRfc2VsZWN0b3IsIGdldF9vcmlnaW5fcmVxX2hvc3QgYW5kIGlzX3VudmVyaWZpYWJsZSB0aGF0IHdlcmUgZGVwcmVjYXRlZAorICAgc2luY2UgMy4zIGhhdmUgYmVlbiByZW1vdmVkLgogCiAKIC4uIF9vcGVuZXItZGlyZWN0b3Itb2JqZWN0czoKQEAgLTk5Niw2ICs5NzAsMjEgQEAKICAgICAgIGhvc3RuYW1lIGlzIGdpdmVuLCBhbiA6ZXhjOmB+dXJsbGliLmVycm9yLlVSTEVycm9yYCBpcyByYWlzZWQuCiAKIAorLi4gX2RhdGEtaGFuZGxlci1vYmplY3RzOgorCitEYXRhSGFuZGxlciBPYmplY3RzCistLS0tLS0tLS0tLS0tLS0tLS0tCisKKy4uIG1ldGhvZDo6IERhdGFIYW5kbGVyLmRhdGFfb3BlbihyZXEpCisKKyAgIFJlYWQgYSBkYXRhIFVSTC4gVGhpcyBraW5kIG9mIFVSTCBjb250YWlucyB0aGUgY29udGVudCBlbmNvZGVkIGluIHRoZSBVUkwKKyAgIGl0c2VsZi4gVGhlIGRhdGEgVVJMIHN5bnRheCBpcyBzcGVjaWZpZWQgaW4gOnJmYzpgMjM5N2AuIFRoaXMgaW1wbGVtZW50YXRpb24KKyAgIGlnbm9yZXMgd2hpdGUgc3BhY2VzIGluIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMcyBzbyB0aGUgVVJMIG1heSBiZSB3cmFwcGVkCisgICBpbiB3aGF0ZXZlciBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLiBCdXQgZXZlbiB0aG91Z2ggc29tZSBicm93c2VycyBkb24ndAorICAgbWluZCBhYm91dCBhIG1pc3NpbmcgcGFkZGluZyBhdCB0aGUgZW5kIG9mIGEgYmFzZTY0IGVuY29kZWQgZGF0YSBVUkwsIHRoaXMKKyAgIGltcGxlbWVudGF0aW9uIHdpbGwgcmFpc2UgYW4gOmV4YzpgVmFsdWVFcnJvcmAgaW4gdGhhdCBjYXNlLgorCisKIC4uIF9mdHAtaGFuZGxlci1vYmplY3RzOgogCiBGVFBIYW5kbGVyIE9iamVjdHMKQEAgLTEwNzEsOCArMTA2MCw5IEBACiBpdC4gOjoKIAogICAgPj4+IGltcG9ydCB1cmxsaWIucmVxdWVzdAotICAgPj4+IGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCdodHRwOi8vd3d3LnB5dGhvbi5vcmcvJykKLSAgID4+PiBwcmludChmLnJlYWQoMzAwKSkKKyAgID4+PiB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8nKSBhcyBmOgorICAgLi4uICAgICBwcmludChmLnJlYWQoMzAwKSkKKyAgIC4uLgogICAgYic8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIgogICAgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQiPlxuXG5cbjxodG1sCiAgICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIgeG1sOmxhbmc9ImVuIiBsYW5nPSJlbiI+XG5cbjxoZWFkPlxuCkBAIC0xMDg5LDcgKzEwNzksNyBAQAogdGhlIHZhcmlvdXMgd2F5cyBpbiB3aGljaCBhIChYKUhUTUwgb3IgYSBYTUwgZG9jdW1lbnQgY291bGQgaGF2ZSBzcGVjaWZpZWQgaXRzCiBlbmNvZGluZyBpbmZvcm1hdGlvbi4KIAotQXMgdGhlIHB5dGhvbi5vcmcgd2Vic2l0ZSB1c2VzICp1dGYtOCogZW5jb2RpbmcgYXMgc3BlY2lmaWVkIGluIGl0J3MgbWV0YSB0YWcsIHdlCitBcyB0aGUgcHl0aG9uLm9yZyB3ZWJzaXRlIHVzZXMgKnV0Zi04KiBlbmNvZGluZyBhcyBzcGVjaWZpZWQgaW4gaXRzIG1ldGEgdGFnLCB3ZQogd2lsbCB1c2UgdGhlIHNhbWUgZm9yIGRlY29kaW5nIHRoZSBieXRlcyBvYmplY3QuIDo6CiAKICAgID4+PiB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oJ2h0dHA6Ly93d3cucHl0aG9uLm9yZy8nKSBhcyBmOgpAQCAtMTExNCw4ICsxMTA0LDkgQEAKICAgID4+PiBpbXBvcnQgdXJsbGliLnJlcXVlc3QKICAgID4+PiByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHVybD0naHR0cHM6Ly9sb2NhbGhvc3QvY2dpLWJpbi90ZXN0LmNnaScsCiAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgIGRhdGE9YidUaGlzIGRhdGEgaXMgcGFzc2VkIHRvIHN0ZGluIG9mIHRoZSBDR0knKQotICAgPj4+IGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKLSAgID4+PiBwcmludChmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykpCisgICA+Pj4gd2l0aCB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkgYXMgZjoKKyAgIC4uLiAgICAgcHJpbnQoZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpKQorICAgLi4uCiAgICBHb3QgRGF0YTogIlRoaXMgZGF0YSBpcyBwYXNzZWQgdG8gc3RkaW4gb2YgdGhlIENHSSIKIAogVGhlIGNvZGUgZm9yIHRoZSBzYW1wbGUgQ0dJIHVzZWQgaW4gdGhlIGFib3ZlIGV4YW1wbGUgaXM6OgpAQCAtMTEyMywxNCArMTExNCwxNSBAQAogICAgIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAgICBpbXBvcnQgc3lzCiAgICBkYXRhID0gc3lzLnN0ZGluLnJlYWQoKQotICAgcHJpbnQoJ0NvbnRlbnQtdHlwZTogdGV4dC1wbGFpblxuXG5Hb3QgRGF0YTogIiVzIicgJSBkYXRhKQorICAgcHJpbnQoJ0NvbnRlbnQtdHlwZTogdGV4dC9wbGFpblxuXG5Hb3QgRGF0YTogIiVzIicgJSBkYXRhKQogCiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgZG9pbmcgYSBgYFBVVGBgIHJlcXVlc3QgdXNpbmcgOmNsYXNzOmBSZXF1ZXN0YDo6CiAKICAgICBpbXBvcnQgdXJsbGliLnJlcXVlc3QKICAgICBEQVRBPWInc29tZSBkYXRhJwogICAgIHJlcSA9IHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QodXJsPSdodHRwOi8vbG9jYWxob3N0OjgwODAnLCBkYXRhPURBVEEsbWV0aG9kPSdQVVQnKQotICAgIGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKKyAgICB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4ocmVxKSBhcyBmOgorICAgICAgICBwYXNzCiAgICAgcHJpbnQoZi5zdGF0dXMpCiAgICAgcHJpbnQoZi5yZWFzb24pCiAKQEAgLTExODQsNyArMTE3Niw3IEBACiAgICBvcGVuZXIub3BlbignaHR0cDovL3d3dy5leGFtcGxlLmNvbS8nKQogCiBBbHNvLCByZW1lbWJlciB0aGF0IGEgZmV3IHN0YW5kYXJkIGhlYWRlcnMgKDptYWlsaGVhZGVyOmBDb250ZW50LUxlbmd0aGAsCi06bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCB3aXRob3V0IGNoYXJzZXQgcGFyYW1ldGVyIGFuZCA6bWFpbGhlYWRlcjpgSG9zdGApCis6bWFpbGhlYWRlcjpgQ29udGVudC1UeXBlYCBhbmQgOm1haWxoZWFkZXI6YEhvc3RgKQogYXJlIGFkZGVkIHdoZW4gdGhlIDpjbGFzczpgUmVxdWVzdGAgaXMgcGFzc2VkIHRvIDpmdW5jOmB1cmxvcGVuYCAob3IKIDptZXRoOmBPcGVuZXJEaXJlY3Rvci5vcGVuYCkuCiAKQEAgLTExOTYsOCArMTE4OCwxMCBAQAogICAgPj4+IGltcG9ydCB1cmxsaWIucmVxdWVzdAogICAgPj4+IGltcG9ydCB1cmxsaWIucGFyc2UKICAgID4+PiBwYXJhbXMgPSB1cmxsaWIucGFyc2UudXJsZW5jb2RlKHsnc3BhbSc6IDEsICdlZ2dzJzogMiwgJ2JhY29uJzogMH0pCi0gICA+Pj4gZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oImh0dHA6Ly93d3cubXVzaS1jYWwuY29tL2NnaS1iaW4vcXVlcnk/JXMiICUgcGFyYW1zKQotICAgPj4+IHByaW50KGYucmVhZCgpLmRlY29kZSgndXRmLTgnKSkKKyAgID4+PiB1cmwgPSAiaHR0cDovL3d3dy5tdXNpLWNhbC5jb20vY2dpLWJpbi9xdWVyeT8lcyIgJSBwYXJhbXMKKyAgID4+PiB3aXRoIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4odXJsKSBhcyBmOgorICAgLi4uICAgICBwcmludChmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykpCisgICAuLi4KIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgdGhlIGBgUE9TVGBgIG1ldGhvZCBpbnN0ZWFkLiBOb3RlIHRoYXQgcGFyYW1zIG91dHB1dAogZnJvbSB1cmxlbmNvZGUgaXMgZW5jb2RlZCB0byBieXRlcyBiZWZvcmUgaXQgaXMgc2VudCB0byB1cmxvcGVuIGFzIGRhdGE6OgpAQCAtMTIwNSwxMiArMTE5OSwxMCBAQAogICAgPj4+IGltcG9ydCB1cmxsaWIucmVxdWVzdAogICAgPj4+IGltcG9ydCB1cmxsaWIucGFyc2UKICAgID4+PiBkYXRhID0gdXJsbGliLnBhcnNlLnVybGVuY29kZSh7J3NwYW0nOiAxLCAnZWdncyc6IDIsICdiYWNvbic6IDB9KQotICAgPj4+IGRhdGEgPSBkYXRhLmVuY29kZSgndXRmLTgnKQotICAgPj4+IHJlcXVlc3QgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KCJodHRwOi8vcmVxdWVzdGIuaW4veHJibDgyeHIiKQotICAgPj4+ICMgYWRkaW5nIGNoYXJzZXQgcGFyYW1ldGVyIHRvIHRoZSBDb250ZW50LVR5cGUgaGVhZGVyLgotICAgPj4+IHJlcXVlc3QuYWRkX2hlYWRlcigiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiKQotICAgPj4+IGYgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcXVlc3QsIGRhdGEpCi0gICA+Pj4gcHJpbnQoZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpKQorICAgPj4+IGRhdGEgPSBkYXRhLmVuY29kZSgnYXNjaWknKQorICAgPj4+IHdpdGggdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3JlcXVlc3RiLmluL3hyYmw4MnhyIiwgZGF0YSkgYXMgZjoKKyAgIC4uLiAgICAgcHJpbnQoZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpKQorICAgLi4uCiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSB1c2VzIGFuIGV4cGxpY2l0bHkgc3BlY2lmaWVkIEhUVFAgcHJveHksIG92ZXJyaWRpbmcKIGVudmlyb25tZW50IHNldHRpbmdzOjoKQEAgLTEyMTgsMTUgKzEyMTAsMTcgQEAKICAgID4+PiBpbXBvcnQgdXJsbGliLnJlcXVlc3QKICAgID4+PiBwcm94aWVzID0geydodHRwJzogJ2h0dHA6Ly9wcm94eS5leGFtcGxlLmNvbTo4MDgwLyd9CiAgICA+Pj4gb3BlbmVyID0gdXJsbGliLnJlcXVlc3QuRmFuY3lVUkxvcGVuZXIocHJveGllcykKLSAgID4+PiBmID0gb3BlbmVyLm9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZyIpCi0gICA+Pj4gZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICA+Pj4gd2l0aCBvcGVuZXIub3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnIikgYXMgZjoKKyAgIC4uLiAgICAgZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAuLi4KIAogVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgbm8gcHJveGllcyBhdCBhbGwsIG92ZXJyaWRpbmcgZW52aXJvbm1lbnQgc2V0dGluZ3M6OgogCiAgICA+Pj4gaW1wb3J0IHVybGxpYi5yZXF1ZXN0CiAgICA+Pj4gb3BlbmVyID0gdXJsbGliLnJlcXVlc3QuRmFuY3lVUkxvcGVuZXIoe30pCi0gICA+Pj4gZiA9IG9wZW5lci5vcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikKLSAgID4+PiBmLnJlYWQoKS5kZWNvZGUoJ3V0Zi04JykKKyAgID4+PiB3aXRoIG9wZW5lci5vcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikgYXMgZjoKKyAgIC4uLiAgICAgZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAuLi4KIAogCiBMZWdhY3kgaW50ZXJmYWNlCkBAIC0xMzMyLDcgKzEzMjYsNyBAQAogICAgIC4uIG1ldGhvZDo6IHJldHJpZXZlKHVybCwgZmlsZW5hbWU9Tm9uZSwgcmVwb3J0aG9vaz1Ob25lLCBkYXRhPU5vbmUpCiAKICAgICAgICBSZXRyaWV2ZXMgdGhlIGNvbnRlbnRzIG9mICp1cmwqIGFuZCBwbGFjZXMgaXQgaW4gKmZpbGVuYW1lKi4gIFRoZSByZXR1cm4gdmFsdWUKLSAgICAgICBpcyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYSBsb2NhbCBmaWxlbmFtZSBhbmQgZWl0aGVyIGEKKyAgICAgICBpcyBhIHR1cGxlIGNvbnNpc3Rpbmcgb2YgYSBsb2NhbCBmaWxlbmFtZSBhbmQgZWl0aGVyIGFuCiAgICAgICAgOmNsYXNzOmBlbWFpbC5tZXNzYWdlLk1lc3NhZ2VgIG9iamVjdCBjb250YWluaW5nIHRoZSByZXNwb25zZSBoZWFkZXJzIChmb3IgcmVtb3RlCiAgICAgICAgVVJMcykgb3IgYGBOb25lYGAgKGZvciBsb2NhbCBVUkxzKS4gIFRoZSBjYWxsZXIgbXVzdCB0aGVuIG9wZW4gYW5kIHJlYWQgdGhlCiAgICAgICAgY29udGVudHMgb2YgKmZpbGVuYW1lKi4gIElmICpmaWxlbmFtZSogaXMgbm90IGdpdmVuIGFuZCB0aGUgVVJMIHJlZmVycyB0byBhCkBAIC0xNDExLDcgKzE0MDUsOSBAQAogICAgICBwYWlyOiBGVFA7IHByb3RvY29sCiAKICogQ3VycmVudGx5LCBvbmx5IHRoZSBmb2xsb3dpbmcgcHJvdG9jb2xzIGFyZSBzdXBwb3J0ZWQ6IEhUVFAgKHZlcnNpb25zIDAuOSBhbmQKLSAgMS4wKSwgRlRQLCBhbmQgbG9jYWwgZmlsZXMuCisgIDEuMCksIEZUUCwgbG9jYWwgZmlsZXMsIGFuZCBkYXRhIFVSTHMuCisKKyAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQgQWRkZWQgc3VwcG9ydCBmb3IgZGF0YSBVUkxzLgogCiAqIFRoZSBjYWNoaW5nIGZlYXR1cmUgb2YgOmZ1bmM6YHVybHJldHJpZXZlYCBoYXMgYmVlbiBkaXNhYmxlZCB1bnRpbCBzb21lb25lCiAgIGZpbmRzIHRoZSB0aW1lIHRvIGhhY2sgcHJvcGVyIHByb2Nlc3Npbmcgb2YgRXhwaXJhdGlvbiB0aW1lIGhlYWRlcnMuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS92ZW52LnJzdCBiL0RvYy9saWJyYXJ5L3ZlbnYucnN0CmluZGV4IGJlMGNhZDQuLmU5ZWRlOGIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ZlbnYucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ZlbnYucnN0CkBAIC03Niw2ICs3Niw4IEBACiAgICB3aXRob3V0IHRoZXJlIG5lZWRpbmcgdG8gYmUgYW55IHJlZmVyZW5jZSB0byBpdHMgdmVudiBpbiBgYFBBVEhgYC4KIAogCisuLiBfdmVudi1hcGk6CisKIEFQSQogLS0tCiAKQEAgLTg1LDcgKzg3LDggQEAKIG1lY2hhbmlzbXMgZm9yIHRoaXJkLXBhcnR5IHZpcnR1YWwgZW52aXJvbm1lbnQgY3JlYXRvcnMgdG8gY3VzdG9taXplIGVudmlyb25tZW50CiBjcmVhdGlvbiBhY2NvcmRpbmcgdG8gdGhlaXIgbmVlZHMsIHRoZSA6Y2xhc3M6YEVudkJ1aWxkZXJgIGNsYXNzLgogCi0uLiBjbGFzczo6IEVudkJ1aWxkZXIoc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLCBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSkKKy4uIGNsYXNzOjogRW52QnVpbGRlcihzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcz1GYWxzZSwgdXBncmFkZT1GYWxzZSwgd2l0aF9waXA9RmFsc2UpCiAKICAgICBUaGUgOmNsYXNzOmBFbnZCdWlsZGVyYCBjbGFzcyBhY2NlcHRzIHRoZSBmb2xsb3dpbmcga2V5d29yZCBhcmd1bWVudHMgb24KICAgICBpbnN0YW50aWF0aW9uOgpAQCAtOTMsOCArOTYsOCBAQAogICAgICogYGBzeXN0ZW1fc2l0ZV9wYWNrYWdlc2BgIC0tIGEgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHN5c3RlbSBQeXRob24KICAgICAgIHNpdGUtcGFja2FnZXMgc2hvdWxkIGJlIGF2YWlsYWJsZSB0byB0aGUgZW52aXJvbm1lbnQgKGRlZmF1bHRzIHRvIGBgRmFsc2VgYCkuCiAKLSAgICAqIGBgY2xlYXJgYCAtLSBhIEJvb2xlYW4gdmFsdWUgd2hpY2gsIGlmIHRydWUsIHdpbGwgZGVsZXRlIGFueSBleGlzdGluZyB0YXJnZXQKLSAgICAgIGRpcmVjdG9yeSBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXhjZXB0aW9uIChkZWZhdWx0cyB0byBgYEZhbHNlYGApLgorICAgICogYGBjbGVhcmBgIC0tIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCwgaWYgdHJ1ZSwgd2lsbCBkZWxldGUgdGhlIGNvbnRlbnRzIG9mCisgICAgICBhbnkgZXhpc3RpbmcgdGFyZ2V0IGRpcmVjdG9yeSwgYmVmb3JlIGNyZWF0aW5nIHRoZSBlbnZpcm9ubWVudC4KIAogICAgICogYGBzeW1saW5rc2BgIC0tIGEgQm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gYXR0ZW1wdCB0byBzeW1saW5rIHRoZQogICAgICAgUHl0aG9uIGJpbmFyeSAoYW5kIGFueSBuZWNlc3NhcnkgRExMcyBvciBvdGhlciBiaW5hcmllcywKQEAgLTEwNSw2ICsxMDgsMTIgQEAKICAgICAgIGVudmlyb25tZW50IHdpdGggdGhlIHJ1bm5pbmcgUHl0aG9uIC0gZm9yIHVzZSB3aGVuIHRoYXQgUHl0aG9uIGhhcyBiZWVuCiAgICAgICB1cGdyYWRlZCBpbi1wbGFjZSAoZGVmYXVsdHMgdG8gYGBGYWxzZWBgKS4KIAorICAgICogYGB3aXRoX3BpcGBgIC0tIGEgQm9vbGVhbiB2YWx1ZSB3aGljaCwgaWYgdHJ1ZSwgZW5zdXJlcyBwaXAgaXMKKyAgICAgIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4gVGhpcyB1c2VzIDptb2Q6YGVuc3VyZXBpcGAgd2l0aAorICAgICAgdGhlIGBgLS1kZWZhdWx0LXBpcGBgIG9wdGlvbi4KKworICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICAgQWRkZWQgdGhlIGBgd2l0aF9waXBgYCBwYXJhbWV0ZXIKIAogCiAgICAgQ3JlYXRvcnMgb2YgdGhpcmQtcGFydHkgdmlydHVhbCBlbnZpcm9ubWVudCB0b29scyB3aWxsIGJlIGZyZWUgdG8gdXNlIHRoZQpAQCAtMTg4LDYgKzE5Nyw5IEBACiAgICAgICAgICogYGBfX1ZFTlZfTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQgbmFtZSAoZmluYWwgcGF0aAogICAgICAgICAgIHNlZ21lbnQgb2YgZW52aXJvbm1lbnQgZGlyZWN0b3J5KS4KIAorICAgICAgICAqIGBgX19WRU5WX1BST01QVF9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgcHJvbXB0ICh0aGUgZW52aXJvbm1lbnQKKyAgICAgICAgICBuYW1lIHN1cnJvdW5kZWQgYnkgcGFyZW50aGVzZXMgYW5kIHdpdGggYSBmb2xsb3dpbmcgc3BhY2UpCisKICAgICAgICAgKiBgYF9fVkVOVl9CSU5fTkFNRV9fYGAgaXMgcmVwbGFjZWQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgYmluIGRpcmVjdG9yeQogICAgICAgICAgIChlaXRoZXIgYGBiaW5gYCBvciBgYFNjcmlwdHNgYCkuCiAKQEAgLTE5OSwxMSArMjExLDE1IEBACiAKIFRoZXJlIGlzIGFsc28gYSBtb2R1bGUtbGV2ZWwgY29udmVuaWVuY2UgZnVuY3Rpb246CiAKLS4uIGZ1bmN0aW9uOjogY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwgc3ltbGlua3M9RmFsc2UpCisuLiBmdW5jdGlvbjo6IGNyZWF0ZShlbnZfZGlyLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsIFwKKyAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB3aXRoX3BpcD1GYWxzZSkKIAogICAgIENyZWF0ZSBhbiA6Y2xhc3M6YEVudkJ1aWxkZXJgIHdpdGggdGhlIGdpdmVuIGtleXdvcmQgYXJndW1lbnRzLCBhbmQgY2FsbCBpdHMKICAgICA6bWV0aDpgfkVudkJ1aWxkZXIuY3JlYXRlYCBtZXRob2Qgd2l0aCB0aGUgKmVudl9kaXIqIGFyZ3VtZW50LgogCisgICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgICBBZGRlZCB0aGUgYGB3aXRoX3BpcGBgIHBhcmFtZXRlcgorCiBBbiBleGFtcGxlIG9mIGV4dGVuZGluZyBgYEVudkJ1aWxkZXJgYAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2F2ZS5yc3QgYi9Eb2MvbGlicmFyeS93YXZlLnJzdAppbmRleCBhZmFmYjQ1Li5hYjY0OTc4IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93YXZlLnJzdAorKysgYi9Eb2MvbGlicmFyeS93YXZlLnJzdApAQCAtMTksMjYgKzE5LDMyIEBACiAuLiBmdW5jdGlvbjo6IG9wZW4oZmlsZSwgbW9kZT1Ob25lKQogCiAgICBJZiAqZmlsZSogaXMgYSBzdHJpbmcsIG9wZW4gdGhlIGZpbGUgYnkgdGhhdCBuYW1lLCBvdGhlcndpc2UgdHJlYXQgaXQgYXMgYQotICAgc2Vla2FibGUgZmlsZS1saWtlIG9iamVjdC4gICptb2RlKiBjYW4gYmUgYW55IG9mCisgICBmaWxlLWxpa2Ugb2JqZWN0LiAgKm1vZGUqIGNhbiBiZToKIAotICAgYGAncidgYCwgYGAncmInYGAKKyAgIGBgJ3JiJ2BgCiAgICAgICBSZWFkIG9ubHkgbW9kZS4KIAotICAgYGAndydgYCwgYGAnd2InYGAKKyAgIGBgJ3diJ2BgCiAgICAgICBXcml0ZSBvbmx5IG1vZGUuCiAKICAgIE5vdGUgdGhhdCBpdCBkb2VzIG5vdCBhbGxvdyByZWFkL3dyaXRlIFdBViBmaWxlcy4KIAotICAgQSAqbW9kZSogb2YgYGAncidgYCBvciBgYCdyYidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3JlYWRgIG9iamVjdCwgd2hpbGUgYQotICAgKm1vZGUqIG9mIGBgJ3cnYGAgb3IgYGAnd2InYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV93cml0ZWAgb2JqZWN0LiAgSWYKLSAgICptb2RlKiBpcyBvbWl0dGVkIGFuZCBhIGZpbGUtbGlrZSBvYmplY3QgaXMgcGFzc2VkIGFzICpmaWxlKiwgYGBmaWxlLm1vZGVgYAotICAgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgKm1vZGUqICh0aGUgYGAnYidgYCBmbGFnIGlzIHN0aWxsIGFkZGVkIGlmCi0gICBuZWNlc3NhcnkpLgorICAgQSAqbW9kZSogb2YgYGAncmInYGAgcmV0dXJucyBhIDpjbGFzczpgV2F2ZV9yZWFkYCBvYmplY3QsIHdoaWxlIGEgKm1vZGUqIG9mCisgICBgYCd3YidgYCByZXR1cm5zIGEgOmNsYXNzOmBXYXZlX3dyaXRlYCBvYmplY3QuICBJZiAqbW9kZSogaXMgb21pdHRlZCBhbmQgYQorICAgZmlsZS1saWtlIG9iamVjdCBpcyBwYXNzZWQgYXMgKmZpbGUqLCBgYGZpbGUubW9kZWBgIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQKKyAgIHZhbHVlIGZvciAqbW9kZSouCiAKICAgIElmIHlvdSBwYXNzIGluIGEgZmlsZS1saWtlIG9iamVjdCwgdGhlIHdhdmUgb2JqZWN0IHdpbGwgbm90IGNsb3NlIGl0IHdoZW4gaXRzCiAgICA6bWV0aDpgY2xvc2VgIG1ldGhvZCBpcyBjYWxsZWQ7IGl0IGlzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBjbG9zZQogICAgdGhlIGZpbGUgb2JqZWN0LgogCisgICBUaGUgOmZ1bmM6YC5vcGVuYCBmdW5jdGlvbiBtYXkgYmUgdXNlZCBpbiBhIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuICBXaGVuCisgICB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrIGNvbXBsZXRlcywgdGhlIDptZXRoOmBXYXZlX3JlYWQuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV9yZWFkLmNsb3NlPmAgb3IgOm1ldGg6YFdhdmVfd3JpdGUuY2xvc2UoKQorICAgPHdhdmUuV2F2ZV93cml0ZS5jbG9zZSgpPmAgbWV0aG9kIGlzIGNhbGxlZC4KKworICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIHVuc2Vla2FibGUgZmlsZXMuCiAKIC4uIGZ1bmN0aW9uOjogb3BlbmZwKGZpbGUsIG1vZGUpCiAKQEAgLTk4LDggKzEwNCw5IEBACiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5nZXRwYXJhbXMoKQogCi0gICBSZXR1cm5zIGEgdHVwbGUgYGAobmNoYW5uZWxzLCBzYW1wd2lkdGgsIGZyYW1lcmF0ZSwgbmZyYW1lcywgY29tcHR5cGUsCi0gICBjb21wbmFtZSlgYCwgZXF1aXZhbGVudCB0byBvdXRwdXQgb2YgdGhlIDptZXRoOmBnZXRcKmAgbWV0aG9kcy4KKyAgIFJldHVybnMgYSA6ZnVuYzpgfmNvbGxlY3Rpb25zLm5hbWVkdHVwbGVgIGBgKG5jaGFubmVscywgc2FtcHdpZHRoLAorICAgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpYGAsIGVxdWl2YWxlbnQgdG8gb3V0cHV0IG9mIHRoZQorICAgOm1ldGg6YGdldFwqYCBtZXRob2RzLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfcmVhZC5yZWFkZnJhbWVzKG4pCkBAIC0xNDMsMTMgKzE1MCwzMCBAQAogV2F2ZV93cml0ZSBPYmplY3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAorRm9yIHNlZWthYmxlIG91dHB1dCBzdHJlYW1zLCB0aGUgYGB3YXZlYGAgaGVhZGVyIHdpbGwgYXV0b21hdGljYWxseSBiZSB1cGRhdGVkCit0byByZWZsZWN0IHRoZSBudW1iZXIgb2YgZnJhbWVzIGFjdHVhbGx5IHdyaXR0ZW4uICBGb3IgdW5zZWVrYWJsZSBzdHJlYW1zLCB0aGUKKypuZnJhbWVzKiB2YWx1ZSBtdXN0IGJlIGFjY3VyYXRlIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGRhdGEgaXMgd3JpdHRlbi4gIEFuCithY2N1cmF0ZSAqbmZyYW1lcyogdmFsdWUgY2FuIGJlIGFjaGlldmVkIGVpdGhlciBieSBjYWxsaW5nCis6bWV0aDpgfldhdmVfd3JpdGUuc2V0bmZyYW1lc2Agb3IgOm1ldGg6YH5XYXZlX3dyaXRlLnNldHBhcmFtc2Agd2l0aCB0aGUgbnVtYmVyCitvZiBmcmFtZXMgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gYmVmb3JlIDptZXRoOmB+V2F2ZV93cml0ZS5jbG9zZWAgaXMgY2FsbGVkIGFuZAordGhlbiB1c2luZyA6bWV0aDpgfldhdmVfd3JpdGUud3JpdGVmcmFtZXNyYXdgIHRvIHdyaXRlIHRoZSBmcmFtZSBkYXRhLCBvciBieQorY2FsbGluZyA6bWV0aDpgfldhdmVfd3JpdGUud3JpdGVmcmFtZXNgIHdpdGggYWxsIG9mIHRoZSBmcmFtZSBkYXRhIHRvIGJlCit3cml0dGVuLiAgSW4gdGhlIGxhdHRlciBjYXNlIDptZXRoOmB+V2F2ZV93cml0ZS53cml0ZWZyYW1lc2Agd2lsbCBjYWxjdWxhdGUKK3RoZSBudW1iZXIgb2YgZnJhbWVzIGluIHRoZSBkYXRhIGFuZCBzZXQgKm5mcmFtZXMqIGFjY29yZGluZ2x5IGJlZm9yZSB3cml0aW5nCit0aGUgZnJhbWUgZGF0YS4KKwogV2F2ZV93cml0ZSBvYmplY3RzLCBhcyByZXR1cm5lZCBieSA6ZnVuYzpgLm9wZW5gLCBoYXZlIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEFkZGVkIHN1cHBvcnQgZm9yIHVuc2Vla2FibGUgZmlsZXMuCisKIAogLi4gbWV0aG9kOjogV2F2ZV93cml0ZS5jbG9zZSgpCiAKICAgIE1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdCwgYW5kIGNsb3NlIHRoZSBmaWxlIGlmIGl0IHdhcyBvcGVuZWQgYnkKLSAgIDptb2Q6YHdhdmVgLiAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHVwb24gb2JqZWN0IGNvbGxlY3Rpb24uCisgICA6bW9kOmB3YXZlYC4gIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB1cG9uIG9iamVjdCBjb2xsZWN0aW9uLiAgSXQgd2lsbCByYWlzZQorICAgYW4gZXhjZXB0aW9uIGlmIHRoZSBvdXRwdXQgc3RyZWFtIGlzIG5vdCBzZWVrYWJsZSBhbmQgKm5mcmFtZXMqIGRvZXMgbm90CisgICBtYXRjaCB0aGUgbnVtYmVyIG9mIGZyYW1lcyBhY3R1YWxseSB3cml0dGVuLgogCiAKIC4uIG1ldGhvZDo6IFdhdmVfd3JpdGUuc2V0bmNoYW5uZWxzKG4pCkBAIC0xNzMsOCArMTk3LDkgQEAKIAogLi4gbWV0aG9kOjogV2F2ZV93cml0ZS5zZXRuZnJhbWVzKG4pCiAKLSAgIFNldCB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byAqbiouIFRoaXMgd2lsbCBiZSBjaGFuZ2VkIGxhdGVyIGlmIG1vcmUgZnJhbWVzIGFyZQotICAgd3JpdHRlbi4KKyAgIFNldCB0aGUgbnVtYmVyIG9mIGZyYW1lcyB0byAqbiouICBUaGlzIHdpbGwgYmUgY2hhbmdlZCBsYXRlciBpZiB0aGUgbnVtYmVyCisgICBvZiBmcmFtZXMgYWN0dWFsbHkgd3JpdHRlbiBpcyBkaWZmZXJlbnQgKHRoaXMgdXBkYXRlIGF0dGVtcHQgd2lsbAorICAgcmFpc2UgYW4gZXJyb3IgaWYgdGhlIG91dHB1dCBzdHJlYW0gaXMgbm90IHNlZWthYmxlKS4KIAogCiAuLiBtZXRob2Q6OiBXYXZlX3dyaXRlLnNldGNvbXB0eXBlKHR5cGUsIG5hbWUpCkBAIC0yMDAsMTAgKzIyNSwxOSBAQAogCiAgICBXcml0ZSBhdWRpbyBmcmFtZXMsIHdpdGhvdXQgY29ycmVjdGluZyAqbmZyYW1lcyouCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCisKIAogLi4gbWV0aG9kOjogV2F2ZV93cml0ZS53cml0ZWZyYW1lcyhkYXRhKQogCi0gICBXcml0ZSBhdWRpbyBmcmFtZXMgYW5kIG1ha2Ugc3VyZSAqbmZyYW1lcyogaXMgY29ycmVjdC4KKyAgIFdyaXRlIGF1ZGlvIGZyYW1lcyBhbmQgbWFrZSBzdXJlICpuZnJhbWVzKiBpcyBjb3JyZWN0LiAgSXQgd2lsbCByYWlzZSBhbgorICAgZXJyb3IgaWYgdGhlIG91dHB1dCBzdHJlYW0gaXMgbm90IHNlZWthYmxlIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGZyYW1lcworICAgdGhhdCBoYXZlIGJlZW4gd3JpdHRlbiBhZnRlciAqZGF0YSogaGFzIGJlZW4gd3JpdHRlbiBkb2VzIG5vdCBtYXRjaCB0aGUKKyAgIHByZXZpb3VzbHkgc2V0IHZhbHVlIGZvciAqbmZyYW1lcyouCisKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBBbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YCBpcyBub3cgYWNjZXB0ZWQuCiAKIAogTm90ZSB0aGF0IGl0IGlzIGludmFsaWQgdG8gc2V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyIGNhbGxpbmcgOm1ldGg6YHdyaXRlZnJhbWVzYApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkvd2Vha3JlZi5yc3QgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAppbmRleCAyMjRmNDQyLi5jYzg4M2IxIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdAorKysgYi9Eb2MvbGlicmFyeS93ZWFrcmVmLnJzdApAQCAtNTEsMTAgKzUxLDE2IEBACiBidXQga2VlcHMgd2VhayByZWZlcmVuY2VzIHRvIGl0cyBlbGVtZW50cywganVzdCBsaWtlIGEKIDpjbGFzczpgV2Vha0tleURpY3Rpb25hcnlgIGRvZXMuCiAKLU1vc3QgcHJvZ3JhbXMgc2hvdWxkIGZpbmQgdGhhdCB1c2luZyBvbmUgb2YgdGhlc2Ugd2VhayBjb250YWluZXIgdHlwZXMgaXMgYWxsCi10aGV5IG5lZWQgLS0gaXQncyBub3QgdXN1YWxseSBuZWNlc3NhcnkgdG8gY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcwotZGlyZWN0bHkuICBUaGUgbG93LWxldmVsIG1hY2hpbmVyeSB1c2VkIGJ5IHRoZSB3ZWFrIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb25zCi1pcyBleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCis6Y2xhc3M6YGZpbmFsaXplYCBwcm92aWRlcyBhIHN0cmFpZ2h0IGZvcndhcmQgd2F5IHRvIHJlZ2lzdGVyIGEKK2NsZWFudXAgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLgorVGhpcyBpcyBzaW1wbGVyIHRvIHVzZSB0aGFuIHNldHRpbmcgdXAgYSBjYWxsYmFjayBmdW5jdGlvbiBvbiBhIHJhdword2VhayByZWZlcmVuY2UsIHNpbmNlIHRoZSBtb2R1bGUgYXV0b21hdGljYWxseSBlbnN1cmVzIHRoYXQgdGhlIGZpbmFsaXplcgorcmVtYWlucyBhbGl2ZSB1bnRpbCB0aGUgb2JqZWN0IGlzIGNvbGxlY3RlZC4KKworTW9zdCBwcm9ncmFtcyBzaG91bGQgZmluZCB0aGF0IHVzaW5nIG9uZSBvZiB0aGVzZSB3ZWFrIGNvbnRhaW5lciB0eXBlcworb3IgOmNsYXNzOmBmaW5hbGl6ZWAgaXMgYWxsIHRoZXkgbmVlZCAtLSBpdCdzIG5vdCB1c3VhbGx5IG5lY2Vzc2FyeSB0bworY3JlYXRlIHlvdXIgb3duIHdlYWsgcmVmZXJlbmNlcyBkaXJlY3RseS4gIFRoZSBsb3ctbGV2ZWwgbWFjaGluZXJ5IGlzCitleHBvc2VkIGJ5IHRoZSA6bW9kOmB3ZWFrcmVmYCBtb2R1bGUgZm9yIHRoZSBiZW5lZml0IG9mIGFkdmFuY2VkIHVzZXMuCiAKIE5vdCBhbGwgb2JqZWN0cyBjYW4gYmUgd2Vha2x5IHJlZmVyZW5jZWQ7IHRob3NlIG9iamVjdHMgd2hpY2ggY2FuIGluY2x1ZGUgY2xhc3MKIGluc3RhbmNlcywgZnVuY3Rpb25zIHdyaXR0ZW4gaW4gUHl0aG9uIChidXQgbm90IGluIEMpLCBpbnN0YW5jZSBtZXRob2RzLCBzZXRzLApAQCAtMTExLDYgKzExNywxNSBAQAogCiAgICBUaGlzIGlzIGEgc3ViY2xhc3NhYmxlIHR5cGUgcmF0aGVyIHRoYW4gYSBmYWN0b3J5IGZ1bmN0aW9uLgogCisgICAuLiBhdHRyaWJ1dGU6OiBfX2NhbGxiYWNrX18KKworICAgICAgVGhpcyByZWFkLW9ubHkgYXR0cmlidXRlIHJldHVybnMgdGhlIGNhbGxiYWNrIGN1cnJlbnRseSBhc3NvY2lhdGVkIHRvIHRoZQorICAgICAgd2Vha3JlZi4gIElmIHRoZXJlIGlzIG5vIGNhbGxiYWNrIG9yIGlmIHRoZSByZWZlcmVudCBvZiB0aGUgd2Vha3JlZiBpcworICAgICAgbm8gbG9uZ2VyIGFsaXZlIHRoZW4gdGhpcyBhdHRyaWJ1dGUgd2lsbCBoYXZlIHZhbHVlIGBgTm9uZWBgLgorCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgQWRkZWQgdGhlIDphdHRyOmBfX2NhbGxiYWNrX19gIGF0dHJpYnV0ZS4KKwogCiAuLiBmdW5jdGlvbjo6IHByb3h5KG9iamVjdFssIGNhbGxiYWNrXSkKIApAQCAtMTkyLDYgKzIwNyw5OCBAQAogICAgZGlzY2FyZGVkIHdoZW4gbm8gc3Ryb25nIHJlZmVyZW5jZSB0byBpdCBleGlzdHMgYW55IG1vcmUuCiAKIAorLi4gY2xhc3M6OiBXZWFrTWV0aG9kKG1ldGhvZCkKKworICAgQSBjdXN0b20gOmNsYXNzOmByZWZgIHN1YmNsYXNzIHdoaWNoIHNpbXVsYXRlcyBhIHdlYWsgcmVmZXJlbmNlIHRvIGEgYm91bmQKKyAgIG1ldGhvZCAoaS5lLiwgYSBtZXRob2QgZGVmaW5lZCBvbiBhIGNsYXNzIGFuZCBsb29rZWQgdXAgb24gYW4gaW5zdGFuY2UpLgorICAgU2luY2UgYSBib3VuZCBtZXRob2QgaXMgZXBoZW1lcmFsLCBhIHN0YW5kYXJkIHdlYWsgcmVmZXJlbmNlIGNhbm5vdCBrZWVwCisgICBob2xkIG9mIGl0LiAgOmNsYXNzOmBXZWFrTWV0aG9kYCBoYXMgc3BlY2lhbCBjb2RlIHRvIHJlY3JlYXRlIHRoZSBib3VuZAorICAgbWV0aG9kIHVudGlsIGVpdGhlciB0aGUgb2JqZWN0IG9yIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBkaWVzOjoKKworICAgICAgPj4+IGNsYXNzIEM6CisgICAgICAuLi4gICAgIGRlZiBtZXRob2Qoc2VsZik6CisgICAgICAuLi4gICAgICAgICBwcmludCgibWV0aG9kIGNhbGxlZCEiKQorICAgICAgLi4uCisgICAgICA+Pj4gYyA9IEMoKQorICAgICAgPj4+IHIgPSB3ZWFrcmVmLnJlZihjLm1ldGhvZCkKKyAgICAgID4+PiByKCkKKyAgICAgID4+PiByID0gd2Vha3JlZi5XZWFrTWV0aG9kKGMubWV0aG9kKQorICAgICAgPj4+IHIoKQorICAgICAgPGJvdW5kIG1ldGhvZCBDLm1ldGhvZCBvZiA8X19tYWluX18uQyBvYmplY3QgYXQgMHg3ZmM4NTk4MzAyMjA+PgorICAgICAgPj4+IHIoKSgpCisgICAgICBtZXRob2QgY2FsbGVkIQorICAgICAgPj4+IGRlbCBjCisgICAgICA+Pj4gZ2MuY29sbGVjdCgpCisgICAgICAwCisgICAgICA+Pj4gcigpCisgICAgICA+Pj4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGNsYXNzOjogZmluYWxpemUob2JqLCBmdW5jLCAqYXJncywgKiprd2FyZ3MpCisKKyAgIFJldHVybiBhIGNhbGxhYmxlIGZpbmFsaXplciBvYmplY3Qgd2hpY2ggd2lsbCBiZSBjYWxsZWQgd2hlbiAqb2JqKgorICAgaXMgZ2FyYmFnZSBjb2xsZWN0ZWQuIFVubGlrZSBhbiBvcmRpbmFyeSB3ZWFrIHJlZmVyZW5jZSwgYSBmaW5hbGl6ZXIKKyAgIHdpbGwgYWx3YXlzIHN1cnZpdmUgdW50aWwgdGhlIHJlZmVyZW5jZSBvYmplY3QgaXMgY29sbGVjdGVkLCBncmVhdGx5CisgICBzaW1wbGlmeWluZyBsaWZlY3ljbGUgbWFuYWdlbWVudC4KKworICAgQSBmaW5hbGl6ZXIgaXMgY29uc2lkZXJlZCAqYWxpdmUqIHVudGlsIGl0IGlzIGNhbGxlZCAoZWl0aGVyIGV4cGxpY2l0bHkKKyAgIG9yIGF0IGdhcmJhZ2UgY29sbGVjdGlvbiksIGFuZCBhZnRlciB0aGF0IGl0IGlzICpkZWFkKi4gIENhbGxpbmcgYSBsaXZlCisgICBmaW5hbGl6ZXIgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgYGBmdW5jKCphcmcsICoqa3dhcmdzKWBgLAorICAgd2hlcmVhcyBjYWxsaW5nIGEgZGVhZCBmaW5hbGl6ZXIgcmV0dXJucyA6Y29uc3Q6YE5vbmVgLgorCisgICBFeGNlcHRpb25zIHJhaXNlZCBieSBmaW5hbGl6ZXIgY2FsbGJhY2tzIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24KKyAgIHdpbGwgYmUgc2hvd24gb24gdGhlIHN0YW5kYXJkIGVycm9yIG91dHB1dCwgYnV0IGNhbm5vdCBiZQorICAgcHJvcGFnYXRlZC4gIFRoZXkgYXJlIGhhbmRsZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGV4Y2VwdGlvbnMgcmFpc2VkCisgICBmcm9tIGFuIG9iamVjdCdzIDptZXRoOmBfX2RlbF9fYCBtZXRob2Qgb3IgYSB3ZWFrIHJlZmVyZW5jZSdzCisgICBjYWxsYmFjay4KKworICAgV2hlbiB0aGUgcHJvZ3JhbSBleGl0cywgZWFjaCByZW1haW5pbmcgbGl2ZSBmaW5hbGl6ZXIgaXMgY2FsbGVkCisgICB1bmxlc3MgaXRzIDphdHRyOmBhdGV4aXRgIGF0dHJpYnV0ZSBoYXMgYmVlbiBzZXQgdG8gZmFsc2UuICBUaGV5CisgICBhcmUgY2FsbGVkIGluIHJldmVyc2Ugb3JkZXIgb2YgY3JlYXRpb24uCisKKyAgIEEgZmluYWxpemVyIHdpbGwgbmV2ZXIgaW52b2tlIGl0cyBjYWxsYmFjayBkdXJpbmcgdGhlIGxhdGVyIHBhcnQgb2YKKyAgIHRoZSBpbnRlcnByZXRlciBzaHV0ZG93biB3aGVuIG1vZHVsZSBnbG9iYWxzIGFyZSBsaWFibGUgdG8gaGF2ZQorICAgYmVlbiByZXBsYWNlZCBieSA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBtZXRob2Q6OiBfX2NhbGxfXygpCisKKyAgICAgIElmICpzZWxmKiBpcyBhbGl2ZSB0aGVuIG1hcmsgaXQgYXMgZGVhZCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgb2YKKyAgICAgIGNhbGxpbmcgYGBmdW5jKCphcmdzLCAqKmt3YXJncylgYC4gIElmICpzZWxmKiBpcyBkZWFkIHRoZW4gcmV0dXJuCisgICAgICA6Y29uc3Q6YE5vbmVgLgorCisgICAuLiBtZXRob2Q6OiBkZXRhY2goKQorCisgICAgICBJZiAqc2VsZiogaXMgYWxpdmUgdGhlbiBtYXJrIGl0IGFzIGRlYWQgYW5kIHJldHVybiB0aGUgdHVwbGUKKyAgICAgIGBgKG9iaiwgZnVuYywgYXJncywga3dhcmdzKWBgLiAgSWYgKnNlbGYqIGlzIGRlYWQgdGhlbiByZXR1cm4KKyAgICAgIDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIG1ldGhvZDo6IHBlZWsoKQorCisgICAgICBJZiAqc2VsZiogaXMgYWxpdmUgdGhlbiByZXR1cm4gdGhlIHR1cGxlIGBgKG9iaiwgZnVuYywgYXJncywKKyAgICAgIGt3YXJncylgYC4gIElmICpzZWxmKiBpcyBkZWFkIHRoZW4gcmV0dXJuIDpjb25zdDpgTm9uZWAuCisKKyAgIC4uIGF0dHJpYnV0ZTo6IGFsaXZlCisKKyAgICAgIFByb3BlcnR5IHdoaWNoIGlzIHRydWUgaWYgdGhlIGZpbmFsaXplciBpcyBhbGl2ZSwgZmFsc2Ugb3RoZXJ3aXNlLgorCisgICAuLiBhdHRyaWJ1dGU6OiBhdGV4aXQKKworICAgICAgQSB3cml0YWJsZSBib29sZWFuIHByb3BlcnR5IHdoaWNoIGJ5IGRlZmF1bHQgaXMgdHJ1ZS4gIFdoZW4gdGhlCisgICAgICBwcm9ncmFtIGV4aXRzLCBpdCBjYWxscyBhbGwgcmVtYWluaW5nIGxpdmUgZmluYWxpemVycyBmb3Igd2hpY2gKKyAgICAgIDphdHRyOmAuYXRleGl0YCBpcyB0cnVlLiAgVGhleSBhcmUgY2FsbGVkIGluIHJldmVyc2Ugb3JkZXIgb2YKKyAgICAgIGNyZWF0aW9uLgorCisgICAuLiBub3RlOjoKKworICAgICAgSXQgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSB0aGF0ICpmdW5jKiwgKmFyZ3MqIGFuZCAqa3dhcmdzKiBkbworICAgICAgbm90IG93biBhbnkgcmVmZXJlbmNlcyB0byAqb2JqKiwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCisgICAgICBzaW5jZSBvdGhlcndpc2UgKm9iaiogd2lsbCBuZXZlciBiZSBnYXJiYWdlIGNvbGxlY3RlZC4gIEluCisgICAgICBwYXJ0aWN1bGFyLCAqZnVuYyogc2hvdWxkIG5vdCBiZSBhIGJvdW5kIG1ldGhvZCBvZiAqb2JqKi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogLi4gZGF0YTo6IFJlZmVyZW5jZVR5cGUKIAogICAgVGhlIHR5cGUgb2JqZWN0IGZvciB3ZWFrIHJlZmVyZW5jZXMgb2JqZWN0cy4KQEAgLTIzMiw4ICszMzksOSBAQAogV2VhayBSZWZlcmVuY2UgT2JqZWN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XZWFrIHJlZmVyZW5jZSBvYmplY3RzIGhhdmUgbm8gYXR0cmlidXRlcyBvciBtZXRob2RzLCBidXQgZG8gYWxsb3cgdGhlIHJlZmVyZW50Ci10byBiZSBvYnRhaW5lZCwgaWYgaXQgc3RpbGwgZXhpc3RzLCBieSBjYWxsaW5nIGl0OgorV2VhayByZWZlcmVuY2Ugb2JqZWN0cyBoYXZlIG5vIG1ldGhvZHMgYW5kIG5vIGF0dHJpYnV0ZXMgYmVzaWRlcworOmF0dHI6YHJlZi5fX2NhbGxiYWNrX19gLiBBIHdlYWsgcmVmZXJlbmNlIG9iamVjdCBhbGxvd3MgdGhlIHJlZmVyZW50IHRvIGJlCitvYnRhaW5lZCwgaWYgaXQgc3RpbGwgZXhpc3RzLCBieSBjYWxsaW5nIGl0OgogCiAgICA+Pj4gaW1wb3J0IHdlYWtyZWYKICAgID4+PiBjbGFzcyBPYmplY3Q6CkBAIC0zMjYsMyArNDM0LDE0MCBAQAogICAgZGVmIGlkMm9iaihvaWQpOgogICAgICAgIHJldHVybiBfaWQyb2JqX2RpY3Rbb2lkXQogCisKKy4uIF9maW5hbGl6ZS1leGFtcGxlczoKKworRmluYWxpemVyIE9iamVjdHMKKy0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBtYWluIGJlbmVmaXQgb2YgdXNpbmcgOmNsYXNzOmBmaW5hbGl6ZWAgaXMgdGhhdCBpdCBtYWtlcyBpdCBzaW1wbGUKK3RvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgd2l0aG91dCBuZWVkaW5nIHRvIHByZXNlcnZlIHRoZSByZXR1cm5lZCBmaW5hbGl6ZXIKK29iamVjdC4gIEZvciBpbnN0YW5jZQorCisgICAgPj4+IGltcG9ydCB3ZWFrcmVmCisgICAgPj4+IGNsYXNzIE9iamVjdDoKKyAgICAuLi4gICAgIHBhc3MKKyAgICAuLi4KKyAgICA+Pj4ga2VubnkgPSBPYmplY3QoKQorICAgID4+PiB3ZWFrcmVmLmZpbmFsaXplKGtlbm55LCBwcmludCwgIllvdSBraWxsZWQgS2VubnkhIikgICNkb2N0ZXN0OitFTExJUFNJUworICAgIDxmaW5hbGl6ZSBvYmplY3QgYXQgLi4uOyBmb3IgJ09iamVjdCcgYXQgLi4uPgorICAgID4+PiBkZWwga2VubnkKKyAgICBZb3Uga2lsbGVkIEtlbm55IQorCitUaGUgZmluYWxpemVyIGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkgYXMgd2VsbC4gIEhvd2V2ZXIgdGhlIGZpbmFsaXplcgord2lsbCBpbnZva2UgdGhlIGNhbGxiYWNrIGF0IG1vc3Qgb25jZS4KKworICAgID4+PiBkZWYgY2FsbGJhY2soeCwgeSwgeik6CisgICAgLi4uICAgICBwcmludCgiQ0FMTEJBQ0siKQorICAgIC4uLiAgICAgcmV0dXJuIHggKyB5ICsgegorICAgIC4uLgorICAgID4+PiBvYmogPSBPYmplY3QoKQorICAgID4+PiBmID0gd2Vha3JlZi5maW5hbGl6ZShvYmosIGNhbGxiYWNrLCAxLCAyLCB6PTMpCisgICAgPj4+IGFzc2VydCBmLmFsaXZlCisgICAgPj4+IGFzc2VydCBmKCkgPT0gNgorICAgIENBTExCQUNLCisgICAgPj4+IGFzc2VydCBub3QgZi5hbGl2ZQorICAgID4+PiBmKCkgICAgICAgICAgICAgICAgICAgICAjIGNhbGxiYWNrIG5vdCBjYWxsZWQgYmVjYXVzZSBmaW5hbGl6ZXIgZGVhZAorICAgID4+PiBkZWwgb2JqICAgICAgICAgICAgICAgICAjIGNhbGxiYWNrIG5vdCBjYWxsZWQgYmVjYXVzZSBmaW5hbGl6ZXIgZGVhZAorCitZb3UgY2FuIHVucmVnaXN0ZXIgYSBmaW5hbGl6ZXIgdXNpbmcgaXRzIDptZXRoOmB+ZmluYWxpemUuZGV0YWNoYAorbWV0aG9kLiAgVGhpcyBraWxscyB0aGUgZmluYWxpemVyIGFuZCByZXR1cm5zIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvCit0aGUgY29uc3RydWN0b3Igd2hlbiBpdCB3YXMgY3JlYXRlZC4KKworICAgID4+PiBvYmogPSBPYmplY3QoKQorICAgID4+PiBmID0gd2Vha3JlZi5maW5hbGl6ZShvYmosIGNhbGxiYWNrLCAxLCAyLCB6PTMpCisgICAgPj4+IGYuZGV0YWNoKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RvY3Rlc3Q6K0VMTElQU0lTCisgICAgKDxfX21haW5fXy5PYmplY3Qgb2JqZWN0IC4uLj4sIDxmdW5jdGlvbiBjYWxsYmFjayAuLi4+LCAoMSwgMiksIHsneic6IDN9KQorICAgID4+PiBuZXdvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncyA9IF8KKyAgICA+Pj4gYXNzZXJ0IG5vdCBmLmFsaXZlCisgICAgPj4+IGFzc2VydCBuZXdvYmogaXMgb2JqCisgICAgPj4+IGFzc2VydCBmdW5jKCphcmdzLCAqKmt3YXJncykgPT0gNgorICAgIENBTExCQUNLCisKK1VubGVzcyB5b3Ugc2V0IHRoZSA6YXR0cjpgfmZpbmFsaXplLmF0ZXhpdGAgYXR0cmlidXRlIHRvCis6Y29uc3Q6YEZhbHNlYCwgYSBmaW5hbGl6ZXIgd2lsbCBiZSBjYWxsZWQgd2hlbiB0aGUgcHJvZ3JhbSBleGl0cyBpZiBpdAoraXMgc3RpbGwgYWxpdmUuICBGb3IgaW5zdGFuY2UKKworICAgID4+PiBvYmogPSBPYmplY3QoKQorICAgID4+PiB3ZWFrcmVmLmZpbmFsaXplKG9iaiwgcHJpbnQsICJvYmogZGVhZCBvciBleGl0aW5nIikgICNkb2N0ZXN0OitFTExJUFNJUworICAgIDxmaW5hbGl6ZSBvYmplY3QgYXQgLi4uOyBmb3IgJ09iamVjdCcgYXQgLi4uPgorICAgID4+PiBleGl0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkb2N0ZXN0OitTS0lQCisgICAgb2JqIGRlYWQgb3IgZXhpdGluZworCisKK0NvbXBhcmluZyBmaW5hbGl6ZXJzIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3VwcG9zZSB3ZSB3YW50IHRvIGNyZWF0ZSBhIGNsYXNzIHdob3NlIGluc3RhbmNlcyByZXByZXNlbnQgdGVtcG9yYXJ5CitkaXJlY3Rvcmllcy4gIFRoZSBkaXJlY3RvcmllcyBzaG91bGQgYmUgZGVsZXRlZCB3aXRoIHRoZWlyIGNvbnRlbnRzCit3aGVuIHRoZSBmaXJzdCBvZiB0aGUgZm9sbG93aW5nIGV2ZW50cyBvY2N1cnM6CisKKyogdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCwKKyogdGhlIG9iamVjdCdzIDptZXRoOmByZW1vdmVgIG1ldGhvZCBpcyBjYWxsZWQsIG9yCisqIHRoZSBwcm9ncmFtIGV4aXRzLgorCitXZSBtaWdodCB0cnkgdG8gaW1wbGVtZW50IHRoZSBjbGFzcyB1c2luZyBhIDptZXRoOmBfX2RlbF9fYCBtZXRob2QgYXMKK2ZvbGxvd3M6OgorCisgICAgY2xhc3MgVGVtcERpcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gdGVtcGZpbGUubWtkdGVtcCgpCisKKyAgICAgICAgZGVmIHJlbW92ZShzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYubmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYubmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiByZW1vdmVkKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZSBpcyBOb25lCisKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBzZWxmLnJlbW92ZSgpCisKK1N0YXJ0aW5nIHdpdGggUHl0aG9uIDMuNCwgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgbm8gbG9uZ2VyIHByZXZlbnQKK3JlZmVyZW5jZSBjeWNsZXMgZnJvbSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCwgYW5kIG1vZHVsZSBnbG9iYWxzIGFyZQorbm8gbG9uZ2VyIGZvcmNlZCB0byA6Y29uc3Q6YE5vbmVgIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93bi4gU28gdGhpcworY29kZSBzaG91bGQgd29yayB3aXRob3V0IGFueSBpc3N1ZXMgb24gQ1B5dGhvbi4KKworSG93ZXZlciwgaGFuZGxpbmcgb2YgOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMgaXMgbm90b3Jpb3VzbHkgaW1wbGVtZW50YXRpb24KK3NwZWNpZmljLCBzaW5jZSBpdCBkZXBlbmRzIG9uIGludGVybmFsIGRldGFpbHMgb2YgdGhlIGludGVycHJldGVyJ3MgZ2FyYmFnZQorY29sbGVjdG9yIGltcGxlbWVudGF0aW9uLgorCitBIG1vcmUgcm9idXN0IGFsdGVybmF0aXZlIGNhbiBiZSB0byBkZWZpbmUgYSBmaW5hbGl6ZXIgd2hpY2ggb25seSByZWZlcmVuY2VzCit0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGFuZCBvYmplY3RzIHRoYXQgaXQgbmVlZHMsIHJhdGhlciB0aGFuIGhhdmluZyBhY2Nlc3MKK3RvIHRoZSBmdWxsIHN0YXRlIG9mIHRoZSBvYmplY3Q6OgorCisgICAgY2xhc3MgVGVtcERpcjoKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZXIgPSB3ZWFrcmVmLmZpbmFsaXplKHNlbGYsIHNodXRpbC5ybXRyZWUsIHNlbGYubmFtZSkKKworICAgICAgICBkZWYgcmVtb3ZlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5fZmluYWxpemVyKCkKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIHJlbW92ZWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gbm90IHNlbGYuX2ZpbmFsaXplci5hbGl2ZQorCitEZWZpbmVkIGxpa2UgdGhpcywgb3VyIGZpbmFsaXplciBvbmx5IHJlY2VpdmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXRhaWxzCitpdCBuZWVkcyB0byBjbGVhbiB1cCB0aGUgZGlyZWN0b3J5IGFwcHJvcHJpYXRlbHkuIElmIHRoZSBvYmplY3QgbmV2ZXIgZ2V0cworZ2FyYmFnZSBjb2xsZWN0ZWQgdGhlIGZpbmFsaXplciB3aWxsIHN0aWxsIGJlIGNhbGxlZCBhdCBleGl0LgorCitUaGUgb3RoZXIgYWR2YW50YWdlIG9mIHdlYWtyZWYgYmFzZWQgZmluYWxpemVycyBpcyB0aGF0IHRoZXkgY2FuIGJlIHVzZWQgdG8KK3JlZ2lzdGVyIGZpbmFsaXplcnMgZm9yIGNsYXNzZXMgd2hlcmUgdGhlIGRlZmluaXRpb24gaXMgY29udHJvbGxlZCBieSBhCit0aGlyZCBwYXJ0eSwgc3VjaCBhcyBydW5uaW5nIGNvZGUgd2hlbiBhIG1vZHVsZSBpcyB1bmxvYWRlZDo6CisKKyAgICBpbXBvcnQgd2Vha3JlZiwgc3lzCisgICAgZGVmIHVubG9hZGluZ19tb2R1bGUoKToKKyAgICAgICAgIyBpbXBsaWNpdCByZWZlcmVuY2UgdG8gdGhlIG1vZHVsZSBnbG9iYWxzIGZyb20gdGhlIGZ1bmN0aW9uIGJvZHkKKyAgICB3ZWFrcmVmLmZpbmFsaXplKHN5cy5tb2R1bGVzW19fbmFtZV9fXSwgdW5sb2FkaW5nX21vZHVsZSkKKworCisuLiBub3RlOjoKKworICAgSWYgeW91IGNyZWF0ZSBhIGZpbmFsaXplciBvYmplY3QgaW4gYSBkYWVtb25pYyB0aHJlYWQganVzdCBhcyB0aGUgcHJvZ3JhbQorICAgZXhpdHMgdGhlbiB0aGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgdGhhdCB0aGUgZmluYWxpemVyCisgICBkb2VzIG5vdCBnZXQgY2FsbGVkIGF0IGV4aXQuICBIb3dldmVyLCBpbiBhIGRhZW1vbmljIHRocmVhZAorICAgOmZ1bmM6YGF0ZXhpdC5yZWdpc3RlcmAsIGBgdHJ5OiAuLi4gZmluYWxseTogLi4uYGAgYW5kIGBgd2l0aDogLi4uYGAKKyAgIGRvIG5vdCBndWFyYW50ZWUgdGhhdCBjbGVhbnVwIG9jY3VycyBlaXRoZXIuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS93ZWJicm93c2VyLnJzdCBiL0RvYy9saWJyYXJ5L3dlYmJyb3dzZXIucnN0CmluZGV4IDljMmIzYWIuLmFhNWU0YWQgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3dlYmJyb3dzZXIucnN0CisrKyBiL0RvYy9saWJyYXJ5L3dlYmJyb3dzZXIucnN0CkBAIC0xOSwxMiArMTksMTIgQEAKIGF2YWlsYWJsZS4gIElmIHRleHQtbW9kZSBicm93c2VycyBhcmUgdXNlZCwgdGhlIGNhbGxpbmcgcHJvY2VzcyB3aWxsIGJsb2NrIHVudGlsCiB0aGUgdXNlciBleGl0cyB0aGUgYnJvd3Nlci4KIAotSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIDplbnZ2YXI6YEJST1dTRVJgIGV4aXN0cywgaXQgaXMgaW50ZXJwcmV0ZWQgdG8KLW92ZXJyaWRlIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IGxpc3Qgb2YgYnJvd3NlcnMsIGFzIGEgOmRhdGE6YG9zLnBhdGhzZXBgLXNlcGFyYXRlZAotbGlzdCBvZiBicm93c2VycyB0byB0cnkgaW4gb3JkZXIuICBXaGVuIHRoZSB2YWx1ZSBvZiBhIGxpc3QgcGFydCBjb250YWlucyB0aGUKLXN0cmluZyBgYCVzYGAsIHRoZW4gaXQgaXMgIGludGVycHJldGVkIGFzIGEgbGl0ZXJhbCBicm93c2VyIGNvbW1hbmQgbGluZSB0byBiZQotdXNlZCB3aXRoIHRoZSBhcmd1bWVudCBVUkwgc3Vic3RpdHV0ZWQgZm9yIGBgJXNgYDsgaWYgdGhlIHBhcnQgZG9lcyBub3QgY29udGFpbgotYGAlc2BgLCBpdCBpcyBzaW1wbHkgaW50ZXJwcmV0ZWQgYXMgdGhlIG5hbWUgb2YgdGhlIGJyb3dzZXIgdG8gbGF1bmNoLiBbMV1fCitJZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgOmVudnZhcjpgQlJPV1NFUmAgZXhpc3RzLCBpdCBpcyBpbnRlcnByZXRlZCBhcyB0aGUKKzpkYXRhOmBvcy5wYXRoc2VwYC1zZXBhcmF0ZWQgbGlzdCBvZiBicm93c2VycyB0byB0cnkgYWhlYWQgb2YgdGhlIHBsYXRmb3JtCitkZWZhdWx0cy4gIFdoZW4gdGhlIHZhbHVlIG9mIGEgbGlzdCBwYXJ0IGNvbnRhaW5zIHRoZSBzdHJpbmcgYGAlc2BgLCB0aGVuIGl0IGlzCitpbnRlcnByZXRlZCBhcyBhIGxpdGVyYWwgYnJvd3NlciBjb21tYW5kIGxpbmUgdG8gYmUgdXNlZCB3aXRoIHRoZSBhcmd1bWVudCBVUkwKK3N1YnN0aXR1dGVkIGZvciBgYCVzYGA7IGlmIHRoZSBwYXJ0IGRvZXMgbm90IGNvbnRhaW4gYGAlc2BgLCBpdCBpcyBzaW1wbHkKK2ludGVycHJldGVkIGFzIHRoZSBuYW1lIG9mIHRoZSBicm93c2VyIHRvIGxhdW5jaC4gWzFdXwogCiBGb3Igbm9uLVVuaXggcGxhdGZvcm1zLCBvciB3aGVuIGEgcmVtb3RlIGJyb3dzZXIgaXMgYXZhaWxhYmxlIG9uIFVuaXgsIHRoZQogY29udHJvbGxpbmcgcHJvY2VzcyB3aWxsIG5vdCB3YWl0IGZvciB0aGUgdXNlciB0byBmaW5pc2ggd2l0aCB0aGUgYnJvd3NlciwgYnV0CmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS93aW5yZWcucnN0IGIvRG9jL2xpYnJhcnkvd2lucmVnLnJzdAppbmRleCAwNmJjYjg2Li42YzkyMGI0IDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS93aW5yZWcucnN0CisrKyBiL0RvYy9saWJyYXJ5L3dpbnJlZy5yc3QKQEAgLTMyMiw3ICszMjIsNyBAQAogICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgfCBgYDJgYCB8IEFuIGludGVnZXIgZ2l2aW5nIHdoZW4gdGhlIGtleSB3YXMgbGFzdCAgICAgfAogICAgfCAgICAgICB8IG1vZGlmaWVkIChpZiBhdmFpbGFibGUpIGFzIDEwMCdzIG9mICAgICAgICAgfAotICAgfCAgICAgICB8IG5hbm9zZWNvbmRzIHNpbmNlIEphbiAxLCAxNjAwLiAgICAgICAgICAgICAgfAorICAgfCAgICAgICB8IG5hbm9zZWNvbmRzIHNpbmNlIEphbiAxLCAxNjAxLiAgICAgICAgICAgICAgfAogICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3dzZ2lyZWYucnN0IGIvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QKaW5kZXggMWNlZjJlOS4uNGVkOTQ1NCAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QKKysrIGIvRG9jL2xpYnJhcnkvd3NnaXJlZi5yc3QKQEAgLTUwMSw3ICs1MDEsNyBAQAogCiAgICBTaW1pbGFyIHRvIDpjbGFzczpgQmFzZUNHSUhhbmRsZXJgLCBidXQgZGVzaWduZWQgZm9yIHVzZSB3aXRoIEhUVFAgb3JpZ2luCiAgICBzZXJ2ZXJzLiAgSWYgeW91IGFyZSB3cml0aW5nIGFuIEhUVFAgc2VydmVyIGltcGxlbWVudGF0aW9uLCB5b3Ugd2lsbCBwcm9iYWJseQotICAgd2FudCB0byBzdWJjbGFzcyB0aGlzIGluc3RlYWQgb2YgOmNsYXNzOmBCYXNlQ0dJSGFuZGxlcmAKKyAgIHdhbnQgdG8gc3ViY2xhc3MgdGhpcyBpbnN0ZWFkIG9mIDpjbGFzczpgQmFzZUNHSUhhbmRsZXJgLgogCiAgICBUaGlzIGNsYXNzIGlzIGEgc3ViY2xhc3Mgb2YgOmNsYXNzOmBCYXNlSGFuZGxlcmAuICBJdCBvdmVycmlkZXMgdGhlCiAgICA6bWV0aDpgX19pbml0X19gLCA6bWV0aDpgZ2V0X3N0ZGluYCwgOm1ldGg6YGdldF9zdGRlcnJgLCA6bWV0aDpgYWRkX2NnaV92YXJzYCwKQEAgLTc1NCw3ICs3NTQsNyBAQAogICAgIyBvYmplY3QgdGhhdCBhY2NlcHRzIHR3byBhcmd1bWVudHMuIEZvciB0aGF0IHB1cnBvc2UsIHdlJ3JlIGdvaW5nIHRvCiAgICAjIHVzZSBhIGZ1bmN0aW9uIChub3RlIHRoYXQgeW91J3JlIG5vdCBsaW1pdGVkIHRvIGEgZnVuY3Rpb24sIHlvdSBjYW4KICAgICMgdXNlIGEgY2xhc3MgZm9yIGV4YW1wbGUpLiBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBmdW5jdGlvbgotICAgIyBpcyBhIGRpY3Rpb25hcnkgY29udGFpbmluZyBDR0ktc3R5bGUgZW52cmlyb25tZW50IHZhcmlhYmxlcyBhbmQgdGhlCisgICAjIGlzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIENHSS1zdHlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHRoZQogICAgIyBzZWNvbmQgdmFyaWFibGUgaXMgdGhlIGNhbGxhYmxlIG9iamVjdCAoc2VlIFBFUCAzMzMpLgogICAgZGVmIGhlbGxvX3dvcmxkX2FwcChlbnZpcm9uLCBzdGFydF9yZXNwb25zZSk6CiAgICAgICAgc3RhdHVzID0gJzIwMCBPSycgIyBIVFRQIFN0YXR1cwpkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5kb20ubWluaWRvbS5yc3QKaW5kZXggODljNjYwYS4uNjc2MmU5MSAxMDA2NDQKLS0tIGEvRG9jL2xpYnJhcnkveG1sLmRvbS5taW5pZG9tLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWwuZG9tLm1pbmlkb20ucnN0CkBAIC0xNSw3ICsxNSw3IEBACiBNb2RlbCBpbnRlcmZhY2UsIHdpdGggYW4gQVBJIHNpbWlsYXIgdG8gdGhhdCBpbiBvdGhlciBsYW5ndWFnZXMuICBJdCBpcyBpbnRlbmRlZAogdG8gYmUgc2ltcGxlciB0aGFuIHRoZSBmdWxsIERPTSBhbmQgYWxzbyBzaWduaWZpY2FudGx5IHNtYWxsZXIuICBVc2VycyB3aG8gYXJlCiBub3QgYWxyZWFkeSBwcm9maWNpZW50IHdpdGggdGhlIERPTSBzaG91bGQgY29uc2lkZXIgdXNpbmcgdGhlCi06bW9kOmB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIG1vZHVsZSBmb3IgdGhlaXIgWE1MIHByb2Nlc3NpbmcgaW5zdGVhZAorOm1vZDpgeG1sLmV0cmVlLkVsZW1lbnRUcmVlYCBtb2R1bGUgZm9yIHRoZWlyIFhNTCBwcm9jZXNzaW5nIGluc3RlYWQuCiAKIAogLi4gd2FybmluZzo6CkBAIC01NCw3ICs1NCw3IEBACiAKIC4uIGZ1bmN0aW9uOjogcGFyc2VTdHJpbmcoc3RyaW5nLCBwYXJzZXI9Tm9uZSkKIAotICAgUmV0dXJuIGEgOmNsYXNzOmBEb2N1bWVudGAgdGhhdCByZXByZXNlbnRzIHRoZSAqc3RyaW5nKi4gVGhpcyBtZXRob2QgY3JlYXRlcyBhCisgICBSZXR1cm4gYSA6Y2xhc3M6YERvY3VtZW50YCB0aGF0IHJlcHJlc2VudHMgdGhlICpzdHJpbmcqLiBUaGlzIG1ldGhvZCBjcmVhdGVzIGFuCiAgICA6Y2xhc3M6YGlvLlN0cmluZ0lPYCBvYmplY3QgZm9yIHRoZSBzdHJpbmcgYW5kIHBhc3NlcyB0aGF0IG9uIHRvIDpmdW5jOmBwYXJzZWAuCiAKIEJvdGggZnVuY3Rpb25zIHJldHVybiBhIDpjbGFzczpgRG9jdW1lbnRgIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIGNvbnRlbnQgb2YgdGhlCkBAIC0yNTIsNCArMjUyLDQgQEAKICAgICJVVEY4IiBpcyBub3QgdmFsaWQgaW4gYW4gWE1MIGRvY3VtZW50J3MgZGVjbGFyYXRpb24sIGV2ZW4gdGhvdWdoCiAgICBQeXRob24gYWNjZXB0cyBpdCBhcyBhbiBlbmNvZGluZyBuYW1lLgogICAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKLSAgIGFuZCBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzXCAuCisgICBhbmQgaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54aHRtbC4KZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZG9tLnB1bGxkb20ucnN0CmluZGV4IGE5YzlmNjcuLmEzYjhiYzEgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5kb20ucHVsbGRvbS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmRvbS5wdWxsZG9tLnJzdApAQCAtNDcsNyArNDcsNyBAQAogKiA6ZGF0YTpgUFJPQ0VTU0lOR19JTlNUUlVDVElPTmAKICogOmRhdGE6YElHTk9SQUJMRV9XSElURVNQQUNFYAogCi1gYG5vZGVgYCBpcyBhIG9iamVjdCBvZiB0eXBlIDpjbGFzczpgeG1sLmRvbS5taW5pZG9tLkRvY3VtZW50YCwKK2Bgbm9kZWBgIGlzIGFuIG9iamVjdCBvZiB0eXBlIDpjbGFzczpgeG1sLmRvbS5taW5pZG9tLkRvY3VtZW50YCwKIDpjbGFzczpgeG1sLmRvbS5taW5pZG9tLkVsZW1lbnRgIG9yIDpjbGFzczpgeG1sLmRvbS5taW5pZG9tLlRleHRgLgogCiBTaW5jZSB0aGUgZG9jdW1lbnQgaXMgdHJlYXRlZCBhcyBhICJmbGF0IiBzdHJlYW0gb2YgZXZlbnRzLCB0aGUgZG9jdW1lbnQgInRyZWUiCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWwuZG9tLnJzdCBiL0RvYy9saWJyYXJ5L3htbC5kb20ucnN0CmluZGV4IDE5NTEyZWQuLmE0MzIyMDIgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5kb20ucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbC5kb20ucnN0CkBAIC0zMDQsNyArMzA0LDcgQEAKIC4uIGF0dHJpYnV0ZTo6IE5vZGUucHJlZml4CiAKICAgIFRoZSBwYXJ0IG9mIHRoZSA6YXR0cjpgdGFnTmFtZWAgcHJlY2VkaW5nIHRoZSBjb2xvbiBpZiB0aGVyZSBpcyBvbmUsIGVsc2UgdGhlCi0gICBlbXB0eSBzdHJpbmcuICBUaGUgdmFsdWUgaXMgYSBzdHJpbmcsIG9yIGBgTm9uZWBgCisgICBlbXB0eSBzdHJpbmcuICBUaGUgdmFsdWUgaXMgYSBzdHJpbmcsIG9yIGBgTm9uZWBgLgogCiAKIC4uIGF0dHJpYnV0ZTo6IE5vZGUubmFtZXNwYWNlVVJJCkBAIC00MTIsNyArNDEyLDcgQEAKIC4uIG1ldGhvZDo6IE5vZGVMaXN0Lml0ZW0oaSkKIAogICAgUmV0dXJuIHRoZSAqaSondGggaXRlbSBmcm9tIHRoZSBzZXF1ZW5jZSwgaWYgdGhlcmUgaXMgb25lLCBvciBgYE5vbmVgYC4gIFRoZQotICAgaW5kZXggKmkqIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGxlc3MgdGhlbiB6ZXJvIG9yIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgIGluZGV4ICppKiBpcyBub3QgYWxsb3dlZCB0byBiZSBsZXNzIHRoYW4gemVybyBvciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlCiAgICBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLgogCiAKZGlmZiAtLWdpdCBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QgYi9Eb2MvbGlicmFyeS94bWwuZXRyZWUuZWxlbWVudHRyZWUucnN0CmluZGV4IDNmMmRjYmIuLmRjMDI3NGUgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZS5yc3QKKysrIGIvRG9jL2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLnJzdApAQCAtMTA1LDYgKzEwNSw1OSBAQAogICAgPj4+IHJvb3RbMF1bMV0udGV4dAogICAgJzIwMDgnCiAKKworLi4gbm90ZTo6CisKKyAgIE5vdCBhbGwgZWxlbWVudHMgb2YgdGhlIFhNTCBpbnB1dCB3aWxsIGVuZCB1cCBhcyBlbGVtZW50cyBvZiB0aGUKKyAgIHBhcnNlZCB0cmVlLiBDdXJyZW50bHksIHRoaXMgbW9kdWxlIHNraXBzIG92ZXIgYW55IFhNTCBjb21tZW50cywKKyAgIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBhbmQgZG9jdW1lbnQgdHlwZSBkZWNsYXJhdGlvbnMgaW4gdGhlCisgICBpbnB1dC4gTmV2ZXJ0aGVsZXNzLCB0cmVlcyBidWlsdCB1c2luZyB0aGlzIG1vZHVsZSdzIEFQSSByYXRoZXIKKyAgIHRoYW4gcGFyc2luZyBmcm9tIFhNTCB0ZXh0IGNhbiBoYXZlIGNvbW1lbnRzIGFuZCBwcm9jZXNzaW5nCisgICBpbnN0cnVjdGlvbnMgaW4gdGhlbTsgdGhleSB3aWxsIGJlIGluY2x1ZGVkIHdoZW4gZ2VuZXJhdGluZyBYTUwKKyAgIG91dHB1dC4gQSBkb2N1bWVudCB0eXBlIGRlY2xhcmF0aW9uIG1heSBiZSBhY2Nlc3NlZCBieSBwYXNzaW5nIGEKKyAgIGN1c3RvbSA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBpbnN0YW5jZSB0byB0aGUgOmNsYXNzOmBYTUxQYXJzZXJgCisgICBjb25zdHJ1Y3Rvci4KKworCisuLiBfZWxlbWVudHRyZWUtcHVsbC1wYXJzaW5nOgorCitQdWxsIEFQSSBmb3Igbm9uLWJsb2NraW5nIHBhcnNpbmcKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitNb3N0IHBhcnNpbmcgZnVuY3Rpb25zIHByb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlIHJlcXVpcmUgdGhlIHdob2xlIGRvY3VtZW50Cit0byBiZSByZWFkIGF0IG9uY2UgYmVmb3JlIHJldHVybmluZyBhbnkgcmVzdWx0LiAgSXQgaXMgcG9zc2libGUgdG8gdXNlIGFuCis6Y2xhc3M6YFhNTFBhcnNlcmAgYW5kIGZlZWQgZGF0YSBpbnRvIGl0IGluY3JlbWVudGFsbHksIGJ1dCBpdCBpcyBhIHB1c2ggQVBJIHRoYXQKK2NhbGxzIG1ldGhvZHMgb24gYSBjYWxsYmFjayB0YXJnZXQsIHdoaWNoIGlzIHRvbyBsb3ctbGV2ZWwgYW5kIGluY29udmVuaWVudCBmb3IKK21vc3QgbmVlZHMuICBTb21ldGltZXMgd2hhdCB0aGUgdXNlciByZWFsbHkgd2FudHMgaXMgdG8gYmUgYWJsZSB0byBwYXJzZSBYTUwKK2luY3JlbWVudGFsbHksIHdpdGhvdXQgYmxvY2tpbmcgb3BlcmF0aW9ucywgd2hpbGUgZW5qb3lpbmcgdGhlIGNvbnZlbmllbmNlIG9mCitmdWxseSBjb25zdHJ1Y3RlZCA6Y2xhc3M6YEVsZW1lbnRgIG9iamVjdHMuCisKK1RoZSBtb3N0IHBvd2VyZnVsIHRvb2wgZm9yIGRvaW5nIHRoaXMgaXMgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYC4gIEl0IGRvZXMgbm90CityZXF1aXJlIGEgYmxvY2tpbmcgcmVhZCB0byBvYnRhaW4gdGhlIFhNTCBkYXRhLCBhbmQgaXMgaW5zdGVhZCBmZWQgd2l0aCBkYXRhCitpbmNyZW1lbnRhbGx5IHdpdGggOm1ldGg6YFhNTFB1bGxQYXJzZXIuZmVlZGAgY2FsbHMuICBUbyBnZXQgdGhlIHBhcnNlZCBYTUwKK2VsZW1lbnRzLCBjYWxsIDptZXRoOmBYTUxQdWxsUGFyc2VyLnJlYWRfZXZlbnRzYC4gIEhlcmUgaXMgYW4gZXhhbXBsZTo6CisKKyAgID4+PiBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKFsnc3RhcnQnLCAnZW5kJ10pCisgICA+Pj4gcGFyc2VyLmZlZWQoJzxteXRhZz5zb21ldGV4dCcpCisgICA+Pj4gbGlzdChwYXJzZXIucmVhZF9ldmVudHMoKSkKKyAgIFsoJ3N0YXJ0JywgPEVsZW1lbnQgJ215dGFnJyBhdCAweDdmYTY2ZGIyYmU1OD4pXQorICAgPj4+IHBhcnNlci5mZWVkKCcgbW9yZSB0ZXh0PC9teXRhZz4nKQorICAgPj4+IGZvciBldmVudCwgZWxlbSBpbiBwYXJzZXIucmVhZF9ldmVudHMoKToKKyAgIC4uLiAgIHByaW50KGV2ZW50KQorICAgLi4uICAgcHJpbnQoZWxlbS50YWcsICd0ZXh0PScsIGVsZW0udGV4dCkKKyAgIC4uLgorICAgZW5kCisKK1RoZSBvYnZpb3VzIHVzZSBjYXNlIGlzIGFwcGxpY2F0aW9ucyB0aGF0IG9wZXJhdGUgaW4gYSBub24tYmxvY2tpbmcgZmFzaGlvbgord2hlcmUgdGhlIFhNTCBkYXRhIGlzIGJlaW5nIHJlY2VpdmVkIGZyb20gYSBzb2NrZXQgb3IgcmVhZCBpbmNyZW1lbnRhbGx5IGZyb20KK3NvbWUgc3RvcmFnZSBkZXZpY2UuICBJbiBzdWNoIGNhc2VzLCBibG9ja2luZyByZWFkcyBhcmUgdW5hY2NlcHRhYmxlLgorCitCZWNhdXNlIGl0J3Mgc28gZmxleGlibGUsIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAgY2FuIGJlIGluY29udmVuaWVudCB0byB1c2UgZm9yCitzaW1wbGVyIHVzZS1jYXNlcy4gIElmIHlvdSBkb24ndCBtaW5kIHlvdXIgYXBwbGljYXRpb24gYmxvY2tpbmcgb24gcmVhZGluZyBYTUwKK2RhdGEgYnV0IHdvdWxkIHN0aWxsIGxpa2UgdG8gaGF2ZSBpbmNyZW1lbnRhbCBwYXJzaW5nIGNhcGFiaWxpdGllcywgdGFrZSBhIGxvb2sKK2F0IDpmdW5jOmBpdGVycGFyc2VgLiAgSXQgY2FuIGJlIHVzZWZ1bCB3aGVuIHlvdSdyZSByZWFkaW5nIGEgbGFyZ2UgWE1MIGRvY3VtZW50CithbmQgZG9uJ3Qgd2FudCB0byBob2xkIGl0IHdob2xseSBpbiBtZW1vcnkuCisKIEZpbmRpbmcgaW50ZXJlc3RpbmcgZWxlbWVudHMKIF5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMjMxLDYgKzI4NCw3MiBAQAogICAgPj4+IEVULmR1bXAoYSkKICAgIDxhPjxiIC8+PGM+PGQgLz48L2M+PC9hPgogCitQYXJzaW5nIFhNTCB3aXRoIE5hbWVzcGFjZXMKK15eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXgorCitJZiB0aGUgWE1MIGlucHV0IGhhcyBgbmFtZXNwYWNlcworPGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1hNTF9uYW1lc3BhY2U+YF9fLCB0YWdzIGFuZCBhdHRyaWJ1dGVzCit3aXRoIHByZWZpeGVzIGluIHRoZSBmb3JtIGBgcHJlZml4OnNvbWV0YWdgYCBnZXQgZXhwYW5kZWQgdG8KK2Bge3VyaX1zb21ldGFnYGAgd2hlcmUgdGhlICpwcmVmaXgqIGlzIHJlcGxhY2VkIGJ5IHRoZSBmdWxsICpVUkkqLgorQWxzbywgaWYgdGhlcmUgaXMgYSBgZGVmYXVsdCBuYW1lc3BhY2UKKzxodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA2L1JFQy14bWwtbmFtZXMtMjAwNjA4MTYvI2RlZmF1bHRpbmc+YF9fLAordGhhdCBmdWxsIFVSSSBnZXRzIHByZXBlbmRlZCB0byBhbGwgb2YgdGhlIG5vbi1wcmVmaXhlZCB0YWdzLgorCitIZXJlIGlzIGFuIFhNTCBleGFtcGxlIHRoYXQgaW5jb3Jwb3JhdGVzIHR3byBuYW1lc3BhY2VzLCBvbmUgd2l0aCB0aGUKK3ByZWZpeCAiZmljdGlvbmFsIiBhbmQgdGhlIG90aGVyIHNlcnZpbmcgYXMgdGhlIGRlZmF1bHQgbmFtZXNwYWNlOgorCisuLiBjb2RlLWJsb2NrOjogeG1sCisKKyAgICA8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKyAgICA8YWN0b3JzIHhtbG5zOmZpY3Rpb25hbD0iaHR0cDovL2NoYXJhY3RlcnMuZXhhbXBsZS5jb20iCisgICAgICAgICAgICB4bWxucz0iaHR0cDovL3Blb3BsZS5leGFtcGxlLmNvbSI+CisgICAgICAgIDxhY3Rvcj4KKyAgICAgICAgICAgIDxuYW1lPkpvaG4gQ2xlZXNlPC9uYW1lPgorICAgICAgICAgICAgPGZpY3Rpb25hbDpjaGFyYWN0ZXI+TGFuY2Vsb3Q8L2ZpY3Rpb25hbDpjaGFyYWN0ZXI+CisgICAgICAgICAgICA8ZmljdGlvbmFsOmNoYXJhY3Rlcj5BcmNoaWUgTGVhY2g8L2ZpY3Rpb25hbDpjaGFyYWN0ZXI+CisgICAgICAgIDwvYWN0b3I+CisgICAgICAgIDxhY3Rvcj4KKyAgICAgICAgICAgIDxuYW1lPkVyaWMgSWRsZTwvbmFtZT4KKyAgICAgICAgICAgIDxmaWN0aW9uYWw6Y2hhcmFjdGVyPlNpciBSb2JpbjwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KKyAgICAgICAgICAgIDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkd1bnRoZXI8L2ZpY3Rpb25hbDpjaGFyYWN0ZXI+CisgICAgICAgICAgICA8ZmljdGlvbmFsOmNoYXJhY3Rlcj5Db21tYW5kZXIgQ2xlbWVudDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KKyAgICAgICAgPC9hY3Rvcj4KKyAgICA8L2FjdG9ycz4KKworT25lIHdheSB0byBzZWFyY2ggYW5kIGV4cGxvcmUgdGhpcyBYTUwgZXhhbXBsZSBpcyB0byBtYW51YWxseSBhZGQgdGhlCitVUkkgdG8gZXZlcnkgdGFnIG9yIGF0dHJpYnV0ZSBpbiB0aGUgeHBhdGggb2YgYQorOm1ldGg6YH5FbGVtZW50LmZpbmRgIG9yIDptZXRoOmB+RWxlbWVudC5maW5kYWxsYDo6CisKKyAgICByb290ID0gZnJvbXN0cmluZyh4bWxfdGV4dCkKKyAgICBmb3IgYWN0b3IgaW4gcm9vdC5maW5kYWxsKCd7aHR0cDovL3Blb3BsZS5leGFtcGxlLmNvbX1hY3RvcicpOgorICAgICAgICBuYW1lID0gYWN0b3IuZmluZCgne2h0dHA6Ly9wZW9wbGUuZXhhbXBsZS5jb219bmFtZScpCisgICAgICAgIHByaW50KG5hbWUudGV4dCkKKyAgICAgICAgZm9yIGNoYXIgaW4gYWN0b3IuZmluZGFsbCgne2h0dHA6Ly9jaGFyYWN0ZXJzLmV4YW1wbGUuY29tfWNoYXJhY3RlcicpOgorICAgICAgICAgICAgcHJpbnQoJyB8LS0+JywgY2hhci50ZXh0KQorCitBIGJldHRlciB3YXkgdG8gc2VhcmNoIHRoZSBuYW1lc3BhY2VkIFhNTCBleGFtcGxlIGlzIHRvIGNyZWF0ZSBhCitkaWN0aW9uYXJ5IHdpdGggeW91ciBvd24gcHJlZml4ZXMgYW5kIHVzZSB0aG9zZSBpbiB0aGUgc2VhcmNoIGZ1bmN0aW9uczo6CisKKyAgICBucyA9IHsncmVhbF9wZXJzb24nOiAnaHR0cDovL3Blb3BsZS5leGFtcGxlLmNvbScsCisgICAgICAgICAgJ3JvbGUnOiAnaHR0cDovL2NoYXJhY3RlcnMuZXhhbXBsZS5jb20nfQorCisgICAgZm9yIGFjdG9yIGluIHJvb3QuZmluZGFsbCgncmVhbF9wZXJzb246YWN0b3InLCBucyk6CisgICAgICAgIG5hbWUgPSBhY3Rvci5maW5kKCdyZWFsX3BlcnNvbjpuYW1lJywgbnMpCisgICAgICAgIHByaW50KG5hbWUudGV4dCkKKyAgICAgICAgZm9yIGNoYXIgaW4gYWN0b3IuZmluZGFsbCgncm9sZTpjaGFyYWN0ZXInLCBucyk6CisgICAgICAgICAgICBwcmludCgnIHwtLT4nLCBjaGFyLnRleHQpCisKK1RoZXNlIHR3byBhcHByb2FjaGVzIGJvdGggb3V0cHV0OjoKKworICAgIEpvaG4gQ2xlZXNlCisgICAgIHwtLT4gTGFuY2Vsb3QKKyAgICAgfC0tPiBBcmNoaWUgTGVhY2gKKyAgICBFcmljIElkbGUKKyAgICAgfC0tPiBTaXIgUm9iaW4KKyAgICAgfC0tPiBHdW50aGVyCisgICAgIHwtLT4gQ29tbWFuZGVyIENsZW1lbnQKKworCiBBZGRpdGlvbmFsIHJlc291cmNlcwogXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMjg1LDcgKzQwNCw3IEBACiArPT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwogfCBgYHRhZ2BgICAgICAgICAgICAgICAgfCBTZWxlY3RzIGFsbCBjaGlsZCBlbGVtZW50cyB3aXRoIHRoZSBnaXZlbiB0YWcuICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgIHwgRm9yIGV4YW1wbGUsIGBgc3BhbWBgIHNlbGVjdHMgYWxsIGNoaWxkIGVsZW1lbnRzICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICB8IG5hbWVkIGBgc3BhbWBgLCBgYHNwYW0vZWdnYGAgc2VsZWN0cyBhbGwgICAgICAgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgfCBuYW1lZCBgYHNwYW1gYCwgYW5kIGBgc3BhbS9lZ2dgYCBzZWxlY3RzIGFsbCAgICAgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgIHwgZ3JhbmRjaGlsZHJlbiBuYW1lZCBgYGVnZ2BgIGluIGFsbCBjaGlsZHJlbiBuYW1lZCAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICB8IGBgc3BhbWBgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKQEAgLTMxMyw2ICs0MzIsMTAgQEAKIHwgYGBbdGFnXWBgICAgICAgICAgICAgIHwgU2VsZWN0cyBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIGEgY2hpbGQgbmFtZWQgICAgICAgICB8CiB8ICAgICAgICAgICAgICAgICAgICAgICB8IGBgdGFnYGAuICBPbmx5IGltbWVkaWF0ZSBjaGlsZHJlbiBhcmUgc3VwcG9ydGVkLiAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgYGBbdGFnPSd0ZXh0J11gYCAgICAgIHwgU2VsZWN0cyBhbGwgZWxlbWVudHMgdGhhdCBoYXZlIGEgY2hpbGQgbmFtZWQgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICB8IGBgdGFnYGAgd2hvc2UgY29tcGxldGUgdGV4dCBjb250ZW50LCBpbmNsdWRpbmcgICAgICAgfAorfCAgICAgICAgICAgICAgICAgICAgICAgfCBkZXNjZW5kYW50cywgZXF1YWxzIHRoZSBnaXZlbiBgYHRleHRgYC4gICAgICAgICAgICAgIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiB8IGBgW3Bvc2l0aW9uXWBgICAgICAgICB8IFNlbGVjdHMgYWxsIGVsZW1lbnRzIHRoYXQgYXJlIGxvY2F0ZWQgYXQgdGhlIGdpdmVuICAgfAogfCAgICAgICAgICAgICAgICAgICAgICAgfCBwb3NpdGlvbi4gIFRoZSBwb3NpdGlvbiBjYW4gYmUgZWl0aGVyIGFuIGludGVnZXIgICAgIHwKIHwgICAgICAgICAgICAgICAgICAgICAgIHwgKDEgaXMgdGhlIGZpcnN0IHBvc2l0aW9uKSwgdGhlIGV4cHJlc3Npb24gYGBsYXN0KClgYCB8CkBAIC0zNDEsNiArNDY0LDEwIEBACiAgICBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWVudCBzdHJpbmcuICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UKICAgIHJlcHJlc2VudGluZyBhIGNvbW1lbnQuCiAKKyAgIE5vdGUgdGhhdCA6Y2xhc3M6YFhNTFBhcnNlcmAgc2tpcHMgb3ZlciBjb21tZW50cyBpbiB0aGUgaW5wdXQKKyAgIGluc3RlYWQgb2YgY3JlYXRpbmcgY29tbWVudCBvYmplY3RzIGZvciB0aGVtLiBBbiA6Y2xhc3M6YEVsZW1lbnRUcmVlYCB3aWxsCisgICBvbmx5IGNvbnRhaW4gY29tbWVudCBub2RlcyBpZiB0aGV5IGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRvCisgICB0aGUgdHJlZSB1c2luZyBvbmUgb2YgdGhlIDpjbGFzczpgRWxlbWVudGAgbWV0aG9kcy4KIAogLi4gZnVuY3Rpb246OiBkdW1wKGVsZW0pCiAKQEAgLTM3OSwyNSArNTA2LDMyIEBACiAKICAgIFBhcnNlcyBhbiBYTUwgc2VjdGlvbiBpbnRvIGFuIGVsZW1lbnQgdHJlZSBpbmNyZW1lbnRhbGx5LCBhbmQgcmVwb3J0cyB3aGF0J3MKICAgIGdvaW5nIG9uIHRvIHRoZSB1c2VyLiAgKnNvdXJjZSogaXMgYSBmaWxlbmFtZSBvciA6dGVybTpgZmlsZSBvYmplY3RgCi0gICBjb250YWluaW5nIFhNTCBkYXRhLiAgKmV2ZW50cyogaXMgYSB0dXBsZSBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBUaGUKLSAgIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzIGBgInN0YXJ0ImBgLCBgYCJlbmQiYGAsIGBgInN0YXJ0LW5zImBgCi0gICBhbmQgYGAiZW5kLW5zImBgICh0aGUgIm5zIiBldmVudHMgYXJlIHVzZWQgdG8gZ2V0IGRldGFpbGVkIG5hbWVzcGFjZQorICAgY29udGFpbmluZyBYTUwgZGF0YS4gICpldmVudHMqIGlzIGEgc2VxdWVuY2Ugb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLiAgVGhlCisgICBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncyBgYCJzdGFydCJgYCwgYGAiZW5kImBgLCBgYCJzdGFydC1ucyJgYCBhbmQKKyAgIGBgImVuZC1ucyJgYCAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZCBuYW1lc3BhY2UKICAgIGluZm9ybWF0aW9uKS4gIElmICpldmVudHMqIGlzIG9taXR0ZWQsIG9ubHkgYGAiZW5kImBgIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCiAgICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZSBzdGFuZGFyZAotICAgOmNsYXNzOmBYTUxQYXJzZXJgIHBhcnNlciBpcyB1c2VkLiAgKnBhcnNlciogY2FuIG9ubHkgdXNlIHRoZSBkZWZhdWx0Ci0gICA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBhcyBhIHRhcmdldC4gIFJldHVybnMgYW4gOnRlcm06YGl0ZXJhdG9yYCBwcm92aWRpbmcKLSAgIGBgKGV2ZW50LCBlbGVtKWBgIHBhaXJzLgorICAgOmNsYXNzOmBYTUxQYXJzZXJgIHBhcnNlciBpcyB1c2VkLiAgKnBhcnNlciogbXVzdCBiZSBhIHN1YmNsYXNzIG9mCisgICA6Y2xhc3M6YFhNTFBhcnNlcmAgYW5kIGNhbiBvbmx5IHVzZSB0aGUgZGVmYXVsdCA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBhcyBhCisgICB0YXJnZXQuICBSZXR1cm5zIGFuIDp0ZXJtOmBpdGVyYXRvcmAgcHJvdmlkaW5nIGBgKGV2ZW50LCBlbGVtKWBgIHBhaXJzLgorCisgICBOb3RlIHRoYXQgd2hpbGUgOmZ1bmM6YGl0ZXJwYXJzZWAgYnVpbGRzIHRoZSB0cmVlIGluY3JlbWVudGFsbHksIGl0IGlzc3VlcworICAgYmxvY2tpbmcgcmVhZHMgb24gKnNvdXJjZSogKG9yIHRoZSBmaWxlIGl0IG5hbWVzKS4gIEFzIHN1Y2gsIGl0J3MgdW5zdWl0YWJsZQorICAgZm9yIGFwcGxpY2F0aW9ucyB3aGVyZSBibG9ja2luZyByZWFkcyBjYW4ndCBiZSBtYWRlLiAgRm9yIGZ1bGx5IG5vbi1ibG9ja2luZworICAgcGFyc2luZywgc2VlIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAuCiAKICAgIC4uIG5vdGU6OgogCi0gICAgICA6ZnVuYzpgaXRlcnBhcnNlYCBvbmx5IGd1YXJhbnRlZXMgdGhhdCBpdCBoYXMgc2VlbiB0aGUgIj4iCi0gICAgICBjaGFyYWN0ZXIgb2YgYSBzdGFydGluZyB0YWcgd2hlbiBpdCBlbWl0cyBhICJzdGFydCIgZXZlbnQsIHNvIHRoZQotICAgICAgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCwgYnV0IHRoZSBjb250ZW50cyBvZiB0aGUgdGV4dCBhbmQgdGFpbCBhdHRyaWJ1dGVzCi0gICAgICBhcmUgdW5kZWZpbmVkIGF0IHRoYXQgcG9pbnQuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBlbGVtZW50IGNoaWxkcmVuOwotICAgICAgdGhleSBtYXkgb3IgbWF5IG5vdCBiZSBwcmVzZW50LgorICAgICAgOmZ1bmM6YGl0ZXJwYXJzZWAgb25seSBndWFyYW50ZWVzIHRoYXQgaXQgaGFzIHNlZW4gdGhlICI+IiBjaGFyYWN0ZXIgb2YgYQorICAgICAgc3RhcnRpbmcgdGFnIHdoZW4gaXQgZW1pdHMgYSAic3RhcnQiIGV2ZW50LCBzbyB0aGUgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCwKKyAgICAgIGJ1dCB0aGUgY29udGVudHMgb2YgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcyBhcmUgdW5kZWZpbmVkIGF0IHRoYXQKKyAgICAgIHBvaW50LiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgZWxlbWVudCBjaGlsZHJlbjsgdGhleSBtYXkgb3IgbWF5IG5vdCBiZQorICAgICAgcHJlc2VudC4KIAogICAgICAgSWYgeW91IG5lZWQgYSBmdWxseSBwb3B1bGF0ZWQgZWxlbWVudCwgbG9vayBmb3IgImVuZCIgZXZlbnRzIGluc3RlYWQuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFRoZSAqcGFyc2VyKiBhcmd1bWVudC4KIAogLi4gZnVuY3Rpb246OiBwYXJzZShzb3VyY2UsIHBhcnNlcj1Ob25lKQogCkBAIC00MTQsNiArNTQ4LDExIEBACiAgICBjb250YWluaW5nIHRoZSBQSSB0YXJnZXQuICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgUEkgY29udGVudHMsIGlmCiAgICBnaXZlbi4gIFJldHVybnMgYW4gZWxlbWVudCBpbnN0YW5jZSwgcmVwcmVzZW50aW5nIGEgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbi4KIAorICAgTm90ZSB0aGF0IDpjbGFzczpgWE1MUGFyc2VyYCBza2lwcyBvdmVyIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zCisgICBpbiB0aGUgaW5wdXQgaW5zdGVhZCBvZiBjcmVhdGluZyBjb21tZW50IG9iamVjdHMgZm9yIHRoZW0uIEFuCisgICA6Y2xhc3M6YEVsZW1lbnRUcmVlYCB3aWxsIG9ubHkgY29udGFpbiBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzIGlmCisgICB0aGV5IGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRvIHRoZSB0cmVlIHVzaW5nIG9uZSBvZiB0aGUKKyAgIDpjbGFzczpgRWxlbWVudGAgbWV0aG9kcy4KIAogLi4gZnVuY3Rpb246OiByZWdpc3Rlcl9uYW1lc3BhY2UocHJlZml4LCB1cmkpCiAKQEAgLTQzOCwyOSArNTc3LDM5IEBACiAgICBhcmd1bWVudHMuICBSZXR1cm5zIGFuIGVsZW1lbnQgaW5zdGFuY2UuCiAKIAotLi4gZnVuY3Rpb246OiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz0idXMtYXNjaWkiLCBtZXRob2Q9InhtbCIpCisuLiBmdW5jdGlvbjo6IHRvc3RyaW5nKGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIiwgKiwgXAorICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKICAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKICAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgVXNlIGBgZW5jb2Rpbmc9InVuaWNvZGUiYGAgdG8KICAgIGdlbmVyYXRlIGEgVW5pY29kZSBzdHJpbmcgKG90aGVyd2lzZSwgYSBieXRlc3RyaW5nIGlzIGdlbmVyYXRlZCkuICAqbWV0aG9kKgogICAgaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuCisgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDptZXRoOmBFbGVtZW50VHJlZS53cml0ZWAuCiAgICBSZXR1cm5zIGFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIuCiAKLS4uIGZ1bmN0aW9uOjogdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIG1ldGhvZD0ieG1sIikKKworLi4gZnVuY3Rpb246OiB0b3N0cmluZ2xpc3QoZWxlbWVudCwgZW5jb2Rpbmc9InVzLWFzY2lpIiwgbWV0aG9kPSJ4bWwiLCAqLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKQogCiAgICBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKICAgIHN1YmVsZW1lbnRzLiAgKmVsZW1lbnQqIGlzIGFuIDpjbGFzczpgRWxlbWVudGAgaW5zdGFuY2UuICAqZW5jb2RpbmcqIFsxXV8gaXMKICAgIHRoZSBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLiAgVXNlIGBgZW5jb2Rpbmc9InVuaWNvZGUiYGAgdG8KICAgIGdlbmVyYXRlIGEgVW5pY29kZSBzdHJpbmcgKG90aGVyd2lzZSwgYSBieXRlc3RyaW5nIGlzIGdlbmVyYXRlZCkuICAqbWV0aG9kKgogICAgaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzIGBgInhtbCJgYCkuCisgICAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDptZXRoOmBFbGVtZW50VHJlZS53cml0ZWAuCiAgICBSZXR1cm5zIGEgbGlzdCBvZiAob3B0aW9uYWxseSkgZW5jb2RlZCBzdHJpbmdzIGNvbnRhaW5pbmcgdGhlIFhNTCBkYXRhLgogICAgSXQgZG9lcyBub3QgZ3VhcmFudGVlIGFueSBzcGVjaWZpYyBzZXF1ZW5jZSwgZXhjZXB0IHRoYXQKICAgIGBgYiIiLmpvaW4odG9zdHJpbmdsaXN0KGVsZW1lbnQpKSA9PSB0b3N0cmluZyhlbGVtZW50KWBgLgogCiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjIKIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgKnNob3J0X2VtcHR5X2VsZW1lbnRzKiBwYXJhbWV0ZXIuCisKIAogLi4gZnVuY3Rpb246OiBYTUwodGV4dCwgcGFyc2VyPU5vbmUpCiAKQEAgLTUwMiwyMSArNjUxLDI5IEBACiAKIAogICAgLi4gYXR0cmlidXRlOjogdGV4dAorICAgICAgICAgICAgICAgICAgdGFpbAogCi0gICAgICBUaGUgKnRleHQqIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBob2xkIGFkZGl0aW9uYWwgZGF0YSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgIHRoZSBlbGVtZW50LiAgQXMgdGhlIG5hbWUgaW1wbGllcyB0aGlzIGF0dHJpYnV0ZSBpcyB1c3VhbGx5IGEgc3RyaW5nIGJ1dAotICAgICAgbWF5IGJlIGFueSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBvYmplY3QuICBJZiB0aGUgZWxlbWVudCBpcyBjcmVhdGVkIGZyb20KLSAgICAgIGFuIFhNTCBmaWxlIHRoZSBhdHRyaWJ1dGUgd2lsbCBjb250YWluIGFueSB0ZXh0IGZvdW5kIGJldHdlZW4gdGhlIGVsZW1lbnQKLSAgICAgIHRhZ3MuCisgICAgICBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIHRvIGhvbGQgYWRkaXRpb25hbCBkYXRhIGFzc29jaWF0ZWQgd2l0aAorICAgICAgdGhlIGVsZW1lbnQuICBUaGVpciB2YWx1ZXMgYXJlIHVzdWFsbHkgc3RyaW5ncyBidXQgbWF5IGJlIGFueQorICAgICAgYXBwbGljYXRpb24tc3BlY2lmaWMgb2JqZWN0LiAgSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBmcm9tCisgICAgICBhbiBYTUwgZmlsZSwgdGhlICp0ZXh0KiBhdHRyaWJ1dGUgaG9sZHMgZWl0aGVyIHRoZSB0ZXh0IGJldHdlZW4KKyAgICAgIHRoZSBlbGVtZW50J3Mgc3RhcnQgdGFnIGFuZCBpdHMgZmlyc3QgY2hpbGQgb3IgZW5kIHRhZywgb3IgYGBOb25lYGAsIGFuZAorICAgICAgdGhlICp0YWlsKiBhdHRyaWJ1dGUgaG9sZHMgZWl0aGVyIHRoZSB0ZXh0IGJldHdlZW4gdGhlIGVsZW1lbnQncworICAgICAgZW5kIHRhZyBhbmQgdGhlIG5leHQgdGFnLCBvciBgYE5vbmVgYC4gIEZvciB0aGUgWE1MIGRhdGEKIAorICAgICAgLi4gY29kZS1ibG9jazo6IHhtbAogCi0gICAuLiBhdHRyaWJ1dGU6OiB0YWlsCisgICAgICAgICA8YT48Yj4xPGM+MjxkLz4zPC9jPjwvYj40PC9hPgogCi0gICAgICBUaGUgKnRhaWwqIGF0dHJpYnV0ZSBjYW4gYmUgdXNlZCB0byBob2xkIGFkZGl0aW9uYWwgZGF0YSBhc3NvY2lhdGVkIHdpdGgKLSAgICAgIHRoZSBlbGVtZW50LiAgVGhpcyBhdHRyaWJ1dGUgaXMgdXN1YWxseSBhIHN0cmluZyBidXQgbWF5IGJlIGFueQotICAgICAgYXBwbGljYXRpb24tc3BlY2lmaWMgb2JqZWN0LiAgSWYgdGhlIGVsZW1lbnQgaXMgY3JlYXRlZCBmcm9tIGFuIFhNTCBmaWxlCi0gICAgICB0aGUgYXR0cmlidXRlIHdpbGwgY29udGFpbiBhbnkgdGV4dCBmb3VuZCBhZnRlciB0aGUgZWxlbWVudCdzIGVuZCB0YWcgYW5kCi0gICAgICBiZWZvcmUgdGhlIG5leHQgdGFnLgorICAgICAgdGhlICphKiBlbGVtZW50IGhhcyBgYE5vbmVgYCBmb3IgYm90aCAqdGV4dCogYW5kICp0YWlsKiBhdHRyaWJ1dGVzLAorICAgICAgdGhlICpiKiBlbGVtZW50IGhhcyAqdGV4dCogYGAiMSJgYCBhbmQgKnRhaWwqIGBgIjQiYGAsCisgICAgICB0aGUgKmMqIGVsZW1lbnQgaGFzICp0ZXh0KiBgYCIyImBgIGFuZCAqdGFpbCogYGBOb25lYGAsCisgICAgICBhbmQgdGhlICpkKiBlbGVtZW50IGhhcyAqdGV4dCogYGBOb25lYGAgYW5kICp0YWlsKiBgYCIzImBgLgorCisgICAgICBUbyBjb2xsZWN0IHRoZSBpbm5lciB0ZXh0IG9mIGFuIGVsZW1lbnQsIHNlZSA6bWV0aDpgaXRlcnRleHRgLCBmb3IKKyAgICAgIGV4YW1wbGUgYGAiIi5qb2luKGVsZW1lbnQuaXRlcnRleHQoKSlgYC4KKworICAgICAgQXBwbGljYXRpb25zIG1heSBzdG9yZSBhcmJpdHJhcnkgb2JqZWN0cyBpbiB0aGVzZSBhdHRyaWJ1dGVzLgogCiAKICAgIC4uIGF0dHJpYnV0ZTo6IGF0dHJpYgpAQCAtNzM0LDcgKzg5MSw3IEBACiAKICAgICAgIENyZWF0ZXMgYW5kIHJldHVybnMgYSB0cmVlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBlbGVtZW50LiAgVGhlIGl0ZXJhdG9yCiAgICAgICBsb29wcyBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGlzIHRyZWUsIGluIHNlY3Rpb24gb3JkZXIuICAqdGFnKiBpcyB0aGUgdGFnCi0gICAgICB0byBsb29rIGZvciAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKQorICAgICAgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykuCiAKIAogICAgLi4gbWV0aG9kOjogaXRlcmZpbmQobWF0Y2gsIG5hbWVzcGFjZXM9Tm9uZSkKQEAgLTc1Myw3ICs5MTAsOCBAQAogCiAKICAgIC4uIG1ldGhvZDo6IHdyaXRlKGZpbGUsIGVuY29kaW5nPSJ1cy1hc2NpaSIsIHhtbF9kZWNsYXJhdGlvbj1Ob25lLCBcCi0gICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X25hbWVzcGFjZT1Ob25lLCBtZXRob2Q9InhtbCIpCisgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0X25hbWVzcGFjZT1Ob25lLCBtZXRob2Q9InhtbCIsICosIFwKKyAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpCiAKICAgICAgIFdyaXRlcyB0aGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSwgYXMgWE1MLiAgKmZpbGUqIGlzIGEgZmlsZSBuYW1lLCBvciBhCiAgICAgICA6dGVybTpgZmlsZSBvYmplY3RgIG9wZW5lZCBmb3Igd3JpdGluZy4gICplbmNvZGluZyogWzFdXyBpcyB0aGUgb3V0cHV0CkBAIC03NjQsNiArOTIyLDEwIEBACiAgICAgICAqZGVmYXVsdF9uYW1lc3BhY2UqIHNldHMgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSAoZm9yICJ4bWxucyIpLgogICAgICAgKm1ldGhvZCogaXMgZWl0aGVyIGBgInhtbCJgYCwgYGAiaHRtbCJgYCBvciBgYCJ0ZXh0ImBgIChkZWZhdWx0IGlzCiAgICAgICBgYCJ4bWwiYGApLgorICAgICAgVGhlIGtleXdvcmQtb25seSAqc2hvcnRfZW1wdHlfZWxlbWVudHMqIHBhcmFtZXRlciBjb250cm9scyB0aGUgZm9ybWF0dGluZworICAgICAgb2YgZWxlbWVudHMgdGhhdCBjb250YWluIG5vIGNvbnRlbnQuICBJZiAqVHJ1ZSogKHRoZSBkZWZhdWx0KSwgdGhleSBhcmUKKyAgICAgIGVtaXR0ZWQgYXMgYSBzaW5nbGUgc2VsZi1jbG9zZWQgdGFnLCBvdGhlcndpc2UgdGhleSBhcmUgZW1pdHRlZCBhcyBhIHBhaXIKKyAgICAgIG9mIHN0YXJ0L2VuZCB0YWdzLgogCiAgICAgICBUaGUgb3V0cHV0IGlzIGVpdGhlciBhIHN0cmluZyAoOmNsYXNzOmBzdHJgKSBvciBiaW5hcnkgKDpjbGFzczpgYnl0ZXNgKS4KICAgICAgIFRoaXMgaXMgY29udHJvbGxlZCBieSB0aGUgKmVuY29kaW5nKiBhcmd1bWVudC4gIElmICplbmNvZGluZyogaXMKQEAgLTc3Miw2ICs5MzQsOSBAQAogICAgICAgOnRlcm06YGZpbGUgb2JqZWN0YDsgbWFrZSBzdXJlIHlvdSBkbyBub3QgdHJ5IHRvIHdyaXRlIGEgc3RyaW5nIHRvIGEKICAgICAgIGJpbmFyeSBzdHJlYW0gYW5kIHZpY2UgdmVyc2EuCiAKKyAgICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgICAgICAgVGhlICpzaG9ydF9lbXB0eV9lbGVtZW50cyogcGFyYW1ldGVyLgorCiAKIFRoaXMgaXMgdGhlIFhNTCBmaWxlIHRoYXQgaXMgZ29pbmcgdG8gYmUgbWFuaXB1bGF0ZWQ6OgogCkBAIC04MTcsNiArOTgyLDcgQEAKICAgIDpjbGFzczpgUU5hbWVgIGluc3RhbmNlcyBhcmUgb3BhcXVlLgogCiAKKwogLi4gX2VsZW1lbnR0cmVlLXRyZWVidWlsZGVyLW9iamVjdHM6CiAKIFRyZWVCdWlsZGVyIE9iamVjdHMKQEAgLTg3NiwxMyArMTA0MiwxOCBAQAogCiAuLiBjbGFzczo6IFhNTFBhcnNlcihodG1sPTAsIHRhcmdldD1Ob25lLCBlbmNvZGluZz1Ob25lKQogCi0gICA6Y2xhc3M6YEVsZW1lbnRgIHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZSBleHBhdAotICAgcGFyc2VyLiAgKmh0bWwqIGFyZSBwcmVkZWZpbmVkIEhUTUwgZW50aXRpZXMuICBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZCBieQotICAgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICAqdGFyZ2V0KiBpcyB0aGUgdGFyZ2V0IG9iamVjdC4gIElmIG9taXR0ZWQsIHRoZQotICAgYnVpbGRlciB1c2VzIGFuIGluc3RhbmNlIG9mIHRoZSBzdGFuZGFyZCA6Y2xhc3M6YFRyZWVCdWlsZGVyYCBjbGFzcy4KLSAgICplbmNvZGluZyogWzFdXyBpcyBvcHRpb25hbC4gIElmIGdpdmVuLCB0aGUgdmFsdWUgb3ZlcnJpZGVzIHRoZSBlbmNvZGluZworICAgVGhpcyBjbGFzcyBpcyB0aGUgbG93LWxldmVsIGJ1aWxkaW5nIGJsb2NrIG9mIHRoZSBtb2R1bGUuICBJdCB1c2VzCisgICA6bW9kOmB4bWwucGFyc2Vycy5leHBhdGAgZm9yIGVmZmljaWVudCwgZXZlbnQtYmFzZWQgcGFyc2luZyBvZiBYTUwuICBJdCBjYW4KKyAgIGJlIGZlZCBYTUwgZGF0YSBpbmNyZW1lbnRhbGwgd2l0aCB0aGUgOm1ldGg6YGZlZWRgIG1ldGhvZCwgYW5kIHBhcnNpbmcgZXZlbnRzCisgICBhcmUgdHJhbnNsYXRlZCB0byBhIHB1c2ggQVBJIC0gYnkgaW52b2tpbmcgY2FsbGJhY2tzIG9uIHRoZSAqdGFyZ2V0KiBvYmplY3QuCisgICBJZiAqdGFyZ2V0KiBpcyBvbWl0dGVkLCB0aGUgc3RhbmRhcmQgOmNsYXNzOmBUcmVlQnVpbGRlcmAgaXMgdXNlZC4gIFRoZQorICAgKmh0bWwqIGFyZ3VtZW50IHdhcyBoaXN0b3JpY2FsbHkgdXNlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYW5kIGlzIG5vdworICAgZGVwcmVjYXRlZC4gIElmICplbmNvZGluZyogWzFdXyBpcyBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcyB0aGUgZW5jb2RpbmcKICAgIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGUuCiAKKyAgIC4uIGRlcHJlY2F0ZWQ6OiAzLjQKKyAgICAgIFRoZSAqaHRtbCogYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBzaG91bGQgYmUgcGFzc2VkIHZpYQorICAgICAga2V5d3dvcmQgdG8gcHJlcGFyZSBmb3IgdGhlIHJlbW92YWwgb2YgdGhlICpodG1sKiBhcmd1bWVudC4KIAogICAgLi4gbWV0aG9kOjogY2xvc2UoKQogCkBAIC05MDIsMTIgKzEwNzMsMTIgQEAKIAogICAgICAgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLiAgKmRhdGEqIGlzIGVuY29kZWQgZGF0YS4KIAotICAgOm1ldGg6YFhNTFBhcnNlci5mZWVkYCBjYWxscyAqdGFyZ2V0KlwncyBgYHN0YXJ0KClgYCBtZXRob2QKLSAgIGZvciBlYWNoIG9wZW5pbmcgdGFnLCBpdHMgYGBlbmQoKWBgIG1ldGhvZCBmb3IgZWFjaCBjbG9zaW5nIHRhZywKLSAgIGFuZCBkYXRhIGlzIHByb2Nlc3NlZCBieSBtZXRob2QgYGBkYXRhKClgYC4gIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgCi0gICBjYWxscyAqdGFyZ2V0KlwncyBtZXRob2QgYGBjbG9zZSgpYGAuCi0gICA6Y2xhc3M6YFhNTFBhcnNlcmAgY2FuIGJlIHVzZWQgbm90IG9ubHkgZm9yIGJ1aWxkaW5nIGEgdHJlZSBzdHJ1Y3R1cmUuCi0gICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgY291bnRpbmcgdGhlIG1heGltdW0gZGVwdGggb2YgYW4gWE1MIGZpbGU6OgorICAgOm1ldGg6YFhNTFBhcnNlci5mZWVkYCBjYWxscyAqdGFyZ2V0KlwncyBgYHN0YXJ0KHRhZywgYXR0cnNfZGljdClgYCBtZXRob2QKKyAgIGZvciBlYWNoIG9wZW5pbmcgdGFnLCBpdHMgYGBlbmQodGFnKWBgIG1ldGhvZCBmb3IgZWFjaCBjbG9zaW5nIHRhZywgYW5kIGRhdGEKKyAgIGlzIHByb2Nlc3NlZCBieSBtZXRob2QgYGBkYXRhKGRhdGEpYGAuICA6bWV0aDpgWE1MUGFyc2VyLmNsb3NlYCBjYWxscworICAgKnRhcmdldCpcJ3MgbWV0aG9kIGBgY2xvc2UoKWBgLiA6Y2xhc3M6YFhNTFBhcnNlcmAgY2FuIGJlIHVzZWQgbm90IG9ubHkgZm9yCisgICBidWlsZGluZyBhIHRyZWUgc3RydWN0dXJlLiBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgY291bnRpbmcgdGhlIG1heGltdW0gZGVwdGgKKyAgIG9mIGFuIFhNTCBmaWxlOjoKIAogICAgID4+PiBmcm9tIHhtbC5ldHJlZS5FbGVtZW50VHJlZSBpbXBvcnQgWE1MUGFyc2VyCiAgICAgPj4+IGNsYXNzIE1heERlcHRoOiAgICAgICAgICAgICAgICAgICAgICMgVGhlIHRhcmdldCBvYmplY3Qgb2YgdGhlIHBhcnNlcgpAQCAtOTQxLDYgKzExMTIsNjAgQEAKICAgICA+Pj4gcGFyc2VyLmNsb3NlKCkKICAgICA0CiAKKworLi4gX2VsZW1lbnR0cmVlLXhtbHB1bGxwYXJzZXItb2JqZWN0czoKKworWE1MUHVsbFBhcnNlciBPYmplY3RzCiteXl5eXl5eXl5eXl5eXl5eXl5eXl4KKworLi4gY2xhc3M6OiBYTUxQdWxsUGFyc2VyKGV2ZW50cz1Ob25lKQorCisgICBBIHB1bGwgcGFyc2VyIHN1aXRhYmxlIGZvciBub24tYmxvY2tpbmcgYXBwbGljYXRpb25zLiAgSXRzIGlucHV0LXNpZGUgQVBJIGlzCisgICBzaW1pbGFyIHRvIHRoYXQgb2YgOmNsYXNzOmBYTUxQYXJzZXJgLCBidXQgaW5zdGVhZCBvZiBwdXNoaW5nIGNhbGxzIHRvIGEKKyAgIGNhbGxiYWNrIHRhcmdldCwgOmNsYXNzOmBYTUxQdWxsUGFyc2VyYCBjb2xsZWN0cyBhbiBpbnRlcm5hbCBsaXN0IG9mIHBhcnNpbmcKKyAgIGV2ZW50cyBhbmQgbGV0cyB0aGUgdXNlciByZWFkIGZyb20gaXQuICpldmVudHMqIGlzIGEgc2VxdWVuY2Ugb2YgZXZlbnRzIHRvCisgICByZXBvcnQgYmFjay4gIFRoZSBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncyBgYCJzdGFydCJgYCwgYGAiZW5kImBgLAorICAgYGAic3RhcnQtbnMiYGAgYW5kIGBgImVuZC1ucyJgYCAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZAorICAgbmFtZXNwYWNlIGluZm9ybWF0aW9uKS4gIElmICpldmVudHMqIGlzIG9taXR0ZWQsIG9ubHkgYGAiZW5kImBgIGV2ZW50cyBhcmUKKyAgIHJlcG9ydGVkLgorCisgICAuLiBtZXRob2Q6OiBmZWVkKGRhdGEpCisKKyAgICAgIEZlZWQgdGhlIGdpdmVuIGJ5dGVzIGRhdGEgdG8gdGhlIHBhcnNlci4KKworICAgLi4gbWV0aG9kOjogY2xvc2UoKQorCisgICAgICBTaWduYWwgdGhlIHBhcnNlciB0aGF0IHRoZSBkYXRhIHN0cmVhbSBpcyB0ZXJtaW5hdGVkLiBVbmxpa2UKKyAgICAgIDptZXRoOmBYTUxQYXJzZXIuY2xvc2VgLCB0aGlzIG1ldGhvZCBhbHdheXMgcmV0dXJucyA6Y29uc3Q6YE5vbmVgLgorICAgICAgQW55IGV2ZW50cyBub3QgeWV0IHJldHJpZXZlZCB3aGVuIHRoZSBwYXJzZXIgaXMgY2xvc2VkIGNhbiBzdGlsbCBiZQorICAgICAgcmVhZCB3aXRoIDptZXRoOmByZWFkX2V2ZW50c2AuCisKKyAgIC4uIG1ldGhvZDo6IHJlYWRfZXZlbnRzKCkKKworICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGV2ZW50cyB3aGljaCBoYXZlIGJlZW4gZW5jb3VudGVyZWQgaW4gdGhlCisgICAgICBkYXRhIGZlZCB0byB0aGUKKyAgICAgIHBhcnNlci4gIFRoZSBpdGVyYXRvciB5aWVsZHMgYGAoZXZlbnQsIGVsZW0pYGAgcGFpcnMsIHdoZXJlICpldmVudCogaXMgYQorICAgICAgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZiBldmVudCAoZS5nLiBgYCJlbmQiYGApIGFuZCAqZWxlbSogaXMgdGhlCisgICAgICBlbmNvdW50ZXJlZCA6Y2xhc3M6YEVsZW1lbnRgIG9iamVjdC4KKworICAgICAgRXZlbnRzIHByb3ZpZGVkIGluIGEgcHJldmlvdXMgY2FsbCB0byA6bWV0aDpgcmVhZF9ldmVudHNgIHdpbGwgbm90IGJlCisgICAgICB5aWVsZGVkIGFnYWluLiAgRXZlbnRzIGFyZSBjb25zdW1lZCBmcm9tIHRoZSBpbnRlcm5hbCBxdWV1ZSBvbmx5IHdoZW4KKyAgICAgIHRoZXkgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBpdGVyYXRvciwgc28gbXVsdGlwbGUgcmVhZGVycyBpdGVyYXRpbmcgaW4KKyAgICAgIHBhcmFsbGVsIG92ZXIgaXRlcmF0b3JzIG9idGFpbmVkIGZyb20gOm1ldGg6YHJlYWRfZXZlbnRzYCB3aWxsIGhhdmUKKyAgICAgIHVucHJlZGljdGFibGUgcmVzdWx0cy4KKworICAgLi4gbm90ZTo6CisKKyAgICAgIDpjbGFzczpgWE1MUHVsbFBhcnNlcmAgb25seSBndWFyYW50ZWVzIHRoYXQgaXQgaGFzIHNlZW4gdGhlICI+IgorICAgICAgY2hhcmFjdGVyIG9mIGEgc3RhcnRpbmcgdGFnIHdoZW4gaXQgZW1pdHMgYSAic3RhcnQiIGV2ZW50LCBzbyB0aGUKKyAgICAgIGF0dHJpYnV0ZXMgYXJlIGRlZmluZWQsIGJ1dCB0aGUgY29udGVudHMgb2YgdGhlIHRleHQgYW5kIHRhaWwgYXR0cmlidXRlcworICAgICAgYXJlIHVuZGVmaW5lZCBhdCB0aGF0IHBvaW50LiAgVGhlIHNhbWUgYXBwbGllcyB0byB0aGUgZWxlbWVudCBjaGlsZHJlbjsKKyAgICAgIHRoZXkgbWF5IG9yIG1heSBub3QgYmUgcHJlc2VudC4KKworICAgICAgSWYgeW91IG5lZWQgYSBmdWxseSBwb3B1bGF0ZWQgZWxlbWVudCwgbG9vayBmb3IgImVuZCIgZXZlbnRzIGluc3RlYWQuCisKKyAgIC4uIHZlcnNpb25hZGRlZDo6IDMuNAorCiBFeGNlcHRpb25zCiBeXl5eXl5eXl5eCiAKQEAgLTk2NSw0ICsxMTkwLDQgQEAKIC4uIFsjXSBUaGUgZW5jb2Rpbmcgc3RyaW5nIGluY2x1ZGVkIGluIFhNTCBvdXRwdXQgc2hvdWxkIGNvbmZvcm0gdG8gdGhlCiAgICBhcHByb3ByaWF0ZSBzdGFuZGFyZHMuICBGb3IgZXhhbXBsZSwgIlVURi04IiBpcyB2YWxpZCwgYnV0ICJVVEY4IiBpcwogICAgbm90LiAgU2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDYvUkVDLXhtbDExLTIwMDYwODE2LyNOVC1FbmNvZGluZ0RlY2wKLSAgIGFuZCBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzLgorICAgYW5kIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMvY2hhcmFjdGVyLXNldHMueGh0bWwuCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS94bWxycGMuY2xpZW50LnJzdCBiL0RvYy9saWJyYXJ5L3htbHJwYy5jbGllbnQucnN0CmluZGV4IGQ2MzYwZGYuLmNjNWU4M2EgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3htbHJwYy5jbGllbnQucnN0CisrKyBiL0RvYy9saWJyYXJ5L3htbHJwYy5jbGllbnQucnN0CkBAIC0yNywxNSArMjcsMTQgQEAKICAgIGNvbnN0cnVjdGVkIGRhdGEuICBJZiB5b3UgbmVlZCB0byBwYXJzZSB1bnRydXN0ZWQgb3IgdW5hdXRoZW50aWNhdGVkIGRhdGEgc2VlCiAgICA6cmVmOmB4bWwtdnVsbmVyYWJpbGl0aWVzYC4KIAotLi4gd2FybmluZzo6CisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNC4zCiAKLSAgIEluIHRoZSBjYXNlIG9mIGh0dHBzIFVSSXMsIDptb2Q6YHhtbHJwYy5jbGllbnRgIGRvZXMgbm90IGRvIGFueSB2ZXJpZmljYXRpb24KLSAgIG9mIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4KLQorICAgRm9yIGh0dHBzIFVSSXMsIDptb2Q6YHhtbHJwYy5jbGllbnRgIG5vdyBwZXJmb3JtcyBhbGwgdGhlIG5lY2Vzc2FyeQorICAgY2VydGlmaWNhdGUgYW5kIGhvc3RuYW1lIGNoZWNrcyBieSBkZWZhdWx0CiAKIC4uIGNsYXNzOjogU2VydmVyUHJveHkodXJpLCB0cmFuc3BvcnQ9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSwgdmVyYm9zZT1GYWxzZSwgXAogICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19ub25lPUZhbHNlLCB1c2VfZGF0ZXRpbWU9RmFsc2UsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgICAgIHVzZV9idWlsdGluX3R5cGVzPUZhbHNlLCAqLCBjb250ZXh0PU5vbmUpCiAKICAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zCiAgICAgICBUaGUgKnVzZV9idWlsdGluX3R5cGVzKiBmbGFnIHdhcyBhZGRlZC4KQEAgLTY0LDcgKzYzLDkgQEAKICAgIHBvcnRpb24gd2lsbCBiZSBiYXNlNjQtZW5jb2RlZCBhcyBhbiBIVFRQICdBdXRob3JpemF0aW9uJyBoZWFkZXIsIGFuZCBzZW50IHRvCiAgICB0aGUgcmVtb3RlIHNlcnZlciBhcyBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHByb2Nlc3Mgd2hlbiBpbnZva2luZyBhbiBYTUwtUlBDCiAgICBtZXRob2QuICBZb3Ugb25seSBuZWVkIHRvIHVzZSB0aGlzIGlmIHRoZSByZW1vdGUgc2VydmVyIHJlcXVpcmVzIGEgQmFzaWMKLSAgIEF1dGhlbnRpY2F0aW9uIHVzZXIgYW5kIHBhc3N3b3JkLgorICAgQXV0aGVudGljYXRpb24gdXNlciBhbmQgcGFzc3dvcmQuIElmIGFuIEhUVFBTIHVybCBpcyBwcm92aWRlZCwgKmNvbnRleHQqIG1heQorICAgYmUgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgYW5kIGNvbmZpZ3VyZXMgdGhlIFNTTCBzZXR0aW5ncyBvZiB0aGUgdW5kZXJseWluZworICAgSFRUUFMgY29ubmVjdGlvbi4KIAogICAgVGhlIHJldHVybmVkIGluc3RhbmNlIGlzIGEgcHJveHkgb2JqZWN0IHdpdGggbWV0aG9kcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGludm9rZQogICAgY29ycmVzcG9uZGluZyBSUEMgY2FsbHMgb24gdGhlIHJlbW90ZSBzZXJ2ZXIuICBJZiB0aGUgcmVtb3RlIHNlcnZlciBzdXBwb3J0cyB0aGUKQEAgLTEyOCw2ICsxMjksOSBAQAogICAgOmNsYXNzOmBTZXJ2ZXJgIGlzIHJldGFpbmVkIGFzIGFuIGFsaWFzIGZvciA6Y2xhc3M6YFNlcnZlclByb3h5YCBmb3IgYmFja3dhcmRzCiAgICBjb21wYXRpYmlsaXR5LiAgTmV3IGNvZGUgc2hvdWxkIHVzZSA6Y2xhc3M6YFNlcnZlclByb3h5YC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQuMworICAgICAgQWRkZWQgdGhlICpjb250ZXh0KiBhcmd1bWVudC4KKwogCiAuLiBzZWVhbHNvOjoKIApkaWZmIC0tZ2l0IGEvRG9jL2xpYnJhcnkveG1scnBjLnNlcnZlci5yc3QgYi9Eb2MvbGlicmFyeS94bWxycGMuc2VydmVyLnJzdAppbmRleCBhY2E0ZjM2Li4zN2QxMzkzIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS94bWxycGMuc2VydmVyLnJzdAorKysgYi9Eb2MvbGlicmFyeS94bWxycGMuc2VydmVyLnJzdApAQCAtMTg0LDggKzE4NCw4IEBACiAgICAjIFByaW50IGxpc3Qgb2YgYXZhaWxhYmxlIG1ldGhvZHMKICAgIHByaW50KHMuc3lzdGVtLmxpc3RNZXRob2RzKCkpCiAKLVRoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbmNsdWRlZCBpbiBgTGliL3htbHJwYy9zZXJ2ZXIucHlgIG1vZHVsZSBzaG93cyBhIHNlcnZlcgotYWxsb3dpbmcgZG90dGVkIG5hbWVzIGFuZCByZWdpc3RlcmluZyBhIG11bHRpY2FsbCBmdW5jdGlvbi4KK1RoZSBmb2xsb3dpbmcgZXhhbXBsZSBpbmNsdWRlZCBpbiB0aGUgOmZpbGU6YExpYi94bWxycGMvc2VydmVyLnB5YCBtb2R1bGUgc2hvd3MKK2Egc2VydmVyIGFsbG93aW5nIGRvdHRlZCBuYW1lcyBhbmQgcmVnaXN0ZXJpbmcgYSBtdWx0aWNhbGwgZnVuY3Rpb24uCiAKIC4uIHdhcm5pbmc6OgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS96aXBmaWxlLnJzdCBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CmluZGV4IDdhNjQ4MmIuLjEwYTA5NGYgMTAwNjQ0Ci0tLSBhL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CisrKyBiL0RvYy9saWJyYXJ5L3ppcGZpbGUucnN0CkBAIC0xMzAsNyArMTMwLDcgQEAKIC0tLS0tLS0tLS0tLS0tLQogCiAKLS4uIGNsYXNzOjogWmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSkKKy4uIGNsYXNzOjogWmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlKQogCiAgICBPcGVuIGEgWklQIGZpbGUsIHdoZXJlICpmaWxlKiBjYW4gYmUgZWl0aGVyIGEgcGF0aCB0byBhIGZpbGUgKGEgc3RyaW5nKSBvciBhCiAgICBmaWxlLWxpa2Ugb2JqZWN0LiAgVGhlICptb2RlKiBwYXJhbWV0ZXIgc2hvdWxkIGJlIGBgJ3InYGAgdG8gcmVhZCBhbiBleGlzdGluZwpAQCAtMTQ0LDE1ICsxNDQsMTIgQEAKICAgIGFuZCBzaG91bGQgYmUgOmNvbnN0OmBaSVBfU1RPUkVEYCwgOmNvbnN0OmBaSVBfREVGTEFURURgLAogICAgOmNvbnN0OmBaSVBfQlpJUDJgIG9yIDpjb25zdDpgWklQX0xaTUFgOyB1bnJlY29nbml6ZWQKICAgIHZhbHVlcyB3aWxsIGNhdXNlIDpleGM6YFJ1bnRpbWVFcnJvcmAgdG8gYmUgcmFpc2VkLiAgSWYgOmNvbnN0OmBaSVBfREVGTEFURURgLAotICAgOmNvbnN0OmBaSVBfQlpJUDJgIG9yIDpjb25zdDpgWklQX0xaTUFgIGlzIHNwZWNpZmllZCBidXQgdGhlIGNvcnJlc3BvbmRlZCBtb2R1bGUKKyAgIDpjb25zdDpgWklQX0JaSVAyYCBvciA6Y29uc3Q6YFpJUF9MWk1BYCBpcyBzcGVjaWZpZWQgYnV0IHRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZQogICAgKDptb2Q6YHpsaWJgLCA6bW9kOmBiejJgIG9yIDptb2Q6YGx6bWFgKSBpcyBub3QgYXZhaWxhYmxlLCA6ZXhjOmBSdW50aW1lRXJyb3JgCiAgICBpcyBhbHNvIHJhaXNlZC4gVGhlIGRlZmF1bHQgaXMgOmNvbnN0OmBaSVBfU1RPUkVEYC4gIElmICphbGxvd1ppcDY0KiBpcwotICAgYGBUcnVlYGAgemlwZmlsZSB3aWxsIGNyZWF0ZSBaSVAgZmlsZXMgdGhhdCB1c2UgdGhlIFpJUDY0IGV4dGVuc2lvbnMgd2hlbgotICAgdGhlIHppcGZpbGUgaXMgbGFyZ2VyIHRoYW4gMiBHaUIuIElmIGl0IGlzICBmYWxzZSAodGhlIGRlZmF1bHQpIDptb2Q6YHppcGZpbGVgCisgICBgYFRydWVgYCAodGhlIGRlZmF1bHQpIHppcGZpbGUgd2lsbCBjcmVhdGUgWklQIGZpbGVzIHRoYXQgdXNlIHRoZSBaSVA2NAorICAgZXh0ZW5zaW9ucyB3aGVuIHRoZSB6aXBmaWxlIGlzIGxhcmdlciB0aGFuIDIgR2lCLiBJZiBpdCBpcyAgZmFsc2UgOm1vZDpgemlwZmlsZWAKICAgIHdpbGwgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIFpJUCBmaWxlIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucy4KLSAgIFpJUDY0IGV4dGVuc2lvbnMgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQgYmVjYXVzZSB0aGUgZGVmYXVsdCA6cHJvZ3JhbTpgemlwYAotICAgYW5kIDpwcm9ncmFtOmB1bnppcGAgY29tbWFuZHMgb24gVW5peCAodGhlIEluZm9aSVAgdXRpbGl0aWVzKSBkb24ndCBzdXBwb3J0Ci0gICB0aGVzZSBleHRlbnNpb25zLgogCiAgICBJZiB0aGUgZmlsZSBpcyBjcmVhdGVkIHdpdGggbW9kZSBgYCdhJ2BgIG9yIGBgJ3cnYGAgYW5kIHRoZW4KICAgIDptZXRoOmBjbG9zZWQgPGNsb3NlPmAgd2l0aG91dCBhZGRpbmcgYW55IGZpbGVzIHRvIHRoZSBhcmNoaXZlLCB0aGUgYXBwcm9wcmlhdGUKQEAgLTE3MSw2ICsxNjgsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIDptb2Q6YGJ6aXAyIDxiejI+YCBhbmQgOm1vZDpgbHptYWAgY29tcHJlc3Npb24uCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBaSVA2NCBleHRlbnNpb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQuCisKIAogLi4gbWV0aG9kOjogWmlwRmlsZS5jbG9zZSgpCiAKQEAgLTIxMCw2ICsyMTAsMTMgQEAKICAgIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRlZCBmaWxlcy4gIENhbGxpbmcgIDptZXRoOmAub3BlbmAgb24gYSBjbG9zZWQKICAgIFppcEZpbGUgd2lsbCByYWlzZSBhICA6ZXhjOmBSdW50aW1lRXJyb3JgLgogCisgICA6bWV0aDpgflppcEZpbGUub3BlbmAgaXMgYWxzbyBhIGNvbnRleHQgbWFuYWdlciBhbmQgdGhlcmVmb3JlIHN1cHBvcnRzIHRoZQorICAgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudDo6CisKKyAgICAgIHdpdGggWmlwRmlsZSgnc3BhbS56aXAnKSBhcyBteXppcDoKKyAgICAgICAgICB3aXRoIG15emlwLm9wZW4oJ2VnZ3MudHh0JykgYXMgbXlmaWxlOgorICAgICAgICAgICAgICBwcmludChteWZpbGUucmVhZCgpKQorCiAgICAuLiBub3RlOjoKIAogICAgICAgVGhlIGZpbGUtbGlrZSBvYmplY3QgaXMgcmVhZC1vbmx5IGFuZCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIG1ldGhvZHM6CkBAIC0yMzQsNiArMjQxLDkgQEAKICAgICAgIG9yIGEgOmNsYXNzOmBaaXBJbmZvYCBvYmplY3QuICBZb3Ugd2lsbCBhcHByZWNpYXRlIHRoaXMgd2hlbiB0cnlpbmcgdG8gcmVhZCBhCiAgICAgICBaSVAgZmlsZSB0aGF0IGNvbnRhaW5zIG1lbWJlcnMgd2l0aCBkdXBsaWNhdGUgbmFtZXMuCiAKKyAgIC4uIGRlcHJlY2F0ZWQtcmVtb3ZlZDo6IDMuNCAzLjYKKyAgICAgIFRoZSBgYCdVJ2BgIG9yICBgYCdyVSdgYCBtb2RlLiAgVXNlIDpjbGFzczpgaW8uVGV4dElPV3JhcHBlcmAgZm9yIHJlYWRpbmcKKyAgICAgIGNvbXByZXNzZWQgdGV4dCBmaWxlcyBpbiA6dGVybTpgdW5pdmVyc2FsIG5ld2xpbmVzYCBtb2RlLgogCiAuLiBtZXRob2Q6OiBaaXBGaWxlLmV4dHJhY3QobWVtYmVyLCBwYXRoPU5vbmUsIHB3ZD1Ob25lKQogCkBAIC0yNDMsNiArMjUzLDggQEAKICAgIHRvIGV4dHJhY3QgdG8uICAqbWVtYmVyKiBjYW4gYmUgYSBmaWxlbmFtZSBvciBhIDpjbGFzczpgWmlwSW5mb2Agb2JqZWN0LgogICAgKnB3ZCogaXMgdGhlIHBhc3N3b3JkIHVzZWQgZm9yIGVuY3J5cHRlZCBmaWxlcy4KIAorICAgUmV0dXJucyB0aGUgbm9ybWFsaXplZCBwYXRoIGNyZWF0ZWQgKGEgZGlyZWN0b3J5IG9yIG5ldyBmaWxlKS4KKwogICAgLi4gbm90ZTo6CiAKICAgICAgIElmIGEgbWVtYmVyIGZpbGVuYW1lIGlzIGFuIGFic29sdXRlIHBhdGgsIGEgZHJpdmUvVU5DIHNoYXJlcG9pbnQgYW5kCkBAIC0yNjYsMTAgKzI3OCw4IEBACiAgICAgICBOZXZlciBleHRyYWN0IGFyY2hpdmVzIGZyb20gdW50cnVzdGVkIHNvdXJjZXMgd2l0aG91dCBwcmlvciBpbnNwZWN0aW9uLgogICAgICAgSXQgaXMgcG9zc2libGUgdGhhdCBmaWxlcyBhcmUgY3JlYXRlZCBvdXRzaWRlIG9mICpwYXRoKiwgZS5nLiBtZW1iZXJzCiAgICAgICB0aGF0IGhhdmUgYWJzb2x1dGUgZmlsZW5hbWVzIHN0YXJ0aW5nIHdpdGggYGAiLyJgYCBvciBmaWxlbmFtZXMgd2l0aCB0d28KLSAgICAgIGRvdHMgYGAiLi4iYGAuCi0KLSAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy4zLjEKLSAgICAgIFRoZSB6aXBmaWxlIG1vZHVsZSBhdHRlbXB0cyB0byBwcmV2ZW50IHRoYXQuICBTZWUgOm1ldGg6YGV4dHJhY3RgIG5vdGUuCisgICAgICBkb3RzIGBgIi4uImBgLiAgVGhpcyBtb2R1bGUgYXR0ZW1wdHMgdG8gcHJldmVudCB0aGF0LgorICAgICAgU2VlIDptZXRoOmBleHRyYWN0YCBub3RlLgogCiAKIC4uIG1ldGhvZDo6IFppcEZpbGUucHJpbnRkaXIoKQpAQCAtMjg4LDcgKzI5OCwxMSBAQAogICAgZmlsZSBpbiB0aGUgYXJjaGl2ZSwgb3IgYSA6Y2xhc3M6YFppcEluZm9gIG9iamVjdC4gIFRoZSBhcmNoaXZlIG11c3QgYmUgb3BlbiBmb3IKICAgIHJlYWQgb3IgYXBwZW5kLiAqcHdkKiBpcyB0aGUgcGFzc3dvcmQgdXNlZCBmb3IgZW5jcnlwdGVkICBmaWxlcyBhbmQsIGlmIHNwZWNpZmllZCwKICAgIGl0IHdpbGwgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcGFzc3dvcmQgc2V0IHdpdGggOm1ldGg6YHNldHBhc3N3b3JkYC4gIENhbGxpbmcKLSAgIDptZXRoOmByZWFkYCBvbiBhIGNsb3NlZCBaaXBGaWxlICB3aWxsIHJhaXNlIGEgOmV4YzpgUnVudGltZUVycm9yYC4KKyAgIDptZXRoOmByZWFkYCBvbiBhIGNsb3NlZCBaaXBGaWxlICB3aWxsIHJhaXNlIGEgOmV4YzpgUnVudGltZUVycm9yYC4gQ2FsbGluZworICAgOm1ldGg6YHJlYWRgIG9uIGEgWmlwRmlsZSB0aGF0IHVzZXMgYSBjb21wcmVzc2lvbiBtZXRob2Qgb3RoZXIgdGhhbgorICAgOmNvbnN0OmBaSVBfU1RPUkVEYCwgOmNvbnN0OmBaSVBfREVGTEFURURgLCA6Y29uc3Q6YFpJUF9CWklQMmAgb3IKKyAgIDpjb25zdDpgWklQX0xaTUFgIHdpbGwgcmFpc2UgYSA6ZXhjOmBOb3RJbXBsZW1lbnRlZEVycm9yYC4gQW4gZXJyb3Igd2lsbCBhbHNvCisgICBiZSByYWlzZWQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgY29tcHJlc3Npb24gbW9kdWxlIGlzIG5vdCBhdmFpbGFibGUuCiAKIAogLi4gbWV0aG9kOjogWmlwRmlsZS50ZXN0emlwKCkKQEAgLTM3NiwxNSArMzkwLDE4IEBACiBUaGUgOmNsYXNzOmBQeVppcEZpbGVgIGNvbnN0cnVjdG9yIHRha2VzIHRoZSBzYW1lIHBhcmFtZXRlcnMgYXMgdGhlCiA6Y2xhc3M6YFppcEZpbGVgIGNvbnN0cnVjdG9yLCBhbmQgb25lIGFkZGl0aW9uYWwgcGFyYW1ldGVyLCAqb3B0aW1pemUqLgogCi0uLiBjbGFzczo6IFB5WmlwRmlsZShmaWxlLCBtb2RlPSdyJywgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSwgXAorLi4gY2xhc3M6OiBQeVppcEZpbGUoZmlsZSwgbW9kZT0ncicsIGNvbXByZXNzaW9uPVpJUF9TVE9SRUQsIGFsbG93WmlwNjQ9VHJ1ZSwgXAogICAgICAgICAgICAgICAgICAgICAgb3B0aW1pemU9LTEpCiAKICAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMgogICAgICAgVGhlICpvcHRpbWl6ZSogcGFyYW1ldGVyLgogCisgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgICAgWklQNjQgZXh0ZW5zaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LgorCiAgICBJbnN0YW5jZXMgaGF2ZSBvbmUgbWV0aG9kIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mIDpjbGFzczpgWmlwRmlsZWAgb2JqZWN0czoKIAotICAgLi4gbWV0aG9kOjogUHlaaXBGaWxlLndyaXRlcHkocGF0aG5hbWUsIGJhc2VuYW1lPScnKQorICAgLi4gbWV0aG9kOjogUHlaaXBGaWxlLndyaXRlcHkocGF0aG5hbWUsIGJhc2VuYW1lPScnLCBmaWx0ZXJmdW5jPU5vbmUpCiAKICAgICAgIFNlYXJjaCBmb3IgZmlsZXMgOmZpbGU6YFwqLnB5YCBhbmQgYWRkIHRoZSBjb3JyZXNwb25kaW5nIGZpbGUgdG8gdGhlCiAgICAgICBhcmNoaXZlLgpAQCAtMzk3LDE2ICs0MTQsMzMgQEAKICAgICAgIGBgMmBgLCBvbmx5IGZpbGVzIHdpdGggdGhhdCBvcHRpbWl6YXRpb24gbGV2ZWwgKHNlZSA6ZnVuYzpgY29tcGlsZWApIGFyZQogICAgICAgYWRkZWQgdG8gdGhlIGFyY2hpdmUsIGNvbXBpbGluZyBpZiBuZWNlc3NhcnkuCiAKLSAgICAgIElmIHRoZSBwYXRobmFtZSBpcyBhIGZpbGUsIHRoZSBmaWxlbmFtZSBtdXN0IGVuZCB3aXRoIDpmaWxlOmAucHlgLCBhbmQKKyAgICAgIElmICpwYXRobmFtZSogaXMgYSBmaWxlLCB0aGUgZmlsZW5hbWUgbXVzdCBlbmQgd2l0aCA6ZmlsZTpgLnB5YCwgYW5kCiAgICAgICBqdXN0IHRoZSAoY29ycmVzcG9uZGluZyA6ZmlsZTpgXCoucHlbY29dYCkgZmlsZSBpcyBhZGRlZCBhdCB0aGUgdG9wIGxldmVsCi0gICAgICAobm8gcGF0aCBpbmZvcm1hdGlvbikuICBJZiB0aGUgcGF0aG5hbWUgaXMgYSBmaWxlIHRoYXQgZG9lcyBub3QgZW5kIHdpdGgKKyAgICAgIChubyBwYXRoIGluZm9ybWF0aW9uKS4gIElmICpwYXRobmFtZSogaXMgYSBmaWxlIHRoYXQgZG9lcyBub3QgZW5kIHdpdGgKICAgICAgIDpmaWxlOmAucHlgLCBhIDpleGM6YFJ1bnRpbWVFcnJvcmAgd2lsbCBiZSByYWlzZWQuICBJZiBpdCBpcyBhIGRpcmVjdG9yeSwKICAgICAgIGFuZCB0aGUgZGlyZWN0b3J5IGlzIG5vdCBhIHBhY2thZ2UgZGlyZWN0b3J5LCB0aGVuIGFsbCB0aGUgZmlsZXMKICAgICAgIDpmaWxlOmBcKi5weVtjb11gIGFyZSBhZGRlZCBhdCB0aGUgdG9wIGxldmVsLiAgSWYgdGhlIGRpcmVjdG9yeSBpcyBhCiAgICAgICBwYWNrYWdlIGRpcmVjdG9yeSwgdGhlbiBhbGwgOmZpbGU6YFwqLnB5W2NvXWAgYXJlIGFkZGVkIHVuZGVyIHRoZSBwYWNrYWdlCiAgICAgICBuYW1lIGFzIGEgZmlsZSBwYXRoLCBhbmQgaWYgYW55IHN1YmRpcmVjdG9yaWVzIGFyZSBwYWNrYWdlIGRpcmVjdG9yaWVzLAotICAgICAgYWxsIG9mIHRoZXNlIGFyZSBhZGRlZCByZWN1cnNpdmVseS4gICpiYXNlbmFtZSogaXMgaW50ZW5kZWQgZm9yIGludGVybmFsCi0gICAgICB1c2Ugb25seS4gIFRoZSA6bWV0aDpgd3JpdGVweWAgbWV0aG9kIG1ha2VzIGFyY2hpdmVzIHdpdGggZmlsZSBuYW1lcyBsaWtlCisgICAgICBhbGwgb2YgdGhlc2UgYXJlIGFkZGVkIHJlY3Vyc2l2ZWx5LgorCisgICAgICAqYmFzZW5hbWUqIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seS4KKworICAgICAgKmZpbHRlcmZ1bmMqLCBpZiBnaXZlbiwgbXVzdCBiZSBhIGZ1bmN0aW9uIHRha2luZyBhIHNpbmdsZSBzdHJpbmcKKyAgICAgIGFyZ3VtZW50LiAgSXQgd2lsbCBiZSBwYXNzZWQgZWFjaCBwYXRoIChpbmNsdWRpbmcgZWFjaCBpbmRpdmlkdWFsIGZ1bGwKKyAgICAgIGZpbGUgcGF0aCkgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcmNoaXZlLiAgSWYgKmZpbHRlcmZ1bmMqIHJldHVybnMgYQorICAgICAgZmFsc2UgdmFsdWUsIHRoZSBwYXRoIHdpbGwgbm90IGJlIGFkZGVkLCBhbmQgaWYgaXQgaXMgYSBkaXJlY3RvcnkgaXRzCisgICAgICBjb250ZW50cyB3aWxsIGJlIGlnbm9yZWQuICBGb3IgZXhhbXBsZSwgaWYgb3VyIHRlc3QgZmlsZXMgYXJlIGFsbCBlaXRoZXIKKyAgICAgIGluIGBgdGVzdGBgIGRpcmVjdG9yaWVzIG9yIHN0YXJ0IHdpdGggdGhlIHN0cmluZyBgYHRlc3RfYGAsIHdlIGNhbiB1c2UgYQorICAgICAgKmZpbHRlcmZ1bmMqIHRvIGV4Y2x1ZGUgdGhlbTo6CisKKyAgICAgICAgICA+Pj4gemYgPSBQeVppcEZpbGUoJ215cHJvZy56aXAnKQorICAgICAgICAgID4+PiBkZWYgbm90ZXN0cyhzKToKKyAgICAgICAgICAuLi4gICAgIGZuID0gb3MucGF0aC5iYXNlbmFtZShzKQorICAgICAgICAgIC4uLiAgICAgcmV0dXJuIChub3QgKGZuID09ICd0ZXN0JyBvciBmbi5zdGFydHN3aXRoKCd0ZXN0XycpKSkKKyAgICAgICAgICA+Pj4gemYud3JpdGVweSgnbXlwcm9nJywgZmlsdGVyZnVuYz1ub3Rlc3RzKQorCisgICAgICBUaGUgOm1ldGg6YHdyaXRlcHlgIG1ldGhvZCBtYWtlcyBhcmNoaXZlcyB3aXRoIGZpbGUgbmFtZXMgbGlrZQogICAgICAgdGhpczo6CiAKICAgICAgICAgIHN0cmluZy5weWMgICAgICAgICAgICAgICAgICAgIyBUb3AgbGV2ZWwgbmFtZQpAQCAtNDE1LDYgKzQ0OSw5IEBACiAgICAgICAgICB0ZXN0L2JvZ3VzL19faW5pdF9fLnB5YyAgICAgICMgU3VicGFja2FnZSBkaXJlY3RvcnkKICAgICAgICAgIHRlc3QvYm9ndXMvbXlmaWxlLnB5YyAgICAgICAgIyBTdWJtb2R1bGUgdGVzdC5ib2d1cy5teWZpbGUKIAorICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICAgICBUaGUgKmZpbHRlcmZ1bmMqIHBhcmFtZXRlci4KKwogCiAuLiBfemlwaW5mby1vYmplY3RzOgogCmRpZmYgLS1naXQgYS9Eb2MvbGlicmFyeS96bGliLnJzdCBiL0RvYy9saWJyYXJ5L3psaWIucnN0CmluZGV4IGIxNzhmZTEuLjU4ZmMzMWIwIDEwMDY0NAotLS0gYS9Eb2MvbGlicmFyeS96bGliLnJzdAorKysgYi9Eb2MvbGlicmFyeS96bGliLnJzdApAQCAtMzAsNyArMzAsNyBAQAogCiAuLiBmdW5jdGlvbjo6IGFkbGVyMzIoZGF0YVssIHZhbHVlXSkKIAotICAgQ29tcHV0ZXMgYSBBZGxlci0zMiBjaGVja3N1bSBvZiAqZGF0YSouICAoQW4gQWRsZXItMzIgY2hlY2tzdW0gaXMgYWxtb3N0IGFzCisgICBDb21wdXRlcyBhbiBBZGxlci0zMiBjaGVja3N1bSBvZiAqZGF0YSouICAoQW4gQWRsZXItMzIgY2hlY2tzdW0gaXMgYWxtb3N0IGFzCiAgICByZWxpYWJsZSBhcyBhIENSQzMyIGJ1dCBjYW4gYmUgY29tcHV0ZWQgbXVjaCBtb3JlIHF1aWNrbHkuKSAgSWYgKnZhbHVlKiBpcwogICAgcHJlc2VudCwgaXQgaXMgdXNlZCBhcyB0aGUgc3RhcnRpbmcgdmFsdWUgb2YgdGhlIGNoZWNrc3VtOyBvdGhlcndpc2UsIGEgZml4ZWQKICAgIGRlZmF1bHQgdmFsdWUgaXMgdXNlZC4gIFRoaXMgYWxsb3dzIGNvbXB1dGluZyBhIHJ1bm5pbmcgY2hlY2tzdW0gb3ZlciB0aGUKQEAgLTU4LDcgKzU4LDcgQEAKICAgIFJhaXNlcyB0aGUgOmV4YzpgZXJyb3JgIGV4Y2VwdGlvbiBpZiBhbnkgZXJyb3Igb2NjdXJzLgogCiAKLS4uIGZ1bmN0aW9uOjogY29tcHJlc3NvYmoobGV2ZWw9LTEsIG1ldGhvZD1ERUZMQVRFRCwgd2JpdHM9MTUsIG1lbWxldmVsPTgsIHN0cmF0ZWd5PVpfREVGQVVMVF9TVFJBVEVHWVssIHpkaWN0XSkKKy4uIGZ1bmN0aW9uOjogY29tcHJlc3NvYmoobGV2ZWw9LTEsIG1ldGhvZD1ERUZMQVRFRCwgd2JpdHM9MTUsIG1lbUxldmVsPTgsIHN0cmF0ZWd5PVpfREVGQVVMVF9TVFJBVEVHWVssIHpkaWN0XSkKIAogICAgUmV0dXJucyBhIGNvbXByZXNzaW9uIG9iamVjdCwgdG8gYmUgdXNlZCBmb3IgY29tcHJlc3NpbmcgZGF0YSBzdHJlYW1zIHRoYXQgd29uJ3QKICAgIGZpdCBpbnRvIG1lbW9yeSBhdCBvbmNlLgpAQCAtNzUsOSArNzUsOSBAQAogICAgc2hvdWxkIGJlIGFuIGludGVnZXIgZnJvbSBgYDhgYCB0byBgYDE1YGAuIEhpZ2hlciB2YWx1ZXMgZ2l2ZSBiZXR0ZXIKICAgIGNvbXByZXNzaW9uLCBidXQgdXNlIG1vcmUgbWVtb3J5LgogCi0gICAqbWVtbGV2ZWwqIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLgotICAgVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gYGAxYGAgdG8gYGA5YGAuIEhpZ2hlciB2YWx1ZXMgdXNpbmcgbW9yZSBtZW1vcnksCi0gICBidXQgYXJlIGZhc3RlciBhbmQgcHJvZHVjZSBzbWFsbGVyIG91dHB1dC4KKyAgIFRoZSAqbWVtTGV2ZWwqIGFyZ3VtZW50IGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIHRoZQorICAgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuIFZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIGBgMWBgIHRvIGBgOWBgLgorICAgSGlnaGVyIHZhbHVlcyB1c2UgbW9yZSBtZW1vcnksIGJ1dCBhcmUgZmFzdGVyIGFuZCBwcm9kdWNlIHNtYWxsZXIgb3V0cHV0LgogCiAgICAqc3RyYXRlZ3kqIGlzIHVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCiAgICBgYFpfREVGQVVMVF9TVFJBVEVHWWBgLCBgYFpfRklMVEVSRURgYCwgYW5kIGBgWl9IVUZGTUFOX09OTFlgYC4KQEAgLTIzMCw3ICsyMzAsNyBAQAogICAgOm1ldGg6YGRlY29tcHJlc3NgIG1ldGhvZC4gIFNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IGJlIHByZXNlcnZlZCBpbiBpbnRlcm5hbAogICAgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KIAotICAgSWYgdGhlIG9wdGlvbmFsIHBhcmFtZXRlciAqbWF4X2xlbmd0aCogaXMgc3VwcGxpZWQgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUKKyAgIElmIHRoZSBvcHRpb25hbCBwYXJhbWV0ZXIgKm1heF9sZW5ndGgqIGlzIG5vbi16ZXJvIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlCiAgICBubyBsb25nZXIgdGhhbiAqbWF4X2xlbmd0aCouIFRoaXMgbWF5IG1lYW4gdGhhdCBub3QgYWxsIG9mIHRoZSBjb21wcmVzc2VkIGlucHV0CiAgICBjYW4gYmUgcHJvY2Vzc2VkOyBhbmQgdW5jb25zdW1lZCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluIHRoZSBhdHRyaWJ1dGUKICAgIDphdHRyOmB1bmNvbnN1bWVkX3RhaWxgLiBUaGlzIGJ5dGVzdHJpbmcgbXVzdCBiZSBwYXNzZWQgdG8gYSBzdWJzZXF1ZW50IGNhbGwgdG8KZGlmZiAtLWdpdCBhL0RvYy9saWNlbnNlLnJzdCBiL0RvYy9saWNlbnNlLnJzdAppbmRleCBlMWFjMzczLi44YTYxM2IyIDEwMDY0NAotLS0gYS9Eb2MvbGljZW5zZS5yc3QKKysrIGIvRG9jL2xpY2Vuc2UucnN0CkBAIC0yMywxMSArMjMsMTEgQEAKIGZvcm0gdGhlIEJlT3BlbiBQeXRob25MYWJzIHRlYW0uICBJbiBPY3RvYmVyIG9mIHRoZSBzYW1lIHllYXIsIHRoZSBQeXRob25MYWJzCiB0ZWFtIG1vdmVkIHRvIERpZ2l0YWwgQ3JlYXRpb25zIChub3cgWm9wZSBDb3Jwb3JhdGlvbjsgc2VlCiBodHRwOi8vd3d3LnpvcGUuY29tLykuICBJbiAyMDAxLCB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gKFBTRiwgc2VlCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmLykgd2FzIGZvcm1lZCwgYSBub24tcHJvZml0IG9yZ2FuaXphdGlvbiBjcmVhdGVkCitodHRwczovL3d3dy5weXRob24ub3JnL3BzZi8pIHdhcyBmb3JtZWQsIGEgbm9uLXByb2ZpdCBvcmdhbml6YXRpb24gY3JlYXRlZAogc3BlY2lmaWNhbGx5IHRvIG93biBQeXRob24tcmVsYXRlZCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuICBab3BlIENvcnBvcmF0aW9uIGlzIGEKIHNwb25zb3JpbmcgbWVtYmVyIG9mIHRoZSBQU0YuCiAKLUFsbCBQeXRob24gcmVsZWFzZXMgYXJlIE9wZW4gU291cmNlIChzZWUgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy8gZm9yIHRoZSBPcGVuCitBbGwgUHl0aG9uIHJlbGVhc2VzIGFyZSBPcGVuIFNvdXJjZSAoc2VlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy8gZm9yIHRoZSBPcGVuCiBTb3VyY2UgRGVmaW5pdGlvbikuIEhpc3RvcmljYWxseSwgbW9zdCwgYnV0IG5vdCBhbGwsIFB5dGhvbiByZWxlYXNlcyBoYXZlIGFsc28KIGJlZW4gR1BMLWNvbXBhdGlibGU7IHRoZSB0YWJsZSBiZWxvdyBzdW1tYXJpemVzIHRoZSB2YXJpb3VzIHJlbGVhc2VzLgogCkBAIC01OTAsNiArNTkwLDM1IEBACiAgIFNVQ0ggREFNQUdFLgogCiAKK1NpcEhhc2gyNAorLS0tLS0tLS0tCisKK1RoZSBmaWxlIDpmaWxlOmBQeXRob24vcHloYXNoLmNgIGNvbnRhaW5zIE1hcmVrIE1hamtvd3NraScgaW1wbGVtZW50YXRpb24gb2YKK0RhbiBCZXJuc3RlaW4ncyBTaXBIYXNoMjQgYWxnb3JpdGhtLiBUaGUgY29udGFpbnMgdGhlIGZvbGxvd2luZyBub3RlOjoKKworICA8TUlUIExpY2Vuc2U+CisgIENvcHlyaWdodCAoYykgMjAxMyAgTWFyZWsgTWFqa293c2tpIDxtYXJla0Bwb3Bjb3VudC5vcmc+CisKKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorICBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAorICBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCisgIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisgIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAgYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgIDwvTUlUIExpY2Vuc2U+CisKKyAgT3JpZ2luYWwgbG9jYXRpb246CisgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9tYWplay9jc2lwaGFzaC8KKworICBTb2x1dGlvbiBpbnNwaXJlZCBieSBjb2RlIGZyb206CisgICAgIFNhbXVlbCBOZXZlcyAoc3VwZXJjb3AvY3J5cHRvX2F1dGgvc2lwaGFzaDI0L2xpdHRsZSkKKyAgICAgZGpiIChzdXBlcmNvcC9jcnlwdG9fYXV0aC9zaXBoYXNoMjQvbGl0dGxlMikKKyAgICAgSmVhbi1QaGlsaXBwZSBBdW1hc3NvbiAoaHR0cHM6Ly8xMzEwMDIubmV0L3NpcGhhc2gvc2lwaGFzaDI0LmMpCisKKwogc3RydG9kIGFuZCBkdG9hCiAtLS0tLS0tLS0tLS0tLS0KIApAQCAtNjI1LDkgKzY1NCw5IEBACiAKIFRoZSBtb2R1bGVzIDptb2Q6YGhhc2hsaWJgLCA6bW9kOmBwb3NpeGAsIDptb2Q6YHNzbGAsIDptb2Q6YGNyeXB0YCB1c2UKIHRoZSBPcGVuU1NMIGxpYnJhcnkgZm9yIGFkZGVkIHBlcmZvcm1hbmNlIGlmIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZQotb3BlcmF0aW5nIHN5c3RlbS4gQWRkaXRpb25hbGx5LCB0aGUgV2luZG93cyBpbnN0YWxsZXJzIGZvciBQeXRob24KLWluY2x1ZGUgYSBjb3B5IG9mIHRoZSBPcGVuU1NMIGxpYnJhcmllcywgc28gd2UgaW5jbHVkZSBhIGNvcHkgb2YgdGhlCi1PcGVuU1NMIGxpY2Vuc2UgaGVyZTo6CitvcGVyYXRpbmcgc3lzdGVtLiBBZGRpdGlvbmFsbHksIHRoZSBXaW5kb3dzIGFuZCBNYWMgT1MgWCBpbnN0YWxsZXJzIGZvcgorUHl0aG9uIG1heSBpbmNsdWRlIGEgY29weSBvZiB0aGUgT3BlblNTTCBsaWJyYXJpZXMsIHNvIHdlIGluY2x1ZGUgYSBjb3B5CitvZiB0aGUgT3BlblNTTCBsaWNlbnNlIGhlcmU6OgogCiAKICAgTElDRU5TRSBJU1NVRVMKQEAgLTg0Niw2ICs4NzUsNDcgQEAKICAgamxvdXBAZ3ppcC5vcmcgICAgICAgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQogCiAKK2NmdWhhc2gKKy0tLS0tLS0KKworVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBoYXNoIHRhYmxlIHVzZWQgYnkgdGhlIDptb2Q6YHRyYWNlbWFsbG9jYCBpcyBiYXNlZAorb24gdGhlIGNmdWhhc2ggcHJvamVjdDo6CisKKyAgIENvcHlyaWdodCAoYykgMjAwNSBEb24gT3dlbnMKKyAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgQlNEIGxpY2Vuc2U6CisKKyAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICBhcmUgbWV0OgorCisgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAgICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAgIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICAgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKIGxpYm1wZGVjCiAtLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2MvbWFrZS5iYXQgYi9Eb2MvbWFrZS5iYXQKaW5kZXggZDZmNzA3NC4uMjUxZjgyMiAxMDA2NDQKLS0tIGEvRG9jL21ha2UuYmF0CisrKyBiL0RvYy9tYWtlLmJhdApAQCAtMSw1OSArMSwxMjQgQEAKLUBAZWNobyBvZmYKLXNldGxvY2FsCi0KLXNldCBTVk5ST09UPWh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cwotaWYgIiVQWVRIT04lIiBFUVUgIiIgc2V0IFBZVEhPTj1weSAtMgotaWYgIiVIVE1MSEVMUCUiIEVRVSAiIiBzZXQgSFRNTEhFTFA9JVByb2dyYW1GaWxlcyVcSFRNTCBIZWxwIFdvcmtzaG9wXGhoYy5leGUKLWlmICIlRElTVFZFUlNJT04lIiBFUVUgIiIgZm9yIC9mICJ1c2ViYWNrcSIgJSV2IGluIChgJVBZVEhPTiUgdG9vbHMvc3BoaW54ZXh0L3BhdGNobGV2ZWwucHlgKSBkbyBzZXQgRElTVFZFUlNJT049JSV2Ci0KLWlmICIlMSIgRVFVICIiIGdvdG8gaGVscAotaWYgIiUxIiBFUVUgImh0bWwiIGdvdG8gYnVpbGQKLWlmICIlMSIgRVFVICJodG1saGVscCIgZ290byBidWlsZAotaWYgIiUxIiBFUVUgImxhdGV4IiBnb3RvIGJ1aWxkCi1pZiAiJTEiIEVRVSAidGV4dCIgZ290byBidWlsZAotaWYgIiUxIiBFUVUgInN1c3BpY2lvdXMiIGdvdG8gYnVpbGQKLWlmICIlMSIgRVFVICJsaW5rY2hlY2siIGdvdG8gYnVpbGQKLWlmICIlMSIgRVFVICJjaGFuZ2VzIiBnb3RvIGJ1aWxkCi1pZiAiJTEiIEVRVSAiY2hlY2tvdXQiIGdvdG8gY2hlY2tvdXQKLWlmICIlMSIgRVFVICJ1cGRhdGUiIGdvdG8gdXBkYXRlCi0KLTpoZWxwCi1zZXQgdGhpcz0lfm4wCi1lY2hvIEhFTFAKLWVjaG8uCi1lY2hvICV0aGlzJSBjaGVja291dAotZWNobyAldGhpcyUgdXBkYXRlCi1lY2hvICV0aGlzJSBodG1sCi1lY2hvICV0aGlzJSBodG1saGVscAotZWNobyAldGhpcyUgbGF0ZXgKLWVjaG8gJXRoaXMlIHRleHQKLWVjaG8gJXRoaXMlIHN1c3BpY2lvdXMKLWVjaG8gJXRoaXMlIGxpbmtjaGVjawotZWNobyAldGhpcyUgY2hhbmdlcwotZWNoby4KLWdvdG8gZW5kCi0KLTpjaGVja291dAotc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9TcGhpbngtMS4yL3NwaGlueCB0b29scy9zcGhpbngKLXN2biBjbyAlU1ZOUk9PVCUvZXh0ZXJuYWwvZG9jdXRpbHMtMC4xMS9kb2N1dGlscyB0b29scy9kb2N1dGlscwotc3ZuIGNvICVTVk5ST09UJS9leHRlcm5hbC9KaW5qYS0yLjMuMS9qaW5qYTIgdG9vbHMvamluamEyCi1zdm4gY28gJVNWTlJPT1QlL2V4dGVybmFsL1B5Z21lbnRzLTEuNi9weWdtZW50cyB0b29scy9weWdtZW50cwotZ290byBlbmQKLQotOnVwZGF0ZQotc3ZuIHVwZGF0ZSB0b29scy9zcGhpbngKLXN2biB1cGRhdGUgdG9vbHMvZG9jdXRpbHMKLXN2biB1cGRhdGUgdG9vbHMvamluamEyCi1zdm4gdXBkYXRlIHRvb2xzL3B5Z21lbnRzCi1nb3RvIGVuZAotCi06YnVpbGQKLWlmIG5vdCBleGlzdCBidWlsZCBta2RpciBidWlsZAotaWYgbm90IGV4aXN0IGJ1aWxkXCUxIG1rZGlyIGJ1aWxkXCUxCi1pZiBub3QgZXhpc3QgYnVpbGRcZG9jdHJlZXMgbWtkaXIgYnVpbGRcZG9jdHJlZXMKLWNtZCAvQyAlUFlUSE9OJSAtLXZlcnNpb24KLWNtZCAvQyAlUFlUSE9OJSB0b29sc1xzcGhpbngtYnVpbGQucHkgLWIlMSAtZGJ1aWxkXGRvY3RyZWVzIC4gYnVpbGRcJSoKLWlmICIlMSIgRVFVICJodG1saGVscCIgIiVIVE1MSEVMUCUiIGJ1aWxkXGh0bWxoZWxwXHB5dGhvbiVESVNUVkVSU0lPTjouPSUuaGhwCi1nb3RvIGVuZAotCi06ZW5kCitAZWNobyBvZmYNCitzZXRsb2NhbA0KKw0KK3B1c2hkICV+ZHAwDQorDQorc2V0IHRoaXM9JX5uMA0KKw0KK2lmICIlU1BISU5YQlVJTEQlIiBFUVUgIiIgc2V0IFNQSElOWEJVSUxEPXNwaGlueC1idWlsZA0KK2lmICIlUFlUSE9OJSIgRVFVICIiIHNldCBQWVRIT049cHkNCisNCitpZiBERUZJTkVEIFByb2dyYW1GaWxlcyh4ODYpIHNldCBfUFJHTUZMUz0lUHJvZ3JhbUZpbGVzKHg4NiklDQoraWYgTk9UIERFRklORUQgUHJvZ3JhbUZpbGVzKHg4Nikgc2V0IF9QUkdNRkxTPSVQcm9ncmFtRmlsZXMlDQoraWYgIiVIVE1MSEVMUCUiIEVRVSAiIiBzZXQgSFRNTEhFTFA9JV9QUkdNRkxTJVxIVE1MIEhlbHAgV29ya3Nob3BcaGhjLmV4ZQ0KKw0KK2lmICIlRElTVFZFUlNJT04lIiBFUVUgIiIgZm9yIC9mICJ1c2ViYWNrcSIgJSV2IGluIChgJVBZVEhPTiUgdG9vbHMvZXh0ZW5zaW9ucy9wYXRjaGxldmVsLnB5YCkgZG8gc2V0IERJU1RWRVJTSU9OPSUldg0KKw0KK2lmICIlQlVJTERESVIlIiBFUVUgIiIgc2V0IEJVSUxERElSPWJ1aWxkDQorDQorcmVtIFRhcmdldHMgdGhhdCBkb24ndCByZXF1aXJlIHNwaGlueC1idWlsZA0KK2lmICIlMSIgRVFVICIiIGdvdG8gaGVscA0KK2lmICIlMSIgRVFVICJoZWxwIiBnb3RvIGhlbHANCitpZiAiJTEiIEVRVSAiY2hlY2siIGdvdG8gY2hlY2sNCitpZiAiJTEiIEVRVSAic2VydmUiIGdvdG8gc2VydmUNCitpZiAiJTEiID09ICJjbGVhbiIgKA0KKyAgICBybWRpciAvcSAvcyAlQlVJTERESVIlDQorICAgIGdvdG8gZW5kDQorKQ0KKw0KKyVTUEhJTlhCVUlMRCUgMj4gbnVsDQoraWYgZXJyb3JsZXZlbCA5MDA5ICgNCisgICAgZWNoby4NCisgICAgZWNoby5UaGUgJ3NwaGlueC1idWlsZCcgY29tbWFuZCB3YXMgbm90IGZvdW5kLiBNYWtlIHN1cmUgeW91IGhhdmUgU3BoaW54DQorICAgIGVjaG8uaW5zdGFsbGVkLCB0aGVuIHNldCB0aGUgU1BISU5YQlVJTEQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcG9pbnQNCisgICAgZWNoby50byB0aGUgZnVsbCBwYXRoIG9mIHRoZSAnc3BoaW54LWJ1aWxkJyBleGVjdXRhYmxlLiBBbHRlcm5hdGl2ZWx5IHlvdQ0KKyAgICBlY2hvLm1heSBhZGQgdGhlIFNwaGlueCBkaXJlY3RvcnkgdG8gUEFUSC4NCisgICAgZWNoby4NCisgICAgZWNoby5JZiB5b3UgZG9uJ3QgaGF2ZSBTcGhpbnggaW5zdGFsbGVkLCBncmFiIGl0IGZyb20NCisgICAgZWNoby5odHRwOi8vc3BoaW54LWRvYy5vcmcvDQorICAgIGdvdG8gZW5kDQorKQ0KKw0KK3JlbSBUYXJnZXRzIHRoYXQgZG8gcmVxdWlyZSBzcGhpbngtYnVpbGQgYW5kIGhhdmUgdGhlaXIgb3duIGxhYmVsDQoraWYgIiUxIiBFUVUgImh0bWx2aWV3IiBnb3RvIGh0bWx2aWV3DQorDQorcmVtIEV2ZXJ5dGhpbmcgZWxzZQ0KK2dvdG8gYnVpbGQNCisNCis6aGVscA0KK2VjaG8udXNhZ2U6ICV0aGlzJSBCVUlMREVSIFtmaWxlbmFtZSAuLi5dDQorZWNoby4NCitlY2hvLkNhbGwgJXRoaXMlIHdpdGggdGhlIGRlc2lyZWQgU3BoaW54IGJ1aWxkZXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LCBlLmcuDQorZWNoby5gYCV0aGlzJSBodG1sYGAgb3IgYGAldGhpcyUgZG9jdGVzdGBgLiAgSW50ZXJlc3RpbmcgdGFyZ2V0cyB0aGF0IGFyZQ0KK2VjaG8uYWx3YXlzIGF2YWlsYWJsZSBpbmNsdWRlOg0KK2VjaG8uDQorZWNoby4gICBQcm92aWRlZCBieSBTcGhpbng6DQorZWNoby4gICAgICBodG1sLCBodG1saGVscCwgbGF0ZXgsIHRleHQNCitlY2hvLiAgICAgIHN1c3BpY2lvdXMsIGxpbmtjaGVjaywgY2hhbmdlcywgZG9jdGVzdA0KK2VjaG8uICAgUHJvdmlkZWQgYnkgdGhpcyBzY3JpcHQ6DQorZWNoby4gICAgICBjbGVhbiwgY2hlY2ssIHNlcnZlLCBodG1sdmlldw0KK2VjaG8uDQorZWNoby5BbGwgYXJndW1lbnRzIHBhc3QgdGhlIGZpcnN0IG9uZSBhcmUgcGFzc2VkIHRocm91Z2ggdG8gc3BoaW54LWJ1aWxkIGFzDQorZWNoby5maWxlbmFtZXMgdG8gYnVpbGQgb3IgYXJlIGlnbm9yZWQuICBTZWUgUkVBRE1FLnR4dCBpbiB0aGlzIGRpcmVjdG9yeSBvcg0KK2VjaG8udGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgdmVyc2lvbiBvZiBTcGhpbnggZm9yIG1vcmUgZXhoYXVzdGl2ZSBsaXN0cw0KK2VjaG8ub2YgYXZhaWxhYmxlIHRhcmdldHMgYW5kIGRlc2NyaXB0aW9ucyBvZiBlYWNoLg0KK2VjaG8uDQorZWNoby5UaGlzIHNjcmlwdCBhc3N1bWVzIHRoYXQgdGhlIFNQSElOWEJVSUxEIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5zDQorZWNoby5hIGxlZ2l0aW1hdGUgY29tbWFuZCBmb3IgY2FsbGluZyBzcGhpbngtYnVpbGQsIG9yIHRoYXQgc3BoaW54LWJ1aWxkIGlzDQorZWNoby5vbiB5b3VyIFBBVEggaWYgU1BISU5YQlVJTEQgaXMgbm90IHNldC4gIE9wdGlvbnMgZm9yIHNwaGlueC1idWlsZCBjYW4NCitlY2hvLmJlIHBhc3NlZCBieSBzZXR0aW5nIHRoZSBTUEhJTlhPUFRTIGVudmlyb25tZW50IHZhcmlhYmxlLg0KK2dvdG8gZW5kDQorDQorOmJ1aWxkDQoraWYgTk9UICIlUEFQRVIlIiA9PSAiIiAoDQorICAgIHNldCBTUEhJTlhPUFRTPS1EIGxhdGV4X3BhcGVyX3NpemU9JVBBUEVSJSAlU1BISU5YT1BUUyUNCispDQorY21kIC9DICVTUEhJTlhCVUlMRCUgJVNQSElOWE9QVFMlIC1iJTEgLWRidWlsZFxkb2N0cmVlcyAuICVCVUlMRERJUiVcJSoNCisNCitpZiAiJTEiIEVRVSAiaHRtbGhlbHAiICgNCisgICAgaWYgIG5vdCBleGlzdCAiJUhUTUxIRUxQJSIgKA0KKyAgICAgICAgZWNoby4NCisgICAgICAgIGVjaG8uVGhlIEhUTUwgSGVscCBXb3Jrc2hvcCB3YXMgbm90IGZvdW5kLiAgU2V0IHRoZSBIVE1MSEVMUCB2YXJpYWJsZQ0KKyAgICAgICAgZWNoby50byB0aGUgcGF0aCB0byBoaGMuZXhlIG9yIGRvd25sb2FkIGFuZCBpbnN0YWxsIGl0IGZyb20NCisgICAgICAgIGVjaG8uaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNjY5OTg1DQorICAgICAgICByZW0gU2V0IGVycm9ybGV2ZWwgdG8gMSBhbmQgZXhpdA0KKyAgICAgICAgY21kIC9DIGV4aXQgL2IgMQ0KKyAgICAgICAgZ290byBlbmQNCisgICAgKQ0KKyAgICBjbWQgL0MgIiVIVE1MSEVMUCUiIGJ1aWxkXGh0bWxoZWxwXHB5dGhvbiVESVNUVkVSU0lPTjouPSUuaGhwDQorICAgIHJlbSBoaGMuZXhlIHNlZW1zIHRvIGFsd2F5cyBleGl0IHdpdGggY29kZSAxLCByZXNldCB0byAwIGZvciBsZXNzIHRoYW4gMg0KKyAgICBpZiBub3QgZXJyb3JsZXZlbCAyIGNtZCAvQyBleGl0IC9iIDANCispDQorDQorZWNoby4NCitpZiBlcnJvcmxldmVsIDEgKA0KKyAgICBlY2hvLkJ1aWxkIGZhaWxlZCAoZXhpdCBjb2RlICVFUlJPUkxFVkVMJV4pLCBjaGVjayBmb3IgZXJyb3IgbWVzc2FnZXMNCisgICAgZWNoby5hYm92ZS4gIEFueSBvdXRwdXQgd2lsbCBiZSBmb3VuZCBpbiAlQlVJTERESVIlXCUxDQorKSBlbHNlICgNCisgICAgZWNoby5CdWlsZCBzdWNjZWVkZWQuIEFsbCBvdXRwdXQgc2hvdWxkIGJlIGluICVCVUlMRERJUiVcJTENCispDQorZ290byBlbmQNCisNCis6aHRtbHZpZXcNCitpZiBOT1QgIiUyIiBFUVUgIiIgKA0KKyAgICBlY2hvLkNhbid0IHNwZWNpZnkgZmlsZW5hbWVzIHRvIGJ1aWxkIHdpdGggaHRtbHZpZXcgdGFyZ2V0LCBpZ25vcmluZy4NCispDQorY21kIC9DICV0aGlzJSBodG1sDQorDQoraWYgRVhJU1QgJUJVSUxERElSJVxodG1sXGluZGV4Lmh0bWwgKA0KKyAgICBlY2hvLk9wZW5pbmcgJUJVSUxERElSJVxodG1sXGluZGV4Lmh0bWwgaW4gdGhlIGRlZmF1bHQgd2ViIGJyb3dzZXIuLi4NCisgICAgc3RhcnQgJUJVSUxERElSJVxodG1sXGluZGV4Lmh0bWwNCispDQorDQorZ290byBlbmQNCisNCis6Y2hlY2sNCitjbWQgL0MgJVBZVEhPTiUgdG9vbHNccnN0bGludC5weSAtaSB0b29scw0KK2dvdG8gZW5kDQorDQorOnNlcnZlDQorY21kIC9DICVQWVRIT04lIC4uXFRvb2xzXHNjcmlwdHNcc2VydmUucHkgJUJVSUxERElSJVxodG1sDQorZ290byBlbmQNCisNCis6ZW5kDQorcG9wZA0KZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvY29tcG91bmRfc3RtdHMucnN0IGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKaW5kZXggOGFmYzY5ZS4uNWRkMTdlYiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9jb21wb3VuZF9zdG10cy5yc3QKQEAgLTIyLDE0ICsyMiwxNCBAQAogICAgc2luZ2xlOiBjbGF1c2UKICAgIHNpbmdsZTogc3VpdGUKIAotQ29tcG91bmQgc3RhdGVtZW50cyBjb25zaXN0IG9mIG9uZSBvciBtb3JlICdjbGF1c2VzLicgIEEgY2xhdXNlIGNvbnNpc3RzIG9mIGEKK0EgY29tcG91bmQgc3RhdGVtZW50IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlICdjbGF1c2VzLicgIEEgY2xhdXNlIGNvbnNpc3RzIG9mIGEKIGhlYWRlciBhbmQgYSAnc3VpdGUuJyAgVGhlIGNsYXVzZSBoZWFkZXJzIG9mIGEgcGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlCiBhbGwgYXQgdGhlIHNhbWUgaW5kZW50YXRpb24gbGV2ZWwuIEVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5CiBpZGVudGlmeWluZyBrZXl3b3JkIGFuZCBlbmRzIHdpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzCiBjb250cm9sbGVkIGJ5IGEgY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGUKIHN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlcidzIGNvbG9uLCBvciBpdAogY2FuIGJlIG9uZSBvciBtb3JlIGluZGVudGVkIHN0YXRlbWVudHMgb24gc3Vic2VxdWVudCBsaW5lcy4gIE9ubHkgdGhlIGxhdHRlcgotZm9ybSBvZiBzdWl0ZSBjYW4gY29udGFpbiBuZXN0ZWQgY29tcG91bmQgc3RhdGVtZW50czsgdGhlIGZvbGxvd2luZyBpcyBpbGxlZ2FsLAorZm9ybSBvZiBhIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZCBzdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsCiBtb3N0bHkgYmVjYXVzZSBpdCB3b3VsZG4ndCBiZSBjbGVhciB0byB3aGljaCA6a2V5d29yZDpgaWZgIGNsYXVzZSBhIGZvbGxvd2luZwogOmtleXdvcmQ6YGVsc2VgIGNsYXVzZSB3b3VsZCBiZWxvbmc6OgogCkBAIC0xNTYsOCArMTU2LDggQEAKIAogVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlIG9iamVjdC4gIEFuCiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZSBgYGV4cHJlc3Npb25fbGlzdGBgLiAgVGhlIHN1aXRlIGlzCi10aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbSBwcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZgotYXNjZW5kaW5nIGluZGljZXMuICBFYWNoIGl0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlCit0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbSBwcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciByZXR1cm5lZAorYnkgdGhlIGl0ZXJhdG9yLiAgRWFjaCBpdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZQogc3RhbmRhcmQgcnVsZXMgZm9yIGFzc2lnbm1lbnRzIChzZWUgOnJlZjpgYXNzaWdubWVudGApLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXMKIGV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGUgc2VxdWVuY2UKIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhIDpleGM6YFN0b3BJdGVyYXRpb25gIGV4Y2VwdGlvbiksIHRoZSBzdWl0ZSBpbgpAQCAtMTcwLDE3ICsxNzAsMjUgQEAKIEEgOmtleXdvcmQ6YGJyZWFrYCBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3AKIHdpdGhvdXQgZXhlY3V0aW5nIHRoZSA6a2V5d29yZDpgZWxzZWAgY2xhdXNlJ3Mgc3VpdGUuICBBIDprZXl3b3JkOmBjb250aW51ZWAKIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBjb250aW51ZXMKLXdpdGggdGhlIG5leHQgaXRlbSwgb3Igd2l0aCB0aGUgOmtleXdvcmQ6YGVsc2VgIGNsYXVzZSBpZiB0aGVyZSB3YXMgbm8gbmV4dAord2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSA6a2V5d29yZDpgZWxzZWAgY2xhdXNlIGlmIHRoZXJlIGlzIG5vIG5leHQKIGl0ZW0uCiAKLVRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lcyBub3QgYWZmZWN0Ci10aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LgorVGhlIGZvci1sb29wIG1ha2VzIGFzc2lnbm1lbnRzIHRvIHRoZSB2YXJpYWJsZXMocykgaW4gdGhlIHRhcmdldCBsaXN0LgorVGhpcyBvdmVyd3JpdGVzIGFsbCBwcmV2aW91cyBhc3NpZ25tZW50cyB0byB0aG9zZSB2YXJpYWJsZXMgaW5jbHVkaW5nCit0aG9zZSBtYWRlIGluIHRoZSBzdWl0ZSBvZiB0aGUgZm9yLWxvb3A6OgorCisgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgcHJpbnQoaSkKKyAgICAgICBpID0gNSAgICAgICAgICAgICAjIHRoaXMgd2lsbCBub3QgYWZmZWN0IHRoZSBmb3ItbG9vcAorICAgICAgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgbmV4dAorICAgICAgICAgICAgICAgICAgICAgICAgICMgaW5kZXggaW4gdGhlIHJhbmdlCisKIAogLi4gaW5kZXg6OgogICAgYnVpbHRpbjogcmFuZ2UKIAogTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLCBidXQgaWYgdGhlCi1zZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbCBieSB0aGUgbG9vcC4gIEhpbnQ6CitzZXF1ZW5jZSBpcyBlbXB0eSwgdGhleSB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsIGJ5IHRoZSBsb29wLiAgSGludDoKIHRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgcmFuZ2VgIHJldHVybnMgYW4gaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8KIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWwncyBgYGZvciBpIDo9IGEgdG8gYiBkb2BgOyBlLmcuLCBgYGxpc3QocmFuZ2UoMykpYGAKIHJldHVybnMgdGhlIGxpc3QgYGBbMCwgMSwgMl1gYC4KQEAgLTIyNiw3ICsyMzQsNyBAQAogLi4gcHJvZHVjdGlvbmxpc3Q6OgogICAgdHJ5X3N0bXQ6IHRyeTFfc3RtdCB8IHRyeTJfc3RtdAogICAgdHJ5MV9zdG10OiAidHJ5IiAiOiIgYHN1aXRlYAotICAgICAgICAgICAgOiAoImV4Y2VwdCIgW2BleHByZXNzaW9uYCBbImFzIiBgdGFyZ2V0YF1dICI6IiBgc3VpdGVgKSsKKyAgICAgICAgICAgIDogKCJleGNlcHQiIFtgZXhwcmVzc2lvbmAgWyJhcyIgYGlkZW50aWZpZXJgXV0gIjoiIGBzdWl0ZWApKwogICAgICAgICAgICAgOiBbImVsc2UiICI6IiBgc3VpdGVgXQogICAgICAgICAgICAgOiBbImZpbmFsbHkiICI6IiBgc3VpdGVgXQogICAgdHJ5Ml9zdG10OiAidHJ5IiAiOiIgYHN1aXRlYApAQCAtMjg0LDcgKzI5Miw3IEBACiAgICBvYmplY3Q6IHRyYWNlYmFjawogCiBCZWZvcmUgYW4gZXhjZXB0IGNsYXVzZSdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZSBleGNlcHRpb24gYXJlCi1zdG9yZWQgaW4gdGhlIDptb2Q6YHN5c2AgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzIHZpYSA6ZnVuYzpgc3lzLmV4Y19pbmZvYC4KK3N0b3JlZCBpbiB0aGUgOm1vZDpgc3lzYCBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3NlZCB2aWEgOmZ1bmM6YHN5cy5leGNfaW5mb2AuCiA6ZnVuYzpgc3lzLmV4Y19pbmZvYCByZXR1cm5zIGEgMy10dXBsZSBjb25zaXN0aW5nIG9mIHRoZSBleGNlcHRpb24gY2xhc3MsIHRoZQogZXhjZXB0aW9uIGluc3RhbmNlIGFuZCBhIHRyYWNlYmFjayBvYmplY3QgKHNlZSBzZWN0aW9uIDpyZWY6YHR5cGVzYCkgaWRlbnRpZnlpbmcKIHRoZSBwb2ludCBpbiB0aGUgcHJvZ3JhbSB3aGVyZSB0aGUgZXhjZXB0aW9uIG9jY3VycmVkLiAgOmZ1bmM6YHN5cy5leGNfaW5mb2AKQEAgLTMxMywxNCArMzIxLDE0IEBACiBJZiB0aGUgOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZSBleGVjdXRlcyBhIDprZXl3b3JkOmByZXR1cm5gIG9yIDprZXl3b3JkOmBicmVha2AKIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvbiBpcyBkaXNjYXJkZWQ6OgogCi0gICAgZGVmIGYoKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgMS8wCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICByZXR1cm4gNDIKLQotICAgID4+PiBmKCkKLSAgICA0MgorICAgPj4+IGRlZiBmKCk6CisgICAuLi4gICAgIHRyeToKKyAgIC4uLiAgICAgICAgIDEvMAorICAgLi4uICAgICBmaW5hbGx5OgorICAgLi4uICAgICAgICAgcmV0dXJuIDQyCisgICAuLi4KKyAgID4+PiBmKCkKKyAgIDQyCiAKIFRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmcgZXhlY3V0aW9uIG9mCiB0aGUgOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZS4KQEAgLTMzNyw2ICszNDUsMjAgQEAKIHJlYXNvbiBpcyBhIHByb2JsZW0gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmUKIGxpZnRlZCBpbiB0aGUgZnV0dXJlKS4KIAorVGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgdGhlIGxhc3QgOmtleXdvcmQ6YHJldHVybmAKK3N0YXRlbWVudCBleGVjdXRlZC4gIFNpbmNlIHRoZSA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlIGFsd2F5cyBleGVjdXRlcywgYQorOmtleXdvcmQ6YHJldHVybmAgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlIHdpbGwKK2Fsd2F5cyBiZSB0aGUgbGFzdCBvbmUgZXhlY3V0ZWQ6OgorCisgICA+Pj4gZGVmIGZvbygpOgorICAgLi4uICAgICB0cnk6CisgICAuLi4gICAgICAgICByZXR1cm4gJ3RyeScKKyAgIC4uLiAgICAgZmluYWxseToKKyAgIC4uLiAgICAgICAgIHJldHVybiAnZmluYWxseScKKyAgIC4uLgorICAgPj4+IGZvbygpCisgICAnZmluYWxseScKKwogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uIDpyZWY6YGV4Y2VwdGlvbnNgLAogYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSA6a2V5d29yZDpgcmFpc2VgIHN0YXRlbWVudCB0byBnZW5lcmF0ZSBleGNlcHRpb25zCiBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiA6cmVmOmByYWlzZWAuCkBAIC0zNDgsNyArMzcwLDkgQEAKIFRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0uLiBpbmRleDo6IHN0YXRlbWVudDogd2l0aAorLi4gaW5kZXg6OgorICAgIHN0YXRlbWVudDogd2l0aAorICAgIHNpbmdsZTogYXM7IHdpdGggc3RhdGVtZW50CiAKIFRoZSA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aAogbWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiA6cmVmOmBjb250ZXh0LW1hbmFnZXJzYCkuCkBAIC00NDUsNyArNDY5LDcgQEAKICAgIGRlY29yYXRvcjogIkAiIGBkb3R0ZWRfbmFtZWAgWyIoIiBbYHBhcmFtZXRlcl9saXN0YCBbIiwiXV0gIikiXSBORVdMSU5FCiAgICBkb3R0ZWRfbmFtZTogYGlkZW50aWZpZXJgICgiLiIgYGlkZW50aWZpZXJgKSoKICAgIHBhcmFtZXRlcl9saXN0OiAoYGRlZnBhcmFtZXRlcmAgIiwiKSoKLSAgICAgICAgICAgICAgICAgOiAoICIqIiBbYHBhcmFtZXRlcmBdICgiLCIgYGRlZnBhcmFtZXRlcmApKiBbIiwiICIqKiIgYHBhcmFtZXRlcmBdCisgICAgICAgICAgICAgICAgIDogfCAiKiIgW2BwYXJhbWV0ZXJgXSAoIiwiIGBkZWZwYXJhbWV0ZXJgKSogWyIsIiAiKioiIGBwYXJhbWV0ZXJgXQogICAgICAgICAgICAgICAgICA6IHwgIioqIiBgcGFyYW1ldGVyYAogICAgICAgICAgICAgICAgICA6IHwgYGRlZnBhcmFtZXRlcmAgWyIsIl0gKQogICAgcGFyYW1ldGVyOiBgaWRlbnRpZmllcmAgWyI6IiBgZXhwcmVzc2lvbmBdCkBAIC00OTMsMTQgKzUxNywxNSBAQAogdmFsdWUsIGFsbCBmb2xsb3dpbmcgcGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgImBgKmBgIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQKIHZhbHVlIC0tLSB0aGlzIGlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci4KIAotKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzCi1leGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uCi1pcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLWNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzCi1pcyBlc3BlY2lhbGx5IGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUKLW9iamVjdCwgc3VjaCBhcyBhIGxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdAotKGUuZy4gYnkgYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLgotVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlIGBgTm9uZWBgCi1hcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBlLmcuOjoKKyoqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0IHdoZW4gdGhlIGZ1bmN0aW9uCitkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlbgordGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2gKK2NhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEKK211dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUKK29iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QKK21vZGlmaWVkLiAgVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlCitgYE5vbmVgYCBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLAorZS5nLjo6CiAKICAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKToKICAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6CmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QgYi9Eb2MvcmVmZXJlbmNlL2RhdGFtb2RlbC5yc3QKaW5kZXggZTVlNTNjMS4uMTU2MGFkMCAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9kYXRhbW9kZWwucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvZGF0YW1vZGVsLnJzdApAQCAtNzcsNyArNzcsNyBAQAogICAgbW9kdWxlIGZvciBpbmZvcm1hdGlvbiBvbiBjb250cm9sbGluZyB0aGUgY29sbGVjdGlvbiBvZiBjeWNsaWMgZ2FyYmFnZS4KICAgIE90aGVyIGltcGxlbWVudGF0aW9ucyBhY3QgZGlmZmVyZW50bHkgYW5kIENQeXRob24gbWF5IGNoYW5nZS4KICAgIERvIG5vdCBkZXBlbmQgb24gaW1tZWRpYXRlIGZpbmFsaXphdGlvbiBvZiBvYmplY3RzIHdoZW4gdGhleSBiZWNvbWUKLSAgIHVucmVhY2hhYmxlIChleDogYWx3YXlzIGNsb3NlIGZpbGVzKS4KKyAgIHVucmVhY2hhYmxlIChzbyB5b3Ugc2hvdWxkIGFsd2F5cyBjbG9zZSBmaWxlcyBleHBsaWNpdGx5KS4KIAogTm90ZSB0aGF0IHRoZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uJ3MgdHJhY2luZyBvciBkZWJ1Z2dpbmcgZmFjaWxpdGllcyBtYXkKIGtlZXAgb2JqZWN0cyBhbGl2ZSB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIGNvbGxlY3RhYmxlLiBBbHNvIG5vdGUgdGhhdCBjYXRjaGluZwpAQCAtMTU0LDExICsxNTQsMTYgQEAKIAogICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXMgdmFsdWUuIFRoaXMKICAgIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lIGBgTm90SW1wbGVtZW50ZWRgYC4gTnVtZXJpYyBtZXRob2RzCi0gICBhbmQgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbWF5IHJldHVybiB0aGlzIHZhbHVlIGlmIHRoZXkgZG8gbm90IGltcGxlbWVudCB0aGUKKyAgIGFuZCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBzaG91bGQgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZQogICAgb3BlcmF0aW9uIGZvciB0aGUgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlCiAgICByZWZsZWN0ZWQgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdG9yLikgIEl0cwogICAgdHJ1dGggdmFsdWUgaXMgdHJ1ZS4KIAorICAgU2VlCisgICA6cmVmOmBpbXBsZW1lbnRpbmctdGhlLWFyaXRobWV0aWMtb3BlcmF0aW9uc2AKKyAgIGZvciBtb3JlIGRldGFpbHMuCisKKwogRWxsaXBzaXMKICAgIC4uIGluZGV4Ojogb2JqZWN0OiBFbGxpcHNpcwogCkBAIC0yMjIsNyArMjI3LDcgQEAKICAgICAgIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lIGFyY2hpdGVjdHVyZSAoYW5kIEMgb3IgSmF2YQogICAgICAgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWQgcmFuZ2UgYW5kIGhhbmRsaW5nIG9mIG92ZXJmbG93LiBQeXRob24gZG9lcyBub3QKICAgICAgIHN1cHBvcnQgc2luZ2xlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCBudW1iZXJzOyB0aGUgc2F2aW5ncyBpbiBwcm9jZXNzb3IgYW5kCi0gICAgICBtZW1vcnkgdXNhZ2UgdGhhdCBhcmUgdXN1YWxseSB0aGUgcmVhc29uIGZvciB1c2luZyB0aGVzZSBpcyBkd2FyZmVkIGJ5IHRoZQorICAgICAgbWVtb3J5IHVzYWdlIHRoYXQgYXJlIHVzdWFsbHkgdGhlIHJlYXNvbiBmb3IgdXNpbmcgdGhlc2UgYXJlIGR3YXJmZWQgYnkgdGhlCiAgICAgICBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXMgbm8gcmVhc29uIHRvIGNvbXBsaWNhdGUgdGhlCiAgICAgICBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZyBwb2ludCBudW1iZXJzLgogCkBAIC0yODUsMTYgKzI5MCwxNyBAQAogICAgICAgICAgICAgc2luZ2xlOiBpbnRlZ2VyCiAgICAgICAgICAgICBzaW5nbGU6IFVuaWNvZGUKIAotICAgICAgICAgQSBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhhdCByZXByZXNlbnQgVW5pY29kZSBjb2RlcG9pbnRzLgotICAgICAgICAgQWxsIHRoZSBjb2RlcG9pbnRzIGluIHJhbmdlIGBgVSswMDAwIC0gVSsxMEZGRkZgYCBjYW4gYmUgcmVwcmVzZW50ZWQKLSAgICAgICAgIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuJ3QgaGF2ZSBhIDpjOnR5cGU6YGNocmAgdHlwZSwgYW5kCi0gICAgICAgICBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZyBpcyByZXByZXNlbnRlZCBhcyBhIHN0cmluZyBvYmplY3QKLSAgICAgICAgIHdpdGggbGVuZ3RoIGBgMWBgLiAgVGhlIGJ1aWx0LWluIGZ1bmN0aW9uIDpmdW5jOmBvcmRgIGNvbnZlcnRzIGEKLSAgICAgICAgIGNoYXJhY3RlciB0byBpdHMgY29kZXBvaW50IChhcyBhbiBpbnRlZ2VyKTsgOmZ1bmM6YGNocmAgY29udmVydHMKLSAgICAgICAgIGFuIGludGVnZXIgaW4gcmFuZ2UgYGAwIC0gMTBGRkZGYGAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVyLgorICAgICAgICAgQSBzdHJpbmcgaXMgYSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhhdCByZXByZXNlbnQgVW5pY29kZSBjb2RlIHBvaW50cy4KKyAgICAgICAgIEFsbCB0aGUgY29kZSBwb2ludHMgaW4gdGhlIHJhbmdlIGBgVSswMDAwIC0gVSsxMEZGRkZgYCBjYW4gYmUKKyAgICAgICAgIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuJ3QgaGF2ZSBhIDpjOnR5cGU6YGNoYXJgIHR5cGU7CisgICAgICAgICBpbnN0ZWFkLCBldmVyeSBjb2RlIHBvaW50IGluIHRoZSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgYXMgYSBzdHJpbmcKKyAgICAgICAgIG9iamVjdCB3aXRoIGxlbmd0aCBgYDFgYC4gIFRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgb3JkYAorICAgICAgICAgY29udmVydHMgYSBjb2RlIHBvaW50IGZyb20gaXRzIHN0cmluZyBmb3JtIHRvIGFuIGludGVnZXIgaW4gdGhlCisgICAgICAgICByYW5nZSBgYDAgLSAxMEZGRkZgYDsgOmZ1bmM6YGNocmAgY29udmVydHMgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UKKyAgICAgICAgIGBgMCAtIDEwRkZGRmBgIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlbmd0aCBgYDFgYCBzdHJpbmcgb2JqZWN0LgogICAgICAgICAgOm1ldGg6YHN0ci5lbmNvZGVgIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYSA6Y2xhc3M6YHN0cmAgdG8KLSAgICAgICAgIDpjbGFzczpgYnl0ZXNgIHVzaW5nIHRoZSBnaXZlbiBlbmNvZGluZywgYW5kIDptZXRoOmBieXRlcy5kZWNvZGVgIGNhbgotICAgICAgICAgYmUgdXNlZCB0byBhY2hpZXZlIHRoZSBvcHBvc2l0ZS4KKyAgICAgICAgIDpjbGFzczpgYnl0ZXNgIHVzaW5nIHRoZSBnaXZlbiB0ZXh0IGVuY29kaW5nLCBhbmQKKyAgICAgICAgIDptZXRoOmBieXRlcy5kZWNvZGVgIGNhbiBiZSB1c2VkIHRvIGFjaGlldmUgdGhlIG9wcG9zaXRlLgogCiAgICAgICBUdXBsZXMKICAgICAgICAgIC4uIGluZGV4OjoKQEAgLTMyMyw4ICszMjksNiBAQAogICAgICAgICAgb2JqZWN0OiBtdXRhYmxlIHNlcXVlbmNlCiAgICAgICAgICBvYmplY3Q6IG11dGFibGUKICAgICAgICAgIHBhaXI6IGFzc2lnbm1lbnQ7IHN0YXRlbWVudAotICAgICAgICAgc2luZ2xlOiBkZWxldGUKLSAgICAgICAgIHN0YXRlbWVudDogZGVsCiAgICAgICAgICBzaW5nbGU6IHN1YnNjcmlwdGlvbgogICAgICAgICAgc2luZ2xlOiBzbGljaW5nCiAKQEAgLTQ1NSw3ICs0NTksOCBAQAogICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PSsKICAgICAgIHwgOmF0dHI6YF9fZG9jX19gICAgICAgICAgfCBUaGUgZnVuY3Rpb24ncyBkb2N1bWVudGF0aW9uICB8IFdyaXRhYmxlICB8CiAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nLCBvciBgYE5vbmVgYCBpZiAgICAgICAgfCAgICAgICAgICAgfAotICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuYXZhaWxhYmxlICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgIHwKKyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgfCB1bmF2YWlsYWJsZTsgbm90IGluaGVyaXRlZCBieSB8ICAgICAgICAgICB8CisgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3ViY2xhc3NlcyAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgfAogICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLSsKICAgICAgIHwgOmF0dHI6YF9fbmFtZV9fYCAgICAgICAgfCBUaGUgZnVuY3Rpb24ncyBuYW1lICAgICAgICAgICB8IFdyaXRhYmxlICB8CiAgICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tKwpAQCAtNzA5LDcgKzcxNCw3IEBACiAgICB3aGVyZSB0aGVyZSBhcmUgbXVsdGlwbGUgaW5oZXJpdGFuY2UgcGF0aHMgbGVhZGluZyBiYWNrIHRvIGEgY29tbW9uIGFuY2VzdG9yLgogICAgQWRkaXRpb25hbCBkZXRhaWxzIG9uIHRoZSBDMyBNUk8gdXNlZCBieSBQeXRob24gY2FuIGJlIGZvdW5kIGluIHRoZQogICAgZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIDIuMyByZWxlYXNlIGF0Ci0gICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uCisgICBodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLgogCiAgICAuLiBYWFg6IENvdWxkIHdlIGFkZCB0aGF0IE1STyBkb2MgYXMgYW4gYXBwZW5kaXggdG8gdGhlIGxhbmd1YWdlIHJlZj8KIApAQCAtOTM0LDYgKzkzOSwyMCBAQAogICAgICAgZnJhbWUpLiAgQSBkZWJ1Z2dlciBjYW4gaW1wbGVtZW50IGEgSnVtcCBjb21tYW5kIChha2EgU2V0IE5leHQgU3RhdGVtZW50KQogICAgICAgYnkgd3JpdGluZyB0byBmX2xpbmVuby4KIAorICAgICAgRnJhbWUgb2JqZWN0cyBzdXBwb3J0IG9uZSBtZXRob2Q6CisKKyAgICAgIC4uIG1ldGhvZDo6IGZyYW1lLmNsZWFyKCkKKworICAgICAgICAgVGhpcyBtZXRob2QgY2xlYXJzIGFsbCByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcyBoZWxkIGJ5IHRoZQorICAgICAgICAgZnJhbWUuICBBbHNvLCBpZiB0aGUgZnJhbWUgYmVsb25nZWQgdG8gYSBnZW5lcmF0b3IsIHRoZSBnZW5lcmF0b3IKKyAgICAgICAgIGlzIGZpbmFsaXplZC4gIFRoaXMgaGVscHMgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBpbnZvbHZpbmcgZnJhbWUKKyAgICAgICAgIG9iamVjdHMgKGZvciBleGFtcGxlIHdoZW4gY2F0Y2hpbmcgYW4gZXhjZXB0aW9uIGFuZCBzdG9yaW5nIGl0cworICAgICAgICAgdHJhY2ViYWNrIGZvciBsYXRlciB1c2UpLgorCisgICAgICAgICA6ZXhjOmBSdW50aW1lRXJyb3JgIGlzIHJhaXNlZCBpZiB0aGUgZnJhbWUgaXMgY3VycmVudGx5IGV4ZWN1dGluZy4KKworICAgICAgICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKICAgIFRyYWNlYmFjayBvYmplY3RzCiAgICAgICAuLiBpbmRleDo6CiAgICAgICAgICBvYmplY3Q6IHRyYWNlYmFjawpAQCAtMTEyMywxNCArMTE0MiwxNCBAQAogICAgICAgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuIHVuaGFuZGxlZAogICAgICAgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluCiAgICAgICBgYHN5cy5sYXN0X3RyYWNlYmFja2BgIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3Qgc2l0dWF0aW9uCi0gICAgICBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7IHRoZSBsYXR0ZXIgdHdvCi0gICAgICBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nIGBgTm9uZWBgIGluIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuCi0gICAgICBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUKLSAgICAgIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0J3Mgb24gYnkgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmCi0gICAgICB0aGVyZSBhcmUgbm8gUHl0aG9uLSBsZXZlbCA6bWV0aDpgX19kZWxfX2AgbWV0aG9kcyBpbnZvbHZlZC4gUmVmZXIgdG8gdGhlCi0gICAgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgOm1vZDpgZ2NgIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cKLSAgICAgIDptZXRoOmBfX2RlbF9fYCBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5Ci0gICAgICB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGBgZ2FyYmFnZWBgIHZhbHVlLgorICAgICAgY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzOyB0aGUgc2Vjb25kIGNhbiBiZQorICAgICAgcmVzb2x2ZWQgYnkgZnJlZWluZyB0aGUgcmVmZXJlbmNlIHRvIHRoZSB0cmFjZWJhY2sgb2JqZWN0IHdoZW4gaXQgaXMgbm8KKyAgICAgIGxvbmdlciB1c2VmdWwsIGFuZCB0aGUgdGhpcmQgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgYGBOb25lYGAgaW4KKyAgICAgIGBgc3lzLmxhc3RfdHJhY2ViYWNrYGAuCisgICAgICBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuCisgICAgICB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yIGlzIGVuYWJsZWQgKGl0J3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyIHRvIHRoZQorICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIDptb2Q6YGdjYCBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhpcworICAgICAgdG9waWMuCiAKICAgIC4uIHdhcm5pbmc6OgogCkBAIC0xMjE4LDYgKzEyMzcsMTAgQEAKIAogICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4KIAorICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgICAgIFRoZSBfX2Zvcm1hdF9fIG1ldGhvZCBvZiBgYG9iamVjdGBgIGl0c2VsZiByYWlzZXMgYSA6ZXhjOmBUeXBlRXJyb3JgCisgICAgICBpZiBwYXNzZWQgYW55IG5vbi1lbXB0eSBzdHJpbmcuCisKIAogLi4gX3JpY2hjbXBmdW5jczoKIC4uIG1ldGhvZDo6IG9iamVjdC5fX2x0X18oc2VsZiwgb3RoZXIpCkBAIC0xMjQzLDEwICsxMjY2LDE0IEBACiAgICBjb250ZXh0IChlLmcuLCBpbiB0aGUgY29uZGl0aW9uIG9mIGFuIGBgaWZgYCBzdGF0ZW1lbnQpLCBQeXRob24gd2lsbCBjYWxsCiAgICA6ZnVuYzpgYm9vbGAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0IGlzIHRydWUgb3IgZmFsc2UuCiAKLSAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLiBUaGUgdHJ1dGgKLSAgIG9mIGBgeD09eWBgIGRvZXMgbm90IGltcGx5IHRoYXQgYGB4IT15YGAgaXMgZmFsc2UuICBBY2NvcmRpbmdseSwgd2hlbgotICAgZGVmaW5pbmcgOm1ldGg6YF9fZXFfX2AsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmUgOm1ldGg6YF9fbmVfX2Agc28gdGhhdCB0aGUKLSAgIG9wZXJhdG9ycyB3aWxsIGJlaGF2ZSBhcyBleHBlY3RlZC4gIFNlZSB0aGUgcGFyYWdyYXBoIG9uIDptZXRoOmBfX2hhc2hfX2AgZm9yCisgICBCeSBkZWZhdWx0LCA6bWV0aDpgX19uZV9fYCBkZWxlZ2F0ZXMgdG8gOm1ldGg6YF9fZXFfX2AgYW5kCisgICBpbnZlcnRzIHRoZSByZXN1bHQgdW5sZXNzIGl0IGlzIGBgTm90SW1wbGVtZW50ZWRgYC4gIFRoZXJlIGFyZSBubyBvdGhlcgorICAgaW1wbGllZCByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycywgZm9yIGV4YW1wbGUsCisgICB0aGUgdHJ1dGggb2YgYGAoeDx5IG9yIHg9PXkpYGAgZG9lcyBub3QgaW1wbHkgYGB4PD15YGAuCisgICBUbyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290IG9wZXJhdGlvbiwKKyAgIHNlZSA6ZnVuYzpgZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nYC4KKworICAgU2VlIHRoZSBwYXJhZ3JhcGggb24gOm1ldGg6YF9faGFzaF9fYCBmb3IKICAgIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uIGNyZWF0aW5nIDp0ZXJtOmBoYXNoYWJsZWAgb2JqZWN0cyB3aGljaCBzdXBwb3J0CiAgICBjdXN0b20gY29tcGFyaXNvbiBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy4KIApAQCAtMTI1NSwxMSArMTI4MiwxMSBAQAogICAgcmF0aGVyLCA6bWV0aDpgX19sdF9fYCBhbmQgOm1ldGg6YF9fZ3RfX2AgYXJlIGVhY2ggb3RoZXIncyByZWZsZWN0aW9uLAogICAgOm1ldGg6YF9fbGVfX2AgYW5kIDptZXRoOmBfX2dlX19gIGFyZSBlYWNoIG90aGVyJ3MgcmVmbGVjdGlvbiwgYW5kCiAgICA6bWV0aDpgX19lcV9fYCBhbmQgOm1ldGg6YF9fbmVfX2AgYXJlIHRoZWlyIG93biByZWZsZWN0aW9uLgotCi0gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuCi0KLSAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3Qgb3BlcmF0aW9uLAotICAgc2VlIDpmdW5jOmBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmdgLgorICAgSWYgdGhlIG9wZXJhbmRzIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGFuZCByaWdodCBvcGVyYW5kJ3MgdHlwZSBpcworICAgYSBkaXJlY3Qgb3IgaW5kaXJlY3Qgc3ViY2xhc3Mgb2YgdGhlIGxlZnQgb3BlcmFuZCdzIHR5cGUsCisgICB0aGUgcmVmbGVjdGVkIG1ldGhvZCBvZiB0aGUgcmlnaHQgb3BlcmFuZCBoYXMgcHJpb3JpdHksIG90aGVyd2lzZQorICAgdGhlIGxlZnQgb3BlcmFuZCdzIG1ldGhvZCBoYXMgcHJpb3JpdHkuICBWaXJ0dWFsIHN1YmNsYXNzaW5nIGlzCisgICBub3QgY29uc2lkZXJlZC4KIAogLi4gbWV0aG9kOjogb2JqZWN0Ll9faGFzaF9fKHNlbGYpCiAKQEAgLTEyODMsNyArMTMxMCw3IEBACiAgICAgIG9iamVjdCdzICAgOm1ldGg6YF9faGFzaF9fYCBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHMgb2YgZGlmZmVyZW50IGJpdAogICAgICBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsIHN1cHBvcnRlZCBidWlsZHMuICBBbiBlYXN5IHdheQogICAgICB0byBkbyB0aGlzIGlzIHdpdGgKLSAgICAgYGBweXRob24gLWMgImltcG9ydCBzeXM7IHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpImBgCisgICAgIGBgcHl0aG9uIC1jICJpbXBvcnQgc3lzOyBwcmludChzeXMuaGFzaF9pbmZvLndpZHRoKSJgYC4KIAogICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gOm1ldGg6YF9fZXFfX2AgbWV0aG9kIGl0IHNob3VsZCBub3QgZGVmaW5lIGEKICAgIDptZXRoOmBfX2hhc2hfX2Agb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lcyA6bWV0aDpgX19lcV9fYCBidXQgbm90CkBAIC0xMzA0LDcgKzEzMzEsNyBAQAogICAgOm1ldGg6YF9faGFzaF9fYCBtZXRob2Qgb2YgYSBjbGFzcyBpcyBgYE5vbmVgYCwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcyB3aWxsCiAgICByYWlzZSBhbiBhcHByb3ByaWF0ZSA6ZXhjOmBUeXBlRXJyb3JgIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvIHJldHJpZXZlCiAgICB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzIHVuaGFzaGFibGUgd2hlbgotICAgY2hlY2tpbmcgYGBpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGVgYCkuCisgICBjaGVja2luZyBgYGlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSlgYC4KIAogICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyA6bWV0aDpgX19lcV9fYCBuZWVkcyB0byByZXRhaW4gdGhlIGltcGxlbWVudGF0aW9uCiAgICBvZiA6bWV0aDpgX19oYXNoX19gIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZSBpbnRlcnByZXRlciBtdXN0IGJlIHRvbGQgdGhpcwpAQCAtMTQ1NSw2ICsxNDgyLDE0IEBACiAgICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGUgb3duZXIgY2xhc3MuCiAKIAorVGhlIGF0dHJpYnV0ZSA6YXR0cjpgX19vYmpjbGFzc19fYCBpcyBpbnRlcnByZXRlZCBieSB0aGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlCithcyBzcGVjaWZ5aW5nIHRoZSBjbGFzcyB3aGVyZSB0aGlzIG9iamVjdCB3YXMgZGVmaW5lZCAoc2V0dGluZyB0aGlzCithcHByb3ByaWF0ZWx5IGNhbiBhc3Npc3QgaW4gcnVudGltZSBpbnRyb3NwZWN0aW9uIG9mIGR5bmFtaWMgY2xhc3MgYXR0cmlidXRlcykuCitGb3IgY2FsbGFibGVzLCBpdCBtYXkgaW5kaWNhdGUgdGhhdCBhbiBpbnN0YW5jZSBvZiB0aGUgZ2l2ZW4gdHlwZSAob3IgYQorc3ViY2xhc3MpIGlzIGV4cGVjdGVkIG9yIHJlcXVpcmVkIGFzIHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50IChmb3IgZXhhbXBsZSwKK0NQeXRob24gc2V0cyB0aGlzIGF0dHJpYnV0ZSBmb3IgdW5ib3VuZCBtZXRob2RzIHRoYXQgYXJlIGltcGxlbWVudGVkIGluIEMpLgorCisKIC4uIF9kZXNjcmlwdG9yLWludm9jYXRpb246CiAKIEludm9raW5nIERlc2NyaXB0b3JzCkBAIC0xNTM2LDkgKzE1NzEsOSBAQAogLi4gZGF0YTo6IG9iamVjdC5fX3Nsb3RzX18KIAogICAgVGhpcyBjbGFzcyB2YXJpYWJsZSBjYW4gYmUgYXNzaWduZWQgYSBzdHJpbmcsIGl0ZXJhYmxlLCBvciBzZXF1ZW5jZSBvZgotICAgc3RyaW5ncyB3aXRoIHZhcmlhYmxlIG5hbWVzIHVzZWQgYnkgaW5zdGFuY2VzLiAgSWYgZGVmaW5lZCBpbiBhCi0gICBjbGFzcywgKl9fc2xvdHNfXyogcmVzZXJ2ZXMgc3BhY2UgZm9yIHRoZSBkZWNsYXJlZCB2YXJpYWJsZXMgYW5kIHByZXZlbnRzIHRoZQotICAgYXV0b21hdGljIGNyZWF0aW9uIG9mICpfX2RpY3RfXyogYW5kICpfX3dlYWtyZWZfXyogZm9yIGVhY2ggaW5zdGFuY2UuCisgICBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICAqX19zbG90c19fKiByZXNlcnZlcyBzcGFjZQorICAgZm9yIHRoZSBkZWNsYXJlZCB2YXJpYWJsZXMgYW5kIHByZXZlbnRzIHRoZSBhdXRvbWF0aWMgY3JlYXRpb24gb2YgKl9fZGljdF9fKgorICAgYW5kICpfX3dlYWtyZWZfXyogZm9yIGVhY2ggaW5zdGFuY2UuCiAKIAogTm90ZXMgb24gdXNpbmcgKl9fc2xvdHNfXyoKQEAgLTE2MzUsNiArMTY3MCw4IEBACiB0aGF0IGNyaXRlcmlvbiwgdGhlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiB3aWxsIGZhaWwgd2l0aCBgYFR5cGVFcnJvcmBgLgogCiAKKy4uIF9wcmVwYXJlOgorCiBQcmVwYXJpbmcgdGhlIGNsYXNzIG5hbWVzcGFjZQogXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl4KIApAQCAtMTcwMiw3ICsxNzM5LDcgQEAKIGxvY2tpbmcvc3luY2hyb25pemF0aW9uLgogCiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXRhY2xhc3MgdGhhdCB1c2VzIGFuIDpjbGFzczpgY29sbGVjdGlvbnMuT3JkZXJlZERpY3RgCi10byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyBtZW1iZXJzIHdlcmUgZGVmaW5lZDo6Cit0byByZW1lbWJlciB0aGUgb3JkZXIgdGhhdCBjbGFzcyB2YXJpYWJsZXMgYXJlIGRlZmluZWQ6OgogCiAgICAgY2xhc3MgT3JkZXJlZENsYXNzKHR5cGUpOgogCkBAIC0xODM0LDYgKzE4NzEsMTUgQEAKICAgIGNvbnNpZGVyZWQgdG8gYmUgZmFsc2UgaW4gYSBCb29sZWFuIGNvbnRleHQuCiAKIAorLi4gbWV0aG9kOjogb2JqZWN0Ll9fbGVuZ3RoX2hpbnRfXyhzZWxmKQorCisgICBDYWxsZWQgdG8gaW1wbGVtZW50IDpmdW5jOmBvcGVyYXRvci5sZW5ndGhfaGludGAuIFNob3VsZCByZXR1cm4gYW4gZXN0aW1hdGVkCisgICBsZW5ndGggZm9yIHRoZSBvYmplY3QgKHdoaWNoIG1heSBiZSBncmVhdGVyIG9yIGxlc3MgdGhhbiB0aGUgYWN0dWFsIGxlbmd0aCkuCisgICBUaGUgbGVuZ3RoIG11c3QgYmUgYW4gaW50ZWdlciBgYD49YGAgMC4gVGhpcyBtZXRob2QgaXMgcHVyZWx5IGFuCisgICBvcHRpbWl6YXRpb24gYW5kIGlzIG5ldmVyIHJlcXVpcmVkIGZvciBjb3JyZWN0bmVzcy4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKIC4uIG5vdGU6OgogCiAgICBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuICBBIGNhbGwgbGlrZSA6OgpAQCAtMTg2Niw2ICsxOTEyLDEyIEBACiAgICAgICBpbmRleGVzIHRvIGFsbG93IHByb3BlciBkZXRlY3Rpb24gb2YgdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UuCiAKIAorLi4gbWV0aG9kOjogb2JqZWN0Ll9fbWlzc2luZ19fKHNlbGYsIGtleSkKKworICAgQ2FsbGVkIGJ5IDpjbGFzczpgZGljdGBcIC5cIDptZXRoOmBfX2dldGl0ZW1fX2AgdG8gaW1wbGVtZW50IGBgc2VsZltrZXldYGAgZm9yIGRpY3Qgc3ViY2xhc3NlcworICAgd2hlbiBrZXkgaXMgbm90IGluIHRoZSBkaWN0aW9uYXJ5LgorCisKIC4uIG1ldGhvZDo6IG9iamVjdC5fX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKQogCiAgICBDYWxsZWQgdG8gaW1wbGVtZW50IGFzc2lnbm1lbnQgdG8gYGBzZWxmW2tleV1gYC4gIFNhbWUgbm90ZSBhcyBmb3IKQEAgLTE4ODgsOCArMTk0MCw3IEBACiAKICAgIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIGFuIGl0ZXJhdG9yIGlzIHJlcXVpcmVkIGZvciBhIGNvbnRhaW5lci4gVGhpcyBtZXRob2QKICAgIHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXQgY2FuIGl0ZXJhdGUgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlCi0gICBjb250YWluZXIuICBGb3IgbWFwcGluZ3MsIGl0IHNob3VsZCBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lciwgYW5kCi0gICBzaG91bGQgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBhcyB0aGUgbWV0aG9kIDptZXRoOmBrZXlzYC4KKyAgIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLgogCiAgICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlIHJlcXVpcmVkIHRvIHJldHVybgogICAgdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yIG9iamVjdHMsIHNlZSA6cmVmOmB0eXBlaXRlcmAuCkBAIC0yMDY1LDkgKzIxMTYsMTcgQEAKIAogLi4gbWV0aG9kOjogb2JqZWN0Ll9faW5kZXhfXyhzZWxmKQogCi0gICBDYWxsZWQgdG8gaW1wbGVtZW50IDpmdW5jOmBvcGVyYXRvci5pbmRleGAuICBBbHNvIGNhbGxlZCB3aGVuZXZlciBQeXRob24gbmVlZHMKLSAgIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluIHNsaWNpbmcsIG9yIGluIHRoZSBidWlsdC1pbiA6ZnVuYzpgYmluYCwKLSAgIDpmdW5jOmBoZXhgIGFuZCA6ZnVuYzpgb2N0YCBmdW5jdGlvbnMpLiBNdXN0IHJldHVybiBhbiBpbnRlZ2VyLgorICAgQ2FsbGVkIHRvIGltcGxlbWVudCA6ZnVuYzpgb3BlcmF0b3IuaW5kZXhgLCBhbmQgd2hlbmV2ZXIgUHl0aG9uIG5lZWRzIHRvCisgICBsb3NzbGVzc2x5IGNvbnZlcnQgdGhlIG51bWVyaWMgb2JqZWN0IHRvIGFuIGludGVnZXIgb2JqZWN0IChzdWNoIGFzIGluCisgICBzbGljaW5nLCBvciBpbiB0aGUgYnVpbHQtaW4gOmZ1bmM6YGJpbmAsIDpmdW5jOmBoZXhgIGFuZCA6ZnVuYzpgb2N0YAorICAgZnVuY3Rpb25zKS4gUHJlc2VuY2Ugb2YgdGhpcyBtZXRob2QgaW5kaWNhdGVzIHRoYXQgdGhlIG51bWVyaWMgb2JqZWN0IGlzCisgICBhbiBpbnRlZ2VyIHR5cGUuICBNdXN0IHJldHVybiBhbiBpbnRlZ2VyLgorCisgICAuLiBub3RlOjoKKworICAgICAgSW4gb3JkZXIgdG8gaGF2ZSBhIGNvaGVyZW50IGludGVnZXIgdHlwZSBjbGFzcywgd2hlbiA6bWV0aDpgX19pbmRleF9fYCBpcworICAgICAgZGVmaW5lZCA6bWV0aDpgX19pbnRfX2Agc2hvdWxkIGFsc28gYmUgZGVmaW5lZCwgYW5kIGJvdGggc2hvdWxkIHJldHVybgorICAgICAgdGhlIHNhbWUgdmFsdWUuCiAKIAogLi4gX2NvbnRleHQtbWFuYWdlcnM6CkBAIC0yMTY3LDkgKzIyMjYsOSBAQAogOm1ldGg6YF9fZ2V0YXR0cmlidXRlX19gIG1ldGhvZCBldmVuIG9mIHRoZSBvYmplY3QncyBtZXRhY2xhc3M6OgogCiAgICA+Pj4gY2xhc3MgTWV0YSh0eXBlKToKLSAgIC4uLiAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXygqYXJncyk6Ci0gICAuLi4gICAgICAgcHJpbnQoIk1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpCi0gICAuLi4gICAgICAgcmV0dXJuIHR5cGUuX19nZXRhdHRyaWJ1dGVfXygqYXJncykKKyAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOgorICAgLi4uICAgICAgICAgcHJpbnQoIk1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpCisgICAuLi4gICAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKQogICAgLi4uCiAgICA+Pj4gY2xhc3MgQyhvYmplY3QsIG1ldGFjbGFzcz1NZXRhKToKICAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6CmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2V4ZWN1dGlvbm1vZGVsLnJzdCBiL0RvYy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwucnN0CmluZGV4IDgyZTM3YTIuLjVmMWVhOTIgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvZXhlY3V0aW9ubW9kZWwucnN0CkBAIC01LDM3ICs1LDI2IEBACiBFeGVjdXRpb24gbW9kZWwKICoqKioqKioqKioqKioqKgogCi0uLiBpbmRleDo6IHNpbmdsZTogZXhlY3V0aW9uIG1vZGVsCi0KLQotLi4gX25hbWluZzoKLQotTmFtaW5nIGFuZCBiaW5kaW5nCi09PT09PT09PT09PT09PT09PT0KLQogLi4gaW5kZXg6OgorICAgc2luZ2xlOiBleGVjdXRpb24gbW9kZWwKICAgIHBhaXI6IGNvZGU7IGJsb2NrCi0gICBzaW5nbGU6IG5hbWVzcGFjZQotICAgc2luZ2xlOiBzY29wZQogCi0uLiBpbmRleDo6Ci0gICBzaW5nbGU6IG5hbWUKLSAgIHBhaXI6IGJpbmRpbmc7IG5hbWUKKy4uIF9wcm9nX3N0cnVjdHVyZToKIAotOmRmbjpgTmFtZXNgIHJlZmVyIHRvIG9iamVjdHMuICBOYW1lcyBhcmUgaW50cm9kdWNlZCBieSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9ucy4KLUVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG8gdGhlIDpkZm46YGJpbmRpbmdgIG9mCi10aGF0IG5hbWUgZXN0YWJsaXNoZWQgaW4gdGhlIGlubmVybW9zdCBmdW5jdGlvbiBibG9jayBjb250YWluaW5nIHRoZSB1c2UuCitTdHJ1Y3R1cmUgb2YgYSBwcm9ncmFtCis9PT09PT09PT09PT09PT09PT09PT09CiAKIC4uIGluZGV4OjogYmxvY2sKIAorQSBQeXRob24gcHJvZ3JhbSBpcyBjb25zdHJ1Y3RlZCBmcm9tIGNvZGUgYmxvY2tzLgogQSA6ZGZuOmBibG9ja2AgaXMgYSBwaWVjZSBvZiBQeXRob24gcHJvZ3JhbSB0ZXh0IHRoYXQgaXMgZXhlY3V0ZWQgYXMgYSB1bml0LgogVGhlIGZvbGxvd2luZyBhcmUgYmxvY2tzOiBhIG1vZHVsZSwgYSBmdW5jdGlvbiBib2R5LCBhbmQgYSBjbGFzcyBkZWZpbml0aW9uLgogRWFjaCBjb21tYW5kIHR5cGVkIGludGVyYWN0aXZlbHkgaXMgYSBibG9jay4gIEEgc2NyaXB0IGZpbGUgKGEgZmlsZSBnaXZlbiBhcwotc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGludGVycHJldGVyIG9yIHNwZWNpZmllZCBvbiB0aGUgaW50ZXJwcmV0ZXIgY29tbWFuZCBsaW5lCi10aGUgZmlyc3QgYXJndW1lbnQpIGlzIGEgY29kZSBibG9jay4gIEEgc2NyaXB0IGNvbW1hbmQgKGEgY29tbWFuZCBzcGVjaWZpZWQgb24KLXRoZSBpbnRlcnByZXRlciBjb21tYW5kIGxpbmUgd2l0aCB0aGUgJyoqLWMqKicgb3B0aW9uKSBpcyBhIGNvZGUgYmxvY2suICBUaGUKLXN0cmluZyBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyA6ZnVuYzpgZXZhbGAgYW5kIDpmdW5jOmBleGVjYAotaXMgYSBjb2RlIGJsb2NrLgorc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGludGVycHJldGVyIG9yIHNwZWNpZmllZCBhcyBhIGNvbW1hbmQgbGluZSBhcmd1bWVudCB0byB0aGUKK2ludGVycHJldGVyKSBpcyBhIGNvZGUgYmxvY2suICBBIHNjcmlwdCBjb21tYW5kIChhIGNvbW1hbmQgc3BlY2lmaWVkIG9uIHRoZQoraW50ZXJwcmV0ZXIgY29tbWFuZCBsaW5lIHdpdGggdGhlICcqKi1jKionIG9wdGlvbikgaXMgYSBjb2RlIGJsb2NrLiAgVGhlIHN0cmluZworYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgOmZ1bmM6YGV2YWxgIGFuZCA6ZnVuYzpgZXhlY2AgaXMgYQorY29kZSBibG9jay4KIAogLi4gaW5kZXg6OiBwYWlyOiBleGVjdXRpb247IGZyYW1lCiAKQEAgLTQzLDQzICszMiwyNSBAQAogYWRtaW5pc3RyYXRpdmUgaW5mb3JtYXRpb24gKHVzZWQgZm9yIGRlYnVnZ2luZykgYW5kIGRldGVybWluZXMgd2hlcmUgYW5kIGhvdwogZXhlY3V0aW9uIGNvbnRpbnVlcyBhZnRlciB0aGUgY29kZSBibG9jaydzIGV4ZWN1dGlvbiBoYXMgY29tcGxldGVkLgogCi0uLiBpbmRleDo6IHNjb3BlCisuLiBfbmFtaW5nOgogCi1BIDpkZm46YHNjb3BlYCBkZWZpbmVzIHRoZSB2aXNpYmlsaXR5IG9mIGEgbmFtZSB3aXRoaW4gYSBibG9jay4gIElmIGEgbG9jYWwKLXZhcmlhYmxlIGlzIGRlZmluZWQgaW4gYSBibG9jaywgaXRzIHNjb3BlIGluY2x1ZGVzIHRoYXQgYmxvY2suICBJZiB0aGUKLWRlZmluaXRpb24gb2NjdXJzIGluIGEgZnVuY3Rpb24gYmxvY2ssIHRoZSBzY29wZSBleHRlbmRzIHRvIGFueSBibG9ja3MgY29udGFpbmVkCi13aXRoaW4gdGhlIGRlZmluaW5nIG9uZSwgdW5sZXNzIGEgY29udGFpbmVkIGJsb2NrIGludHJvZHVjZXMgYSBkaWZmZXJlbnQgYmluZGluZwotZm9yIHRoZSBuYW1lLiAgVGhlIHNjb3BlIG9mIG5hbWVzIGRlZmluZWQgaW4gYSBjbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvIHRoZQotY2xhc3MgYmxvY2s7IGl0IGRvZXMgbm90IGV4dGVuZCB0byB0aGUgY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLSB0aGlzIGluY2x1ZGVzCi1jb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEKLWZ1bmN0aW9uIHNjb3BlLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgd2lsbCBmYWlsOjoKLQotICAgY2xhc3MgQToKLSAgICAgICBhID0gNDIKLSAgICAgICBiID0gbGlzdChhICsgaSBmb3IgaSBpbiByYW5nZSgxMCkpCi0KLS4uIGluZGV4Ojogc2luZ2xlOiBlbnZpcm9ubWVudAotCi1XaGVuIGEgbmFtZSBpcyB1c2VkIGluIGEgY29kZSBibG9jaywgaXQgaXMgcmVzb2x2ZWQgdXNpbmcgdGhlIG5lYXJlc3QgZW5jbG9zaW5nCi1zY29wZS4gIFRoZSBzZXQgb2YgYWxsIHN1Y2ggc2NvcGVzIHZpc2libGUgdG8gYSBjb2RlIGJsb2NrIGlzIGNhbGxlZCB0aGUgYmxvY2sncwotOmRmbjpgZW52aXJvbm1lbnRgLgotCi0uLiBpbmRleDo6IHBhaXI6IGZyZWU7IHZhcmlhYmxlCi0KLUlmIGEgbmFtZSBpcyBib3VuZCBpbiBhIGJsb2NrLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgYmxvY2ssIHVubGVzcwotZGVjbGFyZWQgYXMgOmtleXdvcmQ6YG5vbmxvY2FsYC4gIElmIGEgbmFtZSBpcyBib3VuZCBhdCB0aGUgbW9kdWxlIGxldmVsLCBpdCBpcwotYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlIGNvZGUgYmxvY2sgYXJlIGxvY2FsIGFuZAotZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2sgYnV0IG5vdCBkZWZpbmVkIHRoZXJlLCBpdCBpcyBhCi06ZGZuOmBmcmVlIHZhcmlhYmxlYC4KK05hbWluZyBhbmQgYmluZGluZworPT09PT09PT09PT09PT09PT09CiAKIC4uIGluZGV4OjoKLSAgIHNpbmdsZTogTmFtZUVycm9yIChidWlsdC1pbiBleGNlcHRpb24pCi0gICBzaW5nbGU6IFVuYm91bmRMb2NhbEVycm9yCisgICBzaW5nbGU6IG5hbWVzcGFjZQorICAgc2luZ2xlOiBzY29wZQogCi1XaGVuIGEgbmFtZSBpcyBub3QgZm91bmQgYXQgYWxsLCBhIDpleGM6YE5hbWVFcnJvcmAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIElmIHRoZQotbmFtZSByZWZlcnMgdG8gYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGhhcyBub3QgYmVlbiBib3VuZCwgYQotOmV4YzpgVW5ib3VuZExvY2FsRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuICA6ZXhjOmBVbmJvdW5kTG9jYWxFcnJvcmAgaXMgYQotc3ViY2xhc3Mgb2YgOmV4YzpgTmFtZUVycm9yYC4KKy4uIF9iaW5kX25hbWVzOgorCitCaW5kaW5nIG9mIG5hbWVzCistLS0tLS0tLS0tLS0tLS0tCisKKy4uIGluZGV4OjoKKyAgIHNpbmdsZTogbmFtZQorICAgcGFpcjogYmluZGluZzsgbmFtZQorCis6ZGZuOmBOYW1lc2AgcmVmZXIgdG8gb2JqZWN0cy4gIE5hbWVzIGFyZSBpbnRyb2R1Y2VkIGJ5IG5hbWUgYmluZGluZyBvcGVyYXRpb25zLgogCiAuLiBpbmRleDo6IHN0YXRlbWVudDogZnJvbQogCkBAIC05OSw2ICs3MCw0NiBAQAogRWFjaCBhc3NpZ25tZW50IG9yIGltcG9ydCBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrIGRlZmluZWQgYnkgYSBjbGFzcyBvcgogZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBhdCB0aGUgbW9kdWxlIGxldmVsICh0aGUgdG9wLWxldmVsIGNvZGUgYmxvY2spLgogCisuLiBpbmRleDo6IHBhaXI6IGZyZWU7IHZhcmlhYmxlCisKK0lmIGEgbmFtZSBpcyBib3VuZCBpbiBhIGJsb2NrLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgYmxvY2ssIHVubGVzcworZGVjbGFyZWQgYXMgOmtleXdvcmQ6YG5vbmxvY2FsYCBvciA6a2V5d29yZDpgZ2xvYmFsYC4gIElmIGEgbmFtZSBpcyBib3VuZCBhdAordGhlIG1vZHVsZSBsZXZlbCwgaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlIGNvZGUKK2Jsb2NrIGFyZSBsb2NhbCBhbmQgZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2sgYnV0IG5vdAorZGVmaW5lZCB0aGVyZSwgaXQgaXMgYSA6ZGZuOmBmcmVlIHZhcmlhYmxlYC4KKworRWFjaCBvY2N1cnJlbmNlIG9mIGEgbmFtZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IHJlZmVycyB0byB0aGUgOmRmbjpgYmluZGluZ2Agb2YKK3RoYXQgbmFtZSBlc3RhYmxpc2hlZCBieSB0aGUgZm9sbG93aW5nIG5hbWUgcmVzb2x1dGlvbiBydWxlcy4KKworLi4gX3Jlc29sdmVfbmFtZXM6CisKK1Jlc29sdXRpb24gb2YgbmFtZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gaW5kZXg6OiBzY29wZQorCitBIDpkZm46YHNjb3BlYCBkZWZpbmVzIHRoZSB2aXNpYmlsaXR5IG9mIGEgbmFtZSB3aXRoaW4gYSBibG9jay4gIElmIGEgbG9jYWwKK3ZhcmlhYmxlIGlzIGRlZmluZWQgaW4gYSBibG9jaywgaXRzIHNjb3BlIGluY2x1ZGVzIHRoYXQgYmxvY2suICBJZiB0aGUKK2RlZmluaXRpb24gb2NjdXJzIGluIGEgZnVuY3Rpb24gYmxvY2ssIHRoZSBzY29wZSBleHRlbmRzIHRvIGFueSBibG9ja3MgY29udGFpbmVkCit3aXRoaW4gdGhlIGRlZmluaW5nIG9uZSwgdW5sZXNzIGEgY29udGFpbmVkIGJsb2NrIGludHJvZHVjZXMgYSBkaWZmZXJlbnQgYmluZGluZworZm9yIHRoZSBuYW1lLgorCisuLiBpbmRleDo6IHNpbmdsZTogZW52aXJvbm1lbnQKKworV2hlbiBhIG5hbWUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2ssIGl0IGlzIHJlc29sdmVkIHVzaW5nIHRoZSBuZWFyZXN0IGVuY2xvc2luZworc2NvcGUuICBUaGUgc2V0IG9mIGFsbCBzdWNoIHNjb3BlcyB2aXNpYmxlIHRvIGEgY29kZSBibG9jayBpcyBjYWxsZWQgdGhlIGJsb2NrJ3MKKzpkZm46YGVudmlyb25tZW50YC4KKworLi4gaW5kZXg6OgorICAgc2luZ2xlOiBOYW1lRXJyb3IgKGJ1aWx0LWluIGV4Y2VwdGlvbikKKyAgIHNpbmdsZTogVW5ib3VuZExvY2FsRXJyb3IKKworV2hlbiBhIG5hbWUgaXMgbm90IGZvdW5kIGF0IGFsbCwgYSA6ZXhjOmBOYW1lRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCitJZiB0aGUgY3VycmVudCBzY29wZSBpcyBhIGZ1bmN0aW9uIHNjb3BlLCBhbmQgdGhlIG5hbWUgcmVmZXJzIHRvIGEgbG9jYWwKK3ZhcmlhYmxlIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBib3VuZCB0byBhIHZhbHVlIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgbmFtZSBpcwordXNlZCwgYW4gOmV4YzpgVW5ib3VuZExvY2FsRXJyb3JgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCis6ZXhjOmBVbmJvdW5kTG9jYWxFcnJvcmAgaXMgYSBzdWJjbGFzcyBvZiA6ZXhjOmBOYW1lRXJyb3JgLgorCiBJZiBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24gb2NjdXJzIGFueXdoZXJlIHdpdGhpbiBhIGNvZGUgYmxvY2ssIGFsbCB1c2VzIG9mIHRoZQogbmFtZSB3aXRoaW4gdGhlIGJsb2NrIGFyZSB0cmVhdGVkIGFzIHJlZmVyZW5jZXMgdG8gdGhlIGN1cnJlbnQgYmxvY2suICBUaGlzIGNhbgogbGVhZCB0byBlcnJvcnMgd2hlbiBhIG5hbWUgaXMgdXNlZCB3aXRoaW4gYSBibG9jayBiZWZvcmUgaXQgaXMgYm91bmQuICBUaGlzIHJ1bGUKQEAgLTExMSwxMCArMTIyLDQ1IEBACiBuYW1lc3BhY2UuICBOYW1lcyBhcmUgcmVzb2x2ZWQgaW4gdGhlIHRvcC1sZXZlbCBuYW1lc3BhY2UgYnkgc2VhcmNoaW5nIHRoZQogZ2xvYmFsIG5hbWVzcGFjZSwgaS5lLiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGUgY29udGFpbmluZyB0aGUgY29kZSBibG9jaywKIGFuZCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlLCB0aGUgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGUgOm1vZDpgYnVpbHRpbnNgLiAgVGhlCi1nbG9iYWwgbmFtZXNwYWNlIGlzIHNlYXJjaGVkIGZpcnN0LiAgSWYgdGhlIG5hbWUgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgYnVpbHRpbnMKLW5hbWVzcGFjZSBpcyBzZWFyY2hlZC4gIFRoZSBnbG9iYWwgc3RhdGVtZW50IG11c3QgcHJlY2VkZSBhbGwgdXNlcyBvZiB0aGUgbmFtZS4KK2dsb2JhbCBuYW1lc3BhY2UgaXMgc2VhcmNoZWQgZmlyc3QuICBJZiB0aGUgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZQorYnVpbHRpbnMgbmFtZXNwYWNlIGlzIHNlYXJjaGVkLiAgVGhlIDprZXl3b3JkOmBnbG9iYWxgIHN0YXRlbWVudCBtdXN0IHByZWNlZGUKK2FsbCB1c2VzIG9mIHRoZSBuYW1lLgogCi0uLiBYWFggZG9jdW1lbnQgIm5vbmxvY2FsIiBzZW1hbnRpY3MgaGVyZQorVGhlIDprZXl3b3JkOmBnbG9iYWxgIHN0YXRlbWVudCBoYXMgdGhlIHNhbWUgc2NvcGUgYXMgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uCitpbiB0aGUgc2FtZSBibG9jay4gIElmIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZSBmb3IgYSBmcmVlIHZhcmlhYmxlIGNvbnRhaW5zCithIGdsb2JhbCBzdGF0ZW1lbnQsIHRoZSBmcmVlIHZhcmlhYmxlIGlzIHRyZWF0ZWQgYXMgYSBnbG9iYWwuCisKKy4uIFhYWCBzYXkgbW9yZSBhYm91dCAibm9ubG9jYWwiIHNlbWFudGljcyBoZXJlCisKK1RoZSA6a2V5d29yZDpgbm9ubG9jYWxgIHN0YXRlbWVudCBjYXVzZXMgY29ycmVzcG9uZGluZyBuYW1lcyB0byByZWZlcgordG8gcHJldmlvdXNseSBib3VuZCB2YXJpYWJsZXMgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGZ1bmN0aW9uIHNjb3BlLgorOmV4YzpgU3ludGF4RXJyb3JgIGlzIHJhaXNlZCBhdCBjb21waWxlIHRpbWUgaWYgdGhlIGdpdmVuIG5hbWUgZG9lcyBub3QKK2V4aXN0IGluIGFueSBlbmNsb3NpbmcgZnVuY3Rpb24gc2NvcGUuCisKKy4uIGluZGV4OjogbW9kdWxlOiBfX21haW5fXworCitUaGUgbmFtZXNwYWNlIGZvciBhIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMKK2ltcG9ydGVkLiAgVGhlIG1haW4gbW9kdWxlIGZvciBhIHNjcmlwdCBpcyBhbHdheXMgY2FsbGVkIDptb2Q6YF9fbWFpbl9fYC4KKworQ2xhc3MgZGVmaW5pdGlvbiBibG9ja3MgYW5kIGFyZ3VtZW50cyB0byA6ZnVuYzpgZXhlY2AgYW5kIDpmdW5jOmBldmFsYCBhcmUKK3NwZWNpYWwgaW4gdGhlIGNvbnRleHQgb2YgbmFtZSByZXNvbHV0aW9uLgorQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50IHRoYXQgbWF5IHVzZSBhbmQgZGVmaW5lIG5hbWVzLgorVGhlc2UgcmVmZXJlbmNlcyBmb2xsb3cgdGhlIG5vcm1hbCBydWxlcyBmb3IgbmFtZSByZXNvbHV0aW9uIHdpdGggYW4gZXhjZXB0aW9uCit0aGF0IHVuYm91bmQgbG9jYWwgdmFyaWFibGVzIGFyZSBsb29rZWQgdXAgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuCitUaGUgbmFtZXNwYWNlIG9mIHRoZSBjbGFzcyBkZWZpbml0aW9uIGJlY29tZXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IG9mCit0aGUgY2xhc3MuIFRoZSBzY29wZSBvZiBuYW1lcyBkZWZpbmVkIGluIGEgY2xhc3MgYmxvY2sgaXMgbGltaXRlZCB0byB0aGUKK2NsYXNzIGJsb2NrOyBpdCBkb2VzIG5vdCBleHRlbmQgdG8gdGhlIGNvZGUgYmxvY2tzIG9mIG1ldGhvZHMgLS0gdGhpcyBpbmNsdWRlcworY29tcHJlaGVuc2lvbnMgYW5kIGdlbmVyYXRvciBleHByZXNzaW9ucyBzaW5jZSB0aGV5IGFyZSBpbXBsZW1lbnRlZCB1c2luZyBhCitmdW5jdGlvbiBzY29wZS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgZm9sbG93aW5nIHdpbGwgZmFpbDo6CisKKyAgIGNsYXNzIEE6CisgICAgICAgYSA9IDQyCisgICAgICAgYiA9IGxpc3QoYSArIGkgZm9yIGkgaW4gcmFuZ2UoMTApKQorCisuLiBfcmVzdHJpY3RfZXhlYzoKKworQnVpbHRpbnMgYW5kIHJlc3RyaWN0ZWQgZXhlY3V0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLi4gaW5kZXg6OiBwYWlyOiByZXN0cmljdGVkOyBleGVjdXRpb24KIApAQCAtMTM0LDM2ICsxODAsMjYgQEAKICAgIDprZXl3b3JkOmBpbXBvcnRgIHRoZSA6bW9kOmBidWlsdGluc2AgbW9kdWxlIGFuZCBtb2RpZnkgaXRzCiAgICBhdHRyaWJ1dGVzIGFwcHJvcHJpYXRlbHkuCiAKLS4uIGluZGV4OjogbW9kdWxlOiBfX21haW5fXwotCi1UaGUgbmFtZXNwYWNlIGZvciBhIG1vZHVsZSBpcyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdGhlIGZpcnN0IHRpbWUgYSBtb2R1bGUgaXMKLWltcG9ydGVkLiAgVGhlIG1haW4gbW9kdWxlIGZvciBhIHNjcmlwdCBpcyBhbHdheXMgY2FsbGVkIDptb2Q6YF9fbWFpbl9fYC4KLQotVGhlIDprZXl3b3JkOmBnbG9iYWxgIHN0YXRlbWVudCBoYXMgdGhlIHNhbWUgc2NvcGUgYXMgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uCi1pbiB0aGUgc2FtZSBibG9jay4gIElmIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZSBmb3IgYSBmcmVlIHZhcmlhYmxlIGNvbnRhaW5zCi1hIGdsb2JhbCBzdGF0ZW1lbnQsIHRoZSBmcmVlIHZhcmlhYmxlIGlzIHRyZWF0ZWQgYXMgYSBnbG9iYWwuCi0KLUEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudCB0aGF0IG1heSB1c2UgYW5kIGRlZmluZSBuYW1lcy4KLVRoZXNlIHJlZmVyZW5jZXMgZm9sbG93IHRoZSBub3JtYWwgcnVsZXMgZm9yIG5hbWUgcmVzb2x1dGlvbi4gIFRoZSBuYW1lc3BhY2Ugb2YKLXRoZSBjbGFzcyBkZWZpbml0aW9uIGJlY29tZXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IG9mIHRoZSBjbGFzcy4gIE5hbWVzCi1kZWZpbmVkIGF0IHRoZSBjbGFzcyBzY29wZSBhcmUgbm90IHZpc2libGUgaW4gbWV0aG9kcy4KLQotCiAuLiBfZHluYW1pYy1mZWF0dXJlczoKIAogSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorTmFtZSByZXNvbHV0aW9uIG9mIGZyZWUgdmFyaWFibGVzIG9jY3VycyBhdCBydW50aW1lLCBub3QgYXQgY29tcGlsZSB0aW1lLgorVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSB3aWxsIHByaW50IDQyOjoKKworICAgaSA9IDEwCisgICBkZWYgZigpOgorICAgICAgIHByaW50KGkpCisgICBpID0gNDIKKyAgIGYoKQorCiBUaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVyZSBQeXRob24gc3RhdGVtZW50cyBhcmUgaWxsZWdhbCB3aGVuIHVzZWQgaW4KIGNvbmp1bmN0aW9uIHdpdGggbmVzdGVkIHNjb3BlcyB0aGF0IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMuCiAKIElmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBpbiBhbiBlbmNsb3Npbmcgc2NvcGUsIGl0IGlzIGlsbGVnYWwgdG8gZGVsZXRlIHRoZQogbmFtZS4gIEFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXQgY29tcGlsZSB0aW1lLgogCi1JZiB0aGUgd2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSBgYGltcG9ydCAqYGAgLS0tIGlzIHVzZWQgaW4gYSBmdW5jdGlvbiBhbmQKLXRoZSBmdW5jdGlvbiBjb250YWlucyBvciBpcyBhIG5lc3RlZCBibG9jayB3aXRoIGZyZWUgdmFyaWFibGVzLCB0aGUgY29tcGlsZXIKLXdpbGwgcmFpc2UgYSA6ZXhjOmBTeW50YXhFcnJvcmAuCi0KIC4uIFhYWCBmcm9tICogYWxzbyBpbnZhbGlkIHdpdGggcmVsYXRpdmUgaW1wb3J0cyAoYXQgbGVhc3QgY3VycmVudGx5KQogCiBUaGUgOmZ1bmM6YGV2YWxgIGFuZCA6ZnVuYzpgZXhlY2AgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbApAQCAtMjM0LDQgKzI3MCwzIEBACiAKIC4uIFsjXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieSB0aGVzZSBvcGVyYXRpb25zCiAgICAgICAgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzIGNvbXBpbGVkLgotCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2V4cHJlc3Npb25zLnJzdCBiL0RvYy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMucnN0CmluZGV4IDA2YmFiYTAuLmI2YjJiMDAgMTAwNjQ0Ci0tLSBhL0RvYy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMucnN0CkBAIC0yOSw3ICsyOSw3IEBACiAKIFdoZW4gYSBkZXNjcmlwdGlvbiBvZiBhbiBhcml0aG1ldGljIG9wZXJhdG9yIGJlbG93IHVzZXMgdGhlIHBocmFzZSAidGhlIG51bWVyaWMKIGFyZ3VtZW50cyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUsIiB0aGlzIG1lYW5zIHRoYXQgdGhlIG9wZXJhdG9yCi1pbXBsZW1lbnRhdGlvbiBmb3IgYnVpbHQtaW4gdHlwZXMgd29ya3MgdGhhdCB3YXk6CitpbXBsZW1lbnRhdGlvbiBmb3IgYnVpbHQtaW4gdHlwZXMgd29ya3MgYXMgZm9sbG93czoKIAogKiBJZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBjb21wbGV4IG51bWJlciwgdGhlIG90aGVyIGlzIGNvbnZlcnRlZCB0byBjb21wbGV4OwogCkBAIC0zOCw4ICszOCw5IEBACiAKICogb3RoZXJ3aXNlLCBib3RoIG11c3QgYmUgaW50ZWdlcnMgYW5kIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LgogCi1Tb21lIGFkZGl0aW9uYWwgcnVsZXMgYXBwbHkgZm9yIGNlcnRhaW4gb3BlcmF0b3JzIChlLmcuLCBhIHN0cmluZyBsZWZ0IGFyZ3VtZW50Ci10byB0aGUgJyUnIG9wZXJhdG9yKS4gIEV4dGVuc2lvbnMgbXVzdCBkZWZpbmUgdGhlaXIgb3duIGNvbnZlcnNpb24gYmVoYXZpb3IuCitTb21lIGFkZGl0aW9uYWwgcnVsZXMgYXBwbHkgZm9yIGNlcnRhaW4gb3BlcmF0b3JzIChlLmcuLCBhIHN0cmluZyBhcyBhIGxlZnQKK2FyZ3VtZW50IHRvIHRoZSAnJScgb3BlcmF0b3IpLiAgRXh0ZW5zaW9ucyBtdXN0IGRlZmluZSB0aGVpciBvd24gY29udmVyc2lvbgorYmVoYXZpb3IuCiAKIAogLi4gX2F0b21zOgpAQCAtMTgzLDcgKzE4NCw3IEBACiBlYWNoIHRpbWUgdGhlIGlubmVybW9zdCBibG9jayBpcyByZWFjaGVkLgogCiBOb3RlIHRoYXQgdGhlIGNvbXByZWhlbnNpb24gaXMgZXhlY3V0ZWQgaW4gYSBzZXBhcmF0ZSBzY29wZSwgc28gbmFtZXMgYXNzaWduZWQKLXRvIGluIHRoZSB0YXJnZXQgbGlzdCBkb24ndCAibGVhayIgaW4gdGhlIGVuY2xvc2luZyBzY29wZS4KK3RvIGluIHRoZSB0YXJnZXQgbGlzdCBkb24ndCAibGVhayIgaW50byB0aGUgZW5jbG9zaW5nIHNjb3BlLgogCiAKIC4uIF9saXN0czoKQEAgLTI5Myw3ICsyOTQsNyBAQAogYnJhY2tldHMgb3IgY3VybHkgYnJhY2VzLgogCiBWYXJpYWJsZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdG9yIGV4cHJlc3Npb24gYXJlIGV2YWx1YXRlZCBsYXppbHkgd2hlbiB0aGUKLTptZXRoOmB+Z2VuZXJhdG9yLl9fbmV4dF9fYCBtZXRob2QgaXMgY2FsbGVkIGZvciBnZW5lcmF0b3Igb2JqZWN0IChpbiB0aGUgc2FtZQorOm1ldGg6YH5nZW5lcmF0b3IuX19uZXh0X19gIG1ldGhvZCBpcyBjYWxsZWQgZm9yIHRoZSBnZW5lcmF0b3Igb2JqZWN0IChpbiB0aGUgc2FtZQogZmFzaGlvbiBhcyBub3JtYWwgZ2VuZXJhdG9ycykuICBIb3dldmVyLCB0aGUgbGVmdG1vc3QgOmtleXdvcmQ6YGZvcmAgY2xhdXNlIGlzCiBpbW1lZGlhdGVseSBldmFsdWF0ZWQsIHNvIHRoYXQgYW4gZXJyb3IgcHJvZHVjZWQgYnkgaXQgY2FuIGJlIHNlZW4gYmVmb3JlIGFueQogb3RoZXIgcG9zc2libGUgZXJyb3IgaW4gdGhlIGNvZGUgdGhhdCBoYW5kbGVzIHRoZSBnZW5lcmF0b3IgZXhwcmVzc2lvbi4KQEAgLTMwMiw3ICszMDMsNyBAQAogcmFuZ2UoMTApIGZvciB5IGluIGJhcih4KSlgYC4KIAogVGhlIHBhcmVudGhlc2VzIGNhbiBiZSBvbWl0dGVkIG9uIGNhbGxzIHdpdGggb25seSBvbmUgYXJndW1lbnQuICBTZWUgc2VjdGlvbgotOnJlZjpgY2FsbHNgIGZvciB0aGUgZGV0YWlsLgorOnJlZjpgY2FsbHNgIGZvciBkZXRhaWxzLgogCiAKIC4uIF95aWVsZGV4cHI6CkBAIC0zMjQsMTUgKzMyNSwxNiBAQAogZXhwcmVzc2lvbiBpbiBhIGZ1bmN0aW9uJ3MgYm9keSBjYXVzZXMgdGhhdCBmdW5jdGlvbiB0byBiZSBhIGdlbmVyYXRvci4KIAogV2hlbiBhIGdlbmVyYXRvciBmdW5jdGlvbiBpcyBjYWxsZWQsIGl0IHJldHVybnMgYW4gaXRlcmF0b3Iga25vd24gYXMgYQotZ2VuZXJhdG9yLiAgVGhhdCBnZW5lcmF0b3IgdGhlbiBjb250cm9scyB0aGUgZXhlY3V0aW9uIG9mIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLgorZ2VuZXJhdG9yLiAgVGhhdCBnZW5lcmF0b3IgdGhlbiBjb250cm9scyB0aGUgZXhlY3V0aW9uIG9mIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24uCiBUaGUgZXhlY3V0aW9uIHN0YXJ0cyB3aGVuIG9uZSBvZiB0aGUgZ2VuZXJhdG9yJ3MgbWV0aG9kcyBpcyBjYWxsZWQuICBBdCB0aGF0CiB0aW1lLCB0aGUgZXhlY3V0aW9uIHByb2NlZWRzIHRvIHRoZSBmaXJzdCB5aWVsZCBleHByZXNzaW9uLCB3aGVyZSBpdCBpcwotc3VzcGVuZGVkIGFnYWluLCByZXR1cm5pbmcgdGhlIHZhbHVlIG9mIDp0b2tlbjpgZXhwcmVzc2lvbl9saXN0YCB0byBnZW5lcmF0b3Incworc3VzcGVuZGVkIGFnYWluLCByZXR1cm5pbmcgdGhlIHZhbHVlIG9mIDp0b2tlbjpgZXhwcmVzc2lvbl9saXN0YCB0byB0aGUgZ2VuZXJhdG9yJ3MKIGNhbGxlci4gIEJ5IHN1c3BlbmRlZCwgd2UgbWVhbiB0aGF0IGFsbCBsb2NhbCBzdGF0ZSBpcyByZXRhaW5lZCwgaW5jbHVkaW5nIHRoZQotY3VycmVudCBiaW5kaW5ncyBvZiBsb2NhbCB2YXJpYWJsZXMsIHRoZSBpbnN0cnVjdGlvbiBwb2ludGVyLCBhbmQgdGhlIGludGVybmFsCi1ldmFsdWF0aW9uIHN0YWNrLiAgV2hlbiB0aGUgZXhlY3V0aW9uIGlzIHJlc3VtZWQgYnkgY2FsbGluZyBvbmUgb2YgdGhlCitjdXJyZW50IGJpbmRpbmdzIG9mIGxvY2FsIHZhcmlhYmxlcywgdGhlIGluc3RydWN0aW9uIHBvaW50ZXIsIHRoZSBpbnRlcm5hbAorZXZhbHVhdGlvbiBzdGFjaywgYW5kIHRoZSBzdGF0ZSBvZiBhbnkgZXhjZXB0aW9uIGhhbmRsaW5nLiAgV2hlbiB0aGUgZXhlY3V0aW9uCitpcyByZXN1bWVkIGJ5IGNhbGxpbmcgb25lIG9mIHRoZQogZ2VuZXJhdG9yJ3MgbWV0aG9kcywgdGhlIGZ1bmN0aW9uIGNhbiBwcm9jZWVkIGV4YWN0bHkgYXMgaWYgdGhlIHlpZWxkIGV4cHJlc3Npb24KLXdhcyBqdXN0IGFub3RoZXIgZXh0ZXJuYWwgY2FsbC4gIFRoZSB2YWx1ZSBvZiB0aGUgeWllbGQgZXhwcmVzc2lvbiBhZnRlcgord2VyZSBqdXN0IGFub3RoZXIgZXh0ZXJuYWwgY2FsbC4gIFRoZSB2YWx1ZSBvZiB0aGUgeWllbGQgZXhwcmVzc2lvbiBhZnRlcgogcmVzdW1pbmcgZGVwZW5kcyBvbiB0aGUgbWV0aG9kIHdoaWNoIHJlc3VtZWQgdGhlIGV4ZWN1dGlvbi4gIElmCiA6bWV0aDpgfmdlbmVyYXRvci5fX25leHRfX2AgaXMgdXNlZCAodHlwaWNhbGx5IHZpYSBlaXRoZXIgYSA6a2V5d29yZDpgZm9yYCBvcgogdGhlIDpmdW5jOmBuZXh0YCBidWlsdGluKSB0aGVuIHRoZSByZXN1bHQgaXMgOmNvbnN0OmBOb25lYC4gIE90aGVyd2lzZSwgaWYKQEAgLTM0NCwxMSArMzQ2LDExIEBACiBBbGwgb2YgdGhpcyBtYWtlcyBnZW5lcmF0b3IgZnVuY3Rpb25zIHF1aXRlIHNpbWlsYXIgdG8gY29yb3V0aW5lczsgdGhleSB5aWVsZAogbXVsdGlwbGUgdGltZXMsIHRoZXkgaGF2ZSBtb3JlIHRoYW4gb25lIGVudHJ5IHBvaW50IGFuZCB0aGVpciBleGVjdXRpb24gY2FuIGJlCiBzdXNwZW5kZWQuICBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQgYSBnZW5lcmF0b3IgZnVuY3Rpb24gY2Fubm90IGNvbnRyb2wKLXdoZXJlIHNob3VsZCB0aGUgZXhlY3V0aW9uIGNvbnRpbnVlIGFmdGVyIGl0IHlpZWxkczsgdGhlIGNvbnRyb2wgaXMgYWx3YXlzCit3aGVyZSB0aGUgZXhlY3V0aW9uIHNob3VsZCBjb250aW51ZSBhZnRlciBpdCB5aWVsZHM7IHRoZSBjb250cm9sIGlzIGFsd2F5cwogdHJhbnNmZXJyZWQgdG8gdGhlIGdlbmVyYXRvcidzIGNhbGxlci4KIAoteWllbGQgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQgaW4gdGhlIDprZXl3b3JkOmB0cnlgIGNsYXVzZSBvZiBhIDprZXl3b3JkOmB0cnlgCi0uLi4gIDprZXl3b3JkOmBmaW5hbGx5YCBjb25zdHJ1Y3QuICBJZiB0aGUgZ2VuZXJhdG9yIGlzIG5vdCByZXN1bWVkIGJlZm9yZSBpdCBpcworWWllbGQgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQgYW55d2hlcmUgaW4gYSA6a2V5d29yZDpgdHJ5YCBjb25zdHJ1Y3QuICBJZiB0aGUKK2dlbmVyYXRvciBpcyBub3QgcmVzdW1lZCBiZWZvcmUgaXQgaXMKIGZpbmFsaXplZCAoYnkgcmVhY2hpbmcgYSB6ZXJvIHJlZmVyZW5jZSBjb3VudCBvciBieSBiZWluZyBnYXJiYWdlIGNvbGxlY3RlZCksCiB0aGUgZ2VuZXJhdG9yLWl0ZXJhdG9yJ3MgOm1ldGg6YH5nZW5lcmF0b3IuY2xvc2VgIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCwKIGFsbG93aW5nIGFueSBwZW5kaW5nIDprZXl3b3JkOmBmaW5hbGx5YCBjbGF1c2VzIHRvIGV4ZWN1dGUuCkBAIC0zNjksNyArMzcxLDcgQEAKIChieSByZXR1cm5pbmcgYSB2YWx1ZSBmcm9tIHRoZSBzdWItZ2VuZXJhdG9yKS4KIAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjMKLSAgICAgIEFkZGVkIGBgeWllbGQgZnJvbSA8ZXhwcj5gYCB0byBkZWxlZ2F0ZSBjb250cm9sIGZsb3cgdG8gYSBzdWJpdGVyYXRvcgorICAgICAgQWRkZWQgYGB5aWVsZCBmcm9tIDxleHByPmBgIHRvIGRlbGVnYXRlIGNvbnRyb2wgZmxvdyB0byBhIHN1Yml0ZXJhdG9yLgogCiBUaGUgcGFyZW50aGVzZXMgbWF5IGJlIG9taXR0ZWQgd2hlbiB0aGUgeWllbGQgZXhwcmVzc2lvbiBpcyB0aGUgc29sZSBleHByZXNzaW9uCiBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50LgpAQCAtMzk5LDcgKzQwMSw2IEBACiBpcyBhbHJlYWR5IGV4ZWN1dGluZyByYWlzZXMgYSA6ZXhjOmBWYWx1ZUVycm9yYCBleGNlcHRpb24uCiAKIC4uIGluZGV4OjogZXhjZXB0aW9uOiBTdG9wSXRlcmF0aW9uCi0uLiBjbGFzczo6IGdlbmVyYXRvcgogCiAKIC4uIG1ldGhvZDo6IGdlbmVyYXRvci5fX25leHRfXygpCkBAIC00MDksNyArNDEwLDcgQEAKICAgIDptZXRoOmB+Z2VuZXJhdG9yLl9fbmV4dF9fYCBtZXRob2QsIHRoZSBjdXJyZW50IHlpZWxkIGV4cHJlc3Npb24gYWx3YXlzCiAgICBldmFsdWF0ZXMgdG8gOmNvbnN0OmBOb25lYC4gIFRoZSBleGVjdXRpb24gdGhlbiBjb250aW51ZXMgdG8gdGhlIG5leHQgeWllbGQKICAgIGV4cHJlc3Npb24sIHdoZXJlIHRoZSBnZW5lcmF0b3IgaXMgc3VzcGVuZGVkIGFnYWluLCBhbmQgdGhlIHZhbHVlIG9mIHRoZQotICAgOnRva2VuOmBleHByZXNzaW9uX2xpc3RgIGlzIHJldHVybmVkIHRvIDptZXRoOmBuZXh0YCdzIGNhbGxlci4gIElmIHRoZQorICAgOnRva2VuOmBleHByZXNzaW9uX2xpc3RgIGlzIHJldHVybmVkIHRvIDptZXRoOmBfX25leHRfX2AncyBjYWxsZXIuICBJZiB0aGUKICAgIGdlbmVyYXRvciBleGl0cyB3aXRob3V0IHlpZWxkaW5nIGFub3RoZXIgdmFsdWUsIGEgOmV4YzpgU3RvcEl0ZXJhdGlvbmAKICAgIGV4Y2VwdGlvbiBpcyByYWlzZWQuCiAKQEAgLTQzMCw3ICs0MzEsNyBAQAogCiAuLiBtZXRob2Q6OiBnZW5lcmF0b3IudGhyb3codHlwZVssIHZhbHVlWywgdHJhY2ViYWNrXV0pCiAKLSAgIFJhaXNlcyBhbiBleGNlcHRpb24gb2YgdHlwZSBgYHR5cGVgYCBhdCB0aGUgcG9pbnQgd2hlcmUgZ2VuZXJhdG9yIHdhcyBwYXVzZWQsCisgICBSYWlzZXMgYW4gZXhjZXB0aW9uIG9mIHR5cGUgYGB0eXBlYGAgYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBnZW5lcmF0b3Igd2FzIHBhdXNlZCwKICAgIGFuZCByZXR1cm5zIHRoZSBuZXh0IHZhbHVlIHlpZWxkZWQgYnkgdGhlIGdlbmVyYXRvciBmdW5jdGlvbi4gIElmIHRoZSBnZW5lcmF0b3IKICAgIGV4aXRzIHdpdGhvdXQgeWllbGRpbmcgYW5vdGhlciB2YWx1ZSwgYSA6ZXhjOmBTdG9wSXRlcmF0aW9uYCBleGNlcHRpb24gaXMKICAgIHJhaXNlZC4gIElmIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gZG9lcyBub3QgY2F0Y2ggdGhlIHBhc3NlZC1pbiBleGNlcHRpb24sIG9yCkBAIC00NDksOCArNDUwLDYgQEAKICAgIG90aGVyIGV4Y2VwdGlvbiwgaXQgaXMgcHJvcGFnYXRlZCB0byB0aGUgY2FsbGVyLiAgOm1ldGg6YGNsb3NlYCBkb2VzIG5vdGhpbmcKICAgIGlmIHRoZSBnZW5lcmF0b3IgaGFzIGFscmVhZHkgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24gb3Igbm9ybWFsIGV4aXQuCiAKLS4uIGNsYXNzOjogLgotCiAuLiBpbmRleDo6IHNpbmdsZTogeWllbGQ7IGV4YW1wbGVzCiAKIEV4YW1wbGVzCkBAIC01MjAsMTEgKzUxOSwxMSBAQAogCiBUaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGFuIG9iamVjdCBvZiBhIHR5cGUgdGhhdCBzdXBwb3J0cyBhdHRyaWJ1dGUKIHJlZmVyZW5jZXMsIHdoaWNoIG1vc3Qgb2JqZWN0cyBkby4gIFRoaXMgb2JqZWN0IGlzIHRoZW4gYXNrZWQgdG8gcHJvZHVjZSB0aGUKLWF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzIHRoZSBpZGVudGlmaWVyICh3aGljaCBjYW4gYmUgY3VzdG9taXplZCBieSBvdmVycmlkaW5nCi10aGUgOm1ldGg6YF9fZ2V0YXR0cl9fYCBtZXRob2QpLiAgSWYgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IGF2YWlsYWJsZSwgdGhlCi1leGNlcHRpb24gOmV4YzpgQXR0cmlidXRlRXJyb3JgIGlzIHJhaXNlZC4gIE90aGVyd2lzZSwgdGhlIHR5cGUgYW5kIHZhbHVlIG9mIHRoZQotb2JqZWN0IHByb2R1Y2VkIGlzIGRldGVybWluZWQgYnkgdGhlIG9iamVjdC4gIE11bHRpcGxlIGV2YWx1YXRpb25zIG9mIHRoZSBzYW1lCi1hdHRyaWJ1dGUgcmVmZXJlbmNlIG1heSB5aWVsZCBkaWZmZXJlbnQgb2JqZWN0cy4KK2F0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzIHRoZSBpZGVudGlmaWVyLiAgVGhpcyBwcm9kdWN0aW9uIGNhbiBiZSBjdXN0b21pemVkIGJ5CitvdmVycmlkaW5nIHRoZSA6bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZC4gIElmIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBhdmFpbGFibGUsCit0aGUgZXhjZXB0aW9uIDpleGM6YEF0dHJpYnV0ZUVycm9yYCBpcyByYWlzZWQuICBPdGhlcndpc2UsIHRoZSB0eXBlIGFuZCB2YWx1ZSBvZgordGhlIG9iamVjdCBwcm9kdWNlZCBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBvYmplY3QuICBNdWx0aXBsZSBldmFsdWF0aW9ucyBvZiB0aGUKK3NhbWUgYXR0cmlidXRlIHJlZmVyZW5jZSBtYXkgeWllbGQgZGlmZmVyZW50IG9iamVjdHMuCiAKIAogLi4gX3N1YnNjcmlwdGlvbnM6CkBAIC01NDksOSArNTQ4LDkgQEAKIC4uIHByb2R1Y3Rpb25saXN0OjoKICAgIHN1YnNjcmlwdGlvbjogYHByaW1hcnlgICJbIiBgZXhwcmVzc2lvbl9saXN0YCAiXSIKIAotVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyBzdWJzY3JpcHRpb24sIGUuZy4gYSBsaXN0Ci1vciBkaWN0aW9uYXJ5LiAgVXNlci1kZWZpbmVkIG9iamVjdHMgY2FuIHN1cHBvcnQgc3Vic2NyaXB0aW9uIGJ5IGRlZmluaW5nIGEKLTptZXRoOmBfX2dldGl0ZW1fX2AgbWV0aG9kLgorVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyBzdWJzY3JpcHRpb24gKGxpc3RzIG9yCitkaWN0aW9uYXJpZXMgZm9yIGV4YW1wbGUpLiAgVXNlci1kZWZpbmVkIG9iamVjdHMgY2FuIHN1cHBvcnQgc3Vic2NyaXB0aW9uIGJ5CitkZWZpbmluZyBhIDptZXRoOmBfX2dldGl0ZW1fX2AgbWV0aG9kLgogCiBGb3IgYnVpbHQtaW4gb2JqZWN0cywgdGhlcmUgYXJlIHR3byB0eXBlcyBvZiBvYmplY3RzIHRoYXQgc3VwcG9ydCBzdWJzY3JpcHRpb246CiAKQEAgLTYyMSw4ICs2MjAsOCBAQAogICAgc2luZ2xlOiBzdG9wIChzbGljZSBvYmplY3QgYXR0cmlidXRlKQogICAgc2luZ2xlOiBzdGVwIChzbGljZSBvYmplY3QgYXR0cmlidXRlKQogCi1UaGUgc2VtYW50aWNzIGZvciBhIHNsaWNpbmcgYXJlIGFzIGZvbGxvd3MuICBUaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGEKLW1hcHBpbmcgb2JqZWN0LCBhbmQgaXQgaXMgaW5kZXhlZCAodXNpbmcgdGhlIHNhbWUgOm1ldGg6YF9fZ2V0aXRlbV9fYCBtZXRob2QgYXMKK1RoZSBzZW1hbnRpY3MgZm9yIGEgc2xpY2luZyBhcmUgYXMgZm9sbG93cy4gIFRoZSBwcmltYXJ5IGlzIGluZGV4ZWQgKHVzaW5nIHRoZQorc2FtZSA6bWV0aDpgX19nZXRpdGVtX19gIG1ldGhvZCBhcwogbm9ybWFsIHN1YnNjcmlwdGlvbikgd2l0aCBhIGtleSB0aGF0IGlzIGNvbnN0cnVjdGVkIGZyb20gdGhlIHNsaWNlIGxpc3QsIGFzCiBmb2xsb3dzLiAgSWYgdGhlIHNsaWNlIGxpc3QgY29udGFpbnMgYXQgbGVhc3Qgb25lIGNvbW1hLCB0aGUga2V5IGlzIGEgdHVwbGUKIGNvbnRhaW5pbmcgdGhlIGNvbnZlcnNpb24gb2YgdGhlIHNsaWNlIGl0ZW1zOyBvdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIG9mIHRoZQpAQCAtNjYwLDggKzY1OSw4IEBACiAgICBrZXl3b3JkX2FyZ3VtZW50czogYGtleXdvcmRfaXRlbWAgKCIsIiBga2V5d29yZF9pdGVtYCkqCiAgICBrZXl3b3JkX2l0ZW06IGBpZGVudGlmaWVyYCAiPSIgYGV4cHJlc3Npb25gCiAKLUEgdHJhaWxpbmcgY29tbWEgbWF5IGJlIHByZXNlbnQgYWZ0ZXIgdGhlIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzIGJ1dAotZG9lcyBub3QgYWZmZWN0IHRoZSBzZW1hbnRpY3MuCitBbiBvcHRpb25hbCB0cmFpbGluZyBjb21tYSBtYXkgYmUgcHJlc2VudCBhZnRlciB0aGUgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMKK2J1dCBkb2VzIG5vdCBhZmZlY3QgdGhlIHNlbWFudGljcy4KIAogLi4gaW5kZXg6OgogICAgc2luZ2xlOiBwYXJhbWV0ZXI7IGNhbGwgc2VtYW50aWNzCkBAIC05NDMsOSArOTQyLDkgQEAKIC4uIGluZGV4Ojogc2luZ2xlOiBhZGRpdGlvbgogCiBUaGUgYGArYGAgKGFkZGl0aW9uKSBvcGVyYXRvciB5aWVsZHMgdGhlIHN1bSBvZiBpdHMgYXJndW1lbnRzLiAgVGhlIGFyZ3VtZW50cwotbXVzdCBlaXRoZXIgYm90aCBiZSBudW1iZXJzIG9yIGJvdGggc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUuICBJbiB0aGUgZm9ybWVyCi1jYXNlLCB0aGUgbnVtYmVycyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUgYW5kIHRoZW4gYWRkZWQgdG9nZXRoZXIuICBJbgotdGhlIGxhdHRlciBjYXNlLCB0aGUgc2VxdWVuY2VzIGFyZSBjb25jYXRlbmF0ZWQuCittdXN0IGVpdGhlciBib3RoIGJlIG51bWJlcnMgb3IgYm90aCBiZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZS4gIEluIHRoZQorZm9ybWVyIGNhc2UsIHRoZSBudW1iZXJzIGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZSBhbmQgdGhlbiBhZGRlZCB0b2dldGhlci4KK0luIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHNlcXVlbmNlcyBhcmUgY29uY2F0ZW5hdGVkLgogCiAuLiBpbmRleDo6IHNpbmdsZTogc3VidHJhY3Rpb24KIApAQCAtMTAxNCwxMCArMTAxMyw2IEBACiAKIAogLi4gX2NvbXBhcmlzb25zOgotLi4gX2lzOgotLi4gX2lzIG5vdDoKLS4uIF9pbjoKLS4uIF9ub3QgaW46CiAKIENvbXBhcmlzb25zCiA9PT09PT09PT09PQpAQCAtMTA1Myw3MCArMTA0OCwxODcgQEAKICpjKiwgc28gdGhhdCwgZS5nLiwgYGB4IDwgeSA+IHpgYCBpcyBwZXJmZWN0bHkgbGVnYWwgKHRob3VnaCBwZXJoYXBzIG5vdAogcHJldHR5KS4KIAorVmFsdWUgY29tcGFyaXNvbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKIFRoZSBvcGVyYXRvcnMgYGA8YGAsIGBgPmBgLCBgYD09YGAsIGBgPj1gYCwgYGA8PWBgLCBhbmQgYGAhPWBgIGNvbXBhcmUgdGhlCi12YWx1ZXMgb2YgdHdvIG9iamVjdHMuICBUaGUgb2JqZWN0cyBuZWVkIG5vdCBoYXZlIHRoZSBzYW1lIHR5cGUuIElmIGJvdGggYXJlCi1udW1iZXJzLCB0aGV5IGFyZSBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gIE90aGVyd2lzZSwgdGhlIGBgPT1gYCBhbmQgYGAhPWBgCi1vcGVyYXRvcnMgKmFsd2F5cyogY29uc2lkZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdG8gYmUgdW5lcXVhbCwgd2hpbGUgdGhlCi1gYDxgYCwgYGA+YGAsIGBgPj1gYCBhbmQgYGA8PWBgIG9wZXJhdG9ycyByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgd2hlbgotY29tcGFyaW5nIG9iamVjdHMgb2YgZGlmZmVyZW50IHR5cGVzIHRoYXQgZG8gbm90IGltcGxlbWVudCB0aGVzZSBvcGVyYXRvcnMgZm9yCi10aGUgZ2l2ZW4gcGFpciBvZiB0eXBlcy4gIFlvdSBjYW4gY29udHJvbCBjb21wYXJpc29uIGJlaGF2aW9yIG9mIG9iamVjdHMgb2YKLW5vbi1idWlsdC1pbiB0eXBlcyBieSBkZWZpbmluZyByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBsaWtlIDptZXRoOmBfX2d0X19gLAotZGVzY3JpYmVkIGluIHNlY3Rpb24gOnJlZjpgY3VzdG9taXphdGlvbmAuCit2YWx1ZXMgb2YgdHdvIG9iamVjdHMuICBUaGUgb2JqZWN0cyBkbyBub3QgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHR5cGUuCiAKLUNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6CitDaGFwdGVyIDpyZWY6YG9iamVjdHNgIHN0YXRlcyB0aGF0IG9iamVjdHMgaGF2ZSBhIHZhbHVlIChpbiBhZGRpdGlvbiB0byB0eXBlCithbmQgaWRlbnRpdHkpLiAgVGhlIHZhbHVlIG9mIGFuIG9iamVjdCBpcyBhIHJhdGhlciBhYnN0cmFjdCBub3Rpb24gaW4gUHl0aG9uOgorRm9yIGV4YW1wbGUsIHRoZXJlIGlzIG5vIGNhbm9uaWNhbCBhY2Nlc3MgbWV0aG9kIGZvciBhbiBvYmplY3QncyB2YWx1ZS4gIEFsc28sCit0aGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IHRoZSB2YWx1ZSBvZiBhbiBvYmplY3Qgc2hvdWxkIGJlIGNvbnN0cnVjdGVkIGluIGEKK3BhcnRpY3VsYXIgd2F5LCBlLmcuIGNvbXByaXNlZCBvZiBhbGwgaXRzIGRhdGEgYXR0cmlidXRlcy4gQ29tcGFyaXNvbiBvcGVyYXRvcnMKK2ltcGxlbWVudCBhIHBhcnRpY3VsYXIgbm90aW9uIG9mIHdoYXQgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBpcy4gIE9uZSBjYW4gdGhpbmsKK29mIHRoZW0gYXMgZGVmaW5pbmcgdGhlIHZhbHVlIG9mIGFuIG9iamVjdCBpbmRpcmVjdGx5LCBieSBtZWFucyBvZiB0aGVpcgorY29tcGFyaXNvbiBpbXBsZW1lbnRhdGlvbi4KIAotKiBOdW1iZXJzIGFyZSBjb21wYXJlZCBhcml0aG1ldGljYWxseS4KK0JlY2F1c2UgYWxsIHR5cGVzIGFyZSAoZGlyZWN0IG9yIGluZGlyZWN0KSBzdWJ0eXBlcyBvZiA6Y2xhc3M6YG9iamVjdGAsIHRoZXkKK2luaGVyaXQgdGhlIGRlZmF1bHQgY29tcGFyaXNvbiBiZWhhdmlvciBmcm9tIDpjbGFzczpgb2JqZWN0YC4gIFR5cGVzIGNhbgorY3VzdG9taXplIHRoZWlyIGNvbXBhcmlzb24gYmVoYXZpb3IgYnkgaW1wbGVtZW50aW5nCis6ZGZuOmByaWNoIGNvbXBhcmlzb24gbWV0aG9kc2AgbGlrZSA6bWV0aDpgX19sdF9fYCwgZGVzY3JpYmVkIGluCis6cmVmOmBjdXN0b21pemF0aW9uYC4KIAotKiBUaGUgdmFsdWVzIDpjb25zdDpgZmxvYXQoJ05hTicpYCBhbmQgOmNvbnN0OmBEZWNpbWFsKCdOYU4nKWAgYXJlIHNwZWNpYWwuCi0gIFRoZSBhcmUgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMsIGBgeCBpcyB4YGAgYnV0IGFyZSBub3QgZXF1YWwgdG8gdGhlbXNlbHZlcywKLSAgYGB4ICE9IHhgYC4gIEFkZGl0aW9uYWxseSwgY29tcGFyaW5nIGFueSB2YWx1ZSB0byBhIG5vdC1hLW51bWJlciB2YWx1ZQorVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGVxdWFsaXR5IGNvbXBhcmlzb24gKGBgPT1gYCBhbmQgYGAhPWBgKSBpcyBiYXNlZCBvbgordGhlIGlkZW50aXR5IG9mIHRoZSBvYmplY3RzLiAgSGVuY2UsIGVxdWFsaXR5IGNvbXBhcmlzb24gb2YgaW5zdGFuY2VzIHdpdGggdGhlCitzYW1lIGlkZW50aXR5IHJlc3VsdHMgaW4gZXF1YWxpdHksIGFuZCBlcXVhbGl0eSBjb21wYXJpc29uIG9mIGluc3RhbmNlcyB3aXRoCitkaWZmZXJlbnQgaWRlbnRpdGllcyByZXN1bHRzIGluIGluZXF1YWxpdHkuICBBIG1vdGl2YXRpb24gZm9yIHRoaXMgZGVmYXVsdAorYmVoYXZpb3IgaXMgdGhlIGRlc2lyZSB0aGF0IGFsbCBvYmplY3RzIHNob3VsZCBiZSByZWZsZXhpdmUgKGkuZS4gYGB4IGlzIHlgYAoraW1wbGllcyBgYHggPT0geWBgKS4KKworQSBkZWZhdWx0IG9yZGVyIGNvbXBhcmlzb24gKGBgPGBgLCBgYD5gYCwgYGA8PWBgLCBhbmQgYGA+PWBgKSBpcyBub3QgcHJvdmlkZWQ7CithbiBhdHRlbXB0IHJhaXNlcyA6ZXhjOmBUeXBlRXJyb3JgLiAgQSBtb3RpdmF0aW9uIGZvciB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMKK3RoZSBsYWNrIG9mIGEgc2ltaWxhciBpbnZhcmlhbnQgYXMgZm9yIGVxdWFsaXR5LgorCitUaGUgYmVoYXZpb3Igb2YgdGhlIGRlZmF1bHQgZXF1YWxpdHkgY29tcGFyaXNvbiwgdGhhdCBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQKK2lkZW50aXRpZXMgYXJlIGFsd2F5cyB1bmVxdWFsLCBtYXkgYmUgaW4gY29udHJhc3QgdG8gd2hhdCB0eXBlcyB3aWxsIG5lZWQgdGhhdAoraGF2ZSBhIHNlbnNpYmxlIGRlZmluaXRpb24gb2Ygb2JqZWN0IHZhbHVlIGFuZCB2YWx1ZS1iYXNlZCBlcXVhbGl0eS4gIFN1Y2gKK3R5cGVzIHdpbGwgbmVlZCB0byBjdXN0b21pemUgdGhlaXIgY29tcGFyaXNvbiBiZWhhdmlvciwgYW5kIGluIGZhY3QsIGEgbnVtYmVyCitvZiBidWlsdC1pbiB0eXBlcyBoYXZlIGRvbmUgdGhhdC4KKworVGhlIGZvbGxvd2luZyBsaXN0IGRlc2NyaWJlcyB0aGUgY29tcGFyaXNvbiBiZWhhdmlvciBvZiB0aGUgbW9zdCBpbXBvcnRhbnQKK2J1aWx0LWluIHR5cGVzLgorCisqIE51bWJlcnMgb2YgYnVpbHQtaW4gbnVtZXJpYyB0eXBlcyAoOnJlZjpgdHlwZXNudW1lcmljYCkgYW5kIG9mIHRoZSBzdGFuZGFyZAorICBsaWJyYXJ5IHR5cGVzIDpjbGFzczpgZnJhY3Rpb25zLkZyYWN0aW9uYCBhbmQgOmNsYXNzOmBkZWNpbWFsLkRlY2ltYWxgIGNhbiBiZQorICBjb21wYXJlZCB3aXRoaW4gYW5kIGFjcm9zcyB0aGVpciB0eXBlcywgd2l0aCB0aGUgcmVzdHJpY3Rpb24gdGhhdCBjb21wbGV4CisgIG51bWJlcnMgZG8gbm90IHN1cHBvcnQgb3JkZXIgY29tcGFyaXNvbi4gIFdpdGhpbiB0aGUgbGltaXRzIG9mIHRoZSB0eXBlcworICBpbnZvbHZlZCwgdGhleSBjb21wYXJlIG1hdGhlbWF0aWNhbGx5IChhbGdvcml0aG1pY2FsbHkpIGNvcnJlY3Qgd2l0aG91dCBsb3NzCisgIG9mIHByZWNpc2lvbi4KKworICBUaGUgbm90LWEtbnVtYmVyIHZhbHVlcyA6Y29uc3Q6YGZsb2F0KCdOYU4nKWAgYW5kIDpjb25zdDpgRGVjaW1hbCgnTmFOJylgCisgIGFyZSBzcGVjaWFsLiAgVGhleSBhcmUgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMgKGBgeCBpcyB4YGAgaXMgdHJ1ZSkgYnV0CisgIGFyZSBub3QgZXF1YWwgdG8gdGhlbXNlbHZlcyAoYGB4ID09IHhgYCBpcyBmYWxzZSkuICBBZGRpdGlvbmFsbHksCisgIGNvbXBhcmluZyBhbnkgbnVtYmVyIHRvIGEgbm90LWEtbnVtYmVyIHZhbHVlCiAgIHdpbGwgcmV0dXJuIGBgRmFsc2VgYC4gIEZvciBleGFtcGxlLCBib3RoIGBgMyA8IGZsb2F0KCdOYU4nKWBgIGFuZAogICBgYGZsb2F0KCdOYU4nKSA8IDNgYCB3aWxsIHJldHVybiBgYEZhbHNlYGAuCiAKLSogQnl0ZXMgb2JqZWN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZWlyCi0gIGVsZW1lbnRzLgorKiBCaW5hcnkgc2VxdWVuY2VzIChpbnN0YW5jZXMgb2YgOmNsYXNzOmBieXRlc2Agb3IgOmNsYXNzOmBieXRlYXJyYXlgKSBjYW4gYmUKKyAgY29tcGFyZWQgd2l0aGluIGFuZCBhY3Jvc3MgdGhlaXIgdHlwZXMuICBUaGV5IGNvbXBhcmUgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcKKyAgdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZWlyIGVsZW1lbnRzLgogCi0qIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljIGVxdWl2YWxlbnRzICh0aGUKLSAgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbiA6ZnVuYzpgb3JkYCkgb2YgdGhlaXIgY2hhcmFjdGVycy4gWyNdXyBTdHJpbmcKLSAgYW5kIGJ5dGVzIG9iamVjdCBjYW4ndCBiZSBjb21wYXJlZCEKKyogU3RyaW5ncyAoaW5zdGFuY2VzIG9mIDpjbGFzczpgc3RyYCkgY29tcGFyZSBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUKKyAgbnVtZXJpY2FsIFVuaWNvZGUgY29kZSBwb2ludHMgKHRoZSByZXN1bHQgb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uCisgIDpmdW5jOmBvcmRgKSBvZiB0aGVpciBjaGFyYWN0ZXJzLiBbI11fCiAKLSogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvbiBvZgotICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2ggZWxlbWVudCBtdXN0Ci0gIGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZQotICBsZW5ndGguCisgIFN0cmluZ3MgYW5kIGJpbmFyeSBzZXF1ZW5jZXMgY2Fubm90IGJlIGRpcmVjdGx5IGNvbXBhcmVkLgogCi0gIElmIG5vdCBlcXVhbCwgdGhlIHNlcXVlbmNlcyBhcmUgb3JkZXJlZCB0aGUgc2FtZSBhcyB0aGVpciBmaXJzdCBkaWZmZXJpbmcKLSAgZWxlbWVudHMuICBGb3IgZXhhbXBsZSwgYGBbMSwyLHhdIDw9IFsxLDIseV1gYCBoYXMgdGhlIHNhbWUgdmFsdWUgYXMKLSAgYGB4IDw9IHlgYC4gIElmIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QsIHRoZSBzaG9ydGVyCi0gIHNlcXVlbmNlIGlzIG9yZGVyZWQgZmlyc3QgKGZvciBleGFtcGxlLCBgYFsxLDJdIDwgWzEsMiwzXWBgKS4KKyogU2VxdWVuY2VzIChpbnN0YW5jZXMgb2YgOmNsYXNzOmB0dXBsZWAsIDpjbGFzczpgbGlzdGAsIG9yIDpjbGFzczpgcmFuZ2VgKSBjYW4KKyAgYmUgY29tcGFyZWQgb25seSB3aXRoaW4gZWFjaCBvZiB0aGVpciB0eXBlcywgd2l0aCB0aGUgcmVzdHJpY3Rpb24gdGhhdCByYW5nZXMKKyAgZG8gbm90IHN1cHBvcnQgb3JkZXIgY29tcGFyaXNvbi4gIEVxdWFsaXR5IGNvbXBhcmlzb24gYWNyb3NzIHRoZXNlIHR5cGVzCisgIHJlc3VsdHMgaW4gdW5lcXVhbGl0eSwgYW5kIG9yZGVyaW5nIGNvbXBhcmlzb24gYWNyb3NzIHRoZXNlIHR5cGVzIHJhaXNlcworICA6ZXhjOmBUeXBlRXJyb3JgLgogCi0qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZSBzYW1lCi0gIGBgKGtleSwgdmFsdWUpYGAgcGFpcnMuIE9yZGVyIGNvbXBhcmlzb25zIGBgKCc8JywgJzw9JywgJz49JywgJz4nKWBgCi0gIHJhaXNlIDpleGM6YFR5cGVFcnJvcmAuCisgIFNlcXVlbmNlcyBjb21wYXJlIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb24gb2YgY29ycmVzcG9uZGluZworICBlbGVtZW50cywgd2hlcmVieSByZWZsZXhpdml0eSBvZiB0aGUgZWxlbWVudHMgaXMgZW5mb3JjZWQuCiAKLSogU2V0cyBhbmQgZnJvemVuc2V0cyBkZWZpbmUgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8gbWVhbiBzdWJzZXQgYW5kIHN1cGVyc2V0Ci0gIHRlc3RzLiAgVGhvc2UgcmVsYXRpb25zIGRvIG5vdCBkZWZpbmUgdG90YWwgb3JkZXJpbmdzICh0aGUgdHdvIHNldHMgYGB7MSwyfWBgCi0gIGFuZCB7MiwzfSBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmUgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUKKyAgSW4gZW5mb3JjaW5nIHJlZmxleGl2aXR5IG9mIGVsZW1lbnRzLCB0aGUgY29tcGFyaXNvbiBvZiBjb2xsZWN0aW9ucyBhc3N1bWVzCisgIHRoYXQgZm9yIGEgY29sbGVjdGlvbiBlbGVtZW50IGBgeGBgLCBgYHggPT0geGBgIGlzIGFsd2F5cyB0cnVlLiAgQmFzZWQgb24KKyAgdGhhdCBhc3N1bXB0aW9uLCBlbGVtZW50IGlkZW50aXR5IGlzIGNvbXBhcmVkIGZpcnN0LCBhbmQgZWxlbWVudCBjb21wYXJpc29uCisgIGlzIHBlcmZvcm1lZCBvbmx5IGZvciBkaXN0aW5jdCBlbGVtZW50cy4gIFRoaXMgYXBwcm9hY2ggeWllbGRzIHRoZSBzYW1lCisgIHJlc3VsdCBhcyBhIHN0cmljdCBlbGVtZW50IGNvbXBhcmlzb24gd291bGQsIGlmIHRoZSBjb21wYXJlZCBlbGVtZW50cyBhcmUKKyAgcmVmbGV4aXZlLiAgRm9yIG5vbi1yZWZsZXhpdmUgZWxlbWVudHMsIHRoZSByZXN1bHQgaXMgZGlmZmVyZW50IHRoYW4gZm9yCisgIHN0cmljdCBlbGVtZW50IGNvbXBhcmlzb24sIGFuZCBtYXkgYmUgc3VycHJpc2luZzogIFRoZSBub24tcmVmbGV4aXZlCisgIG5vdC1hLW51bWJlciB2YWx1ZXMgZm9yIGV4YW1wbGUgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgY29tcGFyaXNvbiBiZWhhdmlvcgorICB3aGVuIHVzZWQgaW4gYSBsaXN0OjoKKworICAgID4+PiBuYW4gPSBmbG9hdCgnTmFOJykKKyAgICA+Pj4gbmFuIGlzIG5hbgorICAgIFRydWUKKyAgICA+Pj4gbmFuID09IG5hbgorICAgIEZhbHNlICAgICAgICAgICAgICAgICA8LS0gdGhlIGRlZmluZWQgbm9uLXJlZmxleGl2ZSBiZWhhdmlvciBvZiBOYU4KKyAgICA+Pj4gW25hbl0gPT0gW25hbl0KKyAgICBUcnVlICAgICAgICAgICAgICAgICAgPC0tIGxpc3QgZW5mb3JjZXMgcmVmbGV4aXZpdHkgYW5kIHRlc3RzIGlkZW50aXR5IGZpcnN0CisKKyAgTGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gYmV0d2VlbiBidWlsdC1pbiBjb2xsZWN0aW9ucyB3b3JrcyBhcyBmb2xsb3dzOgorCisgIC0gRm9yIHR3byBjb2xsZWN0aW9ucyB0byBjb21wYXJlIGVxdWFsLCB0aGV5IG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZSwgaGF2ZQorICAgIHRoZSBzYW1lIGxlbmd0aCwgYW5kIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIG11c3QgY29tcGFyZQorICAgIGVxdWFsIChmb3IgZXhhbXBsZSwgYGBbMSwyXSA9PSAoMSwyKWBgIGlzIGZhbHNlIGJlY2F1c2UgdGhlIHR5cGUgaXMgbm90IHRoZQorICAgIHNhbWUpLgorCisgIC0gQ29sbGVjdGlvbnMgdGhhdCBzdXBwb3J0IG9yZGVyIGNvbXBhcmlzb24gYXJlIG9yZGVyZWQgdGhlIHNhbWUgYXMgdGhlaXIKKyAgICBmaXJzdCB1bmVxdWFsIGVsZW1lbnRzIChmb3IgZXhhbXBsZSwgYGBbMSwyLHhdIDw9IFsxLDIseV1gYCBoYXMgdGhlIHNhbWUKKyAgICB2YWx1ZSBhcyBgYHggPD0geWBgKS4gIElmIGEgY29ycmVzcG9uZGluZyBlbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGUKKyAgICBzaG9ydGVyIGNvbGxlY3Rpb24gaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsIGBgWzEsMl0gPCBbMSwyLDNdYGAgaXMKKyAgICB0cnVlKS4KKworKiBNYXBwaW5ncyAoaW5zdGFuY2VzIG9mIDpjbGFzczpgZGljdGApIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlCisgIGVxdWFsIGAoa2V5LCB2YWx1ZSlgIHBhaXJzLiBFcXVhbGl0eSBjb21wYXJpc29uIG9mIHRoZSBrZXlzIGFuZCBlbGVtZW50cworICBlbmZvcmNlcyByZWZsZXhpdml0eS4KKworICBPcmRlciBjb21wYXJpc29ucyAoYGA8YGAsIGBgPmBgLCBgYDw9YGAsIGFuZCBgYD49YGApIHJhaXNlIDpleGM6YFR5cGVFcnJvcmAuCisKKyogU2V0cyAoaW5zdGFuY2VzIG9mIDpjbGFzczpgc2V0YCBvciA6Y2xhc3M6YGZyb3plbnNldGApIGNhbiBiZSBjb21wYXJlZCB3aXRoaW4KKyAgYW5kIGFjcm9zcyB0aGVpciB0eXBlcy4KKworICBUaGV5IGRlZmluZSBvcmRlcgorICBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmQgc3VwZXJzZXQgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8KKyAgbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKGZvciBleGFtcGxlLCB0aGUgdHdvIHNldHMgYGB7MSwyfWBgIGFuZCBgYHsyLDN9YGAKKyAgYXJlIG5vdCBlcXVhbCwgbm9yIHN1YnNldHMgb2Ygb25lIGFub3RoZXIsIG5vciBzdXBlcnNldHMgb2Ygb25lCiAgIGFub3RoZXIpLiAgQWNjb3JkaW5nbHksIHNldHMgYXJlIG5vdCBhcHByb3ByaWF0ZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9ucwotICB3aGljaCBkZXBlbmQgb24gdG90YWwgb3JkZXJpbmcuICBGb3IgZXhhbXBsZSwgOmZ1bmM6YG1pbmAsIDpmdW5jOmBtYXhgLCBhbmQKLSAgOmZ1bmM6YHNvcnRlZGAgcHJvZHVjZSB1bmRlZmluZWQgcmVzdWx0cyBnaXZlbiBhIGxpc3Qgb2Ygc2V0cyBhcyBpbnB1dHMuCisgIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZyAoZm9yIGV4YW1wbGUsIDpmdW5jOmBtaW5gLCA6ZnVuYzpgbWF4YCwgYW5kCisgIDpmdW5jOmBzb3J0ZWRgIHByb2R1Y2UgdW5kZWZpbmVkIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzKS4KIAotKiBNb3N0IG90aGVyIG9iamVjdHMgb2YgYnVpbHQtaW4gdHlwZXMgY29tcGFyZSB1bmVxdWFsIHVubGVzcyB0aGV5IGFyZSB0aGUgc2FtZQotICBvYmplY3Q7IHRoZSBjaG9pY2Ugd2hldGhlciBvbmUgb2JqZWN0IGlzIGNvbnNpZGVyZWQgc21hbGxlciBvciBsYXJnZXIgdGhhbgotICBhbm90aGVyIG9uZSBpcyBtYWRlIGFyYml0cmFyaWx5IGJ1dCBjb25zaXN0ZW50bHkgd2l0aGluIG9uZSBleGVjdXRpb24gb2YgYQotICBwcm9ncmFtLgorICBDb21wYXJpc29uIG9mIHNldHMgZW5mb3JjZXMgcmVmbGV4aXZpdHkgb2YgaXRzIGVsZW1lbnRzLgogCi1Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIGRpZmZlcmluZyB0eXBlcyBkZXBlbmRzIG9uIHdoZXRoZXIgZWl0aGVyIG9mIHRoZQotdHlwZXMgcHJvdmlkZSBleHBsaWNpdCBzdXBwb3J0IGZvciB0aGUgY29tcGFyaXNvbi4gIE1vc3QgbnVtZXJpYyB0eXBlcyBjYW4gYmUKLWNvbXBhcmVkIHdpdGggb25lIGFub3RoZXIuICBXaGVuIGNyb3NzLXR5cGUgY29tcGFyaXNvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUKLWNvbXBhcmlzb24gbWV0aG9kIHJldHVybnMgYGBOb3RJbXBsZW1lbnRlZGBgLgorKiBNb3N0IG90aGVyIGJ1aWx0LWluIHR5cGVzIGhhdmUgbm8gY29tcGFyaXNvbiBtZXRob2RzIGltcGxlbWVudGVkLCBzbyB0aGV5CisgIGluaGVyaXQgdGhlIGRlZmF1bHQgY29tcGFyaXNvbiBiZWhhdmlvci4KIAorVXNlci1kZWZpbmVkIGNsYXNzZXMgdGhhdCBjdXN0b21pemUgdGhlaXIgY29tcGFyaXNvbiBiZWhhdmlvciBzaG91bGQgZm9sbG93Citzb21lIGNvbnNpc3RlbmN5IHJ1bGVzLCBpZiBwb3NzaWJsZToKKworKiBFcXVhbGl0eSBjb21wYXJpc29uIHNob3VsZCBiZSByZWZsZXhpdmUuCisgIEluIG90aGVyIHdvcmRzLCBpZGVudGljYWwgb2JqZWN0cyBzaG91bGQgY29tcGFyZSBlcXVhbDoKKworICAgIGBgeCBpcyB5YGAgaW1wbGllcyBgYHggPT0geWBgCisKKyogQ29tcGFyaXNvbiBzaG91bGQgYmUgc3ltbWV0cmljLgorICBJbiBvdGhlciB3b3JkcywgdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucyBzaG91bGQgaGF2ZSB0aGUgc2FtZSByZXN1bHQ6CisKKyAgICBgYHggPT0geWBgIGFuZCBgYHkgPT0geGBgCisKKyAgICBgYHggIT0geWBgIGFuZCBgYHkgIT0geGBgCisKKyAgICBgYHggPCB5YGAgYW5kIGBgeSA+IHhgYAorCisgICAgYGB4IDw9IHlgYCBhbmQgYGB5ID49IHhgYAorCisqIENvbXBhcmlzb24gc2hvdWxkIGJlIHRyYW5zaXRpdmUuCisgIFRoZSBmb2xsb3dpbmcgKG5vbi1leGhhdXN0aXZlKSBleGFtcGxlcyBpbGx1c3RyYXRlIHRoYXQ6CisKKyAgICBgYHggPiB5IGFuZCB5ID4gemBgIGltcGxpZXMgYGB4ID4gemBgCisKKyAgICBgYHggPCB5IGFuZCB5IDw9IHpgYCBpbXBsaWVzIGBgeCA8IHpgYAorCisqIEludmVyc2UgY29tcGFyaXNvbiBzaG91bGQgcmVzdWx0IGluIHRoZSBib29sZWFuIG5lZ2F0aW9uLgorICBJbiBvdGhlciB3b3JkcywgdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucyBzaG91bGQgaGF2ZSB0aGUgc2FtZSByZXN1bHQ6CisKKyAgICBgYHggPT0geWBgIGFuZCBgYG5vdCB4ICE9IHlgYAorCisgICAgYGB4IDwgeWBgIGFuZCBgYG5vdCB4ID49IHlgYCAoZm9yIHRvdGFsIG9yZGVyaW5nKQorCisgICAgYGB4ID4geWBgIGFuZCBgYG5vdCB4IDw9IHlgYCAoZm9yIHRvdGFsIG9yZGVyaW5nKQorCisgIFRoZSBsYXN0IHR3byBleHByZXNzaW9ucyBhcHBseSB0byB0b3RhbGx5IG9yZGVyZWQgY29sbGVjdGlvbnMgKGUuZy4gdG8KKyAgc2VxdWVuY2VzLCBidXQgbm90IHRvIHNldHMgb3IgbWFwcGluZ3MpLiBTZWUgYWxzbyB0aGUKKyAgOmZ1bmM6YH5mdW5jdG9vbHMudG90YWxfb3JkZXJpbmdgIGRlY29yYXRvci4KKworUHl0aG9uIGRvZXMgbm90IGVuZm9yY2UgdGhlc2UgY29uc2lzdGVuY3kgcnVsZXMuIEluIGZhY3QsIHRoZSBub3QtYS1udW1iZXIKK3ZhbHVlcyBhcmUgYW4gZXhhbXBsZSBmb3Igbm90IGZvbGxvd2luZyB0aGVzZSBydWxlcy4KKworCisuLiBfaW46CisuLiBfbm90IGluOgogLi4gX21lbWJlcnNoaXAtdGVzdC1kZXRhaWxzOgogCitNZW1iZXJzaGlwIHRlc3Qgb3BlcmF0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwogVGhlIG9wZXJhdG9ycyA6a2V5d29yZDpgaW5gIGFuZCA6a2V5d29yZDpgbm90IGluYCB0ZXN0IGZvciBtZW1iZXJzaGlwLiAgYGB4IGluCiBzYGAgZXZhbHVhdGVzIHRvIHRydWUgaWYgKngqIGlzIGEgbWVtYmVyIG9mICpzKiwgYW5kIGZhbHNlIG90aGVyd2lzZS4gIGBgeCBub3QKIGluIHNgYCByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiBgYHggaW4gc2BgLiAgQWxsIGJ1aWx0LWluIHNlcXVlbmNlcyBhbmQgc2V0IHR5cGVzCi1zdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggOmtleXdvcmQ6YGluYCB0ZXN0cyB3aGV0aGVyIGEgdGhlCitzdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggOmtleXdvcmQ6YGluYCB0ZXN0cyB3aGV0aGVyIHRoZQogZGljdGlvbmFyeSBoYXMgYSBnaXZlbiBrZXkuIEZvciBjb250YWluZXIgdHlwZXMgc3VjaCBhcyBsaXN0LCB0dXBsZSwgc2V0LAogZnJvemVuc2V0LCBkaWN0LCBvciBjb2xsZWN0aW9ucy5kZXF1ZSwgdGhlIGV4cHJlc3Npb24gYGB4IGluIHlgYCBpcyBlcXVpdmFsZW50CiB0byBgYGFueSh4IGlzIGUgb3IgeCA9PSBlIGZvciBlIGluIHkpYGAuCkBAIC0xMTU0LDYgKzEyNjYsMTMgQEAKICAgIG9wZXJhdG9yOiBpcyBub3QKICAgIHBhaXI6IGlkZW50aXR5OyB0ZXN0CiAKKworLi4gX2lzOgorLi4gX2lzIG5vdDoKKworSWRlbnRpdHkgY29tcGFyaXNvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFRoZSBvcGVyYXRvcnMgOmtleXdvcmQ6YGlzYCBhbmQgOmtleXdvcmQ6YGlzIG5vdGAgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiBgYHgKIGlzIHlgYCBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBhbmQgKnkqIGFyZSB0aGUgc2FtZSBvYmplY3QuICBgYHggaXMgbm90IHlgYAogeWllbGRzIHRoZSBpbnZlcnNlIHRydXRoIHZhbHVlLiBbI11fCkBAIC0xMjAyLDkgKzEzMjEsOSBAQAogdGhleSByZXR1cm4gdG8gYGBGYWxzZWBgIGFuZCBgYFRydWVgYCwgYnV0IHJhdGhlciByZXR1cm4gdGhlIGxhc3QgZXZhbHVhdGVkCiBhcmd1bWVudC4gIFRoaXMgaXMgc29tZXRpbWVzIHVzZWZ1bCwgZS5nLiwgaWYgYGBzYGAgaXMgYSBzdHJpbmcgdGhhdCBzaG91bGQgYmUKIHJlcGxhY2VkIGJ5IGEgZGVmYXVsdCB2YWx1ZSBpZiBpdCBpcyBlbXB0eSwgdGhlIGV4cHJlc3Npb24gYGBzIG9yICdmb28nYGAgeWllbGRzCi10aGUgZGVzaXJlZCB2YWx1ZS4gIEJlY2F1c2UgOmtleXdvcmQ6YG5vdGAgaGFzIHRvIGludmVudCBhIHZhbHVlIGFueXdheSwgaXQgZG9lcwotbm90IGJvdGhlciB0byByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgc2FtZSB0eXBlIGFzIGl0cyBhcmd1bWVudCwgc28gZS5nLiwgYGBub3QKLSdmb28nYGAgeWllbGRzIGBgRmFsc2VgYCwgbm90IGBgJydgYC4pCit0aGUgZGVzaXJlZCB2YWx1ZS4gIEJlY2F1c2UgOmtleXdvcmQ6YG5vdGAgaGFzIHRvIGNyZWF0ZSBhIG5ldyB2YWx1ZSwgaXQKK3JldHVybnMgYSBib29sZWFuIHZhbHVlIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgb2YgaXRzIGFyZ3VtZW50CisoZm9yIGV4YW1wbGUsIGBgbm90ICdmb28nYGAgcHJvZHVjZXMgYGBGYWxzZWBgIHJhdGhlciB0aGFuIGBgJydgYC4pCiAKIAogQ29uZGl0aW9uYWwgZXhwcmVzc2lvbnMKQEAgLTEyMjIsOCArMTM0MSw4IEBACiBDb25kaXRpb25hbCBleHByZXNzaW9ucyAoc29tZXRpbWVzIGNhbGxlZCBhICJ0ZXJuYXJ5IG9wZXJhdG9yIikgaGF2ZSB0aGUgbG93ZXN0CiBwcmlvcml0eSBvZiBhbGwgUHl0aG9uIG9wZXJhdGlvbnMuCiAKLVRoZSBleHByZXNzaW9uIGBgeCBpZiBDIGVsc2UgeWBgIGZpcnN0IGV2YWx1YXRlcyB0aGUgY29uZGl0aW9uLCAqQyogKCpub3QqICp4Kik7Ci1pZiAqQyogaXMgdHJ1ZSwgKngqIGlzIGV2YWx1YXRlZCBhbmQgaXRzIHZhbHVlIGlzIHJldHVybmVkOyBvdGhlcndpc2UsICp5KiBpcworVGhlIGV4cHJlc3Npb24gYGB4IGlmIEMgZWxzZSB5YGAgZmlyc3QgZXZhbHVhdGVzIHRoZSBjb25kaXRpb24sICpDKiByYXRoZXIgdGhhbiAqeCouCitJZiAqQyogaXMgdHJ1ZSwgKngqIGlzIGV2YWx1YXRlZCBhbmQgaXRzIHZhbHVlIGlzIHJldHVybmVkOyBvdGhlcndpc2UsICp5KiBpcwogZXZhbHVhdGVkIGFuZCBpdHMgdmFsdWUgaXMgcmV0dXJuZWQuCiAKIFNlZSA6cGVwOmAzMDhgIGZvciBtb3JlIGRldGFpbHMgYWJvdXQgY29uZGl0aW9uYWwgZXhwcmVzc2lvbnMuCkBAIC0xMjQ0LDEwICsxMzYzLDkgQEAKICAgIGxhbWJkYV9leHByOiAibGFtYmRhIiBbYHBhcmFtZXRlcl9saXN0YF06IGBleHByZXNzaW9uYAogICAgbGFtYmRhX2V4cHJfbm9jb25kOiAibGFtYmRhIiBbYHBhcmFtZXRlcl9saXN0YF06IGBleHByZXNzaW9uX25vY29uZGAKIAotTGFtYmRhIGV4cHJlc3Npb25zIChzb21ldGltZXMgY2FsbGVkIGxhbWJkYSBmb3JtcykgaGF2ZSB0aGUgc2FtZSBzeW50YWN0aWMgcG9zaXRpb24gYXMKLWV4cHJlc3Npb25zLiAgVGhleSBhcmUgYSBzaG9ydGhhbmQgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnM7IHRoZSBleHByZXNzaW9uCi1gYGxhbWJkYSBhcmd1bWVudHM6IGV4cHJlc3Npb25gYCB5aWVsZHMgYSBmdW5jdGlvbiBvYmplY3QuICBUaGUgdW5uYW1lZCBvYmplY3QKLWJlaGF2ZXMgbGlrZSBhIGZ1bmN0aW9uIG9iamVjdCBkZWZpbmVkIHdpdGggOjoKK0xhbWJkYSBleHByZXNzaW9ucyAoc29tZXRpbWVzIGNhbGxlZCBsYW1iZGEgZm9ybXMpIGFyZSB1c2VkIHRvIGNyZWF0ZSBhbm9ueW1vdXMKK2Z1bmN0aW9ucy4gVGhlIGV4cHJlc3Npb24gYGBsYW1iZGEgYXJndW1lbnRzOiBleHByZXNzaW9uYGAgeWllbGRzIGEgZnVuY3Rpb24KK29iamVjdC4gIFRoZSB1bm5hbWVkIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBmdW5jdGlvbiBvYmplY3QgZGVmaW5lZCB3aXRoIDo6CiAKICAgIGRlZiA8bGFtYmRhPihhcmd1bWVudHMpOgogICAgICAgIHJldHVybiBleHByZXNzaW9uCkBAIC0xMzEwLDEzICsxNDI4LDE1IEBACiAKIC4uIGluZGV4OjogcGFpcjogb3BlcmF0b3I7IHByZWNlZGVuY2UKIAotVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlcyBpbiBQeXRob24sIGZyb20gbG93ZXN0CitUaGUgZm9sbG93aW5nIHRhYmxlIHN1bW1hcml6ZXMgdGhlIG9wZXJhdG9yIHByZWNlZGVuY2UgaW4gUHl0aG9uLCBmcm9tIGxvd2VzdAogcHJlY2VkZW5jZSAobGVhc3QgYmluZGluZykgdG8gaGlnaGVzdCBwcmVjZWRlbmNlIChtb3N0IGJpbmRpbmcpLiAgT3BlcmF0b3JzIGluCiB0aGUgc2FtZSBib3ggaGF2ZSB0aGUgc2FtZSBwcmVjZWRlbmNlLiAgVW5sZXNzIHRoZSBzeW50YXggaXMgZXhwbGljaXRseSBnaXZlbiwKIG9wZXJhdG9ycyBhcmUgYmluYXJ5LiAgT3BlcmF0b3JzIGluIHRoZSBzYW1lIGJveCBncm91cCBsZWZ0IHRvIHJpZ2h0IChleGNlcHQgZm9yCi1jb21wYXJpc29ucywgaW5jbHVkaW5nIHRlc3RzLCB3aGljaCBhbGwgaGF2ZSB0aGUgc2FtZSBwcmVjZWRlbmNlIGFuZCBjaGFpbiBmcm9tCi1sZWZ0IHRvIHJpZ2h0IC0tLSBzZWUgc2VjdGlvbiA6cmVmOmBjb21wYXJpc29uc2AgLS0tIGFuZCBleHBvbmVudGlhdGlvbiwgd2hpY2gKLWdyb3VwcyBmcm9tIHJpZ2h0IHRvIGxlZnQpLgorZXhwb25lbnRpYXRpb24sIHdoaWNoIGdyb3VwcyBmcm9tIHJpZ2h0IHRvIGxlZnQpLgorCitOb3RlIHRoYXQgY29tcGFyaXNvbnMsIG1lbWJlcnNoaXAgdGVzdHMsIGFuZCBpZGVudGl0eSB0ZXN0cywgYWxsIGhhdmUgdGhlIHNhbWUKK3ByZWNlZGVuY2UgYW5kIGhhdmUgYSBsZWZ0LXRvLXJpZ2h0IGNoYWluaW5nIGZlYXR1cmUgYXMgZGVzY3JpYmVkIGluIHRoZQorOnJlZjpgY29tcGFyaXNvbnNgIHNlY3Rpb24uCiAKIAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCkBAIC0xMzc5LDEyICsxNDk5LDI0IEBACiAgICBjYXNlcywgUHl0aG9uIHJldHVybnMgdGhlIGxhdHRlciByZXN1bHQsIGluIG9yZGVyIHRvIHByZXNlcnZlIHRoYXQKICAgIGBgZGl2bW9kKHgseSlbMF0gKiB5ICsgeCAlIHlgYCBiZSB2ZXJ5IGNsb3NlIHRvIGBgeGBgLgogCi0uLiBbI10gV2hpbGUgY29tcGFyaXNvbnMgYmV0d2VlbiBzdHJpbmdzIG1ha2Ugc2Vuc2UgYXQgdGhlIGJ5dGUgbGV2ZWwsIHRoZXkgbWF5Ci0gICBiZSBjb3VudGVyLWludHVpdGl2ZSB0byB1c2Vycy4gIEZvciBleGFtcGxlLCB0aGUgc3RyaW5ncyBgYCJcdTAwQzciYGAgYW5kCi0gICBgYCJcdTAzMjdcdTAwNDMiYGAgY29tcGFyZSBkaWZmZXJlbnRseSwgZXZlbiB0aG91Z2ggdGhleSBib3RoIHJlcHJlc2VudCB0aGUKLSAgIHNhbWUgdW5pY29kZSBjaGFyYWN0ZXIgKExBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBKS4gIFRvIGNvbXBhcmUKLSAgIHN0cmluZ3MgaW4gYSBodW1hbiByZWNvZ25pemFibGUgd2F5LCBjb21wYXJlIHVzaW5nCi0gICA6ZnVuYzpgdW5pY29kZWRhdGEubm9ybWFsaXplYC4KKy4uIFsjXSBUaGUgVW5pY29kZSBzdGFuZGFyZCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gOmRmbjpgY29kZSBwb2ludHNgCisgICAoZS5nLiBVKzAwNDEpIGFuZCA6ZGZuOmBhYnN0cmFjdCBjaGFyYWN0ZXJzYCAoZS5nLiAiTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSIpLgorICAgV2hpbGUgbW9zdCBhYnN0cmFjdCBjaGFyYWN0ZXJzIGluIFVuaWNvZGUgYXJlIG9ubHkgcmVwcmVzZW50ZWQgdXNpbmcgb25lCisgICBjb2RlIHBvaW50LCB0aGVyZSBpcyBhIG51bWJlciBvZiBhYnN0cmFjdCBjaGFyYWN0ZXJzIHRoYXQgY2FuIGluIGFkZGl0aW9uIGJlCisgICByZXByZXNlbnRlZCB1c2luZyBhIHNlcXVlbmNlIG9mIG1vcmUgdGhhbiBvbmUgY29kZSBwb2ludC4gIEZvciBleGFtcGxlLCB0aGUKKyAgIGFic3RyYWN0IGNoYXJhY3RlciAiTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEiIGNhbiBiZSByZXByZXNlbnRlZAorICAgYXMgYSBzaW5nbGUgOmRmbjpgcHJlY29tcG9zZWQgY2hhcmFjdGVyYCBhdCBjb2RlIHBvc2l0aW9uIFUrMDBDNywgb3IgYXMgYQorICAgc2VxdWVuY2Ugb2YgYSA6ZGZuOmBiYXNlIGNoYXJhY3RlcmAgYXQgY29kZSBwb3NpdGlvbiBVKzAwNDMgKExBVElOIENBUElUQUwKKyAgIExFVFRFUiBDKSwgZm9sbG93ZWQgYnkgYSA6ZGZuOmBjb21iaW5pbmcgY2hhcmFjdGVyYCBhdCBjb2RlIHBvc2l0aW9uIFUrMDMyNworICAgKENPTUJJTklORyBDRURJTExBKS4KKworICAgVGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzIG9uIHN0cmluZ3MgY29tcGFyZSBhdCB0aGUgbGV2ZWwgb2YgVW5pY29kZSBjb2RlCisgICBwb2ludHMuIFRoaXMgbWF5IGJlIGNvdW50ZXItaW50dWl0aXZlIHRvIGh1bWFucy4gIEZvciBleGFtcGxlLAorICAgYGAiXHUwMEM3IiA9PSAiXHUwMDQzXHUwMzI3ImBgIGlzIGBgRmFsc2VgYCwgZXZlbiB0aG91Z2ggYm90aCBzdHJpbmdzCisgICByZXByZXNlbnQgdGhlIHNhbWUgYWJzdHJhY3QgY2hhcmFjdGVyICJMQVRJTiBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQSIuCisKKyAgIFRvIGNvbXBhcmUgc3RyaW5ncyBhdCB0aGUgbGV2ZWwgb2YgYWJzdHJhY3QgY2hhcmFjdGVycyAodGhhdCBpcywgaW4gYSB3YXkKKyAgIGludHVpdGl2ZSB0byBodW1hbnMpLCB1c2UgOmZ1bmM6YHVuaWNvZGVkYXRhLm5vcm1hbGl6ZWAuCiAKIC4uIFsjXSBEdWUgdG8gYXV0b21hdGljIGdhcmJhZ2UtY29sbGVjdGlvbiwgZnJlZSBsaXN0cywgYW5kIHRoZSBkeW5hbWljIG5hdHVyZSBvZgogICAgZGVzY3JpcHRvcnMsIHlvdSBtYXkgbm90aWNlIHNlZW1pbmdseSB1bnVzdWFsIGJlaGF2aW91ciBpbiBjZXJ0YWluIHVzZXMgb2YKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdCBiL0RvYy9yZWZlcmVuY2UvaW1wb3J0LnJzdAppbmRleCBlYjQ5N2ExLi4xNmQyOGQ4IDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2ltcG9ydC5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9pbXBvcnQucnN0CkBAIC0yMDAsNyArMjAwLDcgQEAKIEJld2FyZSB0aG91Z2gsIGFzIGlmIHlvdSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBtb2R1bGUgb2JqZWN0LAogaW52YWxpZGF0ZSBpdHMgY2FjaGUgZW50cnkgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgYW5kIHRoZW4gcmUtaW1wb3J0IHRoZQogbmFtZWQgbW9kdWxlLCB0aGUgdHdvIG1vZHVsZSBvYmplY3RzIHdpbGwgKm5vdCogYmUgdGhlIHNhbWUuIEJ5IGNvbnRyYXN0LAotOmZ1bmM6YGltcC5yZWxvYWRgIHdpbGwgcmV1c2UgdGhlICpzYW1lKiBtb2R1bGUgb2JqZWN0LCBhbmQgc2ltcGx5Cis6ZnVuYzpgaW1wb3J0bGliLnJlbG9hZGAgd2lsbCByZXVzZSB0aGUgKnNhbWUqIG1vZHVsZSBvYmplY3QsIGFuZCBzaW1wbHkKIHJlaW5pdGlhbGlzZSB0aGUgbW9kdWxlIGNvbnRlbnRzIGJ5IHJlcnVubmluZyB0aGUgbW9kdWxlJ3MgY29kZS4KIAogCkBAIC0yMTAsNiArMjEwLDcgQEAKIC4uIGluZGV4OjoKICAgICBzaW5nbGU6IGZpbmRlcgogICAgIHNpbmdsZTogbG9hZGVyCisgICAgc2luZ2xlOiBtb2R1bGUgc3BlYwogCiBJZiB0aGUgbmFtZWQgbW9kdWxlIGlzIG5vdCBmb3VuZCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLCB0aGVuIFB5dGhvbidzIGltcG9ydAogcHJvdG9jb2wgaXMgaW52b2tlZCB0byBmaW5kIGFuZCBsb2FkIHRoZSBtb2R1bGUuICBUaGlzIHByb3RvY29sIGNvbnNpc3RzIG9mCkBAIC0yMzAsMTMgKzIzMSwxNyBAQAogcmFuZ2UgYW5kIHNjb3BlIG9mIG1vZHVsZSBzZWFyY2hpbmcuCiAKIEZpbmRlcnMgZG8gbm90IGFjdHVhbGx5IGxvYWQgbW9kdWxlcy4gIElmIHRoZXkgY2FuIGZpbmQgdGhlIG5hbWVkIG1vZHVsZSwgdGhleQotcmV0dXJuIGEgOnRlcm06YGxvYWRlcmAsIHdoaWNoIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHRoZW4gaW52b2tlcyB0byBsb2FkIHRoZQotbW9kdWxlIGFuZCBjcmVhdGUgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlIG9iamVjdC4KK3JldHVybiBhIDpkZm46YG1vZHVsZSBzcGVjYCwgYW4gZW5jYXBzdWxhdGlvbiBvZiB0aGUgbW9kdWxlJ3MgaW1wb3J0LXJlbGF0ZWQKK2luZm9ybWF0aW9uLCB3aGljaCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB0aGVuIHVzZXMgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuCiAKIFRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgZGVzY3JpYmUgdGhlIHByb3RvY29sIGZvciBmaW5kZXJzIGFuZCBsb2FkZXJzIGluIG1vcmUKIGRldGFpbCwgaW5jbHVkaW5nIGhvdyB5b3UgY2FuIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgbmV3IG9uZXMgdG8gZXh0ZW5kIHRoZQogaW1wb3J0IG1hY2hpbmVyeS4KIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIFB5dGhvbiwgZmluZGVycyByZXR1cm5lZCA6dGVybTpgbG9hZGVycyA8bG9hZGVyPmAKKyAgIGRpcmVjdGx5LCB3aGVyZWFzIG5vdyB0aGV5IHJldHVybiBtb2R1bGUgc3BlY3Mgd2hpY2ggKmNvbnRhaW4qIGxvYWRlcnMuCisgICBMb2FkZXJzIGFyZSBzdGlsbCB1c2VkIGR1cmluZyBpbXBvcnQgYnV0IGhhdmUgZmV3ZXIgcmVzcG9uc2liaWxpdGllcy4KIAogSW1wb3J0IGhvb2tzCiAtLS0tLS0tLS0tLS0KQEAgLTI3MCw0MSArMjc1LDQzIEBACiAKIC4uIGluZGV4OjoKICAgICBzaW5nbGU6IHN5cy5tZXRhX3BhdGgKLSAgICBwYWlyOiBmaW5kZXI7IGZpbmRfbW9kdWxlCi0gICAgcGFpcjogZmluZGVyOyBmaW5kX2xvYWRlcgorICAgIHBhaXI6IGZpbmRlcjsgZmluZF9zcGVjCiAKIFdoZW4gdGhlIG5hbWVkIG1vZHVsZSBpcyBub3QgZm91bmQgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgUHl0aG9uIG5leHQKIHNlYXJjaGVzIDpkYXRhOmBzeXMubWV0YV9wYXRoYCwgd2hpY2ggY29udGFpbnMgYSBsaXN0IG9mIG1ldGEgcGF0aCBmaW5kZXIKIG9iamVjdHMuICBUaGVzZSBmaW5kZXJzIGFyZSBxdWVyaWVkIGluIG9yZGVyIHRvIHNlZSBpZiB0aGV5IGtub3cgaG93IHRvIGhhbmRsZQogdGhlIG5hbWVkIG1vZHVsZS4gIE1ldGEgcGF0aCBmaW5kZXJzIG11c3QgaW1wbGVtZW50IGEgbWV0aG9kIGNhbGxlZAotOm1ldGg6YGZpbmRfbW9kdWxlKClgIHdoaWNoIHRha2VzIHR3byBhcmd1bWVudHMsIGEgbmFtZSBhbmQgYW4gaW1wb3J0IHBhdGguCi1UaGUgbWV0YSBwYXRoIGZpbmRlciBjYW4gdXNlIGFueSBzdHJhdGVneSBpdCB3YW50cyB0byBkZXRlcm1pbmUgd2hldGhlciBpdCBjYW4KLWhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlIG9yIG5vdC4KKzptZXRoOmB+aW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWMoKWAgd2hpY2ggdGFrZXMgdGhyZWUgYXJndW1lbnRzOgorYSBuYW1lLCBhbiBpbXBvcnQgcGF0aCwgYW5kIChvcHRpb25hbGx5KSBhIHRhcmdldCBtb2R1bGUuICBUaGUgbWV0YSBwYXRoCitmaW5kZXIgY2FuIHVzZSBhbnkgc3RyYXRlZ3kgaXQgd2FudHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgaXQgY2FuIGhhbmRsZQordGhlIG5hbWVkIG1vZHVsZSBvciBub3QuCiAKIElmIHRoZSBtZXRhIHBhdGggZmluZGVyIGtub3dzIGhvdyB0byBoYW5kbGUgdGhlIG5hbWVkIG1vZHVsZSwgaXQgcmV0dXJucyBhCi1sb2FkZXIgb2JqZWN0LiAgSWYgaXQgY2Fubm90IGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlLCBpdCByZXR1cm5zIGBgTm9uZWBgLiAgSWYKK3NwZWMgb2JqZWN0LiAgSWYgaXQgY2Fubm90IGhhbmRsZSB0aGUgbmFtZWQgbW9kdWxlLCBpdCByZXR1cm5zIGBgTm9uZWBgLiAgSWYKIDpkYXRhOmBzeXMubWV0YV9wYXRoYCBwcm9jZXNzaW5nIHJlYWNoZXMgdGhlIGVuZCBvZiBpdHMgbGlzdCB3aXRob3V0IHJldHVybmluZwotYSBsb2FkZXIsIHRoZW4gYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4gIEFueSBvdGhlciBleGNlcHRpb25zIHJhaXNlZAorYSBzcGVjLCB0aGVuIGFuIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuICBBbnkgb3RoZXIgZXhjZXB0aW9ucyByYWlzZWQKIGFyZSBzaW1wbHkgcHJvcGFnYXRlZCB1cCwgYWJvcnRpbmcgdGhlIGltcG9ydCBwcm9jZXNzLgogCi1UaGUgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCBvZiBtZXRhIHBhdGggZmluZGVycyBpcyBjYWxsZWQgd2l0aCB0d28KLWFyZ3VtZW50cy4gIFRoZSBmaXJzdCBpcyB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZwotaW1wb3J0ZWQsIGZvciBleGFtcGxlIGBgZm9vLmJhci5iYXpgYC4gIFRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhlIHBhdGgKLWVudHJpZXMgdG8gdXNlIGZvciB0aGUgbW9kdWxlIHNlYXJjaC4gIEZvciB0b3AtbGV2ZWwgbW9kdWxlcywgdGhlIHNlY29uZAotYXJndW1lbnQgaXMgYGBOb25lYGAsIGJ1dCBmb3Igc3VibW9kdWxlcyBvciBzdWJwYWNrYWdlcywgdGhlIHNlY29uZAotYXJndW1lbnQgaXMgdGhlIHZhbHVlIG9mIHRoZSBwYXJlbnQgcGFja2FnZSdzIGBgX19wYXRoX19gYCBhdHRyaWJ1dGUuIElmCi10aGUgYXBwcm9wcmlhdGUgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZSBjYW5ub3QgYmUgYWNjZXNzZWQsIGFuCi06ZXhjOmBJbXBvcnRFcnJvcmAgaXMgcmFpc2VkLgorVGhlIDptZXRoOmB+aW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWMoKWAgbWV0aG9kIG9mIG1ldGEgcGF0aAorZmluZGVycyBpcyBjYWxsZWQgd2l0aCB0d28gb3IgdGhyZWUgYXJndW1lbnRzLiAgVGhlIGZpcnN0IGlzIHRoZSBmdWxseQorcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCwgZm9yIGV4YW1wbGUgYGBmb28uYmFyLmJhemBgLgorVGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGUgcGF0aCBlbnRyaWVzIHRvIHVzZSBmb3IgdGhlIG1vZHVsZSBzZWFyY2guICBGb3IKK3RvcC1sZXZlbCBtb2R1bGVzLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGBgTm9uZWBgLCBidXQgZm9yIHN1Ym1vZHVsZXMgb3IKK3N1YnBhY2thZ2VzLCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoZSB2YWx1ZSBvZiB0aGUgcGFyZW50IHBhY2thZ2UncworYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZS4gSWYgdGhlIGFwcHJvcHJpYXRlIGBgX19wYXRoX19gYCBhdHRyaWJ1dGUgY2Fubm90CitiZSBhY2Nlc3NlZCwgYW4gOmV4YzpgSW1wb3J0RXJyb3JgIGlzIHJhaXNlZC4gIFRoZSB0aGlyZCBhcmd1bWVudCBpcyBhbgorZXhpc3RpbmcgbW9kdWxlIG9iamVjdCB0aGF0IHdpbGwgYmUgdGhlIHRhcmdldCBvZiBsb2FkaW5nIGxhdGVyLiAgVGhlCitpbXBvcnQgc3lzdGVtIHBhc3NlcyBpbiBhIHRhcmdldCBtb2R1bGUgb25seSBkdXJpbmcgcmVsb2FkLgogCiBUaGUgbWV0YSBwYXRoIG1heSBiZSB0cmF2ZXJzZWQgbXVsdGlwbGUgdGltZXMgZm9yIGEgc2luZ2xlIGltcG9ydCByZXF1ZXN0LgogRm9yIGV4YW1wbGUsIGFzc3VtaW5nIG5vbmUgb2YgdGhlIG1vZHVsZXMgaW52b2x2ZWQgaGFzIGFscmVhZHkgYmVlbiBjYWNoZWQsCiBpbXBvcnRpbmcgYGBmb28uYmFyLmJhemBgIHdpbGwgZmlyc3QgcGVyZm9ybSBhIHRvcCBsZXZlbCBpbXBvcnQsIGNhbGxpbmcKLWBgbXBmLmZpbmRfbW9kdWxlKCJmb28iLCBOb25lKWBgIG9uIGVhY2ggbWV0YSBwYXRoIGZpbmRlciAoYGBtcGZgYCkuIEFmdGVyCitgYG1wZi5maW5kX3NwZWMoImZvbyIsIE5vbmUsIE5vbmUpYGAgb24gZWFjaCBtZXRhIHBhdGggZmluZGVyIChgYG1wZmBgKS4gQWZ0ZXIKIGBgZm9vYGAgaGFzIGJlZW4gaW1wb3J0ZWQsIGBgZm9vLmJhcmBgIHdpbGwgYmUgaW1wb3J0ZWQgYnkgdHJhdmVyc2luZyB0aGUKIG1ldGEgcGF0aCBhIHNlY29uZCB0aW1lLCBjYWxsaW5nCi1gYG1wZi5maW5kX21vZHVsZSgiZm9vLmJhciIsIGZvby5fX3BhdGhfXylgYC4gT25jZSBgYGZvby5iYXJgYCBoYXMgYmVlbgorYGBtcGYuZmluZF9zcGVjKCJmb28uYmFyIiwgZm9vLl9fcGF0aF9fLCBOb25lKWBgLiBPbmNlIGBgZm9vLmJhcmBgIGhhcyBiZWVuCiBpbXBvcnRlZCwgdGhlIGZpbmFsIHRyYXZlcnNhbCB3aWxsIGNhbGwKLWBgbXBmLmZpbmRfbW9kdWxlKCJmb28uYmFyLmJheiIsIGZvby5iYXIuX19wYXRoX18pYGAuCitgYG1wZi5maW5kX3NwZWMoImZvby5iYXIuYmF6IiwgZm9vLmJhci5fX3BhdGhfXywgTm9uZSlgYC4KIAogU29tZSBtZXRhIHBhdGggZmluZGVycyBvbmx5IHN1cHBvcnQgdG9wIGxldmVsIGltcG9ydHMuIFRoZXNlIGltcG9ydGVycyB3aWxsCiBhbHdheXMgcmV0dXJuIGBgTm9uZWBgIHdoZW4gYW55dGhpbmcgb3RoZXIgdGhhbiBgYE5vbmVgYCBpcyBwYXNzZWQgYXMgdGhlCkBAIC0zMTUsMTI5ICszMjIsMjc0IEBACiBtb2R1bGVzLCBhbmQgb25lIHRoYXQga25vd3MgaG93IHRvIGltcG9ydCBtb2R1bGVzIGZyb20gYW4gOnRlcm06YGltcG9ydCBwYXRoYAogKGkuZS4gdGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmApLgogCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVGhlIDptZXRoOmB+aW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWNgIG1ldGhvZCBvZiBtZXRhIHBhdGgKKyAgIGZpbmRlcnMgcmVwbGFjZWQgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfbW9kdWxlYCwgd2hpY2gKKyAgIGlzIG5vdyBkZXByZWNhdGVkLiAgV2hpbGUgaXQgd2lsbCBjb250aW51ZSB0byB3b3JrIHdpdGhvdXQgY2hhbmdlLCB0aGUKKyAgIGltcG9ydCBtYWNoaW5lcnkgd2lsbCB0cnkgaXQgb25seSBpZiB0aGUgZmluZGVyIGRvZXMgbm90IGltcGxlbWVudAorICAgYGBmaW5kX3NwZWMoKWBgLgogCi1Mb2FkZXJzCisKK0xvYWRpbmcKID09PT09PT0KIAotSWYgYW5kIHdoZW4gYSBtb2R1bGUgbG9hZGVyIGlzIGZvdW5kIGl0cwotOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5sb2FkX21vZHVsZWAgbWV0aG9kIGlzIGNhbGxlZCwgd2l0aCBhIHNpbmdsZQotYXJndW1lbnQsIHRoZSBmdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkLiAgVGhpcyBtZXRob2QKLWhhcyBzZXZlcmFsIHJlc3BvbnNpYmlsaXRpZXMsIGFuZCBzaG91bGQgcmV0dXJuIHRoZSBtb2R1bGUgb2JqZWN0IGl0IGhhcwotbG9hZGVkIFsjZm5sb11fLiAgSWYgaXQgY2Fubm90IGxvYWQgdGhlIG1vZHVsZSwgaXQgc2hvdWxkIHJhaXNlIGFuCi06ZXhjOmBJbXBvcnRFcnJvcmAsIGFsdGhvdWdoIGFueSBvdGhlciBleGNlcHRpb24gcmFpc2VkIGR1cmluZwotOm1ldGg6YGxvYWRfbW9kdWxlKClgIHdpbGwgYmUgcHJvcGFnYXRlZC4KK0lmIGFuZCB3aGVuIGEgbW9kdWxlIHNwZWMgaXMgZm91bmQsIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdXNlIGl0IChhbmQKK3RoZSBsb2FkZXIgaXQgY29udGFpbnMpIHdoZW4gbG9hZGluZyB0aGUgbW9kdWxlLiAgSGVyZSBpcyBhbiBhcHByb3hpbWF0aW9uCitvZiB3aGF0IGhhcHBlbnMgZHVyaW5nIHRoZSBsb2FkaW5nIHBvcnRpb24gb2YgaW1wb3J0OjoKIAotSW4gbWFueSBjYXNlcywgdGhlIGZpbmRlciBhbmQgbG9hZGVyIGNhbiBiZSB0aGUgc2FtZSBvYmplY3Q7IGluIHN1Y2ggY2FzZXMgdGhlCi06bWV0aDpgZmluZGVyLmZpbmRfbW9kdWxlKClgIHdvdWxkIGp1c3QgcmV0dXJuIGBgc2VsZmBgLgorICAgIG1vZHVsZSA9IE5vbmUKKyAgICBpZiBzcGVjLmxvYWRlciBpcyBub3QgTm9uZSBhbmQgaGFzYXR0cihzcGVjLmxvYWRlciwgJ2NyZWF0ZV9tb2R1bGUnKToKKyAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIuY3JlYXRlX21vZHVsZShzcGVjKQorICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICBtb2R1bGUgPSBNb2R1bGVUeXBlKHNwZWMubmFtZSkKKyAgICAjIFRoZSBpbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcyBnZXQgc2V0IGhlcmU6CisgICAgX2luaXRfbW9kdWxlX2F0dHJzKHNwZWMsIG1vZHVsZSkKIAotTG9hZGVycyBtdXN0IHNhdGlzZnkgdGhlIGZvbGxvd2luZyByZXF1aXJlbWVudHM6CisgICAgaWYgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgbmFtZXNwYWNlIHBhY2thZ2UKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0gPSBtb2R1bGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdW5zdXBwb3J0ZWQKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisgICAgZWxpZiBub3QgaGFzYXR0cihzcGVjLmxvYWRlciwgJ2V4ZWNfbW9kdWxlJyk6CisgICAgICAgIG1vZHVsZSA9IHNwZWMubG9hZGVyLmxvYWRfbW9kdWxlKHNwZWMubmFtZSkKKyAgICAgICAgIyBTZXQgX19sb2FkZXJfXyBhbmQgX19wYWNrYWdlX18gaWYgbWlzc2luZy4KKyAgICBlbHNlOgorICAgICAgICBzeXMubW9kdWxlc1tzcGVjLm5hbWVdID0gbW9kdWxlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwZWMubG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW3NwZWMubmFtZV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByYWlzZQorICAgIHJldHVybiBzeXMubW9kdWxlc1tzcGVjLm5hbWVdCisKK05vdGUgdGhlIGZvbGxvd2luZyBkZXRhaWxzOgogCiAgKiBJZiB0aGVyZSBpcyBhbiBleGlzdGluZyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4KLSAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZSBsb2FkZXIgbXVzdCB1c2UgdGhhdCBleGlzdGluZyBtb2R1bGUuICAoT3RoZXJ3aXNlLAotICAgOmZ1bmM6YGltcC5yZWxvYWRgIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5LikgIElmIHRoZSBuYW1lZCBtb2R1bGUgZG9lcwotICAgbm90IGV4aXN0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZSBsb2FkZXIgbXVzdCBjcmVhdGUgYSBuZXcgbW9kdWxlCi0gICBvYmplY3QgYW5kIGFkZCBpdCB0byA6ZGF0YTpgc3lzLm1vZHVsZXNgLgorICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgaW1wb3J0IHdpbGwgaGF2ZSBhbHJlYWR5IHJldHVybmVkIGl0LgogCi0gICBOb3RlIHRoYXQgdGhlIG1vZHVsZSAqbXVzdCogZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCBiZWZvcmUgdGhlIGxvYWRlcgorICogVGhlIG1vZHVsZSB3aWxsIGV4aXN0IGluIDpkYXRhOmBzeXMubW9kdWxlc2AgYmVmb3JlIHRoZSBsb2FkZXIKICAgIGV4ZWN1dGVzIHRoZSBtb2R1bGUgY29kZS4gIFRoaXMgaXMgY3J1Y2lhbCBiZWNhdXNlIHRoZSBtb2R1bGUgY29kZSBtYXkKICAgIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBpbXBvcnQgaXRzZWxmOyBhZGRpbmcgaXQgdG8gOmRhdGE6YHN5cy5tb2R1bGVzYAogICAgYmVmb3JlaGFuZCBwcmV2ZW50cyB1bmJvdW5kZWQgcmVjdXJzaW9uIGluIHRoZSB3b3JzdCBjYXNlIGFuZCBtdWx0aXBsZQogICAgbG9hZGluZyBpbiB0aGUgYmVzdC4KIAotICAgSWYgbG9hZGluZyBmYWlscywgdGhlIGxvYWRlciBtdXN0IHJlbW92ZSBhbnkgbW9kdWxlcyBpdCBoYXMgaW5zZXJ0ZWQgaW50bwotICAgOmRhdGE6YHN5cy5tb2R1bGVzYCwgYnV0IGl0IG11c3QgcmVtb3ZlICoqb25seSoqIHRoZSBmYWlsaW5nIG1vZHVsZSwgYW5kCi0gICBvbmx5IGlmIHRoZSBsb2FkZXIgaXRzZWxmIGhhcyBsb2FkZWQgaXQgZXhwbGljaXRseS4gIEFueSBtb2R1bGUgYWxyZWFkeSBpbgotICAgdGhlIDpkYXRhOmBzeXMubW9kdWxlc2AgY2FjaGUsIGFuZCBhbnkgbW9kdWxlIHRoYXQgd2FzIHN1Y2Nlc3NmdWxseSBsb2FkZWQKLSAgIGFzIGEgc2lkZS1lZmZlY3QsIG11c3QgcmVtYWluIGluIHRoZSBjYWNoZS4KKyAqIElmIGxvYWRpbmcgZmFpbHMsIHRoZSBmYWlsaW5nIG1vZHVsZSAtLSBhbmQgb25seSB0aGUgZmFpbGluZyBtb2R1bGUgLS0KKyAgIGdldHMgcmVtb3ZlZCBmcm9tIDpkYXRhOmBzeXMubW9kdWxlc2AuICBBbnkgbW9kdWxlIGFscmVhZHkgaW4gdGhlCisgICA6ZGF0YTpgc3lzLm1vZHVsZXNgIGNhY2hlLCBhbmQgYW55IG1vZHVsZSB0aGF0IHdhcyBzdWNjZXNzZnVsbHkgbG9hZGVkCisgICBhcyBhIHNpZGUtZWZmZWN0LCBtdXN0IHJlbWFpbiBpbiB0aGUgY2FjaGUuICBUaGlzIGNvbnRyYXN0cyB3aXRoCisgICByZWxvYWRpbmcgd2hlcmUgZXZlbiB0aGUgZmFpbGluZyBtb2R1bGUgaXMgbGVmdCBpbiA6ZGF0YTpgc3lzLm1vZHVsZXNgLgogCi0gKiBUaGUgbG9hZGVyIG1heSBzZXQgdGhlIGBgX19maWxlX19gYCBhdHRyaWJ1dGUgb2YgdGhlIG1vZHVsZS4gIElmIHNldCwgdGhpcwotICAgYXR0cmlidXRlJ3MgdmFsdWUgbXVzdCBiZSBhIHN0cmluZy4gIFRoZSBsb2FkZXIgbWF5IG9wdCB0byBsZWF2ZQotICAgYGBfX2ZpbGVfX2BgIHVuc2V0IGlmIGl0IGhhcyBubyBzZW1hbnRpYyBtZWFuaW5nIChlLmcuIGEgbW9kdWxlIGxvYWRlZCBmcm9tCi0gICBhIGRhdGFiYXNlKS4gSWYgYGBfX2ZpbGVfX2BgIGlzIHNldCwgaXQgbWF5IGFsc28gYmUgYXBwcm9wcmlhdGUgdG8gc2V0IHRoZQotICAgYGBfX2NhY2hlZF9fYGAgYXR0cmlidXRlIHdoaWNoIGlzIHRoZSBwYXRoIHRvIGFueSBjb21waWxlZCB2ZXJzaW9uIG9mIHRoZQotICAgY29kZSAoZS5nLiBieXRlLWNvbXBpbGVkIGZpbGUpLiBUaGUgZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0IHRvIHNldCB0aGlzCi0gICBhdHRyaWJ1dGU7IHRoZSBwYXRoIGNhbiBzaW1wbHkgcG9pbnQgdG8gd2hldGhlciB0aGUgY29tcGlsZWQgZmlsZSB3b3VsZAotICAgZXhpc3QgKHNlZSA6cGVwOmAzMTQ3YCkuCisgKiBBZnRlciB0aGUgbW9kdWxlIGlzIGNyZWF0ZWQgYnV0IGJlZm9yZSBleGVjdXRpb24sIHRoZSBpbXBvcnQgbWFjaGluZXJ5CisgICBzZXRzIHRoZSBpbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcyAoIl9pbml0X21vZHVsZV9hdHRycyIgaW4KKyAgIHRoZSBwc2V1ZG8tY29kZSBleGFtcGxlIGFib3ZlKSwgYXMgc3VtbWFyaXplZCBpbiBhCisgICA6cmVmOmBsYXRlciBzZWN0aW9uIDxpbXBvcnQtbW9kLWF0dHJzPmAuCiAKLSAqIFRoZSBsb2FkZXIgbWF5IHNldCB0aGUgYGBfX25hbWVfX2BgIGF0dHJpYnV0ZSBvZiB0aGUgbW9kdWxlLiAgV2hpbGUgbm90Ci0gICByZXF1aXJlZCwgc2V0dGluZyB0aGlzIGF0dHJpYnV0ZSBpcyBoaWdobHkgcmVjb21tZW5kZWQgc28gdGhhdCB0aGUKLSAgIDptZXRoOmByZXByKClgIG9mIHRoZSBtb2R1bGUgaXMgbW9yZSBpbmZvcm1hdGl2ZS4KKyAqIE1vZHVsZSBleGVjdXRpb24gaXMgdGhlIGtleSBtb21lbnQgb2YgbG9hZGluZyBpbiB3aGljaCB0aGUgbW9kdWxlJ3MKKyAgIG5hbWVzcGFjZSBnZXRzIHBvcHVsYXRlZC4gIEV4ZWN1dGlvbiBpcyBlbnRpcmVseSBkZWxlZ2F0ZWQgdG8gdGhlCisgICBsb2FkZXIsIHdoaWNoIGdldHMgdG8gZGVjaWRlIHdoYXQgZ2V0cyBwb3B1bGF0ZWQgYW5kIGhvdy4KIAotICogSWYgdGhlIG1vZHVsZSBpcyBhIHBhY2thZ2UgKGVpdGhlciByZWd1bGFyIG9yIG5hbWVzcGFjZSksIHRoZSBsb2FkZXIgbXVzdAotICAgc2V0IHRoZSBtb2R1bGUgb2JqZWN0J3MgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZS4gIFRoZSB2YWx1ZSBtdXN0IGJlCi0gICBpdGVyYWJsZSwgYnV0IG1heSBiZSBlbXB0eSBpZiBgYF9fcGF0aF9fYGAgaGFzIG5vIGZ1cnRoZXIgc2lnbmlmaWNhbmNlCi0gICB0byB0aGUgbG9hZGVyLiBJZiBgYF9fcGF0aF9fYGAgaXMgbm90IGVtcHR5LCBpdCBtdXN0IHByb2R1Y2Ugc3RyaW5ncwotICAgd2hlbiBpdGVyYXRlZCBvdmVyLiBNb3JlIGRldGFpbHMgb24gdGhlIHNlbWFudGljcyBvZiBgYF9fcGF0aF9fYGAgYXJlCi0gICBnaXZlbiA6cmVmOmBiZWxvdyA8cGFja2FnZS1wYXRoLXJ1bGVzPmAuCisgKiBUaGUgbW9kdWxlIGNyZWF0ZWQgZHVyaW5nIGxvYWRpbmcgYW5kIHBhc3NlZCB0byBleGVjX21vZHVsZSgpIG1heQorICAgbm90IGJlIHRoZSBvbmUgcmV0dXJuZWQgYXQgdGhlIGVuZCBvZiBpbXBvcnQgWyNmbmxvXV8uCiAKLSAqIFRoZSBgYF9fbG9hZGVyX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIGxvYWRlciBvYmplY3QgdGhhdCBsb2FkZWQKLSAgIHRoZSBtb2R1bGUuICBUaGlzIGlzIG1vc3RseSBmb3IgaW50cm9zcGVjdGlvbiBhbmQgcmVsb2FkaW5nLCBidXQgY2FuIGJlCi0gICB1c2VkIGZvciBhZGRpdGlvbmFsIGxvYWRlci1zcGVjaWZpYyBmdW5jdGlvbmFsaXR5LCBmb3IgZXhhbXBsZSBnZXR0aW5nCi0gICBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGxvYWRlci4KKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBUaGUgaW1wb3J0IHN5c3RlbSBoYXMgdGFrZW4gb3ZlciB0aGUgYm9pbGVycGxhdGUgcmVzcG9uc2liaWxpdGllcyBvZgorICAgbG9hZGVycy4gIFRoZXNlIHdlcmUgcHJldmlvdXNseSBwZXJmb3JtZWQgYnkgdGhlCisgICA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgIG1ldGhvZC4KIAotICogVGhlIG1vZHVsZSdzIGBgX19wYWNrYWdlX19gYCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHNldC4gIEl0cyB2YWx1ZSBtdXN0IGJlIGEKLSAgIHN0cmluZywgYnV0IGl0IGNhbiBiZSB0aGUgc2FtZSB2YWx1ZSBhcyBpdHMgYGBfX25hbWVfX2BgLiAgSWYgdGhlIGF0dHJpYnV0ZQotICAgaXMgc2V0IHRvIGBgTm9uZWBgIG9yIGlzIG1pc3NpbmcsIHRoZSBpbXBvcnQgc3lzdGVtIHdpbGwgZmlsbCBpdCBpbiB3aXRoIGEKLSAgIG1vcmUgYXBwcm9wcmlhdGUgdmFsdWUuICBXaGVuIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBpdHMgYGBfX3BhY2thZ2VfX2BgCi0gICB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvIGl0cyBgYF9fbmFtZV9fYGAuICBXaGVuIHRoZSBtb2R1bGUgaXMgbm90IGEgcGFja2FnZSwKLSAgIGBgX19wYWNrYWdlX19gYCBzaG91bGQgYmUgc2V0IHRvIHRoZSBlbXB0eSBzdHJpbmcgZm9yIHRvcC1sZXZlbCBtb2R1bGVzLCBvcgotICAgZm9yIHN1Ym1vZHVsZXMsIHRvIHRoZSBwYXJlbnQgcGFja2FnZSdzIG5hbWUuICBTZWUgOnBlcDpgMzY2YCBmb3IgZnVydGhlcgotICAgZGV0YWlscy4KK0xvYWRlcnMKKy0tLS0tLS0KIAotICAgVGhpcyBhdHRyaWJ1dGUgaXMgdXNlZCBpbnN0ZWFkIG9mIGBgX19uYW1lX19gYCB0byBjYWxjdWxhdGUgZXhwbGljaXQKLSAgIHJlbGF0aXZlIGltcG9ydHMgZm9yIG1haW4gbW9kdWxlcywgYXMgZGVmaW5lZCBpbiA6cGVwOmAzNjZgLgorTW9kdWxlIGxvYWRlcnMgcHJvdmlkZSB0aGUgY3JpdGljYWwgZnVuY3Rpb24gb2YgbG9hZGluZzogbW9kdWxlIGV4ZWN1dGlvbi4KK1RoZSBpbXBvcnQgbWFjaGluZXJ5IGNhbGxzIHRoZSA6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIuZXhlY19tb2R1bGVgCittZXRob2Qgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCwgdGhlIG1vZHVsZSBvYmplY3QgdG8gZXhlY3V0ZS4gIEFueSB2YWx1ZQorcmV0dXJuZWQgZnJvbSA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmV4ZWNfbW9kdWxlYCBpcyBpZ25vcmVkLgorCitMb2FkZXJzIG11c3Qgc2F0aXNmeSB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czoKIAogICogSWYgdGhlIG1vZHVsZSBpcyBhIFB5dGhvbiBtb2R1bGUgKGFzIG9wcG9zZWQgdG8gYSBidWlsdC1pbiBtb2R1bGUgb3IgYQogICAgZHluYW1pY2FsbHkgbG9hZGVkIGV4dGVuc2lvbiksIHRoZSBsb2FkZXIgc2hvdWxkIGV4ZWN1dGUgdGhlIG1vZHVsZSdzIGNvZGUKICAgIGluIHRoZSBtb2R1bGUncyBnbG9iYWwgbmFtZSBzcGFjZSAoYGBtb2R1bGUuX19kaWN0X19gYCkuCiAKKyAqIElmIHRoZSBsb2FkZXIgY2Fubm90IGV4ZWN1dGUgdGhlIG1vZHVsZSwgaXQgc2hvdWxkIHJhaXNlIGFuCisgICA6ZXhjOmBJbXBvcnRFcnJvcmAsIGFsdGhvdWdoIGFueSBvdGhlciBleGNlcHRpb24gcmFpc2VkIGR1cmluZworICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZWAgd2lsbCBiZSBwcm9wYWdhdGVkLgogCi1Nb2R1bGUgcmVwcnMKLS0tLS0tLS0tLS0tLQorSW4gbWFueSBjYXNlcywgdGhlIGZpbmRlciBhbmQgbG9hZGVyIGNhbiBiZSB0aGUgc2FtZSBvYmplY3Q7IGluIHN1Y2ggY2FzZXMgdGhlCis6bWV0aDpgfmltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9zcGVjYCBtZXRob2Qgd291bGQganVzdCByZXR1cm4gYQorc3BlYyB3aXRoIHRoZSBsb2FkZXIgc2V0IHRvIGBgc2VsZmBgLgogCi1CeSBkZWZhdWx0LCBhbGwgbW9kdWxlcyBoYXZlIGEgdXNhYmxlIHJlcHIsIGhvd2V2ZXIgZGVwZW5kaW5nIG9uIHRoZQotYXR0cmlidXRlcyBzZXQgYWJvdmUsIGFuZCBob29rcyBpbiB0aGUgbG9hZGVyLCB5b3UgY2FuIG1vcmUgZXhwbGljaXRseSBjb250cm9sCi10aGUgcmVwciBvZiBtb2R1bGUgb2JqZWN0cy4KK01vZHVsZSBsb2FkZXJzIG1heSBvcHQgaW4gdG8gY3JlYXRpbmcgdGhlIG1vZHVsZSBvYmplY3QgZHVyaW5nIGxvYWRpbmcKK2J5IGltcGxlbWVudGluZyBhIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIuY3JlYXRlX21vZHVsZWAgbWV0aG9kLgorSXQgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUgbW9kdWxlIHNwZWMsIGFuZCByZXR1cm5zIHRoZSBuZXcgbW9kdWxlIG9iamVjdAordG8gdXNlIGR1cmluZyBsb2FkaW5nLiAgYGBjcmVhdGVfbW9kdWxlKClgYCBkb2VzIG5vdCBuZWVkIHRvIHNldCBhbnkgYXR0cmlidXRlcworb24gdGhlIG1vZHVsZSBvYmplY3QuICBJZiB0aGUgbG9hZGVyIGRvZXMgbm90IGRlZmluZSBgYGNyZWF0ZV9tb2R1bGUoKWBgLCB0aGUKK2ltcG9ydCBtYWNoaW5lcnkgd2lsbCBjcmVhdGUgdGhlIG5ldyBtb2R1bGUgaXRzZWxmLgogCi1Mb2FkZXJzIG1heSBpbXBsZW1lbnQgYSA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgbWV0aG9kIHdoaWNoIHRha2VzIGEgc2luZ2xlCi1hcmd1bWVudCwgdGhlIG1vZHVsZSBvYmplY3QuICBXaGVuIGBgcmVwcihtb2R1bGUpYGAgaXMgY2FsbGVkIGZvciBhIG1vZHVsZQotd2l0aCBhIGxvYWRlciBzdXBwb3J0aW5nIHRoaXMgcHJvdG9jb2wsIHdoYXRldmVyIGlzIHJldHVybmVkIGZyb20KLWBgbW9kdWxlLl9fbG9hZGVyX18ubW9kdWxlX3JlcHIobW9kdWxlKWBgIGlzIHJldHVybmVkIGFzIHRoZSBtb2R1bGUncyByZXByCi13aXRob3V0IGZ1cnRoZXIgcHJvY2Vzc2luZy4gIFRoaXMgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcuCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKyAgIFRoZSBjcmVhdGVfbW9kdWxlKCkgbWV0aG9kIG9mIGxvYWRlcnMuCiAKLUlmIHRoZSBtb2R1bGUgaGFzIG5vIGBgX19sb2FkZXJfX2BgIGF0dHJpYnV0ZSwgb3IgdGhlIGxvYWRlciBoYXMgbm8KLTptZXRoOmBtb2R1bGVfcmVwcigpYCBtZXRob2QsIHRoZW4gdGhlIG1vZHVsZSBvYmplY3QgaW1wbGVtZW50YXRpb24gaXRzZWxmCi13aWxsIGNyYWZ0IGEgZGVmYXVsdCByZXByIHVzaW5nIHdoYXRldmVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4gIEl0IHdpbGwKLXRyeSB0byB1c2UgdGhlIGBgbW9kdWxlLl9fbmFtZV9fYGAsIGBgbW9kdWxlLl9fZmlsZV9fYGAsIGFuZAotYGBtb2R1bGUuX19sb2FkZXJfX2BgIGFzIGlucHV0IGludG8gdGhlIHJlcHIsIHdpdGggZGVmYXVsdHMgZm9yIHdoYXRldmVyCi1pbmZvcm1hdGlvbiBpcyBtaXNzaW5nLgorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIFRoZSA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmxvYWRfbW9kdWxlYCBtZXRob2Qgd2FzIHJlcGxhY2VkIGJ5CisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuTG9hZGVyLmV4ZWNfbW9kdWxlYCBhbmQgdGhlIGltcG9ydAorICAgbWFjaGluZXJ5IGFzc3VtZWQgYWxsIHRoZSBib2lsZXJwbGF0ZSByZXNwb25zaWJpbGl0aWVzIG9mIGxvYWRpbmcuCiAKLUhlcmUgYXJlIHRoZSBleGFjdCBydWxlcyB1c2VkOgorICAgRm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyBsb2FkZXJzLCB0aGUgaW1wb3J0IG1hY2hpbmVyeSB3aWxsIHVzZQorICAgdGhlIGBgbG9hZF9tb2R1bGUoKWBgIG1ldGhvZCBvZiBsb2FkZXJzIGlmIGl0IGV4aXN0cyBhbmQgdGhlIGxvYWRlciBkb2VzCisgICBub3QgYWxzbyBpbXBsZW1lbnQgYGBleGVjX21vZHVsZSgpYGAuICBIb3dldmVyLCBgYGxvYWRfbW9kdWxlKClgYCBoYXMgYmVlbgorICAgZGVwcmVjYXRlZCBhbmQgbG9hZGVycyBzaG91bGQgaW1wbGVtZW50IGBgZXhlY19tb2R1bGUoKWBgIGluc3RlYWQuCiAKLSAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX2xvYWRlcl9fYGAgYW5kIHRoYXQgbG9hZGVyIGhhcyBhCi0gICA6bWV0aDpgbW9kdWxlX3JlcHIoKWAgbWV0aG9kLCBjYWxsIGl0IHdpdGggYSBzaW5nbGUgYXJndW1lbnQsIHdoaWNoIGlzIHRoZQotICAgbW9kdWxlIG9iamVjdC4gIFRoZSB2YWx1ZSByZXR1cm5lZCBpcyB1c2VkIGFzIHRoZSBtb2R1bGUncyByZXByLgorICAgVGhlIGBgbG9hZF9tb2R1bGUoKWBgIG1ldGhvZCBtdXN0IGltcGxlbWVudCBhbGwgdGhlIGJvaWxlcnBsYXRlIGxvYWRpbmcKKyAgIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGFib3ZlIGluIGFkZGl0aW9uIHRvIGV4ZWN1dGluZyB0aGUgbW9kdWxlLiAgQWxsCisgICB0aGUgc2FtZSBjb25zdHJhaW50cyBhcHBseSwgd2l0aCBzb21lIGFkZGl0aW9uYWwgY2xhcmlmaWNhdGlvbjoKIAotICogSWYgYW4gZXhjZXB0aW9uIG9jY3VycyBpbiA6bWV0aDpgbW9kdWxlX3JlcHIoKWAsIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0Ci0gICBhbmQgZGlzY2FyZGVkLCBhbmQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBtb2R1bGUncyByZXByIGNvbnRpbnVlcyBhcyBpZgotICAgOm1ldGg6YG1vZHVsZV9yZXByKClgIGRpZCBub3QgZXhpc3QuCisgICAgKiBJZiB0aGVyZSBpcyBhbiBleGlzdGluZyBtb2R1bGUgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG5hbWUgaW4KKyAgICAgIDpkYXRhOmBzeXMubW9kdWxlc2AsIHRoZSBsb2FkZXIgbXVzdCB1c2UgdGhhdCBleGlzdGluZyBtb2R1bGUuCisgICAgICAoT3RoZXJ3aXNlLCA6ZnVuYzpgaW1wb3J0bGliLnJlbG9hZGAgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkuKSAgSWYgdGhlCisgICAgICBuYW1lZCBtb2R1bGUgZG9lcyBub3QgZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCwgdGhlIGxvYWRlcgorICAgICAgbXVzdCBjcmVhdGUgYSBuZXcgbW9kdWxlIG9iamVjdCBhbmQgYWRkIGl0IHRvIDpkYXRhOmBzeXMubW9kdWxlc2AuCiAKLSAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZSwgdGhpcyBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlCi0gICBtb2R1bGUncyByZXByLgorICAgICogVGhlIG1vZHVsZSAqbXVzdCogZXhpc3QgaW4gOmRhdGE6YHN5cy5tb2R1bGVzYCBiZWZvcmUgdGhlIGxvYWRlcgorICAgICAgZXhlY3V0ZXMgdGhlIG1vZHVsZSBjb2RlLCB0byBwcmV2ZW50IHVuYm91bmRlZCByZWN1cnNpb24gb3IgbXVsdGlwbGUKKyAgICAgIGxvYWRpbmcuCiAKLSAqIElmIHRoZSBtb2R1bGUgaGFzIG5vIGBgX19maWxlX19gYCBidXQgZG9lcyBoYXZlIGEgYGBfX2xvYWRlcl9fYGAsIHRoZW4gdGhlCi0gICBsb2FkZXIncyByZXByIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgbW9kdWxlJ3MgcmVwci4KKyAgICAqIElmIGxvYWRpbmcgZmFpbHMsIHRoZSBsb2FkZXIgbXVzdCByZW1vdmUgYW55IG1vZHVsZXMgaXQgaGFzIGluc2VydGVkCisgICAgICBpbnRvIDpkYXRhOmBzeXMubW9kdWxlc2AsIGJ1dCBpdCBtdXN0IHJlbW92ZSAqKm9ubHkqKiB0aGUgZmFpbGluZworICAgICAgbW9kdWxlLCBhbmQgb25seSBpZiB0aGUgbG9hZGVyIGl0c2VsZiBoYXMgbG9hZGVkIGl0IGV4cGxpY2l0bHkuCiAKLSAqIE90aGVyd2lzZSwganVzdCB1c2UgdGhlIG1vZHVsZSdzIGBgX19uYW1lX19gYCBpbiB0aGUgcmVwci4KK1N1Ym1vZHVsZXMKKy0tLS0tLS0tLS0KIAotVGhpcyBleGFtcGxlLCBmcm9tIDpwZXA6YDQyMGAgc2hvd3MgaG93IGEgbG9hZGVyIGNhbiBjcmFmdCBpdHMgb3duIG1vZHVsZQotcmVwcjo6CitXaGVuIGEgc3VibW9kdWxlIGlzIGxvYWRlZCB1c2luZyBhbnkgbWVjaGFuaXNtIChlLmcuIGBgaW1wb3J0bGliYGAgQVBJcywgdGhlCitgYGltcG9ydGBgIG9yIGBgaW1wb3J0LWZyb21gYCBzdGF0ZW1lbnRzLCBvciBidWlsdC1pbiBgYF9faW1wb3J0X18oKWBgKSBhCitiaW5kaW5nIGlzIHBsYWNlZCBpbiB0aGUgcGFyZW50IG1vZHVsZSdzIG5hbWVzcGFjZSB0byB0aGUgc3VibW9kdWxlIG9iamVjdC4KK0ZvciBleGFtcGxlLCBpZiBwYWNrYWdlIGBgc3BhbWBgIGhhcyBhIHN1Ym1vZHVsZSBgYGZvb2BgLCBhZnRlciBpbXBvcnRpbmcKK2Bgc3BhbS5mb29gYCwgYGBzcGFtYGAgd2lsbCBoYXZlIGFuIGF0dHJpYnV0ZSBgYGZvb2BgIHdoaWNoIGlzIGJvdW5kIHRvIHRoZQorc3VibW9kdWxlLiAgTGV0J3Mgc2F5IHlvdSBoYXZlIHRoZSBmb2xsb3dpbmcgZGlyZWN0b3J5IHN0cnVjdHVyZTo6CiAKLSAgICBjbGFzcyBOYW1lc3BhY2VMb2FkZXI6Ci0gICAgICAgIEBjbGFzc21ldGhvZAotICAgICAgICBkZWYgbW9kdWxlX3JlcHIoY2xzLCBtb2R1bGUpOgotICAgICAgICAgICAgcmV0dXJuICI8bW9kdWxlICd7fScgKG5hbWVzcGFjZSk+Ii5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorICAgIHNwYW0vCisgICAgICAgIF9faW5pdF9fLnB5CisgICAgICAgIGZvby5weQorICAgICAgICBiYXIucHkKIAorYW5kIGBgc3BhbS9fX2luaXRfXy5weWBgIGhhcyB0aGUgZm9sbG93aW5nIGxpbmVzIGluIGl0OjoKKworICAgIGZyb20gLmZvbyBpbXBvcnQgRm9vCisgICAgZnJvbSAuYmFyIGltcG9ydCBCYXIKKwordGhlbiBleGVjdXRpbmcgdGhlIGZvbGxvd2luZyBwdXRzIGEgbmFtZSBiaW5kaW5nIHRvIGBgZm9vYGAgYW5kIGBgYmFyYGAgaW4gdGhlCitgYHNwYW1gYCBtb2R1bGU6OgorCisgICAgPj4+IGltcG9ydCBzcGFtCisgICAgPj4+IHNwYW0uZm9vCisgICAgPG1vZHVsZSAnc3BhbS5mb28nIGZyb20gJy90bXAvaW1wb3J0cy9zcGFtL2Zvby5weSc+CisgICAgPj4+IHNwYW0uYmFyCisgICAgPG1vZHVsZSAnc3BhbS5iYXInIGZyb20gJy90bXAvaW1wb3J0cy9zcGFtL2Jhci5weSc+CisKK0dpdmVuIFB5dGhvbidzIGZhbWlsaWFyIG5hbWUgYmluZGluZyBydWxlcyB0aGlzIG1pZ2h0IHNlZW0gc3VycHJpc2luZywgYnV0CitpdCdzIGFjdHVhbGx5IGEgZnVuZGFtZW50YWwgZmVhdHVyZSBvZiB0aGUgaW1wb3J0IHN5c3RlbS4gIFRoZSBpbnZhcmlhbnQKK2hvbGRpbmcgaXMgdGhhdCBpZiB5b3UgaGF2ZSBgYHN5cy5tb2R1bGVzWydzcGFtJ11gYCBhbmQKK2Bgc3lzLm1vZHVsZXNbJ3NwYW0uZm9vJ11gYCAoYXMgeW91IHdvdWxkIGFmdGVyIHRoZSBhYm92ZSBpbXBvcnQpLCB0aGUgbGF0dGVyCittdXN0IGFwcGVhciBhcyB0aGUgYGBmb29gYCBhdHRyaWJ1dGUgb2YgdGhlIGZvcm1lci4KKworTW9kdWxlIHNwZWMKKy0tLS0tLS0tLS0tCisKK1RoZSBpbXBvcnQgbWFjaGluZXJ5IHVzZXMgYSB2YXJpZXR5IG9mIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggbW9kdWxlCitkdXJpbmcgaW1wb3J0LCBlc3BlY2lhbGx5IGJlZm9yZSBsb2FkaW5nLiAgTW9zdCBvZiB0aGUgaW5mb3JtYXRpb24gaXMKK2NvbW1vbiB0byBhbGwgbW9kdWxlcy4gIFRoZSBwdXJwb3NlIG9mIGEgbW9kdWxlJ3Mgc3BlYyBpcyB0byBlbmNhcHN1bGF0ZQordGhpcyBpbXBvcnQtcmVsYXRlZCBpbmZvcm1hdGlvbiBvbiBhIHBlci1tb2R1bGUgYmFzaXMuCisKK1VzaW5nIGEgc3BlYyBkdXJpbmcgaW1wb3J0IGFsbG93cyBzdGF0ZSB0byBiZSB0cmFuc2ZlcnJlZCBiZXR3ZWVuIGltcG9ydAorc3lzdGVtIGNvbXBvbmVudHMsIGUuZy4gYmV0d2VlbiB0aGUgZmluZGVyIHRoYXQgY3JlYXRlcyB0aGUgbW9kdWxlIHNwZWMKK2FuZCB0aGUgbG9hZGVyIHRoYXQgZXhlY3V0ZXMgaXQuICBNb3N0IGltcG9ydGFudGx5LCBpdCBhbGxvd3MgdGhlCitpbXBvcnQgbWFjaGluZXJ5IHRvIHBlcmZvcm0gdGhlIGJvaWxlcnBsYXRlIG9wZXJhdGlvbnMgb2YgbG9hZGluZywKK3doZXJlYXMgd2l0aG91dCBhIG1vZHVsZSBzcGVjIHRoZSBsb2FkZXIgaGFkIHRoYXQgcmVzcG9uc2liaWxpdHkuCisKK1NlZSA6Y2xhc3M6YH5pbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWNgIGZvciBtb3JlIHNwZWNpZmljcyBvbiB3aGF0CitpbmZvcm1hdGlvbiBhIG1vZHVsZSdzIHNwZWMgbWF5IGhvbGQuCisKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorCisuLiBfaW1wb3J0LW1vZC1hdHRyczoKKworSW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBpbXBvcnQgbWFjaGluZXJ5IGZpbGxzIGluIHRoZXNlIGF0dHJpYnV0ZXMgb24gZWFjaCBtb2R1bGUgb2JqZWN0CitkdXJpbmcgbG9hZGluZywgYmFzZWQgb24gdGhlIG1vZHVsZSdzIHNwZWMsIGJlZm9yZSB0aGUgbG9hZGVyIGV4ZWN1dGVzCit0aGUgbW9kdWxlLgorCisuLiBhdHRyaWJ1dGU6OiBfX25hbWVfXworCisgICBUaGUgYGBfX25hbWVfX2BgIGF0dHJpYnV0ZSBtdXN0IGJlIHNldCB0byB0aGUgZnVsbHktcXVhbGlmaWVkIG5hbWUgb2YKKyAgIHRoZSBtb2R1bGUuICBUaGlzIG5hbWUgaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgbW9kdWxlIGluCisgICB0aGUgaW1wb3J0IHN5c3RlbS4KKworLi4gYXR0cmlidXRlOjogX19sb2FkZXJfXworCisgICBUaGUgYGBfX2xvYWRlcl9fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0IHRvIHRoZSBsb2FkZXIgb2JqZWN0IHRoYXQKKyAgIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHVzZWQgd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuICBUaGlzIGlzIG1vc3RseQorICAgZm9yIGludHJvc3BlY3Rpb24sIGJ1dCBjYW4gYmUgdXNlZCBmb3IgYWRkaXRpb25hbCBsb2FkZXItc3BlY2lmaWMKKyAgIGZ1bmN0aW9uYWxpdHksIGZvciBleGFtcGxlIGdldHRpbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBsb2FkZXIuCisKKy4uIGF0dHJpYnV0ZTo6IF9fcGFja2FnZV9fCisKKyAgIFRoZSBtb2R1bGUncyBgYF9fcGFja2FnZV9fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0LiAgSXRzIHZhbHVlIG11c3QKKyAgIGJlIGEgc3RyaW5nLCBidXQgaXQgY2FuIGJlIHRoZSBzYW1lIHZhbHVlIGFzIGl0cyBgYF9fbmFtZV9fYGAuICBXaGVuCisgICB0aGUgbW9kdWxlIGlzIGEgcGFja2FnZSwgaXRzIGBgX19wYWNrYWdlX19gYCB2YWx1ZSBzaG91bGQgYmUgc2V0IHRvCisgICBpdHMgYGBfX25hbWVfX2BgLiAgV2hlbiB0aGUgbW9kdWxlIGlzIG5vdCBhIHBhY2thZ2UsIGBgX19wYWNrYWdlX19gYAorICAgc2hvdWxkIGJlIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIGZvciB0b3AtbGV2ZWwgbW9kdWxlcywgb3IgZm9yCisgICBzdWJtb2R1bGVzLCB0byB0aGUgcGFyZW50IHBhY2thZ2UncyBuYW1lLiAgU2VlIDpwZXA6YDM2NmAgZm9yIGZ1cnRoZXIKKyAgIGRldGFpbHMuCisKKyAgIFRoaXMgYXR0cmlidXRlIGlzIHVzZWQgaW5zdGVhZCBvZiBgYF9fbmFtZV9fYGAgdG8gY2FsY3VsYXRlIGV4cGxpY2l0CisgICByZWxhdGl2ZSBpbXBvcnRzIGZvciBtYWluIG1vZHVsZXMsIGFzIGRlZmluZWQgaW4gOnBlcDpgMzY2YC4KKworLi4gYXR0cmlidXRlOjogX19zcGVjX18KKworICAgVGhlIGBgX19zcGVjX19gYCBhdHRyaWJ1dGUgbXVzdCBiZSBzZXQgdG8gdGhlIG1vZHVsZSBzcGVjIHRoYXQgd2FzCisgICB1c2VkIHdoZW4gaW1wb3J0aW5nIHRoZSBtb2R1bGUuICBUaGlzIGlzIHVzZWQgcHJpbWFyaWx5IGZvcgorICAgaW50cm9zcGVjdGlvbiBhbmQgZHVyaW5nIHJlbG9hZGluZy4gIFNldHRpbmcgYGBfX3NwZWNfX2BgCisgICBhcHByb3ByaWF0ZWx5IGFwcGxpZXMgZXF1YWxseSB0byA6cmVmOmBtb2R1bGVzIGluaXRpYWxpemVkIGR1cmluZworICAgaW50ZXJwcmV0ZXIgc3RhcnR1cCA8cHJvZ3JhbXM+YC4gIFRoZSBvbmUgZXhjZXB0aW9uIGlzIGBgX19tYWluX19gYCwKKyAgIHdoZXJlIGBgX19zcGVjX19gYCBpcyA6cmVmOmBzZXQgdG8gTm9uZSBpbiBzb21lIGNhc2VzIDxtYWluX3NwZWM+YC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKy4uIGF0dHJpYnV0ZTo6IF9fcGF0aF9fCisKKyAgIElmIHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlIChlaXRoZXIgcmVndWxhciBvciBuYW1lc3BhY2UpLCB0aGUgbW9kdWxlCisgICBvYmplY3QncyBgYF9fcGF0aF9fYGAgYXR0cmlidXRlIG11c3QgYmUgc2V0LiAgVGhlIHZhbHVlIG11c3QgYmUKKyAgIGl0ZXJhYmxlLCBidXQgbWF5IGJlIGVtcHR5IGlmIGBgX19wYXRoX19gYCBoYXMgbm8gZnVydGhlciBzaWduaWZpY2FuY2UuCisgICBJZiBgYF9fcGF0aF9fYGAgaXMgbm90IGVtcHR5LCBpdCBtdXN0IHByb2R1Y2Ugc3RyaW5ncyB3aGVuIGl0ZXJhdGVkCisgICBvdmVyLiBNb3JlIGRldGFpbHMgb24gdGhlIHNlbWFudGljcyBvZiBgYF9fcGF0aF9fYGAgYXJlIGdpdmVuCisgICA6cmVmOmBiZWxvdyA8cGFja2FnZS1wYXRoLXJ1bGVzPmAuCisKKyAgIE5vbi1wYWNrYWdlIG1vZHVsZXMgc2hvdWxkIG5vdCBoYXZlIGEgYGBfX3BhdGhfX2BgIGF0dHJpYnV0ZS4KKworLi4gYXR0cmlidXRlOjogX19maWxlX18KKy4uIGF0dHJpYnV0ZTo6IF9fY2FjaGVkX18KKworICAgYGBfX2ZpbGVfX2BgIGlzIG9wdGlvbmFsLiBJZiBzZXQsIHRoaXMgYXR0cmlidXRlJ3MgdmFsdWUgbXVzdCBiZSBhCisgICBzdHJpbmcuICBUaGUgaW1wb3J0IHN5c3RlbSBtYXkgb3B0IHRvIGxlYXZlIGBgX19maWxlX19gYCB1bnNldCBpZiBpdAorICAgaGFzIG5vIHNlbWFudGljIG1lYW5pbmcgKGUuZy4gYSBtb2R1bGUgbG9hZGVkIGZyb20gYSBkYXRhYmFzZSkuCisKKyAgIElmIGBgX19maWxlX19gYCBpcyBzZXQsIGl0IG1heSBhbHNvIGJlIGFwcHJvcHJpYXRlIHRvIHNldCB0aGUKKyAgIGBgX19jYWNoZWRfX2BgIGF0dHJpYnV0ZSB3aGljaCBpcyB0aGUgcGF0aCB0byBhbnkgY29tcGlsZWQgdmVyc2lvbiBvZgorICAgdGhlIGNvZGUgKGUuZy4gYnl0ZS1jb21waWxlZCBmaWxlKS4gVGhlIGZpbGUgZG9lcyBub3QgbmVlZCB0byBleGlzdAorICAgdG8gc2V0IHRoaXMgYXR0cmlidXRlOyB0aGUgcGF0aCBjYW4gc2ltcGx5IHBvaW50IHRvIHdoZXJlIHRoZQorICAgY29tcGlsZWQgZmlsZSB3b3VsZCBleGlzdCAoc2VlIDpwZXA6YDMxNDdgKS4KKworICAgSXQgaXMgYWxzbyBhcHByb3ByaWF0ZSB0byBzZXQgYGBfX2NhY2hlZF9fYGAgd2hlbiBgYF9fZmlsZV9fYGAgaXMgbm90CisgICBzZXQuICBIb3dldmVyLCB0aGF0IHNjZW5hcmlvIGlzIHF1aXRlIGF0eXBpY2FsLiAgVWx0aW1hdGVseSwgdGhlCisgICBsb2FkZXIgaXMgd2hhdCBtYWtlcyB1c2Ugb2YgYGBfX2ZpbGVfX2BgIGFuZC9vciBgYF9fY2FjaGVkX19gYC4gIFNvCisgICBpZiBhIGxvYWRlciBjYW4gbG9hZCBmcm9tIGEgY2FjaGVkIG1vZHVsZSBidXQgb3RoZXJ3aXNlIGRvZXMgbm90IGxvYWQKKyAgIGZyb20gYSBmaWxlLCB0aGF0IGF0eXBpY2FsIHNjZW5hcmlvIG1heSBiZSBhcHByb3ByaWF0ZS4KIAogLi4gX3BhY2thZ2UtcGF0aC1ydWxlczoKIApAQCAtNDYyLDkgKzYxNCw0NyBAQAogYXR0cmlidXRlLCBhbmQgdGhpcyB3YXMgdHlwaWNhbGx5IHRoZSB3YXkgbmFtZXNwYWNlIHBhY2thZ2VzIHdlcmUgaW1wbGVtZW50ZWQKIHByaW9yIHRvIDpwZXA6YDQyMGAuICBXaXRoIHRoZSBhZG9wdGlvbiBvZiA6cGVwOmA0MjBgLCBuYW1lc3BhY2UgcGFja2FnZXMgbm8KIGxvbmdlciBuZWVkIHRvIHN1cHBseSBgYF9faW5pdF9fLnB5YGAgZmlsZXMgY29udGFpbmluZyBvbmx5IGBgX19wYXRoX19gYAotbWFuaXB1bGF0aW9uIGNvZGU7IHRoZSBuYW1lc3BhY2UgbG9hZGVyIGF1dG9tYXRpY2FsbHkgc2V0cyBgYF9fcGF0aF9fYGAKK21hbmlwdWxhdGlvbiBjb2RlOyB0aGUgaW1wb3J0IG1hY2hpbmVyeSBhdXRvbWF0aWNhbGx5IHNldHMgYGBfX3BhdGhfX2BgCiBjb3JyZWN0bHkgZm9yIHRoZSBuYW1lc3BhY2UgcGFja2FnZS4KIAorTW9kdWxlIHJlcHJzCistLS0tLS0tLS0tLS0KKworQnkgZGVmYXVsdCwgYWxsIG1vZHVsZXMgaGF2ZSBhIHVzYWJsZSByZXByLCBob3dldmVyIGRlcGVuZGluZyBvbiB0aGUKK2F0dHJpYnV0ZXMgc2V0IGFib3ZlLCBhbmQgaW4gdGhlIG1vZHVsZSdzIHNwZWMsIHlvdSBjYW4gbW9yZSBleHBsaWNpdGx5Citjb250cm9sIHRoZSByZXByIG9mIG1vZHVsZSBvYmplY3RzLgorCitJZiB0aGUgbW9kdWxlIGhhcyBhIHNwZWMgKGBgX19zcGVjX19gYCksIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdHJ5Cit0byBnZW5lcmF0ZSBhIHJlcHIgZnJvbSBpdC4gIElmIHRoYXQgZmFpbHMgb3IgdGhlcmUgaXMgbm8gc3BlYywgdGhlIGltcG9ydAorc3lzdGVtIHdpbGwgY3JhZnQgYSBkZWZhdWx0IHJlcHIgdXNpbmcgd2hhdGV2ZXIgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlCitvbiB0aGUgbW9kdWxlLiAgSXQgd2lsbCB0cnkgdG8gdXNlIHRoZSBgYG1vZHVsZS5fX25hbWVfX2BgLAorYGBtb2R1bGUuX19maWxlX19gYCwgYW5kIGBgbW9kdWxlLl9fbG9hZGVyX19gYCBhcyBpbnB1dCBpbnRvIHRoZSByZXByLAord2l0aCBkZWZhdWx0cyBmb3Igd2hhdGV2ZXIgaW5mb3JtYXRpb24gaXMgbWlzc2luZy4KKworSGVyZSBhcmUgdGhlIGV4YWN0IHJ1bGVzIHVzZWQ6CisKKyAqIElmIHRoZSBtb2R1bGUgaGFzIGEgYGBfX3NwZWNfX2BgIGF0dHJpYnV0ZSwgdGhlIGluZm9ybWF0aW9uIGluIHRoZSBzcGVjCisgICBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSByZXByLiAgVGhlICJuYW1lIiwgImxvYWRlciIsICJvcmlnaW4iLCBhbmQKKyAgICJoYXNfbG9jYXRpb24iIGF0dHJpYnV0ZXMgYXJlIGNvbnN1bHRlZC4KKworICogSWYgdGhlIG1vZHVsZSBoYXMgYSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlLCB0aGlzIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUKKyAgIG1vZHVsZSdzIHJlcHIuCisKKyAqIElmIHRoZSBtb2R1bGUgaGFzIG5vIGBgX19maWxlX19gYCBidXQgZG9lcyBoYXZlIGEgYGBfX2xvYWRlcl9fYGAgdGhhdCBpcyBub3QKKyAgIGBgTm9uZWBgLCB0aGVuIHRoZSBsb2FkZXIncyByZXByIGlzIHVzZWQgYXMgcGFydCBvZiB0aGUgbW9kdWxlJ3MgcmVwci4KKworICogT3RoZXJ3aXNlLCBqdXN0IHVzZSB0aGUgbW9kdWxlJ3MgYGBfX25hbWVfX2BgIGluIHRoZSByZXByLgorCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgVXNlIG9mIDptZXRoOmBsb2FkZXIubW9kdWxlX3JlcHIoKSA8aW1wb3J0bGliLmFiYy5Mb2FkZXIubW9kdWxlX3JlcHI+YAorICAgaGFzIGJlZW4gZGVwcmVjYXRlZCBhbmQgdGhlIG1vZHVsZSBzcGVjIGlzIG5vdyB1c2VkIGJ5IHRoZSBpbXBvcnQKKyAgIG1hY2hpbmVyeSB0byBnZW5lcmF0ZSBhIG1vZHVsZSByZXByLgorCisgICBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAzLjMsIHRoZSBtb2R1bGUgcmVwciB3aWxsIGJlCisgICBnZW5lcmF0ZWQgYnkgY2FsbGluZyB0aGUgbG9hZGVyJ3MKKyAgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5Mb2FkZXIubW9kdWxlX3JlcHJgIG1ldGhvZCwgaWYgZGVmaW5lZCwgYmVmb3JlCisgICB0cnlpbmcgZWl0aGVyIGFwcHJvYWNoIGRlc2NyaWJlZCBhYm92ZS4gIEhvd2V2ZXIsIHRoZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4KKwogCiBUaGUgUGF0aCBCYXNlZCBGaW5kZXIKID09PT09PT09PT09PT09PT09PT09PQpAQCAtNDczLDggKzY2Myw5IEBACiAgICAgc2luZ2xlOiBwYXRoIGJhc2VkIGZpbmRlcgogCiBBcyBtZW50aW9uZWQgcHJldmlvdXNseSwgUHl0aG9uIGNvbWVzIHdpdGggc2V2ZXJhbCBkZWZhdWx0IG1ldGEgcGF0aCBmaW5kZXJzLgotT25lIG9mIHRoZXNlLCBjYWxsZWQgdGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAsIHNlYXJjaGVzIGFuIDp0ZXJtOmBpbXBvcnQKLXBhdGhgLCB3aGljaCBjb250YWlucyBhIGxpc3Qgb2YgOnRlcm06YHBhdGggZW50cmllcyA8cGF0aCBlbnRyeT5gLiAgRWFjaCBwYXRoCitPbmUgb2YgdGhlc2UsIGNhbGxlZCB0aGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYAorKDpjbGFzczpgfmltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlcmApLCBzZWFyY2hlcyBhbiA6dGVybTpgaW1wb3J0IHBhdGhgLAord2hpY2ggY29udGFpbnMgYSBsaXN0IG9mIDp0ZXJtOmBwYXRoIGVudHJpZXMgPHBhdGggZW50cnk+YC4gIEVhY2ggcGF0aAogZW50cnkgbmFtZXMgYSBsb2NhdGlvbiB0byBzZWFyY2ggZm9yIG1vZHVsZXMuCiAKIFRoZSBwYXRoIGJhc2VkIGZpbmRlciBpdHNlbGYgZG9lc24ndCBrbm93IGhvdyB0byBpbXBvcnQgYW55dGhpbmcuIEluc3RlYWQsIGl0CkBAIC01MjMsMTUgKzcxNCwxNSBAQAogICAgIHNpbmdsZTogc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUKICAgICBzaW5nbGU6IFBZVEhPTlBBVEgKIAotVGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAgaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgYW5kIGxvYWRpbmcgUHl0aG9uCi1tb2R1bGVzIGFuZCBwYWNrYWdlcyB3aG9zZSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgd2l0aCBhIHN0cmluZyA6dGVybTpgcGF0aAotZW50cnlgLiAgTW9zdCBwYXRoIGVudHJpZXMgbmFtZSBsb2NhdGlvbnMgaW4gdGhlIGZpbGUgc3lzdGVtLCBidXQgdGhleSBuZWVkCi1ub3QgYmUgbGltaXRlZCB0byB0aGlzLgorVGhlIDp0ZXJtOmBwYXRoIGJhc2VkIGZpbmRlcmAgaXMgcmVzcG9uc2libGUgZm9yIGZpbmRpbmcgYW5kIGxvYWRpbmcKK1B5dGhvbiBtb2R1bGVzIGFuZCBwYWNrYWdlcyB3aG9zZSBsb2NhdGlvbiBpcyBzcGVjaWZpZWQgd2l0aCBhIHN0cmluZworOnRlcm06YHBhdGggZW50cnlgLiAgTW9zdCBwYXRoIGVudHJpZXMgbmFtZSBsb2NhdGlvbnMgaW4gdGhlIGZpbGUgc3lzdGVtLAorYnV0IHRoZXkgbmVlZCBub3QgYmUgbGltaXRlZCB0byB0aGlzLgogCiBBcyBhIG1ldGEgcGF0aCBmaW5kZXIsIHRoZSA6dGVybTpgcGF0aCBiYXNlZCBmaW5kZXJgIGltcGxlbWVudHMgdGhlCi06bWV0aDpgZmluZF9tb2R1bGUoKWAgcHJvdG9jb2wgcHJldmlvdXNseSBkZXNjcmliZWQsIGhvd2V2ZXIgaXQgZXhwb3NlcwotYWRkaXRpb25hbCBob29rcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGN1c3RvbWl6ZSBob3cgbW9kdWxlcyBhcmUgZm91bmQgYW5kCi1sb2FkZWQgZnJvbSB0aGUgOnRlcm06YGltcG9ydCBwYXRoYC4KKzptZXRoOmB+aW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWNgIHByb3RvY29sIHByZXZpb3VzbHkKK2Rlc2NyaWJlZCwgaG93ZXZlciBpdCBleHBvc2VzIGFkZGl0aW9uYWwgaG9va3MgdGhhdCBjYW4gYmUgdXNlZCB0bworY3VzdG9taXplIGhvdyBtb2R1bGVzIGFyZSBmb3VuZCBhbmQgbG9hZGVkIGZyb20gdGhlIDp0ZXJtOmBpbXBvcnQgcGF0aGAuCiAKIFRocmVlIHZhcmlhYmxlcyBhcmUgdXNlZCBieSB0aGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCwgOmRhdGE6YHN5cy5wYXRoYCwKIDpkYXRhOmBzeXMucGF0aF9ob29rc2AgYW5kIDpkYXRhOmBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZWAuICBUaGUgYGBfX3BhdGhfX2BgCkBAIC01NTEsMTQgKzc0MiwxNiBAQAogCiBUaGUgOnRlcm06YHBhdGggYmFzZWQgZmluZGVyYCBpcyBhIDp0ZXJtOmBtZXRhIHBhdGggZmluZGVyYCwgc28gdGhlIGltcG9ydAogbWFjaGluZXJ5IGJlZ2lucyB0aGUgOnRlcm06YGltcG9ydCBwYXRoYCBzZWFyY2ggYnkgY2FsbGluZyB0aGUgcGF0aAotYmFzZWQgZmluZGVyJ3MgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCBhcyBkZXNjcmliZWQgcHJldmlvdXNseS4gIFdoZW4KLXRoZSBgYHBhdGhgYCBhcmd1bWVudCB0byA6bWV0aDpgZmluZF9tb2R1bGUoKWAgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgYQorYmFzZWQgZmluZGVyJ3MgOm1ldGg6YH5pbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9zcGVjYCBtZXRob2QgYXMKK2Rlc2NyaWJlZCBwcmV2aW91c2x5LiAgV2hlbiB0aGUgYGBwYXRoYGAgYXJndW1lbnQgdG8KKzptZXRoOmB+aW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfc3BlY2AgaXMgZ2l2ZW4sIGl0IHdpbGwgYmUgYQogbGlzdCBvZiBzdHJpbmcgcGF0aHMgdG8gdHJhdmVyc2UgLSB0eXBpY2FsbHkgYSBwYWNrYWdlJ3MgYGBfX3BhdGhfX2BgCi1hdHRyaWJ1dGUgZm9yIGFuIGltcG9ydCB3aXRoaW4gdGhhdCBwYWNrYWdlLiAgSWYgdGhlIGBgcGF0aGBgIGFyZ3VtZW50Ci1pcyBgYE5vbmVgYCwgdGhpcyBpbmRpY2F0ZXMgYSB0b3AgbGV2ZWwgaW1wb3J0IGFuZCA6ZGF0YTpgc3lzLnBhdGhgIGlzIHVzZWQuCithdHRyaWJ1dGUgZm9yIGFuIGltcG9ydCB3aXRoaW4gdGhhdCBwYWNrYWdlLiAgSWYgdGhlIGBgcGF0aGBgIGFyZ3VtZW50IGlzCitgYE5vbmVgYCwgdGhpcyBpbmRpY2F0ZXMgYSB0b3AgbGV2ZWwgaW1wb3J0IGFuZCA6ZGF0YTpgc3lzLnBhdGhgIGlzIHVzZWQuCiAKIFRoZSBwYXRoIGJhc2VkIGZpbmRlciBpdGVyYXRlcyBvdmVyIGV2ZXJ5IGVudHJ5IGluIHRoZSBzZWFyY2ggcGF0aCwgYW5kCi1mb3IgZWFjaCBvZiB0aGVzZSwgbG9va3MgZm9yIGFuIGFwcHJvcHJpYXRlIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAgZm9yIHRoZQorZm9yIGVhY2ggb2YgdGhlc2UsIGxvb2tzIGZvciBhbiBhcHByb3ByaWF0ZSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgCisoOmNsYXNzOmB+aW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXJgKSBmb3IgdGhlCiBwYXRoIGVudHJ5LiAgQmVjYXVzZSB0aGlzIGNhbiBiZSBhbiBleHBlbnNpdmUgb3BlcmF0aW9uIChlLmcuIHRoZXJlIG1heSBiZQogYHN0YXQoKWAgY2FsbCBvdmVyaGVhZHMgZm9yIHRoaXMgc2VhcmNoKSwgdGhlIHBhdGggYmFzZWQgZmluZGVyIG1haW50YWlucwogYSBjYWNoZSBtYXBwaW5nIHBhdGggZW50cmllcyB0byBwYXRoIGVudHJ5IGZpbmRlcnMuICBUaGlzIGNhY2hlIGlzIG1haW50YWluZWQKQEAgLTU3NSw1OSArNzY4LDgyIEBACiBwYXRoIGVudHJ5IHRvIGJlIHNlYXJjaGVkLiAgVGhpcyBjYWxsYWJsZSBtYXkgZWl0aGVyIHJldHVybiBhIDp0ZXJtOmBwYXRoCiBlbnRyeSBmaW5kZXJgIHRoYXQgY2FuIGhhbmRsZSB0aGUgcGF0aCBlbnRyeSwgb3IgaXQgbWF5IHJhaXNlCiA6ZXhjOmBJbXBvcnRFcnJvcmAuICBBbiA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMgdXNlZCBieSB0aGUgcGF0aCBiYXNlZCBmaW5kZXIgdG8KLXNpZ25hbCB0aGF0IHRoZSBob29rIGNhbm5vdCBmaW5kIGEgOnRlcm06YHBhdGggZW50cnkgZmluZGVyYCBmb3IgdGhhdAotOnRlcm06YHBhdGggZW50cnlgLiAgVGhlIGV4Y2VwdGlvbiBpcyBpZ25vcmVkIGFuZCA6dGVybTpgaW1wb3J0IHBhdGhgCi1pdGVyYXRpb24gY29udGludWVzLiAgVGhlIGhvb2sgc2hvdWxkIGV4cGVjdCBlaXRoZXIgYSBzdHJpbmcgb3IgYnl0ZXMgb2JqZWN0OwotdGhlIGVuY29kaW5nIG9mIGJ5dGVzIG9iamVjdHMgaXMgdXAgdG8gdGhlIGhvb2sgKGUuZy4gaXQgbWF5IGJlIGEgZmlsZSBzeXN0ZW0KLWVuY29kaW5nLCBVVEYtOCwgb3Igc29tZXRoaW5nIGVsc2UpLCBhbmQgaWYgdGhlIGhvb2sgY2Fubm90IGRlY29kZSB0aGUKLWFyZ3VtZW50LCBpdCBzaG91bGQgcmFpc2UgOmV4YzpgSW1wb3J0RXJyb3JgLgorc2lnbmFsIHRoYXQgdGhlIGhvb2sgY2Fubm90IGZpbmQgYSA6dGVybTpgcGF0aCBlbnRyeSBmaW5kZXJgLgorZm9yIHRoYXQgOnRlcm06YHBhdGggZW50cnlgLiAgVGhlCitleGNlcHRpb24gaXMgaWdub3JlZCBhbmQgOnRlcm06YGltcG9ydCBwYXRoYCBpdGVyYXRpb24gY29udGludWVzLiAgVGhlIGhvb2sKK3Nob3VsZCBleHBlY3QgZWl0aGVyIGEgc3RyaW5nIG9yIGJ5dGVzIG9iamVjdDsgdGhlIGVuY29kaW5nIG9mIGJ5dGVzIG9iamVjdHMKK2lzIHVwIHRvIHRoZSBob29rIChlLmcuIGl0IG1heSBiZSBhIGZpbGUgc3lzdGVtIGVuY29kaW5nLCBVVEYtOCwgb3Igc29tZXRoaW5nCitlbHNlKSwgYW5kIGlmIHRoZSBob29rIGNhbm5vdCBkZWNvZGUgdGhlIGFyZ3VtZW50LCBpdCBzaG91bGQgcmFpc2UKKzpleGM6YEltcG9ydEVycm9yYC4KIAogSWYgOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCBpdGVyYXRpb24gZW5kcyB3aXRoIG5vIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAKLWJlaW5nIHJldHVybmVkLCB0aGVuIHRoZSBwYXRoIGJhc2VkIGZpbmRlcidzIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2QKLXdpbGwgc3RvcmUgYGBOb25lYGAgaW4gOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCAodG8gaW5kaWNhdGUgdGhhdAotdGhlcmUgaXMgbm8gZmluZGVyIGZvciB0aGlzIHBhdGggZW50cnkpIGFuZCByZXR1cm4gYGBOb25lYGAsIGluZGljYXRpbmcgdGhhdAotdGhpcyA6dGVybTpgbWV0YSBwYXRoIGZpbmRlcmAgY291bGQgbm90IGZpbmQgdGhlIG1vZHVsZS4KK2JlaW5nIHJldHVybmVkLCB0aGVuIHRoZSBwYXRoIGJhc2VkIGZpbmRlcidzCis6bWV0aDpgfmltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX3NwZWNgIG1ldGhvZCB3aWxsIHN0b3JlIGBgTm9uZWBgCitpbiA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgICh0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIG5vIGZpbmRlciBmb3IKK3RoaXMgcGF0aCBlbnRyeSkgYW5kIHJldHVybiBgYE5vbmVgYCwgaW5kaWNhdGluZyB0aGF0IHRoaXMKKzp0ZXJtOmBtZXRhIHBhdGggZmluZGVyYCBjb3VsZCBub3QgZmluZCB0aGUgbW9kdWxlLgogCiBJZiBhIDp0ZXJtOmBwYXRoIGVudHJ5IGZpbmRlcmAgKmlzKiByZXR1cm5lZCBieSBvbmUgb2YgdGhlIDp0ZXJtOmBwYXRoIGVudHJ5CiBob29rYCBjYWxsYWJsZXMgb24gOmRhdGE6YHN5cy5wYXRoX2hvb2tzYCwgdGhlbiB0aGUgZm9sbG93aW5nIHByb3RvY29sIGlzIHVzZWQKLXRvIGFzayB0aGUgZmluZGVyIGZvciBhIG1vZHVsZSBsb2FkZXIsIHdoaWNoIGlzIHRoZW4gdXNlZCB0byBsb2FkIHRoZSBtb2R1bGUuCi0KK3RvIGFzayB0aGUgZmluZGVyIGZvciBhIG1vZHVsZSBzcGVjLCB3aGljaCBpcyB0aGVuIHVzZWQgd2hlbiBsb2FkaW5nIHRoZQorbW9kdWxlLgogCiBQYXRoIGVudHJ5IGZpbmRlciBwcm90b2NvbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogSW4gb3JkZXIgdG8gc3VwcG9ydCBpbXBvcnRzIG9mIG1vZHVsZXMgYW5kIGluaXRpYWxpemVkIHBhY2thZ2VzIGFuZCBhbHNvIHRvCiBjb250cmlidXRlIHBvcnRpb25zIHRvIG5hbWVzcGFjZSBwYWNrYWdlcywgcGF0aCBlbnRyeSBmaW5kZXJzIG11c3QgaW1wbGVtZW50Ci10aGUgOm1ldGg6YGZpbmRfbG9hZGVyKClgIG1ldGhvZC4KK3RoZSA6bWV0aDpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfc3BlY2AgbWV0aG9kLgogCi06bWV0aDpgZmluZF9sb2FkZXIoKWAgdGFrZXMgb25lIGFyZ3VtZW50LCB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlCi1tb2R1bGUgYmVpbmcgaW1wb3J0ZWQuICA6bWV0aDpgZmluZF9sb2FkZXIoKWAgcmV0dXJucyBhIDItdHVwbGUgd2hlcmUgdGhlCi1maXJzdCBpdGVtIGlzIHRoZSBsb2FkZXIgYW5kIHRoZSBzZWNvbmQgaXRlbSBpcyBhIG5hbWVzcGFjZSA6dGVybTpgcG9ydGlvbmAuCi1XaGVuIHRoZSBmaXJzdCBpdGVtIChpLmUuIHRoZSBsb2FkZXIpIGlzIGBgTm9uZWBgLCB0aGlzIG1lYW5zIHRoYXQgd2hpbGUgdGhlCi1wYXRoIGVudHJ5IGZpbmRlciBkb2VzIG5vdCBoYXZlIGEgbG9hZGVyIGZvciB0aGUgbmFtZWQgbW9kdWxlLCBpdCBrbm93cyB0aGF0IHRoZQotcGF0aCBlbnRyeSBjb250cmlidXRlcyB0byBhIG5hbWVzcGFjZSBwb3J0aW9uIGZvciB0aGUgbmFtZWQgbW9kdWxlLiAgVGhpcyB3aWxsCi1hbG1vc3QgYWx3YXlzIGJlIHRoZSBjYXNlIHdoZXJlIFB5dGhvbiBpcyBhc2tlZCB0byBpbXBvcnQgYSBuYW1lc3BhY2UgcGFja2FnZQotdGhhdCBoYXMgbm8gcGh5c2ljYWwgcHJlc2VuY2Ugb24gdGhlIGZpbGUgc3lzdGVtLiAgV2hlbiBhIHBhdGggZW50cnkgZmluZGVyCi1yZXR1cm5zIGBgTm9uZWBgIGZvciB0aGUgbG9hZGVyLCB0aGUgc2Vjb25kIGl0ZW0gb2YgdGhlIDItdHVwbGUgcmV0dXJuIHZhbHVlCi1tdXN0IGJlIGEgc2VxdWVuY2UsIGFsdGhvdWdoIGl0IGNhbiBiZSBlbXB0eS4KKzptZXRoOmB+aW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9zcGVjYCB0YWtlcyB0d28gYXJndW1lbnQsIHRoZQorZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCwgYW5kIHRoZSAob3B0aW9uYWwpIHRhcmdldAorbW9kdWxlLiAgYGBmaW5kX3NwZWMoKWBgIHJldHVybnMgYSBmdWxseSBwb3B1bGF0ZWQgc3BlYyBmb3IgdGhlIG1vZHVsZS4KK1RoaXMgc3BlYyB3aWxsIGFsd2F5cyBoYXZlICJsb2FkZXIiIHNldCAod2l0aCBvbmUgZXhjZXB0aW9uKS4KIAotSWYgOm1ldGg6YGZpbmRfbG9hZGVyKClgIHJldHVybnMgYSBub24tYGBOb25lYGAgbG9hZGVyIHZhbHVlLCB0aGUgcG9ydGlvbiBpcwotaWdub3JlZCBhbmQgdGhlIGxvYWRlciBpcyByZXR1cm5lZCBmcm9tIHRoZSBwYXRoIGJhc2VkIGZpbmRlciwgdGVybWluYXRpbmcKLXRoZSBzZWFyY2ggdGhyb3VnaCB0aGUgcGF0aCBlbnRyaWVzLgorVG8gaW5kaWNhdGUgdG8gdGhlIGltcG9ydCBtYWNoaW5lcnkgdGhhdCB0aGUgc3BlYyByZXByZXNlbnRzIGEgbmFtZXNwYWNlCis6dGVybTpgcG9ydGlvbmAuIHRoZSBwYXRoIGVudHJ5IGZpbmRlciBzZXRzICJsb2FkZXIiIG9uIHRoZSBzcGVjIHRvCitgYE5vbmVgYCBhbmQgInN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIiB0byBhIGxpc3QgY29udGFpbmluZyB0aGUKK3BvcnRpb24uCiAKLUZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgaW1wb3J0Ci1wcm90b2NvbCwgbWFueSBwYXRoIGVudHJ5IGZpbmRlcnMgYWxzbyBzdXBwb3J0IHRoZSBzYW1lLAotdHJhZGl0aW9uYWwgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCB0aGF0IG1ldGEgcGF0aCBmaW5kZXJzIHN1cHBvcnQuCi1Ib3dldmVyIHBhdGggZW50cnkgZmluZGVyIDptZXRoOmBmaW5kX21vZHVsZSgpYCBtZXRob2RzIGFyZSBuZXZlciBjYWxsZWQKLXdpdGggYSBgYHBhdGhgYCBhcmd1bWVudCAodGhleSBhcmUgZXhwZWN0ZWQgdG8gcmVjb3JkIHRoZSBhcHByb3ByaWF0ZQotcGF0aCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbml0aWFsIGNhbGwgdG8gdGhlIHBhdGggaG9vaykuCisuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuNAorICAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX3NwZWNgIHJlcGxhY2VkCisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfbG9hZGVyYCBhbmQKKyAgIDptZXRoOmB+aW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIuZmluZF9tb2R1bGVgLCBib3RoIG9mIHdoaWNoCisgICBhcmUgbm93IGRlcHJlY2F0ZWQsIGJ1dCB3aWxsIGJlIHVzZWQgaWYgYGBmaW5kX3NwZWMoKWBgIGlzIG5vdCBkZWZpbmVkLgogCi1UaGUgOm1ldGg6YGZpbmRfbW9kdWxlKClgIG1ldGhvZCBvbiBwYXRoIGVudHJ5IGZpbmRlcnMgaXMgZGVwcmVjYXRlZCwKLWFzIGl0IGRvZXMgbm90IGFsbG93IHRoZSBwYXRoIGVudHJ5IGZpbmRlciB0byBjb250cmlidXRlIHBvcnRpb25zIHRvCi1uYW1lc3BhY2UgcGFja2FnZXMuIEluc3RlYWQgcGF0aCBlbnRyeSBmaW5kZXJzIHNob3VsZCBpbXBsZW1lbnQgdGhlCi06bWV0aDpgZmluZF9sb2FkZXIoKWAgbWV0aG9kIGFzIGRlc2NyaWJlZCBhYm92ZS4gSWYgaXQgZXhpc3RzIG9uIHRoZSBwYXRoCi1lbnRyeSBmaW5kZXIsIHRoZSBpbXBvcnQgc3lzdGVtIHdpbGwgYWx3YXlzIGNhbGwgOm1ldGg6YGZpbmRfbG9hZGVyKClgCi1pbiBwcmVmZXJlbmNlIHRvIDptZXRoOmBmaW5kX21vZHVsZSgpYC4KKyAgIE9sZGVyIHBhdGggZW50cnkgZmluZGVycyBtYXkgaW1wbGVtZW50IG9uZSBvZiB0aGVzZSB0d28gZGVwcmVjYXRlZCBtZXRob2RzCisgICBpbnN0ZWFkIG9mIGBgZmluZF9zcGVjKClgYC4gIFRoZSBtZXRob2RzIGFyZSBzdGlsbCByZXNwZWN0ZWQgZm9yIHRoZQorICAgc2FrZSBvZiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgSG93ZXZldmVyLCBpZiBgYGZpbmRfc3BlYygpYGAgaXMKKyAgIGltcGxlbWVudGVkIG9uIHRoZSBwYXRoIGVudHJ5IGZpbmRlciwgdGhlIGxlZ2FjeSBtZXRob2RzIGFyZSBpZ25vcmVkLgorCisgICA6bWV0aDpgfmltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfbG9hZGVyYCB0YWtlcyBvbmUgYXJndW1lbnQsIHRoZQorICAgZnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZC4gIGBgZmluZF9sb2FkZXIoKWBgCisgICByZXR1cm5zIGEgMi10dXBsZSB3aGVyZSB0aGUgZmlyc3QgaXRlbSBpcyB0aGUgbG9hZGVyIGFuZCB0aGUgc2Vjb25kIGl0ZW0KKyAgIGlzIGEgbmFtZXNwYWNlIDp0ZXJtOmBwb3J0aW9uYC4gIFdoZW4gdGhlIGZpcnN0IGl0ZW0gKGkuZS4gdGhlIGxvYWRlcikgaXMKKyAgIGBgTm9uZWBgLCB0aGlzIG1lYW5zIHRoYXQgd2hpbGUgdGhlIHBhdGggZW50cnkgZmluZGVyIGRvZXMgbm90IGhhdmUgYQorICAgbG9hZGVyIGZvciB0aGUgbmFtZWQgbW9kdWxlLCBpdCBrbm93cyB0aGF0IHRoZSBwYXRoIGVudHJ5IGNvbnRyaWJ1dGVzIHRvCisgICBhIG5hbWVzcGFjZSBwb3J0aW9uIGZvciB0aGUgbmFtZWQgbW9kdWxlLiAgVGhpcyB3aWxsIGFsbW9zdCBhbHdheXMgYmUgdGhlCisgICBjYXNlIHdoZXJlIFB5dGhvbiBpcyBhc2tlZCB0byBpbXBvcnQgYSBuYW1lc3BhY2UgcGFja2FnZSB0aGF0IGhhcyBubworICAgcGh5c2ljYWwgcHJlc2VuY2Ugb24gdGhlIGZpbGUgc3lzdGVtLiAgV2hlbiBhIHBhdGggZW50cnkgZmluZGVyIHJldHVybnMKKyAgIGBgTm9uZWBgIGZvciB0aGUgbG9hZGVyLCB0aGUgc2Vjb25kIGl0ZW0gb2YgdGhlIDItdHVwbGUgcmV0dXJuIHZhbHVlIG11c3QKKyAgIGJlIGEgc2VxdWVuY2UsIGFsdGhvdWdoIGl0IGNhbiBiZSBlbXB0eS4KKworICAgSWYgYGBmaW5kX2xvYWRlcigpYGAgcmV0dXJucyBhIG5vbi1gYE5vbmVgYCBsb2FkZXIgdmFsdWUsIHRoZSBwb3J0aW9uIGlzCisgICBpZ25vcmVkIGFuZCB0aGUgbG9hZGVyIGlzIHJldHVybmVkIGZyb20gdGhlIHBhdGggYmFzZWQgZmluZGVyLCB0ZXJtaW5hdGluZworICAgdGhlIHNlYXJjaCB0aHJvdWdoIHRoZSBwYXRoIGVudHJpZXMuCisKKyAgIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgaW1wb3J0CisgICBwcm90b2NvbCwgbWFueSBwYXRoIGVudHJ5IGZpbmRlcnMgYWxzbyBzdXBwb3J0IHRoZSBzYW1lLAorICAgdHJhZGl0aW9uYWwgYGBmaW5kX21vZHVsZSgpYGAgbWV0aG9kIHRoYXQgbWV0YSBwYXRoIGZpbmRlcnMgc3VwcG9ydC4KKyAgIEhvd2V2ZXIgcGF0aCBlbnRyeSBmaW5kZXIgYGBmaW5kX21vZHVsZSgpYGAgbWV0aG9kcyBhcmUgbmV2ZXIgY2FsbGVkCisgICB3aXRoIGEgYGBwYXRoYGAgYXJndW1lbnQgKHRoZXkgYXJlIGV4cGVjdGVkIHRvIHJlY29yZCB0aGUgYXBwcm9wcmlhdGUKKyAgIHBhdGggaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5pdGlhbCBjYWxsIHRvIHRoZSBwYXRoIGhvb2spLgorCisgICBUaGUgYGBmaW5kX21vZHVsZSgpYGAgbWV0aG9kIG9uIHBhdGggZW50cnkgZmluZGVycyBpcyBkZXByZWNhdGVkLAorICAgYXMgaXQgZG9lcyBub3QgYWxsb3cgdGhlIHBhdGggZW50cnkgZmluZGVyIHRvIGNvbnRyaWJ1dGUgcG9ydGlvbnMgdG8KKyAgIG5hbWVzcGFjZSBwYWNrYWdlcy4gIElmIGJvdGggYGBmaW5kX2xvYWRlcigpYGAgYW5kIGBgZmluZF9tb2R1bGUoKWBgCisgICBleGlzdCBvbiBhIHBhdGggZW50cnkgZmluZGVyLCB0aGUgaW1wb3J0IHN5c3RlbSB3aWxsIGFsd2F5cyBjYWxsCisgICBgYGZpbmRfbG9hZGVyKClgYCBpbiBwcmVmZXJlbmNlIHRvIGBgZmluZF9tb2R1bGUoKWBgLgogCiAKIFJlcGxhY2luZyB0aGUgc3RhbmRhcmQgaW1wb3J0IHN5c3RlbQpAQCAtNjQ2LDkgKzg2Miw1NCBAQAogVG8gc2VsZWN0aXZlbHkgcHJldmVudCBpbXBvcnQgb2Ygc29tZSBtb2R1bGVzIGZyb20gYSBob29rIGVhcmx5IG9uIHRoZQogbWV0YSBwYXRoIChyYXRoZXIgdGhhbiBkaXNhYmxpbmcgdGhlIHN0YW5kYXJkIGltcG9ydCBzeXN0ZW0gZW50aXJlbHkpLAogaXQgaXMgc3VmZmljaWVudCB0byByYWlzZSA6ZXhjOmBJbXBvcnRFcnJvcmAgZGlyZWN0bHkgZnJvbQotOm1ldGg6YGZpbmRfbW9kdWxlYCBpbnN0ZWFkIG9mIHJldHVybmluZyBgYE5vbmVgYC4gVGhlIGxhdHRlciBpbmRpY2F0ZXMKLXRoYXQgdGhlIG1ldGEgcGF0aCBzZWFyY2ggc2hvdWxkIGNvbnRpbnVlLiB3aGlsZSByYWlzaW5nIGFuIGV4Y2VwdGlvbgotdGVybWluYXRlcyBpdCBpbW1lZGlhdGVseS4KKzptZXRoOmB+aW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX3NwZWNgIGluc3RlYWQgb2YgcmV0dXJuaW5nCitgYE5vbmVgYC4gVGhlIGxhdHRlciBpbmRpY2F0ZXMgdGhhdCB0aGUgbWV0YSBwYXRoIHNlYXJjaCBzaG91bGQgY29udGludWUsCit3aGlsZSByYWlzaW5nIGFuIGV4Y2VwdGlvbiB0ZXJtaW5hdGVzIGl0IGltbWVkaWF0ZWx5LgorCisKK1NwZWNpYWwgY29uc2lkZXJhdGlvbnMgZm9yIF9fbWFpbl9fCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgOm1vZDpgX19tYWluX19gIG1vZHVsZSBpcyBhIHNwZWNpYWwgY2FzZSByZWxhdGl2ZSB0byBQeXRob24ncyBpbXBvcnQKK3N5c3RlbS4gIEFzIG5vdGVkIDpyZWY6YGVsc2V3aGVyZSA8cHJvZ3JhbXM+YCwgdGhlIGBgX19tYWluX19gYCBtb2R1bGUKK2lzIGRpcmVjdGx5IGluaXRpYWxpemVkIGF0IGludGVycHJldGVyIHN0YXJ0dXAsIG11Y2ggbGlrZSA6bW9kOmBzeXNgIGFuZAorOm1vZDpgYnVpbHRpbnNgLiAgSG93ZXZlciwgdW5saWtlIHRob3NlIHR3bywgaXQgZG9lc24ndCBzdHJpY3RseQorcXVhbGlmeSBhcyBhIGJ1aWx0LWluIG1vZHVsZS4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbWFubmVyIGluIHdoaWNoCitgYF9fbWFpbl9fYGAgaXMgaW5pdGlhbGl6ZWQgZGVwZW5kcyBvbiB0aGUgZmxhZ3MgYW5kIG90aGVyIG9wdGlvbnMgd2l0aAord2hpY2ggdGhlIGludGVycHJldGVyIGlzIGludm9rZWQuCisKKy4uIF9tYWluX3NwZWM6CisKK19fbWFpbl9fLl9fc3BlY19fCistLS0tLS0tLS0tLS0tLS0tLQorCitEZXBlbmRpbmcgb24gaG93IDptb2Q6YF9fbWFpbl9fYCBpcyBpbml0aWFsaXplZCwgYGBfX21haW5fXy5fX3NwZWNfX2BgCitnZXRzIHNldCBhcHByb3ByaWF0ZWx5IG9yIHRvIGBgTm9uZWBgLgorCitXaGVuIFB5dGhvbiBpcyBzdGFydGVkIHdpdGggdGhlIDpvcHRpb246YC1tYCBvcHRpb24sIGBgX19zcGVjX19gYCBpcyBzZXQKK3RvIHRoZSBtb2R1bGUgc3BlYyBvZiB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgb3IgcGFja2FnZS4gYGBfX3NwZWNfX2BgIGlzCithbHNvIHBvcHVsYXRlZCB3aGVuIHRoZSBgYF9fbWFpbl9fYGAgbW9kdWxlIGlzIGxvYWRlZCBhcyBwYXJ0IG9mIGV4ZWN1dGluZyBhCitkaXJlY3RvcnksIHppcGZpbGUgb3Igb3RoZXIgOmRhdGE6YHN5cy5wYXRoYCBlbnRyeS4KKworSW4gOnJlZjpgdGhlIHJlbWFpbmluZyBjYXNlcyA8dXNpbmctb24taW50ZXJmYWNlLW9wdGlvbnM+YAorYGBfX21haW5fXy5fX3NwZWNfX2BgIGlzIHNldCB0byBgYE5vbmVgYCwgYXMgdGhlIGNvZGUgdXNlZCB0byBwb3B1bGF0ZSB0aGUKKzptb2Q6YF9fbWFpbl9fYCBkb2VzIG5vdCBjb3JyZXNwb25kIGRpcmVjdGx5IHdpdGggYW4gaW1wb3J0YWJsZSBtb2R1bGU6CisKKy0gaW50ZXJhY3RpdmUgcHJvbXB0CistIC1jIHN3aXRjaAorLSBydW5uaW5nIGZyb20gc3RkaW4KKy0gcnVubmluZyBkaXJlY3RseSBmcm9tIGEgc291cmNlIG9yIGJ5dGVjb2RlIGZpbGUKKworTm90ZSB0aGF0IGBgX19tYWluX18uX19zcGVjX19gYCBpcyBhbHdheXMgYGBOb25lYGAgaW4gdGhlIGxhc3QgY2FzZSwKKypldmVuIGlmKiB0aGUgZmlsZSBjb3VsZCB0ZWNobmljYWxseSBiZSBpbXBvcnRlZCBkaXJlY3RseSBhcyBhIG1vZHVsZQoraW5zdGVhZC4gVXNlIHRoZSA6b3B0aW9uOmAtbWAgc3dpdGNoIGlmIHZhbGlkIG1vZHVsZSBtZXRhZGF0YSBpcyBkZXNpcmVkCitpbiA6bW9kOmBfX21haW5fX2AuCisKK05vdGUgYWxzbyB0aGF0IGV2ZW4gd2hlbiBgYF9fbWFpbl9fYGAgY29ycmVzcG9uZHMgd2l0aCBhbiBpbXBvcnRhYmxlIG1vZHVsZQorYW5kIGBgX19tYWluX18uX19zcGVjX19gYCBpcyBzZXQgYWNjb3JkaW5nbHksIHRoZXkncmUgc3RpbGwgY29uc2lkZXJlZAorKmRpc3RpbmN0KiBtb2R1bGVzLiBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdCB0aGF0IGJsb2NrcyBndWFyZGVkIGJ5CitgYGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6YGAgY2hlY2tzIG9ubHkgZXhlY3V0ZSB3aGVuIHRoZSBtb2R1bGUgaXMgdXNlZAordG8gcG9wdWxhdGUgdGhlIGBgX19tYWluX19gYCBuYW1lc3BhY2UsIGFuZCBub3QgZHVyaW5nIG5vcm1hbCBpbXBvcnQuCiAKIAogT3BlbiBpc3N1ZXMKQEAgLTY2MywxMyArOTI0LDE5IEBACiBYWFggcnVucHksIHBrZ3V0aWwsIGV0IGFsIGluIHRoZSBsaWJyYXJ5IG1hbnVhbCBzaG91bGQgYWxsIGdldCAiU2VlIEFsc28iCiBsaW5rcyBhdCB0aGUgdG9wIHBvaW50aW5nIHRvIHRoZSBuZXcgaW1wb3J0IHN5c3RlbSBzZWN0aW9uLgogCitYWFggQWRkIG1vcmUgZXhwbGFuYXRpb24gcmVnYXJkaW5nIHRoZSBkaWZmZXJlbnQgd2F5cyBpbiB3aGljaAorYGBfX21haW5fX2BgIGlzIGluaXRpYWxpemVkPworCitYWFggQWRkIG1vcmUgaW5mbyBvbiBgYF9fbWFpbl9fYGAgcXVpcmtzL3BpdGZhbGxzIChpLmUuIGNvcHkgZnJvbQorOnBlcDpgMzk1YCkuCisKIAogUmVmZXJlbmNlcwogPT09PT09PT09PQogCiBUaGUgaW1wb3J0IG1hY2hpbmVyeSBoYXMgZXZvbHZlZCBjb25zaWRlcmFibHkgc2luY2UgUHl0aG9uJ3MgZWFybHkgZGF5cy4gIFRoZQogb3JpZ2luYWwgYHNwZWNpZmljYXRpb24gZm9yIHBhY2thZ2VzCi08aHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9lc3NheXMvcGFja2FnZXMuaHRtbD5gXyBpcyBzdGlsbCBhdmFpbGFibGUgdG8gcmVhZCwKKzxodHRwOi8vbGVnYWN5LnB5dGhvbi5vcmcvZG9jL2Vzc2F5cy9wYWNrYWdlcy5odG1sPmBfIGlzIHN0aWxsIGF2YWlsYWJsZSB0byByZWFkLAogYWx0aG91Z2ggc29tZSBkZXRhaWxzIGhhdmUgY2hhbmdlZCBzaW5jZSB0aGUgd3JpdGluZyBvZiB0aGF0IGRvY3VtZW50LgogCiBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgOmRhdGE6YHN5cy5tZXRhX3BhdGhgIHdhcyA6cGVwOmAzMDJgLCB3aXRoCkBAIC02ODgsNiArOTU1LDExIEBACiAKIDpwZXA6YDMzOGAgZGVmaW5lcyBleGVjdXRpbmcgbW9kdWxlcyBhcyBzY3JpcHRzLgogCis6cGVwOmA0NTFgIGFkZHMgdGhlIGVuY2Fwc3VsYXRpb24gb2YgcGVyLW1vZHVsZSBpbXBvcnQgc3RhdGUgaW4gc3BlYworb2JqZWN0cy4gIEl0IGFsc28gb2ZmLWxvYWRzIG1vc3Qgb2YgdGhlIGJvaWxlcnBsYXRlIHJlc3BvbnNpYmlsaXRpZXMgb2YKK2xvYWRlcnMgYmFjayBvbnRvIHRoZSBpbXBvcnQgbWFjaGluZXJ5LiAgVGhlc2UgY2hhbmdlcyBhbGxvdyB0aGUKK2RlcHJlY2F0aW9uIG9mIHNldmVyYWwgQVBJcyBpbiB0aGUgaW1wb3J0IHN5c3RlbSBhbmQgYWxzbyBhZGRpdGlvbiBvZiBuZXcKK21ldGhvZHMgdG8gZmluZGVycyBhbmQgbG9hZGVycy4KIAogLi4gcnVicmljOjogRm9vdG5vdGVzCiAKZGlmZiAtLWdpdCBhL0RvYy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLnJzdCBiL0RvYy9yZWZlcmVuY2UvaW50cm9kdWN0aW9uLnJzdAppbmRleCAwYWM1Nzk0Li41NjMzYWUzIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2ludHJvZHVjdGlvbi5yc3QKKysrIGIvRG9jL3JlZmVyZW5jZS9pbnRyb2R1Y3Rpb24ucnN0CkBAIC02Niw3ICs2Niw3IEBACiAgICBBbiBhbHRlcm5hdGUgUHl0aG9uIGZvciAuTkVULiAgVW5saWtlIFB5dGhvbi5ORVQsIHRoaXMgaXMgYSBjb21wbGV0ZSBQeXRob24KICAgIGltcGxlbWVudGF0aW9uIHRoYXQgZ2VuZXJhdGVzIElMLCBhbmQgY29tcGlsZXMgUHl0aG9uIGNvZGUgZGlyZWN0bHkgdG8gLk5FVAogICAgYXNzZW1ibGllcy4gIEl0IHdhcyBjcmVhdGVkIGJ5IEppbSBIdWd1bmluLCB0aGUgb3JpZ2luYWwgY3JlYXRvciBvZiBKeXRob24uICBGb3IKLSAgIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBgdGhlIElyb25QeXRob24gd2Vic2l0ZSA8aHR0cDovL3d3dy5pcm9ucHl0aG9uLm5ldC8+YF8uCisgICBtb3JlIGluZm9ybWF0aW9uLCBzZWUgYHRoZSBJcm9uUHl0aG9uIHdlYnNpdGUgPGh0dHA6Ly9pcm9ucHl0aG9uLm5ldC8+YF8uCiAKIFB5UHkKICAgIEFuIGltcGxlbWVudGF0aW9uIG9mIFB5dGhvbiB3cml0dGVuIGNvbXBsZXRlbHkgaW4gUHl0aG9uLiBJdCBzdXBwb3J0cyBzZXZlcmFsCmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMucnN0IGIvRG9jL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLnJzdAppbmRleCAwZWQzZDNiLi5hMTI2NWNmIDEwMDY0NAotLS0gYS9Eb2MvcmVmZXJlbmNlL2xleGljYWxfYW5hbHlzaXMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2UvbGV4aWNhbF9hbmFseXNpcy5yc3QKQEAgLTc2LDEyICs3NiwxNCBAQAogRW5jb2RpbmcgZGVjbGFyYXRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLi4gaW5kZXg6OiBzb3VyY2UgY2hhcmFjdGVyIHNldCwgZW5jb2RpbmdzCisuLiBpbmRleDo6IHNvdXJjZSBjaGFyYWN0ZXIgc2V0LCBlbmNvZGluZyBkZWNsYXJhdGlvbnMgKHNvdXJjZSBmaWxlKQogCiBJZiBhIGNvbW1lbnQgaW4gdGhlIGZpcnN0IG9yIHNlY29uZCBsaW5lIG9mIHRoZSBQeXRob24gc2NyaXB0IG1hdGNoZXMgdGhlCiByZWd1bGFyIGV4cHJlc3Npb24gYGBjb2RpbmdbPTpdXHMqKFstXHcuXSspYGAsIHRoaXMgY29tbWVudCBpcyBwcm9jZXNzZWQgYXMgYW4KIGVuY29kaW5nIGRlY2xhcmF0aW9uOyB0aGUgZmlyc3QgZ3JvdXAgb2YgdGhpcyBleHByZXNzaW9uIG5hbWVzIHRoZSBlbmNvZGluZyBvZgotdGhlIHNvdXJjZSBjb2RlIGZpbGUuIFRoZSByZWNvbW1lbmRlZCBmb3JtcyBvZiB0aGlzIGV4cHJlc3Npb24gYXJlIDo6Cit0aGUgc291cmNlIGNvZGUgZmlsZS4gVGhlIGVuY29kaW5nIGRlY2xhcmF0aW9uIG11c3QgYXBwZWFyIG9uIGEgbGluZSBvZiBpdHMKK293bi4gSWYgaXQgaXMgdGhlIHNlY29uZCBsaW5lLCB0aGUgZmlyc3QgbGluZSBtdXN0IGFsc28gYmUgYSBjb21tZW50LW9ubHkgbGluZS4KK1RoZSByZWNvbW1lbmRlZCBmb3JtcyBvZiBhbiBlbmNvZGluZyBleHByZXNzaW9uIGFyZSA6OgogCiAgICAjIC0qLSBjb2Rpbmc6IDxlbmNvZGluZy1uYW1lPiAtKi0KIApAQCAtOTgsNyArMTAwLDcgQEAKIAogSWYgYW4gZW5jb2RpbmcgaXMgZGVjbGFyZWQsIHRoZSBlbmNvZGluZyBuYW1lIG11c3QgYmUgcmVjb2duaXplZCBieSBQeXRob24uIFRoZQogZW5jb2RpbmcgaXMgdXNlZCBmb3IgYWxsIGxleGljYWwgYW5hbHlzaXMsIGluY2x1ZGluZyBzdHJpbmcgbGl0ZXJhbHMsIGNvbW1lbnRzCi1hbmQgaWRlbnRpZmllcnMuIFRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbiBtdXN0IGFwcGVhciBvbiBhIGxpbmUgb2YgaXRzIG93bi4KK2FuZCBpZGVudGlmaWVycy4KIAogLi4gWFhYIHRoZXJlIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3VwcG9ydGVkIGVuY29kaW5ncy4KIApAQCAtMzEwLDcgKzMxMiw5IEBACiAqICpNYyogLSBzcGFjaW5nIGNvbWJpbmluZyBtYXJrcwogKiAqTmQqIC0gZGVjaW1hbCBudW1iZXJzCiAqICpQYyogLSBjb25uZWN0b3IgcHVuY3R1YXRpb25zCi0qICpPdGhlcl9JRF9TdGFydCogLSBleHBsaWNpdCBsaXN0IG9mIGNoYXJhY3RlcnMgaW4gYFByb3BMaXN0LnR4dCA8aHR0cDovL3VuaWNvZGUub3JnL1B1YmxpYy9VTklEQVRBL1Byb3BMaXN0LnR4dD5gXyB0byBzdXBwb3J0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisqICpPdGhlcl9JRF9TdGFydCogLSBleHBsaWNpdCBsaXN0IG9mIGNoYXJhY3RlcnMgaW4gYFByb3BMaXN0LnR4dAorICA8aHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvNi4zLjAvdWNkL1Byb3BMaXN0LnR4dD5gXyB0byBzdXBwb3J0IGJhY2t3YXJkcworICBjb21wYXRpYmlsaXR5CiAqICpPdGhlcl9JRF9Db250aW51ZSogLSBsaWtld2lzZQogCiBBbGwgaWRlbnRpZmllcnMgYXJlIGNvbnZlcnRlZCBpbnRvIHRoZSBub3JtYWwgZm9ybSBORktDIHdoaWxlIHBhcnNpbmc7IGNvbXBhcmlzb24KQEAgLTQ0MSw3ICs0NDUsNyBAQAogbWF5IG9ubHkgY29udGFpbiBBU0NJSSBjaGFyYWN0ZXJzOyBieXRlcyB3aXRoIGEgbnVtZXJpYyB2YWx1ZSBvZiAxMjggb3IgZ3JlYXRlcgogbXVzdCBiZSBleHByZXNzZWQgd2l0aCBlc2NhcGVzLgogCi1BcyBvZiBQeXRob24gMy4zIGl0IGlzIHBvc3NpYmxlIGFnYWluIHRvIHByZWZpeCB1bmljb2RlIHN0cmluZ3Mgd2l0aCBhCitBcyBvZiBQeXRob24gMy4zIGl0IGlzIHBvc3NpYmxlIGFnYWluIHRvIHByZWZpeCBzdHJpbmcgbGl0ZXJhbHMgd2l0aCBhCiBgYHVgYCBwcmVmaXggdG8gc2ltcGxpZnkgbWFpbnRlbmFuY2Ugb2YgZHVhbCAyLnggYW5kIDMueCBjb2RlYmFzZXMuCiAKIEJvdGggc3RyaW5nIGFuZCBieXRlcyBsaXRlcmFscyBtYXkgb3B0aW9uYWxseSBiZSBwcmVmaXhlZCB3aXRoIGEgbGV0dGVyIGBgJ3InYGAKQEAgLTQ1MSwyNCArNDU1LDI0IEBACiB1bmljb2RlIGxpdGVyYWxzIGJlaGF2ZSBkaWZmZXJlbnRseSB0aGFuIFB5dGhvbiAzLngncyB0aGUgYGAndXInYGAgc3ludGF4CiBpcyBub3Qgc3VwcG9ydGVkLgogCi0gICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKLSAgICAgIFRoZSBgYCdyYidgYCBwcmVmaXggb2YgcmF3IGJ5dGVzIGxpdGVyYWxzIGhhcyBiZWVuIGFkZGVkIGFzIGEgc3lub255bQotICAgICAgb2YgYGAnYnInYGAuCisuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKKyAgIFRoZSBgYCdyYidgYCBwcmVmaXggb2YgcmF3IGJ5dGVzIGxpdGVyYWxzIGhhcyBiZWVuIGFkZGVkIGFzIGEgc3lub255bQorICAgb2YgYGAnYnInYGAuCiAKLSAgIC4uIHZlcnNpb25hZGRlZDo6IDMuMwotICAgICAgU3VwcG9ydCBmb3IgdGhlIHVuaWNvZGUgbGVnYWN5IGxpdGVyYWwgKGBgdSd2YWx1ZSdgYCkgd2FzIHJlaW50cm9kdWNlZAotICAgICAgdG8gc2ltcGxpZnkgdGhlIG1haW50ZW5hbmNlIG9mIGR1YWwgUHl0aG9uIDIueCBhbmQgMy54IGNvZGViYXNlcy4KLSAgICAgIFNlZSA6cGVwOmA0MTRgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorLi4gdmVyc2lvbmFkZGVkOjogMy4zCisgICBTdXBwb3J0IGZvciB0aGUgdW5pY29kZSBsZWdhY3kgbGl0ZXJhbCAoYGB1J3ZhbHVlJ2BgKSB3YXMgcmVpbnRyb2R1Y2VkCisgICB0byBzaW1wbGlmeSB0aGUgbWFpbnRlbmFuY2Ugb2YgZHVhbCBQeXRob24gMi54IGFuZCAzLnggY29kZWJhc2VzLgorICAgU2VlIDpwZXA6YDQxNGAgZm9yIG1vcmUgaW5mb3JtYXRpb24uCiAKLUluIHRyaXBsZS1xdW90ZWQgc3RyaW5ncywgdW5lc2NhcGVkIG5ld2xpbmVzIGFuZCBxdW90ZXMgYXJlIGFsbG93ZWQgKGFuZCBhcmUKLXJldGFpbmVkKSwgZXhjZXB0IHRoYXQgdGhyZWUgdW5lc2NhcGVkIHF1b3RlcyBpbiBhIHJvdyB0ZXJtaW5hdGUgdGhlIHN0cmluZy4gIChBCi0icXVvdGUiIGlzIHRoZSBjaGFyYWN0ZXIgdXNlZCB0byBvcGVuIHRoZSBzdHJpbmcsIGkuZS4gZWl0aGVyIGBgJ2BgIG9yIGBgImBgLikKK0luIHRyaXBsZS1xdW90ZWQgbGl0ZXJhbHMsIHVuZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGVzIGFyZSBhbGxvd2VkIChhbmQgYXJlCityZXRhaW5lZCksIGV4Y2VwdCB0aGF0IHRocmVlIHVuZXNjYXBlZCBxdW90ZXMgaW4gYSByb3cgdGVybWluYXRlIHRoZSBsaXRlcmFsLiAgKEEKKyJxdW90ZSIgaXMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIG9wZW4gdGhlIGxpdGVyYWwsIGkuZS4gZWl0aGVyIGBgJ2BgIG9yIGBgImBgLikKIAogLi4gaW5kZXg6OiBwaHlzaWNhbCBsaW5lLCBlc2NhcGUgc2VxdWVuY2UsIFN0YW5kYXJkIEMsIEMKIAotVW5sZXNzIGFuIGBgJ3InYGAgb3IgYGAnUidgYCBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpbiBzdHJpbmdzIGFyZQotaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieSBTdGFuZGFyZCBDLiAgVGhlCi1yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOgorVW5sZXNzIGFuIGBgJ3InYGAgb3IgYGAnUidgYCBwcmVmaXggaXMgcHJlc2VudCwgZXNjYXBlIHNlcXVlbmNlcyBpbiBzdHJpbmcgYW5kCitieXRlcyBsaXRlcmFscyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRvIHJ1bGVzIHNpbWlsYXIgdG8gdGhvc2UgdXNlZCBieQorU3RhbmRhcmQgQy4gIFRoZSByZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlOgogCiArLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0rCiB8IEVzY2FwZSBTZXF1ZW5jZSB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyB8CkBAIC01NDUsMjAgKzU0OSwyMCBAQAogLi4gaW5kZXg6OiB1bnJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlCiAKIFVubGlrZSBTdGFuZGFyZCBDLCBhbGwgdW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIGxlZnQgaW4gdGhlIHN0cmluZwotdW5jaGFuZ2VkLCBpLmUuLCAqdGhlIGJhY2tzbGFzaCBpcyBsZWZ0IGluIHRoZSBzdHJpbmcqLiAgKFRoaXMgYmVoYXZpb3IgaXMKK3VuY2hhbmdlZCwgaS5lLiwgKnRoZSBiYWNrc2xhc2ggaXMgbGVmdCBpbiB0aGUgcmVzdWx0Ki4gIChUaGlzIGJlaGF2aW9yIGlzCiB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmc6IGlmIGFuIGVzY2FwZSBzZXF1ZW5jZSBpcyBtaXN0eXBlZCwgdGhlIHJlc3VsdGluZyBvdXRwdXQKIGlzIG1vcmUgZWFzaWx5IHJlY29nbml6ZWQgYXMgYnJva2VuLikgIEl0IGlzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUKIGVzY2FwZSBzZXF1ZW5jZXMgb25seSByZWNvZ25pemVkIGluIHN0cmluZyBsaXRlcmFscyBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mCiB1bnJlY29nbml6ZWQgZXNjYXBlcyBmb3IgYnl0ZXMgbGl0ZXJhbHMuCiAKLUV2ZW4gaW4gYSByYXcgc3RyaW5nLCBzdHJpbmcgcXVvdGVzIGNhbiBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2gsIGJ1dCB0aGUKLWJhY2tzbGFzaCByZW1haW5zIGluIHRoZSBzdHJpbmc7IGZvciBleGFtcGxlLCBgYHIiXCIiYGAgaXMgYSB2YWxpZCBzdHJpbmcKK0V2ZW4gaW4gYSByYXcgbGl0ZXJhbCwgcXVvdGVzIGNhbiBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2gsIGJ1dCB0aGUKK2JhY2tzbGFzaCByZW1haW5zIGluIHRoZSByZXN1bHQ7IGZvciBleGFtcGxlLCBgYHIiXCIiYGAgaXMgYSB2YWxpZCBzdHJpbmcKIGxpdGVyYWwgY29uc2lzdGluZyBvZiB0d28gY2hhcmFjdGVyczogYSBiYWNrc2xhc2ggYW5kIGEgZG91YmxlIHF1b3RlOyBgYHIiXCJgYAogaXMgbm90IGEgdmFsaWQgc3RyaW5nIGxpdGVyYWwgKGV2ZW4gYSByYXcgc3RyaW5nIGNhbm5vdCBlbmQgaW4gYW4gb2RkIG51bWJlciBvZgotYmFja3NsYXNoZXMpLiAgU3BlY2lmaWNhbGx5LCAqYSByYXcgc3RyaW5nIGNhbm5vdCBlbmQgaW4gYSBzaW5nbGUgYmFja3NsYXNoKgorYmFja3NsYXNoZXMpLiAgU3BlY2lmaWNhbGx5LCAqYSByYXcgbGl0ZXJhbCBjYW5ub3QgZW5kIGluIGEgc2luZ2xlIGJhY2tzbGFzaCoKIChzaW5jZSB0aGUgYmFja3NsYXNoIHdvdWxkIGVzY2FwZSB0aGUgZm9sbG93aW5nIHF1b3RlIGNoYXJhY3RlcikuICBOb3RlIGFsc28KIHRoYXQgYSBzaW5nbGUgYmFja3NsYXNoIGZvbGxvd2VkIGJ5IGEgbmV3bGluZSBpcyBpbnRlcnByZXRlZCBhcyB0aG9zZSB0d28KLWNoYXJhY3RlcnMgYXMgcGFydCBvZiB0aGUgc3RyaW5nLCAqbm90KiBhcyBhIGxpbmUgY29udGludWF0aW9uLgorY2hhcmFjdGVycyBhcyBwYXJ0IG9mIHRoZSBsaXRlcmFsLCAqbm90KiBhcyBhIGxpbmUgY29udGludWF0aW9uLgogCiAKIC4uIF9zdHJpbmctY2F0ZW5hdGlvbjoKQEAgLTYzMCw4ICs2MzQsNyBAQAogU29tZSBleGFtcGxlcyBvZiBpbnRlZ2VyIGxpdGVyYWxzOjoKIAogICAgNyAgICAgMjE0NzQ4MzY0NyAgICAgICAgICAgICAgICAgICAgICAgIDBvMTc3ICAgIDBiMTAwMTEwMTExCi0gICAzICAgICA3OTIyODE2MjUxNDI2NDMzNzU5MzU0Mzk1MDMzNiAgICAgMG8zNzcgICAgMHgxMDAwMDAwMDAKLSAgICAgICAgIDc5MjI4MTYyNTE0MjY0MzM3NTkzNTQzOTUwMzM2ICAgICAgICAgICAgICAweGRlYWRiZWVmCisgICAzICAgICA3OTIyODE2MjUxNDI2NDMzNzU5MzU0Mzk1MDMzNiAgICAgMG8zNzcgICAgMHhkZWFkYmVlZgogCiAKIC4uIF9mbG9hdGluZzoKQEAgLTcyNiw0ICs3MjksNCBAQAogCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAotLi4gWyNdIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLzYuMS4wL3VjZC9OYW1lQWxpYXNlcy50eHQKKy4uIFsjXSBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy82LjMuMC91Y2QvTmFtZUFsaWFzZXMudHh0CmRpZmYgLS1naXQgYS9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QgYi9Eb2MvcmVmZXJlbmNlL3NpbXBsZV9zdG10cy5yc3QKaW5kZXggNDBiYmMzOS4uODk0NmI0ZiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS9zaW1wbGVfc3RtdHMucnN0CisrKyBiL0RvYy9yZWZlcmVuY2Uvc2ltcGxlX3N0bXRzLnJzdApAQCAtNyw3ICs3LDcgQEAKIAogLi4gaW5kZXg6OiBwYWlyOiBzaW1wbGU7IHN0YXRlbWVudAogCi1TaW1wbGUgc3RhdGVtZW50cyBhcmUgY29tcHJpc2VkIHdpdGhpbiBhIHNpbmdsZSBsb2dpY2FsIGxpbmUuIFNldmVyYWwgc2ltcGxlCitBIHNpbXBsZSBzdGF0ZW1lbnQgaXMgY29tcHJpc2VkIHdpdGhpbiBhIHNpbmdsZSBsb2dpY2FsIGxpbmUuIFNldmVyYWwgc2ltcGxlCiBzdGF0ZW1lbnRzIG1heSBvY2N1ciBvbiBhIHNpbmdsZSBsaW5lIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLiAgVGhlIHN5bnRheCBmb3IKIHNpbXBsZSBzdGF0ZW1lbnRzIGlzOgogCkBAIC03MCw2ICs3MCw3IEBACiA9PT09PT09PT09PT09PT09PT09PT0KIAogLi4gaW5kZXg6OgorICAgc2luZ2xlOiA9OyBhc3NpZ25tZW50IHN0YXRlbWVudAogICAgcGFpcjogYXNzaWdubWVudDsgc3RhdGVtZW50CiAgICBwYWlyOiBiaW5kaW5nOyBuYW1lCiAgICBwYWlyOiByZWJpbmRpbmc7IG5hbWUKQEAgLTkwLDggKzkxLDggQEAKICAgICAgICAgIDogfCBgc2xpY2luZ2AKICAgICAgICAgIDogfCAiKiIgYHRhcmdldGAKIAotKFNlZSBzZWN0aW9uIDpyZWY6YHByaW1hcmllc2AgZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlCi1zeW1ib2xzLikKKyhTZWUgc2VjdGlvbiA6cmVmOmBwcmltYXJpZXNgIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciAqYXR0cmlidXRlcmVmKiwKKypzdWJzY3JpcHRpb24qLCBhbmQgKnNsaWNpbmcqLikKIAogQW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGxpc3QgKHJlbWVtYmVyIHRoYXQgdGhpcyBjYW4gYmUKIGEgc2luZ2xlIGV4cHJlc3Npb24gb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgdGhlIGxhdHRlciB5aWVsZGluZyBhIHR1cGxlKSBhbmQKQEAgLTIyNyw3ICsyMjgsNyBAQAogICBpbmNsdXNpdmUuICBGaW5hbGx5LCB0aGUgc2VxdWVuY2Ugb2JqZWN0IGlzIGFza2VkIHRvIHJlcGxhY2UgdGhlIHNsaWNlIHdpdGgKICAgdGhlIGl0ZW1zIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZS4gIFRoZSBsZW5ndGggb2YgdGhlIHNsaWNlIG1heSBiZSBkaWZmZXJlbnQKICAgZnJvbSB0aGUgbGVuZ3RoIG9mIHRoZSBhc3NpZ25lZCBzZXF1ZW5jZSwgdGh1cyBjaGFuZ2luZyB0aGUgbGVuZ3RoIG9mIHRoZQotICB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSBvYmplY3QgYWxsb3dzIGl0LgorICB0YXJnZXQgc2VxdWVuY2UsIGlmIHRoZSB0YXJnZXQgc2VxdWVuY2UgYWxsb3dzIGl0LgogCiAuLiBpbXBsLWRldGFpbDo6CiAKQEAgLTIzNSwxNCArMjM2LDE1IEBACiAgICBhcyBmb3IgZXhwcmVzc2lvbnMsIGFuZCBpbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbgogICAgcGhhc2UsIGNhdXNpbmcgbGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy4KIAotV0FSTklORzogQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHMgYmV0d2VlbiB0aGUKLWxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSAnc2FmZScgKGZvciBleGFtcGxlIGBgYSwgYiA9IGIsIGFgYAotc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZSBjb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvIHZhcmlhYmxlcwotYXJlIG5vdCBzYWZlISAgRm9yIGluc3RhbmNlLCB0aGUgZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzIGBgWzAsIDJdYGA6OgorQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHMgYmV0d2VlbiB0aGUKK2xlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSAnc2ltdWx0YW5lbm91cycgKGZvciBleGFtcGxlIGBgYSwgYiA9CitiLCBhYGAgc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZSBjb2xsZWN0aW9uIG9mIGFzc2lnbmVkLXRvCit2YXJpYWJsZXMgb2NjdXIgbGVmdC10by1yaWdodCwgc29tZXRpbWVzIHJlc3VsdGluZyBpbiBjb25mdXNpb24uICBGb3IgaW5zdGFuY2UsCit0aGUgZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzIGBgWzAsIDJdYGA6OgogCiAgICB4ID0gWzAsIDFdCiAgICBpID0gMAotICAgaSwgeFtpXSA9IDEsIDIKKyAgIGksIHhbaV0gPSAxLCAyICAgICAgICAgIyBpIGlzIHVwZGF0ZWQsIHRoZW4geFtpXSBpcyB1cGRhdGVkCiAgICBwcmludCh4KQogCiAKQEAgLTI2MCw2ICsyNjIsMTggQEAKIC4uIGluZGV4OjoKICAgIHBhaXI6IGF1Z21lbnRlZDsgYXNzaWdubWVudAogICAgc2luZ2xlOiBzdGF0ZW1lbnQ7IGFzc2lnbm1lbnQsIGF1Z21lbnRlZAorICAgc2luZ2xlOiArPTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogLT07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6ICo9OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiAvPTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogJT07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6ICY9OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiBePTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogfD07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6ICoqPTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKKyAgIHNpbmdsZTogLy89OyBhdWdtZW50ZWQgYXNzaWdubWVudAorICAgc2luZ2xlOiA+Pj07IGF1Z21lbnRlZCBhc3NpZ25tZW50CisgICBzaW5nbGU6IDw8PTsgYXVnbWVudGVkIGFzc2lnbm1lbnQKIAogQXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIGNvbWJpbmF0aW9uLCBpbiBhIHNpbmdsZSBzdGF0ZW1lbnQsIG9mIGEgYmluYXJ5CiBvcGVyYXRpb24gYW5kIGFuIGFzc2lnbm1lbnQgc3RhdGVtZW50OgpAQCAtMjcwLDcgKzI4NCw3IEBACiAgICBhdWdvcDogIis9IiB8ICItPSIgfCAiKj0iIHwgIi89IiB8ICIvLz0iIHwgIiU9IiB8ICIqKj0iCiAgICAgICAgIDogfCAiPj49IiB8ICI8PD0iIHwgIiY9IiB8ICJePSIgfCAifD0iCiAKLShTZWUgc2VjdGlvbiA6cmVmOmBwcmltYXJpZXNgIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvciB0aGUgbGFzdCB0aHJlZQorKFNlZSBzZWN0aW9uIDpyZWY6YHByaW1hcmllc2AgZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgb2YgdGhlIGxhc3QgdGhyZWUKIHN5bWJvbHMuKQogCiBBbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWwgYXNzaWdubWVudApAQCAtMjg0LDYgKzI5OCwxMSBAQAogaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdCByYXRoZXIgdGhhbiBjcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kCiBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LCB0aGUgb2xkIG9iamVjdCBpcyBtb2RpZmllZCBpbnN0ZWFkLgogCitVbmxpa2Ugbm9ybWFsIGFzc2lnbm1lbnRzLCBhdWdtZW50ZWQgYXNzaWdubWVudHMgZXZhbHVhdGUgdGhlIGxlZnQtaGFuZCBzaWRlCisqYmVmb3JlKiBldmFsdWF0aW5nIHRoZSByaWdodC1oYW5kIHNpZGUuICBGb3IgZXhhbXBsZSwgYGBhW2ldICs9IGYoeClgYCBmaXJzdAorbG9va3MtdXAgYGBhW2ldYGAsIHRoZW4gaXQgZXZhbHVhdGVzIGBgZih4KWBgIGFuZCBwZXJmb3JtcyB0aGUgYWRkaXRpb24sIGFuZAorbGFzdGx5LCBpdCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIGBgYVtpXWBgLgorCiBXaXRoIHRoZSBleGNlcHRpb24gb2YgYXNzaWduaW5nIHRvIHR1cGxlcyBhbmQgbXVsdGlwbGUgdGFyZ2V0cyBpbiBhIHNpbmdsZQogc3RhdGVtZW50LCB0aGUgYXNzaWdubWVudCBkb25lIGJ5IGF1Z21lbnRlZCBhc3NpZ25tZW50IHN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUKIHNhbWUgd2F5IGFzIG5vcm1hbCBhc3NpZ25tZW50cy4gU2ltaWxhcmx5LCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlCkBAIC01MjksOCArNTQ4LDggQEAKICAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZAogCiBBIHNpbWlsYXIgbWVjaGFuaXNtIHdvcmtzIGltcGxpY2l0bHkgaWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBpbnNpZGUgYW4KLWV4Y2VwdGlvbiBoYW5kbGVyOiB0aGUgcHJldmlvdXMgZXhjZXB0aW9uIGlzIHRoZW4gYXR0YWNoZWQgYXMgdGhlIG5ldwotZXhjZXB0aW9uJ3MgOmF0dHI6YF9fY29udGV4dF9fYCBhdHRyaWJ1dGU6OgorZXhjZXB0aW9uIGhhbmRsZXIgb3IgYSA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlOiB0aGUgcHJldmlvdXMgZXhjZXB0aW9uIGlzIHRoZW4KK2F0dGFjaGVkIGFzIHRoZSBuZXcgZXhjZXB0aW9uJ3MgOmF0dHI6YF9fY29udGV4dF9fYCBhdHRyaWJ1dGU6OgogCiAgICA+Pj4gdHJ5OgogICAgLi4uICAgICBwcmludCgxIC8gMCkKQEAgLTY0NSw3ICs2NjQsNyBAQAogYXMgdGhvdWdoIHRoZSBjbGF1c2VzIGhhZCBiZWVuIHNlcGFyYXRlZCBvdXQgaW50byBpbmRpdmlkaXVhbCBpbXBvcnQKIHN0YXRlbWVudHMuCiAKLVRoZSBkZXRhaWxzIG9mIHRoZSBmaXJzdCBzdGVwLCBmaW5kaW5nIGFuZCBsb2FkaW5nIG1vZHVsZXMgaXMgZGVzY3JpYmVkIGluCitUaGUgZGV0YWlscyBvZiB0aGUgZmlyc3Qgc3RlcCwgZmluZGluZyBhbmQgbG9hZGluZyBtb2R1bGVzIGFyZSBkZXNjcmliZWQgaW4KIGdyZWF0ZXIgZGV0YWlsIGluIHRoZSBzZWN0aW9uIG9uIHRoZSA6cmVmOmBpbXBvcnQgc3lzdGVtIDxpbXBvcnRzeXN0ZW0+YCwKIHdoaWNoIGFsc28gZGVzY3JpYmVzIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHBhY2thZ2VzIGFuZCBtb2R1bGVzIHRoYXQgY2FuCiBiZSBpbXBvcnRlZCwgYXMgd2VsbCBhcyBhbGwgdGhlIGhvb2tzIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplCkBAIC02NTYsNiArNjc1LDggQEAKIElmIHRoZSByZXF1ZXN0ZWQgbW9kdWxlIGlzIHJldHJpZXZlZCBzdWNjZXNzZnVsbHksIGl0IHdpbGwgYmUgbWFkZQogYXZhaWxhYmxlIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgaW4gb25lIG9mIHRocmVlIHdheXM6CiAKKy4uIGluZGV4Ojogc2luZ2xlOiBhczsgaW1wb3J0IHN0YXRlbWVudAorCiAqIElmIHRoZSBtb2R1bGUgbmFtZSBpcyBmb2xsb3dlZCBieSA6a2V5d29yZDpgYXNgLCB0aGVuIHRoZSBuYW1lCiAgIGZvbGxvd2luZyA6a2V5d29yZDpgYXNgIGlzIGJvdW5kIGRpcmVjdGx5IHRvIHRoZSBpbXBvcnRlZCBtb2R1bGUuCiAqIElmIG5vIG90aGVyIG5hbWUgaXMgc3BlY2lmaWVkLCBhbmQgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCBpcyBhIHRvcApAQCAtNjc0LDcgKzY5NSw3IEBACiAKIFRoZSA6a2V5d29yZDpgZnJvbWAgZm9ybSB1c2VzIGEgc2xpZ2h0bHkgbW9yZSBjb21wbGV4IHByb2Nlc3M6CiAKLSMuIGZpbmQgdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gdGhlIDprZXl3b3JkOmBmcm9tYCBjbGF1c2UgbG9hZGluZyBhbmQKKyMuIGZpbmQgdGhlIG1vZHVsZSBzcGVjaWZpZWQgaW4gdGhlIDprZXl3b3JkOmBmcm9tYCBjbGF1c2UsIGxvYWRpbmcgYW5kCiAgICBpbml0aWFsaXppbmcgaXQgaWYgbmVjZXNzYXJ5OwogIy4gZm9yIGVhY2ggb2YgdGhlIGlkZW50aWZpZXJzIHNwZWNpZmllZCBpbiB0aGUgOmtleXdvcmQ6YGltcG9ydGAgY2xhdXNlczoKIApAQCAtNjgyLDcgKzcwMyw3IEBACiAgICAjLiBpZiBub3QsIGF0dGVtcHQgdG8gaW1wb3J0IGEgc3VibW9kdWxlIHdpdGggdGhhdCBuYW1lIGFuZCB0aGVuCiAgICAgICBjaGVjayB0aGUgaW1wb3J0ZWQgbW9kdWxlIGFnYWluIGZvciB0aGF0IGF0dHJpYnV0ZQogICAgIy4gaWYgdGhlIGF0dHJpYnV0ZSBpcyBub3QgZm91bmQsIDpleGM6YEltcG9ydEVycm9yYCBpcyByYWlzZWQuCi0gICAjLiBvdGhlcndpc2UsIGEgcmVmZXJlbmNlIHRvIHRoYXQgdmFsdWUgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSwKKyAgICMuIG90aGVyd2lzZSwgYSByZWZlcmVuY2UgdG8gdGhhdCB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSwKICAgICAgIHVzaW5nIHRoZSBuYW1lIGluIHRoZSA6a2V5d29yZDpgYXNgIGNsYXVzZSBpZiBpdCBpcyBwcmVzZW50LAogICAgICAgb3RoZXJ3aXNlIHVzaW5nIHRoZSBhdHRyaWJ1dGUgbmFtZQogCkBAIC03MTAsMTAgKzczMSw5IEBACiB0byBhdm9pZCBhY2NpZGVudGFsbHkgZXhwb3J0aW5nIGl0ZW1zIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBBUEkgKHN1Y2ggYXMKIGxpYnJhcnkgbW9kdWxlcyB3aGljaCB3ZXJlIGltcG9ydGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgbW9kdWxlKS4KIAotVGhlIDprZXl3b3JkOmBmcm9tYCBmb3JtIHdpdGggYGAqYGAgbWF5IG9ubHkgb2NjdXIgaW4gYSBtb2R1bGUgc2NvcGUuICBUaGUgd2lsZAotY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gYGBpbXBvcnQgKmBgIC0tLSBpcyBvbmx5IGFsbG93ZWQgYXQgdGhlIG1vZHVsZSBsZXZlbC4KLUF0dGVtcHRpbmcgdG8gdXNlIGl0IGluIGNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb25zIHdpbGwgcmFpc2UgYQotOmV4YzpgU3ludGF4RXJyb3JgLgorVGhlIHdpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gYGBmcm9tIG1vZHVsZSBpbXBvcnQgKmBgIC0tLSBpcyBvbmx5IGFsbG93ZWQgYXQKK3RoZSBtb2R1bGUgbGV2ZWwuICBBdHRlbXB0aW5nIHRvIHVzZSBpdCBpbiBjbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9ucyB3aWxsCityYWlzZSBhIDpleGM6YFN5bnRheEVycm9yYC4KIAogLi4gaW5kZXg6OgogICAgIHNpbmdsZTogcmVsYXRpdmU7IGltcG9ydApAQCAtNzMyLDcgKzc1Miw3IEBACiBUaGUgc3BlY2lmaWNhdGlvbiBmb3IgcmVsYXRpdmUgaW1wb3J0cyBpcyBjb250YWluZWQgd2l0aGluIDpwZXA6YDMyOGAuCiAKIDpmdW5jOmBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZWAgaXMgcHJvdmlkZWQgdG8gc3VwcG9ydCBhcHBsaWNhdGlvbnMgdGhhdAotZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZXMgbmVlZCB0byBiZSBsb2FkZWQgZHluYW1pY2FsbHkuCitkZXRlcm1pbmUgZHluYW1pY2FsbHkgdGhlIG1vZHVsZXMgdG8gYmUgbG9hZGVkLgogCiAKIC4uIF9mdXR1cmU6CkBAIC03NDQsMTAgKzc2NCwxMiBAQAogCiBBIDpkZm46YGZ1dHVyZSBzdGF0ZW1lbnRgIGlzIGEgZGlyZWN0aXZlIHRvIHRoZSBjb21waWxlciB0aGF0IGEgcGFydGljdWxhcgogbW9kdWxlIHNob3VsZCBiZSBjb21waWxlZCB1c2luZyBzeW50YXggb3Igc2VtYW50aWNzIHRoYXQgd2lsbCBiZSBhdmFpbGFibGUgaW4gYQotc3BlY2lmaWVkIGZ1dHVyZSByZWxlYXNlIG9mIFB5dGhvbi4gIFRoZSBmdXR1cmUgc3RhdGVtZW50IGlzIGludGVuZGVkIHRvIGVhc2UKLW1pZ3JhdGlvbiB0byBmdXR1cmUgdmVyc2lvbnMgb2YgUHl0aG9uIHRoYXQgaW50cm9kdWNlIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvCi10aGUgbGFuZ3VhZ2UuICBJdCBhbGxvd3MgdXNlIG9mIHRoZSBuZXcgZmVhdHVyZXMgb24gYSBwZXItbW9kdWxlIGJhc2lzIGJlZm9yZQotdGhlIHJlbGVhc2UgaW4gd2hpY2ggdGhlIGZlYXR1cmUgYmVjb21lcyBzdGFuZGFyZC4KK3NwZWNpZmllZCBmdXR1cmUgcmVsZWFzZSBvZiBQeXRob24gd2hlcmUgdGhlIGZlYXR1cmUgYmVjb21lcyBzdGFuZGFyZC4KKworVGhlIGZ1dHVyZSBzdGF0ZW1lbnQgaXMgaW50ZW5kZWQgdG8gZWFzZSBtaWdyYXRpb24gdG8gZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvbgordGhhdCBpbnRyb2R1Y2UgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8gdGhlIGxhbmd1YWdlLiAgSXQgYWxsb3dzIHVzZSBvZiB0aGUgbmV3CitmZWF0dXJlcyBvbiBhIHBlci1tb2R1bGUgYmFzaXMgYmVmb3JlIHRoZSByZWxlYXNlIGluIHdoaWNoIHRoZSBmZWF0dXJlIGJlY29tZXMKK3N0YW5kYXJkLgogCiAuLiBwcm9kdWN0aW9ubGlzdDo6ICoKICAgIGZ1dHVyZV9zdGF0ZW1lbnQ6ICJmcm9tIiAiX19mdXR1cmVfXyIgImltcG9ydCIgZmVhdHVyZSBbImFzIiBuYW1lXQpAQCAtODQyLDcgKzg2NCw3IEBACiAKIC4uIGltcGwtZGV0YWlsOjoKIAotICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgZW5mb3JjZSB0aGUgbGF0dGVyIHR3byByZXN0cmljdGlvbnMsIGJ1dAorICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgZW5mb3JjZSB0aGUgdHdvIHJlc3RyaWN0aW9ucywgYnV0CiAgICBwcm9ncmFtcyBzaG91bGQgbm90IGFidXNlIHRoaXMgZnJlZWRvbSwgYXMgZnV0dXJlIGltcGxlbWVudGF0aW9ucyBtYXkgZW5mb3JjZQogICAgdGhlbSBvciBzaWxlbnRseSBjaGFuZ2UgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0uCiAKQEAgLTg3NSwxNiArODk3LDE2IEBACiAgICAgICAgICAgICAgICAgOiB8ICJub25sb2NhbCIgaWRlbnRpZmllciBhdWdvcCBleHByZXNzaW9uX2xpc3QKIAogVGhlIDprZXl3b3JkOmBub25sb2NhbGAgc3RhdGVtZW50IGNhdXNlcyB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIHRvIHJlZmVyIHRvCi1wcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUuICBUaGlzIGlzIGltcG9ydGFudAotYmVjYXVzZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYmluZGluZyBpcyB0byBzZWFyY2ggdGhlIGxvY2FsIG5hbWVzcGFjZQotZmlyc3QuICBUaGUgc3RhdGVtZW50IGFsbG93cyBlbmNhcHN1bGF0ZWQgY29kZSB0byByZWJpbmQgdmFyaWFibGVzIG91dHNpZGUgb2YKLXRoZSBsb2NhbCBzY29wZSBiZXNpZGVzIHRoZSBnbG9iYWwgKG1vZHVsZSkgc2NvcGUuCitwcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZXhjbHVkaW5nIGdsb2JhbHMuCitUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBiaW5kaW5nIGlzIHRvIHNlYXJjaCB0aGUKK2xvY2FsIG5hbWVzcGFjZSBmaXJzdC4gIFRoZSBzdGF0ZW1lbnQgYWxsb3dzIGVuY2Fwc3VsYXRlZCBjb2RlIHRvIHJlYmluZAordmFyaWFibGVzIG91dHNpZGUgb2YgdGhlIGxvY2FsIHNjb3BlIGJlc2lkZXMgdGhlIGdsb2JhbCAobW9kdWxlKSBzY29wZS4KIAogLi4gWFhYIG5vdCBpbXBsZW1lbnRlZAogICAgVGhlIDprZXl3b3JkOmBub25sb2NhbGAgc3RhdGVtZW50IG1heSBwcmVwZW5kIGFuIGFzc2lnbm1lbnQgb3IgYXVnbWVudGVkCiAgICBhc3NpZ25tZW50LCBidXQgbm90IGFuIGV4cHJlc3Npb24uCiAKLU5hbWVzIGxpc3RlZCBpbiBhIDprZXl3b3JkOmBub25sb2NhbGAgc3RhdGVtZW50LCB1bmxpa2UgdG8gdGhvc2UgbGlzdGVkIGluIGEKK05hbWVzIGxpc3RlZCBpbiBhIDprZXl3b3JkOmBub25sb2NhbGAgc3RhdGVtZW50LCB1bmxpa2UgdGhvc2UgbGlzdGVkIGluIGEKIDprZXl3b3JkOmBnbG9iYWxgIHN0YXRlbWVudCwgbXVzdCByZWZlciB0byBwcmUtZXhpc3RpbmcgYmluZGluZ3MgaW4gYW4KIGVuY2xvc2luZyBzY29wZSAodGhlIHNjb3BlIGluIHdoaWNoIGEgbmV3IGJpbmRpbmcgc2hvdWxkIGJlIGNyZWF0ZWQgY2Fubm90CiBiZSBkZXRlcm1pbmVkIHVuYW1iaWd1b3VzbHkpLgpkaWZmIC0tZ2l0IGEvRG9jL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLnJzdCBiL0RvYy9yZWZlcmVuY2UvdG9wbGV2ZWxfY29tcG9uZW50cy5yc3QKaW5kZXggZjRiYzcxZi4uZTE2ODdmZiAxMDA2NDQKLS0tIGEvRG9jL3JlZmVyZW5jZS90b3BsZXZlbF9jb21wb25lbnRzLnJzdAorKysgYi9Eb2MvcmVmZXJlbmNlL3RvcGxldmVsX2NvbXBvbmVudHMucnN0CkBAIC05NywyMCArOTcsMTAgQEAKID09PT09PT09PT09PT09PT0KIAogLi4gaW5kZXg6OiBzaW5nbGU6IGlucHV0Ci0KIC4uIGluZGV4OjogYnVpbHRpbjogZXZhbAogCi1UaGVyZSBhcmUgdHdvIGZvcm1zIG9mIGV4cHJlc3Npb24gaW5wdXQuICBCb3RoIGlnbm9yZSBsZWFkaW5nIHdoaXRlc3BhY2UuIFRoZQorOmZ1bmM6YGV2YWxgIGlzIHVzZWQgZm9yIGV4cHJlc3Npb24gaW5wdXQuICBJdCBpZ25vcmVzIGxlYWRpbmcgd2hpdGVzcGFjZS4gVGhlCiBzdHJpbmcgYXJndW1lbnQgdG8gOmZ1bmM6YGV2YWxgIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIGZvcm06CiAKIC4uIHByb2R1Y3Rpb25saXN0OjoKICAgIGV2YWxfaW5wdXQ6IGBleHByZXNzaW9uX2xpc3RgIE5FV0xJTkUqCi0KLS4uIGluZGV4OjoKLSAgIG9iamVjdDogZmlsZQotICAgc2luZ2xlOiBpbnB1dDsgcmF3Ci0gICBzaW5nbGU6IHJlYWRsaW5lKCkgKGZpbGUgbWV0aG9kKQotCi1Ob3RlOiB0byByZWFkICdyYXcnIGlucHV0IGxpbmUgd2l0aG91dCBpbnRlcnByZXRhdGlvbiwgeW91IGNhbiB1c2UgdGhlCi06bWV0aDpgcmVhZGxpbmVgIG1ldGhvZCBvZiBmaWxlIG9iamVjdHMsIGluY2x1ZGluZyBgYHN5cy5zdGRpbmBgLgotCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2NfYW5ub3RhdGlvbnMucHkgYi9Eb2MvdG9vbHMvZXh0ZW5zaW9ucy9jX2Fubm90YXRpb25zLnB5CnNpbWlsYXJpdHkgaW5kZXggOTMlCnJlbmFtZSBmcm9tIERvYy90b29scy9zcGhpbnhleHQvY19hbm5vdGF0aW9ucy5weQpyZW5hbWUgdG8gRG9jL3Rvb2xzL2V4dGVuc2lvbnMvY19hbm5vdGF0aW9ucy5weQppbmRleCA4YjUxNjdhLi5iYWEzOWYzIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2NfYW5ub3RhdGlvbnMucHkKKysrIGIvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvY19hbm5vdGF0aW9ucy5weQpAQCAtMTMsNyArMTMsNyBAQAogICAgIFVzYWdlOiBTZXQgdGhlIGByZWZjb3VudF9maWxlYCBjb25maWcgdmFsdWUgdG8gdGhlIHBhdGggdG8gdGhlIHJlZmVyZW5jZQogICAgIGNvdW50IGRhdGEgZmlsZS4KIAotICAgIDpjb3B5cmlnaHQ6IENvcHlyaWdodCAyMDA3LTIwMTMgYnkgR2VvcmcgQnJhbmRsLgorICAgIDpjb3B5cmlnaHQ6IENvcHlyaWdodCAyMDA3LTIwMTQgYnkgR2VvcmcgQnJhbmRsLgogICAgIDpsaWNlbnNlOiBQeXRob24gbGljZW5zZS4KICIiIgogCkBAIC04MSw3ICs4MSwxMCBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiBub3QgcGFyWzBdLmhhc19rZXkoJ25hbWVzJykgb3Igbm90IHBhclswXVsnbmFtZXMnXToKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgZW50cnkgPSBzZWxmLmdldChwYXJbMF1bJ25hbWVzJ11bMF0pCisgICAgICAgICAgICBuYW1lID0gcGFyWzBdWyduYW1lcyddWzBdCisgICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoImMuIik6CisgICAgICAgICAgICAgICAgbmFtZSA9IG5hbWVbMjpdCisgICAgICAgICAgICBlbnRyeSA9IHNlbGYuZ2V0KG5hbWUpCiAgICAgICAgICAgICBpZiBub3QgZW50cnk6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsaWYgZW50cnkucmVzdWx0X3R5cGUgbm90IGluICgiUHlPYmplY3QqIiwgIlB5VmFyT2JqZWN0KiIpOgpAQCAtMTE1LDMgKzExOCw0IEBACiAgICAgICAgIHNpZ25vZGUucGFyZW50WydzdGFibGVhYmknXSA9ICdzdGFibGVhYmknIGluIHNlbGYub3B0aW9ucwogICAgICAgICByZXR1cm4gb2xkX2hhbmRsZV9zaWduYXR1cmUoc2VsZiwgc2lnLCBzaWdub2RlKQogICAgIENPYmplY3QuaGFuZGxlX3NpZ25hdHVyZSA9IG5ld19oYW5kbGVfc2lnbmF0dXJlCisgICAgcmV0dXJuIHsndmVyc2lvbic6ICcxLjAnLCAncGFyYWxsZWxfcmVhZF9zYWZlJzogVHJ1ZX0KZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvcGF0Y2hsZXZlbC5weSBiL0RvYy90b29scy9leHRlbnNpb25zL3BhdGNobGV2ZWwucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvYy90b29scy9zcGhpbnhleHQvcGF0Y2hsZXZlbC5weQpyZW5hbWUgdG8gRG9jL3Rvb2xzL2V4dGVuc2lvbnMvcGF0Y2hsZXZlbC5weQpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5IGIvRG9jL3Rvb2xzL2V4dGVuc2lvbnMvcHlzcGVjaWZpYy5weQpzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L3B5c3BlY2lmaWMucHkKcmVuYW1lIHRvIERvYy90b29scy9leHRlbnNpb25zL3B5c3BlY2lmaWMucHkKaW5kZXggZjJkM2NhMS4uNjRhNTY2NSAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5CisrKyBiL0RvYy90b29scy9leHRlbnNpb25zL3B5c3BlY2lmaWMucHkKQEAgLTksMTcgKzksMzIgQEAKICAgICA6bGljZW5zZTogUHl0aG9uIGxpY2Vuc2UuCiAiIiIKIAotSVNTVUVfVVJJID0gJ2h0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUlcycKLVNPVVJDRV9VUkkgPSAnaHR0cDovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlLzMuMy8lcycKK2ltcG9ydCByZQoraW1wb3J0IGNvZGVjcworZnJvbSBvcyBpbXBvcnQgcGF0aAorZnJvbSB0aW1lIGltcG9ydCBhc2N0aW1lCitmcm9tIHBwcmludCBpbXBvcnQgcGZvcm1hdAorZnJvbSBkb2N1dGlscy5pbyBpbXBvcnQgU3RyaW5nT3V0cHV0Citmcm9tIGRvY3V0aWxzLnV0aWxzIGltcG9ydCBuZXdfZG9jdW1lbnQKIAogZnJvbSBkb2N1dGlscyBpbXBvcnQgbm9kZXMsIHV0aWxzCiAKLWltcG9ydCBzcGhpbngKK2Zyb20gc3BoaW54IGltcG9ydCBhZGRub2RlcworZnJvbSBzcGhpbnguYnVpbGRlcnMgaW1wb3J0IEJ1aWxkZXIKIGZyb20gc3BoaW54LnV0aWwubm9kZXMgaW1wb3J0IHNwbGl0X2V4cGxpY2l0X3RpdGxlCiBmcm9tIHNwaGlueC51dGlsLmNvbXBhdCBpbXBvcnQgRGlyZWN0aXZlCiBmcm9tIHNwaGlueC53cml0ZXJzLmh0bWwgaW1wb3J0IEhUTUxUcmFuc2xhdG9yCitmcm9tIHNwaGlueC53cml0ZXJzLnRleHQgaW1wb3J0IFRleHRXcml0ZXIKIGZyb20gc3BoaW54LndyaXRlcnMubGF0ZXggaW1wb3J0IExhVGVYVHJhbnNsYXRvcgotZnJvbSBzcGhpbngubG9jYWxlIGltcG9ydCB2ZXJzaW9ubGFiZWxzCitmcm9tIHNwaGlueC5kb21haW5zLnB5dGhvbiBpbXBvcnQgUHlNb2R1bGVsZXZlbCwgUHlDbGFzc21lbWJlcgorCisjIFN1cHBvcnQgZm9yIGNoZWNraW5nIGZvciBzdXNwaWNpb3VzIG1hcmt1cAorCitpbXBvcnQgc3VzcGljaW91cworCisKK0lTU1VFX1VSSSA9ICdodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZSVzJworU09VUkNFX1VSSSA9ICdodHRwczovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlLzMuNC8lcycKIAogIyBtb25rZXktcGF0Y2ggcmVTVCBwYXJzZXIgdG8gZGlzYWJsZSBhbHBoYWJldGljIGFuZCByb21hbiBlbnVtZXJhdGVkIGxpc3RzCiBmcm9tIGRvY3V0aWxzLnBhcnNlcnMucnN0LnN0YXRlcyBpbXBvcnQgQm9keQpAQCAtMjgsMjMgKzQzLDEyIEBACiAgICAgQm9keS5lbnVtLmNvbnZlcnRlcnNbJ2xvd2Vycm9tYW4nXSA9IFwKICAgICBCb2R5LmVudW0uY29udmVydGVyc1sndXBwZXJyb21hbiddID0gbGFtYmRhIHg6IE5vbmUKIAotU1BISU5YMTEgPSBzcGhpbnguX192ZXJzaW9uX19bOjNdIDwgJzEuMicKLQotaWYgU1BISU5YMTE6Ci0gICAgIyBtb25rZXktcGF0Y2ggSFRNTCB0cmFuc2xhdG9yIHRvIGdpdmUgdmVyc2lvbm1vZGlmaWVkIHBhcmFncmFwaHMgYSBjbGFzcwotICAgIGRlZiBuZXdfdmlzaXRfdmVyc2lvbm1vZGlmaWVkKHNlbGYsIG5vZGUpOgotICAgICAgICBzZWxmLmJvZHkuYXBwZW5kKHNlbGYuc3RhcnR0YWcobm9kZSwgJ3AnLCBDTEFTUz1ub2RlWyd0eXBlJ10pKQotICAgICAgICB0ZXh0ID0gdmVyc2lvbmxhYmVsc1tub2RlWyd0eXBlJ11dICUgbm9kZVsndmVyc2lvbiddCi0gICAgICAgIGlmIGxlbihub2RlKToKLSAgICAgICAgICAgIHRleHQgKz0gJzonCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0ZXh0ICs9ICcuJwotICAgICAgICBzZWxmLmJvZHkuYXBwZW5kKCc8c3BhbiBjbGFzcz0idmVyc2lvbm1vZGlmaWVkIj4lczwvc3Bhbj4gJyAlIHRleHQpCi0gICAgSFRNTFRyYW5zbGF0b3IudmlzaXRfdmVyc2lvbm1vZGlmaWVkID0gbmV3X3Zpc2l0X3ZlcnNpb25tb2RpZmllZAotCiAjIG1vbmtleS1wYXRjaCBIVE1MIGFuZCBMYVRlWCB0cmFuc2xhdG9ycyB0byBrZWVwIGRvY3Rlc3QgYmxvY2tzIGluIHRoZQogIyBkb2N0ZXN0IGRvY3MgdGhlbXNlbHZlcwogb3JpZ192aXNpdF9saXRlcmFsX2Jsb2NrID0gSFRNTFRyYW5zbGF0b3IudmlzaXRfbGl0ZXJhbF9ibG9jaworb3JpZ19kZXBhcnRfbGl0ZXJhbF9ibG9jayA9IExhVGVYVHJhbnNsYXRvci5kZXBhcnRfbGl0ZXJhbF9ibG9jaworCisKIGRlZiBuZXdfdmlzaXRfbGl0ZXJhbF9ibG9jayhzZWxmLCBub2RlKToKICAgICBtZXRhID0gc2VsZi5idWlsZGVyLmVudi5tZXRhZGF0YVtzZWxmLmJ1aWxkZXIuY3VycmVudF9kb2NuYW1lXQogICAgIG9sZF90cmltX2RvY3Rlc3RfZmxhZ3MgPSBzZWxmLmhpZ2hsaWdodGVyLnRyaW1fZG9jdGVzdF9mbGFncwpAQCAtNTUsOSArNTksNyBAQAogICAgIGZpbmFsbHk6CiAgICAgICAgIHNlbGYuaGlnaGxpZ2h0ZXIudHJpbV9kb2N0ZXN0X2ZsYWdzID0gb2xkX3RyaW1fZG9jdGVzdF9mbGFncwogCi1IVE1MVHJhbnNsYXRvci52aXNpdF9saXRlcmFsX2Jsb2NrID0gbmV3X3Zpc2l0X2xpdGVyYWxfYmxvY2sKIAotb3JpZ19kZXBhcnRfbGl0ZXJhbF9ibG9jayA9IExhVGVYVHJhbnNsYXRvci5kZXBhcnRfbGl0ZXJhbF9ibG9jawogZGVmIG5ld19kZXBhcnRfbGl0ZXJhbF9ibG9jayhzZWxmLCBub2RlKToKICAgICBtZXRhID0gc2VsZi5idWlsZGVyLmVudi5tZXRhZGF0YVtzZWxmLmN1cmZpbGVzdGFja1stMV1dCiAgICAgb2xkX3RyaW1fZG9jdGVzdF9mbGFncyA9IHNlbGYuaGlnaGxpZ2h0ZXIudHJpbV9kb2N0ZXN0X2ZsYWdzCkBAIC02OCw4ICs3MCwxMSBAQAogICAgIGZpbmFsbHk6CiAgICAgICAgIHNlbGYuaGlnaGxpZ2h0ZXIudHJpbV9kb2N0ZXN0X2ZsYWdzID0gb2xkX3RyaW1fZG9jdGVzdF9mbGFncwogCisKK0hUTUxUcmFuc2xhdG9yLnZpc2l0X2xpdGVyYWxfYmxvY2sgPSBuZXdfdmlzaXRfbGl0ZXJhbF9ibG9jawogTGFUZVhUcmFuc2xhdG9yLmRlcGFydF9saXRlcmFsX2Jsb2NrID0gbmV3X2RlcGFydF9saXRlcmFsX2Jsb2NrCiAKKwogIyBTdXBwb3J0IGZvciBtYXJraW5nIHVwIGFuZCBsaW5raW5nIHRvIGJ1Z3MucHl0aG9uLm9yZyBpc3N1ZXMKIAogZGVmIGlzc3VlX3JvbGUodHlwLCByYXd0ZXh0LCB0ZXh0LCBsaW5lbm8sIGlubGluZXIsIG9wdGlvbnM9e30sIGNvbnRlbnQ9W10pOgpAQCAtMTE3LDkgKzEyMiw2IEBACiAKICMgU3VwcG9ydCBmb3IgZG9jdW1lbnRpbmcgZGVjb3JhdG9ycwogCi1mcm9tIHNwaGlueCBpbXBvcnQgYWRkbm9kZXMKLWZyb20gc3BoaW54LmRvbWFpbnMucHl0aG9uIGltcG9ydCBQeU1vZHVsZWxldmVsLCBQeUNsYXNzbWVtYmVyCi0KIGNsYXNzIFB5RGVjb3JhdG9yTWl4aW4ob2JqZWN0KToKICAgICBkZWYgaGFuZGxlX3NpZ25hdHVyZShzZWxmLCBzaWcsIHNpZ25vZGUpOgogICAgICAgICByZXQgPSBzdXBlcihQeURlY29yYXRvck1peGluLCBzZWxmKS5oYW5kbGVfc2lnbmF0dXJlKHNpZywgc2lnbm9kZSkKQEAgLTEyOSwxOCArMTMxLDM5IEBACiAgICAgZGVmIG5lZWRzX2FyZ2xpc3Qoc2VsZik6CiAgICAgICAgIHJldHVybiBGYWxzZQogCisKIGNsYXNzIFB5RGVjb3JhdG9yRnVuY3Rpb24oUHlEZWNvcmF0b3JNaXhpbiwgUHlNb2R1bGVsZXZlbCk6CiAgICAgZGVmIHJ1bihzZWxmKToKICAgICAgICAgIyBhIGRlY29yYXRvciBmdW5jdGlvbiBpcyBhIGZ1bmN0aW9uIGFmdGVyIGFsbAogICAgICAgICBzZWxmLm5hbWUgPSAncHk6ZnVuY3Rpb24nCiAgICAgICAgIHJldHVybiBQeU1vZHVsZWxldmVsLnJ1bihzZWxmKQogCisKIGNsYXNzIFB5RGVjb3JhdG9yTWV0aG9kKFB5RGVjb3JhdG9yTWl4aW4sIFB5Q2xhc3NtZW1iZXIpOgogICAgIGRlZiBydW4oc2VsZik6CiAgICAgICAgIHNlbGYubmFtZSA9ICdweTptZXRob2QnCiAgICAgICAgIHJldHVybiBQeUNsYXNzbWVtYmVyLnJ1bihzZWxmKQogCiAKK2NsYXNzIFB5Q29yb3V0aW5lTWl4aW4ob2JqZWN0KToKKyAgICBkZWYgaGFuZGxlX3NpZ25hdHVyZShzZWxmLCBzaWcsIHNpZ25vZGUpOgorICAgICAgICByZXQgPSBzdXBlcihQeUNvcm91dGluZU1peGluLCBzZWxmKS5oYW5kbGVfc2lnbmF0dXJlKHNpZywgc2lnbm9kZSkKKyAgICAgICAgc2lnbm9kZS5pbnNlcnQoMCwgYWRkbm9kZXMuZGVzY19hbm5vdGF0aW9uKCdjb3JvdXRpbmUgJywgJ2Nvcm91dGluZSAnKSkKKyAgICAgICAgcmV0dXJuIHJldAorCisKK2NsYXNzIFB5Q29yb3V0aW5lRnVuY3Rpb24oUHlDb3JvdXRpbmVNaXhpbiwgUHlNb2R1bGVsZXZlbCk6CisgICAgZGVmIHJ1bihzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ3B5OmZ1bmN0aW9uJworICAgICAgICByZXR1cm4gUHlNb2R1bGVsZXZlbC5ydW4oc2VsZikKKworCitjbGFzcyBQeUNvcm91dGluZU1ldGhvZChQeUNvcm91dGluZU1peGluLCBQeUNsYXNzbWVtYmVyKToKKyAgICBkZWYgcnVuKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAncHk6bWV0aG9kJworICAgICAgICByZXR1cm4gUHlDbGFzc21lbWJlci5ydW4oc2VsZikKKworCiAjIFN1cHBvcnQgZm9yIGRvY3VtZW50aW5nIHZlcnNpb24gb2YgcmVtb3ZhbCBpbiBkZXByZWNhdGlvbnMKIAogY2xhc3MgRGVwcmVjYXRlZFJlbW92ZWQoRGlyZWN0aXZlKToKQEAgLTE2OCwzNSArMTkxLDMxIEBACiAgICAgICAgICAgICBtZXNzYWdlcyA9IFtdCiAgICAgICAgIGlmIHNlbGYuY29udGVudDoKICAgICAgICAgICAgIHNlbGYuc3RhdGUubmVzdGVkX3BhcnNlKHNlbGYuY29udGVudCwgc2VsZi5jb250ZW50X29mZnNldCwgbm9kZSkKKyAgICAgICAgaWYgbGVuKG5vZGUpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShub2RlWzBdLCBub2Rlcy5wYXJhZ3JhcGgpIGFuZCBub2RlWzBdLnJhd3NvdXJjZToKICAgICAgICAgICAgICAgICBjb250ZW50ID0gbm9kZXMuaW5saW5lKG5vZGVbMF0ucmF3c291cmNlLCB0cmFuc2xhdGFibGU9VHJ1ZSkKICAgICAgICAgICAgICAgICBjb250ZW50LnNvdXJjZSA9IG5vZGVbMF0uc291cmNlCiAgICAgICAgICAgICAgICAgY29udGVudC5saW5lID0gbm9kZVswXS5saW5lCiAgICAgICAgICAgICAgICAgY29udGVudCArPSBub2RlWzBdLmNoaWxkcmVuCiAgICAgICAgICAgICAgICAgbm9kZVswXS5yZXBsYWNlX3NlbGYobm9kZXMucGFyYWdyYXBoKCcnLCAnJywgY29udGVudCkpCi0gICAgICAgICAgICBpZiBub3QgU1BISU5YMTE6Ci0gICAgICAgICAgICAgICAgbm9kZVswXS5pbnNlcnQoMCwgbm9kZXMuaW5saW5lKCcnLCAnJXM6ICcgJSB0ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzPVsndmVyc2lvbm1vZGlmaWVkJ10pKQotICAgICAgICBlbGlmIG5vdCBTUEhJTlgxMToKKyAgICAgICAgICAgIG5vZGVbMF0uaW5zZXJ0KDAsIG5vZGVzLmlubGluZSgnJywgJyVzOiAnICUgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc2VzPVsndmVyc2lvbm1vZGlmaWVkJ10pKQorICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGFyYSA9IG5vZGVzLnBhcmFncmFwaCgnJywgJycsCi0gICAgICAgICAgICAgICAgbm9kZXMuaW5saW5lKCcnLCAnJXMuJyAlIHRleHQsIGNsYXNzZXM9Wyd2ZXJzaW9ubW9kaWZpZWQnXSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLmlubGluZSgnJywgJyVzLicgJSB0ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3Nlcz1bJ3ZlcnNpb25tb2RpZmllZCddKSkKICAgICAgICAgICAgIG5vZGUuYXBwZW5kKHBhcmEpCiAgICAgICAgIGVudiA9IHNlbGYuc3RhdGUuZG9jdW1lbnQuc2V0dGluZ3MuZW52CiAgICAgICAgIGVudi5ub3RlX3ZlcnNpb25jaGFuZ2UoJ2RlcHJlY2F0ZWQnLCB2ZXJzaW9uWzBdLCBub2RlLCBzZWxmLmxpbmVubykKICAgICAgICAgcmV0dXJuIFtub2RlXSArIG1lc3NhZ2VzCiAKLSMgZm9yIFNwaGlueCA8IDEuMgotdmVyc2lvbmxhYmVsc1snZGVwcmVjYXRlZC1yZW1vdmVkJ10gPSBEZXByZWNhdGVkUmVtb3ZlZC5fbGFiZWwKLQogCiAjIFN1cHBvcnQgZm9yIGluY2x1ZGluZyBNaXNjL05FV1MKIAotaW1wb3J0IHJlCi1pbXBvcnQgY29kZWNzCi0KIGlzc3VlX3JlID0gcmUuY29tcGlsZSgnKFtJaV0pc3N1ZSAjKFswLTldKyknKQogd2hhdHNuZXdfcmUgPSByZS5jb21waWxlKHIiKD9pbSled2hhdCdzIG5ldyBpbiAoLio/KVw/PyQiKQogCisKIGNsYXNzIE1pc2NOZXdzKERpcmVjdGl2ZSk6CiAgICAgaGFzX2NvbnRlbnQgPSBGYWxzZQogICAgIHJlcXVpcmVkX2FyZ3VtZW50cyA9IDEKQEAgLTIyMSw3ICsyNDAsNyBAQAogICAgICAgICAgICAgdGV4dCA9ICdUaGUgTkVXUyBmaWxlIGlzIG5vdCBhdmFpbGFibGUuJwogICAgICAgICAgICAgbm9kZSA9IG5vZGVzLnN0cm9uZyh0ZXh0LCB0ZXh0KQogICAgICAgICAgICAgcmV0dXJuIFtub2RlXQotICAgICAgICBjb250ZW50ID0gaXNzdWVfcmUuc3ViKHInYFwxc3N1ZSAjXDIgPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvXDI+YF9fJywKKyAgICAgICAgY29udGVudCA9IGlzc3VlX3JlLnN1YihyJ2BcMXNzdWUgI1wyIDxodHRwczovL2J1Z3MucHl0aG9uLm9yZy9cMj5gX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQpCiAgICAgICAgIGNvbnRlbnQgPSB3aGF0c25ld19yZS5zdWIocidcMScsIGNvbnRlbnQpCiAgICAgICAgICMgcmVtb3ZlIGZpcnN0IDMgbGluZXMgYXMgdGhleSBhcmUgdGhlIG1haW4gaGVhZGluZwpAQCAtMjUwLDE1ICsyNjksNiBAQAogICAgICd0eXBlc3NlcScsICd0eXBlc3NlcS1tdXRhYmxlJywgJ3VuYXJ5JywgJ3doaWxlJywgJ3dpdGgnLCAneWllbGQnCiBdCiAKLWZyb20gb3MgaW1wb3J0IHBhdGgKLWZyb20gdGltZSBpbXBvcnQgYXNjdGltZQotZnJvbSBwcHJpbnQgaW1wb3J0IHBmb3JtYXQKLWZyb20gZG9jdXRpbHMuaW8gaW1wb3J0IFN0cmluZ091dHB1dAotZnJvbSBkb2N1dGlscy51dGlscyBpbXBvcnQgbmV3X2RvY3VtZW50Ci0KLWZyb20gc3BoaW54LmJ1aWxkZXJzIGltcG9ydCBCdWlsZGVyCi1mcm9tIHNwaGlueC53cml0ZXJzLnRleHQgaW1wb3J0IFRleHRXcml0ZXIKLQogCiBjbGFzcyBQeWRvY1RvcGljc0J1aWxkZXIoQnVpbGRlcik6CiAgICAgbmFtZSA9ICdweWRvYy10b3BpY3MnCkBAIC0yODYsMjkgKzI5NiwyMyBAQAogICAgICAgICAgICAgZG9jdW1lbnQuYXBwZW5kKGRvY3RyZWUuaWRzW2xhYmVsaWRdKQogICAgICAgICAgICAgZGVzdGluYXRpb24gPSBTdHJpbmdPdXRwdXQoZW5jb2Rpbmc9J3V0Zi04JykKICAgICAgICAgICAgIHdyaXRlci53cml0ZShkb2N1bWVudCwgZGVzdGluYXRpb24pCi0gICAgICAgICAgICBzZWxmLnRvcGljc1tsYWJlbF0gPSB3cml0ZXIub3V0cHV0LmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgc2VsZi50b3BpY3NbbGFiZWxdID0gd3JpdGVyLm91dHB1dAogCiAgICAgZGVmIGZpbmlzaChzZWxmKToKLSAgICAgICAgZiA9IG9wZW4ocGF0aC5qb2luKHNlbGYub3V0ZGlyLCAndG9waWNzLnB5JyksICd3JykKKyAgICAgICAgZiA9IG9wZW4ocGF0aC5qb2luKHNlbGYub3V0ZGlyLCAndG9waWNzLnB5JyksICd3YicpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGYud3JpdGUoJyMgLSotIGNvZGluZzogdXRmLTggLSotXG4nKQotICAgICAgICAgICAgZi53cml0ZSgnIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiAlc1xuJyAlIGFzY3RpbWUoKSkKLSAgICAgICAgICAgIGYud3JpdGUoJ3RvcGljcyA9ICcgKyBwZm9ybWF0KHNlbGYudG9waWNzKSArICdcbicpCisgICAgICAgICAgICBmLndyaXRlKCcjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuJy5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgICAgICBmLndyaXRlKCgnIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiAlc1xuJyAlIGFzY3RpbWUoKSkuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICAgICAgZi53cml0ZSgoJ3RvcGljcyA9ICcgKyBwZm9ybWF0KHNlbGYudG9waWNzKSArICdcbicpLmVuY29kZSgndXRmLTgnKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQogCiAKLSMgU3VwcG9ydCBmb3IgY2hlY2tpbmcgZm9yIHN1c3BpY2lvdXMgbWFya3VwCi0KLWltcG9ydCBzdXNwaWNpb3VzCi0KLQogIyBTdXBwb3J0IGZvciBkb2N1bWVudGluZyBPcGNvZGVzCiAKLWltcG9ydCByZQotCiBvcGNvZGVfc2lnX3JlID0gcmUuY29tcGlsZShyJyhcdysoPzpcK1xkKT8pKD86XHMqXCgoLiopXCkpPycpCiAKKwogZGVmIHBhcnNlX29wY29kZV9zaWduYXR1cmUoZW52LCBzaWcsIHNpZ25vZGUpOgogICAgICIiIlRyYW5zZm9ybSBhbiBvcGNvZGUgc2lnbmF0dXJlIGludG8gUlNUIG5vZGVzLiIiIgogICAgIG0gPSBvcGNvZGVfc2lnX3JlLm1hdGNoKHNpZykKQEAgLTMyOCwxMiArMzMyLDEzIEBACiBwZGJjbWRfc2lnX3JlID0gcmUuY29tcGlsZShyJyhbYS16KCkhXSspXHMqKC4qKScpCiAKICMgbGF0ZXIuLi4KLSNwZGJhcmdzX3Rva2Vuc19yZSA9IHJlLmNvbXBpbGUocicnJ1thLXpBLVpdKyAgfCAgIyBpZGVudGlmaWVycworIyBwZGJhcmdzX3Rva2Vuc19yZSA9IHJlLmNvbXBpbGUocicnJ1thLXpBLVpdKyAgfCAgIyBpZGVudGlmaWVycwogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWy4sOl0rICAgICB8ICAjIHB1bmN0dWF0aW9uCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXFtcXSgpXSAgIHwgICMgcGFyZW5zCiAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBccysgICAgICAgICAgICMgd2hpdGVzcGFjZQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJycnLCByZS5YKQogCisKIGRlZiBwYXJzZV9wZGJfY29tbWFuZChlbnYsIHNpZywgc2lnbm9kZSk6CiAgICAgIiIiVHJhbnNmb3JtIGEgcGRiIGNvbW1hbmQgc2lnbmF0dXJlIGludG8gUlNUIG5vZGVzLiIiIgogICAgIG0gPSBwZGJjbWRfc2lnX3JlLm1hdGNoKHNpZykKQEAgLTM2MSw0ICszNjYsNyBAQAogICAgIGFwcC5hZGRfZGVzY3JpcHRpb25fdW5pdCgnMnRvM2ZpeGVyJywgJzJ0bzNmaXhlcicsICclcyAoMnRvMyBmaXhlciknKQogICAgIGFwcC5hZGRfZGlyZWN0aXZlX3RvX2RvbWFpbigncHknLCAnZGVjb3JhdG9yJywgUHlEZWNvcmF0b3JGdW5jdGlvbikKICAgICBhcHAuYWRkX2RpcmVjdGl2ZV90b19kb21haW4oJ3B5JywgJ2RlY29yYXRvcm1ldGhvZCcsIFB5RGVjb3JhdG9yTWV0aG9kKQorICAgIGFwcC5hZGRfZGlyZWN0aXZlX3RvX2RvbWFpbigncHknLCAnY29yb3V0aW5lZnVuY3Rpb24nLCBQeUNvcm91dGluZUZ1bmN0aW9uKQorICAgIGFwcC5hZGRfZGlyZWN0aXZlX3RvX2RvbWFpbigncHknLCAnY29yb3V0aW5lbWV0aG9kJywgUHlDb3JvdXRpbmVNZXRob2QpCiAgICAgYXBwLmFkZF9kaXJlY3RpdmUoJ21pc2NuZXdzJywgTWlzY05ld3MpCisgICAgcmV0dXJuIHsndmVyc2lvbic6ICcxLjAnLCAncGFyYWxsZWxfcmVhZF9zYWZlJzogVHJ1ZX0KZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcGljaW91cy5weSBiL0RvYy90b29scy9leHRlbnNpb25zL3N1c3BpY2lvdXMucHkKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gRG9jL3Rvb2xzL3NwaGlueGV4dC9zdXNwaWNpb3VzLnB5CnJlbmFtZSB0byBEb2MvdG9vbHMvZXh0ZW5zaW9ucy9zdXNwaWNpb3VzLnB5CmluZGV4IGVlODc3MzMuLmQzZWQ4NDkgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcGljaW91cy5weQorKysgYi9Eb2MvdG9vbHMvZXh0ZW5zaW9ucy9zdXNwaWNpb3VzLnB5CkBAIC05MSw3ICs5MSw3IEBACiAgICAgICAgIHNlbGYubG9nX2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm91dGRpciwgJ3N1c3BpY2lvdXMuY3N2JykKICAgICAgICAgb3BlbihzZWxmLmxvZ19maWxlX25hbWUsICd3JykuY2xvc2UoKQogICAgICAgICAjIGxvYWQgZGF0YWJhc2Ugb2YgcHJldmlvdXNseSBpZ25vcmVkIGlzc3VlcwotICAgICAgICBzZWxmLmxvYWRfcnVsZXMob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksCisgICAgICAgIHNlbGYubG9hZF9ydWxlcyhvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJy4uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VzcC1pZ25vcmVkLmNzdicpKQogCiAgICAgZGVmIGdldF9vdXRkYXRlZF9kb2NzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9weWRvY3RoZW1lL3N0YXRpYy9weWRvY3RoZW1lLmNzcyBiL0RvYy90b29scy9weWRvY3RoZW1lL3N0YXRpYy9weWRvY3RoZW1lLmNzcwpzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L3B5ZG9jdGhlbWUvc3RhdGljL3B5ZG9jdGhlbWUuY3NzCnJlbmFtZSB0byBEb2MvdG9vbHMvcHlkb2N0aGVtZS9zdGF0aWMvcHlkb2N0aGVtZS5jc3MKaW5kZXggM2Q5OTVkOC4uNTA4MzViYiAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9weWRvY3RoZW1lL3N0YXRpYy9weWRvY3RoZW1lLmNzcworKysgYi9Eb2MvdG9vbHMvcHlkb2N0aGVtZS9zdGF0aWMvcHlkb2N0aGVtZS5jc3MKQEAgLTk0LDMxICs5NCwzMSBAQAogfQogCiBkaXYuYm9keSBhIHsKLSAgICBjb2xvcjogIzAwNjA4ZjsKKyAgICBjb2xvcjogIzAwNzJhYTsKIH0KIAogZGl2LmJvZHkgYTp2aXNpdGVkIHsKLSAgICBjb2xvcjogIzMwMzA2ZjsKKyAgICBjb2xvcjogIzYzNjNiYjsKIH0KIAogZGl2LmJvZHkgYTpob3ZlciB7CiAgICAgY29sb3I6ICMwMEIwRTQ7CiB9CiAKLXR0LCBwcmUgewordHQsIGNvZGUsIHByZSB7CiAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZSwgc2Fucy1zZXJpZjsKICAgICBmb250LXNpemU6IDk2LjUlOwogfQogCi1kaXYuYm9keSB0dCB7CitkaXYuYm9keSB0dCwgZGl2LmJvZHkgY29kZSB7CiAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogfQogCi1kaXYuYm9keSB0dC5kZXNjbmFtZSB7CitkaXYuYm9keSB0dC5kZXNjbmFtZSwgZGl2LmJvZHkgY29kZS5kZXNjbmFtZSB7CiAgICAgZm9udC1zaXplOiAxMjAlOwogfQogCi1kaXYuYm9keSB0dC54cmVmLCBkaXYuYm9keSBhIHR0IHsKK2Rpdi5ib2R5IHR0LnhyZWYsIGRpdi5ib2R5IGEgdHQsIGRpdi5ib2R5IGNvZGUueHJlZiwgZGl2LmJvZHkgYSBjb2RlIHsKICAgICBmb250LXdlaWdodDogbm9ybWFsOwogfQogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3B5ZG9jdGhlbWUvdGhlbWUuY29uZiBiL0RvYy90b29scy9weWRvY3RoZW1lL3RoZW1lLmNvbmYKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvYy90b29scy9zcGhpbnhleHQvcHlkb2N0aGVtZS90aGVtZS5jb25mCnJlbmFtZSB0byBEb2MvdG9vbHMvcHlkb2N0aGVtZS90aGVtZS5jb25mCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvcm9tYW4ucHkgYi9Eb2MvdG9vbHMvcm9tYW4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ZWY2MTcuLjAwMDAwMDAKLS0tIGEvRG9jL3Rvb2xzL3JvbWFuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODAgKzAsMCBAQAotIiIiQ29udmVydCB0byBhbmQgZnJvbSBSb21hbiBudW1lcmFscyIiIgotCi1fX2F1dGhvcl9fID0gIk1hcmsgUGlsZ3JpbSAoZjhkeUBkaXZlaW50b3B5dGhvbi5vcmcpIgotX192ZXJzaW9uX18gPSAiMS40IgotX19kYXRlX18gPSAiOCBBdWd1c3QgMjAwMSIKLV9fY29weXJpZ2h0X18gPSAiIiJDb3B5cmlnaHQgKGMpIDIwMDEgTWFyayBQaWxncmltCi0KLVRoaXMgcHJvZ3JhbSBpcyBwYXJ0IG9mICJEaXZlIEludG8gUHl0aG9uIiwgYSBmcmVlIFB5dGhvbiB0dXRvcmlhbCBmb3IKLWV4cGVyaWVuY2VkIHByb2dyYW1tZXJzLiAgVmlzaXQgaHR0cDovL2RpdmVpbnRvcHl0aG9uLm9yZy8gZm9yIHRoZQotbGF0ZXN0IHZlcnNpb24uCi0KLVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci1pdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFB5dGhvbiAyLjEuMSBsaWNlbnNlLCBhdmFpbGFibGUgYXQKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjEuMS9saWNlbnNlLmh0bWwKLSIiIgotCi1pbXBvcnQgcmUKLQotI0RlZmluZSBleGNlcHRpb25zCi1jbGFzcyBSb21hbkVycm9yKEV4Y2VwdGlvbik6IHBhc3MKLWNsYXNzIE91dE9mUmFuZ2VFcnJvcihSb21hbkVycm9yKTogcGFzcwotY2xhc3MgTm90SW50ZWdlckVycm9yKFJvbWFuRXJyb3IpOiBwYXNzCi1jbGFzcyBJbnZhbGlkUm9tYW5OdW1lcmFsRXJyb3IoUm9tYW5FcnJvcik6IHBhc3MKLQotI0RlZmluZSBkaWdpdCBtYXBwaW5nCi1yb21hbk51bWVyYWxNYXAgPSAoKCdNJywgIDEwMDApLAotICAgICAgICAgICAgICAgICAgICgnQ00nLCA5MDApLAotICAgICAgICAgICAgICAgICAgICgnRCcsICA1MDApLAotICAgICAgICAgICAgICAgICAgICgnQ0QnLCA0MDApLAotICAgICAgICAgICAgICAgICAgICgnQycsICAxMDApLAotICAgICAgICAgICAgICAgICAgICgnWEMnLCA5MCksCi0gICAgICAgICAgICAgICAgICAgKCdMJywgIDUwKSwKLSAgICAgICAgICAgICAgICAgICAoJ1hMJywgNDApLAotICAgICAgICAgICAgICAgICAgICgnWCcsICAxMCksCi0gICAgICAgICAgICAgICAgICAgKCdJWCcsIDkpLAotICAgICAgICAgICAgICAgICAgICgnVicsICA1KSwKLSAgICAgICAgICAgICAgICAgICAoJ0lWJywgNCksCi0gICAgICAgICAgICAgICAgICAgKCdJJywgIDEpKQotCi1kZWYgdG9Sb21hbihuKToKLSAgICAiIiJjb252ZXJ0IGludGVnZXIgdG8gUm9tYW4gbnVtZXJhbCIiIgotICAgIGlmIG5vdCAoMCA8IG4gPCA1MDAwKToKLSAgICAgICAgcmFpc2UgT3V0T2ZSYW5nZUVycm9yKCJudW1iZXIgb3V0IG9mIHJhbmdlIChtdXN0IGJlIDEuLjQ5OTkpIikKLSAgICBpZiBpbnQobikgIT0gbjoKLSAgICAgICAgcmFpc2UgTm90SW50ZWdlckVycm9yKCJkZWNpbWFscyBjYW4gbm90IGJlIGNvbnZlcnRlZCIpCi0KLSAgICByZXN1bHQgPSAiIgotICAgIGZvciBudW1lcmFsLCBpbnRlZ2VyIGluIHJvbWFuTnVtZXJhbE1hcDoKLSAgICAgICAgd2hpbGUgbiA+PSBpbnRlZ2VyOgotICAgICAgICAgICAgcmVzdWx0ICs9IG51bWVyYWwKLSAgICAgICAgICAgIG4gLT0gaW50ZWdlcgotICAgIHJldHVybiByZXN1bHQKLQotI0RlZmluZSBwYXR0ZXJuIHRvIGRldGVjdCB2YWxpZCBSb21hbiBudW1lcmFscwotcm9tYW5OdW1lcmFsUGF0dGVybiA9IHJlLmNvbXBpbGUoIiIiCi0gICAgXiAgICAgICAgICAgICAgICAgICAjIGJlZ2lubmluZyBvZiBzdHJpbmcKLSAgICBNezAsNH0gICAgICAgICAgICAgICMgdGhvdXNhbmRzIC0gMCB0byA0IE0ncwotICAgIChDTXxDRHxEP0N7MCwzfSkgICAgIyBodW5kcmVkcyAtIDkwMCAoQ00pLCA0MDAgKENEKSwgMC0zMDAgKDAgdG8gMyBDJ3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgICAgICAgIG9yIDUwMC04MDAgKEQsIGZvbGxvd2VkIGJ5IDAgdG8gMyBDJ3MpCi0gICAgKFhDfFhMfEw/WHswLDN9KSAgICAjIHRlbnMgLSA5MCAoWEMpLCA0MCAoWEwpLCAwLTMwICgwIHRvIDMgWCdzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICMgICAgICAgIG9yIDUwLTgwIChMLCBmb2xsb3dlZCBieSAwIHRvIDMgWCdzKQotICAgIChJWHxJVnxWP0l7MCwzfSkgICAgIyBvbmVzIC0gOSAoSVgpLCA0IChJViksIDAtMyAoMCB0byAzIEkncyksCi0gICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgICBvciA1LTggKFYsIGZvbGxvd2VkIGJ5IDAgdG8gMyBJJ3MpCi0gICAgJCAgICAgICAgICAgICAgICAgICAjIGVuZCBvZiBzdHJpbmcKLSAgICAiIiIgLHJlLlZFUkJPU0UpCi0KLWRlZiBmcm9tUm9tYW4ocyk6Ci0gICAgIiIiY29udmVydCBSb21hbiBudW1lcmFsIHRvIGludGVnZXIiIiIKLSAgICBpZiBub3QgczoKLSAgICAgICAgcmFpc2UgSW52YWxpZFJvbWFuTnVtZXJhbEVycm9yKCdJbnB1dCBjYW4gbm90IGJlIGJsYW5rJykKLSAgICBpZiBub3Qgcm9tYW5OdW1lcmFsUGF0dGVybi5zZWFyY2gocyk6Ci0gICAgICAgIHJhaXNlIEludmFsaWRSb21hbk51bWVyYWxFcnJvcignSW52YWxpZCBSb21hbiBudW1lcmFsOiAlcycgJSBzKQotCi0gICAgcmVzdWx0ID0gMAotICAgIGluZGV4ID0gMAotICAgIGZvciBudW1lcmFsLCBpbnRlZ2VyIGluIHJvbWFuTnVtZXJhbE1hcDoKLSAgICAgICAgd2hpbGUgc1tpbmRleDppbmRleCtsZW4obnVtZXJhbCldID09IG51bWVyYWw6Ci0gICAgICAgICAgICByZXN1bHQgKz0gaW50ZWdlcgotICAgICAgICAgICAgaW5kZXggKz0gbGVuKG51bWVyYWwpCi0gICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3JzdGxpbnQucHkgYi9Eb2MvdG9vbHMvcnN0bGludC5weQppbmRleCAyY2MzZDEyLi43ZGNjZjcyIDEwMDc1NQotLS0gYS9Eb2MvdG9vbHMvcnN0bGludC5weQorKysgYi9Eb2MvdG9vbHMvcnN0bGludC5weQpAQCAtMTUsNyArMTUsNiBAQAogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCiBpbXBvcnQgZ2V0b3B0Ci1pbXBvcnQgc3VicHJvY2VzcwogZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luLCBzcGxpdGV4dCwgYWJzcGF0aCwgZXhpc3RzCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZWZhdWx0ZGljdAogCkBAIC0yOCwxNCArMjcsMTYgQEAKICAgICAncGFyc2VkLWxpdGVyYWwnLCAncHVsbC1xdW90ZScsICdyYXcnLCAncmVwbGFjZScsCiAgICAgJ3Jlc3RydWN0dXJlZHRleHQtdGVzdC1kaXJlY3RpdmUnLCAncm9sZScsICdydWJyaWMnLCAnc2VjdG51bScsICdzaWRlYmFyJywKICAgICAndGFibGUnLCAndGFyZ2V0LW5vdGVzJywgJ3RpcCcsICd0aXRsZScsICd0b3BpYycsICd1bmljb2RlJywgJ3dhcm5pbmcnLAotICAgICMgU3BoaW54IGN1c3RvbSBvbmVzCisgICAgIyBTcGhpbnggYW5kIFB5dGhvbiBkb2NzIGN1c3RvbSBvbmVzCiAgICAgJ2Fja3MnLCAnYXR0cmlidXRlJywgJ2F1dG9hdHRyaWJ1dGUnLCAnYXV0b2NsYXNzJywgJ2F1dG9kYXRhJywKICAgICAnYXV0b2V4Y2VwdGlvbicsICdhdXRvZnVuY3Rpb24nLCAnYXV0b21ldGhvZCcsICdhdXRvbW9kdWxlJywgJ2NlbnRlcmVkJywKICAgICAnY2Z1bmN0aW9uJywgJ2NsYXNzJywgJ2NsYXNzbWV0aG9kJywgJ2NtYWNybycsICdjbWRvcHRpb24nLCAnY21lbWJlcicsCiAgICAgJ2NvZGUtYmxvY2snLCAnY29uZnZhbCcsICdjc3NjbGFzcycsICdjdHlwZScsICdjdXJyZW50bW9kdWxlJywgJ2N2YXInLAotICAgICdkYXRhJywgJ2RlcHJlY2F0ZWQnLCAnZGVzY3JpYmUnLCAnZGlyZWN0aXZlJywgJ2RvY3Rlc3QnLCAnZW52dmFyJywgJ2V2ZW50JywKLSAgICAnZXhjZXB0aW9uJywgJ2Z1bmN0aW9uJywgJ2dsb3NzYXJ5JywgJ2hpZ2hsaWdodCcsICdoaWdobGlnaHRsYW5nJywgJ2luZGV4JywKLSAgICAnbGl0ZXJhbGluY2x1ZGUnLCAnbWV0aG9kJywgJ21vZHVsZScsICdtb2R1bGVhdXRob3InLCAncHJvZHVjdGlvbmxpc3QnLAorICAgICdkYXRhJywgJ2RlY29yYXRvcicsICdkZWNvcmF0b3JtZXRob2QnLCAnZGVwcmVjYXRlZC1yZW1vdmVkJywKKyAgICAnZGVwcmVjYXRlZCg/IS1yZW1vdmVkKScsICdkZXNjcmliZScsICdkaXJlY3RpdmUnLCAnZG9jdGVzdCcsICdlbnZ2YXInLAorICAgICdldmVudCcsICdleGNlcHRpb24nLCAnZnVuY3Rpb24nLCAnZ2xvc3NhcnknLCAnaGlnaGxpZ2h0JywgJ2hpZ2hsaWdodGxhbmcnLAorICAgICdpbXBsLWRldGFpbCcsICdpbmRleCcsICdsaXRlcmFsaW5jbHVkZScsICdtZXRob2QnLCAnbWlzY25ld3MnLCAnbW9kdWxlJywKKyAgICAnbW9kdWxlYXV0aG9yJywgJ29wY29kZScsICdwZGJjb21tYW5kJywgJ3Byb2R1Y3Rpb25saXN0JywKICAgICAncHJvZ3JhbScsICdyb2xlJywgJ3NlY3Rpb25hdXRob3InLCAnc2VlYWxzbycsICdzb3VyY2Vjb2RlJywgJ3N0YXRpY21ldGhvZCcsCiAgICAgJ3RhYnVsYXJjb2x1bW5zJywgJ3Rlc3Rjb2RlJywgJ3Rlc3RvdXRwdXQnLCAndGVzdHNldHVwJywgJ3RvY3RyZWUnLCAndG9kbycsCiAgICAgJ3RvZG9saXN0JywgJ3ZlcnNpb25hZGRlZCcsICd2ZXJzaW9uY2hhbmdlZCcKQEAgLTQ0LDEzICs0NSwxNCBAQAogYWxsX2RpcmVjdGl2ZXMgPSAnKCcgKyAnfCcuam9pbihkaXJlY3RpdmVzKSArICcpJwogc2VlbXNfZGlyZWN0aXZlX3JlID0gcmUuY29tcGlsZShyJ1wuXC4gJXMoW15hLXo6XXw6KD8hOikpJyAlIGFsbF9kaXJlY3RpdmVzKQogZGVmYXVsdF9yb2xlX3JlID0gcmUuY29tcGlsZShyJyhefCApYFx3KFteYF0qP1x3KT9gKCR8ICknKQotbGVha2VkX21hcmt1cF9yZSA9IHJlLmNvbXBpbGUocidbYS16XTo6W149XXw6W2Etel0rOnxgfFwuXC5ccypcdys6JykKK2xlYWtlZF9tYXJrdXBfcmUgPSByZS5jb21waWxlKHInW2Etel06OlxzfGB8XC5cLlxzKlx3KzonKQogCiAKIGNoZWNrZXJzID0ge30KIAogY2hlY2tlcl9wcm9wcyA9IHsnc2V2ZXJpdHknOiAxLCAnZmFsc2Vwb3NpdGl2ZXMnOiBGYWxzZX0KIAorCiBkZWYgY2hlY2tlcigqc3VmZml4ZXMsICoqa3dkcyk6CiAgICAgIiIiRGVjb3JhdG9yIHRvIHJlZ2lzdGVyIGEgZnVuY3Rpb24gYXMgYSBjaGVja2VyLiIiIgogICAgIGRlZiBkZWNvKGZ1bmMpOgpAQCAtMTcxLDEwICsxNzMsNiBAQAogICAgIGNvdW50ID0gZGVmYXVsdGRpY3QoaW50KQogCiAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6Ci0gICAgICAgICMgaWdub3JlIHN1YmRpcnMgY29udHJvbGxlZCBieSBzdm4KLSAgICAgICAgaWYgJy5zdm4nIGluIGRpcnM6Ci0gICAgICAgICAgICBkaXJzLnJlbW92ZSgnLnN2bicpCi0KICAgICAgICAgIyBpZ25vcmUgc3ViZGlycyBpbiBpZ25vcmUgbGlzdAogICAgICAgICBpZiBhYnNwYXRoKHJvb3QpIGluIGlnbm9yZToKICAgICAgICAgICAgIGRlbCBkaXJzWzpdCkBAIC0xOTgsNyArMTk2LDcgQEAKICAgICAgICAgICAgICAgICBwcmludCgnQ2hlY2tpbmcgJXMuLi4nICUgZm4pCiAKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICdyJykgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICdyJywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZjoKICAgICAgICAgICAgICAgICAgICAgbGluZXMgPSBsaXN0KGYpCiAgICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpIGFzIGVycjoKICAgICAgICAgICAgICAgICBwcmludCgnJXM6IGNhbm5vdCBvcGVuOiAlcycgJSAoZm4sIGVycikpCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54LWJ1aWxkLnB5IGIvRG9jL3Rvb2xzL3NwaGlueC1idWlsZC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDNmZTcwMi4uMDAwMDAwMAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54LWJ1aWxkLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KLSIiIgotICAgIFNwaGlueCAtIFB5dGhvbiBkb2N1bWVudGF0aW9uIHRvb2xjaGFpbgotICAgIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgotCi0gICAgOmNvcHlyaWdodDogMjAwNy0yMDEwIGJ5IEdlb3JnIEJyYW5kbC4KLSAgICA6bGljZW5zZTogUHl0aG9uIGxpY2Vuc2UuCi0iIiIKLQotaW1wb3J0IHN5cwotaW1wb3J0IHdhcm5pbmdzCi0KLSMgR2V0IHJpZCBvZiBVc2VyV2FybmluZ3MgcmVwb3J0ZWQgYnkgcGtnX3Jlc291cmNlcy4KLXdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnLCBjYXRlZ29yeT1Vc2VyV2FybmluZywgbW9kdWxlPSdqaW5qYTInKQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotCi0gICAgaWYgc3lzLnZlcnNpb25faW5mb1s6M10gPCAoMiwgNCwgMCkgb3Igc3lzLnZlcnNpb25faW5mb1s6M10gPiAoMywgMCwgMCk6Ci0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiIiXAotRXJyb3I6IFNwaGlueCBuZWVkcyB0byBiZSBleGVjdXRlZCB3aXRoIFB5dGhvbiAyLjQgb3IgbmV3ZXIgKG5vdCAzLnggdGhvdWdoKS4KLShJZiB5b3UgcnVuIHRoaXMgZnJvbSB0aGUgTWFrZWZpbGUsIHlvdSBjYW4gc2V0IHRoZSBQWVRIT04gdmFyaWFibGUKLXRvIHRoZSBwYXRoIG9mIGFuIGFsdGVybmF0aXZlIGludGVycHJldGVyIGV4ZWN1dGFibGUsIGUuZy4sCi1gYG1ha2UgaHRtbCBQWVRIT049cHl0aG9uMi41YGApLgotIiIiKQotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgZnJvbSBzcGhpbnggaW1wb3J0IG1haW4KLSAgICBzeXMuZXhpdChtYWluKHN5cy5hcmd2KSkKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4c2lkZWJhci5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMGVjMzJmLi4wMDAwMDAwCi0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhzaWRlYmFyLmh0bWwKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0gICAgICAgICAgICA8aDM+RG93bmxvYWQ8L2gzPgotICAgICAgICAgICAgPHA+PGEgaHJlZj0ie3sgcGF0aHRvKCdkb3dubG9hZCcpIH19Ij5Eb3dubG9hZCB0aGVzZSBkb2N1bWVudHM8L2E+PC9wPgotCSAgICA8aDM+RG9jcyBmb3Igb3RoZXIgdmVyc2lvbnM8L2gzPgotCSAgICA8dWw+Ci0JICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMi43LyI+UHl0aG9uIDIuNyAoc3RhYmxlKTwvYT48L2xpPgotCSAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC8iPlB5dGhvbiAzLjQgKGluIGRldmVsb3BtZW50KTwvYT48L2xpPgotICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy92ZXJzaW9ucy8iPk9sZCB2ZXJzaW9uczwvYT48L2xpPgotICAgICAgICAgICAgPC91bD4KLQotICAgICAgICAgICAgPGgzPk90aGVyIHJlc291cmNlczwvaDM+Ci0gICAgICAgICAgICA8dWw+Ci0gICAgICAgICAgICAgIHsjIFhYWDogbWFueSBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgbWVyZ2VkIGluIHRoZSBtYWluIGRvY3MgI30KLSAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy8iPlBFUCBJbmRleDwvYT48L2xpPgotICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3dpa2kucHl0aG9uLm9yZy9tb2luL0JlZ2lubmVyc0d1aWRlIj5CZWdpbm5lcidzIEd1aWRlPC9hPjwvbGk+Ci0gICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vUHl0aG9uQm9va3MiPkJvb2sgTGlzdDwvYT48L2xpPgotICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9hdi8iPkF1ZGlvL1Zpc3VhbCBUYWxrczwvYT48L2xpPgotICAgICAgICAgICAgPC91bD4KZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvb3BlbnNlYXJjaC54bWwgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L29wZW5zZWFyY2gueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWNlYzgwLi4wMDAwMDAwCi0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvb3BlbnNlYXJjaC54bWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLXslIGV4dGVuZHMgIiFvcGVuc2VhcmNoLnhtbCIgJX0KLXslIGJsb2NrIGV4dHJhIC0lfQotPEltYWdlIGhlaWdodD0iMTYiIHdpZHRoPSIxNiIgdHlwZT0iaW1hZ2UveC1pY29uIj5odHRwOi8vd3d3LnB5dGhvbi5vcmcvaW1hZ2VzL2Zhdmljb24xNngxNi5pY288L0ltYWdlPgoteyUtIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9iYXNpYy5jc3MgYi9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9iYXNpYy5jc3MKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNDJhODEuLjAwMDAwMDAKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvYmFzaWMuY3NzCisrKyAvZGV2L251bGwKQEAgLTEsNDQ1ICswLDAgQEAKLS8qKgotICogU3BoaW54IHN0eWxlc2hlZXQgLS0gYmFzaWMgdGhlbWUKLSAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+Ci0gKi8KLQotLyogLS0gbWFpbiBsYXlvdXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotZGl2LmNsZWFyZXIgewotICAgIGNsZWFyOiBib3RoOwotfQotCi0vKiAtLSByZWxiYXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1kaXYucmVsYXRlZCB7Ci0gICAgd2lkdGg6IDEwMCU7Ci0gICAgZm9udC1zaXplOiA5MCU7Ci19Ci0KLWRpdi5yZWxhdGVkIGgzIHsKLSAgICBkaXNwbGF5OiBub25lOwotfQotCi1kaXYucmVsYXRlZCB1bCB7Ci0gICAgbWFyZ2luOiAwOwotICAgIHBhZGRpbmc6IDAgMCAwIDEwcHg7Ci0gICAgbGlzdC1zdHlsZTogbm9uZTsKLX0KLQotZGl2LnJlbGF0ZWQgbGkgewotICAgIGRpc3BsYXk6IGlubGluZTsKLX0KLQotZGl2LnJlbGF0ZWQgbGkucmlnaHQgewotICAgIGZsb2F0OiByaWdodDsKLSAgICBtYXJnaW4tcmlnaHQ6IDVweDsKLX0KLQotLyogLS0gc2lkZWJhciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotZGl2LnNwaGlueHNpZGViYXJ3cmFwcGVyIHsKLSAgICBwb3NpdGlvbjogcmVsYXRpdmU7Ci0gICAgdG9wOiAwOwotICAgIHBhZGRpbmc6IDEwcHggNXB4IDAgMTBweDsKLSAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7Ci19Ci0KLWRpdi5zcGhpbnhzaWRlYmFyIHsKLSAgICBmbG9hdDogbGVmdDsKLSAgICB3aWR0aDogMjMwcHg7Ci0gICAgbWFyZ2luLWxlZnQ6IC0xMDAlOwotICAgIGZvbnQtc2l6ZTogOTAlOwotfQotCi1kaXYuc3BoaW54c2lkZWJhciB1bCB7Ci0gICAgbGlzdC1zdHlsZTogbm9uZTsKLX0KLQotZGl2LnNwaGlueHNpZGViYXIgdWwgdWwsCi1kaXYuc3BoaW54c2lkZWJhciB1bC53YW50LXBvaW50cyB7Ci0gICAgbWFyZ2luLWxlZnQ6IDIwcHg7Ci0gICAgbGlzdC1zdHlsZTogc3F1YXJlOwotfQotCi1kaXYuc3BoaW54c2lkZWJhciB1bCB1bCB7Ci0gICAgbWFyZ2luLXRvcDogMDsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotfQotCi1kaXYuc3BoaW54c2lkZWJhciBmb3JtIHsKLSAgICBtYXJnaW4tdG9wOiAxMHB4OwotfQotCi1kaXYuc3BoaW54c2lkZWJhciBpbnB1dCB7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgIzk4ZGJjYzsKLSAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKLSAgICBmb250LXNpemU6IDFlbTsKLX0KLQotaW1nIHsKLSAgICBib3JkZXI6IDA7Ci19Ci0KLS8qIC0tIHNlYXJjaCBwYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXVsLnNlYXJjaCB7Ci0gICAgbWFyZ2luOiAxMHB4IDAgMCAyMHB4OwotICAgIHBhZGRpbmc6IDA7Ci19Ci0KLXVsLnNlYXJjaCBsaSB7Ci0gICAgcGFkZGluZzogNXB4IDAgNXB4IDIwcHg7Ci0gICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGZpbGUucG5nKTsKLSAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0OwotICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgN3B4OwotfQotCi11bC5zZWFyY2ggbGkgYSB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci19Ci0KLXVsLnNlYXJjaCBsaSBkaXYuY29udGV4dCB7Ci0gICAgY29sb3I6ICM4ODg7Ci0gICAgbWFyZ2luOiAycHggMCAwIDMwcHg7Ci0gICAgdGV4dC1hbGlnbjogbGVmdDsKLX0KLQotdWwua2V5d29yZG1hdGNoZXMgbGkuZ29vZG1hdGNoIGEgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0vKiAtLSBpbmRleCBwYWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi10YWJsZS5jb250ZW50c3RhYmxlIHsKLSAgICB3aWR0aDogOTAlOwotfQotCi10YWJsZS5jb250ZW50c3RhYmxlIHAuYmlnbGluayB7Ci0gICAgbGluZS1oZWlnaHQ6IDE1MCU7Ci19Ci0KLWEuYmlnbGluayB7Ci0gICAgZm9udC1zaXplOiAxLjNlbTsKLX0KLQotc3Bhbi5saW5rZGVzY3IgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLSAgICBwYWRkaW5nLXRvcDogNXB4OwotICAgIGZvbnQtc2l6ZTogOTAlOwotfQotCi0vKiAtLSBnZW5lcmFsIGluZGV4IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi10YWJsZS5pbmRleHRhYmxlIHRkIHsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7Ci19Ci0KLXRhYmxlLmluZGV4dGFibGUgZGwsIHRhYmxlLmluZGV4dGFibGUgZGQgewotICAgIG1hcmdpbi10b3A6IDA7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLX0KLQotdGFibGUuaW5kZXh0YWJsZSB0ci5wY2FwIHsKLSAgICBoZWlnaHQ6IDEwcHg7Ci19Ci0KLXRhYmxlLmluZGV4dGFibGUgdHIuY2FwIHsKLSAgICBtYXJnaW4tdG9wOiAxMHB4OwotICAgIGJhY2tncm91bmQtY29sb3I6ICNmMmYyZjI7Ci19Ci0KLWltZy50b2dnbGVyIHsKLSAgICBtYXJnaW4tcmlnaHQ6IDNweDsKLSAgICBtYXJnaW4tdG9wOiAzcHg7Ci0gICAgY3Vyc29yOiBwb2ludGVyOwotfQotCi0vKiAtLSBnZW5lcmFsIGJvZHkgc3R5bGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1hLmhlYWRlcmxpbmsgewotICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKLX0KLQotaDE6aG92ZXIgPiBhLmhlYWRlcmxpbmssCi1oMjpob3ZlciA+IGEuaGVhZGVybGluaywKLWgzOmhvdmVyID4gYS5oZWFkZXJsaW5rLAotaDQ6aG92ZXIgPiBhLmhlYWRlcmxpbmssCi1oNTpob3ZlciA+IGEuaGVhZGVybGluaywKLWg2OmhvdmVyID4gYS5oZWFkZXJsaW5rLAotZHQ6aG92ZXIgPiBhLmhlYWRlcmxpbmsgewotICAgIHZpc2liaWxpdHk6IHZpc2libGU7Ci19Ci0KLWRpdi5ib2R5IHAuY2FwdGlvbiB7Ci0gICAgdGV4dC1hbGlnbjogaW5oZXJpdDsKLX0KLQotZGl2LmJvZHkgdGQgewotICAgIHRleHQtYWxpZ246IGxlZnQ7Ci19Ci0KLS5maWVsZC1saXN0IHVsIHsKLSAgICBwYWRkaW5nLWxlZnQ6IDFlbTsKLX0KLQotLmZpcnN0IHsKLSAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7Ci19Ci0KLXAucnVicmljIHsKLSAgICBtYXJnaW4tdG9wOiAzMHB4OwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0vKiAtLSBzaWRlYmFycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1kaXYuc2lkZWJhciB7Ci0gICAgbWFyZ2luOiAwIDAgMC41ZW0gMWVtOwotICAgIGJvcmRlcjogMXB4IHNvbGlkICNkZGI7Ci0gICAgcGFkZGluZzogN3B4IDdweCAwIDdweDsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZlOwotICAgIHdpZHRoOiA0MCU7Ci0gICAgZmxvYXQ6IHJpZ2h0OwotfQotCi1wLnNpZGViYXItdGl0bGUgewotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi0vKiAtLSB0b3BpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1kaXYudG9waWMgewotICAgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7Ci0gICAgcGFkZGluZzogN3B4IDdweCAwIDdweDsKLSAgICBtYXJnaW46IDEwcHggMCAxMHB4IDA7Ci19Ci0KLXAudG9waWMtdGl0bGUgewotICAgIGZvbnQtc2l6ZTogMS4xZW07Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgbWFyZ2luLXRvcDogMTBweDsKLX0KLQotLyogLS0gYWRtb25pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotZGl2LmFkbW9uaXRpb24gewotICAgIG1hcmdpbi10b3A6IDEwcHg7Ci0gICAgbWFyZ2luLWJvdHRvbTogMTBweDsKLSAgICBwYWRkaW5nOiA3cHg7Ci19Ci0KLWRpdi5hZG1vbml0aW9uIGR0IHsKLSAgICBmb250LXdlaWdodDogYm9sZDsKLX0KLQotZGl2LmFkbW9uaXRpb24gZGwgewotICAgIG1hcmdpbi1ib3R0b206IDA7Ci19Ci0KLXAuYWRtb25pdGlvbi10aXRsZSB7Ci0gICAgbWFyZ2luOiAwcHggMTBweCA1cHggMHB4OwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi1kaXYuYm9keSBwLmNlbnRlcmVkIHsKLSAgICB0ZXh0LWFsaWduOiBjZW50ZXI7Ci0gICAgbWFyZ2luLXRvcDogMjVweDsKLX0KLQotLyogLS0gdGFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotdGFibGUuZG9jdXRpbHMgewotICAgIGJvcmRlcjogMCBzb2xpZCAjZGNlOwotICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7Ci19Ci0KLXRhYmxlLmRvY3V0aWxzIHRkLCB0YWJsZS5kb2N1dGlscyB0aCB7Ci0gICAgcGFkZGluZzogMnB4IDVweCAycHggNXB4OwotICAgIGJvcmRlci1sZWZ0OiAwOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWY7Ci19Ci0KLXRhYmxlLmRvY3V0aWxzIHRkIHAubGFzdCwgdGFibGUuZG9jdXRpbHMgdGggcC5sYXN0IHsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotfQotCi10YWJsZS5maWVsZC1saXN0IHRkLCB0YWJsZS5maWVsZC1saXN0IHRoIHsKLSAgICBib3JkZXI6IDAgIWltcG9ydGFudDsKLX0KLQotdGFibGUuZm9vdG5vdGUgdGQsIHRhYmxlLmZvb3Rub3RlIHRoIHsKLSAgICBib3JkZXI6IDAgIWltcG9ydGFudDsKLX0KLQotdGFibGUuZG9jdXRpbHMgdGggewotICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2FjOwotICAgIGJhY2tncm91bmQtY29sb3I6ICNlZGU7Ci19Ci0KLXRoIHsKLSAgICB0ZXh0LWFsaWduOiBsZWZ0OwotICAgIHBhZGRpbmctcmlnaHQ6IDVweDsKLX0KLQotdGguaGVhZCB7Ci0gICAgdGV4dC1hbGlnbjogY2VudGVyOwotfQotCi0vKiAtLSBvdGhlciBib2R5IHN0eWxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1kbCB7Ci0gICAgbWFyZ2luLWJvdHRvbTogMTVweDsKLX0KLQotZGQgcCB7Ci0gICAgbWFyZ2luLXRvcDogMHB4OwotfQotCi1kZCB1bCwgZGQgdGFibGUgewotICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Ci19Ci0KLWRkIHsKLSAgICBtYXJnaW4tdG9wOiAzcHg7Ci0gICAgbWFyZ2luLWJvdHRvbTogMTBweDsKLSAgICBtYXJnaW4tbGVmdDogMzBweDsKLX0KLQotZHQ6dGFyZ2V0LCAuaGlnaGxpZ2h0IHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmJlNTRlOwotfQotCi1kbC5nbG9zc2FyeSBkdCB7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgZm9udC1zaXplOiAxLjFlbTsKLX0KLQotLmZpZWxkLWxpc3QgdWwgewotICAgIG1hcmdpbjogMDsKLSAgICBwYWRkaW5nLWxlZnQ6IDFlbTsKLX0KLQotLmZpZWxkLWxpc3QgcCB7Ci0gICAgbWFyZ2luOiAwOwotfQotCi0ucmVmY291bnQgewotICAgIGNvbG9yOiAjMDYwOwotfQotCi0ub3B0aW9uYWwgewotICAgIGZvbnQtc2l6ZTogMS4zZW07Ci19Ci0KLS52ZXJzaW9ubW9kaWZpZWQgewotICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKLX0KLQotLmRlcHJlY2F0ZWQsIC5kZXByZWNhdGVkLXJlbW92ZWQgewotICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmU0ZTQ7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2Y2NjsKLSAgICBwYWRkaW5nOiA3cHg7Ci19Ci0KLWRpdi5kZXByZWNhdGVkIHAsIGRpdi5kZXByZWNhdGVkLXJlbW92ZWQgcCB7Ci0gICAgbWFyZ2luLWJvdHRvbTogMDsKLX0KLQotLnN5c3RlbS1tZXNzYWdlIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmRhOwotICAgIHBhZGRpbmc6IDVweDsKLSAgICBib3JkZXI6IDNweCBzb2xpZCByZWQ7Ci19Ci0KLS5mb290bm90ZTp0YXJnZXQgIHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZhOwotfQotCi0uaW1wbC1kZXRhaWwgewotICAgIG1hcmdpbi10b3A6IDEwcHg7Ci0gICAgbWFyZ2luLWJvdHRvbTogMTBweDsKLSAgICBwYWRkaW5nOiA3cHg7Ci0gICAgYm9yZGVyOiAxcHggc29saWQgI2NjYzsKLX0KLQotLmltcGwtZGV0YWlsIC5jb21wb3VuZC1maXJzdCB7Ci0gICAgbWFyZ2luLXRvcDogMDsKLX0KLQotLmltcGwtZGV0YWlsIC5jb21wb3VuZC1sYXN0IHsKLSAgICBtYXJnaW4tYm90dG9tOiAwOwotfQotCi0vKiAtLSBjb2RlIGRpc3BsYXlzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1wcmUgewotICAgIG92ZXJmbG93OiBhdXRvOwotICAgIG92ZXJmbG93LXk6IGhpZGRlbjsKLX0KLQotdGQubGluZW5vcyBwcmUgewotICAgIHBhZGRpbmc6IDVweCAwcHg7Ci0gICAgYm9yZGVyOiAwOwotICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwotICAgIGNvbG9yOiAjYWFhOwotfQotCi10YWJsZS5oaWdobGlnaHR0YWJsZSB7Ci0gICAgbWFyZ2luLWxlZnQ6IDAuNWVtOwotfQotCi10YWJsZS5oaWdobGlnaHR0YWJsZSB0ZCB7Ci0gICAgcGFkZGluZzogMCAwLjVlbSAwIDAuNWVtOwotfQotCi10dC5kZXNjbmFtZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci0gICAgZm9udC13ZWlnaHQ6IGJvbGQ7Ci0gICAgZm9udC1zaXplOiAxLjJlbTsKLX0KLQotdHQuZGVzY2NsYXNzbmFtZSB7Ci0gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7Ci19Ci0KLXR0LnhyZWYsIGEgdHQgewotICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwotICAgIGZvbnQtd2VpZ2h0OiBib2xkOwotfQotCi1oMSB0dCwgaDIgdHQsIGgzIHR0LCBoNCB0dCwgaDUgdHQsIGg2IHR0IHsKLSAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKLX0KLQotLyogLS0gbWF0aCBkaXNwbGF5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotaW1nLm1hdGggewotICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Ci19Ci0KLWRpdi5ib2R5IGRpdi5tYXRoIHAgewotICAgIHRleHQtYWxpZ246IGNlbnRlcjsKLX0KLQotc3Bhbi5lcW5vIHsKLSAgICBmbG9hdDogcmlnaHQ7Ci19Ci0KLS8qIC0tIHByaW50b3V0IHN0eWxlc2hlZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLUBtZWRpYSBwcmludCB7Ci0gICAgZGl2LmRvY3VtZW50LAotICAgIGRpdi5kb2N1bWVudHdyYXBwZXIsCi0gICAgZGl2LmJvZHl3cmFwcGVyIHsKLSAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7Ci0gICAgICAgIHdpZHRoOiAxMDAlOwotICAgIH0KLQotICAgIGRpdi5zcGhpbnhzaWRlYmFyLAotICAgIGRpdi5yZWxhdGVkLAotICAgIGRpdi5mb290ZXIsCi0gICAgI3RvcC1saW5rIHsKLSAgICAgICAgZGlzcGxheTogbm9uZTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9jb3B5YnV0dG9uLmpzIGIvRG9jL3Rvb2xzL3N0YXRpYy9jb3B5YnV0dG9uLmpzCnNpbWlsYXJpdHkgaW5kZXggODUlCnJlbmFtZSBmcm9tIERvYy90b29scy9zcGhpbnhleHQvc3RhdGljL2NvcHlidXR0b24uanMKcmVuYW1lIHRvIERvYy90b29scy9zdGF0aWMvY29weWJ1dHRvbi5qcwppbmRleCA1ZDgyYzY3Li43MTZjOWU0IDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy9jb3B5YnV0dG9uLmpzCisrKyBiL0RvYy90b29scy9zdGF0aWMvY29weWJ1dHRvbi5qcwpAQCAtMjgsNiArMjgsNyBAQAogICAgICAgICAgICAgdmFyIGJ1dHRvbiA9ICQoJzxzcGFuIGNsYXNzPSJjb3B5YnV0dG9uIj4mZ3Q7Jmd0OyZndDs8L3NwYW4+Jyk7CiAgICAgICAgICAgICBidXR0b24uY3NzKGJ1dHRvbl9zdHlsZXMpCiAgICAgICAgICAgICBidXR0b24uYXR0cigndGl0bGUnLCBoaWRlX3RleHQpOworICAgICAgICAgICAgYnV0dG9uLmRhdGEoJ2hpZGRlbicsICdmYWxzZScpOwogICAgICAgICAgICAganRoaXMucHJlcGVuZChidXR0b24pOwogICAgICAgICB9CiAgICAgICAgIC8vIHRyYWNlYmFja3MgKC5ndCkgY29udGFpbiBiYXJlIHRleHQgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGJlCkBAIC0zOCwyMCArMzksMjQgQEAKICAgICB9KTsKIAogICAgIC8vIGRlZmluZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGJ1dHRvbiB3aGVuIGl0J3MgY2xpY2tlZAotICAgICQoJy5jb3B5YnV0dG9uJykudG9nZ2xlKAotICAgICAgICBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgIHZhciBidXR0b24gPSAkKHRoaXMpOworICAgICQoJy5jb3B5YnV0dG9uJykuY2xpY2soZnVuY3Rpb24oZSl7CisgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgdmFyIGJ1dHRvbiA9ICQodGhpcyk7CisgICAgICAgIGlmIChidXR0b24uZGF0YSgnaGlkZGVuJykgPT09ICdmYWxzZScpIHsKKyAgICAgICAgICAgIC8vIGhpZGUgdGhlIGNvZGUgb3V0cHV0CiAgICAgICAgICAgICBidXR0b24ucGFyZW50KCkuZmluZCgnLmdvLCAuZ3AsIC5ndCcpLmhpZGUoKTsKICAgICAgICAgICAgIGJ1dHRvbi5uZXh0KCdwcmUnKS5maW5kKCcuZ3QnKS5uZXh0VW50aWwoJy5ncCwgLmdvJykuY3NzKCd2aXNpYmlsaXR5JywgJ2hpZGRlbicpOwogICAgICAgICAgICAgYnV0dG9uLmNzcygndGV4dC1kZWNvcmF0aW9uJywgJ2xpbmUtdGhyb3VnaCcpOwogICAgICAgICAgICAgYnV0dG9uLmF0dHIoJ3RpdGxlJywgc2hvd190ZXh0KTsKLSAgICAgICAgfSwKLSAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICB2YXIgYnV0dG9uID0gJCh0aGlzKTsKKyAgICAgICAgICAgIGJ1dHRvbi5kYXRhKCdoaWRkZW4nLCAndHJ1ZScpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gc2hvdyB0aGUgY29kZSBvdXRwdXQKICAgICAgICAgICAgIGJ1dHRvbi5wYXJlbnQoKS5maW5kKCcuZ28sIC5ncCwgLmd0Jykuc2hvdygpOwogICAgICAgICAgICAgYnV0dG9uLm5leHQoJ3ByZScpLmZpbmQoJy5ndCcpLm5leHRVbnRpbCgnLmdwLCAuZ28nKS5jc3MoJ3Zpc2liaWxpdHknLCAndmlzaWJsZScpOwogICAgICAgICAgICAgYnV0dG9uLmNzcygndGV4dC1kZWNvcmF0aW9uJywgJ25vbmUnKTsKICAgICAgICAgICAgIGJ1dHRvbi5hdHRyKCd0aXRsZScsIGhpZGVfdGV4dCk7Ci0gICAgICAgIH0pOworICAgICAgICAgICAgYnV0dG9uLmRhdGEoJ2hpZGRlbicsICdmYWxzZScpOworICAgICAgICB9CisgICAgfSk7CiB9KTsKIApkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvcHkucG5nIGIvRG9jL3Rvb2xzL3N0YXRpYy9weS5wbmcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvYy90b29scy9zcGhpbnhleHQvc3RhdGljL3B5LnBuZwpyZW5hbWUgdG8gRG9jL3Rvb2xzL3N0YXRpYy9weS5wbmcKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvc2lkZWJhci5qcyBiL0RvYy90b29scy9zdGF0aWMvc2lkZWJhci5qcwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvc2lkZWJhci5qcwpyZW5hbWUgdG8gRG9jL3Rvb2xzL3N0YXRpYy9zaWRlYmFyLmpzCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N0YXRpYy92ZXJzaW9uX3N3aXRjaC5qcyBiL0RvYy90b29scy9zdGF0aWMvdmVyc2lvbl9zd2l0Y2guanMKc2ltaWxhcml0eSBpbmRleCA5MyUKcmVuYW1lIGZyb20gRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvdmVyc2lvbl9zd2l0Y2guanMKcmVuYW1lIHRvIERvYy90b29scy9zdGF0aWMvdmVyc2lvbl9zd2l0Y2guanMKaW5kZXggZTU1MjhlYi4uNzI4OWE0ZCAxMDA2NDQKLS0tIGEvRG9jL3Rvb2xzL3NwaGlueGV4dC9zdGF0aWMvdmVyc2lvbl9zd2l0Y2guanMKKysrIGIvRG9jL3Rvb2xzL3N0YXRpYy92ZXJzaW9uX3N3aXRjaC5qcwpAQCAtMiw3ICsyLDggQEAKICAgJ3VzZSBzdHJpY3QnOwogCiAgIHZhciBhbGxfdmVyc2lvbnMgPSB7Ci0gICAgJzMuNSc6ICdkZXYgKDMuNSknLAorICAgICczLjYnOiAnZGV2ICgzLjYpJywKKyAgICAnMy41JzogJzMuNScsCiAgICAgJzMuNCc6ICczLjQnLAogICAgICczLjMnOiAnMy4zJywKICAgICAnMy4yJzogJzMuMicsCkBAIC01MCw3ICs1MSw3IEBACiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gbmV3X3VybDsKICAgICAgICAgfSwKICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9ICdodHRwOi8vZG9jcy5weXRob24ub3JnLycgKyBzZWxlY3RlZDsKKyAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSAnaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvJyArIHNlbGVjdGVkOwogICAgICAgICB9CiAgICAgICB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YgYi9Eb2MvdG9vbHMvc3VzcC1pZ25vcmVkLmNzdgpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L3N1c3AtaWdub3JlZC5jc3YKcmVuYW1lIHRvIERvYy90b29scy9zdXNwLWlnbm9yZWQuY3N2CmluZGV4IGFiYzNjYTguLjAzMjUzMWQgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvc3VzcC1pZ25vcmVkLmNzdgorKysgYi9Eb2MvdG9vbHMvc3VzcC1pZ25vcmVkLmNzdgpAQCAtMTAsNyArMTAsNiBAQAogZXh0ZW5kaW5nL2V4dGVuZGluZywsOm15ZnVuY3Rpb24sIlB5QXJnX1BhcnNlVHVwbGUoYXJncywgIiJEOm15ZnVuY3Rpb24iIiwgJmMpOyIKIGV4dGVuZGluZy9leHRlbmRpbmcsLDpzZXQsImlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIiTzpzZXRfY2FsbGJhY2siIiwgJnRlbXApKSB7IgogZXh0ZW5kaW5nL25ld3R5cGVzLCw6Y2FsbCwiaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIic3NzOmNhbGwiIiwgJmFyZzEsICZhcmcyLCAmYXJnMykpIHsiCi1leHRlbmRpbmcvd2luZG93cywsOmluaXRzcGFtLC9leHBvcnQ6aW5pdHNwYW0KIGZhcS9wcm9ncmFtbWluZywsOmNociwiPj00LjApIG9yIDErZih4Yyx5Yyx4KngteSp5K3hjLDIuMCp4KnkreWMsay0xLGYpOmYoeGMseWMseCx5LGssZik6Y2hyKCIKIGZhcS9wcm9ncmFtbWluZywsOjosZm9yIHggaW4gc2VxdWVuY2VbOjotMV06CiBmYXEvcHJvZ3JhbW1pbmcsLDpyZWR1Y2UsInByaW50KChsYW1iZGEgUnUsUm8sSXUsSW8sSU0sU3gsU3k6cmVkdWNlKGxhbWJkYSB4LHk6eCt5LG1hcChsYW1iZGEgeSwiCkBAIC03OSw5ICs3OCw4IEBACiBob3d0by9sb2dnaW5nLCw6VGhpcyxERUJVRzpyb290OlRoaXMgbWVzc2FnZSBzaG91bGQgZ28gdG8gdGhlIGxvZyBmaWxlCiBob3d0by9sb2dnaW5nLCw6VGhpcyxERUJVRzpUaGlzIG1lc3NhZ2Ugc2hvdWxkIGFwcGVhciBvbiB0aGUgY29uc29sZQogaG93dG8vbG9nZ2luZywsOldhdGNoLFdBUk5JTkc6cm9vdDpXYXRjaCBvdXQhCi1ob3d0by9weXBvcnRpbmcsNzUsOjosIyBtYWtlIHN1cmUgdG8gdXNlIDo6IFB5dGhvbiAqYW5kKiA6OiBQeXRob24gOjogMyBzbwotaG93dG8vcHlwb3J0aW5nLDc1LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywiCi1ob3d0by9weXBvcnRpbmcsNzUsOjosJ1Byb2dyYW1taW5nIExhbmd1YWdlIDo6IFB5dGhvbiA6OiAzJworaG93dG8vcHlwb3J0aW5nLCw6OixQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMgoraG93dG8vcHlwb3J0aW5nLCw6OixQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMwogaG93dG8vcmVnZXgsLDo6LAogaG93dG8vcmVnZXgsLDpmb28sKD86Zm9vKQogaG93dG8vdXJsbGliMiwsOmV4YW1wbGUsImZvciBleGFtcGxlICIiam9lQHBhc3N3b3JkOmV4YW1wbGUuY29tIiIiCkBAIC0xMzcsMTkgKzEzNSwxMSBAQAogbGlicmFyeS9pcGFkZHJlc3MsLDo6LDIwMDE6ZGIwMDo6MC9mZmZmOmZmMDA6OgogbGlicmFyeS9pdGVydG9vbHMsLDpzdGVwLGVsZW1lbnRzIGZyb20gc2VxW3N0YXJ0OnN0b3A6c3RlcF0KIGxpYnJhcnkvaXRlcnRvb2xzLCw6c3RvcCxlbGVtZW50cyBmcm9tIHNlcVtzdGFydDpzdG9wOnN0ZXBdCi1saWJyYXJ5L2xpbmVjYWNoZSwsOnN5cywic3lzOng6MzozOnN5czovZGV2Oi9iaW4vc2giCiBsaWJyYXJ5L2xvZ2dpbmcuaGFuZGxlcnMsLDpwb3J0LGhvc3Q6cG9ydAogbGlicmFyeS9tbWFwLCw6aTIsb2JqW2kxOmkyXQogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBZGQgbW9yZSB0YXNrcyB1c2luZyBgcHV0KClgCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIEEgdGVzdCBmaWxlIGZvciB0aGUgYG11bHRpcHJvY2Vzc2luZ2AgcGFja2FnZQotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBBIHRlc3Qgb2YgYG11bHRpcHJvY2Vzc2luZy5Qb29sYCBjbGFzcwotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBgQmFzZU1hbmFnZXJgLgotbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyBpbiB0aGUgb3JpZ2luYWwgb3JkZXIgdGhlbiBjb25zaWRlciB1c2luZyBgUG9vbC5tYXAoKWAgb3IKIGxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoMjAsKSkgICAgICMgZXF1aXYgdG8gYGxbMjBdYCIKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRzbGljZV9fJywgKDIsIDcpKSAgICMgZXF1aXYgdG8gYGxbMjo3XWAiCi1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIE5vdCBzdXJlIGlmIHdlIHNob3VsZCBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gYHNvY2tldC5hY2NlcHQoKWAgbWV0aG9kIGJ5Ci1saWJyYXJ5L211bHRpcHJvY2Vzc2luZywsYCwjIG9iamVjdC4gIChXZSBpbXBvcnQgYG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb25gIHRvIGVuYWJsZSB0aGlzIHBpY2tsaW5nLikKLWxpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCMgYFBvb2wuaW1hcCgpYCAod2hpY2ggd2lsbCBzYXZlIG9uIHRoZSBhbW91bnQgb2YgY29kZSBuZWVkZWQgYW55d2F5KS4KK2xpYnJhcnkvbXVsdGlwcm9jZXNzaW5nLCxgLCI+Pj4gbC5fY2FsbG1ldGhvZCgnX19nZXRpdGVtX18nLCAoc2xpY2UoMiwgNyksKSkgICMgZXF1aXYgdG8gYGxbMjo3XWAiCiBsaWJyYXJ5L211bHRpcHJvY2Vzc2luZywsOnF1ZXVlLCI+Pj4gUXVldWVNYW5hZ2VyLnJlZ2lzdGVyKCdnZXRfcXVldWUnLCBjYWxsYWJsZT1sYW1iZGE6cXVldWUpIgogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyByZWdpc3RlciB0aGUgRm9vIGNsYXNzOyBtYWtlIGBmKClgIGFuZCBgZygpYCBhY2Nlc3NpYmxlIHZpYSBwcm94eQogbGlicmFyeS9tdWx0aXByb2Nlc3NpbmcsLGAsIyByZWdpc3RlciB0aGUgRm9vIGNsYXNzOyBtYWtlIGBnKClgIGFuZCBgX2goKWAgYWNjZXNzaWJsZSB2aWEgcHJveHkKQEAgLTE1OCwzMSArMTQ4LDI3IEBACiBsaWJyYXJ5L25udHBsaWIsLDpsaW5lcyw6bGluZXMKIGxpYnJhcnkvb3B0cGFyc2UsLDpsZW4sImRlbCBwYXJzZXIucmFyZ3NbOmxlbih2YWx1ZSldIgogbGlicmFyeS9vcy5wYXRoLCw6Zm9vLGM6Zm9vCitsaWJyYXJ5L3BhdGhsaWIsLDpiYXIsIj4+PiBQdXJlV2luZG93c1BhdGgoJ2M6L1dpbmRvd3MnLCAnZDpiYXInKSIKK2xpYnJhcnkvcGF0aGxpYiwsOmJhcixQdXJlV2luZG93c1BhdGgoJ2Q6YmFyJykKK2xpYnJhcnkvcGF0aGxpYiwsOlByb2dyYW0sPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzpQcm9ncmFtIEZpbGVzLycpLnJvb3QKK2xpYnJhcnkvcGF0aGxpYiwsOlByb2dyYW0sPj4+IFB1cmVXaW5kb3dzUGF0aCgnYzpQcm9ncmFtIEZpbGVzLycpLmFuY2hvcgogbGlicmFyeS9wZGIsLDpsaW5lbm8sZmlsZW5hbWU6bGluZW5vCiBsaWJyYXJ5L3BpY2tsZSwsOm1lbW9yeSwiY29ubiA9IHNxbGl0ZTMuY29ubmVjdCgiIjptZW1vcnk6IiIpIgogbGlicmFyeS9wb3NpeCwsYCwiQ0ZMQUdTPSIiYGdldGNvbmYgTEZTX0NGTEFHU2AiIiBPUFQ9IiItZyAtTzIgJENGTEFHUyIiIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInY2xhc3NpZmllcnMnOiBbJ0RldmVsb3BtZW50IFN0YXR1cyA6OiA0IC0gQmV0YScsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInSW50ZW5kZWQgQXVkaWVuY2UgOjogRGV2ZWxvcGVycycsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInTGljZW5zZSA6OiBPU0kgQXBwcm92ZWQgOjogTUlUIExpY2Vuc2UnLCIKLWxpYnJhcnkvcHByaW50LDIwOSw6OiwiJ05hdHVyYWwgTGFuZ3VhZ2UgOjogRW5nbGlzaCcsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInT3BlcmF0aW5nIFN5c3RlbSA6OiBPUyBJbmRlcGVuZGVudCcsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMicsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsIgotbGlicmFyeS9wcHJpbnQsMjA5LDo6LCInVG9waWMgOjogU29mdHdhcmUgRGV2ZWxvcG1lbnQgOjogTGlicmFyaWVzJywiCi1saWJyYXJ5L3BwcmludCwyMDksOjosIidUb3BpYyA6OiBTb2Z0d2FyZSBEZXZlbG9wbWVudCA6OiBMaWJyYXJpZXMgOjogUHl0aG9uIE1vZHVsZXMnXSwiCitsaWJyYXJ5L3BwcmludCwsOjosIidQcm9ncmFtbWluZyBMYW5ndWFnZSA6OiBQeXRob24gOjogMiA6OiBPbmx5J10sIgorbGlicmFyeS9wcHJpbnQsLDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNicsIgorbGlicmFyeS9wcHJpbnQsLDo6LCInUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgOjogUHl0aG9uIDo6IDIuNycsIgogbGlicmFyeS9wcm9maWxlLCw6bGluZW5vLGZpbGVuYW1lOmxpbmVubyhmdW5jdGlvbikKIGxpYnJhcnkvcHlleHBhdCwsOmVsZW0xLDxweTplbGVtMSAvPgogbGlicmFyeS9weWV4cGF0LCw6cHksInhtbG5zOnB5ID0gIiJodHRwOi8vd3d3LnB5dGhvbi5vcmcvbnMvIiI+IgogbGlicmFyeS9zbXRwbGliLCw6cG9ydCxtZXRob2QgbXVzdCBzdXBwb3J0IHRoYXQgYXMgd2VsbCBhcyBhIHJlZ3VsYXIgaG9zdDpwb3J0Ci1saWJyYXJ5L3NvY2tldCwsOjosIigxMCwgMSwgNiwgJycsICgnMjAwMTo4ODg6MjAwMDpkOjphMicsIDgwLCAwLCAwKSldIgogbGlicmFyeS9zb2NrZXQsLDo6LCc1YWVmOjJiOjo4JwogbGlicmFyeS9zb2NrZXQsLDpjYW4sInJldHVybiAoY2FuX2lkLCBjYW5fZGxjLCBkYXRhWzpjYW5fZGxjXSkiCiBsaWJyYXJ5L3NvY2tldCwsOmxlbixmZHMuZnJvbXN0cmluZyhjbXNnX2RhdGFbOmxlbihjbXNnX2RhdGEpIC0gKGxlbihjbXNnX2RhdGEpICUgZmRzLml0ZW1zaXplKV0pCiBsaWJyYXJ5L3NxbGl0ZTMsLDphZ2UsImN1ci5leGVjdXRlKCIic2VsZWN0ICogZnJvbSBwZW9wbGUgd2hlcmUgbmFtZV9sYXN0PTp3aG8gYW5kIGFnZT06YWdlIiIsIHsiIndobyIiOiB3aG8sICIiYWdlIiI6IGFnZX0pIgogbGlicmFyeS9zcWxpdGUzLCw6bWVtb3J5LAogbGlicmFyeS9zcWxpdGUzLCw6d2hvLCJjdXIuZXhlY3V0ZSgiInNlbGVjdCAqIGZyb20gcGVvcGxlIHdoZXJlIG5hbWVfbGFzdD06d2hvIGFuZCBhZ2U9OmFnZSIiLCB7IiJ3aG8iIjogd2hvLCAiImFnZSIiOiBhZ2V9KSIKK2xpYnJhcnkvc3FsaXRlMywsOnBhdGgsImRiID0gc3FsaXRlMy5jb25uZWN0KCdmaWxlOnBhdGgvdG8vZGF0YWJhc2U/bW9kZT1ybycsIHVyaT1UcnVlKSIKIGxpYnJhcnkvc3NsLCw6TXksIk9yZ2FuaXphdGlvbmFsIFVuaXQgTmFtZSAoZWcsIHNlY3Rpb24pIFtdOk15IEdyb3VwIgogbGlicmFyeS9zc2wsLDpNeSwiT3JnYW5pemF0aW9uIE5hbWUgKGVnLCBjb21wYW55KSBbSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkXTpNeSBPcmdhbml6YXRpb24sIEluYy4iCiBsaWJyYXJ5L3NzbCwsOm15c2VydmVyLCJDb21tb24gTmFtZSAoZWcsIFlPVVIgbmFtZSkgW106bXlzZXJ2ZXIubXlncm91cC5teW9yZ2FuaXphdGlvbi5jb20iCkBAIC0yMDcsNyArMTkzLDEyIEBACiBsaWJyYXJ5L3RhcmZpbGUsLDp4eiwndzp4eicKIGxpYnJhcnkvdGltZSwsOm1tLAogbGlicmFyeS90aW1lLCw6c3MsCitsaWJyYXJ5L3RyYWNlbWFsbG9jLCw6bGltaXQsImZvciBpbmRleCwgc3RhdCBpbiBlbnVtZXJhdGUodG9wX3N0YXRzWzpsaW1pdF0sIDEpOiIKIGxpYnJhcnkvdHVydGxlLCw6OixFeGFtcGxlOjoKK2xpYnJhcnkvdW5pdHRlc3QsLDpmb28sInNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbJ0lORk86Zm9vOmZpcnN0IG1lc3NhZ2UnLCIKK2xpYnJhcnkvdW5pdHRlc3QsLDpmaXJzdCwic2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsIgorbGlicmFyeS91bml0dGVzdCwsOmZvbywnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQorbGlicmFyeS91bml0dGVzdCwsOnNlY29uZCwnRVJST1I6Zm9vLmJhcjpzZWNvbmQgbWVzc2FnZSddKQogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOmNsb3NlLENvbm5lY3Rpb246Y2xvc2UKIGxpYnJhcnkvdXJsbGliLnJlcXVlc3QsLDpsYW5nLCJ4bWxucz0iImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIiB4bWw6bGFuZz0iImVuIiIgbGFuZz0iImVuIiI+XG5cbjxoZWFkPlxuIgogbGlicmFyeS91cmxsaWIucmVxdWVzdCwsOnBhc3N3b3JkLCIiImpvZTpwYXNzd29yZEBweXRob24ub3JnIiIiCkBAIC0yMTYsNiArMjA3LDE2IEBACiBsaWJyYXJ5L3ZlbnYsLDpwYXJhbSwiOnBhcmFtIHByb2dyZXNzOiBJZiBzZXR1cHRvb2xzIG9yIHBpcCBhcmUgaW5zdGFsbGVkLCB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIgogbGlicmFyeS92ZW52LCw6cGFyYW0sIjpwYXJhbSBub3BpcDogSWYgVHJ1ZSwgcGlwIGlzIG5vdCBpbnN0YWxsZWQgaW50byB0aGUgY3JlYXRlZCIKIGxpYnJhcnkvdmVudiwsOnBhcmFtLDpwYXJhbSBjb250ZXh0OiBUaGUgaW5mb3JtYXRpb24gZm9yIHRoZSBlbnZpcm9ubWVudCBjcmVhdGlvbiByZXF1ZXN0CitsaWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOnNvbWV0YWcscHJlZml4OnNvbWV0YWcKK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6ZmljdGlvbmFsLCI8YWN0b3JzIHhtbG5zOmZpY3Rpb25hbD0iImh0dHA6Ly9jaGFyYWN0ZXJzLmV4YW1wbGUuY29tIiIiCitsaWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOmNoYXJhY3Rlciw8ZmljdGlvbmFsOmNoYXJhY3Rlcj5MYW5jZWxvdDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkFyY2hpZSBMZWFjaDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPlNpciBSb2JpbjwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6Y2hhcmFjdGVyLDxmaWN0aW9uYWw6Y2hhcmFjdGVyPkd1bnRoZXI8L2ZpY3Rpb25hbDpjaGFyYWN0ZXI+CitsaWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOmNoYXJhY3Rlciw8ZmljdGlvbmFsOmNoYXJhY3Rlcj5Db21tYW5kZXIgQ2xlbWVudDwvZmljdGlvbmFsOmNoYXJhY3Rlcj4KK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6YWN0b3IsImZvciBhY3RvciBpbiByb290LmZpbmRhbGwoJ3JlYWxfcGVyc29uOmFjdG9yJywgbnMpOiIKK2xpYnJhcnkveG1sLmV0cmVlLmVsZW1lbnR0cmVlLCw6bmFtZSwibmFtZSA9IGFjdG9yLmZpbmQoJ3JlYWxfcGVyc29uOm5hbWUnLCBucykiCitsaWJyYXJ5L3htbC5ldHJlZS5lbGVtZW50dHJlZSwsOmNoYXJhY3RlciwiZm9yIGNoYXIgaW4gYWN0b3IuZmluZGFsbCgncm9sZTpjaGFyYWN0ZXInLCBucyk6IgogbGlicmFyeS94bWxycGMuY2xpZW50LCw6cGFzcyxodHRwOi8vdXNlcjpwYXNzQGhvc3Q6cG9ydC9wYXRoCiBsaWJyYXJ5L3htbHJwYy5jbGllbnQsLDpwYXNzLHVzZXI6cGFzcwogbGlicmFyeS94bWxycGMuY2xpZW50LCw6cG9ydCxodHRwOi8vdXNlcjpwYXNzQGhvc3Q6cG9ydC9wYXRoCkBAIC0yNDIsNiArMjQzLDcgQEAKIHR1dG9yaWFsL3N0ZGxpYjIsLDpzdGFydCwiZmllbGRzID0gc3RydWN0LnVucGFjaygnPElJSUhIJywgZGF0YVtzdGFydDpzdGFydCsxNl0pIgogdHV0b3JpYWwvc3RkbGliMiwsOnN0YXJ0LGZpbGVuYW1lID0gZGF0YVtzdGFydDpzdGFydCtmaWxlbmFtZXNpemVdCiB0dXRvcmlhbC9zdGRsaWIyLCw6V2FybmluZyxXQVJOSU5HOnJvb3Q6V2FybmluZzpjb25maWcgZmlsZSBzZXJ2ZXIuY29uZiBub3QgZm91bmQKK3R1dG9yaWFsL3ZlbnYsLDpjN2I5NjQ1YTZmMzUsIlB5dGhvbiAzLjQuMysgKDMuNDpjN2I5NjQ1YTZmMzUrLCBNYXkgMjIgMjAxNSwgMDk6MzE6MjUpIgogdXNpbmcvY21kbGluZSwsOmNhdGVnb3J5LGFjdGlvbjptZXNzYWdlOmNhdGVnb3J5Om1vZHVsZTpsaW5lCiB1c2luZy9jbWRsaW5lLCw6ZXJyb3JoYW5kbGVyLDplcnJvcmhhbmRsZXIKIHVzaW5nL2NtZGxpbmUsLDpsaW5lLGFjdGlvbjptZXNzYWdlOmNhdGVnb3J5Om1vZHVsZTpsaW5lCkBAIC0yNjIsMTEgKzI2NCw2IEBACiB3aGF0c25ldy8yLjUsLDptZW1vcnksOm1lbW9yeToKIHdoYXRzbmV3LzIuNSwsOnN0ZXAsW3N0YXJ0OnN0b3A6c3RlcF0KIHdoYXRzbmV3LzIuNSwsOnN0b3AsW3N0YXJ0OnN0b3A6c3RlcF0KLXdoYXRzbmV3LzIuNywxNjE5LDo6LCJQYXJzZVJlc3VsdChzY2hlbWU9J2h0dHAnLCBuZXRsb2M9J1sxMDgwOjo4OjgwMDoyMDBDOjQxN0FdJywiCi13aGF0c25ldy8yLjcsMTYxOSw6Oiw+Pj4gdXJscGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bMTA4MDo6ODo4MDA6MjAwQzo0MTdBXS9mb28nKQotd2hhdHNuZXcvMi43LDczNSw6U3VuZGF5LCcyMDA5OjQ6U3VuZGF5Jwotd2hhdHNuZXcvMi43LDg2Miw6Q29va2llLCJleHBvcnQgUFlUSE9OV0FSTklOR1M9YWxsLGVycm9yOjo6Q29va2llOjAiCi13aGF0c25ldy8yLjcsODYyLDo6LCJleHBvcnQgUFlUSE9OV0FSTklOR1M9YWxsLGVycm9yOjo6Q29va2llOjAiCiB3aGF0c25ldy8zLjIsLDphZmZlLCJuZXRsb2M9J1tkZWFkOmJlZWY6Y2FmZTo1NDE3OmFmZmU6OEZBMzpkZWFmOmZlZWRdJywiCiB3aGF0c25ldy8zLjIsLDphZmZlLD4+PiB1cmxsaWIucGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bZGVhZDpiZWVmOmNhZmU6NTQxNzphZmZlOjhGQTM6ZGVhZjpmZWVkXS9mb28vJykKIHdoYXRzbmV3LzMuMiwsOmJlZWYsIm5ldGxvYz0nW2RlYWQ6YmVlZjpjYWZlOjU0MTc6YWZmZTo4RkEzOmRlYWY6ZmVlZF0nLCIKQEAgLTI4Myw4ICsyODAsMTMgQEAKIHdoYXRzbmV3LzMuMiwsOmxvY2F0aW9uLHpvcGU5LWxvY2F0aW9uID0gJHt6b3BlOTpsb2NhdGlvbn0KIHdoYXRzbmV3LzMuMiwsOnByZWZpeCx6b3BlLWNvbmYgPSAke2N1c3RvbTpwcmVmaXh9L2V0Yy96b3BlLmNvbmYKIHdoYXRzbmV3L2NoYW5nZWxvZywsOnBsYXRmb3JtLDpwbGF0Zm9ybToKK3doYXRzbmV3L2NoYW5nZWxvZywsOmd6LCI6IFRhckZpbGUgb3BlbmVkIHdpdGggZXh0ZXJuYWwgZmlsZW9iaiBhbmQgIiJ3Omd6IiIgbW9kZSBkaWRuJ3QiCiB3aGF0c25ldy9jaGFuZ2Vsb2csLDpQeXRob25DbWQsIldpdGggVGsgPCA4LjUgX3RraW50ZXIuYzpQeXRob25DbWQoKSByYWlzZWQgVW5pY29kZURlY29kZUVycm9yLCBjYXVzZWQiCiB3aGF0c25ldy9jaGFuZ2Vsb2csLDo6LCI6IEZpeCBGVFAgdGVzdHMgZm9yIElQdjYsIGJpbmQgdG8gIiI6OjEiIiBpbnN0ZWFkIG9mICIibG9jYWxob3N0IiIuIgogd2hhdHNuZXcvY2hhbmdlbG9nLCw6OiwiOiBVc2UgIiIxMjcuMC4wLjEiIiBvciAiIjo6MSIiIGluc3RlYWQgb2YgIiJsb2NhbGhvc3QiIiBhcyBtdWNoIGFzIgogd2hhdHNuZXcvY2hhbmdlbG9nLCw6cGFzc3dvcmQsdXNlcjpwYXNzd29yZAotd2hhdHNuZXcvY2hhbmdlbG9nLCw6Z3osdzpnegord2hhdHNuZXcvMi43LDc4MCw6U3VuZGF5LCcyMDA5OjQ6U3VuZGF5Jword2hhdHNuZXcvMi43LDkwNyw6OiwiZXhwb3J0IFBZVEhPTldBUk5JTkdTPWFsbCxlcnJvcjo6OkNvb2tpZTowIgord2hhdHNuZXcvMi43LDkwNyw6Q29va2llLCJleHBvcnQgUFlUSE9OV0FSTklOR1M9YWxsLGVycm9yOjo6Q29va2llOjAiCit3aGF0c25ldy8yLjcsMTY1Nyw6Oiw+Pj4gdXJscGFyc2UudXJscGFyc2UoJ2h0dHA6Ly9bMTA4MDo6ODo4MDA6MjAwQzo0MTdBXS9mb28nKQord2hhdHNuZXcvMi43LDE2NTcsOjosIlBhcnNlUmVzdWx0KHNjaGVtZT0naHR0cCcsIG5ldGxvYz0nWzEwODA6Ojg6ODAwOjIwMEM6NDE3QV0nLCIKZGlmZiAtLWdpdCBhL0RvYy90b29scy9zcGhpbnhleHQvZG93bmxvYWQuaHRtbCBiL0RvYy90b29scy90ZW1wbGF0ZXMvZG93bmxvYWQuaHRtbApzaW1pbGFyaXR5IGluZGV4IDg3JQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L2Rvd25sb2FkLmh0bWwKcmVuYW1lIHRvIERvYy90b29scy90ZW1wbGF0ZXMvZG93bmxvYWQuaHRtbAppbmRleCAzMWE1M2NmLi5kZTg0YWUzIDEwMDY0NAotLS0gYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2Rvd25sb2FkLmh0bWwKKysrIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9kb3dubG9hZC5odG1sCkBAIC0zLDcgKzMsNyBAQAogeyUgaWYgZGFpbHkgaXMgZGVmaW5lZCAlfQogICB7JSBzZXQgZGxiYXNlID0gcGF0aHRvKCdhcmNoaXZlcycsIDEpICV9CiB7JSBlbHNlICV9Ci0gIHslIHNldCBkbGJhc2UgPSAnaHR0cDovL2RvY3MucHl0aG9uLm9yZy9mdHAvcHl0aG9uL2RvYy8nICsgcmVsZWFzZSAlfQorICB7JSBzZXQgZGxiYXNlID0gJ2h0dHBzOi8vZG9jcy5weXRob24ub3JnL2Z0cC9weXRob24vZG9jLycgKyByZWxlYXNlICV9CiB7JSBlbmRpZiAlfQogCiB7JSBibG9jayBib2R5ICV9CkBAIC0zNCwxNSArMzQsMTUgQEAKICAgICA8dGQ+PGEgaHJlZj0ie3sgZGxiYXNlIH19L3B5dGhvbi17eyByZWxlYXNlIH19LWRvY3MtdGV4dC50YXIuYnoyIj5Eb3dubG9hZDwvYT4gKGNhLiAxLjUgTUIpPC90ZD4KICAgPC90cj4KICA8dHI+PHRkPkVQVUI8L3RkPgotICAgIDx0ZD48YSBocmVmPSJ7eyBkbGJhc2UgfX0vcHl0aG9uLXt7IHJlbGVhc2UgfX0tZG9jcy1lcHViLnppcCI+RG93bmxvYWQ8L2E+IChjYS4gMy41IE1CKTwvdGQ+Ci0gICAgPHRkPjxhIGhyZWY9Int7IGRsYmFzZSB9fS9weXRob24te3sgcmVsZWFzZSB9fS1kb2NzLWVwdWIudGFyLmJ6MiI+RG93bmxvYWQ8L2E+IChjYS4gMy41IE1CKTwvdGQ+CisgICAgPHRkPjxhIGhyZWY9Int7IGRsYmFzZSB9fS9weXRob24te3sgcmVsZWFzZSB9fS1kb2NzLmVwdWIiPkRvd25sb2FkPC9hPiAoY2EuIDQuNSBNQik8L3RkPgorICAgIDx0ZD48L3RkPgogICA8L3RyPgogPC90YWJsZT4KIAogPHA+VGhlc2UgYXJjaGl2ZXMgY29udGFpbiBhbGwgdGhlIGNvbnRlbnQgaW4gdGhlIGRvY3VtZW50YXRpb24uPC9wPgogCiA8cD5IVE1MIEhlbHAgKDx0dD4uY2htPC90dD4pIGZpbGVzIGFyZSBtYWRlIGF2YWlsYWJsZSBpbiB0aGUgIldpbmRvd3MiIHNlY3Rpb24KLW9uIHRoZSA8YSBocmVmPSJodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy97eyByZWxlYXNlWzo1XSB9fS8iPlB5dGhvbgorb24gdGhlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMve3sgcmVsZWFzZVs6NV0gfX0vIj5QeXRob24KIGRvd25sb2FkIHBhZ2U8L2E+LjwvcD4KIAogCmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9pbmRleGNvbnRlbnQuaHRtbApzaW1pbGFyaXR5IGluZGV4IDkyJQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L2luZGV4Y29udGVudC5odG1sCnJlbmFtZSB0byBEb2MvdG9vbHMvdGVtcGxhdGVzL2luZGV4Y29udGVudC5odG1sCmluZGV4IDdmODU0NzAuLjk2OTA5OWEgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvaW5kZXhjb250ZW50Lmh0bWwKKysrIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9pbmRleGNvbnRlbnQuaHRtbApAQCAtMTYsMTQgKzE2LDE0IEBACiAgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiaG93dG8vaW5kZXgiKSB9fSI+UHl0aG9uIEhPV1RPczwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+aW4tZGVwdGggZG9jdW1lbnRzIG9uIHNwZWNpZmljIHRvcGljczwvc3Bhbj48L3A+CiAgICAgPC90ZD48dGQgd2lkdGg9IjUwJSI+CisgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiaW5zdGFsbGluZy9pbmRleCIpIH19Ij5JbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGVzPC9hPjxici8+CisgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5pbnN0YWxsaW5nIGZyb20gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4ICZhbXA7IG90aGVyIHNvdXJjZXM8L3NwYW4+PC9wPgorICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImRpc3RyaWJ1dGluZy9pbmRleCIpIH19Ij5EaXN0cmlidXRpbmcgUHl0aG9uIE1vZHVsZXM8L2E+PGJyLz4KKyAgICAgICAgIDxzcGFuIGNsYXNzPSJsaW5rZGVzY3IiPnB1Ymxpc2hpbmcgbW9kdWxlcyBmb3IgaW5zdGFsbGF0aW9uIGJ5IG90aGVyczwvc3Bhbj48L3A+CiAgICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiZXh0ZW5kaW5nL2luZGV4IikgfX0iPkV4dGVuZGluZyBhbmQgRW1iZWRkaW5nPC9hPjxici8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj50dXRvcmlhbCBmb3IgQy9DKysgcHJvZ3JhbW1lcnM8L3NwYW4+PC9wPgogICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImMtYXBpL2luZGV4IikgfX0iPlB5dGhvbi9DIEFQSTwvYT48YnIvPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImxpbmtkZXNjciI+cmVmZXJlbmNlIGZvciBDL0MrKyBwcm9ncmFtbWVyczwvc3Bhbj48L3A+Ci0gICAgICA8cCBjbGFzcz0iYmlnbGluayI+PGEgY2xhc3M9ImJpZ2xpbmsiIGhyZWY9Int7IHBhdGh0bygiaW5zdGFsbC9pbmRleCIpIH19Ij5JbnN0YWxsaW5nIFB5dGhvbiBNb2R1bGVzPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5pbmZvcm1hdGlvbiBmb3IgaW5zdGFsbGVycyAmYW1wOyBzeXMtYWRtaW5zPC9zcGFuPjwvcD4KLSAgICAgIDxwIGNsYXNzPSJiaWdsaW5rIj48YSBjbGFzcz0iYmlnbGluayIgaHJlZj0ie3sgcGF0aHRvKCJkaXN0dXRpbHMvaW5kZXgiKSB9fSI+RGlzdHJpYnV0aW5nIFB5dGhvbiBNb2R1bGVzPC9hPjxici8+Ci0gICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5zaGFyaW5nIG1vZHVsZXMgd2l0aCBvdGhlcnM8L3NwYW4+PC9wPgogICAgICAgPHAgY2xhc3M9ImJpZ2xpbmsiPjxhIGNsYXNzPSJiaWdsaW5rIiBocmVmPSJ7eyBwYXRodG8oImZhcS9pbmRleCIpIH19Ij5GQVFzPC9hPjxici8+CiAgICAgICAgICA8c3BhbiBjbGFzcz0ibGlua2Rlc2NyIj5mcmVxdWVudGx5IGFza2VkIHF1ZXN0aW9ucyAod2l0aCBhbnN3ZXJzISk8L3NwYW4+PC9wPgogICAgIDwvdGQ+PC90cj4KZGlmZiAtLWdpdCBhL0RvYy90b29scy90ZW1wbGF0ZXMvaW5kZXhzaWRlYmFyLmh0bWwgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL2luZGV4c2lkZWJhci5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZGYwNzAKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL2luZGV4c2lkZWJhci5odG1sCkBAIC0wLDAgKzEsMTggQEAKKzxoMz5Eb3dubG9hZDwvaDM+Cis8cD48YSBocmVmPSJ7eyBwYXRodG8oJ2Rvd25sb2FkJykgfX0iPkRvd25sb2FkIHRoZXNlIGRvY3VtZW50czwvYT48L3A+Cis8aDM+RG9jcyBmb3Igb3RoZXIgdmVyc2lvbnM8L2gzPgorPHVsPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMi43LyI+UHl0aG9uIDIuNyAoc3RhYmxlKTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zLyI+UHl0aG9uIDMuMyAoc3RhYmxlKTwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy41LyI+UHl0aG9uIDMuNSAoaW4gZGV2ZWxvcG1lbnQpPC9hPjwvbGk+CisgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnL2RvYy92ZXJzaW9ucy8iPk9sZCB2ZXJzaW9uczwvYT48L2xpPgorPC91bD4KKworPGgzPk90aGVyIHJlc291cmNlczwvaDM+Cis8dWw+CisgIHsjIFhYWDogbWFueSBvZiB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgbWVyZ2VkIGluIHRoZSBtYWluIGRvY3MgI30KKyAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvIj5QRVAgSW5kZXg8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vQmVnaW5uZXJzR3VpZGUiPkJlZ2lubmVyJ3MgR3VpZGU8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd2lraS5weXRob24ub3JnL21vaW4vUHl0aG9uQm9va3MiPkJvb2sgTGlzdDwvYT48L2xpPgorICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb2MvYXYvIj5BdWRpby9WaXN1YWwgVGFsa3M8L2E+PC9saT4KKzwvdWw+CmRpZmYgLS1naXQgYS9Eb2MvdG9vbHMvc3BoaW54ZXh0L2xheW91dC5odG1sIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9sYXlvdXQuaHRtbApzaW1pbGFyaXR5IGluZGV4IDkwJQpyZW5hbWUgZnJvbSBEb2MvdG9vbHMvc3BoaW54ZXh0L2xheW91dC5odG1sCnJlbmFtZSB0byBEb2MvdG9vbHMvdGVtcGxhdGVzL2xheW91dC5odG1sCmluZGV4IDE2YTkyMTIuLjhhZTZlMjMgMTAwNjQ0Ci0tLSBhL0RvYy90b29scy9zcGhpbnhleHQvbGF5b3V0Lmh0bWwKKysrIGIvRG9jL3Rvb2xzL3RlbXBsYXRlcy9sYXlvdXQuaHRtbApAQCAtMiw3ICsyLDcgQEAKIHslIGJsb2NrIHJvb3RyZWxsaW5rICV9CiAgICAgICAgIDxsaT48aW1nIHNyYz0ie3sgcGF0aHRvKCdfc3RhdGljL3B5LnBuZycsIDEpIH19IiBhbHQ9IiIKICAgICAgICAgICAgICAgICAgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi10b3A6IC0xcHgiLz48L2xpPgotICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnLyI+UHl0aG9uPC9hPnt7IHJlbGRlbGltMSB9fTwvbGk+CisgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnLyI+UHl0aG9uPC9hPnt7IHJlbGRlbGltMSB9fTwvbGk+CiAgICAgICAgIDxsaT4KICAgICAgICAgICB7JS0gaWYgdmVyc2lvbnN3aXRjaGVyIGlzIGRlZmluZWQgJX0KICAgICAgICAgICA8c3BhbiBjbGFzcz0idmVyc2lvbl9zd2l0Y2hlcl9wbGFjZWhvbGRlciI+e3sgcmVsZWFzZSB9fTwvc3Bhbj4KQEAgLTEyLDExICsxMiwxMyBAQAogICAgICAgICAgIHslLSBlbmRpZiAlfQogICAgICAgICA8L2xpPgogeyUgZW5kYmxvY2sgJX0KK3slIGJsb2NrIHJlbGJhcjEgJX0geyUgaWYgYnVpbGRlciAhPSAncXRoZWxwJyAlfSB7eyByZWxiYXIoKSB9fSB7JSBlbmRpZiAlfSB7JSBlbmRibG9jayAlfQoreyUgYmxvY2sgcmVsYmFyMiAlfSB7JSBpZiBidWlsZGVyICE9ICdxdGhlbHAnICV9IHt7IHJlbGJhcigpIH19IHslIGVuZGlmICV9IHslIGVuZGJsb2NrICV9CiB7JSBibG9jayBleHRyYWhlYWQgJX0KICAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3BuZyIgaHJlZj0ie3sgcGF0aHRvKCdfc3RhdGljL3B5LnBuZycsIDEpIH19IiAvPgogICAgIHslIGlmIG5vdCBlbWJlZGRlZCAlfTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Int7IHBhdGh0bygnX3N0YXRpYy9jb3B5YnV0dG9uLmpzJywgMSkgfX0iPjwvc2NyaXB0PnslIGVuZGlmICV9CiAgICAgeyUgaWYgdmVyc2lvbnN3aXRjaGVyIGlzIGRlZmluZWQgYW5kIG5vdCBlbWJlZGRlZCAlfTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Int7IHBhdGh0bygnX3N0YXRpYy92ZXJzaW9uX3N3aXRjaC5qcycsIDEpIH19Ij48L3NjcmlwdD57JSBlbmRpZiAlfQotICAgIHslIGlmIHBhZ2VuYW1lID09ICd3aGF0c25ldy9jaGFuZ2Vsb2cnICV9CisgICAgeyUgaWYgcGFnZW5hbWUgPT0gJ3doYXRzbmV3L2NoYW5nZWxvZycgYW5kIG5vdCBlbWJlZGRlZCAlfQogICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkgewogICAgICAgICAgIC8vIGFkZCB0aGUgc2VhcmNoIGZvcm0gYW5kIGJpbmQgdGhlIGV2ZW50cwpAQCAtODAsNyArODIsNyBAQAogICAgICZjb3B5OyA8YSBocmVmPSJ7eyBwYXRodG8oJ2NvcHlyaWdodCcpIH19Ij5Db3B5cmlnaHQ8L2E+IHt7IGNvcHlyaWdodHxlIH19LgogICAgIDxiciAvPgogICAgIFRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBpcyBhIG5vbi1wcm9maXQgY29ycG9yYXRpb24uCi0gICAgPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvIj5QbGVhc2UgZG9uYXRlLjwvYT4KKyAgICA8YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvIj5QbGVhc2UgZG9uYXRlLjwvYT4KICAgICA8YnIgLz4KICAgICBMYXN0IHVwZGF0ZWQgb24ge3sgbGFzdF91cGRhdGVkfGUgfX0uCiAgICAgPGEgaHJlZj0ie3sgcGF0aHRvKCdidWdzJykgfX0iPkZvdW5kIGEgYnVnPC9hPj8KZGlmZiAtLWdpdCBhL0RvYy90b29scy90ZW1wbGF0ZXMvb3BlbnNlYXJjaC54bWwgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL29wZW5zZWFyY2gueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhNWNkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvdG9vbHMvdGVtcGxhdGVzL29wZW5zZWFyY2gueG1sCkBAIC0wLDAgKzEsNCBAQAoreyUgZXh0ZW5kcyAiIW9wZW5zZWFyY2gueG1sIiAlfQoreyUgYmxvY2sgZXh0cmEgLSV9Cis8SW1hZ2UgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiB0eXBlPSJpbWFnZS94LWljb24iPmh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvaW1hZ2VzL2Zhdmljb24xNngxNi5pY288L0ltYWdlPgoreyUtIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvYXBwZW5kaXgucnN0IGIvRG9jL3R1dG9yaWFsL2FwcGVuZGl4LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTUwYzFlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL3R1dG9yaWFsL2FwcGVuZGl4LnJzdApAQCAtMCwwICsxLDEyNCBAQAorLi4gX3R1dC1hcHBlbmRpeDoKKworKioqKioqKioKK0FwcGVuZGl4CisqKioqKioqKgorCisKKy4uIF90dXQtaW50ZXJhYzoKKworSW50ZXJhY3RpdmUgTW9kZQorPT09PT09PT09PT09PT09PQorCisuLiBfdHV0LWVycm9yOgorCitFcnJvciBIYW5kbGluZworLS0tLS0tLS0tLS0tLS0KKworV2hlbiBhbiBlcnJvciBvY2N1cnMsIHRoZSBpbnRlcnByZXRlciBwcmludHMgYW4gZXJyb3IgbWVzc2FnZSBhbmQgYSBzdGFjayB0cmFjZS4KK0luIGludGVyYWN0aXZlIG1vZGUsIGl0IHRoZW4gcmV0dXJucyB0byB0aGUgcHJpbWFyeSBwcm9tcHQ7IHdoZW4gaW5wdXQgY2FtZSBmcm9tCithIGZpbGUsIGl0IGV4aXRzIHdpdGggYSBub256ZXJvIGV4aXQgc3RhdHVzIGFmdGVyIHByaW50aW5nIHRoZSBzdGFjayB0cmFjZS4KKyhFeGNlcHRpb25zIGhhbmRsZWQgYnkgYW4gOmtleXdvcmQ6YGV4Y2VwdGAgY2xhdXNlIGluIGEgOmtleXdvcmQ6YHRyeWAgc3RhdGVtZW50CithcmUgbm90IGVycm9ycyBpbiB0aGlzIGNvbnRleHQuKSAgU29tZSBlcnJvcnMgYXJlIHVuY29uZGl0aW9uYWxseSBmYXRhbCBhbmQKK2NhdXNlIGFuIGV4aXQgd2l0aCBhIG5vbnplcm8gZXhpdDsgdGhpcyBhcHBsaWVzIHRvIGludGVybmFsIGluY29uc2lzdGVuY2llcyBhbmQKK3NvbWUgY2FzZXMgb2YgcnVubmluZyBvdXQgb2YgbWVtb3J5LiAgQWxsIGVycm9yIG1lc3NhZ2VzIGFyZSB3cml0dGVuIHRvIHRoZQorc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBub3JtYWwgb3V0cHV0IGZyb20gZXhlY3V0ZWQgY29tbWFuZHMgaXMgd3JpdHRlbiB0bworc3RhbmRhcmQgb3V0cHV0LgorCitUeXBpbmcgdGhlIGludGVycnVwdCBjaGFyYWN0ZXIgKHVzdWFsbHkgOmtiZDpgQ29udHJvbC1DYCBvciA6a2JkOmBEZWxldGVgKSB0byB0aGUgcHJpbWFyeSBvcgorc2Vjb25kYXJ5IHByb21wdCBjYW5jZWxzIHRoZSBpbnB1dCBhbmQgcmV0dXJucyB0byB0aGUgcHJpbWFyeSBwcm9tcHQuIFsjXV8KK1R5cGluZyBhbiBpbnRlcnJ1cHQgd2hpbGUgYSBjb21tYW5kIGlzIGV4ZWN1dGluZyByYWlzZXMgdGhlCis6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgZXhjZXB0aW9uLCB3aGljaCBtYXkgYmUgaGFuZGxlZCBieSBhIDprZXl3b3JkOmB0cnlgCitzdGF0ZW1lbnQuCisKKworLi4gX3R1dC1zY3JpcHRzOgorCitFeGVjdXRhYmxlIFB5dGhvbiBTY3JpcHRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uIEJTRCdpc2ggVW5peCBzeXN0ZW1zLCBQeXRob24gc2NyaXB0cyBjYW4gYmUgbWFkZSBkaXJlY3RseSBleGVjdXRhYmxlLCBsaWtlCitzaGVsbCBzY3JpcHRzLCBieSBwdXR0aW5nIHRoZSBsaW5lIDo6CisKKyAgICMhL3Vzci9iaW4vZW52IHB5dGhvbjMuNAorCisoYXNzdW1pbmcgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgb24gdGhlIHVzZXIncyA6ZW52dmFyOmBQQVRIYCkgYXQgdGhlIGJlZ2lubmluZworb2YgdGhlIHNjcmlwdCBhbmQgZ2l2aW5nIHRoZSBmaWxlIGFuIGV4ZWN1dGFibGUgbW9kZS4gIFRoZSBgYCMhYGAgbXVzdCBiZSB0aGUKK2ZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBmaWxlLiAgT24gc29tZSBwbGF0Zm9ybXMsIHRoaXMgZmlyc3QgbGluZSBtdXN0IGVuZAord2l0aCBhIFVuaXgtc3R5bGUgbGluZSBlbmRpbmcgKGBgJ1xuJ2BgKSwgbm90IGEgV2luZG93cyAoYGAnXHJcbidgYCkgbGluZQorZW5kaW5nLiAgTm90ZSB0aGF0IHRoZSBoYXNoLCBvciBwb3VuZCwgY2hhcmFjdGVyLCBgYCcjJ2BgLCBpcyB1c2VkIHRvIHN0YXJ0IGEKK2NvbW1lbnQgaW4gUHl0aG9uLgorCitUaGUgc2NyaXB0IGNhbiBiZSBnaXZlbiBhbiBleGVjdXRhYmxlIG1vZGUsIG9yIHBlcm1pc3Npb24sIHVzaW5nIHRoZQorOnByb2dyYW06YGNobW9kYCBjb21tYW5kLgorCisuLiBjb2RlLWJsb2NrOjogYmFzaAorCisgICAkIGNobW9kICt4IG15c2NyaXB0LnB5CisKK09uIFdpbmRvd3Mgc3lzdGVtcywgdGhlcmUgaXMgbm8gbm90aW9uIG9mIGFuICJleGVjdXRhYmxlIG1vZGUiLiAgVGhlIFB5dGhvbgoraW5zdGFsbGVyIGF1dG9tYXRpY2FsbHkgYXNzb2NpYXRlcyBgYC5weWBgIGZpbGVzIHdpdGggYGBweXRob24uZXhlYGAgc28gdGhhdAorYSBkb3VibGUtY2xpY2sgb24gYSBQeXRob24gZmlsZSB3aWxsIHJ1biBpdCBhcyBhIHNjcmlwdC4gIFRoZSBleHRlbnNpb24gY2FuCithbHNvIGJlIGBgLnB5d2BgLCBpbiB0aGF0IGNhc2UsIHRoZSBjb25zb2xlIHdpbmRvdyB0aGF0IG5vcm1hbGx5IGFwcGVhcnMgaXMKK3N1cHByZXNzZWQuCisKKworLi4gX3R1dC1zdGFydHVwOgorCitUaGUgSW50ZXJhY3RpdmUgU3RhcnR1cCBGaWxlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doZW4geW91IHVzZSBQeXRob24gaW50ZXJhY3RpdmVseSwgaXQgaXMgZnJlcXVlbnRseSBoYW5keSB0byBoYXZlIHNvbWUgc3RhbmRhcmQKK2NvbW1hbmRzIGV4ZWN1dGVkIGV2ZXJ5IHRpbWUgdGhlIGludGVycHJldGVyIGlzIHN0YXJ0ZWQuICBZb3UgY2FuIGRvIHRoaXMgYnkKK3NldHRpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgbmFtZWQgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgdG8gdGhlIG5hbWUgb2YgYQorZmlsZSBjb250YWluaW5nIHlvdXIgc3RhcnQtdXAgY29tbWFuZHMuICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIDpmaWxlOmAucHJvZmlsZWAKK2ZlYXR1cmUgb2YgdGhlIFVuaXggc2hlbGxzLgorCitUaGlzIGZpbGUgaXMgb25seSByZWFkIGluIGludGVyYWN0aXZlIHNlc3Npb25zLCBub3Qgd2hlbiBQeXRob24gcmVhZHMgY29tbWFuZHMKK2Zyb20gYSBzY3JpcHQsIGFuZCBub3Qgd2hlbiA6ZmlsZTpgL2Rldi90dHlgIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBzb3VyY2Ugb2YKK2NvbW1hbmRzICh3aGljaCBvdGhlcndpc2UgYmVoYXZlcyBsaWtlIGFuIGludGVyYWN0aXZlIHNlc3Npb24pLiAgSXQgaXMgZXhlY3V0ZWQKK2luIHRoZSBzYW1lIG5hbWVzcGFjZSB3aGVyZSBpbnRlcmFjdGl2ZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQsIHNvIHRoYXQgb2JqZWN0cwordGhhdCBpdCBkZWZpbmVzIG9yIGltcG9ydHMgY2FuIGJlIHVzZWQgd2l0aG91dCBxdWFsaWZpY2F0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZQorc2Vzc2lvbi4gWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgcHJvbXB0cyBgYHN5cy5wczFgYCBhbmQgYGBzeXMucHMyYGAgaW4gdGhpcworZmlsZS4KKworSWYgeW91IHdhbnQgdG8gcmVhZCBhbiBhZGRpdGlvbmFsIHN0YXJ0LXVwIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHlvdQorY2FuIHByb2dyYW0gdGhpcyBpbiB0aGUgZ2xvYmFsIHN0YXJ0LXVwIGZpbGUgdXNpbmcgY29kZSBsaWtlIGBgaWYKK29zLnBhdGguaXNmaWxlKCcucHl0aG9ucmMucHknKTogZXhlYyhvcGVuKCcucHl0aG9ucmMucHknKS5yZWFkKCkpYGAuCitJZiB5b3Ugd2FudCB0byB1c2UgdGhlIHN0YXJ0dXAgZmlsZSBpbiBhIHNjcmlwdCwgeW91IG11c3QgZG8gdGhpcyBleHBsaWNpdGx5CitpbiB0aGUgc2NyaXB0OjoKKworICAgaW1wb3J0IG9zCisgICBmaWxlbmFtZSA9IG9zLmVudmlyb24uZ2V0KCdQWVRIT05TVEFSVFVQJykKKyAgIGlmIGZpbGVuYW1lIGFuZCBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6CisgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lKSBhcyBmb2JqOgorICAgICAgICAgIHN0YXJ0dXBfZmlsZSA9IGZvYmoucmVhZCgpCisgICAgICAgZXhlYyhzdGFydHVwX2ZpbGUpCisKKworLi4gX3R1dC1jdXN0b21pemU6CisKK1RoZSBDdXN0b21pemF0aW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUHl0aG9uIHByb3ZpZGVzIHR3byBob29rcyB0byBsZXQgeW91IGN1c3RvbWl6ZSBpdDogOm1vZDpgc2l0ZWN1c3RvbWl6ZWAgYW5kCis6bW9kOmB1c2VyY3VzdG9taXplYC4gIFRvIHNlZSBob3cgaXQgd29ya3MsIHlvdSBuZWVkIGZpcnN0IHRvIGZpbmQgdGhlIGxvY2F0aW9uCitvZiB5b3VyIHVzZXIgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuICBTdGFydCBQeXRob24gYW5kIHJ1biB0aGlzIGNvZGU6OgorCisgICA+Pj4gaW1wb3J0IHNpdGUKKyAgID4+PiBzaXRlLmdldHVzZXJzaXRlcGFja2FnZXMoKQorICAgJy9ob21lL3VzZXIvLmxvY2FsL2xpYi9weXRob24zLjQvc2l0ZS1wYWNrYWdlcycKKworTm93IHlvdSBjYW4gY3JlYXRlIGEgZmlsZSBuYW1lZCA6ZmlsZTpgdXNlcmN1c3RvbWl6ZS5weWAgaW4gdGhhdCBkaXJlY3RvcnkgYW5kCitwdXQgYW55dGhpbmcgeW91IHdhbnQgaW4gaXQuICBJdCB3aWxsIGFmZmVjdCBldmVyeSBpbnZvY2F0aW9uIG9mIFB5dGhvbiwgdW5sZXNzCitpdCBpcyBzdGFydGVkIHdpdGggdGhlIDpvcHRpb246YC1zYCBvcHRpb24gdG8gZGlzYWJsZSB0aGUgYXV0b21hdGljIGltcG9ydC4KKworOm1vZDpgc2l0ZWN1c3RvbWl6ZWAgd29ya3MgaW4gdGhlIHNhbWUgd2F5LCBidXQgaXMgdHlwaWNhbGx5IGNyZWF0ZWQgYnkgYW4KK2FkbWluaXN0cmF0b3Igb2YgdGhlIGNvbXB1dGVyIGluIHRoZSBnbG9iYWwgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnksIGFuZCBpcworaW1wb3J0ZWQgYmVmb3JlIDptb2Q6YHVzZXJjdXN0b21pemVgLiAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSA6bW9kOmBzaXRlYAorbW9kdWxlIGZvciBtb3JlIGRldGFpbHMuCisKKworLi4gcnVicmljOjogRm9vdG5vdGVzCisKKy4uIFsjXSBBIHByb2JsZW0gd2l0aCB0aGUgR05VIFJlYWRsaW5lIHBhY2thZ2UgbWF5IHByZXZlbnQgdGhpcy4KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdCBiL0RvYy90dXRvcmlhbC9jbGFzc2VzLnJzdAppbmRleCAwODA3MmEzLi43ZTAxNGVmIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvY2xhc3Nlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2NsYXNzZXMucnN0CkBAIC0zODcsNiArMzg3LDc3IEBACiBhcmd1bWVudCBsaXN0LgogCiAKKy4uIF90dXQtY2xhc3MtYW5kLWluc3RhbmNlLXZhcmlhYmxlczoKKworQ2xhc3MgYW5kIEluc3RhbmNlIFZhcmlhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHZW5lcmFsbHkgc3BlYWtpbmcsIGluc3RhbmNlIHZhcmlhYmxlcyBhcmUgZm9yIGRhdGEgdW5pcXVlIHRvIGVhY2ggaW5zdGFuY2UKK2FuZCBjbGFzcyB2YXJpYWJsZXMgYXJlIGZvciBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzIHNoYXJlZCBieSBhbGwgaW5zdGFuY2VzCitvZiB0aGUgY2xhc3M6OgorCisgICAgY2xhc3MgRG9nOgorCisgICAgICAgIGtpbmQgPSAnY2FuaW5lJyAgICAgICAgICMgY2xhc3MgdmFyaWFibGUgc2hhcmVkIGJ5IGFsbCBpbnN0YW5jZXMKKworICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lICAgICMgaW5zdGFuY2UgdmFyaWFibGUgdW5pcXVlIHRvIGVhY2ggaW5zdGFuY2UKKworICAgID4+PiBkID0gRG9nKCdGaWRvJykKKyAgICA+Pj4gZSA9IERvZygnQnVkZHknKQorICAgID4+PiBkLmtpbmQgICAgICAgICAgICAgICAgICAjIHNoYXJlZCBieSBhbGwgZG9ncworICAgICdjYW5pbmUnCisgICAgPj4+IGUua2luZCAgICAgICAgICAgICAgICAgICMgc2hhcmVkIGJ5IGFsbCBkb2dzCisgICAgJ2NhbmluZScKKyAgICA+Pj4gZC5uYW1lICAgICAgICAgICAgICAgICAgIyB1bmlxdWUgdG8gZAorICAgICdGaWRvJworICAgID4+PiBlLm5hbWUgICAgICAgICAgICAgICAgICAjIHVuaXF1ZSB0byBlCisgICAgJ0J1ZGR5JworCitBcyBkaXNjdXNzZWQgaW4gOnJlZjpgdHV0LW9iamVjdGAsIHNoYXJlZCBkYXRhIGNhbiBoYXZlIHBvc3NpYmx5IHN1cnByaXNpbmcKK2VmZmVjdHMgd2l0aCBpbnZvbHZpbmcgOnRlcm06YG11dGFibGVgIG9iamVjdHMgc3VjaCBhcyBsaXN0cyBhbmQgZGljdGlvbmFyaWVzLgorRm9yIGV4YW1wbGUsIHRoZSAqdHJpY2tzKiBsaXN0IGluIHRoZSBmb2xsb3dpbmcgY29kZSBzaG91bGQgbm90IGJlIHVzZWQgYXMgYQorY2xhc3MgdmFyaWFibGUgYmVjYXVzZSBqdXN0IGEgc2luZ2xlIGxpc3Qgd291bGQgYmUgc2hhcmVkIGJ5IGFsbCAqRG9nKgoraW5zdGFuY2VzOjoKKworICAgIGNsYXNzIERvZzoKKworICAgICAgICB0cmlja3MgPSBbXSAgICAgICAgICAgICAjIG1pc3Rha2VuIHVzZSBvZiBhIGNsYXNzIHZhcmlhYmxlCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgICAgIGRlZiBhZGRfdHJpY2soc2VsZiwgdHJpY2spOgorICAgICAgICAgICAgc2VsZi50cmlja3MuYXBwZW5kKHRyaWNrKQorCisgICAgPj4+IGQgPSBEb2coJ0ZpZG8nKQorICAgID4+PiBlID0gRG9nKCdCdWRkeScpCisgICAgPj4+IGQuYWRkX3RyaWNrKCdyb2xsIG92ZXInKQorICAgID4+PiBlLmFkZF90cmljaygncGxheSBkZWFkJykKKyAgICA+Pj4gZC50cmlja3MgICAgICAgICAgICAgICAgIyB1bmV4cGVjdGVkbHkgc2hhcmVkIGJ5IGFsbCBkb2dzCisgICAgWydyb2xsIG92ZXInLCAncGxheSBkZWFkJ10KKworQ29ycmVjdCBkZXNpZ24gb2YgdGhlIGNsYXNzIHNob3VsZCB1c2UgYW4gaW5zdGFuY2UgdmFyaWFibGUgaW5zdGVhZDo6CisKKyAgICBjbGFzcyBEb2c6CisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICAgICAgc2VsZi50cmlja3MgPSBbXSAgICAjIGNyZWF0ZXMgYSBuZXcgZW1wdHkgbGlzdCBmb3IgZWFjaCBkb2cKKworICAgICAgICBkZWYgYWRkX3RyaWNrKHNlbGYsIHRyaWNrKToKKyAgICAgICAgICAgIHNlbGYudHJpY2tzLmFwcGVuZCh0cmljaykKKworICAgID4+PiBkID0gRG9nKCdGaWRvJykKKyAgICA+Pj4gZSA9IERvZygnQnVkZHknKQorICAgID4+PiBkLmFkZF90cmljaygncm9sbCBvdmVyJykKKyAgICA+Pj4gZS5hZGRfdHJpY2soJ3BsYXkgZGVhZCcpCisgICAgPj4+IGQudHJpY2tzCisgICAgWydyb2xsIG92ZXInXQorICAgID4+PiBlLnRyaWNrcworICAgIFsncGxheSBkZWFkJ10KKworCiAuLiBfdHV0LXJlbWFya3M6CiAKIFJhbmRvbSBSZW1hcmtzCkBAIC01NzIsNyArNjQzLDcgQEAKIGNsYXNzIGNhbiBiZSBzdWJjbGFzc2VkIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBwcmVjZWRlbmNlIG9yZGVyIG9mIGl0cyBwYXJlbnRzKS4KIFRha2VuIHRvZ2V0aGVyLCB0aGVzZSBwcm9wZXJ0aWVzIG1ha2UgaXQgcG9zc2libGUgdG8gZGVzaWduIHJlbGlhYmxlIGFuZAogZXh0ZW5zaWJsZSBjbGFzc2VzIHdpdGggbXVsdGlwbGUgaW5oZXJpdGFuY2UuICBGb3IgbW9yZSBkZXRhaWwsIHNlZQotaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLgoraHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy4KIAogCiAuLiBfdHV0LXByaXZhdGU6CkBAIC03MzEsNyArODAyLDcgQEAKICAgIGZvciBjaGFyIGluICIxMjMiOgogICAgICAgIHByaW50KGNoYXIpCiAgICBmb3IgbGluZSBpbiBvcGVuKCJteWZpbGUudHh0Iik6Ci0gICAgICAgcHJpbnQobGluZSkKKyAgICAgICBwcmludChsaW5lLCBlbmQ9JycpCiAKIFRoaXMgc3R5bGUgb2YgYWNjZXNzIGlzIGNsZWFyLCBjb25jaXNlLCBhbmQgY29udmVuaWVudC4gIFRoZSB1c2Ugb2YgaXRlcmF0b3JzCiBwZXJ2YWRlcyBhbmQgdW5pZmllcyBQeXRob24uICBCZWhpbmQgdGhlIHNjZW5lcywgdGhlIDprZXl3b3JkOmBmb3JgIHN0YXRlbWVudApAQCAtNzk4LDcgKzg2OSw3IEBACiA6dGVybTpgR2VuZXJhdG9yYFxzIGFyZSBhIHNpbXBsZSBhbmQgcG93ZXJmdWwgdG9vbCBmb3IgY3JlYXRpbmcgaXRlcmF0b3JzLiAgVGhleQogYXJlIHdyaXR0ZW4gbGlrZSByZWd1bGFyIGZ1bmN0aW9ucyBidXQgdXNlIHRoZSA6a2V5d29yZDpgeWllbGRgIHN0YXRlbWVudAogd2hlbmV2ZXIgdGhleSB3YW50IHRvIHJldHVybiBkYXRhLiAgRWFjaCB0aW1lIDpmdW5jOmBuZXh0YCBpcyBjYWxsZWQgb24gaXQsIHRoZQotZ2VuZXJhdG9yIHJlc3VtZXMgd2hlcmUgaXQgbGVmdC1vZmYgKGl0IHJlbWVtYmVycyBhbGwgdGhlIGRhdGEgdmFsdWVzIGFuZCB3aGljaAorZ2VuZXJhdG9yIHJlc3VtZXMgd2hlcmUgaXQgbGVmdCBvZmYgKGl0IHJlbWVtYmVycyBhbGwgdGhlIGRhdGEgdmFsdWVzIGFuZCB3aGljaAogc3RhdGVtZW50IHdhcyBsYXN0IGV4ZWN1dGVkKS4gIEFuIGV4YW1wbGUgc2hvd3MgdGhhdCBnZW5lcmF0b3JzIGNhbiBiZSB0cml2aWFsbHkKIGVhc3kgdG8gY3JlYXRlOjoKIApAQCAtODE2LDcgKzg4Nyw3IEBACiAgICBvCiAgICBnCiAKLUFueXRoaW5nIHRoYXQgY2FuIGJlIGRvbmUgd2l0aCBnZW5lcmF0b3JzIGNhbiBhbHNvIGJlIGRvbmUgd2l0aCBjbGFzcyBiYXNlZAorQW55dGhpbmcgdGhhdCBjYW4gYmUgZG9uZSB3aXRoIGdlbmVyYXRvcnMgY2FuIGFsc28gYmUgZG9uZSB3aXRoIGNsYXNzLWJhc2VkCiBpdGVyYXRvcnMgYXMgZGVzY3JpYmVkIGluIHRoZSBwcmV2aW91cyBzZWN0aW9uLiAgV2hhdCBtYWtlcyBnZW5lcmF0b3JzIHNvCiBjb21wYWN0IGlzIHRoYXQgdGhlIDptZXRoOmBfX2l0ZXJfX2AgYW5kIDptZXRoOmB+Z2VuZXJhdG9yLl9fbmV4dF9fYCBtZXRob2RzCiBhcmUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5LgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2NvbnRyb2xmbG93LnJzdCBiL0RvYy90dXRvcmlhbC9jb250cm9sZmxvdy5yc3QKaW5kZXggOTdhZWE0Zi4uODEzYzgyOCAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL2NvbnRyb2xmbG93LnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvY29udHJvbGZsb3cucnN0CkBAIC0zNzAsNyArMzcwLDcgQEAKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICByZXRyaWVzID0gcmV0cmllcyAtIDEKICAgICAgICAgICAgaWYgcmV0cmllcyA8IDA6Ci0gICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCd1bmNvb3BlcmF0aXZlIHVzZXInKQorICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigndW5jb29wZXJhdGl2ZSB1c2VyJykKICAgICAgICAgICAgcHJpbnQoY29tcGxhaW50KQogCiBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgaW4gc2V2ZXJhbCB3YXlzOgpAQCAtNjczLDExICs2NzMsOSBAQAogICAgcGFpcjogZnVuY3Rpb247IGFubm90YXRpb25zCiAgICBzaW5nbGU6IC0+IChyZXR1cm4gYW5ub3RhdGlvbiBhc3NpZ25tZW50KQogCi06cmVmOmBGdW5jdGlvbiBhbm5vdGF0aW9ucyA8ZnVuY3Rpb24+YCBhcmUgY29tcGxldGVseSBvcHRpb25hbCwKLWFyYml0cmFyeSBtZXRhZGF0YSBpbmZvcm1hdGlvbiBhYm91dCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiAgTmVpdGhlciBQeXRob24KLWl0c2VsZiBub3IgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdXNlIGZ1bmN0aW9uIGFubm90YXRpb25zIGluIGFueSB3YXk7IHRoaXMKLXNlY3Rpb24ganVzdCBzaG93cyB0aGUgc3ludGF4LiBUaGlyZC1wYXJ0eSBwcm9qZWN0cyBhcmUgZnJlZSB0byB1c2UgZnVuY3Rpb24KLWFubm90YXRpb25zIGZvciBkb2N1bWVudGF0aW9uLCB0eXBlIGNoZWNraW5nLCBhbmQgb3RoZXIgdXNlcy4KKzpyZWY6YEZ1bmN0aW9uIGFubm90YXRpb25zIDxmdW5jdGlvbj5gIGFyZSBjb21wbGV0ZWx5IG9wdGlvbmFsIG1ldGFkYXRhCitpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHlwZXMgdXNlZCBieSB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIChzZWUgOnBlcDpgNDg0YAorZm9yIG1vcmUgaW5mb3JtYXRpb24pLgogCiBBbm5vdGF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSA6YXR0cjpgX19hbm5vdGF0aW9uc19fYCBhdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uCiBhcyBhIGRpY3Rpb25hcnkgYW5kIGhhdmUgbm8gZWZmZWN0IG9uIGFueSBvdGhlciBwYXJ0IG9mIHRoZSBmdW5jdGlvbi4gIFBhcmFtZXRlcgpAQCAtNjg2LDE2ICs2ODQsMTcgQEAKIGRlZmluZWQgYnkgYSBsaXRlcmFsIGBgLT5gYCwgZm9sbG93ZWQgYnkgYW4gZXhwcmVzc2lvbiwgYmV0d2VlbiB0aGUgcGFyYW1ldGVyCiBsaXN0IGFuZCB0aGUgY29sb24gZGVub3RpbmcgdGhlIGVuZCBvZiB0aGUgOmtleXdvcmQ6YGRlZmAgc3RhdGVtZW50LiAgVGhlCiBmb2xsb3dpbmcgZXhhbXBsZSBoYXMgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBhIGtleXdvcmQgYXJndW1lbnQsIGFuZCB0aGUgcmV0dXJuCi12YWx1ZSBhbm5vdGF0ZWQgd2l0aCBub25zZW5zZTo6Cit2YWx1ZSBhbm5vdGF0ZWQ6OgogCi0gICA+Pj4gZGVmIGYoaGFtOiA0MiwgZWdnczogaW50ID0gJ3NwYW0nKSAtPiAiTm90aGluZyB0byBzZWUgaGVyZSI6CisgICA+Pj4gZGVmIGYoaGFtOiBzdHIsIGVnZ3M6IHN0ciA9ICdlZ2dzJykgLT4gc3RyOgogICAgLi4uICAgICBwcmludCgiQW5ub3RhdGlvbnM6IiwgZi5fX2Fubm90YXRpb25zX18pCiAgICAuLi4gICAgIHByaW50KCJBcmd1bWVudHM6IiwgaGFtLCBlZ2dzKQorICAgLi4uICAgICByZXR1cm4gaGFtICsgJyBhbmQgJyArIGVnZ3MKICAgIC4uLgotICAgPj4+IGYoJ3dvbmRlcmZ1bCcpCi0gICBBbm5vdGF0aW9uczogeydlZ2dzJzogPGNsYXNzICdpbnQnPiwgJ3JldHVybic6ICdOb3RoaW5nIHRvIHNlZSBoZXJlJywgJ2hhbSc6IDQyfQotICAgQXJndW1lbnRzOiB3b25kZXJmdWwgc3BhbQotCisgICA+Pj4gZignc3BhbScpCisgICBBbm5vdGF0aW9uczogeydoYW0nOiA8Y2xhc3MgJ3N0cic+LCAncmV0dXJuJzogPGNsYXNzICdzdHInPiwgJ2VnZ3MnOiA8Y2xhc3MgJ3N0cic+fQorICAgQXJndW1lbnRzOiBzcGFtIGVnZ3MKKyAgICdzcGFtIGFuZCBlZ2dzJwogCiAuLiBfdHV0LWNvZGluZ3N0eWxlOgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0IGIvRG9jL3R1dG9yaWFsL2RhdGFzdHJ1Y3R1cmVzLnJzdAppbmRleCAyNGQyZDJlLi4xZWEyOTlmIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvZGF0YXN0cnVjdHVyZXMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9kYXRhc3RydWN0dXJlcy5yc3QKQEAgLTExMSwxMCArMTExLDE1IEBACiAgICA+Pj4gYS5zb3J0KCkKICAgID4+PiBhCiAgICBbLTEsIDEsIDY2LjI1LCAzMzMsIDMzMywgMTIzNC41XQorICAgPj4+IGEucG9wKCkKKyAgIDEyMzQuNQorICAgPj4+IGEKKyAgIFstMSwgMSwgNjYuMjUsIDMzMywgMzMzXQogCiBZb3UgbWlnaHQgaGF2ZSBub3RpY2VkIHRoYXQgbWV0aG9kcyBsaWtlIGBgaW5zZXJ0YGAsIGBgcmVtb3ZlYGAgb3IgYGBzb3J0YGAgdGhhdAotbW9kaWZ5IHRoZSBsaXN0IGhhdmUgbm8gcmV0dXJuIHZhbHVlIHByaW50ZWQgLS0gdGhleSByZXR1cm4gYGBOb25lYGAuIFsxXV8gIFRoaXMKLWlzIGEgZGVzaWduIHByaW5jaXBsZSBmb3IgYWxsIG11dGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGluIFB5dGhvbi4KK29ubHkgbW9kaWZ5IHRoZSBsaXN0IGhhdmUgbm8gcmV0dXJuIHZhbHVlIHByaW50ZWQgLS0gdGhleSByZXR1cm4gdGhlIGRlZmF1bHQKK2BgTm9uZWBgLiBbMV1fICBUaGlzIGlzIGEgZGVzaWduIHByaW5jaXBsZSBmb3IgYWxsIG11dGFibGUgZGF0YSBzdHJ1Y3R1cmVzIGluCitQeXRob24uCiAKIAogLi4gX3R1dC1saXN0cy1hcy1zdGFja3M6CkBAIC0xOTQsMTIgKzE5OSwxNyBAQAogICAgPj4+IHNxdWFyZXMKICAgIFswLCAxLCA0LCA5LCAxNiwgMjUsIDM2LCA0OSwgNjQsIDgxXQogCi1XZSBjYW4gb2J0YWluIHRoZSBzYW1lIHJlc3VsdCB3aXRoOjoKK05vdGUgdGhhdCB0aGlzIGNyZWF0ZXMgKG9yIG92ZXJ3cml0ZXMpIGEgdmFyaWFibGUgbmFtZWQgYGB4YGAgdGhhdCBzdGlsbCBleGlzdHMKK2FmdGVyIHRoZSBsb29wIGNvbXBsZXRlcy4gIFdlIGNhbiBjYWxjdWxhdGUgdGhlIGxpc3Qgb2Ygc3F1YXJlcyB3aXRob3V0IGFueQorc2lkZSBlZmZlY3RzIHVzaW5nOjoKKworICAgc3F1YXJlcyA9IGxpc3QobWFwKGxhbWJkYSB4OiB4KioyLCByYW5nZSgxMCkpKQorCitvciwgZXF1aXZhbGVudGx5OjoKIAogICAgc3F1YXJlcyA9IFt4KioyIGZvciB4IGluIHJhbmdlKDEwKV0KIAotVGhpcyBpcyBhbHNvIGVxdWl2YWxlbnQgdG8gYGBzcXVhcmVzID0gbGlzdChtYXAobGFtYmRhIHg6IHgqKjIsIHJhbmdlKDEwKSkpYGAsCi1idXQgaXQncyBtb3JlIGNvbmNpc2UgYW5kIHJlYWRhYmxlLgord2hpY2ggaXMgbW9yZSBjb25jaXNlIGFuZCByZWFkYWJsZS4KIAogQSBsaXN0IGNvbXByZWhlbnNpb24gY29uc2lzdHMgb2YgYnJhY2tldHMgY29udGFpbmluZyBhbiBleHByZXNzaW9uIGZvbGxvd2VkCiBieSBhIDprZXl3b3JkOmBmb3JgIGNsYXVzZSwgdGhlbiB6ZXJvIG9yIG1vcmUgOmtleXdvcmQ6YGZvcmAgb3IgOmtleXdvcmQ6YGlmYApAQCAtNjc0LDcgKzY4NCw3IEBACiBhbGwgaXRlbXMgb2YgdHdvIHNlcXVlbmNlcyBjb21wYXJlIGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBjb25zaWRlcmVkIGVxdWFsLgogSWYgb25lIHNlcXVlbmNlIGlzIGFuIGluaXRpYWwgc3ViLXNlcXVlbmNlIG9mIHRoZSBvdGhlciwgdGhlIHNob3J0ZXIgc2VxdWVuY2UgaXMKIHRoZSBzbWFsbGVyIChsZXNzZXIpIG9uZS4gIExleGljb2dyYXBoaWNhbCBvcmRlcmluZyBmb3Igc3RyaW5ncyB1c2VzIHRoZSBVbmljb2RlCi1jb2RlcG9pbnQgbnVtYmVyIHRvIG9yZGVyIGluZGl2aWR1YWwgY2hhcmFjdGVycy4gIFNvbWUgZXhhbXBsZXMgb2YgY29tcGFyaXNvbnMKK2NvZGUgcG9pbnQgbnVtYmVyIHRvIG9yZGVyIGluZGl2aWR1YWwgY2hhcmFjdGVycy4gIFNvbWUgZXhhbXBsZXMgb2YgY29tcGFyaXNvbnMKIGJldHdlZW4gc2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGU6OgogCiAgICAoMSwgMiwgMykgICAgICAgICAgICAgIDwgKDEsIDIsIDQpCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvZXJyb3JzLnJzdCBiL0RvYy90dXRvcmlhbC9lcnJvcnMucnN0CmluZGV4IDQyODIxNTEuLjM1MWVlNTIgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9lcnJvcnMucnN0CisrKyBiL0RvYy90dXRvcmlhbC9lcnJvcnMucnN0CkBAIC0xMzEsOCArMTMxLDggQEAKICAgICAgICBmID0gb3BlbignbXlmaWxlLnR4dCcpCiAgICAgICAgcyA9IGYucmVhZGxpbmUoKQogICAgICAgIGkgPSBpbnQocy5zdHJpcCgpKQotICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgotICAgICAgIHByaW50KCJJL08gZXJyb3I6IHswfSIuZm9ybWF0KGVycikpCisgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CisgICAgICAgcHJpbnQoIk9TIGVycm9yOiB7MH0iLmZvcm1hdChlcnIpKQogICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBjb252ZXJ0IGRhdGEgdG8gYW4gaW50ZWdlci4iKQogICAgZXhjZXB0OgpAQCAtMzM2LDcgKzMzNiw3IEBACiBBICpmaW5hbGx5IGNsYXVzZSogaXMgYWx3YXlzIGV4ZWN1dGVkIGJlZm9yZSBsZWF2aW5nIHRoZSA6a2V5d29yZDpgdHJ5YAogc3RhdGVtZW50LCB3aGV0aGVyIGFuIGV4Y2VwdGlvbiBoYXMgb2NjdXJyZWQgb3Igbm90LiBXaGVuIGFuIGV4Y2VwdGlvbiBoYXMKIG9jY3VycmVkIGluIHRoZSA6a2V5d29yZDpgdHJ5YCBjbGF1c2UgYW5kIGhhcyBub3QgYmVlbiBoYW5kbGVkIGJ5IGFuCi06a2V5d29yZDpgZXhjZXB0YCBjbGF1c2UgKG9yIGl0IGhhcyBvY2N1cnJlZCBpbiBhIDprZXl3b3JkOmBleGNlcHRgIG9yCis6a2V5d29yZDpgZXhjZXB0YCBjbGF1c2UgKG9yIGl0IGhhcyBvY2N1cnJlZCBpbiBhbiA6a2V5d29yZDpgZXhjZXB0YCBvcgogOmtleXdvcmQ6YGVsc2VgIGNsYXVzZSksIGl0IGlzIHJlLXJhaXNlZCBhZnRlciB0aGUgOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZSBoYXMKIGJlZW4gZXhlY3V0ZWQuICBUaGUgOmtleXdvcmQ6YGZpbmFsbHlgIGNsYXVzZSBpcyBhbHNvIGV4ZWN1dGVkICJvbiB0aGUgd2F5IG91dCIKIHdoZW4gYW55IG90aGVyIGNsYXVzZSBvZiB0aGUgOmtleXdvcmQ6YHRyeWAgc3RhdGVtZW50IGlzIGxlZnQgdmlhIGEKZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9pbmRleC5yc3QgYi9Eb2MvdHV0b3JpYWwvaW5kZXgucnN0CmluZGV4IDYwNGNmZjguLjhlZTAxMWUgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9pbmRleC5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2luZGV4LnJzdApAQCAtMTIsNyArMTIsNyBAQAogCiBUaGUgUHl0aG9uIGludGVycHJldGVyIGFuZCB0aGUgZXh0ZW5zaXZlIHN0YW5kYXJkIGxpYnJhcnkgYXJlIGZyZWVseSBhdmFpbGFibGUKIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBmb3IgYWxsIG1ham9yIHBsYXRmb3JtcyBmcm9tIHRoZSBQeXRob24gV2ViIHNpdGUsCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvLCBhbmQgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZC4gVGhlIHNhbWUgc2l0ZSBhbHNvCitodHRwczovL3d3dy5weXRob24ub3JnLywgYW5kIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQuIFRoZSBzYW1lIHNpdGUgYWxzbwogY29udGFpbnMgZGlzdHJpYnV0aW9ucyBvZiBhbmQgcG9pbnRlcnMgdG8gbWFueSBmcmVlIHRoaXJkIHBhcnR5IFB5dGhvbiBtb2R1bGVzLAogcHJvZ3JhbXMgYW5kIHRvb2xzLCBhbmQgYWRkaXRpb25hbCBkb2N1bWVudGF0aW9uLgogCkBAIC01Myw2ICs1Myw4IEBACiAgICBjbGFzc2VzLnJzdAogICAgc3RkbGliLnJzdAogICAgc3RkbGliMi5yc3QKKyAgIHZlbnYucnN0CiAgICB3aGF0bm93LnJzdAogICAgaW50ZXJhY3RpdmUucnN0CiAgICBmbG9hdGluZ3BvaW50LnJzdAorICAgYXBwZW5kaXgucnN0CmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvaW5wdXRvdXRwdXQucnN0IGIvRG9jL3R1dG9yaWFsL2lucHV0b3V0cHV0LnJzdAppbmRleCBiM2JmMGVmLi5jMTU3ZjIyIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW5wdXRvdXRwdXQucnN0CisrKyBiL0RvYy90dXRvcmlhbC9pbnB1dG91dHB1dC5yc3QKQEAgLTI0Nyw4ICsyNDcsOSBAQAogb21pdHRlZC4KIAogTm9ybWFsbHksIGZpbGVzIGFyZSBvcGVuZWQgaW4gOmRmbjpgdGV4dCBtb2RlYCwgdGhhdCBtZWFucywgeW91IHJlYWQgYW5kIHdyaXRlCi1zdHJpbmdzIGZyb20gYW5kIHRvIHRoZSBmaWxlLCB3aGljaCBhcmUgZW5jb2RlZCBpbiBhIHNwZWNpZmljIGVuY29kaW5nICh0aGUKLWRlZmF1bHQgYmVpbmcgVVRGLTgpLiAgYGAnYidgYCBhcHBlbmRlZCB0byB0aGUgbW9kZSBvcGVucyB0aGUgZmlsZSBpbgorc3RyaW5ncyBmcm9tIGFuZCB0byB0aGUgZmlsZSwgd2hpY2ggYXJlIGVuY29kZWQgaW4gYSBzcGVjaWZpYyBlbmNvZGluZy4gSWYKK2VuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IGlzIHBsYXRmb3JtIGRlcGVuZGVudCAoc2VlCis6ZnVuYzpgb3BlbmApLiBgYCdiJ2BgIGFwcGVuZGVkIHRvIHRoZSBtb2RlIG9wZW5zIHRoZSBmaWxlIGluCiA6ZGZuOmBiaW5hcnkgbW9kZWA6IG5vdyB0aGUgZGF0YSBpcyByZWFkIGFuZCB3cml0dGVuIGluIHRoZSBmb3JtIG9mIGJ5dGVzCiBvYmplY3RzLiAgVGhpcyBtb2RlIHNob3VsZCBiZSB1c2VkIGZvciBhbGwgZmlsZXMgdGhhdCBkb24ndCBjb250YWluIHRleHQuCiAKQEAgLTMyMyw4ICszMjQsOCBAQAogICAgMTgKIAogYGBmLnRlbGwoKWBgIHJldHVybnMgYW4gaW50ZWdlciBnaXZpbmcgdGhlIGZpbGUgb2JqZWN0J3MgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZmlsZQotcmVwcmVzZW50ZWQgYXMgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB3aGVuIGluIGBiaW5hcnkgbW9kZWAgYW5kCi1hbiBvcGFxdWUgbnVtYmVyIHdoZW4gaW4gYHRleHQgbW9kZWAuCityZXByZXNlbnRlZCBhcyBudW1iZXIgb2YgYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHdoZW4gaW4gYmluYXJ5IG1vZGUgYW5kCithbiBvcGFxdWUgbnVtYmVyIHdoZW4gaW4gdGV4dCBtb2RlLgogCiBUbyBjaGFuZ2UgdGhlIGZpbGUgb2JqZWN0J3MgcG9zaXRpb24sIHVzZSBgYGYuc2VlayhvZmZzZXQsIGZyb21fd2hhdClgYC4gIFRoZSBwb3NpdGlvbiBpcyBjb21wdXRlZAogZnJvbSBhZGRpbmcgKm9mZnNldCogdG8gYSByZWZlcmVuY2UgcG9pbnQ7IHRoZSByZWZlcmVuY2UgcG9pbnQgaXMgc2VsZWN0ZWQgYnkKQEAgLTQzNyw0ICs0MzgsMyBAQAogICAgd3JpdHRlbiBpbiBvdGhlciBsYW5ndWFnZXMuICBJdCBpcyBhbHNvIGluc2VjdXJlIGJ5IGRlZmF1bHQ6CiAgICBkZXNlcmlhbGl6aW5nIHBpY2tsZSBkYXRhIGNvbWluZyBmcm9tIGFuIHVudHJ1c3RlZCBzb3VyY2UgY2FuIGV4ZWN1dGUKICAgIGFyYml0cmFyeSBjb2RlLCBpZiB0aGUgZGF0YSB3YXMgY3JhZnRlZCBieSBhIHNraWxsZWQgYXR0YWNrZXIuCi0KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QgYi9Eb2MvdHV0b3JpYWwvaW50ZXJhY3RpdmUucnN0CmluZGV4IDM2YWNiMDYuLmFiZjMwZjAgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9pbnRlcmFjdGl2ZS5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2ludGVyYWN0aXZlLnJzdApAQCAtNywxNDAgKzcsMjcgQEAKIFNvbWUgdmVyc2lvbnMgb2YgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBzdXBwb3J0IGVkaXRpbmcgb2YgdGhlIGN1cnJlbnQgaW5wdXQKIGxpbmUgYW5kIGhpc3Rvcnkgc3Vic3RpdHV0aW9uLCBzaW1pbGFyIHRvIGZhY2lsaXRpZXMgZm91bmQgaW4gdGhlIEtvcm4gc2hlbGwgYW5kCiB0aGUgR05VIEJhc2ggc2hlbGwuICBUaGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIHRoZSBgR05VIFJlYWRsaW5lYF8gbGlicmFyeSwKLXdoaWNoIHN1cHBvcnRzIEVtYWNzLXN0eWxlIGFuZCB2aS1zdHlsZSBlZGl0aW5nLiAgVGhpcyBsaWJyYXJ5IGhhcyBpdHMgb3duCi1kb2N1bWVudGF0aW9uIHdoaWNoIEkgd29uJ3QgZHVwbGljYXRlIGhlcmU7IGhvd2V2ZXIsIHRoZSBiYXNpY3MgYXJlIGVhc2lseQotZXhwbGFpbmVkLiAgVGhlIGludGVyYWN0aXZlIGVkaXRpbmcgYW5kIGhpc3RvcnkgZGVzY3JpYmVkIGhlcmUgYXJlIG9wdGlvbmFsbHkKLWF2YWlsYWJsZSBpbiB0aGUgVW5peCBhbmQgQ3lnd2luIHZlcnNpb25zIG9mIHRoZSBpbnRlcnByZXRlci4KLQotVGhpcyBjaGFwdGVyIGRvZXMgKm5vdCogZG9jdW1lbnQgdGhlIGVkaXRpbmcgZmFjaWxpdGllcyBvZiBNYXJrIEhhbW1vbmQncwotUHl0aG9uV2luIHBhY2thZ2Ugb3IgdGhlIFRrLWJhc2VkIGVudmlyb25tZW50LCBJRExFLCBkaXN0cmlidXRlZCB3aXRoIFB5dGhvbi4KLVRoZSBjb21tYW5kIGxpbmUgaGlzdG9yeSByZWNhbGwgd2hpY2ggb3BlcmF0ZXMgd2l0aGluIERPUyBib3hlcyBvbiBOVCBhbmQgc29tZQotb3RoZXIgRE9TIGFuZCBXaW5kb3dzIGZsYXZvcnMgIGlzIHlldCBhbm90aGVyIGJlYXN0LgotCi0KLS4uIF90dXQtbGluZWVkaXRpbmc6Ci0KLUxpbmUgRWRpdGluZwotPT09PT09PT09PT09Ci0KLUlmIHN1cHBvcnRlZCwgaW5wdXQgbGluZSBlZGl0aW5nIGlzIGFjdGl2ZSB3aGVuZXZlciB0aGUgaW50ZXJwcmV0ZXIgcHJpbnRzIGEKLXByaW1hcnkgb3Igc2Vjb25kYXJ5IHByb21wdC4gIFRoZSBjdXJyZW50IGxpbmUgY2FuIGJlIGVkaXRlZCB1c2luZyB0aGUKLWNvbnZlbnRpb25hbCBFbWFjcyBjb250cm9sIGNoYXJhY3RlcnMuICBUaGUgbW9zdCBpbXBvcnRhbnQgb2YgdGhlc2UgYXJlOgotOmtiZDpgQy1BYCAoQ29udHJvbC1BKSBtb3ZlcyB0aGUgY3Vyc29yIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmUsIDprYmQ6YEMtRWAKLXRvIHRoZSBlbmQsIDprYmQ6YEMtQmAgbW92ZXMgaXQgb25lIHBvc2l0aW9uIHRvIHRoZSBsZWZ0LCA6a2JkOmBDLUZgIHRvIHRoZQotcmlnaHQuICBCYWNrc3BhY2UgZXJhc2VzIHRoZSBjaGFyYWN0ZXIgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnNvciwgOmtiZDpgQy1EYCB0aGUKLWNoYXJhY3RlciB0byBpdHMgcmlnaHQuIDprYmQ6YEMtS2Aga2lsbHMgKGVyYXNlcykgdGhlIHJlc3Qgb2YgdGhlIGxpbmUgdG8gdGhlCi1yaWdodCBvZiB0aGUgY3Vyc29yLCA6a2JkOmBDLVlgIHlhbmtzIGJhY2sgdGhlIGxhc3Qga2lsbGVkIHN0cmluZy4KLTprYmQ6YEMtdW5kZXJzY29yZWAgdW5kb2VzIHRoZSBsYXN0IGNoYW5nZSB5b3UgbWFkZTsgaXQgY2FuIGJlIHJlcGVhdGVkIGZvcgotY3VtdWxhdGl2ZSBlZmZlY3QuCi0KLQotLi4gX3R1dC1oaXN0b3J5OgotCi1IaXN0b3J5IFN1YnN0aXR1dGlvbgotPT09PT09PT09PT09PT09PT09PT0KLQotSGlzdG9yeSBzdWJzdGl0dXRpb24gd29ya3MgYXMgZm9sbG93cy4gIEFsbCBub24tZW1wdHkgaW5wdXQgbGluZXMgaXNzdWVkIGFyZQotc2F2ZWQgaW4gYSBoaXN0b3J5IGJ1ZmZlciwgYW5kIHdoZW4gYSBuZXcgcHJvbXB0IGlzIGdpdmVuIHlvdSBhcmUgcG9zaXRpb25lZCBvbgotYSBuZXcgbGluZSBhdCB0aGUgYm90dG9tIG9mIHRoaXMgYnVmZmVyLiA6a2JkOmBDLVBgIG1vdmVzIG9uZSBsaW5lIHVwIChiYWNrKSBpbgotdGhlIGhpc3RvcnkgYnVmZmVyLCA6a2JkOmBDLU5gIG1vdmVzIG9uZSBkb3duLiAgQW55IGxpbmUgaW4gdGhlIGhpc3RvcnkgYnVmZmVyCi1jYW4gYmUgZWRpdGVkOyBhbiBhc3RlcmlzayBhcHBlYXJzIGluIGZyb250IG9mIHRoZSBwcm9tcHQgdG8gbWFyayBhIGxpbmUgYXMKLW1vZGlmaWVkLiAgUHJlc3NpbmcgdGhlIDprYmQ6YFJldHVybmAga2V5IHBhc3NlcyB0aGUgY3VycmVudCBsaW5lIHRvIHRoZQotaW50ZXJwcmV0ZXIuICA6a2JkOmBDLVJgIHN0YXJ0cyBhbiBpbmNyZW1lbnRhbCByZXZlcnNlIHNlYXJjaDsgOmtiZDpgQy1TYCBzdGFydHMKLWEgZm9yd2FyZCBzZWFyY2guCit3aGljaCBzdXBwb3J0cyB2YXJpb3VzIHN0eWxlcyBvZiBlZGl0aW5nLiAgVGhpcyBsaWJyYXJ5IGhhcyBpdHMgb3duCitkb2N1bWVudGF0aW9uIHdoaWNoIHdlIHdvbid0IGR1cGxpY2F0ZSBoZXJlLgogCiAKIC4uIF90dXQta2V5YmluZGluZ3M6CiAKLUtleSBCaW5kaW5ncwotPT09PT09PT09PT09CitUYWIgQ29tcGxldGlvbiBhbmQgSGlzdG9yeSBFZGl0aW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBrZXkgYmluZGluZ3MgYW5kIHNvbWUgb3RoZXIgcGFyYW1ldGVycyBvZiB0aGUgUmVhZGxpbmUgbGlicmFyeSBjYW4gYmUKLWN1c3RvbWl6ZWQgYnkgcGxhY2luZyBjb21tYW5kcyBpbiBhbiBpbml0aWFsaXphdGlvbiBmaWxlIGNhbGxlZAotOmZpbGU6YH4vLmlucHV0cmNgLiAgS2V5IGJpbmRpbmdzIGhhdmUgdGhlIGZvcm0gOjoKLQotICAga2V5LW5hbWU6IGZ1bmN0aW9uLW5hbWUKLQotb3IgOjoKLQotICAgInN0cmluZyI6IGZ1bmN0aW9uLW5hbWUKLQotYW5kIG9wdGlvbnMgY2FuIGJlIHNldCB3aXRoIDo6Ci0KLSAgIHNldCBvcHRpb24tbmFtZSB2YWx1ZQotCi1Gb3IgZXhhbXBsZTo6Ci0KLSAgICMgSSBwcmVmZXIgdmktc3R5bGUgZWRpdGluZzoKLSAgIHNldCBlZGl0aW5nLW1vZGUgdmkKLQotICAgIyBFZGl0IHVzaW5nIGEgc2luZ2xlIGxpbmU6Ci0gICBzZXQgaG9yaXpvbnRhbC1zY3JvbGwtbW9kZSBPbgotCi0gICAjIFJlYmluZCBzb21lIGtleXM6Ci0gICBNZXRhLWg6IGJhY2t3YXJkLWtpbGwtd29yZAotICAgIlxDLXUiOiB1bml2ZXJzYWwtYXJndW1lbnQKLSAgICJcQy14XEMtciI6IHJlLXJlYWQtaW5pdC1maWxlCi0KLU5vdGUgdGhhdCB0aGUgZGVmYXVsdCBiaW5kaW5nIGZvciA6a2JkOmBUYWJgIGluIFB5dGhvbiBpcyB0byBpbnNlcnQgYSA6a2JkOmBUYWJgCi1jaGFyYWN0ZXIgaW5zdGVhZCBvZiBSZWFkbGluZSdzIGRlZmF1bHQgZmlsZW5hbWUgY29tcGxldGlvbiBmdW5jdGlvbi4gIElmIHlvdQotaW5zaXN0LCB5b3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgcHV0dGluZyA6OgotCi0gICBUYWI6IGNvbXBsZXRlCi0KLWluIHlvdXIgOmZpbGU6YH4vLmlucHV0cmNgLiAgKE9mIGNvdXJzZSwgdGhpcyBtYWtlcyBpdCBoYXJkZXIgdG8gdHlwZSBpbmRlbnRlZAotY29udGludWF0aW9uIGxpbmVzIGlmIHlvdSdyZSBhY2N1c3RvbWVkIHRvIHVzaW5nIDprYmQ6YFRhYmAgZm9yIHRoYXQgcHVycG9zZS4pCi0KLS4uIGluZGV4OjoKLSAgIG1vZHVsZTogcmxjb21wbGV0ZXIKLSAgIG1vZHVsZTogcmVhZGxpbmUKLQotQXV0b21hdGljIGNvbXBsZXRpb24gb2YgdmFyaWFibGUgYW5kIG1vZHVsZSBuYW1lcyBpcyBvcHRpb25hbGx5IGF2YWlsYWJsZS4gIFRvCi1lbmFibGUgaXQgaW4gdGhlIGludGVycHJldGVyJ3MgaW50ZXJhY3RpdmUgbW9kZSwgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91cgotc3RhcnR1cCBmaWxlOiBbI11fICA6OgotCi0gICBpbXBvcnQgcmxjb21wbGV0ZXIsIHJlYWRsaW5lCi0gICByZWFkbGluZS5wYXJzZV9hbmRfYmluZCgndGFiOiBjb21wbGV0ZScpCi0KLVRoaXMgYmluZHMgdGhlIDprYmQ6YFRhYmAga2V5IHRvIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uLCBzbyBoaXR0aW5nIHRoZQotOmtiZDpgVGFiYCBrZXkgdHdpY2Ugc3VnZ2VzdHMgY29tcGxldGlvbnM7IGl0IGxvb2tzIGF0IFB5dGhvbiBzdGF0ZW1lbnQgbmFtZXMsCi10aGUgY3VycmVudCBsb2NhbCB2YXJpYWJsZXMsIGFuZCB0aGUgYXZhaWxhYmxlIG1vZHVsZSBuYW1lcy4gIEZvciBkb3R0ZWQKLWV4cHJlc3Npb25zIHN1Y2ggYXMgYGBzdHJpbmcuYWBgLCBpdCB3aWxsIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uIHVwIHRvIHRoZQotZmluYWwgYGAnLidgYCBhbmQgdGhlbiBzdWdnZXN0IGNvbXBsZXRpb25zIGZyb20gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc3VsdGluZwotb2JqZWN0LiAgTm90ZSB0aGF0IHRoaXMgbWF5IGV4ZWN1dGUgYXBwbGljYXRpb24tZGVmaW5lZCBjb2RlIGlmIGFuIG9iamVjdCB3aXRoIGEKLTptZXRoOmBfX2dldGF0dHJfX2AgbWV0aG9kIGlzIHBhcnQgb2YgdGhlIGV4cHJlc3Npb24uCi0KLUEgbW9yZSBjYXBhYmxlIHN0YXJ0dXAgZmlsZSBtaWdodCBsb29rIGxpa2UgdGhpcyBleGFtcGxlLiAgTm90ZSB0aGF0IHRoaXMKLWRlbGV0ZXMgdGhlIG5hbWVzIGl0IGNyZWF0ZXMgb25jZSB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkOyB0aGlzIGlzIGRvbmUgc2luY2UKLXRoZSBzdGFydHVwIGZpbGUgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHRoZSBpbnRlcmFjdGl2ZSBjb21tYW5kcywKLWFuZCByZW1vdmluZyB0aGUgbmFtZXMgYXZvaWRzIGNyZWF0aW5nIHNpZGUgZWZmZWN0cyBpbiB0aGUgaW50ZXJhY3RpdmUKLWVudmlyb25tZW50LiAgWW91IG1heSBmaW5kIGl0IGNvbnZlbmllbnQgdG8ga2VlcCBzb21lIG9mIHRoZSBpbXBvcnRlZCBtb2R1bGVzLAotc3VjaCBhcyA6bW9kOmBvc2AsIHdoaWNoIHR1cm4gb3V0IHRvIGJlIG5lZWRlZCBpbiBtb3N0IHNlc3Npb25zIHdpdGggdGhlCi1pbnRlcnByZXRlci4gOjoKLQotICAgIyBBZGQgYXV0by1jb21wbGV0aW9uIGFuZCBhIHN0b3JlZCBoaXN0b3J5IGZpbGUgb2YgY29tbWFuZHMgdG8geW91ciBQeXRob24KLSAgICMgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuIFJlcXVpcmVzIFB5dGhvbiAyLjArLCByZWFkbGluZS4gQXV0b2NvbXBsZXRlIGlzCi0gICAjIGJvdW5kIHRvIHRoZSBFc2Mga2V5IGJ5IGRlZmF1bHQgKHlvdSBjYW4gY2hhbmdlIGl0IC0gc2VlIHJlYWRsaW5lIGRvY3MpLgotICAgIwotICAgIyBTdG9yZSB0aGUgZmlsZSBpbiB+Ly5weXN0YXJ0dXAsIGFuZCBzZXQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gcG9pbnQKLSAgICMgdG8gaXQ6ICAiZXhwb3J0IFBZVEhPTlNUQVJUVVA9fi8ucHlzdGFydHVwIiBpbiBiYXNoLgotCi0gICBpbXBvcnQgYXRleGl0Ci0gICBpbXBvcnQgb3MKLSAgIGltcG9ydCByZWFkbGluZQotICAgaW1wb3J0IHJsY29tcGxldGVyCi0KLSAgIGhpc3RvcnlQYXRoID0gb3MucGF0aC5leHBhbmR1c2VyKCJ+Ly5weWhpc3RvcnkiKQotCi0gICBkZWYgc2F2ZV9oaXN0b3J5KGhpc3RvcnlQYXRoPWhpc3RvcnlQYXRoKToKLSAgICAgICBpbXBvcnQgcmVhZGxpbmUKLSAgICAgICByZWFkbGluZS53cml0ZV9oaXN0b3J5X2ZpbGUoaGlzdG9yeVBhdGgpCi0KLSAgIGlmIG9zLnBhdGguZXhpc3RzKGhpc3RvcnlQYXRoKToKLSAgICAgICByZWFkbGluZS5yZWFkX2hpc3RvcnlfZmlsZShoaXN0b3J5UGF0aCkKLQotICAgYXRleGl0LnJlZ2lzdGVyKHNhdmVfaGlzdG9yeSkKLSAgIGRlbCBvcywgYXRleGl0LCByZWFkbGluZSwgcmxjb21wbGV0ZXIsIHNhdmVfaGlzdG9yeSwgaGlzdG9yeVBhdGgKK0NvbXBsZXRpb24gb2YgdmFyaWFibGUgYW5kIG1vZHVsZSBuYW1lcyBpcworOnJlZjpgYXV0b21hdGljYWxseSBlbmFibGVkIDxybGNvbXBsZXRlci1jb25maWc+YCBhdCBpbnRlcnByZXRlciBzdGFydHVwIHNvCit0aGF0IHRoZSA6a2JkOmBUYWJgIGtleSBpbnZva2VzIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uOyBpdCBsb29rcyBhdAorUHl0aG9uIHN0YXRlbWVudCBuYW1lcywgdGhlIGN1cnJlbnQgbG9jYWwgdmFyaWFibGVzLCBhbmQgdGhlIGF2YWlsYWJsZQorbW9kdWxlIG5hbWVzLiAgRm9yIGRvdHRlZCBleHByZXNzaW9ucyBzdWNoIGFzIGBgc3RyaW5nLmFgYCwgaXQgd2lsbCBldmFsdWF0ZQordGhlIGV4cHJlc3Npb24gdXAgdG8gdGhlIGZpbmFsIGBgJy4nYGAgYW5kIHRoZW4gc3VnZ2VzdCBjb21wbGV0aW9ucyBmcm9tCit0aGUgYXR0cmlidXRlcyBvZiB0aGUgcmVzdWx0aW5nIG9iamVjdC4gIE5vdGUgdGhhdCB0aGlzIG1heSBleGVjdXRlCithcHBsaWNhdGlvbi1kZWZpbmVkIGNvZGUgaWYgYW4gb2JqZWN0IHdpdGggYSA6bWV0aDpgX19nZXRhdHRyX19gIG1ldGhvZAoraXMgcGFydCBvZiB0aGUgZXhwcmVzc2lvbi4gIFRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYWxzbyBzYXZlcyB5b3VyCitoaXN0b3J5IGludG8gYSBmaWxlIG5hbWVkIDpmaWxlOmAucHl0aG9uX2hpc3RvcnlgIGluIHlvdXIgdXNlciBkaXJlY3RvcnkuCitUaGUgaGlzdG9yeSB3aWxsIGJlIGF2YWlsYWJsZSBhZ2FpbiBkdXJpbmcgdGhlIG5leHQgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIKK3Nlc3Npb24uCiAKIAogLi4gX3R1dC1jb21tZW50YXJ5OgpAQCAtMTYyLDE0ICs0OSw2IEBACiBicHl0aG9uXy4KIAogCi0uLiBydWJyaWM6OiBGb290bm90ZXMKLQotLi4gWyNdIFB5dGhvbiB3aWxsIGV4ZWN1dGUgdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBpZGVudGlmaWVkIGJ5IHRoZQotICAgOmVudnZhcjpgUFlUSE9OU1RBUlRVUGAgZW52aXJvbm1lbnQgdmFyaWFibGUgd2hlbiB5b3Ugc3RhcnQgYW4gaW50ZXJhY3RpdmUKLSAgIGludGVycHJldGVyLiAgVG8gY3VzdG9taXplIFB5dGhvbiBldmVuIGZvciBub24taW50ZXJhY3RpdmUgbW9kZSwgc2VlCi0gICA6cmVmOmB0dXQtY3VzdG9taXplYC4KLQotCiAuLiBfR05VIFJlYWRsaW5lOiBodHRwOi8vdGlzd3d3LmNhc2UuZWR1L3BocC9jaGV0L3JlYWRsaW5lL3JsdG9wLmh0bWwKIC4uIF9JUHl0aG9uOiBodHRwOi8vaXB5dGhvbi5zY2lweS5vcmcvCiAuLiBfYnB5dGhvbjogaHR0cDovL3d3dy5icHl0aG9uLWludGVycHJldGVyLm9yZy8KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QgYi9Eb2MvdHV0b3JpYWwvaW50ZXJwcmV0ZXIucnN0CmluZGV4IGNkYzJiZjIuLmRkNmIxYTkgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9pbnRlcnByZXRlci5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL2ludGVycHJldGVyLnJzdApAQCAtMTAsMTMgKzEwLDEzIEBACiBJbnZva2luZyB0aGUgSW50ZXJwcmV0ZXIKID09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgUHl0aG9uIGludGVycHJldGVyIGlzIHVzdWFsbHkgaW5zdGFsbGVkIGFzIDpmaWxlOmAvdXNyL2xvY2FsL2Jpbi9weXRob24zLjNgCitUaGUgUHl0aG9uIGludGVycHJldGVyIGlzIHVzdWFsbHkgaW5zdGFsbGVkIGFzIDpmaWxlOmAvdXNyL2xvY2FsL2Jpbi9weXRob24zLjRgCiBvbiB0aG9zZSBtYWNoaW5lcyB3aGVyZSBpdCBpcyBhdmFpbGFibGU7IHB1dHRpbmcgOmZpbGU6YC91c3IvbG9jYWwvYmluYCBpbiB5b3VyCiBVbml4IHNoZWxsJ3Mgc2VhcmNoIHBhdGggbWFrZXMgaXQgcG9zc2libGUgdG8gc3RhcnQgaXQgYnkgdHlwaW5nIHRoZSBjb21tYW5kOgogCiAuLiBjb2RlLWJsb2NrOjogdGV4dAogCi0gICBweXRob24zLjMKKyAgIHB5dGhvbjMuNAogCiB0byB0aGUgc2hlbGwuIFsjXV8gU2luY2UgdGhlIGNob2ljZSBvZiB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSBpbnRlcnByZXRlciBsaXZlcwogaXMgYW4gaW5zdGFsbGF0aW9uIG9wdGlvbiwgb3RoZXIgcGxhY2VzIGFyZSBwb3NzaWJsZTsgY2hlY2sgd2l0aCB5b3VyIGxvY2FsCkBAIC0yNCwyNiArMjQsMjUgQEAKIHBvcHVsYXIgYWx0ZXJuYXRpdmUgbG9jYXRpb24uKQogCiBPbiBXaW5kb3dzIG1hY2hpbmVzLCB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiBpcyB1c3VhbGx5IHBsYWNlZCBpbgotOmZpbGU6YEM6XFxQeXRob24zM2AsIHRob3VnaCB5b3UgY2FuIGNoYW5nZSB0aGlzIHdoZW4geW91J3JlIHJ1bm5pbmcgdGhlCis6ZmlsZTpgQzpcXFB5dGhvbjM0YCwgdGhvdWdoIHlvdSBjYW4gY2hhbmdlIHRoaXMgd2hlbiB5b3UncmUgcnVubmluZyB0aGUKIGluc3RhbGxlci4gIFRvIGFkZCB0aGlzIGRpcmVjdG9yeSB0byB5b3VyIHBhdGgsICB5b3UgY2FuIHR5cGUgdGhlIGZvbGxvd2luZwogY29tbWFuZCBpbnRvIHRoZSBjb21tYW5kIHByb21wdCBpbiBhIERPUyBib3g6OgogCi0gICBzZXQgcGF0aD0lcGF0aCU7QzpccHl0aG9uMzMKKyAgIHNldCBwYXRoPSVwYXRoJTtDOlxweXRob24zNAogCiBUeXBpbmcgYW4gZW5kLW9mLWZpbGUgY2hhcmFjdGVyICg6a2JkOmBDb250cm9sLURgIG9uIFVuaXgsIDprYmQ6YENvbnRyb2wtWmAgb24KIFdpbmRvd3MpIGF0IHRoZSBwcmltYXJ5IHByb21wdCBjYXVzZXMgdGhlIGludGVycHJldGVyIHRvIGV4aXQgd2l0aCBhIHplcm8gZXhpdAogc3RhdHVzLiAgSWYgdGhhdCBkb2Vzbid0IHdvcmssIHlvdSBjYW4gZXhpdCB0aGUgaW50ZXJwcmV0ZXIgYnkgdHlwaW5nIHRoZQogZm9sbG93aW5nIGNvbW1hbmQ6IGBgcXVpdCgpYGAuCiAKLVRoZSBpbnRlcnByZXRlcidzIGxpbmUtZWRpdGluZyBmZWF0dXJlcyB1c3VhbGx5IGFyZW4ndCB2ZXJ5IHNvcGhpc3RpY2F0ZWQuICBPbgotVW5peCwgd2hvZXZlciBpbnN0YWxsZWQgdGhlIGludGVycHJldGVyIG1heSBoYXZlIGVuYWJsZWQgc3VwcG9ydCBmb3IgdGhlIEdOVQotcmVhZGxpbmUgbGlicmFyeSwgd2hpY2ggYWRkcyBtb3JlIGVsYWJvcmF0ZSBpbnRlcmFjdGl2ZSBlZGl0aW5nIGFuZCBoaXN0b3J5Ci1mZWF0dXJlcy4gUGVyaGFwcyB0aGUgcXVpY2tlc3QgY2hlY2sgdG8gc2VlIHdoZXRoZXIgY29tbWFuZCBsaW5lIGVkaXRpbmcgaXMKLXN1cHBvcnRlZCBpcyB0eXBpbmcgQ29udHJvbC1QIHRvIHRoZSBmaXJzdCBQeXRob24gcHJvbXB0IHlvdSBnZXQuICBJZiBpdCBiZWVwcywKLXlvdSBoYXZlIGNvbW1hbmQgbGluZSBlZGl0aW5nOyBzZWUgQXBwZW5kaXggOnJlZjpgdHV0LWludGVyYWN0aW5nYCBmb3IgYW4KLWludHJvZHVjdGlvbiB0byB0aGUga2V5cy4gIElmIG5vdGhpbmcgYXBwZWFycyB0byBoYXBwZW4sIG9yIGlmIGBgXlBgYCBpcyBlY2hvZWQsCi1jb21tYW5kIGxpbmUgZWRpdGluZyBpc24ndCBhdmFpbGFibGU7IHlvdSdsbCBvbmx5IGJlIGFibGUgdG8gdXNlIGJhY2tzcGFjZSB0bwotcmVtb3ZlIGNoYXJhY3RlcnMgZnJvbSB0aGUgY3VycmVudCBsaW5lLgorVGhlIGludGVycHJldGVyJ3MgbGluZS1lZGl0aW5nIGZlYXR1cmVzIGluY2x1ZGUgaW50ZXJhY3RpdmUgZWRpdGluZywgaGlzdG9yeQorc3Vic3RpdHV0aW9uIGFuZCBjb2RlIGNvbXBsZXRpb24gb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgcmVhZGxpbmUuICBQZXJoYXBzIHRoZQorcXVpY2tlc3QgY2hlY2sgdG8gc2VlIHdoZXRoZXIgY29tbWFuZCBsaW5lIGVkaXRpbmcgaXMgc3VwcG9ydGVkIGlzIHR5cGluZworOmtiZDpgQ29udHJvbC1QYCB0byB0aGUgZmlyc3QgUHl0aG9uIHByb21wdCB5b3UgZ2V0LiAgSWYgaXQgYmVlcHMsIHlvdSBoYXZlIGNvbW1hbmQKK2xpbmUgZWRpdGluZzsgc2VlIEFwcGVuZGl4IDpyZWY6YHR1dC1pbnRlcmFjdGluZ2AgZm9yIGFuIGludHJvZHVjdGlvbiB0byB0aGUKK2tleXMuICBJZiBub3RoaW5nIGFwcGVhcnMgdG8gaGFwcGVuLCBvciBpZiBgYF5QYGAgaXMgZWNob2VkLCBjb21tYW5kIGxpbmUKK2VkaXRpbmcgaXNuJ3QgYXZhaWxhYmxlOyB5b3UnbGwgb25seSBiZSBhYmxlIHRvIHVzZSBiYWNrc3BhY2UgdG8gcmVtb3ZlCitjaGFyYWN0ZXJzIGZyb20gdGhlIGN1cnJlbnQgbGluZS4KIAogVGhlIGludGVycHJldGVyIG9wZXJhdGVzIHNvbWV3aGF0IGxpa2UgdGhlIFVuaXggc2hlbGw6IHdoZW4gY2FsbGVkIHdpdGggc3RhbmRhcmQKIGlucHV0IGNvbm5lY3RlZCB0byBhIHR0eSBkZXZpY2UsIGl0IHJlYWRzIGFuZCBleGVjdXRlcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5OwpAQCAtNjQsNiArNjMsOCBAQAogYW5kIGVudGVyIGludGVyYWN0aXZlIG1vZGUgYWZ0ZXJ3YXJkcy4gIFRoaXMgY2FuIGJlIGRvbmUgYnkgcGFzc2luZyA6b3B0aW9uOmAtaWAKIGJlZm9yZSB0aGUgc2NyaXB0LgogCitBbGwgY29tbWFuZCBsaW5lIG9wdGlvbnMgYXJlIGRlc2NyaWJlZCBpbiA6cmVmOmB1c2luZy1vbi1nZW5lcmFsYC4KKwogCiAuLiBfdHV0LWFyZ3Bhc3Npbmc6CiAKQEAgLTk1LDkgKzk2LDkgQEAKIHByaW50cyBhIHdlbGNvbWUgbWVzc2FnZSBzdGF0aW5nIGl0cyB2ZXJzaW9uIG51bWJlciBhbmQgYSBjb3B5cmlnaHQgbm90aWNlCiBiZWZvcmUgcHJpbnRpbmcgdGhlIGZpcnN0IHByb21wdDo6CiAKLSAgICQgcHl0aG9uMy4zCi0gICBQeXRob24gMy4zIChkZWZhdWx0LCBTZXAgMjQgMjAxMiwgMDk6MjU6MDQpCi0gICBbR0NDIDQuNi4zXSBvbiBsaW51eDIKKyAgICQgcHl0aG9uMy40CisgICBQeXRob24gMy40IChkZWZhdWx0LCBNYXIgMTYgMjAxNCwgMDk6MjU6MDQpCisgICBbR0NDIDQuOC4yXSBvbiBsaW51eAogICAgVHlwZSAiaGVscCIsICJjb3B5cmlnaHQiLCAiY3JlZGl0cyIgb3IgImxpY2Vuc2UiIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICAgPj4+CiAKQEAgLTEwNiw3MCArMTA3LDIyIEBACiBDb250aW51YXRpb24gbGluZXMgYXJlIG5lZWRlZCB3aGVuIGVudGVyaW5nIGEgbXVsdGktbGluZSBjb25zdHJ1Y3QuIEFzIGFuCiBleGFtcGxlLCB0YWtlIGEgbG9vayBhdCB0aGlzIDprZXl3b3JkOmBpZmAgc3RhdGVtZW50OjoKIAotICAgPj4+IHRoZV93b3JsZF9pc19mbGF0ID0gMQorICAgPj4+IHRoZV93b3JsZF9pc19mbGF0ID0gVHJ1ZQogICAgPj4+IGlmIHRoZV93b3JsZF9pc19mbGF0OgogICAgLi4uICAgICBwcmludCgiQmUgY2FyZWZ1bCBub3QgdG8gZmFsbCBvZmYhIikKICAgIC4uLgogICAgQmUgY2FyZWZ1bCBub3QgdG8gZmFsbCBvZmYhCiAKIAorRm9yIG1vcmUgb24gaW50ZXJhY3RpdmUgbW9kZSwgc2VlIDpyZWY6YHR1dC1pbnRlcmFjYC4KKworCiAuLiBfdHV0LWludGVycDoKIAogVGhlIEludGVycHJldGVyIGFuZCBJdHMgRW52aXJvbm1lbnQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAotLi4gX3R1dC1lcnJvcjoKLQotRXJyb3IgSGFuZGxpbmcKLS0tLS0tLS0tLS0tLS0tCi0KLVdoZW4gYW4gZXJyb3Igb2NjdXJzLCB0aGUgaW50ZXJwcmV0ZXIgcHJpbnRzIGFuIGVycm9yIG1lc3NhZ2UgYW5kIGEgc3RhY2sgdHJhY2UuCi1JbiBpbnRlcmFjdGl2ZSBtb2RlLCBpdCB0aGVuIHJldHVybnMgdG8gdGhlIHByaW1hcnkgcHJvbXB0OyB3aGVuIGlucHV0IGNhbWUgZnJvbQotYSBmaWxlLCBpdCBleGl0cyB3aXRoIGEgbm9uemVybyBleGl0IHN0YXR1cyBhZnRlciBwcmludGluZyB0aGUgc3RhY2sgdHJhY2UuCi0oRXhjZXB0aW9ucyBoYW5kbGVkIGJ5IGFuIDprZXl3b3JkOmBleGNlcHRgIGNsYXVzZSBpbiBhIDprZXl3b3JkOmB0cnlgIHN0YXRlbWVudAotYXJlIG5vdCBlcnJvcnMgaW4gdGhpcyBjb250ZXh0LikgIFNvbWUgZXJyb3JzIGFyZSB1bmNvbmRpdGlvbmFsbHkgZmF0YWwgYW5kCi1jYXVzZSBhbiBleGl0IHdpdGggYSBub256ZXJvIGV4aXQ7IHRoaXMgYXBwbGllcyB0byBpbnRlcm5hbCBpbmNvbnNpc3RlbmNpZXMgYW5kCi1zb21lIGNhc2VzIG9mIHJ1bm5pbmcgb3V0IG9mIG1lbW9yeS4gIEFsbCBlcnJvciBtZXNzYWdlcyBhcmUgd3JpdHRlbiB0byB0aGUKLXN0YW5kYXJkIGVycm9yIHN0cmVhbTsgbm9ybWFsIG91dHB1dCBmcm9tIGV4ZWN1dGVkIGNvbW1hbmRzIGlzIHdyaXR0ZW4gdG8KLXN0YW5kYXJkIG91dHB1dC4KLQotVHlwaW5nIHRoZSBpbnRlcnJ1cHQgY2hhcmFjdGVyICh1c3VhbGx5IENvbnRyb2wtQyBvciBERUwpIHRvIHRoZSBwcmltYXJ5IG9yCi1zZWNvbmRhcnkgcHJvbXB0IGNhbmNlbHMgdGhlIGlucHV0IGFuZCByZXR1cm5zIHRvIHRoZSBwcmltYXJ5IHByb21wdC4gWyNdXwotVHlwaW5nIGFuIGludGVycnVwdCB3aGlsZSBhIGNvbW1hbmQgaXMgZXhlY3V0aW5nIHJhaXNlcyB0aGUKLTpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBleGNlcHRpb24sIHdoaWNoIG1heSBiZSBoYW5kbGVkIGJ5IGEgOmtleXdvcmQ6YHRyeWAKLXN0YXRlbWVudC4KLQotCi0uLiBfdHV0LXNjcmlwdHM6Ci0KLUV4ZWN1dGFibGUgUHl0aG9uIFNjcmlwdHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotT24gQlNEJ2lzaCBVbml4IHN5c3RlbXMsIFB5dGhvbiBzY3JpcHRzIGNhbiBiZSBtYWRlIGRpcmVjdGx5IGV4ZWN1dGFibGUsIGxpa2UKLXNoZWxsIHNjcmlwdHMsIGJ5IHB1dHRpbmcgdGhlIGxpbmUgOjoKLQotICAgIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMuMwotCi0oYXNzdW1pbmcgdGhhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgb24gdGhlIHVzZXIncyA6ZW52dmFyOmBQQVRIYCkgYXQgdGhlIGJlZ2lubmluZwotb2YgdGhlIHNjcmlwdCBhbmQgZ2l2aW5nIHRoZSBmaWxlIGFuIGV4ZWN1dGFibGUgbW9kZS4gIFRoZSBgYCMhYGAgbXVzdCBiZSB0aGUKLWZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBmaWxlLiAgT24gc29tZSBwbGF0Zm9ybXMsIHRoaXMgZmlyc3QgbGluZSBtdXN0IGVuZAotd2l0aCBhIFVuaXgtc3R5bGUgbGluZSBlbmRpbmcgKGBgJ1xuJ2BgKSwgbm90IGEgV2luZG93cyAoYGAnXHJcbidgYCkgbGluZQotZW5kaW5nLiAgTm90ZSB0aGF0IHRoZSBoYXNoLCBvciBwb3VuZCwgY2hhcmFjdGVyLCBgYCcjJ2BgLCBpcyB1c2VkIHRvIHN0YXJ0IGEKLWNvbW1lbnQgaW4gUHl0aG9uLgotCi1UaGUgc2NyaXB0IGNhbiBiZSBnaXZlbiBhbiBleGVjdXRhYmxlIG1vZGUsIG9yIHBlcm1pc3Npb24sIHVzaW5nIHRoZQotOnByb2dyYW06YGNobW9kYCBjb21tYW5kOjoKLQotICAgJCBjaG1vZCAreCBteXNjcmlwdC5weQotCi1PbiBXaW5kb3dzIHN5c3RlbXMsIHRoZXJlIGlzIG5vIG5vdGlvbiBvZiBhbiAiZXhlY3V0YWJsZSBtb2RlIi4gIFRoZSBQeXRob24KLWluc3RhbGxlciBhdXRvbWF0aWNhbGx5IGFzc29jaWF0ZXMgYGAucHlgYCBmaWxlcyB3aXRoIGBgcHl0aG9uLmV4ZWBgIHNvIHRoYXQKLWEgZG91YmxlLWNsaWNrIG9uIGEgUHl0aG9uIGZpbGUgd2lsbCBydW4gaXQgYXMgYSBzY3JpcHQuICBUaGUgZXh0ZW5zaW9uIGNhbgotYWxzbyBiZSBgYC5weXdgYCwgaW4gdGhhdCBjYXNlLCB0aGUgY29uc29sZSB3aW5kb3cgdGhhdCBub3JtYWxseSBhcHBlYXJzIGlzCi1zdXBwcmVzc2VkLgotCi0KIC4uIF90dXQtc291cmNlLWVuY29kaW5nOgogCiBTb3VyY2UgQ29kZSBFbmNvZGluZwpAQCAtMjAzLDY3ICsxNTYsOCBAQAogd2l0aGluIHRoZSBmaWxlLgogCiAKLS4uIF90dXQtc3RhcnR1cDoKLQotVGhlIEludGVyYWN0aXZlIFN0YXJ0dXAgRmlsZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaGVuIHlvdSB1c2UgUHl0aG9uIGludGVyYWN0aXZlbHksIGl0IGlzIGZyZXF1ZW50bHkgaGFuZHkgdG8gaGF2ZSBzb21lIHN0YW5kYXJkCi1jb21tYW5kcyBleGVjdXRlZCBldmVyeSB0aW1lIHRoZSBpbnRlcnByZXRlciBpcyBzdGFydGVkLiAgWW91IGNhbiBkbyB0aGlzIGJ5Ci1zZXR0aW5nIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIG5hbWVkIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIHRvIHRoZSBuYW1lIG9mIGEKLWZpbGUgY29udGFpbmluZyB5b3VyIHN0YXJ0LXVwIGNvbW1hbmRzLiAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSA6ZmlsZTpgLnByb2ZpbGVgCi1mZWF0dXJlIG9mIHRoZSBVbml4IHNoZWxscy4KLQotLi4gWFhYIFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIGR1bXBlZCBpbiBhbiBhcHBlbmRpeCwgc2luY2UgbW9zdCBwZW9wbGUKLSAgIGRvbid0IHVzZSBQeXRob24gaW50ZXJhY3RpdmVseSBpbiBub24tdHJpdmlhbCB3YXlzLgotCi1UaGlzIGZpbGUgaXMgb25seSByZWFkIGluIGludGVyYWN0aXZlIHNlc3Npb25zLCBub3Qgd2hlbiBQeXRob24gcmVhZHMgY29tbWFuZHMKLWZyb20gYSBzY3JpcHQsIGFuZCBub3Qgd2hlbiA6ZmlsZTpgL2Rldi90dHlgIGlzIGdpdmVuIGFzIHRoZSBleHBsaWNpdCBzb3VyY2Ugb2YKLWNvbW1hbmRzICh3aGljaCBvdGhlcndpc2UgYmVoYXZlcyBsaWtlIGFuIGludGVyYWN0aXZlIHNlc3Npb24pLiAgSXQgaXMgZXhlY3V0ZWQKLWluIHRoZSBzYW1lIG5hbWVzcGFjZSB3aGVyZSBpbnRlcmFjdGl2ZSBjb21tYW5kcyBhcmUgZXhlY3V0ZWQsIHNvIHRoYXQgb2JqZWN0cwotdGhhdCBpdCBkZWZpbmVzIG9yIGltcG9ydHMgY2FuIGJlIHVzZWQgd2l0aG91dCBxdWFsaWZpY2F0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZQotc2Vzc2lvbi4gWW91IGNhbiBhbHNvIGNoYW5nZSB0aGUgcHJvbXB0cyBgYHN5cy5wczFgYCBhbmQgYGBzeXMucHMyYGAgaW4gdGhpcwotZmlsZS4KLQotSWYgeW91IHdhbnQgdG8gcmVhZCBhbiBhZGRpdGlvbmFsIHN0YXJ0LXVwIGZpbGUgZnJvbSB0aGUgY3VycmVudCBkaXJlY3RvcnksIHlvdQotY2FuIHByb2dyYW0gdGhpcyBpbiB0aGUgZ2xvYmFsIHN0YXJ0LXVwIGZpbGUgdXNpbmcgY29kZSBsaWtlIGBgaWYKLW9zLnBhdGguaXNmaWxlKCcucHl0aG9ucmMucHknKTogZXhlYyhvcGVuKCcucHl0aG9ucmMucHknKS5yZWFkKCkpYGAuCi1JZiB5b3Ugd2FudCB0byB1c2UgdGhlIHN0YXJ0dXAgZmlsZSBpbiBhIHNjcmlwdCwgeW91IG11c3QgZG8gdGhpcyBleHBsaWNpdGx5Ci1pbiB0aGUgc2NyaXB0OjoKLQotICAgaW1wb3J0IG9zCi0gICBmaWxlbmFtZSA9IG9zLmVudmlyb24uZ2V0KCdQWVRIT05TVEFSVFVQJykKLSAgIGlmIGZpbGVuYW1lIGFuZCBvcy5wYXRoLmlzZmlsZShmaWxlbmFtZSk6Ci0gICAgICAgZXhlYyhvcGVuKGZpbGVuYW1lKS5yZWFkKCkpCi0KLQotLi4gX3R1dC1jdXN0b21pemU6Ci0KLVRoZSBDdXN0b21pemF0aW9uIE1vZHVsZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUHl0aG9uIHByb3ZpZGVzIHR3byBob29rcyB0byBsZXQgeW91IGN1c3RvbWl6ZSBpdDogOm1vZDpgc2l0ZWN1c3RvbWl6ZWAgYW5kCi06bW9kOmB1c2VyY3VzdG9taXplYC4gIFRvIHNlZSBob3cgaXQgd29ya3MsIHlvdSBuZWVkIGZpcnN0IHRvIGZpbmQgdGhlIGxvY2F0aW9uCi1vZiB5b3VyIHVzZXIgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuICBTdGFydCBQeXRob24gYW5kIHJ1biB0aGlzIGNvZGU6Ci0KLSAgID4+PiBpbXBvcnQgc2l0ZQotICAgPj4+IHNpdGUuZ2V0dXNlcnNpdGVwYWNrYWdlcygpCi0gICAnL2hvbWUvdXNlci8ubG9jYWwvbGliL3B5dGhvbjMuMi9zaXRlLXBhY2thZ2VzJwotCi1Ob3cgeW91IGNhbiBjcmVhdGUgYSBmaWxlIG5hbWVkIDpmaWxlOmB1c2VyY3VzdG9taXplLnB5YCBpbiB0aGF0IGRpcmVjdG9yeSBhbmQKLXB1dCBhbnl0aGluZyB5b3Ugd2FudCBpbiBpdC4gIEl0IHdpbGwgYWZmZWN0IGV2ZXJ5IGludm9jYXRpb24gb2YgUHl0aG9uLCB1bmxlc3MKLWl0IGlzIHN0YXJ0ZWQgd2l0aCB0aGUgOm9wdGlvbjpgLXNgIG9wdGlvbiB0byBkaXNhYmxlIHRoZSBhdXRvbWF0aWMgaW1wb3J0LgotCi06bW9kOmBzaXRlY3VzdG9taXplYCB3b3JrcyBpbiB0aGUgc2FtZSB3YXksIGJ1dCBpcyB0eXBpY2FsbHkgY3JlYXRlZCBieSBhbgotYWRtaW5pc3RyYXRvciBvZiB0aGUgY29tcHV0ZXIgaW4gdGhlIGdsb2JhbCBzaXRlLXBhY2thZ2VzIGRpcmVjdG9yeSwgYW5kIGlzCi1pbXBvcnRlZCBiZWZvcmUgOm1vZDpgdXNlcmN1c3RvbWl6ZWAuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIDptb2Q6YHNpdGVgCi1tb2R1bGUgZm9yIG1vcmUgZGV0YWlscy4KLQotCiAuLiBydWJyaWM6OiBGb290bm90ZXMKIAogLi4gWyNdIE9uIFVuaXgsIHRoZSBQeXRob24gMy54IGludGVycHJldGVyIGlzIGJ5IGRlZmF1bHQgbm90IGluc3RhbGxlZCB3aXRoIHRoZQogICAgZXhlY3V0YWJsZSBuYW1lZCBgYHB5dGhvbmBgLCBzbyB0aGF0IGl0IGRvZXMgbm90IGNvbmZsaWN0IHdpdGggYQogICAgc2ltdWx0YW5lb3VzbHkgaW5zdGFsbGVkIFB5dGhvbiAyLnggZXhlY3V0YWJsZS4KLQotLi4gWyNdIEEgcHJvYmxlbSB3aXRoIHRoZSBHTlUgUmVhZGxpbmUgcGFja2FnZSBtYXkgcHJldmVudCB0aGlzLgpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL2ludHJvZHVjdGlvbi5yc3QgYi9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdAppbmRleCA5ZWZkMWFjLi5jNWMxMzQzIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvaW50cm9kdWN0aW9uLnJzdApAQCAtMSw0ICsxLDQgQEAKLe+7vy4uIF90dXQtaW5mb3JtYWw6CisuLiBfdHV0LWluZm9ybWFsOgogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiBBbiBJbmZvcm1hbCBJbnRyb2R1Y3Rpb24gdG8gUHl0aG9uCkBAIC0zMDMsOSArMzAzLDkgQEAKIGluZGljZXMsIGlmIGJvdGggYXJlIHdpdGhpbiBib3VuZHMuICBGb3IgZXhhbXBsZSwgdGhlIGxlbmd0aCBvZiBgYHdvcmRbMTozXWBgIGlzCiAyLgogCi1BdHRlbXB0aW5nIHRvIHVzZSBhIGluZGV4IHRoYXQgaXMgdG9vIGxhcmdlIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yOjoKK0F0dGVtcHRpbmcgdG8gdXNlIGFuIGluZGV4IHRoYXQgaXMgdG9vIGxhcmdlIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yOjoKIAotICAgPj4+IHdvcmRbNDJdICAjIHRoZSB3b3JkIG9ubHkgaGFzIDcgY2hhcmFjdGVycworICAgPj4+IHdvcmRbNDJdICAjIHRoZSB3b3JkIG9ubHkgaGFzIDYgY2hhcmFjdGVycwogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgogICAgSW5kZXhFcnJvcjogc3RyaW5nIGluZGV4IG91dCBvZiByYW5nZQpAQCAtMzkxLDcgKzM5MSw3IEBACiAgICA+Pj4gc3F1YXJlc1s6XQogICAgWzEsIDQsIDksIDE2LCAyNV0KIAotTGlzdHMgYWxzbyBzdXBwb3J0cyBvcGVyYXRpb25zIGxpa2UgY29uY2F0ZW5hdGlvbjo6CitMaXN0cyBhbHNvIHN1cHBvcnQgb3BlcmF0aW9ucyBsaWtlIGNvbmNhdGVuYXRpb246OgogCiAgICA+Pj4gc3F1YXJlcyArIFszNiwgNDksIDY0LCA4MSwgMTAwXQogICAgWzEsIDQsIDksIDE2LCAyNSwgMzYsIDQ5LCA2NCwgODEsIDEwMF0KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdCBiL0RvYy90dXRvcmlhbC9tb2R1bGVzLnJzdAppbmRleCAxOTAyOTY0Li5mZDM2MWFlIDEwMDY0NAotLS0gYS9Eb2MvdHV0b3JpYWwvbW9kdWxlcy5yc3QKKysrIGIvRG9jL3R1dG9yaWFsL21vZHVsZXMucnN0CkBAIC0xNjUsMTAgKzE2NSwxNiBAQAogbmFtZWQgOmZpbGU6YHNwYW0ucHlgIGluIGEgbGlzdCBvZiBkaXJlY3RvcmllcyBnaXZlbiBieSB0aGUgdmFyaWFibGUKIDpkYXRhOmBzeXMucGF0aGAuICA6ZGF0YTpgc3lzLnBhdGhgIGlzIGluaXRpYWxpemVkIGZyb20gdGhlc2UgbG9jYXRpb25zOgogCi0qIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgaW5wdXQgc2NyaXB0IChvciB0aGUgY3VycmVudCBkaXJlY3RvcnkpLgorKiBUaGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGlucHV0IHNjcmlwdCAob3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoZW4gbm8KKyAgZmlsZSBpcyBzcGVjaWZpZWQpLgogKiA6ZW52dmFyOmBQWVRIT05QQVRIYCAoYSBsaXN0IG9mIGRpcmVjdG9yeSBuYW1lcywgd2l0aCB0aGUgc2FtZSBzeW50YXggYXMgdGhlCiAgIHNoZWxsIHZhcmlhYmxlIDplbnZ2YXI6YFBBVEhgKS4KLSogdGhlIGluc3RhbGxhdGlvbi1kZXBlbmRlbnQgZGVmYXVsdC4KKyogVGhlIGluc3RhbGxhdGlvbi1kZXBlbmRlbnQgZGVmYXVsdC4KKworLi4gbm90ZTo6CisgICBPbiBmaWxlIHN5c3RlbXMgd2hpY2ggc3VwcG9ydCBzeW1saW5rcywgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBpbnB1dAorICAgc2NyaXB0IGlzIGNhbGN1bGF0ZWQgYWZ0ZXIgdGhlIHN5bWxpbmsgaXMgZm9sbG93ZWQuIEluIG90aGVyIHdvcmRzIHRoZQorICAgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHN5bWxpbmsgaXMgKipub3QqKiBhZGRlZCB0byB0aGUgbW9kdWxlIHNlYXJjaCBwYXRoLgogCiBBZnRlciBpbml0aWFsaXphdGlvbiwgUHl0aG9uIHByb2dyYW1zIGNhbiBtb2RpZnkgOmRhdGE6YHN5cy5wYXRoYC4gIFRoZQogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHNjcmlwdCBiZWluZyBydW4gaXMgcGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCkBAIC0yNzgsMjQgKzI4NCwyMyBAQAogICAgPj4+IGRpcihmaWJvKQogICAgWydfX25hbWVfXycsICdmaWInLCAnZmliMiddCiAgICA+Pj4gZGlyKHN5cykgICMgZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFCi0gICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZWdnaW5zZXJ0JywgJ19fZXhjZXB0aG9va19fJywKLSAgICAnX19sb2FkZXJfXycsICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BsZW4nLCAnX19zdGRlcnJfXycsCi0gICAgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywgJ19jbGVhcl90eXBlX2NhY2hlJywgJ19jdXJyZW50X2ZyYW1lcycsCi0gICAgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsICdfaG9tZScsICdfbWVyY3VyaWFsJywgJ194b3B0aW9ucycsCi0gICAgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLCAnYmFzZV9leGVjX3ByZWZpeCcsICdiYXNlX3ByZWZpeCcsCi0gICAgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsICdjYWxsX3RyYWNpbmcnLCAnY2FsbHN0YXRzJywKLSAgICAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywgJ2RvbnRfd3JpdGVfYnl0ZWNvZGUnLCAnZXhjX2luZm8nLAotICAgICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywgJ2V4ZWN1dGFibGUnLCAnZXhpdCcsICdmbGFncycsICdmbG9hdF9pbmZvJywKLSAgICAnZmxvYXRfcmVwcl9zdHlsZScsICdnZXRjaGVja2ludGVydmFsJywgJ2dldGRlZmF1bHRlbmNvZGluZycsCi0gICAgJ2dldGRsb3BlbmZsYWdzJywgJ2dldGZpbGVzeXN0ZW1lbmNvZGluZycsICdnZXRvYmplY3RzJywgJ2dldHByb2ZpbGUnLAotICAgICdnZXRyZWN1cnNpb25saW1pdCcsICdnZXRyZWZjb3VudCcsICdnZXRzaXplb2YnLCAnZ2V0c3dpdGNoaW50ZXJ2YWwnLAotICAgICdnZXR0b3RhbHJlZmNvdW50JywgJ2dldHRyYWNlJywgJ2hhc2hfaW5mbycsICdoZXh2ZXJzaW9uJywKLSAgICAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLCAnaW50ZXJuJywgJ21heHNpemUnLCAnbWF4dW5pY29kZScsCi0gICAgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLCAncGF0aF9ob29rcycsICdwYXRoX2ltcG9ydGVyX2NhY2hlJywKLSAgICAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsICdzZXRjaGVja2ludGVydmFsJywgJ3NldGRsb3BlbmZsYWdzJywKLSAgICAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsICdzZXRzd2l0Y2hpbnRlcnZhbCcsICdzZXR0cmFjZScsCi0gICAgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLCAndGhyZWFkX2luZm8nLCAndmVyc2lvbicsICd2ZXJzaW9uX2luZm8nLAotICAgICd3YXJub3B0aW9ucyddCisgICBbJ19fZGlzcGxheWhvb2tfXycsICdfX2RvY19fJywgJ19fZXhjZXB0aG9va19fJywgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAorICAgICdfX3BhY2thZ2VfXycsICdfX3N0ZGVycl9fJywgJ19fc3RkaW5fXycsICdfX3N0ZG91dF9fJywKKyAgICAnX2NsZWFyX3R5cGVfY2FjaGUnLCAnX2N1cnJlbnRfZnJhbWVzJywgJ19kZWJ1Z21hbGxvY3N0YXRzJywgJ19nZXRmcmFtZScsCisgICAgJ19ob21lJywgJ19tZXJjdXJpYWwnLCAnX3hvcHRpb25zJywgJ2FiaWZsYWdzJywgJ2FwaV92ZXJzaW9uJywgJ2FyZ3YnLAorICAgICdiYXNlX2V4ZWNfcHJlZml4JywgJ2Jhc2VfcHJlZml4JywgJ2J1aWx0aW5fbW9kdWxlX25hbWVzJywgJ2J5dGVvcmRlcicsCisgICAgJ2NhbGxfdHJhY2luZycsICdjYWxsc3RhdHMnLCAnY29weXJpZ2h0JywgJ2Rpc3BsYXlob29rJywKKyAgICAnZG9udF93cml0ZV9ieXRlY29kZScsICdleGNfaW5mbycsICdleGNlcHRob29rJywgJ2V4ZWNfcHJlZml4JywKKyAgICAnZXhlY3V0YWJsZScsICdleGl0JywgJ2ZsYWdzJywgJ2Zsb2F0X2luZm8nLCAnZmxvYXRfcmVwcl9zdHlsZScsCisgICAgJ2dldGNoZWNraW50ZXJ2YWwnLCAnZ2V0ZGVmYXVsdGVuY29kaW5nJywgJ2dldGRsb3BlbmZsYWdzJywKKyAgICAnZ2V0ZmlsZXN5c3RlbWVuY29kaW5nJywgJ2dldG9iamVjdHMnLCAnZ2V0cHJvZmlsZScsICdnZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ2dldHJlZmNvdW50JywgJ2dldHNpemVvZicsICdnZXRzd2l0Y2hpbnRlcnZhbCcsICdnZXR0b3RhbHJlZmNvdW50JywKKyAgICAnZ2V0dHJhY2UnLCAnaGFzaF9pbmZvJywgJ2hleHZlcnNpb24nLCAnaW1wbGVtZW50YXRpb24nLCAnaW50X2luZm8nLAorICAgICdpbnRlcm4nLCAnbWF4c2l6ZScsICdtYXh1bmljb2RlJywgJ21ldGFfcGF0aCcsICdtb2R1bGVzJywgJ3BhdGgnLAorICAgICdwYXRoX2hvb2tzJywgJ3BhdGhfaW1wb3J0ZXJfY2FjaGUnLCAncGxhdGZvcm0nLCAncHJlZml4JywgJ3BzMScsCisgICAgJ3NldGNoZWNraW50ZXJ2YWwnLCAnc2V0ZGxvcGVuZmxhZ3MnLCAnc2V0cHJvZmlsZScsICdzZXRyZWN1cnNpb25saW1pdCcsCisgICAgJ3NldHN3aXRjaGludGVydmFsJywgJ3NldHRyYWNlJywgJ3N0ZGVycicsICdzdGRpbicsICdzdGRvdXQnLAorICAgICd0aHJlYWRfaW5mbycsICd2ZXJzaW9uJywgJ3ZlcnNpb25faW5mbycsICd3YXJub3B0aW9ucyddCiAKIFdpdGhvdXQgYXJndW1lbnRzLCA6ZnVuYzpgZGlyYCBsaXN0cyB0aGUgbmFtZXMgeW91IGhhdmUgZGVmaW5lZCBjdXJyZW50bHk6OgogCmRpZmYgLS1naXQgYS9Eb2MvdHV0b3JpYWwvc3RkbGliLnJzdCBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CmluZGV4IDdlN2ExNTQuLjcyZDUxZGUgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CisrKyBiL0RvYy90dXRvcmlhbC9zdGRsaWIucnN0CkBAIC0xNSw3ICsxNSw3IEBACiAKICAgID4+PiBpbXBvcnQgb3MKICAgID4+PiBvcy5nZXRjd2QoKSAgICAgICMgUmV0dXJuIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5Ci0gICAnQzpcXFB5dGhvbjMzJworICAgJ0M6XFxQeXRob24zNCcKICAgID4+PiBvcy5jaGRpcignL3NlcnZlci9hY2Nlc3Nsb2dzJykgICAjIENoYW5nZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICA+Pj4gb3Muc3lzdGVtKCdta2RpciB0b2RheScpICAgIyBSdW4gdGhlIGNvbW1hbmQgbWtkaXIgaW4gdGhlIHN5c3RlbSBzaGVsbAogICAgMApAQCAtNDAsNyArNDAsOSBAQAogCiAgICA+Pj4gaW1wb3J0IHNodXRpbAogICAgPj4+IHNodXRpbC5jb3B5ZmlsZSgnZGF0YS5kYicsICdhcmNoaXZlLmRiJykKKyAgICdhcmNoaXZlLmRiJwogICAgPj4+IHNodXRpbC5tb3ZlKCcvYnVpbGQvZXhlY3V0YWJsZXMnLCAnaW5zdGFsbGRpcicpCisgICAnaW5zdGFsbGRpcicKIAogCiAuLiBfdHV0LWZpbGUtd2lsZGNhcmRzOgpAQCAtMTM4LDYgKzE0MCwxOCBAQAogICAgPj4+IHJhbmRvbS5yYW5kcmFuZ2UoNikgICAgIyByYW5kb20gaW50ZWdlciBjaG9zZW4gZnJvbSByYW5nZSg2KQogICAgNAogCitUaGUgOm1vZDpgc3RhdGlzdGljc2AgbW9kdWxlIGNhbGN1bGF0ZXMgYmFzaWMgc3RhdGlzdGljYWwgcHJvcGVydGllcworKHRoZSBtZWFuLCBtZWRpYW4sIHZhcmlhbmNlLCBldGMuKSBvZiBudW1lcmljIGRhdGE6OgorCisgICAgPj4+IGltcG9ydCBzdGF0aXN0aWNzCisgICAgPj4+IGRhdGEgPSBbMi43NSwgMS43NSwgMS4yNSwgMC4yNSwgMC41LCAxLjI1LCAzLjVdCisgICAgPj4+IHN0YXRpc3RpY3MubWVhbihkYXRhKQorICAgIDEuNjA3MTQyODU3MTQyODU3MgorICAgID4+PiBzdGF0aXN0aWNzLm1lZGlhbihkYXRhKQorICAgIDEuMjUKKyAgICA+Pj4gc3RhdGlzdGljcy52YXJpYW5jZShkYXRhKQorICAgIDEuMzcyMDIzODA5NTIzODA5NQorCiBUaGUgU2NpUHkgcHJvamVjdCA8aHR0cDovL3NjaXB5Lm9yZz4gaGFzIG1hbnkgb3RoZXIgbW9kdWxlcyBmb3IgbnVtZXJpY2FsCiBjb21wdXRhdGlvbnMuCiAKQEAgLTE1MSwxMCArMTY1LDExIEBACiBmcm9tIFVSTHMgYW5kIDptb2Q6YHNtdHBsaWJgIGZvciBzZW5kaW5nIG1haWw6OgogCiAgICA+Pj4gZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgdXJsb3BlbgotICAgPj4+IGZvciBsaW5lIGluIHVybG9wZW4oJ2h0dHA6Ly90eWNoby51c25vLm5hdnkubWlsL2NnaS1iaW4vdGltZXIucGwnKToKLSAgIC4uLiAgICAgbGluZSA9IGxpbmUuZGVjb2RlKCd1dGYtOCcpICAjIERlY29kaW5nIHRoZSBiaW5hcnkgZGF0YSB0byB0ZXh0LgotICAgLi4uICAgICBpZiAnRVNUJyBpbiBsaW5lIG9yICdFRFQnIGluIGxpbmU6ICAjIGxvb2sgZm9yIEVhc3Rlcm4gVGltZQotICAgLi4uICAgICAgICAgcHJpbnQobGluZSkKKyAgID4+PiB3aXRoIHVybG9wZW4oJ2h0dHA6Ly90eWNoby51c25vLm5hdnkubWlsL2NnaS1iaW4vdGltZXIucGwnKSBhcyByZXNwb25zZToKKyAgIC4uLiAgICAgZm9yIGxpbmUgaW4gcmVzcG9uc2U6CisgICAuLi4gICAgICAgICBsaW5lID0gbGluZS5kZWNvZGUoJ3V0Zi04JykgICMgRGVjb2RpbmcgdGhlIGJpbmFyeSBkYXRhIHRvIHRleHQuCisgICAuLi4gICAgICAgICBpZiAnRVNUJyBpbiBsaW5lIG9yICdFRFQnIGluIGxpbmU6ICAjIGxvb2sgZm9yIEVhc3Rlcm4gVGltZQorICAgLi4uICAgICAgICAgICAgIHByaW50KGxpbmUpCiAKICAgIDxCUj5Ob3YuIDI1LCAwOTo0MzozMiBQTSBFU1QKIApAQCAtMzA4LDEzICszMjMsMTggQEAKICAgKGluY2x1ZGluZyBhdHRhY2htZW50cykgYW5kIGZvciBpbXBsZW1lbnRpbmcgaW50ZXJuZXQgZW5jb2RpbmcgYW5kIGhlYWRlcgogICBwcm90b2NvbHMuCiAKLSogVGhlIDptb2Q6YHhtbC5kb21gIGFuZCA6bW9kOmB4bWwuc2F4YCBwYWNrYWdlcyBwcm92aWRlIHJvYnVzdCBzdXBwb3J0IGZvcgotICBwYXJzaW5nIHRoaXMgcG9wdWxhciBkYXRhIGludGVyY2hhbmdlIGZvcm1hdC4gTGlrZXdpc2UsIHRoZSA6bW9kOmBjc3ZgIG1vZHVsZQotICBzdXBwb3J0cyBkaXJlY3QgcmVhZHMgYW5kIHdyaXRlcyBpbiBhIGNvbW1vbiBkYXRhYmFzZSBmb3JtYXQuIFRvZ2V0aGVyLCB0aGVzZQotICBtb2R1bGVzIGFuZCBwYWNrYWdlcyBncmVhdGx5IHNpbXBsaWZ5IGRhdGEgaW50ZXJjaGFuZ2UgYmV0d2VlbiBQeXRob24KLSAgYXBwbGljYXRpb25zIGFuZCBvdGhlciB0b29scy4KKyogVGhlIDptb2Q6YGpzb25gIHBhY2thZ2UgcHJvdmlkZXMgcm9idXN0IHN1cHBvcnQgZm9yIHBhcnNpbmcgdGhpcworICBwb3B1bGFyIGRhdGEgaW50ZXJjaGFuZ2UgZm9ybWF0LiAgVGhlIDptb2Q6YGNzdmAgbW9kdWxlIHN1cHBvcnRzCisgIGRpcmVjdCByZWFkaW5nIGFuZCB3cml0aW5nIG9mIGZpbGVzIGluIENvbW1hLVNlcGFyYXRlZCBWYWx1ZSBmb3JtYXQsCisgIGNvbW1vbmx5IHN1cHBvcnRlZCBieSBkYXRhYmFzZXMgYW5kIHNwcmVhZHNoZWV0cy4gIFhNTCBwcm9jZXNzaW5nIGlzCisgIHN1cHBvcnRlZCBieSB0aGUgOm1vZDpgeG1sLmV0cmVlLkVsZW1lbnRUcmVlYCwgOm1vZDpgeG1sLmRvbWAgYW5kCisgIDptb2Q6YHhtbC5zYXhgIHBhY2thZ2VzLiBUb2dldGhlciwgdGhlc2UgbW9kdWxlcyBhbmQgcGFja2FnZXMKKyAgZ3JlYXRseSBzaW1wbGlmeSBkYXRhIGludGVyY2hhbmdlIGJldHdlZW4gUHl0aG9uIGFwcGxpY2F0aW9ucyBhbmQKKyAgb3RoZXIgdG9vbHMuCisKKyogVGhlIDptb2Q6YHNxbGl0ZTNgIG1vZHVsZSBpcyBhIHdyYXBwZXIgZm9yIHRoZSBTUUxpdGUgZGF0YWJhc2UKKyAgbGlicmFyeSwgcHJvdmlkaW5nIGEgcGVyc2lzdGVudCBkYXRhYmFzZSB0aGF0IGNhbiBiZSB1cGRhdGVkIGFuZAorICBhY2Nlc3NlZCB1c2luZyBzbGlnaHRseSBub25zdGFuZGFyZCBTUUwgc3ludGF4LgogCiAqIEludGVybmF0aW9uYWxpemF0aW9uIGlzIHN1cHBvcnRlZCBieSBhIG51bWJlciBvZiBtb2R1bGVzIGluY2x1ZGluZwogICA6bW9kOmBnZXR0ZXh0YCwgOm1vZDpgbG9jYWxlYCwgYW5kIHRoZSA6bW9kOmBjb2RlY3NgIHBhY2thZ2UuCi0KLQpkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0IGIvRG9jL3R1dG9yaWFsL3N0ZGxpYjIucnN0CmluZGV4IGMxZGQ2OWEuLmMwMTk3ZWEgMTAwNjQ0Ci0tLSBhL0RvYy90dXRvcmlhbC9zdGRsaWIyLnJzdAorKysgYi9Eb2MvdHV0b3JpYWwvc3RkbGliMi5yc3QKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgogICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgogICAgICAgIGRbJ3ByaW1hcnknXSAgICAgICAgICAgICAgICAjIGVudHJ5IHdhcyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQKLSAgICAgRmlsZSAiQzovcHl0aG9uMzMvbGliL3dlYWtyZWYucHkiLCBsaW5lIDQ2LCBpbiBfX2dldGl0ZW1fXworICAgICBGaWxlICJDOi9weXRob24zNC9saWIvd2Vha3JlZi5weSIsIGxpbmUgNDYsIGluIF9fZ2V0aXRlbV9fCiAgICAgICAgbyA9IHNlbGYuZGF0YVtrZXldKCkKICAgIEtleUVycm9yOiAncHJpbWFyeScKIApkaWZmIC0tZ2l0IGEvRG9jL3R1dG9yaWFsL3ZlbnYucnN0IGIvRG9jL3R1dG9yaWFsL3ZlbnYucnN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMmVlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2MvdHV0b3JpYWwvdmVudi5yc3QKQEAgLTAsMCArMSwxOTcgQEAKKworLi4gX3R1dC12ZW52OgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1ZpcnR1YWwgRW52aXJvbm1lbnRzIGFuZCBQYWNrYWdlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0ludHJvZHVjdGlvbgorPT09PT09PT09PT09CisKK1B5dGhvbiBhcHBsaWNhdGlvbnMgd2lsbCBvZnRlbiB1c2UgcGFja2FnZXMgYW5kIG1vZHVsZXMgdGhhdCBkb24ndAorY29tZSBhcyBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiAgQXBwbGljYXRpb25zIHdpbGwgc29tZXRpbWVzCituZWVkIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIGxpYnJhcnksIGJlY2F1c2UgdGhlIGFwcGxpY2F0aW9uIG1heQorcmVxdWlyZSB0aGF0IGEgcGFydGljdWxhciBidWcgaGFzIGJlZW4gZml4ZWQgb3IgdGhlIGFwcGxpY2F0aW9uIG1heSBiZQord3JpdHRlbiB1c2luZyBhbiBvYnNvbGV0ZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5J3MgaW50ZXJmYWNlLgorCitUaGlzIG1lYW5zIGl0IG1heSBub3QgYmUgcG9zc2libGUgZm9yIG9uZSBQeXRob24gaW5zdGFsbGF0aW9uIHRvIG1lZXQKK3RoZSByZXF1aXJlbWVudHMgb2YgZXZlcnkgYXBwbGljYXRpb24uICBJZiBhcHBsaWNhdGlvbiBBIG5lZWRzIHZlcnNpb24KKzEuMCBvZiBhIHBhcnRpY3VsYXIgbW9kdWxlIGJ1dCBhcHBsaWNhdGlvbiBCIG5lZWRzIHZlcnNpb24gMi4wLCB0aGVuCit0aGUgcmVxdWlyZW1lbnRzIGFyZSBpbiBjb25mbGljdCBhbmQgaW5zdGFsbGluZyBlaXRoZXIgdmVyc2lvbiAxLjAgb3IgMi4wCit3aWxsIGxlYXZlIG9uZSBhcHBsaWNhdGlvbiB1bmFibGUgdG8gcnVuLgorCitUaGUgc29sdXRpb24gZm9yIHRoaXMgcHJvYmxlbSBpcyB0byBjcmVhdGUgYSA6dGVybTpgdmlydHVhbAorZW52aXJvbm1lbnRgIChvZnRlbiBzaG9ydGVuZWQgdG8gInZpcnR1YWxlbnYiKSwgYSBzZWxmLWNvbnRhaW5lZAorZGlyZWN0b3J5IHRyZWUgdGhhdCBjb250YWlucyBhIFB5dGhvbiBpbnN0YWxsYXRpb24gZm9yIGEgcGFydGljdWxhcgordmVyc2lvbiBvZiBQeXRob24sIHBsdXMgYSBudW1iZXIgb2YgYWRkaXRpb25hbCBwYWNrYWdlcy4KKworRGlmZmVyZW50IGFwcGxpY2F0aW9ucyBjYW4gdGhlbiB1c2UgZGlmZmVyZW50IHZpcnR1YWwgZW52aXJvbm1lbnRzLgorVG8gcmVzb2x2ZSB0aGUgZWFybGllciBleGFtcGxlIG9mIGNvbmZsaWN0aW5nIHJlcXVpcmVtZW50cywKK2FwcGxpY2F0aW9uIEEgY2FuIGhhdmUgaXRzIG93biB2aXJ0dWFsIGVudmlyb25tZW50IHdpdGggdmVyc2lvbiAxLjAKK2luc3RhbGxlZCB3aGlsZSBhcHBsaWNhdGlvbiBCIGhhcyBhbm90aGVyIHZpcnR1YWxlbnYgd2l0aCB2ZXJzaW9uIDIuMC4KK0lmIGFwcGxpY2F0aW9uIEIgcmVxdWlyZXMgYSBsaWJyYXJ5IGJlIHVwZ3JhZGVkIHRvIHZlcnNpb24gMy4wLCB0aGlzIHdpbGwKK25vdCBhZmZlY3QgYXBwbGljYXRpb24gQSdzIGVudmlyb25tZW50LgorCisKK0NyZWF0aW5nIFZpcnR1YWwgRW52aXJvbm1lbnRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgc2NyaXB0IHVzZWQgdG8gY3JlYXRlIGFuZCBtYW5hZ2UgdmlydHVhbCBlbnZpcm9ubWVudHMgaXMgY2FsbGVkCis6cHJvZ3JhbTpgcHl2ZW52YC4gIDpwcm9ncmFtOmBweXZlbnZgIHdpbGwgdXN1YWxseSBpbnN0YWxsIHRoZSBtb3N0CityZWNlbnQgdmVyc2lvbiBvZiBQeXRob24gdGhhdCB5b3UgaGF2ZSBhdmFpbGFibGU7IHRoZSBzY3JpcHQgaXMgYWxzbworaW5zdGFsbGVkIHdpdGggYSB2ZXJzaW9uIG51bWJlciwgc28gaWYgeW91IGhhdmUgbXVsdGlwbGUgdmVyc2lvbnMgb2YKK1B5dGhvbiBvbiB5b3VyIHN5c3RlbSB5b3UgY2FuIHNlbGVjdCBhIHNwZWNpZmljIFB5dGhvbiB2ZXJzaW9uIGJ5CitydW5uaW5nIGBgcHl2ZW52LTMuNGBgIG9yIHdoaWNoZXZlciB2ZXJzaW9uIHlvdSB3YW50LgorCitUbyBjcmVhdGUgYSB2aXJ0dWFsZW52LCBkZWNpZGUgdXBvbiBhIGRpcmVjdG9yeQord2hlcmUgeW91IHdhbnQgdG8gcGxhY2UgaXQgYW5kIHJ1biA6cHJvZ3JhbTpgcHl2ZW52YCB3aXRoIHRoZQorZGlyZWN0b3J5IHBhdGg6OgorCisgICBweXZlbnYgdHV0b3JpYWwtZW52CisKK1RoaXMgd2lsbCBjcmVhdGUgdGhlIGBgdHV0b3JpYWwtZW52YGAgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3QsCithbmQgYWxzbyBjcmVhdGUgZGlyZWN0b3JpZXMgaW5zaWRlIGl0IGNvbnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBQeXRob24KK2ludGVycHJldGVyLCB0aGUgc3RhbmRhcmQgbGlicmFyeSwgYW5kIHZhcmlvdXMgc3VwcG9ydGluZyBmaWxlcy4KKworT25jZSB5b3UndmUgY3JlYXRlZCBhIHZpcnR1YWwgZW52aXJvbm1lbnQsIHlvdSBuZWVkIHRvCithY3RpdmF0ZSBpdC4KKworT24gV2luZG93cywgcnVuOjoKKworICB0dXRvcmlhbC1lbnYvU2NyaXB0cy9hY3RpdmF0ZQorCitPbiBVbml4IG9yIE1hY09TLCBydW46OgorCisgIHNvdXJjZSB0dXRvcmlhbC1lbnYvYmluL2FjdGl2YXRlCisKKyhUaGlzIHNjcmlwdCBpcyB3cml0dGVuIGZvciB0aGUgYmFzaCBzaGVsbC4gIElmIHlvdSB1c2UgdGhlCis6cHJvZ3JhbTpgY3NoYCBvciA6cHJvZ3JhbTpgZmlzaGAgc2hlbGxzLCB0aGVyZSBhcmUgYWx0ZXJuYXRlCitgYGFjdGl2YXRlLmNzaGBgIGFuZCBgYGFjdGl2YXRlLmZpc2hgYCBzY3JpcHRzIHlvdSBzaG91bGQgdXNlCitpbnN0ZWFkLikKKworQWN0aXZhdGluZyB0aGUgdmlydHVhbGVudiB3aWxsIGNoYW5nZSB5b3VyIHNoZWxsJ3MgcHJvbXB0IHRvIHNob3cgd2hhdAordmlydHVhbGVudiB5b3UncmUgdXNpbmcsIGFuZCBtb2RpZnkgdGhlIGVudmlyb25tZW50IHNvIHRoYXQgcnVubmluZworYGBweXRob25gYCB3aWxsIGdldCB5b3UgdGhhdCBwYXJ0aWN1bGFyIHZlcnNpb24gYW5kIGluc3RhbGxhdGlvbiBvZgorUHl0aG9uLiAgRm9yIGV4YW1wbGU6OgorCisgIC0+IHNvdXJjZSB+L2VudnMvdHV0b3JpYWwtZW52L2Jpbi9hY3RpdmF0ZQorICAodHV0b3JpYWwtZW52KSAtPiBweXRob24KKyAgUHl0aG9uIDMuNC4zKyAoMy40OmM3Yjk2NDVhNmYzNSssIE1heSAyMiAyMDE1LCAwOTozMToyNSkKKyAgICAuLi4KKyAgPj4+IGltcG9ydCBzeXMKKyAgPj4+IHN5cy5wYXRoCisgIFsnJywgJy91c3IvbG9jYWwvbGliL3B5dGhvbjM0LnppcCcsIC4uLiwKKyAgJ34vZW52cy90dXRvcmlhbC1lbnYvbGliL3B5dGhvbjMuNC9zaXRlLXBhY2thZ2VzJ10KKyAgPj4+CisKKworTWFuYWdpbmcgUGFja2FnZXMgd2l0aCBwaXAKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09uY2UgeW91J3ZlIGFjdGl2YXRlZCBhIHZpcnR1YWwgZW52aXJvbm1lbnQsIHlvdSBjYW4gaW5zdGFsbCwgdXBncmFkZSwKK2FuZCByZW1vdmUgcGFja2FnZXMgdXNpbmcgYSBwcm9ncmFtIGNhbGxlZCA6cHJvZ3JhbTpgcGlwYC4gIEJ5IGRlZmF1bHQKK2BgcGlwYGAgd2lsbCBpbnN0YWxsIHBhY2thZ2VzIGZyb20gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LAorPGh0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGk+LiAgWW91IGNhbiBicm93c2UgdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4CitieSBnb2luZyB0byBpdCBpbiB5b3VyIHdlYiBicm93c2VyLCBvciB5b3UgY2FuIHVzZSBgYHBpcGBgJ3MKK2xpbWl0ZWQgc2VhcmNoIGZlYXR1cmU6OgorCisgICh0dXRvcmlhbC1lbnYpIC0+IHBpcCBzZWFyY2ggYXN0cm9ub215CisgIHNreWZpZWxkICAgICAgICAgICAgICAgLSBFbGVnYW50IGFzdHJvbm9teSBmb3IgUHl0aG9uCisgIGdhcnkgICAgICAgICAgICAgICAgICAgLSBHYWxhY3RpYyBhc3Ryb25vbXkgYW5kIGdyYXZpdGF0aW9uYWwgZHluYW1pY3MuCisgIG5vdmFzICAgICAgICAgICAgICAgICAgLSBUaGUgVW5pdGVkIFN0YXRlcyBOYXZhbCBPYnNlcnZhdG9yeSBOT1ZBUyBhc3Ryb25vbXkgbGlicmFyeQorICBhc3Ryb29icyAgICAgICAgICAgICAgIC0gUHJvdmlkZXMgYXN0cm9ub215IGVwaGVtZXJpcyB0byBwbGFuIHRlbGVzY29wZSBvYnNlcnZhdGlvbnMKKyAgUHlBc3Ryb25vbXkgICAgICAgICAgICAtIEEgY29sbGVjdGlvbiBvZiBhc3Ryb25vbXkgcmVsYXRlZCB0b29scyBmb3IgUHl0aG9uLgorICAuLi4KKworYGBwaXBgYCBoYXMgYSBudW1iZXIgb2Ygc3ViY29tbWFuZHM6ICJzZWFyY2giLCAiaW5zdGFsbCIsICJ1bmluc3RhbGwiLAorImZyZWV6ZSIsIGV0Yy4gIChDb25zdWx0IHRoZSA6cmVmOmBpbnN0YWxsaW5nLWluZGV4YCBndWlkZSBmb3IKK2NvbXBsZXRlIGRvY3VtZW50YXRpb24gZm9yIGBgcGlwYGAuKQorCitZb3UgY2FuIGluc3RhbGwgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgcGFja2FnZSBieSBzcGVjaWZ5aW5nIGEgcGFja2FnZSdzIG5hbWU6OgorCisgIC0+IHBpcCBpbnN0YWxsIG5vdmFzCisgIENvbGxlY3Rpbmcgbm92YXMKKyAgICBEb3dubG9hZGluZyBub3Zhcy0zLjEuMS4zLnRhci5neiAoMTM2a0IpCisgIEluc3RhbGxpbmcgY29sbGVjdGVkIHBhY2thZ2VzOiBub3ZhcworICAgIFJ1bm5pbmcgc2V0dXAucHkgaW5zdGFsbCBmb3Igbm92YXMKKyAgU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCBub3Zhcy0zLjEuMS4zCisKK1lvdSBjYW4gYWxzbyBpbnN0YWxsIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIHBhY2thZ2UgYnkgZ2l2aW5nIHRoZQorcGFja2FnZSBuYW1lICBmb2xsb3dlZCBieSBgYD09YGAgYW5kIHRoZSB2ZXJzaW9uIG51bWJlcjo6CisKKyAgLT4gcGlwIGluc3RhbGwgcmVxdWVzdHM9PTIuNi4wCisgIENvbGxlY3RpbmcgcmVxdWVzdHM9PTIuNi4wCisgICAgVXNpbmcgY2FjaGVkIHJlcXVlc3RzLTIuNi4wLXB5Mi5weTMtbm9uZS1hbnkud2hsCisgIEluc3RhbGxpbmcgY29sbGVjdGVkIHBhY2thZ2VzOiByZXF1ZXN0cworICBTdWNjZXNzZnVsbHkgaW5zdGFsbGVkIHJlcXVlc3RzLTIuNi4wCisKK0lmIHlvdSByZS1ydW4gdGhpcyBjb21tYW5kLCBgYHBpcGBgIHdpbGwgbm90aWNlIHRoYXQgdGhlIHJlcXVlc3RlZAordmVyc2lvbiBpcyBhbHJlYWR5IGluc3RhbGxlZCBhbmQgZG8gbm90aGluZy4gIFlvdSBjYW4gc3VwcGx5IGEKK2RpZmZlcmVudCB2ZXJzaW9uIG51bWJlciB0byBnZXQgdGhhdCB2ZXJzaW9uLCBvciB5b3UgY2FuIHJ1biBgYHBpcAoraW5zdGFsbCAtLXVwZ3JhZGVgYCB0byB1cGdyYWRlIHRoZSBwYWNrYWdlIHRvIHRoZSBsYXRlc3QgdmVyc2lvbjo6CisKKyAgLT4gcGlwIGluc3RhbGwgLS11cGdyYWRlIHJlcXVlc3RzCisgIENvbGxlY3RpbmcgcmVxdWVzdHMKKyAgSW5zdGFsbGluZyBjb2xsZWN0ZWQgcGFja2FnZXM6IHJlcXVlc3RzCisgICAgRm91bmQgZXhpc3RpbmcgaW5zdGFsbGF0aW9uOiByZXF1ZXN0cyAyLjYuMAorICAgICAgVW5pbnN0YWxsaW5nIHJlcXVlc3RzLTIuNi4wOgorICAgICAgICBTdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQgcmVxdWVzdHMtMi42LjAKKyAgU3VjY2Vzc2Z1bGx5IGluc3RhbGxlZCByZXF1ZXN0cy0yLjcuMAorCitgYHBpcCB1bmluc3RhbGxgYCBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSBwYWNrYWdlIG5hbWVzIHdpbGwgcmVtb3ZlIHRoZQorcGFja2FnZXMgZnJvbSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKworYGBwaXAgc2hvd2BgIHdpbGwgZGlzcGxheSBpbmZvcm1hdGlvbiBhYm91dCBhIHBhcnRpY3VsYXIgcGFja2FnZTo6CisKKyAgKHR1dG9yaWFsLWVudikgLT4gcGlwIHNob3cgcmVxdWVzdHMKKyAgLS0tCisgIE1ldGFkYXRhLVZlcnNpb246IDIuMAorICBOYW1lOiByZXF1ZXN0cworICBWZXJzaW9uOiAyLjcuMAorICBTdW1tYXJ5OiBQeXRob24gSFRUUCBmb3IgSHVtYW5zLgorICBIb21lLXBhZ2U6IGh0dHA6Ly9weXRob24tcmVxdWVzdHMub3JnCisgIEF1dGhvcjogS2VubmV0aCBSZWl0egorICBBdXRob3ItZW1haWw6IG1lQGtlbm5ldGhyZWl0ei5jb20KKyAgTGljZW5zZTogQXBhY2hlIDIuMAorICBMb2NhdGlvbjogL1VzZXJzL2FrdWNobGluZy9lbnZzL3R1dG9yaWFsLWVudi9saWIvcHl0aG9uMy40L3NpdGUtcGFja2FnZXMKKyAgUmVxdWlyZXM6CisKK2BgcGlwIGxpc3RgYCB3aWxsIGRpc3BsYXkgYWxsIG9mIHRoZSBwYWNrYWdlcyBpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwKK2Vudmlyb25tZW50OjoKKworICAodHV0b3JpYWwtZW52KSAtPiBwaXAgbGlzdAorICBub3ZhcyAoMy4xLjEuMykKKyAgbnVtcHkgKDEuOS4yKQorICBwaXAgKDcuMC4zKQorICByZXF1ZXN0cyAoMi43LjApCisgIHNldHVwdG9vbHMgKDE2LjApCisKK2BgcGlwIGZyZWV6ZWBgIHdpbGwgcHJvZHVjZSBhIHNpbWlsYXIgbGlzdCBvZiB0aGUgaW5zdGFsbGVkIHBhY2thZ2VzLAorYnV0IHRoZSBvdXRwdXQgdXNlcyB0aGUgZm9ybWF0IHRoYXQgYGBwaXAgaW5zdGFsbGBgIGV4cGVjdHMuCitBIGNvbW1vbiBjb252ZW50aW9uIGlzIHRvIHB1dCB0aGlzIGxpc3QgaW4gYSBgYHJlcXVpcmVtZW50cy50eHRgYCBmaWxlOjoKKworICAodHV0b3JpYWwtZW52KSAtPiBwaXAgZnJlZXplID4gcmVxdWlyZW1lbnRzLnR4dAorICAodHV0b3JpYWwtZW52KSAtPiBjYXQgcmVxdWlyZW1lbnRzLnR4dAorICBub3Zhcz09My4xLjEuMworICBudW1weT09MS45LjIKKyAgcmVxdWVzdHM9PTIuNy4wCisKK1RoZSBgYHJlcXVpcmVtZW50cy50eHRgYCBjYW4gdGhlbiBiZSBjb21taXR0ZWQgdG8gdmVyc2lvbiBjb250cm9sIGFuZAorc2hpcHBlZCBhcyBwYXJ0IG9mIGFuIGFwcGxpY2F0aW9uLiAgVXNlcnMgY2FuIHRoZW4gaW5zdGFsbCBhbGwgdGhlCituZWNlc3NhcnkgcGFja2FnZXMgd2l0aCBgYGluc3RhbGwgLXJgYDo6CisKKyAgLT4gcGlwIGluc3RhbGwgLXIgcmVxdWlyZW1lbnRzLnR4dAorICBDb2xsZWN0aW5nIG5vdmFzPT0zLjEuMS4zIChmcm9tIC1yIHJlcXVpcmVtZW50cy50eHQgKGxpbmUgMSkpCisgICAgLi4uCisgIENvbGxlY3RpbmcgbnVtcHk9PTEuOS4yIChmcm9tIC1yIHJlcXVpcmVtZW50cy50eHQgKGxpbmUgMikpCisgICAgLi4uCisgIENvbGxlY3RpbmcgcmVxdWVzdHM9PTIuNy4wIChmcm9tIC1yIHJlcXVpcmVtZW50cy50eHQgKGxpbmUgMykpCisgICAgLi4uCisgIEluc3RhbGxpbmcgY29sbGVjdGVkIHBhY2thZ2VzOiBub3ZhcywgbnVtcHksIHJlcXVlc3RzCisgICAgUnVubmluZyBzZXR1cC5weSBpbnN0YWxsIGZvciBub3ZhcworICBTdWNjZXNzZnVsbHkgaW5zdGFsbGVkIG5vdmFzLTMuMS4xLjMgbnVtcHktMS45LjIgcmVxdWVzdHMtMi43LjAKKworYGBwaXBgYCBoYXMgbWFueSBtb3JlIG9wdGlvbnMuICBDb25zdWx0IHRoZSA6cmVmOmBpbnN0YWxsaW5nLWluZGV4YAorZ3VpZGUgZm9yIGNvbXBsZXRlIGRvY3VtZW50YXRpb24gZm9yIGBgcGlwYGAuICBXaGVuIHlvdSd2ZSB3cml0dGVuCithIHBhY2thZ2UgYW5kIHdhbnQgdG8gbWFrZSBpdCBhdmFpbGFibGUgb24gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LAorY29uc3VsdCB0aGUgOnJlZjpgZGlzdHJpYnV0aW5nLWluZGV4YCBndWlkZS4KZGlmZiAtLWdpdCBhL0RvYy90dXRvcmlhbC93aGF0bm93LnJzdCBiL0RvYy90dXRvcmlhbC93aGF0bm93LnJzdAppbmRleCA3ZmNiZGMzZi4uNDc5NTQyYyAxMDA2NDQKLS0tIGEvRG9jL3R1dG9yaWFsL3doYXRub3cucnN0CisrKyBiL0RvYy90dXRvcmlhbC93aGF0bm93LnJzdApAQCAtMjEsOCArMjEsOCBAQAogICBhbmQgbWFueSBvdGhlciB0YXNrcy4gU2tpbW1pbmcgdGhyb3VnaCB0aGUgTGlicmFyeSBSZWZlcmVuY2Ugd2lsbCBnaXZlIHlvdSBhbgogICBpZGVhIG9mIHdoYXQncyBhdmFpbGFibGUuCiAKLSogOnJlZjpgaW5zdGFsbC1pbmRleGAgZXhwbGFpbnMgaG93IHRvIGluc3RhbGwgZXh0ZXJuYWwgbW9kdWxlcyB3cml0dGVuIGJ5IG90aGVyCi0gIFB5dGhvbiB1c2Vycy4KKyogOnJlZjpgaW5zdGFsbGluZy1pbmRleGAgZXhwbGFpbnMgaG93IHRvIGluc3RhbGwgYWRkaXRpb25hbCBtb2R1bGVzIHdyaXR0ZW4KKyAgYnkgb3RoZXIgUHl0aG9uIHVzZXJzLgogCiAqIDpyZWY6YHJlZmVyZW5jZS1pbmRleGA6IEEgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgUHl0aG9uJ3Mgc3ludGF4IGFuZAogICBzZW1hbnRpY3MuICBJdCdzIGhlYXZ5IHJlYWRpbmcsIGJ1dCBpcyB1c2VmdWwgYXMgYSBjb21wbGV0ZSBndWlkZSB0byB0aGUKQEAgLTMwLDI0ICszMCwyNyBAQAogCiBNb3JlIFB5dGhvbiByZXNvdXJjZXM6CiAKLSogaHR0cDovL3d3dy5weXRob24ub3JnOiAgVGhlIG1ham9yIFB5dGhvbiBXZWIgc2l0ZS4gIEl0IGNvbnRhaW5zIGNvZGUsCisqIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmc6ICBUaGUgbWFqb3IgUHl0aG9uIFdlYiBzaXRlLiAgSXQgY29udGFpbnMgY29kZSwKICAgZG9jdW1lbnRhdGlvbiwgYW5kIHBvaW50ZXJzIHRvIFB5dGhvbi1yZWxhdGVkIHBhZ2VzIGFyb3VuZCB0aGUgV2ViLiAgVGhpcyBXZWIKICAgc2l0ZSBpcyBtaXJyb3JlZCBpbiB2YXJpb3VzIHBsYWNlcyBhcm91bmQgdGhlIHdvcmxkLCBzdWNoIGFzIEV1cm9wZSwgSmFwYW4sIGFuZAogICBBdXN0cmFsaWE7IGEgbWlycm9yIG1heSBiZSBmYXN0ZXIgdGhhbiB0aGUgbWFpbiBzaXRlLCBkZXBlbmRpbmcgb24geW91cgogICBnZW9ncmFwaGljYWwgbG9jYXRpb24uCiAKLSogaHR0cDovL2RvY3MucHl0aG9uLm9yZzogIEZhc3QgYWNjZXNzIHRvIFB5dGhvbidzICBkb2N1bWVudGF0aW9uLgorKiBodHRwczovL2RvY3MucHl0aG9uLm9yZzogIEZhc3QgYWNjZXNzIHRvIFB5dGhvbidzICBkb2N1bWVudGF0aW9uLgogCi0qIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmc6IFRoZSBQeXRob24gUGFja2FnZSBJbmRleCwgcHJldmlvdXNseSBhbHNvIG5pY2tuYW1lZAorKiBodHRwczovL3B5cGkucHl0aG9uLm9yZy9weXBpOiBUaGUgUHl0aG9uIFBhY2thZ2UgSW5kZXgsIHByZXZpb3VzbHkgYWxzbyBuaWNrbmFtZWQKICAgdGhlIENoZWVzZSBTaG9wLCBpcyBhbiBpbmRleCBvZiB1c2VyLWNyZWF0ZWQgUHl0aG9uIG1vZHVsZXMgdGhhdCBhcmUgYXZhaWxhYmxlCiAgIGZvciBkb3dubG9hZC4gIE9uY2UgeW91IGJlZ2luIHJlbGVhc2luZyBjb2RlLCB5b3UgY2FuIHJlZ2lzdGVyIGl0IGhlcmUgc28gdGhhdAogICBvdGhlcnMgY2FuIGZpbmQgaXQuCiAKLSogaHR0cDovL2FzcG4uYWN0aXZlc3RhdGUuY29tL0FTUE4vUHl0aG9uL0Nvb2tib29rLzogVGhlIFB5dGhvbiBDb29rYm9vayBpcyBhCisqIGh0dHA6Ly9jb2RlLmFjdGl2ZXN0YXRlLmNvbS9yZWNpcGVzL2xhbmdzL3B5dGhvbi86IFRoZSBQeXRob24gQ29va2Jvb2sgaXMgYQogICBzaXphYmxlIGNvbGxlY3Rpb24gb2YgY29kZSBleGFtcGxlcywgbGFyZ2VyIG1vZHVsZXMsIGFuZCB1c2VmdWwgc2NyaXB0cy4KICAgUGFydGljdWxhcmx5IG5vdGFibGUgY29udHJpYnV0aW9ucyBhcmUgY29sbGVjdGVkIGluIGEgYm9vayBhbHNvIHRpdGxlZCBQeXRob24KICAgQ29va2Jvb2sgKE8nUmVpbGx5ICYgQXNzb2NpYXRlcywgSVNCTiAwLTU5Ni0wMDc5Ny0zLikKIAorKiBodHRwOi8vd3d3LnB5dmlkZW8ub3JnIGNvbGxlY3RzIGxpbmtzIHRvIFB5dGhvbi1yZWxhdGVkIHZpZGVvcyBmcm9tCisgIGNvbmZlcmVuY2VzIGFuZCB1c2VyLWdyb3VwIG1lZXRpbmdzLgorCiAqIGh0dHA6Ly9zY2lweS5vcmc6IFRoZSBTY2llbnRpZmljIFB5dGhvbiBwcm9qZWN0IGluY2x1ZGVzIG1vZHVsZXMgZm9yIGZhc3QKICAgYXJyYXkgY29tcHV0YXRpb25zIGFuZCBtYW5pcHVsYXRpb25zIHBsdXMgYSBob3N0IG9mIHBhY2thZ2VzIGZvciBzdWNoCiAgIHRoaW5ncyBhcyBsaW5lYXIgYWxnZWJyYSwgRm91cmllciB0cmFuc2Zvcm1zLCBub24tbGluZWFyIHNvbHZlcnMsCkBAIC01NywxNCArNjAsMTEgQEAKIDpuZXdzZ3JvdXA6YGNvbXAubGFuZy5weXRob25gLCBvciBzZW5kIHRoZW0gdG8gdGhlIG1haWxpbmcgbGlzdCBhdAogcHl0aG9uLWxpc3RAcHl0aG9uLm9yZy4gIFRoZSBuZXdzZ3JvdXAgYW5kIG1haWxpbmcgbGlzdCBhcmUgZ2F0ZXdheWVkLCBzbwogbWVzc2FnZXMgcG9zdGVkIHRvIG9uZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgZm9yd2FyZGVkIHRvIHRoZSBvdGhlci4gIFRoZXJlIGFyZQotYXJvdW5kIDEyMCBwb3N0aW5ncyBhIGRheSAod2l0aCBwZWFrcyB1cCB0byBzZXZlcmFsIGh1bmRyZWQpLCBhc2tpbmcgKGFuZAoraHVuZHJlZHMgb2YgcG9zdGluZ3MgYSBkYXksIGFza2luZyAoYW5kCiBhbnN3ZXJpbmcpIHF1ZXN0aW9ucywgc3VnZ2VzdGluZyBuZXcgZmVhdHVyZXMsIGFuZCBhbm5vdW5jaW5nIG5ldyBtb2R1bGVzLgotQmVmb3JlIHBvc3RpbmcsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIGxpc3Qgb2YgOnJlZjpgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKLTxmYXEtaW5kZXg+YCAoYWxzbyBjYWxsZWQgdGhlIEZBUSkuCi1NYWlsaW5nIGxpc3QgYXJjaGl2ZXMgYXJlIGF2YWlsYWJsZSBhdCBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC8uCi1UaGUgRkFRIGFuc3dlcnMgbWFueSBvZiB0aGUgcXVlc3Rpb25zIHRoYXQgY29tZSB1cCBhZ2FpbiBhbmQgYWdhaW4sCi1hbmQgbWF5IGFscmVhZHkgY29udGFpbiB0aGUgc29sdXRpb24gZm9yIHlvdXIgcHJvYmxlbS4KK01haWxpbmcgbGlzdCBhcmNoaXZlcyBhcmUgYXZhaWxhYmxlIGF0IGh0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC8uCiAKLS4uIFBvc3RpbmdzIGZpZ3VyZSBiYXNlZCBvbiBhdmVyYWdlIG9mIGxhc3Qgc2l4IG1vbnRocyBhY3Rpdml0eSBhcwotICAgcmVwb3J0ZWQgYnkgd3d3LmVncm91cHMuY29tOyBKYW4uIDIwMDAgLSBKdW5lIDIwMDA6IDIxMjcyIG1zZ3MgLyAxODIKLSAgIGRheXMgPSAxMTYuOSBtc2dzIC8gZGF5IGFuZCBzdGVhZGlseSBpbmNyZWFzaW5nLiAoWFhYIHVwIHRvIGRhdGUgZmlndXJlcz8pCitCZWZvcmUgcG9zdGluZywgYmUgc3VyZSB0byBjaGVjayB0aGUgbGlzdCBvZgorOnJlZjpgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgPGZhcS1pbmRleD5gIChhbHNvIGNhbGxlZCB0aGUgRkFRKS4gIFRoZQorRkFRIGFuc3dlcnMgbWFueSBvZiB0aGUgcXVlc3Rpb25zIHRoYXQgY29tZSB1cCBhZ2FpbiBhbmQgYWdhaW4sIGFuZCBtYXkKK2FscmVhZHkgY29udGFpbiB0aGUgc29sdXRpb24gZm9yIHlvdXIgcHJvYmxlbS4KZGlmZiAtLWdpdCBhL0RvYy91c2luZy9jbWRsaW5lLnJzdCBiL0RvYy91c2luZy9jbWRsaW5lLnJzdAppbmRleCA0ZTcxNjhmLi5hNDYzNDliIDEwMDY0NAotLS0gYS9Eb2MvdXNpbmcvY21kbGluZS5yc3QKKysrIGIvRG9jL3VzaW5nL2NtZGxpbmUucnN0CkBAIC0xLDcgKzEsNyBAQAotLi4gaGlnaGxpZ2h0bGFuZzo6IG5vbmUKKy4uIGhpZ2hsaWdodGxhbmc6OiBzaAogCiAuLiBBVFRFTlRJT046IFlvdSBwcm9iYWJseSBzaG91bGQgdXBkYXRlIE1pc2MvcHl0aG9uLm1hbiwgdG9vLCBpZiB5b3UgbW9kaWZ5Ci0uLiB0aGlzIGZpbGUuCisgICB0aGlzIGZpbGUuCiAKIC4uIF91c2luZy1vbi1nZW5lcmFsOgogCkBAIC0yNCw3ICsyNCw3IEBACiAKIFdoZW4gaW52b2tpbmcgUHl0aG9uLCB5b3UgbWF5IHNwZWNpZnkgYW55IG9mIHRoZXNlIG9wdGlvbnM6OgogCi0gICAgcHl0aG9uIFstYkJkRWhpT3FzU3V2Vld4P10gWy1jIGNvbW1hbmQgfCAtbSBtb2R1bGUtbmFtZSB8IHNjcmlwdCB8IC0gXSBbYXJnc10KKyAgICBweXRob24gWy1iQmRFaGlJT3FzU3V2Vld4P10gWy1jIGNvbW1hbmQgfCAtbSBtb2R1bGUtbmFtZSB8IHNjcmlwdCB8IC0gXSBbYXJnc10KIAogVGhlIG1vc3QgY29tbW9uIHVzZSBjYXNlIGlzLCBvZiBjb3Vyc2UsIGEgc2ltcGxlIGludm9jYXRpb24gb2YgYSBzY3JpcHQ6OgogCkBAIC00MSw3ICs0MSw3IEBACiAKICogV2hlbiBjYWxsZWQgd2l0aCBzdGFuZGFyZCBpbnB1dCBjb25uZWN0ZWQgdG8gYSB0dHkgZGV2aWNlLCBpdCBwcm9tcHRzIGZvcgogICBjb21tYW5kcyBhbmQgZXhlY3V0ZXMgdGhlbSB1bnRpbCBhbiBFT0YgKGFuIGVuZC1vZi1maWxlIGNoYXJhY3RlciwgeW91IGNhbgotICBwcm9kdWNlIHRoYXQgd2l0aCAqQ3RybC1EKiBvbiBVTklYIG9yICpDdHJsLVosIEVudGVyKiBvbiBXaW5kb3dzKSBpcyByZWFkLgorICBwcm9kdWNlIHRoYXQgd2l0aCA6a2JkOmBDdHJsLURgIG9uIFVOSVggb3IgOmtiZDpgQ3RybC1aLCBFbnRlcmAgb24gV2luZG93cykgaXMgcmVhZC4KICogV2hlbiBjYWxsZWQgd2l0aCBhIGZpbGUgbmFtZSBhcmd1bWVudCBvciB3aXRoIGEgZmlsZSBhcyBzdGFuZGFyZCBpbnB1dCwgaXQKICAgcmVhZHMgYW5kIGV4ZWN1dGVzIGEgc2NyaXB0IGZyb20gdGhhdCBmaWxlLgogKiBXaGVuIGNhbGxlZCB3aXRoIGEgZGlyZWN0b3J5IG5hbWUgYXJndW1lbnQsIGl0IHJlYWRzIGFuZCBleGVjdXRlcyBhbgpAQCAtODEsNyArODEsOCBAQAogICAgdGhlIGltcGxlbWVudGF0aW9uIG1heSBub3QgYWx3YXlzIGVuZm9yY2UgdGhpcyAoZS5nLiBpdCBtYXkgYWxsb3cgeW91IHRvCiAgICB1c2UgYSBuYW1lIHRoYXQgaW5jbHVkZXMgYSBoeXBoZW4pLgogCi0gICBQYWNrYWdlIG5hbWVzIGFyZSBhbHNvIHBlcm1pdHRlZC4gV2hlbiBhIHBhY2thZ2UgbmFtZSBpcyBzdXBwbGllZCBpbnN0ZWFkCisgICBQYWNrYWdlIG5hbWVzIChpbmNsdWRpbmcgbmFtZXNwYWNlIHBhY2thZ2VzKSBhcmUgYWxzbyBwZXJtaXR0ZWQuIFdoZW4gYQorICAgcGFja2FnZSBuYW1lIGlzIHN1cHBsaWVkIGluc3RlYWQKICAgIG9mIGEgbm9ybWFsIG1vZHVsZSwgdGhlIGludGVycHJldGVyIHdpbGwgZXhlY3V0ZSBgYDxwa2c+Ll9fbWFpbl9fYGAgYXMKICAgIHRoZSBtYWluIG1vZHVsZS4gVGhpcyBiZWhhdmlvdXIgaXMgZGVsaWJlcmF0ZWx5IHNpbWlsYXIgdG8gdGhlIGhhbmRsaW5nCiAgICBvZiBkaXJlY3RvcmllcyBhbmQgemlwZmlsZXMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZSBpbnRlcnByZXRlciBhcyB0aGUKQEAgLTExNSw2ICsxMTYsOSBAQAogICAgLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjEKICAgICAgIFN1cHBseSB0aGUgcGFja2FnZSBuYW1lIHRvIHJ1biBhIGBgX19tYWluX19gYCBzdWJtb2R1bGUuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBuYW1lc3BhY2UgcGFja2FnZXMgYXJlIGFsc28gc3VwcG9ydGVkCisKIAogLi4gZGVzY3JpYmU6OiAtCiAKQEAgLTE0NCwxMyArMTQ4LDIyIEBACiAgICBhZGRlZCB0byB0aGUgc3RhcnQgb2YgOmRhdGE6YHN5cy5wYXRoYCBhbmQgdGhlIGBgX19tYWluX18ucHlgYCBmaWxlIGluCiAgICB0aGF0IGxvY2F0aW9uIGlzIGV4ZWN1dGVkIGFzIHRoZSA6bW9kOmBfX21haW5fX2AgbW9kdWxlLgogCisgICAuLiBzZWVhbHNvOjoKKyAgICAgIDpmdW5jOmBydW5weS5ydW5fcGF0aGAKKyAgICAgICAgIEVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBhdmFpbGFibGUgdG8gUHl0aG9uIGNvZGUKKwogCiBJZiBubyBpbnRlcmZhY2Ugb3B0aW9uIGlzIGdpdmVuLCA6b3B0aW9uOmAtaWAgaXMgaW1wbGllZCwgYGBzeXMuYXJndlswXWBgIGlzCiBhbiBlbXB0eSBzdHJpbmcgKGBgIiJgYCkgYW5kIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB3aWxsIGJlIGFkZGVkIHRvIHRoZQotc3RhcnQgb2YgOmRhdGE6YHN5cy5wYXRoYC4KK3N0YXJ0IG9mIDpkYXRhOmBzeXMucGF0aGAuICBBbHNvLCB0YWItY29tcGxldGlvbiBhbmQgaGlzdG9yeSBlZGl0aW5nIGlzCithdXRvbWF0aWNhbGx5IGVuYWJsZWQsIGlmIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtIChzZWUKKzpyZWY6YHJsY29tcGxldGVyLWNvbmZpZ2ApLgogCiAuLiBzZWVhbHNvOjogIDpyZWY6YHR1dC1pbnZva2luZ2AKIAorLi4gdmVyc2lvbmNoYW5nZWQ6OiAzLjQKKyAgIEF1dG9tYXRpYyBlbmFibGluZyBvZiB0YWItY29tcGxldGlvbiBhbmQgaGlzdG9yeSBlZGl0aW5nLgorCiAKIEdlbmVyaWMgb3B0aW9ucwogfn5+fn5+fn5+fn5+fn5+CkBAIC0xNzAsNiArMTgzLDggQEAKICAgICAgICBQeXRob24gMy4wCiAKIAorLi4gX3VzaW5nLW9uLW1pc2Mtb3B0aW9uczoKKwogTWlzY2VsbGFuZW91cyBvcHRpb25zCiB+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIApAQCAtMjA4LDYgKzIyMywxNyBAQAogICAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gIFNlZSBhbHNvIDplbnZ2YXI6YFBZVEhPTklOU1BFQ1RgLgogCiAKKy4uIGNtZG9wdGlvbjo6IC1JCisKKyAgIFJ1biBQeXRob24gaW4gaXNvbGF0ZWQgbW9kZS4gVGhpcyBhbHNvIGltcGxpZXMgLUUgYW5kIC1zLgorICAgSW4gaXNvbGF0ZWQgbW9kZSA6ZGF0YTpgc3lzLnBhdGhgIGNvbnRhaW5zIG5laXRoZXIgdGhlIHNjcmlwdCdzIGRpcmVjdG9yeSBub3IKKyAgIHRoZSB1c2VyJ3Mgc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuIEFsbCA6ZW52dmFyOmBQWVRIT04qYCBlbnZpcm9ubWVudAorICAgdmFyaWFibGVzIGFyZSBpZ25vcmVkLCB0b28uIEZ1cnRoZXIgcmVzdHJpY3Rpb25zIG1heSBiZSBpbXBvc2VkIHRvIHByZXZlbnQKKyAgIHRoZSB1c2VyIGZyb20gaW5qZWN0aW5nIG1hbGljaW91cyBjb2RlLgorCisgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjQKKworCiAuLiBjbWRvcHRpb246OiAtTwogCiAgICBUdXJuIG9uIGJhc2ljIG9wdGltaXphdGlvbnMuICBUaGlzIGNoYW5nZXMgdGhlIGZpbGVuYW1lIGV4dGVuc2lvbiBmb3IKQEAgLTM1OCw5ICszODQsMTkgQEAKIC4uIGNtZG9wdGlvbjo6IC1YCiAKICAgIFJlc2VydmVkIGZvciB2YXJpb3VzIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG9wdGlvbnMuICBDUHl0aG9uIGN1cnJlbnRseQotICAgZGVmaW5lcyBqdXN0IG9uZSwgeW91IGNhbiB1c2UgYGAtWCBmYXVsdGhhbmRsZXJgYCB0byBlbmFibGUKLSAgIDptb2Q6YGZhdWx0aGFuZGxlcmAuIEl0IGFsc28gYWxsb3dzIHRvIHBhc3MgYXJiaXRyYXJ5IHZhbHVlcyBhbmQgcmV0cmlldmUKLSAgIHRoZW0gdGhyb3VnaCB0aGUgOmRhdGE6YHN5cy5feG9wdGlvbnNgIGRpY3Rpb25hcnkuCisgICBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgcG9zc2libGUgdmFsdWVzOgorCisgICAqIGBgLVggZmF1bHRoYW5kbGVyYGAgdG8gZW5hYmxlIDptb2Q6YGZhdWx0aGFuZGxlcmA7CisgICAqIGBgLVggc2hvd3JlZmNvdW50YGAgdG8gZW5hYmxlIHRoZSBvdXRwdXQgb2YgdGhlIHRvdGFsIHJlZmVyZW5jZSBjb3VudAorICAgICBhbmQgbWVtb3J5IGJsb2NrcyAob25seSB3b3JrcyBvbiBkZWJ1ZyBidWlsZHMpOworICAgKiBgYC1YIHRyYWNlbWFsbG9jYGAgdG8gc3RhcnQgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIHVzaW5nIHRoZQorICAgICA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBCeSBkZWZhdWx0LCBvbmx5IHRoZSBtb3N0IHJlY2VudCBmcmFtZSBpcworICAgICBzdG9yZWQgaW4gYSB0cmFjZWJhY2sgb2YgYSB0cmFjZS4gVXNlIGBgLVggdHJhY2VtYWxsb2M9TkZSQU1FYGAgdG8gc3RhcnQKKyAgICAgdHJhY2luZyB3aXRoIGEgdHJhY2ViYWNrIGxpbWl0IG9mICpORlJBTUUqIGZyYW1lcy4gU2VlIHRoZQorICAgICA6ZnVuYzpgdHJhY2VtYWxsb2Muc3RhcnRgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICBJdCBhbHNvIGFsbG93cyB0byBwYXNzIGFyYml0cmFyeSB2YWx1ZXMgYW5kIHJldHJpZXZlIHRoZW0gdGhyb3VnaCB0aGUKKyAgIDpkYXRhOmBzeXMuX3hvcHRpb25zYCBkaWN0aW9uYXJ5LgogCiAgICAuLiB2ZXJzaW9uY2hhbmdlZDo6IDMuMgogICAgICAgSXQgaXMgbm93IGFsbG93ZWQgdG8gcGFzcyA6b3B0aW9uOmAtWGAgd2l0aCBDUHl0aG9uLgpAQCAtMzY4LDYgKzQwNCw5IEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAzLjMKICAgICAgIFRoZSBgYC1YIGZhdWx0aGFuZGxlcmBgIG9wdGlvbi4KIAorICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisgICAgICBUaGUgYGAtWCBzaG93cmVmY291bnRgYCBhbmQgYGAtWCB0cmFjZW1hbGxvY2BgIG9wdGlvbnMuCisKIAogT3B0aW9ucyB5b3Ugc2hvdWxkbid0IHVzZQogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgpAQCAtMzc2LDcgKzQxNSw3IEBACiAKICAgIFJlc2VydmVkIGZvciB1c2UgYnkgSnl0aG9uXy4KIAotLi4gX0p5dGhvbjogaHR0cDovL2p5dGhvbi5vcmcKKy4uIF9KeXRob246IGh0dHA6Ly93d3cuanl0aG9uLm9yZy8KIAogCiAuLiBfdXNpbmctb24tZW52dmFyczoKQEAgLTM4NSw3ICs0MjQsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZXNlIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbmZsdWVuY2UgUHl0aG9uJ3MgYmVoYXZpb3IsIHRoZXkgYXJlIHByb2Nlc3NlZAotYmVmb3JlIHRoZSBjb21tYW5kLWxpbmUgc3dpdGNoZXMgb3RoZXIgdGhhbiAtRS4gIEl0IGlzIGN1c3RvbWFyeSB0aGF0CitiZWZvcmUgdGhlIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdGhlciB0aGFuIC1FIG9yIC1JLiAgSXQgaXMgY3VzdG9tYXJ5IHRoYXQKIGNvbW1hbmQtbGluZSBzd2l0Y2hlcyBvdmVycmlkZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyB3aGVyZSB0aGVyZSBpcyBhCiBjb25mbGljdC4KIApAQCAtNDMwLDE1ICs0NjksNyBAQAogICAgaXMgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgbmFtZXNwYWNlIHdoZXJlIGludGVyYWN0aXZlIGNvbW1hbmRzIGFyZSBleGVjdXRlZCBzbwogICAgdGhhdCBvYmplY3RzIGRlZmluZWQgb3IgaW1wb3J0ZWQgaW4gaXQgY2FuIGJlIHVzZWQgd2l0aG91dCBxdWFsaWZpY2F0aW9uIGluCiAgICB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbi4gIFlvdSBjYW4gYWxzbyBjaGFuZ2UgdGhlIHByb21wdHMgOmRhdGE6YHN5cy5wczFgIGFuZAotICAgOmRhdGE6YHN5cy5wczJgIGluIHRoaXMgZmlsZS4KLQotCi0uLiBlbnZ2YXI6OiBQWVRIT05ZMksKLQotICAgU2V0IHRoaXMgdG8gYSBub24tZW1wdHkgc3RyaW5nIHRvIGNhdXNlIHRoZSA6bW9kOmB0aW1lYCBtb2R1bGUgdG8gcmVxdWlyZQotICAgZGF0ZXMgc3BlY2lmaWVkIGFzIHN0cmluZ3MgdG8gaW5jbHVkZSA0LWRpZ2l0IHllYXJzLCBvdGhlcndpc2UgMi1kaWdpdCB5ZWFycwotICAgYXJlIGNvbnZlcnRlZCBiYXNlZCBvbiBydWxlcyBkZXNjcmliZWQgaW4gdGhlIDptb2Q6YHRpbWVgIG1vZHVsZQotICAgZG9jdW1lbnRhdGlvbi4KKyAgIDpkYXRhOmBzeXMucHMyYCBhbmQgdGhlIGhvb2sgOmRhdGE6YHN5cy5fX2ludGVyYWN0aXZlaG9va19fYCBpbiB0aGlzIGZpbGUuCiAKIAogLi4gZW52dmFyOjogUFlUSE9OT1BUSU1JWkUKQEAgLTQ4NSw5ICs1MTYsOSBAQAogCiAuLiBlbnZ2YXI6OiBQWVRIT05ET05UV1JJVEVCWVRFQ09ERQogCi0gICBJZiB0aGlzIGlzIHNldCwgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvciBgYC5weW9gYCBmaWxlcyBvbiB0aGUKLSAgIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nIHRoZSA6b3B0aW9uOmAtQmAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgUHl0aG9uIHdvbid0IHRyeSB0byB3cml0ZSBgYC5weWNgYCBvcgorICAgYGAucHlvYGAgZmlsZXMgb24gdGhlIGltcG9ydCBvZiBzb3VyY2UgbW9kdWxlcy4gIFRoaXMgaXMgZXF1aXZhbGVudCB0bworICAgc3BlY2lmeWluZyB0aGUgOm9wdGlvbjpgLUJgIG9wdGlvbi4KIAogCiAuLiBlbnZ2YXI6OiBQWVRIT05IQVNIU0VFRApAQCAtNTEyLDEzICs1NDMsMTYgQEAKIC4uIGVudnZhcjo6IFBZVEhPTklPRU5DT0RJTkcKIAogICAgSWYgdGhpcyBpcyBzZXQgYmVmb3JlIHJ1bm5pbmcgdGhlIGludGVycHJldGVyLCBpdCBvdmVycmlkZXMgdGhlIGVuY29kaW5nIHVzZWQKLSAgIGZvciBzdGRpbi9zdGRvdXQvc3RkZXJyLCBpbiB0aGUgc3ludGF4IGBgZW5jb2RpbmduYW1lOmVycm9yaGFuZGxlcmBgLiBUaGUKLSAgIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgb3B0aW9uYWwgYW5kIGhhcyB0aGUgc2FtZSBtZWFuaW5nIGFzIGluCi0gICA6ZnVuYzpgc3RyLmVuY29kZWAuCisgICBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciwgaW4gdGhlIHN5bnRheCBgYGVuY29kaW5nbmFtZTplcnJvcmhhbmRsZXJgYC4gIEJvdGgKKyAgIHRoZSBgYGVuY29kaW5nbmFtZWBgIGFuZCB0aGUgYGA6ZXJyb3JoYW5kbGVyYGAgcGFydHMgYXJlIG9wdGlvbmFsIGFuZCBoYXZlCisgICB0aGUgc2FtZSBtZWFuaW5nIGFzIGluIDpmdW5jOmBzdHIuZW5jb2RlYC4KIAogICAgRm9yIHN0ZGVyciwgdGhlIGBgOmVycm9yaGFuZGxlcmBgIHBhcnQgaXMgaWdub3JlZDsgdGhlIGhhbmRsZXIgd2lsbCBhbHdheXMgYmUKICAgIGBgJ2JhY2tzbGFzaHJlcGxhY2UnYGAuCiAKKyAgIC4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICAgICBUaGUgYGBlbmNvZGluZ25hbWVgYCBwYXJ0IGlzIG5vdyBvcHRpb25hbC4KKwogCiAuLiBlbnZ2YXI6OiBQWVRIT05OT1VTRVJTSVRFCiAKQEAgLTU1NiwxNSArNTkwLDM0IEBACiAKIC4uIGVudnZhcjo6IFBZVEhPTkZBVUxUSEFORExFUgogCi0gICBJZiB0aGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldCwgOmZ1bmM6YGZhdWx0aGFuZGxlci5lbmFibGVgIGlzIGNhbGxlZAotICAgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yIDpjb25zdDpgU0lHU0VHVmAsIDpjb25zdDpgU0lHRlBFYCwKLSAgIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQgOmNvbnN0OmBTSUdJTExgIHNpZ25hbHMgdG8gZHVtcCB0aGUKLSAgIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gOm9wdGlvbjpgLVhgIGBgZmF1bHRoYW5kbGVyYGAKLSAgIG9wdGlvbi4KKyAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywKKyAgIDpmdW5jOmBmYXVsdGhhbmRsZXIuZW5hYmxlYCBpcyBjYWxsZWQgYXQgc3RhcnR1cDogaW5zdGFsbCBhIGhhbmRsZXIgZm9yCisgICA6Y29uc3Q6YFNJR1NFR1ZgLCA6Y29uc3Q6YFNJR0ZQRWAsIDpjb25zdDpgU0lHQUJSVGAsIDpjb25zdDpgU0lHQlVTYCBhbmQKKyAgIDpjb25zdDpgU0lHSUxMYCBzaWduYWxzIHRvIGR1bXAgdGhlIFB5dGhvbiB0cmFjZWJhY2suICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KKyAgIDpvcHRpb246YC1YYCBgYGZhdWx0aGFuZGxlcmBgIG9wdGlvbi4KIAogICAgLi4gdmVyc2lvbmFkZGVkOjogMy4zCiAKIAorLi4gZW52dmFyOjogUFlUSE9OVFJBQ0VNQUxMT0MKKworICAgSWYgdGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQgdG8gYSBub24tZW1wdHkgc3RyaW5nLCBzdGFydCB0cmFjaW5nCisgICBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zIHVzaW5nIHRoZSA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlLiBUaGUgdmFsdWUgb2YKKyAgIHRoZSB2YXJpYWJsZSBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiBhIHRyYWNlYmFjayBvZiBhCisgICB0cmFjZS4gRm9yIGV4YW1wbGUsIGBgUFlUSE9OVFJBQ0VNQUxMT0M9MWBgIHN0b3JlcyBvbmx5IHRoZSBtb3N0IHJlY2VudAorICAgZnJhbWUuIFNlZSB0aGUgOmZ1bmM6YHRyYWNlbWFsbG9jLnN0YXJ0YCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKworLi4gZW52dmFyOjogUFlUSE9OQVNZTkNJT0RFQlVHCisKKyAgIElmIHRoaXMgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZywgZW5hYmxlIHRoZQorICAgOnJlZjpgZGVidWcgbW9kZSA8YXN5bmNpby1kZWJ1Zy1tb2RlPmAgb2YgdGhlIDptb2Q6YGFzeW5jaW9gIG1vZHVsZS4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMy40CisKKwogRGVidWctbW9kZSB2YXJpYWJsZXMKIH5+fn5+fn5+fn5+fn5+fn5+fn5+CiAKZGlmZiAtLWdpdCBhL0RvYy91c2luZy9tYWMucnN0IGIvRG9jL3VzaW5nL21hYy5yc3QKaW5kZXggM2UxYjc0ZC4uZWYwOTFlNSAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL21hYy5yc3QKKysrIGIvRG9jL3VzaW5nL21hYy5yc3QKQEAgLTE5LDEzICsxOSwxMyBAQAogCiBNYWMgT1MgWCAxMC44IGNvbWVzIHdpdGggUHl0aG9uIDIuNyBwcmUtaW5zdGFsbGVkIGJ5IEFwcGxlLiAgSWYgeW91IHdpc2gsIHlvdQogYXJlIGludml0ZWQgdG8gaW5zdGFsbCB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiBQeXRob24gMyBmcm9tIHRoZSBQeXRob24KLXdlYnNpdGUgKGh0dHA6Ly93d3cucHl0aG9uLm9yZykuICBBIGN1cnJlbnQgInVuaXZlcnNhbCBiaW5hcnkiIGJ1aWxkIG9mIFB5dGhvbiwKK3dlYnNpdGUgKGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcpLiAgQSBjdXJyZW50ICJ1bml2ZXJzYWwgYmluYXJ5IiBidWlsZCBvZiBQeXRob24sCiB3aGljaCBydW5zIG5hdGl2ZWx5IG9uIHRoZSBNYWMncyBuZXcgSW50ZWwgYW5kIGxlZ2FjeSBQUEMgQ1BVJ3MsIGlzIGF2YWlsYWJsZQogdGhlcmUuCiAKIFdoYXQgeW91IGdldCBhZnRlciBpbnN0YWxsaW5nIGlzIGEgbnVtYmVyIG9mIHRoaW5nczoKIAotKiBBIDpmaWxlOmBNYWNQeXRob24gMy4zYCBmb2xkZXIgaW4geW91ciA6ZmlsZTpgQXBwbGljYXRpb25zYCBmb2xkZXIuIEluIGhlcmUKKyogQSA6ZmlsZTpgTWFjUHl0aG9uIDMuNGAgZm9sZGVyIGluIHlvdXIgOmZpbGU6YEFwcGxpY2F0aW9uc2AgZm9sZGVyLiBJbiBoZXJlCiAgIHlvdSBmaW5kIElETEUsIHRoZSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCB0aGF0IGlzIGEgc3RhbmRhcmQgcGFydCBvZiBvZmZpY2lhbAogICBQeXRob24gZGlzdHJpYnV0aW9uczsgUHl0aG9uTGF1bmNoZXIsIHdoaWNoIGhhbmRsZXMgZG91YmxlLWNsaWNraW5nIFB5dGhvbgogICBzY3JpcHRzIGZyb20gdGhlIEZpbmRlcjsgYW5kIHRoZSAiQnVpbGQgQXBwbGV0IiB0b29sLCB3aGljaCBhbGxvd3MgeW91IHRvCkBAIC02NCw3ICs2NCw3IEBACiBudW1iZXIgb2Ygc3RhbmRhcmQgVW5peCBjb21tYW5kIGxpbmUgZWRpdG9ycywgOnByb2dyYW06YHZpbWAgYW5kCiA6cHJvZ3JhbTpgZW1hY3NgIGFtb25nIHRoZW0uIElmIHlvdSB3YW50IGEgbW9yZSBNYWMtbGlrZSBlZGl0b3IsCiA6cHJvZ3JhbTpgQkJFZGl0YCBvciA6cHJvZ3JhbTpgVGV4dFdyYW5nbGVyYCBmcm9tIEJhcmUgQm9uZXMgU29mdHdhcmUgKHNlZQotaHR0cDovL3d3dy5iYXJlYm9uZXMuY29tL3Byb2R1Y3RzL2JiZWRpdC9pbmRleC5zaHRtbCkgYXJlIGdvb2QgY2hvaWNlcywgYXMgaXMKK2h0dHA6Ly93d3cuYmFyZWJvbmVzLmNvbS9wcm9kdWN0cy9iYmVkaXQvaW5kZXguaHRtbCkgYXJlIGdvb2QgY2hvaWNlcywgYXMgaXMKIDpwcm9ncmFtOmBUZXh0TWF0ZWAgKHNlZSBodHRwOi8vbWFjcm9tYXRlcy5jb20vKS4gT3RoZXIgZWRpdG9ycyBpbmNsdWRlCiA6cHJvZ3JhbTpgR3ZpbWAgKGh0dHA6Ly9tYWN2aW0ub3JnKSBhbmQgOnByb2dyYW06YEFxdWFtYWNzYAogKGh0dHA6Ly9hcXVhbWFjcy5vcmcvKS4KQEAgLTkzLDcgKzkzLDcgQEAKIGFueXRoaW5nIHRoYXQgaGFzIGEgR1VJKSBuZWVkIHRvIGJlIHJ1biBpbiBhIHNwZWNpYWwgd2F5LiBVc2UgOnByb2dyYW06YHB5dGhvbndgCiBpbnN0ZWFkIG9mIDpwcm9ncmFtOmBweXRob25gIHRvIHN0YXJ0IHN1Y2ggc2NyaXB0cy4KIAotV2l0aCBQeXRob24gMy4zLCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgorV2l0aCBQeXRob24gMy40LCB5b3UgY2FuIHVzZSBlaXRoZXIgOnByb2dyYW06YHB5dGhvbmAgb3IgOnByb2dyYW06YHB5dGhvbndgLgogCiAKIENvbmZpZ3VyYXRpb24KQEAgLTEwMiw4ICsxMDIsOSBAQAogUHl0aG9uIG9uIE9TIFggaG9ub3JzIGFsbCBzdGFuZGFyZCBVbml4IGVudmlyb25tZW50IHZhcmlhYmxlcyBzdWNoIGFzCiA6ZW52dmFyOmBQWVRIT05QQVRIYCwgYnV0IHNldHRpbmcgdGhlc2UgdmFyaWFibGVzIGZvciBwcm9ncmFtcyBzdGFydGVkIGZyb20gdGhlCiBGaW5kZXIgaXMgbm9uLXN0YW5kYXJkIGFzIHRoZSBGaW5kZXIgZG9lcyBub3QgcmVhZCB5b3VyIDpmaWxlOmAucHJvZmlsZWAgb3IKLTpmaWxlOmAuY3NocmNgIGF0IHN0YXJ0dXAuIFlvdSBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUgOmZpbGU6YH4KLS8uTWFjT1NYL2Vudmlyb25tZW50LnBsaXN0YC4gU2VlIEFwcGxlJ3MgVGVjaG5pY2FsIERvY3VtZW50IFFBMTA2NyBmb3IgZGV0YWlscy4KKzpmaWxlOmAuY3NocmNgIGF0IHN0YXJ0dXAuIFlvdSBuZWVkIHRvIGNyZWF0ZSBhIGZpbGUKKzpmaWxlOmB+Ly5NYWNPU1gvZW52aXJvbm1lbnQucGxpc3RgLiBTZWUgQXBwbGUncyBUZWNobmljYWwgRG9jdW1lbnQgUUExMDY3IGZvcgorZGV0YWlscy4KIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaW5zdGFsbGF0aW9uIFB5dGhvbiBwYWNrYWdlcyBpbiBNYWNQeXRob24sIHNlZSBzZWN0aW9uCiA6cmVmOmBtYWMtcGFja2FnZS1tYW5hZ2VyYC4KQEAgLTExNiw3ICsxMTcsNyBAQAogCiBNYWNQeXRob24gc2hpcHMgd2l0aCB0aGUgc3RhbmRhcmQgSURMRSBkZXZlbG9wbWVudCBlbnZpcm9ubWVudC4gQSBnb29kCiBpbnRyb2R1Y3Rpb24gdG8gdXNpbmcgSURMRSBjYW4gYmUgZm91bmQgYXQKLWh0dHA6Ly9oa24uZWVjcy5iZXJrZWxleS5lZHUvfmR5b28vcHl0aG9uL2lkbGVfaW50cm8vaW5kZXguaHRtbC4KK2h0dHBzOi8vaGtuLmVlY3MuYmVya2VsZXkuZWR1L35keW9vL3B5dGhvbi9pZGxlX2ludHJvL2luZGV4Lmh0bWwuCiAKIAogLi4gX21hYy1wYWNrYWdlLW1hbmFnZXI6CkBAIC0xMzAsNyArMTMxLDcgQEAKICAgc2V0dXAucHkgaW5zdGFsbGBgKS4KIAogKiBNYW55IHBhY2thZ2VzIGNhbiBhbHNvIGJlIGluc3RhbGxlZCB2aWEgdGhlIDpwcm9ncmFtOmBzZXR1cHRvb2xzYCBleHRlbnNpb24KLSAgb3IgOnByb2dyYW06YHBpcGAgd3JhcHBlciwgc2VlIGh0dHA6Ly93d3cucGlwLWluc3RhbGxlci5vcmcvLgorICBvciA6cHJvZ3JhbTpgcGlwYCB3cmFwcGVyLCBzZWUgaHR0cHM6Ly9waXAucHlwYS5pby8uCiAKIAogR1VJIFByb2dyYW1taW5nIG9uIHRoZSBNYWMKQEAgLTE0MCw3ICsxNDEsNyBAQAogCiAqUHlPYmpDKiBpcyBhIFB5dGhvbiBiaW5kaW5nIHRvIEFwcGxlJ3MgT2JqZWN0aXZlLUMvQ29jb2EgZnJhbWV3b3JrLCB3aGljaCBpcwogdGhlIGZvdW5kYXRpb24gb2YgbW9zdCBtb2Rlcm4gTWFjIGRldmVsb3BtZW50LiBJbmZvcm1hdGlvbiBvbiBQeU9iakMgaXMKLWF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9weW9iamMuc291cmNlZm9yZ2UubmV0LgorYXZhaWxhYmxlIGZyb20gaHR0cHM6Ly9weXRob25ob3N0ZWQub3JnL3B5b2JqYy8uCiAKIFRoZSBzdGFuZGFyZCBQeXRob24gR1VJIHRvb2xraXQgaXMgOm1vZDpgdGtpbnRlcmAsIGJhc2VkIG9uIHRoZSBjcm9zcy1wbGF0Zm9ybQogVGsgdG9vbGtpdCAoaHR0cDovL3d3dy50Y2wudGspLiBBbiBBcXVhLW5hdGl2ZSB2ZXJzaW9uIG9mIFRrIGlzIGJ1bmRsZWQgd2l0aCBPUwpAQCAtMTU4LDcgKzE1OSw3IEBACiBEaXN0cmlidXRpbmcgUHl0aG9uIEFwcGxpY2F0aW9ucyBvbiB0aGUgTWFjCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSAiQnVpbGQgQXBwbGV0IiB0b29sIHRoYXQgaXMgcGxhY2VkIGluIHRoZSBNYWNQeXRob24gMy4zIGZvbGRlciBpcyBmaW5lIGZvcgorVGhlICJCdWlsZCBBcHBsZXQiIHRvb2wgdGhhdCBpcyBwbGFjZWQgaW4gdGhlIE1hY1B5dGhvbiAzLjQgZm9sZGVyIGlzIGZpbmUgZm9yCiBwYWNrYWdpbmcgc21hbGwgUHl0aG9uIHNjcmlwdHMgb24geW91ciBvd24gbWFjaGluZSB0byBydW4gYXMgYSBzdGFuZGFyZCBNYWMKIGFwcGxpY2F0aW9uLiBUaGlzIHRvb2wsIGhvd2V2ZXIsIGlzIG5vdCByb2J1c3QgZW5vdWdoIHRvIGRpc3RyaWJ1dGUgUHl0aG9uCiBhcHBsaWNhdGlvbnMgdG8gb3RoZXIgdXNlcnMuCkBAIC0xNzQsOSArMTc1LDkgQEAKIFRoZSBNYWNQeXRob24gbWFpbGluZyBsaXN0IGlzIGFuIGV4Y2VsbGVudCBzdXBwb3J0IHJlc291cmNlIGZvciBQeXRob24gdXNlcnMgYW5kCiBkZXZlbG9wZXJzIG9uIHRoZSBNYWM6CiAKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9jb21tdW5pdHkvc2lncy9jdXJyZW50L3B5dGhvbm1hYy1zaWcvCitodHRwczovL3d3dy5weXRob24ub3JnL2NvbW11bml0eS9zaWdzL2N1cnJlbnQvcHl0aG9ubWFjLXNpZy8KIAogQW5vdGhlciB1c2VmdWwgcmVzb3VyY2UgaXMgdGhlIE1hY1B5dGhvbiB3aWtpOgogCi1odHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vTWFjUHl0aG9uCitodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL01hY1B5dGhvbgogCmRpZmYgLS1naXQgYS9Eb2MvdXNpbmcvdW5peC5yc3QgYi9Eb2MvdXNpbmcvdW5peC5yc3QKaW5kZXggNDA2MzVjNi4uNWRhMWYyMyAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL3VuaXgucnN0CisrKyBiL0RvYy91c2luZy91bml4LnJzdApAQCAtNTUsMTggKzU1LDE5IEBACiBPbiBPcGVuU29sYXJpcwogLS0tLS0tLS0tLS0tLS0KIAotVG8gaW5zdGFsbCB0aGUgbmV3ZXN0IFB5dGhvbiB2ZXJzaW9ucyBvbiBPcGVuU29sYXJpcywgaW5zdGFsbCBgYmxhc3R3YXZlCi08aHR0cDovL3d3dy5ibGFzdHdhdmUub3JnL2hvd3RvLmh0bWw+YF8gYW5kIHR5cGUgYGBwa2dfZ2V0IC1pIHB5dGhvbmBgIGF0IHRoZQotcHJvbXB0LgorWW91IGNhbiBnZXQgUHl0aG9uIGZyb20gYE9wZW5DU1cgPGh0dHA6Ly93d3cub3BlbmNzdy5vcmcvPmBfLiAgVmFyaW91cyB2ZXJzaW9ucworb2YgUHl0aG9uIGFyZSBhdmFpbGFibGUgYW5kIGNhbiBiZSBpbnN0YWxsZWQgd2l0aCBlLmcuIGBgcGtndXRpbCAtaSBweXRob24yN2BgLgogCiAKKy4uIF9idWlsZGluZy1weXRob24tb24tdW5peDoKKwogQnVpbGRpbmcgUHl0aG9uCiA9PT09PT09PT09PT09PT0KIAogSWYgeW91IHdhbnQgdG8gY29tcGlsZSBDUHl0aG9uIHlvdXJzZWxmLCBmaXJzdCB0aGluZyB5b3Ugc2hvdWxkIGRvIGlzIGdldCB0aGUKLWBzb3VyY2UgPGh0dHA6Ly9weXRob24ub3JnL2Rvd25sb2FkL3NvdXJjZS8+YF8uIFlvdSBjYW4gZG93bmxvYWQgZWl0aGVyIHRoZQorYHNvdXJjZSA8aHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9zb3VyY2UvPmBfLiBZb3UgY2FuIGRvd25sb2FkIGVpdGhlciB0aGUKIGxhdGVzdCByZWxlYXNlJ3Mgc291cmNlIG9yIGp1c3QgZ3JhYiBhIGZyZXNoIGBjbG9uZQotPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGUvc2V0dXAjZ2V0dGluZy10aGUtc291cmNlLWNvZGU+YF8uICAoSWYgeW91IHdhbnQKKzxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9zZXR1cC5odG1sI2dldHRpbmctdGhlLXNvdXJjZS1jb2RlPmBfLiAgKElmIHlvdSB3YW50CiB0byBjb250cmlidXRlIHBhdGNoZXMsIHlvdSB3aWxsIG5lZWQgYSBjbG9uZS4pCiAKIFRoZSBidWlsZCBwcm9jZXNzIGNvbnNpc3RzIGluIHRoZSB1c3VhbCA6OgpAQCAtMTQ0LDUgKzE0NSw0IEBACiBpbmZvcm1hdGlvbiwgcmVhZDogaHR0cDovL3d3dy5nZWFueS5vcmcvCiAKIEtvbW9kbyBlZGl0IGlzIGFub3RoZXIgZXh0cmVtZWx5IGdvb2QgSURFLiAgSXQgYWxzbyBoYXMgc3VwcG9ydCBmb3IgYSBsb3Qgb2YKLWxhbmd1YWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQ6Ci1odHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9zdG9yZS9wcm9kdWN0ZGV0YWlsLmFzcHg/cHJkR3VpZD0yMGY0ZWQxNS02Njg0LTQxMTgtYTc4Yi1kMzdmZjQwNThjNWYKK2xhbmd1YWdlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgaHR0cDovL2tvbW9kb2lkZS5jb20vLgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYyBiL0RvYy91c2luZy92ZW52LWNyZWF0ZS5pbmMKaW5kZXggNWZkYmM5Yi4uNDViZGQ1YSAxMDA2NDQKLS0tIGEvRG9jL3VzaW5nL3ZlbnYtY3JlYXRlLmluYworKysgYi9Eb2MvdXNpbmcvdmVudi1jcmVhdGUuaW5jCkBAIC0xMSwyMSArMTEsMjYgQEAKIFdpbmRvd3MpLiAgSXQgYWxzbyBjcmVhdGVzIGFuIChpbml0aWFsbHkgZW1wdHkpIGBgbGliL3B5dGhvblguWS9zaXRlLXBhY2thZ2VzYGAKIHN1YmRpcmVjdG9yeSAob24gV2luZG93cywgdGhpcyBpcyBgYExpYlxzaXRlLXBhY2thZ2VzYGApLgogCisuLiBzZWVhbHNvOjoKKworICAgYFB5dGhvbiBQYWNrYWdpbmcgVXNlciBHdWlkZTogQ3JlYXRpbmcgYW5kIHVzaW5nIHZpcnR1YWwgZW52aXJvbm1lbnRzCisgICA8aHR0cHM6Ly9wYWNrYWdpbmcucHl0aG9uLm9yZy9lbi9sYXRlc3QvaW5zdGFsbGluZy5odG1sI3ZpcnR1YWwtZW52aXJvbm1lbnRzPmBfXworCiAuLiBoaWdobGlnaHQ6OiBub25lCiAKIE9uIFdpbmRvd3MsIHlvdSBtYXkgaGF2ZSB0byBpbnZva2UgdGhlIGBgcHl2ZW52YGAgc2NyaXB0IGFzIGZvbGxvd3MsIGlmIHlvdQogZG9uJ3QgaGF2ZSB0aGUgcmVsZXZhbnQgUEFUSCBhbmQgUEFUSEVYVCBzZXR0aW5nczo6CiAKLSAgICBjOlxUZW1wPmM6XFB5dGhvbjMzXHB5dGhvbiBjOlxQeXRob24zM1xUb29sc1xTY3JpcHRzXHB5dmVudi5weSBteWVudgorICAgIGM6XFRlbXA+YzpcUHl0aG9uMzRccHl0aG9uIGM6XFB5dGhvbjM0XFRvb2xzXFNjcmlwdHNccHl2ZW52LnB5IG15ZW52CiAKIG9yIGVxdWl2YWxlbnRseTo6CiAKLSAgICBjOlxUZW1wPmM6XFB5dGhvbjMzXHB5dGhvbiAtbSB2ZW52IG15ZW52CisgICAgYzpcVGVtcD5jOlxQeXRob24zNFxweXRob24gLW0gdmVudiBteWVudgogCiBUaGUgY29tbWFuZCwgaWYgcnVuIHdpdGggYGAtaGBgLCB3aWxsIHNob3cgdGhlIGF2YWlsYWJsZSBvcHRpb25zOjoKIAotICAgIHVzYWdlOiBweXZlbnYgWy1oXSBbLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlc10gWy0tc3ltbGlua3NdIFstLWNsZWFyXQotICAgICAgICAgICAgICAgICAgWy0tdXBncmFkZV0gRU5WX0RJUiBbRU5WX0RJUiAuLi5dCisgICAgdXNhZ2U6IHZlbnYgWy1oXSBbLS1zeXN0ZW0tc2l0ZS1wYWNrYWdlc10gWy0tc3ltbGlua3NdIFstLWNsZWFyXQorICAgICAgICAgICAgICAgIFstLXVwZ3JhZGVdIFstLXdpdGhvdXQtcGlwXSBFTlZfRElSIFtFTlZfRElSIC4uLl0KIAogICAgIENyZWF0ZXMgdmlydHVhbCBQeXRob24gZW52aXJvbm1lbnRzIGluIG9uZSBvciBtb3JlIHRhcmdldCBkaXJlY3Rvcmllcy4KIApAQCAtMzgsMzggKzQzLDU2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnR1YWwgZW52aXJvbm1lbnQuCiAgICAgICAtLXN5bWxpbmtzICAgICAgICAgICAgIFRyeSB0byB1c2Ugc3ltbGlua3MgcmF0aGVyIHRoYW4gY29waWVzLCB3aGVuIHN5bWxpbmtzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZSBub3QgdGhlIGRlZmF1bHQgZm9yIHRoZSBwbGF0Zm9ybS4KKyAgICAgIC0tY29waWVzICAgICAgICAgICAgICAgVHJ5IHRvIHVzZSBjb3BpZXMgcmF0aGVyIHRoYW4gc3ltbGlua3MsIGV2ZW4gd2hlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1saW5rcyBhcmUgdGhlIGRlZmF1bHQgZm9yIHRoZSBwbGF0Zm9ybS4KICAgICAgIC0tY2xlYXIgICAgICAgICAgICAgICAgRGVsZXRlIHRoZSBlbnZpcm9ubWVudCBkaXJlY3RvcnkgaWYgaXQgYWxyZWFkeSBleGlzdHMuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBzcGVjaWZpZWQgYW5kIHRoZSBkaXJlY3RvcnkgZXhpc3RzLCBhbiBlcnJvciBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZWQuCiAgICAgICAtLXVwZ3JhZGUgICAgICAgICAgICAgIFVwZ3JhZGUgdGhlIGVudmlyb25tZW50IGRpcmVjdG9yeSB0byB1c2UgdGhpcyB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uIGhhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLgorICAgICAgLS13aXRob3V0LXBpcCAgICAgICAgICBTa2lwcyBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyBwaXAgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQgKHBpcCBpcyBib290c3RyYXBwZWQgYnkgZGVmYXVsdCkKIAotSWYgdGhlIHRhcmdldCBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgYW4gZXJyb3Igd2lsbCBiZSByYWlzZWQsIHVubGVzcwotdGhlIGBgLS1jbGVhcmBgIG9yIGBgLS11cGdyYWRlYGAgb3B0aW9uIHdhcyBwcm92aWRlZC4KK0RlcGVuZGluZyBvbiBob3cgdGhlIGBgdmVudmBgIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gaW52b2tlZCwgdGhlIHVzYWdlIG1lc3NhZ2UKK21heSB2YXJ5IHNsaWdodGx5LCBlLmcuIHJlZmVyZW5jaW5nIGBgcHl2ZW52YGAgcmF0aGVyIHRoYW4gYGB2ZW52YGAuCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBJbnN0YWxscyBwaXAgYnkgZGVmYXVsdCwgYWRkZWQgdGhlIGBgLS13aXRob3V0LXBpcGBgICBhbmQgYGAtLWNvcGllc2BgCisgICBvcHRpb25zCisKKy4uIHZlcnNpb25jaGFuZ2VkOjogMy40CisgICBJbiBlYXJsaWVyIHZlcnNpb25zLCBpZiB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0ZWQsIGFuIGVycm9yIHdhcworICAgcmFpc2VkLCB1bmxlc3MgdGhlIGBgLS1jbGVhcmBgIG9yIGBgLS11cGdyYWRlYGAgb3B0aW9uIHdhcyBwcm92aWRlZC4gTm93LAorICAgaWYgYW4gZXhpc3RpbmcgZGlyZWN0b3J5IGlzIHNwZWNpZmllZCwgaXRzIGNvbnRlbnRzIGFyZSByZW1vdmVkIGFuZAorICAgdGhlIGRpcmVjdG9yeSBpcyBwcm9jZXNzZWQgYXMgaWYgaXQgaGFkIGJlZW4gbmV3bHkgY3JlYXRlZC4KIAogVGhlIGNyZWF0ZWQgYGBweXZlbnYuY2ZnYGAgZmlsZSBhbHNvIGluY2x1ZGVzIHRoZQogYGBpbmNsdWRlLXN5c3RlbS1zaXRlLXBhY2thZ2VzYGAga2V5LCBzZXQgdG8gYGB0cnVlYGAgaWYgYGB2ZW52YGAgaXMKIHJ1biB3aXRoIHRoZSBgYC0tc3lzdGVtLXNpdGUtcGFja2FnZXNgYCBvcHRpb24sIGBgZmFsc2VgYCBvdGhlcndpc2UuCiAKK1VubGVzcyB0aGUgYGAtLXdpdGhvdXQtcGlwYGAgb3B0aW9uIGlzIGdpdmVuLCA6bW9kOmBlbnN1cmVwaXBgIHdpbGwgYmUKK2ludm9rZWQgdG8gYm9vdHN0cmFwIGBgcGlwYGAgaW50byB0aGUgdmlydHVhbCBlbnZpcm9ubWVudC4KKwogTXVsdGlwbGUgcGF0aHMgY2FuIGJlIGdpdmVuIHRvIGBgcHl2ZW52YGAsIGluIHdoaWNoIGNhc2UgYW4gaWRlbnRpY2FsCiB2aXJ0dWFsZW52IHdpbGwgYmUgY3JlYXRlZCwgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBvcHRpb25zLCBhdCBlYWNoCiBwcm92aWRlZCBwYXRoLgogCiBPbmNlIGEgdmVudiBoYXMgYmVlbiBjcmVhdGVkLCBpdCBjYW4gYmUgImFjdGl2YXRlZCIgdXNpbmcgYSBzY3JpcHQgaW4gdGhlCi12ZW52J3MgYmluYXJ5IGRpcmVjdG9yeS4gVGhlIGludm9jYXRpb24gb2YgdGhlIHNjcmlwdCBpcyBwbGF0Zm9ybS1zcGVjaWZpYzogb24KLWEgUG9zaXggcGxhdGZvcm0sIHlvdSB3b3VsZCB0eXBpY2FsbHkgZG86OgordmVudidzIGJpbmFyeSBkaXJlY3RvcnkuIFRoZSBpbnZvY2F0aW9uIG9mIHRoZSBzY3JpcHQgaXMgcGxhdGZvcm0tc3BlY2lmaWM6CiAKLSAgICAkIHNvdXJjZSA8dmVudj4vYmluL2FjdGl2YXRlCi0KLXdoZXJlYXMgb24gV2luZG93cywgeW91IG1pZ2h0IGRvOjoKLQotICAgIEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUKLQotaWYgeW91IGFyZSB1c2luZyB0aGUgYGBjbWQuZXhlYGAgc2hlbGwsIG9yIHBlcmhhcHM6OgotCi0gICAgUFMgQzpcPiA8dmVudj4vU2NyaXB0cy9BY3RpdmF0ZS5wczEKLQotaWYgeW91IHVzZSBQb3dlclNoZWxsLgorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8IFBsYXRmb3JtICAgIHwgU2hlbGwgICAgICAgICAgIHwgQ29tbWFuZCB0byBhY3RpdmF0ZSB2aXJ0dWFsIGVudmlyb25tZW50IHwKKys9PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KworfCBQb3NpeCAgICAgICB8IGJhc2gvenNoICAgICAgICB8ICQgc291cmNlIDx2ZW52Pi9iaW4vYWN0aXZhdGUgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBmaXNoICAgICAgICAgICAgfCAkIC4gPHZlbnY+L2Jpbi9hY3RpdmF0ZS5maXNoICAgICAgICAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgIHwgY3NoL3Rjc2ggICAgICAgIHwgJCBzb3VyY2UgPHZlbnY+L2Jpbi9hY3RpdmF0ZS5jc2ggICAgICAgIHwKKystLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBXaW5kb3dzICAgICB8IGNtZC5leGUgICAgICAgICB8IEM6XD4gPHZlbnY+L1NjcmlwdHMvYWN0aXZhdGUuYmF0ICAgICAgICB8CisrLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgICAgICAgICAgICAgfCBQb3dlclNoZWxsICAgICAgfCBQUyBDOlw+IDx2ZW52Pi9TY3JpcHRzL0FjdGl2YXRlLnBzMSAgICAgfAorKy0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAKIFlvdSBkb24ndCBzcGVjaWZpY2FsbHkgKm5lZWQqIHRvIGFjdGl2YXRlIGFuIGVudmlyb25tZW50OyBhY3RpdmF0aW9uIGp1c3QKIHByZXBlbmRzIHRoZSB2ZW52J3MgYmluYXJ5IGRpcmVjdG9yeSB0byB5b3VyIHBhdGgsIHNvIHRoYXQgInB5dGhvbiIgaW52b2tlcyB0aGUKQEAgLTgzLDMgKzEwNiw1IEBACiBgYGRlYWN0aXZhdGUuYmF0YGAgYW5kIGBgRGVhY3RpdmF0ZS5wczFgYCB3aGljaCBhcmUgaW5zdGFsbGVkIHdoZW4gdGhlIHZlbnYgaXMKIGNyZWF0ZWQuCiAKKy4uIHZlcnNpb25hZGRlZDo6IDMuNAorICAgYGBmaXNoYGAgYW5kIGBgY3NoYGAgYWN0aXZhdGlvbiBzY3JpcHRzLgpkaWZmIC0tZ2l0IGEvRG9jL3VzaW5nL3dpbmRvd3MucnN0IGIvRG9jL3VzaW5nL3dpbmRvd3MucnN0CmluZGV4IDZjNGQxNmUuLmMwNWY3MmEgMTAwNjQ0Ci0tLSBhL0RvYy91c2luZy93aW5kb3dzLnJzdAorKysgYi9Eb2MvdXNpbmcvd2luZG93cy5yc3QKQEAgLTExLDYgKzExLDEwIEBACiBUaGlzIGRvY3VtZW50IGFpbXMgdG8gZ2l2ZSBhbiBvdmVydmlldyBvZiBXaW5kb3dzLXNwZWNpZmljIGJlaGF2aW91ciB5b3Ugc2hvdWxkCiBrbm93IGFib3V0IHdoZW4gdXNpbmcgUHl0aG9uIG9uIE1pY3Jvc29mdCBXaW5kb3dzLgogCisuLiBYWFggKG5jb2dobGFuKQorCisgICBUaGlzIGxvb2tzIHJhdGhlciBzdGFsZSB0byBtZS4uLgorCiAKIEluc3RhbGxpbmcgUHl0aG9uCiA9PT09PT09PT09PT09PT09PQpAQCAtMTgsMjEgKzIyLDIwIEBACiBVbmxpa2UgbW9zdCBVbml4IHN5c3RlbXMgYW5kIHNlcnZpY2VzLCBXaW5kb3dzIGRvZXMgbm90IHJlcXVpcmUgUHl0aG9uIG5hdGl2ZWx5CiBhbmQgdGh1cyBkb2VzIG5vdCBwcmUtaW5zdGFsbCBhIHZlcnNpb24gb2YgUHl0aG9uLiAgSG93ZXZlciwgdGhlIENQeXRob24gdGVhbQogaGFzIGNvbXBpbGVkIFdpbmRvd3MgaW5zdGFsbGVycyAoTVNJIHBhY2thZ2VzKSB3aXRoIGV2ZXJ5IGByZWxlYXNlCi08aHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLz5gXyBmb3IgbWFueSB5ZWFycy4KKzxodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLz5gXyBmb3IgbWFueSB5ZWFycy4KIAogV2l0aCBvbmdvaW5nIGRldmVsb3BtZW50IG9mIFB5dGhvbiwgc29tZSBwbGF0Zm9ybXMgdGhhdCB1c2VkIHRvIGJlIHN1cHBvcnRlZAogZWFybGllciBhcmUgbm8gbG9uZ2VyIHN1cHBvcnRlZCAoZHVlIHRvIHRoZSBsYWNrIG9mIHVzZXJzIG9yIGRldmVsb3BlcnMpLgogQ2hlY2sgOnBlcDpgMTFgIGZvciBkZXRhaWxzIG9uIGFsbCB1bnN1cHBvcnRlZCBwbGF0Zm9ybXMuCiAKICogYFdpbmRvd3MgQ0UgPGh0dHA6Ly9weXRob25jZS5zb3VyY2Vmb3JnZS5uZXQvPmBfIGlzIHN0aWxsIHN1cHBvcnRlZC4KLSogVGhlIGBDeWd3aW4gPGh0dHA6Ly9jeWd3aW4uY29tLz5gXyBpbnN0YWxsZXIgb2ZmZXJzIHRvIGluc3RhbGwgdGhlIGBQeXRob24KLSAgaW50ZXJwcmV0ZXIgPGh0dHA6Ly9jeWd3aW4uY29tL3BhY2thZ2VzL3B5dGhvbj5gXyBhcyB3ZWxsOyBpdCBpcyBsb2NhdGVkIHVuZGVyCi0gICJJbnRlcnByZXRlcnMuIiAoY2YuIGBDeWd3aW4gcGFja2FnZSBzb3VyY2UKKyogVGhlIGBDeWd3aW4gPGh0dHA6Ly9jeWd3aW4uY29tLz5gXyBpbnN0YWxsZXIgb2ZmZXJzIHRvIGluc3RhbGwgdGhlIFB5dGhvbgorICBpbnRlcnByZXRlciBhcyB3ZWxsIChjZi4gYEN5Z3dpbiBwYWNrYWdlIHNvdXJjZQogICA8ZnRwOi8vZnRwLnVuaS1lcmxhbmdlbi5kZS9wdWIvcGMvZ251d2luMzIvY3lnd2luL21pcnJvcnMvY3lnbnVzLwogICByZWxlYXNlL3B5dGhvbj5gXywgYE1haW50YWluZXIgcmVsZWFzZXMKICAgPGh0dHA6Ly93d3cudGlzaGxlci5uZXQvamFzb24vc29mdHdhcmUvcHl0aG9uLz5gXykKIAotU2VlIGBQeXRob24gZm9yIFdpbmRvd3MgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC93aW5kb3dzLz5gXworU2VlIGBQeXRob24gZm9yIFdpbmRvd3MgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvd2luZG93cy8+YF8KIGZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBwbGF0Zm9ybXMgd2l0aCBwcmUtY29tcGlsZWQgaW5zdGFsbGVycy4KIAogLi4gc2VlYWxzbzo6CkBAIC00MSwxNSArNDQsMTUgQEAKICAgICAgICI3IE1pbnV0ZXMgdG8gIkhlbGxvIFdvcmxkISIiCiAgICAgICBieSBSaWNoYXJkIERvb2xpbmcsIDIwMDYKIAotICAgYEluc3RhbGxpbmcgb24gV2luZG93cyA8aHR0cDovL2RpdmVpbnRvcHl0aG9uLm5ldC9pbnN0YWxsaW5nX3B5dGhvbi93aW5kb3dzLmh0bWw+YF8KKyAgIGBJbnN0YWxsaW5nIG9uIFdpbmRvd3MgPGh0dHA6Ly93d3cuZGl2ZWludG9weXRob24ubmV0L2luc3RhbGxpbmdfcHl0aG9uL3dpbmRvd3MuaHRtbD5gXwogICAgICAgaW4gImBEaXZlIGludG8gUHl0aG9uOiBQeXRob24gZnJvbSBub3ZpY2UgdG8gcHJvCi0gICAgICA8aHR0cDovL2RpdmVpbnRvcHl0aG9uLm5ldC9pbmRleC5odG1sPmBfIgorICAgICAgPGh0dHA6Ly93d3cuZGl2ZWludG9weXRob24ubmV0Lz5gXyIKICAgICAgIGJ5IE1hcmsgUGlsZ3JpbSwgMjAwNCwKICAgICAgIElTQk4gMS01OTA1OS0zNTYtMQogCi0gICBgRm9yIFdpbmRvd3MgdXNlcnMgPGh0dHA6Ly9zd2Fyb29wY2guY29tL3RleHQvQnl0ZV9vZl9QeXRob246SW5zdGFsbGluZ19QeXRob24jRm9yX1dpbmRvd3NfdXNlcnM+YF8KKyAgIGBGb3IgV2luZG93cyB1c2VycyA8aHR0cDovL3d3dy5zd2Fyb29wY2guY29tL25vdGVzL3B5dGhvbi8jaW5zdGFsbF93aW5kb3dzPmBfCiAgICAgICBpbiAiSW5zdGFsbGluZyBQeXRob24iCi0gICAgICBpbiAiYEEgQnl0ZSBvZiBQeXRob24gPGh0dHA6Ly93d3cuYnl0ZW9mcHl0aG9uLmluZm8+YF8iCisgICAgICBpbiAiYEEgQnl0ZSBvZiBQeXRob24gPGh0dHA6Ly93d3cuc3dhcm9vcGNoLmNvbS9ub3Rlcy9weXRob24vPmBfIgogICAgICAgYnkgU3dhcm9vcCBDIEgsIDIwMDMKIAogCkBAIC02Myw3ICs2Niw3IEBACiBgQWN0aXZlUHl0aG9uIDxodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVweXRob24vPmBfCiAgICAgSW5zdGFsbGVyIHdpdGggbXVsdGktcGxhdGZvcm0gY29tcGF0aWJpbGl0eSwgZG9jdW1lbnRhdGlvbiwgUHlXaW4zMgogCi1gRW50aG91Z2h0IFB5dGhvbiBEaXN0cmlidXRpb24gPGh0dHA6Ly93d3cuZW50aG91Z2h0LmNvbS9wcm9kdWN0cy9lcGQucGhwPmBfCitgRW50aG91Z2h0IFB5dGhvbiBEaXN0cmlidXRpb24gPGh0dHBzOi8vd3d3LmVudGhvdWdodC5jb20vcHJvZHVjdHMvZXBkLz5gXwogICAgIFBvcHVsYXIgbW9kdWxlcyAoc3VjaCBhcyBQeVdpbjMyKSB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgZG9jdW1lbnRhdGlvbiwgdG9vbAogICAgIHN1aXRlIGZvciBidWlsZGluZyBleHRlbnNpYmxlIFB5dGhvbiBhcHBsaWNhdGlvbnMKIApAQCAtNTExLDcgKzUxNCw3IEBACiAgIHVzZXIgaW50ZXJmYWNlcwogCiBgUHl0aG9uV2luIDxodHRwOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDA2MDUyNDA0MjQyMi8KLWh0dHA6Ly93d3cucHl0aG9uLm9yZy93aW5kb3dzL3B5dGhvbndpbi8+YF8gaXMgYSBzYW1wbGUgTUZDIGFwcGxpY2F0aW9uCitodHRwczovL3d3dy5weXRob24ub3JnL3dpbmRvd3MvcHl0aG9ud2luLz5gXyBpcyBhIHNhbXBsZSBNRkMgYXBwbGljYXRpb24KIHNoaXBwZWQgd2l0aCBQeVdpbjMyLiAgSXQgaXMgYW4gZW1iZWRkYWJsZSBJREUgd2l0aCBhIGJ1aWx0LWluIGRlYnVnZ2VyLgogCiAuLiBzZWVhbHNvOjoKQEAgLTU0OSw5ICs1NTIsOSBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIElmIHlvdSB3YW50IHRvIGNvbXBpbGUgQ1B5dGhvbiB5b3Vyc2VsZiwgZmlyc3QgdGhpbmcgeW91IHNob3VsZCBkbyBpcyBnZXQgdGhlCi1gc291cmNlIDxodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC9zb3VyY2UvPmBfLiBZb3UgY2FuIGRvd25sb2FkIGVpdGhlciB0aGUKK2Bzb3VyY2UgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvc291cmNlLz5gXy4gWW91IGNhbiBkb3dubG9hZCBlaXRoZXIgdGhlCiBsYXRlc3QgcmVsZWFzZSdzIHNvdXJjZSBvciBqdXN0IGdyYWIgYSBmcmVzaCBgY2hlY2tvdXQKLTxodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL3NldHVwI2NoZWNraW5nLW91dC10aGUtY29kZT5gXy4KKzxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9zZXR1cC5odG1sI2dldHRpbmctdGhlLXNvdXJjZS1jb2RlPmBfLgogCiBUaGUgc291cmNlIHRyZWUgY29udGFpbnMgYSBidWlsZCBzb2x1dGlvbiBhbmQgcHJvamVjdCBmaWxlcyBmb3IgTWljcm9zb2Z0CiBWaXN1YWwgQysrLCB3aGljaCBpcyB0aGUgY29tcGlsZXIgdXNlZCB0byBidWlsZCB0aGUgb2ZmaWNpYWwgUHl0aG9uIHJlbGVhc2VzLgpAQCAtNTYwLDEyICs1NjMsNiBAQAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCBEaXJlY3RvcnkgICAgICAgICAgfCBNU1ZDIHZlcnNpb24gfCBWaXN1YWwgU3R1ZGlvIHZlcnNpb24gfAogKz09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09KwotfCA6ZmlsZTpgUEMvVkM2L2AgICAgfCA2LjAgICAgICAgICAgfCA5NyAgICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6ZmlsZTpgUEMvVlM3LjEvYCAgfCA3LjEgICAgICAgICAgfCAyMDAzICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCA6ZmlsZTpgUEMvVlM4LjAvYCAgfCA4LjAgICAgICAgICAgfCAyMDA1ICAgICAgICAgICAgICAgICAgfAotKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6ZmlsZTpgUEMvVlM5LjAvYCAgfCA5LjAgICAgICAgICAgfCAyMDA4ICAgICAgICAgICAgICAgICAgfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogfCA6ZmlsZTpgUENidWlsZC9gICAgfCAxMC4wICAgICAgICAgfCAyMDEwICAgICAgICAgICAgICAgICAgfApAQCAtNTk2LDcgKzU5Myw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgUHl0aG9uIFByb2dyYW1taW5nIE9uIFdpbjMyIDxodHRwOi8vd3d3Lm9yZWlsbHkuY29tL2NhdGFsb2cvcHl0aG9ud2luMzIvPmBfCisgICBgUHl0aG9uIFByb2dyYW1taW5nIE9uIFdpbjMyIDxodHRwOi8vc2hvcC5vcmVpbGx5LmNvbS9wcm9kdWN0Lzk3ODE1NjU5MjYyMTkuZG8+YF8KICAgICAgICJIZWxwIGZvciBXaW5kb3dzIFByb2dyYW1tZXJzIgogICAgICAgYnkgTWFyayBIYW1tb25kIGFuZCBBbmR5IFJvYmluc29uLCBPJ1JlaWxseSBNZWRpYSwgMjAwMCwKICAgICAgIElTQk4gMS01NjU5Mi02MjEtOApkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuMC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi4wLnJzdAppbmRleCA2NGI5MDhiLi4xMGJiMjllIDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi4wLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi4wLnJzdApAQCAtMTMwLDcgKzEzMCw3IEBACiBSZWFkIHRoZSByZXN0IG9mIFBFUCAxIGZvciB0aGUgZGV0YWlscyBvZiB0aGUgUEVQIGVkaXRvcmlhbCBwcm9jZXNzLCBzdHlsZSwgYW5kCiBmb3JtYXQuICBQRVBzIGFyZSBrZXB0IGluIHRoZSBQeXRob24gQ1ZTIHRyZWUgb24gU291cmNlRm9yZ2UsIHRob3VnaCB0aGV5J3JlIG5vdAogcGFydCBvZiB0aGUgUHl0aG9uIDIuMCBkaXN0cmlidXRpb24sIGFuZCBhcmUgYWxzbyBhdmFpbGFibGUgaW4gSFRNTCBmb3JtIGZyb20KLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9wZXBzLy4gIEFzIG9mIFNlcHRlbWJlciAyMDAwLCB0aGVyZSBhcmUgMjUgUEVQUywgcmFuZ2luZworaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9wZXBzLy4gIEFzIG9mIFNlcHRlbWJlciAyMDAwLCB0aGVyZSBhcmUgMjUgUEVQUywgcmFuZ2luZwogZnJvbSBQRVAgMjAxLCAiTG9ja3N0ZXAgSXRlcmF0aW9uIiwgdG8gUEVQIDIyNSwgIkVsZW1lbnR3aXNlL09iamVjdHdpc2UKIE9wZXJhdG9ycyIuCiAKQEAgLTU2Niw3ICs1NjYsNyBAQAogc2ltcGx5IGJlIHNpbGVudGx5IHN3YWxsb3dlZC4KIAogLi4gU3RhcnRpbmcgVVJMOgotLi4gaHR0cDovL3d3dy5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDAtQXByaWwvMDA0ODM0Lmh0bWwKKy4uIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwMC1BcHJpbC8wMDQ4MzQuaHRtbAogCiBXb3JrIGhhcyBiZWVuIGRvbmUgb24gcG9ydGluZyBQeXRob24gdG8gNjQtYml0IFdpbmRvd3Mgb24gdGhlIEl0YW5pdW0gcHJvY2Vzc29yLAogbW9zdGx5IGJ5IFRyZW50IE1pY2sgb2YgQWN0aXZlU3RhdGUuICAoQ29uZnVzaW5nbHksIGBgc3lzLnBsYXRmb3JtYGAgaXMgc3RpbGwKQEAgLTEwMDMsNyArMTAwMyw3IEBACiAKIFRoZSBYTUwgU3BlY2lhbCBJbnRlcmVzdCBHcm91cCBoYXMgYmVlbiB3b3JraW5nIG9uIFhNTC1yZWxhdGVkIFB5dGhvbiBjb2RlIGZvciBhCiB3aGlsZS4gIEl0cyBjb2RlIGRpc3RyaWJ1dGlvbiwgY2FsbGVkIFB5WE1MLCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgU0lHJ3MgV2ViCi1wYWdlcyBhdCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2lncy94bWwtc2lnLy4gVGhlIFB5WE1MIGRpc3RyaWJ1dGlvbiBhbHNvIHVzZWQKK3BhZ2VzIGF0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvY29tbXVuaXR5L3NpZ3MvY3VycmVudC94bWwtc2lnLiBUaGUgUHlYTUwgZGlzdHJpYnV0aW9uIGFsc28gdXNlZAogdGhlIHBhY2thZ2UgbmFtZSBgYHhtbGBgLiAgSWYgeW91J3ZlIHdyaXR0ZW4gcHJvZ3JhbXMgdGhhdCB1c2VkIFB5WE1MLCB5b3UncmUKIHByb2JhYmx5IHdvbmRlcmluZyBhYm91dCBpdHMgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSAyLjAgOm1vZDpgeG1sYCBwYWNrYWdlLgogCkBAIC0xMTc0LDggKzExNzQsOCBAQAogCiAqIEluIHRoZSBlZGl0b3Igd2luZG93LCB0aGVyZSBpcyBub3cgYSBsaW5lL2NvbHVtbiBiYXIgYXQgdGhlIGJvdHRvbS4KIAotKiBUaHJlZSBuZXcga2V5c3Ryb2tlIGNvbW1hbmRzOiBDaGVjayBtb2R1bGUgKEFsdC1GNSksIEltcG9ydCBtb2R1bGUgKEY1KSBhbmQKLSAgUnVuIHNjcmlwdCAoQ3RybC1GNSkuCisqIFRocmVlIG5ldyBrZXlzdHJva2UgY29tbWFuZHM6IENoZWNrIG1vZHVsZSAoOmtiZDpgQWx0LUY1YCksIEltcG9ydCBtb2R1bGUgKDprYmQ6YEY1YCkgYW5kCisgIFJ1biBzY3JpcHQgKDprYmQ6YEN0cmwtRjVgKS4KIAogLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi4xLnJzdCBiL0RvYy93aGF0c25ldy8yLjEucnN0CmluZGV4IGIxYWI0OGUuLjZkZTViZjUgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjEucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjEucnN0CkBAIC0yMTksNyArMjE5LDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgIDpwZXA6YDIwN2AgLSBSaWNoIENvbXBhcmlzaW9ucworICAgOnBlcDpgMjA3YCAtIFJpY2ggQ29tcGFyaXNvbnMKICAgICAgIFdyaXR0ZW4gYnkgR3VpZG8gdmFuIFJvc3N1bSwgaGVhdmlseSBiYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnkgRGF2aWQgQXNjaGVyLCBhbmQKICAgICAgIGltcGxlbWVudGVkIGJ5IEd1aWRvIHZhbiBSb3NzdW0uCiAKQEAgLTU1NSwxNCArNTU1LDE0IEBACiBhbmQgZXhwZXJpbWVudCB3aXRoIHRoZW0uICBXaXRoIHRoZSByZXN1bHQgZXhwZXJpZW5jZSwgcGVyaGFwcyBpdCdsbCBiZSBwb3NzaWJsZQogdG8gZGVzaWduIGEgcmVhbGx5IGdvb2QgY2F0YWxvZyBhbmQgdGhlbiBidWlsZCBzdXBwb3J0IGZvciBpdCBpbnRvIFB5dGhvbiAyLjIuCiBGb3IgZXhhbXBsZSwgdGhlIERpc3R1dGlscyA6Y29tbWFuZDpgc2Rpc3RgIGFuZCA6Y29tbWFuZDpgYmRpc3RfXCpgIGNvbW1hbmRzCi1jb3VsZCBzdXBwb3J0IGEgOm9wdGlvbjpgdXBsb2FkYCBvcHRpb24gdGhhdCB3b3VsZCBhdXRvbWF0aWNhbGx5IHVwbG9hZCB5b3VyCitjb3VsZCBzdXBwb3J0IGFuIGBgdXBsb2FkYGAgb3B0aW9uIHRoYXQgd291bGQgYXV0b21hdGljYWxseSB1cGxvYWQgeW91cgogcGFja2FnZSB0byBhIGNhdGFsb2cgc2VydmVyLgogCiBZb3UgY2FuIHN0YXJ0IGNyZWF0aW5nIHBhY2thZ2VzIGNvbnRhaW5pbmcgOmZpbGU6YFBLRy1JTkZPYCBldmVuIGlmIHlvdSdyZSBub3QKIHVzaW5nIFB5dGhvbiAyLjEsIHNpbmNlIGEgbmV3IHJlbGVhc2Ugb2YgdGhlIERpc3R1dGlscyB3aWxsIGJlIG1hZGUgZm9yIHVzZXJzIG9mCiBlYXJsaWVyIFB5dGhvbiB2ZXJzaW9ucy4gIFZlcnNpb24gMS4wLjIgb2YgdGhlIERpc3R1dGlscyBpbmNsdWRlcyB0aGUgY2hhbmdlcwogZGVzY3JpYmVkIGluIFBFUCAyNDEsIGFzIHdlbGwgYXMgdmFyaW91cyBidWdmaXhlcyBhbmQgZW5oYW5jZW1lbnRzLiAgSXQgd2lsbCBiZQotYXZhaWxhYmxlIGZyb20gIHRoZSBEaXN0dXRpbHMgU0lHIGF0IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zaWdzL2Rpc3R1dGlscy1zaWcvLgorYXZhaWxhYmxlIGZyb20gIHRoZSBEaXN0dXRpbHMgU0lHIGF0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvc2lncy9kaXN0dXRpbHMtc2lnLy4KIAogCiAuLiBzZWVhbHNvOjoKQEAgLTczMSw3ICs3MzEsNyBAQAogICAgICAgICAgLi4uCiAKICAgRm9yIGEgZnVsbGVyIGRpc2N1c3Npb24gb2YgdGhlIGxpbmUgSS9PIGNoYW5nZXMsIHNlZSB0aGUgcHl0aG9uLWRldiBzdW1tYXJ5IGZvcgotICBKYW51YXJ5IDEtMTUsIDIwMDEgYXQgaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9zdW1tYXJ5LzIwMDEtMDEtMS8uCisgIEphbnVhcnkgMS0xNSwgMjAwMSBhdCBodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9zdW1tYXJ5LzIwMDEtMDEtMS8uCiAKICogQSBuZXcgbWV0aG9kLCA6bWV0aDpgcG9waXRlbWAsIHdhcyBhZGRlZCB0byBkaWN0aW9uYXJpZXMgdG8gZW5hYmxlCiAgIGRlc3RydWN0aXZlbHkgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGNvbnRlbnRzIG9mIGEgZGljdGlvbmFyeTsgdGhpcyBjYW4gYmUgZmFzdGVyCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi4yLnJzdCBiL0RvYy93aGF0c25ldy8yLjIucnN0CmluZGV4IDMxYjZkZjQuLmYzYzRhOTEgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjIucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjIucnN0CkBAIC0yNCw4ICsyNCw4IEBACiBUaGlzIGFydGljbGUgZG9lc24ndCBhdHRlbXB0IHRvIHByb3ZpZGUgYSBjb21wbGV0ZSBzcGVjaWZpY2F0aW9uIG9mIHRoZSBuZXcKIGZlYXR1cmVzLCBidXQgaW5zdGVhZCBwcm92aWRlcyBhIGNvbnZlbmllbnQgb3ZlcnZpZXcuICBGb3IgZnVsbCBkZXRhaWxzLCB5b3UKIHNob3VsZCByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDIuMiwgc3VjaCBhcyB0aGUgYFB5dGhvbiBMaWJyYXJ5Ci1SZWZlcmVuY2UgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4yL2xpYi9saWIuaHRtbD5gXyBhbmQgdGhlIGBQeXRob24KLVJlZmVyZW5jZSBNYW51YWwgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvMi4yL3JlZi9yZWYuaHRtbD5gXy4gIElmIHlvdSB3YW50IHRvCitSZWZlcmVuY2UgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG9jLzIuMi9saWIvbGliLmh0bWw+YF8gYW5kIHRoZSBgUHl0aG9uCitSZWZlcmVuY2UgTWFudWFsIDxodHRwczovL3d3dy5weXRob24ub3JnL2RvYy8yLjIvcmVmL3JlZi5odG1sPmBfLiAgSWYgeW91IHdhbnQgdG8KIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIGFuZCBkZXNpZ24gcmF0aW9uYWxlIGZvciBhIGNoYW5nZSwgcmVmZXIKIHRvIHRoZSBQRVAgZm9yIGEgcGFydGljdWxhciBuZXcgZmVhdHVyZS4KIApAQCAtMzk1LDcgKzM5NSw3IEBACiBvZiBhbiBleHBsYW5hdGlvbiB0byBzdGFydCB5b3UgcHJvZ3JhbW1pbmcsIGJ1dCBtYW55IGRldGFpbHMgaGF2ZSBiZWVuCiBzaW1wbGlmaWVkIG9yIGlnbm9yZWQuICBXaGVyZSBzaG91bGQgeW91IGdvIHRvIGdldCBhIG1vcmUgY29tcGxldGUgcGljdHVyZT8KIAotaHR0cDovL3d3dy5weXRob24ub3JnLzIuMi9kZXNjcmludHJvLmh0bWwgaXMgYSBsZW5ndGh5IHR1dG9yaWFsIGludHJvZHVjdGlvbiB0bworaHR0cHM6Ly93d3cucHl0aG9uLm9yZy8yLjIvZGVzY3JpbnRyby5odG1sIGlzIGEgbGVuZ3RoeSB0dXRvcmlhbCBpbnRyb2R1Y3Rpb24gdG8KIHRoZSBkZXNjcmlwdG9yIGZlYXR1cmVzLCB3cml0dGVuIGJ5IEd1aWRvIHZhbiBSb3NzdW0uIElmIG15IGRlc2NyaXB0aW9uIGhhcwogd2hldHRlZCB5b3VyIGFwcGV0aXRlLCBnbyByZWFkIHRoaXMgdHV0b3JpYWwgbmV4dCwgYmVjYXVzZSBpdCBnb2VzIGludG8gbXVjaAogbW9yZSBkZXRhaWwgYWJvdXQgdGhlIG5ldyBmZWF0dXJlcyB3aGlsZSBzdGlsbCByZW1haW5pbmcgcXVpdGUgZWFzeSB0byByZWFkLgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuMy5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi4zLnJzdAppbmRleCBmMGU0OGQ5Li45ZDk5MDc0IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi4zLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi4zLnJzdApAQCAtNDExLDcgKzQxMSw3IEBACiAKIEEgbmV3IGJ1aWx0LWluIGZ1bmN0aW9uLCA6ZnVuYzpgZW51bWVyYXRlYCwgd2lsbCBtYWtlIGNlcnRhaW4gbG9vcHMgYSBiaXQKIGNsZWFyZXIuICBgYGVudW1lcmF0ZSh0aGluZylgYCwgd2hlcmUgKnRoaW5nKiBpcyBlaXRoZXIgYW4gaXRlcmF0b3Igb3IgYQotc2VxdWVuY2UsIHJldHVybnMgYSBpdGVyYXRvciB0aGF0IHdpbGwgcmV0dXJuIGBgKDAsIHRoaW5nWzBdKWBgLCBgYCgxLAorc2VxdWVuY2UsIHJldHVybnMgYW4gaXRlcmF0b3IgdGhhdCB3aWxsIHJldHVybiBgYCgwLCB0aGluZ1swXSlgYCwgYGAoMSwKIHRoaW5nWzFdKWBgLCBgYCgyLCB0aGluZ1syXSlgYCwgYW5kIHNvIGZvcnRoLgogCiBBIGNvbW1vbiBpZGlvbSB0byBjaGFuZ2UgZXZlcnkgZWxlbWVudCBvZiBhIGxpc3QgbG9va3MgbGlrZSB0aGlzOjoKQEAgLTY1Nyw3ICs2NTcsNyBAQAogUnVubmluZyBgYHB5dGhvbiBzZXR1cC5weSByZWdpc3RlcmBgIHdpbGwgY29sbGVjdCB0aGUgbWV0YWRhdGEgZGVzY3JpYmluZyBhCiBwYWNrYWdlLCBzdWNoIGFzIGl0cyBuYW1lLCB2ZXJzaW9uLCBtYWludGFpbmVyLCBkZXNjcmlwdGlvbiwgJmMuLCBhbmQgc2VuZCBpdCB0bwogYSBjZW50cmFsIGNhdGFsb2cgc2VydmVyLiAgVGhlIHJlc3VsdGluZyBjYXRhbG9nIGlzIGF2YWlsYWJsZSBmcm9tCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvcHlwaS4KK2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGkuCiAKIFRvIG1ha2UgdGhlIGNhdGFsb2cgYSBiaXQgbW9yZSB1c2VmdWwsIGEgbmV3IG9wdGlvbmFsICpjbGFzc2lmaWVycyoga2V5d29yZAogYXJndW1lbnQgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIERpc3R1dGlscyA6ZnVuYzpgc2V0dXBgIGZ1bmN0aW9uLiAgQSBsaXN0IG9mCkBAIC0xMDgyLDkgKzEwODIsOSBAQAogICBDMyBhbGdvcml0aG0gYXMgZGVzY3JpYmVkIGluIHRoZSBwYXBlciBgIkEgTW9ub3RvbmljIFN1cGVyY2xhc3MgTGluZWFyaXphdGlvbgogICBmb3IgRHlsYW4iIDxodHRwOi8vd3d3LndlYmNvbS5jb20vaGFhaHIvZHlsYW4vbGluZWFyaXphdGlvbi1vb3BzbGE5Ni5odG1sPmBfLiBUbwogICB1bmRlcnN0YW5kIHRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIGNoYW5nZSwgIHJlYWQgTWljaGVsZSBTaW1pb25hdG8ncyBhcnRpY2xlCi0gIGAiUHl0aG9uIDIuMyBNZXRob2QgUmVzb2x1dGlvbiBPcmRlciIgPGh0dHA6Ly93d3cucHl0aG9uLm9yZy8yLjMvbXJvLmh0bWw+YF8sIG9yCisgIGAiUHl0aG9uIDIuMyBNZXRob2QgUmVzb2x1dGlvbiBPcmRlciIgPGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvMi4zL21yby5odG1sPmBfLCBvcgogICByZWFkIHRoZSB0aHJlYWQgb24gcHl0aG9uLWRldiBzdGFydGluZyB3aXRoIHRoZSBtZXNzYWdlIGF0Ci0gIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAwMi1PY3RvYmVyLzAyOTAzNS5odG1sLiBTYW11ZWxlCisgIGh0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDItT2N0b2Jlci8wMjkwMzUuaHRtbC4gU2FtdWVsZQogICBQZWRyb25pIGZpcnN0IHBvaW50ZWQgb3V0IHRoZSBwcm9ibGVtIGFuZCBhbHNvIGltcGxlbWVudGVkIHRoZSBmaXggYnkgY29kaW5nIHRoZQogICBDMyBhbGdvcml0aG0uCiAKQEAgLTEzMzAsNyArMTMzMCw3IEBACiAgIChDb250cmlidXRlZCBieSBLZXZpbiBPJ0Nvbm5vci4pCiAKICogVGhlIElETEUgaW50ZWdyYXRlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCBoYXMgYmVlbiB1cGRhdGVkIHVzaW5nIHRoZSBjb2RlCi0gIGZyb20gdGhlIElETEVmb3JrIHByb2plY3QgKGh0dHA6Ly9pZGxlZm9yay5zZi5uZXQpLiAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIGlzCisgIGZyb20gdGhlIElETEVmb3JrIHByb2plY3QgKGh0dHA6Ly9pZGxlZm9yay5zb3VyY2Vmb3JnZS5uZXQpLiAgVGhlIG1vc3Qgbm90YWJsZSBmZWF0dXJlIGlzCiAgIHRoYXQgdGhlIGNvZGUgYmVpbmcgZGV2ZWxvcGVkIGlzIG5vdyBleGVjdXRlZCBpbiBhIHN1YnByb2Nlc3MsIG1lYW5pbmcgdGhhdAogICB0aGVyZSdzIG5vIGxvbmdlciBhbnkgbmVlZCBmb3IgbWFudWFsIGBgcmVsb2FkKClgYCBvcGVyYXRpb25zLiBJRExFJ3MgY29yZSBjb2RlCiAgIGhhcyBiZWVuIGluY29ycG9yYXRlZCBpbnRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFzIHRoZSA6bW9kOmBpZGxlbGliYCBwYWNrYWdlLgpAQCAtMTU2NCw3ICsxNTY0LDcgQEAKICAgdG8gdGhlIGNvcnJlY3QgdGhyZWFkLCBhbmQgd2FpdGluZyBmb3IgdGhlIHJlc3VsdHMuICBPdGhlciBpbnRlcmZhY2VzIGNhbid0IGJlCiAgIGhhbmRsZWQgYXV0b21hdGljYWxseSBidXQgOm1vZDpgVGtpbnRlcmAgd2lsbCBub3cgcmFpc2UgYW4gZXhjZXB0aW9uIG9uIHN1Y2ggYW4KICAgYWNjZXNzIHNvIHRoYXQgeW91IGNhbiBhdCBsZWFzdCBmaW5kIG91dCBhYm91dCB0aGUgcHJvYmxlbS4gIFNlZQotICBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDItRGVjZW1iZXIvMDMxMTA3Lmh0bWwgZm9yIGEgbW9yZQorICBodHRwczovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDAyLURlY2VtYmVyLzAzMTEwNy5odG1sIGZvciBhIG1vcmUKICAgZGV0YWlsZWQgZXhwbGFuYXRpb24gb2YgdGhpcyBjaGFuZ2UuICAoSW1wbGVtZW50ZWQgYnkgTWFydGluIHZvbiBMw7Z3aXMuKQogCiAqIENhbGxpbmcgVGNsIG1ldGhvZHMgdGhyb3VnaCA6bW9kOmBfdGtpbnRlcmAgbm8gbG9uZ2VyICByZXR1cm5zIG9ubHkgc3RyaW5ncy4KQEAgLTE4NTgsNyArMTg1OCw3IEBACiAKIC4uIHNlZWFsc286OgogCi0gICBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvdmlldy9weXRob24vdHJ1bmsvT2JqZWN0cy9vYm1hbGxvYy5jCisgICBodHRwczovL3N2bi5weXRob24ub3JnL3ZpZXcvcHl0aG9uL3RydW5rL09iamVjdHMvb2JtYWxsb2MuYwogICAgICAgRm9yIHRoZSBmdWxsIGRldGFpbHMgb2YgdGhlIHB5bWFsbG9jIGltcGxlbWVudGF0aW9uLCBzZWUgdGhlIGNvbW1lbnRzIGF0CiAgICAgICB0aGUgdG9wIG9mIHRoZSBmaWxlIDpmaWxlOmBPYmplY3RzL29ibWFsbG9jLmNgIGluIHRoZSBQeXRob24gc291cmNlIGNvZGUuCiAgICAgICBUaGUgYWJvdmUgbGluayBwb2ludHMgdG8gdGhlIGZpbGUgd2l0aGluIHRoZSBweXRob24ub3JnIFNWTiBicm93c2VyLgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzIuNC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMi40LnJzdAppbmRleCA1OTczZjNiLi41NjllNWU5IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMi40LnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMi40LnJzdApAQCAtMzM3LDcgKzMzNyw3IEBACiAgICAgICB3cm90ZSBwYXRjaGVzIGltcGxlbWVudGluZyBmdW5jdGlvbiBkZWNvcmF0b3JzLCBidXQgdGhlIG9uZSB0aGF0IHdhcyBhY3R1YWxseQogICAgICAgY2hlY2tlZCBpbiB3YXMgcGF0Y2ggIzk3OTcyOCwgd3JpdHRlbiBieSBNYXJrIFJ1c3NlbGwuCiAKLSAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9tb2luL1B5dGhvbkRlY29yYXRvckxpYnJhcnkKKyAgIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvbW9pbi9QeXRob25EZWNvcmF0b3JMaWJyYXJ5CiAgICAgICBUaGlzIFdpa2kgcGFnZSBjb250YWlucyBzZXZlcmFsIGV4YW1wbGVzIG9mIGRlY29yYXRvcnMuCiAKIC4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjUucnN0IGIvRG9jL3doYXRzbmV3LzIuNS5yc3QKaW5kZXggNjgzNjMwYS4uY2I5MmUwOCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuNS5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuNS5yc3QKQEAgLTM5LDcgKzM5LDcgQEAKIFRoaXMgYXJ0aWNsZSBkb2Vzbid0IHRyeSB0byBiZSBhIGNvbXBsZXRlIHNwZWNpZmljYXRpb24gb2YgdGhlIG5ldyBmZWF0dXJlczsKIGluc3RlYWQgY2hhbmdlcyBhcmUgYnJpZWZseSBpbnRyb2R1Y2VkIHVzaW5nIGhlbHBmdWwgZXhhbXBsZXMuICBGb3IgZnVsbAogZGV0YWlscywgeW91IHNob3VsZCBhbHdheXMgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIFB5dGhvbiAyLjUgYXQKLWh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcuIElmIHlvdSB3YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uCitodHRwczovL2RvY3MucHl0aG9uLm9yZy4gSWYgeW91IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgaW1wbGVtZW50YXRpb24KIGFuZCBkZXNpZ24gcmF0aW9uYWxlLCByZWZlciB0byB0aGUgUEVQIGZvciBhIHBhcnRpY3VsYXIgbmV3IGZlYXR1cmUuCiAKIENvbW1lbnRzLCBzdWdnZXN0aW9ucywgYW5kIGVycm9yIHJlcG9ydHMgZm9yIHRoaXMgZG9jdW1lbnQgYXJlIHdlbGNvbWU7IHBsZWFzZQpAQCAtMjI5LDcgKzIyOSw3IEBACiAgICAgICAgICkKIAogQW5vdGhlciBuZXcgZW5oYW5jZW1lbnQgdG8gdGhlIFB5dGhvbiBwYWNrYWdlIGluZGV4IGF0Ci1odHRwOi8vY2hlZXNlc2hvcC5weXRob24ub3JnIGlzIHN0b3Jpbmcgc291cmNlIGFuZCBiaW5hcnkgYXJjaGl2ZXMgZm9yIGEKK2h0dHBzOi8vcHlwaS5weXRob24ub3JnIGlzIHN0b3Jpbmcgc291cmNlIGFuZCBiaW5hcnkgYXJjaGl2ZXMgZm9yIGEKIHBhY2thZ2UuICBUaGUgbmV3IDpjb21tYW5kOmB1cGxvYWRgIERpc3R1dGlscyBjb21tYW5kIHdpbGwgdXBsb2FkIGEgcGFja2FnZSB0bwogdGhlIHJlcG9zaXRvcnkuCiAKQEAgLTgyNyw3ICs4MjcsNyBAQAogVGhpcyByZWFycmFuZ2VtZW50IHdhcyBkb25lIGJlY2F1c2UgcGVvcGxlIG9mdGVuIHdhbnQgdG8gY2F0Y2ggYWxsIGV4Y2VwdGlvbnMKIHRoYXQgaW5kaWNhdGUgcHJvZ3JhbSBlcnJvcnMuICA6ZXhjOmBLZXlib2FyZEludGVycnVwdGAgYW5kIDpleGM6YFN5c3RlbUV4aXRgCiBhcmVuJ3QgZXJyb3JzLCB0aG91Z2gsIGFuZCB1c3VhbGx5IHJlcHJlc2VudCBhbiBleHBsaWNpdCBhY3Rpb24gc3VjaCBhcyB0aGUgdXNlcgotaGl0dGluZyBDb250cm9sLUMgb3IgY29kZSBjYWxsaW5nIDpmdW5jOmBzeXMuZXhpdGAuICBBIGJhcmUgYGBleGNlcHQ6YGAgd2lsbAoraGl0dGluZyA6a2JkOmBDb250cm9sLUNgIG9yIGNvZGUgY2FsbGluZyA6ZnVuYzpgc3lzLmV4aXRgLiAgQSBiYXJlIGBgZXhjZXB0OmBgIHdpbGwKIGNhdGNoIGFsbCBleGNlcHRpb25zLCBzbyB5b3UgY29tbW9ubHkgbmVlZCB0byBsaXN0IDpleGM6YEtleWJvYXJkSW50ZXJydXB0YCBhbmQKIDpleGM6YFN5c3RlbUV4aXRgIGluIG9yZGVyIHRvIHJlLXJhaXNlIHRoZW0uICBUaGUgdXN1YWwgcGF0dGVybiBpczo6CiAKQEAgLTIxMzAsNyArMjEzMCw3IEBACiAgIHN1Y2ggYXMgUHlDb24uCiAKICAgLi4gTGlzdCBvZiBuYW1lcyB0YWtlbiBmcm9tIEplcmVteSdzIHB5dGhvbi1kZXYgcG9zdCBhdAotICAuLiBodHRwOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDUtT2N0b2Jlci8wNTc1MDAuaHRtbAorICAuLiBodHRwczovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDA1LU9jdG9iZXIvMDU3NTAwLmh0bWwKIAogKiBFdmFuIEpvbmVzJ3MgcGF0Y2ggdG8gb2JtYWxsb2MsIGZpcnN0IGRlc2NyaWJlZCBpbiBhIHRhbGsgYXQgUHlDb24gREMgMjAwNSwKICAgd2FzIGFwcGxpZWQuICBQeXRob24gMi40IGFsbG9jYXRlZCBzbWFsbCBvYmplY3RzIGluIDI1Nkstc2l6ZWQgYXJlbmFzLCBidXQgbmV2ZXIKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjYucnN0IGIvRG9jL3doYXRzbmV3LzIuNi5yc3QKaW5kZXggM2FlNmM3Ny4uZTc2MzI2NSAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuNi5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuNi5yc3QKQEAgLTE2NCw3ICsxNjQsNyBAQAogdG8gYWRtaW5pc3RlciBpdCBhbmQgYSBzZXJ2ZXIgdG8gaG9zdCBpdC4KIAogQWZ0ZXIgcG9zdGluZyBhIGNhbGwgZm9yIHZvbHVudGVlcnMsIGEgbmV3IFJvdW5kdXAgaW5zdGFsbGF0aW9uIHdhcwotc2V0IHVwIGF0IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcuICBPbmUgaW5zdGFsbGF0aW9uIG9mIFJvdW5kdXAgY2FuCitzZXQgdXAgYXQgaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcuICBPbmUgaW5zdGFsbGF0aW9uIG9mIFJvdW5kdXAgY2FuCiBob3N0IG11bHRpcGxlIHRyYWNrZXJzLCBhbmQgdGhpcyBzZXJ2ZXIgbm93IGFsc28gaG9zdHMgaXNzdWUgdHJhY2tlcnMKIGZvciBKeXRob24gYW5kIGZvciB0aGUgUHl0aG9uIHdlYiBzaXRlLiAgSXQgd2lsbCBzdXJlbHkgZmluZAogb3RoZXIgdXNlcyBpbiB0aGUgZnV0dXJlLiAgV2hlcmUgcG9zc2libGUsCkBAIC0xODEsNyArMTgxLDcgQEAKIAogLi4gc2VlYWxzbzo6CiAKLSAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZworICBodHRwczovL2J1Z3MucHl0aG9uLm9yZwogICAgIFRoZSBQeXRob24gYnVnIHRyYWNrZXIuCiAKICAgaHR0cDovL2J1Z3Muanl0aG9uLm9yZzoKQEAgLTIyNywxOCArMjI3LDE4IEBACiAKIFNwaGlueCBpcyBhIHN0YW5kYWxvbmUgcGFja2FnZSB0aGF0IGNhbiBiZSB1c2VkIGZvciB3cml0aW5nLCBhbmQKIGFsbW9zdCB0d28gZG96ZW4gb3RoZXIgcHJvamVjdHMKLShgbGlzdGVkIG9uIHRoZSBTcGhpbnggd2ViIHNpdGUgPGh0dHA6Ly9zcGhpbngucG9jb28ub3JnL2V4YW1wbGVzLmh0bWw+YF9fKQorKGBsaXN0ZWQgb24gdGhlIFNwaGlueCB3ZWIgc2l0ZSA8aHR0cDovL3NwaGlueC1kb2Mub3JnL2V4YW1wbGVzLmh0bWw+YF9fKQogaGF2ZSBhZG9wdGVkIFNwaGlueCBhcyB0aGVpciBkb2N1bWVudGF0aW9uIHRvb2wuCiAKIC4uIHNlZWFsc286OgogCi0gICBgRG9jdW1lbnRpbmcgUHl0aG9uIDxodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlL2RvY3VtZW50aW5nLmh0bWw+YF9fCisgICBgRG9jdW1lbnRpbmcgUHl0aG9uIDxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9kb2N1bWVudGluZy5odG1sPmBfXwogICAgICAgIERlc2NyaWJlcyBob3cgdG8gd3JpdGUgZm9yIFB5dGhvbidzIGRvY3VtZW50YXRpb24uCiAKLSAgIGBTcGhpbnggPGh0dHA6Ly9zcGhpbngucG9jb28ub3JnLz5gX18KKyAgIGBTcGhpbnggPGh0dHA6Ly9zcGhpbngtZG9jLm9yZy8+YF9fCiAgICAgIERvY3VtZW50YXRpb24gYW5kIGNvZGUgZm9yIHRoZSBTcGhpbnggdG9vbGNoYWluLgogCi0gICBgRG9jdXRpbHMgPGh0dHA6Ly9kb2N1dGlscy5zZi5uZXQ+YF9fCisgICBgRG9jdXRpbHMgPGh0dHA6Ly9kb2N1dGlscy5zb3VyY2Vmb3JnZS5uZXQ+YF9fCiAgICAgIFRoZSB1bmRlcmx5aW5nIHJlU3RydWN0dXJlZFRleHQgcGFyc2VyIGFuZCB0b29sc2V0LgogCiAKQEAgLTIzNjMsNyArMjM2Myw3IEBACiAgIG5lZ290aWF0aW9uIGl0c2VsZi4gIChQYXRjaCBjb250cmlidXRlZCBieSBCaWxsIEZlbm5lcjsKICAgOmlzc3VlOmA4Mjk5NTFgLikKIAotKiBUaGUgOm1vZDpgc29ja2V0YCBtb2R1bGUgbm93IHN1cHBvcnRzIFRJUEMgKGh0dHA6Ly90aXBjLnNmLm5ldCksCisqIFRoZSA6bW9kOmBzb2NrZXRgIG1vZHVsZSBub3cgc3VwcG9ydHMgVElQQyAoaHR0cDovL3RpcGMuc291cmNlZm9yZ2UubmV0LyksCiAgIGEgaGlnaC1wZXJmb3JtYW5jZSBub24tSVAtYmFzZWQgcHJvdG9jb2wgZGVzaWduZWQgZm9yIHVzZSBpbiBjbHVzdGVyZWQKICAgZW52aXJvbm1lbnRzLiAgVElQQyBhZGRyZXNzZXMgYXJlIDQtIG9yIDUtdHVwbGVzLgogICAoQ29udHJpYnV0ZWQgYnkgQWxiZXJ0byBCZXJ0b2dsaTsgOmlzc3VlOmAxNjQ2YC4pCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMi43LnJzdCBiL0RvYy93aGF0c25ldy8yLjcucnN0CmluZGV4IGIyNmM5YjIuLjM5NjZjYjQgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8yLjcucnN0CisrKyBiL0RvYy93aGF0c25ldy8yLjcucnN0CkBAIC03LDcgKzcsNiBAQAogLi4gIGh5cGVybGluayBhbGwgdGhlIG1ldGhvZHMgJiBmdW5jdGlvbnMuCiAKIC4uIFRfU1RSSU5HX0lOUExBQ0Ugbm90IGRlc2NyaWJlZCBpbiBtYWluIGRvY3MKLS4uICJGb3JtYXQgU3RyaW5nIFN5bnRheCIgaW4gc3RyaW5nLnJzdCBjb3VsZCB1c2UgbWFueSBtb3JlIGV4YW1wbGVzLgogCiAuLiAkSWQkCiAgICBSdWxlcyBmb3IgbWFpbnRlbmFuY2U6CkBAIC01MCwxNyArNDksMTYgQEAKICAgIFRoaXMgc2F2ZXMgdGhlIG1haW50YWluZXIgc29tZSBlZmZvcnQgZ29pbmcgdGhyb3VnaCB0aGUgU1ZOIGxvZ3MKICAgIHdoZW4gcmVzZWFyY2hpbmcgYSBjaGFuZ2UuCiAKLVRoaXMgYXJ0aWNsZSBleHBsYWlucyB0aGUgbmV3IGZlYXR1cmVzIGluIFB5dGhvbiAyLjcuICBUaGUgZmluYWwKLXJlbGVhc2Ugb2YgMi43IGlzIGN1cnJlbnRseSBzY2hlZHVsZWQgZm9yIEp1bHkgMjAxMDsgdGhlIGRldGFpbGVkCi1zY2hlZHVsZSBpcyBkZXNjcmliZWQgaW4gOnBlcDpgMzczYC4KK1RoaXMgYXJ0aWNsZSBleHBsYWlucyB0aGUgbmV3IGZlYXR1cmVzIGluIFB5dGhvbiAyLjcuICBQeXRob24gMi43IHdhcyByZWxlYXNlZAorb24gSnVseSAzLCAyMDEwLgogCiBOdW1lcmljIGhhbmRsaW5nIGhhcyBiZWVuIGltcHJvdmVkIGluIG1hbnkgd2F5cywgZm9yIGJvdGgKLWZsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIGZvciB0aGUgOmNsYXNzOmBEZWNpbWFsYCBjbGFzcy4gIFRoZXJlIGFyZQotc29tZSB1c2VmdWwgYWRkaXRpb25zIHRvIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LCBzdWNoIGFzIGEgZ3JlYXRseQotZW5oYW5jZWQgOm1vZDpgdW5pdHRlc3RgIG1vZHVsZSwgdGhlIDptb2Q6YGFyZ3BhcnNlYCBtb2R1bGUgZm9yCi1wYXJzaW5nIGNvbW1hbmQtbGluZSBvcHRpb25zLCBjb252ZW5pZW50IG9yZGVyZWQtZGljdGlvbmFyeSBhbmQKLTpjbGFzczpgQ291bnRlcmAgY2xhc3NlcyBpbiB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZSwgYW5kIG1hbnkKLW90aGVyIGltcHJvdmVtZW50cy4KK2Zsb2F0aW5nLXBvaW50IG51bWJlcnMgYW5kIGZvciB0aGUgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBjbGFzcy4KK1RoZXJlIGFyZSBzb21lIHVzZWZ1bCBhZGRpdGlvbnMgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnksIHN1Y2ggYXMgYQorZ3JlYXRseSBlbmhhbmNlZCA6bW9kOmB1bml0dGVzdGAgbW9kdWxlLCB0aGUgOm1vZDpgYXJncGFyc2VgIG1vZHVsZQorZm9yIHBhcnNpbmcgY29tbWFuZC1saW5lIG9wdGlvbnMsIGNvbnZlbmllbnQgOmNsYXNzOmB+Y29sbGVjdGlvbnMuT3JkZXJlZERpY3RgCithbmQgOmNsYXNzOmB+Y29sbGVjdGlvbnMuQ291bnRlcmAgY2xhc3NlcyBpbiB0aGUgOm1vZDpgY29sbGVjdGlvbnNgIG1vZHVsZSwKK2FuZCBtYW55IG90aGVyIGltcHJvdmVtZW50cy4KIAogUHl0aG9uIDIuNyBpcyBwbGFubmVkIHRvIGJlIHRoZSBsYXN0IG9mIHRoZSAyLnggcmVsZWFzZXMsIHNvIHdlIHdvcmtlZAogb24gbWFraW5nIGl0IGEgZ29vZCByZWxlYXNlIGZvciB0aGUgbG9uZyB0ZXJtLiAgVG8gaGVscCB3aXRoIHBvcnRpbmcKQEAgLTcwLDkgKzY4LDkgQEAKIFRoaXMgYXJ0aWNsZSBkb2Vzbid0IGF0dGVtcHQgdG8gcHJvdmlkZSBhIGNvbXBsZXRlIHNwZWNpZmljYXRpb24gb2YKIHRoZSBuZXcgZmVhdHVyZXMsIGJ1dCBpbnN0ZWFkIHByb3ZpZGVzIGEgY29udmVuaWVudCBvdmVydmlldy4gIEZvcgogZnVsbCBkZXRhaWxzLCB5b3Ugc2hvdWxkIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciBQeXRob24gMi43IGF0Ci1odHRwOi8vZG9jcy5weXRob24ub3JnLiBJZiB5b3Ugd2FudCB0byB1bmRlcnN0YW5kIHRoZSByYXRpb25hbGUgZm9yCitodHRwczovL2RvY3MucHl0aG9uLm9yZy4gSWYgeW91IHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgcmF0aW9uYWxlIGZvcgogdGhlIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24sIHJlZmVyIHRvIHRoZSBQRVAgZm9yIGEgcGFydGljdWxhciBuZXcKLWZlYXR1cmUgb3IgdGhlIGlzc3VlIG9uIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcgaW4gd2hpY2ggYSBjaGFuZ2Ugd2FzCitmZWF0dXJlIG9yIHRoZSBpc3N1ZSBvbiBodHRwczovL2J1Z3MucHl0aG9uLm9yZyBpbiB3aGljaCBhIGNoYW5nZSB3YXMKIGRpc2N1c3NlZC4gIFdoZW5ldmVyIHBvc3NpYmxlLCAiV2hhdCdzIE5ldyBpbiBQeXRob24iIGxpbmtzIHRvIHRoZQogYnVnL3BhdGNoIGl0ZW0gZm9yIGVhY2ggY2hhbmdlLgogCkBAIC04MSw0NSArNzksOTEgQEAKIFRoZSBGdXR1cmUgZm9yIFB5dGhvbiAyLngKID09PT09PT09PT09PT09PT09PT09PT09PT0KIAotUHl0aG9uIDIuNyBpcyBpbnRlbmRlZCB0byBiZSB0aGUgbGFzdCBtYWpvciByZWxlYXNlIGluIHRoZSAyLnggc2VyaWVzLgotVGhlIFB5dGhvbiBtYWludGFpbmVycyBhcmUgcGxhbm5pbmcgdG8gZm9jdXMgdGhlaXIgZnV0dXJlIGVmZm9ydHMgb24KLXRoZSBQeXRob24gMy54IHNlcmllcy4KK1B5dGhvbiAyLjcgaXMgdGhlIGxhc3QgbWFqb3IgcmVsZWFzZSBpbiB0aGUgMi54IHNlcmllcywgYXMgdGhlIFB5dGhvbgorbWFpbnRhaW5lcnMgaGF2ZSBzaGlmdGVkIHRoZSBmb2N1cyBvZiB0aGVpciBuZXcgZmVhdHVyZSBkZXZlbG9wbWVudCBlZmZvcnRzCit0byB0aGUgUHl0aG9uIDMueCBzZXJpZXMuIFRoaXMgbWVhbnMgdGhhdCB3aGlsZSBQeXRob24gMiBjb250aW51ZXMgdG8KK3JlY2VpdmUgYnVnIGZpeGVzLCBhbmQgdG8gYmUgdXBkYXRlZCB0byBidWlsZCBjb3JyZWN0bHkgb24gbmV3IGhhcmR3YXJlIGFuZAordmVyc2lvbnMgb2Ygc3VwcG9ydGVkIG9wZXJhdGVkIHN5c3RlbXMsIHRoZXJlIHdpbGwgYmUgbm8gbmV3IGZ1bGwgZmVhdHVyZQorcmVsZWFzZXMgZm9yIHRoZSBsYW5ndWFnZSBvciBzdGFuZGFyZCBsaWJyYXJ5LgogCi1UaGlzIG1lYW5zIHRoYXQgMi43IHdpbGwgcmVtYWluIGluIHBsYWNlIGZvciBhIGxvbmcgdGltZSwgcnVubmluZwotcHJvZHVjdGlvbiBzeXN0ZW1zIHRoYXQgaGF2ZSBub3QgYmVlbiBwb3J0ZWQgdG8gUHl0aG9uIDMueC4KLVR3byBjb25zZXF1ZW5jZXMgb2YgdGhlIGxvbmctdGVybSBzaWduaWZpY2FuY2Ugb2YgMi43IGFyZToKK0hvd2V2ZXIsIHdoaWxlIHRoZXJlIGlzIGEgbGFyZ2UgY29tbW9uIHN1YnNldCBiZXR3ZWVuIFB5dGhvbiAyLjcgYW5kIFB5dGhvbgorMywgYW5kIG1hbnkgb2YgdGhlIGNoYW5nZXMgaW52b2x2ZWQgaW4gbWlncmF0aW5nIHRvIHRoYXQgY29tbW9uIHN1YnNldCwgb3IKK2RpcmVjdGx5IHRvIFB5dGhvbiAzLCBjYW4gYmUgc2FmZWx5IGF1dG9tYXRlZCwgc29tZSBvdGhlciBjaGFuZ2VzIChub3RhYmx5Cit0aG9zZSBhc3NvY2lhdGVkIHdpdGggVW5pY29kZSBoYW5kbGluZykgbWF5IHJlcXVpcmUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLAorYW5kIHByZWZlcmFibHkgcm9idXN0IGF1dG9tYXRlZCByZWdyZXNzaW9uIHRlc3Qgc3VpdGVzLCB0byBtaWdyYXRlCitlZmZlY3RpdmVseS4KIAotKiBJdCdzIHZlcnkgbGlrZWx5IHRoZSAyLjcgcmVsZWFzZSB3aWxsIGhhdmUgYSBsb25nZXIgcGVyaW9kIG9mCi0gIG1haW50ZW5hbmNlIGNvbXBhcmVkIHRvIGVhcmxpZXIgMi54IHZlcnNpb25zLiAgUHl0aG9uIDIuNyB3aWxsCi0gIGNvbnRpbnVlIHRvIGJlIG1haW50YWluZWQgd2hpbGUgdGhlIHRyYW5zaXRpb24gdG8gMy54IGNvbnRpbnVlcywgYW5kCi0gIHRoZSBkZXZlbG9wZXJzIGFyZSBwbGFubmluZyB0byBzdXBwb3J0IFB5dGhvbiAyLjcgd2l0aCBidWctZml4Ci0gIHJlbGVhc2VzIGJleW9uZCB0aGUgdHlwaWNhbCB0d28geWVhcnMuCitUaGlzIG1lYW5zIHRoYXQgUHl0aG9uIDIuNyB3aWxsIHJlbWFpbiBpbiBwbGFjZSBmb3IgYSBsb25nIHRpbWUsIHByb3ZpZGluZyBhCitzdGFibGUgYW5kIHN1cHBvcnRlZCBiYXNlIHBsYXRmb3JtIGZvciBwcm9kdWN0aW9uIHN5c3RlbXMgdGhhdCBoYXZlIG5vdCB5ZXQKK2JlZW4gcG9ydGVkIHRvIFB5dGhvbiAzLiBUaGUgZnVsbCBleHBlY3RlZCBsaWZlY3ljbGUgb2YgdGhlIFB5dGhvbiAyLjcKK3NlcmllcyBpcyBkZXRhaWxlZCBpbiA6cGVwOmAzNzNgLgogCi0qIEEgcG9saWN5IGRlY2lzaW9uIHdhcyBtYWRlIHRvIHNpbGVuY2Ugd2FybmluZ3Mgb25seSBvZiBpbnRlcmVzdCB0bwotICBkZXZlbG9wZXJzLiAgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBhbmQgaXRzCi0gIGRlc2NlbmRhbnRzIGFyZSBub3cgaWdub3JlZCB1bmxlc3Mgb3RoZXJ3aXNlIHJlcXVlc3RlZCwgcHJldmVudGluZwotICB1c2VycyBmcm9tIHNlZWluZyB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgYW4gYXBwbGljYXRpb24uICBUaGlzIGNoYW5nZQotICB3YXMgYWxzbyBtYWRlIGluIHRoZSBicmFuY2ggdGhhdCB3aWxsIGJlY29tZSBQeXRob24gMy4yLiAoRGlzY3Vzc2VkCi0gIG9uIHN0ZGxpYi1zaWcgYW5kIGNhcnJpZWQgb3V0IGluIDppc3N1ZTpgNzMxOWAuKQorU29tZSBrZXkgY29uc2VxdWVuY2VzIG9mIHRoZSBsb25nLXRlcm0gc2lnbmlmaWNhbmNlIG9mIDIuNyBhcmU6CiAKLSAgSW4gcHJldmlvdXMgcmVsZWFzZXMsIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgd2VyZQotICBlbmFibGVkIGJ5IGRlZmF1bHQsIHByb3ZpZGluZyBQeXRob24gZGV2ZWxvcGVycyB3aXRoIGEgY2xlYXIKLSAgaW5kaWNhdGlvbiBvZiB3aGVyZSB0aGVpciBjb2RlIG1heSBicmVhayBpbiBhIGZ1dHVyZSBtYWpvciB2ZXJzaW9uCi0gIG9mIFB5dGhvbi4KKyogQXMgbm90ZWQgYWJvdmUsIHRoZSAyLjcgcmVsZWFzZSBoYXMgYSBtdWNoIGxvbmdlciBwZXJpb2Qgb2YgbWFpbnRlbmFuY2UKKyAgd2hlbiBjb21wYXJlZCB0byBlYXJsaWVyIDIueCB2ZXJzaW9ucy4gUHl0aG9uIDIuNyBpcyBjdXJyZW50bHkgZXhwZWN0ZWQgdG8KKyAgcmVtYWluIHN1cHBvcnRlZCBieSB0aGUgY29yZSBkZXZlbG9wbWVudCB0ZWFtIChyZWNlaXZpbmcgc2VjdXJpdHkgdXBkYXRlcworICBhbmQgb3RoZXIgYnVnIGZpeGVzKSB1bnRpbCBhdCBsZWFzdCAyMDIwICgxMCB5ZWFycyBhZnRlciBpdHMgaW5pdGlhbAorICByZWxlYXNlLCBjb21wYXJlZCB0byB0aGUgbW9yZSB0eXBpY2FsIHN1cHBvcnQgcGVyaW9kIG9mIDE4LTI0IG1vbnRocykuCiAKLSAgSG93ZXZlciwgdGhlcmUgYXJlIGluY3JlYXNpbmdseSBtYW55IHVzZXJzIG9mIFB5dGhvbi1iYXNlZAotICBhcHBsaWNhdGlvbnMgd2hvIGFyZSBub3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRldmVsb3BtZW50IG9mCi0gIHRob3NlIGFwcGxpY2F0aW9ucy4gIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgYXJlCi0gIGlycmVsZXZhbnQgdG8gc3VjaCB1c2VycywgbWFraW5nIHRoZW0gd29ycnkgYWJvdXQgYW4gYXBwbGljYXRpb24KLSAgdGhhdCdzIGFjdHVhbGx5IHdvcmtpbmcgY29ycmVjdGx5IGFuZCBidXJkZW5pbmcgYXBwbGljYXRpb24gZGV2ZWxvcGVycwotICB3aXRoIHJlc3BvbmRpbmcgdG8gdGhlc2UgY29uY2VybnMuCisqIEFzIHRoZSBQeXRob24gMi43IHN0YW5kYXJkIGxpYnJhcnkgYWdlcywgbWFraW5nIGVmZmVjdGl2ZSB1c2Ugb2YgdGhlCisgIFB5dGhvbiBQYWNrYWdlIEluZGV4IChlaXRoZXIgZGlyZWN0bHkgb3IgdmlhIGEgcmVkaXN0cmlidXRvcikgYmVjb21lcworICBtb3JlIGltcG9ydGFudCBmb3IgUHl0aG9uIDIgdXNlcnMuIEluIGFkZGl0aW9uIHRvIGEgd2lkZSB2YXJpZXR5IG9mIHRoaXJkCisgIHBhcnR5IHBhY2thZ2VzIGZvciB2YXJpb3VzIHRhc2tzLCB0aGUgYXZhaWxhYmxlIHBhY2thZ2VzIGluY2x1ZGUgYmFja3BvcnRzCisgIG9mIG5ldyBtb2R1bGVzIGFuZCBmZWF0dXJlcyBmcm9tIHRoZSBQeXRob24gMyBzdGFuZGFyZCBsaWJyYXJ5IHRoYXQgYXJlCisgIGNvbXBhdGlibGUgd2l0aCBQeXRob24gMiwgYXMgd2VsbCBhcyB2YXJpb3VzIHRvb2xzIGFuZCBsaWJyYXJpZXMgdGhhdCBjYW4KKyAgbWFrZSBpdCBlYXNpZXIgdG8gbWlncmF0ZSB0byBQeXRob24gMy4gVGhlIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUKKyAgPGh0dHBzOi8vcGFja2FnaW5nLnB5dGhvbi5vcmc+YF9fIHByb3ZpZGVzIGd1aWRhbmNlIG9uIGRvd25sb2FkaW5nIGFuZAorICBpbnN0YWxsaW5nIHNvZnR3YXJlIGZyb20gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LgogCi0gIFlvdSBjYW4gcmUtZW5hYmxlIGRpc3BsYXkgb2YgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBtZXNzYWdlcyBieQotICBydW5uaW5nIFB5dGhvbiB3aXRoIHRoZSA6b3B0aW9uOmAtV2RlZmF1bHRgIChzaG9ydCBmb3JtOgotICA6b3B0aW9uOmAtV2RgKSBzd2l0Y2gsIG9yIGJ5IHNldHRpbmcgdGhlIDplbnZ2YXI6YFBZVEhPTldBUk5JTkdTYAotICBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBgYCJkZWZhdWx0ImBgIChvciBgYCJkImBgKSBiZWZvcmUgcnVubmluZwotICBQeXRob24uICBQeXRob24gY29kZSBjYW4gYWxzbyByZS1lbmFibGUgdGhlbQotICBieSBjYWxsaW5nIGBgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdkZWZhdWx0JylgYC4KKyogV2hpbGUgdGhlIHByZWZlcnJlZCBhcHByb2FjaCB0byBlbmhhbmNpbmcgUHl0aG9uIDIgaXMgbm93IHRoZSBwdWJsaWNhdGlvbgorICBvZiBuZXcgcGFja2FnZXMgb24gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LCB0aGlzIGFwcHJvYWNoIGRvZXNuJ3QKKyAgbmVjZXNzYXJpbHkgd29yayBpbiBhbGwgY2FzZXMsIGVzcGVjaWFsbHkgdGhvc2UgcmVsYXRlZCB0byBuZXR3b3JrCisgIHNlY3VyaXR5LiBJbiBleGNlcHRpb25hbCBjYXNlcyB0aGF0IGNhbm5vdCBiZSBoYW5kbGVkIGFkZXF1YXRlbHkgYnkKKyAgcHVibGlzaGluZyBuZXcgb3IgdXBkYXRlZCBwYWNrYWdlcyBvbiBQeVBJLCB0aGUgUHl0aG9uIEVuaGFuY2VtZW50CisgIFByb3Bvc2FsIHByb2Nlc3MgbWF5IGJlIHVzZWQgdG8gbWFrZSB0aGUgY2FzZSBmb3IgYWRkaW5nIG5ldyBmZWF0dXJlcworICBkaXJlY3RseSB0byB0aGUgUHl0aG9uIDIgc3RhbmRhcmQgbGlicmFyeS4gQW55IHN1Y2ggYWRkaXRpb25zLCBhbmQgdGhlCisgIG1haW50ZW5hbmNlIHJlbGVhc2VzIHdoZXJlIHRoZXkgd2VyZSBhZGRlZCwgd2lsbCBiZSBub3RlZCBpbiB0aGUKKyAgOnJlZjpgcHkyNy1tYWludGVuYW5jZS1lbmhhbmNlbWVudHNgIHNlY3Rpb24gYmVsb3cuCisKK0ZvciBwcm9qZWN0cyB3aXNoaW5nIHRvIG1pZ3JhdGUgZnJvbSBQeXRob24gMiB0byBQeXRob24gMywgb3IgZm9yIGxpYnJhcnkKK2FuZCBmcmFtZXdvcmsgZGV2ZWxvcGVycyB3aXNoaW5nIHRvIHN1cHBvcnQgdXNlcnMgb24gYm90aCBQeXRob24gMiBhbmQKK1B5dGhvbiAzLCB0aGVyZSBhcmUgYSB2YXJpZXR5IG9mIHRvb2xzIGFuZCBndWlkZXMgYXZhaWxhYmxlIHRvIGhlbHAgZGVjaWRlCitvbiBhIHN1aXRhYmxlIGFwcHJvYWNoIGFuZCBtYW5hZ2Ugc29tZSBvZiB0aGUgdGVjaG5pY2FsIGRldGFpbHMgaW52b2x2ZWQuCitUaGUgcmVjb21tZW5kZWQgc3RhcnRpbmcgcG9pbnQgaXMgdGhlIDpyZWY6YHB5cG9ydGluZy1ob3d0b2AgSE9XVE8gZ3VpZGUuCisKKworQ2hhbmdlcyB0byB0aGUgSGFuZGxpbmcgb2YgRGVwcmVjYXRpb24gV2FybmluZ3MKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBQeXRob24gMi43LCBhIHBvbGljeSBkZWNpc2lvbiB3YXMgbWFkZSB0byBzaWxlbmNlIHdhcm5pbmdzIG9ubHkgb2YKK2ludGVyZXN0IHRvIGRldmVsb3BlcnMgYnkgZGVmYXVsdC4gIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgYW5kIGl0cworZGVzY2VuZGFudHMgYXJlIG5vdyBpZ25vcmVkIHVubGVzcyBvdGhlcndpc2UgcmVxdWVzdGVkLCBwcmV2ZW50aW5nCit1c2VycyBmcm9tIHNlZWluZyB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgYW4gYXBwbGljYXRpb24uICBUaGlzIGNoYW5nZQord2FzIGFsc28gbWFkZSBpbiB0aGUgYnJhbmNoIHRoYXQgYmVjYW1lIFB5dGhvbiAzLjIuIChEaXNjdXNzZWQKK29uIHN0ZGxpYi1zaWcgYW5kIGNhcnJpZWQgb3V0IGluIDppc3N1ZTpgNzMxOWAuKQorCitJbiBwcmV2aW91cyByZWxlYXNlcywgOmV4YzpgRGVwcmVjYXRpb25XYXJuaW5nYCBtZXNzYWdlcyB3ZXJlCitlbmFibGVkIGJ5IGRlZmF1bHQsIHByb3ZpZGluZyBQeXRob24gZGV2ZWxvcGVycyB3aXRoIGEgY2xlYXIKK2luZGljYXRpb24gb2Ygd2hlcmUgdGhlaXIgY29kZSBtYXkgYnJlYWsgaW4gYSBmdXR1cmUgbWFqb3IgdmVyc2lvbgorb2YgUHl0aG9uLgorCitIb3dldmVyLCB0aGVyZSBhcmUgaW5jcmVhc2luZ2x5IG1hbnkgdXNlcnMgb2YgUHl0aG9uLWJhc2VkCithcHBsaWNhdGlvbnMgd2hvIGFyZSBub3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRldmVsb3BtZW50IG9mCit0aG9zZSBhcHBsaWNhdGlvbnMuICA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIG1lc3NhZ2VzIGFyZQoraXJyZWxldmFudCB0byBzdWNoIHVzZXJzLCBtYWtpbmcgdGhlbSB3b3JyeSBhYm91dCBhbiBhcHBsaWNhdGlvbgordGhhdCdzIGFjdHVhbGx5IHdvcmtpbmcgY29ycmVjdGx5IGFuZCBidXJkZW5pbmcgYXBwbGljYXRpb24gZGV2ZWxvcGVycword2l0aCByZXNwb25kaW5nIHRvIHRoZXNlIGNvbmNlcm5zLgorCitZb3UgY2FuIHJlLWVuYWJsZSBkaXNwbGF5IG9mIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AgbWVzc2FnZXMgYnkKK3J1bm5pbmcgUHl0aG9uIHdpdGggdGhlIDpvcHRpb246YC1XZGVmYXVsdCA8LVc+YCAoc2hvcnQgZm9ybToKKzpvcHRpb246YC1XZCA8LVc+YCkgc3dpdGNoLCBvciBieSBzZXR0aW5nIHRoZSA6ZW52dmFyOmBQWVRIT05XQVJOSU5HU2AKK2Vudmlyb25tZW50IHZhcmlhYmxlIHRvIGBgImRlZmF1bHQiYGAgKG9yIGBgImQiYGApIGJlZm9yZSBydW5uaW5nCitQeXRob24uICBQeXRob24gY29kZSBjYW4gYWxzbyByZS1lbmFibGUgdGhlbQorYnkgY2FsbGluZyBgYHdhcm5pbmdzLnNpbXBsZWZpbHRlcignZGVmYXVsdCcpYGAuCisKK1RoZSBgYHVuaXR0ZXN0YGAgbW9kdWxlIGFsc28gYXV0b21hdGljYWxseSByZWVuYWJsZXMgZGVwcmVjYXRpb24gd2FybmluZ3MKK3doZW4gcnVubmluZyB0ZXN0cy4KIAogCiBQeXRob24gMy4xIEZlYXR1cmVzCkBAIC0xMzMsNyArMTc3LDcgQEAKIEEgcGFydGlhbCBsaXN0IG9mIDMuMSBmZWF0dXJlcyB0aGF0IHdlcmUgYmFja3BvcnRlZCB0byAyLjc6CiAKICogVGhlIHN5bnRheCBmb3Igc2V0IGxpdGVyYWxzIChgYHsxLDIsM31gYCBpcyBhIG11dGFibGUgc2V0KS4KLSogRGljdGlvbmFyeSBhbmQgc2V0IGNvbXByZWhlbnNpb25zIChgYHsgaTogaSoyIGZvciBpIGluIHJhbmdlKDMpfWBgKS4KKyogRGljdGlvbmFyeSBhbmQgc2V0IGNvbXByZWhlbnNpb25zIChgYHtpOiBpKjIgZm9yIGkgaW4gcmFuZ2UoMyl9YGApLgogKiBNdWx0aXBsZSBjb250ZXh0IG1hbmFnZXJzIGluIGEgc2luZ2xlIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnQuCiAqIEEgbmV3IHZlcnNpb24gb2YgdGhlIDptb2Q6YGlvYCBsaWJyYXJ5LCByZXdyaXR0ZW4gaW4gQyBmb3IgcGVyZm9ybWFuY2UuCiAqIFRoZSBvcmRlcmVkLWRpY3Rpb25hcnkgdHlwZSBkZXNjcmliZWQgaW4gOnJlZjpgcGVwLTAzNzJgLgpAQCAtMTU1LDcgKzE5OSw3IEBACiAqIDpmdW5jOmBvcGVyYXRvci5pc0NhbGxhYmxlYCBhbmQgOmZ1bmM6YG9wZXJhdG9yLnNlcXVlbmNlSW5jbHVkZXNgLAogICB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBpbiAzLngsIG5vdyB0cmlnZ2VyIHdhcm5pbmdzLgogKiBUaGUgOm9wdGlvbjpgLTNgIHN3aXRjaCBub3cgYXV0b21hdGljYWxseQotICBlbmFibGVzIHRoZSA6b3B0aW9uOmAtUXdhcm5gIHN3aXRjaCB0aGF0IGNhdXNlcyB3YXJuaW5ncworICBlbmFibGVzIHRoZSA6b3B0aW9uOmAtUXdhcm4gPC1RPmAgc3dpdGNoIHRoYXQgY2F1c2VzIHdhcm5pbmdzCiAgIGFib3V0IHVzaW5nIGNsYXNzaWMgZGl2aXNpb24gd2l0aCBpbnRlZ2VycyBhbmQgbG9uZyBpbnRlZ2Vycy4KIAogCkBAIC0zOTAsOSArNDM0LDEwIEBACiAKIC4uIHNlZWFsc286OgogCi0gICBgYXJncGFyc2UgbW9kdWxlIGRvY3VtZW50YXRpb24gPGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2L2xpYnJhcnkvYXJncGFyc2UuaHRtbD5gX18KKyAgIDptb2Q6YGFyZ3BhcnNlYCBkb2N1bWVudGF0aW9uCisgICAgIFRoZSBkb2N1bWVudGF0aW9uIHBhZ2Ugb2YgdGhlIGFyZ3BhcnNlIG1vZHVsZS4KIAotICAgYFVwZ3JhZGluZyBvcHRwYXJzZSBjb2RlIHRvIHVzZSBhcmdwYXJzZSA8aHR0cDovL2RvY3MucHl0aG9uLm9yZy9kZXYvbGlicmFyeS9hcmdwYXJzZS5odG1sI3VwZ3JhZGluZy1vcHRwYXJzZS1jb2RlPmBfXworICAgOnJlZjpgdXBncmFkaW5nLW9wdHBhcnNlLWNvZGVgCiAgICAgIFBhcnQgb2YgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBkZXNjcmliaW5nIGhvdyB0byBjb252ZXJ0CiAgICAgIGNvZGUgdGhhdCB1c2VzIDptb2Q6YG9wdHBhcnNlYC4KIApAQCAtNDAyLDggKzQ0Nyw2IEBACiBQRVAgMzkxOiBEaWN0aW9uYXJ5LUJhc2VkIENvbmZpZ3VyYXRpb24gRm9yIExvZ2dpbmcKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotLi4gWFhYIG5vdCBkb2N1bWVudGVkIGluIGxpYnJhcnkgcmVmZXJlbmNlIHlldDsgYWRkIGxpbmsgaGVyZSBvbmNlIGl0J3MgYWRkZWQuCi0KIFRoZSA6bW9kOmBsb2dnaW5nYCBtb2R1bGUgaXMgdmVyeSBmbGV4aWJsZTsgYXBwbGljYXRpb25zIGNhbiBkZWZpbmUKIGEgdHJlZSBvZiBsb2dnaW5nIHN1YnN5c3RlbXMsIGFuZCBlYWNoIGxvZ2dlciBpbiB0aGlzIHRyZWUgY2FuIGZpbHRlcgogb3V0IGNlcnRhaW4gbWVzc2FnZXMsIGZvcm1hdCB0aGVtIGRpZmZlcmVudGx5LCBhbmQgZGlyZWN0IG1lc3NhZ2VzIHRvCkBAIC00MTIsMjEgKzQ1NSwyMSBAQAogQWxsIHRoaXMgZmxleGliaWxpdHkgY2FuIHJlcXVpcmUgYSBsb3Qgb2YgY29uZmlndXJhdGlvbi4gIFlvdSBjYW4KIHdyaXRlIFB5dGhvbiBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBvYmplY3RzIGFuZCBzZXQgdGhlaXIgcHJvcGVydGllcywKIGJ1dCBhIGNvbXBsZXggc2V0LXVwIHJlcXVpcmVzIHZlcmJvc2UgYnV0IGJvcmluZyBjb2RlLgotOm1vZDpgbG9nZ2luZ2AgYWxzbyBzdXBwb3J0cyBhIDpmdW5jOmB+bG9nZ2luZy5jb25maWcuZmlsZUNvbmZpZ2AKKzptb2Q6YGxvZ2dpbmdgIGFsc28gc3VwcG9ydHMgYSA6ZnVuYzpgfmxvZ2dpbmcuZmlsZUNvbmZpZ2AKIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgZmlsZSwgYnV0IHRoZSBmaWxlIGZvcm1hdCBkb2Vzbid0IHN1cHBvcnQKIGNvbmZpZ3VyaW5nIGZpbHRlcnMsIGFuZCBpdCdzIG1lc3NpZXIgdG8gZ2VuZXJhdGUgcHJvZ3JhbW1hdGljYWxseS4KIAotUHl0aG9uIDIuNyBhZGRzIGEgOmZ1bmM6YH5sb2dnaW5nLmNvbmZpZy5kaWN0Q29uZmlnYCBmdW5jdGlvbiB0aGF0CitQeXRob24gMi43IGFkZHMgYSA6ZnVuYzpgfmxvZ2dpbmcuZGljdENvbmZpZ2AgZnVuY3Rpb24gdGhhdAogdXNlcyBhIGRpY3Rpb25hcnkgdG8gY29uZmlndXJlIGxvZ2dpbmcuICBUaGVyZSBhcmUgbWFueSB3YXlzIHRvCiBwcm9kdWNlIGEgZGljdGlvbmFyeSBmcm9tIGRpZmZlcmVudCBzb3VyY2VzOiBjb25zdHJ1Y3Qgb25lIHdpdGggY29kZTsKIHBhcnNlIGEgZmlsZSBjb250YWluaW5nIEpTT047IG9yIHVzZSBhIFlBTUwgcGFyc2luZyBsaWJyYXJ5IGlmIG9uZSBpcwotaW5zdGFsbGVkLgoraW5zdGFsbGVkLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIDpyZWY6YGxvZ2dpbmctY29uZmlnLWFwaWAuCiAKIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBjb25maWd1cmVzIHR3byBsb2dnZXJzLCB0aGUgcm9vdCBsb2dnZXIgYW5kIGEKLWxvZ2dlciBuYW1lZCAibmV0d29yayIuICAgTWVzc2FnZXMgc2VudCB0byB0aGUgcm9vdCBsb2dnZXIgd2lsbCBiZQorbG9nZ2VyIG5hbWVkICJuZXR3b3JrIi4gIE1lc3NhZ2VzIHNlbnQgdG8gdGhlIHJvb3QgbG9nZ2VyIHdpbGwgYmUKIHNlbnQgdG8gdGhlIHN5c3RlbSBsb2cgdXNpbmcgdGhlIHN5c2xvZyBwcm90b2NvbCwgYW5kIG1lc3NhZ2VzCiB0byB0aGUgIm5ldHdvcmsiIGxvZ2dlciB3aWxsIGJlIHdyaXR0ZW4gdG8gYSA6ZmlsZTpgbmV0d29yay5sb2dgIGZpbGUKLXRoYXQgd2lsbCBiZSByb3RhdGVkIG9uY2UgdGhlIGxvZyByZWFjaGVzIDFNYi4KK3RoYXQgd2lsbCBiZSByb3RhdGVkIG9uY2UgdGhlIGxvZyByZWFjaGVzIDFNQi4KIAogOjoKIApAQCAtNDQ1LDcgKzQ4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJy9sb2dzL25ldHdvcmsubG9nJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJzogJ3N0YW5kYXJkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAnbGV2ZWwnOiAnSU5GTycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ21heEJ5dGVzJzogMTAyNCoxMDI0fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbWF4Qnl0ZXMnOiAxMDAwMDAwfSwKICAgICAgICAgICAgICAgICAgICdzeXNsb2cnOiB7J2NsYXNzJzogJ2xvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3JtYXR0ZXInOiAnc3RhbmRhcmQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGV2ZWwnOiAnRVJST1InfX0sCkBAIC00ODMsMTYgKzUyNiwxOSBAQAogICBmb3IgVURQIG9yIDpjb25zdDpgc29ja2V0LlNPQ0tfU1RSRUFNYCBmb3IgVENQLiAgVGhlIGRlZmF1bHQKICAgcHJvdG9jb2wgcmVtYWlucyBVRFAuCiAKLSogOmNsYXNzOmBMb2dnZXJgIGluc3RhbmNlcyBnYWluZWQgYSA6bWV0aDpgZ2V0Q2hpbGRgIG1ldGhvZCB0aGF0IHJldHJpZXZlcyBhCi0gIGRlc2NlbmRhbnQgbG9nZ2VyIHVzaW5nIGEgcmVsYXRpdmUgcGF0aC4gIEZvciBleGFtcGxlLAotICBvbmNlIHlvdSByZXRyaWV2ZSBhIGxvZ2dlciBieSBkb2luZyBgYGxvZyA9IGdldExvZ2dlcignYXBwJylgYCwKKyogOmNsYXNzOmB+bG9nZ2luZy5Mb2dnZXJgIGluc3RhbmNlcyBnYWluZWQgYSA6bWV0aDpgfmxvZ2dpbmcuTG9nZ2VyLmdldENoaWxkYAorICBtZXRob2QgdGhhdCByZXRyaWV2ZXMgYSBkZXNjZW5kYW50IGxvZ2dlciB1c2luZyBhIHJlbGF0aXZlIHBhdGguCisgIEZvciBleGFtcGxlLCBvbmNlIHlvdSByZXRyaWV2ZSBhIGxvZ2dlciBieSBkb2luZyBgYGxvZyA9IGdldExvZ2dlcignYXBwJylgYCwKICAgY2FsbGluZyBgYGxvZy5nZXRDaGlsZCgnbmV0d29yay5saXN0ZW4nKWBgIGlzIGVxdWl2YWxlbnQgdG8KICAgYGBnZXRMb2dnZXIoJ2FwcC5uZXR3b3JrLmxpc3RlbicpYGAuCiAKLSogVGhlIDpjbGFzczpgTG9nZ2VyQWRhcHRlcmAgY2xhc3MgZ2FpbmVkIGEgOm1ldGg6YGlzRW5hYmxlZEZvcmAgbWV0aG9kCi0gIHRoYXQgdGFrZXMgYSAqbGV2ZWwqIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgbG9nZ2VyIHdvdWxkCisqIFRoZSA6Y2xhc3M6YH5sb2dnaW5nLkxvZ2dlckFkYXB0ZXJgIGNsYXNzIGdhaW5lZCBhCisgIDptZXRoOmB+bG9nZ2luZy5Mb2dnZXJBZGFwdGVyLmlzRW5hYmxlZEZvcmAgbWV0aG9kIHRoYXQgdGFrZXMgYQorICAqbGV2ZWwqIGFuZCByZXR1cm5zIHdoZXRoZXIgdGhlIHVuZGVybHlpbmcgbG9nZ2VyIHdvdWxkCiAgIHByb2Nlc3MgYSBtZXNzYWdlIG9mIHRoYXQgbGV2ZWwgb2YgaW1wb3J0YW5jZS4KIAorLi4gWFhYOiBMb2dnZXIgb2JqZWN0cyBkb24ndCBoYXZlIGEgY2xhc3MgZGVjbGFyYXRpb24gc28gdGhlIGxpbmsgZG9uJ3Qgd29yaworCiAuLiBzZWVhbHNvOjoKIAogICAgOnBlcDpgMzkxYCAtIERpY3Rpb25hcnktQmFzZWQgQ29uZmlndXJhdGlvbiBGb3IgTG9nZ2luZwpAQCAtNTAxLDE0ICs1NDcsMTUgQEAKIFBFUCAzMTA2OiBEaWN0aW9uYXJ5IFZpZXdzCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLVRoZSBkaWN0aW9uYXJ5IG1ldGhvZHMgOm1ldGg6YGtleXNgLCA6bWV0aDpgdmFsdWVzYCwgYW5kIDptZXRoOmBpdGVtc2AKLWFyZSBkaWZmZXJlbnQgaW4gUHl0aG9uIDMueC4gIFRoZXkgcmV0dXJuIGFuIG9iamVjdCBjYWxsZWQgYSA6ZGZuOmB2aWV3YAotaW5zdGVhZCBvZiBhIGZ1bGx5IG1hdGVyaWFsaXplZCBsaXN0LgorVGhlIGRpY3Rpb25hcnkgbWV0aG9kcyA6bWV0aDpgfmRpY3Qua2V5c2AsIDptZXRoOmB+ZGljdC52YWx1ZXNgLCBhbmQKKzptZXRoOmB+ZGljdC5pdGVtc2AgYXJlIGRpZmZlcmVudCBpbiBQeXRob24gMy54LiAgVGhleSByZXR1cm4gYW4gb2JqZWN0CitjYWxsZWQgYSA6ZGZuOmB2aWV3YCBpbnN0ZWFkIG9mIGEgZnVsbHkgbWF0ZXJpYWxpemVkIGxpc3QuCiAKLUl0J3Mgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgcmV0dXJuIHZhbHVlcyBvZiA6bWV0aDpga2V5c2AsCi06bWV0aDpgdmFsdWVzYCwgYW5kIDptZXRoOmBpdGVtc2AgaW4gUHl0aG9uIDIuNyBiZWNhdXNlIHRvbyBtdWNoIGNvZGUKLXdvdWxkIGJyZWFrLiAgSW5zdGVhZCB0aGUgMy54IHZlcnNpb25zIHdlcmUgYWRkZWQgdW5kZXIgdGhlIG5ldyBuYW1lcwotOm1ldGg6YHZpZXdrZXlzYCwgOm1ldGg6YHZpZXd2YWx1ZXNgLCBhbmQgOm1ldGg6YHZpZXdpdGVtc2AuCitJdCdzIG5vdCBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIHJldHVybiB2YWx1ZXMgb2YgOm1ldGg6YH5kaWN0LmtleXNgLAorOm1ldGg6YH5kaWN0LnZhbHVlc2AsIGFuZCA6bWV0aDpgfmRpY3QuaXRlbXNgIGluIFB5dGhvbiAyLjcgYmVjYXVzZQordG9vIG11Y2ggY29kZSB3b3VsZCBicmVhay4gIEluc3RlYWQgdGhlIDMueCB2ZXJzaW9ucyB3ZXJlIGFkZGVkCit1bmRlciB0aGUgbmV3IG5hbWVzIDptZXRoOmB+ZGljdC52aWV3a2V5c2AsIDptZXRoOmB+ZGljdC52aWV3dmFsdWVzYCwKK2FuZCA6bWV0aDpgfmRpY3Qudmlld2l0ZW1zYC4KIAogOjoKIApAQCAtNTUwLDggKzU5Nyw4IEBACiAgICAgUnVudGltZUVycm9yOiBkaWN0aW9uYXJ5IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uCiAKIFlvdSBjYW4gdXNlIHRoZSB2aWV3IG1ldGhvZHMgaW4gUHl0aG9uIDIueCBjb2RlLCBhbmQgdGhlIDJ0bzMKLWNvbnZlcnRlciB3aWxsIGNoYW5nZSB0aGVtIHRvIHRoZSBzdGFuZGFyZCA6bWV0aDpga2V5c2AsCi06bWV0aDpgdmFsdWVzYCwgYW5kIDptZXRoOmBpdGVtc2AgbWV0aG9kcy4KK2NvbnZlcnRlciB3aWxsIGNoYW5nZSB0aGVtIHRvIHRoZSBzdGFuZGFyZCA6bWV0aDpgfmRpY3Qua2V5c2AsCis6bWV0aDpgfmRpY3QudmFsdWVzYCwgYW5kIDptZXRoOmB+ZGljdC5pdGVtc2AgbWV0aG9kcy4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTYyNCw3ICs2NzEsNyBAQAogICBgYHt9YGAgY29udGludWVzIHRvIHJlcHJlc2VudCBhbiBlbXB0eSBkaWN0aW9uYXJ5OyB1c2UKICAgYGBzZXQoKWBgIGZvciBhbiBlbXB0eSBzZXQuCiAKLSAgICA+Pj4gezEsMiwzLDQsNX0KKyAgICA+Pj4gezEsIDIsIDMsIDQsIDV9CiAgICAgc2V0KFsxLCAyLCAzLCA0LCA1XSkKICAgICA+Pj4gc2V0KCkgIyBlbXB0eSBzZXQKICAgICBzZXQoW10pCkBAIC02NjEsNyArNzA4LDcgQEAKICAgVGhlIDpmdW5jOmBjb250ZXh0bGliLm5lc3RlZGAgZnVuY3Rpb24gcHJvdmlkZXMgYSB2ZXJ5IHNpbWlsYXIKICAgZnVuY3Rpb24sIHNvIGl0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBhbmQgaGFzIGJlZW4gZGVwcmVjYXRlZC4KIAotICAoUHJvcG9zZWQgaW4gaHR0cDovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNTMwOTQ7IGltcGxlbWVudGVkIGJ5CisgIChQcm9wb3NlZCBpbiBodHRwczovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNTMwOTQ7IGltcGxlbWVudGVkIGJ5CiAgIEdlb3JnIEJyYW5kbC4pCiAKICogQ29udmVyc2lvbnMgYmV0d2VlbiBmbG9hdGluZy1wb2ludCBudW1iZXJzIGFuZCBzdHJpbmdzIGFyZQpAQCAtNzk0LDcgKzg0MSw3IEBACiAgIGBgTm9uZWBgIGFzIGl0cyBmaXJzdCBhcmd1bWVudC4gIChGaXhlZCBieSBHZW9yZyBCcmFuZGw7CiAgIDppc3N1ZTpgNDc1OWAuKQogCi0gIC4uIGJ5dGVhcnJheSBkb2Vzbid0IHNlZW0gdG8gYmUgZG9jdW1lbnRlZAorICAuLiBYWFggYnl0ZWFycmF5IGRvZXNuJ3Qgc2VlbSB0byBiZSBkb2N1bWVudGVkCiAKICogV2hlbiB1c2luZyBgYEBjbGFzc21ldGhvZGBgIGFuZCBgYEBzdGF0aWNtZXRob2RgYCB0byB3cmFwCiAgIG1ldGhvZHMgYXMgY2xhc3Mgb3Igc3RhdGljIG1ldGhvZHMsIHRoZSB3cmFwcGVyIG9iamVjdCBub3cKQEAgLTg2NywxMiArOTE0LDYgQEAKIAogU2V2ZXJhbCBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMgaGF2ZSBiZWVuIGFkZGVkOgogCi0uLiAqIEEgbmV3IDpwcm9ncmFtOmBjb25maWd1cmVgIG9wdGlvbiwgOm9wdGlvbjpgLS13aXRoLWNvbXB1dGVkLWdvdG9zYCwKLSAgIGNvbXBpbGVzIHRoZSBtYWluIGJ5dGVjb2RlIGludGVycHJldGVyIGxvb3AgdXNpbmcgYSBuZXcgZGlzcGF0Y2gKLSAgIG1lY2hhbmlzbSB0aGF0IGdpdmVzIHNwZWVkdXBzIG9mIHVwIHRvIDIwJSwgZGVwZW5kaW5nIG9uIHRoZSBzeXN0ZW0KLSAgIGFuZCBiZW5jaG1hcmsuICBUaGUgbmV3IG1lY2hhbmlzbSBpcyBvbmx5IHN1cHBvcnRlZCBvbiBjZXJ0YWluCi0gICBjb21waWxlcnMsIHN1Y2ggYXMgZ2NjLCBTdW5Qcm8sIGFuZCBpY2MuCi0KICogQSBuZXcgb3Bjb2RlIHdhcyBhZGRlZCB0byBwZXJmb3JtIHRoZSBpbml0aWFsIHNldHVwIGZvcgogICA6a2V5d29yZDpgd2l0aGAgc3RhdGVtZW50cywgbG9va2luZyB1cCB0aGUgOm1ldGg6YF9fZW50ZXJfX2AgYW5kCiAgIDptZXRoOmBfX2V4aXRfX2AgbWV0aG9kcy4gIChDb250cmlidXRlZCBieSBCZW5qYW1pbiBQZXRlcnNvbi4pCkBAIC0xMDU0LDcgKzEwOTUsNyBAQAogICA6bWV0aDpgfmNvbGxlY3Rpb25zLmRlcXVlLmNvdW50YCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBudW1iZXIgb2YKICAgY29udGFpbmVkIGVsZW1lbnRzIGVxdWFsIHRvIHRoZSBzdXBwbGllZCBhcmd1bWVudCAqeCosIGFuZCBhCiAgIDptZXRoOmB+Y29sbGVjdGlvbnMuZGVxdWUucmV2ZXJzZWAgbWV0aG9kIHRoYXQgcmV2ZXJzZXMgdGhlIGVsZW1lbnRzCi0gIG9mIHRoZSBkZXF1ZSBpbi1wbGFjZS4gIDpjbGFzczpgZGVxdWVgIGFsc28gZXhwb3NlcyBpdHMgbWF4aW11bQorICBvZiB0aGUgZGVxdWUgaW4tcGxhY2UuICA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5kZXF1ZWAgYWxzbyBleHBvc2VzIGl0cyBtYXhpbXVtCiAgIGxlbmd0aCBhcyB0aGUgcmVhZC1vbmx5IDphdHRyOmB+Y29sbGVjdGlvbnMuZGVxdWUubWF4bGVuYCBhdHRyaWJ1dGUuCiAgIChCb3RoIGZlYXR1cmVzIGFkZGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyLikKIApAQCAtMTA3Nyw3ICsxMTE4LDcgQEAKICAgKEZpeGVkIGJ5IERhbmllbCBTdHV0emJhY2g7IDppc3N1ZTpgODcyOWAuKQogCiAqIENvbnN0cnVjdG9ycyBmb3IgdGhlIHBhcnNpbmcgY2xhc3NlcyBpbiB0aGUgOm1vZDpgQ29uZmlnUGFyc2VyYCBtb2R1bGUgbm93Ci0gIHRha2UgYSAqYWxsb3dfbm9fdmFsdWUqIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBmYWxzZTsgaWYgdHJ1ZSwKKyAgdGFrZSBhbiAqYWxsb3dfbm9fdmFsdWUqIHBhcmFtZXRlciwgZGVmYXVsdGluZyB0byBmYWxzZTsgaWYgdHJ1ZSwKICAgb3B0aW9ucyB3aXRob3V0IHZhbHVlcyB3aWxsIGJlIGFsbG93ZWQuICBGb3IgZXhhbXBsZTo6CiAKICAgICA+Pj4gaW1wb3J0IENvbmZpZ1BhcnNlciwgU3RyaW5nSU8KQEAgLTExMzUsMTUgKzExNzYsMTQgQEAKICAgYGBEZWNpbWFsKCcwLjEwMDAwMDAwMDAwMDAwMDAwNTU1MTExNTEyMzEyNTc4MjcwMjExODE1ODM0MDQ1NDEwMTU2MjUnKWBgLgogICAoSW1wbGVtZW50ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgNDc5NmAuKQogCi0gIENvbXBhcmluZyBpbnN0YW5jZXMgb2YgOmNsYXNzOmBEZWNpbWFsYCB3aXRoIGZsb2F0aW5nLXBvaW50CisgIENvbXBhcmluZyBpbnN0YW5jZXMgb2YgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCB3aXRoIGZsb2F0aW5nLXBvaW50CiAgIG51bWJlcnMgbm93IHByb2R1Y2VzIHNlbnNpYmxlIHJlc3VsdHMgYmFzZWQgb24gdGhlIG51bWVyaWMgdmFsdWVzCiAgIG9mIHRoZSBvcGVyYW5kcy4gIFByZXZpb3VzbHkgc3VjaCBjb21wYXJpc29ucyB3b3VsZCBmYWxsIGJhY2sgdG8KICAgUHl0aG9uJ3MgZGVmYXVsdCBydWxlcyBmb3IgY29tcGFyaW5nIG9iamVjdHMsIHdoaWNoIHByb2R1Y2VkIGFyYml0cmFyeQogICByZXN1bHRzIGJhc2VkIG9uIHRoZWlyIHR5cGUuICBOb3RlIHRoYXQgeW91IHN0aWxsIGNhbm5vdCBjb21iaW5lCiAgIDpjbGFzczpgRGVjaW1hbGAgYW5kIGZsb2F0aW5nLXBvaW50IGluIG90aGVyIG9wZXJhdGlvbnMgc3VjaCBhcyBhZGRpdGlvbiwKICAgc2luY2UgeW91IHNob3VsZCBiZSBleHBsaWNpdGx5IGNob29zaW5nIGhvdyB0byBjb252ZXJ0IGJldHdlZW4gZmxvYXQgYW5kCi0gIDpjbGFzczpgRGVjaW1hbGAuCi0gIChGaXhlZCBieSBNYXJrIERpY2tpbnNvbjsgOmlzc3VlOmAyNTMxYC4pCisgIDpjbGFzczpgfmRlY2ltYWwuRGVjaW1hbGAuICAoRml4ZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgMjUzMWAuKQogCiAgIFRoZSBjb25zdHJ1Y3RvciBmb3IgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBub3cgYWNjZXB0cwogICBmbG9hdGluZy1wb2ludCBudW1iZXJzIChhZGRlZCBieSBSYXltb25kIEhldHRpbmdlcjsgOmlzc3VlOmA4MjU3YCkKQEAgLTExOTUsOCArMTIzNSw4IEBACiAKICAgT3JkZXJpbmcgY29tcGFyaXNvbnMgKGBgPGBgLCBgYDw9YGAsIGBgPmBgLCBgYD49YGApIGJldHdlZW4KICAgZnJhY3Rpb25zIGFuZCBjb21wbGV4IG51bWJlcnMgbm93IHJhaXNlIGEgOmV4YzpgVHlwZUVycm9yYC4KLSAgVGhpcyBmaXhlcyBhbiBvdmVyc2lnaHQsIG1ha2luZyB0aGUgOmNsYXNzOmBGcmFjdGlvbmAgbWF0Y2ggdGhlIG90aGVyCi0gIG51bWVyaWMgdHlwZXMuCisgIFRoaXMgZml4ZXMgYW4gb3ZlcnNpZ2h0LCBtYWtpbmcgdGhlIDpjbGFzczpgfmZyYWN0aW9ucy5GcmFjdGlvbmAKKyAgbWF0Y2ggdGhlIG90aGVyIG51bWVyaWMgdHlwZXMuCiAKICAgLi4gcmV2aXNpb24gNzk0NTUKIApAQCAtMTIxMCw3ICsxMjUwLDcgQEAKICAgdXBsb2FkcyB0aGFua3MgdG8gYW4gYWRkZWQgKnJlc3QqIHBhcmFtZXRlciAocGF0Y2ggYnkgUGFibG8gTW91em87CiAgIDppc3N1ZTpgNjg0NWAuKQogCi0qIE5ldyBjbGFzcyBkZWNvcmF0b3I6IDpmdW5jOmB0b3RhbF9vcmRlcmluZ2AgaW4gdGhlIDptb2Q6YGZ1bmN0b29sc2AKKyogTmV3IGNsYXNzIGRlY29yYXRvcjogOmZ1bmM6YH5mdW5jdG9vbHMudG90YWxfb3JkZXJpbmdgIGluIHRoZSA6bW9kOmBmdW5jdG9vbHNgCiAgIG1vZHVsZSB0YWtlcyBhIGNsYXNzIHRoYXQgZGVmaW5lcyBhbiA6bWV0aDpgX19lcV9fYCBtZXRob2QgYW5kIG9uZSBvZgogICA6bWV0aDpgX19sdF9fYCwgOm1ldGg6YF9fbGVfX2AsIDptZXRoOmBfX2d0X19gLCBvciA6bWV0aDpgX19nZV9fYCwKICAgYW5kIGdlbmVyYXRlcyB0aGUgbWlzc2luZyBjb21wYXJpc29uIG1ldGhvZHMuICBTaW5jZSB0aGUKQEAgLTEyMTgsNyArMTI1OCw3IEBACiAgIHRoaXMgZGVjb3JhdG9yIG1ha2VzIGl0IGVhc2llciB0byBkZWZpbmUgb3JkZXJlZCBjbGFzc2VzLgogICAoQWRkZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXI7IDppc3N1ZTpgNTQ3OWAuKQogCi0gIE5ldyBmdW5jdGlvbjogOmZ1bmM6YGNtcF90b19rZXlgIHdpbGwgdGFrZSBhbiBvbGQtc3R5bGUgY29tcGFyaXNvbgorICBOZXcgZnVuY3Rpb246IDpmdW5jOmB+ZnVuY3Rvb2xzLmNtcF90b19rZXlgIHdpbGwgdGFrZSBhbiBvbGQtc3R5bGUgY29tcGFyaXNvbgogICBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgdHdvIGFyZ3VtZW50cyBhbmQgcmV0dXJuIGEgbmV3IGNhbGxhYmxlIHRoYXQKICAgY2FuIGJlIHVzZWQgYXMgdGhlICprZXkqIHBhcmFtZXRlciB0byBmdW5jdGlvbnMgc3VjaCBhcwogICA6ZnVuYzpgc29ydGVkYCwgOmZ1bmM6YG1pbmAgYW5kIDpmdW5jOmBtYXhgLCBldGMuICBUaGUgcHJpbWFyeQpAQCAtMTM0NSw3ICsxMzg1LDcgQEAKICAgd2l0aCBhbnkgb2JqZWN0IGxpdGVyYWwgdGhhdCBkZWNvZGVzIHRvIGEgbGlzdCBvZiBwYWlycy4KICAgKENvbnRyaWJ1dGVkIGJ5IFJheW1vbmQgSGV0dGluZ2VyOyA6aXNzdWU6YDUzODFgLikKIAotKiBUaGUgOm1vZDpgbWFpbGJveGAgbW9kdWxlJ3MgOmNsYXNzOmBNYWlsZGlyYCBjbGFzcyBub3cgcmVjb3JkcyB0aGUKKyogVGhlIDptb2Q6YG1haWxib3hgIG1vZHVsZSdzIDpjbGFzczpgfm1haWxib3guTWFpbGRpcmAgY2xhc3Mgbm93IHJlY29yZHMgdGhlCiAgIHRpbWVzdGFtcCBvbiB0aGUgZGlyZWN0b3JpZXMgaXQgcmVhZHMsIGFuZCBvbmx5IHJlLXJlYWRzIHRoZW0gaWYgdGhlCiAgIG1vZGlmaWNhdGlvbiB0aW1lIGhhcyBzdWJzZXF1ZW50bHkgY2hhbmdlZC4gIFRoaXMgaW1wcm92ZXMKICAgcGVyZm9ybWFuY2UgYnkgYXZvaWRpbmcgdW5uZWVkZWQgZGlyZWN0b3J5IHNjYW5zLiAgKEZpeGVkIGJ5CkBAIC0xNDMyLDcgKzE0NzIsNyBAQAogKiBUaGUgOm1vZDpgc2lnbmFsYCBtb2R1bGUgbm8gbG9uZ2VyIHJlLWluc3RhbGxzIHRoZSBzaWduYWwgaGFuZGxlcgogICB1bmxlc3MgdGhpcyBpcyB0cnVseSBuZWNlc3NhcnksIHdoaWNoIGZpeGVzIGEgYnVnIHRoYXQgY291bGQgbWFrZSBpdAogICBpbXBvc3NpYmxlIHRvIGNhdGNoIHRoZSBFSU5UUiBzaWduYWwgcm9idXN0bHkuICAoRml4ZWQgYnkKLSAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpOyA6aXNzdWU6YDgzNTRgLikKKyAgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGk7IDppc3N1ZTpgODM1NGAuKQogCiAqIE5ldyBmdW5jdGlvbnM6IGluIHRoZSA6bW9kOmBzaXRlYCBtb2R1bGUsIHRocmVlIG5ldyBmdW5jdGlvbnMKICAgcmV0dXJuIHZhcmlvdXMgc2l0ZS0gYW5kIHVzZXItc3BlY2lmaWMgcGF0aHMuCkBAIC0xNDY2LDEwICsxNTA2LDEwIEBACiAgIGRlZmF1bHRzIHRvIEZhbHNlOyBpZiBvdmVycmlkZGVuIHRvIGJlIFRydWUsCiAgIG5ldyByZXF1ZXN0IGNvbm5lY3Rpb25zIHdpbGwgaGF2ZSB0aGUgVENQX05PREVMQVkgb3B0aW9uIHNldCB0bwogICBwcmV2ZW50IGJ1ZmZlcmluZyBtYW55IHNtYWxsIHNlbmRzIGludG8gYSBzaW5nbGUgVENQIHBhY2tldC4KLSAgVGhlIDphdHRyOmB+U29ja2V0U2VydmVyLlRDUFNlcnZlci50aW1lb3V0YCBjbGFzcyBhdHRyaWJ1dGUgY2FuIGhvbGQKKyAgVGhlIDphdHRyOmB+U29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIudGltZW91dGAgY2xhc3MgYXR0cmlidXRlIGNhbiBob2xkCiAgIGEgdGltZW91dCBpbiBzZWNvbmRzIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoZSByZXF1ZXN0IHNvY2tldDsgaWYKLSAgbm8gcmVxdWVzdCBpcyByZWNlaXZlZCB3aXRoaW4gdGhhdCB0aW1lLCA6bWV0aDpgaGFuZGxlX3RpbWVvdXRgCi0gIHdpbGwgYmUgY2FsbGVkIGFuZCA6bWV0aDpgaGFuZGxlX3JlcXVlc3RgIHdpbGwgcmV0dXJuLgorICBubyByZXF1ZXN0IGlzIHJlY2VpdmVkIHdpdGhpbiB0aGF0IHRpbWUsIDptZXRoOmB+U29ja2V0U2VydmVyLkJhc2VTZXJ2ZXIuaGFuZGxlX3RpbWVvdXRgCisgIHdpbGwgYmUgY2FsbGVkIGFuZCA6bWV0aDpgflNvY2tldFNlcnZlci5CYXNlU2VydmVyLmhhbmRsZV9yZXF1ZXN0YCB3aWxsIHJldHVybi4KICAgKENvbnRyaWJ1dGVkIGJ5IEtyaXN0asOhbiBWYWx1ciBKw7Nuc3NvbjsgOmlzc3VlOmA2MTkyYCBhbmQgOmlzc3VlOmA2MjY3YC4pCiAKICogVXBkYXRlZCBtb2R1bGU6IHRoZSA6bW9kOmBzcWxpdGUzYCBtb2R1bGUgaGFzIGJlZW4gdXBkYXRlZCB0bwpAQCAtMTQ3OSw3ICsxNTE5LDcgQEAKICAgYW5kIHRoZW4gY2FsbCA6bWV0aDpgfnNxbGl0ZTMuQ29ubmVjdGlvbi5sb2FkX2V4dGVuc2lvbmAgdG8gbG9hZCBhIHBhcnRpY3VsYXIgc2hhcmVkIGxpYnJhcnkuCiAgIChVcGRhdGVkIGJ5IEdlcmhhcmQgSMOkcmluZy4pCiAKLSogVGhlIDptb2Q6YHNzbGAgbW9kdWxlJ3MgOmNsYXNzOmBzc2wuU1NMU29ja2V0YCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZQorKiBUaGUgOm1vZDpgc3NsYCBtb2R1bGUncyA6Y2xhc3M6YH5zc2wuU1NMU29ja2V0YCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZQogICBidWZmZXIgQVBJLCB3aGljaCBmaXhlZCBhIHRlc3Qgc3VpdGUgZmFpbHVyZSAoZml4IGJ5IEFudG9pbmUgUGl0cm91OwogICA6aXNzdWU6YDcxMzNgKSBhbmQgYXV0b21hdGljYWxseSBzZXQKICAgT3BlblNTTCdzIDpjOm1hY3JvOmBTU0xfTU9ERV9BVVRPX1JFVFJZYCwgd2hpY2ggd2lsbCBwcmV2ZW50IGFuIGVycm9yCkBAIC0xNTM1LDcgKzE1NzUsNyBAQAogICBvbiByZWNlaXZpbmcgYW4gOmNvbnN0OmBFSU5UUmAgc2lnbmFsLiAgKFJlcG9ydGVkIGJ5IHNldmVyYWwgcGVvcGxlOyBmaW5hbAogICBwYXRjaCBieSBHcmVnb3J5IFAuIFNtaXRoIGluIDppc3N1ZTpgMTA2ODI2OGAuKQogCi0qIE5ldyBmdW5jdGlvbjogOmZ1bmM6YH5zeW10YWJsZS5pc19kZWNsYXJlZF9nbG9iYWxgIGluIHRoZSA6bW9kOmBzeW10YWJsZWAgbW9kdWxlCisqIE5ldyBmdW5jdGlvbjogOmZ1bmM6YH5zeW10YWJsZS5TeW1ib2wuaXNfZGVjbGFyZWRfZ2xvYmFsYCBpbiB0aGUgOm1vZDpgc3ltdGFibGVgIG1vZHVsZQogICByZXR1cm5zIHRydWUgZm9yIHZhcmlhYmxlcyB0aGF0IGFyZSBleHBsaWNpdGx5IGRlY2xhcmVkIHRvIGJlIGdsb2JhbCwKICAgZmFsc2UgZm9yIG9uZXMgdGhhdCBhcmUgaW1wbGljaXRseSBnbG9iYWwuCiAgIChDb250cmlidXRlZCBieSBKZXJlbXkgSHlsdG9uLikKQEAgLTE1NzIsNyArMTYxMiw3IEBACiAgIHJlc3VsdGluZyBhcmNoaXZlLiAgVGhpcyBpcyBtb3JlIHBvd2VyZnVsIHRoYW4gdGhlIGV4aXN0aW5nCiAgICpleGNsdWRlKiBhcmd1bWVudCwgd2hpY2ggaGFzIHRoZXJlZm9yZSBiZWVuIGRlcHJlY2F0ZWQuCiAgIChBZGRlZCBieSBMYXJzIEd1c3TDpGJlbDsgOmlzc3VlOmA2ODU2YC4pCi0gIFRoZSA6Y2xhc3M6YH50YXJmaWxlLlRhckZpbGVgIGNsYXNzIGFsc28gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCisgIFRoZSA6Y2xhc3M6YH50YXJmaWxlLlRhckZpbGVgIGNsYXNzIGFsc28gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCiAgIChBZGRlZCBieSBMYXJzIEd1c3TDpGJlbDsgOmlzc3VlOmA3MjMyYC4pCiAKICogVGhlIDptZXRoOmB+dGhyZWFkaW5nLkV2ZW50LndhaXRgIG1ldGhvZCBvZiB0aGUgOmNsYXNzOmB0aHJlYWRpbmcuRXZlbnRgIGNsYXNzCkBAIC0xNzE2LDcgKzE3NTYsNyBAQAogICBNYWtlZmlsZSBhbmQgdGhlIDpmaWxlOmBweWNvbmZpZy5oYCBmaWxlLgogKiA6ZnVuYzpgfnN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnNgIHJldHVybnMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcKICAgYWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4KLSogOmZ1bmM6YH5zeXNjb25maWcuZ2V0cGF0aGAgcmV0dXJucyB0aGUgY29uZmlndXJlZCBwYXRoIGZvcgorKiA6ZnVuYzpgfnN5c2NvbmZpZy5nZXRfcGF0aGAgcmV0dXJucyB0aGUgY29uZmlndXJlZCBwYXRoIGZvcgogICBhIHBhcnRpY3VsYXIgdHlwZSBvZiBtb2R1bGU6IHRoZSBzdGFuZGFyZCBsaWJyYXJ5LAogICBzaXRlLXNwZWNpZmljIG1vZHVsZXMsIHBsYXRmb3JtLXNwZWNpZmljIG1vZHVsZXMsIGV0Yy4KICogOmZ1bmM6YH5zeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkYCByZXR1cm5zIHRydWUgaWYgeW91J3JlIHJ1bm5pbmcgYQpAQCAtMTcyNyw3ICsxNzY3LDcgQEAKIAogVGhlIERpc3R1dGlscyBwYWNrYWdlIGFuZCA6bW9kOmBzeXNjb25maWdgIGFyZSBub3cgbWFpbnRhaW5lZCBieSBUYXJlawogWmlhZMOpLCB3aG8gaGFzIGFsc28gc3RhcnRlZCBhIERpc3R1dGlsczIgcGFja2FnZSAoc291cmNlIHJlcG9zaXRvcnkgYXQKLWh0dHA6Ly9oZy5weXRob24ub3JnL2Rpc3R1dGlsczIvKSBmb3IgZGV2ZWxvcGluZyBhIG5leHQtZ2VuZXJhdGlvbgoraHR0cHM6Ly9oZy5weXRob24ub3JnL2Rpc3R1dGlsczIvKSBmb3IgZGV2ZWxvcGluZyBhIG5leHQtZ2VuZXJhdGlvbgogdmVyc2lvbiBvZiBEaXN0dXRpbHMuCiAKIApAQCAtMTc2NCw3ICsxODA0LDcgQEAKIGJ5IE1pY2hhZWwgRm9vcmQsIHVubGVzcyBvdGhlcndpc2Ugbm90ZWQuICBUaGUgZW5oYW5jZWQgdmVyc2lvbiBvZgogdGhlIG1vZHVsZSBpcyBkb3dubG9hZGFibGUgc2VwYXJhdGVseSBmb3IgdXNlIHdpdGggUHl0aG9uIHZlcnNpb25zIDIuNCB0byAyLjYsCiBwYWNrYWdlZCBhcyB0aGUgOm1vZDpgdW5pdHRlc3QyYCBwYWNrYWdlLCBmcm9tCi1odHRwOi8vcHlwaS5weXRob24ub3JnL3B5cGkvdW5pdHRlc3QyLgoraHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS91bml0dGVzdDIuCiAKIFdoZW4gdXNlZCBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBtb2R1bGUgY2FuIGF1dG9tYXRpY2FsbHkgZGlzY292ZXIKIHRlc3RzLiAgSXQncyBub3QgYXMgZmFuY3kgYXMgYHB5LnRlc3QgPGh0dHA6Ly9weXRlc3Qub3JnPmBfXyBvcgpAQCAtMTc3OCw3ICsxODE4LDcgQEAKIENvbnN1bHQgdGhlIDptb2Q6YHVuaXR0ZXN0YCBtb2R1bGUgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgogKERldmVsb3BlZCBpbiA6aXNzdWU6YDYwMDFgLikKIAotVGhlIDpmdW5jOmBtYWluYCBmdW5jdGlvbiBzdXBwb3J0cyBzb21lIG90aGVyIG5ldyBvcHRpb25zOgorVGhlIDpmdW5jOmB+dW5pdHRlc3QubWFpbmAgZnVuY3Rpb24gc3VwcG9ydHMgc29tZSBvdGhlciBuZXcgb3B0aW9uczoKIAogKiA6b3B0aW9uOmAtYmAgb3IgOm9wdGlvbjpgLS1idWZmZXJgIHdpbGwgYnVmZmVyIHRoZSBzdGFuZGFyZCBvdXRwdXQKICAgYW5kIHN0YW5kYXJkIGVycm9yIHN0cmVhbXMgZHVyaW5nIGVhY2ggdGVzdC4gIElmIHRoZSB0ZXN0IHBhc3NlcywKQEAgLTE3OTYsNyArMTgzNiw3IEBACiAgIGJlaW5nIHRlc3RlZCBvciB0aGUgdGVzdHMgYmVpbmcgcnVuIGhhdmUgZGVmaW5lZCBhIHNpZ25hbCBoYW5kbGVyIG9mCiAgIHRoZWlyIG93biwgYnkgbm90aWNpbmcgdGhhdCBhIHNpZ25hbCBoYW5kbGVyIHdhcyBhbHJlYWR5IHNldCBhbmQKICAgY2FsbGluZyBpdC4gIElmIHRoaXMgZG9lc24ndCB3b3JrIGZvciB5b3UsIHRoZXJlJ3MgYQotICA6ZnVuYzpgcmVtb3ZlSGFuZGxlcmAgZGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFyayB0ZXN0cyB0aGF0CisgIDpmdW5jOmB+dW5pdHRlc3QucmVtb3ZlSGFuZGxlcmAgZGVjb3JhdG9yIHRoYXQgY2FuIGJlIHVzZWQgdG8gbWFyayB0ZXN0cyB0aGF0CiAgIHNob3VsZCBoYXZlIHRoZSBjb250cm9sLUMgaGFuZGxpbmcgZGlzYWJsZWQuCiAKICogOm9wdGlvbjpgLWZgIG9yIDpvcHRpb246YC0tZmFpbGZhc3RgIG1ha2VzCkBAIC0xOTIzLDcgKzE5NjMsNyBAQAogCiA6ZnVuYzpgdW5pdHRlc3QubWFpbmAgbm93IHRha2VzIGFuIG9wdGlvbmFsIGBgZXhpdGBgIGFyZ3VtZW50LiAgSWYKIEZhbHNlLCA6ZnVuYzpgfnVuaXR0ZXN0Lm1haW5gIGRvZXNuJ3QgY2FsbCA6ZnVuYzpgc3lzLmV4aXRgLCBhbGxvd2luZwotOmZ1bmM6YG1haW5gIHRvIGJlIHVzZWQgZnJvbSB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCis6ZnVuYzpgfnVuaXR0ZXN0Lm1haW5gIHRvIGJlIHVzZWQgZnJvbSB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIuCiAoQ29udHJpYnV0ZWQgYnkgSi4gUGFibG8gRmVybsOhbmRlejsgOmlzc3VlOmAzMzc5YC4pCiAKIDpjbGFzczpgfnVuaXR0ZXN0LlRlc3RSZXN1bHRgIGhhcyBuZXcgOm1ldGg6YH51bml0dGVzdC5UZXN0UmVzdWx0LnN0YXJ0VGVzdFJ1bmAgYW5kCkBAIC0yMTIwLDcgKzIxNjAsNyBAQAogICA6YzptYWNybzpgUHlfSVNTUEFDRWAsCiAgIDpjOm1hY3JvOmBQeV9JU1VQUEVSYCwKICAgOmM6bWFjcm86YFB5X0lTWERJR0lUYCwKLSAgYW5kIDpjOm1hY3JvOmBQeV9UT0xPV0VSYCwgOmM6bWFjcm86YFB5X1RPVVBQRVJgLgorICA6YzptYWNybzpgUHlfVE9MT1dFUmAsIGFuZCA6YzptYWNybzpgUHlfVE9VUFBFUmAuCiAgIEFsbCBvZiB0aGVzZSBmdW5jdGlvbnMgYXJlIGFuYWxvZ291cyB0byB0aGUgQwogICBzdGFuZGFyZCBtYWNyb3MgZm9yIGNsYXNzaWZ5aW5nIGNoYXJhY3RlcnMsIGJ1dCBpZ25vcmUgdGhlIGN1cnJlbnQKICAgbG9jYWxlIHNldHRpbmcsIGJlY2F1c2UgaW4KQEAgLTIyNjYsMTEgKzIzMDYsMTEgQEAKICAgKENvbnRyaWJ1dGVkIGJ5IERhdmlkIENvdXJuYXBlYXU7IDppc3N1ZTpgNDM2NWAuKQogCiAqIFRoZSA6bW9kOmBfd2lucmVnYCBtb2R1bGUgZm9yIGFjY2Vzc2luZyB0aGUgcmVnaXN0cnkgbm93IGltcGxlbWVudHMKLSAgdGhlIDpmdW5jOmBDcmVhdGVLZXlFeGAgYW5kIDpmdW5jOmBEZWxldGVLZXlFeGAgZnVuY3Rpb25zLCBleHRlbmRlZAotICB2ZXJzaW9ucyBvZiBwcmV2aW91c2x5LXN1cHBvcnRlZCBmdW5jdGlvbnMgdGhhdCB0YWtlIHNldmVyYWwgZXh0cmEKLSAgYXJndW1lbnRzLiAgVGhlIDpmdW5jOmBEaXNhYmxlUmVmbGVjdGlvbktleWAsCi0gIDpmdW5jOmBFbmFibGVSZWZsZWN0aW9uS2V5YCwgYW5kIDpmdW5jOmBRdWVyeVJlZmxlY3Rpb25LZXlgIHdlcmUgYWxzbwotICB0ZXN0ZWQgYW5kIGRvY3VtZW50ZWQuCisgIHRoZSA6ZnVuYzpgfl93aW5yZWcuQ3JlYXRlS2V5RXhgIGFuZCA6ZnVuYzpgfl93aW5yZWcuRGVsZXRlS2V5RXhgCisgIGZ1bmN0aW9ucywgZXh0ZW5kZWQgdmVyc2lvbnMgb2YgcHJldmlvdXNseS1zdXBwb3J0ZWQgZnVuY3Rpb25zIHRoYXQKKyAgdGFrZSBzZXZlcmFsIGV4dHJhIGFyZ3VtZW50cy4gIFRoZSA6ZnVuYzpgfl93aW5yZWcuRGlzYWJsZVJlZmxlY3Rpb25LZXlgLAorICA6ZnVuYzpgfl93aW5yZWcuRW5hYmxlUmVmbGVjdGlvbktleWAsIGFuZCA6ZnVuYzpgfl93aW5yZWcuUXVlcnlSZWZsZWN0aW9uS2V5YAorICB3ZXJlIGFsc28gdGVzdGVkIGFuZCBkb2N1bWVudGVkLgogICAoSW1wbGVtZW50ZWQgYnkgQnJpYW4gQ3VydGluOiA6aXNzdWU6YDczNDdgLikKIAogKiBUaGUgbmV3IDpjOmZ1bmM6YF9iZWdpbnRocmVhZGV4YCBBUEkgaXMgdXNlZCB0byBzdGFydCB0aHJlYWRzLCBhbmQKQEAgLTIyODAsNyArMjMyMCw3IEBACiAqIFRoZSA6ZnVuYzpgb3Mua2lsbGAgZnVuY3Rpb24gbm93IHdvcmtzIG9uIFdpbmRvd3MuICBUaGUgc2lnbmFsIHZhbHVlCiAgIGNhbiBiZSB0aGUgY29uc3RhbnRzIDpjb25zdDpgQ1RSTF9DX0VWRU5UYCwKICAgOmNvbnN0OmBDVFJMX0JSRUFLX0VWRU5UYCwgb3IgYW55IGludGVnZXIuICBUaGUgZmlyc3QgdHdvIGNvbnN0YW50cwotICB3aWxsIHNlbmQgQ29udHJvbC1DIGFuZCBDb250cm9sLUJyZWFrIGtleXN0cm9rZSBldmVudHMgdG8KKyAgd2lsbCBzZW5kIDprYmQ6YENvbnRyb2wtQ2AgYW5kIDprYmQ6YENvbnRyb2wtQnJlYWtgIGtleXN0cm9rZSBldmVudHMgdG8KICAgc3VicHJvY2Vzc2VzOyBhbnkgb3RoZXIgdmFsdWUgd2lsbCB1c2UgdGhlIDpjOmZ1bmM6YFRlcm1pbmF0ZVByb2Nlc3NgCiAgIEFQSS4gIChDb250cmlidXRlZCBieSBNaWtpIFRlYmVrYTsgOmlzc3VlOmAxMjIwMjEyYC4pCiAKQEAgLTIzMjksNyArMjM2OSw3IEBACiAgIGF0dHJpYnV0ZXMgb2YgdGhlIHJlc3VsdGluZyBjb2RlIG9iamVjdHMgYXJlIG92ZXJ3cml0dGVuIHdoZW4gdGhlCiAgIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG9ic29sZXRlLiAgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBmaWxlIGhhcyBiZWVuCiAgIHJlbmFtZWQsIG1vdmVkLCBvciBpcyBhY2Nlc3NlZCB0aHJvdWdoIGRpZmZlcmVudCBwYXRocy4gIChQYXRjaCBieQotICDFvWlnYSBTZWlsbmFjaHQgYW5kIEplYW4tUGF1bCBDYWxkZXJvbmU7IDppc3N1ZTpgMTE4MDE5M2AuKQorICBaaWdhIFNlaWxuYWNodCBhbmQgSmVhbi1QYXVsIENhbGRlcm9uZTsgOmlzc3VlOmAxMTgwMTkzYC4pCiAKICogVGhlIDpmaWxlOmByZWdydGVzdC5weWAgc2NyaXB0IG5vdyB0YWtlcyBhIDpvcHRpb246YC0tcmFuZHNlZWQ9YAogICBzd2l0Y2ggdGhhdCB0YWtlcyBhbiBpbnRlZ2VyIHRoYXQgd2lsbCBiZSB1c2VkIGFzIHRoZSByYW5kb20gc2VlZApAQCAtMjM4NywyMCArMjQyNywyMCBAQAogCiBJbiB0aGUgc3RhbmRhcmQgbGlicmFyeToKIAotKiBPcGVyYXRpb25zIHdpdGggOmNsYXNzOmBkYXRldGltZWAgaW5zdGFuY2VzIHRoYXQgcmVzdWx0ZWQgaW4gYSB5ZWFyCisqIE9wZXJhdGlvbnMgd2l0aCA6Y2xhc3M6YH5kYXRldGltZS5kYXRldGltZWAgaW5zdGFuY2VzIHRoYXQgcmVzdWx0ZWQgaW4gYSB5ZWFyCiAgIGZhbGxpbmcgb3V0c2lkZSB0aGUgc3VwcG9ydGVkIHJhbmdlIGRpZG4ndCBhbHdheXMgcmFpc2UKICAgOmV4YzpgT3ZlcmZsb3dFcnJvcmAuICBTdWNoIGVycm9ycyBhcmUgbm93IGNoZWNrZWQgbW9yZSBjYXJlZnVsbHkKICAgYW5kIHdpbGwgbm93IHJhaXNlIHRoZSBleGNlcHRpb24uIChSZXBvcnRlZCBieSBNYXJrIExlYW5kZXIsIHBhdGNoCiAgIGJ5IEFuYW5kIEIuIFBpbGxhaSBhbmQgQWxleGFuZGVyIEJlbG9wb2xza3k7IDppc3N1ZTpgNzE1MGAuKQogCi0qIFdoZW4gdXNpbmcgOmNsYXNzOmBEZWNpbWFsYCBpbnN0YW5jZXMgd2l0aCBhIHN0cmluZydzCisqIFdoZW4gdXNpbmcgOmNsYXNzOmB+ZGVjaW1hbC5EZWNpbWFsYCBpbnN0YW5jZXMgd2l0aCBhIHN0cmluZydzCiAgIDptZXRoOmBmb3JtYXRgIG1ldGhvZCwgdGhlIGRlZmF1bHQgYWxpZ25tZW50IHdhcyBwcmV2aW91c2x5CiAgIGxlZnQtYWxpZ25tZW50LiAgVGhpcyBoYXMgYmVlbiBjaGFuZ2VkIHRvIHJpZ2h0LWFsaWdubWVudCwgd2hpY2ggbWlnaHQKICAgY2hhbmdlIHRoZSBvdXRwdXQgb2YgeW91ciBwcm9ncmFtcy4KICAgKENoYW5nZWQgYnkgTWFyayBEaWNraW5zb247IDppc3N1ZTpgNjg1N2AuKQogCiAgIENvbXBhcmlzb25zIGludm9sdmluZyBhIHNpZ25hbGluZyBOYU4gdmFsdWUgKG9yIGBgc05BTmBgKSBub3cgc2lnbmFsCi0gIDpjb25zdDpgSW52YWxpZE9wZXJhdGlvbmAgaW5zdGVhZCBvZiBzaWxlbnRseSByZXR1cm5pbmcgYSB0cnVlIG9yCisgIDpjb25zdDpgfmRlY2ltYWwuSW52YWxpZE9wZXJhdGlvbmAgaW5zdGVhZCBvZiBzaWxlbnRseSByZXR1cm5pbmcgYSB0cnVlIG9yCiAgIGZhbHNlIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvci4gIFF1aWV0IE5hTiB2YWx1ZXMKICAgKG9yIGBgTmFOYGApIGFyZSBub3cgaGFzaGFibGUuICAoRml4ZWQgYnkgTWFyayBEaWNraW5zb247CiAgIDppc3N1ZTpgNzI3OWAuKQpAQCAtMjQxMSw3ICsyNDUxLDcgQEAKICAgb3IgY29tbWVudCAod2hpY2ggbG9va3MgbGlrZSBgPCEtLSBjb21tZW50IC0tPmApLgogICAoUGF0Y2ggYnkgTmVpbCBNdWxsZXI7IDppc3N1ZTpgMjc0NmAuKQogCi0qIFRoZSA6bWV0aDpgcmVhZGxpbmVgIG1ldGhvZCBvZiA6Y2xhc3M6YFN0cmluZ0lPYCBvYmplY3RzIG5vdyBkb2VzCisqIFRoZSA6bWV0aDpgflN0cmluZ0lPLlN0cmluZ0lPLnJlYWRsaW5lYCBtZXRob2Qgb2YgOmNsYXNzOmB+U3RyaW5nSU8uU3RyaW5nSU9gIG9iamVjdHMgbm93IGRvZXMKICAgbm90aGluZyB3aGVuIGEgbmVnYXRpdmUgbGVuZ3RoIGlzIHJlcXVlc3RlZCwgYXMgb3RoZXIgZmlsZS1saWtlCiAgIG9iamVjdHMgZG8uICAoOmlzc3VlOmA3MzQ4YCkuCiAKQEAgLTI0NzAsNiArMjUxMCw3MyBAQAogLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKKy4uIF9weTI3LW1haW50ZW5hbmNlLWVuaGFuY2VtZW50czoKKworTmV3IEZlYXR1cmVzIEFkZGVkIHRvIFB5dGhvbiAyLjcgTWFpbnRlbmFuY2UgUmVsZWFzZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK05ldyBmZWF0dXJlcyBtYXkgYmUgYWRkZWQgdG8gUHl0aG9uIDIuNyBtYWludGVuYW5jZSByZWxlYXNlcyB3aGVuIHRoZQorc2l0dWF0aW9uIGdlbnVpbmVseSBjYWxscyBmb3IgaXQuIEFueSBzdWNoIGFkZGl0aW9ucyBtdXN0IGdvIHRocm91Z2gKK3RoZSBQeXRob24gRW5oYW5jZW1lbnQgUHJvcG9zYWwgcHJvY2VzcywgYW5kIG1ha2UgYSBjb21wZWxsaW5nIGNhc2UgZm9yIHdoeQordGhleSBjYW4ndCBiZSBhZGVxdWF0ZWx5IGFkZHJlc3NlZCBieSBlaXRoZXIgYWRkaW5nIHRoZSBuZXcgZmVhdHVyZSBzb2xlbHkgdG8KK1B5dGhvbiAzLCBvciBlbHNlIGJ5IHB1Ymxpc2hpbmcgaXQgb24gdGhlIFB5dGhvbiBQYWNrYWdlIEluZGV4LgorCitJbiBhZGRpdGlvbiB0byB0aGUgc3BlY2lmaWMgcHJvcG9zYWxzIGxpc3RlZCBiZWxvdywgdGhlcmUgaXMgYSBnZW5lcmFsCitleGVtcHRpb24gYWxsb3dpbmcgbmV3IGBgLTNgYCB3YXJuaW5ncyB0byBiZSBhZGRlZCBpbiBhbnkgUHl0aG9uIDIuNworbWFpbnRlbmFuY2UgcmVsZWFzZS4KKworCitQRVAgNDM0OiBJRExFIEVuaGFuY2VtZW50IEV4Y2VwdGlvbiBmb3IgQWxsIEJyYW5jaGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzpwZXA6YDQzNGAgZGVzY3JpYmVzIGEgZ2VuZXJhbCBleGVtcHRpb24gZm9yIGNoYW5nZXMgbWFkZSB0byB0aGUgSURMRQorZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgc2hpcHBlZCBhbG9uZyB3aXRoIFB5dGhvbi4gVGhpcyBleGVtcHRpb24gbWFrZXMgaXQKK3Bvc3NpYmxlIGZvciB0aGUgSURMRSBkZXZlbG9wZXJzIHRvIHByb3ZpZGUgYSBtb3JlIGNvbnNpc3RlbnQgdXNlcgorZXhwZXJpZW5jZSBhY3Jvc3MgYWxsIHN1cHBvcnRlZCB2ZXJzaW9ucyBvZiBQeXRob24gMiBhbmQgMy4KKworRm9yIGRldGFpbHMgb2YgYW55IElETEUgY2hhbmdlcywgcmVmZXIgdG8gdGhlIE5FV1MgZmlsZSBmb3IgdGhlIHNwZWNpZmljCityZWxlYXNlLgorCisKK1BFUCA0NjY6IE5ldHdvcmsgU2VjdXJpdHkgRW5oYW5jZW1lbnRzIGZvciBQeXRob24gMi43CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NjZgIGRlc2NyaWJlcyBhIG51bWJlciBvZiBuZXR3b3JrIHNlY3VyaXR5IGVuaGFuY2VtZW50IHByb3Bvc2FscwordGhhdCBoYXZlIGJlZW4gYXBwcm92ZWQgZm9yIGluY2x1c2lvbiBpbiBQeXRob24gMi43IG1haW50ZW5hbmNlIHJlbGVhc2VzLAord2l0aCB0aGUgZmlyc3Qgb2YgdGhvc2UgY2hhbmdlcyBhcHBlYXJpbmcgaW4gdGhlIFB5dGhvbiAyLjcuNyByZWxlYXNlLgorCis6cGVwOmA0NjZgIHJlbGF0ZWQgZmVhdHVyZXMgYWRkZWQgaW4gUHl0aG9uIDIuNy43OgorCisqIDpmdW5jOmBobWFjLmNvbXBhcmVfZGlnZXN0YCB3YXMgYmFja3BvcnRlZCBmcm9tIFB5dGhvbiAzIHRvIG1ha2UgYSB0aW1pbmcKKyAgYXR0YWNrIHJlc2lzdGFudCBjb21wYXJpc29uIG9wZXJhdGlvbiBhdmFpbGFibGUgdG8gUHl0aG9uIDIgYXBwbGljYXRpb25zLgorICAoQ29udHJpYnV0ZWQgYnkgQWxleCBHYXlub3I7IDppc3N1ZTpgMjEzMDZgLikKKworKiBPcGVuU1NMIDEuMC4xZyB3YXMgdXBncmFkZWQgaW4gdGhlIG9mZmljaWFsIFdpbmRvd3MgaW5zdGFsbGVycyBwdWJsaXNoZWQgb24KKyAgcHl0aG9uLm9yZy4gKENvbnRyaWJ1dGVkIGJ5IFphY2hhcnkgV2FyZTsgOmlzc3VlOmAyMTQ2MmAuKQorCis6cGVwOmA0NjZgIHJlbGF0ZWQgZmVhdHVyZXMgYWRkZWQgaW4gUHl0aG9uIDIuNy44OgorCisqIDpmdW5jOmBoYXNobGliLnBia2RmMl9obWFjYCB3YXMgYmFja3BvcnRlZCBmcm9tIFB5dGhvbiAzIHRvIG1ha2UgYSBoYXNoaW5nCisgIGFsZ29yaXRobSBzdWl0YWJsZSBmb3Igc2VjdXJlIHBhc3N3b3JkIHN0b3JhZ2UgYnJvYWRseSBhdmFpbGFibGUgdG8gUHl0aG9uCisgIDIgYXBwbGljYXRpb25zLiAoQ29udHJpYnV0ZWQgYnkgQWxleCBHYXlub3I7IDppc3N1ZTpgMjEzMDRgLikKKworKiBPcGVuU1NMIDEuMC4xaCB3YXMgdXBncmFkZWQgZm9yIHRoZSBvZmZpY2lhbCBXaW5kb3dzIGluc3RhbGxlcnMgcHVibGlzaGVkIG9uCisgIHB5dGhvbi5vcmcuIChjb250cmlidXRlZCBieSBaYWNoYXJ5IFdhcmUgaW4gOmlzc3VlOmAyMTY3MWAgZm9yIENWRS0yMDE0LTAyMjQpCisKKzpwZXA6YDQ2NmAgcmVsYXRlZCBmZWF0dXJlcyBhZGRlZCBpbiBQeXRob24gMi43Ljk6CisKKyogTW9zdCBvZiBQeXRob24gMy40J3MgOm1vZDpgc3NsYCBtb2R1bGUgd2FzIGJhY2twb3J0ZWQuIFRoaXMgbWVhbnMgOm1vZDpgc3NsYAorICBub3cgc3VwcG9ydHMgU2VydmVyIE5hbWUgSW5kaWNhdGlvbiwgVExTMS54IHNldHRpbmdzLCBhY2Nlc3MgdG8gdGhlIHBsYXRmb3JtCisgIGNlcnRpZmljYXRlIHN0b3JlLCB0aGUgOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIGNsYXNzLCBhbmQgb3RoZXIKKyAgZmVhdHVyZXMuIChDb250cmlidXRlZCBieSBBbGV4IEdheW5vciBhbmQgRGF2aWQgUmVpZDsgOmlzc3VlOmAyMTMwOGAuKQorCisqIDpmdW5jOmBvcy51cmFuZG9tYCB3YXMgY2hhbmdlZCB0byBjYWNoZSBhIGZpbGUgZGVzY3JpcHRvciB0byBgYC9kZXYvdXJhbmRvbWBgCisgIGluc3RlYWQgb2YgcmVvcGVuaW5nIGBgL2Rldi91cmFuZG9tYGAgb24gZXZlcnkgY2FsbC4gKENvbnRyaWJ1dGVkIGJ5IEFsZXgKKyAgR2F5bm9yOyA6aXNzdWU6YDIxMzA1YC4pCisKKworLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCiAuLiBfYWNrczI3OgogCiBBY2tub3dsZWRnZW1lbnRzCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy4wLnJzdCBiL0RvYy93aGF0c25ldy8zLjAucnN0CmluZGV4IDcxYjg3YjguLjk5NDExMzAgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8zLjAucnN0CisrKyBiL0RvYy93aGF0c25ldy8zLjAucnN0CkBAIC0xNjQsNyArMTY0LDcgQEAKIAogICBJZiB0aGUgaW5wdXQgc2VxdWVuY2VzIGFyZSBub3Qgb2YgZXF1YWwgbGVuZ3RoLCA6ZnVuYzpgbWFwYCB3aWxsCiAgIHN0b3AgYXQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoZSBzaG9ydGVzdCBvZiB0aGUgc2VxdWVuY2VzLiBGb3IgZnVsbAotICBjb21wYXRpYmlsaXR5IHdpdGggYG1hcGAgZnJvbSBQeXRob24gMi54LCBhbHNvIHdyYXAgdGhlIHNlcXVlbmNlcyBpbgorICBjb21wYXRpYmlsaXR5IHdpdGggOmZ1bmM6YG1hcGAgZnJvbSBQeXRob24gMi54LCBhbHNvIHdyYXAgdGhlIHNlcXVlbmNlcyBpbgogICA6ZnVuYzpgaXRlcnRvb2xzLnppcF9sb25nZXN0YCwgZS5nLiBgYG1hcChmdW5jLCAqc2VxdWVuY2VzKWBgIGJlY29tZXMKICAgYGBsaXN0KG1hcChmdW5jLCBpdGVydG9vbHMuemlwX2xvbmdlc3QoKnNlcXVlbmNlcykpKWBgLgogCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvMy4xLnJzdCBiL0RvYy93aGF0c25ldy8zLjEucnN0CmluZGV4IGFiMzI3ZjUuLmMxYTE2ODcgMTAwNjQ0Ci0tLSBhL0RvYy93aGF0c25ldy8zLjEucnN0CisrKyBiL0RvYy93aGF0c25ldy8zLjEucnN0CkBAIC0xNzIsNyArMTcyLDcgQEAKICAgbmVlZGVkIGFuZCBpcyBub3cgZGVwcmVjYXRlZC4KIAogICAoQ29udHJpYnV0ZWQgYnkgR2VvcmcgQnJhbmRsIGFuZCBNYXR0aWFzIEJyw6RuZHN0csO2bTsKLSAgYGFwcHNwb3QgaXNzdWUgNTMwOTQgPGh0dHA6Ly9jb2RlcmV2aWV3LmFwcHNwb3QuY29tLzUzMDk0PmBfLikKKyAgYGFwcHNwb3QgaXNzdWUgNTMwOTQgPGh0dHBzOi8vY29kZXJldmlldy5hcHBzcG90LmNvbS81MzA5ND5gXy4pCiAKICogYGByb3VuZCh4LCBuKWBgIG5vdyByZXR1cm5zIGFuIGludGVnZXIgaWYgKngqIGlzIGFuIGludGVnZXIuCiAgIFByZXZpb3VzbHkgaXQgcmV0dXJuZWQgYSBmbG9hdDo6CkBAIC0yMzgsNyArMjM4LDcgQEAKICAgKENvbnRyaWJ1dGVkIGJ5IEd1aWxoZXJtZSBQb2xvOyA6aXNzdWU6YDI5ODNgLikKIAogKiBUaGUgOmNsYXNzOmBnemlwLkd6aXBGaWxlYCBhbmQgOmNsYXNzOmBiejIuQloyRmlsZWAgY2xhc3NlcyBub3cgc3VwcG9ydAotICB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sOjoKKyAgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDo6CiAKICAgICAgICAgPj4+ICMgQXV0b21hdGljYWxseSBjbG9zZSBmaWxlIGFmdGVyIHdyaXRpbmcKICAgICAgICAgPj4+IHdpdGggZ3ppcC5HemlwRmlsZShmaWxlbmFtZSwgIndiIikgYXMgZjoKQEAgLTMzNiw3ICszMzYsNyBAQAogICAoQ29udHJpYnV0ZWQgYnkgRGF2aWQgTGFiYW47IDppc3N1ZTpgNDczOWAuKQogCiAqIFRoZSA6bW9kOmB1bml0dGVzdGAgbW9kdWxlIG5vdyBzdXBwb3J0cyBza2lwcGluZyBpbmRpdmlkdWFsIHRlc3RzIG9yIGNsYXNzZXMKLSAgb2YgdGVzdHMuIEFuZCBpdCBzdXBwb3J0cyBtYXJraW5nIGEgdGVzdCBhcyBhIGV4cGVjdGVkIGZhaWx1cmUsIGEgdGVzdCB0aGF0CisgIG9mIHRlc3RzLiBBbmQgaXQgc3VwcG9ydHMgbWFya2luZyBhIHRlc3QgYXMgYW4gZXhwZWN0ZWQgZmFpbHVyZSwgYSB0ZXN0IHRoYXQKICAgaXMga25vd24gdG8gYmUgYnJva2VuLCBidXQgc2hvdWxkbid0IGJlIGNvdW50ZWQgYXMgYSBmYWlsdXJlIG9uIGEKICAgVGVzdFJlc3VsdDo6CiAKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8zLjIucnN0IGIvRG9jL3doYXRzbmV3LzMuMi5yc3QKaW5kZXggYWE2OWRmMi4uNTgyMjUwNCAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzMuMi5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzMuMi5yc3QKQEAgLTUwLDcgKzUwLDcgQEAKIAogVGhpcyBhcnRpY2xlIGV4cGxhaW5zIHRoZSBuZXcgZmVhdHVyZXMgaW4gUHl0aG9uIDMuMiBhcyBjb21wYXJlZCB0byAzLjEuICBJdAogZm9jdXNlcyBvbiBhIGZldyBoaWdobGlnaHRzIGFuZCBnaXZlcyBhIGZldyBleGFtcGxlcy4gIEZvciBmdWxsIGRldGFpbHMsIHNlZSB0aGUKLWBNaXNjL05FV1MgPGh0dHA6Ly9oZy5weXRob24ub3JnL2NweXRob24vZmlsZS8zLjIvTWlzYy9ORVdTPmBfIGZpbGUuCitgTWlzYy9ORVdTIDxodHRwczovL2hnLnB5dGhvbi5vcmcvY3B5dGhvbi9maWxlLzMuMi9NaXNjL05FV1M+YF8gZmlsZS4KIAogLi4gc2VlYWxzbzo6CiAKQEAgLTUyMiw3ICs1MjIsNyBAQAogICAoUHJvcG9zZWQgYW5kIGltcGxlbWVudGVkIGJ5IE1hcmsgRGlja2luc29uOyA6aXNzdWU6YDkzMzdgLikKIAogKiA6Y2xhc3M6YG1lbW9yeXZpZXdgIG9iamVjdHMgbm93IGhhdmUgYSA6bWV0aDpgfm1lbW9yeXZpZXcucmVsZWFzZSgpYCBtZXRob2QKLSAgYW5kIHRoZXkgYWxzbyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLiAgVGhpcyBhbGxvd3MgdGltZWx5CisgIGFuZCB0aGV5IGFsc28gbm93IHN1cHBvcnQgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gIFRoaXMgYWxsb3dzIHRpbWVseQogICByZWxlYXNlIG9mIGFueSByZXNvdXJjZXMgdGhhdCB3ZXJlIGFjcXVpcmVkIHdoZW4gcmVxdWVzdGluZyBhIGJ1ZmZlciBmcm9tIHRoZQogICBvcmlnaW5hbCBvYmplY3QuCiAKQEAgLTc4OCw3ICs3ODgsNyBAQAogICA6aXNzdWU6YDg4MTRgLikKIAogKiBUbyBoZWxwIHdyaXRlIGNsYXNzZXMgd2l0aCByaWNoIGNvbXBhcmlzb24gbWV0aG9kcywgYSBuZXcgZGVjb3JhdG9yCi0gIDpmdW5jOmBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmdgIHdpbGwgdXNlIGEgZXhpc3RpbmcgZXF1YWxpdHkgYW5kIGluZXF1YWxpdHkKKyAgOmZ1bmM6YGZ1bmN0b29scy50b3RhbF9vcmRlcmluZ2Agd2lsbCB1c2UgZXhpc3RpbmcgZXF1YWxpdHkgYW5kIGluZXF1YWxpdHkKICAgbWV0aG9kcyB0byBmaWxsIGluIHRoZSByZW1haW5pbmcgbWV0aG9kcy4KIAogICBGb3IgZXhhbXBsZSwgc3VwcGx5aW5nICpfX2VxX18qIGFuZCAqX19sdF9fKiB3aWxsIGVuYWJsZQpAQCAtODE2LDcgKzgxNiw3IEBACiAgID4+PiBzb3J0ZWQoaXRlcmFibGUsIGtleT1jbXBfdG9fa2V5KGxvY2FsZS5zdHJjb2xsKSkKIAogICBGb3Igc29ydGluZyBleGFtcGxlcyBhbmQgYSBicmllZiBzb3J0aW5nIHR1dG9yaWFsLCBzZWUgdGhlIGBTb3J0aW5nIEhvd1RvCi0gIDxodHRwOi8vd2lraS5weXRob24ub3JnL21vaW4vSG93VG8vU29ydGluZy8+YF8gdHV0b3JpYWwuCisgIDxodHRwczovL3dpa2kucHl0aG9uLm9yZy9tb2luL0hvd1RvL1NvcnRpbmcvPmBfIHR1dG9yaWFsLgogCiAgIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlci4pCiAKQEAgLTEwMjAsNyArMTAyMCw3IEBACiA6aXNzdWU6YDUwOTRgLCA6aXNzdWU6YDY2NDFgLCA6aXNzdWU6YDI3MDZgLCA6aXNzdWU6YDE3Nzc0MTJgLCA6aXNzdWU6YDgwMTNgLAogYW5kIDppc3N1ZTpgMTA4MjdgLikKIAotLi4gWFhYIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU/JTQwc2VhcmNoX3RleHQ9ZGF0ZXRpbWUmJTQwc29ydD0tYWN0aXZpdHkKKy4uIFhYWCBodHRwczovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZT8lNDBzZWFyY2hfdGV4dD1kYXRldGltZSYlNDBzb3J0PS1hY3Rpdml0eQogCiBtYXRoCiAtLS0tCkBAIC0xMzE1LDcgKzEzMTUsNyBAQAogZnRwCiAtLS0KIAotVGhlIDpjbGFzczpgZnRwbGliLkZUUGAgY2xhc3Mgbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgdG8KK1RoZSA6Y2xhc3M6YGZ0cGxpYi5GVFBgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHRvCiB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBGVFAKIGNvbm5lY3Rpb24gd2hlbiBkb25lOjoKIApAQCAtMTM5OSw3ICsxMzk5LDcgQEAKIAogQWxzbywgdGhlIDpjbGFzczpgemlwZmlsZS5aaXBFeHRGaWxlYCBjbGFzcyB3YXMgcmV3b3JrZWQgaW50ZXJuYWxseSB0byByZXByZXNlbnQKIGZpbGVzIHN0b3JlZCBpbnNpZGUgYW4gYXJjaGl2ZS4gIFRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIKLWFuZCBjYW4gYmUgd3JhcHBlZCBpbiBhIDpjbGFzczpgaW8uQnVmZmVyZWRSZWFkZXJgIG9iamVjdCBmb3IgbW9yZSBzcGVlZHVwcy4gIEl0CithbmQgY2FuIGJlIHdyYXBwZWQgaW4gYW4gOmNsYXNzOmBpby5CdWZmZXJlZFJlYWRlcmAgb2JqZWN0IGZvciBtb3JlIHNwZWVkdXBzLiAgSXQKIGFsc28gc29sdmVzIGFuIGlzc3VlIHdoZXJlIGludGVybGVhdmVkIGNhbGxzIHRvICpyZWFkKiBhbmQgKnJlYWRsaW5lKiBnYXZlIHRoZQogd3JvbmcgcmVzdWx0cy4KIApAQCAtMTU5NSw3ICsxNTk1LDcgQEAKICAgZGVzY3JpcHRvci4gIFRoZSBsYXR0ZXIgY2FuIHRoZW4gYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4KICAgKEFkZGVkIGJ5IEFudG9pbmUgUGl0cm91OyA6aXNzdWU6YDg1MjRgLikKIAotKiA6ZnVuYzpgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbAorKiA6ZnVuYzpgc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbAogICB0byB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZQogICBzb2NrZXQgd2hlbiBkb25lLgogICAoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6A7IDppc3N1ZTpgOTc5NGAuKQpAQCAtMjI4Myw3ICsyMjgzLDcgQEAKIAogICBBZGRpdGlvbmFsIGRldGFpbHMgYWJvdXQgdGhlIGltcGxlbWVudGF0aW9uIGNhbiBiZSByZWFkIGZyb20gYSBgcHl0aG9uLWRldgogICBtYWlsaW5nLWxpc3QgbWVzc2FnZQotICA8aHR0cDovL21haWwucHl0aG9uLm9yZy9waXBlcm1haWwvcHl0aG9uLWRldi8yMDA5LU9jdG9iZXIvMDkzMzIxLmh0bWw+YF8KKyAgPGh0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMDktT2N0b2Jlci8wOTMzMjEuaHRtbD5gXwogICAoaG93ZXZlciwgInByaW9yaXR5IHJlcXVlc3RzIiBhcyBleHBvc2VkIGluIHRoaXMgbWVzc2FnZSBoYXZlIG5vdCBiZWVuIGtlcHQKICAgZm9yIGluY2x1c2lvbikuCiAKQEAgLTI0NjksNyArMjQ2OSw3IEBACiAKIEluIGFkZGl0aW9uIHRvIHRoZSBleGlzdGluZyBTdWJ2ZXJzaW9uIGNvZGUgcmVwb3NpdG9yeSBhdCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcKIHRoZXJlIGlzIG5vdyBhIGBNZXJjdXJpYWwgPGh0dHA6Ly9tZXJjdXJpYWwuc2VsZW5pYy5jb20vPmBfIHJlcG9zaXRvcnkgYXQKLWh0dHA6Ly9oZy5weXRob24ub3JnL1wgLgoraHR0cHM6Ly9oZy5weXRob24ub3JnL1wgLgogCiBBZnRlciB0aGUgMy4yIHJlbGVhc2UsIHRoZXJlIGFyZSBwbGFucyB0byBzd2l0Y2ggdG8gTWVyY3VyaWFsIGFzIHRoZSBwcmltYXJ5CiByZXBvc2l0b3J5LiAgVGhpcyBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIHNob3VsZCBtYWtlIGl0IGVhc2llciBmb3IKQEAgLTI0NzgsNyArMjQ3OCw3IEBACiAKIFRvIGxlYXJuIHRvIHVzZSB0aGUgbmV3IHZlcnNpb24gY29udHJvbCBzeXN0ZW0sIHNlZSB0aGUgYHR1dG9yaWFsIGJ5IEpvZWwKIFNwb2xza3kgPGh0dHA6Ly9oZ2luaXQuY29tPmBfIG9yIHRoZSBgR3VpZGUgdG8gTWVyY3VyaWFsIFdvcmtmbG93cwotPGh0dHA6Ly9tZXJjdXJpYWwuc2VsZW5pYy5jb20vZ3VpZGUvPmBfLgorPGh0dHA6Ly9tZXJjdXJpYWwuc2VsZW5pYy5jb20vZ3VpZGU+YF8uCiAKIAogQnVpbGQgYW5kIEMgQVBJIENoYW5nZXMKQEAgLTI1NjAsNyArMjU2MCw3IEBACiBidWlsZCwgdGhlcmUgaXMgYSBrbm93biBwcm9ibGVtIHdpdGggdGhlIGRlZmF1bHQgVGNsL1RrIG9uIE1hYyBPUyBYIDEwLjYuCiBBY2NvcmRpbmdseSwgd2UgcmVjb21tZW5kIGluc3RhbGxpbmcgYW4gdXBkYXRlZCBhbHRlcm5hdGl2ZSBzdWNoIGFzCiBgQWN0aXZlU3RhdGUgVGNsL1RrIDguNS45IDxodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmV0Y2wvZG93bmxvYWRzPmBfXC4KLVNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLyBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgorU2VlIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLyBmb3IgYWRkaXRpb25hbCBkZXRhaWxzLgogCiBQb3J0aW5nIHRvIFB5dGhvbiAzLjIKID09PT09PT09PT09PT09PT09PT09PQpAQCAtMjY0OSw3ICsyNjQ5LDcgQEAKICAgICAgICAgICAgICAgICBvdXRmaWxlLndyaXRlKGxpbmUpCiAKICAgKENvbnRyaWJ1dGVkIGJ5IEdlb3JnIEJyYW5kbCBhbmQgTWF0dGlhcyBCcsOkbmRzdHLDtm07Ci0gIGBhcHBzcG90IGlzc3VlIDUzMDk0IDxodHRwOi8vY29kZXJldmlldy5hcHBzcG90LmNvbS81MzA5ND5gXy4pCisgIGBhcHBzcG90IGlzc3VlIDUzMDk0IDxodHRwczovL2NvZGVyZXZpZXcuYXBwc3BvdC5jb20vNTMwOTQ+YF8uKQogCiAqIDpmdW5jOmBzdHJ1Y3QucGFja2Agbm93IG9ubHkgYWxsb3dzIGJ5dGVzIGZvciB0aGUgYGBzYGAgc3RyaW5nIHBhY2sgY29kZS4KICAgRm9ybWVybHksIGl0IHdvdWxkIGFjY2VwdCB0ZXh0IGFyZ3VtZW50cyBhbmQgaW1wbGljaXRseSBlbmNvZGUgdGhlbSB0byBieXRlcwpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzMuMy5yc3QgYi9Eb2Mvd2hhdHNuZXcvMy4zLnJzdAppbmRleCBjZGE2M2U0Li4wOTRlZmY4IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvMy4zLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvMy4zLnJzdApAQCAtNDQsNyArNDQsNyBAQAogCiBUaGlzIGFydGljbGUgZXhwbGFpbnMgdGhlIG5ldyBmZWF0dXJlcyBpbiBQeXRob24gMy4zLCBjb21wYXJlZCB0byAzLjIuCiBQeXRob24gMy4zIHdhcyByZWxlYXNlZCBvbiBTZXB0ZW1iZXIgMjksIDIwMTIuICBGb3IgZnVsbCBkZXRhaWxzLAotc2VlIHRoZSBgY2hhbmdlbG9nIDxodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy93aGF0c25ldy9jaGFuZ2Vsb2cuaHRtbD5gXy4KK3NlZSB0aGUgYGNoYW5nZWxvZyA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zL3doYXRzbmV3L2NoYW5nZWxvZy5odG1sPmBfLgogCiAuLiBzZWVhbHNvOjoKIApAQCAtMTcxLDcgKzE3MSw3IEBACiAqIE11bHRpLWRpbWVuc2lvbmFsIGNvbXBhcmlzb25zIGFyZSBzdXBwb3J0ZWQgZm9yIGFueSBhcnJheSB0eXBlLgogCiAqIE9uZS1kaW1lbnNpb25hbCBtZW1vcnl2aWV3cyBvZiBoYXNoYWJsZSAocmVhZC1vbmx5KSB0eXBlcyB3aXRoIGZvcm1hdHMgQiwKLSAgYiBvciBjIGFyZSBub3cgaGFzaGFibGUuIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDEzNDExYCkKKyAgYiBvciBjIGFyZSBub3cgaGFzaGFibGUuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxMzQxMWAuKQogCiAqIEFyYml0cmFyeSBzbGljaW5nIG9mIGFueSAxLUQgYXJyYXlzIHR5cGUgaXMgc3VwcG9ydGVkLiBGb3IgZXhhbXBsZSwgaXQKICAgaXMgbm93IHBvc3NpYmxlIHRvIHJldmVyc2UgYSBtZW1vcnl2aWV3IGluIE8oMSkgYnkgdXNpbmcgYSBuZWdhdGl2ZSBzdGVwLgpAQCAtMTk2LDcgKzE5Niw3IEBACiAKICogRm9yIGZ1cnRoZXIgY2hhbmdlcyBzZWUgYEJ1aWxkIGFuZCBDIEFQSSBDaGFuZ2VzYF8gYW5kIGBQb3J0aW5nIEMgY29kZWBfLgogCi0oQ29udHJpYnV0ZWQgYnkgU3RlZmFuIEtyYWggaW4gOmlzc3VlOmAxMDE4MWApCisoQ29udHJpYnV0ZWQgYnkgU3RlZmFuIEtyYWggaW4gOmlzc3VlOmAxMDE4MWAuKQogCiAuLiBzZWVhbHNvOjoKIApAQCAtMjI4LDcgKzIyOCw3IEBACiAKIENoYW5nZXMgaW50cm9kdWNlZCBieSA6cGVwOmAzOTNgIGFyZSB0aGUgZm9sbG93aW5nOgogCi0qIFB5dGhvbiBub3cgYWx3YXlzIHN1cHBvcnRzIHRoZSBmdWxsIHJhbmdlIG9mIFVuaWNvZGUgY29kZXBvaW50cywgaW5jbHVkaW5nCisqIFB5dGhvbiBub3cgYWx3YXlzIHN1cHBvcnRzIHRoZSBmdWxsIHJhbmdlIG9mIFVuaWNvZGUgY29kZSBwb2ludHMsIGluY2x1ZGluZwogICBub24tQk1QIG9uZXMgKGkuZS4gZnJvbSBgYFUrMDAwMGBgIHRvIGBgVSsxMEZGRkZgYCkuICBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbgogICBuYXJyb3cgYW5kIHdpZGUgYnVpbGRzIG5vIGxvbmdlciBleGlzdHMgYW5kIFB5dGhvbiBub3cgYmVoYXZlcyBsaWtlIGEgd2lkZQogICBidWlsZCwgZXZlbiB1bmRlciBXaW5kb3dzLgpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgICAgc28gYGAnXFUwMDEwRkZGRidbMF1gYCBub3cgcmV0dXJucyBgYCdcVTAwMTBGRkZGJ2BgIGFuZCBub3QgYGAnXHVEQkZGJ2BgOwogCiAgICogYWxsIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBub3cgY29ycmVjdGx5IGhhbmRsZQotICAgIG5vbi1CTVAgY29kZXBvaW50cy4KKyAgICBub24tQk1QIGNvZGUgcG9pbnRzLgogCiAqIFRoZSB2YWx1ZSBvZiA6ZGF0YTpgc3lzLm1heHVuaWNvZGVgIGlzIG5vdyBhbHdheXMgYGAxMTE0MTExYGAgKGBgMHgxMEZGRkZgYAogICBpbiBoZXhhZGVjaW1hbCkuICBUaGUgOmM6ZnVuYzpgUHlVbmljb2RlX0dldE1heGAgZnVuY3Rpb24gc3RpbGwgcmV0dXJucwpAQCAtMjU4LDEzICsyNTgsMTMgQEAKIFBlcmZvcm1hbmNlIGFuZCByZXNvdXJjZSB1c2FnZQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVRoZSBzdG9yYWdlIG9mIFVuaWNvZGUgc3RyaW5ncyBub3cgZGVwZW5kcyBvbiB0aGUgaGlnaGVzdCBjb2RlcG9pbnQgaW4gdGhlIHN0cmluZzoKK1RoZSBzdG9yYWdlIG9mIFVuaWNvZGUgc3RyaW5ncyBub3cgZGVwZW5kcyBvbiB0aGUgaGlnaGVzdCBjb2RlIHBvaW50IGluIHRoZSBzdHJpbmc6CiAKLSogcHVyZSBBU0NJSSBhbmQgTGF0aW4xIHN0cmluZ3MgKGBgVSswMDAwLVUrMDBGRmBgKSB1c2UgMSBieXRlIHBlciBjb2RlcG9pbnQ7CisqIHB1cmUgQVNDSUkgYW5kIExhdGluMSBzdHJpbmdzIChgYFUrMDAwMC1VKzAwRkZgYCkgdXNlIDEgYnl0ZSBwZXIgY29kZSBwb2ludDsKIAotKiBCTVAgc3RyaW5ncyAoYGBVKzAwMDAtVStGRkZGYGApIHVzZSAyIGJ5dGVzIHBlciBjb2RlcG9pbnQ7CisqIEJNUCBzdHJpbmdzIChgYFUrMDAwMC1VK0ZGRkZgYCkgdXNlIDIgYnl0ZXMgcGVyIGNvZGUgcG9pbnQ7CiAKLSogbm9uLUJNUCBzdHJpbmdzIChgYFUrMTAwMDAtVSsxMEZGRkZgYCkgdXNlIDQgYnl0ZXMgcGVyIGNvZGVwb2ludC4KKyogbm9uLUJNUCBzdHJpbmdzIChgYFUrMTAwMDAtVSsxMEZGRkZgYCkgdXNlIDQgYnl0ZXMgcGVyIGNvZGUgcG9pbnQuCiAKIFRoZSBuZXQgZWZmZWN0IGlzIHRoYXQgZm9yIG1vc3QgYXBwbGljYXRpb25zLCBtZW1vcnkgdXNhZ2Ugb2Ygc3RyaW5nCiBzdG9yYWdlIHNob3VsZCBkZWNyZWFzZSBzaWduaWZpY2FudGx5IC0gZXNwZWNpYWxseSBjb21wYXJlZCB0byBmb3JtZXIKQEAgLTMwNyw4ICszMDcsOCBAQAogUHl0aG9uIHZlcnNpb24gd2hlbiBhIG1vcmUgcmVjZW50IHZlcnNpb24gaXMgaW5zdGFsbGVkKS4KIAogSW4gYWRkaXRpb24gdG8gdGhlIGxhdW5jaGVyLCB0aGUgV2luZG93cyBpbnN0YWxsZXIgbm93IGluY2x1ZGVzIGFuCi1vcHRpb24gdG8gYWRkIHRoZSBuZXdseSBpbnN0YWxsZWQgUHl0aG9uIHRvIHRoZSBzeXN0ZW0gUEFUSCAoY29udHJpYnV0ZWQKLWJ5IEJyaWFuIEN1cnRpbiBpbiA6aXNzdWU6YDM1NjFgKS4KK29wdGlvbiB0byBhZGQgdGhlIG5ld2x5IGluc3RhbGxlZCBQeXRob24gdG8gdGhlIHN5c3RlbSBQQVRILiAgKENvbnRyaWJ1dGVkCitieSBCcmlhbiBDdXJ0aW4gaW4gOmlzc3VlOmAzNTYxYC4pCiAKIC4uIHNlZWFsc286OgogCkBAIC03ODEsNyArNzgxLDcgQEAKICAgQm90aCA6ZnVuYzpgdW5pY29kZWRhdGEubG9va3VwKClgIGFuZCBgYCdcTnsuLi59J2BgIG5vdyByZXNvbHZlIG5hbWUgYWxpYXNlcywKICAgYW5kIDpmdW5jOmB1bmljb2RlZGF0YS5sb29rdXAoKWAgcmVzb2x2ZXMgbmFtZWQgc2VxdWVuY2VzIHRvby4KIAotICAoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTI3NTNgKQorICAoQ29udHJpYnV0ZWQgYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTI3NTNgLikKIAogKiBVbmljb2RlIGRhdGFiYXNlIHVwZGF0ZWQgdG8gVUNEIHZlcnNpb24gNi4xLjAKIApAQCAtNzkzLDcgKzc5Myw3IEBACiAgIG1ldGhvZHMgb2YgOmNsYXNzOmBieXRlc2AgYW5kIDpjbGFzczpgYnl0ZWFycmF5YCBvYmplY3RzIG5vdyBhY2NlcHQgYW4KICAgaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NSBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC4KIAotICAoQ29udHJpYnV0ZWQgYnkgUGV0cmkgTGVodGluZW4gaW4gOmlzc3VlOmAxMjE3MGApCisgIChDb250cmlidXRlZCBieSBQZXRyaSBMZWh0aW5lbiBpbiA6aXNzdWU6YDEyMTcwYC4pCiAKICogVGhlIGBgcmp1c3QoKWBgLCBgYGxqdXN0KClgYCwgYW5kIGBgY2VudGVyKClgYCBtZXRob2RzIG9mIDpjbGFzczpgYnl0ZXNgCiAgIGFuZCA6Y2xhc3M6YGJ5dGVhcnJheWAgbm93IGFjY2VwdCBhIDpjbGFzczpgYnl0ZWFycmF5YCBmb3IgdGhlIGBgZmlsbGBgCkBAIC04NTQsNyArODU0LDcgQEAKICogVGhlIHNlcXVlbmNlIGRvY3VtZW50YXRpb24gaGFzIGJlZW4gc3Vic3RhbnRpYWxseSByZXdyaXR0ZW4gdG8gYmV0dGVyCiAgIGV4cGxhaW4gdGhlIGJpbmFyeS90ZXh0IHNlcXVlbmNlIGRpc3RpbmN0aW9uIGFuZCB0byBwcm92aWRlIHNwZWNpZmljCiAgIGRvY3VtZW50YXRpb24gc2VjdGlvbnMgZm9yIHRoZSBpbmRpdmlkdWFsIGJ1aWx0aW4gc2VxdWVuY2UgdHlwZXMKLSAgKDppc3N1ZTpgNDk2NmApCisgICg6aXNzdWU6YDQ5NjZgKS4KIAogCiBOZXcgTW9kdWxlcwpAQCAtODkxLDcgKzg5MSw3IEBACiBvYmplY3RzIHJlcHJlc2VudGluZyBJUHY0IGFuZCBJUHY2IGFkZHJlc3NlcywgbmV0d29ya3MgYW5kIGludGVyZmFjZXMgKGkuZS4KIGFuIElQIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgSVAgc3VibmV0KS4KIAotKENvbnRyaWJ1dGVkIGJ5IEdvb2dsZSBhbmQgUGV0ZXIgTW9vZHkgaW4gOnBlcDpgMzE0NGApCisoQ29udHJpYnV0ZWQgYnkgR29vZ2xlIGFuZCBQZXRlciBNb29keSBpbiA6cGVwOmAzMTQ0YC4pCiAKIGx6bWEKIC0tLS0KQEAgLTkwMCw3ICs5MDAsNyBAQAogdXNpbmcgdGhlIExaTUEgYWxnb3JpdGhtLCBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgdGhlIGBgLnh6YGAgYW5kIGBgLmx6bWFgYAogZmlsZSBmb3JtYXRzLgogCi0oQ29udHJpYnV0ZWQgYnkgTmFkZWVtIFZhd2RhIGFuZCBQZXIgw5h5dmluZCBLYXJsc2VuIGluIDppc3N1ZTpgNjcxNWApCisoQ29udHJpYnV0ZWQgYnkgTmFkZWVtIFZhd2RhIGFuZCBQZXIgw5h5dmluZCBLYXJsc2VuIGluIDppc3N1ZTpgNjcxNWAuKQogCiAKIEltcHJvdmVkIE1vZHVsZXMKQEAgLTkyMSw3ICs5MjEsNyBAQAogICAqIDpjbGFzczpgYWJjLmFic3RyYWN0c3RhdGljbWV0aG9kYCBoYXMgYmVlbiBkZXByZWNhdGVkLCB1c2UKICAgICA6Y2xhc3M6YHN0YXRpY21ldGhvZGAgd2l0aCA6ZnVuYzpgYWJjLmFic3RyYWN0bWV0aG9kYCBpbnN0ZWFkLgogCi0oQ29udHJpYnV0ZWQgYnkgRGFycmVuIERhbGUgaW4gOmlzc3VlOmAxMTYxMGApCisoQ29udHJpYnV0ZWQgYnkgRGFycmVuIERhbGUgaW4gOmlzc3VlOmAxMTYxMGAuKQogCiA6bWV0aDpgYWJjLkFCQ01ldGEucmVnaXN0ZXJgIG5vdyByZXR1cm5zIHRoZSByZWdpc3RlcmVkIHN1YmNsYXNzLCB3aGljaCBtZWFucwogaXQgY2FuIG5vdyBiZSB1c2VkIGFzIGEgY2xhc3MgZGVjb3JhdG9yICg6aXNzdWU6YDEwODY4YCkuCkBAIC05MzMsNyArOTMzLDcgQEAKIFRoZSA6bW9kOmBhcnJheWAgbW9kdWxlIHN1cHBvcnRzIHRoZSA6Yzp0eXBlOmBsb25nIGxvbmdgIHR5cGUgdXNpbmcgYGBxYGAgYW5kCiBgYFFgYCB0eXBlIGNvZGVzLgogCi0oQ29udHJpYnV0ZWQgYnkgT3JlbiBUaXJvc2ggYW5kIEhpcm9rYXp1IFlhbWFtb3RvIGluIDppc3N1ZTpgMTE3MjcxMWApCisoQ29udHJpYnV0ZWQgYnkgT3JlbiBUaXJvc2ggYW5kIEhpcm9rYXp1IFlhbWFtb3RvIGluIDppc3N1ZTpgMTE3MjcxMWAuKQogCiAKIGJhc2U2NApAQCAtOTY0LDE0ICs5NjQsMTQgQEAKICogOmNsYXNzOmBiejIuQloyRmlsZWAgY2FuIG5vdyByZWFkIGZyb20gYW5kIHdyaXRlIHRvIGFyYml0cmFyeSBmaWxlLWxpa2UKICAgb2JqZWN0cywgYnkgbWVhbnMgb2YgaXRzIGNvbnN0cnVjdG9yJ3MgKmZpbGVvYmoqIGFyZ3VtZW50LgogCi0gIChDb250cmlidXRlZCBieSBOYWRlZW0gVmF3ZGEgaW4gOmlzc3VlOmA1ODYzYCkKKyAgKENvbnRyaWJ1dGVkIGJ5IE5hZGVlbSBWYXdkYSBpbiA6aXNzdWU6YDU4NjNgLikKIAogKiA6Y2xhc3M6YGJ6Mi5CWjJGaWxlYCBhbmQgOmZ1bmM6YGJ6Mi5kZWNvbXByZXNzYCBjYW4gbm93IGRlY29tcHJlc3MKICAgbXVsdGktc3RyZWFtIGlucHV0cyAoc3VjaCBhcyB0aG9zZSBwcm9kdWNlZCBieSB0aGUgOnByb2dyYW06YHBiemlwMmAgdG9vbCkuCiAgIDpjbGFzczpgYnoyLkJaMkZpbGVgIGNhbiBub3cgYWxzbyBiZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIHR5cGUgb2YgZmlsZSwgdXNpbmcKICAgdGhlIGBgJ2EnYGAgKGFwcGVuZCkgbW9kZS4KIAotICAoQ29udHJpYnV0ZWQgYnkgTmlyIEFpZGVzIGluIDppc3N1ZTpgMTYyNWApCisgIChDb250cmlidXRlZCBieSBOaXIgQWlkZXMgaW4gOmlzc3VlOmAxNjI1YC4pCiAKICogOmNsYXNzOmBiejIuQloyRmlsZWAgbm93IGltcGxlbWVudHMgYWxsIG9mIHRoZSA6Y2xhc3M6YGlvLkJ1ZmZlcmVkSU9CYXNlYCBBUEksCiAgIGV4Y2VwdCBmb3IgdGhlIDptZXRoOmBkZXRhY2hgIGFuZCA6bWV0aDpgdHJ1bmNhdGVgIG1ldGhvZHMuCkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogCiBBZGRpdGlvbiBvZiBhIG5ldyA6Y2xhc3M6YH5jb2xsZWN0aW9ucy5DaGFpbk1hcGAgY2xhc3MgdG8gYWxsb3cgdHJlYXRpbmcgYQogbnVtYmVyIG9mIG1hcHBpbmdzIGFzIGEgc2luZ2xlIHVuaXQuICAoV3JpdHRlbiBieSBSYXltb25kIEhldHRpbmdlciBmb3IKLTppc3N1ZTpgMTEwODlgLCBtYWRlIHB1YmxpYyBpbiA6aXNzdWU6YDExMjk3YCkKKzppc3N1ZTpgMTEwODlgLCBtYWRlIHB1YmxpYyBpbiA6aXNzdWU6YDExMjk3YC4pCiAKIFRoZSBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgaGF2ZSBiZWVuIG1vdmVkIGluIGEgbmV3IDptb2Q6YGNvbGxlY3Rpb25zLmFiY2AKIG1vZHVsZSwgdG8gYmV0dGVyIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgYWJzdHJhY3QgYW5kIHRoZSBjb25jcmV0ZQpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKICAgIHB1c2ggYSB3aWRlIGNoYXJhY3RlciBzbyB0aGUgbmV4dCA6bWV0aDpgfmN1cnNlcy53aW5kb3cuZ2V0X3djaGAgd2lsbCByZXR1cm4KICAgIGl0CiAKLShDb250cmlidXRlZCBieSBJw7FpZ28gU2VybmEgaW4gOmlzc3VlOmA2NzU1YCkKKyhDb250cmlidXRlZCBieSBJw7FpZ28gU2VybmEgaW4gOmlzc3VlOmA2NzU1YC4pCiAKIGRhdGV0aW1lCiAtLS0tLS0tLQpAQCAtMTM3NiwxMSArMTM3NiwxMSBAQAogICA6ZnVuYzpgfmZ0cGxpYi5GVFBfVExTLmNjY2AgZnVuY3Rpb24gdG8gcmV2ZXJ0IGNvbnRyb2wgY2hhbm5lbCBiYWNrIHRvCiAgIHBsYWludGV4dC4gIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byB0YWtlIGFkdmFudGFnZSBvZiBmaXJld2FsbHMgdGhhdCBrbm93IGhvdwogICB0byBoYW5kbGUgTkFUIHdpdGggbm9uLXNlY3VyZSBGVFAgd2l0aG91dCBvcGVuaW5nIGZpeGVkIHBvcnRzLiAgKENvbnRyaWJ1dGVkCi0gIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTIxMzlgKQorICBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDEyMTM5YC4pCiAKICogQWRkZWQgOm1ldGg6YGZ0cGxpYi5GVFAubWxzZGAgbWV0aG9kIHdoaWNoIHByb3ZpZGVzIGEgcGFyc2FibGUgZGlyZWN0b3J5CiAgIGxpc3RpbmcgZm9ybWF0IGFuZCBkZXByZWNhdGVzIDptZXRoOmBmdHBsaWIuRlRQLm5sc3RgIGFuZAotICA6bWV0aDpgZnRwbGliLkZUUC5kaXJgLiAgKENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTEwNzJgKQorICA6bWV0aDpgZnRwbGliLkZUUC5kaXJgLiAgKENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTEwNzJgLikKIAogCiBmdW5jdG9vbHMKQEAgLTE0MDQsNyArMTQwNCw3IEBACiAKIEEgbmV3IDpmdW5jOmB+aG1hYy5jb21wYXJlX2RpZ2VzdGAgZnVuY3Rpb24gaGFzIGJlZW4gYWRkZWQgdG8gcHJldmVudCBzaWRlCiBjaGFubmVsIGF0dGFja3Mgb24gZGlnZXN0cyB0aHJvdWdoIHRpbWluZyBhbmFseXNpcy4gIChDb250cmlidXRlZCBieSBOaWNrCi1Db2dobGFuIGFuZCBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTUwNjFgKQorQ29naGxhbiBhbmQgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE1MDYxYC4pCiAKIAogaHR0cApAQCAtMTQyMSw3ICsxNDIxLDcgQEAKIAogOmNsYXNzOmBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2VgIG5vdyBoYXMgYQogOm1ldGg6YH5odHRwLmNsaWVudC5IVFRQUmVzcG9uc2UucmVhZGludG9gIG1ldGhvZCwgd2hpY2ggbWVhbnMgaXQgY2FuIGJlIHVzZWQKLWFzIGEgOmNsYXNzOmBpby5SYXdJT0Jhc2VgIGNsYXNzLiAgKENvbnRyaWJ1dGVkIGJ5IEpvaG4gS3VobiBpbgorYXMgYW4gOmNsYXNzOmBpby5SYXdJT0Jhc2VgIGNsYXNzLiAgKENvbnRyaWJ1dGVkIGJ5IEpvaG4gS3VobiBpbgogOmlzc3VlOmAxMzQ2NGAuKQogCiAKQEAgLTE0MzYsMTMgKzE0MzYsMTMgQEAKIChDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAxNTExNGAsIGFuZCA6aXNzdWU6YDE0NTM4YCwKIDppc3N1ZTpgMTM5OTNgLCA6aXNzdWU6YDEzOTYwYCwgOmlzc3VlOmAxMzM1OGAsIDppc3N1ZTpgMTc0NTc2MWAsCiA6aXNzdWU6YDc1NTY3MGAsIDppc3N1ZTpgMTMzNTdgLCA6aXNzdWU6YDEyNjI5YCwgOmlzc3VlOmAxMjAwMzEzYCwKLTppc3N1ZTpgNjcwNjY0YCwgOmlzc3VlOmAxMzI3M2AsIDppc3N1ZTpgMTI4ODhgLCA6aXNzdWU6YDczMTFgKQorOmlzc3VlOmA2NzA2NjRgLCA6aXNzdWU6YDEzMjczYCwgOmlzc3VlOmAxMjg4OGAsIDppc3N1ZTpgNzMxMWAuKQogCiBBIG5ldyA6ZGF0YTpgfmh0bWwuZW50aXRpZXMuaHRtbDVgIGRpY3Rpb25hcnkgdGhhdCBtYXBzIEhUTUw1IG5hbWVkIGNoYXJhY3RlcgogcmVmZXJlbmNlcyB0byB0aGUgZXF1aXZhbGVudCBVbmljb2RlIGNoYXJhY3RlcihzKSAoZS5nLiBgYGh0bWw1WydndDsnXSA9PQogJz4nYGApIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSA6bW9kOmBodG1sLmVudGl0aWVzYCBtb2R1bGUuICBUaGUgZGljdGlvbmFyeSBpcwogbm93IGFsc28gdXNlZCBieSA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYC4gIChDb250cmlidXRlZCBieSBFemlvCi1NZWxvdHRpIGluIDppc3N1ZTpgMTExMTNgIGFuZCA6aXNzdWU6YDE1MTU2YCkKK01lbG90dGkgaW4gOmlzc3VlOmAxMTExM2AgYW5kIDppc3N1ZTpgMTUxNTZgLikKIAogCiBpbWFwbGliCkBAIC0xNDUxLDcgKzE0NTEsNyBAQAogVGhlIDpjbGFzczpgfmltYXBsaWIuSU1BUDRfU1NMYCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBhbiBTU0xDb250ZXh0CiBwYXJhbWV0ZXIgdG8gY29udHJvbCBwYXJhbWV0ZXJzIG9mIHRoZSBzZWN1cmUgY2hhbm5lbC4KIAotKENvbnRyaWJ1dGVkIGJ5IFNpamluIEpvc2VwaCBpbiA6aXNzdWU6YDg4MDhgKQorKENvbnRyaWJ1dGVkIGJ5IFNpamluIEpvc2VwaCBpbiA6aXNzdWU6YDg4MDhgLikKIAogCiBpbnNwZWN0CkBAIC0xNDYyLDE0ICsxNDYyLDE0IEBACiB3aGVyZSB0aG9zZSBuYW1lcyB3ZXJlIHJlc29sdmVkLCBtYWtpbmcgaXQgZWFzaWVyIHRvIHZlcmlmeSBjb3JyZWN0IGludGVybmFsCiBzdGF0ZSB3aGVuIHRlc3RpbmcgY29kZSB0aGF0IHJlbGllcyBvbiBzdGF0ZWZ1bCBjbG9zdXJlcy4KIAotKENvbnRyaWJ1dGVkIGJ5IE1lYWRvciBJbmdlIGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxMzA2MmApCisoQ29udHJpYnV0ZWQgYnkgTWVhZG9yIEluZ2UgYW5kIE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDEzMDYyYC4pCiAKIEEgbmV3IDpmdW5jOmB+aW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHNgIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkLiBUaGlzCiBmdW5jdGlvbiByZXBvcnRzIHRoZSBjdXJyZW50IGJpbmRpbmcgb2YgbG9jYWwgdmFyaWFibGVzIGluIHRoZSBnZW5lcmF0b3Incwogc3RhY2sgZnJhbWUsIG1ha2luZyBpdCBlYXNpZXIgdG8gdmVyaWZ5IGNvcnJlY3QgaW50ZXJuYWwgc3RhdGUgd2hlbiB0ZXN0aW5nCiBnZW5lcmF0b3JzLgogCi0oQ29udHJpYnV0ZWQgYnkgTWVhZG9yIEluZ2UgaW4gOmlzc3VlOmAxNTE1M2ApCisoQ29udHJpYnV0ZWQgYnkgTWVhZG9yIEluZ2UgaW4gOmlzc3VlOmAxNTE1M2AuKQogCiBpbwogLS0KQEAgLTE0NzgsNyArMTQ3OCw3IEBACiBleGNsdXNpdmVseSBjcmVhdGUgYSBuZXcgZmlsZSwgYW5kIHJhaXNlIGEgOmV4YzpgRmlsZUV4aXN0c0Vycm9yYCBpZiB0aGUgZmlsZQogYWxyZWFkeSBleGlzdHMuIEl0IGlzIGJhc2VkIG9uIHRoZSBDMTEgJ3gnIG1vZGUgdG8gZm9wZW4oKS4KIAotKENvbnRyaWJ1dGVkIGJ5IERhdmlkIFRvd25zaGVuZCBpbiA6aXNzdWU6YDEyNzYwYCkKKyhDb250cmlidXRlZCBieSBEYXZpZCBUb3duc2hlbmQgaW4gOmlzc3VlOmAxMjc2MGAuKQogCiBUaGUgY29uc3RydWN0b3Igb2YgdGhlIDpjbGFzczpgfmlvLlRleHRJT1dyYXBwZXJgIGNsYXNzIGhhcyBhIG5ldwogKndyaXRlX3Rocm91Z2gqIG9wdGlvbmFsIGFyZ3VtZW50LiBJZiAqd3JpdGVfdGhyb3VnaCogaXMgYGBUcnVlYGAsIGNhbGxzIHRvCkBAIC0xNTEzLDcgKzE1MTMsNyBAQAogVGhlIDptb2Q6YG1hdGhgIG1vZHVsZSBoYXMgYSBuZXcgZnVuY3Rpb24sIDpmdW5jOmB+bWF0aC5sb2cyYCwgIHdoaWNoIHJldHVybnMKIHRoZSBiYXNlLTIgbG9nYXJpdGhtIG9mICp4Ki4KIAotKFdyaXR0ZW4gYnkgTWFyayBEaWNraW5zb24gaW4gOmlzc3VlOmAxMTg4OGApLgorKFdyaXR0ZW4gYnkgTWFyayBEaWNraW5zb24gaW4gOmlzc3VlOmAxMTg4OGAuKQogCiAKIG1tYXAKQEAgLTE1NDAsNyArMTU0MCw3IEBACiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBpbmhlcml0aW5nIHRoZSBgYGRhZW1vbmBgIGZsYWcgZnJvbQogdGhlIHBhcmVudCBwcm9jZXNzICg6aXNzdWU6YDYwNjRgKS4KIAotTmV3IGF0dHJpYnV0ZSBhdHRyaWJ1dGUgOmRhdGE6YG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzLnNlbnRpbmVsYCBhbGxvd3MgYQorTmV3IGF0dHJpYnV0ZSA6ZGF0YTpgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Muc2VudGluZWxgIGFsbG93cyBhCiBwcm9ncmFtIHRvIHdhaXQgb24gbXVsdGlwbGUgOmNsYXNzOmB+bXVsdGlwcm9jZXNzaW5nLlByb2Nlc3NgIG9iamVjdHMgYXQgb25lCiB0aW1lIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBPUyBwcmltaXRpdmVzIChmb3IgZXhhbXBsZSwgOm1vZDpgc2VsZWN0YCBvbgogcG9zaXggc3lzdGVtcykuCkBAIC0xNTU2LDcgKzE1NTYsNyBAQAogbm50cGxpYgogLS0tLS0tLQogCi1UaGUgOmNsYXNzOmBubnRwbGliLk5OVFBgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHRvCitUaGUgOmNsYXNzOmBubnRwbGliLk5OVFBgIGNsYXNzIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHRvCiB1bmNvbmRpdGlvbmFsbHkgY29uc3VtZSA6ZXhjOmBzb2NrZXQuZXJyb3JgIGV4Y2VwdGlvbnMgYW5kIHRvIGNsb3NlIHRoZSBOTlRQCiBjb25uZWN0aW9uIHdoZW4gZG9uZTo6CiAKQEAgLTE1NjcsNyArMTU2Nyw3IEBACiAgICgnMjExIDE3NTUgMSAxNzU1IGdtYW5lLmNvbXAucHl0aG9uLmNvbW1pdHRlcnMnLCAxNzU1LCAxLCAxNzU1LCAnZ21hbmUuY29tcC5weXRob24uY29tbWl0dGVycycpCiAgID4+PgogCi0oQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6AgaW4gOmlzc3VlOmA5Nzk1YCkKKyhDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDk3OTVgLikKIAogCiBvcwpAQCAtMTU3OSw3ICsxNTc5LDcgQEAKICAgYXZvaWQgcmFjZSBjb25kaXRpb25zIGluIG11bHRpLXRocmVhZGVkIHByb2dyYW1zLgogCiAqIFRoZSA6bW9kOmBvc2AgbW9kdWxlIGhhcyBhIG5ldyA6ZnVuYzpgfm9zLnNlbmRmaWxlYCBmdW5jdGlvbiB3aGljaCBwcm92aWRlcwotICBhbiBlZmZpY2VudCAiemVyby1jb3B5IiB3YXkgZm9yIGNvcHlpbmcgZGF0YSBmcm9tIG9uZSBmaWxlIChvciBzb2NrZXQpCisgIGFuIGVmZmljaWVudCAiemVyby1jb3B5IiB3YXkgZm9yIGNvcHlpbmcgZGF0YSBmcm9tIG9uZSBmaWxlIChvciBzb2NrZXQpCiAgIGRlc2NyaXB0b3IgdG8gYW5vdGhlci4gVGhlIHBocmFzZSAiemVyby1jb3B5IiByZWZlcnMgdG8gdGhlIGZhY3QgdGhhdCBhbGwgb2YKICAgdGhlIGNvcHlpbmcgb2YgZGF0YSBiZXR3ZWVuIHRoZSB0d28gZGVzY3JpcHRvcnMgaXMgZG9uZSBlbnRpcmVseSBieSB0aGUKICAga2VybmVsLCB3aXRoIG5vIGNvcHlpbmcgb2YgZGF0YSBpbnRvIHVzZXJzcGFjZSBidWZmZXJzLiA6ZnVuYzpgfm9zLnNlbmRmaWxlYApAQCAtMTc0NCwyNCArMTc0NCwyNCBAQAogICBzZXQgdG8gRmFsc2UgbWFrZXMgdGhlIG1ldGhvZCBleGVjdXRlIHRoZSBzY2hlZHVsZWQgZXZlbnRzIGR1ZSB0byBleHBpcmUKICAgc29vbmVzdCAoaWYgYW55KSBhbmQgdGhlbiByZXR1cm4gaW1tZWRpYXRlbHkuCiAgIFRoaXMgaXMgdXNlZnVsIGluIGNhc2UgeW91IHdhbnQgdG8gdXNlIHRoZSA6Y2xhc3M6YH5zY2hlZC5zY2hlZHVsZXJgIGluCi0gIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuICAoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6AgaW4gOmlzc3VlOmAxMzQ0OWApCisgIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuICAoQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sw6AgaW4gOmlzc3VlOmAxMzQ0OWAuKQogCiAqIDpjbGFzczpgfnNjaGVkLnNjaGVkdWxlcmAgY2xhc3MgY2FuIG5vdyBiZSBzYWZlbHkgdXNlZCBpbiBtdWx0aS10aHJlYWRlZAogICBlbnZpcm9ubWVudHMuICAoQ29udHJpYnV0ZWQgYnkgSm9zaWFoIENhcmxzb24gYW5kIEdpYW1wYW9sbyBSb2RvbMOgIGluCi0gIDppc3N1ZTpgODY4NGApCisgIDppc3N1ZTpgODY4NGAuKQogCiAqICp0aW1lZnVuYyogYW5kICpkZWxheWZ1bmN0KiBwYXJhbWV0ZXJzIG9mIDpjbGFzczpgfnNjaGVkLnNjaGVkdWxlcmAgY2xhc3MKICAgY29uc3RydWN0b3IgYXJlIG5vdyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gOmZ1bmM6YHRpbWUudGltZWAgYW5kCiAgIDpmdW5jOmB0aW1lLnNsZWVwYCByZXNwZWN0aXZlbHkuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXMgQ2xhcmsgaW4KLSAgOmlzc3VlOmAxMzI0NWApCisgIDppc3N1ZTpgMTMyNDVgLikKIAogKiA6bWV0aDpgfnNjaGVkLnNjaGVkdWxlci5lbnRlcmAgYW5kIDptZXRoOmB+c2NoZWQuc2NoZWR1bGVyLmVudGVyYWJzYAogICAqYXJndW1lbnQqIHBhcmFtZXRlciBpcyBub3cgb3B0aW9uYWwuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXMgQ2xhcmsgaW4KLSAgOmlzc3VlOmAxMzI0NWApCisgIDppc3N1ZTpgMTMyNDVgLikKIAogKiA6bWV0aDpgfnNjaGVkLnNjaGVkdWxlci5lbnRlcmAgYW5kIDptZXRoOmB+c2NoZWQuc2NoZWR1bGVyLmVudGVyYWJzYAogICBub3cgYWNjZXB0IGEgKmt3YXJncyogcGFyYW1ldGVyLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzIENsYXJrIGluCi0gIDppc3N1ZTpgMTMyNDVgKQorICA6aXNzdWU6YDEzMjQ1YC4pCiAKIAogc2VsZWN0CkBAIC0xNzg3LDEwICsxNzg3LDEwIEBACiAqIE5ldyBmdW5jdGlvbnM6CiAKICAgKiA6ZnVuYzpgfnNodXRpbC5kaXNrX3VzYWdlYDogcHJvdmlkZXMgdG90YWwsIHVzZWQgYW5kIGZyZWUgZGlzayBzcGFjZQotICAgIHN0YXRpc3RpY3MuIChDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDEyNDQyYCkKKyAgICBzdGF0aXN0aWNzLiAgKENvbnRyaWJ1dGVkIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTI0NDJgLikKICAgKiA6ZnVuYzpgfnNodXRpbC5jaG93bmA6IGFsbG93cyBvbmUgdG8gY2hhbmdlIHVzZXIgYW5kL29yIGdyb3VwIG9mIHRoZSBnaXZlbgogICAgIHBhdGggYWxzbyBzcGVjaWZ5aW5nIHRoZSB1c2VyL2dyb3VwIG5hbWVzIGFuZCBub3Qgb25seSB0aGVpciBudW1lcmljCi0gICAgaWRzLiAoQ29udHJpYnV0ZWQgYnkgU2FuZHJvIFRvc2kgaW4gOmlzc3VlOmAxMjE5MWApCisgICAgaWRzLiAgKENvbnRyaWJ1dGVkIGJ5IFNhbmRybyBUb3NpIGluIDppc3N1ZTpgMTIxOTFgLikKICAgKiA6ZnVuYzpgc2h1dGlsLmdldF90ZXJtaW5hbF9zaXplYDogcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgdGVybWluYWwgd2luZG93CiAgICAgdG8gd2hpY2ggdGhlIGludGVycHJldGVyIGlzIGF0dGFjaGVkLiAgKENvbnRyaWJ1dGVkIGJ5IFpiaWduaWV3CiAgICAgSsSZZHJ6ZWpld3NraS1Tem1layBpbiA6aXNzdWU6YDEzNjA5YC4pCkBAIC0xODEzLDcgKzE4MTMsNyBAQAogCiAqIDpmdW5jOmB+c2h1dGlsLnJtdHJlZWAgaXMgbm93IHJlc2lzdGFudCB0byBzeW1saW5rIGF0dGFja3Mgb24gcGxhdGZvcm1zCiAgIHdoaWNoIHN1cHBvcnQgdGhlIG5ldyBgYGRpcl9mZGBgIHBhcmFtZXRlciBpbiA6ZnVuYzpgb3Mub3BlbmAgYW5kCi0gIDpmdW5jOmBvcy51bmxpbmtgLiAoQ29udHJpYnV0ZWQgYnkgTWFydGluIHZvbiBMw7Z3aXMgYW5kIEh5bmVrIFNjaGxhd2FjaworICA6ZnVuYzpgb3MudW5saW5rYC4gIChDb250cmlidXRlZCBieSBNYXJ0aW4gdm9uIEzDtndpcyBhbmQgSHluZWsgU2NobGF3YWNrCiAgIGluIDppc3N1ZTpgNDQ4OWAuKQogCiAKQEAgLTE4NjEsMTMgKzE4NjEsMTMgQEAKIHdoZW4gY3JlYXRpbmcgdGhlIG91dGdvaW5nIHNvY2tldC4gIChDb250cmlidXRlZCBieSBQYXVsbyBTY2FyZGluZSBpbgogOmlzc3VlOmAxMTI4MWAuKQogCi06Y2xhc3M6YH5zbXRwbGliLlNNVFBgIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sLCBhbGxvd2luZyBhbgorOmNsYXNzOmB+c210cGxpYi5TTVRQYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCwgYWxsb3dpbmcgYW4KIGBgU01UUGBgIGluc3RhbmNlIHRvIGJlIHVzZWQgaW4gYSBgYHdpdGhgYCBzdGF0ZW1lbnQuICAoQ29udHJpYnV0ZWQKIGJ5IEdpYW1wYW9sbyBSb2RvbMOgIGluIDppc3N1ZTpgMTEyODlgLikKIAogVGhlIDpjbGFzczpgfnNtdHBsaWIuU01UUF9TU0xgIGNvbnN0cnVjdG9yIGFuZCB0aGUgOm1ldGg6YH5zbXRwbGliLlNNVFAuc3RhcnR0bHNgCiBtZXRob2Qgbm93IGFjY2VwdCBhbiBTU0xDb250ZXh0IHBhcmFtZXRlciB0byBjb250cm9sIHBhcmFtZXRlcnMgb2YgdGhlIHNlY3VyZQotY2hhbm5lbC4gIChDb250cmlidXRlZCBieSBLYXN1biBIZXJhdGggaW4gOmlzc3VlOmA4ODA5YCkKK2NoYW5uZWwuICAoQ29udHJpYnV0ZWQgYnkgS2FzdW4gSGVyYXRoIGluIDppc3N1ZTpgODgwOWAuKQogCiAKIHNvY2tldApAQCAtMTg4NywxMSArMTg4NywxMSBAQAogICAoaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Tb2NrZXRjYW4pLCBvbiBMaW51eAogICAoaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMjUzNDI1KS4KIAotICAoQ29udHJpYnV0ZWQgYnkgTWF0dGhpYXMgRnVjaHMsIHVwZGF0ZWQgYnkgVGlhZ28gR29uw6dhbHZlcyBpbiA6aXNzdWU6YDEwMTQxYCkKKyAgKENvbnRyaWJ1dGVkIGJ5IE1hdHRoaWFzIEZ1Y2hzLCB1cGRhdGVkIGJ5IFRpYWdvIEdvbsOnYWx2ZXMgaW4gOmlzc3VlOmAxMDE0MWAuKQogCiAqIFRoZSA6Y2xhc3M6YH5zb2NrZXQuc29ja2V0YCBjbGFzcyBub3cgc3VwcG9ydHMgdGhlIFBGX1JEUyBwcm90b2NvbCBmYW1pbHkKICAgKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUmVsaWFibGVfRGF0YWdyYW1fU29ja2V0cyBhbmQKLSAgaHR0cDovL29zcy5vcmFjbGUuY29tL3Byb2plY3RzL3Jkcy8pLgorICBodHRwczovL29zcy5vcmFjbGUuY29tL3Byb2plY3RzL3Jkcy8pLgogCiAqIFRoZSA6Y2xhc3M6YH5zb2NrZXQuc29ja2V0YCBjbGFzcyBub3cgc3VwcG9ydHMgdGhlIGBgUEZfU1lTVEVNYGAgcHJvdG9jb2wKICAgZmFtaWx5IG9uIE9TIFguICAoQ29udHJpYnV0ZWQgYnkgTWljaGFlbCBHb2RlcmJhdWVyIGluIDppc3N1ZTpgMTM3NzdgLikKQEAgLTE5MDgsNyArMTkwOCw3IEBACiA6bWV0aDpgfnNvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZpY2VfYWN0aW9uc2AgdGhhdCBpcyBjYWxsZWQgYnkgdGhlCiA6bWV0aDpgfnNvY2tldHNlcnZlci5CYXNlU2VydmVyLnNlcnZlX2ZvcmV2ZXJgIG1ldGhvZCBpbiB0aGUgc2VydmljZSBsb29wLgogOmNsYXNzOmB+c29ja2V0c2VydmVyLkZvcmtpbmdNaXhJbmAgbm93IHVzZXMgdGhpcyB0byBjbGVhbiB1cCB6b21iaWUKLWNoaWxkIHByb2Nlc2VzLiAgKENvbnRyaWJ1dGVkIGJ5IEp1c3RpbiBXYXJrZW50aW4gaW4gOmlzc3VlOmAxMTEwOWAuKQorY2hpbGQgcHJvY2Vzc2VzLiAgKENvbnRyaWJ1dGVkIGJ5IEp1c3RpbiBXYXJrZW50aW4gaW4gOmlzc3VlOmAxMTEwOWAuKQogCiAKIHNxbGl0ZTMKQEAgLTE5MjksMzcgKzE5MjksMzcgQEAKICAgICBwc2V1ZG8tcmFuZG9tIGJ5dGVzLgogICAqIDpmdW5jOmB+c3NsLlJBTkRfcHNldWRvX2J5dGVzYDogZ2VuZXJhdGUgcHNldWRvLXJhbmRvbSBieXRlcy4KIAotICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmAxMjA0OWApCisgIChDb250cmlidXRlZCBieSBWaWN0b3IgU3Rpbm5lciBpbiA6aXNzdWU6YDEyMDQ5YC4pCiAKICogVGhlIDptb2Q6YHNzbGAgbW9kdWxlIG5vdyBleHBvc2VzIGEgZmluZXItZ3JhaW5lZCBleGNlcHRpb24gaGllcmFyY2h5CiAgIGluIG9yZGVyIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGluc3BlY3QgdGhlIHZhcmlvdXMga2luZHMgb2YgZXJyb3JzLgotICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxMTE4M2ApCisgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDExMTgzYC4pCiAKICogOm1ldGg6YH5zc2wuU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW5gIG5vdyBhY2NlcHRzIGEgKnBhc3N3b3JkKiBhcmd1bWVudAogICB0byBiZSB1c2VkIGlmIHRoZSBwcml2YXRlIGtleSBpcyBlbmNyeXB0ZWQuCi0gIChDb250cmlidXRlZCBieSBBZGFtIFNpbXBraW5zIGluIDppc3N1ZTpgMTI4MDNgKQorICAoQ29udHJpYnV0ZWQgYnkgQWRhbSBTaW1wa2lucyBpbiA6aXNzdWU6YDEyODAzYC4pCiAKICogRGlmZmllLUhlbGxtYW4ga2V5IGV4Y2hhbmdlLCBib3RoIHJlZ3VsYXIgYW5kIEVsbGlwdGljIEN1cnZlLWJhc2VkLCBpcwogICBub3cgc3VwcG9ydGVkIHRocm91Z2ggdGhlIDptZXRoOmB+c3NsLlNTTENvbnRleHQubG9hZF9kaF9wYXJhbXNgIGFuZAogICA6bWV0aDpgfnNzbC5TU0xDb250ZXh0LnNldF9lY2RoX2N1cnZlYCBtZXRob2RzLgotICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxMzYyNmAgYW5kIDppc3N1ZTpgMTM2MjdgKQorICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxMzYyNmAgYW5kIDppc3N1ZTpgMTM2MjdgLikKIAogKiBTU0wgc29ja2V0cyBoYXZlIGEgbmV3IDptZXRoOmB+c3NsLlNTTFNvY2tldC5nZXRfY2hhbm5lbF9iaW5kaW5nYCBtZXRob2QKICAgYWxsb3dpbmcgdGhlIGltcGxlbWVudGF0aW9uIG9mIGNlcnRhaW4gYXV0aGVudGljYXRpb24gbWVjaGFuaXNtcyBzdWNoIGFzCi0gIFNDUkFNLVNIQS0xLVBMVVMuICAoQ29udHJpYnV0ZWQgYnkgSmFjZWsgS29uaWVjem55IGluIDppc3N1ZTpgMTI1NTFgKQorICBTQ1JBTS1TSEEtMS1QTFVTLiAgKENvbnRyaWJ1dGVkIGJ5IEphY2VrIEtvbmllY3pueSBpbiA6aXNzdWU6YDEyNTUxYC4pCiAKICogWW91IGNhbiBxdWVyeSB0aGUgU1NMIGNvbXByZXNzaW9uIGFsZ29yaXRobSB1c2VkIGJ5IGFuIFNTTCBzb2NrZXQsIHRoYW5rcwogICB0byBpdHMgbmV3IDptZXRoOmB+c3NsLlNTTFNvY2tldC5jb21wcmVzc2lvbmAgbWV0aG9kLiAgVGhlIG5ldyBhdHRyaWJ1dGUKICAgOmF0dHI6YH5zc2wuT1BfTk9fQ09NUFJFU1NJT05gIGNhbiBiZSB1c2VkIHRvIGRpc2FibGUgY29tcHJlc3Npb24uCi0gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDEzNjM0YCkKKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTM2MzRgLikKIAogKiBTdXBwb3J0IGhhcyBiZWVuIGFkZGVkIGZvciB0aGUgTmV4dCBQcm9jb3RvbCBOZWdvdGlhdGlvbiBleHRlbnNpb24gdXNpbmcKICAgdGhlIDptZXRoOmBzc2wuU1NMQ29udGV4dC5zZXRfbnBuX3Byb3RvY29sc2AgbWV0aG9kLgotICAoQ29udHJpYnV0ZWQgYnkgQ29saW4gTWFyYyBpbiA6aXNzdWU6YDE0MjA0YCkKKyAgKENvbnRyaWJ1dGVkIGJ5IENvbGluIE1hcmMgaW4gOmlzc3VlOmAxNDIwNGAuKQogCiAqIFNTTCBlcnJvcnMgY2FuIG5vdyBiZSBpbnRyb3NwZWN0ZWQgbW9yZSBlYXNpbHkgdGhhbmtzIHRvCiAgIDphdHRyOmB+c3NsLlNTTEVycm9yLmxpYnJhcnlgIGFuZCA6YXR0cjpgfnNzbC5TU0xFcnJvci5yZWFzb25gIGF0dHJpYnV0ZXMuCi0gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE0ODM3YCkKKyAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTQ4MzdgLikKIAogKiBUaGUgOmZ1bmM6YH5zc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZWAgZnVuY3Rpb24gbm93IHN1cHBvcnRzIElQdjYuCiAgIChDb250cmlidXRlZCBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkgaW4gOmlzc3VlOmAxMTgxMWAuKQpAQCAtMTk3Niw3ICsxOTc2LDcgQEAKIDpmdW5jOmBzdGF0LmZpbGVtb2RlYC4gSXQgY2FuIGJlIHVzZWQgdG8gY29udmVydCBhIGZpbGUncyBtb2RlIHRvIGEgc3RyaW5nIG9mCiB0aGUgZm9ybSAnLXJ3eHJ3eHJ3eCcuCiAKLShDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDE0ODA3YCkKKyhDb250cmlidXRlZCBieSBHaWFtcGFvbG8gUm9kb2zDoCBpbiA6aXNzdWU6YDE0ODA3YC4pCiAKIAogc3RydWN0CkBAIC0yMDM1LDggKzIwMzUsOCBAQAogOmNsYXNzOmB0aHJlYWRpbmcuQ29uZGl0aW9uYCwgOmNsYXNzOmB0aHJlYWRpbmcuU2VtYXBob3JlYCwKIDpjbGFzczpgdGhyZWFkaW5nLkJvdW5kZWRTZW1hcGhvcmVgLCA6Y2xhc3M6YHRocmVhZGluZy5FdmVudGAsIGFuZAogOmNsYXNzOmB0aHJlYWRpbmcuVGltZXJgLCBhbGwgb2Ygd2hpY2ggdXNlZCB0byBiZSBmYWN0b3J5IGZ1bmN0aW9ucyByZXR1cm5pbmcgYQotY2xhc3MgaW5zdGFuY2UsIGFyZSBub3cgY2xhc3NlcyBhbmQgbWF5IGJlIHN1YmNsYXNzZWQuIChDb250cmlidXRlZCBieSDDiXJpYwotQXJhdWpvIGluIDppc3N1ZTpgMTA5NjhgKS4KK2NsYXNzIGluc3RhbmNlLCBhcmUgbm93IGNsYXNzZXMgYW5kIG1heSBiZSBzdWJjbGFzc2VkLiAgKENvbnRyaWJ1dGVkIGJ5IMOJcmljCitBcmF1am8gaW4gOmlzc3VlOmAxMDk2OGAuKQogCiBUaGUgOmNsYXNzOmB0aHJlYWRpbmcuVGhyZWFkYCBjb25zdHJ1Y3RvciBub3cgYWNjZXB0cyBhIGBgZGFlbW9uYGAga2V5d29yZAogYXJndW1lbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgaW5oZXJpdGluZyB0aGUgYGBkZWFtb25gYCBmbGFnCkBAIC0yMDY2LDcgKzIwNjYsNyBAQAogCiAqIDpmdW5jOmB+dGltZS5jbG9ja19nZXRyZXNgLCA6ZnVuYzpgfnRpbWUuY2xvY2tfZ2V0dGltZWAgYW5kCiAgIDpmdW5jOmB+dGltZS5jbG9ja19zZXR0aW1lYCBmdW5jdGlvbnMgd2l0aCBgYENMT0NLX3h4eGBgIGNvbnN0YW50cy4KLSAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMTAyNzhgKQorICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmAxMDI3OGAuKQogCiBUbyBpbXByb3ZlIGNyb3NzIHBsYXRmb3JtIGNvbnNpc3RlbmN5LCA6ZnVuYzpgfnRpbWUuc2xlZXBgIG5vdyByYWlzZXMgYQogOmV4YzpgVmFsdWVFcnJvcmAgd2hlbiBwYXNzZWQgYSBuZWdhdGl2ZSBzbGVlcCB2YWx1ZS4gIFByZXZpb3VzbHkgdGhpcyB3YXMgYW4KQEAgLTIwODAsNyArMjA4MCw3IEBACiAoOmlzc3VlOmAxNDM4NmApCiAKIAotVGhlIG5ldyBmdW5jdGlvbnMgYHR5cGVzLm5ld19jbGFzc2AgYW5kIGB0eXBlcy5wcmVwYXJlX2NsYXNzYCBwcm92aWRlIHN1cHBvcnQKK1RoZSBuZXcgZnVuY3Rpb25zIDpmdW5jOmB0eXBlcy5uZXdfY2xhc3NgIGFuZCA6ZnVuYzpgdHlwZXMucHJlcGFyZV9jbGFzc2AgcHJvdmlkZSBzdXBwb3J0CiBmb3IgUEVQIDMxMTUgY29tcGxpYW50IGR5bmFtaWMgdHlwZSBjcmVhdGlvbi4gKDppc3N1ZTpgMTQ1ODhgKQogCiAKQEAgLTIwOTAsNyArMjA5MCw3IEBACiA6bWV0aDpgLmFzc2VydFJhaXNlc2AsIDptZXRoOmAuYXNzZXJ0UmFpc2VzUmVnZXhgLCA6bWV0aDpgLmFzc2VydFdhcm5zYCwgYW5kCiA6bWV0aDpgLmFzc2VydFdhcm5zUmVnZXhgIG5vdyBhY2NlcHQgYSBrZXl3b3JkIGFyZ3VtZW50ICptc2cqIHdoZW4gdXNlZCBhcwogY29udGV4dCBtYW5hZ2Vycy4gIChDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgYW5kIFdpbnN0b24gRXdlcnQgaW4KLTppc3N1ZTpgMTA3NzVgKQorOmlzc3VlOmAxMDc3NWAuKQogCiA6bWV0aDpgdW5pdHRlc3QuVGVzdENhc2UucnVuYCBub3cgcmV0dXJucyB0aGUgOmNsYXNzOmB+dW5pdHRlc3QuVGVzdFJlc3VsdGAKIG9iamVjdC4KQEAgLTIxMDMsNyArMjEwMyw3IEBACiB1c2VkIGJ5IDptZXRoOmB+dXJsbGliLnJlcXVlc3QuUmVxdWVzdC5nZXRfbWV0aG9kYCB0byBkZXRlcm1pbmUgd2hhdCBIVFRQIG1ldGhvZAogc2hvdWxkIGJlIHVzZWQuICBGb3IgZXhhbXBsZSwgdGhpcyB3aWxsIHNlbmQgYSBgYCdIRUFEJ2BgIHJlcXVlc3Q6OgogCi0gICA+Pj4gdXJsb3BlbihSZXF1ZXN0KCdodHRwOi8vd3d3LnB5dGhvbi5vcmcnLCBtZXRob2Q9J0hFQUQnKSkKKyAgID4+PiB1cmxvcGVuKFJlcXVlc3QoJ2h0dHBzOi8vd3d3LnB5dGhvbi5vcmcnLCBtZXRob2Q9J0hFQUQnKSkKIAogKDppc3N1ZTpgMTY3MzAwN2ApCiAKQEAgLTIxMTcsNyArMjExNyw3IEBACiBhbmQgdGhlIGdlbmVyaWMgbGF1bmNoZXJzIDpwcm9ncmFtOmB4ZGctb3BlbmAsIGZyb20gdGhlIEZyZWVEZXNrdG9wLm9yZwogcHJvamVjdCwgYW5kIDpwcm9ncmFtOmBndmZzLW9wZW5gLCB3aGljaCBpcyB0aGUgZGVmYXVsdCBVUkkgaGFuZGxlciBmb3IgR05PTUUKIDMuICAoVGhlIGZvcm1lciBjb250cmlidXRlZCBieSBBcm5hdWQgQ2FsbWV0dGVzIGluIDppc3N1ZTpgMTM2MjBgLCB0aGUgbGF0dGVyCi1ieSBNYXR0aGlhcyBLbG9zZSBpbiA6aXNzdWU6YDE0NDkzYCkKK2J5IE1hdHRoaWFzIEtsb3NlIGluIDppc3N1ZTpgMTQ0OTNgLikKIAogCiB4bWwuZXRyZWUuRWxlbWVudFRyZWUKQEAgLTIxNTUsMTIgKzIxNTUsMTIgQEAKICAgKiBlbmNvZGUgYW4gQVNDSUkgc3RyaW5nIHRvIFVURi04IGRvZXNuJ3QgbmVlZCB0byBlbmNvZGUgY2hhcmFjdGVycyBhbnltb3JlLAogICAgIHRoZSBVVEYtOCByZXByZXNlbnRhdGlvbiBpcyBzaGFyZWQgd2l0aCB0aGUgQVNDSUkgcmVwcmVzZW50YXRpb24KICAgKiB0aGUgVVRGLTggZW5jb2RlciBoYXMgYmVlbiBvcHRpbWl6ZWQKLSAgKiByZXBlYXRpbmcgYSBzaW5nbGUgQVNDSUkgbGV0dGVyIGFuZCBnZXR0aW5nIGEgc3Vic3RyaW5nIG9mIGEgQVNDSUkgc3RyaW5ncworICAqIHJlcGVhdGluZyBhIHNpbmdsZSBBU0NJSSBsZXR0ZXIgYW5kIGdldHRpbmcgYSBzdWJzdHJpbmcgb2YgYW4gQVNDSUkgc3RyaW5nCiAgICAgaXMgNCB0aW1lcyBmYXN0ZXIKIAogKiBVVEYtOCBpcyBub3cgMnggdG8gNHggZmFzdGVyLiAgVVRGLTE2IGVuY29kaW5nIGlzIG5vdyB1cCB0byAxMHggZmFzdGVyLgogCi0gIChjb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthLCA6aXNzdWU6YDE0NjI0YCwgOmlzc3VlOmAxNDczOGAgYW5kCisgIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthLCA6aXNzdWU6YDE0NjI0YCwgOmlzc3VlOmAxNDczOGAgYW5kCiAgIDppc3N1ZTpgMTUwMjZgLikKIAogCkBAIC0yMzYwLDcgKzIzNjAsNyBAQAogICBieXRlY29kZSBmaWxlLCBtYWtlIHN1cmUgdG8gY2FsbCA6ZnVuYzpgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzYCB0byBjbGVhcgogICBvdXQgdGhlIGNhY2hlIGZvciB0aGUgZmluZGVycyB0byBub3RpY2UgdGhlIG5ldyBmaWxlLgogCi0qIDpleGM6YEltcG9ydEVycm9yYCBub3cgdXNlcyB0aGUgZnVsbCBuYW1lIG9mIHRoZSBtb2R1bGUgdGhhdCB3YXMgYXR0ZW1wZWQgdG8KKyogOmV4YzpgSW1wb3J0RXJyb3JgIG5vdyB1c2VzIHRoZSBmdWxsIG5hbWUgb2YgdGhlIG1vZHVsZSB0aGF0IHdhcyBhdHRlbXB0ZWQgdG8KICAgYmUgaW1wb3J0ZWQuIERvY3Rlc3RzIHRoYXQgY2hlY2sgSW1wb3J0RXJyb3JzJyBtZXNzYWdlIHdpbGwgbmVlZCB0byBiZQogICB1cGRhdGVkIHRvIHVzZSB0aGUgZnVsbCBuYW1lIG9mIHRoZSBtb2R1bGUgaW5zdGVhZCBvZiBqdXN0IHRoZSB0YWlsIG9mIHRoZQogICBuYW1lLgpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3LzMuNC5yc3QgYi9Eb2Mvd2hhdHNuZXcvMy40LnJzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDliYzBkCi0tLSAvZGV2L251bGwKKysrIGIvRG9jL3doYXRzbmV3LzMuNC5yc3QKQEAgLTAsMCArMSwyNTQ1IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFdoYXQncyBOZXcgSW4gUHl0aG9uIDMuNAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCis6QXV0aG9yOiBSLiBEYXZpZCBNdXJyYXkgPHJkbXVycmF5QGJpdGRhbmNlLmNvbT4gKEVkaXRvcikKKworLi4gUnVsZXMgZm9yIG1haW50ZW5hbmNlOgorCisgICAqIEFueW9uZSBjYW4gYWRkIHRleHQgdG8gdGhpcyBkb2N1bWVudCwgYnV0IHRoZSBtYWludGFpbmVyIHJlc2VydmVzIHRoZQorICAgcmlnaHQgdG8gcmV3cml0ZSBhbnkgYWRkaXRpb25zLiBJbiBwYXJ0aWN1bGFyLCBmb3Igb2JzY3VyZSBvciBlc290ZXJpYworICAgZmVhdHVyZXMsIHRoZSBtYWludGFpbmVyIG1heSByZWR1Y2UgYW55IGFkZGl0aW9uIHRvIGEgc2ltcGxlIHJlZmVyZW5jZSB0bworICAgdGhlIG5ldyBkb2N1bWVudGF0aW9uIHJhdGhlciB0aGFuIGV4cGxhaW5pbmcgdGhlIGZlYXR1cmUgaW5saW5lLgorCisgICAqIFdoaWxlIHRoZSBtYWludGFpbmVyIHdpbGwgcGVyaW9kaWNhbGx5IGdvIHRocm91Z2ggTWlzYy9ORVdTCisgICBhbmQgYWRkIGNoYW5nZXMsIGl0J3MgYmVzdCBub3QgdG8gcmVseSBvbiB0aGlzLiBXZSBrbm93IGZyb20gZXhwZXJpZW5jZQorICAgdGhhdCBhbnkgY2hhbmdlcyB0aGF0IGFyZW4ndCBpbiB0aGUgV2hhdCdzIE5ldyBkb2N1bWVudGF0aW9uIGFyb3VuZCB0aGUKKyAgIHRpbWUgb2YgdGhlIG9yaWdpbmFsIHJlbGVhc2Ugd2lsbCByZW1haW4gbGFyZ2VseSB1bmtub3duIHRvIHRoZSBjb21tdW5pdHkKKyAgIGZvciB5ZWFycywgZXZlbiBpZiB0aGV5J3JlIGFkZGVkIGxhdGVyLiBXZSBhbHNvIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQKKyAgIG90aGVyIHByaW9yaXRpZXMgY2FuIGFyaXNlLCBhbmQgdGhlIG1haW50YWluZXIgd2lsbCBydW4gb3V0IG9mIHRpbWUgdG8gZG8KKyAgIHVwZGF0ZXMgLS0gaW4gc3VjaCBjYXNlcywgZW5kIHVzZXJzIHdpbGwgYmUgbXVjaCBiZXR0ZXIgc2VydmVkIGJ5IHBhcnRpYWwKKyAgIG5vdGlmaWNhdGlvbnMgdGhhdCBhdCBsZWFzdCBnaXZlIGEgaGludCBhYm91dCBuZXcgZmVhdHVyZXMgdG8KKyAgIGludmVzdGlnYXRlLgorCisgICAqIFRoaXMgaXMgbm90IGEgY29tcGxldGUgbGlzdCBvZiBldmVyeSBzaW5nbGUgY2hhbmdlOyBjb21wbGV0ZW5lc3MKKyAgIGlzIHRoZSBwdXJwb3NlIG9mIE1pc2MvTkVXUy4gVGhlIFdoYXQncyBOZXcgc2hvdWxkIGZvY3VzIG9uIGNoYW5nZXMgdGhhdAorICAgYXJlIHZpc2libGUgdG8gUHl0aG9uICp1c2VycyogYW5kIHRoYXQgKnJlcXVpcmUqIGEgZmVhdHVyZSByZWxlYXNlIChpLmUuCisgICBtb3N0IGJ1ZyBmaXhlcyBzaG91bGQgb25seSBiZSByZWNvcmRlZCBpbiBNaXNjL05FV1MpCisKKyAgICogUEVQcyBzaG91bGQgbm90IGJlIG1hcmtlZCBGaW5hbCB1bnRpbCB0aGV5IGhhdmUgYW4gZW50cnkgaW4gV2hhdCdzIE5ldy4KKyAgIEEgcGxhY2Vob2xkZXIgZW50cnkgdGhhdCBpcyBqdXN0IGEgc2VjdGlvbiBoZWFkZXIgYW5kIGEgbGluayB0byB0aGUgUEVQCisgICAoZS5nICI6cGVwOmAzOTdgIGhhcyBiZWVuIGltcGxlbWVudGVkIikgaXMgYWNjZXB0YWJsZS4gSWYgYSBQRVAgaGFzIGJlZW4KKyAgIGltcGxlbWVudGVkIGFuZCBub3RlZCBpbiBXaGF0J3MgTmV3LCBkb24ndCBmb3JnZXQgdG8gbWFyayBpdCBhcyBGaW5hbCEKKworICAgKiBJZiB5b3Ugd2FudCB0byBkcmF3IHlvdXIgbmV3IHRleHQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGUKKyAgIG1haW50YWluZXIsIGFkZCAnWFhYJyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBwYXJhZ3JhcGggb3IKKyAgIHNlY3Rpb24uCisKKyAgICogSXQncyBPSyB0byBhZGQganVzdCBhIHZlcnkgYnJpZWYgbm90ZSBhYm91dCBhIGNoYW5nZS4gIEZvcgorICAgZXhhbXBsZTogIlRoZSA6cmVmOmB+c29ja2V0LnRyYW5zbW9ncmlmeSgpYCBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gdGhlCisgICA6bW9kOmBzb2NrZXRgIG1vZHVsZS4iICBUaGUgbWFpbnRhaW5lciB3aWxsIHJlc2VhcmNoIHRoZSBjaGFuZ2UgYW5kCisgICB3cml0ZSB0aGUgbmVjZXNzYXJ5IHRleHQgKGlmIGFwcHJvcHJpYXRlKS4gVGhlIGFkdmFudGFnZSBvZiBkb2luZyB0aGlzCisgICBpcyB0aGF0IGV2ZW4gaWYgbm8gbW9yZSBkZXNjcmlwdGl2ZSB0ZXh0IGlzIGV2ZXIgYWRkZWQsIHJlYWRlcnMgd2lsbCBhdAorICAgbGVhc3QgaGF2ZSBhIG5vdGlmaWNhdGlvbiB0aGF0IHRoZSBuZXcgZmVhdHVyZSBleGlzdHMgYW5kIGEgbGluayB0byB0aGUKKyAgIHJlbGV2YW50IGRvY3VtZW50YXRpb24uCisKKyAgICogWW91IGNhbiBjb21tZW50IG91dCB5b3VyIGFkZGl0aW9ucyBpZiB5b3UgbGlrZSwgYnV0IGl0J3Mgbm90CisgICBuZWNlc3NhcnkgKGVzcGVjaWFsbHkgd2hlbiBhIGZpbmFsIHJlbGVhc2UgaXMgc29tZSBtb250aHMgYXdheSkuCisKKyAgICogQ3JlZGl0IHRoZSBhdXRob3Igb2YgYSBwYXRjaCBvciBidWdmaXguICAgSnVzdCB0aGUgbmFtZSBpcworICAgc3VmZmljaWVudDsgdGhlIGUtbWFpbCBhZGRyZXNzIGlzbid0IG5lY2Vzc2FyeS4KKworICAgKiBJdCdzIGhlbHBmdWwgdG8gYWRkIHRoZSBidWcvcGF0Y2ggbnVtYmVyIGFzIGEgY29tbWVudDoKKworICAgVGhlIDpyZWY6YH5zb2NrZXQudHJhbnNtb2dyaWZ5KClgIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byB0aGUKKyAgIDptb2Q6YHNvY2tldGAgbW9kdWxlLiAgKENvbnRyaWJ1dGVkIGJ5IFAuWS4gRGV2ZWxvcGVyIGluIDppc3N1ZTpgMTIzNDVgLikKKworICAgVGhpcyBzYXZlcyB0aGUgbWFpbnRhaW5lciB0aGUgZWZmb3J0IG9mIGdvaW5nIHRocm91Z2ggdGhlIE1lcmN1cmlhbCBsb2cKKyAgIHdoZW4gcmVzZWFyY2hpbmcgYSBjaGFuZ2UuCisKKyAgICogQ3Jvc3MgcmVmZXJlbmNpbmcgdGlwOiA6cmVmOmBtb2QuYXR0cmAgd2lsbCBkaXNwbGF5IGFzIGBgbW9kLmF0dHJgYCwKKyAgIHdoaWxlIDpyZWY6YH5tb2QuYXR0cmAgd2lsbCBkaXNwbGF5IGFzIGBgYXR0cmBgLgorCitUaGlzIGFydGljbGUgZXhwbGFpbnMgdGhlIG5ldyBmZWF0dXJlcyBpbiBQeXRob24gMy40LCBjb21wYXJlZCB0byAzLjMuCitQeXRob24gMy40IHdhcyByZWxlYXNlZCBvbiBNYXJjaCAxNiwgMjAxNC4gIEZvciBmdWxsIGRldGFpbHMsIHNlZSB0aGUKK2BjaGFuZ2Vsb2cgPGh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMuNC93aGF0c25ldy9jaGFuZ2Vsb2cuaHRtbD5gXy4KKworCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDI5YCAtLSBQeXRob24gMy40IFJlbGVhc2UgU2NoZWR1bGUKKworCisKK1N1bW1hcnkgLS0gUmVsZWFzZSBIaWdobGlnaHRzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisuLiBUaGlzIHNlY3Rpb24gc2luZ2xlcyBvdXQgdGhlIG1vc3QgaW1wb3J0YW50IGNoYW5nZXMgaW4gUHl0aG9uIDMuNC4KKyAgIEJyZXZpdHkgaXMga2V5LgorCitOZXcgc3ludGF4IGZlYXR1cmVzOgorCisqIE5vIG5ldyBzeW50YXggZmVhdHVyZXMgd2VyZSBhZGRlZCBpbiBQeXRob24gMy40LgorCitPdGhlciBuZXcgZmVhdHVyZXM6CisKKyogOnJlZjpgcGlwIHNob3VsZCBhbHdheXMgYmUgYXZhaWxhYmxlIDx3aGF0c25ldy1wZXAtNDUzPmAgKDpwZXA6YDQ1M2ApLgorKiA6cmVmOmBOZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgYXJlIG5vbi1pbmhlcml0YWJsZSA8d2hhdHNuZXctcGVwLTQ0Nj5gCisgICg6cGVwOmA0NDZgKS4KKyogY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgOnJlZjpgaXNvbGF0ZWQgbW9kZSA8d2hhdHNuZXctaXNvbGF0ZWQtbW9kZT5gCisgICg6aXNzdWU6YDE2NDk5YCkuCisqIDpyZWY6YGltcHJvdmVtZW50cyBpbiB0aGUgaGFuZGxpbmcgb2YgY29kZWNzIDxjb2RlYy1oYW5kbGluZy1pbXByb3ZlbWVudHM+YAorICB0aGF0IGFyZSBub3QgdGV4dCBlbmNvZGluZ3MgKG11bHRpcGxlIGlzc3VlcykuCisqIDpyZWY6YEEgTW9kdWxlU3BlYyBUeXBlIDx3aGF0c25ldy1wZXAtNDUxPmAgZm9yIHRoZSBJbXBvcnQgU3lzdGVtCisgICg6cGVwOmA0NTFgKS4gIChBZmZlY3RzIGltcG9ydGVyIGF1dGhvcnMuKQorKiBUaGUgOm1vZDpgbWFyc2hhbGAgZm9ybWF0IGhhcyBiZWVuIG1hZGUgOnJlZjpgbW9yZSBjb21wYWN0IGFuZCBlZmZpY2llbnQKKyAgPHdoYXRzbmV3LW1hcnNoYWwtMz5gICg6aXNzdWU6YDE2NDc1YCkuCisKK05ldyBsaWJyYXJ5IG1vZHVsZXM6CisKKyogOm1vZDpgYXN5bmNpb2A6IDpyZWY6YE5ldyBwcm92aXNpb25hbCBBUEkgZm9yIGFzeW5jaHJvbm91cyBJTworICA8d2hhdHNuZXctYXN5bmNpbz5gICg6cGVwOmAzMTU2YCkuCisqIDptb2Q6YGVuc3VyZXBpcGA6IDpyZWY6YEJvb3RzdHJhcHBpbmcgdGhlIHBpcCBpbnN0YWxsZXIgPHdoYXRzbmV3LWVuc3VyZXBpcD5gCisgICg6cGVwOmA0NTNgKS4KKyogOm1vZDpgZW51bWA6IDpyZWY6YFN1cHBvcnQgZm9yIGVudW1lcmF0aW9uIHR5cGVzIDx3aGF0c25ldy1lbnVtPmAKKyAgKDpwZXA6YDQzNWApLgorKiA6bW9kOmBwYXRobGliYDogOnJlZjpgT2JqZWN0LW9yaWVudGVkIGZpbGVzeXN0ZW0gcGF0aHMgPHdoYXRzbmV3LXBhdGhsaWI+YAorICAoOnBlcDpgNDI4YCkuCisqIDptb2Q6YHNlbGVjdG9yc2A6IDpyZWY6YEhpZ2gtbGV2ZWwgYW5kIGVmZmljaWVudCBJL08gbXVsdGlwbGV4aW5nCisgIDx3aGF0c25ldy1zZWxlY3RvcnM+YCwgYnVpbHQgdXBvbiB0aGUgOm1vZDpgc2VsZWN0YCBtb2R1bGUgcHJpbWl0aXZlcyAocGFydAorICBvZiA6cGVwOmAzMTU2YCkuCisqIDptb2Q6YHN0YXRpc3RpY3NgOiBBIGJhc2ljIDpyZWY6YG51bWVyaWNhbGx5IHN0YWJsZSBzdGF0aXN0aWNzIGxpYnJhcnkKKyAgPHdoYXRzbmV3LXN0YXRpc3RpY3M+YCAoOnBlcDpgNDUwYCkuCisqIDptb2Q6YHRyYWNlbWFsbG9jYDogOnJlZjpgVHJhY2UgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucworICA8d2hhdHNuZXctdHJhY2VtYWxsb2M+YCAoOnBlcDpgNDU0YCkuCisKK1NpZ25pZmljYW50bHkgaW1wcm92ZWQgbGlicmFyeSBtb2R1bGVzOgorCisqIDpyZWY6YFNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyA8d2hhdHNuZXctc2luZ2xlZGlzcGF0Y2g+YCBpbgorICA6bW9kOmBmdW5jdG9vbHNgICg6cGVwOmA0NDNgKS4KKyogTmV3IDptb2Q6YHBpY2tsZWAgOnJlZjpgcHJvdG9jb2wgNCA8d2hhdHNuZXctcHJvdG9jb2wtND5gICg6cGVwOmAzMTU0YCkuCisqIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agbm93IGhhcyA6cmVmOmBhbiBvcHRpb24gdG8gYXZvaWQgdXNpbmcgb3MuZm9yaworICBvbiBVbml4IDx3aGF0c25ldy1tdWx0aXByb2Nlc3Npbmctbm8tZm9yaz5gICg6aXNzdWU6YDg3MTNgKS4KKyogOm1vZDpgZW1haWxgIGhhcyBhIG5ldyBzdWJtb2R1bGUsIDptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAsIGFuZAorICBhIG5ldyA6bW9kOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBzdWJjbGFzcworICAoOmNsYXNzOmB+ZW1haWwuY29udGVudG1hbmFnZXIuRW1haWxNZXNzYWdlYCkgdGhhdCA6cmVmOmBzaW1wbGlmeSBNSU1FCisgIGhhbmRsaW5nIDx3aGF0c25ld19lbWFpbF9jb250ZW50bWFuYWdlcj5gICg6aXNzdWU6YDE4ODkxYCkuCisqIFRoZSA6bW9kOmBpbnNwZWN0YCBhbmQgOm1vZDpgcHlkb2NgIG1vZHVsZXMgYXJlIG5vdyBjYXBhYmxlIG9mCisgIGNvcnJlY3QgaW50cm9zcGVjdGlvbiBvZiBhIG11Y2ggd2lkZXIgdmFyaWV0eSBvZiBjYWxsYWJsZSBvYmplY3RzLAorICB3aGljaCBpbXByb3ZlcyB0aGUgb3V0cHV0IG9mIHRoZSBQeXRob24gOmZ1bmM6YGhlbHBgIHN5c3RlbS4KKyogVGhlIDptb2Q6YGlwYWRkcmVzc2AgbW9kdWxlIEFQSSBoYXMgYmVlbiBkZWNsYXJlZCBzdGFibGUKKworU2VjdXJpdHkgaW1wcm92ZW1lbnRzOgorCisqIDpyZWY6YFNlY3VyZSBhbmQgaW50ZXJjaGFuZ2VhYmxlIGhhc2ggYWxnb3JpdGhtIDx3aGF0c25ldy1wZXAtNDU2PmAKKyAgKDpwZXA6YDQ1NmApLgorKiA6cmVmOmBNYWtlIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyBub24taW5oZXJpdGFibGUgPHdoYXRzbmV3LXBlcC00NDY+YAorICAoOnBlcDpgNDQ2YCkgdG8gYXZvaWQgbGVha2luZyBmaWxlIGRlc2NyaXB0b3JzIHRvIGNoaWxkIHByb2Nlc3Nlcy4KKyogTmV3IGNvbW1hbmQgbGluZSBvcHRpb24gZm9yIDpyZWY6YGlzb2xhdGVkIG1vZGUgPHdoYXRzbmV3LWlzb2xhdGVkLW1vZGU+YCwKKyAgKDppc3N1ZTpgMTY0OTlgKS4KKyogOm1vZDpgbXVsdGlwcm9jZXNzaW5nYCBub3cgaGFzIDpyZWY6YGFuIG9wdGlvbiB0byBhdm9pZCB1c2luZyBvcy5mb3JrCisgIG9uIFVuaXggPHdoYXRzbmV3LW11bHRpcHJvY2Vzc2luZy1uby1mb3JrPmAuICAqc3Bhd24qIGFuZCAqZm9ya3NlcnZlciogYXJlCisgIG1vcmUgc2VjdXJlIGJlY2F1c2UgdGhleSBhdm9pZCBzaGFyaW5nIGRhdGEgd2l0aCBjaGlsZCBwcm9jZXNzZXMuCisqIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgY2hpbGQgcHJvY2Vzc2VzIG9uIFdpbmRvd3Mgbm8gbG9uZ2VyIGluaGVyaXQKKyAgYWxsIG9mIHRoZSBwYXJlbnQncyBpbmhlcml0YWJsZSBoYW5kbGVzLCBvbmx5IHRoZSBuZWNlc3Nhcnkgb25lcy4KKyogQSBuZXcgOmZ1bmM6YGhhc2hsaWIucGJrZGYyX2htYWNgIGZ1bmN0aW9uIHByb3ZpZGVzCisgIHRoZSBgUEtDUyM1IHBhc3N3b3JkLWJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIDIKKyAgPGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUEJLREYyPmBfLgorKiA6cmVmOmBUTFN2MS4xIGFuZCBUTFN2MS4yIHN1cHBvcnQgPHdoYXRzbmV3LXRscy0xMS0xMj5gIGZvciA6bW9kOmBzc2xgLgorKiA6cmVmOmBSZXRyaWV2aW5nIGNlcnRpZmljYXRlcyBmcm9tIHRoZSBXaW5kb3dzIHN5c3RlbSBjZXJ0IHN0b3JlIHN1cHBvcnQKKyAgPHdoYXRzbmV3MzQtd2luLWNlcnQtc3RvcmU+YCBmb3IgOm1vZDpgc3NsYC4KKyogOnJlZjpgU2VydmVyLXNpZGUgU05JIChTZXJ2ZXIgTmFtZSBJbmRpY2F0aW9uKSBzdXBwb3J0CisgIDx3aGF0c25ldzM0LXNuaT5gIGZvciA6bW9kOmBzc2xgLgorKiBUaGUgOmNsYXNzOmBzc2wuU1NMQ29udGV4dGAgY2xhc3MgaGFzIGEgOnJlZjpgbG90IG9mIGltcHJvdmVtZW50cworICA8d2hhdHNuZXczNC1zc2xjb250ZXh0PmAuCisqIEFsbCBtb2R1bGVzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IHRoYXQgc3VwcG9ydCBTU0wgbm93IHN1cHBvcnQgc2VydmVyCisgIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiwgaW5jbHVkaW5nIGhvc3RuYW1lIG1hdGNoaW5nCisgICg6ZnVuYzpgc3NsLm1hdGNoX2hvc3RuYW1lYCkgYW5kIENSTHMgKENlcnRpZmljYXRlIFJldm9jYXRpb24gbGlzdHMsIHNlZQorICA6ZnVuYzpgc3NsLlNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYCkuCisKK0NQeXRob24gaW1wbGVtZW50YXRpb24gaW1wcm92ZW1lbnRzOgorCisqIDpyZWY6YFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbiA8d2hhdHNuZXctcGVwLTQ0Mj5gICg6cGVwOmA0NDJgKS4KKyogTGV2ZXJhZ2luZyA6cGVwOmA0NDJgLCBpbiBtb3N0IGNhc2VzIDpyZWY6YG1vZHVsZSBnbG9iYWxzIGFyZSBubyBsb25nZXIgc2V0CisgIHRvIE5vbmUgZHVyaW5nIGZpbmFsaXphdGlvbiA8d2hhdHNuZXctcGVwLTQ0Mj5gICg6aXNzdWU6YDE4MjE0YCkuCisqIDpyZWY6YENvbmZpZ3VyYWJsZSBtZW1vcnkgYWxsb2NhdG9ycyA8d2hhdHNuZXctcGVwLTQ0NT5gICg6cGVwOmA0NDVgKS4KKyogOnJlZjpgQXJndW1lbnQgQ2xpbmljIDx3aGF0c25ldy1wZXAtNDM2PmAgKDpwZXA6YDQzNmApLgorCitQbGVhc2UgcmVhZCBvbiBmb3IgYSBjb21wcmVoZW5zaXZlIGxpc3Qgb2YgdXNlci1mYWNpbmcgY2hhbmdlcywgaW5jbHVkaW5nIG1hbnkKK290aGVyIHNtYWxsZXIgaW1wcm92ZW1lbnRzLCBDUHl0aG9uIG9wdGltaXphdGlvbnMsIGRlcHJlY2F0aW9ucywgYW5kIHBvdGVudGlhbAorcG9ydGluZyBpc3N1ZXMuCisKKworCitOZXcgRmVhdHVyZXMKKz09PT09PT09PT09PQorCisuLiBfd2hhdHNuZXctcGVwLTQ1MzoKKworUEVQIDQ1MzogRXhwbGljaXQgQm9vdHN0cmFwcGluZyBvZiBQSVAgaW4gUHl0aG9uIEluc3RhbGxhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0Jvb3RzdHJhcHBpbmcgcGlwIEJ5IERlZmF1bHQKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworVGhlIG5ldyA6bW9kOmBlbnN1cmVwaXBgIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0NTNgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitjcm9zcy1wbGF0Zm9ybSBtZWNoYW5pc20gdG8gYm9vdHN0cmFwIHRoZSBwaXAgaW5zdGFsbGVyIGludG8gUHl0aG9uCitpbnN0YWxsYXRpb25zIGFuZCB2aXJ0dWFsIGVudmlyb25tZW50cy4gVGhlIHZlcnNpb24gb2YgYGBwaXBgYCBpbmNsdWRlZAord2l0aCBQeXRob24gMy40LjAgaXMgYGBwaXBgYCAxLjUuNCwgYW5kIGZ1dHVyZSAzLjQueCBtYWludGVuYW5jZSByZWxlYXNlcword2lsbCB1cGRhdGUgdGhlIGJ1bmRsZWQgdmVyc2lvbiB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYGBwaXBgYCB0aGF0IGlzCithdmFpbGFibGUgYXQgdGhlIHRpbWUgb2YgY3JlYXRpbmcgdGhlIHJlbGVhc2UgY2FuZGlkYXRlLgorCitCeSBkZWZhdWx0LCB0aGUgY29tbWFuZHMgYGBwaXBYYGAgYW5kIGBgcGlwWC5ZYGAgd2lsbCBiZSBpbnN0YWxsZWQgb24gYWxsCitwbGF0Zm9ybXMgKHdoZXJlIFguWSBzdGFuZHMgZm9yIHRoZSB2ZXJzaW9uIG9mIHRoZSBQeXRob24gaW5zdGFsbGF0aW9uKSwKK2Fsb25nIHdpdGggdGhlIGBgcGlwYGAgUHl0aG9uIHBhY2thZ2UgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE9uIFdpbmRvd3MgYW5kCitpbiB2aXJ0dWFsIGVudmlyb25tZW50cyBvbiBhbGwgcGxhdGZvcm1zLCB0aGUgdW52ZXJzaW9uZWQgYGBwaXBgYCBjb21tYW5kCit3aWxsIGFsc28gYmUgaW5zdGFsbGVkLiBPbiBvdGhlciBwbGF0Zm9ybXMsIHRoZSBzeXN0ZW0gd2lkZSB1bnZlcnNpb25lZAorYGBwaXBgYCBjb21tYW5kIHR5cGljYWxseSByZWZlcnMgdG8gdGhlIHNlcGFyYXRlbHkgaW5zdGFsbGVkIFB5dGhvbiAyCit2ZXJzaW9uLgorCitUaGUgOnJlZjpgcHl2ZW52IDxzY3JpcHRzLXB5dmVudj5gIGNvbW1hbmQgbGluZSB1dGlsaXR5IGFuZCB0aGUgOm1vZDpgdmVudmAKK21vZHVsZSBtYWtlIHVzZSBvZiB0aGUgOm1vZDpgZW5zdXJlcGlwYCBtb2R1bGUgdG8gbWFrZSBgYHBpcGBgIHJlYWRpbHkKK2F2YWlsYWJsZSBpbiB2aXJ0dWFsIGVudmlyb25tZW50cy4gV2hlbiB1c2luZyB0aGUgY29tbWFuZCBsaW5lIHV0aWxpdHksCitgYHBpcGBgIGlzIGluc3RhbGxlZCBieSBkZWZhdWx0LCB3aGlsZSB3aGVuIHVzaW5nIHRoZSA6bW9kOmB2ZW52YCBtb2R1bGUKKzpyZWY6YHZlbnYtYXBpYCBpbnN0YWxsYXRpb24gb2YgYGBwaXBgYCBtdXN0IGJlIHJlcXVlc3RlZCBleHBsaWNpdGx5LgorCitGb3IgQ1B5dGhvbiA6cmVmOmBzb3VyY2UgYnVpbGRzIG9uIFBPU0lYIHN5c3RlbXMgPGJ1aWxkaW5nLXB5dGhvbi1vbi11bml4PmAsCit0aGUgYGBtYWtlIGluc3RhbGxgYCBhbmQgYGBtYWtlIGFsdGluc3RhbGxgYCBjb21tYW5kcyBib290c3RyYXAgYGBwaXBgYCBieQorZGVmYXVsdC4gIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBjb250cm9sbGVkIHRocm91Z2ggY29uZmlndXJlIG9wdGlvbnMsIGFuZAorb3ZlcnJpZGRlbiB0aHJvdWdoIE1ha2VmaWxlIG9wdGlvbnMuCisKK09uIFdpbmRvd3MgYW5kIE1hYyBPUyBYLCB0aGUgQ1B5dGhvbiBpbnN0YWxsZXJzIG5vdyBkZWZhdWx0IHRvIGluc3RhbGxpbmcKK2BgcGlwYGAgYWxvbmcgd2l0aCBDUHl0aG9uIGl0c2VsZiAodXNlcnMgbWF5IG9wdCBvdXQgb2YgaW5zdGFsbGluZyBpdAorZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcykuIFdpbmRvdyB1c2VycyB3aWxsIG5lZWQgdG8gb3B0IGluIHRvIHRoZQorYXV0b21hdGljIGBgUEFUSGBgIG1vZGlmaWNhdGlvbnMgdG8gaGF2ZSBgYHBpcGBgIGF2YWlsYWJsZSBmcm9tIHRoZSBjb21tYW5kCitsaW5lIGJ5IGRlZmF1bHQsIG90aGVyd2lzZSBpdCBjYW4gc3RpbGwgYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgUHl0aG9uCitsYXVuY2hlciBmb3IgV2luZG93cyBhcyBgYHB5IC1tIHBpcGBgLgorCitBcyBgZGlzY3Vzc2VkIGluIHRoZSBQRVBgX18sIHBsYXRmb3JtIHBhY2thZ2VycyBtYXkgY2hvb3NlIG5vdCB0byBpbnN0YWxsCit0aGVzZSBjb21tYW5kcyBieSBkZWZhdWx0LCBhcyBsb25nIGFzLCB3aGVuIGludm9rZWQsIHRoZXkgcHJvdmlkZSBjbGVhciBhbmQKK3NpbXBsZSBkaXJlY3Rpb25zIG9uIGhvdyB0byBpbnN0YWxsIHRoZW0gb24gdGhhdCBwbGF0Zm9ybSAodXN1YWxseSB1c2luZwordGhlIHN5c3RlbSBwYWNrYWdlIG1hbmFnZXIpLgorCitfXyBodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDUzLyNyZWNvbW1lbmRhdGlvbnMtZm9yLWRvd25zdHJlYW0tZGlzdHJpYnV0b3JzCisKKy4uIG5vdGU6OgorCisgICBUbyBhdm9pZCBjb25mbGljdHMgYmV0d2VlbiBwYXJhbGxlbCBQeXRob24gMiBhbmQgUHl0aG9uIDMgaW5zdGFsbGF0aW9ucywKKyAgIG9ubHkgdGhlIHZlcnNpb25lZCBgYHBpcDNgYCBhbmQgYGBwaXAzLjRgYCBjb21tYW5kcyBhcmUgYm9vdHN0cmFwcGVkIGJ5CisgICBkZWZhdWx0IHdoZW4gYGBlbnN1cmVwaXBgYCBpcyBpbnZva2VkIGRpcmVjdGx5IC0gdGhlIGBgLS1kZWZhdWx0LXBpcGBgCisgICBvcHRpb24gaXMgbmVlZGVkIHRvIGFsc28gcmVxdWVzdCB0aGUgdW52ZXJzaW9uZWQgYGBwaXBgYCBjb21tYW5kLgorICAgYGBweXZlbnZgYCBhbmQgdGhlIFdpbmRvd3MgaW5zdGFsbGVyIGVuc3VyZSB0aGF0IHRoZSB1bnF1YWxpZmllZCBgYHBpcGBgCisgICBjb21tYW5kIGlzIG1hZGUgYXZhaWxhYmxlIGluIHRob3NlIGVudmlyb25tZW50cywgYW5kIGBgcGlwYGAgY2FuIGFsd2F5cyBiZQorICAgaW52b2tlZCB2aWEgdGhlIGBgLW1gYCBzd2l0Y2ggcmF0aGVyIHRoYW4gZGlyZWN0bHkgdG8gYXZvaWQgYW1iaWd1aXR5IG9uCisgICBzeXN0ZW1zIHdpdGggbXVsdGlwbGUgUHl0aG9uIGluc3RhbGxhdGlvbnMuCisKKworRG9jdW1lbnRhdGlvbiBDaGFuZ2VzCit+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKworQXMgcGFydCBvZiB0aGlzIGNoYW5nZSwgdGhlIDpyZWY6YGluc3RhbGxpbmctaW5kZXhgIGFuZAorOnJlZjpgZGlzdHJpYnV0aW5nLWluZGV4YCBzZWN0aW9ucyBvZiB0aGUgZG9jdW1lbnRhdGlvbiBoYXZlIGJlZW4KK2NvbXBsZXRlbHkgcmVkZXNpZ25lZCBhcyBzaG9ydCBnZXR0aW5nIHN0YXJ0ZWQgYW5kIEZBUSBkb2N1bWVudHMuIE1vc3QKK3BhY2thZ2luZyBkb2N1bWVudGF0aW9uIGhhcyBub3cgYmVlbiBtb3ZlZCBvdXQgdG8gdGhlIFB5dGhvbiBQYWNrYWdpbmcKK0F1dGhvcml0eSBtYWludGFpbmVkIGBQeXRob24gUGFja2FnaW5nIFVzZXIgR3VpZGUKKzxodHRwczovL3BhY2thZ2luZy5weXRob24ub3JnPmBfXyBhbmQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGluZGl2aWR1YWwKK3Byb2plY3RzLgorCitIb3dldmVyLCBhcyB0aGlzIG1pZ3JhdGlvbiBpcyBjdXJyZW50bHkgc3RpbGwgaW5jb21wbGV0ZSwgdGhlIGxlZ2FjeQordmVyc2lvbnMgb2YgdGhvc2UgZ3VpZGVzIHJlbWFpbmluZyBhdmFpbGFibGUgYXMgOnJlZjpgaW5zdGFsbC1pbmRleGAKK2FuZCA6cmVmOmBkaXN0dXRpbHMtaW5kZXhgLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDUzYCAtLSBFeHBsaWNpdCBib290c3RyYXBwaW5nIG9mIHBpcCBpbiBQeXRob24gaW5zdGFsbGF0aW9ucworICAgICAgUEVQIHdyaXR0ZW4gYnkgRG9uYWxkIFN0dWZmdCBhbmQgTmljayBDb2dobGFuLCBpbXBsZW1lbnRlZCBieQorICAgICAgRG9uYWxkIFN0dWZmdCwgTmljayBDb2dobGFuLCBNYXJ0aW4gdm9uIEzDtndpcyBhbmQgTmVkIERlaWx5LgorCisKKy4uIF93aGF0c25ldy1wZXAtNDQ2OgorCitQRVAgNDQ2OiBOZXdseSBDcmVhdGVkIEZpbGUgRGVzY3JpcHRvcnMgQXJlIE5vbi1Jbmhlcml0YWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDQ2YCBtYWtlcyBuZXdseSBjcmVhdGVkIGZpbGUgZGVzY3JpcHRvcnMgOnJlZjpgbm9uLWluaGVyaXRhYmxlCis8ZmRfaW5oZXJpdGFuY2U+YC4gIEluIGdlbmVyYWwsIHRoaXMgaXMgdGhlIGJlaGF2aW9yIGFuIGFwcGxpY2F0aW9uIHdpbGwKK3dhbnQ6IHdoZW4gbGF1bmNoaW5nIGEgbmV3IHByb2Nlc3MsIGhhdmluZyBjdXJyZW50bHkgb3BlbiBmaWxlcyBhbHNvCitvcGVuIGluIHRoZSBuZXcgcHJvY2VzcyBjYW4gbGVhZCB0byBhbGwgc29ydHMgb2YgaGFyZCB0byBmaW5kIGJ1Z3MsCithbmQgcG90ZW50aWFsbHkgdG8gc2VjdXJpdHkgaXNzdWVzLgorCitIb3dldmVyLCB0aGVyZSBhcmUgb2NjYXNpb25zIHdoZW4gaW5oZXJpdGFuY2UgaXMgZGVzaXJlZC4gIFRvIHN1cHBvcnQKK3RoZXNlIGNhc2VzLCB0aGUgZm9sbG93aW5nIG5ldyBmdW5jdGlvbnMgYW5kIG1ldGhvZHMgYXJlIGF2YWlsYWJsZToKKworKiA6ZnVuYzpgb3MuZ2V0X2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9pbmhlcml0YWJsZWAKKyogOmZ1bmM6YG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGVgLCA6ZnVuYzpgb3Muc2V0X2hhbmRsZV9pbmhlcml0YWJsZWAKKyogOm1ldGg6YHNvY2tldC5zb2NrZXQuZ2V0X2luaGVyaXRhYmxlYCwgOm1ldGg6YHNvY2tldC5zb2NrZXQuc2V0X2luaGVyaXRhYmxlYAorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQ2YCAtLSBNYWtlIG5ld2x5IGNyZWF0ZWQgZmlsZSBkZXNjcmlwdG9ycyBub24taW5oZXJpdGFibGUKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSBWaWN0b3IgU3Rpbm5lci4KKworCisuLiBfY29kZWMtaGFuZGxpbmctaW1wcm92ZW1lbnRzOgorCitJbXByb3ZlbWVudHMgdG8gQ29kZWMgSGFuZGxpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTaW5jZSBpdCB3YXMgZmlyc3QgaW50cm9kdWNlZCwgdGhlIDptb2Q6YGNvZGVjc2AgbW9kdWxlIGhhcyBhbHdheXMgYmVlbgoraW50ZW5kZWQgdG8gb3BlcmF0ZSBhcyBhIHR5cGUtbmV1dHJhbCBkeW5hbWljIGVuY29kaW5nIGFuZCBkZWNvZGluZworc3lzdGVtLiBIb3dldmVyLCBpdHMgY2xvc2UgY291cGxpbmcgd2l0aCB0aGUgUHl0aG9uIHRleHQgbW9kZWwsIGVzcGVjaWFsbHkKK3RoZSB0eXBlIHJlc3RyaWN0ZWQgY29udmVuaWVuY2UgbWV0aG9kcyBvbiB0aGUgYnVpbHRpbiA6Y2xhc3M6YHN0cmAsCis6Y2xhc3M6YGJ5dGVzYCBhbmQgOmNsYXNzOmBieXRlYXJyYXlgIHR5cGVzLCBoYXMgaGlzdG9yaWNhbGx5IG9ic2N1cmVkIHRoYXQKK2ZhY3QuCisKK0FzIGEga2V5IHN0ZXAgaW4gY2xhcmlmeWluZyB0aGUgc2l0dWF0aW9uLCB0aGUgOm1ldGg6YGNvZGVjcy5lbmNvZGVgIGFuZAorOm1ldGg6YGNvZGVjcy5kZWNvZGVgIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBhcmUgbm93IHByb3Blcmx5IGRvY3VtZW50ZWQgaW4KK1B5dGhvbiAyLjcsIDMuMyBhbmQgMy40LiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSBleGlzdGVkIGluIHRoZSA6bW9kOmBjb2RlY3NgCittb2R1bGUgKGFuZCBoYXZlIGJlZW4gY292ZXJlZCBieSB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlKSBzaW5jZSBQeXRob24gMi40LAorYnV0IHdlcmUgcHJldmlvdXNseSBvbmx5IGRpc2NvdmVyYWJsZSB0aHJvdWdoIHJ1bnRpbWUgaW50cm9zcGVjdGlvbi4KKworVW5saWtlIHRoZSBjb252ZW5pZW5jZSBtZXRob2RzIG9uIDpjbGFzczpgc3RyYCwgOmNsYXNzOmBieXRlc2AgYW5kCis6Y2xhc3M6YGJ5dGVhcnJheWAsIHRoZSA6bW9kOmBjb2RlY3NgIGNvbnZlbmllbmNlIGZ1bmN0aW9ucyBzdXBwb3J0IGFyYml0cmFyeQorY29kZWNzIGluIGJvdGggUHl0aG9uIDIgYW5kIFB5dGhvbiAzLCByYXRoZXIgdGhhbiBiZWluZyBsaW1pdGVkIHRvIFVuaWNvZGUgdGV4dAorZW5jb2RpbmdzIChpbiBQeXRob24gMykgb3IgYGBiYXNlc3RyaW5nYGAgPC0+IGBgYmFzZXN0cmluZ2BgIGNvbnZlcnNpb25zIChpbgorUHl0aG9uIDIpLgorCitJbiBQeXRob24gMy40LCB0aGUgaW50ZXJwcmV0ZXIgaXMgYWJsZSB0byBpZGVudGlmeSB0aGUga25vd24gbm9uLXRleHQKK2VuY29kaW5ncyBwcm92aWRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBhbmQgZGlyZWN0IHVzZXJzIHRvd2FyZHMgdGhlc2UKK2dlbmVyYWwgcHVycG9zZSBjb252ZW5pZW5jZSBmdW5jdGlvbnMgd2hlbiBhcHByb3ByaWF0ZTo6CisKKyAgICA+Pj4gYiJhYmNkZWYiLmRlY29kZSgiaGV4IikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIExvb2t1cEVycm9yOiAnaGV4JyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyB1c2UgY29kZWNzLmRlY29kZSgpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzCisKKyAgICA+Pj4gImhlbGxvIi5lbmNvZGUoInJvdDEzIikKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIExvb2t1cEVycm9yOiAncm90MTMnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7IHVzZSBjb2RlY3MuZW5jb2RlKCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MKKworICAgID4+PiBvcGVuKCJmb28udHh0IiwgZW5jb2Rpbmc9ImhleCIpCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBMb29rdXBFcnJvcjogJ2hleCcgaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgdXNlIGNvZGVjcy5vcGVuKCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MKKworSW4gYSByZWxhdGVkIGNoYW5nZSwgd2hlbmV2ZXIgaXQgaXMgZmVhc2libGUgd2l0aG91dCBicmVha2luZyBiYWNrd2FyZHMKK2NvbXBhdGliaWxpdHksIGV4Y2VwdGlvbnMgcmFpc2VkIGR1cmluZyBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgb3BlcmF0aW9ucworYXJlIHdyYXBwZWQgaW4gYSBjaGFpbmVkIGV4Y2VwdGlvbiBvZiB0aGUgc2FtZSB0eXBlIHRoYXQgbWVudGlvbnMgdGhlCituYW1lIG9mIHRoZSBjb2RlYyByZXNwb25zaWJsZSBmb3IgcHJvZHVjaW5nIHRoZSBlcnJvcjo6CisKKyAgICA+Pj4gaW1wb3J0IGNvZGVjcworCisgICAgPj4+IGNvZGVjcy5kZWNvZGUoYiJhYmNkZWZnaCIsICJoZXgiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9lbmNvZGluZ3MvaGV4X2NvZGVjLnB5IiwgbGluZSAyMCwgaW4gaGV4X2RlY29kZQorICAgICAgICByZXR1cm4gKGJpbmFzY2lpLmEyYl9oZXgoaW5wdXQpLCBsZW4oaW5wdXQpKQorICAgIGJpbmFzY2lpLkVycm9yOiBOb24taGV4YWRlY2ltYWwgZGlnaXQgZm91bmQKKworICAgIFRoZSBhYm92ZSBleGNlcHRpb24gd2FzIHRoZSBkaXJlY3QgY2F1c2Ugb2YgdGhlIGZvbGxvd2luZyBleGNlcHRpb246CisKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgorICAgIGJpbmFzY2lpLkVycm9yOiBkZWNvZGluZyB3aXRoICdoZXgnIGNvZGVjIGZhaWxlZCAoRXJyb3I6IE5vbi1oZXhhZGVjaW1hbCBkaWdpdCBmb3VuZCkKKworICAgID4+PiBjb2RlY3MuZW5jb2RlKCJoZWxsbyIsICJiejIiKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIEZpbGUgIi91c3IvbGliL3B5dGhvbjMuNC9lbmNvZGluZ3MvYnoyX2NvZGVjLnB5IiwgbGluZSAxNywgaW4gYnoyX2VuY29kZQorICAgICAgICByZXR1cm4gKGJ6Mi5jb21wcmVzcyhpbnB1dCksIGxlbihpbnB1dCkpCisgICAgICBGaWxlICIvdXNyL2xpYi9weXRob24zLjQvYnoyLnB5IiwgbGluZSA0OTgsIGluIGNvbXByZXNzCisgICAgICAgIHJldHVybiBjb21wLmNvbXByZXNzKGRhdGEpICsgY29tcC5mbHVzaCgpCisgICAgVHlwZUVycm9yOiAnc3RyJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgaW50ZXJmYWNlCisKKyAgICBUaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlIG9mIHRoZSBmb2xsb3dpbmcgZXhjZXB0aW9uOgorCisgICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgorICAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT4KKyAgICBUeXBlRXJyb3I6IGVuY29kaW5nIHdpdGggJ2J6MicgY29kZWMgZmFpbGVkIChUeXBlRXJyb3I6ICdzdHInIGRvZXMgbm90IHN1cHBvcnQgdGhlIGJ1ZmZlciBpbnRlcmZhY2UpCisKK0ZpbmFsbHksIGFzIHRoZSBleGFtcGxlcyBhYm92ZSBzaG93LCB0aGVzZSBpbXByb3ZlbWVudHMgaGF2ZSBwZXJtaXR0ZWQKK3RoZSByZXN0b3JhdGlvbiBvZiB0aGUgY29udmVuaWVuY2UgYWxpYXNlcyBmb3IgdGhlIG5vbi1Vbmljb2RlIGNvZGVjcyB0aGF0Cit3ZXJlIHRoZW1zZWx2ZXMgcmVzdG9yZWQgaW4gUHl0aG9uIDMuMi4gVGhpcyBtZWFucyB0aGF0IGVuY29kaW5nIGJpbmFyeSBkYXRhCit0byBhbmQgZnJvbSBpdHMgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gKGZvciBleGFtcGxlKSBjYW4gbm93IGJlIHdyaXR0ZW4KK2FzOjoKKworICAgID4+PiBmcm9tIGNvZGVjcyBpbXBvcnQgZW5jb2RlLCBkZWNvZGUKKyAgICA+Pj4gZW5jb2RlKGIiaGVsbG8iLCAiaGV4IikKKyAgICBiJzY4NjU2YzZjNmYnCisgICAgPj4+IGRlY29kZShiIjY4NjU2YzZjNmYiLCAiaGV4IikKKyAgICBiJ2hlbGxvJworCitUaGUgYmluYXJ5IGFuZCB0ZXh0IHRyYW5zZm9ybXMgcHJvdmlkZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkgYXJlIGRldGFpbGVkCitpbiA6cmVmOmBiaW5hcnktdHJhbnNmb3Jtc2AgYW5kIDpyZWY6YHRleHQtdHJhbnNmb3Jtc2AuCisKKyhDb250cmlidXRlZCBieSBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmA3NDc1YCwgOmlzc3VlOmAxNzgyN2AsCis6aXNzdWU6YDE3ODI4YCBhbmQgOmlzc3VlOmAxOTYxOWAuKQorCisKKy4uIF93aGF0c25ldy1wZXAtNDUxOgorCitQRVAgNDUxOiBBIE1vZHVsZVNwZWMgVHlwZSBmb3IgdGhlIEltcG9ydCBTeXN0ZW0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NTFgIHByb3ZpZGVzIGFuIGVuY2Fwc3VsYXRpb24gb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IGEgbW9kdWxlIHRoYXQgdGhlCitpbXBvcnQgbWFjaGluZXJ5IHdpbGwgdXNlIHRvIGxvYWQgaXQgKHRoYXQgaXMsIGEgbW9kdWxlIHNwZWNpZmljYXRpb24pLiAgVGhpcworaGVscHMgc2ltcGxpZnkgYm90aCB0aGUgaW1wb3J0IGltcGxlbWVudGF0aW9uIGFuZCBzZXZlcmFsIGltcG9ydC1yZWxhdGVkIEFQSXMuCitUaGUgY2hhbmdlIGlzIGFsc28gYSBzdGVwcGluZyBzdG9uZSBmb3IgYHNldmVyYWwgZnV0dXJlIGltcG9ydC1yZWxhdGVkCitpbXByb3ZlbWVudHNgX18uCisKK19fIGh0dHBzOi8vbWFpbC5weXRob24ub3JnL3BpcGVybWFpbC9weXRob24tZGV2LzIwMTMtTm92ZW1iZXIvMTMwMTExLmh0bWwKKworVGhlIHB1YmxpYy1mYWNpbmcgY2hhbmdlcyBmcm9tIHRoZSBQRVAgYXJlIGVudGlyZWx5IGJhY2t3YXJkLWNvbXBhdGlibGUuCitGdXJ0aGVybW9yZSwgdGhleSBzaG91bGQgYmUgdHJhbnNwYXJlbnQgdG8gZXZlcnlvbmUgYnV0IGltcG9ydGVyIGF1dGhvcnMuICBLZXkKK2ZpbmRlciBhbmQgbG9hZGVyIG1ldGhvZHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQsIGJ1dCB0aGV5IHdpbGwgY29udGludWUgd29ya2luZy4KK05ldyBpbXBvcnRlcnMgc2hvdWxkIHVzZSB0aGUgbmV3IG1ldGhvZHMgZGVzY3JpYmVkIGluIHRoZSBQRVAuICBFeGlzdGluZworaW1wb3J0ZXJzIHNob3VsZCBiZSB1cGRhdGVkIHRvIGltcGxlbWVudCB0aGUgbmV3IG1ldGhvZHMuICBTZWUgdGhlCis6cmVmOmBkZXByZWNhdGVkLTMuNGAgc2VjdGlvbiBmb3IgYSBsaXN0IG9mIG1ldGhvZHMgdGhhdCBzaG91bGQgYmUgcmVwbGFjZWQgYW5kCit0aGVpciByZXBsYWNlbWVudHMuCisKKworT3RoZXIgTGFuZ3VhZ2UgQ2hhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb21lIHNtYWxsZXIgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb3JlIFB5dGhvbiBsYW5ndWFnZSBhcmU6CisKKyogVW5pY29kZSBkYXRhYmFzZSB1cGRhdGVkIHRvIFVDRCB2ZXJzaW9uIDYuMy4KKworKiA6ZnVuYzpgbWluYCBhbmQgOmZ1bmM6YG1heGAgbm93IGFjY2VwdCBhICpkZWZhdWx0KiBrZXl3b3JkLW9ubHkgYXJndW1lbnQgdGhhdAorICBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB2YWx1ZSB0aGV5IHJldHVybiBpZiB0aGUgaXRlcmFibGUgdGhleSBhcmUKKyAgZXZhbHVhdGluZyBoYXMgbm8gZWxlbWVudHMuICAoQ29udHJpYnV0ZWQgYnkgSnVsaWFuIEJlcm1hbiBpbgorICA6aXNzdWU6YDE4MTExYC4pCisKKyogTW9kdWxlIG9iamVjdHMgYXJlIG5vdyA6bW9kOmB3ZWFrcmVmYCdhYmxlLgorCisqIE1vZHVsZSBgYF9fZmlsZV9fYGAgYXR0cmlidXRlcyAoYW5kIHJlbGF0ZWQgdmFsdWVzKSBzaG91bGQgbm93IGFsd2F5cworICBjb250YWluIGFic29sdXRlIHBhdGhzIGJ5IGRlZmF1bHQsIHdpdGggdGhlIHNvbGUgZXhjZXB0aW9uIG9mCisgIGBgX19tYWluX18uX19maWxlX19gYCB3aGVuIGEgc2NyaXB0IGhhcyBiZWVuIGV4ZWN1dGVkIGRpcmVjdGx5IHVzaW5nCisgIGEgcmVsYXRpdmUgcGF0aC4gIChDb250cmlidXRlZCBieSBCcmV0dCBDYW5ub24gaW4gOmlzc3VlOmAxODQxNmAuKQorCisqIEFsbCB0aGUgVVRGLVwqIGNvZGVjcyAoZXhjZXB0IFVURi03KSBub3cgcmVqZWN0IHN1cnJvZ2F0ZXMgZHVyaW5nIGJvdGgKKyAgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHVubGVzcyB0aGUgYGBzdXJyb2dhdGVwYXNzYGAgZXJyb3IgaGFuZGxlciBpcyB1c2VkLAorICB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIFVURi0xNiBkZWNvZGVyICh3aGljaCBhY2NlcHRzIHZhbGlkIHN1cnJvZ2F0ZSBwYWlycykKKyAgYW5kIHRoZSBVVEYtMTYgZW5jb2RlciAod2hpY2ggcHJvZHVjZXMgdGhlbSB3aGlsZSBlbmNvZGluZyBub24tQk1QIGNoYXJhY3RlcnMpLgorICAoQ29udHJpYnV0ZWQgYnkgVmljdG9yIFN0aW5uZXIsIEthbmctSGFvIChLZW5ueSkgTHUgYW5kIFNlcmhpeSBTdG9yY2hha2EgaW4KKyAgOmlzc3VlOmAxMjg5MmAuKQorCisqIE5ldyBHZXJtYW4gRUJDRElDIDpyZWY6YGNvZGVjIDxzdGFuZGFyZC1lbmNvZGluZ3M+YCBgYGNwMjczYGAuICAoQ29udHJpYnV0ZWQKKyAgYnkgTWljaGFlbCBCaWVyZW5mZWxkIGFuZCBBbmRyZXcgS3VjaGxpbmcgaW4gOmlzc3VlOmAxMDk3Nzk3YC4pCisKKyogTmV3IFVrcmFpbmlhbiA6cmVmOmBjb2RlYyA8c3RhbmRhcmQtZW5jb2RpbmdzPmAgYGBjcDExMjVgYC4gIChDb250cmlidXRlZCBieQorICBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTk2NjhgLikKKworKiA6Y2xhc3M6YGJ5dGVzYC5qb2luKCkgYW5kIDpjbGFzczpgYnl0ZWFycmF5YC5qb2luKCkgbm93IGFjY2VwdCBhcmJpdHJhcnkKKyAgYnVmZmVyIG9iamVjdHMgYXMgYXJndW1lbnRzLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluCisgIDppc3N1ZTpgMTU5NThgLikKKworKiBUaGUgOmNsYXNzOmBpbnRgIGNvbnN0cnVjdG9yIG5vdyBhY2NlcHRzIGFueSBvYmplY3QgdGhhdCBoYXMgYW4gYGBfX2luZGV4X19gYAorICBtZXRob2QgZm9yIGl0cyAqYmFzZSogYXJndW1lbnQuICAoQ29udHJpYnV0ZWQgYnkgTWFyayBEaWNraW5zb24gaW4KKyAgOmlzc3VlOmAxNjc3MmAuKQorCisqIEZyYW1lIG9iamVjdHMgbm93IGhhdmUgYSA6ZnVuYzpgfmZyYW1lLmNsZWFyYCBtZXRob2QgdGhhdCBjbGVhcnMgYWxsCisgIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIGZyYW1lLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91CisgIGluIDppc3N1ZTpgMTc5MzRgLikKKworKiA6Y2xhc3M6YG1lbW9yeXZpZXdgIGlzIG5vdyByZWdpc3RlcmVkIGFzIGEgOmNsYXNzOmBTZXF1ZW5jZSA8Y29sbGVjdGlvbnMuYWJjPmAsCisgIGFuZCBzdXBwb3J0cyB0aGUgOmZ1bmM6YHJldmVyc2VkYCBidWlsdGluLiAgKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbgorICBhbmQgQ2xhdWRpdSBQb3BhIGluIDppc3N1ZTpgMTg2OTBgIGFuZCA6aXNzdWU6YDE5MDc4YC4pCisKKyogU2lnbmF0dXJlcyByZXBvcnRlZCBieSA6ZnVuYzpgaGVscGAgaGF2ZSBiZWVuIG1vZGlmaWVkIGFuZCBpbXByb3ZlZCBpbgorICBzZXZlcmFsIGNhc2VzIGFzIGEgcmVzdWx0IG9mIHRoZSBpbnRyb2R1Y3Rpb24gb2YgQXJndW1lbnQgQ2xpbmljIGFuZCBvdGhlcgorICBjaGFuZ2VzIHRvIHRoZSA6bW9kOmBpbnNwZWN0YCBhbmQgOm1vZDpgcHlkb2NgIG1vZHVsZXMuCisKKyogOm1ldGg6YH5vYmplY3QuX19sZW5ndGhfaGludF9fYCBpcyBub3cgcGFydCBvZiB0aGUgZm9ybWFsIGxhbmd1YWdlCisgIHNwZWNpZmljYXRpb24gKHNlZSA6cGVwOmA0MjRgKS4gIChDb250cmlidXRlZCBieSBBcm1pbiBSb25hY2hlciBpbgorICA6aXNzdWU6YDE2MTQ4YC4pCisKKworTmV3IE1vZHVsZXMKKz09PT09PT09PT09CisKKworLi4gX3doYXRzbmV3LWFzeW5jaW86CisKK2FzeW5jaW8KKy0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBhc3luY2lvYCBtb2R1bGUgKGRlZmluZWQgaW4gOnBlcDpgMzE1NmApIHByb3ZpZGVzIGEgc3RhbmRhcmQKK3BsdWdnYWJsZSBldmVudCBsb29wIG1vZGVsIGZvciBQeXRob24sIHByb3ZpZGluZyBzb2xpZCBhc3luY2hyb25vdXMgSU8KK3N1cHBvcnQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnksIGFuZCBtYWtpbmcgaXQgZWFzaWVyIGZvciBvdGhlciBldmVudCBsb29wCitpbXBsZW1lbnRhdGlvbnMgdG8gaW50ZXJvcGVyYXRlIHdpdGggdGhlIHN0YW5kYXJkIGxpYnJhcnkgYW5kIGVhY2ggb3RoZXIuCisKK0ZvciBQeXRob24gMy40LCB0aGlzIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgOnRlcm06YHByb3Zpc2lvbmFsIEFQSWAuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTU2YCAtLSBBc3luY2hyb25vdXMgSU8gU3VwcG9ydCBSZWJvb3RlZDogdGhlICJhc3luY2lvIiBNb2R1bGUKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRhdGlvbiBsZWQgYnkgR3VpZG8gdmFuIFJvc3N1bS4KKworCisuLiBfd2hhdHNuZXctZW5zdXJlcGlwOgorCitlbnN1cmVwaXAKKy0tLS0tLS0tLQorCitUaGUgbmV3IDptb2Q6YGVuc3VyZXBpcGAgbW9kdWxlIGlzIHRoZSBwcmltYXJ5IGluZnJhc3RydWN0dXJlIGZvciB0aGUKKzpwZXA6YDQ1M2AgaW1wbGVtZW50YXRpb24uICBJbiB0aGUgbm9ybWFsIGNvdXJzZSBvZiBldmVudHMgZW5kIHVzZXJzIHdpbGwgbm90CituZWVkIHRvIGludGVyYWN0IHdpdGggdGhpcyBtb2R1bGUsIGJ1dCBpdCBjYW4gYmUgdXNlZCB0byBtYW51YWxseSBib290c3RyYXAKK2BgcGlwYGAgaWYgdGhlIGF1dG9tYXRlZCBib290c3RyYXBwaW5nIGludG8gYW4gaW5zdGFsbGF0aW9uIG9yIHZpcnR1YWwKK2Vudmlyb25tZW50IHdhcyBkZWNsaW5lZC4KKworOm1vZDpgZW5zdXJlcGlwYCBpbmNsdWRlcyBhIGJ1bmRsZWQgY29weSBvZiBgYHBpcGBgLCB1cC10by1kYXRlIGFzIG9mIHRoZSBmaXJzdAorcmVsZWFzZSBjYW5kaWRhdGUgb2YgdGhlIHJlbGVhc2Ugb2YgQ1B5dGhvbiB3aXRoIHdoaWNoIGl0IHNoaXBzICh0aGlzIGFwcGxpZXMKK3RvIGJvdGggbWFpbnRlbmFuY2UgcmVsZWFzZXMgYW5kIGZlYXR1cmUgcmVsZWFzZXMpLiAgYGBlbnN1cmVwaXBgYCBkb2VzIG5vdAorYWNjZXNzIHRoZSBpbnRlcm5ldC4gIElmIHRoZSBpbnN0YWxsYXRpb24gaGFzIEludGVybmV0IGFjY2VzcywgYWZ0ZXIKK2BgZW5zdXJlcGlwYGAgaXMgcnVuIHRoZSBidW5kbGVkIGBgcGlwYGAgY2FuIGJlIHVzZWQgdG8gdXBncmFkZSBgYHBpcGBgIHRvIGEKK21vcmUgcmVjZW50IHJlbGVhc2UgdGhhbiB0aGUgYnVuZGxlZCBvbmUuICAoTm90ZSB0aGF0IHN1Y2ggYW4gdXBncmFkZWQgdmVyc2lvbgorb2YgYGBwaXBgYCBpcyBjb25zaWRlcmVkIHRvIGJlIGEgc2VwYXJhdGVseSBpbnN0YWxsZWQgcGFja2FnZSBhbmQgd2lsbCBub3QgYmUKK3JlbW92ZWQgaWYgUHl0aG9uIGlzIHVuaW5zdGFsbGVkLikKKworVGhlIG1vZHVsZSBpcyBuYW1lZCAqZW5zdXJlKlwgcGlwIGJlY2F1c2UgaWYgY2FsbGVkIHdoZW4gYGBwaXBgYCBpcyBhbHJlYWR5CitpbnN0YWxsZWQsIGl0IGRvZXMgbm90aGluZy4gIEl0IGFsc28gaGFzIGFuIGBgLS11cGdyYWRlYGAgb3B0aW9uIHRoYXQgd2lsbAorY2F1c2UgaXQgdG8gaW5zdGFsbCB0aGUgYnVuZGxlZCBjb3B5IG9mIGBgcGlwYGAgaWYgdGhlIGV4aXN0aW5nIGluc3RhbGxlZAordmVyc2lvbiBvZiBgYHBpcGBgIGlzIG9sZGVyIHRoYW4gdGhlIGJ1bmRsZWQgY29weS4KKworCisuLiBfd2hhdHNuZXctZW51bToKKworZW51bQorLS0tLQorCitUaGUgbmV3IDptb2Q6YGVudW1gIG1vZHVsZSAoZGVmaW5lZCBpbiA6cGVwOmA0MzVgKSBwcm92aWRlcyBhIHN0YW5kYXJkCitpbXBsZW1lbnRhdGlvbiBvZiBlbnVtZXJhdGlvbiB0eXBlcywgYWxsb3dpbmcgb3RoZXIgbW9kdWxlcyAoc3VjaCBhcworOm1vZDpgc29ja2V0YCkgdG8gcHJvdmlkZSBtb3JlIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2VzIGFuZCBiZXR0ZXIKK2RlYnVnZ2luZyBzdXBwb3J0IGJ5IHJlcGxhY2luZyBvcGFxdWUgaW50ZWdlciBjb25zdGFudHMgd2l0aCBiYWNrd2FyZHMKK2NvbXBhdGlibGUgZW51bWVyYXRpb24gdmFsdWVzLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDM1YCAtLSBBZGRpbmcgYW4gRW51bSB0eXBlIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeQorICAgICAgUEVQIHdyaXR0ZW4gYnkgQmFycnkgV2Fyc2F3LCBFbGkgQmVuZGVyc2t5IGFuZCBFdGhhbiBGdXJtYW4sCisgICAgICBpbXBsZW1lbnRlZCBieSBFdGhhbiBGdXJtYW4uCisKKworLi4gX3doYXRzbmV3LXBhdGhsaWI6CisKK3BhdGhsaWIKKy0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmBwYXRobGliYCBtb2R1bGUgb2ZmZXJzIGNsYXNzZXMgcmVwcmVzZW50aW5nIGZpbGVzeXN0ZW0gcGF0aHMKK3dpdGggc2VtYW50aWNzIGFwcHJvcHJpYXRlIGZvciBkaWZmZXJlbnQgb3BlcmF0aW5nIHN5c3RlbXMuICBQYXRoIGNsYXNzZXMgYXJlCitkaXZpZGVkIGJldHdlZW4gKnB1cmUgcGF0aHMqLCB3aGljaCBwcm92aWRlIHB1cmVseSBjb21wdXRhdGlvbmFsIG9wZXJhdGlvbnMKK3dpdGhvdXQgSS9PLCBhbmQgKmNvbmNyZXRlIHBhdGhzKiwgd2hpY2ggaW5oZXJpdCBmcm9tIHB1cmUgcGF0aHMgYnV0IGFsc28KK3Byb3ZpZGUgSS9PIG9wZXJhdGlvbnMuCisKK0ZvciBQeXRob24gMy40LCB0aGlzIG1vZHVsZSBpcyBjb25zaWRlcmVkIGEgOnRlcm06YHByb3Zpc2lvbmFsIEFQSWAuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MjhgIC0tIFRoZSBwYXRobGliIG1vZHVsZSAtLSBvYmplY3Qtb3JpZW50ZWQgZmlsZXN5c3RlbSBwYXRocworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisKKy4uIF93aGF0c25ldy1zZWxlY3RvcnM6CisKK3NlbGVjdG9ycworLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgc2VsZWN0b3JzYCBtb2R1bGUgKGNyZWF0ZWQgYXMgcGFydCBvZiBpbXBsZW1lbnRpbmcgOnBlcDpgMzE1NmApCithbGxvd3MgaGlnaC1sZXZlbCBhbmQgZWZmaWNpZW50IEkvTyBtdWx0aXBsZXhpbmcsIGJ1aWx0IHVwb24gdGhlCis6bW9kOmBzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLgorCisKKy4uIF93aGF0c25ldy1zdGF0aXN0aWNzOgorCitzdGF0aXN0aWNzCistLS0tLS0tLS0tCisKK1RoZSBuZXcgOm1vZDpgc3RhdGlzdGljc2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQ1MGApIG9mZmVycyBzb21lIGNvcmUKK3N0YXRpc3RpY3MgZnVuY3Rpb25hbGl0eSBkaXJlY3RseSBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4gVGhpcyBtb2R1bGUKK3N1cHBvcnRzIGNhbGN1bGF0aW9uIG9mIHRoZSBtZWFuLCBtZWRpYW4sIG1vZGUsIHZhcmlhbmNlIGFuZCBzdGFuZGFyZAorZGV2aWF0aW9uIG9mIGEgZGF0YSBzZXJpZXMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTBgIC0tIEFkZGluZyBBIFN0YXRpc3RpY3MgTW9kdWxlIFRvIFRoZSBTdGFuZGFyZCBMaWJyYXJ5CisgICAgICBQRVAgd3JpdHRlbiBhbmQgaW1wbGVtZW50ZWQgYnkgU3RldmVuIEQnQXByYW5vCisKKy4uIF93aGF0c25ldy10cmFjZW1hbGxvYzoKKworCit0cmFjZW1hbGxvYworLS0tLS0tLS0tLS0KKworVGhlIG5ldyA6bW9kOmB0cmFjZW1hbGxvY2AgbW9kdWxlIChkZWZpbmVkIGluIDpwZXA6YDQ1NGApIGlzIGEgZGVidWcgdG9vbCB0bwordHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiBJdCBwcm92aWRlcyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisqIFRyYWNlIHdoZXJlIGFuIG9iamVjdCB3YXMgYWxsb2NhdGVkCisqIFN0YXRpc3RpY3Mgb24gYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MgcGVyIGZpbGVuYW1lIGFuZCBwZXIgbGluZSBudW1iZXI6CisgIHRvdGFsIHNpemUsIG51bWJlciBhbmQgYXZlcmFnZSBzaXplIG9mIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2tzCisqIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdHdvIHNuYXBzaG90cyB0byBkZXRlY3QgbWVtb3J5IGxlYWtzCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NTRgIC0tIEFkZCBhIG5ldyB0cmFjZW1hbGxvYyBtb2R1bGUgdG8gdHJhY2UgUHl0aG9uIG1lbW9yeSBhbGxvY2F0aW9ucworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyCisKKworCitJbXByb3ZlZCBNb2R1bGVzCis9PT09PT09PT09PT09PT09CisKKworYWJjCistLS0KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmBhYmMuZ2V0X2NhY2hlX3Rva2VuYCBjYW4gYmUgdXNlZCB0byBrbm93IHdoZW4gdG8gaW52YWxpZGF0ZQorY2FjaGVzIHRoYXQgYXJlIGFmZmVjdGVkIGJ5IGNoYW5nZXMgaW4gdGhlIG9iamVjdCBncmFwaC4gIChDb250cmlidXRlZAorYnkgxYF1a2FzeiBMYW5nYSBpbiA6aXNzdWU6YDE2ODMyYC4pCisKK05ldyBjbGFzcyA6Y2xhc3M6YH5hYmMuQUJDYCBoYXMgOmNsYXNzOmB+YWJjLkFCQ01ldGFgIGFzIGl0cyBtZXRhIGNsYXNzLgorVXNpbmcgYGBBQkNgYCBhcyBhIGJhc2UgY2xhc3MgaGFzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGVmZmVjdCBhcyBzcGVjaWZ5aW5nCitgYG1ldGFjbGFzcz1hYmMuQUJDTWV0YWBgLCBidXQgaXMgc2ltcGxlciB0byB0eXBlIGFuZCBlYXNpZXIgdG8gcmVhZC4KKyhDb250cmlidXRlZCBieSBCcnVubyBEdXB1aXMgaW4gOmlzc3VlOmAxNjA0OWAuKQorCisKK2FpZmMKKy0tLS0KKworVGhlIDptZXRoOmB+YWlmYy5haWZjLmdldHBhcmFtc2AgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbiBhCitwbGFpbiB0dXBsZS4gIChDb250cmlidXRlZCBieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzgxOGAuKQorCis6ZnVuYzpgYWlmYy5vcGVuYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDogd2hlbiB1c2VkIGluIGEKKzprZXl3b3JkOmB3aXRoYCBibG9jaywgdGhlIDptZXRoOmB+YWlmYy5haWZjLmNsb3NlYCBtZXRob2Qgb2YgdGhlIHJldHVybmVkCitvYmplY3Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gIChDb250cmlidXRlZCBieQorU2VyaGl5IFN0b3JjaGFjaGEgaW4gOmlzc3VlOmAxNjQ4NmAuKQorCitUaGUgOm1ldGg6YH5haWZjLmFpZmMud3JpdGVmcmFtZXNyYXdgIGFuZCA6bWV0aDpgfmFpZmMuYWlmYy53cml0ZWZyYW1lc2AKK21ldGhvZHMgbm93IGFjY2VwdCBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4gIChDb250cmlidXRlZCBieSBTZXJoaXkKK1N0b3JjaGFrYSBpbiA6aXNzdWU6YDgzMTFgLikKKworCithcmdwYXJzZQorLS0tLS0tLS0KKworVGhlIDpjbGFzczpgfmFyZ3BhcnNlLkZpbGVUeXBlYCBjbGFzcyBub3cgYWNjZXB0cyAqZW5jb2RpbmcqIGFuZAorKmVycm9ycyogYXJndW1lbnRzLCB3aGljaCBhcmUgcGFzc2VkIHRocm91Z2ggdG8gOmZ1bmM6YG9wZW5gLiAgKENvbnRyaWJ1dGVkCitieSBMdWNhcyBNYXlzdHJlIGluIDppc3N1ZTpgMTExNzVgLikKKworCithdWRpb29wCistLS0tLS0tCisKKzptb2Q6YGF1ZGlvb3BgIG5vdyBzdXBwb3J0cyAyNC1iaXQgc2FtcGxlcy4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthCitpbiA6aXNzdWU6YDEyODY2YC4pCisKK05ldyA6ZnVuYzpgfmF1ZGlvb3AuYnl0ZXN3YXBgIGZ1bmN0aW9uIGNvbnZlcnRzIGJpZy1lbmRpYW4gc2FtcGxlcyB0bworbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluCis6aXNzdWU6YDE5NjQxYC4pCisKK0FsbCA6bW9kOmBhdWRpb29wYCBmdW5jdGlvbnMgbm93IGFjY2VwdCBhbnkgOnRlcm06YGJ5dGVzLWxpa2Ugb2JqZWN0YC4gIFN0cmluZ3MKK2FyZSBub3QgYWNjZXB0ZWQ6IHRoZXkgZGlkbid0IHdvcmsgYmVmb3JlLCBub3cgdGhleSByYWlzZSBhbiBlcnJvciByaWdodCBhd2F5LgorKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNjY4NWAuKQorCisKK2Jhc2U2NAorLS0tLS0tCisKK1RoZSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgZnVuY3Rpb25zIGluIDptb2Q6YGJhc2U2NGAgbm93IGFjY2VwdCBhbnkKKzp0ZXJtOmBieXRlcy1saWtlIG9iamVjdGAgaW4gY2FzZXMgd2hlcmUgaXQgcHJldmlvdXNseSByZXF1aXJlZCBhCis6Y2xhc3M6YGJ5dGVzYCBvciA6Y2xhc3M6YGJ5dGVhcnJheWAgaW5zdGFuY2UuICAoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuIGluCis6aXNzdWU6YDE3ODM5YC4pCisKK05ldyBmdW5jdGlvbnMgOmZ1bmM6YH5iYXNlNjQuYTg1ZW5jb2RlYCwgOmZ1bmM6YH5iYXNlNjQuYTg1ZGVjb2RlYCwKKzpmdW5jOmB+YmFzZTY0LmI4NWVuY29kZWAsIGFuZCA6ZnVuYzpgfmJhc2U2NC5iODVkZWNvZGVgIHByb3ZpZGUgdGhlIGFiaWxpdHkgdG8KK2VuY29kZSBhbmQgZGVjb2RlIGJpbmFyeSBkYXRhIGZyb20gYW5kIHRvIGBgQXNjaWk4NWBgIGFuZCB0aGUgZ2l0L21lcmN1cmlhbAorYGBCYXNlODVgYCBmb3JtYXRzLCByZXNwZWN0aXZlbHkuICBUaGUgYGBhODVgYCBmdW5jdGlvbnMgaGF2ZSBvcHRpb25zIHRoYXQgY2FuCitiZSB1c2VkIHRvIG1ha2UgdGhlbSBjb21wYXRpYmxlIHdpdGggdGhlIHZhcmlhbnRzIG9mIHRoZSBgYEFzY2lpODVgYCBlbmNvZGluZywKK2luY2x1ZGluZyB0aGUgQWRvYmUgdmFyaWFudC4gIChDb250cmlidXRlZCBieSBNYXJ0aW4gTW9ycmlzb24sIHRoZSBNZXJjdXJpYWwKK3Byb2plY3QsIFNlcmhpeSBTdG9yY2hha2EsIGFuZCBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE3NjE4YC4pCisKKworY29sbGVjdGlvbnMKKy0tLS0tLS0tLS0tCisKK1RoZSA6bWV0aDpgLkNoYWluTWFwLm5ld19jaGlsZGAgbWV0aG9kIG5vdyBhY2NlcHRzIGFuICptKiBhcmd1bWVudCBzcGVjaWZ5aW5nCit0aGUgY2hpbGQgbWFwIHRvIGFkZCB0byB0aGUgY2hhaW4uICBUaGlzIGFsbG93cyBhbiBleGlzdGluZyBtYXBwaW5nIGFuZC9vciBhCitjdXN0b20gbWFwcGluZyB0eXBlIHRvIGJlIHVzZWQgZm9yIHRoZSBjaGlsZC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbgorOmlzc3VlOmAxNjYxM2AuKQorCisKK2NvbG9yc3lzCistLS0tLS0tLQorCitUaGUgbnVtYmVyIG9mIGRpZ2l0cyBpbiB0aGUgY29lZmZpY2llbnRzIGZvciB0aGUgUkdCIC0tLSBZSVEgY29udmVyc2lvbnMgaGF2ZQorYmVlbiBleHBhbmRlZCBzbyB0aGF0IHRoZXkgbWF0Y2ggdGhlIEZDQyBOVFNDIHZlcnNpb25zLiAgVGhlIGNoYW5nZSBpbgorcmVzdWx0cyBzaG91bGQgYmUgbGVzcyB0aGFuIDElIGFuZCBtYXkgYmV0dGVyIG1hdGNoIHJlc3VsdHMgZm91bmQgZWxzZXdoZXJlLgorKENvbnRyaWJ1dGVkIGJ5IEJyaWFuIExhbmRlcnMgYW5kIFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNDMyM2AuKQorCisKK2NvbnRleHRsaWIKKy0tLS0tLS0tLS0KKworVGhlIG5ldyA6Y2xhc3M6YGNvbnRleHRsaWIuc3VwcHJlc3NgIGNvbnRleHQgbWFuYWdlciBoZWxwcyB0byBjbGFyaWZ5IHRoZQoraW50ZW50IG9mIGNvZGUgdGhhdCBkZWxpYmVyYXRlbHkgc3VwcHJlc3NlcyBleGNlcHRpb25zIGZyb20gYSBzaW5nbGUKK3N0YXRlbWVudC4gIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbiA6aXNzdWU6YDE1ODA2YCBhbmQKK1plcm8gUGlyYWV1cyBpbiA6aXNzdWU6YDE5MjY2YC4pCisKK1RoZSBuZXcgOmZ1bmM6YGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0YCBjb250ZXh0IG1hbmFnZXIgbWFrZXMgaXQgZWFzaWVyCitmb3IgdXRpbGl0eSBzY3JpcHRzIHRvIGhhbmRsZSBpbmZsZXhpYmxlIEFQSXMgdGhhdCB3cml0ZSB0aGVpciBvdXRwdXQgdG8KKzpkYXRhOmBzeXMuc3Rkb3V0YCBhbmQgZG9uJ3QgcHJvdmlkZSBhbnkgb3B0aW9ucyB0byByZWRpcmVjdCBpdC4gIFVzaW5nIHRoZQorY29udGV4dCBtYW5hZ2VyLCB0aGUgOmRhdGE6YHN5cy5zdGRvdXRgIG91dHB1dCBjYW4gYmUgcmVkaXJlY3RlZCB0byBhbnkKK290aGVyIHN0cmVhbSBvciwgaW4gY29uanVuY3Rpb24gd2l0aCA6Y2xhc3M6YGlvLlN0cmluZ0lPYCwgdG8gYSBzdHJpbmcuCitUaGUgbGF0dGVyIGNhbiBiZSBlc3BlY2lhbGx5IHVzZWZ1bCwgZm9yIGV4YW1wbGUsIHRvIGNhcHR1cmUgb3V0cHV0Citmcm9tIGEgZnVuY3Rpb24gdGhhdCB3YXMgd3JpdHRlbiB0byBpbXBsZW1lbnQgYSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlLgorSXQgaXMgcmVjb21tZW5kZWQgb25seSBmb3IgdXRpbGl0eSBzY3JpcHRzIGJlY2F1c2UgaXQgYWZmZWN0cyB0aGUKK2dsb2JhbCBzdGF0ZSBvZiA6ZGF0YTpgc3lzLnN0ZG91dGAuICAoQ29udHJpYnV0ZWQgYnkgUmF5bW9uZCBIZXR0aW5nZXIKK2luIDppc3N1ZTpgMTU4MDVgLikKKworVGhlIDptb2Q6YGNvbnRleHRsaWJgIGRvY3VtZW50YXRpb24gaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIGluY2x1ZGUgYQorOnJlZjpgZGlzY3Vzc2lvbiA8c2luZ2xlLXVzZS1yZXVzYWJsZS1hbmQtcmVlbnRyYW50LWNtcz5gIG9mIHRoZQorZGlmZmVyZW5jZXMgYmV0d2VlbiBzaW5nbGUgdXNlLCByZXVzYWJsZSBhbmQgcmVlbnRyYW50IGNvbnRleHQgbWFuYWdlcnMuCisKKworZGJtCistLS0KKworOmZ1bmM6YGRibS5vcGVuYCBvYmplY3RzIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICBXaGVuCit1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgdGhlIGBgY2xvc2VgYCBtZXRob2Qgb2YgdGhlIGRhdGFiYXNlCitvYmplY3Qgd2lsbCBiZSBjYWxsZWQgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gIChDb250cmlidXRlZCBieQorQ2xhdWRpdSBQb3BhIGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmAxOTI4MmAuKQorCisKK2RpcworLS0tCisKK0Z1bmN0aW9ucyA6ZnVuYzpgfmRpcy5zaG93X2NvZGVgLCA6ZnVuYzpgfmRpcy5kaXNgLCA6ZnVuYzpgfmRpcy5kaXN0YmAsIGFuZAorOmZ1bmM6YH5kaXMuZGlzYXNzZW1ibGVgIG5vdyBhY2NlcHQgYSBrZXl3b3JkLW9ubHkgKmZpbGUqIGFyZ3VtZW50IHRoYXQKK2NvbnRyb2xzIHdoZXJlIHRoZXkgd3JpdGUgdGhlaXIgb3V0cHV0LgorCitUaGUgOm1vZDpgZGlzYCBtb2R1bGUgaXMgbm93IGJ1aWx0IGFyb3VuZCBhbiA6Y2xhc3M6YH5kaXMuSW5zdHJ1Y3Rpb25gIGNsYXNzCit0aGF0IHByb3ZpZGVzIG9iamVjdCBvcmllbnRlZCBhY2Nlc3MgdG8gdGhlIGRldGFpbHMgb2YgZWFjaCBpbmRpdmlkdWFsIGJ5dGVjb2RlCitvcGVyYXRpb24uCisKK0EgbmV3IG1ldGhvZCwgOmZ1bmM6YH5kaXMuZ2V0X2luc3RydWN0aW9uc2AsIHByb3ZpZGVzIGFuIGl0ZXJhdG9yIHRoYXQgZW1pdHMKK3RoZSBJbnN0cnVjdGlvbiBzdHJlYW0gZm9yIGEgZ2l2ZW4gcGllY2Ugb2YgUHl0aG9uIGNvZGUuICBUaHVzIGl0IGlzIG5vdworcG9zc2libGUgdG8gd3JpdGUgYSBwcm9ncmFtIHRoYXQgaW5zcGVjdHMgYW5kIG1hbmlwdWxhdGVzIGEgYnl0ZWNvZGUKK29iamVjdCBpbiB3YXlzIGRpZmZlcmVudCBmcm9tIHRob3NlIHByb3ZpZGVkIGJ5IHRoZSA6bW9kOmB+ZGlzYCBtb2R1bGUKK2l0c2VsZi4gIEZvciBleGFtcGxlOjoKKworICAgID4+PiBpbXBvcnQgZGlzCisgICAgPj4+IGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhsYW1iZGEgeDogeCArIDEpOgorICAgIC4uLiAgICAgcHJpbnQoaW5zdHIub3BuYW1lKQorICAgIExPQURfRkFTVAorICAgIExPQURfQ09OU1QKKyAgICBCSU5BUllfQURECisgICAgUkVUVVJOX1ZBTFVFCisKK1RoZSB2YXJpb3VzIGRpc3BsYXkgdG9vbHMgaW4gdGhlIDptb2Q6YGRpc2AgbW9kdWxlIGhhdmUgYmVlbiByZXdyaXR0ZW4gdG8gdXNlCit0aGVzZSBuZXcgY29tcG9uZW50cy4KKworSW4gYWRkaXRpb24sIGEgbmV3IGFwcGxpY2F0aW9uLWZyaWVuZGx5IGNsYXNzIDpjbGFzczpgfmRpcy5CeXRlY29kZWAgcHJvdmlkZXMKK2FuIG9iamVjdC1vcmllbnRlZCBBUEkgZm9yIGluc3BlY3RpbmcgYnl0ZWNvZGUgaW4gYm90aCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtCithbmQgZm9yIGl0ZXJhdGluZyBvdmVyIGluc3RydWN0aW9ucy4gIFRoZSA6Y2xhc3M6YH5kaXMuQnl0ZWNvZGVgIGNvbnN0cnVjdG9yCit0YWtlcyB0aGUgc2FtZSBhcmd1bWVudHMgdGhhdCA6ZnVuYzpgfmRpcy5nZXRfaW5zdHJ1Y3Rpb25gIGRvZXMgKHBsdXMgYW4KK29wdGlvbmFsICpjdXJyZW50X29mZnNldCopLCBhbmQgdGhlIHJlc3VsdGluZyBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIHRvIHByb2R1Y2UKKzpjbGFzczpgfmRpcy5JbnN0cnVjdGlvbmAgb2JqZWN0cy4gIEJ1dCBpdCBhbHNvIGhhcyBhIDptb2Q6YH5kaXMuQnl0ZWNvZGUuZGlzYAorbWV0aG9kLCBlcXVpdmFsZW50IHRvIGNhbGxpbmcgOm1vZDpgfmRpcy5kaXNgIG9uIHRoZSBjb25zdHJ1Y3RvciBhcmd1bWVudCwgYnV0CityZXR1cm5lZCBhcyBhIG11bHRpLWxpbmUgc3RyaW5nOjoKKworICAgID4+PiBieXRlY29kZSA9IGRpcy5CeXRlY29kZShsYW1iZGEgeDogeCArMSwgY3VycmVudF9vZmZzZXQ9MykKKyAgICA+Pj4gZm9yIGluc3RyIGluIGJ5dGVjb2RlOgorICAgIC4uLiAgICAgcHJpbnQoJ3t9ICh7fSknLmZvcm1hdChpbnN0ci5vcG5hbWUsIGluc3RyLm9wY29kZSkpCisgICAgTE9BRF9GQVNUICgxMjQpCisgICAgTE9BRF9DT05TVCAoMTAwKQorICAgIEJJTkFSWV9BREQgKDIzKQorICAgIFJFVFVSTl9WQUxVRSAoODMpCisgICAgPj4+IGJ5dGVjb2RlLmRpcygpLnNwbGl0bGluZXMoKSAgICAgICAjIGRvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRQorICAgIFsnICAxICAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAwICh4KScsCisgICAgICcgICAgICAtLT4gICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpJywKKyAgICAgJyAgICAgICAgICAgICAgNiBCSU5BUllfQUREJywKKyAgICAgJyAgICAgICAgICAgICAgNyBSRVRVUk5fVkFMVUUnXQorCis6Y2xhc3M6YH5kaXMuQnl0ZWNvZGVgIGFsc28gaGFzIGEgY2xhc3MgbWV0aG9kLAorOm1ldGg6YH5kaXMuQnl0ZWNvZGUuZnJvbV90cmFjZWJhY2tgLCB0aGF0IHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIG1hbmlwdWxhdGUgYQordHJhY2ViYWNrICh0aGF0IGlzLCBgYHByaW50KEJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKS5kaXMoKSlgYCBpcyBlcXVpdmFsZW50Cit0byBgYGRpc3RiKHRiKWBgKS4KKworKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiwgUnlhbiBLZWxseSBhbmQgVGhvbWFzIEtsdXl2ZXIgaW4gOmlzc3VlOmAxMTgxNmAKK2FuZCBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzkxNmAuKQorCitOZXcgZnVuY3Rpb24gOmZ1bmM6YH5kaXMuc3RhY2tfZWZmZWN0YCBjb21wdXRlcyB0aGUgZWZmZWN0IG9uIHRoZSBQeXRob24gc3RhY2sKK29mIGEgZ2l2ZW4gb3Bjb2RlIGFuZCBhcmd1bWVudCwgaW5mb3JtYXRpb24gdGhhdCBpcyBub3Qgb3RoZXJ3aXNlIGF2YWlsYWJsZS4KKyhDb250cmlidXRlZCBieSBMYXJyeSBIYXN0aW5ncyBpbiA6aXNzdWU6YDE5NzIyYC4pCisKKworZG9jdGVzdAorLS0tLS0tLQorCitBIG5ldyA6cmVmOmBvcHRpb24gZmxhZyA8ZG9jdGVzdC1vcHRpb25zPmAsIDpkYXRhOmB+ZG9jdGVzdC5GQUlMX0ZBU1RgLCBoYWx0cwordGVzdCBydW5uaW5nIGFzIHNvb24gYXMgdGhlIGZpcnN0IGZhaWx1cmUgaXMgZGV0ZWN0ZWQuICAoQ29udHJpYnV0ZWQgYnkgUi4KK0RhdmlkIE11cnJheSBhbmQgRGFuaWVsIFVyYmFuIGluIDppc3N1ZTpgMTY1MjJgLikKKworVGhlIDptb2Q6YGRvY3Rlc3RgIGNvbW1hbmQgbGluZSBpbnRlcmZhY2Ugbm93IHVzZXMgOm1vZDpgYXJncGFyc2VgLCBhbmQgaGFzIHR3bworbmV3IG9wdGlvbnMsIGBgLW9gYCBhbmQgYGAtZmBgLiAgYGAtb2BgIGFsbG93cyA6cmVmOmBkb2N0ZXN0IG9wdGlvbnMKKzxkb2N0ZXN0LW9wdGlvbnM+YCB0byBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIGBgLWZgYCBpcyBhCitzaG9ydGhhbmQgZm9yIGBgLW8gRkFJTF9GQVNUYGAgKHRvIHBhcmFsbGVsIHRoZSBzaW1pbGFyIG9wdGlvbiBzdXBwb3J0ZWQgYnkgdGhlCis6bW9kOmB1bml0dGVzdGAgQ0xJKS4gIChDb250cmlidXRlZCBieSBSLiBEYXZpZCBNdXJyYXkgaW4gOmlzc3VlOmAxMTM5MGAuKQorCis6bW9kOmBkb2N0ZXN0YCB3aWxsIG5vdyBmaW5kIGRvY3Rlc3RzIGluIGV4dGVuc2lvbiBtb2R1bGUgYGBfX2RvY19fYGAgc3RyaW5ncy4KKyhDb250cmlidXRlZCBieSBaYWNoYXJ5IFdhcmUgaW4gOmlzc3VlOmAzMTU4YC4pCisKKworZW1haWwKKy0tLS0tCisKKzptZXRoOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlLmFzX3N0cmluZ2Agbm93IGFjY2VwdHMgYSAqcG9saWN5KiBhcmd1bWVudCB0bworb3ZlcnJpZGUgdGhlIGRlZmF1bHQgcG9saWN5IG9mIHRoZSBtZXNzYWdlIHdoZW4gZ2VuZXJhdGluZyBhIHN0cmluZworcmVwcmVzZW50YXRpb24gb2YgaXQuICBUaGlzIG1lYW5zIHRoYXQgYGBhc19zdHJpbmdgYCBjYW4gbm93IGJlIHVzZWQgaW4gbW9yZQorY2lyY3Vtc3RhbmNlcywgaW5zdGVhZCBvZiBoYXZpbmcgdG8gY3JlYXRlIGFuZCB1c2UgYSA6bW9kOmB+ZW1haWwuZ2VuZXJhdG9yYCBpbgorb3JkZXIgdG8gcGFzcyBmb3JtYXR0aW5nIHBhcmFtZXRlcnMgdG8gaXRzIGBgZmxhdHRlbmBgIG1ldGhvZC4gIChDb250cmlidXRlZCBieQorUi4gRGF2aWQgTXVycmF5IGluIDppc3N1ZTpgMTg2MDBgLikKKworTmV3IG1ldGhvZCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19ieXRlc2AgYWRkZWQgdG8gcHJvZHVjZSBhIGJ5dGVzCityZXByZXNlbnRhdGlvbiBvZiB0aGUgbWVzc2FnZSBpbiBhIGZhc2hpb24gc2ltaWxhciB0byBob3cgYGBhc19zdHJpbmdgYAorcHJvZHVjZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uICBJdCBkb2VzIG5vdCBhY2NlcHQgdGhlICptYXhoZWFkZXJsZW4qCithcmd1bWVudCwgYnV0IGRvZXMgYWNjZXB0IHRoZSAqdW5peGZyb20qIGFuZCAqcG9saWN5KiBhcmd1bWVudHMuIFRoZQorOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCA6bWV0aDpgfmVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5fX2J5dGVzX19gIG1ldGhvZAorY2FsbHMgaXQsIG1lYW5pbmcgdGhhdCBgYGJ5dGVzKG15bXNnKWBgIHdpbGwgbm93IHByb2R1Y2UgdGhlIGludHVpdGl2ZQorcmVzdWx0OiAgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZnVsbHkgZm9ybWF0dGVkIG1lc3NhZ2UuICAoQ29udHJpYnV0ZWQKK2J5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDE4NjAwYC4pCisKK1RoZSA6bWV0aDpgLk1lc3NhZ2Uuc2V0X3BhcmFtYCBtZXNzYWdlIG5vdyBhY2NlcHRzIGEgKnJlcGxhY2UqIGtleXdvcmQgYXJndW1lbnQuCitXaGVuIHNwZWNpZmllZCwgdGhlIGFzc29jaWF0ZWQgaGVhZGVyIHdpbGwgYmUgdXBkYXRlZCB3aXRob3V0IGNoYW5naW5nCitpdHMgbG9jYXRpb24gaW4gdGhlIGxpc3Qgb2YgaGVhZGVycy4gIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB0aGUgZGVmYXVsdAoraXMgYGBGYWxzZWBgLiAgKENvbnRyaWJ1dGVkIGJ5IFIuIERhdmlkIE11cnJheSBpbiA6aXNzdWU6YDE4ODkxYC4pCisKKworLi4gX3doYXRzbmV3X2VtYWlsX2NvbnRlbnRtYW5hZ2VyOgorCitBIHBhaXIgb2YgbmV3IHN1YmNsYXNzZXMgb2YgOmNsYXNzOmB+ZW1haWwubWVzc2FnZS5NZXNzYWdlYCBoYXZlIGJlZW4gYWRkZWQKKyg6Y2xhc3M6YC5FbWFpbE1lc3NhZ2VgIGFuZCA6Y2xhc3M6YC5NSU1FUGFydGApLCBhbG9uZyB3aXRoIGEgbmV3IHN1Yi1tb2R1bGUsCis6bW9kOmB+ZW1haWwuY29udGVudG1hbmFnZXJgIGFuZCBhIG5ldyA6bW9kOmB+ZW1haWwucG9saWN5YCBhdHRyaWJ1dGUKKzphdHRyOmB+ZW1haWwucG9saWN5LkVtYWlsUG9saWN5LmNvbnRlbnRfbWFuYWdlcmAuICBBbGwgZG9jdW1lbnRhdGlvbiBpcworY3VycmVudGx5IGluIHRoZSBuZXcgbW9kdWxlLCB3aGljaCBpcyBiZWluZyBhZGRlZCBhcyBwYXJ0IG9mIGVtYWlsJ3MgbmV3Cis6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4gIFRoZXNlIGNsYXNzZXMgcHJvdmlkZSBhIG51bWJlciBvZiBuZXcgbWV0aG9kcyB0aGF0CittYWtlIGV4dHJhY3RpbmcgY29udGVudCBmcm9tIGFuZCBpbnNlcnRpbmcgY29udGVudCBpbnRvIGVtYWlsIG1lc3NhZ2VzIG11Y2gKK2Vhc2llci4gIEZvciBkZXRhaWxzLCBzZWUgdGhlIDptb2Q6YH5lbWFpbC5jb250ZW50bWFuYWdlcmAgZG9jdW1lbnRhdGlvbiBhbmQKK3RoZSA6cmVmOmBlbWFpbC1jb250ZW50bWFuYWdlci1hcGktZXhhbXBsZXNgLiAgVGhlc2UgQVBJIGFkZGl0aW9ucyBjb21wbGV0ZSB0aGUKK2J1bGsgb2YgdGhlIHdvcmsgdGhhdCB3YXMgcGxhbm5lZCBhcyBwYXJ0IG9mIHRoZSBlbWFpbDYgcHJvamVjdC4gIFRoZSBjdXJyZW50bHkKK3Byb3Zpc2lvbmFsIEFQSSBpcyBzY2hlZHVsZWQgdG8gYmVjb21lIGZpbmFsIGluIFB5dGhvbiAzLjUgKHBvc3NpYmx5IHdpdGggYSBmZXcKK21pbm9yIGFkZGl0aW9ucyBpbiB0aGUgYXJlYSBvZiBlcnJvciBoYW5kbGluZykuICAoQ29udHJpYnV0ZWQgYnkgUi4gRGF2aWQKK011cnJheSBpbiA6aXNzdWU6YDE4ODkxYC4pCisKKworZmlsZWNtcAorLS0tLS0tLQorCitBIG5ldyA6ZnVuYzpgfmZpbGVjbXAuY2xlYXJfY2FjaGVgIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSBhYmlsaXR5IHRvIGNsZWFyIHRoZQorOm1vZDpgZmlsZWNtcGAgY29tcGFyaXNvbiBjYWNoZSwgd2hpY2ggdXNlcyA6ZnVuYzpgb3Muc3RhdGAgaW5mb3JtYXRpb24gdG8KK2RldGVybWluZSBpZiB0aGUgZmlsZSBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBjb21wYXJlLiAgVGhpcyBjYW4gYmUgdXNlZCwKK2ZvciBleGFtcGxlLCBpZiB0aGUgZmlsZSBtaWdodCBoYXZlIGJlZW4gY2hhbmdlZCBhbmQgcmUtY2hlY2tlZCBpbiBsZXNzIHRpbWUKK3RoYW4gdGhlIHJlc29sdXRpb24gb2YgYSBwYXJ0aWN1bGFyIGZpbGVzeXN0ZW0ncyBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIGZpZWxkLgorKENvbnRyaWJ1dGVkIGJ5IE1hcmsgTGV2aXR0IGluIDppc3N1ZTpgMTgxNDlgLikKKworTmV3IG1vZHVsZSBhdHRyaWJ1dGUgOmRhdGE6YH5maWxlY21wLkRFRkFVTFRfSUdOT1JFU2AgcHJvdmlkZXMgdGhlIGxpc3Qgb2YKK2RpcmVjdG9yaWVzIHRoYXQgYXJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSAqaWdub3JlKiBwYXJhbWV0ZXIgb2YKK3RoZSA6ZnVuYzpgfmZpbGVjbXAuZGlyY21wYCBmdW5jdGlvbi4gIChDb250cmlidXRlZCBieSBFbGkgQmVuZGVyc2t5IGluCis6aXNzdWU6YDE1NDQyYC4pCisKKworZnVuY3Rvb2xzCistLS0tLS0tLS0KKworVGhlIG5ldyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kYCBkZXNjcmlwdG9yIGJyaW5ncyBwYXJ0aWFsIGFyZ3VtZW50CithcHBsaWNhdGlvbiB0byBkZXNjcmlwdG9ycywganVzdCBhcyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBwcm92aWRlcworZm9yIG5vcm1hbCBjYWxsYWJsZXMuIFRoZSBuZXcgZGVzY3JpcHRvciBhbHNvIG1ha2VzIGl0IGVhc2llciB0byBnZXQKK2FyYml0cmFyeSBjYWxsYWJsZXMgKGluY2x1ZGluZyA6ZnVuYzpgfmZ1bmN0b29scy5wYXJ0aWFsYCBpbnN0YW5jZXMpCit0byBiZWhhdmUgbGlrZSBub3JtYWwgaW5zdGFuY2UgbWV0aG9kcyB3aGVuIGluY2x1ZGVkIGluIGEgY2xhc3MgZGVmaW5pdGlvbi4KKyhDb250cmlidXRlZCBieSBBbG9uIEhvcmV2IGFuZCBOaWNrIENvZ2hsYW4gaW4gOmlzc3VlOmA0MzMxYC4pCisKKy4uIF93aGF0c25ldy1zaW5nbGVkaXNwYXRjaDoKKworVGhlIG5ldyA6ZnVuYzpgfmZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaGAgZGVjb3JhdG9yIGJyaW5ncyBzdXBwb3J0IGZvcgorc2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb25zIHRvIHRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeS4gV2hlcmUKK29iamVjdCBvcmllbnRlZCBwcm9ncmFtbWluZyBmb2N1c2VzIG9uIGdyb3VwaW5nIG11bHRpcGxlIG9wZXJhdGlvbnMgb24gYQorY29tbW9uIHNldCBvZiBkYXRhIGludG8gYSBjbGFzcywgYSBnZW5lcmljIGZ1bmN0aW9uIGZvY3VzZXMgb24gZ3JvdXBpbmcKK211bHRpcGxlIGltcGxlbWVudGF0aW9ucyBvZiBhbiBvcGVyYXRpb24gdGhhdCBhbGxvd3MgaXQgdG8gd29yayB3aXRoCisqZGlmZmVyZW50KiBraW5kcyBvZiBkYXRhLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQzYCAtLSBTaW5nbGUtZGlzcGF0Y2ggZ2VuZXJpYyBmdW5jdGlvbnMKKyAgICAgIFBFUCB3cml0dGVuIGFuZCBpbXBsZW1lbnRlZCBieSDFgXVrYXN6IExhbmdhLgorCis6ZnVuYzpgfmZ1bmN0b29scy50b3RhbF9vcmRlcmluZ2Agbm93IHN1cHBvcnRzIGEgcmV0dXJuIHZhbHVlIG9mCis6Y29uc3Q6YE5vdEltcGxlbWVudGVkYCBmcm9tIHRoZSB1bmRlcmx5aW5nIGNvbXBhcmlzb24gZnVuY3Rpb24uICAoQ29udHJpYnV0ZWQKK2J5IEthdGllIE1pbGxlciBpbiA6aXNzdWU6YDEwMDQyYC4pCisKK0EgcHVyZS1weXRob24gdmVyc2lvbiBvZiB0aGUgOmZ1bmM6YH5mdW5jdG9vbHMucGFydGlhbGAgZnVuY3Rpb24gaXMgbm93IGluIHRoZQorc3RkbGliOyBpbiBDUHl0aG9uIGl0IGlzIG92ZXJyaWRkZW4gYnkgdGhlIEMgYWNjZWxlcmF0ZWQgdmVyc2lvbiwgYnV0IGl0IGlzCithdmFpbGFibGUgZm9yIG90aGVyIGltcGxlbWVudGF0aW9ucyB0byB1c2UuICAoQ29udHJpYnV0ZWQgYnkgQnJpYW4gVGhvcm5lIGluCis6aXNzdWU6YDEyNDI4YC4pCisKKworZ2MKKy0tCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgfmdjLmdldF9zdGF0c2AgcmV0dXJucyBhIGxpc3Qgb2YgdGhyZWUgcGVyLWdlbmVyYXRpb24KK2RpY3Rpb25hcmllcyBjb250YWluaW5nIHRoZSBjb2xsZWN0aW9ucyBzdGF0aXN0aWNzIHNpbmNlIGludGVycHJldGVyIHN0YXJ0dXAuCisoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4gOmlzc3VlOmAxNjM1MWAuKQorCisKK2dsb2IKKy0tLS0KKworQSBuZXcgZnVuY3Rpb24gOmZ1bmM6YH5nbG9iLmVzY2FwZWAgcHJvdmlkZXMgYSB3YXkgdG8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycworaW4gYSBmaWxlbmFtZSBzbyB0aGF0IHRoZXkgZG8gbm90IGJlY29tZSBwYXJ0IG9mIHRoZSBnbG9iYmluZyBleHBhbnNpb24gYnV0IGFyZQoraW5zdGVhZCBtYXRjaGVkIGxpdGVyYWxseS4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgODQwMmAuKQorCisKK2hhc2hsaWIKKy0tLS0tLS0KKworQSBuZXcgOmZ1bmM6YGhhc2hsaWIucGJrZGYyX2htYWNgIGZ1bmN0aW9uIHByb3ZpZGVzCit0aGUgYFBLQ1MjNSBwYXNzd29yZC1iYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyCis8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QQktERjI+YF8uICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuCitIZWltZXMgaW4gOmlzc3VlOmAxODU4MmAuKQorCitUaGUgOmF0dHI6YH5oYXNobGliLmhhc2gubmFtZWAgYXR0cmlidXRlIG9mIDptb2Q6YGhhc2hsaWJgIGhhc2ggb2JqZWN0cyBpcyBub3cKK2EgZm9ybWFsbHkgc3VwcG9ydGVkIGludGVyZmFjZS4gIEl0IGhhcyBhbHdheXMgZXhpc3RlZCBpbiBDUHl0aG9uJ3MKKzptb2Q6YGhhc2hsaWJgIChhbHRob3VnaCBpdCBkaWQgbm90IHJldHVybiBsb3dlciBjYXNlIG5hbWVzIGZvciBhbGwgc3VwcG9ydGVkCitoYXNoZXMpLCBidXQgaXQgd2FzIG5vdCBhIHB1YmxpYyBpbnRlcmZhY2UgYW5kIHNvIHNvbWUgb3RoZXIgUHl0aG9uCitpbXBsZW1lbnRhdGlvbnMgaGF2ZSBub3QgcHJldmlvdXNseSBzdXBwb3J0ZWQgaXQuICAoQ29udHJpYnV0ZWQgYnkgSmFzb24gUi4KK0Nvb21icyBpbiA6aXNzdWU6YDE4NTMyYC4pCisKKworaG1hYworLS0tLQorCis6bW9kOmBobWFjYCBub3cgYWNjZXB0cyBgYGJ5dGVhcnJheWBgIGFzIHdlbGwgYXMgYGBieXRlc2BgIGZvciB0aGUgKmtleSoKK2FyZ3VtZW50IHRvIHRoZSA6ZnVuYzpgfmhtYWMubmV3YCBmdW5jdGlvbiwgYW5kIHRoZSAqbXNnKiBwYXJhbWV0ZXIgdG8gYm90aCB0aGUKKzpmdW5jOmB+aG1hYy5uZXdgIGZ1bmN0aW9uIGFuZCB0aGUgOm1ldGg6YH5obWFjLkhNQUMudXBkYXRlYCBtZXRob2Qgbm93CithY2NlcHRzIGFueSB0eXBlIHN1cHBvcnRlZCBieSB0aGUgOm1vZDpgaGFzaGxpYmAgbW9kdWxlLiAgKENvbnRyaWJ1dGVkCitieSBKb25hcyBCb3Jnc3Ryw7ZtIGluIDppc3N1ZTpgMTgyNDBgLikKKworVGhlICpkaWdlc3Rtb2QqIGFyZ3VtZW50IHRvIHRoZSA6ZnVuYzpgaG1hYy5uZXdgIGZ1bmN0aW9uIG1heSBub3cgYmUgYW55IGhhc2gKK2RpZ2VzdCBuYW1lIHJlY29nbml6ZWQgYnkgOm1vZDpgaGFzaGxpYmAuICBJbiBhZGRpdGlvbiwgdGhlIGN1cnJlbnQgYmVoYXZpb3IgaW4KK3doaWNoIHRoZSB2YWx1ZSBvZiAqZGlnZXN0bW9kKiBkZWZhdWx0cyB0byBgYE1ENWBgIGlzIGRlcHJlY2F0ZWQ6IGluIGEKK2Z1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbiB0aGVyZSB3aWxsIGJlIG5vIGRlZmF1bHQgdmFsdWUuICAoQ29udHJpYnV0ZWQgYnkKK0NocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNzI3NmAuKQorCitXaXRoIHRoZSBhZGRpdGlvbiBvZiA6YXR0cjpgfmhtYWMuSE1BQy5ibG9ja19zaXplYCBhbmQgOmF0dHI6YH5obWFjLkhNQUMubmFtZWAKK2F0dHJpYnV0ZXMgKGFuZCB0aGUgZm9ybWFsIGRvY3VtZW50YXRpb24gb2YgdGhlIDphdHRyOmB+aG1hYy5ITUFDLmRpZ2VzdF9zaXplYAorYXR0cmlidXRlKSwgdGhlIDptb2Q6YGhtYWNgIG1vZHVsZSBub3cgY29uZm9ybXMgZnVsbHkgdG8gdGhlIDpwZXA6YDI0N2AgQVBJLgorKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODc3NWAuKQorCisKK2h0bWwKKy0tLS0KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+aHRtbC51bmVzY2FwZWAgZnVuY3Rpb24gY29udmVydHMgSFRNTDUgY2hhcmFjdGVyIHJlZmVyZW5jZXMgdG8KK3RoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4gIChDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4KKzppc3N1ZTpgMjkyN2AuKQorCis6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCBhY2NlcHRzIGEgbmV3IGtleXdvcmQgYXJndW1lbnQKKypjb252ZXJ0X2NoYXJyZWZzKiB0aGF0LCB3aGVuIGBgVHJ1ZWBgLCBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGFsbCBjaGFyYWN0ZXIKK3JlZmVyZW5jZXMuICBGb3IgYmFja3dhcmQtY29tcGF0aWJpbGl0eSwgaXRzIHZhbHVlIGRlZmF1bHRzIHRvIGBgRmFsc2VgYCwgYnV0CitpdCB3aWxsIGNoYW5nZSB0byBgYFRydWVgYCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbiwgc28geW91IGFyZSBpbnZpdGVkIHRvCitzZXQgaXQgZXhwbGljaXRseSBhbmQgdXBkYXRlIHlvdXIgY29kZSB0byB1c2UgdGhpcyBuZXcgZmVhdHVyZS4gIChDb250cmlidXRlZAorYnkgRXppbyBNZWxvdHRpIGluIDppc3N1ZTpgMTM2MzNgLikKKworVGhlICpzdHJpY3QqIGFyZ3VtZW50IG9mIDpjbGFzczpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZXJgIGlzIG5vdyBkZXByZWNhdGVkLgorKENvbnRyaWJ1dGVkIGJ5IEV6aW8gTWVsb3R0aSBpbiA6aXNzdWU6YDE1MTE0YC4pCisKKworaHR0cAorLS0tLQorCis6bWV0aDpgfmh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuc2VuZF9lcnJvcmAgbm93IGFjY2VwdHMgYW4KK29wdGlvbmFsIGFkZGl0aW9uYWwgKmV4cGxhaW4qIHBhcmFtZXRlciB3aGljaCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGFuCitleHRlbmRlZCBlcnJvciBkZXNjcmlwdGlvbiwgb3ZlcnJpZGluZyB0aGUgaGFyZGNvZGVkIGRlZmF1bHQgaWYgdGhlcmUgaXMgb25lLgorVGhpcyBleHRlbmRlZCBlcnJvciBkZXNjcmlwdGlvbiB3aWxsIGJlIGZvcm1hdHRlZCB1c2luZyB0aGUKKzphdHRyOmB+aHR0cC5zZXJ2ZXIuSFRUUC5lcnJvcl9tZXNzYWdlX2Zvcm1hdGAgYXR0cmlidXRlIGFuZCBzZW50IGFzIHRoZSBib2R5CitvZiB0aGUgZXJyb3IgcmVzcG9uc2UuICAoQ29udHJpYnV0ZWQgYnkgS2FybCBDb3cgaW4gOmlzc3VlOmAxMjkyMWAuKQorCitUaGUgOm1vZDpgaHR0cC5zZXJ2ZXJgIDpyZWY6YGNvbW1hbmQgbGluZSBpbnRlcmZhY2UgPGh0dHAtc2VydmVyLWNsaT5gIG5vdyBoYXMKK2EgYGAtYi8tLWJpbmRgYCBvcHRpb24gdGhhdCBjYXVzZXMgdGhlIHNlcnZlciB0byBsaXN0ZW4gb24gYSBzcGVjaWZpYyBhZGRyZXNzLgorKENvbnRyaWJ1dGVkIGJ5IE1hbHRlIFN3YXJ0IGluIDppc3N1ZTpgMTc3NjRgLikKKworCitpZGxlbGliIGFuZCBJRExFCistLS0tLS0tLS0tLS0tLS0tCisKK1NpbmNlIGlkbGVsaWIgaW1wbGVtZW50cyB0aGUgSURMRSBzaGVsbCBhbmQgZWRpdG9yIGFuZCBpcyBub3QgaW50ZW5kZWQgZm9yCitpbXBvcnQgYnkgb3RoZXIgcHJvZ3JhbXMsIGl0IGdldHMgaW1wcm92ZW1lbnRzIHdpdGggZXZlcnkgcmVsZWFzZS4gU2VlCis6ZmlsZTpgTGliL2lkbGVsaWIvTkVXUy50eHRgIGZvciBhIGN1bXVsYXRpdmUgbGlzdCBvZiBjaGFuZ2VzIHNpbmNlIDMuMy4wLAorYXMgd2VsbCBhcyBjaGFuZ2VzIG1hZGUgaW4gZnV0dXJlIDMuNC54IHJlbGVhc2VzLiBUaGlzIGZpbGUgaXMgYWxzbyBhdmFpbGFibGUKK2Zyb20gdGhlIElETEUgOm1lbnVzZWxlY3Rpb246YEhlbHAgLS0+IEFib3V0IElETEVgIGRpYWxvZy4KKworCitpbXBvcnRsaWIKKy0tLS0tLS0tLQorCitUaGUgOmNsYXNzOmB+aW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyYCBBQkMgZGVmaW5lcyBhIG5ldyBtZXRob2QsCis6bWV0aDpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5zb3VyY2VfdG9fY29kZWAgdGhhdCBhY2NlcHRzIHNvdXJjZQorZGF0YSBhbmQgYSBwYXRoIGFuZCByZXR1cm5zIGEgY29kZSBvYmplY3QuICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgoraXMgZXF1aXZhbGVudCB0byBgYGNvbXBpbGUoZGF0YSwgcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSlgYC4KKyhDb250cmlidXRlZCBieSBFcmljIFNub3cgYW5kIEJyZXR0IENhbm5vbiBpbiA6aXNzdWU6YDE1NjI3YC4pCisKKzpjbGFzczpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlcmAgYWxzbyBub3cgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbgorZm9yIHRoZSA6bWV0aDpgfmltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfY29kZWAgbWV0aG9kLiAgSG93ZXZlciwKK2l0IHdpbGwgbm9ybWFsbHkgYmUgZGVzaXJhYmxlIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uCitmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4gIChDb250cmlidXRlZCBieSBCcmV0dCBDYW5ub24gaW4gOmlzc3VlOmAxODA3MmAuKQorCitUaGUgOmZ1bmM6YH5pbXBvcnRsaWIucmVsb2FkYCBmdW5jdGlvbiBoYXMgYmVlbiBtb3ZlZCBmcm9tIDptb2Q6YGltcGAgdG8KKzptb2Q6YGltcG9ydGxpYmAgYXMgcGFydCBvZiB0aGUgOm1vZDpgaW1wYCBtb2R1bGUgZGVwcmVjYXRpb24uICAoQ29udHJpYnV0ZWQgYnkKK0JlcmtlciBQZWtzYWcgaW4gOmlzc3VlOmAxODE5M2AuKQorCis6bW9kOmBpbXBvcnRsaWIudXRpbGAgbm93IGhhcyBhIDpkYXRhOmB+aW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSYCBhdHRyaWJ1dGUKK3Byb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIGJ5dGVjb2RlIHZlcnNpb24gbnVtYmVyLiAgVGhpcyByZXBsYWNlcyB0aGUKKzpmdW5jOmB+aW1wLmdldF9tYWdpY2AgZnVuY3Rpb24gaW4gdGhlIGRlcHJlY2F0ZWQgOm1vZDpgaW1wYCBtb2R1bGUuCisoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTgxOTJgLikKKworTmV3IDptb2Q6YGltcG9ydGxpYi51dGlsYCBmdW5jdGlvbnMgOmZ1bmM6YH5pbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZWAKK2FuZCA6ZnVuYzpgfmltcG9ydGxpYi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlYCByZXBsYWNlIHRoZSBzYW1lLW5hbWVkIGZ1bmN0aW9ucworaW4gdGhlIGRlcHJlY2F0ZWQgOm1vZDpgaW1wYCBtb2R1bGUuICAoQ29udHJpYnV0ZWQgYnkgQnJldHQgQ2Fubm9uIGluCis6aXNzdWU6YDE4MTk0YC4pCisKK1RoZSA6bW9kOmBpbXBvcnRsaWJgIGJvb3RzdHJhcCA6Y2xhc3M6YC5OYW1lc3BhY2VMb2FkZXJgIG5vdyBjb25mb3JtcyB0bwordGhlIDpjbGFzczpgLkluc3BlY3RMb2FkZXJgIEFCQywgd2hpY2ggbWVhbnMgdGhhdCBgYHJ1bnB5YGAgYW5kCitgYHB5dGhvbiAtbWBgIGNhbiBub3cgYmUgdXNlZCB3aXRoIG5hbWVzcGFjZSBwYWNrYWdlcy4gIChDb250cmlidXRlZAorYnkgQnJldHQgQ2Fubm9uIGluIDppc3N1ZTpgMTgwNThgLikKKworOm1vZDpgaW1wb3J0bGliLnV0aWxgIGhhcyBhIG5ldyBmdW5jdGlvbiA6ZnVuYzpgfmltcG9ydGxpYi51dGlsLmRlY29kZV9zb3VyY2VgCit0aGF0IGRlY29kZXMgc291cmNlIGZyb20gYnl0ZXMgdXNpbmcgdW5pdmVyc2FsIG5ld2xpbmUgcHJvY2Vzc2luZy4gIFRoaXMgaXMKK3VzZWZ1bCBmb3IgaW1wbGVtZW50aW5nIDptZXRoOmAuSW5zcGVjdExvYWRlci5nZXRfc291cmNlYCBtZXRob2RzLgorCis6Y2xhc3M6YGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcmAgbm93IGhhcyBhCis6bWV0aDpgfmltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5nZXRfZmlsZW5hbWVgIG1ldGhvZC4gIFRoaXMgd2FzCitpbmFkdmVydGVudGx5IG9taXR0ZWQgaW4gdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uLiAgKENvbnRyaWJ1dGVkIGJ5IEVyaWMKK1Nub3cgaW4gOmlzc3VlOmAxOTE1MmAuKQorCisKK2luc3BlY3QKKy0tLS0tLS0KKworVGhlIDptb2Q6YGluc3BlY3RgIG1vZHVsZSBub3cgb2ZmZXJzIGEgYmFzaWMgOnJlZjpgY29tbWFuZCBsaW5lIGludGVyZmFjZQorPGluc3BlY3QtbW9kdWxlLWNsaT5gIHRvIHF1aWNrbHkgZGlzcGxheSBzb3VyY2UgY29kZSBhbmQgb3RoZXIKK2luZm9ybWF0aW9uIGZvciBtb2R1bGVzLCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMuICAoQ29udHJpYnV0ZWQgYnkgQ2xhdWRpdSBQb3BhCithbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTg2MjZgLikKKworOmZ1bmM6YH5pbnNwZWN0LnVud3JhcGAgbWFrZXMgaXQgZWFzeSB0byB1bnJhdmVsIHdyYXBwZXIgZnVuY3Rpb24gY2hhaW5zCitjcmVhdGVkIGJ5IDpmdW5jOmBmdW5jdG9vbHMud3JhcHNgIChhbmQgYW55IG90aGVyIEFQSSB0aGF0IHNldHMgdGhlCitgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIG9uIGEgd3JhcHBlciBmdW5jdGlvbikuICAoQ29udHJpYnV0ZWQgYnkKK0RhbmllbCBVcmJhbiwgQWFyb24gSWxlcyBhbmQgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTMyNjZgLikKKworQXMgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyA6bW9kOmBlbnVtYCBtb2R1bGUsIHRoZQorOm1vZDpgaW5zcGVjdGAgbW9kdWxlIG5vdyBoYXMgc3Vic3RhbnRpYWxseSBiZXR0ZXIgc3VwcG9ydCBmb3IgY3VzdG9tCitgYF9fZGlyX19gYCBtZXRob2RzIGFuZCBkeW5hbWljIGNsYXNzIGF0dHJpYnV0ZXMgcHJvdmlkZWQgdGhyb3VnaAorbWV0YWNsYXNzZXMuICAoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMTg5MjlgIGFuZAorOmlzc3VlOmAxOTAzMGAuKQorCis6ZnVuYzpgfmluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWNgIGFuZCA6ZnVuYzpgfmluc3BlY3QuZ2V0YXJnc3BlY2AKK25vdyB1c2UgdGhlIDpmdW5jOmB+aW5zcGVjdC5zaWduYXR1cmVgIEFQSS4gVGhpcyBhbGxvd3MgdGhlbSB0bworc3VwcG9ydCBhIG11Y2ggYnJvYWRlciByYW5nZSBvZiBjYWxsYWJsZXMsIGluY2x1ZGluZyB0aG9zZSB3aXRoCitgYF9fc2lnbmF0dXJlX19gYCBhdHRyaWJ1dGVzLCB0aG9zZSB3aXRoIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IGFyZ3VtZW50CitjbGluaWMsIDpmdW5jOmBmdW5jdG9vbHMucGFydGlhbGAgb2JqZWN0cyBhbmQgbW9yZS4gTm90ZSB0aGF0LCB1bmxpa2UKKzpmdW5jOmB+aW5zcGVjdC5zaWduYXR1cmVgLCB0aGVzZSBmdW5jdGlvbnMgc3RpbGwgaWdub3JlIGBgX193cmFwcGVkX19gYAorYXR0cmlidXRlcywgYW5kIHJlcG9ydCB0aGUgYWxyZWFkeSBib3VuZCBmaXJzdCBhcmd1bWVudCBmb3IgYm91bmQgbWV0aG9kcywKK3NvIGl0IGlzIHN0aWxsIG5lY2Vzc2FyeSB0byB1cGRhdGUgeW91ciBjb2RlIHRvIHVzZQorOmZ1bmM6YH5pbnNwZWN0LnNpZ25hdHVyZWAgZGlyZWN0bHkgaWYgdGhvc2UgZmVhdHVyZXMgYXJlIGRlc2lyZWQuCisoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4gOmlzc3VlOmAxNzQ4MWAuKQorCis6ZnVuYzpgfmluc3BlY3Quc2lnbmF0dXJlYCBub3cgc3VwcG9ydHMgZHVjayB0eXBlcyBvZiBDUHl0aG9uIGZ1bmN0aW9ucywKK3doaWNoIGFkZHMgc3VwcG9ydCBmb3IgZnVuY3Rpb25zIGNvbXBpbGVkIHdpdGggQ3l0aG9uLiAgKENvbnRyaWJ1dGVkCitieSBTdGVmYW4gQmVobmVsIGFuZCBZdXJ5IFNlbGl2YW5vdiBpbiA6aXNzdWU6YDE3MTU5YC4pCisKKworaXBhZGRyZXNzCistLS0tLS0tLS0KKworOm1vZDpgaXBhZGRyZXNzYCB3YXMgYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW4gUHl0aG9uIDMuMyBhcyBhCis6dGVybTpgcHJvdmlzaW9uYWwgQVBJYC4gV2l0aCB0aGUgcmVsZWFzZSBvZiBQeXRob24gMy40LCB0aGlzIHF1YWxpZmljYXRpb24KK2hhcyBiZWVuIHJlbW92ZWQ6IDptb2Q6YGlwYWRkcmVzc2AgaXMgbm93IGNvbnNpZGVyZWQgYSBzdGFibGUgQVBJLCBjb3ZlcmVkCitieSB0aGUgbm9ybWFsIHN0YW5kYXJkIGxpYnJhcnkgcmVxdWlyZW1lbnRzIHRvIG1haW50YWluIGJhY2t3YXJkcworY29tcGF0aWJpbGl0eS4KKworQSBuZXcgOmF0dHI6YH5pcGFkZHJlc3MuSVB2NEFkZHJlc3MuaXNfZ2xvYmFsYCBwcm9wZXJ0eSBpcyBgYFRydWVgYCBpZgorYW4gYWRkcmVzcyBpcyBnbG9iYWxseSByb3V0ZWFibGUuICAoQ29udHJpYnV0ZWQgYnkgUGV0ZXIgTW9vZHkgaW4KKzppc3N1ZTpgMTc0MDBgLikKKworCitsb2dnaW5nCistLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH5sb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlcmAgaGFzIGEgbmV3ICphdFRpbWUqCitwYXJhbWV0ZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB0aW1lIG9mIGRheSB3aGVuIHJvbGxvdmVyIHNob3VsZAoraGFwcGVuLiAgKENvbnRyaWJ1dGVkIGJ5IFJvbmFsZCBPdXNzb3JlbiBpbiA6aXNzdWU6YDk1NTZgLikKKworOmNsYXNzOmB+bG9nZ2luZy5oYW5kbGVycy5Tb2NrZXRIYW5kbGVyYCBhbmQKKzpjbGFzczpgfmxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyYCBub3cgc3VwcG9ydCBVbml4IGRvbWFpbiBzb2NrZXRzIChieQorc2V0dGluZyAqcG9ydCogdG8gYGBOb25lYGApLiAgKENvbnRyaWJ1dGVkIGJ5IFZpbmF5IFNhamlwIGluIGNvbW1pdAorY2U0NjE5NWI1NmE5LikKKworOmZ1bmM6YH5sb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnYCBub3cgYWNjZXB0cyBhCis6Y2xhc3M6YGNvbmZpZ3BhcnNlci5SYXdDb25maWdQYXJzZXJgIHN1YmNsYXNzIGluc3RhbmNlIGZvciB0aGUgKmZuYW1lKgorcGFyYW1ldGVyLiAgVGhpcyBmYWNpbGl0YXRlcyB1c2luZyBhIGNvbmZpZ3VyYXRpb24gZmlsZSB3aGVuIGxvZ2dpbmcKK2NvbmZpZ3VyYXRpb24gaXMganVzdCBhIHBhcnQgb2YgdGhlIG92ZXJhbGwgYXBwbGljYXRpb24gY29uZmlndXJhdGlvbiwgb3Igd2hlcmUKK3RoZSBhcHBsaWNhdGlvbiBtb2RpZmllcyB0aGUgY29uZmlndXJhdGlvbiBiZWZvcmUgcGFzc2luZyBpdCB0bworOmZ1bmM6YH5sb2dnaW5nLmNvbmZpZy5maWxlQ29uZmlnYC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbgorOmlzc3VlOmAxNjExMGAuKQorCitMb2dnaW5nIGNvbmZpZ3VyYXRpb24gZGF0YSByZWNlaXZlZCBmcm9tIGEgc29ja2V0IHZpYSB0aGUKKzpmdW5jOmBsb2dnaW5nLmNvbmZpZy5saXN0ZW5gIGZ1bmN0aW9uIGNhbiBub3cgYmUgdmFsaWRhdGVkIGJlZm9yZSBiZWluZworcHJvY2Vzc2VkIGJ5IHN1cHBseWluZyBhIHZlcmlmaWNhdGlvbiBmdW5jdGlvbiBhcyB0aGUgYXJndW1lbnQgdG8gdGhlIG5ldworKnZlcmlmeSoga2V5d29yZCBhcmd1bWVudC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbiA6aXNzdWU6YDE1NDUyYC4pCisKKworLi4gX3doYXRzbmV3LW1hcnNoYWwtMzoKKworbWFyc2hhbAorLS0tLS0tLQorCitUaGUgZGVmYXVsdCA6bW9kOmBtYXJzaGFsYCB2ZXJzaW9uIGhhcyBiZWVuIGJ1bXBlZCB0byAzLiAgVGhlIGNvZGUgaW1wbGVtZW50aW5nCit0aGUgbmV3IHZlcnNpb24gcmVzdG9yZXMgdGhlIFB5dGhvbjIgYmVoYXZpb3Igb2YgcmVjb3JkaW5nIG9ubHkgb25lIGNvcHkgb2YKK2ludGVybmVkIHN0cmluZ3MgYW5kIHByZXNlcnZpbmcgdGhlIGludGVybmluZyBvbiBkZXNlcmlhbGl6YXRpb24sIGFuZCBleHRlbmRzCit0aGlzICJvbmUgY29weSIgYWJpbGl0eSB0byBhbnkgb2JqZWN0IHR5cGUgKGluY2x1ZGluZyBoYW5kbGluZyByZWN1cnNpdmUKK3JlZmVyZW5jZXMpLiAgVGhpcyByZWR1Y2VzIGJvdGggdGhlIHNpemUgb2YgYGAucHljYGAgZmlsZXMgYW5kIHRoZSBhbW91bnQgb2YKK21lbW9yeSBhIG1vZHVsZSBvY2N1cGllcyBpbiBtZW1vcnkgd2hlbiBpdCBpcyBsb2FkZWQgZnJvbSBhIGBgLnB5Y2BgIChvcgorYGAucHlvYGApIGZpbGUuICAoQ29udHJpYnV0ZWQgYnkgS3Jpc3Rqw6FuIFZhbHVyIErDs25zc29uIGluIDppc3N1ZTpgMTY0NzVgLAord2l0aCBhZGRpdGlvbmFsIHNwZWVkdXBzIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTkyMTlgLikKKworCittbWFwCistLS0tCisKK21tYXAgb2JqZWN0cyBjYW4gbm93IGJlIDptb2Q6YHdlYWtyZWZgXCBlZC4gIChDb250cmlidXRlZCBieSBWYWxlcmllIExhbWJlcnQgaW4KKzppc3N1ZTpgNDg4NWAuKQorCisKK211bHRpcHJvY2Vzc2luZworLS0tLS0tLS0tLS0tLS0tCisKKy4uIF93aGF0c25ldy1tdWx0aXByb2Nlc3Npbmctbm8tZm9yazoKKworT24gVW5peCB0d28gbmV3IDpyZWY6YHN0YXJ0IG1ldGhvZHMgPG11bHRpcHJvY2Vzc2luZy1zdGFydC1tZXRob2RzPmAsCitgYHNwYXduYGAgYW5kIGBgZm9ya3NlcnZlcmBgLCBoYXZlIGJlZW4gYWRkZWQgZm9yIHN0YXJ0aW5nIHByb2Nlc3NlcyB1c2luZworOm1vZDpgbXVsdGlwcm9jZXNzaW5nYC4gIFRoZXNlIG1ha2UgdGhlIG1peGluZyBvZiBwcm9jZXNzZXMgd2l0aCB0aHJlYWRzIG1vcmUKK3JvYnVzdCwgYW5kIHRoZSBgYHNwYXduYGAgbWV0aG9kIG1hdGNoZXMgdGhlIHNlbWFudGljcyB0aGF0IG11bHRpcHJvY2Vzc2luZyBoYXMKK2Fsd2F5cyB1c2VkIG9uIFdpbmRvd3MuICBOZXcgZnVuY3Rpb24KKzpmdW5jOmB+bXVsdGlwcm9jZXNzaW5nLmdldF9hbGxfc3RhcnRfbWV0aG9kc2AgcmVwb3J0cyBhbGwgc3RhcnQgbWV0aG9kcworYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybSwgOmZ1bmM6YH5tdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZGAgcmVwb3J0cwordGhlIGN1cnJlbnQgc3RhcnQgbWV0aG9kLCBhbmQgOmZ1bmM6YH5tdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZGAgc2V0cwordGhlIHN0YXJ0IG1ldGhvZC4gIChDb250cmlidXRlZCBieSBSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmA4NzEzYC4pCisKKzptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgYWxzbyBub3cgaGFzIHRoZSBjb25jZXB0IG9mIGEgYGBjb250ZXh0YGAsIHdoaWNoCitkZXRlcm1pbmVzIGhvdyBjaGlsZCBwcm9jZXNzZXMgYXJlIGNyZWF0ZWQuICBOZXcgZnVuY3Rpb24KKzpmdW5jOmB+bXVsdGlwcm9jZXNzaW5nLmdldF9jb250ZXh0YCByZXR1cm5zIGEgY29udGV4dCB0aGF0IHVzZXMgYSBzcGVjaWZpZWQKK3N0YXJ0IG1ldGhvZC4gIEl0IGhhcyB0aGUgc2FtZSBBUEkgYXMgdGhlIDptb2Q6YG11bHRpcHJvY2Vzc2luZ2AgbW9kdWxlIGl0c2VsZiwKK3NvIHlvdSBjYW4gdXNlIGl0IHRvIGNyZWF0ZSA6Y2xhc3M6YH5tdWx0aXByb2Nlc3NpbmcucG9vbC5Qb29sYFwgcyBhbmQgb3RoZXIKK29iamVjdHMgdGhhdCB3aWxsIG9wZXJhdGUgd2l0aGluIHRoYXQgY29udGV4dC4gIFRoaXMgYWxsb3dzIGEgZnJhbWV3b3JrIGFuZCBhbgorYXBwbGljYXRpb24gb3IgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzYW1lIGFwcGxpY2F0aW9uIHRvIHVzZSBtdWx0aXByb2Nlc3NpbmcKK3dpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLiAgKENvbnRyaWJ1dGVkIGJ5IFJpY2hhcmQgT3Vka2VyayBpbgorOmlzc3VlOmAxODk5OWAuKQorCitFeGNlcHQgd2hlbiB1c2luZyB0aGUgb2xkICpmb3JrKiBzdGFydCBtZXRob2QsIGNoaWxkIHByb2Nlc3NlcyBubyBsb25nZXIKK2luaGVyaXQgdW5uZWVkZWQgaGFuZGxlcy9maWxlIGRlc2NyaXB0b3JzIGZyb20gdGhlaXIgcGFyZW50cyAocGFydCBvZgorOmlzc3VlOmA4NzEzYCkuCisKKzptb2Q6YG11bHRpcHJvY2Vzc2luZ2Agbm93IHJlbGllcyBvbiA6bW9kOmBydW5weWAgKHdoaWNoIGltcGxlbWVudHMgdGhlCitgYC1tYGAgc3dpdGNoKSB0byBpbml0aWFsaXNlIGBgX19tYWluX19gYCBhcHByb3ByaWF0ZWx5IGluIGNoaWxkIHByb2Nlc3Nlcword2hlbiB1c2luZyB0aGUgYGBzcGF3bmBgIG9yIGBgZm9ya3NlcnZlcmBgIHN0YXJ0IG1ldGhvZHMuIFRoaXMgcmVzb2x2ZXMgc29tZQorZWRnZSBjYXNlcyB3aGVyZSBjb21iaW5pbmcgbXVsdGlwcm9jZXNzaW5nLCB0aGUgYGAtbWBgIGNvbW1hbmQgbGluZSBzd2l0Y2gsCithbmQgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cyBjb3VsZCBjYXVzZSBvYnNjdXJlIGZhaWx1cmVzIGluIGNoaWxkCitwcm9jZXNzZXMuICAoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuIGluIDppc3N1ZTpgMTk5NDZgLikKKworCitvcGVyYXRvcgorLS0tLS0tLS0KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+b3BlcmF0b3IubGVuZ3RoX2hpbnRgIHByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZQorc3BlY2lmaWNhdGlvbiBmb3IgaG93IHRoZSA6bWV0aDpgfm9iamVjdC5fX2xlbmd0aF9oaW50X19gIHNwZWNpYWwgbWV0aG9kIHNob3VsZAorYmUgdXNlZCwgYXMgcGFydCBvZiB0aGUgOnBlcDpgNDI0YCBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiB0aGlzIGxhbmd1YWdlCitmZWF0dXJlLiAgKENvbnRyaWJ1dGVkIGJ5IEFybWluIFJvbmFjaGVyIGluIDppc3N1ZTpgMTYxNDhgLikKKworVGhlcmUgaXMgbm93IGEgcHVyZS1weXRob24gdmVyc2lvbiBvZiB0aGUgOm1vZDpgb3BlcmF0b3JgIG1vZHVsZSBhdmFpbGFibGUgZm9yCityZWZlcmVuY2UgYW5kIGZvciB1c2UgYnkgYWx0ZXJuYXRlIGltcGxlbWVudGF0aW9ucyBvZiBQeXRob24uICAoQ29udHJpYnV0ZWQgYnkKK1phY2hhcnkgV2FyZSBpbiA6aXNzdWU6YDE2Njk0YC4pCisKKworb3MKKy0tCisKK1RoZXJlIGFyZSBuZXcgZnVuY3Rpb25zIHRvIGdldCBhbmQgc2V0IHRoZSA6cmVmOmBpbmhlcml0YWJsZSBmbGFnCis8ZmRfaW5oZXJpdGFuY2U+YCBvZiBhIGZpbGUgZGVzY3JpcHRvciAoOmZ1bmM6YG9zLmdldF9pbmhlcml0YWJsZWAsCis6ZnVuYzpgb3Muc2V0X2luaGVyaXRhYmxlYCkgb3IgYSBXaW5kb3dzIGhhbmRsZQorKDpmdW5jOmBvcy5nZXRfaGFuZGxlX2luaGVyaXRhYmxlYCwgOmZ1bmM6YG9zLnNldF9oYW5kbGVfaW5oZXJpdGFibGVgKS4KKworTmV3IGZ1bmN0aW9uIDpmdW5jOmB+b3MuY3B1X2NvdW50YCByZXBvcnRzIHRoZSBudW1iZXIgb2YgQ1BVcyBhdmFpbGFibGUgb24gdGhlCitwbGF0Zm9ybSBvbiB3aGljaCBQeXRob24gaXMgcnVubmluZyAob3IgYGBOb25lYGAgaWYgdGhlIGNvdW50IGNhbid0IGJlCitkZXRlcm1pbmVkKS4gIFRoZSA6ZnVuYzpgbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudGAgZnVuY3Rpb24gaXMgbm93IGltcGxlbWVudGVkCitpbiB0ZXJtcyBvZiB0aGlzIGZ1bmN0aW9uKS4gIChDb250cmlidXRlZCBieSBUcmVudCBOZWxzb24sIFlvZ2VzaCBDaGF1ZGhhcmksCitWaWN0b3IgU3Rpbm5lciwgYW5kIENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaSBpbiA6aXNzdWU6YDE3OTE0YC4pCisKKzpmdW5jOmBvcy5wYXRoLnNhbWVzdGF0YCBpcyBub3cgYXZhaWxhYmxlIG9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtIChhbmQgdGhlCis6ZnVuYzpgb3MucGF0aC5zYW1lZmlsZWAgaW1wbGVtZW50YXRpb24gaXMgbm93IHNoYXJlZCBiZXR3ZWVuIFVuaXggYW5kCitXaW5kb3dzKS4gIChDb250cmlidXRlZCBieSBCcmlhbiBDdXJ0aW4gaW4gOmlzc3VlOmAxMTkzOWAuKQorCis6ZnVuYzpgb3MucGF0aC5pc21vdW50YCBub3cgcmVjb2duaXplcyB2b2x1bWVzIG1vdW50ZWQgYmVsb3cgYSBkcml2ZQorcm9vdCBvbiBXaW5kb3dzLiAgKENvbnRyaWJ1dGVkIGJ5IFRpbSBHb2xkZW4gaW4gOmlzc3VlOmA5MDM1YC4pCisKKzpmdW5jOmBvcy5vcGVuYCBzdXBwb3J0cyB0d28gbmV3IGZsYWdzIG9uIHBsYXRmb3JtcyB0aGF0IHByb3ZpZGUgdGhlbSwKKzpkYXRhOmB+b3MuT19QQVRIYCAodW4tb3BlbmVkIGZpbGUgZGVzY3JpcHRvciksIGFuZCA6ZGF0YTpgfm9zLk9fVE1QRklMRWAKKyh1bm5hbWVkIHRlbXBvcmFyeSBmaWxlOyBhcyBvZiAzLjQuMCByZWxlYXNlIGF2YWlsYWJsZSBvbmx5IG9uIExpbnV4IHN5c3RlbXMKK3dpdGggYSBrZXJuZWwgdmVyc2lvbiBvZiAzLjExIG9yIG5ld2VyIHRoYXQgaGF2ZSB1YXBpIGhlYWRlcnMpLiAgKENvbnRyaWJ1dGVkCitieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTg2NzNgIGFuZCBCZW5qYW1pbiBQZXRlcnNvbiwgcmVzcGVjdGl2ZWx5LikKKworCitwZGIKKy0tLQorCis6bW9kOmBwZGJgIGhhcyBiZWVuIGVuaGFuY2VkIHRvIGhhbmRsZSBnZW5lcmF0b3JzLCA6a2V5d29yZDpgeWllbGRgLCBhbmQKK2BgeWllbGQgZnJvbWBgIGluIGEgbW9yZSB1c2VmdWwgZmFzaGlvbi4gIFRoaXMgaXMgZXNwZWNpYWxseSBoZWxwZnVsIHdoZW4KK2RlYnVnZ2luZyA6bW9kOmBhc3luY2lvYCBiYXNlZCBwcm9ncmFtcy4gIChDb250cmlidXRlZCBieSBBbmRyZXcgU3ZldGxvdiBhbmQKK1hhdmllciBkZSBHYXllIGluIDppc3N1ZTpgMTY1OTZgLikKKworVGhlIGBgcHJpbnRgYCBjb21tYW5kIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSA6bW9kOmBwZGJgLCByZXN0b3JpbmcgYWNjZXNzIHRvIHRoZQorUHl0aG9uIDpmdW5jOmBwcmludGAgZnVuY3Rpb24gZnJvbSB0aGUgcGRiIGNvbW1hbmQgbGluZS4gIFB5dGhvbjIncyBgYHBkYmBgIGRpZAorbm90IGhhdmUgYSBgYHByaW50YGAgY29tbWFuZDsgaW5zdGVhZCwgZW50ZXJpbmcgYGBwcmludGBgIGV4ZWN1dGVkIHRoZQorYGBwcmludGBgIHN0YXRlbWVudC4gIEluIFB5dGhvbjMgYGBwcmludGBgIHdhcyBtaXN0YWtlbmx5IG1hZGUgYW4gYWxpYXMgZm9yIHRoZQorcGRiIDpwZGJjbWQ6YHBgIGNvbW1hbmQuICBgYHBgYCwgaG93ZXZlciwgcHJpbnRzIHRoZSBgYHJlcHJgYCBvZiBpdHMgYXJndW1lbnQsCitub3QgdGhlIGBgc3RyYGAgbGlrZSB0aGUgUHl0aG9uMiBgYHByaW50YGAgY29tbWFuZCBkaWQuICBXb3JzZSwgdGhlIFB5dGhvbjMKK2BgcGRiIHByaW50YGAgY29tbWFuZCBzaGFkb3dlZCB0aGUgUHl0aG9uMyBgYHByaW50YGAgZnVuY3Rpb24sIG1ha2luZyBpdAoraW5hY2Nlc3NpYmxlIGF0IHRoZSBgYHBkYmBgIHByb21wdC4gIChDb250cmlidXRlZCBieSBDb25ub3IgT3Nib3JuIGluCis6aXNzdWU6YDE4NzY0YC4pCisKKworLi4gX3doYXRzbmV3LXByb3RvY29sLTQ6CisKK3BpY2tsZQorLS0tLS0tCisKKzptb2Q6YHBpY2tsZWAgbm93IHN1cHBvcnRzIChidXQgZG9lcyBub3QgdXNlIGJ5IGRlZmF1bHQpIGEgbmV3IHBpY2tsZSBwcm90b2NvbCwKK3Byb3RvY29sIDQuICBUaGlzIG5ldyBwcm90b2NvbCBhZGRyZXNzZXMgYSBudW1iZXIgb2YgaXNzdWVzIHRoYXQgd2VyZSBwcmVzZW50CitpbiBwcmV2aW91cyBwcm90b2NvbHMsIHN1Y2ggYXMgdGhlIHNlcmlhbGl6YXRpb24gb2YgbmVzdGVkIGNsYXNzZXMsIHZlcnkgbGFyZ2UKK3N0cmluZ3MgYW5kIGNvbnRhaW5lcnMsIGFuZCBjbGFzc2VzIHdob3NlIDptZXRoOmBfX25ld19fYCBtZXRob2QgdGFrZXMKK2tleXdvcmQtb25seSBhcmd1bWVudHMuICBJdCBhbHNvIHByb3ZpZGVzIHNvbWUgZWZmaWNpZW5jeSBpbXByb3ZlbWVudHMuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmAzMTU0YCAtLSBQaWNrbGUgcHJvdG9jb2wgNAorICAgICAgUEVQIHdyaXR0ZW4gYnkgQW50b2luZSBQaXRyb3UgYW5kIGltcGxlbWVudGVkIGJ5IEFsZXhhbmRyZSBWYXNzYWxvdHRpLgorCisKK3BsaXN0bGliCistLS0tLS0tLQorCis6bW9kOmBwbGlzdGxpYmAgbm93IGhhcyBhbiBBUEkgdGhhdCBpcyBzaW1pbGFyIHRvIHRoZSBzdGFuZGFyZCBwYXR0ZXJuIGZvcgorc3RkbGliIHNlcmlhbGl6YXRpb24gcHJvdG9jb2xzLCB3aXRoIG5ldyA6ZnVuYzpgfnBsaXN0bGliLmxvYWRgLAorOmZ1bmM6YH5wbGlzdGxpYi5kdW1wYCwgOmZ1bmM6YH5wbGlzdGxpYi5sb2Fkc2AsIGFuZCA6ZnVuYzpgfnBsaXN0bGliLmR1bXBzYAorZnVuY3Rpb25zLiAgKFRoZSBvbGRlciBBUEkgaXMgbm93IGRlcHJlY2F0ZWQuKSAgSW4gYWRkaXRpb24gdG8gdGhlIGFscmVhZHkKK3N1cHBvcnRlZCBYTUwgcGxpc3QgZm9ybWF0ICg6ZGF0YTpgfnBsaXN0bGliLkZNVF9YTUxgKSwgaXQgYWxzbyBub3cgc3VwcG9ydHMKK3RoZSBiaW5hcnkgcGxpc3QgZm9ybWF0ICg6ZGF0YTpgfnBsaXN0bGliLkZNVF9CSU5BUllgKS4gIChDb250cmlidXRlZCBieSBSb25hbGQKK091c3NvcmVuIGFuZCBvdGhlcnMgaW4gOmlzc3VlOmAxNDQ1NWAuKQorCisKK3BvcGxpYgorLS0tLS0tCisKK1R3byBuZXcgbWV0aG9kcyBoYXZlIGJlZW4gYWRkZWQgdG8gOm1vZDpgcG9wbGliYDogOm1ldGg6YH5wb3BsaWIuUE9QMy5jYXBhYCwKK3doaWNoIHJldHVybnMgdGhlIGxpc3Qgb2YgY2FwYWJpbGl0aWVzIGFkdmVydGlzZWQgYnkgdGhlIFBPUCBzZXJ2ZXIsIGFuZAorOm1ldGg6YH5wb3BsaWIuUE9QMy5zdGxzYCwgd2hpY2ggc3dpdGNoZXMgYSBjbGVhci10ZXh0IFBPUDMgc2Vzc2lvbiBpbnRvIGFuCitlbmNyeXB0ZWQgUE9QMyBzZXNzaW9uIGlmIHRoZSBQT1Agc2VydmVyIHN1cHBvcnRzIGl0LiAgKENvbnRyaWJ1dGVkIGJ5IExvcmVuem8KK0NhdHVjY2kgaW4gOmlzc3VlOmA0NDczYC4pCisKKworcHByaW50CistLS0tLS0KKworVGhlIDptb2Q6YHBwcmludGAgbW9kdWxlJ3MgOmNsYXNzOmB+cHByaW50LlByZXR0eVByaW50ZXJgIGNsYXNzIGFuZCBpdHMKKzpmdW5jOmB+cHByaW50LnBmb3JtYXRgLCBhbmQgOmZ1bmM6YH5wcHJpbnQucHByaW50YCBmdW5jdGlvbnMgaGF2ZSBhIG5ldworb3B0aW9uLCAqY29tcGFjdCosIHRoYXQgY29udHJvbHMgaG93IHRoZSBvdXRwdXQgaXMgZm9ybWF0dGVkLiAgQ3VycmVudGx5CitzZXR0aW5nICpjb21wYWN0KiB0byBgYFRydWVgYCBtZWFucyB0aGF0IHNlcXVlbmNlcyB3aWxsIGJlIHByaW50ZWQgd2l0aCBhcyBtYW55CitzZXF1ZW5jZSBlbGVtZW50cyBhcyB3aWxsIGZpdCB3aXRoaW4gKndpZHRoKiBvbiBlYWNoIChpbmRlbnRlZCkgbGluZS4KKyhDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTkxMzJgLikKKworTG9uZyBzdHJpbmdzIGFyZSBub3cgd3JhcHBlZCB1c2luZyBQeXRob24ncyBub3JtYWwgbGluZSBjb250aW51YXRpb24KK3N5bnRheC4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE3MTUwYC4pCisKKworcHR5CistLS0KKworOmZ1bmM6YHB0eS5zcGF3bmAgbm93IHJldHVybnMgdGhlIHN0YXR1cyB2YWx1ZSBmcm9tIDpmdW5jOmBvcy53YWl0cGlkYCBvbgordGhlIGNoaWxkIHByb2Nlc3MsIGluc3RlYWQgb2YgYGBOb25lYGAuICAoQ29udHJpYnV0ZWQgYnkgR3JlZ29yeSBQLiBTbWl0aC4pCisKKworcHlkb2MKKy0tLS0tCisKK1RoZSA6bW9kOmBweWRvY2AgbW9kdWxlIGlzIG5vdyBiYXNlZCBkaXJlY3RseSBvbiB0aGUgOmZ1bmM6YGluc3BlY3Quc2lnbmF0dXJlYAoraW50cm9zcGVjdGlvbiBBUEksIGFsbG93aW5nIGl0IHRvIHByb3ZpZGUgc2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBhIHdpZGVyCit2YXJpZXR5IG9mIGNhbGxhYmxlIG9iamVjdHMuIFRoaXMgY2hhbmdlIGFsc28gbWVhbnMgdGhhdCBgYF9fd3JhcHBlZF9fYGAKK2F0dHJpYnV0ZXMgYXJlIG5vdyB0YWtlbiBpbnRvIGFjY291bnQgd2hlbiBkaXNwbGF5aW5nIGhlbHAgaW5mb3JtYXRpb24uCisoQ29udHJpYnV0ZWQgYnkgTGFycnkgSGFzdGluZ3MgaW4gOmlzc3VlOmAxOTY3NGAuKQorCitUaGUgOm1vZDpgcHlkb2NgIG1vZHVsZSBubyBsb25nZXIgZGlzcGxheXMgdGhlIGBgc2VsZmBgIHBhcmFtZXRlciBmb3IKK2FscmVhZHkgYm91bmQgbWV0aG9kcy4gSW5zdGVhZCwgaXQgYWltcyB0byBhbHdheXMgZGlzcGxheSB0aGUgZXhhY3QgY3VycmVudAorc2lnbmF0dXJlIG9mIHRoZSBzdXBwbGllZCBjYWxsYWJsZS4gIChDb250cmlidXRlZCBieSBMYXJyeSBIYXN0aW5ncyBpbgorOmlzc3VlOmAyMDcxMGAuKQorCitJbiBhZGRpdGlvbiB0byB0aGUgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlIHRvIDptb2Q6YHB5ZG9jYCBkaXJlY3RseSwKK2l0cyBoYW5kbGluZyBvZiBjdXN0b20gYGBfX2Rpcl9fYGAgbWV0aG9kcyBhbmQgdmFyaW91cyBkZXNjcmlwdG9yCitiZWhhdmlvdXJzIGhhcyBhbHNvIGJlZW4gaW1wcm92ZWQgc3Vic3RhbnRpYWxseSBieSB0aGUgdW5kZXJseWluZyBjaGFuZ2VzIGluCit0aGUgOm1vZDpgaW5zcGVjdGAgbW9kdWxlLgorCitBcyB0aGUgOmZ1bmM6YGhlbHBgIGJ1aWx0aW4gaXMgYmFzZWQgb24gOm1vZDpgcHlkb2NgLCB0aGUgYWJvdmUgY2hhbmdlcyBhbHNvCithZmZlY3QgdGhlIGJlaGF2aW91ciBvZiA6ZnVuYzpgaGVscGAuCisKKworcmUKKy0tCisKK05ldyA6ZnVuYzpgfnJlLmZ1bGxtYXRjaGAgZnVuY3Rpb24gYW5kIDptZXRoOmAucmVnZXguZnVsbG1hdGNoYCBtZXRob2QgYW5jaG9yCit0aGUgcGF0dGVybiBhdCBib3RoIGVuZHMgb2YgdGhlIHN0cmluZyB0byBtYXRjaC4gIFRoaXMgcHJvdmlkZXMgYSB3YXkgdG8gYmUKK2V4cGxpY2l0IGFib3V0IHRoZSBnb2FsIG9mIHRoZSBtYXRjaCwgd2hpY2ggYXZvaWRzIGEgY2xhc3Mgb2Ygc3VidGxlIGJ1Z3Mgd2hlcmUKK2BgJGBgIGNoYXJhY3RlcnMgZ2V0IGxvc3QgZHVyaW5nIGNvZGUgY2hhbmdlcyBvciB0aGUgYWRkaXRpb24gb2YgYWx0ZXJuYXRpdmVzCit0byBhbiBleGlzdGluZyByZWd1bGFyIGV4cHJlc3Npb24uICAoQ29udHJpYnV0ZWQgYnkgTWF0dGhldyBCYXJuZXR0IGluCis6aXNzdWU6YDE2MjAzYC4pCisKK1RoZSByZXByIG9mIDpyZWY6YHJlZ2V4IG9iamVjdHMgPHJlLW9iamVjdHM+YCBub3cgaW5jbHVkZXMgdGhlIHBhdHRlcm4KK2FuZCB0aGUgZmxhZ3M7IHRoZSByZXByIG9mIDpyZWY6YG1hdGNoIG9iamVjdHMgPG1hdGNoLW9iamVjdHM+YCBub3cKK2luY2x1ZGVzIHRoZSBzdGFydCwgZW5kLCBhbmQgdGhlIHBhcnQgb2YgdGhlIHN0cmluZyB0aGF0IG1hdGNoZWQuICAoQ29udHJpYnV0ZWQKK2J5IEh1Z28gTG9wZXMgVGF2YXJlcyBhbmQgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDEzNTkyYCBhbmQKKzppc3N1ZTpgMTcwODdgLikKKworCityZXNvdXJjZQorLS0tLS0tLS0KKworTmV3IDpmdW5jOmB+cmVzb3VyY2UucHJsaW1pdGAgZnVuY3Rpb24sIGF2YWlsYWJsZSBvbiBMaW51eCBwbGF0Zm9ybXMgd2l0aCBhCitrZXJuZWwgdmVyc2lvbiBvZiAyLjYuMzYgb3IgbGF0ZXIgYW5kIGdsaWJjIG9mIDIuMTMgb3IgbGF0ZXIsIHByb3ZpZGVzIHRoZQorYWJpbGl0eSB0byBxdWVyeSBvciBzZXQgdGhlIHJlc291cmNlIGxpbWl0cyBmb3IgcHJvY2Vzc2VzIG90aGVyIHRoYW4gdGhlIG9uZQorbWFraW5nIHRoZSBjYWxsLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNjU5NWAuKQorCitPbiBMaW51eCBrZXJuZWwgdmVyc2lvbiAyLjYuMzYgb3IgbGF0ZXIsIHRoZXJlIGFyZSB0aGVyZSBhcmUgYWxzbyBzb21lIG5ldworTGludXggc3BlY2lmaWMgY29uc3RhbnRzOiA6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9NU0dRVUVVRWAsCis6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9OSUNFYCwgOmF0dHI6YH5yZXNvdXJjZS5STElNSVRfUlRQUklPYCwKKzphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1JUVElNRWAsIGFuZCA6YXR0cjpgfnJlc291cmNlLlJMSU1JVF9TSUdQRU5ESU5HYC4KKyhDb250cmlidXRlZCBieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTkzMjRgLikKKworT24gRnJlZUJTRCB2ZXJzaW9uIDkgYW5kIGxhdGVyLCB0aGVyZSBzb21lIG5ldyBGcmVlQlNEIHNwZWNpZmljIGNvbnN0YW50czoKKzphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1NCU0laRWAsIDphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX1NXQVBgLCBhbmQKKzphdHRyOmB+cmVzb3VyY2UuUkxJTUlUX05QVFNgLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbgorOmlzc3VlOmAxOTM0M2AuKQorCisKK3NlbGVjdAorLS0tLS0tCisKKzpjbGFzczpgfnNlbGVjdC5lcG9sbGAgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgorV2hlbiB1c2VkIGluIGEgOmtleXdvcmQ6YHdpdGhgIHN0YXRlbWVudCwgdGhlIDptZXRoOmB+c2VsZWN0LmVwb2xsLmNsb3NlYAorbWV0aG9kIHdpbGwgYmUgY2FsbGVkIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGVuZCBvZiB0aGUgYmxvY2suICAoQ29udHJpYnV0ZWQKK2J5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxNjQ4OGAuKQorCis6Y2xhc3M6YH5zZWxlY3QuZGV2cG9sbGAgb2JqZWN0cyBub3cgaGF2ZSA6bWV0aDpgfnNlbGVjdC5kZXZwb2xsLmZpbGVub2AgYW5kCis6bWV0aDpgfnNlbGVjdC5kZXZwb2xsLmNsb3NlYCBtZXRob2RzLCBhcyB3ZWxsIGFzIGEgbmV3IGF0dHJpYnV0ZQorOmF0dHI6YH5zZWxlY3QuZGV2cG9sbC5jbG9zZWRgLiAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGluCis6aXNzdWU6YDE4Nzk0YC4pCisKKworc2hlbHZlCistLS0tLS0KKworOmNsYXNzOmB+c2hlbHZlLlNoZWxmYCBpbnN0YW5jZXMgbWF5IG5vdyBiZSB1c2VkIGluIDprZXl3b3JkOmB3aXRoYCBzdGF0ZW1lbnRzLAorYW5kIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbG9zZWQgYXQgdGhlIGVuZCBvZiB0aGUgOmtleXdvcmQ6YHdpdGhgIGJsb2NrLgorKENvbnRyaWJ1dGVkIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kgaW4gOmlzc3VlOmAxMzg5NmAuKQorCisKK3NodXRpbAorLS0tLS0tCisKKzpmdW5jOmB+c2h1dGlsLmNvcHlmaWxlYCBub3cgcmFpc2VzIGEgc3BlY2lmaWMgOmV4YzpgfnNodXRpbC5FcnJvcmAgc3ViY2xhc3MsCis6ZXhjOmB+c2h1dGlsLlNhbWVGaWxlRXJyb3JgLCB3aGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZQorZmlsZSwgd2hpY2ggYWxsb3dzIGFuIGFwcGxpY2F0aW9uIHRvIHRha2UgYXBwcm9wcmlhdGUgYWN0aW9uIG9uIHRoaXMgc3BlY2lmaWMKK2Vycm9yLiAgKENvbnRyaWJ1dGVkIGJ5IEF0c3VvIElzaGltb3RvIGFuZCBIeW5layBTY2hsYXdhY2sgaW4KKzppc3N1ZTpgMTQ5MjcwNGAuKQorCisKK3NtdHBkCistLS0tLQorCitUaGUgOmNsYXNzOmB+c210cGQuU01UUFNlcnZlcmAgYW5kIDpjbGFzczpgfnNtdHBkLlNNVFBDaGFubmVsYCBjbGFzc2VzIG5vdworYWNjZXB0IGEgKm1hcCoga2V5d29yZCBhcmd1bWVudCB3aGljaCwgaWYgc3BlY2lmaWVkLCBpcyBwYXNzZWQgaW4gdG8KKzpjbGFzczpgYXN5bmNoYXQuYXN5bmNfY2hhdGAgYXMgaXRzICptYXAqIGFyZ3VtZW50LiAgVGhpcyBhbGxvd3MgYW4gYXBwbGljYXRpb24KK3RvIGF2b2lkIGFmZmVjdGluZyB0aGUgZ2xvYmFsIHNvY2tldCBtYXAuICAoQ29udHJpYnV0ZWQgYnkgVmluYXkgU2FqaXAgaW4KKzppc3N1ZTpgMTE5NTlgLikKKworCitzbXRwbGliCistLS0tLS0tCisKKzpleGM6YH5zbXRwbGliLlNNVFBFeGNlcHRpb25gIGlzIG5vdyBhIHN1YmNsYXNzIG9mIDpleGM6YE9TRXJyb3JgLCB3aGljaCBhbGxvd3MKK2JvdGggc29ja2V0IGxldmVsIGVycm9ycyBhbmQgU01UUCBwcm90b2NvbCBsZXZlbCBlcnJvcnMgdG8gYmUgY2F1Z2h0IGluIG9uZQordHJ5L2V4Y2VwdCBzdGF0ZW1lbnQgYnkgY29kZSB0aGF0IG9ubHkgY2FyZXMgd2hldGhlciBvciBub3QgYW4gZXJyb3Igb2NjdXJyZWQuCisoQ29udHJpYnV0ZWQgYnkgTmVkIEphY2tzb24gTG92ZWx5IGluIDppc3N1ZTpgMjExOGAuKQorCisKK3NvY2tldAorLS0tLS0tCisKK1RoZSBzb2NrZXQgbW9kdWxlIG5vdyBzdXBwb3J0cyB0aGUgOmRhdGE6YH5zb2NrZXQuQ0FOX0JDTWAgcHJvdG9jb2wgb24KK3BsYXRmb3JtcyB0aGF0IHN1cHBvcnQgaXQuICAoQ29udHJpYnV0ZWQgYnkgQnJpYW4gVGhvcm5lIGluIDppc3N1ZTpgMTUzNTlgLikKKworU29ja2V0IG9iamVjdHMgaGF2ZSBuZXcgbWV0aG9kcyB0byBnZXQgb3Igc2V0IHRoZWlyIDpyZWY6YGluaGVyaXRhYmxlIGZsYWcKKzxmZF9pbmhlcml0YW5jZT5gLCA6bWV0aDpgfnNvY2tldC5zb2NrZXQuZ2V0X2luaGVyaXRhYmxlYCBhbmQKKzptZXRoOmB+c29ja2V0LnNvY2tldC5zZXRfaW5oZXJpdGFibGVgLgorCitUaGUgYGBzb2NrZXQuQUZfKmBgIGFuZCBgYHNvY2tldC5TT0NLXypgYCBjb25zdGFudHMgYXJlIG5vdyBlbnVtZXJhdGlvbiB2YWx1ZXMKK3VzaW5nIHRoZSBuZXcgOm1vZDpgZW51bWAgbW9kdWxlLiAgVGhpcyBhbGxvd3MgbWVhbmluZ2Z1bCBuYW1lcyB0byBiZSBwcmludGVkCitkdXJpbmcgZGVidWdnaW5nLCBpbnN0ZWFkIG9mIGludGVnZXIgIm1hZ2ljIG51bWJlcnMiLgorCitUaGUgOmRhdGE6YH5zb2NrZXQuQUZfTElOS2AgY29uc3RhbnQgaXMgbm93IGF2YWlsYWJsZSBvbiBCU0QgYW5kIE9TWC4KKworOmZ1bmM6YH5zb2NrZXQuaW5ldF9wdG9uYCBhbmQgOmZ1bmM6YH5zb2NrZXQuaW5ldF9udG9wYCBhcmUgbm93IHN1cHBvcnRlZAorb24gV2luZG93cy4gIChDb250cmlidXRlZCBieSBBdHN1byBJc2hpbW90byBpbiA6aXNzdWU6YDcxNzFgLikKKworCitzcWxpdGUzCistLS0tLS0tCisKK0EgbmV3IGJvb2xlYW4gcGFyYW1ldGVyIHRvIHRoZSA6ZnVuYzpgfnNxbGl0ZTMuY29ubmVjdGAgZnVuY3Rpb24sICp1cmkqLCBjYW4gYmUKK3VzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgKmRhdGFiYXNlKiBwYXJhbWV0ZXIgaXMgYSBgYHVyaWBgIChzZWUgdGhlIGBTUUxpdGUKK1VSSSBkb2N1bWVudGF0aW9uIDxodHRwOi8vd3d3LnNxbGl0ZS5vcmcvdXJpLmh0bWw+YF8pLiAgKENvbnRyaWJ1dGVkIGJ5IHBvcSBpbgorOmlzc3VlOmAxMzc3M2AuKQorCisKK3NzbAorLS0tCisKKy4uIF93aGF0c25ldy10bHMtMTEtMTI6CisKKzpkYXRhOmB+c3NsLlBST1RPQ09MX1RMU3YxXzFgIGFuZCA6ZGF0YTpgfnNzbC5QUk9UT0NPTF9UTFN2MV8yYCAoVExTdjEuMSBhbmQKK1RMU3YxLjIgc3VwcG9ydCkgaGF2ZSBiZWVuIGFkZGVkOyBzdXBwb3J0IGZvciB0aGVzZSBwcm90b2NvbHMgaXMgb25seSBhdmFpbGFibGUgaWYKK1B5dGhvbiBpcyBsaW5rZWQgd2l0aCBPcGVuU1NMIDEuMC4xIG9yIGxhdGVyLiAgKENvbnRyaWJ1dGVkIGJ5IE1pY2hlbGUgT3Jyw7kgYW5kCitBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE2NjkyYC4pCisKKy4uIF93aGF0c25ldzM0LXNzbGNvbnRleHQ6CisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgfnNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0YCBwcm92aWRlcyBhIHN0YW5kYXJkIHdheSB0bworb2J0YWluIGFuIDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCB3aG9zZSBzZXR0aW5ncyBhcmUgaW50ZW5kZWQgdG8gYmUgYQorcmVhc29uYWJsZSBiYWxhbmNlIGJldHdlZW4gY29tcGF0aWJpbGl0eSBhbmQgc2VjdXJpdHkuICBUaGVzZSBzZXR0aW5ncyBhcmUKK21vcmUgc3RyaW5nZW50IHRoYW4gdGhlIGRlZmF1bHRzIHByb3ZpZGVkIGJ5IHRoZSA6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAKK2NvbnN0cnVjdG9yLCBhbmQgbWF5IGJlIGFkanVzdGVkIGluIHRoZSBmdXR1cmUsIHdpdGhvdXQgcHJpb3IgZGVwcmVjYXRpb24sIGlmCitiZXN0LXByYWN0aWNlIHNlY3VyaXR5IHJlcXVpcmVtZW50cyBjaGFuZ2UuICBUaGUgbmV3IHJlY29tbWVuZGVkIGJlc3QKK3ByYWN0aWNlIGZvciB1c2luZyBzdGRsaWIgbGlicmFyaWVzIHRoYXQgc3VwcG9ydCBTU0wgaXMgdG8gdXNlCis6ZnVuYzpgfnNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0YCB0byBvYnRhaW4gYW4gOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgCitvYmplY3QsIG1vZGlmeSBpdCBpZiBuZWVkZWQsIGFuZCB0aGVuIHBhc3MgaXQgYXMgdGhlICpjb250ZXh0KiBhcmd1bWVudAorb2YgdGhlIGFwcHJvcHJpYXRlIHN0ZGxpYiBBUEkuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcworaW4gOmlzc3VlOmAxOTY4OWAuKQorCis6Y2xhc3M6YH5zc2wuU1NMQ29udGV4dGAgbWV0aG9kIDptZXRoOmB+c3NsLlNTTENvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zYAorYWNjZXB0cyBhIG5ldyBvcHRpb25hbCBhcmd1bWVudCAqY2FkYXRhKiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gcHJvdmlkZSBQRU0gb3IKK0RFUiBlbmNvZGVkIGNlcnRpZmljYXRlcyBkaXJlY3RseSB2aWEgc3RyaW5ncyBvciBieXRlcywgcmVzcGVjdGl2ZWx5LgorKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODEzOGAuKQorCitOZXcgZnVuY3Rpb24gOmZ1bmM6YH5zc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzYCByZXR1cm5zCithIG5hbWVkIHR1cGxlIG9mIHRoZSBwYXRocyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgdGhlCis6bWV0aDpgfnNzbC5TU0xDb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc2AgbWV0aG9kIHVzZXMgdG8gc2V0CitPcGVuU1NMJ3MgZGVmYXVsdCBgYGNhZmlsZWBgIGFuZCBgYGNhcGF0aGBgLiAgVGhpcyBjYW4gYmUgYW4gYWlkIGluCitkZWJ1Z2dpbmcgZGVmYXVsdCB2ZXJpZmljYXRpb24gaXNzdWVzLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMKK2luIDppc3N1ZTpgMTgxNDNgLikKKworOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIGhhcyBhIG5ldyBtZXRob2QsCis6bWV0aDpgfnNzbC5TU0xDb250ZXh0LmNlcnRfc3RvcmVfc3RhdHNgLCB0aGF0IHJlcG9ydHMgdGhlIG51bWJlciBvZiBsb2FkZWQKK2BgWC41MDlgYCBjZXJ0cywgYGBYLjUwOSBDQWBgIGNlcnRzLCBhbmQgY2VydGlmaWNhdGUgcmV2b2NhdGlvbiBsaXN0cyAoYGBjcmxgYFwKK3MpLCBhcyB3ZWxsIGFzIGEgOm1ldGg6YH5zc2wuU1NMQ29udGV4dC5nZXRfY2FfY2VydHNgIG1ldGhvZCB0aGF0IHJldHVybnMgYQorbGlzdCBvZiB0aGUgbG9hZGVkIGBgQ0FgYCBjZXJ0aWZpY2F0ZXMuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbgorOmlzc3VlOmAxODE0N2AuKQorCitJZiBPcGVuU1NMIDAuOS44IG9yIGxhdGVyIGlzIGF2YWlsYWJsZSwgOmNsYXNzOmB+c3NsLlNTTENvbnRleHRgIGhhcyBhbiBuZXcKK2F0dHJpYnV0ZSA6YXR0cjpgfnNzbC5TU0xDb250ZXh0LnZlcmlmeV9mbGFnc2AgdGhhdCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZQorY2VydGlmaWNhdGUgdmVyaWZpY2F0aW9uIHByb2Nlc3MgYnkgc2V0dGluZyBpdCB0byBzb21lIGNvbWJpbmF0aW9uIG9mIHRoZSBuZXcKK2NvbnN0YW50cyA6ZGF0YTpgfnNzbC5WRVJJRllfREVGQVVMVGAsIDpkYXRhOmB+c3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRmAsCis6ZGF0YTpgfnNzbC5WRVJJRllfQ1JMX0NIRUNLX0NIQUlOYCwgb3IgOmRhdGE6YH5zc2wuVkVSSUZZX1g1MDlfU1RSSUNUYC4KK09wZW5TU0wgZG9lcyBub3QgZG8gYW55IENSTCB2ZXJpZmljYXRpb24gYnkgZGVmYXVsdC4gIChDb250cmlidXRlZCBieQorQ2hyaXN0aWVuIEhlaW1lcyBpbiA6aXNzdWU6YDg4MTNgLikKKworTmV3IDpjbGFzczpgfnNzbC5TU0xDb250ZXh0YCBtZXRob2QgOm1ldGg6YH5zc2wuU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHNgCitsb2FkcyBhIHNldCBvZiBkZWZhdWx0ICJjZXJ0aWZpY2F0ZSBhdXRob3JpdHkiIChDQSkgY2VydGlmaWNhdGVzIGZyb20gZGVmYXVsdAorbG9jYXRpb25zLCB3aGljaCB2YXJ5IGFjY29yZGluZyB0byB0aGUgcGxhdGZvcm0uICBJdCBjYW4gYmUgdXNlZCB0byBsb2FkIGJvdGgKK1RMUyB3ZWIgc2VydmVyIGF1dGhlbnRpY2F0aW9uIGNlcnRpZmljYXRlcworKGBgcHVycG9zZT1gYDpkYXRhOmB+c3NsLlB1cnBvc2UuU0VSVkVSX0FVVEhgKSBmb3IgYSBjbGllbnQgdG8gdXNlIHRvIHZlcmlmeSBhCitzZXJ2ZXIsIGFuZCBjZXJ0aWZpY2F0ZXMgZm9yIGEgc2VydmVyIHRvIHVzZSBpbiB2ZXJpZnlpbmcgY2xpZW50IGNlcnRpZmljYXRlcworKGBgcHVycG9zZT1gYDpkYXRhOmB+c3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEhgKS4gIChDb250cmlidXRlZCBieSBDaHJpc3RpYW4KK0hlaW1lcyBpbiA6aXNzdWU6YDE5MjkyYC4pCisKKy4uIF93aGF0c25ldzM0LXdpbi1jZXJ0LXN0b3JlOgorCitUd28gbmV3IHdpbmRvd3Mtb25seSBmdW5jdGlvbnMsIDpmdW5jOmB+c3NsLmVudW1fY2VydGlmaWNhdGVzYCBhbmQKKzpmdW5jOmB+c3NsLmVudW1fY3Jsc2AgcHJvdmlkZSB0aGUgYWJpbGl0eSB0byByZXRyaWV2ZSBjZXJ0aWZpY2F0ZXMsCitjZXJ0aWZpY2F0ZSBpbmZvcm1hdGlvbiwgYW5kIENSTHMgZnJvbSB0aGUgV2luZG93cyBjZXJ0IHN0b3JlLiAgKENvbnRyaWJ1dGVkCitieSBDaHJpc3RpYW4gSGVpbWVzIGluIDppc3N1ZTpgMTcxMzRgLikKKworLi4gX3doYXRzbmV3MzQtc25pOgorCitTdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBTTkkgKFNlcnZlciBOYW1lIEluZGljYXRpb24pIHVzaW5nIHRoZSBuZXcKKzptZXRoOmBzc2wuU1NMQ29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFja2AgbWV0aG9kLgorKENvbnRyaWJ1dGVkIGJ5IERhbmllbCBCbGFjayBpbiA6aXNzdWU6YDgxMDlgLikKKworVGhlIGRpY3Rpb25hcnkgcmV0dXJuZWQgYnkgOm1ldGg6YC5TU0xTb2NrZXQuZ2V0cGVlcmNlcnRgIGNvbnRhaW5zIGFkZGl0aW9uYWwKK2BgWDUwOXYzYGAgZXh0ZW5zaW9uIGl0ZW1zOiBgYGNybERpc3RyaWJ1dGlvblBvaW50c2BgLCBgYGNhbElzc3VlcnNgYCwgYW5kCitgYE9DU1BgYCBVUklzLiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxODM3OWAuKQorCisKK3N0YXQKKy0tLS0KKworVGhlIDptb2Q6YHN0YXRgIG1vZHVsZSBpcyBub3cgYmFja2VkIGJ5IGEgQyBpbXBsZW1lbnRhdGlvbiBpbiA6bW9kOmBfc3RhdGAuIEEgQworaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQgYXMgbW9zdCBvZiB0aGUgdmFsdWVzIGFyZW4ndCBzdGFuZGFyZGl6ZWQgYW5kCithcmUgcGxhdGZvcm0tZGVwZW5kZW50LiAgKENvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxMTAxNmAuKQorCitUaGUgbW9kdWxlIHN1cHBvcnRzIG5ldyA6bW9kOmB+c3RhdC5TVF9NT0RFYCBmbGFncywgOm1vZDpgfnN0YXQuU19JRkRPT1JgLAorOmF0dHI6YH5zdGF0LlNfSUZQT1JUYCwgYW5kIDphdHRyOmB+c3RhdC5TX0lGV0hUYC4gIChDb250cmlidXRlZCBieQorQ2hyaXN0aWFuIEhpZW1lcyBpbiA6aXNzdWU6YDExMDE2YC4pCisKKworc3RydWN0CistLS0tLS0KKworTmV3IGZ1bmN0aW9uIDptb2Q6YH5zdHJ1Y3QuaXRlcl91bnBhY2tgIGFuZCBhIG5ldworOm1ldGg6YHN0cnVjdC5TdHJ1Y3QuaXRlcl91bnBhY2tgIG1ldGhvZCBvbiBjb21waWxlZCBmb3JtYXRzIHByb3ZpZGUgc3RyZWFtZWQKK3VucGFja2luZyBvZiBhIGJ1ZmZlciBjb250YWluaW5nIHJlcGVhdGVkIGluc3RhbmNlcyBvZiBhIGdpdmVuIGZvcm1hdCBvZiBkYXRhLgorKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTc4MDRgLikKKworCitzdWJwcm9jZXNzCistLS0tLS0tLS0tCisKKzpmdW5jOmB+c3VicHJvY2Vzcy5jaGVja19vdXRwdXRgIG5vdyBhY2NlcHRzIGFuICppbnB1dCogYXJndW1lbnQgdGhhdCBjYW4KK2JlIHVzZWQgdG8gcHJvdmlkZSB0aGUgY29udGVudHMgb2YgYGBzdGRpbmBgIGZvciB0aGUgY29tbWFuZCB0aGF0IGlzIHJ1bi4KKyhDb250cmlidXRlZCBieSBaYWNrIFdlaW5iZXJnIGluIDppc3N1ZTpgMTY2MjRgLikKKworOmZ1bmM6YH5zdWJwcm9jZXNzLmdldHN0YXR1c2AgYW5kIDpmdW5jOmB+c3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXRgIG5vdword29yayBvbiBXaW5kb3dzLiAgVGhpcyBjaGFuZ2Ugd2FzIGFjdHVhbGx5IGluYWR2ZXJ0ZW50bHkgbWFkZSBpbiAzLjMuNC4KKyhDb250cmlidXRlZCBieSBUaW0gR29sZGVuIGluIDppc3N1ZTpgMTAxOTdgLikKKworCitzdW5hdQorLS0tLS0KKworVGhlIDptZXRoOmB+c3VuYXUuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE4OTAxYC4pCisKKzptZXRoOmBzdW5hdS5vcGVuYCBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbDogd2hlbiB1c2VkIGluIGEKKzprZXl3b3JkOmB3aXRoYCBibG9jaywgdGhlIGBgY2xvc2VgYCBtZXRob2Qgb2YgdGhlIHJldHVybmVkIG9iamVjdCB3aWxsIGJlCitjYWxsZWQgYXV0b21hdGljYWxseSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jay4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthCitpbiA6aXNzdWU6YDE4ODc4YC4pCisKKzptZXRoOmAuQVVfd3JpdGUuc2V0c2FtcHdpZHRoYCBub3cgc3VwcG9ydHMgMjQgYml0IHNhbXBsZXMsIHRodXMgYWRkaW5nCitzdXBwb3J0IGZvciB3cml0aW5nIDI0IHNhbXBsZSB1c2luZyB0aGUgbW9kdWxlLiAgKENvbnRyaWJ1dGVkIGJ5CitTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTkyNjFgLikKKworVGhlIDptZXRoOmB+c3VuYXUuQVVfd3JpdGUud3JpdGVmcmFtZXNyYXdgIGFuZAorOm1ldGg6YH5zdW5hdS5BVV93cml0ZS53cml0ZWZyYW1lc2AgbWV0aG9kcyBub3cgYWNjZXB0IGFueSA6dGVybTpgYnl0ZXMtbGlrZQorb2JqZWN0YC4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgODMxMWAuKQorCisKK3N5cworLS0tCisKK05ldyBmdW5jdGlvbiA6ZnVuYzpgc3lzLmdldGFsbG9jYXRlZGJsb2Nrc2AgcmV0dXJucyB0aGUgY3VycmVudCBudW1iZXIgb2YKK2Jsb2NrcyBhbGxvY2F0ZWQgYnkgdGhlIGludGVycHJldGVyLiAgKEluIENQeXRob24gd2l0aCB0aGUgZGVmYXVsdAorYGAtLXdpdGgtcHltYWxsb2NgYCBzZXR0aW5nLCB0aGlzIGlzIGFsbG9jYXRpb25zIG1hZGUgdGhyb3VnaCB0aGUKKzpjOmZ1bmM6YFB5T2JqZWN0X01hbGxvY2AgQVBJLikgIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgdHJhY2tpbmcgbWVtb3J5IGxlYWtzLAorZXNwZWNpYWxseSBpZiBhdXRvbWF0ZWQgdmlhIGEgdGVzdCBzdWl0ZS4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdQoraW4gOmlzc3VlOmAxMzM5MGAuKQorCitXaGVuIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgc3RhcnRzIGluIDpyZWY6YGludGVyYWN0aXZlIG1vZGUKKzx0dXQtaW50ZXJhY3RpdmU+YCwgaXQgY2hlY2tzIGZvciBhbiA6ZGF0YTpgfnN5cy5fX2ludGVyYWN0aXZlaG9va19fYCBhdHRyaWJ1dGUKK29uIHRoZSA6bW9kOmBzeXNgIG1vZHVsZS4gIElmIHRoZSBhdHRyaWJ1dGUgZXhpc3RzLCBpdHMgdmFsdWUgaXMgY2FsbGVkIHdpdGggbm8KK2FyZ3VtZW50cyBqdXN0IGJlZm9yZSBpbnRlcmFjdGl2ZSBtb2RlIGlzIHN0YXJ0ZWQuICBUaGUgY2hlY2sgaXMgbWFkZSBhZnRlciB0aGUKKzplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgIGZpbGUgaXMgcmVhZCwgc28gaXQgY2FuIGJlIHNldCB0aGVyZS4gIFRoZSA6bW9kOmBzaXRlYAorbW9kdWxlIDpyZWY6YHNldHMgaXQgPHJsY29tcGxldGVyLWNvbmZpZz5gIHRvIGEgZnVuY3Rpb24gdGhhdCBlbmFibGVzIHRhYgorY29tcGxldGlvbiBhbmQgaGlzdG9yeSBzYXZpbmcgKGluIDpmaWxlOmB+Ly5weXRob24taGlzdG9yeWApIGlmIHRoZSBwbGF0Zm9ybQorc3VwcG9ydHMgOm1vZDpgcmVhZGxpbmVgLiAgSWYgeW91IGRvIG5vdCB3YW50IHRoaXMgKG5ldykgYmVoYXZpb3IsIHlvdSBjYW4KK292ZXJyaWRlIGl0IGluIDplbnZ2YXI6YFBZVEhPTlNUQVJUVVBgLCA6bW9kOmBzaXRlY3VzdG9taXplYCwgb3IKKzptb2Q6YHVzZXJjdXN0b21pemVgIGJ5IGRlbGV0aW5nIHRoaXMgYXR0cmlidXRlIGZyb20gOm1vZDpgc3lzYCAob3Igc2V0dGluZyBpdAordG8gc29tZSBvdGhlciBjYWxsYWJsZSkuICAoQ29udHJpYnV0ZWQgYnkgw4lyaWMgQXJhdWpvIGFuZCBBbnRvaW5lIFBpdHJvdSBpbgorOmlzc3VlOmA1ODQ1YC4pCisKKwordGFyZmlsZQorLS0tLS0tLQorCitUaGUgOm1vZDpgdGFyZmlsZWAgbW9kdWxlIG5vdyBzdXBwb3J0cyBhIHNpbXBsZSA6cmVmOmB0YXJmaWxlLWNvbW1hbmRsaW5lYCB3aGVuCitjYWxsZWQgYXMgYSBzY3JpcHQgZGlyZWN0bHkgb3IgdmlhIGBgLW1gYC4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGFuZAorZXh0cmFjdCB0YXJmaWxlIGFyY2hpdmVzLiAgKENvbnRyaWJ1dGVkIGJ5IEJlcmtlciBQZWtzYWcgaW4gOmlzc3VlOmAxMzQ3N2AuKQorCisKK3RleHR3cmFwCistLS0tLS0tLQorCitUaGUgOmNsYXNzOmB+dGV4dHdyYXAuVGV4dFdyYXBwZXJgIGNsYXNzIGhhcyB0d28gbmV3IGF0dHJpYnV0ZXMvY29uc3RydWN0b3IKK2FyZ3VtZW50czogOmF0dHI6YH50ZXh0d3JhcC5UZXh0V3JhcHBlci5tYXhfbGluZXNgLCB3aGljaCBsaW1pdHMgdGhlIG51bWJlciBvZgorbGluZXMgaW4gdGhlIG91dHB1dCwgYW5kIDphdHRyOmB+dGV4dHdyYXAuVGV4dFdyYXBwZXIucGxhY2Vob2xkZXJgLCB3aGljaCBpcyBhCitzdHJpbmcgdGhhdCB3aWxsIGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBvdXRwdXQgaWYgaXQgaGFzIGJlZW4gdHJ1bmNhdGVkCitiZWNhdXNlIG9mICptYXhfbGluZXMqLiAgQnVpbGRpbmcgb24gdGhlc2UgY2FwYWJpbGl0aWVzLCBhIG5ldyBjb252ZW5pZW5jZQorZnVuY3Rpb24gOmZ1bmM6YH50ZXh0d3JhcC5zaG9ydGVuYCBjb2xsYXBzZXMgYWxsIG9mIHRoZSB3aGl0ZXNwYWNlIGluIHRoZSBpbnB1dAordG8gc2luZ2xlIHNwYWNlcyBhbmQgcHJvZHVjZXMgYSBzaW5nbGUgbGluZSBvZiBhIGdpdmVuICp3aWR0aCogdGhhdCBlbmRzIHdpdGgKK3RoZSAqcGxhY2Vob2xkZXIqIChieSBkZWZhdWx0LCBgYFsuLi5dYGApLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGFuZAorU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE4NTg1YCBhbmQgOmlzc3VlOmAxODcyNWAuKQorCisKK3RocmVhZGluZworLS0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH50aHJlYWRpbmcuVGhyZWFkYCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBtYWluIHRocmVhZCBjYW4gYmUKK29idGFpbmVkIGZyb20gdGhlIG5ldyA6ZnVuYzpgfnRocmVhZGluZy5tYWluX3RocmVhZGAgZnVuY3Rpb24uICBJbiBub3JtYWwKK2NvbmRpdGlvbnMgdGhpcyB3aWxsIGJlIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUgUHl0aG9uIGludGVycHJldGVyIHdhcworc3RhcnRlZC4gIChDb250cmlidXRlZCBieSBBbmRyZXcgU3ZldGxvdiBpbiA6aXNzdWU6YDE4ODgyYC4pCisKKwordHJhY2ViYWNrCistLS0tLS0tLS0KKworQSBuZXcgOmZ1bmM6YHRyYWNlYmFjay5jbGVhcl9mcmFtZXNgIGZ1bmN0aW9uIHRha2VzIGEgdHJhY2ViYWNrIG9iamVjdAorYW5kIGNsZWFycyB0aGUgbG9jYWwgdmFyaWFibGVzIGluIGFsbCBvZiB0aGUgZnJhbWVzIGl0IHJlZmVyZW5jZXMsCityZWR1Y2luZyB0aGUgYW1vdW50IG9mIG1lbW9yeSBjb25zdW1lZC4gIChDb250cmlidXRlZCBieSBBbmRyZXcgS3VjaGxpbmcgaW4KKzppc3N1ZTpgMTU2NTUyNWAuKQorCisKK3R5cGVzCistLS0tLQorCitBIG5ldyA6ZnVuYzpgfnR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZWAgZGVzY3JpcHRvciBwcm92aWRlcyBhIHdheSB0byBkZWZpbmUKK2FuIGF0dHJpYnV0ZSB0aGF0IGFjdHMgbm9ybWFsbHkgd2hlbiBsb29rZWQgdXAgdGhyb3VnaCBhbiBpbnN0YW5jZSBvYmplY3QsIGJ1dAord2hpY2ggaXMgcm91dGVkIHRvIHRoZSAqY2xhc3MqIGBgX19nZXRhdHRyX19gYCB3aGVuIGxvb2tlZCB1cCB0aHJvdWdoIHRoZQorY2xhc3MuICBUaGlzIGFsbG93cyBvbmUgdG8gaGF2ZSBwcm9wZXJ0aWVzIGFjdGl2ZSBvbiBhIGNsYXNzLCBhbmQgaGF2ZSB2aXJ0dWFsCithdHRyaWJ1dGVzIG9uIHRoZSBjbGFzcyB3aXRoIHRoZSBzYW1lIG5hbWUgKHNlZSA6bW9kOmBFbnVtYCBmb3IgYW4gZXhhbXBsZSkuCisoQ29udHJpYnV0ZWQgYnkgRXRoYW4gRnVybWFuIGluIDppc3N1ZTpgMTkwMzBgLikKKworCit1cmxsaWIKKy0tLS0tLQorCis6bW9kOmB1cmxsaWIucmVxdWVzdGAgbm93IHN1cHBvcnRzIGBgZGF0YTpgYCBVUkxzIHZpYSB0aGUKKzpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LkRhdGFIYW5kbGVyYCBjbGFzcy4gIChDb250cmlidXRlZCBieSBNYXRoaWFzIFBhbnplbmLDtmNrCitpbiA6aXNzdWU6YDE2NDIzYC4pCisKK1RoZSBodHRwIG1ldGhvZCB0aGF0IHdpbGwgYmUgdXNlZCBieSBhIDpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgIGNsYXNzCitjYW4gbm93IGJlIHNwZWNpZmllZCBieSBzZXR0aW5nIGEgOmNsYXNzOmB+dXJsbGliLnJlcXVlc3QuUmVxdWVzdC5tZXRob2RgCitjbGFzcyBhdHRyaWJ1dGUgb24gdGhlIHN1YmNsYXNzLiAgKENvbnRyaWJ1dGVkIGJ5IEphc29uIFIgQ29vbWJzIGluCis6aXNzdWU6YDE4OTc4YC4pCisKKzpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgIG9iamVjdHMgYXJlIG5vdyByZXVzYWJsZTogaWYgdGhlCis6YXR0cjpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3QuZnVsbF91cmxgIG9yIDphdHRyOmB+dXJsbGliLnJlcXVlc3QuUmVxdWVzdC5kYXRhYAorYXR0cmlidXRlcyBhcmUgbW9kaWZpZWQsIGFsbCByZWxldmFudCBpbnRlcm5hbCBwcm9wZXJ0aWVzIGFyZSB1cGRhdGVkLiAgVGhpcworbWVhbnMsIGZvciBleGFtcGxlLCB0aGF0IGl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgdGhlIHNhbWUKKzpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgIG9iamVjdCBpbiBtb3JlIHRoYW4gb25lCis6bWV0aDpgLk9wZW5lckRpcmVjdG9yLm9wZW5gIGNhbGwgd2l0aCBkaWZmZXJlbnQgKmRhdGEqIGFyZ3VtZW50cywgb3IgdG8KK21vZGlmeSBhIDpjbGFzczpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgXCAncyBgYHVybGBgIHJhdGhlciB0aGFuIHJlY29tcHV0aW5nIGl0Citmcm9tIHNjcmF0Y2guICBUaGVyZSBpcyBhbHNvIGEgbmV3Cis6bWV0aDpgfnVybGxpYi5yZXF1ZXN0LlJlcXVlc3QucmVtb3ZlX2hlYWRlcmAgbWV0aG9kIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVtb3ZlCitoZWFkZXJzIGZyb20gYSA6Y2xhc3M6YH51cmxsaWIucmVxdWVzdC5SZXF1ZXN0YC4gIChDb250cmlidXRlZCBieSBBbGV4ZXkKK0thY2hheWV2IGluIDppc3N1ZTpgMTY0NjRgLCBEYW5pZWwgV296bmlhayBpbiA6aXNzdWU6YDE3NDg1YCwgYW5kIERhbWllbiBCcmVjaHQKK2FuZCBTZW50aGlsIEt1bWFyYW4gaW4gOmlzc3VlOmAxNzI3MmAuKQorCis6Y2xhc3M6YH51cmxsaWIuZXJyb3IuSFRUUEVycm9yYCBvYmplY3RzIG5vdyBoYXZlIGEKKzphdHRyOmB+dXJsbGliLmVycm9yLkhUVFBFcnJvci5oZWFkZXJzYCBhdHRyaWJ1dGUgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlCitIVFRQIHJlc3BvbnNlIGhlYWRlcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcnJvci4gIChDb250cmlidXRlZCBieQorQmVya2VyIFBla3NhZyBpbiA6aXNzdWU6YDE1NzAxYC4pCisKKwordW5pdHRlc3QKKy0tLS0tLS0tCisKK1RoZSA6Y2xhc3M6YH51bml0dGVzdC5UZXN0Q2FzZWAgY2xhc3MgaGFzIGEgbmV3IG1ldGhvZCwKKzptZXRoOmB+dW5pdHRlc3QuVGVzdENhc2Uuc3ViVGVzdGAsIHRoYXQgcHJvZHVjZXMgYSBjb250ZXh0IG1hbmFnZXIgd2hvc2UKKzprZXl3b3JkOmB3aXRoYCBibG9jayBiZWNvbWVzIGEgInN1Yi10ZXN0Ii4gIFRoaXMgY29udGV4dCBtYW5hZ2VyIGFsbG93cyBhIHRlc3QKK21ldGhvZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZSBzdWJ0ZXN0cyAgYnksIHNheSwgY2FsbGluZyB0aGUgYGBzdWJUZXN0YGAKK2NvbnRleHQgbWFuYWdlciBpbnNpZGUgYSBsb29wLiAgQSBzaW5nbGUgdGVzdCBtZXRob2QgY2FuIHRoZXJlYnkgcHJvZHVjZSBhbgoraW5kZWZpbml0ZSBudW1iZXIgb2Ygc2VwYXJhdGVseS1pZGVudGlmaWVkIGFuZCBzZXBhcmF0ZWx5LWNvdW50ZWQgdGVzdHMsIGFsbCBvZgord2hpY2ggd2lsbCBydW4gZXZlbiBpZiBvbmUgb3IgbW9yZSBvZiB0aGVtIGZhaWwuICBGb3IgZXhhbXBsZTo6CisKKyAgICBjbGFzcyBOdW1iZXJzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgIGRlZiB0ZXN0X2V2ZW4oc2VsZik6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGkgJSAyLCAwKQorCit3aWxsIHJlc3VsdCBpbiBzaXggc3VidGVzdHMsIGVhY2ggaWRlbnRpZmllZCBpbiB0aGUgdW5pdHRlc3QgdmVyYm9zZSBvdXRwdXQKK3dpdGggYSBsYWJlbCBjb25zaXN0aW5nIG9mIHRoZSB2YXJpYWJsZSBuYW1lIGBgaWBgIGFuZCBhIHBhcnRpY3VsYXIgdmFsdWUgZm9yCit0aGF0IHZhcmlhYmxlIChgYGk9MGBgLCBgYGk9MWBgLCBldGMpLiAgU2VlIDpyZWY6YHN1YnRlc3RzYCBmb3IgdGhlIGZ1bGwKK3ZlcnNpb24gb2YgdGhpcyBleGFtcGxlLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluIDppc3N1ZTpgMTY5OTdgLikKKworOmZ1bmM6YHVuaXR0ZXN0Lm1haW5gIG5vdyBhY2NlcHRzIGFuIGl0ZXJhYmxlIG9mIHRlc3QgbmFtZXMgZm9yCisqZGVmYXVsdFRlc3QqLCB3aGVyZSBwcmV2aW91c2x5IGl0IG9ubHkgYWNjZXB0ZWQgYSBzaW5nbGUgdGVzdCBuYW1lIGFzIGEKK3N0cmluZy4gIChDb250cmlidXRlZCBieSBKeXJraSBQdWxsaWFpbmVuIGluIDppc3N1ZTpgMTUxMzJgLikKKworSWYgOmNsYXNzOmB+dW5pdHRlc3QuU2tpcFRlc3RgIGlzIHJhaXNlZCBkdXJpbmcgdGVzdCBkaXNjb3ZlcnkgKHRoYXQgaXMsIGF0IHRoZQorbW9kdWxlIGxldmVsIGluIHRoZSB0ZXN0IGZpbGUpLCBpdCBpcyBub3cgcmVwb3J0ZWQgYXMgYSBza2lwIGluc3RlYWQgb2YgYW4KK2Vycm9yLiAgKENvbnRyaWJ1dGVkIGJ5IFphY2ggV2FyZSBpbiA6aXNzdWU6YDE2OTM1YC4pCisKKzptZXRoOmB+dW5pdHRlc3QuVGVzdExvYWRlci5kaXNjb3ZlcmAgbm93IHNvcnRzIHRoZSBkaXNjb3ZlcmVkIGZpbGVzIHRvIHByb3ZpZGUKK2NvbnNpc3RlbnQgdGVzdCBvcmRlcmluZy4gIChDb250cmlidXRlZCBieSBNYXJ0aW4gTWVsaW4gYW5kIEplZmYgUmFtbmFuaSBpbgorOmlzc3VlOmAxNjcwOWAuKQorCis6Y2xhc3M6YH51bml0dGVzdC5UZXN0U3VpdGVgIG5vdyBkcm9wcyByZWZlcmVuY2VzIHRvIHRlc3RzIGFzIHNvb24gYXMgdGhlIHRlc3QKK2hhcyBiZWVuIHJ1biwgaWYgdGhlIHRlc3QgaXMgc3VjY2Vzc2Z1bC4gIE9uIFB5dGhvbiBpbnRlcnByZXRlcnMgdGhhdCBkbworZ2FyYmFnZSBjb2xsZWN0aW9uLCB0aGlzIGFsbG93cyB0aGUgdGVzdHMgdG8gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQgaWYgbm90aGluZworZWxzZSBpcyBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSB0ZXN0LiAgSXQgaXMgcG9zc2libGUgdG8gb3ZlcnJpZGUgdGhpcworYmVoYXZpb3IgYnkgY3JlYXRpbmcgYSA6Y2xhc3M6YH51bml0dGVzdC5UZXN0U3VpdGVgIHN1YmNsYXNzIHRoYXQgZGVmaW5lcyBhCitjdXN0b20gYGBfcmVtb3ZlVGVzdEF0SW5kZXhgYCBtZXRob2QuICAoQ29udHJpYnV0ZWQgYnkgVG9tIFdhcmRpbGwsIE1hdHQKK01jQ2x1cmUsIGFuZCBBbmRyZXcgU3ZldGxvdiBpbiA6aXNzdWU6YDExNzk4YC4pCisKK0EgbmV3IHRlc3QgYXNzZXJ0aW9uIGNvbnRleHQtbWFuYWdlciwgOm1ldGg6YH51bml0dGVzdC5UZXN0Q2FzZS5hc3NlcnRMb2dzYCwKK3dpbGwgZW5zdXJlIHRoYXQgYSBnaXZlbiBibG9jayBvZiBjb2RlIGVtaXRzIGEgbG9nIG1lc3NhZ2UgdXNpbmcgdGhlCis6bW9kOmBsb2dnaW5nYCBtb2R1bGUuICBCeSBkZWZhdWx0IHRoZSBtZXNzYWdlIGNhbiBjb21lIGZyb20gYW55IGxvZ2dlciBhbmQKK2hhdmUgYSBwcmlvcml0eSBvZiBgYElORk9gYCBvciBoaWdoZXIsIGJ1dCBib3RoIHRoZSBsb2dnZXIgbmFtZSBhbmQgYW4KK2FsdGVybmF0aXZlIG1pbmltdW0gbG9nZ2luZyBsZXZlbCBtYXkgYmUgc3BlY2lmaWVkLiAgVGhlIG9iamVjdCByZXR1cm5lZCBieSB0aGUKK2NvbnRleHQgbWFuYWdlciBjYW4gYmUgcXVlcmllZCBmb3IgdGhlIDpjbGFzczpgfmxvZ2dpbmcuTG9nUmVjb3JkYFwgcyBhbmQvb3IKK2Zvcm1hdHRlZCBtZXNzYWdlcyB0aGF0IHdlcmUgbG9nZ2VkLiAgKENvbnRyaWJ1dGVkIGJ5IEFudG9pbmUgUGl0cm91IGluCis6aXNzdWU6YDE4OTM3YC4pCisKK1Rlc3QgZGlzY292ZXJ5IG5vdyB3b3JrcyB3aXRoIG5hbWVzcGFjZSBwYWNrYWdlcyAoQ29udHJpYnV0ZWQgYnkgQ2xhdWRpdSBQb3BhCitpbiA6aXNzdWU6YDE3NDU3YC4pCisKKzptb2Q6YHVuaXR0ZXN0Lm1vY2tgIG9iamVjdHMgbm93IGluc3BlY3QgdGhlaXIgc3BlY2lmaWNhdGlvbiBzaWduYXR1cmVzIHdoZW4KK21hdGNoaW5nIGNhbGxzLCB3aGljaCBtZWFucyBhbiBhcmd1bWVudCBjYW4gbm93IGJlIG1hdGNoZWQgYnkgZWl0aGVyIHBvc2l0aW9uCitvciBuYW1lLCBpbnN0ZWFkIG9mIG9ubHkgYnkgcG9zaXRpb24uICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UgaW4KKzppc3N1ZTpgMTcwMTVgLikKKworOmZ1bmM6YH5tb2NrLm1vY2tfb3BlbmAgb2JqZWN0cyBub3cgaGF2ZSBgYHJlYWRsaW5lYGAgYW5kIGBgcmVhZGxpbmVzYGAKK21ldGhvZHMuICAoQ29udHJpYnV0ZWQgYnkgVG9zaGlvIEt1cmF0b21pIGluIDppc3N1ZTpgMTc0NjdgLikKKworCit2ZW52CistLS0tCisKKzptb2Q6YHZlbnZgIG5vdyBpbmNsdWRlcyBhY3RpdmF0aW9uIHNjcmlwdHMgZm9yIHRoZSBgYGNzaGBgIGFuZCBgYGZpc2hgYAorc2hlbGxzLiAgKENvbnRyaWJ1dGVkIGJ5IEFuZHJldyBTdmV0bG92IGluIDppc3N1ZTpgMTU0MTdgLikKKworOmNsYXNzOmB+dmVudi5FbnZCdWlsZGVyYCBhbmQgdGhlIDpmdW5jOmB+dmVudi5jcmVhdGVgIGNvbnZlbmllbmNlIGZ1bmN0aW9uCit0YWtlIGEgbmV3IGtleXdvcmQgYXJndW1lbnQgKndpdGhfcGlwKiwgd2hpY2ggZGVmYXVsdHMgdG8gYGBGYWxzZWBgLCB0aGF0Citjb250cm9scyB3aGV0aGVyIG9yIG5vdCA6Y2xhc3M6YH52ZW52LkVudkJ1aWxkZXJgIGVuc3VyZXMgdGhhdCBgYHBpcGBgIGlzCitpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuICAoQ29udHJpYnV0ZWQgYnkgTmljayBDb2dobGFuIGluCis6aXNzdWU6YDE5NTUyYCBhcyBwYXJ0IG9mIHRoZSA6cGVwOmA0NTNgIGltcGxlbWVudGF0aW9uLikKKworCit3YXZlCistLS0tCisKK1RoZSA6bWV0aDpgfndhdmUuZ2V0cGFyYW1zYCBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuIGEKK3BsYWluIHR1cGxlLiAgKENvbnRyaWJ1dGVkIGJ5IENsYXVkaXUgUG9wYSBpbiA6aXNzdWU6YDE3NDg3YC4pCisKKzptZXRoOmB3YXZlLm9wZW5gIG5vdyBzdXBwb3J0cyB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLiAgKENvbnRyaWJ1dGVkCitieSBDbGF1ZGl1IFBvcGEgaW4gOmlzc3VlOmAxNzYxNmAuKQorCis6bW9kOmB3YXZlYCBjYW4gbm93IDpyZWY6YHdyaXRlIG91dHB1dCB0byB1bnNlZWthYmxlIGZpbGVzCis8d2F2ZS13cml0ZS1vYmplY3RzPmAuICAoQ29udHJpYnV0ZWQgYnkgRGF2aWQgSm9uZXMsIEd1aWxoZXJtZSBQb2xvLCBhbmQgU2VyaGl5CitTdG9yY2hha2EgaW4gOmlzc3VlOmA1MjAyYC4pCisKK1RoZSA6bWV0aDpgfndhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc3Jhd2AgYW5kCis6bWV0aDpgfndhdmUuV2F2ZV93cml0ZS53cml0ZWZyYW1lc2AgbWV0aG9kcyBub3cgYWNjZXB0IGFueSA6dGVybTpgYnl0ZXMtbGlrZQorb2JqZWN0YC4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgODMxMWAuKQorCisKK3dlYWtyZWYKKy0tLS0tLS0KKworTmV3IDpjbGFzczpgfndlYWtyZWYuV2Vha01ldGhvZGAgY2xhc3Mgc2ltdWxhdGVzIHdlYWsgcmVmZXJlbmNlcyB0byBib3VuZAorbWV0aG9kcy4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE0NjMxYC4pCisKK05ldyA6Y2xhc3M6YH53ZWFrcmVmLmZpbmFsaXplYCBjbGFzcyBtYWtlcyBpdCBwb3NzaWJsZSB0byByZWdpc3RlciBhIGNhbGxiYWNrCit0byBiZSBpbnZva2VkIHdoZW4gYW4gb2JqZWN0IGlzIGdhcmJhZ2UgY29sbGVjdGVkLCB3aXRob3V0IG5lZWRpbmcgdG8KK2NhcmVmdWxseSBtYW5hZ2UgdGhlIGxpZmVjeWNsZSBvZiB0aGUgd2VhayByZWZlcmVuY2UgaXRzZWxmLiAgKENvbnRyaWJ1dGVkIGJ5CitSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmAxNTUyOGAuKQorCitUaGUgY2FsbGJhY2ssIGlmIGFueSwgYXNzb2NpYXRlZCB3aXRoIGEgOmNsYXNzOmB+d2Vha3JlZi5yZWZgIGlzIG5vdworZXhwb3NlZCB2aWEgdGhlIDphdHRyOmB+d2Vha3JlZi5yZWYuX19jYWxsYmFja19fYCBhdHRyaWJ1dGUuICAoQ29udHJpYnV0ZWQKK2J5IE1hcmsgRGlja2luc29uIGluIDppc3N1ZTpgMTc2NDNgLikKKworCit4bWwuZXRyZWUKKy0tLS0tLS0tLQorCitBIG5ldyBwYXJzZXIsIDpjbGFzczpgfnhtbC5ldHJlZS5FbGVtZW50VHJlZS5YTUxQdWxsUGFyc2VyYCwgYWxsb3dzIGEKK25vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMgdG8gcGFyc2UgWE1MIGRvY3VtZW50cy4gIEFuIGV4YW1wbGUgY2FuIGJlCitzZWVuIGF0IDpyZWY6YGVsZW1lbnR0cmVlLXB1bGwtcGFyc2luZ2AuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZQorUGl0cm91IGluIDppc3N1ZTpgMTc3NDFgLikKKworVGhlIDptb2Q6YHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgOmZ1bmM6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdgIGFuZAorOmZ1bmM6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUudG9zdHJpbmdsaXN0YCBmdW5jdGlvbnMsIGFuZCB0aGUKKzpjbGFzczpgfnhtbC5ldHJlZS5FbGVtZW50VHJlZS5FbGVtZW50VHJlZWAKKzptZXRoOmB+eG1sLmV0cmVlLkVsZW1lbnRUcmVlLkVsZW1lbnRUcmVlLndyaXRlYCBtZXRob2QsIG5vdyBoYXZlIGEKKypzaG9ydF9lbXB0eV9lbGVtZW50cyogOnJlZjpga2V5d29yZC1vbmx5IHBhcmFtZXRlciA8a2V5d29yZC1vbmx5X3BhcmFtZXRlcj5gCitwcm92aWRpbmcgY29udHJvbCBvdmVyIHdoZXRoZXIgZWxlbWVudHMgd2l0aCBubyBjb250ZW50IGFyZSB3cml0dGVuIGluCithYmJyZXZpYXRlZCAoYGA8dGFnIC8+YGApIG9yIGV4cGFuZGVkIChgYDx0YWc+PC90YWc+YGApIGZvcm0uICAoQ29udHJpYnV0ZWQgYnkKK0FyaWVsIFBvbGlhayBhbmQgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE0Mzc3YC4pCisKKworemlwZmlsZQorLS0tLS0tLQorCitUaGUgOm1ldGg6YH56aXBmaWxlLlB5WmlwRmlsZS53cml0ZXB5YCBtZXRob2Qgb2YgdGhlCis6Y2xhc3M6YH56aXBmaWxlLlB5WmlwRmlsZWAgY2xhc3MgaGFzIGEgbmV3ICpmaWx0ZXJmdW5jKiBvcHRpb24gdGhhdCBjYW4gYmUKK3VzZWQgdG8gY29udHJvbCB3aGljaCBkaXJlY3RvcmllcyBhbmQgZmlsZXMgYXJlIGFkZGVkIHRvIHRoZSBhcmNoaXZlLiAgRm9yCitleGFtcGxlLCB0aGlzIGNvdWxkIGJlIHVzZWQgdG8gZXhjbHVkZSB0ZXN0IGZpbGVzIGZyb20gdGhlIGFyY2hpdmUuCisoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIFRpc21lciBpbiA6aXNzdWU6YDE5Mjc0YC4pCisKK1RoZSAqYWxsb3daaXA2NCogcGFyYW1ldGVyIHRvIDpjbGFzczpgfnppcGZpbGUuWmlwRmlsZWAgYW5kCis6Y2xhc3M6YH56aXBmaWxlLlB5WmlwZmlsZWAgaXMgbm93IGBgVHJ1ZWBgIGJ5IGRlZmF1bHQuICAoQ29udHJpYnV0ZWQgYnkKK1dpbGxpYW0gTWFsbGFyZCBpbiA6aXNzdWU6YDE3MjAxYC4pCisKKworCitDUHl0aG9uIEltcGxlbWVudGF0aW9uIENoYW5nZXMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKy4uIF93aGF0c25ldy1wZXAtNDQ1OgorCitQRVAgNDQ1OiBDdXN0b21pemF0aW9uIG9mIENQeXRob24gTWVtb3J5IEFsbG9jYXRvcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NDVgIGFkZHMgbmV3IEMgbGV2ZWwgaW50ZXJmYWNlcyB0byBjdXN0b21pemUgbWVtb3J5IGFsbG9jYXRpb24gaW4KK3RoZSBDUHl0aG9uIGludGVycHJldGVyLgorCisuLiBzZWVhbHNvOjoKKworICAgOnBlcDpgNDQ1YCAtLSBBZGQgbmV3IEFQSXMgdG8gY3VzdG9taXplIFB5dGhvbiBtZW1vcnkgYWxsb2NhdG9ycworICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IFZpY3RvciBTdGlubmVyLgorCisKKy4uIF93aGF0c25ldy1wZXAtNDQyOgorCitQRVAgNDQyOiBTYWZlIE9iamVjdCBGaW5hbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCis6cGVwOmA0NDJgIHJlbW92ZXMgdGhlIGN1cnJlbnQgbGltaXRhdGlvbnMgYW5kIHF1aXJrcyBvZiBvYmplY3QgZmluYWxpemF0aW9uCitpbiBDUHl0aG9uLiBXaXRoIGl0LCBvYmplY3RzIHdpdGggOm1ldGg6YF9fZGVsX19gIG1ldGhvZHMsIGFzIHdlbGwgYXMKK2dlbmVyYXRvcnMgd2l0aCA6a2V5d29yZDpgZmluYWxseWAgY2xhdXNlcywgY2FuIGJlIGZpbmFsaXplZCB3aGVuIHRoZXkgYXJlCitwYXJ0IG9mIGEgcmVmZXJlbmNlIGN5Y2xlLgorCitBcyBwYXJ0IG9mIHRoaXMgY2hhbmdlLCBtb2R1bGUgZ2xvYmFscyBhcmUgbm8gbG9uZ2VyIGZvcmNpYmx5IHNldCB0bworOmNvbnN0OmBOb25lYCBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24gaW4gbW9zdCBjYXNlcywgaW5zdGVhZCByZWx5aW5nCitvbiB0aGUgbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGUgY3ljbGljIGdhcmJhZ2UgY29sbGVjdG9yLiAgVGhpcyBhdm9pZHMgYQord2hvbGUgY2xhc3Mgb2YgaW50ZXJwcmV0ZXItc2h1dGRvd24tdGltZSBlcnJvcnMsIHVzdWFsbHkgaW52b2x2aW5nCitgYF9fZGVsX19gYCBtZXRob2RzLCB0aGF0IGhhdmUgcGxhZ3VlZCBQeXRob24gc2luY2UgdGhlIGN5Y2xpYyBHQword2FzIGZpcnN0IGludHJvZHVjZWQuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0NDJgIC0tIFNhZmUgb2JqZWN0IGZpbmFsaXphdGlvbgorICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IEFudG9pbmUgUGl0cm91LgorCisKKy4uIF93aGF0c25ldy1wZXAtNDU2OgorCitQRVAgNDU2OiBTZWN1cmUgYW5kIEludGVyY2hhbmdlYWJsZSBIYXNoIEFsZ29yaXRobQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOnBlcDpgNDU2YCBmb2xsb3dzIHVwIG9uIGVhcmxpZXIgc2VjdXJpdHkgZml4IHdvcmsgZG9uZSBvbiBQeXRob24ncyBoYXNoCithbGdvcml0aG0gdG8gYWRkcmVzcyBjZXJ0YWluIERPUyBhdHRhY2tzIHRvIHdoaWNoIHB1YmxpYyBmYWNpbmcgQVBJcyBiYWNrZWQgYnkKK2RpY3Rpb25hcnkgbG9va3VwcyBtYXkgYmUgc3ViamVjdC4gIChTZWUgOmlzc3VlOmAxNDYyMWAgZm9yIHRoZSBzdGFydCBvZiB0aGUKK2N1cnJlbnQgcm91bmQgb2YgaW1wcm92ZW1lbnRzLikgIFRoZSBQRVAgdW5pZmllcyBDUHl0aG9uJ3MgaGFzaCBjb2RlIHRvIG1ha2UgaXQKK2Vhc2llciBmb3IgYSBwYWNrYWdlciB0byBzdWJzdGl0dXRlIGEgZGlmZmVyZW50IGhhc2ggYWxnb3JpdGhtLCBhbmQgc3dpdGNoZXMKK1B5dGhvbidzIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gdG8gYSBTaXBIYXNoIGltcGxlbWVudGF0aW9uIG9uIHBsYXRmb3JtcyB0aGF0CitoYXZlIGEgNjQgYml0IGRhdGEgdHlwZS4gIEFueSBwZXJmb3JtYW5jZSBkaWZmZXJlbmNlcyBpbiBjb21wYXJpc29uIHdpdGggdGhlCitvbGRlciBGTlYgYWxnb3JpdGhtIGFyZSB0cml2aWFsLgorCitUaGUgUEVQIGFkZHMgYWRkaXRpb25hbCBmaWVsZHMgdG8gdGhlIDphdHRyOmBzeXMuaGFzaF9pbmZvYCBzdHJ1Y3Qgc2VxdWVuY2UgdG8KK2Rlc2NyaWJlIHRoZSBoYXNoIGFsZ29yaXRobSBpbiB1c2UgYnkgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgYmluYXJ5LiAgT3RoZXJ3aXNlLAordGhlIFBFUCBkb2VzIG5vdCBhbHRlciBhbnkgZXhpc3RpbmcgQ1B5dGhvbiBBUElzLgorCisKKy4uIF93aGF0c25ldy1wZXAtNDM2OgorCitQRVAgNDM2OiBBcmd1bWVudCBDbGluaWMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisiQXJndW1lbnQgQ2xpbmljIiAoOnBlcDpgNDM2YCkgaXMgbm93IHBhcnQgb2YgdGhlIENQeXRob24gYnVpbGQgcHJvY2VzcworYW5kIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IHRoZSBwcm9jZXNzIG9mIGRlZmluaW5nIGFuZCBtYWludGFpbmluZworYWNjdXJhdGUgc2lnbmF0dXJlcyBmb3IgYnVpbHRpbnMgYW5kIHN0YW5kYXJkIGxpYnJhcnkgZXh0ZW5zaW9uIG1vZHVsZXMKK2ltcGxlbWVudGVkIGluIEMuCisKK1NvbWUgc3RhbmRhcmQgbGlicmFyeSBleHRlbnNpb24gbW9kdWxlcyBoYXZlIGJlZW4gY29udmVydGVkIHRvIHVzZSBBcmd1bWVudAorQ2xpbmljIGluIFB5dGhvbiAzLjQsIGFuZCA6bW9kOmBweWRvY2AgYW5kIDptb2Q6YGluc3BlY3RgIGhhdmUgYmVlbiB1cGRhdGVkCithY2NvcmRpbmdseS4KKworSXQgaXMgZXhwZWN0ZWQgdGhhdCBzaWduYXR1cmUgbWV0YWRhdGEgZm9yIHByb2dyYW1tYXRpYyBpbnRyb3NwZWN0aW9uIHdpbGwKK2JlIGFkZGVkIHRvIGFkZGl0aW9uYWwgY2FsbGFibGVzIGltcGxlbWVudGVkIGluIEMgYXMgcGFydCBvZiBQeXRob24gMy40CittYWludGVuYW5jZSByZWxlYXNlcy4KKworLi4gbm90ZTo6CisgICBUaGUgQXJndW1lbnQgQ2xpbmljIFBFUCBpcyBub3QgZnVsbHkgdXAgdG8gZGF0ZSB3aXRoIHRoZSBzdGF0ZSBvZiB0aGUKKyAgIGltcGxlbWVudGF0aW9uLiBUaGlzIGhhcyBiZWVuIGRlZW1lZCBhY2NlcHRhYmxlIGJ5IHRoZSByZWxlYXNlIG1hbmFnZXIKKyAgIGFuZCBjb3JlIGRldmVsb3BtZW50IHRlYW0gaW4gdGhpcyBjYXNlLCBhcyBBcmd1bWVudCBDbGluaWMgd2lsbCBub3QKKyAgIGJlIG1hZGUgYXZhaWxhYmxlIGFzIGEgcHVibGljIEFQSSBmb3IgdGhpcmQgcGFydHkgdXNlIGluIFB5dGhvbiAzLjQuCisKKy4uIHNlZWFsc286OgorCisgICA6cGVwOmA0MzZgIC0tIFRoZSBBcmd1bWVudCBDbGluaWMgRFNMCisgICAgICAgUEVQIHdyaXR0ZW4gYW5kIGltcGxlbWVudGVkIGJ5IExhcnJ5IEhhc3RpbmdzLgorCisKK090aGVyIEJ1aWxkIGFuZCBDIEFQSSBDaGFuZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFRoZSBuZXcgOmM6ZnVuYzpgUHlUeXBlX0dldFNsb3RgIGZ1bmN0aW9uIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBzdGFibGUgQUJJLAorICBhbGxvd2luZyByZXRyaWV2YWwgb2YgZnVuY3Rpb24gcG9pbnRlcnMgZnJvbSBuYW1lZCB0eXBlIHNsb3RzIHdoZW4gdXNpbmcKKyAgdGhlIGxpbWl0ZWQgQVBJLiAgKENvbnRyaWJ1dGVkIGJ5IE1hcnRpbiB2b24gTMO2d2lzIGluIDppc3N1ZTpgMTcxNjJgLikKKworKiBUaGUgbmV3IDpjOmZ1bmM6YFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmdgIHByZS1pbml0aWFsaXphdGlvbiBBUEkKKyAgYWxsb3dzIGFwcGxpY2F0aW9ucyBlbWJlZGRpbmcgdGhlIENQeXRob24gaW50ZXJwcmV0ZXIgdG8gcmVsaWFibHkgZm9yY2UKKyAgYSBwYXJ0aWN1bGFyIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGVyIGZvciB0aGUgc3RhbmRhcmQgc3RyZWFtcy4KKyAgKENvbnRyaWJ1dGVkIGJ5IEJhc3RpZW4gTW9udGFnbmUgYW5kIE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDE2MTI5YC4pCisKKyogTW9zdCBQeXRob24gQyBBUElzIHRoYXQgZG9uJ3QgbXV0YXRlIHN0cmluZyBhcmd1bWVudHMgYXJlIG5vdyBjb3JyZWN0bHkKKyAgbWFya2VkIGFzIGFjY2VwdGluZyBgYGNvbnN0IGNoYXIgKmBgIHJhdGhlciB0aGFuIGBgY2hhciAqYGAuICAoQ29udHJpYnV0ZWQKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbiA6aXNzdWU6YDE3NzI2NzNgLikKKworKiBBIG5ldyBzaGVsbCB2ZXJzaW9uIG9mIGBgcHl0aG9uLWNvbmZpZ2BgIGNhbiBiZSB1c2VkIGV2ZW4gd2hlbiBhIHB5dGhvbgorICBpbnRlcnByZXRlciBpcyBub3QgYXZhaWxhYmxlIChmb3IgZXhhbXBsZSwgaW4gY3Jvc3MgY29tcGlsYXRpb24gc2NlbmFyaW9zKS4KKworKiA6YzpmdW5jOmBQeVVuaWNvZGVfRnJvbUZvcm1hdGAgbm93IHN1cHBvcnRzIHdpZHRoIGFuZCBwcmVjaXNpb24KKyAgc3BlY2lmaWNhdGlvbnMgZm9yIGBgJXNgYCwgYGAlQWBgLCBgYCVVYGAsIGBgJVZgYCwgYGAlU2BgLCBhbmQgYGAlUmBgLgorICAoQ29udHJpYnV0ZWQgYnkgWXNqIFJheSBhbmQgVmljdG9yIFN0aW5uZXIgaW4gOmlzc3VlOmA3MzMwYC4pCisKKyogTmV3IGZ1bmN0aW9uIDpjOmZ1bmM6YFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyYCBzdXBwbGVtZW50cyB0aGUKKyAgZXhpc3RpbmcgOmM6ZnVuYzpgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZWAgZnVuY3Rpb24uICBUaGUgZGlmZmVyZW5jZQorICBpcyB0aGF0IGl0IHJldHVybnMgYGAwYGAgb24gc3VjY2VzcyBhbmQgYGAtMWBgIG9uIGZhaWx1cmUuCisKKyogVGhlIENQeXRob24gc291cmNlIGNhbiBub3cgYmUgY29tcGlsZWQgdXNpbmcgdGhlIGFkZHJlc3Mgc2FuaXR5IGNoZWNraW5nCisgIGZlYXR1cmVzIG9mIHJlY2VudCB2ZXJzaW9ucyBvZiBHQ0MgYW5kIGNsYW5nOiAgdGhlIGZhbHNlIGFsYXJtcyBpbiB0aGUgc21hbGwKKyAgb2JqZWN0IGFsbG9jYXRvciBoYXZlIGJlZW4gc2lsZW5jZWQuICAoQ29udHJpYnV0ZWQgYnkgRGhpcnUgS2hvbGlhIGluCisgIDppc3N1ZTpgMTg1OTZgLikKKworKiBUaGUgV2luZG93cyBidWlsZCBub3cgdXNlcyBgQWRkcmVzcyBTcGFjZSBMYXlvdXQgUmFuZG9taXphdGlvbgorICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BU0xSPmBfIGFuZCBgRGF0YSBFeGVjdXRpb24gUHJldmVudGlvbgorICA8aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRhX0V4ZWN1dGlvbl9QcmV2ZW50aW9uPmBfLiAgKENvbnRyaWJ1dGVkIGJ5CisgIENocmlzdGlhbiBIZWltZXMgaW4gOmlzc3VlOmAxNjYzMmAuKQorCisqIE5ldyBmdW5jdGlvbiA6YzpmdW5jOmBQeU9iamVjdF9MZW5ndGhIaW50YCBpcyB0aGUgQyBBUEkgZXF1aXZhbGVudAorICBvZiA6ZnVuYzpgb3BlcmF0b3IubGVuZ3RoX2hpbnRgLiAgKENvbnRyaWJ1dGVkIGJ5IEFybWluIFJvbmFjaGVyIGluCisgIDppc3N1ZTpgMTYxNDhgLikKKworCisuLiBfb3RoZXItaW1wcm92ZW1lbnRzLTMuNDoKKworT3RoZXIgSW1wcm92ZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tLS0KKworLi4gX3doYXRzbmV3LWlzb2xhdGVkLW1vZGU6CisKKyogVGhlIDpyZWY6YHB5dGhvbiA8dXNpbmctb24tY21kbGluZT5gIGNvbW1hbmQgaGFzIGEgbmV3IDpyZWY6YG9wdGlvbgorICA8dXNpbmctb24tbWlzYy1vcHRpb25zPmAsIGBgLUlgYCwgd2hpY2ggY2F1c2VzIGl0IHRvIHJ1biBpbiAiaXNvbGF0ZWQgbW9kZSIsCisgIHdoaWNoIG1lYW5zIHRoYXQgOmRhdGE6YHN5cy5wYXRoYCBjb250YWlucyBuZWl0aGVyIHRoZSBzY3JpcHQncyBkaXJlY3Rvcnkgbm9yCisgIHRoZSB1c2VyJ3MgYGBzaXRlLXBhY2thZ2VzYGAgZGlyZWN0b3J5LCBhbmQgYWxsIDplbnZ2YXI6YFBZVEhPTipgIGVudmlyb25tZW50CisgIHZhcmlhYmxlcyBhcmUgaWdub3JlZCAoaXQgaW1wbGllcyBib3RoIGBgLXNgYCBhbmQgYGAtRWBgKS4gIE90aGVyCisgIHJlc3RyaWN0aW9ucyBtYXkgYWxzbyBiZSBhcHBsaWVkIGluIHRoZSBmdXR1cmUsIHdpdGggdGhlIGdvYWwgYmVpbmcgdG8KKyAgaXNvbGF0ZSB0aGUgZXhlY3V0aW9uIG9mIGEgc2NyaXB0IGZyb20gdGhlIHVzZXIncyBlbnZpcm9ubWVudC4gIFRoaXMgaXMKKyAgYXBwcm9wcmlhdGUsIGZvciBleGFtcGxlLCB3aGVuIFB5dGhvbiBpcyB1c2VkIHRvIHJ1biBhIHN5c3RlbSBzY3JpcHQuICBPbgorICBtb3N0IFBPU0lYIHN5c3RlbXMgaXQgY2FuIGFuZCBzaG91bGQgYmUgdXNlZCBpbiB0aGUgYGAjIWBgIGxpbmUgb2Ygc3lzdGVtCisgIHNjcmlwdHMuICAoQ29udHJpYnV0ZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcyBpbiA6aXNzdWU6YDE2NDk5YC4pCisKKyogVGFiLWNvbXBsZXRpb24gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIKKyAgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgOm1vZDpgcmVhZGxpbmVgLiAgSGlzdG9yeSBpcyBhbHNvIGVuYWJsZWQgYnkgZGVmYXVsdCwKKyAgYW5kIGlzIHdyaXR0ZW4gdG8gKGFuZCByZWFkIGZyb20pIHRoZSBmaWxlIDpmaWxlOmB+Ly5weXRob24taGlzdG9yeWAuCisgIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBhbmQgw4lyaWMgQXJhdWpvIGluIDppc3N1ZTpgNTg0NWAuKQorCisqIEludm9raW5nIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCBgYC0tdmVyc2lvbmBgIG5vdyBvdXRwdXRzIHRoZSB2ZXJzaW9uIHRvCisgIHN0YW5kYXJkIG91dHB1dCBpbnN0ZWFkIG9mIHN0YW5kYXJkIGVycm9yICg6aXNzdWU6YDE4MzM4YCkuIFNpbWlsYXIgY2hhbmdlcworICB3ZXJlIG1hZGUgdG8gOm1vZDpgYXJncGFyc2VgICg6aXNzdWU6YDE4OTIwYCkgYW5kIG90aGVyIG1vZHVsZXMgdGhhdCBoYXZlCisgIHNjcmlwdC1saWtlIGludm9jYXRpb24gY2FwYWJpbGl0aWVzICg6aXNzdWU6YDE4OTIyYCkuCisKKyogVGhlIENQeXRob24gV2luZG93cyBpbnN0YWxsZXIgbm93IGFkZHMgYGAucHlgYCB0byB0aGUgOmVudnZhcjpgUEFUSEVYVGAKKyAgdmFyaWFibGUgd2hlbiBleHRlbnNpb25zIGFyZSByZWdpc3RlcmVkLCBhbGxvd2luZyB1c2VycyB0byBydW4gYSBweXRob24KKyAgc2NyaXB0IGF0IHRoZSB3aW5kb3dzIGNvbW1hbmQgcHJvbXB0IGJ5IGp1c3QgdHlwaW5nIGl0cyBuYW1lIHdpdGhvdXQgdGhlCisgIGBgLnB5YGAgZXh0ZW5zaW9uLiAgKENvbnRyaWJ1dGVkIGJ5IFBhdWwgTW9vcmUgaW4gOmlzc3VlOmAxODU2OWAuKQorCisqIEEgbmV3IGBgbWFrZWBgIHRhcmdldCBgY292ZXJhZ2UtcmVwb3J0CisgIDxodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9jb3ZlcmFnZS5odG1sI21lYXN1cmluZy1jb3ZlcmFnZS1vZi1jLWNvZGUtd2l0aC1nY292LWFuZC1sY292PmBfCisgIHdpbGwgYnVpbGQgcHl0aG9uLCBydW4gdGhlIHRlc3Qgc3VpdGUsIGFuZCBnZW5lcmF0ZSBhbiBIVE1MIGNvdmVyYWdlIHJlcG9ydAorICBmb3IgdGhlIEMgY29kZWJhc2UgdXNpbmcgYGBnY292YGAgYW5kIGBsY292CisgIDxodHRwOi8vbHRwLnNvdXJjZWZvcmdlLm5ldC9jb3ZlcmFnZS9sY292LnBocD5gXy4KKworKiBUaGUgYGAtUmBgIG9wdGlvbiB0byB0aGUgOnJlZjpgcHl0aG9uIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSA8cmVncnRlc3Q+YCBub3cKKyAgYWxzbyBjaGVja3MgZm9yIG1lbW9yeSBhbGxvY2F0aW9uIGxlYWtzLCB1c2luZworICA6ZnVuYzpgc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpYC4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbgorICA6aXNzdWU6YDEzMzkwYC4pCisKKyogYGBweXRob24gLW1gYCBub3cgd29ya3Mgd2l0aCBuYW1lc3BhY2UgcGFja2FnZXMuCisKKyogVGhlIDptb2Q6YHN0YXRgIG1vZHVsZSBpcyBub3cgaW1wbGVtZW50ZWQgaW4gQywgd2hpY2ggbWVhbnMgaXQgZ2V0cyB0aGUKKyAgdmFsdWVzIGZvciBpdHMgY29uc3RhbnRzIGZyb20gdGhlIEMgaGVhZGVyIGZpbGVzLCBpbnN0ZWFkIG9mIGhhdmluZyB0aGUKKyAgdmFsdWVzIGhhcmQtY29kZWQgaW4gdGhlIHB5dGhvbiBtb2R1bGUgYXMgd2FzIHByZXZpb3VzbHkgdGhlIGNhc2UuCisKKyogTG9hZGluZyBtdWx0aXBsZSBweXRob24gbW9kdWxlcyBmcm9tIGEgc2luZ2xlIE9TIG1vZHVsZSAoYGAuc29gYCwgYGAuZGxsYGApCisgIG5vdyB3b3JrcyBjb3JyZWN0bHkgKHByZXZpb3VzbHkgaXQgc2lsZW50bHkgcmV0dXJuZWQgdGhlIGZpcnN0IHB5dGhvbgorICBtb2R1bGUgaW4gdGhlIGZpbGUpLiAgKENvbnRyaWJ1dGVkIGJ5IFbDoWNsYXYgxaBtaWxhdWVyIGluIDppc3N1ZTpgMTY0MjFgLikKKworKiBBIG5ldyBvcGNvZGUsIDpvcGNvZGU6YExPQURfQ0xBU1NERVJFRmAsIGhhcyBiZWVuIGFkZGVkIHRvIGZpeCBhIGJ1ZyBpbiB0aGUKKyAgbG9hZGluZyBvZiBmcmVlIHZhcmlhYmxlcyBpbiBjbGFzcyBib2RpZXMgdGhhdCBjb3VsZCBiZSB0cmlnZ2VyZWQgYnkgY2VydGFpbgorICB1c2VzIG9mIDpyZWY6YF9fcHJlcGFyZV9fIDxwcmVwYXJlPmAuICAoQ29udHJpYnV0ZWQgYnkgQmVuamFtaW4gUGV0ZXJzb24gaW4KKyAgOmlzc3VlOmAxNzg1M2AuKQorCisqIEEgbnVtYmVyIG9mIE1lbW9yeUVycm9yLXJlbGF0ZWQgY3Jhc2hlcyB3ZXJlIGlkZW50aWZpZWQgYW5kIGZpeGVkIGJ5IFZpY3RvcgorICBTdGlubmVyIHVzaW5nIGhpcyA6cGVwOmA0NDVgLWJhc2VkIGBgcHlmYWlsbWFsbG9jYGAgdG9vbCAoOmlzc3VlOmAxODQwOGAsCisgIDppc3N1ZTpgMTg1MjBgKS4KKworKiBUaGUgOnJlZjpgcHl2ZW52IDxzY3JpcHRzLXB5dmVudj5gIGNvbW1hbmQgbm93IGFjY2VwdHMgYSBgYC0tY29waWVzYGAgb3B0aW9uCisgIHRvIHVzZSBjb3BpZXMgcmF0aGVyIHRoYW4gc3ltbGlua3MgZXZlbiBvbiBzeXN0ZW1zIHdoZXJlIHN5bWxpbmtzIGFyZSB0aGUKKyAgZGVmYXVsdC4gIChDb250cmlidXRlZCBieSBWaW5heSBTYWppcCBpbiA6aXNzdWU6YDE4ODA3YC4pCisKKyogVGhlIDpyZWY6YHB5dmVudiA8c2NyaXB0cy1weXZlbnY+YCBjb21tYW5kIGFsc28gYWNjZXB0cyBhIGBgLS13aXRob3V0LXBpcGBgCisgIG9wdGlvbiB0byBzdXBwcmVzcyB0aGUgb3RoZXJ3aXNlLWF1dG9tYXRpYyBib290c3RyYXBwaW5nIG9mIHBpcCBpbnRvCisgIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50LiAgKENvbnRyaWJ1dGVkIGJ5IE5pY2sgQ29naGxhbiBpbiA6aXNzdWU6YDE5NTUyYAorICBhcyBwYXJ0IG9mIHRoZSA6cGVwOmA0NTNgIGltcGxlbWVudGF0aW9uLikKKworKiBUaGUgZW5jb2RpbmcgbmFtZSBpcyBub3cgb3B0aW9uYWwgaW4gdGhlIHZhbHVlIHNldCBmb3IgdGhlCisgIDplbnZ2YXI6YFBZVEhPTklPRU5DT0RJTkdgIGVudmlyb25tZW50IHZhcmlhYmxlLiAgVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0bworICBzZXQganVzdCB0aGUgZXJyb3IgaGFuZGxlciwgd2l0aG91dCBjaGFuZ2luZyB0aGUgZGVmYXVsdCBlbmNvZGluZy4KKyAgKENvbnRyaWJ1dGVkIGJ5IFNlcmhpeSBTdG9yY2hha2EgaW4gOmlzc3VlOmAxODgxOGAuKQorCisqIFRoZSA6bW9kOmBiejJgLCA6bW9kOmBsem1hYCwgYW5kIDptb2Q6YGd6aXBgIG1vZHVsZSBgYG9wZW5gYCBmdW5jdGlvbnMgbm93CisgIHN1cHBvcnQgYGB4YGAgKGV4Y2x1c2l2ZSBjcmVhdGlvbikgbW9kZS4gIChDb250cmlidXRlZCBieSBUaW0gSGVhbmV5IGFuZAorICBWYWpyYXNreSBLb2sgaW4gOmlzc3VlOmAxOTIwMWAsIDppc3N1ZTpgMTkyMjJgLCBhbmQgOmlzc3VlOmAxOTIyM2AuKQorCisKK1NpZ25pZmljYW50IE9wdGltaXphdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBUaGUgVVRGLTMyIGRlY29kZXIgaXMgbm93IDN4IHRvIDR4IGZhc3Rlci4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthCisgIGluIDppc3N1ZTpgMTQ2MjVgLikKKworKiBUaGUgY29zdCBvZiBoYXNoIGNvbGxpc2lvbnMgZm9yIHNldHMgaXMgbm93IHJlZHVjZWQuICBFYWNoIGhhc2ggdGFibGUKKyAgcHJvYmUgbm93IGNoZWNrcyBhIHNlcmllcyBvZiBjb25zZWN1dGl2ZSwgYWRqYWNlbnQga2V5L2hhc2ggcGFpcnMgYmVmb3JlCisgIGNvbnRpbnVpbmcgdG8gbWFrZSByYW5kb20gcHJvYmVzIHRocm91Z2ggdGhlIGhhc2ggdGFibGUuICBUaGlzIGV4cGxvaXRzCisgIGNhY2hlIGxvY2FsaXR5IHRvIG1ha2UgY29sbGlzaW9uIHJlc29sdXRpb24gbGVzcyBleHBlbnNpdmUuCisgIFRoZSBjb2xsaXNpb24gcmVzb2x1dGlvbiBzY2hlbWUgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGh5YnJpZCBvZiBsaW5lYXIKKyAgcHJvYmluZyBhbmQgb3BlbiBhZGRyZXNzaW5nLiAgVGhlIG51bWJlciBvZiBhZGRpdGlvbmFsIGxpbmVhciBwcm9iZXMKKyAgZGVmYXVsdHMgdG8gbmluZS4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgYXQgY29tcGlsZS10aW1lIGJ5IGRlZmluaW5nCisgIExJTkVBUl9QUk9CRVMgdG8gYmUgYW55IHZhbHVlLiAgU2V0IExJTkVBUl9QUk9CRVM9MCB0byB0dXJuLW9mZgorICBsaW5lYXIgcHJvYmluZyBlbnRpcmVseS4gIChDb250cmlidXRlZCBieSBSYXltb25kIEhldHRpbmdlciBpbgorICA6aXNzdWU6YDE4NzcxYC4pCisKKyogVGhlIGludGVycHJldGVyIHN0YXJ0cyBhYm91dCAzMCUgZmFzdGVyLiBBIGNvdXBsZSBvZiBtZWFzdXJlcyBsZWFkIHRvIHRoZQorICBzcGVlZHVwLiBUaGUgaW50ZXJwcmV0ZXIgbG9hZHMgZmV3ZXIgbW9kdWxlcyBvbiBzdGFydHVwLCBlLmcuIHRoZSA6bW9kOmByZWAsCisgIDptb2Q6YGNvbGxlY3Rpb25zYCBhbmQgOm1vZDpgbG9jYWxlYCBtb2R1bGVzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMgYXJlIG5vCisgIGxvbmdlciBpbXBvcnRlZCBieSBkZWZhdWx0LiBUaGUgbWFyc2hhbCBtb2R1bGUgaGFzIGJlZW4gaW1wcm92ZWQgdG8gbG9hZAorICBjb21waWxlZCBQeXRob24gY29kZSBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgQW50b2luZSBQaXRyb3UsIENocmlzdGlhbgorICBIZWltZXMgYW5kIFZpY3RvciBTdGlubmVyIGluIDppc3N1ZTpgMTkyMTlgLCA6aXNzdWU6YDE5MjE4YCwgOmlzc3VlOmAxOTIwOWAsCisgIDppc3N1ZTpgMTkyMDVgIGFuZCA6aXNzdWU6YDk1NDhgLikKKworKiA6Y2xhc3M6YGJ6Mi5CWjJGaWxlYCBpcyBub3cgYXMgZmFzdCBvciBmYXN0ZXIgdGhhbiB0aGUgUHl0aG9uMiB2ZXJzaW9uIGZvcgorICBtb3N0IGNhc2VzLiAgOmNsYXNzOmBsem1hLkxaTUFGaWxlYCBoYXMgYWxzbyBiZWVuIG9wdGltaXplZC4gIChDb250cmlidXRlZCBieQorICBTZXJoaXkgU3RvcmNoYWthIGFuZCBOYWRlZW0gVmF3ZGEgaW4gOmlzc3VlOmAxNjAzNGAuKQorCisqIDpmdW5jOmByYW5kb20uZ2V0cmFuZGJpdHNgIGlzIDIwJS00MCUgZmFzdGVyIGZvciBzbWFsbCBpbnRlZ2VycyAodGhlIG1vc3QKKyAgY29tbW9uIHVzZSBjYXNlKS4gIChDb250cmlidXRlZCBieSBTZXJoaXkgU3RvcmNoYWthIGluIDppc3N1ZTpgMTY2NzRgLikKKworKiBCeSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSBuZXcgc3RvcmFnZSBmb3JtYXQgZm9yIHN0cmluZ3MsIHBpY2tsaW5nIG9mCisgIHN0cmluZ3MgaXMgbm93IHNpZ25pZmljYW50bHkgZmFzdGVyLiAgKENvbnRyaWJ1dGVkIGJ5IFZpY3RvciBTdGlubmVyIGFuZAorICBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE1NTk2YC4pCisKKyogQSBwZXJmb3JtYW5jZSBpc3N1ZSBpbiA6bWV0aDpgaW8uRmlsZUlPLnJlYWRhbGxgIGhhcyBiZWVuIHNvbHZlZC4gIFRoaXMKKyAgcGFydGljdWxhcmx5IGFmZmVjdHMgV2luZG93cywgYW5kIHNpZ25pZmljYW50bHkgc3BlZWRzIHVwIHRoZSBjYXNlIG9mIHBpcGluZworICBzaWduaWZpY2FudCBhbW91bnRzIG9mIGRhdGEgdGhyb3VnaCA6bW9kOmBzdWJwcm9jZXNzYC4gIChDb250cmlidXRlZAorICBieSBSaWNoYXJkIE91ZGtlcmsgaW4gOmlzc3VlOmAxNTc1OGAuKQorCisqIDpmdW5jOmBodG1sLmVzY2FwZWAgaXMgbm93IDEweCBmYXN0ZXIuICAoQ29udHJpYnV0ZWQgYnkgTWF0dCBCcnlhbnQgaW4KKyAgOmlzc3VlOmAxODAyMGAuKQorCisqIE9uIFdpbmRvd3MsIHRoZSBuYXRpdmUgYGBWaXJ0dWFsQWxsb2NgYCBpcyBub3cgdXNlZCBpbnN0ZWFkIG9mIHRoZSBDUlQKKyAgYGBtYWxsb2NgYCBpbiBgYG9ibWFsbG9jYGAuICBBcnRpZmljaWFsIGJlbmNobWFya3Mgc2hvdyBhYm91dCBhIDMlIG1lbW9yeQorICBzYXZpbmdzLgorCisqIDpmdW5jOmBvcy51cmFuZG9tYCBub3cgdXNlcyBhIGxhemlseS1vcGVuZWQgcGVyc2lzdGVudCBmaWxlIGRlc2NyaXB0b3IKKyAgc28gYXMgdG8gYXZvaWQgdXNpbmcgbWFueSBmaWxlIGRlc2NyaXB0b3JzIHdoZW4gcnVuIGluIHBhcmFsbGVsIGZyb20KKyAgbXVsdGlwbGUgdGhyZWFkcy4gIChDb250cmlidXRlZCBieSBBbnRvaW5lIFBpdHJvdSBpbiA6aXNzdWU6YDE4NzU2YC4pCisKKworLi4gX2RlcHJlY2F0ZWQtMy40OgorCitEZXByZWNhdGVkCis9PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb3ZlcnMgdmFyaW91cyBBUElzIGFuZCBvdGhlciBmZWF0dXJlcyB0aGF0IGhhdmUgYmVlbiBkZXByZWNhdGVkCitpbiBQeXRob24gMy40LCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjUgb3IgbGF0ZXIuICBJbiBtb3N0IChidXQgbm90CithbGwpIGNhc2VzLCB1c2luZyB0aGUgZGVwcmVjYXRlZCBBUElzIHdpbGwgcHJvZHVjZSBhIDpleGM6YERlcHJlY2F0aW9uV2FybmluZ2AKK3doZW4gdGhlIGludGVycHJldGVyIGlzIHJ1biB3aXRoIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGVuYWJsZWQgKGZvciBleGFtcGxlLCBieQordXNpbmcgYGAtV2RgYCkuCisKKworRGVwcmVjYXRpb25zIGluIHRoZSBQeXRob24gQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBBcyBtZW50aW9uZWQgaW4gOnJlZjpgd2hhdHNuZXctcGVwLTQ1MWAsIGEgbnVtYmVyIG9mIDptb2Q6YGltcG9ydGxpYmAKKyAgbWV0aG9kcyBhbmQgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkOiA6bWV0aDpgaW1wb3J0bGliLmZpbmRfbG9hZGVyYCBpcworICByZXBsYWNlZCBieSA6ZnVuYzpgaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjYDsKKyAgOm1ldGg6YGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZWAgaXMgcmVwbGFjZWQgYnkKKyAgOm1ldGg6YGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX3NwZWNgOworICA6bWV0aDpgaW1wb3J0bGliLmFiYy5NZXRhUGF0aEZpbmRlci5maW5kX21vZHVsZWAgaXMgcmVwbGFjZWQgYnkKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIuZmluZF9zcGVjYDsKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuUGF0aEVudHJ5RmluZGVyLmZpbmRfbG9hZGVyYCBhbmQKKyAgOm1ldGg6YH5pbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX21vZHVsZWAgYXJlIHJlcGxhY2VkIGJ5CisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlBhdGhFbnRyeUZpbmRlci5maW5kX3NwZWNgOyBhbGwgb2YgdGhlIGBgeHh4TG9hZGVyYGAgQUJDCisgIGBgbG9hZF9tb2R1bGVgYCBtZXRob2RzICg6bWV0aDpgaW1wb3J0bGliLmFiYy5Mb2FkZXIubG9hZF9tb2R1bGVgLAorICA6bWV0aDpgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlYCwKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuRmlsZUxvYWRlci5sb2FkX21vZHVsZWAsCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5sb2FkX21vZHVsZWApIHNob3VsZCBubyBsb25nZXIgYmUKKyAgaW1wbGVtZW50ZWQsIGluc3RlYWQgbG9hZGVycyBzaG91bGQgaW1wbGVtZW50IGFuCisgIGBgZXhlY19tb2R1bGVgYCBtZXRob2QKKyAgKDptZXRoOmBpbXBvcnRsaWIuYWJjLkxvYWRlci5leGVjX21vZHVsZWAsCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLkluc3BlY3RMb2FkZXIuZXhlY19tb2R1bGVgCisgIDptZXRoOmBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZWApIGFuZCBsZXQgdGhlIGltcG9ydCBzeXN0ZW0KKyAgdGFrZSBjYXJlIG9mIHRoZSByZXN0OyBhbmQKKyAgOm1ldGg6YGltcG9ydGxpYi5hYmMuTG9hZGVyLm1vZHVsZV9yZXByYCwKKyAgOm1ldGg6YGltcG9ydGxpYi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyYCwgOm1ldGg6YGltcG9ydGxpYi51dGlsLnNldF9sb2FkZXJgLAorICBhbmQgOm1ldGg6YGltcG9ydGxpYi51dGlsLnNldF9wYWNrYWdlYCBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBiZWNhdXNlIHRoZWlyCisgIGZ1bmN0aW9ucyBhcmUgbm93IGhhbmRsZWQgYXV0b21hdGljYWxseSBieSB0aGUgaW1wb3J0IHN5c3RlbS4KKworKiBUaGUgOm1vZDpgaW1wYCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4gVG8ga2VlcCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgUHl0aG9uIDIvMyBjb2RlIGJhc2VzLCB0aGUgbW9kdWxlJ3MgcmVtb3ZhbCBpcyBjdXJyZW50bHkgbm90IHNjaGVkdWxlZC4KKworKiBUaGUgOm1vZDpgZm9ybWF0dGVyYCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbiBhbmQgaXMgc2xhdGVkIGZvciByZW1vdmFsCisgIGluIFB5dGhvbiAzLjYuCisKKyogYGBNRDVgYCBhcyB0aGUgZGVmYXVsdCAqZGlnZXN0bW9kKiBmb3IgdGhlIDpmdW5jOmBobWFjLm5ld2AgZnVuY3Rpb24gaXMKKyAgZGVwcmVjYXRlZC4gIFB5dGhvbiAzLjYgd2lsbCByZXF1aXJlIGFuIGV4cGxpY2l0IGRpZ2VzdCBuYW1lIG9yIGNvbnN0cnVjdG9yIGFzCisgICpkaWdlc3Rtb2QqIGFyZ3VtZW50LgorCisqIFRoZSBpbnRlcm5hbCBgYE5ldHJjYGAgY2xhc3MgaW4gdGhlIDptb2Q6YGZ0cGxpYmAgbW9kdWxlIGhhcyBiZWVuIGRvY3VtZW50ZWQKKyAgYXMgZGVwcmVjYXRlZCBpbiBpdHMgZG9jc3RyaW5nIGZvciBxdWl0ZSBzb21lIHRpbWUuICBJdCBub3cgZW1pdHMgYQorICA6ZXhjOmBEZXByZWNhdGlvbldhcm5pbmdgIGFuZCB3aWxsIGJlIHJlbW92ZWQgY29tcGxldGVseSBpbiBQeXRob24gMy41LgorCisqIFRoZSB1bmRvY3VtZW50ZWQgKmVuZHRpbWUqIGFyZ3VtZW50IHRvIDptZXRoOmBzdWJwcm9jZXNzLlBvcGVuLndhaXRgIHNob3VsZAorICBub3QgaGF2ZSBiZWVuIGV4cG9zZWQgYW5kIGlzIGhvcGVmdWxseSBub3QgaW4gdXNlOyBpdCBpcyBkZXByZWNhdGVkIGFuZAorICB3aWxsIG1vc3RseSBsaWtlbHkgYmUgcmVtb3ZlZCBpbiBQeXRob24gMy41LgorCisqIFRoZSAqc3RyaWN0KiBhcmd1bWVudCBvZiA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCBpcyBkZXByZWNhdGVkLgorCisqIFRoZSA6bW9kOmBwbGlzdGxpYmAgOmZ1bmM6YH5wbGlzdGxpYi5yZWFkUGxpc3RgLAorICA6ZnVuYzpgfnBsaXN0bGliLndyaXRlUGxpc3RgLCA6ZnVuYzpgfnBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlc2AsIGFuZAorICA6ZnVuYzpgfnBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzYCBmdW5jdGlvbnMgYXJlIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdGhlCisgIGNvcnJlc3BvbmRpbmcgbmV3IGZ1bmN0aW9ucyA6ZnVuYzpgfnBsaXN0bGliLmxvYWRgLCA6ZnVuYzpgfnBsaXN0bGliLmR1bXBgLAorICA6ZnVuYzpgfnBsaXN0bGliLmxvYWRzYCwgYW5kIDpmdW5jOmB+cGxpc3RsaWIuZHVtcHNgLiAgOmZ1bmM6YH5wbGlzdGxpYi5EYXRhYAorICBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGp1c3QgdXNpbmcgdGhlIDpjbGFzczpgYnl0ZXNgIGNvbnN0cnVjdG9yLgorCisqIFRoZSA6bW9kOmBzeXNjb25maWdgIGtleSBgYFNPYGAgaXMgZGVwcmVjYXRlZCwgaXQgaGFzIGJlZW4gcmVwbGFjZWQgYnkKKyAgYGBFWFRfU1VGRklYYGAuCisKKyogVGhlIGBgVWBgIG1vZGUgYWNjZXB0ZWQgYnkgdmFyaW91cyBgYG9wZW5gYCBmdW5jdGlvbnMgaXMgZGVwcmVjYXRlZC4KKyAgSW4gUHl0aG9uMyBpdCBkb2VzIG5vdCBkbyBhbnl0aGluZyB1c2VmdWwsIGFuZCBzaG91bGQgYmUgcmVwbGFjZWQgYnkKKyAgYXBwcm9wcmlhdGUgdXNlcyBvZiA6Y2xhc3M6YGlvLlRleHRJT1dyYXBwZXJgIChpZiBuZWVkZWQpIGFuZCBpdHMgKm5ld2xpbmUqCisgIGFyZ3VtZW50LgorCisqIFRoZSAqcGFyc2VyKiBhcmd1bWVudCBvZiA6ZnVuYzpgeG1sLmV0cmVlLkVsZW1lbnRUcmVlLml0ZXJwYXJzZWAgaGFzCisgIGJlZW4gZGVwcmVjYXRlZCwgYXMgaGFzIHRoZSAqaHRtbCogYXJndW1lbnQgb2YKKyAgOmZ1bmM6YH54bWwuZXRyZWUuRWxlbWVudFRyZWUuWE1MUGFyc2VyYC4gIFRvIHByZXBhcmUgZm9yIHRoZSByZW1vdmFsIG9mIHRoZQorICBsYXR0ZXIsIGFsbCBhcmd1bWVudHMgdG8gYGBYTUxQYXJzZXJgYCBzaG91bGQgYmUgcGFzc2VkIGJ5IGtleXdvcmQuCisKKworRGVwcmVjYXRlZCBGZWF0dXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLQorCisqIFJ1bm5pbmcgOnJlZjpgaWRsZWAgd2l0aCB0aGUgYGAtbmBgIGZsYWcgKG5vIHN1YnByb2Nlc3MpIGlzIGRlcHJlY2F0ZWQuCisgIEhvd2V2ZXIsIHRoZSBmZWF0dXJlIHdpbGwgbm90IGJlIHJlbW92ZWQgdW50aWwgOmlzc3VlOmAxODgyM2AgaXMgcmVzb2x2ZWQuCisKKyogVGhlIHNpdGUgbW9kdWxlIGFkZGluZyBhICJzaXRlLXB5dGhvbiIgZGlyZWN0b3J5IHRvIHN5cy5wYXRoLCBpZiBpdAorICBleGlzdHMsIGlzIGRlcHJlY2F0ZWQgKDppc3N1ZTpgMTkzNzVgKS4KKworCisKK1JlbW92ZWQKKz09PT09PT0KKworCitPcGVyYXRpbmcgU3lzdGVtcyBObyBMb25nZXIgU3VwcG9ydGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1N1cHBvcnQgZm9yIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW5nIHN5c3RlbXMgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBzb3VyY2UKK2FuZCBidWlsZCB0b29sczoKKworKiBPUy8yICg6aXNzdWU6YDE2MTM1YCkuCisqIFdpbmRvd3MgMjAwMCAoY2hhbmdlc2V0IGU1MmRmMDViNDk2YSkuCisqIFdpbmRvd3Mgc3lzdGVtcyB3aGVyZSBgYENPTVNQRUNgYCBwb2ludHMgdG8gYGBjb21tYW5kLmNvbWBgICg6aXNzdWU6YDE0NDcwYCkuCisqIFZNUyAoOmlzc3VlOmAxNjEzNmApLgorCisKK0FQSSBhbmQgRmVhdHVyZSBSZW1vdmFscworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgb2Jzb2xldGUgYW5kIHByZXZpb3VzbHkgZGVwcmVjYXRlZCBBUElzIGFuZCBmZWF0dXJlcyBoYXZlIGJlZW4KK3JlbW92ZWQ6CisKKyogVGhlIHVubWFpbnRhaW5lZCBgYE1pc2MvVGV4dE1hdGVgYCBhbmQgYGBNaXNjL3ZpbWBgIGRpcmVjdG9yaWVzIGhhdmUgYmVlbgorICByZW1vdmVkIChzZWUgdGhlIGBkZXZndWlkZSA8aHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvZGV2Z3VpZGU+YF8KKyAgZm9yIHN1Z2dlc3Rpb25zIG9uIHdoYXQgdG8gdXNlIGluc3RlYWQpLgorCisqIFRoZSBgYFNPYGAgbWFrZWZpbGUgbWFjcm8gaXMgcmVtb3ZlZCAoaXQgd2FzIHJlcGxhY2VkIGJ5IHRoZQorICBgYFNITElCX1NVRkZJWGBgIGFuZCBgYEVYVF9TVUZGSVhgYCBtYWNyb3MpICg6aXNzdWU6YDE2NzU0YCkuCisKKyogVGhlIGBgUHlUaHJlYWRTdGF0ZS50aWNrX2NvdW50ZXJgYCBmaWVsZCBoYXMgYmVlbiByZW1vdmVkOyBpdHMgdmFsdWUgaGFzCisgIGJlZW4gbWVhbmluZ2xlc3Mgc2luY2UgUHl0aG9uIDMuMiwgd2hlbiB0aGUgIm5ldyBHSUwiIHdhcyBpbnRyb2R1Y2VkCisgICg6aXNzdWU6YDE5MTk5YCkuCisKKyogYGBQeUxvYWRlcmBgIGFuZCBgYFB5UHljTG9hZGVyYGAgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSA6bW9kOmBpbXBvcnRsaWJgLgorICAoQ29udHJpYnV0ZWQgYnkgVGFyYXMgTHlhcHVuIGluIDppc3N1ZTpgMTU2NDFgLikKKworKiBUaGUgKnN0cmljdCogYXJndW1lbnQgdG8gOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb25gIGFuZAorICA6Y2xhc3M6YH5odHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb25gIGhhcyBiZWVuIHJlbW92ZWQuICBIVFRQIDAuOS1zdHlsZQorICAiU2ltcGxlIFJlc3BvbnNlcyIgYXJlIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyogVGhlIGRlcHJlY2F0ZWQgOm1vZDpgdXJsbGliLnJlcXVlc3QuUmVxdWVzdGAgZ2V0dGVyIGFuZCBzZXR0ZXIgbWV0aG9kcworICBgYGFkZF9kYXRhYGAsIGBgaGFzX2RhdGFgYCwgYGBnZXRfZGF0YWBgLCBgYGdldF90eXBlYGAsIGBgZ2V0X2hvc3RgYCwKKyAgYGBnZXRfc2VsZWN0b3JgYCwgYGBzZXRfcHJveHlgYCwgYGBnZXRfb3JpZ2luX3JlcV9ob3N0YGAsIGFuZAorICBgYGlzX3VudmVyaWZpYWJsZWBgIGhhdmUgYmVlbiByZW1vdmVkICh1c2UgZGlyZWN0IGF0dHJpYnV0ZSBhY2Nlc3MgaW5zdGVhZCkuCisKKyogU3VwcG9ydCBmb3IgbG9hZGluZyB0aGUgZGVwcmVjYXRlZCBgYFRZUEVfSU5UNjRgYCBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgOm1vZDpgbWFyc2hhbGAuICAoQ29udHJpYnV0ZWQgYnkgRGFuIFJpdGkgaW4gOmlzc3VlOmAxNTQ4MGAuKQorCisqIDpjbGFzczpgaW5zcGVjdC5TaWduYXR1cmVgOiBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycyBhcmUgbm93IHJlcXVpcmVkCisgIHRvIGhhdmUgYSB2YWxpZCBuYW1lLgorCisqIDptZXRoOmBvYmplY3QuX19mb3JtYXRfX2Agbm8gbG9uZ2VyIGFjY2VwdHMgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmdzLCBpdCBub3cKKyAgcmFpc2VzIGEgOmV4YzpgVHlwZUVycm9yYCBpbnN0ZWFkLiAgVXNpbmcgYSBub24tZW1wdHkgc3RyaW5nIGhhcyBiZWVuCisgIGRlcHJlY2F0ZWQgc2luY2UgUHl0aG9uIDMuMi4gIFRoaXMgY2hhbmdlIGhhcyBiZWVuIG1hZGUgdG8gcHJldmVudCBhCisgIHNpdHVhdGlvbiB3aGVyZSBwcmV2aW91c2x5IHdvcmtpbmcgKGJ1dCBpbmNvcnJlY3QpIGNvZGUgd291bGQgc3RhcnQgZmFpbGluZworICBpZiBhbiBvYmplY3QgZ2FpbmVkIGEgX19mb3JtYXRfXyBtZXRob2QsIHdoaWNoIG1lYW5zIHRoYXQgeW91ciBjb2RlIG1heSBub3cKKyAgcmFpc2UgYSA6ZXhjOmBUeXBlRXJyb3JgIGlmIHlvdSBhcmUgdXNpbmcgYW4gYGAncydgYCBmb3JtYXQgY29kZSB3aXRoIG9iamVjdHMKKyAgdGhhdCBkbyBub3QgaGF2ZSBhIF9fZm9ybWF0X18gbWV0aG9kIHRoYXQgaGFuZGxlcyBpdC4gIFNlZSA6aXNzdWU6YDc5OTRgIGZvcgorICBiYWNrZ3JvdW5kLgorCisqIDptZXRoOmBkaWZmbGliLlNlcXVlbmNlTWF0Y2hlci5pc2JqdW5rYCBhbmQKKyAgOm1ldGg6YGRpZmZsaWIuU2VxdWVuY2VNYXRjaGVyLmlzYnBvcHVsYXJgIHdlcmUgZGVwcmVjYXRlZCBpbiAzLjIsIGFuZCBoYXZlCisgIG5vdyBiZWVuIHJlbW92ZWQ6IHVzZSBgYHggaW4gc20uYmp1bmtgYCBhbmQKKyAgYGB4IGluIHNtLmJwb3B1bGFyYGAsIHdoZXJlICpzbSogaXMgYSA6Y2xhc3M6YH5kaWZmbGliLlNlcXVlbmNlTWF0Y2hlcmAgb2JqZWN0CisgICg6aXNzdWU6YDEzMjQ4YCkuCisKKworQ29kZSBDbGVhbnVwcworLS0tLS0tLS0tLS0tLQorCisqIFRoZSB1bnVzZWQgYW5kIHVuZG9jdW1lbnRlZCBpbnRlcm5hbCBgYFNjYW5uZXJgYCBjbGFzcyBoYXMgYmVlbiByZW1vdmVkIGZyb20KKyAgdGhlIDptb2Q6YHB5ZG9jYCBtb2R1bGUuCisKKyogVGhlIHByaXZhdGUgYW5kIGVmZmVjdGl2ZWx5IHVudXNlZCBgYF9nZXN0YWx0YGAgbW9kdWxlIGhhcyBiZWVuIHJlbW92ZWQsCisgIGFsb25nIHdpdGggdGhlIHByaXZhdGUgOm1vZDpgcGxhdGZvcm1gIGZ1bmN0aW9ucyBgYF9tYWNfdmVyX2xvb2t1cGBgLAorICBgYF9tYWNfdmVyX2dzdGFsdGBgLCBhbmQgYGBfYmNkMnN0cmBgLCB3aGljaCB3b3VsZCBvbmx5IGhhdmUgZXZlciBiZWVuIGNhbGxlZAorICBvbiBiYWRseSBicm9rZW4gT1NYIHN5c3RlbXMgKHNlZSA6aXNzdWU6YDE4MzkzYCkuCisKKyogVGhlIGhhcmRjb2RlZCBjb3BpZXMgb2YgY2VydGFpbiA6bW9kOmBzdGF0YCBjb25zdGFudHMgdGhhdCB3ZXJlIGluY2x1ZGVkIGluCisgIHRoZSA6bW9kOmB0YXJmaWxlYCBtb2R1bGUgbmFtZXNwYWNlIGhhdmUgYmVlbiByZW1vdmVkLgorCisKKworUG9ydGluZyB0byBQeXRob24gMy40Cis9PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzZWN0aW9uIGxpc3RzIHByZXZpb3VzbHkgZGVzY3JpYmVkIGNoYW5nZXMgYW5kIG90aGVyIGJ1Z2ZpeGVzCit0aGF0IG1heSByZXF1aXJlIGNoYW5nZXMgdG8geW91ciBjb2RlLgorCisKK0NoYW5nZXMgaW4gJ3B5dGhvbicgQ29tbWFuZCBCZWhhdmlvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogSW4gYSBwb3NpeCBzaGVsbCwgc2V0dGluZyB0aGUgOmVudnZhcjpgUEFUSGAgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8KKyAgYW4gZW1wdHkgdmFsdWUgaXMgZXF1aXZhbGVudCB0byBub3Qgc2V0dGluZyBpdCBhdCBhbGwuICBIb3dldmVyLCBzZXR0aW5nCisgIDplbnZ2YXI6YFBZVEhPTlBBVEhgIHRvIGFuIGVtcHR5IHZhbHVlIHdhcyAqbm90KiBlcXVpdmFsZW50IHRvIG5vdCBzZXR0aW5nIGl0CisgIGF0IGFsbDogc2V0dGluZyA6ZW52dmFyOmBQWVRIT05QQVRIYCB0byBhbiBlbXB0eSB2YWx1ZSB3YXMgZXF1aXZhbGVudCB0bworICBzZXR0aW5nIGl0IHRvIGBgLmBgLCB3aGljaCBsZWFkcyB0byBjb25mdXNpb24gd2hlbiByZWFzb25pbmcgYnkgYW5hbG9neSB0bworICBob3cgOmVudnZhcjpgUEFUSGAgd29ya3MuICBUaGUgYmVoYXZpb3Igbm93IGNvbmZvcm1zIHRvIHRoZSBwb3NpeCBjb252ZW50aW9uCisgIGZvciA6ZW52dmFyOmBQQVRIYC4KKworKiBUaGUgW1ggcmVmcywgWSBibG9ja3NdIG91dHB1dCBvZiBhIGRlYnVnIChgYC0td2l0aC1weWRlYnVnYGApIGJ1aWxkIG9mIHRoZQorICBDUHl0aG9uIGludGVycHJldGVyIGlzIG5vdyBvZmYgYnkgZGVmYXVsdC4gIEl0IGNhbiBiZSByZS1lbmFibGVkIHVzaW5nIHRoZQorICBgYC1YIHNob3dyZWZjb3VudGBgIG9wdGlvbi4gIChDb250cmlidXRlZCBieSBFemlvIE1lbG90dGkgaW4gOmlzc3VlOmAxNzMyM2AuKQorCisqIFRoZSBweXRob24gY29tbWFuZCBhbmQgbW9zdCBzdGRsaWIgc2NyaXB0cyAoYXMgd2VsbCBhcyA6bW9kOmBhcmdwYXJzZWApIG5vdworICBvdXRwdXQgYGAtLXZlcnNpb25gYCBpbmZvcm1hdGlvbiB0byBgYHN0ZG91dGBgIGluc3RlYWQgb2YgYGBzdGRlcnJgYCAoZm9yCisgIGlzc3VlIGxpc3Qgc2VlIDpyZWY6YG90aGVyLWltcHJvdmVtZW50cy0zLjRgIGFib3ZlKS4KKworCitDaGFuZ2VzIGluIHRoZSBQeXRob24gQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogVGhlIEFCQ3MgZGVmaW5lZCBpbiA6bW9kOmBpbXBvcnRsaWIuYWJjYCBub3cgZWl0aGVyIHJhaXNlIHRoZSBhcHByb3ByaWF0ZQorICBleGNlcHRpb24gb3IgcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZSBpbnN0ZWFkIG9mIHJhaXNpbmcKKyAgOmV4YzpgTm90SW1wbGVtZW50ZWRFcnJvcmAgYmxpbmRseS4gVGhpcyB3aWxsIG9ubHkgYWZmZWN0IGNvZGUgY2FsbGluZworICA6ZnVuYzpgc3VwZXJgIGFuZCBmYWxsaW5nIHRocm91Z2ggYWxsIHRoZSB3YXkgdG8gdGhlIEFCQ3MuIEZvciBjb21wYXRpYmlsaXR5LAorICBjYXRjaCBib3RoIDpleGM6YE5vdEltcGxlbWVudGVkRXJyb3JgIG9yIHRoZSBhcHByb3ByaWF0ZSBleGNlcHRpb24gYXMgbmVlZGVkLgorCisqIFRoZSBtb2R1bGUgdHlwZSBub3cgaW5pdGlhbGl6ZXMgdGhlIDphdHRyOmBfX3BhY2thZ2VfX2AgYW5kIDphdHRyOmBfX2xvYWRlcl9fYAorICBhdHRyaWJ1dGVzIHRvIGBgTm9uZWBgIGJ5IGRlZmF1bHQuIFRvIGRldGVybWluZSBpZiB0aGVzZSBhdHRyaWJ1dGVzIHdlcmUgc2V0CisgIGluIGEgYmFja3dhcmRzLWNvbXBhdGlibGUgZmFzaGlvbiwgdXNlIGUuZy4KKyAgYGBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZWBgLiAgKDppc3N1ZTpgMTcxMTVgLikKKworKiA6bWV0aDpgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXJgIG5vdyBzZXRzIGBgX19sb2FkZXJfX2BgIGFuZAorICBgYF9fcGFja2FnZV9fYGAgdW5jb25kaXRpb25hbGx5IHRvIHByb3Blcmx5IHN1cHBvcnQgcmVsb2FkaW5nLiBJZiB0aGlzIGlzIG5vdAorICBkZXNpcmVkIHRoZW4geW91IHdpbGwgbmVlZCB0byBzZXQgdGhlc2UgYXR0cmlidXRlcyBtYW51YWxseS4gWW91IGNhbiB1c2UKKyAgOmZ1bmM6YGltcG9ydGxpYi51dGlsLm1vZHVsZV90b19sb2FkYCBmb3IgbW9kdWxlIG1hbmFnZW1lbnQuCisKKyogSW1wb3J0IG5vdyByZXNldHMgcmVsZXZhbnQgYXR0cmlidXRlcyAoZS5nLiBgYF9fbmFtZV9fYGAsIGBgX19sb2FkZXJfX2BgLAorICBgYF9fcGFja2FnZV9fYGAsIGBgX19maWxlX19gYCwgYGBfX2NhY2hlZF9fYGApIHVuY29uZGl0aW9uYWxseSB3aGVuIHJlbG9hZGluZy4KKyAgTm90ZSB0aGF0IHRoaXMgcmVzdG9yZXMgYSBwcmUtMy4zIGJlaGF2aW9yIGluIHRoYXQgaXQgbWVhbnMgYSBtb2R1bGUgaXMKKyAgcmUtZm91bmQgd2hlbiByZS1sb2FkZWQgKDppc3N1ZTpgMTk0MTNgKS4KKworKiBGcm96ZW4gcGFja2FnZXMgbm8gbG9uZ2VyIHNldCBgYF9fcGF0aF9fYGAgdG8gYSBsaXN0IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UKKyAgbmFtZSwgdGhleSBub3cgc2V0IGl0IHRvIGFuIGVtcHR5IGxpc3QuICBUaGUgcHJldmlvdXMgYmVoYXZpb3IgY291bGQgY2F1c2UKKyAgdGhlIGltcG9ydCBzeXN0ZW0gdG8gZG8gdGhlIHdyb25nIHRoaW5nIG9uIHN1Ym1vZHVsZSBpbXBvcnRzIGlmIHRoZXJlIHdhcworICBhbHNvIGEgZGlyZWN0b3J5IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZnJvemVuIHBhY2thZ2UuICBUaGUgY29ycmVjdCB3YXkKKyAgdG8gZGV0ZXJtaW5lIGlmIGEgbW9kdWxlIGlzIGEgcGFja2FnZSBvciBub3QgaXMgdG8gdXNlIGBgaGFzYXR0cihtb2R1bGUsCisgICdfX3BhdGhfXycpYGAgKDppc3N1ZTpgMTgwNjVgKS4KKworKiBGcm96ZW4gbW9kdWxlcyBubyBsb25nZXIgZGVmaW5lIGEgYGBfX2ZpbGVfX2BgIGF0dHJpYnV0ZS4gSXQncyBzZW1hbnRpY2FsbHkKKyAgaW5jb3JyZWN0IGZvciBmcm96ZW4gbW9kdWxlcyB0byBzZXQgdGhlIGF0dHJpYnV0ZSBhcyB0aGV5IGFyZSBub3QgbG9hZGVkIGZyb20KKyAgYW55IGV4cGxpY2l0IGxvY2F0aW9uLiBJZiB5b3UgbXVzdCBrbm93IHRoYXQgYSBtb2R1bGUgY29tZXMgZnJvbSBmcm96ZW4gY29kZQorICB0aGVuIHlvdSBjYW4gc2VlIGlmIHRoZSBtb2R1bGUncyBgYF9fc3BlY19fLmxvY2F0aW9uYGAgaXMgc2V0IHRvIGBgJ2Zyb3plbidgYCwKKyAgY2hlY2sgaWYgdGhlIGxvYWRlciBpcyBhIHN1YmNsYXNzIG9mCisgIDpjbGFzczpgaW1wb3J0bGliLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlcmAsCisgIG9yIGlmIFB5dGhvbiAyIGNvbXBhdGliaWxpdHkgaXMgbmVjZXNzYXJ5IHlvdSBjYW4gdXNlIDpmdW5jOmBpbXAuaXNfZnJvemVuYC4KKworKiA6ZnVuYzpgcHlfY29tcGlsZS5jb21waWxlYCBub3cgcmFpc2VzIDpleGM6YEZpbGVFeGlzdHNFcnJvcmAgaWYgdGhlIGZpbGUgcGF0aAorICBpdCB3b3VsZCB3cml0ZSB0byBpcyBhIHN5bWxpbmsgb3IgYSBub24tcmVndWxhciBmaWxlLiBUaGlzIGlzIHRvIGFjdCBhcyBhCisgIHdhcm5pbmcgdGhhdCBpbXBvcnQgd2lsbCBvdmVyd3JpdGUgdGhvc2UgZmlsZXMgd2l0aCBhIHJlZ3VsYXIgZmlsZSByZWdhcmRsZXNzCisgIG9mIHdoYXQgdHlwZSBvZiBmaWxlIHBhdGggdGhleSB3ZXJlIG9yaWdpbmFsbHkuCisKKyogOm1ldGg6YGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyLmdldF9zb3VyY2VgIG5vIGxvbmdlciByYWlzZXMKKyAgOmV4YzpgSW1wb3J0RXJyb3JgIHdoZW4gdGhlIHNvdXJjZSBjb2RlIGJlaW5nIGxvYWRlZCB0cmlnZ2VycyBhCisgIDpleGM6YFN5bnRheEVycm9yYCBvciA6ZXhjOmBVbmljb2RlRGVjb2RlRXJyb3JgLiBBcyA6ZXhjOmBJbXBvcnRFcnJvcmAgaXMKKyAgbWVhbnQgdG8gYmUgcmFpc2VkIG9ubHkgd2hlbiBzb3VyY2UgY29kZSBjYW5ub3QgYmUgZm91bmQgYnV0IGl0IHNob3VsZCwgaXQgd2FzCisgIGZlbHQgdG8gYmUgb3Zlci1yZWFjaGluZy9vdmVybG9hZGluZyBvZiB0aGF0IG1lYW5pbmcgd2hlbiB0aGUgc291cmNlIGNvZGUgaXMKKyAgZm91bmQgYnV0IGltcHJvcGVybHkgc3RydWN0dXJlZC4gSWYgeW91IHdlcmUgY2F0Y2hpbmcgSW1wb3J0RXJyb3IgYmVmb3JlIGFuZAorICB3aXNoIHRvIGNvbnRpbnVlIHRvIGlnbm9yZSBzeW50YXggb3IgZGVjb2RpbmcgaXNzdWVzLCBjYXRjaCBhbGwgdGhyZWUKKyAgZXhjZXB0aW9ucyBub3cuCisKKyogOmZ1bmM6YGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcmAgYW5kIDpmdW5jOmBmdW5jdG9vbHMud3JhcHNgIG5vdyBjb3JyZWN0bHkKKyAgc2V0IHRoZSBgYF9fd3JhcHBlZF9fYGAgYXR0cmlidXRlIHRvIHRoZSBmdW5jdGlvbiBiZWluZyB3cmFwcGVkLCBldmVuIGlmCisgIHRoYXQgZnVuY3Rpb24gYWxzbyBoYWQgaXRzIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGUgc2V0LiBUaGlzIG1lYW5zCisgIGBgX193cmFwcGVkX19gYCBhdHRyaWJ1dGVzIG5vdyBjb3JyZWN0bHkgbGluayBhIHN0YWNrIG9mIGRlY29yYXRlZAorICBmdW5jdGlvbnMgcmF0aGVyIHRoYW4gZXZlcnkgYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZSBpbiB0aGUgY2hhaW4KKyAgcmVmZXJyaW5nIHRvIHRoZSBpbm5lcm1vc3QgZnVuY3Rpb24uIEludHJvc3BlY3Rpb24gbGlicmFyaWVzIHRoYXQKKyAgYXNzdW1lZCB0aGUgcHJldmlvdXMgYmVoYXZpb3VyIHdhcyBpbnRlbnRpb25hbCBjYW4gdXNlCisgIDpmdW5jOmBpbnNwZWN0LnVud3JhcGAgdG8gYWNjZXNzIHRoZSBmaXJzdCBmdW5jdGlvbiBpbiB0aGUgY2hhaW4gdGhhdCBoYXMKKyAgbm8gYGBfX3dyYXBwZWRfX2BgIGF0dHJpYnV0ZS4KKworKiA6ZnVuYzpgaW5zcGVjdC5nZXRmdWxsYXJnc3BlY2AgaGFzIGJlZW4gcmVpbXBsZW1lbnRlZCBvbiB0b3Agb2YKKyAgOmZ1bmM6YGluc3BlY3Quc2lnbmF0dXJlYCBhbmQgaGVuY2UgaGFuZGxlcyBhIG11Y2ggd2lkZXIgdmFyaWV0eSBvZiBjYWxsYWJsZQorICBvYmplY3RzIHRoYW4gaXQgZGlkIGluIHRoZSBwYXN0LiBJdCBpcyBleHBlY3RlZCB0aGF0IGFkZGl0aW9uYWwgYnVpbHRpbiBhbmQKKyAgZXh0ZW5zaW9uIG1vZHVsZSBjYWxsYWJsZXMgd2lsbCBnYWluIHNpZ25hdHVyZSBtZXRhZGF0YSBvdmVyIHRoZSBjb3Vyc2Ugb2YKKyAgdGhlIFB5dGhvbiAzLjQgc2VyaWVzLiBDb2RlIHRoYXQgYXNzdW1lcyB0aGF0CisgIDpmdW5jOmBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjYCB3aWxsIGZhaWwgb24gbm9uLVB5dGhvbiBjYWxsYWJsZXMgbWF5IG5lZWQKKyAgdG8gYmUgYWRqdXN0ZWQgYWNjb3JkaW5nbHkuCisKKyogOmNsYXNzOmBpbXBvcnRsaWIubWFjaGluZXJ5LlBhdGhGaW5kZXJgIG5vdyBwYXNzZXMgb24gdGhlIGN1cnJlbnQgd29ya2luZworICBkaXJlY3RvcnkgdG8gb2JqZWN0cyBpbiA6ZGF0YTpgc3lzLnBhdGhfaG9va3NgIGZvciB0aGUgZW1wdHkgc3RyaW5nLiBUaGlzCisgIHJlc3VsdHMgaW4gOmRhdGE6YHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlYCBuZXZlciBjb250YWluaW5nIGBgJydgYCwgdGh1cworICBpdGVyYXRpbmcgdGhyb3VnaCA6ZGF0YTpgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVgIGJhc2VkIG9uIDpkYXRhOmBzeXMucGF0aGAKKyAgd2lsbCBub3QgZmluZCBhbGwga2V5cy4gQSBtb2R1bGUncyBgYF9fZmlsZV9fYGAgd2hlbiBpbXBvcnRlZCBpbiB0aGUgY3VycmVudAorICB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGFsc28gbm93IGhhdmUgYW4gYWJzb2x1dGUgcGF0aCwgaW5jbHVkaW5nIHdoZW4gdXNpbmcKKyAgYGAtbWBgIHdpdGggdGhlIGludGVycHJldGVyIChleGNlcHQgZm9yIGBgX19tYWluX18uX19maWxlX19gYCB3aGVuIGEgc2NyaXB0CisgIGhhcyBiZWVuIGV4ZWN1dGVkIGRpcmVjdGx5IHVzaW5nIGEgcmVsYXRpdmUgcGF0aCkgKENvbnRyaWJ1dGVkIGJ5IEJyZXR0CisgIENhbm5vbiBpbiA6aXNzdWU6YDE4NDE2YCkuICBpcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQtbGluZSkKKyAgKDppc3N1ZTpgMTg0MTZgKS4KKworKiBUaGUgcmVtb3ZhbCBvZiB0aGUgKnN0cmljdCogYXJndW1lbnQgdG8gOmNsYXNzOmB+aHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb25gCisgIGFuZCA6Y2xhc3M6YH5odHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb25gIGNoYW5nZXMgdGhlIG1lYW5pbmcgb2YgdGhlCisgIHJlbWFpbmluZyBhcmd1bWVudHMgaWYgeW91IGFyZSBzcGVjaWZ5aW5nIHRoZW0gcG9zaXRpb25hbGx5IHJhdGhlciB0aGFuIGJ5CisgIGtleXdvcmQuICBJZiB5b3UndmUgYmVlbiBwYXlpbmcgYXR0ZW50aW9uIHRvIGRlcHJlY2F0aW9uIHdhcm5pbmdzIHlvdXIgY29kZQorICBzaG91bGQgYWxyZWFkeSBiZSBzcGVjaWZ5aW5nIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyB2aWEga2V5d29yZHMuCisKKyogU3RyaW5ncyBiZXR3ZWVuIGBgZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCAuLi5gYCBzdGF0ZW1lbnRzIG5vdyAqYWx3YXlzKiByYWlzZQorICBhIDpleGM6YFN5bnRheEVycm9yYC4gIFByZXZpb3VzbHkgaWYgdGhlcmUgd2FzIG5vIGxlYWRpbmcgZG9jc3RyaW5nLCBhbgorICBpbnRlcnN0aXRpYWwgc3RyaW5nIHdvdWxkIHNvbWV0aW1lcyBiZSBpZ25vcmVkLiAgVGhpcyBicmluZ3MgQ1B5dGhvbiBpbnRvCisgIGNvbXBsaWFuY2Ugd2l0aCB0aGUgbGFuZ3VhZ2Ugc3BlYzsgSnl0aG9uIGFuZCBQeVB5IGFscmVhZHkgd2VyZS4KKyAgKDppc3N1ZTpgMTc0MzRgKS4KKworKiA6bWV0aDpgc3NsLlNTTFNvY2tldC5nZXRwZWVyY2VydGAgYW5kIDptZXRoOmBzc2wuU1NMU29ja2V0LmRvX2hhbmRzaGFrZWAKKyAgbm93IHJhaXNlIGFuIDpleGM6YE9TRXJyb3JgIHdpdGggYGBFTk9UQ09OTmBgIHdoZW4gdGhlIGBgU1NMU29ja2V0YGAgaXMgbm90CisgIGNvbm5lY3RlZCwgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgYmVoYXZpb3Igb2YgcmFpc2luZyBhbgorICA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAuICBJbiBhZGRpdGlvbiwgOm1ldGg6YH5zc2wuU1NMU29ja2V0LmdldHBlZXJjZXJ0YAorICB3aWxsIHJhaXNlIGEgOmV4YzpgVmFsdWVFcnJvcmAgaWYgdGhlIGhhbmRzaGFrZSBoYXMgbm90IHlldCBiZWVuIGRvbmUuCisKKyogOmZ1bmM6YGJhc2U2NC5iMzJkZWNvZGVgIG5vdyByYWlzZXMgYSA6ZXhjOmBiaW5hc2NpaS5FcnJvcmAgd2hlbiB0aGUKKyAgaW5wdXQgc3RyaW5nIGNvbnRhaW5zIG5vbi1iMzItYWxwaGFiZXQgY2hhcmFjdGVycywgaW5zdGVhZCBvZiBhCisgIDpleGM6YFR5cGVFcnJvcmAuICBUaGlzIHBhcnRpY3VsYXIgOmV4YzpgVHlwZUVycm9yYCB3YXMgbWlzc2VkIHdoZW4gdGhlIG90aGVyCisgIDpleGM6YFR5cGVFcnJvcmBcIHMgd2VyZSBjb252ZXJ0ZWQuICAoQ29udHJpYnV0ZWQgYnkgU2VyaGl5IFN0b3JjaGFrYSBpbgorICA6aXNzdWU6YDE4MDExYC4pICBOb3RlOiB0aGlzIGNoYW5nZSB3YXMgYWxzbyBpbmFkdmVydGVudGx5IGFwcGxpZWQgaW4gUHl0aG9uCisgIDMuMy4zLgorCisqIFRoZSA6YXR0cjpgfmNnaS5GaWVsZFN0b3JhZ2UuZmlsZWAgYXR0cmlidXRlIGlzIG5vdyBhdXRvbWF0aWNhbGx5IGNsb3NlZCB3aGVuCisgIHRoZSBjcmVhdGluZyA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgIGluc3RhbmNlIGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBJZiB5b3UKKyAgd2VyZSBwdWxsaW5nIHRoZSBmaWxlIG9iamVjdCBvdXQgc2VwYXJhdGVseSBmcm9tIHRoZSA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgCisgIGluc3RhbmNlIGFuZCBub3Qga2VlcGluZyB0aGUgaW5zdGFuY2UgYWxpdmUsIHRoZW4geW91IHNob3VsZCBlaXRoZXIgc3RvcmUgdGhlCisgIGVudGlyZSA6Y2xhc3M6YGNnaS5GaWVsZFN0b3JhZ2VgIGluc3RhbmNlIG9yIHJlYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlCisgIGJlZm9yZSB0aGUgOmNsYXNzOmBjZ2kuRmllbGRTdG9yYWdlYCBpbnN0YW5jZSBpcyBnYXJiYWdlIGNvbGxlY3RlZC4KKworKiBDYWxsaW5nIGBgcmVhZGBgIG9yIGBgd3JpdGVgYCBvbiBhIGNsb3NlZCBTU0wgc29ja2V0IG5vdyByYWlzZXMgYW4KKyAgaW5mb3JtYXRpdmUgOmV4YzpgVmFsdWVFcnJvcmAgcmF0aGVyIHRoYW4gdGhlIHByZXZpb3VzIG1vcmUgbXlzdGVyaW91cworICA6ZXhjOmBBdHRyaWJ1dGVFcnJvcmAgKDppc3N1ZTpgOTE3N2ApLgorCisqIDptZXRoOmBzbGljZS5pbmRpY2VzYCBubyBsb25nZXIgcHJvZHVjZXMgYW4gOmV4YzpgT3ZlcmZsb3dFcnJvcmAgZm9yIGh1Z2UKKyAgdmFsdWVzLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzIGZpeCwgOm1ldGg6YHNsaWNlLmluZGljZXNgIG5vdyByYWlzZXMgYQorICA6ZXhjOmBWYWx1ZUVycm9yYCBpZiBnaXZlbiBhIG5lZ2F0aXZlIGxlbmd0aDsgcHJldmlvdXNseSBpdCByZXR1cm5lZCBub25zZW5zZQorICB2YWx1ZXMgKDppc3N1ZTpgMTQ3OTRgKS4KKworKiBUaGUgOmNsYXNzOmBjb21wbGV4YCBjb25zdHJ1Y3RvciwgdW5saWtlIHRoZSA6bW9kOmBjbWF0aGAgZnVuY3Rpb25zLCB3YXMKKyAgaW5jb3JyZWN0bHkgYWNjZXB0aW5nIDpjbGFzczpgZmxvYXRgIHZhbHVlcyBpZiBhbiBvYmplY3QncyBgYF9fY29tcGxleF9fYGAKKyAgc3BlY2lhbCBtZXRob2QgcmV0dXJuZWQgb25lLiAgVGhpcyBub3cgcmFpc2VzIGEgOmV4YzpgVHlwZUVycm9yYC4KKyAgKDppc3N1ZTpgMTYyOTBgLikKKworKiBUaGUgOmNsYXNzOmBpbnRgIGNvbnN0cnVjdG9yIGluIDMuMiBhbmQgMy4zIGVycm9uZW91c2x5IGFjY2VwdHMgOmNsYXNzOmBmbG9hdGAKKyAgdmFsdWVzIGZvciB0aGUgKmJhc2UqIHBhcmFtZXRlci4gIEl0IGlzIHVubGlrZWx5IGFueW9uZSB3YXMgZG9pbmcgdGhpcywgYnV0CisgIGlmIHNvLCBpdCB3aWxsIG5vdyByYWlzZSBhIDpleGM6YFR5cGVFcnJvcmAgKDppc3N1ZTpgMTY3NzJgKS4KKworKiBEZWZhdWx0cyBmb3Iga2V5d29yZC1vbmx5IGFyZ3VtZW50cyBhcmUgbm93IGV2YWx1YXRlZCAqYWZ0ZXIqIGRlZmF1bHRzIGZvcgorICByZWd1bGFyIGtleXdvcmQgYXJndW1lbnRzLCBpbnN0ZWFkIG9mIGJlZm9yZS4gIEhvcGVmdWxseSBubyBvbmUgd3JvdGUgYW55CisgIGNvZGUgdGhhdCBkZXBlbmRzIG9uIHRoZSBwcmV2aW91cyBidWdneSBiZWhhdmlvciAoOmlzc3VlOmAxNjk2N2ApLgorCisqIFN0YWxlIHRocmVhZCBzdGF0ZXMgYXJlIG5vdyBjbGVhcmVkIGFmdGVyIDpmdW5jOmB+b3MuZm9ya2AuICBUaGlzIG1heSBjYXVzZQorICBzb21lIHN5c3RlbSByZXNvdXJjZXMgdG8gYmUgcmVsZWFzZWQgdGhhdCBwcmV2aW91c2x5IHdlcmUgaW5jb3JyZWN0bHkga2VwdAorICBwZXJwZXR1YWxseSBhbGl2ZSAoZm9yIGV4YW1wbGUsIGRhdGFiYXNlIGNvbm5lY3Rpb25zIGtlcHQgaW4gdGhyZWFkLWxvY2FsCisgIHN0b3JhZ2UpLiAgKDppc3N1ZTpgMTcwOTRgLikKKworKiBQYXJhbWV0ZXIgbmFtZXMgaW4gYGBfX2Fubm90YXRpb25zX19gYCBkaWN0cyBhcmUgbm93IG1hbmdsZWQgcHJvcGVybHksCisgIHNpbWlsYXJseSB0byBgYF9fa3dkZWZhdWx0c19fYGAuICAoQ29udHJpYnV0ZWQgYnkgWXVyeSBTZWxpdmFub3YgaW4KKyAgOmlzc3VlOmAyMDYyNWAuKQorCisqIDphdHRyOmBoYXNobGliLmhhc2gubmFtZWAgbm93IGFsd2F5cyByZXR1cm5zIHRoZSBpZGVudGlmaWVyIGluIGxvd2VyIGNhc2UuCisgIFByZXZpb3VzbHkgc29tZSBidWlsdGluIGhhc2hlcyBoYWQgdXBwZXJjYXNlIG5hbWVzLCBidXQgbm93IHRoYXQgaXQgaXMgYQorICBmb3JtYWwgcHVibGljIGludGVyZmFjZSB0aGUgbmFtaW5nIGhhcyBiZWVuIG1hZGUgY29uc2lzdGVudCAoOmlzc3VlOmAxODUzMmApLgorCisqIEJlY2F1c2UgOm1vZDpgdW5pdHRlc3QuVGVzdFN1aXRlYCBub3cgZHJvcHMgcmVmZXJlbmNlcyB0byB0ZXN0cyBhZnRlciB0aGV5CisgIGFyZSBydW4sIHRlc3QgaGFybmVzc2VzIHRoYXQgcmUtdXNlIGEgOmNsYXNzOmB+dW5pdHRlc3QuVGVzdFN1aXRlYCB0byByZS1ydW4KKyAgYSBzZXQgb2YgdGVzdHMgbWF5IGZhaWwuICAgVGVzdCBzdWl0ZXMgc2hvdWxkIG5vdCBiZSByZS11c2VkIGluIHRoaXMgZmFzaGlvbgorICBzaW5jZSBpdCBtZWFucyBzdGF0ZSBpcyByZXRhaW5lZCBiZXR3ZWVuIHRlc3QgcnVucywgYnJlYWtpbmcgdGhlIHRlc3QKKyAgaXNvbGF0aW9uIHRoYXQgOm1vZDpgdW5pdHRlc3RgIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUuICBIb3dldmVyLCBpZiB0aGUgbGFjaworICBvZiBpc29sYXRpb24gaXMgY29uc2lkZXJlZCBhY2NlcHRhYmxlLCB0aGUgb2xkIGJlaGF2aW9yIGNhbiBiZSByZXN0b3JlZCBieQorICBjcmVhdGluZyBhIDptb2Q6YH51bml0dGVzdC5UZXN0U3VpdGVgIHN1YmNsYXNzIHRoYXQgZGVmaW5lcyBhCisgIGBgX3JlbW92ZVRlc3RBdEluZGV4YGAgbWV0aG9kIHRoYXQgZG9lcyBub3RoaW5nIChzZWUKKyAgOm1ldGg6YC5UZXN0U3VpdGUuX19pdGVyX19gKSAoOmlzc3VlOmAxMTc5OGApLgorCisqIDptb2Q6YHVuaXR0ZXN0YCBub3cgdXNlcyA6bW9kOmBhcmdwYXJzZWAgZm9yIGNvbW1hbmQgbGluZSBwYXJzaW5nLiAgVGhlcmUgYXJlCisgIGNlcnRhaW4gaW52YWxpZCBjb21tYW5kIGZvcm1zIHRoYXQgdXNlZCB0byB3b3JrIHRoYXQgYXJlIG5vIGxvbmdlciBhbGxvd2VkOworICBpbiB0aGVvcnkgdGhpcyBzaG91bGQgbm90IGNhdXNlIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWVzIHNpbmNlIHRoZQorICBkaXNhbGxvd2VkIGNvbW1hbmQgZm9ybXMgZGlkbid0IG1ha2UgYW55IHNlbnNlIGFuZCBhcmUgdW5saWtlbHkgdG8gYmUgaW4gdXNlLgorCisqIFRoZSA6ZnVuYzpgcmUuc3BsaXRgLCA6ZnVuYzpgcmUuZmluZGFsbGAsIGFuZCA6ZnVuYzpgcmUuc3ViYCBmdW5jdGlvbnMsIGFuZAorICB0aGUgOm1ldGg6YH5yZS5tYXRjaC5ncm91cGAgYW5kIDptZXRoOmB+cmUubWF0Y2guZ3JvdXBzYCBtZXRob2RzIG9mCisgIGBgbWF0Y2hgYCBvYmplY3RzIG5vdyBhbHdheXMgcmV0dXJuIGEgKmJ5dGVzKiBvYmplY3Qgd2hlbiB0aGUgc3RyaW5nCisgIHRvIGJlIG1hdGNoZWQgaXMgYSA6dGVybTpgYnl0ZXMtbGlrZSBvYmplY3RgLiAgUHJldmlvdXNseSB0aGUgcmV0dXJuIHR5cGUKKyAgbWF0Y2hlZCB0aGUgaW5wdXQgdHlwZSwgc28gaWYgeW91ciBjb2RlIHdhcyBkZXBlbmRpbmcgb24gdGhlIHJldHVybiB2YWx1ZQorICBiZWluZywgc2F5LCBhIGBgYnl0ZWFycmF5YGAsIHlvdSB3aWxsIG5lZWQgdG8gY2hhbmdlIHlvdXIgY29kZS4KKworKiA6bW9kOmBhdWRpb29wYCBmdW5jdGlvbnMgbm93IHJhaXNlIGFuIGVycm9yIGltbWVkaWF0ZWx5IGlmIHBhc3NlZCBzdHJpbmcKKyAgaW5wdXQsIGluc3RlYWQgb2YgZmFpbGluZyByYW5kb21seSBsYXRlciBvbiAoOmlzc3VlOmAxNjY4NWApLgorCisqIFRoZSBuZXcgKmNvbnZlcnRfY2hhcnJlZnMqIGFyZ3VtZW50IHRvIDpjbGFzczpgfmh0bWwucGFyc2VyLkhUTUxQYXJzZXJgCisgIGN1cnJlbnRseSBkZWZhdWx0cyB0byBgYEZhbHNlYGAgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGJ1dCB3aWxsCisgIGV2ZW50dWFsbHkgYmUgY2hhbmdlZCB0byBkZWZhdWx0IHRvIGBgVHJ1ZWBgLiAgSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWRkCisgIHRoaXMga2V5d29yZCwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWUsIHRvIGFueQorICA6Y2xhc3M6YH5odG1sLnBhcnNlci5IVE1MUGFyc2VyYCBjYWxscyBpbiB5b3VyIGNvZGUgKDppc3N1ZTpgMTM2MzNgKS4KKworKiBTaW5jZSB0aGUgKmRpZ2VzdG1vZCogYXJndW1lbnQgdG8gdGhlIDpmdW5jOmBobWFjLm5ld2AgZnVuY3Rpb24gd2lsbCBpbiB0aGUKKyAgZnV0dXJlIGhhdmUgbm8gZGVmYXVsdCwgYWxsIGNhbGxzIHRvIDpmdW5jOmBobWFjLm5ld2Agc2hvdWxkIGJlIGNoYW5nZWQgdG8KKyAgZXhwbGljaXRseSBzcGVjaWZ5IGEgKmRpZ2VzdG1vZCogKDppc3N1ZTpgMTcyNzZgKS4KKworKiBDYWxsaW5nIDpmdW5jOmBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXJgIHdpdGggdGhlIGBgU09gYCBrZXksIG9yIGxvb2tpbmcKKyAgYGBTT2BgIHVwIGluIHRoZSByZXN1bHRzIG9mIGEgY2FsbCB0byA6ZnVuYzpgc3lzY29uZmlnLmdldF9jb25maWdfdmFyc2AKKyAgaXMgZGVwcmVjYXRlZC4gIFRoaXMga2V5IHNob3VsZCBiZSByZXBsYWNlZCBieSBgYEVYVF9TVUZGSVhgYCBvcgorICBgYFNITElCX1NVRkZJWGBgLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgKDppc3N1ZTpgMTk1NTVgKS4KKworKiBBbnkgY2FsbHMgdG8gYGBvcGVuYGAgZnVuY3Rpb25zIHRoYXQgc3BlY2lmeSBgYFVgYCBzaG91bGQgYmUgbW9kaWZpZWQuCisgIGBgVWBgIGlzIGluZWZmZWN0aXZlIGluIFB5dGhvbjMgYW5kIHdpbGwgZXZlbnR1YWxseSByYWlzZSBhbiBlcnJvciBpZiB1c2VkLgorICBEZXBlbmRpbmcgb24gdGhlIGZ1bmN0aW9uLCB0aGUgZXF1aXZhbGVudCBvZiBpdHMgb2xkIFB5dGhvbjIgYmVoYXZpb3IgY2FuIGJlCisgIGFjaGlldmVkIHVzaW5nIGVpdGhlciBhICpuZXdsaW5lKiBhcmd1bWVudCwgb3IgaWYgbmVjZXNzYXJ5IGJ5IHdyYXBwaW5nIHRoZQorICBzdHJlYW0gaW4gOm1vZDpgfmlvLlRleHRJT1dyYXBwZXJgIHRvIHVzZSBpdHMgKm5ld2xpbmUqIGFyZ3VtZW50CisgICg6aXNzdWU6YDE1MjA0YCkuCisKKyogSWYgeW91IHVzZSA6cmVmOmBweXZlbnYgPHNjcmlwdHMtcHl2ZW52PmAgaW4gYSBzY3JpcHQgYW5kIGRlc2lyZSB0aGF0IHBpcAorICAqbm90KiBiZSBpbnN0YWxsZWQsIHlvdSBtdXN0IGFkZCBgYC0td2l0aG91dC1waXBgYCB0byB5b3VyIGNvbW1hbmQKKyAgaW52b2NhdGlvbi4KKworKiBUaGUgZGVmYXVsdCBiZWhhdmlvciBvZiA6ZnVuYzpganNvbi5kdW1wYCBhbmQgOmZ1bmM6YGpzb24uZHVtcHNgIHdoZW4KKyAgYW4gaW5kZW50IGlzIHNwZWNpZmllZCBoYXMgY2hhbmdlZDogaXQgbm8gbG9uZ2VyIHByb2R1Y2VzIHRyYWlsaW5nCisgIHNwYWNlcyBhZnRlciB0aGUgaXRlbSBzZXBhcmF0aW5nIGNvbW1hcyBhdCB0aGUgZW5kcyBvZiBsaW5lcy4gIFRoaXMKKyAgd2lsbCBtYXR0ZXIgb25seSBpZiB5b3UgaGF2ZSB0ZXN0cyB0aGF0IGFyZSBkb2luZyB3aGl0ZS1zcGFjZS1zZW5zaXRpdmUKKyAgY29tcGFyaXNvbnMgb2Ygc3VjaCBvdXRwdXQgKDppc3N1ZTpgMTYzMzNgKS4KKworKiA6bW9kOmBkb2N0ZXN0YCBub3cgbG9va3MgZm9yIGRvY3Rlc3RzIGluIGV4dGVuc2lvbiBtb2R1bGUgYGBfX2RvY19fYGAKKyAgc3RyaW5ncywgc28gaWYgeW91ciBkb2N0ZXN0IHRlc3QgZGlzY292ZXJ5IGluY2x1ZGVzIGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQKKyAgaGF2ZSB0aGluZ3MgdGhhdCBsb29rIGxpa2UgZG9jdGVzdHMgaW4gdGhlbSB5b3UgbWF5IHNlZSB0ZXN0IGZhaWx1cmVzIHlvdSd2ZQorICBuZXZlciBzZWVuIGJlZm9yZSB3aGVuIHJ1bm5pbmcgeW91ciB0ZXN0cyAoOmlzc3VlOmAzMTU4YCkuCisKKyogVGhlIDptb2Q6YGNvbGxlY3Rpb25zLmFiY2AgbW9kdWxlIGhhcyBiZWVuIHNsaWdodGx5IHJlZmFjdG9yZWQgYXMKKyAgcGFydCBvZiB0aGUgUHl0aG9uIHN0YXJ0dXAgaW1wcm92ZW1lbnRzLiAgQXMgYSBjb25zZXF1ZW5jZSBvZiB0aGlzLCBpdCBpcyBubworICBsb25nZXIgdGhlIGNhc2UgdGhhdCBpbXBvcnRpbmcgOm1vZDpgY29sbGVjdGlvbnNgIGF1dG9tYXRpY2FsbHkgaW1wb3J0cworICA6bW9kOmBjb2xsZWN0aW9ucy5hYmNgLiAgSWYgeW91ciBwcm9ncmFtIGRlcGVuZGVkIG9uIHRoZSAodW5kb2N1bWVudGVkKQorICBpbXBsaWNpdCBpbXBvcnQsIHlvdSB3aWxsIG5lZWQgdG8gYWRkIGFuIGV4cGxpY2l0IGBgaW1wb3J0IGNvbGxlY3Rpb25zLmFiY2BgCisgICg6aXNzdWU6YDIwNzg0YCkuCisKKworQ2hhbmdlcyBpbiB0aGUgQyBBUEkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyogOmM6ZnVuYzpgUHlFdmFsX0V2YWxGcmFtZUV4YCwgOmM6ZnVuYzpgUHlPYmplY3RfUmVwcmAsIGFuZAorICA6YzpmdW5jOmBQeU9iamVjdF9TdHJgLCBhbG9uZyB3aXRoIHNvbWUgb3RoZXIgaW50ZXJuYWwgQyBBUElzLCBub3cgaW5jbHVkZQorICBhIGRlYnVnZ2luZyBhc3NlcnRpb24gdGhhdCBlbnN1cmVzIHRoZXkgYXJlIG5vdCB1c2VkIGluIHNpdHVhdGlvbnMgd2hlcmUKKyAgdGhleSBtYXkgc2lsZW50bHkgZGlzY2FyZCBhIGN1cnJlbnRseSBhY3RpdmUgZXhjZXB0aW9uLiBJbiBjYXNlcyB3aGVyZQorICBkaXNjYXJkaW5nIHRoZSBhY3RpdmUgZXhjZXB0aW9uIGlzIGV4cGVjdGVkIGFuZCBkZXNpcmVkIChmb3IgZXhhbXBsZSwKKyAgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHNhdmVkIGxvY2FsbHkgd2l0aCA6YzpmdW5jOmBQeUVycl9GZXRjaGAgb3IKKyAgaXMgYmVpbmcgZGVsaWJlcmF0ZWx5IHJlcGxhY2VkIHdpdGggYSBkaWZmZXJlbnQgZXhjZXB0aW9uKSwgYW4gZXhwbGljaXQKKyAgOmM6ZnVuYzpgUHlFcnJfQ2xlYXJgIGNhbGwgd2lsbCBiZSBuZWVkZWQgdG8gYXZvaWQgdHJpZ2dlcmluZyB0aGUKKyAgYXNzZXJ0aW9uIHdoZW4gaW52b2tpbmcgdGhlc2Ugb3BlcmF0aW9ucyAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kCisgIHJ1bm5pbmcgYWdhaW5zdCBhIHZlcnNpb24gb2YgUHl0aG9uIHRoYXQgaXMgY29tcGlsZWQgd2l0aCBhc3NlcnRpb25zCisgIGVuYWJsZWQuCisKKyogOmM6ZnVuYzpgUHlFcnJfU2V0SW1wb3J0RXJyb3JgIG5vdyBzZXRzIDpleGM6YFR5cGVFcnJvcmAgd2hlbiBpdHMgKiptc2cqKgorICBhcmd1bWVudCBpcyBub3Qgc2V0LiBQcmV2aW91c2x5IG9ubHkgYGBOVUxMYGAgd2FzIHJldHVybmVkIHdpdGggbm8gZXhjZXB0aW9uCisgIHNldC4KKworKiBUaGUgcmVzdWx0IG9mIHRoZSA6YzpkYXRhOmBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyYCBjYWxsYmFjayBtdXN0CisgIG5vdyBiZSBhIHN0cmluZyBhbGxvY2F0ZWQgYnkgOmM6ZnVuYzpgUHlNZW1fUmF3TWFsbG9jYCBvcgorICA6YzpmdW5jOmBQeU1lbV9SYXdSZWFsbG9jYCwgb3IgKk5VTEwqIGlmIGFuIGVycm9yIG9jY3VycmVkLCBpbnN0ZWFkIG9mIGEKKyAgc3RyaW5nIGFsbG9jYXRlZCBieSA6YzpmdW5jOmBQeU1lbV9NYWxsb2NgIG9yIDpjOmZ1bmM6YFB5TWVtX1JlYWxsb2NgCisgICg6aXNzdWU6YDE2NzQyYCkKKworKiA6YzpmdW5jOmBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlYCBub3cgYWx3YXlzIHNldCB0aGUgdmFsdWUuIEluIFB5dGhvbgorICAzLjMsIHRoZSBmdW5jdGlvbiBkaWQgbm90aGluZyBpZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzIChpZiB0aGUgY3VycmVudAorICB2YWx1ZSBpcyBhIG5vbi1OVUxMIHBvaW50ZXIpLgorCisqIFRoZSBgYGZfdHN0YXRlYGAgKHRocmVhZCBzdGF0ZSkgZmllbGQgb2YgdGhlIDpjOnR5cGU6YFB5RnJhbWVPYmplY3RgCisgIHN0cnVjdHVyZSBoYXMgYmVlbiByZW1vdmVkIHRvIGZpeCBhIGJ1Zzogc2VlIDppc3N1ZTpgMTQ0MzJgIGZvciB0aGUKKyAgcmF0aW9uYWxlLgorCitDaGFuZ2VkIGluIDMuNC4zCis9PT09PT09PT09PT09PT09CisKKy4uIF9wZXAtNDc2OgorCitQRVAgNDc2OiBFbmFibGluZyBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gYnkgZGVmYXVsdCBmb3Igc3RkbGliIGh0dHAgY2xpZW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworOm1vZDpgaHR0cC5jbGllbnRgIGFuZCBtb2R1bGVzIHdoaWNoIHVzZSBpdCwgc3VjaCBhcyA6bW9kOmB1cmxsaWIucmVxdWVzdGAgYW5kCis6bW9kOmB4bWxycGMuY2xpZW50YCwgd2lsbCBub3cgdmVyaWZ5IHRoYXQgdGhlIHNlcnZlciBwcmVzZW50cyBhIGNlcnRpZmljYXRlCit3aGljaCBpcyBzaWduZWQgYnkgYSBDQSBpbiB0aGUgcGxhdGZvcm0gdHJ1c3Qgc3RvcmUgYW5kIHdob3NlIGhvc3RuYW1lIG1hdGNoZXMKK3RoZSBob3N0bmFtZSBiZWluZyByZXF1ZXN0ZWQgYnkgZGVmYXVsdCwgc2lnbmlmaWNhbnRseSBpbXByb3Zpbmcgc2VjdXJpdHkgZm9yCittYW55IGFwcGxpY2F0aW9ucy4KKworRm9yIGFwcGxpY2F0aW9ucyB3aGljaCByZXF1aXJlIHRoZSBvbGQgcHJldmlvdXMgYmVoYXZpb3IsIHRoZXkgY2FuIHBhc3MgYW4KK2FsdGVybmF0ZSBjb250ZXh0OjoKKworICAgIGltcG9ydCB1cmxsaWIucmVxdWVzdAorICAgIGltcG9ydCBzc2wKKworICAgICMgVGhpcyBkaXNhYmxlcyBhbGwgdmVyaWZpY2F0aW9uCisgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3VudmVyaWZpZWRfY29udGV4dCgpCisKKyAgICAjIFRoaXMgYWxsb3dzIHVzaW5nIGEgc3BlY2lmaWMgY2VydGlmaWNhdGUgZm9yIHRoZSBob3N0LCB3aGljaCBkb2Vzbid0IG5lZWQKKyAgICAjIHRvIGJlIGluIHRoZSB0cnVzdCBzdG9yZQorICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChjYWZpbGU9Ii9wYXRoL3RvL2ZpbGUuY3J0IikKKworICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oImh0dHBzOi8vaW52YWxpZC1jZXJ0IiwgY29udGV4dD1jb250ZXh0KQpkaWZmIC0tZ2l0IGEvRG9jL3doYXRzbmV3L2NoYW5nZWxvZy5yc3QgYi9Eb2Mvd2hhdHNuZXcvY2hhbmdlbG9nLnJzdAppbmRleCA1N2UyZGFiLi4wN2Y5MDk0IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvY2hhbmdlbG9nLnJzdAorKysgYi9Eb2Mvd2hhdHNuZXcvY2hhbmdlbG9nLnJzdApAQCAtMyw0ICszLDMgQEAKICsrKysrKysrKwogCiAuLiBtaXNjbmV3czo6IC4uLy4uL01pc2MvTkVXUwotCmRpZmYgLS1naXQgYS9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0IGIvRG9jL3doYXRzbmV3L2luZGV4LnJzdAppbmRleCBiYzEyMDZiLi4yOTkwMmU0IDEwMDY0NAotLS0gYS9Eb2Mvd2hhdHNuZXcvaW5kZXgucnN0CisrKyBiL0RvYy93aGF0c25ldy9pbmRleC5yc3QKQEAgLTExLDYgKzExLDcgQEAKIC4uIHRvY3RyZWU6OgogICAgOm1heGRlcHRoOiAyCiAKKyAgIDMuNC5yc3QKICAgIDMuMy5yc3QKICAgIDMuMi5yc3QKICAgIDMuMS5yc3QKZGlmZiAtLWdpdCBhL0dyYW1tYXIvR3JhbW1hciBiL0dyYW1tYXIvR3JhbW1hcgppbmRleCBkN2FhZmZkLi4wNWMzMTgxIDEwMDY0NAotLS0gYS9HcmFtbWFyL0dyYW1tYXIKKysrIGIvR3JhbW1hci9HcmFtbWFyCkBAIC03LDggKzcsOCBAQAogIyAgICAgICAgd2l0aCBzb21lb25lIHdobyBjYW47IGFzayBhcm91bmQgb24gcHl0aG9uLWRldiBmb3IgaGVscC4gIEZyZWQKICMgICAgICAgIERyYWtlIDxmZHJha2VAYWNtLm9yZz4gd2lsbCBwcm9iYWJseSBiZSBsaXN0ZW5pbmcgdGhlcmUuCiAKLSMgTk9URSBXRUxMOiBZb3Ugc2hvdWxkIGFsc28gZm9sbG93IGFsbCB0aGUgc3RlcHMgbGlzdGVkIGluIFBFUCAzMDYsCi0jICJIb3cgdG8gQ2hhbmdlIFB5dGhvbidzIEdyYW1tYXIiCisjIE5PVEUgV0VMTDogWW91IHNob3VsZCBhbHNvIGZvbGxvdyBhbGwgdGhlIHN0ZXBzIGxpc3RlZCBhdAorIyBodHRwczovL2RvY3MucHl0aG9uLm9yZy9kZXZndWlkZS9ncmFtbWFyLmh0bWwKIAogIyBTdGFydCBzeW1ib2xzIGZvciB0aGUgZ3JhbW1hcjoKICMgICAgICAgc2luZ2xlX2lucHV0IGlzIGEgc2luZ2xlIGludGVyYWN0aXZlIHN0YXRlbWVudDsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvUHl0aG9uLWFzdC5oIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKaW5kZXggMDBlOTJkMC4uNjdkNjc3YiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24tYXN0LmgKKysrIGIvSW5jbHVkZS9QeXRob24tYXN0LmgKQEAgLTE4Miw4ICsxODIsOSBAQAogICAgICAgICAgICAgICAgICAgU2V0Q29tcF9raW5kPTksIERpY3RDb21wX2tpbmQ9MTAsIEdlbmVyYXRvckV4cF9raW5kPTExLAogICAgICAgICAgICAgICAgICAgWWllbGRfa2luZD0xMiwgWWllbGRGcm9tX2tpbmQ9MTMsIENvbXBhcmVfa2luZD0xNCwKICAgICAgICAgICAgICAgICAgIENhbGxfa2luZD0xNSwgTnVtX2tpbmQ9MTYsIFN0cl9raW5kPTE3LCBCeXRlc19raW5kPTE4LAotICAgICAgICAgICAgICAgICAgRWxsaXBzaXNfa2luZD0xOSwgQXR0cmlidXRlX2tpbmQ9MjAsIFN1YnNjcmlwdF9raW5kPTIxLAotICAgICAgICAgICAgICAgICAgU3RhcnJlZF9raW5kPTIyLCBOYW1lX2tpbmQ9MjMsIExpc3Rfa2luZD0yNCwgVHVwbGVfa2luZD0yNX07CisgICAgICAgICAgICAgICAgICBOYW1lQ29uc3RhbnRfa2luZD0xOSwgRWxsaXBzaXNfa2luZD0yMCwgQXR0cmlidXRlX2tpbmQ9MjEsCisgICAgICAgICAgICAgICAgICBTdWJzY3JpcHRfa2luZD0yMiwgU3RhcnJlZF9raW5kPTIzLCBOYW1lX2tpbmQ9MjQsCisgICAgICAgICAgICAgICAgICBMaXN0X2tpbmQ9MjUsIFR1cGxlX2tpbmQ9MjZ9Owogc3RydWN0IF9leHByIHsKICAgICBlbnVtIF9leHByX2tpbmQga2luZDsKICAgICB1bmlvbiB7CkBAIC0yNzksNiArMjgwLDEwIEBACiAgICAgICAgIH0gQnl0ZXM7CiAgICAgICAgIAogICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc2luZ2xldG9uIHZhbHVlOworICAgICAgICB9IE5hbWVDb25zdGFudDsKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwogICAgICAgICAgICAgaWRlbnRpZmllciBhdHRyOwogICAgICAgICAgICAgZXhwcl9jb250ZXh0X3R5IGN0eDsKQEAgLTM1OSwxOCArMzY0LDE4IEBACiAKIHN0cnVjdCBfYXJndW1lbnRzIHsKICAgICBhc2RsX3NlcSAqYXJnczsKLSAgICBpZGVudGlmaWVyIHZhcmFyZzsKLSAgICBleHByX3R5IHZhcmFyZ2Fubm90YXRpb247CisgICAgYXJnX3R5IHZhcmFyZzsKICAgICBhc2RsX3NlcSAqa3dvbmx5YXJnczsKLSAgICBpZGVudGlmaWVyIGt3YXJnOwotICAgIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uOwotICAgIGFzZGxfc2VxICpkZWZhdWx0czsKICAgICBhc2RsX3NlcSAqa3dfZGVmYXVsdHM7CisgICAgYXJnX3R5IGt3YXJnOworICAgIGFzZGxfc2VxICpkZWZhdWx0czsKIH07CiAKIHN0cnVjdCBfYXJnIHsKICAgICBpZGVudGlmaWVyIGFyZzsKICAgICBleHByX3R5IGFubm90YXRpb247CisgICAgaW50IGxpbmVubzsKKyAgICBpbnQgY29sX29mZnNldDsKIH07CiAKIHN0cnVjdCBfa2V5d29yZCB7CkBAIC01MDksNiArNTE0LDkgQEAKIGV4cHJfdHkgX1B5X1N0cihzdHJpbmcgcywgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgQnl0ZXMoYTAsIGExLCBhMiwgYTMpIF9QeV9CeXRlcyhhMCwgYTEsIGEyLCBhMykKIGV4cHJfdHkgX1B5X0J5dGVzKGJ5dGVzIHMsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSk7CisjZGVmaW5lIE5hbWVDb25zdGFudChhMCwgYTEsIGEyLCBhMykgX1B5X05hbWVDb25zdGFudChhMCwgYTEsIGEyLCBhMykKK2V4cHJfdHkgX1B5X05hbWVDb25zdGFudChzaW5nbGV0b24gdmFsdWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hCisgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZW5hKTsKICNkZWZpbmUgRWxsaXBzaXMoYTAsIGExLCBhMikgX1B5X0VsbGlwc2lzKGEwLCBhMSwgYTIpCiBleHByX3R5IF9QeV9FbGxpcHNpcyhpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpOwogI2RlZmluZSBBdHRyaWJ1dGUoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSkgX1B5X0F0dHJpYnV0ZShhMCwgYTEsIGEyLCBhMywgYTQsIGE1KQpAQCAtNTQyLDExICs1NTAsMTAgQEAKIGV4Y2VwdGhhbmRsZXJfdHkgX1B5X0V4Y2VwdEhhbmRsZXIoZXhwcl90eSB0eXBlLCBpZGVudGlmaWVyIG5hbWUsIGFzZGxfc2VxICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9keSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQsIFB5QXJlbmEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFyZW5hKTsKLSNkZWZpbmUgYXJndW1lbnRzKGEwLCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgpIF9QeV9hcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCkKLWFyZ3VtZW50c190eSBfUHlfYXJndW1lbnRzKGFzZGxfc2VxICogYXJncywgaWRlbnRpZmllciB2YXJhcmcsIGV4cHJfdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmFyZ2Fubm90YXRpb24sIGFzZGxfc2VxICoga3dvbmx5YXJncywgaWRlbnRpZmllcgotICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmcsIGV4cHJfdHkga3dhcmdhbm5vdGF0aW9uLCBhc2RsX3NlcSAqIGRlZmF1bHRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpOworI2RlZmluZSBhcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpIF9QeV9hcmd1bWVudHMoYTAsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpCithcmd1bWVudHNfdHkgX1B5X2FyZ3VtZW50cyhhc2RsX3NlcSAqIGFyZ3MsIGFyZ190eSB2YXJhcmcsIGFzZGxfc2VxICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3MsIGFzZGxfc2VxICoga3dfZGVmYXVsdHMsIGFyZ190eSBrd2FyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICogZGVmYXVsdHMsIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUgYXJnKGEwLCBhMSwgYTIpIF9QeV9hcmcoYTAsIGExLCBhMikKIGFyZ190eSBfUHlfYXJnKGlkZW50aWZpZXIgYXJnLCBleHByX3R5IGFubm90YXRpb24sIFB5QXJlbmEgKmFyZW5hKTsKICNkZWZpbmUga2V5d29yZChhMCwgYTEsIGEyKSBfUHlfa2V5d29yZChhMCwgYTEsIGEyKQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9QeXRob24uaCBiL0luY2x1ZGUvUHl0aG9uLmgKaW5kZXggYTc4YTcyMS4uMmRkODI5MCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9QeXRob24uaAorKysgYi9JbmNsdWRlL1B5dGhvbi5oCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVkZSAib2JqZWN0LmgiCiAjaW5jbHVkZSAib2JqaW1wbC5oIgogI2luY2x1ZGUgInR5cGVzbG90cy5oIgorI2luY2x1ZGUgInB5aGFzaC5oIgogCiAjaW5jbHVkZSAicHlkZWJ1Zy5oIgogCmRpZmYgLS1naXQgYS9JbmNsdWRlL2Fic3RyYWN0LmggYi9JbmNsdWRlL2Fic3RyYWN0LmgKaW5kZXggYzk2MjRmMy4uYmJlZGFmZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9hYnN0cmFjdC5oCisrKyBiL0luY2x1ZGUvYWJzdHJhY3QuaApAQCAtOTUsNyArOTUsNyBAQAogICBudW1lcmljLCBzZXF1ZW5jZSwgYW5kIG1hcHBpbmcuICBFYWNoIHByb3RvY29sIGNvbnNpc3RzIG9mIGEKICAgY29sbGVjdGlvbiBvZiByZWxhdGVkIG9wZXJhdGlvbnMuICBJZiBhbiBvcGVyYXRpb24gdGhhdCBpcyBub3QKICAgcHJvdmlkZWQgYnkgYSBwYXJ0aWN1bGFyIHR5cGUgaXMgaW52b2tlZCwgdGhlbiBhIHN0YW5kYXJkIGV4Y2VwdGlvbiwKLSAgTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQgd2l0aCBhIG9wZXJhdGlvbiBuYW1lIGFzIGFuIGFyZ3VtZW50LgorICBOb3RJbXBsZW1lbnRlZEVycm9yIGlzIHJhaXNlZCB3aXRoIGFuIG9wZXJhdGlvbiBuYW1lIGFzIGFuIGFyZ3VtZW50LgogICBJbiBhZGRpdGlvbiwgZm9yIGNvbnZlbmllbmNlIHRoaXMgaW50ZXJmYWNlIGRlZmluZXMgYSBzZXQgb2YKICAgY29uc3RydWN0b3JzIGZvciBidWlsZGluZyBvYmplY3RzIG9mIGJ1aWx0LWluIHR5cGVzLiAgVGhpcyBpcyBuZWVkZWQKICAgc28gbmV3IG9iamVjdHMgY2FuIGJlIHJldHVybmVkIGZyb20gQyBmdW5jdGlvbnMgdGhhdCBvdGhlcndpc2UgdHJlYXQKQEAgLTE0NCw3ICsxNDQsNyBAQAogCiAgICAgIC8qIEltcGxlbWVudGVkIGVsc2V3aGVyZToKIAotICAgICBpbnQgUHlPYmplY3RfSGFzQXR0clN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqYXR0cl9uYW1lKTsKKyAgICAgaW50IFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmF0dHJfbmFtZSk7CiAKICAgICAgUmV0dXJucyAxIGlmIG8gaGFzIHRoZSBhdHRyaWJ1dGUgYXR0cl9uYW1lLCBhbmQgMCBvdGhlcndpc2UuCiAgICAgIFRoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgUHl0aG9uIGV4cHJlc3Npb246CkBAIC0xNTYsNyArMTU2LDcgQEAKIAogICAgICAvKiBJbXBsZW1lbnRlZCBlbHNld2hlcmU6CiAKLSAgICAgUHlPYmplY3QqIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmF0dHJfbmFtZSk7CisgICAgIFB5T2JqZWN0KiBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUpOwogCiAgICAgIFJldHJpZXZlIGFuIGF0dHJpYnV0ZWQgbmFtZWQgYXR0cl9uYW1lIGZvcm0gb2JqZWN0IG8uCiAgICAgIFJldHVybnMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBvbiBzdWNjZXNzLCBvciBOVUxMIG9uIGZhaWx1cmUuCkBAIC0xODksNyArMTg5LDcgQEAKIAogICAgICAvKiBJbXBsZW1lbnRlZCBlbHNld2hlcmU6CiAKLSAgICAgaW50IFB5T2JqZWN0X1NldEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmF0dHJfbmFtZSwgUHlPYmplY3QgKnYpOworICAgICBpbnQgUHlPYmplY3RfU2V0QXR0clN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqYXR0cl9uYW1lLCBQeU9iamVjdCAqdik7CiAKICAgICAgU2V0IHRoZSB2YWx1ZSBvZiB0aGUgYXR0cmlidXRlIG5hbWVkIGF0dHJfbmFtZSwgZm9yIG9iamVjdCBvLAogICAgICB0byB0aGUgdmFsdWUsIHYuIFJldHVybnMgLTEgb24gZmFpbHVyZS4gIFRoaXMgaXMKQEAgLTIwOSw3ICsyMDksNyBAQAogCiAgICAgIC8qIGltcGxlbWVudGVkIGFzIGEgbWFjcm86CiAKLSAgICAgaW50IFB5T2JqZWN0X0RlbEF0dHJTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmF0dHJfbmFtZSk7CisgICAgIGludCBQeU9iamVjdF9EZWxBdHRyU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICphdHRyX25hbWUpOwogCiAgICAgIERlbGV0ZSBhdHRyaWJ1dGUgbmFtZWQgYXR0cl9uYW1lLCBmb3Igb2JqZWN0IG8uIFJldHVybnMKICAgICAgLTEgb24gZmFpbHVyZS4gIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgdGhlIFB5dGhvbgpAQCAtMjg0LDcgKzI4NCw3IEBACiAgICAgICAgKi8KIAogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGVfb2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKIAogICAgICAgIC8qCiAgICAgIENhbGwgYSBjYWxsYWJsZSBQeXRob24gb2JqZWN0LCBjYWxsYWJsZV9vYmplY3QsIHdpdGggYQpAQCAtMjk2LDggKzI5Niw5IEBACiAgICAgICAgKi8KIAogCi0gICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5T2JqZWN0X0NhbGxNZXRob2QoUHlPYmplY3QgKm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKICAgICAgICAvKgogICAgICBDYWxsIHRoZSBtZXRob2QgbmFtZWQgbSBvZiBvYmplY3QgbyB3aXRoIGEgdmFyaWFibGUgbnVtYmVyIG9mCkBAIC0zMDgsOCArMzA5LDkgQEAKICAgICAgUHl0aG9uIGV4cHJlc3Npb246IG8ubWV0aG9kKGFyZ3MpLgogICAgICAgICovCiAKLSAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbWV0aG9kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZChQeU9iamVjdCAqbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9JZGVudGlmaWVyICptZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLik7CiAKICAgICAgICAvKgogICAgICAgICAgTGlrZSBQeU9iamVjdF9DYWxsTWV0aG9kLCBidXQgZXhwZWN0IGEgX1B5X0lkZW50aWZpZXIqIGFzIHRoZQpAQCAtMzE3LDEzICszMTksMTYgQEAKICAgICAgICAqLwogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxGdW5jdGlvbl9TaXplVChQeU9iamVjdCAqY2FsbGFibGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwogICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeU9iamVjdF9DYWxsTWV0aG9kX1NpemVUKFB5T2JqZWN0ICpvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZm9ybWF0LCAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5T2JqZWN0X0NhbGxNZXRob2RJZF9TaXplVChQeU9iamVjdCAqbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfSWRlbnRpZmllciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmb3JtYXQsIC4uLik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKFB5T2JqZWN0ICpjYWxsYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CkBAIC0zMzksMTEgKzM0NCwxMCBAQAogCiAgICAgIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoUHlPYmplY3QgKm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1ldGhvZCwgLi4uKTsKLSAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhQeU9iamVjdCAqbywKKyAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhQeU9iamVjdCAqbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9QeV9JZGVudGlmaWVyICptZXRob2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLik7CiAKLQogICAgICAgIC8qCiAgICAgIENhbGwgdGhlIG1ldGhvZCBuYW1lZCBtIG9mIG9iamVjdCBvIHdpdGggYSB2YXJpYWJsZSBudW1iZXIgb2YKICAgICAgQyBhcmd1bWVudHMuICBUaGUgQyBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIGFzIFB5T2JqZWN0ICoKQEAgLTQwNCw3ICs0MDgsOCBAQAogI2RlZmluZSBQeU9iamVjdF9MZW5ndGggUHlPYmplY3RfU2l6ZQogCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCi0gICAgIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5T2JqZWN0X0xlbmd0aEhpbnQoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QpOworICAgICBQeUFQSV9GVU5DKGludCkgX1B5T2JqZWN0X0hhc0xlbihQeU9iamVjdCAqbyk7CisgICAgIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCk7CiAjZW5kaWYKIAogICAgICAgIC8qCkBAIC00MjksNyArNDM0LDcgQEAKICAgICAgc3RhdGVtZW50OiBvW2tleV09di4KICAgICAgICAqLwogCi0gICAgIFB5QVBJX0ZVTkMoaW50KSBQeU9iamVjdF9EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqbywgY29uc3QgY2hhciAqa2V5KTsKIAogICAgICAgIC8qCiAgICAgIFJlbW92ZSB0aGUgbWFwcGluZyBmb3Igb2JqZWN0LCBrZXksIGZyb20gdGhlIG9iamVjdCAqby4KQEAgLTEwMTYsNyArMTAyMSw3IEBACiAKICAgICAgUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVNlcXVlbmNlX0Zhc3QoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIqIG0pOwogICAgICAgIC8qCi0gICAgIFJldHVybnMgdGhlIHNlcXVlbmNlLCBvLCBhcyBhIGxpc3QsIHVubGVzcyBpdCdzIGFscmVhZHkgYQorICAgICBSZXR1cm4gdGhlIHNlcXVlbmNlLCBvLCBhcyBhIGxpc3QsIHVubGVzcyBpdCdzIGFscmVhZHkgYQogICAgICB0dXBsZSBvciBsaXN0LiAgVXNlIFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTSB0byBhY2Nlc3MgdGhlCiAgICAgIG1lbWJlcnMgb2YgdGhpcyBsaXN0LCBhbmQgUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFIHRvIGdldCBpdHMgbGVuZ3RoLgogCkBAIC0xMTUxLDcgKzExNTYsNyBAQAogCiAgICAgIC8qIGltcGxlbWVudGVkIGFzIGEgbWFjcm86CiAKLSAgICAgaW50IFB5TWFwcGluZ19EZWxJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBpbnQgUHlNYXBwaW5nX0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgUmVtb3ZlIHRoZSBtYXBwaW5nIGZvciBvYmplY3QsIGtleSwgZnJvbSB0aGUgb2JqZWN0ICpvLgogICAgICBSZXR1cm5zIC0xIG9uIGZhaWx1cmUuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8KQEAgLTExNjksNyArMTE3NCw3IEBACiAgICAgICAgKi8KICNkZWZpbmUgUHlNYXBwaW5nX0RlbEl0ZW0oTyxLKSBQeU9iamVjdF9EZWxJdGVtKChPKSwoSykpCiAKLSAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19IYXNLZXlTdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSk7CisgICAgIFB5QVBJX0ZVTkMoaW50KSBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpOwogCiAgICAgICAgLyoKICAgICAgT24gc3VjY2VzcywgcmV0dXJuIDEgaWYgdGhlIG1hcHBpbmcgb2JqZWN0IGhhcyB0aGUga2V5LCBrZXksCkBAIC0xMjEzLDcgKzEyMTgsOCBAQAogCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpOworICAgICBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtleSk7CiAKICAgICAgICAvKgogICAgICBSZXR1cm4gZWxlbWVudCBvZiBvIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCwga2V5LCBvciBOVUxMCkBAIC0xMjIxLDcgKzEyMjcsNyBAQAogICAgICBvW2tleV0uCiAgICAgICAgKi8KIAotICAgICBQeUFQSV9GVU5DKGludCkgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwKKyAgICAgUHlBUElfRlVOQyhpbnQpIFB5TWFwcGluZ19TZXRJdGVtU3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSk7CiAKICAgICAgICAvKgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9hc2RsLmggYi9JbmNsdWRlL2FzZGwuaAppbmRleCA2YmY2MThmLi40OTUxNTNjIDEwMDY0NAotLS0gYS9JbmNsdWRlL2FzZGwuaAorKysgYi9JbmNsdWRlL2FzZGwuaApAQCAtNSw2ICs1LDcgQEAKIHR5cGVkZWYgUHlPYmplY3QgKiBzdHJpbmc7CiB0eXBlZGVmIFB5T2JqZWN0ICogYnl0ZXM7CiB0eXBlZGVmIFB5T2JqZWN0ICogb2JqZWN0OwordHlwZWRlZiBQeU9iamVjdCAqIHNpbmdsZXRvbjsKIAogLyogSXQgd291bGQgYmUgbmljZSBpZiB0aGUgY29kZSBnZW5lcmF0ZWQgYnkgYXNkbF9jLnB5IHdhcyBjb21wbGV0ZWx5CiAgICBpbmRlcGVuZGVudCBvZiBQeXRob24sIGJ1dCBpdCBpcyBhIGdvYWwgdGhlIHJlcXVpcmVzIHRvbyBtdWNoIHdvcmsKQEAgLTI0LDE3ICsyNSwxOSBAQAogICAgIGludCBlbGVtZW50c1sxXTsKIH0gYXNkbF9pbnRfc2VxOwogCi1hc2RsX3NlcSAqYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOwotYXNkbF9pbnRfc2VxICphc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOworYXNkbF9zZXEgKl9QeV9hc2RsX3NlcV9uZXcoUHlfc3NpemVfdCBzaXplLCBQeUFyZW5hICphcmVuYSk7Cithc2RsX2ludF9zZXEgKl9QeV9hc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpOwogCiAjZGVmaW5lIGFzZGxfc2VxX0dFVChTLCBJKSAoUyktPmVsZW1lbnRzWyhJKV0KICNkZWZpbmUgYXNkbF9zZXFfTEVOKFMpICgoUykgPT0gTlVMTCA/IDAgOiAoUyktPnNpemUpCiAjaWZkZWYgUHlfREVCVUcKLSNkZWZpbmUgYXNkbF9zZXFfU0VUKFMsIEksIFYpIHsgXAotICAgICAgICBpbnQgX2FzZGxfaSA9IChJKTsgXAotICAgICAgICBhc3NlcnQoKFMpICYmIF9hc2RsX2kgPCAoUyktPnNpemUpOyBcCisjZGVmaW5lIGFzZGxfc2VxX1NFVChTLCBJLCBWKSBcCisgICAgZG8geyBcCisgICAgICAgIFB5X3NzaXplX3QgX2FzZGxfaSA9IChJKTsgXAorICAgICAgICBhc3NlcnQoKFMpICE9IE5VTEwpOyBcCisgICAgICAgIGFzc2VydChfYXNkbF9pIDwgKFMpLT5zaXplKTsgXAogICAgICAgICAoUyktPmVsZW1lbnRzW19hc2RsX2ldID0gKFYpOyBcCi19CisgICAgfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIGFzZGxfc2VxX1NFVChTLCBJLCBWKSAoUyktPmVsZW1lbnRzW0ldID0gKFYpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYXN0LmggYi9JbmNsdWRlL2FzdC5oCmluZGV4IDA1NWU4ZGMuLjZhOGM4MTYgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvYXN0LmgKKysrIGIvSW5jbHVkZS9hc3QuaApAQCAtMTAsNiArMTAsMTEgQEAKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBQeUFyZW5hICphcmVuYSk7CitQeUFQSV9GVU5DKG1vZF90eSkgUHlBU1RfRnJvbU5vZGVPYmplY3QoCisgICAgY29uc3Qgbm9kZSAqbiwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBQeUFyZW5hICphcmVuYSk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaCBiL0luY2x1ZGUvYnl0ZWFycmF5b2JqZWN0LmgKaW5kZXggZWNjZDQ0Yy4uYTc1N2I4OCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9ieXRlYXJyYXlvYmplY3QuaAorKysgYi9JbmNsdWRlL2J5dGVhcnJheW9iamVjdC5oCkBAIC0yMiwxMCArMjIsMTEgQEAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9WQVJfSEVBRAorICAgIFB5X3NzaXplX3Qgb2JfYWxsb2M7IC8qIEhvdyBtYW55IGJ5dGVzIGFsbG9jYXRlZCBpbiBvYl9ieXRlcyAqLworICAgIGNoYXIgKm9iX2J5dGVzOyAgICAgIC8qIFBoeXNpY2FsIGJhY2tpbmcgYnVmZmVyICovCisgICAgY2hhciAqb2Jfc3RhcnQ7ICAgICAgLyogTG9naWNhbCBzdGFydCBpbnNpZGUgb2JfYnl0ZXMgKi8KICAgICAvKiBYWFgobm5vcndpdHopOiBzaG91bGQgb2JfZXhwb3J0cyBiZSBQeV9zc2l6ZV90PyAqLwotICAgIGludCBvYl9leHBvcnRzOyAvKiBob3cgbWFueSBidWZmZXIgZXhwb3J0cyAqLwotICAgIFB5X3NzaXplX3Qgb2JfYWxsb2M7IC8qIEhvdyBtYW55IGJ5dGVzIGFsbG9jYXRlZCAqLwotICAgIGNoYXIgKm9iX2J5dGVzOworICAgIGludCBvYl9leHBvcnRzOyAgICAgIC8qIEhvdyBtYW55IGJ1ZmZlciBleHBvcnRzICovCiB9IFB5Qnl0ZUFycmF5T2JqZWN0OwogI2VuZGlmCiAKQEAgLTQ5LDggKzUwLDggQEAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpIFwKICAgICAoYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHNlbGYpKSwgXAotICAgICBQeV9TSVpFKHNlbGYpID8gKChQeUJ5dGVBcnJheU9iamVjdCAqKShzZWxmKSktPm9iX2J5dGVzIDogX1B5Qnl0ZUFycmF5X2VtcHR5X3N0cmluZykKLSNkZWZpbmUgUHlCeXRlQXJyYXlfR0VUX1NJWkUoc2VsZikgIChhc3NlcnQoUHlCeXRlQXJyYXlfQ2hlY2soc2VsZikpLFB5X1NJWkUoc2VsZikpCisgICAgIFB5X1NJWkUoc2VsZikgPyAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopKHNlbGYpKS0+b2Jfc3RhcnQgOiBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nKQorI2RlZmluZSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAoYXNzZXJ0KFB5Qnl0ZUFycmF5X0NoZWNrKHNlbGYpKSwgUHlfU0laRShzZWxmKSkKIAogUHlBUElfREFUQShjaGFyKSBfUHlCeXRlQXJyYXlfZW1wdHlfc3RyaW5nW107CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvYnl0ZXNvYmplY3QuaCBiL0luY2x1ZGUvYnl0ZXNvYmplY3QuaAppbmRleCBkN2M3ZmZkLi4wZWU4ZDM2IDEwMDY0NAotLS0gYS9JbmNsdWRlL2J5dGVzb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9ieXRlc29iamVjdC5oCkBAIC04NiwxMSArODYsMTEgQEAKICAgIDAtdGVybWluYXRlZCAocGFzc2luZyBhIHN0cmluZyB3aXRoIGVtYmVkZGVkIE5VTEwgY2hhcmFjdGVycyB3aWxsCiAgICBjYXVzZSBhbiBleGNlcHRpb24pLiAgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZSgKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqLAkvKiBzdHJpbmcgb3IgVW5pY29kZSBvYmplY3QgKi8KLSAgICByZWdpc3RlciBjaGFyICoqcywJCS8qIHBvaW50ZXIgdG8gYnVmZmVyIHZhcmlhYmxlICovCi0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCAqbGVuCS8qIHBvaW50ZXIgdG8gbGVuZ3RoIHZhcmlhYmxlIG9yIE5VTEwKLQkJCQkgICAob25seSBwb3NzaWJsZSBmb3IgMC10ZXJtaW5hdGVkCi0JCQkJICAgc3RyaW5ncykgKi8KKyAgICBQeU9iamVjdCAqb2JqLCAgICAgIC8qIHN0cmluZyBvciBVbmljb2RlIG9iamVjdCAqLworICAgIGNoYXIgKipzLCAgICAgICAgICAgLyogcG9pbnRlciB0byBidWZmZXIgdmFyaWFibGUgKi8KKyAgICBQeV9zc2l6ZV90ICpsZW4gICAgIC8qIHBvaW50ZXIgdG8gbGVuZ3RoIHZhcmlhYmxlIG9yIE5VTEwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHBvc3NpYmxlIGZvciAwLXRlcm1pbmF0ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MpICovCiAgICAgKTsKIAogLyogVXNpbmcgdGhlIGN1cnJlbnQgbG9jYWxlLCBpbnNlcnQgdGhlIHRob3VzYW5kcyBncm91cGluZwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9jZXZhbC5oIGIvSW5jbHVkZS9jZXZhbC5oCmluZGV4IDY4MTEzNjcuLjQ5MzdmMmMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY2V2YWwuaAorKysgYi9JbmNsdWRlL2NldmFsLmgKQEAgLTc3LDcgKzc3LDcgQEAKICAgICBkb3sgaWYoX1B5X01ha2VFbmRSZWNDaGVjayhQeVRocmVhZFN0YXRlX0dFVCgpLT5yZWN1cnNpb25fZGVwdGgpKSAgXAogICAgICAgUHlUaHJlYWRTdGF0ZV9HRVQoKS0+b3ZlcmZsb3dlZCA9IDA7ICBcCiAgICAgfSB3aGlsZSgwKQotUHlBUElfRlVOQyhpbnQpIF9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwoY2hhciAqd2hlcmUpOworUHlBUElfRlVOQyhpbnQpIF9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwoY29uc3QgY2hhciAqd2hlcmUpOwogUHlBUElfREFUQShpbnQpIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0OwogCiAjaWZkZWYgVVNFX1NUQUNLQ0hFQ0sKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29kZWNzLmggYi9JbmNsdWRlL2NvZGVjcy5oCmluZGV4IDYxMTk2NGMuLmRmY2ZhOWMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvY29kZWNzLmgKKysrIGIvSW5jbHVkZS9jb2RlY3MuaApAQCAtNDksNiArNDksMTAgQEAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5Q29kZWNfTG9va3VwKAogICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nCiAgICAgICAgKTsKKworUHlBUElfRlVOQyhpbnQpIF9QeUNvZGVjX0ZvcmdldCgKKyAgICAgICBjb25zdCBjaGFyICplbmNvZGluZworICAgICAgICk7CiAjZW5kaWYKIAogLyogQ29kZWMgcmVnaXN0cnkgZW5jb2RpbmcgY2hlY2sgQVBJLgpAQCAtMTYxLDE0ICsxNjUsMTQgQEAKICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZwogICAgICAgICk7CiAKLS8qIEdldCBhIEluY3JlbWVudGFsRW5jb2RlciBvYmplY3QgZm9yIHRoZSBnaXZlbiBlbmNvZGluZy4gKi8KKy8qIEdldCBhbiBJbmNyZW1lbnRhbEVuY29kZXIgb2JqZWN0IGZvciB0aGUgZ2l2ZW4gZW5jb2RpbmcuICovCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlDb2RlY19JbmNyZW1lbnRhbEVuY29kZXIoCiAgICAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsCiAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzCiAgICAgICAgKTsKIAotLyogR2V0IGEgSW5jcmVtZW50YWxEZWNvZGVyIG9iamVjdCBmdW5jdGlvbiBmb3IgdGhlIGdpdmVuIGVuY29kaW5nLiAqLworLyogR2V0IGFuIEluY3JlbWVudGFsRGVjb2RlciBvYmplY3QgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiBlbmNvZGluZy4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNvZGVjX0luY3JlbWVudGFsRGVjb2RlcigKICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKZGlmZiAtLWdpdCBhL0luY2x1ZGUvY29tcGlsZS5oIGIvSW5jbHVkZS9jb21waWxlLmgKaW5kZXggYWMyNjM2ZC4uYzY2NTBkNyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9jb21waWxlLmgKKysrIGIvSW5jbHVkZS9jb21waWxlLmgKQEAgLTM2LDExICszNiwyNyBAQAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgaW50IG9wdGltaXplLAogICAgIFB5QXJlbmEgKmFyZW5hKTsKLVB5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKHN0cnVjdCBfbW9kICosIGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5Q29kZU9iamVjdCAqKSBQeUFTVF9Db21waWxlT2JqZWN0KAorICAgIHN0cnVjdCBfbW9kICptb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgaW50IG9wdGltaXplLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKK1B5QVBJX0ZVTkMoUHlGdXR1cmVGZWF0dXJlcyAqKSBQeUZ1dHVyZV9Gcm9tQVNUKAorICAgIHN0cnVjdCBfbW9kICogbW9kLAorICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KKyAgICApOworUHlBUElfRlVOQyhQeUZ1dHVyZUZlYXR1cmVzICopIFB5RnV0dXJlX0Zyb21BU1RPYmplY3QoCisgICAgc3RydWN0IF9tb2QgKiBtb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lCisgICAgKTsKIAogLyogX1B5X01hbmdsZSBpcyBkZWZpbmVkIGluIGNvbXBpbGUuYyAqLwogUHlBUElfRlVOQyhQeU9iamVjdCopIF9QeV9NYW5nbGUoUHlPYmplY3QgKnAsIFB5T2JqZWN0ICpuYW1lKTsKIAorI2RlZmluZSBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVCBJTlRfTUFYCitQeUFQSV9GVU5DKGludCkgUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZyk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL2RpY3RvYmplY3QuaCBiL0luY2x1ZGUvZGljdG9iamVjdC5oCmluZGV4IGQ4OWFhYzguLmVmMTIyYmQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZGljdG9iamVjdC5oCisrKyBiL0luY2x1ZGUvZGljdG9iamVjdC5oCkBAIC01Myw2ICs1MywxMCBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlEaWN0X0dldEl0ZW1JZFdpdGhFcnJvcihQeU9iamVjdCAqZHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqa2V5KTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlEaWN0X1NldERlZmF1bHQoCisgICAgUHlPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LCBQeU9iamVjdCAqZGVmYXVsdG9iaik7CisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfU2V0SXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICppdGVtKTsKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfRGVsSXRlbShQeU9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpOwogUHlBUElfRlVOQyh2b2lkKSBQeURpY3RfQ2xlYXIoUHlPYmplY3QgKm1wKTsKQEAgLTEwOSw5ICsxMTMsMTEgQEAKIFB5QVBJX0ZVTkMoaW50KSBQeURpY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqZHAsIGNvbnN0IGNoYXIgKmtleSk7CiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlEaWN0X0RlbEl0ZW1JZChQeU9iamVjdCAqbXAsIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqa2V5KTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CisKIGludCBfUHlPYmplY3REaWN0X1NldEl0ZW0oUHlUeXBlT2JqZWN0ICp0cCwgUHlPYmplY3QgKipkaWN0cHRyLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnZhbHVlKTsKIFB5T2JqZWN0ICpfUHlEaWN0X0xvYWRHbG9iYWwoUHlEaWN0T2JqZWN0ICosIFB5RGljdE9iamVjdCAqLCBQeU9iamVjdCAqKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5RGljdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL2R5bmFtaWNfYW5ub3RhdGlvbnMuaCBiL0luY2x1ZGUvZHluYW1pY19hbm5vdGF0aW9ucy5oCmluZGV4IGQ2M2M1ZGIuLjBiZDFhODMgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZHluYW1pY19hbm5vdGF0aW9ucy5oCisrKyBiL0luY2x1ZGUvZHluYW1pY19hbm5vdGF0aW9ucy5oCkBAIC0xNTAsNyArMTUwLDcgQEAKIAogICAvKiBSZXBvcnQgdGhhdCBhIG5ldyBtZW1vcnkgYXQgImFkZHJlc3MiIG9mIHNpemUgInNpemUiIGhhcyBiZWVuIGFsbG9jYXRlZC4KICAgICAgVGhpcyBtaWdodCBiZSB1c2VkIHdoZW4gdGhlIG1lbW9yeSBoYXMgYmVlbiByZXRyaWV2ZWQgZnJvbSBhIGZyZWUgbGlzdCBhbmQKLSAgICAgaXMgYWJvdXQgdG8gYmUgcmV1c2VkLCBvciB3aGVuIGEgdGhlIGxvY2tpbmcgZGlzY2lwbGluZSBmb3IgYSB2YXJpYWJsZQorICAgICBpcyBhYm91dCB0byBiZSByZXVzZWQsIG9yIHdoZW4gdGhlIGxvY2tpbmcgZGlzY2lwbGluZSBmb3IgYSB2YXJpYWJsZQogICAgICBjaGFuZ2VzLiAqLwogI2RlZmluZSBfUHlfQU5OT1RBVEVfTkVXX01FTU9SWShhZGRyZXNzLCBzaXplKSBcCiAgICAgQW5ub3RhdGVOZXdNZW1vcnkoX19GSUxFX18sIF9fTElORV9fLCBhZGRyZXNzLCBzaXplKQpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9maWxlb2JqZWN0LmggYi9JbmNsdWRlL2ZpbGVvYmplY3QuaAppbmRleCBhOTljOTRkLi4wOTM5NzQ0IDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZpbGVvYmplY3QuaAorKysgYi9JbmNsdWRlL2ZpbGVvYmplY3QuaApAQCAtOCw4ICs4LDkgQEAKIAogI2RlZmluZSBQWV9TVERJT1RFWFRNT0RFICJiIgogCi1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RmlsZV9Gcm9tRmQoaW50LCBjaGFyICosIGNoYXIgKiwgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkgICAgIGNoYXIgKiwgaW50KTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlGaWxlX0Zyb21GZChpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUZpbGVfR2V0TGluZShQeU9iamVjdCAqLCBpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5RmlsZV9Xcml0ZU9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBpbnQpOwogUHlBUElfRlVOQyhpbnQpIFB5RmlsZV9Xcml0ZVN0cmluZyhjb25zdCBjaGFyICosIFB5T2JqZWN0ICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9maWxldXRpbHMuaCBiL0luY2x1ZGUvZmlsZXV0aWxzLmgKaW5kZXggN2MxOGNmMi4uZTliYWQ4MCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9maWxldXRpbHMuaAorKysgYi9JbmNsdWRlL2ZpbGV1dGlscy5oCkBAIC0yNywxMSArMjcsMjEgQEAKICAgICBzdHJ1Y3Qgc3RhdCAqc3RhdGJ1Zik7CiAjZW5kaWYKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhpbnQpIF9QeV9vcGVuKAorICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgIGludCBmbGFncyk7CisjZW5kaWYKKwogUHlBUElfRlVOQyhGSUxFICopIF9QeV93Zm9wZW4oCiAgICAgY29uc3Qgd2NoYXJfdCAqcGF0aCwKICAgICBjb25zdCB3Y2hhcl90ICptb2RlKTsKIAogUHlBUElfRlVOQyhGSUxFKikgX1B5X2ZvcGVuKAorICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAorICAgIGNvbnN0IGNoYXIgKm1vZGUpOworCitQeUFQSV9GVU5DKEZJTEUqKSBfUHlfZm9wZW5fb2JqKAogICAgIFB5T2JqZWN0ICpwYXRoLAogICAgIGNvbnN0IGNoYXIgKm1vZGUpOwogCkBAIC01Myw2ICs2MywxNSBAQAogICAgIHdjaGFyX3QgKmJ1ZiwKICAgICBzaXplX3Qgc2l6ZSk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlfZ2V0X2luaGVyaXRhYmxlKGludCBmZCk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphdG9taWNfZmxhZ193b3Jrcyk7CisKK1B5QVBJX0ZVTkMoaW50KSBfUHlfZHVwKGludCBmZCk7CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvZnJhbWVvYmplY3QuaCBiL0luY2x1ZGUvZnJhbWVvYmplY3QuaAppbmRleCAzM2Y3M2FmLi45NjZmZjFmIDEwMDY0NAotLS0gYS9JbmNsdWRlL2ZyYW1lb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9mcmFtZW9iamVjdC5oCkBAIC0zNiw4ICszNiw5IEBACiAgICAgICAgICAgIG5vbi1nZW5lcmF0b3IgZnJhbWVzLiBTZWUgdGhlIHNhdmVfZXhjX3N0YXRlIGFuZCBzd2FwX2V4Y19zdGF0ZQogICAgICAgICAgICBmdW5jdGlvbnMgaW4gY2V2YWwuYyBmb3IgZGV0YWlscyBvZiB0aGVpciB1c2UuICovCiAgICAgUHlPYmplY3QgKmZfZXhjX3R5cGUsICpmX2V4Y192YWx1ZSwgKmZfZXhjX3RyYWNlYmFjazsKKyAgICAvKiBCb3Jyb3dlZCByZWZlcmVuY2UgdG8gYSBnZW5lcmF0b3IsIG9yIE5VTEwgKi8KKyAgICBQeU9iamVjdCAqZl9nZW47CiAKLSAgICBQeVRocmVhZFN0YXRlICpmX3RzdGF0ZTsKICAgICBpbnQgZl9sYXN0aTsgICAgICAgICAgICAgICAgLyogTGFzdCBpbnN0cnVjdGlvbiBpZiBjYWxsZWQgKi8KICAgICAvKiBDYWxsIFB5RnJhbWVfR2V0TGluZU51bWJlcigpIGluc3RlYWQgb2YgcmVhZGluZyB0aGlzIGZpZWxkCiAgICAgICAgZGlyZWN0bHkuICBBcyBvZiAyLjMgZl9saW5lbm8gaXMgb25seSB2YWxpZCB3aGVuIHRyYWNpbmcgaXMKQEAgLTQ2LDYgKzQ3LDcgQEAKICAgICAgICBieXRlY29kZSBpbmRleC4gKi8KICAgICBpbnQgZl9saW5lbm87ICAgICAgICAgICAgICAgLyogQ3VycmVudCBsaW5lIG51bWJlciAqLwogICAgIGludCBmX2libG9jazsgICAgICAgICAgICAgICAvKiBpbmRleCBpbiBmX2Jsb2Nrc3RhY2sgKi8KKyAgICBjaGFyIGZfZXhlY3V0aW5nOyAgICAgICAgICAgLyogd2hldGhlciB0aGUgZnJhbWUgaXMgc3RpbGwgZXhlY3V0aW5nICovCiAgICAgUHlUcnlCbG9jayBmX2Jsb2Nrc3RhY2tbQ09fTUFYQkxPQ0tTXTsgLyogZm9yIHRyeSBhbmQgbG9vcCBibG9ja3MgKi8KICAgICBQeU9iamVjdCAqZl9sb2NhbHNwbHVzWzFdOyAgLyogbG9jYWxzK3N0YWNrLCBkeW5hbWljYWxseSBzaXplZCAqLwogfSBQeUZyYW1lT2JqZWN0OwpAQCAtNzUsNiArNzcsOCBAQAogLyogQ29udmVyc2lvbnMgYmV0d2VlbiAiZmFzdCBsb2NhbHMiIGFuZCBsb2NhbHMgaW4gZGljdGlvbmFyeSAqLwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5RnJhbWVfTG9jYWxzVG9GYXN0KFB5RnJhbWVPYmplY3QgKiwgaW50KTsKKworUHlBUElfRlVOQyhpbnQpIFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKFB5RnJhbWVPYmplY3QgKmYpOwogUHlBUElfRlVOQyh2b2lkKSBQeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICopOwogCiBQeUFQSV9GVU5DKGludCkgUHlGcmFtZV9DbGVhckZyZWVMaXN0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9nZW5vYmplY3QuaCBiL0luY2x1ZGUvZ2Vub2JqZWN0LmgKaW5kZXggZWQ0NTFiYS4uNjVmMWVjZiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9nZW5vYmplY3QuaAorKysgYi9JbmNsdWRlL2dlbm9iamVjdC5oCkBAIC0zNiw2ICszNiw4IEBACiBQeUFQSV9GVU5DKGludCkgUHlHZW5fTmVlZHNGaW5hbGl6aW5nKFB5R2VuT2JqZWN0ICopOwogUHlBUElfRlVOQyhpbnQpIF9QeUdlbl9GZXRjaFN0b3BJdGVyYXRpb25WYWx1ZShQeU9iamVjdCAqKik7CiBQeU9iamVjdCAqX1B5R2VuX1NlbmQoUHlHZW5PYmplY3QgKiwgUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeUdlbl9GaW5hbGl6ZShQeU9iamVjdCAqc2VsZik7CisKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL2dyYW1tYXIuaCBiL0luY2x1ZGUvZ3JhbW1hci5oCmluZGV4IDg0MjZkYTMuLmJhN2QxOWQgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvZ3JhbW1hci5oCisrKyBiL0luY2x1ZGUvZ3JhbW1hci5oCkBAIC02OSwxNCArNjksMTQgQEAKIC8qIEZVTkNUSU9OUyAqLwogCiBncmFtbWFyICpuZXdncmFtbWFyKGludCBzdGFydCk7Ci1kZmEgKmFkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY2hhciAqbmFtZSk7CitkZmEgKmFkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSk7CiBpbnQgYWRkc3RhdGUoZGZhICpkKTsKIHZvaWQgYWRkYXJjKGRmYSAqZCwgaW50IGZyb20sIGludCB0bywgaW50IGxibCk7CiBkZmEgKlB5R3JhbW1hcl9GaW5kREZBKGdyYW1tYXIgKmcsIGludCB0eXBlKTsKIAotaW50IGFkZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjaGFyICpzdHIpOwotaW50IGZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKTsKLWNoYXIgKlB5R3JhbW1hcl9MYWJlbFJlcHIobGFiZWwgKmxiKTsKK2ludCBhZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKTsKK2ludCBmaW5kbGFiZWwobGFiZWxsaXN0ICpsbCwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cik7Citjb25zdCBjaGFyICpQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYik7CiB2b2lkIHRyYW5zbGF0ZWxhYmVscyhncmFtbWFyICpnKTsKIAogdm9pZCBhZGRmaXJzdHNldHMoZ3JhbW1hciAqZyk7CmRpZmYgLS1naXQgYS9JbmNsdWRlL2ltcG9ydC5oIGIvSW5jbHVkZS9pbXBvcnQuaAppbmRleCA3M2M4NmVlLi5hZmRmYWMyIDEwMDY0NAotLS0gYS9JbmNsdWRlL2ltcG9ydC5oCisrKyBiL0luY2x1ZGUvaW1wb3J0LmgKQEAgLTEzLDE5ICsxMywxOSBAQAogUHlBUElfRlVOQyhsb25nKSBQeUltcG9ydF9HZXRNYWdpY051bWJlcih2b2lkKTsKIFB5QVBJX0ZVTkMoY29uc3QgY2hhciAqKSBQeUltcG9ydF9HZXRNYWdpY1RhZyh2b2lkKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoCi0gICAgY2hhciAqbmFtZSwgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSwgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKmNvCiAgICAgKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgKLSAgICBjaGFyICpuYW1lLCAgICAgICAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lLCAgICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqY28sCi0gICAgY2hhciAqcGF0aG5hbWUgICAgICAgICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoCi0gICAgY2hhciAqbmFtZSwgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSwgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKmNvLAotICAgIGNoYXIgKnBhdGhuYW1lLCAgICAgICAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KLSAgICBjaGFyICpjcGF0aG5hbWUgICAgICAgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCisgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmNwYXRobmFtZSAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICApOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdCgKICAgICBQeU9iamVjdCAqbmFtZSwKQEAgLTcyLDcgKzcyLDcgQEAKICAgICBQeU9iamVjdCAqbmFtZQogICAgICk7CiBQeUFQSV9GVU5DKGludCkgUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlKAotICAgIGNoYXIgKm5hbWUgICAgICAgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IGNoYXIgKm5hbWUgICAgICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwogICAgICk7CiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKQEAgLTkyLDEyICs5MiwxMiBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlJbXBvcnRfRml4dXBCdWlsdGluKAogICAgIFB5T2JqZWN0ICptb2QsCi0gICAgY2hhciAqbmFtZSAgICAgICAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCisgICAgY29uc3QgY2hhciAqbmFtZSAgICAgICAgICAgIC8qIFVURi04IGVuY29kZWQgc3RyaW5nICovCiAgICAgKTsKIFB5QVBJX0ZVTkMoaW50KSBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoUHlPYmplY3QqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIAogc3RydWN0IF9pbml0dGFiIHsKLSAgICBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KKyAgICBjb25zdCBjaGFyICpuYW1lOyAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCogKCppbml0ZnVuYykodm9pZCk7CiB9OwogUHlBUElfREFUQShzdHJ1Y3QgX2luaXR0YWIgKikgUHlJbXBvcnRfSW5pdHRhYjsKQEAgLTExMywxNSArMTEzLDE1IEBACiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIHN0cnVjdCBfZnJvemVuIHsKLSAgICBjaGFyICpuYW1lOyAgICAgICAgICAgICAgICAgLyogQVNDSUkgZW5jb2RlZCBzdHJpbmcgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpjb2RlOworICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAvKiBBU0NJSSBlbmNvZGVkIHN0cmluZyAqLworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvZGU7CiAgICAgaW50IHNpemU7CiB9OwogCiAvKiBFbWJlZGRpbmcgYXBwcyBtYXkgY2hhbmdlIHRoaXMgcG9pbnRlciB0byBwb2ludCB0byB0aGVpciBmYXZvcml0ZQogICAgY29sbGVjdGlvbiBvZiBmcm96ZW4gbW9kdWxlczogKi8KIAotUHlBUElfREFUQShzdHJ1Y3QgX2Zyb3plbiAqKSBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOworUHlBUElfREFUQShjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqKSBQeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOwogI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9saXN0b2JqZWN0LmggYi9JbmNsdWRlL2xpc3RvYmplY3QuaAppbmRleCBkYzYyYWVlLi43NGNmNDZmIDEwMDY0NAotLS0gYS9JbmNsdWRlL2xpc3RvYmplY3QuaAorKysgYi9JbmNsdWRlL2xpc3RvYmplY3QuaApAQCAtNDYsNyArNDYsNyBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U29ydFdyYXBwZXJfVHlwZTsKIAogI2RlZmluZSBQeUxpc3RfQ2hlY2sob3ApIFwKLQkJUHlUeXBlX0Zhc3RTdWJjbGFzcyhQeV9UWVBFKG9wKSwgUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTKQorICAgIFB5VHlwZV9GYXN0U3ViY2xhc3MoUHlfVFlQRShvcCksIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUykKICNkZWZpbmUgUHlMaXN0X0NoZWNrRXhhY3Qob3ApIChQeV9UWVBFKG9wKSA9PSAmUHlMaXN0X1R5cGUpCiAKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMaXN0X05ldyhQeV9zc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9sb25nb2JqZWN0LmggYi9JbmNsdWRlL2xvbmdvYmplY3QuaAppbmRleCAxYzFjNWRlLi5mZjQzMzA5IDEwMDY0NAotLS0gYS9JbmNsdWRlL2xvbmdvYmplY3QuaAorKysgYi9JbmNsdWRlL2xvbmdvYmplY3QuaApAQCAtNTIsNiArNTIsMTkgQEAKICNlcnJvciAic2l6ZW9mKHBpZF90KSBpcyBuZWl0aGVyIHNpemVvZihpbnQpLCBzaXplb2YobG9uZykgb3Igc2l6ZW9mKGxvbmcgbG9uZykiCiAjZW5kaWYgLyogU0laRU9GX1BJRF9UICovCiAKKyNpZiBTSVpFT0ZfVk9JRF9QID09IFNJWkVPRl9JTlQKKyMgIGRlZmluZSBfUHlfUEFSU0VfSU5UUFRSICJpIgorIyAgZGVmaW5lIF9QeV9QQVJTRV9VSU5UUFRSICJJIgorI2VsaWYgU0laRU9GX1ZPSURfUCA9PSBTSVpFT0ZfTE9ORworIyAgZGVmaW5lIF9QeV9QQVJTRV9JTlRQVFIgImwiCisjICBkZWZpbmUgX1B5X1BBUlNFX1VJTlRQVFIgImsiCisjZWxpZiBkZWZpbmVkKFNJWkVPRl9MT05HX0xPTkcpICYmIFNJWkVPRl9WT0lEX1AgPT0gU0laRU9GX0xPTkdfTE9ORworIyAgZGVmaW5lIF9QeV9QQVJTRV9JTlRQVFIgIkwiCisjICBkZWZpbmUgX1B5X1BBUlNFX1VJTlRQVFIgIksiCisjZWxzZQorIyAgZXJyb3IgInZvaWQqIGRpZmZlcmVudCBpbiBzaXplIGZyb20gaW50LCBsb25nIGFuZCBsb25nIGxvbmciCisjZW5kaWYgLyogU0laRU9GX1ZPSURfUCAqLworCiAvKiBVc2VkIGJ5IFB5dGhvbi9teXN0cnRvdWwuYy4gKi8KICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0RBVEEodW5zaWduZWQgY2hhcikgX1B5TG9uZ19EaWdpdFZhbHVlWzI1Nl07CkBAIC04MCw3ICs5Myw3IEBACiBQeUFQSV9GVU5DKFBZX0xPTkdfTE9ORykgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqLCBpbnQgKik7CiAjZW5kaWYgLyogSEFWRV9MT05HX0xPTkcgKi8KIAotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVN0cmluZyhjaGFyICosIGNoYXIgKiosIGludCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlMb25nX0Zyb21Vbmljb2RlKFB5X1VOSUNPREUqLCBQeV9zc2l6ZV90LCBpbnQpOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUxvbmdfRnJvbVVuaWNvZGVPYmplY3QoUHlPYmplY3QgKnUsIGludCBiYXNlKTsKQEAgLTE4Miw4ICsxOTUsOCBAQAogLyogVGhlc2UgYXJlbid0IHJlYWxseSBwYXJ0IG9mIHRoZSBpbnQgb2JqZWN0LCBidXQgdGhleSdyZSBoYW5keS4gVGhlCiAgICBmdW5jdGlvbnMgYXJlIGluIFB5dGhvbi9teXN0cnRvdWwuYy4KICAqLwotUHlBUElfRlVOQyh1bnNpZ25lZCBsb25nKSBQeU9TX3N0cnRvdWwoY2hhciAqLCBjaGFyICoqLCBpbnQpOwotUHlBUElfRlVOQyhsb25nKSBQeU9TX3N0cnRvbChjaGFyICosIGNoYXIgKiosIGludCk7CitQeUFQSV9GVU5DKHVuc2lnbmVkIGxvbmcpIFB5T1Nfc3RydG91bChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CitQeUFQSV9GVU5DKGxvbmcpIFB5T1Nfc3RydG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL21hcnNoYWwuaCBiL0luY2x1ZGUvbWFyc2hhbC5oCmluZGV4IGU5NmQwNjIuLjA5ZDkzMzcgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvbWFyc2hhbC5oCisrKyBiL0luY2x1ZGUvbWFyc2hhbC5oCkBAIC03LDcgKzcsNyBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2RlZmluZSBQeV9NQVJTSEFMX1ZFUlNJT04gMgorI2RlZmluZSBQeV9NQVJTSEFMX1ZFUlNJT04gNAogCiBQeUFQSV9GVU5DKHZvaWQpIFB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUobG9uZywgRklMRSAqLCBpbnQpOwogUHlBUElfRlVOQyh2b2lkKSBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb0ZpbGUoUHlPYmplY3QgKiwgRklMRSAqLCBpbnQpOwpAQCAtMTksNyArMTksOCBAQAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlKEZJTEUgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlKEZJTEUgKik7CiAjZW5kaWYKLVB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNoYXIgKiwgUHlfc3NpemVfdCk7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9JbmNsdWRlL21lbW9yeW9iamVjdC5oIGIvSW5jbHVkZS9tZW1vcnlvYmplY3QuaAppbmRleCBjMmUxMTk0Li4zODJjYTkyIDEwMDY0NAotLS0gYS9JbmNsdWRlL21lbW9yeW9iamVjdC5oCisrKyBiL0luY2x1ZGUvbWVtb3J5b2JqZWN0LmgKQEAgLTQ1LDcgKzQ1LDcgQEAKIH0gX1B5TWFuYWdlZEJ1ZmZlck9iamVjdDsKIAogCi0vKiBzdGF0aWMgc3RvcmFnZSB1c2VkIGZvciBjYXN0aW5nIGJldHdlZW4gZm9ybWF0cyAqLworLyogZGVwcmVjYXRlZCwgcmVtb3ZlZCBpbiAzLjUgKi8KICNkZWZpbmUgX1B5X01FTU9SWVZJRVdfTUFYX0ZPUk1BVCAzIC8qIG11c3QgYmUgPj0gMyAqLwogCiAvKiBtZW1vcnl2aWV3IHN0YXRlIGZsYWdzICovCkBAIC02Miw3ICs2Miw3IEBACiAgICAgaW50IGZsYWdzOyAgICAgICAgICAgICAgICAgICAgLyogc3RhdGUgZmxhZ3MgKi8KICAgICBQeV9zc2l6ZV90IGV4cG9ydHM7ICAgICAgICAgICAvKiBudW1iZXIgb2YgYnVmZmVyIHJlLWV4cG9ydHMgKi8KICAgICBQeV9idWZmZXIgdmlldzsgICAgICAgICAgICAgICAvKiBwcml2YXRlIGNvcHkgb2YgdGhlIGV4cG9ydGVyJ3MgdmlldyAqLwotICAgIGNoYXIgZm9ybWF0W19QeV9NRU1PUllWSUVXX01BWF9GT1JNQVRdOyAvKiB1c2VkIGZvciBjYXN0aW5nICovCisgICAgY2hhciBmb3JtYXRbX1B5X01FTU9SWVZJRVdfTUFYX0ZPUk1BVF07IC8qIGRlcHJlY2F0ZWQsIHJlbW92ZWQgaW4gMy41ICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogICAgIFB5X3NzaXplX3Qgb2JfYXJyYXlbMV07ICAgICAgIC8qIHNoYXBlLCBzdHJpZGVzLCBzdWJvZmZzZXRzICovCiB9IFB5TWVtb3J5Vmlld09iamVjdDsKZGlmZiAtLWdpdCBhL0luY2x1ZGUvbW9kc3VwcG9ydC5oIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKaW5kZXggZWNmMWRjYy4uNWRlMDQ1OCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2RzdXBwb3J0LmgKKysrIGIvSW5jbHVkZS9tb2RzdXBwb3J0LmgKQEAgLTI2LDcgKzI2LDcgQEAKIC8qIER1ZSB0byBhIGdsaXRjaCBpbiAzLjIsIHRoZSBfU2l6ZVQgdmVyc2lvbnMgd2VyZW4ndCBleHBvcnRlZCBmcm9tIHRoZSBETEwuICovCiAjaWYgIWRlZmluZWQoUFlfU1NJWkVfVF9DTEVBTikgfHwgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpIHx8IFB5X0xJTUlURURfQVBJKzAgPj0gMHgwMzAzMDAwMAogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1BhcnNlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKLVB5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKSBQeV9GT1JNQVRfUEFSU0VUVVBMRShQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKTsKK1B5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjaGFyICoqLCAuLi4pOwogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cyhQeU9iamVjdCAqKTsKQEAgLTM2LDYgKzM2LDcgQEAKICNlbmRpZgogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyhpbnQpIF9QeUFyZ19Ob0tleXdvcmRzKGNvbnN0IGNoYXIgKmZ1bmNuYW1lLCBQeU9iamVjdCAqa3cpOworUHlBUElfRlVOQyhpbnQpIF9QeUFyZ19Ob1Bvc2l0aW9uYWwoY29uc3QgY2hhciAqZnVuY25hbWUsIFB5T2JqZWN0ICphcmdzKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5QXJnX1ZhUGFyc2UoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKIFB5QVBJX0ZVTkMoaW50KSBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcyhQeU9iamVjdCAqLCBQeU9iamVjdCAqLApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9tb2R1bGVvYmplY3QuaCBiL0luY2x1ZGUvbW9kdWxlb2JqZWN0LmgKaW5kZXggODAxM2RkOS4uZjExOTM2NCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9tb2R1bGVvYmplY3QuaAorKysgYi9JbmNsdWRlL21vZHVsZW9iamVjdC5oCkBAIC0yNSw2ICsyNSw3IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KFB5T2JqZWN0ICopOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogUHlBUElfRlVOQyh2b2lkKSBfUHlNb2R1bGVfQ2xlYXIoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeU1vZHVsZV9DbGVhckRpY3QoUHlPYmplY3QgKik7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoc3RydWN0IFB5TW9kdWxlRGVmKikgUHlNb2R1bGVfR2V0RGVmKFB5T2JqZWN0Kik7CiBQeUFQSV9GVU5DKHZvaWQqKSBQeU1vZHVsZV9HZXRTdGF0ZShQeU9iamVjdCopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9ub2RlLmggYi9JbmNsdWRlL25vZGUuaAppbmRleCA5OWMxM2Y3Li4yZTRlMmJhIDEwMDY0NAotLS0gYS9JbmNsdWRlL25vZGUuaAorKysgYi9JbmNsdWRlL25vZGUuaApAQCAtMjEsNyArMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzdHIsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KTsKIFB5QVBJX0ZVTkModm9pZCkgUHlOb2RlX0ZyZWUobm9kZSAqbik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeV9zc2l6ZV90IF9QeU5vZGVfU2l6ZU9mKG5vZGUgKm4pOworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlOb2RlX1NpemVPZihub2RlICpuKTsKICNlbmRpZgogCiAvKiBOb2RlIGFjY2VzcyBmdW5jdGlvbnMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvb2JqZWN0LmggYi9JbmNsdWRlL29iamVjdC5oCmluZGV4IGNkZWIwNmMuLjVmODYyYWIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvb2JqZWN0LmgKKysrIGIvSW5jbHVkZS9vYmplY3QuaApAQCAtMTQzLDcgKzE0Myw4IEBACiAgICAgUHlPYmplY3QgKm9iamVjdDsKIH0gX1B5X0lkZW50aWZpZXI7CiAKLSNkZWZpbmUgX1B5X3N0YXRpY19zdHJpbmcodmFybmFtZSwgdmFsdWUpICBzdGF0aWMgX1B5X0lkZW50aWZpZXIgdmFybmFtZSA9IHsgMCwgdmFsdWUsIDAgfQorI2RlZmluZSBfUHlfc3RhdGljX3N0cmluZ19pbml0KHZhbHVlKSB7IDAsIHZhbHVlLCAwIH0KKyNkZWZpbmUgX1B5X3N0YXRpY19zdHJpbmcodmFybmFtZSwgdmFsdWUpICBzdGF0aWMgX1B5X0lkZW50aWZpZXIgdmFybmFtZSA9IF9QeV9zdGF0aWNfc3RyaW5nX2luaXQodmFsdWUpCiAjZGVmaW5lIF9QeV9JREVOVElGSUVSKHZhcm5hbWUpIF9QeV9zdGF0aWNfc3RyaW5nKFB5SWRfIyN2YXJuYW1lLCAjdmFybmFtZSkKIAogLyoKQEAgLTM2Miw3ICszNjMsNyBAQAogICAgIFB5QnVmZmVyUHJvY3MgKnRwX2FzX2J1ZmZlcjsKIAogICAgIC8qIEZsYWdzIHRvIGRlZmluZSBwcmVzZW5jZSBvZiBvcHRpb25hbC9leHBhbmRlZCBmZWF0dXJlcyAqLwotICAgIGxvbmcgdHBfZmxhZ3M7CisgICAgdW5zaWduZWQgbG9uZyB0cF9mbGFnczsKIAogICAgIGNvbnN0IGNoYXIgKnRwX2RvYzsgLyogRG9jdW1lbnRhdGlvbiBzdHJpbmcgKi8KIApAQCAtNDA4LDYgKzQwOSw4IEBACiAgICAgLyogVHlwZSBhdHRyaWJ1dGUgY2FjaGUgdmVyc2lvbiB0YWcuIEFkZGVkIGluIHZlcnNpb24gMi42ICovCiAgICAgdW5zaWduZWQgaW50IHRwX3ZlcnNpb25fdGFnOwogCisgICAgZGVzdHJ1Y3RvciB0cF9maW5hbGl6ZTsKKwogI2lmZGVmIENPVU5UX0FMTE9DUwogICAgIC8qIHRoZXNlIG11c3QgYmUgbGFzdCBhbmQgbmV2ZXIgZXhwbGljaXRseSBpbml0aWFsaXplZCAqLwogICAgIFB5X3NzaXplX3QgdHBfYWxsb2NzOwpAQCAtNDI4LDcgKzQzMSw3IEBACiAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICBpbnQgYmFzaWNzaXplOwogICAgIGludCBpdGVtc2l6ZTsKLSAgICBpbnQgZmxhZ3M7CisgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgIFB5VHlwZV9TbG90ICpzbG90czsgLyogdGVybWluYXRlZCBieSBzbG90PT0wLiAqLwogfSBQeVR5cGVfU3BlYzsKIApAQCAtNDM2LDYgKzQzOSw5IEBACiAjaWYgIWRlZmluZWQoUHlfTElNSVRFRF9BUEkpIHx8IFB5X0xJTUlURURfQVBJKzAgPj0gMHgwMzAzMDAwMAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcyhQeVR5cGVfU3BlYyosIFB5T2JqZWN0Kik7CiAjZW5kaWYKKyNpZiAhZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkgfHwgUHlfTElNSVRFRF9BUEkrMCA+PSAweDAzMDQwMDAwCitQeUFQSV9GVU5DKHZvaWQqKSBQeVR5cGVfR2V0U2xvdChQeVR5cGVPYmplY3QqLCBpbnQpOworI2VuZGlmCiAKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIC8qIFRoZSAqcmVhbCogbGF5b3V0IG9mIGEgdHlwZSBvYmplY3Qgd2hlbiBhbGxvY2F0ZWQgb24gdGhlIGhlYXAgKi8KQEAgLTQ3MCw3ICs0NzYsNyBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5QmFzZU9iamVjdF9UeXBlOyAvKiBidWlsdC1pbiAnb2JqZWN0JyAqLwogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U3VwZXJfVHlwZTsgLyogYnVpbHQtaW4gJ3N1cGVyJyAqLwogCi1QeUFQSV9GVU5DKGxvbmcpIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QqKTsKK1B5QVBJX0ZVTkModW5zaWduZWQgbG9uZykgUHlUeXBlX0dldEZsYWdzKFB5VHlwZU9iamVjdCopOwogCiAjZGVmaW5lIFB5VHlwZV9DaGVjayhvcCkgXAogICAgIFB5VHlwZV9GYXN0U3ViY2xhc3MoUHlfVFlQRShvcCksIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUykKQEAgLTQ4OSw2ICs0OTUsMTEgQEAKIFB5QVBJX0ZVTkModW5zaWduZWQgaW50KSBQeVR5cGVfQ2xlYXJDYWNoZSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlUeXBlX01vZGlmaWVkKFB5VHlwZU9iamVjdCAqKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlUeXBlX0dldERvY0Zyb21JbnRlcm5hbERvYyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVR5cGVfR2V0VGV4dFNpZ25hdHVyZUZyb21JbnRlcm5hbERvYyhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisjZW5kaWYKKwogLyogR2VuZXJpYyBvcGVyYXRpb25zIG9uIG9iamVjdHMgKi8KIHN0cnVjdCBfUHlfSWRlbnRpZmllcjsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKQEAgLTUzMCw2ICs1NDEsMTAgQEAKIFB5QVBJX0ZVTkMoaW50KSBQeUNhbGxhYmxlX0NoZWNrKFB5T2JqZWN0ICopOwogCiBQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoUHlPYmplY3QgKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXIoUHlPYmplY3QgKik7CitQeUFQSV9GVU5DKGludCkgUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKFB5T2JqZWN0ICopOworI2VuZGlmCiAKIC8qIFNhbWUgYXMgUHlPYmplY3RfR2VuZXJpY3tHZXQsU2V0fUF0dHIsIGJ1dCBwYXNzaW5nIHRoZSBhdHRyaWJ1dGVzCiAgICBkaWN0IGFzIHRoZSBsYXN0IHBhcmFtZXRlci4gKi8KQEAgLTU1NywyNiArNTcyLDEzIEBACiBQeUFQSV9GVU5DKGludCkgUHlfUmVwckVudGVyKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeV9SZXByTGVhdmUoUHlPYmplY3QgKik7CiAKLS8qIEhlbHBlcnMgZm9yIGhhc2ggZnVuY3Rpb25zICovCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCi1QeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKLVB5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaFBvaW50ZXIodm9pZCopOwotUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoQnl0ZXModW5zaWduZWQgY2hhciosIFB5X3NzaXplX3QpOworLyogSGVscGVyIGZvciBwYXNzaW5nIG9iamVjdHMgdG8gcHJpbnRmIGFuZCB0aGUgbGlrZS4KKyAgIExlYWtzIHJlZmNvdW50cy4gIERvbid0IHVzZSBpdCEKKyovCisjZGVmaW5lIFB5T2JqZWN0X1JFUFIob2JqKSBQeVVuaWNvZGVfQXNVVEY4KFB5T2JqZWN0X1JlcHIob2JqKSkKICNlbmRpZgogCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlfaGFzaF90IHByZWZpeDsKLSAgICBQeV9oYXNoX3Qgc3VmZml4OwotfSBfUHlfSGFzaFNlY3JldF90OwotUHlBUElfREFUQShfUHlfSGFzaFNlY3JldF90KSBfUHlfSGFzaFNlY3JldDsKLQotI2lmZGVmIFB5X0RFQlVHCi1QeUFQSV9EQVRBKGludCkgX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQ7Ci0jZW5kaWYKLQotLyogSGVscGVyIGZvciBwYXNzaW5nIG9iamVjdHMgdG8gcHJpbnRmIGFuZCB0aGUgbGlrZSAqLwotI2RlZmluZSBQeU9iamVjdF9SRVBSKG9iaikgX1B5VW5pY29kZV9Bc1N0cmluZyhQeU9iamVjdF9SZXByKG9iaikpCi0KIC8qIEZsYWcgYml0cyBmb3IgcHJpbnRpbmc6ICovCiAjZGVmaW5lIFB5X1BSSU5UX1JBVyAgICAxICAgICAgIC8qIE5vIHN0cmluZyBxdW90ZXMgZXRjLiAqLwogCkBAIC02MDQsNTAgKzYwNiw1NSBAQAogKi8KIAogLyogU2V0IGlmIHRoZSB0eXBlIG9iamVjdCBpcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19IRUFQVFlQRSAoMUw8PDkpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEVBUFRZUEUgKDFVTCA8PCA5KQogCiAvKiBTZXQgaWYgdGhlIHR5cGUgYWxsb3dzIHN1YmNsYXNzaW5nICovCi0jZGVmaW5lIFB5X1RQRkxBR1NfQkFTRVRZUEUgKDFMPDwxMCkKKyNkZWZpbmUgUHlfVFBGTEFHU19CQVNFVFlQRSAoMVVMIDw8IDEwKQogCiAvKiBTZXQgaWYgdGhlIHR5cGUgaXMgJ3JlYWR5JyAtLSBmdWxseSBpbml0aWFsaXplZCAqLwotI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZICgxTDw8MTIpCisjZGVmaW5lIFB5X1RQRkxBR1NfUkVBRFkgKDFVTCA8PCAxMikKIAogLyogU2V0IHdoaWxlIHRoZSB0eXBlIGlzIGJlaW5nICdyZWFkaWVkJywgdG8gcHJldmVudCByZWN1cnNpdmUgcmVhZHkgY2FsbHMgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19SRUFEWUlORyAoMUw8PDEzKQorI2RlZmluZSBQeV9UUEZMQUdTX1JFQURZSU5HICgxVUwgPDwgMTMpCiAKIC8qIE9iamVjdHMgc3VwcG9ydCBnYXJiYWdlIGNvbGxlY3Rpb24gKHNlZSBvYmppbXAuaCkgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX0dDICgxTDw8MTQpCisjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9HQyAoMVVMIDw8IDE0KQogCiAvKiBUaGVzZSB0d28gYml0cyBhcmUgcHJlc2VydmVkIGZvciBTdGFja2xlc3MgUHl0aG9uLCBuZXh0IGFmdGVyIHRoaXMgaXMgMTcgKi8KICNpZmRlZiBTVEFDS0xFU1MKLSNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gKDNMPDwxNSkKKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1NUQUNLTEVTU19FWFRFTlNJT04gKDNVTCA8PCAxNSkKICNlbHNlCiAjZGVmaW5lIFB5X1RQRkxBR1NfSEFWRV9TVEFDS0xFU1NfRVhURU5TSU9OIDAKICNlbmRpZgogCiAvKiBPYmplY3RzIHN1cHBvcnQgdHlwZSBhdHRyaWJ1dGUgY2FjaGUgKi8KLSNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHICAgKDFMPDwxOCkKLSNkZWZpbmUgUHlfVFBGTEFHU19WQUxJRF9WRVJTSU9OX1RBRyAgKDFMPDwxOSkKKyNkZWZpbmUgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHICAgKDFVTCA8PCAxOCkKKyNkZWZpbmUgUHlfVFBGTEFHU19WQUxJRF9WRVJTSU9OX1RBRyAgKDFVTCA8PCAxOSkKIAogLyogVHlwZSBpcyBhYnN0cmFjdCBhbmQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0lTX0FCU1RSQUNUICgxTDw8MjApCisjZGVmaW5lIFB5X1RQRkxBR1NfSVNfQUJTVFJBQ1QgKDFVTCA8PCAyMCkKIAogLyogVGhlc2UgZmxhZ3MgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgdHlwZSBpcyBhIHN1YmNsYXNzLiAqLwotI2RlZmluZSBQeV9UUEZMQUdTX0lOVF9TVUJDTEFTUyAgICAgICAgICgxTDw8MjMpCi0jZGVmaW5lIFB5X1RQRkxBR1NfTE9OR19TVUJDTEFTUyAgICAgICAgKDFMPDwyNCkKLSNkZWZpbmUgUHlfVFBGTEFHU19MSVNUX1NVQkNMQVNTICAgICAgICAoMUw8PDI1KQotI2RlZmluZSBQeV9UUEZMQUdTX1RVUExFX1NVQkNMQVNTICAgICAgICgxTDw8MjYpCi0jZGVmaW5lIFB5X1RQRkxBR1NfQllURVNfU1VCQ0xBU1MgICAgICAgKDFMPDwyNykKLSNkZWZpbmUgUHlfVFBGTEFHU19VTklDT0RFX1NVQkNMQVNTICAgICAoMUw8PDI4KQotI2RlZmluZSBQeV9UUEZMQUdTX0RJQ1RfU1VCQ0xBU1MgICAgICAgICgxTDw8MjkpCi0jZGVmaW5lIFB5X1RQRkxBR1NfQkFTRV9FWENfU1VCQ0xBU1MgICAgKDFMPDwzMCkKLSNkZWZpbmUgUHlfVFBGTEFHU19UWVBFX1NVQkNMQVNTICAgICAgICAoMUw8PDMxKQorI2RlZmluZSBQeV9UUEZMQUdTX0xPTkdfU1VCQ0xBU1MgICAgICAgICgxVUwgPDwgMjQpCisjZGVmaW5lIFB5X1RQRkxBR1NfTElTVF9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAyNSkKKyNkZWZpbmUgUHlfVFBGTEFHU19UVVBMRV9TVUJDTEFTUyAgICAgICAoMVVMIDw8IDI2KQorI2RlZmluZSBQeV9UUEZMQUdTX0JZVEVTX1NVQkNMQVNTICAgICAgICgxVUwgPDwgMjcpCisjZGVmaW5lIFB5X1RQRkxBR1NfVU5JQ09ERV9TVUJDTEFTUyAgICAgKDFVTCA8PCAyOCkKKyNkZWZpbmUgUHlfVFBGTEFHU19ESUNUX1NVQkNMQVNTICAgICAgICAoMVVMIDw8IDI5KQorI2RlZmluZSBQeV9UUEZMQUdTX0JBU0VfRVhDX1NVQkNMQVNTICAgICgxVUwgPDwgMzApCisjZGVmaW5lIFB5X1RQRkxBR1NfVFlQRV9TVUJDTEFTUyAgICAgICAgKDFVTCA8PCAzMSkKIAogI2RlZmluZSBQeV9UUEZMQUdTX0RFRkFVTFQgICggXAogICAgICAgICAgICAgICAgICBQeV9UUEZMQUdTX0hBVkVfU1RBQ0tMRVNTX0VYVEVOU0lPTiB8IFwKICAgICAgICAgICAgICAgICAgUHlfVFBGTEFHU19IQVZFX1ZFUlNJT05fVEFHIHwgXAogICAgICAgICAgICAgICAgIDApCiAKKy8qIE5PVEU6IFRoZSBmb2xsb3dpbmcgZmxhZ3MgcmV1c2UgbG93ZXIgYml0cyAocmVtb3ZlZCBhcyBwYXJ0IG9mIHRoZQorICogUHl0aG9uIDMuMCB0cmFuc2l0aW9uKS4gKi8KKworLyogVHlwZSBzdHJ1Y3R1cmUgaGFzIHRwX2ZpbmFsaXplIG1lbWJlciAoMy40KSAqLworI2RlZmluZSBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUgKDFVTCA8PCAwKQorCiAjaWZkZWYgUHlfTElNSVRFRF9BUEkKICNkZWZpbmUgUHlUeXBlX0hhc0ZlYXR1cmUodCxmKSAgKChQeVR5cGVfR2V0RmxhZ3ModCkgJiAoZikpICE9IDApCiAjZWxzZQpAQCAtNjgyLDEyICs2ODksNiBAQAogY29tcGxpY2F0aW9ucyBpbiB0aGUgZGVhbGxvY2F0aW9uIGZ1bmN0aW9uLiAgKFRoaXMgaXMgYWN0dWFsbHkgYQogZGVjaXNpb24gdGhhdCdzIHVwIHRvIHRoZSBpbXBsZW1lbnRlciBvZiBlYWNoIG5ldyB0eXBlIHNvIGlmIHlvdSB3YW50LAogeW91IGNhbiBjb3VudCBzdWNoIHJlZmVyZW5jZXMgdG8gdGhlIHR5cGUgb2JqZWN0LikKLQotKioqIFdBUk5JTkcqKiogVGhlIFB5X0RFQ1JFRiBtYWNybyBtdXN0IGhhdmUgYSBzaWRlLWVmZmVjdC1mcmVlIGFyZ3VtZW50Ci1zaW5jZSBpdCBtYXkgZXZhbHVhdGUgaXRzIGFyZ3VtZW50IG11bHRpcGxlIHRpbWVzLiAgKFRoZSBhbHRlcm5hdGl2ZQotd291bGQgYmUgdG8gbWFjZSBpdCBhIHByb3BlciBmdW5jdGlvbiBvciBhc3NpZ24gaXQgdG8gYSBnbG9iYWwgdGVtcG9yYXJ5Ci12YXJpYWJsZSBmaXJzdCwgYm90aCBvZiB3aGljaCBhcmUgc2xvd2VyOyBhbmQgaW4gYSBtdWx0aS10aHJlYWRlZAotZW52aXJvbm1lbnQgdGhlIGdsb2JhbCB2YXJpYWJsZSB0cmljayBpcyBub3Qgc2FmZS4pCiAqLwogCiAvKiBGaXJzdCBkZWZpbmUgYSBwaWxlIG9mIHNpbXBsZSBoZWxwZXIgbWFjcm9zLCBvbmUgc2V0IHBlciBzcGVjaWFsCkBAIC03MDQsNyArNzA1LDYgQEAKIFB5QVBJX0ZVTkModm9pZCkgX1B5X05lZ2F0aXZlUmVmY291bnQoY29uc3QgY2hhciAqZm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsaW5lbm8sIFB5T2JqZWN0ICpvcCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeURpY3RfRHVtbXkodm9pZCk7Ci1QeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeVNldF9EdW1teSh2b2lkKTsKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5X0dldFJlZlRvdGFsKHZvaWQpOwogI2RlZmluZSBfUHlfSU5DX1JFRlRPVEFMICAgICAgICBfUHlfUmVmVG90YWwrKwogI2RlZmluZSBfUHlfREVDX1JFRlRPVEFMICAgICAgICBfUHlfUmVmVG90YWwtLQpAQCAtNzY2LDE5ICs3NjYsMjAgQEAKIAogI2RlZmluZSBQeV9JTkNSRUYob3ApICggICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIF9QeV9JTkNfUkVGVE9UQUwgIF9QeV9SRUZfREVCVUdfQ09NTUEgICAgICAgXAotICAgICgoUHlPYmplY3QqKShvcCkpLT5vYl9yZWZjbnQrKykKKyAgICAoKFB5T2JqZWN0ICopKG9wKSktPm9iX3JlZmNudCsrKQogCiAjZGVmaW5lIFB5X0RFQ1JFRihvcCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X2RlY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyAgICBcCiAgICAgICAgIGlmIChfUHlfREVDX1JFRlRPVEFMICBfUHlfUkVGX0RFQlVHX0NPTU1BICAgICAgIFwKLSAgICAgICAgLS0oKFB5T2JqZWN0Kikob3ApKS0+b2JfcmVmY250ICE9IDApICAgICAgICAgICAgXAotICAgICAgICAgICAgX1B5X0NIRUNLX1JFRkNOVChvcCkgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIC0tKF9weV9kZWNyZWZfdG1wKS0+b2JfcmVmY250ICE9IDApICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9QeV9DSEVDS19SRUZDTlQoX3B5X2RlY3JlZl90bXApICAgICAgICAgICAgXAogICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIF9QeV9EZWFsbG9jKChQeU9iamVjdCAqKShvcCkpOyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX1B5X0RlYWxsb2MoX3B5X2RlY3JlZl90bXApOyAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKIC8qIFNhZmVseSBkZWNyZWYgYG9wYCBhbmQgc2V0IGBvcGAgdG8gTlVMTCwgZXNwZWNpYWxseSB1c2VmdWwgaW4gdHBfY2xlYXIKLSAqIGFuZCB0cF9kZWFsbG9jIGltcGxlbWVudGF0b25zLgorICogYW5kIHRwX2RlYWxsb2MgaW1wbGVtZW50YXRpb25zLgogICoKICAqIE5vdGUgdGhhdCAidGhlIG9idmlvdXMiIGNvZGUgY2FuIGJlIGRlYWRseToKICAqCkBAIC04MTMsMTYgKzgxNCwyNyBAQAogICovCiAjZGVmaW5lIFB5X0NMRUFSKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmIChvcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3RtcCA9IChQeU9iamVjdCAqKShvcCk7ICAgXAorICAgICAgICBpZiAoX3B5X3RtcCAhPSBOVUxMKSB7ICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgKG9wKSA9IE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgUHlfREVDUkVGKF9weV90bXApOyAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKIC8qIE1hY3JvcyB0byB1c2UgaW4gY2FzZSB0aGUgb2JqZWN0IHBvaW50ZXIgbWF5IGJlIE5VTEw6ICovCi0jZGVmaW5lIFB5X1hJTkNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0lOQ1JFRihvcCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFB5X1hERUNSRUYob3ApIGRvIHsgaWYgKChvcCkgPT0gTlVMTCkgOyBlbHNlIFB5X0RFQ1JFRihvcCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFB5X1hJTkNSRUYob3ApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5T2JqZWN0ICpfcHlfeGluY3JlZl90bXAgPSAoUHlPYmplY3QgKikob3ApOyBcCisgICAgICAgIGlmIChfcHlfeGluY3JlZl90bXAgIT0gTlVMTCkgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBQeV9JTkNSRUYoX3B5X3hpbmNyZWZfdG1wKTsgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBQeV9YREVDUkVGKG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqX3B5X3hkZWNyZWZfdG1wID0gKFB5T2JqZWN0ICopKG9wKTsgXAorICAgICAgICBpZiAoX3B5X3hkZWNyZWZfdG1wICE9IE5VTEwpICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlfREVDUkVGKF9weV94ZGVjcmVmX3RtcCk7ICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKIC8qCiBUaGVzZSBhcmUgcHJvdmlkZWQgYXMgY29udmVuaWVuY2VzIHRvIFB5dGhvbiBydW50aW1lIGVtYmVkZGVycywgc28gdGhhdApkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vYmppbXBsLmggYi9JbmNsdWRlL29iamltcGwuaAppbmRleCBjNmI3ZGY0Li4zZjIxYjcwIDEwMDY0NAotLS0gYS9JbmNsdWRlL29iamltcGwuaAorKysgYi9JbmNsdWRlL29iamltcGwuaApAQCAtOTQsNTEgKzk0LDI3IEBACiAgICB0aGUgb2JqZWN0IGdldHMgaW5pdGlhbGl6ZWQgdmlhIFB5T2JqZWN0X3tJbml0LCBJbml0VmFyfSBhZnRlciBvYnRhaW5pbmcKICAgIHRoZSByYXcgbWVtb3J5LgogKi8KLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9NYWxsb2Moc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCAqKSBQeU9iamVjdF9SZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKLVB5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfRnJlZSh2b2lkICopOworUHlBUElfRlVOQyh2b2lkICopIFB5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSk7CitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X0ZyZWUodm9pZCAqcHRyKTsKIAorLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIG1lbW9yeSBibG9ja3MsIHJlZ2FyZGxlc3Mgb2Ygc2l6ZSAqLworUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpOwogCiAvKiBNYWNyb3MgKi8KICNpZmRlZiBXSVRIX1BZTUFMTE9DCiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYgLyogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSSAqLwotI2lmZGVmIFBZTUFMTE9DX0RFQlVHICAgLyogV0lUSF9QWU1BTExPQyAmJiBQWU1BTExPQ19ERUJVRyAqLwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdGcmVlKHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKLVB5QVBJX0ZVTkModm9pZCkgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGFwaSwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQgKikgX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcyk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeU9iamVjdF9EZWJ1Z0ZyZWVBcGkoY2hhciBhcGksIHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkKSBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApOwotUHlBUElfRlVOQyh2b2lkICopIF9QeU1lbV9EZWJ1Z01hbGxvYyhzaXplX3QgbmJ5dGVzKTsKLVB5QVBJX0ZVTkModm9pZCAqKSBfUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpOwotUHlBUElfRlVOQyh2b2lkKSBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKnApOwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBfUHlPYmplY3RfRGVidWdNYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfTWFsbG9jICAgICAgICAgX1B5T2JqZWN0X0RlYnVnTWFsbG9jCi0jZGVmaW5lIFB5T2JqZWN0X1JFQUxMT0MgICAgICAgIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2MKLSNkZWZpbmUgUHlPYmplY3RfUmVhbGxvYyAgICAgICAgX1B5T2JqZWN0X0RlYnVnUmVhbGxvYwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBfUHlPYmplY3RfRGVidWdGcmVlCi0jZGVmaW5lIFB5T2JqZWN0X0ZyZWUgICAgICAgICAgIF9QeU9iamVjdF9EZWJ1Z0ZyZWUKKyNlbmRpZgogCi0jZWxzZSAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgISBQWU1BTExPQ19ERUJVRyAqLworLyogTWFjcm9zICovCiAjZGVmaW5lIFB5T2JqZWN0X01BTExPQyAgICAgICAgIFB5T2JqZWN0X01hbGxvYwogI2RlZmluZSBQeU9iamVjdF9SRUFMTE9DICAgICAgICBQeU9iamVjdF9SZWFsbG9jCiAjZGVmaW5lIFB5T2JqZWN0X0ZSRUUgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNlbmRpZgotCi0jZWxzZSAgIC8qICEgV0lUSF9QWU1BTExPQyAqLwotI2RlZmluZSBQeU9iamVjdF9NQUxMT0MgICAgICAgICBQeU1lbV9NQUxMT0MKLSNkZWZpbmUgUHlPYmplY3RfUkVBTExPQyAgICAgICAgUHlNZW1fUkVBTExPQwotI2RlZmluZSBQeU9iamVjdF9GUkVFICAgICAgICAgICBQeU1lbV9GUkVFCi0KLSNlbmRpZiAgLyogV0lUSF9QWU1BTExPQyAqLwotCiAjZGVmaW5lIFB5T2JqZWN0X0RlbCAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUKLSNkZWZpbmUgUHlPYmplY3RfREVMICAgICAgICAgICAgUHlPYmplY3RfRlJFRQorI2RlZmluZSBQeU9iamVjdF9ERUwgICAgICAgICAgICBQeU9iamVjdF9GcmVlCisKIAogLyoKICAqIEdlbmVyaWMgb2JqZWN0IGFsbG9jYXRvciBpbnRlcmZhY2UKQEAgLTIyMiw2ICsxOTgsMjYgQEAKICAgIGNvbnN0cnVjdG9yIHlvdSB3b3VsZCBzdGFydCBkaXJlY3RseSB3aXRoIFB5T2JqZWN0X0luaXQvSW5pdFZhcgogKi8KIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIHVzZXIgY29udGV4dCBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSAyIGZ1bmN0aW9ucyAqLworICAgIHZvaWQgKmN0eDsKKworICAgIC8qIGFsbG9jYXRlIGFuIGFyZW5hIG9mIHNpemUgYnl0ZXMgKi8KKyAgICB2b2lkKiAoKmFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBmcmVlIGFuIGFyZW5hICovCisgICAgdm9pZCAoKmZyZWUpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworfSBQeU9iamVjdEFyZW5hQWxsb2NhdG9yOworCisvKiBHZXQgdGhlIGFyZW5hIGFsbG9jYXRvci4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0IHRoZSBhcmVuYSBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcik7CisjZW5kaWYKKworCiAvKgogICogR2FyYmFnZSBDb2xsZWN0aW9uIFN1cHBvcnQKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMzAsNiArMjI2LDEwIEBACiAvKiBDIGVxdWl2YWxlbnQgb2YgZ2MuY29sbGVjdCgpLiAqLwogUHlBUElfRlVOQyhQeV9zc2l6ZV90KSBQeUdDX0NvbGxlY3Qodm9pZCk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoUHlfc3NpemVfdCkgX1B5R0NfQ29sbGVjdE5vRmFpbCh2b2lkKTsKKyNlbmRpZgorCiAvKiBUZXN0IGlmIGEgdHlwZSBoYXMgYSBHQyBoZWFkICovCiAjZGVmaW5lIFB5VHlwZV9JU19HQyh0KSBQeVR5cGVfSGFzRmVhdHVyZSgodCksIFB5X1RQRkxBR1NfSEFWRV9HQykKIApAQCAtMjQ5LDEzICsyNDksMzcgQEAKICAgICAgICAgdW5pb24gX2djX2hlYWQgKmdjX3ByZXY7CiAgICAgICAgIFB5X3NzaXplX3QgZ2NfcmVmczsKICAgICB9IGdjOwotICAgIGxvbmcgZG91YmxlIGR1bW15OyAgLyogZm9yY2Ugd29yc3QtY2FzZSBhbGlnbm1lbnQgKi8KKyAgICBkb3VibGUgZHVtbXk7ICAvKiBmb3JjZSB3b3JzdC1jYXNlIGFsaWdubWVudCAqLwogfSBQeUdDX0hlYWQ7CiAKIGV4dGVybiBQeUdDX0hlYWQgKl9QeUdDX2dlbmVyYXRpb24wOwogCiAjZGVmaW5lIF9QeV9BU19HQyhvKSAoKFB5R0NfSGVhZCAqKShvKS0xKQogCisvKiBCaXQgMCBpcyBzZXQgd2hlbiB0cF9maW5hbGl6ZSBpcyBjYWxsZWQgKi8KKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCAgKDEgPDwgMCkKKy8qIFRoZSAoTi0xKSBtb3N0IHNpZ25pZmljYW50IGJpdHMgY29udGFpbiB0aGUgZ2Mgc3RhdGUgLyByZWZjb3VudCAqLworI2RlZmluZSBfUHlHQ19SRUZTX1NISUZUICAgICAgICAgICAoMSkKKyNkZWZpbmUgX1B5R0NfUkVGU19NQVNLICAgICAgICAgICAgKCgoc2l6ZV90KSAtMSkgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfUkVGUyhnKSAoKGcpLT5nYy5nY19yZWZzID4+IF9QeUdDX1JFRlNfU0hJRlQpCisjZGVmaW5lIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCB2KSBkbyB7IFwKKyAgICAoZyktPmdjLmdjX3JlZnMgPSAoKGcpLT5nYy5nY19yZWZzICYgfl9QeUdDX1JFRlNfTUFTSykgXAorICAgICAgICB8ICgoKHNpemVfdCkodikpIDw8IF9QeUdDX1JFRlNfU0hJRlQpOyAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX1B5R0NIZWFkX0RFQ1JFRihnKSAoKGcpLT5nYy5nY19yZWZzIC09IDEgPDwgX1B5R0NfUkVGU19TSElGVCkKKworI2RlZmluZSBfUHlHQ0hlYWRfRklOQUxJWkVEKGcpICgoKGcpLT5nYy5nY19yZWZzICYgX1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgIT0gMCkKKyNkZWZpbmUgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoZywgdikgZG8geyAgXAorICAgIChnKS0+Z2MuZ2NfcmVmcyA9ICgoZyktPmdjLmdjX3JlZnMgJiB+X1B5R0NfUkVGU19NQVNLX0ZJTkFMSVpFRCkgXAorICAgICAgICB8ICh2ICE9IDApOyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfUHlHQ19GSU5BTElaRUQobykgX1B5R0NIZWFkX0ZJTkFMSVpFRChfUHlfQVNfR0MobykpCisjZGVmaW5lIF9QeUdDX1NFVF9GSU5BTElaRUQobywgdikgX1B5R0NIZWFkX1NFVF9GSU5BTElaRUQoX1B5X0FTX0dDKG8pLCB2KQorCisjZGVmaW5lIF9QeUdDX1JFRlMobykgX1B5R0NIZWFkX1JFRlMoX1B5X0FTX0dDKG8pKQorCiAjZGVmaW5lIF9QeUdDX1JFRlNfVU5UUkFDS0VEICAgICAgICAgICAgICAgICAgICAoLTIpCiAjZGVmaW5lIF9QeUdDX1JFRlNfUkVBQ0hBQkxFICAgICAgICAgICAgICAgICAgICAoLTMpCiAjZGVmaW5lIF9QeUdDX1JFRlNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUgICAgICAoLTQpCkBAIC0yNjQsOSArMjg4LDkgQEAKICAqIGNvbGxlY3RvciBpdCBtdXN0IGJlIHNhZmUgdG8gY2FsbCB0aGUgb2JfdHJhdmVyc2UgbWV0aG9kLiAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVFJBQ0sobykgZG8geyBcCiAgICAgUHlHQ19IZWFkICpnID0gX1B5X0FTX0dDKG8pOyBcCi0gICAgaWYgKGctPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKKyAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpIFwKICAgICAgICAgUHlfRmF0YWxFcnJvcigiR0Mgb2JqZWN0IGFscmVhZHkgdHJhY2tlZCIpOyBcCi0gICAgZy0+Z2MuZ2NfcmVmcyA9IF9QeUdDX1JFRlNfUkVBQ0hBQkxFOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfUkVBQ0hBQkxFKTsgXAogICAgIGctPmdjLmdjX25leHQgPSBfUHlHQ19nZW5lcmF0aW9uMDsgXAogICAgIGctPmdjLmdjX3ByZXYgPSBfUHlHQ19nZW5lcmF0aW9uMC0+Z2MuZ2NfcHJldjsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnOyBcCkBAIC0yNzksOCArMzAzLDggQEAKICAqLwogI2RlZmluZSBfUHlPYmplY3RfR0NfVU5UUkFDSyhvKSBkbyB7IFwKICAgICBQeUdDX0hlYWQgKmcgPSBfUHlfQVNfR0Mobyk7IFwKLSAgICBhc3NlcnQoZy0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7IFwKLSAgICBnLT5nYy5nY19yZWZzID0gX1B5R0NfUkVGU19VTlRSQUNLRUQ7IFwKKyAgICBhc3NlcnQoX1B5R0NIZWFkX1JFRlMoZykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOyBcCisgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGcsIF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsgXAogICAgIGctPmdjLmdjX3ByZXYtPmdjLmdjX25leHQgPSBnLT5nYy5nY19uZXh0OyBcCiAgICAgZy0+Z2MuZ2NfbmV4dC0+Z2MuZ2NfcHJldiA9IGctPmdjLmdjX3ByZXY7IFwKICAgICBnLT5nYy5nY19uZXh0ID0gTlVMTDsgXApAQCAtMjg4LDcgKzMxMiw3IEBACiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBpcyBjdXJyZW50bHkgdHJhY2tlZCBieSB0aGUgR0MuICovCiAjZGVmaW5lIF9QeU9iamVjdF9HQ19JU19UUkFDS0VEKG8pIFwKLSAgICAoKF9QeV9BU19HQyhvKSktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCisgICAgKF9QeUdDX1JFRlMobykgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpCiAKIC8qIFRydWUgaWYgdGhlIG9iamVjdCBtYXkgYmUgdHJhY2tlZCBieSB0aGUgR0MgaW4gdGhlIGZ1dHVyZSwgb3IgYWxyZWFkeSBpcy4KICAgIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBpbXBsZW1lbnQgc29tZSBvcHRpbWl6YXRpb25zLiAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9vcGNvZGUuaCBiL0luY2x1ZGUvb3Bjb2RlLmgKaW5kZXggYTkwMTg0ZC4uMDkzNmYyZCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9vcGNvZGUuaAorKysgYi9JbmNsdWRlL29wY29kZS5oCkBAIC00OSw3ICs0OSw2IEBACiAjZGVmaW5lIEJJTkFSWV9PUiAgICAgICA2NgogI2RlZmluZSBJTlBMQUNFX1BPV0VSICAgNjcKICNkZWZpbmUgR0VUX0lURVIgICAgICAgIDY4Ci0jZGVmaW5lIFNUT1JFX0xPQ0FMUyAgICA2OQogI2RlZmluZSBQUklOVF9FWFBSICAgICAgNzAKICNkZWZpbmUgTE9BRF9CVUlMRF9DTEFTUyA3MQogI2RlZmluZSBZSUVMRF9GUk9NICAgICAgNzIKQEAgLTE0MCw2ICsxMzksNyBAQAogI2RlZmluZSBTRVRfQUREICAgICAgICAgMTQ2CiAjZGVmaW5lIE1BUF9BREQgICAgICAgICAxNDcKIAorI2RlZmluZSBMT0FEX0NMQVNTREVSRUYgICAxNDgKIAogLyogRVhDRVBUX0hBTkRMRVIgaXMgYSBzcGVjaWFsLCBpbXBsaWNpdCBibG9jayB0eXBlIHdoaWNoIGlzIGNyZWF0ZWQgd2hlbgogICAgZW50ZXJpbmcgYW4gZXhjZXB0IGhhbmRsZXIuIEl0IGlzIG5vdCBhbiBvcGNvZGUgYnV0IHdlIGRlZmluZSBpdCBoZXJlCmRpZmYgLS1naXQgYS9JbmNsdWRlL29zZGVmcy5oIGIvSW5jbHVkZS9vc2RlZnMuaAppbmRleCAwNWMwYzhlLi4wYzJlMzRiIDEwMDY0NAotLS0gYS9JbmNsdWRlL29zZGVmcy5oCisrKyBiL0luY2x1ZGUvb3NkZWZzLmgKQEAgLTksMTYgKzksMTAgQEAKIAogLyogTW9kIGJ5IGNocmlzaDogUU5YIGhhcyBXQVRDT00sIGJ1dCBpc24ndCBET1MgKi8KICNpZiAhZGVmaW5lZChfX1FOWF9fKQotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pIHx8IGRlZmluZWQoX19ESkdQUF9fKSB8fCBkZWZpbmVkKFBZT1NfT1MyKQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIE1BWFBBVEhMRU4gMjYwCi0jZGVmaW5lIFNFUCBMJy8nCi0jZGVmaW5lIEFMVFNFUCBMJ1xcJwotI2Vsc2UKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSB8fCBkZWZpbmVkKF9fV0FUQ09NQ19fKSB8fCBkZWZpbmVkKF9fREpHUFBfXykKICNkZWZpbmUgU0VQIEwnXFwnCiAjZGVmaW5lIEFMVFNFUCBMJy8nCiAjZGVmaW5lIE1BWFBBVEhMRU4gMjU2Ci0jZW5kaWYKICNkZWZpbmUgREVMSU0gTCc7JwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGFyc2V0b2suaCBiL0luY2x1ZGUvcGFyc2V0b2suaAppbmRleCA5MTFkZmMxLi4yYWNiODU0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3BhcnNldG9rLmgKKysrIGIvSW5jbHVkZS9wYXJzZXRvay5oCkBAIC0zOCwyOSArMzgsNDkgQEAKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZyhjb25zdCBjaGFyICosIGdyYW1tYXIgKiwgaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKik7CiBQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlIChGSUxFICosIGNvbnN0IGNoYXIgKiwgZ3JhbW1hciAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiwgcGVycmRldGFpbCAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVycmRldGFpbCAqKTsKIAogUHlBUElfRlVOQyhub2RlICopIFB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3MoY29uc3QgY2hhciAqLCBncmFtbWFyICosIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7Ci1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoRklMRSAqLCBjb25zdCBjaGFyICosCi0JCQkJCSAgIGNvbnN0IGNoYXIqLCBncmFtbWFyICosCi0JCQkJCQkgaW50LCBjaGFyICosIGNoYXIgKiwKLQkJCQkJCSBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MoCisgICAgRklMRSAqZnAsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGNvbnN0IGNoYXIgKmVuYywKKyAgICBncmFtbWFyICpnLAorICAgIGludCBzdGFydCwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KICAgICBjb25zdCBjaGFyICplbmMsCiAgICAgZ3JhbW1hciAqZywKICAgICBpbnQgc3RhcnQsCi0gICAgY2hhciAqcHMxLAotICAgIGNoYXIgKnBzMiwKKyAgICBjb25zdCBjaGFyICpwczEsCisgICAgY29uc3QgY2hhciAqcHMyLAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VGaWxlT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBjb25zdCBjaGFyICplbmMsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgY29uc3QgY2hhciAqcHMxLAorICAgIGNvbnN0IGNoYXIgKnBzMiwKICAgICBwZXJyZGV0YWlsICplcnJfcmV0LAogICAgIGludCAqZmxhZ3MpOwogCi1QeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKGNvbnN0IGNoYXIgKiwKLQkJCQkJICAgICAgY29uc3QgY2hhciAqLAotCQkJCQkgICAgICBncmFtbWFyICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICosIGludCk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lKAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLworICAgIGdyYW1tYXIgKmcsCisgICAgaW50IHN0YXJ0LAorICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCisgICAgaW50IGZsYWdzKTsKIFB5QVBJX0ZVTkMobm9kZSAqKSBQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWVFeCgKICAgICBjb25zdCBjaGFyICpzLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTY4LDYgKzg4LDEzIEBACiAgICAgaW50IHN0YXJ0LAogICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsCiAgICAgaW50ICpmbGFncyk7CitQeUFQSV9GVU5DKG5vZGUgKikgUHlQYXJzZXJfUGFyc2VTdHJpbmdPYmplY3QoCisgICAgY29uc3QgY2hhciAqcywKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgZ3JhbW1hciAqZywKKyAgICBpbnQgc3RhcnQsCisgICAgcGVycmRldGFpbCAqZXJyX3JldCwKKyAgICBpbnQgKmZsYWdzKTsKIAogLyogTm90ZSB0aGF0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIHB5dGhvbnJ1bi5jLAogICAgbm90IGluIHBhcnNldG9rLmMgKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcGF0Y2hsZXZlbC5oIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKaW5kZXggNzIxNjY2Yy4uZmI3OTJhMSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9wYXRjaGxldmVsLmgKKysrIGIvSW5jbHVkZS9wYXRjaGxldmVsLmgKQEAgLTE3LDEzICsxNywxMyBAQAogLyogVmVyc2lvbiBwYXJzZWQgb3V0IGludG8gbnVtZXJpYyB2YWx1ZXMgKi8KIC8qLS1zdGFydCBjb25zdGFudHMtLSovCiAjZGVmaW5lIFBZX01BSk9SX1ZFUlNJT04JMwotI2RlZmluZSBQWV9NSU5PUl9WRVJTSU9OCTMKLSNkZWZpbmUgUFlfTUlDUk9fVkVSU0lPTgk2CisjZGVmaW5lIFBZX01JTk9SX1ZFUlNJT04JNAorI2RlZmluZSBQWV9NSUNST19WRVJTSU9OCTUKICNkZWZpbmUgUFlfUkVMRUFTRV9MRVZFTAlQWV9SRUxFQVNFX0xFVkVMX0ZJTkFMCiAjZGVmaW5lIFBZX1JFTEVBU0VfU0VSSUFMCTAKIAogLyogVmVyc2lvbiBhcyBhIHN0cmluZyAqLwotI2RlZmluZSBQWV9WRVJTSU9OICAgICAgCSIzLjMuNiIKKyNkZWZpbmUgUFlfVkVSU0lPTiAgICAgIAkiMy40LjUrIgogLyotLWVuZCBjb25zdGFudHMtLSovCiAKIC8qIFZlcnNpb24gYXMgYSBzaW5nbGUgNC1ieXRlIGhleCBudW1iZXIsIGUuZy4gMHgwMTA1MDJCMiA9PSAxLjUuMmIyLgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWRlYnVnLmggYi9JbmNsdWRlL3B5ZGVidWcuaAppbmRleCA5N2MyZjhjLi44ZmU5ODE4IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5ZGVidWcuaAorKysgYi9JbmNsdWRlL3B5ZGVidWcuaApAQCAtMjAsNiArMjAsNyBAQAogUHlBUElfREFUQShpbnQpIFB5X05vVXNlclNpdGVEaXJlY3Rvcnk7CiBQeUFQSV9EQVRBKGludCkgUHlfVW5idWZmZXJlZFN0ZGlvRmxhZzsKIFB5QVBJX0RBVEEoaW50KSBQeV9IYXNoUmFuZG9taXphdGlvbkZsYWc7CitQeUFQSV9EQVRBKGludCkgUHlfSXNvbGF0ZWRGbGFnOwogCiAvKiB0aGlzIGlzIGEgd3JhcHBlciBhcm91bmQgZ2V0ZW52KCkgdGhhdCBwYXlzIGF0dGVudGlvbiB0bwogICAgUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnLiAgSXQgc2hvdWxkIGJlIHVzZWQgZm9yIGdldHRpbmcgdmFyaWFibGVzIGxpa2UKZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHllcnJvcnMuaCBiL0luY2x1ZGUvcHllcnJvcnMuaAppbmRleCBlMzg1MTIzLi4wMmY2NWQ2IDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5ZXJyb3JzLmgKKysrIGIvSW5jbHVkZS9weWVycm9ycy5oCkBAIC01Myw2ICs1Myw3IEBACiAgICAgUHlPYmplY3QgKm15ZXJybm87CiAgICAgUHlPYmplY3QgKnN0cmVycm9yOwogICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUyOwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeU9iamVjdCAqd2luZXJyb3I7CiAjZW5kaWYKQEAgLTc1LDYgKzc2LDkgQEAKIAogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXROb25lKFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRPYmplY3QoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeUVycl9TZXRLZXlFcnJvcihQeU9iamVjdCAqKTsKKyNlbmRpZgogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9TZXRTdHJpbmcoCiAgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwKICAgICBjb25zdCBjaGFyICpzdHJpbmcgICAvKiBkZWNvZGVkIGZyb20gdXRmLTggKi8KQEAgLTExOSw3ICsxMjMsOSBAQAogLyogQ29udGV4dCBtYW5pcHVsYXRpb24gKFBFUCAzMTM0KSAqLwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUV4Y2VwdGlvbl9HZXRDb250ZXh0KFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyh2b2lkKSBQeUV4Y2VwdGlvbl9TZXRDb250ZXh0KFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwotCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeUVycl9DaGFpbkV4Y2VwdGlvbnMoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisjZW5kaWYKIAogLyogKi8KIApAQCAtMTk4LDkgKzIwNCw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19XaW5kb3dzRXJyb3I7CiAjZW5kaWYKLSNpZmRlZiBfX1ZNUwotUHlBUElfREFUQShQeU9iamVjdCAqKSBQeUV4Y19WTVNFcnJvcjsKLSNlbmRpZgogCiBQeUFQSV9EQVRBKFB5T2JqZWN0ICopIFB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdDsKIApAQCAtMjI1LDYgKzIyOCw4IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21FcnJubyhQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KAogICAgIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKAorICAgIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoCiAgICAgUHlPYmplY3QgKmV4YywKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwpAQCAtMjUzLDYgKzI1OCw4IEBACiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCk7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0KAogICAgIFB5T2JqZWN0ICosaW50LCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKAorICAgIFB5T2JqZWN0ICosaW50LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoCiAgICAgUHlPYmplY3QgKmV4YywKICAgICBpbnQgaWVyciwKQEAgLTI4NCw2ICsyOTEsMjggQEAKICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb2MsIFB5T2JqZWN0ICpiYXNlLCBQeU9iamVjdCAqZGljdCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShQeU9iamVjdCAqKTsKIAorLyogSW4gZXhjZXB0aW9ucy5jICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCisvKiBIZWxwZXIgdGhhdCBhdHRlbXB0cyB0byByZXBsYWNlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiB3aXRoIG9uZSBvZiB0aGUKKyAqIHNhbWUgdHlwZSBidXQgd2l0aCBhIHByZWZpeCBhZGRlZCB0byB0aGUgZXhjZXB0aW9uIHRleHQuIFRoZSByZXN1bHRpbmcKKyAqIGV4Y2VwdGlvbiBkZXNjcmlwdGlvbiBsb29rcyBsaWtlOgorICoKKyAqICAgICBwcmVmaXggKGV4Y190eXBlOiBvcmlnaW5hbF9leGNfc3RyKQorICoKKyAqIE9ubHkgc29tZSBleGNlcHRpb25zIGNhbiBiZSBzYWZlbHkgcmVwbGFjZWQuIElmIHRoZSBmdW5jdGlvbiBkZXRlcm1pbmVzCisgKiBpdCBpc24ndCBzYWZlIHRvIHBlcmZvcm0gdGhlIHJlcGxhY2VtZW50LCBpdCB3aWxsIGxlYXZlIHRoZSBvcmlnaW5hbAorICogdW5tb2RpZmllZCBleGNlcHRpb24gaW4gcGxhY2UuCisgKgorICogUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgbmV3IGV4Y2VwdGlvbiAoaWYgYW55KSwgTlVMTCBpZiB0aGUKKyAqIGV4aXN0aW5nIGV4Y2VwdGlvbiB3YXMgbGVmdCBpbiBwbGFjZS4KKyAqLworUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlFcnJfVHJ5U2V0RnJvbUNhdXNlKAorICAgIGNvbnN0IGNoYXIgKnByZWZpeF9mb3JtYXQsICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgICovCisgICAgLi4uCisgICAgKTsKKyNlbmRpZgorCisKIC8qIEluIHNpZ2NoZWNrLmMgb3Igc2lnbmFsbW9kdWxlLmMgKi8KIFB5QVBJX0ZVTkMoaW50KSBQeUVycl9DaGVja1NpZ25hbHModm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1NldEludGVycnVwdCh2b2lkKTsKQEAgLTMwMSw5ICszMzAsMjAgQEAKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgaW50IGxpbmVubywKICAgICBpbnQgY29sX29mZnNldCk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIFB5RXJyX1N5bnRheExvY2F0aW9uT2JqZWN0KAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgbGluZW5vLAorICAgIGludCBjb2xfb2Zmc2V0KTsKKyNlbmRpZgogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUVycl9Qcm9ncmFtVGV4dCgKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgaW50IGxpbmVubyk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBpbnQgbGluZW5vKTsKKyNlbmRpZgogCiAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgdXNlZCB0byBjcmVhdGUgYW5kIG1vZGlmeSB1bmljb2RlCiAgICBleGNlcHRpb25zIGZyb20gQyAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weWhhc2guaCBiL0luY2x1ZGUvcHloYXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdjYTkzNwotLS0gL2Rldi9udWxsCisrKyBiL0luY2x1ZGUvcHloYXNoLmgKQEAgLTAsMCArMSwxNDkgQEAKKyNpZm5kZWYgUHlfSEFTSF9ICisKKyNkZWZpbmUgUHlfSEFTSF9ICisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIEhlbHBlcnMgZm9yIGhhc2ggZnVuY3Rpb25zICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKFB5X2hhc2hfdCkgX1B5X0hhc2hEb3VibGUoZG91YmxlKTsKK1B5QVBJX0ZVTkMoUHlfaGFzaF90KSBfUHlfSGFzaFBvaW50ZXIodm9pZCopOworUHlBUElfRlVOQyhQeV9oYXNoX3QpIF9QeV9IYXNoQnl0ZXMoY29uc3Qgdm9pZCosIFB5X3NzaXplX3QpOworI2VuZGlmCisKKy8qIFByaW1lIG11bHRpcGxpZXIgdXNlZCBpbiBzdHJpbmcgYW5kIHZhcmlvdXMgb3RoZXIgaGFzaGVzLiAqLworI2RlZmluZSBfUHlIQVNIX01VTFRJUExJRVIgMTAwMDAwM1VMICAvKiAweGY0MjQzICovCisKKy8qIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIG51bWVyaWMgaGFzaCBpbXBsZW1lbnRhdGlvbi4gIFNlZSBub3RlcyBmb3IKKyAgIF9QeV9IYXNoRG91YmxlIGluIE9iamVjdHMvb2JqZWN0LmMuICBOdW1lcmljIGhhc2hlcyBhcmUgYmFzZWQgb24KKyAgIHJlZHVjdGlvbiBtb2R1bG8gdGhlIHByaW1lIDIqKl9QeUhBU0hfQklUUyAtIDEuICovCisKKyNpZiBTSVpFT0ZfVk9JRF9QID49IDgKKyMgIGRlZmluZSBfUHlIQVNIX0JJVFMgNjEKKyNlbHNlCisjICBkZWZpbmUgX1B5SEFTSF9CSVRTIDMxCisjZW5kaWYKKworI2RlZmluZSBfUHlIQVNIX01PRFVMVVMgKCgoc2l6ZV90KTEgPDwgX1B5SEFTSF9CSVRTKSAtIDEpCisjZGVmaW5lIF9QeUhBU0hfSU5GIDMxNDE1OQorI2RlZmluZSBfUHlIQVNIX05BTiAwCisjZGVmaW5lIF9QeUhBU0hfSU1BRyBfUHlIQVNIX01VTFRJUExJRVIKKworCisvKiBoYXNoIHNlY3JldAorICoKKyAqIG1lbW9yeSBsYXlvdXQgb24gNjQgYml0IHN5c3RlbXMKKyAqICAgY2NjY2NjY2MgY2NjY2NjY2MgY2NjY2NjY2MgIHVjIC0tIHVuc2lnbmVkIGNoYXJbMjRdCisgKiAgIHBwcHBwcHBwIHNzc3Nzc3NzIC4uLi4uLi4uICBmbnYgLS0gdHdvIFB5X2hhc2hfdAorICogICBrMGswazBrMCBrMWsxazFrMSAuLi4uLi4uLiAgc2lwaGFzaCAtLSB0d28gUFlfVUlOVDY0X1QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gc3Nzc3Nzc3MgIGRqYngzM2EgLS0gMTYgYnl0ZXMgcGFkZGluZyArIG9uZSBQeV9oYXNoX3QKKyAqICAgLi4uLi4uLi4gLi4uLi4uLi4gZWVlZWVlZWUgIHB5ZXhwYXQgWE1MIGhhc2ggc2FsdAorICoKKyAqIG1lbW9yeSBsYXlvdXQgb24gMzIgYml0IHN5c3RlbXMKKyAqICAgY2NjY2NjY2MgY2NjY2NjY2MgY2NjY2NjY2MgIHVjCisgKiAgIHBwcHBzc3NzIC4uLi4uLi4uIC4uLi4uLi4uICBmbnYgLS0gdHdvIFB5X2hhc2hfdAorICogICBrMGswazBrMCBrMWsxazFrMSAuLi4uLi4uLiAgc2lwaGFzaCAtLSB0d28gUFlfVUlOVDY0X1QgKCopCisgKiAgIC4uLi4uLi4uIC4uLi4uLi4uIHNzc3MuLi4uICBkamJ4MzNhIC0tIDE2IGJ5dGVzIHBhZGRpbmcgKyBvbmUgUHlfaGFzaF90CisgKiAgIC4uLi4uLi4uIC4uLi4uLi4uIGVlZWUuLi4uICBweWV4cGF0IFhNTCBoYXNoIHNhbHQKKyAqCisgKiAoKikgVGhlIHNpcGhhc2ggbWVtYmVyIG1heSBub3QgYmUgYXZhaWxhYmxlIG9uIDMyIGJpdCBwbGF0Zm9ybXMgd2l0aG91dAorICogICAgIGFuIHVuc2lnbmVkIGludDY0IGRhdGEgdHlwZS4KKyAqLworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiB1bmlvbiB7CisgICAgLyogZW5zdXJlIDI0IGJ5dGVzICovCisgICAgdW5zaWduZWQgY2hhciB1Y1syNF07CisgICAgLyogdHdvIFB5X2hhc2hfdCBmb3IgRk5WICovCisgICAgc3RydWN0IHsKKyAgICAgICAgUHlfaGFzaF90IHByZWZpeDsKKyAgICAgICAgUHlfaGFzaF90IHN1ZmZpeDsKKyAgICB9IGZudjsKKyNpZmRlZiBQWV9VSU5UNjRfVAorICAgIC8qIHR3byB1aW50NjQgZm9yIFNpcEhhc2gyNCAqLworICAgIHN0cnVjdCB7CisgICAgICAgIFBZX1VJTlQ2NF9UIGswOworICAgICAgICBQWV9VSU5UNjRfVCBrMTsKKyAgICB9IHNpcGhhc2g7CisjZW5kaWYKKyAgICAvKiBhIGRpZmZlcmVudCAoISkgUHlfaGFzaF90IGZvciBzbWFsbCBzdHJpbmcgb3B0aW1pemF0aW9uICovCisgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBwYWRkaW5nWzE2XTsKKyAgICAgICAgUHlfaGFzaF90IHN1ZmZpeDsKKyAgICB9IGRqYngzM2E7CisgICAgc3RydWN0IHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBwYWRkaW5nWzE2XTsKKyAgICAgICAgUHlfaGFzaF90IGhhc2hzYWx0OworICAgIH0gZXhwYXQ7Cit9IF9QeV9IYXNoU2VjcmV0X3Q7CitQeUFQSV9EQVRBKF9QeV9IYXNoU2VjcmV0X3QpIF9QeV9IYXNoU2VjcmV0OworI2VuZGlmCisKKyNpZmRlZiBQeV9ERUJVRworUHlBUElfREFUQShpbnQpIF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkOworI2VuZGlmCisKKworLyogaGFzaCBmdW5jdGlvbiBkZWZpbml0aW9uICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlfaGFzaF90ICgqY29uc3QgaGFzaCkoY29uc3Qgdm9pZCAqLCBQeV9zc2l6ZV90KTsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGNvbnN0IGludCBoYXNoX2JpdHM7CisgICAgY29uc3QgaW50IHNlZWRfYml0czsKK30gUHlIYXNoX0Z1bmNEZWY7CisKK1B5QVBJX0ZVTkMoUHlIYXNoX0Z1bmNEZWYqKSBQeUhhc2hfR2V0RnVuY0RlZih2b2lkKTsKKyNlbmRpZgorCisKKy8qIGN1dG9mZiBmb3Igc21hbGwgc3RyaW5nIERKQlgzM0Egb3B0aW1pemF0aW9uIGluIHJhbmdlIFsxLCBjdXRvZmYpLgorICoKKyAqIEFib3V0IDUwJSBvZiB0aGUgc3RyaW5ncyBpbiBhIHR5cGljYWwgUHl0aG9uIGFwcGxpY2F0aW9uIGFyZSBzbWFsbGVyIHRoYW4KKyAqIDYgdG8gNyBjaGFycy4gSG93ZXZlciBESkJYMzNBIGlzIHZ1bG5lcmFibGUgdG8gaGFzaCBjb2xsaXNpb24gYXR0YWNrcy4KKyAqIE5FVkVSIHVzZSBESkJYMzNBIGZvciBsb25nIHN0cmluZ3MhCisgKgorICogQSBQeV9IQVNIX0NVVE9GRiBvZiAwIGRpc2FibGVzIHNtYWxsIHN0cmluZyBvcHRpbWl6YXRpb24uIDMyIGJpdCBwbGF0Zm9ybXMKKyAqIHNob3VsZCB1c2UgYSBzbWFsbGVyIGN1dG9mZiBiZWNhdXNlIGl0IGlzIGVhc2llciB0byBjcmVhdGUgY29sbGlkaW5nCisgKiBzdHJpbmdzLiBBIGN1dG9mZiBvZiA3IG9uIDY0Yml0IHBsYXRmb3JtcyBhbmQgNSBvbiAzMmJpdCBwbGF0Zm9ybXMgc2hvdWxkCisgKiBwcm92aWRlIGEgZGVjZW50IHNhZmV0eSBtYXJnaW4uCisgKi8KKyNpZm5kZWYgUHlfSEFTSF9DVVRPRkYKKyMgIGRlZmluZSBQeV9IQVNIX0NVVE9GRiAwCisjZWxpZiAoUHlfSEFTSF9DVVRPRkYgPiA3IHx8IFB5X0hBU0hfQ1VUT0ZGIDwgMCkKKyMgIGVycm9yIFB5X0hBU0hfQ1VUT0ZGIG11c3QgaW4gcmFuZ2UgMC4uLjcuCisjZW5kaWYgLyogUHlfSEFTSF9DVVRPRkYgKi8KKworCisvKiBoYXNoIGFsZ29yaXRobSBzZWxlY3Rpb24KKyAqCisgKiBUaGUgdmFsdWVzIGZvciBQeV9IQVNIX1NJUEhBU0gyNCBhbmQgUHlfSEFTSF9GTlYgYXJlIGhhcmQtY29kZWQgaW4gdGhlCisgKiBjb25maWd1cmUgc2NyaXB0LgorICoKKyAqIC0gRk5WIGlzIGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zIGFuZCBhcmNoaXRlY3R1cmVzLgorICogLSBTSVBIQVNIMjQgb25seSB3b3JrcyBvbiBwbGFmb3JtcyB0aGF0IHByb3ZpZGUgUFlfVUlOVDY0X1QgYW5kIGRvZXNuJ3QKKyAqICAgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBmb3IgaW50ZWdlcnMuCisgKiAtIFdpdGggRVhURVJOQUwgZW1iZWRkZXJzIGNhbiBwcm92aWRlIGFuIGFsdGVybmF0aXZlIGltcGxlbWVudGF0aW9uIHdpdGg6OgorICoKKyAqICAgICBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYyA9IHsuLi59OworICoKKyAqIFhYWDogRmlndXJlIG91dCBfX2RlY2xzcGVjKCkgZm9yIGV4dGVybiBQeUhhc2hfRnVuY0RlZi4KKyAqLworI2RlZmluZSBQeV9IQVNIX0VYVEVSTkFMIDAKKyNkZWZpbmUgUHlfSEFTSF9TSVBIQVNIMjQgMQorI2RlZmluZSBQeV9IQVNIX0ZOViAyCisKKyNpZm5kZWYgUHlfSEFTSF9BTEdPUklUSE0KKyMgIGlmIChkZWZpbmVkKFBZX1VJTlQ2NF9UKSAmJiBkZWZpbmVkKFBZX1VJTlQzMl9UKSBcCisgICAgICAgJiYgIWRlZmluZWQoSEFWRV9BTElHTkVEX1JFUVVJUkVEKSkKKyMgICAgZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIFB5X0hBU0hfU0lQSEFTSDI0CisjICBlbHNlCisjICAgIGRlZmluZSBQeV9IQVNIX0FMR09SSVRITSBQeV9IQVNIX0ZOVgorIyAgZW5kaWYgLyogdWludDY0X3QgJiYgdWludDMyX3QgJiYgYWxpZ25lZCAqLworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhUHlfSEFTSF9IICovCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWFjcm8uaCBiL0luY2x1ZGUvcHltYWNyby5oCmluZGV4IDc5M2Y2N2QuLjc5OTdjNTUgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvcHltYWNyby5oCisrKyBiL0luY2x1ZGUvcHltYWNyby5oCkBAIC02OSw0ICs2OSwxMCBAQAogLyogQ2hlY2sgaWYgcG9pbnRlciAicCIgaXMgYWxpZ25lZCB0byAiYSItYnl0ZXMgYm91bmRhcnkuICovCiAjZGVmaW5lIF9QeV9JU19BTElHTkVEKHAsIGEpICghKChQeV91aW50cHRyX3QpKHApICYgKFB5X3VpbnRwdHJfdCkoKGEpIC0gMSkpKQogCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgUHlfVU5VU0VEKG5hbWUpIF91bnVzZWRfICMjIG5hbWUgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIFB5X1VOVVNFRChuYW1lKSBfdW51c2VkXyAjIyBuYW1lCisjZW5kaWYKKwogI2VuZGlmIC8qIFB5X1BZTUFDUk9fSCAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weW1hdGguaCBiL0luY2x1ZGUvcHltYXRoLmgKaW5kZXggNjJhNmM0Mi4uMWVhOWFjMSAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1hdGguaAorKysgYi9JbmNsdWRlL3B5bWF0aC5oCkBAIC0xNTAsNyArMTUwLDI5IEBACiAgKiBkb2Vzbid0IHN1cHBvcnQgTmFOcy4KICAqLwogI2lmICFkZWZpbmVkKFB5X05BTikgJiYgIWRlZmluZWQoUHlfTk9fTkFOKQotI2RlZmluZSBQeV9OQU4gKFB5X0hVR0VfVkFMICogMC4pCisjaWYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyAgICAjZGVmaW5lIFB5X05BTiAoUHlfSFVHRV9WQUwgKiAwLikKKyNlbHNlIC8qIF9fSU5URUxfQ09NUElMRVIgKi8KKyAgICAjaWYgZGVmaW5lZChJQ0NfTkFOX1NUUklDVCkKKyAgICAgICAgI3ByYWdtYSBmbG9hdF9jb250cm9sKHB1c2gpCisgICAgICAgICNwcmFnbWEgZmxvYXRfY29udHJvbChwcmVjaXNlLCBvbikKKyAgICAgICAgI3ByYWdtYSBmbG9hdF9jb250cm9sKGV4Y2VwdCwgIG9uKQorICAgICAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAgICAgICAgIF9fZGVjbHNwZWMobm9pbmxpbmUpCisgICAgICAgICNlbHNlIC8qIExpbnV4ICovCisgICAgICAgICAgICBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpCisgICAgICAgICNlbmRpZiAvKiBfTVNDX1ZFUiAqLworICAgICAgICBzdGF0aWMgZG91YmxlIF9faWNjX25hbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBzcXJ0KC0xLjApOworICAgICAgICB9CisgICAgICAgICNwcmFnbWEgZmxvYXRfY29udHJvbCAocG9wKQorICAgICAgICAjZGVmaW5lIFB5X05BTiBfX2ljY19uYW4oKQorICAgICNlbHNlIC8qIElDQ19OQU5fUkVMQVhFRCBhcyBkZWZhdWx0IGZvciBJbnRlbCBDb21waWxlciAqLworICAgICAgICBzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsgZG91YmxlIF9faWNjX25hbjsgfSBfX25hbl9zdG9yZSA9IHswLDAsMCwwLDAsMCwweGY4LDB4N2Z9OworICAgICAgICAjZGVmaW5lIFB5X05BTiAoX19uYW5fc3RvcmUuX19pY2NfbmFuKQorICAgICNlbmRpZiAvKiBJQ0NfTkFOX1NUUklDVCAqLworI2VuZGlmIC8qIF9fSU5URUxfQ09NUElMRVIgKi8KICNlbmRpZgogCiAvKiBQeV9PVkVSRkxPV0VEKFgpCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5bWVtLmggYi9JbmNsdWRlL3B5bWVtLmgKaW5kZXggMTBiNWJlYS4uMjM3MmI4NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weW1lbS5oCisrKyBiL0luY2x1ZGUvcHltZW0uaApAQCAtMTEsNiArMTEsMTMgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZV90IHNpemUpOworUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1Jhd1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cik7CisjZW5kaWYKKworCiAvKiBCRVdBUkU6CiAKICAgIEVhY2ggaW50ZXJmYWNlIGV4cG9ydHMgYm90aCBmdW5jdGlvbnMgYW5kIG1hY3Jvcy4gIEV4dGVuc2lvbiBtb2R1bGVzIHNob3VsZApAQCAtNDksMjEgKzU2LDE2IEBACiAgICBwZXJmb3JtZWQgb24gZmFpbHVyZSAobm8gZXhjZXB0aW9uIGlzIHNldCwgbm8gd2FybmluZyBpcyBwcmludGVkLCBldGMpLgogKi8KIAotUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX01hbGxvYyhzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkICopIFB5TWVtX1JlYWxsb2Modm9pZCAqLCBzaXplX3QpOwotUHlBUElfRlVOQyh2b2lkKSBQeU1lbV9GcmVlKHZvaWQgKik7CitQeUFQSV9GVU5DKHZvaWQgKikgUHlNZW1fTWFsbG9jKHNpemVfdCBzaXplKTsKK1B5QVBJX0ZVTkModm9pZCAqKSBQeU1lbV9SZWFsbG9jKHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fRnJlZSh2b2lkICpwdHIpOwogCi0vKiBTdGFydGluZyBmcm9tIFB5dGhvbiAxLjYsIHRoZSB3cmFwcGVycyBQeV97TWFsbG9jLFJlYWxsb2MsRnJlZX0gYXJlCi0gICBubyBsb25nZXIgc3VwcG9ydGVkLiBUaGV5IHVzZWQgdG8gY2FsbCBQeUVycl9Ob01lbW9yeSgpIG9uIGZhaWx1cmUuICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGNoYXIgKikgX1B5TWVtX1Jhd1N0cmR1cChjb25zdCBjaGFyICpzdHIpOworUHlBUElfRlVOQyhjaGFyICopIF9QeU1lbV9TdHJkdXAoY29uc3QgY2hhciAqc3RyKTsKKyNlbmRpZgogCiAvKiBNYWNyb3MuICovCi0jaWZkZWYgUFlNQUxMT0NfREVCVUcKLS8qIFJlZGlyZWN0IGFsbCBtZW1vcnkgb3BlcmF0aW9ucyB0byBQeXRob24ncyBkZWJ1Z2dpbmcgYWxsb2NhdG9yLiAqLwotI2RlZmluZSBQeU1lbV9NQUxMT0MJCV9QeU1lbV9EZWJ1Z01hbGxvYwotI2RlZmluZSBQeU1lbV9SRUFMTE9DCQlfUHlNZW1fRGVidWdSZWFsbG9jCi0jZGVmaW5lIFB5TWVtX0ZSRUUJCV9QeU1lbV9EZWJ1Z0ZyZWUKLQotI2Vsc2UJLyogISBQWU1BTExPQ19ERUJVRyAqLwogCiAvKiBQeU1lbV9NQUxMT0MoMCkgbWVhbnMgbWFsbG9jKDEpLiBTb21lIHN5c3RlbXMgd291bGQgcmV0dXJuIE5VTEwKICAgIGZvciBtYWxsb2MoMCksIHdoaWNoIHdvdWxkIGJlIHRyZWF0ZWQgYXMgYW4gZXJyb3IuIFNvbWUgcGxhdGZvcm1zCkBAIC03MSwxMyArNzMsOSBAQAogICAgcHltYWxsb2MuIFRvIHNvbHZlIHRoZXNlIHByb2JsZW1zLCBhbGxvY2F0ZSBhbiBleHRyYSBieXRlLiAqLwogLyogUmV0dXJucyBOVUxMIHRvIGluZGljYXRlIGVycm9yIGlmIGEgbmVnYXRpdmUgc2l6ZSBvciBzaXplIGxhcmdlciB0aGFuCiAgICBQeV9zc2l6ZV90IGNhbiByZXByZXNlbnQgaXMgc3VwcGxpZWQuICBIZWxwcyBwcmV2ZW50cyBzZWN1cml0eSBob2xlcy4gKi8KLSNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pCQkoKHNpemVfdCkobikgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYID8gTlVMTCBcCi0JCQkJOiBtYWxsb2MoKG4pID8gKG4pIDogMSkpCi0jZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikJKChzaXplX3QpKG4pID4gKHNpemVfdClQWV9TU0laRV9UX01BWCAgPyBOVUxMIFwKLQkJCQk6IHJlYWxsb2MoKHApLCAobikgPyAobikgOiAxKSkKLSNkZWZpbmUgUHlNZW1fRlJFRQkJZnJlZQotCi0jZW5kaWYJLyogUFlNQUxMT0NfREVCVUcgKi8KKyNkZWZpbmUgUHlNZW1fTUFMTE9DKG4pICAgICAgICAgUHlNZW1fTWFsbG9jKG4pCisjZGVmaW5lIFB5TWVtX1JFQUxMT0MocCwgbikgICAgIFB5TWVtX1JlYWxsb2MocCwgbikKKyNkZWZpbmUgUHlNZW1fRlJFRShwKSAgICAgICAgICAgUHlNZW1fRnJlZShwKQogCiAvKgogICogVHlwZS1vcmllbnRlZCBtZW1vcnkgaW50ZXJmYWNlCkBAIC0xMTUsNiArMTEzLDY5IEBACiAjZGVmaW5lIFB5TWVtX0RlbAkJUHlNZW1fRnJlZQogI2RlZmluZSBQeU1lbV9ERUwJCVB5TWVtX0ZSRUUKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQordHlwZWRlZiBlbnVtIHsKKyAgICAvKiBQeU1lbV9SYXdNYWxsb2MoKSwgUHlNZW1fUmF3UmVhbGxvYygpIGFuZCBQeU1lbV9SYXdGcmVlKCkgKi8KKyAgICBQWU1FTV9ET01BSU5fUkFXLAorCisgICAgLyogUHlNZW1fTWFsbG9jKCksIFB5TWVtX1JlYWxsb2MoKSBhbmQgUHlNZW1fRnJlZSgpICovCisgICAgUFlNRU1fRE9NQUlOX01FTSwKKworICAgIC8qIFB5T2JqZWN0X01hbGxvYygpLCBQeU9iamVjdF9SZWFsbG9jKCkgYW5kIFB5T2JqZWN0X0ZyZWUoKSAqLworICAgIFBZTUVNX0RPTUFJTl9PQkoKK30gUHlNZW1BbGxvY2F0b3JEb21haW47CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiB1c2VyIGNvbnRleHQgcGFzc2VkIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgMyBmdW5jdGlvbnMgKi8KKyAgICB2b2lkICpjdHg7CisKKyAgICAvKiBhbGxvY2F0ZSBhIG1lbW9yeSBibG9jayAqLworICAgIHZvaWQqICgqbWFsbG9jKSAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiBhbGxvY2F0ZSBvciByZXNpemUgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkKiAoKnJlYWxsb2MpICh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IG5ld19zaXplKTsKKworICAgIC8qIHJlbGVhc2UgYSBtZW1vcnkgYmxvY2sgKi8KKyAgICB2b2lkICgqZnJlZSkgKHZvaWQgKmN0eCwgdm9pZCAqcHRyKTsKK30gUHlNZW1BbGxvY2F0b3I7CisKKy8qIEdldCB0aGUgbWVtb3J5IGJsb2NrIGFsbG9jYXRvciBvZiB0aGUgc3BlY2lmaWVkIGRvbWFpbi4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvY2F0b3IpOworCisvKiBTZXQgdGhlIG1lbW9yeSBibG9jayBhbGxvY2F0b3Igb2YgdGhlIHNwZWNpZmllZCBkb21haW4uCisKKyAgIFRoZSBuZXcgYWxsb2NhdG9yIG11c3QgcmV0dXJuIGEgZGlzdGluY3Qgbm9uLU5VTEwgcG9pbnRlciB3aGVuIHJlcXVlc3RpbmcKKyAgIHplcm8gYnl0ZXMuCisKKyAgIEZvciB0aGUgUFlNRU1fRE9NQUlOX1JBVyBkb21haW4sIHRoZSBhbGxvY2F0b3IgbXVzdCBiZSB0aHJlYWQtc2FmZTogdGhlIEdJTAorICAgaXMgbm90IGhlbGQgd2hlbiB0aGUgYWxsb2NhdG9yIGlzIGNhbGxlZC4KKworICAgSWYgdGhlIG5ldyBhbGxvY2F0b3IgaXMgbm90IGEgaG9vayAoZG9uJ3QgY2FsbCB0aGUgcHJldmlvdXMgYWxsb2NhdG9yKSwgdGhlCisgICBQeU1lbV9TZXR1cERlYnVnSG9va3MoKSBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB0byByZWluc3RhbGwgdGhlIGRlYnVnIGhvb2tzCisgICBvbiB0b3Agb24gdGhlIG5ldyBhbGxvY2F0b3IuICovCitQeUFQSV9GVU5DKHZvaWQpIFB5TWVtX1NldEFsbG9jYXRvcihQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKTsKKworLyogU2V0dXAgaG9va3MgdG8gZGV0ZWN0IGJ1Z3MgaW4gdGhlIGZvbGxvd2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRvcgorICAgZnVuY3Rpb25zOgorCisgICAtIFB5TWVtX1Jhd01hbGxvYygpLCBQeU1lbV9SYXdSZWFsbG9jKCksIFB5TWVtX1Jhd0ZyZWUoKQorICAgLSBQeU1lbV9NYWxsb2MoKSwgUHlNZW1fUmVhbGxvYygpLCBQeU1lbV9GcmVlKCkKKyAgIC0gUHlPYmplY3RfTWFsbG9jKCksIFB5T2JqZWN0X1JlYWxsb2MoKSBhbmQgUHlPYmplY3RfRnJlZSgpCisKKyAgIE5ld2x5IGFsbG9jYXRlZCBtZW1vcnkgaXMgZmlsbGVkIHdpdGggdGhlIGJ5dGUgMHhDQiwgZnJlZWQgbWVtb3J5IGlzIGZpbGxlZAorICAgd2l0aCB0aGUgYnl0ZSAweERCLiBBZGRpdGlvbm5hbCBjaGVja3M6CisKKyAgIC0gZGV0ZWN0IEFQSSB2aW9sYXRpb25zLCBleDogUHlPYmplY3RfRnJlZSgpIGNhbGxlZCBvbiBhIGJ1ZmZlciBhbGxvY2F0ZWQKKyAgICAgYnkgUHlNZW1fTWFsbG9jKCkKKyAgIC0gZGV0ZWN0IHdyaXRlIGJlZm9yZSB0aGUgc3RhcnQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIHVuZGVyZmxvdykKKyAgIC0gZGV0ZWN0IHdyaXRlIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciAoYnVmZmVyIG92ZXJmbG93KQorCisgICBUaGUgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGlmIFB5dGhvbiBpcyBub3QgY29tcGlsZWQgaXMgZGVidWcgbW9kZS4gKi8KK1B5QVBJX0ZVTkModm9pZCkgUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpOworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9JbmNsdWRlL3B5cG9ydC5oIGIvSW5jbHVkZS9weXBvcnQuaAppbmRleCBhNWVkZWE5Li5iMjlmOWJkIDEwMDY0NAotLS0gYS9JbmNsdWRlL3B5cG9ydC5oCisrKyBiL0luY2x1ZGUvcHlwb3J0LmgKQEAgLTE0NCwyMyArMTQ0LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLS8qIFByaW1lIG11bHRpcGxpZXIgdXNlZCBpbiBzdHJpbmcgYW5kIHZhcmlvdXMgb3RoZXIgaGFzaGVzLiAqLwotI2RlZmluZSBfUHlIQVNIX01VTFRJUExJRVIgMTAwMDAwM1VMICAvKiAweGY0MjQzICovCi0KLS8qIFBhcmFtZXRlcnMgdXNlZCBmb3IgdGhlIG51bWVyaWMgaGFzaCBpbXBsZW1lbnRhdGlvbi4gIFNlZSBub3RlcyBmb3IKLSAgIF9QeV9IYXNoRG91YmxlIGluIE9iamVjdHMvb2JqZWN0LmMuICBOdW1lcmljIGhhc2hlcyBhcmUgYmFzZWQgb24KLSAgIHJlZHVjdGlvbiBtb2R1bG8gdGhlIHByaW1lIDIqKl9QeUhBU0hfQklUUyAtIDEuICovCi0KLSNpZiBTSVpFT0ZfVk9JRF9QID49IDgKLSNkZWZpbmUgX1B5SEFTSF9CSVRTIDYxCi0jZWxzZQotI2RlZmluZSBfUHlIQVNIX0JJVFMgMzEKLSNlbmRpZgotI2RlZmluZSBfUHlIQVNIX01PRFVMVVMgKCgoc2l6ZV90KTEgPDwgX1B5SEFTSF9CSVRTKSAtIDEpCi0jZGVmaW5lIF9QeUhBU0hfSU5GIDMxNDE1OQotI2RlZmluZSBfUHlIQVNIX05BTiAwCi0jZGVmaW5lIF9QeUhBU0hfSU1BRyBfUHlIQVNIX01VTFRJUExJRVIKLQogLyogdWludHB0cl90IGlzIHRoZSBDOVggbmFtZSBmb3IgYW4gdW5zaWduZWQgaW50ZWdyYWwgdHlwZSBzdWNoIHRoYXQgYQogICogbGVnaXRpbWF0ZSB2b2lkKiBjYW4gYmUgY2FzdCB0byB1aW50cHRyX3QgYW5kIHRoZW4gYmFjayB0byB2b2lkKiBhZ2FpbgogICogd2l0aG91dCBsb3NzIG9mIGluZm9ybWF0aW9uLiAgU2ltaWxhcmx5IGZvciBpbnRwdHJfdCwgd3J0IGEgc2lnbmVkCkBAIC0xOTksMTAgKzE4MiwxOSBAQAogI2VuZGlmCiAKIC8qIFB5X2hhc2hfdCBpcyB0aGUgc2FtZSBzaXplIGFzIGEgcG9pbnRlci4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX0hBU0hfVCBTSVpFT0ZfU0laRV9UCiB0eXBlZGVmIFB5X3NzaXplX3QgUHlfaGFzaF90OwogLyogUHlfdWhhc2hfdCBpcyB0aGUgdW5zaWduZWQgZXF1aXZhbGVudCBuZWVkZWQgdG8gY2FsY3VsYXRlIG51bWVyaWMgaGFzaC4gKi8KKyNkZWZpbmUgU0laRU9GX1BZX1VIQVNIX1QgU0laRU9GX1NJWkVfVAogdHlwZWRlZiBzaXplX3QgUHlfdWhhc2hfdDsKIAorLyogT25seSB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggY29kZSB0aGF0IG1heSBub3QgYmUgUFlfU1NJWkVfVF9DTEVBTi4gKi8KKyNpZmRlZiBQWV9TU0laRV9UX0NMRUFOCit0eXBlZGVmIFB5X3NzaXplX3QgUHlfc3NpemVfY2xlYW5fdDsKKyNlbHNlCit0eXBlZGVmIGludCBQeV9zc2l6ZV9jbGVhbl90OworI2VuZGlmCisKIC8qIExhcmdlc3QgcG9zc2libGUgdmFsdWUgb2Ygc2l6ZV90LgogICAgU0laRV9NQVggaXMgcGFydCBvZiBDOTksIHNvIGl0IG1pZ2h0IGJlIGRlZmluZWQgb24gc29tZQogICAgcGxhdGZvcm1zLiBJZiBpdCBpcyBub3QgZGVmaW5lZCwgKHNpemVfdCktMSBpcyBhIHBvcnRhYmxlCkBAIC0yMTksMTAgKzIxMSw2IEBACiAvKiBTbWFsbGVzdCBuZWdhdGl2ZSB2YWx1ZSBvZiB0eXBlIFB5X3NzaXplX3QuICovCiAjZGVmaW5lIFBZX1NTSVpFX1RfTUlOICgtUFlfU1NJWkVfVF9NQVgtMSkKIAotI2lmIFNJWkVPRl9QSURfVCA+IFNJWkVPRl9MT05HCi0jICAgZXJyb3IgIlB5dGhvbiBkb2Vzbid0IHN1cHBvcnQgc2l6ZW9mKHBpZF90KSA+IHNpemVvZihsb25nKSIKLSNlbmRpZgotCiAvKiBQWV9GT1JNQVRfU0laRV9UIGlzIGEgcGxhdGZvcm0tc3BlY2lmaWMgbW9kaWZpZXIgZm9yIHVzZSBpbiBhIHByaW50ZgogICogZm9ybWF0IHRvIGNvbnZlcnQgYW4gYXJndW1lbnQgd2l0aCB0aGUgd2lkdGggb2YgYSBzaXplX3Qgb3IgUHlfc3NpemVfdC4KICAqIEM5OSBpbnRyb2R1Y2VkICJ6IiBmb3IgdGhpcyBwdXJwb3NlLCBidXQgbm90IGFsbCBwbGF0Zm9ybXMgc3VwcG9ydCB0aGF0OwpAQCAtMjY3LDcgKzI1NSw3IEBACiAgKi8KICNpZmRlZiBIQVZFX0xPTkdfTE9ORwogIyAgIGlmbmRlZiBQWV9GT1JNQVRfTE9OR19MT05HCi0jICAgICAgIGlmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyMgICAgICAgaWZkZWYgTVNfV0lORE9XUwogIyAgICAgICAgICAgZGVmaW5lIFBZX0ZPUk1BVF9MT05HX0xPTkcgIkk2NCIKICMgICAgICAgZWxzZQogIyAgICAgICAgICAgZXJyb3IgIlRoaXMgcGxhdGZvcm0ncyBweWNvbmZpZy5oIG5lZWRzIHRvIGRlZmluZSBQWV9GT1JNQVRfTE9OR19MT05HIgpAQCAtMjgyLDcgKzI3MCw3IEBACiAgKiBmb3IgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydCB0aGF0LgogICoKICAqIElmIFBZX0xPQ0FMX0FHR1JFU1NJVkUgaXMgZGVmaW5lZCBiZWZvcmUgcHl0aG9uLmggaXMgaW5jbHVkZWQsIG1vcmUKLSAqICJhZ2dyZXNzaXZlIiBpbmxpbmluZy9vcHRpbWl6YWlvbiBpcyBlbmFibGVkIGZvciB0aGUgZW50aXJlIG1vZHVsZS4gIFRoaXMKKyAqICJhZ2dyZXNzaXZlIiBpbmxpbmluZy9vcHRpbWl6YXRpb24gaXMgZW5hYmxlZCBmb3IgdGhlIGVudGlyZSBtb2R1bGUuICBUaGlzCiAgKiBtYXkgbGVhZCB0byBjb2RlIGJsb2F0LCBhbmQgbWF5IHNsb3cgdGhpbmdzIGRvd24gZm9yIHRob3NlIHJlYXNvbnMuICBJdCBtYXkKICAqIGFsc28gbGVhZCB0byBlcnJvcnMsIGlmIHRoZSBjb2RlIHJlbGllcyBvbiBwb2ludGVyIGFsaWFzaW5nLiAgVXNlIHdpdGgKICAqIGNhcmUuCkBAIC0zOTIsMTcgKzM4MCwyMCBAQAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNlbGlmIGRlZmluZWQoSEFWRV9TVEFUX0gpCiAjaW5jbHVkZSA8c3RhdC5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApCisjaWZuZGVmIFNfSUZNVAogLyogVmlzdWFsQWdlIEMvQysrIEZhaWxlZCB0byBEZWZpbmUgTW91bnRUeXBlIEZpZWxkIGluIHN5cy9zdGF0LmggKi8KLSNkZWZpbmUgU19JRk1UIChTX0lGRElSfFNfSUZDSFJ8U19JRlJFRykKKyNkZWZpbmUgU19JRk1UIDAxNzAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZMTksKKy8qIFdpbmRvd3MgZG9lc24ndCBkZWZpbmUgU19JRkxOSyBidXQgcG9zaXhtb2R1bGUuYyBtYXBzCisgKiBJT19SRVBBUlNFX1RBR19TWU1MSU5LIHRvIFNfSUZMTksgKi8KKyMgIGRlZmluZSBTX0lGTE5LIDAxMjAwMDAKICNlbmRpZgogCiAjaWZuZGVmIFNfSVNSRUcKQEAgLTQxMyw2ICs0MDQsOSBAQAogI2RlZmluZSBTX0lTRElSKHgpICgoKHgpICYgU19JRk1UKSA9PSBTX0lGRElSKQogI2VuZGlmCiAKKyNpZm5kZWYgU19JU0NIUgorI2RlZmluZSBTX0lTQ0hSKHgpICgoKHgpICYgU19JRk1UKSA9PSBTX0lGQ0hSKQorI2VuZGlmCiAKICNpZmRlZiBfX2NwbHVzcGx1cwogLyogTW92ZSB0aGlzIGRvd24gaGVyZSBzaW5jZSBzb21lIEMrKyAjaW5jbHVkZSdzIGRvbid0IGxpa2UgdG8gYmUgaW5jbHVkZWQKQEAgLTgzNSwxNSArODI5LDYgQEAKICNlbmRpZgogCiAvKgotICogQWRkIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0IHdoZXJlIGF2YWlsYWJsZS4KLSAqLwotI2lmZGVmIEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFCi0jZGVmaW5lIFB5X0ZPUk1BVF9QQVJTRVRVUExFKGZ1bmMscDEscDIpIF9fYXR0cmlidXRlX18oKGZvcm1hdChmdW5jLHAxLHAyKSkpCi0jZWxzZQotI2RlZmluZSBQeV9GT1JNQVRfUEFSU0VUVVBMRShmdW5jLHAxLHAyKQotI2VuZGlmCi0KLS8qCiAgKiBTcGVjaWZ5IGFsaWdubWVudCBvbiBjb21waWxlcnMgdGhhdCBzdXBwb3J0IGl0LgogICovCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwpAQCAtODgxLDQgKzg2NiwxOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorLyoKKyAqIENvbnZlbmllbnQgbWFjcm9zIHRvIGRlYWwgd2l0aCBlbmRpYW5uZXNzIG9mIHRoZSBwbGF0Zm9ybS4gV09SRFNfQklHRU5ESUFOIGlzCisgKiBkZXRlY3RlZCBieSBjb25maWd1cmUgYW5kIGRlZmluZWQgaW4gcHljb25maWcuaC4gVGhlIGNvZGUgaW4gcHljb25maWcuaAorICogYWxzbyB0YWtlcyBjYXJlIG9mIEFwcGxlJ3MgdW5pdmVyc2FsIGJ1aWxkcy4KKyAqLworCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIFBZX0JJR19FTkRJQU4gMQorI2RlZmluZSBQWV9MSVRUTEVfRU5ESUFOIDAKKyNlbHNlCisjZGVmaW5lIFBZX0JJR19FTkRJQU4gMAorI2RlZmluZSBQWV9MSVRUTEVfRU5ESUFOIDEKKyNlbmRpZgorCiAjZW5kaWYgLyogUHlfUFlQT1JUX0ggKi8KZGlmZiAtLWdpdCBhL0luY2x1ZGUvcHlzdGF0ZS5oIGIvSW5jbHVkZS9weXN0YXRlLmgKaW5kZXggMjAxN2IwMi4uNDk5MmMyMiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXN0YXRlLmgKKysrIGIvSW5jbHVkZS9weXN0YXRlLmgKQEAgLTMzLDcgKzMzLDYgQEAKICAgICBpbnQgY29kZWNzX2luaXRpYWxpemVkOwogICAgIGludCBmc2NvZGVjX2luaXRpYWxpemVkOwogCi0KICNpZmRlZiBIQVZFX0RMT1BFTgogICAgIGludCBkbG9wZW5mbGFnczsKICNlbmRpZgpAQCAtNDEsNiArNDAsNyBAQAogICAgIGludCB0c2NkdW1wOwogI2VuZGlmCiAKKyAgICBQeU9iamVjdCAqYnVpbHRpbnNfY29weTsKIH0gUHlJbnRlcnByZXRlclN0YXRlOwogI2VuZGlmCiAKQEAgLTY5LDYgKzY5LDcgQEAKIHR5cGVkZWYgc3RydWN0IF90cyB7CiAgICAgLyogU2VlIFB5dGhvbi9jZXZhbC5jIGZvciBjb21tZW50cyBleHBsYWluaW5nIG1vc3QgZmllbGRzICovCiAKKyAgICBzdHJ1Y3QgX3RzICpwcmV2OwogICAgIHN0cnVjdCBfdHMgKm5leHQ7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CiAKQEAgLTk5LDE2ICsxMDAsNiBAQAogCiAgICAgUHlPYmplY3QgKmRpY3Q7ICAvKiBTdG9yZXMgcGVyLXRocmVhZCBzdGF0ZSAqLwogCi0gICAgLyogWFhYIGRvZXNuJ3QgbWVhbiBhbnl0aGluZyBhbnltb3JlICh0aGUgY29tbWVudCBiZWxvdyBpcyBvYnNvbGV0ZSkKLSAgICAgICA9PiBkZXByZWNhdGUgb3IgcmVtb3ZlPyAqLwotICAgIC8qIHRpY2tfY291bnRlciBpcyBpbmNyZW1lbnRlZCB3aGVuZXZlciB0aGUgY2hlY2tfaW50ZXJ2YWwgdGlja2VyCi0gICAgICogcmVhY2hlcyB6ZXJvLiBUaGUgcHVycG9zZSBpcyB0byBnaXZlIGEgdXNlZnVsIG1lYXN1cmUgb2YgdGhlIG51bWJlcgotICAgICAqIG9mIGludGVycHJldGVkIGJ5dGVjb2RlIGluc3RydWN0aW9ucyBpbiBhIGdpdmVuIHRocmVhZC4gIFRoaXMKLSAgICAgKiBleHRyZW1lbHkgbGlnaHR3ZWlnaHQgc3RhdGlzdGljIGNvbGxlY3RvciBtYXkgYmUgb2YgaW50ZXJlc3QgdG8KLSAgICAgKiBwcm9maWxlcnMgKGxpa2UgcHN5Y28uaml0KCkpLCBhbHRob3VnaCBub3RoaW5nIGluIHRoZSBjb3JlIHVzZXMgaXQuCi0gICAgICovCi0gICAgaW50IHRpY2tfY291bnRlcjsKLQogICAgIGludCBnaWxzdGF0ZV9jb3VudGVyOwogCiAgICAgUHlPYmplY3QgKmFzeW5jX2V4YzsgLyogQXN5bmNocm9ub3VzIGV4Y2VwdGlvbiB0byByYWlzZSAqLwpAQCAtMTE3LDYgKzEwOCwzMiBAQAogICAgIGludCB0cmFzaF9kZWxldGVfbmVzdGluZzsKICAgICBQeU9iamVjdCAqdHJhc2hfZGVsZXRlX2xhdGVyOwogCisgICAgLyogQ2FsbGVkIHdoZW4gYSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZCBub3JtYWxseSwgYnV0IG5vdCB3aGVuIGl0CisgICAgICogaXMgZGVzdHJveWVkIGFmdGVyIGZvcmsoKS4KKyAgICAgKiBQYWluOiAgdG8gcHJldmVudCByYXJlIGJ1dCBmYXRhbCBzaHV0ZG93biBlcnJvcnMgKGlzc3VlIDE4ODA4KSwKKyAgICAgKiBUaHJlYWQuam9pbigpIG11c3Qgd2FpdCBmb3IgdGhlIGpvaW4nZWQgdGhyZWFkJ3MgdHN0YXRlIHRvIGJlIHVubGlua2VkCisgICAgICogZnJvbSB0aGUgdHN0YXRlIGNoYWluLiAgVGhhdCBoYXBwZW5zIGF0IHRoZSBlbmQgb2YgYSB0aHJlYWQncyBsaWZlLAorICAgICAqIGluIHB5c3RhdGUuYy4KKyAgICAgKiBUaGUgb2J2aW91cyB3YXkgZG9lc24ndCBxdWl0ZSB3b3JrOiAgY3JlYXRlIGEgbG9jayB3aGljaCB0aGUgdHN0YXRlCisgICAgICogdW5saW5raW5nIGNvZGUgcmVsZWFzZXMsIGFuZCBoYXZlIFRocmVhZC5qb2luKCkgd2FpdCB0byBhY3F1aXJlIHRoYXQKKyAgICAgKiBsb2NrLiAgVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBfYXJlXyBhdCB0aGUgZW5kIG9mIHRoZSB0aHJlYWQncyBsaWZlOgorICAgICAqIGlmIHRoZSB0aHJlYWQgaG9sZHMgdGhlIGxhc3QgcmVmZXJlbmNlIHRvIHRoZSBsb2NrLCBkZWNyZWYnaW5nIHRoZQorICAgICAqIGxvY2sgd2lsbCBkZWxldGUgdGhlIGxvY2ssIGFuZCB0aGF0IG1heSB0cmlnZ2VyIGFyYml0cmFyeSBQeXRob24gY29kZQorICAgICAqIGlmIHRoZXJlJ3MgYSB3ZWFrcmVmLCB3aXRoIGEgY2FsbGJhY2ssIHRvIHRoZSBsb2NrLiAgQnV0IGJ5IHRoaXMgdGltZQorICAgICAqIF9QeVRocmVhZFN0YXRlX0N1cnJlbnQgaXMgYWxyZWFkeSBOVUxMLCBzbyBvbmx5IHRoZSBzaW1wbGVzdCBvZiBDIGNvZGUKKyAgICAgKiBjYW4gYmUgYWxsb3dlZCB0byBydW4gKGluIHBhcnRpY3VsYXIgaXQgbXVzdCBub3QgYmUgcG9zc2libGUgdG8KKyAgICAgKiByZWxlYXNlIHRoZSBHSUwpLgorICAgICAqIFNvIGluc3RlYWQgb2YgaG9sZGluZyB0aGUgbG9jayBkaXJlY3RseSwgdGhlIHRzdGF0ZSBob2xkcyBhIHdlYWtyZWYgdG8KKyAgICAgKiB0aGUgbG9jazogIHRoYXQncyB0aGUgdmFsdWUgb2Ygb25fZGVsZXRlX2RhdGEgYmVsb3cuICBEZWNyZWYnaW5nIGEKKyAgICAgKiB3ZWFrcmVmIGlzIGhhcm1sZXNzLgorICAgICAqIG9uX2RlbGV0ZSBwb2ludHMgdG8gX3RocmVhZG1vZHVsZS5jJ3Mgc3RhdGljIHJlbGVhc2Vfc2VudGluZWwoKSBmdW5jdGlvbi4KKyAgICAgKiBBZnRlciB0aGUgdHN0YXRlIGlzIHVubGlua2VkLCByZWxlYXNlX3NlbnRpbmVsIGlzIGNhbGxlZCB3aXRoIHRoZQorICAgICAqIHdlYWtyZWYtdG8tbG9jayAob25fZGVsZXRlX2RhdGEpIGFyZ3VtZW50LCBhbmQgcmVsZWFzZV9zZW50aW5lbCByZWxlYXNlcworICAgICAqIHRoZSBpbmRpcmVjdGx5IGhlbGQgbG9jay4KKyAgICAgKi8KKyAgICB2b2lkICgqb25fZGVsZXRlKSh2b2lkICopOworICAgIHZvaWQgKm9uX2RlbGV0ZV9kYXRhOworCiAgICAgLyogWFhYIHNpZ25hbCBoYW5kbGVycyBzaG91bGQgYWxzbyBiZSBoZXJlICovCiAKIH0gUHlUaHJlYWRTdGF0ZTsKQEAgLTEzMywxMiArMTUwLDE2IEBACiBQeUFQSV9GVU5DKGludCkgUHlTdGF0ZV9SZW1vdmVNb2R1bGUoc3RydWN0IFB5TW9kdWxlRGVmKik7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoUHlPYmplY3QqKSBQeVN0YXRlX0ZpbmRNb2R1bGUoc3RydWN0IFB5TW9kdWxlRGVmKik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHZvaWQpIF9QeVN0YXRlX0NsZWFyTW9kdWxlcyh2b2lkKTsKKyNlbmRpZgogCiBQeUFQSV9GVU5DKFB5VGhyZWFkU3RhdGUgKikgUHlUaHJlYWRTdGF0ZV9OZXcoUHlJbnRlcnByZXRlclN0YXRlICopOwogUHlBUElfRlVOQyhQeVRocmVhZFN0YXRlICopIF9QeVRocmVhZFN0YXRlX1ByZWFsbG9jKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5VGhyZWFkU3RhdGVfSW5pdChQeVRocmVhZFN0YXRlICopOwogUHlBUElfRlVOQyh2b2lkKSBQeVRocmVhZFN0YXRlX0NsZWFyKFB5VGhyZWFkU3RhdGUgKik7CiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfRGVsZXRlKFB5VGhyZWFkU3RhdGUgKik7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdChQeVRocmVhZFN0YXRlICp0c3RhdGUpOwogI2lmZGVmIFdJVEhfVEhSRUFECiBQeUFQSV9GVU5DKHZvaWQpIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5R0lMU3RhdGVfUmVpbml0KHZvaWQpOwpAQCAtMjEyLDYgKzIzMywxMyBAQAogKi8KIFB5QVBJX0ZVTkMoUHlUaHJlYWRTdGF0ZSAqKSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSh2b2lkKTsKIAorLyogSGVscGVyL2RpYWdub3N0aWMgZnVuY3Rpb24gLSByZXR1cm4gMSBpZiB0aGUgY3VycmVudCB0aHJlYWQKKyAqIGN1cnJlbnRseSBob2xkcyB0aGUgR0lMLCAwIG90aGVyd2lzZQorICovCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkgUHlHSUxTdGF0ZV9DaGVjayh2b2lkKTsKKyNlbmRpZgorCiAjZW5kaWYgICAvKiAjaWZkZWYgV0lUSF9USFJFQUQgKi8KIAogLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIHN5cy5fY3VycmVudF9mcmFtZXMoKSAgUmV0dXJucyBhIGRpY3QgbWFwcGluZwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXRob25ydW4uaCBiL0luY2x1ZGUvcHl0aG9ucnVuLmgKaW5kZXggZThhNTgyZC4uMmZjNTU3OCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXRob25ydW4uaAorKysgYi9JbmNsdWRlL3B5dGhvbnJ1bi5oCkBAIC0yOCw2ICsyOCwxNCBAQAogUHlBUElfRlVOQyh2b2lkKSBQeV9TZXRQeXRob25Ib21lKHdjaGFyX3QgKik7CiBQeUFQSV9GVU5DKHdjaGFyX3QgKikgUHlfR2V0UHl0aG9uSG9tZSh2b2lkKTsKIAorI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorLyogT25seSB1c2VkIGJ5IGFwcGxpY2F0aW9ucyB0aGF0IGVtYmVkIHRoZSBpbnRlcnByZXRlciBhbmQgbmVlZCB0bworICogb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGVuY29kaW5nIGRldGVybWluYXRpb24gbWVjaGFuaXNtCisgKi8KK1B5QVBJX0ZVTkMoaW50KSBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKTsKKyNlbmRpZgorCiBQeUFQSV9GVU5DKHZvaWQpIFB5X0luaXRpYWxpemUodm9pZCk7CiBQeUFQSV9GVU5DKHZvaWQpIFB5X0luaXRpYWxpemVFeChpbnQpOwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQpAQCAtNTUsNiArNjMsMTAgQEAKICAgICBGSUxFICpmcCwKICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgICAgICAgLyogZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgUHlDb21waWxlckZsYWdzICpmbGFncyk7CitQeUFQSV9GVU5DKGludCkgUHlSdW5fSW50ZXJhY3RpdmVPbmVPYmplY3QoCisgICAgRklMRSAqZnAsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpOwogUHlBUElfRlVOQyhpbnQpIFB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzKAogICAgIEZJTEUgKmZwLAogICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCAgICAgICAvKiBkZWNvZGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgKi8KQEAgLTY2LDYgKzc4LDEyIEBACiAgICAgaW50IHN0YXJ0LAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgUHlBcmVuYSAqYXJlbmEpOworUHlBUElfRlVOQyhzdHJ1Y3QgX21vZCAqKSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KAorICAgIGNvbnN0IGNoYXIgKnMsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBzdGFydCwKKyAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAorICAgIFB5QXJlbmEgKmFyZW5hKTsKIFB5QVBJX0ZVTkMoc3RydWN0IF9tb2QgKikgUHlQYXJzZXJfQVNURnJvbUZpbGUoCiAgICAgRklMRSAqZnAsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwpAQCAtNzYsNiArOTQsMTYgQEAKICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLAogICAgIGludCAqZXJyY29kZSwKICAgICBQeUFyZW5hICphcmVuYSk7CitQeUFQSV9GVU5DKHN0cnVjdCBfbW9kICopIFB5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KAorICAgIEZJTEUgKmZwLAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwKKyAgICBjb25zdCBjaGFyKiBlbmMsCisgICAgaW50IHN0YXJ0LAorICAgIGNoYXIgKnBzMSwKKyAgICBjaGFyICpwczIsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBpbnQgKmVycmNvZGUsCisgICAgUHlBcmVuYSAqYXJlbmEpOwogI2VuZGlmCiAKICNpZm5kZWYgUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmcKQEAgLTExNywxMSArMTQ1LDIyIEBACiAgICAgaW50IHN0YXJ0LAogICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCiAgICAgaW50IG9wdGltaXplKTsKK1B5QVBJX0ZVTkMoUHlPYmplY3QgKikgUHlfQ29tcGlsZVN0cmluZ09iamVjdCgKKyAgICBjb25zdCBjaGFyICpzdHIsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCisgICAgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICBpbnQgb3B0aW1pemUpOwogI2VuZGlmCiBQeUFQSV9GVU5DKHN0cnVjdCBzeW10YWJsZSAqKSBQeV9TeW10YWJsZVN0cmluZygKICAgICBjb25zdCBjaGFyICpzdHIsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIGludCBzdGFydCk7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHN0cnVjdCBzeW10YWJsZSAqKSBQeV9TeW10YWJsZVN0cmluZ09iamVjdCgKKyAgICBjb25zdCBjaGFyICpzdHIsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIGludCBzdGFydCk7CisjZW5kaWYKIAogUHlBUElfRlVOQyh2b2lkKSBQeUVycl9QcmludCh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlFcnJfUHJpbnRFeChpbnQpOwpAQCAtMTk3LDcgKzIzNiw3IEBACiBQeUFQSV9GVU5DKHZvaWQpIF9QeUV4Y19Jbml0KFB5T2JqZWN0ICogYmx0aW5tb2QpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlJbXBvcnRIb29rc19Jbml0KHZvaWQpOwogUHlBUElfRlVOQyhpbnQpIF9QeUZyYW1lX0luaXQodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeUZsb2F0X0luaXQodm9pZCk7CitQeUFQSV9GVU5DKGludCkgX1B5RmxvYXRfSW5pdCh2b2lkKTsKIFB5QVBJX0ZVTkMoaW50KSBQeUJ5dGVBcnJheV9Jbml0KHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlSYW5kb21fSW5pdCh2b2lkKTsKICNlbmRpZgpAQCAtMjE3LDE5ICsyNTYsMjEgQEAKIFB5QVBJX0ZVTkModm9pZCkgUHlCeXRlQXJyYXlfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlGbG9hdF9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBQeU9TX0ZpbmlJbnRlcnJ1cHRzKHZvaWQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlHQ19EdW1wU2h1dGRvd25TdGF0cyh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgX1B5R0NfRmluaSh2b2lkKTsKIFB5QVBJX0ZVTkModm9pZCkgUHlTbGljZV9GaW5pKHZvaWQpOwogUHlBUElfRlVOQyh2b2lkKSBfUHlUeXBlX0Zpbmkodm9pZCk7CitQeUFQSV9GVU5DKHZvaWQpIF9QeVJhbmRvbV9GaW5pKHZvaWQpOwogCiBQeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUgKikgX1B5X0ZpbmFsaXppbmc7CiAjZW5kaWYKIAogLyogU3R1ZmYgd2l0aCBubyBwcm9wZXIgaG9tZSAoeWV0KSAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQotUHlBUElfRlVOQyhjaGFyICopIFB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitQeUFQSV9GVU5DKGNoYXIgKikgUHlPU19SZWFkbGluZShGSUxFICosIEZJTEUgKiwgY29uc3QgY2hhciAqKTsKICNlbmRpZgogUHlBUElfREFUQShpbnQpICgqUHlPU19JbnB1dEhvb2spKHZvaWQpOwotUHlBUElfREFUQShjaGFyKSAqKCpQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyKShGSUxFICosIEZJTEUgKiwgY2hhciAqKTsKK1B5QVBJX0RBVEEoY2hhcikgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9EQVRBKFB5VGhyZWFkU3RhdGUqKSBfUHlPU19SZWFkbGluZVRTdGF0ZTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9weXRpbWUuaCBiL0luY2x1ZGUvcHl0aW1lLmgKaW5kZXggNTI5MDJmNS4uYjBmYzZkMCAxMDA2NDQKLS0tIGEvSW5jbHVkZS9weXRpbWUuaAorKysgYi9JbmNsdWRlL3B5dGltZS5oCkBAIC01MywxMCArNTMsMTkgQEAKICAgICAgKHR2X2VuZC50dl91c2VjIC0gdHZfc3RhcnQudHZfdXNlYykgKiAwLjAwMDAwMSkKIAogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorCit0eXBlZGVmIGVudW0geworICAgIC8qIFJvdW5kIHRvd2FyZHMgemVyby4gKi8KKyAgICBfUHlUaW1lX1JPVU5EX0RPV049MCwKKyAgICAvKiBSb3VuZCBhd2F5IGZyb20gemVyby4gKi8KKyAgICBfUHlUaW1lX1JPVU5EX1VQCit9IF9QeVRpbWVfcm91bmRfdDsKKwogLyogQ29udmVydCBhIG51bWJlciBvZiBzZWNvbmRzLCBpbnQgb3IgZmxvYXQsIHRvIHRpbWVfdC4gKi8KIFB5QVBJX0ZVTkMoaW50KSBfUHlUaW1lX09iamVjdFRvVGltZV90KAogICAgIFB5T2JqZWN0ICpvYmosCi0gICAgdGltZV90ICpzZWMpOworICAgIHRpbWVfdCAqc2VjLAorICAgIF9QeVRpbWVfcm91bmRfdCk7CiAKIC8qIENvbnZlcnQgYSB0aW1lX3QgdG8gYSBQeUxvbmcuICovCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIF9QeUxvbmdfRnJvbVRpbWVfdCgKQEAgLTcyLDcgKzgxLDggQEAKIFB5QVBJX0ZVTkMoaW50KSBfUHlUaW1lX09iamVjdFRvVGltZXZhbCgKICAgICBQeU9iamVjdCAqb2JqLAogICAgIHRpbWVfdCAqc2VjLAotICAgIGxvbmcgKnVzZWMpOworICAgIGxvbmcgKnVzZWMsCisgICAgX1B5VGltZV9yb3VuZF90KTsKIAogLyogQ29udmVydCBhIG51bWJlciBvZiBzZWNvbmRzLCBpbnQgb3IgZmxvYXQsIHRvIGEgdGltZXNwZWMgc3RydWN0dXJlLgogICAgbnNlYyBpcyBpbiB0aGUgcmFuZ2UgWzA7IDk5OTk5OTk5OV0gYW5kIHJvdW5kZWQgdG93YXJkcyB6ZXJvLgpAQCAtODAsNyArOTAsOCBAQAogUHlBUElfRlVOQyhpbnQpIF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYygKICAgICBQeU9iamVjdCAqb2JqLAogICAgIHRpbWVfdCAqc2VjLAotICAgIGxvbmcgKm5zZWMpOworICAgIGxvbmcgKm5zZWMsCisgICAgX1B5VGltZV9yb3VuZF90KTsKICNlbmRpZgogCiAvKiBEdW1teSB0byBmb3JjZSBsaW5raW5nLiAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zZXRvYmplY3QuaCBiL0luY2x1ZGUvc2V0b2JqZWN0LmgKaW5kZXggYTE0ODc0Yi4uYWUzZjU1NiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zZXRvYmplY3QuaAorKysgYi9JbmNsdWRlL3NldG9iamVjdC5oCkBAIC0yMyw4ICsyMyw4IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICAvKiBDYWNoZWQgaGFzaCBjb2RlIG9mIHRoZSBrZXkuICovCi0gICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlPYmplY3QgKmtleTsKKyAgICBQeV9oYXNoX3QgaGFzaDsKIH0gc2V0ZW50cnk7CiAKIApAQCAtNTEsOSArNTEsOSBAQAogICAgICAqLwogICAgIHNldGVudHJ5ICp0YWJsZTsKICAgICBzZXRlbnRyeSAqKCpsb29rdXApKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpOworICAgIFB5X2hhc2hfdCBoYXNoOyAgICAgICAgICAgICAvKiBvbmx5IHVzZWQgYnkgZnJvemVuc2V0IG9iamVjdHMgKi8KICAgICBzZXRlbnRyeSBzbWFsbHRhYmxlW1B5U2V0X01JTlNJWkVdOwogCi0gICAgUHlfaGFzaF90IGhhc2g7ICAgICAgICAgICAgICAgICAgLyogb25seSB1c2VkIGJ5IGZyb3plbnNldCBvYmplY3RzICovCiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OyAgICAgIC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCiB9OwogI2VuZGlmIC8qIFB5X0xJTUlURURfQVBJICovCkBAIC02MSw2ICs2MSwxMCBAQAogUHlBUElfREFUQShQeVR5cGVPYmplY3QpIFB5U2V0X1R5cGU7CiBQeUFQSV9EQVRBKFB5VHlwZU9iamVjdCkgUHlGcm96ZW5TZXRfVHlwZTsKIFB5QVBJX0RBVEEoUHlUeXBlT2JqZWN0KSBQeVNldEl0ZXJfVHlwZTsKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0RBVEEoUHlPYmplY3QgKikgX1B5U2V0X0R1bW15OworI2VuZGlmCisKIAogLyogSW52YXJpYW50cyBmb3IgZnJvemVuc2V0czoKICAqICAgICBkYXRhIGlzIGltbXV0YWJsZS4KQEAgLTEwMSw3ICsxMDUsNiBAQAogUHlBUElfRlVOQyhpbnQpIF9QeVNldF9VcGRhdGUoUHlPYmplY3QgKnNldCwgUHlPYmplY3QgKml0ZXJhYmxlKTsKIAogUHlBUElfRlVOQyhpbnQpIFB5U2V0X0NsZWFyRnJlZUxpc3Qodm9pZCk7Ci1QeUFQSV9GVU5DKHZvaWQpIF9QeVNldF9EZWJ1Z01hbGxvY1N0YXRzKEZJTEUgKm91dCk7CiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9JbmNsdWRlL3NsaWNlb2JqZWN0LmggYi9JbmNsdWRlL3NsaWNlb2JqZWN0LmgKaW5kZXggOGJlYzE3OS4uZjdlZTkwYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zbGljZW9iamVjdC5oCisrKyBiL0luY2x1ZGUvc2xpY2VvYmplY3QuaApAQCAtMzQsNiArMzQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0KiBzdGVwKTsKICNpZm5kZWYgUHlfTElNSVRFRF9BUEkKIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikgX1B5U2xpY2VfRnJvbUluZGljZXMoUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBzdG9wKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhQeVNsaWNlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydF9wdHIsIFB5T2JqZWN0ICoqc3RvcF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0ZXBfcHRyKTsKICNlbmRpZgogUHlBUElfRlVOQyhpbnQpIFB5U2xpY2VfR2V0SW5kaWNlcyhQeU9iamVjdCAqciwgUHlfc3NpemVfdCBsZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqc3RhcnQsIFB5X3NzaXplX3QgKnN0b3AsIFB5X3NzaXplX3QgKnN0ZXApOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zdHJ1Y3RzZXEuaCBiL0luY2x1ZGUvc3RydWN0c2VxLmgKaW5kZXggMzBjNTJhYy4uYWYyMjcxNiAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zdHJ1Y3RzZXEuaAorKysgYi9JbmNsdWRlL3N0cnVjdHNlcS5oCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKHZvaWQpIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CitQeUFQSV9GVU5DKGludCkgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoUHlUeXBlT2JqZWN0ICp0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CiAjZW5kaWYKIFB5QVBJX0ZVTkMoUHlUeXBlT2JqZWN0KikgUHlTdHJ1Y3RTZXF1ZW5jZV9OZXdUeXBlKFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYyk7CiAKZGlmZiAtLWdpdCBhL0luY2x1ZGUvc3ltdGFibGUuaCBiL0luY2x1ZGUvc3ltdGFibGUuaAppbmRleCA2ZWQzYTJiLi4xY2ZkODg0IDEwMDY0NAotLS0gYS9JbmNsdWRlL3N5bXRhYmxlLmgKKysrIGIvSW5jbHVkZS9zeW10YWJsZS5oCkBAIC0xNiw3ICsxNiw3IEBACiBzdHJ1Y3QgX3N5bXRhYmxlX2VudHJ5OwogCiBzdHJ1Y3Qgc3ltdGFibGUgewotICAgIGNvbnN0IGNoYXIgKnN0X2ZpbGVuYW1lOyAgICAgICAgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGNvbXBpbGVkLAorICAgIFB5T2JqZWN0ICpzdF9maWxlbmFtZTsgICAgICAgICAgLyogbmFtZSBvZiBmaWxlIGJlaW5nIGNvbXBpbGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCBmcm9tIHRoZSBmaWxlc3lzdGVtIGVuY29kaW5nICovCiAgICAgc3RydWN0IF9zeW10YWJsZV9lbnRyeSAqc3RfY3VyOyAvKiBjdXJyZW50IHN5bWJvbCB0YWJsZSBlbnRyeSAqLwogICAgIHN0cnVjdCBfc3ltdGFibGVfZW50cnkgKnN0X3RvcDsgLyogc3ltYm9sIHRhYmxlIGVudHJ5IGZvciBtb2R1bGUgKi8KQEAgLTQxLDYgKzQxLDcgQEAKICAgICBQeU9iamVjdCAqc3RlX25hbWU7ICAgICAgLyogc3RyaW5nOiBuYW1lIG9mIGN1cnJlbnQgYmxvY2sgKi8KICAgICBQeU9iamVjdCAqc3RlX3Zhcm5hbWVzOyAgLyogbGlzdCBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzICovCiAgICAgUHlPYmplY3QgKnN0ZV9jaGlsZHJlbjsgIC8qIGxpc3Qgb2YgY2hpbGQgYmxvY2tzICovCisgICAgUHlPYmplY3QgKnN0ZV9kaXJlY3RpdmVzOy8qIGxvY2F0aW9ucyBvZiBnbG9iYWwgYW5kIG5vbmxvY2FsIHN0YXRlbWVudHMgKi8KICAgICBfUHlfYmxvY2tfdHkgc3RlX3R5cGU7ICAgLyogbW9kdWxlLCBjbGFzcywgb3IgZnVuY3Rpb24gKi8KICAgICBpbnQgc3RlX3Vub3B0aW1pemVkOyAgICAgLyogZmFsc2UgaWYgbmFtZXNwYWNlIGlzIG9wdGltaXplZCAqLwogICAgIGludCBzdGVfbmVzdGVkOyAgICAgIC8qIHRydWUgaWYgYmxvY2sgaXMgbmVzdGVkICovCkBAIC01Miw2ICs1Myw5IEBACiAgICAgdW5zaWduZWQgc3RlX3ZhcmtleXdvcmRzIDogMTsgLyogdHJ1ZSBpZiBibG9jayBoYXMgdmFya2V5d29yZHMgKi8KICAgICB1bnNpZ25lZCBzdGVfcmV0dXJuc192YWx1ZSA6IDE7ICAvKiB0cnVlIGlmIG5hbWVzcGFjZSB1c2VzIHJldHVybiB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXJndW1lbnQgKi8KKyAgICB1bnNpZ25lZCBzdGVfbmVlZHNfY2xhc3NfY2xvc3VyZSA6IDE7IC8qIGZvciBjbGFzcyBzY29wZXMsIHRydWUgaWYgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc3VyZSBvdmVyIF9fY2xhc3NfXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIGNyZWF0ZWQgKi8KICAgICBpbnQgc3RlX2xpbmVubzsgICAgICAgICAgLyogZmlyc3QgbGluZSBvZiBibG9jayAqLwogICAgIGludCBzdGVfY29sX29mZnNldDsgICAgICAvKiBvZmZzZXQgb2YgZmlyc3QgbGluZSBvZiBibG9jayAqLwogICAgIGludCBzdGVfb3B0X2xpbmVubzsgICAgICAvKiBsaW5lbm8gb2YgbGFzdCBleGVjIG9yIGltcG9ydCAqICovCkBAIC03MCw2ICs3NCwxMCBAQAogICAgIG1vZF90eSBtb2QsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsICAgICAgIC8qIGRlY29kZWQgZnJvbSB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyAqLwogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSk7CitQeUFQSV9GVU5DKHN0cnVjdCBzeW10YWJsZSAqKSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KAorICAgIG1vZF90eSBtb2QsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSk7CiBQeUFQSV9GVU5DKFB5U1RFbnRyeU9iamVjdCAqKSBQeVN5bXRhYmxlX0xvb2t1cChzdHJ1Y3Qgc3ltdGFibGUgKiwgdm9pZCAqKTsKIAogUHlBUElfRlVOQyh2b2lkKSBQeVN5bXRhYmxlX0ZyZWUoc3RydWN0IHN5bXRhYmxlICopOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS9zeXNtb2R1bGUuaCBiL0luY2x1ZGUvc3lzbW9kdWxlLmgKaW5kZXggMGNhYmY2Zi4uY2RlMTBhYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS9zeXNtb2R1bGUuaAorKysgYi9JbmNsdWRlL3N5c21vZHVsZS5oCkBAIC04LDcgKzgsMTIgQEAKICNlbmRpZgogCiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3lzX0dldE9iamVjdChjb25zdCBjaGFyICopOworI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQorUHlBUElfRlVOQyhQeU9iamVjdCAqKSBfUHlTeXNfR2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSk7CisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeVN5c19TZXRPYmplY3QoY29uc3QgY2hhciAqLCBQeU9iamVjdCAqKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlTeXNfU2V0T2JqZWN0SWQoX1B5X0lkZW50aWZpZXIgKmtleSwgUHlPYmplY3QgKik7CisKIFB5QVBJX0ZVTkModm9pZCkgUHlTeXNfU2V0QXJndihpbnQsIHdjaGFyX3QgKiopOwogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19TZXRBcmd2RXgoaW50LCB3Y2hhcl90ICoqLCBpbnQpOwogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19TZXRQYXRoKGNvbnN0IHdjaGFyX3QgKik7CkBAIC0yOCw2ICszMywxMCBAQAogUHlBUElfRlVOQyh2b2lkKSBQeVN5c19BZGRYT3B0aW9uKGNvbnN0IHdjaGFyX3QgKik7CiBQeUFQSV9GVU5DKFB5T2JqZWN0ICopIFB5U3lzX0dldFhPcHRpb25zKHZvaWQpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKHNpemVfdCkgX1B5U3lzX0dldFNpemVPZihQeU9iamVjdCAqKTsKKyNlbmRpZgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvSW5jbHVkZS90b2tlbi5oIGIvSW5jbHVkZS90b2tlbi5oCmluZGV4IGY3ZjY1MDQuLjkwNTAyMmIgMTAwNjQ0Ci0tLSBhL0luY2x1ZGUvdG9rZW4uaAorKysgYi9JbmNsdWRlL3Rva2VuLmgKQEAgLTc1LDcgKzc1LDcgQEAKICNkZWZpbmUgSVNFT0YoeCkJCSgoeCkgPT0gRU5ETUFSS0VSKQogCiAKLVB5QVBJX0RBVEEoY2hhciAqKSBfUHlQYXJzZXJfVG9rZW5OYW1lc1tdOyAvKiBUb2tlbiBuYW1lcyAqLworUHlBUElfREFUQShjb25zdCBjaGFyICopIF9QeVBhcnNlcl9Ub2tlbk5hbWVzW107IC8qIFRva2VuIG5hbWVzICovCiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9PbmVDaGFyKGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9Ud29DaGFycyhpbnQsIGludCk7CiBQeUFQSV9GVU5DKGludCkgUHlUb2tlbl9UaHJlZUNoYXJzKGludCwgaW50LCBpbnQpOwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS90cmFjZWJhY2suaCBiL0luY2x1ZGUvdHJhY2ViYWNrLmgKaW5kZXggNzczNDcwNy4uODkxMDAwYyAxMDA2NDQKLS0tIGEvSW5jbHVkZS90cmFjZWJhY2suaAorKysgYi9JbmNsdWRlL3RyYWNlYmFjay5oCkBAIC0yNCw2ICsyNCw3IEBACiBQeUFQSV9GVU5DKGludCkgUHlUcmFjZUJhY2tfUHJpbnQoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiAjaWZuZGVmIFB5X0xJTUlURURfQVBJCiBQeUFQSV9GVU5DKGludCkgX1B5X0Rpc3BsYXlTb3VyY2VMaW5lKFB5T2JqZWN0ICosIFB5T2JqZWN0ICosIGludCwgaW50KTsKK1B5QVBJX0ZVTkModm9pZCkgX1B5VHJhY2ViYWNrX0FkZChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKICNlbmRpZgogCiAvKiBSZXZlYWwgdHJhY2ViYWNrIHR5cGUgc28gd2UgY2FuIHR5cGVjaGVjayB0cmFjZWJhY2sgb2JqZWN0cyAqLwpkaWZmIC0tZ2l0IGEvSW5jbHVkZS91bmljb2Rlb2JqZWN0LmggYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAppbmRleCBhOGY1YjVkLi5mMTlkOWJmIDEwMDY0NAotLS0gYS9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaAorKysgYi9JbmNsdWRlL3VuaWNvZGVvYmplY3QuaApAQCAtMTgwLDkgKzE4MCw5IEBACiAgICAgfSB3aGlsZSAoMCkKIAogLyogbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzICovCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IGNoICYmIGNoIDw9IDB4REZGRikKLSNkZWZpbmUgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURShjaCkgKDB4RDgwMCA8PSBjaCAmJiBjaCA8PSAweERCRkYpCi0jZGVmaW5lIFB5X1VOSUNPREVfSVNfTE9XX1NVUlJPR0FURShjaCkgKDB4REMwMCA8PSBjaCAmJiBjaCA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSAoMHhEODAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCisjZGVmaW5lIFB5X1VOSUNPREVfSVNfSElHSF9TVVJST0dBVEUoY2gpICgweEQ4MDAgPD0gKGNoKSAmJiAoY2gpIDw9IDB4REJGRikKKyNkZWZpbmUgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFKGNoKSAoMHhEQzAwIDw9IChjaCkgJiYgKGNoKSA8PSAweERGRkYpCiAvKiBKb2luIHR3byBzdXJyb2dhdGUgY2hhcmFjdGVycyBhbmQgcmV0dXJuIGEgc2luZ2xlIFB5X1VDUzQgdmFsdWUuICovCiAjZGVmaW5lIFB5X1VOSUNPREVfSk9JTl9TVVJST0dBVEVTKGhpZ2gsIGxvdykgIFwKICAgICAoKCgoKFB5X1VDUzQpKGhpZ2gpICYgMHgwM0ZGKSA8PCAxMCkgfCAgICAgIFwKQEAgLTM0Myw2ICszNDMsOSBAQAogICAgICAgICAgICB0aGUgZGF0YSBwb2ludGVyIGlzIGZpbGxlZCBvdXQuIFRoZSBiaXQgaXMgcmVkdW5kYW50LCBhbmQgaGVscHMKICAgICAgICAgICAgdG8gbWluaW1pemUgdGhlIHRlc3QgaW4gUHlVbmljb2RlX0lTX1JFQURZKCkuICovCiAgICAgICAgIHVuc2lnbmVkIGludCByZWFkeToxOworICAgICAgICAvKiBQYWRkaW5nIHRvIGVuc3VyZSB0aGF0IFB5VW5pY29kZV9EQVRBKCkgaXMgYWx3YXlzIGFsaWduZWQgdG8KKyAgICAgICAgICAgNCBieXRlcyAoc2VlIGlzc3VlICMxOTUzNyBvbiBtNjhrKS4gKi8KKyAgICAgICAgdW5zaWduZWQgaW50IDoyNDsKICAgICB9IHN0YXRlOwogICAgIHdjaGFyX3QgKndzdHI7ICAgICAgICAgICAgICAvKiB3Y2hhcl90IHJlcHJlc2VudGF0aW9uIChudWxsLXRlcm1pbmF0ZWQpICovCiB9IFB5QVNDSUlPYmplY3Q7CkBAIC02MDIsNyArNjA1LDcgQEAKICAgICApOwogI2VuZGlmCiAKLS8qIEluaXRpYWxpemVzIHRoZSBjYW5vbmljYWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGZyb20gYSB0aGUgZGVwcmVjYXRlZAorLyogSW5pdGlhbGl6ZXMgdGhlIGNhbm9uaWNhbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgZGVwcmVjYXRlZAogICAgd3N0ci9QeV9VTklDT0RFIHJlcHJlc2VudGF0aW9uLiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29udmVydCBVbmljb2RlCiAgICBvYmplY3RzIHdoaWNoIHdlcmUgY3JlYXRlZCB1c2luZyB0aGUgb2xkIEFQSSB0byB0aGUgbmV3IGZsZXhpYmxlIGZvcm1hdAogICAgaW50cm9kdWNlZCB3aXRoIFBFUCAzOTMuCkBAIC04NDYsNyArODQ5LDcgQEAKIAogICAgQ29lcmNpb24gaXMgZG9uZSBpbiB0aGUgZm9sbG93aW5nIHdheToKIAotICAgMS4gYnl0ZXMsIGJ5dGVhcnJheSBhbmQgb3RoZXIgY2hhciBidWZmZXIgY29tcGF0aWJsZSBvYmplY3RzIGFyZSBkZWNvZGVkCisgICAxLiBieXRlcywgYnl0ZWFycmF5IGFuZCBvdGhlciBieXRlcy1saWtlIG9iamVjdHMgYXJlIGRlY29kZWQKICAgICAgIHVuZGVyIHRoZSBhc3N1bXB0aW9ucyB0aGF0IHRoZXkgY29udGFpbiBkYXRhIHVzaW5nIHRoZSBVVEYtOAogICAgICAgZW5jb2RpbmcuIERlY29kaW5nIGlzIGRvbmUgaW4gInN0cmljdCIgbW9kZS4KIApAQCAtODU5LDcgKzg2Miw3IEBACiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqLCAgICAgICAgICAgICAgLyogT2JqZWN0ICovCiAgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsICAgICAgIC8qIGVuY29kaW5nICovCiAgICAgY29uc3QgY2hhciAqZXJyb3JzICAgICAgICAgIC8qIGVycm9yIGhhbmRsaW5nICovCiAgICAgKTsKQEAgLTg3OCw3ICs4ODEsNyBAQAogKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9Gcm9tT2JqZWN0KAotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmogICAgICAvKiBPYmplY3QgKi8KKyAgICBQeU9iamVjdCAqb2JqICAgICAgLyogT2JqZWN0ICovCiAgICAgKTsKIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoCkBAIC04OTgsMjIgKzkwMSwyOCBAQAogICAgIFB5X1VDUzQgbWF4Y2hhcjsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlfc3NpemVfdCBwb3M7Ci0gICAgLyogbWluaW11bSBsZW5ndGggb2YgdGhlIGJ1ZmZlciB3aGVuIG92ZXJhbGxvY2F0aW9uIGlzIGVuYWJsZWQsCi0gICAgICAgc2VlIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgpICovCisKKyAgICAvKiBtaW5pbXVtIG51bWJlciBvZiBhbGxvY2F0ZWQgY2hhcmFjdGVycyAoZGVmYXVsdDogMCkgKi8KICAgICBQeV9zc2l6ZV90IG1pbl9sZW5ndGg7CisKKyAgICAvKiBtaW5pbXVtIGNoYXJhY3RlciAoZGVmYXVsdDogMTI3LCBBU0NJSSkgKi8KKyAgICBQeV9VQ1M0IG1pbl9jaGFyOworCisgICAgLyogSWYgbm9uLXplcm8sIG92ZXJhbGxvY2F0ZSB0aGUgYnVmZmVyIGJ5IDI1JSAoZGVmYXVsdDogMCkuICovCiAgICAgdW5zaWduZWQgY2hhciBvdmVyYWxsb2NhdGU7CisKICAgICAvKiBJZiByZWFkb25seSBpcyAxLCBidWZmZXIgaXMgYSBzaGFyZWQgc3RyaW5nIChjYW5ub3QgYmUgbW9kaWZpZWQpCiAgICAgICAgYW5kIHNpemUgaXMgc2V0IHRvIDAuICovCiAgICAgdW5zaWduZWQgY2hhciByZWFkb25seTsKIH0gX1B5VW5pY29kZVdyaXRlciA7CiAKIC8qIEluaXRpYWxpemUgYSBVbmljb2RlIHdyaXRlci4KLQotICAgSWYgbWluX2xlbmd0aCBpcyBncmVhdGVyIHRoYW4gemVybywgX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCkKLSAgIG92ZXJhbGxvY2F0ZXMgdGhlIGJ1ZmZlciBhbmQgbWluX2xlbmd0aCBpcyB0aGUgbWluaW11bSBsZW5ndGggaW4gY2hhcmFjdGVycwotICAgb2YgdGhlIGJ1ZmZlci4gKi8KKyAqCisgKiBCeSBkZWZhdWx0LCB0aGUgbWluaW11bSBidWZmZXIgc2l6ZSBpcyAwIGNoYXJhY3RlciBhbmQgb3ZlcmFsbG9jYXRpb24gaXMKKyAqIGRpc2FibGVkLiBTZXQgbWluX2xlbmd0aCwgbWluX2NoYXIgYW5kIG92ZXJhbGxvY2F0ZSBhdHRyaWJ1dGVzIHRvIGNvbnRyb2wKKyAqIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBidWZmZXIuICovCiBQeUFQSV9GVU5DKHZvaWQpCi1fUHlVbmljb2RlV3JpdGVyX0luaXQoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeV9zc2l6ZV90IG1pbl9sZW5ndGgpOworX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAKIC8qIFByZXBhcmUgdGhlIGJ1ZmZlciB0byB3cml0ZSAnbGVuZ3RoJyBjaGFyYWN0ZXJzCiAgICB3aXRoIHRoZSBzcGVjaWZpZWQgbWF4aW11bSBjaGFyYWN0ZXIuCkBAIC05MzMsMTIgKzk0Miw1MiBAQAogX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlSW50ZXJuYWwoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW5ndGgsIFB5X1VDUzQgbWF4Y2hhcik7CiAKKy8qIEFwcGVuZCBhIFVuaWNvZGUgY2hhcmFjdGVyLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCiBQeUFQSV9GVU5DKGludCkKLV9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyKTsKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICBQeV9VQ1M0IGNoCisgICAgKTsKIAorLyogQXBwZW5kIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciAgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgKTsKKworLyogQXBwZW5kIGEgc3Vic3RyaW5nIG9mIGEgVW5pY29kZSBzdHJpbmcuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KK1B5QVBJX0ZVTkMoaW50KQorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgUHlPYmplY3QgKnN0ciwgICAgICAgICAgICAgIC8qIFVuaWNvZGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBzdGFydCwKKyAgICBQeV9zc2l6ZV90IGVuZAorICAgICk7CisKKy8qIEFwcGVuZCBhbiBBU0NJSS1lbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgY29uc3QgY2hhciAqc3RyLCAgICAgICAgICAgLyogQVNDSUktZW5jb2RlZCBieXRlIHN0cmluZyAqLworICAgIFB5X3NzaXplX3QgbGVuICAgICAgICAgICAgIC8qIG51bWJlciBvZiBieXRlcywgb3IgLTEgaWYgdW5rbm93biAqLworICAgICk7CisKKy8qIEFwcGVuZCBhIGxhdGluMS1lbmNvZGVkIGJ5dGUgc3RyaW5nLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitQeUFQSV9GVU5DKGludCkKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVMYXRpbjFTdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAorICAgIGNvbnN0IGNoYXIgKnN0ciwgICAgICAgICAgIC8qIGxhdGluMS1lbmNvZGVkIGJ5dGUgc3RyaW5nICovCisgICAgUHlfc3NpemVfdCBsZW4gICAgICAgICAgICAgLyogbGVuZ3RoIGluIGJ5dGVzICovCisgICAgKTsKKworLyogR2V0IHRoZSB2YWx1ZSBvZiB0aGUgd3JpdGVyIGFzIGFuIFVuaWNvZGUgc3RyaW5nLiBDbGVhciB0aGUKKyAgIGJ1ZmZlciBvZiB0aGUgd3JpdGVyLiBSYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiBOVUxMCisgICBvbiBlcnJvci4gKi8KIFB5QVBJX0ZVTkMoUHlPYmplY3QgKikKIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiAKKy8qIERlYWxsb2NhdGUgbWVtb3J5IG9mIGEgd3JpdGVyIChjbGVhciBpdHMgaW50ZXJuYWwgYnVmZmVyKS4gKi8KIFB5QVBJX0ZVTkModm9pZCkKIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpOwogI2VuZGlmCkBAIC05NzcsNyArMTAyNiw3IEBACiAgICBUaGUgYnVmZmVyIGlzIGNvcGllZCBpbnRvIHRoZSBuZXcgb2JqZWN0LiAqLwogCiBQeUFQSV9GVU5DKFB5T2JqZWN0KikgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcigKLSAgICByZWdpc3RlciBjb25zdCB3Y2hhcl90ICp3LCAgLyogd2NoYXJfdCBidWZmZXIgKi8KKyAgICBjb25zdCB3Y2hhcl90ICp3LCAgICAgICAgICAgLyogd2NoYXJfdCBidWZmZXIgKi8KICAgICBQeV9zc2l6ZV90IHNpemUgICAgICAgICAgICAgLyogc2l6ZSBvZiBidWZmZXIgKi8KICAgICApOwogCkBAIC05OTUsNyArMTA0NCw3IEBACiAKIFB5QVBJX0ZVTkMoUHlfc3NpemVfdCkgUHlVbmljb2RlX0FzV2lkZUNoYXIoCiAgICAgUHlPYmplY3QgKnVuaWNvZGUsICAgICAgICAgIC8qIFVuaWNvZGUgb2JqZWN0ICovCi0gICAgcmVnaXN0ZXIgd2NoYXJfdCAqdywgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCisgICAgd2NoYXJfdCAqdywgICAgICAgICAgICAgICAgIC8qIHdjaGFyX3QgYnVmZmVyICovCiAgICAgUHlfc3NpemVfdCBzaXplICAgICAgICAgICAgIC8qIHNpemUgb2YgYnVmZmVyICovCiAgICAgKTsKIApAQCAtMTAwMyw3ICsxMDUyLDcgQEAKICAgIGFsd2F5cyBlbmRzIHdpdGggYSBudWwgY2hhcmFjdGVyLiBJZiBzaXplIGlzIG5vdCBOVUxMLCB3cml0ZSB0aGUgbnVtYmVyIG9mCiAgICB3aWRlIGNoYXJhY3RlcnMgKGV4Y2x1ZGluZyB0aGUgbnVsbCBjaGFyYWN0ZXIpIGludG8gKnNpemUuCiAKLSAgIFJldHVybnMgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IFB5TWVtX0FsbG9jKCkgKHVzZSBQeU1lbV9GcmVlKCkgdG8gZnJlZSBpdCkKKyAgIFJldHVybnMgYSBidWZmZXIgYWxsb2NhdGVkIGJ5IFB5TWVtX01hbGxvYygpICh1c2UgUHlNZW1fRnJlZSgpIHRvIGZyZWUgaXQpCiAgICBvbiBzdWNjZXNzLiBPbiBlcnJvciwgcmV0dXJucyBOVUxMLCAqc2l6ZSBpcyB1bmRlZmluZWQgYW5kIHJhaXNlcyBhCiAgICBNZW1vcnlFcnJvci4gKi8KIApAQCAtMTcyNiw3ICsxNzc1LDcgQEAKIC8qIEVuY29kZSBhIFVuaWNvZGUgb2JqZWN0IHRvIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZy4gVGhlIGVuY29kZXIgaXMKICAgIHN0cmljdCBpcyAqc3Vycm9nYXRlZXNjYXBlKiBpcyBlcXVhbCB0byB6ZXJvLCBvdGhlcndpc2UgdGhlCiAgICAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyIGlzIHVzZWQuIFJldHVybiBhIGJ5dGVzIG9iamVjdC4gVGhlIHN0cmluZwotICAgY2Fubm90IGNvbnRhaW4gZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXJzLi4gKi8KKyAgIGNhbm5vdCBjb250YWluIGVtYmVkZGVkIG51bGwgY2hhcmFjdGVycy4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCopIFB5VW5pY29kZV9FbmNvZGVMb2NhbGUoCiAgICAgUHlPYmplY3QgKnVuaWNvZGUsCkBAIC0xOTUwLDEzICsxOTk5LDIxIEBACiAgICAgKTsKIAogLyogQ29tcGFyZSB0d28gc3RyaW5ncyBhbmQgcmV0dXJuIC0xLCAwLCAxIGZvciBsZXNzIHRoYW4sIGVxdWFsLAotICAgZ3JlYXRlciB0aGFuIHJlc3AuICovCisgICBncmVhdGVyIHRoYW4gcmVzcC4KKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogCiBQeUFQSV9GVU5DKGludCkgUHlVbmljb2RlX0NvbXBhcmUoCiAgICAgUHlPYmplY3QgKmxlZnQsICAgICAgICAgICAgIC8qIExlZnQgc3RyaW5nICovCiAgICAgUHlPYmplY3QgKnJpZ2h0ICAgICAgICAgICAgIC8qIFJpZ2h0IHN0cmluZyAqLwogICAgICk7CiAKKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKK1B5QVBJX0ZVTkMoaW50KSBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQoCisgICAgUHlPYmplY3QgKmxlZnQsICAgICAgICAgICAgIC8qIExlZnQgc3RyaW5nICovCisgICAgX1B5X0lkZW50aWZpZXIgKnJpZ2h0ICAgICAgIC8qIFJpZ2h0IGlkZW50aWZpZXIgKi8KKyAgICApOworI2VuZGlmCisKIFB5QVBJX0ZVTkMoaW50KSBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZygKICAgICBQeU9iamVjdCAqbGVmdCwKICAgICBjb25zdCBjaGFyICpyaWdodCAgICAgICAgICAgLyogQVNDSUktZW5jb2RlZCBzdHJpbmcgKi8KQEAgLTE5ODQsNyArMjA0MSw3IEBACiAgICAgaW50IG9wICAgICAgICAgICAgICAgICAgICAgIC8qIE9wZXJhdGlvbjogUHlfRVEsIFB5X05FLCBQeV9HVCwgZXRjLiAqLwogICAgICk7CiAKLS8qIEFwcGx5IGEgYXJndW1lbnQgdHVwbGUgb3IgZGljdGlvbmFyeSB0byBhIGZvcm1hdCBzdHJpbmcgYW5kIHJldHVybgorLyogQXBwbHkgYW4gYXJndW1lbnQgdHVwbGUgb3IgZGljdGlvbmFyeSB0byBhIGZvcm1hdCBzdHJpbmcgYW5kIHJldHVybgogICAgdGhlIHJlc3VsdGluZyBVbmljb2RlIHN0cmluZy4gKi8KIAogUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeVVuaWNvZGVfRm9ybWF0KApkaWZmIC0tZ2l0IGEvSW5jbHVkZS93YXJuaW5ncy5oIGIvSW5jbHVkZS93YXJuaW5ncy5oCmluZGV4IGI3ZGI2ODEuLmVmZmI5ZmFkIDEwMDY0NAotLS0gYS9JbmNsdWRlL3dhcm5pbmdzLmgKKysrIGIvSW5jbHVkZS93YXJuaW5ncy5oCkBAIC0xNyw2ICsxNywxNSBAQAogICAgIFB5X3NzaXplX3Qgc3RhY2tfbGV2ZWwsCiAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAgICAgICAgIC8qIEFTQ0lJLWVuY29kZWQgc3RyaW5nICAqLwogICAgIC4uLik7CisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkgUHlFcnJfV2FybkV4cGxpY2l0T2JqZWN0KAorICAgIFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICBQeU9iamVjdCAqbWVzc2FnZSwKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgaW50IGxpbmVubywKKyAgICBQeU9iamVjdCAqbW9kdWxlLAorICAgIFB5T2JqZWN0ICpyZWdpc3RyeSk7CisjZW5kaWYKIFB5QVBJX0ZVTkMoaW50KSBQeUVycl9XYXJuRXhwbGljaXQoCiAgICAgUHlPYmplY3QgKmNhdGVnb3J5LAogICAgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsICAgICAgICAvKiBVVEYtOCBlbmNvZGVkIHN0cmluZyAqLwpAQCAtMjUsNiArMzQsMTQgQEAKICAgICBjb25zdCBjaGFyICptb2R1bGUsICAgICAgICAgLyogVVRGLTggZW5jb2RlZCBzdHJpbmcgKi8KICAgICBQeU9iamVjdCAqcmVnaXN0cnkpOwogCisjaWZuZGVmIFB5X0xJTUlURURfQVBJCitQeUFQSV9GVU5DKGludCkKK1B5RXJyX1dhcm5FeHBsaWNpdEZvcm1hdChQeU9iamVjdCAqY2F0ZWdvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworI2VuZGlmCisKIC8qIERFUFJFQ0FURUQ6IFVzZSBQeUVycl9XYXJuRXgoKSBpbnN0ZWFkLiAqLwogI2lmbmRlZiBQeV9MSU1JVEVEX0FQSQogI2RlZmluZSBQeUVycl9XYXJuKGNhdGVnb3J5LCBtc2cpIFB5RXJyX1dhcm5FeChjYXRlZ29yeSwgbXNnLCAxKQpkaWZmIC0tZ2l0IGEvTGliL19ib290bG9jYWxlLnB5IGIvTGliL19ib290bG9jYWxlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2NhYzEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvX2Jvb3Rsb2NhbGUucHkKQEAgLTAsMCArMSwzNCBAQAorIiIiQSBtaW5pbWFsIHN1YnNldCBvZiB0aGUgbG9jYWxlIG1vZHVsZSB1c2VkIGF0IGludGVycHJldGVyIHN0YXJ0dXAKKyhpbXBvcnRlZCBieSB0aGUgX2lvIG1vZHVsZSksIGluIG9yZGVyIHRvIHJlZHVjZSBzdGFydHVwIHRpbWUuCisKK0Rvbid0IGltcG9ydCBkaXJlY3RseSBmcm9tIHRoaXJkLXBhcnR5IGNvZGU7IHVzZSB0aGUgYGxvY2FsZWAgbW9kdWxlIGluc3RlYWQhCisiIiIKKworaW1wb3J0IHN5cworaW1wb3J0IF9sb2NhbGUKKworaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGU9VHJ1ZSk6CisgICAgICAgIHJldHVybiBfbG9jYWxlLl9nZXRkZWZhdWx0bG9jYWxlKClbMV0KK2Vsc2U6CisgICAgdHJ5OgorICAgICAgICBfbG9jYWxlLkNPREVTRVQKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGRlZiBnZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGU9VHJ1ZSk6CisgICAgICAgICAgICAjIFRoaXMgcGF0aCBmb3IgbGVnYWN5IHN5c3RlbXMgbmVlZHMgdGhlIG1vcmUgY29tcGxleAorICAgICAgICAgICAgIyBnZXRkZWZhdWx0bG9jYWxlKCkgZnVuY3Rpb24sIGltcG9ydCB0aGUgZnVsbCBsb2NhbGUgbW9kdWxlLgorICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQorICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhkb19zZXRsb2NhbGUpCisgICAgZWxzZToKKyAgICAgICAgZGVmIGdldHByZWZlcnJlZGVuY29kaW5nKGRvX3NldGxvY2FsZT1UcnVlKToKKyAgICAgICAgICAgIGFzc2VydCBub3QgZG9fc2V0bG9jYWxlCisgICAgICAgICAgICByZXN1bHQgPSBfbG9jYWxlLm5sX2xhbmdpbmZvKF9sb2NhbGUuQ09ERVNFVCkKKyAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIG5sX2xhbmdpbmZvIGNhbiByZXR1cm4gYW4gZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZSBzZXR0aW5nIGhhcyBhbiBpbnZhbGlkIHZhbHVlLgorICAgICAgICAgICAgICAgICMgRGVmYXVsdCB0byBVVEYtOCBpbiB0aGF0IGNhc2UgYmVjYXVzZQorICAgICAgICAgICAgICAgICMgVVRGLTggaXMgdGhlIGRlZmF1bHQgY2hhcnNldCBvbiBPU1ggYW5kCisgICAgICAgICAgICAgICAgIyByZXR1cm5pbmcgbm90aGluZyB3aWxsIGNyYXNoIHRoZQorICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0ZXIuCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gJ1VURi04JworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdApkaWZmIC0tZ2l0IGEvTGliL19jb2xsZWN0aW9uc19hYmMucHkgYi9MaWIvX2NvbGxlY3Rpb25zX2FiYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2I1OWFiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL19jb2xsZWN0aW9uc19hYmMucHkKQEAgLTAsMCArMSw3NDggQEAKKyMgQ29weXJpZ2h0IDIwMDcgR29vZ2xlLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKworIiIiQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBmb3IgY29sbGVjdGlvbnMsIGFjY29yZGluZyB0byBQRVAgMzExOS4KKworVW5pdCB0ZXN0cyBhcmUgaW4gdGVzdF9jb2xsZWN0aW9ucy4KKyIiIgorCitmcm9tIGFiYyBpbXBvcnQgQUJDTWV0YSwgYWJzdHJhY3RtZXRob2QKK2ltcG9ydCBzeXMKKworX19hbGxfXyA9IFsiSGFzaGFibGUiLCAiSXRlcmFibGUiLCAiSXRlcmF0b3IiLAorICAgICAgICAgICAiU2l6ZWQiLCAiQ29udGFpbmVyIiwgIkNhbGxhYmxlIiwKKyAgICAgICAgICAgIlNldCIsICJNdXRhYmxlU2V0IiwKKyAgICAgICAgICAgIk1hcHBpbmciLCAiTXV0YWJsZU1hcHBpbmciLAorICAgICAgICAgICAiTWFwcGluZ1ZpZXciLCAiS2V5c1ZpZXciLCAiSXRlbXNWaWV3IiwgIlZhbHVlc1ZpZXciLAorICAgICAgICAgICAiU2VxdWVuY2UiLCAiTXV0YWJsZVNlcXVlbmNlIiwKKyAgICAgICAgICAgIkJ5dGVTdHJpbmciLAorICAgICAgICAgICBdCisKKyMgVGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVuYW1lZCBmcm9tIGNvbGxlY3Rpb25zLmFiYyB0byBfY29sbGVjdGlvbnNfYWJjIHRvCisjIHNwZWVkIHVwIGludGVycHJldGVyIHN0YXJ0dXAuIFNvbWUgb2YgdGhlIHR5cGVzIHN1Y2ggYXMgTXV0YWJsZU1hcHBpbmcgYXJlCisjIHJlcXVpcmVkIGVhcmx5IGJ1dCBjb2xsZWN0aW9ucyBtb2R1bGUgaW1wb3J0cyBhIGxvdCBvZiBvdGhlciBtb2R1bGVzLgorIyBTZWUgaXNzdWUgIzE5MjE4CitfX25hbWVfXyA9ICJjb2xsZWN0aW9ucy5hYmMiCisKKyMgUHJpdmF0ZSBsaXN0IG9mIHR5cGVzIHRoYXQgd2Ugd2FudCB0byByZWdpc3RlciB3aXRoIHRoZSB2YXJpb3VzIEFCQ3MKKyMgc28gdGhhdCB0aGV5IHdpbGwgcGFzcyB0ZXN0cyBsaWtlOgorIyAgICAgICBpdCA9IGl0ZXIoc29tZWJ5dGVhcnJheSkKKyMgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaXQsIEl0ZXJhYmxlKQorIyBOb3RlOiAgaW4gb3RoZXIgaW1wbGVtZW50YXRpb25zLCB0aGVzZSB0eXBlcyBtYW55IG5vdCBiZSBkaXN0aW5jdAorIyBhbmQgdGhleSBtYWtlIGhhdmUgdGhlaXIgb3duIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHR5cGVzIHRoYXQKKyMgYXJlIG5vdCBpbmNsdWRlZCBvbiB0aGlzIGxpc3QuCitieXRlc19pdGVyYXRvciA9IHR5cGUoaXRlcihiJycpKQorYnl0ZWFycmF5X2l0ZXJhdG9yID0gdHlwZShpdGVyKGJ5dGVhcnJheSgpKSkKKyNjYWxsYWJsZV9pdGVyYXRvciA9ID8/PworZGljdF9rZXlpdGVyYXRvciA9IHR5cGUoaXRlcih7fS5rZXlzKCkpKQorZGljdF92YWx1ZWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LnZhbHVlcygpKSkKK2RpY3RfaXRlbWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9Lml0ZW1zKCkpKQorbGlzdF9pdGVyYXRvciA9IHR5cGUoaXRlcihbXSkpCitsaXN0X3JldmVyc2VpdGVyYXRvciA9IHR5cGUoaXRlcihyZXZlcnNlZChbXSkpKQorcmFuZ2VfaXRlcmF0b3IgPSB0eXBlKGl0ZXIocmFuZ2UoMCkpKQorc2V0X2l0ZXJhdG9yID0gdHlwZShpdGVyKHNldCgpKSkKK3N0cl9pdGVyYXRvciA9IHR5cGUoaXRlcigiIikpCit0dXBsZV9pdGVyYXRvciA9IHR5cGUoaXRlcigoKSkpCit6aXBfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoemlwKCkpKQorIyMgdmlld3MgIyMKK2RpY3Rfa2V5cyA9IHR5cGUoe30ua2V5cygpKQorZGljdF92YWx1ZXMgPSB0eXBlKHt9LnZhbHVlcygpKQorZGljdF9pdGVtcyA9IHR5cGUoe30uaXRlbXMoKSkKKyMjIG1pc2MgIyMKK21hcHBpbmdwcm94eSA9IHR5cGUodHlwZS5fX2RpY3RfXykKKworCisjIyMgT05FLVRSSUNLIFBPTklFUyAjIyMKKworY2xhc3MgSGFzaGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIDAKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBIYXNoYWJsZToKKyAgICAgICAgICAgIGZvciBCIGluIEMuX19tcm9fXzoKKyAgICAgICAgICAgICAgICBpZiAiX19oYXNoX18iIGluIEIuX19kaWN0X186CisgICAgICAgICAgICAgICAgICAgIGlmIEIuX19kaWN0X19bIl9faGFzaF9fIl06CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBJdGVyYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICB3aGlsZSBGYWxzZToKKyAgICAgICAgICAgIHlpZWxkIE5vbmUKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBJdGVyYWJsZToKKyAgICAgICAgICAgIGlmIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworCitjbGFzcyBJdGVyYXRvcihJdGVyYWJsZSk6CisKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICAnUmV0dXJuIHRoZSBuZXh0IGl0ZW0gZnJvbSB0aGUgaXRlcmF0b3IuIFdoZW4gZXhoYXVzdGVkLCByYWlzZSBTdG9wSXRlcmF0aW9uJworICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgorICAgICAgICBpZiBjbHMgaXMgSXRlcmF0b3I6CisgICAgICAgICAgICBpZiAoYW55KCJfX25leHRfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pIGFuZAorICAgICAgICAgICAgICAgIGFueSgiX19pdGVyX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKK0l0ZXJhdG9yLnJlZ2lzdGVyKGJ5dGVzX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZWFycmF5X2l0ZXJhdG9yKQorI0l0ZXJhdG9yLnJlZ2lzdGVyKGNhbGxhYmxlX2l0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9rZXlpdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfdmFsdWVpdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGRpY3RfaXRlbWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKGxpc3RfcmV2ZXJzZWl0ZXJhdG9yKQorSXRlcmF0b3IucmVnaXN0ZXIocmFuZ2VfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihzZXRfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3RlcihzdHJfaXRlcmF0b3IpCitJdGVyYXRvci5yZWdpc3Rlcih0dXBsZV9pdGVyYXRvcikKK0l0ZXJhdG9yLnJlZ2lzdGVyKHppcF9pdGVyYXRvcikKKworY2xhc3MgU2l6ZWQobWV0YWNsYXNzPUFCQ01ldGEpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMAorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIFNpemVkOgorICAgICAgICAgICAgaWYgYW55KCJfX2xlbl9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQ29udGFpbmVyKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHgpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6CisgICAgICAgIGlmIGNscyBpcyBDb250YWluZXI6CisgICAgICAgICAgICBpZiBhbnkoIl9fY29udGFpbnNfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKK2NsYXNzIENhbGxhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKKyAgICAgICAgaWYgY2xzIGlzIENhbGxhYmxlOgorICAgICAgICAgICAgaWYgYW55KCJfX2NhbGxfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisKKyMjIyBTRVRTICMjIworCisKK2NsYXNzIFNldChTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6CisKKyAgICAiIiJBIHNldCBpcyBhIGZpbml0ZSwgaXRlcmFibGUgY29udGFpbmVyLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19jb250YWluc19fLCBfX2l0ZXJfXyBhbmQgX19sZW5fXy4KKworICAgIFRvIG92ZXJyaWRlIHRoZSBjb21wYXJpc29ucyAocHJlc3VtYWJseSBmb3Igc3BlZWQsIGFzIHRoZQorICAgIHNlbWFudGljcyBhcmUgZml4ZWQpLCByZWRlZmluZSBfX2xlX18gYW5kIF9fZ2VfXywKKyAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgaWYgbGVuKHNlbGYpID4gbGVuKG90aGVyKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgZWxlbSBpbiBzZWxmOgorICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmKSA8IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQorCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBsZW4oc2VsZikgPiBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fZ2VfXyhvdGhlcikKKworICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBpZiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBlbGVtIGluIG90aGVyOgorICAgICAgICAgICAgaWYgZWxlbSBub3QgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gbGVuKHNlbGYpID09IGxlbihvdGhlcikgYW5kIHNlbGYuX19sZV9fKG90aGVyKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mcm9tX2l0ZXJhYmxlKGNscywgaXQpOgorICAgICAgICAnJydDb25zdHJ1Y3QgYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGZyb20gYW55IGl0ZXJhYmxlIGlucHV0LgorCisgICAgICAgIE11c3Qgb3ZlcnJpZGUgdGhpcyBtZXRob2QgaWYgdGhlIGNsYXNzIGNvbnN0cnVjdG9yIHNpZ25hdHVyZQorICAgICAgICBkb2VzIG5vdCBhY2NlcHQgYW4gaXRlcmFibGUgZm9yIGFuIGlucHV0LgorICAgICAgICAnJycKKyAgICAgICAgcmV0dXJuIGNscyhpdCkKKworICAgIGRlZiBfX2FuZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEl0ZXJhYmxlKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZSh2YWx1ZSBmb3IgdmFsdWUgaW4gb3RoZXIgaWYgdmFsdWUgaW4gc2VsZikKKworICAgIF9fcmFuZF9fID0gX19hbmRfXworCisgICAgZGVmIGlzZGlzam9pbnQoc2VsZiwgb3RoZXIpOgorICAgICAgICAnUmV0dXJuIFRydWUgaWYgdHdvIHNldHMgaGF2ZSBhIG51bGwgaW50ZXJzZWN0aW9uLicKKyAgICAgICAgZm9yIHZhbHVlIGluIG90aGVyOgorICAgICAgICAgICAgaWYgdmFsdWUgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX29yX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGNoYWluID0gKGUgZm9yIHMgaW4gKHNlbGYsIG90aGVyKSBmb3IgZSBpbiBzKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZShjaGFpbikKKworICAgIF9fcm9yX18gPSBfX29yX18KKworICAgIGRlZiBfX3N1Yl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQorICAgICAgICByZXR1cm4gc2VsZi5fZnJvbV9pdGVyYWJsZSh2YWx1ZSBmb3IgdmFsdWUgaW4gc2VsZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBub3QgaW4gb3RoZXIpCisKKyAgICBkZWYgX19yc3ViX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBvdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZikKKworICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQorICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQorCisgICAgX19yeG9yX18gPSBfX3hvcl9fCisKKyAgICBkZWYgX2hhc2goc2VsZik6CisgICAgICAgICIiIkNvbXB1dGUgdGhlIGhhc2ggdmFsdWUgb2YgYSBzZXQuCisKKyAgICAgICAgTm90ZSB0aGF0IHdlIGRvbid0IGRlZmluZSBfX2hhc2hfXzogbm90IGFsbCBzZXRzIGFyZSBoYXNoYWJsZS4KKyAgICAgICAgQnV0IGlmIHlvdSBkZWZpbmUgYSBoYXNoYWJsZSBzZXQgdHlwZSwgaXRzIF9faGFzaF9fIHNob3VsZAorICAgICAgICBjYWxsIHRoaXMgZnVuY3Rpb24uCisKKyAgICAgICAgVGhpcyBtdXN0IGJlIGNvbXBhdGlibGUgX19lcV9fLgorCisgICAgICAgIEFsbCBzZXRzIG91Z2h0IHRvIGNvbXBhcmUgZXF1YWwgaWYgdGhleSBjb250YWluIHRoZSBzYW1lCisgICAgICAgIGVsZW1lbnRzLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBpbXBsZW1lbnRlZCwgYW5kCisgICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIG9mIHRoZSBlbGVtZW50czsgc28gdGhlcmUncyBub3QgbXVjaAorICAgICAgICBmcmVlZG9tIGZvciBfX2VxX18gb3IgX19oYXNoX18uICBXZSBtYXRjaCB0aGUgYWxnb3JpdGhtIHVzZWQKKyAgICAgICAgYnkgdGhlIGJ1aWx0LWluIGZyb3plbnNldCB0eXBlLgorICAgICAgICAiIiIKKyAgICAgICAgTUFYID0gc3lzLm1heHNpemUKKyAgICAgICAgTUFTSyA9IDIgKiBNQVggKyAxCisgICAgICAgIG4gPSBsZW4oc2VsZikKKyAgICAgICAgaCA9IDE5Mjc4NjgyMzcgKiAobiArIDEpCisgICAgICAgIGggJj0gTUFTSworICAgICAgICBmb3IgeCBpbiBzZWxmOgorICAgICAgICAgICAgaHggPSBoYXNoKHgpCisgICAgICAgICAgICBoIF49IChoeCBeIChoeCA8PCAxNikgXiA4OTg2OTc0NykgICogMzY0NDc5ODE2NworICAgICAgICAgICAgaCAmPSBNQVNLCisgICAgICAgIGggPSBoICogNjkwNjkgKyA5MDcxMzM5MjMKKyAgICAgICAgaCAmPSBNQVNLCisgICAgICAgIGlmIGggPiBNQVg6CisgICAgICAgICAgICBoIC09IE1BU0sgKyAxCisgICAgICAgIGlmIGggPT0gLTE6CisgICAgICAgICAgICBoID0gNTkwOTIzNzEzCisgICAgICAgIHJldHVybiBoCisKK1NldC5yZWdpc3Rlcihmcm96ZW5zZXQpCisKKworY2xhc3MgTXV0YWJsZVNldChTZXQpOgorICAgICIiIkEgbXV0YWJsZSBzZXQgaXMgYSBmaW5pdGUsIGl0ZXJhYmxlIGNvbnRhaW5lci4KKworICAgIFRoaXMgY2xhc3MgcHJvdmlkZXMgY29uY3JldGUgZ2VuZXJpYyBpbXBsZW1lbnRhdGlvbnMgb2YgYWxsCisgICAgbWV0aG9kcyBleGNlcHQgZm9yIF9fY29udGFpbnNfXywgX19pdGVyX18sIF9fbGVuX18sCisgICAgYWRkKCksIGFuZCBkaXNjYXJkKCkuCisKKyAgICBUbyBvdmVycmlkZSB0aGUgY29tcGFyaXNvbnMgKHByZXN1bWFibHkgZm9yIHNwZWVkLCBhcyB0aGUKKyAgICBzZW1hbnRpY3MgYXJlIGZpeGVkKSwgYWxsIHlvdSBoYXZlIHRvIGRvIGlzIHJlZGVmaW5lIF9fbGVfXyBhbmQKKyAgICB0aGVuIHRoZSBvdGhlciBvcGVyYXRpb25zIHdpbGwgYXV0b21hdGljYWxseSBmb2xsb3cgc3VpdC4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgYWRkKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiQWRkIGFuIGVsZW1lbnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBkaXNjYXJkKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIiIiUmVtb3ZlIGFuIGVsZW1lbnQuICBEbyBub3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIGFic2VudC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiBJZiBub3QgYSBtZW1iZXIsIHJhaXNlIGEgS2V5RXJyb3IuIiIiCisgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IodmFsdWUpCisgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKworICAgIGRlZiBwb3Aoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcG9wcGVkIHZhbHVlLiAgUmFpc2UgS2V5RXJyb3IgaWYgZW1wdHkuIiIiCisgICAgICAgIGl0ID0gaXRlcihzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB2YWx1ZSA9IG5leHQoaXQpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICByZXR1cm4gdmFsdWUKKworICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgIiIiVGhpcyBpcyBzbG93IChjcmVhdGVzIE4gbmV3IGl0ZXJhdG9ycyEpIGJ1dCBlZmZlY3RpdmUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3AoKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgX19pb3JfXyhzZWxmLCBpdCk6CisgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgIHNlbGYuYWRkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faWFuZF9fKHNlbGYsIGl0KToKKyAgICAgICAgZm9yIHZhbHVlIGluIChzZWxmIC0gaXQpOgorICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9faXhvcl9fKHNlbGYsIGl0KToKKyAgICAgICAgaWYgaXQgaXMgc2VsZjoKKyAgICAgICAgICAgIHNlbGYuY2xlYXIoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaXQsIFNldCk6CisgICAgICAgICAgICAgICAgaXQgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKGl0KQorICAgICAgICAgICAgZm9yIHZhbHVlIGluIGl0OgorICAgICAgICAgICAgICAgIGlmIHZhbHVlIGluIHNlbGY6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2lzdWJfXyhzZWxmLCBpdCk6CisgICAgICAgIGlmIGl0IGlzIHNlbGY6CisgICAgICAgICAgICBzZWxmLmNsZWFyKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKKyAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmCisKK011dGFibGVTZXQucmVnaXN0ZXIoc2V0KQorCisKKyMjIyBNQVBQSU5HUyAjIyMKKworCitjbGFzcyBNYXBwaW5nKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBIE1hcHBpbmcgaXMgYSBnZW5lcmljIGNvbnRhaW5lciBmb3IgYXNzb2NpYXRpbmcga2V5L3ZhbHVlCisgICAgcGFpcnMuCisKKyAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAorICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2dldGl0ZW1fXywgX19pdGVyX18sIGFuZCBfX2xlbl9fLgorCisgICAgIiIiCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgorICAgICAgICAnRC5nZXQoa1ssZF0pIC0+IERba10gaWYgayBpbiBELCBlbHNlIGQuICBkIGRlZmF1bHRzIHRvIE5vbmUuJworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGZba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYga2V5cyhzZWxmKToKKyAgICAgICAgIkQua2V5cygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGtleXMiCisgICAgICAgIHJldHVybiBLZXlzVmlldyhzZWxmKQorCisgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICAiRC5pdGVtcygpIC0+IGEgc2V0LWxpa2Ugb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIGl0ZW1zIgorICAgICAgICByZXR1cm4gSXRlbXNWaWV3KHNlbGYpCisKKyAgICBkZWYgdmFsdWVzKHNlbGYpOgorICAgICAgICAiRC52YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIgorICAgICAgICByZXR1cm4gVmFsdWVzVmlldyhzZWxmKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gZGljdChzZWxmLml0ZW1zKCkpID09IGRpY3Qob3RoZXIuaXRlbXMoKSkKKworTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCisKKworY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgorICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCisKKworY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9tYXBwaW5nCisKK0tleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKKworCitjbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgorICAgICAgICByZXR1cm4gc2V0KGl0KQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKKyAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKKyAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKKworSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCisKKworY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6CisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgorICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6CisgICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KKworVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKKworCitjbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCisgICAga2V5L3ZhbHVlIHBhaXJzLgorCisgICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKKyAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKKyAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCisKKyAgICAiIiIKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgX19tYXJrZXIgPSBvYmplY3QoKQorCisgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgorICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KKyAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgorICAgICAgICAnJycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisKKyAgICBkZWYgcG9waXRlbShzZWxmKToKKyAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCisgICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCisgICAgICAgICcnJworICAgICAgICB0cnk6CisgICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KKyAgICAgICAgZGVsIHNlbGZba2V5XQorICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKKyAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCisgICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KKyAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2CisgICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgorICAgICAgICAnJycKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRlc2NyaXB0b3IgJ3VwZGF0ZScgb2YgJ011dGFibGVNYXBwaW5nJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd1cGRhdGUgZXhwZWN0ZWQgYXQgbW9zdCAxIGFyZ3VtZW50cywgZ290ICVkJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKGFyZ3MpKQorICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgb3RoZXIgPSBhcmdzWzBdCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKKyAgICAgICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyOgorICAgICAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6CisgICAgICAgICAgICAgICAgZm9yIGtleSBpbiBvdGhlci5rZXlzKCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IG90aGVyW2tleV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gb3RoZXI6CisgICAgICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGt3ZHMuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IHZhbHVlCisKKyAgICBkZWYgc2V0ZGVmYXVsdChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICdELnNldGRlZmF1bHQoa1ssZF0pIC0+IEQuZ2V0KGssZCksIGFsc28gc2V0IERba109ZCBpZiBrIG5vdCBpbiBEJworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZltrZXldCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGZba2V5XSA9IGRlZmF1bHQKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKworTXV0YWJsZU1hcHBpbmcucmVnaXN0ZXIoZGljdCkKKworCisjIyMgU0VRVUVOQ0VTICMjIworCisKK2NsYXNzIFNlcXVlbmNlKFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKKworICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KKworICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBvdmVycmlkZSBfX25ld19fIG9yIF9faW5pdF9fLAorICAgIF9fZ2V0aXRlbV9fLCBhbmQgX19sZW5fXy4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICByYWlzZSBJbmRleEVycm9yCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGkgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdiA9IHNlbGZbaV0KKyAgICAgICAgICAgICAgICB5aWVsZCB2CisgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgZm9yIHYgaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIHYgPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19yZXZlcnNlZF9fKHNlbGYpOgorICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZShsZW4oc2VsZikpKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGZbaV0KKworICAgIGRlZiBpbmRleChzZWxmLCB2YWx1ZSk6CisgICAgICAgICcnJ1MuaW5kZXgodmFsdWUpIC0+IGludGVnZXIgLS0gcmV0dXJuIGZpcnN0IGluZGV4IG9mIHZhbHVlLgorICAgICAgICAgICBSYWlzZXMgVmFsdWVFcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQuCisgICAgICAgICcnJworICAgICAgICBmb3IgaSwgdiBpbiBlbnVtZXJhdGUoc2VsZik6CisgICAgICAgICAgICBpZiB2ID09IHZhbHVlOgorICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgIGRlZiBjb3VudChzZWxmLCB2YWx1ZSk6CisgICAgICAgICdTLmNvdW50KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgdmFsdWUnCisgICAgICAgIHJldHVybiBzdW0oMSBmb3IgdiBpbiBzZWxmIGlmIHYgPT0gdmFsdWUpCisKK1NlcXVlbmNlLnJlZ2lzdGVyKHR1cGxlKQorU2VxdWVuY2UucmVnaXN0ZXIoc3RyKQorU2VxdWVuY2UucmVnaXN0ZXIocmFuZ2UpCitTZXF1ZW5jZS5yZWdpc3RlcihtZW1vcnl2aWV3KQorCisKK2NsYXNzIEJ5dGVTdHJpbmcoU2VxdWVuY2UpOgorCisgICAgIiIiVGhpcyB1bmlmaWVzIGJ5dGVzIGFuZCBieXRlYXJyYXkuCisKKyAgICBYWFggU2hvdWxkIGFkZCBhbGwgdGhlaXIgbWV0aG9kcy4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgpCisKK0J5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZXMpCitCeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVhcnJheSkKKworCitjbGFzcyBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2UpOgorCisgICAgX19zbG90c19fID0gKCkKKworICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtd3JpdGUgc2VxdWVuY2UuCisKKyAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3QgcHJvdmlkZSBfX25ld19fIG9yIF9faW5pdF9fLAorICAgIF9fZ2V0aXRlbV9fLCBfX3NldGl0ZW1fXywgX19kZWxpdGVtX18sIF9fbGVuX18sIGFuZCBpbnNlcnQoKS4KKworICAgICIiIgorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJhaXNlIEluZGV4RXJyb3IKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIHZhbHVlKToKKyAgICAgICAgJ1MuaW5zZXJ0KGluZGV4LCB2YWx1ZSkgLS0gaW5zZXJ0IHZhbHVlIGJlZm9yZSBpbmRleCcKKyAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgorCisgICAgZGVmIGFwcGVuZChzZWxmLCB2YWx1ZSk6CisgICAgICAgICdTLmFwcGVuZCh2YWx1ZSkgLS0gYXBwZW5kIHZhbHVlIHRvIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlJworICAgICAgICBzZWxmLmluc2VydChsZW4oc2VsZiksIHZhbHVlKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAnUy5jbGVhcigpIC0+IE5vbmUgLS0gcmVtb3ZlIGFsbCBpdGVtcyBmcm9tIFMnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5wb3AoKQorICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiByZXZlcnNlKHNlbGYpOgorICAgICAgICAnUy5yZXZlcnNlKCkgLS0gcmV2ZXJzZSAqSU4gUExBQ0UqJworICAgICAgICBuID0gbGVuKHNlbGYpCisgICAgICAgIGZvciBpIGluIHJhbmdlKG4vLzIpOgorICAgICAgICAgICAgc2VsZltpXSwgc2VsZltuLWktMV0gPSBzZWxmW24taS0xXSwgc2VsZltpXQorCisgICAgZGVmIGV4dGVuZChzZWxmLCB2YWx1ZXMpOgorICAgICAgICAnUy5leHRlbmQoaXRlcmFibGUpIC0tIGV4dGVuZCBzZXF1ZW5jZSBieSBhcHBlbmRpbmcgZWxlbWVudHMgZnJvbSB0aGUgaXRlcmFibGUnCisgICAgICAgIGZvciB2IGluIHZhbHVlczoKKyAgICAgICAgICAgIHNlbGYuYXBwZW5kKHYpCisKKyAgICBkZWYgcG9wKHNlbGYsIGluZGV4PS0xKToKKyAgICAgICAgJycnUy5wb3AoW2luZGV4XSkgLT4gaXRlbSAtLSByZW1vdmUgYW5kIHJldHVybiBpdGVtIGF0IGluZGV4IChkZWZhdWx0IGxhc3QpLgorICAgICAgICAgICBSYWlzZSBJbmRleEVycm9yIGlmIGxpc3QgaXMgZW1wdHkgb3IgaW5kZXggaXMgb3V0IG9mIHJhbmdlLgorICAgICAgICAnJycKKyAgICAgICAgdiA9IHNlbGZbaW5kZXhdCisgICAgICAgIGRlbCBzZWxmW2luZGV4XQorICAgICAgICByZXR1cm4gdgorCisgICAgZGVmIHJlbW92ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgICcnJ1MucmVtb3ZlKHZhbHVlKSAtLSByZW1vdmUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB2YWx1ZS4KKyAgICAgICAgICAgUmFpc2UgVmFsdWVFcnJvciBpZiB0aGUgdmFsdWUgaXMgbm90IHByZXNlbnQuCisgICAgICAgICcnJworICAgICAgICBkZWwgc2VsZltzZWxmLmluZGV4KHZhbHVlKV0KKworICAgIGRlZiBfX2lhZGRfXyhzZWxmLCB2YWx1ZXMpOgorICAgICAgICBzZWxmLmV4dGVuZCh2YWx1ZXMpCisgICAgICAgIHJldHVybiBzZWxmCisKK011dGFibGVTZXF1ZW5jZS5yZWdpc3RlcihsaXN0KQorTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGJ5dGVhcnJheSkgICMgTXVsdGlwbHkgaW5oZXJpdGluZywgc2VlIEJ5dGVTdHJpbmcKZGlmZiAtLWdpdCBhL0xpYi9fY29tcGF0X3BpY2tsZS5weSBiL0xpYi9fY29tcGF0X3BpY2tsZS5weQppbmRleCA5NzhjMDFlLi42ZTM5ZDRhIDEwMDY0NAotLS0gYS9MaWIvX2NvbXBhdF9waWNrbGUucHkKKysrIGIvTGliL19jb21wYXRfcGlja2xlLnB5CkBAIC02LDE4ICs2LDEzIEBACiAjIGxpYjJ0bzMgYW5kIHVzZSB0aGUgbWFwcGluZyBkZWZpbmVkIHRoZXJlLCBiZWNhdXNlIGxpYjJ0bzMgdXNlcyBwaWNrbGUuCiAjIFRodXMsIHRoaXMgY291bGQgY2F1c2UgdGhlIG1vZHVsZSB0byBiZSBpbXBvcnRlZCByZWN1cnNpdmVseS4KIElNUE9SVF9NQVBQSU5HID0gewotICAgICdTdHJpbmdJTyc6ICAnaW8nLAotICAgICdjU3RyaW5nSU8nOiAnaW8nLAotICAgICdjUGlja2xlJzogJ3BpY2tsZScsCiAgICAgJ19fYnVpbHRpbl9fJyA6ICdidWlsdGlucycsCiAgICAgJ2NvcHlfcmVnJzogJ2NvcHlyZWcnLAogICAgICdRdWV1ZSc6ICdxdWV1ZScsCiAgICAgJ1NvY2tldFNlcnZlcic6ICdzb2NrZXRzZXJ2ZXInLAogICAgICdDb25maWdQYXJzZXInOiAnY29uZmlncGFyc2VyJywKICAgICAncmVwcic6ICdyZXBybGliJywKLSAgICAnRmlsZURpYWxvZyc6ICd0a2ludGVyLmZpbGVkaWFsb2cnLAogICAgICd0a0ZpbGVEaWFsb2cnOiAndGtpbnRlci5maWxlZGlhbG9nJywKLSAgICAnU2ltcGxlRGlhbG9nJzogJ3RraW50ZXIuc2ltcGxlZGlhbG9nJywKICAgICAndGtTaW1wbGVEaWFsb2cnOiAndGtpbnRlci5zaW1wbGVkaWFsb2cnLAogICAgICd0a0NvbG9yQ2hvb3Nlcic6ICd0a2ludGVyLmNvbG9yY2hvb3NlcicsCiAgICAgJ3RrQ29tbW9uRGlhbG9nJzogJ3RraW50ZXIuY29tbW9uZGlhbG9nJywKQEAgLTM5LDcgKzM0LDYgQEAKICAgICAnZGJtJzogJ2RibS5uZGJtJywKICAgICAnZ2RibSc6ICdkYm0uZ251JywKICAgICAneG1scnBjbGliJzogJ3htbHJwYy5jbGllbnQnLAotICAgICdEb2NYTUxSUENTZXJ2ZXInOiAneG1scnBjLnNlcnZlcicsCiAgICAgJ1NpbXBsZVhNTFJQQ1NlcnZlcic6ICd4bWxycGMuc2VydmVyJywKICAgICAnaHR0cGxpYic6ICdodHRwLmNsaWVudCcsCiAgICAgJ2h0bWxlbnRpdHlkZWZzJyA6ICdodG1sLmVudGl0aWVzJywKQEAgLTQ3LDE2ICs0MSwxMyBAQAogICAgICdDb29raWUnOiAnaHR0cC5jb29raWVzJywKICAgICAnY29va2llbGliJzogJ2h0dHAuY29va2llamFyJywKICAgICAnQmFzZUhUVFBTZXJ2ZXInOiAnaHR0cC5zZXJ2ZXInLAotICAgICdTaW1wbGVIVFRQU2VydmVyJzogJ2h0dHAuc2VydmVyJywKLSAgICAnQ0dJSFRUUFNlcnZlcic6ICdodHRwLnNlcnZlcicsCiAgICAgJ3Rlc3QudGVzdF9zdXBwb3J0JzogJ3Rlc3Quc3VwcG9ydCcsCiAgICAgJ2NvbW1hbmRzJzogJ3N1YnByb2Nlc3MnLAotICAgICdVc2VyU3RyaW5nJyA6ICdjb2xsZWN0aW9ucycsCi0gICAgJ1VzZXJMaXN0JyA6ICdjb2xsZWN0aW9ucycsCiAgICAgJ3VybHBhcnNlJyA6ICd1cmxsaWIucGFyc2UnLAogICAgICdyb2JvdHBhcnNlcicgOiAndXJsbGliLnJvYm90cGFyc2VyJywKLSAgICAnd2hpY2hkYic6ICdkYm0nLAotICAgICdhbnlkYm0nOiAnZGJtJworICAgICd1cmxsaWIyJzogJ3VybGxpYi5yZXF1ZXN0JywKKyAgICAnYW55ZGJtJzogJ2RibScsCisgICAgJ19hYmNvbGwnIDogJ2NvbGxlY3Rpb25zLmFiYycsCiB9CiAKIApAQCAtNjgsMTIgKzU5LDM1IEBACiAgICAgKCdfX2J1aWx0aW5fXycsICdyZWR1Y2UnKTogICAgICgnZnVuY3Rvb2xzJywgJ3JlZHVjZScpLAogICAgICgnX19idWlsdGluX18nLCAnaW50ZXJuJyk6ICAgICAoJ3N5cycsICdpbnRlcm4nKSwKICAgICAoJ19fYnVpbHRpbl9fJywgJ3VuaWNocicpOiAgICAgKCdidWlsdGlucycsICdjaHInKSwKLSAgICAoJ19fYnVpbHRpbl9fJywgJ2Jhc2VzdHJpbmcnKTogKCdidWlsdGlucycsICdzdHInKSwKKyAgICAoJ19fYnVpbHRpbl9fJywgJ3VuaWNvZGUnKTogICAgKCdidWlsdGlucycsICdzdHInKSwKICAgICAoJ19fYnVpbHRpbl9fJywgJ2xvbmcnKTogICAgICAgKCdidWlsdGlucycsICdpbnQnKSwKICAgICAoJ2l0ZXJ0b29scycsICdpemlwJyk6ICAgICAgICAgKCdidWlsdGlucycsICd6aXAnKSwKICAgICAoJ2l0ZXJ0b29scycsICdpbWFwJyk6ICAgICAgICAgKCdidWlsdGlucycsICdtYXAnKSwKICAgICAoJ2l0ZXJ0b29scycsICdpZmlsdGVyJyk6ICAgICAgKCdidWlsdGlucycsICdmaWx0ZXInKSwKICAgICAoJ2l0ZXJ0b29scycsICdpZmlsdGVyZmFsc2UnKTogKCdpdGVydG9vbHMnLCAnZmlsdGVyZmFsc2UnKSwKKyAgICAoJ2l0ZXJ0b29scycsICdpemlwX2xvbmdlc3QnKTogKCdpdGVydG9vbHMnLCAnemlwX2xvbmdlc3QnKSwKKyAgICAoJ1VzZXJEaWN0JywgJ0l0ZXJhYmxlVXNlckRpY3QnKTogKCdjb2xsZWN0aW9ucycsICdVc2VyRGljdCcpLAorICAgICgnVXNlckxpc3QnLCAnVXNlckxpc3QnKTogKCdjb2xsZWN0aW9ucycsICdVc2VyTGlzdCcpLAorICAgICgnVXNlclN0cmluZycsICdVc2VyU3RyaW5nJyk6ICgnY29sbGVjdGlvbnMnLCAnVXNlclN0cmluZycpLAorICAgICgnd2hpY2hkYicsICd3aGljaGRiJyk6ICgnZGJtJywgJ3doaWNoZGInKSwKKyAgICAoJ19zb2NrZXQnLCAnZnJvbWZkJyk6ICgnc29ja2V0JywgJ2Zyb21mZCcpLAorICAgICgnX211bHRpcHJvY2Vzc2luZycsICdDb25uZWN0aW9uJyk6ICgnbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24nLCAnQ29ubmVjdGlvbicpLAorICAgICgnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MnLCAnUHJvY2VzcycpOiAoJ211bHRpcHJvY2Vzc2luZy5jb250ZXh0JywgJ1Byb2Nlc3MnKSwKKyAgICAoJ211bHRpcHJvY2Vzc2luZy5mb3JraW5nJywgJ1BvcGVuJyk6ICgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmsnLCAnUG9wZW4nKSwKKyAgICAoJ3VybGxpYicsICdDb250ZW50VG9vU2hvcnRFcnJvcicpOiAoJ3VybGxpYi5lcnJvcicsICdDb250ZW50VG9vU2hvcnRFcnJvcicpLAorICAgICgndXJsbGliJywgJ2dldHByb3hpZXMnKTogKCd1cmxsaWIucmVxdWVzdCcsICdnZXRwcm94aWVzJyksCisgICAgKCd1cmxsaWInLCAncGF0aG5hbWUydXJsJyk6ICgndXJsbGliLnJlcXVlc3QnLCAncGF0aG5hbWUydXJsJyksCisgICAgKCd1cmxsaWInLCAncXVvdGVfcGx1cycpOiAoJ3VybGxpYi5wYXJzZScsICdxdW90ZV9wbHVzJyksCisgICAgKCd1cmxsaWInLCAncXVvdGUnKTogKCd1cmxsaWIucGFyc2UnLCAncXVvdGUnKSwKKyAgICAoJ3VybGxpYicsICd1bnF1b3RlX3BsdXMnKTogKCd1cmxsaWIucGFyc2UnLCAndW5xdW90ZV9wbHVzJyksCisgICAgKCd1cmxsaWInLCAndW5xdW90ZScpOiAoJ3VybGxpYi5wYXJzZScsICd1bnF1b3RlJyksCisgICAgKCd1cmxsaWInLCAndXJsMnBhdGhuYW1lJyk6ICgndXJsbGliLnJlcXVlc3QnLCAndXJsMnBhdGhuYW1lJyksCisgICAgKCd1cmxsaWInLCAndXJsY2xlYW51cCcpOiAoJ3VybGxpYi5yZXF1ZXN0JywgJ3VybGNsZWFudXAnKSwKKyAgICAoJ3VybGxpYicsICd1cmxlbmNvZGUnKTogKCd1cmxsaWIucGFyc2UnLCAndXJsZW5jb2RlJyksCisgICAgKCd1cmxsaWInLCAndXJsb3BlbicpOiAoJ3VybGxpYi5yZXF1ZXN0JywgJ3VybG9wZW4nKSwKKyAgICAoJ3VybGxpYicsICd1cmxyZXRyaWV2ZScpOiAoJ3VybGxpYi5yZXF1ZXN0JywgJ3VybHJldHJpZXZlJyksCisgICAgKCd1cmxsaWIyJywgJ0hUVFBFcnJvcicpOiAoJ3VybGxpYi5lcnJvcicsICdIVFRQRXJyb3InKSwKKyAgICAoJ3VybGxpYjInLCAnVVJMRXJyb3InKTogKCd1cmxsaWIuZXJyb3InLCAnVVJMRXJyb3InKSwKIH0KIAogUFlUSE9OMl9FWENFUFRJT05TID0gKApAQCAtMTI3LDExICsxNDEsOTcgQEAKICAgICAiWmVyb0RpdmlzaW9uRXJyb3IiLAogKQogCit0cnk6CisgICAgV2luZG93c0Vycm9yCitleGNlcHQgTmFtZUVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgUFlUSE9OMl9FWENFUFRJT05TICs9ICgiV2luZG93c0Vycm9yIiwpCisKIGZvciBleGNuYW1lIGluIFBZVEhPTjJfRVhDRVBUSU9OUzoKICAgICBOQU1FX01BUFBJTkdbKCJleGNlcHRpb25zIiwgZXhjbmFtZSldID0gKCJidWlsdGlucyIsIGV4Y25hbWUpCiAKLU5BTUVfTUFQUElOR1soImV4Y2VwdGlvbnMiLCAiU3RhbmRhcmRFcnJvciIpXSA9ICgiYnVpbHRpbnMiLCAiRXhjZXB0aW9uIikKK01VTFRJUFJPQ0VTU0lOR19FWENFUFRJT05TID0gKAorICAgICdBdXRoZW50aWNhdGlvbkVycm9yJywKKyAgICAnQnVmZmVyVG9vU2hvcnQnLAorICAgICdQcm9jZXNzRXJyb3InLAorICAgICdUaW1lb3V0RXJyb3InLAorKQorCitmb3IgZXhjbmFtZSBpbiBNVUxUSVBST0NFU1NJTkdfRVhDRVBUSU9OUzoKKyAgICBOQU1FX01BUFBJTkdbKCJtdWx0aXByb2Nlc3NpbmciLCBleGNuYW1lKV0gPSAoIm11bHRpcHJvY2Vzc2luZy5jb250ZXh0IiwgZXhjbmFtZSkKIAogIyBTYW1lLCBidXQgZm9yIDMueCB0byAyLngKIFJFVkVSU0VfSU1QT1JUX01BUFBJTkcgPSBkaWN0KCh2LCBrKSBmb3IgKGssIHYpIGluIElNUE9SVF9NQVBQSU5HLml0ZW1zKCkpCithc3NlcnQgbGVuKFJFVkVSU0VfSU1QT1JUX01BUFBJTkcpID09IGxlbihJTVBPUlRfTUFQUElORykKIFJFVkVSU0VfTkFNRV9NQVBQSU5HID0gZGljdCgodiwgaykgZm9yIChrLCB2KSBpbiBOQU1FX01BUFBJTkcuaXRlbXMoKSkKK2Fzc2VydCBsZW4oUkVWRVJTRV9OQU1FX01BUFBJTkcpID09IGxlbihOQU1FX01BUFBJTkcpCisKKyMgTm9uLW11dHVhbCBtYXBwaW5ncy4KKworSU1QT1JUX01BUFBJTkcudXBkYXRlKHsKKyAgICAnY1BpY2tsZSc6ICdwaWNrbGUnLAorICAgICdfZWxlbWVudHRyZWUnOiAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJywKKyAgICAnRmlsZURpYWxvZyc6ICd0a2ludGVyLmZpbGVkaWFsb2cnLAorICAgICdTaW1wbGVEaWFsb2cnOiAndGtpbnRlci5zaW1wbGVkaWFsb2cnLAorICAgICdEb2NYTUxSUENTZXJ2ZXInOiAneG1scnBjLnNlcnZlcicsCisgICAgJ1NpbXBsZUhUVFBTZXJ2ZXInOiAnaHR0cC5zZXJ2ZXInLAorICAgICdDR0lIVFRQU2VydmVyJzogJ2h0dHAuc2VydmVyJywKK30pCisKK1JFVkVSU0VfSU1QT1JUX01BUFBJTkcudXBkYXRlKHsKKyAgICAnX2J6Mic6ICdiejInLAorICAgICdfZGJtJzogJ2RibScsCisgICAgJ19mdW5jdG9vbHMnOiAnZnVuY3Rvb2xzJywKKyAgICAnX2dkYm0nOiAnZ2RibScsCisgICAgJ19waWNrbGUnOiAncGlja2xlJywKK30pCisKK05BTUVfTUFQUElORy51cGRhdGUoeworICAgICgnX19idWlsdGluX18nLCAnYmFzZXN0cmluZycpOiAoJ2J1aWx0aW5zJywgJ3N0cicpLAorICAgICgnZXhjZXB0aW9ucycsICdTdGFuZGFyZEVycm9yJyk6ICgnYnVpbHRpbnMnLCAnRXhjZXB0aW9uJyksCisgICAgKCdVc2VyRGljdCcsICdVc2VyRGljdCcpOiAoJ2NvbGxlY3Rpb25zJywgJ1VzZXJEaWN0JyksCisgICAgKCdzb2NrZXQnLCAnX3NvY2tldG9iamVjdCcpOiAoJ3NvY2tldCcsICdTb2NrZXRUeXBlJyksCit9KQorCitSRVZFUlNFX05BTUVfTUFQUElORy51cGRhdGUoeworICAgICgnX2Z1bmN0b29scycsICdyZWR1Y2UnKTogKCdfX2J1aWx0aW5fXycsICdyZWR1Y2UnKSwKKyAgICAoJ3RraW50ZXIuZmlsZWRpYWxvZycsICdGaWxlRGlhbG9nJyk6ICgnRmlsZURpYWxvZycsICdGaWxlRGlhbG9nJyksCisgICAgKCd0a2ludGVyLmZpbGVkaWFsb2cnLCAnTG9hZEZpbGVEaWFsb2cnKTogKCdGaWxlRGlhbG9nJywgJ0xvYWRGaWxlRGlhbG9nJyksCisgICAgKCd0a2ludGVyLmZpbGVkaWFsb2cnLCAnU2F2ZUZpbGVEaWFsb2cnKTogKCdGaWxlRGlhbG9nJywgJ1NhdmVGaWxlRGlhbG9nJyksCisgICAgKCd0a2ludGVyLnNpbXBsZWRpYWxvZycsICdTaW1wbGVEaWFsb2cnKTogKCdTaW1wbGVEaWFsb2cnLCAnU2ltcGxlRGlhbG9nJyksCisgICAgKCd4bWxycGMuc2VydmVyJywgJ1NlcnZlckhUTUxEb2MnKTogKCdEb2NYTUxSUENTZXJ2ZXInLCAnU2VydmVySFRNTERvYycpLAorICAgICgneG1scnBjLnNlcnZlcicsICdYTUxSUENEb2NHZW5lcmF0b3InKToKKyAgICAgICAgKCdEb2NYTUxSUENTZXJ2ZXInLCAnWE1MUlBDRG9jR2VuZXJhdG9yJyksCisgICAgKCd4bWxycGMuc2VydmVyJywgJ0RvY1hNTFJQQ1JlcXVlc3RIYW5kbGVyJyk6CisgICAgICAgICgnRG9jWE1MUlBDU2VydmVyJywgJ0RvY1hNTFJQQ1JlcXVlc3RIYW5kbGVyJyksCisgICAgKCd4bWxycGMuc2VydmVyJywgJ0RvY1hNTFJQQ1NlcnZlcicpOgorICAgICAgICAoJ0RvY1hNTFJQQ1NlcnZlcicsICdEb2NYTUxSUENTZXJ2ZXInKSwKKyAgICAoJ3htbHJwYy5zZXJ2ZXInLCAnRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXInKToKKyAgICAgICAgKCdEb2NYTUxSUENTZXJ2ZXInLCAnRG9jQ0dJWE1MUlBDUmVxdWVzdEhhbmRsZXInKSwKKyAgICAoJ2h0dHAuc2VydmVyJywgJ1NpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcicpOgorICAgICAgICAoJ1NpbXBsZUhUVFBTZXJ2ZXInLCAnU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyJyksCisgICAgKCdodHRwLnNlcnZlcicsICdDR0lIVFRQUmVxdWVzdEhhbmRsZXInKToKKyAgICAgICAgKCdDR0lIVFRQU2VydmVyJywgJ0NHSUhUVFBSZXF1ZXN0SGFuZGxlcicpLAorICAgICgnX3NvY2tldCcsICdzb2NrZXQnKTogKCdzb2NrZXQnLCAnX3NvY2tldG9iamVjdCcpLAorfSkKKworUFlUSE9OM19PU0VSUk9SX0VYQ0VQVElPTlMgPSAoCisgICAgJ0Jyb2tlblBpcGVFcnJvcicsCisgICAgJ0NoaWxkUHJvY2Vzc0Vycm9yJywKKyAgICAnQ29ubmVjdGlvbkFib3J0ZWRFcnJvcicsCisgICAgJ0Nvbm5lY3Rpb25FcnJvcicsCisgICAgJ0Nvbm5lY3Rpb25SZWZ1c2VkRXJyb3InLAorICAgICdDb25uZWN0aW9uUmVzZXRFcnJvcicsCisgICAgJ0ZpbGVFeGlzdHNFcnJvcicsCisgICAgJ0ZpbGVOb3RGb3VuZEVycm9yJywKKyAgICAnSW50ZXJydXB0ZWRFcnJvcicsCisgICAgJ0lzQURpcmVjdG9yeUVycm9yJywKKyAgICAnTm90QURpcmVjdG9yeUVycm9yJywKKyAgICAnUGVybWlzc2lvbkVycm9yJywKKyAgICAnUHJvY2Vzc0xvb2t1cEVycm9yJywKKyAgICAnVGltZW91dEVycm9yJywKKykKKworZm9yIGV4Y25hbWUgaW4gUFlUSE9OM19PU0VSUk9SX0VYQ0VQVElPTlM6CisgICAgUkVWRVJTRV9OQU1FX01BUFBJTkdbKCdidWlsdGlucycsIGV4Y25hbWUpXSA9ICgnZXhjZXB0aW9ucycsICdPU0Vycm9yJykKZGlmZiAtLWdpdCBhL0xpYi9fZHVtbXlfdGhyZWFkLnB5IGIvTGliL19kdW1teV90aHJlYWQucHkKaW5kZXggMTNiMWYyNi4uYjY3Y2ZiOSAxMDA2NDQKLS0tIGEvTGliL19kdW1teV90aHJlYWQucHkKKysrIGIvTGliL19kdW1teV90aHJlYWQucHkKQEAgLTgxLDYgKzgxLDEwIEBACiAgICAgICAgIHJhaXNlIGVycm9yKCJzZXR0aW5nIHRocmVhZCBzdGFjayBzaXplIG5vdCBzdXBwb3J0ZWQiKQogICAgIHJldHVybiAwCiAKK2RlZiBfc2V0X3NlbnRpbmVsKCk6CisgICAgIiIiRHVtbXkgaW1wbGVtZW50YXRpb24gb2YgX3RocmVhZC5fc2V0X3NlbnRpbmVsKCkuIiIiCisgICAgcmV0dXJuIExvY2tUeXBlKCkKKwogY2xhc3MgTG9ja1R5cGUob2JqZWN0KToKICAgICAiIiJDbGFzcyBpbXBsZW1lbnRpbmcgZHVtbXkgaW1wbGVtZW50YXRpb24gb2YgX3RocmVhZC5Mb2NrVHlwZS4KIApkaWZmIC0tZ2l0IGEvTGliL19vc3hfc3VwcG9ydC5weSBiL0xpYi9fb3N4X3N1cHBvcnQucHkKaW5kZXggNTBiMmQxNy4uYjA3ZTc1ZCAxMDA2NDQKLS0tIGEvTGliL19vc3hfc3VwcG9ydC5weQorKysgYi9MaWIvX29zeF9zdXBwb3J0LnB5CkBAIC0zOCw3ICszOCw3IEBACiAgICAgcGF0aHMgPSBwYXRoLnNwbGl0KG9zLnBhdGhzZXApCiAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChleGVjdXRhYmxlKQogCi0gICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIG9zLm5hbWUgPT0gJ29zMicpIGFuZCAoZXh0ICE9ICcuZXhlJyk6CisgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgogICAgICAgICBleGVjdXRhYmxlID0gZXhlY3V0YWJsZSArICcuZXhlJwogCiAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKGV4ZWN1dGFibGUpOgpAQCAtOTQsNyArOTQsNyBAQAogICAgICAgICBfU1lTVEVNX1ZFUlNJT04gPSAnJwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbignL1N5c3RlbS9MaWJyYXJ5L0NvcmVTZXJ2aWNlcy9TeXN0ZW1WZXJzaW9uLnBsaXN0JykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBXZSdyZSBvbiBhIHBsYWluIGRhcndpbiBib3gsIGZhbGwgYmFjayB0byB0aGUgZGVmYXVsdAogICAgICAgICAgICAgIyBiZWhhdmlvdXIuCiAgICAgICAgICAgICBwYXNzCkBAIC0xODIsNyArMTgyLDcgQEAKICAgICAgICAgIyBDb21waWxlciBpcyBHQ0MsIGNoZWNrIGlmIGl0IGlzIExMVk0tR0NDCiAgICAgICAgIGRhdGEgPSBfcmVhZF9vdXRwdXQoIiclcycgLS12ZXJzaW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjYy5yZXBsYWNlKCInIiwgIidcIidcIiciKSwpKQotICAgICAgICBpZiAnbGx2bS1nY2MnIGluIGRhdGE6CisgICAgICAgIGlmIGRhdGEgYW5kICdsbHZtLWdjYycgaW4gZGF0YToKICAgICAgICAgICAgICMgRm91bmQgTExWTS1HQ0MsIGZhbGwgYmFjayB0byBjbGFuZwogICAgICAgICAgICAgY2MgPSBfZmluZF9idWlsZF90b29sKCdjbGFuZycpCiAKQEAgLTQ1MCw4ICs0NTAsMTYgQEAKICAgICAgICAgIyBjYXNlIGFuZCBkaXNhbGxvdyBpbnN0YWxscy4KICAgICAgICAgY2ZsYWdzID0gX2NvbmZpZ192YXJzLmdldChfSU5JVFBSRSsnQ0ZMQUdTJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb25maWdfdmFycy5nZXQoJ0NGTEFHUycsICcnKSkKLSAgICAgICAgaWYgKChtYWNyZWxlYXNlICsgJy4nKSA+PSAnMTAuNC4nIGFuZAotICAgICAgICAgICAgJy1hcmNoJyBpbiBjZmxhZ3Muc3RyaXAoKSk6CisgICAgICAgIGlmIG1hY3JlbGVhc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbWFjcmVsZWFzZSA9IHR1cGxlKGludChpKSBmb3IgaSBpbiBtYWNyZWxlYXNlLnNwbGl0KCcuJylbMDoyXSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIG1hY3JlbGVhc2UgPSAoMTAsIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIGFzc3VtZSBubyB1bml2ZXJzYWwgc3VwcG9ydAorICAgICAgICAgICAgbWFjcmVsZWFzZSA9ICgxMCwgMCkKKworICAgICAgICBpZiAobWFjcmVsZWFzZSA+PSAoMTAsIDQpKSBhbmQgJy1hcmNoJyBpbiBjZmxhZ3Muc3RyaXAoKToKICAgICAgICAgICAgICMgVGhlIHVuaXZlcnNhbCBidWlsZCB3aWxsIGJ1aWxkIGZhdCBiaW5hcmllcywgYnV0IG5vdCBvbgogICAgICAgICAgICAgIyBzeXN0ZW1zIGJlZm9yZSAxMC40CiAKZGlmZiAtLWdpdCBhL0xpYi9fcHlpby5weSBiL0xpYi9fcHlpby5weQppbmRleCBhMGM0YjI1Li5mMWUzYTc5IDEwMDY0NAotLS0gYS9MaWIvX3B5aW8ucHkKKysrIGIvTGliL19weWlvLnB5CkBAIC0yNCw4ICsyNCw4IEBACiBERUZBVUxUX0JVRkZFUl9TSVpFID0gOCAqIDEwMjQgICMgYnl0ZXMKIAogIyBOT1RFOiBCYXNlIGNsYXNzZXMgZGVmaW5lZCBoZXJlIGFyZSByZWdpc3RlcmVkIHdpdGggdGhlICJvZmZpY2lhbCIgQUJDcwotIyBkZWZpbmVkIGluIGlvLnB5LiBXZSBkb24ndCB1c2UgcmVhbCBpbmhlcml0YW5jZSB0aG91Z2gsIGJlY2F1c2Ugd2UgZG9uJ3QKLSMgd2FudCB0byBpbmhlcml0IHRoZSBDIGltcGxlbWVudGF0aW9ucy4KKyMgZGVmaW5lZCBpbiBpby5weS4gV2UgZG9uJ3QgdXNlIHJlYWwgaW5oZXJpdGFuY2UgdGhvdWdoLCBiZWNhdXNlIHdlIGRvbid0IHdhbnQKKyMgdG8gaW5oZXJpdCB0aGUgQyBpbXBsZW1lbnRhdGlvbnMuCiAKICMgUmViaW5kIGZvciBjb21wYXRpYmlsaXR5CiBCbG9ja2luZ0lPRXJyb3IgPSBCbG9ja2luZ0lPRXJyb3IKQEAgLTM0LDcgKzM0LDcgQEAKIGRlZiBvcGVuKGZpbGUsIG1vZGU9InIiLCBidWZmZXJpbmc9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLAogICAgICAgICAgbmV3bGluZT1Ob25lLCBjbG9zZWZkPVRydWUsIG9wZW5lcj1Ob25lKToKIAotICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIElPRXJyb3IgdXBvbiBmYWlsdXJlLgorICAgIHIiIiJPcGVuIGZpbGUgYW5kIHJldHVybiBhIHN0cmVhbS4gIFJhaXNlIE9TRXJyb3IgdXBvbiBmYWlsdXJlLgogCiAgICAgZmlsZSBpcyBlaXRoZXIgYSB0ZXh0IG9yIGJ5dGUgc3RyaW5nIGdpdmluZyB0aGUgbmFtZSAoYW5kIHRoZSBwYXRoCiAgICAgaWYgdGhlIGZpbGUgaXNuJ3QgaW4gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkpIG9mIHRoZSBmaWxlIHRvCkBAIC02Miw4ICs2Miw3IEBACiAgICAgJ2InICAgICAgIGJpbmFyeSBtb2RlCiAgICAgJ3QnICAgICAgIHRleHQgbW9kZSAoZGVmYXVsdCkKICAgICAnKycgICAgICAgb3BlbiBhIGRpc2sgZmlsZSBmb3IgdXBkYXRpbmcgKHJlYWRpbmcgYW5kIHdyaXRpbmcpCi0gICAgJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eTsgdW5uZWVkZWQKLSAgICAgICAgICAgICAgZm9yIG5ldyBjb2RlKQorICAgICdVJyAgICAgICB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIChkZXByZWNhdGVkKQogICAgID09PT09PT09PSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogICAgIFRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb20KQEAgLTc5LDYgKzc4LDEwIEBACiAgICAgcmV0dXJuZWQgYXMgc3RyaW5ncywgdGhlIGJ5dGVzIGhhdmluZyBiZWVuIGZpcnN0IGRlY29kZWQgdXNpbmcgYQogICAgIHBsYXRmb3JtLWRlcGVuZGVudCBlbmNvZGluZyBvciB1c2luZyB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIGlmIGdpdmVuLgogCisgICAgJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaW4gZnV0dXJlIHZlcnNpb25zCisgICAgb2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2wKKyAgICB1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS4KKwogICAgIGJ1ZmZlcmluZyBpcyBhbiBvcHRpb25hbCBpbnRlZ2VyIHVzZWQgdG8gc2V0IHRoZSBidWZmZXJpbmcgcG9saWN5LgogICAgIFBhc3MgMCB0byBzd2l0Y2ggYnVmZmVyaW5nIG9mZiAob25seSBhbGxvd2VkIGluIGJpbmFyeSBtb2RlKSwgMSB0byBzZWxlY3QKICAgICBsaW5lIGJ1ZmZlcmluZyAob25seSB1c2FibGUgaW4gdGV4dCBtb2RlKSwgYW5kIGFuIGludGVnZXIgPiAxIHRvIGluZGljYXRlCkBAIC0xMjksNiArMTMyLDggQEAKICAgICBiZSBrZXB0IG9wZW4gd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQuIFRoaXMgZG9lcyBub3Qgd29yayB3aGVuIGEgZmlsZSBuYW1lIGlzCiAgICAgZ2l2ZW4gYW5kIG11c3QgYmUgVHJ1ZSBpbiB0aGF0IGNhc2UuCiAKKyAgICBUaGUgbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG5vbi1pbmhlcml0YWJsZS4KKwogICAgIEEgY3VzdG9tIG9wZW5lciBjYW4gYmUgdXNlZCBieSBwYXNzaW5nIGEgY2FsbGFibGUgYXMgKm9wZW5lciouIFRoZQogICAgIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZSBvYmplY3QgaXMgdGhlbiBvYnRhaW5lZCBieSBjYWxsaW5nCiAgICAgKm9wZW5lciogd2l0aCAoKmZpbGUqLCAqZmxhZ3MqKS4gKm9wZW5lciogbXVzdCByZXR1cm4gYW4gb3BlbiBmaWxlCkBAIC0xNzIsNiArMTc3LDkgQEAKICAgICBpZiAiVSIgaW4gbW9kZXM6CiAgICAgICAgIGlmIGNyZWF0aW5nIG9yIHdyaXRpbmcgb3IgYXBwZW5kaW5nOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgdXNlIFUgYW5kIHdyaXRpbmcgbW9kZSBhdCBvbmNlIikKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgcmVhZGluZyA9IFRydWUKICAgICBpZiB0ZXh0IGFuZCBiaW5hcnk6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdGV4dCBhbmQgYmluYXJ5IG1vZGUgYXQgb25jZSIpCkBAIC0xOTIsMzggKzIwMCw0NSBAQAogICAgICAgICAgICAgICAgICAoYXBwZW5kaW5nIGFuZCAiYSIgb3IgIiIpICsKICAgICAgICAgICAgICAgICAgKHVwZGF0aW5nIGFuZCAiKyIgb3IgIiIpLAogICAgICAgICAgICAgICAgICBjbG9zZWZkLCBvcGVuZXI9b3BlbmVyKQotICAgIGxpbmVfYnVmZmVyaW5nID0gRmFsc2UKLSAgICBpZiBidWZmZXJpbmcgPT0gMSBvciBidWZmZXJpbmcgPCAwIGFuZCByYXcuaXNhdHR5KCk6Ci0gICAgICAgIGJ1ZmZlcmluZyA9IC0xCi0gICAgICAgIGxpbmVfYnVmZmVyaW5nID0gVHJ1ZQotICAgIGlmIGJ1ZmZlcmluZyA8IDA6Ci0gICAgICAgIGJ1ZmZlcmluZyA9IERFRkFVTFRfQlVGRkVSX1NJWkUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgYnMgPSBvcy5mc3RhdChyYXcuZmlsZW5vKCkpLnN0X2Jsa3NpemUKLSAgICAgICAgZXhjZXB0IChvcy5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICAgICAgcGFzcworICAgIHJlc3VsdCA9IHJhdworICAgIHRyeToKKyAgICAgICAgbGluZV9idWZmZXJpbmcgPSBGYWxzZQorICAgICAgICBpZiBidWZmZXJpbmcgPT0gMSBvciBidWZmZXJpbmcgPCAwIGFuZCByYXcuaXNhdHR5KCk6CisgICAgICAgICAgICBidWZmZXJpbmcgPSAtMQorICAgICAgICAgICAgbGluZV9idWZmZXJpbmcgPSBUcnVlCisgICAgICAgIGlmIGJ1ZmZlcmluZyA8IDA6CisgICAgICAgICAgICBidWZmZXJpbmcgPSBERUZBVUxUX0JVRkZFUl9TSVpFCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYnMgPSBvcy5mc3RhdChyYXcuZmlsZW5vKCkpLnN0X2Jsa3NpemUKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgYnMgPiAxOgorICAgICAgICAgICAgICAgICAgICBidWZmZXJpbmcgPSBicworICAgICAgICBpZiBidWZmZXJpbmcgPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBidWZmZXJpbmcgc2l6ZSIpCisgICAgICAgIGlmIGJ1ZmZlcmluZyA9PSAwOgorICAgICAgICAgICAgaWYgYmluYXJ5OgorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNhbid0IGhhdmUgdW5idWZmZXJlZCB0ZXh0IEkvTyIpCisgICAgICAgIGlmIHVwZGF0aW5nOgorICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJpbmcpCisgICAgICAgIGVsaWYgY3JlYXRpbmcgb3Igd3JpdGluZyBvciBhcHBlbmRpbmc6CisgICAgICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFdyaXRlcihyYXcsIGJ1ZmZlcmluZykKKyAgICAgICAgZWxpZiByZWFkaW5nOgorICAgICAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSZWFkZXIocmF3LCBidWZmZXJpbmcpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBicyA+IDE6Ci0gICAgICAgICAgICAgICAgYnVmZmVyaW5nID0gYnMKLSAgICBpZiBidWZmZXJpbmcgPCAwOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIGJ1ZmZlcmluZyBzaXplIikKLSAgICBpZiBidWZmZXJpbmcgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gbW9kZTogJXIiICUgbW9kZSkKKyAgICAgICAgcmVzdWx0ID0gYnVmZmVyCiAgICAgICAgIGlmIGJpbmFyeToKLSAgICAgICAgICAgIHJldHVybiByYXcKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2FuJ3QgaGF2ZSB1bmJ1ZmZlcmVkIHRleHQgSS9PIikKLSAgICBpZiB1cGRhdGluZzoKLSAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRSYW5kb20ocmF3LCBidWZmZXJpbmcpCi0gICAgZWxpZiBjcmVhdGluZyBvciB3cml0aW5nIG9yIGFwcGVuZGluZzoKLSAgICAgICAgYnVmZmVyID0gQnVmZmVyZWRXcml0ZXIocmF3LCBidWZmZXJpbmcpCi0gICAgZWxpZiByZWFkaW5nOgotICAgICAgICBidWZmZXIgPSBCdWZmZXJlZFJlYWRlcihyYXcsIGJ1ZmZlcmluZykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmtub3duIG1vZGU6ICVyIiAlIG1vZGUpCi0gICAgaWYgYmluYXJ5OgotICAgICAgICByZXR1cm4gYnVmZmVyCi0gICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLCBsaW5lX2J1ZmZlcmluZykKLSAgICB0ZXh0Lm1vZGUgPSBtb2RlCi0gICAgcmV0dXJuIHRleHQKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgZXJyb3JzLCBuZXdsaW5lLCBsaW5lX2J1ZmZlcmluZykKKyAgICAgICAgcmVzdWx0ID0gdGV4dAorICAgICAgICB0ZXh0Lm1vZGUgPSBtb2RlCisgICAgICAgIHJldHVybiByZXN1bHQKKyAgICBleGNlcHQ6CisgICAgICAgIHJlc3VsdC5jbG9zZSgpCisgICAgICAgIHJhaXNlCiAKIAogY2xhc3MgRG9jRGVzY3JpcHRvcjoKQEAgLTI1NCw3ICsyNjksNyBAQAogdHJ5OgogICAgIFVuc3VwcG9ydGVkT3BlcmF0aW9uID0gaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24KIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBJT0Vycm9yKToKKyAgICBjbGFzcyBVbnN1cHBvcnRlZE9wZXJhdGlvbihWYWx1ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcGFzcwogCiAKQEAgLTI3OCw3ICsyOTMsNyBAQAogICAgIHJlYWRpbnRvKSBuZWVkZWQuIFRleHQgSS9PIGNsYXNzZXMgd29yayB3aXRoIHN0ciBkYXRhLgogCiAgICAgTm90ZSB0aGF0IGNhbGxpbmcgYW55IG1ldGhvZCAoZXZlbiBpbnF1aXJpZXMpIG9uIGEgY2xvc2VkIHN0cmVhbSBpcwotICAgIHVuZGVmaW5lZC4gSW1wbGVtZW50YXRpb25zIG1heSByYWlzZSBJT0Vycm9yIGluIHRoaXMgY2FzZS4KKyAgICB1bmRlZmluZWQuIEltcGxlbWVudGF0aW9ucyBtYXkgcmFpc2UgT1NFcnJvciBpbiB0aGlzIGNhc2UuCiAKICAgICBJT0Jhc2UgKGFuZCBpdHMgc3ViY2xhc3Nlcykgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIG1lYW5pbmcKICAgICB0aGF0IGFuIElPQmFzZSBvYmplY3QgY2FuIGJlIGl0ZXJhdGVkIG92ZXIgeWllbGRpbmcgdGhlIGxpbmVzIGluIGEKQEAgLTI5NCw3ICszMDksNyBAQAogICAgICMjIyBJbnRlcm5hbCAjIyMKIAogICAgIGRlZiBfdW5zdXBwb3J0ZWQoc2VsZiwgbmFtZSk6Ci0gICAgICAgICIiIkludGVybmFsOiByYWlzZSBhbiBJT0Vycm9yIGV4Y2VwdGlvbiBmb3IgdW5zdXBwb3J0ZWQgb3BlcmF0aW9ucy4iIiIKKyAgICAgICAgIiIiSW50ZXJuYWw6IHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uIGZvciB1bnN1cHBvcnRlZCBvcGVyYXRpb25zLiIiIgogICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigiJXMuJXMoKSBub3Qgc3VwcG9ydGVkIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgbmFtZSkpCiAKQEAgLTQ0MSw3ICs0NTYsNyBAQAogICAgIGRlZiBmaWxlbm8oc2VsZik6CiAgICAgICAgICIiIlJldHVybnMgdW5kZXJseWluZyBmaWxlIGRlc2NyaXB0b3IgKGFuIGludCkgaWYgb25lIGV4aXN0cy4KIAotICAgICAgICBBbiBJT0Vycm9yIGlzIHJhaXNlZCBpZiB0aGUgSU8gb2JqZWN0IGRvZXMgbm90IHVzZSBhIGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgQW4gT1NFcnJvciBpcyByYWlzZWQgaWYgdGhlIElPIG9iamVjdCBkb2VzIG5vdCB1c2UgYSBmaWxlIGRlc2NyaXB0b3IuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgiZmlsZW5vIikKIApAQCAtNDU1LDExICs0NzAsMTEgQEAKIAogICAgICMjIyBSZWFkbGluZVtzXSBhbmQgd3JpdGVsaW5lcyAjIyMKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD0tMSk6CisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgogICAgICAgICByIiIiUmVhZCBhbmQgcmV0dXJuIGEgbGluZSBvZiBieXRlcyBmcm9tIHRoZSBzdHJlYW0uCiAKLSAgICAgICAgSWYgbGltaXQgaXMgc3BlY2lmaWVkLCBhdCBtb3N0IGxpbWl0IGJ5dGVzIHdpbGwgYmUgcmVhZC4KLSAgICAgICAgTGltaXQgc2hvdWxkIGJlIGFuIGludC4KKyAgICAgICAgSWYgc2l6ZSBpcyBzcGVjaWZpZWQsIGF0IG1vc3Qgc2l6ZSBieXRlcyB3aWxsIGJlIHJlYWQuCisgICAgICAgIFNpemUgc2hvdWxkIGJlIGFuIGludC4KIAogICAgICAgICBUaGUgbGluZSB0ZXJtaW5hdG9yIGlzIGFsd2F5cyBiJ1xuJyBmb3IgYmluYXJ5IGZpbGVzOyBmb3IgdGV4dAogICAgICAgICBmaWxlcywgdGhlIG5ld2xpbmVzIGFyZ3VtZW50IHRvIG9wZW4gY2FuIGJlIHVzZWQgdG8gc2VsZWN0IHRoZSBsaW5lCkBAIC00NzIsMTggKzQ4NywxOCBAQAogICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkYWhlYWQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxCiAgICAgICAgICAgICAgICAgbiA9IChyZWFkYWhlYWQuZmluZChiIlxuIikgKyAxKSBvciBsZW4ocmVhZGFoZWFkKQotICAgICAgICAgICAgICAgIGlmIGxpbWl0ID49IDA6Ci0gICAgICAgICAgICAgICAgICAgIG4gPSBtaW4obiwgbGltaXQpCisgICAgICAgICAgICAgICAgaWYgc2l6ZSA+PSAwOgorICAgICAgICAgICAgICAgICAgICBuID0gbWluKG4sIHNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG4KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRlZiBucmVhZGFoZWFkKCk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKLSAgICAgICAgaWYgbGltaXQgaXMgTm9uZToKLSAgICAgICAgICAgIGxpbWl0ID0gLTEKLSAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShsaW1pdCwgaW50KToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibGltaXQgbXVzdCBiZSBhbiBpbnRlZ2VyIikKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2Uoc2l6ZSwgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigic2l6ZSBtdXN0IGJlIGFuIGludGVnZXIiKQogICAgICAgICByZXMgPSBieXRlYXJyYXkoKQotICAgICAgICB3aGlsZSBsaW1pdCA8IDAgb3IgbGVuKHJlcykgPCBsaW1pdDoKKyAgICAgICAgd2hpbGUgc2l6ZSA8IDAgb3IgbGVuKHJlcykgPCBzaXplOgogICAgICAgICAgICAgYiA9IHNlbGYucmVhZChucmVhZGFoZWFkKCkpCiAgICAgICAgICAgICBpZiBub3QgYjoKICAgICAgICAgICAgICAgICBicmVhawpAQCAtNTQyLDE3ICs1NTcsMTcgQEAKICAgICAjIHByaW1pdGl2ZSBvcGVyYXRpb24sIGJ1dCB0aGF0IHdvdWxkIGxlYWQgdG8gbmFzdHkgcmVjdXJzaW9uIGluIGNhc2UKICAgICAjIGEgc3ViY2xhc3MgZG9lc24ndCBpbXBsZW1lbnQgZWl0aGVyLikKIAotICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAiIiJSZWFkIGFuZCByZXR1cm4gdXAgdG8gbiBieXRlcywgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBzaXplIGJ5dGVzLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAogICAgICAgICBSZXR1cm5zIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBvbiBFT0YsIG9yIE5vbmUgaWYgdGhlIG9iamVjdCBpcwogICAgICAgICBzZXQgbm90IHRvIGJsb2NrIGFuZCBoYXMgbm8gZGF0YSB0byByZWFkLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgaWYgc2l6ZSA8IDA6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5yZWFkYWxsKCkKLSAgICAgICAgYiA9IGJ5dGVhcnJheShuLl9faW5kZXhfXygpKQorICAgICAgICBiID0gYnl0ZWFycmF5KHNpemUuX19pbmRleF9fKCkpCiAgICAgICAgIG4gPSBzZWxmLnJlYWRpbnRvKGIpCiAgICAgICAgIGlmIG4gaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBOb25lCkBAIC02MTAsOCArNjI1LDggQEAKICAgICBpbXBsZW1lbnRhdGlvbiwgYnV0IHdyYXAgb25lLgogICAgICIiIgogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHVwIHRvIG4gYnl0ZXMsIHdoZXJlIG4gaXMgYW4gaW50LgorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgYW5kIHJldHVybiB1cCB0byBzaXplIGJ5dGVzLCB3aGVyZSBzaXplIGlzIGFuIGludC4KIAogICAgICAgICBJZiB0aGUgYXJndW1lbnQgaXMgb21pdHRlZCwgTm9uZSwgb3IgbmVnYXRpdmUsIHJlYWRzIGFuZAogICAgICAgICByZXR1cm5zIGFsbCBkYXRhIHVudGlsIEVPRi4KQEAgLTYzMCw5ICs2NDUsOSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdW5zdXBwb3J0ZWQoInJlYWQiKQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgICIiIlJlYWQgdXAgdG8gbiBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbCwKLSAgICAgICAgd2hlcmUgbiBpcyBhbiBpbnQuCisgICAgZGVmIHJlYWQxKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSBieXRlcyB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbCwKKyAgICAgICAgd2hlcmUgc2l6ZSBpcyBhbiBpbnQuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl91bnN1cHBvcnRlZCgicmVhZDEiKQogCkBAIC02OTksMTMgKzcxNCwxMyBAQAogICAgIGRlZiBzZWVrKHNlbGYsIHBvcywgd2hlbmNlPTApOgogICAgICAgICBuZXdfcG9zaXRpb24gPSBzZWxmLnJhdy5zZWVrKHBvcywgd2hlbmNlKQogICAgICAgICBpZiBuZXdfcG9zaXRpb24gPCAwOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic2VlaygpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic2VlaygpIHJldHVybmVkIGFuIGludmFsaWQgcG9zaXRpb24iKQogICAgICAgICByZXR1cm4gbmV3X3Bvc2l0aW9uCiAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcG9zID0gc2VsZi5yYXcudGVsbCgpCiAgICAgICAgIGlmIHBvcyA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJ0ZWxsKCkgcmV0dXJuZWQgYW4gaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBwb3MKIAogICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBwb3M9Tm9uZSk6CkBAIC03NzgsNyArNzkzLDcgQEAKICAgICAgICAgY2xzbmFtZSA9IHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcmV0dXJuICI8X3B5aW8uezB9PiIuZm9ybWF0KGNsc25hbWUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gIjxfcHlpby57MH0gbmFtZT17MSFyfT4iLmZvcm1hdChjbHNuYW1lLCBuYW1lKQpAQCAtODE4LDI2ICs4MzMsMzIgQEAKICAgICBkZWYgZ2V0YnVmZmVyKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSByZWFkYWJsZSBhbmQgd3JpdGFibGUgdmlldyBvZiB0aGUgYnVmZmVyLgogICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJnZXRidWZmZXIgb24gY2xvc2VkIGZpbGUiKQogICAgICAgICByZXR1cm4gbWVtb3J5dmlldyhzZWxmLl9idWZmZXIpCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgorICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlYWQgZnJvbSBjbG9zZWQgZmlsZSIpCi0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQotICAgICAgICBpZiBuIDwgMDoKLSAgICAgICAgICAgIG4gPSBsZW4oc2VsZi5fYnVmZmVyKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICBzaXplID0gbGVuKHNlbGYuX2J1ZmZlcikKICAgICAgICAgaWYgbGVuKHNlbGYuX2J1ZmZlcikgPD0gc2VsZi5fcG9zOgogICAgICAgICAgICAgcmV0dXJuIGIiIgotICAgICAgICBuZXdwb3MgPSBtaW4obGVuKHNlbGYuX2J1ZmZlciksIHNlbGYuX3BvcyArIG4pCisgICAgICAgIG5ld3BvcyA9IG1pbihsZW4oc2VsZi5fYnVmZmVyKSwgc2VsZi5fcG9zICsgc2l6ZSkKICAgICAgICAgYiA9IHNlbGYuX2J1ZmZlcltzZWxmLl9wb3MgOiBuZXdwb3NdCiAgICAgICAgIHNlbGYuX3BvcyA9IG5ld3BvcwogICAgICAgICByZXR1cm4gYnl0ZXMoYikKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CiAgICAgICAgICIiIlRoaXMgaXMgdGhlIHNhbWUgYXMgcmVhZC4KICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWQobikKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZChzaXplKQogCiAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKQEAgLTkyNyw3ICs5NDgsNyBAQAogICAgICAgICAiIiJDcmVhdGUgYSBuZXcgYnVmZmVyZWQgcmVhZGVyIHVzaW5nIHRoZSBnaXZlbiByZWFkYWJsZSByYXcgSU8gb2JqZWN0LgogICAgICAgICAiIiIKICAgICAgICAgaWYgbm90IHJhdy5yZWFkYWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignInJhdyIgYXJndW1lbnQgbXVzdCBiZSByZWFkYWJsZS4nKQogCiAgICAgICAgIF9CdWZmZXJlZElPTWl4aW4uX19pbml0X18oc2VsZiwgcmF3KQogICAgICAgICBpZiBidWZmZXJfc2l6ZSA8PSAwOgpAQCAtOTQwLDE4ICs5NjEsMTggQEAKICAgICAgICAgc2VsZi5fcmVhZF9idWYgPSBiIiIKICAgICAgICAgc2VsZi5fcmVhZF9wb3MgPSAwCiAKLSAgICBkZWYgcmVhZChzZWxmLCBuPU5vbmUpOgotICAgICAgICAiIiJSZWFkIG4gYnl0ZXMuCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgIiIiUmVhZCBzaXplIGJ5dGVzLgogCi0gICAgICAgIFJldHVybnMgZXhhY3RseSBuIGJ5dGVzIG9mIGRhdGEgdW5sZXNzIHRoZSB1bmRlcmx5aW5nIHJhdyBJTworICAgICAgICBSZXR1cm5zIGV4YWN0bHkgc2l6ZSBieXRlcyBvZiBkYXRhIHVubGVzcyB0aGUgdW5kZXJseWluZyByYXcgSU8KICAgICAgICAgc3RyZWFtIHJlYWNoZXMgRU9GIG9yIGlmIHRoZSBjYWxsIHdvdWxkIGJsb2NrIGluIG5vbi1ibG9ja2luZwotICAgICAgICBtb2RlLiBJZiBuIGlzIG5lZ2F0aXZlLCByZWFkIHVudGlsIEVPRiBvciB1bnRpbCByZWFkKCkgd291bGQKKyAgICAgICAgbW9kZS4gSWYgc2l6ZSBpcyBuZWdhdGl2ZSwgcmVhZCB1bnRpbCBFT0Ygb3IgdW50aWwgcmVhZCgpIHdvdWxkCiAgICAgICAgIGJsb2NrLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbiBpcyBub3QgTm9uZSBhbmQgbiA8IC0xOgorICAgICAgICBpZiBzaXplIGlzIG5vdCBOb25lIGFuZCBzaXplIDwgLTE6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIG51bWJlciBvZiBieXRlcyB0byByZWFkIikKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZChuKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW5sb2NrZWQoc2l6ZSkKIAogICAgIGRlZiBfcmVhZF91bmxvY2tlZChzZWxmLCBuPU5vbmUpOgogICAgICAgICBub2RhdGFfdmFsID0gYiIiCkBAIC0xMDExLDcgKzEwMzIsNyBAQAogICAgICAgICBzZWxmLl9yZWFkX3BvcyA9IDAKICAgICAgICAgcmV0dXJuIG91dFs6bl0gaWYgb3V0IGVsc2Ugbm9kYXRhX3ZhbAogCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICBkZWYgcGVlayhzZWxmLCBzaXplPTApOgogICAgICAgICAiIiJSZXR1cm5zIGJ1ZmZlcmVkIGJ5dGVzIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBwb3NpdGlvbi4KIAogICAgICAgICBUaGUgYXJndW1lbnQgaW5kaWNhdGVzIGEgZGVzaXJlZCBtaW5pbWFsIG51bWJlciBvZiBieXRlczsgd2UKQEAgLTEwMTksNyArMTA0MCw3IEBACiAgICAgICAgIHRoYW4gc2VsZi5idWZmZXJfc2l6ZS4KICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggc2VsZi5fcmVhZF9sb2NrOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BlZWtfdW5sb2NrZWQobikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9wZWVrX3VubG9ja2VkKHNpemUpCiAKICAgICBkZWYgX3BlZWtfdW5sb2NrZWQoc2VsZiwgbj0wKToKICAgICAgICAgd2FudCA9IG1pbihuLCBzZWxmLmJ1ZmZlcl9zaXplKQpAQCAtMTAzNywxOCArMTA1OCwxOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfcG9zID0gMAogICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF9idWZbc2VsZi5fcmVhZF9wb3M6XQogCi0gICAgZGVmIHJlYWQxKHNlbGYsIG4pOgotICAgICAgICAiIiJSZWFkcyB1cCB0byBuIGJ5dGVzLCB3aXRoIGF0IG1vc3Qgb25lIHJlYWQoKSBzeXN0ZW0gY2FsbC4iIiIKLSAgICAgICAgIyBSZXR1cm5zIHVwIHRvIG4gYnl0ZXMuICBJZiBhdCBsZWFzdCBvbmUgYnl0ZSBpcyBidWZmZXJlZCwgd2UKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CisgICAgICAgICIiIlJlYWRzIHVwIHRvIHNpemUgYnl0ZXMsIHdpdGggYXQgbW9zdCBvbmUgcmVhZCgpIHN5c3RlbSBjYWxsLiIiIgorICAgICAgICAjIFJldHVybnMgdXAgdG8gc2l6ZSBieXRlcy4gIElmIGF0IGxlYXN0IG9uZSBieXRlIGlzIGJ1ZmZlcmVkLCB3ZQogICAgICAgICAjIG9ubHkgcmV0dXJuIGJ1ZmZlcmVkIGJ5dGVzLiAgT3RoZXJ3aXNlLCB3ZSBkbyBvbmUgcmF3IHJlYWQuCi0gICAgICAgIGlmIG4gPCAwOgorICAgICAgICBpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm51bWJlciBvZiBieXRlcyB0byByZWFkIG11c3QgYmUgcG9zaXRpdmUiKQotICAgICAgICBpZiBuID09IDA6CisgICAgICAgIGlmIHNpemUgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiIiIKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9wZWVrX3VubG9ja2VkKDEpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVhZF91bmxvY2tlZCgKLSAgICAgICAgICAgICAgICBtaW4obiwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKKyAgICAgICAgICAgICAgICBtaW4oc2l6ZSwgbGVuKHNlbGYuX3JlYWRfYnVmKSAtIHNlbGYuX3JlYWRfcG9zKSkKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgogICAgICAgICByZXR1cm4gX0J1ZmZlcmVkSU9NaXhpbi50ZWxsKHNlbGYpIC0gbGVuKHNlbGYuX3JlYWRfYnVmKSArIHNlbGYuX3JlYWRfcG9zCkBAIC0xMDc0LDcgKzEwOTUsNyBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJhdywgYnVmZmVyX3NpemU9REVGQVVMVF9CVUZGRVJfU0laRSk6CiAgICAgICAgIGlmIG5vdCByYXcud3JpdGFibGUoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJyJyYXciIGFyZ3VtZW50IG11c3QgYmUgd3JpdGFibGUuJykKIAogICAgICAgICBfQnVmZmVyZWRJT01peGluLl9faW5pdF9fKHNlbGYsIHJhdykKICAgICAgICAgaWYgYnVmZmVyX3NpemUgPD0gMDoKQEAgLTExMzgsNyArMTE1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVycm5vLkVBR0FJTiwKICAgICAgICAgICAgICAgICAgICAgIndyaXRlIGNvdWxkIG5vdCBjb21wbGV0ZSB3aXRob3V0IGJsb2NraW5nIiwgMCkKICAgICAgICAgICAgIGlmIG4gPiBsZW4oc2VsZi5fd3JpdGVfYnVmKSBvciBuIDwgMDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ3cml0ZSgpIHJldHVybmVkIGluY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIndyaXRlKCkgcmV0dXJuZWQgaW5jb3JyZWN0IG51bWJlciBvZiBieXRlcyIpCiAgICAgICAgICAgICBkZWwgc2VsZi5fd3JpdGVfYnVmWzpuXQogCiAgICAgZGVmIHRlbGwoc2VsZik6CkBAIC0xMTc0LDE4ICsxMTk1LDE4IEBACiAgICAgICAgIFRoZSBhcmd1bWVudHMgYXJlIHR3byBSYXdJTyBpbnN0YW5jZXMuCiAgICAgICAgICIiIgogICAgICAgICBpZiBub3QgcmVhZGVyLnJlYWRhYmxlKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCcicmVhZGVyIiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCcicmVhZGVyIiBhcmd1bWVudCBtdXN0IGJlIHJlYWRhYmxlLicpCiAKICAgICAgICAgaWYgbm90IHdyaXRlci53cml0YWJsZSgpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcignIndyaXRlciIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignIndyaXRlciIgYXJndW1lbnQgbXVzdCBiZSB3cml0YWJsZS4nKQogCiAgICAgICAgIHNlbGYucmVhZGVyID0gQnVmZmVyZWRSZWFkZXIocmVhZGVyLCBidWZmZXJfc2l6ZSkKICAgICAgICAgc2VsZi53cml0ZXIgPSBCdWZmZXJlZFdyaXRlcih3cml0ZXIsIGJ1ZmZlcl9zaXplKQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkKG4pCisgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgc2l6ZSA9IC0xCisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkKHNpemUpCiAKICAgICBkZWYgcmVhZGludG8oc2VsZiwgYik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkaW50byhiKQpAQCAtMTE5MywxMSArMTIxNCwxMSBAQAogICAgIGRlZiB3cml0ZShzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLndyaXRlKGIpCiAKLSAgICBkZWYgcGVlayhzZWxmLCBuPTApOgotICAgICAgICByZXR1cm4gc2VsZi5yZWFkZXIucGVlayhuKQorICAgIGRlZiBwZWVrKHNlbGYsIHNpemU9MCk6CisgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5wZWVrKHNpemUpCiAKLSAgICBkZWYgcmVhZDEoc2VsZiwgbik6Ci0gICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkMShuKQorICAgIGRlZiByZWFkMShzZWxmLCBzaXplKToKKyAgICAgICAgcmV0dXJuIHNlbGYucmVhZGVyLnJlYWQxKHNpemUpCiAKICAgICBkZWYgcmVhZGFibGUoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5yZWFkYWJsZSgpCkBAIC0xMjA5LDggKzEyMzAsMTAgQEAKICAgICAgICAgcmV0dXJuIHNlbGYud3JpdGVyLmZsdXNoKCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi53cml0ZXIuY2xvc2UoKQotICAgICAgICBzZWxmLnJlYWRlci5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYud3JpdGVyLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYucmVhZGVyLmNsb3NlKCkKIAogICAgIGRlZiBpc2F0dHkoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnJlYWRlci5pc2F0dHkoKSBvciBzZWxmLndyaXRlci5pc2F0dHkoKQpAQCAtMTI0OCw3ICsxMjcxLDcgQEAKICAgICAgICAgd2l0aCBzZWxmLl9yZWFkX2xvY2s6CiAgICAgICAgICAgICBzZWxmLl9yZXNldF9yZWFkX2J1ZigpCiAgICAgICAgIGlmIHBvcyA8IDA6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgaW52YWxpZCBwb3NpdGlvbiIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzZWVrKCkgcmV0dXJuZWQgaW52YWxpZCBwb3NpdGlvbiIpCiAgICAgICAgIHJldHVybiBwb3MKIAogICAgIGRlZiB0ZWxsKHNlbGYpOgpAQCAtMTI2MywyMyArMTI4NiwyMyBAQAogICAgICAgICAjIFVzZSBzZWVrIHRvIGZsdXNoIHRoZSByZWFkIGJ1ZmZlci4KICAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkV3JpdGVyLnRydW5jYXRlKHNlbGYsIHBvcykKIAotICAgIGRlZiByZWFkKHNlbGYsIG49Tm9uZSk6Ci0gICAgICAgIGlmIG4gaXMgTm9uZToKLSAgICAgICAgICAgIG4gPSAtMQorICAgIGRlZiByZWFkKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQogICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQoc2VsZiwgbikKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQoc2VsZiwgc2l6ZSkKIAogICAgIGRlZiByZWFkaW50byhzZWxmLCBiKToKICAgICAgICAgc2VsZi5mbHVzaCgpCiAgICAgICAgIHJldHVybiBCdWZmZXJlZFJlYWRlci5yZWFkaW50byhzZWxmLCBiKQogCi0gICAgZGVmIHBlZWsoc2VsZiwgbj0wKToKKyAgICBkZWYgcGVlayhzZWxmLCBzaXplPTApOgogICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnBlZWsoc2VsZiwgbikKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnBlZWsoc2VsZiwgc2l6ZSkKIAotICAgIGRlZiByZWFkMShzZWxmLCBuKToKKyAgICBkZWYgcmVhZDEoc2VsZiwgc2l6ZSk6CiAgICAgICAgIHNlbGYuZmx1c2goKQotICAgICAgICByZXR1cm4gQnVmZmVyZWRSZWFkZXIucmVhZDEoc2VsZiwgbikKKyAgICAgICAgcmV0dXJuIEJ1ZmZlcmVkUmVhZGVyLnJlYWQxKHNlbGYsIHNpemUpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CiAgICAgICAgIGlmIHNlbGYuX3JlYWRfYnVmOgpAQCAtMTI5OSwxMSArMTMyMiwxMSBAQAogICAgIGFyZSBpbW11dGFibGUuIFRoZXJlIGlzIG5vIHB1YmxpYyBjb25zdHJ1Y3Rvci4KICAgICAiIiIKIAotICAgIGRlZiByZWFkKHNlbGYsIG49LTEpOgotICAgICAgICAiIiJSZWFkIGF0IG1vc3QgbiBjaGFyYWN0ZXJzIGZyb20gc3RyZWFtLCB3aGVyZSBuIGlzIGFuIGludC4KKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPS0xKToKKyAgICAgICAgIiIiUmVhZCBhdCBtb3N0IHNpemUgY2hhcmFjdGVycyBmcm9tIHN0cmVhbSwgd2hlcmUgc2l6ZSBpcyBhbiBpbnQuCiAKLSAgICAgICAgUmVhZCBmcm9tIHVuZGVybHlpbmcgYnVmZmVyIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIG9yIHdlIGhpdCBFT0YuCi0gICAgICAgIElmIG4gaXMgbmVnYXRpdmUgb3Igb21pdHRlZCwgcmVhZCB1bnRpbCBFT0YuCisgICAgICAgIFJlYWQgZnJvbSB1bmRlcmx5aW5nIGJ1ZmZlciB1bnRpbCB3ZSBoYXZlIHNpemUgY2hhcmFjdGVycyBvciB3ZSBoaXQgRU9GLgorICAgICAgICBJZiBzaXplIGlzIG5lZ2F0aXZlIG9yIG9taXR0ZWQsIHJlYWQgdW50aWwgRU9GLgogCiAgICAgICAgIFJldHVybnMgYSBzdHJpbmcuCiAgICAgICAgICIiIgpAQCAtMTU0NiwxMyArMTU2OSwxMyBAQAogICAgICAgICByZXN1bHQgPSAiPF9weWlvLlRleHRJT1dyYXBwZXIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmVzdWx0ICs9ICIgbmFtZT17MCFyfSIuZm9ybWF0KG5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG1vZGUgPSBzZWxmLm1vZGUKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmVzdWx0ICs9ICIgbW9kZT17MCFyfSIuZm9ybWF0KG1vZGUpCkBAIC0xNzMyLDcgKzE3NTUsNyBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fc2Vla2FibGU6CiAgICAgICAgICAgICByYWlzZSBVbnN1cHBvcnRlZE9wZXJhdGlvbigidW5kZXJseWluZyBzdHJlYW0gaXMgbm90IHNlZWthYmxlIikKICAgICAgICAgaWYgbm90IHNlbGYuX3RlbGxpbmc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ0ZWxsaW5nIHBvc2l0aW9uIGRpc2FibGVkIGJ5IG5leHQoKSBjYWxsIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInRlbGxpbmcgcG9zaXRpb24gZGlzYWJsZWQgYnkgbmV4dCgpIGNhbGwiKQogICAgICAgICBzZWxmLmZsdXNoKCkKICAgICAgICAgcG9zaXRpb24gPSBzZWxmLmJ1ZmZlci50ZWxsKCkKICAgICAgICAgZGVjb2RlciA9IHNlbGYuX2RlY29kZXIKQEAgLTE4MTksNyArMTg0Miw3IEBACiAgICAgICAgICAgICAgICAgY2hhcnNfZGVjb2RlZCArPSBsZW4oZGVjb2Rlci5kZWNvZGUoYicnLCBmaW5hbD1UcnVlKSkKICAgICAgICAgICAgICAgICBuZWVkX2VvZiA9IDEKICAgICAgICAgICAgICAgICBpZiBjaGFyc19kZWNvZGVkIDwgY2hhcnNfdG9fc2tpcDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2FuJ3QgcmVjb25zdHJ1Y3QgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKIAogICAgICAgICAgICAgIyBUaGUgcmV0dXJuZWQgY29va2llIGNvcnJlc3BvbmRzIHRvIHRoZSBsYXN0IHNhZmUgc3RhcnQgcG9pbnQuCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcGFja19jb29raWUoCkBAIC0xODQyLDYgKzE4NjUsMTkgQEAKICAgICAgICAgcmV0dXJuIGJ1ZmZlcgogCiAgICAgZGVmIHNlZWsoc2VsZiwgY29va2llLCB3aGVuY2U9MCk6CisgICAgICAgIGRlZiBfcmVzZXRfZW5jb2Rlcihwb3NpdGlvbik6CisgICAgICAgICAgICAiIiJSZXNldCB0aGUgZW5jb2RlciAobWVyZWx5IHVzZWZ1bCBmb3IgcHJvcGVyIEJPTSBoYW5kbGluZykiIiIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBlbmNvZGVyID0gc2VsZi5fZW5jb2RlciBvciBzZWxmLl9nZXRfZW5jb2RlcigpCisgICAgICAgICAgICBleGNlcHQgTG9va3VwRXJyb3I6CisgICAgICAgICAgICAgICAgIyBTb21ldGltZXMgdGhlIGVuY29kZXIgZG9lc24ndCBleGlzdAorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgcG9zaXRpb24gIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZW5jb2Rlci5zZXRzdGF0ZSgwKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVuY29kZXIucmVzZXQoKQorCiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGVsbCBvbiBjbG9zZWQgZmlsZSIpCiAgICAgICAgIGlmIG5vdCBzZWxmLl9zZWVrYWJsZToKQEAgLTE4NjIsNiArMTg5OCw3IEBACiAgICAgICAgICAgICBzZWxmLl9zbmFwc2hvdCA9IE5vbmUKICAgICAgICAgICAgIGlmIHNlbGYuX2RlY29kZXI6CiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb2Rlci5yZXNldCgpCisgICAgICAgICAgICBfcmVzZXRfZW5jb2Rlcihwb3NpdGlvbikKICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbgogICAgICAgICBpZiB3aGVuY2UgIT0gMDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuc3VwcG9ydGVkIHdoZW5jZSAoJXIpIiAlICh3aGVuY2UsKSkKQEAgLTE4OTYsMzIgKzE5MzMsMjIgQEAKIAogICAgICAgICAgICAgIyBTa2lwIGNoYXJzX3RvX3NraXAgb2YgdGhlIGRlY29kZWQgY2hhcmFjdGVycy4KICAgICAgICAgICAgIGlmIGxlbihzZWxmLl9kZWNvZGVkX2NoYXJzKSA8IGNoYXJzX3RvX3NraXA6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY2FuJ3QgcmVzdG9yZSBsb2dpY2FsIGZpbGUgcG9zaXRpb24iKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbid0IHJlc3RvcmUgbG9naWNhbCBmaWxlIHBvc2l0aW9uIikKICAgICAgICAgICAgIHNlbGYuX2RlY29kZWRfY2hhcnNfdXNlZCA9IGNoYXJzX3RvX3NraXAKIAotICAgICAgICAjIEZpbmFsbHksIHJlc2V0IHRoZSBlbmNvZGVyIChtZXJlbHkgdXNlZnVsIGZvciBwcm9wZXIgQk9NIGhhbmRsaW5nKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlbmNvZGVyID0gc2VsZi5fZW5jb2RlciBvciBzZWxmLl9nZXRfZW5jb2RlcigpCi0gICAgICAgIGV4Y2VwdCBMb29rdXBFcnJvcjoKLSAgICAgICAgICAgICMgU29tZXRpbWVzIHRoZSBlbmNvZGVyIGRvZXNuJ3QgZXhpc3QKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIGNvb2tpZSAhPSAwOgotICAgICAgICAgICAgICAgIGVuY29kZXIuc2V0c3RhdGUoMCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZW5jb2Rlci5yZXNldCgpCisgICAgICAgIF9yZXNldF9lbmNvZGVyKGNvb2tpZSkKICAgICAgICAgcmV0dXJuIGNvb2tpZQogCi0gICAgZGVmIHJlYWQoc2VsZiwgbj1Ob25lKToKKyAgICBkZWYgcmVhZChzZWxmLCBzaXplPU5vbmUpOgogICAgICAgICBzZWxmLl9jaGVja1JlYWRhYmxlKCkKLSAgICAgICAgaWYgbiBpcyBOb25lOgotICAgICAgICAgICAgbiA9IC0xCisgICAgICAgIGlmIHNpemUgaXMgTm9uZToKKyAgICAgICAgICAgIHNpemUgPSAtMQogICAgICAgICBkZWNvZGVyID0gc2VsZi5fZGVjb2RlciBvciBzZWxmLl9nZXRfZGVjb2RlcigpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG4uX19pbmRleF9fCisgICAgICAgICAgICBzaXplLl9faW5kZXhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhbiBpbnRlZ2VyIGlzIHJlcXVpcmVkIikgZnJvbSBlcnIKLSAgICAgICAgaWYgbiA8IDA6CisgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgIyBSZWFkIGV2ZXJ5dGhpbmcuCiAgICAgICAgICAgICByZXN1bHQgPSAoc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMoKSArCiAgICAgICAgICAgICAgICAgICAgICAgZGVjb2Rlci5kZWNvZGUoc2VsZi5idWZmZXIucmVhZCgpLCBmaW5hbD1UcnVlKSkKQEAgLTE5MjksMTIgKzE5NTYsMTIgQEAKICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBLZWVwIHJlYWRpbmcgY2h1bmtzIHVudGlsIHdlIGhhdmUgbiBjaGFyYWN0ZXJzIHRvIHJldHVybi4KKyAgICAgICAgICAgICMgS2VlcCByZWFkaW5nIGNodW5rcyB1bnRpbCB3ZSBoYXZlIHNpemUgY2hhcmFjdGVycyB0byByZXR1cm4uCiAgICAgICAgICAgICBlb2YgPSBGYWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fZ2V0X2RlY29kZWRfY2hhcnMobikKLSAgICAgICAgICAgIHdoaWxlIGxlbihyZXN1bHQpIDwgbiBhbmQgbm90IGVvZjoKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUpCisgICAgICAgICAgICB3aGlsZSBsZW4ocmVzdWx0KSA8IHNpemUgYW5kIG5vdCBlb2Y6CiAgICAgICAgICAgICAgICAgZW9mID0gbm90IHNlbGYuX3JlYWRfY2h1bmsoKQotICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycyhuIC0gbGVuKHJlc3VsdCkpCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHNlbGYuX2dldF9kZWNvZGVkX2NoYXJzKHNpemUgLSBsZW4ocmVzdWx0KSkKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKQEAgLTE5NDYsMTMgKzE5NzMsMTMgQEAKICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KICAgICAgICAgcmV0dXJuIGxpbmUKIAotICAgIGRlZiByZWFkbGluZShzZWxmLCBsaW1pdD1Ob25lKToKKyAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT1Ob25lKToKICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJyZWFkIGZyb20gY2xvc2VkIGZpbGUiKQotICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICAgICAgbGltaXQgPSAtMQotICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGxpbWl0LCBpbnQpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJsaW1pdCBtdXN0IGJlIGFuIGludGVnZXIiKQorICAgICAgICBpZiBzaXplIGlzIE5vbmU6CisgICAgICAgICAgICBzaXplID0gLTEKKyAgICAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShzaXplLCBpbnQpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJzaXplIG11c3QgYmUgYW4gaW50ZWdlciIpCiAKICAgICAgICAgIyBHcmFiIGFsbCB0aGUgZGVjb2RlZCB0ZXh0ICh3ZSB3aWxsIHJld2luZCBhbnkgZXh0cmEgYml0cyBsYXRlcikuCiAgICAgICAgIGxpbmUgPSBzZWxmLl9nZXRfZGVjb2RlZF9jaGFycygpCkBAIC0yMDExLDggKzIwMzgsOCBAQAogICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBwb3MgKyBsZW4oc2VsZi5fcmVhZG5sKQogICAgICAgICAgICAgICAgICAgICBicmVhawogCi0gICAgICAgICAgICBpZiBsaW1pdCA+PSAwIGFuZCBsZW4obGluZSkgPj0gbGltaXQ6Ci0gICAgICAgICAgICAgICAgZW5kcG9zID0gbGltaXQgICMgcmVhY2hlZCBsZW5ndGggbGltaXQKKyAgICAgICAgICAgIGlmIHNpemUgPj0gMCBhbmQgbGVuKGxpbmUpID49IHNpemU6CisgICAgICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyByZWFjaGVkIGxlbmd0aCBzaXplCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgIyBObyBsaW5lIGVuZGluZyBzZWVuIHlldCAtIGdldCBtb3JlIGRhdGEnCkBAIC0yMDI3LDggKzIwNTQsOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuX3NuYXBzaG90ID0gTm9uZQogICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCiAKLSAgICAgICAgaWYgbGltaXQgPj0gMCBhbmQgZW5kcG9zID4gbGltaXQ6Ci0gICAgICAgICAgICBlbmRwb3MgPSBsaW1pdCAgIyBkb24ndCBleGNlZWQgbGltaXQKKyAgICAgICAgaWYgc2l6ZSA+PSAwIGFuZCBlbmRwb3MgPiBzaXplOgorICAgICAgICAgICAgZW5kcG9zID0gc2l6ZSAgIyBkb24ndCBleGNlZWQgc2l6ZQogCiAgICAgICAgICMgUmV3aW5kIF9kZWNvZGVkX2NoYXJzIHRvIGp1c3QgYWZ0ZXIgdGhlIGxpbmUgZW5kaW5nIHdlIGZvdW5kLgogICAgICAgICBzZWxmLl9yZXdpbmRfZGVjb2RlZF9jaGFycyhsZW4obGluZSkgLSBlbmRwb3MpCkBAIC0yMDU5LDcgKzIwODYsNiBAQAogICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoaW5pdGlhbF92YWx1ZSwgc3RyKToKICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImluaXRpYWxfdmFsdWUgbXVzdCBiZSBzdHIgb3IgTm9uZSwgbm90IHswfSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0eXBlKGluaXRpYWxfdmFsdWUpLl9fbmFtZV9fKSkKLSAgICAgICAgICAgICAgICBpbml0aWFsX3ZhbHVlID0gc3RyKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLndyaXRlKGluaXRpYWxfdmFsdWUpCiAgICAgICAgICAgICBzZWxmLnNlZWsoMCkKIApAQCAtMjA3NSw3ICsyMTAxLDcgQEAKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgIyBUZXh0SU9XcmFwcGVyIHRlbGxzIHRoZSBlbmNvZGluZyBpbiBpdHMgcmVwci4gSW4gU3RyaW5nSU8sCi0gICAgICAgICMgdGhhdCdzIGEgaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICAgICAjIHRoYXQncyBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCiAgICAgICAgIHJldHVybiBvYmplY3QuX19yZXByX18oc2VsZikKIAogICAgIEBwcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvTGliL19zaXRlYnVpbHRpbnMucHkgYi9MaWIvX3NpdGVidWlsdGlucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjljZjRiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL19zaXRlYnVpbHRpbnMucHkKQEAgLTAsMCArMSwxMDMgQEAKKyIiIgorVGhlIG9iamVjdHMgdXNlZCBieSB0aGUgc2l0ZSBtb2R1bGUgdG8gYWRkIGN1c3RvbSBidWlsdGlucy4KKyIiIgorCisjIFRob3NlIG9iamVjdHMgYXJlIGFsbW9zdCBpbW1vcnRhbCBhbmQgdGhleSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZWlyIG1vZHVsZQorIyBnbG9iYWxzLiAgRGVmaW5pbmcgdGhlbSBpbiB0aGUgc2l0ZSBtb2R1bGUgd291bGQga2VlcCB0b28gbWFueSByZWZlcmVuY2VzCisjIGFsaXZlLgorIyBOb3RlIHRoaXMgbWVhbnMgdGhpcyBtb2R1bGUgc2hvdWxkIGFsc28gYXZvaWQga2VlcCB0aGluZ3MgYWxpdmUgaW4gaXRzCisjIGdsb2JhbHMuCisKK2ltcG9ydCBzeXMKKworY2xhc3MgUXVpdHRlcihvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBlb2YpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZW9mID0gZW9mCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJ1VzZSAlcygpIG9yICVzIHRvIGV4aXQnICUgKHNlbGYubmFtZSwgc2VsZi5lb2YpCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNvZGU9Tm9uZSk6CisgICAgICAgICMgU2hlbGxzIGxpa2UgSURMRSBjYXRjaCB0aGUgU3lzdGVtRXhpdCwgYnV0IGxpc3RlbiB3aGVuIHRoZWlyCisgICAgICAgICMgc3RkaW4gd3JhcHBlciBpcyBjbG9zZWQuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcmFpc2UgU3lzdGVtRXhpdChjb2RlKQorCisKK2NsYXNzIF9QcmludGVyKG9iamVjdCk6CisgICAgIiIiaW50ZXJhY3RpdmUgcHJvbXB0IG9iamVjdHMgZm9yIHByaW50aW5nIHRoZSBsaWNlbnNlIHRleHQsIGEgbGlzdCBvZgorICAgIGNvbnRyaWJ1dG9ycyBhbmQgdGhlIGNvcHlyaWdodCBub3RpY2UuIiIiCisKKyAgICBNQVhMSU5FUyA9IDIzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgZGF0YSwgZmlsZXM9KCksIGRpcnM9KCkpOgorICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgc2VsZi5fX25hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuX19kYXRhID0gZGF0YQorICAgICAgICBzZWxmLl9fbGluZXMgPSBOb25lCisgICAgICAgIHNlbGYuX19maWxlbmFtZXMgPSBbb3MucGF0aC5qb2luKGRpciwgZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRpciBpbiBkaXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluIGZpbGVzXQorCisgICAgZGVmIF9fc2V0dXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX19saW5lczoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkYXRhID0gTm9uZQorICAgICAgICBmb3IgZmlsZW5hbWUgaW4gc2VsZi5fX2ZpbGVuYW1lczoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyIikgYXMgZnA6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9fZGF0YQorICAgICAgICBzZWxmLl9fbGluZXMgPSBkYXRhLnNwbGl0KCdcbicpCisgICAgICAgIHNlbGYuX19saW5lY250ID0gbGVuKHNlbGYuX19saW5lcykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fX3NldHVwKCkKKyAgICAgICAgaWYgbGVuKHNlbGYuX19saW5lcykgPD0gc2VsZi5NQVhMSU5FUzoKKyAgICAgICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2VsZi5fX2xpbmVzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJUeXBlICVzKCkgdG8gc2VlIHRoZSBmdWxsICVzIHRleHQiICUgKChzZWxmLl9fbmFtZSwpKjIpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZik6CisgICAgICAgIHNlbGYuX19zZXR1cCgpCisgICAgICAgIHByb21wdCA9ICdIaXQgUmV0dXJuIGZvciBtb3JlLCBvciBxIChhbmQgUmV0dXJuKSB0byBxdWl0OiAnCisgICAgICAgIGxpbmVubyA9IDAKKyAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsaW5lbm8sIGxpbmVubyArIHNlbGYuTUFYTElORVMpOgorICAgICAgICAgICAgICAgICAgICBwcmludChzZWxmLl9fbGluZXNbaV0pCisgICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsaW5lbm8gKz0gc2VsZi5NQVhMSU5FUworICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKKyAgICAgICAgICAgICAgICB3aGlsZSBrZXkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0gaW5wdXQocHJvbXB0KQorICAgICAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgnJywgJ3EnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ3EnOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisKK2NsYXNzIF9IZWxwZXIob2JqZWN0KToKKyAgICAiIiJEZWZpbmUgdGhlIGJ1aWx0aW4gJ2hlbHAnLgorCisgICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHB5ZG9jLmhlbHAgdGhhdCBwcm92aWRlcyBhIGhlbHBmdWwgbWVzc2FnZQorICAgIHdoZW4gJ2hlbHAnIGlzIHR5cGVkIGF0IHRoZSBQeXRob24gaW50ZXJhY3RpdmUgcHJvbXB0LgorCisgICAgQ2FsbGluZyBoZWxwKCkgYXQgdGhlIFB5dGhvbiBwcm9tcHQgc3RhcnRzIGFuIGludGVyYWN0aXZlIGhlbHAgc2Vzc2lvbi4KKyAgICBDYWxsaW5nIGhlbHAodGhpbmcpIHByaW50cyBoZWxwIGZvciB0aGUgcHl0aG9uIG9iamVjdCAndGhpbmcnLgorICAgICIiIgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIlR5cGUgaGVscCgpIGZvciBpbnRlcmFjdGl2ZSBoZWxwLCAiIFwKKyAgICAgICAgICAgICAgICJvciBoZWxwKG9iamVjdCkgZm9yIGhlbHAgYWJvdXQgb2JqZWN0LiIKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIGltcG9ydCBweWRvYworICAgICAgICByZXR1cm4gcHlkb2MuaGVscCgqYXJncywgKiprd2RzKQpkaWZmIC0tZ2l0IGEvTGliL19zdHJwdGltZS5weSBiL0xpYi9fc3RycHRpbWUucHkKaW5kZXggOTA1OGE2OS4uNmQ2NDg1NiAxMDA2NDQKLS0tIGEvTGliL19zdHJwdGltZS5weQorKysgYi9MaWIvX3N0cnB0aW1lLnB5CkBAIC0xNCwxNCArMTQsMTQgQEAKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBjYWxlbmRhcgogZnJvbSByZSBpbXBvcnQgY29tcGlsZSBhcyByZV9jb21waWxlCi1mcm9tIHJlIGltcG9ydCBJR05PUkVDQVNFLCBBU0NJSQorZnJvbSByZSBpbXBvcnQgSUdOT1JFQ0FTRQogZnJvbSByZSBpbXBvcnQgZXNjYXBlIGFzIHJlX2VzY2FwZQogZnJvbSBkYXRldGltZSBpbXBvcnQgKGRhdGUgYXMgZGF0ZXRpbWVfZGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICB0aW1lZGVsdGEgYXMgZGF0ZXRpbWVfdGltZWRlbHRhLAogICAgICAgICAgICAgICAgICAgICAgIHRpbWV6b25lIGFzIGRhdGV0aW1lX3RpbWV6b25lKQogdHJ5OgogICAgIGZyb20gX3RocmVhZCBpbXBvcnQgYWxsb2NhdGVfbG9jayBhcyBfdGhyZWFkX2FsbG9jYXRlX2xvY2sKLWV4Y2VwdDoKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBmcm9tIF9kdW1teV90aHJlYWQgaW1wb3J0IGFsbG9jYXRlX2xvY2sgYXMgX3RocmVhZF9hbGxvY2F0ZV9sb2NrCiAKIF9fYWxsX18gPSBbXQpAQCAtNzcsNiArNzcsOCBAQAogICAgICAgICBzZWxmLl9fY2FsY19kYXRlX3RpbWUoKQogICAgICAgICBpZiBfZ2V0bGFuZygpICE9IHNlbGYubGFuZzoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxvY2FsZSBjaGFuZ2VkIGR1cmluZyBpbml0aWFsaXphdGlvbiIpCisgICAgICAgIGlmIHRpbWUudHpuYW1lICE9IHNlbGYudHpuYW1lIG9yIHRpbWUuZGF5bGlnaHQgIT0gc2VsZi5kYXlsaWdodDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRpbWV6b25lIGNoYW5nZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uIikKIAogICAgIGRlZiBfX3BhZChzZWxmLCBzZXEsIGZyb250KToKICAgICAgICAgIyBBZGQgJycgdG8gc2VxIHRvIGVpdGhlciB0aGUgZnJvbnQgKGlzIFRydWUpLCBlbHNlIHRoZSBiYWNrLgpAQCAtMTYxLDE1ICsxNjMsMTcgQEAKIAogICAgIGRlZiBfX2NhbGNfdGltZXpvbmUoc2VsZik6CiAgICAgICAgICMgU2V0IHNlbGYudGltZXpvbmUgYnkgdXNpbmcgdGltZS50em5hbWUuCi0gICAgICAgICMgRG8gbm90IHdvcnJ5IGFib3V0IHBvc3NpYmlsaXR5IG9mIHRpbWUudHpuYW1lWzBdID09IHRpbWV0em5hbWVbMV0KLSAgICAgICAgIyBhbmQgdGltZS5kYXlsaWdodDsgaGFuZGxlIHRoYXQgaW4gc3RycHRpbWUgLgorICAgICAgICAjIERvIG5vdCB3b3JyeSBhYm91dCBwb3NzaWJpbGl0eSBvZiB0aW1lLnR6bmFtZVswXSA9PSB0aW1lLnR6bmFtZVsxXQorICAgICAgICAjIGFuZCB0aW1lLmRheWxpZ2h0OyBoYW5kbGUgdGhhdCBpbiBzdHJwdGltZS4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGltZS50enNldCgpCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgbm9fc2F2aW5nID0gZnJvemVuc2V0KFsidXRjIiwgImdtdCIsIHRpbWUudHpuYW1lWzBdLmxvd2VyKCldKQotICAgICAgICBpZiB0aW1lLmRheWxpZ2h0OgotICAgICAgICAgICAgaGFzX3NhdmluZyA9IGZyb3plbnNldChbdGltZS50em5hbWVbMV0ubG93ZXIoKV0pCisgICAgICAgIHNlbGYudHpuYW1lID0gdGltZS50em5hbWUKKyAgICAgICAgc2VsZi5kYXlsaWdodCA9IHRpbWUuZGF5bGlnaHQKKyAgICAgICAgbm9fc2F2aW5nID0gZnJvemVuc2V0KFsidXRjIiwgImdtdCIsIHNlbGYudHpuYW1lWzBdLmxvd2VyKCldKQorICAgICAgICBpZiBzZWxmLmRheWxpZ2h0OgorICAgICAgICAgICAgaGFzX3NhdmluZyA9IGZyb3plbnNldChbc2VsZi50em5hbWVbMV0ubG93ZXIoKV0pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBoYXNfc2F2aW5nID0gZnJvemVuc2V0KCkKICAgICAgICAgc2VsZi50aW1lem9uZSA9IChub19zYXZpbmcsIGhhc19zYXZpbmcpCkBAIC0zMDgsMTIgKzMxMiwxNSBAQAogICAgIGdsb2JhbCBfVGltZVJFX2NhY2hlLCBfcmVnZXhfY2FjaGUKICAgICB3aXRoIF9jYWNoZV9sb2NrOgogCi0gICAgICAgIGlmIF9nZXRsYW5nKCkgIT0gX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZS5sYW5nOgorICAgICAgICBsb2NhbGVfdGltZSA9IF9UaW1lUkVfY2FjaGUubG9jYWxlX3RpbWUKKyAgICAgICAgaWYgKF9nZXRsYW5nKCkgIT0gbG9jYWxlX3RpbWUubGFuZyBvcgorICAgICAgICAgICAgdGltZS50em5hbWUgIT0gbG9jYWxlX3RpbWUudHpuYW1lIG9yCisgICAgICAgICAgICB0aW1lLmRheWxpZ2h0ICE9IGxvY2FsZV90aW1lLmRheWxpZ2h0KToKICAgICAgICAgICAgIF9UaW1lUkVfY2FjaGUgPSBUaW1lUkUoKQogICAgICAgICAgICAgX3JlZ2V4X2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAgIGxvY2FsZV90aW1lID0gX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZQogICAgICAgICBpZiBsZW4oX3JlZ2V4X2NhY2hlKSA+IF9DQUNIRV9NQVhfU0laRToKICAgICAgICAgICAgIF9yZWdleF9jYWNoZS5jbGVhcigpCi0gICAgICAgIGxvY2FsZV90aW1lID0gX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZQogICAgICAgICBmb3JtYXRfcmVnZXggPSBfcmVnZXhfY2FjaGUuZ2V0KGZvcm1hdCkKICAgICAgICAgaWYgbm90IGZvcm1hdF9yZWdleDoKICAgICAgICAgICAgIHRyeToKQEAgLTM0OCw5ICszNTUsOSBAQAogICAgICMgdGhvdWdoCiAgICAgd2Vla19vZl95ZWFyID0gLTEKICAgICB3ZWVrX29mX3llYXJfc3RhcnQgPSAtMQotICAgICMgd2Vla2RheSBhbmQganVsaWFuIGRlZmF1bHRlZCB0byAtMSBzbyBhcyB0byBzaWduYWwgbmVlZCB0byBjYWxjdWxhdGUKKyAgICAjIHdlZWtkYXkgYW5kIGp1bGlhbiBkZWZhdWx0ZWQgdG8gTm9uZSBzbyBhcyB0byBzaWduYWwgbmVlZCB0byBjYWxjdWxhdGUKICAgICAjIHZhbHVlcwotICAgIHdlZWtkYXkgPSBqdWxpYW4gPSAtMQorICAgIHdlZWtkYXkgPSBqdWxpYW4gPSBOb25lCiAgICAgZm91bmRfZGljdCA9IGZvdW5kLmdyb3VwZGljdCgpCiAgICAgZm9yIGdyb3VwX2tleSBpbiBmb3VuZF9kaWN0LmtleXMoKToKICAgICAgICAgIyBEaXJlY3RpdmVzIG5vdCBleHBsaWNpdGx5IGhhbmRsZWQgYmVsb3c6CkBAIC00NTIsMTQgKzQ1OSwxNCBAQAogICAgICAgICB5ZWFyID0gMTkwMAogICAgICMgSWYgd2Uga25vdyB0aGUgd2VlayBvZiB0aGUgeWVhciBhbmQgd2hhdCBkYXkgb2YgdGhhdCB3ZWVrLCB3ZSBjYW4gZmlndXJlCiAgICAgIyBvdXQgdGhlIEp1bGlhbiBkYXkgb2YgdGhlIHllYXIuCi0gICAgaWYganVsaWFuID09IC0xIGFuZCB3ZWVrX29mX3llYXIgIT0gLTEgYW5kIHdlZWtkYXkgIT0gLTE6CisgICAgaWYganVsaWFuIGlzIE5vbmUgYW5kIHdlZWtfb2ZfeWVhciAhPSAtMSBhbmQgd2Vla2RheSBpcyBub3QgTm9uZToKICAgICAgICAgd2Vla19zdGFydHNfTW9uID0gVHJ1ZSBpZiB3ZWVrX29mX3llYXJfc3RhcnQgPT0gMCBlbHNlIEZhbHNlCiAgICAgICAgIGp1bGlhbiA9IF9jYWxjX2p1bGlhbl9mcm9tX1Vfb3JfVyh5ZWFyLCB3ZWVrX29mX3llYXIsIHdlZWtkYXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtfc3RhcnRzX01vbikKICAgICAjIENhbm5vdCBwcmUtY2FsY3VsYXRlIGRhdGV0aW1lX2RhdGUoKSBzaW5jZSBjYW4gY2hhbmdlIGluIEp1bGlhbgogICAgICMgY2FsY3VsYXRpb24gYW5kIHRodXMgY291bGQgaGF2ZSBkaWZmZXJlbnQgdmFsdWUgZm9yIHRoZSBkYXkgb2YgdGhlIHdlZWsKICAgICAjIGNhbGN1bGF0aW9uLgotICAgIGlmIGp1bGlhbiA9PSAtMToKKyAgICBpZiBqdWxpYW4gaXMgTm9uZToKICAgICAgICAgIyBOZWVkIHRvIGFkZCAxIHRvIHJlc3VsdCBzaW5jZSBmaXJzdCBkYXkgb2YgdGhlIHllYXIgaXMgMSwgbm90IDAuCiAgICAgICAgIGp1bGlhbiA9IGRhdGV0aW1lX2RhdGUoeWVhciwgbW9udGgsIGRheSkudG9vcmRpbmFsKCkgLSBcCiAgICAgICAgICAgICAgICAgICBkYXRldGltZV9kYXRlKHllYXIsIDEsIDEpLnRvb3JkaW5hbCgpICsgMQpAQCAtNDY5LDcgKzQ3Niw3IEBACiAgICAgICAgIHllYXIgPSBkYXRldGltZV9yZXN1bHQueWVhcgogICAgICAgICBtb250aCA9IGRhdGV0aW1lX3Jlc3VsdC5tb250aAogICAgICAgICBkYXkgPSBkYXRldGltZV9yZXN1bHQuZGF5Ci0gICAgaWYgd2Vla2RheSA9PSAtMToKKyAgICBpZiB3ZWVrZGF5IGlzIE5vbmU6CiAgICAgICAgIHdlZWtkYXkgPSBkYXRldGltZV9kYXRlKHllYXIsIG1vbnRoLCBkYXkpLndlZWtkYXkoKQogICAgICMgQWRkIHRpbWV6b25lIGluZm8KICAgICB0em5hbWUgPSBmb3VuZF9kaWN0LmdldCgiWiIpCmRpZmYgLS1naXQgYS9MaWIvYWJjLnB5IGIvTGliL2FiYy5weQppbmRleCAwOTc3OGU4Li4wMzU4YTQ2IDEwMDY0NAotLS0gYS9MaWIvYWJjLnB5CisrKyBiL0xpYi9hYmMucHkKQEAgLTUsNiArNSw3IEBACiAKIGZyb20gX3dlYWtyZWZzZXQgaW1wb3J0IFdlYWtTZXQKIAorCiBkZWYgYWJzdHJhY3RtZXRob2QoZnVuY29iaik6CiAgICAgIiIiQSBkZWNvcmF0b3IgaW5kaWNhdGluZyBhYnN0cmFjdCBtZXRob2RzLgogCkBAIC0xMjQsNiArMTI1LDggQEAKICAgICAjIEEgZ2xvYmFsIGNvdW50ZXIgdGhhdCBpcyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUgYSBjbGFzcyBpcwogICAgICMgcmVnaXN0ZXJlZCBhcyBhIHZpcnR1YWwgc3ViY2xhc3Mgb2YgYW55dGhpbmcuICBJdCBmb3JjZXMgdGhlCiAgICAgIyBuZWdhdGl2ZSBjYWNoZSB0byBiZSBjbGVhcmVkIGJlZm9yZSBpdHMgbmV4dCB1c2UuCisgICAgIyBOb3RlOiB0aGlzIGNvdW50ZXIgaXMgcHJpdmF0ZS4gVXNlIGBhYmMuZ2V0X2NhY2hlX3Rva2VuKClgIGZvcgorICAgICMgICAgICAgZXh0ZXJuYWwgY29kZS4KICAgICBfYWJjX2ludmFsaWRhdGlvbl9jb3VudGVyID0gMAogCiAgICAgZGVmIF9fbmV3X18obWNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSk6CkBAIC0yMjYsMyArMjI5LDIwIEBACiAgICAgICAgICMgTm8gZGljZTsgdXBkYXRlIG5lZ2F0aXZlIGNhY2hlCiAgICAgICAgIGNscy5fYWJjX25lZ2F0aXZlX2NhY2hlLmFkZChzdWJjbGFzcykKICAgICAgICAgcmV0dXJuIEZhbHNlCisKKworY2xhc3MgQUJDKG1ldGFjbGFzcz1BQkNNZXRhKToKKyAgICAiIiJIZWxwZXIgY2xhc3MgdGhhdCBwcm92aWRlcyBhIHN0YW5kYXJkIHdheSB0byBjcmVhdGUgYW4gQUJDIHVzaW5nCisgICAgaW5oZXJpdGFuY2UuCisgICAgIiIiCisgICAgcGFzcworCisKK2RlZiBnZXRfY2FjaGVfdG9rZW4oKToKKyAgICAiIiJSZXR1cm5zIHRoZSBjdXJyZW50IEFCQyBjYWNoZSB0b2tlbi4KKworICAgIFRoZSB0b2tlbiBpcyBhbiBvcGFxdWUgb2JqZWN0IChzdXBwb3J0aW5nIGVxdWFsaXR5IHRlc3RpbmcpIGlkZW50aWZ5aW5nIHRoZQorICAgIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgQUJDIGNhY2hlIGZvciB2aXJ0dWFsIHN1YmNsYXNzZXMuIFRoZSB0b2tlbiBjaGFuZ2VzCisgICAgd2l0aCBldmVyeSBjYWxsIHRvIGBgcmVnaXN0ZXIoKWBgIG9uIGFueSBBQkMuCisgICAgIiIiCisgICAgcmV0dXJuIEFCQ01ldGEuX2FiY19pbnZhbGlkYXRpb25fY291bnRlcgpkaWZmIC0tZ2l0IGEvTGliL2FpZmMucHkgYi9MaWIvYWlmYy5weQppbmRleCBkYjA5MjRhLi43ZWJkYmViIDEwMDY0NAotLS0gYS9MaWIvYWlmYy5weQorKysgYi9MaWIvYWlmYy5weQpAQCAtNjksNyArNjksNyBAQAogICBnZXRjb21wdHlwZSgpICAgLS0gcmV0dXJucyBjb21wcmVzc2lvbiB0eXBlICgnTk9ORScgZm9yIEFJRkYgZmlsZXMpCiAgIGdldGNvbXBuYW1lKCkgICAtLSByZXR1cm5zIGh1bWFuLXJlYWRhYmxlIHZlcnNpb24gb2YKICAgICAgICAgICAgICBjb21wcmVzc2lvbiB0eXBlICgnbm90IGNvbXByZXNzZWQnIGZvciBBSUZGIGZpbGVzKQotICBnZXRwYXJhbXMoKSAtLSByZXR1cm5zIGEgdHVwbGUgY29uc2lzdGluZyBvZiBhbGwgb2YgdGhlCisgIGdldHBhcmFtcygpIC0tIHJldHVybnMgYSBuYW1lZHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQogICAgICAgICAgICAgIGFib3ZlIGluIHRoZSBhYm92ZSBvcmRlcgogICBnZXRtYXJrZXJzKCkgICAgLS0gZ2V0IHRoZSBsaXN0IG9mIG1hcmtzIGluIHRoZSBhdWRpbyBmaWxlIG9yIE5vbmUKICAgICAgICAgICAgICBpZiB0aGVyZSBhcmUgbm8gbWFya3MKQEAgLTEyMSw3ICsxMjEsNyBAQAogYmUgcGF0Y2hlZCB1cC4KIEl0IGlzIGJlc3QgdG8gZmlyc3Qgc2V0IGFsbCBwYXJhbWV0ZXJzLCBwZXJoYXBzIHBvc3NpYmx5IHRoZQogY29tcHJlc3Npb24gdHlwZSwgYW5kIHRoZW4gd3JpdGUgYXVkaW8gZnJhbWVzIHVzaW5nIHdyaXRlZnJhbWVzcmF3LgotV2hlbiBhbGwgZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuLCBlaXRoZXIgY2FsbCB3cml0ZWZyYW1lcygnJykgb3IKK1doZW4gYWxsIGZyYW1lcyBoYXZlIGJlZW4gd3JpdHRlbiwgZWl0aGVyIGNhbGwgd3JpdGVmcmFtZXMoYicnKSBvcgogY2xvc2UoKSB0byBwYXRjaCB1cCB0aGUgc2l6ZXMgaW4gdGhlIGhlYWRlci4KIE1hcmtzIGNhbiBiZSBhZGRlZCBhbnl0aW1lLiAgSWYgdGhlcmUgYXJlIGFueSBtYXJrcywgeW91IG11c3QgY2FsbAogY2xvc2UoKSBhZnRlciBhbGwgZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuLgpAQCAtMjUyLDYgKzI1MiwxMSBAQAogICAgIF93cml0ZV91bG9uZyhmLCBsb21hbnQpCiAKIGZyb20gY2h1bmsgaW1wb3J0IENodW5rCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisKK19haWZjX3BhcmFtcyA9IG5hbWVkdHVwbGUoJ19haWZjX3BhcmFtcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICduY2hhbm5lbHMgc2FtcHdpZHRoIGZyYW1lcmF0ZSBuZnJhbWVzIGNvbXB0eXBlIGNvbXBuYW1lJykKKwogCiBjbGFzcyBBaWZjX3JlYWQ6CiAgICAgIyBWYXJpYWJsZXMgdXNlZCBpbiB0aGlzIGNsYXNzOgpAQCAtMzM0LDYgKzMzOSwxMiBAQAogICAgICAgICAjIGVsc2UsIGFzc3VtZSBpdCBpcyBhbiBvcGVuIGZpbGUgb2JqZWN0IGFscmVhZHkKICAgICAgICAgc2VsZi5pbml0ZnAoZikKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTM0NSw3ICszNTYsMTAgQEAKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSAwCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQorICAgICAgICBmaWxlID0gc2VsZi5fZmlsZQorICAgICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIGZpbGUuY2xvc2UoKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9zb3VuZHBvcwpAQCAtMzcyLDkgKzM4Niw5IEBACiAjIyAgICAgIHJldHVybiBzZWxmLl92ZXJzaW9uCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwgXAotICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRjb21wdHlwZSgpLCBzZWxmLmdldGNvbXBuYW1lKCkpCiAKICAgICBkZWYgZ2V0bWFya2VycyhzZWxmKToKICAgICAgICAgaWYgbGVuKHNlbGYuX21hcmtlcnMpID09IDA6CkBAIC01NTEsNiArNTY1LDEyIEBACiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgIwogICAgICMgVXNlciB2aXNpYmxlIG1ldGhvZHMuCiAgICAgIwpAQCAtNjQ0LDggKzY2NCw4IEBACiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX25jaGFubmVscyBvciBub3Qgc2VsZi5fc2FtcHdpZHRoIG9yIG5vdCBzZWxmLl9mcmFtZXJhdGU6CiAgICAgICAgICAgICByYWlzZSBFcnJvcignbm90IGFsbCBwYXJhbWV0ZXJzIHNldCcpCi0gICAgICAgIHJldHVybiBzZWxmLl9uY2hhbm5lbHMsIHNlbGYuX3NhbXB3aWR0aCwgc2VsZi5fZnJhbWVyYXRlLCBcCi0gICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMsIHNlbGYuX2NvbXB0eXBlLCBzZWxmLl9jb21wbmFtZQorICAgICAgICByZXR1cm4gX2FpZmNfcGFyYW1zKHNlbGYuX25jaGFubmVscywgc2VsZi5fc2FtcHdpZHRoLCBzZWxmLl9mcmFtZXJhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lKQogCiAgICAgZGVmIHNldG1hcmsoc2VsZiwgaWQsIHBvcywgbmFtZSk6CiAgICAgICAgIGlmIGlkIDw9IDA6CkBAIC02NzUsNiArNjk1LDggQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX25mcmFtZXN3cml0dGVuCiAKICAgICBkZWYgd3JpdGVmcmFtZXNyYXcoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5KSk6CisgICAgICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhkYXRhKS5jYXN0KCdCJykKICAgICAgICAgc2VsZi5fZW5zdXJlX2hlYWRlcl93cml0dGVuKGxlbihkYXRhKSkKICAgICAgICAgbmZyYW1lcyA9IGxlbihkYXRhKSAvLyAoc2VsZi5fc2FtcHdpZHRoICogc2VsZi5fbmNoYW5uZWxzKQogICAgICAgICBpZiBzZWxmLl9jb252ZXJ0OgpAQCAtODc4LDggKzkwMCw3IEBACiAgICAgaWYgbm90IHN5cy5hcmd2WzE6XToKICAgICAgICAgc3lzLmFyZ3YuYXBwZW5kKCcvdXNyL2RlbW9zL2RhdGEvYXVkaW8vYmFjaC5haWZmJykKICAgICBmbiA9IHN5cy5hcmd2WzFdCi0gICAgZiA9IG9wZW4oZm4sICdyJykKLSAgICB0cnk6CisgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CiAgICAgICAgIHByaW50KCJSZWFkaW5nIiwgZm4pCiAgICAgICAgIHByaW50KCJuY2hhbm5lbHMgPSIsIGYuZ2V0bmNoYW5uZWxzKCkpCiAgICAgICAgIHByaW50KCJuZnJhbWVzICAgPSIsIGYuZ2V0bmZyYW1lcygpKQpAQCAtODkwLDE2ICs5MTEsMTEgQEAKICAgICAgICAgaWYgc3lzLmFyZ3ZbMjpdOgogICAgICAgICAgICAgZ24gPSBzeXMuYXJndlsyXQogICAgICAgICAgICAgcHJpbnQoIldyaXRpbmciLCBnbikKLSAgICAgICAgICAgIGcgPSBvcGVuKGduLCAndycpCi0gICAgICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZ24sICd3JykgYXMgZzoKICAgICAgICAgICAgICAgICBnLnNldHBhcmFtcyhmLmdldHBhcmFtcygpKQogICAgICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWRmcmFtZXMoMTAyNCkKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBnLndyaXRlZnJhbWVzKGRhdGEpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGcuY2xvc2UoKQogICAgICAgICAgICAgcHJpbnQoIkRvbmUuIikKLSAgICBmaW5hbGx5OgotICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9hcmdwYXJzZS5weSBiL0xpYi9hcmdwYXJzZS5weQppbmRleCBiYzJiYTEzLi5iZTI3NmJiIDEwMDY0NAotLS0gYS9MaWIvYXJncGFyc2UucHkKKysrIGIvTGliL2FyZ3BhcnNlLnB5CkBAIC00OTAsNyArNDkwLDcgQEAKICAgICAgICAgYWN0aW9uX3dpZHRoID0gaGVscF9wb3NpdGlvbiAtIHNlbGYuX2N1cnJlbnRfaW5kZW50IC0gMgogICAgICAgICBhY3Rpb25faGVhZGVyID0gc2VsZi5fZm9ybWF0X2FjdGlvbl9pbnZvY2F0aW9uKGFjdGlvbikKIAotICAgICAgICAjIGhvIG5lbHA7IHN0YXJ0IG9uIHNhbWUgbGluZSBhbmQgYWRkIGEgZmluYWwgbmV3bGluZQorICAgICAgICAjIG5vIGhlbHA7IHN0YXJ0IG9uIHNhbWUgbGluZSBhbmQgYWRkIGEgZmluYWwgbmV3bGluZQogICAgICAgICBpZiBub3QgYWN0aW9uLmhlbHA6CiAgICAgICAgICAgICB0dXAgPSBzZWxmLl9jdXJyZW50X2luZGVudCwgJycsIGFjdGlvbl9oZWFkZXIKICAgICAgICAgICAgIGFjdGlvbl9oZWFkZXIgPSAnJSpzJXNcbicgJSB0dXAKQEAgLTYwOCw4ICs2MDgsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5faW5kZW50KCkKLSAgICAgICAgICAgIGZvciBzdWJhY3Rpb24gaW4gZ2V0X3N1YmFjdGlvbnMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdWJhY3Rpb24KKyAgICAgICAgICAgIHlpZWxkIGZyb20gZ2V0X3N1YmFjdGlvbnMoKQogICAgICAgICAgICAgc2VsZi5fZGVkZW50KCkKIAogICAgIGRlZiBfc3BsaXRfbGluZXMoc2VsZiwgdGV4dCwgd2lkdGgpOgpAQCAtMTA0MCw3ICsxMDM5LDggQEAKICAgICAgICAgICAgIHZlcnNpb24gPSBwYXJzZXIudmVyc2lvbgogICAgICAgICBmb3JtYXR0ZXIgPSBwYXJzZXIuX2dldF9mb3JtYXR0ZXIoKQogICAgICAgICBmb3JtYXR0ZXIuYWRkX3RleHQodmVyc2lvbikKLSAgICAgICAgcGFyc2VyLmV4aXQobWVzc2FnZT1mb3JtYXR0ZXIuZm9ybWF0X2hlbHAoKSkKKyAgICAgICAgcGFyc2VyLl9wcmludF9tZXNzYWdlKGZvcm1hdHRlci5mb3JtYXRfaGVscCgpLCBfc3lzLnN0ZG91dCkKKyAgICAgICAgcGFyc2VyLmV4aXQoKQogCiAKIGNsYXNzIF9TdWJQYXJzZXJzQWN0aW9uKEFjdGlvbik6CkBAIC0xMTIyLDcgKzExMjIsMTQgQEAKICAgICAgICAgIyBwYXJzZSBhbGwgdGhlIHJlbWFpbmluZyBvcHRpb25zIGludG8gdGhlIG5hbWVzcGFjZQogICAgICAgICAjIHN0b3JlIGFueSB1bnJlY29nbml6ZWQgb3B0aW9ucyBvbiB0aGUgb2JqZWN0LCBzbyB0aGF0IHRoZSB0b3AKICAgICAgICAgIyBsZXZlbCBwYXJzZXIgY2FuIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlbQotICAgICAgICBuYW1lc3BhY2UsIGFyZ19zdHJpbmdzID0gcGFyc2VyLnBhcnNlX2tub3duX2FyZ3MoYXJnX3N0cmluZ3MsIG5hbWVzcGFjZSkKKworICAgICAgICAjIEluIGNhc2UgdGhpcyBzdWJwYXJzZXIgZGVmaW5lcyBuZXcgZGVmYXVsdHMsIHdlIHBhcnNlIHRoZW0KKyAgICAgICAgIyBpbiBhIG5ldyBuYW1lc3BhY2Ugb2JqZWN0IGFuZCB0aGVuIHVwZGF0ZSB0aGUgb3JpZ2luYWwKKyAgICAgICAgIyBuYW1lc3BhY2UgZm9yIHRoZSByZWxldmFudCBwYXJ0cy4KKyAgICAgICAgc3VibmFtZXNwYWNlLCBhcmdfc3RyaW5ncyA9IHBhcnNlci5wYXJzZV9rbm93bl9hcmdzKGFyZ19zdHJpbmdzLCBOb25lKQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiB2YXJzKHN1Ym5hbWVzcGFjZSkuaXRlbXMoKToKKyAgICAgICAgICAgIHNldGF0dHIobmFtZXNwYWNlLCBrZXksIHZhbHVlKQorCiAgICAgICAgIGlmIGFyZ19zdHJpbmdzOgogICAgICAgICAgICAgdmFycyhuYW1lc3BhY2UpLnNldGRlZmF1bHQoX1VOUkVDT0dOSVpFRF9BUkdTX0FUVFIsIFtdKQogICAgICAgICAgICAgZ2V0YXR0cihuYW1lc3BhY2UsIF9VTlJFQ09HTklaRURfQVJHU19BVFRSKS5leHRlbmQoYXJnX3N0cmluZ3MpCkBAIC0xMTQzLDExICsxMTUwLDE3IEBACiAgICAgICAgICAgICBzYW1lIHZhbHVlcyBhcyB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCiAgICAgICAgIC0gYnVmc2l6ZSAtLSBUaGUgZmlsZSdzIGRlc2lyZWQgYnVmZmVyIHNpemUuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWVzIGFzCiAgICAgICAgICAgICB0aGUgYnVpbHRpbiBvcGVuKCkgZnVuY3Rpb24uCisgICAgICAgIC0gZW5jb2RpbmcgLS0gVGhlIGZpbGUncyBlbmNvZGluZy4gQWNjZXB0cyB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlCisgICAgICAgICAgICBidWlsdGluIG9wZW4oKSBmdW5jdGlvbi4KKyAgICAgICAgLSBlcnJvcnMgLS0gQSBzdHJpbmcgaW5kaWNhdGluZyBob3cgZW5jb2RpbmcgYW5kIGRlY29kaW5nIGVycm9ycyBhcmUgdG8KKyAgICAgICAgICAgIGJlIGhhbmRsZWQuIEFjY2VwdHMgdGhlIHNhbWUgdmFsdWUgYXMgdGhlIGJ1aWx0aW4gb3BlbigpIGZ1bmN0aW9uLgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZGU9J3InLCBidWZzaXplPS0xKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbW9kZT0ncicsIGJ1ZnNpemU9LTEsIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lKToKICAgICAgICAgc2VsZi5fbW9kZSA9IG1vZGUKICAgICAgICAgc2VsZi5fYnVmc2l6ZSA9IGJ1ZnNpemUKKyAgICAgICAgc2VsZi5fZW5jb2RpbmcgPSBlbmNvZGluZworICAgICAgICBzZWxmLl9lcnJvcnMgPSBlcnJvcnMKIAogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBzdHJpbmcpOgogICAgICAgICAjIHRoZSBzcGVjaWFsIGFyZ3VtZW50ICItIiBtZWFucyBzeXMuc3Rke2luLG91dH0KQEAgLTExNjIsMTQgKzExNzUsMTggQEAKIAogICAgICAgICAjIGFsbCBvdGhlciBhcmd1bWVudHMgYXJlIHVzZWQgYXMgZmlsZSBuYW1lcwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gb3BlbihzdHJpbmcsIHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICByZXR1cm4gb3BlbihzdHJpbmcsIHNlbGYuX21vZGUsIHNlbGYuX2J1ZnNpemUsIHNlbGYuX2VuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3JzKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgbWVzc2FnZSA9IF8oImNhbid0IG9wZW4gJyVzJzogJXMiKQogICAgICAgICAgICAgcmFpc2UgQXJndW1lbnRUeXBlRXJyb3IobWVzc2FnZSAlIChzdHJpbmcsIGUpKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBhcmdzID0gc2VsZi5fbW9kZSwgc2VsZi5fYnVmc2l6ZQotICAgICAgICBhcmdzX3N0ciA9ICcsICcuam9pbihyZXByKGFyZykgZm9yIGFyZyBpbiBhcmdzIGlmIGFyZyAhPSAtMSkKKyAgICAgICAga3dhcmdzID0gWygnZW5jb2RpbmcnLCBzZWxmLl9lbmNvZGluZyksICgnZXJyb3JzJywgc2VsZi5fZXJyb3JzKV0KKyAgICAgICAgYXJnc19zdHIgPSAnLCAnLmpvaW4oW3JlcHIoYXJnKSBmb3IgYXJnIGluIGFyZ3MgaWYgYXJnICE9IC0xXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJXM9JXInICUgKGt3LCBhcmcpIGZvciBrdywgYXJnIGluIGt3YXJncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXJnIGlzIG5vdCBOb25lXSkKICAgICAgICAgcmV0dXJuICclcyglcyknICUgKHR5cGUoc2VsZikuX19uYW1lX18sIGFyZ3Nfc3RyKQogCiAjID09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTE4OCw5ICsxMjA1LDEzIEBACiAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIG5hbWUsIGt3YXJnc1tuYW1lXSkKIAogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTmFtZXNwYWNlKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICByZXR1cm4gdmFycyhzZWxmKSA9PSB2YXJzKG90aGVyKQogCiAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBOYW1lc3BhY2UpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCiAKICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CkBAIC0yMDAzLDE3ICsyMDI0LDE0IEBACiAgICAgICAgICAgICAjIHJlcGxhY2UgYXJndW1lbnRzIHJlZmVyZW5jaW5nIGZpbGVzIHdpdGggdGhlIGZpbGUgY29udGVudAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGFyZ3NfZmlsZSA9IG9wZW4oYXJnX3N0cmluZ1sxOl0pCi0gICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGFyZ19zdHJpbmdbMTpdKSBhcyBhcmdzX2ZpbGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IFtdCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJnX2xpbmUgaW4gYXJnc19maWxlLnJlYWQoKS5zcGxpdGxpbmVzKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLmNvbnZlcnRfYXJnX2xpbmVfdG9fYXJncyhhcmdfbGluZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ19zdHJpbmdzLmFwcGVuZChhcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICBhcmdfc3RyaW5ncyA9IHNlbGYuX3JlYWRfYXJnc19mcm9tX2ZpbGVzKGFyZ19zdHJpbmdzKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV3X2FyZ19zdHJpbmdzLmV4dGVuZChhcmdfc3RyaW5ncykKLSAgICAgICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NfZmlsZS5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGVyciA9IF9zeXMuZXhjX2luZm8oKVsxXQogICAgICAgICAgICAgICAgICAgICBzZWxmLmVycm9yKHN0cihlcnIpKQogCmRpZmYgLS1naXQgYS9MaWIvYXN0LnB5IGIvTGliL2FzdC5weQppbmRleCAxM2Y1OWY5Li4wMmMzYjI4IDEwMDY0NAotLS0gYS9MaWIvYXN0LnB5CisrKyBiL0xpYi9hc3QucHkKQEAgLTQyLDcgKzQyLDYgQEAKICAgICBQeXRob24gbGl0ZXJhbCBzdHJ1Y3R1cmVzOiBzdHJpbmdzLCBieXRlcywgbnVtYmVycywgdHVwbGVzLCBsaXN0cywgZGljdHMsCiAgICAgc2V0cywgYm9vbGVhbnMsIGFuZCBOb25lLgogICAgICIiIgotICAgIF9zYWZlX25hbWVzID0geydOb25lJzogTm9uZSwgJ1RydWUnOiBUcnVlLCAnRmFsc2UnOiBGYWxzZX0KICAgICBpZiBpc2luc3RhbmNlKG5vZGVfb3Jfc3RyaW5nLCBzdHIpOgogICAgICAgICBub2RlX29yX3N0cmluZyA9IHBhcnNlKG5vZGVfb3Jfc3RyaW5nLCBtb2RlPSdldmFsJykKICAgICBpZiBpc2luc3RhbmNlKG5vZGVfb3Jfc3RyaW5nLCBFeHByZXNzaW9uKToKQEAgLTYxLDkgKzYwLDggQEAKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIERpY3QpOgogICAgICAgICAgICAgcmV0dXJuIGRpY3QoKF9jb252ZXJ0KGspLCBfY29udmVydCh2KSkgZm9yIGssIHYKICAgICAgICAgICAgICAgICAgICAgICAgIGluIHppcChub2RlLmtleXMsIG5vZGUudmFsdWVzKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE5hbWUpOgotICAgICAgICAgICAgaWYgbm9kZS5pZCBpbiBfc2FmZV9uYW1lczoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NhZmVfbmFtZXNbbm9kZS5pZF0KKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKG5vZGUsIE5hbWVDb25zdGFudCk6CisgICAgICAgICAgICByZXR1cm4gbm9kZS52YWx1ZQogICAgICAgICBlbGlmIGlzaW5zdGFuY2Uobm9kZSwgVW5hcnlPcCkgYW5kIFwKICAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUub3AsIChVQWRkLCBVU3ViKSkgYW5kIFwKICAgICAgICAgICAgICBpc2luc3RhbmNlKG5vZGUub3BlcmFuZCwgKE51bSwgVW5hcnlPcCwgQmluT3ApKToKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2hhdC5weSBiL0xpYi9hc3luY2hhdC5weQppbmRleCBlZWEzNDE4Li4xNGMxNTJmIDEwMDY0NAotLS0gYS9MaWIvYXN5bmNoYXQucHkKKysrIGIvTGliL2FzeW5jaGF0LnB5CkBAIC00NSwyNyArNDUsMjYgQEAKIG1ldGhvZCkgdXAgdG8gdGhlIHRlcm1pbmF0b3IsIGFuZCB0aGVuIGNvbnRyb2wgd2lsbCBiZSByZXR1cm5lZCB0bwogeW91IC0gYnkgY2FsbGluZyB5b3VyIHNlbGYuZm91bmRfdGVybWluYXRvcigpIG1ldGhvZC4KICIiIgotaW1wb3J0IHNvY2tldAogaW1wb3J0IGFzeW5jb3JlCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQogCiAKLWNsYXNzIGFzeW5jX2NoYXQgKGFzeW5jb3JlLmRpc3BhdGNoZXIpOgorY2xhc3MgYXN5bmNfY2hhdChhc3luY29yZS5kaXNwYXRjaGVyKToKICAgICAiIiJUaGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLiAgWW91IG11c3QgZGVyaXZlIGZyb20gdGhpcyBjbGFzcywgYW5kIGFkZAogICAgIHRoZSB0d28gbWV0aG9kcyBjb2xsZWN0X2luY29taW5nX2RhdGEoKSBhbmQgZm91bmRfdGVybWluYXRvcigpIiIiCiAKICAgICAjIHRoZXNlIGFyZSBvdmVycmlkYWJsZSBkZWZhdWx0cwogCi0gICAgYWNfaW5fYnVmZmVyX3NpemUgICAgICAgPSA0MDk2Ci0gICAgYWNfb3V0X2J1ZmZlcl9zaXplICAgICAgPSA0MDk2CisgICAgYWNfaW5fYnVmZmVyX3NpemUgPSA2NTUzNgorICAgIGFjX291dF9idWZmZXJfc2l6ZSA9IDY1NTM2CiAKICAgICAjIHdlIGRvbid0IHdhbnQgdG8gZW5hYmxlIHRoZSB1c2Ugb2YgZW5jb2RpbmcgYnkgZGVmYXVsdCwgYmVjYXVzZSB0aGF0IGlzIGEKICAgICAjIHNpZ24gb2YgYW4gYXBwbGljYXRpb24gYnVnIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBwYXNzIHNpbGVudGx5CiAKLSAgICB1c2VfZW5jb2RpbmcgICAgICAgICAgICA9IDAKLSAgICBlbmNvZGluZyAgICAgICAgICAgICAgICA9ICdsYXRpbi0xJworICAgIHVzZV9lbmNvZGluZyA9IDAKKyAgICBlbmNvZGluZyA9ICdsYXRpbi0xJwogCi0gICAgZGVmIF9faW5pdF9fIChzZWxmLCBzb2NrPU5vbmUsIG1hcD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc29jaz1Ob25lLCBtYXA9Tm9uZSk6CiAgICAgICAgICMgZm9yIHN0cmluZyB0ZXJtaW5hdG9yIG1hdGNoaW5nCiAgICAgICAgIHNlbGYuYWNfaW5fYnVmZmVyID0gYicnCiAKQEAgLTc3LDcgKzc2LDcgQEAKICAgICAgICAgIyB3ZSB0b3NzIHRoZSB1c2Ugb2YgdGhlICJzaW1wbGUgcHJvZHVjZXIiIGFuZCByZXBsYWNlIGl0IHdpdGgKICAgICAgICAgIyBhIHB1cmUgZGVxdWUsIHdoaWNoIHRoZSBvcmlnaW5hbCBmaWZvIHdhcyBhIHdyYXBwaW5nIG9mCiAgICAgICAgIHNlbGYucHJvZHVjZXJfZmlmbyA9IGRlcXVlKCkKLSAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyAoc2VsZiwgc29jaywgbWFwKQorICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIHNvY2ssIG1hcCkKIAogICAgIGRlZiBjb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZiwgZGF0YSk6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIm11c3QgYmUgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3MiKQpAQCAtOTMsMTMgKzkyLDE4IEBACiAgICAgZGVmIGZvdW5kX3Rlcm1pbmF0b3Ioc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoIm11c3QgYmUgaW1wbGVtZW50ZWQgaW4gc3ViY2xhc3MiKQogCi0gICAgZGVmIHNldF90ZXJtaW5hdG9yIChzZWxmLCB0ZXJtKToKLSAgICAgICAgIlNldCB0aGUgaW5wdXQgZGVsaW1pdGVyLiAgQ2FuIGJlIGEgZml4ZWQgc3RyaW5nIG9mIGFueSBsZW5ndGgsIGFuIGludGVnZXIsIG9yIE5vbmUiCisgICAgZGVmIHNldF90ZXJtaW5hdG9yKHNlbGYsIHRlcm0pOgorICAgICAgICAiIiJTZXQgdGhlIGlucHV0IGRlbGltaXRlci4KKworICAgICAgICBDYW4gYmUgYSBmaXhlZCBzdHJpbmcgb2YgYW55IGxlbmd0aCwgYW4gaW50ZWdlciwgb3IgTm9uZS4KKyAgICAgICAgIiIiCiAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVybSwgc3RyKSBhbmQgc2VsZi51c2VfZW5jb2Rpbmc6CiAgICAgICAgICAgICB0ZXJtID0gYnl0ZXModGVybSwgc2VsZi5lbmNvZGluZykKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHRlcm0sIGludCkgYW5kIHRlcm0gPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndGhlIG51bWJlciBvZiByZWNlaXZlZCBieXRlcyBtdXN0IGJlIHBvc2l0aXZlJykKICAgICAgICAgc2VsZi50ZXJtaW5hdG9yID0gdGVybQogCi0gICAgZGVmIGdldF90ZXJtaW5hdG9yIChzZWxmKToKKyAgICBkZWYgZ2V0X3Rlcm1pbmF0b3Ioc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLnRlcm1pbmF0b3IKIAogICAgICMgZ3JhYiBzb21lIG1vcmUgZGF0YSBmcm9tIHRoZSBzb2NrZXQsCkBAIC0xMDcsMTEgKzExMSwxMyBAQAogICAgICMgY2hlY2sgZm9yIHRoZSB0ZXJtaW5hdG9yLAogICAgICMgaWYgZm91bmQsIHRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuCiAKLSAgICBkZWYgaGFuZGxlX3JlYWQgKHNlbGYpOgorICAgIGRlZiBoYW5kbGVfcmVhZChzZWxmKToKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5yZWN2IChzZWxmLmFjX2luX2J1ZmZlcl9zaXplKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLnJlY3Yoc2VsZi5hY19pbl9idWZmZXJfc2l6ZSkKKyAgICAgICAgZXhjZXB0IEJsb2NraW5nSU9FcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9lcnJvcigpCiAgICAgICAgICAgICByZXR1cm4KIApAQCAtMTI5LDE3ICsxMzUsMTcgQEAKICAgICAgICAgICAgIHRlcm1pbmF0b3IgPSBzZWxmLmdldF90ZXJtaW5hdG9yKCkKICAgICAgICAgICAgIGlmIG5vdCB0ZXJtaW5hdG9yOgogICAgICAgICAgICAgICAgICMgbm8gdGVybWluYXRvciwgY29sbGVjdCBpdCBhbGwKLSAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YSAoc2VsZi5hY19pbl9idWZmZXIpCisgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZi5hY19pbl9idWZmZXIpCiAgICAgICAgICAgICAgICAgc2VsZi5hY19pbl9idWZmZXIgPSBiJycKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh0ZXJtaW5hdG9yLCBpbnQpOgogICAgICAgICAgICAgICAgICMgbnVtZXJpYyB0ZXJtaW5hdG9yCiAgICAgICAgICAgICAgICAgbiA9IHRlcm1pbmF0b3IKICAgICAgICAgICAgICAgICBpZiBsYiA8IG46Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhIChzZWxmLmFjX2luX2J1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZi5hY19pbl9idWZmZXIpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWNfaW5fYnVmZmVyID0gYicnCiAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVybWluYXRvciA9IHNlbGYudGVybWluYXRvciAtIGxiCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEgKHNlbGYuYWNfaW5fYnVmZmVyWzpuXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEoc2VsZi5hY19pbl9idWZmZXJbOm5dKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFjX2luX2J1ZmZlciA9IHNlbGYuYWNfaW5fYnVmZmVyW246XQogICAgICAgICAgICAgICAgICAgICBzZWxmLnRlcm1pbmF0b3IgPSAwCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm91bmRfdGVybWluYXRvcigpCkBAIC0xNTYsMzIgKzE2MiwzNyBAQAogICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IC0xOgogICAgICAgICAgICAgICAgICAgICAjIHdlIGZvdW5kIHRoZSB0ZXJtaW5hdG9yCiAgICAgICAgICAgICAgICAgICAgIGlmIGluZGV4ID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgICMgZG9uJ3QgYm90aGVyIHJlcG9ydGluZyB0aGUgZW1wdHkgc3RyaW5nIChzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YSAoc2VsZi5hY19pbl9idWZmZXJbOmluZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZG9uJ3QgYm90aGVyIHJlcG9ydGluZyB0aGUgZW1wdHkgc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAjIChzb3VyY2Ugb2Ygc3VidGxlIGJ1Z3MpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbGxlY3RfaW5jb21pbmdfZGF0YShzZWxmLmFjX2luX2J1ZmZlcls6aW5kZXhdKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFjX2luX2J1ZmZlciA9IHNlbGYuYWNfaW5fYnVmZmVyW2luZGV4K3Rlcm1pbmF0b3JfbGVuOl0KLSAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGlmIHRoZSB0ZXJtaW5hdG9yIGlzIGNoYW5nZWQgaGVyZS4KKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGRvZXMgdGhlIFJpZ2h0IFRoaW5nIGlmIHRoZSB0ZXJtaW5hdG9yCisgICAgICAgICAgICAgICAgICAgICMgaXMgY2hhbmdlZCBoZXJlLgogICAgICAgICAgICAgICAgICAgICBzZWxmLmZvdW5kX3Rlcm1pbmF0b3IoKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgZm9yIGEgcHJlZml4IG9mIHRoZSB0ZXJtaW5hdG9yCi0gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gZmluZF9wcmVmaXhfYXRfZW5kIChzZWxmLmFjX2luX2J1ZmZlciwgdGVybWluYXRvcikKKyAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBmaW5kX3ByZWZpeF9hdF9lbmQoc2VsZi5hY19pbl9idWZmZXIsIHRlcm1pbmF0b3IpCiAgICAgICAgICAgICAgICAgICAgIGlmIGluZGV4OgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5kZXggIT0gbGI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB3ZSBmb3VuZCBhIHByZWZpeCwgY29sbGVjdCB1cCB0byB0aGUgcHJlZml4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0X2luY29taW5nX2RhdGEgKHNlbGYuYWNfaW5fYnVmZmVyWzotaW5kZXhdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYuYWNfaW5fYnVmZmVyWzotaW5kZXhdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWNfaW5fYnVmZmVyID0gc2VsZi5hY19pbl9idWZmZXJbLWluZGV4Ol0KICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vIHByZWZpeCwgY29sbGVjdCBpdCBhbGwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhIChzZWxmLmFjX2luX2J1ZmZlcikKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYuYWNfaW5fYnVmZmVyKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hY19pbl9idWZmZXIgPSBiJycKIAotICAgIGRlZiBoYW5kbGVfd3JpdGUgKHNlbGYpOgorICAgIGRlZiBoYW5kbGVfd3JpdGUoc2VsZik6CiAgICAgICAgIHNlbGYuaW5pdGlhdGVfc2VuZCgpCiAKLSAgICBkZWYgaGFuZGxlX2Nsb3NlIChzZWxmKToKKyAgICBkZWYgaGFuZGxlX2Nsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKIAotICAgIGRlZiBwdXNoIChzZWxmLCBkYXRhKToKKyAgICBkZWYgcHVzaChzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZGF0YSBhcmd1bWVudCBtdXN0IGJlIGJ5dGUtaXNoICglciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZGF0YSkpCiAgICAgICAgIHNhYnMgPSBzZWxmLmFjX291dF9idWZmZXJfc2l6ZQogICAgICAgICBpZiBsZW4oZGF0YSkgPiBzYWJzOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCBzYWJzKToKQEAgLTE5MCwxMSArMjAxLDExIEBACiAgICAgICAgICAgICBzZWxmLnByb2R1Y2VyX2ZpZm8uYXBwZW5kKGRhdGEpCiAgICAgICAgIHNlbGYuaW5pdGlhdGVfc2VuZCgpCiAKLSAgICBkZWYgcHVzaF93aXRoX3Byb2R1Y2VyIChzZWxmLCBwcm9kdWNlcik6CisgICAgZGVmIHB1c2hfd2l0aF9wcm9kdWNlcihzZWxmLCBwcm9kdWNlcik6CiAgICAgICAgIHNlbGYucHJvZHVjZXJfZmlmby5hcHBlbmQocHJvZHVjZXIpCiAgICAgICAgIHNlbGYuaW5pdGlhdGVfc2VuZCgpCiAKLSAgICBkZWYgcmVhZGFibGUgKHNlbGYpOgorICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgInByZWRpY2F0ZSBmb3IgaW5jbHVzaW9uIGluIHRoZSByZWFkYWJsZSBmb3Igc2VsZWN0KCkiCiAgICAgICAgICMgY2Fubm90IHVzZSB0aGUgb2xkIHByZWRpY2F0ZSwgaXQgdmlvbGF0ZXMgdGhlIGNsYWltIG9mIHRoZQogICAgICAgICAjIHNldF90ZXJtaW5hdG9yIG1ldGhvZC4KQEAgLTIwMiwxMSArMjEzLDExIEBACiAgICAgICAgICMgcmV0dXJuIChsZW4oc2VsZi5hY19pbl9idWZmZXIpIDw9IHNlbGYuYWNfaW5fYnVmZmVyX3NpemUpCiAgICAgICAgIHJldHVybiAxCiAKLSAgICBkZWYgd3JpdGFibGUgKHNlbGYpOgorICAgIGRlZiB3cml0YWJsZShzZWxmKToKICAgICAgICAgInByZWRpY2F0ZSBmb3IgaW5jbHVzaW9uIGluIHRoZSB3cml0YWJsZSBmb3Igc2VsZWN0KCkiCiAgICAgICAgIHJldHVybiBzZWxmLnByb2R1Y2VyX2ZpZm8gb3IgKG5vdCBzZWxmLmNvbm5lY3RlZCkKIAotICAgIGRlZiBjbG9zZV93aGVuX2RvbmUgKHNlbGYpOgorICAgIGRlZiBjbG9zZV93aGVuX2RvbmUoc2VsZik6CiAgICAgICAgICJhdXRvbWF0aWNhbGx5IGNsb3NlIHRoaXMgY2hhbm5lbCBvbmNlIHRoZSBvdXRnb2luZyBxdWV1ZSBpcyBlbXB0eSIKICAgICAgICAgc2VsZi5wcm9kdWNlcl9maWZvLmFwcGVuZChOb25lKQogCkBAIC0yMTcsMTAgKzIyOCw4IEBACiAgICAgICAgICAgICBpZiBub3QgZmlyc3Q6CiAgICAgICAgICAgICAgICAgZGVsIHNlbGYucHJvZHVjZXJfZmlmb1swXQogICAgICAgICAgICAgICAgIGlmIGZpcnN0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICMjIHByaW50KCJmaXJzdCBpcyBOb25lIikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgICAgICAjIyBwcmludCgiZmlyc3QgaXMgbm90IE5vbmUiKQogCiAgICAgICAgICAgICAjIGhhbmRsZSBjbGFzc2ljIHByb2R1Y2VyIGJlaGF2aW9yCiAgICAgICAgICAgICBvYnMgPSBzZWxmLmFjX291dF9idWZmZXJfc2l6ZQpAQCAtMjQwLDcgKzI0OSw3IEBACiAgICAgICAgICAgICAjIHNlbmQgdGhlIGRhdGEKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBudW1fc2VudCA9IHNlbGYuc2VuZChkYXRhKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Vycm9yKCkKICAgICAgICAgICAgICAgICByZXR1cm4KIApAQCAtMjUyLDIwICsyNjEsMjEgQEAKICAgICAgICAgICAgICMgd2UgdHJpZWQgdG8gc2VuZCBzb21lIGFjdHVhbCBkYXRhCiAgICAgICAgICAgICByZXR1cm4KIAotICAgIGRlZiBkaXNjYXJkX2J1ZmZlcnMgKHNlbGYpOgorICAgIGRlZiBkaXNjYXJkX2J1ZmZlcnMoc2VsZik6CiAgICAgICAgICMgRW1lcmdlbmNpZXMgb25seSEKICAgICAgICAgc2VsZi5hY19pbl9idWZmZXIgPSBiJycKICAgICAgICAgZGVsIHNlbGYuaW5jb21pbmdbOl0KICAgICAgICAgc2VsZi5wcm9kdWNlcl9maWZvLmNsZWFyKCkKIAorCiBjbGFzcyBzaW1wbGVfcHJvZHVjZXI6CiAKLSAgICBkZWYgX19pbml0X18gKHNlbGYsIGRhdGEsIGJ1ZmZlcl9zaXplPTUxMik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEsIGJ1ZmZlcl9zaXplPTUxMik6CiAgICAgICAgIHNlbGYuZGF0YSA9IGRhdGEKICAgICAgICAgc2VsZi5idWZmZXJfc2l6ZSA9IGJ1ZmZlcl9zaXplCiAKLSAgICBkZWYgbW9yZSAoc2VsZik6Ci0gICAgICAgIGlmIGxlbiAoc2VsZi5kYXRhKSA+IHNlbGYuYnVmZmVyX3NpemU6CisgICAgZGVmIG1vcmUoc2VsZik6CisgICAgICAgIGlmIGxlbihzZWxmLmRhdGEpID4gc2VsZi5idWZmZXJfc2l6ZToKICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGF0YVs6c2VsZi5idWZmZXJfc2l6ZV0KICAgICAgICAgICAgIHNlbGYuZGF0YSA9IHNlbGYuZGF0YVtzZWxmLmJ1ZmZlcl9zaXplOl0KICAgICAgICAgICAgIHJldHVybiByZXN1bHQKQEAgLTI3NCwzOCArMjg0LDQwIEBACiAgICAgICAgICAgICBzZWxmLmRhdGEgPSBiJycKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAorCiBjbGFzcyBmaWZvOgotICAgIGRlZiBfX2luaXRfXyAoc2VsZiwgbGlzdD1Ob25lKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGlzdD1Ob25lKToKICAgICAgICAgaWYgbm90IGxpc3Q6CiAgICAgICAgICAgICBzZWxmLmxpc3QgPSBkZXF1ZSgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmxpc3QgPSBkZXF1ZShsaXN0KQogCi0gICAgZGVmIF9fbGVuX18gKHNlbGYpOgorICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gbGVuKHNlbGYubGlzdCkKIAotICAgIGRlZiBpc19lbXB0eSAoc2VsZik6CisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgogICAgICAgICByZXR1cm4gbm90IHNlbGYubGlzdAogCi0gICAgZGVmIGZpcnN0IChzZWxmKToKKyAgICBkZWYgZmlyc3Qoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmxpc3RbMF0KIAotICAgIGRlZiBwdXNoIChzZWxmLCBkYXRhKToKKyAgICBkZWYgcHVzaChzZWxmLCBkYXRhKToKICAgICAgICAgc2VsZi5saXN0LmFwcGVuZChkYXRhKQogCi0gICAgZGVmIHBvcCAoc2VsZik6CisgICAgZGVmIHBvcChzZWxmKToKICAgICAgICAgaWYgc2VsZi5saXN0OgogICAgICAgICAgICAgcmV0dXJuICgxLCBzZWxmLmxpc3QucG9wbGVmdCgpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuICgwLCBOb25lKQogCisKICMgR2l2ZW4gJ2hheXN0YWNrJywgc2VlIGlmIGFueSBwcmVmaXggb2YgJ25lZWRsZScgaXMgYXQgaXRzIGVuZC4gIFRoaXMKICMgYXNzdW1lcyBhbiBleGFjdCBtYXRjaCBoYXMgYWxyZWFkeSBiZWVuIGNoZWNrZWQuICBSZXR1cm4gdGhlIG51bWJlciBvZgogIyBjaGFyYWN0ZXJzIG1hdGNoZWQuCiAjIGZvciBleGFtcGxlOgotIyBmX3BfYV9lICgicXdlcnR5XHIiLCAiXHJcbiIpID0+IDEKLSMgZl9wX2FfZSAoInF3ZXJ0eWRramYiLCAiXHJcbiIpID0+IDAKLSMgZl9wX2FfZSAoInF3ZXJ0eVxyXG4iLCAiXHJcbiIpID0+IDx1bmRlZmluZWQ+CisjIGZfcF9hX2UoInF3ZXJ0eVxyIiwgIlxyXG4iKSA9PiAxCisjIGZfcF9hX2UoInF3ZXJ0eWRramYiLCAiXHJcbiIpID0+IDAKKyMgZl9wX2FfZSgicXdlcnR5XHJcbiIsICJcclxuIikgPT4gPHVuZGVmaW5lZD4KIAogIyB0aGlzIGNvdWxkIG1heWJlIGJlIG1hZGUgZmFzdGVyIHdpdGggYSBjb21wdXRlZCByZWdleD8KICMgW2Fuc3dlcjogbm87IGNpcmNhIFB5dGhvbi0yLjAsIEphbiAyMDAxXQpAQCAtMzE0LDcgKzMyNiw3IEBACiAjIHJlOiAgICAgICAgMTI4MjAvcwogIyByZWdleDogICAgIDE0MDM1L3MKIAotZGVmIGZpbmRfcHJlZml4X2F0X2VuZCAoaGF5c3RhY2ssIG5lZWRsZSk6CitkZWYgZmluZF9wcmVmaXhfYXRfZW5kKGhheXN0YWNrLCBuZWVkbGUpOgogICAgIGwgPSBsZW4obmVlZGxlKSAtIDEKICAgICB3aGlsZSBsIGFuZCBub3QgaGF5c3RhY2suZW5kc3dpdGgobmVlZGxlWzpsXSk6CiAgICAgICAgIGwgLT0gMQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vX19pbml0X18ucHkgYi9MaWIvYXN5bmNpby9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTE0NjZiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vX19pbml0X18ucHkKQEAgLTAsMCArMSw1MCBAQAorIiIiVGhlIGFzeW5jaW8gcGFja2FnZSwgdHJhY2tpbmcgUEVQIDMxNTYuIiIiCisKK2ltcG9ydCBzeXMKKworIyBUaGUgc2VsZWN0b3JzIG1vZHVsZSBpcyBpbiB0aGUgc3RkbGliIGluIFB5dGhvbiAzLjQgYnV0IG5vdCBpbiAzLjMuCisjIERvIHRoaXMgZmlyc3QsIHNvIHRoZSBvdGhlciBzdWJtb2R1bGVzIGNhbiB1c2UgImZyb20gLiBpbXBvcnQgc2VsZWN0b3JzIi4KKyMgUHJlZmVyIGFzeW5jaW8vc2VsZWN0b3JzLnB5IG92ZXIgdGhlIHN0ZGxpYiBvbmUsIGFzIG91cnMgbWF5IGJlIG5ld2VyLgordHJ5OgorICAgIGZyb20gLiBpbXBvcnQgc2VsZWN0b3JzCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgaW1wb3J0IHNlbGVjdG9ycyAgIyBXaWxsIGFsc28gYmUgZXhwb3J0ZWQuCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICMgU2ltaWxhciB0aGluZyBmb3IgX292ZXJsYXBwZWQuCisgICAgdHJ5OgorICAgICAgICBmcm9tIC4gaW1wb3J0IF9vdmVybGFwcGVkCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBpbXBvcnQgX292ZXJsYXBwZWQgICMgV2lsbCBhbHNvIGJlIGV4cG9ydGVkLgorCisjIFRoaXMgcmVsaWVzIG9uIGVhY2ggb2YgdGhlIHN1Ym1vZHVsZXMgaGF2aW5nIGFuIF9fYWxsX18gdmFyaWFibGUuCitmcm9tIC5iYXNlX2V2ZW50cyBpbXBvcnQgKgorZnJvbSAuY29yb3V0aW5lcyBpbXBvcnQgKgorZnJvbSAuZXZlbnRzIGltcG9ydCAqCitmcm9tIC5mdXR1cmVzIGltcG9ydCAqCitmcm9tIC5sb2NrcyBpbXBvcnQgKgorZnJvbSAucHJvdG9jb2xzIGltcG9ydCAqCitmcm9tIC5xdWV1ZXMgaW1wb3J0ICoKK2Zyb20gLnN0cmVhbXMgaW1wb3J0ICoKK2Zyb20gLnN1YnByb2Nlc3MgaW1wb3J0ICoKK2Zyb20gLnRhc2tzIGltcG9ydCAqCitmcm9tIC50cmFuc3BvcnRzIGltcG9ydCAqCisKK19fYWxsX18gPSAoYmFzZV9ldmVudHMuX19hbGxfXyArCisgICAgICAgICAgIGNvcm91dGluZXMuX19hbGxfXyArCisgICAgICAgICAgIGV2ZW50cy5fX2FsbF9fICsKKyAgICAgICAgICAgZnV0dXJlcy5fX2FsbF9fICsKKyAgICAgICAgICAgbG9ja3MuX19hbGxfXyArCisgICAgICAgICAgIHByb3RvY29scy5fX2FsbF9fICsKKyAgICAgICAgICAgcXVldWVzLl9fYWxsX18gKworICAgICAgICAgICBzdHJlYW1zLl9fYWxsX18gKworICAgICAgICAgICBzdWJwcm9jZXNzLl9fYWxsX18gKworICAgICAgICAgICB0YXNrcy5fX2FsbF9fICsKKyAgICAgICAgICAgdHJhbnNwb3J0cy5fX2FsbF9fKQorCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfZXZlbnRzIGltcG9ydCAqCisgICAgX19hbGxfXyArPSB3aW5kb3dzX2V2ZW50cy5fX2FsbF9fCitlbHNlOgorICAgIGZyb20gLnVuaXhfZXZlbnRzIGltcG9ydCAqICAjIHByYWdtYTogbm8gY292ZXIKKyAgICBfX2FsbF9fICs9IHVuaXhfZXZlbnRzLl9fYWxsX18KZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUwNTczMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Jhc2VfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTMzOCBAQAorIiIiQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBldmVudCBsb29wLgorCitUaGUgZXZlbnQgbG9vcCBjYW4gYmUgYnJva2VuIHVwIGludG8gYSBtdWx0aXBsZXhlciAodGhlIHBhcnQKK3Jlc3BvbnNpYmxlIGZvciBub3RpZnlpbmcgdXMgb2YgSS9PIGV2ZW50cykgYW5kIHRoZSBldmVudCBsb29wIHByb3BlciwKK3doaWNoIHdyYXBzIGEgbXVsdGlwbGV4ZXIgd2l0aCBmdW5jdGlvbmFsaXR5IGZvciBzY2hlZHVsaW5nIGNhbGxiYWNrcywKK2ltbWVkaWF0ZWx5IG9yIGF0IGEgZ2l2ZW4gdGltZSBpbiB0aGUgZnV0dXJlLgorCitXaGVuZXZlciBhIHB1YmxpYyBBUEkgdGFrZXMgYSBjYWxsYmFjaywgc3Vic2VxdWVudCBwb3NpdGlvbmFsCithcmd1bWVudHMgd2lsbCBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGlmL3doZW4gaXQgaXMgY2FsbGVkLiAgVGhpcworYXZvaWRzIHRoZSBwcm9saWZlcmF0aW9uIG9mIHRyaXZpYWwgbGFtYmRhcyBpbXBsZW1lbnRpbmcgY2xvc3VyZXMuCitLZXl3b3JkIGFyZ3VtZW50cyBmb3IgdGhlIGNhbGxiYWNrIGFyZSBub3Qgc3VwcG9ydGVkOyB0aGlzIGlzIGEKK2NvbnNjaW91cyBkZXNpZ24gZGVjaXNpb24sIGxlYXZpbmcgdGhlIGRvb3Igb3BlbiBmb3Iga2V5d29yZCBhcmd1bWVudHMKK3RvIG1vZGlmeSB0aGUgbWVhbmluZyBvZiB0aGUgQVBJIGNhbGwgaXRzZWxmLgorIiIiCisKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaGVhcHEKK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgaXBhZGRyZXNzCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCBzeXMKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBjb3JvdXRpbmVzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHRhc2tzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworX19hbGxfXyA9IFsnQmFzZUV2ZW50TG9vcCddCisKKworIyBBcmd1bWVudCBmb3IgZGVmYXVsdCB0aHJlYWQgcG9vbCBleGVjdXRvciBjcmVhdGlvbi4KK19NQVhfV09SS0VSUyA9IDUKKworIyBNaW5pbXVtIG51bWJlciBvZiBfc2NoZWR1bGVkIHRpbWVyIGhhbmRsZXMgYmVmb3JlIGNsZWFudXAgb2YKKyMgY2FuY2VsbGVkIGhhbmRsZXMgaXMgcGVyZm9ybWVkLgorX01JTl9TQ0hFRFVMRURfVElNRVJfSEFORExFUyA9IDEwMAorCisjIE1pbmltdW0gZnJhY3Rpb24gb2YgX3NjaGVkdWxlZCB0aW1lciBoYW5kbGVzIHRoYXQgYXJlIGNhbmNlbGxlZAorIyBiZWZvcmUgY2xlYW51cCBvZiBjYW5jZWxsZWQgaGFuZGxlcyBpcyBwZXJmb3JtZWQuCitfTUlOX0NBTkNFTExFRF9USU1FUl9IQU5ETEVTX0ZSQUNUSU9OID0gMC41CisKK2RlZiBfZm9ybWF0X2hhbmRsZShoYW5kbGUpOgorICAgIGNiID0gaGFuZGxlLl9jYWxsYmFjaworICAgIGlmIGluc3BlY3QuaXNtZXRob2QoY2IpIGFuZCBpc2luc3RhbmNlKGNiLl9fc2VsZl9fLCB0YXNrcy5UYXNrKToKKyAgICAgICAgIyBmb3JtYXQgdGhlIHRhc2sKKyAgICAgICAgcmV0dXJuIHJlcHIoY2IuX19zZWxmX18pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIHN0cihoYW5kbGUpCisKKworZGVmIF9mb3JtYXRfcGlwZShmZCk6CisgICAgaWYgZmQgPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICByZXR1cm4gJzxwaXBlPicKKyAgICBlbGlmIGZkID09IHN1YnByb2Nlc3MuU1RET1VUOgorICAgICAgICByZXR1cm4gJzxzdGRvdXQ+JworICAgIGVsc2U6CisgICAgICAgIHJldHVybiByZXByKGZkKQorCisKKyMgTGludXgncyBzb2NrLnR5cGUgaXMgYSBiaXRtYXNrIHRoYXQgY2FuIGluY2x1ZGUgZXh0cmEgaW5mbyBhYm91dCBzb2NrZXQuCitfU09DS0VUX1RZUEVfTUFTSyA9IDAKK2lmIGhhc2F0dHIoc29ja2V0LCAnU09DS19OT05CTE9DSycpOgorICAgIF9TT0NLRVRfVFlQRV9NQVNLIHw9IHNvY2tldC5TT0NLX05PTkJMT0NLCitpZiBoYXNhdHRyKHNvY2tldCwgJ1NPQ0tfQ0xPRVhFQycpOgorICAgIF9TT0NLRVRfVFlQRV9NQVNLIHw9IHNvY2tldC5TT0NLX0NMT0VYRUMKKworCitAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPTEwMjQpCitkZWYgX2lwYWRkcl9pbmZvKGhvc3QsIHBvcnQsIGZhbWlseSwgdHlwZSwgcHJvdG8pOgorICAgICMgVHJ5IHRvIHNraXAgZ2V0YWRkcmluZm8gaWYgImhvc3QiIGlzIGFscmVhZHkgYW4gSVAuIFNpbmNlIGdldGFkZHJpbmZvCisgICAgIyBibG9ja3Mgb24gYW4gZXhjbHVzaXZlIGxvY2sgb24gc29tZSBwbGF0Zm9ybXMsIHVzZXJzIG1pZ2h0IGhhbmRsZSBuYW1lCisgICAgIyByZXNvbHV0aW9uIGluIHRoZWlyIG93biBjb2RlIGFuZCBwYXNzIGluIHJlc29sdmVkIElQcy4KKyAgICBpZiBwcm90byBub3QgaW4gezAsIHNvY2tldC5JUFBST1RPX1RDUCwgc29ja2V0LklQUFJPVE9fVURQfSBvciBob3N0IGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisKKyAgICB0eXBlICY9IH5fU09DS0VUX1RZUEVfTUFTSworICAgIGlmIHR5cGUgPT0gc29ja2V0LlNPQ0tfU1RSRUFNOgorICAgICAgICBwcm90byA9IHNvY2tldC5JUFBST1RPX1RDUAorICAgIGVsaWYgdHlwZSA9PSBzb2NrZXQuU09DS19ER1JBTToKKyAgICAgICAgcHJvdG8gPSBzb2NrZXQuSVBQUk9UT19VRFAKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgaWYgaGFzYXR0cihzb2NrZXQsICdpbmV0X3B0b24nKToKKyAgICAgICAgaWYgZmFtaWx5ID09IHNvY2tldC5BRl9VTlNQRUM6CisgICAgICAgICAgICBhZnMgPSBbc29ja2V0LkFGX0lORVQsIHNvY2tldC5BRl9JTkVUNl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFmcyA9IFtmYW1pbHldCisKKyAgICAgICAgZm9yIGFmIGluIGFmczoKKyAgICAgICAgICAgICMgTGludXgncyBpbmV0X3B0b24gZG9lc24ndCBhY2NlcHQgYW4gSVB2NiB6b25lIGluZGV4IGFmdGVyIGhvc3QsCisgICAgICAgICAgICAjIGxpa2UgJzo6MSVsbzAnLCBzbyBzdHJpcCBpdC4gSWYgd2UgaGFwcGVuIHRvIG1ha2UgYW4gaW52YWxpZAorICAgICAgICAgICAgIyBhZGRyZXNzIGxvb2sgdmFsaWQsIHdlIGZhaWwgbGF0ZXIgaW4gc29jay5jb25uZWN0IG9yIHNvY2suYmluZC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBhZiA9PSBzb2NrZXQuQUZfSU5FVDY6CisgICAgICAgICAgICAgICAgICAgIHNvY2tldC5pbmV0X3B0b24oYWYsIGhvc3QucGFydGl0aW9uKCclJylbMF0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0LmluZXRfcHRvbihhZiwgaG9zdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWYsIHR5cGUsIHByb3RvLCAnJywgKGhvc3QsIHBvcnQpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyAiaG9zdCIgaXMgbm90IGFuIElQIGFkZHJlc3MuCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICAjIE5vIGluZXRfcHRvbi4gKE9uIFdpbmRvd3MgaXQncyBvbmx5IGF2YWlsYWJsZSBzaW5jZSBQeXRob24gMy40LikKKyAgICAjIEV2ZW4gdGhvdWdoIGdldGFkZHJpbmZvIHdpdGggQUlfTlVNRVJJQ0hPU1Qgd291bGQgYmUgbm9uLWJsb2NraW5nLCBpdAorICAgICMgc3RpbGwgcmVxdWlyZXMgYSBsb2NrIG9uIHNvbWUgcGxhdGZvcm1zLCBhbmQgd2FpdGluZyBmb3IgdGhhdCBsb2NrIGNvdWxkCisgICAgIyBibG9jayB0aGUgZXZlbnQgbG9vcC4gVXNlIGlwYWRkcmVzcyBpbnN0ZWFkLCBpdCdzIGp1c3QgdGV4dCBwYXJzaW5nLgorICAgIHRyeToKKyAgICAgICAgYWRkciA9IGlwYWRkcmVzcy5JUHY0QWRkcmVzcyhob3N0KQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBhZGRyID0gaXBhZGRyZXNzLklQdjZBZGRyZXNzKGhvc3QucGFydGl0aW9uKCclJylbMF0pCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGFmID0gc29ja2V0LkFGX0lORVQgaWYgYWRkci52ZXJzaW9uID09IDQgZWxzZSBzb2NrZXQuQUZfSU5FVDYKKyAgICBpZiBmYW1pbHkgbm90IGluIChzb2NrZXQuQUZfVU5TUEVDLCBhZik6CisgICAgICAgICMgImhvc3QiIGlzIHdyb25nIElQIHZlcnNpb24gZm9yICJmYW1pbHkiLgorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgcmV0dXJuIGFmLCB0eXBlLCBwcm90bywgJycsIChob3N0LCBwb3J0KQorCisKK2RlZiBfY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCBhZGRyZXNzKToKKyAgICAjIEVuc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlzIGFscmVhZHkgcmVzb2x2ZWQgdG8gYXZvaWQgdGhlIHRyYXAgb2YgaGFuZ2luZworICAgICMgdGhlIGVudGlyZSBldmVudCBsb29wIHdoZW4gdGhlIGFkZHJlc3MgcmVxdWlyZXMgZG9pbmcgYSBETlMgbG9va3VwLgorCisgICAgaWYgaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJykgYW5kIHNvY2suZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgorICAgICAgICByZXR1cm4KKworICAgIGhvc3QsIHBvcnQgPSBhZGRyZXNzWzoyXQorICAgIGlmIF9pcGFkZHJfaW5mbyhob3N0LCBwb3J0LCBzb2NrLmZhbWlseSwgc29jay50eXBlLCBzb2NrLnByb3RvKSBpcyBOb25lOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJhZGRyZXNzIG11c3QgYmUgcmVzb2x2ZWQgKElQIGFkZHJlc3MpLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiIGdvdCBob3N0ICVyIiAlIGhvc3QpCisKKworZGVmIF9ydW5fdW50aWxfY29tcGxldGVfY2IoZnV0KToKKyAgICBleGMgPSBmdXQuX2V4Y2VwdGlvbgorICAgIGlmIChpc2luc3RhbmNlKGV4YywgQmFzZUV4Y2VwdGlvbikKKyAgICBhbmQgbm90IGlzaW5zdGFuY2UoZXhjLCBFeGNlcHRpb24pKToKKyAgICAgICAgIyBJc3N1ZSAjMjI0Mjk6IHJ1bl9mb3JldmVyKCkgYWxyZWFkeSBmaW5pc2hlZCwgbm8gbmVlZCB0bworICAgICAgICAjIHN0b3AgaXQuCisgICAgICAgIHJldHVybgorICAgIGZ1dC5fbG9vcC5zdG9wKCkKKworCitjbGFzcyBTZXJ2ZXIoZXZlbnRzLkFic3RyYWN0U2VydmVyKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrZXRzKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5zb2NrZXRzID0gc29ja2V0cworICAgICAgICBzZWxmLl9hY3RpdmVfY291bnQgPSAwCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBbXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzwlcyBzb2NrZXRzPSVyPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuc29ja2V0cykKKworICAgIGRlZiBfYXR0YWNoKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zb2NrZXRzIGlzIG5vdCBOb25lCisgICAgICAgIHNlbGYuX2FjdGl2ZV9jb3VudCArPSAxCisKKyAgICBkZWYgX2RldGFjaChzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2FjdGl2ZV9jb3VudCA+IDAKKyAgICAgICAgc2VsZi5fYWN0aXZlX2NvdW50IC09IDEKKyAgICAgICAgaWYgc2VsZi5fYWN0aXZlX2NvdW50ID09IDAgYW5kIHNlbGYuc29ja2V0cyBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc29ja2V0cyA9IHNlbGYuc29ja2V0cworICAgICAgICBpZiBzb2NrZXRzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5zb2NrZXRzID0gTm9uZQorICAgICAgICBmb3Igc29jayBpbiBzb2NrZXRzOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5fc3RvcF9zZXJ2aW5nKHNvY2spCisgICAgICAgIGlmIHNlbGYuX2FjdGl2ZV9jb3VudCA9PSAwOgorICAgICAgICAgICAgc2VsZi5fd2FrZXVwKCkKKworICAgIGRlZiBfd2FrZXVwKHNlbGYpOgorICAgICAgICB3YWl0ZXJzID0gc2VsZi5fd2FpdGVycworICAgICAgICBzZWxmLl93YWl0ZXJzID0gTm9uZQorICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnM6CisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdCh3YWl0ZXIpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHdhaXRfY2xvc2VkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnNvY2tldHMgaXMgTm9uZSBvciBzZWxmLl93YWl0ZXJzIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl93YWl0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisKKworY2xhc3MgQmFzZUV2ZW50TG9vcChldmVudHMuQWJzdHJhY3RFdmVudExvb3ApOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl90aW1lcl9jYW5jZWxsZWRfY291bnQgPSAwCisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX3N0b3BwaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcmVhZHkgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZCA9IFtdCisgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBOb25lCisgICAgICAgIHNlbGYuX2ludGVybmFsX2ZkcyA9IDAKKyAgICAgICAgIyBJZGVudGlmaWVyIG9mIHRoZSB0aHJlYWQgcnVubmluZyB0aGUgZXZlbnQgbG9vcCwgb3IgTm9uZSBpZiB0aGUKKyAgICAgICAgIyBldmVudCBsb29wIGlzIG5vdCBydW5uaW5nCisgICAgICAgIHNlbGYuX3RocmVhZF9pZCA9IE5vbmUKKyAgICAgICAgc2VsZi5fY2xvY2tfcmVzb2x1dGlvbiA9IHRpbWUuZ2V0X2Nsb2NrX2luZm8oJ21vbm90b25pYycpLnJlc29sdXRpb24KKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2hhbmRsZXIgPSBOb25lCisgICAgICAgIHNlbGYuc2V0X2RlYnVnKChub3Qgc3lzLmZsYWdzLmlnbm9yZV9lbnZpcm9ubWVudAorICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGJvb2wob3MuZW52aXJvbi5nZXQoJ1BZVEhPTkFTWU5DSU9ERUJVRycpKSkpCisgICAgICAgICMgSW4gZGVidWcgbW9kZSwgaWYgdGhlIGV4ZWN1dGlvbiBvZiBhIGNhbGxiYWNrIG9yIGEgc3RlcCBvZiBhIHRhc2sKKyAgICAgICAgIyBleGNlZWQgdGhpcyBkdXJhdGlvbiBpbiBzZWNvbmRzLCB0aGUgc2xvdyBjYWxsYmFjay90YXNrIGlzIGxvZ2dlZC4KKyAgICAgICAgc2VsZi5zbG93X2NhbGxiYWNrX2R1cmF0aW9uID0gMC4xCisgICAgICAgIHNlbGYuX2N1cnJlbnRfaGFuZGxlID0gTm9uZQorICAgICAgICBzZWxmLl90YXNrX2ZhY3RvcnkgPSBOb25lCisgICAgICAgIHNlbGYuX2Nvcm91dGluZV93cmFwcGVyX3NldCA9IEZhbHNlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzwlcyBydW5uaW5nPSVzIGNsb3NlZD0lcyBkZWJ1Zz0lcz4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuaXNfcnVubmluZygpLAorICAgICAgICAgICAgICAgICAgIHNlbGYuaXNfY2xvc2VkKCksIHNlbGYuZ2V0X2RlYnVnKCkpKQorCisgICAgZGVmIGNyZWF0ZV90YXNrKHNlbGYsIGNvcm8pOgorICAgICAgICAiIiJTY2hlZHVsZSBhIGNvcm91dGluZSBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuIGEgdGFzayBvYmplY3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQorICAgICAgICBpZiBzZWxmLl90YXNrX2ZhY3RvcnkgaXMgTm9uZToKKyAgICAgICAgICAgIHRhc2sgPSB0YXNrcy5UYXNrKGNvcm8sIGxvb3A9c2VsZikKKyAgICAgICAgICAgIGlmIHRhc2suX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgZGVsIHRhc2suX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXNrID0gc2VsZi5fdGFza19mYWN0b3J5KHNlbGYsIGNvcm8pCisgICAgICAgIHJldHVybiB0YXNrCisKKyAgICBkZWYgc2V0X3Rhc2tfZmFjdG9yeShzZWxmLCBmYWN0b3J5KToKKyAgICAgICAgIiIiU2V0IGEgdGFzayBmYWN0b3J5IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IGxvb3AuY3JlYXRlX3Rhc2soKS4KKworICAgICAgICBJZiBmYWN0b3J5IGlzIE5vbmUgdGhlIGRlZmF1bHQgdGFzayBmYWN0b3J5IHdpbGwgYmUgc2V0LgorCisgICAgICAgIElmIGZhY3RvcnkgaXMgYSBjYWxsYWJsZSwgaXQgc2hvdWxkIGhhdmUgYSBzaWduYXR1cmUgbWF0Y2hpbmcKKyAgICAgICAgJyhsb29wLCBjb3JvKScsIHdoZXJlICdsb29wJyB3aWxsIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUKKyAgICAgICAgZXZlbnQgbG9vcCwgJ2Nvcm8nIHdpbGwgYmUgYSBjb3JvdXRpbmUgb2JqZWN0LiAgVGhlIGNhbGxhYmxlCisgICAgICAgIG11c3QgcmV0dXJuIGEgRnV0dXJlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgZmFjdG9yeSBpcyBub3QgTm9uZSBhbmQgbm90IGNhbGxhYmxlKGZhY3RvcnkpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd0YXNrIGZhY3RvcnkgbXVzdCBiZSBhIGNhbGxhYmxlIG9yIE5vbmUnKQorICAgICAgICBzZWxmLl90YXNrX2ZhY3RvcnkgPSBmYWN0b3J5CisKKyAgICBkZWYgZ2V0X3Rhc2tfZmFjdG9yeShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgdGFzayBmYWN0b3J5LCBvciBOb25lIGlmIHRoZSBkZWZhdWx0IG9uZSBpcyBpbiB1c2UuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl90YXNrX2ZhY3RvcnkKKworICAgIGRlZiBfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBzb2NrZXQgdHJhbnNwb3J0LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIFNTTCB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzPU5vbmUsIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIGRhdGFncmFtIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQoc2VsZiwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgcmVhZCBwaXBlIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSB3cml0ZSBwaXBlIHRyYW5zcG9ydC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChzZWxmLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICAiIiJDcmVhdGUgc3VicHJvY2VzcyB0cmFuc3BvcnQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgIiIiV3JpdGUgYSBieXRlIHRvIHNlbGYtcGlwZSwgdG8gd2FrZSB1cCB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCisKKyAgICAgICAgVGhlIHN1YmNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBpbXBsZW1lbnRpbmcgdGhlIHNlbGYtcGlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfcHJvY2Vzc19ldmVudHMoc2VsZiwgZXZlbnRfbGlzdCk6CisgICAgICAgICIiIlByb2Nlc3Mgc2VsZWN0b3IgZXZlbnRzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgX2NoZWNrX2Nsb3NlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFdmVudCBsb29wIGlzIGNsb3NlZCcpCisKKyAgICBkZWYgcnVuX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgICIiIlJ1biB1bnRpbCBzdG9wKCkgaXMgY2FsbGVkLiIiIgorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQorICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRXZlbnQgbG9vcCBpcyBydW5uaW5nLicpCisgICAgICAgIHNlbGYuX3NldF9jb3JvdXRpbmVfd3JhcHBlcihzZWxmLl9kZWJ1ZykKKyAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gdGhyZWFkaW5nLmdldF9pZGVudCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgc2VsZi5fcnVuX29uY2UoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3N0b3BwaW5nOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3RvcHBpbmcgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5fdGhyZWFkX2lkID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fc2V0X2Nvcm91dGluZV93cmFwcGVyKEZhbHNlKQorCisgICAgZGVmIHJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLCBmdXR1cmUpOgorICAgICAgICAiIiJSdW4gdW50aWwgdGhlIEZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIGNvcm91dGluZSwgaXQgaXMgd3JhcHBlZCBpbiBhIFRhc2suCisKKyAgICAgICAgV0FSTklORzogSXQgd291bGQgYmUgZGlzYXN0cm91cyB0byBjYWxsIHJ1bl91bnRpbF9jb21wbGV0ZSgpCisgICAgICAgIHdpdGggdGhlIHNhbWUgY29yb3V0aW5lIHR3aWNlIC0tIGl0IHdvdWxkIHdyYXAgaXQgaW4gdHdvCisgICAgICAgIGRpZmZlcmVudCBUYXNrcyBhbmQgdGhhdCBjYW4ndCBiZSBnb29kLgorCisgICAgICAgIFJldHVybiB0aGUgRnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZSBpdHMgZXhjZXB0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKworICAgICAgICBuZXdfdGFzayA9IG5vdCBpc2luc3RhbmNlKGZ1dHVyZSwgZnV0dXJlcy5GdXR1cmUpCisgICAgICAgIGZ1dHVyZSA9IHRhc2tzLmVuc3VyZV9mdXR1cmUoZnV0dXJlLCBsb29wPXNlbGYpCisgICAgICAgIGlmIG5ld190YXNrOgorICAgICAgICAgICAgIyBBbiBleGNlcHRpb24gaXMgcmFpc2VkIGlmIHRoZSBmdXR1cmUgZGlkbid0IGNvbXBsZXRlLCBzbyB0aGVyZQorICAgICAgICAgICAgIyBpcyBubyBuZWVkIHRvIGxvZyB0aGUgImRlc3Ryb3kgcGVuZGluZyB0YXNrIiBtZXNzYWdlCisgICAgICAgICAgICBmdXR1cmUuX2xvZ19kZXN0cm95X3BlbmRpbmcgPSBGYWxzZQorCisgICAgICAgIGZ1dHVyZS5hZGRfZG9uZV9jYWxsYmFjayhfcnVuX3VudGlsX2NvbXBsZXRlX2NiKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaWYgbmV3X3Rhc2sgYW5kIGZ1dHVyZS5kb25lKCkgYW5kIG5vdCBmdXR1cmUuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgIyBUaGUgY29yb3V0aW5lIHJhaXNlZCBhIEJhc2VFeGNlcHRpb24uIENvbnN1bWUgdGhlIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgICMgdG8gbm90IGxvZyBhIHdhcm5pbmcsIHRoZSBjYWxsZXIgZG9lc24ndCBoYXZlIGFjY2VzcyB0byB0aGUKKyAgICAgICAgICAgICAgICAjIGxvY2FsIHRhc2suCisgICAgICAgICAgICAgICAgZnV0dXJlLmV4Y2VwdGlvbigpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBmdXR1cmUucmVtb3ZlX2RvbmVfY2FsbGJhY2soX3J1bl91bnRpbF9jb21wbGV0ZV9jYikKKyAgICAgICAgaWYgbm90IGZ1dHVyZS5kb25lKCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0V2ZW50IGxvb3Agc3RvcHBlZCBiZWZvcmUgRnV0dXJlIGNvbXBsZXRlZC4nKQorCisgICAgICAgIHJldHVybiBmdXR1cmUucmVzdWx0KCkKKworICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAiIiJTdG9wIHJ1bm5pbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICAgICAgRXZlcnkgY2FsbGJhY2sgYWxyZWFkeSBzY2hlZHVsZWQgd2lsbCBzdGlsbCBydW4uICBUaGlzIHNpbXBseSBpbmZvcm1zCisgICAgICAgIHJ1bl9mb3JldmVyIHRvIHN0b3AgbG9vcGluZyBhZnRlciBhIGNvbXBsZXRlIGl0ZXJhdGlvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX3N0b3BwaW5nID0gVHJ1ZQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBUaGlzIGNsZWFycyB0aGUgcXVldWVzIGFuZCBzaHV0cyBkb3duIHRoZSBleGVjdXRvciwKKyAgICAgICAgYnV0IGRvZXMgbm90IHdhaXQgZm9yIHRoZSBleGVjdXRvciB0byBmaW5pc2guCisKKyAgICAgICAgVGhlIGV2ZW50IGxvb3AgbXVzdCBub3QgYmUgcnVubmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgY2xvc2UgYSBydW5uaW5nIGV2ZW50IGxvb3AiKQorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkNsb3NlICVyIiwgc2VsZikKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQorICAgICAgICBzZWxmLl9yZWFkeS5jbGVhcigpCisgICAgICAgIHNlbGYuX3NjaGVkdWxlZC5jbGVhcigpCisgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICBpZiBleGVjdXRvciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBOb25lCisgICAgICAgICAgICBleGVjdXRvci5zaHV0ZG93bih3YWl0PUZhbHNlKQorCisgICAgZGVmIGlzX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBsb29wIHdhcyBjbG9zZWQuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9jbG9zZWQKKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfY2xvc2VkKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigidW5jbG9zZWQgZXZlbnQgbG9vcCAlciIgJSBzZWxmLCBSZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfcnVubmluZygpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBpc19ydW5uaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGxvb3AgaXMgcnVubmluZy4iIiIKKyAgICAgICAgcmV0dXJuIChzZWxmLl90aHJlYWRfaWQgaXMgbm90IE5vbmUpCisKKyAgICBkZWYgdGltZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSB0aW1lIGFjY29yZGluZyB0byB0aGUgZXZlbnQgbG9vcCdzIGNsb2NrLgorCisgICAgICAgIFRoaXMgaXMgYSBmbG9hdCBleHByZXNzZWQgaW4gc2Vjb25kcyBzaW5jZSBhbiBlcG9jaCwgYnV0IHRoZQorICAgICAgICBlcG9jaCwgcHJlY2lzaW9uLCBhY2N1cmFjeSBhbmQgZHJpZnQgYXJlIHVuc3BlY2lmaWVkIGFuZCBtYXkKKyAgICAgICAgZGlmZmVyIHBlciBldmVudCBsb29wLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHRpbWUubW9ub3RvbmljKCkKKworICAgIGRlZiBjYWxsX2xhdGVyKHNlbGYsIGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBcnJhbmdlIGZvciBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhdCBhIGdpdmVuIHRpbWUuCisKKyAgICAgICAgUmV0dXJuIGEgSGFuZGxlOiBhbiBvcGFxdWUgb2JqZWN0IHdpdGggYSBjYW5jZWwoKSBtZXRob2QgdGhhdAorICAgICAgICBjYW4gYmUgdXNlZCB0byBjYW5jZWwgdGhlIGNhbGwuCisKKyAgICAgICAgVGhlIGRlbGF5IGNhbiBiZSBhbiBpbnQgb3IgZmxvYXQsIGV4cHJlc3NlZCBpbiBzZWNvbmRzLiAgSXQgaXMKKyAgICAgICAgYWx3YXlzIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHRpbWUuCisKKyAgICAgICAgRWFjaCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBleGFjdGx5IG9uY2UuICBJZiB0d28gY2FsbGJhY2tzCisgICAgICAgIGFyZSBzY2hlZHVsZWQgZm9yIGV4YWN0bHkgdGhlIHNhbWUgdGltZSwgaXQgdW5kZWZpbmVkIHdoaWNoCisgICAgICAgIHdpbGwgYmUgY2FsbGVkIGZpcnN0LgorCisgICAgICAgIEFueSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhZnRlciB0aGUgY2FsbGJhY2sgd2lsbCBiZSBwYXNzZWQgdG8KKyAgICAgICAgdGhlIGNhbGxiYWNrIHdoZW4gaXQgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgdGltZXIgPSBzZWxmLmNhbGxfYXQoc2VsZi50aW1lKCkgKyBkZWxheSwgY2FsbGJhY2ssICphcmdzKQorICAgICAgICBpZiB0aW1lci5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGRlbCB0aW1lci5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgcmV0dXJuIHRpbWVyCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJMaWtlIGNhbGxfbGF0ZXIoKSwgYnV0IHVzZXMgYW4gYWJzb2x1dGUgdGltZS4KKworICAgICAgICBBYnNvbHV0ZSB0aW1lIGNvcnJlc3BvbmRzIHRvIHRoZSBldmVudCBsb29wJ3MgdGltZSgpIG1ldGhvZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIChjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNhbGxiYWNrKQorICAgICAgICBvciBjb3JvdXRpbmVzLmlzY29yb3V0aW5lZnVuY3Rpb24oY2FsbGJhY2spKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIGNhbGxfYXQoKSIpCisgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGhyZWFkKCkKKyAgICAgICAgdGltZXIgPSBldmVudHMuVGltZXJIYW5kbGUod2hlbiwgY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisgICAgICAgIGlmIHRpbWVyLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHRpbWVyLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICBoZWFwcS5oZWFwcHVzaChzZWxmLl9zY2hlZHVsZWQsIHRpbWVyKQorICAgICAgICB0aW1lci5fc2NoZWR1bGVkID0gVHJ1ZQorICAgICAgICByZXR1cm4gdGltZXIKKworICAgIGRlZiBjYWxsX3Nvb24oc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQXJyYW5nZSBmb3IgYSBjYWxsYmFjayB0byBiZSBjYWxsZWQgYXMgc29vbiBhcyBwb3NzaWJsZS4KKworICAgICAgICBUaGlzIG9wZXJhdGVzIGFzIGEgRklGTyBxdWV1ZTogY2FsbGJhY2tzIGFyZSBjYWxsZWQgaW4gdGhlCisgICAgICAgIG9yZGVyIGluIHdoaWNoIHRoZXkgYXJlIHJlZ2lzdGVyZWQuICBFYWNoIGNhbGxiYWNrIHdpbGwgYmUKKyAgICAgICAgY2FsbGVkIGV4YWN0bHkgb25jZS4KKworICAgICAgICBBbnkgcG9zaXRpb25hbCBhcmd1bWVudHMgYWZ0ZXIgdGhlIGNhbGxiYWNrIHdpbGwgYmUgcGFzc2VkIHRvCisgICAgICAgIHRoZSBjYWxsYmFjayB3aGVuIGl0IGlzIGNhbGxlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGhyZWFkKCkKKyAgICAgICAgaGFuZGxlID0gc2VsZi5fY2FsbF9zb29uKGNhbGxiYWNrLCBhcmdzKQorICAgICAgICBpZiBoYW5kbGUuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICByZXR1cm4gaGFuZGxlCisKKyAgICBkZWYgX2NhbGxfc29vbihzZWxmLCBjYWxsYmFjaywgYXJncyk6CisgICAgICAgIGlmIChjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNhbGxiYWNrKQorICAgICAgICBvciBjb3JvdXRpbmVzLmlzY29yb3V0aW5lZnVuY3Rpb24oY2FsbGJhY2spKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIGNhbGxfc29vbigpIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncywgc2VsZikKKyAgICAgICAgaWYgaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIGhhbmRsZS5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgc2VsZi5fcmVhZHkuYXBwZW5kKGhhbmRsZSkKKyAgICAgICAgcmV0dXJuIGhhbmRsZQorCisgICAgZGVmIF9jaGVja190aHJlYWQoc2VsZik6CisgICAgICAgICIiIkNoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHRoZSB0aHJlYWQgcnVubmluZyB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBOb24tdGhyZWFkLXNhZmUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzIG1ha2UgdGhpcyBhc3N1bXB0aW9uIGFuZCB3aWxsCisgICAgICAgIGxpa2VseSBiZWhhdmUgaW5jb3JyZWN0bHkgd2hlbiB0aGUgYXNzdW1wdGlvbiBpcyB2aW9sYXRlZC4KKworICAgICAgICBTaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiAoc2VsZi5fZGVidWcgPT0gVHJ1ZSkuICBUaGUgY2FsbGVyIGlzCisgICAgICAgIHJlc3BvbnNpYmxlIGZvciBjaGVja2luZyB0aGlzIGNvbmRpdGlvbiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3RocmVhZF9pZCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRocmVhZF9pZCA9IHRocmVhZGluZy5nZXRfaWRlbnQoKQorICAgICAgICBpZiB0aHJlYWRfaWQgIT0gc2VsZi5fdGhyZWFkX2lkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICJOb24tdGhyZWFkLXNhZmUgb3BlcmF0aW9uIGludm9rZWQgb24gYW4gZXZlbnQgbG9vcCBvdGhlciAiCisgICAgICAgICAgICAgICAgInRoYW4gdGhlIGN1cnJlbnQgb25lIikKKworICAgIGRlZiBjYWxsX3Nvb25fdGhyZWFkc2FmZShzZWxmLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJMaWtlIGNhbGxfc29vbigpLCBidXQgdGhyZWFkLXNhZmUuIiIiCisgICAgICAgIGhhbmRsZSA9IHNlbGYuX2NhbGxfc29vbihjYWxsYmFjaywgYXJncykKKyAgICAgICAgaWYgaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIGhhbmRsZS5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgc2VsZi5fd3JpdGVfdG9fc2VsZigpCisgICAgICAgIHJldHVybiBoYW5kbGUKKworICAgIGRlZiBydW5faW5fZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IsIGZ1bmMsICphcmdzKToKKyAgICAgICAgaWYgKGNvcm91dGluZXMuaXNjb3JvdXRpbmUoZnVuYykKKyAgICAgICAgb3IgY29yb3V0aW5lcy5pc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIHJ1bl9pbl9leGVjdXRvcigpIikKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmdW5jLCBldmVudHMuSGFuZGxlKToKKyAgICAgICAgICAgIGFzc2VydCBub3QgYXJncworICAgICAgICAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKGZ1bmMsIGV2ZW50cy5UaW1lckhhbmRsZSkKKyAgICAgICAgICAgIGlmIGZ1bmMuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICBmID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBmdW5jLCBhcmdzID0gZnVuYy5fY2FsbGJhY2ssIGZ1bmMuX2FyZ3MKKyAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgIGV4ZWN1dG9yID0gc2VsZi5fZGVmYXVsdF9leGVjdXRvcgorICAgICAgICAgICAgaWYgZXhlY3V0b3IgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBleGVjdXRvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5UaHJlYWRQb29sRXhlY3V0b3IoX01BWF9XT1JLRVJTKQorICAgICAgICAgICAgICAgIHNlbGYuX2RlZmF1bHRfZXhlY3V0b3IgPSBleGVjdXRvcgorICAgICAgICByZXR1cm4gZnV0dXJlcy53cmFwX2Z1dHVyZShleGVjdXRvci5zdWJtaXQoZnVuYywgKmFyZ3MpLCBsb29wPXNlbGYpCisKKyAgICBkZWYgc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICBzZWxmLl9kZWZhdWx0X2V4ZWN1dG9yID0gZXhlY3V0b3IKKworICAgIGRlZiBfZ2V0YWRkcmluZm9fZGVidWcoc2VsZiwgaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpOgorICAgICAgICBtc2cgPSBbIiVzOiVyIiAlIChob3N0LCBwb3J0KV0KKyAgICAgICAgaWYgZmFtaWx5OgorICAgICAgICAgICAgbXNnLmFwcGVuZCgnZmFtaWx5PSVyJyAlIGZhbWlseSkKKyAgICAgICAgaWYgdHlwZToKKyAgICAgICAgICAgIG1zZy5hcHBlbmQoJ3R5cGU9JXInICUgdHlwZSkKKyAgICAgICAgaWYgcHJvdG86CisgICAgICAgICAgICBtc2cuYXBwZW5kKCdwcm90bz0lcicgJSBwcm90bykKKyAgICAgICAgaWYgZmxhZ3M6CisgICAgICAgICAgICBtc2cuYXBwZW5kKCdmbGFncz0lcicgJSBmbGFncykKKyAgICAgICAgbXNnID0gJywgJy5qb2luKG1zZykKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdHZXQgYWRkcmVzcyBpbmZvICVzJywgbXNnKQorCisgICAgICAgIHQwID0gc2VsZi50aW1lKCkKKyAgICAgICAgYWRkcmluZm8gPSBzb2NrZXQuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpCisgICAgICAgIGR0ID0gc2VsZi50aW1lKCkgLSB0MAorCisgICAgICAgIG1zZyA9ICgnR2V0dGluZyBhZGRyZXNzIGluZm8gJXMgdG9vayAlLjNmIG1zOiAlcicKKyAgICAgICAgICAgICAgICUgKG1zZywgZHQgKiAxZTMsIGFkZHJpbmZvKSkKKyAgICAgICAgaWYgZHQgPj0gc2VsZi5zbG93X2NhbGxiYWNrX2R1cmF0aW9uOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8obXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKG1zZykKKyAgICAgICAgcmV0dXJuIGFkZHJpbmZvCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIGluZm8gPSBfaXBhZGRyX2luZm8oaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bykKKyAgICAgICAgaWYgaW5mbyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFtpbmZvXSkKKyAgICAgICAgICAgIHJldHVybiBmdXQKKyAgICAgICAgZWxpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzZWxmLl9nZXRhZGRyaW5mb19kZWJ1ZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFncykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzb2NrZXQuZ2V0YWRkcmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3MpCisKKyAgICBkZWYgZ2V0bmFtZWluZm8oc2VsZiwgc29ja2FkZHIsIGZsYWdzPTApOgorICAgICAgICByZXR1cm4gc2VsZi5ydW5faW5fZXhlY3V0b3IoTm9uZSwgc29ja2V0LmdldG5hbWVpbmZvLCBzb2NrYWRkciwgZmxhZ3MpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9Tm9uZSwgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTAsIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgICIiIkNvbm5lY3QgdG8gYSBUQ1Agc2VydmVyLgorCisgICAgICAgIENyZWF0ZSBhIHN0cmVhbWluZyB0cmFuc3BvcnQgY29ubmVjdGlvbiB0byBhIGdpdmVuIEludGVybmV0IGhvc3QgYW5kCisgICAgICAgIHBvcnQ6IHNvY2tldCBmYW1pbHkgQUZfSU5FVCBvciBzb2NrZXQuQUZfSU5FVDYgZGVwZW5kaW5nIG9uIGhvc3QgKG9yCisgICAgICAgIGZhbWlseSBpZiBzcGVjaWZpZWQpLCBzb2NrZXQgdHlwZSBTT0NLX1NUUkVBTS4gcHJvdG9jb2xfZmFjdG9yeSBtdXN0IGJlCisgICAgICAgIGEgY2FsbGFibGUgcmV0dXJuaW5nIGEgcHJvdG9jb2wgaW5zdGFuY2UuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUgd2hpY2ggd2lsbCB0cnkgdG8gZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uCisgICAgICAgIGluIHRoZSBiYWNrZ3JvdW5kLiAgV2hlbiBzdWNjZXNzZnVsLCB0aGUgY29yb3V0aW5lIHJldHVybnMgYQorICAgICAgICAodHJhbnNwb3J0LCBwcm90b2NvbCkgcGFpci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBub3QgTm9uZSBhbmQgbm90IHNzbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NlcnZlcl9ob3N0bmFtZSBpcyBvbmx5IG1lYW5pbmdmdWwgd2l0aCBzc2wnKQorCisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBpcyBOb25lIGFuZCBzc2w6CisgICAgICAgICAgICAjIFVzZSBob3N0IGFzIGRlZmF1bHQgZm9yIHNlcnZlcl9ob3N0bmFtZS4gIEl0IGlzIGFuIGVycm9yCisgICAgICAgICAgICAjIGlmIGhvc3QgaXMgZW1wdHkgb3Igbm90IHNldCwgZS5nLiB3aGVuIGFuCisgICAgICAgICAgICAjIGFscmVhZHktY29ubmVjdGVkIHNvY2tldCB3YXMgcGFzc2VkIG9yIHdoZW4gb25seSBhIHBvcnQKKyAgICAgICAgICAgICMgaXMgZ2l2ZW4uICBUbyBhdm9pZCB0aGlzIGVycm9yLCB5b3UgY2FuIHBhc3MKKyAgICAgICAgICAgICMgc2VydmVyX2hvc3RuYW1lPScnIC0tIHRoaXMgd2lsbCBieXBhc3MgdGhlIGhvc3RuYW1lCisgICAgICAgICAgICAjIGNoZWNrLiAgKFRoaXMgYWxzbyBtZWFucyB0aGF0IGlmIGhvc3QgaXMgYSBudW1lcmljCisgICAgICAgICAgICAjIElQL0lQdjYgYWRkcmVzcywgd2Ugd2lsbCBhdHRlbXB0IHRvIHZlcmlmeSB0aGF0IGV4YWN0CisgICAgICAgICAgICAjIGFkZHJlc3M7IHRoaXMgd2lsbCBwcm9iYWJseSBmYWlsLCBidXQgaXQgaXMgcG9zc2libGUgdG8KKyAgICAgICAgICAgICMgY3JlYXRlIGEgY2VydGlmaWNhdGUgZm9yIGEgc3BlY2lmaWMgSVAgYWRkcmVzcywgc28gd2UKKyAgICAgICAgICAgICMgZG9uJ3QganVkZ2UgaXQgaGVyZS4pCisgICAgICAgICAgICBpZiBub3QgaG9zdDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdZb3UgbXVzdCBzZXQgc2VydmVyX2hvc3RuYW1lICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGVuIHVzaW5nIHNzbCB3aXRob3V0IGEgaG9zdCcpCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWUgPSBob3N0CisKKyAgICAgICAgaWYgaG9zdCBpcyBub3QgTm9uZSBvciBwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnaG9zdC9wb3J0IGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQorCisgICAgICAgICAgICBmMSA9IHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgaG9zdCwgcG9ydCwgZmFtaWx5PWZhbWlseSwKKyAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgZnMgPSBbZjFdCisgICAgICAgICAgICBpZiBsb2NhbF9hZGRyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGYyID0gc2VsZi5nZXRhZGRyaW5mbygKKyAgICAgICAgICAgICAgICAgICAgKmxvY2FsX2FkZHIsIGZhbWlseT1mYW1pbHksCisgICAgICAgICAgICAgICAgICAgIHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNLCBwcm90bz1wcm90bywgZmxhZ3M9ZmxhZ3MpCisgICAgICAgICAgICAgICAgZnMuYXBwZW5kKGYyKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmMiA9IE5vbmUKKworICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrcy53YWl0KGZzLCBsb29wPXNlbGYpCisKKyAgICAgICAgICAgIGluZm9zID0gZjEucmVzdWx0KCkKKyAgICAgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnZXRhZGRyaW5mbygpIHJldHVybmVkIGVtcHR5IGxpc3QnKQorICAgICAgICAgICAgaWYgZjIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGFkZHJfaW5mb3MgPSBmMi5yZXN1bHQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZ2V0YWRkcmluZm8oKSByZXR1cm5lZCBlbXB0eSBsaXN0JykKKworICAgICAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisgICAgICAgICAgICBmb3IgZmFtaWx5LCB0eXBlLCBwcm90bywgY25hbWUsIGFkZHJlc3MgaW4gaW5mb3M6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBpZiBmMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBfLCBfLCBfLCBfLCBsYWRkciBpbiBsYWRkcl9pbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChsYWRkcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4YyA9IE9TRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGMuZXJybm8sICdlcnJvciB3aGlsZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0ZW1wdGluZyB0byBiaW5kIG9uIGFkZHJlc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn06IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFkZHIsIGV4Yy5zdHJlcnJvci5sb3dlcigpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9ucy5hcHBlbmQoZXhjKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJjb25uZWN0ICVyIHRvICVyIiwgc29jaywgYWRkcmVzcykKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgbGVuKGV4Y2VwdGlvbnMpID09IDE6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbnNbMF0KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIElmIHRoZXkgYWxsIGhhdmUgdGhlIHNhbWUgc3RyKCksIHJhaXNlIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgbW9kZWwgPSBzdHIoZXhjZXB0aW9uc1swXSkKKyAgICAgICAgICAgICAgICAgICAgaWYgYWxsKHN0cihleGMpID09IG1vZGVsIGZvciBleGMgaW4gZXhjZXB0aW9ucyk6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBleGNlcHRpb25zWzBdCisgICAgICAgICAgICAgICAgICAgICMgUmFpc2UgYSBjb21iaW5lZCBleGNlcHRpb24gc28gdGhlIHVzZXIgY2FuIHNlZSBhbGwKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgdmFyaW91cyBlcnJvciBtZXNzYWdlcy4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTXVsdGlwbGUgZXhjZXB0aW9uczoge30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcsICcuam9pbihzdHIoZXhjKSBmb3IgZXhjIGluIGV4Y2VwdGlvbnMpKSkKKworICAgICAgICBlbGlmIHNvY2sgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ2hvc3QgYW5kIHBvcnQgd2FzIG5vdCBzcGVjaWZpZWQgYW5kIG5vIHNvY2sgc3BlY2lmaWVkJykKKworICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorCisgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uX3RyYW5zcG9ydCgKKyAgICAgICAgICAgIHNvY2ssIHByb3RvY29sX2ZhY3RvcnksIHNzbCwgc2VydmVyX2hvc3RuYW1lKQorICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICMgR2V0IHRoZSBzb2NrZXQgZnJvbSB0aGUgdHJhbnNwb3J0IGJlY2F1c2UgU1NMIHRyYW5zcG9ydCBjbG9zZXMKKyAgICAgICAgICAgICMgdGhlIG9sZCBzb2NrZXQgYW5kIGNyZWF0ZXMgYSBuZXcgU1NMIHNvY2tldAorICAgICAgICAgICAgc29jayA9IHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc29ja2V0JykKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgY29ubmVjdGVkIHRvICVzOiVyOiAoJXIsICVyKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgc29jaywgaG9zdCwgcG9ydCwgdHJhbnNwb3J0LCBwcm90b2NvbCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX2NyZWF0ZV9jb25uZWN0aW9uX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbF9mYWN0b3J5LCBzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBpZiBzc2w6CisgICAgICAgICAgICBzc2xjb250ZXh0ID0gTm9uZSBpZiBpc2luc3RhbmNlKHNzbCwgYm9vbCkgZWxzZSBzc2wKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfc3NsX3RyYW5zcG9ydCgKKyAgICAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPUZhbHNlLCBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNvY2ssIHByb3RvY29sLCB3YWl0ZXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYsIHByb3RvY29sX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyPU5vbmUsIHJlbW90ZV9hZGRyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9MCwgcHJvdG89MCwgZmxhZ3M9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldXNlX2FkZHJlc3M9Tm9uZSwgcmV1c2VfcG9ydD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfYnJvYWRjYXN0PU5vbmUsIHNvY2s9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBkYXRhZ3JhbSBjb25uZWN0aW9uLiIiIgorICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgKGxvY2FsX2FkZHIgb3IgcmVtb3RlX2FkZHIgb3IKKyAgICAgICAgICAgICAgICAgICAgZmFtaWx5IG9yIHByb3RvIG9yIGZsYWdzIG9yCisgICAgICAgICAgICAgICAgICAgIHJldXNlX2FkZHJlc3Mgb3IgcmV1c2VfcG9ydCBvciBhbGxvd19icm9hZGNhc3QpOgorICAgICAgICAgICAgICAgICMgc2hvdyB0aGUgcHJvYmxlbWF0aWMga3dhcmdzIGluIGV4Y2VwdGlvbiBtc2cKKyAgICAgICAgICAgICAgICBvcHRzID0gZGljdChsb2NhbF9hZGRyPWxvY2FsX2FkZHIsIHJlbW90ZV9hZGRyPXJlbW90ZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseT1mYW1pbHksIHByb3RvPXByb3RvLCBmbGFncz1mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzPXJldXNlX2FkZHJlc3MsIHJldXNlX3BvcnQ9cmV1c2VfcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19icm9hZGNhc3Q9YWxsb3dfYnJvYWRjYXN0KQorICAgICAgICAgICAgICAgIHByb2JsZW1zID0gJywgJy5qb2luKAorICAgICAgICAgICAgICAgICAgICAne309e30nLmZvcm1hdChrLCB2KSBmb3IgaywgdiBpbiBvcHRzLml0ZW1zKCkgaWYgdikKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAnc29ja2V0IG1vZGlmaWVyIGtleXdvcmQgYXJndW1lbnRzIGNhbiBub3QgYmUgdXNlZCAnCisgICAgICAgICAgICAgICAgICAgICd3aGVuIHNvY2sgaXMgc3BlY2lmaWVkLiAoe30pJy5mb3JtYXQocHJvYmxlbXMpKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgIHJfYWRkciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG5vdCAobG9jYWxfYWRkciBvciByZW1vdGVfYWRkcik6CisgICAgICAgICAgICAgICAgaWYgZmFtaWx5ID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VuZXhwZWN0ZWQgYWRkcmVzcyBmYW1pbHknKQorICAgICAgICAgICAgICAgIGFkZHJfcGFpcnNfaW5mbyA9ICgoKGZhbWlseSwgcHJvdG8pLCAoTm9uZSwgTm9uZSkpLCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBqb2luIGFkZHJlc3MgYnkgKGZhbWlseSwgcHJvdG9jb2wpCisgICAgICAgICAgICAgICAgYWRkcl9pbmZvcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgICAgICAgICBmb3IgaWR4LCBhZGRyIGluICgoMCwgbG9jYWxfYWRkciksICgxLCByZW1vdGVfYWRkcikpOgorICAgICAgICAgICAgICAgICAgICBpZiBhZGRyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYWRkciwgdHVwbGUpIGFuZCBsZW4oYWRkcikgPT0gMiwgKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcyLXR1cGxlIGlzIGV4cGVjdGVkJykKKworICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3MgPSB5aWVsZCBmcm9tIHNlbGYuZ2V0YWRkcmluZm8oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFkZHIsIGZhbWlseT1mYW1pbHksIHR5cGU9c29ja2V0LlNPQ0tfREdSQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89cHJvdG8sIGZsYWdzPWZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGluZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKCkgcmV0dXJuZWQgZW1wdHkgbGlzdCcpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmYW0sIF8sIHBybywgXywgYWRkcmVzcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSAoZmFtLCBwcm8pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5IG5vdCBpbiBhZGRyX2luZm9zOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2luZm9zW2tleV0gPSBbTm9uZSwgTm9uZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2luZm9zW2tleV1baWR4XSA9IGFkZHJlc3MKKworICAgICAgICAgICAgICAgICMgZWFjaCBhZGRyIGhhcyB0byBoYXZlIGluZm8gZm9yIGVhY2ggKGZhbWlseSwgcHJvdG8pIHBhaXIKKyAgICAgICAgICAgICAgICBhZGRyX3BhaXJzX2luZm8gPSBbCisgICAgICAgICAgICAgICAgICAgIChrZXksIGFkZHJfcGFpcikgZm9yIGtleSwgYWRkcl9wYWlyIGluIGFkZHJfaW5mb3MuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgKChsb2NhbF9hZGRyIGFuZCBhZGRyX3BhaXJbMF0gaXMgTm9uZSkgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVtb3RlX2FkZHIgYW5kIGFkZHJfcGFpclsxXSBpcyBOb25lKSldCisKKyAgICAgICAgICAgICAgICBpZiBub3QgYWRkcl9wYWlyc19pbmZvOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW4gbm90IGdldCBhZGRyZXNzIGluZm9ybWF0aW9uJykKKworICAgICAgICAgICAgZXhjZXB0aW9ucyA9IFtdCisKKyAgICAgICAgICAgIGlmIHJldXNlX2FkZHJlc3MgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzID0gb3MubmFtZSA9PSAncG9zaXgnIGFuZCBzeXMucGxhdGZvcm0gIT0gJ2N5Z3dpbicKKworICAgICAgICAgICAgZm9yICgoZmFtaWx5LCBwcm90byksCisgICAgICAgICAgICAgICAgIChsb2NhbF9hZGRyZXNzLCByZW1vdGVfYWRkcmVzcykpIGluIGFkZHJfcGFpcnNfaW5mbzoKKyAgICAgICAgICAgICAgICBzb2NrID0gTm9uZQorICAgICAgICAgICAgICAgIHJfYWRkciA9IE5vbmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PWZhbWlseSwgdHlwZT1zb2NrZXQuU09DS19ER1JBTSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgICAgIGlmIHJldXNlX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgICAgICAgICAgICAgIGlmIHJldXNlX3BvcnQ6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzb2NrZXQsICdTT19SRVVTRVBPUlQnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmV1c2VfcG9ydCBub3Qgc3VwcG9ydGVkIGJ5IHNvY2tldCBtb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VQT1JULCAxKQorICAgICAgICAgICAgICAgICAgICBpZiBhbGxvd19icm9hZGNhc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19CUk9BRENBU1QsIDEpCisgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbG9jYWxfYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suYmluZChsb2NhbF9hZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICBpZiByZW1vdGVfYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5zb2NrX2Nvbm5lY3Qoc29jaywgcmVtb3RlX2FkZHJlc3MpCisgICAgICAgICAgICAgICAgICAgICAgICByX2FkZHIgPSByZW1vdGVfYWRkcmVzcworICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25zLmFwcGVuZChleGMpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgZXhjZXB0aW9uc1swXQorCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9kYXRhZ3JhbV90cmFuc3BvcnQoCisgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgcl9hZGRyLCB3YWl0ZXIpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgaWYgbG9jYWxfYWRkcjoKKyAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiRGF0YWdyYW0gZW5kcG9pbnQgbG9jYWxfYWRkcj0lciByZW1vdGVfYWRkcj0lciAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNyZWF0ZWQ6ICglciwgJXIpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbF9hZGRyLCByZW1vdGVfYWRkciwgdHJhbnNwb3J0LCBwcm90b2NvbCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCJEYXRhZ3JhbSBlbmRwb2ludCByZW1vdGVfYWRkcj0lciBjcmVhdGVkOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoJXIsICVyKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9hZGRyLCB0cmFuc3BvcnQsIHByb3RvY29sKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIF9jcmVhdGVfc2VydmVyX2dldGFkZHJpbmZvKHNlbGYsIGhvc3QsIHBvcnQsIGZhbWlseSwgZmxhZ3MpOgorICAgICAgICBpbmZvcyA9IHlpZWxkIGZyb20gc2VsZi5nZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9ZmxhZ3MpCisgICAgICAgIGlmIG5vdCBpbmZvczoKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2dldGFkZHJpbmZvKHshcn0pIHJldHVybmVkIGVtcHR5IGxpc3QnLmZvcm1hdChob3N0KSkKKyAgICAgICAgcmV0dXJuIGluZm9zCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV9zZXJ2ZXIoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgaG9zdD1Ob25lLCBwb3J0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgKiwKKyAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQywKKyAgICAgICAgICAgICAgICAgICAgICBmbGFncz1zb2NrZXQuQUlfUEFTU0lWRSwKKyAgICAgICAgICAgICAgICAgICAgICBzb2NrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgYmFja2xvZz0xMDAsCisgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgcmV1c2VfYWRkcmVzcz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIHJldXNlX3BvcnQ9Tm9uZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIFRDUCBzZXJ2ZXIuCisKKyAgICAgICAgVGhlIGhvc3QgcGFyYW1ldGVyIGNhbiBiZSBhIHN0cmluZywgaW4gdGhhdCBjYXNlIHRoZSBUQ1Agc2VydmVyIGlzIGJvdW5kCisgICAgICAgIHRvIGhvc3QgYW5kIHBvcnQuCisKKyAgICAgICAgVGhlIGhvc3QgcGFyYW1ldGVyIGNhbiBhbHNvIGJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBhbmQgaW4gdGhhdCBjYXNlCisgICAgICAgIHRoZSBUQ1Agc2VydmVyIGlzIGJvdW5kIHRvIGFsbCBob3N0cyBvZiB0aGUgc2VxdWVuY2UuCisKKyAgICAgICAgUmV0dXJuIGEgU2VydmVyIG9iamVjdCB3aGljaCBjYW4gYmUgdXNlZCB0byBzdG9wIHRoZSBzZXJ2aWNlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzc2wsIGJvb2wpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdzc2wgYXJndW1lbnQgbXVzdCBiZSBhbiBTU0xDb250ZXh0IG9yIE5vbmUnKQorICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lIG9yIHBvcnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdob3N0L3BvcnQgYW5kIHNvY2sgY2FuIG5vdCBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZScpCisKKyAgICAgICAgICAgIEFGX0lORVQ2ID0gZ2V0YXR0cihzb2NrZXQsICdBRl9JTkVUNicsIDApCisgICAgICAgICAgICBpZiByZXVzZV9hZGRyZXNzIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV1c2VfYWRkcmVzcyA9IG9zLm5hbWUgPT0gJ3Bvc2l4JyBhbmQgc3lzLnBsYXRmb3JtICE9ICdjeWd3aW4nCisgICAgICAgICAgICBzb2NrZXRzID0gW10KKyAgICAgICAgICAgIGlmIGhvc3QgPT0gJyc6CisgICAgICAgICAgICAgICAgaG9zdHMgPSBbTm9uZV0KKyAgICAgICAgICAgIGVsaWYgKGlzaW5zdGFuY2UoaG9zdCwgc3RyKSBvcgorICAgICAgICAgICAgICAgICAgbm90IGlzaW5zdGFuY2UoaG9zdCwgY29sbGVjdGlvbnMuSXRlcmFibGUpKToKKyAgICAgICAgICAgICAgICBob3N0cyA9IFtob3N0XQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBob3N0cyA9IGhvc3QKKworICAgICAgICAgICAgZnMgPSBbc2VsZi5fY3JlYXRlX3NlcnZlcl9nZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHk9ZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncz1mbGFncykKKyAgICAgICAgICAgICAgICAgIGZvciBob3N0IGluIGhvc3RzXQorICAgICAgICAgICAgaW5mb3MgPSB5aWVsZCBmcm9tIHRhc2tzLmdhdGhlcigqZnMsIGxvb3A9c2VsZikKKyAgICAgICAgICAgIGluZm9zID0gaXRlcnRvb2xzLmNoYWluLmZyb21faXRlcmFibGUoaW5mb3MpCisKKyAgICAgICAgICAgIGNvbXBsZXRlZCA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZm9yIHJlcyBpbiBpbmZvczoKKyAgICAgICAgICAgICAgICAgICAgYWYsIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzYSA9IHJlcworICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBc3N1bWUgaXQncyBhIGJhZCBmYW1pbHkvdHlwZS9wcm90b2NvbCBjb21iaW5hdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdjcmVhdGVfc2VydmVyKCkgZmFpbGVkIHRvIGNyZWF0ZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5zb2NrZXQoJXIsICVyLCAlciknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmLCBzb2NrdHlwZSwgcHJvdG8sIGV4Y19pbmZvPVRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBzb2NrZXRzLmFwcGVuZChzb2NrKQorICAgICAgICAgICAgICAgICAgICBpZiByZXVzZV9hZGRyZXNzOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCBUcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiByZXVzZV9wb3J0OgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc29ja2V0LCAnU09fUkVVU0VQT1JUJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldXNlX3BvcnQgbm90IHN1cHBvcnRlZCBieSBzb2NrZXQgbW9kdWxlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFUE9SVCwgVHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgIyBEaXNhYmxlIElQdjQvSVB2NiBkdWFsIHN0YWNrIHN1cHBvcnQgKGVuYWJsZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgIyBkZWZhdWx0IG9uIExpbnV4KSB3aGljaCBtYWtlcyBhIHNpbmdsZSBzb2NrZXQKKyAgICAgICAgICAgICAgICAgICAgIyBsaXN0ZW4gb24gYm90aCBhZGRyZXNzIGZhbWlsaWVzLgorICAgICAgICAgICAgICAgICAgICBpZiBhZiA9PSBBRl9JTkVUNiBhbmQgaGFzYXR0cihzb2NrZXQsICdJUFBST1RPX0lQVjYnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tldC5JUFY2X1Y2T05MWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLmJpbmQoc2EpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLmVycm5vLCAnZXJyb3Igd2hpbGUgYXR0ZW1wdGluZyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBiaW5kIG9uIGFkZHJlc3MgJXI6ICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzYSwgZXJyLnN0cmVycm9yLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgIGNvbXBsZXRlZCA9IFRydWUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgaWYgbm90IGNvbXBsZXRlZDoKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc29jayBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05laXRoZXIgaG9zdC9wb3J0IG5vciBzb2NrIHdlcmUgc3BlY2lmaWVkJykKKyAgICAgICAgICAgIHNvY2tldHMgPSBbc29ja10KKworICAgICAgICBzZXJ2ZXIgPSBTZXJ2ZXIoc2VsZiwgc29ja2V0cykKKyAgICAgICAgZm9yIHNvY2sgaW4gc29ja2V0czoKKyAgICAgICAgICAgIHNvY2subGlzdGVuKGJhY2tsb2cpCisgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2VydmluZyhwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2wsIHNlcnZlcikKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuaW5mbygiJXIgaXMgc2VydmluZyIsIHNlcnZlcikKKyAgICAgICAgcmV0dXJuIHNlcnZlcgorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjb25uZWN0X3JlYWRfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3JlYWRfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsIHdhaXRlcikKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnUmVhZCBwaXBlICVyIGNvbm5lY3RlZDogKCVyLCAlciknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUuZmlsZW5vKCksIHRyYW5zcG9ydCwgcHJvdG9jb2wpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGNvbm5lY3Rfd3JpdGVfcGlwZShzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwaXBlKToKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHBpcGUsIHByb3RvY29sLCB3YWl0ZXIpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSB3YWl0ZXIKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ1dyaXRlIHBpcGUgJXIgY29ubmVjdGVkOiAoJXIsICVyKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZS5maWxlbm8oKSwgdHJhbnNwb3J0LCBwcm90b2NvbCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIGRlZiBfbG9nX3N1YnByb2Nlc3Moc2VsZiwgbXNnLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpOgorICAgICAgICBpbmZvID0gW21zZ10KKyAgICAgICAgaWYgc3RkaW4gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3RkaW49JXMnICUgX2Zvcm1hdF9waXBlKHN0ZGluKSkKKyAgICAgICAgaWYgc3Rkb3V0IGlzIG5vdCBOb25lIGFuZCBzdGRlcnIgPT0gc3VicHJvY2Vzcy5TVERPVVQ6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3Rkb3V0PXN0ZGVycj0lcycgJSBfZm9ybWF0X3BpcGUoc3Rkb3V0KSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3Rkb3V0PSVzJyAlIF9mb3JtYXRfcGlwZShzdGRvdXQpKQorICAgICAgICAgICAgaWYgc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdzdGRlcnI9JXMnICUgX2Zvcm1hdF9waXBlKHN0ZGVycikpCisgICAgICAgIGxvZ2dlci5kZWJ1ZygnICcuam9pbihpbmZvKSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgc3VicHJvY2Vzc19zaGVsbChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBjbWQsICosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgc2hlbGw9VHJ1ZSwgYnVmc2l6ZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoY21kLCAoYnl0ZXMsIHN0cikpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY21kIG11c3QgYmUgYSBzdHJpbmciKQorICAgICAgICBpZiB1bml2ZXJzYWxfbmV3bGluZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bml2ZXJzYWxfbmV3bGluZXMgbXVzdCBiZSBGYWxzZSIpCisgICAgICAgIGlmIG5vdCBzaGVsbDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNoZWxsIG11c3QgYmUgVHJ1ZSIpCisgICAgICAgIGlmIGJ1ZnNpemUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJ1ZnNpemUgbXVzdCBiZSAwIikKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAjIGRvbid0IGxvZyBwYXJhbWV0ZXJzOiB0aGV5IG1heSBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgIyAocGFzc3dvcmQpIGFuZCBtYXkgYmUgdG9vIGxvbmcKKyAgICAgICAgICAgIGRlYnVnX2xvZyA9ICdydW4gc2hlbGwgY29tbWFuZCAlcicgJSBjbWQKKyAgICAgICAgICAgIHNlbGYuX2xvZ19zdWJwcm9jZXNzKGRlYnVnX2xvZywgc3RkaW4sIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICB0cmFuc3BvcnQgPSB5aWVsZCBmcm9tIHNlbGYuX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoCisgICAgICAgICAgICBwcm90b2NvbCwgY21kLCBUcnVlLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICBpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCclczogJXInICUgKGRlYnVnX2xvZywgdHJhbnNwb3J0KSkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydCwgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgc3VicHJvY2Vzc19leGVjKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHByb2dyYW0sICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgdW5pdmVyc2FsX25ld2xpbmVzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGw9RmFsc2UsIGJ1ZnNpemU9MCwgKiprd2FyZ3MpOgorICAgICAgICBpZiB1bml2ZXJzYWxfbmV3bGluZXM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bml2ZXJzYWxfbmV3bGluZXMgbXVzdCBiZSBGYWxzZSIpCisgICAgICAgIGlmIHNoZWxsOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2hlbGwgbXVzdCBiZSBGYWxzZSIpCisgICAgICAgIGlmIGJ1ZnNpemUgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImJ1ZnNpemUgbXVzdCBiZSAwIikKKyAgICAgICAgcG9wZW5fYXJncyA9IChwcm9ncmFtLCkgKyBhcmdzCisgICAgICAgIGZvciBhcmcgaW4gcG9wZW5fYXJnczoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZywgKHN0ciwgYnl0ZXMpKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInByb2dyYW0gYXJndW1lbnRzIG11c3QgYmUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBieXRlcyBvciB0ZXh0IHN0cmluZywgbm90ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHR5cGUoYXJnKS5fX25hbWVfXykKKyAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAjIGRvbid0IGxvZyBwYXJhbWV0ZXJzOiB0aGV5IG1heSBjb250YWluIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgIyAocGFzc3dvcmQpIGFuZCBtYXkgYmUgdG9vIGxvbmcKKyAgICAgICAgICAgIGRlYnVnX2xvZyA9ICdleGVjdXRlIHByb2dyYW0gJXInICUgcHJvZ3JhbQorICAgICAgICAgICAgc2VsZi5fbG9nX3N1YnByb2Nlc3MoZGVidWdfbG9nLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIpCisgICAgICAgIHRyYW5zcG9ydCA9IHlpZWxkIGZyb20gc2VsZi5fbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydCgKKyAgICAgICAgICAgIHByb3RvY29sLCBwb3Blbl9hcmdzLCBGYWxzZSwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLAorICAgICAgICAgICAgYnVmc2l6ZSwgKiprd2FyZ3MpCisgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJyVzOiAlcicgJSAoZGVidWdfbG9nLCB0cmFuc3BvcnQpKQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0LCBwcm90b2NvbAorCisgICAgZGVmIHNldF9leGNlcHRpb25faGFuZGxlcihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgIiIiU2V0IGhhbmRsZXIgYXMgdGhlIG5ldyBldmVudCBsb29wIGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICAgICAgIElmIGhhbmRsZXIgaXMgTm9uZSwgdGhlIGRlZmF1bHQgZXhjZXB0aW9uIGhhbmRsZXIgd2lsbAorICAgICAgICBiZSBzZXQuCisKKyAgICAgICAgSWYgaGFuZGxlciBpcyBhIGNhbGxhYmxlIG9iamVjdCwgaXQgc2hvdWxkIGhhdmUgYQorICAgICAgICBzaWduYXR1cmUgbWF0Y2hpbmcgJyhsb29wLCBjb250ZXh0KScsIHdoZXJlICdsb29wJworICAgICAgICB3aWxsIGJlIGEgcmVmZXJlbmNlIHRvIHRoZSBhY3RpdmUgZXZlbnQgbG9vcCwgJ2NvbnRleHQnCisgICAgICAgIHdpbGwgYmUgYSBkaWN0IG9iamVjdCAoc2VlIGBjYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKClgCisgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGRldGFpbHMgYWJvdXQgY29udGV4dCkuCisgICAgICAgICIiIgorICAgICAgICBpZiBoYW5kbGVyIGlzIG5vdCBOb25lIGFuZCBub3QgY2FsbGFibGUoaGFuZGxlcik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ0EgY2FsbGFibGUgb2JqZWN0IG9yIE5vbmUgaXMgZXhwZWN0ZWQsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ290IHshcn0nLmZvcm1hdChoYW5kbGVyKSkKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2hhbmRsZXIgPSBoYW5kbGVyCisKKyAgICBkZWYgZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcihzZWxmLCBjb250ZXh0KToKKyAgICAgICAgIiIiRGVmYXVsdCBleGNlcHRpb24gaGFuZGxlci4KKworICAgICAgICBUaGlzIGlzIGNhbGxlZCB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgYW5kIG5vIGV4Y2VwdGlvbgorICAgICAgICBoYW5kbGVyIGlzIHNldCwgYW5kIGNhbiBiZSBjYWxsZWQgYnkgYSBjdXN0b20gZXhjZXB0aW9uCisgICAgICAgIGhhbmRsZXIgdGhhdCB3YW50cyB0byBkZWZlciB0byB0aGUgZGVmYXVsdCBiZWhhdmlvci4KKworICAgICAgICBUaGUgY29udGV4dCBwYXJhbWV0ZXIgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgaW4KKyAgICAgICAgYGNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoKWAuCisgICAgICAgICIiIgorICAgICAgICBtZXNzYWdlID0gY29udGV4dC5nZXQoJ21lc3NhZ2UnKQorICAgICAgICBpZiBub3QgbWVzc2FnZToKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAnVW5oYW5kbGVkIGV4Y2VwdGlvbiBpbiBldmVudCBsb29wJworCisgICAgICAgIGV4Y2VwdGlvbiA9IGNvbnRleHQuZ2V0KCdleGNlcHRpb24nKQorICAgICAgICBpZiBleGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBleGNfaW5mbyA9ICh0eXBlKGV4Y2VwdGlvbiksIGV4Y2VwdGlvbiwgZXhjZXB0aW9uLl9fdHJhY2ViYWNrX18pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGNfaW5mbyA9IEZhbHNlCisKKyAgICAgICAgaWYgKCdzb3VyY2VfdHJhY2ViYWNrJyBub3QgaW4gY29udGV4dAorICAgICAgICBhbmQgc2VsZi5fY3VycmVudF9oYW5kbGUgaXMgbm90IE5vbmUKKyAgICAgICAgYW5kIHNlbGYuX2N1cnJlbnRfaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrKToKKyAgICAgICAgICAgIGNvbnRleHRbJ2hhbmRsZV90cmFjZWJhY2snXSA9IHNlbGYuX2N1cnJlbnRfaGFuZGxlLl9zb3VyY2VfdHJhY2ViYWNrCisKKyAgICAgICAgbG9nX2xpbmVzID0gW21lc3NhZ2VdCisgICAgICAgIGZvciBrZXkgaW4gc29ydGVkKGNvbnRleHQpOgorICAgICAgICAgICAgaWYga2V5IGluIHsnbWVzc2FnZScsICdleGNlcHRpb24nfToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUgPSBjb250ZXh0W2tleV0KKyAgICAgICAgICAgIGlmIGtleSA9PSAnc291cmNlX3RyYWNlYmFjayc6CisgICAgICAgICAgICAgICAgdGIgPSAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfbGlzdCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgdmFsdWUgPSAnT2JqZWN0IGNyZWF0ZWQgYXQgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nCisgICAgICAgICAgICAgICAgdmFsdWUgKz0gdGIucnN0cmlwKCkKKyAgICAgICAgICAgIGVsaWYga2V5ID09ICdoYW5kbGVfdHJhY2ViYWNrJzoKKyAgICAgICAgICAgICAgICB0YiA9ICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9saXN0KHZhbHVlKSkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICdIYW5kbGUgY3JlYXRlZCBhdCAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicKKyAgICAgICAgICAgICAgICB2YWx1ZSArPSB0Yi5yc3RyaXAoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlcHIodmFsdWUpCisgICAgICAgICAgICBsb2dfbGluZXMuYXBwZW5kKCd7fToge30nLmZvcm1hdChrZXksIHZhbHVlKSkKKworICAgICAgICBsb2dnZXIuZXJyb3IoJ1xuJy5qb2luKGxvZ19saW5lcyksIGV4Y19pbmZvPWV4Y19pbmZvKQorCisgICAgZGVmIGNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCk6CisgICAgICAgICIiIkNhbGwgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCdzIGV4Y2VwdGlvbiBoYW5kbGVyLgorCisgICAgICAgIFRoZSBjb250ZXh0IGFyZ3VtZW50IGlzIGEgZGljdCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcga2V5czoKKworICAgICAgICAtICdtZXNzYWdlJzogRXJyb3IgbWVzc2FnZTsKKyAgICAgICAgLSAnZXhjZXB0aW9uJyAob3B0aW9uYWwpOiBFeGNlcHRpb24gb2JqZWN0OworICAgICAgICAtICdmdXR1cmUnIChvcHRpb25hbCk6IEZ1dHVyZSBpbnN0YW5jZTsKKyAgICAgICAgLSAnaGFuZGxlJyAob3B0aW9uYWwpOiBIYW5kbGUgaW5zdGFuY2U7CisgICAgICAgIC0gJ3Byb3RvY29sJyAob3B0aW9uYWwpOiBQcm90b2NvbCBpbnN0YW5jZTsKKyAgICAgICAgLSAndHJhbnNwb3J0JyAob3B0aW9uYWwpOiBUcmFuc3BvcnQgaW5zdGFuY2U7CisgICAgICAgIC0gJ3NvY2tldCcgKG9wdGlvbmFsKTogU29ja2V0IGluc3RhbmNlLgorCisgICAgICAgIE5ldyBrZXlzIG1heWJlIGludHJvZHVjZWQgaW4gdGhlIGZ1dHVyZS4KKworICAgICAgICBOb3RlOiBkbyBub3Qgb3ZlcmxvYWQgdGhpcyBtZXRob2QgaW4gYW4gZXZlbnQgbG9vcCBzdWJjbGFzcy4KKyAgICAgICAgRm9yIGN1c3RvbSBleGNlcHRpb24gaGFuZGxpbmcsIHVzZSB0aGUKKyAgICAgICAgYHNldF9leGNlcHRpb25faGFuZGxlcigpYCBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb25faGFuZGxlciBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAjIFNlY29uZCBwcm90ZWN0aW9uIGxheWVyIGZvciB1bmV4cGVjdGVkIGVycm9ycworICAgICAgICAgICAgICAgICMgaW4gdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFzIHdlbGwgYXMgZm9yIHN1YmNsYXNzZWQKKyAgICAgICAgICAgICAgICAjIGV2ZW50IGxvb3BzIHdpdGggb3ZlcmxvYWRlZCAiZGVmYXVsdF9leGNlcHRpb25faGFuZGxlciIuCisgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdFeGNlcHRpb24gaW4gZGVmYXVsdCBleGNlcHRpb24gaGFuZGxlcicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgICMgRXhjZXB0aW9uIGluIHRoZSB1c2VyIHNldCBjdXN0b20gZXhjZXB0aW9uIGhhbmRsZXIuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAjIExldCdzIHRyeSBkZWZhdWx0IGhhbmRsZXIuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVmYXVsdF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdVbmhhbmRsZWQgZXJyb3IgaW4gZXhjZXB0aW9uIGhhbmRsZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZXh0JzogY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAjIEd1YXJkICdkZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyJyBpbiBjYXNlIGl0IGlzCisgICAgICAgICAgICAgICAgICAgICMgb3ZlcmxvYWRlZC4KKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCdFeGNlcHRpb24gaW4gZGVmYXVsdCBleGNlcHRpb24gaGFuZGxlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hpbGUgaGFuZGxpbmcgYW4gdW5leHBlY3RlZCBlcnJvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW4gY3VzdG9tIGV4Y2VwdGlvbiBoYW5kbGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y19pbmZvPVRydWUpCisKKyAgICBkZWYgX2FkZF9jYWxsYmFjayhzZWxmLCBoYW5kbGUpOgorICAgICAgICAiIiJBZGQgYSBIYW5kbGUgdG8gX3NjaGVkdWxlZCAoVGltZXJIYW5kbGUpIG9yIF9yZWFkeS4iIiIKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoaGFuZGxlLCBldmVudHMuSGFuZGxlKSwgJ0EgSGFuZGxlIGlzIHJlcXVpcmVkIGhlcmUnCisgICAgICAgIGlmIGhhbmRsZS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBub3QgaXNpbnN0YW5jZShoYW5kbGUsIGV2ZW50cy5UaW1lckhhbmRsZSkKKyAgICAgICAgc2VsZi5fcmVhZHkuYXBwZW5kKGhhbmRsZSkKKworICAgIGRlZiBfYWRkX2NhbGxiYWNrX3NpZ25hbHNhZmUoc2VsZiwgaGFuZGxlKToKKyAgICAgICAgIiIiTGlrZSBfYWRkX2NhbGxiYWNrKCkgYnV0IGNhbGxlZCBmcm9tIGEgc2lnbmFsIGhhbmRsZXIuIiIiCisgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFjayhoYW5kbGUpCisgICAgICAgIHNlbGYuX3dyaXRlX3RvX3NlbGYoKQorCisgICAgZGVmIF90aW1lcl9oYW5kbGVfY2FuY2VsbGVkKHNlbGYsIGhhbmRsZSk6CisgICAgICAgICIiIk5vdGlmaWNhdGlvbiB0aGF0IGEgVGltZXJIYW5kbGUgaGFzIGJlZW4gY2FuY2VsbGVkLiIiIgorICAgICAgICBpZiBoYW5kbGUuX3NjaGVkdWxlZDoKKyAgICAgICAgICAgIHNlbGYuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCArPSAxCisKKyAgICBkZWYgX3J1bl9vbmNlKHNlbGYpOgorICAgICAgICAiIiJSdW4gb25lIGZ1bGwgaXRlcmF0aW9uIG9mIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgY2FsbHMgYWxsIGN1cnJlbnRseSByZWFkeSBjYWxsYmFja3MsIHBvbGxzIGZvciBJL08sCisgICAgICAgIHNjaGVkdWxlcyB0aGUgcmVzdWx0aW5nIGNhbGxiYWNrcywgYW5kIGZpbmFsbHkgc2NoZWR1bGVzCisgICAgICAgICdjYWxsX2xhdGVyJyBjYWxsYmFja3MuCisgICAgICAgICIiIgorCisgICAgICAgIHNjaGVkX2NvdW50ID0gbGVuKHNlbGYuX3NjaGVkdWxlZCkKKyAgICAgICAgaWYgKHNjaGVkX2NvdW50ID4gX01JTl9TQ0hFRFVMRURfVElNRVJfSEFORExFUyBhbmQKKyAgICAgICAgICAgIHNlbGYuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCAvIHNjaGVkX2NvdW50ID4KKyAgICAgICAgICAgICAgICBfTUlOX0NBTkNFTExFRF9USU1FUl9IQU5ETEVTX0ZSQUNUSU9OKToKKyAgICAgICAgICAgICMgUmVtb3ZlIGRlbGF5ZWQgY2FsbHMgdGhhdCB3ZXJlIGNhbmNlbGxlZCBpZiB0aGVpciBudW1iZXIKKyAgICAgICAgICAgICMgaXMgdG9vIGhpZ2gKKyAgICAgICAgICAgIG5ld19zY2hlZHVsZWQgPSBbXQorICAgICAgICAgICAgZm9yIGhhbmRsZSBpbiBzZWxmLl9zY2hlZHVsZWQ6CisgICAgICAgICAgICAgICAgaWYgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5fc2NoZWR1bGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBuZXdfc2NoZWR1bGVkLmFwcGVuZChoYW5kbGUpCisKKyAgICAgICAgICAgIGhlYXBxLmhlYXBpZnkobmV3X3NjaGVkdWxlZCkKKyAgICAgICAgICAgIHNlbGYuX3NjaGVkdWxlZCA9IG5ld19zY2hlZHVsZWQKKyAgICAgICAgICAgIHNlbGYuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUmVtb3ZlIGRlbGF5ZWQgY2FsbHMgdGhhdCB3ZXJlIGNhbmNlbGxlZCBmcm9tIGhlYWQgb2YgcXVldWUuCisgICAgICAgICAgICB3aGlsZSBzZWxmLl9zY2hlZHVsZWQgYW5kIHNlbGYuX3NjaGVkdWxlZFswXS5fY2FuY2VsbGVkOgorICAgICAgICAgICAgICAgIHNlbGYuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCAtPSAxCisgICAgICAgICAgICAgICAgaGFuZGxlID0gaGVhcHEuaGVhcHBvcChzZWxmLl9zY2hlZHVsZWQpCisgICAgICAgICAgICAgICAgaGFuZGxlLl9zY2hlZHVsZWQgPSBGYWxzZQorCisgICAgICAgIHRpbWVvdXQgPSBOb25lCisgICAgICAgIGlmIHNlbGYuX3JlYWR5IG9yIHNlbGYuX3N0b3BwaW5nOgorICAgICAgICAgICAgdGltZW91dCA9IDAKKyAgICAgICAgZWxpZiBzZWxmLl9zY2hlZHVsZWQ6CisgICAgICAgICAgICAjIENvbXB1dGUgdGhlIGRlc2lyZWQgdGltZW91dC4KKyAgICAgICAgICAgIHdoZW4gPSBzZWxmLl9zY2hlZHVsZWRbMF0uX3doZW4KKyAgICAgICAgICAgIHRpbWVvdXQgPSBtYXgoMCwgd2hlbiAtIHNlbGYudGltZSgpKQorCisgICAgICAgIGlmIHNlbGYuX2RlYnVnIGFuZCB0aW1lb3V0ICE9IDA6CisgICAgICAgICAgICB0MCA9IHNlbGYudGltZSgpCisgICAgICAgICAgICBldmVudF9saXN0ID0gc2VsZi5fc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICBkdCA9IHNlbGYudGltZSgpIC0gdDAKKyAgICAgICAgICAgIGlmIGR0ID49IDEuMDoKKyAgICAgICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuSU5GTworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsZXZlbCA9IGxvZ2dpbmcuREVCVUcKKyAgICAgICAgICAgIG5ldmVudCA9IGxlbihldmVudF9saXN0KQorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGxvZ2dlci5sb2cobGV2ZWwsICdwb2xsIHRvb2sgJS4zZiBtczogJXMgZXZlbnRzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGR0ICogMWUzLCBuZXZlbnQpCisgICAgICAgICAgICBlbGlmIG5ldmVudDoKKyAgICAgICAgICAgICAgICBsb2dnZXIubG9nKGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BvbGwgJS4zZiBtcyB0b29rICUuM2YgbXM6ICVzIGV2ZW50cycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ICogMWUzLCBkdCAqIDFlMywgbmV2ZW50KQorICAgICAgICAgICAgZWxpZiBkdCA+PSAxLjA6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmxvZyhsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdwb2xsICUuM2YgbXMgdG9vayAlLjNmIG1zOiB0aW1lb3V0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgKiAxZTMsIGR0ICogMWUzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZXZlbnRfbGlzdCA9IHNlbGYuX3NlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICBzZWxmLl9wcm9jZXNzX2V2ZW50cyhldmVudF9saXN0KQorCisgICAgICAgICMgSGFuZGxlICdsYXRlcicgY2FsbGJhY2tzIHRoYXQgYXJlIHJlYWR5LgorICAgICAgICBlbmRfdGltZSA9IHNlbGYudGltZSgpICsgc2VsZi5fY2xvY2tfcmVzb2x1dGlvbgorICAgICAgICB3aGlsZSBzZWxmLl9zY2hlZHVsZWQ6CisgICAgICAgICAgICBoYW5kbGUgPSBzZWxmLl9zY2hlZHVsZWRbMF0KKyAgICAgICAgICAgIGlmIGhhbmRsZS5fd2hlbiA+PSBlbmRfdGltZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaGFuZGxlID0gaGVhcHEuaGVhcHBvcChzZWxmLl9zY2hlZHVsZWQpCisgICAgICAgICAgICBoYW5kbGUuX3NjaGVkdWxlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl9yZWFkeS5hcHBlbmQoaGFuZGxlKQorCisgICAgICAgICMgVGhpcyBpcyB0aGUgb25seSBwbGFjZSB3aGVyZSBjYWxsYmFja3MgYXJlIGFjdHVhbGx5ICpjYWxsZWQqLgorICAgICAgICAjIEFsbCBvdGhlciBwbGFjZXMganVzdCBhZGQgdGhlbSB0byByZWFkeS4KKyAgICAgICAgIyBOb3RlOiBXZSBydW4gYWxsIGN1cnJlbnRseSBzY2hlZHVsZWQgY2FsbGJhY2tzLCBidXQgbm90IGFueQorICAgICAgICAjIGNhbGxiYWNrcyBzY2hlZHVsZWQgYnkgY2FsbGJhY2tzIHJ1biB0aGlzIHRpbWUgYXJvdW5kIC0tCisgICAgICAgICMgdGhleSB3aWxsIGJlIHJ1biB0aGUgbmV4dCB0aW1lIChhZnRlciBhbm90aGVyIEkvTyBwb2xsKS4KKyAgICAgICAgIyBVc2UgYW4gaWRpb20gdGhhdCBpcyB0aHJlYWQtc2FmZSB3aXRob3V0IHVzaW5nIGxvY2tzLgorICAgICAgICBudG9kbyA9IGxlbihzZWxmLl9yZWFkeSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnRvZG8pOgorICAgICAgICAgICAgaGFuZGxlID0gc2VsZi5fcmVhZHkucG9wbGVmdCgpCisgICAgICAgICAgICBpZiBoYW5kbGUuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jdXJyZW50X2hhbmRsZSA9IGhhbmRsZQorICAgICAgICAgICAgICAgICAgICB0MCA9IHNlbGYudGltZSgpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZS5fcnVuKCkKKyAgICAgICAgICAgICAgICAgICAgZHQgPSBzZWxmLnRpbWUoKSAtIHQwCisgICAgICAgICAgICAgICAgICAgIGlmIGR0ID49IHNlbGYuc2xvd19jYWxsYmFja19kdXJhdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdFeGVjdXRpbmcgJXMgdG9vayAlLjNmIHNlY29uZHMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Zvcm1hdF9oYW5kbGUoaGFuZGxlKSwgZHQpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3VycmVudF9oYW5kbGUgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhhbmRsZS5fcnVuKCkKKyAgICAgICAgaGFuZGxlID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworICAgIGRlZiBfc2V0X2Nvcm91dGluZV93cmFwcGVyKHNlbGYsIGVuYWJsZWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZXRfd3JhcHBlciA9IHN5cy5zZXRfY29yb3V0aW5lX3dyYXBwZXIKKyAgICAgICAgICAgIGdldF93cmFwcGVyID0gc3lzLmdldF9jb3JvdXRpbmVfd3JhcHBlcgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBlbmFibGVkID0gYm9vbChlbmFibGVkKQorICAgICAgICBpZiBzZWxmLl9jb3JvdXRpbmVfd3JhcHBlcl9zZXQgPT0gZW5hYmxlZDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyYXBwZXIgPSBjb3JvdXRpbmVzLmRlYnVnX3dyYXBwZXIKKyAgICAgICAgY3VycmVudF93cmFwcGVyID0gZ2V0X3dyYXBwZXIoKQorCisgICAgICAgIGlmIGVuYWJsZWQ6CisgICAgICAgICAgICBpZiBjdXJyZW50X3dyYXBwZXIgbm90IGluIChOb25lLCB3cmFwcGVyKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKAorICAgICAgICAgICAgICAgICAgICAibG9vcC5zZXRfZGVidWcoVHJ1ZSk6IGNhbm5vdCBzZXQgZGVidWcgY29yb3V0aW5lICIKKyAgICAgICAgICAgICAgICAgICAgIndyYXBwZXI7IGFub3RoZXIgd3JhcHBlciBpcyBhbHJlYWR5IHNldCAlciIgJQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50X3dyYXBwZXIsIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZXRfd3JhcHBlcih3cmFwcGVyKQorICAgICAgICAgICAgICAgIHNlbGYuX2Nvcm91dGluZV93cmFwcGVyX3NldCA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGN1cnJlbnRfd3JhcHBlciBub3QgaW4gKE5vbmUsIHdyYXBwZXIpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oCisgICAgICAgICAgICAgICAgICAgICJsb29wLnNldF9kZWJ1ZyhGYWxzZSk6IGNhbm5vdCB1bnNldCBkZWJ1ZyBjb3JvdXRpbmUgIgorICAgICAgICAgICAgICAgICAgICAid3JhcHBlcjsgYW5vdGhlciB3cmFwcGVyIHdhcyBzZXQgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudF93cmFwcGVyLCBSdW50aW1lV2FybmluZykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2V0X3dyYXBwZXIoTm9uZSkKKyAgICAgICAgICAgICAgICBzZWxmLl9jb3JvdXRpbmVfd3JhcHBlcl9zZXQgPSBGYWxzZQorCisgICAgZGVmIGdldF9kZWJ1ZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2RlYnVnCisKKyAgICBkZWYgc2V0X2RlYnVnKHNlbGYsIGVuYWJsZWQpOgorICAgICAgICBzZWxmLl9kZWJ1ZyA9IGVuYWJsZWQKKworICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHNlbGYuX3NldF9jb3JvdXRpbmVfd3JhcHBlcihlbmFibGVkKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5IGIvTGliL2FzeW5jaW8vYmFzZV9zdWJwcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNDI1ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9iYXNlX3N1YnByb2Nlc3MucHkKQEAgLTAsMCArMSwyODMgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCB3YXJuaW5ncworCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHByb3RvY29scworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworY2xhc3MgQmFzZVN1YnByb2Nlc3NUcmFuc3BvcnQodHJhbnNwb3J0cy5TdWJwcm9jZXNzVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwcm90b2NvbCwgYXJncywgc2hlbGwsCisgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fY2xvc2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9wcm9jID0gTm9uZQorICAgICAgICBzZWxmLl9waWQgPSBOb25lCisgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuX2V4aXRfd2FpdGVycyA9IFtdCisgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX3BpcGVzID0ge30KKyAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBGYWxzZQorCisgICAgICAgIGlmIHN0ZGluID09IHN1YnByb2Nlc3MuUElQRToKKyAgICAgICAgICAgIHNlbGYuX3BpcGVzWzBdID0gTm9uZQorICAgICAgICBpZiBzdGRvdXQgPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgc2VsZi5fcGlwZXNbMV0gPSBOb25lCisgICAgICAgIGlmIHN0ZGVyciA9PSBzdWJwcm9jZXNzLlBJUEU6CisgICAgICAgICAgICBzZWxmLl9waXBlc1syXSA9IE5vbmUKKworICAgICAgICAjIENyZWF0ZSB0aGUgY2hpbGQgcHJvY2Vzczogc2V0IHRoZSBfcHJvYyBhdHRyaWJ1dGUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc3RhcnQoYXJncz1hcmdzLCBzaGVsbD1zaGVsbCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3RkZXJyLCBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgc2VsZi5fcGlkID0gc2VsZi5fcHJvYy5waWQKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3N1YnByb2Nlc3MnXSA9IHNlbGYuX3Byb2MKKworICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShhcmdzLCAoYnl0ZXMsIHN0cikpOgorICAgICAgICAgICAgICAgIHByb2dyYW0gPSBhcmdzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHByb2dyYW0gPSBhcmdzWzBdCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3Byb2Nlc3MgJXIgY3JlYXRlZDogcGlkICVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLCBzZWxmLl9waWQpCisKKyAgICAgICAgc2VsZi5fbG9vcC5jcmVhdGVfdGFzayhzZWxmLl9jb25uZWN0X3BpcGVzKHdhaXRlcikpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbc2VsZi5fX2NsYXNzX18uX19uYW1lX19dCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zZWQnKQorICAgICAgICBpZiBzZWxmLl9waWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgncGlkPSVzJyAlIHNlbGYuX3BpZCkKKyAgICAgICAgaWYgc2VsZi5fcmV0dXJuY29kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdyZXR1cm5jb2RlPSVzJyAlIHNlbGYuX3JldHVybmNvZGUpCisgICAgICAgIGVsaWYgc2VsZi5fcGlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3J1bm5pbmcnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ25vdCBzdGFydGVkJykKKworICAgICAgICBzdGRpbiA9IHNlbGYuX3BpcGVzLmdldCgwKQorICAgICAgICBpZiBzdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdzdGRpbj0lcycgJSBzdGRpbi5waXBlKQorCisgICAgICAgIHN0ZG91dCA9IHNlbGYuX3BpcGVzLmdldCgxKQorICAgICAgICBzdGRlcnIgPSBzZWxmLl9waXBlcy5nZXQoMikKKyAgICAgICAgaWYgc3Rkb3V0IGlzIG5vdCBOb25lIGFuZCBzdGRlcnIgaXMgc3Rkb3V0OgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZG91dD1zdGRlcnI9JXMnICUgc3Rkb3V0LnBpcGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBzdGRvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZG91dD0lcycgJSBzdGRvdXQucGlwZSkKKyAgICAgICAgICAgIGlmIHN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3RkZXJyPSVzJyAlIHN0ZGVyci5waXBlKQorCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgZGVmIF9zdGFydChzZWxmLCBhcmdzLCBzaGVsbCwgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLCAqKmt3YXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBpc19jbG9zaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2xvc2VkCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCisKKyAgICAgICAgZm9yIHByb3RvIGluIHNlbGYuX3BpcGVzLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgcHJvdG8gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgcHJvdG8ucGlwZS5jbG9zZSgpCisKKyAgICAgICAgaWYgKHNlbGYuX3Byb2MgaXMgbm90IE5vbmUKKyAgICAgICAgIyB0aGUgY2hpbGQgcHJvY2VzcyBmaW5pc2hlZD8KKyAgICAgICAgYW5kIHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZQorICAgICAgICAjIHRoZSBjaGlsZCBwcm9jZXNzIGZpbmlzaGVkIGJ1dCB0aGUgdHJhbnNwb3J0IHdhcyBub3Qgbm90aWZpZWQgeWV0PworICAgICAgICBhbmQgc2VsZi5fcHJvYy5wb2xsKCkgaXMgTm9uZQorICAgICAgICApOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygnQ2xvc2UgcnVubmluZyBjaGlsZCBwcm9jZXNzOiBraWxsICVyJywgc2VsZikKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb2Mua2lsbCgpCisgICAgICAgICAgICBleGNlcHQgUHJvY2Vzc0xvb2t1cEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgIyBEb24ndCBjbGVhciB0aGUgX3Byb2MgcmVmZXJlbmNlIHlldDogX3Bvc3RfaW5pdCgpIG1heSBzdGlsbCBydW4KKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCB0cmFuc3BvcnQgJXIiICUgc2VsZiwgUmVzb3VyY2VXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIGdldF9waWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9waWQKKworICAgIGRlZiBnZXRfcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3JldHVybmNvZGUKKworICAgIGRlZiBnZXRfcGlwZV90cmFuc3BvcnQoc2VsZiwgZmQpOgorICAgICAgICBpZiBmZCBpbiBzZWxmLl9waXBlczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9waXBlc1tmZF0ucGlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfY2hlY2tfcHJvYyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcHJvYyBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUHJvY2Vzc0xvb2t1cEVycm9yKCkKKworICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWduYWwpOgorICAgICAgICBzZWxmLl9jaGVja19wcm9jKCkKKyAgICAgICAgc2VsZi5fcHJvYy5zZW5kX3NpZ25hbChzaWduYWwpCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19wcm9jKCkKKyAgICAgICAgc2VsZi5fcHJvYy50ZXJtaW5hdGUoKQorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3Byb2MoKQorICAgICAgICBzZWxmLl9wcm9jLmtpbGwoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfY29ubmVjdF9waXBlcyhzZWxmLCB3YWl0ZXIpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm9jID0gc2VsZi5fcHJvYworICAgICAgICAgICAgbG9vcCA9IHNlbGYuX2xvb3AKKworICAgICAgICAgICAgaWYgcHJvYy5zdGRpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBfLCBwaXBlID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3Rfd3JpdGVfcGlwZSgKKyAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgMCksCisgICAgICAgICAgICAgICAgICAgIHByb2Muc3RkaW4pCisgICAgICAgICAgICAgICAgc2VsZi5fcGlwZXNbMF0gPSBwaXBlCisKKyAgICAgICAgICAgIGlmIHByb2Muc3Rkb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIF8sIHBpcGUgPSB5aWVsZCBmcm9tIGxvb3AuY29ubmVjdF9yZWFkX3BpcGUoCisgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oc2VsZiwgMSksCisgICAgICAgICAgICAgICAgICAgIHByb2Muc3Rkb3V0KQorICAgICAgICAgICAgICAgIHNlbGYuX3BpcGVzWzFdID0gcGlwZQorCisgICAgICAgICAgICBpZiBwcm9jLnN0ZGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBfLCBwaXBlID0geWllbGQgZnJvbSBsb29wLmNvbm5lY3RfcmVhZF9waXBlKAorICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IFJlYWRTdWJwcm9jZXNzUGlwZVByb3RvKHNlbGYsIDIpLAorICAgICAgICAgICAgICAgICAgICBwcm9jLnN0ZGVycikKKyAgICAgICAgICAgICAgICBzZWxmLl9waXBlc1syXSA9IHBpcGUKKworICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3BlbmRpbmdfY2FsbHMgaXMgbm90IE5vbmUKKworICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICAgICAgZm9yIGNhbGxiYWNrLCBkYXRhIGluIHNlbGYuX3BlbmRpbmdfY2FsbHM6CisgICAgICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb24oY2FsbGJhY2ssICpkYXRhKQorICAgICAgICAgICAgc2VsZi5fcGVuZGluZ19jYWxscyA9IE5vbmUKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmUgYW5kIG5vdCB3YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lIGFuZCBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgX2NhbGwoc2VsZiwgY2IsICpkYXRhKToKKyAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19jYWxscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3BlbmRpbmdfY2FsbHMuYXBwZW5kKChjYiwgZGF0YSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihjYiwgKmRhdGEpCisKKyAgICBkZWYgX3BpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX3Byb3RvY29sLnBpcGVfY29ubmVjdGlvbl9sb3N0LCBmZCwgZXhjKQorICAgICAgICBzZWxmLl90cnlfZmluaXNoKCkKKworICAgIGRlZiBfcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgc2VsZi5fY2FsbChzZWxmLl9wcm90b2NvbC5waXBlX2RhdGFfcmVjZWl2ZWQsIGZkLCBkYXRhKQorCisgICAgZGVmIF9wcm9jZXNzX2V4aXRlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgYXNzZXJ0IHJldHVybmNvZGUgaXMgbm90IE5vbmUsIHJldHVybmNvZGUKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3JldHVybmNvZGUgaXMgTm9uZSwgc2VsZi5fcmV0dXJuY29kZQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmluZm8oJyVyIGV4aXRlZCB3aXRoIHJldHVybiBjb2RlICVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHJldHVybmNvZGUpCisgICAgICAgIHNlbGYuX3JldHVybmNvZGUgPSByZXR1cm5jb2RlCisgICAgICAgIHNlbGYuX2NhbGwoc2VsZi5fcHJvdG9jb2wucHJvY2Vzc19leGl0ZWQpCisgICAgICAgIHNlbGYuX3RyeV9maW5pc2goKQorCisgICAgICAgICMgd2FrZSB1cCBmdXR1cmVzIHdhaXRpbmcgZm9yIHdhaXQoKQorICAgICAgICBmb3Igd2FpdGVyIGluIHNlbGYuX2V4aXRfd2FpdGVyczoKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQocmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5fZXhpdF93YWl0ZXJzID0gTm9uZQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfd2FpdChzZWxmKToKKyAgICAgICAgIiIiV2FpdCB1bnRpbCB0aGUgcHJvY2VzcyBleGl0IGFuZCByZXR1cm4gdGhlIHByb2Nlc3MgcmV0dXJuIGNvZGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUuIiIiCisgICAgICAgIGlmIHNlbGYuX3JldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmV0dXJuY29kZQorCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fZXhpdF93YWl0ZXJzLmFwcGVuZCh3YWl0ZXIpCisgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSB3YWl0ZXIpCisKKyAgICBkZWYgX3RyeV9maW5pc2goc2VsZik6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5fZmluaXNoZWQKKyAgICAgICAgaWYgc2VsZi5fcmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIGFsbChwIGlzIG5vdCBOb25lIGFuZCBwLmRpc2Nvbm5lY3RlZAorICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5fcGlwZXMudmFsdWVzKCkpOgorICAgICAgICAgICAgc2VsZi5fZmluaXNoZWQgPSBUcnVlCisgICAgICAgICAgICBzZWxmLl9jYWxsKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb2MgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKworCitjbGFzcyBXcml0ZVN1YnByb2Nlc3NQaXBlUHJvdG8ocHJvdG9jb2xzLkJhc2VQcm90b2NvbCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYywgZmQpOgorICAgICAgICBzZWxmLnByb2MgPSBwcm9jCisgICAgICAgIHNlbGYuZmQgPSBmZAorICAgICAgICBzZWxmLnBpcGUgPSBOb25lCisgICAgICAgIHNlbGYuZGlzY29ubmVjdGVkID0gRmFsc2UKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi5waXBlID0gdHJhbnNwb3J0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzwlcyBmZD0lcyBwaXBlPSVyPicKKyAgICAgICAgICAgICAgICAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5mZCwgc2VsZi5waXBlKSkKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIHNlbGYucHJvYy5fcGlwZV9jb25uZWN0aW9uX2xvc3Qoc2VsZi5mZCwgZXhjKQorICAgICAgICBzZWxmLnByb2MgPSBOb25lCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jLl9wcm90b2NvbC5wYXVzZV93cml0aW5nKCkKKworICAgIGRlZiByZXN1bWVfd3JpdGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wcm9jLl9wcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisKKworY2xhc3MgUmVhZFN1YnByb2Nlc3NQaXBlUHJvdG8oV3JpdGVTdWJwcm9jZXNzUGlwZVByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xzLlByb3RvY29sKToKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLnByb2MuX3BpcGVfZGF0YV9yZWNlaXZlZChzZWxmLmZkLCBkYXRhKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vY29tcGF0LnB5IGIvTGliL2FzeW5jaW8vY29tcGF0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2MGI3ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9jb21wYXQucHkKQEAgLTAsMCArMSwxNyBAQAorIiIiQ29tcGF0aWJpbGl0eSBoZWxwZXJzIGZvciB0aGUgZGlmZmVyZW50IFB5dGhvbiB2ZXJzaW9ucy4iIiIKKworaW1wb3J0IHN5cworCitQWTM0ID0gc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNCkKK1BZMzUgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA1KQorCisKK2RlZiBmbGF0dGVuX2xpc3RfYnl0ZXMobGlzdF9vZl9kYXRhKToKKyAgICAiIiJDb25jYXRlbmF0ZSBhIHNlcXVlbmNlIG9mIGJ5dGVzLWxpa2Ugb2JqZWN0cy4iIiIKKyAgICBpZiBub3QgUFkzNDoKKyAgICAgICAgIyBPbiBQeXRob24gMy4zIGFuZCBvbGRlciwgYnl0ZXMuam9pbigpIGRvZXNuJ3QgaGFuZGxlCisgICAgICAgICMgbWVtb3J5dmlldy4KKyAgICAgICAgbGlzdF9vZl9kYXRhID0gKAorICAgICAgICAgICAgYnl0ZXMoZGF0YSkgaWYgaXNpbnN0YW5jZShkYXRhLCBtZW1vcnl2aWV3KSBlbHNlIGRhdGEKKyAgICAgICAgICAgIGZvciBkYXRhIGluIGxpc3Rfb2ZfZGF0YSkKKyAgICByZXR1cm4gYicnLmpvaW4obGlzdF9vZl9kYXRhKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5IGIvTGliL2FzeW5jaW8vY29uc3RhbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTEyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9jb25zdGFudHMucHkKQEAgLTAsMCArMSw3IEBACisiIiJDb25zdGFudHMuIiIiCisKKyMgQWZ0ZXIgdGhlIGNvbm5lY3Rpb24gaXMgbG9zdCwgbG9nIHdhcm5pbmdzIGFmdGVyIHRoaXMgbWFueSB3cml0ZSgpcy4KK0xPR19USFJFU0hPTERfRk9SX0NPTk5MT1NUX1dSSVRFUyA9IDUKKworIyBTZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHJldHJ5aW5nIGFjY2VwdCgpLgorQUNDRVBUX1JFVFJZX0RFTEFZID0gMQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vY29yb3V0aW5lcy5weSBiL0xpYi9hc3luY2lvL2Nvcm91dGluZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhYjQyYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2Nvcm91dGluZXMucHkKQEAgLTAsMCArMSwzMDggQEAKK19fYWxsX18gPSBbJ2Nvcm91dGluZScsCisgICAgICAgICAgICdpc2Nvcm91dGluZWZ1bmN0aW9uJywgJ2lzY29yb3V0aW5lJ10KKworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBvcGNvZGUKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHR5cGVzCisKK2Zyb20gLiBpbXBvcnQgY29tcGF0Citmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKKyMgT3Bjb2RlIG9mICJ5aWVsZCBmcm9tIiBpbnN0cnVjdGlvbgorX1lJRUxEX0ZST00gPSBvcGNvZGUub3BtYXBbJ1lJRUxEX0ZST00nXQorCisjIElmIHlvdSBzZXQgX0RFQlVHIHRvIHRydWUsIEBjb3JvdXRpbmUgd2lsbCB3cmFwIHRoZSByZXN1bHRpbmcKKyMgZ2VuZXJhdG9yIG9iamVjdHMgaW4gYSBDb3JvV3JhcHBlciBpbnN0YW5jZSAoZGVmaW5lZCBiZWxvdykuICBUaGF0CisjIGluc3RhbmNlIHdpbGwgbG9nIGEgbWVzc2FnZSB3aGVuIHRoZSBnZW5lcmF0b3IgaXMgbmV2ZXIgaXRlcmF0ZWQKKyMgb3Zlciwgd2hpY2ggbWF5IGhhcHBlbiB3aGVuIHlvdSBmb3JnZXQgdG8gdXNlICJ5aWVsZCBmcm9tIiB3aXRoIGEKKyMgY29yb3V0aW5lIGNhbGwuICBOb3RlIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBfREVCVUcgZmxhZyBpcyB0YWtlbgorIyB3aGVuIHRoZSBkZWNvcmF0b3IgaXMgdXNlZCwgc28gdG8gYmUgb2YgYW55IHVzZSBpdCBtdXN0IGJlIHNldAorIyBiZWZvcmUgeW91IGRlZmluZSB5b3VyIGNvcm91dGluZXMuICBBIGRvd25zaWRlIG9mIHVzaW5nIHRoaXMgZmVhdHVyZQorIyBpcyB0aGF0IHRyYWNlYmFja3Mgc2hvdyBlbnRyaWVzIGZvciB0aGUgQ29yb1dyYXBwZXIuX19uZXh0X18gbWV0aG9kCisjIHdoZW4gX0RFQlVHIGlzIHRydWUuCitfREVCVUcgPSAobm90IHN5cy5mbGFncy5pZ25vcmVfZW52aXJvbm1lbnQgYW5kCisgICAgICAgICAgYm9vbChvcy5lbnZpcm9uLmdldCgnUFlUSE9OQVNZTkNJT0RFQlVHJykpKQorCisKK3RyeToKKyAgICBfdHlwZXNfY29yb3V0aW5lID0gdHlwZXMuY29yb3V0aW5lCitleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgX3R5cGVzX2Nvcm91dGluZSA9IE5vbmUKKwordHJ5OgorICAgIF9pbnNwZWN0X2lzY29yb3V0aW5lZnVuY3Rpb24gPSBpbnNwZWN0LmlzY29yb3V0aW5lZnVuY3Rpb24KK2V4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBfaW5zcGVjdF9pc2Nvcm91dGluZWZ1bmN0aW9uID0gbGFtYmRhIGZ1bmM6IEZhbHNlCisKK3RyeToKKyAgICBmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgQ29yb3V0aW5lIGFzIF9Db3JvdXRpbmVBQkMsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXdhaXRhYmxlIGFzIF9Bd2FpdGFibGVBQkMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfQ29yb3V0aW5lQUJDID0gX0F3YWl0YWJsZUFCQyA9IE5vbmUKKworCisjIENoZWNrIGZvciBDUHl0aG9uIGlzc3VlICMyMTIwOQorZGVmIGhhc195aWVsZF9mcm9tX2J1ZygpOgorICAgIGNsYXNzIE15R2VuOgorICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzZWxmLnNlbmRfYXJncyA9IE5vbmUKKyAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgZGVmIF9fbmV4dF9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIDQyCisgICAgICAgIGRlZiBzZW5kKHNlbGYsICp3aGF0KToKKyAgICAgICAgICAgIHNlbGYuc2VuZF9hcmdzID0gd2hhdAorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBkZWYgeWllbGRfZnJvbV9nZW4oZ2VuKToKKyAgICAgICAgeWllbGQgZnJvbSBnZW4KKyAgICB2YWx1ZSA9ICgxLCAyLCAzKQorICAgIGdlbiA9IE15R2VuKCkKKyAgICBjb3JvID0geWllbGRfZnJvbV9nZW4oZ2VuKQorICAgIG5leHQoY29ybykKKyAgICBjb3JvLnNlbmQodmFsdWUpCisgICAgcmV0dXJuIGdlbi5zZW5kX2FyZ3MgIT0gKHZhbHVlLCkKK19ZSUVMRF9GUk9NX0JVRyA9IGhhc195aWVsZF9mcm9tX2J1ZygpCitkZWwgaGFzX3lpZWxkX2Zyb21fYnVnCisKKworZGVmIGRlYnVnX3dyYXBwZXIoZ2VuKToKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gJ3N5cy5zZXRfY29yb3V0aW5lX3dyYXBwZXInLgorICAgICMgV2Ugb25seSB3cmFwIGhlcmUgY29yb3V0aW5lcyBkZWZpbmVkIHZpYSAnYXN5bmMgZGVmJyBzeW50YXguCisgICAgIyBHZW5lcmF0b3ItYmFzZWQgY29yb3V0aW5lcyBhcmUgd3JhcHBlZCBpbiBAY29yb3V0aW5lCisgICAgIyBkZWNvcmF0b3IuCisgICAgcmV0dXJuIENvcm9XcmFwcGVyKGdlbiwgTm9uZSkKKworCitjbGFzcyBDb3JvV3JhcHBlcjoKKyAgICAjIFdyYXBwZXIgZm9yIGNvcm91dGluZSBvYmplY3QgaW4gX0RFQlVHIG1vZGUuCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZ2VuLCBmdW5jPU5vbmUpOgorICAgICAgICBhc3NlcnQgaW5zcGVjdC5pc2dlbmVyYXRvcihnZW4pIG9yIGluc3BlY3QuaXNjb3JvdXRpbmUoZ2VuKSwgZ2VuCisgICAgICAgIHNlbGYuZ2VuID0gZ2VuCisgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMgICMgVXNlZCB0byB1bndyYXAgQGNvcm91dGluZSBkZWNvcmF0b3IKKyAgICAgICAgc2VsZi5fc291cmNlX3RyYWNlYmFjayA9IHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN5cy5fZ2V0ZnJhbWUoMSkpCisgICAgICAgIHNlbGYuX19uYW1lX18gPSBnZXRhdHRyKGdlbiwgJ19fbmFtZV9fJywgTm9uZSkKKyAgICAgICAgc2VsZi5fX3F1YWxuYW1lX18gPSBnZXRhdHRyKGdlbiwgJ19fcXVhbG5hbWVfXycsIE5vbmUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGNvcm9fcmVwciA9IF9mb3JtYXRfY29yb3V0aW5lKHNlbGYpCisgICAgICAgIGlmIHNlbGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBmcmFtZSA9IHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgICAgICBjb3JvX3JlcHIgKz0gJywgY3JlYXRlZCBhdCAlczolcycgJSAoZnJhbWVbMF0sIGZyYW1lWzFdKQorICAgICAgICByZXR1cm4gJzwlcyAlcz4nICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBjb3JvX3JlcHIpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5zZW5kKE5vbmUpCisKKyAgICBpZiBfWUlFTERfRlJPTV9CVUc6CisgICAgICAgICMgRm9yIGZvciBDUHl0aG9uIGlzc3VlICMyMTIwOTogdXNpbmcgInlpZWxkIGZyb20iIGFuZCBhIGN1c3RvbQorICAgICAgICAjIGdlbmVyYXRvciwgZ2VuZXJhdG9yLnNlbmQodHVwbGUpIHVucGFja3MgdGhlIHR1cGxlIGluc3RlYWQgb2YgcGFzc2luZworICAgICAgICAjIHRoZSB0dXBsZSB1bmNoYW5nZWQuIENoZWNrIGlmIHRoZSBjYWxsZXIgaXMgYSBnZW5lcmF0b3IgdXNpbmcgInlpZWxkCisgICAgICAgICMgZnJvbSIgdG8gZGVjaWRlIGlmIHRoZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIHVucGFja2VkIG9yIG5vdC4KKyAgICAgICAgZGVmIHNlbmQoc2VsZiwgKnZhbHVlKToKKyAgICAgICAgICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgpCisgICAgICAgICAgICBjYWxsZXIgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgICAgIGFzc2VydCBjYWxsZXIuZl9sYXN0aSA+PSAwCisgICAgICAgICAgICBpZiBjYWxsZXIuZl9jb2RlLmNvX2NvZGVbY2FsbGVyLmZfbGFzdGldICE9IF9ZSUVMRF9GUk9NOgorICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbMF0KKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbi5zZW5kKHZhbHVlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBzZW5kKHNlbGYsIHZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbi5zZW5kKHZhbHVlKQorCisgICAgZGVmIHRocm93KHNlbGYsIGV4Yyk6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi50aHJvdyhleGMpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5jbG9zZSgpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZ2lfZnJhbWUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5naV9mcmFtZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGdpX3J1bm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmdlbi5naV9ydW5uaW5nCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZ2lfY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLmdpX2NvZGUKKworICAgIGlmIGNvbXBhdC5QWTM1OgorCisgICAgICAgIGRlZiBfX2F3YWl0X18oc2VsZik6CisgICAgICAgICAgICBjcl9hd2FpdCA9IGdldGF0dHIoc2VsZi5nZW4sICdjcl9hd2FpdCcsIE5vbmUpCisgICAgICAgICAgICBpZiBjcl9hd2FpdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJDYW5ub3QgYXdhaXQgb24gY29yb3V0aW5lIHshcn0gd2hpbGUgaXQncyAiCisgICAgICAgICAgICAgICAgICAgICJhd2FpdGluZyBmb3IgeyFyfSIuZm9ybWF0KHNlbGYuZ2VuLCBjcl9hd2FpdCkpCisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgZ2lfeWllbGRmcm9tKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2VuLmdpX3lpZWxkZnJvbQorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgY3JfYXdhaXQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZW4uY3JfYXdhaXQKKworICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIGNyX3J1bm5pbmcoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZW4uY3JfcnVubmluZworCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgY3JfY29kZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbi5jcl9jb2RlCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAgIGRlZiBjcl9mcmFtZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdlbi5jcl9mcmFtZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICMgQmUgY2FyZWZ1bCBhY2Nlc3Npbmcgc2VsZi5nZW4uZnJhbWUgLS0gc2VsZi5nZW4gbWlnaHQgbm90IGV4aXN0LgorICAgICAgICBnZW4gPSBnZXRhdHRyKHNlbGYsICdnZW4nLCBOb25lKQorICAgICAgICBmcmFtZSA9IGdldGF0dHIoZ2VuLCAnZ2lfZnJhbWUnLCBOb25lKQorICAgICAgICBpZiBmcmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZnJhbWUgPSBnZXRhdHRyKGdlbiwgJ2NyX2ZyYW1lJywgTm9uZSkKKyAgICAgICAgaWYgZnJhbWUgaXMgbm90IE5vbmUgYW5kIGZyYW1lLmZfbGFzdGkgPT0gLTE6CisgICAgICAgICAgICBtc2cgPSAnJXIgd2FzIG5ldmVyIHlpZWxkZWQgZnJvbScgJSBzZWxmCisgICAgICAgICAgICB0YiA9IGdldGF0dHIoc2VsZiwgJ19zb3VyY2VfdHJhY2ViYWNrJywgKCkpCisgICAgICAgICAgICBpZiB0YjoKKyAgICAgICAgICAgICAgICB0YiA9ICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF9saXN0KHRiKSkKKyAgICAgICAgICAgICAgICBtc2cgKz0gKCdcbkNvcm91dGluZSBvYmplY3QgY3JlYXRlZCBhdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAnKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nKQorICAgICAgICAgICAgICAgIG1zZyArPSB0Yi5yc3RyaXAoKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKG1zZykKKworCitkZWYgY29yb3V0aW5lKGZ1bmMpOgorICAgICIiIkRlY29yYXRvciB0byBtYXJrIGNvcm91dGluZXMuCisKKyAgICBJZiB0aGUgY29yb3V0aW5lIGlzIG5vdCB5aWVsZGVkIGZyb20gYmVmb3JlIGl0IGlzIGRlc3Ryb3llZCwKKyAgICBhbiBlcnJvciBtZXNzYWdlIGlzIGxvZ2dlZC4KKyAgICAiIiIKKyAgICBpZiBfaW5zcGVjdF9pc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpOgorICAgICAgICAjIEluIFB5dGhvbiAzLjUgdGhhdCdzIGFsbCB3ZSBuZWVkIHRvIGRvIGZvciBjb3JvdXRpbmVzCisgICAgICAgICMgZGVmaWVuZCB3aXRoICJhc3luYyBkZWYiLgorICAgICAgICAjIFdyYXBwaW5nIGluIENvcm9XcmFwcGVyIHdpbGwgaGFwcGVuIHZpYQorICAgICAgICAjICdzeXMuc2V0X2Nvcm91dGluZV93cmFwcGVyJyBmdW5jdGlvbi4KKyAgICAgICAgcmV0dXJuIGZ1bmMKKworICAgIGlmIGluc3BlY3QuaXNnZW5lcmF0b3JmdW5jdGlvbihmdW5jKToKKyAgICAgICAgY29ybyA9IGZ1bmMKKyAgICBlbHNlOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgICAgIGRlZiBjb3JvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJlcyA9IGZ1bmMoKmFyZ3MsICoqa3cpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHJlcywgZnV0dXJlcy5GdXR1cmUpIG9yIGluc3BlY3QuaXNnZW5lcmF0b3IocmVzKToKKyAgICAgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHJlcworICAgICAgICAgICAgZWxpZiBfQXdhaXRhYmxlQUJDIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgSWYgJ2Z1bmMnIHJldHVybnMgYW4gQXdhaXRhYmxlIChuZXcgaW4gMy41KSB3ZQorICAgICAgICAgICAgICAgICMgd2FudCB0byBydW4gaXQuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhd2FpdF9tZXRoID0gcmVzLl9fYXdhaXRfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzLCBfQXdhaXRhYmxlQUJDKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gYXdhaXRfbWV0aCgpCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICBpZiBub3QgX0RFQlVHOgorICAgICAgICBpZiBfdHlwZXNfY29yb3V0aW5lIGlzIE5vbmU6CisgICAgICAgICAgICB3cmFwcGVyID0gY29ybworICAgICAgICBlbHNlOgorICAgICAgICAgICAgd3JhcHBlciA9IF90eXBlc19jb3JvdXRpbmUoY29ybykKKyAgICBlbHNlOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgdyA9IENvcm9XcmFwcGVyKGNvcm8oKmFyZ3MsICoqa3dkcyksIGZ1bmM9ZnVuYykKKyAgICAgICAgICAgIGlmIHcuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICAgICAgZGVsIHcuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgICAgICAjIFB5dGhvbiA8IDMuNSBkb2VzIG5vdCBpbXBsZW1lbnQgX19xdWFsbmFtZV9fCisgICAgICAgICAgICAjIG9uIGdlbmVyYXRvciBvYmplY3RzLCBzbyB3ZSBzZXQgaXQgbWFudWFsbHkuCisgICAgICAgICAgICAjIFdlIHVzZSBnZXRhdHRyIGFzIHNvbWUgY2FsbGFibGVzIChzdWNoIGFzCisgICAgICAgICAgICAjIGZ1bmN0b29scy5wYXJ0aWFsIG1heSBsYWNrIF9fcXVhbG5hbWVfXykuCisgICAgICAgICAgICB3Ll9fbmFtZV9fID0gZ2V0YXR0cihmdW5jLCAnX19uYW1lX18nLCBOb25lKQorICAgICAgICAgICAgdy5fX3F1YWxuYW1lX18gPSBnZXRhdHRyKGZ1bmMsICdfX3F1YWxuYW1lX18nLCBOb25lKQorICAgICAgICAgICAgcmV0dXJuIHcKKworICAgIHdyYXBwZXIuX2lzX2Nvcm91dGluZSA9IFRydWUgICMgRm9yIGlzY29yb3V0aW5lZnVuY3Rpb24oKS4KKyAgICByZXR1cm4gd3JhcHBlcgorCisKK2RlZiBpc2Nvcm91dGluZWZ1bmN0aW9uKGZ1bmMpOgorICAgICIiIlJldHVybiBUcnVlIGlmIGZ1bmMgaXMgYSBkZWNvcmF0ZWQgY29yb3V0aW5lIGZ1bmN0aW9uLiIiIgorICAgIHJldHVybiAoZ2V0YXR0cihmdW5jLCAnX2lzX2Nvcm91dGluZScsIEZhbHNlKSBvcgorICAgICAgICAgICAgX2luc3BlY3RfaXNjb3JvdXRpbmVmdW5jdGlvbihmdW5jKSkKKworCitfQ09ST1VUSU5FX1RZUEVTID0gKHR5cGVzLkdlbmVyYXRvclR5cGUsIENvcm9XcmFwcGVyKQoraWYgX0Nvcm91dGluZUFCQyBpcyBub3QgTm9uZToKKyAgICBfQ09ST1VUSU5FX1RZUEVTICs9IChfQ29yb3V0aW5lQUJDLCkKKworCitkZWYgaXNjb3JvdXRpbmUob2JqKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBvYmogaXMgYSBjb3JvdXRpbmUgb2JqZWN0LiIiIgorICAgIHJldHVybiBpc2luc3RhbmNlKG9iaiwgX0NPUk9VVElORV9UWVBFUykKKworCitkZWYgX2Zvcm1hdF9jb3JvdXRpbmUoY29ybyk6CisgICAgYXNzZXJ0IGlzY29yb3V0aW5lKGNvcm8pCisKKyAgICBjb3JvX25hbWUgPSBOb25lCisgICAgaWYgaXNpbnN0YW5jZShjb3JvLCBDb3JvV3JhcHBlcik6CisgICAgICAgIGZ1bmMgPSBjb3JvLmZ1bmMKKyAgICAgICAgY29yb19uYW1lID0gY29yby5fX3F1YWxuYW1lX18KKyAgICAgICAgaWYgY29yb19uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY29yb19uYW1lID0gJ3t9KCknLmZvcm1hdChjb3JvX25hbWUpCisgICAgZWxzZToKKyAgICAgICAgZnVuYyA9IGNvcm8KKworICAgIGlmIGNvcm9fbmFtZSBpcyBOb25lOgorICAgICAgICBjb3JvX25hbWUgPSBldmVudHMuX2Zvcm1hdF9jYWxsYmFjayhmdW5jLCAoKSkKKworICAgIHRyeToKKyAgICAgICAgY29yb19jb2RlID0gY29yby5naV9jb2RlCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBjb3JvX2NvZGUgPSBjb3JvLmNyX2NvZGUKKworICAgIHRyeToKKyAgICAgICAgY29yb19mcmFtZSA9IGNvcm8uZ2lfZnJhbWUKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGNvcm9fZnJhbWUgPSBjb3JvLmNyX2ZyYW1lCisKKyAgICBmaWxlbmFtZSA9IGNvcm9fY29kZS5jb19maWxlbmFtZQorICAgIGxpbmVubyA9IDAKKyAgICBpZiAoaXNpbnN0YW5jZShjb3JvLCBDb3JvV3JhcHBlcikgYW5kCisgICAgICAgICAgICBub3QgaW5zcGVjdC5pc2dlbmVyYXRvcmZ1bmN0aW9uKGNvcm8uZnVuYykgYW5kCisgICAgICAgICAgICBjb3JvLmZ1bmMgaXMgbm90IE5vbmUpOgorICAgICAgICBzb3VyY2UgPSBldmVudHMuX2dldF9mdW5jdGlvbl9zb3VyY2UoY29yby5mdW5jKQorICAgICAgICBpZiBzb3VyY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gc291cmNlCisgICAgICAgIGlmIGNvcm9fZnJhbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGNvcm9fcmVwciA9ICgnJXMgZG9uZSwgZGVmaW5lZCBhdCAlczolcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChjb3JvX25hbWUsIGZpbGVuYW1lLCBsaW5lbm8pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29yb19yZXByID0gKCclcyBydW5uaW5nLCBkZWZpbmVkIGF0ICVzOiVzJworICAgICAgICAgICAgICAgICAgICAgICAgICUgKGNvcm9fbmFtZSwgZmlsZW5hbWUsIGxpbmVubykpCisgICAgZWxpZiBjb3JvX2ZyYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBsaW5lbm8gPSBjb3JvX2ZyYW1lLmZfbGluZW5vCisgICAgICAgIGNvcm9fcmVwciA9ICgnJXMgcnVubmluZyBhdCAlczolcycKKyAgICAgICAgICAgICAgICAgICAgICUgKGNvcm9fbmFtZSwgZmlsZW5hbWUsIGxpbmVubykpCisgICAgZWxzZToKKyAgICAgICAgbGluZW5vID0gY29yb19jb2RlLmNvX2ZpcnN0bGluZW5vCisgICAgICAgIGNvcm9fcmVwciA9ICgnJXMgZG9uZSwgZGVmaW5lZCBhdCAlczolcycKKyAgICAgICAgICAgICAgICAgICAgICUgKGNvcm9fbmFtZSwgZmlsZW5hbWUsIGxpbmVubykpCisKKyAgICByZXR1cm4gY29yb19yZXByCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9ldmVudHMucHkgYi9MaWIvYXN5bmNpby9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2YTg0NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL2V2ZW50cy5weQpAQCAtMCwwICsxLDY0NyBAQAorIiIiRXZlbnQgbG9vcCBhbmQgZXZlbnQgbG9vcCBwb2xpY3kuIiIiCisKK19fYWxsX18gPSBbJ0Fic3RyYWN0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgJ0Fic3RyYWN0RXZlbnRMb29wJywgJ0Fic3RyYWN0U2VydmVyJywKKyAgICAgICAgICAgJ0hhbmRsZScsICdUaW1lckhhbmRsZScsCisgICAgICAgICAgICdnZXRfZXZlbnRfbG9vcF9wb2xpY3knLCAnc2V0X2V2ZW50X2xvb3BfcG9saWN5JywKKyAgICAgICAgICAgJ2dldF9ldmVudF9sb29wJywgJ3NldF9ldmVudF9sb29wJywgJ25ld19ldmVudF9sb29wJywKKyAgICAgICAgICAgJ2dldF9jaGlsZF93YXRjaGVyJywgJ3NldF9jaGlsZF93YXRjaGVyJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IHJlcHJsaWIKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdHJhY2ViYWNrCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgY29tcGF0CisKKworZGVmIF9nZXRfZnVuY3Rpb25fc291cmNlKGZ1bmMpOgorICAgIGlmIGNvbXBhdC5QWTM0OgorICAgICAgICBmdW5jID0gaW5zcGVjdC51bndyYXAoZnVuYykKKyAgICBlbGlmIGhhc2F0dHIoZnVuYywgJ19fd3JhcHBlZF9fJyk6CisgICAgICAgIGZ1bmMgPSBmdW5jLl9fd3JhcHBlZF9fCisgICAgaWYgaW5zcGVjdC5pc2Z1bmN0aW9uKGZ1bmMpOgorICAgICAgICBjb2RlID0gZnVuYy5fX2NvZGVfXworICAgICAgICByZXR1cm4gKGNvZGUuY29fZmlsZW5hbWUsIGNvZGUuY29fZmlyc3RsaW5lbm8pCisgICAgaWYgaXNpbnN0YW5jZShmdW5jLCBmdW5jdG9vbHMucGFydGlhbCk6CisgICAgICAgIHJldHVybiBfZ2V0X2Z1bmN0aW9uX3NvdXJjZShmdW5jLmZ1bmMpCisgICAgaWYgY29tcGF0LlBZMzQgYW5kIGlzaW5zdGFuY2UoZnVuYywgZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QpOgorICAgICAgICByZXR1cm4gX2dldF9mdW5jdGlvbl9zb3VyY2UoZnVuYy5mdW5jKQorICAgIHJldHVybiBOb25lCisKKworZGVmIF9mb3JtYXRfYXJncyhhcmdzKToKKyAgICAiIiJGb3JtYXQgZnVuY3Rpb24gYXJndW1lbnRzLgorCisgICAgU3BlY2lhbCBjYXNlIGZvciBhIHNpbmdsZSBwYXJhbWV0ZXI6ICgnaGVsbG8nLCkgaXMgZm9ybWF0dGVkIGFzICgnaGVsbG8nKS4KKyAgICAiIiIKKyAgICAjIHVzZSByZXBybGliIHRvIGxpbWl0IHRoZSBsZW5ndGggb2YgdGhlIG91dHB1dAorICAgIGFyZ3NfcmVwciA9IHJlcHJsaWIucmVwcihhcmdzKQorICAgIGlmIGxlbihhcmdzKSA9PSAxIGFuZCBhcmdzX3JlcHIuZW5kc3dpdGgoJywpJyk6CisgICAgICAgIGFyZ3NfcmVwciA9IGFyZ3NfcmVwcls6LTJdICsgJyknCisgICAgcmV0dXJuIGFyZ3NfcmVwcgorCisKK2RlZiBfZm9ybWF0X2NhbGxiYWNrKGZ1bmMsIGFyZ3MsIHN1ZmZpeD0nJyk6CisgICAgaWYgaXNpbnN0YW5jZShmdW5jLCBmdW5jdG9vbHMucGFydGlhbCk6CisgICAgICAgIGlmIGFyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdWZmaXggPSBfZm9ybWF0X2FyZ3MoYXJncykgKyBzdWZmaXgKKyAgICAgICAgcmV0dXJuIF9mb3JtYXRfY2FsbGJhY2soZnVuYy5mdW5jLCBmdW5jLmFyZ3MsIHN1ZmZpeCkKKworICAgIGlmIGhhc2F0dHIoZnVuYywgJ19fcXVhbG5hbWVfXycpOgorICAgICAgICBmdW5jX3JlcHIgPSBnZXRhdHRyKGZ1bmMsICdfX3F1YWxuYW1lX18nKQorICAgIGVsaWYgaGFzYXR0cihmdW5jLCAnX19uYW1lX18nKToKKyAgICAgICAgZnVuY19yZXByID0gZ2V0YXR0cihmdW5jLCAnX19uYW1lX18nKQorICAgIGVsc2U6CisgICAgICAgIGZ1bmNfcmVwciA9IHJlcHIoZnVuYykKKworICAgIGlmIGFyZ3MgaXMgbm90IE5vbmU6CisgICAgICAgIGZ1bmNfcmVwciArPSBfZm9ybWF0X2FyZ3MoYXJncykKKyAgICBpZiBzdWZmaXg6CisgICAgICAgIGZ1bmNfcmVwciArPSBzdWZmaXgKKyAgICByZXR1cm4gZnVuY19yZXByCisKK2RlZiBfZm9ybWF0X2NhbGxiYWNrX3NvdXJjZShmdW5jLCBhcmdzKToKKyAgICBmdW5jX3JlcHIgPSBfZm9ybWF0X2NhbGxiYWNrKGZ1bmMsIGFyZ3MpCisgICAgc291cmNlID0gX2dldF9mdW5jdGlvbl9zb3VyY2UoZnVuYykKKyAgICBpZiBzb3VyY2U6CisgICAgICAgIGZ1bmNfcmVwciArPSAnIGF0ICVzOiVzJyAlIHNvdXJjZQorICAgIHJldHVybiBmdW5jX3JlcHIKKworCitjbGFzcyBIYW5kbGU6CisgICAgIiIiT2JqZWN0IHJldHVybmVkIGJ5IGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBtZXRob2RzLiIiIgorCisgICAgX19zbG90c19fID0gKCdfY2FsbGJhY2snLCAnX2FyZ3MnLCAnX2NhbmNlbGxlZCcsICdfbG9vcCcsCisgICAgICAgICAgICAgICAgICdfc291cmNlX3RyYWNlYmFjaycsICdfcmVwcicsICdfX3dlYWtyZWZfXycpCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2FsbGJhY2ssIGFyZ3MsIGxvb3ApOgorICAgICAgICBhc3NlcnQgbm90IGlzaW5zdGFuY2UoY2FsbGJhY2ssIEhhbmRsZSksICdBIEhhbmRsZSBpcyBub3QgYSBjYWxsYmFjaycKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fY2FsbGJhY2sgPSBjYWxsYmFjaworICAgICAgICBzZWxmLl9hcmdzID0gYXJncworICAgICAgICBzZWxmLl9jYW5jZWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9yZXByID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgc2VsZi5fc291cmNlX3RyYWNlYmFjayA9IHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKHN5cy5fZ2V0ZnJhbWUoMSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrID0gTm9uZQorCisgICAgZGVmIF9yZXByX2luZm8oc2VsZik6CisgICAgICAgIGluZm8gPSBbc2VsZi5fX2NsYXNzX18uX19uYW1lX19dCisgICAgICAgIGlmIHNlbGYuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjYW5jZWxsZWQnKQorICAgICAgICBpZiBzZWxmLl9jYWxsYmFjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKF9mb3JtYXRfY2FsbGJhY2tfc291cmNlKHNlbGYuX2NhbGxiYWNrLCBzZWxmLl9hcmdzKSkKKyAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGZyYW1lID0gc2VsZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjcmVhdGVkIGF0ICVzOiVzJyAlIChmcmFtZVswXSwgZnJhbWVbMV0pKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9yZXByIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlcHIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlcHJfaW5mbygpCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHNlbGYuX2NhbmNlbGxlZCA9IFRydWUKKyAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgIyBLZWVwIGEgcmVwcmVzZW50YXRpb24gaW4gZGVidWcgbW9kZSB0byBrZWVwIGNhbGxiYWNrIGFuZAorICAgICAgICAgICAgICAgICMgcGFyYW1ldGVycy4gRm9yIGV4YW1wbGUsIHRvIGxvZyB0aGUgd2FybmluZworICAgICAgICAgICAgICAgICMgIkV4ZWN1dGluZyA8SGFuZGxlLi4uPiB0b29rIDIuNSBzZWNvbmQiCisgICAgICAgICAgICAgICAgc2VsZi5fcmVwciA9IHJlcHIoc2VsZikKKyAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fYXJncyA9IE5vbmUKKworICAgIGRlZiBfcnVuKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jYWxsYmFjaygqc2VsZi5fYXJncykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBjYiA9IF9mb3JtYXRfY2FsbGJhY2tfc291cmNlKHNlbGYuX2NhbGxiYWNrLCBzZWxmLl9hcmdzKQorICAgICAgICAgICAgbXNnID0gJ0V4Y2VwdGlvbiBpbiBjYWxsYmFjayB7fScuZm9ybWF0KGNiKQorICAgICAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICAgICAnbWVzc2FnZSc6IG1zZywKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICdoYW5kbGUnOiBzZWxmLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICBjb250ZXh0Wydzb3VyY2VfdHJhY2ViYWNrJ10gPSBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dCkKKyAgICAgICAgc2VsZiA9IE5vbmUgICMgTmVlZGVkIHRvIGJyZWFrIGN5Y2xlcyB3aGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMuCisKKworY2xhc3MgVGltZXJIYW5kbGUoSGFuZGxlKToKKyAgICAiIiJPYmplY3QgcmV0dXJuZWQgYnkgdGltZWQgY2FsbGJhY2sgcmVnaXN0cmF0aW9uIG1ldGhvZHMuIiIiCisKKyAgICBfX3Nsb3RzX18gPSBbJ19zY2hlZHVsZWQnLCAnX3doZW4nXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdoZW4sIGNhbGxiYWNrLCBhcmdzLCBsb29wKToKKyAgICAgICAgYXNzZXJ0IHdoZW4gaXMgbm90IE5vbmUKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhjYWxsYmFjaywgYXJncywgbG9vcCkKKyAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGRlbCBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICBzZWxmLl93aGVuID0gd2hlbgorICAgICAgICBzZWxmLl9zY2hlZHVsZWQgPSBGYWxzZQorCisgICAgZGVmIF9yZXByX2luZm8oc2VsZik6CisgICAgICAgIGluZm8gPSBzdXBlcigpLl9yZXByX2luZm8oKQorICAgICAgICBwb3MgPSAyIGlmIHNlbGYuX2NhbmNlbGxlZCBlbHNlIDEKKyAgICAgICAgaW5mby5pbnNlcnQocG9zLCAnd2hlbj0lcycgJSBzZWxmLl93aGVuKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl93aGVuKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLl93aGVuIDwgb3RoZXIuX3doZW4KKworICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBzZWxmLl93aGVuIDwgb3RoZXIuX3doZW46CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICByZXR1cm4gc2VsZi5fX2VxX18ob3RoZXIpCisKKyAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3doZW4gPiBvdGhlci5fd2hlbgorCisgICAgZGVmIF9fZ2VfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGlmIHNlbGYuX3doZW4gPiBvdGhlci5fd2hlbjoKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIHJldHVybiBzZWxmLl9fZXFfXyhvdGhlcikKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUaW1lckhhbmRsZSk6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYuX3doZW4gPT0gb3RoZXIuX3doZW4gYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrID09IG90aGVyLl9jYWxsYmFjayBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9PSBvdGhlci5fYXJncyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FuY2VsbGVkID09IG90aGVyLl9jYW5jZWxsZWQpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGVxdWFsID0gc2VsZi5fX2VxX18ob3RoZXIpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZCBpZiBlcXVhbCBpcyBOb3RJbXBsZW1lbnRlZCBlbHNlIG5vdCBlcXVhbAorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuX3RpbWVyX2hhbmRsZV9jYW5jZWxsZWQoc2VsZikKKyAgICAgICAgc3VwZXIoKS5jYW5jZWwoKQorCisKK2NsYXNzIEFic3RyYWN0U2VydmVyOgorICAgICIiIkFic3RyYWN0IHNlcnZlciByZXR1cm5lZCBieSBjcmVhdGVfc2VydmVyKCkuIiIiCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIlN0b3Agc2VydmluZy4gIFRoaXMgbGVhdmVzIGV4aXN0aW5nIGNvbm5lY3Rpb25zIG9wZW4uIiIiCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorCisgICAgZGVmIHdhaXRfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJDb3JvdXRpbmUgdG8gd2FpdCB1bnRpbCBzZXJ2aWNlIGlzIGNsb3NlZC4iIiIKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKworY2xhc3MgQWJzdHJhY3RFdmVudExvb3A6CisgICAgIiIiQWJzdHJhY3QgZXZlbnQgbG9vcC4iIiIKKworICAgICMgUnVubmluZyBhbmQgc3RvcHBpbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICBkZWYgcnVuX2ZvcmV2ZXIoc2VsZik6CisgICAgICAgICIiIlJ1biB0aGUgZXZlbnQgbG9vcCB1bnRpbCBzdG9wKCkgaXMgY2FsbGVkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcnVuX3VudGlsX2NvbXBsZXRlKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgICIiIlJ1biB0aGUgZXZlbnQgbG9vcCB1bnRpbCBhIEZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIFJldHVybiB0aGUgRnV0dXJlJ3MgcmVzdWx0LCBvciByYWlzZSBpdHMgZXhjZXB0aW9uLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICIiIlN0b3AgdGhlIGV2ZW50IGxvb3AgYXMgc29vbiBhcyByZWFzb25hYmxlLgorCisgICAgICAgIEV4YWN0bHkgaG93IHNvb24gdGhhdCBpcyBtYXkgZGVwZW5kIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0CisgICAgICAgIG5vIG1vcmUgSS9PIGNhbGxiYWNrcyBzaG91bGQgYmUgc2NoZWR1bGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGlzX3J1bm5pbmcoc2VsZik6CisgICAgICAgICIiIlJldHVybiB3aGV0aGVyIHRoZSBldmVudCBsb29wIGlzIGN1cnJlbnRseSBydW5uaW5nLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgaXNfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgdGhlIGV2ZW50IGxvb3Agd2FzIGNsb3NlZC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJDbG9zZSB0aGUgbG9vcC4KKworICAgICAgICBUaGUgbG9vcCBzaG91bGQgbm90IGJlIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBpcyBpZGVtcG90ZW50IGFuZCBpcnJldmVyc2libGUuCisKKyAgICAgICAgTm8gb3RoZXIgbWV0aG9kcyBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoaXMgb25lLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBNZXRob2RzIHNjaGVkdWxpbmcgY2FsbGJhY2tzLiAgQWxsIHRoZXNlIHJldHVybiBIYW5kbGVzLgorCisgICAgZGVmIF90aW1lcl9oYW5kbGVfY2FuY2VsbGVkKHNlbGYsIGhhbmRsZSk6CisgICAgICAgICIiIk5vdGlmaWNhdGlvbiB0aGF0IGEgVGltZXJIYW5kbGUgaGFzIGJlZW4gY2FuY2VsbGVkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2FsbF9zb29uKHNlbGYsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJldHVybiBzZWxmLmNhbGxfbGF0ZXIoMCwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIGNhbGxfbGF0ZXIoc2VsZiwgZGVsYXksIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYWxsX2F0KHNlbGYsIHdoZW4sIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB0aW1lKHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE1ldGhvZCBzY2hlZHVsaW5nIGEgY29yb3V0aW5lIG9iamVjdDogY3JlYXRlIGEgdGFzay4KKworICAgIGRlZiBjcmVhdGVfdGFzayhzZWxmLCBjb3JvKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBNZXRob2RzIGZvciBpbnRlcmFjdGluZyB3aXRoIHRocmVhZHMuCisKKyAgICBkZWYgY2FsbF9zb29uX3RocmVhZHNhZmUoc2VsZiwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJ1bl9pbl9leGVjdXRvcihzZWxmLCBleGVjdXRvciwgZnVuYywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZiwgZXhlY3V0b3IpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIE5ldHdvcmsgSS9PIG1ldGhvZHMgcmV0dXJuaW5nIEZ1dHVyZXMuCisKKyAgICBkZWYgZ2V0YWRkcmluZm8oc2VsZiwgaG9zdCwgcG9ydCwgKiwgZmFtaWx5PTAsIHR5cGU9MCwgcHJvdG89MCwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRuYW1laW5mbyhzZWxmLCBzb2NrYWRkciwgZmxhZ3M9MCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsIGZhbWlseT0wLCBwcm90bz0wLCBmbGFncz0wLCBzb2NrPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY3JlYXRlX3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBob3N0PU5vbmUsIHBvcnQ9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQywgZmxhZ3M9c29ja2V0LkFJX1BBU1NJVkUsCisgICAgICAgICAgICAgICAgICAgICAgc29jaz1Ob25lLCBiYWNrbG9nPTEwMCwgc3NsPU5vbmUsIHJldXNlX2FkZHJlc3M9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICByZXVzZV9wb3J0PU5vbmUpOgorICAgICAgICAiIiJBIGNvcm91dGluZSB3aGljaCBjcmVhdGVzIGEgVENQIHNlcnZlciBib3VuZCB0byBob3N0IGFuZCBwb3J0LgorCisgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBTZXJ2ZXIgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AKKyAgICAgICAgdGhlIHNlcnZpY2UuCisKKyAgICAgICAgSWYgaG9zdCBpcyBhbiBlbXB0eSBzdHJpbmcgb3IgTm9uZSBhbGwgaW50ZXJmYWNlcyBhcmUgYXNzdW1lZAorICAgICAgICBhbmQgYSBsaXN0IG9mIG11bHRpcGxlIHNvY2tldHMgd2lsbCBiZSByZXR1cm5lZCAobW9zdCBsaWtlbHkKKyAgICAgICAgb25lIGZvciBJUHY0IGFuZCBhbm90aGVyIG9uZSBmb3IgSVB2NikuIFRoZSBob3N0IHBhcmFtZXRlciBjYW4gYWxzbyBiZSBhCisgICAgICAgIHNlcXVlbmNlIChlLmcuIGxpc3QpIG9mIGhvc3RzIHRvIGJpbmQgdG8uCisKKyAgICAgICAgZmFtaWx5IGNhbiBiZSBzZXQgdG8gZWl0aGVyIEFGX0lORVQgb3IgQUZfSU5FVDYgdG8gZm9yY2UgdGhlCisgICAgICAgIHNvY2tldCB0byB1c2UgSVB2NCBvciBJUHY2LiBJZiBub3Qgc2V0IGl0IHdpbGwgYmUgZGV0ZXJtaW5lZAorICAgICAgICBmcm9tIGhvc3QgKGRlZmF1bHRzIHRvIEFGX1VOU1BFQykuCisKKyAgICAgICAgZmxhZ3MgaXMgYSBiaXRtYXNrIGZvciBnZXRhZGRyaW5mbygpLgorCisgICAgICAgIHNvY2sgY2FuIG9wdGlvbmFsbHkgYmUgc3BlY2lmaWVkIGluIG9yZGVyIHRvIHVzZSBhIHByZWV4aXN0aW5nCisgICAgICAgIHNvY2tldCBvYmplY3QuCisKKyAgICAgICAgYmFja2xvZyBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcXVldWVkIGNvbm5lY3Rpb25zIHBhc3NlZCB0bworICAgICAgICBsaXN0ZW4oKSAoZGVmYXVsdHMgdG8gMTAwKS4KKworICAgICAgICBzc2wgY2FuIGJlIHNldCB0byBhbiBTU0xDb250ZXh0IHRvIGVuYWJsZSBTU0wgb3ZlciB0aGUKKyAgICAgICAgYWNjZXB0ZWQgY29ubmVjdGlvbnMuCisKKyAgICAgICAgcmV1c2VfYWRkcmVzcyB0ZWxscyB0aGUga2VybmVsIHRvIHJldXNlIGEgbG9jYWwgc29ja2V0IGluCisgICAgICAgIFRJTUVfV0FJVCBzdGF0ZSwgd2l0aG91dCB3YWl0aW5nIGZvciBpdHMgbmF0dXJhbCB0aW1lb3V0IHRvCisgICAgICAgIGV4cGlyZS4gSWYgbm90IHNwZWNpZmllZCB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgc2V0IHRvIFRydWUgb24KKyAgICAgICAgVU5JWC4KKworICAgICAgICByZXVzZV9wb3J0IHRlbGxzIHRoZSBrZXJuZWwgdG8gYWxsb3cgdGhpcyBlbmRwb2ludCB0byBiZSBib3VuZCB0bworICAgICAgICB0aGUgc2FtZSBwb3J0IGFzIG90aGVyIGV4aXN0aW5nIGVuZHBvaW50cyBhcmUgYm91bmQgdG8sIHNvIGxvbmcgYXMKKyAgICAgICAgdGhleSBhbGwgc2V0IHRoaXMgZmxhZyB3aGVuIGJlaW5nIGNyZWF0ZWQuIFRoaXMgb3B0aW9uIGlzIG5vdAorICAgICAgICBzdXBwb3J0ZWQgb24gV2luZG93cy4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfdW5peF9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBhdGgsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjcmVhdGVfdW5peF9zZXJ2ZXIoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGF0aCwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2s9Tm9uZSwgYmFja2xvZz0xMDAsIHNzbD1Ob25lKToKKyAgICAgICAgIiIiQSBjb3JvdXRpbmUgd2hpY2ggY3JlYXRlcyBhIFVOSVggRG9tYWluIFNvY2tldCBzZXJ2ZXIuCisKKyAgICAgICAgVGhlIHJldHVybiB2YWx1ZSBpcyBhIFNlcnZlciBvYmplY3QsIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AKKyAgICAgICAgdGhlIHNlcnZpY2UuCisKKyAgICAgICAgcGF0aCBpcyBhIHN0ciwgcmVwcmVzZW50aW5nIGEgZmlsZSBzeXN0c2VtIHBhdGggdG8gYmluZCB0aGUKKyAgICAgICAgc2VydmVyIHNvY2tldCB0by4KKworICAgICAgICBzb2NrIGNhbiBvcHRpb25hbGx5IGJlIHNwZWNpZmllZCBpbiBvcmRlciB0byB1c2UgYSBwcmVleGlzdGluZworICAgICAgICBzb2NrZXQgb2JqZWN0LgorCisgICAgICAgIGJhY2tsb2cgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHF1ZXVlZCBjb25uZWN0aW9ucyBwYXNzZWQgdG8KKyAgICAgICAgbGlzdGVuKCkgKGRlZmF1bHRzIHRvIDEwMCkuCisKKyAgICAgICAgc3NsIGNhbiBiZSBzZXQgdG8gYW4gU1NMQ29udGV4dCB0byBlbmFibGUgU1NMIG92ZXIgdGhlCisgICAgICAgIGFjY2VwdGVkIGNvbm5lY3Rpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkcj1Ob25lLCByZW1vdGVfYWRkcj1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PTAsIHByb3RvPTAsIGZsYWdzPTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXVzZV9hZGRyZXNzPU5vbmUsIHJldXNlX3BvcnQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2Jyb2FkY2FzdD1Ob25lLCBzb2NrPU5vbmUpOgorICAgICAgICAiIiJBIGNvcm91dGluZSB3aGljaCBjcmVhdGVzIGEgZGF0YWdyYW0gZW5kcG9pbnQuCisKKyAgICAgICAgVGhpcyBtZXRob2Qgd2lsbCB0cnkgdG8gZXN0YWJsaXNoIHRoZSBlbmRwb2ludCBpbiB0aGUgYmFja2dyb3VuZC4KKyAgICAgICAgV2hlbiBzdWNjZXNzZnVsLCB0aGUgY29yb3V0aW5lIHJldHVybnMgYSAodHJhbnNwb3J0LCBwcm90b2NvbCkgcGFpci4KKworICAgICAgICBwcm90b2NvbF9mYWN0b3J5IG11c3QgYmUgYSBjYWxsYWJsZSByZXR1cm5pbmcgYSBwcm90b2NvbCBpbnN0YW5jZS4KKworICAgICAgICBzb2NrZXQgZmFtaWx5IEFGX0lORVQgb3Igc29ja2V0LkFGX0lORVQ2IGRlcGVuZGluZyBvbiBob3N0IChvcgorICAgICAgICBmYW1pbHkgaWYgc3BlY2lmaWVkKSwgc29ja2V0IHR5cGUgU09DS19ER1JBTS4KKworICAgICAgICByZXVzZV9hZGRyZXNzIHRlbGxzIHRoZSBrZXJuZWwgdG8gcmV1c2UgYSBsb2NhbCBzb2NrZXQgaW4KKyAgICAgICAgVElNRV9XQUlUIHN0YXRlLCB3aXRob3V0IHdhaXRpbmcgZm9yIGl0cyBuYXR1cmFsIHRpbWVvdXQgdG8KKyAgICAgICAgZXhwaXJlLiBJZiBub3Qgc3BlY2lmaWVkIGl0IHdpbGwgYXV0b21hdGljYWxseSBiZSBzZXQgdG8gVHJ1ZSBvbgorICAgICAgICBVTklYLgorCisgICAgICAgIHJldXNlX3BvcnQgdGVsbHMgdGhlIGtlcm5lbCB0byBhbGxvdyB0aGlzIGVuZHBvaW50IHRvIGJlIGJvdW5kIHRvCisgICAgICAgIHRoZSBzYW1lIHBvcnQgYXMgb3RoZXIgZXhpc3RpbmcgZW5kcG9pbnRzIGFyZSBib3VuZCB0bywgc28gbG9uZyBhcworICAgICAgICB0aGV5IGFsbCBzZXQgdGhpcyBmbGFnIHdoZW4gYmVpbmcgY3JlYXRlZC4gVGhpcyBvcHRpb24gaXMgbm90CisgICAgICAgIHN1cHBvcnRlZCBvbiBXaW5kb3dzIGFuZCBzb21lIFVOSVgncy4gSWYgdGhlCisgICAgICAgIDpweTpkYXRhOmB+c29ja2V0LlNPX1JFVVNFUE9SVGAgY29uc3RhbnQgaXMgbm90IGRlZmluZWQgdGhlbiB0aGlzCisgICAgICAgIGNhcGFiaWxpdHkgaXMgdW5zdXBwb3J0ZWQuCisKKyAgICAgICAgYWxsb3dfYnJvYWRjYXN0IHRlbGxzIHRoZSBrZXJuZWwgdG8gYWxsb3cgdGhpcyBlbmRwb2ludCB0byBzZW5kCisgICAgICAgIG1lc3NhZ2VzIHRvIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4KKworICAgICAgICBzb2NrIGNhbiBvcHRpb25hbGx5IGJlIHNwZWNpZmllZCBpbiBvcmRlciB0byB1c2UgYSBwcmVleGlzdGluZworICAgICAgICBzb2NrZXQgb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBQaXBlcyBhbmQgc3VicHJvY2Vzc2VzLgorCisgICAgZGVmIGNvbm5lY3RfcmVhZF9waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBpcGUpOgorICAgICAgICAiIiJSZWdpc3RlciByZWFkIHBpcGUgaW4gZXZlbnQgbG9vcC4gU2V0IHRoZSBwaXBlIHRvIG5vbi1ibG9ja2luZyBtb2RlLgorCisgICAgICAgIHByb3RvY29sX2ZhY3Rvcnkgc2hvdWxkIGluc3RhbnRpYXRlIG9iamVjdCB3aXRoIFByb3RvY29sIGludGVyZmFjZS4KKyAgICAgICAgcGlwZSBpcyBhIGZpbGUtbGlrZSBvYmplY3QuCisgICAgICAgIFJldHVybiBwYWlyICh0cmFuc3BvcnQsIHByb3RvY29sKSwgd2hlcmUgdHJhbnNwb3J0IHN1cHBvcnRzIHRoZQorICAgICAgICBSZWFkVHJhbnNwb3J0IGludGVyZmFjZS4iIiIKKyAgICAgICAgIyBUaGUgcmVhc29uIHRvIGFjY2VwdCBmaWxlLWxpa2Ugb2JqZWN0IGluc3RlYWQgb2YganVzdCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgIyBpczogd2UgbmVlZCB0byBvd24gcGlwZSBhbmQgY2xvc2UgaXQgYXQgdHJhbnNwb3J0IGZpbmlzaGluZworICAgICAgICAjIENhbiBnb3QgY29tcGxpY2F0ZWQgZXJyb3JzIGlmIHBhc3MgZi5maWxlbm8oKSwKKyAgICAgICAgIyBjbG9zZSBmZCBpbiBwaXBlIHRyYW5zcG9ydCB0aGVuIGNsb3NlIGYgYW5kIHZpc2UgdmVyc2EuCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjb25uZWN0X3dyaXRlX3BpcGUoc2VsZiwgcHJvdG9jb2xfZmFjdG9yeSwgcGlwZSk6CisgICAgICAgICIiIlJlZ2lzdGVyIHdyaXRlIHBpcGUgaW4gZXZlbnQgbG9vcC4KKworICAgICAgICBwcm90b2NvbF9mYWN0b3J5IHNob3VsZCBpbnN0YW50aWF0ZSBvYmplY3Qgd2l0aCBCYXNlUHJvdG9jb2wgaW50ZXJmYWNlLgorICAgICAgICBQaXBlIGlzIGZpbGUtbGlrZSBvYmplY3QgYWxyZWFkeSBzd2l0Y2hlZCB0byBub25ibG9ja2luZy4KKyAgICAgICAgUmV0dXJuIHBhaXIgKHRyYW5zcG9ydCwgcHJvdG9jb2wpLCB3aGVyZSB0cmFuc3BvcnQgc3VwcG9ydAorICAgICAgICBXcml0ZVRyYW5zcG9ydCBpbnRlcmZhY2UuIiIiCisgICAgICAgICMgVGhlIHJlYXNvbiB0byBhY2NlcHQgZmlsZS1saWtlIG9iamVjdCBpbnN0ZWFkIG9mIGp1c3QgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICMgaXM6IHdlIG5lZWQgdG8gb3duIHBpcGUgYW5kIGNsb3NlIGl0IGF0IHRyYW5zcG9ydCBmaW5pc2hpbmcKKyAgICAgICAgIyBDYW4gZ290IGNvbXBsaWNhdGVkIGVycm9ycyBpZiBwYXNzIGYuZmlsZW5vKCksCisgICAgICAgICMgY2xvc2UgZmQgaW4gcGlwZSB0cmFuc3BvcnQgdGhlbiBjbG9zZSBmIGFuZCB2aXNlIHZlcnNhLgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc3VicHJvY2Vzc19zaGVsbChzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBjbWQsICosIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHN1YnByb2Nlc3NfZXhlYyhzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCAqYXJncywgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgIyBSZWFkeS1iYXNlZCBjYWxsYmFjayByZWdpc3RyYXRpb24gbWV0aG9kcy4KKyAgICAjIFRoZSBhZGRfKigpIG1ldGhvZHMgcmV0dXJuIE5vbmUuCisgICAgIyBUaGUgcmVtb3ZlXyooKSBtZXRob2RzIHJldHVybiBUcnVlIGlmIHNvbWV0aGluZyB3YXMgcmVtb3ZlZCwKKyAgICAjIEZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGRlbGV0ZS4KKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBhZGRfd3JpdGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgQ29tcGxldGlvbiBiYXNlZCBJL08gbWV0aG9kcyByZXR1cm5pbmcgRnV0dXJlcy4KKworICAgIGRlZiBzb2NrX3JlY3Yoc2VsZiwgc29jaywgbmJ5dGVzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfc2VuZGFsbChzZWxmLCBzb2NrLCBkYXRhKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfY29ubmVjdChzZWxmLCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIFNpZ25hbCBoYW5kbGluZy4KKworICAgIGRlZiBhZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgcmVtb3ZlX3NpZ25hbF9oYW5kbGVyKHNlbGYsIHNpZyk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgVGFzayBmYWN0b3J5LgorCisgICAgZGVmIHNldF90YXNrX2ZhY3Rvcnkoc2VsZiwgZmFjdG9yeSk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRfdGFza19mYWN0b3J5KHNlbGYpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIEVycm9yIGhhbmRsZXJzLgorCisgICAgZGVmIHNldF9leGNlcHRpb25faGFuZGxlcihzZWxmLCBoYW5kbGVyKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGRlZmF1bHRfZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHNlbGYsIGNvbnRleHQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICAjIERlYnVnIGZsYWcgbWFuYWdlbWVudC4KKworICAgIGRlZiBnZXRfZGVidWcoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZXRfZGVidWcoc2VsZiwgZW5hYmxlZCk6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBBYnN0cmFjdEV2ZW50TG9vcFBvbGljeToKKyAgICAiIiJBYnN0cmFjdCBwb2xpY3kgZm9yIGFjY2Vzc2luZyB0aGUgZXZlbnQgbG9vcC4iIiIKKworICAgIGRlZiBnZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBldmVudCBsb29wIGZvciB0aGUgY3VycmVudCBjb250ZXh0LgorCisgICAgICAgIFJldHVybnMgYW4gZXZlbnQgbG9vcCBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBCYXNlRXZlbnRMb29wIGludGVyZmFjZSwKKyAgICAgICAgb3IgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpbiBjYXNlIG5vIGV2ZW50IGxvb3AgaGFzIGJlZW4gc2V0IGZvciB0aGUKKyAgICAgICAgY3VycmVudCBjb250ZXh0IGFuZCB0aGUgY3VycmVudCBwb2xpY3kgZG9lcyBub3Qgc3BlY2lmeSB0byBjcmVhdGUgb25lLgorCisgICAgICAgIEl0IHNob3VsZCBuZXZlciByZXR1cm4gTm9uZS4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJTZXQgdGhlIGV2ZW50IGxvb3AgZm9yIHRoZSBjdXJyZW50IGNvbnRleHQgdG8gbG9vcC4iIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIG5ld19ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBldmVudCBsb29wIG9iamVjdCBhY2NvcmRpbmcgdG8gdGhpcworICAgICAgICBwb2xpY3kncyBydWxlcy4gSWYgdGhlcmUncyBuZWVkIHRvIHNldCB0aGlzIGxvb3AgYXMgdGhlIGV2ZW50IGxvb3AgZm9yCisgICAgICAgIHRoZSBjdXJyZW50IGNvbnRleHQsIHNldF9ldmVudF9sb29wIG11c3QgYmUgY2FsbGVkIGV4cGxpY2l0bHkuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgICMgQ2hpbGQgcHJvY2Vzc2VzIGhhbmRsaW5nIChVbml4IG9ubHkpLgorCisgICAgZGVmIGdldF9jaGlsZF93YXRjaGVyKHNlbGYpOgorICAgICAgICAiR2V0IHRoZSB3YXRjaGVyIGZvciBjaGlsZCBwcm9jZXNzZXMuIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgc2V0X2NoaWxkX3dhdGNoZXIoc2VsZiwgd2F0Y2hlcik6CisgICAgICAgICIiIlNldCB0aGUgd2F0Y2hlciBmb3IgY2hpbGQgcHJvY2Vzc2VzLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3koQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpOgorICAgICIiIkRlZmF1bHQgcG9saWN5IGltcGxlbWVudGF0aW9uIGZvciBhY2Nlc3NpbmcgdGhlIGV2ZW50IGxvb3AuCisKKyAgICBJbiB0aGlzIHBvbGljeSwgZWFjaCB0aHJlYWQgaGFzIGl0cyBvd24gZXZlbnQgbG9vcC4gIEhvd2V2ZXIsIHdlCisgICAgb25seSBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhbiBldmVudCBsb29wIGJ5IGRlZmF1bHQgZm9yIHRoZSBtYWluCisgICAgdGhyZWFkOyBvdGhlciB0aHJlYWRzIGJ5IGRlZmF1bHQgaGF2ZSBubyBldmVudCBsb29wLgorCisgICAgT3RoZXIgcG9saWNpZXMgbWF5IGhhdmUgZGlmZmVyZW50IHJ1bGVzIChlLmcuIGEgc2luZ2xlIGdsb2JhbAorICAgIGV2ZW50IGxvb3AsIG9yIGF1dG9tYXRpY2FsbHkgY3JlYXRpbmcgYW4gZXZlbnQgbG9vcCBwZXIgdGhyZWFkLCBvcgorICAgIHVzaW5nIHNvbWUgb3RoZXIgbm90aW9uIG9mIGNvbnRleHQgdG8gd2hpY2ggYW4gZXZlbnQgbG9vcCBpcworICAgIGFzc29jaWF0ZWQpLgorICAgICIiIgorCisgICAgX2xvb3BfZmFjdG9yeSA9IE5vbmUKKworICAgIGNsYXNzIF9Mb2NhbCh0aHJlYWRpbmcubG9jYWwpOgorICAgICAgICBfbG9vcCA9IE5vbmUKKyAgICAgICAgX3NldF9jYWxsZWQgPSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NhbCA9IHNlbGYuX0xvY2FsKCkKKworICAgIGRlZiBnZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSBldmVudCBsb29wLgorCisgICAgICAgIFRoaXMgbWF5IGJlIE5vbmUgb3IgYW4gaW5zdGFuY2Ugb2YgRXZlbnRMb29wLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgKHNlbGYuX2xvY2FsLl9sb29wIGlzIE5vbmUgYW5kCisgICAgICAgICAgICBub3Qgc2VsZi5fbG9jYWwuX3NldF9jYWxsZWQgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLCB0aHJlYWRpbmcuX01haW5UaHJlYWQpKToKKyAgICAgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5uZXdfZXZlbnRfbG9vcCgpKQorICAgICAgICBpZiBzZWxmLl9sb2NhbC5fbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUaGVyZSBpcyBubyBjdXJyZW50IGV2ZW50IGxvb3AgaW4gdGhyZWFkICVyLicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUpCisgICAgICAgIHJldHVybiBzZWxmLl9sb2NhbC5fbG9vcAorCisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICAiIiJTZXQgdGhlIGV2ZW50IGxvb3AuIiIiCisgICAgICAgIHNlbGYuX2xvY2FsLl9zZXRfY2FsbGVkID0gVHJ1ZQorICAgICAgICBhc3NlcnQgbG9vcCBpcyBOb25lIG9yIGlzaW5zdGFuY2UobG9vcCwgQWJzdHJhY3RFdmVudExvb3ApCisgICAgICAgIHNlbGYuX2xvY2FsLl9sb29wID0gbG9vcAorCisgICAgZGVmIG5ld19ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAiIiJDcmVhdGUgYSBuZXcgZXZlbnQgbG9vcC4KKworICAgICAgICBZb3UgbXVzdCBjYWxsIHNldF9ldmVudF9sb29wKCkgdG8gbWFrZSB0aGlzIHRoZSBjdXJyZW50IGV2ZW50CisgICAgICAgIGxvb3AuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbG9vcF9mYWN0b3J5KCkKKworCisjIEV2ZW50IGxvb3AgcG9saWN5LiAgVGhlIHBvbGljeSBpdHNlbGYgaXMgYWx3YXlzIGdsb2JhbCwgZXZlbiBpZiB0aGUKKyMgcG9saWN5J3MgcnVsZXMgc2F5IHRoYXQgdGhlcmUgaXMgYW4gZXZlbnQgbG9vcCBwZXIgdGhyZWFkIChvciBvdGhlcgorIyBub3Rpb24gb2YgY29udGV4dCkuICBUaGUgZGVmYXVsdCBwb2xpY3kgaXMgaW5zdGFsbGVkIGJ5IHRoZSBmaXJzdAorIyBjYWxsIHRvIGdldF9ldmVudF9sb29wX3BvbGljeSgpLgorX2V2ZW50X2xvb3BfcG9saWN5ID0gTm9uZQorCisjIExvY2sgZm9yIHByb3RlY3RpbmcgdGhlIG9uLXRoZS1mbHkgY3JlYXRpb24gb2YgdGhlIGV2ZW50IGxvb3AgcG9saWN5LgorX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisKKworZGVmIF9pbml0X2V2ZW50X2xvb3BfcG9saWN5KCk6CisgICAgZ2xvYmFsIF9ldmVudF9sb29wX3BvbGljeQorICAgIHdpdGggX2xvY2s6CisgICAgICAgIGlmIF9ldmVudF9sb29wX3BvbGljeSBpcyBOb25lOiAgIyBwcmFnbWE6IG5vIGJyYW5jaAorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCBEZWZhdWx0RXZlbnRMb29wUG9saWN5CisgICAgICAgICAgICBfZXZlbnRfbG9vcF9wb2xpY3kgPSBEZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKworCitkZWYgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCk6CisgICAgIiIiR2V0IHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgcG9saWN5LiIiIgorICAgIGlmIF9ldmVudF9sb29wX3BvbGljeSBpcyBOb25lOgorICAgICAgICBfaW5pdF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgcmV0dXJuIF9ldmVudF9sb29wX3BvbGljeQorCisKK2RlZiBzZXRfZXZlbnRfbG9vcF9wb2xpY3kocG9saWN5KToKKyAgICAiIiJTZXQgdGhlIGN1cnJlbnQgZXZlbnQgbG9vcCBwb2xpY3kuCisKKyAgICBJZiBwb2xpY3kgaXMgTm9uZSwgdGhlIGRlZmF1bHQgcG9saWN5IGlzIHJlc3RvcmVkLiIiIgorICAgIGdsb2JhbCBfZXZlbnRfbG9vcF9wb2xpY3kKKyAgICBhc3NlcnQgcG9saWN5IGlzIE5vbmUgb3IgaXNpbnN0YW5jZShwb2xpY3ksIEFic3RyYWN0RXZlbnRMb29wUG9saWN5KQorICAgIF9ldmVudF9sb29wX3BvbGljeSA9IHBvbGljeQorCisKK2RlZiBnZXRfZXZlbnRfbG9vcCgpOgorICAgICIiIkVxdWl2YWxlbnQgdG8gY2FsbGluZyBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5nZXRfZXZlbnRfbG9vcCgpLiIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5nZXRfZXZlbnRfbG9vcCgpCisKKworZGVmIHNldF9ldmVudF9sb29wKGxvb3ApOgorICAgICIiIkVxdWl2YWxlbnQgdG8gY2FsbGluZyBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfZXZlbnRfbG9vcChsb29wKS4iIiIKKyAgICBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5zZXRfZXZlbnRfbG9vcChsb29wKQorCisKK2RlZiBuZXdfZXZlbnRfbG9vcCgpOgorICAgICIiIkVxdWl2YWxlbnQgdG8gY2FsbGluZyBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5uZXdfZXZlbnRfbG9vcCgpLiIiIgorICAgIHJldHVybiBnZXRfZXZlbnRfbG9vcF9wb2xpY3koKS5uZXdfZXZlbnRfbG9vcCgpCisKKworZGVmIGdldF9jaGlsZF93YXRjaGVyKCk6CisgICAgIiIiRXF1aXZhbGVudCB0byBjYWxsaW5nIGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9jaGlsZF93YXRjaGVyKCkuIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLmdldF9jaGlsZF93YXRjaGVyKCkKKworCitkZWYgc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcik6CisgICAgIiIiRXF1aXZhbGVudCB0byBjYWxsaW5nCisgICAgZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkuc2V0X2NoaWxkX3dhdGNoZXIod2F0Y2hlcikuIiIiCisgICAgcmV0dXJuIGdldF9ldmVudF9sb29wX3BvbGljeSgpLnNldF9jaGlsZF93YXRjaGVyKHdhdGNoZXIpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9mdXR1cmVzLnB5IGIvTGliL2FzeW5jaW8vZnV0dXJlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGNiNjU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vZnV0dXJlcy5weQpAQCAtMCwwICsxLDQ1MyBAQAorIiIiQSBGdXR1cmUgY2xhc3Mgc2ltaWxhciB0byB0aGUgb25lIGluIFBFUCAzMTQ4LiIiIgorCitfX2FsbF9fID0gWydDYW5jZWxsZWRFcnJvcicsICdUaW1lb3V0RXJyb3InLAorICAgICAgICAgICAnSW52YWxpZFN0YXRlRXJyb3InLAorICAgICAgICAgICAnRnV0dXJlJywgJ3dyYXBfZnV0dXJlJywKKyAgICAgICAgICAgXQorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzLl9iYXNlCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHJlcHJsaWIKK2ltcG9ydCBzeXMKK2ltcG9ydCB0cmFjZWJhY2sKKworZnJvbSAuIGltcG9ydCBjb21wYXQKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCisKKyMgU3RhdGVzIGZvciBGdXR1cmUuCitfUEVORElORyA9ICdQRU5ESU5HJworX0NBTkNFTExFRCA9ICdDQU5DRUxMRUQnCitfRklOSVNIRUQgPSAnRklOSVNIRUQnCisKK0Vycm9yID0gY29uY3VycmVudC5mdXR1cmVzLl9iYXNlLkVycm9yCitDYW5jZWxsZWRFcnJvciA9IGNvbmN1cnJlbnQuZnV0dXJlcy5DYW5jZWxsZWRFcnJvcgorVGltZW91dEVycm9yID0gY29uY3VycmVudC5mdXR1cmVzLlRpbWVvdXRFcnJvcgorCitTVEFDS19ERUJVRyA9IGxvZ2dpbmcuREVCVUcgLSAxICAjIGhlYXZ5LWR1dHkgZGVidWdnaW5nCisKKworY2xhc3MgSW52YWxpZFN0YXRlRXJyb3IoRXJyb3IpOgorICAgICIiIlRoZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBzdGF0ZS4iIiIKKworCitjbGFzcyBfVHJhY2ViYWNrTG9nZ2VyOgorICAgICIiIkhlbHBlciB0byBsb2cgYSB0cmFjZWJhY2sgdXBvbiBkZXN0cnVjdGlvbiBpZiBub3QgY2xlYXJlZC4KKworICAgIFRoaXMgc29sdmVzIGEgbmFzdHkgcHJvYmxlbSB3aXRoIEZ1dHVyZXMgYW5kIFRhc2tzIHRoYXQgaGF2ZSBhbgorICAgIGV4Y2VwdGlvbiBzZXQ6IGlmIG5vYm9keSBhc2tzIGZvciB0aGUgZXhjZXB0aW9uLCB0aGUgZXhjZXB0aW9uIGlzCisgICAgbmV2ZXIgbG9nZ2VkLiAgVGhpcyB2aW9sYXRlcyB0aGUgWmVuIG9mIFB5dGhvbjogJ0Vycm9ycyBzaG91bGQKKyAgICBuZXZlciBwYXNzIHNpbGVudGx5LiAgVW5sZXNzIGV4cGxpY2l0bHkgc2lsZW5jZWQuJworCisgICAgSG93ZXZlciwgd2UgZG9uJ3Qgd2FudCB0byBsb2cgdGhlIGV4Y2VwdGlvbiBhcyBzb29uIGFzCisgICAgc2V0X2V4Y2VwdGlvbigpIGlzIGNhbGxlZDogaWYgdGhlIGNhbGxpbmcgY29kZSBpcyB3cml0dGVuCisgICAgcHJvcGVybHksIGl0IHdpbGwgZ2V0IHRoZSBleGNlcHRpb24gYW5kIGhhbmRsZSBpdCBwcm9wZXJseS4gIEJ1dAorICAgIHdlICpkbyogd2FudCB0byBsb2cgaXQgaWYgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkgd2FzIG5ldmVyIGNhbGxlZAorICAgIC0tIG90aGVyd2lzZSBkZXZlbG9wZXJzIHdhc3RlIGEgbG90IG9mIHRpbWUgd29uZGVyaW5nIHdoeSB0aGVpcgorICAgIGJ1Z2d5IGNvZGUgZmFpbHMgc2lsZW50bHkuCisKKyAgICBBbiBlYXJsaWVyIGF0dGVtcHQgYWRkZWQgYSBfX2RlbF9fKCkgbWV0aG9kIHRvIHRoZSBGdXR1cmUgY2xhc3MKKyAgICBpdHNlbGYsIGJ1dCB0aGlzIGJhY2tmaXJlZCBiZWNhdXNlIHRoZSBwcmVzZW5jZSBvZiBfX2RlbF9fKCkKKyAgICBwcmV2ZW50cyBnYXJiYWdlIGNvbGxlY3Rpb24gZnJvbSBicmVha2luZyBjeWNsZXMuICBBIHdheSBvdXQgb2YKKyAgICB0aGlzIGNhdGNoLTIyIGlzIHRvIGF2b2lkIGhhdmluZyBhIF9fZGVsX18oKSBtZXRob2Qgb24gdGhlIEZ1dHVyZQorICAgIGNsYXNzIGl0c2VsZiwgYnV0IGluc3RlYWQgdG8gaGF2ZSBhIHJlZmVyZW5jZSB0byBhIGhlbHBlciBvYmplY3QKKyAgICB3aXRoIGEgX19kZWxfXygpIG1ldGhvZCB0aGF0IGxvZ3MgdGhlIHRyYWNlYmFjaywgd2hlcmUgd2UgZW5zdXJlCisgICAgdGhhdCB0aGUgaGVscGVyIG9iamVjdCBkb2Vzbid0IHBhcnRpY2lwYXRlIGluIGN5Y2xlcywgYW5kIG9ubHkgdGhlCisgICAgRnV0dXJlIGhhcyBhIHJlZmVyZW5jZSB0byBpdC4KKworICAgIFRoZSBoZWxwZXIgb2JqZWN0IGlzIGFkZGVkIHdoZW4gc2V0X2V4Y2VwdGlvbigpIGlzIGNhbGxlZC4gIFdoZW4KKyAgICB0aGUgRnV0dXJlIGlzIGNvbGxlY3RlZCwgYW5kIHRoZSBoZWxwZXIgaXMgcHJlc2VudCwgdGhlIGhlbHBlcgorICAgIG9iamVjdCBpcyBhbHNvIGNvbGxlY3RlZCwgYW5kIGl0cyBfX2RlbF9fKCkgbWV0aG9kIHdpbGwgbG9nIHRoZQorICAgIHRyYWNlYmFjay4gIFdoZW4gdGhlIEZ1dHVyZSdzIHJlc3VsdCgpIG9yIGV4Y2VwdGlvbigpIG1ldGhvZCBpcworICAgIGNhbGxlZCAoYW5kIGEgaGVscGVyIG9iamVjdCBpcyBwcmVzZW50KSwgaXQgcmVtb3ZlcyB0aGUgaGVscGVyCisgICAgb2JqZWN0LCBhZnRlciBjYWxsaW5nIGl0cyBjbGVhcigpIG1ldGhvZCB0byBwcmV2ZW50IGl0IGZyb20KKyAgICBsb2dnaW5nLgorCisgICAgT25lIGRvd25zaWRlIGlzIHRoYXQgd2UgZG8gYSBmYWlyIGFtb3VudCBvZiB3b3JrIHRvIGV4dHJhY3QgdGhlCisgICAgdHJhY2ViYWNrIGZyb20gdGhlIGV4Y2VwdGlvbiwgZXZlbiB3aGVuIGl0IGlzIG5ldmVyIGxvZ2dlZC4gIEl0CisgICAgd291bGQgc2VlbSBjaGVhcGVyIHRvIGp1c3Qgc3RvcmUgdGhlIGV4Y2VwdGlvbiBvYmplY3QsIGJ1dCB0aGF0CisgICAgcmVmZXJlbmNlcyB0aGUgdHJhY2ViYWNrLCB3aGljaCByZWZlcmVuY2VzIHN0YWNrIGZyYW1lcywgd2hpY2ggbWF5CisgICAgcmVmZXJlbmNlIHRoZSBGdXR1cmUsIHdoaWNoIHJlZmVyZW5jZXMgdGhlIF9UcmFjZWJhY2tMb2dnZXIsIGFuZAorICAgIHRoZW4gdGhlIF9UcmFjZWJhY2tMb2dnZXIgd291bGQgYmUgaW5jbHVkZWQgaW4gYSBjeWNsZSwgd2hpY2ggaXMKKyAgICB3aGF0IHdlJ3JlIHRyeWluZyB0byBhdm9pZCEgIEFzIGFuIG9wdGltaXphdGlvbiwgd2UgZG9uJ3QKKyAgICBpbW1lZGlhdGVseSBmb3JtYXQgdGhlIGV4Y2VwdGlvbjsgd2Ugb25seSBkbyB0aGUgd29yayB3aGVuCisgICAgYWN0aXZhdGUoKSBpcyBjYWxsZWQsIHdoaWNoIGNhbGwgaXMgZGVsYXllZCB1bnRpbCBhZnRlciBhbGwgdGhlCisgICAgRnV0dXJlJ3MgY2FsbGJhY2tzIGhhdmUgcnVuLiAgU2luY2UgdXN1YWxseSBhIEZ1dHVyZSBoYXMgYXQgbGVhc3QKKyAgICBvbmUgY2FsbGJhY2sgKHR5cGljYWxseSBzZXQgYnkgJ3lpZWxkIGZyb20nKSBhbmQgdXN1YWxseSB0aGF0CisgICAgY2FsbGJhY2sgZXh0cmFjdHMgdGhlIGNhbGxiYWNrLCB0aGVyZWJ5IHJlbW92aW5nIHRoZSBuZWVkIHRvCisgICAgZm9ybWF0IHRoZSBleGNlcHRpb24uCisKKyAgICBQUy4gSSBkb24ndCBjbGFpbSBjcmVkaXQgZm9yIHRoaXMgc29sdXRpb24uICBJIGZpcnN0IGhlYXJkIG9mIGl0CisgICAgaW4gYSBkaXNjdXNzaW9uIGFib3V0IGNsb3NpbmcgZmlsZXMgd2hlbiB0aGV5IGFyZSBjb2xsZWN0ZWQuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAoJ2xvb3AnLCAnc291cmNlX3RyYWNlYmFjaycsICdleGMnLCAndGInKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1dHVyZSwgZXhjKToKKyAgICAgICAgc2VsZi5sb29wID0gZnV0dXJlLl9sb29wCisgICAgICAgIHNlbGYuc291cmNlX3RyYWNlYmFjayA9IGZ1dHVyZS5fc291cmNlX3RyYWNlYmFjaworICAgICAgICBzZWxmLmV4YyA9IGV4YworICAgICAgICBzZWxmLnRiID0gTm9uZQorCisgICAgZGVmIGFjdGl2YXRlKHNlbGYpOgorICAgICAgICBleGMgPSBzZWxmLmV4YworICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmV4YyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYudGIgPSB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbihleGMuX19jbGFzc19fLCBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjLl9fdHJhY2ViYWNrX18pCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuZXhjID0gTm9uZQorICAgICAgICBzZWxmLnRiID0gTm9uZQorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudGI6CisgICAgICAgICAgICBtc2cgPSAnRnV0dXJlL1Rhc2sgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWRcbicKKyAgICAgICAgICAgIGlmIHNlbGYuc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICBzcmMgPSAnJy5qb2luKHRyYWNlYmFjay5mb3JtYXRfbGlzdChzZWxmLnNvdXJjZV90cmFjZWJhY2spKQorICAgICAgICAgICAgICAgIG1zZyArPSAnRnV0dXJlL1Rhc2sgY3JlYXRlZCBhdCAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbicKKyAgICAgICAgICAgICAgICBtc2cgKz0gJyVzXG4nICUgc3JjLnJzdHJpcCgpCisgICAgICAgICAgICBtc2cgKz0gJycuam9pbihzZWxmLnRiKS5yc3RyaXAoKQorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeydtZXNzYWdlJzogbXNnfSkKKworCitjbGFzcyBGdXR1cmU6CisgICAgIiIiVGhpcyBjbGFzcyBpcyAqYWxtb3N0KiBjb21wYXRpYmxlIHdpdGggY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS4KKworICAgIERpZmZlcmVuY2VzOgorCisgICAgLSByZXN1bHQoKSBhbmQgZXhjZXB0aW9uKCkgZG8gbm90IHRha2UgYSB0aW1lb3V0IGFyZ3VtZW50IGFuZAorICAgICAgcmFpc2UgYW4gZXhjZXB0aW9uIHdoZW4gdGhlIGZ1dHVyZSBpc24ndCBkb25lIHlldC4KKworICAgIC0gQ2FsbGJhY2tzIHJlZ2lzdGVyZWQgd2l0aCBhZGRfZG9uZV9jYWxsYmFjaygpIGFyZSBhbHdheXMgY2FsbGVkCisgICAgICB2aWEgdGhlIGV2ZW50IGxvb3AncyBjYWxsX3Nvb25fdGhyZWFkc2FmZSgpLgorCisgICAgLSBUaGlzIGNsYXNzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHdhaXQoKSBhbmQgYXNfY29tcGxldGVkKCkKKyAgICAgIG1ldGhvZHMgaW4gdGhlIGNvbmN1cnJlbnQuZnV0dXJlcyBwYWNrYWdlLgorCisgICAgKEluIFB5dGhvbiAzLjQgb3IgbGF0ZXIgd2UgbWF5IGJlIGFibGUgdG8gdW5pZnkgdGhlIGltcGxlbWVudGF0aW9ucy4pCisgICAgIiIiCisKKyAgICAjIENsYXNzIHZhcmlhYmxlcyBzZXJ2aW5nIGFzIGRlZmF1bHRzIGZvciBpbnN0YW5jZSB2YXJpYWJsZXMuCisgICAgX3N0YXRlID0gX1BFTkRJTkcKKyAgICBfcmVzdWx0ID0gTm9uZQorICAgIF9leGNlcHRpb24gPSBOb25lCisgICAgX2xvb3AgPSBOb25lCisgICAgX3NvdXJjZV90cmFjZWJhY2sgPSBOb25lCisKKyAgICBfYmxvY2tpbmcgPSBGYWxzZSAgIyBwcm9wZXIgdXNlIG9mIGZ1dHVyZSAoeWllbGQgdnMgeWllbGQgZnJvbSkKKworICAgIF9sb2dfdHJhY2ViYWNrID0gRmFsc2UgICAjIFVzZWQgZm9yIFB5dGhvbiAzLjQgYW5kIGxhdGVyCisgICAgX3RiX2xvZ2dlciA9IE5vbmUgICAgICAgICMgVXNlZCBmb3IgUHl0aG9uIDMuMyBvbmx5CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgZnV0dXJlLgorCisgICAgICAgIFRoZSBvcHRpb25hbCBldmVudF9sb29wIGFyZ3VtZW50IGFsbG93cyB0byBleHBsaWNpdGx5IHNldCB0aGUgZXZlbnQKKyAgICAgICAgbG9vcCBvYmplY3QgdXNlZCBieSB0aGUgZnV0dXJlLiBJZiBpdCdzIG5vdCBwcm92aWRlZCwgdGhlIGZ1dHVyZSB1c2VzCisgICAgICAgIHRoZSBkZWZhdWx0IGV2ZW50IGxvb3AuCisgICAgICAgICIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX2NhbGxiYWNrcyA9IFtdCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrID0gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKworICAgIGRlZiBfX2Zvcm1hdF9jYWxsYmFja3Moc2VsZik6CisgICAgICAgIGNiID0gc2VsZi5fY2FsbGJhY2tzCisgICAgICAgIHNpemUgPSBsZW4oY2IpCisgICAgICAgIGlmIG5vdCBzaXplOgorICAgICAgICAgICAgY2IgPSAnJworCisgICAgICAgIGRlZiBmb3JtYXRfY2IoY2FsbGJhY2spOgorICAgICAgICAgICAgcmV0dXJuIGV2ZW50cy5fZm9ybWF0X2NhbGxiYWNrX3NvdXJjZShjYWxsYmFjaywgKCkpCisKKyAgICAgICAgaWYgc2l6ZSA9PSAxOgorICAgICAgICAgICAgY2IgPSBmb3JtYXRfY2IoY2JbMF0pCisgICAgICAgIGVsaWYgc2l6ZSA9PSAyOgorICAgICAgICAgICAgY2IgPSAne30sIHt9Jy5mb3JtYXQoZm9ybWF0X2NiKGNiWzBdKSwgZm9ybWF0X2NiKGNiWzFdKSkKKyAgICAgICAgZWxpZiBzaXplID4gMjoKKyAgICAgICAgICAgIGNiID0gJ3t9LCA8e30gbW9yZT4sIHt9Jy5mb3JtYXQoZm9ybWF0X2NiKGNiWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZS0yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfY2IoY2JbLTFdKSkKKyAgICAgICAgcmV0dXJuICdjYj1bJXNdJyAlIGNiCisKKyAgICBkZWYgX3JlcHJfaW5mbyhzZWxmKToKKyAgICAgICAgaW5mbyA9IFtzZWxmLl9zdGF0ZS5sb3dlcigpXQorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfRklOSVNIRUQ6CisgICAgICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2V4Y2VwdGlvbj17IXJ9Jy5mb3JtYXQoc2VsZi5fZXhjZXB0aW9uKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyB1c2UgcmVwcmxpYiB0byBsaW1pdCB0aGUgbGVuZ3RoIG9mIHRoZSBvdXRwdXQsIGVzcGVjaWFsbHkKKyAgICAgICAgICAgICAgICAjIGZvciB2ZXJ5IGxvbmcgc3RyaW5ncworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlcHJsaWIucmVwcihzZWxmLl9yZXN1bHQpCisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3Jlc3VsdD17fScuZm9ybWF0KHJlc3VsdCkpCisgICAgICAgIGlmIHNlbGYuX2NhbGxiYWNrczoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKHNlbGYuX19mb3JtYXRfY2FsbGJhY2tzKCkpCisgICAgICAgIGlmIHNlbGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBmcmFtZSA9IHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY3JlYXRlZCBhdCAlczolcycgJSAoZnJhbWVbMF0sIGZyYW1lWzFdKSkKKyAgICAgICAgcmV0dXJuIGluZm8KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlcHJfaW5mbygpCisgICAgICAgIHJldHVybiAnPCVzICVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sICcgJy5qb2luKGluZm8pKQorCisgICAgIyBPbiBQeXRob24gMy4zIGFuZCBvbGRlciwgb2JqZWN0cyB3aXRoIGEgZGVzdHJ1Y3RvciBwYXJ0IG9mIGEgcmVmZXJlbmNlCisgICAgIyBjeWNsZSBhcmUgbmV2ZXIgZGVzdHJveWVkLiBJdCdzIG5vdCBtb3JlIHRoZSBjYXNlIG9uIFB5dGhvbiAzLjQgdGhhbmtzCisgICAgIyB0byB0aGUgUEVQIDQ0Mi4KKyAgICBpZiBjb21wYXQuUFkzNDoKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fbG9nX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAjIHNldF9leGNlcHRpb24oKSB3YXMgbm90IGNhbGxlZCwgb3IgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkKKyAgICAgICAgICAgICAgICAjIGhhcyBjb25zdW1lZCB0aGUgZXhjZXB0aW9uCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGMgPSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAoJyVzIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ2Z1dHVyZSc6IHNlbGYsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgIGNvbnRleHRbJ3NvdXJjZV90cmFjZWJhY2snXSA9IHNlbGYuX3NvdXJjZV90cmFjZWJhY2sKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorCisgICAgZGVmIGNhbmNlbChzZWxmKToKKyAgICAgICAgIiIiQ2FuY2VsIHRoZSBmdXR1cmUgYW5kIHNjaGVkdWxlIGNhbGxiYWNrcy4KKworICAgICAgICBJZiB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSBvciBjYW5jZWxsZWQsIHJldHVybiBGYWxzZS4gIE90aGVyd2lzZSwKKyAgICAgICAgY2hhbmdlIHRoZSBmdXR1cmUncyBzdGF0ZSB0byBjYW5jZWxsZWQsIHNjaGVkdWxlIHRoZSBjYWxsYmFja3MgYW5kCisgICAgICAgIHJldHVybiBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfQ0FOQ0VMTEVECisgICAgICAgIHNlbGYuX3NjaGVkdWxlX2NhbGxiYWNrcygpCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgX3NjaGVkdWxlX2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgIiIiSW50ZXJuYWw6IEFzayB0aGUgZXZlbnQgbG9vcCB0byBjYWxsIGFsbCBjYWxsYmFja3MuCisKKyAgICAgICAgVGhlIGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIHRvIGJlIGNhbGxlZCBhcyBzb29uIGFzIHBvc3NpYmxlLiBBbHNvCisgICAgICAgIGNsZWFycyB0aGUgY2FsbGJhY2sgbGlzdC4KKyAgICAgICAgIiIiCisgICAgICAgIGNhbGxiYWNrcyA9IHNlbGYuX2NhbGxiYWNrc1s6XQorICAgICAgICBpZiBub3QgY2FsbGJhY2tzOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc2VsZi5fY2FsbGJhY2tzWzpdID0gW10KKyAgICAgICAgZm9yIGNhbGxiYWNrIGluIGNhbGxiYWNrczoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCBzZWxmKQorCisgICAgZGVmIGNhbmNlbGxlZChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSB3YXMgY2FuY2VsbGVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRAorCisgICAgIyBEb24ndCBpbXBsZW1lbnQgcnVubmluZygpOyBzZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE4Njk5CisKKyAgICBkZWYgZG9uZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGZ1dHVyZSBpcyBkb25lLgorCisgICAgICAgIERvbmUgbWVhbnMgZWl0aGVyIHRoYXQgYSByZXN1bHQgLyBleGNlcHRpb24gYXJlIGF2YWlsYWJsZSwgb3IgdGhhdCB0aGUKKyAgICAgICAgZnV0dXJlIHdhcyBjYW5jZWxsZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkcKKworICAgIGRlZiByZXN1bHQoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVzdWx0IHRoaXMgZnV0dXJlIHJlcHJlc2VudHMuCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcyBDYW5jZWxsZWRFcnJvci4gIElmIHRoZQorICAgICAgICBmdXR1cmUncyByZXN1bHQgaXNuJ3QgeWV0IGF2YWlsYWJsZSwgcmFpc2VzIEludmFsaWRTdGF0ZUVycm9yLiAgSWYKKyAgICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lIGFuZCBoYXMgYW4gZXhjZXB0aW9uIHNldCwgdGhpcyBleGNlcHRpb24gaXMgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0NBTkNFTExFRDoKKyAgICAgICAgICAgIHJhaXNlIENhbmNlbGxlZEVycm9yCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9GSU5JU0hFRDoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCdSZXN1bHQgaXMgbm90IHJlYWR5LicpCisgICAgICAgIHNlbGYuX2xvZ190cmFjZWJhY2sgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl90Yl9sb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fdGJfbG9nZ2VyID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc3VsdAorCisgICAgZGVmIGV4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBleGNlcHRpb24gdGhhdCB3YXMgc2V0IG9uIHRoaXMgZnV0dXJlLgorCisgICAgICAgIFRoZSBleGNlcHRpb24gKG9yIE5vbmUgaWYgbm8gZXhjZXB0aW9uIHdhcyBzZXQpIGlzIHJldHVybmVkIG9ubHkgaWYKKyAgICAgICAgdGhlIGZ1dHVyZSBpcyBkb25lLiAgSWYgdGhlIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQsIHJhaXNlcworICAgICAgICBDYW5jZWxsZWRFcnJvci4gIElmIHRoZSBmdXR1cmUgaXNuJ3QgZG9uZSB5ZXQsIHJhaXNlcworICAgICAgICBJbnZhbGlkU3RhdGVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9DQU5DRUxMRUQ6CisgICAgICAgICAgICByYWlzZSBDYW5jZWxsZWRFcnJvcgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfRklOSVNIRUQ6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkU3RhdGVFcnJvcignRXhjZXB0aW9uIGlzIG5vdCBzZXQuJykKKyAgICAgICAgc2VsZi5fbG9nX3RyYWNlYmFjayA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX3RiX2xvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl90Yl9sb2dnZXIgPSBOb25lCisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb24KKworICAgIGRlZiBhZGRfZG9uZV9jYWxsYmFjayhzZWxmLCBmbik6CisgICAgICAgICIiIkFkZCBhIGNhbGxiYWNrIHRvIGJlIHJ1biB3aGVuIHRoZSBmdXR1cmUgYmVjb21lcyBkb25lLgorCisgICAgICAgIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBmdXR1cmUgb2JqZWN0LiBJZgorICAgICAgICB0aGUgZnV0dXJlIGlzIGFscmVhZHkgZG9uZSB3aGVuIHRoaXMgaXMgY2FsbGVkLCB0aGUgY2FsbGJhY2sgaXMKKyAgICAgICAgc2NoZWR1bGVkIHdpdGggY2FsbF9zb29uLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgIT0gX1BFTkRJTkc6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihmbiwgc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrcy5hcHBlbmQoZm4pCisKKyAgICAjIE5ldyBtZXRob2Qgbm90IGluIFBFUCAzMTQ4LgorCisgICAgZGVmIHJlbW92ZV9kb25lX2NhbGxiYWNrKHNlbGYsIGZuKToKKyAgICAgICAgIiIiUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSBjYWxsYmFjayBmcm9tIHRoZSAiY2FsbCB3aGVuIGRvbmUiIGxpc3QuCisKKyAgICAgICAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhbGxiYWNrcyByZW1vdmVkLgorICAgICAgICAiIiIKKyAgICAgICAgZmlsdGVyZWRfY2FsbGJhY2tzID0gW2YgZm9yIGYgaW4gc2VsZi5fY2FsbGJhY2tzIGlmIGYgIT0gZm5dCisgICAgICAgIHJlbW92ZWRfY291bnQgPSBsZW4oc2VsZi5fY2FsbGJhY2tzKSAtIGxlbihmaWx0ZXJlZF9jYWxsYmFja3MpCisgICAgICAgIGlmIHJlbW92ZWRfY291bnQ6CisgICAgICAgICAgICBzZWxmLl9jYWxsYmFja3NbOl0gPSBmaWx0ZXJlZF9jYWxsYmFja3MKKyAgICAgICAgcmV0dXJuIHJlbW92ZWRfY291bnQKKworICAgICMgU28tY2FsbGVkIGludGVybmFsIG1ldGhvZHMgKG5vdGU6IG5vIHNldF9ydW5uaW5nX29yX25vdGlmeV9jYW5jZWwoKSkuCisKKyAgICBkZWYgc2V0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICAiIiJNYXJrIHRoZSBmdXR1cmUgZG9uZSBhbmQgc2V0IGl0cyByZXN1bHQuCisKKyAgICAgICAgSWYgdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGRvbmUgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHJhaXNlcworICAgICAgICBJbnZhbGlkU3RhdGVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9QRU5ESU5HOgorICAgICAgICAgICAgcmFpc2UgSW52YWxpZFN0YXRlRXJyb3IoJ3t9OiB7IXJ9Jy5mb3JtYXQoc2VsZi5fc3RhdGUsIHNlbGYpKQorICAgICAgICBzZWxmLl9yZXN1bHQgPSByZXN1bHQKKyAgICAgICAgc2VsZi5fc3RhdGUgPSBfRklOSVNIRUQKKyAgICAgICAgc2VsZi5fc2NoZWR1bGVfY2FsbGJhY2tzKCkKKworICAgIGRlZiBzZXRfZXhjZXB0aW9uKHNlbGYsIGV4Y2VwdGlvbik6CisgICAgICAgICIiIk1hcmsgdGhlIGZ1dHVyZSBkb25lIGFuZCBzZXQgYW4gZXhjZXB0aW9uLgorCisgICAgICAgIElmIHRoZSBmdXR1cmUgaXMgYWxyZWFkeSBkb25lIHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCByYWlzZXMKKyAgICAgICAgSW52YWxpZFN0YXRlRXJyb3IuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSAhPSBfUEVORElORzoKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRTdGF0ZUVycm9yKCd7fTogeyFyfScuZm9ybWF0KHNlbGYuX3N0YXRlLCBzZWxmKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShleGNlcHRpb24sIHR5cGUpOgorICAgICAgICAgICAgZXhjZXB0aW9uID0gZXhjZXB0aW9uKCkKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gZXhjZXB0aW9uCisgICAgICAgIHNlbGYuX3N0YXRlID0gX0ZJTklTSEVECisgICAgICAgIHNlbGYuX3NjaGVkdWxlX2NhbGxiYWNrcygpCisgICAgICAgIGlmIGNvbXBhdC5QWTM0OgorICAgICAgICAgICAgc2VsZi5fbG9nX3RyYWNlYmFjayA9IFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3RiX2xvZ2dlciA9IF9UcmFjZWJhY2tMb2dnZXIoc2VsZiwgZXhjZXB0aW9uKQorICAgICAgICAgICAgIyBBcnJhbmdlIGZvciB0aGUgbG9nZ2VyIHRvIGJlIGFjdGl2YXRlZCBhZnRlciBhbGwgY2FsbGJhY2tzCisgICAgICAgICAgICAjIGhhdmUgaGFkIGEgY2hhbmNlIHRvIGNhbGwgcmVzdWx0KCkgb3IgZXhjZXB0aW9uKCkuCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl90Yl9sb2dnZXIuYWN0aXZhdGUpCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLmRvbmUoKToKKyAgICAgICAgICAgIHNlbGYuX2Jsb2NraW5nID0gVHJ1ZQorICAgICAgICAgICAgeWllbGQgc2VsZiAgIyBUaGlzIHRlbGxzIFRhc2sgdG8gd2FpdCBmb3IgY29tcGxldGlvbi4KKyAgICAgICAgYXNzZXJ0IHNlbGYuZG9uZSgpLCAieWllbGQgZnJvbSB3YXNuJ3QgdXNlZCB3aXRoIGZ1dHVyZSIKKyAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0KCkgICMgTWF5IHJhaXNlIHRvby4KKworICAgIGlmIGNvbXBhdC5QWTM1OgorICAgICAgICBfX2F3YWl0X18gPSBfX2l0ZXJfXyAjIG1ha2UgY29tcGF0aWJsZSB3aXRoICdhd2FpdCcgZXhwcmVzc2lvbgorCisKK2RlZiBfc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkKGZ1dCwgcmVzdWx0KToKKyAgICAiIiJIZWxwZXIgc2V0dGluZyB0aGUgcmVzdWx0IG9ubHkgaWYgdGhlIGZ1dHVyZSB3YXMgbm90IGNhbmNlbGxlZC4iIiIKKyAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgIHJldHVybgorICAgIGZ1dC5zZXRfcmVzdWx0KHJlc3VsdCkKKworCitkZWYgX3NldF9jb25jdXJyZW50X2Z1dHVyZV9zdGF0ZShjb25jdXJyZW50LCBzb3VyY2UpOgorICAgICIiIkNvcHkgc3RhdGUgZnJvbSBhIGZ1dHVyZSB0byBhIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuIiIiCisgICAgYXNzZXJ0IHNvdXJjZS5kb25lKCkKKyAgICBpZiBzb3VyY2UuY2FuY2VsbGVkKCk6CisgICAgICAgIGNvbmN1cnJlbnQuY2FuY2VsKCkKKyAgICBpZiBub3QgY29uY3VycmVudC5zZXRfcnVubmluZ19vcl9ub3RpZnlfY2FuY2VsKCk6CisgICAgICAgIHJldHVybgorICAgIGV4Y2VwdGlvbiA9IHNvdXJjZS5leGNlcHRpb24oKQorICAgIGlmIGV4Y2VwdGlvbiBpcyBub3QgTm9uZToKKyAgICAgICAgY29uY3VycmVudC5zZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKyAgICBlbHNlOgorICAgICAgICByZXN1bHQgPSBzb3VyY2UucmVzdWx0KCkKKyAgICAgICAgY29uY3VycmVudC5zZXRfcmVzdWx0KHJlc3VsdCkKKworCitkZWYgX2NvcHlfZnV0dXJlX3N0YXRlKHNvdXJjZSwgZGVzdCk6CisgICAgIiIiSW50ZXJuYWwgaGVscGVyIHRvIGNvcHkgc3RhdGUgZnJvbSBhbm90aGVyIEZ1dHVyZS4KKworICAgIFRoZSBvdGhlciBGdXR1cmUgbWF5IGJlIGEgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZS4KKyAgICAiIiIKKyAgICBhc3NlcnQgc291cmNlLmRvbmUoKQorICAgIGlmIGRlc3QuY2FuY2VsbGVkKCk6CisgICAgICAgIHJldHVybgorICAgIGFzc2VydCBub3QgZGVzdC5kb25lKCkKKyAgICBpZiBzb3VyY2UuY2FuY2VsbGVkKCk6CisgICAgICAgIGRlc3QuY2FuY2VsKCkKKyAgICBlbHNlOgorICAgICAgICBleGNlcHRpb24gPSBzb3VyY2UuZXhjZXB0aW9uKCkKKyAgICAgICAgaWYgZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZGVzdC5zZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvdXJjZS5yZXN1bHQoKQorICAgICAgICAgICAgZGVzdC5zZXRfcmVzdWx0KHJlc3VsdCkKKworCitkZWYgX2NoYWluX2Z1dHVyZShzb3VyY2UsIGRlc3RpbmF0aW9uKToKKyAgICAiIiJDaGFpbiB0d28gZnV0dXJlcyBzbyB0aGF0IHdoZW4gb25lIGNvbXBsZXRlcywgc28gZG9lcyB0aGUgb3RoZXIuCisKKyAgICBUaGUgcmVzdWx0IChvciBleGNlcHRpb24pIG9mIHNvdXJjZSB3aWxsIGJlIGNvcGllZCB0byBkZXN0aW5hdGlvbi4KKyAgICBJZiBkZXN0aW5hdGlvbiBpcyBjYW5jZWxsZWQsIHNvdXJjZSBnZXRzIGNhbmNlbGxlZCB0b28uCisgICAgQ29tcGF0aWJsZSB3aXRoIGJvdGggYXN5bmNpby5GdXR1cmUgYW5kIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUuCisgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2Uoc291cmNlLCAoRnV0dXJlLCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKSk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQSBmdXR1cmUgaXMgcmVxdWlyZWQgZm9yIHNvdXJjZSBhcmd1bWVudCcpCisgICAgaWYgbm90IGlzaW5zdGFuY2UoZGVzdGluYXRpb24sIChGdXR1cmUsIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUpKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdBIGZ1dHVyZSBpcyByZXF1aXJlZCBmb3IgZGVzdGluYXRpb24gYXJndW1lbnQnKQorICAgIHNvdXJjZV9sb29wID0gc291cmNlLl9sb29wIGlmIGlzaW5zdGFuY2Uoc291cmNlLCBGdXR1cmUpIGVsc2UgTm9uZQorICAgIGRlc3RfbG9vcCA9IGRlc3RpbmF0aW9uLl9sb29wIGlmIGlzaW5zdGFuY2UoZGVzdGluYXRpb24sIEZ1dHVyZSkgZWxzZSBOb25lCisKKyAgICBkZWYgX3NldF9zdGF0ZShmdXR1cmUsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShmdXR1cmUsIEZ1dHVyZSk6CisgICAgICAgICAgICBfY29weV9mdXR1cmVfc3RhdGUob3RoZXIsIGZ1dHVyZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9zZXRfY29uY3VycmVudF9mdXR1cmVfc3RhdGUoZnV0dXJlLCBvdGhlcikKKworICAgIGRlZiBfY2FsbF9jaGVja19jYW5jZWwoZGVzdGluYXRpb24pOgorICAgICAgICBpZiBkZXN0aW5hdGlvbi5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIGlmIHNvdXJjZV9sb29wIGlzIE5vbmUgb3Igc291cmNlX2xvb3AgaXMgZGVzdF9sb29wOgorICAgICAgICAgICAgICAgIHNvdXJjZS5jYW5jZWwoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzb3VyY2VfbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShzb3VyY2UuY2FuY2VsKQorCisgICAgZGVmIF9jYWxsX3NldF9zdGF0ZShzb3VyY2UpOgorICAgICAgICBpZiBkZXN0X2xvb3AgaXMgTm9uZSBvciBkZXN0X2xvb3AgaXMgc291cmNlX2xvb3A6CisgICAgICAgICAgICBfc2V0X3N0YXRlKGRlc3RpbmF0aW9uLCBzb3VyY2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZXN0X2xvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoX3NldF9zdGF0ZSwgZGVzdGluYXRpb24sIHNvdXJjZSkKKworICAgIGRlc3RpbmF0aW9uLmFkZF9kb25lX2NhbGxiYWNrKF9jYWxsX2NoZWNrX2NhbmNlbCkKKyAgICBzb3VyY2UuYWRkX2RvbmVfY2FsbGJhY2soX2NhbGxfc2V0X3N0YXRlKQorCisKK2RlZiB3cmFwX2Z1dHVyZShmdXR1cmUsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiV3JhcCBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlIG9iamVjdC4iIiIKKyAgICBpZiBpc2luc3RhbmNlKGZ1dHVyZSwgRnV0dXJlKToKKyAgICAgICAgcmV0dXJuIGZ1dHVyZQorICAgIGFzc2VydCBpc2luc3RhbmNlKGZ1dHVyZSwgY29uY3VycmVudC5mdXR1cmVzLkZ1dHVyZSksIFwKKyAgICAgICAgJ2NvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUgaXMgZXhwZWN0ZWQsIGdvdCB7IXJ9Jy5mb3JtYXQoZnV0dXJlKQorICAgIG5ld19mdXR1cmUgPSBGdXR1cmUobG9vcD1sb29wKQorICAgIF9jaGFpbl9mdXR1cmUoZnV0dXJlLCBuZXdfZnV0dXJlKQorICAgIHJldHVybiBuZXdfZnV0dXJlCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9sb2Nrcy5weSBiL0xpYi9hc3luY2lvL2xvY2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0ZjZiYzEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9sb2Nrcy5weQpAQCAtMCwwICsxLDQ3MiBAQAorIiIiU3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMuIiIiCisKK19fYWxsX18gPSBbJ0xvY2snLCAnRXZlbnQnLCAnQ29uZGl0aW9uJywgJ1NlbWFwaG9yZScsICdCb3VuZGVkU2VtYXBob3JlJ10KKworaW1wb3J0IGNvbGxlY3Rpb25zCisKK2Zyb20gLiBpbXBvcnQgY29tcGF0Citmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKKworCitjbGFzcyBfQ29udGV4dE1hbmFnZXI6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyLgorCisgICAgVGhpcyBlbmFibGVzIHRoZSBmb2xsb3dpbmcgaWRpb20gZm9yIGFjcXVpcmluZyBhbmQgcmVsZWFzaW5nIGEKKyAgICBsb2NrIGFyb3VuZCBhIGJsb2NrOgorCisgICAgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICAgICA8YmxvY2s+CisKKyAgICB3aGlsZSBmYWlsaW5nIGxvdWRseSB3aGVuIGFjY2lkZW50YWxseSB1c2luZzoKKworICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICA8YmxvY2s+CisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jayk6CisgICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAjIFdlIGhhdmUgbm8gdXNlIGZvciB0aGUgImFzIC4uLiIgIGNsYXVzZSBpbiB0aGUgd2l0aAorICAgICAgICAjIHN0YXRlbWVudCBmb3IgbG9ja3MuCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fbG9jayA9IE5vbmUgICMgQ3J1ZGVseSBwcmV2ZW50IHJldXNlLgorCisKK2NsYXNzIF9Db250ZXh0TWFuYWdlck1peGluOgorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgIyBUaGlzIG11c3QgZXhpc3QgYmVjYXVzZSBfX2VudGVyX18gZXhpc3RzLCBldmVuIHRob3VnaCB0aGF0CisgICAgICAgICMgYWx3YXlzIHJhaXNlczsgdGhhdCdzIGhvdyB0aGUgd2l0aC1zdGF0ZW1lbnQgd29ya3MuCisgICAgICAgIHBhc3MKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICMgVGhpcyBpcyBub3QgYSBjb3JvdXRpbmUuICBJdCBpcyBtZWFudCB0byBlbmFibGUgdGhlIGlkaW9tOgorICAgICAgICAjCisgICAgICAgICMgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICMgICAgICAgICA8YmxvY2s+CisgICAgICAgICMKKyAgICAgICAgIyBhcyBhbiBhbHRlcm5hdGl2ZSB0bzoKKyAgICAgICAgIworICAgICAgICAjICAgICB5aWVsZCBmcm9tIGxvY2suYWNxdWlyZSgpCisgICAgICAgICMgICAgIHRyeToKKyAgICAgICAgIyAgICAgICAgIDxibG9jaz4KKyAgICAgICAgIyAgICAgZmluYWxseToKKyAgICAgICAgIyAgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgcmV0dXJuIF9Db250ZXh0TWFuYWdlcihzZWxmKQorCisgICAgaWYgY29tcGF0LlBZMzU6CisKKyAgICAgICAgZGVmIF9fYXdhaXRfXyhzZWxmKToKKyAgICAgICAgICAgICMgVG8gbWFrZSAid2l0aCBhd2FpdCBsb2NrIiB3b3JrLgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmFjcXVpcmUoKQorICAgICAgICAgICAgcmV0dXJuIF9Db250ZXh0TWFuYWdlcihzZWxmKQorCisgICAgICAgIEBjb3JvdXRpbmUKKyAgICAgICAgZGVmIF9fYWVudGVyX18oc2VsZik6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuYWNxdWlyZSgpCisgICAgICAgICAgICAjIFdlIGhhdmUgbm8gdXNlIGZvciB0aGUgImFzIC4uLiIgIGNsYXVzZSBpbiB0aGUgd2l0aAorICAgICAgICAgICAgIyBzdGF0ZW1lbnQgZm9yIGxvY2tzLgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBAY29yb3V0aW5lCisgICAgICAgIGRlZiBfX2FleGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4YywgdGIpOgorICAgICAgICAgICAgc2VsZi5yZWxlYXNlKCkKKworCitjbGFzcyBMb2NrKF9Db250ZXh0TWFuYWdlck1peGluKToKKyAgICAiIiJQcmltaXRpdmUgbG9jayBvYmplY3RzLgorCisgICAgQSBwcmltaXRpdmUgbG9jayBpcyBhIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmUgdGhhdCBpcyBub3Qgb3duZWQKKyAgICBieSBhIHBhcnRpY3VsYXIgY29yb3V0aW5lIHdoZW4gbG9ja2VkLiAgQSBwcmltaXRpdmUgbG9jayBpcyBpbiBvbmUKKyAgICBvZiB0d28gc3RhdGVzLCAnbG9ja2VkJyBvciAndW5sb2NrZWQnLgorCisgICAgSXQgaXMgY3JlYXRlZCBpbiB0aGUgdW5sb2NrZWQgc3RhdGUuICBJdCBoYXMgdHdvIGJhc2ljIG1ldGhvZHMsCisgICAgYWNxdWlyZSgpIGFuZCByZWxlYXNlKCkuICBXaGVuIHRoZSBzdGF0ZSBpcyB1bmxvY2tlZCwgYWNxdWlyZSgpCisgICAgY2hhbmdlcyB0aGUgc3RhdGUgdG8gbG9ja2VkIGFuZCByZXR1cm5zIGltbWVkaWF0ZWx5LiAgV2hlbiB0aGUKKyAgICBzdGF0ZSBpcyBsb2NrZWQsIGFjcXVpcmUoKSBibG9ja3MgdW50aWwgYSBjYWxsIHRvIHJlbGVhc2UoKSBpbgorICAgIGFub3RoZXIgY29yb3V0aW5lIGNoYW5nZXMgaXQgdG8gdW5sb2NrZWQsIHRoZW4gdGhlIGFjcXVpcmUoKSBjYWxsCisgICAgcmVzZXRzIGl0IHRvIGxvY2tlZCBhbmQgcmV0dXJucy4gIFRoZSByZWxlYXNlKCkgbWV0aG9kIHNob3VsZCBvbmx5CisgICAgYmUgY2FsbGVkIGluIHRoZSBsb2NrZWQgc3RhdGU7IGl0IGNoYW5nZXMgdGhlIHN0YXRlIHRvIHVubG9ja2VkCisgICAgYW5kIHJldHVybnMgaW1tZWRpYXRlbHkuICBJZiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcmVsZWFzZSBhbgorICAgIHVubG9ja2VkIGxvY2ssIGEgUnVudGltZUVycm9yIHdpbGwgYmUgcmFpc2VkLgorCisgICAgV2hlbiBtb3JlIHRoYW4gb25lIGNvcm91dGluZSBpcyBibG9ja2VkIGluIGFjcXVpcmUoKSB3YWl0aW5nIGZvcgorICAgIHRoZSBzdGF0ZSB0byB0dXJuIHRvIHVubG9ja2VkLCBvbmx5IG9uZSBjb3JvdXRpbmUgcHJvY2VlZHMgd2hlbiBhCisgICAgcmVsZWFzZSgpIGNhbGwgcmVzZXRzIHRoZSBzdGF0ZSB0byB1bmxvY2tlZDsgZmlyc3QgY29yb3V0aW5lIHdoaWNoCisgICAgaXMgYmxvY2tlZCBpbiBhY3F1aXJlKCkgaXMgYmVpbmcgcHJvY2Vzc2VkLgorCisgICAgYWNxdWlyZSgpIGlzIGEgY29yb3V0aW5lIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdpdGggJ3lpZWxkIGZyb20nLgorCisgICAgTG9ja3MgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICAnKHlpZWxkIGZyb20gbG9jayknCisgICAgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24uCisKKyAgICBVc2FnZToKKworICAgICAgICBsb2NrID0gTG9jaygpCisgICAgICAgIC4uLgorICAgICAgICB5aWVsZCBmcm9tIGxvY2sKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgLi4uCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgQ29udGV4dCBtYW5hZ2VyIHVzYWdlOgorCisgICAgICAgIGxvY2sgPSBMb2NrKCkKKyAgICAgICAgLi4uCisgICAgICAgIHdpdGggKHlpZWxkIGZyb20gbG9jayk6CisgICAgICAgICAgICAgLi4uCisKKyAgICBMb2NrIG9iamVjdHMgY2FuIGJlIHRlc3RlZCBmb3IgbG9ja2luZyBzdGF0ZToKKworICAgICAgICBpZiBub3QgbG9jay5sb2NrZWQoKToKKyAgICAgICAgICAgeWllbGQgZnJvbSBsb2NrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICMgbG9jayBpcyBhY3F1aXJlZAorICAgICAgICAgICAuLi4KKworICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX2xvY2tlZCA9IEZhbHNlCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYuX2xvY2tlZCBlbHNlICd1bmxvY2tlZCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBkZWYgbG9ja2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBsb2NrIGlzIGFjcXVpcmVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbG9ja2VkCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGFjcXVpcmUoc2VsZik6CisgICAgICAgICIiIkFjcXVpcmUgYSBsb2NrLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGJsb2NrcyB1bnRpbCB0aGUgbG9jayBpcyB1bmxvY2tlZCwgdGhlbiBzZXRzIGl0IHRvCisgICAgICAgIGxvY2tlZCBhbmQgcmV0dXJucyBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX3dhaXRlcnMgYW5kIG5vdCBzZWxmLl9sb2NrZWQ6CisgICAgICAgICAgICBzZWxmLl9sb2NrZWQgPSBUcnVlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICAiIiJSZWxlYXNlIGEgbG9jay4KKworICAgICAgICBXaGVuIHRoZSBsb2NrIGlzIGxvY2tlZCwgcmVzZXQgaXQgdG8gdW5sb2NrZWQsIGFuZCByZXR1cm4uCisgICAgICAgIElmIGFueSBvdGhlciBjb3JvdXRpbmVzIGFyZSBibG9ja2VkIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIGJlY29tZQorICAgICAgICB1bmxvY2tlZCwgYWxsb3cgZXhhY3RseSBvbmUgb2YgdGhlbSB0byBwcm9jZWVkLgorCisgICAgICAgIFdoZW4gaW52b2tlZCBvbiBhbiB1bmxvY2tlZCBsb2NrLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhlcmUgaXMgbm8gcmV0dXJuIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgorICAgICAgICAgICAgc2VsZi5fbG9ja2VkID0gRmFsc2UKKyAgICAgICAgICAgICMgV2FrZSB1cCB0aGUgZmlyc3Qgd2FpdGVyIHdobyBpc24ndCBjYW5jZWxsZWQuCisgICAgICAgICAgICBmb3IgZnV0IGluIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICAgICAgaWYgbm90IGZ1dC5kb25lKCk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0xvY2sgaXMgbm90IGFjcXVpcmVkLicpCisKKworY2xhc3MgRXZlbnQ6CisgICAgIiIiQXN5bmNocm9ub3VzIGVxdWl2YWxlbnQgdG8gdGhyZWFkaW5nLkV2ZW50LgorCisgICAgQ2xhc3MgaW1wbGVtZW50aW5nIGV2ZW50IG9iamVjdHMuIEFuIGV2ZW50IG1hbmFnZXMgYSBmbGFnIHRoYXQgY2FuIGJlIHNldAorICAgIHRvIHRydWUgd2l0aCB0aGUgc2V0KCkgbWV0aG9kIGFuZCByZXNldCB0byBmYWxzZSB3aXRoIHRoZSBjbGVhcigpIG1ldGhvZC4KKyAgICBUaGUgd2FpdCgpIG1ldGhvZCBibG9ja3MgdW50aWwgdGhlIGZsYWcgaXMgdHJ1ZS4gVGhlIGZsYWcgaXMgaW5pdGlhbGx5CisgICAgZmFsc2UuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5fd2FpdGVycyA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKyAgICAgICAgc2VsZi5fdmFsdWUgPSBGYWxzZQorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXMgPSBzdXBlcigpLl9fcmVwcl9fKCkKKyAgICAgICAgZXh0cmEgPSAnc2V0JyBpZiBzZWxmLl92YWx1ZSBlbHNlICd1bnNldCcKKyAgICAgICAgaWYgc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGV4dHJhID0gJ3t9LHdhaXRlcnM6e30nLmZvcm1hdChleHRyYSwgbGVuKHNlbGYuX3dhaXRlcnMpKQorICAgICAgICByZXR1cm4gJzx7fSBbe31dPicuZm9ybWF0KHJlc1sxOi0xXSwgZXh0cmEpCisKKyAgICBkZWYgaXNfc2V0KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBhbmQgb25seSBpZiB0aGUgaW50ZXJuYWwgZmxhZyBpcyB0cnVlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWUKKworICAgIGRlZiBzZXQoc2VsZik6CisgICAgICAgICIiIlNldCB0aGUgaW50ZXJuYWwgZmxhZyB0byB0cnVlLiBBbGwgY29yb3V0aW5lcyB3YWl0aW5nIGZvciBpdCB0bworICAgICAgICBiZWNvbWUgdHJ1ZSBhcmUgYXdha2VuZWQuIENvcm91dGluZSB0aGF0IGNhbGwgd2FpdCgpIG9uY2UgdGhlIGZsYWcgaXMKKyAgICAgICAgdHJ1ZSB3aWxsIG5vdCBibG9jayBhdCBhbGwuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5fdmFsdWU6CisgICAgICAgICAgICBzZWxmLl92YWx1ZSA9IFRydWUKKworICAgICAgICAgICAgZm9yIGZ1dCBpbiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBmdXQuZG9uZSgpOgorICAgICAgICAgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChUcnVlKQorCisgICAgZGVmIGNsZWFyKHNlbGYpOgorICAgICAgICAiIiJSZXNldCB0aGUgaW50ZXJuYWwgZmxhZyB0byBmYWxzZS4gU3Vic2VxdWVudGx5LCBjb3JvdXRpbmVzIGNhbGxpbmcKKyAgICAgICAgd2FpdCgpIHdpbGwgYmxvY2sgdW50aWwgc2V0KCkgaXMgY2FsbGVkIHRvIHNldCB0aGUgaW50ZXJuYWwgZmxhZworICAgICAgICB0byB0cnVlIGFnYWluLiIiIgorICAgICAgICBzZWxmLl92YWx1ZSA9IEZhbHNlCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgICIiIkJsb2NrIHVudGlsIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuCisKKyAgICAgICAgSWYgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZSBvbiBlbnRyeSwgcmV0dXJuIFRydWUKKyAgICAgICAgaW1tZWRpYXRlbHkuICBPdGhlcndpc2UsIGJsb2NrIHVudGlsIGFub3RoZXIgY29yb3V0aW5lIGNhbGxzCisgICAgICAgIHNldCgpIHRvIHNldCB0aGUgZmxhZyB0byB0cnVlLCB0aGVuIHJldHVybiBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fdmFsdWU6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMucmVtb3ZlKGZ1dCkKKworCitjbGFzcyBDb25kaXRpb24oX0NvbnRleHRNYW5hZ2VyTWl4aW4pOgorICAgICIiIkFzeW5jaHJvbm91cyBlcXVpdmFsZW50IHRvIHRocmVhZGluZy5Db25kaXRpb24uCisKKyAgICBUaGlzIGNsYXNzIGltcGxlbWVudHMgY29uZGl0aW9uIHZhcmlhYmxlIG9iamVjdHMuIEEgY29uZGl0aW9uIHZhcmlhYmxlCisgICAgYWxsb3dzIG9uZSBvciBtb3JlIGNvcm91dGluZXMgdG8gd2FpdCB1bnRpbCB0aGV5IGFyZSBub3RpZmllZCBieSBhbm90aGVyCisgICAgY29yb3V0aW5lLgorCisgICAgQSBuZXcgTG9jayBvYmplY3QgaXMgY3JlYXRlZCBhbmQgdXNlZCBhcyB0aGUgdW5kZXJseWluZyBsb2NrLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2s9Tm9uZSwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgICAgICBpZiBsb2NrIGlzIE5vbmU6CisgICAgICAgICAgICBsb2NrID0gTG9jayhsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIGVsaWYgbG9jay5fbG9vcCBpcyBub3Qgc2VsZi5fbG9vcDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImxvb3AgYXJndW1lbnQgbXVzdCBhZ3JlZSB3aXRoIGxvY2siKQorCisgICAgICAgIHNlbGYuX2xvY2sgPSBsb2NrCisgICAgICAgICMgRXhwb3J0IHRoZSBsb2NrJ3MgbG9ja2VkKCksIGFjcXVpcmUoKSBhbmQgcmVsZWFzZSgpIG1ldGhvZHMuCisgICAgICAgIHNlbGYubG9ja2VkID0gbG9jay5sb2NrZWQKKyAgICAgICAgc2VsZi5hY3F1aXJlID0gbG9jay5hY3F1aXJlCisgICAgICAgIHNlbGYucmVsZWFzZSA9IGxvY2sucmVsZWFzZQorCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYubG9ja2VkKCkgZWxzZSAndW5sb2NrZWQnCisgICAgICAgIGlmIHNlbGYuX3dhaXRlcnM6CisgICAgICAgICAgICBleHRyYSA9ICd7fSx3YWl0ZXJzOnt9Jy5mb3JtYXQoZXh0cmEsIGxlbihzZWxmLl93YWl0ZXJzKSkKKyAgICAgICAgcmV0dXJuICc8e30gW3t9XT4nLmZvcm1hdChyZXNbMTotMV0sIGV4dHJhKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICAiIiJXYWl0IHVudGlsIG5vdGlmaWVkLgorCisgICAgICAgIElmIHRoZSBjYWxsaW5nIGNvcm91dGluZSBoYXMgbm90IGFjcXVpcmVkIHRoZSBsb2NrIHdoZW4gdGhpcworICAgICAgICBtZXRob2QgaXMgY2FsbGVkLCBhIFJ1bnRpbWVFcnJvciBpcyByYWlzZWQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgcmVsZWFzZXMgdGhlIHVuZGVybHlpbmcgbG9jaywgYW5kIHRoZW4gYmxvY2tzCisgICAgICAgIHVudGlsIGl0IGlzIGF3YWtlbmVkIGJ5IGEgbm90aWZ5KCkgb3Igbm90aWZ5X2FsbCgpIGNhbGwgZm9yCisgICAgICAgIHRoZSBzYW1lIGNvbmRpdGlvbiB2YXJpYWJsZSBpbiBhbm90aGVyIGNvcm91dGluZS4gIE9uY2UKKyAgICAgICAgYXdha2VuZWQsIGl0IHJlLWFjcXVpcmVzIHRoZSBsb2NrIGFuZCByZXR1cm5zIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5sb2NrZWQoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IHdhaXQgb24gdW4tYWNxdWlyZWQgbG9jaycpCisKKyAgICAgICAgc2VsZi5yZWxlYXNlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQoZnV0KQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUoZnV0KQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuYWNxdWlyZSgpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHdhaXRfZm9yKHNlbGYsIHByZWRpY2F0ZSk6CisgICAgICAgICIiIldhaXQgdW50aWwgYSBwcmVkaWNhdGUgYmVjb21lcyB0cnVlLgorCisgICAgICAgIFRoZSBwcmVkaWNhdGUgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVzdWx0IHdpbGwgYmUKKyAgICAgICAgaW50ZXJwcmV0ZWQgYXMgYSBib29sZWFuIHZhbHVlLiAgVGhlIGZpbmFsIHByZWRpY2F0ZSB2YWx1ZSBpcworICAgICAgICB0aGUgcmV0dXJuIHZhbHVlLgorICAgICAgICAiIiIKKyAgICAgICAgcmVzdWx0ID0gcHJlZGljYXRlKCkKKyAgICAgICAgd2hpbGUgbm90IHJlc3VsdDoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi53YWl0KCkKKyAgICAgICAgICAgIHJlc3VsdCA9IHByZWRpY2F0ZSgpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBub3RpZnkoc2VsZiwgbj0xKToKKyAgICAgICAgIiIiQnkgZGVmYXVsdCwgd2FrZSB1cCBvbmUgY29yb3V0aW5lIHdhaXRpbmcgb24gdGhpcyBjb25kaXRpb24sIGlmIGFueS4KKyAgICAgICAgSWYgdGhlIGNhbGxpbmcgY29yb3V0aW5lIGhhcyBub3QgYWNxdWlyZWQgdGhlIGxvY2sgd2hlbiB0aGlzIG1ldGhvZAorICAgICAgICBpcyBjYWxsZWQsIGEgUnVudGltZUVycm9yIGlzIHJhaXNlZC4KKworICAgICAgICBUaGlzIG1ldGhvZCB3YWtlcyB1cCBhdCBtb3N0IG4gb2YgdGhlIGNvcm91dGluZXMgd2FpdGluZyBmb3IgdGhlCisgICAgICAgIGNvbmRpdGlvbiB2YXJpYWJsZTsgaXQgaXMgYSBuby1vcCBpZiBubyBjb3JvdXRpbmVzIGFyZSB3YWl0aW5nLgorCisgICAgICAgIE5vdGU6IGFuIGF3YWtlbmVkIGNvcm91dGluZSBkb2VzIG5vdCBhY3R1YWxseSByZXR1cm4gZnJvbSBpdHMKKyAgICAgICAgd2FpdCgpIGNhbGwgdW50aWwgaXQgY2FuIHJlYWNxdWlyZSB0aGUgbG9jay4gU2luY2Ugbm90aWZ5KCkgZG9lcworICAgICAgICBub3QgcmVsZWFzZSB0aGUgbG9jaywgaXRzIGNhbGxlciBzaG91bGQuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3Qgc2VsZi5sb2NrZWQoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignY2Fubm90IG5vdGlmeSBvbiB1bi1hY3F1aXJlZCBsb2NrJykKKworICAgICAgICBpZHggPSAwCisgICAgICAgIGZvciBmdXQgaW4gc2VsZi5fd2FpdGVyczoKKyAgICAgICAgICAgIGlmIGlkeCA+PSBuOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgIGlmIG5vdCBmdXQuZG9uZSgpOgorICAgICAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoRmFsc2UpCisKKyAgICBkZWYgbm90aWZ5X2FsbChzZWxmKToKKyAgICAgICAgIiIiV2FrZSB1cCBhbGwgdGhyZWFkcyB3YWl0aW5nIG9uIHRoaXMgY29uZGl0aW9uLiBUaGlzIG1ldGhvZCBhY3RzCisgICAgICAgIGxpa2Ugbm90aWZ5KCksIGJ1dCB3YWtlcyB1cCBhbGwgd2FpdGluZyB0aHJlYWRzIGluc3RlYWQgb2Ygb25lLiBJZiB0aGUKKyAgICAgICAgY2FsbGluZyB0aHJlYWQgaGFzIG5vdCBhY3F1aXJlZCB0aGUgbG9jayB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwKKyAgICAgICAgYSBSdW50aW1lRXJyb3IgaXMgcmFpc2VkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5ub3RpZnkobGVuKHNlbGYuX3dhaXRlcnMpKQorCisKK2NsYXNzIFNlbWFwaG9yZShfQ29udGV4dE1hbmFnZXJNaXhpbik6CisgICAgIiIiQSBTZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCisKKyAgICBBIHNlbWFwaG9yZSBtYW5hZ2VzIGFuIGludGVybmFsIGNvdW50ZXIgd2hpY2ggaXMgZGVjcmVtZW50ZWQgYnkgZWFjaAorICAgIGFjcXVpcmUoKSBjYWxsIGFuZCBpbmNyZW1lbnRlZCBieSBlYWNoIHJlbGVhc2UoKSBjYWxsLiBUaGUgY291bnRlcgorICAgIGNhbiBuZXZlciBnbyBiZWxvdyB6ZXJvOyB3aGVuIGFjcXVpcmUoKSBmaW5kcyB0aGF0IGl0IGlzIHplcm8sIGl0IGJsb2NrcywKKyAgICB3YWl0aW5nIHVudGlsIHNvbWUgb3RoZXIgdGhyZWFkIGNhbGxzIHJlbGVhc2UoKS4KKworICAgIFNlbWFwaG9yZXMgYWxzbyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuCisKKyAgICBUaGUgb3B0aW9uYWwgYXJndW1lbnQgZ2l2ZXMgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSBpbnRlcm5hbAorICAgIGNvdW50ZXI7IGl0IGRlZmF1bHRzIHRvIDEuIElmIHRoZSB2YWx1ZSBnaXZlbiBpcyBsZXNzIHRoYW4gMCwKKyAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBpZiB2YWx1ZSA8IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJTZW1hcGhvcmUgaW5pdGlhbCB2YWx1ZSBtdXN0IGJlID49IDAiKQorICAgICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuX3dhaXRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJlcyA9IHN1cGVyKCkuX19yZXByX18oKQorICAgICAgICBleHRyYSA9ICdsb2NrZWQnIGlmIHNlbGYubG9ja2VkKCkgZWxzZSAndW5sb2NrZWQsdmFsdWU6e30nLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlKQorICAgICAgICBpZiBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgZXh0cmEgPSAne30sd2FpdGVyczp7fScuZm9ybWF0KGV4dHJhLCBsZW4oc2VsZi5fd2FpdGVycykpCisgICAgICAgIHJldHVybiAnPHt9IFt7fV0+Jy5mb3JtYXQocmVzWzE6LTFdLCBleHRyYSkKKworICAgIGRlZiBfd2FrZV91cF9uZXh0KHNlbGYpOgorICAgICAgICB3aGlsZSBzZWxmLl93YWl0ZXJzOgorICAgICAgICAgICAgd2FpdGVyID0gc2VsZi5fd2FpdGVycy5wb3BsZWZ0KCkKKyAgICAgICAgICAgIGlmIG5vdCB3YWl0ZXIuZG9uZSgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgbG9ja2VkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIFRydWUgaWYgc2VtYXBob3JlIGNhbiBub3QgYmUgYWNxdWlyZWQgaW1tZWRpYXRlbHkuIiIiCisgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZSA9PSAwCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGFjcXVpcmUoc2VsZik6CisgICAgICAgICIiIkFjcXVpcmUgYSBzZW1hcGhvcmUuCisKKyAgICAgICAgSWYgdGhlIGludGVybmFsIGNvdW50ZXIgaXMgbGFyZ2VyIHRoYW4gemVybyBvbiBlbnRyeSwKKyAgICAgICAgZGVjcmVtZW50IGl0IGJ5IG9uZSBhbmQgcmV0dXJuIFRydWUgaW1tZWRpYXRlbHkuICBJZiBpdCBpcworICAgICAgICB6ZXJvIG9uIGVudHJ5LCBibG9jaywgd2FpdGluZyB1bnRpbCBzb21lIG90aGVyIGNvcm91dGluZSBoYXMKKyAgICAgICAgY2FsbGVkIHJlbGVhc2UoKSB0byBtYWtlIGl0IGxhcmdlciB0aGFuIDAsIGFuZCB0aGVuIHJldHVybgorICAgICAgICBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgd2hpbGUgc2VsZi5fdmFsdWUgPD0gMDoKKyAgICAgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHNlbGYuX3dhaXRlcnMuYXBwZW5kKGZ1dCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICMgU2VlIHRoZSBzaW1pbGFyIGNvZGUgaW4gUXVldWUuZ2V0LgorICAgICAgICAgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3ZhbHVlID4gMCBhbmQgbm90IGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FrZV91cF9uZXh0KCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgcmVsZWFzZShzZWxmKToKKyAgICAgICAgIiIiUmVsZWFzZSBhIHNlbWFwaG9yZSwgaW5jcmVtZW50aW5nIHRoZSBpbnRlcm5hbCBjb3VudGVyIGJ5IG9uZS4KKyAgICAgICAgV2hlbiBpdCB3YXMgemVybyBvbiBlbnRyeSBhbmQgYW5vdGhlciBjb3JvdXRpbmUgaXMgd2FpdGluZyBmb3IgaXQgdG8KKyAgICAgICAgYmVjb21lIGxhcmdlciB0aGFuIHplcm8gYWdhaW4sIHdha2UgdXAgdGhhdCBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl92YWx1ZSArPSAxCisgICAgICAgIHNlbGYuX3dha2VfdXBfbmV4dCgpCisKKworY2xhc3MgQm91bmRlZFNlbWFwaG9yZShTZW1hcGhvcmUpOgorICAgICIiIkEgYm91bmRlZCBzZW1hcGhvcmUgaW1wbGVtZW50YXRpb24uCisKKyAgICBUaGlzIHJhaXNlcyBWYWx1ZUVycm9yIGluIHJlbGVhc2UoKSBpZiBpdCB3b3VsZCBpbmNyZWFzZSB0aGUgdmFsdWUKKyAgICBhYm92ZSB0aGUgaW5pdGlhbCB2YWx1ZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZT0xLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBzZWxmLl9ib3VuZF92YWx1ZSA9IHZhbHVlCisgICAgICAgIHN1cGVyKCkuX19pbml0X18odmFsdWUsIGxvb3A9bG9vcCkKKworICAgIGRlZiByZWxlYXNlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl92YWx1ZSA+PSBzZWxmLl9ib3VuZF92YWx1ZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0JvdW5kZWRTZW1hcGhvcmUgcmVsZWFzZWQgdG9vIG1hbnkgdGltZXMnKQorICAgICAgICBzdXBlcigpLnJlbGVhc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vbG9nLnB5IGIvTGliL2FzeW5jaW8vbG9nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYTcwNzQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9sb2cucHkKQEAgLTAsMCArMSw3IEBACisiIiJMb2dnaW5nIGNvbmZpZ3VyYXRpb24uIiIiCisKK2ltcG9ydCBsb2dnaW5nCisKKworIyBOYW1lIHRoZSBsb2dnZXIgYWZ0ZXIgdGhlIHBhY2thZ2UuCitsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihfX3BhY2thZ2VfXykKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3Byb2FjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGMwNjU5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vcHJvYWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsNTUwIEBACisiIiJFdmVudCBsb29wIHVzaW5nIGEgcHJvYWN0b3IgYW5kIHJlbGF0ZWQgY2xhc3Nlcy4KKworQSBwcm9hY3RvciBpcyBhICJub3RpZnktb24tY29tcGxldGlvbiIgbXVsdGlwbGV4ZXIuICBDdXJyZW50bHkgYQorcHJvYWN0b3IgaXMgb25seSBpbXBsZW1lbnRlZCBvbiBXaW5kb3dzIHdpdGggSU9DUC4KKyIiIgorCitfX2FsbF9fID0gWydCYXNlUHJvYWN0b3JFdmVudExvb3AnXQorCitpbXBvcnQgc29ja2V0CitpbXBvcnQgd2FybmluZ3MKKworZnJvbSAuIGltcG9ydCBiYXNlX2V2ZW50cworZnJvbSAuIGltcG9ydCBjb21wYXQKK2Zyb20gLiBpbXBvcnQgY29uc3RhbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgc3NscHJvdG8KK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitjbGFzcyBfUHJvYWN0b3JCYXNlUGlwZVRyYW5zcG9ydCh0cmFuc3BvcnRzLl9GbG93Q29udHJvbE1peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5CYXNlVHJhbnNwb3J0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBwaXBlIGFuZCBzb2NrZXQgdHJhbnNwb3J0cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSwgbG9vcCkKKyAgICAgICAgc2VsZi5fc2V0X2V4dHJhKHNvY2spCisgICAgICAgIHNlbGYuX3NvY2sgPSBzb2NrCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fc2VydmVyID0gc2VydmVyCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUgICMgTm9uZSBvciBieXRlYXJyYXkuCisgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBzZWxmLl93cml0ZV9mdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3BlbmRpbmdfd3JpdGUgPSAwCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCA9IDAKKyAgICAgICAgc2VsZi5fY2xvc2luZyA9IEZhbHNlICAjIFNldCB3aGVuIGNsb3NlKCkgY2FsbGVkLgorICAgICAgICBzZWxmLl9lb2Zfd3JpdHRlbiA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX3NlcnZlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlci5fYXR0YWNoKCkKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG9ubHkgd2FrZSB1cCB0aGUgd2FpdGVyIHdoZW4gY29ubmVjdGlvbl9tYWRlKCkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihmdXR1cmVzLl9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZXIsIE5vbmUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbc2VsZi5fX2NsYXNzX18uX19uYW1lX19dCisgICAgICAgIGlmIHNlbGYuX3NvY2sgaXMgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zZWQnKQorICAgICAgICBlbGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2luZycpCisgICAgICAgIGlmIHNlbGYuX3NvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnZmQ9JXMnICUgc2VsZi5fc29jay5maWxlbm8oKSkKKyAgICAgICAgaWYgc2VsZi5fcmVhZF9mdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgncmVhZD0lcycgJSBzZWxmLl9yZWFkX2Z1dCkKKyAgICAgICAgaWYgc2VsZi5fd3JpdGVfZnV0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoIndyaXRlPSVyIiAlIHNlbGYuX3dyaXRlX2Z1dCkKKyAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgYnVmc2l6ZSA9IGxlbihzZWxmLl9idWZmZXIpCisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnd3JpdGVfYnVmc2l6ZT0lcycgJSBidWZzaXplKQorICAgICAgICBpZiBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdFT0Ygd3JpdHRlbicpCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgZGVmIF9zZXRfZXh0cmEoc2VsZiwgc29jayk6CisgICAgICAgIHNlbGYuX2V4dHJhWydwaXBlJ10gPSBzb2NrCisKKyAgICBkZWYgaXNfY2xvc2luZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nsb3NpbmcKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyIGFuZCBzZWxmLl93cml0ZV9mdXQgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorICAgICAgICBpZiBzZWxmLl9yZWFkX2Z1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5fc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCB0cmFuc3BvcnQgJXIiICUgc2VsZiwgUmVzb3VyY2VXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMsIG1lc3NhZ2U9J0ZhdGFsIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0Jyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvcikpOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyOiAlcyIsIHNlbGYsIG1lc3NhZ2UsIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICd0cmFuc3BvcnQnOiBzZWxmLAorICAgICAgICAgICAgICAgICdwcm90b2NvbCc6IHNlbGYuX3Byb3RvY29sLAorICAgICAgICAgICAgfSkKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorCisgICAgZGVmIF9mb3JjZV9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dC5jYW5jZWwoKQorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl9yZWFkX2Z1dDoKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcGVuZGluZ193cml0ZSA9IDAKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBYWFggSWYgdGhlcmUgaXMgYSBwZW5kaW5nIG92ZXJsYXBwZWQgcmVhZCBvbiB0aGUgb3RoZXIKKyAgICAgICAgICAgICMgZW5kIHRoZW4gaXQgbWF5IGZhaWwgd2l0aCBFUlJPUl9ORVROQU1FX0RFTEVURUQgaWYgd2UKKyAgICAgICAgICAgICMganVzdCBjbG9zZSBvdXIgZW5kLiAgRmlyc3QgY2FsbGluZyBzaHV0ZG93bigpIHNlZW1zIHRvCisgICAgICAgICAgICAjIGN1cmUgaXQsIGJ1dCBtYXliZSB1c2luZyBEaXNjb25uZWN0RXgoKSB3b3VsZCBiZSBiZXR0ZXIuCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX3NvY2ssICdzaHV0ZG93bicpOgorICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fc29jayA9IE5vbmUKKyAgICAgICAgICAgIHNlcnZlciA9IHNlbGYuX3NlcnZlcgorICAgICAgICAgICAgaWYgc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlcnZlci5fZGV0YWNoKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICBzaXplID0gc2VsZi5fcGVuZGluZ193cml0ZQorICAgICAgICBpZiBzZWxmLl9idWZmZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzaXplICs9IGxlbihzZWxmLl9idWZmZXIpCisgICAgICAgIHJldHVybiBzaXplCisKKworY2xhc3MgX1Byb2FjdG9yUmVhZFBpcGVUcmFuc3BvcnQoX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlJlYWRUcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3IgcmVhZCBwaXBlcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSwgc2VydmVyKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9sb29wX3JlYWRpbmcpCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignQ2Fubm90IHBhdXNlX3JlYWRpbmcoKSB3aGVuIGNsb3NpbmcnKQorICAgICAgICBpZiBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0FscmVhZHkgcGF1c2VkJykKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gVHJ1ZQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciBwYXVzZXMgcmVhZGluZyIsIHNlbGYpCisKKyAgICBkZWYgcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ05vdCBwYXVzZWQnKQorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2xvb3BfcmVhZGluZywgc2VsZi5fcmVhZF9mdXQpCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHJlc3VtZXMgcmVhZGluZyIsIHNlbGYpCisKKyAgICBkZWYgX2xvb3BfcmVhZGluZyhzZWxmLCBmdXQ9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBkYXRhID0gTm9uZQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGZ1dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5fcmVhZF9mdXQgaXMgZnV0IG9yIChzZWxmLl9yZWFkX2Z1dCBpcyBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NpbmcpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBOb25lCisgICAgICAgICAgICAgICAgZGF0YSA9IGZ1dC5yZXN1bHQoKSAgIyBkZWxpdmVyIGRhdGEgbGF0ZXIgaW4gImZpbmFsbHkiIGNsYXVzZQorCisgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICMgc2luY2UgY2xvc2UoKSBoYXMgYmVlbiBjYWxsZWQgd2UgaWdub3JlIGFueSByZWFkIGRhdGEKKyAgICAgICAgICAgICAgICBkYXRhID0gTm9uZQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBpZiBkYXRhID09IGInJzoKKyAgICAgICAgICAgICAgICAjIHdlIGdvdCBlbmQtb2YtZmlsZSBzbyBubyBuZWVkIHRvIHJlc2NoZWR1bGUgYSBuZXcgcmVhZAorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAjIHJlc2NoZWR1bGUgYSBuZXcgcmVhZAorICAgICAgICAgICAgc2VsZi5fcmVhZF9mdXQgPSBzZWxmLl9sb29wLl9wcm9hY3Rvci5yZWN2KHNlbGYuX3NvY2ssIDQwOTYpCisgICAgICAgIGV4Y2VwdCBDb25uZWN0aW9uQWJvcnRlZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorICAgICAgICAgICAgZWxpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiUmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCB3aGlsZSBjbG9zaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZXhjZXB0IENvbm5lY3Rpb25SZXNldEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmNlX2Nsb3NlKGV4YykKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgcmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX2xvb3BfcmVhZGluZykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxpZiBkYXRhIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgcmVjZWl2ZWQgRU9GIiwgc2VsZikKKyAgICAgICAgICAgICAgICBrZWVwX29wZW4gPSBzZWxmLl9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQoKQorICAgICAgICAgICAgICAgIGlmIG5vdCBrZWVwX29wZW46CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisKK2NsYXNzIF9Qcm9hY3RvckJhc2VXcml0ZVBpcGVUcmFuc3BvcnQoX1Byb2FjdG9yQmFzZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuV3JpdGVUcmFuc3BvcnQpOgorICAgICIiIlRyYW5zcG9ydCBmb3Igd3JpdGUgcGlwZXMuIiIiCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2RhdGEgYXJndW1lbnQgbXVzdCBiZSBieXRlLWlzaCAoJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGRhdGEpKQorICAgICAgICBpZiBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignd3JpdGVfZW9mKCkgYWxyZWFkeSBjYWxsZWQnKQorCisgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0OgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgT2JzZXJ2YWJsZSBzdGF0ZXM6CisgICAgICAgICMgMS4gSURMRTogX3dyaXRlX2Z1dCBhbmQgX2J1ZmZlciBib3RoIE5vbmUKKyAgICAgICAgIyAyLiBXUklUSU5HOiBfd3JpdGVfZnV0IHNldDsgX2J1ZmZlciBOb25lCisgICAgICAgICMgMy4gQkFDS0VEIFVQOiBfd3JpdGVfZnV0IHNldDsgX2J1ZmZlciBhIGJ5dGVhcnJheQorICAgICAgICAjIFdlIGFsd2F5cyBjb3B5IHRoZSBkYXRhLCBzbyB0aGUgY2FsbGVyIGNhbid0IG1vZGlmeSBpdAorICAgICAgICAjIHdoaWxlIHdlJ3JlIHN0aWxsIHdhaXRpbmcgZm9yIHRoZSBJL08gdG8gaGFwcGVuLgorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgTm9uZTogICMgSURMRSAtPiBXUklUSU5HCisgICAgICAgICAgICBhc3NlcnQgc2VsZi5fYnVmZmVyIGlzIE5vbmUKKyAgICAgICAgICAgICMgUGFzcyBhIGNvcHksIGV4Y2VwdCBpZiBpdCdzIGFscmVhZHkgaW1tdXRhYmxlLgorICAgICAgICAgICAgc2VsZi5fbG9vcF93cml0aW5nKGRhdGE9Ynl0ZXMoZGF0YSkpCisgICAgICAgIGVsaWYgbm90IHNlbGYuX2J1ZmZlcjogICMgV1JJVElORyAtPiBCQUNLRUQgVVAKKyAgICAgICAgICAgICMgTWFrZSBhIG11dGFibGUgY29weSB3aGljaCB3ZSBjYW4gZXh0ZW5kLgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYnl0ZWFycmF5KGRhdGEpCisgICAgICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisgICAgICAgIGVsc2U6ICAjIEJBQ0tFRCBVUAorICAgICAgICAgICAgIyBBcHBlbmQgdG8gYnVmZmVyIChhbHNvIGNvcGllcykuCisgICAgICAgICAgICBzZWxmLl9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgICAgICBzZWxmLl9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisKKyAgICBkZWYgX2xvb3Bfd3JpdGluZyhzZWxmLCBmPU5vbmUsIGRhdGE9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzc2VydCBmIGlzIHNlbGYuX3dyaXRlX2Z1dAorICAgICAgICAgICAgc2VsZi5fd3JpdGVfZnV0ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcGVuZGluZ193cml0ZSA9IDAKKyAgICAgICAgICAgIGlmIGY6CisgICAgICAgICAgICAgICAgZi5yZXN1bHQoKQorICAgICAgICAgICAgaWYgZGF0YSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXIKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9lb2Zfd3JpdHRlbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgICAgICAgICAjIE5vdyB0aGF0IHdlJ3ZlIHJlZHVjZWQgdGhlIGJ1ZmZlciBzaXplLCB0ZWxsIHRoZQorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgdG8gcmVzdW1lIHdyaXRpbmcgaWYgaXQgd2FzIHBhdXNlZC4gIE5vdGUgdGhhdAorICAgICAgICAgICAgICAgICMgd2UgZG8gdGhpcyBsYXN0IHNpbmNlIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgaW1tZWRpYXRlbHkKKyAgICAgICAgICAgICAgICAjIGFuZCBpdCBtYXkgYWRkIG1vcmUgZGF0YSB0byB0aGUgYnVmZmVyIChldmVuIGNhdXNpbmcgdGhlCisgICAgICAgICAgICAgICAgIyBwcm90b2NvbCB0byBiZSBwYXVzZWQgYWdhaW4pLgorICAgICAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnNlbmQoc2VsZi5fc29jaywgZGF0YSkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fd3JpdGVfZnV0LmRvbmUoKToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX3BlbmRpbmdfd3JpdGUgPT0gMAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9wZW5kaW5nX3dyaXRlID0gbGVuKGRhdGEpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2Z1dC5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9sb29wX3dyaXRpbmcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9mdXQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbG9vcF93cml0aW5nKQorICAgICAgICBleGNlcHQgQ29ubmVjdGlvblJlc2V0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoZXhjKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCB3cml0ZSBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShOb25lKQorCisKK2NsYXNzIF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChfUHJvYWN0b3JCYXNlV3JpdGVQaXBlVHJhbnNwb3J0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3KQorICAgICAgICBzZWxmLl9yZWFkX2Z1dCA9IHNlbGYuX2xvb3AuX3Byb2FjdG9yLnJlY3Yoc2VsZi5fc29jaywgMTYpCisgICAgICAgIHNlbGYuX3JlYWRfZnV0LmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX3BpcGVfY2xvc2VkKQorCisgICAgZGVmIF9waXBlX2Nsb3NlZChzZWxmLCBmdXQpOgorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICAjIHRoZSB0cmFuc3BvcnQgaGFzIGJlZW4gY2xvc2VkCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXNzZXJ0IGZ1dC5yZXN1bHQoKSA9PSBiJycKKyAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLl9yZWFkX2Z1dCBpcyBOb25lCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgYXNzZXJ0IGZ1dCBpcyBzZWxmLl9yZWFkX2Z1dCwgKGZ1dCwgc2VsZi5fcmVhZF9mdXQpCisgICAgICAgIHNlbGYuX3JlYWRfZnV0ID0gTm9uZQorICAgICAgICBpZiBzZWxmLl93cml0ZV9mdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShCcm9rZW5QaXBlRXJyb3IoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCisKK2NsYXNzIF9Qcm9hY3RvckR1cGxleFBpcGVUcmFuc3BvcnQoX1Byb2FjdG9yUmVhZFBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qcm9hY3RvckJhc2VXcml0ZVBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKyAgICAiIiJUcmFuc3BvcnQgZm9yIGR1cGxleCBwaXBlcy4iIiIKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBfUHJvYWN0b3JTb2NrZXRUcmFuc3BvcnQoX1Byb2FjdG9yUmVhZFBpcGVUcmFuc3BvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Byb2FjdG9yQmFzZVdyaXRlUGlwZVRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLlRyYW5zcG9ydCk6CisgICAgIiIiVHJhbnNwb3J0IGZvciBjb25uZWN0ZWQgc29ja2V0cy4iIiIKKworICAgIGRlZiBfc2V0X2V4dHJhKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLl9leHRyYVsnc29ja2V0J10gPSBzb2NrCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrbmFtZSddID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJnZXRzb2NrbmFtZSgpIGZhaWxlZCBvbiAlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGlmICdwZWVybmFtZScgbm90IGluIHNlbGYuX2V4dHJhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gc29jay5nZXRwZWVybmFtZSgpCisgICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJnZXRwZWVybmFtZSgpIGZhaWxlZCBvbiAlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIGV4Y19pbmZvPVRydWUpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiB3cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmcgb3Igc2VsZi5fZW9mX3dyaXR0ZW46CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fZW9mX3dyaXR0ZW4gPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX3dyaXRlX2Z1dCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fc29jay5zaHV0ZG93bihzb2NrZXQuU0hVVF9XUikKKworCitjbGFzcyBCYXNlUHJvYWN0b3JFdmVudExvb3AoYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvYWN0b3IpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgbG9nZ2VyLmRlYnVnKCdVc2luZyBwcm9hY3RvcjogJXMnLCBwcm9hY3Rvci5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHNlbGYuX3Byb2FjdG9yID0gcHJvYWN0b3IKKyAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBwcm9hY3RvciAgICMgY29udmVuaWVudCBhbGlhcworICAgICAgICBzZWxmLl9zZWxmX3JlYWRpbmdfZnV0dXJlID0gTm9uZQorICAgICAgICBzZWxmLl9hY2NlcHRfZnV0dXJlcyA9IHt9ICAgIyBzb2NrZXQgZmlsZSBkZXNjcmlwdG9yID0+IEZ1dHVyZQorICAgICAgICBwcm9hY3Rvci5zZXRfbG9vcChzZWxmKQorICAgICAgICBzZWxmLl9tYWtlX3NlbGZfcGlwZSgpCisKKyAgICBkZWYgX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICByZXR1cm4gX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEsIHNlcnZlcikKKworICAgIGRlZiBfbWFrZV9zc2xfdHJhbnNwb3J0KHNlbGYsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBpZiBub3Qgc3NscHJvdG8uX2lzX3NzbHByb3RvX2F2YWlsYWJsZSgpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiUHJvYWN0b3IgZXZlbnQgbG9vcCByZXF1aXJlcyBQeXRob24gMy41IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIG9yIG5ld2VyIChzc2wuTWVtb3J5QklPKSB0byBzdXBwb3J0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTCIpCisKKyAgICAgICAgc3NsX3Byb3RvY29sID0gc3NscHJvdG8uU1NMUHJvdG9jb2woc2VsZiwgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGUsIHNlcnZlcl9ob3N0bmFtZSkKKyAgICAgICAgX1Byb2FjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYsIHJhd3NvY2ssIHNzbF9wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPWV4dHJhLCBzZXJ2ZXI9c2VydmVyKQorICAgICAgICByZXR1cm4gc3NsX3Byb3RvY29sLl9hcHBfdHJhbnNwb3J0CisKKyAgICBkZWYgX21ha2VfZHVwbGV4X3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1Byb2FjdG9yRHVwbGV4UGlwZVRyYW5zcG9ydChzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIGRlZiBfbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lKToKKyAgICAgICAgcmV0dXJuIF9Qcm9hY3RvclJlYWRQaXBlVHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgICMgV2Ugd2FudCBjb25uZWN0aW9uX2xvc3QoKSB0byBiZSBjYWxsZWQgd2hlbiBvdGhlciBlbmQgY2xvc2VzCisgICAgICAgIHJldHVybiBfUHJvYWN0b3JXcml0ZVBpcGVUcmFuc3BvcnQoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pc19ydW5uaW5nKCk6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbm5vdCBjbG9zZSBhIHJ1bm5pbmcgZXZlbnQgbG9vcCIpCisgICAgICAgIGlmIHNlbGYuaXNfY2xvc2VkKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIENhbGwgdGhlc2UgbWV0aG9kcyBiZWZvcmUgY2xvc2luZyB0aGUgZXZlbnQgbG9vcCAoYmVmb3JlIGNhbGxpbmcKKyAgICAgICAgIyBCYXNlRXZlbnRMb29wLmNsb3NlKSwgYmVjYXVzZSB0aGV5IGNhbiBzY2hlZHVsZSBjYWxsYmFja3Mgd2l0aAorICAgICAgICAjIGNhbGxfc29vbigpLCB3aGljaCBpcyBmb3JiaWRkZW4gd2hlbiB0aGUgZXZlbnQgbG9vcCBpcyBjbG9zZWQuCisgICAgICAgIHNlbGYuX3N0b3BfYWNjZXB0X2Z1dHVyZXMoKQorICAgICAgICBzZWxmLl9jbG9zZV9zZWxmX3BpcGUoKQorICAgICAgICBzZWxmLl9wcm9hY3Rvci5jbG9zZSgpCisgICAgICAgIHNlbGYuX3Byb2FjdG9yID0gTm9uZQorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IE5vbmUKKworICAgICAgICAjIENsb3NlIHRoZSBldmVudCBsb29wCisgICAgICAgIHN1cGVyKCkuY2xvc2UoKQorCisgICAgZGVmIHNvY2tfcmVjdihzZWxmLCBzb2NrLCBuKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Byb2FjdG9yLnJlY3Yoc29jaywgbikKKworICAgIGRlZiBzb2NrX3NlbmRhbGwoc2VsZiwgc29jaywgZGF0YSk6CisgICAgICAgIHJldHVybiBzZWxmLl9wcm9hY3Rvci5zZW5kKHNvY2ssIGRhdGEpCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBiYXNlX2V2ZW50cy5fY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCBhZGRyZXNzKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihlcnIpCisgICAgICAgICAgICByZXR1cm4gZnV0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IuY29ubmVjdChzb2NrLCBhZGRyZXNzKQorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICByZXR1cm4gc2VsZi5fcHJvYWN0b3IuYWNjZXB0KHNvY2spCisKKyAgICBkZWYgX3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9zZWxmX3JlYWRpbmdfZnV0dXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2VsZl9yZWFkaW5nX2Z1dHVyZS5jYW5jZWwoKQorICAgICAgICAgICAgc2VsZi5fc2VsZl9yZWFkaW5nX2Z1dHVyZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3NvY2suY2xvc2UoKQorICAgICAgICBzZWxmLl9zc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5fY3NvY2suY2xvc2UoKQorICAgICAgICBzZWxmLl9jc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzIC09IDEKKworICAgIGRlZiBfbWFrZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgICMgQSBzZWxmLXNvY2tldCwgcmVhbGx5LiA6LSkKKyAgICAgICAgc2VsZi5fc3NvY2ssIHNlbGYuX2Nzb2NrID0gc2VsZi5fc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuX3Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9jc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzICs9IDEKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24oc2VsZi5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgX2xvb3Bfc2VsZl9yZWFkaW5nKHNlbGYsIGY9Tm9uZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgZi5yZXN1bHQoKSAgIyBtYXkgcmFpc2UKKyAgICAgICAgICAgIGYgPSBzZWxmLl9wcm9hY3Rvci5yZWN2KHNlbGYuX3Nzb2NrLCA0MDk2KQorICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICMgX2Nsb3NlX3NlbGZfcGlwZSgpIGhhcyBiZWVuIGNhbGxlZCwgc3RvcCB3YWl0aW5nIGZvciBkYXRhCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0Vycm9yIG9uIHJlYWRpbmcgZnJvbSB0aGUgZXZlbnQgbG9vcCBzZWxmIHBpcGUnLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ2xvb3AnOiBzZWxmLAorICAgICAgICAgICAgfSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NlbGZfcmVhZGluZ19mdXR1cmUgPSBmCisgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKHNlbGYuX2xvb3Bfc2VsZl9yZWFkaW5nKQorCisgICAgZGVmIF93cml0ZV90b19zZWxmKHNlbGYpOgorICAgICAgICBzZWxmLl9jc29jay5zZW5kKGInXDAnKQorCisgICAgZGVmIF9zdGFydF9zZXJ2aW5nKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQ9Tm9uZSwgc2VydmVyPU5vbmUpOgorCisgICAgICAgIGRlZiBsb29wKGY9Tm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29ubiwgYWRkciA9IGYucmVzdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIGdvdCBhIG5ldyBjb25uZWN0aW9uIGZyb20gJXI6ICVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIsIGFkZHIsIGNvbm4pCisgICAgICAgICAgICAgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgICAgICAgICAgICAgIGlmIHNzbGNvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3NzbF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubiwgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9eydwZWVybmFtZSc6IGFkZHJ9LCBzZXJ2ZXI9c2VydmVyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4sIHByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPXsncGVlcm5hbWUnOiBhZGRyfSwgc2VydmVyPXNlcnZlcikKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmlzX2Nsb3NlZCgpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICBmID0gc2VsZi5fcHJvYWN0b3IuYWNjZXB0KHNvY2spCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgc29jay5maWxlbm8oKSAhPSAtMToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0FjY2VwdCBmYWlsZWQgb24gYSBzb2NrZXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQnOiBzb2NrLAorICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBlbGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIkFjY2VwdCBmYWlsZWQgb24gc29ja2V0ICVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2ssIGV4Y19pbmZvPVRydWUpCisgICAgICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fYWNjZXB0X2Z1dHVyZXNbc29jay5maWxlbm8oKV0gPSBmCisgICAgICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhsb29wKQorCisgICAgICAgIHNlbGYuY2FsbF9zb29uKGxvb3ApCisKKyAgICBkZWYgX3Byb2Nlc3NfZXZlbnRzKHNlbGYsIGV2ZW50X2xpc3QpOgorICAgICAgICAjIEV2ZW50cyBhcmUgcHJvY2Vzc2VkIGluIHRoZSBJb2NwUHJvYWN0b3IuX3BvbGwoKSBtZXRob2QKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9zdG9wX2FjY2VwdF9mdXR1cmVzKHNlbGYpOgorICAgICAgICBmb3IgZnV0dXJlIGluIHNlbGYuX2FjY2VwdF9mdXR1cmVzLnZhbHVlcygpOgorICAgICAgICAgICAgZnV0dXJlLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX2FjY2VwdF9mdXR1cmVzLmNsZWFyKCkKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIHNvY2spOgorICAgICAgICBzZWxmLl9zdG9wX2FjY2VwdF9mdXR1cmVzKCkKKyAgICAgICAgc2VsZi5fcHJvYWN0b3IuX3N0b3Bfc2VydmluZyhzb2NrKQorICAgICAgICBzb2NrLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3Byb3RvY29scy5weSBiL0xpYi9hc3luY2lvL3Byb3RvY29scy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGZjYWM5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vcHJvdG9jb2xzLnB5CkBAIC0wLDAgKzEsMTM0IEBACisiIiJBYnN0cmFjdCBQcm90b2NvbCBjbGFzcy4iIiIKKworX19hbGxfXyA9IFsnQmFzZVByb3RvY29sJywgJ1Byb3RvY29sJywgJ0RhdGFncmFtUHJvdG9jb2wnLAorICAgICAgICAgICAnU3VicHJvY2Vzc1Byb3RvY29sJ10KKworCitjbGFzcyBCYXNlUHJvdG9jb2w6CisgICAgIiIiQ29tbW9uIGJhc2UgY2xhc3MgZm9yIHByb3RvY29sIGludGVyZmFjZXMuCisKKyAgICBVc3VhbGx5IHVzZXIgaW1wbGVtZW50cyBwcm90b2NvbHMgdGhhdCBkZXJpdmVkIGZyb20gQmFzZVByb3RvY29sCisgICAgbGlrZSBQcm90b2NvbCBvciBQcm9jZXNzUHJvdG9jb2wuCisKKyAgICBUaGUgb25seSBjYXNlIHdoZW4gQmFzZVByb3RvY29sIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseSBpcworICAgIHdyaXRlLW9ubHkgdHJhbnNwb3J0IGxpa2Ugd3JpdGUgcGlwZQorICAgICIiIgorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIGNvbm5lY3Rpb24gaXMgbWFkZS4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgdGhlIHRyYW5zcG9ydCByZXByZXNlbnRpbmcgdGhlIHBpcGUgY29ubmVjdGlvbi4KKyAgICAgICAgVG8gcmVjZWl2ZSBkYXRhLCB3YWl0IGZvciBkYXRhX3JlY2VpdmVkKCkgY2FsbHMuCisgICAgICAgIFdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLCBjb25uZWN0aW9uX2xvc3QoKSBpcyBjYWxsZWQuCisgICAgICAgICIiIgorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgY29ubmVjdGlvbiBpcyBsb3N0IG9yIGNsb3NlZC4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYW4gZXhjZXB0aW9uIG9iamVjdCBvciBOb25lICh0aGUgbGF0dGVyCisgICAgICAgIG1lYW5pbmcgYSByZWd1bGFyIEVPRiBpcyByZWNlaXZlZCBvciB0aGUgY29ubmVjdGlvbiB3YXMKKyAgICAgICAgYWJvcnRlZCBvciBjbG9zZWQpLgorICAgICAgICAiIiIKKworICAgIGRlZiBwYXVzZV93cml0aW5nKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgdHJhbnNwb3J0J3MgYnVmZmVyIGdvZXMgb3ZlciB0aGUgaGlnaC13YXRlciBtYXJrLgorCisgICAgICAgIFBhdXNlIGFuZCByZXN1bWUgY2FsbHMgYXJlIHBhaXJlZCAtLSBwYXVzZV93cml0aW5nKCkgaXMgY2FsbGVkCisgICAgICAgIG9uY2Ugd2hlbiB0aGUgYnVmZmVyIGdvZXMgc3RyaWN0bHkgb3ZlciB0aGUgaGlnaC13YXRlciBtYXJrCisgICAgICAgIChldmVuIGlmIHN1YnNlcXVlbnQgd3JpdGVzIGluY3JlYXNlcyB0aGUgYnVmZmVyIHNpemUgZXZlbgorICAgICAgICBtb3JlKSwgYW5kIGV2ZW50dWFsbHkgcmVzdW1lX3dyaXRpbmcoKSBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZQorICAgICAgICBidWZmZXIgc2l6ZSByZWFjaGVzIHRoZSBsb3ctd2F0ZXIgbWFyay4KKworICAgICAgICBOb3RlIHRoYXQgaWYgdGhlIGJ1ZmZlciBzaXplIGVxdWFscyB0aGUgaGlnaC13YXRlciBtYXJrLAorICAgICAgICBwYXVzZV93cml0aW5nKCkgaXMgbm90IGNhbGxlZCAtLSBpdCBtdXN0IGdvIHN0cmljdGx5IG92ZXIuCisgICAgICAgIENvbnZlcnNlbHksIHJlc3VtZV93cml0aW5nKCkgaXMgY2FsbGVkIHdoZW4gdGhlIGJ1ZmZlciBzaXplIGlzCisgICAgICAgIGVxdWFsIG9yIGxvd2VyIHRoYW4gdGhlIGxvdy13YXRlciBtYXJrLiAgVGhlc2UgZW5kIGNvbmRpdGlvbnMKKyAgICAgICAgYXJlIGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCB0aGluZ3MgZ28gYXMgZXhwZWN0ZWQgd2hlbiBlaXRoZXIKKyAgICAgICAgbWFyayBpcyB6ZXJvLgorCisgICAgICAgIE5PVEU6IFRoaXMgaXMgdGhlIG9ubHkgUHJvdG9jb2wgY2FsbGJhY2sgdGhhdCBpcyBub3QgY2FsbGVkCisgICAgICAgIHRocm91Z2ggRXZlbnRMb29wLmNhbGxfc29vbigpIC0tIGlmIGl0IHdlcmUsIGl0IHdvdWxkIGhhdmUgbm8KKyAgICAgICAgZWZmZWN0IHdoZW4gaXQncyBtb3N0IG5lZWRlZCAod2hlbiB0aGUgYXBwIGtlZXBzIHdyaXRpbmcKKyAgICAgICAgd2l0aG91dCB5aWVsZGluZyB1bnRpbCBwYXVzZV93cml0aW5nKCkgaXMgY2FsbGVkKS4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcmVzdW1lX3dyaXRpbmcoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSB0cmFuc3BvcnQncyBidWZmZXIgZHJhaW5zIGJlbG93IHRoZSBsb3ctd2F0ZXIgbWFyay4KKworICAgICAgICBTZWUgcGF1c2Vfd3JpdGluZygpIGZvciBkZXRhaWxzLgorICAgICAgICAiIiIKKworCitjbGFzcyBQcm90b2NvbChCYXNlUHJvdG9jb2wpOgorICAgICIiIkludGVyZmFjZSBmb3Igc3RyZWFtIHByb3RvY29sLgorCisgICAgVGhlIHVzZXIgc2hvdWxkIGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4gIFRoZXkgY2FuIGluaGVyaXQgZnJvbQorICAgIHRoaXMgY2xhc3MgYnV0IGRvbid0IG5lZWQgdG8uICBUaGUgaW1wbGVtZW50YXRpb25zIGhlcmUgZG8KKyAgICBub3RoaW5nICh0aGV5IGRvbid0IHJhaXNlIGV4Y2VwdGlvbnMpLgorCisgICAgV2hlbiB0aGUgdXNlciB3YW50cyB0byByZXF1ZXN0cyBhIHRyYW5zcG9ydCwgdGhleSBwYXNzIGEgcHJvdG9jb2wKKyAgICBmYWN0b3J5IHRvIGEgdXRpbGl0eSBmdW5jdGlvbiAoZS5nLiwgRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uKCkpLgorCisgICAgV2hlbiB0aGUgY29ubmVjdGlvbiBpcyBtYWRlIHN1Y2Nlc3NmdWxseSwgY29ubmVjdGlvbl9tYWRlKCkgaXMKKyAgICBjYWxsZWQgd2l0aCBhIHN1aXRhYmxlIHRyYW5zcG9ydCBvYmplY3QuICBUaGVuIGRhdGFfcmVjZWl2ZWQoKQorICAgIHdpbGwgYmUgY2FsbGVkIDAgb3IgbW9yZSB0aW1lcyB3aXRoIGRhdGEgKGJ5dGVzKSByZWNlaXZlZCBmcm9tIHRoZQorICAgIHRyYW5zcG9ydDsgZmluYWxseSwgY29ubmVjdGlvbl9sb3N0KCkgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlCisgICAgd2l0aCBlaXRoZXIgYW4gZXhjZXB0aW9uIG9iamVjdCBvciBOb25lIGFzIGFuIGFyZ3VtZW50LgorCisgICAgU3RhdGUgbWFjaGluZSBvZiBjYWxsczoKKworICAgICAgc3RhcnQgLT4gQ00gWy0+IERSKl0gWy0+IEVSP10gLT4gQ0wgLT4gZW5kCisKKyAgICAqIENNOiBjb25uZWN0aW9uX21hZGUoKQorICAgICogRFI6IGRhdGFfcmVjZWl2ZWQoKQorICAgICogRVI6IGVvZl9yZWNlaXZlZCgpCisgICAgKiBDTDogY29ubmVjdGlvbl9sb3N0KCkKKyAgICAiIiIKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzb21lIGRhdGEgaXMgcmVjZWl2ZWQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIGEgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBvdGhlciBlbmQgY2FsbHMgd3JpdGVfZW9mKCkgb3IgZXF1aXZhbGVudC4KKworICAgICAgICBJZiB0aGlzIHJldHVybnMgYSBmYWxzZSB2YWx1ZSAoaW5jbHVkaW5nIE5vbmUpLCB0aGUgdHJhbnNwb3J0CisgICAgICAgIHdpbGwgY2xvc2UgaXRzZWxmLiAgSWYgaXQgcmV0dXJucyBhIHRydWUgdmFsdWUsIGNsb3NpbmcgdGhlCisgICAgICAgIHRyYW5zcG9ydCBpcyB1cCB0byB0aGUgcHJvdG9jb2wuCisgICAgICAgICIiIgorCisKK2NsYXNzIERhdGFncmFtUHJvdG9jb2woQmFzZVByb3RvY29sKToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIGRhdGFncmFtIHByb3RvY29sLiIiIgorCisgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBzb21lIGRhdGFncmFtIGlzIHJlY2VpdmVkLiIiIgorCisgICAgZGVmIGVycm9yX3JlY2VpdmVkKHNlbGYsIGV4Yyk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIGEgc2VuZCBvciByZWNlaXZlIG9wZXJhdGlvbiByYWlzZXMgYW4gT1NFcnJvci4KKworICAgICAgICAoT3RoZXIgdGhhbiBCbG9ja2luZ0lPRXJyb3Igb3IgSW50ZXJydXB0ZWRFcnJvci4pCisgICAgICAgICIiIgorCisKK2NsYXNzIFN1YnByb2Nlc3NQcm90b2NvbChCYXNlUHJvdG9jb2wpOgorICAgICIiIkludGVyZmFjZSBmb3IgcHJvdG9jb2wgZm9yIHN1YnByb2Nlc3MgY2FsbHMuIiIiCisKKyAgICBkZWYgcGlwZV9kYXRhX3JlY2VpdmVkKHNlbGYsIGZkLCBkYXRhKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIHN1YnByb2Nlc3Mgd3JpdGVzIGRhdGEgaW50byBzdGRvdXQvc3RkZXJyIHBpcGUuCisKKyAgICAgICAgZmQgaXMgaW50IGZpbGUgZGVzY3JpcHRvci4KKyAgICAgICAgZGF0YSBpcyBieXRlcyBvYmplY3QuCisgICAgICAgICIiIgorCisgICAgZGVmIHBpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiBhIGZpbGUgZGVzY3JpcHRvciBhc3NvY2lhdGVkIHdpdGggdGhlIGNoaWxkIHByb2Nlc3MgaXMKKyAgICAgICAgY2xvc2VkLgorCisgICAgICAgIGZkIGlzIHRoZSBpbnQgZmlsZSBkZXNjcmlwdG9yIHRoYXQgd2FzIGNsb3NlZC4KKyAgICAgICAgIiIiCisKKyAgICBkZWYgcHJvY2Vzc19leGl0ZWQoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHN1YnByb2Nlc3MgaGFzIGV4aXRlZC4iIiIKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3F1ZXVlcy5weSBiL0xpYi9hc3luY2lvL3F1ZXVlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lM2ExZDVlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vcXVldWVzLnB5CkBAIC0wLDAgKzEsMjU0IEBACisiIiJRdWV1ZXMiIiIKKworX19hbGxfXyA9IFsnUXVldWUnLCAnUHJpb3JpdHlRdWV1ZScsICdMaWZvUXVldWUnLCAnUXVldWVGdWxsJywgJ1F1ZXVlRW1wdHknXQorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBoZWFwcQorCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBsb2NrcworZnJvbSAuY29yb3V0aW5lcyBpbXBvcnQgY29yb3V0aW5lCisKKworY2xhc3MgUXVldWVFbXB0eShFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiBRdWV1ZS5nZXRfbm93YWl0KCkgaXMgY2FsbGVkIG9uIGEgUXVldWUgb2JqZWN0CisgICAgd2hpY2ggaXMgZW1wdHkuCisgICAgIiIiCisgICAgcGFzcworCisKK2NsYXNzIFF1ZXVlRnVsbChFeGNlcHRpb24pOgorICAgICIiIkV4Y2VwdGlvbiByYWlzZWQgd2hlbiB0aGUgUXVldWUucHV0X25vd2FpdCgpIG1ldGhvZCBpcyBjYWxsZWQgb24gYSBRdWV1ZQorICAgIG9iamVjdCB3aGljaCBpcyBmdWxsLgorICAgICIiIgorICAgIHBhc3MKKworCitjbGFzcyBRdWV1ZToKKyAgICAiIiJBIHF1ZXVlLCB1c2VmdWwgZm9yIGNvb3JkaW5hdGluZyBwcm9kdWNlciBhbmQgY29uc3VtZXIgY29yb3V0aW5lcy4KKworICAgIElmIG1heHNpemUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8sIHRoZSBxdWV1ZSBzaXplIGlzIGluZmluaXRlLiBJZiBpdAorICAgIGlzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIDAsIHRoZW4gInlpZWxkIGZyb20gcHV0KCkiIHdpbGwgYmxvY2sgd2hlbiB0aGUKKyAgICBxdWV1ZSByZWFjaGVzIG1heHNpemUsIHVudGlsIGFuIGl0ZW0gaXMgcmVtb3ZlZCBieSBnZXQoKS4KKworICAgIFVubGlrZSB0aGUgc3RhbmRhcmQgbGlicmFyeSBRdWV1ZSwgeW91IGNhbiByZWxpYWJseSBrbm93IHRoaXMgUXVldWUncyBzaXplCisgICAgd2l0aCBxc2l6ZSgpLCBzaW5jZSB5b3VyIHNpbmdsZS10aHJlYWRlZCBhc3luY2lvIGFwcGxpY2F0aW9uIHdvbid0IGJlCisgICAgaW50ZXJydXB0ZWQgYmV0d2VlbiBjYWxsaW5nIHFzaXplKCkgYW5kIGRvaW5nIGFuIG9wZXJhdGlvbiBvbiB0aGUgUXVldWUuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBsb29wPU5vbmUpOgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX21heHNpemUgPSBtYXhzaXplCisKKyAgICAgICAgIyBGdXR1cmVzLgorICAgICAgICBzZWxmLl9nZXR0ZXJzID0gY29sbGVjdGlvbnMuZGVxdWUoKQorICAgICAgICAjIEZ1dHVyZXMuCisgICAgICAgIHNlbGYuX3B1dHRlcnMgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX3VuZmluaXNoZWRfdGFza3MgPSAwCisgICAgICAgIHNlbGYuX2ZpbmlzaGVkID0gbG9ja3MuRXZlbnQobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBzZWxmLl9maW5pc2hlZC5zZXQoKQorICAgICAgICBzZWxmLl9pbml0KG1heHNpemUpCisKKyAgICAjIFRoZXNlIHRocmVlIGFyZSBvdmVycmlkYWJsZSBpbiBzdWJjbGFzc2VzLgorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IGNvbGxlY3Rpb25zLmRlcXVlKCkKKworICAgIGRlZiBfZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fcXVldWUucG9wbGVmdCgpCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5fcXVldWUuYXBwZW5kKGl0ZW0pCisKKyAgICAjIEVuZCBvZiB0aGUgb3ZlcnJpZGFibGUgbWV0aG9kcy4KKworICAgIGRlZiBfd2FrZXVwX25leHQoc2VsZiwgd2FpdGVycyk6CisgICAgICAgICMgV2FrZSB1cCB0aGUgbmV4dCB3YWl0ZXIgKGlmIGFueSkgdGhhdCBpc24ndCBjYW5jZWxsZWQuCisgICAgICAgIHdoaWxlIHdhaXRlcnM6CisgICAgICAgICAgICB3YWl0ZXIgPSB3YWl0ZXJzLnBvcGxlZnQoKQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzx7fSBhdCB7OiN4fSB7fT4nLmZvcm1hdCgKKyAgICAgICAgICAgIHR5cGUoc2VsZikuX19uYW1lX18sIGlkKHNlbGYpLCBzZWxmLl9mb3JtYXQoKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzx7fSB7fT4nLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLCBzZWxmLl9mb3JtYXQoKSkKKworICAgIGRlZiBfZm9ybWF0KHNlbGYpOgorICAgICAgICByZXN1bHQgPSAnbWF4c2l6ZT17IXJ9Jy5mb3JtYXQoc2VsZi5fbWF4c2l6ZSkKKyAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX3F1ZXVlJywgTm9uZSk6CisgICAgICAgICAgICByZXN1bHQgKz0gJyBfcXVldWU9eyFyfScuZm9ybWF0KGxpc3Qoc2VsZi5fcXVldWUpKQorICAgICAgICBpZiBzZWxmLl9nZXR0ZXJzOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgX2dldHRlcnNbe31dJy5mb3JtYXQobGVuKHNlbGYuX2dldHRlcnMpKQorICAgICAgICBpZiBzZWxmLl9wdXR0ZXJzOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgX3B1dHRlcnNbe31dJy5mb3JtYXQobGVuKHNlbGYuX3B1dHRlcnMpKQorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzOgorICAgICAgICAgICAgcmVzdWx0ICs9ICcgdGFza3M9e30nLmZvcm1hdChzZWxmLl91bmZpbmlzaGVkX3Rhc2tzKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgcXNpemUoc2VsZik6CisgICAgICAgICIiIk51bWJlciBvZiBpdGVtcyBpbiB0aGUgcXVldWUuIiIiCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fcXVldWUpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWF4c2l6ZShzZWxmKToKKyAgICAgICAgIiIiTnVtYmVyIG9mIGl0ZW1zIGFsbG93ZWQgaW4gdGhlIHF1ZXVlLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fbWF4c2l6ZQorCisgICAgZGVmIGVtcHR5KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgcXVldWUgaXMgZW1wdHksIEZhbHNlIG90aGVyd2lzZS4iIiIKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9xdWV1ZQorCisgICAgZGVmIGZ1bGwoc2VsZik6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZXJlIGFyZSBtYXhzaXplIGl0ZW1zIGluIHRoZSBxdWV1ZS4KKworICAgICAgICBOb3RlOiBpZiB0aGUgUXVldWUgd2FzIGluaXRpYWxpemVkIHdpdGggbWF4c2l6ZT0wICh0aGUgZGVmYXVsdCksCisgICAgICAgIHRoZW4gZnVsbCgpIGlzIG5ldmVyIFRydWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9tYXhzaXplIDw9IDA6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnFzaXplKCkgPj0gc2VsZi5fbWF4c2l6ZQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBwdXQoc2VsZiwgaXRlbSk6CisgICAgICAgICIiIlB1dCBhbiBpdGVtIGludG8gdGhlIHF1ZXVlLgorCisgICAgICAgIFB1dCBhbiBpdGVtIGludG8gdGhlIHF1ZXVlLiBJZiB0aGUgcXVldWUgaXMgZnVsbCwgd2FpdCB1bnRpbCBhIGZyZWUKKyAgICAgICAgc2xvdCBpcyBhdmFpbGFibGUgYmVmb3JlIGFkZGluZyBpdGVtLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgd2hpbGUgc2VsZi5mdWxsKCk6CisgICAgICAgICAgICBwdXR0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgICAgICBzZWxmLl9wdXR0ZXJzLmFwcGVuZChwdXR0ZXIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBwdXR0ZXIKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwdXR0ZXIuY2FuY2VsKCkgICMgSnVzdCBpbiBjYXNlIHB1dHRlciBpcyBub3QgZG9uZSB5ZXQuCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZnVsbCgpIGFuZCBub3QgcHV0dGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgICAgICAjIFdlIHdlcmUgd29rZW4gdXAgYnkgZ2V0X25vd2FpdCgpLCBidXQgY2FuJ3QgdGFrZQorICAgICAgICAgICAgICAgICAgICAjIHRoZSBjYWxsLiAgV2FrZSB1cCB0aGUgbmV4dCBpbiBsaW5lLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93YWtldXBfbmV4dChzZWxmLl9wdXR0ZXJzKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBzZWxmLnB1dF9ub3dhaXQoaXRlbSkKKworICAgIGRlZiBwdXRfbm93YWl0KHNlbGYsIGl0ZW0pOgorICAgICAgICAiIiJQdXQgYW4gaXRlbSBpbnRvIHRoZSBxdWV1ZSB3aXRob3V0IGJsb2NraW5nLgorCisgICAgICAgIElmIG5vIGZyZWUgc2xvdCBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIHJhaXNlIFF1ZXVlRnVsbC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuZnVsbCgpOgorICAgICAgICAgICAgcmFpc2UgUXVldWVGdWxsCisgICAgICAgIHNlbGYuX3B1dChpdGVtKQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzICs9IDEKKyAgICAgICAgc2VsZi5fZmluaXNoZWQuY2xlYXIoKQorICAgICAgICBzZWxmLl93YWtldXBfbmV4dChzZWxmLl9nZXR0ZXJzKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBnZXQoc2VsZik6CisgICAgICAgICIiIlJlbW92ZSBhbmQgcmV0dXJuIGFuIGl0ZW0gZnJvbSB0aGUgcXVldWUuCisKKyAgICAgICAgSWYgcXVldWUgaXMgZW1wdHksIHdhaXQgdW50aWwgYW4gaXRlbSBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSBzZWxmLmVtcHR5KCk6CisgICAgICAgICAgICBnZXR0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYuX2xvb3ApCisgICAgICAgICAgICBzZWxmLl9nZXR0ZXJzLmFwcGVuZChnZXR0ZXIpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBnZXR0ZXIKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBnZXR0ZXIuY2FuY2VsKCkgICMgSnVzdCBpbiBjYXNlIGdldHRlciBpcyBub3QgZG9uZSB5ZXQuCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuZW1wdHkoKSBhbmQgbm90IGdldHRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICAgICAgIyBXZSB3ZXJlIHdva2VuIHVwIGJ5IHB1dF9ub3dhaXQoKSwgYnV0IGNhbid0IHRha2UKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgY2FsbC4gIFdha2UgdXAgdGhlIG5leHQgaW4gbGluZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FrZXVwX25leHQoc2VsZi5fZ2V0dGVycykKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gc2VsZi5nZXRfbm93YWl0KCkKKworICAgIGRlZiBnZXRfbm93YWl0KHNlbGYpOgorICAgICAgICAiIiJSZW1vdmUgYW5kIHJldHVybiBhbiBpdGVtIGZyb20gdGhlIHF1ZXVlLgorCisgICAgICAgIFJldHVybiBhbiBpdGVtIGlmIG9uZSBpcyBpbW1lZGlhdGVseSBhdmFpbGFibGUsIGVsc2UgcmFpc2UgUXVldWVFbXB0eS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuZW1wdHkoKToKKyAgICAgICAgICAgIHJhaXNlIFF1ZXVlRW1wdHkKKyAgICAgICAgaXRlbSA9IHNlbGYuX2dldCgpCisgICAgICAgIHNlbGYuX3dha2V1cF9uZXh0KHNlbGYuX3B1dHRlcnMpCisgICAgICAgIHJldHVybiBpdGVtCisKKyAgICBkZWYgdGFza19kb25lKHNlbGYpOgorICAgICAgICAiIiJJbmRpY2F0ZSB0aGF0IGEgZm9ybWVybHkgZW5xdWV1ZWQgdGFzayBpcyBjb21wbGV0ZS4KKworICAgICAgICBVc2VkIGJ5IHF1ZXVlIGNvbnN1bWVycy4gRm9yIGVhY2ggZ2V0KCkgdXNlZCB0byBmZXRjaCBhIHRhc2ssCisgICAgICAgIGEgc3Vic2VxdWVudCBjYWxsIHRvIHRhc2tfZG9uZSgpIHRlbGxzIHRoZSBxdWV1ZSB0aGF0IHRoZSBwcm9jZXNzaW5nCisgICAgICAgIG9uIHRoZSB0YXNrIGlzIGNvbXBsZXRlLgorCisgICAgICAgIElmIGEgam9pbigpIGlzIGN1cnJlbnRseSBibG9ja2luZywgaXQgd2lsbCByZXN1bWUgd2hlbiBhbGwgaXRlbXMgaGF2ZQorICAgICAgICBiZWVuIHByb2Nlc3NlZCAobWVhbmluZyB0aGF0IGEgdGFza19kb25lKCkgY2FsbCB3YXMgcmVjZWl2ZWQgZm9yIGV2ZXJ5CisgICAgICAgIGl0ZW0gdGhhdCBoYWQgYmVlbiBwdXQoKSBpbnRvIHRoZSBxdWV1ZSkuCisKKyAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgY2FsbGVkIG1vcmUgdGltZXMgdGhhbiB0aGVyZSB3ZXJlIGl0ZW1zIHBsYWNlZCBpbgorICAgICAgICB0aGUgcXVldWUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzIDw9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0YXNrX2RvbmUoKSBjYWxsZWQgdG9vIG1hbnkgdGltZXMnKQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzIC09IDEKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9PSAwOgorICAgICAgICAgICAgc2VsZi5fZmluaXNoZWQuc2V0KCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgam9pbihzZWxmKToKKyAgICAgICAgIiIiQmxvY2sgdW50aWwgYWxsIGl0ZW1zIGluIHRoZSBxdWV1ZSBoYXZlIGJlZW4gZ290dGVuIGFuZCBwcm9jZXNzZWQuCisKKyAgICAgICAgVGhlIGNvdW50IG9mIHVuZmluaXNoZWQgdGFza3MgZ29lcyB1cCB3aGVuZXZlciBhbiBpdGVtIGlzIGFkZGVkIHRvIHRoZQorICAgICAgICBxdWV1ZS4gVGhlIGNvdW50IGdvZXMgZG93biB3aGVuZXZlciBhIGNvbnN1bWVyIGNhbGxzIHRhc2tfZG9uZSgpIHRvCisgICAgICAgIGluZGljYXRlIHRoYXQgdGhlIGl0ZW0gd2FzIHJldHJpZXZlZCBhbmQgYWxsIHdvcmsgb24gaXQgaXMgY29tcGxldGUuCisgICAgICAgIFdoZW4gdGhlIGNvdW50IG9mIHVuZmluaXNoZWQgdGFza3MgZHJvcHMgdG8gemVybywgam9pbigpIHVuYmxvY2tzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA+IDA6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZpbmlzaGVkLndhaXQoKQorCisKK2NsYXNzIFByaW9yaXR5UXVldWUoUXVldWUpOgorICAgICIiIkEgc3ViY2xhc3Mgb2YgUXVldWU7IHJldHJpZXZlcyBlbnRyaWVzIGluIHByaW9yaXR5IG9yZGVyIChsb3dlc3QgZmlyc3QpLgorCisgICAgRW50cmllcyBhcmUgdHlwaWNhbGx5IHR1cGxlcyBvZiB0aGUgZm9ybTogKHByaW9yaXR5IG51bWJlciwgZGF0YSkuCisgICAgIiIiCisKKyAgICBkZWYgX2luaXQoc2VsZiwgbWF4c2l6ZSk6CisgICAgICAgIHNlbGYuX3F1ZXVlID0gW10KKworICAgIGRlZiBfcHV0KHNlbGYsIGl0ZW0sIGhlYXBwdXNoPWhlYXBxLmhlYXBwdXNoKToKKyAgICAgICAgaGVhcHB1c2goc2VsZi5fcXVldWUsIGl0ZW0pCisKKyAgICBkZWYgX2dldChzZWxmLCBoZWFwcG9wPWhlYXBxLmhlYXBwb3ApOgorICAgICAgICByZXR1cm4gaGVhcHBvcChzZWxmLl9xdWV1ZSkKKworCitjbGFzcyBMaWZvUXVldWUoUXVldWUpOgorICAgICIiIkEgc3ViY2xhc3Mgb2YgUXVldWUgdGhhdCByZXRyaWV2ZXMgbW9zdCByZWNlbnRseSBhZGRlZCBlbnRyaWVzIGZpcnN0LiIiIgorCisgICAgZGVmIF9pbml0KHNlbGYsIG1heHNpemUpOgorICAgICAgICBzZWxmLl9xdWV1ZSA9IFtdCisKKyAgICBkZWYgX3B1dChzZWxmLCBpdGVtKToKKyAgICAgICAgc2VsZi5fcXVldWUuYXBwZW5kKGl0ZW0pCisKKyAgICBkZWYgX2dldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3F1ZXVlLnBvcCgpCisKKworaWYgbm90IGNvbXBhdC5QWTM1OgorICAgIEpvaW5hYmxlUXVldWUgPSBRdWV1ZQorICAgICIiIkRlcHJlY2F0ZWQgYWxpYXMgZm9yIFF1ZXVlLiIiIgorICAgIF9fYWxsX18uYXBwZW5kKCdKb2luYWJsZVF1ZXVlJykKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weSBiL0xpYi9hc3luY2lvL3NlbGVjdG9yX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjI2NjMxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vc2VsZWN0b3JfZXZlbnRzLnB5CkBAIC0wLDAgKzEsMTA3MyBAQAorIiIiRXZlbnQgbG9vcCB1c2luZyBhIHNlbGVjdG9yIGFuZCByZWxhdGVkIGNsYXNzZXMuCisKK0Egc2VsZWN0b3IgaXMgYSAibm90aWZ5LXdoZW4tcmVhZHkiIG11bHRpcGxleGVyLiAgRm9yIGEgc3ViY2xhc3Mgd2hpY2gKK2Fsc28gaW5jbHVkZXMgc3VwcG9ydCBmb3Igc2lnbmFsIGhhbmRsaW5nLCBzZWUgdGhlIHVuaXhfZXZlbnRzIHN1Yi1tb2R1bGUuCisiIiIKKworX19hbGxfXyA9IFsnQmFzZVNlbGVjdG9yRXZlbnRMb29wJ10KKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB3YXJuaW5ncwordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIHNzbCA9IE5vbmUKKworZnJvbSAuIGltcG9ydCBiYXNlX2V2ZW50cworZnJvbSAuIGltcG9ydCBjb21wYXQKK2Zyb20gLiBpbXBvcnQgY29uc3RhbnRzCitmcm9tIC4gaW1wb3J0IGV2ZW50cworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC4gaW1wb3J0IHNzbHByb3RvCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworZGVmIF90ZXN0X3NlbGVjdG9yX2V2ZW50KHNlbGVjdG9yLCBmZCwgZXZlbnQpOgorICAgICMgVGVzdCBpZiB0aGUgc2VsZWN0b3IgaXMgbW9uaXRvcmluZyAnZXZlbnQnIGV2ZW50cworICAgICMgZm9yIHRoZSBmaWxlIGRlc2NyaXB0b3IgJ2ZkJy4KKyAgICB0cnk6CisgICAgICAgIGtleSA9IHNlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gYm9vbChrZXkuZXZlbnRzICYgZXZlbnQpCisKKworY2xhc3MgQmFzZVNlbGVjdG9yRXZlbnRMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorICAgICIiIlNlbGVjdG9yIGV2ZW50IGxvb3AuCisKKyAgICBTZWUgZXZlbnRzLkV2ZW50TG9vcCBmb3IgQVBJIHNwZWNpZmljYXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc2VsZWN0b3I9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorCisgICAgICAgIGlmIHNlbGVjdG9yIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxlY3RvciA9IHNlbGVjdG9ycy5EZWZhdWx0U2VsZWN0b3IoKQorICAgICAgICBsb2dnZXIuZGVidWcoJ1VzaW5nIHNlbGVjdG9yOiAlcycsIHNlbGVjdG9yLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBzZWxlY3RvcgorICAgICAgICBzZWxmLl9tYWtlX3NlbGZfcGlwZSgpCisKKyAgICBkZWYgX21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICByZXR1cm4gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYsIHNvY2ssIHByb3RvY29sLCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEsIHNlcnZlcikKKworICAgIGRlZiBfbWFrZV9zc2xfdHJhbnNwb3J0KHNlbGYsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBpZiBub3Qgc3NscHJvdG8uX2lzX3NzbHByb3RvX2F2YWlsYWJsZSgpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21ha2VfbGVnYWN5X3NzbF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgcmF3c29jaywgcHJvdG9jb2wsIHNzbGNvbnRleHQsIHdhaXRlciwKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1zZXJ2ZXJfc2lkZSwgc2VydmVyX2hvc3RuYW1lPXNlcnZlcl9ob3N0bmFtZSwKKyAgICAgICAgICAgICAgICBleHRyYT1leHRyYSwgc2VydmVyPXNlcnZlcikKKworICAgICAgICBzc2xfcHJvdG9jb2wgPSBzc2xwcm90by5TU0xQcm90b2NvbChzZWxmLCBwcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZSwgc2VydmVyX2hvc3RuYW1lKQorICAgICAgICBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoc2VsZiwgcmF3c29jaywgc3NsX3Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9ZXh0cmEsIHNlcnZlcj1zZXJ2ZXIpCisgICAgICAgIHJldHVybiBzc2xfcHJvdG9jb2wuX2FwcF90cmFuc3BvcnQKKworICAgIGRlZiBfbWFrZV9sZWdhY3lfc3NsX3RyYW5zcG9ydChzZWxmLCByYXdzb2NrLCBwcm90b2NvbCwgc3NsY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgIyBVc2UgdGhlIGxlZ2FjeSBBUEk6IFNTTF93cml0ZSwgU1NMX3JlYWQsIGV0Yy4gVGhlIGxlZ2FjeSBBUEkgaXMgdXNlZAorICAgICAgICAjIG9uIFB5dGhvbiAzLjQgYW5kIG9sZGVyLCB3aGVuIHNzbC5NZW1vcnlCSU8gaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgcmV0dXJuIF9TZWxlY3RvclNzbFRyYW5zcG9ydCgKKyAgICAgICAgICAgIHNlbGYsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZSwgc2VydmVyX2hvc3RuYW1lLCBleHRyYSwgc2VydmVyKQorCisgICAgZGVmIF9tYWtlX2RhdGFncmFtX3RyYW5zcG9ydChzZWxmLCBzb2NrLCBwcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M9Tm9uZSwgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICByZXR1cm4gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoc2VsZiwgc29jaywgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmlzX3J1bm5pbmcoKToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IGNsb3NlIGEgcnVubmluZyBldmVudCBsb29wIikKKyAgICAgICAgaWYgc2VsZi5pc19jbG9zZWQoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9jbG9zZV9zZWxmX3BpcGUoKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKyAgICAgICAgaWYgc2VsZi5fc2VsZWN0b3IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9zZWxlY3RvciA9IE5vbmUKKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIF9jbG9zZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihzZWxmLl9zc29jay5maWxlbm8oKSkKKyAgICAgICAgc2VsZi5fc3NvY2suY2xvc2UoKQorICAgICAgICBzZWxmLl9zc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5fY3NvY2suY2xvc2UoKQorICAgICAgICBzZWxmLl9jc29jayA9IE5vbmUKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzIC09IDEKKworICAgIGRlZiBfbWFrZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgICMgQSBzZWxmLXNvY2tldCwgcmVhbGx5LiA6LSkKKyAgICAgICAgc2VsZi5fc3NvY2ssIHNlbGYuX2Nzb2NrID0gc2VsZi5fc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuX3Nzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9jc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgc2VsZi5faW50ZXJuYWxfZmRzICs9IDEKKyAgICAgICAgc2VsZi5hZGRfcmVhZGVyKHNlbGYuX3Nzb2NrLmZpbGVubygpLCBzZWxmLl9yZWFkX2Zyb21fc2VsZikKKworICAgIGRlZiBfcHJvY2Vzc19zZWxmX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfcmVhZF9mcm9tX3NlbGYoc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3Nzb2NrLnJlY3YoNDA5NikKKyAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm9jZXNzX3NlbGZfZGF0YShkYXRhKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGV4Y2VwdCBCbG9ja2luZ0lPRXJyb3I6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgIGRlZiBfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgIyBUaGlzIG1heSBiZSBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQsIHBvc3NpYmx5IGFmdGVyCisgICAgICAgICMgX2Nsb3NlX3NlbGZfcGlwZSgpIGhhcyBiZWVuIGNhbGxlZCBvciBldmVuIHdoaWxlIGl0IGlzCisgICAgICAgICMgcnVubmluZy4gIEd1YXJkIGZvciBzZWxmLl9jc29jayBiZWluZyBOb25lIG9yIGNsb3NlZC4gIFdoZW4KKyAgICAgICAgIyBhIHNvY2tldCBpcyBjbG9zZWQsIHNlbmQoKSByYWlzZXMgT1NFcnJvciAod2l0aCBlcnJubyBzZXQgdG8KKyAgICAgICAgIyBFQkFERiwgYnV0IGxldCdzIG5vdCByZWx5IG9uIHRoZSBleGFjdCBlcnJvciBjb2RlKS4KKyAgICAgICAgY3NvY2sgPSBzZWxmLl9jc29jaworICAgICAgICBpZiBjc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjc29jay5zZW5kKGInXDAnKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVidWc6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiRmFpbCB0byB3cml0ZSBhIG51bGwgYnl0ZSBpbnRvIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2VsZi1waXBlIHNvY2tldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNfaW5mbz1UcnVlKQorCisgICAgZGVmIF9zdGFydF9zZXJ2aW5nKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQ9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzZWxmLmFkZF9yZWFkZXIoc29jay5maWxlbm8oKSwgc2VsZi5fYWNjZXB0X2Nvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbF9mYWN0b3J5LCBzb2NrLCBzc2xjb250ZXh0LCBzZXJ2ZXIpCisKKyAgICBkZWYgX2FjY2VwdF9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xjb250ZXh0PU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY29ubiwgYWRkciA9IHNvY2suYWNjZXB0KCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgZ290IGEgbmV3IGNvbm5lY3Rpb24gZnJvbSAlcjogJXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIsIGFkZHIsIGNvbm4pCisgICAgICAgICAgICBjb25uLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwgQ29ubmVjdGlvbkFib3J0ZWRFcnJvcik6CisgICAgICAgICAgICBwYXNzICAjIEZhbHNlIGFsYXJtLgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAjIFRoZXJlJ3Mgbm93aGVyZSB0byBzZW5kIHRoZSBlcnJvciwgc28ganVzdCBsb2cgaXQuCisgICAgICAgICAgICBpZiBleGMuZXJybm8gaW4gKGVycm5vLkVNRklMRSwgZXJybm8uRU5GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9CVUZTLCBlcnJuby5FTk9NRU0pOgorICAgICAgICAgICAgICAgICMgU29tZSBwbGF0Zm9ybXMgKGUuZy4gTGludXgga2VlcCByZXBvcnRpbmcgdGhlIEZEIGFzCisgICAgICAgICAgICAgICAgIyByZWFkeSwgc28gd2UgcmVtb3ZlIHRoZSByZWFkIGhhbmRsZXIgdGVtcG9yYXJpbHkuCisgICAgICAgICAgICAgICAgIyBXZSdsbCB0cnkgYWdhaW4gaW4gYSB3aGlsZS4KKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdzb2NrZXQuYWNjZXB0KCkgb3V0IG9mIHN5c3RlbSByZXNvdXJjZScsCisgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgICAgICdzb2NrZXQnOiBzb2NrLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKHNvY2suZmlsZW5vKCkpCisgICAgICAgICAgICAgICAgc2VsZi5jYWxsX2xhdGVyKGNvbnN0YW50cy5BQ0NFUFRfUkVUUllfREVMQVksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0X3NlcnZpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbGNvbnRleHQsIHNlcnZlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgICMgVGhlIGV2ZW50IGxvb3Agd2lsbCBjYXRjaCwgbG9nIGFuZCBpZ25vcmUgaXQuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleHRyYSA9IHsncGVlcm5hbWUnOiBhZGRyfQorICAgICAgICAgICAgYWNjZXB0ID0gc2VsZi5fYWNjZXB0X2Nvbm5lY3Rpb24yKHByb3RvY29sX2ZhY3RvcnksIGNvbm4sIGV4dHJhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQsIHNlcnZlcikKKyAgICAgICAgICAgIHNlbGYuY3JlYXRlX3Rhc2soYWNjZXB0KQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfYWNjZXB0X2Nvbm5lY3Rpb24yKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGNvbm4sIGV4dHJhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbGNvbnRleHQ9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBwcm90b2NvbCA9IE5vbmUKKyAgICAgICAgdHJhbnNwb3J0ID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcm90b2NvbCA9IHByb3RvY29sX2ZhY3RvcnkoKQorICAgICAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgaWYgc3NsY29udGV4dDoKKyAgICAgICAgICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX3NzbF90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgIGNvbm4sIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXI9d2FpdGVyLAorICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlLCBleHRyYT1leHRyYSwgc2VydmVyPXNlcnZlcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgICAgICBjb25uLCBwcm90b2NvbCwgd2FpdGVyPXdhaXRlciwgZXh0cmE9ZXh0cmEsCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcj1zZXJ2ZXIpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgIyBJdCdzIG5vdyB1cCB0byB0aGUgcHJvdG9jb2wgdG8gaGFuZGxlIHRoZSBjb25uZWN0aW9uLgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIHNlbGYuX2RlYnVnOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogKCdFcnJvciBvbiB0cmFuc3BvcnQgY3JlYXRpb24gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9yIGluY29taW5nIGNvbm5lY3Rpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgcHJvdG9jb2wgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHRbJ3Byb3RvY29sJ10gPSBwcm90b2NvbAorICAgICAgICAgICAgICAgIGlmIHRyYW5zcG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsndHJhbnNwb3J0J10gPSB0cmFuc3BvcnQKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dCkKKworICAgIGRlZiBhZGRfcmVhZGVyKHNlbGYsIGZkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBZGQgYSByZWFkZXIgY2FsbGJhY2suIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCisgICAgICAgIGhhbmRsZSA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX3NlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3NlbGVjdG9yLnJlZ2lzdGVyKGZkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoYW5kbGUsIE5vbmUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2sgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGFuZGxlLCB3cml0ZXIpKQorICAgICAgICAgICAgaWYgcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJlYWRlci5jYW5jZWwoKQorCisgICAgZGVmIHJlbW92ZV9yZWFkZXIoc2VsZiwgZmQpOgorICAgICAgICAiIiJSZW1vdmUgYSByZWFkZXIgY2FsbGJhY2suIiIiCisgICAgICAgIGlmIHNlbGYuaXNfY2xvc2VkKCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXNrLCAocmVhZGVyLCB3cml0ZXIpID0ga2V5LmV2ZW50cywga2V5LmRhdGEKKyAgICAgICAgICAgIG1hc2sgJj0gfnNlbGVjdG9ycy5FVkVOVF9SRUFECisgICAgICAgICAgICBpZiBub3QgbWFzazoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci51bnJlZ2lzdGVyKGZkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2ssIChOb25lLCB3cml0ZXIpKQorCisgICAgICAgICAgICBpZiByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmNhbmNlbCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgYWRkX3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgIiIiQWRkIGEgd3JpdGVyIGNhbGxiYWNrLi4iIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncywgc2VsZikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fc2VsZWN0b3IuZ2V0X2tleShmZCkKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc2VsZWN0b3IucmVnaXN0ZXIoZmQsIHNlbGVjdG9ycy5FVkVOVF9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCBoYW5kbGUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2sgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlYWRlciwgaGFuZGxlKSkKKyAgICAgICAgICAgIGlmIHdyaXRlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3cml0ZXIuY2FuY2VsKCkKKworICAgIGRlZiByZW1vdmVfd3JpdGVyKHNlbGYsIGZkKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgd3JpdGVyIGNhbGxiYWNrLiIiIgorICAgICAgICBpZiBzZWxmLmlzX2Nsb3NlZCgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX3NlbGVjdG9yLmdldF9rZXkoZmQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbWFzaywgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5ldmVudHMsIGtleS5kYXRhCisgICAgICAgICAgICAjIFJlbW92ZSBib3RoIHdyaXRlciBhbmQgY29ubmVjdG9yLgorICAgICAgICAgICAgbWFzayAmPSB+c2VsZWN0b3JzLkVWRU5UX1dSSVRFCisgICAgICAgICAgICBpZiBub3QgbWFzazoKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci51bnJlZ2lzdGVyKGZkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZWxlY3Rvci5tb2RpZnkoZmQsIG1hc2ssIChyZWFkZXIsIE5vbmUpKQorCisgICAgICAgICAgICBpZiB3cml0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgd3JpdGVyLmNhbmNlbCgpCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgc29ja19yZWN2KHNlbGYsIHNvY2ssIG4pOgorICAgICAgICAiIiJSZWNlaXZlIGRhdGEgZnJvbSB0aGUgc29ja2V0LgorCisgICAgICAgIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBieXRlcyBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBkYXRhIHJlY2VpdmVkLgorICAgICAgICBUaGUgbWF4aW11bSBhbW91bnQgb2YgZGF0YSB0byBiZSByZWNlaXZlZCBhdCBvbmNlIGlzIHNwZWNpZmllZCBieQorICAgICAgICBuYnl0ZXMuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9kZWJ1ZyBhbmQgc29jay5nZXR0aW1lb3V0KCkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRoZSBzb2NrZXQgbXVzdCBiZSBub24tYmxvY2tpbmciKQorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHNlbGYuX3NvY2tfcmVjdihmdXQsIEZhbHNlLCBzb2NrLCBuKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfcmVjdihzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2ssIG4pOgorICAgICAgICAjIF9zb2NrX3JlY3YoKSBjYW4gYWRkIGl0c2VsZiBhcyBhbiBJL08gY2FsbGJhY2sgaWYgdGhlIG9wZXJhdGlvbiBjYW4ndAorICAgICAgICAjIGJlIGRvbmUgaW1tZWRpYXRlbHkuIERvbid0IHVzZSBpdCBkaXJlY3RseSwgY2FsbCBzb2NrX3JlY3YoKS4KKyAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgIGlmIHJlZ2lzdGVyZWQ6CisgICAgICAgICAgICAjIFJlbW92ZSB0aGUgY2FsbGJhY2sgZWFybHkuICBJdCBzaG91bGQgYmUgcmFyZSB0aGF0IHRoZQorICAgICAgICAgICAgIyBzZWxlY3RvciBzYXlzIHRoZSBmZCBpcyByZWFkeSBidXQgdGhlIGNhbGwgc3RpbGwgcmV0dXJucworICAgICAgICAgICAgIyBFQUdBSU4sIGFuZCBJIGFtIHdpbGxpbmcgdG8gdGFrZSBhIGhpdCBpbiB0aGF0IGNhc2UgaW4KKyAgICAgICAgICAgICMgb3JkZXIgdG8gc2ltcGxpZnkgdGhlIGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGF0YSA9IHNvY2sucmVjdihuKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFkZF9yZWFkZXIoZmQsIHNlbGYuX3NvY2tfcmVjdiwgZnV0LCBUcnVlLCBzb2NrLCBuKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KGRhdGEpCisKKyAgICBkZWYgc29ja19zZW5kYWxsKHNlbGYsIHNvY2ssIGRhdGEpOgorICAgICAgICAiIiJTZW5kIGRhdGEgdG8gdGhlIHNvY2tldC4KKworICAgICAgICBUaGUgc29ja2V0IG11c3QgYmUgY29ubmVjdGVkIHRvIGEgcmVtb3RlIHNvY2tldC4gVGhpcyBtZXRob2QgY29udGludWVzCisgICAgICAgIHRvIHNlbmQgZGF0YSBmcm9tIGRhdGEgdW50aWwgZWl0aGVyIGFsbCBkYXRhIGhhcyBiZWVuIHNlbnQgb3IgYW4KKyAgICAgICAgZXJyb3Igb2NjdXJzLiBOb25lIGlzIHJldHVybmVkIG9uIHN1Y2Nlc3MuIE9uIGVycm9yLCBhbiBleGNlcHRpb24gaXMKKyAgICAgICAgcmFpc2VkLCBhbmQgdGhlcmUgaXMgbm8gd2F5IHRvIGRldGVybWluZSBob3cgbXVjaCBkYXRhLCBpZiBhbnksIHdhcworICAgICAgICBzdWNjZXNzZnVsbHkgcHJvY2Vzc2VkIGJ5IHRoZSByZWNlaXZpbmcgZW5kIG9mIHRoZSBjb25uZWN0aW9uLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fZGVidWcgYW5kIHNvY2suZ2V0dGltZW91dCgpICE9IDA6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ0aGUgc29ja2V0IG11c3QgYmUgbm9uLWJsb2NraW5nIikKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgc2VsZi5fc29ja19zZW5kYWxsKGZ1dCwgRmFsc2UsIHNvY2ssIGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICByZXR1cm4gZnV0CisKKyAgICBkZWYgX3NvY2tfc2VuZGFsbChzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2ssIGRhdGEpOgorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKworICAgICAgICBpZiByZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZkKQorICAgICAgICBpZiBmdXQuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBuID0gc29jay5zZW5kKGRhdGEpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIG4gPSAwCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbiA9PSBsZW4oZGF0YSk6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgbjoKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YVtuOl0KKyAgICAgICAgICAgIHNlbGYuYWRkX3dyaXRlcihmZCwgc2VsZi5fc29ja19zZW5kYWxsLCBmdXQsIFRydWUsIHNvY2ssIGRhdGEpCisKKyAgICBkZWYgc29ja19jb25uZWN0KHNlbGYsIHNvY2ssIGFkZHJlc3MpOgorICAgICAgICAiIiJDb25uZWN0IHRvIGEgcmVtb3RlIHNvY2tldCBhdCBhZGRyZXNzLgorCisgICAgICAgIFRoZSBhZGRyZXNzIG11c3QgYmUgYWxyZWFkeSByZXNvbHZlZCB0byBhdm9pZCB0aGUgdHJhcCBvZiBoYW5naW5nIHRoZQorICAgICAgICBlbnRpcmUgZXZlbnQgbG9vcCB3aGVuIHRoZSBhZGRyZXNzIHJlcXVpcmVzIGRvaW5nIGEgRE5TIGxvb2t1cC4gRm9yCisgICAgICAgIGV4YW1wbGUsIGl0IG11c3QgYmUgYW4gSVAgYWRkcmVzcywgbm90IGFuIGhvc3RuYW1lLCBmb3IgQUZfSU5FVCBhbmQKKyAgICAgICAgQUZfSU5FVDYgYWRkcmVzcyBmYW1pbGllcy4gVXNlIGdldGFkZHJpbmZvKCkgdG8gcmVzb2x2ZSB0aGUgaG9zdG5hbWUKKyAgICAgICAgYXN5bmNocm9ub3VzbHkuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgYSBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9kZWJ1ZyBhbmQgc29jay5nZXR0aW1lb3V0KCkgIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRoZSBzb2NrZXQgbXVzdCBiZSBub24tYmxvY2tpbmciKQorICAgICAgICBmdXQgPSBmdXR1cmVzLkZ1dHVyZShsb29wPXNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssIGFkZHJlc3MpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGZ1dC5zZXRfZXhjZXB0aW9uKGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NvY2tfY29ubmVjdChmdXQsIHNvY2ssIGFkZHJlc3MpCisgICAgICAgIHJldHVybiBmdXQKKworICAgIGRlZiBfc29ja19jb25uZWN0KHNlbGYsIGZ1dCwgc29jaywgYWRkcmVzcyk6CisgICAgICAgIGZkID0gc29jay5maWxlbm8oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb2NrLmNvbm5lY3QoYWRkcmVzcykKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgIyBJc3N1ZSAjMjM2MTg6IFdoZW4gdGhlIEMgZnVuY3Rpb24gY29ubmVjdCgpIGZhaWxzIHdpdGggRUlOVFIsIHRoZQorICAgICAgICAgICAgIyBjb25uZWN0aW9uIHJ1bnMgaW4gYmFja2dyb3VuZC4gV2UgaGF2ZSB0byB3YWl0IHVudGlsIHRoZSBzb2NrZXQKKyAgICAgICAgICAgICMgYmVjb21lcyB3cml0YWJsZSB0byBiZSBub3RpZmllZCB3aGVuIHRoZSBjb25uZWN0aW9uIHN1Y2NlZWQgb3IKKyAgICAgICAgICAgICMgZmFpbHMuCisgICAgICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soZnVuY3Rvb2xzLnBhcnRpYWwoc2VsZi5fc29ja19jb25uZWN0X2RvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQpKQorICAgICAgICAgICAgc2VsZi5hZGRfd3JpdGVyKGZkLCBzZWxmLl9zb2NrX2Nvbm5lY3RfY2IsIGZ1dCwgc29jaywgYWRkcmVzcykKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIF9zb2NrX2Nvbm5lY3RfZG9uZShzZWxmLCBmZCwgZnV0KToKKyAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyKGZkKQorCisgICAgZGVmIF9zb2NrX2Nvbm5lY3RfY2Ioc2VsZiwgZnV0LCBzb2NrLCBhZGRyZXNzKToKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXJyID0gc29jay5nZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fRVJST1IpCisgICAgICAgICAgICBpZiBlcnIgIT0gMDoKKyAgICAgICAgICAgICAgICAjIEp1bXAgdG8gYW55IGV4Y2VwdCBjbGF1c2UgYmVsb3cuCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIsICdDb25uZWN0IGNhbGwgZmFpbGVkICVzJyAlIChhZGRyZXNzLCkpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICMgc29ja2V0IGlzIHN0aWxsIHJlZ2lzdGVyZWQsIHRoZSBjYWxsYmFjayB3aWxsIGJlIHJldHJpZWQgbGF0ZXIKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIHNvY2tfYWNjZXB0KHNlbGYsIHNvY2spOgorICAgICAgICAiIiJBY2NlcHQgYSBjb25uZWN0aW9uLgorCisgICAgICAgIFRoZSBzb2NrZXQgbXVzdCBiZSBib3VuZCB0byBhbiBhZGRyZXNzIGFuZCBsaXN0ZW5pbmcgZm9yIGNvbm5lY3Rpb25zLgorICAgICAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcGFpciAoY29ubiwgYWRkcmVzcykgd2hlcmUgY29ubiBpcyBhIG5ldyBzb2NrZXQKKyAgICAgICAgb2JqZWN0IHVzYWJsZSB0byBzZW5kIGFuZCByZWNlaXZlIGRhdGEgb24gdGhlIGNvbm5lY3Rpb24sIGFuZCBhZGRyZXNzCisgICAgICAgIGlzIHRoZSBhZGRyZXNzIGJvdW5kIHRvIHRoZSBzb2NrZXQgb24gdGhlIG90aGVyIGVuZCBvZiB0aGUgY29ubmVjdGlvbi4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBhIGNvcm91dGluZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2RlYnVnIGFuZCBzb2NrLmdldHRpbWVvdXQoKSAhPSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidGhlIHNvY2tldCBtdXN0IGJlIG5vbi1ibG9ja2luZyIpCisgICAgICAgIGZ1dCA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgc2VsZi5fc29ja19hY2NlcHQoZnV0LCBGYWxzZSwgc29jaykKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF9zb2NrX2FjY2VwdChzZWxmLCBmdXQsIHJlZ2lzdGVyZWQsIHNvY2spOgorICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgaWYgcmVnaXN0ZXJlZDoKKyAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihmZCkKKyAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbm4sIGFkZHJlc3MgPSBzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBjb25uLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmFkZF9yZWFkZXIoZmQsIHNlbGYuX3NvY2tfYWNjZXB0LCBmdXQsIFRydWUsIHNvY2spCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgZnV0LnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoKGNvbm4sIGFkZHJlc3MpKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgZm9yIGtleSwgbWFzayBpbiBldmVudF9saXN0OgorICAgICAgICAgICAgZmlsZW9iaiwgKHJlYWRlciwgd3JpdGVyKSA9IGtleS5maWxlb2JqLCBrZXkuZGF0YQorICAgICAgICAgICAgaWYgbWFzayAmIHNlbGVjdG9ycy5FVkVOVF9SRUFEIGFuZCByZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgcmVhZGVyLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcihmaWxlb2JqKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFjayhyZWFkZXIpCisgICAgICAgICAgICBpZiBtYXNrICYgc2VsZWN0b3JzLkVWRU5UX1dSSVRFIGFuZCB3cml0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgd3JpdGVyLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcihmaWxlb2JqKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFjayh3cml0ZXIpCisKKyAgICBkZWYgX3N0b3Bfc2VydmluZyhzZWxmLCBzb2NrKToKKyAgICAgICAgc2VsZi5yZW1vdmVfcmVhZGVyKHNvY2suZmlsZW5vKCkpCisgICAgICAgIHNvY2suY2xvc2UoKQorCisKK2NsYXNzIF9TZWxlY3RvclRyYW5zcG9ydCh0cmFuc3BvcnRzLl9GbG93Q29udHJvbE1peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKworICAgIG1heF9zaXplID0gMjU2ICogMTAyNCAgIyBCdWZmZXIgc2l6ZSBwYXNzZWQgdG8gcmVjdigpLgorCisgICAgX2J1ZmZlcl9mYWN0b3J5ID0gYnl0ZWFycmF5ICAjIENvbnN0cnVjdHMgaW5pdGlhbCB2YWx1ZSBmb3Igc2VsZi5fYnVmZmVyLgorCisgICAgIyBBdHRyaWJ1dGUgdXNlZCBpbiB0aGUgZGVzdHJ1Y3RvcjogaXQgbXVzdCBiZSBzZXQgZXZlbiBpZiB0aGUgY29uc3RydWN0b3IKKyAgICAjIGlzIG5vdCBjYWxsZWQgKHNlZSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQgd2hpY2ggbWF5IHN0YXJ0IGJ5IHJhaXNpbmcgYW4KKyAgICAjIGV4Y2VwdGlvbikKKyAgICBfc29jayA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgZXh0cmE9Tm9uZSwgc2VydmVyPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhLCBsb29wKQorICAgICAgICBzZWxmLl9leHRyYVsnc29ja2V0J10gPSBzb2NrCisgICAgICAgIHNlbGYuX2V4dHJhWydzb2NrbmFtZSddID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIGlmICdwZWVybmFtZScgbm90IGluIHNlbGYuX2V4dHJhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gc29jay5nZXRwZWVybmFtZSgpCisgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgICAgIHNlbGYuX2V4dHJhWydwZWVybmFtZSddID0gTm9uZQorICAgICAgICBzZWxmLl9zb2NrID0gc29jaworICAgICAgICBzZWxmLl9zb2NrX2ZkID0gc29jay5maWxlbm8oKQorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX3Byb3RvY29sX2Nvbm5lY3RlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fc2VydmVyID0gc2VydmVyCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcl9mYWN0b3J5KCkKKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMCAgIyBTZXQgd2hlbiBjYWxsIHRvIGNvbm5lY3Rpb25fbG9zdCBzY2hlZHVsZWQuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBGYWxzZSAgIyBTZXQgd2hlbiBjbG9zZSgpIGNhbGxlZC4KKyAgICAgICAgaWYgc2VsZi5fc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fc2VydmVyLl9hdHRhY2goKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX19jbGFzc19fLl9fbmFtZV9fXQorICAgICAgICBpZiBzZWxmLl9zb2NrIGlzIE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2VkJykKKyAgICAgICAgZWxpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2Nsb3NpbmcnKQorICAgICAgICBpbmZvLmFwcGVuZCgnZmQ9JXMnICUgc2VsZi5fc29ja19mZCkKKyAgICAgICAgIyB0ZXN0IGlmIHRoZSB0cmFuc3BvcnQgd2FzIGNsb3NlZAorICAgICAgICBpZiBzZWxmLl9sb29wIGlzIG5vdCBOb25lIGFuZCBub3Qgc2VsZi5fbG9vcC5pc19jbG9zZWQoKToKKyAgICAgICAgICAgIHBvbGxpbmcgPSBfdGVzdF9zZWxlY3Rvcl9ldmVudChzZWxmLl9sb29wLl9zZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrX2ZkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIGlmIHBvbGxpbmc6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3JlYWQ9cG9sbGluZycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdyZWFkPWlkbGUnKQorCisgICAgICAgICAgICBwb2xsaW5nID0gX3Rlc3Rfc2VsZWN0b3JfZXZlbnQoc2VsZi5fbG9vcC5fc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29ja19mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBpZiBwb2xsaW5nOgorICAgICAgICAgICAgICAgIHN0YXRlID0gJ3BvbGxpbmcnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHN0YXRlID0gJ2lkbGUnCisKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBzZWxmLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpCisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnd3JpdGU9PCVzLCBidWZzaXplPSVzPicgJSAoc3RhdGUsIGJ1ZnNpemUpKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgc2VsZi5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgIGRlZiBpc19jbG9zaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2xvc2luZworCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBOb25lKQorCisgICAgIyBPbiBQeXRob24gMy4zIGFuZCBvbGRlciwgb2JqZWN0cyB3aXRoIGEgZGVzdHJ1Y3RvciBwYXJ0IG9mIGEgcmVmZXJlbmNlCisgICAgIyBjeWNsZSBhcmUgbmV2ZXIgZGVzdHJveWVkLiBJdCdzIG5vdCBtb3JlIHRoZSBjYXNlIG9uIFB5dGhvbiAzLjQgdGhhbmtzCisgICAgIyB0byB0aGUgUEVQIDQ0Mi4KKyAgICBpZiBjb21wYXQuUFkzNDoKKyAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLl9zb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInVuY2xvc2VkIHRyYW5zcG9ydCAlciIgJSBzZWxmLCBSZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4YywgbWVzc2FnZT0nRmF0YWwgZXJyb3Igb24gdHJhbnNwb3J0Jyk6CisgICAgICAgICMgU2hvdWxkIGJlIGNhbGxlZCBmcm9tIGV4Y2VwdGlvbiBoYW5kbGVyIG9ubHkuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbm5lY3Rpb25SZXNldEVycm9yLCBDb25uZWN0aW9uQWJvcnRlZEVycm9yKSk6CisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXI6ICVzIiwgc2VsZiwgbWVzc2FnZSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiBtZXNzYWdlLAorICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgJ3RyYW5zcG9ydCc6IHNlbGYsCisgICAgICAgICAgICAgICAgJ3Byb3RvY29sJzogc2VsZi5fcHJvdG9jb2wsCisgICAgICAgICAgICB9KQorICAgICAgICBzZWxmLl9mb3JjZV9jbG9zZShleGMpCisKKyAgICBkZWYgX2ZvcmNlX2Nsb3NlKHNlbGYsIGV4Yyk6CisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBzZWxmLl9wcm90b2NvbF9jb25uZWN0ZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0KGV4YykKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3NvY2suY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fc29jayA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgICAgIHNlcnZlciA9IHNlbGYuX3NlcnZlcgorICAgICAgICAgICAgaWYgc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlcnZlci5fZGV0YWNoKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXIgPSBOb25lCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX2J1ZmZlcikKKworCitjbGFzcyBfU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBzb2NrLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsIHNlcnZlcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzb2NrLCBwcm90b2NvbCwgZXh0cmEsIHNlcnZlcikKKyAgICAgICAgc2VsZi5fZW9mID0gRmFsc2UKKyAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKworICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX21hZGUsIHNlbGYpCisgICAgICAgICMgb25seSBzdGFydCByZWFkaW5nIHdoZW4gY29ubmVjdGlvbl9tYWRlKCkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2xvb3AuYWRkX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBvbmx5IHdha2UgdXAgdGhlIHdhaXRlciB3aGVuIGNvbm5lY3Rpb25fbWFkZSgpIGhhcyBiZWVuIGNhbGxlZAorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oZnV0dXJlcy5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyLCBOb25lKQorCisgICAgZGVmIHBhdXNlX3JlYWRpbmcoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5vdCBwYXVzZV9yZWFkaW5nKCkgd2hlbiBjbG9zaW5nJykKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdBbHJlYWR5IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHBhdXNlcyByZWFkaW5nIiwgc2VsZikKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHJlc3VtZXMgcmVhZGluZyIsIHNlbGYpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9zb2NrLnJlY3Yoc2VsZi5tYXhfc2l6ZSkKKyAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gc29ja2V0IHRyYW5zcG9ydCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciByZWNlaXZlZCBFT0YiLCBzZWxmKQorICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgaWYga2VlcF9vcGVuOgorICAgICAgICAgICAgICAgICAgICAjIFdlJ3JlIGtlZXBpbmcgdGhlIGNvbm5lY3Rpb24gb3BlbiBzbyB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBjYW4gd3JpdGUgbW9yZSwgYnV0IHdlIHN0aWxsIGNhbid0CisgICAgICAgICAgICAgICAgICAgICMgcmVjZWl2ZSBtb3JlLCBzbyByZW1vdmUgdGhlIHJlYWRlciBjYWxsYmFjay4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2RhdGEgYXJndW1lbnQgbXVzdCBiZSBieXRlLWlzaCAoJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGRhdGEpKQorICAgICAgICBpZiBzZWxmLl9lb2Y6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5vdCBjYWxsIHdyaXRlKCkgYWZ0ZXIgd3JpdGVfZW9mKCknKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgIyBPcHRpbWl6YXRpb246IHRyeSB0byBzZW5kIG5vdy4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuID0gc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgd3JpdGUgZXJyb3Igb24gc29ja2V0IHRyYW5zcG9ydCcpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhW246XQorICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICMgTm90IGFsbCB3YXMgd3JpdHRlbjsgcmVnaXN0ZXIgd3JpdGUgaGFuZGxlci4KKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICAjIEFkZCBpdCB0byB0aGUgYnVmZmVyLgorICAgICAgICBzZWxmLl9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLl9idWZmZXIsICdEYXRhIHNob3VsZCBub3QgYmUgZW1wdHknCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbiA9IHNlbGYuX3NvY2suc2VuZChzZWxmLl9idWZmZXIpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCB3cml0ZSBlcnJvciBvbiBzb2NrZXQgdHJhbnNwb3J0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG46CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6bl0KKyAgICAgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV9wcm90b2NvbCgpICAjIE1heSBhcHBlbmQgdG8gYnVmZmVyLgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2VvZiA9IFRydWUKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX3NvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfV1IpCisKKyAgICBkZWYgY2FuX3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworCitjbGFzcyBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoX1NlbGVjdG9yVHJhbnNwb3J0KToKKworICAgIF9idWZmZXJfZmFjdG9yeSA9IGJ5dGVhcnJheQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHJhd3NvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgc2VydmVyX3NpZGU9RmFsc2UsIHNlcnZlcl9ob3N0bmFtZT1Ob25lLAorICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCBzZXJ2ZXI9Tm9uZSk6CisgICAgICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzdGRsaWIgc3NsIG1vZHVsZSBub3QgYXZhaWxhYmxlJykKKworICAgICAgICBpZiBub3Qgc3NsY29udGV4dDoKKyAgICAgICAgICAgIHNzbGNvbnRleHQgPSBzc2xwcm90by5fY3JlYXRlX3RyYW5zcG9ydF9jb250ZXh0KHNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWUpCisKKyAgICAgICAgd3JhcF9rd2FyZ3MgPSB7CisgICAgICAgICAgICAnc2VydmVyX3NpZGUnOiBzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICdkb19oYW5kc2hha2Vfb25fY29ubmVjdCc6IEZhbHNlLAorICAgICAgICB9CisgICAgICAgIGlmIHNlcnZlcl9ob3N0bmFtZSBhbmQgbm90IHNlcnZlcl9zaWRlOgorICAgICAgICAgICAgd3JhcF9rd2FyZ3NbJ3NlcnZlcl9ob3N0bmFtZSddID0gc2VydmVyX2hvc3RuYW1lCisgICAgICAgIHNzbHNvY2sgPSBzc2xjb250ZXh0LndyYXBfc29ja2V0KHJhd3NvY2ssICoqd3JhcF9rd2FyZ3MpCisKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzc2xzb2NrLCBwcm90b2NvbCwgZXh0cmEsIHNlcnZlcikKKyAgICAgICAgIyB0aGUgcHJvdG9jb2wgY29ubmVjdGlvbiBpcyBvbmx5IG1hZGUgYWZ0ZXIgdGhlIFNTTCBoYW5kc2hha2UKKyAgICAgICAgc2VsZi5fcHJvdG9jb2xfY29ubmVjdGVkID0gRmFsc2UKKworICAgICAgICBzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUgPSBzZXJ2ZXJfaG9zdG5hbWUKKyAgICAgICAgc2VsZi5fd2FpdGVyID0gd2FpdGVyCisgICAgICAgIHNlbGYuX3NzbGNvbnRleHQgPSBzc2xjb250ZXh0CisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisKKyAgICAgICAgIyBTU0wtc3BlY2lmaWMgZXh0cmEgaW5mby4gIChwZWVyY2VydCBpcyBzZXQgbGF0ZXIpCisgICAgICAgIHNlbGYuX2V4dHJhLnVwZGF0ZShzc2xjb250ZXh0PXNzbGNvbnRleHQpCisKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgc3RhcnRzIFNTTCBoYW5kc2hha2UiLCBzZWxmKQorICAgICAgICAgICAgc3RhcnRfdGltZSA9IHNlbGYuX2xvb3AudGltZSgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGFydF90aW1lID0gTm9uZQorICAgICAgICBzZWxmLl9vbl9oYW5kc2hha2Uoc3RhcnRfdGltZSkKKworICAgIGRlZiBfd2FrZXVwX3dhaXRlcihzZWxmLCBleGM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBzZWxmLl93YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisKKyAgICBkZWYgX29uX2hhbmRzaGFrZShzZWxmLCBzdGFydF90aW1lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc29jay5kb19oYW5kc2hha2UoKQorICAgICAgICBleGNlcHQgc3NsLlNTTFdhbnRSZWFkRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9vbl9oYW5kc2hha2UsIHN0YXJ0X3RpbWUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50V3JpdGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29uX2hhbmRzaGFrZSwgc3RhcnRfdGltZSkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCIlcjogU1NMIGhhbmRzaGFrZSBmYWlsZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGV4Y19pbmZvPVRydWUpCisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fc29ja19mZCkKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl93YWtldXBfd2FpdGVyKGV4YykKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV93cml0ZXIoc2VsZi5fc29ja19mZCkKKworICAgICAgICBwZWVyY2VydCA9IHNlbGYuX3NvY2suZ2V0cGVlcmNlcnQoKQorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLl9zc2xjb250ZXh0LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgICMgVmVyaWZ5IGhvc3RuYW1lIGlmIHJlcXVlc3RlZCwgUHl0aG9uIDMuNCsgdXNlcyBjaGVja19ob3N0bmFtZQorICAgICAgICAgICAgIyBhbmQgY2hlY2tzIHRoZSBob3N0bmFtZSBpbiBkb19oYW5kc2hha2UoKQorICAgICAgICAgICAgaWYgKHNlbGYuX3NlcnZlcl9ob3N0bmFtZSBhbmQKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xjb250ZXh0LnZlcmlmeV9tb2RlICE9IHNzbC5DRVJUX05PTkUpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3NsLm1hdGNoX2hvc3RuYW1lKHBlZXJjZXJ0LCBzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiJXI6IFNTTCBoYW5kc2hha2UgZmFpbGVkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBtYXRjaGluZyB0aGUgaG9zdG5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dha2V1cF93YWl0ZXIoZXhjKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEFkZCBleHRyYSBpbmZvIHRoYXQgYmVjb21lcyBhdmFpbGFibGUgYWZ0ZXIgaGFuZHNoYWtlLgorICAgICAgICBzZWxmLl9leHRyYS51cGRhdGUocGVlcmNlcnQ9cGVlcmNlcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXBoZXI9c2VsZi5fc29jay5jaXBoZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXByZXNzaW9uPXNlbGYuX3NvY2suY29tcHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9vYmplY3Q9c2VsZi5fc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gRmFsc2UKKyAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2xvb3AuYWRkX3JlYWRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBzZWxmLl9wcm90b2NvbF9jb25uZWN0ZWQgPSBUcnVlCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgIyBvbmx5IHdha2UgdXAgdGhlIHdhaXRlciB3aGVuIGNvbm5lY3Rpb25fbWFkZSgpIGhhcyBiZWVuIGNhbGxlZAorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl93YWtldXBfd2FpdGVyKQorCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBkdCA9IHNlbGYuX2xvb3AudGltZSgpIC0gc3RhcnRfdGltZQorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlcjogU1NMIGhhbmRzaGFrZSB0b29rICUuMWYgbXMiLCBzZWxmLCBkdCAqIDFlMykKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICAjIFhYWCBUaGlzIGlzIGEgYml0IGlja3ksIGdpdmVuIHRoZSBjb21tZW50IGF0IHRoZSB0b3Agb2YKKyAgICAgICAgIyBfcmVhZF9yZWFkeSgpLiAgSXMgaXQgcG9zc2libGUgdG8gZXZva2UgYSBkZWFkbG9jaz8gIEkgZG9uJ3QKKyAgICAgICAgIyBrbm93LCBhbHRob3VnaCBpdCBkb2Vzbid0IGxvb2sgbGlrZSBpdDsgd3JpdGUoKSB3aWxsIHN0aWxsCisgICAgICAgICMgYWNjZXB0IG1vcmUgZGF0YSBmb3IgdGhlIGJ1ZmZlciBhbmQgZXZlbnR1YWxseSB0aGUgYXBwIHdpbGwKKyAgICAgICAgIyBjYWxsIHJlc3VtZV9yZWFkaW5nKCkgYWdhaW4sIGFuZCB0aGluZ3Mgd2lsbCBmbG93IGFnYWluLgorCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ0Nhbm5vdCBwYXVzZV9yZWFkaW5nKCkgd2hlbiBjbG9zaW5nJykKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdBbHJlYWR5IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHBhdXNlcyByZWFkaW5nIiwgc2VsZikKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignTm90IHBhdXNlZCcpCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fbG9vcC5hZGRfcmVhZGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3JlYWRfcmVhZHkpCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHJlc3VtZXMgcmVhZGluZyIsIHNlbGYpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3dyaXRlX3dhbnRzX3JlYWQ6CisgICAgICAgICAgICBzZWxmLl93cml0ZV93YW50c19yZWFkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3JlYWR5KCkKKworICAgICAgICAgICAgaWYgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuYWRkX3dyaXRlcihzZWxmLl9zb2NrX2ZkLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gc2VsZi5fc29jay5yZWN2KHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yLCBzc2wuU1NMV2FudFJlYWRFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGV4Y2VwdCBzc2wuU1NMV2FudFdyaXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fd3JpdGVfcmVhZHkpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgcmVhZCBlcnJvciBvbiBTU0wgdHJhbnNwb3J0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChkYXRhKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHJlY2VpdmVkIEVPRiIsIHNlbGYpCisgICAgICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdyZXR1cm5pbmcgdHJ1ZSBmcm9tIGVvZl9yZWNlaXZlZCgpICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXMgbm8gZWZmZWN0IHdoZW4gdXNpbmcgc3NsJykKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3JlYWRfd2FudHNfd3JpdGU6CisgICAgICAgICAgICBzZWxmLl9yZWFkX3dhbnRzX3dyaXRlID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3JlYWRfcmVhZHkoKQorCisgICAgICAgICAgICBpZiBub3QgKHNlbGYuX3BhdXNlZCBvciBzZWxmLl9jbG9zaW5nKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fc29ja19mZCwgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IHNlbGYuX3NvY2suc2VuZChzZWxmLl9idWZmZXIpCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvciwgc3NsLlNTTFdhbnRXcml0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xXYW50UmVhZEVycm9yOgorICAgICAgICAgICAgICAgIG4gPSAwCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfd2FudHNfcmVhZCA9IFRydWUKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgd3JpdGUgZXJyb3Igb24gU1NMIHRyYW5zcG9ydCcpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIGlmIG46CisgICAgICAgICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6bl0KKworICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfcHJvdG9jb2woKSAgIyBNYXkgYXBwZW5kIHRvIGJ1ZmZlci4KKworICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX3NvY2tfZmQpCisgICAgICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0KE5vbmUpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2RhdGEgYXJndW1lbnQgbXVzdCBiZSBieXRlLWlzaCAoJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGRhdGEpKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdDoKKyAgICAgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCA+PSBjb25zdGFudHMuTE9HX1RIUkVTSE9MRF9GT1JfQ09OTkxPU1RfV1JJVEVTOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCdzb2NrZXQuc2VuZCgpIHJhaXNlZCBleGNlcHRpb24uJykKKyAgICAgICAgICAgIHNlbGYuX2Nvbm5fbG9zdCArPSAxCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyOgorICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3dyaXRlX3JlYWR5KQorCisgICAgICAgICMgQWRkIGl0IHRvIHRoZSBidWZmZXIuCisgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2NsYXNzIF9TZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0KF9TZWxlY3RvclRyYW5zcG9ydCk6CisKKyAgICBfYnVmZmVyX2ZhY3RvcnkgPSBjb2xsZWN0aW9ucy5kZXF1ZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNvY2ssIHByb3RvY29sLCBhZGRyZXNzPU5vbmUsCisgICAgICAgICAgICAgICAgIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wLCBzb2NrLCBwcm90b2NvbCwgZXh0cmEpCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBhZGRyZXNzCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbWFkZSwgc2VsZikKKyAgICAgICAgIyBvbmx5IHN0YXJ0IHJlYWRpbmcgd2hlbiBjb25uZWN0aW9uX21hZGUoKSBoYXMgYmVlbiBjYWxsZWQKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fbG9vcC5hZGRfcmVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zb2NrX2ZkLCBzZWxmLl9yZWFkX3JlYWR5KQorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG9ubHkgd2FrZSB1cCB0aGUgd2FpdGVyIHdoZW4gY29ubmVjdGlvbl9tYWRlKCkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihmdXR1cmVzLl9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZXIsIE5vbmUpCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc3VtKGxlbihkYXRhKSBmb3IgZGF0YSwgXyBpbiBzZWxmLl9idWZmZXIpCisKKyAgICBkZWYgX3JlYWRfcmVhZHkoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRhdGEsIGFkZHIgPSBzZWxmLl9zb2NrLnJlY3Zmcm9tKHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQoZXhjKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gZGF0YWdyYW0gdHJhbnNwb3J0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFncmFtX3JlY2VpdmVkKGRhdGEsIGFkZHIpCisKKyAgICBkZWYgc2VuZHRvKHNlbGYsIGRhdGEsIGFkZHI9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2RhdGEgYXJndW1lbnQgbXVzdCBiZSBieXRlLWlzaCAoJXIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGRhdGEpKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgYW5kIGFkZHIgbm90IGluIChOb25lLCBzZWxmLl9hZGRyZXNzKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgYWRkcmVzczogbXVzdCBiZSBOb25lIG9yICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLl9hZGRyZXNzLCkpCisKKyAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0IGFuZCBzZWxmLl9hZGRyZXNzOgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICAjIEF0dGVtcHQgdG8gc2VuZCBpdCByaWdodCBhd2F5IGZpcnN0LgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3M6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZChkYXRhKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NvY2suc2VuZHRvKGRhdGEsIGFkZHIpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgKEJsb2NraW5nSU9FcnJvciwgSW50ZXJydXB0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5hZGRfd3JpdGVyKHNlbGYuX3NvY2tfZmQsIHNlbGYuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5lcnJvcl9yZWNlaXZlZChleGMpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIGRhdGFncmFtIHRyYW5zcG9ydCcpCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB3aGF0IHdlIGJ1ZmZlciBpcyBpbW11dGFibGUuCisgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoKGJ5dGVzKGRhdGEpLCBhZGRyKSkKKyAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIF9zZW5kdG9fcmVhZHkoc2VsZik6CisgICAgICAgIHdoaWxlIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIGRhdGEsIGFkZHIgPSBzZWxmLl9idWZmZXIucG9wbGVmdCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzczoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kKGRhdGEpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc29jay5zZW5kdG8oZGF0YSwgYWRkcikKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kbGVmdCgoZGF0YSwgYWRkcikpICAjIFRyeSBhZ2FpbiBsYXRlci4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmVycm9yX3JlY2VpdmVkKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gZGF0YWdyYW0gdHJhbnNwb3J0JykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLl9tYXliZV9yZXN1bWVfcHJvdG9jb2woKSAgIyBNYXkgYXBwZW5kIHRvIGJ1ZmZlci4KKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9zb2NrX2ZkKQorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vc3NscHJvdG8ucHkgYi9MaWIvYXN5bmNpby9zc2xwcm90by5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGU5ODBiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vc3NscHJvdG8ucHkKQEAgLTAsMCArMSw2ODAgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IHdhcm5pbmdzCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBwcm90b2NvbHMKK2Zyb20gLiBpbXBvcnQgdHJhbnNwb3J0cworZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitkZWYgX2NyZWF0ZV90cmFuc3BvcnRfY29udGV4dChzZXJ2ZXJfc2lkZSwgc2VydmVyX2hvc3RuYW1lKToKKyAgICBpZiBzZXJ2ZXJfc2lkZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU2VydmVyIHNpZGUgU1NMIG5lZWRzIGEgdmFsaWQgU1NMQ29udGV4dCcpCisKKyAgICAjIENsaWVudCBzaWRlIG1heSBwYXNzIHNzbD1UcnVlIHRvIHVzZSBhIGRlZmF1bHQKKyAgICAjIGNvbnRleHQ7IGluIHRoYXQgY2FzZSB0aGUgc3NsY29udGV4dCBwYXNzZWQgaXMgTm9uZS4KKyAgICAjIFRoZSBkZWZhdWx0IGlzIHNlY3VyZSBmb3IgY2xpZW50IGNvbm5lY3Rpb25zLgorICAgIGlmIGhhc2F0dHIoc3NsLCAnY3JlYXRlX2RlZmF1bHRfY29udGV4dCcpOgorICAgICAgICAjIFB5dGhvbiAzLjQrOiB1c2UgdXAtdG8tZGF0ZSBzdHJvbmcgc2V0dGluZ3MuCisgICAgICAgIHNzbGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgICAgIGlmIG5vdCBzZXJ2ZXJfaG9zdG5hbWU6CisgICAgICAgICAgICBzc2xjb250ZXh0LmNoZWNrX2hvc3RuYW1lID0gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICAjIEZhbGxiYWNrIGZvciBQeXRob24gMy4zLgorICAgICAgICBzc2xjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYzCisgICAgICAgIHNzbGNvbnRleHQuc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKyAgICAgICAgc3NsY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgcmV0dXJuIHNzbGNvbnRleHQKKworCitkZWYgX2lzX3NzbHByb3RvX2F2YWlsYWJsZSgpOgorICAgIHJldHVybiBoYXNhdHRyKHNzbCwgIk1lbW9yeUJJTyIpCisKKworIyBTdGF0ZXMgb2YgYW4gX1NTTFBpcGUuCitfVU5XUkFQUEVEID0gIlVOV1JBUFBFRCIKK19ET19IQU5EU0hBS0UgPSAiRE9fSEFORFNIQUtFIgorX1dSQVBQRUQgPSAiV1JBUFBFRCIKK19TSFVURE9XTiA9ICJTSFVURE9XTiIKKworCitjbGFzcyBfU1NMUGlwZShvYmplY3QpOgorICAgICIiIkFuIFNTTCAiUGlwZSIuCisKKyAgICBBbiBTU0wgcGlwZSBhbGxvd3MgeW91IHRvIGNvbW11bmljYXRlIHdpdGggYW4gU1NML1RMUyBwcm90b2NvbCBpbnN0YW5jZQorICAgIHRocm91Z2ggbWVtb3J5IGJ1ZmZlcnMuIEl0IGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBhIHNlY3VyaXR5IGxheWVyIGZvciBhbgorICAgIGV4aXN0aW5nIGNvbm5lY3Rpb24gd2hlcmUgeW91IGRvbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBjb25uZWN0aW9uJ3MgZmlsZQorICAgIGRlc2NyaXB0b3IsIG9yIGZvciBzb21lIHJlYXNvbiB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgaXQuCisKKyAgICBBbiBTU0wgcGlwZSBjYW4gYmUgaW4gIndyYXBwZWQiIGFuZCAidW53cmFwcGVkIiBtb2RlLiBJbiB1bndyYXBwZWQgbW9kZSwKKyAgICBkYXRhIGlzIHBhc3NlZCB0aHJvdWdoIHVudHJhbnNmb3JtZWQuIEluIHdyYXBwZWQgbW9kZSwgYXBwbGljYXRpb24gbGV2ZWwKKyAgICBkYXRhIGlzIGVuY3J5cHRlZCB0byBTU0wgcmVjb3JkIGxldmVsIGRhdGEgYW5kIHZpY2UgdmVyc2EuIFRoZSBTU0wgcmVjb3JkCisgICAgbGV2ZWwgaXMgdGhlIGxvd2VzdCBsZXZlbCBpbiB0aGUgU1NMIHByb3RvY29sIHN1aXRlIGFuZCBpcyB3aGF0IHRyYXZlbHMKKyAgICBhcy1pcyBvdmVyIHRoZSB3aXJlLgorCisgICAgQW4gU3NsUGlwZSBpbml0aWFsbHkgaXMgaW4gInVud3JhcHBlZCIgbW9kZS4gVG8gc3RhcnQgU1NMLCBjYWxsCisgICAgZG9faGFuZHNoYWtlKCkuIFRvIHNodXRkb3duIFNTTCBhZ2FpbiwgY2FsbCB1bndyYXAoKS4KKyAgICAiIiIKKworICAgIG1heF9zaXplID0gMjU2ICogMTAyNCAgICMgQnVmZmVyIHNpemUgcGFzc2VkIHRvIHJlYWQoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRleHQsIHNlcnZlcl9zaWRlLCBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBUaGUgKmNvbnRleHQqIGFyZ3VtZW50IHNwZWNpZmllcyB0aGUgc3NsLlNTTENvbnRleHQgdG8gdXNlLgorCisgICAgICAgIFRoZSAqc2VydmVyX3NpZGUqIGFyZ3VtZW50IGluZGljYXRlcyB3aGV0aGVyIHRoaXMgaXMgYSBzZXJ2ZXIgc2lkZSBvcgorICAgICAgICBjbGllbnQgc2lkZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhlIG9wdGlvbmFsICpzZXJ2ZXJfaG9zdG5hbWUqIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlCisgICAgICAgIGhvc3RuYW1lIHlvdSBhcmUgY29ubmVjdGluZyB0by4gWW91IG1heSBvbmx5IHNwZWNpZnkgdGhpcyBwYXJhbWV0ZXIgaWYKKyAgICAgICAgdGhlIF9zc2wgbW9kdWxlIHN1cHBvcnRzIFNlcnZlciBOYW1lIEluZGljYXRpb24gKFNOSSkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jb250ZXh0ID0gY29udGV4dAorICAgICAgICBzZWxmLl9zZXJ2ZXJfc2lkZSA9IHNlcnZlcl9zaWRlCisgICAgICAgIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSA9IHNlcnZlcl9ob3N0bmFtZQorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9VTldSQVBQRUQKKyAgICAgICAgc2VsZi5faW5jb21pbmcgPSBzc2wuTWVtb3J5QklPKCkKKyAgICAgICAgc2VsZi5fb3V0Z29pbmcgPSBzc2wuTWVtb3J5QklPKCkKKyAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQorICAgICAgICBzZWxmLl9uZWVkX3NzbGRhdGEgPSBGYWxzZQorICAgICAgICBzZWxmLl9oYW5kc2hha2VfY2IgPSBOb25lCisgICAgICAgIHNlbGYuX3NodXRkb3duX2NiID0gTm9uZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNvbnRleHQoc2VsZik6CisgICAgICAgICIiIlRoZSBTU0wgY29udGV4dCBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fY29udGV4dAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHNzbF9vYmplY3Qoc2VsZik6CisgICAgICAgICIiIlRoZSBpbnRlcm5hbCBzc2wuU1NMT2JqZWN0IGluc3RhbmNlLgorCisgICAgICAgIFJldHVybiBOb25lIGlmIHRoZSBwaXBlIGlzIG5vdCB3cmFwcGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbG9iagorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5lZWRfc3NsZGF0YShzZWxmKToKKyAgICAgICAgIiIiV2hldGhlciBtb3JlIHJlY29yZCBsZXZlbCBkYXRhIGlzIG5lZWRlZCB0byBjb21wbGV0ZSBhIGhhbmRzaGFrZQorICAgICAgICB0aGF0IGlzIGN1cnJlbnRseSBpbiBwcm9ncmVzcy4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX25lZWRfc3NsZGF0YQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHdyYXBwZWQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIGEgc2VjdXJpdHkgbGF5ZXIgaXMgY3VycmVudGx5IGluIGVmZmVjdC4KKworICAgICAgICBSZXR1cm4gRmFsc2UgZHVyaW5nIGhhbmRzaGFrZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zdGF0ZSA9PSBfV1JBUFBFRAorCisgICAgZGVmIGRvX2hhbmRzaGFrZShzZWxmLCBjYWxsYmFjaz1Ob25lKToKKyAgICAgICAgIiIiU3RhcnQgdGhlIFNTTCBoYW5kc2hha2UuCisKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBzc2xkYXRhLiBBIHNzbGRhdGEgZWxlbWVudCBpcyBhIGxpc3Qgb2YgYnVmZmVycworCisgICAgICAgIFRoZSBvcHRpb25hbCAqY2FsbGJhY2sqIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIGluc3RhbGwgYSBjYWxsYmFjayB0aGF0CisgICAgICAgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIGhhbmRzaGFrZSBpcyBjb21wbGV0ZS4gVGhlIGNhbGxiYWNrIHdpbGwgYmUKKyAgICAgICAgY2FsbGVkIHdpdGggTm9uZSBpZiBzdWNjZXNzZnVsLCBlbHNlIGFuIGV4Y2VwdGlvbiBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX3N0YXRlICE9IF9VTldSQVBQRUQ6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2hhbmRzaGFrZSBpbiBwcm9ncmVzcyBvciBjb21wbGV0ZWQnKQorICAgICAgICBzZWxmLl9zc2xvYmogPSBzZWxmLl9jb250ZXh0LndyYXBfYmlvKAorICAgICAgICAgICAgc2VsZi5faW5jb21pbmcsIHNlbGYuX291dGdvaW5nLAorICAgICAgICAgICAgc2VydmVyX3NpZGU9c2VsZi5fc2VydmVyX3NpZGUsCisgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VsZi5fc2VydmVyX2hvc3RuYW1lKQorICAgICAgICBzZWxmLl9zdGF0ZSA9IF9ET19IQU5EU0hBS0UKKyAgICAgICAgc2VsZi5faGFuZHNoYWtlX2NiID0gY2FsbGJhY2sKKyAgICAgICAgc3NsZGF0YSwgYXBwZGF0YSA9IHNlbGYuZmVlZF9zc2xkYXRhKGInJywgb25seV9oYW5kc2hha2U9VHJ1ZSkKKyAgICAgICAgYXNzZXJ0IGxlbihhcHBkYXRhKSA9PSAwCisgICAgICAgIHJldHVybiBzc2xkYXRhCisKKyAgICBkZWYgc2h1dGRvd24oc2VsZiwgY2FsbGJhY2s9Tm9uZSk6CisgICAgICAgICIiIlN0YXJ0IHRoZSBTU0wgc2h1dGRvd24gc2VxdWVuY2UuCisKKyAgICAgICAgUmV0dXJuIGEgbGlzdCBvZiBzc2xkYXRhLiBBIHNzbGRhdGEgZWxlbWVudCBpcyBhIGxpc3Qgb2YgYnVmZmVycworCisgICAgICAgIFRoZSBvcHRpb25hbCAqY2FsbGJhY2sqIGFyZ3VtZW50IGNhbiBiZSB1c2VkIHRvIGluc3RhbGwgYSBjYWxsYmFjayB0aGF0CisgICAgICAgIHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHNodXRkb3duIGlzIGNvbXBsZXRlLiBUaGUgY2FsbGJhY2sgd2lsbCBiZQorICAgICAgICBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfVU5XUkFQUEVEOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdubyBzZWN1cml0eSBsYXllciBwcmVzZW50JykKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX1NIVVRET1dOOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdzaHV0ZG93biBpbiBwcm9ncmVzcycpCisgICAgICAgIGFzc2VydCBzZWxmLl9zdGF0ZSBpbiAoX1dSQVBQRUQsIF9ET19IQU5EU0hBS0UpCisgICAgICAgIHNlbGYuX3N0YXRlID0gX1NIVVRET1dOCisgICAgICAgIHNlbGYuX3NodXRkb3duX2NiID0gY2FsbGJhY2sKKyAgICAgICAgc3NsZGF0YSwgYXBwZGF0YSA9IHNlbGYuZmVlZF9zc2xkYXRhKGInJykKKyAgICAgICAgYXNzZXJ0IGFwcGRhdGEgPT0gW10gb3IgYXBwZGF0YSA9PSBbYicnXQorICAgICAgICByZXR1cm4gc3NsZGF0YQorCisgICAgZGVmIGZlZWRfZW9mKHNlbGYpOgorICAgICAgICAiIiJTZW5kIGEgcG90ZW50aWFsbHkgInJhZ2dlZCIgRU9GLgorCisgICAgICAgIFRoaXMgbWV0aG9kIHdpbGwgcmFpc2UgYW4gU1NMX0VSUk9SX0VPRiBleGNlcHRpb24gaWYgdGhlIEVPRiBpcworICAgICAgICB1bmV4cGVjdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5faW5jb21pbmcud3JpdGVfZW9mKCkKKyAgICAgICAgc3NsZGF0YSwgYXBwZGF0YSA9IHNlbGYuZmVlZF9zc2xkYXRhKGInJykKKyAgICAgICAgYXNzZXJ0IGFwcGRhdGEgPT0gW10gb3IgYXBwZGF0YSA9PSBbYicnXQorCisgICAgZGVmIGZlZWRfc3NsZGF0YShzZWxmLCBkYXRhLCBvbmx5X2hhbmRzaGFrZT1GYWxzZSk6CisgICAgICAgICIiIkZlZWQgU1NMIHJlY29yZCBsZXZlbCBkYXRhIGludG8gdGhlIHBpcGUuCisKKyAgICAgICAgVGhlIGRhdGEgbXVzdCBiZSBhIGJ5dGVzIGluc3RhbmNlLiBJdCBpcyBPSyB0byBzZW5kIGFuIGVtcHR5IGJ5dGVzCisgICAgICAgIGluc3RhbmNlLiBUaGlzIGNhbiBiZSB1c2VkIHRvIGdldCBzc2xkYXRhIGZvciBhIGhhbmRzaGFrZSBpbml0aWF0ZWQgYnkKKyAgICAgICAgdGhpcyBlbmRwb2ludC4KKworICAgICAgICBSZXR1cm4gYSAoc3NsZGF0YSwgYXBwZGF0YSkgdHVwbGUuIFRoZSBzc2xkYXRhIGVsZW1lbnQgaXMgYSBsaXN0IG9mCisgICAgICAgIGJ1ZmZlcnMgY29udGFpbmluZyBTU0wgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHNlbnQgdG8gdGhlIHJlbW90ZSBTU0wuCisKKyAgICAgICAgVGhlIGFwcGRhdGEgZWxlbWVudCBpcyBhIGxpc3Qgb2YgYnVmZmVycyBjb250YWluaW5nIHBsYWludGV4dCBkYXRhIHRoYXQKKyAgICAgICAgbmVlZHMgdG8gYmUgZm9yd2FyZGVkIHRvIHRoZSBhcHBsaWNhdGlvbi4gVGhlIGFwcGRhdGEgbGlzdCBtYXkgY29udGFpbgorICAgICAgICBhbiBlbXB0eSBidWZmZXIgaW5kaWNhdGluZyBhbiBTU0wgImNsb3NlX25vdGlmeSIgYWxlcnQuIFRoaXMgYWxlcnQgbXVzdAorICAgICAgICBiZSBhY2tub3dsZWRnZWQgYnkgY2FsbGluZyBzaHV0ZG93bigpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX1VOV1JBUFBFRDoKKyAgICAgICAgICAgICMgSWYgdW53cmFwcGVkLCBwYXNzIHBsYWludGV4dCBkYXRhIHN0cmFpZ2h0IHRocm91Z2guCisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIGFwcGRhdGEgPSBbZGF0YV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXBwZGF0YSA9IFtdCisgICAgICAgICAgICByZXR1cm4gKFtdLCBhcHBkYXRhKQorCisgICAgICAgIHNlbGYuX25lZWRfc3NsZGF0YSA9IEZhbHNlCisgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICBzZWxmLl9pbmNvbWluZy53cml0ZShkYXRhKQorCisgICAgICAgIHNzbGRhdGEgPSBbXQorICAgICAgICBhcHBkYXRhID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX0RPX0hBTkRTSEFLRToKKyAgICAgICAgICAgICAgICAjIENhbGwgZG9faGFuZHNoYWtlKCkgdW50aWwgaXQgZG9lc24ndCByYWlzZSBhbnltb3JlLgorICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iai5kb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXRlID0gX1dSQVBQRUQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9oYW5kc2hha2VfY2I6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRzaGFrZV9jYihOb25lKQorICAgICAgICAgICAgICAgIGlmIG9ubHlfaGFuZHNoYWtlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHNzbGRhdGEsIGFwcGRhdGEpCisgICAgICAgICAgICAgICAgIyBIYW5kc2hha2UgZG9uZTogZXhlY3V0ZSB0aGUgd3JhcHBlZCBibG9jaworCisgICAgICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBfV1JBUFBFRDoKKyAgICAgICAgICAgICAgICAjIE1haW4gc3RhdGU6IHJlYWQgZGF0YSBmcm9tIFNTTCB1bnRpbCBjbG9zZV9ub3RpZnkKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuX3NzbG9iai5yZWFkKHNlbGYubWF4X3NpemUpCisgICAgICAgICAgICAgICAgICAgIGFwcGRhdGEuYXBwZW5kKGNodW5rKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgY2h1bms6ICAjIGNsb3NlX25vdGlmeQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgZWxpZiBzZWxmLl9zdGF0ZSA9PSBfU0hVVERPV046CisgICAgICAgICAgICAgICAgIyBDYWxsIHNodXRkb3duKCkgdW50aWwgaXQgZG9lc24ndCByYWlzZSBhbnltb3JlLgorICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iai51bndyYXAoKQorICAgICAgICAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IF9VTldSQVBQRUQKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zaHV0ZG93bl9jYjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2h1dGRvd25fY2IoKQorCisgICAgICAgICAgICBlbGlmIHNlbGYuX3N0YXRlID09IF9VTldSQVBQRUQ6CisgICAgICAgICAgICAgICAgIyBEcmFpbiBwb3NzaWJsZSBwbGFpbnRleHQgZGF0YSBhZnRlciBjbG9zZV9ub3RpZnkuCisgICAgICAgICAgICAgICAgYXBwZGF0YS5hcHBlbmQoc2VsZi5faW5jb21pbmcucmVhZCgpKQorICAgICAgICBleGNlcHQgKHNzbC5TU0xFcnJvciwgc3NsLkNlcnRpZmljYXRlRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGdldGF0dHIoZXhjLCAnZXJybm8nLCBOb25lKSBub3QgaW4gKAorICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1NZU0NBTEwpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IF9ET19IQU5EU0hBS0UgYW5kIHNlbGYuX2hhbmRzaGFrZV9jYjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlX2NiKGV4YykKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgc2VsZi5fbmVlZF9zc2xkYXRhID0gKGV4Yy5lcnJubyA9PSBzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCkKKworICAgICAgICAjIENoZWNrIGZvciByZWNvcmQgbGV2ZWwgZGF0YSB0aGF0IG5lZWRzIHRvIGJlIHNlbnQgYmFjay4KKyAgICAgICAgIyBIYXBwZW5zIGZvciB0aGUgaW5pdGlhbCBoYW5kc2hha2UgYW5kIHJlbmVnb3RpYXRpb25zLgorICAgICAgICBpZiBzZWxmLl9vdXRnb2luZy5wZW5kaW5nOgorICAgICAgICAgICAgc3NsZGF0YS5hcHBlbmQoc2VsZi5fb3V0Z29pbmcucmVhZCgpKQorICAgICAgICByZXR1cm4gKHNzbGRhdGEsIGFwcGRhdGEpCisKKyAgICBkZWYgZmVlZF9hcHBkYXRhKHNlbGYsIGRhdGEsIG9mZnNldD0wKToKKyAgICAgICAgIiIiRmVlZCBwbGFpbnRleHQgZGF0YSBpbnRvIHRoZSBwaXBlLgorCisgICAgICAgIFJldHVybiBhbiAoc3NsZGF0YSwgb2Zmc2V0KSB0dXBsZS4gVGhlIHNzbGRhdGEgZWxlbWVudCBpcyBhIGxpc3Qgb2YKKyAgICAgICAgYnVmZmVycyBjb250YWluaW5nIHJlY29yZCBsZXZlbCBkYXRhIHRoYXQgbmVlZHMgdG8gYmUgc2VudCB0byB0aGUKKyAgICAgICAgcmVtb3RlIFNTTCBpbnN0YW5jZS4gVGhlIG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIHBsYWludGV4dCBieXRlcyB0aGF0CisgICAgICAgIHdlcmUgcHJvY2Vzc2VkLCB3aGljaCBtYXkgYmUgbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgZGF0YS4KKworICAgICAgICBOT1RFOiBJbiBjYXNlIG9mIHNob3J0IHdyaXRlcywgdGhpcyBjYWxsIE1VU1QgYmUgcmV0cmllZCB3aXRoIHRoZSBTQU1FCisgICAgICAgIGJ1ZmZlciBwYXNzZWQgaW50byB0aGUgKmRhdGEqIGFyZ3VtZW50IChpLmUuIHRoZSBpZCgpIG11c3QgYmUgdGhlCisgICAgICAgIHNhbWUpLiBUaGlzIGlzIGFuIE9wZW5TU0wgcmVxdWlyZW1lbnQuIEEgZnVydGhlciBwYXJ0aWN1bGFyaXR5IGlzIHRoYXQKKyAgICAgICAgYSBzaG9ydCB3cml0ZSB3aWxsIGFsd2F5cyBoYXZlIG9mZnNldCA9PSAwLCBiZWNhdXNlIHRoZSBfc3NsIG1vZHVsZQorICAgICAgICBkb2VzIG5vdCBlbmFibGUgcGFydGlhbCB3cml0ZXMuIEFuZCBldmVuIHRob3VnaCB0aGUgb2Zmc2V0IGlzIHplcm8sCisgICAgICAgIHRoZXJlIHdpbGwgc3RpbGwgYmUgZW5jcnlwdGVkIGRhdGEgaW4gc3NsZGF0YS4KKyAgICAgICAgIiIiCisgICAgICAgIGFzc2VydCAwIDw9IG9mZnNldCA8PSBsZW4oZGF0YSkKKyAgICAgICAgaWYgc2VsZi5fc3RhdGUgPT0gX1VOV1JBUFBFRDoKKyAgICAgICAgICAgICMgcGFzcyB0aHJvdWdoIGRhdGEgaW4gdW53cmFwcGVkIG1vZGUKKyAgICAgICAgICAgIGlmIG9mZnNldCA8IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBzc2xkYXRhID0gW2RhdGFbb2Zmc2V0Ol1dCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNzbGRhdGEgPSBbXQorICAgICAgICAgICAgcmV0dXJuIChzc2xkYXRhLCBsZW4oZGF0YSkpCisKKyAgICAgICAgc3NsZGF0YSA9IFtdCisgICAgICAgIHZpZXcgPSBtZW1vcnl2aWV3KGRhdGEpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBzZWxmLl9uZWVkX3NzbGRhdGEgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG9mZnNldCA8IGxlbih2aWV3KToKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHNlbGYuX3NzbG9iai53cml0ZSh2aWV3W29mZnNldDpdKQorICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgIyBJdCBpcyBub3QgYWxsb3dlZCB0byBjYWxsIHdyaXRlKCkgYWZ0ZXIgdW53cmFwKCkgdW50aWwgdGhlCisgICAgICAgICAgICAgICAgIyBjbG9zZV9ub3RpZnkgaXMgYWNrbm93bGVkZ2VkLiBXZSByZXR1cm4gdGhlIGNvbmRpdGlvbiB0byB0aGUKKyAgICAgICAgICAgICAgICAjIGNhbGxlciBhcyBhIHNob3J0IHdyaXRlLgorICAgICAgICAgICAgICAgIGlmIGV4Yy5yZWFzb24gPT0gJ1BST1RPQ09MX0lTX1NIVVRET1dOJzoKKyAgICAgICAgICAgICAgICAgICAgZXhjLmVycm5vID0gc3NsLlNTTF9FUlJPUl9XQU5UX1JFQUQKKyAgICAgICAgICAgICAgICBpZiBleGMuZXJybm8gbm90IGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9TWVNDQUxMKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBzZWxmLl9uZWVkX3NzbGRhdGEgPSAoZXhjLmVycm5vID09IHNzbC5TU0xfRVJST1JfV0FOVF9SRUFEKQorCisgICAgICAgICAgICAjIFNlZSBpZiB0aGVyZSdzIGFueSByZWNvcmQgbGV2ZWwgZGF0YSBiYWNrIGZvciB1cy4KKyAgICAgICAgICAgIGlmIHNlbGYuX291dGdvaW5nLnBlbmRpbmc6CisgICAgICAgICAgICAgICAgc3NsZGF0YS5hcHBlbmQoc2VsZi5fb3V0Z29pbmcucmVhZCgpKQorICAgICAgICAgICAgaWYgb2Zmc2V0ID09IGxlbih2aWV3KSBvciBzZWxmLl9uZWVkX3NzbGRhdGE6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcmV0dXJuIChzc2xkYXRhLCBvZmZzZXQpCisKKworY2xhc3MgX1NTTFByb3RvY29sVHJhbnNwb3J0KHRyYW5zcG9ydHMuX0Zsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0cy5UcmFuc3BvcnQpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIHNzbF9wcm90b2NvbCwgYXBwX3Byb3RvY29sKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgIyBTU0xQcm90b2NvbCBpbnN0YW5jZQorICAgICAgICBzZWxmLl9zc2xfcHJvdG9jb2wgPSBzc2xfcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fYXBwX3Byb3RvY29sID0gYXBwX3Byb3RvY29sCisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCisKKyAgICBkZWYgZ2V0X2V4dHJhX2luZm8oc2VsZiwgbmFtZSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiR2V0IG9wdGlvbmFsIHRyYW5zcG9ydCBpbmZvcm1hdGlvbi4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbF9wcm90b2NvbC5fZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdCkKKworICAgIGRlZiBpc19jbG9zaW5nKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fY2xvc2VkCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGZsdXNoZWQgYXN5bmNocm9ub3VzbHkuICBObyBtb3JlIGRhdGEKKyAgICAgICAgd2lsbCBiZSByZWNlaXZlZC4gIEFmdGVyIGFsbCBidWZmZXJlZCBkYXRhIGlzIGZsdXNoZWQsIHRoZQorICAgICAgICBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBjYWxsZWQKKyAgICAgICAgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fc3NsX3Byb3RvY29sLl9zdGFydF9zaHV0ZG93bigpCisKKyAgICAjIE9uIFB5dGhvbiAzLjMgYW5kIG9sZGVyLCBvYmplY3RzIHdpdGggYSBkZXN0cnVjdG9yIHBhcnQgb2YgYSByZWZlcmVuY2UKKyAgICAjIGN5Y2xlIGFyZSBuZXZlciBkZXN0cm95ZWQuIEl0J3Mgbm90IG1vcmUgdGhlIGNhc2Ugb24gUHl0aG9uIDMuNCB0aGFua3MKKyAgICAjIHRvIHRoZSBQRVAgNDQyLgorICAgIGlmIGNvbXBhdC5QWTM0OgorICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigidW5jbG9zZWQgdHJhbnNwb3J0ICVyIiAlIHNlbGYsIFJlc291cmNlV2FybmluZykKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICAiIiJQYXVzZSB0aGUgcmVjZWl2aW5nIGVuZC4KKworICAgICAgICBObyBkYXRhIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBwcm90b2NvbCdzIGRhdGFfcmVjZWl2ZWQoKQorICAgICAgICBtZXRob2QgdW50aWwgcmVzdW1lX3JlYWRpbmcoKSBpcyBjYWxsZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zc2xfcHJvdG9jb2wuX3RyYW5zcG9ydC5wYXVzZV9yZWFkaW5nKCkKKworICAgIGRlZiByZXN1bWVfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiUmVzdW1lIHRoZSByZWNlaXZpbmcgZW5kLgorCisgICAgICAgIERhdGEgcmVjZWl2ZWQgd2lsbCBvbmNlIGFnYWluIGJlIHBhc3NlZCB0byB0aGUgcHJvdG9jb2wncworICAgICAgICBkYXRhX3JlY2VpdmVkKCkgbWV0aG9kLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc3NsX3Byb3RvY29sLl90cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcoKQorCisgICAgZGVmIHNldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYsIGhpZ2g9Tm9uZSwgbG93PU5vbmUpOgorICAgICAgICAiIiJTZXQgdGhlIGhpZ2gtIGFuZCBsb3ctd2F0ZXIgbGltaXRzIGZvciB3cml0ZSBmbG93IGNvbnRyb2wuCisKKyAgICAgICAgVGhlc2UgdHdvIHZhbHVlcyBjb250cm9sIHdoZW4gdG8gY2FsbCB0aGUgcHJvdG9jb2wncworICAgICAgICBwYXVzZV93cml0aW5nKCkgYW5kIHJlc3VtZV93cml0aW5nKCkgbWV0aG9kcy4gIElmIHNwZWNpZmllZCwKKyAgICAgICAgdGhlIGxvdy13YXRlciBsaW1pdCBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgICAgaGlnaC13YXRlciBsaW1pdC4gIE5laXRoZXIgdmFsdWUgY2FuIGJlIG5lZ2F0aXZlLgorCisgICAgICAgIFRoZSBkZWZhdWx0cyBhcmUgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMuICBJZiBvbmx5IHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0IGlzIGdpdmVuLCB0aGUgbG93LXdhdGVyIGxpbWl0IGRlZmF1bHRzIHRvIGFuCisgICAgICAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUKKyAgICAgICAgaGlnaC13YXRlciBsaW1pdC4gIFNldHRpbmcgaGlnaCB0byB6ZXJvIGZvcmNlcyBsb3cgdG8gemVybyBhcworICAgICAgICB3ZWxsLCBhbmQgY2F1c2VzIHBhdXNlX3dyaXRpbmcoKSB0byBiZSBjYWxsZWQgd2hlbmV2ZXIgdGhlCisgICAgICAgIGJ1ZmZlciBiZWNvbWVzIG5vbi1lbXB0eS4gIFNldHRpbmcgbG93IHRvIHplcm8gY2F1c2VzCisgICAgICAgIHJlc3VtZV93cml0aW5nKCkgdG8gYmUgY2FsbGVkIG9ubHkgb25jZSB0aGUgYnVmZmVyIGlzIGVtcHR5LgorICAgICAgICBVc2Ugb2YgemVybyBmb3IgZWl0aGVyIGxpbWl0IGlzIGdlbmVyYWxseSBzdWItb3B0aW1hbCBhcyBpdAorICAgICAgICByZWR1Y2VzIG9wcG9ydHVuaXRpZXMgZm9yIGRvaW5nIEkvTyBhbmQgY29tcHV0YXRpb24KKyAgICAgICAgY29uY3VycmVudGx5LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fc3NsX3Byb3RvY29sLl90cmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoaGlnaCwgbG93KQorCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIHdyaXRlIGJ1ZmZlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NzbF9wcm90b2NvbC5fdHJhbnNwb3J0LmdldF93cml0ZV9idWZmZXJfc2l6ZSgpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIldyaXRlIHNvbWUgZGF0YSBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIChieXRlcywgYnl0ZWFycmF5LCBtZW1vcnl2aWV3KSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRhdGE6IGV4cGVjdGluZyBhIGJ5dGVzLWxpa2UgaW5zdGFuY2UsIGdvdCB7IXJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHR5cGUoZGF0YSkuX19uYW1lX18pKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9zc2xfcHJvdG9jb2wuX3dyaXRlX2FwcGRhdGEoZGF0YSkKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGlzIHRyYW5zcG9ydCBzdXBwb3J0cyB3cml0ZV9lb2YoKSwgRmFsc2UgaWYgbm90LiIiIgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBhYm9ydChzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHRyYW5zcG9ydCBpbW1lZGlhdGVseS4KKworICAgICAgICBCdWZmZXJlZCBkYXRhIHdpbGwgYmUgbG9zdC4gIE5vIG1vcmUgZGF0YSB3aWxsIGJlIHJlY2VpdmVkLgorICAgICAgICBUaGUgcHJvdG9jb2wncyBjb25uZWN0aW9uX2xvc3QoKSBtZXRob2Qgd2lsbCAoZXZlbnR1YWxseSkgYmUKKyAgICAgICAgY2FsbGVkIHdpdGggTm9uZSBhcyBpdHMgYXJndW1lbnQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9zc2xfcHJvdG9jb2wuX2Fib3J0KCkKKworCitjbGFzcyBTU0xQcm90b2NvbChwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgICIiIlNTTCBwcm90b2NvbC4KKworICAgIEltcGxlbWVudGF0aW9uIG9mIFNTTCBvbiB0b3Agb2YgYSBzb2NrZXQgdXNpbmcgaW5jb21pbmcgYW5kIG91dGdvaW5nCisgICAgYnVmZmVycyB3aGljaCBhcmUgc3NsLk1lbW9yeUJJTyBvYmplY3RzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3AsIGFwcF9wcm90b2NvbCwgc3NsY29udGV4dCwgd2FpdGVyLAorICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICBpZiBzc2wgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc3RkbGliIHNzbCBtb2R1bGUgbm90IGF2YWlsYWJsZScpCisKKyAgICAgICAgaWYgbm90IHNzbGNvbnRleHQ6CisgICAgICAgICAgICBzc2xjb250ZXh0ID0gX2NyZWF0ZV90cmFuc3BvcnRfY29udGV4dChzZXJ2ZXJfc2lkZSwgc2VydmVyX2hvc3RuYW1lKQorCisgICAgICAgIHNlbGYuX3NlcnZlcl9zaWRlID0gc2VydmVyX3NpZGUKKyAgICAgICAgaWYgc2VydmVyX2hvc3RuYW1lIGFuZCBub3Qgc2VydmVyX3NpZGU6CisgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUgPSBzZXJ2ZXJfaG9zdG5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NlcnZlcl9ob3N0bmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5fc3NsY29udGV4dCA9IHNzbGNvbnRleHQKKyAgICAgICAgIyBTU0wtc3BlY2lmaWMgZXh0cmEgaW5mby4gTW9yZSBpbmZvIGFyZSBzZXQgd2hlbiB0aGUgaGFuZHNoYWtlCisgICAgICAgICMgY29tcGxldGVzLgorICAgICAgICBzZWxmLl9leHRyYSA9IGRpY3Qoc3NsY29udGV4dD1zc2xjb250ZXh0KQorCisgICAgICAgICMgQXBwIGRhdGEgd3JpdGUgYnVmZmVyaW5nCisgICAgICAgIHNlbGYuX3dyaXRlX2JhY2tsb2cgPSBjb2xsZWN0aW9ucy5kZXF1ZSgpCisgICAgICAgIHNlbGYuX3dyaXRlX2J1ZmZlcl9zaXplID0gMAorCisgICAgICAgIHNlbGYuX3dhaXRlciA9IHdhaXRlcgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9hcHBfcHJvdG9jb2wgPSBhcHBfcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fYXBwX3RyYW5zcG9ydCA9IF9TU0xQcm90b2NvbFRyYW5zcG9ydChzZWxmLl9sb29wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIHNlbGYuX2FwcF9wcm90b2NvbCkKKyAgICAgICAgIyBfU1NMUGlwZSBpbnN0YW5jZSAoTm9uZSB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBtYWRlKQorICAgICAgICBzZWxmLl9zc2xwaXBlID0gTm9uZQorICAgICAgICBzZWxmLl9zZXNzaW9uX2VzdGFibGlzaGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5faW5faGFuZHNoYWtlID0gRmFsc2UKKyAgICAgICAgc2VsZi5faW5fc2h1dGRvd24gPSBGYWxzZQorICAgICAgICAjIHRyYW5zcG9ydCwgZXg6IFNlbGVjdG9yU29ja2V0VHJhbnNwb3J0CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IE5vbmUKKworICAgIGRlZiBfd2FrZXVwX3dhaXRlcihzZWxmLCBleGM9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYuX3dhaXRlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmIG5vdCBzZWxmLl93YWl0ZXIuY2FuY2VsbGVkKCk6CisgICAgICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBsb3ctbGV2ZWwgY29ubmVjdGlvbiBpcyBtYWRlLgorCisgICAgICAgIFN0YXJ0IHRoZSBTU0wgaGFuZHNoYWtlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIHNlbGYuX3NzbHBpcGUgPSBfU1NMUGlwZShzZWxmLl9zc2xjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2VydmVyX3NpZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuX3N0YXJ0X2hhbmRzaGFrZSgpCisKKyAgICBkZWYgY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBsb3ctbGV2ZWwgY29ubmVjdGlvbiBpcyBsb3N0IG9yIGNsb3NlZC4KKworICAgICAgICBUaGUgYXJndW1lbnQgaXMgYW4gZXhjZXB0aW9uIG9iamVjdCBvciBOb25lICh0aGUgbGF0dGVyCisgICAgICAgIG1lYW5pbmcgYSByZWd1bGFyIEVPRiBpcyByZWNlaXZlZCBvciB0aGUgY29ubmVjdGlvbiB3YXMKKyAgICAgICAgYWJvcnRlZCBvciBjbG9zZWQpLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fc2Vzc2lvbl9lc3RhYmxpc2hlZDoKKyAgICAgICAgICAgIHNlbGYuX3Nlc3Npb25fZXN0YWJsaXNoZWQgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fYXBwX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdCwgZXhjKQorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX2FwcF90cmFuc3BvcnQgPSBOb25lCisKKyAgICBkZWYgcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgIiIiQ2FsbGVkIHdoZW4gdGhlIGxvdy1sZXZlbCB0cmFuc3BvcnQncyBidWZmZXIgZ29lcyBvdmVyCisgICAgICAgIHRoZSBoaWdoLXdhdGVyIG1hcmsuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9hcHBfcHJvdG9jb2wucGF1c2Vfd3JpdGluZygpCisKKyAgICBkZWYgcmVzdW1lX3dyaXRpbmcoc2VsZik6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHRoZSBsb3ctbGV2ZWwgdHJhbnNwb3J0J3MgYnVmZmVyIGRyYWlucyBiZWxvdworICAgICAgICB0aGUgbG93LXdhdGVyIG1hcmsuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9hcHBfcHJvdG9jb2wucmVzdW1lX3dyaXRpbmcoKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkNhbGxlZCB3aGVuIHNvbWUgU1NMIGRhdGEgaXMgcmVjZWl2ZWQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50IGlzIGEgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3NsZGF0YSwgYXBwZGF0YSA9IHNlbGYuX3NzbHBpcGUuZmVlZF9zc2xkYXRhKGRhdGEpCisgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJyVyOiBTU0wgZXJyb3IgJXMgKHJlYXNvbiAlcyknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGUuZXJybm8sIGUucmVhc29uKQorICAgICAgICAgICAgc2VsZi5fYWJvcnQoKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZm9yIGNodW5rIGluIHNzbGRhdGE6CisgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGUoY2h1bmspCisKKyAgICAgICAgZm9yIGNodW5rIGluIGFwcGRhdGE6CisgICAgICAgICAgICBpZiBjaHVuazoKKyAgICAgICAgICAgICAgICBzZWxmLl9hcHBfcHJvdG9jb2wuZGF0YV9yZWNlaXZlZChjaHVuaykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fc3RhcnRfc2h1dGRvd24oKQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICAiIiJDYWxsZWQgd2hlbiB0aGUgb3RoZXIgZW5kIG9mIHRoZSBsb3ctbGV2ZWwgc3RyZWFtCisgICAgICAgIGlzIGhhbGYtY2xvc2VkLgorCisgICAgICAgIElmIHRoaXMgcmV0dXJucyBhIGZhbHNlIHZhbHVlIChpbmNsdWRpbmcgTm9uZSksIHRoZSB0cmFuc3BvcnQKKyAgICAgICAgd2lsbCBjbG9zZSBpdHNlbGYuICBJZiBpdCByZXR1cm5zIGEgdHJ1ZSB2YWx1ZSwgY2xvc2luZyB0aGUKKyAgICAgICAgdHJhbnNwb3J0IGlzIHVwIHRvIHRoZSBwcm90b2NvbC4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciByZWNlaXZlZCBFT0YiLCBzZWxmKQorCisgICAgICAgICAgICBzZWxmLl93YWtldXBfd2FpdGVyKENvbm5lY3Rpb25SZXNldEVycm9yKQorCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5faW5faGFuZHNoYWtlOgorICAgICAgICAgICAgICAgIGtlZXBfb3BlbiA9IHNlbGYuX2FwcF9wcm90b2NvbC5lb2ZfcmVjZWl2ZWQoKQorICAgICAgICAgICAgICAgIGlmIGtlZXBfb3BlbjoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3JldHVybmluZyB0cnVlIGZyb20gZW9mX3JlY2VpdmVkKCkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFzIG5vIGVmZmVjdCB3aGVuIHVzaW5nIHNzbCcpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQuY2xvc2UoKQorCisgICAgZGVmIF9nZXRfZXh0cmFfaW5mbyhzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgorICAgICAgICBpZiBuYW1lIGluIHNlbGYuX2V4dHJhOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4dHJhW25hbWVdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKG5hbWUsIGRlZmF1bHQpCisKKyAgICBkZWYgX3N0YXJ0X3NodXRkb3duKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9pbl9zaHV0ZG93bjoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9pbl9zaHV0ZG93biA9IFRydWUKKyAgICAgICAgc2VsZi5fd3JpdGVfYXBwZGF0YShiJycpCisKKyAgICBkZWYgX3dyaXRlX2FwcGRhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuX3dyaXRlX2JhY2tsb2cuYXBwZW5kKChkYXRhLCAwKSkKKyAgICAgICAgc2VsZi5fd3JpdGVfYnVmZmVyX3NpemUgKz0gbGVuKGRhdGEpCisgICAgICAgIHNlbGYuX3Byb2Nlc3Nfd3JpdGVfYmFja2xvZygpCisKKyAgICBkZWYgX3N0YXJ0X2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygiJXIgc3RhcnRzIFNTTCBoYW5kc2hha2UiLCBzZWxmKQorICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlX3N0YXJ0X3RpbWUgPSBzZWxmLl9sb29wLnRpbWUoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5faGFuZHNoYWtlX3N0YXJ0X3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYuX2luX2hhbmRzaGFrZSA9IFRydWUKKyAgICAgICAgIyAoYicnLCAxKSBpcyBhIHNwZWNpYWwgdmFsdWUgaW4gX3Byb2Nlc3Nfd3JpdGVfYmFja2xvZygpIHRvIGRvCisgICAgICAgICMgdGhlIFNTTCBoYW5kc2hha2UKKyAgICAgICAgc2VsZi5fd3JpdGVfYmFja2xvZy5hcHBlbmQoKGInJywgMSkpCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb2Nlc3Nfd3JpdGVfYmFja2xvZykKKworICAgIGRlZiBfb25faGFuZHNoYWtlX2NvbXBsZXRlKHNlbGYsIGhhbmRzaGFrZV9leGMpOgorICAgICAgICBzZWxmLl9pbl9oYW5kc2hha2UgPSBGYWxzZQorCisgICAgICAgIHNzbG9iaiA9IHNlbGYuX3NzbHBpcGUuc3NsX29iamVjdAorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBoYW5kc2hha2VfZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIGhhbmRzaGFrZV9leGMKKworICAgICAgICAgICAgcGVlcmNlcnQgPSBzc2xvYmouZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZi5fc3NsY29udGV4dCwgJ2NoZWNrX2hvc3RuYW1lJyk6CisgICAgICAgICAgICAgICAgIyBWZXJpZnkgaG9zdG5hbWUgaWYgcmVxdWVzdGVkLCBQeXRob24gMy40KyB1c2VzIGNoZWNrX2hvc3RuYW1lCisgICAgICAgICAgICAgICAgIyBhbmQgY2hlY2tzIHRoZSBob3N0bmFtZSBpbiBkb19oYW5kc2hha2UoKQorICAgICAgICAgICAgICAgIGlmIChzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5fc3NsY29udGV4dC52ZXJpZnlfbW9kZSAhPSBzc2wuQ0VSVF9OT05FKToKKyAgICAgICAgICAgICAgICAgICAgc3NsLm1hdGNoX2hvc3RuYW1lKHBlZXJjZXJ0LCBzZWxmLl9zZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleGMsIHNzbC5DZXJ0aWZpY2F0ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIiVyOiBTU0wgaGFuZHNoYWtlIGZhaWxlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiB2ZXJpZnlpbmcgdGhlIGNlcnRpZmljYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygiJXI6IFNTTCBoYW5kc2hha2UgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGV4YywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLl93YWtldXBfd2FpdGVyKGV4YykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgZHQgPSBzZWxmLl9sb29wLnRpbWUoKSAtIHNlbGYuX2hhbmRzaGFrZV9zdGFydF90aW1lCisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyOiBTU0wgaGFuZHNoYWtlIHRvb2sgJS4xZiBtcyIsIHNlbGYsIGR0ICogMWUzKQorCisgICAgICAgICMgQWRkIGV4dHJhIGluZm8gdGhhdCBiZWNvbWVzIGF2YWlsYWJsZSBhZnRlciBoYW5kc2hha2UuCisgICAgICAgIHNlbGYuX2V4dHJhLnVwZGF0ZShwZWVyY2VydD1wZWVyY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcGhlcj1zc2xvYmouY2lwaGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj1zc2xvYmouY29tcHJlc3Npb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9vYmplY3Q9c3Nsb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLl9hcHBfcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKHNlbGYuX2FwcF90cmFuc3BvcnQpCisgICAgICAgIHNlbGYuX3dha2V1cF93YWl0ZXIoKQorICAgICAgICBzZWxmLl9zZXNzaW9uX2VzdGFibGlzaGVkID0gVHJ1ZQorICAgICAgICAjIEluIGNhc2UgdHJhbnNwb3J0LndyaXRlKCkgd2FzIGFscmVhZHkgY2FsbGVkLiBEb24ndCBjYWxsCisgICAgICAgICMgaW1tZWRpYXRseSBfcHJvY2Vzc193cml0ZV9iYWNrbG9nKCksIGJ1dCBzY2hlZHVsZSBpdDoKKyAgICAgICAgIyBfb25faGFuZHNoYWtlX2NvbXBsZXRlKCkgY2FuIGJlIGNhbGxlZCBpbmRpcmVjdGx5IGZyb20KKyAgICAgICAgIyBfcHJvY2Vzc193cml0ZV9iYWNrbG9nKCksIGFuZCBfcHJvY2Vzc193cml0ZV9iYWNrbG9nKCkgaXMgbm90CisgICAgICAgICMgcmVlbnRyYW50LgorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9wcm9jZXNzX3dyaXRlX2JhY2tsb2cpCisKKyAgICBkZWYgX3Byb2Nlc3Nfd3JpdGVfYmFja2xvZyhzZWxmKToKKyAgICAgICAgIyBUcnkgdG8gbWFrZSBwcm9ncmVzcyBvbiB0aGUgd3JpdGUgYmFja2xvZy4KKyAgICAgICAgaWYgc2VsZi5fdHJhbnNwb3J0IGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oc2VsZi5fd3JpdGVfYmFja2xvZykpOgorICAgICAgICAgICAgICAgIGRhdGEsIG9mZnNldCA9IHNlbGYuX3dyaXRlX2JhY2tsb2dbMF0KKyAgICAgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgICAgICBzc2xkYXRhLCBvZmZzZXQgPSBzZWxmLl9zc2xwaXBlLmZlZWRfYXBwZGF0YShkYXRhLCBvZmZzZXQpCisgICAgICAgICAgICAgICAgZWxpZiBvZmZzZXQ6CisgICAgICAgICAgICAgICAgICAgIHNzbGRhdGEgPSBzZWxmLl9zc2xwaXBlLmRvX2hhbmRzaGFrZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX29uX2hhbmRzaGFrZV9jb21wbGV0ZSkKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNzbGRhdGEgPSBzZWxmLl9zc2xwaXBlLnNodXRkb3duKHNlbGYuX2ZpbmFsaXplKQorICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAxCisKKyAgICAgICAgICAgICAgICBmb3IgY2h1bmsgaW4gc3NsZGF0YToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0LndyaXRlKGNodW5rKQorCisgICAgICAgICAgICAgICAgaWYgb2Zmc2V0IDwgbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9iYWNrbG9nWzBdID0gKGRhdGEsIG9mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgIyBBIHNob3J0IHdyaXRlIG1lYW5zIHRoYXQgYSB3cml0ZSBpcyBibG9ja2VkIG9uIGEgcmVhZAorICAgICAgICAgICAgICAgICAgICAjIFdlIG5lZWQgdG8gZW5hYmxlIHJlYWRpbmcgaWYgaXQgaXMgcGF1c2VkIQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgc2VsZi5fc3NscGlwZS5uZWVkX3NzbGRhdGEKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fdHJhbnNwb3J0Ll9wYXVzZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcoKQorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgIyBBbiBlbnRpcmUgY2h1bmsgZnJvbSB0aGUgYmFja2xvZyB3YXMgcHJvY2Vzc2VkLiBXZSBjYW4KKyAgICAgICAgICAgICAgICAjIGRlbGV0ZSBpdCBhbmQgcmVkdWNlIHRoZSBvdXRzdGFuZGluZyBidWZmZXIgc2l6ZS4KKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fd3JpdGVfYmFja2xvZ1swXQorICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX2J1ZmZlcl9zaXplIC09IGxlbihkYXRhKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBpZiBzZWxmLl9pbl9oYW5kc2hha2U6CisgICAgICAgICAgICAgICAgIyBCYXNlRXhjZXB0aW9ucyB3aWxsIGJlIHJlLXJhaXNlZCBpbiBfb25faGFuZHNoYWtlX2NvbXBsZXRlLgorICAgICAgICAgICAgICAgIHNlbGYuX29uX2hhbmRzaGFrZV9jb21wbGV0ZShleGMpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIGVycm9yIG9uIFNTTCB0cmFuc3BvcnQnKQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgICMgQmFzZUV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgX2ZhdGFsX2Vycm9yKHNlbGYsIGV4YywgbWVzc2FnZT0nRmF0YWwgZXJyb3Igb24gdHJhbnNwb3J0Jyk6CisgICAgICAgICMgU2hvdWxkIGJlIGNhbGxlZCBmcm9tIGV4Y2VwdGlvbiBoYW5kbGVyIG9ubHkuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvcikpOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyOiAlcyIsIHNlbGYsIG1lc3NhZ2UsIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICd0cmFuc3BvcnQnOiBzZWxmLl90cmFuc3BvcnQsCisgICAgICAgICAgICAgICAgJ3Byb3RvY29sJzogc2VsZiwKKyAgICAgICAgICAgIH0pCisgICAgICAgIGlmIHNlbGYuX3RyYW5zcG9ydDoKKyAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5fZm9yY2VfY2xvc2UoZXhjKQorCisgICAgZGVmIF9maW5hbGl6ZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fdHJhbnNwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0LmNsb3NlKCkKKworICAgIGRlZiBfYWJvcnQoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3RyYW5zcG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQuYWJvcnQoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLl9maW5hbGl6ZSgpCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby9zdHJlYW1zLnB5IGIvTGliL2FzeW5jaW8vc3RyZWFtcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDA4ZDUxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vc3RyZWFtcy5weQpAQCAtMCwwICsxLDY4MCBAQAorIiIiU3RyZWFtLXJlbGF0ZWQgdGhpbmdzLiIiIgorCitfX2FsbF9fID0gWydTdHJlYW1SZWFkZXInLCAnU3RyZWFtV3JpdGVyJywgJ1N0cmVhbVJlYWRlclByb3RvY29sJywKKyAgICAgICAgICAgJ29wZW5fY29ubmVjdGlvbicsICdzdGFydF9zZXJ2ZXInLAorICAgICAgICAgICAnSW5jb21wbGV0ZVJlYWRFcnJvcicsCisgICAgICAgICAgICdMaW1pdE92ZXJydW5FcnJvcicsCisgICAgICAgICAgIF0KKworaW1wb3J0IHNvY2tldAorCitpZiBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKToKKyAgICBfX2FsbF9fLmV4dGVuZChbJ29wZW5fdW5peF9jb25uZWN0aW9uJywgJ3N0YXJ0X3VuaXhfc2VydmVyJ10pCisKK2Zyb20gLiBpbXBvcnQgY29yb3V0aW5lcworZnJvbSAuIGltcG9ydCBjb21wYXQKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworX0RFRkFVTFRfTElNSVQgPSAyKioxNgorCisKK2NsYXNzIEluY29tcGxldGVSZWFkRXJyb3IoRU9GRXJyb3IpOgorICAgICIiIgorICAgIEluY29tcGxldGUgcmVhZCBlcnJvci4gQXR0cmlidXRlczoKKworICAgIC0gcGFydGlhbDogcmVhZCBieXRlcyBzdHJpbmcgYmVmb3JlIHRoZSBlbmQgb2Ygc3RyZWFtIHdhcyByZWFjaGVkCisgICAgLSBleHBlY3RlZDogdG90YWwgbnVtYmVyIG9mIGV4cGVjdGVkIGJ5dGVzIChvciBOb25lIGlmIHVua25vd24pCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpYWwsIGV4cGVjdGVkKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygiJWQgYnl0ZXMgcmVhZCBvbiBhIHRvdGFsIG9mICVyIGV4cGVjdGVkIGJ5dGVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICUgKGxlbihwYXJ0aWFsKSwgZXhwZWN0ZWQpKQorICAgICAgICBzZWxmLnBhcnRpYWwgPSBwYXJ0aWFsCisgICAgICAgIHNlbGYuZXhwZWN0ZWQgPSBleHBlY3RlZAorCisKK2NsYXNzIExpbWl0T3ZlcnJ1bkVycm9yKEV4Y2VwdGlvbik6CisgICAgIiIiUmVhY2hlZCBidWZmZXIgbGltaXQgd2hpbGUgbG9va2luZyBmb3IgdGhlIHNlcGFyYXRvci4KKworICAgIEF0dHJpYnV0ZXM6CisgICAgLSBtZXNzYWdlOiBlcnJvciBtZXNzYWdlCisgICAgLSBjb25zdW1lZDogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgc2hvdWxkIGJlIGNvbnN1bWVkCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1lc3NhZ2UsIGNvbnN1bWVkKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhtZXNzYWdlKQorICAgICAgICBzZWxmLm1lc3NhZ2UgPSBtZXNzYWdlCisgICAgICAgIHNlbGYuY29uc3VtZWQgPSBjb25zdW1lZAorCisKK0Bjb3JvdXRpbmUKK2RlZiBvcGVuX2Nvbm5lY3Rpb24oaG9zdD1Ob25lLCBwb3J0PU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9X0RFRkFVTFRfTElNSVQsICoqa3dkcyk6CisgICAgIiIiQSB3cmFwcGVyIGZvciBjcmVhdGVfY29ubmVjdGlvbigpIHJldHVybmluZyBhIChyZWFkZXIsIHdyaXRlcikgcGFpci4KKworICAgIFRoZSByZWFkZXIgcmV0dXJuZWQgaXMgYSBTdHJlYW1SZWFkZXIgaW5zdGFuY2U7IHRoZSB3cml0ZXIgaXMgYQorICAgIFN0cmVhbVdyaXRlciBpbnN0YW5jZS4KKworICAgIFRoZSBhcmd1bWVudHMgYXJlIGFsbCB0aGUgdXN1YWwgYXJndW1lbnRzIHRvIGNyZWF0ZV9jb25uZWN0aW9uKCkKKyAgICBleGNlcHQgcHJvdG9jb2xfZmFjdG9yeTsgbW9zdCBjb21tb24gYXJlIHBvc2l0aW9uYWwgaG9zdCBhbmQgcG9ydCwKKyAgICB3aXRoIHZhcmlvdXMgb3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgZm9sbG93aW5nLgorCisgICAgQWRkaXRpb25hbCBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgbG9vcCAodG8gc2V0IHRoZSBldmVudCBsb29wCisgICAgaW5zdGFuY2UgdG8gdXNlKSBhbmQgbGltaXQgKHRvIHNldCB0aGUgYnVmZmVyIGxpbWl0IHBhc3NlZCB0byB0aGUKKyAgICBTdHJlYW1SZWFkZXIpLgorCisgICAgKElmIHlvdSB3YW50IHRvIGN1c3RvbWl6ZSB0aGUgU3RyZWFtUmVhZGVyIGFuZC9vcgorICAgIFN0cmVhbVJlYWRlclByb3RvY29sIGNsYXNzZXMsIGp1c3QgY29weSB0aGUgY29kZSAtLSB0aGVyZSdzCisgICAgcmVhbGx5IG5vdGhpbmcgc3BlY2lhbCBoZXJlIGV4Y2VwdCBzb21lIGNvbnZlbmllbmNlLikKKyAgICAiIiIKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIHJlYWRlciA9IFN0cmVhbVJlYWRlcihsaW1pdD1saW1pdCwgbG9vcD1sb29wKQorICAgIHByb3RvY29sID0gU3RyZWFtUmVhZGVyUHJvdG9jb2wocmVhZGVyLCBsb29wPWxvb3ApCisgICAgdHJhbnNwb3J0LCBfID0geWllbGQgZnJvbSBsb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICBsYW1iZGE6IHByb3RvY29sLCBob3N0LCBwb3J0LCAqKmt3ZHMpCisgICAgd3JpdGVyID0gU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgcHJvdG9jb2wsIHJlYWRlciwgbG9vcCkKKyAgICByZXR1cm4gcmVhZGVyLCB3cml0ZXIKKworCitAY29yb3V0aW5lCitkZWYgc3RhcnRfc2VydmVyKGNsaWVudF9jb25uZWN0ZWRfY2IsIGhvc3Q9Tm9uZSwgcG9ydD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBsb29wPU5vbmUsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgICIiIlN0YXJ0IGEgc29ja2V0IHNlcnZlciwgY2FsbCBiYWNrIGZvciBlYWNoIGNsaWVudCBjb25uZWN0ZWQuCisKKyAgICBUaGUgZmlyc3QgcGFyYW1ldGVyLCBgY2xpZW50X2Nvbm5lY3RlZF9jYmAsIHRha2VzIHR3byBwYXJhbWV0ZXJzOgorICAgIGNsaWVudF9yZWFkZXIsIGNsaWVudF93cml0ZXIuICBjbGllbnRfcmVhZGVyIGlzIGEgU3RyZWFtUmVhZGVyCisgICAgb2JqZWN0LCB3aGlsZSBjbGllbnRfd3JpdGVyIGlzIGEgU3RyZWFtV3JpdGVyIG9iamVjdC4gIFRoaXMKKyAgICBwYXJhbWV0ZXIgY2FuIGVpdGhlciBiZSBhIHBsYWluIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGEgY29yb3V0aW5lOworICAgIGlmIGl0IGlzIGEgY29yb3V0aW5lLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIGludG8gYQorICAgIFRhc2suCisKKyAgICBUaGUgcmVzdCBvZiB0aGUgYXJndW1lbnRzIGFyZSBhbGwgdGhlIHVzdWFsIGFyZ3VtZW50cyB0bworICAgIGxvb3AuY3JlYXRlX3NlcnZlcigpIGV4Y2VwdCBwcm90b2NvbF9mYWN0b3J5OyBtb3N0IGNvbW1vbiBhcmUKKyAgICBwb3NpdGlvbmFsIGhvc3QgYW5kIHBvcnQsIHdpdGggdmFyaW91cyBvcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cworICAgIGZvbGxvd2luZy4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIHNhbWUgYXMgbG9vcC5jcmVhdGVfc2VydmVyKCkuCisKKyAgICBBZGRpdGlvbmFsIG9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBsb29wICh0byBzZXQgdGhlIGV2ZW50IGxvb3AKKyAgICBpbnN0YW5jZSB0byB1c2UpIGFuZCBsaW1pdCAodG8gc2V0IHRoZSBidWZmZXIgbGltaXQgcGFzc2VkIHRvIHRoZQorICAgIFN0cmVhbVJlYWRlcikuCisKKyAgICBUaGUgcmV0dXJuIHZhbHVlIGlzIHRoZSBzYW1lIGFzIGxvb3AuY3JlYXRlX3NlcnZlcigpLCBpLmUuIGEKKyAgICBTZXJ2ZXIgb2JqZWN0IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgdGhlIHNlcnZpY2UuCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGRlZiBmYWN0b3J5KCk6CisgICAgICAgIHJlYWRlciA9IFN0cmVhbVJlYWRlcihsaW1pdD1saW1pdCwgbG9vcD1sb29wKQorICAgICAgICBwcm90b2NvbCA9IFN0cmVhbVJlYWRlclByb3RvY29sKHJlYWRlciwgY2xpZW50X2Nvbm5lY3RlZF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisgICAgICAgIHJldHVybiBwcm90b2NvbAorCisgICAgcmV0dXJuICh5aWVsZCBmcm9tIGxvb3AuY3JlYXRlX3NlcnZlcihmYWN0b3J5LCBob3N0LCBwb3J0LCAqKmt3ZHMpKQorCisKK2lmIGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpOgorICAgICMgVU5JWCBEb21haW4gU29ja2V0cyBhcmUgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0KKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgb3Blbl91bml4X2Nvbm5lY3Rpb24ocGF0aD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPU5vbmUsIGxpbWl0PV9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgICAgICAiIiJTaW1pbGFyIHRvIGBvcGVuX2Nvbm5lY3Rpb25gIGJ1dCB3b3JrcyB3aXRoIFVOSVggRG9tYWluIFNvY2tldHMuIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICByZWFkZXIgPSBTdHJlYW1SZWFkZXIobGltaXQ9bGltaXQsIGxvb3A9bG9vcCkKKyAgICAgICAgcHJvdG9jb2wgPSBTdHJlYW1SZWFkZXJQcm90b2NvbChyZWFkZXIsIGxvb3A9bG9vcCkKKyAgICAgICAgdHJhbnNwb3J0LCBfID0geWllbGQgZnJvbSBsb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvY29sLCBwYXRoLCAqKmt3ZHMpCisgICAgICAgIHdyaXRlciA9IFN0cmVhbVdyaXRlcih0cmFuc3BvcnQsIHByb3RvY29sLCByZWFkZXIsIGxvb3ApCisgICAgICAgIHJldHVybiByZWFkZXIsIHdyaXRlcgorCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHN0YXJ0X3VuaXhfc2VydmVyKGNsaWVudF9jb25uZWN0ZWRfY2IsIHBhdGg9Tm9uZSwgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1Ob25lLCBsaW1pdD1fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICAgICAgIiIiU2ltaWxhciB0byBgc3RhcnRfc2VydmVyYCBidXQgd29ya3Mgd2l0aCBVTklYIERvbWFpbiBTb2NrZXRzLiIiIgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgICAgICBkZWYgZmFjdG9yeSgpOgorICAgICAgICAgICAgcmVhZGVyID0gU3RyZWFtUmVhZGVyKGxpbWl0PWxpbWl0LCBsb29wPWxvb3ApCisgICAgICAgICAgICBwcm90b2NvbCA9IFN0cmVhbVJlYWRlclByb3RvY29sKHJlYWRlciwgY2xpZW50X2Nvbm5lY3RlZF9jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgICAgICAgICAgcmV0dXJuIHByb3RvY29sCisKKyAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGZhY3RvcnksIHBhdGgsICoqa3dkcykpCisKKworY2xhc3MgRmxvd0NvbnRyb2xNaXhpbihwcm90b2NvbHMuUHJvdG9jb2wpOgorICAgICIiIlJldXNhYmxlIGZsb3cgY29udHJvbCBsb2dpYyBmb3IgU3RyZWFtV3JpdGVyLmRyYWluKCkuCisKKyAgICBUaGlzIGltcGxlbWVudHMgdGhlIHByb3RvY29sIG1ldGhvZHMgcGF1c2Vfd3JpdGluZygpLAorICAgIHJlc3VtZV9yZWFkaW5nKCkgYW5kIGNvbm5lY3Rpb25fbG9zdCgpLiAgSWYgdGhlIHN1YmNsYXNzIG92ZXJyaWRlcworICAgIHRoZXNlIGl0IG11c3QgY2FsbCB0aGUgc3VwZXIgbWV0aG9kcy4KKworICAgIFN0cmVhbVdyaXRlci5kcmFpbigpIG11c3Qgd2FpdCBmb3IgX2RyYWluX2hlbHBlcigpIGNvcm91dGluZS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wPU5vbmUpOgorICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29ubmVjdGlvbl9sb3N0ID0gRmFsc2UKKworICAgIGRlZiBwYXVzZV93cml0aW5nKHNlbGYpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX3BhdXNlZAorICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCk6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyIHBhdXNlcyB3cml0aW5nIiwgc2VsZikKKworICAgIGRlZiByZXN1bWVfd3JpdGluZyhzZWxmKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3BhdXNlZAorICAgICAgICBzZWxmLl9wYXVzZWQgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCIlciByZXN1bWVzIHdyaXRpbmciLCBzZWxmKQorCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9kcmFpbl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBzZWxmLl9jb25uZWN0aW9uX2xvc3QgPSBUcnVlCisgICAgICAgICMgV2FrZSB1cCB0aGUgd3JpdGVyIGlmIGN1cnJlbnRseSBwYXVzZWQuCisgICAgICAgIGlmIG5vdCBzZWxmLl9wYXVzZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2FpdGVyID0gc2VsZi5fZHJhaW5fd2FpdGVyCisgICAgICAgIGlmIHdhaXRlciBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX2RyYWluX3dhaXRlciA9IE5vbmUKKyAgICAgICAgaWYgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBleGMgaXMgTm9uZToKKyAgICAgICAgICAgIHdhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3YWl0ZXIuc2V0X2V4Y2VwdGlvbihleGMpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIF9kcmFpbl9oZWxwZXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2Nvbm5lY3Rpb25fbG9zdDoKKyAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZXNldEVycm9yKCdDb25uZWN0aW9uIGxvc3QnKQorICAgICAgICBpZiBub3Qgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHdhaXRlciA9IHNlbGYuX2RyYWluX3dhaXRlcgorICAgICAgICBhc3NlcnQgd2FpdGVyIGlzIE5vbmUgb3Igd2FpdGVyLmNhbmNlbGxlZCgpCisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgc2VsZi5fZHJhaW5fd2FpdGVyID0gd2FpdGVyCisgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisKKworY2xhc3MgU3RyZWFtUmVhZGVyUHJvdG9jb2woRmxvd0NvbnRyb2xNaXhpbiwgcHJvdG9jb2xzLlByb3RvY29sKToKKyAgICAiIiJIZWxwZXIgY2xhc3MgdG8gYWRhcHQgYmV0d2VlbiBQcm90b2NvbCBhbmQgU3RyZWFtUmVhZGVyLgorCisgICAgKFRoaXMgaXMgYSBoZWxwZXIgY2xhc3MgaW5zdGVhZCBvZiBtYWtpbmcgU3RyZWFtUmVhZGVyIGl0c2VsZiBhCisgICAgUHJvdG9jb2wgc3ViY2xhc3MsIGJlY2F1c2UgdGhlIFN0cmVhbVJlYWRlciBoYXMgb3RoZXIgcG90ZW50aWFsCisgICAgdXNlcywgYW5kIHRvIHByZXZlbnQgdGhlIHVzZXIgb2YgdGhlIFN0cmVhbVJlYWRlciB0byBhY2NpZGVudGFsbHkKKyAgICBjYWxsIGluYXBwcm9wcmlhdGUgbWV0aG9kcyBvZiB0aGUgcHJvdG9jb2wuKQorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0cmVhbV9yZWFkZXIsIGNsaWVudF9jb25uZWN0ZWRfY2I9Tm9uZSwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIgPSBzdHJlYW1fcmVhZGVyCisgICAgICAgIHNlbGYuX3N0cmVhbV93cml0ZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2IgPSBjbGllbnRfY29ubmVjdGVkX2NiCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuc2V0X3RyYW5zcG9ydCh0cmFuc3BvcnQpCisgICAgICAgIGlmIHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2IgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fd3JpdGVyID0gU3RyZWFtV3JpdGVyKHRyYW5zcG9ydCwgc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHJlcyA9IHNlbGYuX2NsaWVudF9jb25uZWN0ZWRfY2Ioc2VsZi5fc3RyZWFtX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyZWFtX3dyaXRlcikKKyAgICAgICAgICAgIGlmIGNvcm91dGluZXMuaXNjb3JvdXRpbmUocmVzKToKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNyZWF0ZV90YXNrKHJlcykKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZW9mKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3N0cmVhbV9yZWFkZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9sb3N0KGV4YykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl9zdHJlYW1fcmVhZGVyLmZlZWRfZGF0YShkYXRhKQorCisgICAgZGVmIGVvZl9yZWNlaXZlZChzZWxmKToKKyAgICAgICAgc2VsZi5fc3RyZWFtX3JlYWRlci5mZWVkX2VvZigpCisgICAgICAgIHJldHVybiBUcnVlCisKKworY2xhc3MgU3RyZWFtV3JpdGVyOgorICAgICIiIldyYXBzIGEgVHJhbnNwb3J0LgorCisgICAgVGhpcyBleHBvc2VzIHdyaXRlKCksIHdyaXRlbGluZXMoKSwgW2Nhbl9dd3JpdGVfZW9mKCksCisgICAgZ2V0X2V4dHJhX2luZm8oKSBhbmQgY2xvc2UoKS4gIEl0IGFkZHMgZHJhaW4oKSB3aGljaCByZXR1cm5zIGFuCisgICAgb3B0aW9uYWwgRnV0dXJlIG9uIHdoaWNoIHlvdSBjYW4gd2FpdCBmb3IgZmxvdyBjb250cm9sLiAgSXQgYWxzbworICAgIGFkZHMgYSB0cmFuc3BvcnQgcHJvcGVydHkgd2hpY2ggcmVmZXJlbmNlcyB0aGUgVHJhbnNwb3J0CisgICAgZGlyZWN0bHkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhbnNwb3J0LCBwcm90b2NvbCwgcmVhZGVyLCBsb29wKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgIyBkcmFpbigpIGV4cGVjdHMgdGhhdCB0aGUgcmVhZGVyIGhhcyBhbiBleGNlcHRpb24oKSBtZXRob2QKKyAgICAgICAgYXNzZXJ0IHJlYWRlciBpcyBOb25lIG9yIGlzaW5zdGFuY2UocmVhZGVyLCBTdHJlYW1SZWFkZXIpCisgICAgICAgIHNlbGYuX3JlYWRlciA9IHJlYWRlcgorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAndHJhbnNwb3J0PSVyJyAlIHNlbGYuX3RyYW5zcG9ydF0KKyAgICAgICAgaWYgc2VsZi5fcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3JlYWRlcj0lcicgJSBzZWxmLl9yZWFkZXIpCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRyYW5zcG9ydChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydAorCisgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQud3JpdGVsaW5lcyhkYXRhKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC53cml0ZV9lb2YoKQorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuY2FuX3dyaXRlX2VvZigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuY2xvc2UoKQorCisgICAgZGVmIGdldF9leHRyYV9pbmZvKHNlbGYsIG5hbWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl90cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8obmFtZSwgZGVmYXVsdCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgZHJhaW4oc2VsZik6CisgICAgICAgICIiIkZsdXNoIHRoZSB3cml0ZSBidWZmZXIuCisKKyAgICAgICAgVGhlIGludGVuZGVkIHVzZSBpcyB0byB3cml0ZQorCisgICAgICAgICAgdy53cml0ZShkYXRhKQorICAgICAgICAgIHlpZWxkIGZyb20gdy5kcmFpbigpCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9yZWFkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBleGMgPSBzZWxmLl9yZWFkZXIuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgaWYgc2VsZi5fdHJhbnNwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5fdHJhbnNwb3J0LmlzX2Nsb3NpbmcoKToKKyAgICAgICAgICAgICAgICAjIFlpZWxkIHRvIHRoZSBldmVudCBsb29wIHNvIGNvbm5lY3Rpb25fbG9zdCgpIG1heSBiZQorICAgICAgICAgICAgICAgICMgY2FsbGVkLiAgV2l0aG91dCB0aGlzLCBfZHJhaW5faGVscGVyKCkgd291bGQgcmV0dXJuCisgICAgICAgICAgICAgICAgIyBpbW1lZGlhdGVseSwgYW5kIGNvZGUgdGhhdCBjYWxscworICAgICAgICAgICAgICAgICMgICAgIHdyaXRlKC4uLik7IHlpZWxkIGZyb20gZHJhaW4oKQorICAgICAgICAgICAgICAgICMgaW4gYSBsb29wIHdvdWxkIG5ldmVyIGNhbGwgY29ubmVjdGlvbl9sb3N0KCksIHNvIGl0CisgICAgICAgICAgICAgICAgIyB3b3VsZCBub3Qgc2VlIGFuIGVycm9yIHdoZW4gdGhlIHNvY2tldCBpcyBjbG9zZWQuCisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9wcm90b2NvbC5fZHJhaW5faGVscGVyKCkKKworCitjbGFzcyBTdHJlYW1SZWFkZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGltaXQ9X0RFRkFVTFRfTElNSVQsIGxvb3A9Tm9uZSk6CisgICAgICAgICMgVGhlIGxpbmUgbGVuZ3RoIGxpbWl0IGlzICBhIHNlY3VyaXR5IGZlYXR1cmU7CisgICAgICAgICMgaXQgYWxzbyBkb3VibGVzIGFzIGhhbGYgdGhlIGJ1ZmZlciBsaW1pdC4KKworICAgICAgICBpZiBsaW1pdCA8PSAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignTGltaXQgY2Fubm90IGJlIDw9IDAnKQorCisgICAgICAgIHNlbGYuX2xpbWl0ID0gbGltaXQKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9idWZmZXIgPSBieXRlYXJyYXkoKQorICAgICAgICBzZWxmLl9lb2YgPSBGYWxzZSAgICAjIFdoZXRoZXIgd2UncmUgZG9uZS4KKyAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZSAgIyBBIGZ1dHVyZSB1c2VkIGJ5IF93YWl0X2Zvcl9kYXRhKCkKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9uID0gTm9uZQorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbJ1N0cmVhbVJlYWRlciddCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCclZCBieXRlcycgJSBsZW4oc2VsZi5fYnVmZmVyKSkKKyAgICAgICAgaWYgc2VsZi5fZW9mOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2VvZicpCisgICAgICAgIGlmIHNlbGYuX2xpbWl0ICE9IF9ERUZBVUxUX0xJTUlUOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2w9JWQnICUgc2VsZi5fbGltaXQpCisgICAgICAgIGlmIHNlbGYuX3dhaXRlcjoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCd3PSVyJyAlIHNlbGYuX3dhaXRlcikKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2U9JXInICUgc2VsZi5fZXhjZXB0aW9uKQorICAgICAgICBpZiBzZWxmLl90cmFuc3BvcnQ6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgndD0lcicgJSBzZWxmLl90cmFuc3BvcnQpCisgICAgICAgIGlmIHNlbGYuX3BhdXNlZDoKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdwYXVzZWQnKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIGRlZiBleGNlcHRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9leGNlcHRpb24KKworICAgIGRlZiBzZXRfZXhjZXB0aW9uKHNlbGYsIGV4Yyk6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4YworCisgICAgICAgIHdhaXRlciA9IHNlbGYuX3dhaXRlcgorICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0ZXIgPSBOb25lCisgICAgICAgICAgICBpZiBub3Qgd2FpdGVyLmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgIHdhaXRlci5zZXRfZXhjZXB0aW9uKGV4YykKKworICAgIGRlZiBfd2FrZXVwX3dhaXRlcihzZWxmKToKKyAgICAgICAgIiIiV2FrZXVwIHJlYWQqKCkgZnVuY3Rpb25zIHdhaXRpbmcgZm9yIGRhdGEgb3IgRU9GLiIiIgorICAgICAgICB3YWl0ZXIgPSBzZWxmLl93YWl0ZXIKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIHNldF90cmFuc3BvcnQoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3RyYW5zcG9ydCBpcyBOb25lLCAnVHJhbnNwb3J0IGFscmVhZHkgc2V0JworICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSB0cmFuc3BvcnQKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkIGFuZCBsZW4oc2VsZi5fYnVmZmVyKSA8PSBzZWxmLl9saW1pdDoKKyAgICAgICAgICAgIHNlbGYuX3BhdXNlZCA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLl90cmFuc3BvcnQucmVzdW1lX3JlYWRpbmcoKQorCisgICAgZGVmIGZlZWRfZW9mKHNlbGYpOgorICAgICAgICBzZWxmLl9lb2YgPSBUcnVlCisgICAgICAgIHNlbGYuX3dha2V1cF93YWl0ZXIoKQorCisgICAgZGVmIGF0X2VvZihzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGJ1ZmZlciBpcyBlbXB0eSBhbmQgJ2ZlZWRfZW9mJyB3YXMgY2FsbGVkLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZW9mIGFuZCBub3Qgc2VsZi5fYnVmZmVyCisKKyAgICBkZWYgZmVlZF9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2VvZiwgJ2ZlZWRfZGF0YSBhZnRlciBmZWVkX2VvZicKKworICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5fd2FrZXVwX3dhaXRlcigpCisKKyAgICAgICAgaWYgKHNlbGYuX3RyYW5zcG9ydCBpcyBub3QgTm9uZSBhbmQKKyAgICAgICAgICAgIG5vdCBzZWxmLl9wYXVzZWQgYW5kCisgICAgICAgICAgICBsZW4oc2VsZi5fYnVmZmVyKSA+IDIqc2VsZi5fbGltaXQpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgICMgVGhlIHRyYW5zcG9ydCBjYW4ndCBiZSBwYXVzZWQuCisgICAgICAgICAgICAgICAgIyBXZSdsbCBqdXN0IGhhdmUgdG8gYnVmZmVyIGFsbCBkYXRhLgorICAgICAgICAgICAgICAgICMgRm9yZ2V0IHRoZSB0cmFuc3BvcnQgc28gd2UgZG9uJ3Qga2VlcCB0cnlpbmcuCisgICAgICAgICAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXVzZWQgPSBUcnVlCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIF93YWl0X2Zvcl9kYXRhKHNlbGYsIGZ1bmNfbmFtZSk6CisgICAgICAgICIiIldhaXQgdW50aWwgZmVlZF9kYXRhKCkgb3IgZmVlZF9lb2YoKSBpcyBjYWxsZWQuCisKKyAgICAgICAgSWYgc3RyZWFtIHdhcyBwYXVzZWQsIGF1dG9tYXRpY2FsbHkgcmVzdW1lIGl0LgorICAgICAgICAiIiIKKyAgICAgICAgIyBTdHJlYW1SZWFkZXIgdXNlcyBhIGZ1dHVyZSB0byBsaW5rIHRoZSBwcm90b2NvbCBmZWVkX2RhdGEoKSBtZXRob2QKKyAgICAgICAgIyB0byBhIHJlYWQgY29yb3V0aW5lLiBSdW5uaW5nIHR3byByZWFkIGNvcm91dGluZXMgYXQgdGhlIHNhbWUgdGltZQorICAgICAgICAjIHdvdWxkIGhhdmUgYW4gdW5leHBlY3RlZCBiZWhhdmlvdXIuIEl0IHdvdWxkIG5vdCBwb3NzaWJsZSB0byBrbm93CisgICAgICAgICMgd2hpY2ggY29yb3V0aW5lIHdvdWxkIGdldCB0aGUgbmV4dCBkYXRhLgorICAgICAgICBpZiBzZWxmLl93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyVzKCkgY2FsbGVkIHdoaWxlIGFub3RoZXIgY29yb3V0aW5lIGlzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxyZWFkeSB3YWl0aW5nIGZvciBpbmNvbWluZyBkYXRhJyAlIGZ1bmNfbmFtZSkKKworICAgICAgICBhc3NlcnQgbm90IHNlbGYuX2VvZiwgJ193YWl0X2Zvcl9kYXRhIGFmdGVyIEVPRicKKworICAgICAgICAjIFdhaXRpbmcgZm9yIGRhdGEgd2hpbGUgcGF1c2VkIHdpbGwgbWFrZSBkZWFkbG9jaywgc28gcHJldmVudCBpdC4KKyAgICAgICAgaWYgc2VsZi5fcGF1c2VkOgorICAgICAgICAgICAgc2VsZi5fcGF1c2VkID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5yZXN1bWVfcmVhZGluZygpCisKKyAgICAgICAgc2VsZi5fd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX3dhaXRlcgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fd2FpdGVyID0gTm9uZQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgIiIiUmVhZCBjaHVuayBvZiBkYXRhIGZyb20gdGhlIHN0cmVhbSB1bnRpbCBuZXdsaW5lIChiJ1xuJykgaXMgZm91bmQuCisKKyAgICAgICAgT24gc3VjY2VzcywgcmV0dXJuIGNodW5rIHRoYXQgZW5kcyB3aXRoIG5ld2xpbmUuIElmIG9ubHkgcGFydGlhbAorICAgICAgICBsaW5lIGNhbiBiZSByZWFkIGR1ZSB0byBFT0YsIHJldHVybiBpbmNvbXBsZXRlIGxpbmUgd2l0aG91dAorICAgICAgICB0ZXJtaW5hdGluZyBuZXdsaW5lLiBXaGVuIEVPRiB3YXMgcmVhY2hlZCB3aGlsZSBubyBieXRlcyByZWFkLCBlbXB0eQorICAgICAgICBieXRlcyBvYmplY3QgaXMgcmV0dXJuZWQuCisKKyAgICAgICAgSWYgbGltaXQgaXMgcmVhY2hlZCwgVmFsdWVFcnJvciB3aWxsIGJlIHJhaXNlZC4gSW4gdGhhdCBjYXNlLCBpZgorICAgICAgICBuZXdsaW5lIHdhcyBmb3VuZCwgY29tcGxldGUgbGluZSBpbmNsdWRpbmcgbmV3bGluZSB3aWxsIGJlIHJlbW92ZWQKKyAgICAgICAgZnJvbSBpbnRlcm5hbCBidWZmZXIuIEVsc2UsIGludGVybmFsIGJ1ZmZlciB3aWxsIGJlIGNsZWFyZWQuIExpbWl0IGlzCisgICAgICAgIGNvbXBhcmVkIGFnYWluc3QgcGFydCBvZiB0aGUgbGluZSB3aXRob3V0IG5ld2xpbmUuCisKKyAgICAgICAgSWYgc3RyZWFtIHdhcyBwYXVzZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IHJlc3VtZSBpdCBpZgorICAgICAgICBuZWVkZWQuCisgICAgICAgICIiIgorICAgICAgICBzZXAgPSBiJ1xuJworICAgICAgICBzZXBsZW4gPSBsZW4oc2VwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsaW5lID0geWllbGQgZnJvbSBzZWxmLnJlYWR1bnRpbChzZXApCisgICAgICAgIGV4Y2VwdCBJbmNvbXBsZXRlUmVhZEVycm9yIGFzIGU6CisgICAgICAgICAgICByZXR1cm4gZS5wYXJ0aWFsCisgICAgICAgIGV4Y2VwdCBMaW1pdE92ZXJydW5FcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgc2VsZi5fYnVmZmVyLnN0YXJ0c3dpdGgoc2VwLCBlLmNvbnN1bWVkKToKKyAgICAgICAgICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzplLmNvbnN1bWVkICsgc2VwbGVuXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3RyYW5zcG9ydCgpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGUuYXJnc1swXSkKKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgcmVhZHVudGlsKHNlbGYsIHNlcGFyYXRvcj1iJ1xuJyk6CisgICAgICAgICIiIlJlYWQgY2h1bmsgb2YgZGF0YSBmcm9tIHRoZSBzdHJlYW0gdW50aWwgYHNlcGFyYXRvcmAgaXMgZm91bmQuCisKKyAgICAgICAgT24gc3VjY2VzcywgY2h1bmsgYW5kIGl0cyBzZXBhcmF0b3Igd2lsbCBiZSByZW1vdmVkIGZyb20gaW50ZXJuYWwgYnVmZmVyCisgICAgICAgIChpLmUuIGNvbnN1bWVkKS4gUmV0dXJuZWQgY2h1bmsgd2lsbCBpbmNsdWRlIHNlcGFyYXRvciBhdCB0aGUgZW5kLgorCisgICAgICAgIENvbmZpZ3VyZWQgc3RyZWFtIGxpbWl0IGlzIHVzZWQgdG8gY2hlY2sgcmVzdWx0LiBMaW1pdCBtZWFucyBtYXhpbWFsCisgICAgICAgIGxlbmd0aCBvZiBjaHVuayB0aGF0IGNhbiBiZSByZXR1cm5lZCwgbm90IGNvdW50aW5nIHRoZSBzZXBhcmF0b3IuCisKKyAgICAgICAgSWYgRU9GIG9jY3VycyBhbmQgY29tcGxldGUgc2VwYXJhdG9yIHN0aWxsIG5vdCBmb3VuZCwKKyAgICAgICAgSW5jb21wbGV0ZVJlYWRFcnJvcig8cGFydGlhbCBkYXRhPiwgTm9uZSkgd2lsbCBiZSByYWlzZWQgYW5kIGludGVybmFsCisgICAgICAgIGJ1ZmZlciBiZWNvbWVzIGVtcHR5LiBUaGlzIHBhcnRpYWwgZGF0YSBtYXkgY29udGFpbiBhIHBhcnRpYWwgc2VwYXJhdG9yLgorCisgICAgICAgIElmIGNodW5rIGNhbm5vdCBiZSByZWFkIGR1ZSB0byBvdmVybGltaXQsIExpbWl0T3ZlcnJ1bkVycm9yIHdpbGwgYmUgcmFpc2VkCisgICAgICAgIGFuZCBkYXRhIHdpbGwgYmUgbGVmdCBpbiBpbnRlcm5hbCBidWZmZXIsIHNvIGl0IGNhbiBiZSByZWFkIGFnYWluLCBpbgorICAgICAgICBzb21lIGRpZmZlcmVudCB3YXkuCisKKyAgICAgICAgSWYgc3RyZWFtIHdhcyBwYXVzZWQsIHRoaXMgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IHJlc3VtZSBpdCBpZgorICAgICAgICBuZWVkZWQuCisgICAgICAgICIiIgorICAgICAgICBzZXBsZW4gPSBsZW4oc2VwYXJhdG9yKQorICAgICAgICBpZiBzZXBsZW4gPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NlcGFyYXRvciBzaG91bGQgYmUgYXQgbGVhc3Qgb25lLWJ5dGUgc3RyaW5nJykKKworICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKworICAgICAgICAjIENvbnN1bWUgd2hvbGUgYnVmZmVyIGV4Y2VwdCBsYXN0IGJ5dGVzLCB3aGljaCBsZW5ndGggaXMKKyAgICAgICAgIyBvbmUgbGVzcyB0aGFuIHNlcGxlbi4gTGV0J3MgY2hlY2sgY29ybmVyIGNhc2VzIHdpdGgKKyAgICAgICAgIyBzZXBhcmF0b3I9J1NFUEFSQVRPUic6CisgICAgICAgICMgKiB3ZSBoYXZlIHJlY2VpdmVkIGFsbW9zdCBjb21wbGV0ZSBzZXBhcmF0b3IgKHdpdGhvdXQgbGFzdAorICAgICAgICAjICAgYnl0ZSkuIGkuZSBidWZmZXI9J3NvbWUgdGV4dFNFUEFSQVRPJy4gSW4gdGhpcyBjYXNlIHdlCisgICAgICAgICMgICBjYW4gc2FmZWx5IGNvbnN1bWUgbGVuKHNlcGFyYXRvcikgLSAxIGJ5dGVzLgorICAgICAgICAjICogbGFzdCBieXRlIG9mIGJ1ZmZlciBpcyBmaXJzdCBieXRlIG9mIHNlcGFyYXRvciwgaS5lLgorICAgICAgICAjICAgYnVmZmVyPSdhYmNkZWZnaGlqa2xtbm9wcXJTJy4gV2UgbWF5IHNhZmVseSBjb25zdW1lCisgICAgICAgICMgICBldmVyeXRoaW5nIGV4Y2VwdCB0aGF0IGxhc3QgYnl0ZSwgYnV0IHRoaXMgcmVxdWlyZSB0bworICAgICAgICAjICAgYW5hbHl6ZSBieXRlcyBvZiBidWZmZXIgdGhhdCBtYXRjaCBwYXJ0aWFsIHNlcGFyYXRvci4KKyAgICAgICAgIyAgIFRoaXMgaXMgc2xvdyBhbmQvb3IgcmVxdWlyZSBGU00uIEZvciB0aGlzIGNhc2Ugb3VyCisgICAgICAgICMgICBpbXBsZW1lbnRhdGlvbiBpcyBub3Qgb3B0aW1hbCwgc2luY2UgcmVxdWlyZSByZXNjYW5uaW5nCisgICAgICAgICMgICBvZiBkYXRhIHRoYXQgaXMga25vd24gdG8gbm90IGJlbG9uZyB0byBzZXBhcmF0b3IuIEluCisgICAgICAgICMgICByZWFsIHdvcmxkLCBzZXBhcmF0b3Igd2lsbCBub3QgYmUgc28gbG9uZyB0byBub3RpY2UKKyAgICAgICAgIyAgIHBlcmZvcm1hbmNlIHByb2JsZW1zLiBFdmVuIHdoZW4gcmVhZGluZyBNSU1FLWVuY29kZWQKKyAgICAgICAgIyAgIG1lc3NhZ2VzIDopCisKKyAgICAgICAgIyBgb2Zmc2V0YCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyIHdoZXJlCisgICAgICAgICMgaXMgbm8gb2NjdXJyZW5jZSBvZiBgc2VwYXJhdG9yYC4KKyAgICAgICAgb2Zmc2V0ID0gMAorCisgICAgICAgICMgTG9vcCB1bnRpbCB3ZSBmaW5kIGBzZXBhcmF0b3JgIGluIHRoZSBidWZmZXIsIGV4Y2VlZCB0aGUgYnVmZmVyIHNpemUsCisgICAgICAgICMgb3IgYW4gRU9GIGhhcyBoYXBwZW5lZC4KKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGJ1ZmxlbiA9IGxlbihzZWxmLl9idWZmZXIpCisKKyAgICAgICAgICAgICMgQ2hlY2sgaWYgd2Ugbm93IGhhdmUgZW5vdWdoIGRhdGEgaW4gdGhlIGJ1ZmZlciBmb3IgYHNlcGFyYXRvcmAgdG8KKyAgICAgICAgICAgICMgZml0LgorICAgICAgICAgICAgaWYgYnVmbGVuIC0gb2Zmc2V0ID49IHNlcGxlbjoKKyAgICAgICAgICAgICAgICBpc2VwID0gc2VsZi5fYnVmZmVyLmZpbmQoc2VwYXJhdG9yLCBvZmZzZXQpCisKKyAgICAgICAgICAgICAgICBpZiBpc2VwICE9IC0xOgorICAgICAgICAgICAgICAgICAgICAjIGBzZXBhcmF0b3JgIGlzIGluIHRoZSBidWZmZXIuIGBpc2VwYCB3aWxsIGJlIHVzZWQgbGF0ZXIgdG8KKyAgICAgICAgICAgICAgICAgICAgIyByZXRyaWV2ZSB0aGUgZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgICMgc2VlIHVwcGVyIGNvbW1lbnQgZm9yIGV4cGxhbmF0aW9uLgorICAgICAgICAgICAgICAgIG9mZnNldCA9IGJ1ZmxlbiArIDEgLSBzZXBsZW4KKyAgICAgICAgICAgICAgICBpZiBvZmZzZXQgPiBzZWxmLl9saW1pdDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgTGltaXRPdmVycnVuRXJyb3IoJ1NlcGFyYXRvciBpcyBub3QgZm91bmQsIGFuZCBjaHVuayBleGNlZWQgdGhlIGxpbWl0Jywgb2Zmc2V0KQorCisgICAgICAgICAgICAjIENvbXBsZXRlIG1lc3NhZ2UgKHdpdGggZnVsbCBzZXBhcmF0b3IpIG1heSBiZSBwcmVzZW50IGluIGJ1ZmZlcgorICAgICAgICAgICAgIyBldmVuIHdoZW4gRU9GIGZsYWcgaXMgc2V0LiBUaGlzIG1heSBoYXBwZW4gd2hlbiB0aGUgbGFzdCBjaHVuaworICAgICAgICAgICAgIyBhZGRzIGRhdGEgd2hpY2ggbWFrZXMgc2VwYXJhdG9yIGJlIGZvdW5kLiBUaGF0J3Mgd2h5IHdlIGNoZWNrIGZvcgorICAgICAgICAgICAgIyBFT0YgKmF0ZXIqIGluc3BlY3RpbmcgdGhlIGJ1ZmZlci4KKyAgICAgICAgICAgIGlmIHNlbGYuX2VvZjoKKyAgICAgICAgICAgICAgICBjaHVuayA9IGJ5dGVzKHNlbGYuX2J1ZmZlcikKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIuY2xlYXIoKQorICAgICAgICAgICAgICAgIHJhaXNlIEluY29tcGxldGVSZWFkRXJyb3IoY2h1bmssIE5vbmUpCisKKyAgICAgICAgICAgICMgX3dhaXRfZm9yX2RhdGEoKSB3aWxsIHJlc3VtZSByZWFkaW5nIGlmIHN0cmVhbSB3YXMgcGF1c2VkLgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0X2Zvcl9kYXRhKCdyZWFkdW50aWwnKQorCisgICAgICAgIGlmIGlzZXAgPiBzZWxmLl9saW1pdDoKKyAgICAgICAgICAgIHJhaXNlIExpbWl0T3ZlcnJ1bkVycm9yKCdTZXBhcmF0b3IgaXMgZm91bmQsIGJ1dCBjaHVuayBpcyBsb25nZXIgdGhhbiBsaW1pdCcsIGlzZXApCisKKyAgICAgICAgY2h1bmsgPSBzZWxmLl9idWZmZXJbOmlzZXAgKyBzZXBsZW5dCisgICAgICAgIGRlbCBzZWxmLl9idWZmZXJbOmlzZXAgKyBzZXBsZW5dCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICByZXR1cm4gYnl0ZXMoY2h1bmspCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHJlYWQoc2VsZiwgbj0tMSk6CisgICAgICAgICIiIlJlYWQgdXAgdG8gYG5gIGJ5dGVzIGZyb20gdGhlIHN0cmVhbS4KKworICAgICAgICBJZiBuIGlzIG5vdCBwcm92aWRlZCwgb3Igc2V0IHRvIC0xLCByZWFkIHVudGlsIEVPRiBhbmQgcmV0dXJuIGFsbCByZWFkCisgICAgICAgIGJ5dGVzLiBJZiB0aGUgRU9GIHdhcyByZWNlaXZlZCBhbmQgdGhlIGludGVybmFsIGJ1ZmZlciBpcyBlbXB0eSwgcmV0dXJuCisgICAgICAgIGFuIGVtcHR5IGJ5dGVzIG9iamVjdC4KKworICAgICAgICBJZiBuIGlzIHplcm8sIHJldHVybiBlbXB0eSBieXRlcyBvYmplY3QgaW1tZWRpYXRlbGx5LgorCisgICAgICAgIElmIG4gaXMgcG9zaXRpdmUsIHRoaXMgZnVuY3Rpb24gdHJ5IHRvIHJlYWQgYG5gIGJ5dGVzLCBhbmQgbWF5IHJldHVybgorICAgICAgICBsZXNzIG9yIGVxdWFsIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLCBidXQgYXQgbGVhc3Qgb25lIGJ5dGUuIElmIEVPRiB3YXMKKyAgICAgICAgcmVjZWl2ZWQgYmVmb3JlIGFueSBieXRlIGlzIHJlYWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBlbXB0eSBieXRlCisgICAgICAgIG9iamVjdC4KKworICAgICAgICBSZXR1cm5lZCB2YWx1ZSBpcyBub3QgbGltaXRlZCB3aXRoIGxpbWl0LCBjb25maWd1cmVkIGF0IHN0cmVhbSBjcmVhdGlvbi4KKworICAgICAgICBJZiBzdHJlYW0gd2FzIHBhdXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzdW1lIGl0IGlmCisgICAgICAgIG5lZWRlZC4KKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgc2VsZi5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisKKyAgICAgICAgaWYgbiA9PSAwOgorICAgICAgICAgICAgcmV0dXJuIGInJworCisgICAgICAgIGlmIG4gPCAwOgorICAgICAgICAgICAgIyBUaGlzIHVzZWQgdG8ganVzdCBsb29wIGNyZWF0aW5nIGEgbmV3IHdhaXRlciBob3BpbmcgdG8KKyAgICAgICAgICAgICMgY29sbGVjdCBldmVyeXRoaW5nIGluIHNlbGYuX2J1ZmZlciwgYnV0IHRoYXQgd291bGQKKyAgICAgICAgICAgICMgZGVhZGxvY2sgaWYgdGhlIHN1YnByb2Nlc3Mgc2VuZHMgbW9yZSB0aGFuIHNlbGYubGltaXQKKyAgICAgICAgICAgICMgYnl0ZXMuICBTbyBqdXN0IGNhbGwgc2VsZi5yZWFkKHNlbGYuX2xpbWl0KSB1bnRpbCBFT0YuCisgICAgICAgICAgICBibG9ja3MgPSBbXQorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBibG9jayA9IHlpZWxkIGZyb20gc2VsZi5yZWFkKHNlbGYuX2xpbWl0KQorICAgICAgICAgICAgICAgIGlmIG5vdCBibG9jazoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKQorICAgICAgICAgICAgcmV0dXJuIGInJy5qb2luKGJsb2NrcykKKworICAgICAgICBpZiBub3Qgc2VsZi5fYnVmZmVyIGFuZCBub3Qgc2VsZi5fZW9mOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl93YWl0X2Zvcl9kYXRhKCdyZWFkJykKKworICAgICAgICAjIFRoaXMgd2lsbCB3b3JrIHJpZ2h0IGV2ZW4gaWYgYnVmZmVyIGlzIGxlc3MgdGhhbiBuIGJ5dGVzCisgICAgICAgIGRhdGEgPSBieXRlcyhzZWxmLl9idWZmZXJbOm5dKQorICAgICAgICBkZWwgc2VsZi5fYnVmZmVyWzpuXQorCisgICAgICAgIHNlbGYuX21heWJlX3Jlc3VtZV90cmFuc3BvcnQoKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiByZWFkZXhhY3RseShzZWxmLCBuKToKKyAgICAgICAgIiIiUmVhZCBleGFjdGx5IGBuYCBieXRlcy4KKworICAgICAgICBSYWlzZSBhbiBgSW5jb21wbGV0ZVJlYWRFcnJvcmAgaWYgRU9GIGlzIHJlYWNoZWQgYmVmb3JlIGBuYCBieXRlcyBjYW4gYmUKKyAgICAgICAgcmVhZC4gVGhlIGBJbmNvbXBsZXRlUmVhZEVycm9yLnBhcnRpYWxgIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIHdpbGwKKyAgICAgICAgY29udGFpbiB0aGUgcGFydGlhbCByZWFkIGJ5dGVzLgorCisgICAgICAgIGlmIG4gaXMgemVybywgcmV0dXJuIGVtcHR5IGJ5dGVzIG9iamVjdC4KKworICAgICAgICBSZXR1cm5lZCB2YWx1ZSBpcyBub3QgbGltaXRlZCB3aXRoIGxpbWl0LCBjb25maWd1cmVkIGF0IHN0cmVhbSBjcmVhdGlvbi4KKworICAgICAgICBJZiBzdHJlYW0gd2FzIHBhdXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgcmVzdW1lIGl0IGlmCisgICAgICAgIG5lZWRlZC4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG4gPCAwOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigncmVhZGV4YWN0bHkgc2l6ZSBjYW4gbm90IGJlIGxlc3MgdGhhbiB6ZXJvJykKKworICAgICAgICBpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBzZWxmLl9leGNlcHRpb24KKworICAgICAgICBpZiBuID09IDA6CisgICAgICAgICAgICByZXR1cm4gYicnCisKKyAgICAgICAgIyBUaGVyZSB1c2VkIHRvIGJlICJvcHRpbWl6ZWQiIGNvZGUgaGVyZS4gIEl0IGNyZWF0ZWQgaXRzIG93bgorICAgICAgICAjIEZ1dHVyZSBhbmQgd2FpdGVkIHVudGlsIHNlbGYuX2J1ZmZlciBoYWQgYXQgbGVhc3QgdGhlIG4KKyAgICAgICAgIyBieXRlcywgdGhlbiBjYWxsZWQgcmVhZChuKS4gIFVuZm9ydHVuYXRlbHksIHRoaXMgY291bGQgcGF1c2UKKyAgICAgICAgIyB0aGUgdHJhbnNwb3J0IGlmIHRoZSBhcmd1bWVudCB3YXMgbGFyZ2VyIHRoYW4gdGhlIHBhdXNlCisgICAgICAgICMgbGltaXQgKHdoaWNoIGlzIHR3aWNlIHNlbGYuX2xpbWl0KS4gIFNvIG5vdyB3ZSBqdXN0IHJlYWQoKQorICAgICAgICAjIGludG8gYSBsb2NhbCBidWZmZXIuCisKKyAgICAgICAgYmxvY2tzID0gW10KKyAgICAgICAgd2hpbGUgbiA+IDA6CisgICAgICAgICAgICBibG9jayA9IHlpZWxkIGZyb20gc2VsZi5yZWFkKG4pCisgICAgICAgICAgICBpZiBub3QgYmxvY2s6CisgICAgICAgICAgICAgICAgcGFydGlhbCA9IGInJy5qb2luKGJsb2NrcykKKyAgICAgICAgICAgICAgICByYWlzZSBJbmNvbXBsZXRlUmVhZEVycm9yKHBhcnRpYWwsIGxlbihwYXJ0aWFsKSArIG4pCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKQorICAgICAgICAgICAgbiAtPSBsZW4oYmxvY2spCisKKyAgICAgICAgYXNzZXJ0IG4gPT0gMAorCisgICAgICAgIHJldHVybiBiJycuam9pbihibG9ja3MpCisKKyAgICBpZiBjb21wYXQuUFkzNToKKyAgICAgICAgQGNvcm91dGluZQorICAgICAgICBkZWYgX19haXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgICAgICBAY29yb3V0aW5lCisgICAgICAgIGRlZiBfX2FuZXh0X18oc2VsZik6CisgICAgICAgICAgICB2YWwgPSB5aWVsZCBmcm9tIHNlbGYucmVhZGxpbmUoKQorICAgICAgICAgICAgaWYgdmFsID09IGInJzoKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wQXN5bmNJdGVyYXRpb24KKyAgICAgICAgICAgIHJldHVybiB2YWwKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3N1YnByb2Nlc3MucHkgYi9MaWIvYXN5bmNpby9zdWJwcm9jZXNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZDQwMzkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby9zdWJwcm9jZXNzLnB5CkBAIC0wLDAgKzEsMjEzIEBACitfX2FsbF9fID0gWydjcmVhdGVfc3VicHJvY2Vzc19leGVjJywgJ2NyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsJ10KKworaW1wb3J0IHN1YnByb2Nlc3MKKworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgcHJvdG9jb2xzCitmcm9tIC4gaW1wb3J0IHN0cmVhbXMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitQSVBFID0gc3VicHJvY2Vzcy5QSVBFCitTVERPVVQgPSBzdWJwcm9jZXNzLlNURE9VVAorREVWTlVMTCA9IHN1YnByb2Nlc3MuREVWTlVMTAorCisKK2NsYXNzIFN1YnByb2Nlc3NTdHJlYW1Qcm90b2NvbChzdHJlYW1zLkZsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xzLlN1YnByb2Nlc3NQcm90b2NvbCk6CisgICAgIiIiTGlrZSBTdHJlYW1SZWFkZXJQcm90b2NvbCwgYnV0IGZvciBhIHN1YnByb2Nlc3MuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGltaXQsIGxvb3ApOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5fbGltaXQgPSBsaW1pdAorICAgICAgICBzZWxmLnN0ZGluID0gc2VsZi5zdGRvdXQgPSBzZWxmLnN0ZGVyciA9IE5vbmUKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gTm9uZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX19jbGFzc19fLl9fbmFtZV9fXQorICAgICAgICBpZiBzZWxmLnN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZGluPSVyJyAlIHNlbGYuc3RkaW4pCisgICAgICAgIGlmIHNlbGYuc3Rkb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ3N0ZG91dD0lcicgJSBzZWxmLnN0ZG91dCkKKyAgICAgICAgaWYgc2VsZi5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnc3RkZXJyPSVyJyAlIHNlbGYuc3RkZXJyKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0ID0gdHJhbnNwb3J0CisKKyAgICAgICAgc3Rkb3V0X3RyYW5zcG9ydCA9IHRyYW5zcG9ydC5nZXRfcGlwZV90cmFuc3BvcnQoMSkKKyAgICAgICAgaWYgc3Rkb3V0X3RyYW5zcG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0ID0gc3RyZWFtcy5TdHJlYW1SZWFkZXIobGltaXQ9c2VsZi5fbGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0LnNldF90cmFuc3BvcnQoc3Rkb3V0X3RyYW5zcG9ydCkKKworICAgICAgICBzdGRlcnJfdHJhbnNwb3J0ID0gdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydCgyKQorICAgICAgICBpZiBzdGRlcnJfdHJhbnNwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGRlcnIgPSBzdHJlYW1zLlN0cmVhbVJlYWRlcihsaW1pdD1zZWxmLl9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICAgICAgc2VsZi5zdGRlcnIuc2V0X3RyYW5zcG9ydChzdGRlcnJfdHJhbnNwb3J0KQorCisgICAgICAgIHN0ZGluX3RyYW5zcG9ydCA9IHRyYW5zcG9ydC5nZXRfcGlwZV90cmFuc3BvcnQoMCkKKyAgICAgICAgaWYgc3RkaW5fdHJhbnNwb3J0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGRpbiA9IHN0cmVhbXMuU3RyZWFtV3JpdGVyKHN0ZGluX3RyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90b2NvbD1zZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKworICAgIGRlZiBwaXBlX2RhdGFfcmVjZWl2ZWQoc2VsZiwgZmQsIGRhdGEpOgorICAgICAgICBpZiBmZCA9PSAxOgorICAgICAgICAgICAgcmVhZGVyID0gc2VsZi5zdGRvdXQKKyAgICAgICAgZWxpZiBmZCA9PSAyOgorICAgICAgICAgICAgcmVhZGVyID0gc2VsZi5zdGRlcnIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYWRlciA9IE5vbmUKKyAgICAgICAgaWYgcmVhZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVhZGVyLmZlZWRfZGF0YShkYXRhKQorCisgICAgZGVmIHBpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBpZiBmZCA9PSAwOgorICAgICAgICAgICAgcGlwZSA9IHNlbGYuc3RkaW4KKyAgICAgICAgICAgIGlmIHBpcGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgZmQgPT0gMToKKyAgICAgICAgICAgIHJlYWRlciA9IHNlbGYuc3Rkb3V0CisgICAgICAgIGVsaWYgZmQgPT0gMjoKKyAgICAgICAgICAgIHJlYWRlciA9IHNlbGYuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZWFkZXIgPSBOb25lCisgICAgICAgIGlmIHJlYWRlciAhPSBOb25lOgorICAgICAgICAgICAgaWYgZXhjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmVhZGVyLmZlZWRfZW9mKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVhZGVyLnNldF9leGNlcHRpb24oZXhjKQorCisgICAgZGVmIHByb2Nlc3NfZXhpdGVkKHNlbGYpOgorICAgICAgICBzZWxmLl90cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLl90cmFuc3BvcnQgPSBOb25lCisKKworY2xhc3MgUHJvY2VzczoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhbnNwb3J0LCBwcm90b2NvbCwgbG9vcCk6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydAorICAgICAgICBzZWxmLl9wcm90b2NvbCA9IHByb3RvY29sCisgICAgICAgIHNlbGYuX2xvb3AgPSBsb29wCisgICAgICAgIHNlbGYuc3RkaW4gPSBwcm90b2NvbC5zdGRpbgorICAgICAgICBzZWxmLnN0ZG91dCA9IHByb3RvY29sLnN0ZG91dAorICAgICAgICBzZWxmLnN0ZGVyciA9IHByb3RvY29sLnN0ZGVycgorICAgICAgICBzZWxmLnBpZCA9IHRyYW5zcG9ydC5nZXRfcGlkKCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8JXMgJXM+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5waWQpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RyYW5zcG9ydC5nZXRfcmV0dXJuY29kZSgpCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgICIiIldhaXQgdW50aWwgdGhlIHByb2Nlc3MgZXhpdCBhbmQgcmV0dXJuIHRoZSBwcm9jZXNzIHJldHVybiBjb2RlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGEgY29yb3V0aW5lLiIiIgorICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gc2VsZi5fdHJhbnNwb3J0Ll93YWl0KCkpCisKKyAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnbmFsKToKKyAgICAgICAgc2VsZi5fdHJhbnNwb3J0LnNlbmRfc2lnbmFsKHNpZ25hbCkKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC50ZXJtaW5hdGUoKQorCisgICAgZGVmIGtpbGwoc2VsZik6CisgICAgICAgIHNlbGYuX3RyYW5zcG9ydC5raWxsKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX2ZlZWRfc3RkaW4oc2VsZiwgaW5wdXQpOgorICAgICAgICBkZWJ1ZyA9IHNlbGYuX2xvb3AuZ2V0X2RlYnVnKCkKKyAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKKyAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJyVyIGNvbW11bmljYXRlOiBmZWVkIHN0ZGluICglcyBieXRlcyknLAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgbGVuKGlucHV0KSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnN0ZGluLmRyYWluKCkKKyAgICAgICAgZXhjZXB0IChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSBhcyBleGM6CisgICAgICAgICAgICAjIGNvbW11bmljYXRlKCkgaWdub3JlcyBCcm9rZW5QaXBlRXJyb3IgYW5kIENvbm5lY3Rpb25SZXNldEVycm9yCisgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJyVyIGNvbW11bmljYXRlOiBzdGRpbiBnb3QgJXInLCBzZWxmLCBleGMpCisKKyAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICBsb2dnZXIuZGVidWcoJyVyIGNvbW11bmljYXRlOiBjbG9zZSBzdGRpbicsIHNlbGYpCisgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBfbm9vcChzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX3JlYWRfc3RyZWFtKHNlbGYsIGZkKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fdHJhbnNwb3J0LmdldF9waXBlX3RyYW5zcG9ydChmZCkKKyAgICAgICAgaWYgZmQgPT0gMjoKKyAgICAgICAgICAgIHN0cmVhbSA9IHNlbGYuc3RkZXJyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgZmQgPT0gMQorICAgICAgICAgICAgc3RyZWFtID0gc2VsZi5zdGRvdXQKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIG5hbWUgPSAnc3Rkb3V0JyBpZiBmZCA9PSAxIGVsc2UgJ3N0ZGVycicKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnJXIgY29tbXVuaWNhdGU6IHJlYWQgJXMnLCBzZWxmLCBuYW1lKQorICAgICAgICBvdXRwdXQgPSB5aWVsZCBmcm9tIHN0cmVhbS5yZWFkKCkKKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIG5hbWUgPSAnc3Rkb3V0JyBpZiBmZCA9PSAxIGVsc2UgJ3N0ZGVycicKKyAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygnJXIgY29tbXVuaWNhdGU6IGNsb3NlICVzJywgc2VsZiwgbmFtZSkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgcmV0dXJuIG91dHB1dAorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjb21tdW5pY2F0ZShzZWxmLCBpbnB1dD1Ob25lKToKKyAgICAgICAgaWYgaW5wdXQ6CisgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX2ZlZWRfc3RkaW4oaW5wdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRpbiA9IHNlbGYuX25vb3AoKQorICAgICAgICBpZiBzZWxmLnN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX3JlYWRfc3RyZWFtKDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGRvdXQgPSBzZWxmLl9ub29wKCkKKyAgICAgICAgaWYgc2VsZi5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl9yZWFkX3N0cmVhbSgyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fbm9vcCgpCisgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciA9IHlpZWxkIGZyb20gdGFza3MuZ2F0aGVyKHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYud2FpdCgpCisgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCisKKworQGNvcm91dGluZQorZGVmIGNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsKGNtZCwgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9Tm9uZSwgbGltaXQ9c3RyZWFtcy5fREVGQVVMVF9MSU1JVCwgKiprd2RzKToKKyAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIHByb3RvY29sX2ZhY3RvcnkgPSBsYW1iZGE6IFN1YnByb2Nlc3NTdHJlYW1Qcm90b2NvbChsaW1pdD1saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIGxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2xfZmFjdG9yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVyciwgKiprd2RzKQorICAgIHJldHVybiBQcm9jZXNzKHRyYW5zcG9ydCwgcHJvdG9jb2wsIGxvb3ApCisKK0Bjb3JvdXRpbmUKK2RlZiBjcmVhdGVfc3VicHJvY2Vzc19leGVjKHByb2dyYW0sICphcmdzLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1Ob25lLCBsb29wPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdD1zdHJlYW1zLl9ERUZBVUxUX0xJTUlULCAqKmt3ZHMpOgorICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgcHJvdG9jb2xfZmFjdG9yeSA9IGxhbWJkYTogU3VicHJvY2Vzc1N0cmVhbVByb3RvY29sKGxpbWl0PWxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApCisgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHlpZWxkIGZyb20gbG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvY29sX2ZhY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0sICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN0ZGVyciwgKiprd2RzKQorICAgIHJldHVybiBQcm9jZXNzKHRyYW5zcG9ydCwgcHJvdG9jb2wsIGxvb3ApCmRpZmYgLS1naXQgYS9MaWIvYXN5bmNpby90YXNrcy5weSBiL0xpYi9hc3luY2lvL3Rhc2tzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzN2FhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby90YXNrcy5weQpAQCAtMCwwICsxLDc4NSBAQAorIiIiU3VwcG9ydCBmb3IgdGFza3MsIGNvcm91dGluZXMgYW5kIHRoZSBzY2hlZHVsZXIuIiIiCisKK19fYWxsX18gPSBbJ1Rhc2snLAorICAgICAgICAgICAnRklSU1RfQ09NUExFVEVEJywgJ0ZJUlNUX0VYQ0VQVElPTicsICdBTExfQ09NUExFVEVEJywKKyAgICAgICAgICAgJ3dhaXQnLCAnd2FpdF9mb3InLCAnYXNfY29tcGxldGVkJywgJ3NsZWVwJywgJ2FzeW5jJywKKyAgICAgICAgICAgJ2dhdGhlcicsICdzaGllbGQnLCAnZW5zdXJlX2Z1dHVyZScsICdydW5fY29yb3V0aW5lX3RocmVhZHNhZmUnLAorICAgICAgICAgICAndGltZW91dCcsCisgICAgICAgICAgIF0KKworaW1wb3J0IGNvbmN1cnJlbnQuZnV0dXJlcworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCB0cmFjZWJhY2sKK2ltcG9ydCB3YXJuaW5ncworaW1wb3J0IHdlYWtyZWYKKworZnJvbSAuIGltcG9ydCBjb21wYXQKK2Zyb20gLiBpbXBvcnQgY29yb3V0aW5lcworZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuY29yb3V0aW5lcyBpbXBvcnQgY29yb3V0aW5lCisKKworY2xhc3MgVGFzayhmdXR1cmVzLkZ1dHVyZSk6CisgICAgIiIiQSBjb3JvdXRpbmUgd3JhcHBlZCBpbiBhIEZ1dHVyZS4iIiIKKworICAgICMgQW4gaW1wb3J0YW50IGludmFyaWFudCBtYWludGFpbmVkIHdoaWxlIGEgVGFzayBub3QgZG9uZToKKyAgICAjCisgICAgIyAtIEVpdGhlciBfZnV0X3dhaXRlciBpcyBOb25lLCBhbmQgX3N0ZXAoKSBpcyBzY2hlZHVsZWQ7CisgICAgIyAtIG9yIF9mdXRfd2FpdGVyIGlzIHNvbWUgRnV0dXJlLCBhbmQgX3N0ZXAoKSBpcyAqbm90KiBzY2hlZHVsZWQuCisgICAgIworICAgICMgVGhlIG9ubHkgdHJhbnNpdGlvbiBmcm9tIHRoZSBsYXR0ZXIgdG8gdGhlIGZvcm1lciBpcyB0aHJvdWdoCisgICAgIyBfd2FrZXVwKCkuICBXaGVuIF9mdXRfd2FpdGVyIGlzIG5vdCBOb25lLCBvbmUgb2YgaXRzIGNhbGxiYWNrcworICAgICMgbXVzdCBiZSBfd2FrZXVwKCkuCisKKyAgICAjIFdlYWsgc2V0IGNvbnRhaW5pbmcgYWxsIHRhc2tzIGFsaXZlLgorICAgIF9hbGxfdGFza3MgPSB3ZWFrcmVmLldlYWtTZXQoKQorCisgICAgIyBEaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGFza3MgdGhhdCBhcmUgY3VycmVudGx5IGFjdGl2ZSBpbgorICAgICMgYWxsIHJ1bm5pbmcgZXZlbnQgbG9vcHMuICB7RXZlbnRMb29wOiBUYXNrfQorICAgIF9jdXJyZW50X3Rhc2tzID0ge30KKworICAgICMgSWYgRmFsc2UsIGRvbid0IGxvZyBhIG1lc3NhZ2UgaWYgdGhlIHRhc2sgaXMgZGVzdHJveWVkIHdoZXJlYXMgaXRzCisgICAgIyBzdGF0dXMgaXMgc3RpbGwgcGVuZGluZworICAgIF9sb2dfZGVzdHJveV9wZW5kaW5nID0gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGN1cnJlbnRfdGFzayhjbHMsIGxvb3A9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgY3VycmVudGx5IHJ1bm5pbmcgdGFzayBpbiBhbiBldmVudCBsb29wIG9yIE5vbmUuCisKKyAgICAgICAgQnkgZGVmYXVsdCB0aGUgY3VycmVudCB0YXNrIGZvciB0aGUgY3VycmVudCBldmVudCBsb29wIGlzIHJldHVybmVkLgorCisgICAgICAgIE5vbmUgaXMgcmV0dXJuZWQgd2hlbiBjYWxsZWQgbm90IGluIHRoZSBjb250ZXh0IG9mIGEgVGFzay4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICByZXR1cm4gY2xzLl9jdXJyZW50X3Rhc2tzLmdldChsb29wKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGFsbF90YXNrcyhjbHMsIGxvb3A9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiBhIHNldCBvZiBhbGwgdGFza3MgZm9yIGFuIGV2ZW50IGxvb3AuCisKKyAgICAgICAgQnkgZGVmYXVsdCBhbGwgdGFza3MgZm9yIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgYXJlIHJldHVybmVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICAgICAgbG9vcCA9IGV2ZW50cy5nZXRfZXZlbnRfbG9vcCgpCisgICAgICAgIHJldHVybiB7dCBmb3IgdCBpbiBjbHMuX2FsbF90YXNrcyBpZiB0Ll9sb29wIGlzIGxvb3B9CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29ybywgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgYXNzZXJ0IGNvcm91dGluZXMuaXNjb3JvdXRpbmUoY29ybyksIHJlcHIoY29ybykKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPWxvb3ApCisgICAgICAgIGlmIHNlbGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgc2VsZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgc2VsZi5fY29ybyA9IGNvcm8KKyAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbXVzdF9jYW5jZWwgPSBGYWxzZQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9zdGVwKQorICAgICAgICBzZWxmLl9fY2xhc3NfXy5fYWxsX3Rhc2tzLmFkZChzZWxmKQorCisgICAgIyBPbiBQeXRob24gMy4zIG9yIG9sZGVyLCBvYmplY3RzIHdpdGggYSBkZXN0cnVjdG9yIHRoYXQgYXJlIHBhcnQgb2YgYQorICAgICMgcmVmZXJlbmNlIGN5Y2xlIGFyZSBuZXZlciBkZXN0cm95ZWQuIFRoYXQncyBub3QgdGhlIGNhc2UgYW55IG1vcmUgb24KKyAgICAjIFB5dGhvbiAzLjQgdGhhbmtzIHRvIHRoZSBQRVAgNDQyLgorICAgIGlmIGNvbXBhdC5QWTM0OgorICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuX3N0YXRlID09IGZ1dHVyZXMuX1BFTkRJTkcgYW5kIHNlbGYuX2xvZ19kZXN0cm95X3BlbmRpbmc6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ3Rhc2snOiBzZWxmLAorICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdUYXNrIHdhcyBkZXN0cm95ZWQgYnV0IGl0IGlzIHBlbmRpbmchJywKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsnc291cmNlX3RyYWNlYmFjayddID0gc2VsZi5fc291cmNlX3RyYWNlYmFjaworICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorICAgICAgICAgICAgZnV0dXJlcy5GdXR1cmUuX19kZWxfXyhzZWxmKQorCisgICAgZGVmIF9yZXByX2luZm8oc2VsZik6CisgICAgICAgIGluZm8gPSBzdXBlcigpLl9yZXByX2luZm8oKQorCisgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgIyByZXBsYWNlIHN0YXR1cworICAgICAgICAgICAgaW5mb1swXSA9ICdjYW5jZWxsaW5nJworCisgICAgICAgIGNvcm8gPSBjb3JvdXRpbmVzLl9mb3JtYXRfY29yb3V0aW5lKHNlbGYuX2Nvcm8pCisgICAgICAgIGluZm8uaW5zZXJ0KDEsICdjb3JvPTwlcz4nICUgY29ybykKKworICAgICAgICBpZiBzZWxmLl9mdXRfd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaW5mby5pbnNlcnQoMiwgJ3dhaXRfZm9yPSVyJyAlIHNlbGYuX2Z1dF93YWl0ZXIpCisgICAgICAgIHJldHVybiBpbmZvCisKKyAgICBkZWYgZ2V0X3N0YWNrKHNlbGYsICosIGxpbWl0PU5vbmUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGxpc3Qgb2Ygc3RhY2sgZnJhbWVzIGZvciB0aGlzIHRhc2sncyBjb3JvdXRpbmUuCisKKyAgICAgICAgSWYgdGhlIGNvcm91dGluZSBpcyBub3QgZG9uZSwgdGhpcyByZXR1cm5zIHRoZSBzdGFjayB3aGVyZSBpdCBpcworICAgICAgICBzdXNwZW5kZWQuICBJZiB0aGUgY29yb3V0aW5lIGhhcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IG9yIHdhcworICAgICAgICBjYW5jZWxsZWQsIHRoaXMgcmV0dXJucyBhbiBlbXB0eSBsaXN0LiAgSWYgdGhlIGNvcm91dGluZSB3YXMKKyAgICAgICAgdGVybWluYXRlZCBieSBhbiBleGNlcHRpb24sIHRoaXMgcmV0dXJucyB0aGUgbGlzdCBvZiB0cmFjZWJhY2sKKyAgICAgICAgZnJhbWVzLgorCisgICAgICAgIFRoZSBmcmFtZXMgYXJlIGFsd2F5cyBvcmRlcmVkIGZyb20gb2xkZXN0IHRvIG5ld2VzdC4KKworICAgICAgICBUaGUgb3B0aW9uYWwgbGltaXQgZ2l2ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZyYW1lcyB0bworICAgICAgICByZXR1cm47IGJ5IGRlZmF1bHQgYWxsIGF2YWlsYWJsZSBmcmFtZXMgYXJlIHJldHVybmVkLiAgSXRzCisgICAgICAgIG1lYW5pbmcgZGlmZmVycyBkZXBlbmRpbmcgb24gd2hldGhlciBhIHN0YWNrIG9yIGEgdHJhY2ViYWNrIGlzCisgICAgICAgIHJldHVybmVkOiB0aGUgbmV3ZXN0IGZyYW1lcyBvZiBhIHN0YWNrIGFyZSByZXR1cm5lZCwgYnV0IHRoZQorICAgICAgICBvbGRlc3QgZnJhbWVzIG9mIGEgdHJhY2ViYWNrIGFyZSByZXR1cm5lZC4gIChUaGlzIG1hdGNoZXMgdGhlCisgICAgICAgIGJlaGF2aW9yIG9mIHRoZSB0cmFjZWJhY2sgbW9kdWxlLikKKworICAgICAgICBGb3IgcmVhc29ucyBiZXlvbmQgb3VyIGNvbnRyb2wsIG9ubHkgb25lIHN0YWNrIGZyYW1lIGlzCisgICAgICAgIHJldHVybmVkIGZvciBhIHN1c3BlbmRlZCBjb3JvdXRpbmUuCisgICAgICAgICIiIgorICAgICAgICBmcmFtZXMgPSBbXQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjICdhc3luYyBkZWYnIGNvcm91dGluZXMKKyAgICAgICAgICAgIGYgPSBzZWxmLl9jb3JvLmNyX2ZyYW1lCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGYgPSBzZWxmLl9jb3JvLmdpX2ZyYW1lCisgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3aGlsZSBmIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGlmIGxpbWl0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBpZiBsaW1pdCA8PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgbGltaXQgLT0gMQorICAgICAgICAgICAgICAgIGZyYW1lcy5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICBmID0gZi5mX2JhY2sKKyAgICAgICAgICAgIGZyYW1lcy5yZXZlcnNlKCkKKyAgICAgICAgZWxpZiBzZWxmLl9leGNlcHRpb24gaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YiA9IHNlbGYuX2V4Y2VwdGlvbi5fX3RyYWNlYmFja19fCisgICAgICAgICAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBsaW1pdCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgaWYgbGltaXQgPD0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGxpbWl0IC09IDEKKyAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKHRiLnRiX2ZyYW1lKQorICAgICAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorICAgICAgICByZXR1cm4gZnJhbWVzCisKKyAgICBkZWYgcHJpbnRfc3RhY2soc2VsZiwgKiwgbGltaXQ9Tm9uZSwgZmlsZT1Ob25lKToKKyAgICAgICAgIiIiUHJpbnQgdGhlIHN0YWNrIG9yIHRyYWNlYmFjayBmb3IgdGhpcyB0YXNrJ3MgY29yb3V0aW5lLgorCisgICAgICAgIFRoaXMgcHJvZHVjZXMgb3V0cHV0IHNpbWlsYXIgdG8gdGhhdCBvZiB0aGUgdHJhY2ViYWNrIG1vZHVsZSwKKyAgICAgICAgZm9yIHRoZSBmcmFtZXMgcmV0cmlldmVkIGJ5IGdldF9zdGFjaygpLiAgVGhlIGxpbWl0IGFyZ3VtZW50CisgICAgICAgIGlzIHBhc3NlZCB0byBnZXRfc3RhY2soKS4gIFRoZSBmaWxlIGFyZ3VtZW50IGlzIGFuIEkvTyBzdHJlYW0KKyAgICAgICAgdG8gd2hpY2ggdGhlIG91dHB1dCBpcyB3cml0dGVuOyBieSBkZWZhdWx0IG91dHB1dCBpcyB3cml0dGVuCisgICAgICAgIHRvIHN5cy5zdGRlcnIuCisgICAgICAgICIiIgorICAgICAgICBleHRyYWN0ZWRfbGlzdCA9IFtdCisgICAgICAgIGNoZWNrZWQgPSBzZXQoKQorICAgICAgICBmb3IgZiBpbiBzZWxmLmdldF9zdGFjayhsaW1pdD1saW1pdCk6CisgICAgICAgICAgICBsaW5lbm8gPSBmLmZfbGluZW5vCisgICAgICAgICAgICBjbyA9IGYuZl9jb2RlCisgICAgICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCisgICAgICAgICAgICBuYW1lID0gY28uY29fbmFtZQorICAgICAgICAgICAgaWYgZmlsZW5hbWUgbm90IGluIGNoZWNrZWQ6CisgICAgICAgICAgICAgICAgY2hlY2tlZC5hZGQoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCisgICAgICAgICAgICBsaW5lID0gbGluZWNhY2hlLmdldGxpbmUoZmlsZW5hbWUsIGxpbmVubywgZi5mX2dsb2JhbHMpCisgICAgICAgICAgICBleHRyYWN0ZWRfbGlzdC5hcHBlbmQoKGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUsIGxpbmUpKQorICAgICAgICBleGMgPSBzZWxmLl9leGNlcHRpb24KKyAgICAgICAgaWYgbm90IGV4dHJhY3RlZF9saXN0OgorICAgICAgICAgICAgcHJpbnQoJ05vIHN0YWNrIGZvciAlcicgJSBzZWxmLCBmaWxlPWZpbGUpCisgICAgICAgIGVsaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJpbnQoJ1RyYWNlYmFjayBmb3IgJXIgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6JyAlIHNlbGYsCisgICAgICAgICAgICAgICAgICBmaWxlPWZpbGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgnU3RhY2sgZm9yICVyIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicgJSBzZWxmLAorICAgICAgICAgICAgICAgICAgZmlsZT1maWxlKQorICAgICAgICB0cmFjZWJhY2sucHJpbnRfbGlzdChleHRyYWN0ZWRfbGlzdCwgZmlsZT1maWxlKQorICAgICAgICBpZiBleGMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBmb3IgbGluZSBpbiB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV4Yy5fX2NsYXNzX18sIGV4Yyk6CisgICAgICAgICAgICAgICAgcHJpbnQobGluZSwgZmlsZT1maWxlLCBlbmQ9JycpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICAiIiJSZXF1ZXN0IHRoYXQgdGhpcyB0YXNrIGNhbmNlbCBpdHNlbGYuCisKKyAgICAgICAgVGhpcyBhcnJhbmdlcyBmb3IgYSBDYW5jZWxsZWRFcnJvciB0byBiZSB0aHJvd24gaW50byB0aGUKKyAgICAgICAgd3JhcHBlZCBjb3JvdXRpbmUgb24gdGhlIG5leHQgY3ljbGUgdGhyb3VnaCB0aGUgZXZlbnQgbG9vcC4KKyAgICAgICAgVGhlIGNvcm91dGluZSB0aGVuIGhhcyBhIGNoYW5jZSB0byBjbGVhbiB1cCBvciBldmVuIGRlbnkKKyAgICAgICAgdGhlIHJlcXVlc3QgdXNpbmcgdHJ5L2V4Y2VwdC9maW5hbGx5LgorCisgICAgICAgIFVubGlrZSBGdXR1cmUuY2FuY2VsLCB0aGlzIGRvZXMgbm90IGd1YXJhbnRlZSB0aGF0IHRoZQorICAgICAgICB0YXNrIHdpbGwgYmUgY2FuY2VsbGVkOiB0aGUgZXhjZXB0aW9uIG1pZ2h0IGJlIGNhdWdodCBhbmQKKyAgICAgICAgYWN0ZWQgdXBvbiwgZGVsYXlpbmcgY2FuY2VsbGF0aW9uIG9mIHRoZSB0YXNrIG9yIHByZXZlbnRpbmcKKyAgICAgICAgY2FuY2VsbGF0aW9uIGNvbXBsZXRlbHkuICBUaGUgdGFzayBtYXkgYWxzbyByZXR1cm4gYSB2YWx1ZSBvcgorICAgICAgICByYWlzZSBhIGRpZmZlcmVudCBleGNlcHRpb24uCisKKyAgICAgICAgSW1tZWRpYXRlbHkgYWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCBUYXNrLmNhbmNlbGxlZCgpIHdpbGwKKyAgICAgICAgbm90IHJldHVybiBUcnVlICh1bmxlc3MgdGhlIHRhc2sgd2FzIGFscmVhZHkgY2FuY2VsbGVkKS4gIEEKKyAgICAgICAgdGFzayB3aWxsIGJlIG1hcmtlZCBhcyBjYW5jZWxsZWQgd2hlbiB0aGUgd3JhcHBlZCBjb3JvdXRpbmUKKyAgICAgICAgdGVybWluYXRlcyB3aXRoIGEgQ2FuY2VsbGVkRXJyb3IgZXhjZXB0aW9uIChldmVuIGlmIGNhbmNlbCgpCisgICAgICAgIHdhcyBub3QgY2FsbGVkKS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuZG9uZSgpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGlmIHNlbGYuX2Z1dF93YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9mdXRfd2FpdGVyLmNhbmNlbCgpOgorICAgICAgICAgICAgICAgICMgTGVhdmUgc2VsZi5fZnV0X3dhaXRlcjsgaXQgbWF5IGJlIGEgVGFzayB0aGF0CisgICAgICAgICAgICAgICAgIyBjYXRjaGVzIGFuZCBpZ25vcmVzIHRoZSBjYW5jZWxsYXRpb24gc28gd2UgbWF5IGhhdmUKKyAgICAgICAgICAgICAgICAjIHRvIGNhbmNlbCBpdCBhZ2FpbiBsYXRlci4KKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAjIEl0IG11c3QgYmUgdGhlIGNhc2UgdGhhdCBzZWxmLl9zdGVwIGlzIGFscmVhZHkgc2NoZWR1bGVkLgorICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IFRydWUKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfc3RlcChzZWxmLCBleGM9Tm9uZSk6CisgICAgICAgIGFzc2VydCBub3Qgc2VsZi5kb25lKCksIFwKKyAgICAgICAgICAgICdfc3RlcCgpOiBhbHJlYWR5IGRvbmU6IHshcn0sIHshcn0nLmZvcm1hdChzZWxmLCBleGMpCisgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgICAgICBleGMgPSBmdXR1cmVzLkNhbmNlbGxlZEVycm9yKCkKKyAgICAgICAgICAgIHNlbGYuX211c3RfY2FuY2VsID0gRmFsc2UKKyAgICAgICAgY29ybyA9IHNlbGYuX2Nvcm8KKyAgICAgICAgc2VsZi5fZnV0X3dhaXRlciA9IE5vbmUKKworICAgICAgICBzZWxmLl9fY2xhc3NfXy5fY3VycmVudF90YXNrc1tzZWxmLl9sb29wXSA9IHNlbGYKKyAgICAgICAgIyBDYWxsIGVpdGhlciBjb3JvLnRocm93KGV4Yykgb3IgY29yby5zZW5kKE5vbmUpLgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBleGMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIFdlIHVzZSB0aGUgYHNlbmRgIG1ldGhvZCBkaXJlY3RseSwgYmVjYXVzZSBjb3JvdXRpbmVzCisgICAgICAgICAgICAgICAgIyBkb24ndCBoYXZlIGBfX2l0ZXJfX2AgYW5kIGBfX25leHRfX2AgbWV0aG9kcy4KKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjb3JvLnNlbmQoTm9uZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY29yby50aHJvdyhleGMpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIHNlbGYuc2V0X3Jlc3VsdChleGMudmFsdWUpCisgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIHN1cGVyKCkuY2FuY2VsKCkgICMgSS5lLiwgRnV0dXJlLmNhbmNlbChzZWxmKS4KKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocmVzdWx0LCBmdXR1cmVzLkZ1dHVyZSk6CisgICAgICAgICAgICAgICAgIyBZaWVsZGVkIEZ1dHVyZSBtdXN0IGNvbWUgZnJvbSBGdXR1cmUuX19pdGVyX18oKS4KKyAgICAgICAgICAgICAgICBpZiByZXN1bHQuX2xvb3AgaXMgbm90IHNlbGYuX2xvb3A6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKAorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RlcCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGFzayB7IXJ9IGdvdCBGdXR1cmUgeyFyfSBhdHRhY2hlZCB0byBhICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGlmZmVyZW50IGxvb3AnLmZvcm1hdChzZWxmLCByZXN1bHQpKSkKKyAgICAgICAgICAgICAgICBlbGlmIHJlc3VsdC5fYmxvY2tpbmc6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5fYmxvY2tpbmcgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fd2FrZXVwKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mdXRfd2FpdGVyID0gcmVzdWx0CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX211c3RfY2FuY2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZnV0X3dhaXRlci5jYW5jZWwoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tdXN0X2NhbmNlbCA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGVwLAorICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5aWVsZCB3YXMgdXNlZCBpbnN0ZWFkIG9mIHlpZWxkIGZyb20gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbiB0YXNrIHshcn0gd2l0aCB7IXJ9Jy5mb3JtYXQoc2VsZiwgcmVzdWx0KSkpCisgICAgICAgICAgICBlbGlmIHJlc3VsdCBpcyBOb25lOgorICAgICAgICAgICAgICAgICMgQmFyZSB5aWVsZCByZWxpbnF1aXNoZXMgY29udHJvbCBmb3Igb25lIGV2ZW50IGxvb3AgaXRlcmF0aW9uLgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3N0ZXApCisgICAgICAgICAgICBlbGlmIGluc3BlY3QuaXNnZW5lcmF0b3IocmVzdWx0KToKKyAgICAgICAgICAgICAgICAjIFlpZWxkaW5nIGEgZ2VuZXJhdG9yIGlzIGp1c3Qgd3JvbmcuCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZXAsCisgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICd5aWVsZCB3YXMgdXNlZCBpbnN0ZWFkIG9mIHlpZWxkIGZyb20gZm9yICcKKyAgICAgICAgICAgICAgICAgICAgICAgICdnZW5lcmF0b3IgaW4gdGFzayB7IXJ9IHdpdGgge30nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCByZXN1bHQpKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBZaWVsZGluZyBzb21ldGhpbmcgZWxzZSBpcyBhbiBlcnJvci4KKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbigKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RlcCwKKyAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAgICAgJ1Rhc2sgZ290IGJhZCB5aWVsZDogeyFyfScuZm9ybWF0KHJlc3VsdCkpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX2N1cnJlbnRfdGFza3MucG9wKHNlbGYuX2xvb3ApCisgICAgICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworICAgIGRlZiBfd2FrZXVwKHNlbGYsIGZ1dHVyZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1dHVyZS5yZXN1bHQoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICMgVGhpcyBtYXkgYWxzbyBiZSBhIGNhbmNlbGxhdGlvbi4KKyAgICAgICAgICAgIHNlbGYuX3N0ZXAoZXhjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBEb24ndCBwYXNzIHRoZSB2YWx1ZSBvZiBgZnV0dXJlLnJlc3VsdCgpYCBleHBsaWNpdGx5LAorICAgICAgICAgICAgIyBhcyBgRnV0dXJlLl9faXRlcl9fYCBhbmQgYEZ1dHVyZS5fX2F3YWl0X19gIGRvbid0IG5lZWQgaXQuCisgICAgICAgICAgICAjIElmIHdlIGNhbGwgYF9zdGVwKHZhbHVlLCBOb25lKWAgaW5zdGVhZCBvZiBgX3N0ZXAoKWAsCisgICAgICAgICAgICAjIFB5dGhvbiBldmFsIGxvb3Agd291bGQgdXNlIGAuc2VuZCh2YWx1ZSlgIG1ldGhvZCBjYWxsLAorICAgICAgICAgICAgIyBpbnN0ZWFkIG9mIGBfX25leHRfXygpYCwgd2hpY2ggaXMgc2xvd2VyIGZvciBmdXR1cmVzCisgICAgICAgICAgICAjIHRoYXQgcmV0dXJuIG5vbi1nZW5lcmF0b3IgaXRlcmF0b3JzIGZyb20gdGhlaXIgYF9faXRlcl9fYC4KKyAgICAgICAgICAgIHNlbGYuX3N0ZXAoKQorICAgICAgICBzZWxmID0gTm9uZSAgIyBOZWVkZWQgdG8gYnJlYWsgY3ljbGVzIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4KKworCisjIHdhaXQoKSBhbmQgYXNfY29tcGxldGVkKCkgc2ltaWxhciB0byB0aG9zZSBpbiBQRVAgMzE0OC4KKworRklSU1RfQ09NUExFVEVEID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0NPTVBMRVRFRAorRklSU1RfRVhDRVBUSU9OID0gY29uY3VycmVudC5mdXR1cmVzLkZJUlNUX0VYQ0VQVElPTgorQUxMX0NPTVBMRVRFRCA9IGNvbmN1cnJlbnQuZnV0dXJlcy5BTExfQ09NUExFVEVECisKKworQGNvcm91dGluZQorZGVmIHdhaXQoZnMsICosIGxvb3A9Tm9uZSwgdGltZW91dD1Ob25lLCByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKToKKyAgICAiIiJXYWl0IGZvciB0aGUgRnV0dXJlcyBhbmQgY29yb3V0aW5lcyBnaXZlbiBieSBmcyB0byBjb21wbGV0ZS4KKworICAgIFRoZSBzZXF1ZW5jZSBmdXR1cmVzIG11c3Qgbm90IGJlIGVtcHR5LgorCisgICAgQ29yb3V0aW5lcyB3aWxsIGJlIHdyYXBwZWQgaW4gVGFza3MuCisKKyAgICBSZXR1cm5zIHR3byBzZXRzIG9mIEZ1dHVyZTogKGRvbmUsIHBlbmRpbmcpLgorCisgICAgVXNhZ2U6CisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KGZzKQorCisgICAgTm90ZTogVGhpcyBkb2VzIG5vdCByYWlzZSBUaW1lb3V0RXJyb3IhIEZ1dHVyZXMgdGhhdCBhcmVuJ3QgZG9uZQorICAgIHdoZW4gdGhlIHRpbWVvdXQgb2NjdXJzIGFyZSByZXR1cm5lZCBpbiB0aGUgc2Vjb25kIHNldC4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZzLCBmdXR1cmVzLkZ1dHVyZSkgb3IgY29yb3V0aW5lcy5pc2Nvcm91dGluZShmcyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0IGEgbGlzdCBvZiBmdXR1cmVzLCBub3QgJXMiICUgdHlwZShmcykuX19uYW1lX18pCisgICAgaWYgbm90IGZzOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZXQgb2YgY29yb3V0aW5lcy9GdXR1cmVzIGlzIGVtcHR5LicpCisgICAgaWYgcmV0dXJuX3doZW4gbm90IGluIChGSVJTVF9DT01QTEVURUQsIEZJUlNUX0VYQ0VQVElPTiwgQUxMX0NPTVBMRVRFRCk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgcmV0dXJuX3doZW4gdmFsdWU6IHt9Jy5mb3JtYXQocmV0dXJuX3doZW4pKQorCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGZzID0ge2Vuc3VyZV9mdXR1cmUoZiwgbG9vcD1sb29wKSBmb3IgZiBpbiBzZXQoZnMpfQorCisgICAgcmV0dXJuICh5aWVsZCBmcm9tIF93YWl0KGZzLCB0aW1lb3V0LCByZXR1cm5fd2hlbiwgbG9vcCkpCisKKworZGVmIF9yZWxlYXNlX3dhaXRlcih3YWl0ZXIsICphcmdzKToKKyAgICBpZiBub3Qgd2FpdGVyLmRvbmUoKToKKyAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKworCitAY29yb3V0aW5lCitkZWYgd2FpdF9mb3IoZnV0LCB0aW1lb3V0LCAqLCBsb29wPU5vbmUpOgorICAgICIiIldhaXQgZm9yIHRoZSBzaW5nbGUgRnV0dXJlIG9yIGNvcm91dGluZSB0byBjb21wbGV0ZSwgd2l0aCB0aW1lb3V0LgorCisgICAgQ29yb3V0aW5lIHdpbGwgYmUgd3JhcHBlZCBpbiBUYXNrLgorCisgICAgUmV0dXJucyByZXN1bHQgb2YgdGhlIEZ1dHVyZSBvciBjb3JvdXRpbmUuICBXaGVuIGEgdGltZW91dCBvY2N1cnMsCisgICAgaXQgY2FuY2VscyB0aGUgdGFzayBhbmQgcmFpc2VzIFRpbWVvdXRFcnJvci4gIFRvIGF2b2lkIHRoZSB0YXNrCisgICAgY2FuY2VsbGF0aW9uLCB3cmFwIGl0IGluIHNoaWVsZCgpLgorCisgICAgSWYgdGhlIHdhaXQgaXMgY2FuY2VsbGVkLCB0aGUgdGFzayBpcyBhbHNvIGNhbmNlbGxlZC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgYSBjb3JvdXRpbmUuCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKworICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGZ1dCkKKworICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9bG9vcCkKKyAgICB0aW1lb3V0X2hhbmRsZSA9IGxvb3AuY2FsbF9sYXRlcih0aW1lb3V0LCBfcmVsZWFzZV93YWl0ZXIsIHdhaXRlcikKKyAgICBjYiA9IGZ1bmN0b29scy5wYXJ0aWFsKF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyKQorCisgICAgZnV0ID0gZW5zdXJlX2Z1dHVyZShmdXQsIGxvb3A9bG9vcCkKKyAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisKKyAgICB0cnk6CisgICAgICAgICMgd2FpdCB1bnRpbCB0aGUgZnV0dXJlIGNvbXBsZXRlcyBvciB0aGUgdGltZW91dAorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgICAgICBleGNlcHQgZnV0dXJlcy5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgIGZ1dC5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBmdXQuZG9uZSgpOgorICAgICAgICAgICAgcmV0dXJuIGZ1dC5yZXN1bHQoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnV0LnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiKQorICAgICAgICAgICAgZnV0LmNhbmNlbCgpCisgICAgICAgICAgICByYWlzZSBmdXR1cmVzLlRpbWVvdXRFcnJvcigpCisgICAgZmluYWxseToKKyAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKworCitAY29yb3V0aW5lCitkZWYgX3dhaXQoZnMsIHRpbWVvdXQsIHJldHVybl93aGVuLCBsb29wKToKKyAgICAiIiJJbnRlcm5hbCBoZWxwZXIgZm9yIHdhaXQoKSBhbmQgX3dhaXRfZm9yKCkuCisKKyAgICBUaGUgZnMgYXJndW1lbnQgbXVzdCBiZSBhIGNvbGxlY3Rpb24gb2YgRnV0dXJlcy4KKyAgICAiIiIKKyAgICBhc3NlcnQgZnMsICdTZXQgb2YgRnV0dXJlcyBpcyBlbXB0eS4nCisgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgIHRpbWVvdXRfaGFuZGxlID0gTm9uZQorICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIHRpbWVvdXRfaGFuZGxlID0gbG9vcC5jYWxsX2xhdGVyKHRpbWVvdXQsIF9yZWxlYXNlX3dhaXRlciwgd2FpdGVyKQorICAgIGNvdW50ZXIgPSBsZW4oZnMpCisKKyAgICBkZWYgX29uX2NvbXBsZXRpb24oZik6CisgICAgICAgIG5vbmxvY2FsIGNvdW50ZXIKKyAgICAgICAgY291bnRlciAtPSAxCisgICAgICAgIGlmIChjb3VudGVyIDw9IDAgb3IKKyAgICAgICAgICAgIHJldHVybl93aGVuID09IEZJUlNUX0NPTVBMRVRFRCBvcgorICAgICAgICAgICAgcmV0dXJuX3doZW4gPT0gRklSU1RfRVhDRVBUSU9OIGFuZCAobm90IGYuY2FuY2VsbGVkKCkgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmV4Y2VwdGlvbigpIGlzIG5vdCBOb25lKSk6CisgICAgICAgICAgICBpZiB0aW1lb3V0X2hhbmRsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0aW1lb3V0X2hhbmRsZS5jYW5jZWwoKQorICAgICAgICAgICAgaWYgbm90IHdhaXRlci5kb25lKCk6CisgICAgICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKworICAgIGZvciBmIGluIGZzOgorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBmcm9tIHdhaXRlcgorICAgIGZpbmFsbHk6CisgICAgICAgIGlmIHRpbWVvdXRfaGFuZGxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKworICAgIGRvbmUsIHBlbmRpbmcgPSBzZXQoKSwgc2V0KCkKKyAgICBmb3IgZiBpbiBmczoKKyAgICAgICAgZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhfb25fY29tcGxldGlvbikKKyAgICAgICAgaWYgZi5kb25lKCk6CisgICAgICAgICAgICBkb25lLmFkZChmKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGVuZGluZy5hZGQoZikKKyAgICByZXR1cm4gZG9uZSwgcGVuZGluZworCisKKyMgVGhpcyBpcyAqbm90KiBhIEBjb3JvdXRpbmUhICBJdCBpcyBqdXN0IGFuIGl0ZXJhdG9yICh5aWVsZGluZyBGdXR1cmVzKS4KK2RlZiBhc19jb21wbGV0ZWQoZnMsICosIGxvb3A9Tm9uZSwgdGltZW91dD1Ob25lKToKKyAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igd2hvc2UgdmFsdWVzIGFyZSBjb3JvdXRpbmVzLgorCisgICAgV2hlbiB3YWl0aW5nIGZvciB0aGUgeWllbGRlZCBjb3JvdXRpbmVzIHlvdSdsbCBnZXQgdGhlIHJlc3VsdHMgKG9yCisgICAgZXhjZXB0aW9ucyEpIG9mIHRoZSBvcmlnaW5hbCBGdXR1cmVzIChvciBjb3JvdXRpbmVzKSwgaW4gdGhlIG9yZGVyCisgICAgaW4gd2hpY2ggYW5kIGFzIHNvb24gYXMgdGhleSBjb21wbGV0ZS4KKworICAgIFRoaXMgZGlmZmVycyBmcm9tIFBFUCAzMTQ4OyB0aGUgcHJvcGVyIHdheSB0byB1c2UgdGhpcyBpczoKKworICAgICAgICBmb3IgZiBpbiBhc19jb21wbGV0ZWQoZnMpOgorICAgICAgICAgICAgcmVzdWx0ID0geWllbGQgZnJvbSBmICAjIFRoZSAneWllbGQgZnJvbScgbWF5IHJhaXNlLgorICAgICAgICAgICAgIyBVc2UgcmVzdWx0LgorCisgICAgSWYgYSB0aW1lb3V0IGlzIHNwZWNpZmllZCwgdGhlICd5aWVsZCBmcm9tJyB3aWxsIHJhaXNlCisgICAgVGltZW91dEVycm9yIHdoZW4gdGhlIHRpbWVvdXQgb2NjdXJzIGJlZm9yZSBhbGwgRnV0dXJlcyBhcmUgZG9uZS4KKworICAgIE5vdGU6IFRoZSBmdXR1cmVzICdmJyBhcmUgbm90IG5lY2Vzc2FyaWx5IG1lbWJlcnMgb2YgZnMuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShmcywgZnV0dXJlcy5GdXR1cmUpIG9yIGNvcm91dGluZXMuaXNjb3JvdXRpbmUoZnMpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdCBhIGxpc3Qgb2YgZnV0dXJlcywgbm90ICVzIiAlIHR5cGUoZnMpLl9fbmFtZV9fKQorICAgIGxvb3AgPSBsb29wIGlmIGxvb3AgaXMgbm90IE5vbmUgZWxzZSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgIHRvZG8gPSB7ZW5zdXJlX2Z1dHVyZShmLCBsb29wPWxvb3ApIGZvciBmIGluIHNldChmcyl9CisgICAgZnJvbSAucXVldWVzIGltcG9ydCBRdWV1ZSAgIyBJbXBvcnQgaGVyZSB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnQgcHJvYmxlbS4KKyAgICBkb25lID0gUXVldWUobG9vcD1sb29wKQorICAgIHRpbWVvdXRfaGFuZGxlID0gTm9uZQorCisgICAgZGVmIF9vbl90aW1lb3V0KCk6CisgICAgICAgIGZvciBmIGluIHRvZG86CisgICAgICAgICAgICBmLnJlbW92ZV9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorICAgICAgICAgICAgZG9uZS5wdXRfbm93YWl0KE5vbmUpICAjIFF1ZXVlIGEgZHVtbXkgdmFsdWUgZm9yIF93YWl0X2Zvcl9vbmUoKS4KKyAgICAgICAgdG9kby5jbGVhcigpICAjIENhbid0IGRvIHRvZG8ucmVtb3ZlKGYpIGluIHRoZSBsb29wLgorCisgICAgZGVmIF9vbl9jb21wbGV0aW9uKGYpOgorICAgICAgICBpZiBub3QgdG9kbzoKKyAgICAgICAgICAgIHJldHVybiAgIyBfb25fdGltZW91dCgpIHdhcyBoZXJlIGZpcnN0LgorICAgICAgICB0b2RvLnJlbW92ZShmKQorICAgICAgICBkb25lLnB1dF9ub3dhaXQoZikKKyAgICAgICAgaWYgbm90IHRvZG8gYW5kIHRpbWVvdXRfaGFuZGxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGltZW91dF9oYW5kbGUuY2FuY2VsKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX3dhaXRfZm9yX29uZSgpOgorICAgICAgICBmID0geWllbGQgZnJvbSBkb25lLmdldCgpCisgICAgICAgIGlmIGYgaXMgTm9uZToKKyAgICAgICAgICAgICMgRHVtbXkgdmFsdWUgZnJvbSBfb25fdGltZW91dCgpLgorICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IKKyAgICAgICAgcmV0dXJuIGYucmVzdWx0KCkgICMgTWF5IHJhaXNlIGYuZXhjZXB0aW9uKCkuCisKKyAgICBmb3IgZiBpbiB0b2RvOgorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKF9vbl9jb21wbGV0aW9uKQorICAgIGlmIHRvZG8gYW5kIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgIHRpbWVvdXRfaGFuZGxlID0gbG9vcC5jYWxsX2xhdGVyKHRpbWVvdXQsIF9vbl90aW1lb3V0KQorICAgIGZvciBfIGluIHJhbmdlKGxlbih0b2RvKSk6CisgICAgICAgIHlpZWxkIF93YWl0X2Zvcl9vbmUoKQorCisKK0Bjb3JvdXRpbmUKK2RlZiBzbGVlcChkZWxheSwgcmVzdWx0PU5vbmUsICosIGxvb3A9Tm9uZSk6CisgICAgIiIiQ29yb3V0aW5lIHRoYXQgY29tcGxldGVzIGFmdGVyIGEgZ2l2ZW4gdGltZSAoaW4gc2Vjb25kcykuIiIiCisgICAgaWYgZGVsYXkgPT0gMDoKKyAgICAgICAgeWllbGQKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZnV0dXJlID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgIGggPSBmdXR1cmUuX2xvb3AuY2FsbF9sYXRlcihkZWxheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnV0dXJlcy5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdXR1cmUsIHJlc3VsdCkKKyAgICB0cnk6CisgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBmdXR1cmUpCisgICAgZmluYWxseToKKyAgICAgICAgaC5jYW5jZWwoKQorCisKK2RlZiBhc3luYyhjb3JvX29yX2Z1dHVyZSwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXcmFwIGEgY29yb3V0aW5lIGluIGEgZnV0dXJlLgorCisgICAgSWYgdGhlIGFyZ3VtZW50IGlzIGEgRnV0dXJlLCBpdCBpcyByZXR1cm5lZCBkaXJlY3RseS4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBpbiAzLjUuIFVzZSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoKSBpbnN0ZWFkLgorICAgICIiIgorCisgICAgd2FybmluZ3Mud2FybigiYXN5bmNpby5hc3luYygpIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBlbnN1cmVfZnV0dXJlKCkiLAorICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgcmV0dXJuIGVuc3VyZV9mdXR1cmUoY29yb19vcl9mdXR1cmUsIGxvb3A9bG9vcCkKKworCitkZWYgZW5zdXJlX2Z1dHVyZShjb3JvX29yX2Z1dHVyZSwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXcmFwIGEgY29yb3V0aW5lIG9yIGFuIGF3YWl0YWJsZSBpbiBhIGZ1dHVyZS4KKworICAgIElmIHRoZSBhcmd1bWVudCBpcyBhIEZ1dHVyZSwgaXQgaXMgcmV0dXJuZWQgZGlyZWN0bHkuCisgICAgIiIiCisgICAgaWYgaXNpbnN0YW5jZShjb3JvX29yX2Z1dHVyZSwgZnV0dXJlcy5GdXR1cmUpOgorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lIGFuZCBsb29wIGlzIG5vdCBjb3JvX29yX2Z1dHVyZS5fbG9vcDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2xvb3AgYXJndW1lbnQgbXVzdCBhZ3JlZSB3aXRoIEZ1dHVyZScpCisgICAgICAgIHJldHVybiBjb3JvX29yX2Z1dHVyZQorICAgIGVsaWYgY29yb3V0aW5lcy5pc2Nvcm91dGluZShjb3JvX29yX2Z1dHVyZSk6CisgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgIGxvb3AgPSBldmVudHMuZ2V0X2V2ZW50X2xvb3AoKQorICAgICAgICB0YXNrID0gbG9vcC5jcmVhdGVfdGFzayhjb3JvX29yX2Z1dHVyZSkKKyAgICAgICAgaWYgdGFzay5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGRlbCB0YXNrLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICByZXR1cm4gdGFzaworICAgIGVsaWYgY29tcGF0LlBZMzUgYW5kIGluc3BlY3QuaXNhd2FpdGFibGUoY29yb19vcl9mdXR1cmUpOgorICAgICAgICByZXR1cm4gZW5zdXJlX2Z1dHVyZShfd3JhcF9hd2FpdGFibGUoY29yb19vcl9mdXR1cmUpLCBsb29wPWxvb3ApCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdBIEZ1dHVyZSwgYSBjb3JvdXRpbmUgb3IgYW4gYXdhaXRhYmxlIGlzIHJlcXVpcmVkJykKKworCitAY29yb3V0aW5lCitkZWYgX3dyYXBfYXdhaXRhYmxlKGF3YWl0YWJsZSk6CisgICAgIiIiSGVscGVyIGZvciBhc3luY2lvLmVuc3VyZV9mdXR1cmUoKS4KKworICAgIFdyYXBzIGF3YWl0YWJsZSAoYW4gb2JqZWN0IHdpdGggX19hd2FpdF9fKSBpbnRvIGEgY29yb3V0aW5lCisgICAgdGhhdCB3aWxsIGxhdGVyIGJlIHdyYXBwZWQgaW4gYSBUYXNrIGJ5IGVuc3VyZV9mdXR1cmUoKS4KKyAgICAiIiIKKyAgICByZXR1cm4gKHlpZWxkIGZyb20gYXdhaXRhYmxlLl9fYXdhaXRfXygpKQorCisKK2NsYXNzIF9HYXRoZXJpbmdGdXR1cmUoZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIkhlbHBlciBmb3IgZ2F0aGVyKCkuCisKKyAgICBUaGlzIG92ZXJyaWRlcyBjYW5jZWwoKSB0byBjYW5jZWwgYWxsIHRoZSBjaGlsZHJlbiBhbmQgYWN0IG1vcmUKKyAgICBsaWtlIFRhc2suY2FuY2VsKCksIHdoaWNoIGRvZXNuJ3QgaW1tZWRpYXRlbHkgbWFyayBpdHNlbGYgYXMKKyAgICBjYW5jZWxsZWQuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hpbGRyZW4sICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IGNoaWxkcmVuCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmRvbmUoKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5fY2hpbGRyZW46CisgICAgICAgICAgICBjaGlsZC5jYW5jZWwoKQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2RlZiBnYXRoZXIoKmNvcm9zX29yX2Z1dHVyZXMsIGxvb3A9Tm9uZSwgcmV0dXJuX2V4Y2VwdGlvbnM9RmFsc2UpOgorICAgICIiIlJldHVybiBhIGZ1dHVyZSBhZ2dyZWdhdGluZyByZXN1bHRzIGZyb20gdGhlIGdpdmVuIGNvcm91dGluZXMKKyAgICBvciBmdXR1cmVzLgorCisgICAgQWxsIGZ1dHVyZXMgbXVzdCBzaGFyZSB0aGUgc2FtZSBldmVudCBsb29wLiAgSWYgYWxsIHRoZSB0YXNrcyBhcmUKKyAgICBkb25lIHN1Y2Nlc3NmdWxseSwgdGhlIHJldHVybmVkIGZ1dHVyZSdzIHJlc3VsdCBpcyB0aGUgbGlzdCBvZgorICAgIHJlc3VsdHMgKGluIHRoZSBvcmRlciBvZiB0aGUgb3JpZ2luYWwgc2VxdWVuY2UsIG5vdCBuZWNlc3NhcmlseQorICAgIHRoZSBvcmRlciBvZiByZXN1bHRzIGFycml2YWwpLiAgSWYgKnJldHVybl9leGNlcHRpb25zKiBpcyBUcnVlLAorICAgIGV4Y2VwdGlvbnMgaW4gdGhlIHRhc2tzIGFyZSB0cmVhdGVkIHRoZSBzYW1lIGFzIHN1Y2Nlc3NmdWwKKyAgICByZXN1bHRzLCBhbmQgZ2F0aGVyZWQgaW4gdGhlIHJlc3VsdCBsaXN0OyBvdGhlcndpc2UsIHRoZSBmaXJzdAorICAgIHJhaXNlZCBleGNlcHRpb24gd2lsbCBiZSBpbW1lZGlhdGVseSBwcm9wYWdhdGVkIHRvIHRoZSByZXR1cm5lZAorICAgIGZ1dHVyZS4KKworICAgIENhbmNlbGxhdGlvbjogaWYgdGhlIG91dGVyIEZ1dHVyZSBpcyBjYW5jZWxsZWQsIGFsbCBjaGlsZHJlbiAodGhhdAorICAgIGhhdmUgbm90IGNvbXBsZXRlZCB5ZXQpIGFyZSBhbHNvIGNhbmNlbGxlZC4gIElmIGFueSBjaGlsZCBpcworICAgIGNhbmNlbGxlZCwgdGhpcyBpcyB0cmVhdGVkIGFzIGlmIGl0IHJhaXNlZCBDYW5jZWxsZWRFcnJvciAtLQorICAgIHRoZSBvdXRlciBGdXR1cmUgaXMgKm5vdCogY2FuY2VsbGVkIGluIHRoaXMgY2FzZS4gIChUaGlzIGlzIHRvCisgICAgcHJldmVudCB0aGUgY2FuY2VsbGF0aW9uIG9mIG9uZSBjaGlsZCB0byBjYXVzZSBvdGhlciBjaGlsZHJlbiB0bworICAgIGJlIGNhbmNlbGxlZC4pCisgICAgIiIiCisgICAgaWYgbm90IGNvcm9zX29yX2Z1dHVyZXM6CisgICAgICAgIG91dGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBvdXRlci5zZXRfcmVzdWx0KFtdKQorICAgICAgICByZXR1cm4gb3V0ZXIKKworICAgIGFyZ190b19mdXQgPSB7fQorICAgIGZvciBhcmcgaW4gc2V0KGNvcm9zX29yX2Z1dHVyZXMpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmcsIGZ1dHVyZXMuRnV0dXJlKToKKyAgICAgICAgICAgIGZ1dCA9IGVuc3VyZV9mdXR1cmUoYXJnLCBsb29wPWxvb3ApCisgICAgICAgICAgICBpZiBsb29wIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgbG9vcCA9IGZ1dC5fbG9vcAorICAgICAgICAgICAgIyBUaGUgY2FsbGVyIGNhbm5vdCBjb250cm9sIHRoaXMgZnV0dXJlLCB0aGUgImRlc3Ryb3kgcGVuZGluZyB0YXNrIgorICAgICAgICAgICAgIyB3YXJuaW5nIHNob3VsZCBub3QgYmUgZW1pdHRlZC4KKyAgICAgICAgICAgIGZ1dC5fbG9nX2Rlc3Ryb3lfcGVuZGluZyA9IEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmdXQgPSBhcmcKKyAgICAgICAgICAgIGlmIGxvb3AgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBsb29wID0gZnV0Ll9sb29wCisgICAgICAgICAgICBlbGlmIGZ1dC5fbG9vcCBpcyBub3QgbG9vcDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmdXR1cmVzIGFyZSB0aWVkIHRvIGRpZmZlcmVudCBldmVudCBsb29wcyIpCisgICAgICAgIGFyZ190b19mdXRbYXJnXSA9IGZ1dAorCisgICAgY2hpbGRyZW4gPSBbYXJnX3RvX2Z1dFthcmddIGZvciBhcmcgaW4gY29yb3Nfb3JfZnV0dXJlc10KKyAgICBuY2hpbGRyZW4gPSBsZW4oY2hpbGRyZW4pCisgICAgb3V0ZXIgPSBfR2F0aGVyaW5nRnV0dXJlKGNoaWxkcmVuLCBsb29wPWxvb3ApCisgICAgbmZpbmlzaGVkID0gMAorICAgIHJlc3VsdHMgPSBbTm9uZV0gKiBuY2hpbGRyZW4KKworICAgIGRlZiBfZG9uZV9jYWxsYmFjayhpLCBmdXQpOgorICAgICAgICBub25sb2NhbCBuZmluaXNoZWQKKyAgICAgICAgaWYgb3V0ZXIuZG9uZSgpOgorICAgICAgICAgICAgaWYgbm90IGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgICAgICBmdXQuZXhjZXB0aW9uKCkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZ1dC5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIHJlcyA9IGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IoKQorICAgICAgICAgICAgaWYgbm90IHJldHVybl9leGNlcHRpb25zOgorICAgICAgICAgICAgICAgIG91dGVyLnNldF9leGNlcHRpb24ocmVzKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbGlmIGZ1dC5fZXhjZXB0aW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmVzID0gZnV0LmV4Y2VwdGlvbigpICAjIE1hcmsgZXhjZXB0aW9uIHJldHJpZXZlZC4KKyAgICAgICAgICAgIGlmIG5vdCByZXR1cm5fZXhjZXB0aW9uczoKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfZXhjZXB0aW9uKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcyA9IGZ1dC5fcmVzdWx0CisgICAgICAgIHJlc3VsdHNbaV0gPSByZXMKKyAgICAgICAgbmZpbmlzaGVkICs9IDEKKyAgICAgICAgaWYgbmZpbmlzaGVkID09IG5jaGlsZHJlbjoKKyAgICAgICAgICAgIG91dGVyLnNldF9yZXN1bHQocmVzdWx0cykKKworICAgIGZvciBpLCBmdXQgaW4gZW51bWVyYXRlKGNoaWxkcmVuKToKKyAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGZ1bmN0b29scy5wYXJ0aWFsKF9kb25lX2NhbGxiYWNrLCBpKSkKKyAgICByZXR1cm4gb3V0ZXIKKworCitkZWYgc2hpZWxkKGFyZywgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJXYWl0IGZvciBhIGZ1dHVyZSwgc2hpZWxkaW5nIGl0IGZyb20gY2FuY2VsbGF0aW9uLgorCisgICAgVGhlIHN0YXRlbWVudAorCisgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gc2hpZWxkKHNvbWV0aGluZygpKQorCisgICAgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvIHRoZSBzdGF0ZW1lbnQKKworICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHNvbWV0aGluZygpCisKKyAgICAqZXhjZXB0KiB0aGF0IGlmIHRoZSBjb3JvdXRpbmUgY29udGFpbmluZyBpdCBpcyBjYW5jZWxsZWQsIHRoZQorICAgIHRhc2sgcnVubmluZyBpbiBzb21ldGhpbmcoKSBpcyBub3QgY2FuY2VsbGVkLiAgRnJvbSB0aGUgUE9WIG9mCisgICAgc29tZXRoaW5nKCksIHRoZSBjYW5jZWxsYXRpb24gZGlkIG5vdCBoYXBwZW4uICBCdXQgaXRzIGNhbGxlciBpcworICAgIHN0aWxsIGNhbmNlbGxlZCwgc28gdGhlIHlpZWxkLWZyb20gZXhwcmVzc2lvbiBzdGlsbCByYWlzZXMKKyAgICBDYW5jZWxsZWRFcnJvci4gIE5vdGU6IElmIHNvbWV0aGluZygpIGlzIGNhbmNlbGxlZCBieSBvdGhlciBtZWFucworICAgIHRoaXMgd2lsbCBzdGlsbCBjYW5jZWwgc2hpZWxkKCkuCisKKyAgICBJZiB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IGlnbm9yZSBjYW5jZWxsYXRpb24gKG5vdCByZWNvbW1lbmRlZCkKKyAgICB5b3UgY2FuIGNvbWJpbmUgc2hpZWxkKCkgd2l0aCBhIHRyeS9leGNlcHQgY2xhdXNlLCBhcyBmb2xsb3dzOgorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gc2hpZWxkKHNvbWV0aGluZygpKQorICAgICAgICBleGNlcHQgQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICByZXMgPSBOb25lCisgICAgIiIiCisgICAgaW5uZXIgPSBlbnN1cmVfZnV0dXJlKGFyZywgbG9vcD1sb29wKQorICAgIGlmIGlubmVyLmRvbmUoKToKKyAgICAgICAgIyBTaG9ydGN1dC4KKyAgICAgICAgcmV0dXJuIGlubmVyCisgICAgbG9vcCA9IGlubmVyLl9sb29wCisgICAgb3V0ZXIgPSBmdXR1cmVzLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgX2RvbmVfY2FsbGJhY2soaW5uZXIpOgorICAgICAgICBpZiBvdXRlci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIGlmIG5vdCBpbm5lci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgICAgICAjIE1hcmsgaW5uZXIncyByZXN1bHQgYXMgcmV0cmlldmVkLgorICAgICAgICAgICAgICAgIGlubmVyLmV4Y2VwdGlvbigpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBpbm5lci5jYW5jZWxsZWQoKToKKyAgICAgICAgICAgIG91dGVyLmNhbmNlbCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGMgPSBpbm5lci5leGNlcHRpb24oKQorICAgICAgICAgICAgaWYgZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIG91dGVyLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvdXRlci5zZXRfcmVzdWx0KGlubmVyLnJlc3VsdCgpKQorCisgICAgaW5uZXIuYWRkX2RvbmVfY2FsbGJhY2soX2RvbmVfY2FsbGJhY2spCisgICAgcmV0dXJuIG91dGVyCisKKworZGVmIHJ1bl9jb3JvdXRpbmVfdGhyZWFkc2FmZShjb3JvLCBsb29wKToKKyAgICAiIiJTdWJtaXQgYSBjb3JvdXRpbmUgb2JqZWN0IHRvIGEgZ2l2ZW4gZXZlbnQgbG9vcC4KKworICAgIFJldHVybiBhIGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUgdG8gYWNjZXNzIHRoZSByZXN1bHQuCisgICAgIiIiCisgICAgaWYgbm90IGNvcm91dGluZXMuaXNjb3JvdXRpbmUoY29ybyk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQSBjb3JvdXRpbmUgb2JqZWN0IGlzIHJlcXVpcmVkJykKKyAgICBmdXR1cmUgPSBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlKCkKKworICAgIGRlZiBjYWxsYmFjaygpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmdXR1cmVzLl9jaGFpbl9mdXR1cmUoZW5zdXJlX2Z1dHVyZShjb3JvLCBsb29wPWxvb3ApLCBmdXR1cmUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgaWYgZnV0dXJlLnNldF9ydW5uaW5nX29yX25vdGlmeV9jYW5jZWwoKToKKyAgICAgICAgICAgICAgICBmdXR1cmUuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgICAgICByYWlzZQorCisgICAgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjYWxsYmFjaykKKyAgICByZXR1cm4gZnV0dXJlCisKKworZGVmIHRpbWVvdXQodGltZW91dCwgKiwgbG9vcD1Ob25lKToKKyAgICAiIiJBIGZhY3Rvcnkgd2hpY2ggcHJvZHVjZSBhIGNvbnRleHQgbWFuYWdlciB3aXRoIHRpbWVvdXQuCisKKyAgICBVc2VmdWwgaW4gY2FzZXMgd2hlbiB5b3Ugd2FudCB0byBhcHBseSB0aW1lb3V0IGxvZ2ljIGFyb3VuZCBibG9jaworICAgIG9mIGNvZGUgb3IgaW4gY2FzZXMgd2hlbiBhc3luY2lvLndhaXRfZm9yIGlzIG5vdCBzdWl0YWJsZS4KKworICAgIEZvciBleGFtcGxlOgorCisgICAgPj4+IHdpdGggYXN5bmNpby50aW1lb3V0KDAuMDAxKToKKyAgICAuLi4gICAgIHlpZWxkIGZyb20gY29ybygpCisKKworICAgIHRpbWVvdXQ6IHRpbWVvdXQgdmFsdWUgaW4gc2Vjb25kcworICAgIGxvb3A6IGFzeW5jaW8gY29tcGF0aWJsZSBldmVudCBsb29wCisgICAgIiIiCisgICAgaWYgbG9vcCBpcyBOb25lOgorICAgICAgICBsb29wID0gZXZlbnRzLmdldF9ldmVudF9sb29wKCkKKyAgICByZXR1cm4gX1RpbWVvdXQodGltZW91dCwgbG9vcD1sb29wKQorCisKK2NsYXNzIF9UaW1lb3V0OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0aW1lb3V0LCAqLCBsb29wKToKKyAgICAgICAgc2VsZi5fdGltZW91dCA9IHRpbWVvdXQKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fdGFzayA9IE5vbmUKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gRmFsc2UKKyAgICAgICAgc2VsZi5fY2FuY2VsX2hhbmRsZXIgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl90YXNrID0gVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBpZiBzZWxmLl90YXNrIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1RpbWVvdXQgY29udGV4dCBtYW5hZ2VyIHNob3VsZCBiZSB1c2VkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5zaWRlIGEgdGFzaycpCisgICAgICAgIHNlbGYuX2NhbmNlbF9oYW5kbGVyID0gc2VsZi5fbG9vcC5jYWxsX2xhdGVyKAorICAgICAgICAgICAgc2VsZi5fdGltZW91dCwgc2VsZi5fY2FuY2VsX3Rhc2spCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWwsIGV4Y190Yik6CisgICAgICAgIGlmIGV4Y190eXBlIGlzIGZ1dHVyZXMuQ2FuY2VsbGVkRXJyb3IgYW5kIHNlbGYuX2NhbmNlbGxlZDoKKyAgICAgICAgICAgIHNlbGYuX2NhbmNlbF9oYW5kbGVyID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fdGFzayA9IE5vbmUKKyAgICAgICAgICAgIHJhaXNlIGZ1dHVyZXMuVGltZW91dEVycm9yCisgICAgICAgIHNlbGYuX2NhbmNlbF9oYW5kbGVyLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX2NhbmNlbF9oYW5kbGVyID0gTm9uZQorICAgICAgICBzZWxmLl90YXNrID0gTm9uZQorCisgICAgZGVmIF9jYW5jZWxfdGFzayhzZWxmKToKKyAgICAgICAgc2VsZi5fY2FuY2VsbGVkID0gc2VsZi5fdGFzay5jYW5jZWwoKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdGVzdF91dGlscy5weSBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk2ZTZhZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3Rlc3RfdXRpbHMucHkKQEAgLTAsMCArMSw0NjMgQEAKKyIiIlV0aWxpdGllcyBzaGFyZWQgYnkgdGVzdHMuIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBpbworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHJlCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc29ja2V0c2VydmVyCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgSFRUUFNlcnZlcgorZnJvbSB3c2dpcmVmLnNpbXBsZV9zZXJ2ZXIgaW1wb3J0IFdTR0lSZXF1ZXN0SGFuZGxlciwgV1NHSVNlcnZlcgorCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgc3NsID0gTm9uZQorCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGNvbXBhdAorZnJvbSAuIGltcG9ydCBldmVudHMKK2Zyb20gLiBpbXBvcnQgZnV0dXJlcworZnJvbSAuIGltcG9ydCBzZWxlY3RvcnMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLmNvcm91dGluZXMgaW1wb3J0IGNvcm91dGluZQorZnJvbSAubG9nIGltcG9ydCBsb2dnZXIKKworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzogICMgcHJhZ21hOiBubyBjb3ZlcgorICAgIGZyb20gLndpbmRvd3NfdXRpbHMgaW1wb3J0IHNvY2tldHBhaXIKK2Vsc2U6CisgICAgZnJvbSBzb2NrZXQgaW1wb3J0IHNvY2tldHBhaXIgICMgcHJhZ21hOiBubyBjb3ZlcgorCisKK2RlZiBkdW1teV9zc2xfY29udGV4dCgpOgorICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorCisKK2RlZiBydW5fYnJpZWZseShsb29wKToKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIG9uY2UoKToKKyAgICAgICAgcGFzcworICAgIGdlbiA9IG9uY2UoKQorICAgIHQgPSBsb29wLmNyZWF0ZV90YXNrKGdlbikKKyAgICAjIERvbid0IGxvZyBhIHdhcm5pbmcgaWYgdGhlIHRhc2sgaXMgbm90IGRvbmUgYWZ0ZXIgcnVuX3VudGlsX2NvbXBsZXRlKCkuCisgICAgIyBJdCBvY2N1cnMgaWYgdGhlIGxvb3AgaXMgc3RvcHBlZCBvciBpZiBhIHRhc2sgcmFpc2VzIGEgQmFzZUV4Y2VwdGlvbi4KKyAgICB0Ll9sb2dfZGVzdHJveV9wZW5kaW5nID0gRmFsc2UKKyAgICB0cnk6CisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgZmluYWxseToKKyAgICAgICAgZ2VuLmNsb3NlKCkKKworCitkZWYgcnVuX3VudGlsKGxvb3AsIHByZWQsIHRpbWVvdXQ9MzApOgorICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CisgICAgd2hpbGUgbm90IHByZWQoKToKKyAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICBpZiB0aW1lb3V0IDw9IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgZnV0dXJlcy5UaW1lb3V0RXJyb3IoKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrcy5zbGVlcCgwLjAwMSwgbG9vcD1sb29wKSkKKworCitkZWYgcnVuX29uY2UobG9vcCk6CisgICAgIiIiTGVnYWN5IEFQSSB0byBydW4gb25jZSB0aHJvdWdoIHRoZSBldmVudCBsb29wLgorCisgICAgVGhpcyBpcyB0aGUgcmVjb21tZW5kZWQgcGF0dGVybiBmb3IgdGVzdCBjb2RlLiAgSXQgd2lsbCBwb2xsIHRoZQorICAgIHNlbGVjdG9yIG9uY2UgYW5kIHJ1biBhbGwgY2FsbGJhY2tzIHNjaGVkdWxlZCBpbiByZXNwb25zZSB0byBJL08KKyAgICBldmVudHMuCisgICAgIiIiCisgICAgbG9vcC5jYWxsX3Nvb24obG9vcC5zdG9wKQorICAgIGxvb3AucnVuX2ZvcmV2ZXIoKQorCisKK2NsYXNzIFNpbGVudFdTR0lSZXF1ZXN0SGFuZGxlcihXU0dJUmVxdWVzdEhhbmRsZXIpOgorCisgICAgZGVmIGdldF9zdGRlcnIoc2VsZik6CisgICAgICAgIHJldHVybiBpby5TdHJpbmdJTygpCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBTaWxlbnRXU0dJU2VydmVyKFdTR0lTZXJ2ZXIpOgorCisgICAgcmVxdWVzdF90aW1lb3V0ID0gMgorCisgICAgZGVmIGdldF9yZXF1ZXN0KHNlbGYpOgorICAgICAgICByZXF1ZXN0LCBjbGllbnRfYWRkciA9IHN1cGVyKCkuZ2V0X3JlcXVlc3QoKQorICAgICAgICByZXF1ZXN0LnNldHRpbWVvdXQoc2VsZi5yZXF1ZXN0X3RpbWVvdXQpCisgICAgICAgIHJldHVybiByZXF1ZXN0LCBjbGllbnRfYWRkcgorCisgICAgZGVmIGhhbmRsZV9lcnJvcihzZWxmLCByZXF1ZXN0LCBjbGllbnRfYWRkcmVzcyk6CisgICAgICAgIHBhc3MKKworCitjbGFzcyBTU0xXU0dJU2VydmVyTWl4aW46CisKKyAgICBkZWYgZmluaXNoX3JlcXVlc3Qoc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAjIFRoZSByZWxhdGl2ZSBsb2NhdGlvbiBvZiBvdXIgdGVzdCBkaXJlY3RvcnkgKHdoaWNoCisgICAgICAgICMgY29udGFpbnMgdGhlIHNzbCBrZXkgYW5kIGNlcnRpZmljYXRlIGZpbGVzKSBkaWZmZXJzCisgICAgICAgICMgYmV0d2VlbiB0aGUgc3RkbGliIGFuZCBzdGFuZC1hbG9uZSBhc3luY2lvLgorICAgICAgICAjIFByZWZlciBvdXIgb3duIGlmIHdlIGNhbiBmaW5kIGl0LgorICAgICAgICBoZXJlID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICcuLicsICd0ZXN0cycpCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGhlcmUpOgorICAgICAgICAgICAgaGVyZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MuX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCcsICd0ZXN0X2FzeW5jaW8nKQorICAgICAgICBrZXlmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzc2xfa2V5LnBlbScpCisgICAgICAgIGNlcnRmaWxlID0gb3MucGF0aC5qb2luKGhlcmUsICdzc2xfY2VydC5wZW0nKQorICAgICAgICBzc29jayA9IHNzbC53cmFwX3NvY2tldChyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1UcnVlKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLlJlcXVlc3RIYW5kbGVyQ2xhc3Moc3NvY2ssIGNsaWVudF9hZGRyZXNzLCBzZWxmKQorICAgICAgICAgICAgc3NvY2suY2xvc2UoKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICMgbWF5YmUgc29ja2V0IGhhcyBiZWVuIGNsb3NlZCBieSBwZWVyCisgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgU1NMV1NHSVNlcnZlcihTU0xXU0dJU2VydmVyTWl4aW4sIFNpbGVudFdTR0lTZXJ2ZXIpOgorICAgIHBhc3MKKworCitkZWYgX3J1bl90ZXN0X3NlcnZlcigqLCBhZGRyZXNzLCB1c2Vfc3NsPUZhbHNlLCBzZXJ2ZXJfY2xzLCBzZXJ2ZXJfc3NsX2Nscyk6CisKKyAgICBkZWYgYXBwKGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKToKKyAgICAgICAgc3RhdHVzID0gJzIwMCBPSycKKyAgICAgICAgaGVhZGVycyA9IFsoJ0NvbnRlbnQtdHlwZScsICd0ZXh0L3BsYWluJyldCisgICAgICAgIHN0YXJ0X3Jlc3BvbnNlKHN0YXR1cywgaGVhZGVycykKKyAgICAgICAgcmV0dXJuIFtiJ1Rlc3QgbWVzc2FnZSddCisKKyAgICAjIFJ1biB0aGUgdGVzdCBXU0dJIHNlcnZlciBpbiBhIHNlcGFyYXRlIHRocmVhZCBpbiBvcmRlciBub3QgdG8KKyAgICAjIGludGVyZmVyZSB3aXRoIGV2ZW50IGhhbmRsaW5nIGluIHRoZSBtYWluIHRocmVhZAorICAgIHNlcnZlcl9jbGFzcyA9IHNlcnZlcl9zc2xfY2xzIGlmIHVzZV9zc2wgZWxzZSBzZXJ2ZXJfY2xzCisgICAgaHR0cGQgPSBzZXJ2ZXJfY2xhc3MoYWRkcmVzcywgU2lsZW50V1NHSVJlcXVlc3RIYW5kbGVyKQorICAgIGh0dHBkLnNldF9hcHAoYXBwKQorICAgIGh0dHBkLmFkZHJlc3MgPSBodHRwZC5zZXJ2ZXJfYWRkcmVzcworICAgIHNlcnZlcl90aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKAorICAgICAgICB0YXJnZXQ9bGFtYmRhOiBodHRwZC5zZXJ2ZV9mb3JldmVyKHBvbGxfaW50ZXJ2YWw9MC4wNSkpCisgICAgc2VydmVyX3RocmVhZC5zdGFydCgpCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBodHRwZAorICAgIGZpbmFsbHk6CisgICAgICAgIGh0dHBkLnNodXRkb3duKCkKKyAgICAgICAgaHR0cGQuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgc2VydmVyX3RocmVhZC5qb2luKCkKKworCitpZiBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKToKKworICAgIGNsYXNzIFVuaXhIVFRQU2VydmVyKHNvY2tldHNlcnZlci5Vbml4U3RyZWFtU2VydmVyLCBIVFRQU2VydmVyKToKKworICAgICAgICBkZWYgc2VydmVyX2JpbmQoc2VsZik6CisgICAgICAgICAgICBzb2NrZXRzZXJ2ZXIuVW5peFN0cmVhbVNlcnZlci5zZXJ2ZXJfYmluZChzZWxmKQorICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfbmFtZSA9ICcxMjcuMC4wLjEnCisgICAgICAgICAgICBzZWxmLnNlcnZlcl9wb3J0ID0gODAKKworCisgICAgY2xhc3MgVW5peFdTR0lTZXJ2ZXIoVW5peEhUVFBTZXJ2ZXIsIFdTR0lTZXJ2ZXIpOgorCisgICAgICAgIHJlcXVlc3RfdGltZW91dCA9IDIKKworICAgICAgICBkZWYgc2VydmVyX2JpbmQoc2VsZik6CisgICAgICAgICAgICBVbml4SFRUUFNlcnZlci5zZXJ2ZXJfYmluZChzZWxmKQorICAgICAgICAgICAgc2VsZi5zZXR1cF9lbnZpcm9uKCkKKworICAgICAgICBkZWYgZ2V0X3JlcXVlc3Qoc2VsZik6CisgICAgICAgICAgICByZXF1ZXN0LCBjbGllbnRfYWRkciA9IHN1cGVyKCkuZ2V0X3JlcXVlc3QoKQorICAgICAgICAgICAgcmVxdWVzdC5zZXR0aW1lb3V0KHNlbGYucmVxdWVzdF90aW1lb3V0KQorICAgICAgICAgICAgIyBDb2RlIGluIHRoZSBzdGRsaWIgZXhwZWN0cyB0aGF0IGdldF9yZXF1ZXN0CisgICAgICAgICAgICAjIHdpbGwgcmV0dXJuIGEgc29ja2V0IGFuZCBhIHR1cGxlIChob3N0LCBwb3J0KS4KKyAgICAgICAgICAgICMgSG93ZXZlciwgdGhpcyBpc24ndCB0cnVlIGZvciBVTklYIHNvY2tldHMsCisgICAgICAgICAgICAjIGFzIHRoZSBzZWNvbmQgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYSBwYXRoOworICAgICAgICAgICAgIyBoZW5jZSB3ZSByZXR1cm4gc29tZSBmYWtlIGRhdGEgc3VmZmljaWVudAorICAgICAgICAgICAgIyB0byBnZXQgdGhlIHRlc3RzIGdvaW5nCisgICAgICAgICAgICByZXR1cm4gcmVxdWVzdCwgKCcxMjcuMC4wLjEnLCAnJykKKworCisgICAgY2xhc3MgU2lsZW50VW5peFdTR0lTZXJ2ZXIoVW5peFdTR0lTZXJ2ZXIpOgorCisgICAgICAgIGRlZiBoYW5kbGVfZXJyb3Ioc2VsZiwgcmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgorICAgICAgICAgICAgcGFzcworCisKKyAgICBjbGFzcyBVbml4U1NMV1NHSVNlcnZlcihTU0xXU0dJU2VydmVyTWl4aW4sIFNpbGVudFVuaXhXU0dJU2VydmVyKToKKyAgICAgICAgcGFzcworCisKKyAgICBkZWYgZ2VuX3VuaXhfc29ja2V0X3BhdGgoKToKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBmaWxlOgorICAgICAgICAgICAgcmV0dXJuIGZpbGUubmFtZQorCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiB1bml4X3NvY2tldF9wYXRoKCk6CisgICAgICAgIHBhdGggPSBnZW5fdW5peF9zb2NrZXRfcGF0aCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIHBhdGgKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvcy51bmxpbmsocGF0aCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworCisgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICBkZWYgcnVuX3Rlc3RfdW5peF9zZXJ2ZXIoKiwgdXNlX3NzbD1GYWxzZSk6CisgICAgICAgIHdpdGggdW5peF9zb2NrZXRfcGF0aCgpIGFzIHBhdGg6CisgICAgICAgICAgICB5aWVsZCBmcm9tIF9ydW5fdGVzdF9zZXJ2ZXIoYWRkcmVzcz1wYXRoLCB1c2Vfc3NsPXVzZV9zc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2Nscz1TaWxlbnRVbml4V1NHSVNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc3NsX2Nscz1Vbml4U1NMV1NHSVNlcnZlcikKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIHJ1bl90ZXN0X3NlcnZlcigqLCBob3N0PScxMjcuMC4wLjEnLCBwb3J0PTAsIHVzZV9zc2w9RmFsc2UpOgorICAgIHlpZWxkIGZyb20gX3J1bl90ZXN0X3NlcnZlcihhZGRyZXNzPShob3N0LCBwb3J0KSwgdXNlX3NzbD11c2Vfc3NsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfY2xzPVNpbGVudFdTR0lTZXJ2ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zc2xfY2xzPVNTTFdTR0lTZXJ2ZXIpCisKKworZGVmIG1ha2VfdGVzdF9wcm90b2NvbChiYXNlKToKKyAgICBkY3QgPSB7fQorICAgIGZvciBuYW1lIGluIGRpcihiYXNlKToKKyAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfXycpIGFuZCBuYW1lLmVuZHN3aXRoKCdfXycpOgorICAgICAgICAgICAgIyBza2lwIG1hZ2ljIG5hbWVzCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBkY3RbbmFtZV0gPSBNb2NrQ2FsbGJhY2socmV0dXJuX3ZhbHVlPU5vbmUpCisgICAgcmV0dXJuIHR5cGUoJ1Rlc3RQcm90b2NvbCcsIChiYXNlLCkgKyBiYXNlLl9fYmFzZXNfXywgZGN0KSgpCisKKworY2xhc3MgVGVzdFNlbGVjdG9yKHNlbGVjdG9ycy5CYXNlU2VsZWN0b3IpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmtleXMgPSB7fQorCisgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAga2V5ID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KGZpbGVvYmosIDAsIGV2ZW50cywgZGF0YSkKKyAgICAgICAgc2VsZi5rZXlzW2ZpbGVvYmpdID0ga2V5CisgICAgICAgIHJldHVybiBrZXkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZpbGVvYmopOgorICAgICAgICByZXR1cm4gc2VsZi5rZXlzLnBvcChmaWxlb2JqKQorCisgICAgZGVmIHNlbGVjdChzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cworCisKK2NsYXNzIFRlc3RMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorICAgICIiIkxvb3AgZm9yIHVuaXR0ZXN0cy4KKworICAgIEl0IG1hbmFnZXMgc2VsZiB0aW1lIGRpcmVjdGx5LgorICAgIElmIHNvbWV0aGluZyBzY2hlZHVsZWQgdG8gYmUgZXhlY3V0ZWQgbGF0ZXIgdGhlbgorICAgIG9uIG5leHQgbG9vcCBpdGVyYXRpb24gYWZ0ZXIgYWxsIHJlYWR5IGhhbmRsZXJzIGRvbmUKKyAgICBnZW5lcmF0b3IgcGFzc2VkIHRvIF9faW5pdF9fIGlzIGNhbGxpbmcuCisKKyAgICBHZW5lcmF0b3Igc2hvdWxkIGJlIGxpa2UgdGhpczoKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICAuLi4KKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAuLi4KKyAgICAgICAgICAgIC4uLiA9IHlpZWxkIHRpbWVfYWR2YW5jZQorCisgICAgVmFsdWUgcmV0dXJuZWQgYnkgeWllbGQgaXMgYWJzb2x1dGUgdGltZSBvZiBuZXh0IHNjaGVkdWxlZCBoYW5kbGVyLgorICAgIFZhbHVlIHBhc3NlZCB0byB5aWVsZCBpcyB0aW1lIGFkdmFuY2UgdG8gbW92ZSBsb29wJ3MgdGltZSBmb3J3YXJkLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdlbj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisKKyAgICAgICAgaWYgZ2VuIGlzIE5vbmU6CisgICAgICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX29uX2Nsb3NlID0gVHJ1ZQorCisgICAgICAgIHNlbGYuX2dlbiA9IGdlbigpCisgICAgICAgIG5leHQoc2VsZi5fZ2VuKQorICAgICAgICBzZWxmLl90aW1lID0gMAorICAgICAgICBzZWxmLl9jbG9ja19yZXNvbHV0aW9uID0gMWUtOQorICAgICAgICBzZWxmLl90aW1lcnMgPSBbXQorICAgICAgICBzZWxmLl9zZWxlY3RvciA9IFRlc3RTZWxlY3RvcigpCisKKyAgICAgICAgc2VsZi5yZWFkZXJzID0ge30KKyAgICAgICAgc2VsZi53cml0ZXJzID0ge30KKyAgICAgICAgc2VsZi5yZXNldF9jb3VudGVycygpCisKKyAgICBkZWYgdGltZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX3RpbWUKKworICAgIGRlZiBhZHZhbmNlX3RpbWUoc2VsZiwgYWR2YW5jZSk6CisgICAgICAgICIiIk1vdmUgdGVzdCB0aW1lIGZvcndhcmQuIiIiCisgICAgICAgIGlmIGFkdmFuY2U6CisgICAgICAgICAgICBzZWxmLl90aW1lICs9IGFkdmFuY2UKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisgICAgICAgIGlmIHNlbGYuX2NoZWNrX29uX2Nsb3NlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2dlbi5zZW5kKDApCisgICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlRpbWUgZ2VuZXJhdG9yIGlzIG5vdCBmaW5pc2hlZCIpCisKKyAgICBkZWYgYWRkX3JlYWRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgc2VsZi5yZWFkZXJzW2ZkXSA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisKKyAgICBkZWYgcmVtb3ZlX3JlYWRlcihzZWxmLCBmZCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcl9jb3VudFtmZF0gKz0gMQorICAgICAgICBpZiBmZCBpbiBzZWxmLnJlYWRlcnM6CisgICAgICAgICAgICBkZWwgc2VsZi5yZWFkZXJzW2ZkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFzc2VydF9yZWFkZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBmZCBpbiBzZWxmLnJlYWRlcnMsICdmZCB7fSBpcyBub3QgcmVnaXN0ZXJlZCcuZm9ybWF0KGZkKQorICAgICAgICBoYW5kbGUgPSBzZWxmLnJlYWRlcnNbZmRdCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2NhbGxiYWNrID09IGNhbGxiYWNrLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fYXJncyA9PSBhcmdzLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgYWRkX3dyaXRlcihzZWxmLCBmZCwgY2FsbGJhY2ssICphcmdzKToKKyAgICAgICAgc2VsZi53cml0ZXJzW2ZkXSA9IGV2ZW50cy5IYW5kbGUoY2FsbGJhY2ssIGFyZ3MsIHNlbGYpCisKKyAgICBkZWYgcmVtb3ZlX3dyaXRlcihzZWxmLCBmZCk6CisgICAgICAgIHNlbGYucmVtb3ZlX3dyaXRlcl9jb3VudFtmZF0gKz0gMQorICAgICAgICBpZiBmZCBpbiBzZWxmLndyaXRlcnM6CisgICAgICAgICAgICBkZWwgc2VsZi53cml0ZXJzW2ZkXQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGFzc2VydF93cml0ZXIoc2VsZiwgZmQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIGFzc2VydCBmZCBpbiBzZWxmLndyaXRlcnMsICdmZCB7fSBpcyBub3QgcmVnaXN0ZXJlZCcuZm9ybWF0KGZkKQorICAgICAgICBoYW5kbGUgPSBzZWxmLndyaXRlcnNbZmRdCisgICAgICAgIGFzc2VydCBoYW5kbGUuX2NhbGxiYWNrID09IGNhbGxiYWNrLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgYXNzZXJ0IGhhbmRsZS5fYXJncyA9PSBhcmdzLCAneyFyfSAhPSB7IXJ9Jy5mb3JtYXQoCisgICAgICAgICAgICBoYW5kbGUuX2FyZ3MsIGFyZ3MpCisKKyAgICBkZWYgcmVzZXRfY291bnRlcnMoc2VsZik6CisgICAgICAgIHNlbGYucmVtb3ZlX3JlYWRlcl9jb3VudCA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGludCkKKyAgICAgICAgc2VsZi5yZW1vdmVfd3JpdGVyX2NvdW50ID0gY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoaW50KQorCisgICAgZGVmIF9ydW5fb25jZShzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fcnVuX29uY2UoKQorICAgICAgICBmb3Igd2hlbiBpbiBzZWxmLl90aW1lcnM6CisgICAgICAgICAgICBhZHZhbmNlID0gc2VsZi5fZ2VuLnNlbmQod2hlbikKKyAgICAgICAgICAgIHNlbGYuYWR2YW5jZV90aW1lKGFkdmFuY2UpCisgICAgICAgIHNlbGYuX3RpbWVycyA9IFtdCisKKyAgICBkZWYgY2FsbF9hdChzZWxmLCB3aGVuLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBzZWxmLl90aW1lcnMuYXBwZW5kKHdoZW4pCisgICAgICAgIHJldHVybiBzdXBlcigpLmNhbGxfYXQod2hlbiwgY2FsbGJhY2ssICphcmdzKQorCisgICAgZGVmIF9wcm9jZXNzX2V2ZW50cyhzZWxmLCBldmVudF9saXN0KToKKyAgICAgICAgcmV0dXJuCisKKyAgICBkZWYgX3dyaXRlX3RvX3NlbGYoc2VsZik6CisgICAgICAgIHBhc3MKKworCitkZWYgTW9ja0NhbGxiYWNrKCoqa3dhcmdzKToKKyAgICByZXR1cm4gbW9jay5Nb2NrKHNwZWM9WydfX2NhbGxfXyddLCAqKmt3YXJncykKKworCitjbGFzcyBNb2NrUGF0dGVybihzdHIpOgorICAgICIiIkEgcmVnZXggYmFzZWQgc3RyIHdpdGggYSBmdXp6eSBfX2VxX18uCisKKyAgICBVc2UgdGhpcyBoZWxwZXIgd2l0aCAnbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgnLCBvciBhbnl3aGVyZQorICAgIHdoZXJlIGEgcmVnZXggY29tcGFyaXNvbiBiZXR3ZWVuIHN0cmluZ3MgaXMgbmVlZGVkLgorCisgICAgRm9yIGluc3RhbmNlOgorICAgICAgIG1vY2tfY2FsbC5hc3NlcnRfY2FsbGVkX3dpdGgoTW9ja1BhdHRlcm4oJ3NwYW0uKmhhbScpKQorICAgICIiIgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gYm9vbChyZS5zZWFyY2goc3RyKHNlbGYpLCBvdGhlciwgcmUuUykpCisKKworZGVmIGdldF9mdW5jdGlvbl9zb3VyY2UoZnVuYyk6CisgICAgc291cmNlID0gZXZlbnRzLl9nZXRfZnVuY3Rpb25fc291cmNlKGZ1bmMpCisgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuYWJsZSB0byBnZXQgdGhlIHNvdXJjZSBvZiAlciIgJSAoZnVuYywpKQorICAgIHJldHVybiBzb3VyY2UKKworCitjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldF9ldmVudF9sb29wKHNlbGYsIGxvb3AsICosIGNsZWFudXA9VHJ1ZSk6CisgICAgICAgIGFzc2VydCBsb29wIGlzIG5vdCBOb25lCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGV2ZW50IGxvb3AgaXMgcGFzc2VkIGV4cGxpY2l0bHkgaW4gYXN5bmNpbworICAgICAgICBldmVudHMuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgaWYgY2xlYW51cDoKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb29wLmNsb3NlKQorCisgICAgZGVmIG5ld190ZXN0X2xvb3Aoc2VsZiwgZ2VuPU5vbmUpOgorICAgICAgICBsb29wID0gVGVzdExvb3AoZ2VuKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHJldHVybiBsb29wCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGV2ZW50cy5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgICMgRGV0ZWN0IENQeXRob24gYnVnICMyMzM1MzogZW5zdXJlIHRoYXQgeWllbGQveWllbGQtZnJvbSBpcyBub3QgdXNlZAorICAgICAgICAjIGluIGFuIGV4Y2VwdCBibG9jayBvZiBhIGdlbmVyYXRvcgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpLCAoTm9uZSwgTm9uZSwgTm9uZSkpCisKKyAgICBpZiBub3QgY29tcGF0LlBZMzQ6CisgICAgICAgICMgUHl0aG9uIDMuMyBjb21wYXRpYmlsaXR5CisgICAgICAgIGRlZiBzdWJUZXN0KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBjbGFzcyBFbXB0eUNNOgorICAgICAgICAgICAgICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Yyk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBFbXB0eUNNKCkKKworCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGRpc2FibGVfbG9nZ2VyKCk6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIGRpc2FibGUgYXN5bmNpbyBsb2dnZXIuCisKKyAgICBGb3IgZXhhbXBsZSwgaXQgY2FuIGJlIHVzZWQgdG8gaWdub3JlIHdhcm5pbmdzIGluIGRlYnVnIG1vZGUuCisgICAgIiIiCisgICAgb2xkX2xldmVsID0gbG9nZ2VyLmxldmVsCisgICAgdHJ5OgorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwobG9nZ2luZy5DUklUSUNBTCsxKQorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIGxvZ2dlci5zZXRMZXZlbChvbGRfbGV2ZWwpCisKKworZGVmIG1vY2tfbm9uYmxvY2tpbmdfc29ja2V0KHByb3RvPXNvY2tldC5JUFBST1RPX1RDUCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFtaWx5PXNvY2tldC5BRl9JTkVUKToKKyAgICAiIiJDcmVhdGUgYSBtb2NrIG9mIGEgbm9uLWJsb2NraW5nIHNvY2tldC4iIiIKKyAgICBzb2NrID0gbW9jay5NYWdpY01vY2soc29ja2V0LnNvY2tldCkKKyAgICBzb2NrLnByb3RvID0gcHJvdG8KKyAgICBzb2NrLnR5cGUgPSB0eXBlCisgICAgc29jay5mYW1pbHkgPSBmYW1pbHkKKyAgICBzb2NrLmdldHRpbWVvdXQucmV0dXJuX3ZhbHVlID0gMC4wCisgICAgcmV0dXJuIHNvY2sKKworCitkZWYgZm9yY2VfbGVnYWN5X3NzbF9zdXBwb3J0KCk6CisgICAgcmV0dXJuIG1vY2sucGF0Y2goJ2FzeW5jaW8uc3NscHJvdG8uX2lzX3NzbHByb3RvX2F2YWlsYWJsZScsCisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlPUZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdHJhbnNwb3J0cy5weSBiL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2ZDkxOQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9hc3luY2lvL3RyYW5zcG9ydHMucHkKQEAgLTAsMCArMSwyOTggQEAKKyIiIkFic3RyYWN0IFRyYW5zcG9ydCBjbGFzcy4iIiIKKworZnJvbSBhc3luY2lvIGltcG9ydCBjb21wYXQKKworX19hbGxfXyA9IFsnQmFzZVRyYW5zcG9ydCcsICdSZWFkVHJhbnNwb3J0JywgJ1dyaXRlVHJhbnNwb3J0JywKKyAgICAgICAgICAgJ1RyYW5zcG9ydCcsICdEYXRhZ3JhbVRyYW5zcG9ydCcsICdTdWJwcm9jZXNzVHJhbnNwb3J0JywKKyAgICAgICAgICAgXQorCisKK2NsYXNzIEJhc2VUcmFuc3BvcnQ6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgdHJhbnNwb3J0cy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHRyYT1Ob25lKToKKyAgICAgICAgaWYgZXh0cmEgaXMgTm9uZToKKyAgICAgICAgICAgIGV4dHJhID0ge30KKyAgICAgICAgc2VsZi5fZXh0cmEgPSBleHRyYQorCisgICAgZGVmIGdldF9leHRyYV9pbmZvKHNlbGYsIG5hbWUsIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgICIiIkdldCBvcHRpb25hbCB0cmFuc3BvcnQgaW5mb3JtYXRpb24uIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9leHRyYS5nZXQobmFtZSwgZGVmYXVsdCkKKworICAgIGRlZiBpc19jbG9zaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgdHJhbnNwb3J0IGlzIGNsb3Npbmcgb3IgY2xvc2VkLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGZsdXNoZWQgYXN5bmNocm9ub3VzbHkuICBObyBtb3JlIGRhdGEKKyAgICAgICAgd2lsbCBiZSByZWNlaXZlZC4gIEFmdGVyIGFsbCBidWZmZXJlZCBkYXRhIGlzIGZsdXNoZWQsIHRoZQorICAgICAgICBwcm90b2NvbCdzIGNvbm5lY3Rpb25fbG9zdCgpIG1ldGhvZCB3aWxsIChldmVudHVhbGx5KSBjYWxsZWQKKyAgICAgICAgd2l0aCBOb25lIGFzIGl0cyBhcmd1bWVudC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworCitjbGFzcyBSZWFkVHJhbnNwb3J0KEJhc2VUcmFuc3BvcnQpOgorICAgICIiIkludGVyZmFjZSBmb3IgcmVhZC1vbmx5IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgcGF1c2VfcmVhZGluZyhzZWxmKToKKyAgICAgICAgIiIiUGF1c2UgdGhlIHJlY2VpdmluZyBlbmQuCisKKyAgICAgICAgTm8gZGF0YSB3aWxsIGJlIHBhc3NlZCB0byB0aGUgcHJvdG9jb2wncyBkYXRhX3JlY2VpdmVkKCkKKyAgICAgICAgbWV0aG9kIHVudGlsIHJlc3VtZV9yZWFkaW5nKCkgaXMgY2FsbGVkLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICAiIiJSZXN1bWUgdGhlIHJlY2VpdmluZyBlbmQuCisKKyAgICAgICAgRGF0YSByZWNlaXZlZCB3aWxsIG9uY2UgYWdhaW4gYmUgcGFzc2VkIHRvIHRoZSBwcm90b2NvbCdzCisgICAgICAgIGRhdGFfcmVjZWl2ZWQoKSBtZXRob2QuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKworY2xhc3MgV3JpdGVUcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisgICAgIiIiSW50ZXJmYWNlIGZvciB3cml0ZS1vbmx5IHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgICIiIlNldCB0aGUgaGlnaC0gYW5kIGxvdy13YXRlciBsaW1pdHMgZm9yIHdyaXRlIGZsb3cgY29udHJvbC4KKworICAgICAgICBUaGVzZSB0d28gdmFsdWVzIGNvbnRyb2wgd2hlbiB0byBjYWxsIHRoZSBwcm90b2NvbCdzCisgICAgICAgIHBhdXNlX3dyaXRpbmcoKSBhbmQgcmVzdW1lX3dyaXRpbmcoKSBtZXRob2RzLiAgSWYgc3BlY2lmaWVkLAorICAgICAgICB0aGUgbG93LXdhdGVyIGxpbWl0IG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgTmVpdGhlciB2YWx1ZSBjYW4gYmUgbmVnYXRpdmUuCisKKyAgICAgICAgVGhlIGRlZmF1bHRzIGFyZSBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYy4gIElmIG9ubHkgdGhlCisgICAgICAgIGhpZ2gtd2F0ZXIgbGltaXQgaXMgZ2l2ZW4sIHRoZSBsb3ctd2F0ZXIgbGltaXQgZGVmYXVsdHMgdG8gYW4KKyAgICAgICAgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgdmFsdWUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQorICAgICAgICBoaWdoLXdhdGVyIGxpbWl0LiAgU2V0dGluZyBoaWdoIHRvIHplcm8gZm9yY2VzIGxvdyB0byB6ZXJvIGFzCisgICAgICAgIHdlbGwsIGFuZCBjYXVzZXMgcGF1c2Vfd3JpdGluZygpIHRvIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUKKyAgICAgICAgYnVmZmVyIGJlY29tZXMgbm9uLWVtcHR5LiAgU2V0dGluZyBsb3cgdG8gemVybyBjYXVzZXMKKyAgICAgICAgcmVzdW1lX3dyaXRpbmcoKSB0byBiZSBjYWxsZWQgb25seSBvbmNlIHRoZSBidWZmZXIgaXMgZW1wdHkuCisgICAgICAgIFVzZSBvZiB6ZXJvIGZvciBlaXRoZXIgbGltaXQgaXMgZ2VuZXJhbGx5IHN1Yi1vcHRpbWFsIGFzIGl0CisgICAgICAgIHJlZHVjZXMgb3Bwb3J0dW5pdGllcyBmb3IgZG9pbmcgSS9PIGFuZCBjb21wdXRhdGlvbgorICAgICAgICBjb25jdXJyZW50bHkuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyLiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIldyaXRlIHNvbWUgZGF0YSBieXRlcyB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpc3Rfb2ZfZGF0YSk6CisgICAgICAgICIiIldyaXRlIGEgbGlzdCAob3IgYW55IGl0ZXJhYmxlKSBvZiBkYXRhIGJ5dGVzIHRvIHRoZSB0cmFuc3BvcnQuCisKKyAgICAgICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gY29uY2F0ZW5hdGVzIHRoZSBhcmd1bWVudHMgYW5kCisgICAgICAgIGNhbGxzIHdyaXRlKCkgb24gdGhlIHJlc3VsdC4KKyAgICAgICAgIiIiCisgICAgICAgIGRhdGEgPSBjb21wYXQuZmxhdHRlbl9saXN0X2J5dGVzKGxpc3Rfb2ZfZGF0YSkKKyAgICAgICAgc2VsZi53cml0ZShkYXRhKQorCisgICAgZGVmIHdyaXRlX2VvZihzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHdyaXRlIGVuZCBhZnRlciBmbHVzaGluZyBidWZmZXJlZCBkYXRhLgorCisgICAgICAgIChUaGlzIGlzIGxpa2UgdHlwaW5nIF5EIGludG8gYSBVTklYIHByb2dyYW0gcmVhZGluZyBmcm9tIHN0ZGluLikKKworICAgICAgICBEYXRhIG1heSBzdGlsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGlzIHRyYW5zcG9ydCBzdXBwb3J0cyB3cml0ZV9lb2YoKSwgRmFsc2UgaWYgbm90LiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgVGhlIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGJlCisgICAgICAgIGNhbGxlZCB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFRyYW5zcG9ydChSZWFkVHJhbnNwb3J0LCBXcml0ZVRyYW5zcG9ydCk6CisgICAgIiIiSW50ZXJmYWNlIHJlcHJlc2VudGluZyBhIGJpZGlyZWN0aW9uYWwgdHJhbnNwb3J0LgorCisgICAgVGhlcmUgbWF5IGJlIHNldmVyYWwgaW1wbGVtZW50YXRpb25zLCBidXQgdHlwaWNhbGx5LCB0aGUgdXNlciBkb2VzCisgICAgbm90IGltcGxlbWVudCBuZXcgdHJhbnNwb3J0czsgcmF0aGVyLCB0aGUgcGxhdGZvcm0gcHJvdmlkZXMgc29tZQorICAgIHVzZWZ1bCB0cmFuc3BvcnRzIHRoYXQgYXJlIGltcGxlbWVudGVkIHVzaW5nIHRoZSBwbGF0Zm9ybSdzIGJlc3QKKyAgICBwcmFjdGljZXMuCisKKyAgICBUaGUgdXNlciBuZXZlciBpbnN0YW50aWF0ZXMgYSB0cmFuc3BvcnQgZGlyZWN0bHk7IHRoZXkgY2FsbCBhCisgICAgdXRpbGl0eSBmdW5jdGlvbiwgcGFzc2luZyBpdCBhIHByb3RvY29sIGZhY3RvcnkgYW5kIG90aGVyCisgICAgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGNyZWF0ZSB0aGUgdHJhbnNwb3J0IGFuZCBwcm90b2NvbC4gIChFLmcuCisgICAgRXZlbnRMb29wLmNyZWF0ZV9jb25uZWN0aW9uKCkgb3IgRXZlbnRMb29wLmNyZWF0ZV9zZXJ2ZXIoKS4pCisKKyAgICBUaGUgdXRpbGl0eSBmdW5jdGlvbiB3aWxsIGFzeW5jaHJvbm91c2x5IGNyZWF0ZSBhIHRyYW5zcG9ydCBhbmQgYQorICAgIHByb3RvY29sIGFuZCBob29rIHRoZW0gdXAgYnkgY2FsbGluZyB0aGUgcHJvdG9jb2wncworICAgIGNvbm5lY3Rpb25fbWFkZSgpIG1ldGhvZCwgcGFzc2luZyBpdCB0aGUgdHJhbnNwb3J0LgorCisgICAgVGhlIGltcGxlbWVudGF0aW9uIGhlcmUgcmFpc2VzIE5vdEltcGxlbWVudGVkIGZvciBldmVyeSBtZXRob2QKKyAgICBleGNlcHQgd3JpdGVsaW5lcygpLCB3aGljaCBjYWxscyB3cml0ZSgpIGluIGEgbG9vcC4KKyAgICAiIiIKKworCitjbGFzcyBEYXRhZ3JhbVRyYW5zcG9ydChCYXNlVHJhbnNwb3J0KToKKyAgICAiIiJJbnRlcmZhY2UgZm9yIGRhdGFncmFtIChVRFApIHRyYW5zcG9ydHMuIiIiCisKKyAgICBkZWYgc2VuZHRvKHNlbGYsIGRhdGEsIGFkZHI9Tm9uZSk6CisgICAgICAgICIiIlNlbmQgZGF0YSB0byB0aGUgdHJhbnNwb3J0LgorCisgICAgICAgIFRoaXMgZG9lcyBub3QgYmxvY2s7IGl0IGJ1ZmZlcnMgdGhlIGRhdGEgYW5kIGFycmFuZ2VzIGZvciBpdAorICAgICAgICB0byBiZSBzZW50IG91dCBhc3luY2hyb25vdXNseS4KKyAgICAgICAgYWRkciBpcyB0YXJnZXQgc29ja2V0IGFkZHJlc3MuCisgICAgICAgIElmIGFkZHIgaXMgTm9uZSB1c2UgdGFyZ2V0IGFkZHJlc3MgcG9pbnRlZCBvbiB0cmFuc3BvcnQgY3JlYXRpb24uCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgYWJvcnQoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB0cmFuc3BvcnQgaW1tZWRpYXRlbHkuCisKKyAgICAgICAgQnVmZmVyZWQgZGF0YSB3aWxsIGJlIGxvc3QuICBObyBtb3JlIGRhdGEgd2lsbCBiZSByZWNlaXZlZC4KKyAgICAgICAgVGhlIHByb3RvY29sJ3MgY29ubmVjdGlvbl9sb3N0KCkgbWV0aG9kIHdpbGwgKGV2ZW50dWFsbHkpIGJlCisgICAgICAgIGNhbGxlZCB3aXRoIE5vbmUgYXMgaXRzIGFyZ3VtZW50LgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIFN1YnByb2Nlc3NUcmFuc3BvcnQoQmFzZVRyYW5zcG9ydCk6CisKKyAgICBkZWYgZ2V0X3BpZChzZWxmKToKKyAgICAgICAgIiIiR2V0IHN1YnByb2Nlc3MgaWQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBnZXRfcmV0dXJuY29kZShzZWxmKToKKyAgICAgICAgIiIiR2V0IHN1YnByb2Nlc3MgcmV0dXJuY29kZS4KKworICAgICAgICBTZWUgYWxzbworICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4ucmV0dXJuY29kZQorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIGdldF9waXBlX3RyYW5zcG9ydChzZWxmLCBmZCk6CisgICAgICAgICIiIkdldCB0cmFuc3BvcnQgZm9yIHBpcGUgd2l0aCBudW1iZXIgZmQuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBzZW5kX3NpZ25hbChzZWxmLCBzaWduYWwpOgorICAgICAgICAiIiJTZW5kIHNpZ25hbCB0byBzdWJwcm9jZXNzLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBkb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi5zZW5kX3NpZ25hbAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKKyAgICAgICAgIiIiU3RvcCB0aGUgc3VicHJvY2Vzcy4KKworICAgICAgICBBbGlhcyBmb3IgY2xvc2UoKSBtZXRob2QuCisKKyAgICAgICAgT24gUG9zaXggT1NzIHRoZSBtZXRob2Qgc2VuZHMgU0lHVEVSTSB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgICAgT24gV2luZG93cyB0aGUgV2luMzIgQVBJIGZ1bmN0aW9uIFRlcm1pbmF0ZVByb2Nlc3MoKQorICAgICAgICAgaXMgY2FsbGVkIHRvIHN0b3AgdGhlIHN1YnByb2Nlc3MuCisKKyAgICAgICAgU2VlIGFsc286CisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L3N1YnByb2Nlc3Mjc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBraWxsKHNlbGYpOgorICAgICAgICAiIiJLaWxsIHRoZSBzdWJwcm9jZXNzLgorCisgICAgICAgIE9uIFBvc2l4IE9TcyB0aGUgZnVuY3Rpb24gc2VuZHMgU0lHS0lMTCB0byB0aGUgc3VicHJvY2Vzcy4KKyAgICAgICAgT24gV2luZG93cyBraWxsKCkgaXMgYW4gYWxpYXMgZm9yIHRlcm1pbmF0ZSgpLgorCisgICAgICAgIFNlZSBhbHNvOgorICAgICAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMvbGlicmFyeS9zdWJwcm9jZXNzI3N1YnByb2Nlc3MuUG9wZW4ua2lsbAorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorCisKK2NsYXNzIF9GbG93Q29udHJvbE1peGluKFRyYW5zcG9ydCk6CisgICAgIiIiQWxsIHRoZSBsb2dpYyBmb3IgKHdyaXRlKSBmbG93IGNvbnRyb2wgaW4gYSBtaXgtaW4gYmFzZSBjbGFzcy4KKworICAgIFRoZSBzdWJjbGFzcyBtdXN0IGltcGxlbWVudCBnZXRfd3JpdGVfYnVmZmVyX3NpemUoKS4gIEl0IG11c3QgY2FsbAorICAgIF9tYXliZV9wYXVzZV9wcm90b2NvbCgpIHdoZW5ldmVyIHRoZSB3cml0ZSBidWZmZXIgc2l6ZSBpbmNyZWFzZXMsCisgICAgYW5kIF9tYXliZV9yZXN1bWVfcHJvdG9jb2woKSB3aGVuZXZlciBpdCBkZWNyZWFzZXMuICBJdCBtYXkgYWxzbworICAgIG92ZXJyaWRlIHNldF93cml0ZV9idWZmZXJfbGltaXRzKCkgKGUuZy4gdG8gc3BlY2lmeSBkaWZmZXJlbnQKKyAgICBkZWZhdWx0cykuCisKKyAgICBUaGUgc3ViY2xhc3MgY29uc3RydWN0b3IgbXVzdCBjYWxsIHN1cGVyKCkuX19pbml0X18oZXh0cmEpLiAgVGhpcworICAgIHdpbGwgY2FsbCBzZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpLgorCisgICAgVGhlIHVzZXIgbWF5IGNhbGwgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoKSBhbmQKKyAgICBnZXRfd3JpdGVfYnVmZmVyX3NpemUoKSwgYW5kIHRoZWlyIHByb3RvY29sJ3MgcGF1c2Vfd3JpdGluZygpIGFuZAorICAgIHJlc3VtZV93cml0aW5nKCkgbWF5IGJlIGNhbGxlZC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHRyYT1Ob25lLCBsb29wPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhKQorICAgICAgICBhc3NlcnQgbG9vcCBpcyBub3QgTm9uZQorICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBzZWxmLl9wcm90b2NvbF9wYXVzZWQgPSBGYWxzZQorICAgICAgICBzZWxmLl9zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpCisKKyAgICBkZWYgX21heWJlX3BhdXNlX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBzaXplID0gc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKQorICAgICAgICBpZiBzaXplIDw9IHNlbGYuX2hpZ2hfd2F0ZXI6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgbm90IHNlbGYuX3Byb3RvY29sX3BhdXNlZDoKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sX3BhdXNlZCA9IFRydWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5wYXVzZV93cml0aW5nKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ3Byb3RvY29sLnBhdXNlX3dyaXRpbmcoKSBmYWlsZWQnLAorICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICAgICAndHJhbnNwb3J0Jzogc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgJ3Byb3RvY29sJzogc2VsZi5fcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgfSkKKworICAgIGRlZiBfbWF5YmVfcmVzdW1lX3Byb3RvY29sKHNlbGYpOgorICAgICAgICBpZiAoc2VsZi5fcHJvdG9jb2xfcGF1c2VkIGFuZAorICAgICAgICAgICAgc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSA8PSBzZWxmLl9sb3dfd2F0ZXIpOgorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2xfcGF1c2VkID0gRmFsc2UKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5yZXN1bWVfd3JpdGluZygpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdwcm90b2NvbC5yZXN1bWVfd3JpdGluZygpIGZhaWxlZCcsCisgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgICAgICd0cmFuc3BvcnQnOiBzZWxmLAorICAgICAgICAgICAgICAgICAgICAncHJvdG9jb2wnOiBzZWxmLl9wcm90b2NvbCwKKyAgICAgICAgICAgICAgICB9KQorCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfbGltaXRzKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2xvd193YXRlciwgc2VsZi5faGlnaF93YXRlcikKKworICAgIGRlZiBfc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgIGlmIGhpZ2ggaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGxvdyBpcyBOb25lOgorICAgICAgICAgICAgICAgIGhpZ2ggPSA2NCoxMDI0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGhpZ2ggPSA0KmxvdworICAgICAgICBpZiBsb3cgaXMgTm9uZToKKyAgICAgICAgICAgIGxvdyA9IGhpZ2ggLy8gNAorICAgICAgICBpZiBub3QgaGlnaCA+PSBsb3cgPj0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2hpZ2ggKCVyKSBtdXN0IGJlID49IGxvdyAoJXIpIG11c3QgYmUgPj0gMCcgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlnaCwgbG93KSkKKyAgICAgICAgc2VsZi5faGlnaF93YXRlciA9IGhpZ2gKKyAgICAgICAgc2VsZi5fbG93X3dhdGVyID0gbG93CisKKyAgICBkZWYgc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoc2VsZiwgaGlnaD1Ob25lLCBsb3c9Tm9uZSk6CisgICAgICAgIHNlbGYuX3NldF93cml0ZV9idWZmZXJfbGltaXRzKGhpZ2g9aGlnaCwgbG93PWxvdykKKyAgICAgICAgc2VsZi5fbWF5YmVfcGF1c2VfcHJvdG9jb2woKQorCisgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkgYi9MaWIvYXN5bmNpby91bml4X2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzQ3ZmY0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vdW5peF9ldmVudHMucHkKQEAgLTAsMCArMSwxMDA3IEBACisiIiJTZWxlY3RvciBldmVudCBsb29wIGZvciBVbml4IHdpdGggc2lnbmFsIGhhbmRsaW5nLiIiIgorCitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgd2FybmluZ3MKKworCitmcm9tIC4gaW1wb3J0IGJhc2VfZXZlbnRzCitmcm9tIC4gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSAuIGltcG9ydCBjb21wYXQKK2Zyb20gLiBpbXBvcnQgY29uc3RhbnRzCitmcm9tIC4gaW1wb3J0IGNvcm91dGluZXMKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGZ1dHVyZXMKK2Zyb20gLiBpbXBvcnQgc2VsZWN0b3JfZXZlbnRzCitmcm9tIC4gaW1wb3J0IHNlbGVjdG9ycworZnJvbSAuIGltcG9ydCB0cmFuc3BvcnRzCitmcm9tIC5jb3JvdXRpbmVzIGltcG9ydCBjb3JvdXRpbmUKK2Zyb20gLmxvZyBpbXBvcnQgbG9nZ2VyCisKKworX19hbGxfXyA9IFsnU2VsZWN0b3JFdmVudExvb3AnLAorICAgICAgICAgICAnQWJzdHJhY3RDaGlsZFdhdGNoZXInLCAnU2FmZUNoaWxkV2F0Y2hlcicsCisgICAgICAgICAgICdGYXN0Q2hpbGRXYXRjaGVyJywgJ0RlZmF1bHRFdmVudExvb3BQb2xpY3knLAorICAgICAgICAgICBdCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ1NpZ25hbHMgYXJlIG5vdCByZWFsbHkgc3VwcG9ydGVkIG9uIFdpbmRvd3MnKQorCisKK2RlZiBfc2lnaGFuZGxlcl9ub29wKHNpZ251bSwgZnJhbWUpOgorICAgICIiIkR1bW15IHNpZ25hbCBoYW5kbGVyLiIiIgorICAgIHBhc3MKKworCitjbGFzcyBfVW5peFNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICIiIlVuaXggZXZlbnQgbG9vcC4KKworICAgIEFkZHMgc2lnbmFsIGhhbmRsaW5nIGFuZCBVTklYIERvbWFpbiBTb2NrZXQgc3VwcG9ydCB0byBTZWxlY3RvckV2ZW50TG9vcC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZWxlY3Rvcj1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhzZWxlY3RvcikKKyAgICAgICAgc2VsZi5fc2lnbmFsX2hhbmRsZXJzID0ge30KKworICAgIGRlZiBfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXRwYWlyKCkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgc3VwZXIoKS5jbG9zZSgpCisgICAgICAgIGZvciBzaWcgaW4gbGlzdChzZWxmLl9zaWduYWxfaGFuZGxlcnMpOgorICAgICAgICAgICAgc2VsZi5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnKQorCisgICAgZGVmIF9wcm9jZXNzX3NlbGZfZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgZm9yIHNpZ251bSBpbiBkYXRhOgorICAgICAgICAgICAgaWYgbm90IHNpZ251bToKKyAgICAgICAgICAgICAgICAjIGlnbm9yZSBudWxsIGJ5dGVzIHdyaXR0ZW4gYnkgX3dyaXRlX3RvX3NlbGYoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzZWxmLl9oYW5kbGVfc2lnbmFsKHNpZ251bSkKKworICAgIGRlZiBhZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJBZGQgYSBoYW5kbGVyIGZvciBhIHNpZ25hbC4gIFVOSVggb25seS4KKworICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICAgICAgIFJhaXNlIFJ1bnRpbWVFcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIChjb3JvdXRpbmVzLmlzY29yb3V0aW5lKGNhbGxiYWNrKQorICAgICAgICBvciBjb3JvdXRpbmVzLmlzY29yb3V0aW5lZnVuY3Rpb24oY2FsbGJhY2spKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggYWRkX3NpZ25hbF9oYW5kbGVyKCkiKQorICAgICAgICBzZWxmLl9jaGVja19zaWduYWwoc2lnKQorICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHNldF93YWtldXBfZmQoKSByYWlzZXMgVmFsdWVFcnJvciBpZiB0aGlzIGlzIG5vdCB0aGUKKyAgICAgICAgICAgICMgbWFpbiB0aHJlYWQuICBCeSBjYWxsaW5nIGl0IGVhcmx5IHdlIGVuc3VyZSB0aGF0IGFuCisgICAgICAgICAgICAjIGV2ZW50IGxvb3AgcnVubmluZyBpbiBhbm90aGVyIHRocmVhZCBjYW5ub3QgYWRkIGEgc2lnbmFsCisgICAgICAgICAgICAjIGhhbmRsZXIuCisgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZChzZWxmLl9jc29jay5maWxlbm8oKSkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKSBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3Ioc3RyKGV4YykpCisKKyAgICAgICAgaGFuZGxlID0gZXZlbnRzLkhhbmRsZShjYWxsYmFjaywgYXJncywgc2VsZikKKyAgICAgICAgc2VsZi5fc2lnbmFsX2hhbmRsZXJzW3NpZ10gPSBoYW5kbGUKKworICAgICAgICB0cnk6CisgICAgICAgICAgICAjIFJlZ2lzdGVyIGEgZHVtbXkgc2lnbmFsIGhhbmRsZXIgdG8gYXNrIFB5dGhvbiB0byB3cml0ZSB0aGUgc2lnbmFsCisgICAgICAgICAgICAjIG51bWJlciBpbiB0aGUgd2FrdXAgZmlsZSBkZXNjcmlwdG9yLiBfcHJvY2Vzc19zZWxmX2RhdGEoKSB3aWxsCisgICAgICAgICAgICAjIHJlYWQgc2lnbmFsIG51bWJlcnMgZnJvbSB0aGlzIGZpbGUgZGVzY3JpcHRvciB0byBoYW5kbGUgc2lnbmFscy4KKyAgICAgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnLCBfc2lnaGFuZGxlcl9ub29wKQorCisgICAgICAgICAgICAjIFNldCBTQV9SRVNUQVJUIHRvIGxpbWl0IEVJTlRSIG9jY3VycmVuY2VzLgorICAgICAgICAgICAgc2lnbmFsLnNpZ2ludGVycnVwdChzaWcsIEZhbHNlKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBkZWwgc2VsZi5fc2lnbmFsX2hhbmRsZXJzW3NpZ10KKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9zaWduYWxfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzaWduYWwuc2V0X3dha2V1cF9mZCgtMSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IpIGFzIG5leGM6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCdzZXRfd2FrZXVwX2ZkKC0xKSBmYWlsZWQ6ICVzJywgbmV4YykKKworICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3NpZyB7fSBjYW5ub3QgYmUgY2F1Z2h0Jy5mb3JtYXQoc2lnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgIGRlZiBfaGFuZGxlX3NpZ25hbChzZWxmLCBzaWcpOgorICAgICAgICAiIiJJbnRlcm5hbCBoZWxwZXIgdGhhdCBpcyB0aGUgYWN0dWFsIHNpZ25hbCBoYW5kbGVyLiIiIgorICAgICAgICBoYW5kbGUgPSBzZWxmLl9zaWduYWxfaGFuZGxlcnMuZ2V0KHNpZykKKyAgICAgICAgaWYgaGFuZGxlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gICMgQXNzdW1lIGl0J3Mgc29tZSByYWNlIGNvbmRpdGlvbi4KKyAgICAgICAgaWYgaGFuZGxlLl9jYW5jZWxsZWQ6CisgICAgICAgICAgICBzZWxmLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWcpICAjIFJlbW92ZSBpdCBwcm9wZXJseS4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2FkZF9jYWxsYmFja19zaWduYWxzYWZlKGhhbmRsZSkKKworICAgIGRlZiByZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2VsZiwgc2lnKToKKyAgICAgICAgIiIiUmVtb3ZlIGEgaGFuZGxlciBmb3IgYSBzaWduYWwuICBVTklYIG9ubHkuCisKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgYSBzaWduYWwgaGFuZGxlciB3YXMgcmVtb3ZlZCwgRmFsc2UgaWYgbm90LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fY2hlY2tfc2lnbmFsKHNpZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuX3NpZ25hbF9oYW5kbGVyc1tzaWddCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGlmIHNpZyA9PSBzaWduYWwuU0lHSU5UOgorICAgICAgICAgICAgaGFuZGxlciA9IHNpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBoYW5kbGVyID0gc2lnbmFsLlNJR19ERkwKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBzaWduYWwuc2lnbmFsKHNpZywgaGFuZGxlcikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVJTlZBTDoKKyAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3NpZyB7fSBjYW5ub3QgYmUgY2F1Z2h0Jy5mb3JtYXQoc2lnKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBpZiBub3Qgc2VsZi5fc2lnbmFsX2hhbmRsZXJzOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNpZ25hbC5zZXRfd2FrZXVwX2ZkKC0xKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKSBhcyBleGM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oJ3NldF93YWtldXBfZmQoLTEpIGZhaWxlZDogJXMnLCBleGMpCisKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfY2hlY2tfc2lnbmFsKHNlbGYsIHNpZyk6CisgICAgICAgICIiIkludGVybmFsIGhlbHBlciB0byB2YWxpZGF0ZSBhIHNpZ25hbC4KKworICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSBzaWduYWwgbnVtYmVyIGlzIGludmFsaWQgb3IgdW5jYXRjaGFibGUuCisgICAgICAgIFJhaXNlIFJ1bnRpbWVFcnJvciBpZiB0aGVyZSBpcyBhIHByb2JsZW0gc2V0dGluZyB1cCB0aGUgaGFuZGxlci4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNpZywgaW50KToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignc2lnIG11c3QgYmUgYW4gaW50LCBub3QgeyFyfScuZm9ybWF0KHNpZykpCisKKyAgICAgICAgaWYgbm90ICgxIDw9IHNpZyA8IHNpZ25hbC5OU0lHKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgJ3NpZyB7fSBvdXQgb2YgcmFuZ2UoMSwge30pJy5mb3JtYXQoc2lnLCBzaWduYWwuTlNJRykpCisKKyAgICBkZWYgX21ha2VfcmVhZF9waXBlX3RyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfVW5peFJlYWRQaXBlVHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXIsIGV4dHJhKQorCisgICAgZGVmIF9tYWtlX3dyaXRlX3BpcGVfdHJhbnNwb3J0KHNlbGYsIHBpcGUsIHByb3RvY29sLCB3YWl0ZXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9Tm9uZSk6CisgICAgICAgIHJldHVybiBfVW5peFdyaXRlUGlwZVRyYW5zcG9ydChzZWxmLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyLCBleHRyYSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgX21ha2Vfc3VicHJvY2Vzc190cmFuc3BvcnQoc2VsZiwgcHJvdG9jb2wsIGFyZ3MsIHNoZWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBldmVudHMuZ2V0X2NoaWxkX3dhdGNoZXIoKSBhcyB3YXRjaGVyOgorICAgICAgICAgICAgd2FpdGVyID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmKQorICAgICAgICAgICAgdHJhbnNwID0gX1VuaXhTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyPXdhaXRlciwgZXh0cmE9ZXh0cmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisKKyAgICAgICAgICAgIHdhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIodHJhbnNwLmdldF9waWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hpbGRfd2F0Y2hlcl9jYWxsYmFjaywgdHJhbnNwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAjIFdvcmthcm91bmQgQ1B5dGhvbiBidWcgIzIzMzUzOiB1c2luZyB5aWVsZC95aWVsZC1mcm9tIGluIGFuCisgICAgICAgICAgICAgICAgIyBleGNlcHQgYmxvY2sgb2YgYSBnZW5lcmF0b3IgZG9lc24ndCBjbGVhciBwcm9wZXJseQorICAgICAgICAgICAgICAgICMgc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBlcnIgPSBleGMKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXJyID0gTm9uZQorCisgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHRyYW5zcC5fd2FpdCgpCisgICAgICAgICAgICAgICAgcmFpc2UgZXJyCisKKyAgICAgICAgcmV0dXJuIHRyYW5zcAorCisgICAgZGVmIF9jaGlsZF93YXRjaGVyX2NhbGxiYWNrKHNlbGYsIHBpZCwgcmV0dXJuY29kZSwgdHJhbnNwKToKKyAgICAgICAgc2VsZi5jYWxsX3Nvb25fdGhyZWFkc2FmZSh0cmFuc3AuX3Byb2Nlc3NfZXhpdGVkLCByZXR1cm5jb2RlKQorCisgICAgQGNvcm91dGluZQorICAgIGRlZiBjcmVhdGVfdW5peF9jb25uZWN0aW9uKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIHBhdGgsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPU5vbmUsIHNvY2s9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9Tm9uZSk6CisgICAgICAgIGFzc2VydCBzZXJ2ZXJfaG9zdG5hbWUgaXMgTm9uZSBvciBpc2luc3RhbmNlKHNlcnZlcl9ob3N0bmFtZSwgc3RyKQorICAgICAgICBpZiBzc2w6CisgICAgICAgICAgICBpZiBzZXJ2ZXJfaG9zdG5hbWUgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAneW91IGhhdmUgdG8gcGFzcyBzZXJ2ZXJfaG9zdG5hbWUgd2hlbiB1c2luZyBzc2wnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VydmVyX2hvc3RuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NlcnZlcl9ob3N0bmFtZSBpcyBvbmx5IG1lYW5pbmdmdWwgd2l0aCBzc2wnKQorCisgICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBzb2NrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICdwYXRoIGFuZCBzb2NrIGNhbiBub3QgYmUgc3BlY2lmaWVkIGF0IHRoZSBzYW1lIHRpbWUnKQorCisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNLCAwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLnNvY2tfY29ubmVjdChzb2NrLCBwYXRoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNvY2sgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdubyBwYXRoIGFuZCBzb2NrIHdlcmUgc3BlY2lmaWVkJykKKyAgICAgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisKKyAgICAgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHlpZWxkIGZyb20gc2VsZi5fY3JlYXRlX2Nvbm5lY3Rpb25fdHJhbnNwb3J0KAorICAgICAgICAgICAgc29jaywgcHJvdG9jb2xfZmFjdG9yeSwgc3NsLCBzZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQsIHByb3RvY29sCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIGNyZWF0ZV91bml4X3NlcnZlcihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBwYXRoPU5vbmUsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrPU5vbmUsIGJhY2tsb2c9MTAwLCBzc2w9Tm9uZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3NsLCBib29sKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignc3NsIGFyZ3VtZW50IG11c3QgYmUgYW4gU1NMQ29udGV4dCBvciBOb25lJykKKworICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAncGF0aCBhbmQgc29jayBjYW4gbm90IGJlIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lJykKKworICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2suYmluZChwYXRoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIGlmIGV4Yy5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgorICAgICAgICAgICAgICAgICAgICAjIExldCdzIGltcHJvdmUgdGhlIGVycm9yIG1lc3NhZ2UgYnkgYWRkaW5nCisgICAgICAgICAgICAgICAgICAgICMgd2l0aCB3aGF0IGV4YWN0IGFkZHJlc3MgaXQgb2NjdXJzLgorICAgICAgICAgICAgICAgICAgICBtc2cgPSAnQWRkcmVzcyB7IXJ9IGlzIGFscmVhZHkgaW4gdXNlJy5mb3JtYXQocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQUREUklOVVNFLCBtc2cpIGZyb20gTm9uZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNvY2sgaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAgICAncGF0aCB3YXMgbm90IHNwZWNpZmllZCwgYW5kIG5vIHNvY2sgc3BlY2lmaWVkJykKKworICAgICAgICAgICAgaWYgc29jay5mYW1pbHkgIT0gc29ja2V0LkFGX1VOSVg6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgJ0EgVU5JWCBEb21haW4gU29ja2V0IHdhcyBleHBlY3RlZCwgZ290IHshcn0nLmZvcm1hdChzb2NrKSkKKworICAgICAgICBzZXJ2ZXIgPSBiYXNlX2V2ZW50cy5TZXJ2ZXIoc2VsZiwgW3NvY2tdKQorICAgICAgICBzb2NrLmxpc3RlbihiYWNrbG9nKQorICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICBzZWxmLl9zdGFydF9zZXJ2aW5nKHByb3RvY29sX2ZhY3RvcnksIHNvY2ssIHNzbCwgc2VydmVyKQorICAgICAgICByZXR1cm4gc2VydmVyCisKKworaWYgaGFzYXR0cihvcywgJ3NldF9ibG9ja2luZycpOgorICAgIGRlZiBfc2V0X25vbmJsb2NraW5nKGZkKToKKyAgICAgICAgb3Muc2V0X2Jsb2NraW5nKGZkLCBGYWxzZSkKK2Vsc2U6CisgICAgaW1wb3J0IGZjbnRsCisKKyAgICBkZWYgX3NldF9ub25ibG9ja2luZyhmZCk6CisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkwpCisgICAgICAgIGZsYWdzID0gZmxhZ3MgfCBvcy5PX05PTkJMT0NLCisgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZMLCBmbGFncykKKworCitjbGFzcyBfVW5peFJlYWRQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuUmVhZFRyYW5zcG9ydCk6CisKKyAgICBtYXhfc2l6ZSA9IDI1NiAqIDEwMjQgICMgbWF4IGJ5dGVzIHdlIHJlYWQgaW4gb25lIGV2ZW50IGxvb3AgaXRlcmF0aW9uCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcGlwZSwgcHJvdG9jb2wsIHdhaXRlcj1Ob25lLCBleHRyYT1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhleHRyYSkKKyAgICAgICAgc2VsZi5fZXh0cmFbJ3BpcGUnXSA9IHBpcGUKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKyAgICAgICAgc2VsZi5fcGlwZSA9IHBpcGUKKyAgICAgICAgc2VsZi5fZmlsZW5vID0gcGlwZS5maWxlbm8oKQorICAgICAgICBtb2RlID0gb3MuZnN0YXQoc2VsZi5fZmlsZW5vKS5zdF9tb2RlCisgICAgICAgIGlmIG5vdCAoc3RhdC5TX0lTRklGTyhtb2RlKSBvcgorICAgICAgICAgICAgICAgIHN0YXQuU19JU1NPQ0sobW9kZSkgb3IKKyAgICAgICAgICAgICAgICBzdGF0LlNfSVNDSFIobW9kZSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGlwZSB0cmFuc3BvcnQgaXMgZm9yIHBpcGVzL3NvY2tldHMgb25seS4iKQorICAgICAgICBfc2V0X25vbmJsb2NraW5nKHNlbGYuX2ZpbGVubykKKyAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBwcm90b2NvbAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorICAgICAgICAjIG9ubHkgc3RhcnQgcmVhZGluZyB3aGVuIGNvbm5lY3Rpb25fbWFkZSgpIGhhcyBiZWVuIGNhbGxlZAorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9sb29wLmFkZF9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKyAgICAgICAgaWYgd2FpdGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBvbmx5IHdha2UgdXAgdGhlIHdhaXRlciB3aGVuIGNvbm5lY3Rpb25fbWFkZSgpIGhhcyBiZWVuIGNhbGxlZAorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oZnV0dXJlcy5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyLCBOb25lKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBpbmZvID0gW3NlbGYuX19jbGFzc19fLl9fbmFtZV9fXQorICAgICAgICBpZiBzZWxmLl9waXBlIGlzIE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2VkJykKKyAgICAgICAgZWxpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2Nsb3NpbmcnKQorICAgICAgICBpbmZvLmFwcGVuZCgnZmQ9JXMnICUgc2VsZi5fZmlsZW5vKQorICAgICAgICBpZiBzZWxmLl9waXBlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcG9sbGluZyA9IHNlbGVjdG9yX2V2ZW50cy5fdGVzdF9zZWxlY3Rvcl9ldmVudCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5fc2VsZWN0b3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVubywgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBpZiBwb2xsaW5nOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdwb2xsaW5nJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2lkbGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2Nsb3NlZCcpCisgICAgICAgIHJldHVybiAnPCVzPicgJSAnICcuam9pbihpbmZvKQorCisgICAgZGVmIF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkYXRhID0gb3MucmVhZChzZWxmLl9maWxlbm8sIHNlbGYubWF4X3NpemUpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgc2VsZi5fZmF0YWxfZXJyb3IoZXhjLCAnRmF0YWwgcmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmRhdGFfcmVjZWl2ZWQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmluZm8oIiVyIHdhcyBjbG9zZWQgYnkgcGVlciIsIHNlbGYpCisgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX3Byb3RvY29sLmVvZl9yZWNlaXZlZCkKKyAgICAgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgTm9uZSkKKworICAgIGRlZiBwYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorCisgICAgZGVmIHJlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBzZWxmLl9sb29wLmFkZF9yZWFkZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl9yZWFkX3JlYWR5KQorCisgICAgZGVmIGlzX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9jbG9zaW5nCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgc2VsZi5fY2xvc2UoTm9uZSkKKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5fcGlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCB0cmFuc3BvcnQgJXIiICUgc2VsZiwgUmVzb3VyY2VXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMsIG1lc3NhZ2U9J0ZhdGFsIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0Jyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGlmIChpc2luc3RhbmNlKGV4YywgT1NFcnJvcikgYW5kIGV4Yy5lcnJubyA9PSBlcnJuby5FSU8pOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyOiAlcyIsIHNlbGYsIG1lc3NhZ2UsIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICd0cmFuc3BvcnQnOiBzZWxmLAorICAgICAgICAgICAgICAgICdwcm90b2NvbCc6IHNlbGYuX3Byb3RvY29sLAorICAgICAgICAgICAgfSkKKyAgICAgICAgc2VsZi5fY2xvc2UoZXhjKQorCisgICAgZGVmIF9jbG9zZShzZWxmLCBleGMpOgorICAgICAgICBzZWxmLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihzZWxmLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdCwgZXhjKQorCisgICAgZGVmIF9jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoZXhjKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fcGlwZS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcHJvdG9jb2wgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9sb29wID0gTm9uZQorCisKK2NsYXNzIF9Vbml4V3JpdGVQaXBlVHJhbnNwb3J0KHRyYW5zcG9ydHMuX0Zsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnRzLldyaXRlVHJhbnNwb3J0KToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb29wLCBwaXBlLCBwcm90b2NvbCwgd2FpdGVyPU5vbmUsIGV4dHJhPU5vbmUpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKGV4dHJhLCBsb29wKQorICAgICAgICBzZWxmLl9leHRyYVsncGlwZSddID0gcGlwZQorICAgICAgICBzZWxmLl9waXBlID0gcGlwZQorICAgICAgICBzZWxmLl9maWxlbm8gPSBwaXBlLmZpbGVubygpCisgICAgICAgIG1vZGUgPSBvcy5mc3RhdChzZWxmLl9maWxlbm8pLnN0X21vZGUKKyAgICAgICAgaXNfc29ja2V0ID0gc3RhdC5TX0lTU09DSyhtb2RlKQorICAgICAgICBpZiBub3QgKGlzX3NvY2tldCBvcgorICAgICAgICAgICAgICAgIHN0YXQuU19JU0ZJRk8obW9kZSkgb3IKKyAgICAgICAgICAgICAgICBzdGF0LlNfSVNDSFIobW9kZSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiUGlwZSB0cmFuc3BvcnQgaXMgb25seSBmb3IgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlwZXMsIHNvY2tldHMgYW5kIGNoYXJhY3RlciBkZXZpY2VzIikKKyAgICAgICAgX3NldF9ub25ibG9ja2luZyhzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX3Byb3RvY29sID0gcHJvdG9jb2wKKyAgICAgICAgc2VsZi5fYnVmZmVyID0gW10KKyAgICAgICAgc2VsZi5fY29ubl9sb3N0ID0gMAorICAgICAgICBzZWxmLl9jbG9zaW5nID0gRmFsc2UgICMgU2V0IHdoZW4gY2xvc2UoKSBvciB3cml0ZV9lb2YoKSBjYWxsZWQuCisKKyAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLCBzZWxmKQorCisgICAgICAgICMgT24gQUlYLCB0aGUgcmVhZGVyIHRyaWNrICh0byBiZSBub3RpZmllZCB3aGVuIHRoZSByZWFkIGVuZCBvZiB0aGUKKyAgICAgICAgIyBzb2NrZXQgaXMgY2xvc2VkKSBvbmx5IHdvcmtzIGZvciBzb2NrZXRzLiBPbiBvdGhlciBwbGF0Zm9ybXMgaXQKKyAgICAgICAgIyB3b3JrcyBmb3IgcGlwZXMgYW5kIHNvY2tldHMuIChFeGNlcHRpb246IE9TIFggMTAuND8gIElzc3VlICMxOTI5NC4pCisgICAgICAgIGlmIGlzX3NvY2tldCBvciBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImFpeCIpOgorICAgICAgICAgICAgIyBvbmx5IHN0YXJ0IHJlYWRpbmcgd2hlbiBjb25uZWN0aW9uX21hZGUoKSBoYXMgYmVlbiBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2xvb3AuYWRkX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVubywgc2VsZi5fcmVhZF9yZWFkeSkKKworICAgICAgICBpZiB3YWl0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG9ubHkgd2FrZSB1cCB0aGUgd2FpdGVyIHdoZW4gY29ubmVjdGlvbl9tYWRlKCkgaGFzIGJlZW4gY2FsbGVkCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfc29vbihmdXR1cmVzLl9zZXRfcmVzdWx0X3VubGVzc19jYW5jZWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZXIsIE5vbmUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBbc2VsZi5fX2NsYXNzX18uX19uYW1lX19dCisgICAgICAgIGlmIHNlbGYuX3BpcGUgaXMgTm9uZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zZWQnKQorICAgICAgICBlbGlmIHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnY2xvc2luZycpCisgICAgICAgIGluZm8uYXBwZW5kKCdmZD0lcycgJSBzZWxmLl9maWxlbm8pCisgICAgICAgIGlmIHNlbGYuX3BpcGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBwb2xsaW5nID0gc2VsZWN0b3JfZXZlbnRzLl90ZXN0X3NlbGVjdG9yX2V2ZW50KAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb29wLl9zZWxlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW5vLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBpZiBwb2xsaW5nOgorICAgICAgICAgICAgICAgIGluZm8uYXBwZW5kKCdwb2xsaW5nJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2lkbGUnKQorCisgICAgICAgICAgICBidWZzaXplID0gc2VsZi5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKQorICAgICAgICAgICAgaW5mby5hcHBlbmQoJ2J1ZnNpemU9JXMnICUgYnVmc2l6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGluZm8uYXBwZW5kKCdjbG9zZWQnKQorICAgICAgICByZXR1cm4gJzwlcz4nICUgJyAnLmpvaW4oaW5mbykKKworICAgIGRlZiBnZXRfd3JpdGVfYnVmZmVyX3NpemUoc2VsZik6CisgICAgICAgIHJldHVybiBzdW0obGVuKGRhdGEpIGZvciBkYXRhIGluIHNlbGYuX2J1ZmZlcikKKworICAgIGRlZiBfcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgIyBQaXBlIHdhcyBjbG9zZWQgYnkgcGVlci4KKyAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgIGxvZ2dlci5pbmZvKCIlciB3YXMgY2xvc2VkIGJ5IHBlZXIiLCBzZWxmKQorICAgICAgICBpZiBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9jbG9zZShCcm9rZW5QaXBlRXJyb3IoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2Nsb3NlKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpKSwgcmVwcihkYXRhKQorICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGEsIGJ5dGVhcnJheSk6CisgICAgICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX2Nvbm5fbG9zdCBvciBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgaWYgc2VsZi5fY29ubl9sb3N0ID49IGNvbnN0YW50cy5MT0dfVEhSRVNIT0xEX0ZPUl9DT05OTE9TVF9XUklURVM6CisgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ3BpcGUgY2xvc2VkIGJ5IHBlZXIgb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcy53cml0ZShwaXBlLCBkYXRhKSByYWlzZWQgZXhjZXB0aW9uLicpCisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgICMgQXR0ZW1wdCB0byBzZW5kIGl0IHJpZ2h0IGF3YXkgZmlyc3QuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbiA9IG9zLndyaXRlKHNlbGYuX2ZpbGVubywgZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBuID0gMAorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5fY29ubl9sb3N0ICs9IDEKKyAgICAgICAgICAgICAgICBzZWxmLl9mYXRhbF9lcnJvcihleGMsICdGYXRhbCB3cml0ZSBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBpZiBuID09IGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgbiA+IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisgICAgICAgICAgICBzZWxmLl9sb29wLmFkZF93cml0ZXIoc2VsZi5fZmlsZW5vLCBzZWxmLl93cml0ZV9yZWFkeSkKKworICAgICAgICBzZWxmLl9idWZmZXIuYXBwZW5kKGRhdGEpCisgICAgICAgIHNlbGYuX21heWJlX3BhdXNlX3Byb3RvY29sKCkKKworICAgIGRlZiBfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJycuam9pbihzZWxmLl9idWZmZXIpCisgICAgICAgIGFzc2VydCBkYXRhLCAnRGF0YSBzaG91bGQgbm90IGJlIGVtcHR5JworCisgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG4gPSBvcy53cml0ZShzZWxmLl9maWxlbm8sIGRhdGEpCisgICAgICAgIGV4Y2VwdCAoQmxvY2tpbmdJT0Vycm9yLCBJbnRlcnJ1cHRlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICBzZWxmLl9jb25uX2xvc3QgKz0gMQorICAgICAgICAgICAgIyBSZW1vdmUgd3JpdGVyIGhlcmUsIF9mYXRhbF9lcnJvcigpIGRvZXNuJ3QgaXQKKyAgICAgICAgICAgICMgYmVjYXVzZSBfYnVmZmVyIGlzIGVtcHR5LgorICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfd3JpdGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgIHNlbGYuX2ZhdGFsX2Vycm9yKGV4YywgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG4gPT0gbGVuKGRhdGEpOgorICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgICAgICAgICAgc2VsZi5fbWF5YmVfcmVzdW1lX3Byb3RvY29sKCkgICMgTWF5IGFwcGVuZCB0byBidWZmZXIuCisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX2J1ZmZlciBhbmQgc2VsZi5fY2xvc2luZzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5yZW1vdmVfcmVhZGVyKHNlbGYuX2ZpbGVubykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QoTm9uZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGVsaWYgbiA+IDA6CisgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGFbbjpdCisKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlci5hcHBlbmQoZGF0YSkgICMgVHJ5IGFnYWluIGxhdGVyLgorCisgICAgZGVmIGNhbl93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9jbG9zaW5nOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGFzc2VydCBzZWxmLl9waXBlCisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIGlmIG5vdCBzZWxmLl9idWZmZXI6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9yZWFkZXIoc2VsZi5fZmlsZW5vKQorICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX3Nvb24oc2VsZi5fY2FsbF9jb25uZWN0aW9uX2xvc3QsIE5vbmUpCisKKyAgICBkZWYgaXNfY2xvc2luZyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Nsb3NpbmcKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fcGlwZSBpcyBub3QgTm9uZSBhbmQgbm90IHNlbGYuX2Nsb3Npbmc6CisgICAgICAgICAgICAjIHdyaXRlX2VvZiBpcyBhbGwgd2hhdCB3ZSBuZWVkZWQgdG8gY2xvc2UgdGhlIHdyaXRlIHBpcGUKKyAgICAgICAgICAgIHNlbGYud3JpdGVfZW9mKCkKKworICAgICMgT24gUHl0aG9uIDMuMyBhbmQgb2xkZXIsIG9iamVjdHMgd2l0aCBhIGRlc3RydWN0b3IgcGFydCBvZiBhIHJlZmVyZW5jZQorICAgICMgY3ljbGUgYXJlIG5ldmVyIGRlc3Ryb3llZC4gSXQncyBub3QgbW9yZSB0aGUgY2FzZSBvbiBQeXRob24gMy40IHRoYW5rcworICAgICMgdG8gdGhlIFBFUCA0NDIuCisgICAgaWYgY29tcGF0LlBZMzQ6CisgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgaWYgc2VsZi5fcGlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCB0cmFuc3BvcnQgJXIiICUgc2VsZiwgUmVzb3VyY2VXYXJuaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuX3BpcGUuY2xvc2UoKQorCisgICAgZGVmIGFib3J0KHNlbGYpOgorICAgICAgICBzZWxmLl9jbG9zZShOb25lKQorCisgICAgZGVmIF9mYXRhbF9lcnJvcihzZWxmLCBleGMsIG1lc3NhZ2U9J0ZhdGFsIGVycm9yIG9uIHBpcGUgdHJhbnNwb3J0Jyk6CisgICAgICAgICMgc2hvdWxkIGJlIGNhbGxlZCBieSBleGNlcHRpb24gaGFuZGxlciBvbmx5CisgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhjLCAoQnJva2VuUGlwZUVycm9yLCBDb25uZWN0aW9uUmVzZXRFcnJvcikpOgorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoIiVyOiAlcyIsIHNlbGYsIG1lc3NhZ2UsIGV4Y19pbmZvPVRydWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoeworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICd0cmFuc3BvcnQnOiBzZWxmLAorICAgICAgICAgICAgICAgICdwcm90b2NvbCc6IHNlbGYuX3Byb3RvY29sLAorICAgICAgICAgICAgfSkKKyAgICAgICAgc2VsZi5fY2xvc2UoZXhjKQorCisgICAgZGVmIF9jbG9zZShzZWxmLCBleGM9Tm9uZSk6CisgICAgICAgIHNlbGYuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKKyAgICAgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3dyaXRlcihzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX2J1ZmZlci5jbGVhcigpCisgICAgICAgIHNlbGYuX2xvb3AucmVtb3ZlX3JlYWRlcihzZWxmLl9maWxlbm8pCisgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9zb29uKHNlbGYuX2NhbGxfY29ubmVjdGlvbl9sb3N0LCBleGMpCisKKyAgICBkZWYgX2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGV4Yyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX3Byb3RvY29sLmNvbm5lY3Rpb25fbG9zdChleGMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9waXBlLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3BpcGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9wcm90b2NvbCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisKKworaWYgaGFzYXR0cihvcywgJ3NldF9pbmhlcml0YWJsZScpOgorICAgICMgUHl0aG9uIDMuNCBhbmQgbmV3ZXIKKyAgICBfc2V0X2luaGVyaXRhYmxlID0gb3Muc2V0X2luaGVyaXRhYmxlCitlbHNlOgorICAgIGltcG9ydCBmY250bAorCisgICAgZGVmIF9zZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlKToKKyAgICAgICAgY2xvZXhlY19mbGFnID0gZ2V0YXR0cihmY250bCwgJ0ZEX0NMT0VYRUMnLCAxKQorCisgICAgICAgIG9sZCA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQorICAgICAgICBpZiBub3QgaW5oZXJpdGFibGU6CisgICAgICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgb2xkIHwgY2xvZXhlY19mbGFnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfU0VURkQsIG9sZCAmIH5jbG9leGVjX2ZsYWcpCisKKworY2xhc3MgX1VuaXhTdWJwcm9jZXNzVHJhbnNwb3J0KGJhc2Vfc3VicHJvY2Vzcy5CYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIGFyZ3MsIHNoZWxsLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKToKKyAgICAgICAgc3RkaW5fdyA9IE5vbmUKKyAgICAgICAgaWYgc3RkaW4gPT0gc3VicHJvY2Vzcy5QSVBFOgorICAgICAgICAgICAgIyBVc2UgYSBzb2NrZXQgcGFpciBmb3Igc3RkaW4sIHNpbmNlIG5vdCBhbGwgcGxhdGZvcm1zCisgICAgICAgICAgICAjIHN1cHBvcnQgc2VsZWN0aW5nIHJlYWQgZXZlbnRzIG9uIHRoZSB3cml0ZSBlbmQgb2YgYQorICAgICAgICAgICAgIyBzb2NrZXQgKHdoaWNoIHdlIHVzZSBpbiBvcmRlciB0byBkZXRlY3QgY2xvc2luZyBvZiB0aGUKKyAgICAgICAgICAgICMgb3RoZXIgZW5kKS4gIE5vdGFibHkgdGhpcyBpcyBuZWVkZWQgb24gQUlYLCBhbmQgd29ya3MKKyAgICAgICAgICAgICMganVzdCBmaW5lIG9uIG90aGVyIHBsYXRmb3Jtcy4KKyAgICAgICAgICAgIHN0ZGluLCBzdGRpbl93ID0gc2VsZi5fbG9vcC5fc29ja2V0cGFpcigpCisKKyAgICAgICAgICAgICMgTWFyayB0aGUgd3JpdGUgZW5kIG9mIHRoZSBzdGRpbiBwaXBlIGFzIG5vbi1pbmhlcml0YWJsZSwKKyAgICAgICAgICAgICMgbmVlZGVkIGJ5IGNsb3NlX2Zkcz1GYWxzZSBvbiBQeXRob24gMy4zIGFuZCBvbGRlcgorICAgICAgICAgICAgIyAoUHl0aG9uIDMuNCBpbXBsZW1lbnRzIHRoZSBQRVAgNDQ2LCBzb2NrZXRwYWlyIHJldHVybnMKKyAgICAgICAgICAgICMgbm9uLWluaGVyaXRhYmxlIHNvY2tldHMpCisgICAgICAgICAgICBfc2V0X2luaGVyaXRhYmxlKHN0ZGluX3cuZmlsZW5vKCksIEZhbHNlKQorICAgICAgICBzZWxmLl9wcm9jID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgIGFyZ3MsIHNoZWxsPXNoZWxsLCBzdGRpbj1zdGRpbiwgc3Rkb3V0PXN0ZG91dCwgc3RkZXJyPXN0ZGVyciwKKyAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSwgYnVmc2l6ZT1idWZzaXplLCAqKmt3YXJncykKKyAgICAgICAgaWYgc3RkaW5fdyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuX3Byb2Muc3RkaW4gPSBvcGVuKHN0ZGluX3cuZGV0YWNoKCksICd3YicsIGJ1ZmZlcmluZz1idWZzaXplKQorCisKK2NsYXNzIEFic3RyYWN0Q2hpbGRXYXRjaGVyOgorICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIG1vbml0b3JpbmcgY2hpbGQgcHJvY2Vzc2VzLgorCisgICAgT2JqZWN0cyBkZXJpdmVkIGZyb20gdGhpcyBjbGFzcyBtb25pdG9yIGEgY29sbGVjdGlvbiBvZiBzdWJwcm9jZXNzZXMgYW5kCisgICAgcmVwb3J0IHRoZWlyIHRlcm1pbmF0aW9uIG9yIGludGVycnVwdGlvbiBieSBhIHNpZ25hbC4KKworICAgIE5ldyBjYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCAuYWRkX2NoaWxkX2hhbmRsZXIoKS4gU3RhcnRpbmcgYSBuZXcKKyAgICBwcm9jZXNzIG11c3QgYmUgZG9uZSB3aXRoaW4gYSAnd2l0aCcgYmxvY2sgdG8gYWxsb3cgdGhlIHdhdGNoZXIgdG8gc3VzcGVuZAorICAgIGl0cyBhY3Rpdml0eSB1bnRpbCB0aGUgbmV3IHByb2Nlc3MgaWYgZnVsbHkgcmVnaXN0ZXJlZCAodGhpcyBpcyBuZWVkZWQgdG8KKyAgICBwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gaW4gc29tZSBpbXBsZW1lbnRhdGlvbnMpLgorCisgICAgRXhhbXBsZToKKyAgICAgICAgd2l0aCB3YXRjaGVyOgorICAgICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oInNsZWVwIDEiKQorICAgICAgICAgICAgd2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcihwcm9jLnBpZCwgY2FsbGJhY2spCisKKyAgICBOb3RlczoKKyAgICAgICAgSW1wbGVtZW50YXRpb25zIG9mIHRoaXMgY2xhc3MgbXVzdCBiZSB0aHJlYWQtc2FmZS4KKworICAgICAgICBTaW5jZSBjaGlsZCB3YXRjaGVyIG9iamVjdHMgbWF5IGNhdGNoIHRoZSBTSUdDSExEIHNpZ25hbCBhbmQgY2FsbAorICAgICAgICB3YWl0cGlkKC0xKSwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIGFjdGl2ZSBvYmplY3QgcGVyIHByb2Nlc3MuCisgICAgIiIiCisKKyAgICBkZWYgYWRkX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAiIiJSZWdpc3RlciBhIG5ldyBjaGlsZCBoYW5kbGVyLgorCisgICAgICAgIEFycmFuZ2UgZm9yIGNhbGxiYWNrKHBpZCwgcmV0dXJuY29kZSwgKmFyZ3MpIHRvIGJlIGNhbGxlZCB3aGVuCisgICAgICAgIHByb2Nlc3MgJ3BpZCcgdGVybWluYXRlcy4gU3BlY2lmeWluZyBhbm90aGVyIGNhbGxiYWNrIGZvciB0aGUgc2FtZQorICAgICAgICBwcm9jZXNzIHJlcGxhY2VzIHRoZSBwcmV2aW91cyBoYW5kbGVyLgorCisgICAgICAgIE5vdGU6IGNhbGxiYWNrKCkgbXVzdCBiZSB0aHJlYWQtc2FmZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIHJlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIHBpZCk6CisgICAgICAgICIiIlJlbW92ZXMgdGhlIGhhbmRsZXIgZm9yIHByb2Nlc3MgJ3BpZCcuCisKKyAgICAgICAgVGhlIGZ1bmN0aW9uIHJldHVybnMgVHJ1ZSBpZiB0aGUgaGFuZGxlciB3YXMgc3VjY2Vzc2Z1bGx5IHJlbW92ZWQsCisgICAgICAgIEZhbHNlIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIHJlbW92ZS4iIiIKKworICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBhdHRhY2hfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgIiIiQXR0YWNoIHRoZSB3YXRjaGVyIHRvIGFuIGV2ZW50IGxvb3AuCisKKyAgICAgICAgSWYgdGhlIHdhdGNoZXIgd2FzIHByZXZpb3VzbHkgYXR0YWNoZWQgdG8gYW4gZXZlbnQgbG9vcCwgdGhlbiBpdCBpcworICAgICAgICBmaXJzdCBkZXRhY2hlZCBiZWZvcmUgYXR0YWNoaW5nIHRvIHRoZSBuZXcgbG9vcC4KKworICAgICAgICBOb3RlOiBsb29wIG1heSBiZSBOb25lLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkNsb3NlIHRoZSB3YXRjaGVyLgorCisgICAgICAgIFRoaXMgbXVzdCBiZSBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IHVuZGVybHlpbmcgcmVzb3VyY2UgaXMgZnJlZWQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgICIiIkVudGVyIHRoZSB3YXRjaGVyJ3MgY29udGV4dCBhbmQgYWxsb3cgc3RhcnRpbmcgbmV3IHByb2Nlc3NlcworCisgICAgICAgIFRoaXMgZnVuY3Rpb24gbXVzdCByZXR1cm4gc2VsZiIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBhLCBiLCBjKToKKyAgICAgICAgIiIiRXhpdCB0aGUgd2F0Y2hlcidzIGNvbnRleHQiIiIKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKworY2xhc3MgQmFzZUNoaWxkV2F0Y2hlcihBYnN0cmFjdENoaWxkV2F0Y2hlcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuX2xvb3AgPSBOb25lCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuYXR0YWNoX2xvb3AoTm9uZSkKKworICAgIGRlZiBfZG9fd2FpdHBpZChzZWxmLCBleHBlY3RlZF9waWQpOgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgIGRlZiBfZG9fd2FpdHBpZF9hbGwoc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgZGVmIGF0dGFjaF9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICBhc3NlcnQgbG9vcCBpcyBOb25lIG9yIGlzaW5zdGFuY2UobG9vcCwgZXZlbnRzLkFic3RyYWN0RXZlbnRMb29wKQorCisgICAgICAgIGlmIHNlbGYuX2xvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLl9sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQ0hMRCkKKworICAgICAgICBzZWxmLl9sb29wID0gbG9vcAorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0NITEQsIHNlbGYuX3NpZ19jaGxkKQorCisgICAgICAgICAgICAjIFByZXZlbnQgYSByYWNlIGNvbmRpdGlvbiBpbiBjYXNlIGEgY2hpbGQgdGVybWluYXRlZAorICAgICAgICAgICAgIyBkdXJpbmcgdGhlIHN3aXRjaC4KKyAgICAgICAgICAgIHNlbGYuX2RvX3dhaXRwaWRfYWxsKCkKKworICAgIGRlZiBfc2lnX2NobGQoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2RvX3dhaXRwaWRfYWxsKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICAjIHNlbGYuX2xvb3Agc2hvdWxkIGFsd2F5cyBiZSBhdmFpbGFibGUgaGVyZQorICAgICAgICAgICAgIyBhcyAnX3NpZ19jaGxkJyBpcyBhZGRlZCBhcyBhIHNpZ25hbCBoYW5kbGVyCisgICAgICAgICAgICAjIGluICdhdHRhY2hfbG9vcCcKKyAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnVW5rbm93biBleGNlcHRpb24gaW4gU0lHQ0hMRCBoYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgfSkKKworICAgIGRlZiBfY29tcHV0ZV9yZXR1cm5jb2RlKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0YXR1cyk6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIGRpZWQgYmVjYXVzZSBvZiBhIHNpZ25hbC4KKyAgICAgICAgICAgIHJldHVybiAtb3MuV1RFUk1TSUcoc3RhdHVzKQorICAgICAgICBlbGlmIG9zLldJRkVYSVRFRChzdGF0dXMpOgorICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBleGl0ZWQgKGUuZyBzeXMuZXhpdCgpKS4KKyAgICAgICAgICAgIHJldHVybiBvcy5XRVhJVFNUQVRVUyhzdGF0dXMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBleGl0ZWQsIGJ1dCB3ZSBkb24ndCB1bmRlcnN0YW5kIGl0cyBzdGF0dXMuCisgICAgICAgICAgICAjIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0IGlmIGl0IGRvZXMsIGxldCdzIGp1c3QKKyAgICAgICAgICAgICMgcmV0dXJuIHRoYXQgc3RhdHVzOyBwZXJoYXBzIHRoYXQgaGVscHMgZGVidWcgaXQuCisgICAgICAgICAgICByZXR1cm4gc3RhdHVzCisKKworY2xhc3MgU2FmZUNoaWxkV2F0Y2hlcihCYXNlQ2hpbGRXYXRjaGVyKToKKyAgICAiIiInU2FmZScgY2hpbGQgd2F0Y2hlciBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgaW1wbGVtZW50YXRpb24gYXZvaWRzIGRpc3J1cHRpbmcgb3RoZXIgY29kZSBzcGF3bmluZyBwcm9jZXNzZXMgYnkKKyAgICBwb2xsaW5nIGV4cGxpY2l0bHkgZWFjaCBwcm9jZXNzIGluIHRoZSBTSUdDSExEIGhhbmRsZXIgaW5zdGVhZCBvZiBjYWxsaW5nCisgICAgb3Mud2FpdHBpZCgtMSkuCisKKyAgICBUaGlzIGlzIGEgc2FmZSBzb2x1dGlvbiBidXQgaXQgaGFzIGEgc2lnbmlmaWNhbnQgb3ZlcmhlYWQgd2hlbiBoYW5kbGluZyBhCisgICAgYmlnIG51bWJlciBvZiBjaGlsZHJlbiAoTyhuKSBlYWNoIHRpbWUgU0lHQ0hMRCBpcyByYWlzZWQpCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSB7fQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLl9jYWxsYmFja3MuY2xlYXIoKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgYSwgYiwgYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBhZGRfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQsIGNhbGxiYWNrLCAqYXJncyk6CisgICAgICAgIHNlbGYuX2NhbGxiYWNrc1twaWRdID0gKGNhbGxiYWNrLCBhcmdzKQorCisgICAgICAgICMgUHJldmVudCBhIHJhY2UgY29uZGl0aW9uIGluIGNhc2UgdGhlIGNoaWxkIGlzIGFscmVhZHkgdGVybWluYXRlZC4KKyAgICAgICAgc2VsZi5fZG9fd2FpdHBpZChwaWQpCisKKyAgICBkZWYgcmVtb3ZlX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIHNlbGYuX2NhbGxiYWNrc1twaWRdCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBfZG9fd2FpdHBpZF9hbGwoc2VsZik6CisKKyAgICAgICAgZm9yIHBpZCBpbiBsaXN0KHNlbGYuX2NhbGxiYWNrcyk6CisgICAgICAgICAgICBzZWxmLl9kb193YWl0cGlkKHBpZCkKKworICAgIGRlZiBfZG9fd2FpdHBpZChzZWxmLCBleHBlY3RlZF9waWQpOgorICAgICAgICBhc3NlcnQgZXhwZWN0ZWRfcGlkID4gMAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChleHBlY3RlZF9waWQsIG9zLldOT0hBTkcpCisgICAgICAgIGV4Y2VwdCBDaGlsZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICMgVGhlIGNoaWxkIHByb2Nlc3MgaXMgYWxyZWFkeSByZWFwZWQKKyAgICAgICAgICAgICMgKG1heSBoYXBwZW4gaWYgd2FpdHBpZCgpIGlzIGNhbGxlZCBlbHNld2hlcmUpLgorICAgICAgICAgICAgcGlkID0gZXhwZWN0ZWRfcGlkCisgICAgICAgICAgICByZXR1cm5jb2RlID0gMjU1CisgICAgICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAgICAgICAiVW5rbm93biBjaGlsZCBwcm9jZXNzIHBpZCAlZCwgd2lsbCByZXBvcnQgcmV0dXJuY29kZSAyNTUiLAorICAgICAgICAgICAgICAgIHBpZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgICAgICMgVGhlIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUuCisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl9jb21wdXRlX3JldHVybmNvZGUoc3RhdHVzKQorICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICBsb2dnZXIuZGVidWcoJ3Byb2Nlc3MgJXMgZXhpdGVkIHdpdGggcmV0dXJuY29kZSAlcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX3BpZCwgcmV0dXJuY29kZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBjYWxsYmFjaywgYXJncyA9IHNlbGYuX2NhbGxiYWNrcy5wb3AocGlkKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6ICAjIHByYWdtYTogbm8gY292ZXIKKyAgICAgICAgICAgICMgTWF5IGhhcHBlbiBpZiAucmVtb3ZlX2NoaWxkX2hhbmRsZXIoKSBpcyBjYWxsZWQKKyAgICAgICAgICAgICMgYWZ0ZXIgb3Mud2FpdHBpZCgpIHJldHVybnMuCisgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgIGxvZ2dlci53YXJuaW5nKCJDaGlsZCB3YXRjaGVyIGdvdCBhbiB1bmV4cGVjdGVkIHBpZDogJXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNhbGxiYWNrKHBpZCwgcmV0dXJuY29kZSwgKmFyZ3MpCisKKworY2xhc3MgRmFzdENoaWxkV2F0Y2hlcihCYXNlQ2hpbGRXYXRjaGVyKToKKyAgICAiIiInRmFzdCcgY2hpbGQgd2F0Y2hlciBpbXBsZW1lbnRhdGlvbi4KKworICAgIFRoaXMgaW1wbGVtZW50YXRpb24gcmVhcHMgZXZlcnkgdGVybWluYXRlZCBwcm9jZXNzZXMgYnkgY2FsbGluZworICAgIG9zLndhaXRwaWQoLTEpIGRpcmVjdGx5LCBwb3NzaWJseSBicmVha2luZyBvdGhlciBjb2RlIHNwYXduaW5nIHByb2Nlc3NlcworICAgIGFuZCB3YWl0aW5nIGZvciB0aGVpciB0ZXJtaW5hdGlvbi4KKworICAgIFRoZXJlIGlzIG5vIG5vdGljZWFibGUgb3ZlcmhlYWQgd2hlbiBoYW5kbGluZyBhIGJpZyBudW1iZXIgb2YgY2hpbGRyZW4KKyAgICAoTygxKSBlYWNoIHRpbWUgYSBjaGlsZCB0ZXJtaW5hdGVzKS4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICBzZWxmLl9jYWxsYmFja3MgPSB7fQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl96b21iaWVzID0ge30KKyAgICAgICAgc2VsZi5fZm9ya3MgPSAwCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2NhbGxiYWNrcy5jbGVhcigpCisgICAgICAgIHNlbGYuX3pvbWJpZXMuY2xlYXIoKQorICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgIHNlbGYuX2ZvcmtzICs9IDEKKworICAgICAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBhLCBiLCBjKToKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgc2VsZi5fZm9ya3MgLT0gMQorCisgICAgICAgICAgICBpZiBzZWxmLl9mb3JrcyBvciBub3Qgc2VsZi5fem9tYmllczoKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgY29sbGF0ZXJhbF92aWN0aW1zID0gc3RyKHNlbGYuX3pvbWJpZXMpCisgICAgICAgICAgICBzZWxmLl96b21iaWVzLmNsZWFyKCkKKworICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAgICJDYXVnaHQgc3VicHJvY2Vzc2VzIHRlcm1pbmF0aW9uIGZyb20gdW5rbm93biBwaWRzOiAlcyIsCisgICAgICAgICAgICBjb2xsYXRlcmFsX3ZpY3RpbXMpCisKKyAgICBkZWYgYWRkX2NoaWxkX2hhbmRsZXIoc2VsZiwgcGlkLCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICBhc3NlcnQgc2VsZi5fZm9ya3MsICJNdXN0IHVzZSB0aGUgY29udGV4dCBtYW5hZ2VyIgorICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX3pvbWJpZXMucG9wKHBpZCkKKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAjIFRoZSBjaGlsZCBpcyBydW5uaW5nLgorICAgICAgICAgICAgICAgIHNlbGYuX2NhbGxiYWNrc1twaWRdID0gY2FsbGJhY2ssIGFyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIFRoZSBjaGlsZCBpcyBkZWFkIGFscmVhZHkuIFdlIGNhbiBmaXJlIHRoZSBjYWxsYmFjay4KKyAgICAgICAgY2FsbGJhY2socGlkLCByZXR1cm5jb2RlLCAqYXJncykKKworICAgIGRlZiByZW1vdmVfY2hpbGRfaGFuZGxlcihzZWxmLCBwaWQpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgc2VsZi5fY2FsbGJhY2tzW3BpZF0KKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIF9kb193YWl0cGlkX2FsbChzZWxmKToKKyAgICAgICAgIyBCZWNhdXNlIG9mIHNpZ25hbCBjb2FsZXNjaW5nLCB3ZSBtdXN0IGtlZXAgY2FsbGluZyB3YWl0cGlkKCkgYXMKKyAgICAgICAgIyBsb25nIGFzIHdlJ3JlIGFibGUgdG8gcmVhcCBhIGNoaWxkLgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZCgtMSwgb3MuV05PSEFORykKKyAgICAgICAgICAgIGV4Y2VwdCBDaGlsZFByb2Nlc3NFcnJvcjoKKyAgICAgICAgICAgICAgICAjIE5vIG1vcmUgY2hpbGQgcHJvY2Vzc2VzIGV4aXN0LgorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgIyBBIGNoaWxkIHByb2Nlc3MgaXMgc3RpbGwgYWxpdmUuCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICAgICAgcmV0dXJuY29kZSA9IHNlbGYuX2NvbXB1dGVfcmV0dXJuY29kZShzdGF0dXMpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5fbG9jazoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLCBhcmdzID0gc2VsZi5fY2FsbGJhY2tzLnBvcChwaWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIHVua25vd24gY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZm9ya3M6CisgICAgICAgICAgICAgICAgICAgICAgICAjIEl0IG1heSBub3QgYmUgcmVnaXN0ZXJlZCB5ZXQuCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl96b21iaWVzW3BpZF0gPSByZXR1cm5jb2RlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5kZWJ1ZygndW5rbm93biBwcm9jZXNzICVzIGV4aXRlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aXRoIHJldHVybmNvZGUgJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWQsIHJldHVybmNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb29wLmdldF9kZWJ1ZygpOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCdwcm9jZXNzICVzIGV4aXRlZCB3aXRoIHJldHVybmNvZGUgJXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpZCwgcmV0dXJuY29kZSkKKworICAgICAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBsb2dnZXIud2FybmluZygKKyAgICAgICAgICAgICAgICAgICAgIkNhdWdodCBzdWJwcm9jZXNzIHRlcm1pbmF0aW9uIGZyb20gdW5rbm93biBwaWQ6ICIKKyAgICAgICAgICAgICAgICAgICAgIiVkIC0+ICVkIiwgcGlkLCByZXR1cm5jb2RlKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjYWxsYmFjayhwaWQsIHJldHVybmNvZGUsICphcmdzKQorCisKK2NsYXNzIF9Vbml4RGVmYXVsdEV2ZW50TG9vcFBvbGljeShldmVudHMuQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3kpOgorICAgICIiIlVOSVggZXZlbnQgbG9vcCBwb2xpY3kgd2l0aCBhIHdhdGNoZXIgZm9yIGNoaWxkIHByb2Nlc3Nlcy4iIiIKKyAgICBfbG9vcF9mYWN0b3J5ID0gX1VuaXhTZWxlY3RvckV2ZW50TG9vcAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fd2F0Y2hlciA9IE5vbmUKKworICAgIGRlZiBfaW5pdF93YXRjaGVyKHNlbGYpOgorICAgICAgICB3aXRoIGV2ZW50cy5fbG9jazoKKyAgICAgICAgICAgIGlmIHNlbGYuX3dhdGNoZXIgaXMgTm9uZTogICMgcHJhZ21hOiBubyBicmFuY2gKKyAgICAgICAgICAgICAgICBzZWxmLl93YXRjaGVyID0gU2FmZUNoaWxkV2F0Y2hlcigpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZGluZy5fTWFpblRocmVhZCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5fbG9jYWwuX2xvb3ApCisKKyAgICBkZWYgc2V0X2V2ZW50X2xvb3Aoc2VsZiwgbG9vcCk6CisgICAgICAgICIiIlNldCB0aGUgZXZlbnQgbG9vcC4KKworICAgICAgICBBcyBhIHNpZGUgZWZmZWN0LCBpZiBhIGNoaWxkIHdhdGNoZXIgd2FzIHNldCBiZWZvcmUsIHRoZW4gY2FsbGluZworICAgICAgICAuc2V0X2V2ZW50X2xvb3AoKSBmcm9tIHRoZSBtYWluIHRocmVhZCB3aWxsIGNhbGwgLmF0dGFjaF9sb29wKGxvb3ApIG9uCisgICAgICAgIHRoZSBjaGlsZCB3YXRjaGVyLgorICAgICAgICAiIiIKKworICAgICAgICBzdXBlcigpLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBub3QgTm9uZSBhbmQgXAorICAgICAgICAgICAgaXNpbnN0YW5jZSh0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSwgdGhyZWFkaW5nLl9NYWluVGhyZWFkKToKKyAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuYXR0YWNoX2xvb3AobG9vcCkKKworICAgIGRlZiBnZXRfY2hpbGRfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgIiIiR2V0IHRoZSB3YXRjaGVyIGZvciBjaGlsZCBwcm9jZXNzZXMuCisKKyAgICAgICAgSWYgbm90IHlldCBzZXQsIGEgU2FmZUNoaWxkV2F0Y2hlciBvYmplY3QgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5faW5pdF93YXRjaGVyKCkKKworICAgICAgICByZXR1cm4gc2VsZi5fd2F0Y2hlcgorCisgICAgZGVmIHNldF9jaGlsZF93YXRjaGVyKHNlbGYsIHdhdGNoZXIpOgorICAgICAgICAiIiJTZXQgdGhlIHdhdGNoZXIgZm9yIGNoaWxkIHByb2Nlc3Nlcy4iIiIKKworICAgICAgICBhc3NlcnQgd2F0Y2hlciBpcyBOb25lIG9yIGlzaW5zdGFuY2Uod2F0Y2hlciwgQWJzdHJhY3RDaGlsZFdhdGNoZXIpCisKKyAgICAgICAgaWYgc2VsZi5fd2F0Y2hlciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX3dhdGNoZXIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuX3dhdGNoZXIgPSB3YXRjaGVyCisKK1NlbGVjdG9yRXZlbnRMb29wID0gX1VuaXhTZWxlY3RvckV2ZW50TG9vcAorRGVmYXVsdEV2ZW50TG9vcFBvbGljeSA9IF9Vbml4RGVmYXVsdEV2ZW50TG9vcFBvbGljeQpkaWZmIC0tZ2l0IGEvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkgYi9MaWIvYXN5bmNpby93aW5kb3dzX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjI1OTRmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2FzeW5jaW8vd2luZG93c19ldmVudHMucHkKQEAgLTAsMCArMSw3NzQgQEAKKyIiIlNlbGVjdG9yIGFuZCBwcm9hY3RvciBldmVudCBsb29wcyBmb3IgV2luZG93cy4iIiIKKworaW1wb3J0IF93aW5hcGkKK2ltcG9ydCBlcnJubworaW1wb3J0IG1hdGgKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gLiBpbXBvcnQgZXZlbnRzCitmcm9tIC4gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSAuIGltcG9ydCBmdXR1cmVzCitmcm9tIC4gaW1wb3J0IHByb2FjdG9yX2V2ZW50cworZnJvbSAuIGltcG9ydCBzZWxlY3Rvcl9ldmVudHMKK2Zyb20gLiBpbXBvcnQgdGFza3MKK2Zyb20gLiBpbXBvcnQgd2luZG93c191dGlscworZnJvbSAuIGltcG9ydCBfb3ZlcmxhcHBlZAorZnJvbSAuY29yb3V0aW5lcyBpbXBvcnQgY29yb3V0aW5lCitmcm9tIC5sb2cgaW1wb3J0IGxvZ2dlcgorCisKK19fYWxsX18gPSBbJ1NlbGVjdG9yRXZlbnRMb29wJywgJ1Byb2FjdG9yRXZlbnRMb29wJywgJ0lvY3BQcm9hY3RvcicsCisgICAgICAgICAgICdEZWZhdWx0RXZlbnRMb29wUG9saWN5JywKKyAgICAgICAgICAgXQorCisKK05VTEwgPSAwCitJTkZJTklURSA9IDB4ZmZmZmZmZmYKK0VSUk9SX0NPTk5FQ1RJT05fUkVGVVNFRCA9IDEyMjUKK0VSUk9SX0NPTk5FQ1RJT05fQUJPUlRFRCA9IDEyMzYKKworIyBJbml0aWFsIGRlbGF5IGluIHNlY29uZHMgZm9yIGNvbm5lY3RfcGlwZSgpIGJlZm9yZSByZXRyeWluZyB0byBjb25uZWN0CitDT05ORUNUX1BJUEVfSU5JVF9ERUxBWSA9IDAuMDAxCisKKyMgTWF4aW11bSBkZWxheSBpbiBzZWNvbmRzIGZvciBjb25uZWN0X3BpcGUoKSBiZWZvcmUgcmV0cnlpbmcgdG8gY29ubmVjdAorQ09OTkVDVF9QSVBFX01BWF9ERUxBWSA9IDAuMTAwCisKKworY2xhc3MgX092ZXJsYXBwZWRGdXR1cmUoZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIlN1YmNsYXNzIG9mIEZ1dHVyZSB3aGljaCByZXByZXNlbnRzIGFuIG92ZXJsYXBwZWQgb3BlcmF0aW9uLgorCisgICAgQ2FuY2VsbGluZyBpdCB3aWxsIGltbWVkaWF0ZWx5IGNhbmNlbCB0aGUgb3ZlcmxhcHBlZCBvcGVyYXRpb24uCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3YsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgIHNlbGYuX292ID0gb3YKKworICAgIGRlZiBfcmVwcl9pbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gc3VwZXIoKS5fcmVwcl9pbmZvKCkKKyAgICAgICAgaWYgc2VsZi5fb3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGF0ZSA9ICdwZW5kaW5nJyBpZiBzZWxmLl9vdi5wZW5kaW5nIGVsc2UgJ2NvbXBsZXRlZCcKKyAgICAgICAgICAgIGluZm8uaW5zZXJ0KDEsICdvdmVybGFwcGVkPTwlcywgJSN4PicgJSAoc3RhdGUsIHNlbGYuX292LmFkZHJlc3MpKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIF9jYW5jZWxfb3ZlcmxhcHBlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fb3YgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9vdi5jYW5jZWwoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0NhbmNlbGxpbmcgYW4gb3ZlcmxhcHBlZCBmdXR1cmUgZmFpbGVkJywKKyAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICdmdXR1cmUnOiBzZWxmLAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICBjb250ZXh0Wydzb3VyY2VfdHJhY2ViYWNrJ10gPSBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrCisgICAgICAgICAgICBzZWxmLl9sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoY29udGV4dCkKKyAgICAgICAgc2VsZi5fb3YgPSBOb25lCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl9jYW5jZWxfb3ZlcmxhcHBlZCgpCisgICAgICAgIHJldHVybiBzdXBlcigpLmNhbmNlbCgpCisKKyAgICBkZWYgc2V0X2V4Y2VwdGlvbihzZWxmLCBleGNlcHRpb24pOgorICAgICAgICBzdXBlcigpLnNldF9leGNlcHRpb24oZXhjZXB0aW9uKQorICAgICAgICBzZWxmLl9jYW5jZWxfb3ZlcmxhcHBlZCgpCisKKyAgICBkZWYgc2V0X3Jlc3VsdChzZWxmLCByZXN1bHQpOgorICAgICAgICBzdXBlcigpLnNldF9yZXN1bHQocmVzdWx0KQorICAgICAgICBzZWxmLl9vdiA9IE5vbmUKKworCitjbGFzcyBfQmFzZVdhaXRIYW5kbGVGdXR1cmUoZnV0dXJlcy5GdXR1cmUpOgorICAgICIiIlN1YmNsYXNzIG9mIEZ1dHVyZSB3aGljaCByZXByZXNlbnRzIGEgd2FpdCBoYW5kbGUuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgb3YsIGhhbmRsZSwgd2FpdF9oYW5kbGUsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18obG9vcD1sb29wKQorICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgZGVsIHNlbGYuX3NvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgICMgS2VlcCBhIHJlZmVyZW5jZSB0byB0aGUgT3ZlcmxhcHBlZCBvYmplY3QgdG8ga2VlcCBpdCBhbGl2ZSB1bnRpbCB0aGUKKyAgICAgICAgIyB3YWl0IGlzIHVucmVnaXN0ZXJlZAorICAgICAgICBzZWxmLl9vdiA9IG92CisgICAgICAgIHNlbGYuX2hhbmRsZSA9IGhhbmRsZQorICAgICAgICBzZWxmLl93YWl0X2hhbmRsZSA9IHdhaXRfaGFuZGxlCisKKyAgICAgICAgIyBTaG91bGQgd2UgY2FsbCBVbnJlZ2lzdGVyV2FpdEV4KCkgaWYgdGhlIHdhaXQgY29tcGxldGVzCisgICAgICAgICMgb3IgaXMgY2FuY2VsbGVkPworICAgICAgICBzZWxmLl9yZWdpc3RlcmVkID0gVHJ1ZQorCisgICAgZGVmIF9wb2xsKHNlbGYpOgorICAgICAgICAjIG5vbi1ibG9ja2luZyB3YWl0OiB1c2UgYSB0aW1lb3V0IG9mIDAgbWlsbGlzZWNvbmQKKyAgICAgICAgcmV0dXJuIChfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3Qoc2VsZi5faGFuZGxlLCAwKSA9PQorICAgICAgICAgICAgICAgIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKworICAgIGRlZiBfcmVwcl9pbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gc3VwZXIoKS5fcmVwcl9pbmZvKCkKKyAgICAgICAgaW5mby5hcHBlbmQoJ2hhbmRsZT0lI3gnICUgc2VsZi5faGFuZGxlKQorICAgICAgICBpZiBzZWxmLl9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGF0ZSA9ICdzaWduYWxlZCcgaWYgc2VsZi5fcG9sbCgpIGVsc2UgJ3dhaXRpbmcnCisgICAgICAgICAgICBpbmZvLmFwcGVuZChzdGF0ZSkKKyAgICAgICAgaWYgc2VsZi5fd2FpdF9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpbmZvLmFwcGVuZCgnd2FpdF9oYW5kbGU9JSN4JyAlIHNlbGYuX3dhaXRfaGFuZGxlKQorICAgICAgICByZXR1cm4gaW5mbworCisgICAgZGVmIF91bnJlZ2lzdGVyX3dhaXRfY2Ioc2VsZiwgZnV0KToKKyAgICAgICAgIyBUaGUgd2FpdCB3YXMgdW5yZWdpc3RlcmVkOiBpdCdzIG5vdCBzYWZlIHRvIGRlc3Ryb3kgdGhlIE92ZXJsYXBwZWQKKyAgICAgICAgIyBvYmplY3QKKyAgICAgICAgc2VsZi5fb3YgPSBOb25lCisKKyAgICBkZWYgX3VucmVnaXN0ZXJfd2FpdChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3JlZ2lzdGVyZWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJlZCA9IEZhbHNlCisKKyAgICAgICAgd2FpdF9oYW5kbGUgPSBzZWxmLl93YWl0X2hhbmRsZQorICAgICAgICBzZWxmLl93YWl0X2hhbmRsZSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuVW5yZWdpc3RlcldhaXQod2FpdF9oYW5kbGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciAhPSBfb3ZlcmxhcHBlZC5FUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogJ0ZhaWxlZCB0byB1bnJlZ2lzdGVyIHRoZSB3YWl0IGhhbmRsZScsCisgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgICAgICdmdXR1cmUnOiBzZWxmLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrOgorICAgICAgICAgICAgICAgICAgICBjb250ZXh0Wydzb3VyY2VfdHJhY2ViYWNrJ10gPSBzZWxmLl9zb3VyY2VfdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKGNvbnRleHQpCisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAjIEVSUk9SX0lPX1BFTkRJTkcgbWVhbnMgdGhhdCB0aGUgdW5yZWdpc3RlciBpcyBwZW5kaW5nCisKKyAgICAgICAgc2VsZi5fdW5yZWdpc3Rlcl93YWl0X2NiKE5vbmUpCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICBzZWxmLl91bnJlZ2lzdGVyX3dhaXQoKQorICAgICAgICByZXR1cm4gc3VwZXIoKS5jYW5jZWwoKQorCisgICAgZGVmIHNldF9leGNlcHRpb24oc2VsZiwgZXhjZXB0aW9uKToKKyAgICAgICAgc2VsZi5fdW5yZWdpc3Rlcl93YWl0KCkKKyAgICAgICAgc3VwZXIoKS5zZXRfZXhjZXB0aW9uKGV4Y2VwdGlvbikKKworICAgIGRlZiBzZXRfcmVzdWx0KHNlbGYsIHJlc3VsdCk6CisgICAgICAgIHNlbGYuX3VucmVnaXN0ZXJfd2FpdCgpCisgICAgICAgIHN1cGVyKCkuc2V0X3Jlc3VsdChyZXN1bHQpCisKKworY2xhc3MgX1dhaXRDYW5jZWxGdXR1cmUoX0Jhc2VXYWl0SGFuZGxlRnV0dXJlKToKKyAgICAiIiJTdWJjbGFzcyBvZiBGdXR1cmUgd2hpY2ggcmVwcmVzZW50cyBhIHdhaXQgZm9yIHRoZSBjYW5jZWxsYXRpb24gb2YgYQorICAgIF9XYWl0SGFuZGxlRnV0dXJlIHVzaW5nIGFuIGV2ZW50LgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG92LCBldmVudCwgd2FpdF9oYW5kbGUsICosIGxvb3A9Tm9uZSk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18ob3YsIGV2ZW50LCB3YWl0X2hhbmRsZSwgbG9vcD1sb29wKQorCisgICAgICAgIHNlbGYuX2RvbmVfY2FsbGJhY2sgPSBOb25lCisKKyAgICBkZWYgY2FuY2VsKHNlbGYpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIl9XYWl0Q2FuY2VsRnV0dXJlIG11c3Qgbm90IGJlIGNhbmNlbGxlZCIpCisKKyAgICBkZWYgX3NjaGVkdWxlX2NhbGxiYWNrcyhzZWxmKToKKyAgICAgICAgc3VwZXIoX1dhaXRDYW5jZWxGdXR1cmUsIHNlbGYpLl9zY2hlZHVsZV9jYWxsYmFja3MoKQorICAgICAgICBpZiBzZWxmLl9kb25lX2NhbGxiYWNrIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZG9uZV9jYWxsYmFjayhzZWxmKQorCisKK2NsYXNzIF9XYWl0SGFuZGxlRnV0dXJlKF9CYXNlV2FpdEhhbmRsZUZ1dHVyZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG92LCBoYW5kbGUsIHdhaXRfaGFuZGxlLCBwcm9hY3RvciwgKiwgbG9vcD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhvdiwgaGFuZGxlLCB3YWl0X2hhbmRsZSwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLl9wcm9hY3RvciA9IHByb2FjdG9yCisgICAgICAgIHNlbGYuX3VucmVnaXN0ZXJfcHJvYWN0b3IgPSBUcnVlCisgICAgICAgIHNlbGYuX2V2ZW50ID0gX292ZXJsYXBwZWQuQ3JlYXRlRXZlbnQoTm9uZSwgVHJ1ZSwgRmFsc2UsIE5vbmUpCisgICAgICAgIHNlbGYuX2V2ZW50X2Z1dCA9IE5vbmUKKworICAgIGRlZiBfdW5yZWdpc3Rlcl93YWl0X2NiKHNlbGYsIGZ1dCk6CisgICAgICAgIGlmIHNlbGYuX2V2ZW50IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShzZWxmLl9ldmVudCkKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50ID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fZXZlbnRfZnV0ID0gTm9uZQorCisgICAgICAgICMgSWYgdGhlIHdhaXQgd2FzIGNhbmNlbGxlZCwgdGhlIHdhaXQgbWF5IG5ldmVyIGJlIHNpZ25hbGxlZCwgc28KKyAgICAgICAgIyBpdCdzIHJlcXVpcmVkIHRvIHVucmVnaXN0ZXIgaXQuIE90aGVyd2lzZSwgSW9jcFByb2FjdG9yLmNsb3NlKCkgd2lsbAorICAgICAgICAjIHdhaXQgZm9yZXZlciBmb3IgYW4gZXZlbnQgd2hpY2ggd2lsbCBuZXZlciBjb21lLgorICAgICAgICAjCisgICAgICAgICMgSWYgdGhlIElvY3BQcm9hY3RvciBhbHJlYWR5IHJlY2VpdmVkIHRoZSBldmVudCwgaXQncyBzYWZlIHRvIGNhbGwKKyAgICAgICAgIyBfdW5yZWdpc3RlcigpIGJlY2F1c2Ugd2Uga2VwdCBhIHJlZmVyZW5jZSB0byB0aGUgT3ZlcmxhcHBlZCBvYmplY3QKKyAgICAgICAgIyB3aGljaCBpcyB1c2VkIGFzIGFuIHVuaXF1ZSBrZXkuCisgICAgICAgIHNlbGYuX3Byb2FjdG9yLl91bnJlZ2lzdGVyKHNlbGYuX292KQorICAgICAgICBzZWxmLl9wcm9hY3RvciA9IE5vbmUKKworICAgICAgICBzdXBlcigpLl91bnJlZ2lzdGVyX3dhaXRfY2IoZnV0KQorCisgICAgZGVmIF91bnJlZ2lzdGVyX3dhaXQoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9yZWdpc3RlcmVkOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQgPSBGYWxzZQorCisgICAgICAgIHdhaXRfaGFuZGxlID0gc2VsZi5fd2FpdF9oYW5kbGUKKyAgICAgICAgc2VsZi5fd2FpdF9oYW5kbGUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9vdmVybGFwcGVkLlVucmVnaXN0ZXJXYWl0RXgod2FpdF9oYW5kbGUsIHNlbGYuX2V2ZW50KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiBleGMud2luZXJyb3IgIT0gX292ZXJsYXBwZWQuRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0geworICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdGYWlsZWQgdG8gdW5yZWdpc3RlciB0aGUgd2FpdCBoYW5kbGUnLAorICAgICAgICAgICAgICAgICAgICAnZXhjZXB0aW9uJzogZXhjLAorICAgICAgICAgICAgICAgICAgICAnZnV0dXJlJzogc2VsZiwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dFsnc291cmNlX3RyYWNlYmFjayddID0gc2VsZi5fc291cmNlX3RyYWNlYmFjaworICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgIyBFUlJPUl9JT19QRU5ESU5HIGlzIG5vdCBhbiBlcnJvciwgdGhlIHdhaXQgd2FzIHVucmVnaXN0ZXJlZAorCisgICAgICAgIHNlbGYuX2V2ZW50X2Z1dCA9IHNlbGYuX3Byb2FjdG9yLl93YWl0X2NhbmNlbChzZWxmLl9ldmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VucmVnaXN0ZXJfd2FpdF9jYikKKworCitjbGFzcyBQaXBlU2VydmVyKG9iamVjdCk6CisgICAgIiIiQ2xhc3MgcmVwcmVzZW50aW5nIGEgcGlwZSBzZXJ2ZXIuCisKKyAgICBUaGlzIGlzIG11Y2ggbGlrZSBhIGJvdW5kLCBsaXN0ZW5pbmcgc29ja2V0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhZGRyZXNzKToKKyAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MKKyAgICAgICAgc2VsZi5fZnJlZV9pbnN0YW5jZXMgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICAjIGluaXRpYWxpemUgdGhlIHBpcGUgYXR0cmlidXRlIGJlZm9yZSBjYWxsaW5nIF9zZXJ2ZXJfcGlwZV9oYW5kbGUoKQorICAgICAgICAjIGJlY2F1c2UgdGhpcyBmdW5jdGlvbiBjYW4gcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCB0aGUgZGVzdHJ1Y3RvciBjYWxscworICAgICAgICAjIHRoZSBjbG9zZSgpIG1ldGhvZAorICAgICAgICBzZWxmLl9waXBlID0gTm9uZQorICAgICAgICBzZWxmLl9hY2NlcHRfcGlwZV9mdXR1cmUgPSBOb25lCisgICAgICAgIHNlbGYuX3BpcGUgPSBzZWxmLl9zZXJ2ZXJfcGlwZV9oYW5kbGUoVHJ1ZSkKKworICAgIGRlZiBfZ2V0X3VuY29ubmVjdGVkX3BpcGUoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIG5ldyBpbnN0YW5jZSBhbmQgcmV0dXJuIHByZXZpb3VzIG9uZS4gIFRoaXMgZW5zdXJlcworICAgICAgICAjIHRoYXQgKHVudGlsIHRoZSBzZXJ2ZXIgaXMgY2xvc2VkKSB0aGVyZSBpcyBhbHdheXMgYXQgbGVhc3QKKyAgICAgICAgIyBvbmUgcGlwZSBoYW5kbGUgZm9yIGFkZHJlc3MuICBUaGVyZWZvcmUgaWYgYSBjbGllbnQgYXR0ZW1wdAorICAgICAgICAjIHRvIGNvbm5lY3QgaXQgd2lsbCBub3QgZmFpbCB3aXRoIEZpbGVOb3RGb3VuZEVycm9yLgorICAgICAgICB0bXAsIHNlbGYuX3BpcGUgPSBzZWxmLl9waXBlLCBzZWxmLl9zZXJ2ZXJfcGlwZV9oYW5kbGUoRmFsc2UpCisgICAgICAgIHJldHVybiB0bXAKKworICAgIGRlZiBfc2VydmVyX3BpcGVfaGFuZGxlKHNlbGYsIGZpcnN0KToKKyAgICAgICAgIyBSZXR1cm4gYSB3cmFwcGVyIGZvciBhIG5ldyBwaXBlIGhhbmRsZS4KKyAgICAgICAgaWYgc2VsZi5jbG9zZWQoKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZsYWdzID0gX3dpbmFwaS5QSVBFX0FDQ0VTU19EVVBMRVggfCBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVECisgICAgICAgIGlmIGZpcnN0OgorICAgICAgICAgICAgZmxhZ3MgfD0gX3dpbmFwaS5GSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRQorICAgICAgICBoID0gX3dpbmFwaS5DcmVhdGVOYW1lZFBpcGUoCisgICAgICAgICAgICBzZWxmLl9hZGRyZXNzLCBmbGFncywKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9UWVBFX01FU1NBR0UgfCBfd2luYXBpLlBJUEVfUkVBRE1PREVfTUVTU0FHRSB8CisgICAgICAgICAgICBfd2luYXBpLlBJUEVfV0FJVCwKKyAgICAgICAgICAgIF93aW5hcGkuUElQRV9VTkxJTUlURURfSU5TVEFOQ0VTLAorICAgICAgICAgICAgd2luZG93c191dGlscy5CVUZTSVpFLCB3aW5kb3dzX3V0aWxzLkJVRlNJWkUsCisgICAgICAgICAgICBfd2luYXBpLk5NUFdBSVRfV0FJVF9GT1JFVkVSLCBfd2luYXBpLk5VTEwpCisgICAgICAgIHBpcGUgPSB3aW5kb3dzX3V0aWxzLlBpcGVIYW5kbGUoaCkKKyAgICAgICAgc2VsZi5fZnJlZV9pbnN0YW5jZXMuYWRkKHBpcGUpCisgICAgICAgIHJldHVybiBwaXBlCisKKyAgICBkZWYgY2xvc2VkKHNlbGYpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2FkZHJlc3MgaXMgTm9uZSkKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fYWNjZXB0X3BpcGVfZnV0dXJlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fYWNjZXB0X3BpcGVfZnV0dXJlLmNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLl9hY2NlcHRfcGlwZV9mdXR1cmUgPSBOb25lCisgICAgICAgICMgQ2xvc2UgYWxsIGluc3RhbmNlcyB3aGljaCBoYXZlIG5vdCBiZWVuIGNvbm5lY3RlZCB0byBieSBhIGNsaWVudC4KKyAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZvciBwaXBlIGluIHNlbGYuX2ZyZWVfaW5zdGFuY2VzOgorICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5fcGlwZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9mcmVlX2luc3RhbmNlcy5jbGVhcigpCisKKyAgICBfX2RlbF9fID0gY2xvc2UKKworCitjbGFzcyBfV2luZG93c1NlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9yX2V2ZW50cy5CYXNlU2VsZWN0b3JFdmVudExvb3ApOgorICAgICIiIldpbmRvd3MgdmVyc2lvbiBvZiBzZWxlY3RvciBldmVudCBsb29wLiIiIgorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5zb2NrZXRwYWlyKCkKKworCitjbGFzcyBQcm9hY3RvckV2ZW50TG9vcChwcm9hY3Rvcl9ldmVudHMuQmFzZVByb2FjdG9yRXZlbnRMb29wKToKKyAgICAiIiJXaW5kb3dzIHZlcnNpb24gb2YgcHJvYWN0b3IgZXZlbnQgbG9vcCB1c2luZyBJT0NQLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2FjdG9yPU5vbmUpOgorICAgICAgICBpZiBwcm9hY3RvciBpcyBOb25lOgorICAgICAgICAgICAgcHJvYWN0b3IgPSBJb2NwUHJvYWN0b3IoKQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHByb2FjdG9yKQorCisgICAgZGVmIF9zb2NrZXRwYWlyKHNlbGYpOgorICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5zb2NrZXRwYWlyKCkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgY3JlYXRlX3BpcGVfY29ubmVjdGlvbihzZWxmLCBwcm90b2NvbF9mYWN0b3J5LCBhZGRyZXNzKToKKyAgICAgICAgZiA9IHNlbGYuX3Byb2FjdG9yLmNvbm5lY3RfcGlwZShhZGRyZXNzKQorICAgICAgICBwaXBlID0geWllbGQgZnJvbSBmCisgICAgICAgIHByb3RvY29sID0gcHJvdG9jb2xfZmFjdG9yeSgpCisgICAgICAgIHRyYW5zID0gc2VsZi5fbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQocGlwZSwgcHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9eydhZGRyJzogYWRkcmVzc30pCisgICAgICAgIHJldHVybiB0cmFucywgcHJvdG9jb2wKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgc3RhcnRfc2VydmluZ19waXBlKHNlbGYsIHByb3RvY29sX2ZhY3RvcnksIGFkZHJlc3MpOgorICAgICAgICBzZXJ2ZXIgPSBQaXBlU2VydmVyKGFkZHJlc3MpCisKKyAgICAgICAgZGVmIGxvb3BfYWNjZXB0X3BpcGUoZj1Ob25lKToKKyAgICAgICAgICAgIHBpcGUgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZjoKKyAgICAgICAgICAgICAgICAgICAgcGlwZSA9IGYucmVzdWx0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VydmVyLl9mcmVlX2luc3RhbmNlcy5kaXNjYXJkKHBpcGUpCisKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VydmVyLmNsb3NlZCgpOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBIGNsaWVudCBjb25uZWN0ZWQgYmVmb3JlIHRoZSBzZXJ2ZXIgd2FzIGNsb3NlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZHJvcCB0aGUgY2xpZW50IChjbG9zZSB0aGUgcGlwZSkgYW5kIGV4aXQKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgICAgICAgICAgICAgcHJvdG9jb2wgPSBwcm90b2NvbF9mYWN0b3J5KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9kdXBsZXhfcGlwZV90cmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBwaXBlLCBwcm90b2NvbCwgZXh0cmE9eydhZGRyJzogYWRkcmVzc30pCisKKyAgICAgICAgICAgICAgICBwaXBlID0gc2VydmVyLl9nZXRfdW5jb25uZWN0ZWRfcGlwZSgpCisgICAgICAgICAgICAgICAgaWYgcGlwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAgICAgICAgIGYgPSBzZWxmLl9wcm9hY3Rvci5hY2NlcHRfcGlwZShwaXBlKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIHBpcGUgYW5kIHBpcGUuZmlsZW5vKCkgIT0gLTE6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsbF9leGNlcHRpb25faGFuZGxlcih7CisgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZSc6ICdQaXBlIGFjY2VwdCBmYWlsZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4Y2VwdGlvbic6IGV4YywKKyAgICAgICAgICAgICAgICAgICAgICAgICdwaXBlJzogcGlwZSwKKyAgICAgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICAgICAgcGlwZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgZWxpZiBzZWxmLl9kZWJ1ZzoKKyAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoIkFjY2VwdCBwaXBlIGZhaWxlZCBvbiBwaXBlICVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlwZSwgZXhjX2luZm89VHJ1ZSkKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIGlmIHBpcGU6CisgICAgICAgICAgICAgICAgICAgIHBpcGUuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZXJ2ZXIuX2FjY2VwdF9waXBlX2Z1dHVyZSA9IGYKKyAgICAgICAgICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGxvb3BfYWNjZXB0X3BpcGUpCisKKyAgICAgICAgc2VsZi5jYWxsX3Nvb24obG9vcF9hY2NlcHRfcGlwZSkKKyAgICAgICAgcmV0dXJuIFtzZXJ2ZXJdCisKKyAgICBAY29yb3V0aW5lCisgICAgZGVmIF9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW4sIHN0ZG91dCwgc3RkZXJyLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIHdhaXRlciA9IGZ1dHVyZXMuRnV0dXJlKGxvb3A9c2VsZikKKyAgICAgICAgdHJhbnNwID0gX1dpbmRvd3NTdWJwcm9jZXNzVHJhbnNwb3J0KHNlbGYsIHByb3RvY29sLCBhcmdzLCBzaGVsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluLCBzdGRvdXQsIHN0ZGVyciwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRlcj13YWl0ZXIsIGV4dHJhPWV4dHJhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgIyBXb3JrYXJvdW5kIENQeXRob24gYnVnICMyMzM1MzogdXNpbmcgeWllbGQveWllbGQtZnJvbSBpbiBhbgorICAgICAgICAgICAgIyBleGNlcHQgYmxvY2sgb2YgYSBnZW5lcmF0b3IgZG9lc24ndCBjbGVhciBwcm9wZXJseSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgZXJyID0gZXhjCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlcnIgPSBOb25lCisKKyAgICAgICAgaWYgZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdHJhbnNwLl93YWl0KCkKKyAgICAgICAgICAgIHJhaXNlIGVycgorCisgICAgICAgIHJldHVybiB0cmFuc3AKKworCitjbGFzcyBJb2NwUHJvYWN0b3I6CisgICAgIiIiUHJvYWN0b3IgaW1wbGVtZW50YXRpb24gdXNpbmcgSU9DUC4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb25jdXJyZW5jeT0weGZmZmZmZmZmKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IE5vbmUKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHNlbGYuX2lvY3AgPSBfb3ZlcmxhcHBlZC5DcmVhdGVJb0NvbXBsZXRpb25Qb3J0KAorICAgICAgICAgICAgX292ZXJsYXBwZWQuSU5WQUxJRF9IQU5ETEVfVkFMVUUsIE5VTEwsIDAsIGNvbmN1cnJlbmN5KQorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyZWQgPSB3ZWFrcmVmLldlYWtTZXQoKQorICAgICAgICBzZWxmLl91bnJlZ2lzdGVyZWQgPSBbXQorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcgPSB3ZWFrcmVmLldlYWtTZXQoKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCc8JXMgb3ZlcmxhcHBlZCM9JXMgcmVzdWx0Iz0lcz4nCisgICAgICAgICAgICAgICAgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGxlbihzZWxmLl9jYWNoZSksCisgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYuX3Jlc3VsdHMpKSkKKworICAgIGRlZiBzZXRfbG9vcChzZWxmLCBsb29wKToKKyAgICAgICAgc2VsZi5fbG9vcCA9IGxvb3AKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3Jlc3VsdHM6CisgICAgICAgICAgICBzZWxmLl9wb2xsKHRpbWVvdXQpCisgICAgICAgIHRtcCA9IHNlbGYuX3Jlc3VsdHMKKyAgICAgICAgc2VsZi5fcmVzdWx0cyA9IFtdCisgICAgICAgIHJldHVybiB0bXAKKworICAgIGRlZiBfcmVzdWx0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgZnV0ID0gZnV0dXJlcy5GdXR1cmUobG9vcD1zZWxmLl9sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIHJlY3Yoc2VsZiwgY29ubiwgbmJ5dGVzLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgICAgIG92LldTQVJlY3YoY29ubi5maWxlbm8oKSwgbmJ5dGVzLCBmbGFncykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgb3YuUmVhZEZpbGUoY29ubi5maWxlbm8oKSwgbmJ5dGVzKQorICAgICAgICBleGNlcHQgQnJva2VuUGlwZUVycm9yOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jlc3VsdChiJycpCisKKyAgICAgICAgZGVmIGZpbmlzaF9yZWN2KHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBleGMud2luZXJyb3IgPT0gX292ZXJsYXBwZWQuRVJST1JfTkVUTkFNRV9ERUxFVEVEOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBDb25uZWN0aW9uUmVzZXRFcnJvcigqZXhjLmFyZ3MpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIGNvbm4sIGZpbmlzaF9yZWN2KQorCisgICAgZGVmIHNlbmQoc2VsZiwgY29ubiwgYnVmLCBmbGFncz0wKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGNvbm4pCisgICAgICAgIG92ID0gX292ZXJsYXBwZWQuT3ZlcmxhcHBlZChOVUxMKQorICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNvY2tldC5zb2NrZXQpOgorICAgICAgICAgICAgb3YuV1NBU2VuZChjb25uLmZpbGVubygpLCBidWYsIGZsYWdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3YuV3JpdGVGaWxlKGNvbm4uZmlsZW5vKCksIGJ1ZikKKworICAgICAgICBkZWYgZmluaXNoX3NlbmQodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIGlmIGV4Yy53aW5lcnJvciA9PSBfb3ZlcmxhcHBlZC5FUlJPUl9ORVROQU1FX0RFTEVURUQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIENvbm5lY3Rpb25SZXNldEVycm9yKCpleGMuYXJncykKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoX3NlbmQpCisKKyAgICBkZWYgYWNjZXB0KHNlbGYsIGxpc3RlbmVyKToKKyAgICAgICAgc2VsZi5fcmVnaXN0ZXJfd2l0aF9pb2NwKGxpc3RlbmVyKQorICAgICAgICBjb25uID0gc2VsZi5fZ2V0X2FjY2VwdF9zb2NrZXQobGlzdGVuZXIuZmFtaWx5KQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgb3YuQWNjZXB0RXgobGlzdGVuZXIuZmlsZW5vKCksIGNvbm4uZmlsZW5vKCkpCisKKyAgICAgICAgZGVmIGZpbmlzaF9hY2NlcHQodHJhbnMsIGtleSwgb3YpOgorICAgICAgICAgICAgb3YuZ2V0cmVzdWx0KCkKKyAgICAgICAgICAgICMgVXNlIFNPX1VQREFURV9BQ0NFUFRfQ09OVEVYVCBzbyBnZXRzb2NrbmFtZSgpIGV0YyB3b3JrLgorICAgICAgICAgICAgYnVmID0gc3RydWN0LnBhY2soJ0BQJywgbGlzdGVuZXIuZmlsZW5vKCkpCisgICAgICAgICAgICBjb25uLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX292ZXJsYXBwZWQuU09fVVBEQVRFX0FDQ0VQVF9DT05URVhULCBidWYpCisgICAgICAgICAgICBjb25uLnNldHRpbWVvdXQobGlzdGVuZXIuZ2V0dGltZW91dCgpKQorICAgICAgICAgICAgcmV0dXJuIGNvbm4sIGNvbm4uZ2V0cGVlcm5hbWUoKQorCisgICAgICAgIEBjb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjY2VwdF9jb3JvKGZ1dHVyZSwgY29ubik6CisgICAgICAgICAgICAjIENvcm91dGluZSBjbG9zaW5nIHRoZSBhY2NlcHQgc29ja2V0IGlmIHRoZSBmdXR1cmUgaXMgY2FuY2VsbGVkCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXR1cmUKKyAgICAgICAgICAgIGV4Y2VwdCBmdXR1cmVzLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICAgICAgZnV0dXJlID0gc2VsZi5fcmVnaXN0ZXIob3YsIGxpc3RlbmVyLCBmaW5pc2hfYWNjZXB0KQorICAgICAgICBjb3JvID0gYWNjZXB0X2Nvcm8oZnV0dXJlLCBjb25uKQorICAgICAgICB0YXNrcy5lbnN1cmVfZnV0dXJlKGNvcm8sIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgcmV0dXJuIGZ1dHVyZQorCisgICAgZGVmIGNvbm5lY3Qoc2VsZiwgY29ubiwgYWRkcmVzcyk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChjb25uKQorICAgICAgICAjIFRoZSBzb2NrZXQgbmVlZHMgdG8gYmUgbG9jYWxseSBib3VuZCBiZWZvcmUgd2UgY2FsbCBDb25uZWN0RXgoKS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX292ZXJsYXBwZWQuQmluZExvY2FsKGNvbm4uZmlsZW5vKCksIGNvbm4uZmFtaWx5KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS53aW5lcnJvciAhPSBlcnJuby5XU0FFSU5WQUw6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICMgUHJvYmFibHkgYWxyZWFkeSBsb2NhbGx5IGJvdW5kOyBjaGVjayB1c2luZyBnZXRzb2NrbmFtZSgpLgorICAgICAgICAgICAgaWYgY29ubi5nZXRzb2NrbmFtZSgpWzFdID09IDA6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIG92LkNvbm5lY3RFeChjb25uLmZpbGVubygpLCBhZGRyZXNzKQorCisgICAgICAgIGRlZiBmaW5pc2hfY29ubmVjdCh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgIyBVc2UgU09fVVBEQVRFX0NPTk5FQ1RfQ09OVEVYVCBzbyBnZXRzb2NrbmFtZSgpIGV0YyB3b3JrLgorICAgICAgICAgICAgY29ubi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vdmVybGFwcGVkLlNPX1VQREFURV9DT05ORUNUX0NPTlRFWFQsIDApCisgICAgICAgICAgICByZXR1cm4gY29ubgorCisgICAgICAgIHJldHVybiBzZWxmLl9yZWdpc3RlcihvdiwgY29ubiwgZmluaXNoX2Nvbm5lY3QpCisKKyAgICBkZWYgYWNjZXB0X3BpcGUoc2VsZiwgcGlwZSk6CisgICAgICAgIHNlbGYuX3JlZ2lzdGVyX3dpdGhfaW9jcChwaXBlKQorICAgICAgICBvdiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoTlVMTCkKKyAgICAgICAgY29ubmVjdGVkID0gb3YuQ29ubmVjdE5hbWVkUGlwZShwaXBlLmZpbGVubygpKQorCisgICAgICAgIGlmIGNvbm5lY3RlZDoKKyAgICAgICAgICAgICMgQ29ubmVjdE5hbWVQaXBlKCkgZmFpbGVkIHdpdGggRVJST1JfUElQRV9DT05ORUNURUQgd2hpY2ggbWVhbnMKKyAgICAgICAgICAgICMgdGhhdCB0aGUgcGlwZSBpcyBjb25uZWN0ZWQuIFRoZXJlIGlzIG5vIG5lZWQgdG8gd2FpdCBmb3IgdGhlCisgICAgICAgICAgICAjIGNvbXBsZXRpb24gb2YgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcmVzdWx0KHBpcGUpCisKKyAgICAgICAgZGVmIGZpbmlzaF9hY2NlcHRfcGlwZSh0cmFucywga2V5LCBvdik6CisgICAgICAgICAgICBvdi5nZXRyZXN1bHQoKQorICAgICAgICAgICAgcmV0dXJuIHBpcGUKKworICAgICAgICByZXR1cm4gc2VsZi5fcmVnaXN0ZXIob3YsIHBpcGUsIGZpbmlzaF9hY2NlcHRfcGlwZSkKKworICAgIEBjb3JvdXRpbmUKKyAgICBkZWYgY29ubmVjdF9waXBlKHNlbGYsIGFkZHJlc3MpOgorICAgICAgICBkZWxheSA9IENPTk5FQ1RfUElQRV9JTklUX0RFTEFZCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAjIFVuZm9ydHVuYXRlbHkgdGhlcmUgaXMgbm8gd2F5IHRvIGRvIGFuIG92ZXJsYXBwZWQgY29ubmVjdCB0byBhIHBpcGUuCisgICAgICAgICAgICAjIENhbGwgQ3JlYXRlRmlsZSgpIGluIGEgbG9vcCB1bnRpbCBpdCBkb2Vzbid0IGZhaWwgd2l0aAorICAgICAgICAgICAgIyBFUlJPUl9QSVBFX0JVU1kKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBoYW5kbGUgPSBfb3ZlcmxhcHBlZC5Db25uZWN0UGlwZShhZGRyZXNzKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgaWYgZXhjLndpbmVycm9yICE9IF9vdmVybGFwcGVkLkVSUk9SX1BJUEVfQlVTWToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICAgICAgIyBDb25uZWN0UGlwZSgpIGZhaWxlZCB3aXRoIEVSUk9SX1BJUEVfQlVTWTogcmV0cnkgbGF0ZXIKKyAgICAgICAgICAgIGRlbGF5ID0gbWluKGRlbGF5ICogMiwgQ09OTkVDVF9QSVBFX01BWF9ERUxBWSkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdGFza3Muc2xlZXAoZGVsYXksIGxvb3A9c2VsZi5fbG9vcCkKKworICAgICAgICByZXR1cm4gd2luZG93c191dGlscy5QaXBlSGFuZGxlKGhhbmRsZSkKKworICAgIGRlZiB3YWl0X2Zvcl9oYW5kbGUoc2VsZiwgaGFuZGxlLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICAiIiJXYWl0IGZvciBhIGhhbmRsZS4KKworICAgICAgICBSZXR1cm4gYSBGdXR1cmUgb2JqZWN0LiBUaGUgcmVzdWx0IG9mIHRoZSBmdXR1cmUgaXMgVHJ1ZSBpZiB0aGUgd2FpdAorICAgICAgICBjb21wbGV0ZWQsIG9yIEZhbHNlIGlmIHRoZSB3YWl0IGRpZCBub3QgY29tcGxldGUgKG9uIHRpbWVvdXQpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3dhaXRfZm9yX2hhbmRsZShoYW5kbGUsIHRpbWVvdXQsIEZhbHNlKQorCisgICAgZGVmIF93YWl0X2NhbmNlbChzZWxmLCBldmVudCwgZG9uZV9jYWxsYmFjayk6CisgICAgICAgIGZ1dCA9IHNlbGYuX3dhaXRfZm9yX2hhbmRsZShldmVudCwgTm9uZSwgVHJ1ZSkKKyAgICAgICAgIyBhZGRfZG9uZV9jYWxsYmFjaygpIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgdGhlIHdhaXQgbWF5IG9ubHkgY29tcGxldGUKKyAgICAgICAgIyBpbiBJb2NwUHJvYWN0b3IuY2xvc2UoKSwgd2hpbGUgdGhlIGV2ZW50IGxvb3AgaXMgbm90IHJ1bm5pbmcuCisgICAgICAgIGZ1dC5fZG9uZV9jYWxsYmFjayA9IGRvbmVfY2FsbGJhY2sKKyAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgZGVmIF93YWl0X2Zvcl9oYW5kbGUoc2VsZiwgaGFuZGxlLCB0aW1lb3V0LCBfaXNfY2FuY2VsKToKKyAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgorICAgICAgICAgICAgbXMgPSBfd2luYXBpLklORklOSVRFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwKKyAgICAgICAgICAgICMgcm91bmQgYXdheSBmcm9tIHplcm8gdG8gd2FpdCAqYXQgbGVhc3QqIHRpbWVvdXQgc2Vjb25kcy4KKyAgICAgICAgICAgIG1zID0gbWF0aC5jZWlsKHRpbWVvdXQgKiAxZTMpCisKKyAgICAgICAgIyBXZSBvbmx5IGNyZWF0ZSBvdiBzbyB3ZSBjYW4gdXNlIG92LmFkZHJlc3MgYXMgYSBrZXkgZm9yIHRoZSBjYWNoZS4KKyAgICAgICAgb3YgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKE5VTEwpCisgICAgICAgIHdhaXRfaGFuZGxlID0gX292ZXJsYXBwZWQuUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlKAorICAgICAgICAgICAgaGFuZGxlLCBzZWxmLl9pb2NwLCBvdi5hZGRyZXNzLCBtcykKKyAgICAgICAgaWYgX2lzX2NhbmNlbDoKKyAgICAgICAgICAgIGYgPSBfV2FpdENhbmNlbEZ1dHVyZShvdiwgaGFuZGxlLCB3YWl0X2hhbmRsZSwgbG9vcD1zZWxmLl9sb29wKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZiA9IF9XYWl0SGFuZGxlRnV0dXJlKG92LCBoYW5kbGUsIHdhaXRfaGFuZGxlLCBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5fbG9vcCkKKyAgICAgICAgaWYgZi5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgIGRlbCBmLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorCisgICAgICAgIGRlZiBmaW5pc2hfd2FpdF9mb3JfaGFuZGxlKHRyYW5zLCBrZXksIG92KToKKyAgICAgICAgICAgICMgTm90ZSB0aGF0IHRoaXMgc2Vjb25kIHdhaXQgbWVhbnMgdGhhdCB3ZSBzaG91bGQgb25seSB1c2UKKyAgICAgICAgICAgICMgdGhpcyB3aXRoIGhhbmRsZXMgdHlwZXMgd2hlcmUgYSBzdWNjZXNzZnVsIHdhaXQgaGFzIG5vCisgICAgICAgICAgICAjIGVmZmVjdC4gIFNvIGV2ZW50cyBvciBwcm9jZXNzZXMgYXJlIGFsbCByaWdodCwgYnV0IGxvY2tzCisgICAgICAgICAgICAjIG9yIHNlbWFwaG9yZXMgYXJlIG5vdC4gIEFsc28gbm90ZSBpZiB0aGUgaGFuZGxlIGlzCisgICAgICAgICAgICAjIHNpZ25hbGxlZCBhbmQgdGhlbiBxdWlja2x5IHJlc2V0LCB0aGVuIHdlIG1heSByZXR1cm4KKyAgICAgICAgICAgICMgRmFsc2UgZXZlbiB0aG91Z2ggd2UgaGF2ZSBub3QgdGltZWQgb3V0LgorICAgICAgICAgICAgcmV0dXJuIGYuX3BvbGwoKQorCisgICAgICAgIHNlbGYuX2NhY2hlW292LmFkZHJlc3NdID0gKGYsIG92LCAwLCBmaW5pc2hfd2FpdF9mb3JfaGFuZGxlKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIF9yZWdpc3Rlcl93aXRoX2lvY3Aoc2VsZiwgb2JqKToKKyAgICAgICAgIyBUbyBnZXQgbm90aWZpY2F0aW9ucyBvZiBmaW5pc2hlZCBvcHMgb24gdGhpcyBvYmplY3RzIHNlbnQgdG8gdGhlCisgICAgICAgICMgY29tcGxldGlvbiBwb3J0LCB3ZXJlIG11c3QgcmVnaXN0ZXIgdGhlIGhhbmRsZS4KKyAgICAgICAgaWYgb2JqIG5vdCBpbiBzZWxmLl9yZWdpc3RlcmVkOgorICAgICAgICAgICAgc2VsZi5fcmVnaXN0ZXJlZC5hZGQob2JqKQorICAgICAgICAgICAgX292ZXJsYXBwZWQuQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChvYmouZmlsZW5vKCksIHNlbGYuX2lvY3AsIDAsIDApCisgICAgICAgICAgICAjIFhYWCBXZSBjb3VsZCBhbHNvIHVzZSBTZXRGaWxlQ29tcGxldGlvbk5vdGlmaWNhdGlvbk1vZGVzKCkKKyAgICAgICAgICAgICMgdG8gYXZvaWQgc2VuZGluZyBub3RpZmljYXRpb25zIHRvIGNvbXBsZXRpb24gcG9ydCBvZiBvcHMKKyAgICAgICAgICAgICMgdGhhdCBzdWNjZWVkIGltbWVkaWF0ZWx5LgorCisgICAgZGVmIF9yZWdpc3RlcihzZWxmLCBvdiwgb2JqLCBjYWxsYmFjayk6CisgICAgICAgICMgUmV0dXJuIGEgZnV0dXJlIHdoaWNoIHdpbGwgYmUgc2V0IHdpdGggdGhlIHJlc3VsdCBvZiB0aGUKKyAgICAgICAgIyBvcGVyYXRpb24gd2hlbiBpdCBjb21wbGV0ZXMuICBUaGUgZnV0dXJlJ3MgdmFsdWUgaXMgYWN0dWFsbHkKKyAgICAgICAgIyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgY2FsbGJhY2soKS4KKyAgICAgICAgZiA9IF9PdmVybGFwcGVkRnV0dXJlKG92LCBsb29wPXNlbGYuX2xvb3ApCisgICAgICAgIGlmIGYuX3NvdXJjZV90cmFjZWJhY2s6CisgICAgICAgICAgICBkZWwgZi5fc291cmNlX3RyYWNlYmFja1stMV0KKyAgICAgICAgaWYgbm90IG92LnBlbmRpbmc6CisgICAgICAgICAgICAjIFRoZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZCwgc28gbm8gbmVlZCB0byBwb3N0cG9uZSB0aGUKKyAgICAgICAgICAgICMgd29yay4gIFdlIGNhbm5vdCB0YWtlIHRoaXMgc2hvcnQgY3V0IGlmIHdlIG5lZWQgdGhlCisgICAgICAgICAgICAjIE51bWJlck9mQnl0ZXMsIENvbXBsZXRpb25LZXkgdmFsdWVzIHJldHVybmVkIGJ5CisgICAgICAgICAgICAjIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayhOb25lLCBOb25lLCBvdikKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYuc2V0X3Jlc3VsdCh2YWx1ZSkKKyAgICAgICAgICAgICMgRXZlbiBpZiBHZXRPdmVybGFwcGVkUmVzdWx0KCkgd2FzIGNhbGxlZCwgd2UgaGF2ZSB0byB3YWl0IGZvciB0aGUKKyAgICAgICAgICAgICMgbm90aWZpY2F0aW9uIG9mIHRoZSBjb21wbGV0aW9uIGluIEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoKS4KKyAgICAgICAgICAgICMgUmVnaXN0ZXIgdGhlIG92ZXJsYXBwZWQgb3BlcmF0aW9uIHRvIGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICAgICAjIE9WRVJMQVBQRUQgb2JqZWN0LCBvdGhlcndpc2UgdGhlIG1lbW9yeSBpcyBmcmVlZCBhbmQgV2luZG93cyBtYXkKKyAgICAgICAgICAgICMgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeS4KKworICAgICAgICAjIFJlZ2lzdGVyIHRoZSBvdmVybGFwcGVkIG9wZXJhdGlvbiBmb3IgbGF0ZXIuICBOb3RlIHRoYXQKKyAgICAgICAgIyB3ZSBvbmx5IHN0b3JlIG9iaiB0byBwcmV2ZW50IGl0IGZyb20gYmVpbmcgZ2FyYmFnZQorICAgICAgICAjIGNvbGxlY3RlZCB0b28gZWFybHkuCisgICAgICAgIHNlbGYuX2NhY2hlW292LmFkZHJlc3NdID0gKGYsIG92LCBvYmosIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4gZgorCisgICAgZGVmIF91bnJlZ2lzdGVyKHNlbGYsIG92KToKKyAgICAgICAgIiIiVW5yZWdpc3RlciBhbiBvdmVybGFwcGVkIG9iamVjdC4KKworICAgICAgICBDYWxsIHRoaXMgbWV0aG9kIHdoZW4gaXRzIGZ1dHVyZSBoYXMgYmVlbiBjYW5jZWxsZWQuIFRoZSBldmVudCBjYW4KKyAgICAgICAgYWxyZWFkeSBiZSBzaWduYWxsZWQgKHBlbmRpbmcgaW4gdGhlIHByb2FjdG9yIGV2ZW50IHF1ZXVlKS4gSXQgaXMgYWxzbworICAgICAgICBzYWZlIGlmIHRoZSBldmVudCBpcyBuZXZlciBzaWduYWxsZWQgKGJlY2F1c2UgaXQgd2FzIGNhbmNlbGxlZCkuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl91bnJlZ2lzdGVyZWQuYXBwZW5kKG92KQorCisgICAgZGVmIF9nZXRfYWNjZXB0X3NvY2tldChzZWxmLCBmYW1pbHkpOgorICAgICAgICBzID0gc29ja2V0LnNvY2tldChmYW1pbHkpCisgICAgICAgIHMuc2V0dGltZW91dCgwKQorICAgICAgICByZXR1cm4gcworCisgICAgZGVmIF9wb2xsKHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgIG1zID0gSU5GSU5JVEUKKyAgICAgICAgZWxpZiB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5lZ2F0aXZlIHRpbWVvdXQiKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkgaGFzIGEgcmVzb2x1dGlvbiBvZiAxIG1pbGxpc2Vjb25kLAorICAgICAgICAgICAgIyByb3VuZCBhd2F5IGZyb20gemVybyB0byB3YWl0ICphdCBsZWFzdCogdGltZW91dCBzZWNvbmRzLgorICAgICAgICAgICAgbXMgPSBtYXRoLmNlaWwodGltZW91dCAqIDFlMykKKyAgICAgICAgICAgIGlmIG1zID49IElORklOSVRFOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInRpbWVvdXQgdG9vIGJpZyIpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHN0YXR1cyA9IF9vdmVybGFwcGVkLkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoc2VsZi5faW9jcCwgbXMpCisgICAgICAgICAgICBpZiBzdGF0dXMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgbXMgPSAwCisKKyAgICAgICAgICAgIGVyciwgdHJhbnNmZXJyZWQsIGtleSwgYWRkcmVzcyA9IHN0YXR1cworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGYsIG92LCBvYmosIGNhbGxiYWNrID0gc2VsZi5fY2FjaGUucG9wKGFkZHJlc3MpCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcC5nZXRfZGVidWcoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fbG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJzogKCdHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKCkgcmV0dXJuZWQgYW4gJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuZXhwZWN0ZWQgZXZlbnQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdzdGF0dXMnOiAoJ2Vycj0lcyB0cmFuc2ZlcnJlZD0lcyBrZXk9JSN4IGFkZHJlc3M9JSN4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChlcnIsIHRyYW5zZmVycmVkLCBrZXksIGFkZHJlc3MpKSwKKyAgICAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAgICAgICAgICMga2V5IGlzIGVpdGhlciB6ZXJvLCBvciBpdCBpcyB1c2VkIHRvIHJldHVybiBhIHBpcGUKKyAgICAgICAgICAgICAgICAjIGhhbmRsZSB3aGljaCBzaG91bGQgYmUgY2xvc2VkIHRvIGF2b2lkIGEgbGVhay4KKyAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgwLCBfb3ZlcmxhcHBlZC5JTlZBTElEX0hBTkRMRV9WQUxVRSk6CisgICAgICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoa2V5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG9iaiBpbiBzZWxmLl9zdG9wcGVkX3NlcnZpbmc6CisgICAgICAgICAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICAgICAgIyBEb24ndCBjYWxsIHRoZSBjYWxsYmFjayBpZiBfcmVnaXN0ZXIoKSBhbHJlYWR5IHJlYWQgdGhlIHJlc3VsdCBvcgorICAgICAgICAgICAgIyBpZiB0aGUgb3ZlcmxhcHBlZCBoYXMgYmVlbiBjYW5jZWxsZWQKKyAgICAgICAgICAgIGVsaWYgbm90IGYuZG9uZSgpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWxsYmFjayh0cmFuc2ZlcnJlZCwga2V5LCBvdikKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBmLnNldF9leGNlcHRpb24oZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVzdWx0cy5hcHBlbmQoZikKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmLnNldF9yZXN1bHQodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jlc3VsdHMuYXBwZW5kKGYpCisKKyAgICAgICAgIyBSZW1vdmUgdW5yZWdpc3RlZCBmdXR1cmVzCisgICAgICAgIGZvciBvdiBpbiBzZWxmLl91bnJlZ2lzdGVyZWQ6CisgICAgICAgICAgICBzZWxmLl9jYWNoZS5wb3Aob3YuYWRkcmVzcywgTm9uZSkKKyAgICAgICAgc2VsZi5fdW5yZWdpc3RlcmVkLmNsZWFyKCkKKworICAgIGRlZiBfc3RvcF9zZXJ2aW5nKHNlbGYsIG9iaik6CisgICAgICAgICMgb2JqIGlzIGEgc29ja2V0IG9yIHBpcGUgaGFuZGxlLiAgSXQgd2lsbCBiZSBjbG9zZWQgaW4KKyAgICAgICAgIyBCYXNlUHJvYWN0b3JFdmVudExvb3AuX3N0b3Bfc2VydmluZygpIHdoaWNoIHdpbGwgbWFrZSBhbnkKKyAgICAgICAgIyBwZW5kaW5nIG9wZXJhdGlvbnMgZmFpbCBxdWlja2x5LgorICAgICAgICBzZWxmLl9zdG9wcGVkX3NlcnZpbmcuYWRkKG9iaikKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIyBDYW5jZWwgcmVtYWluaW5nIHJlZ2lzdGVyZWQgb3BlcmF0aW9ucy4KKyAgICAgICAgZm9yIGFkZHJlc3MsIChmdXQsIG92LCBvYmosIGNhbGxiYWNrKSBpbiBsaXN0KHNlbGYuX2NhY2hlLml0ZW1zKCkpOgorICAgICAgICAgICAgaWYgZnV0LmNhbmNlbGxlZCgpOgorICAgICAgICAgICAgICAgICMgTm90aGluZyB0byBkbyB3aXRoIGNhbmNlbGxlZCBmdXR1cmVzCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGZ1dCwgX1dhaXRDYW5jZWxGdXR1cmUpOgorICAgICAgICAgICAgICAgICMgX1dhaXRDYW5jZWxGdXR1cmUgbXVzdCBub3QgYmUgY2FuY2VsbGVkCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21lc3NhZ2UnOiAnQ2FuY2VsbGluZyBhIGZ1dHVyZSBmYWlsZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGNlcHRpb24nOiBleGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1dHVyZSc6IGZ1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZ1dC5fc291cmNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Wydzb3VyY2VfdHJhY2ViYWNrJ10gPSBmdXQuX3NvdXJjZV90cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlcihjb250ZXh0KQorCisgICAgICAgIHdoaWxlIHNlbGYuX2NhY2hlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX3BvbGwoMSk6CisgICAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKCd0YWtpbmcgbG9uZyB0aW1lIHRvIGNsb3NlIHByb2FjdG9yJykKKworICAgICAgICBzZWxmLl9yZXN1bHRzID0gW10KKyAgICAgICAgaWYgc2VsZi5faW9jcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoc2VsZi5faW9jcCkKKyAgICAgICAgICAgIHNlbGYuX2lvY3AgPSBOb25lCisKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKKworY2xhc3MgX1dpbmRvd3NTdWJwcm9jZXNzVHJhbnNwb3J0KGJhc2Vfc3VicHJvY2Vzcy5CYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisKKyAgICBkZWYgX3N0YXJ0KHNlbGYsIGFyZ3MsIHNoZWxsLCBzdGRpbiwgc3Rkb3V0LCBzdGRlcnIsIGJ1ZnNpemUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5fcHJvYyA9IHdpbmRvd3NfdXRpbHMuUG9wZW4oCisgICAgICAgICAgICBhcmdzLCBzaGVsbD1zaGVsbCwgc3RkaW49c3RkaW4sIHN0ZG91dD1zdGRvdXQsIHN0ZGVycj1zdGRlcnIsCisgICAgICAgICAgICBidWZzaXplPWJ1ZnNpemUsICoqa3dhcmdzKQorCisgICAgICAgIGRlZiBjYWxsYmFjayhmKToKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLl9wcm9jLnBvbGwoKQorICAgICAgICAgICAgc2VsZi5fcHJvY2Vzc19leGl0ZWQocmV0dXJuY29kZSkKKworICAgICAgICBmID0gc2VsZi5fbG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGludChzZWxmLl9wcm9jLl9oYW5kbGUpKQorICAgICAgICBmLmFkZF9kb25lX2NhbGxiYWNrKGNhbGxiYWNrKQorCisKK1NlbGVjdG9yRXZlbnRMb29wID0gX1dpbmRvd3NTZWxlY3RvckV2ZW50TG9vcAorCisKK2NsYXNzIF9XaW5kb3dzRGVmYXVsdEV2ZW50TG9vcFBvbGljeShldmVudHMuQmFzZURlZmF1bHRFdmVudExvb3BQb2xpY3kpOgorICAgIF9sb29wX2ZhY3RvcnkgPSBTZWxlY3RvckV2ZW50TG9vcAorCisKK0RlZmF1bHRFdmVudExvb3BQb2xpY3kgPSBfV2luZG93c0RlZmF1bHRFdmVudExvb3BQb2xpY3kKZGlmZiAtLWdpdCBhL0xpYi9hc3luY2lvL3dpbmRvd3NfdXRpbHMucHkgYi9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MGNkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvYXN5bmNpby93aW5kb3dzX3V0aWxzLnB5CkBAIC0wLDAgKzEsMjIzIEBACisiIiIKK1ZhcmlvdXMgV2luZG93cyBzcGVjaWZpYyBiaXRzIGFuZCBwaWVjZXMKKyIiIgorCitpbXBvcnQgc3lzCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOiAgIyBwcmFnbWE6IG5vIGNvdmVyCisgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3dpbjMyIG9ubHknKQorCitpbXBvcnQgX3dpbmFwaQoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG1zdmNydAoraW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgd2FybmluZ3MKKworCitfX2FsbF9fID0gWydzb2NrZXRwYWlyJywgJ3BpcGUnLCAnUG9wZW4nLCAnUElQRScsICdQaXBlSGFuZGxlJ10KKworCisjIENvbnN0YW50cy9nbG9iYWxzCisKKworQlVGU0laRSA9IDgxOTIKK1BJUEUgPSBzdWJwcm9jZXNzLlBJUEUKK1NURE9VVCA9IHN1YnByb2Nlc3MuU1RET1VUCitfbW1hcF9jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KCkKKworCitpZiBoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKToKKyAgICAjIFNpbmNlIFB5dGhvbiAzLjUsIHNvY2tldC5zb2NrZXRwYWlyKCkgaXMgbm93IGFsc28gYXZhaWxhYmxlIG9uIFdpbmRvd3MKKyAgICBzb2NrZXRwYWlyID0gc29ja2V0LnNvY2tldHBhaXIKK2Vsc2U6CisgICAgIyBSZXBsYWNlbWVudCBmb3Igc29ja2V0LnNvY2tldHBhaXIoKQorICAgIGRlZiBzb2NrZXRwYWlyKGZhbWlseT1zb2NrZXQuQUZfSU5FVCwgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0sIHByb3RvPTApOgorICAgICAgICAiIiJBIHNvY2tldCBwYWlyIHVzYWJsZSBhcyBhIHNlbGYtcGlwZSwgZm9yIFdpbmRvd3MuCisKKyAgICAgICAgT3JpZ2luOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS80MzI1NzgzLCBieSBHZWVydCBKYW5zZW4uCisgICAgICAgIFB1YmxpYyBkb21haW4uCisgICAgICAgICIiIgorICAgICAgICBpZiBmYW1pbHkgPT0gc29ja2V0LkFGX0lORVQ6CisgICAgICAgICAgICBob3N0ID0gJzEyNy4wLjAuMScKKyAgICAgICAgZWxpZiBmYW1pbHkgPT0gc29ja2V0LkFGX0lORVQ2OgorICAgICAgICAgICAgaG9zdCA9ICc6OjEnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJPbmx5IEFGX0lORVQgYW5kIEFGX0lORVQ2IHNvY2tldCBhZGRyZXNzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhbWlsaWVzIGFyZSBzdXBwb3J0ZWQiKQorICAgICAgICBpZiB0eXBlICE9IHNvY2tldC5TT0NLX1NUUkVBTToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk9ubHkgU09DS19TVFJFQU0gc29ja2V0IHR5cGUgaXMgc3VwcG9ydGVkIikKKyAgICAgICAgaWYgcHJvdG8gIT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk9ubHkgcHJvdG9jb2wgemVybyBpcyBzdXBwb3J0ZWQiKQorCisgICAgICAgICMgV2UgY3JlYXRlIGEgY29ubmVjdGVkIFRDUCBzb2NrZXQuIE5vdGUgdGhlIHRyaWNrIHdpdGggc2V0YmxvY2tpbmcoMCkKKyAgICAgICAgIyB0aGF0IHByZXZlbnRzIHVzIGZyb20gaGF2aW5nIHRvIGNyZWF0ZSBhIHRocmVhZC4KKyAgICAgICAgbHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxzb2NrLmJpbmQoKGhvc3QsIDApKQorICAgICAgICAgICAgbHNvY2subGlzdGVuKDEpCisgICAgICAgICAgICAjIE9uIElQdjYsIGlnbm9yZSBmbG93X2luZm8gYW5kIHNjb3BlX2lkCisgICAgICAgICAgICBhZGRyLCBwb3J0ID0gbHNvY2suZ2V0c29ja25hbWUoKVs6Ml0KKyAgICAgICAgICAgIGNzb2NrID0gc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY3NvY2suY29ubmVjdCgoYWRkciwgcG9ydCkpCisgICAgICAgICAgICAgICAgZXhjZXB0IChCbG9ja2luZ0lPRXJyb3IsIEludGVycnVwdGVkRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgY3NvY2suc2V0YmxvY2tpbmcoVHJ1ZSkKKyAgICAgICAgICAgICAgICBzc29jaywgXyA9IGxzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgY3NvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsc29jay5jbG9zZSgpCisgICAgICAgIHJldHVybiAoc3NvY2ssIGNzb2NrKQorCisKKyMgUmVwbGFjZW1lbnQgZm9yIG9zLnBpcGUoKSB1c2luZyBoYW5kbGVzIGluc3RlYWQgb2YgZmRzCisKKworZGVmIHBpcGUoKiwgZHVwbGV4PUZhbHNlLCBvdmVybGFwcGVkPShUcnVlLCBUcnVlKSwgYnVmc2l6ZT1CVUZTSVpFKToKKyAgICAiIiJMaWtlIG9zLnBpcGUoKSBidXQgd2l0aCBvdmVybGFwcGVkIHN1cHBvcnQgYW5kIHVzaW5nIGhhbmRsZXMgbm90IGZkcy4iIiIKKyAgICBhZGRyZXNzID0gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD1yJ1xcLlxwaXBlXHB5dGhvbi1waXBlLSVkLSVkLScgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zLmdldHBpZCgpLCBuZXh0KF9tbWFwX2NvdW50ZXIpKSkKKworICAgIGlmIGR1cGxleDoKKyAgICAgICAgb3Blbm1vZGUgPSBfd2luYXBpLlBJUEVfQUNDRVNTX0RVUExFWAorICAgICAgICBhY2Nlc3MgPSBfd2luYXBpLkdFTkVSSUNfUkVBRCB8IF93aW5hcGkuR0VORVJJQ19XUklURQorICAgICAgICBvYnNpemUsIGlic2l6ZSA9IGJ1ZnNpemUsIGJ1ZnNpemUKKyAgICBlbHNlOgorICAgICAgICBvcGVubW9kZSA9IF93aW5hcGkuUElQRV9BQ0NFU1NfSU5CT1VORAorICAgICAgICBhY2Nlc3MgPSBfd2luYXBpLkdFTkVSSUNfV1JJVEUKKyAgICAgICAgb2JzaXplLCBpYnNpemUgPSAwLCBidWZzaXplCisKKyAgICBvcGVubW9kZSB8PSBfd2luYXBpLkZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFCisKKyAgICBpZiBvdmVybGFwcGVkWzBdOgorICAgICAgICBvcGVubW9kZSB8PSBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVECisKKyAgICBpZiBvdmVybGFwcGVkWzFdOgorICAgICAgICBmbGFnc19hbmRfYXR0cmlicyA9IF93aW5hcGkuRklMRV9GTEFHX09WRVJMQVBQRUQKKyAgICBlbHNlOgorICAgICAgICBmbGFnc19hbmRfYXR0cmlicyA9IDAKKworICAgIGgxID0gaDIgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBoMSA9IF93aW5hcGkuQ3JlYXRlTmFtZWRQaXBlKAorICAgICAgICAgICAgYWRkcmVzcywgb3Blbm1vZGUsIF93aW5hcGkuUElQRV9XQUlULAorICAgICAgICAgICAgMSwgb2JzaXplLCBpYnNpemUsIF93aW5hcGkuTk1QV0FJVF9XQUlUX0ZPUkVWRVIsIF93aW5hcGkuTlVMTCkKKworICAgICAgICBoMiA9IF93aW5hcGkuQ3JlYXRlRmlsZSgKKyAgICAgICAgICAgIGFkZHJlc3MsIGFjY2VzcywgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCisgICAgICAgICAgICBmbGFnc19hbmRfYXR0cmlicywgX3dpbmFwaS5OVUxMKQorCisgICAgICAgIG92ID0gX3dpbmFwaS5Db25uZWN0TmFtZWRQaXBlKGgxLCBvdmVybGFwcGVkPVRydWUpCisgICAgICAgIG92LkdldE92ZXJsYXBwZWRSZXN1bHQoVHJ1ZSkKKyAgICAgICAgcmV0dXJuIGgxLCBoMgorICAgIGV4Y2VwdDoKKyAgICAgICAgaWYgaDEgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgxKQorICAgICAgICBpZiBoMiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDIpCisgICAgICAgIHJhaXNlCisKKworIyBXcmFwcGVyIGZvciBhIHBpcGUgaGFuZGxlCisKKworY2xhc3MgUGlwZUhhbmRsZToKKyAgICAiIiJXcmFwcGVyIGZvciBhbiBvdmVybGFwcGVkIHBpcGUgaGFuZGxlIHdoaWNoIGlzIHZhZ3VlbHkgZmlsZS1vYmplY3QgbGlrZS4KKworICAgIFRoZSBJT0NQIGV2ZW50IGxvb3AgY2FuIHVzZSB0aGVzZSBpbnN0ZWFkIG9mIHNvY2tldCBvYmplY3RzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGUpOgorICAgICAgICBzZWxmLl9oYW5kbGUgPSBoYW5kbGUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5faGFuZGxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaGFuZGxlID0gJ2hhbmRsZT0lcicgJSBzZWxmLl9oYW5kbGUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhhbmRsZSA9ICdjbG9zZWQnCisgICAgICAgIHJldHVybiAnPCVzICVzPicgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIGhhbmRsZSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYW5kbGUoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKworICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2hhbmRsZSBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvb24gb24gY2xvc2VkIHBpcGUiKQorICAgICAgICByZXR1cm4gc2VsZi5faGFuZGxlCisKKyAgICBkZWYgY2xvc2Uoc2VsZiwgKiwgQ2xvc2VIYW5kbGU9X3dpbmFwaS5DbG9zZUhhbmRsZSk6CisgICAgICAgIGlmIHNlbGYuX2hhbmRsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHNlbGYuX2hhbmRsZSkKKyAgICAgICAgICAgIHNlbGYuX2hhbmRsZSA9IE5vbmUKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9oYW5kbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCAlciIgJSBzZWxmLCBSZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgdCwgdiwgdGIpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworCisjIFJlcGxhY2VtZW50IGZvciBzdWJwcm9jZXNzLlBvcGVuIHVzaW5nIG92ZXJsYXBwZWQgcGlwZSBoYW5kbGVzCisKKworY2xhc3MgUG9wZW4oc3VicHJvY2Vzcy5Qb3Blbik6CisgICAgIiIiUmVwbGFjZW1lbnQgZm9yIHN1YnByb2Nlc3MuUG9wZW4gdXNpbmcgb3ZlcmxhcHBlZCBwaXBlIGhhbmRsZXMuCisKKyAgICBUaGUgc3RkaW4sIHN0ZG91dCwgc3RkZXJyIGFyZSBOb25lIG9yIGluc3RhbmNlcyBvZiBQaXBlSGFuZGxlLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhcmdzLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsICoqa3dkcyk6CisgICAgICAgIGFzc2VydCBub3Qga3dkcy5nZXQoJ3VuaXZlcnNhbF9uZXdsaW5lcycpCisgICAgICAgIGFzc2VydCBrd2RzLmdldCgnYnVmc2l6ZScsIDApID09IDAKKyAgICAgICAgc3RkaW5fcmZkID0gc3Rkb3V0X3dmZCA9IHN0ZGVycl93ZmQgPSBOb25lCisgICAgICAgIHN0ZGluX3doID0gc3Rkb3V0X3JoID0gc3RkZXJyX3JoID0gTm9uZQorICAgICAgICBpZiBzdGRpbiA9PSBQSVBFOgorICAgICAgICAgICAgc3RkaW5fcmgsIHN0ZGluX3doID0gcGlwZShvdmVybGFwcGVkPShGYWxzZSwgVHJ1ZSksIGR1cGxleD1UcnVlKQorICAgICAgICAgICAgc3RkaW5fcmZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHN0ZGluX3JoLCBvcy5PX1JET05MWSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZGluX3JmZCA9IHN0ZGluCisgICAgICAgIGlmIHN0ZG91dCA9PSBQSVBFOgorICAgICAgICAgICAgc3Rkb3V0X3JoLCBzdGRvdXRfd2ggPSBwaXBlKG92ZXJsYXBwZWQ9KFRydWUsIEZhbHNlKSkKKyAgICAgICAgICAgIHN0ZG91dF93ZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUoc3Rkb3V0X3doLCAwKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3Rkb3V0X3dmZCA9IHN0ZG91dAorICAgICAgICBpZiBzdGRlcnIgPT0gUElQRToKKyAgICAgICAgICAgIHN0ZGVycl9yaCwgc3RkZXJyX3doID0gcGlwZShvdmVybGFwcGVkPShUcnVlLCBGYWxzZSkpCisgICAgICAgICAgICBzdGRlcnJfd2ZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHN0ZGVycl93aCwgMCkKKyAgICAgICAgZWxpZiBzdGRlcnIgPT0gU1RET1VUOgorICAgICAgICAgICAgc3RkZXJyX3dmZCA9IHN0ZG91dF93ZmQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0ZGVycl93ZmQgPSBzdGRlcnIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhhcmdzLCBzdGRpbj1zdGRpbl9yZmQsIHN0ZG91dD1zdGRvdXRfd2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3RkZXJyX3dmZCwgKiprd2RzKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBmb3IgaCBpbiAoc3RkaW5fd2gsIHN0ZG91dF9yaCwgc3RkZXJyX3JoKToKKyAgICAgICAgICAgICAgICBpZiBoIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgpCisgICAgICAgICAgICByYWlzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3RkaW5fd2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRpbiA9IFBpcGVIYW5kbGUoc3RkaW5fd2gpCisgICAgICAgICAgICBpZiBzdGRvdXRfcmggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5zdGRvdXQgPSBQaXBlSGFuZGxlKHN0ZG91dF9yaCkKKyAgICAgICAgICAgIGlmIHN0ZGVycl9yaCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZGVyciA9IFBpcGVIYW5kbGUoc3RkZXJyX3JoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgc3RkaW4gPT0gUElQRToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzdGRpbl9yZmQpCisgICAgICAgICAgICBpZiBzdGRvdXQgPT0gUElQRToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShzdGRvdXRfd2ZkKQorICAgICAgICAgICAgaWYgc3RkZXJyID09IFBJUEU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc3RkZXJyX3dmZCkKZGlmZiAtLWdpdCBhL0xpYi9hc3luY29yZS5weSBiL0xpYi9hc3luY29yZS5weQppbmRleCA5MDlkOWY2Li4wMGE2Mzk2IDEwMDY0NAotLS0gYS9MaWIvYXN5bmNvcmUucHkKKysrIGIvTGliL2FzeW5jb3JlLnB5CkBAIC0xMTIsNyArMTEyLDcgQEAKICAgICAgICAgICAgIG9iai5oYW5kbGVfZXhwdF9ldmVudCgpCiAgICAgICAgIGlmIGZsYWdzICYgKHNlbGVjdC5QT0xMSFVQIHwgc2VsZWN0LlBPTExFUlIgfCBzZWxlY3QuUE9MTE5WQUwpOgogICAgICAgICAgICAgb2JqLmhhbmRsZV9jbG9zZSgpCi0gICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIGlmIGUuYXJnc1swXSBub3QgaW4gX0RJU0NPTk5FQ1RFRDoKICAgICAgICAgICAgIG9iai5oYW5kbGVfZXJyb3IoKQogICAgICAgICBlbHNlOgpAQCAtMjQwLDcgKzI0MCw3IEBACiAgICAgICAgICAgICAjIHBhc3NlZCBiZSBjb25uZWN0ZWQuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5hZGRyID0gc29jay5nZXRwZWVybmFtZSgpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSBpbiAoRU5PVENPTk4sIEVJTlZBTCk6CiAgICAgICAgICAgICAgICAgICAgICMgVG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHdlIGdvdCBhbiB1bmNvbm5lY3RlZAogICAgICAgICAgICAgICAgICAgICAjIHNvY2tldC4KQEAgLTMwNCw3ICszMDQsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09fUkVVU0VBRERSKSB8IDEKICAgICAgICAgICAgICAgICApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzQ1LDcgKzM0NSw3IEBACiAgICAgICAgICAgICBzZWxmLmFkZHIgPSBhZGRyZXNzCiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9jb25uZWN0X2V2ZW50KCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnIsIGVycm9yY29kZVtlcnJdKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnIsIGVycm9yY29kZVtlcnJdKQogCiAgICAgZGVmIGFjY2VwdChzZWxmKToKICAgICAgICAgIyBYWFggY2FuIHJldHVybiBlaXRoZXIgYW4gYWRkcmVzcyBwYWlyIG9yIE5vbmUKQEAgLTM1Myw3ICszNTMsNyBAQAogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gaW4gKEVXT1VMREJMT0NLLCBFQ09OTkFCT1JURUQsIEVBR0FJTik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGVsc2U6CkBAIC0zNjUsNyArMzY1LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5zb2NrZXQuc2VuZChkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIHdoeToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgaWYgd2h5LmFyZ3NbMF0gPT0gRVdPVUxEQkxPQ0s6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDAKICAgICAgICAgICAgIGVsaWYgd2h5LmFyZ3NbMF0gaW4gX0RJU0NPTk5FQ1RFRDoKQEAgLTM4NCw3ICszODQsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBiJycKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgICMgd2luc29jayBzb21ldGltZXMgcmFpc2VzIEVOT1RDT05OCiAgICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBpbiBfRElTQ09OTkVDVEVEOgogICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2Nsb3NlKCkKQEAgLTM5NywxMSArMzk3LDEyIEBACiAgICAgICAgIHNlbGYuYWNjZXB0aW5nID0gRmFsc2UKICAgICAgICAgc2VsZi5jb25uZWN0aW5nID0gRmFsc2UKICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuc29ja2V0LmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB3aHk6Ci0gICAgICAgICAgICBpZiB3aHkuYXJnc1swXSBub3QgaW4gKEVOT1RDT05OLCBFQkFERik6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgc2VsZi5zb2NrZXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgICAgIGlmIHdoeS5hcmdzWzBdIG5vdCBpbiAoRU5PVENPTk4sIEVCQURGKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgICMgY2hlYXAgaW5oZXJpdGFuY2UsIHVzZWQgdG8gcGFzcyBhbGwgb3RoZXIgYXR0cmlidXRlCiAgICAgIyByZWZlcmVuY2VzIHRvIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCkBAIC00NDMsNyArNDQ0LDcgQEAKICAgICBkZWYgaGFuZGxlX2Nvbm5lY3RfZXZlbnQoc2VsZik6CiAgICAgICAgIGVyciA9IHNlbGYuc29ja2V0LmdldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19FUlJPUikKICAgICAgICAgaWYgZXJyICE9IDA6Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoZXJyLCBfc3RyZXJyb3IoZXJyKSkKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyLCBfc3RyZXJyb3IoZXJyKSkKICAgICAgICAgc2VsZi5oYW5kbGVfY29ubmVjdCgpCiAgICAgICAgIHNlbGYuY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICBzZWxmLmNvbm5lY3RpbmcgPSBGYWxzZQpAQCAtNTMyLDcgKzUzMyw3IEBACiAKICAgICBkZWYgaW5pdGlhdGVfc2VuZChzZWxmKToKICAgICAgICAgbnVtX3NlbnQgPSAwCi0gICAgICAgIG51bV9zZW50ID0gZGlzcGF0Y2hlci5zZW5kKHNlbGYsIHNlbGYub3V0X2J1ZmZlcls6NTEyXSkKKyAgICAgICAgbnVtX3NlbnQgPSBkaXNwYXRjaGVyLnNlbmQoc2VsZiwgc2VsZi5vdXRfYnVmZmVyWzo2NTUzNl0pCiAgICAgICAgIHNlbGYub3V0X2J1ZmZlciA9IHNlbGYub3V0X2J1ZmZlcltudW1fc2VudDpdCiAKICAgICBkZWYgaGFuZGxlX3dyaXRlKHNlbGYpOgpAQCAtNjEzLDYgKzYxNCwxMSBAQAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmQpOgogICAgICAgICAgICAgc2VsZi5mZCA9IG9zLmR1cChmZCkKIAorICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuZmQgPj0gMDoKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJ1bmNsb3NlZCBmaWxlICVyIiAlIHNlbGYsIFJlc291cmNlV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgICAgIGRlZiByZWN2KHNlbGYsICphcmdzKToKICAgICAgICAgICAgIHJldHVybiBvcy5yZWFkKHNlbGYuZmQsICphcmdzKQogCkBAIC02MzEsNyArNjM3LDEwIEBACiAgICAgICAgIHdyaXRlID0gc2VuZAogCiAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuZmQgPCAwOgorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgb3MuY2xvc2Uoc2VsZi5mZCkKKyAgICAgICAgICAgIHNlbGYuZmQgPSAtMQogCiAgICAgICAgIGRlZiBmaWxlbm8oc2VsZik6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5mZApkaWZmIC0tZ2l0IGEvTGliL2Jhc2U2NC5weSBiL0xpYi9iYXNlNjQucHkKaW5kZXggYjZlODJiNi4uNjQwZjc4NyAxMDA3NTUKLS0tIGEvTGliL2Jhc2U2NC5weQorKysgYi9MaWIvYmFzZTY0LnB5CkBAIC0xLDYgKzEsNiBAQAogIyEgL3Vzci9iaW4vZW52IHB5dGhvbjMKIAotIiIiUkZDIDM1NDg6IEJhc2UxNiwgQmFzZTMyLCBCYXNlNjQgRGF0YSBFbmNvZGluZ3MiIiIKKyIiIkJhc2UxNiwgQmFzZTMyLCBCYXNlNjQgKFJGQyAzNTQ4KSwgQmFzZTg1IGFuZCBBc2NpaTg1IGRhdGEgZW5jb2RpbmdzIiIiCiAKICMgTW9kaWZpZWQgMDQtT2N0LTE5OTUgYnkgSmFjayBKYW5zZW4gdG8gdXNlIGJpbmFzY2lpIG1vZHVsZQogIyBNb2RpZmllZCAzMC1EZWMtMjAwMyBieSBCYXJyeSBXYXJzYXcgdG8gYWRkIGZ1bGwgUkZDIDM1NDggc3VwcG9ydApAQCAtMTcsNiArMTcsOCBAQAogICAgICMgR2VuZXJhbGl6ZWQgaW50ZXJmYWNlIGZvciBvdGhlciBlbmNvZGluZ3MKICAgICAnYjY0ZW5jb2RlJywgJ2I2NGRlY29kZScsICdiMzJlbmNvZGUnLCAnYjMyZGVjb2RlJywKICAgICAnYjE2ZW5jb2RlJywgJ2IxNmRlY29kZScsCisgICAgIyBCYXNlODUgYW5kIEFzY2lpODUgZW5jb2RpbmdzCisgICAgJ2I4NWVuY29kZScsICdiODVkZWNvZGUnLCAnYTg1ZW5jb2RlJywgJ2E4NWRlY29kZScsCiAgICAgIyBTdGFuZGFyZCBCYXNlNjQgZW5jb2RpbmcKICAgICAnc3RhbmRhcmRfYjY0ZW5jb2RlJywgJ3N0YW5kYXJkX2I2NGRlY29kZScsCiAgICAgIyBTb21lIGNvbW1vbiBCYXNlNjQgYWx0ZXJuYXRpdmVzLiAgQXMgcmVmZXJlbmNlZCBieSBSRkMgMzQ1OCwgc2VlIHRocmVhZApAQCAtMzUsMTEgKzM3LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gcy5lbmNvZGUoJ2FzY2lpJykKICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0cmluZyBhcmd1bWVudCBzaG91bGQgY29udGFpbiBvbmx5IEFTQ0lJIGNoYXJhY3RlcnMnKQotICAgIGVsaWYgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6CisgICAgaWYgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6CiAgICAgICAgIHJldHVybiBzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYnl0ZXMgb3IgQVNDSUkgc3RyaW5nLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCi0KKyAgICB0cnk6CisgICAgICAgIHJldHVybiBtZW1vcnl2aWV3KHMpLnRvYnl0ZXMoKQorICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiYXJndW1lbnQgc2hvdWxkIGJlIGEgYnl0ZXMtbGlrZSBvYmplY3Qgb3IgQVNDSUkgIgorICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgbm90ICVyIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKSBmcm9tIE5vbmUKIAogCiAjIEJhc2U2NCBlbmNvZGluZy9kZWNvZGluZyB1c2VzIGJpbmFzY2lpCkBAIC01NCwxNCArNTgsOSBAQAogCiAgICAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgIyBTdHJpcCBvZmYgdGhlIHRyYWlsaW5nIG5ld2xpbmUKICAgICBlbmNvZGVkID0gYmluYXNjaWkuYjJhX2Jhc2U2NChzKVs6LTFdCiAgICAgaWYgYWx0Y2hhcnMgaXMgbm90IE5vbmU6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFsdGNoYXJzLCBieXRlc190eXBlcyk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBhbHRjaGFycy5fX2NsYXNzX18uX19uYW1lX18pCiAgICAgICAgIGFzc2VydCBsZW4oYWx0Y2hhcnMpID09IDIsIHJlcHIoYWx0Y2hhcnMpCiAgICAgICAgIHJldHVybiBlbmNvZGVkLnRyYW5zbGF0ZShieXRlcy5tYWtldHJhbnMoYicrLycsIGFsdGNoYXJzKSkKICAgICByZXR1cm4gZW5jb2RlZApAQCAtMTM4LDUzICsxMzcsMzkgQEAKIAogCiAjIEJhc2UzMiBlbmNvZGluZy9kZWNvZGluZyBtdXN0IGJlIGRvbmUgaW4gUHl0aG9uCi1fYjMyYWxwaGFiZXQgPSB7Ci0gICAgMDogYidBJywgIDk6IGInSicsIDE4OiBiJ1MnLCAyNzogYiczJywKLSAgICAxOiBiJ0InLCAxMDogYidLJywgMTk6IGInVCcsIDI4OiBiJzQnLAotICAgIDI6IGInQycsIDExOiBiJ0wnLCAyMDogYidVJywgMjk6IGInNScsCi0gICAgMzogYidEJywgMTI6IGInTScsIDIxOiBiJ1YnLCAzMDogYic2JywKLSAgICA0OiBiJ0UnLCAxMzogYidOJywgMjI6IGInVycsIDMxOiBiJzcnLAotICAgIDU6IGInRicsIDE0OiBiJ08nLCAyMzogYidYJywKLSAgICA2OiBiJ0cnLCAxNTogYidQJywgMjQ6IGInWScsCi0gICAgNzogYidIJywgMTY6IGInUScsIDI1OiBiJ1onLAotICAgIDg6IGInSScsIDE3OiBiJ1InLCAyNjogYicyJywKLSAgICB9Ci0KLV9iMzJ0YWIgPSBbdlswXSBmb3IgaywgdiBpbiBzb3J0ZWQoX2IzMmFscGhhYmV0Lml0ZW1zKCkpXQotX2IzMnJldiA9IGRpY3QoWyh2WzBdLCBrKSBmb3IgaywgdiBpbiBfYjMyYWxwaGFiZXQuaXRlbXMoKV0pCi0KK19iMzJhbHBoYWJldCA9IGInQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoyMzQ1NjcnCitfYjMydGFiMiA9IE5vbmUKK19iMzJyZXYgPSBOb25lCiAKIGRlZiBiMzJlbmNvZGUocyk6CiAgICAgIiIiRW5jb2RlIGEgYnl0ZSBzdHJpbmcgdXNpbmcgQmFzZTMyLgogCiAgICAgcyBpcyB0aGUgYnl0ZSBzdHJpbmcgdG8gZW5jb2RlLiAgVGhlIGVuY29kZWQgYnl0ZSBzdHJpbmcgaXMgcmV0dXJuZWQuCiAgICAgIiIiCisgICAgZ2xvYmFsIF9iMzJ0YWIyCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHRhYmxlIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBpZiBfYjMydGFiMiBpcyBOb25lOgorICAgICAgICBiMzJ0YWIgPSBbYnl0ZXMoKGksKSkgZm9yIGkgaW4gX2IzMmFscGhhYmV0XQorICAgICAgICBfYjMydGFiMiA9IFthICsgYiBmb3IgYSBpbiBiMzJ0YWIgZm9yIGIgaW4gYjMydGFiXQorICAgICAgICBiMzJ0YWIgPSBOb25lCisKICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKLSAgICBxdWFudGEsIGxlZnRvdmVyID0gZGl2bW9kKGxlbihzKSwgNSkKKyAgICAgICAgcyA9IG1lbW9yeXZpZXcocykudG9ieXRlcygpCisgICAgbGVmdG92ZXIgPSBsZW4ocykgJSA1CiAgICAgIyBQYWQgdGhlIGxhc3QgcXVhbnR1bSB3aXRoIHplcm8gYml0cyBpZiBuZWNlc3NhcnkKICAgICBpZiBsZWZ0b3ZlcjoKICAgICAgICAgcyA9IHMgKyBieXRlcyg1IC0gbGVmdG92ZXIpICAjIERvbid0IHVzZSArPSAhCi0gICAgICAgIHF1YW50YSArPSAxCiAgICAgZW5jb2RlZCA9IGJ5dGVhcnJheSgpCi0gICAgZm9yIGkgaW4gcmFuZ2UocXVhbnRhKToKLSAgICAgICAgIyBjMSBhbmQgYzIgYXJlIDE2IGJpdHMgd2lkZSwgYzMgaXMgOCBiaXRzIHdpZGUuICBUaGUgaW50ZW50IG9mIHRoaXMKLSAgICAgICAgIyBjb2RlIGlzIHRvIHByb2Nlc3MgdGhlIDQwIGJpdHMgaW4gdW5pdHMgb2YgNSBiaXRzLiAgU28gd2UgdGFrZSB0aGUgMQotICAgICAgICAjIGxlZnRvdmVyIGJpdCBvZiBjMSBhbmQgdGFjayBpdCBvbnRvIGMyLiAgVGhlbiB3ZSB0YWtlIHRoZSAyIGxlZnRvdmVyCi0gICAgICAgICMgYml0cyBvZiBjMiBhbmQgdGFjayB0aGVtIG9udG8gYzMuICBUaGUgc2hpZnRzIGFuZCBtYXNrcyBhcmUgaW50ZW5kZWQKLSAgICAgICAgIyB0byBnaXZlIHVzIHZhbHVlcyBvZiBleGFjdGx5IDUgYml0cyBpbiB3aWR0aC4KLSAgICAgICAgYzEsIGMyLCBjMyA9IHN0cnVjdC51bnBhY2soJyFISEInLCBzW2kqNTooaSsxKSo1XSkKLSAgICAgICAgYzIgKz0gKGMxICYgMSkgPDwgMTYgIyAxNyBiaXRzIHdpZGUKLSAgICAgICAgYzMgKz0gKGMyICYgMykgPDwgOCAgIyAxMCBiaXRzIHdpZGUKLSAgICAgICAgZW5jb2RlZCArPSBieXRlcyhbX2IzMnRhYltjMSA+PiAxMV0sICAgICAgICAgIyBiaXRzIDEgLSA1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIF9iMzJ0YWJbKGMxID4+IDYpICYgMHgxZl0sICMgYml0cyA2IC0gMTAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYlsoYzEgPj4gMSkgJiAweDFmXSwgIyBiaXRzIDExIC0gMTUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMiA+PiAxMl0sICAgICAgICAgIyBiaXRzIDE2IC0gMjAgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMiA+PiA3KSAmIDB4MWZdLCAjIGJpdHMgMjEgLSAyNSAoNiAtIDEwKQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiWyhjMiA+PiAyKSAmIDB4MWZdLCAjIGJpdHMgMjYgLSAzMCAoMTEgLSAxNSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgX2IzMnRhYltjMyA+PiA1XSwgICAgICAgICAgIyBiaXRzIDMxIC0gMzUgKDEgLSA1KQotICAgICAgICAgICAgICAgICAgICAgICAgICBfYjMydGFiW2MzICYgMHgxZl0sICAgICAgICAjIGJpdHMgMzYgLSA0MCAoMSAtIDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisgICAgZnJvbV9ieXRlcyA9IGludC5mcm9tX2J5dGVzCisgICAgYjMydGFiMiA9IF9iMzJ0YWIyCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCA1KToKKyAgICAgICAgYyA9IGZyb21fYnl0ZXMoc1tpOiBpICsgNV0sICdiaWcnKQorICAgICAgICBlbmNvZGVkICs9IChiMzJ0YWIyW2MgPj4gMzBdICsgICAgICAgICAgICMgYml0cyAxIC0gMTAKKyAgICAgICAgICAgICAgICAgICAgYjMydGFiMlsoYyA+PiAyMCkgJiAweDNmZl0gKyAjIGJpdHMgMTEgLSAyMAorICAgICAgICAgICAgICAgICAgICBiMzJ0YWIyWyhjID4+IDEwKSAmIDB4M2ZmXSArICMgYml0cyAyMSAtIDMwCisgICAgICAgICAgICAgICAgICAgIGIzMnRhYjJbYyAmIDB4M2ZmXSAgICAgICAgICAgIyBiaXRzIDMxIC0gNDAKKyAgICAgICAgICAgICAgICAgICApCiAgICAgIyBBZGp1c3QgZm9yIGFueSBsZWZ0b3ZlciBwYXJ0aWFsIHF1YW50YQogICAgIGlmIGxlZnRvdmVyID09IDE6CiAgICAgICAgIGVuY29kZWRbLTY6XSA9IGInPT09PT09JwpAQCAtMTk2LDcgKzE4MSw2IEBACiAgICAgICAgIGVuY29kZWRbLTE6XSA9IGInPScKICAgICByZXR1cm4gYnl0ZXMoZW5jb2RlZCkKIAotCiBkZWYgYjMyZGVjb2RlKHMsIGNhc2Vmb2xkPUZhbHNlLCBtYXAwMT1Ob25lKToKICAgICAiIiJEZWNvZGUgYSBCYXNlMzIgZW5jb2RlZCBieXRlIHN0cmluZy4KIApAQCAtMjE2LDkgKzIwMCwxMyBAQAogICAgIHRoZSBpbnB1dCBpcyBpbmNvcnJlY3RseSBwYWRkZWQgb3IgaWYgdGhlcmUgYXJlIG5vbi1hbHBoYWJldAogICAgIGNoYXJhY3RlcnMgcHJlc2VudCBpbiB0aGUgaW5wdXQuCiAgICAgIiIiCisgICAgZ2xvYmFsIF9iMzJyZXYKKyAgICAjIERlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0aGUgdGFibGUgdG8gbm90IHdhc3RlIG1lbW9yeQorICAgICMgaWYgdGhlIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZAorICAgIGlmIF9iMzJyZXYgaXMgTm9uZToKKyAgICAgICAgX2IzMnJldiA9IHt2OiBrIGZvciBrLCB2IGluIGVudW1lcmF0ZShfYjMyYWxwaGFiZXQpfQogICAgIHMgPSBfYnl0ZXNfZnJvbV9kZWNvZGVfZGF0YShzKQotICAgIHF1YW50YSwgbGVmdG92ZXIgPSBkaXZtb2QobGVuKHMpLCA4KQotICAgIGlmIGxlZnRvdmVyOgorICAgIGlmIGxlbihzKSAlIDg6CiAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdJbmNvcnJlY3QgcGFkZGluZycpCiAgICAgIyBIYW5kbGUgc2VjdGlvbiAyLjQgemVybyBhbmQgb25lIG1hcHBpbmcuICBUaGUgZmxhZyBtYXAwMSB3aWxsIGJlIGVpdGhlcgogICAgICMgRmFsc2UsIG9yIHRoZSBjaGFyYWN0ZXIgdG8gbWFwIHRoZSBkaWdpdCAxIChvbmUpIHRvLiAgSXQgc2hvdWxkIGJlCkBAIC0yMzIsNDIgKzIyMCwzNiBAQAogICAgICMgU3RyaXAgb2ZmIHBhZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHJpZ2h0LiAgV2UgbmVlZCB0byBjb3VudCB0aGUgcGFkCiAgICAgIyBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhpcyB3aWxsIHRlbGwgdXMgaG93IG1hbnkgbnVsbCBieXRlcyB0byByZW1vdmUgZnJvbQogICAgICMgdGhlIGVuZCBvZiB0aGUgZGVjb2RlZCBzdHJpbmcuCi0gICAgcGFkY2hhcnMgPSAwCi0gICAgbW8gPSByZS5zZWFyY2goYicoP1A8cGFkPls9XSopJCcsIHMpCi0gICAgaWYgbW86Ci0gICAgICAgIHBhZGNoYXJzID0gbGVuKG1vLmdyb3VwKCdwYWQnKSkKLSAgICAgICAgaWYgcGFkY2hhcnMgPiAwOgotICAgICAgICAgICAgcyA9IHNbOi1wYWRjaGFyc10KKyAgICBsID0gbGVuKHMpCisgICAgcyA9IHMucnN0cmlwKGInPScpCisgICAgcGFkY2hhcnMgPSBsIC0gbGVuKHMpCiAgICAgIyBOb3cgZGVjb2RlIHRoZSBmdWxsIHF1YW50YQotICAgIHBhcnRzID0gW10KLSAgICBhY2MgPSAwCi0gICAgc2hpZnQgPSAzNQotICAgIGZvciBjIGluIHM6Ci0gICAgICAgIHZhbCA9IF9iMzJyZXYuZ2V0KGMpCi0gICAgICAgIGlmIHZhbCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ05vbi1iYXNlMzIgZGlnaXQgZm91bmQnKQotICAgICAgICBhY2MgKz0gX2IzMnJldltjXSA8PCBzaGlmdAotICAgICAgICBzaGlmdCAtPSA1Ci0gICAgICAgIGlmIHNoaWZ0IDwgMDoKLSAgICAgICAgICAgIHBhcnRzLmFwcGVuZChiaW5hc2NpaS51bmhleGxpZnkoYnl0ZXMoJyUwMTB4JyAlIGFjYywgImFzY2lpIikpKQotICAgICAgICAgICAgYWNjID0gMAotICAgICAgICAgICAgc2hpZnQgPSAzNQorICAgIGRlY29kZWQgPSBieXRlYXJyYXkoKQorICAgIGIzMnJldiA9IF9iMzJyZXYKKyAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIDgpOgorICAgICAgICBxdWFudGEgPSBzW2k6IGkgKyA4XQorICAgICAgICBhY2MgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjIGluIHF1YW50YToKKyAgICAgICAgICAgICAgICBhY2MgPSAoYWNjIDw8IDUpICsgYjMycmV2W2NdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdOb24tYmFzZTMyIGRpZ2l0IGZvdW5kJykgZnJvbSBOb25lCisgICAgICAgIGRlY29kZWQgKz0gYWNjLnRvX2J5dGVzKDUsICdiaWcnKQogICAgICMgUHJvY2VzcyB0aGUgbGFzdCwgcGFydGlhbCBxdWFudGEKLSAgICBsYXN0ID0gYmluYXNjaWkudW5oZXhsaWZ5KGJ5dGVzKCclMDEweCcgJSBhY2MsICJhc2NpaSIpKQotICAgIGlmIHBhZGNoYXJzID09IDA6Ci0gICAgICAgIGxhc3QgPSBiJycgICAgICAgICAgICAgICAgICAgICAgIyBObyBjaGFyYWN0ZXJzCi0gICAgZWxpZiBwYWRjaGFycyA9PSAxOgotICAgICAgICBsYXN0ID0gbGFzdFs6LTFdCi0gICAgZWxpZiBwYWRjaGFycyA9PSAzOgotICAgICAgICBsYXN0ID0gbGFzdFs6LTJdCi0gICAgZWxpZiBwYWRjaGFycyA9PSA0OgotICAgICAgICBsYXN0ID0gbGFzdFs6LTNdCi0gICAgZWxpZiBwYWRjaGFycyA9PSA2OgotICAgICAgICBsYXN0ID0gbGFzdFs6LTRdCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgYmluYXNjaWkuRXJyb3IoJ0luY29ycmVjdCBwYWRkaW5nJykKLSAgICBwYXJ0cy5hcHBlbmQobGFzdCkKLSAgICByZXR1cm4gYicnLmpvaW4ocGFydHMpCisgICAgaWYgcGFkY2hhcnM6CisgICAgICAgIGFjYyA8PD0gNSAqIHBhZGNoYXJzCisgICAgICAgIGxhc3QgPSBhY2MudG9fYnl0ZXMoNSwgJ2JpZycpCisgICAgICAgIGlmIHBhZGNoYXJzID09IDE6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotMV0KKyAgICAgICAgZWxpZiBwYWRjaGFycyA9PSAzOgorICAgICAgICAgICAgZGVjb2RlZFstNTpdID0gbGFzdFs6LTJdCisgICAgICAgIGVsaWYgcGFkY2hhcnMgPT0gNDoKKyAgICAgICAgICAgIGRlY29kZWRbLTU6XSA9IGxhc3RbOi0zXQorICAgICAgICBlbGlmIHBhZGNoYXJzID09IDY6CisgICAgICAgICAgICBkZWNvZGVkWy01Ol0gPSBsYXN0WzotNF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIGJpbmFzY2lpLkVycm9yKCdJbmNvcnJlY3QgcGFkZGluZycpCisgICAgcmV0dXJuIGJ5dGVzKGRlY29kZWQpCiAKIAogCkBAIC0yNzksOCArMjYxLDYgQEAKIAogICAgIHMgaXMgdGhlIGJ5dGUgc3RyaW5nIHRvIGVuY29kZS4gIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgogICAgICIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgbm90ICVzIiAlIHMuX19jbGFzc19fLl9fbmFtZV9fKQogICAgIHJldHVybiBiaW5hc2NpaS5oZXhsaWZ5KHMpLnVwcGVyKCkKIAogCkBAIC0zMDIsNyArMjgyLDIwNiBAQAogICAgICAgICByYWlzZSBiaW5hc2NpaS5FcnJvcignTm9uLWJhc2UxNiBkaWdpdCBmb3VuZCcpCiAgICAgcmV0dXJuIGJpbmFzY2lpLnVuaGV4bGlmeShzKQogCisjCisjIEFzY2lpODUgZW5jb2RpbmcvZGVjb2RpbmcKKyMKIAorX2E4NWNoYXJzID0gTm9uZQorX2E4NWNoYXJzMiA9IE5vbmUKK19BODVTVEFSVCA9IGIiPH4iCitfQTg1RU5EID0gYiJ+PiIKKworZGVmIF84NWVuY29kZShiLCBjaGFycywgY2hhcnMyLCBwYWQ9RmFsc2UsIGZvbGRudWxzPUZhbHNlLCBmb2xkc3BhY2VzPUZhbHNlKToKKyAgICAjIEhlbHBlciBmdW5jdGlvbiBmb3IgYTg1ZW5jb2RlIGFuZCBiODVlbmNvZGUKKyAgICBpZiBub3QgaXNpbnN0YW5jZShiLCBieXRlc190eXBlcyk6CisgICAgICAgIGIgPSBtZW1vcnl2aWV3KGIpLnRvYnl0ZXMoKQorCisgICAgcGFkZGluZyA9ICgtbGVuKGIpKSAlIDQKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICBiID0gYiArIGInXDAnICogcGFkZGluZworICAgIHdvcmRzID0gc3RydWN0LlN0cnVjdCgnISVkSScgJSAobGVuKGIpIC8vIDQpKS51bnBhY2soYikKKworICAgIGNodW5rcyA9IFtiJ3onIGlmIGZvbGRudWxzIGFuZCBub3Qgd29yZCBlbHNlCisgICAgICAgICAgICAgIGIneScgaWYgZm9sZHNwYWNlcyBhbmQgd29yZCA9PSAweDIwMjAyMDIwIGVsc2UKKyAgICAgICAgICAgICAgKGNoYXJzMlt3b3JkIC8vIDYxNDEyNV0gKworICAgICAgICAgICAgICAgY2hhcnMyW3dvcmQgLy8gODUgJSA3MjI1XSArCisgICAgICAgICAgICAgICBjaGFyc1t3b3JkICUgODVdKQorICAgICAgICAgICAgICBmb3Igd29yZCBpbiB3b3Jkc10KKworICAgIGlmIHBhZGRpbmcgYW5kIG5vdCBwYWQ6CisgICAgICAgIGlmIGNodW5rc1stMV0gPT0gYid6JzoKKyAgICAgICAgICAgIGNodW5rc1stMV0gPSBjaGFyc1swXSAqIDUKKyAgICAgICAgY2h1bmtzWy0xXSA9IGNodW5rc1stMV1bOi1wYWRkaW5nXQorCisgICAgcmV0dXJuIGInJy5qb2luKGNodW5rcykKKworZGVmIGE4NWVuY29kZShiLCAqLCBmb2xkc3BhY2VzPUZhbHNlLCB3cmFwY29sPTAsIHBhZD1GYWxzZSwgYWRvYmU9RmFsc2UpOgorICAgICIiIkVuY29kZSBhIGJ5dGUgc3RyaW5nIHVzaW5nIEFzY2lpODUuCisKKyAgICBiIGlzIHRoZSBieXRlIHN0cmluZyB0byBlbmNvZGUuIFRoZSBlbmNvZGVkIGJ5dGUgc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAgZm9sZHNwYWNlcyBpcyBhbiBvcHRpb25hbCBmbGFnIHRoYXQgdXNlcyB0aGUgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZSAneScKKyAgICBpbnN0ZWFkIG9mIDQgY29uc2VjdXRpdmUgc3BhY2VzIChBU0NJSSAweDIwKSBhcyBzdXBwb3J0ZWQgYnkgJ2J0b2EnLiBUaGlzCisgICAgZmVhdHVyZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSAic3RhbmRhcmQiIEFkb2JlIGVuY29kaW5nLgorCisgICAgd3JhcGNvbCBjb250cm9scyB3aGV0aGVyIHRoZSBvdXRwdXQgc2hvdWxkIGhhdmUgbmV3bGluZSAoJ1xcbicpIGNoYXJhY3RlcnMKKyAgICBhZGRlZCB0byBpdC4gSWYgdGhpcyBpcyBub24temVybywgZWFjaCBvdXRwdXQgbGluZSB3aWxsIGJlIGF0IG1vc3QgdGhpcworICAgIG1hbnkgY2hhcmFjdGVycyBsb25nLgorCisgICAgcGFkIGNvbnRyb2xzIHdoZXRoZXIgdGhlIGlucHV0IHN0cmluZyBpcyBwYWRkZWQgdG8gYSBtdWx0aXBsZSBvZiA0IGJlZm9yZQorICAgIGVuY29kaW5nLiBOb3RlIHRoYXQgdGhlIGJ0b2EgaW1wbGVtZW50YXRpb24gYWx3YXlzIHBhZHMuCisKKyAgICBhZG9iZSBjb250cm9scyB3aGV0aGVyIHRoZSBlbmNvZGVkIGJ5dGUgc2VxdWVuY2UgaXMgZnJhbWVkIHdpdGggPH4gYW5kIH4+LAorICAgIHdoaWNoIGlzIHVzZWQgYnkgdGhlIEFkb2JlIGltcGxlbWVudGF0aW9uLgorICAgICIiIgorICAgIGdsb2JhbCBfYTg1Y2hhcnMsIF9hODVjaGFyczIKKyAgICAjIERlbGF5IHRoZSBpbml0aWFsaXphdGlvbiBvZiB0YWJsZXMgdG8gbm90IHdhc3RlIG1lbW9yeQorICAgICMgaWYgdGhlIGZ1bmN0aW9uIGlzIG5ldmVyIGNhbGxlZAorICAgIGlmIF9hODVjaGFycyBpcyBOb25lOgorICAgICAgICBfYTg1Y2hhcnMgPSBbYnl0ZXMoKGksKSkgZm9yIGkgaW4gcmFuZ2UoMzMsIDExOCldCisgICAgICAgIF9hODVjaGFyczIgPSBbKGEgKyBiKSBmb3IgYSBpbiBfYTg1Y2hhcnMgZm9yIGIgaW4gX2E4NWNoYXJzXQorCisgICAgcmVzdWx0ID0gXzg1ZW5jb2RlKGIsIF9hODVjaGFycywgX2E4NWNoYXJzMiwgcGFkLCBUcnVlLCBmb2xkc3BhY2VzKQorCisgICAgaWYgYWRvYmU6CisgICAgICAgIHJlc3VsdCA9IF9BODVTVEFSVCArIHJlc3VsdAorICAgIGlmIHdyYXBjb2w6CisgICAgICAgIHdyYXBjb2wgPSBtYXgoMiBpZiBhZG9iZSBlbHNlIDEsIHdyYXBjb2wpCisgICAgICAgIGNodW5rcyA9IFtyZXN1bHRbaTogaSArIHdyYXBjb2xdCisgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocmVzdWx0KSwgd3JhcGNvbCldCisgICAgICAgIGlmIGFkb2JlOgorICAgICAgICAgICAgaWYgbGVuKGNodW5rc1stMV0pICsgMiA+IHdyYXBjb2w6CisgICAgICAgICAgICAgICAgY2h1bmtzLmFwcGVuZChiJycpCisgICAgICAgIHJlc3VsdCA9IGInXG4nLmpvaW4oY2h1bmtzKQorICAgIGlmIGFkb2JlOgorICAgICAgICByZXN1bHQgKz0gX0E4NUVORAorCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgYTg1ZGVjb2RlKGIsICosIGZvbGRzcGFjZXM9RmFsc2UsIGFkb2JlPUZhbHNlLCBpZ25vcmVjaGFycz1iJyBcdFxuXHJcdicpOgorICAgICIiIkRlY29kZSBhbiBBc2NpaTg1IGVuY29kZWQgYnl0ZSBzdHJpbmcuCisKKyAgICBzIGlzIHRoZSBieXRlIHN0cmluZyB0byBkZWNvZGUuCisKKyAgICBmb2xkc3BhY2VzIGlzIGEgZmxhZyB0aGF0IHNwZWNpZmllcyB3aGV0aGVyIHRoZSAneScgc2hvcnQgc2VxdWVuY2Ugc2hvdWxkIGJlCisgICAgYWNjZXB0ZWQgYXMgc2hvcnRoYW5kIGZvciA0IGNvbnNlY3V0aXZlIHNwYWNlcyAoQVNDSUkgMHgyMCkuIFRoaXMgZmVhdHVyZSBpcworICAgIG5vdCBzdXBwb3J0ZWQgYnkgdGhlICJzdGFuZGFyZCIgQWRvYmUgZW5jb2RpbmcuCisKKyAgICBhZG9iZSBjb250cm9scyB3aGV0aGVyIHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyBpbiBBZG9iZSBBc2NpaTg1IGZvcm1hdCAoaS5lLgorICAgIGlzIGZyYW1lZCB3aXRoIDx+IGFuZCB+PikuCisKKyAgICBpZ25vcmVjaGFycyBzaG91bGQgYmUgYSBieXRlIHN0cmluZyBjb250YWluaW5nIGNoYXJhY3RlcnMgdG8gaWdub3JlIGZyb20gdGhlCisgICAgaW5wdXQuIFRoaXMgc2hvdWxkIG9ubHkgY29udGFpbiB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIGFuZCBieSBkZWZhdWx0CisgICAgY29udGFpbnMgYWxsIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBpbiBBU0NJSS4KKyAgICAiIiIKKyAgICBiID0gX2J5dGVzX2Zyb21fZGVjb2RlX2RhdGEoYikKKyAgICBpZiBhZG9iZToKKyAgICAgICAgaWYgbm90IChiLnN0YXJ0c3dpdGgoX0E4NVNUQVJUKSBhbmQgYi5lbmRzd2l0aChfQTg1RU5EKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJBc2NpaTg1IGVuY29kZWQgYnl0ZSBzZXF1ZW5jZXMgbXVzdCBiZSBicmFja2V0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnkgeyFyfSBhbmQgeyFyfSIuZm9ybWF0KF9BODVTVEFSVCwgX0E4NUVORCkpCisgICAgICAgIGIgPSBiWzI6LTJdICMgU3RyaXAgb2ZmIHN0YXJ0L2VuZCBtYXJrZXJzCisgICAgIworICAgICMgV2UgaGF2ZSB0byBnbyB0aHJvdWdoIHRoaXMgc3RlcHdpc2UsIHNvIGFzIHRvIGlnbm9yZSBzcGFjZXMgYW5kIGhhbmRsZQorICAgICMgc3BlY2lhbCBzaG9ydCBzZXF1ZW5jZXMKKyAgICAjCisgICAgcGFja0kgPSBzdHJ1Y3QuU3RydWN0KCchSScpLnBhY2sKKyAgICBkZWNvZGVkID0gW10KKyAgICBkZWNvZGVkX2FwcGVuZCA9IGRlY29kZWQuYXBwZW5kCisgICAgY3VyciA9IFtdCisgICAgY3Vycl9hcHBlbmQgPSBjdXJyLmFwcGVuZAorICAgIGN1cnJfY2xlYXIgPSBjdXJyLmNsZWFyCisgICAgZm9yIHggaW4gYiArIGIndScgKiA0OgorICAgICAgICBpZiBiJyEnWzBdIDw9IHggPD0gYid1J1swXToKKyAgICAgICAgICAgIGN1cnJfYXBwZW5kKHgpCisgICAgICAgICAgICBpZiBsZW4oY3VycikgPT0gNToKKyAgICAgICAgICAgICAgICBhY2MgPSAwCisgICAgICAgICAgICAgICAgZm9yIHggaW4gY3VycjoKKyAgICAgICAgICAgICAgICAgICAgYWNjID0gODUgKiBhY2MgKyAoeCAtIDMzKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQocGFja0koYWNjKSkKKyAgICAgICAgICAgICAgICBleGNlcHQgc3RydWN0LmVycm9yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdBc2NpaTg1IG92ZXJmbG93JykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgY3Vycl9jbGVhcigpCisgICAgICAgIGVsaWYgeCA9PSBiJ3onWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd6IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidcMFwwXDBcMCcpCisgICAgICAgIGVsaWYgZm9sZHNwYWNlcyBhbmQgeCA9PSBiJ3knWzBdOgorICAgICAgICAgICAgaWYgY3VycjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd5IGluc2lkZSBBc2NpaTg1IDUtdHVwbGUnKQorICAgICAgICAgICAgZGVjb2RlZF9hcHBlbmQoYidceDIwXHgyMFx4MjBceDIwJykKKyAgICAgICAgZWxpZiB4IGluIGlnbm9yZWNoYXJzOgorICAgICAgICAgICAgIyBTa2lwIHdoaXRlc3BhY2UKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdOb24tQXNjaWk4NSBkaWdpdCBmb3VuZDogJWMnICUgeCkKKworICAgIHJlc3VsdCA9IGInJy5qb2luKGRlY29kZWQpCisgICAgcGFkZGluZyA9IDQgLSBsZW4oY3VycikKKyAgICBpZiBwYWRkaW5nOgorICAgICAgICAjIFRocm93IGF3YXkgdGhlIGV4dHJhIHBhZGRpbmcKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotcGFkZGluZ10KKyAgICByZXR1cm4gcmVzdWx0CisKKyMgVGhlIGZvbGxvd2luZyBjb2RlIGlzIG9yaWdpbmFsbHkgdGFrZW4gKHdpdGggcGVybWlzc2lvbikgZnJvbSBNZXJjdXJpYWwKKworX2I4NWFscGhhYmV0ID0gKGIiMDEyMzQ1Njc4OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAgICAgICAgIGIiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXohIyQlJigpKistOzw9Pj9AXl9ge3x9fiIpCitfYjg1Y2hhcnMgPSBOb25lCitfYjg1Y2hhcnMyID0gTm9uZQorX2I4NWRlYyA9IE5vbmUKKworZGVmIGI4NWVuY29kZShiLCBwYWQ9RmFsc2UpOgorICAgICIiIkVuY29kZSBhbiBBU0NJSS1lbmNvZGVkIGJ5dGUgYXJyYXkgaW4gYmFzZTg1IGZvcm1hdC4KKworICAgIElmIHBhZCBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgcGFkZGVkIHdpdGggIlxcMCIgc28gaXRzIGxlbmd0aCBpcyBhIG11bHRpcGxlIG9mCisgICAgNCBjaGFyYWN0ZXJzIGJlZm9yZSBlbmNvZGluZy4KKyAgICAiIiIKKyAgICBnbG9iYWwgX2I4NWNoYXJzLCBfYjg1Y2hhcnMyCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGFibGVzIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBpZiBfYjg1Y2hhcnMgaXMgTm9uZToKKyAgICAgICAgX2I4NWNoYXJzID0gW2J5dGVzKChpLCkpIGZvciBpIGluIF9iODVhbHBoYWJldF0KKyAgICAgICAgX2I4NWNoYXJzMiA9IFsoYSArIGIpIGZvciBhIGluIF9iODVjaGFycyBmb3IgYiBpbiBfYjg1Y2hhcnNdCisgICAgcmV0dXJuIF84NWVuY29kZShiLCBfYjg1Y2hhcnMsIF9iODVjaGFyczIsIHBhZCkKKworZGVmIGI4NWRlY29kZShiKToKKyAgICAiIiJEZWNvZGUgYmFzZTg1LWVuY29kZWQgYnl0ZSBhcnJheSIiIgorICAgIGdsb2JhbCBfYjg1ZGVjCisgICAgIyBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGFibGVzIHRvIG5vdCB3YXN0ZSBtZW1vcnkKKyAgICAjIGlmIHRoZSBmdW5jdGlvbiBpcyBuZXZlciBjYWxsZWQKKyAgICBpZiBfYjg1ZGVjIGlzIE5vbmU6CisgICAgICAgIF9iODVkZWMgPSBbTm9uZV0gKiAyNTYKKyAgICAgICAgZm9yIGksIGMgaW4gZW51bWVyYXRlKF9iODVhbHBoYWJldCk6CisgICAgICAgICAgICBfYjg1ZGVjW2NdID0gaQorCisgICAgYiA9IF9ieXRlc19mcm9tX2RlY29kZV9kYXRhKGIpCisgICAgcGFkZGluZyA9ICgtbGVuKGIpKSAlIDUKKyAgICBiID0gYiArIGInficgKiBwYWRkaW5nCisgICAgb3V0ID0gW10KKyAgICBwYWNrSSA9IHN0cnVjdC5TdHJ1Y3QoJyFJJykucGFjaworICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihiKSwgNSk6CisgICAgICAgIGNodW5rID0gYltpOmkgKyA1XQorICAgICAgICBhY2MgPSAwCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBjIGluIGNodW5rOgorICAgICAgICAgICAgICAgIGFjYyA9IGFjYyAqIDg1ICsgX2I4NWRlY1tjXQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgZm9yIGosIGMgaW4gZW51bWVyYXRlKGNodW5rKToKKyAgICAgICAgICAgICAgICBpZiBfYjg1ZGVjW2NdIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2JhZCBiYXNlODUgY2hhcmFjdGVyIGF0IHBvc2l0aW9uICVkJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoaSArIGopKSBmcm9tIE5vbmUKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dC5hcHBlbmQocGFja0koYWNjKSkKKyAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Jhc2U4NSBvdmVyZmxvdyBpbiBodW5rIHN0YXJ0aW5nIGF0IGJ5dGUgJWQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgaSkgZnJvbSBOb25lCisKKyAgICByZXN1bHQgPSBiJycuam9pbihvdXQpCisgICAgaWYgcGFkZGluZzoKKyAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotcGFkZGluZ10KKyAgICByZXR1cm4gcmVzdWx0CiAKICMgTGVnYWN5IGludGVyZmFjZS4gIFRoaXMgY29kZSBjb3VsZCBiZSBjbGVhbmVkIHVwIHNpbmNlIEkgZG9uJ3QgYmVsaWV2ZQogIyBiaW5hc2NpaSBoYXMgYW55IGxpbmUgbGVuZ3RoIGxpbWl0YXRpb25zLiAgSXQganVzdCBkb2Vzbid0IHNlZW0gd29ydGggaXQKQEAgLTMzNSwxMiArNTE0LDI2IEBACiAgICAgICAgIHMgPSBiaW5hc2NpaS5hMmJfYmFzZTY0KGxpbmUpCiAgICAgICAgIG91dHB1dC53cml0ZShzKQogCitkZWYgX2lucHV0X3R5cGVfY2hlY2socyk6CisgICAgdHJ5OgorICAgICAgICBtID0gbWVtb3J5dmlldyhzKQorICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZXJyOgorICAgICAgICBtc2cgPSAiZXhwZWN0ZWQgYnl0ZXMtbGlrZSBvYmplY3QsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKSBmcm9tIGVycgorICAgIGlmIG0uZm9ybWF0IG5vdCBpbiAoJ2MnLCAnYicsICdCJyk6CisgICAgICAgIG1zZyA9ICgiZXhwZWN0ZWQgc2luZ2xlIGJ5dGUgZWxlbWVudHMsIG5vdCAlciBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5mb3JtYXQsIHMuX19jbGFzc19fLl9fbmFtZV9fKSkKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICBpZiBtLm5kaW0gIT0gMToKKyAgICAgICAgbXNnID0gKCJleHBlY3RlZCAxLUQgZGF0YSwgbm90ICVkLUQgZGF0YSBmcm9tICVzIiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobS5uZGltLCBzLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisKIAogZGVmIGVuY29kZWJ5dGVzKHMpOgogICAgICIiIkVuY29kZSBhIGJ5dGVzdHJpbmcgaW50byBhIGJ5dGVzdHJpbmcgY29udGFpbmluZyBtdWx0aXBsZSBsaW5lcwogICAgIG9mIGJhc2UtNjQgZGF0YS4iIiIKLSAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBieXRlc190eXBlcyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZXhwZWN0ZWQgYnl0ZXMsIG5vdCAlcyIgJSBzLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICBfaW5wdXRfdHlwZV9jaGVjayhzKQogICAgIHBpZWNlcyA9IFtdCiAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBNQVhCSU5TSVpFKToKICAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgTUFYQklOU0laRV0KQEAgLTM1Nyw4ICs1NTAsNyBAQAogCiBkZWYgZGVjb2RlYnl0ZXMocyk6CiAgICAgIiIiRGVjb2RlIGEgYnl0ZXN0cmluZyBvZiBiYXNlLTY0IGRhdGEgaW50byBhIGJ5dGVzdHJpbmcuIiIiCi0gICAgaWYgbm90IGlzaW5zdGFuY2UocywgYnl0ZXNfdHlwZXMpOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImV4cGVjdGVkIGJ5dGVzLCBub3QgJXMiICUgcy5fX2NsYXNzX18uX19uYW1lX18pCisgICAgX2lucHV0X3R5cGVfY2hlY2socykKICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzKQogCiBkZWYgZGVjb2Rlc3RyaW5nKHMpOgpkaWZmIC0tZ2l0IGEvTGliL2JkYi5weSBiL0xpYi9iZGIucHkKaW5kZXggZGQxZjQyOC4uNjdhMDg0NiAxMDA2NDQKLS0tIGEvTGliL2JkYi5weQorKysgYi9MaWIvYmRiLnB5CkBAIC0zLDYgKzMsNyBAQAogaW1wb3J0IGZubWF0Y2gKIGltcG9ydCBzeXMKIGltcG9ydCBvcworZnJvbSBpbnNwZWN0IGltcG9ydCBDT19HRU5FUkFUT1IKIAogX19hbGxfXyA9IFsiQmRiUXVpdCIsICJCZGIiLCAiQnJlYWtwb2ludCJdCiAKQEAgLTc1LDI0ICs3Niw0OCBAQAogICAgICAgICBpZiBub3QgKHNlbGYuc3RvcF9oZXJlKGZyYW1lKSBvciBzZWxmLmJyZWFrX2FueXdoZXJlKGZyYW1lKSk6CiAgICAgICAgICAgICAjIE5vIG5lZWQgdG8gdHJhY2UgdGhpcyBmdW5jdGlvbgogICAgICAgICAgICAgcmV0dXJuICMgTm9uZQorICAgICAgICAjIElnbm9yZSBjYWxsIGV2ZW50cyBpbiBnZW5lcmF0b3IgZXhjZXB0IHdoZW4gc3RlcHBpbmcuCisgICAgICAgIGlmIHNlbGYuc3RvcGZyYW1lIGFuZCBmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogICAgICAgICBzZWxmLnVzZXJfY2FsbChmcmFtZSwgYXJnKQogICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CiAgICAgICAgIHJldHVybiBzZWxmLnRyYWNlX2Rpc3BhdGNoCiAKICAgICBkZWYgZGlzcGF0Y2hfcmV0dXJuKHNlbGYsIGZyYW1lLCBhcmcpOgogICAgICAgICBpZiBzZWxmLnN0b3BfaGVyZShmcmFtZSkgb3IgZnJhbWUgPT0gc2VsZi5yZXR1cm5mcmFtZToKKyAgICAgICAgICAgICMgSWdub3JlIHJldHVybiBldmVudHMgaW4gZ2VuZXJhdG9yIGV4Y2VwdCB3aGVuIHN0ZXBwaW5nLgorICAgICAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lLmZfY29kZS5jb19mbGFncyAmIENPX0dFTkVSQVRPUjoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi50cmFjZV9kaXNwYXRjaAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVfcmV0dXJuaW5nID0gZnJhbWUKICAgICAgICAgICAgICAgICBzZWxmLnVzZXJfcmV0dXJuKGZyYW1lLCBhcmcpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVfcmV0dXJuaW5nID0gTm9uZQogICAgICAgICAgICAgaWYgc2VsZi5xdWl0dGluZzogcmFpc2UgQmRiUXVpdAorICAgICAgICAgICAgIyBUaGUgdXNlciBpc3N1ZWQgYSAnbmV4dCcgb3IgJ3VudGlsJyBjb21tYW5kLgorICAgICAgICAgICAgaWYgc2VsZi5zdG9wZnJhbWUgaXMgZnJhbWUgYW5kIHNlbGYuc3RvcGxpbmVubyAhPSAtMToKKyAgICAgICAgICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oTm9uZSwgTm9uZSkKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgIGRlZiBkaXNwYXRjaF9leGNlcHRpb24oc2VsZiwgZnJhbWUsIGFyZyk6CiAgICAgICAgIGlmIHNlbGYuc3RvcF9oZXJlKGZyYW1lKToKKyAgICAgICAgICAgICMgV2hlbiBzdGVwcGluZyB3aXRoIG5leHQvdW50aWwvcmV0dXJuIGluIGEgZ2VuZXJhdG9yIGZyYW1lLCBza2lwCisgICAgICAgICAgICAjIHRoZSBpbnRlcm5hbCBTdG9wSXRlcmF0aW9uIGV4Y2VwdGlvbiAod2l0aCBubyB0cmFjZWJhY2spCisgICAgICAgICAgICAjIHRyaWdnZXJlZCBieSBhIHN1Yml0ZXJhdG9yIHJ1biB3aXRoIHRoZSAneWllbGQgZnJvbScgc3RhdGVtZW50LgorICAgICAgICAgICAgaWYgbm90IChmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IKKyAgICAgICAgICAgICAgICAgICAgYW5kIGFyZ1swXSBpcyBTdG9wSXRlcmF0aW9uIGFuZCBhcmdbMl0gaXMgTm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi51c2VyX2V4Y2VwdGlvbihmcmFtZSwgYXJnKQorICAgICAgICAgICAgICAgIGlmIHNlbGYucXVpdHRpbmc6IHJhaXNlIEJkYlF1aXQKKyAgICAgICAgIyBTdG9wIGF0IHRoZSBTdG9wSXRlcmF0aW9uIG9yIEdlbmVyYXRvckV4aXQgZXhjZXB0aW9uIHdoZW4gdGhlIHVzZXIKKyAgICAgICAgIyBoYXMgc2V0IHN0b3BmcmFtZSBpbiBhIGdlbmVyYXRvciBieSBpc3N1aW5nIGEgcmV0dXJuIGNvbW1hbmQsIG9yIGEKKyAgICAgICAgIyBuZXh0L3VudGlsIGNvbW1hbmQgYXQgdGhlIGxhc3Qgc3RhdGVtZW50IGluIHRoZSBnZW5lcmF0b3IgYmVmb3JlIHRoZQorICAgICAgICAjIGV4Y2VwdGlvbi4KKyAgICAgICAgZWxpZiAoc2VsZi5zdG9wZnJhbWUgYW5kIGZyYW1lIGlzIG5vdCBzZWxmLnN0b3BmcmFtZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLnN0b3BmcmFtZS5mX2NvZGUuY29fZmxhZ3MgJiBDT19HRU5FUkFUT1IKKyAgICAgICAgICAgICAgICBhbmQgYXJnWzBdIGluIChTdG9wSXRlcmF0aW9uLCBHZW5lcmF0b3JFeGl0KSk6CiAgICAgICAgICAgICBzZWxmLnVzZXJfZXhjZXB0aW9uKGZyYW1lLCBhcmcpCiAgICAgICAgICAgICBpZiBzZWxmLnF1aXR0aW5nOiByYWlzZSBCZGJRdWl0CisKICAgICAgICAgcmV0dXJuIHNlbGYudHJhY2VfZGlzcGF0Y2gKIAogICAgICMgTm9ybWFsbHkgZGVyaXZlZCBjbGFzc2VzIGRvbid0IG92ZXJyaWRlIHRoZSBmb2xsb3dpbmcKQEAgLTExNSwxMCArMTQwLDggQEAKICAgICAgICAgICAgIGlmIHNlbGYuc3RvcGxpbmVubyA9PSAtMToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBmcmFtZS5mX2xpbmVubyA+PSBzZWxmLnN0b3BsaW5lbm8KLSAgICAgICAgd2hpbGUgZnJhbWUgaXMgbm90IE5vbmUgYW5kIGZyYW1lIGlzIG5vdCBzZWxmLnN0b3BmcmFtZToKLSAgICAgICAgICAgIGlmIGZyYW1lIGlzIHNlbGYuYm90ZnJhbWU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGZyYW1lID0gZnJhbWUuZl9iYWNrCisgICAgICAgIGlmIG5vdCBzZWxmLnN0b3BmcmFtZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgZGVmIGJyZWFrX2hlcmUoc2VsZiwgZnJhbWUpOgpAQCAtMjA3LDcgKzIzMCwxMCBAQAogCiAgICAgZGVmIHNldF9yZXR1cm4oc2VsZiwgZnJhbWUpOgogICAgICAgICAiIiJTdG9wIHdoZW4gcmV0dXJuaW5nIGZyb20gdGhlIGdpdmVuIGZyYW1lLiIiIgotICAgICAgICBzZWxmLl9zZXRfc3RvcGluZm8oZnJhbWUuZl9iYWNrLCBmcmFtZSkKKyAgICAgICAgaWYgZnJhbWUuZl9jb2RlLmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SOgorICAgICAgICAgICAgc2VsZi5fc2V0X3N0b3BpbmZvKGZyYW1lLCBOb25lLCAtMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX3NldF9zdG9waW5mbyhmcmFtZS5mX2JhY2ssIGZyYW1lKQogCiAgICAgZGVmIHNldF90cmFjZShzZWxmLCBmcmFtZT1Ob25lKToKICAgICAgICAgIiIiU3RhcnQgZGVidWdnaW5nIGZyb20gYGZyYW1lYC4KZGlmZiAtLWdpdCBhL0xpYi9iaW5oZXgucHkgYi9MaWIvYmluaGV4LnB5CmluZGV4IDdiZjkyNzguLjgyNzJkNWMgMTAwNjQ0Ci0tLSBhL0xpYi9iaW5oZXgucHkKKysrIGIvTGliL2JpbmhleC5weQpAQCAtMzIsNyArMzIsOCBAQAogICAgIHBhc3MKIAogIyBTdGF0ZXMgKHdoYXQgaGF2ZSB3ZSB3cml0dGVuKQotW19ESURfSEVBREVSLCBfRElEX0RBVEEsIF9ESURfUlNSQ10gPSByYW5nZSgzKQorX0RJRF9IRUFERVIgPSAwCitfRElEX0RBVEEgPSAxCiAKICMgVmFyaW91cyBjb25zdGFudHMKIFJFQVNPTkFCTFlfTEFSR0UgPSAzMjc2OCAgIyBNaW5pbWFsIGFtb3VudCB3ZSBwYXNzIHRoZSBybGUtY29kZXIKQEAgLTIxMywxNiArMjE0LDIxIEBACiAgICAgICAgIHNlbGYuX3dyaXRlKGRhdGEpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuc3RhdGUgPCBfRElEX0RBVEE6Ci0gICAgICAgICAgICBzZWxmLmNsb3NlX2RhdGEoKQotICAgICAgICBpZiBzZWxmLnN0YXRlICE9IF9ESURfREFUQToKLSAgICAgICAgICAgIHJhaXNlIEVycm9yKCdDbG9zZSBhdCB0aGUgd3JvbmcgdGltZScpCi0gICAgICAgIGlmIHNlbGYucmxlbiAhPSAwOgotICAgICAgICAgICAgcmFpc2UgRXJyb3IoIkluY29ycmVjdCByZXNvdXJjZS1kYXRhc2l6ZSwgZGlmZj0lciIgJSAoc2VsZi5ybGVuLCkpCi0gICAgICAgIHNlbGYuX3dyaXRlY3JjKCkKLSAgICAgICAgc2VsZi5vZnAuY2xvc2UoKQotICAgICAgICBzZWxmLnN0YXRlID0gTm9uZQotICAgICAgICBkZWwgc2VsZi5vZnAKKyAgICAgICAgaWYgc2VsZi5zdGF0ZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdGUgPCBfRElEX0RBVEE6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9kYXRhKCkKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhdGUgIT0gX0RJRF9EQVRBOgorICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCdDbG9zZSBhdCB0aGUgd3JvbmcgdGltZScpCisgICAgICAgICAgICBpZiBzZWxmLnJsZW4gIT0gMDoKKyAgICAgICAgICAgICAgICByYWlzZSBFcnJvcigiSW5jb3JyZWN0IHJlc291cmNlLWRhdGFzaXplLCBkaWZmPSVyIiAlIChzZWxmLnJsZW4sKSkKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlY3JjKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBOb25lCisgICAgICAgICAgICBvZnAgPSBzZWxmLm9mcAorICAgICAgICAgICAgZGVsIHNlbGYub2ZwCisgICAgICAgICAgICBvZnAuY2xvc2UoKQogCiBkZWYgYmluaGV4KGlucCwgb3V0KToKICAgICAiIiJiaW5oZXgoaW5maWxlbmFtZSwgb3V0ZmlsZW5hbWUpOiBjcmVhdGUgYmluaGV4LWVuY29kZWQgY29weSBvZiBhIGZpbGUiIiIKQEAgLTQzNiwxMSArNDQyLDE1IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkKG4pCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYucmxlbjoKLSAgICAgICAgICAgIGR1bW15ID0gc2VsZi5yZWFkX3JzcmMoc2VsZi5ybGVuKQotICAgICAgICBzZWxmLl9jaGVja2NyYygpCi0gICAgICAgIHNlbGYuc3RhdGUgPSBfRElEX1JTUkMKLSAgICAgICAgc2VsZi5pZnAuY2xvc2UoKQorICAgICAgICBpZiBzZWxmLnN0YXRlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5ybGVuOgorICAgICAgICAgICAgICAgIGR1bW15ID0gc2VsZi5yZWFkX3JzcmMoc2VsZi5ybGVuKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tjcmMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuaWZwLmNsb3NlKCkKIAogZGVmIGhleGJpbihpbnAsIG91dCk6CiAgICAgIiIiaGV4YmluKGluZmlsZW5hbWUsIG91dGZpbGVuYW1lKSAtIERlY29kZSBiaW5oZXhlZCBmaWxlIiIiCmRpZmYgLS1naXQgYS9MaWIvYnoyLnB5IGIvTGliL2J6Mi5weQppbmRleCAxZGU4ZjNjLi42YzVhNjBkIDEwMDY0NAotLS0gYS9MaWIvYnoyLnB5CisrKyBiL0xpYi9iejIucHkKQEAgLTksNyArOSw3IEBACiAKIF9fYXV0aG9yX18gPSAiTmFkZWVtIFZhd2RhIDxuYWRlZW0udmF3ZGFAZ21haWwuY29tPiIKIAotaW1wb3J0IGJ1aWx0aW5zCitmcm9tIGJ1aWx0aW5zIGltcG9ydCBvcGVuIGFzIF9idWlsdGluX29wZW4KIGltcG9ydCBpbwogaW1wb3J0IHdhcm5pbmdzCiAKQEAgLTQzLDE2ICs0MywxNyBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZSwgbW9kZT0iciIsIGJ1ZmZlcmluZz1Ob25lLCBjb21wcmVzc2xldmVsPTkpOgogICAgICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlLgogCi0gICAgICAgIElmIGZpbGVuYW1lIGlzIGEgc3RyIG9yIGJ5dGVzIG9iamVjdCwgaXMgZ2l2ZXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8KLSAgICAgICAgYmUgb3BlbmVkLiBPdGhlcndpc2UsIGl0IHNob3VsZCBiZSBhIGZpbGUgb2JqZWN0LCB3aGljaCB3aWxsIGJlIHVzZWQgdG8KLSAgICAgICAgcmVhZCBvciB3cml0ZSB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgICAgICBJZiBmaWxlbmFtZSBpcyBhIHN0ciBvciBieXRlcyBvYmplY3QsIGl0IGdpdmVzIHRoZSBuYW1lCisgICAgICAgIG9mIHRoZSBmaWxlIHRvIGJlIG9wZW5lZC4gT3RoZXJ3aXNlLCBpdCBzaG91bGQgYmUgYSBmaWxlIG9iamVjdCwKKyAgICAgICAgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHJlYWQgb3Igd3JpdGUgdGhlIGNvbXByZXNzZWQgZGF0YS4KIAotICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsIG9yICdhJyBmb3IKLSAgICAgICAgYXBwZW5kaW5nLiBUaGVzZSBjYW4gZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsIGFuZCAnYWInLgorICAgICAgICBtb2RlIGNhbiBiZSAncicgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAndycgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICd4JyBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICdhJyBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICdyYicsICd3YicsICd4YicsIGFuZCAnYWInLgogCiAgICAgICAgIGJ1ZmZlcmluZyBpcyBpZ25vcmVkLiBJdHMgdXNlIGlzIGRlcHJlY2F0ZWQuCiAKLSAgICAgICAgSWYgbW9kZSBpcyAndycgb3IgJ2EnLCBjb21wcmVzc2xldmVsIGNhbiBiZSBhIG51bWJlciBiZXR3ZWVuIDEKKyAgICAgICAgSWYgbW9kZSBpcyAndycsICd4JyBvciAnYScsIGNvbXByZXNzbGV2ZWwgY2FuIGJlIGEgbnVtYmVyIGJldHdlZW4gMQogICAgICAgICBhbmQgOSBzcGVjaWZ5aW5nIHRoZSBsZXZlbCBvZiBjb21wcmVzc2lvbjogMSBwcm9kdWNlcyB0aGUgbGVhc3QKICAgICAgICAgY29tcHJlc3Npb24sIGFuZCA5IChkZWZhdWx0KSBwcm9kdWNlcyB0aGUgbW9zdCBjb21wcmVzc2lvbi4KIApAQCAtODUsMTUgKzg2LDE5IEBACiAgICAgICAgICAgICBtb2RlID0gIndiIgogICAgICAgICAgICAgbW9kZV9jb2RlID0gX01PREVfV1JJVEUKICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzb3IgPSBCWjJDb21wcmVzc29yKGNvbXByZXNzbGV2ZWwpCisgICAgICAgIGVsaWYgbW9kZSBpbiAoIngiLCAieGIiKToKKyAgICAgICAgICAgIG1vZGUgPSAieGIiCisgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQorICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NvciA9IEJaMkNvbXByZXNzb3IoY29tcHJlc3NsZXZlbCkKICAgICAgICAgZWxpZiBtb2RlIGluICgiYSIsICJhYiIpOgogICAgICAgICAgICAgbW9kZSA9ICJhYiIKICAgICAgICAgICAgIG1vZGVfY29kZSA9IF9NT0RFX1dSSVRFCiAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBtb2RlOiB7IXJ9Ii5mb3JtYXQobW9kZSkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIG1vZGU6ICVyIiAlIChtb2RlLCkpCiAKICAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgKHN0ciwgYnl0ZXMpKToKLSAgICAgICAgICAgIHNlbGYuX2ZwID0gYnVpbHRpbnMub3BlbihmaWxlbmFtZSwgbW9kZSkKKyAgICAgICAgICAgIHNlbGYuX2ZwID0gX2J1aWx0aW5fb3BlbihmaWxlbmFtZSwgbW9kZSkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZnAgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9tb2RlID0gbW9kZV9jb2RlCiAgICAgICAgIGVsaWYgaGFzYXR0cihmaWxlbmFtZSwgInJlYWQiKSBvciBoYXNhdHRyKGZpbGVuYW1lLCAid3JpdGUiKToKQEAgLTE4OSwxNSArMTk0LDE3IEBACiAKICAgICAgICAgICAgIGlmIG5vdCByYXdibG9jazoKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICAgICAjIEVuZC1vZi1zdHJlYW0gbWFya2VyIGFuZCBlbmQgb2YgZmlsZS4gV2UncmUgZ29vZC4KICAgICAgICAgICAgICAgICAgICAgc2VsZi5fbW9kZSA9IF9NT0RFX1JFQURfRU9GCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NpemUgPSBzZWxmLl9wb3MKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBQcm9ibGVtIC0gd2Ugd2VyZSBleHBlY3RpbmcgbW9yZSBjb21wcmVzc2VkIGRhdGEuCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJDb21wcmVzc2VkIGZpbGUgZW5kZWQgYmVmb3JlIHRoZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCiAKLSAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IuZW9mOgorICAgICAgICAgICAgICAgICMgQ29udGludWUgdG8gbmV4dCBzdHJlYW0uCiAgICAgICAgICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gQloyRGVjb21wcmVzc29yKCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2RlY29tcHJlc3Nvci5kZWNvbXByZXNzKHJhd2Jsb2NrKQpAQCAtNDE5LDcgKzQyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfYWxsKHJldHVybl9kYXRhPUZhbHNlKQogICAgICAgICAgICAgICAgIG9mZnNldCA9IHNlbGYuX3NpemUgKyBvZmZzZXQKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiB7fSIuZm9ybWF0KHdoZW5jZSkpCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCB2YWx1ZSBmb3Igd2hlbmNlOiAlcyIgJSAod2hlbmNlLCkpCiAKICAgICAgICAgICAgICMgTWFrZSBpdCBzbyB0aGF0IG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAgZm9yd2FyZC4KICAgICAgICAgICAgIGlmIG9mZnNldCA8IHNlbGYuX3BvczoKQEAgLTQ0MywyMCArNDUwLDIwIEBACiAgICAgICAgICBlbmNvZGluZz1Ob25lLCBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKToKICAgICAiIiJPcGVuIGEgYnppcDItY29tcHJlc3NlZCBmaWxlIGluIGJpbmFyeSBvciB0ZXh0IG1vZGUuCiAKLSAgICBUaGUgZmlsZW5hbWUgYXJndW1lbnQgY2FuIGJlIGFuIGFjdHVhbCBmaWxlbmFtZSAoYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwgb3IKLSAgICBhbiBleGlzdGluZyBmaWxlIG9iamVjdCB0byByZWFkIGZyb20gb3Igd3JpdGUgdG8uCisgICAgVGhlIGZpbGVuYW1lIGFyZ3VtZW50IGNhbiBiZSBhbiBhY3R1YWwgZmlsZW5hbWUgKGEgc3RyIG9yIGJ5dGVzCisgICAgb2JqZWN0KSwgb3IgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiwgInciLCAid2IiLCAiYSIgb3IgImFiIiBmb3IgYmluYXJ5IG1vZGUsCi0gICAgb3IgInJ0IiwgInd0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuIFRoZSBkZWZhdWx0IG1vZGUgaXMgInJiIiwgYW5kIHRoZQotICAgIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgorICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgIngiLCAieGIiLCAiYSIgb3IKKyAgICAiYWIiIGZvciBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiwgInh0IiBvciAiYXQiIGZvciB0ZXh0IG1vZGUuCisgICAgVGhlIGRlZmF1bHQgbW9kZSBpcyAicmIiLCBhbmQgdGhlIGRlZmF1bHQgY29tcHJlc3NsZXZlbCBpcyA5LgogCi0gICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUgY29uc3RydWN0b3I6Ci0gICAgQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKLSAgICBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCisgICAgRm9yIGJpbmFyeSBtb2RlLCB0aGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gdGhlIEJaMkZpbGUKKyAgICBjb25zdHJ1Y3RvcjogQloyRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwKKyAgICB0aGUgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKICAgICBGb3IgdGV4dCBtb2RlLCBhIEJaMkZpbGUgb2JqZWN0IGlzIGNyZWF0ZWQsIGFuZCB3cmFwcGVkIGluIGFuCi0gICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yIGhhbmRsaW5nCi0gICAgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KKyAgICBpby5UZXh0SU9XcmFwcGVyIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBlbmNvZGluZywgZXJyb3IKKyAgICBoYW5kbGluZyBiZWhhdmlvciwgYW5kIGxpbmUgZW5kaW5nKHMpLgogCiAgICAgIiIiCiAgICAgaWYgInQiIGluIG1vZGU6CmRpZmYgLS1naXQgYS9MaWIvY1Byb2ZpbGUucHkgYi9MaWIvY1Byb2ZpbGUucHkKaW5kZXggYzI0ZDQ1Yi4uMTE4NDM4NSAxMDA3NTUKLS0tIGEvTGliL2NQcm9maWxlLnB5CisrKyBiL0xpYi9jUHJvZmlsZS5weQpAQCAtNyw1NCArNywyMCBAQAogX19hbGxfXyA9IFsicnVuIiwgInJ1bmN0eCIsICJQcm9maWxlIl0KIAogaW1wb3J0IF9sc3Byb2YKK2ltcG9ydCBwcm9maWxlIGFzIF9weXByb2ZpbGUKIAogIyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KICMgU2ltcGxlIGludGVyZmFjZQogCiBkZWYgcnVuKHN0YXRlbWVudCwgZmlsZW5hbWU9Tm9uZSwgc29ydD0tMSk6Ci0gICAgIiIiUnVuIHN0YXRlbWVudCB1bmRlciBwcm9maWxlciBvcHRpb25hbGx5IHNhdmluZyByZXN1bHRzIGluIGZpbGVuYW1lCi0KLSAgICBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgc2luZ2xlIGFyZ3VtZW50IHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUKLSAgICAiZXhlYyIgc3RhdGVtZW50LCBhbmQgYW4gb3B0aW9uYWwgZmlsZSBuYW1lLiAgSW4gYWxsIGNhc2VzIHRoaXMKLSAgICByb3V0aW5lIGF0dGVtcHRzIHRvICJleGVjIiBpdHMgZmlyc3QgYXJndW1lbnQgYW5kIGdhdGhlciBwcm9maWxpbmcKLSAgICBzdGF0aXN0aWNzIGZyb20gdGhlIGV4ZWN1dGlvbi4gSWYgbm8gZmlsZSBuYW1lIGlzIHByZXNlbnQsIHRoZW4gdGhpcwotICAgIGZ1bmN0aW9uIGF1dG9tYXRpY2FsbHkgcHJpbnRzIGEgc2ltcGxlIHByb2ZpbGluZyByZXBvcnQsIHNvcnRlZCBieSB0aGUKLSAgICBzdGFuZGFyZCBuYW1lIHN0cmluZyAoZmlsZS9saW5lL2Z1bmN0aW9uLW5hbWUpIHRoYXQgaXMgcHJlc2VudGVkIGluCi0gICAgZWFjaCBsaW5lLgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW4oc3RhdGVtZW50KQotICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgICAgIHBhc3MKLSAgICBmaW5hbGx5OgotICAgICAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHByb2YuZHVtcF9zdGF0cyhmaWxlbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJlc3VsdCA9IHByb2YucHJpbnRfc3RhdHMoc29ydCkKLSAgICByZXR1cm4gcmVzdWx0CisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKLSAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLAotICAgIG9wdGlvbmFsbHkgc2F2aW5nIHJlc3VsdHMgaW4gZmlsZW5hbWUuCisgICAgcmV0dXJuIF9weXByb2ZpbGUuX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBzb3J0KQogCi0gICAgc3RhdGVtZW50IGFuZCBmaWxlbmFtZSBoYXZlIHRoZSBzYW1lIHNlbWFudGljcyBhcyBwcm9maWxlLnJ1bgotICAgICIiIgotICAgIHByb2YgPSBQcm9maWxlKCkKLSAgICByZXN1bHQgPSBOb25lCi0gICAgdHJ5OgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgotICAgICAgICAgICAgcGFzcwotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gcHJvZi5wcmludF9zdGF0cyhzb3J0KQotICAgIHJldHVybiByZXN1bHQKK3J1bi5fX2RvY19fID0gX3B5cHJvZmlsZS5ydW4uX19kb2NfXworcnVuY3R4Ll9fZG9jX18gPSBfcHlwcm9maWxlLnJ1bmN0eC5fX2RvY19fCiAKICMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAKQEAgLTc3LDEwICs0Myw5IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKICAgICAgICAgaW1wb3J0IG1hcnNoYWwKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLmRpc2FibGUoKQpkaWZmIC0tZ2l0IGEvTGliL2NhbGVuZGFyLnB5IGIvTGliL2NhbGVuZGFyLnB5CmluZGV4IDAyMDUwZWEuLjUyNDRiOGQgMTAwNjQ0Ci0tLSBhL0xpYi9jYWxlbmRhci5weQorKysgYi9MaWIvY2FsZW5kYXIucHkKQEAgLTE0Miw3ICsxNDIsNyBAQAogCiAgICAgZGVmIGl0ZXJ3ZWVrZGF5cyhzZWxmKToKICAgICAgICAgIiIiCi0gICAgICAgIFJldHVybiBhIGl0ZXJhdG9yIGZvciBvbmUgd2VlayBvZiB3ZWVrZGF5IG51bWJlcnMgc3RhcnRpbmcgd2l0aCB0aGUKKyAgICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIGZvciBvbmUgd2VlayBvZiB3ZWVrZGF5IG51bWJlcnMgc3RhcnRpbmcgd2l0aCB0aGUKICAgICAgICAgY29uZmlndXJlZCBmaXJzdCBvbmUuCiAgICAgICAgICIiIgogICAgICAgICBmb3IgaSBpbiByYW5nZShzZWxmLmZpcnN0d2Vla2RheSwgc2VsZi5maXJzdHdlZWtkYXkgKyA3KToKZGlmZiAtLWdpdCBhL0xpYi9jZ2kucHkgYi9MaWIvY2dpLnB5CmluZGV4IDBmNTBkMGUuLjQ1YmFkZjYgMTAwNzU1Ci0tLSBhL0xpYi9jZ2kucHkKKysrIGIvTGliL2NnaS5weQpAQCAtODIsNyArODIsNyBAQAogICAgIGlmIGxvZ2ZpbGUgYW5kIG5vdCBsb2dmcDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbG9nZnAgPSBvcGVuKGxvZ2ZpbGUsICJhIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgIGlmIG5vdCBsb2dmcDoKICAgICAgICAgbG9nID0gbm9sb2cKQEAgLTU2MCw2ICs1NjAsMTIgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucmVhZF9zaW5nbGUoKQogCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcHJpbnRhYmxlIHJlcHJlc2VudGF0aW9uLiIiIgogICAgICAgICByZXR1cm4gIkZpZWxkU3RvcmFnZSglciwgJXIsICVyKSIgJSAoCkBAIC02ODAsNyArNjg2LDYgQEAKICAgICAgICAgICAgICAgICBlbmNvZGluZz1zZWxmLmVuY29kaW5nLCBlcnJvcnM9c2VsZi5lcnJvcnMpCiAgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBxdWVyeToKICAgICAgICAgICAgICAgICBzZWxmLmxpc3QuYXBwZW5kKE1pbmlGaWVsZFN0b3JhZ2Uoa2V5LCB2YWx1ZSkpCi0gICAgICAgICAgICBGaWVsZFN0b3JhZ2VDbGFzcyA9IE5vbmUKIAogICAgICAgICBrbGFzcyA9IHNlbGYuRmllbGRTdG9yYWdlQ2xhc3Mgb3Igc2VsZi5fX2NsYXNzX18KICAgICAgICAgZmlyc3RfbGluZSA9IHNlbGYuZnAucmVhZGxpbmUoKSAjIGJ5dGVzCkBAIC02ODgsOCArNjkzLDEzIEBACiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBzaG91bGQgcmV0dXJuIGJ5dGVzLCBnb3QgJXMiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5mcCwgdHlwZShmaXJzdF9saW5lKS5fX25hbWVfXykpCiAgICAgICAgIHNlbGYuYnl0ZXNfcmVhZCArPSBsZW4oZmlyc3RfbGluZSkKLSAgICAgICAgIyBmaXJzdCBsaW5lIGhvbGRzIGJvdW5kYXJ5IDsgaWdub3JlIGl0LCBvciBjaGVjayB0aGF0Ci0gICAgICAgICMgYiItLSIgKyBpYiA9PSBmaXJzdF9saW5lLnN0cmlwKCkgPworCisgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgY29uc3VtZSB0aGUgZmlsZSB1bnRpbCB3ZSd2ZSBoaXQgb3VyIGlubmVyIGJvdW5kYXJ5CisgICAgICAgIHdoaWxlIChmaXJzdF9saW5lLnN0cmlwKCkgIT0gKGIiLS0iICsgc2VsZi5pbm5lcmJvdW5kYXJ5KSBhbmQKKyAgICAgICAgICAgICAgICBmaXJzdF9saW5lKToKKyAgICAgICAgICAgIGZpcnN0X2xpbmUgPSBzZWxmLmZwLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHNlbGYuYnl0ZXNfcmVhZCArPSBsZW4oZmlyc3RfbGluZSkKKwogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgcGFyc2VyID0gRmVlZFBhcnNlcigpCiAgICAgICAgICAgICBoZHJfdGV4dCA9IGIiIgpAQCAtNzA0LDYgKzcxNCwxMSBAQAogICAgICAgICAgICAgc2VsZi5ieXRlc19yZWFkICs9IGxlbihoZHJfdGV4dCkKICAgICAgICAgICAgIHBhcnNlci5mZWVkKGhkcl90ZXh0LmRlY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykpCiAgICAgICAgICAgICBoZWFkZXJzID0gcGFyc2VyLmNsb3NlKCkKKworICAgICAgICAgICAgIyBTb21lIGNsaWVudHMgYWRkIENvbnRlbnQtTGVuZ3RoIGZvciBwYXJ0IGhlYWRlcnMsIGlnbm9yZSB0aGVtCisgICAgICAgICAgICBpZiAnY29udGVudC1sZW5ndGgnIGluIGhlYWRlcnM6CisgICAgICAgICAgICAgICAgZGVsIGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ10KKwogICAgICAgICAgICAgcGFydCA9IGtsYXNzKHNlbGYuZnAsIGhlYWRlcnMsIGliLCBlbnZpcm9uLCBrZWVwX2JsYW5rX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpY3RfcGFyc2luZyxzZWxmLmxpbWl0LXNlbGYuYnl0ZXNfcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKQEAgLTk2OCw4ICs5ODMsOCBAQAogICAgIHByaW50KCI8SDM+Q3VycmVudCBXb3JraW5nIERpcmVjdG9yeTo8L0gzPiIpCiAgICAgdHJ5OgogICAgICAgICBwd2QgPSBvcy5nZXRjd2QoKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6Ci0gICAgICAgIHByaW50KCJvcy5lcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgorICAgICAgICBwcmludCgiT1NFcnJvcjoiLCBodG1sLmVzY2FwZShzdHIobXNnKSkpCiAgICAgZWxzZToKICAgICAgICAgcHJpbnQoaHRtbC5lc2NhcGUocHdkKSkKICAgICBwcmludCgpCkBAIC0xMDQwLDcgKzEwNTUsNyBAQAogICAgIHJldHVybiBzCiAKIAotZGVmIHZhbGlkX2JvdW5kYXJ5KHMsIF92Yl9wYXR0ZXJuPU5vbmUpOgorZGVmIHZhbGlkX2JvdW5kYXJ5KHMpOgogICAgIGltcG9ydCByZQogICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgogICAgICAgICBfdmJfcGF0dGVybiA9IGIiXlsgLX5dezAsMjAwfVshLX5dJCIKZGlmZiAtLWdpdCBhL0xpYi9jaHVuay5weSBiL0xpYi9jaHVuay5weQppbmRleCA1ODYzZWQwLi5kOTRkZDM5IDEwMDY0NAotLS0gYS9MaWIvY2h1bmsucHkKKysrIGIvTGliL2NodW5rLnB5CkBAIC0yMSw3ICsyMSw3IEBACiB1c2FnZSBvZiB0aGUgQ2h1bmsgY2xhc3MgZGVmaW5lZCBoZXJlIGlzIHRvIGluc3RhbnRpYXRlIGFuIGluc3RhbmNlIGF0CiB0aGUgc3RhcnQgb2YgZWFjaCBjaHVuayBhbmQgcmVhZCBmcm9tIHRoZSBpbnN0YW5jZSB1bnRpbCBpdCByZWFjaGVzCiB0aGUgZW5kLCBhZnRlciB3aGljaCBhIG5ldyBpbnN0YW5jZSBjYW4gYmUgaW5zdGFudGlhdGVkLiAgQXQgdGhlIGVuZAotb2YgdGhlIGZpbGUsIGNyZWF0aW5nIGEgbmV3IGluc3RhbmNlIHdpbGwgZmFpbCB3aXRoIGEgRU9GRXJyb3IKK29mIHRoZSBmaWxlLCBjcmVhdGluZyBhIG5ldyBpbnN0YW5jZSB3aWxsIGZhaWwgd2l0aCBhbiBFT0ZFcnJvcgogZXhjZXB0aW9uLgogCiBVc2FnZToKQEAgLTcwLDcgKzcwLDcgQEAKICAgICAgICAgc2VsZi5zaXplX3JlYWQgPSAwCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYub2Zmc2V0ID0gc2VsZi5maWxlLnRlbGwoKQotICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgT1NFcnJvcik6CiAgICAgICAgICAgICBzZWxmLnNlZWthYmxlID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc2Vla2FibGUgPSBUcnVlCkBAIC04NSw4ICs4NSwxMCBAQAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICBzZWxmLnNraXAoKQotICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5za2lwKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCiAKICAgICBkZWYgaXNhdHR5KHNlbGYpOgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKQEAgLTEwMiw3ICsxMDQsNyBAQAogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogICAgICAgICBpZiBub3Qgc2VsZi5zZWVrYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNhbm5vdCBzZWVrIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoImNhbm5vdCBzZWVrIikKICAgICAgICAgaWYgd2hlbmNlID09IDE6CiAgICAgICAgICAgICBwb3MgPSBwb3MgKyBzZWxmLnNpemVfcmVhZAogICAgICAgICBlbGlmIHdoZW5jZSA9PSAyOgpAQCAtMTI2LDcgKzEyOCw3IEBACiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZmlsZSIpCiAgICAgICAgIGlmIHNlbGYuc2l6ZV9yZWFkID49IHNlbGYuY2h1bmtzaXplOgotICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgICAgICByZXR1cm4gYicnCiAgICAgICAgIGlmIHNpemUgPCAwOgogICAgICAgICAgICAgc2l6ZSA9IHNlbGYuY2h1bmtzaXplIC0gc2VsZi5zaXplX3JlYWQKICAgICAgICAgaWYgc2l6ZSA+IHNlbGYuY2h1bmtzaXplIC0gc2VsZi5zaXplX3JlYWQ6CkBAIC0xNTgsNyArMTYwLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZpbGUuc2VlayhuLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuc2l6ZV9yZWFkID0gc2VsZi5zaXplX3JlYWQgKyBuCiAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgd2hpbGUgc2VsZi5zaXplX3JlYWQgPCBzZWxmLmNodW5rc2l6ZToKICAgICAgICAgICAgIG4gPSBtaW4oODE5Miwgc2VsZi5jaHVua3NpemUgLSBzZWxmLnNpemVfcmVhZCkKZGlmZiAtLWdpdCBhL0xpYi9jb2RlLnB5IGIvTGliL2NvZGUucHkKaW5kZXggOTAyMGFhYi4uZjgxODRiNiAxMDA2NDQKLS0tIGEvTGliL2NvZGUucHkKKysrIGIvTGliL2NvZGUucHkKQEAgLTIxNiw3ICsyMTYsNyBAQAogICAgICAgICAgICAgc2VsZi53cml0ZSgiUHl0aG9uICVzIG9uICVzXG4lc1xuKCVzKVxuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgIChzeXMudmVyc2lvbiwgc3lzLnBsYXRmb3JtLCBjcHJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pKQotICAgICAgICBlbHNlOgorICAgICAgICBlbGlmIGJhbm5lcjoKICAgICAgICAgICAgIHNlbGYud3JpdGUoIiVzXG4iICUgc3RyKGJhbm5lcikpCiAgICAgICAgIG1vcmUgPSAwCiAgICAgICAgIHdoaWxlIDE6CmRpZmYgLS1naXQgYS9MaWIvY29kZWNzLnB5IGIvTGliL2NvZGVjcy5weQppbmRleCBjMjA2NWRhLi42Y2RmM2Y0IDEwMDY0NAotLS0gYS9MaWIvY29kZWNzLnB5CisrKyBiL0xpYi9jb2RlY3MucHkKQEAgLTIwLDggKzIwLDE0IEBACiAgICAgICAgICAgICJCT01fTEUiLCAiQk9NMzJfQkUiLCAiQk9NMzJfTEUiLCAiQk9NNjRfQkUiLCAiQk9NNjRfTEUiLAogICAgICAgICAgICAiQk9NX1VURjgiLCAiQk9NX1VURjE2IiwgIkJPTV9VVEYxNl9MRSIsICJCT01fVVRGMTZfQkUiLAogICAgICAgICAgICAiQk9NX1VURjMyIiwgIkJPTV9VVEYzMl9MRSIsICJCT01fVVRGMzJfQkUiLAorICAgICAgICAgICAiQ29kZWNJbmZvIiwgIkNvZGVjIiwgIkluY3JlbWVudGFsRW5jb2RlciIsICJJbmNyZW1lbnRhbERlY29kZXIiLAorICAgICAgICAgICAiU3RyZWFtUmVhZGVyIiwgIlN0cmVhbVdyaXRlciIsCisgICAgICAgICAgICJTdHJlYW1SZWFkZXJXcml0ZXIiLCAiU3RyZWFtUmVjb2RlciIsCisgICAgICAgICAgICJnZXRlbmNvZGVyIiwgImdldGRlY29kZXIiLCAiZ2V0aW5jcmVtZW50YWxlbmNvZGVyIiwKKyAgICAgICAgICAgImdldGluY3JlbWVudGFsZGVjb2RlciIsICJnZXRyZWFkZXIiLCAiZ2V0d3JpdGVyIiwKKyAgICAgICAgICAgImVuY29kZSIsICJkZWNvZGUiLCAiaXRlcmVuY29kZSIsICJpdGVyZGVjb2RlIiwKICAgICAgICAgICAgInN0cmljdF9lcnJvcnMiLCAiaWdub3JlX2Vycm9ycyIsICJyZXBsYWNlX2Vycm9ycyIsCi0gICAgICAgICAgICJ4bWxjaGFycmVmcmVwbGFjZV9lcnJvcnMiLAorICAgICAgICAgICAieG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzIiwgImJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzIiwKICAgICAgICAgICAgInJlZ2lzdGVyX2Vycm9yIiwgImxvb2t1cF9lcnJvciJdCiAKICMjIyBDb25zdGFudHMKQEAgLTExNyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICBQeXRob24gd2lsbCB1c2UgdGhlIG9mZmljaWFsIFUrRkZGRCBSRVBMQUNFTUVOVAogICAgICAgICAgICAgICAgICAgICBDSEFSQUNURVIgZm9yIHRoZSBidWlsdGluIFVuaWNvZGUgY29kZWNzIG9uCiAgICAgICAgICAgICAgICAgICAgIGRlY29kaW5nIGFuZCAnPycgb24gZW5jb2RpbmcuCi0gICAgICAgICAnc3Vycm9nYXRlZXNjYXBlJyAtIHJlcGxhY2Ugd2l0aCBwcml2YXRlIGNvZGVwb2ludHMgVStEQ25uLgorICAgICAgICAgJ3N1cnJvZ2F0ZWVzY2FwZScgLSByZXBsYWNlIHdpdGggcHJpdmF0ZSBjb2RlIHBvaW50cyBVK0RDbm4uCiAgICAgICAgICAneG1sY2hhcnJlZnJlcGxhY2UnIC0gUmVwbGFjZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBYTUwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyYWN0ZXIgcmVmZXJlbmNlIChvbmx5IGZvciBlbmNvZGluZykuCiAgICAgICAgICAnYmFja3NsYXNocmVwbGFjZScgIC0gUmVwbGFjZSB3aXRoIGJhY2tzbGFzaGVkIGVzY2FwZSBzZXF1ZW5jZXMKQEAgLTEzNSw4ICsxNDEsOCBAQAogICAgICAgICAgICAgJ3N0cmljdCcgaGFuZGxpbmcuCiAKICAgICAgICAgICAgIFRoZSBtZXRob2QgbWF5IG5vdCBzdG9yZSBzdGF0ZSBpbiB0aGUgQ29kZWMgaW5zdGFuY2UuIFVzZQotICAgICAgICAgICAgU3RyZWFtQ29kZWMgZm9yIGNvZGVjcyB3aGljaCBoYXZlIHRvIGtlZXAgc3RhdGUgaW4gb3JkZXIgdG8KLSAgICAgICAgICAgIG1ha2UgZW5jb2RpbmcvZGVjb2RpbmcgZWZmaWNpZW50LgorICAgICAgICAgICAgU3RyZWFtV3JpdGVyIGZvciBjb2RlY3Mgd2hpY2ggaGF2ZSB0byBrZWVwIHN0YXRlIGluIG9yZGVyIHRvCisgICAgICAgICAgICBtYWtlIGVuY29kaW5nIGVmZmljaWVudC4KIAogICAgICAgICAgICAgVGhlIGVuY29kZXIgbXVzdCBiZSBhYmxlIHRvIGhhbmRsZSB6ZXJvIGxlbmd0aCBpbnB1dCBhbmQKICAgICAgICAgICAgIHJldHVybiBhbiBlbXB0eSBvYmplY3Qgb2YgdGhlIG91dHB1dCBvYmplY3QgdHlwZSBpbiB0aGlzCkBAIC0xNTgsOCArMTY0LDggQEAKICAgICAgICAgICAgICdzdHJpY3QnIGhhbmRsaW5nLgogCiAgICAgICAgICAgICBUaGUgbWV0aG9kIG1heSBub3Qgc3RvcmUgc3RhdGUgaW4gdGhlIENvZGVjIGluc3RhbmNlLiBVc2UKLSAgICAgICAgICAgIFN0cmVhbUNvZGVjIGZvciBjb2RlY3Mgd2hpY2ggaGF2ZSB0byBrZWVwIHN0YXRlIGluIG9yZGVyIHRvCi0gICAgICAgICAgICBtYWtlIGVuY29kaW5nL2RlY29kaW5nIGVmZmljaWVudC4KKyAgICAgICAgICAgIFN0cmVhbVJlYWRlciBmb3IgY29kZWNzIHdoaWNoIGhhdmUgdG8ga2VlcCBzdGF0ZSBpbiBvcmRlciB0bworICAgICAgICAgICAgbWFrZSBkZWNvZGluZyBlZmZpY2llbnQuCiAKICAgICAgICAgICAgIFRoZSBkZWNvZGVyIG11c3QgYmUgYWJsZSB0byBoYW5kbGUgemVybyBsZW5ndGggaW5wdXQgYW5kCiAgICAgICAgICAgICByZXR1cm4gYW4gZW1wdHkgb2JqZWN0IG9mIHRoZSBvdXRwdXQgb2JqZWN0IHR5cGUgaW4gdGhpcwpAQCAtMjUwLDcgKzI1Niw3IEBACiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVycm9ycz0nc3RyaWN0Jyk6CiAgICAgICAgICIiIgotICAgICAgICBDcmVhdGUgYSBJbmNyZW1lbnRhbERlY29kZXIgaW5zdGFuY2UuCisgICAgICAgIENyZWF0ZSBhbiBJbmNyZW1lbnRhbERlY29kZXIgaW5zdGFuY2UuCiAKICAgICAgICAgVGhlIEluY3JlbWVudGFsRGVjb2RlciBtYXkgdXNlIGRpZmZlcmVudCBlcnJvciBoYW5kbGluZyBzY2hlbWVzIGJ5CiAgICAgICAgIHByb3ZpZGluZyB0aGUgZXJyb3JzIGtleXdvcmQgYXJndW1lbnQuIFNlZSB0aGUgbW9kdWxlIGRvY3N0cmluZwpAQCAtMzQwLDggKzM0Niw3IEBACiAKICAgICAgICAgIiIiIENyZWF0ZXMgYSBTdHJlYW1Xcml0ZXIgaW5zdGFuY2UuCiAKLSAgICAgICAgICAgIHN0cmVhbSBtdXN0IGJlIGEgZmlsZS1saWtlIG9iamVjdCBvcGVuIGZvciB3cml0aW5nCi0gICAgICAgICAgICAoYmluYXJ5KSBkYXRhLgorICAgICAgICAgICAgc3RyZWFtIG11c3QgYmUgYSBmaWxlLWxpa2Ugb2JqZWN0IG9wZW4gZm9yIHdyaXRpbmcuCiAKICAgICAgICAgICAgIFRoZSBTdHJlYW1Xcml0ZXIgbWF5IHVzZSBkaWZmZXJlbnQgZXJyb3IgaGFuZGxpbmcKICAgICAgICAgICAgIHNjaGVtZXMgYnkgcHJvdmlkaW5nIHRoZSBlcnJvcnMga2V5d29yZCBhcmd1bWVudC4gVGhlc2UKQEAgLTQxNSw4ICs0MjAsNyBAQAogCiAgICAgICAgICIiIiBDcmVhdGVzIGEgU3RyZWFtUmVhZGVyIGluc3RhbmNlLgogCi0gICAgICAgICAgICBzdHJlYW0gbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3Qgb3BlbiBmb3IgcmVhZGluZwotICAgICAgICAgICAgKGJpbmFyeSkgZGF0YS4KKyAgICAgICAgICAgIHN0cmVhbSBtdXN0IGJlIGEgZmlsZS1saWtlIG9iamVjdCBvcGVuIGZvciByZWFkaW5nLgogCiAgICAgICAgICAgICBUaGUgU3RyZWFtUmVhZGVyIG1heSB1c2UgZGlmZmVyZW50IGVycm9yIGhhbmRsaW5nCiAgICAgICAgICAgICBzY2hlbWVzIGJ5IHByb3ZpZGluZyB0aGUgZXJyb3JzIGtleXdvcmQgYXJndW1lbnQuIFRoZXNlCkBAIC00NDQsMTMgKzQ0OCwxMiBAQAogICAgICAgICAiIiIgRGVjb2RlcyBkYXRhIGZyb20gdGhlIHN0cmVhbSBzZWxmLnN0cmVhbSBhbmQgcmV0dXJucyB0aGUKICAgICAgICAgICAgIHJlc3VsdGluZyBvYmplY3QuCiAKLSAgICAgICAgICAgIGNoYXJzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gcmVhZCBmcm9tIHRoZQotICAgICAgICAgICAgc3RyZWFtLiByZWFkKCkgd2lsbCBuZXZlciByZXR1cm4gbW9yZSB0aGFuIGNoYXJzCi0gICAgICAgICAgICBjaGFyYWN0ZXJzLCBidXQgaXQgbWlnaHQgcmV0dXJuIGxlc3MsIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoCi0gICAgICAgICAgICBjaGFyYWN0ZXJzIGF2YWlsYWJsZS4KKyAgICAgICAgICAgIGNoYXJzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGRlY29kZWQgY29kZSBwb2ludHMgb3IgYnl0ZXMgdG8KKyAgICAgICAgICAgIHJldHVybi4gcmVhZCgpIHdpbGwgbmV2ZXIgcmV0dXJuIG1vcmUgZGF0YSB0aGFuIHJlcXVlc3RlZCwKKyAgICAgICAgICAgIGJ1dCBpdCBtaWdodCByZXR1cm4gbGVzcywgaWYgdGhlcmUgaXMgbm90IGVub3VnaCBhdmFpbGFibGUuCiAKLSAgICAgICAgICAgIHNpemUgaW5kaWNhdGVzIHRoZSBhcHByb3hpbWF0ZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0bwotICAgICAgICAgICAgcmVhZCBmcm9tIHRoZSBzdHJlYW0gZm9yIGRlY29kaW5nIHB1cnBvc2VzLiBUaGUgZGVjb2RlcgorICAgICAgICAgICAgc2l6ZSBpbmRpY2F0ZXMgdGhlIGFwcHJveGltYXRlIG1heGltdW0gbnVtYmVyIG9mIGRlY29kZWQKKyAgICAgICAgICAgIGJ5dGVzIG9yIGNvZGUgcG9pbnRzIHRvIHJlYWQgZm9yIGRlY29kaW5nLiBUaGUgZGVjb2RlcgogICAgICAgICAgICAgY2FuIG1vZGlmeSB0aGlzIHNldHRpbmcgYXMgYXBwcm9wcmlhdGUuIFRoZSBkZWZhdWx0IHZhbHVlCiAgICAgICAgICAgICAtMSBpbmRpY2F0ZXMgdG8gcmVhZCBhbmQgZGVjb2RlIGFzIG11Y2ggYXMgcG9zc2libGUuICBzaXplCiAgICAgICAgICAgICBpcyBpbnRlbmRlZCB0byBwcmV2ZW50IGhhdmluZyB0byBkZWNvZGUgaHVnZSBmaWxlcyBpbiBvbmUKQEAgLTQ2MSw3ICs0NjQsNyBAQAogICAgICAgICAgICAgd2lsbCBiZSByZXR1cm5lZCwgdGhlIHJlc3Qgb2YgdGhlIGlucHV0IHdpbGwgYmUga2VwdCB1bnRpbCB0aGUKICAgICAgICAgICAgIG5leHQgY2FsbCB0byByZWFkKCkuCiAKLSAgICAgICAgICAgIFRoZSBtZXRob2Qgc2hvdWxkIHVzZSBhIGdyZWVkeSByZWFkIHN0cmF0ZWd5IG1lYW5pbmcgdGhhdAorICAgICAgICAgICAgVGhlIG1ldGhvZCBzaG91bGQgdXNlIGEgZ3JlZWR5IHJlYWQgc3RyYXRlZ3ksIG1lYW5pbmcgdGhhdAogICAgICAgICAgICAgaXQgc2hvdWxkIHJlYWQgYXMgbXVjaCBkYXRhIGFzIGlzIGFsbG93ZWQgd2l0aGluIHRoZQogICAgICAgICAgICAgZGVmaW5pdGlvbiBvZiB0aGUgZW5jb2RpbmcgYW5kIHRoZSBnaXZlbiBzaXplLCBlLmcuICBpZgogICAgICAgICAgICAgb3B0aW9uYWwgZW5jb2RpbmcgZW5kaW5ncyBvciBzdGF0ZSBtYXJrZXJzIGFyZSBhdmFpbGFibGUKQEAgLTU5Niw3ICs1OTksNyBAQAogICAgIGRlZiByZWFkbGluZXMoc2VsZiwgc2l6ZWhpbnQ9Tm9uZSwga2VlcGVuZHM9VHJ1ZSk6CiAKICAgICAgICAgIiIiIFJlYWQgYWxsIGxpbmVzIGF2YWlsYWJsZSBvbiB0aGUgaW5wdXQgc3RyZWFtCi0gICAgICAgICAgICBhbmQgcmV0dXJuIHRoZW0gYXMgbGlzdCBvZiBsaW5lcy4KKyAgICAgICAgICAgIGFuZCByZXR1cm4gdGhlbSBhcyBhIGxpc3QuCiAKICAgICAgICAgICAgIExpbmUgYnJlYWtzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyB0aGUgY29kZWMncyBkZWNvZGVyCiAgICAgICAgICAgICBtZXRob2QgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgbGlzdCBlbnRyaWVzLgpAQCAtNzQ0LDE5ICs3NDcsMTggQEAKIAogY2xhc3MgU3RyZWFtUmVjb2RlcjoKIAotICAgICIiIiBTdHJlYW1SZWNvZGVyIGluc3RhbmNlcyBwcm92aWRlIGEgZnJvbnRlbmQgLSBiYWNrZW5kCi0gICAgICAgIHZpZXcgb2YgZW5jb2RpbmcgZGF0YS4KKyAgICAiIiIgU3RyZWFtUmVjb2RlciBpbnN0YW5jZXMgdHJhbnNsYXRlIGRhdGEgZnJvbSBvbmUgZW5jb2RpbmcgdG8gYW5vdGhlci4KIAogICAgICAgICBUaGV5IHVzZSB0aGUgY29tcGxldGUgc2V0IG9mIEFQSXMgcmV0dXJuZWQgYnkgdGhlCiAgICAgICAgIGNvZGVjcy5sb29rdXAoKSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgdGhlaXIgdGFzay4KIAotICAgICAgICBEYXRhIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbSBpcyBmaXJzdCBkZWNvZGVkIGludG8gYW4KLSAgICAgICAgaW50ZXJtZWRpYXRlIGZvcm1hdCAod2hpY2ggaXMgZGVwZW5kZW50IG9uIHRoZSBnaXZlbiBjb2RlYwotICAgICAgICBjb21iaW5hdGlvbikgYW5kIHRoZW4gd3JpdHRlbiB0byB0aGUgc3RyZWFtIHVzaW5nIGFuIGluc3RhbmNlCi0gICAgICAgIG9mIHRoZSBwcm92aWRlZCBXcml0ZXIgY2xhc3MuCisgICAgICAgIERhdGEgd3JpdHRlbiB0byB0aGUgU3RyZWFtUmVjb2RlciBpcyBmaXJzdCBkZWNvZGVkIGludG8gYW4KKyAgICAgICAgaW50ZXJtZWRpYXRlIGZvcm1hdCAoZGVwZW5kaW5nIG9uIHRoZSAiZGVjb2RlIiBjb2RlYykgYW5kIHRoZW4KKyAgICAgICAgd3JpdHRlbiB0byB0aGUgdW5kZXJseWluZyBzdHJlYW0gdXNpbmcgYW4gaW5zdGFuY2Ugb2YgdGhlIHByb3ZpZGVkCisgICAgICAgIFdyaXRlciBjbGFzcy4KIAotICAgICAgICBJbiB0aGUgb3RoZXIgZGlyZWN0aW9uLCBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgc3RyZWFtIHVzaW5nIGEKLSAgICAgICAgUmVhZGVyIGluc3RhbmNlIGFuZCB0aGVuIHJldHVybiBlbmNvZGVkIGRhdGEgdG8gdGhlIGNhbGxlci4KKyAgICAgICAgSW4gdGhlIG90aGVyIGRpcmVjdGlvbiwgZGF0YSBpcyByZWFkIGZyb20gdGhlIHVuZGVybHlpbmcgc3RyZWFtIHVzaW5nCisgICAgICAgIGEgUmVhZGVyIGluc3RhbmNlIGFuZCB0aGVuIGVuY29kZWQgYW5kIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuCiAKICAgICAiIiIKICAgICAjIE9wdGlvbmFsIGF0dHJpYnV0ZXMgc2V0IGJ5IHRoZSBmaWxlIHdyYXBwZXJzIGJlbG93CkBAIC03NjgsMjIgKzc3MCwxNyBAQAogCiAgICAgICAgICIiIiBDcmVhdGVzIGEgU3RyZWFtUmVjb2RlciBpbnN0YW5jZSB3aGljaCBpbXBsZW1lbnRzIGEgdHdvLXdheQogICAgICAgICAgICAgY29udmVyc2lvbjogZW5jb2RlIGFuZCBkZWNvZGUgd29yayBvbiB0aGUgZnJvbnRlbmQgKHRoZQotICAgICAgICAgICAgaW5wdXQgdG8gLnJlYWQoKSBhbmQgb3V0cHV0IG9mIC53cml0ZSgpKSB3aGlsZQotICAgICAgICAgICAgUmVhZGVyIGFuZCBXcml0ZXIgd29yayBvbiB0aGUgYmFja2VuZCAocmVhZGluZyBhbmQKLSAgICAgICAgICAgIHdyaXRpbmcgdG8gdGhlIHN0cmVhbSkuCisgICAgICAgICAgICBkYXRhIHZpc2libGUgdG8gLnJlYWQoKSBhbmQgLndyaXRlKCkpIHdoaWxlIFJlYWRlciBhbmQgV3JpdGVyCisgICAgICAgICAgICB3b3JrIG9uIHRoZSBiYWNrZW5kICh0aGUgZGF0YSBpbiBzdHJlYW0pLgogCi0gICAgICAgICAgICBZb3UgY2FuIHVzZSB0aGVzZSBvYmplY3RzIHRvIGRvIHRyYW5zcGFyZW50IGRpcmVjdAotICAgICAgICAgICAgcmVjb2RpbmdzIGZyb20gZS5nLiBsYXRpbi0xIHRvIHV0Zi04IGFuZCBiYWNrLgorICAgICAgICAgICAgWW91IGNhbiB1c2UgdGhlc2Ugb2JqZWN0cyB0byBkbyB0cmFuc3BhcmVudAorICAgICAgICAgICAgdHJhbnNjb2RpbmdzIGZyb20gZS5nLiBsYXRpbi0xIHRvIHV0Zi04IGFuZCBiYWNrLgogCiAgICAgICAgICAgICBzdHJlYW0gbXVzdCBiZSBhIGZpbGUtbGlrZSBvYmplY3QuCiAKLSAgICAgICAgICAgIGVuY29kZSwgZGVjb2RlIG11c3QgYWRoZXJlIHRvIHRoZSBDb2RlYyBpbnRlcmZhY2UsIFJlYWRlciwKKyAgICAgICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIG11c3QgYWRoZXJlIHRvIHRoZSBDb2RlYyBpbnRlcmZhY2U7IFJlYWRlciBhbmQKICAgICAgICAgICAgIFdyaXRlciBtdXN0IGJlIGZhY3RvcnkgZnVuY3Rpb25zIG9yIGNsYXNzZXMgcHJvdmlkaW5nIHRoZQotICAgICAgICAgICAgU3RyZWFtUmVhZGVyLCBTdHJlYW1Xcml0ZXIgaW50ZXJmYWNlIHJlc3AuCi0KLSAgICAgICAgICAgIGVuY29kZSBhbmQgZGVjb2RlIGFyZSBuZWVkZWQgZm9yIHRoZSBmcm9udGVuZCB0cmFuc2xhdGlvbiwKLSAgICAgICAgICAgIFJlYWRlciBhbmQgV3JpdGVyIGZvciB0aGUgYmFja2VuZCB0cmFuc2xhdGlvbi4gVW5pY29kZSBpcwotICAgICAgICAgICAgdXNlZCBhcyBpbnRlcm1lZGlhdGUgZW5jb2RpbmcuCisgICAgICAgICAgICBTdHJlYW1SZWFkZXIgYW5kIFN0cmVhbVdyaXRlciBpbnRlcmZhY2VzIHJlc3AuCiAKICAgICAgICAgICAgIEVycm9yIGhhbmRsaW5nIGlzIGRvbmUgaW4gdGhlIHNhbWUgd2F5IGFzIGRlZmluZWQgZm9yIHRoZQogICAgICAgICAgICAgU3RyZWFtV3JpdGVyL1JlYWRlcnMuCkBAIC04NTgsNyArODU1LDcgQEAKIAogIyMjIFNob3J0Y3V0cwogCi1kZWYgb3BlbihmaWxlbmFtZSwgbW9kZT0ncmInLCBlbmNvZGluZz1Ob25lLCBlcnJvcnM9J3N0cmljdCcsIGJ1ZmZlcmluZz0xKToKK2RlZiBvcGVuKGZpbGVuYW1lLCBtb2RlPSdyJywgZW5jb2Rpbmc9Tm9uZSwgZXJyb3JzPSdzdHJpY3QnLCBidWZmZXJpbmc9MSk6CiAKICAgICAiIiIgT3BlbiBhbiBlbmNvZGVkIGZpbGUgdXNpbmcgdGhlIGdpdmVuIG1vZGUgYW5kIHJldHVybgogICAgICAgICBhIHdyYXBwZWQgdmVyc2lvbiBwcm92aWRpbmcgdHJhbnNwYXJlbnQgZW5jb2RpbmcvZGVjb2RpbmcuCkBAIC04NjgsMTAgKzg2NSw4IEBACiAgICAgICAgIGNvZGVjcy4gT3V0cHV0IGlzIGFsc28gY29kZWMgZGVwZW5kZW50IGFuZCB3aWxsIHVzdWFsbHkgYmUKICAgICAgICAgVW5pY29kZSBhcyB3ZWxsLgogCi0gICAgICAgIEZpbGVzIGFyZSBhbHdheXMgb3BlbmVkIGluIGJpbmFyeSBtb2RlLCBldmVuIGlmIG5vIGJpbmFyeSBtb2RlCi0gICAgICAgIHdhcyBzcGVjaWZpZWQuIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBkYXRhIGxvc3MgZHVlIHRvIGVuY29kaW5ncwotICAgICAgICB1c2luZyA4LWJpdCB2YWx1ZXMuIFRoZSBkZWZhdWx0IGZpbGUgbW9kZSBpcyAncmInIG1lYW5pbmcgdG8KLSAgICAgICAgb3BlbiB0aGUgZmlsZSBpbiBiaW5hcnkgcmVhZCBtb2RlLgorICAgICAgICBVbmRlcmx5aW5nIGVuY29kZWQgZmlsZXMgYXJlIGFsd2F5cyBvcGVuZWQgaW4gYmluYXJ5IG1vZGUuCisgICAgICAgIFRoZSBkZWZhdWx0IGZpbGUgbW9kZSBpcyAncicsIG1lYW5pbmcgdG8gb3BlbiB0aGUgZmlsZSBpbiByZWFkIG1vZGUuCiAKICAgICAgICAgZW5jb2Rpbmcgc3BlY2lmaWVzIHRoZSBlbmNvZGluZyB3aGljaCBpcyB0byBiZSB1c2VkIGZvciB0aGUKICAgICAgICAgZmlsZS4KQEAgLTkwNywxMyArOTAyLDEzIEBACiAgICAgIiIiIFJldHVybiBhIHdyYXBwZWQgdmVyc2lvbiBvZiBmaWxlIHdoaWNoIHByb3ZpZGVzIHRyYW5zcGFyZW50CiAgICAgICAgIGVuY29kaW5nIHRyYW5zbGF0aW9uLgogCi0gICAgICAgIFN0cmluZ3Mgd3JpdHRlbiB0byB0aGUgd3JhcHBlZCBmaWxlIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcKLSAgICAgICAgdG8gdGhlIGdpdmVuIGRhdGFfZW5jb2RpbmcgYW5kIHRoZW4gd3JpdHRlbiB0byB0aGUgb3JpZ2luYWwKLSAgICAgICAgZmlsZSBhcyBzdHJpbmcgdXNpbmcgZmlsZV9lbmNvZGluZy4gVGhlIGludGVybWVkaWF0ZSBlbmNvZGluZworICAgICAgICBEYXRhIHdyaXR0ZW4gdG8gdGhlIHdyYXBwZWQgZmlsZSBpcyBkZWNvZGVkIGFjY29yZGluZworICAgICAgICB0byB0aGUgZ2l2ZW4gZGF0YV9lbmNvZGluZyBhbmQgdGhlbiBlbmNvZGVkIHRvIHRoZSB1bmRlcmx5aW5nCisgICAgICAgIGZpbGUgdXNpbmcgZmlsZV9lbmNvZGluZy4gVGhlIGludGVybWVkaWF0ZSBkYXRhIHR5cGUKICAgICAgICAgd2lsbCB1c3VhbGx5IGJlIFVuaWNvZGUgYnV0IGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBjb2RlY3MuCiAKLSAgICAgICAgU3RyaW5ncyBhcmUgcmVhZCBmcm9tIHRoZSBmaWxlIHVzaW5nIGZpbGVfZW5jb2RpbmcgYW5kIHRoZW4KLSAgICAgICAgcGFzc2VkIGJhY2sgdG8gdGhlIGNhbGxlciBhcyBzdHJpbmcgdXNpbmcgZGF0YV9lbmNvZGluZy4KKyAgICAgICAgQnl0ZXMgcmVhZCBmcm9tIHRoZSBmaWxlIGFyZSBkZWNvZGVkIHVzaW5nIGZpbGVfZW5jb2RpbmcgYW5kIHRoZW4KKyAgICAgICAgcGFzc2VkIGJhY2sgdG8gdGhlIGNhbGxlciBlbmNvZGVkIHVzaW5nIGRhdGFfZW5jb2RpbmcuCiAKICAgICAgICAgSWYgZmlsZV9lbmNvZGluZyBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIGRhdGFfZW5jb2RpbmcuCiAKQEAgLTEwMTIsNyArMTAwNyw3IEBACiAgICAgIiIiCiAgICAgRW5jb2RpbmcgaXRlcmF0b3IuCiAKLSAgICBFbmNvZGVzIHRoZSBpbnB1dCBzdHJpbmdzIGZyb20gdGhlIGl0ZXJhdG9yIHVzaW5nIGEgSW5jcmVtZW50YWxFbmNvZGVyLgorICAgIEVuY29kZXMgdGhlIGlucHV0IHN0cmluZ3MgZnJvbSB0aGUgaXRlcmF0b3IgdXNpbmcgYW4gSW5jcmVtZW50YWxFbmNvZGVyLgogCiAgICAgZXJyb3JzIGFuZCBrd2FyZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBJbmNyZW1lbnRhbEVuY29kZXIKICAgICBjb25zdHJ1Y3Rvci4KQEAgLTEwMzAsNyArMTAyNSw3IEBACiAgICAgIiIiCiAgICAgRGVjb2RpbmcgaXRlcmF0b3IuCiAKLSAgICBEZWNvZGVzIHRoZSBpbnB1dCBzdHJpbmdzIGZyb20gdGhlIGl0ZXJhdG9yIHVzaW5nIGEgSW5jcmVtZW50YWxEZWNvZGVyLgorICAgIERlY29kZXMgdGhlIGlucHV0IHN0cmluZ3MgZnJvbSB0aGUgaXRlcmF0b3IgdXNpbmcgYW4gSW5jcmVtZW50YWxEZWNvZGVyLgogCiAgICAgZXJyb3JzIGFuZCBrd2FyZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBJbmNyZW1lbnRhbERlY29kZXIKICAgICBjb25zdHJ1Y3Rvci4KQEAgLTEwNjYsNyArMTA2MSw3IEBACiAgICAgICAgIGR1cmluZyB0cmFuc2xhdGlvbi4KIAogICAgICAgICBPbmUgZXhhbXBsZSB3aGVyZSB0aGlzIGhhcHBlbnMgaXMgY3A4NzUucHkgd2hpY2ggZGVjb2RlcwotICAgICAgICBtdWx0aXBsZSBjaGFyYWN0ZXIgdG8gXHUwMDFhLgorICAgICAgICBtdWx0aXBsZSBjaGFyYWN0ZXIgdG8gXFx1MDAxYS4KIAogICAgICIiIgogICAgIG0gPSB7fQpkaWZmIC0tZ2l0IGEvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5IGIvTGliL2NvbGxlY3Rpb25zL19faW5pdF9fLnB5CmluZGV4IGQ3MzcyOTUuLmY5NDIxMGUgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9fX2luaXRfXy5weQorKysgYi9MaWIvY29sbGVjdGlvbnMvX19pbml0X18ucHkKQEAgLTMsMTYgKzMsMTYgQEAKIAogIyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGNvbnRpbnVlIHRvIG1ha2UgdGhlIGNvbGxlY3Rpb25zIEFCQ3MKICMgYXZhaWxhYmxlIHRocm91Z2ggdGhlIGNvbGxlY3Rpb25zIG1vZHVsZS4KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCAqCi1pbXBvcnQgY29sbGVjdGlvbnMuYWJjCi1fX2FsbF9fICs9IGNvbGxlY3Rpb25zLmFiYy5fX2FsbF9fCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0ICoKK2ltcG9ydCBfY29sbGVjdGlvbnNfYWJjCitfX2FsbF9fICs9IF9jb2xsZWN0aW9uc19hYmMuX19hbGxfXwogCiBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUsIGRlZmF1bHRkaWN0CiBmcm9tIG9wZXJhdG9yIGltcG9ydCBpdGVtZ2V0dGVyIGFzIF9pdGVtZ2V0dGVyLCBlcSBhcyBfZXEKIGZyb20ga2V5d29yZCBpbXBvcnQgaXNrZXl3b3JkIGFzIF9pc2tleXdvcmQKIGltcG9ydCBzeXMgYXMgX3N5cwogaW1wb3J0IGhlYXBxIGFzIF9oZWFwcQotZnJvbSB3ZWFrcmVmIGltcG9ydCBwcm94eSBhcyBfcHJveHkKK2Zyb20gX3dlYWtyZWYgaW1wb3J0IHByb3h5IGFzIF9wcm94eQogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHJlcGVhdCBhcyBfcmVwZWF0LCBjaGFpbiBhcyBfY2hhaW4sIHN0YXJtYXAgYXMgX3N0YXJtYXAKIGZyb20gcmVwcmxpYiBpbXBvcnQgcmVjdXJzaXZlX3JlcHIgYXMgX3JlY3Vyc2l2ZV9yZXByCiAKQEAgLTM4LDEyICszOCwxNiBAQAogICAgICMgSW5kaXZpZHVhbCBsaW5rcyBhcmUga2VwdCBhbGl2ZSBieSB0aGUgaGFyZCByZWZlcmVuY2UgaW4gc2VsZi5fX21hcC4KICAgICAjIFRob3NlIGhhcmQgcmVmZXJlbmNlcyBkaXNhcHBlYXIgd2hlbiBhIGtleSBpcyBkZWxldGVkIGZyb20gYW4gT3JkZXJlZERpY3QuCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgZGVmIF9faW5pdF9fKCphcmdzLCAqKmt3ZHMpOgogICAgICAgICAnJydJbml0aWFsaXplIGFuIG9yZGVyZWQgZGljdGlvbmFyeS4gIFRoZSBzaWduYXR1cmUgaXMgdGhlIHNhbWUgYXMKICAgICAgICAgcmVndWxhciBkaWN0aW9uYXJpZXMsIGJ1dCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgbm90IHJlY29tbWVuZGVkIGJlY2F1c2UKICAgICAgICAgdGhlaXIgaW5zZXJ0aW9uIG9yZGVyIGlzIGFyYml0cmFyeS4KIAogICAgICAgICAnJycKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRlc2NyaXB0b3IgJ19faW5pdF9fJyBvZiAnT3JkZXJlZERpY3QnIG9iamVjdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRzIGFuIGFyZ3VtZW50IikKKyAgICAgICAgc2VsZiwgKmFyZ3MgPSBhcmdzCiAgICAgICAgIGlmIGxlbihhcmdzKSA+IDE6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ2V4cGVjdGVkIGF0IG1vc3QgMSBhcmd1bWVudHMsIGdvdCAlZCcgJSBsZW4oYXJncykpCiAgICAgICAgIHRyeToKQEAgLTE5OSwxMyArMjAzLDEwIEBACiAKICAgICBkZWYgX19yZWR1Y2VfXyhzZWxmKToKICAgICAgICAgJ1JldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmcnCi0gICAgICAgIGl0ZW1zID0gW1trLCBzZWxmW2tdXSBmb3IgayBpbiBzZWxmXQogICAgICAgICBpbnN0X2RpY3QgPSB2YXJzKHNlbGYpLmNvcHkoKQogICAgICAgICBmb3IgayBpbiB2YXJzKE9yZGVyZWREaWN0KCkpOgogICAgICAgICAgICAgaW5zdF9kaWN0LnBvcChrLCBOb25lKQotICAgICAgICBpZiBpbnN0X2RpY3Q6Ci0gICAgICAgICAgICByZXR1cm4gKHNlbGYuX19jbGFzc19fLCAoaXRlbXMsKSwgaW5zdF9kaWN0KQotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChpdGVtcywpCisgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXywgKCksIGluc3RfZGljdCBvciBOb25lLCBOb25lLCBpdGVyKHNlbGYuaXRlbXMoKSkKIAogICAgIGRlZiBjb3B5KHNlbGYpOgogICAgICAgICAnb2QuY29weSgpIC0+IGEgc2hhbGxvdyBjb3B5IG9mIG9kJwpAQCAtMjcxLDI1ICsyNzIsMTQgQEAKICAgICAgICAgJ1JldHVybiBhIG5pY2VseSBmb3JtYXR0ZWQgcmVwcmVzZW50YXRpb24gc3RyaW5nJwogICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18uX19uYW1lX18gKyAnKHtyZXByX2ZtdH0pJyAlIHNlbGYKIAotICAgIEBwcm9wZXJ0eQotICAgIGRlZiBfX2RpY3RfXyhzZWxmKToKLSAgICAgICAgJ0EgbmV3IE9yZGVyZWREaWN0IG1hcHBpbmcgZmllbGQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzJwotICAgICAgICByZXR1cm4gT3JkZXJlZERpY3QoemlwKHNlbGYuX2ZpZWxkcywgc2VsZikpCi0KICAgICBkZWYgX2FzZGljdChzZWxmKToKLSAgICAgICAgJycnUmV0dXJuIGEgbmV3IE9yZGVyZWREaWN0IHdoaWNoIG1hcHMgZmllbGQgbmFtZXMgdG8gdGhlaXIgdmFsdWVzLgotICAgICAgICAgICBUaGlzIG1ldGhvZCBpcyBvYnNvbGV0ZS4gIFVzZSB2YXJzKG50KSBvciBudC5fX2RpY3RfXyBpbnN0ZWFkLgotICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIHNlbGYuX19kaWN0X18KKyAgICAgICAgJ1JldHVybiBhIG5ldyBPcmRlcmVkRGljdCB3aGljaCBtYXBzIGZpZWxkIG5hbWVzIHRvIHRoZWlyIHZhbHVlcy4nCisgICAgICAgIHJldHVybiBPcmRlcmVkRGljdCh6aXAoc2VsZi5fZmllbGRzLCBzZWxmKSkKIAogICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKICAgICAgICAgJ1JldHVybiBzZWxmIGFzIGEgcGxhaW4gdHVwbGUuICBVc2VkIGJ5IGNvcHkgYW5kIHBpY2tsZS4nCiAgICAgICAgIHJldHVybiB0dXBsZShzZWxmKQogCi0gICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgJ0V4Y2x1ZGUgdGhlIE9yZGVyZWREaWN0IGZyb20gcGlja2xpbmcnCi0gICAgICAgIHJldHVybiBOb25lCi0KIHtmaWVsZF9kZWZzfQogIiIiCiAKQEAgLTMyOCw2ICszMTgsNyBAQAogICAgIGlmIGlzaW5zdGFuY2UoZmllbGRfbmFtZXMsIHN0cik6CiAgICAgICAgIGZpZWxkX25hbWVzID0gZmllbGRfbmFtZXMucmVwbGFjZSgnLCcsICcgJykuc3BsaXQoKQogICAgIGZpZWxkX25hbWVzID0gbGlzdChtYXAoc3RyLCBmaWVsZF9uYW1lcykpCisgICAgdHlwZW5hbWUgPSBzdHIodHlwZW5hbWUpCiAgICAgaWYgcmVuYW1lOgogICAgICAgICBzZWVuID0gc2V0KCkKICAgICAgICAgZm9yIGluZGV4LCBuYW1lIGluIGVudW1lcmF0ZShmaWVsZF9uYW1lcyk6CkBAIC0zMzgsNiArMzI5LDggQEAKICAgICAgICAgICAgICAgICBmaWVsZF9uYW1lc1tpbmRleF0gPSAnXyVkJyAlIGluZGV4CiAgICAgICAgICAgICBzZWVuLmFkZChuYW1lKQogICAgIGZvciBuYW1lIGluIFt0eXBlbmFtZV0gKyBmaWVsZF9uYW1lczoKKyAgICAgICAgaWYgdHlwZShuYW1lKSAhPSBzdHI6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ1R5cGUgbmFtZXMgYW5kIGZpZWxkIG5hbWVzIG11c3QgYmUgc3RyaW5ncycpCiAgICAgICAgIGlmIG5vdCBuYW1lLmlzaWRlbnRpZmllcigpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVHlwZSBuYW1lcyBhbmQgZmllbGQgbmFtZXMgbXVzdCBiZSB2YWxpZCAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZGVudGlmaWVyczogJXInICUgbmFtZSkKQEAgLTQ1Miw3ICs0NDUsNyBAQAogICAgICMgICBodHRwOi8vY29kZS5hY3RpdmVzdGF0ZS5jb20vcmVjaXBlcy8yNTkxNzQvCiAgICAgIyAgIEtudXRoLCBUQU9DUCBWb2wuIElJIHNlY3Rpb24gNC42LjMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBpdGVyYWJsZT1Ob25lLCAqKmt3ZHMpOgorICAgIGRlZiBfX2luaXRfXygqYXJncywgKiprd2RzKToKICAgICAgICAgJycnQ3JlYXRlIGEgbmV3LCBlbXB0eSBDb3VudGVyIG9iamVjdC4gIEFuZCBpZiBnaXZlbiwgY291bnQgZWxlbWVudHMKICAgICAgICAgZnJvbSBhbiBpbnB1dCBpdGVyYWJsZS4gIE9yLCBpbml0aWFsaXplIHRoZSBjb3VudCBmcm9tIGFub3RoZXIgbWFwcGluZwogICAgICAgICBvZiBlbGVtZW50cyB0byB0aGVpciBjb3VudHMuCkBAIC00NjMsOCArNDU2LDE0IEBACiAgICAgICAgID4+PiBjID0gQ291bnRlcihhPTQsIGI9MikgICAgICAgICAgICAgICAgICAgIyBhIG5ldyBjb3VudGVyIGZyb20ga2V5d29yZCBhcmdzCiAKICAgICAgICAgJycnCi0gICAgICAgIHN1cGVyKCkuX19pbml0X18oKQotICAgICAgICBzZWxmLnVwZGF0ZShpdGVyYWJsZSwgKiprd2RzKQorICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGVzY3JpcHRvciAnX19pbml0X18nIG9mICdDb3VudGVyJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICBzdXBlcihDb3VudGVyLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYudXBkYXRlKCphcmdzLCAqKmt3ZHMpCiAKICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKICAgICAgICAgJ1RoZSBjb3VudCBvZiBlbGVtZW50cyBub3QgaW4gdGhlIENvdW50ZXIgaXMgemVyby4nCkBAIC01MTUsNyArNTE0LDcgQEAKICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAgICAgICdDb3VudGVyLmZyb21rZXlzKCkgaXMgdW5kZWZpbmVkLiAgVXNlIENvdW50ZXIoaXRlcmFibGUpIGluc3RlYWQuJykKIAotICAgIGRlZiB1cGRhdGUoc2VsZiwgaXRlcmFibGU9Tm9uZSwgKiprd2RzKToKKyAgICBkZWYgdXBkYXRlKCphcmdzLCAqKmt3ZHMpOgogICAgICAgICAnJydMaWtlIGRpY3QudXBkYXRlKCkgYnV0IGFkZCBjb3VudHMgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlbS4KIAogICAgICAgICBTb3VyY2UgY2FuIGJlIGFuIGl0ZXJhYmxlLCBhIGRpY3Rpb25hcnksIG9yIGFub3RoZXIgQ291bnRlciBpbnN0YW5jZS4KQEAgLTUzNSw2ICs1MzQsMTMgQEAKICAgICAgICAgIyBjb250ZXh0cy4gIEluc3RlYWQsIHdlIGltcGxlbWVudCBzdHJhaWdodC1hZGRpdGlvbi4gIEJvdGggdGhlIGlucHV0cwogICAgICAgICAjIGFuZCBvdXRwdXRzIGFyZSBhbGxvd2VkIHRvIGNvbnRhaW4gemVybyBhbmQgbmVnYXRpdmUgY291bnRzLgogCisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkZXNjcmlwdG9yICd1cGRhdGUnIG9mICdDb3VudGVyJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICBpdGVyYWJsZSA9IGFyZ3NbMF0gaWYgYXJncyBlbHNlIE5vbmUKICAgICAgICAgaWYgaXRlcmFibGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZXJhYmxlLCBNYXBwaW5nKToKICAgICAgICAgICAgICAgICBpZiBzZWxmOgpAQCAtNTQyLDEzICs1NDgsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIGVsZW0sIGNvdW50IGluIGl0ZXJhYmxlLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmW2VsZW1dID0gY291bnQgKyBzZWxmX2dldChlbGVtLCAwKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN1cGVyKCkudXBkYXRlKGl0ZXJhYmxlKSAjIGZhc3QgcGF0aCB3aGVuIGNvdW50ZXIgaXMgZW1wdHkKKyAgICAgICAgICAgICAgICAgICAgc3VwZXIoQ291bnRlciwgc2VsZikudXBkYXRlKGl0ZXJhYmxlKSAjIGZhc3QgcGF0aCB3aGVuIGNvdW50ZXIgaXMgZW1wdHkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgX2NvdW50X2VsZW1lbnRzKHNlbGYsIGl0ZXJhYmxlKQogICAgICAgICBpZiBrd2RzOgogICAgICAgICAgICAgc2VsZi51cGRhdGUoa3dkcykKIAotICAgIGRlZiBzdWJ0cmFjdChzZWxmLCBpdGVyYWJsZT1Ob25lLCAqKmt3ZHMpOgorICAgIGRlZiBzdWJ0cmFjdCgqYXJncywgKiprd2RzKToKICAgICAgICAgJycnTGlrZSBkaWN0LnVwZGF0ZSgpIGJ1dCBzdWJ0cmFjdHMgY291bnRzIGluc3RlYWQgb2YgcmVwbGFjaW5nIHRoZW0uCiAgICAgICAgIENvdW50cyBjYW4gYmUgcmVkdWNlZCBiZWxvdyB6ZXJvLiAgQm90aCB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIGFyZQogICAgICAgICBhbGxvd2VkIHRvIGNvbnRhaW4gemVybyBhbmQgbmVnYXRpdmUgY291bnRzLgpAQCAtNTY0LDYgKzU3MCwxMyBAQAogICAgICAgICAtMQogCiAgICAgICAgICcnJworICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGVzY3JpcHRvciAnc3VidHJhY3QnIG9mICdDb3VudGVyJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICBpdGVyYWJsZSA9IGFyZ3NbMF0gaWYgYXJncyBlbHNlIE5vbmUKICAgICAgICAgaWYgaXRlcmFibGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmX2dldCA9IHNlbGYuZ2V0CiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGl0ZXJhYmxlLCBNYXBwaW5nKToKQEAgLTgyMiw5ICs4MzUsMTMgQEAKIAogICAgIF9fY29weV9fID0gY29weQogCi0gICAgZGVmIG5ld19jaGlsZChzZWxmKTogICAgICAgICAgICAgICAgICAgICAgICAjIGxpa2UgRGphbmdvJ3MgQ29udGV4dC5wdXNoKCkKLSAgICAgICAgJ05ldyBDaGFpbk1hcCB3aXRoIGEgbmV3IGRpY3QgZm9sbG93ZWQgYnkgYWxsIHByZXZpb3VzIG1hcHMuJwotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oe30sICpzZWxmLm1hcHMpCisgICAgZGVmIG5ld19jaGlsZChzZWxmLCBtPU5vbmUpOiAgICAgICAgICAgICAgICAjIGxpa2UgRGphbmdvJ3MgQ29udGV4dC5wdXNoKCkKKyAgICAgICAgJycnTmV3IENoYWluTWFwIHdpdGggYSBuZXcgbWFwIGZvbGxvd2VkIGJ5IGFsbCBwcmV2aW91cyBtYXBzLgorICAgICAgICBJZiBubyBtYXAgaXMgcHJvdmlkZWQsIGFuIGVtcHR5IGRpY3QgaXMgdXNlZC4KKyAgICAgICAgJycnCisgICAgICAgIGlmIG0gaXMgTm9uZToKKyAgICAgICAgICAgIG0gPSB7fQorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18obSwgKnNlbGYubWFwcykKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwYXJlbnRzKHNlbGYpOiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsaWtlIERqYW5nbydzIENvbnRleHQucG9wKCkKQEAgLTg2Niw3ICs4ODMsMjIgQEAKIGNsYXNzIFVzZXJEaWN0KE11dGFibGVNYXBwaW5nKToKIAogICAgICMgU3RhcnQgYnkgZmlsbGluZy1vdXQgdGhlIGFic3RyYWN0IG1ldGhvZHMKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZGljdD1Ob25lLCAqKmt3YXJncyk6CisgICAgZGVmIF9faW5pdF9fKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkZXNjcmlwdG9yICdfX2luaXRfXycgb2YgJ1VzZXJEaWN0JyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQorICAgICAgICBpZiBhcmdzOgorICAgICAgICAgICAgZGljdCA9IGFyZ3NbMF0KKyAgICAgICAgZWxpZiAnZGljdCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgZGljdCA9IGt3YXJncy5wb3AoJ2RpY3QnKQorICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJQYXNzaW5nICdkaWN0JyBhcyBrZXl3b3JkIGFyZ3VtZW50IGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaWN0ID0gTm9uZQogICAgICAgICBzZWxmLmRhdGEgPSB7fQogICAgICAgICBpZiBkaWN0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi51cGRhdGUoZGljdCkKZGlmZiAtLWdpdCBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkgYi9MaWIvY29sbGVjdGlvbnMvYWJjLnB5CmluZGV4IDc5MzkyNjguLjg5MTYwMGQgMTAwNjQ0Ci0tLSBhL0xpYi9jb2xsZWN0aW9ucy9hYmMucHkKKysrIGIvTGliL2NvbGxlY3Rpb25zL2FiYy5weQpAQCAtMSw3MjggKzEsMiBAQAotIyBDb3B5cmlnaHQgMjAwNyBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotCi0iIiJBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGZvciBjb2xsZWN0aW9ucywgYWNjb3JkaW5nIHRvIFBFUCAzMTE5LgotCi1Vbml0IHRlc3RzIGFyZSBpbiB0ZXN0X2NvbGxlY3Rpb25zLgotIiIiCi0KLWZyb20gYWJjIGltcG9ydCBBQkNNZXRhLCBhYnN0cmFjdG1ldGhvZAotaW1wb3J0IHN5cwotCi1fX2FsbF9fID0gWyJIYXNoYWJsZSIsICJJdGVyYWJsZSIsICJJdGVyYXRvciIsCi0gICAgICAgICAgICJTaXplZCIsICJDb250YWluZXIiLCAiQ2FsbGFibGUiLAotICAgICAgICAgICAiU2V0IiwgIk11dGFibGVTZXQiLAotICAgICAgICAgICAiTWFwcGluZyIsICJNdXRhYmxlTWFwcGluZyIsCi0gICAgICAgICAgICJNYXBwaW5nVmlldyIsICJLZXlzVmlldyIsICJJdGVtc1ZpZXciLCAiVmFsdWVzVmlldyIsCi0gICAgICAgICAgICJTZXF1ZW5jZSIsICJNdXRhYmxlU2VxdWVuY2UiLAotICAgICAgICAgICAiQnl0ZVN0cmluZyIsCi0gICAgICAgICAgIF0KLQotIyBQcml2YXRlIGxpc3Qgb2YgdHlwZXMgdGhhdCB3ZSB3YW50IHRvIHJlZ2lzdGVyIHdpdGggdGhlIHZhcmlvdXMgQUJDcwotIyBzbyB0aGF0IHRoZXkgd2lsbCBwYXNzIHRlc3RzIGxpa2U6Ci0jICAgICAgIGl0ID0gaXRlcihzb21lYnl0ZWFycmF5KQotIyAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShpdCwgSXRlcmFibGUpCi0jIE5vdGU6ICBpbiBvdGhlciBpbXBsZW1lbnRhdGlvbnMsIHRoZXNlIHR5cGVzIG1hbnkgbm90IGJlIGRpc3RpbmN0Ci0jIGFuZCB0aGV5IG1ha2UgaGF2ZSB0aGVpciBvd24gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgdHlwZXMgdGhhdAotIyBhcmUgbm90IGluY2x1ZGVkIG9uIHRoaXMgbGlzdC4KLWJ5dGVzX2l0ZXJhdG9yID0gdHlwZShpdGVyKGInJykpCi1ieXRlYXJyYXlfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoYnl0ZWFycmF5KCkpKQotI2NhbGxhYmxlX2l0ZXJhdG9yID0gPz8/Ci1kaWN0X2tleWl0ZXJhdG9yID0gdHlwZShpdGVyKHt9LmtleXMoKSkpCi1kaWN0X3ZhbHVlaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30udmFsdWVzKCkpKQotZGljdF9pdGVtaXRlcmF0b3IgPSB0eXBlKGl0ZXIoe30uaXRlbXMoKSkpCi1saXN0X2l0ZXJhdG9yID0gdHlwZShpdGVyKFtdKSkKLWxpc3RfcmV2ZXJzZWl0ZXJhdG9yID0gdHlwZShpdGVyKHJldmVyc2VkKFtdKSkpCi1yYW5nZV9pdGVyYXRvciA9IHR5cGUoaXRlcihyYW5nZSgwKSkpCi1zZXRfaXRlcmF0b3IgPSB0eXBlKGl0ZXIoc2V0KCkpKQotc3RyX2l0ZXJhdG9yID0gdHlwZShpdGVyKCIiKSkKLXR1cGxlX2l0ZXJhdG9yID0gdHlwZShpdGVyKCgpKSkKLXppcF9pdGVyYXRvciA9IHR5cGUoaXRlcih6aXAoKSkpCi0jIyB2aWV3cyAjIwotZGljdF9rZXlzID0gdHlwZSh7fS5rZXlzKCkpCi1kaWN0X3ZhbHVlcyA9IHR5cGUoe30udmFsdWVzKCkpCi1kaWN0X2l0ZW1zID0gdHlwZSh7fS5pdGVtcygpKQotIyMgbWlzYyAjIwotbWFwcGluZ3Byb3h5ID0gdHlwZSh0eXBlLl9fZGljdF9fKQotCi0KLSMjIyBPTkUtVFJJQ0sgUE9OSUVTICMjIwotCi1jbGFzcyBIYXNoYWJsZShtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9faGFzaF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gMAotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEhhc2hhYmxlOgotICAgICAgICAgICAgZm9yIEIgaW4gQy5fX21yb19fOgotICAgICAgICAgICAgICAgIGlmICJfX2hhc2hfXyIgaW4gQi5fX2RpY3RfXzoKLSAgICAgICAgICAgICAgICAgICAgaWYgQi5fX2RpY3RfX1siX19oYXNoX18iXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhYmxlKG1ldGFjbGFzcz1BQkNNZXRhKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIHdoaWxlIEZhbHNlOgotICAgICAgICAgICAgeWllbGQgTm9uZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIEl0ZXJhYmxlOgotICAgICAgICAgICAgaWYgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotCi0KLWNsYXNzIEl0ZXJhdG9yKEl0ZXJhYmxlKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICdSZXR1cm4gdGhlIG5leHQgaXRlbSBmcm9tIHRoZSBpdGVyYXRvci4gV2hlbiBleGhhdXN0ZWQsIHJhaXNlIFN0b3BJdGVyYXRpb24nCi0gICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfX3N1YmNsYXNzaG9va19fKGNscywgQyk6Ci0gICAgICAgIGlmIGNscyBpcyBJdGVyYXRvcjoKLSAgICAgICAgICAgIGlmIChhbnkoIl9fbmV4dF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXykgYW5kCi0gICAgICAgICAgICAgICAgYW55KCJfX2l0ZXJfXyIgaW4gQi5fX2RpY3RfXyBmb3IgQiBpbiBDLl9fbXJvX18pKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotSXRlcmF0b3IucmVnaXN0ZXIoYnl0ZXNfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihieXRlYXJyYXlfaXRlcmF0b3IpCi0jSXRlcmF0b3IucmVnaXN0ZXIoY2FsbGFibGVfaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihkaWN0X2tleWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF92YWx1ZWl0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoZGljdF9pdGVtaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihsaXN0X2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIobGlzdF9yZXZlcnNlaXRlcmF0b3IpCi1JdGVyYXRvci5yZWdpc3RlcihyYW5nZV9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHNldF9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHN0cl9pdGVyYXRvcikKLUl0ZXJhdG9yLnJlZ2lzdGVyKHR1cGxlX2l0ZXJhdG9yKQotSXRlcmF0b3IucmVnaXN0ZXIoemlwX2l0ZXJhdG9yKQotCi1jbGFzcyBTaXplZChtZXRhY2xhc3M9QUJDTWV0YSk6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAwCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgU2l6ZWQ6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fbGVuX18iIGluIEIuX19kaWN0X18gZm9yIEIgaW4gQy5fX21yb19fKToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLQotCi1jbGFzcyBDb250YWluZXIobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgeCk6Ci0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIF9fc3ViY2xhc3Nob29rX18oY2xzLCBDKToKLSAgICAgICAgaWYgY2xzIGlzIENvbnRhaW5lcjoKLSAgICAgICAgICAgIGlmIGFueSgiX19jb250YWluc19fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotY2xhc3MgQ2FsbGFibGUobWV0YWNsYXNzPUFCQ01ldGEpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX19zdWJjbGFzc2hvb2tfXyhjbHMsIEMpOgotICAgICAgICBpZiBjbHMgaXMgQ2FsbGFibGU6Ci0gICAgICAgICAgICBpZiBhbnkoIl9fY2FsbF9fIiBpbiBCLl9fZGljdF9fIGZvciBCIGluIEMuX19tcm9fXyk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0KLQotIyMjIFNFVFMgIyMjCi0KLQotY2xhc3MgU2V0KFNpemVkLCBJdGVyYWJsZSwgQ29udGFpbmVyKToKLQotICAgICIiIkEgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fIGFuZCBfX2xlbl9fLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgZGVmIF9fbGVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIGlmIGxlbihzZWxmKSA+IGxlbihvdGhlcik6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZm9yIGVsZW0gaW4gc2VsZjoKLSAgICAgICAgICAgIGlmIGVsZW0gbm90IGluIG90aGVyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPCBsZW4ob3RoZXIpIGFuZCBzZWxmLl9fbGVfXyhvdGhlcikKLQotICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gb3RoZXIuX19sdF9fKHNlbGYpCi0KLSAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIG90aGVyLl9fbGVfXyhzZWxmKQotCi0gICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBTZXQpOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBsZW4oc2VsZikgPT0gbGVuKG90aGVyKSBhbmQgc2VsZi5fX2xlX18ob3RoZXIpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBfZnJvbV9pdGVyYWJsZShjbHMsIGl0KToKLSAgICAgICAgJycnQ29uc3RydWN0IGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzcyBmcm9tIGFueSBpdGVyYWJsZSBpbnB1dC4KLQotICAgICAgICBNdXN0IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGlmIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUKLSAgICAgICAgZG9lcyBub3QgYWNjZXB0IGFuIGl0ZXJhYmxlIGZvciBhbiBpbnB1dC4KLSAgICAgICAgJycnCi0gICAgICAgIHJldHVybiBjbHMoaXQpCi0KLSAgICBkZWYgX19hbmRfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21faXRlcmFibGUodmFsdWUgZm9yIHZhbHVlIGluIG90aGVyIGlmIHZhbHVlIGluIHNlbGYpCi0KLSAgICBkZWYgaXNkaXNqb2ludChzZWxmLCBvdGhlcik6Ci0gICAgICAgICdSZXR1cm4gVHJ1ZSBpZiB0d28gc2V0cyBoYXZlIGEgbnVsbCBpbnRlcnNlY3Rpb24uJwotICAgICAgICBmb3IgdmFsdWUgaW4gb3RoZXI6Ci0gICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIF9fb3JfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgY2hhaW4gPSAoZSBmb3IgcyBpbiAoc2VsZiwgb3RoZXIpIGZvciBlIGluIHMpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKGNoYWluKQotCi0gICAgZGVmIF9fc3ViX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgU2V0KToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG90aGVyLCBJdGVyYWJsZSk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgICAgICBvdGhlciA9IHNlbGYuX2Zyb21faXRlcmFibGUob3RoZXIpCi0gICAgICAgIHJldHVybiBzZWxmLl9mcm9tX2l0ZXJhYmxlKHZhbHVlIGZvciB2YWx1ZSBpbiBzZWxmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIG5vdCBpbiBvdGhlcikKLQotICAgIGRlZiBfX3hvcl9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNldCk6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgSXRlcmFibGUpOgotICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICAgICAgb3RoZXIgPSBzZWxmLl9mcm9tX2l0ZXJhYmxlKG90aGVyKQotICAgICAgICByZXR1cm4gKHNlbGYgLSBvdGhlcikgfCAob3RoZXIgLSBzZWxmKQotCi0gICAgZGVmIF9oYXNoKHNlbGYpOgotICAgICAgICAiIiJDb21wdXRlIHRoZSBoYXNoIHZhbHVlIG9mIGEgc2V0LgotCi0gICAgICAgIE5vdGUgdGhhdCB3ZSBkb24ndCBkZWZpbmUgX19oYXNoX186IG5vdCBhbGwgc2V0cyBhcmUgaGFzaGFibGUuCi0gICAgICAgIEJ1dCBpZiB5b3UgZGVmaW5lIGEgaGFzaGFibGUgc2V0IHR5cGUsIGl0cyBfX2hhc2hfXyBzaG91bGQKLSAgICAgICAgY2FsbCB0aGlzIGZ1bmN0aW9uLgotCi0gICAgICAgIFRoaXMgbXVzdCBiZSBjb21wYXRpYmxlIF9fZXFfXy4KLQotICAgICAgICBBbGwgc2V0cyBvdWdodCB0byBjb21wYXJlIGVxdWFsIGlmIHRoZXkgY29udGFpbiB0aGUgc2FtZQotICAgICAgICBlbGVtZW50cywgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgaW1wbGVtZW50ZWQsIGFuZAotICAgICAgICByZWdhcmRsZXNzIG9mIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHM7IHNvIHRoZXJlJ3Mgbm90IG11Y2gKLSAgICAgICAgZnJlZWRvbSBmb3IgX19lcV9fIG9yIF9faGFzaF9fLiAgV2UgbWF0Y2ggdGhlIGFsZ29yaXRobSB1c2VkCi0gICAgICAgIGJ5IHRoZSBidWlsdC1pbiBmcm96ZW5zZXQgdHlwZS4KLSAgICAgICAgIiIiCi0gICAgICAgIE1BWCA9IHN5cy5tYXhzaXplCi0gICAgICAgIE1BU0sgPSAyICogTUFYICsgMQotICAgICAgICBuID0gbGVuKHNlbGYpCi0gICAgICAgIGggPSAxOTI3ODY4MjM3ICogKG4gKyAxKQotICAgICAgICBoICY9IE1BU0sKLSAgICAgICAgZm9yIHggaW4gc2VsZjoKLSAgICAgICAgICAgIGh4ID0gaGFzaCh4KQotICAgICAgICAgICAgaCBePSAoaHggXiAoaHggPDwgMTYpIF4gODk4Njk3NDcpICAqIDM2NDQ3OTgxNjcKLSAgICAgICAgICAgIGggJj0gTUFTSwotICAgICAgICBoID0gaCAqIDY5MDY5ICsgOTA3MTMzOTIzCi0gICAgICAgIGggJj0gTUFTSwotICAgICAgICBpZiBoID4gTUFYOgotICAgICAgICAgICAgaCAtPSBNQVNLICsgMQotICAgICAgICBpZiBoID09IC0xOgotICAgICAgICAgICAgaCA9IDU5MDkyMzcxMwotICAgICAgICByZXR1cm4gaAotCi1TZXQucmVnaXN0ZXIoZnJvemVuc2V0KQotCi0KLWNsYXNzIE11dGFibGVTZXQoU2V0KToKLSAgICAiIiJBIG11dGFibGUgc2V0IGlzIGEgZmluaXRlLCBpdGVyYWJsZSBjb250YWluZXIuCi0KLSAgICBUaGlzIGNsYXNzIHByb3ZpZGVzIGNvbmNyZXRlIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIGFsbAotICAgIG1ldGhvZHMgZXhjZXB0IGZvciBfX2NvbnRhaW5zX18sIF9faXRlcl9fLCBfX2xlbl9fLAotICAgIGFkZCgpLCBhbmQgZGlzY2FyZCgpLgotCi0gICAgVG8gb3ZlcnJpZGUgdGhlIGNvbXBhcmlzb25zIChwcmVzdW1hYmx5IGZvciBzcGVlZCwgYXMgdGhlCi0gICAgc2VtYW50aWNzIGFyZSBmaXhlZCksIGFsbCB5b3UgaGF2ZSB0byBkbyBpcyByZWRlZmluZSBfX2xlX18gYW5kCi0gICAgdGhlbiB0aGUgb3RoZXIgb3BlcmF0aW9ucyB3aWxsIGF1dG9tYXRpY2FsbHkgZm9sbG93IHN1aXQuCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGFkZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIkFkZCBhbiBlbGVtZW50LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgZGlzY2FyZChzZWxmLCB2YWx1ZSk6Ci0gICAgICAgICIiIlJlbW92ZSBhbiBlbGVtZW50LiAgRG8gbm90IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiBhYnNlbnQuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiByZW1vdmUoc2VsZiwgdmFsdWUpOgotICAgICAgICAiIiJSZW1vdmUgYW4gZWxlbWVudC4gSWYgbm90IGEgbWVtYmVyLCByYWlzZSBhIEtleUVycm9yLiIiIgotICAgICAgICBpZiB2YWx1ZSBub3QgaW4gc2VsZjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKHZhbHVlKQotICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0KLSAgICBkZWYgcG9wKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIHBvcHBlZCB2YWx1ZS4gIFJhaXNlIEtleUVycm9yIGlmIGVtcHR5LiIiIgotICAgICAgICBpdCA9IGl0ZXIoc2VsZikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yCi0gICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICIiIlRoaXMgaXMgc2xvdyAoY3JlYXRlcyBOIG5ldyBpdGVyYXRvcnMhKSBidXQgZWZmZWN0aXZlLiIiIgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHNlbGYucG9wKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIF9faW9yX18oc2VsZiwgaXQpOgotICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICBzZWxmLmFkZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2lhbmRfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGZvciB2YWx1ZSBpbiAoc2VsZiAtIGl0KToKLSAgICAgICAgICAgIHNlbGYuZGlzY2FyZCh2YWx1ZSkKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgIGRlZiBfX2l4b3JfXyhzZWxmLCBpdCk6Ci0gICAgICAgIGlmIGl0IGlzIHNlbGY6Ci0gICAgICAgICAgICBzZWxmLmNsZWFyKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0LCBTZXQpOgotICAgICAgICAgICAgICAgIGl0ID0gc2VsZi5fZnJvbV9pdGVyYWJsZShpdCkKLSAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBpdDoKLSAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpbiBzZWxmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc2NhcmQodmFsdWUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hZGQodmFsdWUpCi0gICAgICAgIHJldHVybiBzZWxmCi0KLSAgICBkZWYgX19pc3ViX18oc2VsZiwgaXQpOgotICAgICAgICBpZiBpdCBpcyBzZWxmOgotICAgICAgICAgICAgc2VsZi5jbGVhcigpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3IgdmFsdWUgaW4gaXQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5kaXNjYXJkKHZhbHVlKQotICAgICAgICByZXR1cm4gc2VsZgotCi1NdXRhYmxlU2V0LnJlZ2lzdGVyKHNldCkKLQotCi0jIyMgTUFQUElOR1MgIyMjCi0KLQotY2xhc3MgTWFwcGluZyhTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgIiIiQSBNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nIGtleS92YWx1ZQotICAgIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9faXRlcl9fLCBhbmQgX19sZW5fXy4KLQotICAgICIiIgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yCi0KLSAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKLSAgICAgICAgJ0QuZ2V0KGtbLGRdKSAtPiBEW2tdIGlmIGsgaW4gRCwgZWxzZSBkLiAgZCBkZWZhdWx0cyB0byBOb25lLicKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICAgICJELmtleXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBrZXlzIgotICAgICAgICByZXR1cm4gS2V5c1ZpZXcoc2VsZikKLQotICAgIGRlZiBpdGVtcyhzZWxmKToKLSAgICAgICAgIkQuaXRlbXMoKSAtPiBhIHNldC1saWtlIG9iamVjdCBwcm92aWRpbmcgYSB2aWV3IG9uIEQncyBpdGVtcyIKLSAgICAgICAgcmV0dXJuIEl0ZW1zVmlldyhzZWxmKQotCi0gICAgZGVmIHZhbHVlcyhzZWxmKToKLSAgICAgICAgIkQudmFsdWVzKCkgLT4gYW4gb2JqZWN0IHByb3ZpZGluZyBhIHZpZXcgb24gRCdzIHZhbHVlcyIKLSAgICAgICAgcmV0dXJuIFZhbHVlc1ZpZXcoc2VsZikKLQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgTWFwcGluZyk6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIGRpY3Qoc2VsZi5pdGVtcygpKSA9PSBkaWN0KG90aGVyLml0ZW1zKCkpCi0KLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCAoc2VsZiA9PSBvdGhlcikKLQotTWFwcGluZy5yZWdpc3RlcihtYXBwaW5ncHJveHkpCi0KLQotY2xhc3MgTWFwcGluZ1ZpZXcoU2l6ZWQpOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hcHBpbmcpOgotICAgICAgICBzZWxmLl9tYXBwaW5nID0gbWFwcGluZwotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBsZW4oc2VsZi5fbWFwcGluZykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICd7MC5fX2NsYXNzX18uX19uYW1lX199KHswLl9tYXBwaW5nIXJ9KScuZm9ybWF0KHNlbGYpCi0KLQotY2xhc3MgS2V5c1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgotICAgICAgICByZXR1cm4ga2V5IGluIHNlbGYuX21hcHBpbmcKLQotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgeWllbGQga2V5Ci0KLUtleXNWaWV3LnJlZ2lzdGVyKGRpY3Rfa2V5cykKLQotCi1jbGFzcyBJdGVtc1ZpZXcoTWFwcGluZ1ZpZXcsIFNldCk6Ci0KLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2Zyb21faXRlcmFibGUoc2VsZiwgaXQpOgotICAgICAgICByZXR1cm4gc2V0KGl0KQotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBpdGVtKToKLSAgICAgICAga2V5LCB2YWx1ZSA9IGl0ZW0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdiA9IHNlbGYuX21hcHBpbmdba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiB2ID09IHZhbHVlCi0KLSAgICBkZWYgX19pdGVyX18oc2VsZik6Ci0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5fbWFwcGluZzoKLSAgICAgICAgICAgIHlpZWxkIChrZXksIHNlbGYuX21hcHBpbmdba2V5XSkKLQotSXRlbXNWaWV3LnJlZ2lzdGVyKGRpY3RfaXRlbXMpCi0KLQotY2xhc3MgVmFsdWVzVmlldyhNYXBwaW5nVmlldyk6Ci0KLSAgICBkZWYgX19jb250YWluc19fKHNlbGYsIHZhbHVlKToKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9tYXBwaW5nOgotICAgICAgICAgICAgaWYgdmFsdWUgPT0gc2VsZi5fbWFwcGluZ1trZXldOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX21hcHBpbmc6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmLl9tYXBwaW5nW2tleV0KLQotVmFsdWVzVmlldy5yZWdpc3RlcihkaWN0X3ZhbHVlcykKLQotCi1jbGFzcyBNdXRhYmxlTWFwcGluZyhNYXBwaW5nKToKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLSAgICAiIiJBIE11dGFibGVNYXBwaW5nIGlzIGEgZ2VuZXJpYyBjb250YWluZXIgZm9yIGFzc29jaWF0aW5nCi0gICAga2V5L3ZhbHVlIHBhaXJzLgotCi0gICAgVGhpcyBjbGFzcyBwcm92aWRlcyBjb25jcmV0ZSBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBhbGwKLSAgICBtZXRob2RzIGV4Y2VwdCBmb3IgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywKLSAgICBfX2l0ZXJfXywgYW5kIF9fbGVuX18uCi0KLSAgICAiIiIKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLQotICAgIEBhYnN0cmFjdG1ldGhvZAotICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgotICAgICAgICByYWlzZSBLZXlFcnJvcgotCi0gICAgX19tYXJrZXIgPSBvYmplY3QoKQotCi0gICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9X19tYXJrZXIpOgotICAgICAgICAnJydELnBvcChrWyxkXSkgLT4gdiwgcmVtb3ZlIHNwZWNpZmllZCBrZXkgYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZS4KLSAgICAgICAgICBJZiBrZXkgaXMgbm90IGZvdW5kLCBkIGlzIHJldHVybmVkIGlmIGdpdmVuLCBvdGhlcndpc2UgS2V5RXJyb3IgaXMgcmFpc2VkLgotICAgICAgICAnJycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgaWYgZGVmYXVsdCBpcyBzZWxmLl9fbWFya2VyOgotICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlCi0KLSAgICBkZWYgcG9waXRlbShzZWxmKToKLSAgICAgICAgJycnRC5wb3BpdGVtKCkgLT4gKGssIHYpLCByZW1vdmUgYW5kIHJldHVybiBzb21lIChrZXksIHZhbHVlKSBwYWlyCi0gICAgICAgICAgIGFzIGEgMi10dXBsZTsgYnV0IHJhaXNlIEtleUVycm9yIGlmIEQgaXMgZW1wdHkuCi0gICAgICAgICcnJwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBrZXkgPSBuZXh0KGl0ZXIoc2VsZikpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KLSAgICAgICAgZGVsIHNlbGZba2V5XQotICAgICAgICByZXR1cm4ga2V5LCB2YWx1ZQotCi0gICAgZGVmIGNsZWFyKHNlbGYpOgotICAgICAgICAnRC5jbGVhcigpIC0+IE5vbmUuICBSZW1vdmUgYWxsIGl0ZW1zIGZyb20gRC4nCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgc2VsZi5wb3BpdGVtKCkKLSAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2RzKToKLSAgICAgICAgJycnIEQudXBkYXRlKFtFLCBdKipGKSAtPiBOb25lLiAgVXBkYXRlIEQgZnJvbSBtYXBwaW5nL2l0ZXJhYmxlIEUgYW5kIEYuCi0gICAgICAgICAgICBJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba10KLSAgICAgICAgICAgIElmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2Ci0gICAgICAgICAgICBJbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGssIHYgaW4gRi5pdGVtcygpOiBEW2tdID0gdgotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMjoKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidXBkYXRlKCkgdGFrZXMgYXQgbW9zdCAyIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudHMgKHt9IGdpdmVuKSIuZm9ybWF0KGxlbihhcmdzKSkpCi0gICAgICAgIGVsaWYgbm90IGFyZ3M6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVwZGF0ZSgpIHRha2VzIGF0IGxlYXN0IDEgYXJndW1lbnQgKDAgZ2l2ZW4pIikKLSAgICAgICAgc2VsZiA9IGFyZ3NbMF0KLSAgICAgICAgb3RoZXIgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgKCkKLQotICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBNYXBwaW5nKToKLSAgICAgICAgICAgIGZvciBrZXkgaW4gb3RoZXI6Ci0gICAgICAgICAgICAgICAgc2VsZltrZXldID0gb3RoZXJba2V5XQotICAgICAgICBlbGlmIGhhc2F0dHIob3RoZXIsICJrZXlzIik6Ci0gICAgICAgICAgICBmb3Iga2V5IGluIG90aGVyLmtleXMoKToKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSBvdGhlcltrZXldCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBvdGhlcjoKLSAgICAgICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBrd2RzLml0ZW1zKCk6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSB2YWx1ZQotCi0gICAgZGVmIHNldGRlZmF1bHQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgotICAgICAgICAnRC5zZXRkZWZhdWx0KGtbLGRdKSAtPiBELmdldChrLGQpLCBhbHNvIHNldCBEW2tdPWQgaWYgayBub3QgaW4gRCcKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGZba2V5XQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSBkZWZhdWx0Ci0gICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLU11dGFibGVNYXBwaW5nLnJlZ2lzdGVyKGRpY3QpCi0KLQotIyMjIFNFUVVFTkNFUyAjIyMKLQotCi1jbGFzcyBTZXF1ZW5jZShTaXplZCwgSXRlcmFibGUsIENvbnRhaW5lcik6Ci0KLSAgICAiIiJBbGwgdGhlIG9wZXJhdGlvbnMgb24gYSByZWFkLW9ubHkgc2VxdWVuY2UuCi0KLSAgICBDb25jcmV0ZSBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgX19uZXdfXyBvciBfX2luaXRfXywKLSAgICBfX2dldGl0ZW1fXywgYW5kIF9fbGVuX18uCi0gICAgIiIiCi0KLSAgICBfX3Nsb3RzX18gPSAoKQotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICBpID0gMAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHYgPSBzZWxmW2ldCi0gICAgICAgICAgICAgICAgeWllbGQgdgotICAgICAgICAgICAgICAgIGkgKz0gMQotICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgIHJldHVybgotCi0gICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGZvciB2IGluIHNlbGY6Ci0gICAgICAgICAgICBpZiB2ID09IHZhbHVlOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgICAgIHJldHVybiBGYWxzZQotCi0gICAgZGVmIF9fcmV2ZXJzZWRfXyhzZWxmKToKLSAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UobGVuKHNlbGYpKSk6Ci0gICAgICAgICAgICB5aWVsZCBzZWxmW2ldCi0KLSAgICBkZWYgaW5kZXgoc2VsZiwgdmFsdWUpOgotICAgICAgICAnJydTLmluZGV4KHZhbHVlKSAtPiBpbnRlZ2VyIC0tIHJldHVybiBmaXJzdCBpbmRleCBvZiB2YWx1ZS4KLSAgICAgICAgICAgUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LgotICAgICAgICAnJycKLSAgICAgICAgZm9yIGksIHYgaW4gZW51bWVyYXRlKHNlbGYpOgotICAgICAgICAgICAgaWYgdiA9PSB2YWx1ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gaQotICAgICAgICByYWlzZSBWYWx1ZUVycm9yCi0KLSAgICBkZWYgY291bnQoc2VsZiwgdmFsdWUpOgotICAgICAgICAnUy5jb3VudCh2YWx1ZSkgLT4gaW50ZWdlciAtLSByZXR1cm4gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIHZhbHVlJwotICAgICAgICByZXR1cm4gc3VtKDEgZm9yIHYgaW4gc2VsZiBpZiB2ID09IHZhbHVlKQotCi1TZXF1ZW5jZS5yZWdpc3Rlcih0dXBsZSkKLVNlcXVlbmNlLnJlZ2lzdGVyKHN0cikKLVNlcXVlbmNlLnJlZ2lzdGVyKHJhbmdlKQotCi0KLWNsYXNzIEJ5dGVTdHJpbmcoU2VxdWVuY2UpOgotCi0gICAgIiIiVGhpcyB1bmlmaWVzIGJ5dGVzIGFuZCBieXRlYXJyYXkuCi0KLSAgICBYWFggU2hvdWxkIGFkZCBhbGwgdGhlaXIgbWV0aG9kcy4KLSAgICAiIiIKLQotICAgIF9fc2xvdHNfXyA9ICgpCi0KLUJ5dGVTdHJpbmcucmVnaXN0ZXIoYnl0ZXMpCi1CeXRlU3RyaW5nLnJlZ2lzdGVyKGJ5dGVhcnJheSkKLQotCi1jbGFzcyBNdXRhYmxlU2VxdWVuY2UoU2VxdWVuY2UpOgotCi0gICAgX19zbG90c19fID0gKCkKLQotICAgICIiIkFsbCB0aGUgb3BlcmF0aW9ucyBvbiBhIHJlYWQtb25seSBzZXF1ZW5jZS4KLQotICAgIENvbmNyZXRlIHN1YmNsYXNzZXMgbXVzdCBwcm92aWRlIF9fbmV3X18gb3IgX19pbml0X18sCi0gICAgX19nZXRpdGVtX18sIF9fc2V0aXRlbV9fLCBfX2RlbGl0ZW1fXywgX19sZW5fXywgYW5kIGluc2VydCgpLgotCi0gICAgIiIiCi0KLSAgICBAYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgX19zZXRpdGVtX18oc2VsZiwgaW5kZXgsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKLSAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgotCi0gICAgQGFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGluc2VydChzZWxmLCBpbmRleCwgdmFsdWUpOgotICAgICAgICAnUy5pbnNlcnQoaW5kZXgsIHZhbHVlKSAtLSBpbnNlcnQgdmFsdWUgYmVmb3JlIGluZGV4JwotICAgICAgICByYWlzZSBJbmRleEVycm9yCi0KLSAgICBkZWYgYXBwZW5kKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJ1MuYXBwZW5kKHZhbHVlKSAtLSBhcHBlbmQgdmFsdWUgdG8gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UnCi0gICAgICAgIHNlbGYuaW5zZXJ0KGxlbihzZWxmKSwgdmFsdWUpCi0KLSAgICBkZWYgY2xlYXIoc2VsZik6Ci0gICAgICAgICdTLmNsZWFyKCkgLT4gTm9uZSAtLSByZW1vdmUgYWxsIGl0ZW1zIGZyb20gUycKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBzZWxmLnBvcCgpCi0gICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcGFzcwotCi0gICAgZGVmIHJldmVyc2Uoc2VsZik6Ci0gICAgICAgICdTLnJldmVyc2UoKSAtLSByZXZlcnNlICpJTiBQTEFDRSonCi0gICAgICAgIG4gPSBsZW4oc2VsZikKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobi8vMik6Ci0gICAgICAgICAgICBzZWxmW2ldLCBzZWxmW24taS0xXSA9IHNlbGZbbi1pLTFdLCBzZWxmW2ldCi0KLSAgICBkZWYgZXh0ZW5kKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgICdTLmV4dGVuZChpdGVyYWJsZSkgLS0gZXh0ZW5kIHNlcXVlbmNlIGJ5IGFwcGVuZGluZyBlbGVtZW50cyBmcm9tIHRoZSBpdGVyYWJsZScKLSAgICAgICAgZm9yIHYgaW4gdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hcHBlbmQodikKLQotICAgIGRlZiBwb3Aoc2VsZiwgaW5kZXg9LTEpOgotICAgICAgICAnJydTLnBvcChbaW5kZXhdKSAtPiBpdGVtIC0tIHJlbW92ZSBhbmQgcmV0dXJuIGl0ZW0gYXQgaW5kZXggKGRlZmF1bHQgbGFzdCkuCi0gICAgICAgICAgIFJhaXNlIEluZGV4RXJyb3IgaWYgbGlzdCBpcyBlbXB0eSBvciBpbmRleCBpcyBvdXQgb2YgcmFuZ2UuCi0gICAgICAgICcnJwotICAgICAgICB2ID0gc2VsZltpbmRleF0KLSAgICAgICAgZGVsIHNlbGZbaW5kZXhdCi0gICAgICAgIHJldHVybiB2Ci0KLSAgICBkZWYgcmVtb3ZlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgJycnUy5yZW1vdmUodmFsdWUpIC0tIHJlbW92ZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHZhbHVlLgotICAgICAgICAgICBSYWlzZSBWYWx1ZUVycm9yIGlmIHRoZSB2YWx1ZSBpcyBub3QgcHJlc2VudC4KLSAgICAgICAgJycnCi0gICAgICAgIGRlbCBzZWxmW3NlbGYuaW5kZXgodmFsdWUpXQotCi0gICAgZGVmIF9faWFkZF9fKHNlbGYsIHZhbHVlcyk6Ci0gICAgICAgIHNlbGYuZXh0ZW5kKHZhbHVlcykKLSAgICAgICAgcmV0dXJuIHNlbGYKLQotTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKGxpc3QpCi1NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoYnl0ZWFycmF5KSAgIyBNdWx0aXBseSBpbmhlcml0aW5nLCBzZWUgQnl0ZVN0cmluZworZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCAqCitmcm9tIF9jb2xsZWN0aW9uc19hYmMgaW1wb3J0IF9fYWxsX18KZGlmZiAtLWdpdCBhL0xpYi9jb2xvcnN5cy5weSBiL0xpYi9jb2xvcnN5cy5weQppbmRleCBhNmMwY2Y2Li5iOTNlMzg0IDEwMDY0NAotLS0gYS9MaWIvY29sb3JzeXMucHkKKysrIGIvTGliL2NvbG9yc3lzLnB5CkBAIC0zMywxNyArMzMsMjUgQEAKICMgWUlROiB1c2VkIGJ5IGNvbXBvc2l0ZSB2aWRlbyBzaWduYWxzIChsaW5lYXIgY29tYmluYXRpb25zIG9mIFJHQikKICMgWTogcGVyY2VpdmVkIGdyZXkgbGV2ZWwgKDAuMCA9PSBibGFjaywgMS4wID09IHdoaXRlKQogIyBJLCBROiBjb2xvciBjb21wb25lbnRzCisjCisjIFRoZXJlIGFyZSBhIGdyZWF0IG1hbnkgdmVyc2lvbnMgb2YgdGhlIGNvbnN0YW50cyB1c2VkIGluIHRoZXNlIGZvcm11bGFlLgorIyBUaGUgb25lcyBpbiB0aGlzIGxpYnJhcnkgdXNlcyBjb25zdGFudHMgZnJvbSB0aGUgRkNDIHZlcnNpb24gb2YgTlRTQy4KIAogZGVmIHJnYl90b195aXEociwgZywgYik6CiAgICAgeSA9IDAuMzAqciArIDAuNTkqZyArIDAuMTEqYgotICAgIGkgPSAwLjYwKnIgLSAwLjI4KmcgLSAwLjMyKmIKLSAgICBxID0gMC4yMSpyIC0gMC41MipnICsgMC4zMSpiCisgICAgaSA9IDAuNzQqKHIteSkgLSAwLjI3KihiLXkpCisgICAgcSA9IDAuNDgqKHIteSkgKyAwLjQxKihiLXkpCiAgICAgcmV0dXJuICh5LCBpLCBxKQogCiBkZWYgeWlxX3RvX3JnYih5LCBpLCBxKToKLSAgICByID0geSArIDAuOTQ4MjYyKmkgKyAwLjYyNDAxMypxCi0gICAgZyA9IHkgLSAwLjI3NjA2NippIC0gMC42Mzk4MTAqcQotICAgIGIgPSB5IC0gMS4xMDU0NTAqaSArIDEuNzI5ODYwKnEKKyAgICAjIHIgPSB5ICsgKDAuMjcqcSArIDAuNDEqaSkgLyAoMC43NCowLjQxICsgMC4yNyowLjQ4KQorICAgICMgYiA9IHkgKyAoMC43NCpxIC0gMC40OCppKSAvICgwLjc0KjAuNDEgKyAwLjI3KjAuNDgpCisgICAgIyBnID0geSAtICgwLjMwKihyLXkpICsgMC4xMSooYi15KSkgLyAwLjU5CisKKyAgICByID0geSArIDAuOTQ2ODgyMjE3MDkwMDY5MyppICsgMC42MjM1NTY1ODE5ODYxNDMzKnEKKyAgICBnID0geSAtIDAuMjc0Nzg3NjQ2Mjk4OTc4MzQqaSAtIDAuNjM1NjkxMDc5MTg3MzgwMSpxCisgICAgYiA9IHkgLSAxLjEwODU0NTAzNDY0MjAzMjIqaSArIDEuNzA5MDA2OTI4NDA2NDY2NipxCisKICAgICBpZiByIDwgMC4wOgogICAgICAgICByID0gMC4wCiAgICAgaWYgZyA8IDAuMDoKZGlmZiAtLWdpdCBhL0xpYi9jb21waWxlYWxsLnB5IGIvTGliL2NvbXBpbGVhbGwucHkKaW5kZXggNjkzZWRhOS4uOGUxNTY5YyAxMDA2NDQKLS0tIGEvTGliL2NvbXBpbGVhbGwucHkKKysrIGIvTGliL2NvbXBpbGVhbGwucHkKQEAgLTEyLDggKzEyLDcgQEAKICIiIgogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzdHJ1Y3QKIApAQCAtMzgsNyArMzcsNyBAQAogICAgICAgICBwcmludCgnTGlzdGluZyB7IXJ9Li4uJy5mb3JtYXQoZGlyKSkKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwcmludCgiQ2FuJ3QgbGlzdCB7IXJ9Ii5mb3JtYXQoZGlyKSkKICAgICAgICAgbmFtZXMgPSBbXQogICAgIG5hbWVzLnNvcnQoKQpAQCAtOTEsMjIgKzkwLDIzIEBACiAgICAgICAgICAgICBjZmlsZSA9IGZ1bGxuYW1lICsgKCdjJyBpZiBfX2RlYnVnX18gZWxzZSAnbycpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBvcHRpbWl6ZSA+PSAwOgotICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZ1bGxuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmdWxsbmFtZSkKKyAgICAgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZ1bGxuYW1lKQogICAgICAgICAgICAgY2FjaGVfZGlyID0gb3MucGF0aC5kaXJuYW1lKGNmaWxlKQogICAgICAgICBoZWFkLCB0YWlsID0gbmFtZVs6LTNdLCBuYW1lWy0zOl0KICAgICAgICAgaWYgdGFpbCA9PSAnLnB5JzoKICAgICAgICAgICAgIGlmIG5vdCBmb3JjZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG10aW1lID0gaW50KG9zLnN0YXQoZnVsbG5hbWUpLnN0X210aW1lKQotICAgICAgICAgICAgICAgICAgICBleHBlY3QgPSBzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgbXRpbWUpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdCA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGltZSkKICAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGNmaWxlLCAncmInKSBhcyBjaGFuZGxlOgogICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsID0gY2hhbmRsZS5yZWFkKDgpCiAgICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdCA9PSBhY3R1YWw6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjY2VzcwotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ0NvbXBpbGluZyB7IXJ9Li4uJy5mb3JtYXQoZnVsbG5hbWUpKQpAQCAtMTI0LDcgKzEyNCw3IEBACiAgICAgICAgICAgICAgICAgbXNnID0gbXNnLmRlY29kZShzeXMuc3Rkb3V0LmVuY29kaW5nKQogICAgICAgICAgICAgICAgIHByaW50KG1zZykKICAgICAgICAgICAgICAgICBzdWNjZXNzID0gMAotICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBJT0Vycm9yKSBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IChTeW50YXhFcnJvciwgVW5pY29kZUVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgICAgIGlmIHF1aWV0OgogICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIEVycm9yIGNvbXBpbGluZyB7IXJ9Li4uJy5mb3JtYXQoZnVsbG5hbWUpKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xOTYsOSArMTk2LDYgQEAKIAogICAgIGNvbXBpbGVfZGVzdHMgPSBhcmdzLmNvbXBpbGVfZGVzdAogCi0gICAgaWYgKGFyZ3MuZGRpciBhbmQgKGxlbihjb21waWxlX2Rlc3RzKSAhPSAxCi0gICAgICAgICAgICBvciBub3Qgb3MucGF0aC5pc2Rpcihjb21waWxlX2Rlc3RzWzBdKSkpOgotICAgICAgICBwYXJzZXIuZXhpdCgnLWQgZGVzdGRpciByZXF1aXJlcyBleGFjdGx5IG9uZSBkaXJlY3RvcnkgYXJndW1lbnQnKQogICAgIGlmIGFyZ3Mucng6CiAgICAgICAgIGltcG9ydCByZQogICAgICAgICBhcmdzLnJ4ID0gcmUuY29tcGlsZShhcmdzLnJ4KQpAQCAtMjA5LDcgKzIwNiw3IEBACiAgICAgICAgICAgICB3aXRoIChzeXMuc3RkaW4gaWYgYXJncy5mbGlzdD09Jy0nIGVsc2Ugb3BlbihhcmdzLmZsaXN0KSkgYXMgZjoKICAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgICAgICBjb21waWxlX2Rlc3RzLmFwcGVuZChsaW5lLnN0cmlwKCkpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJFcnJvciByZWFkaW5nIGZpbGUgbGlzdCB7fSIuZm9ybWF0KGFyZ3MuZmxpc3QpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKZGlmZiAtLWdpdCBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL19iYXNlLnB5CmluZGV4IGQ0NWE0MDQuLmIyNTk4MzMgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvX2Jhc2UucHkKKysrIGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9fYmFzZS5weQpAQCAtMjAwLDggKzIwMCw3IEBACiAgICAgICAgIHdhaXRlciA9IF9jcmVhdGVfYW5kX2luc3RhbGxfd2FpdGVycyhmcywgX0FTX0NPTVBMRVRFRCkKIAogICAgIHRyeToKLSAgICAgICAgZm9yIGZ1dHVyZSBpbiBmaW5pc2hlZDoKLSAgICAgICAgICAgIHlpZWxkIGZ1dHVyZQorICAgICAgICB5aWVsZCBmcm9tIGZpbmlzaGVkCiAKICAgICAgICAgd2hpbGUgcGVuZGluZzoKICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKQEAgLTIyNiw3ICsyMjUsOCBAQAogCiAgICAgZmluYWxseToKICAgICAgICAgZm9yIGYgaW4gZnM6Ci0gICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisgICAgICAgICAgICB3aXRoIGYuX2NvbmRpdGlvbjoKKyAgICAgICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAKIERvbmVBbmROb3REb25lRnV0dXJlcyA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoCiAgICAgICAgICdEb25lQW5kTm90RG9uZUZ1dHVyZXMnLCAnZG9uZSBub3RfZG9uZScpCkBAIC0yNzMsNyArMjczLDggQEAKIAogICAgIHdhaXRlci5ldmVudC53YWl0KHRpbWVvdXQpCiAgICAgZm9yIGYgaW4gZnM6Ci0gICAgICAgIGYuX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKKyAgICAgICAgd2l0aCBmLl9jb25kaXRpb246CisgICAgICAgICAgICBmLl93YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCiAKICAgICBkb25lLnVwZGF0ZSh3YWl0ZXIuZmluaXNoZWRfZnV0dXJlcykKICAgICByZXR1cm4gRG9uZUFuZE5vdERvbmVGdXR1cmVzKGRvbmUsIHNldChmcykgLSBkb25lKQpAQCAtNTE3LDcgKzUxOCw3IEBACiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQogCiAgICAgZGVmIG1hcChzZWxmLCBmbiwgKml0ZXJhYmxlcywgdGltZW91dD1Ob25lKToKLSAgICAgICAgIiIiUmV0dXJucyBhIGl0ZXJhdG9yIGVxdWl2YWxlbnQgdG8gbWFwKGZuLCBpdGVyKS4KKyAgICAgICAgIiIiUmV0dXJucyBhbiBpdGVyYXRvciBlcXVpdmFsZW50IHRvIG1hcChmbiwgaXRlcikuCiAKICAgICAgICAgQXJnczoKICAgICAgICAgICAgIGZuOiBBIGNhbGxhYmxlIHRoYXQgd2lsbCB0YWtlIGFzIG1hbnkgYXJndW1lbnRzIGFzIHRoZXJlIGFyZQpkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5IGIvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy9wcm9jZXNzLnB5CmluZGV4IGFkZjJhYjQuLjA3YjUyMjUgMTAwNjQ0Ci0tLSBhL0xpYi9jb25jdXJyZW50L2Z1dHVyZXMvcHJvY2Vzcy5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3Byb2Nlc3MucHkKQEAgLTQwLDcgKzQwLDcgQEAKIAogUHJvY2VzcyAjMS4ubjoKIC0gcmVhZHMgX0NhbGxJdGVtcyBmcm9tICJDYWxsIFEiLCBleGVjdXRlcyB0aGUgY2FsbHMsIGFuZCBwdXRzIHRoZSByZXN1bHRpbmcKLSAgX1Jlc3VsdEl0ZW1zIGluICJSZXF1ZXN0IFEiCisgIF9SZXN1bHRJdGVtcyBpbiAiUmVzdWx0IFEiCiAiIiIKIAogX19hdXRob3JfXyA9ICdCcmlhbiBRdWlubGFuIChicmlhbkBzd2VldGFwcC5jb20pJwpAQCAtNDksOCArNDksOSBAQAogaW1wb3J0IG9zCiBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgX2Jhc2UKIGltcG9ydCBxdWV1ZQorZnJvbSBxdWV1ZSBpbXBvcnQgRnVsbAogaW1wb3J0IG11bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZSwgRnVsbAorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNpbXBsZVF1ZXVlCiBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCB3YWl0CiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgd2Vha3JlZgpAQCAtMjQwLDYgKzI0MSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAidGVybWluYXRlZCBhYnJ1cHRseSB3aGlsZSB0aGUgZnV0dXJlIHdhcyAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicnVubmluZyBvciBwZW5kaW5nLiIKICAgICAgICAgICAgICAgICAgICAgKSkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICBwZW5kaW5nX3dvcmtfaXRlbXMuY2xlYXIoKQogICAgICAgICAgICAgIyBUZXJtaW5hdGUgcmVtYWluaW5nIHdvcmtlcnMgZm9yY2libHk6IHRoZSBxdWV1ZXMgb3IgdGhlaXIKICAgICAgICAgICAgICMgbG9ja3MgbWF5IGJlIGluIGEgZGlydHkgc3RhdGUgYW5kIGJsb2NrIGZvcmV2ZXIuCkBAIC0yNjQsNiArMjY3LDggQEAKICAgICAgICAgICAgICAgICAgICAgd29ya19pdGVtLmZ1dHVyZS5zZXRfZXhjZXB0aW9uKHJlc3VsdF9pdGVtLmV4Y2VwdGlvbikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0uZnV0dXJlLnNldF9yZXN1bHQocmVzdWx0X2l0ZW0ucmVzdWx0KQorICAgICAgICAgICAgICAgICMgRGVsZXRlIHJlZmVyZW5jZXMgdG8gb2JqZWN0LiBTZWUgaXNzdWUxNjI4NAorICAgICAgICAgICAgICAgIGRlbCB3b3JrX2l0ZW0KICAgICAgICAgIyBDaGVjayB3aGV0aGVyIHdlIHNob3VsZCBzdGFydCBzaHV0dGluZyBkb3duLgogICAgICAgICBleGVjdXRvciA9IGV4ZWN1dG9yX3JlZmVyZW5jZSgpCiAgICAgICAgICMgTm8gbW9yZSB3b3JrIGl0ZW1zIGNhbiBiZSBhZGRlZCBpZjoKQEAgLTMyNyw3ICszMzIsNyBAQAogICAgICAgICBfY2hlY2tfc3lzdGVtX2xpbWl0cygpCiAKICAgICAgICAgaWYgbWF4X3dvcmtlcnMgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbXVsdGlwcm9jZXNzaW5nLmNwdV9jb3VudCgpCisgICAgICAgICAgICBzZWxmLl9tYXhfd29ya2VycyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX21heF93b3JrZXJzID0gbWF4X3dvcmtlcnMKIApkaWZmIC0tZ2l0IGEvTGliL2NvbmN1cnJlbnQvZnV0dXJlcy90aHJlYWQucHkgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQppbmRleCA5NWJiNjgyLi5mOWJlYjBmIDEwMDY0NAotLS0gYS9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQorKysgYi9MaWIvY29uY3VycmVudC9mdXR1cmVzL3RocmVhZC5weQpAQCAtNjMsNiArNjMsOCBAQAogICAgICAgICAgICAgd29ya19pdGVtID0gd29ya19xdWV1ZS5nZXQoYmxvY2s9VHJ1ZSkKICAgICAgICAgICAgIGlmIHdvcmtfaXRlbSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB3b3JrX2l0ZW0ucnVuKCkKKyAgICAgICAgICAgICAgICAjIERlbGV0ZSByZWZlcmVuY2VzIHRvIG9iamVjdC4gU2VlIGlzc3VlMTYyODQKKyAgICAgICAgICAgICAgICBkZWwgd29ya19pdGVtCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGV4ZWN1dG9yID0gZXhlY3V0b3JfcmVmZXJlbmNlKCkKICAgICAgICAgICAgICMgRXhpdCBpZjoKZGlmZiAtLWdpdCBhL0xpYi9jb25maWdwYXJzZXIucHkgYi9MaWIvY29uZmlncGFyc2VyLnB5CmluZGV4IGFlYmY4YTAuLmRjYjdlYzQgMTAwNjQ0Ci0tLSBhL0xpYi9jb25maWdwYXJzZXIucHkKKysrIGIvTGliL2NvbmZpZ3BhcnNlci5weQpAQCAtMjQxLDEyICsyNDEsOSBAQAogICAgICIiIkEgc3RyaW5nIHN1YnN0aXR1dGlvbiByZXF1aXJlZCBhIHNldHRpbmcgd2hpY2ggd2FzIG5vdCBhdmFpbGFibGUuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgb3B0aW9uLCBzZWN0aW9uLCByYXd2YWwsIHJlZmVyZW5jZSk6Ci0gICAgICAgIG1zZyA9ICgiQmFkIHZhbHVlIHN1YnN0aXR1dGlvbjpcbiIKLSAgICAgICAgICAgICAgICJcdHNlY3Rpb246IFslc11cbiIKLSAgICAgICAgICAgICAgICJcdG9wdGlvbiA6ICVzXG4iCi0gICAgICAgICAgICAgICAiXHRrZXkgICAgOiAlc1xuIgotICAgICAgICAgICAgICAgIlx0cmF3dmFsIDogJXNcbiIKLSAgICAgICAgICAgICAgICUgKHNlY3Rpb24sIG9wdGlvbiwgcmVmZXJlbmNlLCByYXd2YWwpKQorICAgICAgICBtc2cgPSAoIkJhZCB2YWx1ZSBzdWJzdGl0dXRpb246IG9wdGlvbiB7IXJ9IGluIHNlY3Rpb24geyFyfSBjb250YWlucyAiCisgICAgICAgICAgICAgICAiYW4gaW50ZXJwb2xhdGlvbiBrZXkgeyFyfSB3aGljaCBpcyBub3QgYSB2YWxpZCBvcHRpb24gbmFtZS4gIgorICAgICAgICAgICAgICAgIlJhdyB2YWx1ZTogeyFyfSIuZm9ybWF0KG9wdGlvbiwgc2VjdGlvbiwgcmVmZXJlbmNlLCByYXd2YWwpKQogICAgICAgICBJbnRlcnBvbGF0aW9uRXJyb3IuX19pbml0X18oc2VsZiwgb3B0aW9uLCBzZWN0aW9uLCBtc2cpCiAgICAgICAgIHNlbGYucmVmZXJlbmNlID0gcmVmZXJlbmNlCiAgICAgICAgIHNlbGYuYXJncyA9IChvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgcmVmZXJlbmNlKQpAQCAtMjY0LDExICsyNjEsMTEgQEAKICAgICAiIiJSYWlzZWQgd2hlbiBzdWJzdGl0dXRpb25zIGFyZSBuZXN0ZWQgdG9vIGRlZXBseS4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCk6Ci0gICAgICAgIG1zZyA9ICgiVmFsdWUgaW50ZXJwb2xhdGlvbiB0b28gZGVlcGx5IHJlY3Vyc2l2ZTpcbiIKLSAgICAgICAgICAgICAgICJcdHNlY3Rpb246IFslc11cbiIKLSAgICAgICAgICAgICAgICJcdG9wdGlvbiA6ICVzXG4iCi0gICAgICAgICAgICAgICAiXHRyYXd2YWwgOiAlc1xuIgotICAgICAgICAgICAgICAgJSAoc2VjdGlvbiwgb3B0aW9uLCByYXd2YWwpKQorICAgICAgICBtc2cgPSAoIlJlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZCBpbiB2YWx1ZSBzdWJzdGl0dXRpb246IG9wdGlvbiB7IXJ9ICIKKyAgICAgICAgICAgICAgICJpbiBzZWN0aW9uIHshcn0gY29udGFpbnMgYW4gaW50ZXJwb2xhdGlvbiBrZXkgd2hpY2ggIgorICAgICAgICAgICAgICAgImNhbm5vdCBiZSBzdWJzdGl0dXRlZCBpbiB7fSBzdGVwcy4gUmF3IHZhbHVlOiB7IXJ9IgorICAgICAgICAgICAgICAgIiIuZm9ybWF0KG9wdGlvbiwgc2VjdGlvbiwgTUFYX0lOVEVSUE9MQVRJT05fREVQVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmF3dmFsKSkKICAgICAgICAgSW50ZXJwb2xhdGlvbkVycm9yLl9faW5pdF9fKHNlbGYsIG9wdGlvbiwgc2VjdGlvbiwgbXNnKQogICAgICAgICBzZWxmLmFyZ3MgPSAob3B0aW9uLCBzZWN0aW9uLCByYXd2YWwpCiAKQEAgLTM4NCw4ICszODEsOSBAQAogCiAgICAgZGVmIF9pbnRlcnBvbGF0ZV9zb21lKHNlbGYsIHBhcnNlciwgb3B0aW9uLCBhY2N1bSwgcmVzdCwgc2VjdGlvbiwgbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCk6CisgICAgICAgIHJhd3ZhbCA9IHBhcnNlci5nZXQoc2VjdGlvbiwgb3B0aW9uLCByYXc9VHJ1ZSwgZmFsbGJhY2s9cmVzdCkKICAgICAgICAgaWYgZGVwdGggPiBNQVhfSU5URVJQT0xBVElPTl9ERVBUSDoKLSAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25EZXB0aEVycm9yKG9wdGlvbiwgc2VjdGlvbiwgcmVzdCkKKyAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25EZXB0aEVycm9yKG9wdGlvbiwgc2VjdGlvbiwgcmF3dmFsKQogICAgICAgICB3aGlsZSByZXN0OgogICAgICAgICAgICAgcCA9IHJlc3QuZmluZCgiJSIpCiAgICAgICAgICAgICBpZiBwIDwgMDoKQEAgLTQxMCw3ICs0MDgsNyBAQAogICAgICAgICAgICAgICAgICAgICB2ID0gbWFwW3Zhcl0KICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEludGVycG9sYXRpb25NaXNzaW5nT3B0aW9uRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJlc3QsIHZhcikKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgc2VjdGlvbiwgcmF3dmFsLCB2YXIpCiAgICAgICAgICAgICAgICAgaWYgIiUiIGluIHY6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludGVycG9sYXRlX3NvbWUocGFyc2VyLCBvcHRpb24sIGFjY3VtLCB2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb24sIG1hcCwgZGVwdGggKyAxKQpAQCAtNDQ0LDggKzQ0Miw5IEBACiAKICAgICBkZWYgX2ludGVycG9sYXRlX3NvbWUoc2VsZiwgcGFyc2VyLCBvcHRpb24sIGFjY3VtLCByZXN0LCBzZWN0aW9uLCBtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcHRoKToKKyAgICAgICAgcmF3dmFsID0gcGFyc2VyLmdldChzZWN0aW9uLCBvcHRpb24sIHJhdz1UcnVlLCBmYWxsYmFjaz1yZXN0KQogICAgICAgICBpZiBkZXB0aCA+IE1BWF9JTlRFUlBPTEFUSU9OX0RFUFRIOgotICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3Iob3B0aW9uLCBzZWN0aW9uLCByZXN0KQorICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3Iob3B0aW9uLCBzZWN0aW9uLCByYXd2YWwpCiAgICAgICAgIHdoaWxlIHJlc3Q6CiAgICAgICAgICAgICBwID0gcmVzdC5maW5kKCIkIikKICAgICAgICAgICAgIGlmIHAgPCAwOgpAQCAtNDgyLDcgKzQ4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1vcmUgdGhhbiBvbmUgJzonIGZvdW5kOiAlciIgJSAocmVzdCwpKQogICAgICAgICAgICAgICAgIGV4Y2VwdCAoS2V5RXJyb3IsIE5vU2VjdGlvbkVycm9yLCBOb09wdGlvbkVycm9yKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcigKLSAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiwgc2VjdGlvbiwgcmVzdCwgIjoiLmpvaW4ocGF0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24sIHNlY3Rpb24sIHJhd3ZhbCwgIjoiLmpvaW4ocGF0aCkpCiAgICAgICAgICAgICAgICAgaWYgIiQiIGluIHY6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ludGVycG9sYXRlX3NvbWUocGFyc2VyLCBvcHQsIGFjY3VtLCB2LCBzZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QocGFyc2VyLml0ZW1zKHNlY3QsIHJhdz1UcnVlKSksCkBAIC02NzAsNyArNjY5LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChmcCwgZmlsZW5hbWUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByZWFkX29rLmFwcGVuZChmaWxlbmFtZSkKICAgICAgICAgcmV0dXJuIHJlYWRfb2sKZGlmZiAtLWdpdCBhL0xpYi9jb250ZXh0bGliLnB5IGIvTGliL2NvbnRleHRsaWIucHkKaW5kZXggYjAzZjgyOC4uMDdiMjI2MSAxMDA2NDQKLS0tIGEvTGliL2NvbnRleHRsaWIucHkKKysrIGIvTGliL2NvbnRleHRsaWIucHkKQEAgLTQsNyArNCw4IEBACiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZQogZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzCiAKLV9fYWxsX18gPSBbImNvbnRleHRtYW5hZ2VyIiwgImNsb3NpbmciLCAiQ29udGV4dERlY29yYXRvciIsICJFeGl0U3RhY2siXQorX19hbGxfXyA9IFsiY29udGV4dG1hbmFnZXIiLCAiY2xvc2luZyIsICJDb250ZXh0RGVjb3JhdG9yIiwgIkV4aXRTdGFjayIsCisgICAgICAgICAgICJyZWRpcmVjdF9zdGRvdXQiLCAic3VwcHJlc3MiXQogCiAKIGNsYXNzIENvbnRleHREZWNvcmF0b3Iob2JqZWN0KToKQEAgLTMzLDIxICszNCwzMSBAQAogY2xhc3MgX0dlbmVyYXRvckNvbnRleHRNYW5hZ2VyKENvbnRleHREZWNvcmF0b3IpOgogICAgICIiIkhlbHBlciBmb3IgQGNvbnRleHRtYW5hZ2VyIGRlY29yYXRvci4iIiIKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jLCAqYXJncywgKiprd2RzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgYXJncywga3dkcyk6CiAgICAgICAgIHNlbGYuZ2VuID0gZnVuYygqYXJncywgKiprd2RzKQogICAgICAgICBzZWxmLmZ1bmMsIHNlbGYuYXJncywgc2VsZi5rd2RzID0gZnVuYywgYXJncywga3dkcworICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBkb2MgPSBnZXRhdHRyKGZ1bmMsICJfX2RvY19fIiwgTm9uZSkKKyAgICAgICAgaWYgZG9jIGlzIE5vbmU6CisgICAgICAgICAgICBkb2MgPSB0eXBlKHNlbGYpLl9fZG9jX18KKyAgICAgICAgc2VsZi5fX2RvY19fID0gZG9jCisgICAgICAgICMgVW5mb3J0dW5hdGVseSwgdGhpcyBzdGlsbCBkb2Vzbid0IHByb3ZpZGUgZ29vZCBoZWxwIG91dHB1dCB3aGVuCisgICAgICAgICMgaW5zcGVjdGluZyB0aGUgY3JlYXRlZCBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzLCBzaW5jZSBweWRvYworICAgICAgICAjIGN1cnJlbnRseSBieXBhc3NlcyB0aGUgaW5zdGFuY2UgZG9jc3RyaW5nIGFuZCBzaG93cyB0aGUgZG9jc3RyaW5nCisgICAgICAgICMgZm9yIHRoZSBjbGFzcyBpbnN0ZWFkLgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk0MDQgZm9yIG1vcmUgZGV0YWlscy4KIAogICAgIGRlZiBfcmVjcmVhdGVfY20oc2VsZik6CiAgICAgICAgICMgX0dDTSBpbnN0YW5jZXMgYXJlIG9uZS1zaG90IGNvbnRleHQgbWFuYWdlcnMsIHNvIHRoZQogICAgICAgICAjIENNIG11c3QgYmUgcmVjcmVhdGVkIGVhY2ggdGltZSBhIGRlY29yYXRlZCBmdW5jdGlvbiBpcwogICAgICAgICAjIGNhbGxlZAotICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18oc2VsZi5mdW5jLCAqc2VsZi5hcmdzLCAqKnNlbGYua3dkcykKKyAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHNlbGYuZnVuYywgc2VsZi5hcmdzLCBzZWxmLmt3ZHMpCiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gbmV4dChzZWxmLmdlbikKICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImdlbmVyYXRvciBkaWRuJ3QgeWllbGQiKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJnZW5lcmF0b3IgZGlkbid0IHlpZWxkIikgZnJvbSBOb25lCiAKICAgICBkZWYgX19leGl0X18oc2VsZiwgdHlwZSwgdmFsdWUsIHRyYWNlYmFjayk6CiAgICAgICAgIGlmIHR5cGUgaXMgTm9uZToKQEAgLTExMiw3ICsxMjMsNyBAQAogICAgICIiIgogICAgIEB3cmFwcyhmdW5jKQogICAgIGRlZiBoZWxwZXIoKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIHJldHVybiBfR2VuZXJhdG9yQ29udGV4dE1hbmFnZXIoZnVuYywgKmFyZ3MsICoqa3dkcykKKyAgICAgICAgcmV0dXJuIF9HZW5lcmF0b3JDb250ZXh0TWFuYWdlcihmdW5jLCBhcmdzLCBrd2RzKQogICAgIHJldHVybiBoZWxwZXIKIAogCkBAIC0xNDAsNiArMTUxLDYyIEBACiAgICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6CiAgICAgICAgIHNlbGYudGhpbmcuY2xvc2UoKQogCitjbGFzcyByZWRpcmVjdF9zdGRvdXQ6CisgICAgIiIiQ29udGV4dCBtYW5hZ2VyIGZvciB0ZW1wb3JhcmlseSByZWRpcmVjdGluZyBzdGRvdXQgdG8gYW5vdGhlciBmaWxlCisKKyAgICAgICAgIyBIb3cgdG8gc2VuZCBoZWxwKCkgdG8gc3RkZXJyCisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KHN5cy5zdGRlcnIpOgorICAgICAgICAgICAgaGVscChkaXIpCisKKyAgICAgICAgIyBIb3cgdG8gd3JpdGUgaGVscCgpIHRvIGEgZmlsZQorICAgICAgICB3aXRoIG9wZW4oJ2hlbHAudHh0JywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgd2l0aCByZWRpcmVjdF9zdGRvdXQoZik6CisgICAgICAgICAgICAgICAgaGVscChwb3cpCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmV3X3RhcmdldCk6CisgICAgICAgIHNlbGYuX25ld190YXJnZXQgPSBuZXdfdGFyZ2V0CisgICAgICAgICMgV2UgdXNlIGEgbGlzdCBvZiBvbGQgdGFyZ2V0cyB0byBtYWtlIHRoaXMgQ00gcmUtZW50cmFudAorICAgICAgICBzZWxmLl9vbGRfdGFyZ2V0cyA9IFtdCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBzZWxmLl9vbGRfdGFyZ2V0cy5hcHBlbmQoc3lzLnN0ZG91dCkKKyAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYuX25ld190YXJnZXQKKyAgICAgICAgcmV0dXJuIHNlbGYuX25ld190YXJnZXQKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGN0eXBlLCBleGNpbnN0LCBleGN0Yik6CisgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vbGRfdGFyZ2V0cy5wb3AoKQorCisKK2NsYXNzIHN1cHByZXNzOgorICAgICIiIkNvbnRleHQgbWFuYWdlciB0byBzdXBwcmVzcyBzcGVjaWZpZWQgZXhjZXB0aW9ucworCisgICAgQWZ0ZXIgdGhlIGV4Y2VwdGlvbiBpcyBzdXBwcmVzc2VkLCBleGVjdXRpb24gcHJvY2VlZHMgd2l0aCB0aGUgbmV4dAorICAgIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlIHdpdGggc3RhdGVtZW50LgorCisgICAgICAgICB3aXRoIHN1cHByZXNzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgICBvcy5yZW1vdmUoc29tZWZpbGUpCisgICAgICAgICAjIEV4ZWN1dGlvbiBzdGlsbCByZXN1bWVzIGhlcmUgaWYgdGhlIGZpbGUgd2FzIGFscmVhZHkgcmVtb3ZlZAorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICpleGNlcHRpb25zKToKKyAgICAgICAgc2VsZi5fZXhjZXB0aW9ucyA9IGV4Y2VwdGlvbnMKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGN0eXBlLCBleGNpbnN0LCBleGN0Yik6CisgICAgICAgICMgVW5saWtlIGlzaW5zdGFuY2UgYW5kIGlzc3ViY2xhc3MsIENQeXRob24gZXhjZXB0aW9uIGhhbmRsaW5nCisgICAgICAgICMgY3VycmVudGx5IG9ubHkgbG9va3MgYXQgdGhlIGNvbmNyZXRlIHR5cGUgaGllcmFyY2h5IChpZ25vcmluZworICAgICAgICAjIHRoZSBpbnN0YW5jZSBhbmQgc3ViY2xhc3MgY2hlY2tpbmcgaG9va3MpLiBXaGlsZSBHdWlkbyBjb25zaWRlcnMKKyAgICAgICAgIyB0aGF0IGEgYnVnIHJhdGhlciB0aGFuIGEgZmVhdHVyZSwgaXQncyBhIGZhaXJseSBoYXJkIG9uZSB0byBmaXgKKyAgICAgICAgIyBkdWUgdG8gdmFyaW91cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLiBzdXBwcmVzcyBwcm92aWRlcworICAgICAgICAjIHRoZSBzaW1wbGVyIGlzc3ViY2xhc3MgYmFzZWQgc2VtYW50aWNzLCByYXRoZXIgdGhhbiB0cnlpbmcgdG8KKyAgICAgICAgIyBleGFjdGx5IHJlcHJvZHVjZSB0aGUgbGltaXRhdGlvbnMgb2YgdGhlIENQeXRob24gaW50ZXJwcmV0ZXIuCisgICAgICAgICMKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEyMDI5IGZvciBtb3JlIGRldGFpbHMKKyAgICAgICAgcmV0dXJuIGV4Y3R5cGUgaXMgbm90IE5vbmUgYW5kIGlzc3ViY2xhc3MoZXhjdHlwZSwgc2VsZi5fZXhjZXB0aW9ucykKKwogCiAjIEluc3BpcmVkIGJ5IGRpc2N1c3Npb25zIG9uIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzU4NQogY2xhc3MgRXhpdFN0YWNrKG9iamVjdCk6CmRpZmYgLS1naXQgYS9MaWIvY29weS5weSBiL0xpYi9jb3B5LnB5CmluZGV4IGJiODg0MGUuLmYwZmI0NDMgMTAwNjQ0Ci0tLSBhL0xpYi9jb3B5LnB5CisrKyBiL0xpYi9jb3B5LnB5CkBAIC0yODEsNyArMjgxLDcgQEAKICAgICBpZiBuID4gMjoKICAgICAgICAgc3RhdGUgPSBpbmZvWzJdCiAgICAgZWxzZToKLSAgICAgICAgc3RhdGUgPSB7fQorICAgICAgICBzdGF0ZSA9IE5vbmUKICAgICBpZiBuID4gMzoKICAgICAgICAgbGlzdGl0ZXIgPSBpbmZvWzNdCiAgICAgZWxzZToKQEAgLTI5NSw3ICsyOTUsNyBAQAogICAgIHkgPSBjYWxsYWJsZSgqYXJncykKICAgICBtZW1vW2lkKHgpXSA9IHkKIAotICAgIGlmIHN0YXRlOgorICAgIGlmIHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICBpZiBkZWVwOgogICAgICAgICAgICAgc3RhdGUgPSBkZWVwY29weShzdGF0ZSwgbWVtbykKICAgICAgICAgaWYgaGFzYXR0cih5LCAnX19zZXRzdGF0ZV9fJyk6CmRpZmYgLS1naXQgYS9MaWIvY29weXJlZy5weSBiL0xpYi9jb3B5cmVnLnB5CmluZGV4IDY2YzBmOGEuLjY3ZjViYjAgMTAwNjQ0Ci0tLSBhL0xpYi9jb3B5cmVnLnB5CisrKyBiL0xpYi9jb3B5cmVnLnB5CkBAIC04Nyw2ICs4NywxMiBAQAogZGVmIF9fbmV3b2JqX18oY2xzLCAqYXJncyk6CiAgICAgcmV0dXJuIGNscy5fX25ld19fKGNscywgKmFyZ3MpCiAKK2RlZiBfX25ld29ial9leF9fKGNscywgYXJncywga3dhcmdzKToKKyAgICAiIiJVc2VkIGJ5IHBpY2tsZSBwcm90b2NvbCA0LCBpbnN0ZWFkIG9mIF9fbmV3b2JqX18gdG8gYWxsb3cgY2xhc3NlcyB3aXRoCisgICAga2V5d29yZC1vbmx5IGFyZ3VtZW50cyB0byBiZSBwaWNrbGVkIGNvcnJlY3RseS4KKyAgICAiIiIKKyAgICByZXR1cm4gY2xzLl9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpCisKIGRlZiBfc2xvdG5hbWVzKGNscyk6CiAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiBzbG90IG5hbWVzIGZvciBhIGdpdmVuIGNsYXNzLgogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL19faW5pdF9fLnB5IGIvTGliL2N0eXBlcy9fX2luaXRfXy5weQppbmRleCBjOTJlMTMwLi41YzgwM2ZmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL19faW5pdF9fLnB5CisrKyBiL0xpYi9jdHlwZXMvX19pbml0X18ucHkKQEAgLTM0LDI0ICszNCwyMiBAQAogICAgICBGVU5DRkxBR19VU0VfRVJSTk8gYXMgX0ZVTkNGTEFHX1VTRV9FUlJOTywgXAogICAgICBGVU5DRkxBR19VU0VfTEFTVEVSUk9SIGFzIF9GVU5DRkxBR19VU0VfTEFTVEVSUk9SCiAKLSIiIgotV0lOT0xFQVBJIC0+IEhSRVNVTFQKLVdJTk9MRUFQSV8odHlwZSkKLQotU1RETUVUSE9EQ0FMTFRZUEUKLQotU1RETUVUSE9EKG5hbWUpCi1TVERNRVRIT0RfKHR5cGUsIG5hbWUpCi0KLVNUREFQSUNBTExUWVBFCi0iIiIKKyMgV0lOT0xFQVBJIC0+IEhSRVNVTFQKKyMgV0lOT0xFQVBJXyh0eXBlKQorIworIyBTVERNRVRIT0RDQUxMVFlQRQorIworIyBTVERNRVRIT0QobmFtZSkKKyMgU1RETUVUSE9EXyh0eXBlLCBuYW1lKQorIworIyBTVERBUElDQUxMVFlQRQogCiBkZWYgY3JlYXRlX3N0cmluZ19idWZmZXIoaW5pdCwgc2l6ZT1Ob25lKToKICAgICAiIiJjcmVhdGVfc3RyaW5nX2J1ZmZlcihhQnl0ZXMpIC0+IGNoYXJhY3RlciBhcnJheQogICAgIGNyZWF0ZV9zdHJpbmdfYnVmZmVyKGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CiAgICAgY3JlYXRlX3N0cmluZ19idWZmZXIoYVN0cmluZywgYW5JbnRlZ2VyKSAtPiBjaGFyYWN0ZXIgYXJyYXkKICAgICAiIiIKLSAgICBpZiBpc2luc3RhbmNlKGluaXQsIChzdHIsIGJ5dGVzKSk6CisgICAgaWYgaXNpbnN0YW5jZShpbml0LCBieXRlcyk6CiAgICAgICAgIGlmIHNpemUgaXMgTm9uZToKICAgICAgICAgICAgIHNpemUgPSBsZW4oaW5pdCkrMQogICAgICAgICBidWZ0eXBlID0gY19jaGFyICogc2l6ZQpAQCAtMjg2LDcgKzI4NCw3IEBACiAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyKGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CiAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyKGFTdHJpbmcsIGFuSW50ZWdlcikgLT4gY2hhcmFjdGVyIGFycmF5CiAgICAgIiIiCi0gICAgaWYgaXNpbnN0YW5jZShpbml0LCAoc3RyLCBieXRlcykpOgorICAgIGlmIGlzaW5zdGFuY2UoaW5pdCwgc3RyKToKICAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgogICAgICAgICAgICAgc2l6ZSA9IGxlbihpbml0KSsxCiAgICAgICAgIGJ1ZnR5cGUgPSBjX3djaGFyICogc2l6ZQpAQCAtMzk1LDcgKzM5Myw3IEBACiAgICAgICAgIF90eXBlXyA9ICJsIgogICAgICAgICAjIF9jaGVja19yZXR2YWxfIGlzIGNhbGxlZCB3aXRoIHRoZSBmdW5jdGlvbidzIHJlc3VsdCB3aGVuIGl0CiAgICAgICAgICMgaXMgdXNlZCBhcyByZXN0eXBlLiAgSXQgY2hlY2tzIGZvciB0aGUgRkFJTEVEIGJpdCwgYW5kCi0gICAgICAgICMgcmFpc2VzIGEgV2luZG93c0Vycm9yIGlmIGl0IGlzIHNldC4KKyAgICAgICAgIyByYWlzZXMgYW4gT1NFcnJvciBpZiBpdCBpcyBzZXQuCiAgICAgICAgICMKICAgICAgICAgIyBUaGUgX2NoZWNrX3JldHZhbF8gbWV0aG9kIGlzIGltcGxlbWVudGVkIGluIEMsIHNvIHRoYXQgdGhlCiAgICAgICAgICMgbWV0aG9kIGRlZmluaXRpb24gaXRzZWxmIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgdHJhY2ViYWNrCkBAIC00MDcsNyArNDA1LDcgQEAKICAgICBjbGFzcyBPbGVETEwoQ0RMTCk6CiAgICAgICAgICIiIlRoaXMgY2xhc3MgcmVwcmVzZW50cyBhIGRsbCBleHBvcnRpbmcgZnVuY3Rpb25zIHVzaW5nIHRoZQogICAgICAgICBXaW5kb3dzIHN0ZGNhbGwgY2FsbGluZyBjb252ZW50aW9uLCBhbmQgcmV0dXJuaW5nIEhSRVNVTFQuCi0gICAgICAgIEhSRVNVTFQgZXJyb3IgdmFsdWVzIGFyZSBhdXRvbWF0aWNhbGx5IHJhaXNlZCBhcyBXaW5kb3dzRXJyb3IKKyAgICAgICAgSFJFU1VMVCBlcnJvciB2YWx1ZXMgYXJlIGF1dG9tYXRpY2FsbHkgcmFpc2VkIGFzIE9TRXJyb3IKICAgICAgICAgZXhjZXB0aW9ucy4KICAgICAgICAgIiIiCiAgICAgICAgIF9mdW5jX2ZsYWdzXyA9IF9GVU5DRkxBR19TVERDQUxMCkBAIC00NTYsNyArNDU0LDcgQEAKICAgICAgICAgICAgIGNvZGUgPSBHZXRMYXN0RXJyb3IoKQogICAgICAgICBpZiBkZXNjciBpcyBOb25lOgogICAgICAgICAgICAgZGVzY3IgPSBGb3JtYXRFcnJvcihjb2RlKS5zdHJpcCgpCi0gICAgICAgIHJldHVybiBXaW5kb3dzRXJyb3IoTm9uZSwgZGVzY3IsIE5vbmUsIGNvZGUpCisgICAgICAgIHJldHVybiBPU0Vycm9yKE5vbmUsIGRlc2NyLCBOb25lLCBjb2RlKQogCiBpZiBzaXplb2YoY191aW50KSA9PSBzaXplb2YoY192b2lkX3ApOgogICAgIGNfc2l6ZV90ID0gY191aW50CmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL21hY2hvbGliL2ZldGNoX21hY2hvbGliLmJhdCBiL0xpYi9jdHlwZXMvbWFjaG9saWIvZmV0Y2hfbWFjaG9saWIuYmF0CmluZGV4IGY5ZTFjMGQuLmY0NzRkNWMgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvbWFjaG9saWIvZmV0Y2hfbWFjaG9saWIuYmF0CisrKyBiL0xpYi9jdHlwZXMvbWFjaG9saWIvZmV0Y2hfbWFjaG9saWIuYmF0CkBAIC0xICsxIEBACi1zdm4gZXhwb3J0IC0tZm9yY2UgaHR0cDovL3N2bi5yZWQtYmVhbi5jb20vYm9iL21hY2hvbGliL3RydW5rL21hY2hvbGliLyAuCitzdm4gZXhwb3J0IC0tZm9yY2UgaHR0cDovL3N2bi5yZWQtYmVhbi5jb20vYm9iL21hY2hvbGliL3RydW5rL21hY2hvbGliLyAuDQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19faW5pdF9fLnB5CmluZGV4IGNjNWZlMDIuLjI2YTcwYjcgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC9fX2luaXRfXy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19pbml0X18ucHkKQEAgLTEsMjA4ICsxLDE0IEBACi1pbXBvcnQgb3MsIHN5cywgdW5pdHRlc3QsIGdldG9wdCwgdGltZQoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCi11c2VfcmVzb3VyY2VzID0gW10KKyMgc2tpcCB0ZXN0cyBpZiBfY3R5cGVzIHdhcyBub3QgYnVpbHQKK2N0eXBlcyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKK2N0eXBlc19zeW1ib2xzID0gZGlyKGN0eXBlcykKIAotY2xhc3MgUmVzb3VyY2VEZW5pZWQoRXhjZXB0aW9uKToKLSAgICAiIiJUZXN0IHNraXBwZWQgYmVjYXVzZSBpdCByZXF1ZXN0ZWQgYSBkaXNhbGxvd2VkIHJlc291cmNlLgorZGVmIG5lZWRfc3ltYm9sKG5hbWUpOgorICAgIHJldHVybiB1bml0dGVzdC5za2lwVW5sZXNzKG5hbWUgaW4gY3R5cGVzX3N5bWJvbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gaXMgcmVxdWlyZWQnLmZvcm1hdChuYW1lKSkKIAotICAgIFRoaXMgaXMgcmFpc2VkIHdoZW4gYSB0ZXN0IGNhbGxzIHJlcXVpcmVzKCkgZm9yIGEgcmVzb3VyY2UgdGhhdAotICAgIGhhcyBub3QgYmUgZW5hYmxlZC4gIFJlc291cmNlcyBhcmUgZGVmaW5lZCBieSB0ZXN0IG1vZHVsZXMuCi0gICAgIiIiCi0KLWRlZiBpc19yZXNvdXJjZV9lbmFibGVkKHJlc291cmNlKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSByZXNvdXJjZSBpcyBlbmFibGVkLgotCi0gICAgSWYgdGhlIGNhbGxlcidzIG1vZHVsZSBpcyBfX21haW5fXyB0aGVuIGF1dG9tYXRpY2FsbHkgcmV0dXJuIFRydWUuIiIiCi0gICAgaWYgc3lzLl9nZXRmcmFtZSgpLmZfYmFjay5mX2dsb2JhbHMuZ2V0KCJfX25hbWVfXyIpID09ICJfX21haW5fXyI6Ci0gICAgICAgIHJldHVybiBUcnVlCi0gICAgcmVzdWx0ID0gdXNlX3Jlc291cmNlcyBpcyBub3QgTm9uZSBhbmQgXAotICAgICAgICAgICAocmVzb3VyY2UgaW4gdXNlX3Jlc291cmNlcyBvciAiKiIgaW4gdXNlX3Jlc291cmNlcykKLSAgICBpZiBub3QgcmVzdWx0OgotICAgICAgICBfdW5hdmFpbFtyZXNvdXJjZV0gPSBOb25lCi0gICAgcmV0dXJuIHJlc3VsdAotCi1fdW5hdmFpbCA9IHt9Ci1kZWYgcmVxdWlyZXMocmVzb3VyY2UsIG1zZz1Ob25lKToKLSAgICAiIiJSYWlzZSBSZXNvdXJjZURlbmllZCBpZiB0aGUgc3BlY2lmaWVkIHJlc291cmNlIGlzIG5vdCBhdmFpbGFibGUuCi0KLSAgICBJZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIHRoZW4gYXV0b21hdGljYWxseSByZXR1cm4gVHJ1ZS4iIiIKLSAgICAjIHNlZSBpZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIC0gaWYgc28sIHRyZWF0IGFzIGlmCi0gICAgIyB0aGUgcmVzb3VyY2Ugd2FzIHNldAotICAgIGlmIHN5cy5fZ2V0ZnJhbWUoKS5mX2JhY2suZl9nbG9iYWxzLmdldCgiX19uYW1lX18iKSA9PSAiX19tYWluX18iOgotICAgICAgICByZXR1cm4KLSAgICBpZiBub3QgaXNfcmVzb3VyY2VfZW5hYmxlZChyZXNvdXJjZSk6Ci0gICAgICAgIGlmIG1zZyBpcyBOb25lOgotICAgICAgICAgICAgbXNnID0gIlVzZSBvZiB0aGUgYCVzJyByZXNvdXJjZSBub3QgZW5hYmxlZCIgJSByZXNvdXJjZQotICAgICAgICByYWlzZSBSZXNvdXJjZURlbmllZChtc2cpCi0KLWRlZiBmaW5kX3BhY2thZ2VfbW9kdWxlcyhwYWNrYWdlLCBtYXNrKToKLSAgICBpbXBvcnQgZm5tYXRjaAotICAgIGlmIChoYXNhdHRyKHBhY2thZ2UsICJfX2xvYWRlcl9fIikgYW5kCi0gICAgICAgICAgICBoYXNhdHRyKHBhY2thZ2UuX19sb2FkZXJfXywgJ19maWxlcycpKToKLSAgICAgICAgcGF0aCA9IHBhY2thZ2UuX19uYW1lX18ucmVwbGFjZSgiLiIsIG9zLnBhdGguc2VwKQotICAgICAgICBtYXNrID0gb3MucGF0aC5qb2luKHBhdGgsIG1hc2spCi0gICAgICAgIGZvciBmbm0gaW4gcGFja2FnZS5fX2xvYWRlcl9fLl9maWxlcy5rZXlzKCk6Ci0gICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZubSwgbWFzayk6Ci0gICAgICAgICAgICAgICAgeWllbGQgb3MucGF0aC5zcGxpdGV4dChmbm0pWzBdLnJlcGxhY2Uob3MucGF0aC5zZXAsICIuIikKLSAgICBlbHNlOgotICAgICAgICBwYXRoID0gcGFja2FnZS5fX3BhdGhfX1swXQotICAgICAgICBmb3IgZm5tIGluIG9zLmxpc3RkaXIocGF0aCk6Ci0gICAgICAgICAgICBpZiBmbm1hdGNoLmZubWF0Y2hjYXNlKGZubSwgbWFzayk6Ci0gICAgICAgICAgICAgICAgeWllbGQgIiVzLiVzIiAlIChwYWNrYWdlLl9fbmFtZV9fLCBvcy5wYXRoLnNwbGl0ZXh0KGZubSlbMF0pCi0KLWRlZiBnZXRfdGVzdHMocGFja2FnZSwgbWFzaywgdmVyYm9zaXR5LCBleGNsdWRlPSgpKToKLSAgICAiIiJSZXR1cm4gYSBsaXN0IG9mIHNraXBwZWQgdGVzdCBtb2R1bGVzLCBhbmQgYSBsaXN0IG9mIHRlc3QgY2FzZXMuIiIiCi0gICAgdGVzdHMgPSBbXQotICAgIHNraXBwZWQgPSBbXQotICAgIGZvciBtb2RuYW1lIGluIGZpbmRfcGFja2FnZV9tb2R1bGVzKHBhY2thZ2UsIG1hc2spOgotICAgICAgICBpZiBtb2RuYW1lLnNwbGl0KCIuIilbLTFdIGluIGV4Y2x1ZGU6Ci0gICAgICAgICAgICBza2lwcGVkLmFwcGVuZChtb2RuYW1lKQotICAgICAgICAgICAgaWYgdmVyYm9zaXR5ID4gMToKLSAgICAgICAgICAgICAgICBwcmludCgiU2tpcHBlZCAlczogZXhjbHVkZWQiICUgbW9kbmFtZSwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbW9kID0gX19pbXBvcnRfXyhtb2RuYW1lLCBnbG9iYWxzKCksIGxvY2FscygpLCBbJyonXSkKLSAgICAgICAgZXhjZXB0IChSZXNvdXJjZURlbmllZCwgdW5pdHRlc3QuU2tpcFRlc3QpIGFzIGRldGFpbDoKLSAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKG1vZG5hbWUpCi0gICAgICAgICAgICBpZiB2ZXJib3NpdHkgPiAxOgotICAgICAgICAgICAgICAgIHByaW50KCJTa2lwcGVkICVzOiAlcyIgJSAobW9kbmFtZSwgZGV0YWlsKSwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZm9yIG5hbWUgaW4gZGlyKG1vZCk6Ci0gICAgICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoIl8iKToKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgbyA9IGdldGF0dHIobW9kLCBuYW1lKQotICAgICAgICAgICAgaWYgdHlwZShvKSBpcyB0eXBlKHVuaXR0ZXN0LlRlc3RDYXNlKSBhbmQgaXNzdWJjbGFzcyhvLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICAgICAgICAgdGVzdHMuYXBwZW5kKG8pCi0gICAgcmV0dXJuIHNraXBwZWQsIHRlc3RzCi0KLWRlZiB1c2FnZSgpOgotICAgIHByaW50KF9fZG9jX18pCi0gICAgcmV0dXJuIDEKLQotZGVmIHRlc3Rfd2l0aF9yZWZjb3VudHMocnVubmVyLCB2ZXJib3NpdHksIHRlc3RjYXNlKToKLSAgICAiIiJSdW4gdGVzdGNhc2Ugc2V2ZXJhbCB0aW1lcywgdHJhY2tpbmcgcmVmZXJlbmNlIGNvdW50cy4iIiIKLSAgICBpbXBvcnQgZ2MKLSAgICBpbXBvcnQgY3R5cGVzCi0gICAgcHRjID0gY3R5cGVzLl9wb2ludGVyX3R5cGVfY2FjaGUuY29weSgpCi0gICAgY2ZjID0gY3R5cGVzLl9jX2Z1bmN0eXBlX2NhY2hlLmNvcHkoKQotICAgIHdmYyA9IGN0eXBlcy5fd2luX2Z1bmN0eXBlX2NhY2hlLmNvcHkoKQotCi0gICAgIyB3aGVuIHNlYXJjaGluZyBmb3IgcmVmY291bnQgbGVha3MsIHdlIGhhdmUgdG8gbWFudWFsbHkgcmVzZXQgYW55Ci0gICAgIyBjYWNoZXMgdGhhdCBjdHlwZXMgaGFzLgotICAgIGRlZiBjbGVhbnVwKCk6Ci0gICAgICAgIGN0eXBlcy5fcG9pbnRlcl90eXBlX2NhY2hlID0gcHRjLmNvcHkoKQotICAgICAgICBjdHlwZXMuX2NfZnVuY3R5cGVfY2FjaGUgPSBjZmMuY29weSgpCi0gICAgICAgIGN0eXBlcy5fd2luX2Z1bmN0eXBlX2NhY2hlID0gd2ZjLmNvcHkoKQotICAgICAgICBnYy5jb2xsZWN0KCkKLQotICAgIHRlc3QgPSB1bml0dGVzdC5tYWtlU3VpdGUodGVzdGNhc2UpCi0gICAgZm9yIGkgaW4gcmFuZ2UoNSk6Ci0gICAgICAgIHJjID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBydW5uZXIucnVuKHRlc3QpCi0gICAgICAgIGNsZWFudXAoKQotICAgIENPVU5UID0gNQotICAgIHJlZmNvdW50cyA9IFtOb25lXSAqIENPVU5UCi0gICAgZm9yIGkgaW4gcmFuZ2UoQ09VTlQpOgotICAgICAgICByYyA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcnVubmVyLnJ1bih0ZXN0KQotICAgICAgICBjbGVhbnVwKCkKLSAgICAgICAgcmVmY291bnRzW2ldID0gc3lzLmdldHRvdGFscmVmY291bnQoKSAtIHJjCi0gICAgaWYgZmlsdGVyKE5vbmUsIHJlZmNvdW50cyk6Ci0gICAgICAgIHByaW50KCIlcyBsZWFrczpcblx0IiAlIHRlc3RjYXNlLCByZWZjb3VudHMpCi0gICAgZWxpZiB2ZXJib3NpdHk6Ci0gICAgICAgIHByaW50KCIlczogb2suIiAlIHRlc3RjYXNlKQotCi1jbGFzcyBUZXN0UnVubmVyKHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKToKLSAgICBkZWYgcnVuKHNlbGYsIHRlc3QsIHNraXBwZWQpOgotICAgICAgICAiUnVuIHRoZSBnaXZlbiB0ZXN0IGNhc2Ugb3IgdGVzdCBzdWl0ZS4iCi0gICAgICAgICMgU2FtZSBhcyB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lci5ydW4sIGV4Y2VwdCB0aGF0IGl0IHJlcG9ydHMKLSAgICAgICAgIyBza2lwcGVkIHRlc3RzLgotICAgICAgICByZXN1bHQgPSBzZWxmLl9tYWtlUmVzdWx0KCkKLSAgICAgICAgc3RhcnRUaW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgdGVzdChyZXN1bHQpCi0gICAgICAgIHN0b3BUaW1lID0gdGltZS50aW1lKCkKLSAgICAgICAgdGltZVRha2VuID0gc3RvcFRpbWUgLSBzdGFydFRpbWUKLSAgICAgICAgcmVzdWx0LnByaW50RXJyb3JzKCkKLSAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbihyZXN1bHQuc2VwYXJhdG9yMikKLSAgICAgICAgcnVuID0gcmVzdWx0LnRlc3RzUnVuCi0gICAgICAgIGlmIF91bmF2YWlsOiAjc2tpcHBlZDoKLSAgICAgICAgICAgIHJlcXVlc3RlZCA9IGxpc3QoX3VuYXZhaWwua2V5cygpKQotICAgICAgICAgICAgcmVxdWVzdGVkLnNvcnQoKQotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiUmFuICVkIHRlc3QlcyBpbiAlLjNmcyAoJXMgbW9kdWxlJXMgc2tpcHBlZCkiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJ1biwgcnVuICE9IDEgYW5kICJzIiBvciAiIiwgdGltZVRha2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNraXBwZWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHNraXBwZWQpICE9IDEgYW5kICJzIiBvciAiIikpCi0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCJVbmF2YWlsYWJsZSByZXNvdXJjZXM6ICVzIiAlICIsICIuam9pbihyZXF1ZXN0ZWQpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiUmFuICVkIHRlc3QlcyBpbiAlLjNmcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnVuLCBydW4gIT0gMSBhbmQgInMiIG9yICIiLCB0aW1lVGFrZW4pKQotICAgICAgICBzZWxmLnN0cmVhbS53cml0ZWxuKCkKLSAgICAgICAgaWYgbm90IHJlc3VsdC53YXNTdWNjZXNzZnVsKCk6Ci0gICAgICAgICAgICBzZWxmLnN0cmVhbS53cml0ZSgiRkFJTEVEICgiKQotICAgICAgICAgICAgZmFpbGVkLCBlcnJvcmVkID0gbWFwKGxlbiwgKHJlc3VsdC5mYWlsdXJlcywgcmVzdWx0LmVycm9ycykpCi0gICAgICAgICAgICBpZiBmYWlsZWQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoImZhaWx1cmVzPSVkIiAlIGZhaWxlZCkKLSAgICAgICAgICAgIGlmIGVycm9yZWQ6Ci0gICAgICAgICAgICAgICAgaWYgZmFpbGVkOiBzZWxmLnN0cmVhbS53cml0ZSgiLCAiKQotICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlKCJlcnJvcnM9JWQiICUgZXJyb3JlZCkKLSAgICAgICAgICAgIHNlbGYuc3RyZWFtLndyaXRlbG4oIikiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGVsbigiT0siKQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0KLQotZGVmIG1haW4oKnBhY2thZ2VzKToKLSAgICB0cnk6Ci0gICAgICAgIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgInJxdnU6eDoiKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3I6Ci0gICAgICAgIHJldHVybiB1c2FnZSgpCi0KLSAgICB2ZXJib3NpdHkgPSAxCi0gICAgc2VhcmNoX2xlYWtzID0gRmFsc2UKLSAgICBleGNsdWRlID0gW10KLSAgICBmb3IgZmxhZywgdmFsdWUgaW4gb3B0czoKLSAgICAgICAgaWYgZmxhZyA9PSAiLXEiOgotICAgICAgICAgICAgdmVyYm9zaXR5IC09IDEKLSAgICAgICAgZWxpZiBmbGFnID09ICItdiI6Ci0gICAgICAgICAgICB2ZXJib3NpdHkgKz0gMQotICAgICAgICBlbGlmIGZsYWcgPT0gIi1yIjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzeXMuZ2V0dG90YWxyZWZjb3VudAotICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgIHByaW50KCItciBmbGFnIHJlcXVpcmVzIFB5dGhvbiBkZWJ1ZyBidWlsZCIsIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgICAgIHNlYXJjaF9sZWFrcyA9IFRydWUKLSAgICAgICAgZWxpZiBmbGFnID09ICItdSI6Ci0gICAgICAgICAgICB1c2VfcmVzb3VyY2VzLmV4dGVuZCh2YWx1ZS5zcGxpdCgiLCIpKQotICAgICAgICBlbGlmIGZsYWcgPT0gIi14IjoKLSAgICAgICAgICAgIGV4Y2x1ZGUuZXh0ZW5kKHZhbHVlLnNwbGl0KCIsIikpCi0KLSAgICBtYXNrID0gInRlc3RfKi5weSIKLSAgICBpZiBhcmdzOgotICAgICAgICBtYXNrID0gYXJnc1swXQotCi0gICAgZm9yIHBhY2thZ2UgaW4gcGFja2FnZXM6Ci0gICAgICAgIHJ1bl90ZXN0cyhwYWNrYWdlLCBtYXNrLCB2ZXJib3NpdHksIHNlYXJjaF9sZWFrcywgZXhjbHVkZSkKLQotCi1kZWYgcnVuX3Rlc3RzKHBhY2thZ2UsIG1hc2ssIHZlcmJvc2l0eSwgc2VhcmNoX2xlYWtzLCBleGNsdWRlKToKLSAgICBza2lwcGVkLCB0ZXN0Y2FzZXMgPSBnZXRfdGVzdHMocGFja2FnZSwgbWFzaywgdmVyYm9zaXR5LCBleGNsdWRlKQotICAgIHJ1bm5lciA9IFRlc3RSdW5uZXIodmVyYm9zaXR5PXZlcmJvc2l0eSkKLQotICAgIHN1aXRlcyA9IFt1bml0dGVzdC5tYWtlU3VpdGUobykgZm9yIG8gaW4gdGVzdGNhc2VzXQotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKHN1aXRlcykKLSAgICByZXN1bHQgPSBydW5uZXIucnVuKHN1aXRlLCBza2lwcGVkKQotCi0gICAgaWYgc2VhcmNoX2xlYWtzOgotICAgICAgICAjIGh1bnQgZm9yIHJlZmNvdW50IGxlYWtzCi0gICAgICAgIHJ1bm5lciA9IEJhc2ljVGVzdFJ1bm5lcigpCi0gICAgICAgIGZvciB0IGluIHRlc3RjYXNlczoKLSAgICAgICAgICAgIHRlc3Rfd2l0aF9yZWZjb3VudHMocnVubmVyLCB2ZXJib3NpdHksIHQpCi0KLSAgICByZXR1cm4gYm9vbChyZXN1bHQuZXJyb3JzKQotCi1jbGFzcyBCYXNpY1Rlc3RSdW5uZXI6Ci0gICAgZGVmIHJ1bihzZWxmLCB0ZXN0KToKLSAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCi0gICAgICAgIHRlc3QocmVzdWx0KQotICAgICAgICByZXR1cm4gcmVzdWx0CitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIHN1cHBvcnQubG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L19fbWFpbl9fLnB5IGIvTGliL2N0eXBlcy90ZXN0L19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmE5ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvY3R5cGVzL3Rlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvcnVudGVzdHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvcnVudGVzdHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3YTJiMjYuLjAwMDAwMDAKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3J1bnRlc3RzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIiIiVXNhZ2U6IHJ1bnRlc3RzLnB5IFstcV0gWy1yXSBbLXZdIFstdSByZXNvdXJjZXNdIFttYXNrXQotCi1SdW4gYWxsIHRlc3RzIGZvdW5kIGluIHRoaXMgZGlyZWN0b3J5LCBhbmQgcHJpbnQgYSBzdW1tYXJ5IG9mIHRoZSByZXN1bHRzLgotQ29tbWFuZCBsaW5lIGZsYWdzOgotICAtcSAgICAgcXVpZXQgbW9kZTogZG9uJ3QgcHJpbnQgYW55dGhpbmcgd2hpbGUgdGhlIHRlc3RzIGFyZSBydW5uaW5nCi0gIC1yICAgICBydW4gdGVzdHMgcmVwZWF0ZWRseSwgbG9vayBmb3IgcmVmY291bnQgbGVha3MKLSAgLXU8cmVzb3VyY2VzPgotICAgICAgICAgQWRkIHJlc291cmNlcyB0byB0aGUgbGl0cyBvZiBhbGxvd2VkIHJlc291cmNlcy4gJyonIGFsbG93cyBhbGwKLSAgICAgICAgIHJlc291cmNlcy4KLSAgLXYgICAgIHZlcmJvc2UgbW9kZTogcHJpbnQgdGhlIHRlc3QgY3VycmVudGx5IGV4ZWN1dGVkCi0gIC14PHRlc3QxWyx0ZXN0Mi4uLl0+Ci0gICAgICAgICBFeGNsdWRlIHNwZWNpZmllZCB0ZXN0cy4KLSAgbWFzayAgIG1hc2sgdG8gc2VsZWN0IGZpbGVuYW1lcyBjb250YWluaW5nIHRlc3RjYXNlcywgd2lsZGNhcmRzIGFsbG93ZWQKLSIiIgotaW1wb3J0IHN5cwotaW1wb3J0IGN0eXBlcy50ZXN0Ci0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgc3lzLmV4aXQoY3R5cGVzLnRlc3QubWFpbihjdHlwZXMudGVzdCkpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hcnJheXMucHkKaW5kZXggOTliOTdhYS4uOGNhNzdlMCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXJyYXlzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FycmF5cy5weQpAQCAtMSw2ICsxLDggQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIAorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKKwogZm9ybWF0cyA9ICJiQmhIaUlsTHFRZmQiCiAKIGZvcm1hdHMgPSBjX2J5dGUsIGNfdWJ5dGUsIGNfc2hvcnQsIGNfdXNob3J0LCBjX2ludCwgY191aW50LCBcCkBAIC05OCwyMCArMTAwLDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbMTo0OjJdLCBiIm8iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6LnZhbHVlLCBiImZvbyIpCiAKLSAgICB0cnk6Ci0gICAgICAgIGNyZWF0ZV91bmljb2RlX2J1ZmZlcgotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBkZWYgdGVzdF9mcm9tX2FkZHJlc3NXKHNlbGYpOgotICAgICAgICAgICAgcCA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigiZm9vIikKLSAgICAgICAgICAgIHN6ID0gKGNfd2NoYXIgKiAzKS5mcm9tX2FkZHJlc3MoYWRkcmVzc29mKHApKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6XSwgImZvbyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6XSwgImZvbyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6Wzo6LTFdLCAib29mIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjozXSwgImYiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzelsxOjQ6Ml0sICJvIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3oudmFsdWUsICJmb28iKQorICAgIEBuZWVkX3N5bWJvbCgnY3JlYXRlX3VuaWNvZGVfYnVmZmVyJykKKyAgICBkZWYgdGVzdF9mcm9tX2FkZHJlc3NXKHNlbGYpOgorICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJmb28iKQorICAgICAgICBzeiA9IChjX3djaGFyICogMykuZnJvbV9hZGRyZXNzKGFkZHJlc3NvZihwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6XSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjpdLCAiZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzels6Oi0xXSwgIm9vZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3pbOjozXSwgImYiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6WzE6NDoyXSwgIm8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN6LnZhbHVlLCAiZm9vIikKIAogICAgIGRlZiB0ZXN0X2NhY2hlKHNlbGYpOgogICAgICAgICAjIEFycmF5IHR5cGVzIGFyZSBjYWNoZWQgaW50ZXJuYWxseSBpbiB0aGUgX2N0eXBlcyBleHRlbnNpb24sCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9hc19wYXJhbWV0ZXIucHkKaW5kZXggNDM3MDNlMy4uOTQ4YjQ2MyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYXNfcGFyYW1ldGVyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2FzX3BhcmFtZXRlci5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBpbXBvcnQgX2N0eXBlc190ZXN0CiAKIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQpAQCAtMTcsMTEgKzE4LDggQEAKICAgICBkZWYgd3JhcChzZWxmLCBwYXJhbSk6CiAgICAgICAgIHJldHVybiBwYXJhbQogCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKICAgICBkZWYgdGVzdF93Y2hhcl9wYXJtKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjX3djaGFyCi0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfd2NoYXIsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICByZXN1bHQgPSBmKHNlbGYud3JhcCgxKSwgc2VsZi53cmFwKCJ4IiksIHNlbGYud3JhcCgzKSwgc2VsZi53cmFwKDQpLCBzZWxmLndyYXAoNS4wKSwgc2VsZi53cmFwKDYuMCkpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9iaXRmaWVsZHMucHkKaW5kZXggNzdkZTYwNi4uYjM5ZDgyYyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYml0ZmllbGRzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2JpdGZpZWxkcy5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIApAQCAtMTI3LDIwICsxMjgsMTggQEAKICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX2NoYXIsIDEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKFR5cGVFcnJvciwgJ2JpdCBmaWVsZHMgbm90IGFsbG93ZWQgZm9yIHR5cGUgY19jaGFyJykpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY193Y2hhcgotICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX3djaGFyLCAxKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoVHlwZUVycm9yLCAnYml0IGZpZWxkcyBub3QgYWxsb3dlZCBmb3IgdHlwZSBjX3djaGFyJykpCi0KICAgICAgICAgY2xhc3MgRHVtbXkoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gW10KIAogICAgICAgICByZXN1bHQgPSBzZWxmLmZhaWxfZmllbGRzKCgiYSIsIER1bW15LCAxKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIER1bW15JykpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQorICAgIGRlZiB0ZXN0X2Nfd2NoYXIoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuZmFpbF9maWVsZHMoKCJhIiwgY193Y2hhciwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LAorICAgICAgICAgICAgICAgIChUeXBlRXJyb3IsICdiaXQgZmllbGRzIG5vdCBhbGxvd2VkIGZvciB0eXBlIGNfd2NoYXInKSkKKwogICAgIGRlZiB0ZXN0X3NpbmdsZV9iaXRmaWVsZF9zaXplKHNlbGYpOgogICAgICAgICBmb3IgY190eXAgaW4gaW50X3R5cGVzOgogICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mYWlsX2ZpZWxkcygoImEiLCBjX3R5cCwgLTEpKQpAQCAtMjQwLDcgKzIzOSw3IEBACiAgICAgICAgICAgICBfYW5vbnltb3VzXyA9IFsiXyJdCiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIl8iLCBYKV0KIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoY3R5cGVzLCAiY191aW50MzIiKSwgImNfaW50MzIgaXMgcmVxdWlyZWQiKQorICAgIEBuZWVkX3N5bWJvbCgnY191aW50MzInKQogICAgIGRlZiB0ZXN0X3VpbnQzMihzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgogICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY191aW50MzIsIDMyKV0KQEAgLTI1MCw3ICsyNDksNyBAQAogICAgICAgICB4LmEgPSAweEZEQ0JBOTg3CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAweEZEQ0JBOTg3KQogCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjdHlwZXMsICJjX3VpbnQ2NCIpLCAiY19pbnQ2NCBpcyByZXF1aXJlZCIpCisgICAgQG5lZWRfc3ltYm9sKCdjX3VpbnQ2NCcpCiAgICAgZGVmIHRlc3RfdWludDY0KHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoImEiLCBjX3VpbnQ2NCwgNjQpXQpAQCAtMjYwLDUgKzI1OSwzMyBAQAogICAgICAgICB4LmEgPSAweEZFRENCQTk4NzY1NDMyMTEKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIDB4RkVEQ0JBOTg3NjU0MzIxMSkKIAorICAgIEBuZWVkX3N5bWJvbCgnY191aW50MzInKQorICAgIGRlZiB0ZXN0X3VpbnQzMl9zd2FwX2xpdHRsZV9lbmRpYW4oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIzMzE5CisgICAgICAgIGNsYXNzIExpdHRsZShMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY191aW50MzIsIDI0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYiIsIGNfdWludDMyLCA0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgiYyIsIGNfdWludDMyLCA0KV0KKyAgICAgICAgYiA9IGJ5dGVhcnJheSg0KQorICAgICAgICB4ID0gTGl0dGxlLmZyb21fYnVmZmVyKGIpCisgICAgICAgIHguYSA9IDB4YWJjZGVmCisgICAgICAgIHguYiA9IDEKKyAgICAgICAgeC5jID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIsIGInXHhlZlx4Y2RceGFiXHgyMScpCisKKyAgICBAbmVlZF9zeW1ib2woJ2NfdWludDMyJykKKyAgICBkZWYgdGVzdF91aW50MzJfc3dhcF9iaWdfZW5kaWFuKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMzMxOQorICAgICAgICBjbGFzcyBCaWcoQmlnRW5kaWFuU3RydWN0dXJlKToKKyAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfdWludDMyLCAyNCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX3VpbnQzMiwgNCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImMiLCBjX3VpbnQzMiwgNCldCisgICAgICAgIGIgPSBieXRlYXJyYXkoNCkKKyAgICAgICAgeCA9IEJpZy5mcm9tX2J1ZmZlcihiKQorICAgICAgICB4LmEgPSAweGFiY2RlZgorICAgICAgICB4LmIgPSAxCisgICAgICAgIHguYyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBiJ1x4YWJceGNkXHhlZlx4MTInKQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J1ZmZlcnMucHkKaW5kZXggMGQxMmY0Ny4uMTY2ZmFhZiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnVmZmVycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9idWZmZXJzLnB5CkBAIC0xLDQgKzEsNSBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBpbXBvcnQgdW5pdHRlc3QKIAogY2xhc3MgU3RyaW5nQnVmZmVyVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjAsNDMgKzIxLDQ0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCBiImFjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sIGIiYSIpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjcmVhdGVfc3RyaW5nX2J1ZmZlciwgImFiYyIpCisKICAgICBkZWYgdGVzdF9idWZmZXJfaW50ZXJmYWNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihieXRlYXJyYXkoY3JlYXRlX3N0cmluZ19idWZmZXIoMCkpKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnl0ZWFycmF5KGNyZWF0ZV9zdHJpbmdfYnVmZmVyKDEpKSksIDEpCiAKLSAgICB0cnk6Ci0gICAgICAgIGNfd2NoYXIKLSAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgZGVmIHRlc3RfdW5pY29kZV9idWZmZXIoc2VsZik6Ci0gICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKDMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDMyKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDMyICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJbMF0pLCBzdHIpCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKKyAgICBkZWYgdGVzdF91bmljb2RlX2J1ZmZlcihzZWxmKToKKyAgICAgICAgYiA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZihiKSwgMzIgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShiWzBdKSwgc3RyKQogCi0gICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJbMF0pLCBzdHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCisgICAgICAgIGIgPSBjcmVhdGVfdW5pY29kZV9idWZmZXIoImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCA0KSAjIHRyYWlsaW5nIG51bCBjaGFyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYlswXSksIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzBdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6XSwgImFiY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6LTFdLCAiXDBjYmEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzo6NV0sICJhIikKIAotICAgICAgICBkZWYgdGVzdF91bmljb2RlX2NvbnZlcnNpb24oc2VsZik6Ci0gICAgICAgICAgICBiID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGIpLCA0ICogc2l6ZW9mKGNfd2NoYXIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGJbMF0pLCBzdHIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6XSwgImFiY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6Ol0sICJhYmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjoyXSwgImFjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjVdLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3JlYXRlX3VuaWNvZGVfYnVmZmVyLCBiImFiYyIpCisKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQorICAgIGRlZiB0ZXN0X3VuaWNvZGVfY29udmVyc2lvbihzZWxmKToKKyAgICAgICAgYiA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYiksIDQpICMgdHJhaWxpbmcgbnVsIGNoYXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2YoYiksIDQgKiBzaXplb2YoY193Y2hhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShiWzBdKSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbMF0sICJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiWzpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjpdLCAiYWJjXDAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjotMV0sICJcMGNiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYls6OjJdLCAiYWMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJbOjo1XSwgImEiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlcy5weQppbmRleCBlZTQ5YzQ1Li4yMGZhMDU2IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9ieXRlcy5weQpAQCAtNiwyNyArNiw0MCBAQAogY2xhc3MgQnl0ZXNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9jX2NoYXIoc2VsZik6CiAgICAgICAgIHggPSBjX2NoYXIoYiJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX2NoYXIsICJ4IikKICAgICAgICAgeC52YWx1ZSA9IGIieSIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgeC52YWx1ZSA9ICJ5IgogICAgICAgICBjX2NoYXIuZnJvbV9wYXJhbShiIngiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfY2hhci5mcm9tX3BhcmFtLCAieCIpCiAgICAgICAgIChjX2NoYXIgKiAzKShiImEiLCBiImIiLCBiImMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfY2hhciAqIDMsICJhIiwgImIiLCAiYyIpCiAKICAgICBkZWYgdGVzdF9jX3djaGFyKHNlbGYpOgogICAgICAgICB4ID0gY193Y2hhcigieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY193Y2hhciwgYiJ4IikKICAgICAgICAgeC52YWx1ZSA9ICJ5IgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICB4LnZhbHVlID0gYiJ5IgogICAgICAgICBjX3djaGFyLmZyb21fcGFyYW0oIngiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfd2NoYXIuZnJvbV9wYXJhbSwgYiJ4IikKICAgICAgICAgKGNfd2NoYXIgKiAzKSgiYSIsICJiIiwgImMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfd2NoYXIgKiAzLCBiImEiLCBiImIiLCBiImMiKQogCiAgICAgZGVmIHRlc3RfY19jaGFyX3Aoc2VsZik6CiAgICAgICAgIGNfY2hhcl9wKGIiZm9vIGJhciIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19jaGFyX3AsICJmb28gYmFyIikKIAogICAgIGRlZiB0ZXN0X2Nfd2NoYXJfcChzZWxmKToKICAgICAgICAgY193Y2hhcl9wKCJmb28gYmFyIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3djaGFyX3AsIGIiZm9vIGJhciIpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIFgoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfY2hhciAqIDMpXQogCiAgICAgICAgIHggPSBYKGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBYLCAiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmEsIGIiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHguYSksIGJ5dGVzKQogCkBAIC0zNSwxNiArNDgsMTggQEAKICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfd2NoYXIgKiAzKV0KIAogICAgICAgICB4ID0gWCgiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBYLCBiImFiYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5hLCAiYWJjIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHguYSksIHN0cikKIAotICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgotICAgICAgICBkZWYgdGVzdF9CU1RSKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBfU2ltcGxlQ0RhdGEKLSAgICAgICAgICAgIGNsYXNzIEJTVFIoX1NpbXBsZUNEYXRhKToKLSAgICAgICAgICAgICAgICBfdHlwZV8gPSAiWCIKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCisgICAgZGVmIHRlc3RfQlNUUihzZWxmKToKKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBfU2ltcGxlQ0RhdGEKKyAgICAgICAgY2xhc3MgQlNUUihfU2ltcGxlQ0RhdGEpOgorICAgICAgICAgICAgX3R5cGVfID0gIlgiCiAKLSAgICAgICAgICAgIEJTVFIoImFiYyIpCisgICAgICAgIEJTVFIoImFiYyIpCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2J5dGVzd2FwLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKaW5kZXggNjNkZGUxMy4uNDI3YmI4YiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfYnl0ZXN3YXAucHkKQEAgLTE0LDcgKzE0LDggQEAKICMgRm9yIFN0cnVjdHVyZXMgYW5kIFVuaW9ucywgdGhlc2UgdHlwZXMgYXJlIGNyZWF0ZWQgb24gZGVtYW5kLgogCiBjbGFzcyBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgWF90ZXN0KHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9YKHNlbGYpOgogICAgICAgICBwcmludChzeXMuYnl0ZW9yZGVyLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDMyKToKICAgICAgICAgICAgIGJpdHMgPSBCSVRTKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NhbGxiYWNrcy5weQppbmRleCA0Y2E1MGI4Li44ZWFjNThmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYWxsYmFja3MucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FsbGJhY2tzLnB5CkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKIGltcG9ydCBfY3R5cGVzX3Rlc3QKIAogY2xhc3MgQ2FsbGJhY2tzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg5LDkgKzkwLDEwIEBACiAgICAgIyBkaXNhYmxlZDogd291bGQgbm93IChjb3JyZWN0bHkpIHJhaXNlIGEgUnVudGltZVdhcm5pbmcgYWJvdXQKICAgICAjIGEgbWVtb3J5IGxlYWsuICBBIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbm5vdCByZXR1cm4gYSBub24taW50ZWdyYWwKICAgICAjIEMgdHlwZSB3aXRob3V0IGNhdXNpbmcgYSBtZW1vcnkgbGVhay4KLSMjICAgIGRlZiB0ZXN0X2NoYXJfcChzZWxmKToKLSMjICAgICAgICBzZWxmLmNoZWNrX3R5cGUoY19jaGFyX3AsICJhYmMiKQotIyMgICAgICAgIHNlbGYuY2hlY2tfdHlwZShjX2NoYXJfcCwgImRlZiIpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X2NoYXJfcChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfY2hhcl9wLCAiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja190eXBlKGNfY2hhcl9wLCAiZGVmIikKIAogICAgIGRlZiB0ZXN0X3B5b2JqZWN0KHNlbGYpOgogICAgICAgICBvID0gKCkKQEAgLTE0MywxMyArMTQ1LDEyIEBACiAgICAgICAgIENGVU5DVFlQRShOb25lKShsYW1iZGEgeD1OYXN0eSgpOiBOb25lKQogCiAKLXRyeToKLSAgICBXSU5GVU5DVFlQRQotZXhjZXB0IE5hbWVFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGNsYXNzIFN0ZGNhbGxDYWxsYmFja3MoQ2FsbGJhY2tzKToKK0BuZWVkX3N5bWJvbCgnV0lORlVOQ1RZUEUnKQorY2xhc3MgU3RkY2FsbENhbGxiYWNrcyhDYWxsYmFja3MpOgorICAgIHRyeToKICAgICAgICAgZnVuY3R5cGUgPSBXSU5GVU5DVFlQRQorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgIHBhc3MKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0xNzksNyArMTgwLDcgQEAKICAgICAgICAgZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5CiAgICAgICAgIGxpYmNfcGF0aCA9IGZpbmRfbGlicmFyeSgiYyIpCiAgICAgICAgIGlmIG5vdCBsaWJjX3BhdGg6Ci0gICAgICAgICAgICByZXR1cm4gIyBjYW5ub3QgdGVzdAorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGZpbmQgbGliYycpCiAgICAgICAgIGxpYmMgPSBDRExMKGxpYmNfcGF0aCkKIAogICAgICAgICBAQ0ZVTkNUWVBFKGNfaW50LCBQT0lOVEVSKGNfaW50KSwgUE9JTlRFUihjX2ludCkpCkBAIC0xOTEsMjMgKzE5MiwxOSBAQAogICAgICAgICBsaWJjLnFzb3J0KGFycmF5LCBsZW4oYXJyYXkpLCBzaXplb2YoY19pbnQpLCBjbXBfZnVuYykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcnJheVs6XSwgWzEsIDUsIDcsIDMzLCA5OV0pCiAKLSAgICB0cnk6Ci0gICAgICAgIFdJTkZVTkNUWVBFCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X2lzc3VlXzg5NTlfYihzZWxmKToKLSAgICAgICAgICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MLCBIV05ELCBMUEFSQU0KKyAgICBAbmVlZF9zeW1ib2woJ1dJTkZVTkNUWVBFJykKKyAgICBkZWYgdGVzdF9pc3N1ZV84OTU5X2Ioc2VsZik6CisgICAgICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBCT09MLCBIV05ELCBMUEFSQU0KKyAgICAgICAgZ2xvYmFsIHdpbmRvd0NvdW50CisgICAgICAgIHdpbmRvd0NvdW50ID0gMAorCisgICAgICAgIEBXSU5GVU5DVFlQRShCT09MLCBIV05ELCBMUEFSQU0pCisgICAgICAgIGRlZiBFbnVtV2luZG93c0NhbGxiYWNrRnVuYyhod25kLCBsUGFyYW0pOgogICAgICAgICAgICAgZ2xvYmFsIHdpbmRvd0NvdW50Ci0gICAgICAgICAgICB3aW5kb3dDb3VudCA9IDAKKyAgICAgICAgICAgIHdpbmRvd0NvdW50ICs9IDEKKyAgICAgICAgICAgIHJldHVybiBUcnVlICNBbGxvdyB3aW5kb3dzIHRvIGtlZXAgZW51bWVyYXRpbmcKIAotICAgICAgICAgICAgQFdJTkZVTkNUWVBFKEJPT0wsIEhXTkQsIExQQVJBTSkKLSAgICAgICAgICAgIGRlZiBFbnVtV2luZG93c0NhbGxiYWNrRnVuYyhod25kLCBsUGFyYW0pOgotICAgICAgICAgICAgICAgIGdsb2JhbCB3aW5kb3dDb3VudAotICAgICAgICAgICAgICAgIHdpbmRvd0NvdW50ICs9IDEKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZSAjQWxsb3cgd2luZG93cyB0byBrZWVwIGVudW1lcmF0aW5nCi0KLSAgICAgICAgICAgIHdpbmRsbC51c2VyMzIuRW51bVdpbmRvd3MoRW51bVdpbmRvd3NDYWxsYmFja0Z1bmMsIDApCisgICAgICAgIHdpbmRsbC51c2VyMzIuRW51bVdpbmRvd3MoRW51bVdpbmRvd3NDYWxsYmFja0Z1bmMsIDApCiAKICAgICBkZWYgdGVzdF9jYWxsYmFja19yZWdpc3Rlcl9pbnQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzgyNzU6IGJ1Z2d5IGhhbmRsaW5nIG9mIGNhbGxiYWNrIGFyZ3MgdW5kZXIgV2luNjQKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jYXN0LnB5CmluZGV4IDMyNDk2ZjYuLjE4N2QyYmQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Nhc3QucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2FzdC5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiAKQEAgLTc1LDE1ICs3NiwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhc3QoY2FzdChzLCBjX3ZvaWRfcCksIGNfY2hhcl9wKS52YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJoaWhvIikKIAotICAgIHRyeToKLSAgICAgICAgY193Y2hhcl9wCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X3djaGFyX3Aoc2VsZik6Ci0gICAgICAgICAgICBzID0gY193Y2hhcl9wKCJoaWhvIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChjYXN0KHMsIGNfdm9pZF9wKSwgY193Y2hhcl9wKS52YWx1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoaWhvIikKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXJfcCcpCisgICAgZGVmIHRlc3Rfd2NoYXJfcChzZWxmKToKKyAgICAgICAgcyA9IGNfd2NoYXJfcCgiaGlobyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FzdChjYXN0KHMsIGNfdm9pZF9wKSwgY193Y2hhcl9wKS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhpaG8iKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2Z1bmNzLnB5CmluZGV4IGEwODA0OTYuLmFjMjI0MGYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2NmdW5jcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jZnVuY3MucHkKQEAgLTMsNiArMyw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiAKIGltcG9ydCBfY3R5cGVzX3Rlc3QKIApAQCAtMTkzLDcgKzE5NCw3IEBACiB0cnk6CiAgICAgV2luRExMCiBleGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKKyAgICBkZWYgc3RkY2FsbF9kbGwoKl8pOiBwYXNzCiBlbHNlOgogICAgIGNsYXNzIHN0ZGNhbGxfZGxsKFdpbkRMTCk6CiAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKQEAgLTIwMyw5ICsyMDQsOSBAQAogICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCBmdW5jKQogICAgICAgICAgICAgcmV0dXJuIGZ1bmMKIAotICAgIGNsYXNzIHN0ZGNhbGxDRnVuY3Rpb25zKENGdW5jdGlvbnMpOgotICAgICAgICBfZGxsID0gc3RkY2FsbF9kbGwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQotICAgICAgICBwYXNzCitAbmVlZF9zeW1ib2woJ1dpbkRMTCcpCitjbGFzcyBzdGRjYWxsQ0Z1bmN0aW9ucyhDRnVuY3Rpb25zKToKKyAgICBfZGxsID0gc3RkY2FsbF9kbGwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfY2hlY2tyZXR2YWwucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQppbmRleCAwMWNjYzU3Li5lOTU2N2RjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9jaGVja3JldHZhbC5weQpAQCAtMSw2ICsxLDcgQEAKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKIAogY2xhc3MgQ0hFQ0tFRChjX2ludCk6CiAgICAgZGVmIF9jaGVja19yZXR2YWxfKHZhbHVlKToKQEAgLTI1LDE1ICsyNiwxMSBAQAogICAgICAgICBkZWwgZGxsLl90ZXN0ZnVuY19wX3AucmVzdHlwZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDQyLCBkbGwuX3Rlc3RmdW5jX3BfcCg0MikpCiAKLSAgICB0cnk6Ci0gICAgICAgIG9sZWRsbAotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBkZWYgdGVzdF9vbGVkbGwoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlZGxsLm9sZWF1dDMyLkNyZWF0ZVR5cGVMaWIyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5vbmUsIE5vbmUpCisgICAgQG5lZWRfc3ltYm9sKCdvbGVkbGwnKQorICAgIGRlZiB0ZXN0X29sZWRsbChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZWRsbC5vbGVhdXQzMi5DcmVhdGVUeXBlTGliMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5vbmUsIE5vbmUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9lcnJjaGVjay5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2VycmNoZWNrLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDkxM2Y5Li4wMDAwMDAwCi0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2VycmNoZWNrLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotaW1wb3J0IHN5cwotZnJvbSBjdHlwZXMgaW1wb3J0ICoKLQotIyNjbGFzcyBITU9EVUxFKFN0cnVjdHVyZSk6Ci0jIyAgICBfZmllbGRzXyA9IFsoInZhbHVlIiwgY192b2lkX3ApXQotCi0jIyAgICBkZWYgX19yZXByX18oc2VsZik6Ci0jIyAgICAgICAgcmV0dXJuICI8SE1PRFVMRSAlcz4iICUgc2VsZi52YWx1ZQotCi0jI3dpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBLnJlc3R5cGUgPSBITU9EVUxFCi0KLSMjcHJpbnQgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoInB5dGhvbjIzLmRsbCIpCi0jI3ByaW50IGhleChzeXMuZGxsaGFuZGxlKQotCi0jI2RlZiBub256ZXJvKGhhbmRsZSk6Ci0jIyAgICByZXR1cm4gKEdldExhc3RFcnJvcigpLCBoYW5kbGUpCi0KLSMjd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEuZXJyY2hlY2sgPSBub256ZXJvCi0jI3ByaW50IHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKCJzcGFtIikKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9maW5kLnB5CmluZGV4IGM1NGI2OWIuLmU2YmMxOWQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ZpbmQucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZmluZC5weQpAQCAtMSw4MiArMSw5MSBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZXN0LnN1cHBvcnQKIGZyb20gY3R5cGVzIGltcG9ydCAqCiBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKLWZyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKLQotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgbGliX2dsID0gZmluZF9saWJyYXJ5KCJPcGVuR0wzMiIpCi0gICAgbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiR2x1MzIiKQotICAgIGxpYl9nbGUgPSBOb25lCi1lbGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKLSAgICBsaWJfZ2wgPSBsaWJfZ2x1ID0gZmluZF9saWJyYXJ5KCJPcGVuR0wiKQotICAgIGxpYl9nbGUgPSBOb25lCi1lbHNlOgotICAgIGxpYl9nbCA9IGZpbmRfbGlicmFyeSgiR0wiKQotICAgIGxpYl9nbHUgPSBmaW5kX2xpYnJhcnkoIkdMVSIpCi0gICAgbGliX2dsZSA9IGZpbmRfbGlicmFyeSgiZ2xlIikKLQotIyMgcHJpbnQsIGZvciBkZWJ1Z2dpbmcKLWlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInByaW50aW5nIik6Ci0gICAgaWYgbGliX2dsIG9yIGxpYl9nbHUgb3IgbGliX2dsZToKLSAgICAgICAgcHJpbnQoIk9wZW5HTCBsaWJyYXJpZXM6IikKLSAgICAgICAgZm9yIGl0ZW0gaW4gKCgiR0wiLCBsaWJfZ2wpLAotICAgICAgICAgICAgICAgICAgICAgKCJHTFUiLCBsaWJfZ2x1KSwKLSAgICAgICAgICAgICAgICAgICAgICgiZ2xlIiwgbGliX2dsZSkpOgotICAgICAgICAgICAgcHJpbnQoIlx0IiwgaXRlbSkKLQogCiAjIE9uIHNvbWUgc3lzdGVtcywgbG9hZGluZyB0aGUgT3BlbkdMIGxpYnJhcmllcyBuZWVkcyB0aGUgUlRMRF9HTE9CQUwgbW9kZS4KIGNsYXNzIFRlc3RfT3BlbkdMX2xpYnModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5nbCA9IHNlbGYuZ2x1ID0gc2VsZi5nbGUgPSBOb25lCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgbGliX2dsID0gbGliX2dsdSA9IGxpYl9nbGUgPSBOb25lCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgbGliX2dsID0gZmluZF9saWJyYXJ5KCJPcGVuR0wzMiIpCisgICAgICAgICAgICBsaWJfZ2x1ID0gZmluZF9saWJyYXJ5KCJHbHUzMiIpCisgICAgICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgorICAgICAgICAgICAgbGliX2dsID0gbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiT3BlbkdMIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpYl9nbCA9IGZpbmRfbGlicmFyeSgiR0wiKQorICAgICAgICAgICAgbGliX2dsdSA9IGZpbmRfbGlicmFyeSgiR0xVIikKKyAgICAgICAgICAgIGxpYl9nbGUgPSBmaW5kX2xpYnJhcnkoImdsZSIpCisKKyAgICAgICAgIyMgcHJpbnQsIGZvciBkZWJ1Z2dpbmcKKyAgICAgICAgaWYgdGVzdC5zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgiT3BlbkdMIGxpYnJhcmllczoiKQorICAgICAgICAgICAgZm9yIGl0ZW0gaW4gKCgiR0wiLCBsaWJfZ2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgiR0xVIiwgbGliX2dsdSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCJnbGUiLCBsaWJfZ2xlKSk6CisgICAgICAgICAgICAgICAgcHJpbnQoIlx0IiwgaXRlbSkKKworICAgICAgICBjbHMuZ2wgPSBjbHMuZ2x1ID0gY2xzLmdsZSA9IE5vbmUKICAgICAgICAgaWYgbGliX2dsOgotICAgICAgICAgICAgc2VsZi5nbCA9IENETEwobGliX2dsLCBtb2RlPVJUTERfR0xPQkFMKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNscy5nbCA9IENETEwobGliX2dsLCBtb2RlPVJUTERfR0xPQkFMKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBsaWJfZ2x1OgotICAgICAgICAgICAgc2VsZi5nbHUgPSBDRExMKGxpYl9nbHUsIFJUTERfR0xPQkFMKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGNscy5nbHUgPSBDRExMKGxpYl9nbHUsIFJUTERfR0xPQkFMKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBpZiBsaWJfZ2xlOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuZ2xlID0gQ0RMTChsaWJfZ2xlKQorICAgICAgICAgICAgICAgIGNscy5nbGUgPSBDRExMKGxpYl9nbGUpCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICBpZiBsaWJfZ2w6Ci0gICAgICAgIGRlZiB0ZXN0X2dsKHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5nbDoKLSAgICAgICAgICAgICAgICBzZWxmLmdsLmdsQ2xlYXJJbmRleAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGNscy5nbCA9IGNscy5nbHUgPSBjbHMuZ2xlID0gTm9uZQogCi0gICAgaWYgbGliX2dsdToKLSAgICAgICAgZGVmIHRlc3RfZ2x1KHNlbGYpOgotICAgICAgICAgICAgaWYgc2VsZi5nbHU6Ci0gICAgICAgICAgICAgICAgc2VsZi5nbHUuZ2x1QmVnaW5DdXJ2ZQorICAgIGRlZiB0ZXN0X2dsKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdsIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdsaWJfZ2wgbm90IGF2YWlsYWJsZScpCisgICAgICAgIHNlbGYuZ2wuZ2xDbGVhckluZGV4CiAKLSAgICBpZiBsaWJfZ2xlOgotICAgICAgICBkZWYgdGVzdF9nbGUoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLmdsZToKLSAgICAgICAgICAgICAgICBzZWxmLmdsZS5nbGVHZXRKb2luU3R5bGUKKyAgICBkZWYgdGVzdF9nbHUoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZ2x1IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdsaWJfZ2x1IG5vdCBhdmFpbGFibGUnKQorICAgICAgICBzZWxmLmdsdS5nbHVCZWdpbkN1cnZlCiAKLSMjaWYgb3MubmFtZSA9PSAicG9zaXgiIGFuZCBzeXMucGxhdGZvcm0gIT0gImRhcndpbiI6CisgICAgZGVmIHRlc3RfZ2xlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmdsZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbGliX2dsZSBub3QgYXZhaWxhYmxlJykKKyAgICAgICAgc2VsZi5nbGUuZ2xlR2V0Sm9pblN0eWxlCiAKLSMjICAgICMgT24gcGxhdGZvcm1zIHdoZXJlIHRoZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCBpcyAnLnNvJywKLSMjICAgICMgYXQgbGVhc3Qgc29tZSBsaWJyYXJpZXMgY2FuIGJlIGxvYWRlZCBhcyBhdHRyaWJ1dGVzIG9mIHRoZSBjZGxsCi0jIyAgICAjIG9iamVjdCwgc2luY2UgY3R5cGVzIG5vdyB0cmllcyBsb2FkaW5nIHRoZSBsaWIgYWdhaW4KLSMjICAgICMgd2l0aCAnLnNvJyBhcHBlbmRlZCBvZiB0aGUgZmlyc3QgdHJ5IGZhaWxzLgotIyMgICAgIwotIyMgICAgIyBXb24ndCB3b3JrIGZvciBsaWJjLCB1bmZvcnR1bmF0ZWx5LiAgT1RPSCwgaXQgaXNuJ3QKLSMjICAgICMgbmVlZGVkIGZvciBsaWJjIHNpbmNlIHRoaXMgaXMgYWxyZWFkeSBtYXBwZWQgaW50byB0aGUgY3VycmVudAotIyMgICAgIyBwcm9jZXNzICg/KQotIyMgICAgIwotIyMgICAgIyBPbiBNQUMgT1NYLCBpdCB3b24ndCB3b3JrIGVpdGhlciwgYmVjYXVzZSBkbG9wZW4oKSBuZWVkcyBhIGZ1bGwgcGF0aCwKLSMjICAgICMgYW5kIHRoZSBkZWZhdWx0IHN1ZmZpeCBpcyBlaXRoZXIgbm9uZSBvciAnLmR5bGliJy4KLQotIyMgICAgY2xhc3MgTG9hZExpYnModW5pdHRlc3QuVGVzdENhc2UpOgotIyMgICAgICAgIGRlZiB0ZXN0X2xpYm0oc2VsZik6Ci0jIyAgICAgICAgICAgIGltcG9ydCBtYXRoCi0jIyAgICAgICAgICAgIGxpYm0gPSBjZGxsLmxpYm0KLSMjICAgICAgICAgICAgc3FydCA9IGxpYm0uc3FydAotIyMgICAgICAgICAgICBzcXJ0LmFyZ3R5cGVzID0gKGNfZG91YmxlLCkKLSMjICAgICAgICAgICAgc3FydC5yZXN0eXBlID0gY19kb3VibGUKLSMjICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXJ0KDIpLCBtYXRoLnNxcnQoMikpCisjIE9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBzdWZmaXggaXMgJy5zbycsCisjIGF0IGxlYXN0IHNvbWUgbGlicmFyaWVzIGNhbiBiZSBsb2FkZWQgYXMgYXR0cmlidXRlcyBvZiB0aGUgY2RsbAorIyBvYmplY3QsIHNpbmNlIGN0eXBlcyBub3cgdHJpZXMgbG9hZGluZyB0aGUgbGliIGFnYWluCisjIHdpdGggJy5zbycgYXBwZW5kZWQgb2YgdGhlIGZpcnN0IHRyeSBmYWlscy4KKyMKKyMgV29uJ3Qgd29yayBmb3IgbGliYywgdW5mb3J0dW5hdGVseS4gIE9UT0gsIGl0IGlzbid0CisjIG5lZWRlZCBmb3IgbGliYyBzaW5jZSB0aGlzIGlzIGFscmVhZHkgbWFwcGVkIGludG8gdGhlIGN1cnJlbnQKKyMgcHJvY2VzcyAoPykKKyMKKyMgT24gTUFDIE9TWCwgaXQgd29uJ3Qgd29yayBlaXRoZXIsIGJlY2F1c2UgZGxvcGVuKCkgbmVlZHMgYSBmdWxsIHBhdGgsCisjIGFuZCB0aGUgZGVmYXVsdCBzdWZmaXggaXMgZWl0aGVyIG5vbmUgb3IgJy5keWxpYicuCitAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCitAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lPT0icG9zaXgiIGFuZCBzeXMucGxhdGZvcm0gIT0gImRhcndpbiIsCisgICAgICAgICAgICAgICAgICAgICAndGVzdCBub3Qgc3VpdGFibGUgZm9yIHRoaXMgcGxhdGZvcm0nKQorY2xhc3MgTG9hZExpYnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2xpYm0oc2VsZik6CisgICAgICAgIGltcG9ydCBtYXRoCisgICAgICAgIGxpYm0gPSBjZGxsLmxpYm0KKyAgICAgICAgc3FydCA9IGxpYm0uc3FydAorICAgICAgICBzcXJ0LmFyZ3R5cGVzID0gKGNfZG91YmxlLCkKKyAgICAgICAgc3FydC5yZXN0eXBlID0gY19kb3VibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXJ0KDIpLCBtYXRoLnNxcnQoMikpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mcm9tYnVmZmVyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnJvbWJ1ZmZlci5weQppbmRleCBmZmIyN2E2Li44Njk1NGZlIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mcm9tYnVmZmVyLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Zyb21idWZmZXIucHkKQEAgLTEwLDcgKzEwLDcgQEAKICAgICAgICAgc2VsZi5faW5pdF9jYWxsZWQgPSBUcnVlCiAKIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2ZvbV9idWZmZXIoc2VsZik6CisgICAgZGVmIHRlc3RfZnJvbV9idWZmZXIoc2VsZik6CiAgICAgICAgIGEgPSBhcnJheS5hcnJheSgiaSIsIHJhbmdlKDE2KSkKICAgICAgICAgeCA9IChjX2ludCAqIDE2KS5mcm9tX2J1ZmZlcihhKQogCkBAIC0yMywyNSArMjMsNjQgQEAKICAgICAgICAgYVswXSwgYVstMV0gPSAyMDAsIC0yMDAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBhLnRvbGlzdCgpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4oYSwgeC5fb2JqZWN0cy52YWx1ZXMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIGEuYXBwZW5kLCAxMDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBhLnBvcCkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjX2ludC5mcm9tX2J1ZmZlciwgYSwgLTEpCisgICAgICAgIGRlbCB4OyBkZWwgeTsgZ2MuY29sbGVjdCgpOyBnYy5jb2xsZWN0KCk7IGdjLmNvbGxlY3QoKQorICAgICAgICBhLmFwcGVuZCgxMDApCisgICAgICAgIGEucG9wKCkKKyAgICAgICAgeCA9IChjX2ludCAqIDE2KS5mcm9tX2J1ZmZlcihhKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYSwgW29iai5vYmogaWYgaXNpbnN0YW5jZShvYmosIG1lbW9yeXZpZXcpIGVsc2Ugb2JqCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBvYmogaW4geC5fb2JqZWN0cy52YWx1ZXMoKV0pCiAKICAgICAgICAgZXhwZWN0ZWQgPSB4WzpdCiAgICAgICAgIGRlbCBhOyBnYy5jb2xsZWN0KCk7IGdjLmNvbGxlY3QoKTsgZ2MuY29sbGVjdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgZXhwZWN0ZWQpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoY19jaGFyICogMTYpLmZyb21fYnVmZmVyLCAiYSIgKiAxNikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCB3cml0YWJsZSIpOgorICAgICAgICAgICAgKGNfY2hhciAqIDE2KS5mcm9tX2J1ZmZlcihiImEiICogMTYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJub3Qgd3JpdGFibGUiKToKKyAgICAgICAgICAgIChjX2NoYXIgKiAxNikuZnJvbV9idWZmZXIobWVtb3J5dmlldyhiImEiICogMTYpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAibm90IEMgY29udGlndW91cyIpOgorICAgICAgICAgICAgKGNfY2hhciAqIDE2KS5mcm9tX2J1ZmZlcihtZW1vcnl2aWV3KGJ5dGVhcnJheShiImEiICogMTYpKVs6Oi0xXSkKKyAgICAgICAgbXNnID0gImRvZXMgbm90IGhhdmUgdGhlIGJ1ZmZlciBpbnRlcmZhY2UiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAoY19jaGFyICogMTYpLmZyb21fYnVmZmVyKCJhIiAqIDE2KQogCi0gICAgZGVmIHRlc3RfZm9tX2J1ZmZlcl93aXRoX29mZnNldChzZWxmKToKKyAgICBkZWYgdGVzdF9mb3J0cmFuX2NvbnRpZ3VvdXMoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGJ1ZmZlcgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdChzdHIoZXJyKSkKKyAgICAgICAgZmxhZ3MgPSBfdGVzdGJ1ZmZlci5ORF9XUklUQUJMRSB8IF90ZXN0YnVmZmVyLk5EX0ZPUlRSQU4KKyAgICAgICAgYXJyYXkgPSBfdGVzdGJ1ZmZlci5uZGFycmF5KAorICAgICAgICAgICAgWzk3XSAqIDE2LCBmb3JtYXQ9IkIiLCBzaGFwZT1bNCwgNF0sIGZsYWdzPWZsYWdzKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAibm90IEMgY29udGlndW91cyIpOgorICAgICAgICAgICAgKGNfY2hhciAqIDE2KS5mcm9tX2J1ZmZlcihhcnJheSkKKyAgICAgICAgYXJyYXkgPSBtZW1vcnl2aWV3KGFycmF5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXJyYXkuZl9jb250aWd1b3VzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFycmF5LmNfY29udGlndW91cykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCBDIGNvbnRpZ3VvdXMiKToKKyAgICAgICAgICAgIChjX2NoYXIgKiAxNikuZnJvbV9idWZmZXIoYXJyYXkpCisKKyAgICBkZWYgdGVzdF9mcm9tX2J1ZmZlcl93aXRoX29mZnNldChzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KCJpIiwgcmFuZ2UoMTYpKQogICAgICAgICB4ID0gKGNfaW50ICogMTUpLmZyb21fYnVmZmVyKGEsIHNpemVvZihjX2ludCkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBhLnRvbGlzdCgpWzE6XSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbGFtYmRhOiAoY19pbnQgKiAxNikuZnJvbV9idWZmZXIoYSwgc2l6ZW9mKGNfaW50KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogKGNfaW50ICogMSkuZnJvbV9idWZmZXIoYSwgMTYgKiBzaXplb2YoY19pbnQpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNfaW50LmZyb21fYnVmZmVyKGEsIC0xKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgKGNfaW50ICogMTYpLmZyb21fYnVmZmVyKGEsIHNpemVvZihjX2ludCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAoY19pbnQgKiAxKS5mcm9tX2J1ZmZlcihhLCAxNiAqIHNpemVvZihjX2ludCkpCisKKyAgICBkZWYgdGVzdF9mcm9tX2J1ZmZlcl9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBhID0gW2NfY2hhci5mcm9tX2J1ZmZlcihtZW1vcnl2aWV3KGJ5dGVhcnJheShiJ2EnKSkpXQorICAgICAgICBhLmFwcGVuZChhKQorICAgICAgICBkZWwgYQorICAgICAgICBnYy5jb2xsZWN0KCkgICMgU2hvdWxkIG5vdCBjcmFzaAogCiAgICAgZGVmIHRlc3RfZnJvbV9idWZmZXJfY29weShzZWxmKToKICAgICAgICAgYSA9IGFycmF5LmFycmF5KCJpIiwgcmFuZ2UoMTYpKQpAQCAtNTYsMjYgKzk1LDMwIEBACiAgICAgICAgIGFbMF0sIGFbLTFdID0gMjAwLCAtMjAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgbGlzdChyYW5nZSgxNikpKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKKyAgICAgICAgYS5hcHBlbmQoMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbOl0sIGxpc3QocmFuZ2UoMTYpKSkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjX2ludC5mcm9tX2J1ZmZlciwgYSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fb2JqZWN0cywgTm9uZSkKIAogICAgICAgICBkZWwgYTsgZ2MuY29sbGVjdCgpOyBnYy5jb2xsZWN0KCk7IGdjLmNvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHhbOl0sIGxpc3QocmFuZ2UoMTYpKSkKIAogICAgICAgICB4ID0gKGNfY2hhciAqIDE2KS5mcm9tX2J1ZmZlcl9jb3B5KGIiYSIgKiAxNikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4WzpdLCBiImEiICogMTYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIChjX2NoYXIgKiAxNikuZnJvbV9idWZmZXJfY29weSgiYSIgKiAxNikKIAotICAgIGRlZiB0ZXN0X2ZvbV9idWZmZXJfY29weV93aXRoX29mZnNldChzZWxmKToKKyAgICBkZWYgdGVzdF9mcm9tX2J1ZmZlcl9jb3B5X3dpdGhfb2Zmc2V0KHNlbGYpOgogICAgICAgICBhID0gYXJyYXkuYXJyYXkoImkiLCByYW5nZSgxNikpCiAgICAgICAgIHggPSAoY19pbnQgKiAxNSkuZnJvbV9idWZmZXJfY29weShhLCBzaXplb2YoY19pbnQpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeFs6XSwgYS50b2xpc3QoKVsxOl0pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChjX2ludCAqIDE2KS5mcm9tX2J1ZmZlcl9jb3B5LCBhLCBzaXplb2YoY19pbnQpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAoY19pbnQgKiAxKS5mcm9tX2J1ZmZlcl9jb3B5LCBhLCAxNiAqIHNpemVvZihjX2ludCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjX2ludC5mcm9tX2J1ZmZlcl9jb3B5KGEsIC0xKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgKGNfaW50ICogMTYpLmZyb21fYnVmZmVyX2NvcHkoYSwgc2l6ZW9mKGNfaW50KSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIChjX2ludCAqIDEpLmZyb21fYnVmZmVyX2NvcHkoYSwgMTYgKiBzaXplb2YoY19pbnQpKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3Rpb25zLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfZnVuY3Rpb25zLnB5CmluZGV4IDA3ZWViNjguLjc1NjI4OTIgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2Z1bmN0aW9ucy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9mdW5jdGlvbnMucHkKQEAgLTYsNiArNiw3IEBACiAiIiIKIAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiBpbXBvcnQgc3lzLCB1bml0dGVzdAogCiB0cnk6CkBAIC02MywyMiArNjQsMTYgQEAKICAgICAgICAgICAgIHBhc3MKIAogCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKICAgICBkZWYgdGVzdF93Y2hhcl9wYXJtKHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjX3djaGFyCi0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfaV9iaGlsZmQKICAgICAgICAgZi5hcmd0eXBlcyA9IFtjX2J5dGUsIGNfd2NoYXIsIGNfaW50LCBjX2xvbmcsIGNfZmxvYXQsIGNfZG91YmxlXQogICAgICAgICByZXN1bHQgPSBmKDEsICJ4IiwgMywgNCwgNS4wLCA2LjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAxMzkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHQpLCBpbnQpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQogICAgIGRlZiB0ZXN0X3djaGFyX3Jlc3VsdChzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY193Y2hhcgotICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGYgPSBkbGwuX3Rlc3RmdW5jX2lfYmhpbGZkCiAgICAgICAgIGYuYXJndHlwZXMgPSBbY19ieXRlLCBjX3Nob3J0LCBjX2ludCwgY19sb25nLCBjX2Zsb2F0LCBjX2RvdWJsZV0KICAgICAgICAgZi5yZXN0eXBlID0gY193Y2hhcgpAQCAtMTU1LDExICsxNTAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTIxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUocmVzdWx0KSwgZmxvYXQpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2NfbG9uZ2xvbmcnKQogICAgIGRlZiB0ZXN0X2xvbmdsb25ncmVzdWx0KHNlbGYpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjX2xvbmdsb25nCi0gICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfcV9iaGlsZmQKICAgICAgICAgZi5yZXN0eXBlID0gY19sb25nbG9uZwogICAgICAgICBmLmFyZ3R5cGVzID0gW2NfYnl0ZSwgY19zaG9ydCwgY19pbnQsIGNfbG9uZywgY19mbG9hdCwgY19kb3VibGVdCkBAIC0yOTYsNiArMjg4LDcgQEAKICAgICAgICAgcmVzdWx0ID0gZigtMTAsIGNiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgLTE4KQogCisgICAgQG5lZWRfc3ltYm9sKCdjX2xvbmdsb25nJykKICAgICBkZWYgdGVzdF9sb25nbG9uZ19jYWxsYmFja3Moc2VsZik6CiAKICAgICAgICAgZiA9IGRsbC5fdGVzdGZ1bmNfY2FsbGJhY2tfcV9xZgpAQCAtMzQ4LDE2ICszNDEsMTYgQEAKICAgICAgICAgczJoID0gZGxsLnJldF8yaF9mdW5jKGlucCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQogCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fMkhfc3RkY2FsbChzZWxmKToKLSAgICAgICAgICAgIGNsYXNzIFMySChTdHJ1Y3R1cmUpOgotICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygieCIsIGNfc2hvcnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgieSIsIGNfc2hvcnQpXQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAnV2luZG93cy1zcGVjaWZpYyB0ZXN0JykKKyAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzJIX3N0ZGNhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIFMySChTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJ4IiwgY19zaG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAoInkiLCBjX3Nob3J0KV0KIAotICAgICAgICAgICAgd2luZGxsLnNfcmV0XzJoX2Z1bmMucmVzdHlwZSA9IFMySAotICAgICAgICAgICAgd2luZGxsLnNfcmV0XzJoX2Z1bmMuYXJndHlwZXMgPSBbUzJIXQotICAgICAgICAgICAgczJoID0gd2luZGxsLnNfcmV0XzJoX2Z1bmMoUzJIKDk5LCA4OCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzMmgueCwgczJoLnkpLCAoOTkqMiwgODgqMykpCisgICAgICAgIHdpbmRsbC5zX3JldF8yaF9mdW5jLnJlc3R5cGUgPSBTMkgKKyAgICAgICAgd2luZGxsLnNfcmV0XzJoX2Z1bmMuYXJndHlwZXMgPSBbUzJIXQorICAgICAgICBzMmggPSB3aW5kbGwuc19yZXRfMmhfZnVuYyhTMkgoOTksIDg4KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoczJoLngsIHMyaC55KSwgKDk5KjIsIDg4KjMpKQogCiAgICAgZGVmIHRlc3Rfc3RydWN0X3JldHVybl84SChzZWxmKToKICAgICAgICAgY2xhc3MgUzhJKFN0cnVjdHVyZSk6CkBAIC0zNzYsMjMgKzM2OSwyNCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChzOGkuYSwgczhpLmIsIHM4aS5jLCBzOGkuZCwgczhpLmUsIHM4aS5mLCBzOGkuZywgczhpLmgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQogCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgICAgIGRlZiB0ZXN0X3N0cnVjdF9yZXR1cm5fOEhfc3RkY2FsbChzZWxmKToKLSAgICAgICAgICAgIGNsYXNzIFM4SShTdHJ1Y3R1cmUpOgotICAgICAgICAgICAgICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImIiLCBjX2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19pbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZCIsIGNfaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImUiLCBjX2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJmIiwgY19pbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZyIsIGNfaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImgiLCBjX2ludCldCi0gICAgICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5yZXN0eXBlID0gUzhJCi0gICAgICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5hcmd0eXBlcyA9IFtTOEldCi0gICAgICAgICAgICBpbnAgPSBTOEkoOSwgOCwgNywgNiwgNSwgNCwgMywgMikKLSAgICAgICAgICAgIHM4aSA9IHdpbmRsbC5zX3JldF84aV9mdW5jKGlucCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHM4aS5hLCBzOGkuYiwgczhpLmMsIHM4aS5kLCBzOGkuZSwgczhpLmYsIHM4aS5nLCBzOGkuaCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAnV2luZG93cy1zcGVjaWZpYyB0ZXN0JykKKyAgICBkZWYgdGVzdF9zdHJ1Y3RfcmV0dXJuXzhIX3N0ZGNhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIFM4SShTdHJ1Y3R1cmUpOgorICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJhIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJiIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJjIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJkIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJlIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJmIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJnIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCJoIiwgY19pbnQpXQorICAgICAgICB3aW5kbGwuc19yZXRfOGlfZnVuYy5yZXN0eXBlID0gUzhJCisgICAgICAgIHdpbmRsbC5zX3JldF84aV9mdW5jLmFyZ3R5cGVzID0gW1M4SV0KKyAgICAgICAgaW5wID0gUzhJKDksIDgsIDcsIDYsIDUsIDQsIDMsIDIpCisgICAgICAgIHM4aSA9IHdpbmRsbC5zX3JldF84aV9mdW5jKGlucCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAoczhpLmEsIHM4aS5iLCBzOGkuYywgczhpLmQsIHM4aS5lLCBzOGkuZiwgczhpLmcsIHM4aS5oKSwKKyAgICAgICAgICAgICAgICAoOSoyLCA4KjMsIDcqNCwgNio1LCA1KjYsIDQqNywgMyo4LCAyKjkpKQogCiAgICAgZGVmIHRlc3Rfc2YxNjUxMjM1KHNlbGYpOgogICAgICAgICAjIHNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvMTY1MTIzNQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZWdlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlZ2Vycy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjJlNGIwOC4uMDAwMDAwMAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlZ2Vycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotIyBzdXBlcnNlZGVkIGJ5IHRlc3RfbnVtYmVycy5weQotaW1wb3J0IHVuaXR0ZXN0Ci0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9pbnRlcm5hbHMucHkKaW5kZXggY2JmMmUwNS4uMjcxZTNmNSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfaW50ZXJuYWxzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2ludGVybmFscy5weQpAQCAtNSwxNyArNSwxNCBAQAogCiAjIFhYWCBUaGlzIHRlc3QgbXVzdCBiZSByZXZpZXdlZCBmb3IgY29ycmVjdG5lc3MhISEKIAotIiIiCi1jdHlwZXMnIHR5cGVzIGFyZSBjb250YWluZXIgdHlwZXMuCi0KLVRoZXkgaGF2ZSBhbiBpbnRlcm5hbCBtZW1vcnkgYmxvY2ssIHdoaWNoIG9ubHkgY29uc2lzdHMgb2Ygc29tZSBieXRlcywKLWJ1dCBpdCBoYXMgdG8ga2VlcCByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMgYXMgd2VsbC4gVGhpcyBpcyBub3QKLXJlYWxseSBuZWVkZWQgZm9yIHRyaXZpYWwgQyB0eXBlcyBsaWtlIGludCBvciBjaGFyLCBidXQgaXQgaXMgaW1wb3J0YW50Ci1mb3IgYWdncmVnYXRlIHR5cGVzIGxpa2Ugc3RyaW5ncyBvciBwb2ludGVycyBpbiBwYXJ0aWN1bGFyLgotCi1XaGF0IGFib3V0IHBvaW50ZXJzPwotCi0iIiIKKyMgY3R5cGVzJyB0eXBlcyBhcmUgY29udGFpbmVyIHR5cGVzLgorIworIyBUaGV5IGhhdmUgYW4gaW50ZXJuYWwgbWVtb3J5IGJsb2NrLCB3aGljaCBvbmx5IGNvbnNpc3RzIG9mIHNvbWUgYnl0ZXMsCisjIGJ1dCBpdCBoYXMgdG8ga2VlcCByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHMgYXMgd2VsbC4gVGhpcyBpcyBub3QKKyMgcmVhbGx5IG5lZWRlZCBmb3IgdHJpdmlhbCBDIHR5cGVzIGxpa2UgaW50IG9yIGNoYXIsIGJ1dCBpdCBpcyBpbXBvcnRhbnQKKyMgZm9yIGFnZ3JlZ2F0ZSB0eXBlcyBsaWtlIHN0cmluZ3Mgb3IgcG9pbnRlcnMgaW4gcGFydGljdWxhci4KKyMKKyMgV2hhdCBhYm91dCBwb2ludGVycz8KIAogY2xhc3MgT2JqZWN0c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgYXNzZXJ0U2FtZShzZWxmLCBhLCBiKToKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2tlZXByZWZzLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKaW5kZXggZGI4YWRmYi4uOTRjMDI1NyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfa2VlcHJlZnMucHkKQEAgLTk0LDcgKzk0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9vYmplY3RzLCB7JzEnOiBpfSkKIAogY2xhc3MgRGVsZXRlUG9pbnRlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgWF90ZXN0KHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9YKHNlbGYpOgogICAgICAgICBjbGFzcyBYKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoInAiLCBQT0lOVEVSKGNfY2hhcl9wKSldCiAgICAgICAgIHggPSBYKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9sb2FkaW5nLnB5CmluZGV4IDQxNDM2M2QuLjRmYjg5NjQgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X2xvYWRpbmcucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbG9hZGluZy5weQpAQCAtMSwzOCArMSw0NiBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKLWltcG9ydCBzeXMsIHVuaXR0ZXN0CiBpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRlc3Quc3VwcG9ydAogZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5Ci1mcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBpc19yZXNvdXJjZV9lbmFibGVkCiAKIGxpYmNfbmFtZSA9IE5vbmUKLWlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICBsaWJjX25hbWUgPSBmaW5kX2xpYnJhcnkoImMiKQotZWxpZiBvcy5uYW1lID09ICJjZSI6Ci0gICAgbGliY19uYW1lID0gImNvcmVkbGwiCi1lbGlmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKLSAgICBsaWJjX25hbWUgPSAiY3lnd2luMS5kbGwiCi1lbHNlOgotICAgIGxpYmNfbmFtZSA9IGZpbmRfbGlicmFyeSgiYyIpCiAKLWlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInByaW50aW5nIik6Ci0gICAgcHJpbnQoImxpYmNfbmFtZSBpcyIsIGxpYmNfbmFtZSkKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGdsb2JhbCBsaWJjX25hbWUKKyAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgIGxpYmNfbmFtZSA9IGZpbmRfbGlicmFyeSgiYyIpCisgICAgZWxpZiBvcy5uYW1lID09ICJjZSI6CisgICAgICAgIGxpYmNfbmFtZSA9ICJjb3JlZGxsIgorICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICJjeWd3aW4iOgorICAgICAgICBsaWJjX25hbWUgPSAiY3lnd2luMS5kbGwiCisgICAgZWxzZToKKyAgICAgICAgbGliY19uYW1lID0gZmluZF9saWJyYXJ5KCJjIikKKworICAgIGlmIHRlc3Quc3VwcG9ydC52ZXJib3NlOgorICAgICAgICBwcmludCgibGliY19uYW1lIGlzIiwgbGliY19uYW1lKQogCiBjbGFzcyBMb2FkZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIHVua25vd25kbGwgPSAieHhyYW5kb21uYW1leHgiCiAKLSAgICBpZiBsaWJjX25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6Ci0gICAgICAgICAgICBDRExMKGxpYmNfbmFtZSkKLSAgICAgICAgICAgIENETEwob3MucGF0aC5iYXNlbmFtZShsaWJjX25hbWUpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgQ0RMTCwgc2VsZi51bmtub3duZGxsKQorICAgIGRlZiB0ZXN0X2xvYWQoc2VsZik6CisgICAgICAgIGlmIGxpYmNfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGZpbmQgbGliYycpCisgICAgICAgIENETEwobGliY19uYW1lKQorICAgICAgICBDRExMKG9zLnBhdGguYmFzZW5hbWUobGliY19uYW1lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgQ0RMTCwgc2VsZi51bmtub3duZGxsKQogCi0gICAgaWYgbGliY19uYW1lIGlzIG5vdCBOb25lIGFuZCBvcy5wYXRoLmJhc2VuYW1lKGxpYmNfbmFtZSkgPT0gImxpYmMuc28uNiI6Ci0gICAgICAgIGRlZiB0ZXN0X2xvYWRfdmVyc2lvbihzZWxmKToKLSAgICAgICAgICAgIGNkbGwuTG9hZExpYnJhcnkoImxpYmMuc28uNiIpCi0gICAgICAgICAgICAjIGxpbnV4IHVzZXMgdmVyc2lvbiwgbGliYyA5IHNob3VsZCBub3QgZXhpc3QKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNkbGwuTG9hZExpYnJhcnksICJsaWJjLnNvLjkiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgY2RsbC5Mb2FkTGlicmFyeSwgc2VsZi51bmtub3duZGxsKQorICAgIGRlZiB0ZXN0X2xvYWRfdmVyc2lvbihzZWxmKToKKyAgICAgICAgaWYgbGliY19uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdjb3VsZCBub3QgZmluZCBsaWJjJykKKyAgICAgICAgaWYgb3MucGF0aC5iYXNlbmFtZShsaWJjX25hbWUpICE9ICdsaWJjLnNvLjYnOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnd3JvbmcgbGliYyBwYXRoIGZvciB0ZXN0JykKKyAgICAgICAgY2RsbC5Mb2FkTGlicmFyeSgibGliYy5zby42IikKKyAgICAgICAgIyBsaW51eCB1c2VzIHZlcnNpb24sIGxpYmMgOSBzaG91bGQgbm90IGV4aXN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNkbGwuTG9hZExpYnJhcnksICJsaWJjLnNvLjkiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjZGxsLkxvYWRMaWJyYXJ5LCBzZWxmLnVua25vd25kbGwpCiAKICAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgogICAgICAgICBmb3IgbmFtZSBpbiAoImMiLCAibSIpOgpAQCAtNDEsNjYgKzQ5LDcxIEBACiAgICAgICAgICAgICAgICAgY2RsbC5Mb2FkTGlicmFyeShsaWIpCiAgICAgICAgICAgICAgICAgQ0RMTChsaWIpCiAKLSAgICBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKLSAgICAgICAgZGVmIHRlc3RfbG9hZF9saWJyYXJ5KHNlbGYpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobGliY19uYW1lKQotICAgICAgICAgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZCgicHJpbnRpbmciKToKLSAgICAgICAgICAgICAgICBwcmludChmaW5kX2xpYnJhcnkoImtlcm5lbDMyIikpCi0gICAgICAgICAgICAgICAgcHJpbnQoZmluZF9saWJyYXJ5KCJ1c2VyMzIiKSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lIGluICgibnQiLCAiY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byBXaW5kb3dzIChOVC9DRSknKQorICAgIGRlZiB0ZXN0X2xvYWRfbGlicmFyeShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobGliY19uYW1lKQorICAgICAgICBpZiB0ZXN0LnN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KGZpbmRfbGlicmFyeSgia2VybmVsMzIiKSkKKyAgICAgICAgICAgIHByaW50KGZpbmRfbGlicmFyeSgidXNlcjMyIikpCiAKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlVwotICAgICAgICAgICAgICAgIHdpbmRsbFsia2VybmVsMzIiXS5HZXRNb2R1bGVIYW5kbGVXCi0gICAgICAgICAgICAgICAgd2luZGxsLkxvYWRMaWJyYXJ5KCJrZXJuZWwzMiIpLkdldE1vZHVsZUhhbmRsZVcKLSAgICAgICAgICAgICAgICBXaW5ETEwoImtlcm5lbDMyIikuR2V0TW9kdWxlSGFuZGxlVwotICAgICAgICAgICAgZWxpZiBvcy5uYW1lID09ICJjZSI6Ci0gICAgICAgICAgICAgICAgd2luZGxsLmNvcmVkbGwuR2V0TW9kdWxlSGFuZGxlVwotICAgICAgICAgICAgICAgIHdpbmRsbFsiY29yZWRsbCJdLkdldE1vZHVsZUhhbmRsZVcKLSAgICAgICAgICAgICAgICB3aW5kbGwuTG9hZExpYnJhcnkoImNvcmVkbGwiKS5HZXRNb2R1bGVIYW5kbGVXCi0gICAgICAgICAgICAgICAgV2luRExMKCJjb3JlZGxsIikuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICBpZiBvcy5uYW1lID09ICJudCI6CisgICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICAgICAgd2luZGxsWyJrZXJuZWwzMiJdLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIHdpbmRsbC5Mb2FkTGlicmFyeSgia2VybmVsMzIiKS5HZXRNb2R1bGVIYW5kbGVXCisgICAgICAgICAgICBXaW5ETEwoImtlcm5lbDMyIikuR2V0TW9kdWxlSGFuZGxlVworICAgICAgICBlbGlmIG9zLm5hbWUgPT0gImNlIjoKKyAgICAgICAgICAgIHdpbmRsbC5jb3JlZGxsLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIHdpbmRsbFsiY29yZWRsbCJdLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIHdpbmRsbC5Mb2FkTGlicmFyeSgiY29yZWRsbCIpLkdldE1vZHVsZUhhbmRsZVcKKyAgICAgICAgICAgIFdpbkRMTCgiY29yZWRsbCIpLkdldE1vZHVsZUhhbmRsZVcKIAotICAgICAgICBkZWYgdGVzdF9sb2FkX29yZGluYWxfZnVuY3Rpb25zKHNlbGYpOgotICAgICAgICAgICAgaW1wb3J0IF9jdHlwZXNfdGVzdAotICAgICAgICAgICAgZGxsID0gV2luRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKLSAgICAgICAgICAgICMgV2UgbG9hZCB0aGUgc2FtZSBmdW5jdGlvbiBib3RoIHZpYSBvcmRpbmFsIGFuZCBuYW1lCi0gICAgICAgICAgICBmdW5jX29yZCA9IGRsbFsyXQotICAgICAgICAgICAgZnVuY19uYW1lID0gZGxsLkdldFN0cmluZwotICAgICAgICAgICAgIyBhZGRyZXNzb2YgZ2V0cyB0aGUgYWRkcmVzcyB3aGVyZSB0aGUgZnVuY3Rpb24gcG9pbnRlciBpcyBzdG9yZWQKLSAgICAgICAgICAgIGFfb3JkID0gYWRkcmVzc29mKGZ1bmNfb3JkKQotICAgICAgICAgICAgYV9uYW1lID0gYWRkcmVzc29mKGZ1bmNfbmFtZSkKLSAgICAgICAgICAgIGZfb3JkX2FkZHIgPSBjX3ZvaWRfcC5mcm9tX2FkZHJlc3MoYV9vcmQpLnZhbHVlCi0gICAgICAgICAgICBmX25hbWVfYWRkciA9IGNfdm9pZF9wLmZyb21fYWRkcmVzcyhhX25hbWUpLnZhbHVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleChmX29yZF9hZGRyKSwgaGV4KGZfbmFtZV9hZGRyKSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lIGluICgibnQiLCAiY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byBXaW5kb3dzIChOVC9DRSknKQorICAgIGRlZiB0ZXN0X2xvYWRfb3JkaW5hbF9mdW5jdGlvbnMoc2VsZik6CisgICAgICAgIGltcG9ydCBfY3R5cGVzX3Rlc3QKKyAgICAgICAgZGxsID0gV2luRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgIyBXZSBsb2FkIHRoZSBzYW1lIGZ1bmN0aW9uIGJvdGggdmlhIG9yZGluYWwgYW5kIG5hbWUKKyAgICAgICAgZnVuY19vcmQgPSBkbGxbMl0KKyAgICAgICAgZnVuY19uYW1lID0gZGxsLkdldFN0cmluZworICAgICAgICAjIGFkZHJlc3NvZiBnZXRzIHRoZSBhZGRyZXNzIHdoZXJlIHRoZSBmdW5jdGlvbiBwb2ludGVyIGlzIHN0b3JlZAorICAgICAgICBhX29yZCA9IGFkZHJlc3NvZihmdW5jX29yZCkKKyAgICAgICAgYV9uYW1lID0gYWRkcmVzc29mKGZ1bmNfbmFtZSkKKyAgICAgICAgZl9vcmRfYWRkciA9IGNfdm9pZF9wLmZyb21fYWRkcmVzcyhhX29yZCkudmFsdWUKKyAgICAgICAgZl9uYW1lX2FkZHIgPSBjX3ZvaWRfcC5mcm9tX2FkZHJlc3MoYV9uYW1lKS52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhleChmX29yZF9hZGRyKSwgaGV4KGZfbmFtZV9hZGRyKSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGRsbC5fX2dldGl0ZW1fXywgMTIzNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGRsbC5fX2dldGl0ZW1fXywgMTIzNCkKIAotICAgIGlmIG9zLm5hbWUgPT0gIm50IjoKLSAgICAgICAgZGVmIHRlc3RfMTcwMzI4Nl9BKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBMb2FkTGlicmFyeSwgRnJlZUxpYnJhcnkKLSAgICAgICAgICAgICMgT24gd2luWFAgNjQtYml0LCBhZHZhcGkzMiBsb2FkcyBhdCBhbiBhZGRyZXNzIHRoYXQgZG9lcwotICAgICAgICAgICAgIyBOT1QgZml0IGludG8gYSAzMi1iaXQgaW50ZWdlci4gIEZyZWVMaWJyYXJ5IG11c3QgYmUgYWJsZQotICAgICAgICAgICAgIyB0byBhY2NlcHQgdGhpcyBhZGRyZXNzLgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gIm50IiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCisgICAgZGVmIHRlc3RfMTcwMzI4Nl9BKHNlbGYpOgorICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IExvYWRMaWJyYXJ5LCBGcmVlTGlicmFyeQorICAgICAgICAjIE9uIHdpblhQIDY0LWJpdCwgYWR2YXBpMzIgbG9hZHMgYXQgYW4gYWRkcmVzcyB0aGF0IGRvZXMKKyAgICAgICAgIyBOT1QgZml0IGludG8gYSAzMi1iaXQgaW50ZWdlci4gIEZyZWVMaWJyYXJ5IG11c3QgYmUgYWJsZQorICAgICAgICAjIHRvIGFjY2VwdCB0aGlzIGFkZHJlc3MuCiAKLSAgICAgICAgICAgICMgVGhlc2UgYXJlIHRlc3RzIGZvciBodHRwOi8vd3d3LnB5dGhvbi5vcmcvc2YvMTcwMzI4NgotICAgICAgICAgICAgaGFuZGxlID0gTG9hZExpYnJhcnkoImFkdmFwaTMyIikKLSAgICAgICAgICAgIEZyZWVMaWJyYXJ5KGhhbmRsZSkKKyAgICAgICAgIyBUaGVzZSBhcmUgdGVzdHMgZm9yIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9zZi8xNzAzMjg2CisgICAgICAgIGhhbmRsZSA9IExvYWRMaWJyYXJ5KCJhZHZhcGkzMiIpCisgICAgICAgIEZyZWVMaWJyYXJ5KGhhbmRsZSkKIAotICAgICAgICBkZWYgdGVzdF8xNzAzMjg2X0Ioc2VsZik6Ci0gICAgICAgICAgICAjIFNpbmNlIG9uIHdpblhQIDY0LWJpdCBhZHZhcGkzMiBsb2FkcyBsaWtlIGRlc2NyaWJlZAotICAgICAgICAgICAgIyBhYm92ZSwgdGhlIChhcmJpdHJhcmlseSBzZWxlY3RlZCkgQ2xvc2VFdmVudExvZyBmdW5jdGlvbgotICAgICAgICAgICAgIyBhbHNvIGhhcyBhIGhpZ2ggYWRkcmVzcy4gICdjYWxsX2Z1bmN0aW9uJyBzaG91bGQgYWNjZXB0Ci0gICAgICAgICAgICAjIGFkZHJlc3NlcyBzbyBsYXJnZS4KLSAgICAgICAgICAgIGZyb20gX2N0eXBlcyBpbXBvcnQgY2FsbF9mdW5jdGlvbgotICAgICAgICAgICAgYWR2YXBpMzIgPSB3aW5kbGwuYWR2YXBpMzIKLSAgICAgICAgICAgICMgQ2FsbGluZyBDbG9zZUV2ZW50TG9nIHdpdGggYSBOVUxMIGFyZ3VtZW50IHNob3VsZCBmYWlsLAotICAgICAgICAgICAgIyBidXQgdGhlIGNhbGwgc2hvdWxkIG5vdCBzZWdmYXVsdCBvciBzby4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgYWR2YXBpMzIuQ2xvc2VFdmVudExvZyhOb25lKSkKLSAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX2NoYXJfcAotICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLnJlc3R5cGUgPSBjX3ZvaWRfcAotICAgICAgICAgICAgcHJvYyA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhhZHZhcGkzMi5faGFuZGxlLCBiIkNsb3NlRXZlbnRMb2ciKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2MpCi0gICAgICAgICAgICAjIFRoaXMgaXMgdGhlIHJlYWwgdGVzdDogY2FsbCB0aGUgZnVuY3Rpb24gdmlhICdjYWxsX2Z1bmN0aW9uJwotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gIm50IiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCisgICAgZGVmIHRlc3RfMTcwMzI4Nl9CKHNlbGYpOgorICAgICAgICAjIFNpbmNlIG9uIHdpblhQIDY0LWJpdCBhZHZhcGkzMiBsb2FkcyBsaWtlIGRlc2NyaWJlZAorICAgICAgICAjIGFib3ZlLCB0aGUgKGFyYml0cmFyaWx5IHNlbGVjdGVkKSBDbG9zZUV2ZW50TG9nIGZ1bmN0aW9uCisgICAgICAgICMgYWxzbyBoYXMgYSBoaWdoIGFkZHJlc3MuICAnY2FsbF9mdW5jdGlvbicgc2hvdWxkIGFjY2VwdAorICAgICAgICAjIGFkZHJlc3NlcyBzbyBsYXJnZS4KKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBjYWxsX2Z1bmN0aW9uCisgICAgICAgIGFkdmFwaTMyID0gd2luZGxsLmFkdmFwaTMyCisgICAgICAgICMgQ2FsbGluZyBDbG9zZUV2ZW50TG9nIHdpdGggYSBOVUxMIGFyZ3VtZW50IHNob3VsZCBmYWlsLAorICAgICAgICAjIGJ1dCB0aGUgY2FsbCBzaG91bGQgbm90IHNlZ2ZhdWx0IG9yIHNvLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGFkdmFwaTMyLkNsb3NlRXZlbnRMb2coTm9uZSkpCisgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX2NoYXJfcAorICAgICAgICB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MucmVzdHlwZSA9IGNfdm9pZF9wCisgICAgICAgIHByb2MgPSB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MoYWR2YXBpMzIuX2hhbmRsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIkNsb3NlRXZlbnRMb2ciKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHJvYykKKyAgICAgICAgIyBUaGlzIGlzIHRoZSByZWFsIHRlc3Q6IGNhbGwgdGhlIGZ1bmN0aW9uIHZpYSAnY2FsbF9mdW5jdGlvbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBjYWxsX2Z1bmN0aW9uKHByb2MsIChOb25lLCkpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWFjaG9saWIucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQppbmRleCBlZGE4NDZkLi42YjM1MjY5IDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tYWNob2xpYi5weQpAQCAtMywzNSArMywzMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKICMgQm9iIElwcG9saXRvOgotIiIiCi1Pay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vawotc29tZXRoaW5nIGxpa2U6Ci0KLWltcG9ydCBvcwotZnJvbSBtYWNob2xpYi5keWxkIGltcG9ydCBkeWxkX2ZpbmQKLQotZGVmIGZpbmRfbGliKG5hbWUpOgotICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAotICAgICBuYW1lKycuZnJhbWV3b3JrLycrbmFtZV0KLSAgICAgZm9yIGR5bGliIGluIHBvc3NpYmxlOgotICAgICAgICAgdHJ5OgotICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnJlYWxwYXRoKGR5bGRfZmluZChkeWxpYikpCi0gICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICBwYXNzCi0gICAgIHJhaXNlIFZhbHVlRXJyb3IsICIlcyBub3QgZm91bmQiICUgKG5hbWUsKQotCi1JdCdsbCBoYXZlIG91dHB1dCBsaWtlIHRoaXM6Ci0KLSA+Pj4gZmluZF9saWIoJ3B0aHJlYWQnKQotJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJwotID4+PiBmaW5kX2xpYigneicpCi0nL3Vzci9saWIvbGliei4xLmR5bGliJwotID4+PiBmaW5kX2xpYignSU9LaXQnKQotJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JwotCi0tYm9iCi0KLSIiIgorIworIyBPay4uIHRoZSBjb2RlIHRvIGZpbmQgdGhlIGZpbGVuYW1lIGZvciBfX2dldGF0dHJfXyBzaG91bGQgbG9vaworIyBzb21ldGhpbmcgbGlrZToKKyMKKyMgaW1wb3J0IG9zCisjIGZyb20gbWFjaG9saWIuZHlsZCBpbXBvcnQgZHlsZF9maW5kCisjCisjIGRlZiBmaW5kX2xpYihuYW1lKToKKyMgICAgICBwb3NzaWJsZSA9IFsnbGliJytuYW1lKycuZHlsaWInLCBuYW1lKycuZHlsaWInLAorIyAgICAgIG5hbWUrJy5mcmFtZXdvcmsvJytuYW1lXQorIyAgICAgIGZvciBkeWxpYiBpbiBwb3NzaWJsZToKKyMgICAgICAgICAgdHJ5OgorIyAgICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGgucmVhbHBhdGgoZHlsZF9maW5kKGR5bGliKSkKKyMgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisjICAgICAgICAgICAgICBwYXNzCisjICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIiVzIG5vdCBmb3VuZCIgJSAobmFtZSwpCisjCisjIEl0J2xsIGhhdmUgb3V0cHV0IGxpa2UgdGhpczoKKyMKKyMgID4+PiBmaW5kX2xpYigncHRocmVhZCcpCisjICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicKKyMgID4+PiBmaW5kX2xpYigneicpCisjICcvdXNyL2xpYi9saWJ6LjEuZHlsaWInCisjICA+Pj4gZmluZF9saWIoJ0lPS2l0JykKKyMgJy9TeXN0ZW0vTGlicmFyeS9GcmFtZXdvcmtzL0lPS2l0LmZyYW1ld29yay9WZXJzaW9ucy9BL0lPS2l0JworIworIyAtYm9iCiAKIGZyb20gY3R5cGVzLm1hY2hvbGliLmR5bGQgaW1wb3J0IGR5bGRfZmluZAogCkBAIC00NSwxOCArNDMsMjEgQEAKICAgICByYWlzZSBWYWx1ZUVycm9yKCIlcyBub3QgZm91bmQiICUgKG5hbWUsKSkKIAogY2xhc3MgTWFjaE9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gImRhcndpbiI6Ci0gICAgICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iLCAnT1NYLXNwZWNpZmljIHRlc3QnKQorICAgIGRlZiB0ZXN0X2ZpbmQoc2VsZik6CiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ3B0aHJlYWQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvdXNyL2xpYi9saWJTeXN0ZW0uQi5keWxpYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ3B0aHJlYWQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy91c3IvbGliL2xpYlN5c3RlbS5CLmR5bGliJykKIAotICAgICAgICAgICAgcmVzdWx0ID0gZmluZF9saWIoJ3onKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zdGFydHN3aXRoKCcvdXNyL2xpYi9saWJ6LjEnKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQuZW5kc3dpdGgoJy5keWxpYicpKQorICAgICAgICByZXN1bHQgPSBmaW5kX2xpYigneicpCisgICAgICAgICMgSXNzdWUgIzIxMDkzOiBkeWxkIGRlZmF1bHQgc2VhcmNoIHBhdGggaW5jbHVkZXMgJEhPTUUvbGliIGFuZAorICAgICAgICAjIC91c3IvbG9jYWwvbGliIGJlZm9yZSAvdXNyL2xpYiwgd2hpY2ggY2F1c2VkIHRlc3QgZmFpbHVyZXMgaWYKKyAgICAgICAgIyBhIGxvY2FsIGNvcHkgb2YgbGlieiBleGlzdHMgaW4gb25lIG9mIHRoZW0uIE5vdyBpZ25vcmUgdGhlIGhlYWQKKyAgICAgICAgIyBvZiB0aGUgcGF0aC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXN1bHQsIHIiLiovbGliL2xpYnpcLi4qLipcLmR5bGliIikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kX2xpYignSU9LaXQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0tpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmluZF9saWIoJ0lPS2l0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvU3lzdGVtL0xpYnJhcnkvRnJhbWV3b3Jrcy9JT0tpdC5mcmFtZXdvcmsvVmVyc2lvbnMvQS9JT0tpdCcpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tZW1mdW5jdGlvbnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9tZW1mdW5jdGlvbnMucHkKaW5kZXggYWVjNGFhYS4uZTc4NGI5YSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbWVtZnVuY3Rpb25zLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X21lbWZ1bmN0aW9ucy5weQpAQCAtMiwxNyArMiwxOSBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCiBjbGFzcyBNZW1GdW5jdGlvbnNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSMjICAgIGRlZiB0ZXN0X292ZXJmbG93KHNlbGYpOgotIyMgICAgICAgICMgc3RyaW5nX2F0IGFuZCB3c3RyaW5nX2F0IG11c3QgdXNlIHRoZSBQeXRob24gY2FsbGluZwotIyMgICAgICAgICMgY29udmVudGlvbiAod2hpY2ggYWNxdWlyZXMgdGhlIEdJTCBhbmQgY2hlY2tzIHRoZSBQeXRob24KLSMjICAgICAgICAjIGVycm9yIGZsYWcpLiAgUHJvdm9rZSBhbiBlcnJvciBhbmQgY2F0Y2ggaXQ7IHNlZSBhbHNvIGlzc3VlCi0jIyAgICAgICAgIyAjMzU1NDogPGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUzNTU0PgotIyMgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAotIyMgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbWJkYTogd3N0cmluZ19hdCh1ImZvbyIsIHN5cy5tYXhpbnQgLSAxKSkKLSMjICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT3ZlcmZsb3dFcnJvciwgTWVtb3J5RXJyb3IsIFN5c3RlbUVycm9yKSwKLSMjICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHN0cmluZ19hdCgiZm9vIiwgc3lzLm1heGludCAtIDEpKQorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9vdmVyZmxvdyhzZWxmKToKKyAgICAgICAgIyBzdHJpbmdfYXQgYW5kIHdzdHJpbmdfYXQgbXVzdCB1c2UgdGhlIFB5dGhvbiBjYWxsaW5nCisgICAgICAgICMgY29udmVudGlvbiAod2hpY2ggYWNxdWlyZXMgdGhlIEdJTCBhbmQgY2hlY2tzIHRoZSBQeXRob24KKyAgICAgICAgIyBlcnJvciBmbGFnKS4gIFByb3Zva2UgYW4gZXJyb3IgYW5kIGNhdGNoIGl0OyBzZWUgYWxzbyBpc3N1ZQorICAgICAgICAjICMzNTU0OiA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTM1NTQ+CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHdzdHJpbmdfYXQodSJmb28iLCBzeXMubWF4aW50IC0gMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChPdmVyZmxvd0Vycm9yLCBNZW1vcnlFcnJvciwgU3lzdGVtRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IHN0cmluZ19hdCgiZm9vIiwgc3lzLm1heGludCAtIDEpKQogCiAgICAgZGVmIHRlc3RfbWVtbW92ZShzZWxmKToKICAgICAgICAgIyBsYXJnZSBidWZmZXJzIGFwcGFyZW50bHkgaW5jcmVhc2UgdGhlIGNoYW5jZSB0aGF0IHRoZSBtZW1vcnkKQEAgLTYxLDIxICs2MywxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZ19hdChiImZvbyBiYXIiLCA3KSwgYiJmb28gYmFyIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmdfYXQoYiJmb28gYmFyIiwgMyksIGIiZm9vIikKIAotICAgIHRyeToKLSAgICAgICAgY3JlYXRlX3VuaWNvZGVfYnVmZmVyCi0gICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIGRlZiB0ZXN0X3dzdHJpbmdfYXQoc2VsZik6Ci0gICAgICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJIZWxsbywgV29ybGQiKQotICAgICAgICAgICAgYSA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcigxMDAwMDAwKQotICAgICAgICAgICAgcmVzdWx0ID0gbWVtbW92ZShhLCBwLCBsZW4ocCkgKiBzaXplb2YoY193Y2hhcikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudmFsdWUsICJIZWxsbywgV29ybGQiKQorICAgIEBuZWVkX3N5bWJvbCgnY3JlYXRlX3VuaWNvZGVfYnVmZmVyJykKKyAgICBkZWYgdGVzdF93c3RyaW5nX2F0KHNlbGYpOgorICAgICAgICBwID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJIZWxsbywgV29ybGQiKQorICAgICAgICBhID0gY3JlYXRlX3VuaWNvZGVfYnVmZmVyKDEwMDAwMDApCisgICAgICAgIHJlc3VsdCA9IG1lbW1vdmUoYSwgcCwgbGVuKHApICogc2l6ZW9mKGNfd2NoYXIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEudmFsdWUsICJIZWxsbywgV29ybGQiKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdzdHJpbmdfYXQoYSksICJIZWxsbywgV29ybGQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDUpLCAiSGVsbG8iKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCAwKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhKSwgIkhlbGxvLCBXb3JsZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3N0cmluZ19hdChhLCA1KSwgIkhlbGxvIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDE2KSwgIkhlbGxvLCBXb3JsZFwwXDBcMFwwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3c3RyaW5nX2F0KGEsIDApLCAiIikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9udW1iZXJzLnB5CmluZGV4IDNiNzE5NGYuLjJhZmNhMjYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X251bWJlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfbnVtYmVycy5weQpAQCAtODIsMTIgKzgyLDEzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsICIiKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCBOb25lKQogCi0jIyAgICBkZWYgdGVzdF92YWxpZF9yYW5nZXMoc2VsZik6Ci0jIyAgICAgICAgIyBpbnZhbGlkIHZhbHVlcyBvZiB0aGUgY29ycmVjdCB0eXBlCi0jIyAgICAgICAgIyByYWlzZSBWYWx1ZUVycm9yIChub3QgT3ZlcmZsb3dFcnJvcikKLSMjICAgICAgICBmb3IgdCwgKGwsIGgpIGluIHppcCh1bnNpZ25lZF90eXBlcywgdW5zaWduZWRfcmFuZ2VzKToKLSMjICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdCwgbC0xKQotIyMgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LCBoKzEpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X3ZhbGlkX3JhbmdlcyhzZWxmKToKKyAgICAgICAgIyBpbnZhbGlkIHZhbHVlcyBvZiB0aGUgY29ycmVjdCB0eXBlCisgICAgICAgICMgcmFpc2UgVmFsdWVFcnJvciAobm90IE92ZXJmbG93RXJyb3IpCisgICAgICAgIGZvciB0LCAobCwgaCkgaW4gemlwKHVuc2lnbmVkX3R5cGVzLCB1bnNpZ25lZF9yYW5nZXMpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdCwgbC0xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdCwgaCsxKQogCiAgICAgZGVmIHRlc3RfZnJvbV9wYXJhbShzZWxmKToKICAgICAgICAgIyB0aGUgZnJvbV9wYXJhbSBjbGFzcyBtZXRob2QgYXR0cmlidXRlIGFsd2F5cwpAQCAtMjAwLDE2ICsyMDEsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnZhbHVlLCBiJz8nKQogCiAgICAgIyBhcnJheSBkb2VzIG5vdCBzdXBwb3J0IGNfYm9vbCAvICd0JwotICAgICMgZGVmIHRlc3RfYm9vbF9mcm9tX2FkZHJlc3Moc2VsZik6Ci0gICAgIyAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfYm9vbAotICAgICMgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5Ci0gICAgIyAgICAgYSA9IGFycmF5KGNfYm9vbC5fdHlwZV8sIFtUcnVlXSkKLSAgICAjICAgICB2ID0gdC5mcm9tX2FkZHJlc3MoYS5idWZmZXJfaW5mbygpWzBdKQotICAgICMgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKLSAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodikgaXMgdCkKLSAgICAjICAgICBhWzBdID0gRmFsc2UKLSAgICAjICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCi0gICAgIyAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpIGlzIHQpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X2Jvb2xfZnJvbV9hZGRyZXNzKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgY19ib29sCisgICAgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CisgICAgICAgIGEgPSBhcnJheShjX2Jvb2wuX3R5cGVfLCBbVHJ1ZV0pCisgICAgICAgIHYgPSB0LmZyb21fYWRkcmVzcyhhLmJ1ZmZlcl9pbmZvKClbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodi52YWx1ZSwgYVswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHYpIGlzIHQpCisgICAgICAgIGFbMF0gPSBGYWxzZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudmFsdWUsIGFbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSh2KSBpcyB0KQogCiAgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKICAgICAgICAgIyBjX2ludCgpIGNhbiBiZSBpbml0aWFsaXplZCBmcm9tIFB5dGhvbidzIGludCwgYW5kIGNfaW50LgpAQCAtMjI3LDggKzIyOSw5IEBACiAgICAgICAgICAgICBpZiAoaGFzYXR0cih0LCAiX19jdHlwZV9sZV9fIikpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHQuX19jdHlwZV9sZV9fLCBiaWdfaW50KQogCi0jIyAgICBkZWYgdGVzdF9wZXJmKHNlbGYpOgotIyMgICAgICAgIGNoZWNrX3BlcmYoKQorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9wZXJmKHNlbGYpOgorICAgICAgICBjaGVja19wZXJmKCkKIAogZnJvbSBjdHlwZXMgaW1wb3J0IF9TaW1wbGVDRGF0YQogY2xhc3MgY19pbnRfUyhfU2ltcGxlQ0RhdGEpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X29iamVjdHMucHkKaW5kZXggZjA3NWMyMC4uZWY3YjIwYiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfb2JqZWN0cy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9vYmplY3RzLnB5CkBAIC01OSwxMiArNTksOSBAQAogaW1wb3J0IGN0eXBlcy50ZXN0LnRlc3Rfb2JqZWN0cwogCiBjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgaWYgc3lzLmhleHZlcnNpb24gPiAweDAyMDQwMDAwOgotICAgICAgICAjIFB5dGhvbiAyLjMgaGFzIG5vIEVMTElQU0lTIGZsYWcsIHNvIHdlIGRvbid0IHRlc3Qgd2l0aCB0aGlzCi0gICAgICAgICMgdmVyc2lvbjoKLSAgICAgICAgZGVmIHRlc3Qoc2VsZik6Ci0gICAgICAgICAgICBkb2N0ZXN0LnRlc3Rtb2QoY3R5cGVzLnRlc3QudGVzdF9vYmplY3RzKQorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBmYWlsdXJlcywgdGVzdHMgPSBkb2N0ZXN0LnRlc3Rtb2QoY3R5cGVzLnRlc3QudGVzdF9vYmplY3RzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZhaWx1cmVzLCAnZG9jdGVzdHMgZmFpbGVkLCBzZWUgb3V0cHV0IGFib3ZlJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpZiBzeXMuaGV4dmVyc2lvbiA+IDB4MDIwNDAwMDA6Ci0gICAgICAgIGRvY3Rlc3QudGVzdG1vZChjdHlwZXMudGVzdC50ZXN0X29iamVjdHMpCisgICAgZG9jdGVzdC50ZXN0bW9kKGN0eXBlcy50ZXN0LnRlc3Rfb2JqZWN0cykKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wYXJhbWV0ZXJzLnB5CmluZGV4IDEyYjViZDUuLmU1NmJjY2YgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BhcmFtZXRlcnMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGFyYW1ldGVycy5weQpAQCAtMSw0ICsxLDUgQEAKIGltcG9ydCB1bml0dGVzdCwgc3lzCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCiBjbGFzcyBTaW1wbGVUeXBlc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzUsMTAgKzM2LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDVk9JRFAuZnJvbV9wYXJhbSgiYWJjIiksICJhYmNhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKENDSEFSUC5mcm9tX3BhcmFtKCJhYmMiKSwgImFiY2FiY2FiY2FiYyIpCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfd2NoYXJfcAotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXJfcCcpCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc19jX3djaGFyX3Aoc2VsZik6CisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBjX3djaGFyX3AKIAogICAgICAgICBjbGFzcyBDV0NIQVJQKGNfd2NoYXJfcCk6CiAgICAgICAgICAgICBkZWYgZnJvbV9wYXJhbShjbHMsIHZhbHVlKToKQEAgLTY2LDEzICs2Niw5IEBACiAgICAgICAgIGEgPSBjX2NoYXJfcChiIjEyMyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY19jaGFyX3AuZnJvbV9wYXJhbShhKSwgYSkKIAorICAgIEBuZWVkX3N5bWJvbCgnY193Y2hhcl9wJykKICAgICBkZWYgdGVzdF9jd19zdHJpbmdzKHNlbGYpOgotICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgYnlyZWYKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNfd2NoYXJfcAotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0jIyAgICAgICAgICAgIHByaW50ICIoTm8gY193Y2hhcl9wKSIKLSAgICAgICAgICAgIHJldHVybgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgYnlyZWYsIGNfd2NoYXJfcAogCiAgICAgICAgIGNfd2NoYXJfcC5mcm9tX3BhcmFtKCIxMjMiKQogCkBAIC0xMzksOSArMTM1LDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBjX2xvbmcqMykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBMUElOVC5mcm9tX3BhcmFtLCBjX3VpbnQqMykKIAotIyMgICAgZGVmIHRlc3RfcGVyZm9ybWFuY2Uoc2VsZik6Ci0jIyAgICAgICAgY2hlY2tfcGVyZigpCi0KICAgICBkZWYgdGVzdF9ub2N0eXBlc19hcmd0eXBlKHNlbGYpOgogICAgICAgICBpbXBvcnQgX2N0eXBlc190ZXN0CiAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBDRExMLCBjX3ZvaWRfcCwgQXJndW1lbnRFcnJvcgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGVwMzExOC5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BlcDMxMTgucHkKaW5kZXggYWQxM2IwMS4uMzJmODAyYyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGVwMzExOC5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wZXAzMTE4LnB5CkBAIC05Niw2ICs5Niw5IEBACiBjbGFzcyBhVW5pb24oVW5pb24pOgogICAgIF9maWVsZHNfID0gWygiYSIsIGNfaW50KV0KIAorY2xhc3MgU3RydWN0V2l0aEFycmF5cyhTdHJ1Y3R1cmUpOgorICAgIF9maWVsZHNfID0gWygieCIsIGNfbG9uZyAqIDMgKiAyKSwgKCJ5IiwgUG9pbnQgKiA0KV0KKwogY2xhc3MgSW5jb21wbGV0ZShTdHJ1Y3R1cmUpOgogICAgIHBhc3MKIApAQCAtMTQ1LDEwICsxNDgsMTAgQEAKIAogICAgICMjIGFycmF5cyBhbmQgcG9pbnRlcnMKIAotICAgIChjX2RvdWJsZSAqIDQsICAgICAgICAgICAgICAiKDQpPGQiLCAgICAgICAgICAgICAgICAoNCwpLCAgICAgICAgICAgY19kb3VibGUpLAotICAgIChjX2Zsb2F0ICogNCAqIDMgKiAyLCAgICAgICAiKDIsMyw0KTxmIiwgICAgICAgICAgICAoMiwzLDQpLCAgICAgICAgY19mbG9hdCksCi0gICAgKFBPSU5URVIoY19zaG9ydCkgKiAyLCAgICAgICIoMikmPGgiLCAgICAgICAgICAgICAgICgyLCksICAgICAgICAgICBQT0lOVEVSKGNfc2hvcnQpKSwKLSAgICAoUE9JTlRFUihjX3Nob3J0KSAqIDIgKiAzLCAgIigzLDIpJjxoIiwgICAgICAgICAgICAgKDMsMiwpLCAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAorICAgIChjX2RvdWJsZSAqIDQsICAgICAgICAgICAgICAiPGQiLCAgICAgICAgICAgICAgICAgICAoNCwpLCAgICAgICAgICAgY19kb3VibGUpLAorICAgIChjX2Zsb2F0ICogNCAqIDMgKiAyLCAgICAgICAiPGYiLCAgICAgICAgICAgICAgICAgICAoMiwzLDQpLCAgICAgICAgY19mbG9hdCksCisgICAgKFBPSU5URVIoY19zaG9ydCkgKiAyLCAgICAgICImPGgiLCAgICAgICAgICAgICAgICAgICgyLCksICAgICAgICAgICBQT0lOVEVSKGNfc2hvcnQpKSwKKyAgICAoUE9JTlRFUihjX3Nob3J0KSAqIDIgKiAzLCAgIiY8aCIsICAgICAgICAgICAgICAgICAgKDMsMiwpLCAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAogICAgIChQT0lOVEVSKGNfc2hvcnQgKiAyKSwgICAgICAiJigyKTxoIiwgICAgICAgICAgICAgICAoKSwgICAgICAgICAgIFBPSU5URVIoY19zaG9ydCkpLAogCiAgICAgIyMgc3RydWN0dXJlcyBhbmQgdW5pb25zCkBAIC0xNjAsNiArMTYzLDkgQEAKICAgICAoRW1wdHlTdHJ1Y3QsICAgICAgICAgICAgICAgIlR7fSIsICAgICAgICAgICAgICAgICAgKCksICAgICAgICAgICBFbXB0eVN0cnVjdCksCiAgICAgIyB0aGUgcGVwIGRvZXMndCBzdXBwb3J0IHVuaW9ucwogICAgIChhVW5pb24sICAgICAgICAgICAgICAgICAgICAiQiIsICAgICAgICAgICAgICAgICAgICAoKSwgICAgICAgICAgIGFVbmlvbiksCisgICAgIyBzdHJ1Y3R1cmUgd2l0aCBzdWItYXJyYXlzCisgICAgKFN0cnVjdFdpdGhBcnJheXMsICAgICAgICAgICJUeygyLDMpPGw6eDooNClUezxsOng6PGw6eTp9Onk6fSIsICgpLCAgU3RydWN0V2l0aEFycmF5cyksCisgICAgKFN0cnVjdFdpdGhBcnJheXMgKiAzLCAgICAgICJUeygyLDMpPGw6eDooNClUezxsOng6PGw6eTp9Onk6fSIsICgzLCksICBTdHJ1Y3RXaXRoQXJyYXlzKSwKIAogICAgICMjIHBvaW50ZXIgdG8gaW5jb21wbGV0ZSBzdHJ1Y3R1cmUKICAgICAoSW5jb21wbGV0ZSwgICAgICAgICAgICAgICAgIkIiLCAgICAgICAgICAgICAgICAgICAgKCksICAgICAgICAgICBJbmNvbXBsZXRlKSwKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3BpY2tsaW5nLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKaW5kZXggOGM5MTIyMi4uYzRhNzliOSAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcGlja2xpbmcucHkKQEAgLTE0LDkgKzE0LDkgQEAKIGNsYXNzIFkoWCk6CiAgICAgX2ZpZWxkc18gPSBbKCJzdHIiLCBjX2NoYXJfcCldCiAKLWNsYXNzIFBpY2tsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUGlja2xlVGVzdDoKICAgICBkZWYgZHVtcHMoc2VsZiwgaXRlbSk6Ci0gICAgICAgIHJldHVybiBwaWNrbGUuZHVtcHMoaXRlbSkKKyAgICAgICAgcmV0dXJuIHBpY2tsZS5kdW1wcyhpdGVtLCBzZWxmLnByb3RvKQogCiAgICAgZGVmIGxvYWRzKHNlbGYsIGl0ZW0pOgogICAgICAgICByZXR1cm4gcGlja2xlLmxvYWRzKGl0ZW0pCkBAIC02NywxNyArNjcsMTUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGxhbWJkYTogc2VsZi5kdW1wcyhpdGVtKSkKIAogICAgIGRlZiB0ZXN0X3djaGFyKHNlbGYpOgotICAgICAgICBwaWNrbGUuZHVtcHMoY19jaGFyKGIieCIpKQorICAgICAgICBzZWxmLmR1bXBzKGNfY2hhcihiIngiKSkKICAgICAgICAgIyBJc3N1ZSA1MDQ5Ci0gICAgICAgIHBpY2tsZS5kdW1wcyhjX3djaGFyKCJ4IikpCisgICAgICAgIHNlbGYuZHVtcHMoY193Y2hhcigieCIpKQogCi1jbGFzcyBQaWNrbGVUZXN0XzEoUGlja2xlVGVzdCk6Ci0gICAgZGVmIGR1bXBzKHNlbGYsIGl0ZW0pOgotICAgICAgICByZXR1cm4gcGlja2xlLmR1bXBzKGl0ZW0sIDEpCi0KLWNsYXNzIFBpY2tsZVRlc3RfMihQaWNrbGVUZXN0KToKLSAgICBkZWYgZHVtcHMoc2VsZiwgaXRlbSk6Ci0gICAgICAgIHJldHVybiBwaWNrbGUuZHVtcHMoaXRlbSwgMikKK2ZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgIG5hbWUgPSAnUGlja2xlVGVzdF8lcycgJSBwcm90bworICAgIGdsb2JhbHMoKVtuYW1lXSA9IHR5cGUobmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChQaWNrbGVUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7J3Byb3RvJzogcHJvdG99KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcG9pbnRlcnMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wb2ludGVycy5weQppbmRleCBmOGVmMGFiLi42ZWVhNThmIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wb2ludGVycy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wb2ludGVycy5weQpAQCAtMTg4LDUgKzE4OCwyMyBAQAogICAgICAgICAgICAgbXRoID0gV0lORlVOQ1RZUEUoTm9uZSkoNDIsICJuYW1lIiwgKCksIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJvb2wobXRoKSwgVHJ1ZSkKIAorICAgIGRlZiB0ZXN0X3BvaW50ZXJfdHlwZV9uYW1lKHNlbGYpOgorICAgICAgICBMYXJnZU5hbWVkVHlwZSA9IHR5cGUoJ1QnICogMiAqKiAyNSwgKFN0cnVjdHVyZSwpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFBPSU5URVIoTGFyZ2VOYW1lZFR5cGUpKQorCisgICAgICAgICMgdG8gbm90IGxlYWsgcmVmZXJlbmNlcywgd2UgbXVzdCBjbGVhbiBfcG9pbnRlcl90eXBlX2NhY2hlCisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBfcG9pbnRlcl90eXBlX2NhY2hlCisgICAgICAgIGRlbCBfcG9pbnRlcl90eXBlX2NhY2hlW0xhcmdlTmFtZWRUeXBlXQorCisgICAgZGVmIHRlc3RfcG9pbnRlcl90eXBlX3N0cl9uYW1lKHNlbGYpOgorICAgICAgICBsYXJnZV9zdHJpbmcgPSAnVCcgKiAyICoqIDI1CisgICAgICAgIFAgPSBQT0lOVEVSKGxhcmdlX3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFApCisKKyAgICAgICAgIyB0byBub3QgbGVhayByZWZlcmVuY2VzLCB3ZSBtdXN0IGNsZWFuIF9wb2ludGVyX3R5cGVfY2FjaGUKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKKyAgICAgICAgZGVsIF9wb2ludGVyX3R5cGVfY2FjaGVbaWQoUCldCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9wcm90b3R5cGVzLnB5CmluZGV4IDZlZjFiMWIuLjgxOGMxMTEgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3Byb3RvdHlwZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHJvdG90eXBlcy5weQpAQCAtMSw0ICsxLDUgQEAKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogaW1wb3J0IHVuaXR0ZXN0CiAKICMgSU1QT1JUQU5UIElORk86CkBAIC0xMzUsMTMgKzEzNiwxNCBAQAogICAgICAgICBmdW5jKHBvaW50ZXIoY19pbnQoKSkpCiAgICAgICAgIGZ1bmMoKGNfaW50ICogMykoKSkKIAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX3djaGFyX3AKLSAgICAgICAgZXhjZXB0IE5hbWVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhjX3djaGFyX3AoTm9uZSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXJfcCcpCisgICAgZGVmIHRlc3RfY192b2lkX3BfYXJnX3dpdGhfY193Y2hhcl9wKHNlbGYpOgorICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gY192b2lkX3AsCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY193Y2hhcl9wKCIxMjMiKSkpCiAKICAgICBkZWYgdGVzdF9pbnN0YW5jZShzZWxmKToKICAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcApAQCAtMTU2LDUxICsxNTgsNDcgQEAKICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKFgoKSkpCiAKLXRyeToKLSAgICBjX3djaGFyCi1leGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgY2xhc3MgV0NoYXJQb2ludGVyc1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0BuZWVkX3N5bWJvbCgnY193Y2hhcicpCitjbGFzcyBXQ2hhclBvaW50ZXJzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfaW50Ci0gICAgICAgICAgICBmdW5jLmFyZ3R5cGVzID0gTm9uZQorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX2ludAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gTm9uZQogCiAKLSAgICAgICAgZGVmIHRlc3RfUE9JTlRFUl9jX3djaGFyX2FyZyhzZWxmKToKLSAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCisgICAgZGVmIHRlc3RfUE9JTlRFUl9jX3djaGFyX2FyZyhzZWxmKToKKyAgICAgICAgZnVuYyA9IHRlc3RkbGwuX3Rlc3RmdW5jX3BfcAorICAgICAgICBmdW5jLnJlc3R5cGUgPSBjX3djaGFyX3AKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2NoYXJfcCgiMTIzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3didWZmZXIoIjEyMyIpKSkKLSAgICAgICAgICAgIGNhID0gY193Y2hhcigiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2J1ZmZlcigiMTIzIikpKQorICAgICAgICBjYSA9IGNfd2NoYXIoImEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhwb2ludGVyKGNhKSlbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImEiLCBmdW5jKGJ5cmVmKGNhKSlbMF0pCiAKLSAgICAgICAgZGVmIHRlc3RfY193Y2hhcl9wX2FyZyhzZWxmKToKLSAgICAgICAgICAgIGZ1bmMgPSB0ZXN0ZGxsLl90ZXN0ZnVuY19wX3AKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IGNfd2NoYXJfcCwKKyAgICBkZWYgdGVzdF9jX3djaGFyX3BfYXJnKHNlbGYpOgorICAgICAgICBmdW5jID0gdGVzdGRsbC5fdGVzdGZ1bmNfcF9wCisgICAgICAgIGZ1bmMucmVzdHlwZSA9IGNfd2NoYXJfcAorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gY193Y2hhcl9wLAogCi0gICAgICAgICAgICBjX3djaGFyX3AuZnJvbV9wYXJhbSgiMTIzIikKKyAgICAgICAgY193Y2hhcl9wLmZyb21fcGFyYW0oIjEyMyIpCiAKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgZnVuYyhOb25lKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBmdW5jKGNfd2NoYXJfcChOb25lKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIxMjMiLCBmdW5jKGNfd2NoYXJfcCgiMTIzIikpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoIjEyMyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5vbmUsIGZ1bmMoY193Y2hhcl9wKE5vbmUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3djaGFyX3AoIjEyMyIpKSkKIAotICAgICAgICAgICAgIyBYWFggQ3VycmVudGx5LCB0aGVzZSByYWlzZSBUeXBlRXJyb3JzLCBhbHRob3VnaCB0aGV5IHNob3VsZG4ndDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEyMyIsIGZ1bmMoY193YnVmZmVyKCIxMjMiKSkpCi0gICAgICAgICAgICBjYSA9IGNfd2NoYXIoImEiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMoYnlyZWYoY2EpKVswXSkKKyAgICAgICAgIyBYWFggQ3VycmVudGx5LCB0aGVzZSByYWlzZSBUeXBlRXJyb3JzLCBhbHRob3VnaCB0aGV5IHNob3VsZG4ndDoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiMTIzIiwgZnVuYyhjX3didWZmZXIoIjEyMyIpKSkKKyAgICAgICAgY2EgPSBjX3djaGFyKCJhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYSIsIGZ1bmMocG9pbnRlcihjYSkpWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhIiwgZnVuYyhieXJlZihjYSkpWzBdKQogCiBjbGFzcyBBcnJheVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3B5dGhvbl9hcGkucHkKaW5kZXggNWViODgyYS4uOWMxMzc0NiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcHl0aG9uX2FwaS5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9weXRob25fYXBpLnB5CkBAIC0xLDcgKzEsNiBAQAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIGltcG9ydCB1bml0dGVzdCwgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBUaGlzIHNlY3Rpb24gc2hvdWxkIGJlIG1vdmVkIGludG8gY3R5cGVzXF9faW5pdF9fLnB5LCB3aGVuIGl0J3MgcmVhZHkuCkBAIC0zOSwyNCArMzgsMjEgQEAKICAgICAgICAgZGVsIHB5b2IKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMocyksIHJlZmNudCkKIAotICAgIGlmIGlzX3Jlc291cmNlX2VuYWJsZWQoInJlZmNvdW50Iik6Ci0gICAgICAgICMgVGhpcyB0ZXN0IGlzIHVucmVsaWFibGUsIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdGhhdCBjb2RlIGluCi0gICAgICAgICMgdW5pdHRlc3QgY2hhbmdlcyB0aGUgcmVmY291bnQgb2YgdGhlICc0MicgaW50ZWdlci4gIFNvLCBpdAotICAgICAgICAjIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCi0gICAgICAgIGRlZiB0ZXN0X1B5TG9uZ19Mb25nKHNlbGYpOgotICAgICAgICAgICAgcmVmNDIgPSBncmMoNDIpCi0gICAgICAgICAgICBweXRob25hcGkuUHlMb25nX0Zyb21Mb25nLnJlc3R5cGUgPSBweV9vYmplY3QKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aG9uYXBpLlB5TG9uZ19Gcm9tTG9uZyg0MiksIDQyKQorICAgIEBzdXBwb3J0LnJlZmNvdW50X3Rlc3QKKyAgICBkZWYgdGVzdF9QeUxvbmdfTG9uZyhzZWxmKToKKyAgICAgICAgcmVmNDIgPSBncmMoNDIpCisgICAgICAgIHB5dGhvbmFwaS5QeUxvbmdfRnJvbUxvbmcucmVzdHlwZSA9IHB5X29iamVjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5dGhvbmFwaS5QeUxvbmdfRnJvbUxvbmcoNDIpLCA0MikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKIAotICAgICAgICAgICAgcHl0aG9uYXBpLlB5TG9uZ19Bc0xvbmcuYXJndHlwZXMgPSAocHlfb2JqZWN0LCkKLSAgICAgICAgICAgIHB5dGhvbmFwaS5QeUxvbmdfQXNMb25nLnJlc3R5cGUgPSBjX2xvbmcKKyAgICAgICAgcHl0aG9uYXBpLlB5TG9uZ19Bc0xvbmcuYXJndHlwZXMgPSAocHlfb2JqZWN0LCkKKyAgICAgICAgcHl0aG9uYXBpLlB5TG9uZ19Bc0xvbmcucmVzdHlwZSA9IGNfbG9uZwogCi0gICAgICAgICAgICByZXMgPSBweXRob25hcGkuUHlMb25nX0FzTG9uZyg0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKHJlcyksIHJlZjQyICsgMSkKLSAgICAgICAgICAgIGRlbCByZXMKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ3JjKDQyKSwgcmVmNDIpCisgICAgICAgIHJlcyA9IHB5dGhvbmFwaS5QeUxvbmdfQXNMb25nKDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdyYyhyZXMpLCByZWY0MiArIDEpCisgICAgICAgIGRlbCByZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChncmMoNDIpLCByZWY0MikKIAogICAgIEBzdXBwb3J0LnJlZmNvdW50X3Rlc3QKICAgICBkZWYgdGVzdF9QeU9ial9Gcm9tUHRyKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3JhbmRvbV90aGluZ3MucHkKaW5kZXggNTE1YWNmNS4uZWU1YjIxMiAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfcmFuZG9tX3RoaW5ncy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9yYW5kb21fdGhpbmdzLnB5CkBAIC01LDIzICs1LDIyIEBACiAgICAgNDIgLyBhcmcKICAgICByYWlzZSBWYWx1ZUVycm9yKGFyZykKIAotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgJ1dpbmRvd3Mtc3BlY2lmaWMgdGVzdCcpCitjbGFzcyBjYWxsX2Z1bmN0aW9uX1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIF9jdHlwZXMuY2FsbF9mdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBwcml2YXRlLCBidXQgdXNlZCBieQorICAgICMgR2FyeSBCaXNocCdzIHJlYWRsaW5lIG1vZHVsZS4gIElmIHdlIGhhdmUgaXQsIHdlIG11c3QgdGVzdCBpdCBhcyB3ZWxsLgogCi0gICAgY2xhc3MgY2FsbF9mdW5jdGlvbl9UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICMgX2N0eXBlcy5jYWxsX2Z1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgYW5kIHByaXZhdGUsIGJ1dCB1c2VkIGJ5Ci0gICAgICAgICMgR2FyeSBCaXNocCdzIHJlYWRsaW5lIG1vZHVsZS4gIElmIHdlIGhhdmUgaXQsIHdlIG11c3QgdGVzdCBpdCBhcyB3ZWxsLgorICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBmcm9tIF9jdHlwZXMgaW1wb3J0IGNhbGxfZnVuY3Rpb24KKyAgICAgICAgd2luZGxsLmtlcm5lbDMyLkxvYWRMaWJyYXJ5QS5yZXN0eXBlID0gY192b2lkX3AKKyAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLmFyZ3R5cGVzID0gY192b2lkX3AsIGNfY2hhcl9wCisgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5yZXN0eXBlID0gY192b2lkX3AKIAotICAgICAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgICAgIGZyb20gX2N0eXBlcyBpbXBvcnQgY2FsbF9mdW5jdGlvbgotICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkxvYWRMaWJyYXJ5QS5yZXN0eXBlID0gY192b2lkX3AKLSAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcy5hcmd0eXBlcyA9IGNfdm9pZF9wLCBjX2NoYXJfcAotICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldFByb2NBZGRyZXNzLnJlc3R5cGUgPSBjX3ZvaWRfcAorICAgICAgICBoZGxsID0gd2luZGxsLmtlcm5lbDMyLkxvYWRMaWJyYXJ5QShiImtlcm5lbDMyIikKKyAgICAgICAgZnVuY2FkZHIgPSB3aW5kbGwua2VybmVsMzIuR2V0UHJvY0FkZHJlc3MoaGRsbCwgYiJHZXRNb2R1bGVIYW5kbGVBIikKIAotICAgICAgICAgICAgaGRsbCA9IHdpbmRsbC5rZXJuZWwzMi5Mb2FkTGlicmFyeUEoYiJrZXJuZWwzMiIpCi0gICAgICAgICAgICBmdW5jYWRkciA9IHdpbmRsbC5rZXJuZWwzMi5HZXRQcm9jQWRkcmVzcyhoZGxsLCBiIkdldE1vZHVsZUhhbmRsZUEiKQotCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxfZnVuY3Rpb24oZnVuY2FkZHIsIChOb25lLCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEoTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbF9mdW5jdGlvbihmdW5jYWRkciwgKE5vbmUsKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRsbC5rZXJuZWwzMi5HZXRNb2R1bGVIYW5kbGVBKE5vbmUpKQogCiBjbGFzcyBDYWxsYmFja1RyYWNiYWNrVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgV2hlbiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluIGEgY3R5cGVzIGNhbGxiYWNrIGZ1bmN0aW9uLCB0aGUgQwpAQCAtMzEsNyArMzAsNyBAQAogICAgICMgdmFsdWUgaXMgcHJpbnRlZCBjb3JyZWN0bHkuCiAgICAgIwogICAgICMgQ2hhbmdlZCBpbiAwLjkuMzogTm8gbG9uZ2VyIGlzICcoaW4gY2FsbGJhY2spJyBwcmVwZW5kZWQgdG8gdGhlCi0gICAgIyBlcnJvciBtZXNzYWdlIC0gaW5zdGVhZCBhIGFkZGl0aW9uYWwgZnJhbWUgZm9yIHRoZSBDIGNvZGUgaXMKKyAgICAjIGVycm9yIG1lc3NhZ2UgLSBpbnN0ZWFkIGFuIGFkZGl0aW9uYWwgZnJhbWUgZm9yIHRoZSBDIGNvZGUgaXMKICAgICAjIGNyZWF0ZWQsIHRoZW4gYSBmdWxsIHRyYWNlYmFjayBwcmludGVkLiAgV2hlbiBTeXN0ZW1FeGl0IGlzCiAgICAgIyByYWlzZWQgaW4gYSBjYWxsYmFjayBmdW5jdGlvbiwgdGhlIGludGVycHJldGVyIGV4aXRzLgogCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc2xpY2luZy5weQppbmRleCA4MmZlZTk2Li4yNDBkYzBjIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zbGljaW5nLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3NsaWNpbmcucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gY3R5cGVzIGltcG9ydCAqCitmcm9tIGN0eXBlcy50ZXN0IGltcG9ydCBuZWVkX3N5bWJvbAogCiBpbXBvcnQgX2N0eXBlc190ZXN0CiAKQEAgLTEyNSw0NCArMTI2LDQwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsyOjU6LTNdLCBzWzI6NTotM10pCiAKIAotICAgIHRyeToKLSAgICAgICAgY193Y2hhcgotICAgIGV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICBkZWYgdGVzdF93Y2hhcl9wdHIoc2VsZik6Ci0gICAgICAgICAgICBzID0gImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XDAiCisgICAgQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKKyAgICBkZWYgdGVzdF93Y2hhcl9wdHIoc2VsZik6CisgICAgICAgIHMgPSAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcMCIKIAotICAgICAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCi0gICAgICAgICAgICBkbGwubXlfd2NzZHVwLnJlc3R5cGUgPSBQT0lOVEVSKGNfd2NoYXIpCi0gICAgICAgICAgICBkbGwubXlfd2NzZHVwLmFyZ3R5cGVzID0gUE9JTlRFUihjX3djaGFyKSwKLSAgICAgICAgICAgIGRsbC5teV9mcmVlLnJlc3R5cGUgPSBOb25lCi0gICAgICAgICAgICByZXMgPSBkbGwubXlfd2NzZHVwKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpXSwgcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyk6XSwgcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0xOi0xOi0xXSwgc1s6Oi0xXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0xOjU6LTddLCBzWzo1Oi03XSkKKyAgICAgICAgZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCisgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY193Y2hhcikKKyAgICAgICAgZGxsLm15X3djc2R1cC5hcmd0eXBlcyA9IFBPSU5URVIoY193Y2hhciksCisgICAgICAgIGRsbC5teV9mcmVlLnJlc3R5cGUgPSBOb25lCisgICAgICAgIHJlcyA9IGRsbC5teV93Y3NkdXAocykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbOmxlbihzKV0sIHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyk6XSwgcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbbGVuKHMpLTE6LTE6LTFdLCBzWzo6LTFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMTo1Oi03XSwgc1s6NTotN10pCiAKLSAgICAgICAgICAgIGltcG9ydCBvcGVyYXRvcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLCBzbGljZSgwLCA1KSwgImFiY2RlIikKLSAgICAgICAgICAgIGRsbC5teV9mcmVlKHJlcykKKyAgICAgICAgaW1wb3J0IG9wZXJhdG9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLCBzbGljZSgwLCA1KSwgImFiY2RlIikKKyAgICAgICAgZGxsLm15X2ZyZWUocmVzKQogCi0gICAgICAgICAgICBpZiBzaXplb2YoY193Y2hhcikgPT0gc2l6ZW9mKGNfc2hvcnQpOgotICAgICAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19zaG9ydCkKLSAgICAgICAgICAgIGVsaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX2ludCk6Ci0gICAgICAgICAgICAgICAgZGxsLm15X3djc2R1cC5yZXN0eXBlID0gUE9JTlRFUihjX2ludCkKLSAgICAgICAgICAgIGVsaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX2xvbmcpOgotICAgICAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19sb25nKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHJlcyA9IGRsbC5teV93Y3NkdXAocykKLSAgICAgICAgICAgIHRtcGwgPSBsaXN0KHJhbmdlKG9yZCgiYSIpLCBvcmQoInoiKSsxKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyktMV0sIHRtcGwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1s6bGVuKHMpLTE6XSwgdG1wbCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0yOi0xOi0xXSwgdG1wbFs6Oi0xXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0yOjU6LTddLCB0bXBsWzo1Oi03XSkKLSAgICAgICAgICAgIGRsbC5teV9mcmVlKHJlcykKKyAgICAgICAgaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX3Nob3J0KToKKyAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19zaG9ydCkKKyAgICAgICAgZWxpZiBzaXplb2YoY193Y2hhcikgPT0gc2l6ZW9mKGNfaW50KToKKyAgICAgICAgICAgIGRsbC5teV93Y3NkdXAucmVzdHlwZSA9IFBPSU5URVIoY19pbnQpCisgICAgICAgIGVsaWYgc2l6ZW9mKGNfd2NoYXIpID09IHNpemVvZihjX2xvbmcpOgorICAgICAgICAgICAgZGxsLm15X3djc2R1cC5yZXN0eXBlID0gUE9JTlRFUihjX2xvbmcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdQb2ludGVycyB0byBjX3djaGFyIGFyZSBub3Qgc3VwcG9ydGVkJykKKyAgICAgICAgcmVzID0gZGxsLm15X3djc2R1cChzKQorICAgICAgICB0bXBsID0gbGlzdChyYW5nZShvcmQoImEiKSwgb3JkKCJ6IikrMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyktMV0sIHRtcGwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzpsZW4ocyktMTpdLCB0bXBsKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1tsZW4ocyktMjotMTotMV0sIHRtcGxbOjotMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzW2xlbihzKS0yOjU6LTddLCB0bXBsWzo1Oi03XSkKKyAgICAgICAgZGxsLm15X2ZyZWUocmVzKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3MucHkgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJpbmdzLnB5CmluZGV4IDlkYzJhMjkuLmM3YmZiZGEgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cmluZ3MucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RyaW5ncy5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiAKIGNsYXNzIFN0cmluZ0FycmF5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgpAQCAtNTMsMzYgKzU0LDMzIEBACiAjIyAgICAgICAgcHJpbnQgQlVGLmZyb21fcGFyYW0oY19jaGFyX3AoInB5dGhvbiIpKQogIyMgICAgICAgIHByaW50IEJVRi5mcm9tX3BhcmFtKEJVRigqInB5dGgiKSkKIAotdHJ5OgotICAgIGNfd2NoYXIKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgcGFzcwotZWxzZToKLSAgICBjbGFzcyBXU3RyaW5nQXJyYXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiB0ZXN0KHNlbGYpOgotICAgICAgICAgICAgQlVGID0gY193Y2hhciAqIDQKK0BuZWVkX3N5bWJvbCgnY193Y2hhcicpCitjbGFzcyBXU3RyaW5nQXJyYXlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIEJVRiA9IGNfd2NoYXIgKiA0CiAKLSAgICAgICAgICAgIGJ1ZiA9IEJVRigiYSIsICJiIiwgImMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJhYmMiKQorICAgICAgICBidWYgPSBCVUYoImEiLCAiYiIsICJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWYudmFsdWUsICJhYmMiKQogCi0gICAgICAgICAgICBidWYudmFsdWUgPSAiQUJDRCIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAiQUJDRCIpCisgICAgICAgIGJ1Zi52YWx1ZSA9ICJBQkNEIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIkFCQ0QiKQogCi0gICAgICAgICAgICBidWYudmFsdWUgPSAieCIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAieCIpCisgICAgICAgIGJ1Zi52YWx1ZSA9ICJ4IgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgIngiKQogCi0gICAgICAgICAgICBidWZbMV0gPSAiWiIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLnZhbHVlLCAieFpDRCIpCisgICAgICAgIGJ1ZlsxXSA9ICJaIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zi52YWx1ZSwgInhaQ0QiKQogCi0gICAgICAgIEB1bml0dGVzdC5za2lwSWYoc2l6ZW9mKGNfd2NoYXIpIDwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAic2l6ZW9mKHdjaGFyX3QpIGlzIHNtYWxsZXIgdGhhbiA0IGJ5dGVzIikKLSAgICAgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgotICAgICAgICAgICAgdSA9IGNocigweDEwZmZmZikKLSAgICAgICAgICAgIHcgPSBjX3djaGFyKHUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcudmFsdWUsIHUpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzaXplb2YoY193Y2hhcikgPCA0LAorICAgICAgICAgICAgICAgICAgICAgInNpemVvZih3Y2hhcl90KSBpcyBzbWFsbGVyIHRoYW4gNCBieXRlcyIpCisgICAgZGVmIHRlc3Rfbm9uYm1wKHNlbGYpOgorICAgICAgICB1ID0gY2hyKDB4MTBmZmZmKQorICAgICAgICB3ID0gY193Y2hhcih1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcudmFsdWUsIHUpCiAKIGNsYXNzIFN0cmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgWFhfdGVzdF9iYXNpY19zdHJpbmdzKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9iYXNpY19zdHJpbmdzKHNlbGYpOgogICAgICAgICBjcyA9IGNfc3RyaW5nKCJhYmNkZWYiKQogCiAgICAgICAgICMgQ2Fubm90IGNhbGwgbGVuIG9uIGEgY19zdHJpbmcgYW55IGxvbmdlcgpAQCAtMTA4LDcgKzEwNiw4IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3N0cmluZywgIjEyMyIpCiAKLSAgICBkZWYgWFhfdGVzdF9zaXplZF9zdHJpbmdzKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9zaXplZF9zdHJpbmdzKHNlbGYpOgogCiAgICAgICAgICMgTmV3IGluIHJlbGVhc2VzIGxhdGVyIHRoYW4gMC40LjA6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY19zdHJpbmcsIE5vbmUpCkBAIC0xMjUsNyArMTI0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3N0cmluZygyKS5yYXdbLTFdLCAiXDAwMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNfc3RyaW5nKDIpLnJhdyksIDIpCiAKLSAgICBkZWYgWFhfdGVzdF9pbml0aWFsaXplZF9zdHJpbmdzKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9pbml0aWFsaXplZF9zdHJpbmdzKHNlbGYpOgogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY19zdHJpbmcoImFiIiwgNCkucmF3WzoyXSwgImFiIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3N0cmluZygiYWIiLCA0KS5yYXdbOjI6XSwgImFiIikKQEAgLTEzNCw3ICsxMzQsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfc3RyaW5nKCJhYiIsIDQpLnJhd1stMV0sICJcMDAwIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3N0cmluZygiYWIiLCAyKS5yYXcsICJhXDAwMCIpCiAKLSAgICBkZWYgWFhfdGVzdF90b29sb25nKHNlbGYpOgorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF90b29sb25nKHNlbGYpOgogICAgICAgICBjcyA9IGNfc3RyaW5nKCJhYmNkZWYiKQogICAgICAgICAjIE11Y2ggdG9vIGxvbmcgc3RyaW5nOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBjcywgInZhbHVlIiwgIjEyMzQ1Njc4OTAxMjM0NSIpCkBAIC0xNDIsNTQgKzE0Myw1MyBAQAogICAgICAgICAjIE9uZSBjaGFyIHRvbyBsb25nIHZhbHVlczoKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgY3MsICJ2YWx1ZSIsICIxMjM0NTY3IikKIAotIyMgICAgZGVmIHRlc3RfcGVyZihzZWxmKToKLSMjICAgICAgICBjaGVja19wZXJmKCkKKyAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCisgICAgZGVmIHRlc3RfcGVyZihzZWxmKToKKyAgICAgICAgY2hlY2tfcGVyZigpCiAKLXRyeToKLSAgICBjX3djaGFyCi1leGNlcHQgTmFtZUVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgY2xhc3MgV1N0cmluZ1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3Rfd2NoYXIoc2VsZik6Ci0gICAgICAgICAgICBjX3djaGFyKCJ4IikKLSAgICAgICAgICAgIHJlcHIoYnlyZWYoY193Y2hhcigieCIpKSkKLSAgICAgICAgICAgIGNfd2NoYXIoIngiKQorQG5lZWRfc3ltYm9sKCdjX3djaGFyJykKK2NsYXNzIFdTdHJpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfd2NoYXIoc2VsZik6CisgICAgICAgIGNfd2NoYXIoIngiKQorICAgICAgICByZXByKGJ5cmVmKGNfd2NoYXIoIngiKSkpCisgICAgICAgIGNfd2NoYXIoIngiKQogCiAKLSAgICAgICAgZGVmIFhfdGVzdF9iYXNpY193c3RyaW5ncyhzZWxmKToKLSAgICAgICAgICAgIGNzID0gY193c3RyaW5nKCJhYmNkZWYiKQorICAgIEB1bml0dGVzdC5za2lwKCd0ZXN0IGRpc2FibGVkJykKKyAgICBkZWYgdGVzdF9iYXNpY193c3RyaW5ncyhzZWxmKToKKyAgICAgICAgY3MgPSBjX3dzdHJpbmcoImFiY2RlZiIpCiAKLSAgICAgICAgICAgICMgWFhYIFRoaXMgYmVoYXZpb3VyIGlzIGFib3V0IHRvIGNoYW5nZToKLSAgICAgICAgICAgICMgbGVuIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlciBpbiBieXRlcy4KLSAgICAgICAgICAgICMgVGhpcyBpbmNsdWRlcyB0aGUgdGVybWluYXRpbmcgTlVMIGNoYXJhY3Rlci4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNzKSwgMTQpCisgICAgICAgICMgWFhYIFRoaXMgYmVoYXZpb3VyIGlzIGFib3V0IHRvIGNoYW5nZToKKyAgICAgICAgIyBsZW4gcmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgaW50ZXJuYWwgYnVmZmVyIGluIGJ5dGVzLgorICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIHRlcm1pbmF0aW5nIE5VTCBjaGFyYWN0ZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKGNzKSwgMTQpCiAKLSAgICAgICAgICAgICMgVGhlIHZhbHVlIHByb3BlcnR5IGlzIHRoZSBzdHJpbmcgdXAgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIE5VTC4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MudmFsdWUsICJhYmNkZWYiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3dzdHJpbmcoImFiY1wwMDBkZWYiKS52YWx1ZSwgImFiYyIpCisgICAgICAgICMgVGhlIHZhbHVlIHByb3BlcnR5IGlzIHRoZSBzdHJpbmcgdXAgdG8gdGhlIGZpcnN0IHRlcm1pbmF0aW5nIE5VTC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy52YWx1ZSwgImFiY2RlZiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY193c3RyaW5nKCJhYmNcMDAwZGVmIikudmFsdWUsICJhYmMiKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNfd3N0cmluZygiYWJjXDAwMGRlZiIpLnZhbHVlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3dzdHJpbmcoImFiY1wwMDBkZWYiKS52YWx1ZSwgImFiYyIpCiAKLSAgICAgICAgICAgICMgVGhlIHJhdyBwcm9wZXJ0eSBpcyB0aGUgdG90YWwgYnVmZmVyIGNvbnRlbnRzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJhYmNkZWZcMDAwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY193c3RyaW5nKCJhYmNcMDAwZGVmIikucmF3LCAiYWJjXDAwMGRlZlwwMDAiKQorICAgICAgICAjIFRoZSByYXcgcHJvcGVydHkgaXMgdGhlIHRvdGFsIGJ1ZmZlciBjb250ZW50czoKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJhYmNkZWZcMDAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjX3dzdHJpbmcoImFiY1wwMDBkZWYiKS5yYXcsICJhYmNcMDAwZGVmXDAwMCIpCiAKLSAgICAgICAgICAgICMgV2UgY2FuIGNoYW5nZSB0aGUgdmFsdWU6Ci0gICAgICAgICAgICBjcy52YWx1ZSA9ICJhYiIKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3MudmFsdWUsICJhYiIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNzLnJhdywgImFiXDAwMFwwMDBcMDAwXDAwMFwwMDAiKQorICAgICAgICAjIFdlIGNhbiBjaGFuZ2UgdGhlIHZhbHVlOgorICAgICAgICBjcy52YWx1ZSA9ICJhYiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy52YWx1ZSwgImFiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcy5yYXcsICJhYlwwMDBcMDAwXDAwMFwwMDBcMDAwIikKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjX3dzdHJpbmcsICIxMjMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY193c3RyaW5nLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNfd3N0cmluZywgIjEyMyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfd3N0cmluZywgMCkKIAotICAgICAgICBkZWYgWF90ZXN0X3Rvb2xvbmcoc2VsZik6Ci0gICAgICAgICAgICBjcyA9IGNfd3N0cmluZygiYWJjZGVmIikKLSAgICAgICAgICAgICMgTXVjaCB0b28gbG9uZyBzdHJpbmc6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBjcywgInZhbHVlIiwgIjEyMzQ1Njc4OTAxMjM0NSIpCisgICAgQHVuaXR0ZXN0LnNraXAoJ3Rlc3QgZGlzYWJsZWQnKQorICAgIGRlZiB0ZXN0X3Rvb2xvbmcoc2VsZik6CisgICAgICAgIGNzID0gY193c3RyaW5nKCJhYmNkZWYiKQorICAgICAgICAjIE11Y2ggdG9vIGxvbmcgc3RyaW5nOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZXRhdHRyLCBjcywgInZhbHVlIiwgIjEyMzQ1Njc4OTAxMjM0NSIpCiAKLSAgICAgICAgICAgICMgT25lIGNoYXIgdG9vIGxvbmcgdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2V0YXR0ciwgY3MsICJ2YWx1ZSIsICIxMjM0NTY3IikKKyAgICAgICAgIyBPbmUgY2hhciB0b28gbG9uZyB2YWx1ZXM6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNldGF0dHIsIGNzLCAidmFsdWUiLCAiMTIzNDU2NyIpCiAKIAogZGVmIHJ1bl90ZXN0KHJlcCwgbXNnLCBmdW5jLCBhcmcpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3N0cnVjdHVyZXMucHkKaW5kZXggODc2MTNhZC4uODRkNDU2YyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfc3RydWN0dXJlcy5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF9zdHJ1Y3R1cmVzLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGN0eXBlcyBpbXBvcnQgKgorZnJvbSBjdHlwZXMudGVzdCBpbXBvcnQgbmVlZF9zeW1ib2wKIGZyb20gc3RydWN0IGltcG9ydCBjYWxjc2l6ZQogaW1wb3J0IF90ZXN0Y2FwaQogCkBAIC0yOTEsMTIgKzI5Miw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5waG9uZS5udW1iZXIsIGIiNTY3OCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5hZ2UsIDUpCiAKKyAgICBAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQogICAgIGRlZiB0ZXN0X3N0cnVjdHVyZXNfd2l0aF93Y2hhcihzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY193Y2hhcgotICAgICAgICBleGNlcHQgTmFtZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuICMgbm8gdW5pY29kZQotCiAgICAgICAgIGNsYXNzIFBlcnNvblcoU3RydWN0dXJlKToKICAgICAgICAgICAgIF9maWVsZHNfID0gWygibmFtZSIsIGNfd2NoYXIgKiAxMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAoImFnZSIsIGNfaW50KV0KQEAgLTMyNSw3ICszMjIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNscywgUnVudGltZUVycm9yKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIihQaG9uZSkgPGNsYXNzICdUeXBlRXJyb3InPjogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgc3RyaW5nLCBpbnQgZm91bmQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYnl0ZXMsIGludCBmb3VuZCIpCiAKICAgICAgICAgY2xzLCBtc2cgPSBzZWxmLmdldF9leGNlcHQoUGVyc29uLCBiIlNvbWVvbmUiLCAoYiJhIiwgYiJiIiwgYiJjIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xzLCBSdW50aW1lRXJyb3IpCkBAIC0zNTQsMTQgKzM1MSwxNCBAQAogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGRldGFpbDoKICAgICAgICAgICAgIHJldHVybiBkZXRhaWwuX19jbGFzc19fLCBzdHIoZGV0YWlsKQogCi0KLSMjICAgIGRlZiB0ZXN0X3N1YmNsYXNzX2NyZWF0aW9uKHNlbGYpOgotIyMgICAgICAgIG1ldGEgPSB0eXBlKFN0cnVjdHVyZSkKLSMjICAgICAgICAjIHNhbWUgYXMgJ2NsYXNzIFgoU3RydWN0dXJlKTogcGFzcycKLSMjICAgICAgICAjIGZhaWxzLCBzaW5jZSB3ZSBuZWVkIGVpdGhlciBhIF9maWVsZHNfIG9yIGEgX2Fic3RyYWN0XyBhdHRyaWJ1dGUKLSMjICAgICAgICBjbHMsIG1zZyA9IHNlbGYuZ2V0X2V4Y2VwdChtZXRhLCAiWCIsIChTdHJ1Y3R1cmUsKSwge30pCi0jIyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoY2xzLCBtc2cpLAotIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBdHRyaWJ1dGVFcnJvciwgImNsYXNzIG11c3QgZGVmaW5lIGEgJ19maWVsZHNfJyBhdHRyaWJ1dGUiKSkKKyAgICBAdW5pdHRlc3Quc2tpcCgndGVzdCBkaXNhYmxlZCcpCisgICAgZGVmIHRlc3Rfc3ViY2xhc3NfY3JlYXRpb24oc2VsZik6CisgICAgICAgIG1ldGEgPSB0eXBlKFN0cnVjdHVyZSkKKyAgICAgICAgIyBzYW1lIGFzICdjbGFzcyBYKFN0cnVjdHVyZSk6IHBhc3MnCisgICAgICAgICMgZmFpbHMsIHNpbmNlIHdlIG5lZWQgZWl0aGVyIGEgX2ZpZWxkc18gb3IgYSBfYWJzdHJhY3RfIGF0dHJpYnV0ZQorICAgICAgICBjbHMsIG1zZyA9IHNlbGYuZ2V0X2V4Y2VwdChtZXRhLCAiWCIsIChTdHJ1Y3R1cmUsKSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGNscywgbXNnKSwKKyAgICAgICAgICAgICAgICAoQXR0cmlidXRlRXJyb3IsICJjbGFzcyBtdXN0IGRlZmluZSBhICdfZmllbGRzXycgYXR0cmlidXRlIikpCiAKICAgICBkZWYgdGVzdF9hYnN0cmFjdF9jbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgWChTdHJ1Y3R1cmUpOgpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggYzNiMmQ0OC4uYzIwMGFmNyAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdW5pY29kZS5weQorKysgYi9MaWIvY3R5cGVzL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC0xLDU4ICsxLDU1IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBjdHlwZXMKK2Zyb20gY3R5cGVzLnRlc3QgaW1wb3J0IG5lZWRfc3ltYm9sCiAKLXRyeToKLSAgICBjdHlwZXMuY193Y2hhcgotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHBhc3MKLWVsc2U6Ci0gICAgaW1wb3J0IF9jdHlwZXNfdGVzdAoraW1wb3J0IF9jdHlwZXNfdGVzdAogCi0gICAgY2xhc3MgVW5pY29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3Rfd2NzbGVuKHNlbGYpOgotICAgICAgICAgICAgZGxsID0gY3R5cGVzLkNETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQotICAgICAgICAgICAgd2NzbGVuID0gZGxsLm15X3djc2xlbgotICAgICAgICAgICAgd2NzbGVuLmFyZ3R5cGVzID0gW2N0eXBlcy5jX3djaGFyX3BdCitAbmVlZF9zeW1ib2woJ2Nfd2NoYXInKQorY2xhc3MgVW5pY29kZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF93Y3NsZW4oc2VsZik6CisgICAgICAgIGRsbCA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykKKyAgICAgICAgd2NzbGVuID0gZGxsLm15X3djc2xlbgorICAgICAgICB3Y3NsZW4uYXJndHlwZXMgPSBbY3R5cGVzLmNfd2NoYXJfcF0KIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiYyIpLCAzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiXHUyMDcwIiksIDMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjdHlwZXMuQXJndW1lbnRFcnJvciwgd2NzbGVuLCBiImFiXHhlNCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2NzbGVuKCJhYmMiKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Y3NsZW4oImFiXHUyMDcwIiksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGN0eXBlcy5Bcmd1bWVudEVycm9yLCB3Y3NsZW4sIGIiYWJceGU0IikKIAotICAgICAgICBkZWYgdGVzdF9idWZmZXJzKHNlbGYpOgotICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcigiYWJjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJ1ZiksIDMrMSkKKyAgICBkZWYgdGVzdF9idWZmZXJzKHNlbGYpOgorICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3VuaWNvZGVfYnVmZmVyKCJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCAzKzEpCiAKLSAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoImFiXHhlNFx4ZjZceGZjIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzpdLCAiYWJceGU0XHhmNlx4ZmNcMCIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6Ol0sICJhYlx4ZTRceGY2XHhmY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCAnXHgwMFx4ZmNceGY2XHhlNGJhJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6Ml0sICdhXHhlNFx4ZmMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbNjo1Oi0xXSwgIiIpCisgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoImFiXHhlNFx4ZjZceGZjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOl0sICJhYlx4ZTRceGY2XHhmY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjpdLCAiYWJceGU0XHhmNlx4ZmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCAnXHgwMFx4ZmNceGY2XHhlNGJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgJ2FceGU0XHhmYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzY6NTotMV0sICIiKQogCi0gICAgZnVuYyA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykuX3Rlc3RmdW5jX3BfcAorZnVuYyA9IGN0eXBlcy5DRExMKF9jdHlwZXNfdGVzdC5fX2ZpbGVfXykuX3Rlc3RmdW5jX3BfcAogCi0gICAgY2xhc3MgU3RyaW5nVGVzdENhc2UoVW5pY29kZVRlc3RDYXNlKToKLSAgICAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IFtjdHlwZXMuY19jaGFyX3BdCi0gICAgICAgICAgICBmdW5jLnJlc3R5cGUgPSBjdHlwZXMuY19jaGFyX3AKK2NsYXNzIFN0cmluZ1Rlc3RDYXNlKFVuaWNvZGVUZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBmdW5jLmFyZ3R5cGVzID0gW2N0eXBlcy5jX2NoYXJfcF0KKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCiAKLSAgICAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICAgICAgZnVuYy5hcmd0eXBlcyA9IE5vbmUKLSAgICAgICAgICAgIGZ1bmMucmVzdHlwZSA9IGN0eXBlcy5jX2ludAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZnVuYy5hcmd0eXBlcyA9IE5vbmUKKyAgICAgICAgZnVuYy5yZXN0eXBlID0gY3R5cGVzLmNfaW50CiAKLSAgICAgICAgZGVmIHRlc3RfZnVuYyhzZWxmKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYyhiImFiY1x4ZTQiKSwgYiJhYmNceGU0IikKKyAgICBkZWYgdGVzdF9mdW5jKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoYiJhYmNceGU0IiksIGIiYWJjXHhlNCIpCiAKLSAgICAgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKLSAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihiImFiYyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihidWYpLCAzKzEpCisgICAgZGVmIHRlc3RfYnVmZmVycyhzZWxmKToKKyAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV9zdHJpbmdfYnVmZmVyKGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgMysxKQogCi0gICAgICAgICAgICBidWYgPSBjdHlwZXMuY3JlYXRlX3N0cmluZ19idWZmZXIoYiJhYlx4ZTRceGY2XHhmYyIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6XSwgYiJhYlx4ZTRceGY2XHhmY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6XSwgYiJhYlx4ZTRceGY2XHhmY1wwIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6LTFdLCBiJ1x4MDBceGZjXHhmNlx4ZTRiYScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls6OjJdLCBiJ2FceGU0XHhmYycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls2OjU6LTFdLCBiIiIpCisgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcihiImFiXHhlNFx4ZjZceGZjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOl0sIGIiYWJceGU0XHhmNlx4ZmNcMCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmWzo6XSwgYiJhYlx4ZTRceGY2XHhmY1wwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjotMV0sIGInXHgwMFx4ZmNceGY2XHhlNGJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChidWZbOjoyXSwgYidhXHhlNFx4ZmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1Zls2OjU6LTFdLCBiIiIpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3ZhbHVlcy5weQppbmRleCBlNDY0MTAyLi42ODUwY2YwIDEwMDY0NAotLS0gYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF92YWx1ZXMucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3RfdmFsdWVzLnB5CkBAIC0zLDYgKzMsNyBAQAogIiIiCiAKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cwogZnJvbSBjdHlwZXMgaW1wb3J0ICoKIAogaW1wb3J0IF9jdHlwZXNfdGVzdApAQCAtMjcsNjIgKzI4LDY3IEBACiAgICAgICAgIGN0ZGxsID0gQ0RMTChfY3R5cGVzX3Rlc3QuX19maWxlX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNfaW50LmluX2RsbCwgY3RkbGwsICJVbmRlZmluZWRfU3ltYm9sIikKIAotICAgIGNsYXNzIFdpbl9WYWx1ZXNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgICIiIlRoaXMgdGVzdCBvbmx5IHdvcmtzIHdoZW4gcHl0aG9uIGl0c2VsZiBpcyBhIGRsbC9zaGFyZWQgbGlicmFyeSIiIgorY2xhc3MgUHl0aG9uVmFsdWVzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRoaXMgdGVzdCBvbmx5IHdvcmtzIHdoZW4gcHl0aG9uIGl0c2VsZiBpcyBhIGRsbC9zaGFyZWQgbGlicmFyeSIiIgogCi0gICAgICAgIGRlZiB0ZXN0X29wdGltaXplZmxhZyhzZWxmKToKLSAgICAgICAgICAgICMgVGhpcyB0ZXN0IGFjY2Vzc2VzIHRoZSBQeV9PcHRpbWl6ZUZsYWcgaW50Z2VyLCB3aGljaCBpcwotICAgICAgICAgICAgIyBleHBvcnRlZCBieSB0aGUgUHl0aG9uIGRsbC4KKyAgICBkZWYgdGVzdF9vcHRpbWl6ZWZsYWcoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IGFjY2Vzc2VzIHRoZSBQeV9PcHRpbWl6ZUZsYWcgaW50ZWdlciwgd2hpY2ggaXMKKyAgICAgICAgIyBleHBvcnRlZCBieSB0aGUgUHl0aG9uIGRsbCBhbmQgc2hvdWxkIG1hdGNoIHRoZSBzeXMuZmxhZ3MgdmFsdWUKIAotICAgICAgICAgICAgIyBJdCdzIHZhbHVlIGlzIHNldCBkZXBlbmRpbmcgb24gdGhlIC1PIGFuZCAtT08gZmxhZ3M6Ci0gICAgICAgICAgICAjIGlmIG5vdCBnaXZlbiwgaXQgaXMgMCBhbmQgX19kZWJ1Z19fIGlzIDEuCi0gICAgICAgICAgICAjIElmIC1PIGlzIGdpdmVuLCB0aGUgZmxhZyBpcyAxLCBmb3IgLU9PIGl0IGlzIDIuCi0gICAgICAgICAgICAjIGRvY3N0cmluZ3MgYXJlIGFsc28gcmVtb3ZlZCBpbiB0aGUgbGF0dGVyIGNhc2UuCi0gICAgICAgICAgICBvcHQgPSBjX2ludC5pbl9kbGwocHlkbGwsICJQeV9PcHRpbWl6ZUZsYWciKS52YWx1ZQotICAgICAgICAgICAgaWYgX19kZWJ1Z19fOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAwKQotICAgICAgICAgICAgZWxpZiBWYWx1ZXNUZXN0Q2FzZS5fX2RvY19fIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCAxKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdCwgMikKKyAgICAgICAgb3B0ID0gY19pbnQuaW5fZGxsKHB5dGhvbmFwaSwgIlB5X09wdGltaXplRmxhZyIpLnZhbHVlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3B0LCBzeXMuZmxhZ3Mub3B0aW1pemUpCiAKLSAgICAgICAgZGVmIHRlc3RfZnJvemVudGFibGUoc2VsZik6Ci0gICAgICAgICAgICAjIFB5dGhvbiBleHBvcnRzIGEgUHlJbXBvcnRfRnJvemVuTW9kdWxlcyBzeW1ib2wuIFRoaXMgaXMgYQotICAgICAgICAgICAgIyBwb2ludGVyIHRvIGFuIGFycmF5IG9mIHN0cnVjdCBfZnJvemVuIGVudHJpZXMuICBUaGUgZW5kIG9mIHRoZQotICAgICAgICAgICAgIyBhcnJheSBpcyBtYXJrZWQgYnkgYW4gZW50cnkgY29udGFpbmluZyBhIE5VTEwgbmFtZSBhbmQgemVybwotICAgICAgICAgICAgIyBzaXplLgorICAgIGRlZiB0ZXN0X2Zyb3plbnRhYmxlKHNlbGYpOgorICAgICAgICAjIFB5dGhvbiBleHBvcnRzIGEgUHlJbXBvcnRfRnJvemVuTW9kdWxlcyBzeW1ib2wuIFRoaXMgaXMgYQorICAgICAgICAjIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2Ygc3RydWN0IF9mcm96ZW4gZW50cmllcy4gIFRoZSBlbmQgb2YgdGhlCisgICAgICAgICMgYXJyYXkgaXMgbWFya2VkIGJ5IGFuIGVudHJ5IGNvbnRhaW5pbmcgYSBOVUxMIG5hbWUgYW5kIHplcm8KKyAgICAgICAgIyBzaXplLgogCi0gICAgICAgICAgICAjIEluIHN0YW5kYXJkIFB5dGhvbiwgdGhpcyB0YWJsZSBjb250YWlucyBhIF9faGVsbG9fXwotICAgICAgICAgICAgIyBtb2R1bGUsIGFuZCBhIF9fcGhlbGxvX18gcGFja2FnZSBjb250YWluaW5nIGEgc3BhbQotICAgICAgICAgICAgIyBtb2R1bGUuCi0gICAgICAgICAgICBjbGFzcyBzdHJ1Y3RfZnJvemVuKFN0cnVjdHVyZSk6Ci0gICAgICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJuYW1lIiwgY19jaGFyX3ApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiY29kZSIsIFBPSU5URVIoY191Ynl0ZSkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgic2l6ZSIsIGNfaW50KV0KLSAgICAgICAgICAgIEZyb3plblRhYmxlID0gUE9JTlRFUihzdHJ1Y3RfZnJvemVuKQorICAgICAgICAjIEluIHN0YW5kYXJkIFB5dGhvbiwgdGhpcyB0YWJsZSBjb250YWlucyBhIF9faGVsbG9fXworICAgICAgICAjIG1vZHVsZSwgYW5kIGEgX19waGVsbG9fXyBwYWNrYWdlIGNvbnRhaW5pbmcgYSBzcGFtCisgICAgICAgICMgbW9kdWxlLgorICAgICAgICBjbGFzcyBzdHJ1Y3RfZnJvemVuKFN0cnVjdHVyZSk6CisgICAgICAgICAgICBfZmllbGRzXyA9IFsoIm5hbWUiLCBjX2NoYXJfcCksCisgICAgICAgICAgICAgICAgICAgICAgICAoImNvZGUiLCBQT0lOVEVSKGNfdWJ5dGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgic2l6ZSIsIGNfaW50KV0KKyAgICAgICAgRnJvemVuVGFibGUgPSBQT0lOVEVSKHN0cnVjdF9mcm96ZW4pCiAKLSAgICAgICAgICAgIGZ0ID0gRnJvemVuVGFibGUuaW5fZGxsKHB5ZGxsLCAiUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIpCi0gICAgICAgICAgICAjIGZ0IGlzIGEgcG9pbnRlciB0byB0aGUgc3RydWN0X2Zyb3plbiBlbnRyaWVzOgotICAgICAgICAgICAgaXRlbXMgPSBbXQotICAgICAgICAgICAgZm9yIGVudHJ5IGluIGZ0OgotICAgICAgICAgICAgICAgICMgVGhpcyBpcyBkYW5nZXJvdXMuIFdlICpjYW4qIGl0ZXJhdGUgb3ZlciBhIHBvaW50ZXIsIGJ1dAotICAgICAgICAgICAgICAgICMgdGhlIGxvb3Agd2lsbCBub3QgdGVybWluYXRlIChtYXliZSB3aXRoIGFuIGFjY2VzcwotICAgICAgICAgICAgICAgICMgdmlvbGF0aW9uOy0pIGJlY2F1c2UgdGhlIHBvaW50ZXIgaW5zdGFuY2UgaGFzIG5vIHNpemUuCi0gICAgICAgICAgICAgICAgaWYgZW50cnkubmFtZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGl0ZW1zLmFwcGVuZCgoZW50cnkubmFtZSwgZW50cnkuc2l6ZSkpCi0gICAgICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgICAgICBpZiBzeXMudmVyc2lvbl9pbmZvWzoyXSA+PSAoMiwgMyk6Ci0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBbKCJfX2hlbGxvX18iLCAxMDQpLCAoIl9fcGhlbGxvX18iLCAtMTA0KSwgKCJfX3BoZWxsb19fLnNwYW0iLCAxMDQpXQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IFsoIl9faGVsbG9fXyIsIDEwMCksICgiX19waGVsbG9fXyIsIC0xMDApLCAoIl9fcGhlbGxvX18uc3BhbSIsIDEwMCldCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBleHBlY3RlZCkKKyAgICAgICAgZnQgPSBGcm96ZW5UYWJsZS5pbl9kbGwocHl0aG9uYXBpLCAiUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIpCisgICAgICAgICMgZnQgaXMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3RfZnJvemVuIGVudHJpZXM6CisgICAgICAgIGl0ZW1zID0gW10KKyAgICAgICAgIyBfZnJvemVuX2ltcG9ydGxpYiBjaGFuZ2VzIHNpemUgd2hlbmV2ZXIgaW1wb3J0bGliLl9ib290c3RyYXAKKyAgICAgICAgIyBjaGFuZ2VzLCBzbyBpdCBnZXRzIGEgc3BlY2lhbCBjYXNlLiAgV2Ugc2hvdWxkIG1ha2Ugc3VyZSBpdCdzCisgICAgICAgICMgZm91bmQsIGJ1dCBkb24ndCB3b3JyeSBhYm91dCBpdHMgc2l6ZSB0b28gbXVjaC4KKyAgICAgICAgX2Z6bl9pbXBsaWJfc2VlbiA9IEZhbHNlCisgICAgICAgIGZvciBlbnRyeSBpbiBmdDoKKyAgICAgICAgICAgICMgVGhpcyBpcyBkYW5nZXJvdXMuIFdlICpjYW4qIGl0ZXJhdGUgb3ZlciBhIHBvaW50ZXIsIGJ1dAorICAgICAgICAgICAgIyB0aGUgbG9vcCB3aWxsIG5vdCB0ZXJtaW5hdGUgKG1heWJlIHdpdGggYW4gYWNjZXNzCisgICAgICAgICAgICAjIHZpb2xhdGlvbjstKSBiZWNhdXNlIHRoZSBwb2ludGVyIGluc3RhbmNlIGhhcyBubyBzaXplLgorICAgICAgICAgICAgaWYgZW50cnkubmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGJyZWFrCiAKLSAgICAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBfcG9pbnRlcl90eXBlX2NhY2hlCi0gICAgICAgICAgICBkZWwgX3BvaW50ZXJfdHlwZV9jYWNoZVtzdHJ1Y3RfZnJvemVuXQorICAgICAgICAgICAgaWYgZW50cnkubmFtZSA9PSBiJ19mcm96ZW5faW1wb3J0bGliJzoKKyAgICAgICAgICAgICAgICBfZnpuX2ltcGxpYl9zZWVuID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnRyeS5zaXplLAorICAgICAgICAgICAgICAgICAgICAiX2Zyb3plbl9pbXBvcnRsaWIgd2FzIHJlcG9ydGVkIGFzIGhhdmluZyBubyBzaXplIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgaXRlbXMuYXBwZW5kKChlbnRyeS5uYW1lLCBlbnRyeS5zaXplKSkKIAotICAgICAgICBkZWYgdGVzdF91bmRlZmluZWQoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjX2ludC5pbl9kbGwsIHB5ZGxsLCAiVW5kZWZpbmVkX1N5bWJvbCIpCisgICAgICAgIGV4cGVjdGVkID0gWyhiIl9faGVsbG9fXyIsIDE2MSksCisgICAgICAgICAgICAgICAgICAgIChiIl9fcGhlbGxvX18iLCAtMTYxKSwKKyAgICAgICAgICAgICAgICAgICAgKGIiX19waGVsbG9fXy5zcGFtIiwgMTYxKSwKKyAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGl0ZW1zLCBleHBlY3RlZCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoX2Z6bl9pbXBsaWJfc2VlbiwKKyAgICAgICAgICAgICJfZnJvemVuX2ltcG9ydGxpYiB3YXNuJ3QgZm91bmQgaW4gUHlJbXBvcnRfRnJvemVuTW9kdWxlcyIpCisKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IF9wb2ludGVyX3R5cGVfY2FjaGUKKyAgICAgICAgZGVsIF9wb2ludGVyX3R5cGVfY2FjaGVbc3RydWN0X2Zyb3plbl0KKworICAgIGRlZiB0ZXN0X3VuZGVmaW5lZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY19pbnQuaW5fZGxsLCBweXRob25hcGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmRlZmluZWRfU3ltYm9sIikKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbjMyLnB5IGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKaW5kZXggZGEyMTMzNi4uZGExNjI0MCAxMDA2NDQKLS0tIGEvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKKysrIGIvTGliL2N0eXBlcy90ZXN0L3Rlc3Rfd2luMzIucHkKQEAgLTEsOTkgKzEsMTAzIEBACiAjIFdpbmRvd3Mgc3BlY2lmaWMgdGVzdHMKIAogZnJvbSBjdHlwZXMgaW1wb3J0ICoKLWZyb20gY3R5cGVzLnRlc3QgaW1wb3J0IGlzX3Jlc291cmNlX2VuYWJsZWQKIGltcG9ydCB1bml0dGVzdCwgc3lzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogaW1wb3J0IF9jdHlwZXNfdGVzdAogCi1pZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIiBhbmQgc2l6ZW9mKGNfdm9pZF9wKSA9PSBzaXplb2YoY19pbnQpOgotICAgICMgT25seSB3aW5kb3dzIDMyLWJpdCBoYXMgZGlmZmVyZW50IGNhbGxpbmcgY29udmVudGlvbnMuCisjIE9ubHkgd2luZG93cyAzMi1iaXQgaGFzIGRpZmZlcmVudCBjYWxsaW5nIGNvbnZlbnRpb25zLgorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICdXaW5kb3dzLXNwZWNpZmljIHRlc3QnKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc2l6ZW9mKGNfdm9pZF9wKSA9PSBzaXplb2YoY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgInNpemVvZiBjX3ZvaWRfcCBhbmQgY19pbnQgZGlmZmVyIikKK2NsYXNzIFdpbmRvd3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY2FsbGNvbnZfMShzZWxmKToKKyAgICAgICAgIyBUZXN0aW5nIHN0ZGNhbGwgZnVuY3Rpb24KIAotICAgIGNsYXNzIFdpbmRvd3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgICAgIGRlZiB0ZXN0X2NhbGxjb252XzEoc2VsZik6Ci0gICAgICAgICAgICAjIFRlc3Rpbmcgc3RkY2FsbCBmdW5jdGlvbgorICAgICAgICBJc1dpbmRvdyA9IHdpbmRsbC51c2VyMzIuSXNXaW5kb3cKKyAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggbm90IGVub3VnaCBhcmd1bWVudHMKKyAgICAgICAgIyAoNCBieXRlcyBtaXNzaW5nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdykKIAotICAgICAgICAgICAgSXNXaW5kb3cgPSB3aW5kbGwudXNlcjMyLklzV2luZG93Ci0gICAgICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBwcm9iYWJseSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoIGFyZ3VtZW50cyAoNCBieXRlcyBtaXNzaW5nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgSXNXaW5kb3cpCisgICAgICAgICMgVGhpcyBvbmUgc2hvdWxkIHN1Y2NlZWQuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBJc1dpbmRvdygwKSkKIAotICAgICAgICAgICAgIyBUaGlzIG9uZSBzaG91bGQgc3VjY2VlZC4uLgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBJc1dpbmRvdygwKSkKKyAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzCisgICAgICAgICMgKDggYnl0ZXMgaW4gZXhjZXNzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdywgMCwgMCwgMCkKIAotICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgcHJvYmFibHkgY2FsbGVkIHdpdGggdG9vIG1hbnkgYXJndW1lbnRzICg4IGJ5dGVzIGluIGV4Y2VzcykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIElzV2luZG93LCAwLCAwLCAwKQorICAgIGRlZiB0ZXN0X2NhbGxjb252XzIoc2VsZik6CisgICAgICAgICMgQ2FsbGluZyBzdGRjYWxsIGZ1bmN0aW9uIGFzIGNkZWNsCiAKLSAgICAgICAgZGVmIHRlc3RfY2FsbGNvbnZfMihzZWxmKToKLSAgICAgICAgICAgICMgQ2FsbGluZyBzdGRjYWxsIGZ1bmN0aW9uIGFzIGNkZWNsCisgICAgICAgIElzV2luZG93ID0gY2RsbC51c2VyMzIuSXNXaW5kb3cKIAotICAgICAgICAgICAgSXNXaW5kb3cgPSBjZGxsLnVzZXIzMi5Jc1dpbmRvdworICAgICAgICAjIFZhbHVlRXJyb3I6IFByb2NlZHVyZSBjYWxsZWQgd2l0aCBub3QgZW5vdWdoIGFyZ3VtZW50cworICAgICAgICAjICg0IGJ5dGVzIG1pc3NpbmcpIG9yIHdyb25nIGNhbGxpbmcgY29udmVudGlvbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdywgTm9uZSkKIAotICAgICAgICAgICAgIyBWYWx1ZUVycm9yOiBQcm9jZWR1cmUgY2FsbGVkIHdpdGggbm90IGVub3VnaCBhcmd1bWVudHMgKDQgYnl0ZXMgbWlzc2luZykKLSAgICAgICAgICAgICMgb3Igd3JvbmcgY2FsbGluZyBjb252ZW50aW9uCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBJc1dpbmRvdywgTm9uZSkKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAnV2luZG93cy1zcGVjaWZpYyB0ZXN0JykKK2NsYXNzIEZ1bmN0aW9uQ2FsbFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcygnTVNDJyBpbiBzeXMudmVyc2lvbiwgIlNFSCBvbmx5IHN1cHBvcnRlZCBieSBNU0MiKQorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgnX2QuZXhlJyksCisgICAgICAgICAgICAgICAgICAgICAiU0VIIG5vdCBlbmFibGVkIGluIGRlYnVnIGJ1aWxkcyIpCisgICAgZGVmIHRlc3RfU0VIKHNlbGYpOgorICAgICAgICAjIENhbGwgZnVuY3Rpb25zIHdpdGggaW52YWxpZCBhcmd1bWVudHMsIGFuZCBtYWtlIHN1cmUKKyAgICAgICAgIyB0aGF0IGFjY2VzcyB2aW9sYXRpb25zIGFyZSB0cmFwcGVkIGFuZCByYWlzZSBhbgorICAgICAgICAjIGV4Y2VwdGlvbi4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQogCi1pZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKLSAgICBjbGFzcyBGdW5jdGlvbkNhbGxUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2Ugb24gd2luMzIgeDY0CisgICAgICAgIHdpbmRsbC51c2VyMzIuR2V0RGVza3RvcFdpbmRvdygpCiAKLSAgICAgICAgaWYgaXNfcmVzb3VyY2VfZW5hYmxlZCgiU0VIIik6Ci0gICAgICAgICAgICBkZWYgdGVzdF9TRUgoc2VsZik6Ci0gICAgICAgICAgICAgICAgIyBDYWxsIGZ1bmN0aW9ucyB3aXRoIGludmFsaWQgYXJndW1lbnRzLCBhbmQgbWFrZSBzdXJlCi0gICAgICAgICAgICAgICAgIyB0aGF0IGFjY2VzcyB2aW9sYXRpb25zIGFyZSB0cmFwcGVkIGFuZCByYWlzZSBhbgotICAgICAgICAgICAgICAgICMgZXhjZXB0aW9uLgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgd2luZGxsLmtlcm5lbDMyLkdldE1vZHVsZUhhbmRsZUEsIDMyKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICdXaW5kb3dzLXNwZWNpZmljIHRlc3QnKQorY2xhc3MgVGVzdFdpbnR5cGVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9IV05EKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplb2Yod2ludHlwZXMuSFdORCksIHNpemVvZihjX3ZvaWRfcCkpCiAKLSAgICAgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgotICAgICAgICAgICAgIyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIG9uIHdpbjMyIHg2NAotICAgICAgICAgICAgd2luZGxsLnVzZXIzMi5HZXREZXNrdG9wV2luZG93KCkKKyAgICBkZWYgdGVzdF9QQVJBTShzZWxmKToKKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLldQQVJBTSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjX3ZvaWRfcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLkxQQVJBTSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjX3ZvaWRfcCkpCiAKLSAgICBjbGFzcyBUZXN0V2ludHlwZXModW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICBkZWYgdGVzdF9IV05EKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih3aW50eXBlcy5IV05EKSwgc2l6ZW9mKGNfdm9pZF9wKSkKKyAgICBkZWYgdGVzdF9DT01FcnJvcihzZWxmKToKKyAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBDT01FcnJvcgorICAgICAgICBpZiBzdXBwb3J0LkhBVkVfRE9DU1RSSU5HUzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQ09NRXJyb3IuX19kb2NfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhaXNlZCB3aGVuIGEgQ09NIG1ldGhvZCBjYWxsIGZhaWxlZC4iKQogCi0gICAgICAgIGRlZiB0ZXN0X1BBUkFNKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemVvZih3aW50eXBlcy5XUEFSQU0pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNfdm9pZF9wKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZW9mKHdpbnR5cGVzLkxQQVJBTSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY192b2lkX3ApKQorICAgICAgICBleCA9IENPTUVycm9yKC0xLCAidGV4dCIsICgiZGV0YWlscyIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5ocmVzdWx0LCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC50ZXh0LCAidGV4dCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXguZGV0YWlscywgKCJkZXRhaWxzIiwpKQogCi0gICAgICAgIGRlZiB0ZXN0X0NPTUVycm9yKHNlbGYpOgotICAgICAgICAgICAgZnJvbSBfY3R5cGVzIGltcG9ydCBDT01FcnJvcgotICAgICAgICAgICAgaWYgc3VwcG9ydC5IQVZFX0RPQ1NUUklOR1M6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDT01FcnJvci5fX2RvY19fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhaXNlZCB3aGVuIGEgQ09NIG1ldGhvZCBjYWxsIGZhaWxlZC4iKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICdXaW5kb3dzLXNwZWNpZmljIHRlc3QnKQorY2xhc3MgVGVzdFdpbkVycm9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF93aW5lcnJvcihzZWxmKToKKyAgICAgICAgIyBzZWUgSXNzdWUgMTYxNjkKKyAgICAgICAgaW1wb3J0IGVycm5vCisgICAgICAgIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSID0gODcKKyAgICAgICAgbXNnID0gRm9ybWF0RXJyb3IoRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpLnN0cmlwKCkKKyAgICAgICAgYXJncyA9IChlcnJuby5FSU5WQUwsIG1zZywgTm9uZSwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpCiAKLSAgICAgICAgICAgIGV4ID0gQ09NRXJyb3IoLTEsICJ0ZXh0IiwgKCJkZXRhaWxzIiwpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5ocmVzdWx0LCAtMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXgudGV4dCwgInRleHQiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleC5kZXRhaWxzLCAoImRldGFpbHMiLCkpCisgICAgICAgIGUgPSBXaW5FcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmFyZ3MsIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUlOVkFMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQogCi0gICAgY2xhc3MgVGVzdFdpbkVycm9yKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAgICAgZGVmIHRlc3Rfd2luZXJyb3Ioc2VsZik6Ci0gICAgICAgICAgICAjIHNlZSBJc3N1ZSAxNjE2OQotICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUiA9IDg3Ci0gICAgICAgICAgICBtc2cgPSBGb3JtYXRFcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikuc3RyaXAoKQotICAgICAgICAgICAgYXJncyA9IChlcnJuby5FSU5WQUwsIG1zZywgTm9uZSwgRVJST1JfSU5WQUxJRF9QQVJBTUVURVIpCi0KLSAgICAgICAgICAgIGUgPSBXaW5FcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCBhcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FSU5WQUwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQotCi0gICAgICAgICAgICB3aW5kbGwua2VybmVsMzIuU2V0TGFzdEVycm9yKEVSUk9SX0lOVkFMSURfUEFSQU1FVEVSKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJhaXNlIFdpbkVycm9yKCkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgICAgICBlID0gZXhjCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJncywgYXJncykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUlOVkFMKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKKyAgICAgICAgd2luZGxsLmtlcm5lbDMyLlNldExhc3RFcnJvcihFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgV2luRXJyb3IoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICBlID0gZXhjCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVJTlZBTCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLndpbmVycm9yLCBFUlJPUl9JTlZBTElEX1BBUkFNRVRFUikKIAogY2xhc3MgU3RydWN0dXJlcyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KICAgICBkZWYgdGVzdF9zdHJ1Y3RfYnlfdmFsdWUoc2VsZik6CiAgICAgICAgIGNsYXNzIFBPSU5UKFN0cnVjdHVyZSk6CiAgICAgICAgICAgICBfZmllbGRzXyA9IFsoIngiLCBjX2xvbmcpLApAQCAtMTA3LDkgKzExMSwzMyBAQAogCiAgICAgICAgIGRsbCA9IENETEwoX2N0eXBlc190ZXN0Ll9fZmlsZV9fKQogCi0gICAgICAgIHB0ID0gUE9JTlQoMTAsIDEwKQotICAgICAgICByZWN0ID0gUkVDVCgwLCAwLCAyMCwgMjApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZGxsLlBvaW50SW5SZWN0KGJ5cmVmKHJlY3QpLCBwdCkpCisgICAgICAgIHB0ID0gUE9JTlQoMTUsIDI1KQorICAgICAgICBsZWZ0ID0gY19sb25nLmluX2RsbChkbGwsICdsZWZ0JykKKyAgICAgICAgdG9wID0gY19sb25nLmluX2RsbChkbGwsICd0b3AnKQorICAgICAgICByaWdodCA9IGNfbG9uZy5pbl9kbGwoZGxsLCAncmlnaHQnKQorICAgICAgICBib3R0b20gPSBjX2xvbmcuaW5fZGxsKGRsbCwgJ2JvdHRvbScpCisgICAgICAgIHJlY3QgPSBSRUNUKGxlZnQsIHRvcCwgcmlnaHQsIGJvdHRvbSkKKyAgICAgICAgUG9pbnRJblJlY3QgPSBkbGwuUG9pbnRJblJlY3QKKyAgICAgICAgUG9pbnRJblJlY3QuYXJndHlwZXMgPSBbUE9JTlRFUihSRUNUKSwgUE9JTlRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgUG9pbnRJblJlY3QoYnlyZWYocmVjdCksIHB0KSkKKworICAgICAgICBSZXR1cm5SZWN0ID0gZGxsLlJldHVyblJlY3QKKyAgICAgICAgUmV0dXJuUmVjdC5hcmd0eXBlcyA9IFtjX2ludCwgUkVDVCwgUE9JTlRFUihSRUNUKSwgUE9JTlQsIFJFQ1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9JTlRFUihSRUNUKSwgUE9JTlQsIFJFQ1RdCisgICAgICAgIFJldHVyblJlY3QucmVzdHlwZSA9IFJFQ1QKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNCk6CisgICAgICAgICAgICByZXQgPSBSZXR1cm5SZWN0KGksIHJlY3QsIHBvaW50ZXIocmVjdCksIHB0LCByZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGJ5cmVmKHJlY3QpLCBwdCwgcmVjdCkKKyAgICAgICAgICAgICMgdGhlIGMgZnVuY3Rpb24gd2lsbCBjaGVjayBhbmQgbW9kaWZ5IHJldCBpZiBzb21ldGhpbmcgaXMKKyAgICAgICAgICAgICMgcGFzc2VkIGluIGltcHJvcGVybHkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LmxlZnQsIGxlZnQudmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldC5yaWdodCwgcmlnaHQudmFsdWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldC50b3AsIHRvcC52YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LmJvdHRvbSwgYm90dG9tLnZhbHVlKQorCisgICAgICAgICMgdG8gbm90IGxlYWsgcmVmZXJlbmNlcywgd2UgbXVzdCBjbGVhbiBfcG9pbnRlcl90eXBlX2NhY2hlCisgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBfcG9pbnRlcl90eXBlX2NhY2hlCisgICAgICAgIGRlbCBfcG9pbnRlcl90eXBlX2NhY2hlW1JFQ1RdCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvY3R5cGVzL3Rlc3QvdGVzdF93aW50eXBlcy5weSBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbnR5cGVzLnB5CmluZGV4IDgwNmZjY2UuLjcxNDQyZGYgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbnR5cGVzLnB5CisrKyBiL0xpYi9jdHlwZXMvdGVzdC90ZXN0X3dpbnR5cGVzLnB5CkBAIC0xLDE0ICsxLDEyIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotaWYgbm90IHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKToKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnV2luZG93cy1vbmx5IHRlc3QnKQotCiBmcm9tIGN0eXBlcyBpbXBvcnQgKgotZnJvbSBjdHlwZXMgaW1wb3J0IHdpbnR5cGVzCiAKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwgJ1dpbmRvd3Mtb25seSB0ZXN0JykKIGNsYXNzIFdpblR5cGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfdmFyaWFudF9ib29sKHNlbGYpOgorICAgICAgICBmcm9tIGN0eXBlcyBpbXBvcnQgd2ludHlwZXMKICAgICAgICAgIyByZWFkcyAxNi1iaXRzIGZyb20gbWVtb3J5LCBhbnl0aGluZyBub24temVybyBpcyBUcnVlCiAgICAgICAgIGZvciB0cnVlX3ZhbHVlIGluICgxLCAzMjc2NywgMzI3NjgsIDY1NTM1LCA2NTUzNyk6CiAgICAgICAgICAgICB0cnVlID0gUE9JTlRFUihjX2ludDE2KShjX2ludDE2KHRydWVfdmFsdWUpKQpkaWZmIC0tZ2l0IGEvTGliL2N0eXBlcy91dGlsLnB5IGIvTGliL2N0eXBlcy91dGlsLnB5CmluZGV4IDA1NGM1MTEuLjU5NTExM2IgMTAwNjQ0Ci0tLSBhL0xpYi9jdHlwZXMvdXRpbC5weQorKysgYi9MaWIvY3R5cGVzL3V0aWwucHkKQEAgLTg1LDcgKzg1LDcgQEAKIAogZWxpZiBvcy5uYW1lID09ICJwb3NpeCI6CiAgICAgIyBBbmRyZWFzIERlZ2VydCdzIGZpbmQgZnVuY3Rpb25zLCB1c2luZyBnY2MsIC9zYmluL2xkY29uZmlnLCBvYmpkdW1wCi0gICAgaW1wb3J0IHJlLCB0ZW1wZmlsZSwgZXJybm8KKyAgICBpbXBvcnQgcmUsIHRlbXBmaWxlCiAKICAgICBkZWYgX2ZpbmRMaWJfZ2NjKG5hbWUpOgogICAgICAgICBleHByID0gcidbXlwoXClcc10qbGliJXNcLlteXChcKVxzXSonICUgcmUuZXNjYXBlKG5hbWUpCkBAIC0xMDIsOSArMTAyLDggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy51bmxpbmsoY2NvdXQpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgcnYgPT0gMTA6CiAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdnY2Mgb3IgY2MgY29tbWFuZCBub3QgZm91bmQnKQogICAgICAgICByZXMgPSByZS5zZWFyY2goZXhwciwgdHJhY2UpCkBAIC0xMzMsOCArMTMyLDEwIEBACiAgICAgICAgICAgICBjbWQgPSAnaWYgISB0eXBlIG9iamR1bXAgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIGV4aXQgMTA7IGZpOycgXAogICAgICAgICAgICAgICAgICAgIm9iamR1bXAgLXAgLWogLmR5bmFtaWMgMj4vZGV2L251bGwgIiArIGYKICAgICAgICAgICAgIGYgPSBvcy5wb3BlbihjbWQpCi0gICAgICAgICAgICBkdW1wID0gZi5yZWFkKCkKLSAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZHVtcCA9IGYucmVhZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHJ2ID0gZi5jbG9zZSgpCiAgICAgICAgICAgICBpZiBydiA9PSAxMDoKICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdvYmpkdW1wIGNvbW1hbmQgbm90IGZvdW5kJykKICAgICAgICAgICAgIHJlcyA9IHJlLnNlYXJjaChyJ1xzU09OQU1FXHMrKFteXHNdKyknLCBkdW1wKQpAQCAtMTc3LDEwICsxNzgsMTEgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgY21kID0gJ2VudiBMQ19BTEw9QyAvdXNyL2Jpbi9jcmxlIDI+L2Rldi9udWxsJwogCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBvcy5wb3BlbihjbWQpLnJlYWRsaW5lcygpOgotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ0RlZmF1bHQgTGlicmFyeSBQYXRoIChFTEYpOicpOgotICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGxpbmUuc3BsaXQoKVs0XQorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLmNsb3Npbmcob3MucG9wZW4oY21kKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnRGVmYXVsdCBMaWJyYXJ5IFBhdGggKEVMRik6Jyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRocyA9IGxpbmUuc3BsaXQoKVs0XQogCiAgICAgICAgICAgICBpZiBub3QgcGF0aHM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9kYXRldGltZS5weSBiL0xpYi9kYXRldGltZS5weQppbmRleCBkMWYzNTNiLi4zYWYxMmU3IDEwMDY0NAotLS0gYS9MaWIvZGF0ZXRpbWUucHkKKysrIGIvTGliL2RhdGV0aW1lLnB5CkBAIC0yMyw5ICsyMywxMCBAQAogIyBmb3IgYWxsIGNvbXB1dGF0aW9ucy4gIFNlZSB0aGUgYm9vayBmb3IgYWxnb3JpdGhtcyBmb3IgY29udmVydGluZyBiZXR3ZWVuCiAjIHByb2xlcHRpYyBHcmVnb3JpYW4gb3JkaW5hbHMgYW5kIG1hbnkgb3RoZXIgY2FsZW5kYXIgc3lzdGVtcy4KIAotX0RBWVNfSU5fTU9OVEggPSBbTm9uZSwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KKyMgLTEgaXMgYSBwbGFjZWhvbGRlciBmb3IgaW5kZXhpbmcgcHVycG9zZXMuCitfREFZU19JTl9NT05USCA9IFstMSwgMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0KIAotX0RBWVNfQkVGT1JFX01PTlRIID0gW05vbmVdCitfREFZU19CRUZPUkVfTU9OVEggPSBbLTFdICMgLTEgaXMgYSBwbGFjZWhvbGRlciBmb3IgaW5kZXhpbmcgcHVycG9zZXMuCiBkYm0gPSAwCiBmb3IgZGltIGluIF9EQVlTX0lOX01PTlRIWzE6XToKICAgICBfREFZU19CRUZPUkVfTU9OVEguYXBwZW5kKGRibSkKQEAgLTI3OSw2ICsyODAsMjUgQEAKICAgICByYWlzZSBUeXBlRXJyb3IoImNhbid0IGNvbXBhcmUgJyVzJyB0byAnJXMnIiAlICgKICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXywgdHlwZSh5KS5fX25hbWVfXykpCiAKK2RlZiBfZGl2aWRlX2FuZF9yb3VuZChhLCBiKToKKyAgICAiIiJkaXZpZGUgYSBieSBiIGFuZCByb3VuZCByZXN1bHQgdG8gdGhlIG5lYXJlc3QgaW50ZWdlcgorCisgICAgV2hlbiB0aGUgcmF0aW8gaXMgZXhhY3RseSBoYWxmLXdheSBiZXR3ZWVuIHR3byBpbnRlZ2VycywKKyAgICB0aGUgZXZlbiBpbnRlZ2VyIGlzIHJldHVybmVkLgorICAgICIiIgorICAgICMgQmFzZWQgb24gdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBmb3IgZGl2bW9kX25lYXIKKyAgICAjIGluIE9iamVjdHMvbG9uZ29iamVjdC5jLgorICAgIHEsIHIgPSBkaXZtb2QoYSwgYikKKyAgICAjIHJvdW5kIHVwIGlmIGVpdGhlciByIC8gYiA+IDAuNSwgb3IgciAvIGIgPT0gMC41IGFuZCBxIGlzIG9kZC4KKyAgICAjIFRoZSBleHByZXNzaW9uIHIgLyBiID4gMC41IGlzIGVxdWl2YWxlbnQgdG8gMiAqIHIgPiBiIGlmIGIgaXMKKyAgICAjIHBvc2l0aXZlLCAyICogciA8IGIgaWYgYiBuZWdhdGl2ZS4KKyAgICByICo9IDIKKyAgICBncmVhdGVyX3RoYW5faGFsZiA9IHIgPiBiIGlmIGIgPiAwIGVsc2UgciA8IGIKKyAgICBpZiBncmVhdGVyX3RoYW5faGFsZiBvciByID09IGIgYW5kIHEgJSAyID09IDE6CisgICAgICAgIHEgKz0gMQorCisgICAgcmV0dXJuIHEKKwogY2xhc3MgdGltZWRlbHRhOgogICAgICIiIlJlcHJlc2VudCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBkYXRldGltZSBvYmplY3RzLgogCkBAIC01MDUsOCArNTI1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc2Vjb25kcyAqIG90aGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9taWNyb3NlY29uZHMgKiBvdGhlcikKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZmxvYXQpOgorICAgICAgICAgICAgdXNlYyA9IHNlbGYuX3RvX21pY3Jvc2Vjb25kcygpCiAgICAgICAgICAgICBhLCBiID0gb3RoZXIuYXNfaW50ZWdlcl9yYXRpbygpCi0gICAgICAgICAgICByZXR1cm4gc2VsZiAqIGEgLyBiCisgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKDAsIDAsIF9kaXZpZGVfYW5kX3JvdW5kKHVzZWMgKiBhLCBiKSkKICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKICAgICBfX3JtdWxfXyA9IF9fbXVsX18KQEAgLTUzMSwxMCArNTUyLDEwIEBACiAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIHRpbWVkZWx0YSk6CiAgICAgICAgICAgICByZXR1cm4gdXNlYyAvIG90aGVyLl90b19taWNyb3NlY29uZHMoKQogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBpbnQpOgotICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YSgwLCAwLCB1c2VjIC8gb3RoZXIpCisgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKDAsIDAsIF9kaXZpZGVfYW5kX3JvdW5kKHVzZWMsIG90aGVyKSkKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgZmxvYXQpOgogICAgICAgICAgICAgYSwgYiA9IG90aGVyLmFzX2ludGVnZXJfcmF0aW8oKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVkZWx0YSgwLCAwLCBiICogdXNlYyAvIGEpCisgICAgICAgICAgICByZXR1cm4gdGltZWRlbHRhKDAsIDAsIF9kaXZpZGVfYW5kX3JvdW5kKGIgKiB1c2VjLCBhKSkKIAogICAgIGRlZiBfX21vZF9fKHNlbGYsIG90aGVyKToKICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgdGltZWRlbHRhKToKQEAgLTYyNSw3ICs2NDYsNyBAQAogICAgIE9wZXJhdG9yczoKIAogICAgIF9fcmVwcl9fLCBfX3N0cl9fCi0gICAgX19jbXBfXywgX19oYXNoX18KKyAgICBfX2VxX18sIF9fbGVfXywgX19sdF9fLCBfX2dlX18sIF9fZ3RfXywgX19oYXNoX18KICAgICBfX2FkZF9fLCBfX3JhZGRfXywgX19zdWJfXyAoYWRkL3JhZGQgb25seSB3aXRoIHRpbWVkZWx0YSBhcmcpCiAKICAgICBNZXRob2RzOgpAQCAtNzU1LDcgKzc3Niw4IEBACiAgICAgICAgICIiImRheSAoMS0zMSkiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX2RheQogCi0gICAgIyBTdGFuZGFyZCBjb252ZXJzaW9ucywgX19jbXBfXywgX19oYXNoX18gKGFuZCBoZWxwZXJzKQorICAgICMgU3RhbmRhcmQgY29udmVyc2lvbnMsIF9fZXFfXywgX19sZV9fLCBfX2x0X18sIF9fZ2VfXywgX19ndF9fLAorICAgICMgX19oYXNoX18gKGFuZCBoZWxwZXJzKQogCiAgICAgZGVmIHRpbWV0dXBsZShzZWxmKToKICAgICAgICAgIlJldHVybiBsb2NhbCB0aW1lIHR1cGxlIGNvbXBhdGlibGUgd2l0aCB0aW1lLmxvY2FsdGltZSgpLiIKQEAgLTk4NCw3ICsxMDA2LDcgQEAKICAgICBPcGVyYXRvcnM6CiAKICAgICBfX3JlcHJfXywgX19zdHJfXwotICAgIF9fY21wX18sIF9faGFzaF9fCisgICAgX19lcV9fLCBfX2xlX18sIF9fbHRfXywgX19nZV9fLCBfX2d0X18sIF9faGFzaF9fCiAKICAgICBNZXRob2RzOgogCkBAIC0xMzQwLDQ5ICsxMzYyLDQyIEBACiAgICAgICAgIHJldHVybiBzZWxmLl90emluZm8KIAogICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZnJvbXRpbWVzdGFtcChjbHMsIHQsIHV0YywgdHopOgorICAgICAgICAiIiJDb25zdHJ1Y3QgYSBkYXRldGltZSBmcm9tIGEgUE9TSVggdGltZXN0YW1wIChsaWtlIHRpbWUudGltZSgpKS4KKworICAgICAgICBBIHRpbWV6b25lIGluZm8gb2JqZWN0IG1heSBiZSBwYXNzZWQgaW4gYXMgd2VsbC4KKyAgICAgICAgIiIiCisgICAgICAgIGZyYWMsIHQgPSBfbWF0aC5tb2RmKHQpCisgICAgICAgIHVzID0gcm91bmQoZnJhYyAqIDFlNikKKyAgICAgICAgaWYgdXMgPj0gMTAwMDAwMDoKKyAgICAgICAgICAgIHQgKz0gMQorICAgICAgICAgICAgdXMgLT0gMTAwMDAwMAorICAgICAgICBlbGlmIHVzIDwgMDoKKyAgICAgICAgICAgIHQgLT0gMQorICAgICAgICAgICAgdXMgKz0gMTAwMDAwMAorCisgICAgICAgIGNvbnZlcnRlciA9IF90aW1lLmdtdGltZSBpZiB1dGMgZWxzZSBfdGltZS5sb2NhbHRpbWUKKyAgICAgICAgeSwgbSwgZCwgaGgsIG1tLCBzcywgd2Vla2RheSwgamRheSwgZHN0ID0gY29udmVydGVyKHQpCisgICAgICAgIHNzID0gbWluKHNzLCA1OSkgICAgIyBjbGFtcCBvdXQgbGVhcCBzZWNvbmRzIGlmIHRoZSBwbGF0Zm9ybSBoYXMgdGhlbQorICAgICAgICByZXR1cm4gY2xzKHksIG0sIGQsIGhoLCBtbSwgc3MsIHVzLCB0eikKKworICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmcm9tdGltZXN0YW1wKGNscywgdCwgdHo9Tm9uZSk6CiAgICAgICAgICIiIkNvbnN0cnVjdCBhIGRhdGV0aW1lIGZyb20gYSBQT1NJWCB0aW1lc3RhbXAgKGxpa2UgdGltZS50aW1lKCkpLgogCiAgICAgICAgIEEgdGltZXpvbmUgaW5mbyBvYmplY3QgbWF5IGJlIHBhc3NlZCBpbiBhcyB3ZWxsLgogICAgICAgICAiIiIKLQogICAgICAgICBfY2hlY2tfdHppbmZvX2FyZyh0eikKIAotICAgICAgICBjb252ZXJ0ZXIgPSBfdGltZS5sb2NhbHRpbWUgaWYgdHogaXMgTm9uZSBlbHNlIF90aW1lLmdtdGltZQotCi0gICAgICAgIHQsIGZyYWMgPSBkaXZtb2QodCwgMS4wKQotICAgICAgICB1cyA9IGludChmcmFjICogMWU2KQotCi0gICAgICAgICMgSWYgdGltZXN0YW1wIGlzIGxlc3MgdGhhbiBvbmUgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGEKLSAgICAgICAgIyBmdWxsIHNlY29uZCwgdXMgY2FuIGJlIHJvdW5kZWQgdXAgdG8gMTAwMDAwMC4gIEluIHRoaXMgY2FzZSwKLSAgICAgICAgIyByb2xsIG92ZXIgdG8gc2Vjb25kcywgb3RoZXJ3aXNlLCBWYWx1ZUVycm9yIGlzIHJhaXNlZAotICAgICAgICAjIGJ5IHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgaWYgdXMgPT0gMTAwMDAwMDoKLSAgICAgICAgICAgIHQgKz0gMQotICAgICAgICAgICAgdXMgPSAwCi0gICAgICAgIHksIG0sIGQsIGhoLCBtbSwgc3MsIHdlZWtkYXksIGpkYXksIGRzdCA9IGNvbnZlcnRlcih0KQotICAgICAgICBzcyA9IG1pbihzcywgNTkpICAgICMgY2xhbXAgb3V0IGxlYXAgc2Vjb25kcyBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZW0KLSAgICAgICAgcmVzdWx0ID0gY2xzKHksIG0sIGQsIGhoLCBtbSwgc3MsIHVzLCB0eikKKyAgICAgICAgcmVzdWx0ID0gY2xzLl9mcm9tdGltZXN0YW1wKHQsIHR6IGlzIG5vdCBOb25lLCB0eikKICAgICAgICAgaWYgdHogaXMgbm90IE5vbmU6CiAgICAgICAgICAgICByZXN1bHQgPSB0ei5mcm9tdXRjKHJlc3VsdCkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHV0Y2Zyb210aW1lc3RhbXAoY2xzLCB0KToKLSAgICAgICAgIkNvbnN0cnVjdCBhIFVUQyBkYXRldGltZSBmcm9tIGEgUE9TSVggdGltZXN0YW1wIChsaWtlIHRpbWUudGltZSgpKS4iCi0gICAgICAgIHQsIGZyYWMgPSBkaXZtb2QodCwgMS4wKQotICAgICAgICB1cyA9IGludChmcmFjICogMWU2KQotCi0gICAgICAgICMgSWYgdGltZXN0YW1wIGlzIGxlc3MgdGhhbiBvbmUgbWljcm9zZWNvbmQgc21hbGxlciB0aGFuIGEKLSAgICAgICAgIyBmdWxsIHNlY29uZCwgdXMgY2FuIGJlIHJvdW5kZWQgdXAgdG8gMTAwMDAwMC4gIEluIHRoaXMgY2FzZSwKLSAgICAgICAgIyByb2xsIG92ZXIgdG8gc2Vjb25kcywgb3RoZXJ3aXNlLCBWYWx1ZUVycm9yIGlzIHJhaXNlZAotICAgICAgICAjIGJ5IHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgaWYgdXMgPT0gMTAwMDAwMDoKLSAgICAgICAgICAgIHQgKz0gMQotICAgICAgICAgICAgdXMgPSAwCi0gICAgICAgIHksIG0sIGQsIGhoLCBtbSwgc3MsIHdlZWtkYXksIGpkYXksIGRzdCA9IF90aW1lLmdtdGltZSh0KQotICAgICAgICBzcyA9IG1pbihzcywgNTkpICAgICMgY2xhbXAgb3V0IGxlYXAgc2Vjb25kcyBpZiB0aGUgcGxhdGZvcm0gaGFzIHRoZW0KLSAgICAgICAgcmV0dXJuIGNscyh5LCBtLCBkLCBoaCwgbW0sIHNzLCB1cykKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgbmFpdmUgVVRDIGRhdGV0aW1lIGZyb20gYSBQT1NJWCB0aW1lc3RhbXAuIiIiCisgICAgICAgIHJldHVybiBjbHMuX2Zyb210aW1lc3RhbXAodCwgVHJ1ZSwgTm9uZSkKIAogICAgICMgWFhYIFRoaXMgaXMgc3VwcG9zZWQgdG8gZG8gYmV0dGVyIHRoYW4gd2UgKmNhbiogZG8gYnkgdXNpbmcgdGltZS50aW1lKCksCiAgICAgIyBYWFggaWYgdGhlIHBsYXRmb3JtIHN1cHBvcnRzIGEgbW9yZSBhY2N1cmF0ZSB3YXkuICBUaGUgQyBpbXBsZW1lbnRhdGlvbgpAQCAtMTkxNywyMDMgKzE5MzIsMjAzIEBACiB0aW1lem9uZS5taW4gPSB0aW1lem9uZS5fY3JlYXRlKHRpbWV6b25lLl9taW5vZmZzZXQpCiB0aW1lem9uZS5tYXggPSB0aW1lem9uZS5fY3JlYXRlKHRpbWV6b25lLl9tYXhvZmZzZXQpCiBfRVBPQ0ggPSBkYXRldGltZSgxOTcwLCAxLCAxLCB0emluZm89dGltZXpvbmUudXRjKQotIiIiCi1Tb21lIHRpbWUgem9uZSBhbGdlYnJhLiAgRm9yIGEgZGF0ZXRpbWUgeCwgbGV0Ci0gICAgeC5uID0geCBzdHJpcHBlZCBvZiBpdHMgdGltZXpvbmUgLS0gaXRzIG5haXZlIHRpbWUuCi0gICAgeC5vID0geC51dGNvZmZzZXQoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKLSAgICAgICAgICByZXR1cm4gTm9uZQotICAgIHguZCA9IHguZHN0KCksIGFuZCBhc3N1bWluZyB0aGF0IGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIG9yCi0gICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICB4LnMgPSB4J3Mgc3RhbmRhcmQgb2Zmc2V0LCB4Lm8gLSB4LmQKIAotTm93IHNvbWUgZGVyaXZlZCBydWxlcywgd2hlcmUgayBpcyBhIGR1cmF0aW9uICh0aW1lZGVsdGEpLgorIyBTb21lIHRpbWUgem9uZSBhbGdlYnJhLiAgRm9yIGEgZGF0ZXRpbWUgeCwgbGV0CisjICAgICB4Lm4gPSB4IHN0cmlwcGVkIG9mIGl0cyB0aW1lem9uZSAtLSBpdHMgbmFpdmUgdGltZS4KKyMgICAgIHgubyA9IHgudXRjb2Zmc2V0KCksIGFuZCBhc3N1bWluZyB0aGF0IGRvZXNuJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIG9yCisjICAgICAgICAgICByZXR1cm4gTm9uZQorIyAgICAgeC5kID0geC5kc3QoKSwgYW5kIGFzc3VtaW5nIHRoYXQgZG9lc24ndCByYWlzZSBhbiBleGNlcHRpb24gb3IKKyMgICAgICAgICAgIHJldHVybiBOb25lCisjICAgICB4LnMgPSB4J3Mgc3RhbmRhcmQgb2Zmc2V0LCB4Lm8gLSB4LmQKKyMKKyMgTm93IHNvbWUgZGVyaXZlZCBydWxlcywgd2hlcmUgayBpcyBhIGR1cmF0aW9uICh0aW1lZGVsdGEpLgorIworIyAxLiB4Lm8gPSB4LnMgKyB4LmQKKyMgICAgVGhpcyBmb2xsb3dzIGZyb20gdGhlIGRlZmluaXRpb24gb2YgeC5zLgorIworIyAyLiBJZiB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwgeC5zID0geS5zLgorIyAgICBUaGlzIGlzIGFjdHVhbGx5IGEgcmVxdWlyZW1lbnQsIGFuIGFzc3VtcHRpb24gd2UgbmVlZCB0byBtYWtlIGFib3V0CisjICAgIHNhbmUgdHppbmZvIGNsYXNzZXMuCisjCisjIDMuIFRoZSBuYWl2ZSBVVEMgdGltZSBjb3JyZXNwb25kaW5nIHRvIHggaXMgeC5uIC0geC5vLgorIyAgICBUaGlzIGlzIGFnYWluIGEgcmVxdWlyZW1lbnQgZm9yIGEgc2FuZSB0emluZm8gY2xhc3MuCisjCisjIDQuICh4K2spLnMgPSB4LnMKKyMgICAgVGhpcyBmb2xsb3dzIGZyb20gIzIsIGFuZCB0aGF0IGRhdGltZXRpbWV0eit0aW1lZGVsdGEgcHJlc2VydmVzIHR6aW5mby4KKyMKKyMgNS4gKHgraykubiA9IHgubiArIGsKKyMgICAgQWdhaW4gZm9sbG93cyBmcm9tIGhvdyBhcml0aG1ldGljIGlzIGRlZmluZWQuCisjCisjIE5vdyB3ZSBjYW4gZXhwbGFpbiB0ei5mcm9tdXRjKHgpLiAgTGV0J3MgYXNzdW1lIGl0J3MgYW4gaW50ZXJlc3RpbmcgY2FzZQorIyAobWVhbmluZyB0aGF0IHRoZSB2YXJpb3VzIHR6aW5mbyBtZXRob2RzIGV4aXN0LCBhbmQgZG9uJ3QgYmxvdyB1cCBvciByZXR1cm4KKyMgTm9uZSB3aGVuIGNhbGxlZCkuCisjCisjIFRoZSBmdW5jdGlvbiB3YW50cyB0byByZXR1cm4gYSBkYXRldGltZSB5IHdpdGggdGltZXpvbmUgdHosIGVxdWl2YWxlbnQgdG8geC4KKyMgeCBpcyBhbHJlYWR5IGluIFVUQy4KKyMKKyMgQnkgIzMsIHdlIHdhbnQKKyMKKyMgICAgIHkubiAtIHkubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdCisjCisjIFRoZSBhbGdvcml0aG0gc3RhcnRzIGJ5IGF0dGFjaGluZyB0eiB0byB4Lm4sIGFuZCBjYWxsaW5nIHRoYXQgeS4gIFNvCisjIHgubiA9IHkubiBhdCB0aGUgc3RhcnQuICBUaGVuIGl0IHdhbnRzIHRvIGFkZCBhIGR1cmF0aW9uIGsgdG8geSwgc28gdGhhdCBbMV0KKyMgYmVjb21lcyB0cnVlOyBpbiBlZmZlY3QsIHdlIHdhbnQgdG8gc29sdmUgWzJdIGZvciBrOgorIworIyAgICAoeStrKS5uIC0gKHkraykubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICBbMl0KKyMKKyMgQnkgIzEsIHRoaXMgaXMgdGhlIHNhbWUgYXMKKyMKKyMgICAgKHkraykubiAtICgoeStrKS5zICsgKHkraykuZCkgPSB4Lm4gICAgICAgICAgWzNdCisjCisjIEJ5ICM1LCAoeStrKS5uID0geS5uICsgaywgd2hpY2ggZXF1YWxzIHgubiArIGsgYmVjYXVzZSB4Lm49eS5uIGF0IHRoZSBzdGFydC4KKyMgU3Vic3RpdHV0aW5nIHRoYXQgaW50byBbM10sCisjCisjICAgIHgubiArIGsgLSAoeStrKS5zIC0gKHkraykuZCA9IHgubjsgdGhlIHgubiB0ZXJtcyBjYW5jZWwsIGxlYXZpbmcKKyMgICAgayAtICh5K2spLnMgLSAoeStrKS5kID0gMDsgcmVhcnJhbmdpbmcsCisjICAgIGsgPSAoeStrKS5zIC0gKHkraykuZDsgYnkgIzQsICh5K2spLnMgPT0geS5zLCBzbworIyAgICBrID0geS5zIC0gKHkraykuZAorIworIyBPbiB0aGUgUkhTLCAoeStrKS5kIGNhbid0IGJlIGNvbXB1dGVkIGRpcmVjdGx5LCBidXQgeS5zIGNhbiBiZSwgYW5kIHdlCisjIGFwcHJveGltYXRlIGsgYnkgaWdub3JpbmcgdGhlICh5K2spLmQgdGVybSBhdCBmaXJzdC4gIE5vdGUgdGhhdCBrIGNhbid0IGJlCisjIHZlcnkgbGFyZ2UsIHNpbmNlIGFsbCBvZmZzZXQtcmV0dXJuaW5nIG1ldGhvZHMgcmV0dXJuIGEgZHVyYXRpb24gb2YgbWFnbml0dWRlCisjIGxlc3MgdGhhbiAyNCBob3Vycy4gIEZvciB0aGF0IHJlYXNvbiwgaWYgeSBpcyBmaXJtbHkgaW4gc3RkIHRpbWUsICh5K2spLmQgbXVzdAorIyBiZSAwLCBzbyBpZ25vcmluZyBpdCBoYXMgbm8gY29uc2VxdWVuY2UgdGhlbi4KKyMKKyMgSW4gYW55IGNhc2UsIHRoZSBuZXcgdmFsdWUgaXMKKyMKKyMgICAgIHogPSB5ICsgeS5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRdCisjCisjIEl0J3MgaGVscGZ1bCB0byBzdGVwIGJhY2sgYXQgbG9vayBhdCBbNF0gZnJvbSBhIGhpZ2hlciBsZXZlbDogIGl0J3Mgc2ltcGx5CisjIG1hcHBpbmcgZnJvbSBVVEMgdG8gdHoncyBzdGFuZGFyZCB0aW1lLgorIworIyBBdCB0aGlzIHBvaW50LCBpZgorIworIyAgICAgei5uIC0gei5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbNV0KKyMKKyMgd2UgaGF2ZSBhbiBlcXVpdmFsZW50IHRpbWUsIGFuZCBhcmUgYWxtb3N0IGRvbmUuICBUaGUgaW5zZWN1cml0eSBoZXJlIGlzCisjIGF0IHRoZSBzdGFydCBvZiBkYXlsaWdodCB0aW1lLiAgUGljdHVyZSBVUyBFYXN0ZXJuIGZvciBjb25jcmV0ZW5lc3MuICBUaGUgd2FsbAorIyB0aW1lIGp1bXBzIGZyb20gMTo1OSB0byAzOjAwLCBhbmQgd2FsbCBob3VycyBvZiB0aGUgZm9ybSAyOk1NIGRvbid0IG1ha2UgZ29vZAorIyBzZW5zZSB0aGVuLiAgVGhlIGRvY3MgYXNrIHRoYXQgYW4gRWFzdGVybiB0emluZm8gY2xhc3MgY29uc2lkZXIgc3VjaCBhIHRpbWUgdG8KKyMgYmUgRURUIChiZWNhdXNlIGl0J3MgImFmdGVyIDIiKSwgd2hpY2ggaXMgYSByZWR1bmRhbnQgc3BlbGxpbmcgb2YgMTpNTSBFU1QKKyMgb24gdGhlIGRheSBEU1Qgc3RhcnRzLiAgV2Ugd2FudCB0byByZXR1cm4gdGhlIDE6TU0gRVNUIHNwZWxsaW5nIGJlY2F1c2UgdGhhdCdzCisjIHRoZSBvbmx5IHNwZWxsaW5nIHRoYXQgbWFrZXMgc2Vuc2Ugb24gdGhlIGxvY2FsIHdhbGwgY2xvY2suCisjCisjIEluIGZhY3QsIGlmIFs1XSBob2xkcyBhdCB0aGlzIHBvaW50LCB3ZSBkbyBoYXZlIHRoZSBzdGFuZGFyZC10aW1lIHNwZWxsaW5nLAorIyBidXQgdGhhdCB0YWtlcyBhIGJpdCBvZiBwcm9vZi4gIFdlIGZpcnN0IHByb3ZlIGEgc3Ryb25nZXIgcmVzdWx0LiAgV2hhdCdzIHRoZQorIyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs1XT8gIExldAorIworIyAgICAgZGlmZiA9IHgubiAtICh6Lm4gLSB6Lm8pICAgICAgICAgICAgICAgICAgICBbNl0KKyMKKyMgTm93CisjICAgICB6Lm4gPSAgICAgICAgICAgICAgICAgICAgICAgYnkgWzRdCisjICAgICAoeSArIHkucykubiA9ICAgICAgICAgICAgICAgYnkgIzUKKyMgICAgIHkubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB5Lm4gPSB4Lm4KKyMgICAgIHgubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB6IGFuZCB5IGFyZSBoYXZlIHRoZSBzYW1lIHR6aW5mbyBtZW1iZXIsCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkucyA9IHoucyBieSAjMgorIyAgICAgeC5uICsgei5zCisjCisjIFBsdWdnaW5nIHRoYXQgYmFjayBpbnRvIFs2XSBnaXZlcworIworIyAgICAgZGlmZiA9CisjICAgICB4Lm4gLSAoKHgubiArIHoucykgLSB6Lm8pID0gICAgIGV4cGFuZGluZworIyAgICAgeC5uIC0geC5uIC0gei5zICsgei5vID0gICAgICAgICBjYW5jZWxsaW5nCisjICAgICAtIHoucyArIHoubyA9ICAgICAgICAgICAgICAgICAgIGJ5ICMyCisjICAgICB6LmQKKyMKKyMgU28gZGlmZiA9IHouZC4KKyMKKyMgSWYgWzVdIGlzIHRydWUgbm93LCBkaWZmID0gMCwgc28gei5kID0gMCB0b28sIGFuZCB3ZSBoYXZlIHRoZSBzdGFuZGFyZC10aW1lCisjIHNwZWxsaW5nIHdlIHdhbnRlZCBpbiB0aGUgZW5kY2FzZSBkZXNjcmliZWQgYWJvdmUuICBXZSdyZSBkb25lLiAgQ29udHJhcmlseSwKKyMgaWYgei5kID0gMCwgdGhlbiB3ZSBoYXZlIGEgVVRDIGVxdWl2YWxlbnQsIGFuZCBhcmUgYWxzbyBkb25lLgorIworIyBJZiBbNV0gaXMgbm90IHRydWUgbm93LCBkaWZmID0gei5kICE9IDAsIGFuZCB6LmQgaXMgdGhlIG9mZnNldCB3ZSBuZWVkIHRvCisjIGFkZCB0byB6IChpbiBlZmZlY3QsIHogaXMgaW4gdHoncyBzdGFuZGFyZCB0aW1lLCBhbmQgd2UgbmVlZCB0byBzaGlmdCB0aGUKKyMgbG9jYWwgY2xvY2sgaW50byB0eidzIGRheWxpZ2h0IHRpbWUpLgorIworIyBMZXQKKyMKKyMgICAgIHonID0geiArIHouZCA9IHogKyBkaWZmICAgICAgICAgICAgICAgICAgICAgWzddCisjCisjIGFuZCB3ZSBjYW4gYWdhaW4gYXNrIHdoZXRoZXIKKyMKKyMgICAgIHonLm4gLSB6Jy5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgWzhdCisjCisjIElmIHNvLCB3ZSdyZSBkb25lLiAgSWYgbm90LCB0aGUgdHppbmZvIGNsYXNzIGlzIGluc2FuZSwgYWNjb3JkaW5nIHRvIHRoZQorIyBhc3N1bXB0aW9ucyB3ZSd2ZSBtYWRlLiAgVGhpcyBhbHNvIHJlcXVpcmVzIGEgYml0IG9mIHByb29mLiAgQXMgYmVmb3JlLCBsZXQncworIyBjb21wdXRlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs4XSAoYW5kIHNraXBwaW5nIHNvbWUgb2YKKyMgdGhlIGp1c3RpZmljYXRpb25zIGZvciB0aGUga2luZHMgb2Ygc3Vic3RpdHV0aW9ucyB3ZSd2ZSBkb25lIHNldmVyYWwgdGltZXMKKyMgYWxyZWFkeSk6CisjCisjICAgICBkaWZmJyA9IHgubiAtICh6Jy5uIC0geicubykgPSAgICAgICAgICAgcmVwbGFjaW5nIHonLm4gdmlhIFs3XQorIyAgICAgICAgICAgICB4Lm4gIC0gKHoubiArIGRpZmYgLSB6Jy5vKSA9ICAgIHJlcGxhY2luZyBkaWZmIHZpYSBbNl0KKyMgICAgICAgICAgICAgeC5uIC0gKHoubiArIHgubiAtICh6Lm4gLSB6Lm8pIC0geicubykgPQorIyAgICAgICAgICAgICB4Lm4gLSB6Lm4gLSB4Lm4gKyB6Lm4gLSB6Lm8gKyB6Jy5vID0gICAgY2FuY2VsIHgubgorIyAgICAgICAgICAgICAtIHoubiArIHoubiAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgY2FuY2VsIHoubgorIyAgICAgICAgICAgICAtIHoubyArIHonLm8gPSAgICAgICAgICAgICAgICAgICAgICAjMSB0d2ljZQorIyAgICAgICAgICAgICAtei5zIC0gei5kICsgeicucyArIHonLmQgPSAgICAgICAgICB6IGFuZCB6JyBoYXZlIHNhbWUgdHppbmZvCisjICAgICAgICAgICAgIHonLmQgLSB6LmQKKyMKKyMgU28geicgaXMgVVRDLWVxdWl2YWxlbnQgdG8geCBpZmYgeicuZCA9IHouZCBhdCB0aGlzIHBvaW50LiAgSWYgdGhleSBhcmUgZXF1YWwsCisjIHdlJ3ZlIGZvdW5kIHRoZSBVVEMtZXF1aXZhbGVudCBzbyBhcmUgZG9uZS4gIEluIGZhY3QsIHdlIHN0b3Agd2l0aCBbN10gYW5kCisjIHJldHVybiB6Jywgbm90IGJvdGhlcmluZyB0byBjb21wdXRlIHonLmQuCisjCisjIEhvdyBjb3VsZCB6LmQgYW5kIHonZCBkaWZmZXI/ICB6JyA9IHogKyB6LmQgWzddLCBzbyBtZXJlbHkgbW92aW5nIHonIGJ5CisjIGEgZHN0KCkgb2Zmc2V0LCBhbmQgc3RhcnRpbmcgKmZyb20qIGEgdGltZSBhbHJlYWR5IGluIERTVCAod2Uga25vdyB6LmQgIT0gMCksCisjIHdvdWxkIGhhdmUgdG8gY2hhbmdlIHRoZSByZXN1bHQgZHN0KCkgcmV0dXJuczogIHdlIHN0YXJ0IGluIERTVCwgYW5kIG1vdmluZworIyBhIGxpdHRsZSBmdXJ0aGVyIGludG8gaXQgdGFrZXMgdXMgb3V0IG9mIERTVC4KKyMKKyMgVGhlcmUgaXNuJ3QgYSBzYW5lIGNhc2Ugd2hlcmUgdGhpcyBjYW4gaGFwcGVuLiAgVGhlIGNsb3Nlc3QgaXQgZ2V0cyBpcyBhdAorIyB0aGUgZW5kIG9mIERTVCwgd2hlcmUgdGhlcmUncyBhbiBob3VyIGluIFVUQyB3aXRoIG5vIHNwZWxsaW5nIGluIGEgaHlicmlkCisjIHR6aW5mbyBjbGFzcy4gIEluIFVTIEVhc3Rlcm4sIHRoYXQncyA1Ok1NIFVUQyA9IDA6TU0gRVNUID0gMTpNTSBFRFQuICBEdXJpbmcKKyMgdGhhdCBob3VyLCBvbiBhbiBFYXN0ZXJuIGNsb2NrIDE6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gc3RhbmRhcmQgdGltZSAoNjpNTQorIyBVVEMpIGJlY2F1c2UgdGhlIGRvY3MgaW5zaXN0IG9uIHRoYXQsIGJ1dCAwOk1NIGlzIHRha2VuIGFzIGJlaW5nIGluIGRheWxpZ2h0CisjIHRpbWUgKDQ6TU0gVVRDKS4gIFRoZXJlIGlzIG5vIGxvY2FsIHRpbWUgbWFwcGluZyB0byA1Ok1NIFVUQy4gIFRoZSBsb2NhbAorIyBjbG9jayBqdW1wcyBmcm9tIDE6NTkgYmFjayB0byAxOjAwIGFnYWluLCBhbmQgcmVwZWF0cyB0aGUgMTpNTSBob3VyIGluCisjIHN0YW5kYXJkIHRpbWUuICBTaW5jZSB0aGF0J3Mgd2hhdCB0aGUgbG9jYWwgY2xvY2sgKmRvZXMqLCB3ZSB3YW50IHRvIG1hcCBib3RoCisjIFVUQyBob3VycyA1Ok1NIGFuZCA2Ok1NIHRvIDE6TU0gRWFzdGVybi4gIFRoZSByZXN1bHQgaXMgYW1iaWd1b3VzCisjIGluIGxvY2FsIHRpbWUsIGJ1dCBzbyBpdCBnb2VzIC0tIGl0J3MgdGhlIHdheSB0aGUgbG9jYWwgY2xvY2sgd29ya3MuCisjCisjIFdoZW4geCA9IDU6TU0gVVRDIGlzIHRoZSBpbnB1dCB0byB0aGlzIGFsZ29yaXRobSwgeC5vPTAsIHkubz0tNSBhbmQgeS5kPTAsCisjIHNvIHo9MDpNTS4gIHouZD02MCAobWludXRlcykgdGhlbiwgc28gWzVdIGRvZXNuJ3QgaG9sZCBhbmQgd2Uga2VlcCBnb2luZy4KKyMgeicgPSB6ICsgei5kID0gMTpNTSB0aGVuLCBhbmQgeicuZD0wLCBhbmQgeicuZCAtIHouZCA9IC02MCAhPSAwIHNvIFs4XQorIyAoY29ycmVjdGx5KSBjb25jbHVkZXMgdGhhdCB6JyBpcyBub3QgVVRDLWVxdWl2YWxlbnQgdG8geC4KKyMKKyMgQmVjYXVzZSB3ZSBrbm93IHouZCBzYWlkIHogd2FzIGluIGRheWxpZ2h0IHRpbWUgKGVsc2UgWzVdIHdvdWxkIGhhdmUgaGVsZCBhbmQKKyMgd2Ugd291bGQgaGF2ZSBzdG9wcGVkIHRoZW4pLCBhbmQgd2Uga25vdyB6LmQgIT0geicuZCAoZWxzZSBbOF0gd291bGQgaGF2ZSBoZWxkCisjIGFuZCB3ZSBoYXZlIHN0b3BwZWQgdGhlbiksIGFuZCB0aGVyZSBhcmUgb25seSAyIHBvc3NpYmxlIHZhbHVlcyBkc3QoKSBjYW4KKyMgcmV0dXJuIGluIEVhc3Rlcm4sIGl0IGZvbGxvd3MgdGhhdCB6Jy5kIG11c3QgYmUgMCAod2hpY2ggaXQgaXMgaW4gdGhlIGV4YW1wbGUsCisjIGJ1dCB0aGUgcmVhc29uaW5nIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSBleGFtcGxlIC0tIGl0IGRlcGVuZHMgb24gdGhlcmUgYmVpbmcKKyMgdHdvIHBvc3NpYmxlIGRzdCgpIG91dGNvbWVzLCBvbmUgemVybyBhbmQgdGhlIG90aGVyIG5vbi16ZXJvKS4gIFRoZXJlZm9yZQorIyB6JyBtdXN0IGJlIGluIHN0YW5kYXJkIHRpbWUsIGFuZCBpcyB0aGUgc3BlbGxpbmcgd2Ugd2FudCBpbiB0aGlzIGNhc2UuCisjCisjIE5vdGUgYWdhaW4gdGhhdCB6JyBpcyBub3QgVVRDLWVxdWl2YWxlbnQgYXMgZmFyIGFzIHRoZSBoeWJyaWQgdHppbmZvIGNsYXNzIGlzCisjIGNvbmNlcm5lZCAoYmVjYXVzZSBpdCB0YWtlcyB6JyBhcyBiZWluZyBpbiBzdGFuZGFyZCB0aW1lIHJhdGhlciB0aGFuIHRoZQorIyBkYXlsaWdodCB0aW1lIHdlIGludGVuZCBoZXJlKSwgYnV0IHJldHVybmluZyBpdCBnaXZlcyB0aGUgcmVhbC1saWZlICJsb2NhbAorIyBjbG9jayByZXBlYXRzIGFuIGhvdXIiIGJlaGF2aW9yIHdoZW4gbWFwcGluZyB0aGUgInVuc3BlbGxhYmxlIiBVVEMgaG91ciBpbnRvCisjIHR6LgorIworIyBXaGVuIHRoZSBpbnB1dCBpcyA2Ok1NLCB6PTE6TU0gYW5kIHouZD0wLCBhbmQgd2Ugc3RvcCBhdCBvbmNlLCBhZ2FpbiB3aXRoCisjIHRoZSAxOk1NIHN0YW5kYXJkIHRpbWUgc3BlbGxpbmcgd2Ugd2FudC4KKyMKKyMgU28gaG93IGNhbiB0aGlzIGJyZWFrPyAgT25lIG9mIHRoZSBhc3N1bXB0aW9ucyBtdXN0IGJlIHZpb2xhdGVkLiAgVHdvCisjIHBvc3NpYmlsaXRpZXM6CisjCisjIDEpIFsyXSBlZmZlY3RpdmVseSBzYXlzIHRoYXQgeS5zIGlzIGludmFyaWFudCBhY3Jvc3MgYWxsIHkgYmVsb25nIHRvIGEgZ2l2ZW4KKyMgICAgdGltZSB6b25lLiAgVGhpcyBpc24ndCB0cnVlIGlmLCBmb3IgcG9saXRpY2FsIHJlYXNvbnMgb3IgY29udGluZW50YWwgZHJpZnQsCisjICAgIGEgcmVnaW9uIGRlY2lkZXMgdG8gY2hhbmdlIGl0cyBiYXNlIG9mZnNldCBmcm9tIFVUQy4KKyMKKyMgMikgVGhlcmUgbWF5IGJlIHZlcnNpb25zIG9mICJkb3VibGUgZGF5bGlnaHQiIHRpbWUgd2hlcmUgdGhlIHRhaWwgZW5kIG9mCisjICAgIHRoZSBhbmFseXNpcyBnaXZlcyB1cCBhIHN0ZXAgdG9vIGVhcmx5LiAgSSBoYXZlbid0IHRob3VnaHQgYWJvdXQgdGhhdAorIyAgICBlbm91Z2ggdG8gc2F5LgorIworIyBJbiBhbnkgY2FzZSwgaXQncyBjbGVhciB0aGF0IHRoZSBkZWZhdWx0IGZyb211dGMoKSBpcyBzdHJvbmcgZW5vdWdoIHRvIGhhbmRsZQorIyAiYWxtb3N0IGFsbCIgdGltZSB6b25lczogIHNvIGxvbmcgYXMgdGhlIHN0YW5kYXJkIG9mZnNldCBpcyBpbnZhcmlhbnQsIGl0CisjIGRvZXNuJ3QgbWF0dGVyIGlmIGRheWxpZ2h0IHRpbWUgdHJhbnNpdGlvbiBwb2ludHMgY2hhbmdlIGZyb20geWVhciB0byB5ZWFyLCBvcgorIyBpZiBkYXlsaWdodCB0aW1lIGlzIHNraXBwZWQgaW4gc29tZSB5ZWFyczsgaXQgZG9lc24ndCBtYXR0ZXIgaG93IGxhcmdlIG9yCisjIHNtYWxsIGRzdCgpIG1heSBnZXQgd2l0aGluIGl0cyBib3VuZHM7IGFuZCBpdCBkb2Vzbid0IGV2ZW4gbWF0dGVyIGlmIHNvbWUKKyMgcGVydmVyc2UgdGltZSB6b25lIHJldHVybnMgYSBuZWdhdGl2ZSBkc3QoKSkuICBTbyBhIGJyZWFraW5nIGNhc2UgbXVzdCBiZQorIyBwcmV0dHkgYml6YXJyZSwgYW5kIGEgdHppbmZvIHN1YmNsYXNzIGNhbiBvdmVycmlkZSBmcm9tdXRjKCkgaWYgaXQgaXMuCiAKLTEuIHgubyA9IHgucyArIHguZAotICAgVGhpcyBmb2xsb3dzIGZyb20gdGhlIGRlZmluaXRpb24gb2YgeC5zLgotCi0yLiBJZiB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgdHppbmZvIG1lbWJlciwgeC5zID0geS5zLgotICAgVGhpcyBpcyBhY3R1YWxseSBhIHJlcXVpcmVtZW50LCBhbiBhc3N1bXB0aW9uIHdlIG5lZWQgdG8gbWFrZSBhYm91dAotICAgc2FuZSB0emluZm8gY2xhc3Nlcy4KLQotMy4gVGhlIG5haXZlIFVUQyB0aW1lIGNvcnJlc3BvbmRpbmcgdG8geCBpcyB4Lm4gLSB4Lm8uCi0gICBUaGlzIGlzIGFnYWluIGEgcmVxdWlyZW1lbnQgZm9yIGEgc2FuZSB0emluZm8gY2xhc3MuCi0KLTQuICh4K2spLnMgPSB4LnMKLSAgIFRoaXMgZm9sbG93cyBmcm9tICMyLCBhbmQgdGhhdCBkYXRpbWV0aW1ldHordGltZWRlbHRhIHByZXNlcnZlcyB0emluZm8uCi0KLTUuICh4K2spLm4gPSB4Lm4gKyBrCi0gICBBZ2FpbiBmb2xsb3dzIGZyb20gaG93IGFyaXRobWV0aWMgaXMgZGVmaW5lZC4KLQotTm93IHdlIGNhbiBleHBsYWluIHR6LmZyb211dGMoeCkuICBMZXQncyBhc3N1bWUgaXQncyBhbiBpbnRlcmVzdGluZyBjYXNlCi0obWVhbmluZyB0aGF0IHRoZSB2YXJpb3VzIHR6aW5mbyBtZXRob2RzIGV4aXN0LCBhbmQgZG9uJ3QgYmxvdyB1cCBvciByZXR1cm4KLU5vbmUgd2hlbiBjYWxsZWQpLgotCi1UaGUgZnVuY3Rpb24gd2FudHMgdG8gcmV0dXJuIGEgZGF0ZXRpbWUgeSB3aXRoIHRpbWV6b25lIHR6LCBlcXVpdmFsZW50IHRvIHguCi14IGlzIGFscmVhZHkgaW4gVVRDLgotCi1CeSAjMywgd2Ugd2FudAotCi0gICAgeS5uIC0geS5vID0geC5uICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV0KLQotVGhlIGFsZ29yaXRobSBzdGFydHMgYnkgYXR0YWNoaW5nIHR6IHRvIHgubiwgYW5kIGNhbGxpbmcgdGhhdCB5LiAgU28KLXgubiA9IHkubiBhdCB0aGUgc3RhcnQuICBUaGVuIGl0IHdhbnRzIHRvIGFkZCBhIGR1cmF0aW9uIGsgdG8geSwgc28gdGhhdCBbMV0KLWJlY29tZXMgdHJ1ZTsgaW4gZWZmZWN0LCB3ZSB3YW50IHRvIHNvbHZlIFsyXSBmb3IgazoKLQotICAgKHkraykubiAtICh5K2spLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgWzJdCi0KLUJ5ICMxLCB0aGlzIGlzIHRoZSBzYW1lIGFzCi0KLSAgICh5K2spLm4gLSAoKHkraykucyArICh5K2spLmQpID0geC5uICAgICAgICAgIFszXQotCi1CeSAjNSwgKHkraykubiA9IHkubiArIGssIHdoaWNoIGVxdWFscyB4Lm4gKyBrIGJlY2F1c2UgeC5uPXkubiBhdCB0aGUgc3RhcnQuCi1TdWJzdGl0dXRpbmcgdGhhdCBpbnRvIFszXSwKLQotICAgeC5uICsgayAtICh5K2spLnMgLSAoeStrKS5kID0geC5uOyB0aGUgeC5uIHRlcm1zIGNhbmNlbCwgbGVhdmluZwotICAgayAtICh5K2spLnMgLSAoeStrKS5kID0gMDsgcmVhcnJhbmdpbmcsCi0gICBrID0gKHkraykucyAtICh5K2spLmQ7IGJ5ICM0LCAoeStrKS5zID09IHkucywgc28KLSAgIGsgPSB5LnMgLSAoeStrKS5kCi0KLU9uIHRoZSBSSFMsICh5K2spLmQgY2FuJ3QgYmUgY29tcHV0ZWQgZGlyZWN0bHksIGJ1dCB5LnMgY2FuIGJlLCBhbmQgd2UKLWFwcHJveGltYXRlIGsgYnkgaWdub3JpbmcgdGhlICh5K2spLmQgdGVybSBhdCBmaXJzdC4gIE5vdGUgdGhhdCBrIGNhbid0IGJlCi12ZXJ5IGxhcmdlLCBzaW5jZSBhbGwgb2Zmc2V0LXJldHVybmluZyBtZXRob2RzIHJldHVybiBhIGR1cmF0aW9uIG9mIG1hZ25pdHVkZQotbGVzcyB0aGFuIDI0IGhvdXJzLiAgRm9yIHRoYXQgcmVhc29uLCBpZiB5IGlzIGZpcm1seSBpbiBzdGQgdGltZSwgKHkraykuZCBtdXN0Ci1iZSAwLCBzbyBpZ25vcmluZyBpdCBoYXMgbm8gY29uc2VxdWVuY2UgdGhlbi4KLQotSW4gYW55IGNhc2UsIHRoZSBuZXcgdmFsdWUgaXMKLQotICAgIHogPSB5ICsgeS5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzRdCi0KLUl0J3MgaGVscGZ1bCB0byBzdGVwIGJhY2sgYXQgbG9vayBhdCBbNF0gZnJvbSBhIGhpZ2hlciBsZXZlbDogIGl0J3Mgc2ltcGx5Ci1tYXBwaW5nIGZyb20gVVRDIHRvIHR6J3Mgc3RhbmRhcmQgdGltZS4KLQotQXQgdGhpcyBwb2ludCwgaWYKLQotICAgIHoubiAtIHoubyA9IHgubiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzVdCi0KLXdlIGhhdmUgYW4gZXF1aXZhbGVudCB0aW1lLCBhbmQgYXJlIGFsbW9zdCBkb25lLiAgVGhlIGluc2VjdXJpdHkgaGVyZSBpcwotYXQgdGhlIHN0YXJ0IG9mIGRheWxpZ2h0IHRpbWUuICBQaWN0dXJlIFVTIEVhc3Rlcm4gZm9yIGNvbmNyZXRlbmVzcy4gIFRoZSB3YWxsCi10aW1lIGp1bXBzIGZyb20gMTo1OSB0byAzOjAwLCBhbmQgd2FsbCBob3VycyBvZiB0aGUgZm9ybSAyOk1NIGRvbid0IG1ha2UgZ29vZAotc2Vuc2UgdGhlbi4gIFRoZSBkb2NzIGFzayB0aGF0IGFuIEVhc3Rlcm4gdHppbmZvIGNsYXNzIGNvbnNpZGVyIHN1Y2ggYSB0aW1lIHRvCi1iZSBFRFQgKGJlY2F1c2UgaXQncyAiYWZ0ZXIgMiIpLCB3aGljaCBpcyBhIHJlZHVuZGFudCBzcGVsbGluZyBvZiAxOk1NIEVTVAotb24gdGhlIGRheSBEU1Qgc3RhcnRzLiAgV2Ugd2FudCB0byByZXR1cm4gdGhlIDE6TU0gRVNUIHNwZWxsaW5nIGJlY2F1c2UgdGhhdCdzCi10aGUgb25seSBzcGVsbGluZyB0aGF0IG1ha2VzIHNlbnNlIG9uIHRoZSBsb2NhbCB3YWxsIGNsb2NrLgotCi1JbiBmYWN0LCBpZiBbNV0gaG9sZHMgYXQgdGhpcyBwb2ludCwgd2UgZG8gaGF2ZSB0aGUgc3RhbmRhcmQtdGltZSBzcGVsbGluZywKLWJ1dCB0aGF0IHRha2VzIGEgYml0IG9mIHByb29mLiAgV2UgZmlyc3QgcHJvdmUgYSBzdHJvbmdlciByZXN1bHQuICBXaGF0J3MgdGhlCi1kaWZmZXJlbmNlIGJldHdlZW4gdGhlIExIUyBhbmQgUkhTIG9mIFs1XT8gIExldAotCi0gICAgZGlmZiA9IHgubiAtICh6Lm4gLSB6Lm8pICAgICAgICAgICAgICAgICAgICBbNl0KLQotTm93Ci0gICAgei5uID0gICAgICAgICAgICAgICAgICAgICAgIGJ5IFs0XQotICAgICh5ICsgeS5zKS5uID0gICAgICAgICAgICAgICBieSAjNQotICAgIHkubiArIHkucyA9ICAgICAgICAgICAgICAgICBzaW5jZSB5Lm4gPSB4Lm4KLSAgICB4Lm4gKyB5LnMgPSAgICAgICAgICAgICAgICAgc2luY2UgeiBhbmQgeSBhcmUgaGF2ZSB0aGUgc2FtZSB0emluZm8gbWVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeS5zID0gei5zIGJ5ICMyCi0gICAgeC5uICsgei5zCi0KLVBsdWdnaW5nIHRoYXQgYmFjayBpbnRvIFs2XSBnaXZlcwotCi0gICAgZGlmZiA9Ci0gICAgeC5uIC0gKCh4Lm4gKyB6LnMpIC0gei5vKSA9ICAgICBleHBhbmRpbmcKLSAgICB4Lm4gLSB4Lm4gLSB6LnMgKyB6Lm8gPSAgICAgICAgIGNhbmNlbGxpbmcKLSAgICAtIHoucyArIHoubyA9ICAgICAgICAgICAgICAgICAgIGJ5ICMyCi0gICAgei5kCi0KLVNvIGRpZmYgPSB6LmQuCi0KLUlmIFs1XSBpcyB0cnVlIG5vdywgZGlmZiA9IDAsIHNvIHouZCA9IDAgdG9vLCBhbmQgd2UgaGF2ZSB0aGUgc3RhbmRhcmQtdGltZQotc3BlbGxpbmcgd2Ugd2FudGVkIGluIHRoZSBlbmRjYXNlIGRlc2NyaWJlZCBhYm92ZS4gIFdlJ3JlIGRvbmUuICBDb250cmFyaWx5LAotaWYgei5kID0gMCwgdGhlbiB3ZSBoYXZlIGEgVVRDIGVxdWl2YWxlbnQsIGFuZCBhcmUgYWxzbyBkb25lLgotCi1JZiBbNV0gaXMgbm90IHRydWUgbm93LCBkaWZmID0gei5kICE9IDAsIGFuZCB6LmQgaXMgdGhlIG9mZnNldCB3ZSBuZWVkIHRvCi1hZGQgdG8geiAoaW4gZWZmZWN0LCB6IGlzIGluIHR6J3Mgc3RhbmRhcmQgdGltZSwgYW5kIHdlIG5lZWQgdG8gc2hpZnQgdGhlCi1sb2NhbCBjbG9jayBpbnRvIHR6J3MgZGF5bGlnaHQgdGltZSkuCi0KLUxldAotCi0gICAgeicgPSB6ICsgei5kID0geiArIGRpZmYgICAgICAgICAgICAgICAgICAgICBbN10KLQotYW5kIHdlIGNhbiBhZ2FpbiBhc2sgd2hldGhlcgotCi0gICAgeicubiAtIHonLm8gPSB4Lm4gICAgICAgICAgICAgICAgICAgICAgICAgICBbOF0KLQotSWYgc28sIHdlJ3JlIGRvbmUuICBJZiBub3QsIHRoZSB0emluZm8gY2xhc3MgaXMgaW5zYW5lLCBhY2NvcmRpbmcgdG8gdGhlCi1hc3N1bXB0aW9ucyB3ZSd2ZSBtYWRlLiAgVGhpcyBhbHNvIHJlcXVpcmVzIGEgYml0IG9mIHByb29mLiAgQXMgYmVmb3JlLCBsZXQncwotY29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBMSFMgYW5kIFJIUyBvZiBbOF0gKGFuZCBza2lwcGluZyBzb21lIG9mCi10aGUganVzdGlmaWNhdGlvbnMgZm9yIHRoZSBraW5kcyBvZiBzdWJzdGl0dXRpb25zIHdlJ3ZlIGRvbmUgc2V2ZXJhbCB0aW1lcwotYWxyZWFkeSk6Ci0KLSAgICBkaWZmJyA9IHgubiAtICh6Jy5uIC0geicubykgPSAgICAgICAgICAgcmVwbGFjaW5nIHonLm4gdmlhIFs3XQotICAgICAgICAgICAgeC5uICAtICh6Lm4gKyBkaWZmIC0geicubykgPSAgICByZXBsYWNpbmcgZGlmZiB2aWEgWzZdCi0gICAgICAgICAgICB4Lm4gLSAoei5uICsgeC5uIC0gKHoubiAtIHoubykgLSB6Jy5vKSA9Ci0gICAgICAgICAgICB4Lm4gLSB6Lm4gLSB4Lm4gKyB6Lm4gLSB6Lm8gKyB6Jy5vID0gICAgY2FuY2VsIHgubgotICAgICAgICAgICAgLSB6Lm4gKyB6Lm4gLSB6Lm8gKyB6Jy5vID0gICAgICAgICAgICAgIGNhbmNlbCB6Lm4KLSAgICAgICAgICAgIC0gei5vICsgeicubyA9ICAgICAgICAgICAgICAgICAgICAgICMxIHR3aWNlCi0gICAgICAgICAgICAtei5zIC0gei5kICsgeicucyArIHonLmQgPSAgICAgICAgICB6IGFuZCB6JyBoYXZlIHNhbWUgdHppbmZvCi0gICAgICAgICAgICB6Jy5kIC0gei5kCi0KLVNvIHonIGlzIFVUQy1lcXVpdmFsZW50IHRvIHggaWZmIHonLmQgPSB6LmQgYXQgdGhpcyBwb2ludC4gIElmIHRoZXkgYXJlIGVxdWFsLAotd2UndmUgZm91bmQgdGhlIFVUQy1lcXVpdmFsZW50IHNvIGFyZSBkb25lLiAgSW4gZmFjdCwgd2Ugc3RvcCB3aXRoIFs3XSBhbmQKLXJldHVybiB6Jywgbm90IGJvdGhlcmluZyB0byBjb21wdXRlIHonLmQuCi0KLUhvdyBjb3VsZCB6LmQgYW5kIHonZCBkaWZmZXI/ICB6JyA9IHogKyB6LmQgWzddLCBzbyBtZXJlbHkgbW92aW5nIHonIGJ5Ci1hIGRzdCgpIG9mZnNldCwgYW5kIHN0YXJ0aW5nICpmcm9tKiBhIHRpbWUgYWxyZWFkeSBpbiBEU1QgKHdlIGtub3cgei5kICE9IDApLAotd291bGQgaGF2ZSB0byBjaGFuZ2UgdGhlIHJlc3VsdCBkc3QoKSByZXR1cm5zOiAgd2Ugc3RhcnQgaW4gRFNULCBhbmQgbW92aW5nCi1hIGxpdHRsZSBmdXJ0aGVyIGludG8gaXQgdGFrZXMgdXMgb3V0IG9mIERTVC4KLQotVGhlcmUgaXNuJ3QgYSBzYW5lIGNhc2Ugd2hlcmUgdGhpcyBjYW4gaGFwcGVuLiAgVGhlIGNsb3Nlc3QgaXQgZ2V0cyBpcyBhdAotdGhlIGVuZCBvZiBEU1QsIHdoZXJlIHRoZXJlJ3MgYW4gaG91ciBpbiBVVEMgd2l0aCBubyBzcGVsbGluZyBpbiBhIGh5YnJpZAotdHppbmZvIGNsYXNzLiAgSW4gVVMgRWFzdGVybiwgdGhhdCdzIDU6TU0gVVRDID0gMDpNTSBFU1QgPSAxOk1NIEVEVC4gIER1cmluZwotdGhhdCBob3VyLCBvbiBhbiBFYXN0ZXJuIGNsb2NrIDE6TU0gaXMgdGFrZW4gYXMgYmVpbmcgaW4gc3RhbmRhcmQgdGltZSAoNjpNTQotVVRDKSBiZWNhdXNlIHRoZSBkb2NzIGluc2lzdCBvbiB0aGF0LCBidXQgMDpNTSBpcyB0YWtlbiBhcyBiZWluZyBpbiBkYXlsaWdodAotdGltZSAoNDpNTSBVVEMpLiAgVGhlcmUgaXMgbm8gbG9jYWwgdGltZSBtYXBwaW5nIHRvIDU6TU0gVVRDLiAgVGhlIGxvY2FsCi1jbG9jayBqdW1wcyBmcm9tIDE6NTkgYmFjayB0byAxOjAwIGFnYWluLCBhbmQgcmVwZWF0cyB0aGUgMTpNTSBob3VyIGluCi1zdGFuZGFyZCB0aW1lLiAgU2luY2UgdGhhdCdzIHdoYXQgdGhlIGxvY2FsIGNsb2NrICpkb2VzKiwgd2Ugd2FudCB0byBtYXAgYm90aAotVVRDIGhvdXJzIDU6TU0gYW5kIDY6TU0gdG8gMTpNTSBFYXN0ZXJuLiAgVGhlIHJlc3VsdCBpcyBhbWJpZ3VvdXMKLWluIGxvY2FsIHRpbWUsIGJ1dCBzbyBpdCBnb2VzIC0tIGl0J3MgdGhlIHdheSB0aGUgbG9jYWwgY2xvY2sgd29ya3MuCi0KLVdoZW4geCA9IDU6TU0gVVRDIGlzIHRoZSBpbnB1dCB0byB0aGlzIGFsZ29yaXRobSwgeC5vPTAsIHkubz0tNSBhbmQgeS5kPTAsCi1zbyB6PTA6TU0uICB6LmQ9NjAgKG1pbnV0ZXMpIHRoZW4sIHNvIFs1XSBkb2Vzbid0IGhvbGQgYW5kIHdlIGtlZXAgZ29pbmcuCi16JyA9IHogKyB6LmQgPSAxOk1NIHRoZW4sIGFuZCB6Jy5kPTAsIGFuZCB6Jy5kIC0gei5kID0gLTYwICE9IDAgc28gWzhdCi0oY29ycmVjdGx5KSBjb25jbHVkZXMgdGhhdCB6JyBpcyBub3QgVVRDLWVxdWl2YWxlbnQgdG8geC4KLQotQmVjYXVzZSB3ZSBrbm93IHouZCBzYWlkIHogd2FzIGluIGRheWxpZ2h0IHRpbWUgKGVsc2UgWzVdIHdvdWxkIGhhdmUgaGVsZCBhbmQKLXdlIHdvdWxkIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHdlIGtub3cgei5kICE9IHonLmQgKGVsc2UgWzhdIHdvdWxkIGhhdmUgaGVsZAotYW5kIHdlIGhhdmUgc3RvcHBlZCB0aGVuKSwgYW5kIHRoZXJlIGFyZSBvbmx5IDIgcG9zc2libGUgdmFsdWVzIGRzdCgpIGNhbgotcmV0dXJuIGluIEVhc3Rlcm4sIGl0IGZvbGxvd3MgdGhhdCB6Jy5kIG11c3QgYmUgMCAod2hpY2ggaXQgaXMgaW4gdGhlIGV4YW1wbGUsCi1idXQgdGhlIHJlYXNvbmluZyBkb2Vzbid0IGRlcGVuZCBvbiB0aGUgZXhhbXBsZSAtLSBpdCBkZXBlbmRzIG9uIHRoZXJlIGJlaW5nCi10d28gcG9zc2libGUgZHN0KCkgb3V0Y29tZXMsIG9uZSB6ZXJvIGFuZCB0aGUgb3RoZXIgbm9uLXplcm8pLiAgVGhlcmVmb3JlCi16JyBtdXN0IGJlIGluIHN0YW5kYXJkIHRpbWUsIGFuZCBpcyB0aGUgc3BlbGxpbmcgd2Ugd2FudCBpbiB0aGlzIGNhc2UuCi0KLU5vdGUgYWdhaW4gdGhhdCB6JyBpcyBub3QgVVRDLWVxdWl2YWxlbnQgYXMgZmFyIGFzIHRoZSBoeWJyaWQgdHppbmZvIGNsYXNzIGlzCi1jb25jZXJuZWQgKGJlY2F1c2UgaXQgdGFrZXMgeicgYXMgYmVpbmcgaW4gc3RhbmRhcmQgdGltZSByYXRoZXIgdGhhbiB0aGUKLWRheWxpZ2h0IHRpbWUgd2UgaW50ZW5kIGhlcmUpLCBidXQgcmV0dXJuaW5nIGl0IGdpdmVzIHRoZSByZWFsLWxpZmUgImxvY2FsCi1jbG9jayByZXBlYXRzIGFuIGhvdXIiIGJlaGF2aW9yIHdoZW4gbWFwcGluZyB0aGUgInVuc3BlbGxhYmxlIiBVVEMgaG91ciBpbnRvCi10ei4KLQotV2hlbiB0aGUgaW5wdXQgaXMgNjpNTSwgej0xOk1NIGFuZCB6LmQ9MCwgYW5kIHdlIHN0b3AgYXQgb25jZSwgYWdhaW4gd2l0aAotdGhlIDE6TU0gc3RhbmRhcmQgdGltZSBzcGVsbGluZyB3ZSB3YW50LgotCi1TbyBob3cgY2FuIHRoaXMgYnJlYWs/ICBPbmUgb2YgdGhlIGFzc3VtcHRpb25zIG11c3QgYmUgdmlvbGF0ZWQuICBUd28KLXBvc3NpYmlsaXRpZXM6Ci0KLTEpIFsyXSBlZmZlY3RpdmVseSBzYXlzIHRoYXQgeS5zIGlzIGludmFyaWFudCBhY3Jvc3MgYWxsIHkgYmVsb25nIHRvIGEgZ2l2ZW4KLSAgIHRpbWUgem9uZS4gIFRoaXMgaXNuJ3QgdHJ1ZSBpZiwgZm9yIHBvbGl0aWNhbCByZWFzb25zIG9yIGNvbnRpbmVudGFsIGRyaWZ0LAotICAgYSByZWdpb24gZGVjaWRlcyB0byBjaGFuZ2UgaXRzIGJhc2Ugb2Zmc2V0IGZyb20gVVRDLgotCi0yKSBUaGVyZSBtYXkgYmUgdmVyc2lvbnMgb2YgImRvdWJsZSBkYXlsaWdodCIgdGltZSB3aGVyZSB0aGUgdGFpbCBlbmQgb2YKLSAgIHRoZSBhbmFseXNpcyBnaXZlcyB1cCBhIHN0ZXAgdG9vIGVhcmx5LiAgSSBoYXZlbid0IHRob3VnaHQgYWJvdXQgdGhhdAotICAgZW5vdWdoIHRvIHNheS4KLQotSW4gYW55IGNhc2UsIGl0J3MgY2xlYXIgdGhhdCB0aGUgZGVmYXVsdCBmcm9tdXRjKCkgaXMgc3Ryb25nIGVub3VnaCB0byBoYW5kbGUKLSJhbG1vc3QgYWxsIiB0aW1lIHpvbmVzOiAgc28gbG9uZyBhcyB0aGUgc3RhbmRhcmQgb2Zmc2V0IGlzIGludmFyaWFudCwgaXQKLWRvZXNuJ3QgbWF0dGVyIGlmIGRheWxpZ2h0IHRpbWUgdHJhbnNpdGlvbiBwb2ludHMgY2hhbmdlIGZyb20geWVhciB0byB5ZWFyLCBvcgotaWYgZGF5bGlnaHQgdGltZSBpcyBza2lwcGVkIGluIHNvbWUgeWVhcnM7IGl0IGRvZXNuJ3QgbWF0dGVyIGhvdyBsYXJnZSBvcgotc21hbGwgZHN0KCkgbWF5IGdldCB3aXRoaW4gaXRzIGJvdW5kczsgYW5kIGl0IGRvZXNuJ3QgZXZlbiBtYXR0ZXIgaWYgc29tZQotcGVydmVyc2UgdGltZSB6b25lIHJldHVybnMgYSBuZWdhdGl2ZSBkc3QoKSkuICBTbyBhIGJyZWFraW5nIGNhc2UgbXVzdCBiZQotcHJldHR5IGJpemFycmUsIGFuZCBhIHR6aW5mbyBzdWJjbGFzcyBjYW4gb3ZlcnJpZGUgZnJvbXV0YygpIGlmIGl0IGlzLgotIiIiCiB0cnk6CiAgICAgZnJvbSBfZGF0ZXRpbWUgaW1wb3J0ICoKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKZGlmZiAtLWdpdCBhL0xpYi9kYm0vX19pbml0X18ucHkgYi9MaWIvZGJtL19faW5pdF9fLnB5CmluZGV4IGE3ODNmZGUuLjVmNDY2NGEgMTAwNjQ0Ci0tLSBhL0xpYi9kYm0vX19pbml0X18ucHkKKysrIGIvTGliL2RibS9fX2luaXRfXy5weQpAQCAtNDIsNyArNDIsNyBAQAogX2RlZmF1bHRtb2QgPSBOb25lCiBfbW9kdWxlcyA9IHt9CiAKLWVycm9yID0gKGVycm9yLCBJT0Vycm9yKQorZXJyb3IgPSAoZXJyb3IsIE9TRXJyb3IpCiAKIHRyeToKICAgICBmcm9tIGRibSBpbXBvcnQgbmRibQpAQCAtMTExLDEyICsxMTEsMTAgQEAKICAgICB0cnk6CiAgICAgICAgIGYgPSBpby5vcGVuKGZpbGVuYW1lICsgIi5wYWciLCAicmIiKQogICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgIyBkYm0gbGlua2VkIHdpdGggZ2RibSBvbiBPUy8yIGRvZXNuJ3QgaGF2ZSAuZGlyIGZpbGUKLSAgICAgICAgaWYgbm90IChuZGJtLmxpYnJhcnkgPT0gIkdOVSBnZGJtIiBhbmQgc3lzLnBsYXRmb3JtID09ICJvczJlbXgiKToKLSAgICAgICAgICAgIGYgPSBpby5vcGVuKGZpbGVuYW1lICsgIi5kaXIiLCAicmIiKQotICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGYgPSBpby5vcGVuKGZpbGVuYW1lICsgIi5kaXIiLCAicmIiKQorICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgcmV0dXJuICJkYm0ubmRibSIKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBzb21lIGRibSBlbXVsYXRpb25zIGJhc2VkIG9uIEJlcmtlbGV5IERCIGdlbmVyYXRlIGEgLmRiIGZpbGUKICAgICAgICAgIyBzb21lIGRvIG5vdCwgYnV0IHRoZXkgc2hvdWxkIGJlIGNhdWdodCBieSB0aGUgYnNkIGNoZWNrcwogICAgICAgICB0cnk6CkBAIC0xMjksNyArMTI3LDcgQEAKICAgICAgICAgICAgICAgICBkID0gbmRibS5vcGVuKGZpbGVuYW1lKQogICAgICAgICAgICAgICAgIGQuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJldHVybiAiZGJtLm5kYm0iCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICMgQ2hlY2sgZm9yIGR1bWJkYm0gbmV4dCAtLSB0aGlzIGhhcyBhIC5kaXIgYW5kIGEgLmRhdCBmaWxlCkBAIC0xNDYsMTMgKzE0NCwxMyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAiZGJtLmR1bWIiCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICBleGNlcHQgKE9TRXJyb3IsIElPRXJyb3IpOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwYXNzCiAKICAgICAjIFNlZSBpZiB0aGUgZmlsZSBleGlzdHMsIHJldHVybiBOb25lIGlmIG5vdAogICAgIHRyeToKICAgICAgICAgZiA9IGlvLm9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICAjIFJlYWQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlIC0tIHRoZSBtYWdpYyBudW1iZXIKZGlmZiAtLWdpdCBhL0xpYi9kYm0vZHVtYi5weSBiL0xpYi9kYm0vZHVtYi5weQppbmRleCBjZmI5MTIzLi42M2JjMzI5IDEwMDY0NAotLS0gYS9MaWIvZGJtL2R1bWIucHkKKysrIGIvTGliL2RibS9kdW1iLnB5CkBAIC0yMSw2ICsyMSw3IEBACiAKICIiIgogCitpbXBvcnQgYXN0IGFzIF9hc3QKIGltcG9ydCBpbyBhcyBfaW8KIGltcG9ydCBvcyBhcyBfb3MKIGltcG9ydCBjb2xsZWN0aW9ucwpAQCAtMjksNyArMzAsNyBAQAogCiBfQkxPQ0tTSVpFID0gNTEyCiAKLWVycm9yID0gSU9FcnJvcgorZXJyb3IgPSBPU0Vycm9yCiAKIGNsYXNzIF9EYXRhYmFzZShjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CiAKQEAgLTY3LDEwICs2OCwxMSBAQAogICAgICAgICAjIE1vZCBieSBKYWNrOiBjcmVhdGUgZGF0YSBmaWxlIGlmIG5lZWRlZAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3InLCBlbmNvZGluZz0iTGF0aW4tMSIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgotICAgICAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICAgICAgc2VsZi5fY2htb2Qoc2VsZi5fZGF0ZmlsZSkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgd2l0aCBfaW8ub3BlbihzZWxmLl9kYXRmaWxlLCAndycsIGVuY29kaW5nPSJMYXRpbi0xIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kYXRmaWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuX3VwZGF0ZSgpCiAKICAgICAjIFJlYWQgZGlyZWN0b3J5IGZpbGUgaW50byB0aGUgaW4tbWVtb3J5IGluZGV4IGRpY3QuCkBAIC03OCwxNSArODAsMTUgQEAKICAgICAgICAgc2VsZi5faW5kZXggPSB7fQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ3InLCBlbmNvZGluZz0iTGF0aW4tMSIpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGY6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCkKLSAgICAgICAgICAgICAgICBrZXksIHBvc19hbmRfc2l6X3BhaXIgPSBldmFsKGxpbmUpCi0gICAgICAgICAgICAgICAga2V5ID0ga2V5LmVuY29kZSgnTGF0aW4tMScpCi0gICAgICAgICAgICAgICAgc2VsZi5faW5kZXhba2V5XSA9IHBvc19hbmRfc2l6X3BhaXIKLSAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBmOgorICAgICAgICAgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGtleSwgcG9zX2FuZF9zaXpfcGFpciA9IF9hc3QubGl0ZXJhbF9ldmFsKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5lbmNvZGUoJ0xhdGluLTEnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmRleFtrZXldID0gcG9zX2FuZF9zaXpfcGFpcgogCiAgICAgIyBXcml0ZSB0aGUgaW5kZXggZGljdCB0byB0aGUgZGlyZWN0b3J5IGZpbGUuICBUaGUgb3JpZ2luYWwgZGlyZWN0b3J5CiAgICAgIyBmaWxlIChpZiBhbnkpIGlzIHJlbmFtZWQgd2l0aCBhIC5iYWsgZXh0ZW5zaW9uIGZpcnN0LiAgSWYgYSAuYmFrCkBAIC0xMDAsMzIgKzEwMiwzNiBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnVubGluayhzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuX29zLnJlbmFtZShzZWxmLl9kaXJmaWxlLCBzZWxmLl9iYWtmaWxlKQotICAgICAgICBleGNlcHQgc2VsZi5fb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGYgPSBzZWxmLl9pby5vcGVuKHNlbGYuX2RpcmZpbGUsICd3JywgZW5jb2Rpbmc9IkxhdGluLTEiKQotICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kaXJmaWxlKQotICAgICAgICBmb3Iga2V5LCBwb3NfYW5kX3Npel9wYWlyIGluIHNlbGYuX2luZGV4Lml0ZW1zKCk6Ci0gICAgICAgICAgICAjIFVzZSBMYXRpbi0xIHNpbmNlIGl0IGhhcyBubyBxdWFsbXMgd2l0aCBhbnkgdmFsdWUgaW4gYW55Ci0gICAgICAgICAgICAjIHBvc2l0aW9uOyBVVEYtOCwgdGhvdWdoLCBkb2VzIGNhcmUgc29tZXRpbWVzLgotICAgICAgICAgICAgZi53cml0ZSgiJXIsICVyXG4iICUgKGtleS5kZWNvZGUoJ0xhdGluLTEnKSwgcG9zX2FuZF9zaXpfcGFpcikpCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ3cnLCBlbmNvZGluZz0iTGF0aW4tMSIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLl9jaG1vZChzZWxmLl9kaXJmaWxlKQorICAgICAgICAgICAgZm9yIGtleSwgcG9zX2FuZF9zaXpfcGFpciBpbiBzZWxmLl9pbmRleC5pdGVtcygpOgorICAgICAgICAgICAgICAgICMgVXNlIExhdGluLTEgc2luY2UgaXQgaGFzIG5vIHF1YWxtcyB3aXRoIGFueSB2YWx1ZSBpbiBhbnkKKyAgICAgICAgICAgICAgICAjIHBvc2l0aW9uOyBVVEYtOCwgdGhvdWdoLCBkb2VzIGNhcmUgc29tZXRpbWVzLgorICAgICAgICAgICAgICAgIGVudHJ5ID0gIiVyLCAlclxuIiAlIChrZXkuZGVjb2RlKCdMYXRpbi0xJyksIHBvc19hbmRfc2l6X3BhaXIpCisgICAgICAgICAgICAgICAgZi53cml0ZShlbnRyeSkKIAogICAgIHN5bmMgPSBfY29tbWl0CiAKKyAgICBkZWYgX3ZlcmlmeV9vcGVuKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9pbmRleCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgZXJyb3IoJ0RCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQnKQorCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgogICAgICAgICAgICAga2V5ID0ga2V5LmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLl92ZXJpZnlfb3BlbigpCiAgICAgICAgIHBvcywgc2l6ID0gc2VsZi5faW5kZXhba2V5XSAgICAgIyBtYXkgcmFpc2UgS2V5RXJyb3IKLSAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYicpCi0gICAgICAgIGYuc2Vlayhwb3MpCi0gICAgICAgIGRhdCA9IGYucmVhZChzaXopCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICB3aXRoIF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgZGF0ID0gZi5yZWFkKHNpeikKICAgICAgICAgcmV0dXJuIGRhdAogCiAgICAgIyBBcHBlbmQgdmFsIHRvIHRoZSBkYXRhIGZpbGUsIHN0YXJ0aW5nIGF0IGEgX0JMT0NLU0laRS1hbGlnbmVkCkBAIC0xMzMsMTQgKzEzOSwxMyBAQAogICAgICMgdG8gZ2V0IHRvIGFuIGFsaWduZWQgb2Zmc2V0LiAgUmV0dXJuIHBhaXIKICAgICAjICAgICAoc3RhcnRpbmcgb2Zmc2V0IG9mIHZhbCwgbGVuKHZhbCkpCiAgICAgZGVmIF9hZGR2YWwoc2VsZiwgdmFsKToKLSAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYisnKQotICAgICAgICBmLnNlZWsoMCwgMikKLSAgICAgICAgcG9zID0gaW50KGYudGVsbCgpKQotICAgICAgICBucG9zID0gKChwb3MgKyBfQkxPQ0tTSVpFIC0gMSkgLy8gX0JMT0NLU0laRSkgKiBfQkxPQ0tTSVpFCi0gICAgICAgIGYud3JpdGUoYidcMCcqKG5wb3MtcG9zKSkKLSAgICAgICAgcG9zID0gbnBvcwotICAgICAgICBmLndyaXRlKHZhbCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3JiKycpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsoMCwgMikKKyAgICAgICAgICAgIHBvcyA9IGludChmLnRlbGwoKSkKKyAgICAgICAgICAgIG5wb3MgPSAoKHBvcyArIF9CTE9DS1NJWkUgLSAxKSAvLyBfQkxPQ0tTSVpFKSAqIF9CTE9DS1NJWkUKKyAgICAgICAgICAgIGYud3JpdGUoYidcMCcqKG5wb3MtcG9zKSkKKyAgICAgICAgICAgIHBvcyA9IG5wb3MKKyAgICAgICAgICAgIGYud3JpdGUodmFsKQogICAgICAgICByZXR1cm4gKHBvcywgbGVuKHZhbCkpCiAKICAgICAjIFdyaXRlIHZhbCB0byB0aGUgZGF0YSBmaWxlLCBzdGFydGluZyBhdCBvZmZzZXQgcG9zLiAgVGhlIGNhbGxlcgpAQCAtMTQ4LDEwICsxNTMsOSBAQAogICAgICMgcG9zIHRvIGhvbGQgdmFsLCB3aXRob3V0IG92ZXJ3cml0aW5nIHNvbWUgb3RoZXIgdmFsdWUuICBSZXR1cm4KICAgICAjIHBhaXIgKHBvcywgbGVuKHZhbCkpLgogICAgIGRlZiBfc2V0dmFsKHNlbGYsIHBvcywgdmFsKToKLSAgICAgICAgZiA9IF9pby5vcGVuKHNlbGYuX2RhdGZpbGUsICdyYisnKQotICAgICAgICBmLnNlZWsocG9zKQotICAgICAgICBmLndyaXRlKHZhbCkKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggX2lvLm9wZW4oc2VsZi5fZGF0ZmlsZSwgJ3JiKycpIGFzIGY6CisgICAgICAgICAgICBmLnNlZWsocG9zKQorICAgICAgICAgICAgZi53cml0ZSh2YWwpCiAgICAgICAgIHJldHVybiAocG9zLCBsZW4odmFsKSkKIAogICAgICMga2V5IGlzIGEgbmV3IGtleSB3aG9zZSBhc3NvY2lhdGVkIHZhbHVlIHN0YXJ0cyBpbiB0aGUgZGF0YSBmaWxlCkBAIC0xNTksMTAgKzE2Myw5IEBACiAgICAgIyB0aGUgaW4tbWVtb3J5IGluZGV4IGRpY3QsIGFuZCBhcHBlbmQgb25lIHRvIHRoZSBkaXJlY3RvcnkgZmlsZS4KICAgICBkZWYgX2FkZGtleShzZWxmLCBrZXksIHBvc19hbmRfc2l6X3BhaXIpOgogICAgICAgICBzZWxmLl9pbmRleFtrZXldID0gcG9zX2FuZF9zaXpfcGFpcgotICAgICAgICBmID0gX2lvLm9wZW4oc2VsZi5fZGlyZmlsZSwgJ2EnLCBlbmNvZGluZz0iTGF0aW4tMSIpCi0gICAgICAgIHNlbGYuX2NobW9kKHNlbGYuX2RpcmZpbGUpCi0gICAgICAgIGYud3JpdGUoIiVyLCAlclxuIiAlIChrZXkuZGVjb2RlKCJMYXRpbi0xIiksIHBvc19hbmRfc2l6X3BhaXIpKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBfaW8ub3BlbihzZWxmLl9kaXJmaWxlLCAnYScsIGVuY29kaW5nPSJMYXRpbi0xIikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuX2NobW9kKHNlbGYuX2RpcmZpbGUpCisgICAgICAgICAgICBmLndyaXRlKCIlciwgJXJcbiIgJSAoa2V5LmRlY29kZSgiTGF0aW4tMSIpLCBwb3NfYW5kX3Npel9wYWlyKSkKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgpAQCAtMTczLDYgKzE3Niw3IEBACiAgICAgICAgICAgICB2YWwgPSB2YWwuZW5jb2RlKCd1dGYtOCcpCiAgICAgICAgIGVsaWYgbm90IGlzaW5zdGFuY2UodmFsLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ2YWx1ZXMgbXVzdCBiZSBieXRlcyBvciBzdHJpbmdzIikKKyAgICAgICAgc2VsZi5fdmVyaWZ5X29wZW4oKQogICAgICAgICBpZiBrZXkgbm90IGluIHNlbGYuX2luZGV4OgogICAgICAgICAgICAgc2VsZi5fYWRka2V5KGtleSwgc2VsZi5fYWRkdmFsKHZhbCkpCiAgICAgICAgIGVsc2U6CkBAIC0yMDAsNiArMjA0LDcgQEAKICAgICBkZWYgX19kZWxpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuX3ZlcmlmeV9vcGVuKCkKICAgICAgICAgIyBUaGUgYmxvY2tzIHVzZWQgYnkgdGhlIGFzc29jaWF0ZWQgdmFsdWUgYXJlIGxvc3QuCiAgICAgICAgIGRlbCBzZWxmLl9pbmRleFtrZXldCiAgICAgICAgICMgWFhYIEl0J3MgdW5jbGVhciB3aHkgd2UgZG8gYSBfY29tbWl0KCkgaGVyZSAodGhlIGNvZGUgYWx3YXlzCkBAIC0yMDksMjYgKzIxNCw0NCBAQAogICAgICAgICBzZWxmLl9jb21taXQoKQogCiAgICAgZGVmIGtleXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBsaXN0KHNlbGYuX2luZGV4LmtleXMoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5faW5kZXgpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICByYWlzZSBlcnJvcignREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCcpIGZyb20gTm9uZQogCiAgICAgZGVmIGl0ZW1zKHNlbGYpOgorICAgICAgICBzZWxmLl92ZXJpZnlfb3BlbigpCiAgICAgICAgIHJldHVybiBbKGtleSwgc2VsZltrZXldKSBmb3Iga2V5IGluIHNlbGYuX2luZGV4LmtleXMoKV0KIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwga2V5KToKICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIHJldHVybiBrZXkgaW4gc2VsZi5faW5kZXgKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGtleSBpbiBzZWxmLl9pbmRleAorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgaWYgc2VsZi5faW5kZXggaXMgTm9uZToKKyAgICAgICAgICAgICAgICByYWlzZSBlcnJvcignREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCcpIGZyb20gTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIGl0ZXJrZXlzKHNlbGYpOgotICAgICAgICByZXR1cm4gaXRlcihzZWxmLl9pbmRleC5rZXlzKCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX2luZGV4KQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgZXJyb3IoJ0RCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQnKSBmcm9tIE5vbmUKICAgICBfX2l0ZXJfXyA9IGl0ZXJrZXlzCiAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9pbmRleCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9pbmRleCkKKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIGVycm9yKCdEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkJykgZnJvbSBOb25lCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbW1pdCgpCi0gICAgICAgIHNlbGYuX2luZGV4ID0gc2VsZi5fZGF0ZmlsZSA9IHNlbGYuX2RpcmZpbGUgPSBzZWxmLl9iYWtmaWxlID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9jb21taXQoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5faW5kZXggPSBzZWxmLl9kYXRmaWxlID0gc2VsZi5fZGlyZmlsZSA9IHNlbGYuX2Jha2ZpbGUgPSBOb25lCiAKICAgICBfX2RlbF9fID0gY2xvc2UKIApAQCAtMjM2LDYgKzI1OSwxMiBAQAogICAgICAgICBpZiBoYXNhdHRyKHNlbGYuX29zLCAnY2htb2QnKToKICAgICAgICAgICAgIHNlbGYuX29zLmNobW9kKGZpbGUsIHNlbGYuX21vZGUpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKIAogZGVmIG9wZW4oZmlsZSwgZmxhZz1Ob25lLCBtb2RlPTBvNjY2KToKICAgICAiIiJPcGVuIHRoZSBkYXRhYmFzZSBmaWxlLCBmaWxlbmFtZSwgYW5kIHJldHVybiBjb3JyZXNwb25kaW5nIG9iamVjdC4KZGlmZiAtLWdpdCBhL0xpYi9kZWNpbWFsLnB5IGIvTGliL2RlY2ltYWwucHkKaW5kZXggOWYzN2U0Zi4uMzI0ZTRmOSAxMDA2NDQKLS0tIGEvTGliL2RlY2ltYWwucHkKKysrIGIvTGliL2RlY2ltYWwucHkKQEAgLTExNiw2ICsxMTYsOSBAQAogICAgICMgVHdvIG1ham9yIGNsYXNzZXMKICAgICAnRGVjaW1hbCcsICdDb250ZXh0JywKIAorICAgICMgTmFtZWQgdHVwbGUgcmVwcmVzZW50YXRpb24KKyAgICAnRGVjaW1hbFR1cGxlJywKKwogICAgICMgQ29udGV4dHMKICAgICAnRGVmYXVsdENvbnRleHQnLCAnQmFzaWNDb250ZXh0JywgJ0V4dGVuZGVkQ29udGV4dCcsCiAKQEAgLTEyNCw2ICsxMjcsOSBAQAogICAgICdJbmV4YWN0JywgJ1JvdW5kZWQnLCAnU3Vibm9ybWFsJywgJ092ZXJmbG93JywgJ1VuZGVyZmxvdycsCiAgICAgJ0Zsb2F0T3BlcmF0aW9uJywKIAorICAgICMgRXhjZXB0aW9uYWwgY29uZGl0aW9ucyB0aGF0IHRyaWdnZXIgSW52YWxpZE9wZXJhdGlvbgorICAgICdEaXZpc2lvbkltcG9zc2libGUnLCAnSW52YWxpZENvbnRleHQnLCAnQ29udmVyc2lvblN5bnRheCcsICdEaXZpc2lvblVuZGVmaW5lZCcsCisKICAgICAjIENvbnN0YW50cyBmb3IgdXNlIGluIHNldHRpbmcgdXAgY29udGV4dHMKICAgICAnUk9VTkRfRE9XTicsICdST1VORF9IQUxGX1VQJywgJ1JPVU5EX0hBTEZfRVZFTicsICdST1VORF9DRUlMSU5HJywKICAgICAnUk9VTkRfRkxPT1InLCAnUk9VTkRfVVAnLCAnUk9VTkRfSEFMRl9ET1dOJywgJ1JPVU5EXzA1VVAnLApAQCAtMTQwLDkgKzE0Niw4IEBACiAKIF9fdmVyc2lvbl9fID0gJzEuNzAnICAgICMgSGlnaGVzdCB2ZXJzaW9uIG9mIHRoZSBzcGVjIHRoaXMgY29tcGxpZXMgd2l0aAogICAgICAgICAgICAgICAgICAgICAgICAgIyBTZWUgaHR0cDovL3NwZWxlb3Ryb3ZlLmNvbS9kZWNpbWFsLwotX19saWJtcGRlY192ZXJzaW9uX18gPSAiMi40LjAiICMgY29tcGF0aWJsZSBsaWJtcGRlYyB2ZXJzaW9uCitfX2xpYm1wZGVjX3ZlcnNpb25fXyA9ICIyLjQuMSIgIyBjb21wYXRpYmxlIGxpYm1wZGVjIHZlcnNpb24KIAotaW1wb3J0IGNvcHkgYXMgX2NvcHkKIGltcG9ydCBtYXRoIGFzIF9tYXRoCiBpbXBvcnQgbnVtYmVycyBhcyBfbnVtYmVycwogaW1wb3J0IHN5cwpAQCAtNzA0LDggKzcwOSw3IEBACiAKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW5ub3QgY29udmVydCAlciB0byBEZWNpbWFsIiAlIHZhbHVlKQogCi0gICAgIyBAY2xhc3NtZXRob2QsIGJ1dCBAZGVjb3JhdG9yIGlzIG5vdCB2YWxpZCBQeXRob24gMi4zIHN5bnRheCwgc28KLSAgICAjIGRvbid0IHVzZSBpdCAoc2VlIG5vdGVzIG9uIFB5Mi4zIGNvbXBhdGliaWxpdHkgYXQgdG9wIG9mIGZpbGUpCisgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGZyb21fZmxvYXQoY2xzLCBmKToKICAgICAgICAgIiIiQ29udmVydHMgYSBmbG9hdCB0byBhIGRlY2ltYWwgbnVtYmVyLCBleGFjdGx5LgogCkBAIC03NDQsNyArNzQ4LDYgQEAKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBjbHMocmVzdWx0KQotICAgIGZyb21fZmxvYXQgPSBjbGFzc21ldGhvZChmcm9tX2Zsb2F0KQogCiAgICAgZGVmIF9pc25hbihzZWxmKToKICAgICAgICAgIiIiUmV0dXJucyB3aGV0aGVyIHRoZSBudW1iZXIgaXMgbm90IGFjdHVhbGx5IG9uZS4KQEAgLTk2NCwxMyArOTY3LDEyIEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jbXAob3RoZXIpID49IDAKIAogICAgIGRlZiBjb21wYXJlKHNlbGYsIG90aGVyLCBjb250ZXh0PU5vbmUpOgotICAgICAgICAiIiJDb21wYXJlcyBvbmUgdG8gYW5vdGhlci4KKyAgICAgICAgIiIiQ29tcGFyZSBzZWxmIHRvIG90aGVyLiAgUmV0dXJuIGEgZGVjaW1hbCB2YWx1ZToKIAotICAgICAgICAtMSA9PiBhIDwgYgotICAgICAgICAwICA9PiBhID0gYgotICAgICAgICAxICA9PiBhID4gYgotICAgICAgICBOYU4gPT4gb25lIGlzIE5hTgotICAgICAgICBMaWtlIF9fY21wX18sIGJ1dCByZXR1cm5zIERlY2ltYWwgaW5zdGFuY2VzLgorICAgICAgICBhIG9yIGIgaXMgYSBOYU4gPT0+IERlY2ltYWwoJ05hTicpCisgICAgICAgIGEgPCBiICAgICAgICAgICA9PT4gRGVjaW1hbCgnLTEnKQorICAgICAgICBhID09IGIgICAgICAgICAgPT0+IERlY2ltYWwoJzAnKQorICAgICAgICBhID4gYiAgICAgICAgICAgPT0+IERlY2ltYWwoJzEnKQogICAgICAgICAiIiIKICAgICAgICAgb3RoZXIgPSBfY29udmVydF9vdGhlcihvdGhlciwgcmFpc2VpdD1UcnVlKQogCkBAIC0zNzcyLDYgKzM3NzQsOCBAQAogICAgICAgICBpZiBzZWxmLl9pc19zcGVjaWFsOgogICAgICAgICAgICAgc2lnbiA9IF9mb3JtYXRfc2lnbihzZWxmLl9zaWduLCBzcGVjKQogICAgICAgICAgICAgYm9keSA9IHN0cihzZWxmLmNvcHlfYWJzKCkpCisgICAgICAgICAgICBpZiBzcGVjWyd0eXBlJ10gPT0gJyUnOgorICAgICAgICAgICAgICAgIGJvZHkgKz0gJyUnCiAgICAgICAgICAgICByZXR1cm4gX2Zvcm1hdF9hbGlnbihzaWduLCBib2R5LCBzcGVjKQogCiAgICAgICAgICMgYSB0eXBlIG9mIE5vbmUgZGVmYXVsdHMgdG8gJ2cnIG9yICdHJywgZGVwZW5kaW5nIG9uIGNvbnRleHQKZGlmZiAtLWdpdCBhL0xpYi9kaWZmbGliLnB5IGIvTGliL2RpZmZsaWIucHkKaW5kZXggZjBiZmNjNS4uNTZkNDg1MiAxMDA2NDQKLS0tIGEvTGliL2RpZmZsaWIucHkKKysrIGIvTGliL2RpZmZsaWIucHkKQEAgLTMwLDcgKzMwLDYgQEAKICAgICAgICAgICAgJ0RpZmZlcicsJ0lTX0NIQVJBQ1RFUl9KVU5LJywgJ0lTX0xJTkVfSlVOSycsICdjb250ZXh0X2RpZmYnLAogICAgICAgICAgICAndW5pZmllZF9kaWZmJywgJ0h0bWxEaWZmJywgJ01hdGNoJ10KIAotaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgaGVhcHEKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUgYXMgX25hbWVkdHVwbGUKIApAQCAtMzM0LDIwICszMzMsNiBAQAogICAgICAgICAgICAgZm9yIGVsdCBpbiBwb3B1bGFyOiAjIGRpdHRvOyBhcyBmYXN0IGZvciAxJSBkZWxldGlvbgogICAgICAgICAgICAgICAgIGRlbCBiMmpbZWx0XQogCi0gICAgZGVmIGlzYmp1bmsoc2VsZiwgaXRlbSk6Ci0gICAgICAgICJEZXByZWNhdGVkOyB1c2UgJ2l0ZW0gaW4gU2VxdWVuY2VNYXRjaGVyKCkuYmp1bmsnLiIKLSAgICAgICAgd2FybmluZ3Mud2FybigiJ1NlcXVlbmNlTWF0Y2hlcigpLmlzYmp1bmsoaXRlbSknIGlzIGRlcHJlY2F0ZWQ7XG4iCi0gICAgICAgICAgICAgICAgICAgICAgInVzZSAnaXRlbSBpbiBTTWluc3RhbmNlLmJqdW5rJyBpbnN0ZWFkLiIsCi0gICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQotICAgICAgICByZXR1cm4gaXRlbSBpbiBzZWxmLmJqdW5rCi0KLSAgICBkZWYgaXNicG9wdWxhcihzZWxmLCBpdGVtKToKLSAgICAgICAgIkRlcHJlY2F0ZWQ7IHVzZSAnaXRlbSBpbiBTZXF1ZW5jZU1hdGNoZXIoKS5icG9wdWxhcicuIgotICAgICAgICB3YXJuaW5ncy53YXJuKCInU2VxdWVuY2VNYXRjaGVyKCkuaXNicG9wdWxhcihpdGVtKScgaXMgZGVwcmVjYXRlZDtcbiIKLSAgICAgICAgICAgICAgICAgICAgICAidXNlICdpdGVtIGluIFNNaW5zdGFuY2UuYnBvcHVsYXInIGluc3RlYWQuIiwKLSAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCi0gICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuYnBvcHVsYXIKLQogICAgIGRlZiBmaW5kX2xvbmdlc3RfbWF0Y2goc2VsZiwgYWxvLCBhaGksIGJsbywgYmhpKToKICAgICAgICAgIiIiRmluZCBsb25nZXN0IG1hdGNoaW5nIGJsb2NrIGluIGFbYWxvOmFoaV0gYW5kIGJbYmxvOmJoaV0uCiAKQEAgLTUyNiw4ICs1MTEsOCBAQAogICAgICAgICAgICAgbm9uX2FkamFjZW50LmFwcGVuZCgoaTEsIGoxLCBrMSkpCiAKICAgICAgICAgbm9uX2FkamFjZW50LmFwcGVuZCggKGxhLCBsYiwgMCkgKQotICAgICAgICBzZWxmLm1hdGNoaW5nX2Jsb2NrcyA9IG5vbl9hZGphY2VudAotICAgICAgICByZXR1cm4gbWFwKE1hdGNoLl9tYWtlLCBzZWxmLm1hdGNoaW5nX2Jsb2NrcykKKyAgICAgICAgc2VsZi5tYXRjaGluZ19ibG9ja3MgPSBsaXN0KG1hcChNYXRjaC5fbWFrZSwgbm9uX2FkamFjZW50KSkKKyAgICAgICAgcmV0dXJuIHNlbGYubWF0Y2hpbmdfYmxvY2tzCiAKICAgICBkZWYgZ2V0X29wY29kZXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBsaXN0IG9mIDUtdHVwbGVzIGRlc2NyaWJpbmcgaG93IHRvIHR1cm4gYSBpbnRvIGIuCkBAIC05MjAsOCArOTA1LDcgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigndW5rbm93biB0YWcgJXInICUgKHRhZywpKQogCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBnOgotICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZwogCiAgICAgZGVmIF9kdW1wKHNlbGYsIHRhZywgeCwgbG8sIGhpKToKICAgICAgICAgIiIiR2VuZXJhdGUgY29tcGFyaXNvbiByZXN1bHRzIGZvciBhIHNhbWUtdGFnZ2VkIHJhbmdlLiIiIgpAQCAtOTQwLDggKzkyNCw3IEBACiAgICAgICAgICAgICBzZWNvbmQgPSBzZWxmLl9kdW1wKCcrJywgYiwgYmxvLCBiaGkpCiAKICAgICAgICAgZm9yIGcgaW4gZmlyc3QsIHNlY29uZDoKLSAgICAgICAgICAgIGZvciBsaW5lIGluIGc6Ci0gICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgeWllbGQgZnJvbSBnCiAKICAgICBkZWYgX2ZhbmN5X3JlcGxhY2Uoc2VsZiwgYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKToKICAgICAgICAgciIiIgpAQCAtOTk1LDggKzk3OCw3IEBACiAgICAgICAgICAgICAjIG5vIG5vbi1pZGVudGljYWwgInByZXR0eSBjbG9zZSIgcGFpcgogICAgICAgICAgICAgaWYgZXFpIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgIyBubyBpZGVudGljYWwgcGFpciBlaXRoZXIgLS0gdHJlYXQgaXQgYXMgYSBzdHJhaWdodCByZXBsYWNlCi0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fcGxhaW5fcmVwbGFjZShhLCBhbG8sIGFoaSwgYiwgYmxvLCBiaGkpOgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9wbGFpbl9yZXBsYWNlKGEsIGFsbywgYWhpLCBiLCBibG8sIGJoaSkKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICMgbm8gY2xvc2UgcGFpciwgYnV0IGFuIGlkZW50aWNhbCBwYWlyIC0tIHN5bmNoIHVwIG9uIHRoYXQKICAgICAgICAgICAgIGJlc3RfaSwgYmVzdF9qLCBiZXN0X3JhdGlvID0gZXFpLCBlcWosIDEuMApAQCAtMTAwOCw4ICs5OTAsNyBAQAogICAgICAgICAjIGlkZW50aWNhbAogCiAgICAgICAgICMgcHVtcCBvdXQgZGlmZnMgZnJvbSBiZWZvcmUgdGhlIHN5bmNoIHBvaW50Ci0gICAgICAgIGZvciBsaW5lIGluIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBhbG8sIGJlc3RfaSwgYiwgYmxvLCBiZXN0X2opOgotICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBhbG8sIGJlc3RfaSwgYiwgYmxvLCBiZXN0X2opCiAKICAgICAgICAgIyBkbyBpbnRyYWxpbmUgbWFya2luZyBvbiB0aGUgc3luY2ggcGFpcgogICAgICAgICBhZWx0LCBiZWx0ID0gYVtiZXN0X2ldLCBiW2Jlc3Rfal0KQEAgLTEwMzEsMTUgKzEwMTIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgYnRhZ3MgKz0gJyAnICogbGIKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd1bmtub3duIHRhZyAlcicgJSAodGFnLCkpCi0gICAgICAgICAgICBmb3IgbGluZSBpbiBzZWxmLl9xZm9ybWF0KGFlbHQsIGJlbHQsIGF0YWdzLCBidGFncyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9xZm9ybWF0KGFlbHQsIGJlbHQsIGF0YWdzLCBidGFncykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgdGhlIHN5bmNoIHBhaXIgaXMgaWRlbnRpY2FsCiAgICAgICAgICAgICB5aWVsZCAnICAnICsgYWVsdAogCiAgICAgICAgICMgcHVtcCBvdXQgZGlmZnMgZnJvbSBhZnRlciB0aGUgc3luY2ggcG9pbnQKLSAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5fZmFuY3lfaGVscGVyKGEsIGJlc3RfaSsxLCBhaGksIGIsIGJlc3RfaisxLCBiaGkpOgotICAgICAgICAgICAgeWllbGQgbGluZQorICAgICAgICB5aWVsZCBmcm9tIHNlbGYuX2ZhbmN5X2hlbHBlcihhLCBiZXN0X2krMSwgYWhpLCBiLCBiZXN0X2orMSwgYmhpKQogCiAgICAgZGVmIF9mYW5jeV9oZWxwZXIoc2VsZiwgYSwgYWxvLCBhaGksIGIsIGJsbywgYmhpKToKICAgICAgICAgZyA9IFtdCkBAIC0xMDUxLDggKzEwMzAsNyBAQAogICAgICAgICBlbGlmIGJsbyA8IGJoaToKICAgICAgICAgICAgIGcgPSBzZWxmLl9kdW1wKCcrJywgYiwgYmxvLCBiaGkpCiAKLSAgICAgICAgZm9yIGxpbmUgaW4gZzoKLSAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgeWllbGQgZnJvbSBnCiAKICAgICBkZWYgX3Fmb3JtYXQoc2VsZiwgYWxpbmUsIGJsaW5lLCBhdGFncywgYnRhZ3MpOgogICAgICAgICByIiIiCkBAIC0xNDkxLDcgKzE0NjksNyBAQAogICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX2xpbmUobGluZXMsJy0nLDApLCBOb25lLCBUcnVlCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsaWYgcy5zdGFydHN3aXRoKCgnLS0/KycsICctLSsnLCAnLSAnKSk6Ci0gICAgICAgICAgICAgICAgIyBpbiBkZWxldGUgYmxvY2sgYW5kIHNlZSBhIGludHJhbGluZSBjaGFuZ2Ugb3IgdW5jaGFuZ2VkIGxpbmUKKyAgICAgICAgICAgICAgICAjIGluIGRlbGV0ZSBibG9jayBhbmQgc2VlIGFuIGludHJhbGluZSBjaGFuZ2Ugb3IgdW5jaGFuZ2VkIGxpbmUKICAgICAgICAgICAgICAgICAjIGNvbWluZzogeWllbGQgdGhlIGRlbGV0ZSBsaW5lIGFuZCB0aGVuIGJsYW5rcwogICAgICAgICAgICAgICAgIGZyb21fbGluZSx0b19saW5lID0gX21ha2VfbGluZShsaW5lcywnLScsMCksIE5vbmUKICAgICAgICAgICAgICAgICBudW1fYmxhbmtzX3RvX3lpZWxkLG51bV9ibGFua3NfcGVuZGluZyA9IG51bV9ibGFua3NfcGVuZGluZy0xLDAKZGlmZiAtLWdpdCBhL0xpYi9kaXMucHkgYi9MaWIvZGlzLnB5CmluZGV4IDU0M2ZkYzcuLjgxY2JlN2YgMTAwNjQ0Ci0tLSBhL0xpYi9kaXMucHkKKysrIGIvTGliL2Rpcy5weQpAQCAtMiwxMiArMiwxNSBAQAogCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGlvCiAKIGZyb20gb3Bjb2RlIGltcG9ydCAqCiBmcm9tIG9wY29kZSBpbXBvcnQgX19hbGxfXyBhcyBfb3Bjb2Rlc19hbGwKIAogX19hbGxfXyA9IFsiY29kZV9pbmZvIiwgImRpcyIsICJkaXNhc3NlbWJsZSIsICJkaXN0YiIsICJkaXNjbyIsCi0gICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSJdICsgX29wY29kZXNfYWxsCisgICAgICAgICAgICJmaW5kbGluZXN0YXJ0cyIsICJmaW5kbGFiZWxzIiwgInNob3dfY29kZSIsCisgICAgICAgICAgICJnZXRfaW5zdHJ1Y3Rpb25zIiwgIkluc3RydWN0aW9uIiwgIkJ5dGVjb2RlIl0gKyBfb3Bjb2Rlc19hbGwKIGRlbCBfb3Bjb2Rlc19hbGwKIAogX2hhdmVfY29kZSA9ICh0eXBlcy5NZXRob2RUeXBlLCB0eXBlcy5GdW5jdGlvblR5cGUsIHR5cGVzLkNvZGVUeXBlLCB0eXBlKQpAQCAtMjUsMTQgKzI4LDE0IEBACiAgICAgICAgIGMgPSBjb21waWxlKHNvdXJjZSwgbmFtZSwgJ2V4ZWMnKQogICAgIHJldHVybiBjCiAKLWRlZiBkaXMoeD1Ob25lKToKK2RlZiBkaXMoeD1Ob25lLCAqLCBmaWxlPU5vbmUpOgogICAgICIiIkRpc2Fzc2VtYmxlIGNsYXNzZXMsIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4KIAogICAgIFdpdGggbm8gYXJndW1lbnQsIGRpc2Fzc2VtYmxlIHRoZSBsYXN0IHRyYWNlYmFjay4KIAogICAgICIiIgogICAgIGlmIHggaXMgTm9uZToKLSAgICAgICAgZGlzdGIoKQorICAgICAgICBkaXN0YihmaWxlPWZpbGUpCiAgICAgICAgIHJldHVybgogICAgIGlmIGhhc2F0dHIoeCwgJ19fZnVuY19fJyk6ICAjIE1ldGhvZAogICAgICAgICB4ID0geC5fX2Z1bmNfXwpAQCAtNDIsMjMgKzQ1LDIzIEBACiAgICAgICAgIGl0ZW1zID0gc29ydGVkKHguX19kaWN0X18uaXRlbXMoKSkKICAgICAgICAgZm9yIG5hbWUsIHgxIGluIGl0ZW1zOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh4MSwgX2hhdmVfY29kZSk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIkRpc2Fzc2VtYmx5IG9mICVzOiIgJSBuYW1lKQorICAgICAgICAgICAgICAgIHByaW50KCJEaXNhc3NlbWJseSBvZiAlczoiICUgbmFtZSwgZmlsZT1maWxlKQogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZGlzKHgxKQorICAgICAgICAgICAgICAgICAgICBkaXMoeDEsIGZpbGU9ZmlsZSkKICAgICAgICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIG1zZzoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoIlNvcnJ5OiIsIG1zZykKLSAgICAgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJTb3JyeToiLCBtc2csIGZpbGU9ZmlsZSkKKyAgICAgICAgICAgICAgICBwcmludChmaWxlPWZpbGUpCiAgICAgZWxpZiBoYXNhdHRyKHgsICdjb19jb2RlJyk6ICMgQ29kZSBvYmplY3QKLSAgICAgICAgZGlzYXNzZW1ibGUoeCkKKyAgICAgICAgZGlzYXNzZW1ibGUoeCwgZmlsZT1maWxlKQogICAgIGVsaWYgaXNpbnN0YW5jZSh4LCAoYnl0ZXMsIGJ5dGVhcnJheSkpOiAjIFJhdyBieXRlY29kZQotICAgICAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoeCkKKyAgICAgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzKHgsIGZpbGU9ZmlsZSkKICAgICBlbGlmIGlzaW5zdGFuY2UoeCwgc3RyKTogICAgIyBTb3VyY2UgY29kZQotICAgICAgICBfZGlzYXNzZW1ibGVfc3RyKHgpCisgICAgICAgIF9kaXNhc3NlbWJsZV9zdHIoeCwgZmlsZT1maWxlKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZG9uJ3Qga25vdyBob3cgdG8gZGlzYXNzZW1ibGUgJXMgb2JqZWN0cyIgJQogICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSh4KS5fX25hbWVfXykKIAotZGVmIGRpc3RiKHRiPU5vbmUpOgorZGVmIGRpc3RiKHRiPU5vbmUsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiRGlzYXNzZW1ibGUgYSB0cmFjZWJhY2sgKGRlZmF1bHQ6IGxhc3QgdHJhY2ViYWNrKS4iIiIKICAgICBpZiB0YiBpcyBOb25lOgogICAgICAgICB0cnk6CkBAIC02Niw3ICs2OSw3IEBACiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigibm8gbGFzdCB0cmFjZWJhY2sgdG8gZGlzYXNzZW1ibGUiKQogICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OiB0YiA9IHRiLnRiX25leHQKLSAgICBkaXNhc3NlbWJsZSh0Yi50Yl9mcmFtZS5mX2NvZGUsIHRiLnRiX2xhc3RpKQorICAgIGRpc2Fzc2VtYmxlKHRiLnRiX2ZyYW1lLmZfY29kZSwgdGIudGJfbGFzdGksIGZpbGU9ZmlsZSkKIAogIyBUaGUgaW5zcGVjdCBtb2R1bGUgaW50ZXJyb2dhdGVzIHRoaXMgZGljdGlvbmFyeSB0byBidWlsZCBpdHMKICMgbGlzdCBvZiBDT18qIGNvbnN0YW50cy4gSXQgaXMgYWxzbyB1c2VkIGJ5IHByZXR0eV9mbGFncyB0bwpAQCAtOTUsMTkgKzk4LDIyIEBACiAgICAgICAgIG5hbWVzLmFwcGVuZChoZXgoZmxhZ3MpKQogICAgIHJldHVybiAiLCAiLmpvaW4obmFtZXMpCiAKLWRlZiBjb2RlX2luZm8oeCk6Ci0gICAgIiIiRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLiIiIgorZGVmIF9nZXRfY29kZV9vYmplY3QoeCk6CisgICAgIiIiSGVscGVyIHRvIGhhbmRsZSBtZXRob2RzLCBmdW5jdGlvbnMsIHN0cmluZ3MgYW5kIHJhdyBjb2RlIG9iamVjdHMiIiIKICAgICBpZiBoYXNhdHRyKHgsICdfX2Z1bmNfXycpOiAjIE1ldGhvZAogICAgICAgICB4ID0geC5fX2Z1bmNfXwogICAgIGlmIGhhc2F0dHIoeCwgJ19fY29kZV9fJyk6ICMgRnVuY3Rpb24KICAgICAgICAgeCA9IHguX19jb2RlX18KICAgICBpZiBpc2luc3RhbmNlKHgsIHN0cik6ICAgICAjIFNvdXJjZSBjb2RlCi0gICAgICAgIHggPSBfdHJ5X2NvbXBpbGUoeCwgIjxjb2RlX2luZm8+IikKKyAgICAgICAgeCA9IF90cnlfY29tcGlsZSh4LCAiPGRpc2Fzc2VtYmx5PiIpCiAgICAgaWYgaGFzYXR0cih4LCAnY29fY29kZScpOiAgIyBDb2RlIG9iamVjdAotICAgICAgICByZXR1cm4gX2Zvcm1hdF9jb2RlX2luZm8oeCkKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICVzIG9iamVjdHMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoeCkuX19uYW1lX18pCisgICAgICAgIHJldHVybiB4CisgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBkaXNhc3NlbWJsZSAlcyBvYmplY3RzIiAlCisgICAgICAgICAgICAgICAgICAgIHR5cGUoeCkuX19uYW1lX18pCisKK2RlZiBjb2RlX2luZm8oeCk6CisgICAgIiIiRm9ybWF0dGVkIGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlLiIiIgorICAgIHJldHVybiBfZm9ybWF0X2NvZGVfaW5mbyhfZ2V0X2NvZGVfb2JqZWN0KHgpKQogCiBkZWYgX2Zvcm1hdF9jb2RlX2luZm8oY28pOgogICAgIGxpbmVzID0gW10KQEAgLTE0MCwxMDYgKzE0NiwyMDYgQEAKICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiJTRkOiAlcyIgJSBpX24pCiAgICAgcmV0dXJuICJcbiIuam9pbihsaW5lcykKIAotZGVmIHNob3dfY29kZShjbyk6Ci0gICAgIiIiUHJpbnQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUgdG8gc3Rkb3V0LiIiIgotICAgIHByaW50KGNvZGVfaW5mbyhjbykpCitkZWYgc2hvd19jb2RlKGNvLCAqLCBmaWxlPU5vbmUpOgorICAgICIiIlByaW50IGRldGFpbHMgb2YgbWV0aG9kcywgZnVuY3Rpb25zLCBvciBjb2RlIHRvICpmaWxlKi4KIAotZGVmIGRpc2Fzc2VtYmxlKGNvLCBsYXN0aT0tMSk6Ci0gICAgIiIiRGlzYXNzZW1ibGUgYSBjb2RlIG9iamVjdC4iIiIKLSAgICBjb2RlID0gY28uY29fY29kZQotICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKKyAgICBJZiAqZmlsZSogaXMgbm90IHByb3ZpZGVkLCB0aGUgb3V0cHV0IGlzIHByaW50ZWQgb24gc3Rkb3V0LgorICAgICIiIgorICAgIHByaW50KGNvZGVfaW5mbyhjbyksIGZpbGU9ZmlsZSkKKworX0luc3RydWN0aW9uID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX0luc3RydWN0aW9uIiwKKyAgICAgIm9wbmFtZSBvcGNvZGUgYXJnIGFyZ3ZhbCBhcmdyZXByIG9mZnNldCBzdGFydHNfbGluZSBpc19qdW1wX3RhcmdldCIpCisKK2NsYXNzIEluc3RydWN0aW9uKF9JbnN0cnVjdGlvbik6CisgICAgIiIiRGV0YWlscyBmb3IgYSBieXRlY29kZSBvcGVyYXRpb24KKworICAgICAgIERlZmluZWQgZmllbGRzOgorICAgICAgICAgb3BuYW1lIC0gaHVtYW4gcmVhZGFibGUgbmFtZSBmb3Igb3BlcmF0aW9uCisgICAgICAgICBvcGNvZGUgLSBudW1lcmljIGNvZGUgZm9yIG9wZXJhdGlvbgorICAgICAgICAgYXJnIC0gbnVtZXJpYyBhcmd1bWVudCB0byBvcGVyYXRpb24gKGlmIGFueSksIG90aGVyd2lzZSBOb25lCisgICAgICAgICBhcmd2YWwgLSByZXNvbHZlZCBhcmcgdmFsdWUgKGlmIGtub3duKSwgb3RoZXJ3aXNlIHNhbWUgYXMgYXJnCisgICAgICAgICBhcmdyZXByIC0gaHVtYW4gcmVhZGFibGUgZGVzY3JpcHRpb24gb2Ygb3BlcmF0aW9uIGFyZ3VtZW50CisgICAgICAgICBvZmZzZXQgLSBzdGFydCBpbmRleCBvZiBvcGVyYXRpb24gd2l0aGluIGJ5dGVjb2RlIHNlcXVlbmNlCisgICAgICAgICBzdGFydHNfbGluZSAtIGxpbmUgc3RhcnRlZCBieSB0aGlzIG9wY29kZSAoaWYgYW55KSwgb3RoZXJ3aXNlIE5vbmUKKyAgICAgICAgIGlzX2p1bXBfdGFyZ2V0IC0gVHJ1ZSBpZiBvdGhlciBjb2RlIGp1bXBzIHRvIGhlcmUsIG90aGVyd2lzZSBGYWxzZQorICAgICIiIgorCisgICAgZGVmIF9kaXNhc3NlbWJsZShzZWxmLCBsaW5lbm9fd2lkdGg9MywgbWFya19hc19jdXJyZW50PUZhbHNlKToKKyAgICAgICAgIiIiRm9ybWF0IGluc3RydWN0aW9uIGRldGFpbHMgZm9yIGluY2x1c2lvbiBpbiBkaXNhc3NlbWJseSBvdXRwdXQKKworICAgICAgICAqbGluZW5vX3dpZHRoKiBzZXRzIHRoZSB3aWR0aCBvZiB0aGUgbGluZSBudW1iZXIgZmllbGQgKDAgb21pdHMgaXQpCisgICAgICAgICptYXJrX2FzX2N1cnJlbnQqIGluc2VydHMgYSAnLS0+JyBtYXJrZXIgYXJyb3cgYXMgcGFydCBvZiB0aGUgbGluZQorICAgICAgICAiIiIKKyAgICAgICAgZmllbGRzID0gW10KKyAgICAgICAgIyBDb2x1bW46IFNvdXJjZSBjb2RlIGxpbmUgbnVtYmVyCisgICAgICAgIGlmIGxpbmVub193aWR0aDoKKyAgICAgICAgICAgIGlmIHNlbGYuc3RhcnRzX2xpbmUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgbGluZW5vX2ZtdCA9ICIlJSVkZCIgJSBsaW5lbm9fd2lkdGgKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKGxpbmVub19mbXQgJSBzZWxmLnN0YXJ0c19saW5lKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgJyAqIGxpbmVub193aWR0aCkKKyAgICAgICAgIyBDb2x1bW46IEN1cnJlbnQgaW5zdHJ1Y3Rpb24gaW5kaWNhdG9yCisgICAgICAgIGlmIG1hcmtfYXNfY3VycmVudDoKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQoJy0tPicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgICAnKQorICAgICAgICAjIENvbHVtbjogSnVtcCB0YXJnZXQgbWFya2VyCisgICAgICAgIGlmIHNlbGYuaXNfanVtcF90YXJnZXQ6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCc+PicpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcgICcpCisgICAgICAgICMgQ29sdW1uOiBJbnN0cnVjdGlvbiBvZmZzZXQgZnJvbSBzdGFydCBvZiBjb2RlIHNlcXVlbmNlCisgICAgICAgIGZpZWxkcy5hcHBlbmQocmVwcihzZWxmLm9mZnNldCkucmp1c3QoNCkpCisgICAgICAgICMgQ29sdW1uOiBPcGNvZGUgbmFtZQorICAgICAgICBmaWVsZHMuYXBwZW5kKHNlbGYub3BuYW1lLmxqdXN0KDIwKSkKKyAgICAgICAgIyBDb2x1bW46IE9wY29kZSBhcmd1bWVudAorICAgICAgICBpZiBzZWxmLmFyZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGZpZWxkcy5hcHBlbmQocmVwcihzZWxmLmFyZykucmp1c3QoNSkpCisgICAgICAgICAgICAjIENvbHVtbjogT3Bjb2RlIGFyZ3VtZW50IGRldGFpbHMKKyAgICAgICAgICAgIGlmIHNlbGYuYXJncmVwcjoKKyAgICAgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKCcoJyArIHNlbGYuYXJncmVwciArICcpJykKKyAgICAgICAgcmV0dXJuICcgJy5qb2luKGZpZWxkcykucnN0cmlwKCkKKworCitkZWYgZ2V0X2luc3RydWN0aW9ucyh4LCAqLCBmaXJzdF9saW5lPU5vbmUpOgorICAgICIiIkl0ZXJhdG9yIGZvciB0aGUgb3Bjb2RlcyBpbiBtZXRob2RzLCBmdW5jdGlvbnMgb3IgY29kZQorCisgICAgR2VuZXJhdGVzIGEgc2VyaWVzIG9mIEluc3RydWN0aW9uIG5hbWVkIHR1cGxlcyBnaXZpbmcgdGhlIGRldGFpbHMgb2YKKyAgICBlYWNoIG9wZXJhdGlvbnMgaW4gdGhlIHN1cHBsaWVkIGNvZGUuCisKKyAgICBJZiAqZmlyc3RfbGluZSogaXMgbm90IE5vbmUsIGl0IGluZGljYXRlcyB0aGUgbGluZSBudW1iZXIgdGhhdCBzaG91bGQKKyAgICBiZSByZXBvcnRlZCBmb3IgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGluIHRoZSBkaXNhc3NlbWJsZWQgY29kZS4KKyAgICBPdGhlcndpc2UsIHRoZSBzb3VyY2UgbGluZSBpbmZvcm1hdGlvbiAoaWYgYW55KSBpcyB0YWtlbiBkaXJlY3RseSBmcm9tCisgICAgdGhlIGRpc2Fzc2VtYmxlZCBjb2RlIG9iamVjdC4KKyAgICAiIiIKKyAgICBjbyA9IF9nZXRfY29kZV9vYmplY3QoeCkKKyAgICBjZWxsX25hbWVzID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycwogICAgIGxpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICBpZiBmaXJzdF9saW5lIGlzIG5vdCBOb25lOgorICAgICAgICBsaW5lX29mZnNldCA9IGZpcnN0X2xpbmUgLSBjby5jb19maXJzdGxpbmVubworICAgIGVsc2U6CisgICAgICAgIGxpbmVfb2Zmc2V0ID0gMAorICAgIHJldHVybiBfZ2V0X2luc3RydWN0aW9uc19ieXRlcyhjby5jb19jb2RlLCBjby5jb192YXJuYW1lcywgY28uY29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgY2VsbF9uYW1lcywgbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9vZmZzZXQpCisKK2RlZiBfZ2V0X2NvbnN0X2luZm8oY29uc3RfaW5kZXgsIGNvbnN0X2xpc3QpOgorICAgICIiIkhlbHBlciB0byBnZXQgb3B0aW9uYWwgZGV0YWlscyBhYm91dCBjb25zdCByZWZlcmVuY2VzCisKKyAgICAgICBSZXR1cm5zIHRoZSBkZXJlZmVyZW5jZWQgY29uc3RhbnQgYW5kIGl0cyByZXByIGlmIHRoZSBjb25zdGFudAorICAgICAgIGxpc3QgaXMgZGVmaW5lZC4KKyAgICAgICBPdGhlcndpc2UgcmV0dXJucyB0aGUgY29uc3RhbnQgaW5kZXggYW5kIGl0cyByZXByKCkuCisgICAgIiIiCisgICAgYXJndmFsID0gY29uc3RfaW5kZXgKKyAgICBpZiBjb25zdF9saXN0IGlzIG5vdCBOb25lOgorICAgICAgICBhcmd2YWwgPSBjb25zdF9saXN0W2NvbnN0X2luZGV4XQorICAgIHJldHVybiBhcmd2YWwsIHJlcHIoYXJndmFsKQorCitkZWYgX2dldF9uYW1lX2luZm8obmFtZV9pbmRleCwgbmFtZV9saXN0KToKKyAgICAiIiJIZWxwZXIgdG8gZ2V0IG9wdGlvbmFsIGRldGFpbHMgYWJvdXQgbmFtZWQgcmVmZXJlbmNlcworCisgICAgICAgUmV0dXJucyB0aGUgZGVyZWZlcmVuY2VkIG5hbWUgYXMgYm90aCB2YWx1ZSBhbmQgcmVwciBpZiB0aGUgbmFtZQorICAgICAgIGxpc3QgaXMgZGVmaW5lZC4KKyAgICAgICBPdGhlcndpc2UgcmV0dXJucyB0aGUgbmFtZSBpbmRleCBhbmQgaXRzIHJlcHIoKS4KKyAgICAiIiIKKyAgICBhcmd2YWwgPSBuYW1lX2luZGV4CisgICAgaWYgbmFtZV9saXN0IGlzIG5vdCBOb25lOgorICAgICAgICBhcmd2YWwgPSBuYW1lX2xpc3RbbmFtZV9pbmRleF0KKyAgICAgICAgYXJncmVwciA9IGFyZ3ZhbAorICAgIGVsc2U6CisgICAgICAgIGFyZ3JlcHIgPSByZXByKGFyZ3ZhbCkKKyAgICByZXR1cm4gYXJndmFsLCBhcmdyZXByCisKKworZGVmIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvZGUsIHZhcm5hbWVzPU5vbmUsIG5hbWVzPU5vbmUsIGNvbnN0YW50cz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGNlbGxzPU5vbmUsIGxpbmVzdGFydHM9Tm9uZSwgbGluZV9vZmZzZXQ9MCk6CisgICAgIiIiSXRlcmF0ZSBvdmVyIHRoZSBpbnN0cnVjdGlvbnMgaW4gYSBieXRlY29kZSBzdHJpbmcuCisKKyAgICBHZW5lcmF0ZXMgYSBzZXF1ZW5jZSBvZiBJbnN0cnVjdGlvbiBuYW1lZHR1cGxlcyBnaXZpbmcgdGhlIGRldGFpbHMgb2YgZWFjaAorICAgIG9wY29kZS4gIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvZGUncyBydW50aW1lIGVudmlyb25tZW50CisgICAgKGUuZy4gdmFyaWFibGUgbmFtZXMsIGNvbnN0YW50cykgY2FuIGJlIHNwZWNpZmllZCB1c2luZyBvcHRpb25hbAorICAgIGFyZ3VtZW50cy4KKworICAgICIiIgorICAgIGxhYmVscyA9IGZpbmRsYWJlbHMoY29kZSkKKyAgICBleHRlbmRlZF9hcmcgPSAwCisgICAgc3RhcnRzX2xpbmUgPSBOb25lCisgICAgZnJlZSA9IE5vbmUKKyAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCisgICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKICAgICBuID0gbGVuKGNvZGUpCiAgICAgaSA9IDAKLSAgICBleHRlbmRlZF9hcmcgPSAwCi0gICAgZnJlZSA9IE5vbmUKICAgICB3aGlsZSBpIDwgbjoKICAgICAgICAgb3AgPSBjb2RlW2ldCi0gICAgICAgIGlmIGkgaW4gbGluZXN0YXJ0czoKLSAgICAgICAgICAgIGlmIGkgPiAwOgotICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgIHByaW50KCIlM2QiICUgbGluZXN0YXJ0c1tpXSwgZW5kPScgJykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCcgICAnLCBlbmQ9JyAnKQotCi0gICAgICAgIGlmIGkgPT0gbGFzdGk6IHByaW50KCctLT4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAgJywgZW5kPScgJykKLSAgICAgICAgaWYgaSBpbiBsYWJlbHM6IHByaW50KCc+PicsIGVuZD0nICcpCi0gICAgICAgIGVsc2U6IHByaW50KCcgICcsIGVuZD0nICcpCi0gICAgICAgIHByaW50KHJlcHIoaSkucmp1c3QoNCksIGVuZD0nICcpCi0gICAgICAgIHByaW50KG9wbmFtZVtvcF0ubGp1c3QoMjApLCBlbmQ9JyAnKQorICAgICAgICBvZmZzZXQgPSBpCisgICAgICAgIGlmIGxpbmVzdGFydHMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGFydHNfbGluZSA9IGxpbmVzdGFydHMuZ2V0KGksIE5vbmUpCisgICAgICAgICAgICBpZiBzdGFydHNfbGluZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzdGFydHNfbGluZSArPSBsaW5lX29mZnNldAorICAgICAgICBpc19qdW1wX3RhcmdldCA9IGkgaW4gbGFiZWxzCiAgICAgICAgIGkgPSBpKzEKKyAgICAgICAgYXJnID0gTm9uZQorICAgICAgICBhcmd2YWwgPSBOb25lCisgICAgICAgIGFyZ3JlcHIgPSAnJwogICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NiArIGV4dGVuZGVkX2FyZworICAgICAgICAgICAgYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYgKyBleHRlbmRlZF9hcmcKICAgICAgICAgICAgIGV4dGVuZGVkX2FyZyA9IDAKICAgICAgICAgICAgIGkgPSBpKzIKICAgICAgICAgICAgIGlmIG9wID09IEVYVEVOREVEX0FSRzoKLSAgICAgICAgICAgICAgICBleHRlbmRlZF9hcmcgPSBvcGFyZyo2NTUzNgotICAgICAgICAgICAgcHJpbnQocmVwcihvcGFyZykucmp1c3QoNSksIGVuZD0nICcpCisgICAgICAgICAgICAgICAgZXh0ZW5kZWRfYXJnID0gYXJnKjY1NTM2CisgICAgICAgICAgICAjICBTZXQgYXJndmFsIHRvIHRoZSBkZXJlZmVyZW5jZWQgdmFsdWUgb2YgdGhlIGFyZ3VtZW50IHdoZW4KKyAgICAgICAgICAgICMgIGF2YWlsYWJlLCBhbmQgYXJncmVwciB0byB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFyZ3ZhbC4KKyAgICAgICAgICAgICMgICAgX2Rpc2Fzc2VtYmxlX2J5dGVzIG5lZWRzIHRoZSBzdHJpbmcgcmVwciBvZiB0aGUKKyAgICAgICAgICAgICMgICAgcmF3IG5hbWUgaW5kZXggZm9yIExPQURfR0xPQkFMLCBMT0FEX0NPTlNULCBldGMuCisgICAgICAgICAgICBhcmd2YWwgPSBhcmcKICAgICAgICAgICAgIGlmIG9wIGluIGhhc2NvbnN0OgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHJlcHIoY28uY29fY29uc3RzW29wYXJnXSkgKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsLCBhcmdyZXByID0gX2dldF9jb25zdF9pbmZvKGFyZywgY29uc3RhbnRzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYW1lOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX25hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X25hbWVfaW5mbyhhcmcsIG5hbWVzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIoaSArIG9wYXJnKSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwgPSBpICsgYXJnCisgICAgICAgICAgICAgICAgYXJncmVwciA9ICJ0byAiICsgcmVwcihhcmd2YWwpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2xvY2FsOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNvLmNvX3Zhcm5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKKyAgICAgICAgICAgICAgICBhcmd2YWwsIGFyZ3JlcHIgPSBfZ2V0X25hbWVfaW5mbyhhcmcsIHZhcm5hbWVzKQogICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNjb21wYXJlOgotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGNtcF9vcFtvcGFyZ10gKyAnKScsIGVuZD0nICcpCisgICAgICAgICAgICAgICAgYXJndmFsID0gY21wX29wW2FyZ10KKyAgICAgICAgICAgICAgICBhcmdyZXByID0gYXJndmFsCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc2ZyZWU6Ci0gICAgICAgICAgICAgICAgaWYgZnJlZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBmcmVlID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycwotICAgICAgICAgICAgICAgIHByaW50KCcoJyArIGZyZWVbb3BhcmddICsgJyknLCBlbmQ9JyAnKQorICAgICAgICAgICAgICAgIGFyZ3ZhbCwgYXJncmVwciA9IF9nZXRfbmFtZV9pbmZvKGFyZywgY2VsbHMpCiAgICAgICAgICAgICBlbGlmIG9wIGluIGhhc25hcmdzOgotICAgICAgICAgICAgICAgIHByaW50KCcoJWQgcG9zaXRpb25hbCwgJWQga2V5d29yZCBwYWlyKScKLSAgICAgICAgICAgICAgICAgICAgICAlIChjb2RlW2ktMl0sIGNvZGVbaS0xXSksIGVuZD0nICcpCi0gICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICBhcmdyZXByID0gIiVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciIgJSAoY29kZVtpLTJdLCBjb2RlW2ktMV0pCisgICAgICAgIHlpZWxkIEluc3RydWN0aW9uKG9wbmFtZVtvcF0sIG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIGFyZ3ZhbCwgYXJncmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0LCBzdGFydHNfbGluZSwgaXNfanVtcF90YXJnZXQpCisKK2RlZiBkaXNhc3NlbWJsZShjbywgbGFzdGk9LTEsICosIGZpbGU9Tm9uZSk6CisgICAgIiIiRGlzYXNzZW1ibGUgYSBjb2RlIG9iamVjdC4iIiIKKyAgICBjZWxsX25hbWVzID0gY28uY29fY2VsbHZhcnMgKyBjby5jb19mcmVldmFycworICAgIGxpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICBfZGlzYXNzZW1ibGVfYnl0ZXMoY28uY29fY29kZSwgbGFzdGksIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29uc3RzLCBjZWxsX25hbWVzLCBsaW5lc3RhcnRzLCBmaWxlPWZpbGUpCiAKIGRlZiBfZGlzYXNzZW1ibGVfYnl0ZXMoY29kZSwgbGFzdGk9LTEsIHZhcm5hbWVzPU5vbmUsIG5hbWVzPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1Ob25lKToKLSAgICBsYWJlbHMgPSBmaW5kbGFiZWxzKGNvZGUpCi0gICAgbiA9IGxlbihjb2RlKQotICAgIGkgPSAwCi0gICAgd2hpbGUgaSA8IG46Ci0gICAgICAgIG9wID0gY29kZVtpXQotICAgICAgICBpZiBpID09IGxhc3RpOiBwcmludCgnLS0+JywgZW5kPScgJykKLSAgICAgICAgZWxzZTogcHJpbnQoJyAgICcsIGVuZD0nICcpCi0gICAgICAgIGlmIGkgaW4gbGFiZWxzOiBwcmludCgnPj4nLCBlbmQ9JyAnKQotICAgICAgICBlbHNlOiBwcmludCgnICAnLCBlbmQ9JyAnKQotICAgICAgICBwcmludChyZXByKGkpLnJqdXN0KDQpLCBlbmQ9JyAnKQotICAgICAgICBwcmludChvcG5hbWVbb3BdLmxqdXN0KDE1KSwgZW5kPScgJykKLSAgICAgICAgaSA9IGkrMQotICAgICAgICBpZiBvcCA+PSBIQVZFX0FSR1VNRU5UOgotICAgICAgICAgICAgb3BhcmcgPSBjb2RlW2ldICsgY29kZVtpKzFdKjI1NgotICAgICAgICAgICAgaSA9IGkrMgotICAgICAgICAgICAgcHJpbnQocmVwcihvcGFyZykucmp1c3QoNSksIGVuZD0nICcpCi0gICAgICAgICAgICBpZiBvcCBpbiBoYXNjb25zdDoKLSAgICAgICAgICAgICAgICBpZiBjb25zdGFudHM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHJlcHIoY29uc3RhbnRzW29wYXJnXSkgKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyglZCknJW9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYW1lOgotICAgICAgICAgICAgICAgIGlmIG5hbWVzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBuYW1lc1tvcGFyZ10gKyAnKScsIGVuZD0nICcpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQoJyglZCknJW9wYXJnLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIHByaW50KCcodG8gJyArIHJlcHIoaSArIG9wYXJnKSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzbG9jYWw6Ci0gICAgICAgICAgICAgICAgaWYgdmFybmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KCcoJyArIHZhcm5hbWVzW29wYXJnXSArICcpJywgZW5kPScgJykKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKCVkKScgJSBvcGFyZywgZW5kPScgJykKLSAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzY29tcGFyZToKLSAgICAgICAgICAgICAgICBwcmludCgnKCcgKyBjbXBfb3Bbb3BhcmddICsgJyknLCBlbmQ9JyAnKQotICAgICAgICAgICAgZWxpZiBvcCBpbiBoYXNuYXJnczoKLSAgICAgICAgICAgICAgICBwcmludCgnKCVkIHBvc2l0aW9uYWwsICVkIGtleXdvcmQgcGFpciknCi0gICAgICAgICAgICAgICAgICAgICAgJSAoY29kZVtpLTJdLCBjb2RlW2ktMV0pLCBlbmQ9JyAnKQotICAgICAgICBwcmludCgpCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50cz1Ob25lLCBjZWxscz1Ob25lLCBsaW5lc3RhcnRzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICosIGZpbGU9Tm9uZSwgbGluZV9vZmZzZXQ9MCk6CisgICAgIyBPbWl0IHRoZSBsaW5lIG51bWJlciBjb2x1bW4gZW50aXJlbHkgaWYgd2UgaGF2ZSBubyBsaW5lIG51bWJlciBpbmZvCisgICAgc2hvd19saW5lbm8gPSBsaW5lc3RhcnRzIGlzIG5vdCBOb25lCisgICAgIyBUT0RPPzogQWRqdXN0IHdpZHRoIHVwd2FyZHMgaWYgbWF4KGxpbmVzdGFydHMudmFsdWVzKCkpID49IDEwMDA/CisgICAgbGluZW5vX3dpZHRoID0gMyBpZiBzaG93X2xpbmVubyBlbHNlIDAKKyAgICBmb3IgaW5zdHIgaW4gX2dldF9pbnN0cnVjdGlvbnNfYnl0ZXMoY29kZSwgdmFybmFtZXMsIG5hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudHMsIGNlbGxzLCBsaW5lc3RhcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1saW5lX29mZnNldCk6CisgICAgICAgIG5ld19zb3VyY2VfbGluZSA9IChzaG93X2xpbmVubyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RyLnN0YXJ0c19saW5lIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHIub2Zmc2V0ID4gMCkKKyAgICAgICAgaWYgbmV3X3NvdXJjZV9saW5lOgorICAgICAgICAgICAgcHJpbnQoZmlsZT1maWxlKQorICAgICAgICBpc19jdXJyZW50X2luc3RyID0gaW5zdHIub2Zmc2V0ID09IGxhc3RpCisgICAgICAgIHByaW50KGluc3RyLl9kaXNhc3NlbWJsZShsaW5lbm9fd2lkdGgsIGlzX2N1cnJlbnRfaW5zdHIpLCBmaWxlPWZpbGUpCiAKLWRlZiBfZGlzYXNzZW1ibGVfc3RyKHNvdXJjZSk6CitkZWYgX2Rpc2Fzc2VtYmxlX3N0cihzb3VyY2UsICosIGZpbGU9Tm9uZSk6CiAgICAgIiIiQ29tcGlsZSB0aGUgc291cmNlIHN0cmluZywgdGhlbiBkaXNhc3NlbWJsZSB0aGUgY29kZSBvYmplY3QuIiIiCi0gICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JykpCisgICAgZGlzYXNzZW1ibGUoX3RyeV9jb21waWxlKHNvdXJjZSwgJzxkaXM+JyksIGZpbGU9ZmlsZSkKIAogZGlzY28gPSBkaXNhc3NlbWJsZSAgICAgICAgICAgICAgICAgICAgICMgWFhYIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogCkBAIC0yNTAsMTkgKzM1NiwyMSBAQAogCiAgICAgIiIiCiAgICAgbGFiZWxzID0gW10KKyAgICAjIGVudW1lcmF0ZSgpIGlzIG5vdCBhbiBvcHRpb24sIHNpbmNlIHdlIHNvbWV0aW1lcyBwcm9jZXNzCisgICAgIyBtdWx0aXBsZSBlbGVtZW50cyBvbiBhIHNpbmdsZSBwYXNzIHRocm91Z2ggdGhlIGxvb3AKICAgICBuID0gbGVuKGNvZGUpCiAgICAgaSA9IDAKICAgICB3aGlsZSBpIDwgbjoKICAgICAgICAgb3AgPSBjb2RlW2ldCiAgICAgICAgIGkgPSBpKzEKICAgICAgICAgaWYgb3AgPj0gSEFWRV9BUkdVTUVOVDoKLSAgICAgICAgICAgIG9wYXJnID0gY29kZVtpXSArIGNvZGVbaSsxXSoyNTYKKyAgICAgICAgICAgIGFyZyA9IGNvZGVbaV0gKyBjb2RlW2krMV0qMjU2CiAgICAgICAgICAgICBpID0gaSsyCiAgICAgICAgICAgICBsYWJlbCA9IC0xCiAgICAgICAgICAgICBpZiBvcCBpbiBoYXNqcmVsOgotICAgICAgICAgICAgICAgIGxhYmVsID0gaStvcGFyZworICAgICAgICAgICAgICAgIGxhYmVsID0gaSthcmcKICAgICAgICAgICAgIGVsaWYgb3AgaW4gaGFzamFiczoKLSAgICAgICAgICAgICAgICBsYWJlbCA9IG9wYXJnCisgICAgICAgICAgICAgICAgbGFiZWwgPSBhcmcKICAgICAgICAgICAgIGlmIGxhYmVsID49IDA6CiAgICAgICAgICAgICAgICAgaWYgbGFiZWwgbm90IGluIGxhYmVsczoKICAgICAgICAgICAgICAgICAgICAgbGFiZWxzLmFwcGVuZChsYWJlbCkKQEAgLTI5MCwyNyArMzk4LDc3IEBACiAgICAgaWYgbGluZW5vICE9IGxhc3RsaW5lbm86CiAgICAgICAgIHlpZWxkIChhZGRyLCBsaW5lbm8pCiAKK2NsYXNzIEJ5dGVjb2RlOgorICAgICIiIlRoZSBieXRlY29kZSBvcGVyYXRpb25zIG9mIGEgcGllY2Ugb2YgY29kZQorCisgICAgSW5zdGFudGlhdGUgdGhpcyB3aXRoIGEgZnVuY3Rpb24sIG1ldGhvZCwgc3RyaW5nIG9mIGNvZGUsIG9yIGEgY29kZSBvYmplY3QKKyAgICAoYXMgcmV0dXJuZWQgYnkgY29tcGlsZSgpKS4KKworICAgIEl0ZXJhdGluZyBvdmVyIHRoaXMgeWllbGRzIHRoZSBieXRlY29kZSBvcGVyYXRpb25zIGFzIEluc3RydWN0aW9uIGluc3RhbmNlcy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgKiwgZmlyc3RfbGluZT1Ob25lLCBjdXJyZW50X29mZnNldD1Ob25lKToKKyAgICAgICAgc2VsZi5jb2Rlb2JqID0gY28gPSBfZ2V0X2NvZGVfb2JqZWN0KHgpCisgICAgICAgIGlmIGZpcnN0X2xpbmUgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfbGluZSA9IGNvLmNvX2ZpcnN0bGluZW5vCisgICAgICAgICAgICBzZWxmLl9saW5lX29mZnNldCA9IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfbGluZSA9IGZpcnN0X2xpbmUKKyAgICAgICAgICAgIHNlbGYuX2xpbmVfb2Zmc2V0ID0gZmlyc3RfbGluZSAtIGNvLmNvX2ZpcnN0bGluZW5vCisgICAgICAgIHNlbGYuX2NlbGxfbmFtZXMgPSBjby5jb19jZWxsdmFycyArIGNvLmNvX2ZyZWV2YXJzCisgICAgICAgIHNlbGYuX2xpbmVzdGFydHMgPSBkaWN0KGZpbmRsaW5lc3RhcnRzKGNvKSkKKyAgICAgICAgc2VsZi5fb3JpZ2luYWxfb2JqZWN0ID0geAorICAgICAgICBzZWxmLmN1cnJlbnRfb2Zmc2V0ID0gY3VycmVudF9vZmZzZXQKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgY28gPSBzZWxmLmNvZGVvYmoKKyAgICAgICAgcmV0dXJuIF9nZXRfaW5zdHJ1Y3Rpb25zX2J5dGVzKGNvLmNvX2NvZGUsIGNvLmNvX3Zhcm5hbWVzLCBjby5jb19uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX2NvbnN0cywgc2VsZi5fY2VsbF9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xpbmVzdGFydHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1zZWxmLl9saW5lX29mZnNldCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSh7IXJ9KSIuZm9ybWF0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fb3JpZ2luYWxfb2JqZWN0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fdHJhY2ViYWNrKGNscywgdGIpOgorICAgICAgICAiIiIgQ29uc3RydWN0IGEgQnl0ZWNvZGUgZnJvbSB0aGUgZ2l2ZW4gdHJhY2ViYWNrICIiIgorICAgICAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CisgICAgICAgIHJldHVybiBjbHModGIudGJfZnJhbWUuZl9jb2RlLCBjdXJyZW50X29mZnNldD10Yi50Yl9sYXN0aSkKKworICAgIGRlZiBpbmZvKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gZm9ybWF0dGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb2RlIG9iamVjdC4iIiIKKyAgICAgICAgcmV0dXJuIF9mb3JtYXRfY29kZV9pbmZvKHNlbGYuY29kZW9iaikKKworICAgIGRlZiBkaXMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIGZvcm1hdHRlZCB2aWV3IG9mIHRoZSBieXRlY29kZSBvcGVyYXRpb25zLiIiIgorICAgICAgICBjbyA9IHNlbGYuY29kZW9iagorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfb2Zmc2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb2Zmc2V0ID0gc2VsZi5jdXJyZW50X29mZnNldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2Zmc2V0ID0gLTEKKyAgICAgICAgd2l0aCBpby5TdHJpbmdJTygpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIF9kaXNhc3NlbWJsZV9ieXRlcyhjby5jb19jb2RlLCB2YXJuYW1lcz1jby5jb192YXJuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lcz1jby5jb19uYW1lcywgY29uc3RhbnRzPWNvLmNvX2NvbnN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxscz1zZWxmLl9jZWxsX25hbWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzdGFydHM9c2VsZi5fbGluZXN0YXJ0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lX29mZnNldD1zZWxmLl9saW5lX29mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPW91dHB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0aT1vZmZzZXQpCisgICAgICAgICAgICByZXR1cm4gb3V0cHV0LmdldHZhbHVlKCkKKworCiBkZWYgX3Rlc3QoKToKICAgICAiIiJTaW1wbGUgdGVzdCBwcm9ncmFtIHRvIGRpc2Fzc2VtYmxlIGEgZmlsZS4iIiIKLSAgICBpZiBzeXMuYXJndlsxOl06Ci0gICAgICAgIGlmIHN5cy5hcmd2WzI6XToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoInVzYWdlOiBweXRob24gZGlzLnB5IFstfGZpbGVdXG4iKQotICAgICAgICAgICAgc3lzLmV4aXQoMikKLSAgICAgICAgZm4gPSBzeXMuYXJndlsxXQotICAgICAgICBpZiBub3QgZm4gb3IgZm4gPT0gIi0iOgotICAgICAgICAgICAgZm4gPSBOb25lCi0gICAgZWxzZToKLSAgICAgICAgZm4gPSBOb25lCi0gICAgaWYgZm4gaXMgTm9uZToKLSAgICAgICAgZiA9IHN5cy5zdGRpbgotICAgIGVsc2U6Ci0gICAgICAgIGYgPSBvcGVuKGZuKQotICAgIHNvdXJjZSA9IGYucmVhZCgpCi0gICAgaWYgZm4gaXMgbm90IE5vbmU6Ci0gICAgICAgIGYuY2xvc2UoKQotICAgIGVsc2U6Ci0gICAgICAgIGZuID0gIjxzdGRpbj4iCi0gICAgY29kZSA9IGNvbXBpbGUoc291cmNlLCBmbiwgImV4ZWMiKQorICAgIGltcG9ydCBhcmdwYXJzZQorCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2luZmlsZScsIHR5cGU9YXJncGFyc2UuRmlsZVR5cGUoKSwgbmFyZ3M9Jz8nLCBkZWZhdWx0PSctJykKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorICAgIHdpdGggYXJncy5pbmZpbGUgYXMgaW5maWxlOgorICAgICAgICBzb3VyY2UgPSBpbmZpbGUucmVhZCgpCisgICAgY29kZSA9IGNvbXBpbGUoc291cmNlLCBhcmdzLmluZmlsZS5uYW1lLCAiZXhlYyIpCiAgICAgZGlzKGNvZGUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2FyY2hpdmVfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CmluZGV4IGZjZGEwOGUuLjQ0NzBiYjAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvYXJjaGl2ZV91dGlsLnB5CkBAIC0xOCwxNSArMTgsNTUgQEAKIGZyb20gZGlzdHV0aWxzLmRpcl91dGlsIGltcG9ydCBta3BhdGgKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAotZGVmIG1ha2VfdGFyYmFsbChiYXNlX25hbWUsIGJhc2VfZGlyLCBjb21wcmVzcz0iZ3ppcCIsIHZlcmJvc2U9MCwgZHJ5X3J1bj0wKToKK3RyeToKKyAgICBmcm9tIHB3ZCBpbXBvcnQgZ2V0cHduYW0KK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRwd25hbSA9IE5vbmUKKwordHJ5OgorICAgIGZyb20gZ3JwIGltcG9ydCBnZXRncm5hbQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdldGdybmFtID0gTm9uZQorCitkZWYgX2dldF9naWQobmFtZSk6CisgICAgIiIiUmV0dXJucyBhIGdpZCwgZ2l2ZW4gYSBncm91cCBuYW1lLiIiIgorICAgIGlmIGdldGdybmFtIGlzIE5vbmUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gZ2V0Z3JuYW0obmFtZSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiByZXN1bHRbMl0KKyAgICByZXR1cm4gTm9uZQorCitkZWYgX2dldF91aWQobmFtZSk6CisgICAgIiIiUmV0dXJucyBhbiB1aWQsIGdpdmVuIGEgdXNlciBuYW1lLiIiIgorICAgIGlmIGdldHB3bmFtIGlzIE5vbmUgb3IgbmFtZSBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHRyeToKKyAgICAgICAgcmVzdWx0ID0gZ2V0cHduYW0obmFtZSkKKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiByZXN1bHRbMl0KKyAgICByZXR1cm4gTm9uZQorCitkZWYgbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgYmFzZV9kaXIsIGNvbXByZXNzPSJnemlwIiwgdmVyYm9zZT0wLCBkcnlfcnVuPTAsCisgICAgICAgICAgICAgICAgIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgogICAgICIiIkNyZWF0ZSBhIChwb3NzaWJseSBjb21wcmVzc2VkKSB0YXIgZmlsZSBmcm9tIGFsbCB0aGUgZmlsZXMgdW5kZXIKICAgICAnYmFzZV9kaXInLgogCiAgICAgJ2NvbXByZXNzJyBtdXN0IGJlICJnemlwIiAodGhlIGRlZmF1bHQpLCAiY29tcHJlc3MiLCAiYnppcDIiLCBvciBOb25lLgotICAgIEJvdGggInRhciIgYW5kIHRoZSBjb21wcmVzc2lvbiB1dGlsaXR5IG5hbWVkIGJ5ICdjb21wcmVzcycgbXVzdCBiZSBvbgotICAgIHRoZSBkZWZhdWx0IHByb2dyYW0gc2VhcmNoIHBhdGgsIHNvIHRoaXMgaXMgcHJvYmFibHkgVW5peC1zcGVjaWZpYy4KKyAgICAoY29tcHJlc3Mgd2lsbCBiZSBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIpCisKKyAgICAnb3duZXInIGFuZCAnZ3JvdXAnIGNhbiBiZSB1c2VkIHRvIGRlZmluZSBhbiBvd25lciBhbmQgYSBncm91cCBmb3IgdGhlCisgICAgYXJjaGl2ZSB0aGF0IGlzIGJlaW5nIGJ1aWx0LiBJZiBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IG93bmVyIGFuZCBncm91cAorICAgIHdpbGwgYmUgdXNlZC4KKwogICAgIFRoZSBvdXRwdXQgdGFyIGZpbGUgd2lsbCBiZSBuYW1lZCAnYmFzZV9kaXInICsgICIudGFyIiwgcG9zc2libHkgcGx1cwogICAgIHRoZSBhcHByb3ByaWF0ZSBjb21wcmVzc2lvbiBleHRlbnNpb24gKCIuZ3oiLCAiLmJ6MiIgb3IgIi5aIikuCisKICAgICBSZXR1cm5zIHRoZSBvdXRwdXQgZmlsZW5hbWUuCiAgICAgIiIiCiAgICAgdGFyX2NvbXByZXNzaW9uID0geydnemlwJzogJ2d6JywgJ2J6aXAyJzogJ2J6MicsIE5vbmU6ICcnLCAnY29tcHJlc3MnOiAnJ30KQEAgLTQ4LDEwICs4OCwyMyBAQAogICAgIGltcG9ydCB0YXJmaWxlICAjIGxhdGUgaW1wb3J0IHNvIFB5dGhvbiBidWlsZCBpdHNlbGYgZG9lc24ndCBicmVhawogCiAgICAgbG9nLmluZm8oJ0NyZWF0aW5nIHRhciBhcmNoaXZlJykKKworICAgIHVpZCA9IF9nZXRfdWlkKG93bmVyKQorICAgIGdpZCA9IF9nZXRfZ2lkKGdyb3VwKQorCisgICAgZGVmIF9zZXRfdWlkX2dpZCh0YXJpbmZvKToKKyAgICAgICAgaWYgZ2lkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdGFyaW5mby5naWQgPSBnaWQKKyAgICAgICAgICAgIHRhcmluZm8uZ25hbWUgPSBncm91cAorICAgICAgICBpZiB1aWQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YXJpbmZvLnVpZCA9IHVpZAorICAgICAgICAgICAgdGFyaW5mby51bmFtZSA9IG93bmVyCisgICAgICAgIHJldHVybiB0YXJpbmZvCisKICAgICBpZiBub3QgZHJ5X3J1bjoKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGFyY2hpdmVfbmFtZSwgJ3d8JXMnICUgdGFyX2NvbXByZXNzaW9uW2NvbXByZXNzXSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGFyLmFkZChiYXNlX2RpcikKKyAgICAgICAgICAgIHRhci5hZGQoYmFzZV9kaXIsIGZpbHRlcj1fc2V0X3VpZF9naWQpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0YXIuY2xvc2UoKQogCkBAIC0xNDAsNyArMTkzLDcgQEAKICAgICByZXR1cm4gTm9uZQogCiBkZWYgbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm9ybWF0LCByb290X2Rpcj1Ob25lLCBiYXNlX2Rpcj1Ob25lLCB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgIGRyeV9ydW49MCk6CisgICAgICAgICAgICAgICAgIGRyeV9ydW49MCwgb3duZXI9Tm9uZSwgZ3JvdXA9Tm9uZSk6CiAgICAgIiIiQ3JlYXRlIGFuIGFyY2hpdmUgZmlsZSAoZWcuIHppcCBvciB0YXIpLgogCiAgICAgJ2Jhc2VfbmFtZScgaXMgdGhlIG5hbWUgb2YgdGhlIGZpbGUgdG8gY3JlYXRlLCBtaW51cyBhbnkgZm9ybWF0LXNwZWNpZmljCkBAIC0xNTMsNiArMjA2LDkgQEAKICAgICBpZS4gJ2Jhc2VfZGlyJyB3aWxsIGJlIHRoZSBjb21tb24gcHJlZml4IG9mIGFsbCBmaWxlcyBhbmQKICAgICBkaXJlY3RvcmllcyBpbiB0aGUgYXJjaGl2ZS4gICdyb290X2RpcicgYW5kICdiYXNlX2RpcicgYm90aCBkZWZhdWx0CiAgICAgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgYXJjaGl2ZSBmaWxlLgorCisgICAgJ293bmVyJyBhbmQgJ2dyb3VwJyBhcmUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGFyY2hpdmUuIEJ5IGRlZmF1bHQsCisgICAgdXNlcyB0aGUgY3VycmVudCBvd25lciBhbmQgZ3JvdXAuCiAgICAgIiIiCiAgICAgc2F2ZV9jd2QgPSBvcy5nZXRjd2QoKQogICAgIGlmIHJvb3RfZGlyIGlzIG5vdCBOb25lOgpAQCAtMTc0LDYgKzIzMCwxMSBAQAogICAgIGZ1bmMgPSBmb3JtYXRfaW5mb1swXQogICAgIGZvciBhcmcsIHZhbCBpbiBmb3JtYXRfaW5mb1sxXToKICAgICAgICAga3dhcmdzW2FyZ10gPSB2YWwKKworICAgIGlmIGZvcm1hdCAhPSAnemlwJzoKKyAgICAgICAga3dhcmdzWydvd25lciddID0gb3duZXIKKyAgICAgICAga3dhcmdzWydncm91cCddID0gZ3JvdXAKKwogICAgIHRyeToKICAgICAgICAgZmlsZW5hbWUgPSBmdW5jKGJhc2VfbmFtZSwgYmFzZV9kaXIsICoqa3dhcmdzKQogICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Njb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CmluZGV4IGM3OTVjOTUuLmU5M2EyNzMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY2NvbXBpbGVyLnB5CkBAIC0zNTEsNyArMzUxLDcgQEAKICAgICAgICAgcmV0dXJuIG1hY3Jvcywgb2JqZWN0cywgZXh0cmEsIHBwX29wdHMsIGJ1aWxkCiAKICAgICBkZWYgX2dldF9jY19hcmdzKHNlbGYsIHBwX29wdHMsIGRlYnVnLCBiZWZvcmUpOgotICAgICAgICAjIHdvcmtzIGZvciB1bml4Y2NvbXBpbGVyLCBlbXhjY29tcGlsZXIsIGN5Z3dpbmNjb21waWxlcgorICAgICAgICAjIHdvcmtzIGZvciB1bml4Y2NvbXBpbGVyLCBjeWd3aW5jY29tcGlsZXIKICAgICAgICAgY2NfYXJncyA9IHBwX29wdHMgKyBbJy1jJ10KICAgICAgICAgaWYgZGVidWc6CiAgICAgICAgICAgICBjY19hcmdzWzowXSA9IFsnLWcnXQpAQCAtNzUyLDcgKzc1Miw3IEBACiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogICAgIGRlZiBsaWJyYXJ5X29wdGlvbihzZWxmLCBsaWIpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIGNvbXBpbGVyIG9wdGlvbiB0byBhZGQgJ2RpcicgdG8gdGhlIGxpc3Qgb2YgbGlicmFyaWVzCisgICAgICAgICIiIlJldHVybiB0aGUgY29tcGlsZXIgb3B0aW9uIHRvIGFkZCAnbGliJyB0byB0aGUgbGlzdCBvZiBsaWJyYXJpZXMKICAgICAgICAgbGlua2VkIGludG8gdGhlIHNoYXJlZCBsaWJyYXJ5IG9yIGV4ZWN1dGFibGUuCiAgICAgICAgICIiIgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCkBAIC05MjYsNyArOTI2LDYgQEAKICAgICAjIG9uIGEgY3lnd2luIGJ1aWx0IHB5dGhvbiB3ZSBjYW4gdXNlIGdjYyBsaWtlIGFuIG9yZGluYXJ5IFVOSVhpc2gKICAgICAjIGNvbXBpbGVyCiAgICAgKCdjeWd3aW4uKicsICd1bml4JyksCi0gICAgKCdvczJlbXgnLCAnZW14JyksCiAKICAgICAjIE9TIG5hbWUgbWFwcGluZ3MKICAgICAoJ3Bvc2l4JywgJ3VuaXgnKSwKQEAgLTk2OCw4ICs5NjcsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNaW5ndzMyIHBvcnQgb2YgR05VIEMgQ29tcGlsZXIgZm9yIFdpbjMyIiksCiAgICAgICAgICAgICAgICAgICAgJ2JjcHAnOiAgICAoJ2JjcHBjb21waWxlcicsICdCQ1BQQ29tcGlsZXInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCb3JsYW5kIEMrKyBDb21waWxlciIpLAotICAgICAgICAgICAgICAgICAgICdlbXgnOiAgICAgKCdlbXhjY29tcGlsZXInLCAnRU1YQ0NvbXBpbGVyJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRU1YIHBvcnQgb2YgR05VIEMgQ29tcGlsZXIgZm9yIE9TLzIiKSwKICAgICAgICAgICAgICAgICAgfQogCiBkZWYgc2hvd19jb21waWxlcnMoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY21kLnB5IGIvTGliL2Rpc3R1dGlscy9jbWQucHkKaW5kZXggM2VhMDgxMC4uYzg5ZDVlZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jbWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jbWQucHkKQEAgLTM2NSw5ICszNjUsMTEgQEAKICAgICAgICAgZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCiAgICAgICAgIHNwYXduKGNtZCwgc2VhcmNoX3BhdGgsIGRyeV9ydW49c2VsZi5kcnlfcnVuKQogCi0gICAgZGVmIG1ha2VfYXJjaGl2ZShzZWxmLCBiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSk6CisgICAgZGVmIG1ha2VfYXJjaGl2ZShzZWxmLCBiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXI9Tm9uZSwgYmFzZV9kaXI9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIG93bmVyPU5vbmUsIGdyb3VwPU5vbmUpOgogICAgICAgICByZXR1cm4gYXJjaGl2ZV91dGlsLm1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXIsIGJhc2VfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcnlfcnVuPXNlbGYuZHJ5X3J1bikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ5X3J1bj1zZWxmLmRyeV9ydW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKIAogICAgIGRlZiBtYWtlX2ZpbGUoc2VsZiwgaW5maWxlcywgb3V0ZmlsZSwgZnVuYywgYXJncywKICAgICAgICAgICAgICAgICAgIGV4ZWNfbXNnPU5vbmUsIHNraXBfbXNnPU5vbmUsIGxldmVsPTEpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0LnB5CmluZGV4IGM1MTg4ZWIuLjY4MTRhMWMgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYmRpc3QucHkKQEAgLTM3LDYgKzM3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAiW2RlZmF1bHQ6IGRpc3RdIiksCiAgICAgICAgICAgICAgICAgICAgICgnc2tpcC1idWlsZCcsIE5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAic2tpcCByZWJ1aWxkaW5nIGV2ZXJ5dGhpbmcgKGZvciB0ZXN0aW5nL2RlYnVnZ2luZykiKSwKKyAgICAgICAgICAgICAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAgICAgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgdXNlcl0iKSwKKyAgICAgICAgICAgICAgICAgICAgKCdncm91cD0nLCAnZycsCisgICAgICAgICAgICAgICAgICAgICAiR3JvdXAgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgICIgW2RlZmF1bHQ6IGN1cnJlbnQgZ3JvdXBdIiksCiAgICAgICAgICAgICAgICAgICAgXQogCiAgICAgYm9vbGVhbl9vcHRpb25zID0gWydza2lwLWJ1aWxkJ10KQEAgLTUyLDggKzU4LDcgQEAKICAgICAjIFRoaXMgd29uJ3QgZG8gaW4gcmVhbGl0eTogd2lsbCBuZWVkIHRvIGRpc3Rpbmd1aXNoIFJQTS1pc2ggTGludXgsCiAgICAgIyBEZWJpYW4taXNoIExpbnV4LCBTb2xhcmlzLCBGcmVlQlNELCAuLi4sIFdpbmRvd3MsIE1hYyBPUy4KICAgICBkZWZhdWx0X2Zvcm1hdCA9IHsncG9zaXgnOiAnZ3p0YXInLAotICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnLAotICAgICAgICAgICAgICAgICAgICAgICdvczInOiAnemlwJ30KKyAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJ30KIAogICAgICMgRXN0YWJsaXNoIHRoZSBwcmVmZXJyZWQgb3JkZXIgKGZvciB0aGUgLS1oZWxwLWZvcm1hdHMgb3B0aW9uKS4KICAgICBmb3JtYXRfY29tbWFuZHMgPSBbJ3JwbScsICdnenRhcicsICdienRhcicsICd6dGFyJywgJ3RhcicsCkBAIC03OCw2ICs4Myw4IEBACiAgICAgICAgIHNlbGYuZm9ybWF0cyA9IE5vbmUKICAgICAgICAgc2VsZi5kaXN0X2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5za2lwX2J1aWxkID0gMAorICAgICAgICBzZWxmLmdyb3VwID0gTm9uZQorICAgICAgICBzZWxmLm93bmVyID0gTm9uZQogCiAgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgICMgaGF2ZSB0byBmaW5hbGl6ZSAncGxhdF9uYW1lJyBiZWZvcmUgJ2JkaXN0X2Jhc2UnCkBAIC0xMjMsNiArMTMwLDExIEBACiAgICAgICAgICAgICBpZiBjbWRfbmFtZSBub3QgaW4gc2VsZi5ub19mb3JtYXRfb3B0aW9uOgogICAgICAgICAgICAgICAgIHN1Yl9jbWQuZm9ybWF0ID0gc2VsZi5mb3JtYXRzW2ldCiAKKyAgICAgICAgICAgICMgcGFzc2luZyB0aGUgb3duZXIgYW5kIGdyb3VwIG5hbWVzIGZvciB0YXIgYXJjaGl2aW5nCisgICAgICAgICAgICBpZiBjbWRfbmFtZSA9PSAnYmRpc3RfZHVtYic6CisgICAgICAgICAgICAgICAgc3ViX2NtZC5vd25lciA9IHNlbGYub3duZXIKKyAgICAgICAgICAgICAgICBzdWJfY21kLmdyb3VwID0gc2VsZi5ncm91cAorCiAgICAgICAgICAgICAjIElmIHdlJ3JlIGdvaW5nIHRvIG5lZWQgdG8gcnVuIHRoaXMgY29tbWFuZCBhZ2FpbiwgdGVsbCBpdCB0bwogICAgICAgICAgICAgIyBrZWVwIGl0cyB0ZW1wb3JhcnkgZmlsZXMgYXJvdW5kIHNvIHN1YnNlcXVlbnQgcnVucyBnbyBmYXN0ZXIuCiAgICAgICAgICAgICBpZiBjbWRfbmFtZSBpbiBjb21tYW5kc1tpKzE6XToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9iZGlzdF9kdW1iLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkKaW5kZXggMWFiMDlkMS4uNDQwNWQxMiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2JkaXN0X2R1bWIucHkKQEAgLTMzLDEzICszMywxOCBAQAogICAgICAgICAgICAgICAgICAgICAoJ3JlbGF0aXZlJywgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICJidWlsZCB0aGUgYXJjaGl2ZSB1c2luZyByZWxhdGl2ZSBwYXRocyIKICAgICAgICAgICAgICAgICAgICAgICIoZGVmYXVsdDogZmFsc2UpIiksCisgICAgICAgICAgICAgICAgICAgICgnb3duZXI9JywgJ3UnLAorICAgICAgICAgICAgICAgICAgICAgIk93bmVyIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAiIFtkZWZhdWx0OiBjdXJyZW50IHVzZXJdIiksCisgICAgICAgICAgICAgICAgICAgICgnZ3JvdXA9JywgJ2cnLAorICAgICAgICAgICAgICAgICAgICAgIkdyb3VwIG5hbWUgdXNlZCB3aGVuIGNyZWF0aW5nIGEgdGFyIGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAiIFtkZWZhdWx0OiBjdXJyZW50IGdyb3VwXSIpLAogICAgICAgICAgICAgICAgICAgIF0KIAogICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsna2VlcC10ZW1wJywgJ3NraXAtYnVpbGQnLCAncmVsYXRpdmUnXQogCiAgICAgZGVmYXVsdF9mb3JtYXQgPSB7ICdwb3NpeCc6ICdnenRhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICdudCc6ICd6aXAnLAotICAgICAgICAgICAgICAgICAgICAgICAnb3MyJzogJ3ppcCcgfQorICAgICAgICAgICAgICAgICAgICAgICAnbnQnOiAnemlwJyB9CiAKICAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLmJkaXN0X2RpciA9IE5vbmUKQEAgLTQ5LDYgKzU0LDggQEAKICAgICAgICAgc2VsZi5kaXN0X2RpciA9IE5vbmUKICAgICAgICAgc2VsZi5za2lwX2J1aWxkID0gTm9uZQogICAgICAgICBzZWxmLnJlbGF0aXZlID0gMAorICAgICAgICBzZWxmLm93bmVyID0gTm9uZQorICAgICAgICBzZWxmLmdyb3VwID0gTm9uZQogCiAgICAgZGVmIGZpbmFsaXplX29wdGlvbnMoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuYmRpc3RfZGlyIGlzIE5vbmU6CkBAIC04NSwxMSArOTIsNiBAQAogICAgICAgICBhcmNoaXZlX2Jhc2VuYW1lID0gIiVzLiVzIiAlIChzZWxmLmRpc3RyaWJ1dGlvbi5nZXRfZnVsbG5hbWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wbGF0X25hbWUpCiAKLSAgICAgICAgIyBPUy8yIG9iamVjdHMgdG8gYW55ICI6IiBjaGFyYWN0ZXJzIGluIGEgZmlsZW5hbWUgKHN1Y2ggYXMgd2hlbgotICAgICAgICAjIGEgdGltZXN0YW1wIGlzIHVzZWQgaW4gYSB2ZXJzaW9uKSBzbyBjaGFuZ2UgdGhlbSB0byBoeXBoZW5zLgotICAgICAgICBpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICAgICAgYXJjaGl2ZV9iYXNlbmFtZSA9IGFyY2hpdmVfYmFzZW5hbWUucmVwbGFjZSgiOiIsICItIikKLQogICAgICAgICBwc2V1ZG9pbnN0YWxsX3Jvb3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXN0X2RpciwgYXJjaGl2ZV9iYXNlbmFtZSkKICAgICAgICAgaWYgbm90IHNlbGYucmVsYXRpdmU6CiAgICAgICAgICAgICBhcmNoaXZlX3Jvb3QgPSBzZWxmLmJkaXN0X2RpcgpAQCAtMTA3LDcgKzEwOSw4IEBACiAKICAgICAgICAgIyBNYWtlIHRoZSBhcmNoaXZlCiAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5tYWtlX2FyY2hpdmUocHNldWRvaW5zdGFsbF9yb290LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9ybWF0LCByb290X2Rpcj1hcmNoaXZlX3Jvb3QpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JtYXQsIHJvb3RfZGlyPWFyY2hpdmVfcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1zZWxmLm93bmVyLCBncm91cD1zZWxmLmdyb3VwKQogICAgICAgICBpZiBzZWxmLmRpc3RyaWJ1dGlvbi5oYXNfZXh0X21vZHVsZXMoKToKICAgICAgICAgICAgIHB5dmVyc2lvbiA9IGdldF9weXRob25fdmVyc2lvbigpCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX2V4dC5weQppbmRleCBiYzZhMjNmLi5hY2JlNjQ4IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfZXh0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9leHQucHkKQEAgLTE0LDEzICsxNCw3IEBACiBmcm9tIGRpc3R1dGlscy51dGlsIGltcG9ydCBnZXRfcGxhdGZvcm0KIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAotIyB0aGlzIGtlZXBzIGNvbXBhdGliaWxpdHkgZnJvbSAyLjMgdG8gMi41Ci1pZiBzeXMudmVyc2lvbiA8ICIyLjYiOgotICAgIFVTRVJfQkFTRSA9IE5vbmUKLSAgICBIQVNfVVNFUl9TSVRFID0gRmFsc2UKLWVsc2U6Ci0gICAgZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKLSAgICBIQVNfVVNFUl9TSVRFID0gVHJ1ZQorZnJvbSBzaXRlIGltcG9ydCBVU0VSX0JBU0UKIAogaWYgb3MubmFtZSA9PSAnbnQnOgogICAgIGZyb20gZGlzdHV0aWxzLm1zdmNjb21waWxlciBpbXBvcnQgZ2V0X2J1aWxkX3ZlcnNpb24KQEAgLTk3LDE0ICs5MSwxMSBAQAogICAgICAgICAgImxpc3Qgb2YgU1dJRyBjb21tYW5kIGxpbmUgb3B0aW9ucyIpLAogICAgICAgICAoJ3N3aWc9JywgTm9uZSwKICAgICAgICAgICJwYXRoIHRvIHRoZSBTV0lHIGV4ZWN1dGFibGUiKSwKKyAgICAgICAgKCd1c2VyJywgTm9uZSwKKyAgICAgICAgICJhZGQgdXNlciBpbmNsdWRlLCBsaWJyYXJ5IGFuZCBycGF0aCIpCiAgICAgICAgIF0KIAotICAgIGJvb2xlYW5fb3B0aW9ucyA9IFsnaW5wbGFjZScsICdkZWJ1ZycsICdmb3JjZScsICdzd2lnLWNwcCddCi0KLSAgICBpZiBIQVNfVVNFUl9TSVRFOgotICAgICAgICB1c2VyX29wdGlvbnMuYXBwZW5kKCgndXNlcicsIE5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZGQgdXNlciBpbmNsdWRlLCBsaWJyYXJ5IGFuZCBycGF0aCIpKQotICAgICAgICBib29sZWFuX29wdGlvbnMuYXBwZW5kKCd1c2VyJykKKyAgICBib29sZWFuX29wdGlvbnMgPSBbJ2lucGxhY2UnLCAnZGVidWcnLCAnZm9yY2UnLCAnc3dpZy1jcHAnLCAndXNlciddCiAKICAgICBoZWxwX29wdGlvbnMgPSBbCiAgICAgICAgICgnaGVscC1jb21waWxlcicsIE5vbmUsCkBAIC0yMzAsMTEgKzIyMSw2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQQycsICdWQzYnKSkKIAotICAgICAgICAjIE9TLzIgKEVNWCkgZG9lc24ndCBzdXBwb3J0IERlYnVnIHZzIFJlbGVhc2UgYnVpbGRzLCBidXQgaGFzIHRoZQotICAgICAgICAjIGltcG9ydCBsaWJyYXJpZXMgaW4gaXRzICJDb25maWciIHN1YmRpcmVjdG9yeQotICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgc2VsZi5saWJyYXJ5X2RpcnMuYXBwZW5kKG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdDb25maWcnKSkKLQogICAgICAgICAjIGZvciBleHRlbnNpb25zIHVuZGVyIEN5Z3dpbiBhbmQgQXRoZU9TIFB5dGhvbidzIGxpYnJhcnkgZGlyZWN0b3J5IG11c3QgYmUKICAgICAgICAgIyBhcHBlbmRlZCB0byBsaWJyYXJ5X2RpcnMKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzo2XSA9PSAnY3lnd2luJyBvciBzeXMucGxhdGZvcm1bOjZdID09ICdhdGhlb3MnOgpAQCAtMjUxLDcgKzIzNyw3IEBACiAgICAgICAgICMgUHl0aG9uJ3MgbGlicmFyeSBkaXJlY3RvcnkgbXVzdCBiZSBhcHBlbmRlZCB0byBsaWJyYXJ5X2RpcnMKICAgICAgICAgIyBTZWUgSXNzdWVzOiAjMTYwMDg2MCwgIzQzNjYKICAgICAgICAgaWYgKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUHlfRU5BQkxFX1NIQVJFRCcpKToKLSAgICAgICAgICAgIGlmIHN5cy5leGVjdXRhYmxlLnN0YXJ0c3dpdGgob3MucGF0aC5qb2luKHN5cy5leGVjX3ByZWZpeCwgImJpbiIpKToKKyAgICAgICAgICAgIGlmIG5vdCBzeXNjb25maWcucHl0aG9uX2J1aWxkOgogICAgICAgICAgICAgICAgICMgYnVpbGRpbmcgdGhpcmQgcGFydHkgZXh0ZW5zaW9ucwogICAgICAgICAgICAgICAgIHNlbGYubGlicmFyeV9kaXJzLmFwcGVuZChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xJQkRJUicpKQogICAgICAgICAgICAgZWxzZToKQEAgLTYxOSw5ICs2MDUsNiBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJzd2lnLmV4ZSIKLSAgICAgICAgZWxpZiBvcy5uYW1lID09ICJvczIiOgotICAgICAgICAgICAgIyBhc3N1bWUgc3dpZyBhdmFpbGFibGUgaW4gdGhlIFBBVEguCi0gICAgICAgICAgICByZXR1cm4gInN3aWcuZXhlIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKICAgICAgICAgICAgICAgICAgICJJIGRvbid0IGtub3cgaG93IHRvIGZpbmQgKG11Y2ggbGVzcyBydW4pIFNXSUcgIgpAQCAtNjcyLDkgKzY1NSw2IEBACiAgICAgICAgICIiIgogICAgICAgICBmcm9tIGRpc3R1dGlscy5zeXNjb25maWcgaW1wb3J0IGdldF9jb25maWdfdmFyCiAgICAgICAgIGV4dF9wYXRoID0gZXh0X25hbWUuc3BsaXQoJy4nKQotICAgICAgICAjIE9TLzIgaGFzIGFuIDggY2hhcmFjdGVyIG1vZHVsZSAoZXh0ZW5zaW9uKSBsaW1pdCA6LSgKLSAgICAgICAgaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgICAgIGV4dF9wYXRoW2xlbihleHRfcGF0aCkgLSAxXSA9IGV4dF9wYXRoW2xlbihleHRfcGF0aCkgLSAxXVs6OF0KICAgICAgICAgIyBleHRlbnNpb25zIGluIGRlYnVnX21vZGUgYXJlIG5hbWVkICdtb2R1bGVfZC5weWQnIHVuZGVyIHdpbmRvd3MKICAgICAgICAgZXh0X3N1ZmZpeCA9IGdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykKICAgICAgICAgaWYgb3MubmFtZSA9PSAnbnQnIGFuZCBzZWxmLmRlYnVnOgpAQCAtNjk1LDcgKzY3NSw3IEBACiAgICAgZGVmIGdldF9saWJyYXJpZXMoc2VsZiwgZXh0KToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBsaXN0IG9mIGxpYnJhcmllcyB0byBsaW5rIGFnYWluc3Qgd2hlbiBidWlsZGluZyBhCiAgICAgICAgIHNoYXJlZCBleHRlbnNpb24uICBPbiBtb3N0IHBsYXRmb3JtcywgdGhpcyBpcyBqdXN0ICdleHQubGlicmFyaWVzJzsKLSAgICAgICAgb24gV2luZG93cyBhbmQgT1MvMiwgd2UgYWRkIHRoZSBQeXRob24gbGlicmFyeSAoZWcuIHB5dGhvbjIwLmRsbCkuCisgICAgICAgIG9uIFdpbmRvd3MsIHdlIGFkZCB0aGUgUHl0aG9uIGxpYnJhcnkgKGVnLiBweXRob24yMC5kbGwpLgogICAgICAgICAiIiIKICAgICAgICAgIyBUaGUgcHl0aG9uIGxpYnJhcnkgaXMgYWx3YXlzIG5lZWRlZCBvbiBXaW5kb3dzLiAgRm9yIE1TVkMsIHRoaXMKICAgICAgICAgIyBpcyByZWR1bmRhbnQsIHNpbmNlIHRoZSBsaWJyYXJ5IGlzIG1lbnRpb25lZCBpbiBhIHByYWdtYSBpbgpAQCAtNzE1LDE5ICs2OTUsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzICsgW3B5dGhvbmxpYl0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGV4dC5saWJyYXJpZXMKLSAgICAgICAgZWxpZiBzeXMucGxhdGZvcm0gPT0gIm9zMmVteCI6Ci0gICAgICAgICAgICAjIEVNWC9HQ0MgcmVxdWlyZXMgdGhlIHB5dGhvbiBsaWJyYXJ5IGV4cGxpY2l0bHksIGFuZCBJCi0gICAgICAgICAgICAjIGJlbGlldmUgVkFDUFAgZG9lcyBhcyB3ZWxsICh0aG91Z2ggbm90IGNvbmZpcm1lZCkgLSBBSU0gQXByMDEKLSAgICAgICAgICAgIHRlbXBsYXRlID0gInB5dGhvbiVkJWQiCi0gICAgICAgICAgICAjIGRlYnVnIHZlcnNpb25zIG9mIHRoZSBtYWluIERMTCBhcmVuJ3Qgc3VwcG9ydGVkLCBhdCBsZWFzdAotICAgICAgICAgICAgIyBub3QgYXQgdGhpcyB0aW1lIC0gQUlNIEFwcjAxCi0gICAgICAgICAgICAjaWYgc2VsZi5kZWJ1ZzoKLSAgICAgICAgICAgICMgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZSArICdfZCcKLSAgICAgICAgICAgIHB5dGhvbmxpYiA9ICh0ZW1wbGF0ZSAlCi0gICAgICAgICAgICAgICAgICAgKHN5cy5oZXh2ZXJzaW9uID4+IDI0LCAoc3lzLmhleHZlcnNpb24gPj4gMTYpICYgMHhmZikpCi0gICAgICAgICAgICAjIGRvbid0IGV4dGVuZCBleHQubGlicmFyaWVzLCBpdCBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXIKLSAgICAgICAgICAgICMgZXh0ZW5zaW9ucywgaXQgaXMgYSByZWZlcmVuY2UgdG8gdGhlIG9yaWdpbmFsIGxpc3QKLSAgICAgICAgICAgIHJldHVybiBleHQubGlicmFyaWVzICsgW3B5dGhvbmxpYl0KICAgICAgICAgZWxpZiBzeXMucGxhdGZvcm1bOjZdID09ICJjeWd3aW4iOgogICAgICAgICAgICAgdGVtcGxhdGUgPSAicHl0aG9uJWQuJWQiCiAgICAgICAgICAgICBweXRob25saWIgPSAodGVtcGxhdGUgJQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2J1aWxkX3B5LnB5CmluZGV4IGQ0OGViNjkuLjkxMDBiOTYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9weS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfcHkucHkKQEAgLTMsNyArMyw3IEBACiBJbXBsZW1lbnRzIHRoZSBEaXN0dXRpbHMgJ2J1aWxkX3B5JyBjb21tYW5kLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5cwogZnJvbSBnbG9iIGltcG9ydCBnbG9iCiAKQEAgLTMxMywxMSArMzEzLDExIEBACiAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChmaWxlbmFtZSkKICAgICAgICAgICAgIGlmIGluY2x1ZGVfYnl0ZWNvZGU6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlOgotICAgICAgICAgICAgICAgICAgICBvdXRwdXRzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5vcHRpbWl6ZSA+IDA6Ci0gICAgICAgICAgICAgICAgICAgIG91dHB1dHMuYXBwZW5kKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPUZhbHNlKSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0cy5hcHBlbmQoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgZGVidWdfb3ZlcnJpZGU9RmFsc2UpKQogCiAgICAgICAgIG91dHB1dHMgKz0gWwogICAgICAgICAgICAgb3MucGF0aC5qb2luKGJ1aWxkX2RpciwgZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvYnVpbGRfc2NyaXB0cy5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CmluZGV4IDRiNWIyMmUuLjkwYTgzODAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9idWlsZF9zY3JpcHRzLnB5CkBAIC03NCw3ICs3NCw3IEBACiAgICAgICAgICAgICAjIHNjcmlwdC4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmID0gb3BlbihzY3JpcHQsICJyYiIpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmRyeV9ydW46CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgZiA9IE5vbmUKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jaGVjay5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9jaGVjay5weQppbmRleCAyMmI5MzQ5Li43ZWJlNzA3IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvY2hlY2sucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2NoZWNrLnB5CkBAIC0xMjIsNyArMTIyLDcgQEAKICAgICAgICAgIiIiUmV0dXJucyB3YXJuaW5ncyB3aGVuIHRoZSBwcm92aWRlZCBkYXRhIGRvZXNuJ3QgY29tcGlsZS4iIiIKICAgICAgICAgc291cmNlX3BhdGggPSBTdHJpbmdJTygpCiAgICAgICAgIHBhcnNlciA9IFBhcnNlcigpCi0gICAgICAgIHNldHRpbmdzID0gZnJvbnRlbmQuT3B0aW9uUGFyc2VyKCkuZ2V0X2RlZmF1bHRfdmFsdWVzKCkKKyAgICAgICAgc2V0dGluZ3MgPSBmcm9udGVuZC5PcHRpb25QYXJzZXIoY29tcG9uZW50cz0oUGFyc2VyLCkpLmdldF9kZWZhdWx0X3ZhbHVlcygpCiAgICAgICAgIHNldHRpbmdzLnRhYl93aWR0aCA9IDQKICAgICAgICAgc2V0dGluZ3MucGVwX3JlZmVyZW5jZXMgPSBOb25lCiAgICAgICAgIHNldHRpbmdzLnJmY19yZWZlcmVuY2VzID0gTm9uZQpAQCAtMTM4LDggKzEzOCw4IEBACiAgICAgICAgIGRvY3VtZW50Lm5vdGVfc291cmNlKHNvdXJjZV9wYXRoLCAtMSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcGFyc2VyLnBhcnNlKGRhdGEsIGRvY3VtZW50KQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXBvcnRlci5tZXNzYWdlcy5hcHBlbmQoKC0xLCAnQ291bGQgbm90IGZpbmlzaCB0aGUgcGFyc2luZy4nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywge30pKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHJlcG9ydGVyLm1lc3NhZ2VzLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAoLTEsICdDb3VsZCBub3QgZmluaXNoIHRoZSBwYXJzaW5nOiAlcy4nICUgZSwgJycsIHt9KSkKIAogICAgICAgICByZXR1cm4gcmVwb3J0ZXIubWVzc2FnZXMKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsLnB5IGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKaW5kZXggM2M2NzVkMS4uZDc2OGRjNSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGwucHkKQEAgLTE1LDMyICsxNSwxNyBAQAogZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgZ2V0X3BsYXRmb3JtCiBmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc09wdGlvbkVycm9yCiAKLSMgdGhpcyBrZWVwcyBjb21wYXRpYmlsaXR5IGZyb20gMi4zIHRvIDIuNQotaWYgc3lzLnZlcnNpb24gPCAiMi42IjoKLSAgICBVU0VSX0JBU0UgPSBOb25lCi0gICAgVVNFUl9TSVRFID0gTm9uZQotICAgIEhBU19VU0VSX1NJVEUgPSBGYWxzZQotZWxzZToKLSAgICBmcm9tIHNpdGUgaW1wb3J0IFVTRVJfQkFTRQotICAgIGZyb20gc2l0ZSBpbXBvcnQgVVNFUl9TSVRFCi0gICAgSEFTX1VTRVJfU0lURSA9IFRydWUKK2Zyb20gc2l0ZSBpbXBvcnQgVVNFUl9CQVNFCitmcm9tIHNpdGUgaW1wb3J0IFVTRVJfU0lURQorSEFTX1VTRVJfU0lURSA9IFRydWUKIAotaWYgc3lzLnZlcnNpb24gPCAiMi4yIjoKLSAgICBXSU5ET1dTX1NDSEVNRSA9IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UnLAotICAgICAgICAncGxhdGxpYic6ICckYmFzZScsCi0gICAgICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi0gICAgfQotZWxzZToKLSAgICBXSU5ET1dTX1NDSEVNRSA9IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICAgICAgICAnZGF0YScgICA6ICckYmFzZScsCi0gICAgfQorV0lORE9XU19TQ0hFTUUgPSB7CisgICAgJ3B1cmVsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAorICAgICdwbGF0bGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKKyAgICAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAorICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAorICAgICdkYXRhJyAgIDogJyRiYXNlJywKK30KIAogSU5TVEFMTF9TQ0hFTUVTID0gewogICAgICd1bml4X3ByZWZpeCc6IHsKQEAgLTU4LDEzICs0Myw2IEBACiAgICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKICAgICAgICAgfSwKICAgICAnbnQnOiBXSU5ET1dTX1NDSEVNRSwKLSAgICAnb3MyJzogewotICAgICAgICAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJyRiYXNlL0xpYi9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJGJhc2UvSW5jbHVkZS8kZGlzdF9uYW1lJywKLSAgICAgICAgJ3NjcmlwdHMnOiAnJGJhc2UvU2NyaXB0cycsCi0gICAgICAgICdkYXRhJyAgIDogJyRiYXNlJywKLSAgICAgICAgfSwKICAgICB9CiAKICMgdXNlciBzaXRlIHNjaGVtZXMKQEAgLTg2LDE0ICs2NCw2IEBACiAgICAgICAgICdkYXRhJyAgIDogJyR1c2VyYmFzZScsCiAgICAgICAgIH0KIAotICAgIElOU1RBTExfU0NIRU1FU1snb3MyX2hvbWUnXSA9IHsKLSAgICAgICAgJ3B1cmVsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ3BsYXRsaWInOiAnJHVzZXJzaXRlJywKLSAgICAgICAgJ2hlYWRlcnMnOiAnJHVzZXJiYXNlL2luY2x1ZGUvcHl0aG9uJHB5X3ZlcnNpb25fc2hvcnQvJGRpc3RfbmFtZScsCi0gICAgICAgICdzY3JpcHRzJzogJyR1c2VyYmFzZS9iaW4nLAotICAgICAgICAnZGF0YScgICA6ICckdXNlcmJhc2UnLAotICAgICAgICB9Ci0KICMgVGhlIGtleXMgdG8gYW4gaW5zdGFsbGF0aW9uIHNjaGVtZTsgaWYgYW55IG5ldyB0eXBlcyBvZiBmaWxlcyBhcmUgdG8gYmUKICMgaW5zdGFsbGVkLCBiZSBzdXJlIHRvIGFkZCBhbiBlbnRyeSB0byBldmVyeSBpbnN0YWxsYXRpb24gc2NoZW1lIGFib3ZlLAogIyBhbmQgdG8gU0NIRU1FX0tFWVMgaGVyZS4KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weSBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9pbnN0YWxsX2xpYi5weQppbmRleCAxNWMwOGYxLi4yMTU4MTNiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvaW5zdGFsbF9saWIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL2luc3RhbGxfbGliLnB5CkBAIC00LDcgKzQsNyBAQAogKGluc3RhbGwgYWxsIFB5dGhvbiBtb2R1bGVzKS4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgQ29tbWFuZApAQCAtMTY1LDEwICsxNjUsMTAgQEAKICAgICAgICAgICAgIGlmIGV4dCAhPSBQWVRIT05fU09VUkNFX0VYVEVOU0lPTjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgaWYgc2VsZi5jb21waWxlOgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBkZWJ1Z19vdmVycmlkZT1UcnVlKSkKICAgICAgICAgICAgIGlmIHNlbGYub3B0aW1pemUgPiAwOgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGVzLmFwcGVuZChpbXAuY2FjaGVfZnJvbV9zb3VyY2UoCisgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZXMuYXBwZW5kKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgICAgICAgICBweV9maWxlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlX2ZpbGVzCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvc2Rpc3QucHkKaW5kZXggMTE2ZjY3ZS4uN2VhM2Q1ZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb21tYW5kL3NkaXN0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvY29tbWFuZC9zZGlzdC5weQpAQCAtNzQsNiArNzQsMTAgQEAKICAgICAgICAgKCdtZXRhZGF0YS1jaGVjaycsIE5vbmUsCiAgICAgICAgICAiRW5zdXJlIHRoYXQgYWxsIHJlcXVpcmVkIGVsZW1lbnRzIG9mIG1ldGEtZGF0YSAiCiAgICAgICAgICAiYXJlIHN1cHBsaWVkLiBXYXJuIGlmIGFueSBtaXNzaW5nLiBbZGVmYXVsdF0iKSwKKyAgICAgICAgKCdvd25lcj0nLCAndScsCisgICAgICAgICAiT3duZXIgbmFtZSB1c2VkIHdoZW4gY3JlYXRpbmcgYSB0YXIgZmlsZSBbZGVmYXVsdDogY3VycmVudCB1c2VyXSIpLAorICAgICAgICAoJ2dyb3VwPScsICdnJywKKyAgICAgICAgICJHcm91cCBuYW1lIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRhciBmaWxlIFtkZWZhdWx0OiBjdXJyZW50IGdyb3VwXSIpLAogICAgICAgICBdCiAKICAgICBib29sZWFuX29wdGlvbnMgPSBbJ3VzZS1kZWZhdWx0cycsICdwcnVuZScsCkBAIC0xMTMsNiArMTE3LDggQEAKIAogICAgICAgICBzZWxmLmFyY2hpdmVfZmlsZXMgPSBOb25lCiAgICAgICAgIHNlbGYubWV0YWRhdGFfY2hlY2sgPSAxCisgICAgICAgIHNlbGYub3duZXIgPSBOb25lCisgICAgICAgIHNlbGYuZ3JvdXAgPSBOb25lCiAKICAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5tYW5pZmVzdCBpcyBOb25lOgpAQCAtNDQ0LDcgKzQ1MCw4IEBACiAgICAgICAgICAgICBzZWxmLmZvcm1hdHMuYXBwZW5kKHNlbGYuZm9ybWF0cy5wb3Aoc2VsZi5mb3JtYXRzLmluZGV4KCd0YXInKSkpCiAKICAgICAgICAgZm9yIGZtdCBpbiBzZWxmLmZvcm1hdHM6Ci0gICAgICAgICAgICBmaWxlID0gc2VsZi5tYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCBmbXQsIGJhc2VfZGlyPWJhc2VfZGlyKQorICAgICAgICAgICAgZmlsZSA9IHNlbGYubWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgZm10LCBiYXNlX2Rpcj1iYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1zZWxmLm93bmVyLCBncm91cD1zZWxmLmdyb3VwKQogICAgICAgICAgICAgYXJjaGl2ZV9maWxlcy5hcHBlbmQoZmlsZSkKICAgICAgICAgICAgIHNlbGYuZGlzdHJpYnV0aW9uLmRpc3RfZmlsZXMuYXBwZW5kKCgnc2Rpc3QnLCAnJywgZmlsZSkpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkgYi9MaWIvZGlzdHV0aWxzL2NvbW1hbmQvdXBsb2FkLnB5CmluZGV4IGUzMGMxODkuLjFhOTZlMjIgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29tbWFuZC91cGxvYWQucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb21tYW5kL3VwbG9hZC5weQpAQCAtMiwxMCArMiw2IEBACiAKIEltcGxlbWVudHMgdGhlIERpc3R1dGlscyAndXBsb2FkJyBzdWJjb21tYW5kICh1cGxvYWQgcGFja2FnZSB0byBQeVBJKS4iIiIKIAotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAqCi1mcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBQeVBJUkNDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgc3Bhd24KLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIGltcG9ydCBzeXMKIGltcG9ydCBvcywgaW8KIGltcG9ydCBzb2NrZXQKQEAgLTEzLDYgKzksMTAgQEAKIGZyb20gYmFzZTY0IGltcG9ydCBzdGFuZGFyZF9iNjRlbmNvZGUKIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4sIFJlcXVlc3QsIEhUVFBFcnJvcgogZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHVybHBhcnNlCitmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0Vycm9yLCBEaXN0dXRpbHNPcHRpb25FcnJvcgorZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgUHlQSVJDQ29tbWFuZAorZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCitmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCiAKICMgdGhpcyBrZWVwcyBjb21wYXRpYmlsaXR5IGZvciAyLjMgYW5kIDIuNAogaWYgc3lzLnZlcnNpb24gPCAiMi41IjoKQEAgLTE0MywxMSArMTQzLDExIEBACiAKICAgICAgICAgIyBCdWlsZCB1cCB0aGUgTUlNRSBwYXlsb2FkIGZvciB0aGUgUE9TVCBkYXRhCiAgICAgICAgIGJvdW5kYXJ5ID0gJy0tLS0tLS0tLS0tLS0tR0hTS0ZKRExHRFM3NTQzRkpLTEZIUkU3NTY0Mjc1Njc0MzI1NCcKLSAgICAgICAgc2VwX2JvdW5kYXJ5ID0gYidcbi0tJyArIGJvdW5kYXJ5LmVuY29kZSgnYXNjaWknKQotICAgICAgICBlbmRfYm91bmRhcnkgPSBzZXBfYm91bmRhcnkgKyBiJy0tJworICAgICAgICBzZXBfYm91bmRhcnkgPSBiJ1xyXG4tLScgKyBib3VuZGFyeS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgZW5kX2JvdW5kYXJ5ID0gc2VwX2JvdW5kYXJ5ICsgYictLVxyXG4nCiAgICAgICAgIGJvZHkgPSBpby5CeXRlc0lPKCkKICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZGF0YS5pdGVtcygpOgotICAgICAgICAgICAgdGl0bGUgPSAnXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9IiVzIicgJSBrZXkKKyAgICAgICAgICAgIHRpdGxlID0gJ1xyXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9IiVzIicgJSBrZXkKICAgICAgICAgICAgICMgaGFuZGxlIG11bHRpcGxlIGVudHJpZXMgZm9yIHRoZSBzYW1lIG5hbWUKICAgICAgICAgICAgIGlmIHR5cGUodmFsdWUpICE9IHR5cGUoW10pOgogICAgICAgICAgICAgICAgIHZhbHVlID0gW3ZhbHVlXQpAQCAtMTU5LDEyICsxNTksMTEgQEAKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHIodmFsdWUpLmVuY29kZSgndXRmLTgnKQogICAgICAgICAgICAgICAgIGJvZHkud3JpdGUoc2VwX2JvdW5kYXJ5KQogICAgICAgICAgICAgICAgIGJvZHkud3JpdGUodGl0bGUuZW5jb2RlKCd1dGYtOCcpKQotICAgICAgICAgICAgICAgIGJvZHkud3JpdGUoYiJcblxuIikKKyAgICAgICAgICAgICAgICBib2R5LndyaXRlKGIiXHJcblxyXG4iKQogICAgICAgICAgICAgICAgIGJvZHkud3JpdGUodmFsdWUpCiAgICAgICAgICAgICAgICAgaWYgdmFsdWUgYW5kIHZhbHVlWy0xOl0gPT0gYidccic6CiAgICAgICAgICAgICAgICAgICAgIGJvZHkud3JpdGUoYidcbicpICAjIHdyaXRlIGFuIGV4dHJhIG5ld2xpbmUgKGx1cnZlIE1hY3MpCiAgICAgICAgIGJvZHkud3JpdGUoZW5kX2JvdW5kYXJ5KQotICAgICAgICBib2R5LndyaXRlKGIiXG4iKQogICAgICAgICBib2R5ID0gYm9keS5nZXR2YWx1ZSgpCiAKICAgICAgICAgc2VsZi5hbm5vdW5jZSgiU3VibWl0dGluZyAlcyB0byAlcyIgJSAoZmlsZW5hbWUsIHNlbGYucmVwb3NpdG9yeSksIGxvZy5JTkZPKQpAQCAtMTgyLDkgKzE4MSw5IEBACiAgICAgICAgICAgICByZXN1bHQgPSB1cmxvcGVuKHJlcXVlc3QpCiAgICAgICAgICAgICBzdGF0dXMgPSByZXN1bHQuZ2V0Y29kZSgpCiAgICAgICAgICAgICByZWFzb24gPSByZXN1bHQubXNnCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYW5ub3VuY2Uoc3RyKGUpLCBsb2cuRVJST1IpCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBIVFRQRXJyb3IgYXMgZToKICAgICAgICAgICAgIHN0YXR1cyA9IGUuY29kZQogICAgICAgICAgICAgcmVhc29uID0gZS5tc2cKQEAgLTE5Myw4ICsxOTIsOSBAQAogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnU2VydmVyIHJlc3BvbnNlICglcyk6ICVzJyAlIChzdGF0dXMsIHJlYXNvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5JTkZPKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnVXBsb2FkIGZhaWxlZCAoJXMpOiAlcycgJSAoc3RhdHVzLCByZWFzb24pLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cuRVJST1IpCisgICAgICAgICAgICBtc2cgPSAnVXBsb2FkIGZhaWxlZCAoJXMpOiAlcycgJSAoc3RhdHVzLCByZWFzb24pCisgICAgICAgICAgICBzZWxmLmFubm91bmNlKG1zZywgbG9nLkVSUk9SKQorICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXJyb3IobXNnKQogICAgICAgICBpZiBzZWxmLnNob3dfcmVzcG9uc2U6CiAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5fcmVhZF9weXBpX3Jlc3BvbnNlKHJlc3VsdCkKICAgICAgICAgICAgIG1zZyA9ICdcbicuam9pbigoJy0nICogNzUsIHRleHQsICctJyAqIDc1KSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9jb25maWcucHkKaW5kZXggOTY0NjljYS4uNjRjOWI2NyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jb25maWcucHkKQEAgLTgzLDYgKzgzLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtrZXldID0gY29uZmlnLmdldChzZXJ2ZXIsIGtleSkKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFtrZXldID0gZGVmYXVsdAorCisgICAgICAgICAgICAgICAgICAgICMgd29yayBhcm91bmQgcGVvcGxlIGhhdmluZyAicmVwb3NpdG9yeSIgZm9yIHRoZSAicHlwaSIKKyAgICAgICAgICAgICAgICAgICAgIyBzZWN0aW9uIG9mIHRoZWlyIGNvbmZpZyBzZXQgdG8gdGhlIEhUVFAgKHJhdGhlciB0aGFuCisgICAgICAgICAgICAgICAgICAgICMgSFRUUFMpIFVSTAorICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmVyID09ICdweXBpJyBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcG9zaXRvcnkgaW4gKHNlbGYuREVGQVVMVF9SRVBPU0lUT1JZLCAncHlwaScpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRbJ3JlcG9zaXRvcnknXSA9IHNlbGYuREVGQVVMVF9SRVBPU0lUT1JZCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudAorCiAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50WydzZXJ2ZXInXSA9PSByZXBvc2l0b3J5IG9yCiAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50WydyZXBvc2l0b3J5J10gPT0gcmVwb3NpdG9yeSk6CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9jb3JlLnB5IGIvTGliL2Rpc3R1dGlscy9jb3JlLnB5CmluZGV4IDI1ZDkxYmEuLjJiZmU2NmEgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvY29yZS5weQorKysgYi9MaWIvZGlzdHV0aWxzL2NvcmUucHkKQEAgLTEyNyw4ICsxMjcsOSBAQAogICAgIGlmIF9zZXR1cF9zdG9wX2FmdGVyID09ICJjb25maWciOgogICAgICAgICByZXR1cm4gZGlzdAogCi0gICAgIyBQYXJzZSB0aGUgY29tbWFuZCBsaW5lOyBhbnkgY29tbWFuZC1saW5lIGVycm9ycyBhcmUgdGhlIGVuZCB1c2VyJ3MKLSAgICAjIGZhdWx0LCBzbyB0dXJuIHRoZW0gaW50byBTeXN0ZW1FeGl0IHRvIHN1cHByZXNzIHRyYWNlYmFja3MuCisgICAgIyBQYXJzZSB0aGUgY29tbWFuZCBsaW5lIGFuZCBvdmVycmlkZSBjb25maWcgZmlsZXM7IGFueQorICAgICMgY29tbWFuZC1saW5lIGVycm9ycyBhcmUgdGhlIGVuZCB1c2VyJ3MgZmF1bHQsIHNvIHR1cm4gdGhlbSBpbnRvCisgICAgIyBTeXN0ZW1FeGl0IHRvIHN1cHByZXNzIHRyYWNlYmFja3MuCiAgICAgdHJ5OgogICAgICAgICBvayA9IGRpc3QucGFyc2VfY29tbWFuZF9saW5lKCkKICAgICBleGNlcHQgRGlzdHV0aWxzQXJnRXJyb3IgYXMgbXNnOgpAQCAtMTQ3LDcgKzE0OCw3IEBACiAgICAgICAgICAgICBkaXN0LnJ1bl9jb21tYW5kcygpCiAgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoImludGVycnVwdGVkIikKLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBvcy5lcnJvcikgYXMgZXhjOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgICAgICBpZiBERUJVRzoKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJlcnJvcjogJXNcbiIgJSAoZXhjLCkpCiAgICAgICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvY3lnd2luY2NvbXBpbGVyLnB5IGIvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKaW5kZXggZTAwNzRhMS4uYzg3OTY0NiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9jeWd3aW5jY29tcGlsZXIucHkKQEAgLTEwLDkgKzEwLDkgQEAKICMKICMgKiBpZiB5b3UgdXNlIGEgbXN2YyBjb21waWxlZCBweXRob24gdmVyc2lvbiAoMS41LjIpCiAjICAgMS4geW91IGhhdmUgdG8gaW5zZXJ0IGEgX19HTlVDX18gc2VjdGlvbiBpbiBpdHMgY29uZmlnLmgKLSMgICAyLiB5b3UgaGF2ZSB0byBnZW5lcmF0ZSBhIGltcG9ydCBsaWJyYXJ5IGZvciBpdHMgZGxsCisjICAgMi4geW91IGhhdmUgdG8gZ2VuZXJhdGUgYW4gaW1wb3J0IGxpYnJhcnkgZm9yIGl0cyBkbGwKICMgICAgICAtIGNyZWF0ZSBhIGRlZi1maWxlIGZvciBweXRob24/Py5kbGwKLSMgICAgICAtIGNyZWF0ZSBhIGltcG9ydCBsaWJyYXJ5IHVzaW5nCisjICAgICAgLSBjcmVhdGUgYW4gaW1wb3J0IGxpYnJhcnkgdXNpbmcKICMgICAgICAgICAgICAgZGxsdG9vbCAtLWRsbG5hbWUgcHl0aG9uMTUuZGxsIC0tZGVmIHB5dGhvbjE1LmRlZiBcCiAjICAgICAgICAgICAgICAgICAgICAgICAtLW91dHB1dC1saWIgbGlicHl0aG9uMTUuYQogIwpAQCAtNTQsNyArNTQsOCBAQAogZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZW5fcHJlcHJvY2Vzc19vcHRpb25zLCBnZW5fbGliX29wdGlvbnMKIGZyb20gZGlzdHV0aWxzLnVuaXhjY29tcGlsZXIgaW1wb3J0IFVuaXhDQ29tcGlsZXIKIGZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgd3JpdGVfZmlsZQotZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFeGVjRXJyb3IsIENvbXBpbGVFcnJvciwgVW5rbm93bkZpbGVFcnJvcgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCAoRGlzdHV0aWxzRXhlY0Vycm9yLCBDQ29tcGlsZXJFcnJvciwKKyAgICAgICAgQ29tcGlsZUVycm9yLCBVbmtub3duRmlsZUVycm9yKQogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogZnJvbSBkaXN0dXRpbHMudmVyc2lvbiBpbXBvcnQgTG9vc2VWZXJzaW9uCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCkBAIC0yOTQsMTggKzI5NSwxNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZW50cnlfcG9pbnQgPSAnJwogCi0gICAgICAgIGlmIHNlbGYuZ2NjX3ZlcnNpb24gPCAnNCcgb3IgaXNfY3lnd2luZ2NjKCk6Ci0gICAgICAgICAgICBub19jeWd3aW4gPSAnIC1tbm8tY3lnd2luJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm9fY3lnd2luID0gJycKKyAgICAgICAgaWYgaXNfY3lnd2luZ2NjKCk6CisgICAgICAgICAgICByYWlzZSBDQ29tcGlsZXJFcnJvcigKKyAgICAgICAgICAgICAgICAnQ3lnd2luIGdjYyBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tY29tcGlsZXI9bWluZ3czMicpCiAKLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyVzIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyVzIC1tZGxsIC1PIC1XYWxsJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKyslcyAtTyAtV2FsbCcgJSBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtlcl9leGU9J2djYyVzJyAlIG5vX2N5Z3dpbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX3NvPSclcyVzICVzICVzJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoc2VsZi5saW5rZXJfZGxsLCBub19jeWd3aW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFyZWRfb3B0aW9uLCBlbnRyeV9wb2ludCkpCisgICAgICAgIHNlbGYuc2V0X2V4ZWN1dGFibGVzKGNvbXBpbGVyPSdnY2MgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcl9zbz0nZ2NjIC1tZGxsIC1PIC1XYWxsJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfY3h4PSdnKysgLU8gLVdhbGwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfZXhlPSdnY2MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289JyVzICVzICVzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNlbGYubGlua2VyX2RsbCwgc2hhcmVkX29wdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeV9wb2ludCkpCiAgICAgICAgICMgTWF5YmUgd2Ugc2hvdWxkIGFsc28gYXBwZW5kIC1tdGhyZWFkcywgYnV0IHRoZW4gdGhlIGZpbmlzaGVkCiAgICAgICAgICMgZGxscyBuZWVkIGFub3RoZXIgZGxsIChtaW5nd20xMC5kbGwgc2VlIE1pbmd3MzIgZG9jcykKICAgICAgICAgIyAoLW10aHJlYWRzOiBTdXBwb3J0IHRocmVhZC1zYWZlIGV4Y2VwdGlvbiBoYW5kbGluZyBvbiBgTWluZ3czMicpCkBAIC0zMTgsNyArMzE4LDcgQEAKICAgICAgICAgc2VsZi5kbGxfbGlicmFyaWVzID0gZ2V0X21zdmNyKCkKIAogIyBCZWNhdXNlIHRoZXNlIGNvbXBpbGVycyBhcmVuJ3QgY29uZmlndXJlZCBpbiBQeXRob24ncyBweWNvbmZpZy5oIGZpbGUgYnkKLSMgZGVmYXVsdCwgd2Ugc2hvdWxkIGF0IGxlYXN0IHdhcm4gdGhlIHVzZXIgaWYgaGUgaXMgdXNpbmcgYSB1bm1vZGlmaWVkCisjIGRlZmF1bHQsIHdlIHNob3VsZCBhdCBsZWFzdCB3YXJuIHRoZSB1c2VyIGlmIGhlIGlzIHVzaW5nIGFuIHVubW9kaWZpZWQKICMgdmVyc2lvbi4KIAogQ09ORklHX0hfT0sgPSAib2siCkBAIC0zNjQsNyArMzY0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gQ09ORklHX0hfTk9UT0ssICInJXMnIGRvZXMgbm90IG1lbnRpb24gJ19fR05VQ19fJyIgJSBmbgogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgY29uZmlnX2guY2xvc2UoKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CiAgICAgICAgIHJldHVybiAoQ09ORklHX0hfVU5DRVJUQUlOLAogICAgICAgICAgICAgICAgICJjb3VsZG4ndCByZWFkICclcyc6ICVzIiAlIChmbiwgZXhjLnN0cmVycm9yKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weSBiL0xpYi9kaXN0dXRpbHMvZGlyX3V0aWwucHkKaW5kZXggNmE3MmJkZC4uZDVjZDhlMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9kaXJfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2Rpcl91dGlsLnB5CkBAIC04MSw3ICs4MSw3IEBACiAgICAgIiIiQ3JlYXRlIGFsbCB0aGUgZW1wdHkgZGlyZWN0b3JpZXMgdW5kZXIgJ2Jhc2VfZGlyJyBuZWVkZWQgdG8gcHV0ICdmaWxlcycKICAgICB0aGVyZS4KIAotICAgICdiYXNlX2RpcicgaXMganVzdCB0aGUgYSBuYW1lIG9mIGEgZGlyZWN0b3J5IHdoaWNoIGRvZXNuJ3QgbmVjZXNzYXJpbHkKKyAgICAnYmFzZV9kaXInIGlzIGp1c3QgdGhlIG5hbWUgb2YgYSBkaXJlY3Rvcnkgd2hpY2ggZG9lc24ndCBuZWNlc3NhcmlseQogICAgIGV4aXN0IHlldDsgJ2ZpbGVzJyBpcyBhIGxpc3Qgb2YgZmlsZW5hbWVzIHRvIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvCiAgICAgJ2Jhc2VfZGlyJy4gICdiYXNlX2RpcicgKyB0aGUgZGlyZWN0b3J5IHBvcnRpb24gb2YgZXZlcnkgZmlsZSBpbiAnZmlsZXMnCiAgICAgd2lsbCBiZSBjcmVhdGVkIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdC4gICdtb2RlJywgJ3ZlcmJvc2UnIGFuZApAQCAtMTI0LDEzICsxMjQsMTIgQEAKICAgICAgICAgICAgICAgImNhbm5vdCBjb3B5IHRyZWUgJyVzJzogbm90IGEgZGlyZWN0b3J5IiAlIHNyYykKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzcmMpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6Ci0gICAgICAgIChlcnJubywgZXJyc3RyKSA9IGUKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICBpZiBkcnlfcnVuOgogICAgICAgICAgICAgbmFtZXMgPSBbXQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAotICAgICAgICAgICAgICAgICAgImVycm9yIGxpc3RpbmcgZmlsZXMgaW4gJyVzJzogJXMiICUgKHNyYywgZXJyc3RyKSkKKyAgICAgICAgICAgICAgICAgICJlcnJvciBsaXN0aW5nIGZpbGVzIGluICclcyc6ICVzIiAlIChzcmMsIGUuc3RyZXJyb3IpKQogCiAgICAgaWYgbm90IGRyeV9ydW46CiAgICAgICAgIG1rcGF0aChkc3QsIHZlcmJvc2U9dmVyYm9zZSkKQEAgLTE5Nyw3ICsxOTYsNyBAQAogICAgICAgICAgICAgYWJzcGF0aCA9IG9zLnBhdGguYWJzcGF0aChjbWRbMV0pCiAgICAgICAgICAgICBpZiBhYnNwYXRoIGluIF9wYXRoX2NyZWF0ZWQ6CiAgICAgICAgICAgICAgICAgZGVsIF9wYXRoX2NyZWF0ZWRbYWJzcGF0aF0KLSAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBleGM6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKICAgICAgICAgICAgIGxvZy53YXJuKCJlcnJvciByZW1vdmluZyAlczogJXMiLCBkaXJlY3RvcnksIGV4YykKIAogZGVmIGVuc3VyZV9yZWxhdGl2ZShwYXRoKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvZGlzdC5weQppbmRleCAxMWEyMTAyLi43ZWIwNGJjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy9kaXN0LnB5CkBAIC01Miw3ICs1Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgKCdxdWlldCcsICdxJywgInJ1biBxdWlldGx5ICh0dXJucyB2ZXJib3NpdHkgb2ZmKSIpLAogICAgICAgICAgICAgICAgICAgICAgICgnZHJ5LXJ1bicsICduJywgImRvbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIiksCiAgICAgICAgICAgICAgICAgICAgICAgKCdoZWxwJywgJ2gnLCAic2hvdyBkZXRhaWxlZCBoZWxwIG1lc3NhZ2UiKSwKLSAgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICAgICAgICAoJ25vLXVzZXItY2ZnJywgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgJ2lnbm9yZSBweWRpc3R1dGlscy5jZmcgaW4geW91ciBob21lIGRpcmVjdG9yeScpLAorICAgIF0KIAogICAgICMgJ2NvbW1vbl91c2FnZScgaXMgYSBzaG9ydCAoMi0zIGxpbmUpIHN0cmluZyBkZXNjcmliaW5nIHRoZSBjb21tb24KICAgICAjIHVzYWdlIG9mIHRoZSBzZXR1cCBzY3JpcHQuCkBAIC0yNTksNiArMjYxLDIyIEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKG1zZyArICJcbiIpCiAKKyAgICAgICAgIyBuby11c2VyLWNmZyBpcyBoYW5kbGVkIGJlZm9yZSBvdGhlciBjb21tYW5kIGxpbmUgYXJncworICAgICAgICAjIGJlY2F1c2Ugb3RoZXIgYXJncyBvdmVycmlkZSB0aGUgY29uZmlnIGZpbGVzLCBhbmQgdGhpcworICAgICAgICAjIG9uZSBpcyBuZWVkZWQgYmVmb3JlIHdlIGNhbiBsb2FkIHRoZSBjb25maWcgZmlsZXMuCisgICAgICAgICMgSWYgYXR0cnNbJ3NjcmlwdF9hcmdzJ10gd2Fzbid0IHBhc3NlZCwgYXNzdW1lIGZhbHNlLgorICAgICAgICAjCisgICAgICAgICMgVGhpcyBhbHNvIG1ha2Ugc3VyZSB3ZSBqdXN0IGxvb2sgYXQgdGhlIGdsb2JhbCBvcHRpb25zCisgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IFRydWUKKworICAgICAgICBpZiBzZWxmLnNjcmlwdF9hcmdzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIGFyZyBpbiBzZWxmLnNjcmlwdF9hcmdzOgorICAgICAgICAgICAgICAgIGlmIG5vdCBhcmcuc3RhcnRzd2l0aCgnLScpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGFyZyA9PSAnLS1uby11c2VyLWNmZyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYud2FudF91c2VyX2NmZyA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgc2VsZi5maW5hbGl6ZV9vcHRpb25zKCkKIAogICAgIGRlZiBnZXRfb3B0aW9uX2RpY3Qoc2VsZiwgY29tbWFuZCk6CkBAIC0zMTAsNyArMzI4LDEwIEBACiAgICAgICAgIERpc3R1dGlscyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5IChpZS4gd2hlcmUgdGhlIHRvcC1sZXZlbAogICAgICAgICBEaXN0dXRpbHMgX19pbnN0X18ucHkgZmlsZSBsaXZlcyksIGEgZmlsZSBpbiB0aGUgdXNlcidzIGhvbWUKICAgICAgICAgZGlyZWN0b3J5IG5hbWVkIC5weWRpc3R1dGlscy5jZmcgb24gVW5peCBhbmQgcHlkaXN0dXRpbHMuY2ZnCi0gICAgICAgIG9uIFdpbmRvd3MvTWFjLCBhbmQgc2V0dXAuY2ZnIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKyAgICAgICAgb24gV2luZG93cy9NYWM7IGFuZCBzZXR1cC5jZmcgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgorCisgICAgICAgIFRoZSBmaWxlIGluIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgY2FuIGJlIGRpc2FibGVkIHdpdGggdGhlCisgICAgICAgIC0tbm8tdXNlci1jZmcgb3B0aW9uLgogICAgICAgICAiIiIKICAgICAgICAgZmlsZXMgPSBbXQogICAgICAgICBjaGVja19lbnZpcm9uKCkKQEAgLTMzMCwxNSArMzUxLDE5IEBACiAgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gInB5ZGlzdHV0aWxzLmNmZyIKIAogICAgICAgICAjIEFuZCBsb29rIGZvciB0aGUgdXNlciBjb25maWcgZmlsZQotICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHVzZXJfZmlsZSk6Ci0gICAgICAgICAgICBmaWxlcy5hcHBlbmQodXNlcl9maWxlKQorICAgICAgICBpZiBzZWxmLndhbnRfdXNlcl9jZmc6CisgICAgICAgICAgICB1c2VyX2ZpbGUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksIHVzZXJfZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSh1c2VyX2ZpbGUpOgorICAgICAgICAgICAgICAgIGZpbGVzLmFwcGVuZCh1c2VyX2ZpbGUpCiAKICAgICAgICAgIyBBbGwgcGxhdGZvcm1zIHN1cHBvcnQgbG9jYWwgc2V0dXAuY2ZnCiAgICAgICAgIGxvY2FsX2ZpbGUgPSAic2V0dXAuY2ZnIgogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShsb2NhbF9maWxlKToKICAgICAgICAgICAgIGZpbGVzLmFwcGVuZChsb2NhbF9maWxlKQogCisgICAgICAgIGlmIERFQlVHOgorICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgidXNpbmcgY29uZmlnIGZpbGVzOiAlcyIgJSAnLCAnLmpvaW4oZmlsZXMpKQorCiAgICAgICAgIHJldHVybiBmaWxlcwogCiAgICAgZGVmIHBhcnNlX2NvbmZpZ19maWxlcyhzZWxmLCBmaWxlbmFtZXM9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2VteGNjb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjc1ZjhkLi4wMDAwMDAwCi0tLSBhL0xpYi9kaXN0dXRpbHMvZW14Y2NvbXBpbGVyLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMzE1ICswLDAgQEAKLSIiImRpc3R1dGlscy5lbXhjY29tcGlsZXIKLQotUHJvdmlkZXMgdGhlIEVNWENDb21waWxlciBjbGFzcywgYSBzdWJjbGFzcyBvZiBVbml4Q0NvbXBpbGVyIHRoYXQKLWhhbmRsZXMgdGhlIEVNWCBwb3J0IG9mIHRoZSBHTlUgQyBjb21waWxlciB0byBPUy8yLgotIiIiCi0KLSMgaXNzdWVzOgotIwotIyAqIE9TLzIgaW5zaXN0cyB0aGF0IERMTHMgY2FuIGhhdmUgbmFtZXMgbm8gbG9uZ2VyIHRoYW4gOCBjaGFyYWN0ZXJzCi0jICAgV2UgcHV0IGV4cG9ydF9zeW1ib2xzIGluIGEgZGVmLWZpbGUsIGFzIHRob3VnaCB0aGUgRExMIGNhbiBoYXZlCi0jICAgYW4gYXJiaXRyYXJ5IGxlbmd0aCBuYW1lLCBidXQgdHJ1bmNhdGUgdGhlIG91dHB1dCBmaWxlbmFtZS4KLSMKLSMgKiBvbmx5IHVzZSBPTUYgb2JqZWN0cyBhbmQgdXNlIExJTkszODYgYXMgdGhlIGxpbmtlciAoLVpvbWYpCi0jCi0jICogYWx3YXlzIGJ1aWxkIGZvciBtdWx0aXRocmVhZGluZyAoLVptdCkgYXMgdGhlIGFjY29tcGFueWluZyBPUy8yIHBvcnQKLSMgICBvZiBQeXRob24gaXMgb25seSBkaXN0cmlidXRlZCB3aXRoIHRocmVhZHMgZW5hYmxlZC4KLSMKLSMgdGVzdGVkIGNvbmZpZ3VyYXRpb25zOgotIwotIyAqIEVNWCBnY2MgMi44MS9FTVggMC45ZCBmaXgwMwotCi1pbXBvcnQgb3Msc3lzLGNvcHkKLWZyb20gZGlzdHV0aWxzLmNjb21waWxlciBpbXBvcnQgZ2VuX3ByZXByb2Nlc3Nfb3B0aW9ucywgZ2VuX2xpYl9vcHRpb25zCi1mcm9tIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyIGltcG9ydCBVbml4Q0NvbXBpbGVyCi1mcm9tIGRpc3R1dGlscy5maWxlX3V0aWwgaW1wb3J0IHdyaXRlX2ZpbGUKLWZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yLCBDb21waWxlRXJyb3IsIFVua25vd25GaWxlRXJyb3IKLWZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKLQotY2xhc3MgRU1YQ0NvbXBpbGVyIChVbml4Q0NvbXBpbGVyKToKLQotICAgIGNvbXBpbGVyX3R5cGUgPSAnZW14JwotICAgIG9ial9leHRlbnNpb24gPSAiLm9iaiIKLSAgICBzdGF0aWNfbGliX2V4dGVuc2lvbiA9ICIubGliIgotICAgIHNoYXJlZF9saWJfZXh0ZW5zaW9uID0gIi5kbGwiCi0gICAgc3RhdGljX2xpYl9mb3JtYXQgPSAiJXMlcyIKLSAgICBzaGFyZWRfbGliX2Zvcm1hdCA9ICIlcyVzIgotICAgIHJlc19leHRlbnNpb24gPSAiLnJlcyIgICAgICAjIGNvbXBpbGVkIHJlc291cmNlIGZpbGUKLSAgICBleGVfZXh0ZW5zaW9uID0gIi5leGUiCi0KLSAgICBkZWYgX19pbml0X18gKHNlbGYsCi0gICAgICAgICAgICAgICAgICB2ZXJib3NlPTAsCi0gICAgICAgICAgICAgICAgICBkcnlfcnVuPTAsCi0gICAgICAgICAgICAgICAgICBmb3JjZT0wKToKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLl9faW5pdF9fIChzZWxmLCB2ZXJib3NlLCBkcnlfcnVuLCBmb3JjZSkKLQotICAgICAgICAoc3RhdHVzLCBkZXRhaWxzKSA9IGNoZWNrX2NvbmZpZ19oKCkKLSAgICAgICAgc2VsZi5kZWJ1Z19wcmludCgiUHl0aG9uJ3MgR0NDIHN0YXR1czogJXMgKGRldGFpbHM6ICVzKSIgJQotICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0dXMsIGRldGFpbHMpKQotICAgICAgICBpZiBzdGF0dXMgaXMgbm90IENPTkZJR19IX09LOgotICAgICAgICAgICAgc2VsZi53YXJuKAotICAgICAgICAgICAgICAgICJQeXRob24ncyBweWNvbmZpZy5oIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0IHlvdXIgY29tcGlsZXIuICAiICsKLSAgICAgICAgICAgICAgICAoIlJlYXNvbjogJXMuIiAlIGRldGFpbHMpICsKLSAgICAgICAgICAgICAgICAiQ29tcGlsaW5nIG1heSBmYWlsIGJlY2F1c2Ugb2YgdW5kZWZpbmVkIHByZXByb2Nlc3NvciBtYWNyb3MuIikKLQotICAgICAgICAoc2VsZi5nY2NfdmVyc2lvbiwgc2VsZi5sZF92ZXJzaW9uKSA9IFwKLSAgICAgICAgICAgIGdldF92ZXJzaW9ucygpCi0gICAgICAgIHNlbGYuZGVidWdfcHJpbnQoc2VsZi5jb21waWxlcl90eXBlICsgIjogZ2NjICVzLCBsZCAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuZ2NjX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubGRfdmVyc2lvbikgKQotCi0gICAgICAgICMgSGFyZC1jb2RlIEdDQyBiZWNhdXNlIHRoYXQncyB3aGF0IHRoaXMgaXMgYWxsIGFib3V0LgotICAgICAgICAjIFhYWCBvcHRpbWl6YXRpb24sIHdhcm5pbmdzIGV0Yy4gc2hvdWxkIGJlIGN1c3RvbWl6YWJsZS4KLSAgICAgICAgc2VsZi5zZXRfZXhlY3V0YWJsZXMoY29tcGlsZXI9J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXJfc289J2djYyAtWm9tZiAtWm10IC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIC1XYWxsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlua2VyX2V4ZT0nZ2NjIC1ab21mIC1abXQgLVpjcnRkbGwnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZXJfc289J2djYyAtWm9tZiAtWm10IC1aY3J0ZGxsIC1aZGxsJykKLQotICAgICAgICAjIHdhbnQgdGhlIGdjYyBsaWJyYXJ5IHN0YXRpY2FsbHkgbGlua2VkIChzbyB0aGF0IHdlIGRvbid0IGhhdmUKLSAgICAgICAgIyB0byBkaXN0cmlidXRlIGEgdmVyc2lvbiBkZXBlbmRlbnQgb24gdGhlIGNvbXBpbGVyIHdlIGhhdmUpCi0gICAgICAgIHNlbGYuZGxsX2xpYnJhcmllcz1bImdjYyJdCi0KLSAgICAjIF9faW5pdF9fICgpCi0KLSAgICBkZWYgX2NvbXBpbGUoc2VsZiwgb2JqLCBzcmMsIGV4dCwgY2NfYXJncywgZXh0cmFfcG9zdGFyZ3MsIHBwX29wdHMpOgotICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAjIGdjYyByZXF1aXJlcyAnLnJjJyBjb21waWxlZCB0byBiaW5hcnkgKCcucmVzJykgZmlsZXMgISEhCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zcGF3bihbInJjIiwgIi1yIiwgc3JjXSkKLSAgICAgICAgICAgIGV4Y2VwdCBEaXN0dXRpbHNFeGVjRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHJhaXNlIENvbXBpbGVFcnJvcihtc2cpCi0gICAgICAgIGVsc2U6ICMgZm9yIG90aGVyIGZpbGVzIHVzZSB0aGUgQy1jb21waWxlcgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYuc3Bhd24oc2VsZi5jb21waWxlcl9zbyArIGNjX2FyZ3MgKyBbc3JjLCAnLW8nLCBvYmpdICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3Bvc3RhcmdzKQotICAgICAgICAgICAgZXhjZXB0IERpc3R1dGlsc0V4ZWNFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcmFpc2UgQ29tcGlsZUVycm9yKG1zZykKLQotICAgIGRlZiBsaW5rIChzZWxmLAotICAgICAgICAgICAgICB0YXJnZXRfZGVzYywKLSAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgb3V0cHV0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICBvdXRwdXRfZGlyPU5vbmUsCi0gICAgICAgICAgICAgIGxpYnJhcmllcz1Ob25lLAotICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgcnVudGltZV9saWJyYXJ5X2RpcnM9Tm9uZSwKLSAgICAgICAgICAgICAgZXhwb3J0X3N5bWJvbHM9Tm9uZSwKLSAgICAgICAgICAgICAgZGVidWc9MCwKLSAgICAgICAgICAgICAgZXh0cmFfcHJlYXJncz1Ob25lLAotICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncz1Ob25lLAotICAgICAgICAgICAgICBidWlsZF90ZW1wPU5vbmUsCi0gICAgICAgICAgICAgIHRhcmdldF9sYW5nPU5vbmUpOgotCi0gICAgICAgICMgdXNlIHNlcGFyYXRlIGNvcGllcywgc28gd2UgY2FuIG1vZGlmeSB0aGUgbGlzdHMKLSAgICAgICAgZXh0cmFfcHJlYXJncyA9IGNvcHkuY29weShleHRyYV9wcmVhcmdzIG9yIFtdKQotICAgICAgICBsaWJyYXJpZXMgPSBjb3B5LmNvcHkobGlicmFyaWVzIG9yIFtdKQotICAgICAgICBvYmplY3RzID0gY29weS5jb3B5KG9iamVjdHMgb3IgW10pCi0KLSAgICAgICAgIyBBZGRpdGlvbmFsIGxpYnJhcmllcwotICAgICAgICBsaWJyYXJpZXMuZXh0ZW5kKHNlbGYuZGxsX2xpYnJhcmllcykKLQotICAgICAgICAjIGhhbmRsZSBleHBvcnQgc3ltYm9scyBieSBjcmVhdGluZyBhIGRlZi1maWxlCi0gICAgICAgICMgd2l0aCBleGVjdXRhYmxlcyB0aGlzIG9ubHkgd29ya3Mgd2l0aCBnY2MvbGQgYXMgbGlua2VyCi0gICAgICAgIGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAgICAgKHRhcmdldF9kZXNjICE9IHNlbGYuRVhFQ1VUQUJMRSkpOgotICAgICAgICAgICAgIyAoVGhlIGxpbmtlciBkb2Vzbid0IGRvIGFueXRoaW5nIGlmIG91dHB1dCBpcyB1cC10by1kYXRlLgotICAgICAgICAgICAgIyBTbyBpdCB3b3VsZCBwcm9iYWJseSBiZXR0ZXIgdG8gY2hlY2sgaWYgd2UgcmVhbGx5IG5lZWQgdGhpcywKLSAgICAgICAgICAgICMgYnV0IGZvciB0aGlzIHdlIGhhZCB0byBpbnNlcnQgc29tZSB1bmNoYW5nZWQgcGFydHMgb2YKLSAgICAgICAgICAgICMgVW5peENDb21waWxlciwgYW5kIHRoaXMgaXMgbm90IHdoYXQgd2Ugd2FudC4pCi0KLSAgICAgICAgICAgICMgd2Ugd2FudCB0byBwdXQgc29tZSBmaWxlcyBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlCi0gICAgICAgICAgICAjIG9iamVjdCBmaWxlcyBhcmUsIGJ1aWxkX3RlbXAgZG9lc24ndCBoZWxwIG11Y2gKLSAgICAgICAgICAgICMgd2hlcmUgYXJlIHRoZSBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIHRlbXBfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9iamVjdHNbMF0pCi0gICAgICAgICAgICAjIG5hbWUgb2YgZGxsIHRvIGdpdmUgdGhlIGhlbHBlciBmaWxlcyB0aGUgc2FtZSBiYXNlIG5hbWUKLSAgICAgICAgICAgIChkbGxfbmFtZSwgZGxsX2V4dGVuc2lvbikgPSBvcy5wYXRoLnNwbGl0ZXh0KAotICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUob3V0cHV0X2ZpbGVuYW1lKSkKLQotICAgICAgICAgICAgIyBnZW5lcmF0ZSB0aGUgZmlsZW5hbWVzIGZvciB0aGVzZSBmaWxlcwotICAgICAgICAgICAgZGVmX2ZpbGUgPSBvcy5wYXRoLmpvaW4odGVtcF9kaXIsIGRsbF9uYW1lICsgIi5kZWYiKQotCi0gICAgICAgICAgICAjIEdlbmVyYXRlIC5kZWYgZmlsZQotICAgICAgICAgICAgY29udGVudHMgPSBbCi0gICAgICAgICAgICAgICAgIkxJQlJBUlkgJXMgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSIgJSBcCi0gICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdGV4dChvcy5wYXRoLmJhc2VuYW1lKG91dHB1dF9maWxlbmFtZSkpWzBdLAotICAgICAgICAgICAgICAgICJEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCIsCi0gICAgICAgICAgICAgICAgIkVYUE9SVFMiXQotICAgICAgICAgICAgZm9yIHN5bSBpbiBleHBvcnRfc3ltYm9sczoKLSAgICAgICAgICAgICAgICBjb250ZW50cy5hcHBlbmQoJyAgIiVzIicgJSBzeW0pCi0gICAgICAgICAgICBzZWxmLmV4ZWN1dGUod3JpdGVfZmlsZSwgKGRlZl9maWxlLCBjb250ZW50cyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRpbmcgJXMiICUgZGVmX2ZpbGUpCi0KLSAgICAgICAgICAgICMgbmV4dCBhZGQgb3B0aW9ucyBmb3IgZGVmLWZpbGUgYW5kIHRvIGNyZWF0aW5nIGltcG9ydCBsaWJyYXJpZXMKLSAgICAgICAgICAgICMgZm9yIGdjYy9sZCB0aGUgZGVmLWZpbGUgaXMgc3BlY2lmaWVkIGFzIGFueSBvdGhlciBvYmplY3QgZmlsZXMKLSAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKGRlZl9maWxlKQotCi0gICAgICAgICNlbmQ6IGlmICgoZXhwb3J0X3N5bWJvbHMgaXMgbm90IE5vbmUpIGFuZAotICAgICAgICAjICAgICAgICAodGFyZ2V0X2Rlc2MgIT0gc2VsZi5FWEVDVVRBQkxFIG9yIHNlbGYubGlua2VyX2RsbCA9PSAiZ2NjIikpOgotCi0gICAgICAgICMgd2hvIHdhbnRzIHN5bWJvbHMgYW5kIGEgbWFueSB0aW1lcyBsYXJnZXIgb3V0cHV0IGZpbGUKLSAgICAgICAgIyBzaG91bGQgZXhwbGljaXRseSBzd2l0Y2ggdGhlIGRlYnVnIG1vZGUgb24KLSAgICAgICAgIyBvdGhlcndpc2Ugd2UgbGV0IGRsbHdyYXAvbGQgc3RyaXAgdGhlIG91dHB1dCBmaWxlCi0gICAgICAgICMgKE9uIG15IG1hY2hpbmU6IDEwS0IgPCBzdHJpcHBlZF9maWxlIDwgPz8xMDBLQgotICAgICAgICAjICAgdW5zdHJpcHBlZF9maWxlID0gc3RyaXBwZWRfZmlsZSArIFhYWCBLQgotICAgICAgICAjICAoIFhYWD0yNTQgZm9yIGEgdHlwaWNhbCBweXRob24gZXh0ZW5zaW9uKSkKLSAgICAgICAgaWYgbm90IGRlYnVnOgotICAgICAgICAgICAgZXh0cmFfcHJlYXJncy5hcHBlbmQoIi1zIikKLQotICAgICAgICBVbml4Q0NvbXBpbGVyLmxpbmsoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kZXNjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBydW50aW1lX2xpYnJhcnlfZGlycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsICMgZXhwb3J0X3N5bWJvbHMsIHdlIGRvIHRoaXMgaW4gb3VyIGRlZi1maWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX3ByZWFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9wb3N0YXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3RlbXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfbGFuZykKLQotICAgICMgbGluayAoKQotCi0gICAgIyAtLSBNaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICMgb3ZlcnJpZGUgdGhlIG9iamVjdF9maWxlbmFtZXMgbWV0aG9kIGZyb20gQ0NvbXBpbGVyIHRvCi0gICAgIyBzdXBwb3J0IHJjIGFuZCByZXMtZmlsZXMKLSAgICBkZWYgb2JqZWN0X2ZpbGVuYW1lcyAoc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2ZpbGVuYW1lcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfZGlyPTAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9kaXI9JycpOgotICAgICAgICBpZiBvdXRwdXRfZGlyIGlzIE5vbmU6IG91dHB1dF9kaXIgPSAnJwotICAgICAgICBvYmpfbmFtZXMgPSBbXQotICAgICAgICBmb3Igc3JjX25hbWUgaW4gc291cmNlX2ZpbGVuYW1lczoKLSAgICAgICAgICAgICMgdXNlIG5vcm1jYXNlIHRvIG1ha2Ugc3VyZSAnLnJjJyBpcyByZWFsbHkgJy5yYycgYW5kIG5vdCAnLlJDJwotICAgICAgICAgICAgKGJhc2UsIGV4dCkgPSBvcy5wYXRoLnNwbGl0ZXh0IChvcy5wYXRoLm5vcm1jYXNlKHNyY19uYW1lKSkKLSAgICAgICAgICAgIGlmIGV4dCBub3QgaW4gKHNlbGYuc3JjX2V4dGVuc2lvbnMgKyBbJy5yYyddKToKLSAgICAgICAgICAgICAgICByYWlzZSBVbmtub3duRmlsZUVycm9yKCJ1bmtub3duIGZpbGUgdHlwZSAnJXMnIChmcm9tICclcycpIiAlIFwKLSAgICAgICAgICAgICAgICAgICAgICAoZXh0LCBzcmNfbmFtZSkpCi0gICAgICAgICAgICBpZiBzdHJpcF9kaXI6Ci0gICAgICAgICAgICAgICAgYmFzZSA9IG9zLnBhdGguYmFzZW5hbWUgKGJhc2UpCi0gICAgICAgICAgICBpZiBleHQgPT0gJy5yYyc6Ci0gICAgICAgICAgICAgICAgIyB0aGVzZSBuZWVkIHRvIGJlIGNvbXBpbGVkIHRvIG9iamVjdCBmaWxlcwotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYucmVzX2V4dGVuc2lvbikpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG9ial9uYW1lcy5hcHBlbmQgKG9zLnBhdGguam9pbiAob3V0cHV0X2RpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZSArIHNlbGYub2JqX2V4dGVuc2lvbikpCi0gICAgICAgIHJldHVybiBvYmpfbmFtZXMKLQotICAgICMgb2JqZWN0X2ZpbGVuYW1lcyAoKQotCi0gICAgIyBvdmVycmlkZSB0aGUgZmluZF9saWJyYXJ5X2ZpbGUgbWV0aG9kIGZyb20gVW5peENDb21waWxlcgotICAgICMgdG8gZGVhbCB3aXRoIGZpbGUgbmFtaW5nL3NlYXJjaGluZyBkaWZmZXJlbmNlcwotICAgIGRlZiBmaW5kX2xpYnJhcnlfZmlsZShzZWxmLCBkaXJzLCBsaWIsIGRlYnVnPTApOgotICAgICAgICBzaG9ydGxpYiA9ICclcy5saWInICUgbGliCi0gICAgICAgIGxvbmdsaWIgPSAnbGliJXMubGliJyAlIGxpYiAgICAjIHRoaXMgZm9ybSB2ZXJ5IHJhcmUKLQotICAgICAgICAjIGdldCBFTVgncyBkZWZhdWx0IGxpYnJhcnkgZGlyZWN0b3J5IHNlYXJjaCBwYXRoCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVteF9kaXJzID0gb3MuZW52aXJvblsnTElCUkFSWV9QQVRIJ10uc3BsaXQoJzsnKQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICBlbXhfZGlycyA9IFtdCi0KLSAgICAgICAgZm9yIGRpciBpbiBkaXJzICsgZW14X2RpcnM6Ci0gICAgICAgICAgICBzaG9ydGxpYnAgPSBvcy5wYXRoLmpvaW4oZGlyLCBzaG9ydGxpYikKLSAgICAgICAgICAgIGxvbmdsaWJwID0gb3MucGF0aC5qb2luKGRpciwgbG9uZ2xpYikKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNob3J0bGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNob3J0bGlicAotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmV4aXN0cyhsb25nbGlicCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvbmdsaWJwCi0KLSAgICAgICAgIyBPb3BzLCBkaWRuJ3QgZmluZCBpdCBpbiAqYW55KiBvZiAnZGlycycKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotIyBjbGFzcyBFTVhDQ29tcGlsZXIKLQotCi0jIEJlY2F1c2UgdGhlc2UgY29tcGlsZXJzIGFyZW4ndCBjb25maWd1cmVkIGluIFB5dGhvbidzIHB5Y29uZmlnLmggZmlsZSBieQotIyBkZWZhdWx0LCB3ZSBzaG91bGQgYXQgbGVhc3Qgd2FybiB0aGUgdXNlciBpZiBoZSBpcyB1c2luZyBhIHVubW9kaWZpZWQKLSMgdmVyc2lvbi4KLQotQ09ORklHX0hfT0sgPSAib2siCi1DT05GSUdfSF9OT1RPSyA9ICJub3Qgb2siCi1DT05GSUdfSF9VTkNFUlRBSU4gPSAidW5jZXJ0YWluIgotCi1kZWYgY2hlY2tfY29uZmlnX2goKToKLQotICAgICIiIkNoZWNrIGlmIHRoZSBjdXJyZW50IFB5dGhvbiBpbnN0YWxsYXRpb24gKHNwZWNpZmljYWxseSwgcHljb25maWcuaCkKLSAgICBhcHBlYXJzIGFtZW5hYmxlIHRvIGJ1aWxkaW5nIGV4dGVuc2lvbnMgd2l0aCBHQ0MuICBSZXR1cm5zIGEgdHVwbGUKLSAgICAoc3RhdHVzLCBkZXRhaWxzKSwgd2hlcmUgJ3N0YXR1cycgaXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgY29uc3RhbnRzOgotICAgICAgQ09ORklHX0hfT0sKLSAgICAgICAgYWxsIGlzIHdlbGwsIGdvIGFoZWFkIGFuZCBjb21waWxlCi0gICAgICBDT05GSUdfSF9OT1RPSwotICAgICAgICBkb2Vzbid0IGxvb2sgZ29vZAotICAgICAgQ09ORklHX0hfVU5DRVJUQUlOCi0gICAgICAgIG5vdCBzdXJlIC0tIHVuYWJsZSB0byByZWFkIHB5Y29uZmlnLmgKLSAgICAnZGV0YWlscycgaXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcgZXhwbGFpbmluZyB0aGUgc2l0dWF0aW9uLgotCi0gICAgTm90ZSB0aGVyZSBhcmUgdHdvIHdheXMgdG8gY29uY2x1ZGUgIk9LIjogZWl0aGVyICdzeXMudmVyc2lvbicgY29udGFpbnMKLSAgICB0aGUgc3RyaW5nICJHQ0MiIChpbXBseWluZyB0aGF0IHRoaXMgUHl0aG9uIHdhcyBidWlsdCB3aXRoIEdDQyksIG9yIHRoZQotICAgIGluc3RhbGxlZCAicHljb25maWcuaCIgY29udGFpbnMgdGhlIHN0cmluZyAiX19HTlVDX18iLgotICAgICIiIgotCi0gICAgIyBYWFggc2luY2UgdGhpcyBmdW5jdGlvbiBhbHNvIGNoZWNrcyBzeXMudmVyc2lvbiwgaXQncyBub3Qgc3RyaWN0bHkgYQotICAgICMgInB5Y29uZmlnLmgiIGNoZWNrIC0tIHNob3VsZCBwcm9iYWJseSBiZSByZW5hbWVkLi4uCi0KLSAgICBmcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnCi0gICAgIyBpZiBzeXMudmVyc2lvbiBjb250YWlucyBHQ0MgdGhlbiBweXRob24gd2FzIGNvbXBpbGVkIHdpdGgKLSAgICAjIEdDQywgYW5kIHRoZSBweWNvbmZpZy5oIGZpbGUgc2hvdWxkIGJlIE9LCi0gICAgaWYgc3lzLnZlcnNpb24uZmluZCgiR0NDIikgPj0gMDoKLSAgICAgICAgcmV0dXJuIChDT05GSUdfSF9PSywgInN5cy52ZXJzaW9uIG1lbnRpb25zICdHQ0MnIikKLQotICAgIGZuID0gc3lzY29uZmlnLmdldF9jb25maWdfaF9maWxlbmFtZSgpCi0gICAgdHJ5OgotICAgICAgICAjIEl0IHdvdWxkIHByb2JhYmx5IGJldHRlciB0byByZWFkIHNpbmdsZSBsaW5lcyB0byBzZWFyY2guCi0gICAgICAgICMgQnV0IHdlIGRvIHRoaXMgb25seSBvbmNlLCBhbmQgaXQgaXMgZmFzdCBlbm91Z2gKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHMgPSBmLnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCi0KLSAgICBleGNlcHQgSU9FcnJvciBhcyBleGM6Ci0gICAgICAgICMgaWYgd2UgY2FuJ3QgcmVhZCB0aGlzIGZpbGUsIHdlIGNhbm5vdCBzYXkgaXQgaXMgd3JvbmcKLSAgICAgICAgIyB0aGUgY29tcGlsZXIgd2lsbCBjb21wbGFpbiBsYXRlciBhYm91dCB0aGlzIGZpbGUgYXMgbWlzc2luZwotICAgICAgICByZXR1cm4gKENPTkZJR19IX1VOQ0VSVEFJTiwKLSAgICAgICAgICAgICAgICAiY291bGRuJ3QgcmVhZCAnJXMnOiAlcyIgJSAoZm4sIGV4Yy5zdHJlcnJvcikpCi0KLSAgICBlbHNlOgotICAgICAgICAjICJweWNvbmZpZy5oIiBjb250YWlucyBhbiAiI2lmZGVmIF9fR05VQ19fIiBvciBzb21ldGhpbmcgc2ltaWxhcgotICAgICAgICBpZiBzLmZpbmQoIl9fR05VQ19fIikgPj0gMDoKLSAgICAgICAgICAgIHJldHVybiAoQ09ORklHX0hfT0ssICInJXMnIG1lbnRpb25zICdfX0dOVUNfXyciICUgZm4pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gKENPTkZJR19IX05PVE9LLCAiJyVzJyBkb2VzIG5vdCBtZW50aW9uICdfX0dOVUNfXyciICUgZm4pCi0KLQotZGVmIGdldF92ZXJzaW9ucygpOgotICAgICIiIiBUcnkgdG8gZmluZCBvdXQgdGhlIHZlcnNpb25zIG9mIGdjYyBhbmQgbGQuCi0gICAgICAgIElmIG5vdCBwb3NzaWJsZSBpdCByZXR1cm5zIE5vbmUgZm9yIGl0LgotICAgICIiIgotICAgIGZyb20gZGlzdHV0aWxzLnZlcnNpb24gaW1wb3J0IFN0cmljdFZlcnNpb24KLSAgICBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCi0gICAgaW1wb3J0IHJlCi0KLSAgICBnY2NfZXhlID0gZmluZF9leGVjdXRhYmxlKCdnY2MnKQotICAgIGlmIGdjY19leGU6Ci0gICAgICAgIG91dCA9IG9zLnBvcGVuKGdjY19leGUgKyAnIC1kdW1wdmVyc2lvbicsJ3InKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRfc3RyaW5nID0gb3V0LnJlYWQoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3V0LmNsb3NlKCkKLSAgICAgICAgcmVzdWx0ID0gcmUuc2VhcmNoKCcoXGQrXC5cZCtcLlxkKyknLCBvdXRfc3RyaW5nLCByZS5BU0NJSSkKLSAgICAgICAgaWYgcmVzdWx0OgotICAgICAgICAgICAgZ2NjX3ZlcnNpb24gPSBTdHJpY3RWZXJzaW9uKHJlc3VsdC5ncm91cCgxKSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgIGVsc2U6Ci0gICAgICAgIGdjY192ZXJzaW9uID0gTm9uZQotICAgICMgRU1YIGxkIGhhcyBubyB3YXkgb2YgcmVwb3J0aW5nIHZlcnNpb24gbnVtYmVyLCBhbmQgd2UgdXNlIEdDQwotICAgICMgYW55d2F5IC0gc28gd2UgY2FuIGxpbmsgT01GIERMTHMKLSAgICBsZF92ZXJzaW9uID0gTm9uZQotICAgIHJldHVybiAoZ2NjX3ZlcnNpb24sIGxkX3ZlcnNpb24pCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL2Vycm9ycy5weSBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CmluZGV4IGViMTNjOTguLjhiOTMwNTkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvZXJyb3JzLnB5CkBAIC0zNSw4ICszNSw4IEBACiAKIGNsYXNzIERpc3R1dGlsc0ZpbGVFcnJvciAoRGlzdHV0aWxzRXJyb3IpOgogICAgICIiIkFueSBwcm9ibGVtcyBpbiB0aGUgZmlsZXN5c3RlbTogZXhwZWN0ZWQgZmlsZSBub3QgZm91bmQsIGV0Yy4KLSAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIElPRXJyb3Igb3IKLSAgICBPU0Vycm9yIGNvdWxkIGJlIHJhaXNlZC4iIiIKKyAgICBUeXBpY2FsbHkgdGhpcyBpcyBmb3IgcHJvYmxlbXMgdGhhdCB3ZSBkZXRlY3QgYmVmb3JlIE9TRXJyb3IKKyAgICBjb3VsZCBiZSByYWlzZWQuIiIiCiAgICAgcGFzcwogCiBjbGFzcyBEaXN0dXRpbHNPcHRpb25FcnJvciAoRGlzdHV0aWxzRXJyb3IpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy9maWxlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQppbmRleCA5YmRkMTRlLi5iM2ZlZTM1IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL2ZpbGVfdXRpbC5weQpAQCAtMjcsMjYgKzI3LDI2IEBACiAgICAgdHJ5OgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmc3JjID0gb3BlbihzcmMsICdyYicpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKCJjb3VsZCBub3Qgb3BlbiAnJXMnOiAlcyIgJSAoc3JjLCBlLnN0cmVycm9yKSkKIAogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhkc3QpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhkc3QpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRmlsZUVycm9yKAogICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZGVsZXRlICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZkc3QgPSBvcGVuKGRzdCwgJ3diJykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSAnJXMnOiAlcyIgJSAoZHN0LCBlLnN0cmVycm9yKSkKIAogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGJ1ZiA9IGZzcmMucmVhZChidWZmZXJfc2l6ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZWFkIGZyb20gJyVzJzogJXMiICUgKHNyYywgZS5zdHJlcnJvcikpCiAKQEAgLTU1LDcgKzU1LDcgQEAKIAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZkc3Qud3JpdGUoYnVmKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0ZpbGVFcnJvcigKICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHdyaXRlIHRvICclcyc6ICVzIiAlIChkc3QsIGUuc3RyZXJyb3IpKQogICAgIGZpbmFsbHk6CkBAIC04MCw3ICs4MCw4IEBACiAgICAgKG9zLnN5bWxpbmspIGluc3RlYWQgb2YgY29weWluZzogc2V0IGl0IHRvICJoYXJkIiBvciAic3ltIjsgaWYgaXQgaXMKICAgICBOb25lICh0aGUgZGVmYXVsdCksIGZpbGVzIGFyZSBjb3BpZWQuICBEb24ndCBzZXQgJ2xpbmsnIG9uIHN5c3RlbXMgdGhhdAogICAgIGRvbid0IHN1cHBvcnQgaXQ6ICdjb3B5X2ZpbGUoKScgZG9lc24ndCBjaGVjayBpZiBoYXJkIG9yIHN5bWJvbGljCi0gICAgbGlua2luZyBpcyBhdmFpbGFibGUuCisgICAgbGlua2luZyBpcyBhdmFpbGFibGUuIElmIGhhcmRsaW5rIGZhaWxzLCBmYWxscyBiYWNrIHRvCisgICAgX2NvcHlfZmlsZV9jb250ZW50cygpLgogCiAgICAgVW5kZXIgTWFjIE9TLCB1c2VzIHRoZSBuYXRpdmUgZmlsZSBjb3B5IGZ1bmN0aW9uIGluIG1hY29zdG9vbHM7IG9uCiAgICAgb3RoZXIgc3lzdGVtcywgdXNlcyAnX2NvcHlfZmlsZV9jb250ZW50cygpJyB0byBjb3B5IGZpbGUgY29udGVudHMuCkBAIC0xMzIsMjQgKzEzMywzMSBAQAogICAgICMgKFVuaXggb25seSwgb2YgY291cnNlLCBidXQgdGhhdCdzIHRoZSBjYWxsZXIncyByZXNwb25zaWJpbGl0eSkKICAgICBlbGlmIGxpbmsgPT0gJ2hhcmQnOgogICAgICAgICBpZiBub3QgKG9zLnBhdGguZXhpc3RzKGRzdCkgYW5kIG9zLnBhdGguc2FtZWZpbGUoc3JjLCBkc3QpKToKLSAgICAgICAgICAgIG9zLmxpbmsoc3JjLCBkc3QpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MubGluayhzcmMsIGRzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGRzdCwgMSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgSWYgaGFyZCBsaW5raW5nIGZhaWxzLCBmYWxsIGJhY2sgb24gY29weWluZyBmaWxlCisgICAgICAgICAgICAgICAgIyAoc29tZSBzcGVjaWFsIGZpbGVzeXN0ZW1zIGRvbid0IHN1cHBvcnQgaGFyZCBsaW5raW5nCisgICAgICAgICAgICAgICAgIyAgZXZlbiB1bmRlciBVbml4LCBzZWUgaXNzdWUgIzg4NzYpLgorICAgICAgICAgICAgICAgIHBhc3MKICAgICBlbGlmIGxpbmsgPT0gJ3N5bSc6CiAgICAgICAgIGlmIG5vdCAob3MucGF0aC5leGlzdHMoZHN0KSBhbmQgb3MucGF0aC5zYW1lZmlsZShzcmMsIGRzdCkpOgogICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRzdCkKKyAgICAgICAgICAgIHJldHVybiAoZHN0LCAxKQogCiAgICAgIyBPdGhlcndpc2UgKG5vbi1NYWMsIG5vdCBsaW5raW5nKSwgY29weSB0aGUgZmlsZSBjb250ZW50cyBhbmQKICAgICAjIChvcHRpb25hbGx5KSBjb3B5IHRoZSB0aW1lcyBhbmQgbW9kZS4KLSAgICBlbHNlOgotICAgICAgICBfY29weV9maWxlX2NvbnRlbnRzKHNyYywgZHN0KQotICAgICAgICBpZiBwcmVzZXJ2ZV9tb2RlIG9yIHByZXNlcnZlX3RpbWVzOgotICAgICAgICAgICAgc3QgPSBvcy5zdGF0KHNyYykKKyAgICBfY29weV9maWxlX2NvbnRlbnRzKHNyYywgZHN0KQorICAgIGlmIHByZXNlcnZlX21vZGUgb3IgcHJlc2VydmVfdGltZXM6CisgICAgICAgIHN0ID0gb3Muc3RhdChzcmMpCiAKLSAgICAgICAgICAgICMgQWNjb3JkaW5nIHRvIERhdmlkIEFzY2hlciA8ZGFAc2tpLm9yZz4sIHV0aW1lKCkgc2hvdWxkIGJlIGRvbmUKLSAgICAgICAgICAgICMgYmVmb3JlIGNobW9kKCkgKGF0IGxlYXN0IHVuZGVyIE5UKS4KLSAgICAgICAgICAgIGlmIHByZXNlcnZlX3RpbWVzOgotICAgICAgICAgICAgICAgIG9zLnV0aW1lKGRzdCwgKHN0W1NUX0FUSU1FXSwgc3RbU1RfTVRJTUVdKSkKLSAgICAgICAgICAgIGlmIHByZXNlcnZlX21vZGU6Ci0gICAgICAgICAgICAgICAgb3MuY2htb2QoZHN0LCBTX0lNT0RFKHN0W1NUX01PREVdKSkKKyAgICAgICAgIyBBY2NvcmRpbmcgdG8gRGF2aWQgQXNjaGVyIDxkYUBza2kub3JnPiwgdXRpbWUoKSBzaG91bGQgYmUgZG9uZQorICAgICAgICAjIGJlZm9yZSBjaG1vZCgpIChhdCBsZWFzdCB1bmRlciBOVCkuCisgICAgICAgIGlmIHByZXNlcnZlX3RpbWVzOgorICAgICAgICAgICAgb3MudXRpbWUoZHN0LCAoc3RbU1RfQVRJTUVdLCBzdFtTVF9NVElNRV0pKQorICAgICAgICBpZiBwcmVzZXJ2ZV9tb2RlOgorICAgICAgICAgICAgb3MuY2htb2QoZHN0LCBTX0lNT0RFKHN0W1NUX01PREVdKSkKIAogICAgIHJldHVybiAoZHN0LCAxKQogCkBAIC0xOTMsOCArMjAxLDggQEAKICAgICBjb3B5X2l0ID0gRmFsc2UKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShzcmMsIGRzdCkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgZToKLSAgICAgICAgKG51bSwgbXNnKSA9IGUKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAobnVtLCBtc2cpID0gZS5hcmdzCiAgICAgICAgIGlmIG51bSA9PSBlcnJuby5FWERFVjoKICAgICAgICAgICAgIGNvcHlfaXQgPSBUcnVlCiAgICAgICAgIGVsc2U6CkBAIC0yMDUsMTEgKzIxMywxMSBAQAogICAgICAgICBjb3B5X2ZpbGUoc3JjLCBkc3QsIHZlcmJvc2U9dmVyYm9zZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MudW5saW5rKHNyYykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAobnVtLCBtc2cpID0gZQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgKG51bSwgbXNnKSA9IGUuYXJncwogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhkc3QpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNGaWxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgbW92ZSAnJXMnIHRvICclcycgYnkgY29weS9kZWxldGU6ICIKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weSBiL0xpYi9kaXN0dXRpbHMvbXN2Yzljb21waWxlci5weQppbmRleCBiM2Y2Y2UxLi5hNWE1MDEwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL21zdmM5Y29tcGlsZXIucHkKKysrIGIvTGliL2Rpc3R1dGlscy9tc3ZjOWNvbXBpbGVyLnB5CkBAIC00MTMsNyArNDEzLDcgQEAKICAgICAgICAgc2VsZi5sZGZsYWdzX3NoYXJlZCA9IFsnL0RMTCcsICcvbm9sb2dvJywgJy9JTkNSRU1FTlRBTDpOTyddCiAgICAgICAgIGlmIHNlbGYuX192ZXJzaW9uID49IDc6CiAgICAgICAgICAgICBzZWxmLmxkZmxhZ3Nfc2hhcmVkX2RlYnVnID0gWwotICAgICAgICAgICAgICAgICcvRExMJywgJy9ub2xvZ28nLCAnL0lOQ1JFTUVOVEFMOm5vJywgJy9ERUJVRycsICcvcGRiOk5vbmUnCisgICAgICAgICAgICAgICAgJy9ETEwnLCAnL25vbG9nbycsICcvSU5DUkVNRU5UQUw6bm8nLCAnL0RFQlVHJwogICAgICAgICAgICAgICAgIF0KICAgICAgICAgc2VsZi5sZGZsYWdzX3N0YXRpYyA9IFsgJy9ub2xvZ28nXQogCkBAIC03MjksNyArNzI5LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gbWFuaWZlc3RfZmlsZQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBtYW5pZmVzdF9mLmNsb3NlKCkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgIyAtLSBNaXNjZWxsYW5lb3VzIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkgYi9MaWIvZGlzdHV0aWxzL3NwYXduLnB5CmluZGV4IGY2NmZmOTMuLjIyZTg3ZTggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvc3Bhd24ucHkKKysrIGIvTGliL2Rpc3R1dGlscy9zcGF3bi5weQpAQCAtMzYsOCArMzYsNiBAQAogICAgICAgICBfc3Bhd25fcG9zaXgoY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1kcnlfcnVuKQogICAgIGVsaWYgb3MubmFtZSA9PSAnbnQnOgogICAgICAgICBfc3Bhd25fbnQoY21kLCBzZWFyY2hfcGF0aCwgZHJ5X3J1bj1kcnlfcnVuKQotICAgIGVsaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgX3NwYXduX29zMihjbWQsIHNlYXJjaF9wYXRoLCBkcnlfcnVuPWRyeV9ydW4pCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKICAgICAgICAgICAgICAgImRvbid0IGtub3cgaG93IHRvIHNwYXduIHByb2dyYW1zIG9uIHBsYXRmb3JtICclcyciICUgb3MubmFtZSkKQEAgLTgyLDMwICs4MCw2IEBACiAgICAgICAgICAgICByYWlzZSBEaXN0dXRpbHNFeGVjRXJyb3IoCiAgICAgICAgICAgICAgICAgICAiY29tbWFuZCAlciBmYWlsZWQgd2l0aCBleGl0IHN0YXR1cyAlZCIgJSAoY21kLCByYykpCiAKLWRlZiBfc3Bhd25fb3MyKGNtZCwgc2VhcmNoX3BhdGg9MSwgdmVyYm9zZT0wLCBkcnlfcnVuPTApOgotICAgIGV4ZWN1dGFibGUgPSBjbWRbMF0KLSAgICBpZiBzZWFyY2hfcGF0aDoKLSAgICAgICAgIyBlaXRoZXIgd2UgZmluZCBvbmUgb3IgaXQgc3RheXMgdGhlIHNhbWUKLSAgICAgICAgZXhlY3V0YWJsZSA9IGZpbmRfZXhlY3V0YWJsZShleGVjdXRhYmxlKSBvciBleGVjdXRhYmxlCi0gICAgbG9nLmluZm8oJyAnLmpvaW4oW2V4ZWN1dGFibGVdICsgY21kWzE6XSkpCi0gICAgaWYgbm90IGRyeV9ydW46Ci0gICAgICAgICMgc3Bhd252IGZvciBPUy8yIEVNWCByZXF1aXJlcyBhIGZ1bGwgcGF0aCB0byB0aGUgLmV4ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByYyA9IG9zLnNwYXdudihvcy5QX1dBSVQsIGV4ZWN1dGFibGUsIGNtZCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgIyB0aGlzIHNlZW1zIHRvIGhhcHBlbiB3aGVuIHRoZSBjb21tYW5kIGlzbid0IGZvdW5kCi0gICAgICAgICAgICBpZiBub3QgREVCVUc6Ci0gICAgICAgICAgICAgICAgY21kID0gZXhlY3V0YWJsZQotICAgICAgICAgICAgcmFpc2UgRGlzdHV0aWxzRXhlY0Vycm9yKAotICAgICAgICAgICAgICAgICAgImNvbW1hbmQgJXIgZmFpbGVkOiAlcyIgJSAoY21kLCBleGMuYXJnc1stMV0pKQotICAgICAgICBpZiByYyAhPSAwOgotICAgICAgICAgICAgIyBhbmQgdGhpcyByZWZsZWN0cyB0aGUgY29tbWFuZCBydW5uaW5nIGJ1dCBmYWlsaW5nCi0gICAgICAgICAgICBpZiBub3QgREVCVUc6Ci0gICAgICAgICAgICAgICAgY21kID0gZXhlY3V0YWJsZQotICAgICAgICAgICAgbG9nLmRlYnVnKCJjb21tYW5kICVyIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWQsIHJjKSkKLSAgICAgICAgICAgIHJhaXNlIERpc3R1dGlsc0V4ZWNFcnJvcigKLSAgICAgICAgICAgICAgICAgICJjb21tYW5kICVyIGZhaWxlZCB3aXRoIGV4aXQgc3RhdHVzICVkIiAlIChjbWQsIHJjKSkKLQogaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgIGZyb20gZGlzdHV0aWxzIGltcG9ydCBzeXNjb25maWcKICAgICBfY2ZnX3RhcmdldCA9IE5vbmUKQEAgLTIwNyw3ICsxODEsNyBAQAogICAgIHBhdGhzID0gcGF0aC5zcGxpdChvcy5wYXRoc2VwKQogICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZXhlY3V0YWJsZSkKIAotICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBvcy5uYW1lID09ICdvczInKSBhbmQgKGV4dCAhPSAnLmV4ZScpOgorICAgIGlmIChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJykgYW5kIChleHQgIT0gJy5leGUnKToKICAgICAgICAgZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUgKyAnLmV4ZScKIAogICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShleGVjdXRhYmxlKToKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvc3lzY29uZmlnLnB5IGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKaW5kZXggYjk0Nzk4OC4uYTE0NTJmZSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy9zeXNjb25maWcucHkKQEAgLTExNCw4ICsxMTQsNiBAQAogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgImluY2x1ZGUiLCBweXRob25fZGlyKQogICAgIGVsaWYgb3MubmFtZSA9PSAibnQiOgogICAgICAgICByZXR1cm4gb3MucGF0aC5qb2luKHByZWZpeCwgImluY2x1ZGUiKQotICAgIGVsaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJJbmNsdWRlIikKICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKAogICAgICAgICAgICAgIkkgZG9uJ3Qga25vdyB3aGVyZSBQeXRob24gaW5zdGFsbHMgaXRzIEMgaGVhZGVyIGZpbGVzICIKQEAgLTE1MywxNCArMTUxLDYgQEAKICAgICAgICAgaWYgc3RhbmRhcmRfbGliOgogICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYgZ2V0X3B5dGhvbl92ZXJzaW9uKCkgPCAiMi4yIjoKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJlZml4Ci0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKQotICAgIGVsaWYgb3MubmFtZSA9PSAib3MyIjoKLSAgICAgICAgaWYgc3RhbmRhcmRfbGliOgotICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiKQotICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihwcmVmaXgsICJMaWIiLCAic2l0ZS1wYWNrYWdlcyIpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcigKQEAgLTE4Niw3ICsxNzYsOCBAQAogICAgICAgICAgICAgIyB2ZXJzaW9uIGFuZCBidWlsZCB0b29scyBtYXkgbm90IHN1cHBvcnQgdGhlIHNhbWUgc2V0CiAgICAgICAgICAgICAjIG9mIENQVSBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGRzLgogICAgICAgICAgICAgZ2xvYmFsIF9jb25maWdfdmFycwotICAgICAgICAgICAgaWYgbm90IF9jb25maWdfdmFycy5nZXQoJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJywgJycpOgorICAgICAgICAgICAgIyBVc2UgZ2V0X2NvbmZpZ192YXIoKSB0byBlbnN1cmUgX2NvbmZpZ192YXJzIGlzIGluaXRpYWxpemVkLgorICAgICAgICAgICAgaWYgbm90IGdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpOgogICAgICAgICAgICAgICAgIGltcG9ydCBfb3N4X3N1cHBvcnQKICAgICAgICAgICAgICAgICBfb3N4X3N1cHBvcnQuY3VzdG9taXplX2NvbXBpbGVyKF9jb25maWdfdmFycykKICAgICAgICAgICAgICAgICBfY29uZmlnX3ZhcnNbJ0NVU1RPTUlaRURfT1NYX0NPTVBJTEVSJ10gPSAnVHJ1ZScKQEAgLTI1MCwxMiArMjQxLDggQEAKICAgICAgICAgICAgIGluY19kaXIgPSBfc3lzX2hvbWUgb3IgcHJvamVjdF9iYXNlCiAgICAgZWxzZToKICAgICAgICAgaW5jX2RpciA9IGdldF9weXRob25faW5jKHBsYXRfc3BlY2lmaWM9MSkKLSAgICBpZiBnZXRfcHl0aG9uX3ZlcnNpb24oKSA8ICcyLjInOgotICAgICAgICBjb25maWdfaCA9ICdjb25maWcuaCcKLSAgICBlbHNlOgotICAgICAgICAjIFRoZSBuYW1lIG9mIHRoZSBjb25maWcuaCBmaWxlIGNoYW5nZWQgaW4gMi4yCi0gICAgICAgIGNvbmZpZ19oID0gJ3B5Y29uZmlnLmgnCi0gICAgcmV0dXJuIG9zLnBhdGguam9pbihpbmNfZGlyLCBjb25maWdfaCkKKworICAgIHJldHVybiBvcy5wYXRoLmpvaW4oaW5jX2RpciwgJ3B5Y29uZmlnLmgnKQogCiAKIGRlZiBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKToKQEAgLTQ0Miw3ICs0MjksNyBAQAogICAgIHRyeToKICAgICAgICAgZmlsZW5hbWUgPSBnZXRfbWFrZWZpbGVfZmlsZW5hbWUoKQogICAgICAgICBwYXJzZV9tYWtlZmlsZShmaWxlbmFtZSwgZykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBteV9tc2cgPSAiaW52YWxpZCBQeXRob24gaW5zdGFsbGF0aW9uOiB1bmFibGUgdG8gb3BlbiAlcyIgJSBmaWxlbmFtZQogICAgICAgICBpZiBoYXNhdHRyKG1zZywgInN0cmVycm9yIik6CiAgICAgICAgICAgICBteV9tc2cgPSBteV9tc2cgKyAiICglcykiICUgbXNnLnN0cmVycm9yCkBAIC00NTQsNyArNDQxLDcgQEAKICAgICAgICAgZmlsZW5hbWUgPSBnZXRfY29uZmlnX2hfZmlsZW5hbWUoKQogICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZpbGU6CiAgICAgICAgICAgICBwYXJzZV9jb25maWdfaChmaWxlLCBnKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIG15X21zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIGZpbGVuYW1lCiAgICAgICAgIGlmIGhhc2F0dHIobXNnLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG15X21zZyA9IG15X21zZyArICIgKCVzKSIgJSBtc2cuc3RyZXJyb3IKQEAgLTQ2NywxNyArNDU0LDYgQEAKICAgICBpZiBweXRob25fYnVpbGQ6CiAgICAgICAgIGdbJ0xEU0hBUkVEJ10gPSBnWydCTERTSEFSRUQnXQogCi0gICAgZWxpZiBnZXRfcHl0aG9uX3ZlcnNpb24oKSA8ICcyLjEnOgotICAgICAgICAjIFRoZSBmb2xsb3dpbmcgdHdvIGJyYW5jaGVzIGFyZSBmb3IgMS41LjIgY29tcGF0aWJpbGl0eS4KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdhaXg0JzogICAgICAgICAgIyB3aGF0IGFib3V0IEFJWCAzLnggPwotICAgICAgICAgICAgIyBMaW5rZXIgc2NyaXB0IGlzIGluIHRoZSBjb25maWcgZGlyZWN0b3J5LCBub3QgaW4gTW9kdWxlcyBhcyB0aGUKLSAgICAgICAgICAgICMgTWFrZWZpbGUgc2F5cy4KLSAgICAgICAgICAgIHB5dGhvbl9saWIgPSBnZXRfcHl0aG9uX2xpYihzdGFuZGFyZF9saWI9MSkKLSAgICAgICAgICAgIGxkX3NvX2FpeCA9IG9zLnBhdGguam9pbihweXRob25fbGliLCAnY29uZmlnJywgJ2xkX3NvX2FpeCcpCi0gICAgICAgICAgICBweXRob25fZXhwID0gb3MucGF0aC5qb2luKHB5dGhvbl9saWIsICdjb25maWcnLCAncHl0aG9uLmV4cCcpCi0KLSAgICAgICAgICAgIGdbJ0xEU0hBUkVEJ10gPSAiJXMgJXMgLWJJOiVzIiAlIChsZF9zb19haXgsIGdbJ0NDJ10sIHB5dGhvbl9leHApCi0KICAgICBnbG9iYWwgX2NvbmZpZ192YXJzCiAgICAgX2NvbmZpZ192YXJzID0gZwogCkBAIC00OTIsNyArNDY4LDYgQEAKICAgICAjIFhYWCBobW1tLi4gYSBub3JtYWwgaW5zdGFsbCBwdXRzIGluY2x1ZGUgZmlsZXMgaGVyZQogICAgIGdbJ0lOQ0xVREVQWSddID0gZ2V0X3B5dGhvbl9pbmMocGxhdF9zcGVjaWZpYz0wKQogCi0gICAgZ1snU08nXSA9ICcucHlkJwogICAgIGdbJ0VYVF9TVUZGSVgnXSA9ICcucHlkJwogICAgIGdbJ0VYRSddID0gIi5leGUiCiAgICAgZ1snVkVSU0lPTiddID0gZ2V0X3B5dGhvbl92ZXJzaW9uKCkucmVwbGFjZSgiLiIsICIiKQpAQCAtNTAyLDI0ICs0NzcsNiBAQAogICAgIF9jb25maWdfdmFycyA9IGcKIAogCi1kZWYgX2luaXRfb3MyKCk6Ci0gICAgIiIiSW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGFzIGFwcHJvcHJpYXRlIGZvciBPUy8yIiIiCi0gICAgZyA9IHt9Ci0gICAgIyBzZXQgYmFzaWMgaW5zdGFsbCBkaXJlY3RvcmllcwotICAgIGdbJ0xJQkRFU1QnXSA9IGdldF9weXRob25fbGliKHBsYXRfc3BlY2lmaWM9MCwgc3RhbmRhcmRfbGliPTEpCi0gICAgZ1snQklOTElCREVTVCddID0gZ2V0X3B5dGhvbl9saWIocGxhdF9zcGVjaWZpYz0xLCBzdGFuZGFyZF9saWI9MSkKLQotICAgICMgWFhYIGhtbW0uLiBhIG5vcm1hbCBpbnN0YWxsIHB1dHMgaW5jbHVkZSBmaWxlcyBoZXJlCi0gICAgZ1snSU5DTFVERVBZJ10gPSBnZXRfcHl0aG9uX2luYyhwbGF0X3NwZWNpZmljPTApCi0KLSAgICBnWydTTyddID0gJy5weWQnCi0gICAgZ1snRVhUX1NVRkZJWCddID0gJy5weWQnCi0gICAgZ1snRVhFJ10gPSAiLmV4ZSIKLQotICAgIGdsb2JhbCBfY29uZmlnX3ZhcnMKLSAgICBfY29uZmlnX3ZhcnMgPSBnCi0KLQogZGVmIGdldF9jb25maWdfdmFycygqYXJncyk6CiAgICAgIiIiV2l0aCBubyBhcmd1bWVudHMsIHJldHVybiBhIGRpY3Rpb25hcnkgb2YgYWxsIGNvbmZpZ3VyYXRpb24KICAgICB2YXJpYWJsZXMgcmVsZXZhbnQgZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLiAgR2VuZXJhbGx5IHRoaXMgaW5jbHVkZXMKQEAgLTU0NCw2ICs1MDEsMTEgQEAKICAgICAgICAgX2NvbmZpZ192YXJzWydwcmVmaXgnXSA9IFBSRUZJWAogICAgICAgICBfY29uZmlnX3ZhcnNbJ2V4ZWNfcHJlZml4J10gPSBFWEVDX1BSRUZJWAogCisgICAgICAgICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHNlZSBpc3N1ZTE5NTU1CisgICAgICAgIFNPID0gX2NvbmZpZ192YXJzLmdldCgnRVhUX1NVRkZJWCcpCisgICAgICAgIGlmIFNPIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgX2NvbmZpZ192YXJzWydTTyddID0gU08KKwogICAgICAgICAjIEFsd2F5cyBjb252ZXJ0IHNyY2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCiAgICAgICAgIHNyY2RpciA9IF9jb25maWdfdmFycy5nZXQoJ3NyY2RpcicsIHByb2plY3RfYmFzZSkKICAgICAgICAgaWYgb3MubmFtZSA9PSAncG9zaXgnOgpAQCAtNTk0LDQgKzU1Niw3IEBACiAgICAgcmV0dXJuZWQgYnkgJ2dldF9jb25maWdfdmFycygpJy4gIEVxdWl2YWxlbnQgdG8KICAgICBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKICAgICAiIiIKKyAgICBpZiBuYW1lID09ICdTTyc6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKCdTTyBpcyBkZXByZWNhdGVkLCB1c2UgRVhUX1NVRkZJWCcsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICByZXR1cm4gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2FyY2hpdmVfdXRpbC5weQppbmRleCBkM2ZiMjRhLi4yZDcyYWY0IDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYXJjaGl2ZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9hcmNoaXZlX3V0aWwucHkKQEAgLTE2LDYgKzE2LDEzIEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2hlY2tfd2FybmluZ3MsIHJ1bl91bml0dGVzdCwgcGF0Y2gKIAogdHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCisKK3RyeToKICAgICBpbXBvcnQgemlwZmlsZQogICAgIFpJUF9TVVBQT1JUID0gVHJ1ZQogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtNzcsNyArODQsNyBAQAogCiAgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICB1bml0dGVzdC5za2lwVW5sZXNzKHNwbGl0ZHJpdmUodG1wZGlyKVswXSA9PSBzcGxpdGRyaXZlKHRtcGRpcjIpWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNvdXJjZSBhbmQgdGFyZ2V0IHNob3VsZCBiZSBvbiBzYW1lIGRyaXZlIikKIAogICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgdGFyZ2V0X25hbWUpCiAKQEAgLTI3NSw2ICsyODIsNTggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRlbCBBUkNISVZFX0ZPUk1BVFNbJ3h4eCddCiAKKyAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmVfb3duZXJfZ3JvdXAoc2VsZik6CisgICAgICAgICMgdGVzdGluZyBtYWtlX2FyY2hpdmUgd2l0aCBvd25lciBhbmQgZ3JvdXAsIHdpdGggdmFyaW91cyBjb21iaW5hdGlvbnMKKyAgICAgICAgIyB0aGlzIHdvcmtzIGV2ZW4gaWYgdGhlcmUncyBub3QgZ2lkL3VpZCBzdXBwb3J0CisgICAgICAgIGlmIFVJRF9HSURfU1VQUE9SVDoKKyAgICAgICAgICAgIGdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZ3JvdXAgPSBvd25lciA9ICdyb290JworCisgICAgICAgIGJhc2VfZGlyLCByb290X2RpciwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSAsICdhcmNoaXZlJykKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2Rpciwgb3duZXI9b3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisKKyAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPSdramhramhramcnLCBncm91cD0nb2lob2hvaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWkxJQl9TVVBQT1JULCAiUmVxdWlyZXMgemxpYiIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoVUlEX0dJRF9TVVBQT1JULCAiUmVxdWlyZXMgZ3JwIGFuZCBwd2Qgc3VwcG9ydCIpCisgICAgZGVmIHRlc3RfdGFyZmlsZV9yb290X293bmVyKHNlbGYpOgorICAgICAgICB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgb3MuY2hkaXIodG1wZGlyKQorICAgICAgICBncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQorICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBhcmNoaXZlX25hbWUgPSBtYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGFyY2hpdmVfbmFtZSkpCisKKyAgICAgICAgIyBub3cgY2hlY2tzIHRoZSByaWdodHMKKyAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLmdpZCwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQorCiBkZWYgdGVzdF9zdWl0ZSgpOgogICAgIHJldHVybiB1bml0dGVzdC5tYWtlU3VpdGUoQXJjaGl2ZVV0aWxUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X2R1bWIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weQppbmRleCAwYWQzMmQ0Li5jOGNjZGMyIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfZHVtYi5weQpAQCAtMSw3ICsxLDYgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5iZGlzdF9kdW1iLiIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKIGltcG9ydCBzeXMKIGltcG9ydCB6aXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTc1LDggKzc0LDYgQEAKICAgICAgICAgIyBzZWUgd2hhdCB3ZSBoYXZlCiAgICAgICAgIGRpc3RfY3JlYXRlZCA9IG9zLmxpc3RkaXIob3MucGF0aC5qb2luKHBrZ19kaXIsICdkaXN0JykpCiAgICAgICAgIGJhc2UgPSAiJXMuJXMuemlwIiAlIChkaXN0LmdldF9mdWxsbmFtZSgpLCBjbWQucGxhdF9uYW1lKQotICAgICAgICBpZiBvcy5uYW1lID09ICdvczInOgotICAgICAgICAgICAgYmFzZSA9IGJhc2UucmVwbGFjZSgnOicsICctJykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpc3RfY3JlYXRlZCwgW2Jhc2VdKQogCkBAIC05MCw3ICs4Nyw3IEBACiAgICAgICAgIGNvbnRlbnRzID0gc29ydGVkKG9zLnBhdGguYmFzZW5hbWUoZm4pIGZvciBmbiBpbiBjb250ZW50cykKICAgICAgICAgd2FudGVkID0gWydmb28tMC4xLXB5JXMuJXMuZWdnLWluZm8nICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sICdmb28ucHknXQogICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICB3YW50ZWQuYXBwZW5kKCdmb28uJXMucHljJyAlIGltcC5nZXRfdGFnKCkpCisgICAgICAgICAgICB3YW50ZWQuYXBwZW5kKCdmb28uJXMucHljJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsIHNvcnRlZCh3YW50ZWQpKQogCiBkZWYgdGVzdF9zdWl0ZSgpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3JwbS5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9iZGlzdF9ycG0ucHkKaW5kZXggYmNiYjU2My4uMjVjMTRhYiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2JkaXN0X3JwbS5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYmRpc3RfcnBtLnB5CkBAIC0yNCw2ICsyNCw3IEBACiAiIiIKIAogY2xhc3MgQnVpbGRScG1UZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAorICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LkVudmlyb25HdWFyZCwKICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNTQsNiArNTUsNyBAQAogICAgIGRlZiB0ZXN0X3F1aWV0KHNlbGYpOgogICAgICAgICAjIGxldCdzIGNyZWF0ZSBhIHBhY2thZ2UKICAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIG9zLmVudmlyb25bJ0hPTUUnXSA9IHRtcF9kaXIgICAjIHRvIGNvbmZpbmUgZGlyICcucnBtZGInIGNyZWF0aW9uCiAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2ZvbycpCiAgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCiAgICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQpAQCAtOTYsNiArOTgsNyBAQAogICAgIGRlZiB0ZXN0X25vX29wdGltaXplX2ZsYWcoc2VsZik6CiAgICAgICAgICMgbGV0J3MgY3JlYXRlIGEgcGFja2FnZSB0aGF0IGJyYWtlcyBiZGlzdF9ycG0KICAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIG9zLmVudmlyb25bJ0hPTUUnXSA9IHRtcF9kaXIgICAjIHRvIGNvbmZpbmUgZGlyICcucnBtZGInIGNyZWF0aW9uCiAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2ZvbycpCiAgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCiAgICAgICAgIHNlbGYud3JpdGVfZmlsZSgocGtnX2RpciwgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkKaW5kZXggOTg1M2FiZC4uYjlmNDA3ZiAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5CkBAIC0zMSwxMiArMzEsMTEgQEAKICAgICAgICAgc2VsZi50bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zeXNfcGF0aCA9IHN5cy5wYXRoLCBzeXMucGF0aFs6XQogICAgICAgICBzeXMucGF0aC5hcHBlbmQoc2VsZi50bXBfZGlyKQotICAgICAgICBpZiBzeXMudmVyc2lvbiA+ICIyLjYiOgotICAgICAgICAgICAgaW1wb3J0IHNpdGUKLSAgICAgICAgICAgIHNlbGYub2xkX3VzZXJfYmFzZSA9IHNpdGUuVVNFUl9CQVNFCi0gICAgICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IHNlbGYubWtkdGVtcCgpCi0gICAgICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCBidWlsZF9leHQKLSAgICAgICAgICAgIGJ1aWxkX2V4dC5VU0VSX0JBU0UgPSBzaXRlLlVTRVJfQkFTRQorICAgICAgICBpbXBvcnQgc2l0ZQorICAgICAgICBzZWxmLm9sZF91c2VyX2Jhc2UgPSBzaXRlLlVTRVJfQkFTRQorICAgICAgICBzaXRlLlVTRVJfQkFTRSA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQgaW1wb3J0IGJ1aWxkX2V4dAorICAgICAgICBidWlsZF9leHQuVVNFUl9CQVNFID0gc2l0ZS5VU0VSX0JBU0UKIAogICAgIGRlZiB0ZXN0X2J1aWxkX2V4dChzZWxmKToKICAgICAgICAgZ2xvYmFsIEFMUkVBRFlfVEVTVEVECkBAIC04NCwxMSArODMsMTAgQEAKICAgICAgICAgc3VwcG9ydC51bmxvYWQoJ3h4JykKICAgICAgICAgc3lzLnBhdGggPSBzZWxmLnN5c19wYXRoWzBdCiAgICAgICAgIHN5cy5wYXRoWzpdID0gc2VsZi5zeXNfcGF0aFsxXQotICAgICAgICBpZiBzeXMudmVyc2lvbiA+ICIyLjYiOgotICAgICAgICAgICAgaW1wb3J0IHNpdGUKLSAgICAgICAgICAgIHNpdGUuVVNFUl9CQVNFID0gc2VsZi5vbGRfdXNlcl9iYXNlCi0gICAgICAgICAgICBmcm9tIGRpc3R1dGlscy5jb21tYW5kIGltcG9ydCBidWlsZF9leHQKLSAgICAgICAgICAgIGJ1aWxkX2V4dC5VU0VSX0JBU0UgPSBzZWxmLm9sZF91c2VyX2Jhc2UKKyAgICAgICAgaW1wb3J0IHNpdGUKKyAgICAgICAgc2l0ZS5VU0VSX0JBU0UgPSBzZWxmLm9sZF91c2VyX2Jhc2UKKyAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgYnVpbGRfZXh0CisgICAgICAgIGJ1aWxkX2V4dC5VU0VSX0JBU0UgPSBzZWxmLm9sZF91c2VyX2Jhc2UKICAgICAgICAgc3VwZXIoQnVpbGRFeHRUZXN0Q2FzZSwgc2VsZikudGVhckRvd24oKQogCiAgICAgZGVmIHRlc3Rfc29sYXJpc19lbmFibGVfc2hhcmVkKHNlbGYpOgpAQCAtNDQ0LDggKzQ0MiwxNiBAQAogCiAgICAgICAgICMgZ2V0IHRoZSBkZXBsb3ltZW50IHRhcmdldCB0aGF0IHRoZSBpbnRlcnByZXRlciB3YXMgYnVpbHQgd2l0aAogICAgICAgICB0YXJnZXQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpCi0gICAgICAgIHRhcmdldCA9IHR1cGxlKG1hcChpbnQsIHRhcmdldC5zcGxpdCgnLicpKSkKLSAgICAgICAgdGFyZ2V0ID0gJyUwMmQlMDFkMCcgJSB0YXJnZXQKKyAgICAgICAgdGFyZ2V0ID0gdHVwbGUobWFwKGludCwgdGFyZ2V0LnNwbGl0KCcuJylbMDoyXSkpCisgICAgICAgICMgZm9ybWF0IHRoZSB0YXJnZXQgdmFsdWUgYXMgZGVmaW5lZCBpbiB0aGUgQXBwbGUKKyAgICAgICAgIyBBdmFpbGFiaWxpdHkgTWFjcm9zLiAgV2UgY2FuJ3QgdXNlIHRoZSBtYWNybyBuYW1lcyBzaW5jZQorICAgICAgICAjIGF0IGxlYXN0IG9uZSB2YWx1ZSB3ZSB0ZXN0IHdpdGggd2lsbCBub3QgZXhpc3QgeWV0LgorICAgICAgICBpZiB0YXJnZXRbMV0gPCAxMDoKKyAgICAgICAgICAgICMgZm9yIDEwLjEgdGhyb3VnaCAxMC45LnggLT4gIjEwbjAiCisgICAgICAgICAgICB0YXJnZXQgPSAnJTAyZCUwMWQwJyAlIHRhcmdldAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBmb3IgMTAuMTAgYW5kIGJleW9uZCAtPiAiMTBubjAwIgorICAgICAgICAgICAgdGFyZ2V0ID0gJyUwMmQlMDJkMDAnICUgdGFyZ2V0CiAgICAgICAgIGRlcHRhcmdldF9leHQgPSBFeHRlbnNpb24oCiAgICAgICAgICAgICAnZGVwdGFyZ2V0JywKICAgICAgICAgICAgIFtkZXB0YXJnZXRfY10sCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfcHkucHkKaW5kZXggMmNlOWQ0NC4uYzhmNmI4OSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX3B5LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9weS5weQpAQCAtMiw3ICsyLDYgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9weSBpbXBvcnQgYnVpbGRfcHkKQEAgLTYzLDcgKzYyLDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMocHljYWNoZV9kaXIpKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcHljX2ZpbGVzID0gb3MubGlzdGRpcihweWNhY2hlX2RpcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIl9faW5pdF9fLiVzLnB5YyIgJSBpbXAuZ2V0X3RhZygpLCBweWNfZmlsZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJfX2luaXRfXy4lcy5weWMiICUgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHljX2ZpbGVzKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfcGFja2FnZV9kaXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1Z3MgIzE2Njg1OTYvIzE3MjA4OTcKQEAgLTEwMiw3ICsxMDIsOCBAQAogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIoY21kLmJ1aWxkX2xpYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZm91bmQpLCBbJ19fcHljYWNoZV9fJywgJ2JvaWxlZGVnZ3MucHknXSkKICAgICAgICAgZm91bmQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihjbWQuYnVpbGRfbGliLCAnX19weWNhY2hlX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgWydib2lsZWRlZ2dzLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ2JvaWxlZGVnZ3MuJXMucHljJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWddKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgJ2J5dGUtY29tcGlsZSBkaXNhYmxlZCcpCiAgICAgZGVmIHRlc3RfYnl0ZV9jb21waWxlX29wdGltaXplZChzZWxmKToKQEAgLTExOSw3ICsxMjAsOCBAQAogICAgICAgICBmb3VuZCA9IG9zLmxpc3RkaXIoY21kLmJ1aWxkX2xpYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZm91bmQpLCBbJ19fcHljYWNoZV9fJywgJ2JvaWxlZGVnZ3MucHknXSkKICAgICAgICAgZm91bmQgPSBvcy5saXN0ZGlyKG9zLnBhdGguam9pbihjbWQuYnVpbGRfbGliLCAnX19weWNhY2hlX18nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoZm91bmQpLCBbJ2JvaWxlZGVnZ3MuJXMucHlvJyAlIGltcC5nZXRfdGFnKCldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmb3VuZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgWydib2lsZWRlZ2dzLiVzLnB5bycgJSBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnXSkKIAogICAgIGRlZiB0ZXN0X2Rpcl9pbl9wYWNrYWdlX2RhdGEoc2VsZik6CiAgICAgICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NoZWNrLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NoZWNrLnB5CmluZGV4IDYwMWI2ODYuLjk1OWZhOTAgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jaGVjay5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY2hlY2sucHkKQEAgLTEsNCArMSw1IEBACiAiIiJUZXN0cyBmb3IgZGlzdHV0aWxzLmNvbW1hbmQuY2hlY2suIiIiCitpbXBvcnQgdGV4dHdyYXAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCkBAIC05Miw2ICs5MywzNiBAQAogICAgICAgICBjbWQgPSBzZWxmLl9ydW4obWV0YWRhdGEsIHN0cmljdD0xLCByZXN0cnVjdHVyZWR0ZXh0PTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY21kLl93YXJuaW5ncywgMCkKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19ET0NVVElMUywgIndvbid0IHRlc3Qgd2l0aG91dCBkb2N1dGlscyIpCisgICAgZGVmIHRlc3RfY2hlY2tfcmVzdHJ1Y3R1cmVkdGV4dF93aXRoX3N5bnRheF9oaWdobGlnaHQoc2VsZik6CisgICAgICAgICMgRG9uJ3QgZmFpbCBpZiB0aGVyZSBpcyBhIGBjb2RlYCBvciBgY29kZS1ibG9ja2AgZGlyZWN0aXZlCisKKyAgICAgICAgZXhhbXBsZV9yc3RfZG9jcyA9IFtdCisgICAgICAgIGV4YW1wbGVfcnN0X2RvY3MuYXBwZW5kKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBIZXJlJ3Mgc29tZSBjb2RlOgorCisgICAgICAgICAgICAuLiBjb2RlOjogcHl0aG9uCisKKyAgICAgICAgICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIikpCisgICAgICAgIGV4YW1wbGVfcnN0X2RvY3MuYXBwZW5kKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBIZXJlJ3Mgc29tZSBjb2RlOgorCisgICAgICAgICAgICAuLiBjb2RlLWJsb2NrOjogcHl0aG9uCisKKyAgICAgICAgICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICIiIikpCisKKyAgICAgICAgZm9yIHJlc3Rfd2l0aF9jb2RlIGluIGV4YW1wbGVfcnN0X2RvY3M6CisgICAgICAgICAgICBwa2dfaW5mbywgZGlzdCA9IHNlbGYuY3JlYXRlX2Rpc3QobG9uZ19kZXNjcmlwdGlvbj1yZXN0X3dpdGhfY29kZSkKKyAgICAgICAgICAgIGNtZCA9IGNoZWNrKGRpc3QpCisgICAgICAgICAgICBjbWQuY2hlY2tfcmVzdHJ1Y3R1cmVkdGV4dCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtZC5fd2FybmluZ3MsIDApCisgICAgICAgICAgICBtc2dzID0gY21kLl9jaGVja19yc3RfZGF0YShyZXN0X3dpdGhfY29kZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1zZ3MpLCAwKQorCiAgICAgZGVmIHRlc3RfY2hlY2tfYWxsKHNlbGYpOgogCiAgICAgICAgIG1ldGFkYXRhID0geyd1cmwnOiAneHh4JywgJ2F1dGhvcic6ICd4eHgnfQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvcmUucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQppbmRleCA0MTMyMWY3Li42NTQyMjdjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29yZS5weQpAQCAtOSw2ICs5LDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAorZnJvbSBkaXN0dXRpbHMgaW1wb3J0IGxvZwogCiAjIHNldHVwIHNjcmlwdCB0aGF0IHVzZXMgX19maWxlX18KIHNldHVwX3VzaW5nX19fZmlsZV9fID0gIiIiXApAQCAtMzYsNiArMzcsNyBAQAogICAgICAgICBzZWxmLm9sZF9zdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgIHNlbGYuY2xlYW51cF90ZXN0Zm4oKQogICAgICAgICBzZWxmLm9sZF9hcmd2ID0gc3lzLmFyZ3YsIHN5cy5hcmd2WzpdCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsb2cuc2V0X3RocmVzaG9sZCwgbG9nLl9nbG9iYWxfbG9nLnRocmVzaG9sZCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc3lzLnN0ZG91dCA9IHNlbGYub2xkX3N0ZG91dApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5CmluZGV4IDE1ODlmMTIuLmQ0MzZjZjggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXJfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlyX3V0aWwucHkKQEAgLTIsOSArMiwxMCBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIGltcG9ydCBzdGF0Ci1pbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCitmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IHBhdGNoCiAKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBkaXJfdXRpbCwgZXJyb3JzCiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgKG1rcGF0aCwgcmVtb3ZlX3RyZWUsIGNyZWF0ZV90cmVlLCBjb3B5X3RyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuc3VyZV9yZWxhdGl2ZSkKIApAQCAtMTIsNiArMTMsNyBAQAogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAorCiBjbGFzcyBEaXJVdGlsVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIF9sb2coc2VsZiwgbXNnLCAqYXJncyk6CkBAIC01Miw3ICs1NCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fbG9ncywgd2FudGVkKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAiVGhpcyB0ZXN0IGlzIG9ubHkgYXBwcm9wcmlhdGUgZm9yIFBPU0lYLWxpa2Ugc3lzdGVtcy4iKQorICAgICAgICAiVGhpcyB0ZXN0IGlzIG9ubHkgYXBwcm9wcmlhdGUgZm9yIFBPU0lYLWxpa2Ugc3lzdGVtcy4iKQogICAgIGRlZiB0ZXN0X21rcGF0aF93aXRoX2N1c3RvbV9tb2RlKHNlbGYpOgogICAgICAgICAjIEdldCBhbmQgc2V0IHRoZSBjdXJyZW50IHVtYXNrIHZhbHVlIGZvciB0ZXN0aW5nIG1vZGUgYml0cy4KICAgICAgICAgdW1hc2sgPSBvcy51bWFzaygwbzAwMikKQEAgLTEyMCw2ICsxMjIsMTYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5zdXJlX3JlbGF0aXZlKCdjOlxcaG9tZVxcZm9vJyksICdjOmhvbWVcXGZvbycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZV9yZWxhdGl2ZSgnaG9tZVxcZm9vJyksICdob21lXFxmb28nKQogCisgICAgZGVmIHRlc3RfY29weV90cmVlX2V4Y2VwdGlvbl9pbl9saXN0ZGlyKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgQW4gZXhjZXB0aW9uIGluIGxpc3RkaXIgc2hvdWxkIHJhaXNlIGEgRGlzdHV0aWxzRmlsZUVycm9yCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHBhdGNoKCJvcy5saXN0ZGlyIiwgc2lkZV9lZmZlY3Q9T1NFcnJvcigpKSwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9ycy5EaXN0dXRpbHNGaWxlRXJyb3IpOgorICAgICAgICAgICAgc3JjID0gc2VsZi50ZW1wZGlyc1stMV0KKyAgICAgICAgICAgIGRpcl91dGlsLmNvcHlfdHJlZShzcmMsIE5vbmUpCisKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKERpclV0aWxUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQppbmRleCA2MWFjNTdkLi4xZjEwNGNlIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQpAQCAtMTMsNiArMTMsNyBAQAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKK2Zyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIAogCiBjbGFzcyB0ZXN0X2Rpc3QoQ29tbWFuZCk6CkBAIC0zOSw2ICs0MCw3IEBACiAKIAogY2xhc3MgRGlzdHJpYnV0aW9uVGVzdENhc2Uoc3VwcG9ydC5Mb2dnaW5nU2lsZW5jZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTIxMyw2ICsyMTUsMzQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGlzdC5hbm5vdW5jZSwgYXJncywga3dhcmdzKQogCiAKKyAgICBkZWYgdGVzdF9maW5kX2NvbmZpZ19maWxlc19kaXNhYmxlKHNlbGYpOgorICAgICAgICAjIFRpY2tldCAjMTE4MDogQWxsb3cgdXNlciB0byBkaXNhYmxlIHRoZWlyIGhvbWUgY29uZmlnIGZpbGUuCisgICAgICAgIHRlbXBfaG9tZSA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKKyAgICAgICAgICAgIHVzZXJfZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4odGVtcF9ob21lLCAiLnB5ZGlzdHV0aWxzLmNmZyIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBfaG9tZSwgInB5ZGlzdHV0aWxzLmNmZyIpCisKKyAgICAgICAgd2l0aCBvcGVuKHVzZXJfZmlsZW5hbWUsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ1tkaXN0dXRpbHNdXG4nKQorCisgICAgICAgIGRlZiBfZXhwYW5kZXIocGF0aCk6CisgICAgICAgICAgICByZXR1cm4gdGVtcF9ob21lCisKKyAgICAgICAgb2xkX2V4cGFuZGVyID0gb3MucGF0aC5leHBhbmR1c2VyCisgICAgICAgIG9zLnBhdGguZXhwYW5kdXNlciA9IF9leHBhbmRlcgorICAgICAgICB0cnk6CisgICAgICAgICAgICBkID0gRGlzdHJpYnV0aW9uKCkKKyAgICAgICAgICAgIGFsbF9maWxlcyA9IGQuZmluZF9jb25maWdfZmlsZXMoKQorCisgICAgICAgICAgICBkID0gRGlzdHJpYnV0aW9uKGF0dHJzPXsnc2NyaXB0X2FyZ3MnOiBbJy0tbm8tdXNlci1jZmcnXX0pCisgICAgICAgICAgICBmaWxlcyA9IGQuZmluZF9jb25maWdfZmlsZXMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucGF0aC5leHBhbmR1c2VyID0gb2xkX2V4cGFuZGVyCisKKyAgICAgICAgIyBtYWtlIHN1cmUgLS1uby11c2VyLWNmZyBkaXNhYmxlcyB0aGUgdXNlciBjZmcgZmlsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhbGxfZmlsZXMpLTEsIGxlbihmaWxlcykpCisKIGNsYXNzIE1ldGFkYXRhVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgc3VwcG9ydC5FbnZpcm9uR3VhcmQsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzc2LDYgKzQwNiw3IEBACiAKICAgICBkZWYgdGVzdF9zaG93X2hlbHAoc2VsZik6CiAgICAgICAgICMgc21va2UgdGVzdCwganVzdCBtYWtlcyBzdXJlIHNvbWUgaGVscCBpcyBkaXNwbGF5ZWQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvZy5zZXRfdGhyZXNob2xkLCBsb2cuX2dsb2JhbF9sb2cudGhyZXNob2xkKQogICAgICAgICBkaXN0ID0gRGlzdHJpYnV0aW9uKCkKICAgICAgICAgc3lzLmFyZ3YgPSBbXQogICAgICAgICBkaXN0LmhlbHAgPSAxCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVfdXRpbC5weQppbmRleCAzYzNlM2RjLi5hNmQwNGYwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlX3V0aWwucHkKQEAgLTIsMTAgKzIsMTMgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgZXJybm8KK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKIAotZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCBtb3ZlX2ZpbGUKK2Zyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgbW92ZV9maWxlLCBjb3B5X2ZpbGUKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKIGZyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0Citmcm9tIGRpc3R1dGlscy5lcnJvcnMgaW1wb3J0IERpc3R1dGlsc0ZpbGVFcnJvcgogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogCiBjbGFzcyBGaWxlVXRpbFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTU4LDYgKzYxLDUyIEBACiAgICAgICAgIHdhbnRlZCA9IFsnbW92aW5nICVzIC0+ICVzJyAlIChzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXRfZGlyKV0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9sb2dzLCB3YW50ZWQpCiAKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGVfZXhjZXB0aW9uX3VucGFja2luZ19yZW5hbWUoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlIDIyMTgyCisgICAgICAgIHdpdGggcGF0Y2goIm9zLnJlbmFtZSIsIHNpZGVfZWZmZWN0PU9TRXJyb3IoIndyb25nIiwgMSkpLCBcCisgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRGlzdHV0aWxzRmlsZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZSwgJ3cnKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgIGZvYmoud3JpdGUoJ3NwYW0gZWdncycpCisgICAgICAgICAgICBtb3ZlX2ZpbGUoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0LCB2ZXJib3NlPTApCisKKyAgICBkZWYgdGVzdF9tb3ZlX2ZpbGVfZXhjZXB0aW9uX3VucGFja2luZ191bmxpbmsoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlIDIyMTgyCisgICAgICAgIHdpdGggcGF0Y2goIm9zLnJlbmFtZSIsIHNpZGVfZWZmZWN0PU9TRXJyb3IoZXJybm8uRVhERVYsICJ3cm9uZyIpKSwgXAorICAgICAgICAgICAgIHBhdGNoKCJvcy51bmxpbmsiLCBzaWRlX2VmZmVjdD1PU0Vycm9yKCJ3cm9uZyIsIDEpKSwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc0ZpbGVFcnJvcik6CisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb3VyY2UsICd3JykgYXMgZm9iajoKKyAgICAgICAgICAgICAgICBmb2JqLndyaXRlKCdzcGFtIGVnZ3MnKQorICAgICAgICAgICAgbW92ZV9maWxlKHNlbGYuc291cmNlLCBzZWxmLnRhcmdldCwgdmVyYm9zZT0wKQorCisgICAgZGVmIHRlc3RfY29weV9maWxlX2hhcmRfbGluayhzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuc291cmNlLCAndycpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKCdzb21lIGNvbnRlbnQnKQorICAgICAgICBzdCA9IG9zLnN0YXQoc2VsZi5zb3VyY2UpCisgICAgICAgIGNvcHlfZmlsZShzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXQsIGxpbms9J2hhcmQnKQorICAgICAgICBzdDIgPSBvcy5zdGF0KHNlbGYuc291cmNlKQorICAgICAgICBzdDMgPSBvcy5zdGF0KHNlbGYudGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5zYW1lc3RhdChzdCwgc3QyKSwgKHN0LCBzdDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5zYW1lc3RhdChzdDIsIHN0MyksIChzdDIsIHN0MykpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ3NvbWUgY29udGVudCcpCisKKyAgICBkZWYgdGVzdF9jb3B5X2ZpbGVfaGFyZF9saW5rX2ZhaWx1cmUoc2VsZik6CisgICAgICAgICMgSWYgaGFyZCBsaW5raW5nIGZhaWxzLCBjb3B5X2ZpbGUoKSBmYWxscyBiYWNrIG9uIGNvcHlpbmcgZmlsZQorICAgICAgICAjIChzb21lIHNwZWNpYWwgZmlsZXN5c3RlbXMgZG9uJ3Qgc3VwcG9ydCBoYXJkIGxpbmtpbmcgZXZlbiB1bmRlcgorICAgICAgICAjICBVbml4LCBzZWUgaXNzdWUgIzg4NzYpLgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zb3VyY2UsICd3JykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoJ3NvbWUgY29udGVudCcpCisgICAgICAgIHN0ID0gb3Muc3RhdChzZWxmLnNvdXJjZSkKKyAgICAgICAgd2l0aCBwYXRjaCgib3MubGluayIsIHNpZGVfZWZmZWN0PU9TRXJyb3IoMCwgImxpbmtpbmcgdW5zdXBwb3J0ZWQiKSk6CisgICAgICAgICAgICBjb3B5X2ZpbGUoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0LCBsaW5rPSdoYXJkJykKKyAgICAgICAgc3QyID0gb3Muc3RhdChzZWxmLnNvdXJjZSkKKyAgICAgICAgc3QzID0gb3Muc3RhdChzZWxmLnRhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguc2FtZXN0YXQoc3QsIHN0MiksIChzdCwgc3QyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLnNhbWVzdGF0KHN0Miwgc3QzKSwgKHN0Miwgc3QzKSkKKyAgICAgICAgZm9yIGZuIGluIChzZWxmLnNvdXJjZSwgc2VsZi50YXJnZXQpOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ3NvbWUgY29udGVudCcpCisKIAogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKEZpbGVVdGlsVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CmluZGV4IGVkZTg4ZTUuLjE4ZTFlNTcgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsLnB5CkBAIC0xLDcgKzEsNiBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5jb21tYW5kLmluc3RhbGwuIiIiCiAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc2l0ZQpAQCAtOTQsNyArOTMsNyBAQAogCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQogCi0gICAgICAgIGZvciBrZXkgaW4gKCdudF91c2VyJywgJ3VuaXhfdXNlcicsICdvczJfaG9tZScpOgorICAgICAgICBmb3Iga2V5IGluICgnbnRfdXNlcicsICd1bml4X3VzZXInKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oa2V5LCBJTlNUQUxMX1NDSEVNRVMpCiAKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnfSkKQEAgLTE5Myw3ICsxOTIsOCBAQAogICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICAgICAgZm91bmQgPSBbb3MucGF0aC5iYXNlbmFtZShsaW5lKSBmb3IgbGluZSBpbiBjb250ZW50LnNwbGl0bGluZXMoKV0KLSAgICAgICAgZXhwZWN0ZWQgPSBbJ2hlbGxvLnB5JywgJ2hlbGxvLiVzLnB5YycgJSBpbXAuZ2V0X3RhZygpLCAnc2F5aGknLAorICAgICAgICBleHBlY3RlZCA9IFsnaGVsbG8ucHknLCAnaGVsbG8uJXMucHljJyAlIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcsCisgICAgICAgICAgICAgICAgICAgICdzYXloaScsCiAgICAgICAgICAgICAgICAgICAgICdVTktOT1dOLTAuMC4wLXB5JXMuJXMuZWdnLWluZm8nICUgc3lzLnZlcnNpb25faW5mb1s6Ml1dCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIGV4cGVjdGVkKQogCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfaW5zdGFsbF9saWIucHkKaW5kZXggZDBkZmNhMC4uNDBkZDFhOSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2luc3RhbGxfbGliLnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9pbnN0YWxsX2xpYi5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlRlc3RzIGZvciBkaXN0dXRpbHMuY29tbWFuZC5pbnN0YWxsX2RhdGEuIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuaW5zdGFsbF9saWIgaW1wb3J0IGluc3RhbGxfbGliCkBAIC00NCw4ICs0NCwxMCBAQAogICAgICAgICBmID0gb3MucGF0aC5qb2luKHByb2plY3RfZGlyLCAnZm9vLnB5JykKICAgICAgICAgc2VsZi53cml0ZV9maWxlKGYsICcjIHB5dGhvbiBmaWxlJykKICAgICAgICAgY21kLmJ5dGVfY29tcGlsZShbZl0pCi0gICAgICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKCdmb28ucHknLCBkZWJ1Z19vdmVycmlkZT1UcnVlKQotICAgICAgICBweW9fZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywgZGVidWdfb3ZlcnJpZGU9RmFsc2UpCisgICAgICAgIHB5Y19maWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoJ2Zvby5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkKKyAgICAgICAgcHlvX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnZm9vLnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHB5Y19maWxlKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHB5b19maWxlKSkKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2xvZy5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9sb2cucHkKaW5kZXggY2U2NmVlNS4uMGMyYWQ3YSAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2xvZy5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfbG9nLnB5CkBAIC0xNCw4ICsxNCw4IEBACiAgICAgICAgICMgZXJyb3IgaGFuZGxlcikKICAgICAgICAgb2xkX3N0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgb2xkX3N0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgb2xkX3RocmVzaG9sZCA9IGxvZy5zZXRfdGhyZXNob2xkKGxvZy5ERUJVRykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9nLnNldF90aHJlc2hvbGQobG9nLkRFQlVHKQogICAgICAgICAgICAgd2l0aCBOYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0idysiLCBlbmNvZGluZz0nYXNjaWknKSBhcyBzdGRvdXQsIFwKICAgICAgICAgICAgICAgICAgTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9IncrIiwgZW5jb2Rpbmc9J2FzY2lpJykgYXMgc3RkZXJyOgogICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKQEAgLTI3LDYgKzI3LDcgQEAKICAgICAgICAgICAgICAgICBzdGRlcnIuc2VlaygwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLnJlYWQoKS5yc3RyaXAoKSwgImZhdGFsOlxceGU5IikKICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGxvZy5zZXRfdGhyZXNob2xkKG9sZF90aHJlc2hvbGQpCiAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gb2xkX3N0ZG91dAogICAgICAgICAgICAgc3lzLnN0ZGVyciA9IG9sZF9zdGRlcnIKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CmluZGV4IGM5NTI0MDYuLjVhMDRlMGQgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKQEAgLTE0LDYgKzE0LDEyIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgWkxJQl9TVVBQT1JUID0gRmFsc2UKIAordHJ5OgorICAgIGltcG9ydCBncnAKKyAgICBpbXBvcnQgcHdkCisgICAgVUlEX0dJRF9TVVBQT1JUID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIFVJRF9HSURfU1VQUE9SVCA9IEZhbHNlCiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QgaW1wb3J0IHNkaXN0LCBzaG93X2Zvcm1hdHMKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgpAQCAtNDIzLDYgKzQyOSw1NCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChmaWxlbmFtZXMpLCBbJ2Zha2UtMS4wJywgJ2Zha2UtMS4wL1BLRy1JTkZPJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmYWtlLTEuMC9SRUFETUUubWFudWFsJ10pCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhaTElCX1NVUFBPUlQsICJyZXF1aXJlcyB6bGliIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZpbmRfZXhlY3V0YWJsZSgndGFyJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICJUaGUgdGFyIGNvbW1hbmQgaXMgbm90IGZvdW5kIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAiVGhlIGd6aXAgY29tbWFuZCBpcyBub3QgZm91bmQiKQorICAgIGRlZiB0ZXN0X21ha2VfZGlzdHJpYnV0aW9uX293bmVyX2dyb3VwKHNlbGYpOgorICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0CisgICAgICAgIGRpc3QsIGNtZCA9IHNlbGYuZ2V0X2NtZCgpCisKKyAgICAgICAgIyBjcmVhdGluZyBhIGd6dGFyIGFuZCBzcGVjaWZ5aW5nIHRoZSBvd25lcitncm91cAorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQorICAgICAgICBjbWQub3duZXIgPSBwd2QuZ2V0cHd1aWQoMClbMF0KKyAgICAgICAgY21kLmdyb3VwID0gZ3JwLmdldGdyZ2lkKDApWzBdCisgICAgICAgIGNtZC5lbnN1cmVfZmluYWxpemVkKCkKKyAgICAgICAgY21kLnJ1bigpCisKKyAgICAgICAgIyBtYWtpbmcgc3VyZSB3ZSBoYXZlIHRoZSBnb29kIHJpZ2h0cworICAgICAgICBhcmNoaXZlX25hbWUgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnLCAnZmFrZS0xLjAudGFyLmd6JykKKyAgICAgICAgYXJjaGl2ZSA9IHRhcmZpbGUub3BlbihhcmNoaXZlX25hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBtZW1iZXIgaW4gYXJjaGl2ZS5nZXRtZW1iZXJzKCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1iZXIudWlkLCAwKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLmdpZCwgMCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFyY2hpdmUuY2xvc2UoKQorCisgICAgICAgICMgYnVpbGRpbmcgYSBzZGlzdCBhZ2FpbgorICAgICAgICBkaXN0LCBjbWQgPSBzZWxmLmdldF9jbWQoKQorCisgICAgICAgICMgY3JlYXRpbmcgYSBnenRhcgorICAgICAgICBjbWQuZm9ybWF0cyA9IFsnZ3p0YXInXQorICAgICAgICBjbWQuZW5zdXJlX2ZpbmFsaXplZCgpCisgICAgICAgIGNtZC5ydW4oKQorCisgICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0aGUgZ29vZCByaWdodHMKKyAgICAgICAgYXJjaGl2ZV9uYW1lID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JywgJ2Zha2UtMS4wLnRhci5neicpCisgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQorCisgICAgICAgICMgbm90ZSB0aGF0IHdlIGFyZSBub3QgdGVzdGluZyB0aGUgZ3JvdXAgb3duZXJzaGlwIGhlcmUKKyAgICAgICAgIyBiZWNhdXNlLCBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtcyBhbmQgdGhlIGNvbnRhaW5lcgorICAgICAgICAjIHJpZ2h0cyAoc2VlICM3NDA4KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbWVtYmVyIGluIGFyY2hpdmUuZ2V0bWVtYmVycygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVtYmVyLnVpZCwgb3MuZ2V0dWlkKCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBhcmNoaXZlLmNsb3NlKCkKKwogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKFNEaXN0VGVzdENhc2UpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc3lzY29uZmlnLnB5CmluZGV4IGExY2I0N2QuLmZjNGQxZGUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3N5c2NvbmZpZy5weQpAQCAtMSwxNiArMSwxNyBAQAogIiIiVGVzdHMgZm9yIGRpc3R1dGlscy5zeXNjb25maWcuIiIiCiBpbXBvcnQgb3MKIGltcG9ydCBzaHV0aWwKLWltcG9ydCB0ZXN0CitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZwogZnJvbSBkaXN0dXRpbHMuY2NvbXBpbGVyIGltcG9ydCBnZXRfZGVmYXVsdF9jb21waWxlcgogZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncwogCi1jbGFzcyBTeXNjb25maWdUZXN0Q2FzZShzdXBwb3J0LkVudmlyb25HdWFyZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFN5c2NvbmZpZ1Rlc3RDYXNlKHN1cHBvcnQuRW52aXJvbkd1YXJkLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcihTeXNjb25maWdUZXN0Q2FzZSwgc2VsZikuc2V0VXAoKQogICAgICAgICBzZWxmLm1ha2VmaWxlID0gTm9uZQpAQCAtMzIsNyArMzMsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKIAogICAgIGRlZiB0ZXN0X2dldF9weXRob25fbGliKHNlbGYpOgotICAgICAgICBsaWJfZGlyID0gc3lzY29uZmlnLmdldF9weXRob25fbGliKCkKICAgICAgICAgIyBYWFggZG9lc24ndCB3b3JrIG9uIExpbnV4IHdoZW4gUHl0aG9uIHdhcyBuZXZlciBpbnN0YWxsZWQgYmVmb3JlCiAgICAgICAgICNzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2RpcihsaWJfZGlyKSwgbGliX2RpcikKICAgICAgICAgIyB0ZXN0IGZvciBweXRob254eC5saWI/CkBAIC02Nyw4ICs2Nyw5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoUHl0aG9uX2gpLCBQeXRob25faCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzeXNjb25maWcuX2lzX3B5dGhvbl9zb3VyY2VfZGlyKHNyY2RpcikpCiAgICAgICAgIGVsaWYgb3MubmFtZSA9PSAncG9zaXgnOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5wYXRoLmRpcm5hbWUoc3lzY29uZmlnLmdldF9tYWtlZmlsZV9maWxlbmFtZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY2RpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKHN5c2NvbmZpZy5nZXRfbWFrZWZpbGVfZmlsZW5hbWUoKSksCisgICAgICAgICAgICAgICAgc3JjZGlyKQogCiAgICAgZGVmIHRlc3Rfc3JjZGlyX2luZGVwZW5kZW50X29mX2N3ZChzZWxmKToKICAgICAgICAgIyBzcmNkaXIgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CkBAIC0xMjYsMTAgKzEyNywxMyBAQAogCiAgICAgZGVmIHRlc3Rfc3lzY29uZmlnX21vZHVsZShzZWxmKToKICAgICAgICAgaW1wb3J0IHN5c2NvbmZpZyBhcyBnbG9iYWxfc3lzY29uZmlnCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERGTEFHUycpLCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDRkxBR1MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NGTEFHUycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0xERkxBR1MnKSkKIAotICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpLCdjb21waWxlciBmbGFncyBjdXN0b21pemVkJykKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ1VTVE9NSVpFRF9PU1hfQ09NUElMRVInKSwKKyAgICAgICAgICAgICAgICAgICAgICdjb21waWxlciBmbGFncyBjdXN0b21pemVkJykKICAgICBkZWYgdGVzdF9zeXNjb25maWdfY29tcGlsZXJfdmFycyhzZWxmKToKICAgICAgICAgIyBPbiBPUyBYLCBiaW5hcnkgaW5zdGFsbGVycyBzdXBwb3J0IGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRpbmcgb24KICAgICAgICAgIyB2YXJpb3VzIGxldmVscyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB3aXRoIGRpZmZlcmluZyBYY29kZQpAQCAtMTQ4LDkgKzE1Miw0OSBAQAogICAgICAgICBpbXBvcnQgc3lzY29uZmlnIGFzIGdsb2JhbF9zeXNjb25maWcKICAgICAgICAgaWYgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDVVNUT01JWkVEX09TWF9DT01QSUxFUicpOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY29tcGlsZXIgZmxhZ3MgY3VzdG9taXplZCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2xvYmFsX3N5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSwgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9zeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0NDJyksIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdMRFNIQVJFRCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignTERTSEFSRUQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxfc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdDQycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0MnKSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX2RlcHJlY2F0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIsICdTTycpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT192YWx1ZShzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1NPJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09faW5fdmFycyhzZWxmKToKKyAgICAgICAgdmFycyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcnMoKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh2YXJzWydTTyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnNbJ1NPJ10sIHZhcnNbJ0VYVF9TVUZGSVgnXSkKKworICAgIGRlZiB0ZXN0X2N1c3RvbWl6ZV9jb21waWxlcl9iZWZvcmVfZ2V0X2NvbmZpZ192YXJzKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTkyMzogdGVzdCB0aGF0IGEgRGlzdHJpYnV0aW9uIGNvbXBpbGVyCisgICAgICAgICMgaW5zdGFuY2UgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IGNhbGwgdG8KKyAgICAgICAgIyBnZXRfY29uZmlnX3ZhcnMoKS4KKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZWxpbmVzKHRleHR3cmFwLmRlZGVudCgnJydcCisgICAgICAgICAgICAgICAgZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCisgICAgICAgICAgICAgICAgY29uZmlnID0gRGlzdHJpYnV0aW9uKCkuZ2V0X2NvbW1hbmRfb2JqKCdjb25maWcnKQorICAgICAgICAgICAgICAgICMgdHJ5X2NvbXBpbGUgbWF5IHBhc3Mgb3IgaXQgbWF5IGZhaWwgaWYgbm8gY29tcGlsZXIKKyAgICAgICAgICAgICAgICAjIGlzIGZvdW5kIGJ1dCBpdCBzaG91bGQgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICByYyA9IGNvbmZpZy50cnlfY29tcGlsZSgnaW50IHg7JykKKyAgICAgICAgICAgICAgICAnJycpKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3RyKHN5cy5leGVjdXRhYmxlKSwgVEVTVEZOXSwKKyAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCwKKyAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkKKyAgICAgICAgb3V0cywgZXJycyA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHAucmV0dXJuY29kZSwgIlN1YnByb2Nlc3MgZmFpbGVkOiAiICsgb3V0cykKIAogCiBkZWYgdGVzdF9zdWl0ZSgpOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF91cGxvYWQucHkKaW5kZXggMTQwMjM0My4uY2JiYmUzMyAxMDA2NDQKLS0tIGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3VwbG9hZC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXBsb2FkLnB5CkBAIC02LDYgKzYsNyBAQAogZnJvbSBkaXN0dXRpbHMuY29tbWFuZCBpbXBvcnQgdXBsb2FkIGFzIHVwbG9hZF9tb2QKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQudXBsb2FkIGltcG9ydCB1cGxvYWQKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IERpc3RyaWJ1dGlvbgorZnJvbSBkaXN0dXRpbHMuZXJyb3JzIGltcG9ydCBEaXN0dXRpbHNFcnJvcgogZnJvbSBkaXN0dXRpbHMubG9nIGltcG9ydCBJTkZPCiAKIGZyb20gZGlzdHV0aWxzLnRlc3RzLnRlc3RfY29uZmlnIGltcG9ydCBQWVBJUkMsIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZQpAQCAtNDEsMTMgKzQyLDE0IEBACiAKIGNsYXNzIEZha2VPcGVuKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBtc2c9Tm9uZSwgY29kZT1Ob25lKToKICAgICAgICAgc2VsZi51cmwgPSB1cmwKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodXJsLCBzdHIpOgogICAgICAgICAgICAgc2VsZi5yZXEgPSB1cmwKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYucmVxID0gTm9uZQotICAgICAgICBzZWxmLm1zZyA9ICdPSycKKyAgICAgICAgc2VsZi5tc2cgPSBtc2cgb3IgJ09LJworICAgICAgICBzZWxmLmNvZGUgPSBjb2RlIG9yIDIwMAogCiAgICAgZGVmIGdldGhlYWRlcihzZWxmLCBuYW1lLCBkZWZhdWx0PU5vbmUpOgogICAgICAgICByZXR1cm4gewpAQCAtNTgsNyArNjAsNyBAQAogICAgICAgICByZXR1cm4gYid4eXp6eScKIAogICAgIGRlZiBnZXRjb2RlKHNlbGYpOgotICAgICAgICByZXR1cm4gMjAwCisgICAgICAgIHJldHVybiBzZWxmLmNvZGUKIAogCiBjbGFzcyB1cGxvYWRUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgpAQCAtNjgsMTMgKzcwLDE1IEBACiAgICAgICAgIHNlbGYub2xkX29wZW4gPSB1cGxvYWRfbW9kLnVybG9wZW4KICAgICAgICAgdXBsb2FkX21vZC51cmxvcGVuID0gc2VsZi5fdXJsb3BlbgogICAgICAgICBzZWxmLmxhc3Rfb3BlbiA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X21zZyA9IE5vbmUKKyAgICAgICAgc2VsZi5uZXh0X2NvZGUgPSBOb25lCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHVwbG9hZF9tb2QudXJsb3BlbiA9IHNlbGYub2xkX29wZW4KICAgICAgICAgc3VwZXIodXBsb2FkVGVzdENhc2UsIHNlbGYpLnRlYXJEb3duKCkKIAogICAgIGRlZiBfdXJsb3BlbihzZWxmLCB1cmwpOgotICAgICAgICBzZWxmLmxhc3Rfb3BlbiA9IEZha2VPcGVuKHVybCkKKyAgICAgICAgc2VsZi5sYXN0X29wZW4gPSBGYWtlT3Blbih1cmwsIG1zZz1zZWxmLm5leHRfbXNnLCBjb2RlPXNlbGYubmV4dF9jb2RlKQogICAgICAgICByZXR1cm4gc2VsZi5sYXN0X29wZW4KIAogICAgIGRlZiB0ZXN0X2ZpbmFsaXplX29wdGlvbnMoc2VsZik6CkBAIC04Niw3ICs5MCw3IEBACiAgICAgICAgIGNtZC5maW5hbGl6ZV9vcHRpb25zKCkKICAgICAgICAgZm9yIGF0dHIsIHdhaXRlZCBpbiAoKCd1c2VybmFtZScsICdtZScpLCAoJ3Bhc3N3b3JkJywgJ3NlY3JldCcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3JlYWxtJywgJ3B5cGknKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdyZXBvc2l0b3J5JywgJ2h0dHBzOi8vcHlwaS5weXRob24ub3JnL3B5cGknKSk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgncmVwb3NpdG9yeScsICdodHRwczovL3VwbG9hZC5weXBpLm9yZy9sZWdhY3kvJykpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKGNtZCwgYXR0ciksIHdhaXRlZCkKIAogICAgIGRlZiB0ZXN0X3NhdmVkX3Bhc3N3b3JkKHNlbGYpOgpAQCAtMTIzLDE3ICsxMjcsMjIgQEAKIAogICAgICAgICAjIHdoYXQgZGlkIHdlIHNlbmQgPwogICAgICAgICBoZWFkZXJzID0gZGljdChzZWxmLmxhc3Rfb3Blbi5yZXEuaGVhZGVycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZWFkZXJzWydDb250ZW50LWxlbmd0aCddLCAnMjA4NycpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoZWFkZXJzWydDb250ZW50LXR5cGUnXS5zdGFydHN3aXRoKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGVhZGVyc1snQ29udGVudC1sZW5ndGgnXSwgJzIxNjEnKQorICAgICAgICBjb250ZW50X3R5cGUgPSBoZWFkZXJzWydDb250ZW50LXR5cGUnXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29udGVudF90eXBlLnN0YXJ0c3dpdGgoJ211bHRpcGFydC9mb3JtLWRhdGEnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X21ldGhvZCgpLCAnUE9TVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sYXN0X29wZW4ucmVxLmdldF9mdWxsX3VybCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwczovL3VwbG9hZC5weXBpLm9yZy9sZWdhY3kvJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3h4eCcsIHNlbGYubGFzdF9vcGVuLnJlcS5kYXRhKQorICAgICAgICBleHBlY3RlZF91cmwgPSAnaHR0cHM6Ly91cGxvYWQucHlwaS5vcmcvbGVnYWN5LycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxhc3Rfb3Blbi5yZXEuZ2V0X2Z1bGxfdXJsKCksIGV4cGVjdGVkX3VybCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIneHh4JyBpbiBzZWxmLmxhc3Rfb3Blbi5yZXEuZGF0YSkKIAogICAgICAgICAjIFRoZSBQeVBJIHJlc3BvbnNlIGJvZHkgd2FzIGVjaG9lZAogICAgICAgICByZXN1bHRzID0gc2VsZi5nZXRfbG9ncyhJTkZPKQogICAgICAgICBzZWxmLmFzc2VydEluKCd4eXp6eVxuJywgcmVzdWx0c1stMV0pCiAKKyAgICBkZWYgdGVzdF91cGxvYWRfZmFpbHMoc2VsZik6CisgICAgICAgIHNlbGYubmV4dF9tc2cgPSAiTm90IEZvdW5kIgorICAgICAgICBzZWxmLm5leHRfY29kZSA9IDQwNAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhEaXN0dXRpbHNFcnJvciwgc2VsZi50ZXN0X3VwbG9hZCkKIAogZGVmIHRlc3Rfc3VpdGUoKToKICAgICByZXR1cm4gdW5pdHRlc3QubWFrZVN1aXRlKHVwbG9hZFRlc3RDYXNlKQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQppbmRleCBhMWFiZjhmLi40ZTlkNzliIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfdXRpbC5weQpAQCAtMjM3LDcgKzIzNyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKERpc3R1dGlsc1BsYXRmb3JtRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZV9yb290LCAnYzpcXHJvb3QnLCAnaXRzXFxoZXJlJykKIAotICAgICAgICAjIFhYWCBwbGF0Zm9ybXMgdG8gYmUgY292ZXJlZDogb3MyLCBtYWMKKyAgICAgICAgIyBYWFggcGxhdGZvcm1zIHRvIGJlIGNvdmVyZWQ6IG1hYwogCiAgICAgZGVmIHRlc3RfY2hlY2tfZW52aXJvbihzZWxmKToKICAgICAgICAgdXRpbC5fZW52aXJvbl9jaGVja2VkID0gMApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXh0X2ZpbGUucHkgYi9MaWIvZGlzdHV0aWxzL3RleHRfZmlsZS5weQppbmRleCA0MGI4NDg0Li40NzgzMzZmIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3RleHRfZmlsZS5weQorKysgYi9MaWIvZGlzdHV0aWxzL3RleHRfZmlsZS5weQpAQCAtMTE4LDEwICsxMTgsMTEgQEAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkNsb3NlIHRoZSBjdXJyZW50IGZpbGUgYW5kIGZvcmdldCBldmVyeXRoaW5nIHdlIGtub3cgYWJvdXQgaXQKICAgICAgICAgICAgKGZpbGVuYW1lLCBjdXJyZW50IGxpbmUgbnVtYmVyKS4iIiIKLSAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKKyAgICAgICAgZmlsZSA9IHNlbGYuZmlsZQogICAgICAgICBzZWxmLmZpbGUgPSBOb25lCiAgICAgICAgIHNlbGYuZmlsZW5hbWUgPSBOb25lCiAgICAgICAgIHNlbGYuY3VycmVudF9saW5lID0gTm9uZQorICAgICAgICBmaWxlLmNsb3NlKCkKIAogICAgIGRlZiBnZW5fZXJyb3Ioc2VsZiwgbXNnLCBsaW5lPU5vbmUpOgogICAgICAgICBvdXRtc2cgPSBbXQpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy91dGlsLnB5CmluZGV4IGI1NTg5NTcuLjVhZGNhYzUgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3V0aWwucHkKQEAgLTYsNyArNiw3IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHJlCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdHJpbmcKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzUGxhdGZvcm1FcnJvcgpAQCAtMTU0LDEyICsxNTQsNiBAQAogICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCiAgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCiAKLSAgICBlbGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgIChkcml2ZSwgcGF0aCkgPSBvcy5wYXRoLnNwbGl0ZHJpdmUocGF0aG5hbWUpCi0gICAgICAgIGlmIHBhdGhbMF0gPT0gb3Muc2VwOgotICAgICAgICAgICAgcGF0aCA9IHBhdGhbMTpdCi0gICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4obmV3X3Jvb3QsIHBhdGgpCi0KICAgICBlbHNlOgogICAgICAgICByYWlzZSBEaXN0dXRpbHNQbGF0Zm9ybUVycm9yKCJub3RoaW5nIGtub3duIGFib3V0IHBsYXRmb3JtICclcyciICUgb3MubmFtZSkKIApAQCAtNDQ0LDkgKzQzOCwxMCBAQAogICAgICAgICAgICAgIyAgIGNmaWxlIC0gYnl0ZS1jb21waWxlZCBmaWxlCiAgICAgICAgICAgICAjICAgZGZpbGUgLSBwdXJwb3J0ZWQgc291cmNlIGZpbGVuYW1lIChzYW1lIGFzICdmaWxlJyBieSBkZWZhdWx0KQogICAgICAgICAgICAgaWYgb3B0aW1pemUgPj0gMDoKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgICAgICAgICAgY2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgKKyAgICAgICAgICAgICAgICAgICAgZmlsZSwgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQorICAgICAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKICAgICAgICAgICAgIGRmaWxlID0gZmlsZQogICAgICAgICAgICAgaWYgcHJlZml4OgogICAgICAgICAgICAgICAgIGlmIGZpbGVbOmxlbihwcmVmaXgpXSAhPSBwcmVmaXg6CmRpZmYgLS1naXQgYS9MaWIvZG9jdGVzdC5weSBiL0xpYi9kb2N0ZXN0LnB5CmluZGV4IDNmMGQ5ZDkuLjQzMmVmMDUgMTAwNjQ0Ci0tLSBhL0xpYi9kb2N0ZXN0LnB5CisrKyBiL0xpYi9kb2N0ZXN0LnB5CkBAIC02Miw2ICs2Miw3IEBACiAgICAgJ1JFUE9SVF9ORElGRicsCiAgICAgJ1JFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUnLAogICAgICdSRVBPUlRJTkdfRkxBR1MnLAorICAgICdGQUlMX0ZBU1QnLAogICAgICMgMS4gVXRpbGl0eSBGdW5jdGlvbnMKICAgICAjIDIuIEV4YW1wbGUgJiBEb2NUZXN0CiAgICAgJ0V4YW1wbGUnLApAQCAtOTIsNiArOTMsNyBAQAogXQogCiBpbXBvcnQgX19mdXR1cmVfXworaW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBsaW5lY2FjaGUKQEAgLTE1MCwxMSArMTUyLDEzIEBACiBSRVBPUlRfQ0RJRkYgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfQ0RJRkYnKQogUkVQT1JUX05ESUZGID0gcmVnaXN0ZXJfb3B0aW9uZmxhZygnUkVQT1JUX05ESUZGJykKIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgPSByZWdpc3Rlcl9vcHRpb25mbGFnKCdSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFJykKK0ZBSUxfRkFTVCA9IHJlZ2lzdGVyX29wdGlvbmZsYWcoJ0ZBSUxfRkFTVCcpCiAKIFJFUE9SVElOR19GTEFHUyA9IChSRVBPUlRfVURJRkYgfAogICAgICAgICAgICAgICAgICAgIFJFUE9SVF9DRElGRiB8CiAgICAgICAgICAgICAgICAgICAgUkVQT1JUX05ESUZGIHwKLSAgICAgICAgICAgICAgICAgICBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFKQorICAgICAgICAgICAgICAgICAgIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUgfAorICAgICAgICAgICAgICAgICAgIEZBSUxfRkFTVCkKIAogIyBTcGVjaWFsIHN0cmluZyBtYXJrZXJzIGZvciB1c2UgaW4gYHdhbnRgIHN0cmluZ3M6CiBCTEFOS0xJTkVfTUFSS0VSID0gJzxCTEFOS0xJTkU+JwpAQCAtMjEyLDcgKzIxNiw3IEBACiAgICAgaWYgbW9kdWxlX3JlbGF0aXZlOgogICAgICAgICBwYWNrYWdlID0gX25vcm1hbGl6ZV9tb2R1bGUocGFja2FnZSwgMykKICAgICAgICAgZmlsZW5hbWUgPSBfbW9kdWxlX3JlbGF0aXZlX3BhdGgocGFja2FnZSwgZmlsZW5hbWUpCi0gICAgICAgIGlmIGhhc2F0dHIocGFja2FnZSwgJ19fbG9hZGVyX18nKToKKyAgICAgICAgaWYgZ2V0YXR0cihwYWNrYWdlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgaGFzYXR0cihwYWNrYWdlLl9fbG9hZGVyX18sICdnZXRfZGF0YScpOgogICAgICAgICAgICAgICAgIGZpbGVfY29udGVudHMgPSBwYWNrYWdlLl9fbG9hZGVyX18uZ2V0X2RhdGEoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgZmlsZV9jb250ZW50cyA9IGZpbGVfY29udGVudHMuZGVjb2RlKGVuY29kaW5nKQpAQCAtNDc3LDkgKzQ4MSw2IEBACiAgICAgICAgICAgICAgICBzZWxmLm9wdGlvbnMgPT0gb3RoZXIub3B0aW9ucyBhbmQgXAogICAgICAgICAgICAgICAgc2VsZi5leGNfbXNnID09IG90aGVyLmV4Y19tc2cKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQogICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGhhc2goKHNlbGYuc291cmNlLCBzZWxmLndhbnQsIHNlbGYubGluZW5vLCBzZWxmLmluZGVudCwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjX21zZykpCkBAIC01NDMsOSArNTQ0LDYgQEAKICAgICAgICAgICAgICAgIHNlbGYuZmlsZW5hbWUgPT0gb3RoZXIuZmlsZW5hbWUgYW5kIFwKICAgICAgICAgICAgICAgIHNlbGYubGluZW5vID09IG90aGVyLmxpbmVubwogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgotCiAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi5kb2NzdHJpbmcsIHNlbGYubmFtZSwgc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8pKQogCkBAIC05NDAsNiArOTM4LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gbW9kdWxlIGlzIGluc3BlY3QuZ2V0bW9kdWxlKG9iamVjdCkKICAgICAgICAgZWxpZiBpbnNwZWN0LmlzZnVuY3Rpb24ob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBtb2R1bGUuX19kaWN0X18gaXMgb2JqZWN0Ll9fZ2xvYmFsc19fCisgICAgICAgIGVsaWYgaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3Iob2JqZWN0KToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqZWN0LCAnX19vYmpjbGFzc19fJyk6CisgICAgICAgICAgICAgICAgb2JqX21vZCA9IG9iamVjdC5fX29iamNsYXNzX18uX19tb2R1bGVfXworICAgICAgICAgICAgZWxpZiBoYXNhdHRyKG9iamVjdCwgJ19fbW9kdWxlX18nKToKKyAgICAgICAgICAgICAgICBvYmpfbW9kID0gb2JqZWN0Ll9fbW9kdWxlX18KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUgIyBbWFhdIG5vIGVhc3kgd2F5IHRvIHRlbGwgb3RoZXJ3aXNlCisgICAgICAgICAgICByZXR1cm4gbW9kdWxlLl9fbmFtZV9fID09IG9ial9tb2QKICAgICAgICAgZWxpZiBpbnNwZWN0LmlzY2xhc3Mob2JqZWN0KToKICAgICAgICAgICAgIHJldHVybiBtb2R1bGUuX19uYW1lX18gPT0gb2JqZWN0Ll9fbW9kdWxlX18KICAgICAgICAgZWxpZiBoYXNhdHRyKG9iamVjdCwgJ19fbW9kdWxlX18nKToKQEAgLTk3Miw3ICs5NzgsNyBAQAogICAgICAgICAgICAgZm9yIHZhbG5hbWUsIHZhbCBpbiBvYmouX19kaWN0X18uaXRlbXMoKToKICAgICAgICAgICAgICAgICB2YWxuYW1lID0gJyVzLiVzJyAlIChuYW1lLCB2YWxuYW1lKQogICAgICAgICAgICAgICAgICMgUmVjdXJzZSB0byBmdW5jdGlvbnMgJiBjbGFzc2VzLgotICAgICAgICAgICAgICAgIGlmICgoaW5zcGVjdC5pc2Z1bmN0aW9uKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkpIGFuZAorICAgICAgICAgICAgICAgIGlmICgoaW5zcGVjdC5pc3JvdXRpbmUodmFsKSBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSkgYW5kCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zyb21fbW9kdWxlKG1vZHVsZSwgdmFsKSk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbmQodGVzdHMsIHZhbCwgdmFsbmFtZSwgbW9kdWxlLCBzb3VyY2VfbGluZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYnMsIHNlZW4pCkBAIC05ODQsOSArOTkwLDggQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRG9jVGVzdEZpbmRlci5maW5kOiBfX3Rlc3RfXyBrZXlzICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBiZSBzdHJpbmdzOiAlciIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKHZhbG5hbWUpLCkpCi0gICAgICAgICAgICAgICAgaWYgbm90IChpbnNwZWN0LmlzZnVuY3Rpb24odmFsKSBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5pc21ldGhvZCh2YWwpIG9yIGluc3BlY3QuaXNtb2R1bGUodmFsKSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgaXNpbnN0YW5jZSh2YWwsIHN0cikpOgorICAgICAgICAgICAgICAgIGlmIG5vdCAoaW5zcGVjdC5pc3JvdXRpbmUodmFsKSBvciBpbnNwZWN0LmlzY2xhc3ModmFsKSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5pc21vZHVsZSh2YWwpIG9yIGlzaW5zdGFuY2UodmFsLCBzdHIpKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRG9jVGVzdEZpbmRlci5maW5kOiBfX3Rlc3RfXyB2YWx1ZXMgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHN0cmluZ3MsIGZ1bmN0aW9ucywgbWV0aG9kcywgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGFzc2VzLCBvciBtb2R1bGVzOiAlciIgJQpAQCAtMTAwNSw3ICsxMDEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgdmFsID0gZ2V0YXR0cihvYmosIHZhbG5hbWUpLl9fZnVuY19fCiAKICAgICAgICAgICAgICAgICAjIFJlY3Vyc2UgdG8gbWV0aG9kcywgcHJvcGVydGllcywgYW5kIG5lc3RlZCBjbGFzc2VzLgotICAgICAgICAgICAgICAgIGlmICgoaW5zcGVjdC5pc2Z1bmN0aW9uKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKKyAgICAgICAgICAgICAgICBpZiAoKGluc3BlY3QuaXNyb3V0aW5lKHZhbCkgb3IgaW5zcGVjdC5pc2NsYXNzKHZhbCkgb3IKICAgICAgICAgICAgICAgICAgICAgICBpc2luc3RhbmNlKHZhbCwgcHJvcGVydHkpKSBhbmQKICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mcm9tX21vZHVsZShtb2R1bGUsIHZhbCkpOgogICAgICAgICAgICAgICAgICAgICB2YWxuYW1lID0gJyVzLiVzJyAlIChuYW1lLCB2YWxuYW1lKQpAQCAtMTM2Nyw2ICsxMzcyLDkgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAoInVua25vd24gb3V0Y29tZSIsIG91dGNvbWUpCiAKKyAgICAgICAgICAgIGlmIGZhaWx1cmVzIGFuZCBzZWxmLm9wdGlvbmZsYWdzICYgRkFJTF9GQVNUOgorICAgICAgICAgICAgICAgIGJyZWFrCisKICAgICAgICAgIyBSZXN0b3JlIHRoZSBvcHRpb24gZmxhZ3MgKGluIGNhc2UgdGhleSB3ZXJlIG1vZGlmaWVkKQogICAgICAgICBzZWxmLm9wdGlvbmZsYWdzID0gb3JpZ2luYWxfb3B0aW9uZmxhZ3MKIApAQCAtMTU2NSw3ICsxNTczLDcgQEAKIAogICAgICAgICAjIElmIGB3YW50YCBjb250YWlucyBoZXgtZXNjYXBlZCBjaGFyYWN0ZXIgc3VjaCBhcyAiXHUxMjM0IiwKICAgICAgICAgIyB0aGVuIGB3YW50YCBpcyBhIHN0cmluZyBvZiBzaXggY2hhcmFjdGVycyhlLmcuIFtcLHUsMSwyLDMsNF0pLgotICAgICAgICAjIE9uIHRoZSBvdGhlciBoYW5kLCBgZ290YCBjb3VsZCBiZSBhbiBhbm90aGVyIHNlcXVlbmNlIG9mCisgICAgICAgICMgT24gdGhlIG90aGVyIGhhbmQsIGBnb3RgIGNvdWxkIGJlIGFub3RoZXIgc2VxdWVuY2Ugb2YKICAgICAgICAgIyBjaGFyYWN0ZXJzIHN1Y2ggYXMgW1x1MTIzNF0sIHNvIGB3YW50YCBhbmQgYGdvdGAgc2hvdWxkCiAgICAgICAgICMgYmUgZm9sZGVkIHRvIGhleC1lc2NhcGVkIEFTQ0lJIHN0cmluZyB0byBjb21wYXJlLgogICAgICAgICBnb3QgPSBzZWxmLl90b0FzY2lpKGdvdCkKQEAgLTIyNzUsOSArMjI4Myw2IEBACiAgICAgICAgICAgICAgICBzZWxmLl9kdF90ZWFyRG93biA9PSBvdGhlci5fZHRfdGVhckRvd24gYW5kIFwKICAgICAgICAgICAgICAgIHNlbGYuX2R0X2NoZWNrZXIgPT0gb3RoZXIuX2R0X2NoZWNrZXIKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByZXR1cm4gbm90IHNlbGYgPT0gb3RoZXIKLQogICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIGhhc2goKHNlbGYuX2R0X29wdGlvbmZsYWdzLCBzZWxmLl9kdF9zZXRVcCwgc2VsZi5fZHRfdGVhckRvd24sCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9kdF9jaGVja2VyKSkKQEAgLTIzMDgsNiArMjMxMywxMiBAQAogICAgIF9fc3RyX18gPSBzaG9ydERlc2NyaXB0aW9uCiAKIAorY2xhc3MgX0RvY1Rlc3RTdWl0ZSh1bml0dGVzdC5UZXN0U3VpdGUpOgorCisgICAgZGVmIF9yZW1vdmVUZXN0QXRJbmRleChzZWxmLCBpbmRleCk6CisgICAgICAgIHBhc3MKKworCiBkZWYgRG9jVGVzdFN1aXRlKG1vZHVsZT1Ob25lLCBnbG9icz1Ob25lLCBleHRyYWdsb2JzPU5vbmUsIHRlc3RfZmluZGVyPU5vbmUsCiAgICAgICAgICAgICAgICAgICoqb3B0aW9ucyk6CiAgICAgIiIiCkBAIC0yMzUzLDcgKzIzNjQsNyBAQAogCiAgICAgaWYgbm90IHRlc3RzIGFuZCBzeXMuZmxhZ3Mub3B0aW1pemUgPj0yOgogICAgICAgICAjIFNraXAgZG9jdGVzdHMgd2hlbiBydW5uaW5nIHdpdGggLU8yCi0gICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICAgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKICAgICAgICAgc3VpdGUuYWRkVGVzdChTa2lwRG9jVGVzdENhc2UobW9kdWxlKSkKICAgICAgICAgcmV0dXJuIHN1aXRlCiAgICAgZWxpZiBub3QgdGVzdHM6CkBAIC0yMzY3LDcgKzIzNzgsNyBAQAogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1vZHVsZSwgImhhcyBubyBkb2NzdHJpbmdzIikKIAogICAgIHRlc3RzLnNvcnQoKQotICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKKyAgICBzdWl0ZSA9IF9Eb2NUZXN0U3VpdGUoKQogCiAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CiAgICAgICAgIGlmIGxlbih0ZXN0LmV4YW1wbGVzKSA9PSAwOgpAQCAtMjQ3Nyw3ICsyNDg4LDcgQEAKICAgICBlbmNvZGluZwogICAgICAgQW4gZW5jb2RpbmcgdGhhdCB3aWxsIGJlIHVzZWQgdG8gY29udmVydCB0aGUgZmlsZXMgdG8gdW5pY29kZS4KICAgICAiIiIKLSAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgc3VpdGUgPSBfRG9jVGVzdFN1aXRlKCkKIAogICAgICMgV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgX25vcm1hbGl6ZV9tb2R1bGUgaXMgY2FsbGVkIGF0IHRoZSByaWdodAogICAgICMgbGV2ZWwuICBJZiBpdCB3ZXJlIGNhbGxlZCBpbiBEb2NGaWxlVGVzdCwgdGhlbiB0aGlzIGZ1bmN0aW9uCkBAIC0yNzI3LDEzICsyNzM4LDMwIEBACiAKIAogZGVmIF90ZXN0KCk6Ci0gICAgdGVzdGZpbGVzID0gW2FyZyBmb3IgYXJnIGluIHN5cy5hcmd2WzE6XSBpZiBhcmcgYW5kIGFyZ1swXSAhPSAnLSddCi0gICAgaWYgbm90IHRlc3RmaWxlczoKLSAgICAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCi0gICAgICAgIGlmICdfX2xvYWRlcl9fJyBpbiBnbG9iYWxzKCk6ICAgICAgICAgICMgcHl0aG9uIC1tCi0gICAgICAgICAgICBuYW1lLCBfID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKQotICAgICAgICBwcmludCgidXNhZ2U6IHswfSBbLXZdIGZpbGUgLi4uIi5mb3JtYXQobmFtZSkpCi0gICAgICAgIHJldHVybiAyCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ImRvY3Rlc3QgcnVubmVyIikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctdicsICctLXZlcmJvc2UnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgdmVyeSB2ZXJib3NlIG91dHB1dCBmb3IgYWxsIHRlc3RzJykKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsICctLW9wdGlvbicsIGFjdGlvbj0nYXBwZW5kJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNob2ljZXM9T1BUSU9ORkxBR1NfQllfTkFNRS5rZXlzKCksIGRlZmF1bHQ9W10sCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSgnc3BlY2lmeSBhIGRvY3Rlc3Qgb3B0aW9uIGZsYWcgdG8gYXBwbHknCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHRvIHRoZSB0ZXN0IHJ1bjsgbWF5IGJlIHNwZWNpZmllZCBtb3JlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyB0aGFuIG9uY2UgdG8gYXBwbHkgbXVsdGlwbGUgb3B0aW9ucycpKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmFpbC1mYXN0JywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9KCdzdG9wIHJ1bm5pbmcgdGVzdHMgYWZ0ZXIgZmlyc3QgZmFpbHVyZSAodGhpcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgaXMgYSBzaG9ydGhhbmQgZm9yIC1vIEZBSUxfRkFTVCwgYW5kIGlzJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgLW8gb3B0aW9ucyknKSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaWxlJywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZmlsZSBjb250YWluaW5nIHRoZSB0ZXN0cyB0byBydW4nKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisgICAgdGVzdGZpbGVzID0gYXJncy5maWxlCisgICAgIyBWZXJib3NlIHVzZWQgdG8gYmUgaGFuZGxlZCBieSB0aGUgImluc3BlY3QgYXJndiIgbWFnaWMgaW4gRG9jVGVzdFJ1bm5lciwKKyAgICAjIGJ1dCBzaW5jZSB3ZSBhcmUgdXNpbmcgYXJncGFyc2Ugd2UgYXJlIHBhc3NpbmcgaXQgbWFudWFsbHkgbm93LgorICAgIHZlcmJvc2UgPSBhcmdzLnZlcmJvc2UKKyAgICBvcHRpb25zID0gMAorICAgIGZvciBvcHRpb24gaW4gYXJncy5vcHRpb246CisgICAgICAgIG9wdGlvbnMgfD0gT1BUSU9ORkxBR1NfQllfTkFNRVtvcHRpb25dCisgICAgaWYgYXJncy5mYWlsX2Zhc3Q6CisgICAgICAgIG9wdGlvbnMgfD0gRkFJTF9GQVNUCiAgICAgZm9yIGZpbGVuYW1lIGluIHRlc3RmaWxlczoKICAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoIi5weSIpOgogICAgICAgICAgICAgIyBJdCBpcyBhIG1vZHVsZSAtLSBpbnNlcnQgaXRzIGRpciBpbnRvIHN5cy5wYXRoIGFuZCB0cnkgdG8KQEAgLTI3NDMsOSArMjc3MSwxMCBAQAogICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIGRpcm5hbWUpCiAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhmaWxlbmFtZVs6LTNdKQogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCi0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3Rtb2QobSkKKyAgICAgICAgICAgIGZhaWx1cmVzLCBfID0gdGVzdG1vZChtLCB2ZXJib3NlPXZlcmJvc2UsIG9wdGlvbmZsYWdzPW9wdGlvbnMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UpCisgICAgICAgICAgICBmYWlsdXJlcywgXyA9IHRlc3RmaWxlKGZpbGVuYW1lLCBtb2R1bGVfcmVsYXRpdmU9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyYm9zZT12ZXJib3NlLCBvcHRpb25mbGFncz1vcHRpb25zKQogICAgICAgICBpZiBmYWlsdXJlczoKICAgICAgICAgICAgIHJldHVybiAxCiAgICAgcmV0dXJuIDAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9fZW5jb2RlZF93b3Jkcy5weSBiL0xpYi9lbWFpbC9fZW5jb2RlZF93b3Jkcy5weQppbmRleCA5ZTBjYzc1Li41ZWFhYjM2IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvX2VuY29kZWRfd29yZHMucHkKKysrIGIvTGliL2VtYWlsL19lbmNvZGVkX3dvcmRzLnB5CkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICB0aGVuIGZyb20gdGhlIHJlc3VsdGluZyBieXRlcyBpbnRvIHVuaWNvZGUgdXNpbmcgdGhlIHNwZWNpZmllZCBjaGFyc2V0LiAgSWYKICAgICB0aGUgY3RlLWRlY29kZWQgc3RyaW5nIGRvZXMgbm90IHN1Y2Nlc3NmdWxseSBkZWNvZGUgdXNpbmcgdGhlIHNwZWNpZmllZAogICAgIGNoYXJhY3RlciBzZXQsIGEgZGVmZWN0IGlzIGFkZGVkIHRvIHRoZSBkZWZlY3RzIGxpc3QgYW5kIHRoZSB1bmtub3duIG9jdGV0cwotICAgIGFyZSByZXBsYWNlZCBieSB0aGUgdW5pY29kZSAndW5rbm93bicgY2hhcmFjdGVyIFx1RkRGRi4KKyAgICBhcmUgcmVwbGFjZWQgYnkgdGhlIHVuaWNvZGUgJ3Vua25vd24nIGNoYXJhY3RlciBcXHVGREZGLgogCiAgICAgVGhlIHNwZWNpZmllZCBjaGFyc2V0IGFuZCBsYW5ndWFnZSBhcmUgcmV0dXJuZWQuICBUaGUgZGVmYXVsdCBmb3IgbGFuZ3VhZ2UsCiAgICAgd2hpY2ggaXMgcmFyZWx5IGlmIGV2ZXIgZW5jb3VudGVyZWQsIGlzIHRoZSBlbXB0eSBzdHJpbmcuCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkgYi9MaWIvZW1haWwvX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKaW5kZXggMDM2OWUwMS4uYTliZGY0NCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQpAQCAtNzAsNyArNzAsOCBAQAogaW1wb3J0IHJlCiBpbXBvcnQgdXJsbGliICAgIyBGb3IgdXJsbGliLnBhcnNlLnVucXVvdGUKIGZyb20gc3RyaW5nIGltcG9ydCBoZXhkaWdpdHMKLWZyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUsIE9yZGVyZWREaWN0Citmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAorZnJvbSBvcGVyYXRvciBpbXBvcnQgaXRlbWdldHRlcgogZnJvbSBlbWFpbCBpbXBvcnQgX2VuY29kZWRfd29yZHMgYXMgX2V3CiBmcm9tIGVtYWlsIGltcG9ydCBlcnJvcnMKIGZyb20gZW1haWwgaW1wb3J0IHV0aWxzCkBAIC0zNjgsOCArMzY5LDcgQEAKICAgICAgICAgICAgICAgICB5aWVsZCAoaW5kZW50ICsgJyAgICAhISBpbnZhbGlkIGVsZW1lbnQgaW4gdG9rZW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaXN0OiB7IXJ9Jy5mb3JtYXQodG9rZW4pKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmb3IgbGluZSBpbiB0b2tlbi5fcHAoaW5kZW50KycgICAgJyk6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGxpbmUKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHRva2VuLl9wcChpbmRlbnQrJyAgICAnKQogICAgICAgICBpZiBzZWxmLmRlZmVjdHM6CiAgICAgICAgICAgICBleHRyYSA9ICcgRGVmZWN0czoge30nLmZvcm1hdChzZWxmLmRlZmVjdHMpCiAgICAgICAgIGVsc2U6CkBAIC0xMDk5LDE1ICsxMDk5LDM0IEBACiAgICAgICAgICAgICAgICAgcGFyYW1zW25hbWVdID0gW10KICAgICAgICAgICAgIHBhcmFtc1tuYW1lXS5hcHBlbmQoKHRva2VuLnNlY3Rpb25fbnVtYmVyLCB0b2tlbikpCiAgICAgICAgIGZvciBuYW1lLCBwYXJ0cyBpbiBwYXJhbXMuaXRlbXMoKToKLSAgICAgICAgICAgIHBhcnRzID0gc29ydGVkKHBhcnRzKQotICAgICAgICAgICAgIyBYWFg6IHRoZXJlIG1pZ2h0IGJlIG1vcmUgcmVjb3Zlcnkgd2UgY291bGQgZG8gaGVyZSBpZiwgZm9yCi0gICAgICAgICAgICAjIGV4YW1wbGUsIHRoaXMgaXMgcmVhbGx5IGEgY2FzZSBvZiBhIGR1cGxpY2F0ZSBhdHRyaWJ1dGUgbmFtZS4KKyAgICAgICAgICAgIHBhcnRzID0gc29ydGVkKHBhcnRzLCBrZXk9aXRlbWdldHRlcigwKSkKKyAgICAgICAgICAgIGZpcnN0X3BhcmFtID0gcGFydHNbMF1bMV0KKyAgICAgICAgICAgIGNoYXJzZXQgPSBmaXJzdF9wYXJhbS5jaGFyc2V0CisgICAgICAgICAgICAjIE91ciBhcmJpdHJhcnkgZXJyb3IgcmVjb3ZlcnkgaXMgdG8gaWdub3JlIGR1cGxpY2F0ZSBwYXJhbWV0ZXJzLAorICAgICAgICAgICAgIyB0byB1c2UgYXBwZWFyYW5jZSBvcmRlciBpZiB0aGVyZSBhcmUgZHVwbGljYXRlIHJmYyAyMjMxIHBhcnRzLAorICAgICAgICAgICAgIyBhbmQgdG8gaWdub3JlIGdhcHMuICBUaGlzIG1pbWljcyB0aGUgZXJyb3IgcmVjb3Zlcnkgb2YgZ2V0X3BhcmFtLgorICAgICAgICAgICAgaWYgbm90IGZpcnN0X3BhcmFtLmV4dGVuZGVkIGFuZCBsZW4ocGFydHMpID4gMToKKyAgICAgICAgICAgICAgICBpZiBwYXJ0c1sxXVswXSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBwYXJ0c1sxXVsxXS5kZWZlY3RzLmFwcGVuZChlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICdkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWU7IGR1cGxpY2F0ZShzKSBpZ25vcmVkJykpCisgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gcGFydHNbOjFdCisgICAgICAgICAgICAgICAgIyBFbHNlIGFzc3VtZSB0aGUgKjAqIHdhcyBtaXNzaW5nLi4ubm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CisgICAgICAgICAgICAgICAgIyBmcm9tIGdldF9wYXJhbSwgYnV0IHdlIHJlZ2lzdGVyZWQgYSBkZWZlY3QgZm9yIHRoaXMgZWFybGllci4KICAgICAgICAgICAgIHZhbHVlX3BhcnRzID0gW10KLSAgICAgICAgICAgIGNoYXJzZXQgPSBwYXJ0c1swXVsxXS5jaGFyc2V0Ci0gICAgICAgICAgICBmb3IgaSwgKHNlY3Rpb25fbnVtYmVyLCBwYXJhbSkgaW4gZW51bWVyYXRlKHBhcnRzKToKKyAgICAgICAgICAgIGkgPSAwCisgICAgICAgICAgICBmb3Igc2VjdGlvbl9udW1iZXIsIHBhcmFtIGluIHBhcnRzOgogICAgICAgICAgICAgICAgIGlmIHNlY3Rpb25fbnVtYmVyICE9IGk6Ci0gICAgICAgICAgICAgICAgICAgIHBhcmFtLmRlZmVjdHMuYXBwZW5kKGVycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgImluY29uc2lzdGVudCBtdWx0aXBhcnQgcGFyYW1ldGVyIG51bWJlcmluZyIpKQorICAgICAgICAgICAgICAgICAgICAjIFdlIGNvdWxkIGdldCBmYW5jaWVyIGhlcmUgYW5kIGxvb2sgZm9yIGEgY29tcGxldGUKKyAgICAgICAgICAgICAgICAgICAgIyBkdXBsaWNhdGUgZXh0ZW5kZWQgcGFyYW1ldGVyIGFuZCBpZ25vcmUgdGhlIHNlY29uZCBvbmUKKyAgICAgICAgICAgICAgICAgICAgIyBzZWVuLiAgQnV0IHdlJ3JlIG5vdCBkb2luZyB0aGF0LiAgVGhlIG9sZCBjb2RlIGRpZG4ndC4KKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBhcmFtLmV4dGVuZGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uZGVmZWN0cy5hcHBlbmQoZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3QoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2R1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZTsgZHVwbGljYXRlIGlnbm9yZWQnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5kZWZlY3RzLmFwcGVuZChlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb25zaXN0ZW50IFJGQzIyMzEgcGFyYW1ldGVyIG51bWJlcmluZyIpKQorICAgICAgICAgICAgICAgIGkgKz0gMQogICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyYW0ucGFyYW1fdmFsdWUKICAgICAgICAgICAgICAgICBpZiBwYXJhbS5leHRlbmRlZDoKICAgICAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMTMxNSwyNCArMTMzNCwyMiBAQAogIyBQYXJzZXIKICMKIAotIiIiUGFyc2Ugc3RyaW5ncyBhY2NvcmRpbmcgdG8gUkZDODIyLzIwNDcvMjgyMi81MzIyIHJ1bGVzLgotCi1UaGlzIGlzIGEgc3RhdGVsZXNzIHBhcnNlci4gIEVhY2ggZ2V0X1hYWCBmdW5jdGlvbiBhY2NlcHRzIGEgc3RyaW5nIGFuZAotcmV0dXJucyBlaXRoZXIgYSBUZXJtaW5hbCBvciBhIFRva2VuTGlzdCByZXByZXNlbnRpbmcgdGhlIFJGQyBvYmplY3QgbmFtZWQKLWJ5IHRoZSBtZXRob2QgYW5kIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmluZyB1bnBhcnNlZCBjaGFyYWN0ZXJzCi1mcm9tIHRoZSBpbnB1dC4gIFRodXMgYSBwYXJzZXIgbWV0aG9kIGNvbnN1bWVzIHRoZSBuZXh0IHN5bnRhY3RpYyBjb25zdHJ1Y3QKLW9mIGEgZ2l2ZW4gdHlwZSBhbmQgcmV0dXJucyBhIHRva2VuIHJlcHJlc2VudGluZyB0aGUgY29uc3RydWN0IHBsdXMgdGhlCi11bnBhcnNlZCByZW1haW5kZXIgb2YgdGhlIGlucHV0IHN0cmluZy4KLQotRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdCBlbGVtZW50IG9mIGEgc3RydWN0dXJlZCBoZWFkZXIgaXMgYSAncGhyYXNlJywKLXRoZW46Ci0KLSAgICBwaHJhc2UsIHZhbHVlID0gZ2V0X3BocmFzZSh2YWx1ZSkKLQotcmV0dXJucyB0aGUgY29tcGxldGUgcGhyYXNlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgdmFsdWUsIHBsdXMgYW55Ci1jaGFyYWN0ZXJzIGxlZnQgaW4gdGhlIHN0cmluZyBhZnRlciB0aGUgcGhyYXNlIGlzIHJlbW92ZWQuCi0KLSIiIgorIyBQYXJzZSBzdHJpbmdzIGFjY29yZGluZyB0byBSRkM4MjIvMjA0Ny8yODIyLzUzMjIgcnVsZXMuCisjCisjIFRoaXMgaXMgYSBzdGF0ZWxlc3MgcGFyc2VyLiAgRWFjaCBnZXRfWFhYIGZ1bmN0aW9uIGFjY2VwdHMgYSBzdHJpbmcgYW5kCisjIHJldHVybnMgZWl0aGVyIGEgVGVybWluYWwgb3IgYSBUb2tlbkxpc3QgcmVwcmVzZW50aW5nIHRoZSBSRkMgb2JqZWN0IG5hbWVkCisjIGJ5IHRoZSBtZXRob2QgYW5kIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHJlbWFpbmluZyB1bnBhcnNlZCBjaGFyYWN0ZXJzCisjIGZyb20gdGhlIGlucHV0LiAgVGh1cyBhIHBhcnNlciBtZXRob2QgY29uc3VtZXMgdGhlIG5leHQgc3ludGFjdGljIGNvbnN0cnVjdAorIyBvZiBhIGdpdmVuIHR5cGUgYW5kIHJldHVybnMgYSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIGNvbnN0cnVjdCBwbHVzIHRoZQorIyB1bnBhcnNlZCByZW1haW5kZXIgb2YgdGhlIGlucHV0IHN0cmluZy4KKyMKKyMgRm9yIGV4YW1wbGUsIGlmIHRoZSBmaXJzdCBlbGVtZW50IG9mIGEgc3RydWN0dXJlZCBoZWFkZXIgaXMgYSAncGhyYXNlJywKKyMgdGhlbjoKKyMKKyMgICAgIHBocmFzZSwgdmFsdWUgPSBnZXRfcGhyYXNlKHZhbHVlKQorIworIyByZXR1cm5zIHRoZSBjb21wbGV0ZSBwaHJhc2UgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyB2YWx1ZSwgcGx1cyBhbnkKKyMgY2hhcmFjdGVycyBsZWZ0IGluIHRoZSBzdHJpbmcgYWZ0ZXIgdGhlIHBocmFzZSBpcyByZW1vdmVkLgogCiBfd3NwX3NwbGl0dGVyID0gcmUuY29tcGlsZShyJyhbe31dKyknLmZvcm1hdCgnJy5qb2luKFdTUCkpKS5zcGxpdAogX25vbl9hdG9tX2VuZF9tYXRjaGVyID0gcmUuY29tcGlsZShyIltee31dKyIuZm9ybWF0KApAQCAtMjkwMCw3ICsyOTE3LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHRva2VuLCB2YWx1ZSA9IGdldF90b2tlbih2YWx1ZSkKICAgICBleGNlcHQgZXJyb3JzLkhlYWRlclBhcnNlRXJyb3I6Ci0gICAgICAgIGN0eXBlLmRlZmVjdHMuYXBwZW5kKGVycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0KAorICAgICAgICBkaXNwX2hlYWRlci5kZWZlY3RzLmFwcGVuZChlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdCgKICAgICAgICAgICAgICJFeHBlY3RlZCBjb250ZW50IGRpc3Bvc2l0aW9uIGJ1dCBmb3VuZCB7IXJ9Ii5mb3JtYXQodmFsdWUpKSkKICAgICAgICAgX2ZpbmRfbWltZV9wYXJhbWV0ZXJzKGRpc3BfaGVhZGVyLCB2YWx1ZSkKICAgICAgICAgcmV0dXJuIGRpc3BfaGVhZGVyCkBAIC0yOTMxLDggKzI5NDgsOCBAQAogICAgIHRyeToKICAgICAgICAgdG9rZW4sIHZhbHVlID0gZ2V0X3Rva2VuKHZhbHVlKQogICAgIGV4Y2VwdCBlcnJvcnMuSGVhZGVyUGFyc2VFcnJvcjoKLSAgICAgICAgY3R5cGUuZGVmZWN0cy5hcHBlbmQoZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3QoCi0gICAgICAgICAgICAiRXhwZWN0ZWQgY29udGVudCB0cm5hc2ZlciBlbmNvZGluZyBidXQgZm91bmQgeyFyfSIuZm9ybWF0KHZhbHVlKSkpCisgICAgICAgIGN0ZV9oZWFkZXIuZGVmZWN0cy5hcHBlbmQoZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3QoCisgICAgICAgICAgICAiRXhwZWN0ZWQgY29udGVudCB0cmFuc2ZlciBlbmNvZGluZyBidXQgZm91bmQgeyFyfSIuZm9ybWF0KHZhbHVlKSkpCiAgICAgZWxzZToKICAgICAgICAgY3RlX2hlYWRlci5hcHBlbmQodG9rZW4pCiAgICAgICAgIGN0ZV9oZWFkZXIuY3RlID0gdG9rZW4udmFsdWUuc3RyaXAoKS5sb3dlcigpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkgYi9MaWIvZW1haWwvY29udGVudG1hbmFnZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM2MzY1MgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbWFpbC9jb250ZW50bWFuYWdlci5weQpAQCAtMCwwICsxLDI0OSBAQAoraW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgZW1haWwuY2hhcnNldAoraW1wb3J0IGVtYWlsLm1lc3NhZ2UKK2ltcG9ydCBlbWFpbC5lcnJvcnMKK2Zyb20gZW1haWwgaW1wb3J0IHF1b3ByaW1pbWUKKworY2xhc3MgQ29udGVudE1hbmFnZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuZ2V0X2hhbmRsZXJzID0ge30KKyAgICAgICAgc2VsZi5zZXRfaGFuZGxlcnMgPSB7fQorCisgICAgZGVmIGFkZF9nZXRfaGFuZGxlcihzZWxmLCBrZXksIGhhbmRsZXIpOgorICAgICAgICBzZWxmLmdldF9oYW5kbGVyc1trZXldID0gaGFuZGxlcgorCisgICAgZGVmIGdldF9jb250ZW50KHNlbGYsIG1zZywgKmFyZ3MsICoqa3cpOgorICAgICAgICBjb250ZW50X3R5cGUgPSBtc2cuZ2V0X2NvbnRlbnRfdHlwZSgpCisgICAgICAgIGlmIGNvbnRlbnRfdHlwZSBpbiBzZWxmLmdldF9oYW5kbGVyczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9oYW5kbGVyc1tjb250ZW50X3R5cGVdKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIG1haW50eXBlID0gbXNnLmdldF9jb250ZW50X21haW50eXBlKCkKKyAgICAgICAgaWYgbWFpbnR5cGUgaW4gc2VsZi5nZXRfaGFuZGxlcnM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXRfaGFuZGxlcnNbbWFpbnR5cGVdKG1zZywgKmFyZ3MsICoqa3cpCisgICAgICAgIGlmICcnIGluIHNlbGYuZ2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2hhbmRsZXJzWycnXShtc2csICphcmdzLCAqKmt3KQorICAgICAgICByYWlzZSBLZXlFcnJvcihjb250ZW50X3R5cGUpCisKKyAgICBkZWYgYWRkX3NldF9oYW5kbGVyKHNlbGYsIHR5cGVrZXksIGhhbmRsZXIpOgorICAgICAgICBzZWxmLnNldF9oYW5kbGVyc1t0eXBla2V5XSA9IGhhbmRsZXIKKworICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csIG9iaiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBpZiBtc2cuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgICMgWFhYOiBpcyB0aGlzIGVycm9yIGEgZ29vZCBpZGVhIG9yIG5vdD8gIFdlIGNhbiByZW1vdmUgaXQgbGF0ZXIsCisgICAgICAgICAgICAjIGJ1dCB3ZSBjYW4ndCBhZGQgaXQgbGF0ZXIsIHNvIGRvIGl0IGZvciBub3cuCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInNldF9jb250ZW50IG5vdCB2YWxpZCBvbiBtdWx0aXBhcnQiKQorICAgICAgICBoYW5kbGVyID0gc2VsZi5fZmluZF9zZXRfaGFuZGxlcihtc2csIG9iaikKKyAgICAgICAgbXNnLmNsZWFyX2NvbnRlbnQoKQorICAgICAgICBoYW5kbGVyKG1zZywgb2JqLCAqYXJncywgKiprdykKKworICAgIGRlZiBfZmluZF9zZXRfaGFuZGxlcihzZWxmLCBtc2csIG9iaik6CisgICAgICAgIGZ1bGxfcGF0aF9mb3JfZXJyb3IgPSBOb25lCisgICAgICAgIGZvciB0eXAgaW4gdHlwZShvYmopLl9fbXJvX186CisgICAgICAgICAgICBpZiB0eXAgaW4gc2VsZi5zZXRfaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW3R5cF0KKyAgICAgICAgICAgIHFuYW1lID0gdHlwLl9fcXVhbG5hbWVfXworICAgICAgICAgICAgbW9kbmFtZSA9IGdldGF0dHIodHlwLCAnX19tb2R1bGVfXycsICcnKQorICAgICAgICAgICAgZnVsbF9wYXRoID0gJy4nLmpvaW4oKG1vZG5hbWUsIHFuYW1lKSkgaWYgbW9kbmFtZSBlbHNlIHFuYW1lCisgICAgICAgICAgICBpZiBmdWxsX3BhdGhfZm9yX2Vycm9yIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZnVsbF9wYXRoX2Zvcl9lcnJvciA9IGZ1bGxfcGF0aAorICAgICAgICAgICAgaWYgZnVsbF9wYXRoIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tmdWxsX3BhdGhdCisgICAgICAgICAgICBpZiBxbmFtZSBpbiBzZWxmLnNldF9oYW5kbGVyczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zZXRfaGFuZGxlcnNbcW5hbWVdCisgICAgICAgICAgICBuYW1lID0gdHlwLl9fbmFtZV9fCisgICAgICAgICAgICBpZiBuYW1lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNldF9oYW5kbGVyc1tuYW1lXQorICAgICAgICBpZiBOb25lIGluIHNlbGYuc2V0X2hhbmRsZXJzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc2V0X2hhbmRsZXJzW05vbmVdCisgICAgICAgIHJhaXNlIEtleUVycm9yKGZ1bGxfcGF0aF9mb3JfZXJyb3IpCisKKworcmF3X2RhdGFfbWFuYWdlciA9IENvbnRlbnRNYW5hZ2VyKCkKKworCitkZWYgZ2V0X3RleHRfY29udGVudChtc2csIGVycm9ycz0ncmVwbGFjZScpOgorICAgIGNvbnRlbnQgPSBtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpCisgICAgY2hhcnNldCA9IG1zZy5nZXRfcGFyYW0oJ2NoYXJzZXQnLCAnQVNDSUknKQorICAgIHJldHVybiBjb250ZW50LmRlY29kZShjaGFyc2V0LCBlcnJvcnM9ZXJyb3JzKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ3RleHQnLCBnZXRfdGV4dF9jb250ZW50KQorCisKK2RlZiBnZXRfbm9uX3RleHRfY29udGVudChtc2cpOgorICAgIHJldHVybiBtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpCitmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX2dldF9oYW5kbGVyKG1haW50eXBlLCBnZXRfbm9uX3RleHRfY29udGVudCkKKworCitkZWYgZ2V0X21lc3NhZ2VfY29udGVudChtc2cpOgorICAgIHJldHVybiBtc2cuZ2V0X3BheWxvYWQoMCkKK2ZvciBzdWJ0eXBlIGluICdyZmM4MjIgZXh0ZXJuYWwtYm9keScuc3BsaXQoKToKKyAgICByYXdfZGF0YV9tYW5hZ2VyLmFkZF9nZXRfaGFuZGxlcignbWVzc2FnZS8nK3N1YnR5cGUsIGdldF9tZXNzYWdlX2NvbnRlbnQpCisKKworZGVmIGdldF9hbmRfZml4dXBfdW5rbm93bl9tZXNzYWdlX2NvbnRlbnQobXNnKToKKyAgICAjIElmIHdlIGRvbid0IHVuZGVyc3RhbmQgYSBtZXNzYWdlIHN1YnR5cGUsIHdlIGFyZSBzdXBwb3NlZCB0byB0cmVhdCBpdCBhcworICAgICMgaWYgaXQgd2VyZSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0sIHBlcgorICAgICMgdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyMDQ2I3NlY3Rpb24tNS4yLjQuICBGZWVkcGFyc2VyIGRvZXNuJ3QgZG8gdGhhdCwKKyAgICAjIHNvIGRvIG91ciBiZXN0IHRvIGZpeCB0aGluZ3MgdXAuICBOb3RlIHRoYXQgaXQgaXMgKm5vdCogYXBwcm9wcmlhdGUgdG8KKyAgICAjIG1vZGVsIG1lc3NhZ2UvcGFydGlhbCBjb250ZW50IGFzIE1lc3NhZ2Ugb2JqZWN0cywgc28gdGhleSBhcmUgaGFuZGxlZAorICAgICMgaGVyZSBhcyB3ZWxsLiAgKEhvdyB0byByZWFzc2VtYmxlIHRoZW0gaXMgb3V0IG9mIHNjb3BlIGZvciB0aGlzIGNvbW1lbnQgOikKKyAgICByZXR1cm4gYnl0ZXMobXNnLmdldF9wYXlsb2FkKDApKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfZ2V0X2hhbmRsZXIoJ21lc3NhZ2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2FuZF9maXh1cF91bmtub3duX21lc3NhZ2VfY29udGVudCkKKworCitkZWYgX3ByZXBhcmVfc2V0KG1zZywgbWFpbnR5cGUsIHN1YnR5cGUsIGhlYWRlcnMpOgorICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAnLycuam9pbigobWFpbnR5cGUsIHN1YnR5cGUpKQorICAgIGlmIGhlYWRlcnM6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKGhlYWRlcnNbMF0sICduYW1lJyk6CisgICAgICAgICAgICBtcCA9IG1zZy5wb2xpY3kKKyAgICAgICAgICAgIGhlYWRlcnMgPSBbbXAuaGVhZGVyX2ZhY3RvcnkoKm1wLmhlYWRlcl9zb3VyY2VfcGFyc2UoW2hlYWRlcl0pKQorICAgICAgICAgICAgICAgICAgICAgICBmb3IgaGVhZGVyIGluIGhlYWRlcnNdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciBoZWFkZXIgaW4gaGVhZGVyczoKKyAgICAgICAgICAgICAgICBpZiBoZWFkZXIuZGVmZWN0czoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgaGVhZGVyLmRlZmVjdHNbMF0KKyAgICAgICAgICAgICAgICBtc2dbaGVhZGVyLm5hbWVdID0gaGVhZGVyCisgICAgICAgIGV4Y2VwdCBlbWFpbC5lcnJvcnMuSGVhZGVyRGVmZWN0IGFzIGV4YzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgaGVhZGVyOiB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIuZm9sZChwb2xpY3k9bXNnLnBvbGljeSkpKSBmcm9tIGV4YworCisKK2RlZiBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcyk6CisgICAgaWYgZGlzcG9zaXRpb24gaXMgTm9uZSBhbmQgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGRpc3Bvc2l0aW9uID0gJ2F0dGFjaG1lbnQnCisgICAgaWYgZGlzcG9zaXRpb24gaXMgbm90IE5vbmU6CisgICAgICAgIG1zZ1snQ29udGVudC1EaXNwb3NpdGlvbiddID0gZGlzcG9zaXRpb24KKyAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnLnNldF9wYXJhbSgnZmlsZW5hbWUnLAorICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcj0nQ29udGVudC1EaXNwb3NpdGlvbicsCisgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZT1UcnVlKQorICAgIGlmIGNpZCBpcyBub3QgTm9uZToKKyAgICAgICAgbXNnWydDb250ZW50LUlEJ10gPSBjaWQKKyAgICBpZiBwYXJhbXMgaXMgbm90IE5vbmU6CisgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHBhcmFtcy5pdGVtcygpOgorICAgICAgICAgICAgbXNnLnNldF9wYXJhbShrZXksIHZhbHVlKQorCisKKyMgWFhYOiBUaGlzIGlzIGEgY2xlYW5lZC11cCB2ZXJzaW9uIG9mIGJhc2U2NG1pbWUuYm9keV9lbmNvZGUuICBJdCB3b3VsZAorIyBiZSBuaWNlIHRvIGRyb3AgYm90aCB0aGlzIGFuZCBxdW9wcmltaW1lLmJvZHlfZW5jb2RlIGluIGZhdm9yIG9mCisjIGVuaGFuY2VkIGJpbmFzY2lpIHJvdXRpbmVzIHRoYXQgYWNjZXB0ZWQgYSBtYXhfbGluZV9sZW5ndGggcGFyYW1ldGVyLgorZGVmIF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heF9saW5lX2xlbmd0aCk6CisgICAgZW5jb2RlZF9saW5lcyA9IFtdCisgICAgdW5lbmNvZGVkX2J5dGVzX3Blcl9saW5lID0gbWF4X2xpbmVfbGVuZ3RoICogMyAvLyA0CisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCB1bmVuY29kZWRfYnl0ZXNfcGVyX2xpbmUpOgorICAgICAgICB0aGlzbGluZSA9IGRhdGFbaTppK3VuZW5jb2RlZF9ieXRlc19wZXJfbGluZV0KKyAgICAgICAgZW5jb2RlZF9saW5lcy5hcHBlbmQoYmluYXNjaWkuYjJhX2Jhc2U2NCh0aGlzbGluZSkuZGVjb2RlKCdhc2NpaScpKQorICAgIHJldHVybiAnJy5qb2luKGVuY29kZWRfbGluZXMpCisKKworZGVmIF9lbmNvZGVfdGV4dChzdHJpbmcsIGNoYXJzZXQsIGN0ZSwgcG9saWN5KToKKyAgICBsaW5lcyA9IHN0cmluZy5lbmNvZGUoY2hhcnNldCkuc3BsaXRsaW5lcygpCisgICAgbGluZXNlcCA9IHBvbGljeS5saW5lc2VwLmVuY29kZSgnYXNjaWknKQorICAgIGRlZiBlbWJlZGVkX2JvZHkobGluZXMpOiByZXR1cm4gbGluZXNlcC5qb2luKGxpbmVzKSArIGxpbmVzZXAKKyAgICBkZWYgbm9ybWFsX2JvZHkobGluZXMpOiByZXR1cm4gYidcbicuam9pbihsaW5lcykgKyBiJ1xuJworICAgIGlmIGN0ZT09Tm9uZToKKyAgICAgICAgIyBVc2UgaGV1cmlzdGljcyB0byBkZWNpZGUgb24gdGhlICJiZXN0IiBlbmNvZGluZy4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuICc3Yml0Jywgbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBpZiAocG9saWN5LmN0ZV90eXBlID09ICc4Yml0JyBhbmQKKyAgICAgICAgICAgICAgICBtYXgobGVuKHgpIGZvciB4IGluIGxpbmVzKSA8PSBwb2xpY3kubWF4X2xpbmVfbGVuZ3RoKToKKyAgICAgICAgICAgIHJldHVybiAnOGJpdCcsIG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgIHNuaWZmID0gZW1iZWRlZF9ib2R5KGxpbmVzWzoxMF0pCisgICAgICAgIHNuaWZmX3FwID0gcXVvcHJpbWltZS5ib2R5X2VuY29kZShzbmlmZi5kZWNvZGUoJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgICAgIHNuaWZmX2Jhc2U2NCA9IGJpbmFzY2lpLmIyYV9iYXNlNjQoc25pZmYpCisgICAgICAgICMgVGhpcyBpcyBhIGxpdHRsZSB1bmZhaXIgdG8gcXA7IGl0IGluY2x1ZGVzIGxpbmVzZXBzLCBiYXNlNjQgZG9lc24ndC4KKyAgICAgICAgaWYgbGVuKHNuaWZmX3FwKSA+IGxlbihzbmlmZl9iYXNlNjQpOgorICAgICAgICAgICAgY3RlID0gJ2Jhc2U2NCcKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGN0ZSA9ICdxdW90ZWQtcHJpbnRhYmxlJworICAgICAgICAgICAgaWYgbGVuKGxpbmVzKSA8PSAxMDoKKyAgICAgICAgICAgICAgICByZXR1cm4gY3RlLCBzbmlmZl9xcAorICAgIGlmIGN0ZSA9PSAnN2JpdCc6CisgICAgICAgIGRhdGEgPSBub3JtYWxfYm9keShsaW5lcykuZGVjb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgPT0gJzhiaXQnOgorICAgICAgICBkYXRhID0gbm9ybWFsX2JvZHkobGluZXMpLmRlY29kZSgnYXNjaWknLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICBlbGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6CisgICAgICAgIGRhdGEgPSBxdW9wcmltaW1lLmJvZHlfZW5jb2RlKG5vcm1hbF9ib2R5KGxpbmVzKS5kZWNvZGUoJ2xhdGluLTEnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbGlmIGN0ZSA9PSAnYmFzZTY0JzoKKyAgICAgICAgZGF0YSA9IF9lbmNvZGVfYmFzZTY0KGVtYmVkZWRfYm9keShsaW5lcyksIHBvbGljeS5tYXhfbGluZV9sZW5ndGgpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5rbm93biBjb250ZW50IHRyYW5zZmVyIGVuY29kaW5nIHt9Ii5mb3JtYXQoY3RlKSkKKyAgICByZXR1cm4gY3RlLCBkYXRhCisKKworZGVmIHNldF90ZXh0X2NvbnRlbnQobXNnLCBzdHJpbmcsIHN1YnR5cGU9InBsYWluIiwgY2hhcnNldD0ndXRmLTgnLCBjdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIGRpc3Bvc2l0aW9uPU5vbmUsIGZpbGVuYW1lPU5vbmUsIGNpZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgX3ByZXBhcmVfc2V0KG1zZywgJ3RleHQnLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIGN0ZSwgcGF5bG9hZCA9IF9lbmNvZGVfdGV4dChzdHJpbmcsIGNoYXJzZXQsIGN0ZSwgbXNnLnBvbGljeSkKKyAgICBtc2cuc2V0X3BheWxvYWQocGF5bG9hZCkKKyAgICBtc2cuc2V0X3BhcmFtKCdjaGFyc2V0JywKKyAgICAgICAgICAgICAgICAgIGVtYWlsLmNoYXJzZXQuQUxJQVNFUy5nZXQoY2hhcnNldCwgY2hhcnNldCksCisgICAgICAgICAgICAgICAgICByZXBsYWNlPVRydWUpCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK3Jhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKHN0ciwgc2V0X3RleHRfY29udGVudCkKKworCitkZWYgc2V0X21lc3NhZ2VfY29udGVudChtc2csIG1lc3NhZ2UsIHN1YnR5cGU9InJmYzgyMiIsIGN0ZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgaWYgc3VidHlwZSA9PSAncGFydGlhbCc6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm1lc3NhZ2UvcGFydGlhbCBpcyBub3Qgc3VwcG9ydGVkIGZvciBNZXNzYWdlIG9iamVjdHMiKQorICAgIGlmIHN1YnR5cGUgPT0gJ3JmYzgyMic6CisgICAgICAgIGlmIGN0ZSBub3QgaW4gKE5vbmUsICc3Yml0JywgJzhiaXQnLCAnYmluYXJ5Jyk6CisgICAgICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuMSBtYW5kYXRlLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAibWVzc2FnZS9yZmM4MjIgcGFydHMgZG8gbm90IHN1cHBvcnQgY3RlPXt9Ii5mb3JtYXQoY3RlKSkKKyAgICAgICAgIyA4Yml0IHdpbGwgZ2V0IGNvZXJjZWQgb24gc2VyaWFsaXphdGlvbiBpZiBwb2xpY3kuY3RlX3R5cGU9JzdiaXQnLiAgV2UKKyAgICAgICAgIyBtYXkgZW5kIHVwIGNsYWltaW5nIDhiaXQgd2hlbiBpdCBpc24ndCBuZWVkZWQsIGJ1dCB0aGUgb25seSBuZWdhdGl2ZQorICAgICAgICAjIHJlc3VsdCBvZiB0aGF0IHNob3VsZCBiZSBhIGdhdGV3YXkgdGhhdCBuZWVkcyB0byBjb2VyY2UgdG8gN2JpdAorICAgICAgICAjIGhhdmluZyB0byBsb29rIHRocm91Z2ggdGhlIHdob2xlIGVtYmVkZGVkIG1lc3NhZ2UgdG8gZGlzY292ZXIgd2hldGhlcgorICAgICAgICAjIG9yIG5vdCBpdCBhY3R1YWxseSBoYXMgdG8gZG8gYW55dGhpbmcuCisgICAgICAgIGN0ZSA9ICc4Yml0JyBpZiBjdGUgaXMgTm9uZSBlbHNlIGN0ZQorICAgIGVsaWYgc3VidHlwZSA9PSAnZXh0ZXJuYWwtYm9keSc6CisgICAgICAgIGlmIGN0ZSBub3QgaW4gKE5vbmUsICc3Yml0Jyk6CisgICAgICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIwNDYjc2VjdGlvbi01LjIuMyBtYW5kYXRlLgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAibWVzc2FnZS9leHRlcm5hbC1ib2R5IHBhcnRzIGRvIG5vdCBzdXBwb3J0IGN0ZT17fSIuZm9ybWF0KGN0ZSkpCisgICAgICAgIGN0ZSA9ICc3Yml0JworICAgIGVsaWYgY3RlIGlzIE5vbmU6CisgICAgICAgICMgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NiNzZWN0aW9uLTUuMi40IHNheXMgYWxsIGZ1dHVyZQorICAgICAgICAjIHN1YnR5cGVzIHNob3VsZCBiZSByZXN0cmljdGVkIHRvIDdiaXQsIHNvIGFzc3VtZSB0aGF0LgorICAgICAgICBjdGUgPSAnN2JpdCcKKyAgICBfcHJlcGFyZV9zZXQobXNnLCAnbWVzc2FnZScsIHN1YnR5cGUsIGhlYWRlcnMpCisgICAgbXNnLnNldF9wYXlsb2FkKFttZXNzYWdlXSkKKyAgICBtc2dbJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2RpbmcnXSA9IGN0ZQorICAgIF9maW5hbGl6ZV9zZXQobXNnLCBkaXNwb3NpdGlvbiwgZmlsZW5hbWUsIGNpZCwgcGFyYW1zKQorcmF3X2RhdGFfbWFuYWdlci5hZGRfc2V0X2hhbmRsZXIoZW1haWwubWVzc2FnZS5NZXNzYWdlLCBzZXRfbWVzc2FnZV9jb250ZW50KQorCisKK2RlZiBzZXRfYnl0ZXNfY29udGVudChtc2csIGRhdGEsIG1haW50eXBlLCBzdWJ0eXBlLCBjdGU9J2Jhc2U2NCcsCisgICAgICAgICAgICAgICAgICAgICBkaXNwb3NpdGlvbj1Ob25lLCBmaWxlbmFtZT1Ob25lLCBjaWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcmFtcz1Ob25lLCBoZWFkZXJzPU5vbmUpOgorICAgIF9wcmVwYXJlX3NldChtc2csIG1haW50eXBlLCBzdWJ0eXBlLCBoZWFkZXJzKQorICAgIGlmIGN0ZSA9PSAnYmFzZTY0JzoKKyAgICAgICAgZGF0YSA9IF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heF9saW5lX2xlbmd0aD1tc2cucG9saWN5Lm1heF9saW5lX2xlbmd0aCkKKyAgICBlbGlmIGN0ZSA9PSAncXVvdGVkLXByaW50YWJsZSc6CisgICAgICAgICMgWFhYOiBxdW9wcmltaW1lLmJvZHlfZW5jb2RlIHdvbid0IGVuY29kZSBuZXdsaW5lIGNoYXJhY3RlcnMgaW4gZGF0YSwKKyAgICAgICAgIyBzbyB3ZSBjYW4ndCB1c2UgaXQuICBUaGlzIG1lYW5zIG1heF9saW5lX2xlbmd0aCBpcyBpZ25vcmVkLiAgQW5vdGhlcgorICAgICAgICAjIGJ1ZyB0byBmaXggbGF0ZXIuICAoTm90ZTogZW5jb2RlcnMucXVvcHJpIGlzIGJyb2tlbiBvbiBsaW5lIGVuZHMuKQorICAgICAgICBkYXRhID0gYmluYXNjaWkuYjJhX3FwKGRhdGEsIGlzdGV4dD1GYWxzZSwgaGVhZGVyPUZhbHNlLCBxdW90ZXRhYnM9VHJ1ZSkKKyAgICAgICAgZGF0YSA9IGRhdGEuZGVjb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgPT0gJzdiaXQnOgorICAgICAgICAjIE1ha2Ugc3VyZSBpdCByZWFsbHkgaXMgb25seSBBU0NJSS4gIFRoZSBlYXJseSB3YXJuaW5nIGhlcmUgc2VlbXMKKyAgICAgICAgIyB3b3J0aCB0aGUgb3ZlcmhlYWQuLi5pZiB5b3UgY2FyZSB3cml0ZSB5b3VyIG93biBjb250ZW50IG1hbmFnZXIgOikuCisgICAgICAgIGRhdGEuZW5jb2RlKCdhc2NpaScpCisgICAgZWxpZiBjdGUgaW4gKCc4Yml0JywgJ2JpbmFyeScpOgorICAgICAgICBkYXRhID0gZGF0YS5kZWNvZGUoJ2FzY2lpJywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgbXNnLnNldF9wYXlsb2FkKGRhdGEpCisgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSBjdGUKKyAgICBfZmluYWxpemVfc2V0KG1zZywgZGlzcG9zaXRpb24sIGZpbGVuYW1lLCBjaWQsIHBhcmFtcykKK2ZvciB0eXAgaW4gKGJ5dGVzLCBieXRlYXJyYXksIG1lbW9yeXZpZXcpOgorICAgIHJhd19kYXRhX21hbmFnZXIuYWRkX3NldF9oYW5kbGVyKHR5cCwgc2V0X2J5dGVzX2NvbnRlbnQpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZW5jb2RlcnMucHkgYi9MaWIvZW1haWwvZW5jb2RlcnMucHkKaW5kZXggZjk2NTdmMC4uMGE2NmFjYiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2VuY29kZXJzLnB5CisrKyBiL0xpYi9lbWFpbC9lbmNvZGVycy5weQpAQCAtNTQsMjEgKzU0LDEyIEBACiAgICAgICAgICMgVGhlcmUncyBubyBwYXlsb2FkLiAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHVzZSA3Yml0CiAgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzdiaXQnCiAgICAgICAgIHJldHVybgotICAgICMgV2UgcGxheSBhIHRyaWNrIHRvIG1ha2UgdGhpcyBnbyBmYXN0LiAgSWYgZW5jb2RpbmcvZGVjb2RlIHRvIEFTQ0lJCi0gICAgIyBzdWNjZWVkcywgd2Uga25vdyB0aGUgZGF0YSBtdXN0IGJlIDdiaXQsIG90aGVyd2lzZSB0cmVhdCBpdCBhcyA4Yml0LgorICAgICMgV2UgcGxheSBhIHRyaWNrIHRvIG1ha2UgdGhpcyBnbyBmYXN0LiAgSWYgZGVjb2RpbmcgZnJvbSBBU0NJSSBzdWNjZWVkcywKKyAgICAjIHdlIGtub3cgdGhlIGRhdGEgbXVzdCBiZSA3Yml0LCBvdGhlcndpc2UgdHJlYXQgaXQgYXMgOGJpdC4KICAgICB0cnk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2Uob3JpZywgc3RyKToKLSAgICAgICAgICAgIG9yaWcuZW5jb2RlKCdhc2NpaScpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvcmlnLmRlY29kZSgnYXNjaWknKQorICAgICAgICBvcmlnLmRlY29kZSgnYXNjaWknKQogICAgIGV4Y2VwdCBVbmljb2RlRXJyb3I6Ci0gICAgICAgIGNoYXJzZXQgPSBtc2cuZ2V0X2NoYXJzZXQoKQotICAgICAgICBvdXRwdXRfY3NldCA9IGNoYXJzZXQgYW5kIGNoYXJzZXQub3V0cHV0X2NoYXJzZXQKLSAgICAgICAgIyBpc28tMjAyMi0qIGlzIG5vbi1BU0NJSSBidXQgZW5jb2RlcyB0byBhIDctYml0IHJlcHJlc2VudGF0aW9uCi0gICAgICAgIGlmIG91dHB1dF9jc2V0IGFuZCBvdXRwdXRfY3NldC5sb3dlcigpLnN0YXJ0c3dpdGgoJ2lzby0yMDIyLScpOgotICAgICAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAnN2JpdCcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzhiaXQnCisgICAgICAgIG1zZ1snQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZyddID0gJzhiaXQnCiAgICAgZWxzZToKICAgICAgICAgbXNnWydDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nJ10gPSAnN2JpdCcKIApkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL2ZlZWRwYXJzZXIucHkgYi9MaWIvZW1haWwvZmVlZHBhcnNlci5weQppbmRleCBlYTQxZTk1Li5jOTViMjdmIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvZmVlZHBhcnNlci5weQorKysgYi9MaWIvZW1haWwvZmVlZHBhcnNlci5weQpAQCAtMzMsNyArMzMsNyBAQAogTkxDUkVfY3JhY2sgPSByZS5jb21waWxlKCcoXHJcbnxccnxcbiknKQogIyBSRkMgMjgyMiAkMy42LjggT3B0aW9uYWwgZmllbGRzLiAgZnRleHQgaXMgJWQzMy01NyAvICVkNTktMTI2LCBBbnkgY2hhcmFjdGVyCiAjIGV4Y2VwdCBjb250cm9scywgU1AsIGFuZCAiOiIuCi1oZWFkZXJSRSA9IHJlLmNvbXBpbGUocideKEZyb20gfFtcMDQxLVwwNzFcMDczLVwxNzZdezEsfTp8W1x0IF0pJykKK2hlYWRlclJFID0gcmUuY29tcGlsZShyJ14oRnJvbSB8W1wwNDEtXDA3MVwwNzMtXDE3Nl0qOnxbXHQgXSknKQogRU1QVFlTVFJJTkcgPSAnJwogTkwgPSAnXG4nCiAKQEAgLTUwLDggKzUwLDggQEAKICAgICBzaW1wbGUgYWJzdHJhY3Rpb24gLS0gaXQgcGFyc2VzIHVudGlsIEVPRiBjbG9zZXMgdGhlIGN1cnJlbnQgbWVzc2FnZS4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgICMgVGhlIGxhc3QgcGFydGlhbCBsaW5lIHB1c2hlZCBpbnRvIHRoaXMgb2JqZWN0LgotICAgICAgICBzZWxmLl9wYXJ0aWFsID0gJycKKyAgICAgICAgIyBDaHVua3Mgb2YgdGhlIGxhc3QgcGFydGlhbCBsaW5lIHB1c2hlZCBpbnRvIHRoaXMgb2JqZWN0LgorICAgICAgICBzZWxmLl9wYXJ0aWFsID0gW10KICAgICAgICAgIyBUaGUgbGlzdCBvZiBmdWxsLCBwdXNoZWQgbGluZXMsIGluIHJldmVyc2Ugb3JkZXIKICAgICAgICAgc2VsZi5fbGluZXMgPSBbXQogICAgICAgICAjIFRoZSBzdGFjayBvZiBmYWxzZS1FT0YgY2hlY2tpbmcgcHJlZGljYXRlcy4KQEAgLTY3LDggKzY3LDggQEAKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIyBEb24ndCBmb3JnZXQgYW55IHRyYWlsaW5nIHBhcnRpYWwgbGluZS4KLSAgICAgICAgc2VsZi5fbGluZXMuYXBwZW5kKHNlbGYuX3BhcnRpYWwpCi0gICAgICAgIHNlbGYuX3BhcnRpYWwgPSAnJworICAgICAgICBzZWxmLnB1c2hsaW5lcygnJy5qb2luKHNlbGYuX3BhcnRpYWwpLnNwbGl0bGluZXMoVHJ1ZSkpCisgICAgICAgIHNlbGYuX3BhcnRpYWwgPSBbXQogICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCiAKICAgICBkZWYgcmVhZGxpbmUoc2VsZik6CkBAIC05NiwyNiArOTYsMjcgQEAKIAogICAgIGRlZiBwdXNoKHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJQdXNoIHNvbWUgbmV3IGRhdGEgaW50byB0aGlzIG9iamVjdC4iIiIKLSAgICAgICAgIyBIYW5kbGUgYW55IHByZXZpb3VzIGxlZnRvdmVycwotICAgICAgICBkYXRhLCBzZWxmLl9wYXJ0aWFsID0gc2VsZi5fcGFydGlhbCArIGRhdGEsICcnCi0gICAgICAgICMgQ3JhY2sgaW50byBsaW5lcywgYnV0IHByZXNlcnZlIHRoZSBuZXdsaW5lcyBvbiB0aGUgZW5kIG9mIGVhY2gKLSAgICAgICAgcGFydHMgPSBOTENSRV9jcmFjay5zcGxpdChkYXRhKQotICAgICAgICAjIFRoZSAqYWhlbSogaW50ZXJlc3RpbmcgYmVoYXZpb3VyIG9mIHJlLnNwbGl0IHdoZW4gc3VwcGxpZWQgZ3JvdXBpbmcKLSAgICAgICAgIyBwYXJlbnRoZXNlcyBpcyB0aGF0IHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHJlc3VsdGluZyBsaXN0IGlzIHRoZQotICAgICAgICAjIGRhdGEgYWZ0ZXIgdGhlIGZpbmFsIFJFLiAgSW4gdGhlIGNhc2Ugb2YgYSBOTC9DUiB0ZXJtaW5hdGVkIHN0cmluZywKLSAgICAgICAgIyB0aGlzIGlzIHRoZSBlbXB0eSBzdHJpbmcuCi0gICAgICAgIHNlbGYuX3BhcnRpYWwgPSBwYXJ0cy5wb3AoKQotICAgICAgICAjR0FOIDI5TWFyMDkgIGJ1Z3MgMTU1NTU3MCwgMTcyMTg2MiAgQ29uZnVzaW9uIGF0IDhLIGJvdW5kYXJ5IGVuZGluZyB3aXRoIFxyOgotICAgICAgICAjIGlzIHRoZXJlIGEgXG4gdG8gZm9sbG93IGxhdGVyPwotICAgICAgICBpZiBub3Qgc2VsZi5fcGFydGlhbCBhbmQgcGFydHMgYW5kIHBhcnRzWy0xXS5lbmRzd2l0aCgnXHInKToKLSAgICAgICAgICAgIHNlbGYuX3BhcnRpYWwgPSBwYXJ0cy5wb3AoLTIpK3BhcnRzLnBvcCgpCi0gICAgICAgICMgcGFydHMgaXMgYSBsaXN0IG9mIHN0cmluZ3MsIGFsdGVybmF0aW5nIGJldHdlZW4gdGhlIGxpbmUgY29udGVudHMKLSAgICAgICAgIyBhbmQgdGhlIGVvbCBjaGFyYWN0ZXIocykuICBHYXRoZXIgdXAgYSBsaXN0IG9mIGxpbmVzIGFmdGVyCi0gICAgICAgICMgcmUtYXR0YWNoaW5nIHRoZSBuZXdsaW5lcy4KLSAgICAgICAgbGluZXMgPSBbXQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocGFydHMpIC8vIDIpOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKHBhcnRzW2kqMl0gKyBwYXJ0c1tpKjIrMV0pCi0gICAgICAgIHNlbGYucHVzaGxpbmVzKGxpbmVzKQorICAgICAgICAjIENyYWNrIGludG8gbGluZXMsIGJ1dCBwcmVzZXJ2ZSB0aGUgbGluZXNlcCBjaGFyYWN0ZXJzIG9uIHRoZSBlbmQgb2YgZWFjaAorICAgICAgICBwYXJ0cyA9IGRhdGEuc3BsaXRsaW5lcyhUcnVlKQorCisgICAgICAgIGlmIG5vdCBwYXJ0cyBvciBub3QgcGFydHNbMF0uZW5kc3dpdGgoKCdcbicsICdccicpKToKKyAgICAgICAgICAgICMgTm8gbmV3IGNvbXBsZXRlIGxpbmVzLCBzbyBqdXN0IGFjY3VtdWxhdGUgcGFydGlhbHMKKyAgICAgICAgICAgIHNlbGYuX3BhcnRpYWwgKz0gcGFydHMKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYuX3BhcnRpYWw6CisgICAgICAgICAgICAjIElmIHRoZXJlIGFyZSBwcmV2aW91cyBsZWZ0b3ZlcnMsIGNvbXBsZXRlIHRoZW0gbm93CisgICAgICAgICAgICBzZWxmLl9wYXJ0aWFsLmFwcGVuZChwYXJ0c1swXSkKKyAgICAgICAgICAgIHBhcnRzWzA6MV0gPSAnJy5qb2luKHNlbGYuX3BhcnRpYWwpLnNwbGl0bGluZXMoVHJ1ZSkKKyAgICAgICAgICAgIGRlbCBzZWxmLl9wYXJ0aWFsWzpdCisKKyAgICAgICAgIyBJZiB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBsaXN0IGRvZXMgbm90IGVuZCBpbiBhIG5ld2xpbmUsIHRoZW4gdHJlYXQKKyAgICAgICAgIyBpdCBhcyBhIHBhcnRpYWwgbGluZS4gIFdlIG9ubHkgY2hlY2sgZm9yICdcbicgaGVyZSBiZWNhdXNlIGEgbGluZQorICAgICAgICAjIGVuZGluZyB3aXRoICdccicgbWlnaHQgYmUgYSBsaW5lIHRoYXQgd2FzIHNwbGl0IGluIHRoZSBtaWRkbGUgb2YgYQorICAgICAgICAjICdcclxuJyBzZXF1ZW5jZSAoc2VlIGJ1Z3MgMTU1NTU3MCBhbmQgMTcyMTg2MikuCisgICAgICAgIGlmIG5vdCBwYXJ0c1stMV0uZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICBzZWxmLl9wYXJ0aWFsID0gW3BhcnRzLnBvcCgpXQorICAgICAgICBzZWxmLnB1c2hsaW5lcyhwYXJ0cykKIAogICAgIGRlZiBwdXNobGluZXMoc2VsZiwgbGluZXMpOgogICAgICAgICAjIFJldmVyc2UgYW5kIGluc2VydCBhdCB0aGUgZnJvbnQgb2YgdGhlIGxpbmVzLgpAQCAtMTM1LDcgKzEzNiw3IEBACiBjbGFzcyBGZWVkUGFyc2VyOgogICAgICIiIkEgZmVlZC1zdHlsZSBwYXJzZXIgb2YgZW1haWwuIiIiCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgX2ZhY3Rvcnk9bWVzc2FnZS5NZXNzYWdlLCAqLCBwb2xpY3k9Y29tcGF0MzIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfZmFjdG9yeT1Ob25lLCAqLCBwb2xpY3k9Y29tcGF0MzIpOgogICAgICAgICAiIiJfZmFjdG9yeSBpcyBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMgdG8gY3JlYXRlIGEgbmV3IG1lc3NhZ2Ugb2JqCiAKICAgICAgICAgVGhlIHBvbGljeSBrZXl3b3JkIHNwZWNpZmllcyBhIHBvbGljeSBvYmplY3QgdGhhdCBjb250cm9scyBhIG51bWJlciBvZgpAQCAtMTQzLDE0ICsxNDQsMjMgQEAKICAgICAgICAgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KIAogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5fZmFjdG9yeSA9IF9mYWN0b3J5CiAgICAgICAgIHNlbGYucG9saWN5ID0gcG9saWN5Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9mYWN0b3J5KHBvbGljeT1zZWxmLnBvbGljeSkKLSAgICAgICAgICAgIHNlbGYuX2ZhY3Rvcnlfa3dkcyA9IGxhbWJkYTogeydwb2xpY3knOiBzZWxmLnBvbGljeX0KLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgICMgQXNzdW1lIHRoaXMgaXMgYW4gb2xkLXN0eWxlIGZhY3RvcnkKLSAgICAgICAgICAgIHNlbGYuX2ZhY3Rvcnlfa3dkcyA9IGxhbWJkYToge30KKyAgICAgICAgc2VsZi5fZmFjdG9yeV9rd2RzID0gbGFtYmRhOiB7J3BvbGljeSc6IHNlbGYucG9saWN5fQorICAgICAgICBpZiBfZmFjdG9yeSBpcyBOb25lOgorICAgICAgICAgICAgIyBXaGF0IHRoaXMgc2hvdWxkIGJlOgorICAgICAgICAgICAgI3NlbGYuX2ZhY3RvcnkgPSBwb2xpY3kuZGVmYXVsdF9tZXNzYWdlX2ZhY3RvcnkKKyAgICAgICAgICAgICMgYnV0LCBiZWNhdXNlIHdlIGFyZSBwb3N0IDMuNCBmZWF0dXJlIGZyZWV6ZSwgZml4IHdpdGggdGVtcCBoYWNrOgorICAgICAgICAgICAgaWYgc2VsZi5wb2xpY3kgaXMgY29tcGF0MzI6CisgICAgICAgICAgICAgICAgc2VsZi5fZmFjdG9yeSA9IG1lc3NhZ2UuTWVzc2FnZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9mYWN0b3J5ID0gbWVzc2FnZS5FbWFpbE1lc3NhZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2ZhY3RvcnkgPSBfZmFjdG9yeQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9mYWN0b3J5KHBvbGljeT1zZWxmLnBvbGljeSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBBc3N1bWUgdGhpcyBpcyBhbiBvbGQtc3R5bGUgZmFjdG9yeQorICAgICAgICAgICAgICAgIHNlbGYuX2ZhY3Rvcnlfa3dkcyA9IGxhbWJkYToge30KICAgICAgICAgc2VsZi5faW5wdXQgPSBCdWZmZXJlZFN1YkZpbGUoKQogICAgICAgICBzZWxmLl9tc2dzdGFjayA9IFtdCiAgICAgICAgIHNlbGYuX3BhcnNlID0gc2VsZi5fcGFyc2VnZW4oKS5fX25leHRfXwpAQCAtNTAxLDYgKzUxMSwxNSBAQAogICAgICAgICAgICAgIyBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhIGNvbG9uLCBiZWNhdXNlIGlmIHRoZXJlIHdhc24ndCB0aGUgcGFydCBvZgogICAgICAgICAgICAgIyB0aGUgcGFyc2VyIHRoYXQgY2FsbHMgdXMgd291bGQgaGF2ZSBzdGFydGVkIHBhcnNpbmcgdGhlIGJvZHkuCiAgICAgICAgICAgICBpID0gbGluZS5maW5kKCc6JykKKworICAgICAgICAgICAgIyBJZiB0aGUgY29sb24gaXMgb24gdGhlIHN0YXJ0IG9mIHRoZSBsaW5lIHRoZSBoZWFkZXIgaXMgY2xlYXJseQorICAgICAgICAgICAgIyBtYWxmb3JtZWQsIGJ1dCB3ZSBtaWdodCBiZSBhYmxlIHRvIHNhbHZhZ2UgdGhlIHJlc3Qgb2YgdGhlCisgICAgICAgICAgICAjIG1lc3NhZ2UuIFRyYWNrIHRoZSBlcnJvciBidXQga2VlcCBnb2luZy4KKyAgICAgICAgICAgIGlmIGkgPT0gMDoKKyAgICAgICAgICAgICAgICBkZWZlY3QgPSBlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdCgiTWlzc2luZyBoZWFkZXIgbmFtZS4iKQorICAgICAgICAgICAgICAgIHNlbGYuX2N1ci5kZWZlY3RzLmFwcGVuZChkZWZlY3QpCisgICAgICAgICAgICAgICAgY29udGludWUKKwogICAgICAgICAgICAgYXNzZXJ0IGk+MCwgIl9wYXJzZV9oZWFkZXJzIGZlZCBsaW5lIHdpdGggbm8gOiBhbmQgbm8gbGVhZGluZyBXUyIKICAgICAgICAgICAgIGxhc3RoZWFkZXIgPSBsaW5lWzppXQogICAgICAgICAgICAgbGFzdHZhbHVlID0gW2xpbmVdCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvZ2VuZXJhdG9yLnB5IGIvTGliL2VtYWlsL2dlbmVyYXRvci5weQppbmRleCBlNGE4NmQ0Li40NzM1NzIxIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvZ2VuZXJhdG9yLnB5CisrKyBiL0xpYi9lbWFpbC9nZW5lcmF0b3IucHkKQEAgLTEwLDE0ICsxMCwxMCBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCByYW5kb20KLWltcG9ydCB3YXJuaW5ncwogCiBmcm9tIGNvcHkgaW1wb3J0IGRlZXBjb3B5CiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTywgQnl0ZXNJTwotZnJvbSBlbWFpbC5fcG9saWN5YmFzZSBpbXBvcnQgY29tcGF0MzIKLWZyb20gZW1haWwuaGVhZGVyIGltcG9ydCBIZWFkZXIKIGZyb20gZW1haWwudXRpbHMgaW1wb3J0IF9oYXNfc3Vycm9nYXRlcwotaW1wb3J0IGVtYWlsLmNoYXJzZXQgYXMgX2NoYXJzZXQKIAogVU5ERVJTQ09SRSA9ICdfJwogTkwgPSAnXG4nICAjIFhYWDogbm8gbG9uZ2VyIHVzZWQgYnkgdGhlIGNvZGUgYmVsb3cuCkBAIC01NSw4ICs1MSw5IEBACiAgICAgICAgIGJ5IFJGQyAyODIyLgogCiAgICAgICAgIFRoZSBwb2xpY3kga2V5d29yZCBzcGVjaWZpZXMgYSBwb2xpY3kgb2JqZWN0IHRoYXQgY29udHJvbHMgYSBudW1iZXIgb2YKLSAgICAgICAgYXNwZWN0cyBvZiB0aGUgZ2VuZXJhdG9yJ3Mgb3BlcmF0aW9uLiAgVGhlIGRlZmF1bHQgcG9saWN5IG1haW50YWlucwotICAgICAgICBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorICAgICAgICBhc3BlY3RzIG9mIHRoZSBnZW5lcmF0b3IncyBvcGVyYXRpb24uICBJZiBubyBwb2xpY3kgaXMgc3BlY2lmaWVkLAorICAgICAgICB0aGUgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCB0aGUgTWVzc2FnZSBvYmplY3QgcGFzc2VkIHRvIHRoZQorICAgICAgICBmbGF0dGVuIG1ldGhvZCBpcyB1c2VkLgogCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl9mcCA9IG91dGZwCkBAIC04MCw3ICs3Nyw5IEBACiAgICAgICAgIE5vdGUgdGhhdCBmb3Igc3Vib2JqZWN0cywgbm8gRnJvbV8gbGluZSBpcyBwcmludGVkLgogCiAgICAgICAgIGxpbmVzZXAgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIHVzZWQgdG8gaW5kaWNhdGUgYSBuZXcgbGluZSBpbgotICAgICAgICB0aGUgb3V0cHV0LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcG9saWN5LgorICAgICAgICB0aGUgb3V0cHV0LiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgcG9saWN5IHNwZWNpZmllZAorICAgICAgICB3aGVuIHRoZSBHZW5lcmF0b3IgaW5zdGFuY2Ugd2FzIGNyZWF0ZWQgb3IsIGlmIG5vbmUgd2FzIHNwZWNpZmllZCwKKyAgICAgICAgZnJvbSB0aGUgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbXNnLgogCiAgICAgICAgICIiIgogICAgICAgICAjIFdlIHVzZSB0aGUgX1hYWCBjb25zdGFudHMgZm9yIG9wZXJhdGluZyBvbiBkYXRhIHRoYXQgY29tZXMgZGlyZWN0bHkKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC9oZWFkZXIucHkgYi9MaWIvZW1haWwvaGVhZGVyLnB5CmluZGV4IDViZDA2MzguLjljODk1ODkgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9oZWFkZXIucHkKKysrIGIvTGliL2VtYWlsL2hlYWRlci5weQpAQCAtMTAwLDcgKzEwMCw2IEBACiAgICAgICAgICAgICAgICAgd29yZHMuYXBwZW5kKChlbmNvZGVkLCBlbmNvZGluZywgY2hhcnNldCkpCiAgICAgIyBOb3cgbG9vcCBvdmVyIHdvcmRzIGFuZCByZW1vdmUgd29yZHMgdGhhdCBjb25zaXN0IG9mIHdoaXRlc3BhY2UKICAgICAjIGJldHdlZW4gdHdvIGVuY29kZWQgc3RyaW5ncy4KLSAgICBpbXBvcnQgc3lzCiAgICAgZHJvcGxpc3QgPSBbXQogICAgIGZvciBuLCB3IGluIGVudW1lcmF0ZSh3b3Jkcyk6CiAgICAgICAgIGlmIG4+MSBhbmQgd1sxXSBhbmQgd29yZHNbbi0yXVsxXSBhbmQgd29yZHNbbi0xXVswXS5pc3NwYWNlKCk6CkBAIC0zNjIsNyArMzYxLDYgQEAKICAgICAgICAgZm9yIHN0cmluZywgY2hhcnNldCBpbiBzZWxmLl9jaHVua3M6CiAgICAgICAgICAgICBpZiBoYXNzcGFjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBoYXNzcGFjZSA9IHN0cmluZyBhbmQgc2VsZi5fbm9uY3RleHQoc3RyaW5nWzBdKQotICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgICAgICAgICBpZiBsYXN0Y3Mgbm90IGluIChOb25lLCAndXMtYXNjaWknKToKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGhhc3NwYWNlIG9yIGNoYXJzZXQgbm90IGluIChOb25lLCAndXMtYXNjaWknKToKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlci5hZGRfdHJhbnNpdGlvbigpCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvaGVhZGVycmVnaXN0cnkucHkgYi9MaWIvZW1haWwvaGVhZGVycmVnaXN0cnkucHkKaW5kZXggMWZhZTk1MC4uOTExYTJhZiAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL2hlYWRlcnJlZ2lzdHJ5LnB5CisrKyBiL0xpYi9lbWFpbC9oZWFkZXJyZWdpc3RyeS5weQpAQCAtNyw2ICs3LDcgQEAKIGFuZCB3aWxsIHByb2JhYmx5IGNoYW5nZSBzb21lIGJlZm9yZSB0aGF0IGhhcHBlbnMuCiAKICIiIgorZnJvbSB0eXBlcyBpbXBvcnQgTWFwcGluZ1Byb3h5VHlwZQogCiBmcm9tIGVtYWlsIGltcG9ydCB1dGlscwogZnJvbSBlbWFpbCBpbXBvcnQgZXJyb3JzCkBAIC00NTQsNyArNDU1LDcgQEAKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBwYXJhbXMoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9wYXJhbXMuY29weSgpCisgICAgICAgIHJldHVybiBNYXBwaW5nUHJveHlUeXBlKHNlbGYuX3BhcmFtcykKIAogCiBjbGFzcyBDb250ZW50VHlwZUhlYWRlcihQYXJhbWV0ZXJpemVkTUlNRUhlYWRlcik6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvaXRlcmF0b3JzLnB5IGIvTGliL2VtYWlsL2l0ZXJhdG9ycy5weQppbmRleCAzYWRjNGEwLi5iNTUwMmVlIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvaXRlcmF0b3JzLnB5CisrKyBiL0xpYi9lbWFpbC9pdGVyYXRvcnMucHkKQEAgLTI2LDggKzI2LDcgQEAKICAgICB5aWVsZCBzZWxmCiAgICAgaWYgc2VsZi5pc19tdWx0aXBhcnQoKToKICAgICAgICAgZm9yIHN1YnBhcnQgaW4gc2VsZi5nZXRfcGF5bG9hZCgpOgotICAgICAgICAgICAgZm9yIHN1YnN1YnBhcnQgaW4gc3VicGFydC53YWxrKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3Vic3VicGFydAorICAgICAgICAgICAgeWllbGQgZnJvbSBzdWJwYXJ0LndhbGsoKQogCiAKIAwKQEAgLTQwLDggKzM5LDcgQEAKICAgICBmb3Igc3VicGFydCBpbiBtc2cud2FsaygpOgogICAgICAgICBwYXlsb2FkID0gc3VicGFydC5nZXRfcGF5bG9hZChkZWNvZGU9ZGVjb2RlKQogICAgICAgICBpZiBpc2luc3RhbmNlKHBheWxvYWQsIHN0cik6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBTdHJpbmdJTyhwYXlsb2FkKToKLSAgICAgICAgICAgICAgICB5aWVsZCBsaW5lCisgICAgICAgICAgICB5aWVsZCBmcm9tIFN0cmluZ0lPKHBheWxvYWQpCiAKIAogZGVmIHR5cGVkX3N1YnBhcnRfaXRlcmF0b3IobXNnLCBtYWludHlwZT0ndGV4dCcsIHN1YnR5cGU9Tm9uZSk6CmRpZmYgLS1naXQgYS9MaWIvZW1haWwvbWVzc2FnZS5weSBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CmluZGV4IGFmZTM1MGMuLjJmMzdkYmIgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9tZXNzYWdlLnB5CisrKyBiL0xpYi9lbWFpbC9tZXNzYWdlLnB5CkBAIC04LDggKzgsOCBAQAogCiBpbXBvcnQgcmUKIGltcG9ydCB1dQotaW1wb3J0IGJhc2U2NAotaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgcXVvcHJpCitpbXBvcnQgd2FybmluZ3MKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8sIFN0cmluZ0lPCiAKICMgSW50cmFwYWNrYWdlIGltcG9ydHMKQEAgLTEzMiwyMiArMTMyLDUwIEBACiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBlbnRpcmUgZm9ybWF0dGVkIG1lc3NhZ2UgYXMgYSBzdHJpbmcuCi0gICAgICAgIFRoaXMgaW5jbHVkZXMgdGhlIGhlYWRlcnMsIGJvZHksIGFuZCBlbnZlbG9wZSBoZWFkZXIuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hc19zdHJpbmcoKQogCi0gICAgZGVmIGFzX3N0cmluZyhzZWxmLCB1bml4ZnJvbT1GYWxzZSwgbWF4aGVhZGVybGVuPTApOgorICAgIGRlZiBhc19zdHJpbmcoc2VsZiwgdW5peGZyb209RmFsc2UsIG1heGhlYWRlcmxlbj0wLCBwb2xpY3k9Tm9uZSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgZW50aXJlIGZvcm1hdHRlZCBtZXNzYWdlIGFzIGEgc3RyaW5nLgotICAgICAgICBPcHRpb25hbCBgdW5peGZyb20nIHdoZW4gVHJ1ZSwgbWVhbnMgaW5jbHVkZSB0aGUgVW5peCBGcm9tXyBlbnZlbG9wZQotICAgICAgICBoZWFkZXIuCiAKLSAgICAgICAgVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCBhbmQgbWF5IG5vdCBnZW5lcmF0ZSB0aGUgbWVzc2FnZSBleGFjdGx5Ci0gICAgICAgIGFzIHlvdSBpbnRlbmQuICBGb3IgbW9yZSBmbGV4aWJpbGl0eSwgdXNlIHRoZSBmbGF0dGVuKCkgbWV0aG9kIG9mIGEKLSAgICAgICAgR2VuZXJhdG9yIGluc3RhbmNlLgorICAgICAgICBPcHRpb25hbCAndW5peGZyb20nLCB3aGVuIHRydWUsIG1lYW5zIGluY2x1ZGUgdGhlIFVuaXggRnJvbV8gZW52ZWxvcGUKKyAgICAgICAgaGVhZGVyLiAgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucywgaWYgbWF4aGVhZGVybGVuIGlzCisgICAgICAgIG5vdCBzcGVjaWZpZWQgaXQgZGVmYXVsdHMgdG8gMCwgc28geW91IG11c3Qgb3ZlcnJpZGUgaXQgZXhwbGljaXRseQorICAgICAgICBpZiB5b3Ugd2FudCBhIGRpZmZlcmVudCBtYXhoZWFkZXJsZW4uICAncG9saWN5JyBpcyBwYXNzZWQgdG8gdGhlCisgICAgICAgIEdlbmVyYXRvciBpbnN0YW5jZSB1c2VkIHRvIHNlcmlhbGl6ZSB0aGUgbWVzYXNnZTsgaWYgaXQgaXMgbm90CisgICAgICAgIHNwZWNpZmllZCB0aGUgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCB0aGUgbWVzc2FnZSBpbnN0YW5jZSBpcyB1c2VkLgorCisgICAgICAgIElmIHRoZSBtZXNzYWdlIG9iamVjdCBjb250YWlucyBiaW5hcnkgZGF0YSB0aGF0IGlzIG5vdCBlbmNvZGVkCisgICAgICAgIGFjY29yZGluZyB0byBSRkMgc3RhbmRhcmRzLCB0aGUgbm9uLWNvbXBsaWFudCBkYXRhIHdpbGwgYmUgcmVwbGFjZWQgYnkKKyAgICAgICAgdW5pY29kZSAidW5rbm93biBjaGFyYWN0ZXIiIGNvZGUgcG9pbnRzLgogICAgICAgICAiIiIKICAgICAgICAgZnJvbSBlbWFpbC5nZW5lcmF0b3IgaW1wb3J0IEdlbmVyYXRvcgorICAgICAgICBwb2xpY3kgPSBzZWxmLnBvbGljeSBpZiBwb2xpY3kgaXMgTm9uZSBlbHNlIHBvbGljeQogICAgICAgICBmcCA9IFN0cmluZ0lPKCkKLSAgICAgICAgZyA9IEdlbmVyYXRvcihmcCwgbWFuZ2xlX2Zyb21fPUZhbHNlLCBtYXhoZWFkZXJsZW49bWF4aGVhZGVybGVuKQorICAgICAgICBnID0gR2VuZXJhdG9yKGZwLAorICAgICAgICAgICAgICAgICAgICAgIG1hbmdsZV9mcm9tXz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICBtYXhoZWFkZXJsZW49bWF4aGVhZGVybGVuLAorICAgICAgICAgICAgICAgICAgICAgIHBvbGljeT1wb2xpY3kpCisgICAgICAgIGcuZmxhdHRlbihzZWxmLCB1bml4ZnJvbT11bml4ZnJvbSkKKyAgICAgICAgcmV0dXJuIGZwLmdldHZhbHVlKCkKKworICAgIGRlZiBfX2J5dGVzX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgZW50aXJlIGZvcm1hdHRlZCBtZXNzYWdlIGFzIGEgYnl0ZXMgb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuYXNfYnl0ZXMoKQorCisgICAgZGVmIGFzX2J5dGVzKHNlbGYsIHVuaXhmcm9tPUZhbHNlLCBwb2xpY3k9Tm9uZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgZW50aXJlIGZvcm1hdHRlZCBtZXNzYWdlIGFzIGEgYnl0ZXMgb2JqZWN0LgorCisgICAgICAgIE9wdGlvbmFsICd1bml4ZnJvbScsIHdoZW4gdHJ1ZSwgbWVhbnMgaW5jbHVkZSB0aGUgVW5peCBGcm9tXyBlbnZlbG9wZQorICAgICAgICBoZWFkZXIuICAncG9saWN5JyBpcyBwYXNzZWQgdG8gdGhlIEJ5dGVzR2VuZXJhdG9yIGluc3RhbmNlIHVzZWQgdG8KKyAgICAgICAgc2VyaWFsaXplIHRoZSBtZXNzYWdlOyBpZiBub3Qgc3BlY2lmaWVkIHRoZSBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoCisgICAgICAgIHRoZSBtZXNzYWdlIGluc3RhbmNlIGlzIHVzZWQuCisgICAgICAgICIiIgorICAgICAgICBmcm9tIGVtYWlsLmdlbmVyYXRvciBpbXBvcnQgQnl0ZXNHZW5lcmF0b3IKKyAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kgaWYgcG9saWN5IGlzIE5vbmUgZWxzZSBwb2xpY3kKKyAgICAgICAgZnAgPSBCeXRlc0lPKCkKKyAgICAgICAgZyA9IEJ5dGVzR2VuZXJhdG9yKGZwLCBtYW5nbGVfZnJvbV89RmFsc2UsIHBvbGljeT1wb2xpY3kpCiAgICAgICAgIGcuZmxhdHRlbihzZWxmLCB1bml4ZnJvbT11bml4ZnJvbSkKICAgICAgICAgcmV0dXJuIGZwLmdldHZhbHVlKCkKIApAQCAtMTc3LDcgKzIwNSwxMSBAQAogICAgICAgICBpZiBzZWxmLl9wYXlsb2FkIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLl9wYXlsb2FkID0gW3BheWxvYWRdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9wYXlsb2FkLmFwcGVuZChwYXlsb2FkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3BheWxvYWQuYXBwZW5kKHBheWxvYWQpCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJBdHRhY2ggaXMgbm90IHZhbGlkIG9uIGEgbWVzc2FnZSB3aXRoIGEiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgbm9uLW11bHRpcGFydCBwYXlsb2FkIikKIAogICAgIGRlZiBnZXRfcGF5bG9hZChzZWxmLCBpPU5vbmUsIGRlY29kZT1GYWxzZSk6CiAgICAgICAgICIiIlJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgcGF5bG9hZC4KQEAgLTI0MSwxNCArMjczLDE0IEBACiAgICAgICAgICAgICAgICAgICAgIGJwYXlsb2FkID0gcGF5bG9hZC5lbmNvZGUoJ2FzY2lpJykKICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVycm9yOgogICAgICAgICAgICAgICAgICAgICAjIFRoaXMgd29uJ3QgaGFwcGVuIGZvciBSRkMgY29tcGxpYW50IG1lc3NhZ2VzIChtZXNzYWdlcwotICAgICAgICAgICAgICAgICAgICAjIGNvbnRhaW5pbmcgb25seSBBU0NJSSBjb2RlcG9pbnRzIGluIHRoZSB1bmljb2RlIGlucHV0KS4KKyAgICAgICAgICAgICAgICAgICAgIyBjb250YWluaW5nIG9ubHkgQVNDSUkgY29kZSBwb2ludHMgaW4gdGhlIHVuaWNvZGUgaW5wdXQpLgogICAgICAgICAgICAgICAgICAgICAjIElmIGl0IGRvZXMgaGFwcGVuLCB0dXJuIHRoZSBzdHJpbmcgaW50byBieXRlcyBpbiBhIHdheQogICAgICAgICAgICAgICAgICAgICAjIGd1YXJhbnRlZWQgbm90IHRvIGZhaWwuCiAgICAgICAgICAgICAgICAgICAgIGJwYXlsb2FkID0gcGF5bG9hZC5lbmNvZGUoJ3Jhdy11bmljb2RlLWVzY2FwZScpCiAgICAgICAgIGlmIG5vdCBkZWNvZGU6CiAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZAogICAgICAgICBpZiBjdGUgPT0gJ3F1b3RlZC1wcmludGFibGUnOgotICAgICAgICAgICAgcmV0dXJuIHV0aWxzLl9xZGVjb2RlKGJwYXlsb2FkKQorICAgICAgICAgICAgcmV0dXJuIHF1b3ByaS5kZWNvZGVzdHJpbmcoYnBheWxvYWQpCiAgICAgICAgIGVsaWYgY3RlID09ICdiYXNlNjQnOgogICAgICAgICAgICAgIyBYWFg6IHRoaXMgaXMgYSBiaXQgb2YgYSBoYWNrOyBkZWNvZGVfYiBzaG91bGQgcHJvYmFibHkgYmUgZmFjdG9yZWQKICAgICAgICAgICAgICMgb3V0IHNvbWV3aGVyZSwgYnV0IEkgaGF2ZW4ndCBmaWd1cmVkIG91dCB3aGVyZSB5ZXQuCkBAIC02NjgsNyArNzAwLDcgQEAKICAgICAgICAgcmV0dXJuIGZhaWxvYmoKIAogICAgIGRlZiBzZXRfcGFyYW0oc2VsZiwgcGFyYW0sIHZhbHVlLCBoZWFkZXI9J0NvbnRlbnQtVHlwZScsIHJlcXVvdGU9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgIGNoYXJzZXQ9Tm9uZSwgbGFuZ3VhZ2U9JycpOgorICAgICAgICAgICAgICAgICAgY2hhcnNldD1Ob25lLCBsYW5ndWFnZT0nJywgcmVwbGFjZT1GYWxzZSk6CiAgICAgICAgICIiIlNldCBhIHBhcmFtZXRlciBpbiB0aGUgQ29udGVudC1UeXBlIGhlYWRlci4KIAogICAgICAgICBJZiB0aGUgcGFyYW1ldGVyIGFscmVhZHkgZXhpc3RzIGluIHRoZSBoZWFkZXIsIGl0cyB2YWx1ZSB3aWxsIGJlCkBAIC03MTIsOCArNzQ0LDExIEBACiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgY3R5cGUgPSBTRU1JU1BBQ0Uuam9pbihbY3R5cGUsIGFwcGVuZF9wYXJhbV0pCiAgICAgICAgIGlmIGN0eXBlICE9IHNlbGYuZ2V0KGhlYWRlcik6Ci0gICAgICAgICAgICBkZWwgc2VsZltoZWFkZXJdCi0gICAgICAgICAgICBzZWxmW2hlYWRlcl0gPSBjdHlwZQorICAgICAgICAgICAgaWYgcmVwbGFjZToKKyAgICAgICAgICAgICAgICBzZWxmLnJlcGxhY2VfaGVhZGVyKGhlYWRlciwgY3R5cGUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRlbCBzZWxmW2hlYWRlcl0KKyAgICAgICAgICAgICAgICBzZWxmW2hlYWRlcl0gPSBjdHlwZQogCiAgICAgZGVmIGRlbF9wYXJhbShzZWxmLCBwYXJhbSwgaGVhZGVyPSdjb250ZW50LXR5cGUnLCByZXF1b3RlPVRydWUpOgogICAgICAgICAiIiJSZW1vdmUgdGhlIGdpdmVuIHBhcmFtZXRlciBjb21wbGV0ZWx5IGZyb20gdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIuCkBAIC04OTQsMyArOTI5LDIxOSBAQAogCiAgICAgIyBJLmUuIGRlZiB3YWxrKHNlbGYpOiAuLi4KICAgICBmcm9tIGVtYWlsLml0ZXJhdG9ycyBpbXBvcnQgd2FsaworCisjIFhYWCBTdXBwb3J0IGZvciB0ZW1wb3JhcnkgZGVwcmVjYXRpb24gaGFjayBmb3IgaXNfYXR0YWNobWVudCBwcm9wZXJ0eS4KK2NsYXNzIF9Jc0F0dGFjaG1lbnQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlKToKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgd2FybmluZ3Mud2FybigiaXNfYXR0YWNobWVudCB3aWxsIGJlIGEgbWV0aG9kLCBub3QgYSBwcm9wZXJ0eSwgaW4gMy41IiwKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgc3RhY2tsZXZlbD0zKQorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCitjbGFzcyBNSU1FUGFydChNZXNzYWdlKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwb2xpY3k9Tm9uZSk6CisgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgorICAgICAgICAgICAgZnJvbSBlbWFpbC5wb2xpY3kgaW1wb3J0IGRlZmF1bHQKKyAgICAgICAgICAgIHBvbGljeSA9IGRlZmF1bHQKKyAgICAgICAgTWVzc2FnZS5fX2luaXRfXyhzZWxmLCBwb2xpY3kpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgY19kID0gc2VsZi5nZXQoJ2NvbnRlbnQtZGlzcG9zaXRpb24nKQorICAgICAgICByZXN1bHQgPSBGYWxzZSBpZiBjX2QgaXMgTm9uZSBlbHNlIGNfZC5jb250ZW50X2Rpc3Bvc2l0aW9uID09ICdhdHRhY2htZW50JworICAgICAgICAjIFhYWCB0cmFuc2l0aW9uYWwgaGFjayB0byByYWlzZSBkZXByZWNhdGlvbiBpZiBub3QgY2FsbGVkLgorICAgICAgICByZXR1cm4gX0lzQXR0YWNobWVudChyZXN1bHQpCisKKyAgICBkZWYgX2ZpbmRfYm9keShzZWxmLCBwYXJ0LCBwcmVmZXJlbmNlbGlzdCk6CisgICAgICAgIGlmIHBhcnQuaXNfYXR0YWNobWVudCgpOgorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIG1haW50eXBlLCBzdWJ0eXBlID0gcGFydC5nZXRfY29udGVudF90eXBlKCkuc3BsaXQoJy8nKQorICAgICAgICBpZiBtYWludHlwZSA9PSAndGV4dCc6CisgICAgICAgICAgICBpZiBzdWJ0eXBlIGluIHByZWZlcmVuY2VsaXN0OgorICAgICAgICAgICAgICAgIHlpZWxkIChwcmVmZXJlbmNlbGlzdC5pbmRleChzdWJ0eXBlKSwgcGFydCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYWludHlwZSAhPSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzdWJ0eXBlICE9ICdyZWxhdGVkJzoKKyAgICAgICAgICAgIGZvciBzdWJwYXJ0IGluIHBhcnQuaXRlcl9wYXJ0cygpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF9ib2R5KHN1YnBhcnQsIHByZWZlcmVuY2VsaXN0KQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGlmICdyZWxhdGVkJyBpbiBwcmVmZXJlbmNlbGlzdDoKKyAgICAgICAgICAgIHlpZWxkIChwcmVmZXJlbmNlbGlzdC5pbmRleCgncmVsYXRlZCcpLCBwYXJ0KQorICAgICAgICBjYW5kaWRhdGUgPSBOb25lCisgICAgICAgIHN0YXJ0ID0gcGFydC5nZXRfcGFyYW0oJ3N0YXJ0JykKKyAgICAgICAgaWYgc3RhcnQ6CisgICAgICAgICAgICBmb3Igc3VicGFydCBpbiBwYXJ0Lml0ZXJfcGFydHMoKToKKyAgICAgICAgICAgICAgICBpZiBzdWJwYXJ0Wydjb250ZW50LWlkJ10gPT0gc3RhcnQ6CisgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZSA9IHN1YnBhcnQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgY2FuZGlkYXRlIGlzIE5vbmU6CisgICAgICAgICAgICBzdWJwYXJ0cyA9IHBhcnQuZ2V0X3BheWxvYWQoKQorICAgICAgICAgICAgY2FuZGlkYXRlID0gc3VicGFydHNbMF0gaWYgc3VicGFydHMgZWxzZSBOb25lCisgICAgICAgIGlmIGNhbmRpZGF0ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fZmluZF9ib2R5KGNhbmRpZGF0ZSwgcHJlZmVyZW5jZWxpc3QpCisKKyAgICBkZWYgZ2V0X2JvZHkoc2VsZiwgcHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ2h0bWwnLCAncGxhaW4nKSk6CisgICAgICAgICIiIlJldHVybiBiZXN0IGNhbmRpZGF0ZSBtaW1lIHBhcnQgZm9yIGRpc3BsYXkgYXMgJ2JvZHknIG9mIG1lc3NhZ2UuCisKKyAgICAgICAgRG8gYSBkZXB0aCBmaXJzdCBzZWFyY2gsIHN0YXJ0aW5nIHdpdGggc2VsZiwgbG9va2luZyBmb3IgdGhlIGZpcnN0IHBhcnQKKyAgICAgICAgbWF0Y2hpbmcgZWFjaCBvZiB0aGUgaXRlbXMgaW4gcHJlZmVyZW5jZWxpc3QsIGFuZCByZXR1cm4gdGhlIHBhcnQKKyAgICAgICAgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgaXRlbSB0aGF0IGhhcyBhIG1hdGNoLCBvciBOb25lIGlmIG5vIGl0ZW1zCisgICAgICAgIGhhdmUgYSBtYXRjaC4gIElmICdyZWxhdGVkJyBpcyBub3QgaW5jbHVkZWQgaW4gcHJlZmVyZW5jZWxpc3QsIGNvbnNpZGVyCisgICAgICAgIHRoZSByb290IHBhcnQgb2YgYW55IG11bHRpcGFydC9yZWxhdGVkIGVuY291bnRlcmVkIGFzIGEgY2FuZGlkYXRlCisgICAgICAgIG1hdGNoLiAgSWdub3JlIHBhcnRzIHdpdGggJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQnLgorICAgICAgICAiIiIKKyAgICAgICAgYmVzdF9wcmlvID0gbGVuKHByZWZlcmVuY2VsaXN0KQorICAgICAgICBib2R5ID0gTm9uZQorICAgICAgICBmb3IgcHJpbywgcGFydCBpbiBzZWxmLl9maW5kX2JvZHkoc2VsZiwgcHJlZmVyZW5jZWxpc3QpOgorICAgICAgICAgICAgaWYgcHJpbyA8IGJlc3RfcHJpbzoKKyAgICAgICAgICAgICAgICBiZXN0X3ByaW8gPSBwcmlvCisgICAgICAgICAgICAgICAgYm9keSA9IHBhcnQKKyAgICAgICAgICAgICAgICBpZiBwcmlvID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIHJldHVybiBib2R5CisKKyAgICBfYm9keV90eXBlcyA9IHsoJ3RleHQnLCAncGxhaW4nKSwKKyAgICAgICAgICAgICAgICAgICAoJ3RleHQnLCAnaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICgnbXVsdGlwYXJ0JywgJ3JlbGF0ZWQnKSwKKyAgICAgICAgICAgICAgICAgICAoJ211bHRpcGFydCcsICdhbHRlcm5hdGl2ZScpfQorICAgIGRlZiBpdGVyX2F0dGFjaG1lbnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUgbm9uLW1haW4gcGFydHMgb2YgYSBtdWx0aXBhcnQuCisKKyAgICAgICAgU2tpcCB0aGUgZmlyc3Qgb2YgZWFjaCBvY2N1cnJlbmNlIG9mIHRleHQvcGxhaW4sIHRleHQvaHRtbCwKKyAgICAgICAgbXVsdGlwYXJ0L3JlbGF0ZWQsIG9yIG11bHRpcGFydC9hbHRlcm5hdGl2ZSBpbiB0aGUgbXVsdGlwYXJ0ICh1bmxlc3MKKyAgICAgICAgdGhleSBoYXZlIGEgJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQnIGhlYWRlcikgYW5kIGluY2x1ZGUgYWxsCisgICAgICAgIHJlbWFpbmluZyBzdWJwYXJ0cyBpbiB0aGUgcmV0dXJuZWQgaXRlcmF0b3IuICBXaGVuIGFwcGxpZWQgdG8gYQorICAgICAgICBtdWx0aXBhcnQvcmVsYXRlZCwgcmV0dXJuIGFsbCBwYXJ0cyBleGNlcHQgdGhlIHJvb3QgcGFydC4gIFJldHVybiBhbgorICAgICAgICBlbXB0eSBpdGVyYXRvciB3aGVuIGFwcGxpZWQgdG8gYSBtdWx0aXBhcnQvYWx0ZXJuYXRpdmUgb3IgYQorICAgICAgICBub24tbXVsdGlwYXJ0LgorICAgICAgICAiIiIKKyAgICAgICAgbWFpbnR5cGUsIHN1YnR5cGUgPSBzZWxmLmdldF9jb250ZW50X3R5cGUoKS5zcGxpdCgnLycpCisgICAgICAgIGlmIG1haW50eXBlICE9ICdtdWx0aXBhcnQnIG9yIHN1YnR5cGUgPT0gJ2FsdGVybmF0aXZlJzoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXJ0cyA9IHNlbGYuZ2V0X3BheWxvYWQoKQorICAgICAgICBpZiBtYWludHlwZSA9PSAnbXVsdGlwYXJ0JyBhbmQgc3VidHlwZSA9PSAncmVsYXRlZCc6CisgICAgICAgICAgICAjIEZvciByZWxhdGVkLCB3ZSB0cmVhdCBldmVyeXRoaW5nIGJ1dCB0aGUgcm9vdCBhcyBhbiBhdHRhY2htZW50LgorICAgICAgICAgICAgIyBUaGUgcm9vdCBtYXkgYmUgaW5kaWNhdGVkIGJ5ICdzdGFydCc7IGlmIHRoZXJlJ3Mgbm8gc3RhcnQgb3Igd2UKKyAgICAgICAgICAgICMgY2FuJ3QgZmluZCB0aGUgbmFtZWQgc3RhcnQsIHRyZWF0IHRoZSBmaXJzdCBzdWJwYXJ0IGFzIHRoZSByb290LgorICAgICAgICAgICAgc3RhcnQgPSBzZWxmLmdldF9wYXJhbSgnc3RhcnQnKQorICAgICAgICAgICAgaWYgc3RhcnQ6CisgICAgICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICAgICAgICAgIGF0dGFjaG1lbnRzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBwYXJ0czoKKyAgICAgICAgICAgICAgICAgICAgaWYgcGFydC5nZXQoJ2NvbnRlbnQtaWQnKSA9PSBzdGFydDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudHMuYXBwZW5kKHBhcnQpCisgICAgICAgICAgICAgICAgaWYgZm91bmQ6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYXR0YWNobWVudHMKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYXJ0cy5wb3AoMCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcGFydHMKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICAjIE90aGVyd2lzZSB3ZSBtb3JlIG9yIGxlc3MgaW52ZXJ0IHRoZSByZW1haW5pbmcgbG9naWMgaW4gZ2V0X2JvZHkuCisgICAgICAgICMgVGhpcyBvbmx5IHJlYWxseSB3b3JrcyBpbiBlZGdlIGNhc2VzIChleDogbm9uLXRleHQgcmVsYXRlZHMgb3IKKyAgICAgICAgIyBhbHRlcm5hdGl2ZXMpIGlmIHRoZSBzZW5kaW5nIGFnZW50IHNldHMgY29udGVudC1kaXNwb3NpdGlvbi4KKyAgICAgICAgc2VlbiA9IFtdICAgIyBPbmx5IHNraXAgdGhlIGZpcnN0IGV4YW1wbGUgb2YgZWFjaCBjYW5kaWRhdGUgdHlwZS4KKyAgICAgICAgZm9yIHBhcnQgaW4gcGFydHM6CisgICAgICAgICAgICBtYWludHlwZSwgc3VidHlwZSA9IHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLnNwbGl0KCcvJykKKyAgICAgICAgICAgIGlmICgobWFpbnR5cGUsIHN1YnR5cGUpIGluIHNlbGYuX2JvZHlfdHlwZXMgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBwYXJ0LmlzX2F0dGFjaG1lbnQoKSBhbmQgc3VidHlwZSBub3QgaW4gc2Vlbik6CisgICAgICAgICAgICAgICAgc2Vlbi5hcHBlbmQoc3VidHlwZSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgeWllbGQgcGFydAorCisgICAgZGVmIGl0ZXJfcGFydHMoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIGFsbCBpbW1lZGlhdGUgc3VicGFydHMgb2YgYSBtdWx0aXBhcnQuCisKKyAgICAgICAgUmV0dXJuIGFuIGVtcHR5IGl0ZXJhdG9yIGZvciBhIG5vbi1tdWx0aXBhcnQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmdldF9jb250ZW50X21haW50eXBlKCkgPT0gJ211bHRpcGFydCc6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYuZ2V0X3BheWxvYWQoKQorCisgICAgZGVmIGdldF9jb250ZW50KHNlbGYsICphcmdzLCBjb250ZW50X21hbmFnZXI9Tm9uZSwgKiprdyk6CisgICAgICAgIGlmIGNvbnRlbnRfbWFuYWdlciBpcyBOb25lOgorICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyID0gc2VsZi5wb2xpY3kuY29udGVudF9tYW5hZ2VyCisgICAgICAgIHJldHVybiBjb250ZW50X21hbmFnZXIuZ2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgKmFyZ3MsIGNvbnRlbnRfbWFuYWdlcj1Ob25lLCAqKmt3KToKKyAgICAgICAgaWYgY29udGVudF9tYW5hZ2VyIGlzIE5vbmU6CisgICAgICAgICAgICBjb250ZW50X21hbmFnZXIgPSBzZWxmLnBvbGljeS5jb250ZW50X21hbmFnZXIKKyAgICAgICAgY29udGVudF9tYW5hZ2VyLnNldF9jb250ZW50KHNlbGYsICphcmdzLCAqKmt3KQorCisgICAgZGVmIF9tYWtlX211bHRpcGFydChzZWxmLCBzdWJ0eXBlLCBkaXNhbGxvd2VkX3N1YnR5cGVzLCBib3VuZGFyeSk6CisgICAgICAgIGlmIHNlbGYuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSA9PSAnbXVsdGlwYXJ0JzoKKyAgICAgICAgICAgIGV4aXN0aW5nX3N1YnR5cGUgPSBzZWxmLmdldF9jb250ZW50X3N1YnR5cGUoKQorICAgICAgICAgICAgZGlzYWxsb3dlZF9zdWJ0eXBlcyA9IGRpc2FsbG93ZWRfc3VidHlwZXMgKyAoc3VidHlwZSwpCisgICAgICAgICAgICBpZiBleGlzdGluZ19zdWJ0eXBlIGluIGRpc2FsbG93ZWRfc3VidHlwZXM6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IGNvbnZlcnQge30gdG8ge30iLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgZXhpc3Rpbmdfc3VidHlwZSwgc3VidHlwZSkpCisgICAgICAgIGtlZXBfaGVhZGVycyA9IFtdCisgICAgICAgIHBhcnRfaGVhZGVycyA9IFtdCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLl9oZWFkZXJzOgorICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyk6CisgICAgICAgICAgICAgICAgcGFydF9oZWFkZXJzLmFwcGVuZCgobmFtZSwgdmFsdWUpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBrZWVwX2hlYWRlcnMuYXBwZW5kKChuYW1lLCB2YWx1ZSkpCisgICAgICAgIGlmIHBhcnRfaGVhZGVyczoKKyAgICAgICAgICAgICMgVGhlcmUgaXMgZXhpc3RpbmcgY29udGVudCwgbW92ZSBpdCB0byB0aGUgZmlyc3Qgc3VicGFydC4KKyAgICAgICAgICAgIHBhcnQgPSB0eXBlKHNlbGYpKHBvbGljeT1zZWxmLnBvbGljeSkKKyAgICAgICAgICAgIHBhcnQuX2hlYWRlcnMgPSBwYXJ0X2hlYWRlcnMKKyAgICAgICAgICAgIHBhcnQuX3BheWxvYWQgPSBzZWxmLl9wYXlsb2FkCisgICAgICAgICAgICBzZWxmLl9wYXlsb2FkID0gW3BhcnRdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLl9wYXlsb2FkID0gW10KKyAgICAgICAgc2VsZi5faGVhZGVycyA9IGtlZXBfaGVhZGVycworICAgICAgICBzZWxmWydDb250ZW50LVR5cGUnXSA9ICdtdWx0aXBhcnQvJyArIHN1YnR5cGUKKyAgICAgICAgaWYgYm91bmRhcnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnNldF9wYXJhbSgnYm91bmRhcnknLCBib3VuZGFyeSkKKworICAgIGRlZiBtYWtlX3JlbGF0ZWQoc2VsZiwgYm91bmRhcnk9Tm9uZSk6CisgICAgICAgIHNlbGYuX21ha2VfbXVsdGlwYXJ0KCdyZWxhdGVkJywgKCdhbHRlcm5hdGl2ZScsICdtaXhlZCcpLCBib3VuZGFyeSkKKworICAgIGRlZiBtYWtlX2FsdGVybmF0aXZlKHNlbGYsIGJvdW5kYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLl9tYWtlX211bHRpcGFydCgnYWx0ZXJuYXRpdmUnLCAoJ21peGVkJywpLCBib3VuZGFyeSkKKworICAgIGRlZiBtYWtlX21peGVkKHNlbGYsIGJvdW5kYXJ5PU5vbmUpOgorICAgICAgICBzZWxmLl9tYWtlX211bHRpcGFydCgnbWl4ZWQnLCAoKSwgYm91bmRhcnkpCisKKyAgICBkZWYgX2FkZF9tdWx0aXBhcnQoc2VsZiwgX3N1YnR5cGUsICphcmdzLCBfZGlzcD1Ob25lLCAqKmt3KToKKyAgICAgICAgaWYgKHNlbGYuZ2V0X2NvbnRlbnRfbWFpbnR5cGUoKSAhPSAnbXVsdGlwYXJ0JyBvcgorICAgICAgICAgICAgICAgIHNlbGYuZ2V0X2NvbnRlbnRfc3VidHlwZSgpICE9IF9zdWJ0eXBlKToKKyAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgJ21ha2VfJyArIF9zdWJ0eXBlKSgpCisgICAgICAgIHBhcnQgPSB0eXBlKHNlbGYpKHBvbGljeT1zZWxmLnBvbGljeSkKKyAgICAgICAgcGFydC5zZXRfY29udGVudCgqYXJncywgKiprdykKKyAgICAgICAgaWYgX2Rpc3AgYW5kICdjb250ZW50LWRpc3Bvc2l0aW9uJyBub3QgaW4gcGFydDoKKyAgICAgICAgICAgIHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSA9IF9kaXNwCisgICAgICAgIHNlbGYuYXR0YWNoKHBhcnQpCisKKyAgICBkZWYgYWRkX3JlbGF0ZWQoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9hZGRfbXVsdGlwYXJ0KCdyZWxhdGVkJywgKmFyZ3MsIF9kaXNwPSdpbmxpbmUnLCAqKmt3KQorCisgICAgZGVmIGFkZF9hbHRlcm5hdGl2ZShzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHNlbGYuX2FkZF9tdWx0aXBhcnQoJ2FsdGVybmF0aXZlJywgKmFyZ3MsICoqa3cpCisKKyAgICBkZWYgYWRkX2F0dGFjaG1lbnQoc2VsZiwgKmFyZ3MsICoqa3cpOgorICAgICAgICBzZWxmLl9hZGRfbXVsdGlwYXJ0KCdtaXhlZCcsICphcmdzLCBfZGlzcD0nYXR0YWNobWVudCcsICoqa3cpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBbXQorICAgICAgICBzZWxmLl9wYXlsb2FkID0gTm9uZQorCisgICAgZGVmIGNsZWFyX2NvbnRlbnQoc2VsZik6CisgICAgICAgIHNlbGYuX2hlYWRlcnMgPSBbKG4sIHYpIGZvciBuLCB2IGluIHNlbGYuX2hlYWRlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgbi5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyldCisgICAgICAgIHNlbGYuX3BheWxvYWQgPSBOb25lCisKKworY2xhc3MgRW1haWxNZXNzYWdlKE1JTUVQYXJ0KToKKworICAgIGRlZiBzZXRfY29udGVudChzZWxmLCAqYXJncywgKiprdyk6CisgICAgICAgIHN1cGVyKCkuc2V0X2NvbnRlbnQoKmFyZ3MsICoqa3cpCisgICAgICAgIGlmICdNSU1FLVZlcnNpb24nIG5vdCBpbiBzZWxmOgorICAgICAgICAgICAgc2VsZlsnTUlNRS1WZXJzaW9uJ10gPSAnMS4wJwpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL21pbWUvbm9ubXVsdGlwYXJ0LnB5IGIvTGliL2VtYWlsL21pbWUvbm9ubXVsdGlwYXJ0LnB5CmluZGV4IGZjM2I5ZWIuLmUxZjUxOTYgMTAwNjQ0Ci0tLSBhL0xpYi9lbWFpbC9taW1lL25vbm11bHRpcGFydC5weQorKysgYi9MaWIvZW1haWwvbWltZS9ub25tdWx0aXBhcnQucHkKQEAgLTEyLDcgKzEyLDcgQEAKIAogDAogY2xhc3MgTUlNRU5vbk11bHRpcGFydChNSU1FQmFzZSk6Ci0gICAgIiIiQmFzZSBjbGFzcyBmb3IgTUlNRSBtdWx0aXBhcnQvKiB0eXBlIG1lc3NhZ2VzLiIiIgorICAgICIiIkJhc2UgY2xhc3MgZm9yIE1JTUUgbm9uLW11bHRpcGFydCB0eXBlIG1lc3NhZ2VzLiIiIgogCiAgICAgZGVmIGF0dGFjaChzZWxmLCBwYXlsb2FkKToKICAgICAgICAgIyBUaGUgcHVibGljIEFQSSBwcm9oaWJpdHMgYXR0YWNoaW5nIG11bHRpcGxlIHN1YnBhcnRzIHRvIE1JTUVCYXNlCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvbWltZS90ZXh0LnB5IGIvTGliL2VtYWlsL21pbWUvdGV4dC5weQppbmRleCAzYjViMDlmLi5lYzE4Yjg1IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvbWltZS90ZXh0LnB5CisrKyBiL0xpYi9lbWFpbC9taW1lL3RleHQucHkKQEAgLTYsNyArNiw2IEBACiAKIF9fYWxsX18gPSBbJ01JTUVUZXh0J10KIAotZnJvbSBlbWFpbC5lbmNvZGVycyBpbXBvcnQgZW5jb2RlXzdvcjhiaXQKIGZyb20gZW1haWwubWltZS5ub25tdWx0aXBhcnQgaW1wb3J0IE1JTUVOb25NdWx0aXBhcnQKIAogCmRpZmYgLS1naXQgYS9MaWIvZW1haWwvcGFyc2VyLnB5IGIvTGliL2VtYWlsL3BhcnNlci5weQppbmRleCA3NTJiZjM1Li44YzliYzllIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvcGFyc2VyLnB5CisrKyBiL0xpYi9lbWFpbC9wYXJzZXIucHkKQEAgLTQsMTkgKzQsMTggQEAKIAogIiIiQSBwYXJzZXIgb2YgUkZDIDI4MjIgYW5kIE1JTUUgZW1haWwgbWVzc2FnZXMuIiIiCiAKLV9fYWxsX18gPSBbJ1BhcnNlcicsICdIZWFkZXJQYXJzZXInLCAnQnl0ZXNQYXJzZXInLCAnQnl0ZXNIZWFkZXJQYXJzZXInXQorX19hbGxfXyA9IFsnUGFyc2VyJywgJ0hlYWRlclBhcnNlcicsICdCeXRlc1BhcnNlcicsICdCeXRlc0hlYWRlclBhcnNlcicsCisgICAgICAgICAgICdGZWVkUGFyc2VyJywgJ0J5dGVzRmVlZFBhcnNlciddCiAKLWltcG9ydCB3YXJuaW5ncwogZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIFRleHRJT1dyYXBwZXIKIAogZnJvbSBlbWFpbC5mZWVkcGFyc2VyIGltcG9ydCBGZWVkUGFyc2VyLCBCeXRlc0ZlZWRQYXJzZXIKLWZyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgTWVzc2FnZQogZnJvbSBlbWFpbC5fcG9saWN5YmFzZSBpbXBvcnQgY29tcGF0MzIKIAogCiAMCiBjbGFzcyBQYXJzZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIF9jbGFzcz1NZXNzYWdlLCAqLCBwb2xpY3k9Y29tcGF0MzIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBfY2xhc3M9Tm9uZSwgKiwgcG9saWN5PWNvbXBhdDMyKToKICAgICAgICAgIiIiUGFyc2VyIG9mIFJGQyAyODIyIGFuZCBNSU1FIGVtYWlsIG1lc3NhZ2VzLgogCiAgICAgICAgIENyZWF0ZXMgYW4gaW4tbWVtb3J5IG9iamVjdCB0cmVlIHJlcHJlc2VudGluZyB0aGUgZW1haWwgbWVzc2FnZSwgd2hpY2gKQEAgLTEwNyw4ICsxMDYsMTAgQEAKICAgICAgICAgbWVhbmluZyBpdCBwYXJzZXMgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KICAgICAgICAgIiIiCiAgICAgICAgIGZwID0gVGV4dElPV3JhcHBlcihmcCwgZW5jb2Rpbmc9J2FzY2lpJywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKQotICAgICAgICB3aXRoIGZwOgorICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJzZXIucGFyc2UoZnAsIGhlYWRlcnNvbmx5KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZnAuZGV0YWNoKCkKIAogCiAgICAgZGVmIHBhcnNlYnl0ZXMoc2VsZiwgdGV4dCwgaGVhZGVyc29ubHk9RmFsc2UpOgpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3BvbGljeS5weSBiL0xpYi9lbWFpbC9wb2xpY3kucHkKaW5kZXggMzhlODhhZi4uZjBiMjBmNCAxMDA2NDQKLS0tIGEvTGliL2VtYWlsL3BvbGljeS5weQorKysgYi9MaWIvZW1haWwvcG9saWN5LnB5CkBAIC01LDYgKzUsNyBAQAogZnJvbSBlbWFpbC5fcG9saWN5YmFzZSBpbXBvcnQgUG9saWN5LCBDb21wYXQzMiwgY29tcGF0MzIsIF9leHRlbmRfZG9jc3RyaW5ncwogZnJvbSBlbWFpbC51dGlscyBpbXBvcnQgX2hhc19zdXJyb2dhdGVzCiBmcm9tIGVtYWlsLmhlYWRlcnJlZ2lzdHJ5IGltcG9ydCBIZWFkZXJSZWdpc3RyeSBhcyBIZWFkZXJSZWdpc3RyeQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgcmF3X2RhdGFfbWFuYWdlcgogCiBfX2FsbF9fID0gWwogICAgICdDb21wYXQzMicsCkBAIC01OCwxMCArNTksMjIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgdHJlYXRtZW50LCB3aGlsZSBhbGwgb3RoZXIgZmllbGRzIGFyZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJlYXRlZCBhcyB1bnN0cnVjdHVyZWQuICBUaGlzIGxpc3Qgd2lsbCBiZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkIGJlZm9yZSB0aGUgZXh0ZW5zaW9uIGlzIG1hcmtlZCBzdGFibGUuKQorCisgICAgY29udGVudF9tYW5hZ2VyICAgICAtLSBhbiBvYmplY3Qgd2l0aCBhdCBsZWFzdCB0d28gbWV0aG9kczogZ2V0X2NvbnRlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBzZXRfY29udGVudC4gIFdoZW4gdGhlIGdldF9jb250ZW50IG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfY29udGVudCBtZXRob2Qgb2YgYSBNZXNzYWdlIG9iamVjdCBpcyBjYWxsZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBjYWxscyB0aGUgY29ycmVzcG9uZGluZyBtZXRob2Qgb2YgdGhpcyBvYmplY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzaW5nIGl0IHRoZSBtZXNzYWdlIG9iamVjdCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW55IGFyZ3VtZW50cyBvciBrZXl3b3JkcyB0aGF0IHdlcmUgcGFzc2VkIHRvCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCBhcyBhZGRpdGlvbmFsIGFyZ3VtZW50cy4gIFRoZSBkZWZhdWx0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50X21hbmFnZXIgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhOmB+ZW1haWwuY29udGVudG1hbmFnZXIucmF3X2RhdGFfbWFuYWdlcmAuCisKICAgICAiIiIKIAogICAgIHJlZm9sZF9zb3VyY2UgPSAnbG9uZycKICAgICBoZWFkZXJfZmFjdG9yeSA9IEhlYWRlclJlZ2lzdHJ5KCkKKyAgICBjb250ZW50X21hbmFnZXIgPSByYXdfZGF0YV9tYW5hZ2VyCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKiprdyk6CiAgICAgICAgICMgRW5zdXJlIHRoYXQgZWFjaCBuZXcgaW5zdGFuY2UgZ2V0cyBhIHVuaXF1ZSBoZWFkZXIgZmFjdG9yeQpkaWZmIC0tZ2l0IGEvTGliL2VtYWlsL3F1b3ByaW1pbWUucHkgYi9MaWIvZW1haWwvcXVvcHJpbWltZS5weQppbmRleCAzMGJmOTE2Li5jMWZlMmI0IDEwMDY0NAotLS0gYS9MaWIvZW1haWwvcXVvcHJpbWltZS5weQorKysgYi9MaWIvZW1haWwvcXVvcHJpbWltZS5weQpAQCAtNDAsNyArNDAsNiBAQAogICAgIF0KIAogaW1wb3J0IHJlCi1pbXBvcnQgaW8KIAogZnJvbSBzdHJpbmcgaW1wb3J0IGFzY2lpX2xldHRlcnMsIGRpZ2l0cywgaGV4ZGlnaXRzCiAKZGlmZiAtLWdpdCBhL0xpYi9lbWFpbC91dGlscy5weSBiL0xpYi9lbWFpbC91dGlscy5weQppbmRleCBmNzZjMjFlLi41MDgwZDgxIDEwMDY0NAotLS0gYS9MaWIvZW1haWwvdXRpbHMucHkKKysrIGIvTGliL2VtYWlsL3V0aWxzLnB5CkBAIC0yNSwxMyArMjUsMTAgQEAKIGltcG9ydCBvcwogaW1wb3J0IHJlCiBpbXBvcnQgdGltZQotaW1wb3J0IGJhc2U2NAogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHNvY2tldAogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgdXJsbGliLnBhcnNlCi1pbXBvcnQgd2FybmluZ3MKLWZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKIGZyb20gZW1haWwuX3BhcnNlYWRkciBpbXBvcnQgcXVvdGUKIGZyb20gZW1haWwuX3BhcnNlYWRkciBpbXBvcnQgQWRkcmVzc0xpc3QgYXMgX0FkZHJlc3NMaXN0CkBAIC0zOSwxMCArMzYsNyBAQAogCiBmcm9tIGVtYWlsLl9wYXJzZWFkZHIgaW1wb3J0IHBhcnNlZGF0ZSwgcGFyc2VkYXRlX3R6LCBfcGFyc2VkYXRlX3R6CiAKLWZyb20gcXVvcHJpIGltcG9ydCBkZWNvZGVzdHJpbmcgYXMgX3FkZWNvZGUKLQogIyBJbnRyYXBhY2thZ2UgaW1wb3J0cwotZnJvbSBlbWFpbC5lbmNvZGVycyBpbXBvcnQgX2JlbmNvZGUsIF9xZW5jb2RlCiBmcm9tIGVtYWlsLmNoYXJzZXQgaW1wb3J0IENoYXJzZXQKIAogQ09NTUFTUEFDRSA9ICcsICcKQEAgLTU0LDE3ICs0OCwyNyBAQAogc3BlY2lhbHNyZSA9IHJlLmNvbXBpbGUocidbXVtcXCgpPD5ALDo7Ii5dJykKIGVzY2FwZXNyZSA9IHJlLmNvbXBpbGUocidbXFwiXScpCiAKLSMgSG93IHRvIGZpZ3VyZSBvdXQgaWYgd2UgYXJlIHByb2Nlc3Npbmcgc3RyaW5ncyB0aGF0IGNvbWUgZnJvbSBhIGJ5dGUKLSMgc291cmNlIHdpdGggdW5kZWNvZGFibGUgY2hhcmFjdGVycy4KLV9oYXNfc3Vycm9nYXRlcyA9IHJlLmNvbXBpbGUoCi0gICAgJyhbXlx1ZDgwMC1cdWRiZmZdfFxBKVtcdWRjMDAtXHVkZmZmXShbXlx1ZGMwMC1cdWRmZmZdfFxaKScpLnNlYXJjaAorZGVmIF9oYXNfc3Vycm9nYXRlcyhzKToKKyAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBzIGNvbnRhaW5zIHN1cnJvZ2F0ZS1lc2NhcGVkIGJpbmFyeSBkYXRhLiIiIgorICAgICMgVGhpcyBjaGVjayBpcyBiYXNlZCBvbiB0aGUgZmFjdCB0aGF0IHVubGVzcyB0aGVyZSBhcmUgc3Vycm9nYXRlcywgdXRmOAorICAgICMgKFB5dGhvbidzIGRlZmF1bHQgZW5jb2RpbmcpIGNhbiBlbmNvZGUgYW55IHN0cmluZy4gIFRoaXMgaXMgdGhlIGZhc3Rlc3QKKyAgICAjIHdheSB0byBjaGVjayBmb3Igc3Vycm9nYXRlcywgc2VlIGlzc3VlIDExNDU0IGZvciB0aW1pbmdzLgorICAgIHRyeToKKyAgICAgICAgcy5lbmNvZGUoKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgorICAgICAgICByZXR1cm4gVHJ1ZQogCiAjIEhvdyB0byBkZWFsIHdpdGggYSBzdHJpbmcgY29udGFpbmluZyBieXRlcyBiZWZvcmUgaGFuZGluZyBpdCB0byB0aGUKICMgYXBwbGljYXRpb24gdGhyb3VnaCB0aGUgJ25vcm1hbCcgaW50ZXJmYWNlLgogZGVmIF9zYW5pdGl6ZShzdHJpbmcpOgotICAgICMgVHVybiBhbnkgZXNjYXBlZCBieXRlcyBpbnRvIHVuaWNvZGUgJ3Vua25vd24nIGNoYXIuCi0gICAgb3JpZ2luYWxfYnl0ZXMgPSBzdHJpbmcuZW5jb2RlKCdhc2NpaScsICdzdXJyb2dhdGVlc2NhcGUnKQotICAgIHJldHVybiBvcmlnaW5hbF9ieXRlcy5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKQorICAgICMgVHVybiBhbnkgZXNjYXBlZCBieXRlcyBpbnRvIHVuaWNvZGUgJ3Vua25vd24nIGNoYXIuICBJZiB0aGUgZXNjYXBlZAorICAgICMgYnl0ZXMgaGFwcGVuIHRvIGJlIHV0Zi04IHRoZXkgd2lsbCBpbnN0ZWFkIGdldCBkZWNvZGVkLCBldmVuIGlmIHRoZXkKKyAgICAjIHdlcmUgaW52YWxpZCBpbiB0aGUgY2hhcnNldCB0aGUgc291cmNlIHdhcyBzdXBwb3NlZCB0byBiZSBpbi4gIFRoaXMKKyAgICAjIHNlZW1zIGxpa2UgaXQgaXMgbm90IGEgYmFkIHRoaW5nOyBhIGRlZmVjdCB3YXMgc3RpbGwgcmVnaXN0ZXJlZC4KKyAgICBvcmlnaW5hbF9ieXRlcyA9IHN0cmluZy5lbmNvZGUoJ3V0Zi04JywgJ3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgcmV0dXJuIG9yaWdpbmFsX2J5dGVzLmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpCisKIAogCiAjIEhlbHBlcnMKQEAgLTE1MSwzMCArMTU1LDE0IEBACiAgICAgIyAyODIyIHJlcXVpcmVzIHRoYXQgZGF5IGFuZCBtb250aCBuYW1lcyBiZSB0aGUgRW5nbGlzaCBhYmJyZXZpYXRpb25zLgogICAgIGlmIHRpbWV2YWwgaXMgTm9uZToKICAgICAgICAgdGltZXZhbCA9IHRpbWUudGltZSgpCi0gICAgaWYgbG9jYWx0aW1lOgotICAgICAgICBub3cgPSB0aW1lLmxvY2FsdGltZSh0aW1ldmFsKQotICAgICAgICAjIENhbGN1bGF0ZSB0aW1lem9uZSBvZmZzZXQsIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGxvY2FsIHpvbmUgaGFzCi0gICAgICAgICMgZGF5bGlnaHQgc2F2aW5ncyB0aW1lLCBhbmQgd2hldGhlciBEU1QgaXMgaW4gZWZmZWN0LgotICAgICAgICBpZiB0aW1lLmRheWxpZ2h0IGFuZCBub3dbLTFdOgotICAgICAgICAgICAgb2Zmc2V0ID0gdGltZS5hbHR6b25lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBvZmZzZXQgPSB0aW1lLnRpbWV6b25lCi0gICAgICAgIGhvdXJzLCBtaW51dGVzID0gZGl2bW9kKGFicyhvZmZzZXQpLCAzNjAwKQotICAgICAgICAjIFJlbWVtYmVyIG9mZnNldCBpcyBpbiBzZWNvbmRzIHdlc3Qgb2YgVVRDLCBidXQgdGhlIHRpbWV6b25lIGlzIGluCi0gICAgICAgICMgbWludXRlcyBlYXN0IG9mIFVUQywgc28gdGhlIHNpZ25zIGRpZmZlci4KLSAgICAgICAgaWYgb2Zmc2V0ID4gMDoKLSAgICAgICAgICAgIHNpZ24gPSAnLScKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNpZ24gPSAnKycKLSAgICAgICAgem9uZSA9ICclcyUwMmQlMDJkJyAlIChzaWduLCBob3VycywgbWludXRlcyAvLyA2MCkKKyAgICBpZiBsb2NhbHRpbWUgb3IgdXNlZ210OgorICAgICAgICBkdCA9IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAodGltZXZhbCwgZGF0ZXRpbWUudGltZXpvbmUudXRjKQogICAgIGVsc2U6Ci0gICAgICAgIG5vdyA9IHRpbWUuZ210aW1lKHRpbWV2YWwpCi0gICAgICAgICMgVGltZXpvbmUgb2Zmc2V0IGlzIGFsd2F5cyAtMDAwMAotICAgICAgICBpZiB1c2VnbXQ6Ci0gICAgICAgICAgICB6b25lID0gJ0dNVCcKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHpvbmUgPSAnLTAwMDAnCi0gICAgcmV0dXJuIF9mb3JtYXRfdGltZXR1cGxlX2FuZF96b25lKG5vdywgem9uZSkKKyAgICAgICAgZHQgPSBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKHRpbWV2YWwpCisgICAgaWYgbG9jYWx0aW1lOgorICAgICAgICBkdCA9IGR0LmFzdGltZXpvbmUoKQorICAgICAgICB1c2VnbXQgPSBGYWxzZQorICAgIHJldHVybiBmb3JtYXRfZGF0ZXRpbWUoZHQsIHVzZWdtdCkKIAogZGVmIGZvcm1hdF9kYXRldGltZShkdCwgdXNlZ210PUZhbHNlKToKICAgICAiIiJUdXJuIGEgZGF0ZXRpbWUgaW50byBhIGRhdGUgc3RyaW5nIGFzIHNwZWNpZmllZCBpbiBSRkMgMjgyMi4KQEAgLTE5OCwyNCArMTg2LDIzIEBACiBkZWYgbWFrZV9tc2dpZChpZHN0cmluZz1Ob25lLCBkb21haW49Tm9uZSk6CiAgICAgIiIiUmV0dXJucyBhIHN0cmluZyBzdWl0YWJsZSBmb3IgUkZDIDI4MjIgY29tcGxpYW50IE1lc3NhZ2UtSUQsIGUuZzoKIAotICAgIDwyMDAyMDIwMTE5NTYyNy4zMzUzOS45NjY3MUBuaWdodHNoYWRlLmxhLm1hc3RhbGVyLmNvbT4KKyAgICA8MTQyNDgwMjE2NDg2LjIwODAwLjE2NTI2Mzg4MDQwODc3OTQ2ODg3QG5pZ2h0c2hhZGUubGEubWFzdGFsZXIuY29tPgogCiAgICAgT3B0aW9uYWwgaWRzdHJpbmcgaWYgZ2l2ZW4gaXMgYSBzdHJpbmcgdXNlZCB0byBzdHJlbmd0aGVuIHRoZQogICAgIHVuaXF1ZW5lc3Mgb2YgdGhlIG1lc3NhZ2UgaWQuICBPcHRpb25hbCBkb21haW4gaWYgZ2l2ZW4gcHJvdmlkZXMgdGhlCiAgICAgcG9ydGlvbiBvZiB0aGUgbWVzc2FnZSBpZCBhZnRlciB0aGUgJ0AnLiAgSXQgZGVmYXVsdHMgdG8gdGhlIGxvY2FsbHkKICAgICBkZWZpbmVkIGhvc3RuYW1lLgogICAgICIiIgotICAgIHRpbWV2YWwgPSB0aW1lLnRpbWUoKQotICAgIHV0Y2RhdGUgPSB0aW1lLnN0cmZ0aW1lKCclWSVtJWQlSCVNJVMnLCB0aW1lLmdtdGltZSh0aW1ldmFsKSkKKyAgICB0aW1ldmFsID0gaW50KHRpbWUudGltZSgpKjEwMCkKICAgICBwaWQgPSBvcy5nZXRwaWQoKQotICAgIHJhbmRpbnQgPSByYW5kb20ucmFuZHJhbmdlKDEwMDAwMCkKKyAgICByYW5kaW50ID0gcmFuZG9tLmdldHJhbmRiaXRzKDY0KQogICAgIGlmIGlkc3RyaW5nIGlzIE5vbmU6CiAgICAgICAgIGlkc3RyaW5nID0gJycKICAgICBlbHNlOgogICAgICAgICBpZHN0cmluZyA9ICcuJyArIGlkc3RyaW5nCiAgICAgaWYgZG9tYWluIGlzIE5vbmU6CiAgICAgICAgIGRvbWFpbiA9IHNvY2tldC5nZXRmcWRuKCkKLSAgICBtc2dpZCA9ICc8JXMuJXMuJXMlc0Alcz4nICUgKHV0Y2RhdGUsIHBpZCwgcmFuZGludCwgaWRzdHJpbmcsIGRvbWFpbikKKyAgICBtc2dpZCA9ICc8JWQuJWQuJWQlc0Alcz4nICUgKHRpbWV2YWwsIHBpZCwgcmFuZGludCwgaWRzdHJpbmcsIGRvbWFpbikKICAgICByZXR1cm4gbXNnaWQKIAogCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkgYi9MaWIvZW5jb2RpbmdzL2FsaWFzZXMucHkKaW5kZXggMjM1ZGViNS4uNGNiYWFkZSAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9hbGlhc2VzLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvYWxpYXNlcy5weQpAQCAtMzMsOSArMzMsOSBAQAogICAgICd1cycgICAgICAgICAgICAgICAgIDogJ2FzY2lpJywKICAgICAndXNfYXNjaWknICAgICAgICAgICA6ICdhc2NpaScsCiAKLSAgICAjIyBiYXNlNjRfY29kZWMgY29kZWMKLSAgICAjJ2Jhc2U2NCcgICAgICAgICAgICAgOiAnYmFzZTY0X2NvZGVjJywKLSAgICAjJ2Jhc2VfNjQnICAgICAgICAgICAgOiAnYmFzZTY0X2NvZGVjJywKKyAgICAjIGJhc2U2NF9jb2RlYyBjb2RlYworICAgICdiYXNlNjQnICAgICAgICAgICAgIDogJ2Jhc2U2NF9jb2RlYycsCisgICAgJ2Jhc2VfNjQnICAgICAgICAgICAgOiAnYmFzZTY0X2NvZGVjJywKIAogICAgICMgYmlnNSBjb2RlYwogICAgICdiaWc1X3R3JyAgICAgICAgICAgIDogJ2JpZzUnLApAQCAtNDUsOCArNDUsOCBAQAogICAgICdiaWc1X2hrc2NzJyAgICAgICAgIDogJ2JpZzVoa3NjcycsCiAgICAgJ2hrc2NzJyAgICAgICAgICAgICAgOiAnYmlnNWhrc2NzJywKIAotICAgICMjIGJ6Ml9jb2RlYyBjb2RlYwotICAgICMnYnoyJyAgICAgICAgICAgICAgICA6ICdiejJfY29kZWMnLAorICAgICMgYnoyX2NvZGVjIGNvZGVjCisgICAgJ2J6MicgICAgICAgICAgICAgICAgOiAnYnoyX2NvZGVjJywKIAogICAgICMgY3AwMzcgY29kZWMKICAgICAnMDM3JyAgICAgICAgICAgICAgICA6ICdjcDAzNycsCkBAIC02Myw2ICs2MywxMiBAQAogICAgICdjc2libTEwMjYnICAgICAgICAgIDogJ2NwMTAyNicsCiAgICAgJ2libTEwMjYnICAgICAgICAgICAgOiAnY3AxMDI2JywKIAorICAgICMgY3AxMTI1IGNvZGVjCisgICAgJzExMjUnICAgICAgICAgICAgICAgIDogJ2NwMTEyNScsCisgICAgJ2libTExMjUnICAgICAgICAgICAgIDogJ2NwMTEyNScsCisgICAgJ2NwODY2dScgICAgICAgICAgICAgIDogJ2NwMTEyNScsCisgICAgJ3J1c2NpaScgICAgICAgICAgICAgIDogJ2NwMTEyNScsCisKICAgICAjIGNwMTE0MCBjb2RlYwogICAgICcxMTQwJyAgICAgICAgICAgICAgIDogJ2NwMTE0MCcsCiAgICAgJ2libTExNDAnICAgICAgICAgICAgOiAnY3AxMTQwJywKQEAgLTEwMyw2ICsxMDksMTEgQEAKICAgICAnMTI1OCcgICAgICAgICAgICAgICA6ICdjcDEyNTgnLAogICAgICd3aW5kb3dzXzEyNTgnICAgICAgIDogJ2NwMTI1OCcsCiAKKyAgICAjIGNwMjczIGNvZGVjCisgICAgJzI3MycgICAgICAgICAgICAgICAgOiAnY3AyNzMnLAorICAgICdpYm0yNzMnICAgICAgICAgICAgIDogJ2NwMjczJywKKyAgICAnY3NpYm0yNzMnICAgICAgICAgICA6ICdjcDI3MycsCisKICAgICAjIGNwNDI0IGNvZGVjCiAgICAgJzQyNCcgICAgICAgICAgICAgICAgOiAnY3A0MjQnLAogICAgICdjc2libTQyNCcgICAgICAgICAgIDogJ2NwNDI0JywKQEAgLTI0OCw4ICsyNTksOCBAQAogICAgICdjcDkzNicgICAgICAgICAgICAgIDogJ2diaycsCiAgICAgJ21zOTM2JyAgICAgICAgICAgICAgOiAnZ2JrJywKIAotICAgICMjIGhleF9jb2RlYyBjb2RlYwotICAgICMnaGV4JyAgICAgICAgICAgICAgICA6ICdoZXhfY29kZWMnLAorICAgICMgaGV4X2NvZGVjIGNvZGVjCisgICAgJ2hleCcgICAgICAgICAgICAgICAgOiAnaGV4X2NvZGVjJywKIAogICAgICMgaHBfcm9tYW44IGNvZGVjCiAgICAgJ3JvbWFuOCcgICAgICAgICAgICAgOiAnaHBfcm9tYW44JywKQEAgLTQ1MCwxMyArNDYxLDEzIEBACiAgICAgJ2NwMTU0JyAgICAgICAgICAgICAgOiAncHRjcDE1NCcsCiAgICAgJ2N5cmlsbGljX2FzaWFuJyAgICAgOiAncHRjcDE1NCcsCiAKLSAgICAjIyBxdW9wcmlfY29kZWMgY29kZWMKLSAgICAjJ3F1b3ByaScgICAgICAgICAgICAgOiAncXVvcHJpX2NvZGVjJywKLSAgICAjJ3F1b3RlZF9wcmludGFibGUnICAgOiAncXVvcHJpX2NvZGVjJywKLSAgICAjJ3F1b3RlZHByaW50YWJsZScgICAgOiAncXVvcHJpX2NvZGVjJywKKyAgICAjIHF1b3ByaV9jb2RlYyBjb2RlYworICAgICdxdW9wcmknICAgICAgICAgICAgIDogJ3F1b3ByaV9jb2RlYycsCisgICAgJ3F1b3RlZF9wcmludGFibGUnICAgOiAncXVvcHJpX2NvZGVjJywKKyAgICAncXVvdGVkcHJpbnRhYmxlJyAgICA6ICdxdW9wcmlfY29kZWMnLAogCi0gICAgIyMgcm90XzEzIGNvZGVjCi0gICAgIydyb3QxMycgICAgICAgICAgICAgIDogJ3JvdF8xMycsCisgICAgIyByb3RfMTMgY29kZWMKKyAgICAncm90MTMnICAgICAgICAgICAgICA6ICdyb3RfMTMnLAogCiAgICAgIyBzaGlmdF9qaXMgY29kZWMKICAgICAnY3NzaGlmdGppcycgICAgICAgICA6ICdzaGlmdF9qaXMnLApAQCAtNTE4LDEyICs1MjksMTIgQEAKICAgICAndXRmOF91Y3MyJyAgICAgICAgICA6ICd1dGZfOCcsCiAgICAgJ3V0ZjhfdWNzNCcgICAgICAgICAgOiAndXRmXzgnLAogCi0gICAgIyMgdXVfY29kZWMgY29kZWMKLSAgICAjJ3V1JyAgICAgICAgICAgICAgICAgOiAndXVfY29kZWMnLAorICAgICMgdXVfY29kZWMgY29kZWMKKyAgICAndXUnICAgICAgICAgICAgICAgICA6ICd1dV9jb2RlYycsCiAKLSAgICAjIyB6bGliX2NvZGVjIGNvZGVjCi0gICAgIyd6aXAnICAgICAgICAgICAgICAgIDogJ3psaWJfY29kZWMnLAotICAgICMnemxpYicgICAgICAgICAgICAgICA6ICd6bGliX2NvZGVjJywKKyAgICAjIHpsaWJfY29kZWMgY29kZWMKKyAgICAnemlwJyAgICAgICAgICAgICAgICA6ICd6bGliX2NvZGVjJywKKyAgICAnemxpYicgICAgICAgICAgICAgICA6ICd6bGliX2NvZGVjJywKIAogICAgICMgdGVtcG9yYXJ5IG1hYyBDSksgYWxpYXNlcywgd2lsbCBiZSByZXBsYWNlZCBieSBwcm9wZXIgY29kZWNzIGluIDMuMQogICAgICd4X21hY19qYXBhbmVzZScgICAgICA6ICdzaGlmdF9qaXMnLApkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDAzNy5weSBiL0xpYi9lbmNvZGluZ3MvY3AwMzcucHkKaW5kZXggYmZlMmMxZS4uNGVkZDcwOCAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy9jcDAzNy5weQorKysgYi9MaWIvZW5jb2RpbmdzL2NwMDM3LnB5CkBAIC0zMDEsNyArMzAxLDYgQEAKICAgICAnXHhkOScgICAgICMgIDB4RkQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEdSQVZFCiAgICAgJ1x4ZGEnICAgICAjICAweEZFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQogICAgICdceDlmJyAgICAgIyAgMHhGRiAtPiBDT05UUk9MCi0gICAgJ1x1ZmZmZScgICAjIyBXaWRlbiB0byBVQ1MyIGZvciBvcHRpbWl6YXRpb24KICkKIAogIyMjIEVuY29kaW5nIHRhYmxlCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL2NwMTEyNS5weSBiL0xpYi9lbmNvZGluZ3MvY3AxMTI1LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxZmQ2OWQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5jb2RpbmdzL2NwMTEyNS5weQpAQCAtMCwwICsxLDY5OCBAQAorIiIiIFB5dGhvbiBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyBmb3IgQ1AxMTI1CisKKyIiIiMiCisKK2ltcG9ydCBjb2RlY3MKKworIyMjIENvZGVjIEFQSXMKKworY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKKworICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ19tYXApCisKKyAgICBkZWYgZGVjb2RlKHNlbGYsaW5wdXQsZXJyb3JzPSdzdHJpY3QnKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxlcnJvcnMsZGVjb2RpbmdfdGFibGUpCisKK2NsYXNzIEluY3JlbWVudGFsRW5jb2Rlcihjb2RlY3MuSW5jcmVtZW50YWxFbmNvZGVyKToKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBmaW5hbD1GYWxzZSk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9lbmNvZGUoaW5wdXQsc2VsZi5lcnJvcnMsZW5jb2RpbmdfbWFwKVswXQorCitjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CisgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nX3RhYmxlKVswXQorCitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CisgICAgcGFzcworCitjbGFzcyBTdHJlYW1SZWFkZXIoQ29kZWMsY29kZWNzLlN0cmVhbVJlYWRlcik6CisgICAgcGFzcworCisjIyMgZW5jb2RpbmdzIG1vZHVsZSBBUEkKKworZGVmIGdldHJlZ2VudHJ5KCk6CisgICAgcmV0dXJuIGNvZGVjcy5Db2RlY0luZm8oCisgICAgICAgIG5hbWU9J2NwMTEyNScsCisgICAgICAgIGVuY29kZT1Db2RlYygpLmVuY29kZSwKKyAgICAgICAgZGVjb2RlPUNvZGVjKCkuZGVjb2RlLAorICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9SW5jcmVtZW50YWxFbmNvZGVyLAorICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAorICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAorICAgICkKKworIyMjIERlY29kaW5nIE1hcAorCitkZWNvZGluZ19tYXAgPSBjb2RlY3MubWFrZV9pZGVudGl0eV9kaWN0KHJhbmdlKDI1NikpCitkZWNvZGluZ19tYXAudXBkYXRlKHsKKyAgICAweDAwODA6IDB4MDQxMCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEEKKyAgICAweDAwODE6IDB4MDQxMSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCisgICAgMHgwMDgyOiAweDA0MTIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRQorICAgIDB4MDA4MzogMHgwNDEzLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFCisgICAgMHgwMDg0OiAweDA0MTQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorICAgIDB4MDA4NTogMHgwNDE1LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKKyAgICAweDAwODY6IDB4MDQxNiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorICAgIDB4MDA4NzogMHgwNDE3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKKyAgICAweDAwODg6IDB4MDQxOCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEkKKyAgICAweDAwODk6IDB4MDQxOSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIEkKKyAgICAweDAwOGE6IDB4MDQxYSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCisgICAgMHgwMDhiOiAweDA0MWIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTAorICAgIDB4MDA4YzogMHgwNDFjLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU0KKyAgICAweDAwOGQ6IDB4MDQxZCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCisgICAgMHgwMDhlOiAweDA0MWUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPCisgICAgMHgwMDhmOiAweDA0MWYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRQorICAgIDB4MDA5MDogMHgwNDIwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKKyAgICAweDAwOTE6IDB4MDQyMSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVTCisgICAgMHgwMDkyOiAweDA0MjIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURQorICAgIDB4MDA5MzogMHgwNDIzLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorICAgIDB4MDA5NDogMHgwNDI0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUYKKyAgICAweDAwOTU6IDB4MDQyNSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBCisgICAgMHgwMDk2OiAweDA0MjYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKKyAgICAweDAwOTc6IDB4MDQyNywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRQorICAgIDB4MDA5ODogMHgwNDI4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCisgICAgMHgwMDk5OiAweDA0MjksICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQQorICAgIDB4MDA5YTogMHgwNDJhLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOCisgICAgMHgwMDliOiAweDA0MmIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVCisgICAgMHgwMDljOiAweDA0MmMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAweDAwOWQ6IDB4MDQyZCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKyAgICAweDAwOWU6IDB4MDQyZSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlVCisgICAgMHgwMDlmOiAweDA0MmYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQQorICAgIDB4MDBhMDogMHgwNDMwLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKyAgICAweDAwYTE6IDB4MDQzMSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBCRQorICAgIDB4MDBhMjogMHgwNDMyLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCisgICAgMHgwMGEzOiAweDA0MzMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCisgICAgMHgwMGE0OiAweDA0MzQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgREUKKyAgICAweDAwYTU6IDB4MDQzNSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJRQorICAgIDB4MDBhNjogMHgwNDM2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorICAgIDB4MDBhNzogMHgwNDM3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCisgICAgMHgwMGE4OiAweDA0MzgsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorICAgIDB4MDBhOTogMHgwNDM5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkKKyAgICAweDAwYWE6IDB4MDQzYSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBLQQorICAgIDB4MDBhYjogMHgwNDNiLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVMCisgICAgMHgwMGFjOiAweDA0M2MsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KKyAgICAweDAwYWQ6IDB4MDQzZCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTgorICAgIDB4MDBhZTogMHgwNDNlLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE8KKyAgICAweDAwYWY6IDB4MDQzZiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBQRQorICAgIDB4MDBiMDogMHgyNTkxLCAgICAgIyAgTElHSFQgU0hBREUKKyAgICAweDAwYjE6IDB4MjU5MiwgICAgICMgIE1FRElVTSBTSEFERQorICAgIDB4MDBiMjogMHgyNTkzLCAgICAgIyAgREFSSyBTSEFERQorICAgIDB4MDBiMzogMHgyNTAyLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgMHgwMGI0OiAweDI1MjQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDAwYjU6IDB4MjU2MSwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgMHgwMGI2OiAweDI1NjIsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MDBiNzogMHgyNTU2LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MDBiODogMHgyNTU1LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MDBiOTogMHgyNTYzLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgTEVGVAorICAgIDB4MDBiYTogMHgyNTUxLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTAorICAgIDB4MDBiYjogMHgyNTU3LCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBET1dOIEFORCBMRUZUCisgICAgMHgwMGJjOiAweDI1NWQsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBMRUZUCisgICAgMHgwMGJkOiAweDI1NWMsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgIDB4MDBiZTogMHgyNTViLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDAwYmY6IDB4MjUxMCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgMHgwMGMwOiAweDI1MTQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIFJJR0hUCisgICAgMHgwMGMxOiAweDI1MzQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDAwYzI6IDB4MjUyYywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGMzOiAweDI1MWMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgwMGM0OiAweDI1MDAsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgSE9SSVpPTlRBTAorICAgIDB4MDBjNTogMHgyNTNjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgwMGM2OiAweDI1NWUsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDAwYzc6IDB4MjU1ZiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgIDB4MDBjODogMHgyNTVhLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAweDAwYzk6IDB4MjU1NCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICAweDAwY2E6IDB4MjU2OSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDAwY2I6IDB4MjU2NiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjYzogMHgyNTYwLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgUklHSFQKKyAgICAweDAwY2Q6IDB4MjU1MCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgSE9SSVpPTlRBTAorICAgIDB4MDBjZTogMHgyNTZjLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MDBjZjogMHgyNTY3LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDAwZDA6IDB4MjU2OCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgwMGQxOiAweDI1NjQsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgwMGQyOiAweDI1NjUsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgwMGQzOiAweDI1NTksICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDAwZDQ6IDB4MjU1OCwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MDBkNTogMHgyNTUyLCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gU0lOR0xFIEFORCBSSUdIVCBET1VCTEUKKyAgICAweDAwZDY6IDB4MjU1MywgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgwMGQ3OiAweDI1NmIsICAgICAjICBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MDBkODogMHgyNTZhLCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDAwZDk6IDB4MjUxOCwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgTEVGVAorICAgIDB4MDBkYTogMHgyNTBjLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUCisgICAgMHgwMGRiOiAweDI1ODgsICAgICAjICBGVUxMIEJMT0NLCisgICAgMHgwMGRjOiAweDI1ODQsICAgICAjICBMT1dFUiBIQUxGIEJMT0NLCisgICAgMHgwMGRkOiAweDI1OGMsICAgICAjICBMRUZUIEhBTEYgQkxPQ0sKKyAgICAweDAwZGU6IDB4MjU5MCwgICAgICMgIFJJR0hUIEhBTEYgQkxPQ0sKKyAgICAweDAwZGY6IDB4MjU4MCwgICAgICMgIFVQUEVSIEhBTEYgQkxPQ0sKKyAgICAweDAwZTA6IDB4MDQ0MCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFUgorICAgIDB4MDBlMTogMHgwNDQxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVTCisgICAgMHgwMGUyOiAweDA0NDIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVEUKKyAgICAweDAwZTM6IDB4MDQ0MywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBVCisgICAgMHgwMGU0OiAweDA0NDQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRUYKKyAgICAweDAwZTU6IDB4MDQ0NSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBIQQorICAgIDB4MDBlNjogMHgwNDQ2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTRQorICAgIDB4MDBlNzogMHgwNDQ3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIENIRQorICAgIDB4MDBlODogMHgwNDQ4LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQQorICAgIDB4MDBlOTogMHgwNDQ5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQ0hBCisgICAgMHgwMGVhOiAweDA0NGEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSEFSRCBTSUdOCisgICAgMHgwMGViOiAweDA0NGIsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUVSVQorICAgIDB4MDBlYzogMHgwNDRjLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTgorICAgIDB4MDBlZDogMHgwNDRkLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEUKKyAgICAweDAwZWU6IDB4MDQ0ZSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZVQorICAgIDB4MDBlZjogMHgwNDRmLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBCisgICAgMHgwMGYwOiAweDA0MDEsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJTworICAgIDB4MDBmMTogMHgwNDUxLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIElPCisgICAgMHgwMGYyOiAweDA0OTAsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAweDAwZjM6IDB4MDQ5MSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAweDAwZjQ6IDB4MDQwNCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgIDB4MDBmNTogMHgwNDU0LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgIDB4MDBmNjogMHgwNDA2LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgMHgwMGY3OiAweDA0NTYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQllFTE9SVVNTSUFOLVVLUkFJTklBTiBJCisgICAgMHgwMGY4OiAweDA0MDcsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZSQorICAgIDB4MDBmOTogMHgwNDU3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlJCisgICAgMHgwMGZhOiAweDAwYjcsICAgICAjICBNSURETEUgRE9UCisgICAgMHgwMGZiOiAweDIyMWEsICAgICAjICBTUVVBUkUgUk9PVAorICAgIDB4MDBmYzogMHgyMTE2LCAgICAgIyAgTlVNRVJPIFNJR04KKyAgICAweDAwZmQ6IDB4MDBhNCwgICAgICMgIENVUlJFTkNZIFNJR04KKyAgICAweDAwZmU6IDB4MjVhMCwgICAgICMgIEJMQUNLIFNRVUFSRQorICAgIDB4MDBmZjogMHgwMGEwLCAgICAgIyAgTk8tQlJFQUsgU1BBQ0UKK30pCisKKyMjIyBEZWNvZGluZyBUYWJsZQorCitkZWNvZGluZ190YWJsZSA9ICgKKyAgICAnXHgwMCcgICAgICMgIDB4MDAwMCAtPiBOVUxMCisgICAgJ1x4MDEnICAgICAjICAweDAwMDEgLT4gU1RBUlQgT0YgSEVBRElORworICAgICdceDAyJyAgICAgIyAgMHgwMDAyIC0+IFNUQVJUIE9GIFRFWFQKKyAgICAnXHgwMycgICAgICMgIDB4MDAwMyAtPiBFTkQgT0YgVEVYVAorICAgICdceDA0JyAgICAgIyAgMHgwMDA0IC0+IEVORCBPRiBUUkFOU01JU1NJT04KKyAgICAnXHgwNScgICAgICMgIDB4MDAwNSAtPiBFTlFVSVJZCisgICAgJ1x4MDYnICAgICAjICAweDAwMDYgLT4gQUNLTk9XTEVER0UKKyAgICAnXHgwNycgICAgICMgIDB4MDAwNyAtPiBCRUxMCisgICAgJ1x4MDgnICAgICAjICAweDAwMDggLT4gQkFDS1NQQUNFCisgICAgJ1x0JyAgICAgICAjICAweDAwMDkgLT4gSE9SSVpPTlRBTCBUQUJVTEFUSU9OCisgICAgJ1xuJyAgICAgICAjICAweDAwMGEgLT4gTElORSBGRUVECisgICAgJ1x4MGInICAgICAjICAweDAwMGIgLT4gVkVSVElDQUwgVEFCVUxBVElPTgorICAgICdceDBjJyAgICAgIyAgMHgwMDBjIC0+IEZPUk0gRkVFRAorICAgICdccicgICAgICAgIyAgMHgwMDBkIC0+IENBUlJJQUdFIFJFVFVSTgorICAgICdceDBlJyAgICAgIyAgMHgwMDBlIC0+IFNISUZUIE9VVAorICAgICdceDBmJyAgICAgIyAgMHgwMDBmIC0+IFNISUZUIElOCisgICAgJ1x4MTAnICAgICAjICAweDAwMTAgLT4gREFUQSBMSU5LIEVTQ0FQRQorICAgICdceDExJyAgICAgIyAgMHgwMDExIC0+IERFVklDRSBDT05UUk9MIE9ORQorICAgICdceDEyJyAgICAgIyAgMHgwMDEyIC0+IERFVklDRSBDT05UUk9MIFRXTworICAgICdceDEzJyAgICAgIyAgMHgwMDEzIC0+IERFVklDRSBDT05UUk9MIFRIUkVFCisgICAgJ1x4MTQnICAgICAjICAweDAwMTQgLT4gREVWSUNFIENPTlRST0wgRk9VUgorICAgICdceDE1JyAgICAgIyAgMHgwMDE1IC0+IE5FR0FUSVZFIEFDS05PV0xFREdFCisgICAgJ1x4MTYnICAgICAjICAweDAwMTYgLT4gU1lOQ0hST05PVVMgSURMRQorICAgICdceDE3JyAgICAgIyAgMHgwMDE3IC0+IEVORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sKKyAgICAnXHgxOCcgICAgICMgIDB4MDAxOCAtPiBDQU5DRUwKKyAgICAnXHgxOScgICAgICMgIDB4MDAxOSAtPiBFTkQgT0YgTUVESVVNCisgICAgJ1x4MWEnICAgICAjICAweDAwMWEgLT4gU1VCU1RJVFVURQorICAgICdceDFiJyAgICAgIyAgMHgwMDFiIC0+IEVTQ0FQRQorICAgICdceDFjJyAgICAgIyAgMHgwMDFjIC0+IEZJTEUgU0VQQVJBVE9SCisgICAgJ1x4MWQnICAgICAjICAweDAwMWQgLT4gR1JPVVAgU0VQQVJBVE9SCisgICAgJ1x4MWUnICAgICAjICAweDAwMWUgLT4gUkVDT1JEIFNFUEFSQVRPUgorICAgICdceDFmJyAgICAgIyAgMHgwMDFmIC0+IFVOSVQgU0VQQVJBVE9SCisgICAgJyAnICAgICAgICAjICAweDAwMjAgLT4gU1BBQ0UKKyAgICAnIScgICAgICAgICMgIDB4MDAyMSAtPiBFWENMQU1BVElPTiBNQVJLCisgICAgJyInICAgICAgICAjICAweDAwMjIgLT4gUVVPVEFUSU9OIE1BUksKKyAgICAnIycgICAgICAgICMgIDB4MDAyMyAtPiBOVU1CRVIgU0lHTgorICAgICckJyAgICAgICAgIyAgMHgwMDI0IC0+IERPTExBUiBTSUdOCisgICAgJyUnICAgICAgICAjICAweDAwMjUgLT4gUEVSQ0VOVCBTSUdOCisgICAgJyYnICAgICAgICAjICAweDAwMjYgLT4gQU1QRVJTQU5ECisgICAgIiciICAgICAgICAjICAweDAwMjcgLT4gQVBPU1RST1BIRQorICAgICcoJyAgICAgICAgIyAgMHgwMDI4IC0+IExFRlQgUEFSRU5USEVTSVMKKyAgICAnKScgICAgICAgICMgIDB4MDAyOSAtPiBSSUdIVCBQQVJFTlRIRVNJUworICAgICcqJyAgICAgICAgIyAgMHgwMDJhIC0+IEFTVEVSSVNLCisgICAgJysnICAgICAgICAjICAweDAwMmIgLT4gUExVUyBTSUdOCisgICAgJywnICAgICAgICAjICAweDAwMmMgLT4gQ09NTUEKKyAgICAnLScgICAgICAgICMgIDB4MDAyZCAtPiBIWVBIRU4tTUlOVVMKKyAgICAnLicgICAgICAgICMgIDB4MDAyZSAtPiBGVUxMIFNUT1AKKyAgICAnLycgICAgICAgICMgIDB4MDAyZiAtPiBTT0xJRFVTCisgICAgJzAnICAgICAgICAjICAweDAwMzAgLT4gRElHSVQgWkVSTworICAgICcxJyAgICAgICAgIyAgMHgwMDMxIC0+IERJR0lUIE9ORQorICAgICcyJyAgICAgICAgIyAgMHgwMDMyIC0+IERJR0lUIFRXTworICAgICczJyAgICAgICAgIyAgMHgwMDMzIC0+IERJR0lUIFRIUkVFCisgICAgJzQnICAgICAgICAjICAweDAwMzQgLT4gRElHSVQgRk9VUgorICAgICc1JyAgICAgICAgIyAgMHgwMDM1IC0+IERJR0lUIEZJVkUKKyAgICAnNicgICAgICAgICMgIDB4MDAzNiAtPiBESUdJVCBTSVgKKyAgICAnNycgICAgICAgICMgIDB4MDAzNyAtPiBESUdJVCBTRVZFTgorICAgICc4JyAgICAgICAgIyAgMHgwMDM4IC0+IERJR0lUIEVJR0hUCisgICAgJzknICAgICAgICAjICAweDAwMzkgLT4gRElHSVQgTklORQorICAgICc6JyAgICAgICAgIyAgMHgwMDNhIC0+IENPTE9OCisgICAgJzsnICAgICAgICAjICAweDAwM2IgLT4gU0VNSUNPTE9OCisgICAgJzwnICAgICAgICAjICAweDAwM2MgLT4gTEVTUy1USEFOIFNJR04KKyAgICAnPScgICAgICAgICMgIDB4MDAzZCAtPiBFUVVBTFMgU0lHTgorICAgICc+JyAgICAgICAgIyAgMHgwMDNlIC0+IEdSRUFURVItVEhBTiBTSUdOCisgICAgJz8nICAgICAgICAjICAweDAwM2YgLT4gUVVFU1RJT04gTUFSSworICAgICdAJyAgICAgICAgIyAgMHgwMDQwIC0+IENPTU1FUkNJQUwgQVQKKyAgICAnQScgICAgICAgICMgIDB4MDA0MSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgJ0InICAgICAgICAjICAweDAwNDIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorICAgICdDJyAgICAgICAgIyAgMHgwMDQzIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEMKKyAgICAnRCcgICAgICAgICMgIDB4MDA0NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgJ0UnICAgICAgICAjICAweDAwNDUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorICAgICdGJyAgICAgICAgIyAgMHgwMDQ2IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEYKKyAgICAnRycgICAgICAgICMgIDB4MDA0NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgJ0gnICAgICAgICAjICAweDAwNDggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorICAgICdJJyAgICAgICAgIyAgMHgwMDQ5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEkKKyAgICAnSicgICAgICAgICMgIDB4MDA0YSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBKCisgICAgJ0snICAgICAgICAjICAweDAwNGIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgICdMJyAgICAgICAgIyAgMHgwMDRjIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEwKKyAgICAnTScgICAgICAgICMgIDB4MDA0ZCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBNCisgICAgJ04nICAgICAgICAjICAweDAwNGUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgICdPJyAgICAgICAgIyAgMHgwMDRmIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8KKyAgICAnUCcgICAgICAgICMgIDB4MDA1MCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBQCisgICAgJ1EnICAgICAgICAjICAweDAwNTEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgICdSJyAgICAgICAgIyAgMHgwMDUyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFIKKyAgICAnUycgICAgICAgICMgIDB4MDA1MyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgJ1QnICAgICAgICAjICAweDAwNTQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorICAgICdVJyAgICAgICAgIyAgMHgwMDU1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUKKyAgICAnVicgICAgICAgICMgIDB4MDA1NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgJ1cnICAgICAgICAjICAweDAwNTcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworICAgICdYJyAgICAgICAgIyAgMHgwMDU4IC0+IExBVElOIENBUElUQUwgTEVUVEVSIFgKKyAgICAnWScgICAgICAgICMgIDB4MDA1OSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgJ1onICAgICAgICAjICAweDAwNWEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorICAgICdbJyAgICAgICAgIyAgMHgwMDViIC0+IExFRlQgU1FVQVJFIEJSQUNLRVQKKyAgICAnXFwnICAgICAgICMgIDB4MDA1YyAtPiBSRVZFUlNFIFNPTElEVVMKKyAgICAnXScgICAgICAgICMgIDB4MDA1ZCAtPiBSSUdIVCBTUVVBUkUgQlJBQ0tFVAorICAgICdeJyAgICAgICAgIyAgMHgwMDVlIC0+IENJUkNVTUZMRVggQUNDRU5UCisgICAgJ18nICAgICAgICAjICAweDAwNWYgLT4gTE9XIExJTkUKKyAgICAnYCcgICAgICAgICMgIDB4MDA2MCAtPiBHUkFWRSBBQ0NFTlQKKyAgICAnYScgICAgICAgICMgIDB4MDA2MSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQQorICAgICdiJyAgICAgICAgIyAgMHgwMDYyIC0+IExBVElOIFNNQUxMIExFVFRFUiBCCisgICAgJ2MnICAgICAgICAjICAweDAwNjMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICAnZCcgICAgICAgICMgIDB4MDA2NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRAorICAgICdlJyAgICAgICAgIyAgMHgwMDY1IC0+IExBVElOIFNNQUxMIExFVFRFUiBFCisgICAgJ2YnICAgICAgICAjICAweDAwNjYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICAnZycgICAgICAgICMgIDB4MDA2NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRworICAgICdoJyAgICAgICAgIyAgMHgwMDY4IC0+IExBVElOIFNNQUxMIExFVFRFUiBICisgICAgJ2knICAgICAgICAjICAweDAwNjkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAnaicgICAgICAgICMgIDB4MDA2YSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSgorICAgICdrJyAgICAgICAgIyAgMHgwMDZiIC0+IExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgJ2wnICAgICAgICAjICAweDAwNmMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEwKKyAgICAnbScgICAgICAgICMgIDB4MDA2ZCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTQorICAgICduJyAgICAgICAgIyAgMHgwMDZlIC0+IExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgJ28nICAgICAgICAjICAweDAwNmYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8KKyAgICAncCcgICAgICAgICMgIDB4MDA3MCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUAorICAgICdxJyAgICAgICAgIyAgMHgwMDcxIC0+IExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgJ3InICAgICAgICAjICAweDAwNzIgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFIKKyAgICAncycgICAgICAgICMgIDB4MDA3MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUworICAgICd0JyAgICAgICAgIyAgMHgwMDc0IC0+IExBVElOIFNNQUxMIExFVFRFUiBUCisgICAgJ3UnICAgICAgICAjICAweDAwNzUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICAndicgICAgICAgICMgIDB4MDA3NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVgorICAgICd3JyAgICAgICAgIyAgMHgwMDc3IC0+IExBVElOIFNNQUxMIExFVFRFUiBXCisgICAgJ3gnICAgICAgICAjICAweDAwNzggLT4gTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICAneScgICAgICAgICMgIDB4MDA3OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWQorICAgICd6JyAgICAgICAgIyAgMHgwMDdhIC0+IExBVElOIFNNQUxMIExFVFRFUiBaCisgICAgJ3snICAgICAgICAjICAweDAwN2IgLT4gTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgJ3wnICAgICAgICAjICAweDAwN2MgLT4gVkVSVElDQUwgTElORQorICAgICd9JyAgICAgICAgIyAgMHgwMDdkIC0+IFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICAnficgICAgICAgICMgIDB4MDA3ZSAtPiBUSUxERQorICAgICdceDdmJyAgICAgIyAgMHgwMDdmIC0+IERFTEVURQorICAgICdcdTA0MTAnICAgIyAgMHgwMDgwIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEEKKyAgICAnXHUwNDExJyAgICMgIDB4MDA4MSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBCRQorICAgICdcdTA0MTInICAgIyAgMHgwMDgyIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFZFCisgICAgJ1x1MDQxMycgICAjICAweDAwODMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFCisgICAgJ1x1MDQxNCcgICAjICAweDAwODQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgREUKKyAgICAnXHUwNDE1JyAgICMgIDB4MDA4NSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBJRQorICAgICdcdTA0MTYnICAgIyAgMHgwMDg2IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorICAgICdcdTA0MTcnICAgIyAgMHgwMDg3IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFpFCisgICAgJ1x1MDQxOCcgICAjICAweDAwODggLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSQorICAgICdcdTA0MTknICAgIyAgMHgwMDg5IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIEkKKyAgICAnXHUwNDFhJyAgICMgIDB4MDA4YSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBLQQorICAgICdcdTA0MWInICAgIyAgMHgwMDhiIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVMCisgICAgJ1x1MDQxYycgICAjICAweDAwOGMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU0KKyAgICAnXHUwNDFkJyAgICMgIDB4MDA4ZCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTgorICAgICdcdTA0MWUnICAgIyAgMHgwMDhlIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIE8KKyAgICAnXHUwNDFmJyAgICMgIDB4MDA4ZiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRQorICAgICdcdTA0MjAnICAgIyAgMHgwMDkwIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEVSCisgICAgJ1x1MDQyMScgICAjICAweDAwOTEgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVMKKyAgICAnXHUwNDIyJyAgICMgIDB4MDA5MiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURQorICAgICdcdTA0MjMnICAgIyAgMHgwMDkzIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFUKKyAgICAnXHUwNDI0JyAgICMgIDB4MDA5NCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFRgorICAgICdcdTA0MjUnICAgIyAgMHgwMDk1IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBCisgICAgJ1x1MDQyNicgICAjICAweDAwOTYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVFNFCisgICAgJ1x1MDQyNycgICAjICAweDAwOTcgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgQ0hFCisgICAgJ1x1MDQyOCcgICAjICAweDAwOTggLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCisgICAgJ1x1MDQyOScgICAjICAweDAwOTkgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hDSEEKKyAgICAnXHUwNDJhJyAgICMgIDB4MDA5YSAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBIQVJEIFNJR04KKyAgICAnXHUwNDJiJyAgICMgIDB4MDA5YiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVCisgICAgJ1x1MDQyYycgICAjICAweDAwOWMgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU09GVCBTSUdOCisgICAgJ1x1MDQyZCcgICAjICAweDAwOWQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRQorICAgICdcdTA0MmUnICAgIyAgMHgwMDllIC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIFlVCisgICAgJ1x1MDQyZicgICAjICAweDAwOWYgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUEKKyAgICAnXHUwNDMwJyAgICMgIDB4MDBhMCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgQQorICAgICdcdTA0MzEnICAgIyAgMHgwMGExIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBCRQorICAgICdcdTA0MzInICAgIyAgMHgwMGEyIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBWRQorICAgICdcdTA0MzMnICAgIyAgMHgwMGEzIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUKKyAgICAnXHUwNDM0JyAgICMgIDB4MDBhNCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgREUKKyAgICAnXHUwNDM1JyAgICMgIDB4MDBhNSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSUUKKyAgICAnXHUwNDM2JyAgICMgIDB4MDBhNiAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgWkhFCisgICAgJ1x1MDQzNycgICAjICAweDAwYTcgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCisgICAgJ1x1MDQzOCcgICAjICAweDAwYTggLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEkKKyAgICAnXHUwNDM5JyAgICMgIDB4MDBhOSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hPUlQgSQorICAgICdcdTA0M2EnICAgIyAgMHgwMGFhIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBLQQorICAgICdcdTA0M2InICAgIyAgMHgwMGFiIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFTAorICAgICdcdTA0M2MnICAgIyAgMHgwMGFjIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFTQorICAgICdcdTA0M2QnICAgIyAgMHgwMGFkIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFTgorICAgICdcdTA0M2UnICAgIyAgMHgwMGFlIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBPCisgICAgJ1x1MDQzZicgICAjICAweDAwYWYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFBFCisgICAgJ1x1MjU5MScgICAjICAweDAwYjAgLT4gTElHSFQgU0hBREUKKyAgICAnXHUyNTkyJyAgICMgIDB4MDBiMSAtPiBNRURJVU0gU0hBREUKKyAgICAnXHUyNTkzJyAgICMgIDB4MDBiMiAtPiBEQVJLIFNIQURFCisgICAgJ1x1MjUwMicgICAjICAweDAwYjMgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMCisgICAgJ1x1MjUyNCcgICAjICAweDAwYjQgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgJ1x1MjU2MScgICAjICAweDAwYjUgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAnXHUyNTYyJyAgICMgIDB4MDBiNiAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBMRUZUIFNJTkdMRQorICAgICdcdTI1NTYnICAgIyAgMHgwMGI3IC0+IEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAnXHUyNTU1JyAgICMgIDB4MDBiOCAtPiBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIExFRlQgRE9VQkxFCisgICAgJ1x1MjU2MycgICAjICAweDAwYjkgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgTEVGVAorICAgICdcdTI1NTEnICAgIyAgMHgwMGJhIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwKKyAgICAnXHUyNTU3JyAgICMgIDB4MDBiYiAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIExFRlQKKyAgICAnXHUyNTVkJyAgICMgIDB4MDBiYyAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIFVQIEFORCBMRUZUCisgICAgJ1x1MjU1YycgICAjICAweDAwYmQgLT4gQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAnXHUyNTViJyAgICMgIDB4MDBiZSAtPiBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgICdcdTI1MTAnICAgIyAgMHgwMGJmIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBMRUZUCisgICAgJ1x1MjUxNCcgICAjICAweDAwYzAgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBSSUdIVAorICAgICdcdTI1MzQnICAgIyAgMHgwMGMxIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBVUCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1MmMnICAgIyAgMHgwMGMyIC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjUxYycgICAjICAweDAwYzMgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgICdcdTI1MDAnICAgIyAgMHgwMGM0IC0+IEJPWCBEUkFXSU5HUyBMSUdIVCBIT1JJWk9OVEFMCisgICAgJ1x1MjUzYycgICAjICAweDAwYzUgLT4gQk9YIERSQVdJTkdTIExJR0hUIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgJ1x1MjU1ZScgICAjICAweDAwYzYgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgJ1x1MjU1ZicgICAjICAweDAwYzcgLT4gQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgJ1x1MjU1YScgICAjICAweDAwYzggLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgUklHSFQKKyAgICAnXHUyNTU0JyAgICMgIDB4MDBjOSAtPiBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIFJJR0hUCisgICAgJ1x1MjU2OScgICAjICAweDAwY2EgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NjYnICAgIyAgMHgwMGNiIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NjAnICAgIyAgMHgwMGNjIC0+IEJPWCBEUkFXSU5HUyBET1VCTEUgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgJ1x1MjU1MCcgICAjICAweDAwY2QgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgJ1x1MjU2YycgICAjICAweDAwY2UgLT4gQk9YIERSQVdJTkdTIERPVUJMRSBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgICdcdTI1NjcnICAgIyAgMHgwMGNmIC0+IEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgJ1x1MjU2OCcgICAjICAweDAwZDAgLT4gQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgSE9SSVpPTlRBTCBTSU5HTEUKKyAgICAnXHUyNTY0JyAgICMgIDB4MDBkMSAtPiBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgJ1x1MjU2NScgICAjICAweDAwZDIgLT4gQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgICdcdTI1NTknICAgIyAgMHgwMGQzIC0+IEJPWCBEUkFXSU5HUyBVUCBET1VCTEUgQU5EIFJJR0hUIFNJTkdMRQorICAgICdcdTI1NTgnICAgIyAgMHgwMGQ0IC0+IEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgICdcdTI1NTInICAgIyAgMHgwMGQ1IC0+IEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgJ1x1MjU1MycgICAjICAweDAwZDYgLT4gQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAnXHUyNTZiJyAgICMgIDB4MDBkNyAtPiBCT1ggRFJBV0lOR1MgVkVSVElDQUwgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgICdcdTI1NmEnICAgIyAgMHgwMGQ4IC0+IEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgJ1x1MjUxOCcgICAjICAweDAwZDkgLT4gQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgJ1x1MjUwYycgICAjICAweDAwZGEgLT4gQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUCisgICAgJ1x1MjU4OCcgICAjICAweDAwZGIgLT4gRlVMTCBCTE9DSworICAgICdcdTI1ODQnICAgIyAgMHgwMGRjIC0+IExPV0VSIEhBTEYgQkxPQ0sKKyAgICAnXHUyNThjJyAgICMgIDB4MDBkZCAtPiBMRUZUIEhBTEYgQkxPQ0sKKyAgICAnXHUyNTkwJyAgICMgIDB4MDBkZSAtPiBSSUdIVCBIQUxGIEJMT0NLCisgICAgJ1x1MjU4MCcgICAjICAweDAwZGYgLT4gVVBQRVIgSEFMRiBCTE9DSworICAgICdcdTA0NDAnICAgIyAgMHgwMGUwIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFUgorICAgICdcdTA0NDEnICAgIyAgMHgwMGUxIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFUworICAgICdcdTA0NDInICAgIyAgMHgwMGUyIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBURQorICAgICdcdTA0NDMnICAgIyAgMHgwMGUzIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBVCisgICAgJ1x1MDQ0NCcgICAjICAweDAwZTQgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVGCisgICAgJ1x1MDQ0NScgICAjICAweDAwZTUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCisgICAgJ1x1MDQ0NicgICAjICAweDAwZTYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFRTRQorICAgICdcdTA0NDcnICAgIyAgMHgwMGU3IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBDSEUKKyAgICAnXHUwNDQ4JyAgICMgIDB4MDBlOCAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hBCisgICAgJ1x1MDQ0OScgICAjICAweDAwZTkgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIQ0hBCisgICAgJ1x1MDQ0YScgICAjICAweDAwZWEgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBUkQgU0lHTgorICAgICdcdTA0NGInICAgIyAgMHgwMGViIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCisgICAgJ1x1MDQ0YycgICAjICAweDAwZWMgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNPRlQgU0lHTgorICAgICdcdTA0NGQnICAgIyAgMHgwMGVkIC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBFCisgICAgJ1x1MDQ0ZScgICAjICAweDAwZWUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCisgICAgJ1x1MDQ0ZicgICAjICAweDAwZWYgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlBCisgICAgJ1x1MDQwMScgICAjICAweDAwZjAgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSU8KKyAgICAnXHUwNDUxJyAgICMgIDB4MDBmMSAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgSU8KKyAgICAnXHUwNDkwJyAgICMgIDB4MDBmMiAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAnXHUwNDkxJyAgICMgIDB4MDBmMyAtPiBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFIFdJVEggVVBUVVJOCisgICAgJ1x1MDQwNCcgICAjICAweDAwZjQgLT4gQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVUtSQUlOSUFOIElFCisgICAgJ1x1MDQ1NCcgICAjICAweDAwZjUgLT4gQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgICdcdTA0MDYnICAgIyAgMHgwMGY2IC0+IENZUklMTElDIENBUElUQUwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgICdcdTA0NTYnICAgIyAgMHgwMGY3IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBCWUVMT1JVU1NJQU4tVUtSQUlOSUFOIEkKKyAgICAnXHUwNDA3JyAgICMgIDB4MDBmOCAtPiBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZSQorICAgICdcdTA0NTcnICAgIyAgMHgwMGY5IC0+IENZUklMTElDIFNNQUxMIExFVFRFUiBZSQorICAgICdceGI3JyAgICAgIyAgMHgwMGZhIC0+IE1JRERMRSBET1QKKyAgICAnXHUyMjFhJyAgICMgIDB4MDBmYiAtPiBTUVVBUkUgUk9PVAorICAgICdcdTIxMTYnICAgIyAgMHgwMGZjIC0+IE5VTUVSTyBTSUdOCisgICAgJ1x4YTQnICAgICAjICAweDAwZmQgLT4gQ1VSUkVOQ1kgU0lHTgorICAgICdcdTI1YTAnICAgIyAgMHgwMGZlIC0+IEJMQUNLIFNRVUFSRQorICAgICdceGEwJyAgICAgIyAgMHgwMGZmIC0+IE5PLUJSRUFLIFNQQUNFCispCisKKyMjIyBFbmNvZGluZyBNYXAKKworZW5jb2RpbmdfbWFwID0geworICAgIDB4MDAwMDogMHgwMDAwLCAgICAgIyAgTlVMTAorICAgIDB4MDAwMTogMHgwMDAxLCAgICAgIyAgU1RBUlQgT0YgSEVBRElORworICAgIDB4MDAwMjogMHgwMDAyLCAgICAgIyAgU1RBUlQgT0YgVEVYVAorICAgIDB4MDAwMzogMHgwMDAzLCAgICAgIyAgRU5EIE9GIFRFWFQKKyAgICAweDAwMDQ6IDB4MDAwNCwgICAgICMgIEVORCBPRiBUUkFOU01JU1NJT04KKyAgICAweDAwMDU6IDB4MDAwNSwgICAgICMgIEVOUVVJUlkKKyAgICAweDAwMDY6IDB4MDAwNiwgICAgICMgIEFDS05PV0xFREdFCisgICAgMHgwMDA3OiAweDAwMDcsICAgICAjICBCRUxMCisgICAgMHgwMDA4OiAweDAwMDgsICAgICAjICBCQUNLU1BBQ0UKKyAgICAweDAwMDk6IDB4MDAwOSwgICAgICMgIEhPUklaT05UQUwgVEFCVUxBVElPTgorICAgIDB4MDAwYTogMHgwMDBhLCAgICAgIyAgTElORSBGRUVECisgICAgMHgwMDBiOiAweDAwMGIsICAgICAjICBWRVJUSUNBTCBUQUJVTEFUSU9OCisgICAgMHgwMDBjOiAweDAwMGMsICAgICAjICBGT1JNIEZFRUQKKyAgICAweDAwMGQ6IDB4MDAwZCwgICAgICMgIENBUlJJQUdFIFJFVFVSTgorICAgIDB4MDAwZTogMHgwMDBlLCAgICAgIyAgU0hJRlQgT1VUCisgICAgMHgwMDBmOiAweDAwMGYsICAgICAjICBTSElGVCBJTgorICAgIDB4MDAxMDogMHgwMDEwLCAgICAgIyAgREFUQSBMSU5LIEVTQ0FQRQorICAgIDB4MDAxMTogMHgwMDExLCAgICAgIyAgREVWSUNFIENPTlRST0wgT05FCisgICAgMHgwMDEyOiAweDAwMTIsICAgICAjICBERVZJQ0UgQ09OVFJPTCBUV08KKyAgICAweDAwMTM6IDB4MDAxMywgICAgICMgIERFVklDRSBDT05UUk9MIFRIUkVFCisgICAgMHgwMDE0OiAweDAwMTQsICAgICAjICBERVZJQ0UgQ09OVFJPTCBGT1VSCisgICAgMHgwMDE1OiAweDAwMTUsICAgICAjICBORUdBVElWRSBBQ0tOT1dMRURHRQorICAgIDB4MDAxNjogMHgwMDE2LCAgICAgIyAgU1lOQ0hST05PVVMgSURMRQorICAgIDB4MDAxNzogMHgwMDE3LCAgICAgIyAgRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSworICAgIDB4MDAxODogMHgwMDE4LCAgICAgIyAgQ0FOQ0VMCisgICAgMHgwMDE5OiAweDAwMTksICAgICAjICBFTkQgT0YgTUVESVVNCisgICAgMHgwMDFhOiAweDAwMWEsICAgICAjICBTVUJTVElUVVRFCisgICAgMHgwMDFiOiAweDAwMWIsICAgICAjICBFU0NBUEUKKyAgICAweDAwMWM6IDB4MDAxYywgICAgICMgIEZJTEUgU0VQQVJBVE9SCisgICAgMHgwMDFkOiAweDAwMWQsICAgICAjICBHUk9VUCBTRVBBUkFUT1IKKyAgICAweDAwMWU6IDB4MDAxZSwgICAgICMgIFJFQ09SRCBTRVBBUkFUT1IKKyAgICAweDAwMWY6IDB4MDAxZiwgICAgICMgIFVOSVQgU0VQQVJBVE9SCisgICAgMHgwMDIwOiAweDAwMjAsICAgICAjICBTUEFDRQorICAgIDB4MDAyMTogMHgwMDIxLCAgICAgIyAgRVhDTEFNQVRJT04gTUFSSworICAgIDB4MDAyMjogMHgwMDIyLCAgICAgIyAgUVVPVEFUSU9OIE1BUksKKyAgICAweDAwMjM6IDB4MDAyMywgICAgICMgIE5VTUJFUiBTSUdOCisgICAgMHgwMDI0OiAweDAwMjQsICAgICAjICBET0xMQVIgU0lHTgorICAgIDB4MDAyNTogMHgwMDI1LCAgICAgIyAgUEVSQ0VOVCBTSUdOCisgICAgMHgwMDI2OiAweDAwMjYsICAgICAjICBBTVBFUlNBTkQKKyAgICAweDAwMjc6IDB4MDAyNywgICAgICMgIEFQT1NUUk9QSEUKKyAgICAweDAwMjg6IDB4MDAyOCwgICAgICMgIExFRlQgUEFSRU5USEVTSVMKKyAgICAweDAwMjk6IDB4MDAyOSwgICAgICMgIFJJR0hUIFBBUkVOVEhFU0lTCisgICAgMHgwMDJhOiAweDAwMmEsICAgICAjICBBU1RFUklTSworICAgIDB4MDAyYjogMHgwMDJiLCAgICAgIyAgUExVUyBTSUdOCisgICAgMHgwMDJjOiAweDAwMmMsICAgICAjICBDT01NQQorICAgIDB4MDAyZDogMHgwMDJkLCAgICAgIyAgSFlQSEVOLU1JTlVTCisgICAgMHgwMDJlOiAweDAwMmUsICAgICAjICBGVUxMIFNUT1AKKyAgICAweDAwMmY6IDB4MDAyZiwgICAgICMgIFNPTElEVVMKKyAgICAweDAwMzA6IDB4MDAzMCwgICAgICMgIERJR0lUIFpFUk8KKyAgICAweDAwMzE6IDB4MDAzMSwgICAgICMgIERJR0lUIE9ORQorICAgIDB4MDAzMjogMHgwMDMyLCAgICAgIyAgRElHSVQgVFdPCisgICAgMHgwMDMzOiAweDAwMzMsICAgICAjICBESUdJVCBUSFJFRQorICAgIDB4MDAzNDogMHgwMDM0LCAgICAgIyAgRElHSVQgRk9VUgorICAgIDB4MDAzNTogMHgwMDM1LCAgICAgIyAgRElHSVQgRklWRQorICAgIDB4MDAzNjogMHgwMDM2LCAgICAgIyAgRElHSVQgU0lYCisgICAgMHgwMDM3OiAweDAwMzcsICAgICAjICBESUdJVCBTRVZFTgorICAgIDB4MDAzODogMHgwMDM4LCAgICAgIyAgRElHSVQgRUlHSFQKKyAgICAweDAwMzk6IDB4MDAzOSwgICAgICMgIERJR0lUIE5JTkUKKyAgICAweDAwM2E6IDB4MDAzYSwgICAgICMgIENPTE9OCisgICAgMHgwMDNiOiAweDAwM2IsICAgICAjICBTRU1JQ09MT04KKyAgICAweDAwM2M6IDB4MDAzYywgICAgICMgIExFU1MtVEhBTiBTSUdOCisgICAgMHgwMDNkOiAweDAwM2QsICAgICAjICBFUVVBTFMgU0lHTgorICAgIDB4MDAzZTogMHgwMDNlLCAgICAgIyAgR1JFQVRFUi1USEFOIFNJR04KKyAgICAweDAwM2Y6IDB4MDAzZiwgICAgICMgIFFVRVNUSU9OIE1BUksKKyAgICAweDAwNDA6IDB4MDA0MCwgICAgICMgIENPTU1FUkNJQUwgQVQKKyAgICAweDAwNDE6IDB4MDA0MSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEEKKyAgICAweDAwNDI6IDB4MDA0MiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEIKKyAgICAweDAwNDM6IDB4MDA0MywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEMKKyAgICAweDAwNDQ6IDB4MDA0NCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEQKKyAgICAweDAwNDU6IDB4MDA0NSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEUKKyAgICAweDAwNDY6IDB4MDA0NiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEYKKyAgICAweDAwNDc6IDB4MDA0NywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEcKKyAgICAweDAwNDg6IDB4MDA0OCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEgKKyAgICAweDAwNDk6IDB4MDA0OSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEkKKyAgICAweDAwNGE6IDB4MDA0YSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEoKKyAgICAweDAwNGI6IDB4MDA0YiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEsKKyAgICAweDAwNGM6IDB4MDA0YywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIEwKKyAgICAweDAwNGQ6IDB4MDA0ZCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE0KKyAgICAweDAwNGU6IDB4MDA0ZSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE4KKyAgICAweDAwNGY6IDB4MDA0ZiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIE8KKyAgICAweDAwNTA6IDB4MDA1MCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFAKKyAgICAweDAwNTE6IDB4MDA1MSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFEKKyAgICAweDAwNTI6IDB4MDA1MiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFIKKyAgICAweDAwNTM6IDB4MDA1MywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFMKKyAgICAweDAwNTQ6IDB4MDA1NCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFQKKyAgICAweDAwNTU6IDB4MDA1NSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFUKKyAgICAweDAwNTY6IDB4MDA1NiwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFYKKyAgICAweDAwNTc6IDB4MDA1NywgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFcKKyAgICAweDAwNTg6IDB4MDA1OCwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFgKKyAgICAweDAwNTk6IDB4MDA1OSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFkKKyAgICAweDAwNWE6IDB4MDA1YSwgICAgICMgIExBVElOIENBUElUQUwgTEVUVEVSIFoKKyAgICAweDAwNWI6IDB4MDA1YiwgICAgICMgIExFRlQgU1FVQVJFIEJSQUNLRVQKKyAgICAweDAwNWM6IDB4MDA1YywgICAgICMgIFJFVkVSU0UgU09MSURVUworICAgIDB4MDA1ZDogMHgwMDVkLCAgICAgIyAgUklHSFQgU1FVQVJFIEJSQUNLRVQKKyAgICAweDAwNWU6IDB4MDA1ZSwgICAgICMgIENJUkNVTUZMRVggQUNDRU5UCisgICAgMHgwMDVmOiAweDAwNWYsICAgICAjICBMT1cgTElORQorICAgIDB4MDA2MDogMHgwMDYwLCAgICAgIyAgR1JBVkUgQUNDRU5UCisgICAgMHgwMDYxOiAweDAwNjEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgQQorICAgIDB4MDA2MjogMHgwMDYyLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEIKKyAgICAweDAwNjM6IDB4MDA2MywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBDCisgICAgMHgwMDY0OiAweDAwNjQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRAorICAgIDB4MDA2NTogMHgwMDY1LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEUKKyAgICAweDAwNjY6IDB4MDA2NiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBGCisgICAgMHgwMDY3OiAweDAwNjcsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgRworICAgIDB4MDA2ODogMHgwMDY4LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEgKKyAgICAweDAwNjk6IDB4MDA2OSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBJCisgICAgMHgwMDZhOiAweDAwNmEsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgSgorICAgIDB4MDA2YjogMHgwMDZiLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIEsKKyAgICAweDAwNmM6IDB4MDA2YywgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBMCisgICAgMHgwMDZkOiAweDAwNmQsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgTQorICAgIDB4MDA2ZTogMHgwMDZlLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIE4KKyAgICAweDAwNmY6IDB4MDA2ZiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBPCisgICAgMHgwMDcwOiAweDAwNzAsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUAorICAgIDB4MDA3MTogMHgwMDcxLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFEKKyAgICAweDAwNzI6IDB4MDA3MiwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBSCisgICAgMHgwMDczOiAweDAwNzMsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgUworICAgIDB4MDA3NDogMHgwMDc0LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFQKKyAgICAweDAwNzU6IDB4MDA3NSwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBVCisgICAgMHgwMDc2OiAweDAwNzYsICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgVgorICAgIDB4MDA3NzogMHgwMDc3LCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFcKKyAgICAweDAwNzg6IDB4MDA3OCwgICAgICMgIExBVElOIFNNQUxMIExFVFRFUiBYCisgICAgMHgwMDc5OiAweDAwNzksICAgICAjICBMQVRJTiBTTUFMTCBMRVRURVIgWQorICAgIDB4MDA3YTogMHgwMDdhLCAgICAgIyAgTEFUSU4gU01BTEwgTEVUVEVSIFoKKyAgICAweDAwN2I6IDB4MDA3YiwgICAgICMgIExFRlQgQ1VSTFkgQlJBQ0tFVAorICAgIDB4MDA3YzogMHgwMDdjLCAgICAgIyAgVkVSVElDQUwgTElORQorICAgIDB4MDA3ZDogMHgwMDdkLCAgICAgIyAgUklHSFQgQ1VSTFkgQlJBQ0tFVAorICAgIDB4MDA3ZTogMHgwMDdlLCAgICAgIyAgVElMREUKKyAgICAweDAwN2Y6IDB4MDA3ZiwgICAgICMgIERFTEVURQorICAgIDB4MDBhMDogMHgwMGZmLCAgICAgIyAgTk8tQlJFQUsgU1BBQ0UKKyAgICAweDAwYTQ6IDB4MDBmZCwgICAgICMgIENVUlJFTkNZIFNJR04KKyAgICAweDAwYjc6IDB4MDBmYSwgICAgICMgIE1JRERMRSBET1QKKyAgICAweDA0MDE6IDB4MDBmMCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIElPCisgICAgMHgwNDA0OiAweDAwZjQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBVS1JBSU5JQU4gSUUKKyAgICAweDA0MDY6IDB4MDBmNiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgIDB4MDQwNzogMHgwMGY4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWUkKKyAgICAweDA0MTA6IDB4MDA4MCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEEKKyAgICAweDA0MTE6IDB4MDA4MSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEJFCisgICAgMHgwNDEyOiAweDAwODIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBWRQorICAgIDB4MDQxMzogMHgwMDgzLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgR0hFCisgICAgMHgwNDE0OiAweDAwODQsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBERQorICAgIDB4MDQxNTogMHgwMDg1LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSUUKKyAgICAweDA0MTY6IDB4MDA4NiwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFpIRQorICAgIDB4MDQxNzogMHgwMDg3LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgWkUKKyAgICAweDA0MTg6IDB4MDA4OCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEkKKyAgICAweDA0MTk6IDB4MDA4OSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFNIT1JUIEkKKyAgICAweDA0MWE6IDB4MDA4YSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEtBCisgICAgMHgwNDFiOiAweDAwOGIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBFTAorICAgIDB4MDQxYzogMHgwMDhjLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRU0KKyAgICAweDA0MWQ6IDB4MDA4ZCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVOCisgICAgMHgwNDFlOiAweDAwOGUsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBPCisgICAgMHgwNDFmOiAweDAwOGYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBQRQorICAgIDB4MDQyMDogMHgwMDkwLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRVIKKyAgICAweDA0MjE6IDB4MDA5MSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEVTCisgICAgMHgwNDIyOiAweDAwOTIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBURQorICAgIDB4MDQyMzogMHgwMDkzLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgVQorICAgIDB4MDQyNDogMHgwMDk0LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgRUYKKyAgICAweDA0MjU6IDB4MDA5NSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEhBCisgICAgMHgwNDI2OiAweDAwOTYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBUU0UKKyAgICAweDA0Mjc6IDB4MDA5NywgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIENIRQorICAgIDB4MDQyODogMHgwMDk4LCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgU0hBCisgICAgMHgwNDI5OiAweDAwOTksICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTSENIQQorICAgIDB4MDQyYTogMHgwMDlhLCAgICAgIyAgQ1lSSUxMSUMgQ0FQSVRBTCBMRVRURVIgSEFSRCBTSUdOCisgICAgMHgwNDJiOiAweDAwOWIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZRVJVCisgICAgMHgwNDJjOiAweDAwOWMsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBTT0ZUIFNJR04KKyAgICAweDA0MmQ6IDB4MDA5ZCwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIEUKKyAgICAweDA0MmU6IDB4MDA5ZSwgICAgICMgIENZUklMTElDIENBUElUQUwgTEVUVEVSIFlVCisgICAgMHgwNDJmOiAweDAwOWYsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBZQQorICAgIDB4MDQzMDogMHgwMGEwLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEEKKyAgICAweDA0MzE6IDB4MDBhMSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBCRQorICAgIDB4MDQzMjogMHgwMGEyLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFZFCisgICAgMHgwNDMzOiAweDAwYTMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgR0hFCisgICAgMHgwNDM0OiAweDAwYTQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgREUKKyAgICAweDA0MzU6IDB4MDBhNSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJRQorICAgIDB4MDQzNjogMHgwMGE2LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpIRQorICAgIDB4MDQzNzogMHgwMGE3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFpFCisgICAgMHgwNDM4OiAweDAwYTgsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgSQorICAgIDB4MDQzOTogMHgwMGE5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFNIT1JUIEkKKyAgICAweDA0M2E6IDB4MDBhYSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBLQQorICAgIDB4MDQzYjogMHgwMGFiLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVMCisgICAgMHgwNDNjOiAweDAwYWMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRU0KKyAgICAweDA0M2Q6IDB4MDBhZCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFTgorICAgIDB4MDQzZTogMHgwMGFlLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIE8KKyAgICAweDA0M2Y6IDB4MDBhZiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBQRQorICAgIDB4MDQ0MDogMHgwMGUwLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEVSCisgICAgMHgwNDQxOiAweDAwZTEsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRVMKKyAgICAweDA0NDI6IDB4MDBlMiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBURQorICAgIDB4MDQ0MzogMHgwMGUzLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFUKKyAgICAweDA0NDQ6IDB4MDBlNCwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBFRgorICAgIDB4MDQ0NTogMHgwMGU1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEhBCisgICAgMHgwNDQ2OiAweDAwZTYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgVFNFCisgICAgMHgwNDQ3OiAweDAwZTcsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgQ0hFCisgICAgMHgwNDQ4OiAweDAwZTgsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hBCisgICAgMHgwNDQ5OiAweDAwZTksICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU0hDSEEKKyAgICAweDA0NGE6IDB4MDBlYSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBIQVJEIFNJR04KKyAgICAweDA0NGI6IDB4MDBlYiwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBZRVJVCisgICAgMHgwNDRjOiAweDAwZWMsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgU09GVCBTSUdOCisgICAgMHgwNDRkOiAweDAwZWQsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgRQorICAgIDB4MDQ0ZTogMHgwMGVlLCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlVCisgICAgMHgwNDRmOiAweDAwZWYsICAgICAjICBDWVJJTExJQyBTTUFMTCBMRVRURVIgWUEKKyAgICAweDA0NTE6IDB4MDBmMSwgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBJTworICAgIDB4MDQ1NDogMHgwMGY1LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFVLUkFJTklBTiBJRQorICAgIDB4MDQ1NjogMHgwMGY3LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIEJZRUxPUlVTU0lBTi1VS1JBSU5JQU4gSQorICAgIDB4MDQ1NzogMHgwMGY5LCAgICAgIyAgQ1lSSUxMSUMgU01BTEwgTEVUVEVSIFlJCisgICAgMHgwNDkwOiAweDAwZjIsICAgICAjICBDWVJJTExJQyBDQVBJVEFMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAweDA0OTE6IDB4MDBmMywgICAgICMgIENZUklMTElDIFNNQUxMIExFVFRFUiBHSEUgV0lUSCBVUFRVUk4KKyAgICAweDIxMTY6IDB4MDBmYywgICAgICMgIE5VTUVSTyBTSUdOCisgICAgMHgyMjFhOiAweDAwZmIsICAgICAjICBTUVVBUkUgUk9PVAorICAgIDB4MjUwMDogMHgwMGM0LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIEhPUklaT05UQUwKKyAgICAweDI1MDI6IDB4MDBiMywgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTAorICAgIDB4MjUwYzogMHgwMGRhLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIERPV04gQU5EIFJJR0hUCisgICAgMHgyNTEwOiAweDAwYmYsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgRE9XTiBBTkQgTEVGVAorICAgIDB4MjUxNDogMHgwMGMwLCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBSSUdIVAorICAgIDB4MjUxODogMHgwMGQ5LCAgICAgIyAgQk9YIERSQVdJTkdTIExJR0hUIFVQIEFORCBMRUZUCisgICAgMHgyNTFjOiAweDAwYzMsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIFJJR0hUCisgICAgMHgyNTI0OiAweDAwYjQsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVkVSVElDQUwgQU5EIExFRlQKKyAgICAweDI1MmM6IDB4MDBjMiwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBET1dOIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTM0OiAweDAwYzEsICAgICAjICBCT1ggRFJBV0lOR1MgTElHSFQgVVAgQU5EIEhPUklaT05UQUwKKyAgICAweDI1M2M6IDB4MDBjNSwgICAgICMgIEJPWCBEUkFXSU5HUyBMSUdIVCBWRVJUSUNBTCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU1MDogMHgwMGNkLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBIT1JJWk9OVEFMCisgICAgMHgyNTUxOiAweDAwYmEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMCisgICAgMHgyNTUyOiAweDAwZDUsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MjU1MzogMHgwMGQ2LCAgICAgIyAgQk9YIERSQVdJTkdTIERPV04gRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDI1NTQ6IDB4MDBjOSwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgUklHSFQKKyAgICAweDI1NTU6IDB4MDBiOCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDI1NTY6IDB4MDBiNywgICAgICMgIEJPWCBEUkFXSU5HUyBET1dOIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDI1NTc6IDB4MDBiYiwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgRE9XTiBBTkQgTEVGVAorICAgIDB4MjU1ODogMHgwMGQ0LCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIFNJTkdMRSBBTkQgUklHSFQgRE9VQkxFCisgICAgMHgyNTU5OiAweDAwZDMsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBSSUdIVCBTSU5HTEUKKyAgICAweDI1NWE6IDB4MDBjOCwgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIFJJR0hUCisgICAgMHgyNTViOiAweDAwYmUsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgU0lOR0xFIEFORCBMRUZUIERPVUJMRQorICAgIDB4MjU1YzogMHgwMGJkLCAgICAgIyAgQk9YIERSQVdJTkdTIFVQIERPVUJMRSBBTkQgTEVGVCBTSU5HTEUKKyAgICAweDI1NWQ6IDB4MDBiYywgICAgICMgIEJPWCBEUkFXSU5HUyBET1VCTEUgVVAgQU5EIExFRlQKKyAgICAweDI1NWU6IDB4MDBjNiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBTSU5HTEUgQU5EIFJJR0hUIERPVUJMRQorICAgIDB4MjU1ZjogMHgwMGM3LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIERPVUJMRSBBTkQgUklHSFQgU0lOR0xFCisgICAgMHgyNTYwOiAweDAwY2MsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBSSUdIVAorICAgIDB4MjU2MTogMHgwMGI1LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgTEVGVCBET1VCTEUKKyAgICAweDI1NjI6IDB4MDBiNiwgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIExFRlQgU0lOR0xFCisgICAgMHgyNTYzOiAweDAwYjksICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBMRUZUCisgICAgMHgyNTY0OiAweDAwZDEsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgyNTY1OiAweDAwZDIsICAgICAjICBCT1ggRFJBV0lOR1MgRE9XTiBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgyNTY2OiAweDAwY2IsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIERPV04gQU5EIEhPUklaT05UQUwKKyAgICAweDI1Njc6IDB4MDBjZiwgICAgICMgIEJPWCBEUkFXSU5HUyBVUCBTSU5HTEUgQU5EIEhPUklaT05UQUwgRE9VQkxFCisgICAgMHgyNTY4OiAweDAwZDAsICAgICAjICBCT1ggRFJBV0lOR1MgVVAgRE9VQkxFIEFORCBIT1JJWk9OVEFMIFNJTkdMRQorICAgIDB4MjU2OTogMHgwMGNhLCAgICAgIyAgQk9YIERSQVdJTkdTIERPVUJMRSBVUCBBTkQgSE9SSVpPTlRBTAorICAgIDB4MjU2YTogMHgwMGQ4LCAgICAgIyAgQk9YIERSQVdJTkdTIFZFUlRJQ0FMIFNJTkdMRSBBTkQgSE9SSVpPTlRBTCBET1VCTEUKKyAgICAweDI1NmI6IDB4MDBkNywgICAgICMgIEJPWCBEUkFXSU5HUyBWRVJUSUNBTCBET1VCTEUgQU5EIEhPUklaT05UQUwgU0lOR0xFCisgICAgMHgyNTZjOiAweDAwY2UsICAgICAjICBCT1ggRFJBV0lOR1MgRE9VQkxFIFZFUlRJQ0FMIEFORCBIT1JJWk9OVEFMCisgICAgMHgyNTgwOiAweDAwZGYsICAgICAjICBVUFBFUiBIQUxGIEJMT0NLCisgICAgMHgyNTg0OiAweDAwZGMsICAgICAjICBMT1dFUiBIQUxGIEJMT0NLCisgICAgMHgyNTg4OiAweDAwZGIsICAgICAjICBGVUxMIEJMT0NLCisgICAgMHgyNThjOiAweDAwZGQsICAgICAjICBMRUZUIEhBTEYgQkxPQ0sKKyAgICAweDI1OTA6IDB4MDBkZSwgICAgICMgIFJJR0hUIEhBTEYgQkxPQ0sKKyAgICAweDI1OTE6IDB4MDBiMCwgICAgICMgIExJR0hUIFNIQURFCisgICAgMHgyNTkyOiAweDAwYjEsICAgICAjICBNRURJVU0gU0hBREUKKyAgICAweDI1OTM6IDB4MDBiMiwgICAgICMgIERBUksgU0hBREUKKyAgICAweDI1YTA6IDB4MDBmZSwgICAgICMgIEJMQUNLIFNRVUFSRQorfQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9jcDI3My5weSBiL0xpYi9lbmNvZGluZ3MvY3AyNzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjljNmQ3NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbmNvZGluZ3MvY3AyNzMucHkKQEAgLTAsMCArMSwzMDcgQEAKKyIiIiBQeXRob24gQ2hhcmFjdGVyIE1hcHBpbmcgQ29kZWMgY3AyNzMgZ2VuZXJhdGVkIGZyb20gJ3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQnIHdpdGggZ2VuY29kZWMucHkuCisKKyIiIiMiCisKK2ltcG9ydCBjb2RlY3MKKworIyMjIENvZGVjIEFQSXMKKworY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKKworICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ190YWJsZSkKKworICAgIGRlZiBkZWNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LGVycm9ycyxkZWNvZGluZ190YWJsZSkKKworY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgorICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgSW5jcmVtZW50YWxEZWNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbERlY29kZXIpOgorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2RlY29kZShpbnB1dCxzZWxmLmVycm9ycyxkZWNvZGluZ190YWJsZSlbMF0KKworY2xhc3MgU3RyZWFtV3JpdGVyKENvZGVjLGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgorICAgIHBhc3MKKworY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorICAgIHBhc3MKKworIyMjIGVuY29kaW5ncyBtb2R1bGUgQVBJCisKK2RlZiBnZXRyZWdlbnRyeSgpOgorICAgIHJldHVybiBjb2RlY3MuQ29kZWNJbmZvKAorICAgICAgICBuYW1lPSdjcDI3MycsCisgICAgICAgIGVuY29kZT1Db2RlYygpLmVuY29kZSwKKyAgICAgICAgZGVjb2RlPUNvZGVjKCkuZGVjb2RlLAorICAgICAgICBpbmNyZW1lbnRhbGVuY29kZXI9SW5jcmVtZW50YWxFbmNvZGVyLAorICAgICAgICBpbmNyZW1lbnRhbGRlY29kZXI9SW5jcmVtZW50YWxEZWNvZGVyLAorICAgICAgICBzdHJlYW1yZWFkZXI9U3RyZWFtUmVhZGVyLAorICAgICAgICBzdHJlYW13cml0ZXI9U3RyZWFtV3JpdGVyLAorICAgICkKKworCisjIyMgRGVjb2RpbmcgVGFibGUKKworZGVjb2RpbmdfdGFibGUgPSAoCisgICAgJ1x4MDAnICAgICAgIyAgMHgwMCAtPiBOVUxMIChOVUwpCisgICAgJ1x4MDEnICAgICAgIyAgMHgwMSAtPiBTVEFSVCBPRiBIRUFESU5HIChTT0gpCisgICAgJ1x4MDInICAgICAgIyAgMHgwMiAtPiBTVEFSVCBPRiBURVhUIChTVFgpCisgICAgJ1x4MDMnICAgICAgIyAgMHgwMyAtPiBFTkQgT0YgVEVYVCAoRVRYKQorICAgICdceDljJyAgICAgICMgIDB4MDQgLT4gU1RSSU5HIFRFUk1JTkFUT1IgKFNUKQorICAgICdcdCcgICAgICAgICMgIDB4MDUgLT4gQ0hBUkFDVEVSIFRBQlVMQVRJT04gKEhUKQorICAgICdceDg2JyAgICAgICMgIDB4MDYgLT4gU1RBUlQgT0YgU0VMRUNURUQgQVJFQSAoU1NBKQorICAgICdceDdmJyAgICAgICMgIDB4MDcgLT4gREVMRVRFIChERUwpCisgICAgJ1x4OTcnICAgICAgIyAgMHgwOCAtPiBFTkQgT0YgR1VBUkRFRCBBUkVBIChFUEEpCisgICAgJ1x4OGQnICAgICAgIyAgMHgwOSAtPiBSRVZFUlNFIExJTkUgRkVFRCAoUkkpCisgICAgJ1x4OGUnICAgICAgIyAgMHgwQSAtPiBTSU5HTEUtU0hJRlQgVFdPIChTUzIpCisgICAgJ1x4MGInICAgICAgIyAgMHgwQiAtPiBMSU5FIFRBQlVMQVRJT04gKFZUKQorICAgICdceDBjJyAgICAgICMgIDB4MEMgLT4gRk9STSBGRUVEIChGRikKKyAgICAnXHInICAgICAgICAjICAweDBEIC0+IENBUlJJQUdFIFJFVFVSTiAoQ1IpCisgICAgJ1x4MGUnICAgICAgIyAgMHgwRSAtPiBTSElGVCBPVVQgKFNPKQorICAgICdceDBmJyAgICAgICMgIDB4MEYgLT4gU0hJRlQgSU4gKFNJKQorICAgICdceDEwJyAgICAgICMgIDB4MTAgLT4gREFUQUxJTksgRVNDQVBFIChETEUpCisgICAgJ1x4MTEnICAgICAgIyAgMHgxMSAtPiBERVZJQ0UgQ09OVFJPTCBPTkUgKERDMSkKKyAgICAnXHgxMicgICAgICAjICAweDEyIC0+IERFVklDRSBDT05UUk9MIFRXTyAoREMyKQorICAgICdceDEzJyAgICAgICMgIDB4MTMgLT4gREVWSUNFIENPTlRST0wgVEhSRUUgKERDMykKKyAgICAnXHg5ZCcgICAgICAjICAweDE0IC0+IE9QRVJBVElORyBTWVNURU0gQ09NTUFORCAoT1NDKQorICAgICdceDg1JyAgICAgICMgIDB4MTUgLT4gTkVYVCBMSU5FIChORUwpCisgICAgJ1x4MDgnICAgICAgIyAgMHgxNiAtPiBCQUNLU1BBQ0UgKEJTKQorICAgICdceDg3JyAgICAgICMgIDB4MTcgLT4gRU5EIE9GIFNFTEVDVEVEIEFSRUEgKEVTQSkKKyAgICAnXHgxOCcgICAgICAjICAweDE4IC0+IENBTkNFTCAoQ0FOKQorICAgICdceDE5JyAgICAgICMgIDB4MTkgLT4gRU5EIE9GIE1FRElVTSAoRU0pCisgICAgJ1x4OTInICAgICAgIyAgMHgxQSAtPiBQUklWQVRFIFVTRSBUV08gKFBVMikKKyAgICAnXHg4ZicgICAgICAjICAweDFCIC0+IFNJTkdMRS1TSElGVCBUSFJFRSAoU1MzKQorICAgICdceDFjJyAgICAgICMgIDB4MUMgLT4gRklMRSBTRVBBUkFUT1IgKElTNCkKKyAgICAnXHgxZCcgICAgICAjICAweDFEIC0+IEdST1VQIFNFUEFSQVRPUiAoSVMzKQorICAgICdceDFlJyAgICAgICMgIDB4MUUgLT4gUkVDT1JEIFNFUEFSQVRPUiAoSVMyKQorICAgICdceDFmJyAgICAgICMgIDB4MUYgLT4gVU5JVCBTRVBBUkFUT1IgKElTMSkKKyAgICAnXHg4MCcgICAgICAjICAweDIwIC0+IFBBRERJTkcgQ0hBUkFDVEVSIChQQUQpCisgICAgJ1x4ODEnICAgICAgIyAgMHgyMSAtPiBISUdIIE9DVEVUIFBSRVNFVCAoSE9QKQorICAgICdceDgyJyAgICAgICMgIDB4MjIgLT4gQlJFQUsgUEVSTUlUVEVEIEhFUkUgKEJQSCkKKyAgICAnXHg4MycgICAgICAjICAweDIzIC0+IE5PIEJSRUFLIEhFUkUgKE5CSCkKKyAgICAnXHg4NCcgICAgICAjICAweDI0IC0+IElOREVYIChJTkQpCisgICAgJ1xuJyAgICAgICAgIyAgMHgyNSAtPiBMSU5FIEZFRUQgKExGKQorICAgICdceDE3JyAgICAgICMgIDB4MjYgLT4gRU5EIE9GIFRSQU5TTUlTU0lPTiBCTE9DSyAoRVRCKQorICAgICdceDFiJyAgICAgICMgIDB4MjcgLT4gRVNDQVBFIChFU0MpCisgICAgJ1x4ODgnICAgICAgIyAgMHgyOCAtPiBDSEFSQUNURVIgVEFCVUxBVElPTiBTRVQgKEhUUykKKyAgICAnXHg4OScgICAgICAjICAweDI5IC0+IENIQVJBQ1RFUiBUQUJVTEFUSU9OIFdJVEggSlVTVElGSUNBVElPTiAoSFRKKQorICAgICdceDhhJyAgICAgICMgIDB4MkEgLT4gTElORSBUQUJVTEFUSU9OIFNFVCAoVlRTKQorICAgICdceDhiJyAgICAgICMgIDB4MkIgLT4gUEFSVElBTCBMSU5FIEZPUldBUkQgKFBMRCkKKyAgICAnXHg4YycgICAgICAjICAweDJDIC0+IFBBUlRJQUwgTElORSBCQUNLV0FSRCAoUExVKQorICAgICdceDA1JyAgICAgICMgIDB4MkQgLT4gRU5RVUlSWSAoRU5RKQorICAgICdceDA2JyAgICAgICMgIDB4MkUgLT4gQUNLTk9XTEVER0UgKEFDSykKKyAgICAnXHgwNycgICAgICAjICAweDJGIC0+IEJFTEwgKEJFTCkKKyAgICAnXHg5MCcgICAgICAjICAweDMwIC0+IERFVklDRSBDT05UUk9MIFNUUklORyAoRENTKQorICAgICdceDkxJyAgICAgICMgIDB4MzEgLT4gUFJJVkFURSBVU0UgT05FIChQVTEpCisgICAgJ1x4MTYnICAgICAgIyAgMHgzMiAtPiBTWU5DSFJPTk9VUyBJRExFIChTWU4pCisgICAgJ1x4OTMnICAgICAgIyAgMHgzMyAtPiBTRVQgVFJBTlNNSVQgU1RBVEUgKFNUUykKKyAgICAnXHg5NCcgICAgICAjICAweDM0IC0+IENBTkNFTCBDSEFSQUNURVIgKENDSCkKKyAgICAnXHg5NScgICAgICAjICAweDM1IC0+IE1FU1NBR0UgV0FJVElORyAoTVcpCisgICAgJ1x4OTYnICAgICAgIyAgMHgzNiAtPiBTVEFSVCBPRiBHVUFSREVEIEFSRUEgKFNQQSkKKyAgICAnXHgwNCcgICAgICAjICAweDM3IC0+IEVORCBPRiBUUkFOU01JU1NJT04gKEVPVCkKKyAgICAnXHg5OCcgICAgICAjICAweDM4IC0+IFNUQVJUIE9GIFNUUklORyAoU09TKQorICAgICdceDk5JyAgICAgICMgIDB4MzkgLT4gU0lOR0xFIEdSQVBISUMgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNHQ0kpCisgICAgJ1x4OWEnICAgICAgIyAgMHgzQSAtPiBTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNDSSkKKyAgICAnXHg5YicgICAgICAjICAweDNCIC0+IENPTlRST0wgU0VRVUVOQ0UgSU5UUk9EVUNFUiAoQ1NJKQorICAgICdceDE0JyAgICAgICMgIDB4M0MgLT4gREVWSUNFIENPTlRST0wgRk9VUiAoREM0KQorICAgICdceDE1JyAgICAgICMgIDB4M0QgLT4gTkVHQVRJVkUgQUNLTk9XTEVER0UgKE5BSykKKyAgICAnXHg5ZScgICAgICAjICAweDNFIC0+IFBSSVZBQ1kgTUVTU0FHRSAoUE0pCisgICAgJ1x4MWEnICAgICAgIyAgMHgzRiAtPiBTVUJTVElUVVRFIChTVUIpCisgICAgJyAnICAgICAgICAgIyAgMHg0MCAtPiBTUEFDRQorICAgICdceGEwJyAgICAgICMgIDB4NDEgLT4gTk8tQlJFQUsgU1BBQ0UKKyAgICAnXHhlMicgICAgICAjICAweDQyIC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorICAgICd7JyAgICAgICAgICMgIDB4NDMgLT4gTEVGVCBDVVJMWSBCUkFDS0VUCisgICAgJ1x4ZTAnICAgICAgIyAgMHg0NCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEdSQVZFCisgICAgJ1x4ZTEnICAgICAgIyAgMHg0NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIEFDVVRFCisgICAgJ1x4ZTMnICAgICAgIyAgMHg0NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgJ1x4ZTUnICAgICAgIyAgMHg0NyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFJJTkcgQUJPVkUKKyAgICAnXHhlNycgICAgICAjICAweDQ4IC0+IExBVElOIFNNQUxMIExFVFRFUiBDIFdJVEggQ0VESUxMQQorICAgICdceGYxJyAgICAgICMgIDB4NDkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgICdceGM0JyAgICAgICMgIDB4NEEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIERJQUVSRVNJUworICAgICcuJyAgICAgICAgICMgIDB4NEIgLT4gRlVMTCBTVE9QCisgICAgJzwnICAgICAgICAgIyAgMHg0QyAtPiBMRVNTLVRIQU4gU0lHTgorICAgICcoJyAgICAgICAgICMgIDB4NEQgLT4gTEVGVCBQQVJFTlRIRVNJUworICAgICcrJyAgICAgICAgICMgIDB4NEUgLT4gUExVUyBTSUdOCisgICAgJyEnICAgICAgICAgIyAgMHg0RiAtPiBFWENMQU1BVElPTiBNQVJLCisgICAgJyYnICAgICAgICAgIyAgMHg1MCAtPiBBTVBFUlNBTkQKKyAgICAnXHhlOScgICAgICAjICAweDUxIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQUNVVEUKKyAgICAnXHhlYScgICAgICAjICAweDUyIC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGViJyAgICAgICMgIDB4NTMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhlOCcgICAgICAjICAweDU0IC0+IExBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggR1JBVkUKKyAgICAnXHhlZCcgICAgICAjICAweDU1IC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKyAgICAnXHhlZScgICAgICAjICAweDU2IC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGVmJyAgICAgICMgIDB4NTcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhlYycgICAgICAjICAweDU4IC0+IExBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKyAgICAnficgICAgICAgICAjICAweDU5IC0+IFRJTERFCisgICAgJ1x4ZGMnICAgICAgIyAgMHg1QSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggRElBRVJFU0lTCisgICAgJyQnICAgICAgICAgIyAgMHg1QiAtPiBET0xMQVIgU0lHTgorICAgICcqJyAgICAgICAgICMgIDB4NUMgLT4gQVNURVJJU0sKKyAgICAnKScgICAgICAgICAjICAweDVEIC0+IFJJR0hUIFBBUkVOVEhFU0lTCisgICAgJzsnICAgICAgICAgIyAgMHg1RSAtPiBTRU1JQ09MT04KKyAgICAnXicgICAgICAgICAjICAweDVGIC0+IENJUkNVTUZMRVggQUNDRU5UCisgICAgJy0nICAgICAgICAgIyAgMHg2MCAtPiBIWVBIRU4tTUlOVVMKKyAgICAnLycgICAgICAgICAjICAweDYxIC0+IFNPTElEVVMKKyAgICAnXHhjMicgICAgICAjICAweDYyIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisgICAgJ1snICAgICAgICAgIyAgMHg2MyAtPiBMRUZUIFNRVUFSRSBCUkFDS0VUCisgICAgJ1x4YzAnICAgICAgIyAgMHg2NCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKyAgICAnXHhjMScgICAgICAjICAweDY1IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBBQ1VURQorICAgICdceGMzJyAgICAgICMgIDB4NjYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQSBXSVRIIFRJTERFCisgICAgJ1x4YzUnICAgICAgIyAgMHg2NyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorICAgICdceGM3JyAgICAgICMgIDB4NjggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEKKyAgICAnXHhkMScgICAgICAjICAweDY5IC0+IExBVElOIENBUElUQUwgTEVUVEVSIE4gV0lUSCBUSUxERQorICAgICdceGY2JyAgICAgICMgIDB4NkEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKyAgICAnLCcgICAgICAgICAjICAweDZCIC0+IENPTU1BCisgICAgJyUnICAgICAgICAgIyAgMHg2QyAtPiBQRVJDRU5UIFNJR04KKyAgICAnXycgICAgICAgICAjICAweDZEIC0+IExPVyBMSU5FCisgICAgJz4nICAgICAgICAgIyAgMHg2RSAtPiBHUkVBVEVSLVRIQU4gU0lHTgorICAgICc/JyAgICAgICAgICMgIDB4NkYgLT4gUVVFU1RJT04gTUFSSworICAgICdceGY4JyAgICAgICMgIDB4NzAgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICAnXHhjOScgICAgICAjICAweDcxIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBBQ1VURQorICAgICdceGNhJyAgICAgICMgIDB4NzIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRSBXSVRIIENJUkNVTUZMRVgKKyAgICAnXHhjYicgICAgICAjICAweDczIC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKyAgICAnXHhjOCcgICAgICAjICAweDc0IC0+IExBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBHUkFWRQorICAgICdceGNkJyAgICAgICMgIDB4NzUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEFDVVRFCisgICAgJ1x4Y2UnICAgICAgIyAgMHg3NiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorICAgICdceGNmJyAgICAgICMgIDB4NzcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworICAgICdceGNjJyAgICAgICMgIDB4NzggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSSBXSVRIIEdSQVZFCisgICAgJ2AnICAgICAgICAgIyAgMHg3OSAtPiBHUkFWRSBBQ0NFTlQKKyAgICAnOicgICAgICAgICAjICAweDdBIC0+IENPTE9OCisgICAgJyMnICAgICAgICAgIyAgMHg3QiAtPiBOVU1CRVIgU0lHTgorICAgICdceGE3JyAgICAgICMgIDB4N0MgLT4gU0VDVElPTiBTSUdOCisgICAgIiciICAgICAgICAgIyAgMHg3RCAtPiBBUE9TVFJPUEhFCisgICAgJz0nICAgICAgICAgIyAgMHg3RSAtPiBFUVVBTFMgU0lHTgorICAgICciJyAgICAgICAgICMgIDB4N0YgLT4gUVVPVEFUSU9OIE1BUksKKyAgICAnXHhkOCcgICAgICAjICAweDgwIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKyAgICAnYScgICAgICAgICAjICAweDgxIC0+IExBVElOIFNNQUxMIExFVFRFUiBBCisgICAgJ2InICAgICAgICAgIyAgMHg4MiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgQgorICAgICdjJyAgICAgICAgICMgIDB4ODMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEMKKyAgICAnZCcgICAgICAgICAjICAweDg0IC0+IExBVElOIFNNQUxMIExFVFRFUiBECisgICAgJ2UnICAgICAgICAgIyAgMHg4NSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgRQorICAgICdmJyAgICAgICAgICMgIDB4ODYgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEYKKyAgICAnZycgICAgICAgICAjICAweDg3IC0+IExBVElOIFNNQUxMIExFVFRFUiBHCisgICAgJ2gnICAgICAgICAgIyAgMHg4OCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgSAorICAgICdpJyAgICAgICAgICMgIDB4ODkgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEkKKyAgICAnXHhhYicgICAgICAjICAweDhBIC0+IExFRlQtUE9JTlRJTkcgRE9VQkxFIEFOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgJ1x4YmInICAgICAgIyAgMHg4QiAtPiBSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAnXHhmMCcgICAgICAjICAweDhDIC0+IExBVElOIFNNQUxMIExFVFRFUiBFVEggKEljZWxhbmRpYykKKyAgICAnXHhmZCcgICAgICAjICAweDhEIC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKKyAgICAnXHhmZScgICAgICAjICAweDhFIC0+IExBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorICAgICdceGIxJyAgICAgICMgIDB4OEYgLT4gUExVUy1NSU5VUyBTSUdOCisgICAgJ1x4YjAnICAgICAgIyAgMHg5MCAtPiBERUdSRUUgU0lHTgorICAgICdqJyAgICAgICAgICMgIDB4OTEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEoKKyAgICAnaycgICAgICAgICAjICAweDkyIC0+IExBVElOIFNNQUxMIExFVFRFUiBLCisgICAgJ2wnICAgICAgICAgIyAgMHg5MyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTAorICAgICdtJyAgICAgICAgICMgIDB4OTQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE0KKyAgICAnbicgICAgICAgICAjICAweDk1IC0+IExBVElOIFNNQUxMIExFVFRFUiBOCisgICAgJ28nICAgICAgICAgIyAgMHg5NiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTworICAgICdwJyAgICAgICAgICMgIDB4OTcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFAKKyAgICAncScgICAgICAgICAjICAweDk4IC0+IExBVElOIFNNQUxMIExFVFRFUiBRCisgICAgJ3InICAgICAgICAgIyAgMHg5OSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgUgorICAgICdceGFhJyAgICAgICMgIDB4OUEgLT4gRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IKKyAgICAnXHhiYScgICAgICAjICAweDlCIC0+IE1BU0NVTElORSBPUkRJTkFMIElORElDQVRPUgorICAgICdceGU2JyAgICAgICMgIDB4OUMgLT4gTEFUSU4gU01BTEwgTEVUVEVSIEFFCisgICAgJ1x4YjgnICAgICAgIyAgMHg5RCAtPiBDRURJTExBCisgICAgJ1x4YzYnICAgICAgIyAgMHg5RSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBRQorICAgICdceGE0JyAgICAgICMgIDB4OUYgLT4gQ1VSUkVOQ1kgU0lHTgorICAgICdceGI1JyAgICAgICMgIDB4QTAgLT4gTUlDUk8gU0lHTgorICAgICdceGRmJyAgICAgICMgIDB4QTEgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFNIQVJQIFMgKEdlcm1hbikKKyAgICAncycgICAgICAgICAjICAweEEyIC0+IExBVElOIFNNQUxMIExFVFRFUiBTCisgICAgJ3QnICAgICAgICAgIyAgMHhBMyAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVAorICAgICd1JyAgICAgICAgICMgIDB4QTQgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFUKKyAgICAndicgICAgICAgICAjICAweEE1IC0+IExBVElOIFNNQUxMIExFVFRFUiBWCisgICAgJ3cnICAgICAgICAgIyAgMHhBNiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVworICAgICd4JyAgICAgICAgICMgIDB4QTcgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFgKKyAgICAneScgICAgICAgICAjICAweEE4IC0+IExBVElOIFNNQUxMIExFVFRFUiBZCisgICAgJ3onICAgICAgICAgIyAgMHhBOSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgWgorICAgICdceGExJyAgICAgICMgIDB4QUEgLT4gSU5WRVJURUQgRVhDTEFNQVRJT04gTUFSSworICAgICdceGJmJyAgICAgICMgIDB4QUIgLT4gSU5WRVJURUQgUVVFU1RJT04gTUFSSworICAgICdceGQwJyAgICAgICMgIDB4QUMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisgICAgJ1x4ZGQnICAgICAgIyAgMHhBRCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggQUNVVEUKKyAgICAnXHhkZScgICAgICAjICAweEFFIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCisgICAgJ1x4YWUnICAgICAgIyAgMHhBRiAtPiBSRUdJU1RFUkVEIFNJR04KKyAgICAnXHhhMicgICAgICAjICAweEIwIC0+IENFTlQgU0lHTgorICAgICdceGEzJyAgICAgICMgIDB4QjEgLT4gUE9VTkQgU0lHTgorICAgICdceGE1JyAgICAgICMgIDB4QjIgLT4gWUVOIFNJR04KKyAgICAnXHhiNycgICAgICAjICAweEIzIC0+IE1JRERMRSBET1QKKyAgICAnXHhhOScgICAgICAjICAweEI0IC0+IENPUFlSSUdIVCBTSUdOCisgICAgJ0AnICAgICAgICAgIyAgMHhCNSAtPiBDT01NRVJDSUFMIEFUCisgICAgJ1x4YjYnICAgICAgIyAgMHhCNiAtPiBQSUxDUk9XIFNJR04KKyAgICAnXHhiYycgICAgICAjICAweEI3IC0+IFZVTEdBUiBGUkFDVElPTiBPTkUgUVVBUlRFUgorICAgICdceGJkJyAgICAgICMgIDB4QjggLT4gVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisgICAgJ1x4YmUnICAgICAgIyAgMHhCOSAtPiBWVUxHQVIgRlJBQ1RJT04gVEhSRUUgUVVBUlRFUlMKKyAgICAnXHhhYycgICAgICAjICAweEJBIC0+IE5PVCBTSUdOCisgICAgJ3wnICAgICAgICAgIyAgMHhCQiAtPiBWRVJUSUNBTCBMSU5FCisgICAgJ1x1MjAzZScgICAgIyAgMHhCQyAtPiBPVkVSTElORQorICAgICdceGE4JyAgICAgICMgIDB4QkQgLT4gRElBRVJFU0lTCisgICAgJ1x4YjQnICAgICAgIyAgMHhCRSAtPiBBQ1VURSBBQ0NFTlQKKyAgICAnXHhkNycgICAgICAjICAweEJGIC0+IE1VTFRJUExJQ0FUSU9OIFNJR04KKyAgICAnXHhlNCcgICAgICAjICAweEMwIC0+IExBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggRElBRVJFU0lTCisgICAgJ0EnICAgICAgICAgIyAgMHhDMSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisgICAgJ0InICAgICAgICAgIyAgMHhDMiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBCCisgICAgJ0MnICAgICAgICAgIyAgMHhDMyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBDCisgICAgJ0QnICAgICAgICAgIyAgMHhDNCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBECisgICAgJ0UnICAgICAgICAgIyAgMHhDNSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBFCisgICAgJ0YnICAgICAgICAgIyAgMHhDNiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBGCisgICAgJ0cnICAgICAgICAgIyAgMHhDNyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisgICAgJ0gnICAgICAgICAgIyAgMHhDOCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBICisgICAgJ0knICAgICAgICAgIyAgMHhDOSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBJCisgICAgJ1x4YWQnICAgICAgIyAgMHhDQSAtPiBTT0ZUIEhZUEhFTgorICAgICdceGY0JyAgICAgICMgIDB4Q0IgLT4gTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgJ1x4YTYnICAgICAgIyAgMHhDQyAtPiBCUk9LRU4gQkFSCisgICAgJ1x4ZjInICAgICAgIyAgMHhDRCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCisgICAgJ1x4ZjMnICAgICAgIyAgMHhDRSAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEFDVVRFCisgICAgJ1x4ZjUnICAgICAgIyAgMHhDRiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIFRJTERFCisgICAgJ1x4ZmMnICAgICAgIyAgMHhEMCAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworICAgICdKJyAgICAgICAgICMgIDB4RDEgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSgorICAgICdLJyAgICAgICAgICMgIDB4RDIgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgSworICAgICdMJyAgICAgICAgICMgIDB4RDMgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorICAgICdNJyAgICAgICAgICMgIDB4RDQgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTQorICAgICdOJyAgICAgICAgICMgIDB4RDUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTgorICAgICdPJyAgICAgICAgICMgIDB4RDYgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworICAgICdQJyAgICAgICAgICMgIDB4RDcgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUAorICAgICdRJyAgICAgICAgICMgIDB4RDggLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUQorICAgICdSJyAgICAgICAgICMgIDB4RDkgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorICAgICdceGI5JyAgICAgICMgIDB4REEgLT4gU1VQRVJTQ1JJUFQgT05FCisgICAgJ1x4ZmInICAgICAgIyAgMHhEQiAtPiBMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKyAgICAnfScgICAgICAgICAjICAweERDIC0+IFJJR0hUIENVUkxZIEJSQUNLRVQKKyAgICAnXHhmOScgICAgICAjICAweEREIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggR1JBVkUKKyAgICAnXHhmYScgICAgICAjICAweERFIC0+IExBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQUNVVEUKKyAgICAnXHhmZicgICAgICAjICAweERGIC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZDYnICAgICAgIyAgMHhFMCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggRElBRVJFU0lTCisgICAgJ1x4ZjcnICAgICAgIyAgMHhFMSAtPiBESVZJU0lPTiBTSUdOCisgICAgJ1MnICAgICAgICAgIyAgMHhFMiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisgICAgJ1QnICAgICAgICAgIyAgMHhFMyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBUCisgICAgJ1UnICAgICAgICAgIyAgMHhFNCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVCisgICAgJ1YnICAgICAgICAgIyAgMHhFNSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisgICAgJ1cnICAgICAgICAgIyAgMHhFNiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBXCisgICAgJ1gnICAgICAgICAgIyAgMHhFNyAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBYCisgICAgJ1knICAgICAgICAgIyAgMHhFOCAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisgICAgJ1onICAgICAgICAgIyAgMHhFOSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBaCisgICAgJ1x4YjInICAgICAgIyAgMHhFQSAtPiBTVVBFUlNDUklQVCBUV08KKyAgICAnXHhkNCcgICAgICAjICAweEVCIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisgICAgJ1xcJyAgICAgICAgIyAgMHhFQyAtPiBSRVZFUlNFIFNPTElEVVMKKyAgICAnXHhkMicgICAgICAjICAweEVEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBHUkFWRQorICAgICdceGQzJyAgICAgICMgIDB4RUUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisgICAgJ1x4ZDUnICAgICAgIyAgMHhFRiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggVElMREUKKyAgICAnMCcgICAgICAgICAjICAweEYwIC0+IERJR0lUIFpFUk8KKyAgICAnMScgICAgICAgICAjICAweEYxIC0+IERJR0lUIE9ORQorICAgICcyJyAgICAgICAgICMgIDB4RjIgLT4gRElHSVQgVFdPCisgICAgJzMnICAgICAgICAgIyAgMHhGMyAtPiBESUdJVCBUSFJFRQorICAgICc0JyAgICAgICAgICMgIDB4RjQgLT4gRElHSVQgRk9VUgorICAgICc1JyAgICAgICAgICMgIDB4RjUgLT4gRElHSVQgRklWRQorICAgICc2JyAgICAgICAgICMgIDB4RjYgLT4gRElHSVQgU0lYCisgICAgJzcnICAgICAgICAgIyAgMHhGNyAtPiBESUdJVCBTRVZFTgorICAgICc4JyAgICAgICAgICMgIDB4RjggLT4gRElHSVQgRUlHSFQKKyAgICAnOScgICAgICAgICAjICAweEY5IC0+IERJR0lUIE5JTkUKKyAgICAnXHhiMycgICAgICAjICAweEZBIC0+IFNVUEVSU0NSSVBUIFRIUkVFCisgICAgJ1x4ZGInICAgICAgIyAgMHhGQiAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorICAgICddJyAgICAgICAgICMgIDB4RkMgLT4gUklHSFQgU1FVQVJFIEJSQUNLRVQKKyAgICAnXHhkOScgICAgICAjICAweEZEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQorICAgICdceGRhJyAgICAgICMgIDB4RkUgLT4gTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIEFDVVRFCisgICAgJ1x4OWYnICAgICAgIyAgMHhGRiAtPiBBUFBMSUNBVElPTiBQUk9HUkFNIENPTU1BTkQgKEFQQykKKykKKworIyMjIEVuY29kaW5nIHRhYmxlCitlbmNvZGluZ190YWJsZT1jb2RlY3MuY2hhcm1hcF9idWlsZChkZWNvZGluZ190YWJsZSkKZGlmZiAtLWdpdCBhL0xpYi9lbmNvZGluZ3MvY3A1MDAucHkgYi9MaWIvZW5jb2RpbmdzL2NwNTAwLnB5CmluZGV4IGE5NzViZTcuLjVmNjE1MzUgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvY3A1MDAucHkKKysrIGIvTGliL2VuY29kaW5ncy9jcDUwMC5weQpAQCAtMzAxLDcgKzMwMSw2IEBACiAgICAgJ1x4ZDknICAgICAjICAweEZEIC0+IExBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQogICAgICdceGRhJyAgICAgIyAgMHhGRSAtPiBMQVRJTiBDQVBJVEFMIExFVFRFUiBVIFdJVEggQUNVVEUKICAgICAnXHg5ZicgICAgICMgIDB4RkYgLT4gQ09OVFJPTAotICAgICdcdWZmZmUnICAgIyMgV2lkZW4gdG8gVUNTMiBmb3Igb3B0aW1pemF0aW9uCiApCiAKICMjIyBFbmNvZGluZyB0YWJsZQpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy9pc284ODU5XzEucHkgYi9MaWIvZW5jb2RpbmdzL2lzbzg4NTlfMS5weQppbmRleCBkOWNjNTE2Li44Y2ZjMDFmIDEwMDY0NAotLS0gYS9MaWIvZW5jb2RpbmdzL2lzbzg4NTlfMS5weQorKysgYi9MaWIvZW5jb2RpbmdzL2lzbzg4NTlfMS5weQpAQCAtMzAxLDcgKzMwMSw2IEBACiAgICAgJ1x4ZmQnICAgICAjICAweEZEIC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggQUNVVEUKICAgICAnXHhmZScgICAgICMgIDB4RkUgLT4gTEFUSU4gU01BTEwgTEVUVEVSIFRIT1JOIChJY2VsYW5kaWMpCiAgICAgJ1x4ZmYnICAgICAjICAweEZGIC0+IExBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCi0gICAgJ1x1ZmZmZScgICAjIyBXaWRlbiB0byBVQ1MyIGZvciBvcHRpbWl6YXRpb24KICkKIAogIyMjIEVuY29kaW5nIHRhYmxlCmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3F1b3ByaV9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvcXVvcHJpX2NvZGVjLnB5CmluZGV4IDA1MzNkYmUuLjQ5NmNiNzYgMTAwNjQ0Ci0tLSBhL0xpYi9lbmNvZGluZ3MvcXVvcHJpX2NvZGVjLnB5CisrKyBiL0xpYi9lbmNvZGluZ3MvcXVvcHJpX2NvZGVjLnB5CkBAIC0xMSw3ICsxMSw3IEBACiAgICAgYXNzZXJ0IGVycm9ycyA9PSAnc3RyaWN0JwogICAgIGYgPSBCeXRlc0lPKGlucHV0KQogICAgIGcgPSBCeXRlc0lPKCkKLSAgICBxdW9wcmkuZW5jb2RlKGYsIGcsIDEpCisgICAgcXVvcHJpLmVuY29kZShmLCBnLCBxdW90ZXRhYnM9VHJ1ZSkKICAgICByZXR1cm4gKGcuZ2V0dmFsdWUoKSwgbGVuKGlucHV0KSkKIAogZGVmIHF1b3ByaV9kZWNvZGUoaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CmRpZmYgLS1naXQgYS9MaWIvZW5jb2RpbmdzL3JvdF8xMy5weSBiL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5CmluZGV4IDFmMmY0N2IuLmYwYjQxODYgMTAwNzU1Ci0tLSBhL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5CisrKyBiL0xpYi9lbmNvZGluZ3Mvcm90XzEzLnB5CkBAIC0xMDYsNyArMTA2LDcgQEAKICMjIyBGaWx0ZXIgQVBJCiAKIGRlZiByb3QxMyhpbmZpbGUsIG91dGZpbGUpOgotICAgIG91dGZpbGUud3JpdGUoaW5maWxlLnJlYWQoKS5lbmNvZGUoJ3JvdC0xMycpKQorICAgIG91dGZpbGUud3JpdGUoY29kZWNzLmVuY29kZShpbmZpbGUucmVhZCgpLCAncm90LTEzJykpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weSBiL0xpYi9lbmNvZGluZ3MvdXVfY29kZWMucHkKaW5kZXggMTQ1NDA5NS4uMmE1NzI4ZiAxMDA2NDQKLS0tIGEvTGliL2VuY29kaW5ncy91dV9jb2RlYy5weQorKysgYi9MaWIvZW5jb2RpbmdzL3V1X2NvZGVjLnB5CkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBkYXRhID0gYmluYXNjaWkuYTJiX3V1KHMpCiAgICAgICAgIGV4Y2VwdCBiaW5hc2NpaS5FcnJvciBhcyB2OgogICAgICAgICAgICAgIyBXb3JrYXJvdW5kIGZvciBicm9rZW4gdXVlbmNvZGVycyBieSAvRnJlZHJpayBMdW5kaAotICAgICAgICAgICAgbmJ5dGVzID0gKCgob3JkKHNbMF0pLTMyKSAmIDYzKSAqIDQgKyA1KSAvIDMKKyAgICAgICAgICAgIG5ieXRlcyA9ICgoKHNbMF0tMzIpICYgNjMpICogNCArIDUpIC8vIDMKICAgICAgICAgICAgIGRhdGEgPSBiaW5hc2NpaS5hMmJfdXUoc1s6bmJ5dGVzXSkKICAgICAgICAgICAgICNzeXMuc3RkZXJyLndyaXRlKCJXYXJuaW5nOiAlc1xuIiAlIHN0cih2KSkKICAgICAgICAgd3JpdGUoZGF0YSkKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX19pbml0X18ucHkgYi9MaWIvZW5zdXJlcGlwL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ODUzZWYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMjEwIEBACitpbXBvcnQgb3MKK2ltcG9ydCBvcy5wYXRoCitpbXBvcnQgcGtndXRpbAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCisKKworX19hbGxfXyA9IFsidmVyc2lvbiIsICJib290c3RyYXAiXQorCisKK19TRVRVUFRPT0xTX1ZFUlNJT04gPSAiMjguNy4xIgorCitfUElQX1ZFUlNJT04gPSAiOS4wLjAiCisKKyMgcGlwIGN1cnJlbnRseSByZXF1aXJlcyBzc2wgc3VwcG9ydCwgc28gd2UgdHJ5IHRvIHByb3ZpZGUgYSBuaWNlcgorIyBlcnJvciBtZXNzYWdlIHdoZW4gdGhhdCBpcyBtaXNzaW5nIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQpCitfTUlTU0lOR19TU0xfTUVTU0FHRSA9ICgicGlwIHt9IHJlcXVpcmVzIFNTTC9UTFMiLmZvcm1hdChfUElQX1ZFUlNJT04pKQordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisgICAgZGVmIF9yZXF1aXJlX3NzbF9mb3JfcGlwKCk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihfTUlTU0lOR19TU0xfTUVTU0FHRSkKK2Vsc2U6CisgICAgZGVmIF9yZXF1aXJlX3NzbF9mb3JfcGlwKCk6CisgICAgICAgIHBhc3MKKworX1BST0pFQ1RTID0gWworICAgICgic2V0dXB0b29scyIsIF9TRVRVUFRPT0xTX1ZFUlNJT04pLAorICAgICgicGlwIiwgX1BJUF9WRVJTSU9OKSwKK10KKworCitkZWYgX3J1bl9waXAoYXJncywgYWRkaXRpb25hbF9wYXRocz1Ob25lKToKKyAgICAjIEFkZCBvdXIgYnVuZGxlZCBzb2Z0d2FyZSB0byB0aGUgc3lzLnBhdGggc28gd2UgY2FuIGltcG9ydCBpdAorICAgIGlmIGFkZGl0aW9uYWxfcGF0aHMgaXMgbm90IE5vbmU6CisgICAgICAgIHN5cy5wYXRoID0gYWRkaXRpb25hbF9wYXRocyArIHN5cy5wYXRoCisKKyAgICAjIEluc3RhbGwgdGhlIGJ1bmRsZWQgc29mdHdhcmUKKyAgICBpbXBvcnQgcGlwCisgICAgcGlwLm1haW4oYXJncykKKworCitkZWYgdmVyc2lvbigpOgorICAgICIiIgorICAgIFJldHVybnMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIHBpcC4KKyAgICAiIiIKKyAgICByZXR1cm4gX1BJUF9WRVJTSU9OCisKK2RlZiBfZGlzYWJsZV9waXBfY29uZmlndXJhdGlvbl9zZXR0aW5ncygpOgorICAgICMgV2UgZGVsaWJlcmF0ZWx5IGlnbm9yZSBhbGwgcGlwIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICMgd2hlbiBpbnZva2luZyBwaXAKKyAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MzQgZm9yIGRldGFpbHMKKyAgICBrZXlzX3RvX3JlbW92ZSA9IFtrIGZvciBrIGluIG9zLmVudmlyb24gaWYgay5zdGFydHN3aXRoKCJQSVBfIildCisgICAgZm9yIGsgaW4ga2V5c190b19yZW1vdmU6CisgICAgICAgIGRlbCBvcy5lbnZpcm9uW2tdCisgICAgIyBXZSBhbHNvIGlnbm9yZSB0aGUgc2V0dGluZ3MgaW4gdGhlIGRlZmF1bHQgcGlwIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDA1MyBmb3IgZGV0YWlscworICAgIG9zLmVudmlyb25bJ1BJUF9DT05GSUdfRklMRSddID0gb3MuZGV2bnVsbAorCisKK2RlZiBib290c3RyYXAoKiwgcm9vdD1Ob25lLCB1cGdyYWRlPUZhbHNlLCB1c2VyPUZhbHNlLAorICAgICAgICAgICAgICBhbHRpbnN0YWxsPUZhbHNlLCBkZWZhdWx0X3BpcD1GYWxzZSwKKyAgICAgICAgICAgICAgdmVyYm9zaXR5PTApOgorICAgICIiIgorICAgIEJvb3RzdHJhcCBwaXAgaW50byB0aGUgY3VycmVudCBQeXRob24gaW5zdGFsbGF0aW9uIChvciB0aGUgZ2l2ZW4gcm9vdAorICAgIGRpcmVjdG9yeSkuCisKKyAgICBOb3RlIHRoYXQgY2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgYWx0ZXIgYm90aCBzeXMucGF0aCBhbmQgb3MuZW52aXJvbi4KKyAgICAiIiIKKyAgICBpZiBhbHRpbnN0YWxsIGFuZCBkZWZhdWx0X3BpcDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2Fubm90IHVzZSBhbHRpbnN0YWxsIGFuZCBkZWZhdWx0X3BpcCB0b2dldGhlciIpCisKKyAgICBfcmVxdWlyZV9zc2xfZm9yX3BpcCgpCisgICAgX2Rpc2FibGVfcGlwX2NvbmZpZ3VyYXRpb25fc2V0dGluZ3MoKQorCisgICAgIyBCeSBkZWZhdWx0LCBpbnN0YWxsaW5nIHBpcCBhbmQgc2V0dXB0b29scyBpbnN0YWxscyBhbGwgb2YgdGhlCisgICAgIyBmb2xsb3dpbmcgc2NyaXB0cyAoWC5ZID09IHJ1bm5pbmcgUHl0aG9uIHZlcnNpb24pOgorICAgICMKKyAgICAjICAgcGlwLCBwaXBYLCBwaXBYLlksIGVhc3lfaW5zdGFsbCwgZWFzeV9pbnN0YWxsLVguWQorICAgICMKKyAgICAjIHBpcCAxLjUrIGFsbG93cyBlbnN1cmVwaXAgdG8gcmVxdWVzdCB0aGF0IHNvbWUgb2YgdGhvc2UgYmUgbGVmdCBvdXQKKyAgICBpZiBhbHRpbnN0YWxsOgorICAgICAgICAjIG9taXQgcGlwLCBwaXBYIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJhbHRpbnN0YWxsIgorICAgIGVsaWYgbm90IGRlZmF1bHRfcGlwOgorICAgICAgICAjIG9taXQgcGlwIGFuZCBlYXN5X2luc3RhbGwKKyAgICAgICAgb3MuZW52aXJvblsiRU5TVVJFUElQX09QVElPTlMiXSA9ICJpbnN0YWxsIgorCisgICAgd2l0aCB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXI6CisgICAgICAgICMgUHV0IG91ciBidW5kbGVkIHdoZWVscyBpbnRvIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBhbmQgY29uc3RydWN0IHRoZQorICAgICAgICAjIGFkZGl0aW9uYWwgcGF0aHMgdGhhdCBuZWVkIGFkZGVkIHRvIHN5cy5wYXRoCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBbXQorICAgICAgICBmb3IgcHJvamVjdCwgdmVyc2lvbiBpbiBfUFJPSkVDVFM6CisgICAgICAgICAgICB3aGVlbF9uYW1lID0gInt9LXt9LXB5Mi5weTMtbm9uZS1hbnkud2hsIi5mb3JtYXQocHJvamVjdCwgdmVyc2lvbikKKyAgICAgICAgICAgIHdobCA9IHBrZ3V0aWwuZ2V0X2RhdGEoCisgICAgICAgICAgICAgICAgImVuc3VyZXBpcCIsCisgICAgICAgICAgICAgICAgIl9idW5kbGVkL3t9Ii5mb3JtYXQod2hlZWxfbmFtZSksCisgICAgICAgICAgICApCisgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSksICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKHdobCkKKworICAgICAgICAgICAgYWRkaXRpb25hbF9wYXRocy5hcHBlbmQob3MucGF0aC5qb2luKHRtcGRpciwgd2hlZWxfbmFtZSkpCisKKyAgICAgICAgIyBDb25zdHJ1Y3QgdGhlIGFyZ3VtZW50cyB0byBiZSBwYXNzZWQgdG8gdGhlIHBpcCBjb21tYW5kCisgICAgICAgIGFyZ3MgPSBbImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLCB0bXBkaXJdCisgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICBhcmdzICs9IFsiLS1yb290Iiwgcm9vdF0KKyAgICAgICAgaWYgdXBncmFkZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItLXVwZ3JhZGUiXQorICAgICAgICBpZiB1c2VyOgorICAgICAgICAgICAgYXJncyArPSBbIi0tdXNlciJdCisgICAgICAgIGlmIHZlcmJvc2l0eToKKyAgICAgICAgICAgIGFyZ3MgKz0gWyItIiArICJ2IiAqIHZlcmJvc2l0eV0KKworICAgICAgICBfcnVuX3BpcChhcmdzICsgW3BbMF0gZm9yIHAgaW4gX1BST0pFQ1RTXSwgYWRkaXRpb25hbF9wYXRocykKKworZGVmIF91bmluc3RhbGxfaGVscGVyKCosIHZlcmJvc2l0eT0wKToKKyAgICAiIiJIZWxwZXIgdG8gc3VwcG9ydCBhIGNsZWFuIGRlZmF1bHQgdW5pbnN0YWxsIHByb2Nlc3Mgb24gV2luZG93cworCisgICAgTm90ZSB0aGF0IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBtYXkgYWx0ZXIgb3MuZW52aXJvbi4KKyAgICAiIiIKKyAgICAjIE5vdGhpbmcgdG8gZG8gaWYgcGlwIHdhcyBuZXZlciBpbnN0YWxsZWQsIG9yIGhhcyBiZWVuIHJlbW92ZWQKKyAgICB0cnk6CisgICAgICAgIGltcG9ydCBwaXAKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHJldHVybgorCisgICAgIyBJZiB0aGUgcGlwIHZlcnNpb24gZG9lc24ndCBtYXRjaCB0aGUgYnVuZGxlZCBvbmUsIGxlYXZlIGl0IGFsb25lCisgICAgaWYgcGlwLl9fdmVyc2lvbl9fICE9IF9QSVBfVkVSU0lPTjoKKyAgICAgICAgbXNnID0gKCJlbnN1cmVwaXAgd2lsbCBvbmx5IHVuaW5zdGFsbCBhIG1hdGNoaW5nIHZlcnNpb24gIgorICAgICAgICAgICAgICAgIih7IXJ9IGluc3RhbGxlZCwgeyFyfSBidW5kbGVkKSIpCisgICAgICAgIHByaW50KG1zZy5mb3JtYXQocGlwLl9fdmVyc2lvbl9fLCBfUElQX1ZFUlNJT04pLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybgorCisgICAgX3JlcXVpcmVfc3NsX2Zvcl9waXAoKQorICAgIF9kaXNhYmxlX3BpcF9jb25maWd1cmF0aW9uX3NldHRpbmdzKCkKKworICAgICMgQ29uc3RydWN0IHRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHRoZSBwaXAgY29tbWFuZAorICAgIGFyZ3MgPSBbInVuaW5zdGFsbCIsICIteSIsICItLWRpc2FibGUtcGlwLXZlcnNpb24tY2hlY2siXQorICAgIGlmIHZlcmJvc2l0eToKKyAgICAgICAgYXJncyArPSBbIi0iICsgInYiICogdmVyYm9zaXR5XQorCisgICAgX3J1bl9waXAoYXJncyArIFtwWzBdIGZvciBwIGluIHJldmVyc2VkKF9QUk9KRUNUUyldKQorCisKK2RlZiBfbWFpbihhcmd2PU5vbmUpOgorICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICBwcmludCgiSWdub3JpbmcgZW5zdXJlcGlwIGZhaWx1cmU6IHt9Ii5mb3JtYXQoX01JU1NJTkdfU1NMX01FU1NBR0UpLAorICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIHJldHVybgorCisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocHJvZz0icHl0aG9uIC1tIGVuc3VyZXBpcCIpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tdmVyc2lvbiIsCisgICAgICAgIGFjdGlvbj0idmVyc2lvbiIsCisgICAgICAgIHZlcnNpb249InBpcCB7fSIuZm9ybWF0KHZlcnNpb24oKSksCisgICAgICAgIGhlbHA9IlNob3cgdGhlIHZlcnNpb24gb2YgcGlwIHRoYXQgaXMgYnVuZGxlZCB3aXRoIHRoaXMgUHl0aG9uLiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItdiIsICItLXZlcmJvc2UiLAorICAgICAgICBhY3Rpb249ImNvdW50IiwKKyAgICAgICAgZGVmYXVsdD0wLAorICAgICAgICBkZXN0PSJ2ZXJib3NpdHkiLAorICAgICAgICBoZWxwPSgiR2l2ZSBtb3JlIG91dHB1dC4gT3B0aW9uIGlzIGFkZGl0aXZlLCBhbmQgY2FuIGJlIHVzZWQgdXAgdG8gMyAiCisgICAgICAgICAgICAgICJ0aW1lcy4iKSwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi1VIiwgIi0tdXBncmFkZSIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9IlVwZ3JhZGUgcGlwIGFuZCBkZXBlbmRlbmNpZXMsIGV2ZW4gaWYgYWxyZWFkeSBpbnN0YWxsZWQuIiwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tdXNlciIsCisgICAgICAgIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsCisgICAgICAgIGRlZmF1bHQ9RmFsc2UsCisgICAgICAgIGhlbHA9Ikluc3RhbGwgdXNpbmcgdGhlIHVzZXIgc2NoZW1lLiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXJvb3QiLAorICAgICAgICBkZWZhdWx0PU5vbmUsCisgICAgICAgIGhlbHA9Ikluc3RhbGwgZXZlcnl0aGluZyByZWxhdGl2ZSB0byB0aGlzIGFsdGVybmF0ZSByb290IGRpcmVjdG9yeS4iLAorICAgICkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAiLS1hbHRpbnN0YWxsIiwKKyAgICAgICAgYWN0aW9uPSJzdG9yZV90cnVlIiwKKyAgICAgICAgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgaGVscD0oIk1ha2UgYW4gYWx0ZXJuYXRlIGluc3RhbGwsIGluc3RhbGxpbmcgb25seSB0aGUgWC5ZIHZlcnNpb25lZCIKKyAgICAgICAgICAgICAgInNjcmlwdHMgKERlZmF1bHQ6IHBpcFgsIHBpcFguWSwgZWFzeV9pbnN0YWxsLVguWSkiKSwKKyAgICApCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgIi0tZGVmYXVsdC1waXAiLAorICAgICAgICBhY3Rpb249InN0b3JlX3RydWUiLAorICAgICAgICBkZWZhdWx0PUZhbHNlLAorICAgICAgICBoZWxwPSgiTWFrZSBhIGRlZmF1bHQgcGlwIGluc3RhbGwsIGluc3RhbGxpbmcgdGhlIHVucXVhbGlmaWVkIHBpcCAiCisgICAgICAgICAgICAgICJhbmQgZWFzeV9pbnN0YWxsIGluIGFkZGl0aW9uIHRvIHRoZSB2ZXJzaW9uZWQgc2NyaXB0cyIpLAorICAgICkKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQorCisgICAgYm9vdHN0cmFwKAorICAgICAgICByb290PWFyZ3Mucm9vdCwKKyAgICAgICAgdXBncmFkZT1hcmdzLnVwZ3JhZGUsCisgICAgICAgIHVzZXI9YXJncy51c2VyLAorICAgICAgICB2ZXJib3NpdHk9YXJncy52ZXJib3NpdHksCisgICAgICAgIGFsdGluc3RhbGw9YXJncy5hbHRpbnN0YWxsLAorICAgICAgICBkZWZhdWx0X3BpcD1hcmdzLmRlZmF1bHRfcGlwLAorICAgICkKZGlmZiAtLWdpdCBhL0xpYi9lbnN1cmVwaXAvX19tYWluX18ucHkgYi9MaWIvZW5zdXJlcGlwL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NTI3ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAoraW1wb3J0IGVuc3VyZXBpcAorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIGVuc3VyZXBpcC5fbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3BpcC05LjAuMC1weTIucHkzLW5vbmUtYW55LndobCBiL0xpYi9lbnN1cmVwaXAvX2J1bmRsZWQvcGlwLTkuMC4wLXB5Mi5weTMtbm9uZS1hbnkud2hsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNjMxYTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3BpcC05LjAuMC1weTIucHkzLW5vbmUtYW55LndobApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL19idW5kbGVkL3NldHVwdG9vbHMtMjguNy4xLXB5Mi5weTMtbm9uZS1hbnkud2hsIGIvTGliL2Vuc3VyZXBpcC9fYnVuZGxlZC9zZXR1cHRvb2xzLTI4LjcuMS1weTIucHkzLW5vbmUtYW55LndobApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmNjMjIwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2Vuc3VyZXBpcC9fYnVuZGxlZC9zZXR1cHRvb2xzLTI4LjcuMS1weTIucHkzLW5vbmUtYW55LndobApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvZW5zdXJlcGlwL191bmluc3RhbGwucHkgYi9MaWIvZW5zdXJlcGlwL191bmluc3RhbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwMzY1ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9lbnN1cmVwaXAvX3VuaW5zdGFsbC5weQpAQCAtMCwwICsxLDMwIEBACisiIiJCYXNpYyBwaXAgdW5pbnN0YWxsYXRpb24gc3VwcG9ydCwgaGVscGVyIGZvciB0aGUgV2luZG93cyB1bmluc3RhbGxlciIiIgorCitpbXBvcnQgYXJncGFyc2UKK2ltcG9ydCBlbnN1cmVwaXAKKworCitkZWYgX21haW4oYXJndj1Ob25lKToKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihwcm9nPSJweXRob24gLW0gZW5zdXJlcGlwLl91bmluc3RhbGwiKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItLXZlcnNpb24iLAorICAgICAgICBhY3Rpb249InZlcnNpb24iLAorICAgICAgICB2ZXJzaW9uPSJwaXAge30iLmZvcm1hdChlbnN1cmVwaXAudmVyc2lvbigpKSwKKyAgICAgICAgaGVscD0iU2hvdyB0aGUgdmVyc2lvbiBvZiBwaXAgdGhpcyB3aWxsIGF0dGVtcHQgdG8gdW5pbnN0YWxsLiIsCisgICAgKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAgICItdiIsICItLXZlcmJvc2UiLAorICAgICAgICBhY3Rpb249ImNvdW50IiwKKyAgICAgICAgZGVmYXVsdD0wLAorICAgICAgICBkZXN0PSJ2ZXJib3NpdHkiLAorICAgICAgICBoZWxwPSgiR2l2ZSBtb3JlIG91dHB1dC4gT3B0aW9uIGlzIGFkZGl0aXZlLCBhbmQgY2FuIGJlIHVzZWQgdXAgdG8gMyAiCisgICAgICAgICAgICAgICJ0aW1lcy4iKSwKKyAgICApCisKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKKworICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcih2ZXJib3NpdHk9YXJncy52ZXJib3NpdHkpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvZW51bS5weSBiL0xpYi9lbnVtLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYjlkNDUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvZW51bS5weQpAQCAtMCwwICsxLDU2MiBAQAoraW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gdHlwZXMgaW1wb3J0IE1hcHBpbmdQcm94eVR5cGUsIER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorCitfX2FsbF9fID0gWydFbnVtJywgJ0ludEVudW0nLCAndW5pcXVlJ10KKworCitkZWYgX2lzX2Rlc2NyaXB0b3Iob2JqKToKKyAgICAiIiJSZXR1cm5zIFRydWUgaWYgb2JqIGlzIGEgZGVzY3JpcHRvciwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgIHJldHVybiAoCisgICAgICAgICAgICBoYXNhdHRyKG9iaiwgJ19fZ2V0X18nKSBvcgorICAgICAgICAgICAgaGFzYXR0cihvYmosICdfX3NldF9fJykgb3IKKyAgICAgICAgICAgIGhhc2F0dHIob2JqLCAnX19kZWxldGVfXycpKQorCisKK2RlZiBfaXNfZHVuZGVyKG5hbWUpOgorICAgICIiIlJldHVybnMgVHJ1ZSBpZiBhIF9fZHVuZGVyX18gbmFtZSwgRmFsc2Ugb3RoZXJ3aXNlLiIiIgorICAgIHJldHVybiAobmFtZVs6Ml0gPT0gbmFtZVstMjpdID09ICdfXycgYW5kCisgICAgICAgICAgICBuYW1lWzI6M10gIT0gJ18nIGFuZAorICAgICAgICAgICAgbmFtZVstMzotMl0gIT0gJ18nIGFuZAorICAgICAgICAgICAgbGVuKG5hbWUpID4gNCkKKworCitkZWYgX2lzX3N1bmRlcihuYW1lKToKKyAgICAiIiJSZXR1cm5zIFRydWUgaWYgYSBfc3VuZGVyXyBuYW1lLCBGYWxzZSBvdGhlcndpc2UuIiIiCisgICAgcmV0dXJuIChuYW1lWzBdID09IG5hbWVbLTFdID09ICdfJyBhbmQKKyAgICAgICAgICAgIG5hbWVbMToyXSAhPSAnXycgYW5kCisgICAgICAgICAgICBuYW1lWy0yOi0xXSAhPSAnXycgYW5kCisgICAgICAgICAgICBsZW4obmFtZSkgPiAyKQorCisKK2RlZiBfbWFrZV9jbGFzc191bnBpY2tsYWJsZShjbHMpOgorICAgICIiIk1ha2UgdGhlIGdpdmVuIGNsYXNzIHVuLXBpY2tsYWJsZS4iIiIKKyAgICBkZWYgX2JyZWFrX29uX2NhbGxfcmVkdWNlKHNlbGYsIHByb3RvKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclciBjYW5ub3QgYmUgcGlja2xlZCcgJSBzZWxmKQorICAgIGNscy5fX3JlZHVjZV9leF9fID0gX2JyZWFrX29uX2NhbGxfcmVkdWNlCisgICAgY2xzLl9fbW9kdWxlX18gPSAnPHVua25vd24+JworCisKK2NsYXNzIF9FbnVtRGljdChkaWN0KToKKyAgICAiIiJUcmFjayBlbnVtIG1lbWJlciBvcmRlciBhbmQgZW5zdXJlIG1lbWJlciBuYW1lcyBhcmUgbm90IHJldXNlZC4KKworICAgIEVudW1NZXRhIHdpbGwgdXNlIHRoZSBuYW1lcyBmb3VuZCBpbiBzZWxmLl9tZW1iZXJfbmFtZXMgYXMgdGhlCisgICAgZW51bWVyYXRpb24gbWVtYmVyIG5hbWVzLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5fbWVtYmVyX25hbWVzID0gW10KKworICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIHZhbHVlKToKKyAgICAgICAgIiIiQ2hhbmdlcyBhbnl0aGluZyBub3QgZHVuZGVyZWQgb3Igbm90IGEgZGVzY3JpcHRvci4KKworICAgICAgICBJZiBhbiBlbnVtIG1lbWJlciBuYW1lIGlzIHVzZWQgdHdpY2UsIGFuIGVycm9yIGlzIHJhaXNlZDsgZHVwbGljYXRlCisgICAgICAgIHZhbHVlcyBhcmUgbm90IGNoZWNrZWQgZm9yLgorCisgICAgICAgIFNpbmdsZSB1bmRlcnNjb3JlIChzdW5kZXIpIG5hbWVzIGFyZSByZXNlcnZlZC4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgX2lzX3N1bmRlcihrZXkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignX25hbWVzXyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSBFbnVtIHVzZScpCisgICAgICAgIGVsaWYgX2lzX2R1bmRlcihrZXkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbGlmIGtleSBpbiBzZWxmLl9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICAjIGRlc2NyaXB0b3Igb3ZlcndyaXRpbmcgYW4gZW51bT8KKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignQXR0ZW1wdGVkIHRvIHJldXNlIGtleTogJXInICUga2V5KQorICAgICAgICBlbGlmIG5vdCBfaXNfZGVzY3JpcHRvcih2YWx1ZSk6CisgICAgICAgICAgICBpZiBrZXkgaW4gc2VsZjoKKyAgICAgICAgICAgICAgICAjIGVudW0gb3ZlcndyaXRpbmcgYSBkZXNjcmlwdG9yPworICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignS2V5IGFscmVhZHkgZGVmaW5lZCBhczogJXInICUgc2VsZltrZXldKQorICAgICAgICAgICAgc2VsZi5fbWVtYmVyX25hbWVzLmFwcGVuZChrZXkpCisgICAgICAgIHN1cGVyKCkuX19zZXRpdGVtX18oa2V5LCB2YWx1ZSkKKworCisKKyMgRHVtbXkgdmFsdWUgZm9yIEVudW0gYXMgRW51bU1ldGEgZXhwbGljaXRseSBjaGVja3MgZm9yIGl0LCBidXQgb2YgY291cnNlCisjIHVudGlsIEVudW1NZXRhIGZpbmlzaGVzIHJ1bm5pbmcgdGhlIGZpcnN0IHRpbWUgdGhlIEVudW0gY2xhc3MgZG9lc24ndCBleGlzdC4KKyMgVGhpcyBpcyBhbHNvIHdoeSB0aGVyZSBhcmUgY2hlY2tzIGluIEVudW1NZXRhIGxpa2UgYGlmIEVudW0gaXMgbm90IE5vbmVgCitFbnVtID0gTm9uZQorCisKK2NsYXNzIEVudW1NZXRhKHR5cGUpOgorICAgICIiIk1ldGFjbGFzcyBmb3IgRW51bSIiIgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfX3ByZXBhcmVfXyhtZXRhY2xzLCBjbHMsIGJhc2VzKToKKyAgICAgICAgcmV0dXJuIF9FbnVtRGljdCgpCisKKyAgICBkZWYgX19uZXdfXyhtZXRhY2xzLCBjbHMsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICAjIGFuIEVudW0gY2xhc3MgaXMgZmluYWwgb25jZSBlbnVtZXJhdGlvbiBpdGVtcyBoYXZlIGJlZW4gZGVmaW5lZDsgaXQKKyAgICAgICAgIyBjYW5ub3QgYmUgbWl4ZWQgd2l0aCBvdGhlciB0eXBlcyAoaW50LCBmbG9hdCwgZXRjLikgaWYgaXQgaGFzIGFuCisgICAgICAgICMgaW5oZXJpdGVkIF9fbmV3X18gdW5sZXNzIGEgbmV3IF9fbmV3X18gaXMgZGVmaW5lZCAob3IgdGhlIHJlc3VsdGluZworICAgICAgICAjIGNsYXNzIHdpbGwgZmFpbCkuCisgICAgICAgIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtID0gbWV0YWNscy5fZ2V0X21peGluc18oYmFzZXMpCisgICAgICAgIF9fbmV3X18sIHNhdmVfbmV3LCB1c2VfYXJncyA9IG1ldGFjbHMuX2ZpbmRfbmV3XyhjbGFzc2RpY3QsIG1lbWJlcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF9lbnVtKQorCisgICAgICAgICMgc2F2ZSBlbnVtIGl0ZW1zIGludG8gc2VwYXJhdGUgbWFwcGluZyBzbyB0aGV5IGRvbid0IGdldCBiYWtlZCBpbnRvCisgICAgICAgICMgdGhlIG5ldyBjbGFzcworICAgICAgICBtZW1iZXJzID0ge2s6IGNsYXNzZGljdFtrXSBmb3IgayBpbiBjbGFzc2RpY3QuX21lbWJlcl9uYW1lc30KKyAgICAgICAgZm9yIG5hbWUgaW4gY2xhc3NkaWN0Ll9tZW1iZXJfbmFtZXM6CisgICAgICAgICAgICBkZWwgY2xhc3NkaWN0W25hbWVdCisKKyAgICAgICAgIyBjaGVjayBmb3IgaWxsZWdhbCBlbnVtIG5hbWVzIChhbnkgb3RoZXJzPykKKyAgICAgICAgaW52YWxpZF9uYW1lcyA9IHNldChtZW1iZXJzKSAmIHsnbXJvJywgfQorICAgICAgICBpZiBpbnZhbGlkX25hbWVzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignSW52YWxpZCBlbnVtIG1lbWJlciBuYW1lOiB7MH0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAnLCcuam9pbihpbnZhbGlkX25hbWVzKSkpCisKKyAgICAgICAgIyBjcmVhdGUgb3VyIG5ldyBFbnVtIHR5cGUKKyAgICAgICAgZW51bV9jbGFzcyA9IHN1cGVyKCkuX19uZXdfXyhtZXRhY2xzLCBjbHMsIGJhc2VzLCBjbGFzc2RpY3QpCisgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9uYW1lc18gPSBbXSAgICAgICAgICAgICAgICMgbmFtZXMgaW4gZGVmaW5pdGlvbiBvcmRlcgorICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwXyA9IE9yZGVyZWREaWN0KCkgICAgICAjIG5hbWUtPnZhbHVlIG1hcAorICAgICAgICBlbnVtX2NsYXNzLl9tZW1iZXJfdHlwZV8gPSBtZW1iZXJfdHlwZQorCisgICAgICAgICMgUmV2ZXJzZSB2YWx1ZS0+bmFtZSBtYXAgZm9yIGhhc2hhYmxlIHZhbHVlcy4KKyAgICAgICAgZW51bV9jbGFzcy5fdmFsdWUybWVtYmVyX21hcF8gPSB7fQorCisgICAgICAgICMgSWYgYSBjdXN0b20gdHlwZSBpcyBtaXhlZCBpbnRvIHRoZSBFbnVtLCBhbmQgaXQgZG9lcyBub3Qga25vdyBob3cKKyAgICAgICAgIyB0byBwaWNrbGUgaXRzZWxmLCBwaWNrbGUuZHVtcHMgd2lsbCBzdWNjZWVkIGJ1dCBwaWNrbGUubG9hZHMgd2lsbAorICAgICAgICAjIGZhaWwuICBSYXRoZXIgdGhhbiBoYXZlIHRoZSBlcnJvciBzaG93IHVwIGxhdGVyIGFuZCBwb3NzaWJseSBmYXIKKyAgICAgICAgIyBmcm9tIHRoZSBzb3VyY2UsIHNhYm90YWdlIHRoZSBwaWNrbGUgcHJvdG9jb2wgZm9yIHRoaXMgY2xhc3Mgc28KKyAgICAgICAgIyB0aGF0IHBpY2tsZS5kdW1wcyBhbHNvIGZhaWxzLgorICAgICAgICAjCisgICAgICAgICMgSG93ZXZlciwgaWYgdGhlIG5ldyBjbGFzcyBpbXBsZW1lbnRzIGl0cyBvd24gX19yZWR1Y2VfZXhfXywgZG8gbm90CisgICAgICAgICMgc2Fib3RhZ2UgLS0gaXQncyBvbiB0aGVtIHRvIG1ha2Ugc3VyZSBpdCB3b3JrcyBjb3JyZWN0bHkuICBXZSB1c2UKKyAgICAgICAgIyBfX3JlZHVjZV9leF9fIGluc3RlYWQgb2YgYW55IG9mIHRoZSBvdGhlcnMgYXMgaXQgaXMgcHJlZmVycmVkIGJ5CisgICAgICAgICMgcGlja2xlIG92ZXIgX19yZWR1Y2VfXywgYW5kIGl0IGhhbmRsZXMgYWxsIHBpY2tsZSBwcm90b2NvbHMuCisgICAgICAgIGlmICdfX3JlZHVjZV9leF9fJyBub3QgaW4gY2xhc3NkaWN0OgorICAgICAgICAgICAgaWYgbWVtYmVyX3R5cGUgaXMgbm90IG9iamVjdDoKKyAgICAgICAgICAgICAgICBtZXRob2RzID0gKCdfX2dldG5ld2FyZ3NfZXhfXycsICdfX2dldG5ld2FyZ3NfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAnX19yZWR1Y2VfZXhfXycsICdfX3JlZHVjZV9fJykKKyAgICAgICAgICAgICAgICBpZiBub3QgYW55KG0gaW4gbWVtYmVyX3R5cGUuX19kaWN0X18gZm9yIG0gaW4gbWV0aG9kcyk6CisgICAgICAgICAgICAgICAgICAgIF9tYWtlX2NsYXNzX3VucGlja2xhYmxlKGVudW1fY2xhc3MpCisKKyAgICAgICAgIyBpbnN0YW50aWF0ZSB0aGVtLCBjaGVja2luZyBmb3IgZHVwbGljYXRlcyBhcyB3ZSBnbworICAgICAgICAjIHdlIGluc3RhbnRpYXRlIGZpcnN0IGluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIGR1cGxpY2F0ZXMgZmlyc3QgaW4gY2FzZQorICAgICAgICAjIGEgY3VzdG9tIF9fbmV3X18gaXMgZG9pbmcgc29tZXRoaW5nIGZ1bmt5IHdpdGggdGhlIHZhbHVlcyAtLSBzdWNoIGFzCisgICAgICAgICMgYXV0by1udW1iZXJpbmcgOykKKyAgICAgICAgZm9yIG1lbWJlcl9uYW1lIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgdmFsdWUgPSBtZW1iZXJzW21lbWJlcl9uYW1lXQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UodmFsdWUsIHR1cGxlKToKKyAgICAgICAgICAgICAgICBhcmdzID0gKHZhbHVlLCApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGFyZ3MgPSB2YWx1ZQorICAgICAgICAgICAgaWYgbWVtYmVyX3R5cGUgaXMgdHVwbGU6ICAgIyBzcGVjaWFsIGNhc2UgZm9yIHR1cGxlIGVudW1zCisgICAgICAgICAgICAgICAgYXJncyA9IChhcmdzLCApICAgICAjIHdyYXAgaXQgb25lIG1vcmUgdGltZQorICAgICAgICAgICAgaWYgbm90IHVzZV9hcmdzOgorICAgICAgICAgICAgICAgIGVudW1fbWVtYmVyID0gX19uZXdfXyhlbnVtX2NsYXNzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZW51bV9tZW1iZXIgPSBfX25ld19fKGVudW1fY2xhc3MsICphcmdzKQorICAgICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGVudW1fbWVtYmVyLCAnX3ZhbHVlXycpOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlci5fdmFsdWVfID0gbWVtYmVyX3R5cGUoKmFyZ3MpCisgICAgICAgICAgICB2YWx1ZSA9IGVudW1fbWVtYmVyLl92YWx1ZV8KKyAgICAgICAgICAgIGVudW1fbWVtYmVyLl9uYW1lXyA9IG1lbWJlcl9uYW1lCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX29iamNsYXNzX18gPSBlbnVtX2NsYXNzCisgICAgICAgICAgICBlbnVtX21lbWJlci5fX2luaXRfXygqYXJncykKKyAgICAgICAgICAgICMgSWYgYW5vdGhlciBtZW1iZXIgd2l0aCB0aGUgc2FtZSB2YWx1ZSB3YXMgYWxyZWFkeSBkZWZpbmVkLCB0aGUKKyAgICAgICAgICAgICMgbmV3IG1lbWJlciBiZWNvbWVzIGFuIGFsaWFzIHRvIHRoZSBleGlzdGluZyBvbmUuCisgICAgICAgICAgICBmb3IgbmFtZSwgY2Fub25pY2FsX21lbWJlciBpbiBlbnVtX2NsYXNzLl9tZW1iZXJfbWFwXy5pdGVtcygpOgorICAgICAgICAgICAgICAgIGlmIGNhbm9uaWNhbF9tZW1iZXIuX3ZhbHVlXyA9PSBlbnVtX21lbWJlci5fdmFsdWVfOgorICAgICAgICAgICAgICAgICAgICBlbnVtX21lbWJlciA9IGNhbm9uaWNhbF9tZW1iZXIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBBbGlhc2VzIGRvbid0IGFwcGVhciBpbiBtZW1iZXIgbmFtZXMgKG9ubHkgaW4gX19tZW1iZXJzX18pLgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX21lbWJlcl9uYW1lc18uYXBwZW5kKG1lbWJlcl9uYW1lKQorICAgICAgICAgICAgZW51bV9jbGFzcy5fbWVtYmVyX21hcF9bbWVtYmVyX25hbWVdID0gZW51bV9tZW1iZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IGZhaWwgaWYgdmFsdWUgaXMgbm90IGhhc2hhYmxlLiBXZSBjYW4ndCBhZGQgdGhlIHZhbHVlCisgICAgICAgICAgICAgICAgIyB0byB0aGUgbWFwLCBhbmQgYnktdmFsdWUgbG9va3VwcyBmb3IgdGhpcyB2YWx1ZSB3aWxsIGJlCisgICAgICAgICAgICAgICAgIyBsaW5lYXIuCisgICAgICAgICAgICAgICAgZW51bV9jbGFzcy5fdmFsdWUybWVtYmVyX21hcF9bdmFsdWVdID0gZW51bV9tZW1iZXIKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgZG91YmxlIGNoZWNrIHRoYXQgcmVwciBhbmQgZnJpZW5kcyBhcmUgbm90IHRoZSBtaXhpbidzIG9yIHZhcmlvdXMKKyAgICAgICAgIyB0aGluZ3MgYnJlYWsgKHN1Y2ggYXMgcGlja2xlKQorICAgICAgICBmb3IgbmFtZSBpbiAoJ19fcmVwcl9fJywgJ19fc3RyX18nLCAnX19mb3JtYXRfXycsICdfX3JlZHVjZV9leF9fJyk6CisgICAgICAgICAgICBjbGFzc19tZXRob2QgPSBnZXRhdHRyKGVudW1fY2xhc3MsIG5hbWUpCisgICAgICAgICAgICBvYmpfbWV0aG9kID0gZ2V0YXR0cihtZW1iZXJfdHlwZSwgbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGVudW1fbWV0aG9kID0gZ2V0YXR0cihmaXJzdF9lbnVtLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgaWYgb2JqX21ldGhvZCBpcyBub3QgTm9uZSBhbmQgb2JqX21ldGhvZCBpcyBjbGFzc19tZXRob2Q6CisgICAgICAgICAgICAgICAgc2V0YXR0cihlbnVtX2NsYXNzLCBuYW1lLCBlbnVtX21ldGhvZCkKKworICAgICAgICAjIHJlcGxhY2UgYW55IG90aGVyIF9fbmV3X18gd2l0aCBvdXIgb3duIChhcyBsb25nIGFzIEVudW0gaXMgbm90IE5vbmUsCisgICAgICAgICMgYW55d2F5KSAtLSBhZ2FpbiwgdGhpcyBpcyB0byBzdXBwb3J0IHBpY2tsZQorICAgICAgICBpZiBFbnVtIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBpZiB0aGUgdXNlciBkZWZpbmVkIHRoZWlyIG93biBfX25ld19fLCBzYXZlIGl0IGJlZm9yZSBpdCBnZXRzCisgICAgICAgICAgICAjIGNsb2JiZXJlZCBpbiBjYXNlIHRoZXkgc3ViY2xhc3MgbGF0ZXIKKyAgICAgICAgICAgIGlmIHNhdmVfbmV3OgorICAgICAgICAgICAgICAgIGVudW1fY2xhc3MuX19uZXdfbWVtYmVyX18gPSBfX25ld19fCisgICAgICAgICAgICBlbnVtX2NsYXNzLl9fbmV3X18gPSBFbnVtLl9fbmV3X18KKyAgICAgICAgcmV0dXJuIGVudW1fY2xhc3MKKworICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzZXMvdHlwZXMgc2hvdWxkIGFsd2F5cyBiZSBUcnVlLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBfX2NhbGxfXyhjbHMsIHZhbHVlLCBuYW1lcz1Ob25lLCAqLCBtb2R1bGU9Tm9uZSwgcXVhbG5hbWU9Tm9uZSwgdHlwZT1Ob25lKToKKyAgICAgICAgIiIiRWl0aGVyIHJldHVybnMgYW4gZXhpc3RpbmcgbWVtYmVyLCBvciBjcmVhdGVzIGEgbmV3IGVudW0gY2xhc3MuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBib3RoIHdoZW4gYW4gZW51bSBjbGFzcyBpcyBnaXZlbiBhIHZhbHVlIHRvIG1hdGNoCisgICAgICAgIHRvIGFuIGVudW1lcmF0aW9uIG1lbWJlciAoaS5lLiBDb2xvcigzKSkgYW5kIGZvciB0aGUgZnVuY3Rpb25hbCBBUEkKKyAgICAgICAgKGkuZS4gQ29sb3IgPSBFbnVtKCdDb2xvcicsIG5hbWVzPSdyZWQgZ3JlZW4gYmx1ZScpKS4KKworICAgICAgICBXaGVuIHVzZWQgZm9yIHRoZSBmdW5jdGlvbmFsIEFQSToKKworICAgICAgICBgdmFsdWVgIHdpbGwgYmUgdGhlIG5hbWUgb2YgdGhlIG5ldyBjbGFzcy4KKworICAgICAgICBgbmFtZXNgIHNob3VsZCBiZSBlaXRoZXIgYSBzdHJpbmcgb2Ygd2hpdGUtc3BhY2UvY29tbWEgZGVsaW1pdGVkIG5hbWVzCisgICAgICAgICh2YWx1ZXMgd2lsbCBzdGFydCBhdCAxKSwgb3IgYW4gaXRlcmF0b3IvbWFwcGluZyBvZiBuYW1lLCB2YWx1ZSBwYWlycy4KKworICAgICAgICBgbW9kdWxlYCBzaG91bGQgYmUgc2V0IHRvIHRoZSBtb2R1bGUgdGhpcyBjbGFzcyBpcyBiZWluZyBjcmVhdGVkIGluOworICAgICAgICBpZiBpdCBpcyBub3Qgc2V0LCBhbiBhdHRlbXB0IHRvIGZpbmQgdGhhdCBtb2R1bGUgd2lsbCBiZSBtYWRlLCBidXQgaWYKKyAgICAgICAgaXQgZmFpbHMgdGhlIGNsYXNzIHdpbGwgbm90IGJlIHBpY2tsYWJsZS4KKworICAgICAgICBgcXVhbG5hbWVgIHNob3VsZCBiZSBzZXQgdG8gdGhlIGFjdHVhbCBsb2NhdGlvbiB0aGlzIGNsYXNzIGNhbiBiZSBmb3VuZAorICAgICAgICBhdCBpbiBpdHMgbW9kdWxlOyBieSBkZWZhdWx0IGl0IGlzIHNldCB0byB0aGUgZ2xvYmFsIHNjb3BlLiAgSWYgdGhpcyBpcworICAgICAgICBub3QgY29ycmVjdCwgdW5waWNrbGluZyB3aWxsIGZhaWwgaW4gc29tZSBjaXJjdW1zdGFuY2VzLgorCisgICAgICAgIGB0eXBlYCwgaWYgc2V0LCB3aWxsIGJlIG1peGVkIGluIGFzIHRoZSBmaXJzdCBiYXNlIGNsYXNzLgorCisgICAgICAgICIiIgorICAgICAgICBpZiBuYW1lcyBpcyBOb25lOiAgIyBzaW1wbGUgdmFsdWUgbG9va3VwCisgICAgICAgICAgICByZXR1cm4gY2xzLl9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgIyBvdGhlcndpc2UsIGZ1bmN0aW9uYWwgQVBJOiB3ZSdyZSBjcmVhdGluZyBhIG5ldyBFbnVtIHR5cGUKKyAgICAgICAgcmV0dXJuIGNscy5fY3JlYXRlXyh2YWx1ZSwgbmFtZXMsIG1vZHVsZT1tb2R1bGUsIHF1YWxuYW1lPXF1YWxuYW1lLCB0eXBlPXR5cGUpCisKKyAgICBkZWYgX19jb250YWluc19fKGNscywgbWVtYmVyKToKKyAgICAgICAgcmV0dXJuIGlzaW5zdGFuY2UobWVtYmVyLCBjbHMpIGFuZCBtZW1iZXIuX25hbWVfIGluIGNscy5fbWVtYmVyX21hcF8KKworICAgIGRlZiBfX2RlbGF0dHJfXyhjbHMsIGF0dHIpOgorICAgICAgICAjIG5pY2VyIGVycm9yIG1lc3NhZ2Ugd2hlbiBzb21lb25lIHRyaWVzIHRvIGRlbGV0ZSBhbiBhdHRyaWJ1dGUKKyAgICAgICAgIyAoc2VlIGlzc3VlMTkwMjUpLgorICAgICAgICBpZiBhdHRyIGluIGNscy5fbWVtYmVyX21hcF86CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgIiVzOiBjYW5ub3QgZGVsZXRlIEVudW0gbWVtYmVyLiIgJSBjbHMuX19uYW1lX18pCisgICAgICAgIHN1cGVyKCkuX19kZWxhdHRyX18oYXR0cikKKworICAgIGRlZiBfX2Rpcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tZW1iZXJzX18nLCAnX19tb2R1bGVfXyddICsKKyAgICAgICAgICAgICAgICBzZWxmLl9tZW1iZXJfbmFtZXNfKQorCisgICAgZGVmIF9fZ2V0YXR0cl9fKGNscywgbmFtZSk6CisgICAgICAgICIiIlJldHVybiB0aGUgZW51bSBtZW1iZXIgbWF0Y2hpbmcgYG5hbWVgCisKKyAgICAgICAgV2UgdXNlIF9fZ2V0YXR0cl9fIGluc3RlYWQgb2YgZGVzY3JpcHRvcnMgb3IgaW5zZXJ0aW5nIGludG8gdGhlIGVudW0KKyAgICAgICAgY2xhc3MnIF9fZGljdF9fIGluIG9yZGVyIHRvIHN1cHBvcnQgYG5hbWVgIGFuZCBgdmFsdWVgIGJlaW5nIGJvdGgKKyAgICAgICAgcHJvcGVydGllcyBmb3IgZW51bSBtZW1iZXJzICh3aGljaCBsaXZlIGluIHRoZSBjbGFzcycgX19kaWN0X18pIGFuZAorICAgICAgICBlbnVtIG1lbWJlcnMgdGhlbXNlbHZlcy4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgX2lzX2R1bmRlcihuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKG5hbWUpIGZyb20gTm9uZQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKGNscywgbmFtZSk6CisgICAgICAgIHJldHVybiBjbHMuX21lbWJlcl9tYXBfW25hbWVdCisKKyAgICBkZWYgX19pdGVyX18oY2xzKToKKyAgICAgICAgcmV0dXJuIChjbHMuX21lbWJlcl9tYXBfW25hbWVdIGZvciBuYW1lIGluIGNscy5fbWVtYmVyX25hbWVzXykKKworICAgIGRlZiBfX2xlbl9fKGNscyk6CisgICAgICAgIHJldHVybiBsZW4oY2xzLl9tZW1iZXJfbmFtZXNfKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9fbWVtYmVyc19fKGNscyk6CisgICAgICAgICIiIlJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKworICAgICAgICBUaGlzIG1hcHBpbmcgbGlzdHMgYWxsIGVudW0gbWVtYmVycywgaW5jbHVkaW5nIGFsaWFzZXMuIE5vdGUgdGhhdCB0aGlzCisgICAgICAgIGlzIGEgcmVhZC1vbmx5IHZpZXcgb2YgdGhlIGludGVybmFsIG1hcHBpbmcuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBNYXBwaW5nUHJveHlUeXBlKGNscy5fbWVtYmVyX21hcF8pCisKKyAgICBkZWYgX19yZXByX18oY2xzKToKKyAgICAgICAgcmV0dXJuICI8ZW51bSAlcj4iICUgY2xzLl9fbmFtZV9fCisKKyAgICBkZWYgX19yZXZlcnNlZF9fKGNscyk6CisgICAgICAgIHJldHVybiAoY2xzLl9tZW1iZXJfbWFwX1tuYW1lXSBmb3IgbmFtZSBpbiByZXZlcnNlZChjbHMuX21lbWJlcl9uYW1lc18pKQorCisgICAgZGVmIF9fc2V0YXR0cl9fKGNscywgbmFtZSwgdmFsdWUpOgorICAgICAgICAiIiJCbG9jayBhdHRlbXB0cyB0byByZWFzc2lnbiBFbnVtIG1lbWJlcnMuCisKKyAgICAgICAgQSBzaW1wbGUgYXNzaWdubWVudCB0byB0aGUgY2xhc3MgbmFtZXNwYWNlIG9ubHkgY2hhbmdlcyBvbmUgb2YgdGhlCisgICAgICAgIHNldmVyYWwgcG9zc2libGUgd2F5cyB0byBnZXQgYW4gRW51bSBtZW1iZXIgZnJvbSB0aGUgRW51bSBjbGFzcywKKyAgICAgICAgcmVzdWx0aW5nIGluIGFuIGluY29uc2lzdGVudCBFbnVtZXJhdGlvbi4KKworICAgICAgICAiIiIKKyAgICAgICAgbWVtYmVyX21hcCA9IGNscy5fX2RpY3RfXy5nZXQoJ19tZW1iZXJfbWFwXycsIHt9KQorICAgICAgICBpZiBuYW1lIGluIG1lbWJlcl9tYXA6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignQ2Fubm90IHJlYXNzaWduIG1lbWJlcnMuJykKKyAgICAgICAgc3VwZXIoKS5fX3NldGF0dHJfXyhuYW1lLCB2YWx1ZSkKKworICAgIGRlZiBfY3JlYXRlXyhjbHMsIGNsYXNzX25hbWUsIG5hbWVzPU5vbmUsICosIG1vZHVsZT1Ob25lLCBxdWFsbmFtZT1Ob25lLCB0eXBlPU5vbmUpOgorICAgICAgICAiIiJDb252ZW5pZW5jZSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IEVudW0gY2xhc3MuCisKKyAgICAgICAgYG5hbWVzYCBjYW4gYmU6CisKKyAgICAgICAgKiBBIHN0cmluZyBjb250YWluaW5nIG1lbWJlciBuYW1lcywgc2VwYXJhdGVkIGVpdGhlciB3aXRoIHNwYWNlcyBvcgorICAgICAgICAgIGNvbW1hcy4gIFZhbHVlcyBhcmUgYXV0by1udW1iZXJlZCBmcm9tIDEuCisgICAgICAgICogQW4gaXRlcmFibGUgb2YgbWVtYmVyIG5hbWVzLiAgVmFsdWVzIGFyZSBhdXRvLW51bWJlcmVkIGZyb20gMS4KKyAgICAgICAgKiBBbiBpdGVyYWJsZSBvZiAobWVtYmVyIG5hbWUsIHZhbHVlKSBwYWlycy4KKyAgICAgICAgKiBBIG1hcHBpbmcgb2YgbWVtYmVyIG5hbWUgLT4gdmFsdWUuCisKKyAgICAgICAgIiIiCisgICAgICAgIG1ldGFjbHMgPSBjbHMuX19jbGFzc19fCisgICAgICAgIGJhc2VzID0gKGNscywgKSBpZiB0eXBlIGlzIE5vbmUgZWxzZSAodHlwZSwgY2xzKQorICAgICAgICBjbGFzc2RpY3QgPSBtZXRhY2xzLl9fcHJlcGFyZV9fKGNsYXNzX25hbWUsIGJhc2VzKQorCisgICAgICAgICMgc3BlY2lhbCBwcm9jZXNzaW5nIG5lZWRlZCBmb3IgbmFtZXM/CisgICAgICAgIGlmIGlzaW5zdGFuY2UobmFtZXMsIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IG5hbWVzLnJlcGxhY2UoJywnLCAnICcpLnNwbGl0KCkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShuYW1lcywgKHR1cGxlLCBsaXN0KSkgYW5kIGlzaW5zdGFuY2UobmFtZXNbMF0sIHN0cik6CisgICAgICAgICAgICBuYW1lcyA9IFsoZSwgaSkgZm9yIChpLCBlKSBpbiBlbnVtZXJhdGUobmFtZXMsIDEpXQorCisgICAgICAgICMgSGVyZSwgbmFtZXMgaXMgZWl0aGVyIGFuIGl0ZXJhYmxlIG9mIChuYW1lLCB2YWx1ZSkgb3IgYSBtYXBwaW5nLgorICAgICAgICBmb3IgaXRlbSBpbiBuYW1lczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoaXRlbSwgc3RyKToKKyAgICAgICAgICAgICAgICBtZW1iZXJfbmFtZSwgbWVtYmVyX3ZhbHVlID0gaXRlbSwgbmFtZXNbaXRlbV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWVtYmVyX25hbWUsIG1lbWJlcl92YWx1ZSA9IGl0ZW0KKyAgICAgICAgICAgIGNsYXNzZGljdFttZW1iZXJfbmFtZV0gPSBtZW1iZXJfdmFsdWUKKyAgICAgICAgZW51bV9jbGFzcyA9IG1ldGFjbHMuX19uZXdfXyhtZXRhY2xzLCBjbGFzc19uYW1lLCBiYXNlcywgY2xhc3NkaWN0KQorCisgICAgICAgICMgVE9ETzogcmVwbGFjZSB0aGUgZnJhbWUgaGFjayBpZiBhIGJsZXNzZWQgd2F5IHRvIGtub3cgdGhlIGNhbGxpbmcKKyAgICAgICAgIyBtb2R1bGUgaXMgZXZlciBkZXZlbG9wZWQKKyAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gc3lzLl9nZXRmcmFtZSgyKS5mX2dsb2JhbHNbJ19fbmFtZV9fJ10KKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgX21ha2VfY2xhc3NfdW5waWNrbGFibGUoZW51bV9jbGFzcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19tb2R1bGVfXyA9IG1vZHVsZQorICAgICAgICBpZiBxdWFsbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGVudW1fY2xhc3MuX19xdWFsbmFtZV9fID0gcXVhbG5hbWUKKworICAgICAgICByZXR1cm4gZW51bV9jbGFzcworCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X21peGluc18oYmFzZXMpOgorICAgICAgICAiIiJSZXR1cm5zIHRoZSB0eXBlIGZvciBjcmVhdGluZyBlbnVtIG1lbWJlcnMsIGFuZCB0aGUgZmlyc3QgaW5oZXJpdGVkCisgICAgICAgIGVudW0gY2xhc3MuCisKKyAgICAgICAgYmFzZXM6IHRoZSB0dXBsZSBvZiBiYXNlcyB0aGF0IHdhcyBnaXZlbiB0byBfX25ld19fCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBiYXNlczoKKyAgICAgICAgICAgIHJldHVybiBvYmplY3QsIEVudW0KKworICAgICAgICAjIGRvdWJsZSBjaGVjayB0aGF0IHdlIGFyZSBub3Qgc3ViY2xhc3NpbmcgYSBjbGFzcyB3aXRoIGV4aXN0aW5nCisgICAgICAgICMgZW51bWVyYXRpb24gbWVtYmVyczsgd2hpbGUgd2UncmUgYXQgaXQsIHNlZSBpZiBhbnkgb3RoZXIgZGF0YQorICAgICAgICAjIHR5cGUgaGFzIGJlZW4gbWl4ZWQgaW4gc28gd2UgY2FuIHVzZSB0aGUgY29ycmVjdCBfX25ld19fCisgICAgICAgIG1lbWJlcl90eXBlID0gZmlyc3RfZW51bSA9IE5vbmUKKyAgICAgICAgZm9yIGJhc2UgaW4gYmFzZXM6CisgICAgICAgICAgICBpZiAgKGJhc2UgaXMgbm90IEVudW0gYW5kCisgICAgICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoYmFzZSwgRW51bSkgYW5kCisgICAgICAgICAgICAgICAgICAgIGJhc2UuX21lbWJlcl9uYW1lc18pOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGV4dGVuZCBlbnVtZXJhdGlvbnMiKQorICAgICAgICAjIGJhc2UgaXMgbm93IHRoZSBsYXN0IGJhc2UgaW4gYmFzZXMKKyAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MoYmFzZSwgRW51bSk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5ldyBlbnVtZXJhdGlvbnMgbXVzdCBiZSBjcmVhdGVkIGFzICIKKyAgICAgICAgICAgICAgICAgICAgImBDbGFzc05hbWUoW21peGluX3R5cGUsXSBlbnVtX3R5cGUpYCIpCisKKyAgICAgICAgIyBnZXQgY29ycmVjdCBtaXgtaW4gdHlwZSAoZWl0aGVyIG1peC1pbiB0eXBlIG9mIEVudW0gc3ViY2xhc3MsIG9yCisgICAgICAgICMgZmlyc3QgYmFzZSBpZiBsYXN0IGJhc2UgaXMgRW51bSkKKyAgICAgICAgaWYgbm90IGlzc3ViY2xhc3MoYmFzZXNbMF0sIEVudW0pOgorICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBiYXNlc1swXSAgICAgIyBmaXJzdCBkYXRhIHR5cGUKKyAgICAgICAgICAgIGZpcnN0X2VudW0gPSBiYXNlc1stMV0gICMgZW51bSB0eXBlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3IgYmFzZSBpbiBiYXNlc1swXS5fX21yb19fOgorICAgICAgICAgICAgICAgICMgbW9zdCBjb21tb246IChJbnRFbnVtLCBpbnQsIEVudW0sIG9iamVjdCkKKyAgICAgICAgICAgICAgICAjIHBvc3NpYmxlOiAgICAoPEVudW0gJ0F1dG9JbnRFbnVtJz4sIDxFbnVtICdJbnRFbnVtJz4sCisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgIDxjbGFzcyAnaW50Jz4sIDxFbnVtICdFbnVtJz4sCisgICAgICAgICAgICAgICAgIyAgICAgICAgICAgICAgIDxjbGFzcyAnb2JqZWN0Jz4pCisgICAgICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhiYXNlLCBFbnVtKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZmlyc3RfZW51bSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RfZW51bSA9IGJhc2UKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBtZW1iZXJfdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyX3R5cGUgPSBiYXNlCisKKyAgICAgICAgcmV0dXJuIG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9maW5kX25ld18oY2xhc3NkaWN0LCBtZW1iZXJfdHlwZSwgZmlyc3RfZW51bSk6CisgICAgICAgICIiIlJldHVybnMgdGhlIF9fbmV3X18gdG8gYmUgdXNlZCBmb3IgY3JlYXRpbmcgdGhlIGVudW0gbWVtYmVycy4KKworICAgICAgICBjbGFzc2RpY3Q6IHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGdpdmVuIHRvIF9fbmV3X18KKyAgICAgICAgbWVtYmVyX3R5cGU6IHRoZSBkYXRhIHR5cGUgd2hvc2UgX19uZXdfXyB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdAorICAgICAgICBmaXJzdF9lbnVtOiBlbnVtZXJhdGlvbiB0byBjaGVjayBmb3IgYW4gb3ZlcnJpZGluZyBfX25ld19fCisKKyAgICAgICAgIiIiCisgICAgICAgICMgbm93IGZpbmQgdGhlIGNvcnJlY3QgX19uZXdfXywgY2hlY2tpbmcgdG8gc2VlIG9mIG9uZSB3YXMgZGVmaW5lZAorICAgICAgICAjIGJ5IHRoZSB1c2VyOyBhbHNvIGNoZWNrIGVhcmxpZXIgZW51bSBjbGFzc2VzIGluIGNhc2UgYSBfX25ld19fIHdhcworICAgICAgICAjIHNhdmVkIGFzIF9fbmV3X21lbWJlcl9fCisgICAgICAgIF9fbmV3X18gPSBjbGFzc2RpY3QuZ2V0KCdfX25ld19fJywgTm9uZSkKKworICAgICAgICAjIHNob3VsZCBfX25ld19fIGJlIHNhdmVkIGFzIF9fbmV3X21lbWJlcl9fIGxhdGVyPworICAgICAgICBzYXZlX25ldyA9IF9fbmV3X18gaXMgbm90IE5vbmUKKworICAgICAgICBpZiBfX25ld19fIGlzIE5vbmU6CisgICAgICAgICAgICAjIGNoZWNrIGFsbCBwb3NzaWJsZXMgZm9yIF9fbmV3X21lbWJlcl9fIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8KKyAgICAgICAgICAgICMgX19uZXdfXworICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ19fbmV3X21lbWJlcl9fJywgJ19fbmV3X18nKToKKyAgICAgICAgICAgICAgICBmb3IgcG9zc2libGUgaW4gKG1lbWJlcl90eXBlLCBmaXJzdF9lbnVtKToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gZ2V0YXR0cihwb3NzaWJsZSwgbWV0aG9kLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBpZiB0YXJnZXQgbm90IGluIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUuX19uZXdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QuX19uZXdfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbnVtLl9fbmV3X18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfToKKyAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X18gPSB0YXJnZXQKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgX19uZXdfXyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgX19uZXdfXyA9IG9iamVjdC5fX25ld19fCisKKyAgICAgICAgIyBpZiBhIG5vbi1vYmplY3QuX19uZXdfXyBpcyB1c2VkIHRoZW4gd2hhdGV2ZXIgdmFsdWUvdHVwbGUgd2FzCisgICAgICAgICMgYXNzaWduZWQgdG8gdGhlIGVudW0gbWVtYmVyIG5hbWUgd2lsbCBiZSBwYXNzZWQgdG8gX19uZXdfXyBhbmQgdG8gdGhlCisgICAgICAgICMgbmV3IGVudW0gbWVtYmVyJ3MgX19pbml0X18KKyAgICAgICAgaWYgX19uZXdfXyBpcyBvYmplY3QuX19uZXdfXzoKKyAgICAgICAgICAgIHVzZV9hcmdzID0gRmFsc2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHVzZV9hcmdzID0gVHJ1ZQorCisgICAgICAgIHJldHVybiBfX25ld19fLCBzYXZlX25ldywgdXNlX2FyZ3MKKworCitjbGFzcyBFbnVtKG1ldGFjbGFzcz1FbnVtTWV0YSk6CisgICAgIiIiR2VuZXJpYyBlbnVtZXJhdGlvbi4KKworICAgIERlcml2ZSBmcm9tIHRoaXMgY2xhc3MgdG8gZGVmaW5lIG5ldyBlbnVtZXJhdGlvbnMuCisKKyAgICAiIiIKKyAgICBkZWYgX19uZXdfXyhjbHMsIHZhbHVlKToKKyAgICAgICAgIyBhbGwgZW51bSBpbnN0YW5jZXMgYXJlIGFjdHVhbGx5IGNyZWF0ZWQgZHVyaW5nIGNsYXNzIGNvbnN0cnVjdGlvbgorICAgICAgICAjIHdpdGhvdXQgY2FsbGluZyB0aGlzIG1ldGhvZDsgdGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IHRoZSBtZXRhY2xhc3MnCisgICAgICAgICMgX19jYWxsX18gKGkuZS4gQ29sb3IoMykgKSwgYW5kIGJ5IHBpY2tsZQorICAgICAgICBpZiB0eXBlKHZhbHVlKSBpcyBjbHM6CisgICAgICAgICAgICAjIEZvciBsb29rdXBzIGxpa2UgQ29sb3IoQ29sb3IucmVkKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgICMgYnktdmFsdWUgc2VhcmNoIGZvciBhIG1hdGNoaW5nIGVudW0gbWVtYmVyCisgICAgICAgICMgc2VlIGlmIGl0J3MgaW4gdGhlIHJldmVyc2UgbWFwcGluZyAoZm9yIGhhc2hhYmxlIHZhbHVlcykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgdmFsdWUgaW4gY2xzLl92YWx1ZTJtZW1iZXJfbWFwXzoKKyAgICAgICAgICAgICAgICByZXR1cm4gY2xzLl92YWx1ZTJtZW1iZXJfbWFwX1t2YWx1ZV0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgbm90IHRoZXJlLCBub3cgZG8gbG9uZyBzZWFyY2ggLS0gTyhuKSBiZWhhdmlvcgorICAgICAgICAgICAgZm9yIG1lbWJlciBpbiBjbHMuX21lbWJlcl9tYXBfLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIGlmIG1lbWJlci5fdmFsdWVfID09IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWVtYmVyCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIGlzIG5vdCBhIHZhbGlkICVzIiAlICh2YWx1ZSwgY2xzLl9fbmFtZV9fKSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8JXMuJXM6ICVyPiIgJSAoCisgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfLCBzZWxmLl92YWx1ZV8pCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIlcy4lcyIgJSAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sIHNlbGYuX25hbWVfKQorCisgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgIGFkZGVkX2JlaGF2aW9yID0gWworICAgICAgICAgICAgICAgIG0KKyAgICAgICAgICAgICAgICBmb3IgY2xzIGluIHNlbGYuX19jbGFzc19fLm1ybygpCisgICAgICAgICAgICAgICAgZm9yIG0gaW4gY2xzLl9fZGljdF9fCisgICAgICAgICAgICAgICAgaWYgbVswXSAhPSAnXycKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHJldHVybiAoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnXSArCisgICAgICAgICAgICAgICAgYWRkZWRfYmVoYXZpb3IpCisKKyAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6CisgICAgICAgICMgbWl4ZWQtaW4gRW51bXMgc2hvdWxkIHVzZSB0aGUgbWl4ZWQtaW4gdHlwZSdzIF9fZm9ybWF0X18sIG90aGVyd2lzZQorICAgICAgICAjIHdlIGNhbiBnZXQgc3RyYW5nZSByZXN1bHRzIHdpdGggdGhlIEVudW0gbmFtZSBzaG93aW5nIHVwIGluc3RlYWQgb2YKKyAgICAgICAgIyB0aGUgdmFsdWUKKworICAgICAgICAjIHB1cmUgRW51bSBicmFuY2gKKyAgICAgICAgaWYgc2VsZi5fbWVtYmVyX3R5cGVfIGlzIG9iamVjdDoKKyAgICAgICAgICAgIGNscyA9IHN0cgorICAgICAgICAgICAgdmFsID0gc3RyKHNlbGYpCisgICAgICAgICMgbWl4LWluIGJyYW5jaAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xzID0gc2VsZi5fbWVtYmVyX3R5cGVfCisgICAgICAgICAgICB2YWwgPSBzZWxmLl92YWx1ZV8KKyAgICAgICAgcmV0dXJuIGNscy5fX2Zvcm1hdF9fKHZhbCwgZm9ybWF0X3NwZWMpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX25hbWVfKQorCisgICAgZGVmIF9fcmVkdWNlX2V4X18oc2VsZiwgcHJvdG8pOgorICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIChzZWxmLl92YWx1ZV8sICkKKworICAgICMgRHluYW1pY0NsYXNzQXR0cmlidXRlIGlzIHVzZWQgdG8gcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGBuYW1lYCBhbmQKKyAgICAjIGB2YWx1ZWAgcHJvcGVydGllcyBvZiBlbnVtIG1lbWJlcnMgd2hpbGUga2VlcGluZyBzb21lIG1lYXN1cmUgb2YKKyAgICAjIHByb3RlY3Rpb24gZnJvbSBtb2RpZmljYXRpb24sIHdoaWxlIHN0aWxsIGFsbG93aW5nIGZvciBhbiBlbnVtZXJhdGlvbgorICAgICMgdG8gaGF2ZSBtZW1iZXJzIG5hbWVkIGBuYW1lYCBhbmQgYHZhbHVlYC4gIFRoaXMgd29ya3MgYmVjYXVzZSBlbnVtZXJhdGlvbgorICAgICMgbWVtYmVycyBhcmUgbm90IHNldCBkaXJlY3RseSBvbiB0aGUgZW51bSBjbGFzcyAtLSBfX2dldGF0dHJfXyBpcworICAgICMgdXNlZCB0byBsb29rIHRoZW0gdXAuCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIG5hbWUoc2VsZik6CisgICAgICAgICIiIlRoZSBuYW1lIG9mIHRoZSBFbnVtIG1lbWJlci4iIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX25hbWVfCisKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgZGVmIHZhbHVlKHNlbGYpOgorICAgICAgICAiIiJUaGUgdmFsdWUgb2YgdGhlIEVudW0gbWVtYmVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NvbnZlcnQoY2xzLCBuYW1lLCBtb2R1bGUsIGZpbHRlciwgc291cmNlPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIGEgbmV3IEVudW0gc3ViY2xhc3MgdGhhdCByZXBsYWNlcyBhIGNvbGxlY3Rpb24gb2YgZ2xvYmFsIGNvbnN0YW50cworICAgICAgICAiIiIKKyAgICAgICAgIyBjb252ZXJ0IGFsbCBjb25zdGFudHMgZnJvbSBzb3VyY2UgKG9yIG1vZHVsZSkgdGhhdCBwYXNzIGZpbHRlcigpIHRvCisgICAgICAgICMgYSBuZXcgRW51bSBjYWxsZWQgbmFtZSwgYW5kIGV4cG9ydCB0aGUgZW51bSBhbmQgaXRzIG1lbWJlcnMgYmFjayB0bworICAgICAgICAjIG1vZHVsZTsKKyAgICAgICAgIyBhbHNvLCByZXBsYWNlIHRoZSBfX3JlZHVjZV9leF9fIG1ldGhvZCBzbyB1bnBpY2tsaW5nIHdvcmtzIGluCisgICAgICAgICMgcHJldmlvdXMgUHl0aG9uIHZlcnNpb25zCisgICAgICAgIG1vZHVsZV9nbG9iYWxzID0gdmFycyhzeXMubW9kdWxlc1ttb2R1bGVdKQorICAgICAgICBpZiBzb3VyY2U6CisgICAgICAgICAgICBzb3VyY2UgPSB2YXJzKHNvdXJjZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNvdXJjZSA9IG1vZHVsZV9nbG9iYWxzCisgICAgICAgIG1lbWJlcnMgPSB7bmFtZTogdmFsdWUgZm9yIG5hbWUsIHZhbHVlIGluIHNvdXJjZS5pdGVtcygpCisgICAgICAgICAgICAgICAgaWYgZmlsdGVyKG5hbWUpfQorICAgICAgICBjbHMgPSBjbHMobmFtZSwgbWVtYmVycywgbW9kdWxlPW1vZHVsZSkKKyAgICAgICAgY2xzLl9fcmVkdWNlX2V4X18gPSBfcmVkdWNlX2V4X2J5X25hbWUKKyAgICAgICAgbW9kdWxlX2dsb2JhbHMudXBkYXRlKGNscy5fX21lbWJlcnNfXykKKyAgICAgICAgbW9kdWxlX2dsb2JhbHNbbmFtZV0gPSBjbHMKKyAgICAgICAgcmV0dXJuIGNscworCisKK2NsYXNzIEludEVudW0oaW50LCBFbnVtKToKKyAgICAiIiJFbnVtIHdoZXJlIG1lbWJlcnMgYXJlIGFsc28gKGFuZCBtdXN0IGJlKSBpbnRzIiIiCisKKworZGVmIF9yZWR1Y2VfZXhfYnlfbmFtZShzZWxmLCBwcm90byk6CisgICAgcmV0dXJuIHNlbGYubmFtZQorCitkZWYgdW5pcXVlKGVudW1lcmF0aW9uKToKKyAgICAiIiJDbGFzcyBkZWNvcmF0b3IgZm9yIGVudW1lcmF0aW9ucyBlbnN1cmluZyB1bmlxdWUgbWVtYmVyIHZhbHVlcy4iIiIKKyAgICBkdXBsaWNhdGVzID0gW10KKyAgICBmb3IgbmFtZSwgbWVtYmVyIGluIGVudW1lcmF0aW9uLl9fbWVtYmVyc19fLml0ZW1zKCk6CisgICAgICAgIGlmIG5hbWUgIT0gbWVtYmVyLm5hbWU6CisgICAgICAgICAgICBkdXBsaWNhdGVzLmFwcGVuZCgobmFtZSwgbWVtYmVyLm5hbWUpKQorICAgIGlmIGR1cGxpY2F0ZXM6CisgICAgICAgIGFsaWFzX2RldGFpbHMgPSAnLCAnLmpvaW4oCisgICAgICAgICAgICAgICAgWyIlcyAtPiAlcyIgJSAoYWxpYXMsIG5hbWUpIGZvciAoYWxpYXMsIG5hbWUpIGluIGR1cGxpY2F0ZXNdKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdkdXBsaWNhdGUgdmFsdWVzIGZvdW5kIGluICVyOiAlcycgJQorICAgICAgICAgICAgICAgIChlbnVtZXJhdGlvbiwgYWxpYXNfZGV0YWlscykpCisgICAgcmV0dXJuIGVudW1lcmF0aW9uCmRpZmYgLS1naXQgYS9MaWIvZmlsZWNtcC5weSBiL0xpYi9maWxlY21wLnB5CmluZGV4IGY1Y2VhMWQuLmU1YWQ4MzkgMTAwNjQ0Ci0tLSBhL0xpYi9maWxlY21wLnB5CisrKyBiL0xpYi9maWxlY21wLnB5CkBAIC02LDYgKzYsNyBAQAogRnVuY3Rpb25zOgogICAgIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSkgLT4gaW50CiAgICAgY21wZmlsZXMoYSwgYiwgY29tbW9uKSAtPiAoW10sIFtdLCBbXSkKKyAgICBjbGVhcl9jYWNoZSgpCiAKICIiIgogCkBAIC0xMywxMSArMTQsMTggQEAKIGltcG9ydCBzdGF0CiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgZmlsdGVyZmFsc2UKIAotX19hbGxfXyA9IFsiY21wIiwgImRpcmNtcCIsICJjbXBmaWxlcyJdCitfX2FsbF9fID0gWydjbGVhcl9jYWNoZScsICdjbXAnLCAnZGlyY21wJywgJ2NtcGZpbGVzJywgJ0RFRkFVTFRfSUdOT1JFUyddCiAKIF9jYWNoZSA9IHt9CiBCVUZTSVpFID0gOCoxMDI0CiAKK0RFRkFVTFRfSUdOT1JFUyA9IFsKKyAgICAnUkNTJywgJ0NWUycsICd0YWdzJywgJy5naXQnLCAnLmhnJywgJy5ienInLCAnX2RhcmNzJywgJ19fcHljYWNoZV9fJ10KKworZGVmIGNsZWFyX2NhY2hlKCk6CisgICAgIiIiQ2xlYXIgdGhlIGZpbGVjbXAgY2FjaGUuIiIiCisgICAgX2NhY2hlLmNsZWFyKCkKKwogZGVmIGNtcChmMSwgZjIsIHNoYWxsb3c9VHJ1ZSk6CiAgICAgIiIiQ29tcGFyZSB0d28gZmlsZXMuCiAKQEAgLTI4LDE0ICszNiwxNSBAQAogICAgIGYyIC0tIFNlY29uZCBmaWxlIG5hbWUKIAogICAgIHNoYWxsb3cgLS0gSnVzdCBjaGVjayBzdGF0IHNpZ25hdHVyZSAoZG8gbm90IHJlYWQgdGhlIGZpbGVzKS4KLSAgICAgICAgICAgICAgIGRlZmF1bHRzIHRvIDEuCisgICAgICAgICAgICAgICBkZWZhdWx0cyB0byBUcnVlLgogCiAgICAgUmV0dXJuIHZhbHVlOgogCiAgICAgVHJ1ZSBpZiB0aGUgZmlsZXMgYXJlIHRoZSBzYW1lLCBGYWxzZSBvdGhlcndpc2UuCiAKICAgICBUaGlzIGZ1bmN0aW9uIHVzZXMgYSBjYWNoZSBmb3IgcGFzdCBjb21wYXJpc29ucyBhbmQgdGhlIHJlc3VsdHMsCi0gICAgd2l0aCBhIGNhY2hlIGludmFsaWRhdGlvbiBtZWNoYW5pc20gcmVseWluZyBvbiBzdGFsZSBzaWduYXR1cmVzLgorICAgIHdpdGggY2FjaGUgZW50cmllcyBpbnZhbGlkYXRlZCBpZiB0aGVpciBzdGF0IGluZm9ybWF0aW9uCisgICAgY2hhbmdlcy4gIFRoZSBjYWNoZSBtYXkgYmUgY2xlYXJlZCBieSBjYWxsaW5nIGNsZWFyX2NhY2hlKCkuCiAKICAgICAiIiIKIApAQCAtNTIsNyArNjEsNyBAQAogICAgIGlmIG91dGNvbWUgaXMgTm9uZToKICAgICAgICAgb3V0Y29tZSA9IF9kb19jbXAoZjEsIGYyKQogICAgICAgICBpZiBsZW4oX2NhY2hlKSA+IDEwMDogICAgICAjIGxpbWl0IHRoZSBtYXhpbXVtIHNpemUgb2YgdGhlIGNhY2hlCi0gICAgICAgICAgICBfY2FjaGUuY2xlYXIoKQorICAgICAgICAgICAgY2xlYXJfY2FjaGUoKQogICAgICAgICBfY2FjaGVbZjEsIGYyLCBzMSwgczJdID0gb3V0Y29tZQogICAgIHJldHVybiBvdXRjb21lCiAKQEAgLTgwLDcgKzg5LDcgQEAKICAgICBkaXJjbXAoYSwgYiwgaWdub3JlPU5vbmUsIGhpZGU9Tm9uZSkKICAgICAgIEEgYW5kIEIgYXJlIGRpcmVjdG9yaWVzLgogICAgICAgSUdOT1JFIGlzIGEgbGlzdCBvZiBuYW1lcyB0byBpZ25vcmUsCi0gICAgICAgIGRlZmF1bHRzIHRvIFsnUkNTJywgJ0NWUycsICd0YWdzJ10uCisgICAgICAgIGRlZmF1bHRzIHRvIERFRkFVTFRfSUdOT1JFUy4KICAgICAgIEhJREUgaXMgYSBsaXN0IG9mIG5hbWVzIHRvIGhpZGUsCiAgICAgICAgIGRlZmF1bHRzIHRvIFtvcy5jdXJkaXIsIG9zLnBhcmRpcl0uCiAKQEAgLTExNiw3ICsxMjUsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5oaWRlID0gaGlkZQogICAgICAgICBpZiBpZ25vcmUgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuaWdub3JlID0gWydSQ1MnLCAnQ1ZTJywgJ3RhZ3MnXSAjIE5hbWVzIGlnbm9yZWQgaW4gY29tcGFyaXNvbgorICAgICAgICAgICAgc2VsZi5pZ25vcmUgPSBERUZBVUxUX0lHTk9SRVMKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuaWdub3JlID0gaWdub3JlCiAKQEAgLTE0NywxMiArMTU2LDEyIEBACiAgICAgICAgICAgICBvayA9IDEKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhX3N0YXQgPSBvcy5zdGF0KGFfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgIyBwcmludCgnQ2FuXCd0IHN0YXQnLCBhX3BhdGgsICc6Jywgd2h5LmFyZ3NbMV0pCiAgICAgICAgICAgICAgICAgb2sgPSAwCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgYl9zdGF0ID0gb3Muc3RhdChiX3BhdGgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgICMgcHJpbnQoJ0NhblwndCBzdGF0JywgYl9wYXRoLCAnOicsIHdoeS5hcmdzWzFdKQogICAgICAgICAgICAgICAgIG9rID0gMAogCkBAIC0yNjgsNyArMjc3LDcgQEAKIGRlZiBfY21wKGEsIGIsIHNoLCBhYnM9YWJzLCBjbXA9Y21wKToKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBub3QgYWJzKGNtcChhLCBiLCBzaCkpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gMgogCiAKZGlmZiAtLWdpdCBhL0xpYi9maWxlaW5wdXQucHkgYi9MaWIvZmlsZWlucHV0LnB5CmluZGV4IDg3OWEwZmQuLjgxYTc1NDUgMTAwNjQ0Ci0tLSBhL0xpYi9maWxlaW5wdXQucHkKKysrIGIvTGliL2ZpbGVpbnB1dC5weQpAQCAtMzAsNyArMzAsNyBAQAogCiBBbGwgZmlsZXMgYXJlIG9wZW5lZCBpbiB0ZXh0IG1vZGUgYnkgZGVmYXVsdCwgeW91IGNhbiBvdmVycmlkZSB0aGlzIGJ5CiBzZXR0aW5nIHRoZSBtb2RlIHBhcmFtZXRlciB0byBpbnB1dCgpIG9yIEZpbGVJbnB1dC5fX2luaXRfXygpLgotSWYgYW4gSS9PIGVycm9yIG9jY3VycyBkdXJpbmcgb3BlbmluZyBvciByZWFkaW5nIGEgZmlsZSwgdGhlIElPRXJyb3IKK0lmIGFuIEkvTyBlcnJvciBvY2N1cnMgZHVyaW5nIG9wZW5pbmcgb3IgcmVhZGluZyBhIGZpbGUsIHRoZSBPU0Vycm9yCiBleGNlcHRpb24gaXMgcmFpc2VkLgogCiBJZiBzeXMuc3RkaW4gaXMgdXNlZCBtb3JlIHRoYW4gb25jZSwgdGhlIHNlY29uZCBhbmQgZnVydGhlciB1c2Ugd2lsbApAQCAtMjIyLDYgKzIyMiwxMCBAQAogICAgICAgICBpZiBtb2RlIG5vdCBpbiAoJ3InLCAnclUnLCAnVScsICdyYicpOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiRmlsZUlucHV0IG9wZW5pbmcgbW9kZSBtdXN0IGJlIG9uZSBvZiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIncicsICdyVScsICdVJyBhbmQgJ3JiJyIpCisgICAgICAgIGlmICdVJyBpbiBtb2RlOgorICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCInVScgbW9kZSBpcyBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzZWxmLl9tb2RlID0gbW9kZQogICAgICAgICBpZiBvcGVuaG9vazoKICAgICAgICAgICAgIGlmIGlucGxhY2U6CkBAIC0yMzQsOCArMjM4LDEwIEBACiAgICAgICAgIHNlbGYuY2xvc2UoKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLm5leHRmaWxlKCkKLSAgICAgICAgc2VsZi5fZmlsZXMgPSAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLm5leHRmaWxlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGVzID0gKCkKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmCkBAIC0yNzcsMjMgKzI4MywyNSBAQAogCiAgICAgICAgIG91dHB1dCA9IHNlbGYuX291dHB1dAogICAgICAgICBzZWxmLl9vdXRwdXQgPSAwCi0gICAgICAgIGlmIG91dHB1dDoKLSAgICAgICAgICAgIG91dHB1dC5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgICAgICBvdXRwdXQuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZmlsZSA9IHNlbGYuX2ZpbGUKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSAwCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgZmlsZSBhbmQgbm90IHNlbGYuX2lzc3RkaW46CisgICAgICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBiYWNrdXBmaWxlbmFtZSA9IHNlbGYuX2JhY2t1cGZpbGVuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAwCisgICAgICAgICAgICAgICAgaWYgYmFja3VwZmlsZW5hbWUgYW5kIG5vdCBzZWxmLl9iYWNrdXA6CisgICAgICAgICAgICAgICAgICAgIHRyeTogb3MudW5saW5rKGJhY2t1cGZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogcGFzcwogCi0gICAgICAgIGZpbGUgPSBzZWxmLl9maWxlCi0gICAgICAgIHNlbGYuX2ZpbGUgPSAwCi0gICAgICAgIGlmIGZpbGUgYW5kIG5vdCBzZWxmLl9pc3N0ZGluOgotICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgYmFja3VwZmlsZW5hbWUgPSBzZWxmLl9iYWNrdXBmaWxlbmFtZQotICAgICAgICBzZWxmLl9iYWNrdXBmaWxlbmFtZSA9IDAKLSAgICAgICAgaWYgYmFja3VwZmlsZW5hbWUgYW5kIG5vdCBzZWxmLl9iYWNrdXA6Ci0gICAgICAgICAgICB0cnk6IG9zLnVubGluayhiYWNrdXBmaWxlbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiBwYXNzCi0KLSAgICAgICAgc2VsZi5faXNzdGRpbiA9IEZhbHNlCi0gICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCi0gICAgICAgIHNlbGYuX2J1ZmluZGV4ID0gMAorICAgICAgICAgICAgICAgIHNlbGYuX2lzc3RkaW4gPSBGYWxzZQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmaW5kZXggPSAwCiAKICAgICBkZWYgcmVhZGxpbmUoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTMwNyw3ICszMTUsMTAgQEAKICAgICAgICAgICAgIHJldHVybiBsaW5lCiAgICAgICAgIGlmIG5vdCBzZWxmLl9maWxlOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuX2ZpbGVzOgotICAgICAgICAgICAgICAgIHJldHVybiAiIgorICAgICAgICAgICAgICAgIGlmICdiJyBpbiBzZWxmLl9tb2RlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYicnCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcnCiAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSA9IHNlbGYuX2ZpbGVzWzBdCiAgICAgICAgICAgICBzZWxmLl9maWxlcyA9IHNlbGYuX2ZpbGVzWzE6XQogICAgICAgICAgICAgc2VsZi5fZmlsZWxpbmVubyA9IDAKQEAgLTMxNiwxNSArMzI3LDIwIEBACiAgICAgICAgICAgICBzZWxmLl9iYWNrdXBmaWxlbmFtZSA9IDAKICAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGVuYW1lID09ICctJzoKICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSA9ICc8c3RkaW4+JwotICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBzeXMuc3RkaW4KKyAgICAgICAgICAgICAgICBpZiAnYicgaW4gc2VsZi5fbW9kZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHN5cy5zdGRpbi5idWZmZXIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gc3lzLnN0ZGluCiAgICAgICAgICAgICAgICAgc2VsZi5faXNzdGRpbiA9IFRydWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wbGFjZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmFja3VwZmlsZW5hbWUgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlbmFtZSArIChzZWxmLl9iYWNrdXAgb3IgIi5iYWsiKSkKLSAgICAgICAgICAgICAgICAgICAgdHJ5OiBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjogcGFzcwotICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fYmFja3VwZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAjIFRoZSBuZXh0IGZldyBsaW5lcyBtYXkgcmFpc2UgT1NFcnJvcgogICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5fZmlsZW5hbWUsIHNlbGYuX2JhY2t1cGZpbGVuYW1lKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9iYWNrdXBmaWxlbmFtZSwgc2VsZi5fbW9kZSkKICAgICAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtMzQ2LDcgKzM2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NhdmVzdGRvdXQgPSBzeXMuc3Rkb3V0CiAgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzZWxmLl9vdXRwdXQKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIFRoaXMgbWF5IHJhaXNlIElPRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1heSByYWlzZSBPU0Vycm9yCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wZW5ob29rOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IHNlbGYuX29wZW5ob29rKHNlbGYuX2ZpbGVuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL2Zvcm1hdHRlci5weSBiL0xpYi9mb3JtYXR0ZXIucHkKaW5kZXggNjBlNjBmMS4uOTMzODI2MSAxMDA2NDQKLS0tIGEvTGliL2Zvcm1hdHRlci5weQorKysgYi9MaWIvZm9ybWF0dGVyLnB5CkBAIC0xOSw2ICsxOSw5IEBACiAiIiIKIAogaW1wb3J0IHN5cworaW1wb3J0IHdhcm5pbmdzCit3YXJuaW5ncy53YXJuKCd0aGUgZm9ybWF0dGVyIG1vZHVsZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJworICAgICAgICAgICAgICAnUHl0aG9uIDMuNicsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCiAKIAogQVNfSVMgPSBOb25lCkBAIC00MzMsMTEgKzQzNiwxNSBAQAogICAgICAgICBmcCA9IG9wZW4oc3lzLmFyZ3ZbMV0pCiAgICAgZWxzZToKICAgICAgICAgZnAgPSBzeXMuc3RkaW4KLSAgICBmb3IgbGluZSBpbiBmcDoKLSAgICAgICAgaWYgbGluZSA9PSAnXG4nOgotICAgICAgICAgICAgZi5lbmRfcGFyYWdyYXBoKDEpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBmLmFkZF9mbG93aW5nX2RhdGEobGluZSkKKyAgICB0cnk6CisgICAgICAgIGZvciBsaW5lIGluIGZwOgorICAgICAgICAgICAgaWYgbGluZSA9PSAnXG4nOgorICAgICAgICAgICAgICAgIGYuZW5kX3BhcmFncmFwaCgxKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmLmFkZF9mbG93aW5nX2RhdGEobGluZSkKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBmcCBpcyBub3Qgc3lzLnN0ZGluOgorICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgIGYuZW5kX3BhcmFncmFwaCgwKQogCiAKZGlmZiAtLWdpdCBhL0xpYi9mcmFjdGlvbnMucHkgYi9MaWIvZnJhY3Rpb25zLnB5CmluZGV4IDhiZTUyZDIuLjc5ZTgzZmYgMTAwNjQ0Ci0tLSBhL0xpYi9mcmFjdGlvbnMucHkKKysrIGIvTGliL2ZyYWN0aW9ucy5weQpAQCAtMTgyLDggKzE4MiwxMCBAQAogICAgICAgICBlbGlmIG5vdCBpc2luc3RhbmNlKGYsIGZsb2F0KToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiJXMuZnJvbV9mbG9hdCgpIG9ubHkgdGFrZXMgZmxvYXRzLCBub3QgJXIgKCVzKSIgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbHMuX19uYW1lX18sIGYsIHR5cGUoZikuX19uYW1lX18pKQotICAgICAgICBpZiBtYXRoLmlzbmFuKGYpIG9yIG1hdGguaXNpbmYoZik6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKKyAgICAgICAgaWYgbWF0aC5pc25hbihmKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKKyAgICAgICAgaWYgbWF0aC5pc2luZihmKToKKyAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVyIHRvICVzLiIgJSAoZiwgY2xzLl9fbmFtZV9fKSkKICAgICAgICAgcmV0dXJuIGNscygqZi5hc19pbnRlZ2VyX3JhdGlvKCkpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTE5Niw5ICsxOTgsMTEgQEAKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKICAgICAgICAgICAgICAgICAiJXMuZnJvbV9kZWNpbWFsKCkgb25seSB0YWtlcyBEZWNpbWFscywgbm90ICVyICglcykiICUKICAgICAgICAgICAgICAgICAoY2xzLl9fbmFtZV9fLCBkZWMsIHR5cGUoZGVjKS5fX25hbWVfXykpCi0gICAgICAgIGlmIG5vdCBkZWMuaXNfZmluaXRlKCk6Ci0gICAgICAgICAgICAjIENhdGNoZXMgaW5maW5pdGllcyBhbmQgbmFucy4KLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgJXMgdG8gJXMuIiAlIChkZWMsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIGRlYy5pc19pbmZpbml0ZSgpOgorICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IGNvbnZlcnQgJXMgdG8gJXMuIiAlIChkZWMsIGNscy5fX25hbWVfXykpCisgICAgICAgIGlmIGRlYy5pc19uYW4oKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkNhbm5vdCBjb252ZXJ0ICVzIHRvICVzLiIgJSAoZGVjLCBjbHMuX19uYW1lX18pKQogICAgICAgICBzaWduLCBkaWdpdHMsIGV4cCA9IGRlYy5hc190dXBsZSgpCiAgICAgICAgIGRpZ2l0cyA9IGludCgnJy5qb2luKG1hcChzdHIsIGRpZ2l0cykpKQogICAgICAgICBpZiBzaWduOgpkaWZmIC0tZ2l0IGEvTGliL2Z0cGxpYi5weSBiL0xpYi9mdHBsaWIucHkKaW5kZXggNWU3NWU2ZC4uMWQzYmQ5ZSAxMDA2NDQKLS0tIGEvTGliL2Z0cGxpYi5weQorKysgYi9MaWIvZnRwbGliLnB5CkBAIC0zOSw5ICszOSwxMCBAQAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc29ja2V0CitpbXBvcnQgd2FybmluZ3MKIGZyb20gc29ja2V0IGltcG9ydCBfR0xPQkFMX0RFRkFVTFRfVElNRU9VVAogCi1fX2FsbF9fID0gWyJGVFAiLCJOZXRyYyJdCitfX2FsbF9fID0gWyJGVFAiLCAiTmV0cmMiXQogCiAjIE1hZ2ljIG51bWJlciBmcm9tIDxzb2NrZXQuaD4KIE1TR19PT0IgPSAweDEgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFByb2Nlc3MgZGF0YSBvdXQgb2YgYmFuZApAQCAtNjMsNyArNjQsNyBAQAogCiAjIEFsbCBleGNlcHRpb25zIChob3BlZnVsbHkpIHRoYXQgbWF5IGJlIHJhaXNlZCBoZXJlIGFuZCB0aGF0IGFyZW4ndAogIyAoYWx3YXlzKSBwcm9ncmFtbWluZyBlcnJvcnMgb24gb3VyIHNpZGUKLWFsbF9lcnJvcnMgPSAoRXJyb3IsIElPRXJyb3IsIEVPRkVycm9yKQorYWxsX2Vycm9ycyA9IChFcnJvciwgT1NFcnJvciwgRU9GRXJyb3IpCiAKIAogIyBMaW5lIHRlcm1pbmF0b3JzICh3ZSBhbHdheXMgb3V0cHV0IENSTEYsIGJ1dCBhY2NlcHQgYW55IG9mIENSTEYsIENSLCBMRikKQEAgLTEyNiw3ICsxMjcsNyBAQAogICAgICAgICBpZiBzZWxmLnNvY2sgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuc29jayBpcyBub3QgTm9uZToKQEAgLTEzNiw2ICsxMzcsNyBAQAogICAgICAgICAnJydDb25uZWN0IHRvIGhvc3QuICBBcmd1bWVudHMgYXJlOgogICAgICAgICAgLSBob3N0OiBob3N0bmFtZSB0byBjb25uZWN0IHRvIChzdHJpbmcsIGRlZmF1bHQgcHJldmlvdXMgaG9zdCkKICAgICAgICAgIC0gcG9ydDogcG9ydCB0byBjb25uZWN0IHRvIChpbnRlZ2VyLCBkZWZhdWx0IHByZXZpb3VzIHBvcnQpCisgICAgICAgICAtIHRpbWVvdXQ6IHRoZSB0aW1lb3V0IHRvIHNldCBhZ2FpbnN0IHRoZSBmdHAgc29ja2V0KHMpCiAgICAgICAgICAtIHNvdXJjZV9hZGRyZXNzOiBhIDItdHVwbGUgKGhvc3QsIHBvcnQpIGZvciB0aGUgc29ja2V0IHRvIGJpbmQKICAgICAgICAgICAgdG8gYXMgaXRzIHNvdXJjZSBhZGRyZXNzIGJlZm9yZSBjb25uZWN0aW5nLgogICAgICAgICAnJycKQEAgLTE4Niw3ICsxODgsOCBAQAogICAgICMgSW50ZXJuYWw6IHNlbmQgb25lIGxpbmUgdG8gdGhlIHNlcnZlciwgYXBwZW5kaW5nIENSTEYKICAgICBkZWYgcHV0bGluZShzZWxmLCBsaW5lKToKICAgICAgICAgbGluZSA9IGxpbmUgKyBDUkxGCi0gICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMTogcHJpbnQoJypwdXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKKyAgICAgICAgaWYgc2VsZi5kZWJ1Z2dpbmcgPiAxOgorICAgICAgICAgICAgcHJpbnQoJypwdXQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwobGluZS5lbmNvZGUoc2VsZi5lbmNvZGluZykpCiAKICAgICAjIEludGVybmFsOiBzZW5kIG9uZSBjb21tYW5kIHRvIHRoZSBzZXJ2ZXIgKHRocm91Z2ggcHV0bGluZSgpKQpAQCAtMjAyLDkgKzIwNSwxMiBAQAogICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQogICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6CiAgICAgICAgICAgICBwcmludCgnKmdldConLCBzZWxmLnNhbml0aXplKGxpbmUpKQotICAgICAgICBpZiBub3QgbGluZTogcmFpc2UgRU9GRXJyb3IKLSAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6IGxpbmUgPSBsaW5lWzotMl0KLSAgICAgICAgZWxpZiBsaW5lWy0xOl0gaW4gQ1JMRjogbGluZSA9IGxpbmVbOi0xXQorICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQorICAgICAgICBlbGlmIGxpbmVbLTE6XSBpbiBDUkxGOgorICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQogICAgICAgICByZXR1cm4gbGluZQogCiAgICAgIyBJbnRlcm5hbDogZ2V0IGEgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmVyLCB3aGljaCBtYXkgcG9zc2libHkKQEAgLTIyNyw3ICsyMzMsOCBAQAogICAgICMgUmFpc2UgdmFyaW91cyBlcnJvcnMgaWYgdGhlIHJlc3BvbnNlIGluZGljYXRlcyBhbiBlcnJvcgogICAgIGRlZiBnZXRyZXNwKHNlbGYpOgogICAgICAgICByZXNwID0gc2VsZi5nZXRtdWx0aWxpbmUoKQotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZzogcHJpbnQoJypyZXNwKicsIHNlbGYuc2FuaXRpemUocmVzcCkpCisgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nOgorICAgICAgICAgICAgcHJpbnQoJypyZXNwKicsIHNlbGYuc2FuaXRpemUocmVzcCkpCiAgICAgICAgIHNlbGYubGFzdHJlc3AgPSByZXNwWzozXQogICAgICAgICBjID0gcmVzcFs6MV0KICAgICAgICAgaWYgYyBpbiB7JzEnLCAnMicsICczJ306CkBAIC0yNTEsNyArMjU4LDggQEAKICAgICAgICAgSVAgYW5kIFN5bmNoOyB0aGF0IGRvZXNuJ3Qgc2VlbSB0byB3b3JrIHdpdGggdGhlIHNlcnZlcnMgSSd2ZQogICAgICAgICB0cmllZC4gIEluc3RlYWQsIGp1c3Qgc2VuZCB0aGUgQUJPUiBjb21tYW5kIGFzIE9PQiBkYXRhLicnJwogICAgICAgICBsaW5lID0gYidBQk9SJyArIEJfQ1JMRgotICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6IHByaW50KCcqcHV0IHVyZ2VudConLCBzZWxmLnNhbml0aXplKGxpbmUpKQorICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDE6CisgICAgICAgICAgICBwcmludCgnKnB1dCB1cmdlbnQqJywgc2VsZi5zYW5pdGl6ZShsaW5lKSkKICAgICAgICAgc2VsZi5zb2NrLnNlbmRhbGwobGluZSwgTVNHX09PQikKICAgICAgICAgcmVzcCA9IHNlbGYuZ2V0bXVsdGlsaW5lKCkKICAgICAgICAgaWYgcmVzcFs6M10gbm90IGluIHsnNDI2JywgJzIyNScsICcyMjYnfToKQEAgLTI3OSw3ICsyODcsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi52b2lkY21kKGNtZCkKIAogICAgIGRlZiBzZW5kZXBydChzZWxmLCBob3N0LCBwb3J0KToKLSAgICAgICAgJycnU2VuZCBhIEVQUlQgY29tbWFuZCB3aXRoIHRoZSBjdXJyZW50IGhvc3QgYW5kIHRoZSBnaXZlbiBwb3J0IG51bWJlci4nJycKKyAgICAgICAgJycnU2VuZCBhbiBFUFJUIGNvbW1hbmQgd2l0aCB0aGUgY3VycmVudCBob3N0IGFuZCB0aGUgZ2l2ZW4gcG9ydCBudW1iZXIuJycnCiAgICAgICAgIGFmID0gMAogICAgICAgICBpZiBzZWxmLmFmID09IHNvY2tldC5BRl9JTkVUOgogICAgICAgICAgICAgYWYgPSAxCkBAIC0zMDAsNyArMzA4LDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChhZiwgc29ja3R5cGUsIHByb3RvKQogICAgICAgICAgICAgICAgIHNvY2suYmluZChzYSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgXzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIF86CiAgICAgICAgICAgICAgICAgZXJyID0gXwogICAgICAgICAgICAgICAgIGlmIHNvY2s6CiAgICAgICAgICAgICAgICAgICAgIHNvY2suY2xvc2UoKQpAQCAtMzExLDggKzMxOSw3IEBACiAgICAgICAgICAgICBpZiBlcnIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgZXJyCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihtc2cpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZ2V0YWRkcmluZm8gcmV0dXJucyBhbiBlbXB0eSBsaXN0IikKICAgICAgICAgc29jay5saXN0ZW4oMSkKICAgICAgICAgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXSAjIEdldCBwcm9wZXIgcG9ydAogICAgICAgICBob3N0ID0gc2VsZi5zb2NrLmdldHNvY2tuYW1lKClbMF0gIyBHZXQgcHJvcGVyIGhvc3QKQEAgLTM5Miw5ICszOTksMTIgQEAKIAogICAgIGRlZiBsb2dpbihzZWxmLCB1c2VyID0gJycsIHBhc3N3ZCA9ICcnLCBhY2N0ID0gJycpOgogICAgICAgICAnJydMb2dpbiwgZGVmYXVsdCBhbm9ueW1vdXMuJycnCi0gICAgICAgIGlmIG5vdCB1c2VyOiB1c2VyID0gJ2Fub255bW91cycKLSAgICAgICAgaWYgbm90IHBhc3N3ZDogcGFzc3dkID0gJycKLSAgICAgICAgaWYgbm90IGFjY3Q6IGFjY3QgPSAnJworICAgICAgICBpZiBub3QgdXNlcjoKKyAgICAgICAgICAgIHVzZXIgPSAnYW5vbnltb3VzJworICAgICAgICBpZiBub3QgcGFzc3dkOgorICAgICAgICAgICAgcGFzc3dkID0gJycKKyAgICAgICAgaWYgbm90IGFjY3Q6CisgICAgICAgICAgICBhY2N0ID0gJycKICAgICAgICAgaWYgdXNlciA9PSAnYW5vbnltb3VzJyBhbmQgcGFzc3dkIGluIHsnJywgJy0nfToKICAgICAgICAgICAgICMgSWYgdGhlcmUgaXMgbm8gYW5vbnltb3VzIGZ0cCBwYXNzd29yZCBzcGVjaWZpZWQKICAgICAgICAgICAgICMgdGhlbiB3ZSdsbCBqdXN0IHVzZSBhbm9ueW1vdXNACkBAIC00MDUsOCArNDE1LDEwIEBACiAgICAgICAgICAgICAjICAgaG9zdCBvciBjb3VudHJ5LgogICAgICAgICAgICAgcGFzc3dkID0gcGFzc3dkICsgJ2Fub255bW91c0AnCiAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1VTRVIgJyArIHVzZXIpCi0gICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOiByZXNwID0gc2VsZi5zZW5kY21kKCdQQVNTICcgKyBwYXNzd2QpCi0gICAgICAgIGlmIHJlc3BbMF0gPT0gJzMnOiByZXNwID0gc2VsZi5zZW5kY21kKCdBQ0NUICcgKyBhY2N0KQorICAgICAgICBpZiByZXNwWzBdID09ICczJzoKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1BBU1MgJyArIHBhc3N3ZCkKKyAgICAgICAgaWYgcmVzcFswXSA9PSAnMyc6CisgICAgICAgICAgICByZXNwID0gc2VsZi5zZW5kY21kKCdBQ0NUICcgKyBhY2N0KQogICAgICAgICBpZiByZXNwWzBdICE9ICcyJzoKICAgICAgICAgICAgIHJhaXNlIGVycm9yX3JlcGx5KHJlc3ApCiAgICAgICAgIHJldHVybiByZXNwCkBAIC00MzIsNiArNDQ0LDkgQEAKICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBjYWxsYmFjayhkYXRhKQorICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKKyAgICAgICAgICAgIGlmIF9TU0xTb2NrZXQgaXMgbm90IE5vbmUgYW5kIGlzaW5zdGFuY2UoY29ubiwgX1NTTFNvY2tldCk6CisgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQogICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCiAKICAgICBkZWYgcmV0cmxpbmVzKHNlbGYsIGNtZCwgY2FsbGJhY2sgPSBOb25lKToKQEAgLTQ0Niw3ICs0NjEsOCBAQAogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgIFRoZSByZXNwb25zZSBjb2RlLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgY2FsbGJhY2sgaXMgTm9uZTogY2FsbGJhY2sgPSBwcmludF9saW5lCisgICAgICAgIGlmIGNhbGxiYWNrIGlzIE5vbmU6CisgICAgICAgICAgICBjYWxsYmFjayA9IHByaW50X2xpbmUKICAgICAgICAgcmVzcCA9IHNlbGYuc2VuZGNtZCgnVFlQRSBBJykKICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCkgYXMgY29ubiwgXAogICAgICAgICAgICAgICAgICBjb25uLm1ha2VmaWxlKCdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykgYXMgZnA6CkBAIC00NTQsNyArNDcwLDggQEAKICAgICAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKICAgICAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBzZWxmLm1heGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6IHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdnaW5nID4gMjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJypyZXRyKicsIHJlcHIobGluZSkpCiAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgaWYgbGluZVstMjpdID09IENSTEY6CkBAIC00NjIsNiArNDc5LDkgQEAKICAgICAgICAgICAgICAgICBlbGlmIGxpbmVbLTE6XSA9PSAnXG4nOgogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCiAgICAgICAgICAgICAgICAgY2FsbGJhY2sobGluZSkKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIHN0b3JiaW5hcnkoc2VsZiwgY21kLCBmcCwgYmxvY2tzaXplPTgxOTIsIGNhbGxiYWNrPU5vbmUsIHJlc3Q9Tm9uZSk6CkBAIC00ODMsOSArNTAzLDE0IEBACiAgICAgICAgIHdpdGggc2VsZi50cmFuc2ZlcmNtZChjbWQsIHJlc3QpIGFzIGNvbm46CiAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgIGJ1ZiA9IGZwLnJlYWQoYmxvY2tzaXplKQotICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIHN0b3JsaW5lcyhzZWxmLCBjbWQsIGZwLCBjYWxsYmFjaz1Ob25lKToKQEAgLTUwNiwxMiArNTMxLDE3IEBACiAgICAgICAgICAgICAgICAgYnVmID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKICAgICAgICAgICAgICAgICBpZiBsZW4oYnVmKSA+IHNlbGYubWF4bGluZToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgIGlmIG5vdCBidWY6IGJyZWFrCisgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBpZiBidWZbLTI6XSAhPSBCX0NSTEY6CiAgICAgICAgICAgICAgICAgICAgIGlmIGJ1ZlstMV0gaW4gQl9DUkxGOiBidWYgPSBidWZbOi0xXQogICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgKyBCX0NSTEYKICAgICAgICAgICAgICAgICBjb25uLnNlbmRhbGwoYnVmKQotICAgICAgICAgICAgICAgIGlmIGNhbGxiYWNrOiBjYWxsYmFjayhidWYpCisgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGJ1ZikKKyAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCisgICAgICAgICAgICBpZiBfU1NMU29ja2V0IGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKGNvbm4sIF9TU0xTb2NrZXQpOgorICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQogCiAgICAgZGVmIGFjY3Qoc2VsZiwgcGFzc3dvcmQpOgpAQCAtNjM3LDE3ICs2NjcsMjQgQEAKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgJycnQ2xvc2UgdGhlIGNvbm5lY3Rpb24gd2l0aG91dCBhc3N1bWluZyBhbnl0aGluZyBhYm91dCBpdC4nJycKLSAgICAgICAgaWYgc2VsZi5maWxlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlID0gc2VsZi5maWxlCisgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCisgICAgICAgICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29jayA9IHNlbGYuc29jaworICAgICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKIAogdHJ5OgogICAgIGltcG9ydCBzc2wKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCisgICAgX1NTTFNvY2tldCA9IE5vbmUKIGVsc2U6CisgICAgX1NTTFNvY2tldCA9IHNzbC5TU0xTb2NrZXQKKwogICAgIGNsYXNzIEZUUF9UTFMoRlRQKToKICAgICAgICAgJycnQSBGVFAgc3ViY2xhc3Mgd2hpY2ggYWRkcyBUTFMgc3VwcG9ydCB0byBGVFAgYXMgZGVzY3JpYmVkCiAgICAgICAgIGluIFJGQy00MjE3LgpAQCAtNjgxLDcgKzcxOCw3IEBACiAgICAgICAgICcyMjEgR29vZGJ5ZS4nCiAgICAgICAgID4+PgogICAgICAgICAnJycKLSAgICAgICAgc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfVExTdjEKKyAgICAgICAgc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfU1NMdjIzCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9JycsIHVzZXI9JycsIHBhc3N3ZD0nJywgYWNjdD0nJywga2V5ZmlsZT1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Tm9uZSwgY29udGV4dD1Ob25lLApAQCAtNjk0LDYgKzczMSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2x1c2l2ZSIpCiAgICAgICAgICAgICBzZWxmLmtleWZpbGUgPSBrZXlmaWxlCiAgICAgICAgICAgICBzZWxmLmNlcnRmaWxlID0gY2VydGZpbGUKKyAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoc2VsZi5zc2xfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGU9a2V5ZmlsZSkKICAgICAgICAgICAgIHNlbGYuY29udGV4dCA9IGNvbnRleHQKICAgICAgICAgICAgIHNlbGYuX3Byb3RfcCA9IEZhbHNlCiAgICAgICAgICAgICBGVFAuX19pbml0X18oc2VsZiwgaG9zdCwgdXNlciwgcGFzc3dkLCBhY2N0LCB0aW1lb3V0LCBzb3VyY2VfYWRkcmVzcykKQEAgLTcwNywxNiArNzQ4LDEyIEBACiAgICAgICAgICAgICAnJydTZXQgdXAgc2VjdXJlIGNvbnRyb2wgY29ubmVjdGlvbiBieSB1c2luZyBUTFMvU1NMLicnJwogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnNvY2ssIHNzbC5TU0xTb2NrZXQpOgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkFscmVhZHkgdXNpbmcgVExTIikKLSAgICAgICAgICAgIGlmIHNlbGYuc3NsX3ZlcnNpb24gPT0gc3NsLlBST1RPQ09MX1RMU3YxOgorICAgICAgICAgICAgaWYgc2VsZi5zc2xfdmVyc2lvbiA+PSBzc2wuUFJPVE9DT0xfU1NMdjIzOgogICAgICAgICAgICAgICAgIHJlc3AgPSBzZWxmLnZvaWRjbWQoJ0FVVEggVExTJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmVzcCA9IHNlbGYudm9pZGNtZCgnQVVUSCBTU0wnKQotICAgICAgICAgICAgaWYgc2VsZi5jb250ZXh0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2ssIHNlbGYua2V5ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX3ZlcnNpb249c2VsZi5zc2xfdmVyc2lvbikKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlbGYuaG9zdCkKICAgICAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZShtb2RlPSdyJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykKICAgICAgICAgICAgIHJldHVybiByZXNwCiAKQEAgLTc1NSw4MCArNzkyLDEwIEBACiAgICAgICAgIGRlZiBudHJhbnNmZXJjbWQoc2VsZiwgY21kLCByZXN0PU5vbmUpOgogICAgICAgICAgICAgY29ubiwgc2l6ZSA9IEZUUC5udHJhbnNmZXJjbWQoc2VsZiwgY21kLCByZXN0KQogICAgICAgICAgICAgaWYgc2VsZi5fcHJvdF9wOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udGV4dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChjb25uKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4gPSBzc2wud3JhcF9zb2NrZXQoY29ubiwgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF92ZXJzaW9uPXNlbGYuc3NsX3ZlcnNpb24pCisgICAgICAgICAgICAgICAgY29ubiA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChjb25uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlbGYuaG9zdCkKICAgICAgICAgICAgIHJldHVybiBjb25uLCBzaXplCiAKLSAgICAgICAgZGVmIHJldHJiaW5hcnkoc2VsZiwgY21kLCBjYWxsYmFjaywgYmxvY2tzaXplPTgxOTIsIHJlc3Q9Tm9uZSk6Ci0gICAgICAgICAgICBzZWxmLnZvaWRjbWQoJ1RZUEUgSScpCi0gICAgICAgICAgICB3aXRoIHNlbGYudHJhbnNmZXJjbWQoY21kLCByZXN0KSBhcyBjb25uOgotICAgICAgICAgICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBjb25uLnJlY3YoYmxvY2tzaXplKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKGRhdGEpCi0gICAgICAgICAgICAgICAgIyBzaHV0ZG93biBzc2wgbGF5ZXIKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNvbm4sIHNzbC5TU0xTb2NrZXQpOgotICAgICAgICAgICAgICAgICAgICBjb25uLnVud3JhcCgpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi52b2lkcmVzcCgpCi0KLSAgICAgICAgZGVmIHJldHJsaW5lcyhzZWxmLCBjbWQsIGNhbGxiYWNrID0gTm9uZSk6Ci0gICAgICAgICAgICBpZiBjYWxsYmFjayBpcyBOb25lOiBjYWxsYmFjayA9IHByaW50X2xpbmUKLSAgICAgICAgICAgIHJlc3AgPSBzZWxmLnNlbmRjbWQoJ1RZUEUgQScpCi0gICAgICAgICAgICBjb25uID0gc2VsZi50cmFuc2ZlcmNtZChjbWQpCi0gICAgICAgICAgICBmcCA9IGNvbm4ubWFrZWZpbGUoJ3InLCBlbmNvZGluZz1zZWxmLmVuY29kaW5nKQotICAgICAgICAgICAgd2l0aCBmcCwgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBsaW5lID0gZnAucmVhZGxpbmUoc2VsZi5tYXhsaW5lICsgMSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gc2VsZi5tYXhsaW5lOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRXJyb3IoImdvdCBtb3JlIHRoYW4gJWQgYnl0ZXMiICUgc2VsZi5tYXhsaW5lKQotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnZ2luZyA+IDI6IHByaW50KCcqcmV0cionLCByZXByKGxpbmUpKQotICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0yXQotICAgICAgICAgICAgICAgICAgICBlbGlmIGxpbmVbLTE6XSA9PSAnXG4nOgotICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhsaW5lKQotICAgICAgICAgICAgICAgICMgc2h1dGRvd24gc3NsIGxheWVyCi0gICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25uLCBzc2wuU1NMU29ja2V0KToKLSAgICAgICAgICAgICAgICAgICAgY29ubi51bndyYXAoKQotICAgICAgICAgICAgcmV0dXJuIHNlbGYudm9pZHJlc3AoKQotCi0gICAgICAgIGRlZiBzdG9yYmluYXJ5KHNlbGYsIGNtZCwgZnAsIGJsb2Nrc2l6ZT04MTkyLCBjYWxsYmFjaz1Ob25lLCByZXN0PU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEknKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCwgcmVzdCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkKGJsb2Nrc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQotICAgICAgICBkZWYgc3RvcmxpbmVzKHNlbGYsIGNtZCwgZnAsIGNhbGxiYWNrPU5vbmUpOgotICAgICAgICAgICAgc2VsZi52b2lkY21kKCdUWVBFIEEnKQotICAgICAgICAgICAgd2l0aCBzZWxmLnRyYW5zZmVyY21kKGNtZCkgYXMgY29ubjoKLSAgICAgICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgICAgICBidWYgPSBmcC5yZWFkbGluZShzZWxmLm1heGxpbmUgKyAxKQotICAgICAgICAgICAgICAgICAgICBpZiBsZW4oYnVmKSA+IHNlbGYubWF4bGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVycm9yKCJnb3QgbW9yZSB0aGFuICVkIGJ5dGVzIiAlIHNlbGYubWF4bGluZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGJ1ZjogYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0yOl0gIT0gQl9DUkxGOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnVmWy0xXSBpbiBCX0NSTEY6IGJ1ZiA9IGJ1Zls6LTFdCi0gICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYgKyBCX0NSTEYKLSAgICAgICAgICAgICAgICAgICAgY29ubi5zZW5kYWxsKGJ1ZikKLSAgICAgICAgICAgICAgICAgICAgaWYgY2FsbGJhY2s6IGNhbGxiYWNrKGJ1ZikKLSAgICAgICAgICAgICAgICAjIHNodXRkb3duIHNzbCBsYXllcgotICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY29ubiwgc3NsLlNTTFNvY2tldCk6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4udW53cmFwKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLnZvaWRyZXNwKCkKLQogICAgICAgICBkZWYgYWJvcnQoc2VsZik6CiAgICAgICAgICAgICAjIG92ZXJyaWRkZW4gYXMgd2UgY2FuJ3QgcGFzcyBNU0dfT09CIGZsYWcgdG8gc2VuZGFsbCgpCiAgICAgICAgICAgICBsaW5lID0gYidBQk9SJyArIEJfQ1JMRgpAQCAtODM5LDcgKzgwNiw3IEBACiAgICAgICAgICAgICByZXR1cm4gcmVzcAogCiAgICAgX19hbGxfXy5hcHBlbmQoJ0ZUUF9UTFMnKQotICAgIGFsbF9lcnJvcnMgPSAoRXJyb3IsIElPRXJyb3IsIEVPRkVycm9yLCBzc2wuU1NMRXJyb3IpCisgICAgYWxsX2Vycm9ycyA9IChFcnJvciwgT1NFcnJvciwgRU9GRXJyb3IsIHNzbC5TU0xFcnJvcikKIAogCiBfMTUwX3JlID0gTm9uZQpAQCAtODg1LDcgKzg1Miw3IEBACiAKIAogZGVmIHBhcnNlMjI5KHJlc3AsIHBlZXIpOgotICAgICcnJ1BhcnNlIHRoZSAnMjI5JyByZXNwb25zZSBmb3IgYSBFUFNWIHJlcXVlc3QuCisgICAgJycnUGFyc2UgdGhlICcyMjknIHJlc3BvbnNlIGZvciBhbiBFUFNWIHJlcXVlc3QuCiAgICAgUmFpc2VzIGVycm9yX3Byb3RvIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gJyh8fHxwb3J0fCknCiAgICAgUmV0dXJuICgnaG9zdC5hZGRyLmFzLm51bWJlcnMnLCBwb3J0IykgdHVwbGUuJycnCiAKQEAgLTkzNiw3ICs5MDMsOCBAQAogCiBkZWYgZnRwY3Aoc291cmNlLCBzb3VyY2VuYW1lLCB0YXJnZXQsIHRhcmdldG5hbWUgPSAnJywgdHlwZSA9ICdJJyk6CiAgICAgJycnQ29weSBmaWxlIGZyb20gb25lIEZUUC1pbnN0YW5jZSB0byBhbm90aGVyLicnJwotICAgIGlmIG5vdCB0YXJnZXRuYW1lOiB0YXJnZXRuYW1lID0gc291cmNlbmFtZQorICAgIGlmIG5vdCB0YXJnZXRuYW1lOgorICAgICAgICB0YXJnZXRuYW1lID0gc291cmNlbmFtZQogICAgIHR5cGUgPSAnVFlQRSAnICsgdHlwZQogICAgIHNvdXJjZS52b2lkY21kKHR5cGUpCiAgICAgdGFyZ2V0LnZvaWRjbWQodHlwZSkKQEAgLTk0Niw5ICs5MTQsMTEgQEAKICAgICAjIHRyYW5zZmVyIHJlcXVlc3QuCiAgICAgIyBTbzogU1RPUiBiZWZvcmUgUkVUUiwgYmVjYXVzZSBoZXJlIHRoZSB0YXJnZXQgaXMgYSAidXNlciIuCiAgICAgdHJlcGx5ID0gdGFyZ2V0LnNlbmRjbWQoJ1NUT1IgJyArIHRhcmdldG5hbWUpCi0gICAgaWYgdHJlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306IHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKKyAgICBpZiB0cmVwbHlbOjNdIG5vdCBpbiB7JzEyNScsICcxNTAnfToKKyAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8gICMgUkZDIDk1OQogICAgIHNyZXBseSA9IHNvdXJjZS5zZW5kY21kKCdSRVRSICcgKyBzb3VyY2VuYW1lKQotICAgIGlmIHNyZXBseVs6M10gbm90IGluIHsnMTI1JywgJzE1MCd9OiByYWlzZSBlcnJvcl9wcm90byAgIyBSRkMgOTU5CisgICAgaWYgc3JlcGx5WzozXSBub3QgaW4geycxMjUnLCAnMTUwJ306CisgICAgICAgIHJhaXNlIGVycm9yX3Byb3RvICAjIFJGQyA5NTkKICAgICBzb3VyY2Uudm9pZHJlc3AoKQogICAgIHRhcmdldC52b2lkcmVzcCgpCiAKQEAgLTk2NiwxOSArOTM2LDIyIEBACiAgICAgX19kZWZhY2N0ID0gTm9uZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lPU5vbmUpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgbmV0cmMgbW9kdWxlIGluc3RlYWQiLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgaWYgZmlsZW5hbWUgaXMgTm9uZToKICAgICAgICAgICAgIGlmICJIT01FIiBpbiBvcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKG9zLmVudmlyb25bIkhPTUUiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLm5ldHJjIikKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigic3BlY2lmeSBmaWxlIHRvIGxvYWQgb3Igc2V0ICRIT01FIikKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJzcGVjaWZ5IGZpbGUgdG8gbG9hZCBvciBzZXQgJEhPTUUiKQogICAgICAgICBzZWxmLl9faG9zdHMgPSB7fQogICAgICAgICBzZWxmLl9fbWFjcm9zID0ge30KICAgICAgICAgZnAgPSBvcGVuKGZpbGVuYW1lLCAiciIpCiAgICAgICAgIGluX21hY3JvID0gMAogICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgbGluZSA9IGZwLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIGlmIG5vdCBsaW5lOiBicmVhaworICAgICAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGlmIGluX21hY3JvIGFuZCBsaW5lLnN0cmlwKCk6CiAgICAgICAgICAgICAgICAgbWFjcm9fbGluZXMuYXBwZW5kKGxpbmUpCiAgICAgICAgICAgICAgICAgY29udGludWUKQEAgLTEwODcsNyArMTA2MCw3IEBACiAgICAgdXNlcmlkID0gcGFzc3dkID0gYWNjdCA9ICcnCiAgICAgdHJ5OgogICAgICAgICBuZXRyYyA9IE5ldHJjKHJjZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgaWYgcmNmaWxlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiQ291bGQgbm90IG9wZW4gYWNjb3VudCBmaWxlIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIC0tIHVzaW5nIGFub255bW91cyBsb2dpbi4iKQpkaWZmIC0tZ2l0IGEvTGliL2Z1bmN0b29scy5weSBiL0xpYi9mdW5jdG9vbHMucHkKaW5kZXggMDUzZTQ0ZS4uMmMyOTlkNyAxMDA2NDQKLS0tIGEvTGliL2Z1bmN0b29scy5weQorKysgYi9MaWIvZnVuY3Rvb2xzLnB5CkBAIC0zLDE2ICszLDI0IEBACiAjIFB5dGhvbiBtb2R1bGUgd3JhcHBlciBmb3IgX2Z1bmN0b29scyBDIG1vZHVsZQogIyB0byBhbGxvdyB1dGlsaXRpZXMgd3JpdHRlbiBpbiBQeXRob24gdG8gYmUgYWRkZWQKICMgdG8gdGhlIGZ1bmN0b29scyBtb2R1bGUuCi0jIFdyaXR0ZW4gYnkgTmljayBDb2dobGFuIDxuY29naGxhbiBhdCBnbWFpbC5jb20+Ci0jIGFuZCBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+Ci0jICAgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjIFdyaXR0ZW4gYnkgTmljayBDb2dobGFuIDxuY29naGxhbiBhdCBnbWFpbC5jb20+LAorIyBSYXltb25kIEhldHRpbmdlciA8cHl0aG9uIGF0IHJjbi5jb20+LAorIyBhbmQgxYF1a2FzeiBMYW5nYSA8bHVrYXN6IGF0IGxhbmdhLnBsPi4KKyMgICBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi4KICMgU2VlIEMgc291cmNlIGNvZGUgZm9yIF9mdW5jdG9vbHMgY3JlZGl0cy9jb3B5cmlnaHQKIAogX19hbGxfXyA9IFsndXBkYXRlX3dyYXBwZXInLCAnd3JhcHMnLCAnV1JBUFBFUl9BU1NJR05NRU5UUycsICdXUkFQUEVSX1VQREFURVMnLAotICAgICAgICAgICAndG90YWxfb3JkZXJpbmcnLCAnY21wX3RvX2tleScsICdscnVfY2FjaGUnLCAncmVkdWNlJywgJ3BhcnRpYWwnXQorICAgICAgICAgICAndG90YWxfb3JkZXJpbmcnLCAnY21wX3RvX2tleScsICdscnVfY2FjaGUnLCAncmVkdWNlJywgJ3BhcnRpYWwnLAorICAgICAgICAgICAncGFydGlhbG1ldGhvZCcsICdzaW5nbGVkaXNwYXRjaCddCiAKLWZyb20gX2Z1bmN0b29scyBpbXBvcnQgcGFydGlhbCwgcmVkdWNlCit0cnk6CisgICAgZnJvbSBfZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBwYXNzCitmcm9tIGFiYyBpbXBvcnQgZ2V0X2NhY2hlX3Rva2VuCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCitmcm9tIHR5cGVzIGltcG9ydCBNYXBwaW5nUHJveHlUeXBlCitmcm9tIHdlYWtyZWYgaW1wb3J0IFdlYWtLZXlEaWN0aW9uYXJ5CiB0cnk6CiAgICAgZnJvbSBfdGhyZWFkIGltcG9ydCBSTG9jawogZXhjZXB0OgpAQCAtNDcsNyArNTUsNiBAQAogICAgICAgIGFyZSB1cGRhdGVkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIGZyb20gdGhlIHdyYXBwZWQKICAgICAgICBmdW5jdGlvbiAoZGVmYXVsdHMgdG8gZnVuY3Rvb2xzLldSQVBQRVJfVVBEQVRFUykKICAgICAiIiIKLSAgICB3cmFwcGVyLl9fd3JhcHBlZF9fID0gd3JhcHBlZAogICAgIGZvciBhdHRyIGluIGFzc2lnbmVkOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSA9IGdldGF0dHIod3JhcHBlZCwgYXR0cikKQEAgLTU3LDYgKzY0LDkgQEAKICAgICAgICAgICAgIHNldGF0dHIod3JhcHBlciwgYXR0ciwgdmFsdWUpCiAgICAgZm9yIGF0dHIgaW4gdXBkYXRlZDoKICAgICAgICAgZ2V0YXR0cih3cmFwcGVyLCBhdHRyKS51cGRhdGUoZ2V0YXR0cih3cmFwcGVkLCBhdHRyLCB7fSkpCisgICAgIyBJc3N1ZSAjMTc0ODI6IHNldCBfX3dyYXBwZWRfXyBsYXN0IHNvIHdlIGRvbid0IGluYWR2ZXJ0ZW50bHkgY29weSBpdAorICAgICMgZnJvbSB0aGUgd3JhcHBlZCBmdW5jdGlvbiB3aGVuIHVwZGF0aW5nIF9fZGljdF9fCisgICAgd3JhcHBlci5fX3dyYXBwZWRfXyA9IHdyYXBwZWQKICAgICAjIFJldHVybiB0aGUgd3JhcHBlciBzbyB0aGlzIGNhbiBiZSB1c2VkIGFzIGEgZGVjb3JhdG9yIHZpYSBwYXJ0aWFsKCkKICAgICByZXR1cm4gd3JhcHBlcgogCkBAIC03OSwyMSArODksMTA2IEBACiAjIyMgdG90YWxfb3JkZXJpbmcgY2xhc3MgZGVjb3JhdG9yCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCisjIFRoZSB0b3RhbCBvcmRlcmluZyBmdW5jdGlvbnMgYWxsIGludm9rZSB0aGUgcm9vdCBtYWdpYyBtZXRob2QgZGlyZWN0bHkKKyMgcmF0aGVyIHRoYW4gdXNpbmcgdGhlIGNvcnJlc3BvbmRpbmcgb3BlcmF0b3IuICBUaGlzIGF2b2lkcyBwb3NzaWJsZQorIyBpbmZpbml0ZSByZWN1cnNpb24gdGhhdCBjb3VsZCBvY2N1ciB3aGVuIHRoZSBvcGVyYXRvciBkaXNwYXRjaCBsb2dpYworIyBkZXRlY3RzIGEgTm90SW1wbGVtZW50ZWQgcmVzdWx0IGFuZCB0aGVuIGNhbGxzIGEgcmVmbGVjdGVkIG1ldGhvZC4KKworZGVmIF9ndF9mcm9tX2x0KHNlbGYsIG90aGVyKToKKyAgICAnUmV0dXJuIGEgPiBiLiAgQ29tcHV0ZWQgYnkgQHRvdGFsX29yZGVyaW5nIGZyb20gKG5vdCBhIDwgYikgYW5kIChhICE9IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fbHRfXyhvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCisKK2RlZiBfbGVfZnJvbV9sdChzZWxmLCBvdGhlcik6CisgICAgJ1JldHVybiBhIDw9IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA8IGIpIG9yIChhID09IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fbHRfXyhvdGhlcikKKyAgICByZXR1cm4gb3BfcmVzdWx0IG9yIHNlbGYgPT0gb3RoZXIKKworZGVmIF9nZV9mcm9tX2x0KHNlbGYsIG90aGVyKToKKyAgICAnUmV0dXJuIGEgPj0gYi4gIENvbXB1dGVkIGJ5IEB0b3RhbF9vcmRlcmluZyBmcm9tIChub3QgYSA8IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fbHRfXyhvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0CisKK2RlZiBfZ2VfZnJvbV9sZShzZWxmLCBvdGhlcik6CisgICAgJ1JldHVybiBhID49IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPD0gYikgb3IgKGEgPT0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19sZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQgb3Igc2VsZiA9PSBvdGhlcgorCitkZWYgX2x0X2Zyb21fbGUoc2VsZiwgb3RoZXIpOgorICAgICdSZXR1cm4gYSA8IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA8PSBiKSBhbmQgKGEgIT0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19sZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG9wX3Jlc3VsdCBhbmQgc2VsZiAhPSBvdGhlcgorCitkZWYgX2d0X2Zyb21fbGUoc2VsZiwgb3RoZXIpOgorICAgICdSZXR1cm4gYSA+IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPD0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19sZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQKKworZGVmIF9sdF9mcm9tX2d0KHNlbGYsIG90aGVyKToKKyAgICAnUmV0dXJuIGEgPCBiLiAgQ29tcHV0ZWQgYnkgQHRvdGFsX29yZGVyaW5nIGZyb20gKG5vdCBhID4gYikgYW5kIChhICE9IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fZ3RfXyhvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0IGFuZCBzZWxmICE9IG90aGVyCisKK2RlZiBfZ2VfZnJvbV9ndChzZWxmLCBvdGhlcik6CisgICAgJ1JldHVybiBhID49IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA+IGIpIG9yIChhID09IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fZ3RfXyhvdGhlcikKKyAgICByZXR1cm4gb3BfcmVzdWx0IG9yIHNlbGYgPT0gb3RoZXIKKworZGVmIF9sZV9mcm9tX2d0KHNlbGYsIG90aGVyKToKKyAgICAnUmV0dXJuIGEgPD0gYi4gIENvbXB1dGVkIGJ5IEB0b3RhbF9vcmRlcmluZyBmcm9tIChub3QgYSA+IGIpLicKKyAgICBvcF9yZXN1bHQgPSBzZWxmLl9fZ3RfXyhvdGhlcikKKyAgICBpZiBvcF9yZXN1bHQgaXMgTm90SW1wbGVtZW50ZWQ6CisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIHJldHVybiBub3Qgb3BfcmVzdWx0CisKK2RlZiBfbGVfZnJvbV9nZShzZWxmLCBvdGhlcik6CisgICAgJ1JldHVybiBhIDw9IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPj0gYikgb3IgKGEgPT0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19nZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQgb3Igc2VsZiA9PSBvdGhlcgorCitkZWYgX2d0X2Zyb21fZ2Uoc2VsZiwgb3RoZXIpOgorICAgICdSZXR1cm4gYSA+IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAoYSA+PSBiKSBhbmQgKGEgIT0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19nZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG9wX3Jlc3VsdCBhbmQgc2VsZiAhPSBvdGhlcgorCitkZWYgX2x0X2Zyb21fZ2Uoc2VsZiwgb3RoZXIpOgorICAgICdSZXR1cm4gYSA8IGIuICBDb21wdXRlZCBieSBAdG90YWxfb3JkZXJpbmcgZnJvbSAobm90IGEgPj0gYikuJworICAgIG9wX3Jlc3VsdCA9IHNlbGYuX19nZV9fKG90aGVyKQorICAgIGlmIG9wX3Jlc3VsdCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgcmV0dXJuIG5vdCBvcF9yZXN1bHQKKwogZGVmIHRvdGFsX29yZGVyaW5nKGNscyk6CiAgICAgIiIiQ2xhc3MgZGVjb3JhdG9yIHRoYXQgZmlsbHMgaW4gbWlzc2luZyBvcmRlcmluZyBtZXRob2RzIiIiCiAgICAgY29udmVydCA9IHsKLSAgICAgICAgJ19fbHRfXyc6IFsoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19sZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmIDwgb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmIDwgb3RoZXIpXSwKLSAgICAgICAgJ19fbGVfXyc6IFsoJ19fZ2VfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IHNlbGYgPD0gb3RoZXIgYW5kIG5vdCBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IHNlbGYgPD0gb3RoZXIpXSwKLSAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogbm90IChzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlcikpLAotICAgICAgICAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBzZWxmID4gb3RoZXIgb3Igc2VsZiA9PSBvdGhlciksCi0gICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgc2VsZiwgb3RoZXI6IG5vdCBzZWxmID4gb3RoZXIpXSwKLSAgICAgICAgJ19fZ2VfXyc6IFsoJ19fbGVfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogKG5vdCBzZWxmID49IG90aGVyKSBvciBzZWxmID09IG90aGVyKSwKLSAgICAgICAgICAgICAgICAgICAoJ19fZ3RfXycsIGxhbWJkYSBzZWxmLCBvdGhlcjogc2VsZiA+PSBvdGhlciBhbmQgbm90IHNlbGYgPT0gb3RoZXIpLAotICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgbGFtYmRhIHNlbGYsIG90aGVyOiBub3Qgc2VsZiA+PSBvdGhlcildCisgICAgICAgICdfX2x0X18nOiBbKCdfX2d0X18nLCBfZ3RfZnJvbV9sdCksCisgICAgICAgICAgICAgICAgICAgKCdfX2xlX18nLCBfbGVfZnJvbV9sdCksCisgICAgICAgICAgICAgICAgICAgKCdfX2dlX18nLCBfZ2VfZnJvbV9sdCldLAorICAgICAgICAnX19sZV9fJzogWygnX19nZV9fJywgX2dlX2Zyb21fbGUpLAorICAgICAgICAgICAgICAgICAgICgnX19sdF9fJywgX2x0X2Zyb21fbGUpLAorICAgICAgICAgICAgICAgICAgICgnX19ndF9fJywgX2d0X2Zyb21fbGUpXSwKKyAgICAgICAgJ19fZ3RfXyc6IFsoJ19fbHRfXycsIF9sdF9mcm9tX2d0KSwKKyAgICAgICAgICAgICAgICAgICAoJ19fZ2VfXycsIF9nZV9mcm9tX2d0KSwKKyAgICAgICAgICAgICAgICAgICAoJ19fbGVfXycsIF9sZV9mcm9tX2d0KV0sCisgICAgICAgICdfX2dlX18nOiBbKCdfX2xlX18nLCBfbGVfZnJvbV9nZSksCisgICAgICAgICAgICAgICAgICAgKCdfX2d0X18nLCBfZ3RfZnJvbV9nZSksCisgICAgICAgICAgICAgICAgICAgKCdfX2x0X18nLCBfbHRfZnJvbV9nZSldCiAgICAgfQogICAgICMgRmluZCB1c2VyLWRlZmluZWQgY29tcGFyaXNvbnMgKG5vdCB0aG9zZSBpbmhlcml0ZWQgZnJvbSBvYmplY3QpLgogICAgIHJvb3RzID0gW29wIGZvciBvcCBpbiBjb252ZXJ0IGlmIGdldGF0dHIoY2xzLCBvcCwgTm9uZSkgaXMgbm90IGdldGF0dHIob2JqZWN0LCBvcCwgTm9uZSldCkBAIC0xMDMsNyArMTk4LDYgQEAKICAgICBmb3Igb3BuYW1lLCBvcGZ1bmMgaW4gY29udmVydFtyb290XToKICAgICAgICAgaWYgb3BuYW1lIG5vdCBpbiByb290czoKICAgICAgICAgICAgIG9wZnVuYy5fX25hbWVfXyA9IG9wbmFtZQotICAgICAgICAgICAgb3BmdW5jLl9fZG9jX18gPSBnZXRhdHRyKGludCwgb3BuYW1lKS5fX2RvY19fCiAgICAgICAgICAgICBzZXRhdHRyKGNscywgb3BuYW1lLCBvcGZ1bmMpCiAgICAgcmV0dXJuIGNscwogCkBAIC0xNDAsNiArMjM0LDEwNCBAQAogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMgcGFydGlhbCgpIGFyZ3VtZW50IGFwcGxpY2F0aW9uCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIFB1cmVseSBmdW5jdGlvbmFsLCBubyBkZXNjcmlwdG9yIGJlaGF2aW91cgorZGVmIHBhcnRpYWwoZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgorICAgICIiIk5ldyBmdW5jdGlvbiB3aXRoIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50cworICAgIGFuZCBrZXl3b3Jkcy4KKyAgICAiIiIKKyAgICBkZWYgbmV3ZnVuYygqZmFyZ3MsICoqZmtleXdvcmRzKToKKyAgICAgICAgbmV3a2V5d29yZHMgPSBrZXl3b3Jkcy5jb3B5KCkKKyAgICAgICAgbmV3a2V5d29yZHMudXBkYXRlKGZrZXl3b3JkcykKKyAgICAgICAgcmV0dXJuIGZ1bmMoKihhcmdzICsgZmFyZ3MpLCAqKm5ld2tleXdvcmRzKQorICAgIG5ld2Z1bmMuZnVuYyA9IGZ1bmMKKyAgICBuZXdmdW5jLmFyZ3MgPSBhcmdzCisgICAgbmV3ZnVuYy5rZXl3b3JkcyA9IGtleXdvcmRzCisgICAgcmV0dXJuIG5ld2Z1bmMKKwordHJ5OgorICAgIGZyb20gX2Z1bmN0b29scyBpbXBvcnQgcGFydGlhbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKworIyBEZXNjcmlwdG9yIHZlcnNpb24KK2NsYXNzIHBhcnRpYWxtZXRob2Qob2JqZWN0KToKKyAgICAiIiJNZXRob2QgZGVzY3JpcHRvciB3aXRoIHBhcnRpYWwgYXBwbGljYXRpb24gb2YgdGhlIGdpdmVuIGFyZ3VtZW50cworICAgIGFuZCBrZXl3b3Jkcy4KKworICAgIFN1cHBvcnRzIHdyYXBwaW5nIGV4aXN0aW5nIGRlc2NyaXB0b3JzIGFuZCBoYW5kbGVzIG5vbi1kZXNjcmlwdG9yCisgICAgY2FsbGFibGVzIGFzIGluc3RhbmNlIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgKmFyZ3MsICoqa2V5d29yZHMpOgorICAgICAgICBpZiBub3QgY2FsbGFibGUoZnVuYykgYW5kIG5vdCBoYXNhdHRyKGZ1bmMsICJfX2dldF9fIik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInshcn0gaXMgbm90IGNhbGxhYmxlIG9yIGEgZGVzY3JpcHRvciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoZnVuYykpCisKKyAgICAgICAgIyBmdW5jIGNvdWxkIGJlIGEgZGVzY3JpcHRvciBsaWtlIGNsYXNzbWV0aG9kIHdoaWNoIGlzbid0IGNhbGxhYmxlLAorICAgICAgICAjIHNvIHdlIGNhbid0IGluaGVyaXQgZnJvbSBwYXJ0aWFsIChpdCB2ZXJpZmllcyBmdW5jIGlzIGNhbGxhYmxlKQorICAgICAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHBhcnRpYWxtZXRob2QpOgorICAgICAgICAgICAgIyBmbGF0dGVuaW5nIGlzIG1hbmRhdG9yeSBpbiBvcmRlciB0byBwbGFjZSBjbHMvc2VsZiBiZWZvcmUgYWxsCisgICAgICAgICAgICAjIG90aGVyIGFyZ3VtZW50cworICAgICAgICAgICAgIyBpdCdzIGFsc28gbW9yZSBlZmZpY2llbnQgc2luY2Ugb25seSBvbmUgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQKKyAgICAgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMuZnVuYworICAgICAgICAgICAgc2VsZi5hcmdzID0gZnVuYy5hcmdzICsgYXJncworICAgICAgICAgICAgc2VsZi5rZXl3b3JkcyA9IGZ1bmMua2V5d29yZHMuY29weSgpCisgICAgICAgICAgICBzZWxmLmtleXdvcmRzLnVwZGF0ZShrZXl3b3JkcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKyAgICAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKyAgICAgICAgICAgIHNlbGYua2V5d29yZHMgPSBrZXl3b3JkcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBhcmdzID0gIiwgIi5qb2luKG1hcChyZXByLCBzZWxmLmFyZ3MpKQorICAgICAgICBrZXl3b3JkcyA9ICIsICIuam9pbigie309eyFyfSIuZm9ybWF0KGssIHYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBzZWxmLmtleXdvcmRzLml0ZW1zKCkpCisgICAgICAgIGZvcm1hdF9zdHJpbmcgPSAie21vZHVsZX0ue2Nsc30oe2Z1bmN9LCB7YXJnc30sIHtrZXl3b3Jkc30pIgorICAgICAgICByZXR1cm4gZm9ybWF0X3N0cmluZy5mb3JtYXQobW9kdWxlPXNlbGYuX19jbGFzc19fLl9fbW9kdWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHM9c2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jPXNlbGYuZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9YXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmRzPWtleXdvcmRzKQorCisgICAgZGVmIF9tYWtlX3VuYm91bmRfbWV0aG9kKHNlbGYpOgorICAgICAgICBkZWYgX21ldGhvZCgqYXJncywgKiprZXl3b3Jkcyk6CisgICAgICAgICAgICBjYWxsX2tleXdvcmRzID0gc2VsZi5rZXl3b3Jkcy5jb3B5KCkKKyAgICAgICAgICAgIGNhbGxfa2V5d29yZHMudXBkYXRlKGtleXdvcmRzKQorICAgICAgICAgICAgY2xzX29yX3NlbGYsICpyZXN0ID0gYXJncworICAgICAgICAgICAgY2FsbF9hcmdzID0gKGNsc19vcl9zZWxmLCkgKyBzZWxmLmFyZ3MgKyB0dXBsZShyZXN0KQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVuYygqY2FsbF9hcmdzLCAqKmNhbGxfa2V5d29yZHMpCisgICAgICAgIF9tZXRob2QuX19pc2Fic3RyYWN0bWV0aG9kX18gPSBzZWxmLl9faXNhYnN0cmFjdG1ldGhvZF9fCisgICAgICAgIF9tZXRob2QuX3BhcnRpYWxtZXRob2QgPSBzZWxmCisgICAgICAgIHJldHVybiBfbWV0aG9kCisKKyAgICBkZWYgX19nZXRfXyhzZWxmLCBvYmosIGNscyk6CisgICAgICAgIGdldCA9IGdldGF0dHIoc2VsZi5mdW5jLCAiX19nZXRfXyIsIE5vbmUpCisgICAgICAgIHJlc3VsdCA9IE5vbmUKKyAgICAgICAgaWYgZ2V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgbmV3X2Z1bmMgPSBnZXQob2JqLCBjbHMpCisgICAgICAgICAgICBpZiBuZXdfZnVuYyBpcyBub3Qgc2VsZi5mdW5jOgorICAgICAgICAgICAgICAgICMgQXNzdW1lIF9fZ2V0X18gcmV0dXJuaW5nIHNvbWV0aGluZyBuZXcgaW5kaWNhdGVzIHRoZQorICAgICAgICAgICAgICAgICMgY3JlYXRpb24gb2YgYW4gYXBwcm9wcmlhdGUgY2FsbGFibGUKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBwYXJ0aWFsKG5ld19mdW5jLCAqc2VsZi5hcmdzLCAqKnNlbGYua2V5d29yZHMpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQuX19zZWxmX18gPSBuZXdfZnVuYy5fX3NlbGZfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKKyAgICAgICAgICAgICMgSWYgdGhlIHVuZGVybHlpbmcgZGVzY3JpcHRvciBkaWRuJ3QgZG8gYW55dGhpbmcsIHRyZWF0IHRoaXMKKyAgICAgICAgICAgICMgbGlrZSBhbiBpbnN0YW5jZSBtZXRob2QKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX21ha2VfdW5ib3VuZF9tZXRob2QoKS5fX2dldF9fKG9iaiwgY2xzKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX19pc2Fic3RyYWN0bWV0aG9kX18oc2VsZik6CisgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYuZnVuYywgIl9faXNhYnN0cmFjdG1ldGhvZF9fIiwgRmFsc2UpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBMUlUgQ2FjaGUgZnVuY3Rpb24gZGVjb3JhdG9yCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0yMTQsMTMgKzQwNiwxOCBAQAogICAgICMgVGhlIGludGVybmFscyBvZiB0aGUgbHJ1X2NhY2hlIGFyZSBlbmNhcHN1bGF0ZWQgZm9yIHRocmVhZCBzYWZldHkgYW5kCiAgICAgIyB0byBhbGxvdyB0aGUgaW1wbGVtZW50YXRpb24gdG8gY2hhbmdlIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBDIHZlcnNpb24pLgogCisgICAgIyBFYXJseSBkZXRlY3Rpb24gb2YgYW4gZXJyb25lb3VzIGNhbGwgdG8gQGxydV9jYWNoZSB3aXRob3V0IGFueSBhcmd1bWVudHMKKyAgICAjIHJlc3VsdGluZyBpbiB0aGUgaW5uZXIgZnVuY3Rpb24gYmVpbmcgcGFzc2VkIHRvIG1heHNpemUgaW5zdGVhZCBvZiBhbgorICAgICMgaW50ZWdlciBvciBOb25lLgorICAgIGlmIG1heHNpemUgaXMgbm90IE5vbmUgYW5kIG5vdCBpc2luc3RhbmNlKG1heHNpemUsIGludCk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignRXhwZWN0ZWQgbWF4c2l6ZSB0byBiZSBhbiBpbnRlZ2VyIG9yIE5vbmUnKQorCiAgICAgIyBDb25zdGFudHMgc2hhcmVkIGJ5IGFsbCBscnUgY2FjaGUgaW5zdGFuY2VzOgogICAgIHNlbnRpbmVsID0gb2JqZWN0KCkgICAgICAgICAgIyB1bmlxdWUgb2JqZWN0IHVzZWQgdG8gc2lnbmFsIGNhY2hlIG1pc3NlcwogICAgIG1ha2Vfa2V5ID0gX21ha2Vfa2V5ICAgICAgICAgIyBidWlsZCBhIGtleSBmcm9tIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMKICAgICBQUkVWLCBORVhULCBLRVksIFJFU1VMVCA9IDAsIDEsIDIsIDMgICAjIG5hbWVzIGZvciB0aGUgbGluayBmaWVsZHMKIAogICAgIGRlZiBkZWNvcmF0aW5nX2Z1bmN0aW9uKHVzZXJfZnVuY3Rpb24pOgotCiAgICAgICAgIGNhY2hlID0ge30KICAgICAgICAgaGl0cyA9IG1pc3NlcyA9IDAKICAgICAgICAgZnVsbCA9IEZhbHNlCkBAIC0zMjksMyArNTI2LDIxMCBAQAogICAgICAgICByZXR1cm4gdXBkYXRlX3dyYXBwZXIod3JhcHBlciwgdXNlcl9mdW5jdGlvbikKIAogICAgIHJldHVybiBkZWNvcmF0aW5nX2Z1bmN0aW9uCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyBzaW5nbGVkaXNwYXRjaCgpIC0gc2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb24gZGVjb3JhdG9yCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgX2MzX21lcmdlKHNlcXVlbmNlcyk6CisgICAgIiIiTWVyZ2VzIE1ST3MgaW4gKnNlcXVlbmNlcyogdG8gYSBzaW5nbGUgTVJPIHVzaW5nIHRoZSBDMyBhbGdvcml0aG0uCisKKyAgICBBZGFwdGVkIGZyb20gaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLzIuMy9tcm8vLgorCisgICAgIiIiCisgICAgcmVzdWx0ID0gW10KKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBzZXF1ZW5jZXMgPSBbcyBmb3IgcyBpbiBzZXF1ZW5jZXMgaWYgc10gICAjIHB1cmdlIGVtcHR5IHNlcXVlbmNlcworICAgICAgICBpZiBub3Qgc2VxdWVuY2VzOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICBmb3IgczEgaW4gc2VxdWVuY2VzOiAgICMgZmluZCBtZXJnZSBjYW5kaWRhdGVzIGFtb25nIHNlcSBoZWFkcworICAgICAgICAgICAgY2FuZGlkYXRlID0gczFbMF0KKyAgICAgICAgICAgIGZvciBzMiBpbiBzZXF1ZW5jZXM6CisgICAgICAgICAgICAgICAgaWYgY2FuZGlkYXRlIGluIHMyWzE6XToKKyAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gTm9uZQorICAgICAgICAgICAgICAgICAgICBicmVhayAgICAgICMgcmVqZWN0IHRoZSBjdXJyZW50IGhlYWQsIGl0IGFwcGVhcnMgbGF0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgY2FuZGlkYXRlIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkluY29uc2lzdGVudCBoaWVyYXJjaHkiKQorICAgICAgICByZXN1bHQuYXBwZW5kKGNhbmRpZGF0ZSkKKyAgICAgICAgIyByZW1vdmUgdGhlIGNob3NlbiBjYW5kaWRhdGUKKyAgICAgICAgZm9yIHNlcSBpbiBzZXF1ZW5jZXM6CisgICAgICAgICAgICBpZiBzZXFbMF0gPT0gY2FuZGlkYXRlOgorICAgICAgICAgICAgICAgIGRlbCBzZXFbMF0KKworZGVmIF9jM19tcm8oY2xzLCBhYmNzPU5vbmUpOgorICAgICIiIkNvbXB1dGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciB1c2luZyBleHRlbmRlZCBDMyBsaW5lYXJpemF0aW9uLgorCisgICAgSWYgbm8gKmFiY3MqIGFyZSBnaXZlbiwgdGhlIGFsZ29yaXRobSB3b3JrcyBleGFjdGx5IGxpa2UgdGhlIGJ1aWx0LWluIEMzCisgICAgbGluZWFyaXphdGlvbiB1c2VkIGZvciBtZXRob2QgcmVzb2x1dGlvbi4KKworICAgIElmIGdpdmVuLCAqYWJjcyogaXMgYSBsaXN0IG9mIGFic3RyYWN0IGJhc2UgY2xhc3NlcyB0aGF0IHNob3VsZCBiZSBpbnNlcnRlZAorICAgIGludG8gdGhlIHJlc3VsdGluZyBNUk8uIFVucmVsYXRlZCBBQkNzIGFyZSBpZ25vcmVkIGFuZCBkb24ndCBlbmQgdXAgaW4gdGhlCisgICAgcmVzdWx0LiBUaGUgYWxnb3JpdGhtIGluc2VydHMgQUJDcyB3aGVyZSB0aGVpciBmdW5jdGlvbmFsaXR5IGlzIGludHJvZHVjZWQsCisgICAgaS5lLiBpc3N1YmNsYXNzKGNscywgYWJjKSByZXR1cm5zIFRydWUgZm9yIHRoZSBjbGFzcyBpdHNlbGYgYnV0IHJldHVybnMKKyAgICBGYWxzZSBmb3IgYWxsIGl0cyBkaXJlY3QgYmFzZSBjbGFzc2VzLiBJbXBsaWNpdCBBQkNzIGZvciBhIGdpdmVuIGNsYXNzCisgICAgKGVpdGhlciByZWdpc3RlcmVkIG9yIGluZmVycmVkIGZyb20gdGhlIHByZXNlbmNlIG9mIGEgc3BlY2lhbCBtZXRob2QgbGlrZQorICAgIF9fbGVuX18pIGFyZSBpbnNlcnRlZCBkaXJlY3RseSBhZnRlciB0aGUgbGFzdCBBQkMgZXhwbGljaXRseSBsaXN0ZWQgaW4gdGhlCisgICAgTVJPIG9mIHNhaWQgY2xhc3MuIElmIHR3byBpbXBsaWNpdCBBQkNzIGVuZCB1cCBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gdGhlCisgICAgcmVzdWx0aW5nIE1STywgdGhlaXIgb3JkZXJpbmcgZGVwZW5kcyBvbiB0aGUgb3JkZXIgb2YgdHlwZXMgaW4gKmFiY3MqLgorCisgICAgIiIiCisgICAgZm9yIGksIGJhc2UgaW4gZW51bWVyYXRlKHJldmVyc2VkKGNscy5fX2Jhc2VzX18pKToKKyAgICAgICAgaWYgaGFzYXR0cihiYXNlLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgYm91bmRhcnkgPSBsZW4oY2xzLl9fYmFzZXNfXykgLSBpCisgICAgICAgICAgICBicmVhayAgICMgQmFzZXMgdXAgdG8gdGhlIGxhc3QgZXhwbGljaXQgQUJDIGFyZSBjb25zaWRlcmVkIGZpcnN0LgorICAgIGVsc2U6CisgICAgICAgIGJvdW5kYXJ5ID0gMAorICAgIGFiY3MgPSBsaXN0KGFiY3MpIGlmIGFiY3MgZWxzZSBbXQorICAgIGV4cGxpY2l0X2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fWzpib3VuZGFyeV0pCisgICAgYWJzdHJhY3RfYmFzZXMgPSBbXQorICAgIG90aGVyX2Jhc2VzID0gbGlzdChjbHMuX19iYXNlc19fW2JvdW5kYXJ5Ol0pCisgICAgZm9yIGJhc2UgaW4gYWJjczoKKyAgICAgICAgaWYgaXNzdWJjbGFzcyhjbHMsIGJhc2UpIGFuZCBub3QgYW55KAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3MoYiwgYmFzZSkgZm9yIGIgaW4gY2xzLl9fYmFzZXNfXworICAgICAgICAgICAgKToKKyAgICAgICAgICAgICMgSWYgKmNscyogaXMgdGhlIGNsYXNzIHRoYXQgaW50cm9kdWNlcyBiZWhhdmlvdXIgZGVzY3JpYmVkIGJ5CisgICAgICAgICAgICAjIGFuIEFCQyAqYmFzZSosIGluc2VydCBzYWlkIEFCQyB0byBpdHMgTVJPLgorICAgICAgICAgICAgYWJzdHJhY3RfYmFzZXMuYXBwZW5kKGJhc2UpCisgICAgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXM6CisgICAgICAgIGFiY3MucmVtb3ZlKGJhc2UpCisgICAgZXhwbGljaXRfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gZXhwbGljaXRfYmFzZXNdCisgICAgYWJzdHJhY3RfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gYWJzdHJhY3RfYmFzZXNdCisgICAgb3RoZXJfYzNfbXJvcyA9IFtfYzNfbXJvKGJhc2UsIGFiY3M9YWJjcykgZm9yIGJhc2UgaW4gb3RoZXJfYmFzZXNdCisgICAgcmV0dXJuIF9jM19tZXJnZSgKKyAgICAgICAgW1tjbHNdXSArCisgICAgICAgIGV4cGxpY2l0X2MzX21yb3MgKyBhYnN0cmFjdF9jM19tcm9zICsgb3RoZXJfYzNfbXJvcyArCisgICAgICAgIFtleHBsaWNpdF9iYXNlc10gKyBbYWJzdHJhY3RfYmFzZXNdICsgW290aGVyX2Jhc2VzXQorICAgICkKKworZGVmIF9jb21wb3NlX21ybyhjbHMsIHR5cGVzKToKKyAgICAiIiJDYWxjdWxhdGVzIHRoZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgYSBnaXZlbiBjbGFzcyAqY2xzKi4KKworICAgIEluY2x1ZGVzIHJlbGV2YW50IGFic3RyYWN0IGJhc2UgY2xhc3NlcyAod2l0aCB0aGVpciByZXNwZWN0aXZlIGJhc2VzKSBmcm9tCisgICAgdGhlICp0eXBlcyogaXRlcmFibGUuIFVzZXMgYSBtb2RpZmllZCBDMyBsaW5lYXJpemF0aW9uIGFsZ29yaXRobS4KKworICAgICIiIgorICAgIGJhc2VzID0gc2V0KGNscy5fX21yb19fKQorICAgICMgUmVtb3ZlIGVudHJpZXMgd2hpY2ggYXJlIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgX19tcm9fXyBvciB1bnJlbGF0ZWQuCisgICAgZGVmIGlzX3JlbGF0ZWQodHlwKToKKyAgICAgICAgcmV0dXJuICh0eXAgbm90IGluIGJhc2VzIGFuZCBoYXNhdHRyKHR5cCwgJ19fbXJvX18nKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGlzc3ViY2xhc3MoY2xzLCB0eXApKQorICAgIHR5cGVzID0gW24gZm9yIG4gaW4gdHlwZXMgaWYgaXNfcmVsYXRlZChuKV0KKyAgICAjIFJlbW92ZSBlbnRyaWVzIHdoaWNoIGFyZSBzdHJpY3QgYmFzZXMgb2Ygb3RoZXIgZW50cmllcyAodGhleSB3aWxsIGVuZCB1cAorICAgICMgaW4gdGhlIE1STyBhbnl3YXkuCisgICAgZGVmIGlzX3N0cmljdF9iYXNlKHR5cCk6CisgICAgICAgIGZvciBvdGhlciBpbiB0eXBlczoKKyAgICAgICAgICAgIGlmIHR5cCAhPSBvdGhlciBhbmQgdHlwIGluIG90aGVyLl9fbXJvX186CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgdHlwZXMgPSBbbiBmb3IgbiBpbiB0eXBlcyBpZiBub3QgaXNfc3RyaWN0X2Jhc2UobildCisgICAgIyBTdWJjbGFzc2VzIG9mIHRoZSBBQkNzIGluICp0eXBlcyogd2hpY2ggYXJlIGFsc28gaW1wbGVtZW50ZWQgYnkKKyAgICAjICpjbHMqIGNhbiBiZSB1c2VkIHRvIHN0YWJpbGl6ZSBBQkMgb3JkZXJpbmcuCisgICAgdHlwZV9zZXQgPSBzZXQodHlwZXMpCisgICAgbXJvID0gW10KKyAgICBmb3IgdHlwIGluIHR5cGVzOgorICAgICAgICBmb3VuZCA9IFtdCisgICAgICAgIGZvciBzdWIgaW4gdHlwLl9fc3ViY2xhc3Nlc19fKCk6CisgICAgICAgICAgICBpZiBzdWIgbm90IGluIGJhc2VzIGFuZCBpc3N1YmNsYXNzKGNscywgc3ViKToKKyAgICAgICAgICAgICAgICBmb3VuZC5hcHBlbmQoW3MgZm9yIHMgaW4gc3ViLl9fbXJvX18gaWYgcyBpbiB0eXBlX3NldF0pCisgICAgICAgIGlmIG5vdCBmb3VuZDoKKyAgICAgICAgICAgIG1yby5hcHBlbmQodHlwKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgIyBGYXZvciBzdWJjbGFzc2VzIHdpdGggdGhlIGJpZ2dlc3QgbnVtYmVyIG9mIHVzZWZ1bCBiYXNlcworICAgICAgICBmb3VuZC5zb3J0KGtleT1sZW4sIHJldmVyc2U9VHJ1ZSkKKyAgICAgICAgZm9yIHN1YiBpbiBmb3VuZDoKKyAgICAgICAgICAgIGZvciBzdWJjbHMgaW4gc3ViOgorICAgICAgICAgICAgICAgIGlmIHN1YmNscyBub3QgaW4gbXJvOgorICAgICAgICAgICAgICAgICAgICBtcm8uYXBwZW5kKHN1YmNscykKKyAgICByZXR1cm4gX2MzX21ybyhjbHMsIGFiY3M9bXJvKQorCitkZWYgX2ZpbmRfaW1wbChjbHMsIHJlZ2lzdHJ5KToKKyAgICAiIiJSZXR1cm5zIHRoZSBiZXN0IG1hdGNoaW5nIGltcGxlbWVudGF0aW9uIGZyb20gKnJlZ2lzdHJ5KiBmb3IgdHlwZSAqY2xzKi4KKworICAgIFdoZXJlIHRoZXJlIGlzIG5vIHJlZ2lzdGVyZWQgaW1wbGVtZW50YXRpb24gZm9yIGEgc3BlY2lmaWMgdHlwZSwgaXRzIG1ldGhvZAorICAgIHJlc29sdXRpb24gb3JkZXIgaXMgdXNlZCB0byBmaW5kIGEgbW9yZSBnZW5lcmljIGltcGxlbWVudGF0aW9uLgorCisgICAgTm90ZTogaWYgKnJlZ2lzdHJ5KiBkb2VzIG5vdCBjb250YWluIGFuIGltcGxlbWVudGF0aW9uIGZvciB0aGUgYmFzZQorICAgICpvYmplY3QqIHR5cGUsIHRoaXMgZnVuY3Rpb24gbWF5IHJldHVybiBOb25lLgorCisgICAgIiIiCisgICAgbXJvID0gX2NvbXBvc2VfbXJvKGNscywgcmVnaXN0cnkua2V5cygpKQorICAgIG1hdGNoID0gTm9uZQorICAgIGZvciB0IGluIG1ybzoKKyAgICAgICAgaWYgbWF0Y2ggaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIElmICptYXRjaCogaXMgYW4gaW1wbGljaXQgQUJDIGJ1dCB0aGVyZSBpcyBhbm90aGVyIHVucmVsYXRlZCwKKyAgICAgICAgICAgICMgZXF1YWxseSBtYXRjaGluZyBpbXBsaWNpdCBBQkMsIHJlZnVzZSB0aGUgdGVtcHRhdGlvbiB0byBndWVzcy4KKyAgICAgICAgICAgIGlmICh0IGluIHJlZ2lzdHJ5IGFuZCB0IG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG1hdGNoIG5vdCBpbiBjbHMuX19tcm9fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBpc3N1YmNsYXNzKG1hdGNoLCB0KSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IHt9IG9yIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIG1hdGNoLCB0KSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIHQgaW4gcmVnaXN0cnk6CisgICAgICAgICAgICBtYXRjaCA9IHQKKyAgICByZXR1cm4gcmVnaXN0cnkuZ2V0KG1hdGNoKQorCitkZWYgc2luZ2xlZGlzcGF0Y2goZnVuYyk6CisgICAgIiIiU2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb24gZGVjb3JhdG9yLgorCisgICAgVHJhbnNmb3JtcyBhIGZ1bmN0aW9uIGludG8gYSBnZW5lcmljIGZ1bmN0aW9uLCB3aGljaCBjYW4gaGF2ZSBkaWZmZXJlbnQKKyAgICBiZWhhdmlvdXJzIGRlcGVuZGluZyB1cG9uIHRoZSB0eXBlIG9mIGl0cyBmaXJzdCBhcmd1bWVudC4gVGhlIGRlY29yYXRlZAorICAgIGZ1bmN0aW9uIGFjdHMgYXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24sIGFuZCBhZGRpdGlvbmFsCisgICAgaW1wbGVtZW50YXRpb25zIGNhbiBiZSByZWdpc3RlcmVkIHVzaW5nIHRoZSByZWdpc3RlcigpIGF0dHJpYnV0ZSBvZiB0aGUKKyAgICBnZW5lcmljIGZ1bmN0aW9uLgorCisgICAgIiIiCisgICAgcmVnaXN0cnkgPSB7fQorICAgIGRpc3BhdGNoX2NhY2hlID0gV2Vha0tleURpY3Rpb25hcnkoKQorICAgIGNhY2hlX3Rva2VuID0gTm9uZQorCisgICAgZGVmIGRpc3BhdGNoKGNscyk6CisgICAgICAgICIiImdlbmVyaWNfZnVuYy5kaXNwYXRjaChjbHMpIC0+IDxmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbj4KKworICAgICAgICBSdW5zIHRoZSBkaXNwYXRjaCBhbGdvcml0aG0gdG8gcmV0dXJuIHRoZSBiZXN0IGF2YWlsYWJsZSBpbXBsZW1lbnRhdGlvbgorICAgICAgICBmb3IgdGhlIGdpdmVuICpjbHMqIHJlZ2lzdGVyZWQgb24gKmdlbmVyaWNfZnVuYyouCisKKyAgICAgICAgIiIiCisgICAgICAgIG5vbmxvY2FsIGNhY2hlX3Rva2VuCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgY3VycmVudF90b2tlbiA9IGdldF9jYWNoZV90b2tlbigpCisgICAgICAgICAgICBpZiBjYWNoZV90b2tlbiAhPSBjdXJyZW50X3Rva2VuOgorICAgICAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgICAgICAgICBjYWNoZV90b2tlbiA9IGN1cnJlbnRfdG9rZW4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW1wbCA9IGRpc3BhdGNoX2NhY2hlW2Nsc10KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGltcGwgPSByZWdpc3RyeVtjbHNdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgaW1wbCA9IF9maW5kX2ltcGwoY2xzLCByZWdpc3RyeSkKKyAgICAgICAgICAgIGRpc3BhdGNoX2NhY2hlW2Nsc10gPSBpbXBsCisgICAgICAgIHJldHVybiBpbXBsCisKKyAgICBkZWYgcmVnaXN0ZXIoY2xzLCBmdW5jPU5vbmUpOgorICAgICAgICAiIiJnZW5lcmljX2Z1bmMucmVnaXN0ZXIoY2xzLCBmdW5jKSAtPiBmdW5jCisKKyAgICAgICAgUmVnaXN0ZXJzIGEgbmV3IGltcGxlbWVudGF0aW9uIGZvciB0aGUgZ2l2ZW4gKmNscyogb24gYSAqZ2VuZXJpY19mdW5jKi4KKworICAgICAgICAiIiIKKyAgICAgICAgbm9ubG9jYWwgY2FjaGVfdG9rZW4KKyAgICAgICAgaWYgZnVuYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIGxhbWJkYSBmOiByZWdpc3RlcihjbHMsIGYpCisgICAgICAgIHJlZ2lzdHJ5W2Nsc10gPSBmdW5jCisgICAgICAgIGlmIGNhY2hlX3Rva2VuIGlzIE5vbmUgYW5kIGhhc2F0dHIoY2xzLCAnX19hYnN0cmFjdG1ldGhvZHNfXycpOgorICAgICAgICAgICAgY2FjaGVfdG9rZW4gPSBnZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICBkaXNwYXRjaF9jYWNoZS5jbGVhcigpCisgICAgICAgIHJldHVybiBmdW5jCisKKyAgICBkZWYgd3JhcHBlcigqYXJncywgKiprdyk6CisgICAgICAgIHJldHVybiBkaXNwYXRjaChhcmdzWzBdLl9fY2xhc3NfXykoKmFyZ3MsICoqa3cpCisKKyAgICByZWdpc3RyeVtvYmplY3RdID0gZnVuYworICAgIHdyYXBwZXIucmVnaXN0ZXIgPSByZWdpc3RlcgorICAgIHdyYXBwZXIuZGlzcGF0Y2ggPSBkaXNwYXRjaAorICAgIHdyYXBwZXIucmVnaXN0cnkgPSBNYXBwaW5nUHJveHlUeXBlKHJlZ2lzdHJ5KQorICAgIHdyYXBwZXIuX2NsZWFyX2NhY2hlID0gZGlzcGF0Y2hfY2FjaGUuY2xlYXIKKyAgICB1cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmdW5jKQorICAgIHJldHVybiB3cmFwcGVyCmRpZmYgLS1naXQgYS9MaWIvZ2VuZXJpY3BhdGgucHkgYi9MaWIvZ2VuZXJpY3BhdGgucHkKaW5kZXggMzQwYzAwNC4uY2E0YTUxMCAxMDA2NDQKLS0tIGEvTGliL2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi9nZW5lcmljcGF0aC5weQpAQCAtNyw3ICs3LDggQEAKIGltcG9ydCBzdGF0CiAKIF9fYWxsX18gPSBbJ2NvbW1vbnByZWZpeCcsICdleGlzdHMnLCAnZ2V0YXRpbWUnLCAnZ2V0Y3RpbWUnLCAnZ2V0bXRpbWUnLAotICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnXQorICAgICAgICAgICAnZ2V0c2l6ZScsICdpc2RpcicsICdpc2ZpbGUnLCAnc2FtZWZpbGUnLCAnc2FtZW9wZW5maWxlJywKKyAgICAgICAgICAgJ3NhbWVzdGF0J10KIAogCiAjIERvZXMgYSBwYXRoIGV4aXN0PwpAQCAtMTYsNyArMTcsNyBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBGYWxzZSBmb3IgYnJva2VuIHN5bWJvbGljIGxpbmtzIiIiCiAgICAgdHJ5OgogICAgICAgICBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCkBAIC0yNyw3ICsyOCw3IEBACiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5zdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gc3RhdC5TX0lTUkVHKHN0LnN0X21vZGUpCiAKQEAgLTM5LDcgKzQwLDcgQEAKICAgICAiIiJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3Muc3RhdChzKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0RJUihzdC5zdF9tb2RlKQogCkBAIC03NSw2ICs3NiwzMSBAQAogICAgICAgICAgICAgcmV0dXJuIHMxWzppXQogICAgIHJldHVybiBzMQogCisjIEFyZSB0d28gc3RhdCBidWZmZXJzIChvYnRhaW5lZCBmcm9tIHN0YXQsIGZzdGF0IG9yIGxzdGF0KQorIyBkZXNjcmliaW5nIHRoZSBzYW1lIGZpbGU/CitkZWYgc2FtZXN0YXQoczEsIHMyKToKKyAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIHN0YXQgYnVmZmVycyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHJldHVybiAoczEuc3RfaW5vID09IHMyLnN0X2lubyBhbmQKKyAgICAgICAgICAgIHMxLnN0X2RldiA9PSBzMi5zdF9kZXYpCisKKworIyBBcmUgdHdvIGZpbGVuYW1lcyByZWFsbHkgcG9pbnRpbmcgdG8gdGhlIHNhbWUgZmlsZT8KK2RlZiBzYW1lZmlsZShmMSwgZjIpOgorICAgICIiIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIiIgorICAgIHMxID0gb3Muc3RhdChmMSkKKyAgICBzMiA9IG9zLnN0YXQoZjIpCisgICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKKworCisjIEFyZSB0d28gb3BlbiBmaWxlcyByZWFsbHkgcmVmZXJlbmNpbmcgdGhlIHNhbWUgZmlsZT8KKyMgKE5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IhKQorZGVmIHNhbWVvcGVuZmlsZShmcDEsIGZwMik6CisgICAgIiIiVGVzdCB3aGV0aGVyIHR3byBvcGVuIGZpbGUgb2JqZWN0cyByZWZlcmVuY2UgdGhlIHNhbWUgZmlsZSIiIgorICAgIHMxID0gb3MuZnN0YXQoZnAxKQorICAgIHMyID0gb3MuZnN0YXQoZnAyKQorICAgIHJldHVybiBzYW1lc3RhdChzMSwgczIpCisKKwogIyBTcGxpdCBhIHBhdGggaW4gcm9vdCBhbmQgZXh0ZW5zaW9uLgogIyBUaGUgZXh0ZW5zaW9uIGlzIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgYXQgdGhlIGxhc3QgZG90IGluIHRoZSBsYXN0CiAjIHBhdGhuYW1lIGNvbXBvbmVudDsgdGhlIHJvb3QgaXMgZXZlcnl0aGluZyBiZWZvcmUgdGhhdC4KZGlmZiAtLWdpdCBhL0xpYi9nZXRvcHQucHkgYi9MaWIvZ2V0b3B0LnB5CmluZGV4IDNkNmVjYmQuLjlkNGNhYjEgMTAwNjQ0Ci0tLSBhL0xpYi9nZXRvcHQucHkKKysrIGIvTGliL2dldG9wdC5weQpAQCAtMjgsNyArMjgsNyBAQAogIyAtIFJFVFVSTl9JTl9PUkRFUiBvcHRpb24KICMgLSBHTlUgZXh0ZW5zaW9uIHdpdGggJy0nIGFzIGZpcnN0IGNoYXJhY3RlciBvZiBvcHRpb24gc3RyaW5nCiAjIC0gb3B0aW9uYWwgYXJndW1lbnRzLCBzcGVjaWZpZWQgYnkgZG91YmxlIGNvbG9ucwotIyAtIGEgb3B0aW9uIHN0cmluZyB3aXRoIGEgVyBmb2xsb3dlZCBieSBzZW1pY29sb24gc2hvdWxkCisjIC0gYW4gb3B0aW9uIHN0cmluZyB3aXRoIGEgVyBmb2xsb3dlZCBieSBzZW1pY29sb24gc2hvdWxkCiAjICAgdHJlYXQgIi1XIGZvbyIgYXMgIi0tZm9vIgogCiBfX2FsbF9fID0gWyJHZXRvcHRFcnJvciIsImVycm9yIiwiZ2V0b3B0IiwiZ251X2dldG9wdCJdCmRpZmYgLS1naXQgYS9MaWIvZ2V0cGFzcy5weSBiL0xpYi9nZXRwYXNzLnB5CmluZGV4IDUzYzM4YjguLjdjNGU5NzYgMTAwNjQ0Ci0tLSBhL0xpYi9nZXRwYXNzLnB5CisrKyBiL0xpYi9nZXRwYXNzLnB5CkBAIC0xMzUsNyArMTM1LDEzIEBACiAgICAgICAgIGlucHV0ID0gc3lzLnN0ZGluCiAgICAgcHJvbXB0ID0gc3RyKHByb21wdCkKICAgICBpZiBwcm9tcHQ6Ci0gICAgICAgIHN0cmVhbS53cml0ZShwcm9tcHQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShwcm9tcHQpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICAjIFVzZSByZXBsYWNlIGVycm9yIGhhbmRsZXIgdG8gZ2V0IGFzIG11Y2ggYXMgcG9zc2libGUgcHJpbnRlZC4KKyAgICAgICAgICAgIHByb21wdCA9IHByb21wdC5lbmNvZGUoc3RyZWFtLmVuY29kaW5nLCAncmVwbGFjZScpCisgICAgICAgICAgICBwcm9tcHQgPSBwcm9tcHQuZGVjb2RlKHN0cmVhbS5lbmNvZGluZykKKyAgICAgICAgICAgIHN0cmVhbS53cml0ZShwcm9tcHQpCiAgICAgICAgIHN0cmVhbS5mbHVzaCgpCiAgICAgIyBOT1RFOiBUaGUgUHl0aG9uIEMgQVBJIGNhbGxzIGZsb2NrZmlsZSgpIChhbmQgdW5sb2NrKSBkdXJpbmcgcmVhZGxpbmUuCiAgICAgbGluZSA9IGlucHV0LnJlYWRsaW5lKCkKZGlmZiAtLWdpdCBhL0xpYi9nZXR0ZXh0LnB5IGIvTGliL2dldHRleHQucHkKaW5kZXggNTIxMGM1MS4uNGU2ZTE1ZSAxMDA2NDQKLS0tIGEvTGliL2dldHRleHQucHkKKysrIGIvTGliL2dldHRleHQucHkKQEAgLTUyLDcgKzUyLDkgQEAKIAogX19hbGxfXyA9IFsnTnVsbFRyYW5zbGF0aW9ucycsICdHTlVUcmFuc2xhdGlvbnMnLCAnQ2F0YWxvZycsCiAgICAgICAgICAgICdmaW5kJywgJ3RyYW5zbGF0aW9uJywgJ2luc3RhbGwnLCAndGV4dGRvbWFpbicsICdiaW5kdGV4dGRvbWFpbicsCi0gICAgICAgICAgICdkZ2V0dGV4dCcsICdkbmdldHRleHQnLCAnZ2V0dGV4dCcsICduZ2V0dGV4dCcsCisgICAgICAgICAgICdiaW5kX3RleHRkb21haW5fY29kZXNldCcsCisgICAgICAgICAgICdkZ2V0dGV4dCcsICdkbmdldHRleHQnLCAnZ2V0dGV4dCcsICdsZ2V0dGV4dCcsICdsZGdldHRleHQnLAorICAgICAgICAgICAnbGRuZ2V0dGV4dCcsICdsbmdldHRleHQnLCAnbmdldHRleHQnLAogICAgICAgICAgICBdCiAKIF9kZWZhdWx0X2xvY2FsZWRpciA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsICdzaGFyZScsICdsb2NhbGUnKQpAQCAtMzM2LDcgKzMzOCw3IEBACiAgICAgICAgICAgICB2ZXJzaW9uLCBtc2djb3VudCwgbWFzdGVyaWR4LCB0cmFuc2lkeCA9IHVucGFjaygnPjRJJywgYnVmWzQ6MjBdKQogICAgICAgICAgICAgaWkgPSAnPklJJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigwLCAnQmFkIG1hZ2ljIG51bWJlcicsIGZpbGVuYW1lKQogICAgICAgICAjIE5vdyBwdXQgYWxsIG1lc3NhZ2VzIGZyb20gdGhlIC5tbyBmaWxlIGJ1ZmZlciBpbnRvIHRoZSBjYXRhbG9nCiAgICAgICAgICMgZGljdGlvbmFyeS4KICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbXNnY291bnQpOgpAQCAtMzQ4LDE1ICszNTAsMTYgQEAKICAgICAgICAgICAgICAgICBtc2cgPSBidWZbbW9mZjptZW5kXQogICAgICAgICAgICAgICAgIHRtc2cgPSBidWZbdG9mZjp0ZW5kXQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKDAsICdGaWxlIGlzIGNvcnJ1cHQnLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKDAsICdGaWxlIGlzIGNvcnJ1cHQnLCBmaWxlbmFtZSkKICAgICAgICAgICAgICMgU2VlIGlmIHdlJ3JlIGxvb2tpbmcgYXQgR05VIC5tbyBjb252ZW50aW9ucyBmb3IgbWV0YWRhdGEKICAgICAgICAgICAgIGlmIG1sZW4gPT0gMDoKICAgICAgICAgICAgICAgICAjIENhdGFsb2cgZGVzY3JpcHRpb24KLSAgICAgICAgICAgICAgICBsYXN0ayA9IGsgPSBOb25lCisgICAgICAgICAgICAgICAgbGFzdGsgPSBOb25lCiAgICAgICAgICAgICAgICAgZm9yIGJfaXRlbSBpbiB0bXNnLnNwbGl0KCdcbicuZW5jb2RlKCJhc2NpaSIpKToKICAgICAgICAgICAgICAgICAgICAgaXRlbSA9IGJfaXRlbS5kZWNvZGUoKS5zdHJpcCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpdGVtOgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgayA9IHYgPSBOb25lCiAgICAgICAgICAgICAgICAgICAgIGlmICc6JyBpbiBpdGVtOgogICAgICAgICAgICAgICAgICAgICAgICAgaywgdiA9IGl0ZW0uc3BsaXQoJzonLCAxKQogICAgICAgICAgICAgICAgICAgICAgICAgayA9IGsuc3RyaXAoKS5sb3dlcigpCkBAIC00OTAsNyArNDkzLDcgQEAKICAgICBpZiBub3QgbW9maWxlczoKICAgICAgICAgaWYgZmFsbGJhY2s6CiAgICAgICAgICAgICByZXR1cm4gTnVsbFRyYW5zbGF0aW9ucygpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoRU5PRU5ULCAnTm8gdHJhbnNsYXRpb24gZmlsZSBmb3VuZCBmb3IgZG9tYWluJywgZG9tYWluKQorICAgICAgICByYWlzZSBPU0Vycm9yKEVOT0VOVCwgJ05vIHRyYW5zbGF0aW9uIGZpbGUgZm91bmQgZm9yIGRvbWFpbicsIGRvbWFpbikKICAgICAjIEF2b2lkIG9wZW5pbmcsIHJlYWRpbmcsIGFuZCBwYXJzaW5nIHRoZSAubW8gZmlsZSBhZnRlciBpdCdzIGJlZW4gZG9uZQogICAgICMgb25jZS4KICAgICByZXN1bHQgPSBOb25lCkBAIC01NTIsNyArNTU1LDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQuZ2V0dGV4dChtZXNzYWdlKQogCkBAIC01NjAsNyArNTYzLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBtZXNzYWdlCiAgICAgcmV0dXJuIHQubGdldHRleHQobWVzc2FnZSkKIApAQCAtNTY4LDcgKzU3MSw3IEBACiAgICAgdHJ5OgogICAgICAgICB0ID0gdHJhbnNsYXRpb24oZG9tYWluLCBfbG9jYWxlZGlycy5nZXQoZG9tYWluLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVzZXQ9X2xvY2FsZWNvZGVzZXRzLmdldChkb21haW4pKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiBuID09IDE6CiAgICAgICAgICAgICByZXR1cm4gbXNnaWQxCiAgICAgICAgIGVsc2U6CkBAIC01NzksNyArNTgyLDcgQEAKICAgICB0cnk6CiAgICAgICAgIHQgPSB0cmFuc2xhdGlvbihkb21haW4sIF9sb2NhbGVkaXJzLmdldChkb21haW4sIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29kZXNldD1fbG9jYWxlY29kZXNldHMuZ2V0KGRvbWFpbikpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIGlmIG4gPT0gMToKICAgICAgICAgICAgIHJldHVybiBtc2dpZDEKICAgICAgICAgZWxzZToKZGlmZiAtLWdpdCBhL0xpYi9nbG9iLnB5IGIvTGliL2dsb2IucHkKaW5kZXggMWY2MDI2NS4uZDZlY2EyNCAxMDA2NDQKLS0tIGEvTGliL2dsb2IucHkKKysrIGIvTGliL2dsb2IucHkKQEAgLTI2LDE0ICsyNiwxOCBAQAogICAgIHBhdHRlcm5zLgogCiAgICAgIiIiCi0gICAgaWYgbm90IGhhc19tYWdpYyhwYXRobmFtZSk6Ci0gICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhwYXRobmFtZSk6Ci0gICAgICAgICAgICB5aWVsZCBwYXRobmFtZQotICAgICAgICByZXR1cm4KICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQocGF0aG5hbWUpCisgICAgaWYgbm90IGhhc19tYWdpYyhwYXRobmFtZSk6CisgICAgICAgIGlmIGJhc2VuYW1lOgorICAgICAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKHBhdGhuYW1lKToKKyAgICAgICAgICAgICAgICB5aWVsZCBwYXRobmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBQYXR0ZXJucyBlbmRpbmcgd2l0aCBhIHNsYXNoIHNob3VsZCBtYXRjaCBvbmx5IGRpcmVjdG9yaWVzCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRpcm5hbWUpOgorICAgICAgICAgICAgICAgIHlpZWxkIHBhdGhuYW1lCisgICAgICAgIHJldHVybgogICAgIGlmIG5vdCBkaXJuYW1lOgotICAgICAgICBmb3IgbmFtZSBpbiBnbG9iMShOb25lLCBiYXNlbmFtZSk6Ci0gICAgICAgICAgICB5aWVsZCBuYW1lCisgICAgICAgIHlpZWxkIGZyb20gZ2xvYjEoTm9uZSwgYmFzZW5hbWUpCiAgICAgICAgIHJldHVybgogICAgICMgYG9zLnBhdGguc3BsaXQoKWAgcmV0dXJucyB0aGUgYXJndW1lbnQgaXRzZWxmIGFzIGEgZGlybmFtZSBpZiBpdCBpcyBhCiAgICAgIyBkcml2ZSBvciBVTkMgcGF0aC4gIFByZXZlbnQgYW4gaW5maW5pdGUgcmVjdXJzaW9uIGlmIGEgZHJpdmUgb3IgVU5DIHBhdGgKQEAgLTYyLDcgKzY2LDcgQEAKICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbm90IF9pc2hpZGRlbihwYXR0ZXJuKToKICAgICAgICAgbmFtZXMgPSBbeCBmb3IgeCBpbiBuYW1lcyBpZiBub3QgX2lzaGlkZGVuKHgpXQpAQCAtODAsOCArODQsOCBAQAogICAgIHJldHVybiBbXQogCiAKLW1hZ2ljX2NoZWNrID0gcmUuY29tcGlsZSgnWyo/W10nKQotbWFnaWNfY2hlY2tfYnl0ZXMgPSByZS5jb21waWxlKGInWyo/W10nKQorbWFnaWNfY2hlY2sgPSByZS5jb21waWxlKCcoWyo/W10pJykKK21hZ2ljX2NoZWNrX2J5dGVzID0gcmUuY29tcGlsZShiJyhbKj9bXSknKQogCiBkZWYgaGFzX21hZ2ljKHMpOgogICAgIGlmIGlzaW5zdGFuY2UocywgYnl0ZXMpOgpAQCAtOTIsMyArOTYsMTUgQEAKIAogZGVmIF9pc2hpZGRlbihwYXRoKToKICAgICByZXR1cm4gcGF0aFswXSBpbiAoJy4nLCBiJy4nWzBdKQorCitkZWYgZXNjYXBlKHBhdGhuYW1lKToKKyAgICAiIiJFc2NhcGUgYWxsIHNwZWNpYWwgY2hhcmFjdGVycy4KKyAgICAiIiIKKyAgICAjIEVzY2FwaW5nIGlzIGRvbmUgYnkgd3JhcHBpbmcgYW55IG9mICIqP1siIGJldHdlZW4gc3F1YXJlIGJyYWNrZXRzLgorICAgICMgTWV0YWNoYXJhY3RlcnMgZG8gbm90IHdvcmsgaW4gdGhlIGRyaXZlIHBhcnQgYW5kIHNob3VsZG4ndCBiZSBlc2NhcGVkLgorICAgIGRyaXZlLCBwYXRobmFtZSA9IG9zLnBhdGguc3BsaXRkcml2ZShwYXRobmFtZSkKKyAgICBpZiBpc2luc3RhbmNlKHBhdGhuYW1lLCBieXRlcyk6CisgICAgICAgIHBhdGhuYW1lID0gbWFnaWNfY2hlY2tfYnl0ZXMuc3ViKGJyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICBlbHNlOgorICAgICAgICBwYXRobmFtZSA9IG1hZ2ljX2NoZWNrLnN1YihyJ1tcMV0nLCBwYXRobmFtZSkKKyAgICByZXR1cm4gZHJpdmUgKyBwYXRobmFtZQpkaWZmIC0tZ2l0IGEvTGliL2d6aXAucHkgYi9MaWIvZ3ppcC5weQppbmRleCA0ZmY5ODIwLi43YWQwMGUxIDEwMDY0NAotLS0gYS9MaWIvZ3ppcC5weQorKysgYi9MaWIvZ3ppcC5weQpAQCAtMjMsOSArMjMsOSBAQAogICAgIFRoZSBmaWxlbmFtZSBhcmd1bWVudCBjYW4gYmUgYW4gYWN0dWFsIGZpbGVuYW1lIChhIHN0ciBvciBieXRlcyBvYmplY3QpLCBvcgogICAgIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0IHRvIHJlYWQgZnJvbSBvciB3cml0ZSB0by4KIAotICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSAiciIsICJyYiIsICJ3IiwgIndiIiwgImEiIG9yICJhYiIgZm9yIGJpbmFyeSBtb2RlLAotICAgIG9yICJydCIsICJ3dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzICJyYiIsIGFuZCB0aGUKLSAgICBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiLCAidyIsICJ3YiIsICJ4IiwgInhiIiwgImEiIG9yICJhYiIgZm9yCisgICAgYmluYXJ5IG1vZGUsIG9yICJydCIsICJ3dCIsICJ4dCIgb3IgImF0IiBmb3IgdGV4dCBtb2RlLiBUaGUgZGVmYXVsdCBtb2RlIGlzCisgICAgInJiIiwgYW5kIHRoZSBkZWZhdWx0IGNvbXByZXNzbGV2ZWwgaXMgOS4KIAogICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBHemlwRmlsZSBjb25zdHJ1Y3RvcjoKICAgICBHemlwRmlsZShmaWxlbmFtZSwgbW9kZSwgY29tcHJlc3NsZXZlbCkuIEluIHRoaXMgY2FzZSwgdGhlIGVuY29kaW5nLCBlcnJvcnMKQEAgLTY1LDkgKzY1LDYgQEAKICAgICAjIG9yIHVuc2lnbmVkLgogICAgIG91dHB1dC53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCB2YWx1ZSkpCiAKLWRlZiByZWFkMzIoaW5wdXQpOgotICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCI8SSIsIGlucHV0LnJlYWQoNCkpWzBdCi0KIGNsYXNzIF9QYWRkZWRGaWxlOgogICAgICIiIk1pbmltYWwgcmVhZC1vbmx5IGZpbGUgb2JqZWN0IHRoYXQgcHJlcGVuZHMgYSBzdHJpbmcgdG8gdGhlIGNvbnRlbnRzCiAgICAgb2YgYW4gYWN0dWFsIGZpbGUuIFNob3VsZG4ndCBiZSB1c2VkIG91dHNpZGUgb2YgZ3ppcC5weSwgYXMgaXQgbGFja3MKQEAgLTE1NCwxMSArMTUxLDExIEBACiAgICAgICAgIGZpbGVvYmosIGlmIGRpc2Nlcm5pYmxlOyBvdGhlcndpc2UsIGl0IGRlZmF1bHRzIHRvIHRoZSBlbXB0eSBzdHJpbmcsCiAgICAgICAgIGFuZCBpbiB0aGlzIGNhc2UgdGhlIG9yaWdpbmFsIGZpbGVuYW1lIGlzIG5vdCBpbmNsdWRlZCBpbiB0aGUgaGVhZGVyLgogCi0gICAgICAgIFRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2YgJ3InLCAncmInLCAnYScsICdhYicsICd3Jywgb3IgJ3diJywKLSAgICAgICAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZpbGUgd2lsbCBiZSByZWFkIG9yIHdyaXR0ZW4uICBUaGUgZGVmYXVsdAorICAgICAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgYW55IG9mICdyJywgJ3JiJywgJ2EnLCAnYWInLCAndycsICd3YicsICd4Jywgb3IKKyAgICAgICAgJ3hiJyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZmlsZSB3aWxsIGJlIHJlYWQgb3Igd3JpdHRlbi4gIFRoZSBkZWZhdWx0CiAgICAgICAgIGlzIHRoZSBtb2RlIG9mIGZpbGVvYmogaWYgZGlzY2VybmlibGU7IG90aGVyd2lzZSwgdGhlIGRlZmF1bHQgaXMgJ3JiJy4KICAgICAgICAgQSBtb2RlIG9mICdyJyBpcyBlcXVpdmFsZW50IHRvIG9uZSBvZiAncmInLCBhbmQgc2ltaWxhcmx5IGZvciAndycgYW5kCi0gICAgICAgICd3YicsIGFuZCAnYScgYW5kICdhYicuCisgICAgICAgICd3YicsICdhJyBhbmQgJ2FiJywgYW5kICd4JyBhbmQgJ3hiJy4KIAogICAgICAgICBUaGUgY29tcHJlc3NsZXZlbCBhcmd1bWVudCBpcyBhbiBpbnRlZ2VyIGZyb20gMCB0byA5IGNvbnRyb2xsaW5nIHRoZQogICAgICAgICBsZXZlbCBvZiBjb21wcmVzc2lvbjsgMSBpcyBmYXN0ZXN0IGFuZCBwcm9kdWNlcyB0aGUgbGVhc3QgY29tcHJlc3Npb24sCkBAIC0yMDQsNyArMjAxLDcgQEAKICAgICAgICAgICAgIHNlbGYubWluX3JlYWRzaXplID0gMTAwCiAgICAgICAgICAgICBmaWxlb2JqID0gX1BhZGRlZEZpbGUoZmlsZW9iaikKIAotICAgICAgICBlbGlmIG1vZGUuc3RhcnRzd2l0aCgoJ3cnLCAnYScpKToKKyAgICAgICAgZWxpZiBtb2RlLnN0YXJ0c3dpdGgoKCd3JywgJ2EnLCAneCcpKToKICAgICAgICAgICAgIHNlbGYubW9kZSA9IFdSSVRFCiAgICAgICAgICAgICBzZWxmLl9pbml0X3dyaXRlKGZpbGVuYW1lKQogICAgICAgICAgICAgc2VsZi5jb21wcmVzcyA9IHpsaWIuY29tcHJlc3NvYmooY29tcHJlc3NsZXZlbCwKQEAgLTI4MSwyOCArMjc4LDMyIEBACiAgICAgICAgIHNlbGYuY3JjID0gemxpYi5jcmMzMihiIiIpICYgMHhmZmZmZmZmZgogICAgICAgICBzZWxmLnNpemUgPSAwCiAKKyAgICBkZWYgX3JlYWRfZXhhY3Qoc2VsZiwgbik6CisgICAgICAgIGRhdGEgPSBzZWxmLmZpbGVvYmoucmVhZChuKQorICAgICAgICB3aGlsZSBsZW4oZGF0YSkgPCBuOgorICAgICAgICAgICAgYiA9IHNlbGYuZmlsZW9iai5yZWFkKG4gLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBpZiBub3QgYjoKKyAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiQ29tcHJlc3NlZCBmaWxlIGVuZGVkIGJlZm9yZSB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmQtb2Ytc3RyZWFtIG1hcmtlciB3YXMgcmVhY2hlZCIpCisgICAgICAgICAgICBkYXRhICs9IGIKKyAgICAgICAgcmV0dXJuIGRhdGEKKwogICAgIGRlZiBfcmVhZF9nemlwX2hlYWRlcihzZWxmKToKICAgICAgICAgbWFnaWMgPSBzZWxmLmZpbGVvYmoucmVhZCgyKQogICAgICAgICBpZiBtYWdpYyA9PSBiJyc6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgbWFnaWMgIT0gYidcMDM3XDIxMyc6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOb3QgYSBnemlwcGVkIGZpbGUnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignTm90IGEgZ3ppcHBlZCBmaWxlJykKIAotICAgICAgICBtZXRob2QgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKKyAgICAgICAgbWV0aG9kLCBmbGFnLCBzZWxmLm10aW1lID0gc3RydWN0LnVucGFjaygiPEJCSXh4Iiwgc2VsZi5fcmVhZF9leGFjdCg4KSkKICAgICAgICAgaWYgbWV0aG9kICE9IDg6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCi0gICAgICAgIGZsYWcgPSBvcmQoIHNlbGYuZmlsZW9iai5yZWFkKDEpICkKLSAgICAgICAgc2VsZi5tdGltZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopCi0gICAgICAgICMgZXh0cmFmbGFnID0gc2VsZi5maWxlb2JqLnJlYWQoMSkKLSAgICAgICAgIyBvcyA9IHNlbGYuZmlsZW9iai5yZWFkKDEpCi0gICAgICAgIHNlbGYuZmlsZW9iai5yZWFkKDIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCcpCiAKICAgICAgICAgaWYgZmxhZyAmIEZFWFRSQToKICAgICAgICAgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIGV4dHJhIGZpZWxkLCBpZiBwcmVzZW50Ci0gICAgICAgICAgICB4bGVuID0gb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgeGxlbiA9IHhsZW4gKyAyNTYqb3JkKHNlbGYuZmlsZW9iai5yZWFkKDEpKQotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoeGxlbikKKyAgICAgICAgICAgIGV4dHJhX2xlbiwgPSBzdHJ1Y3QudW5wYWNrKCI8SCIsIHNlbGYuX3JlYWRfZXhhY3QoMikpCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KGV4dHJhX2xlbikKICAgICAgICAgaWYgZmxhZyAmIEZOQU1FOgogICAgICAgICAgICAgIyBSZWFkIGFuZCBkaXNjYXJkIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBmaWxlbmFtZQogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTMxNiwxOCArMzE3LDE5IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHMgb3Igcz09YidcMDAwJzoKICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgaWYgZmxhZyAmIEZIQ1JDOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLnJlYWQoMikgICAgICMgUmVhZCAmIGRpc2NhcmQgdGhlIDE2LWJpdCBoZWFkZXIgQ1JDCisgICAgICAgICAgICBzZWxmLl9yZWFkX2V4YWN0KDIpICAgICAjIFJlYWQgJiBkaXNjYXJkIHRoZSAxNi1iaXQgaGVhZGVyIENSQwogCiAgICAgICAgIHVudXNlZCA9IHNlbGYuZmlsZW9iai51bnVzZWQoKQogICAgICAgICBpZiB1bnVzZWQ6CiAgICAgICAgICAgICB1bmNvbXByZXNzID0gc2VsZi5kZWNvbXByZXNzLmRlY29tcHJlc3ModW51c2VkKQogICAgICAgICAgICAgc2VsZi5fYWRkX3JlYWRfZGF0YSh1bmNvbXByZXNzKQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIHdyaXRlKHNlbGYsZGF0YSk6CiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBXUklURToKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgIndyaXRlKCkgb24gcmVhZC1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAid3JpdGUoKSBvbiByZWFkLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIndyaXRlKCkgb24gY2xvc2VkIEd6aXBGaWxlIG9iamVjdCIpCkBAIC0zMzcsOSArMzM5LDkgQEAKICAgICAgICAgICAgIGRhdGEgPSBkYXRhLnRvYnl0ZXMoKQogCiAgICAgICAgIGlmIGxlbihkYXRhKSA+IDA6Ci0gICAgICAgICAgICBzZWxmLnNpemUgPSBzZWxmLnNpemUgKyBsZW4oZGF0YSkKKyAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzZWxmLmNvbXByZXNzLmNvbXByZXNzKGRhdGEpKQorICAgICAgICAgICAgc2VsZi5zaXplICs9IGxlbihkYXRhKQogICAgICAgICAgICAgc2VsZi5jcmMgPSB6bGliLmNyYzMyKGRhdGEsIHNlbGYuY3JjKSAmIDB4ZmZmZmZmZmYKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZSggc2VsZi5jb21wcmVzcy5jb21wcmVzcyhkYXRhKSApCiAgICAgICAgICAgICBzZWxmLm9mZnNldCArPSBsZW4oZGF0YSkKIAogICAgICAgICByZXR1cm4gbGVuKGRhdGEpCkBAIC0zNDgsMjcgKzM1MCwyMyBAQAogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQogICAgICAgICBpZiBzZWxmLm1vZGUgIT0gUkVBRDoKICAgICAgICAgICAgIGltcG9ydCBlcnJubwotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJuby5FQkFERiwgInJlYWQoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZCgpIG9uIHdyaXRlLW9ubHkgR3ppcEZpbGUgb2JqZWN0IikKIAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA8PSAwIGFuZCBzZWxmLmZpbGVvYmogaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBiJycKIAogICAgICAgICByZWFkc2l6ZSA9IDEwMjQKICAgICAgICAgaWYgc2l6ZSA8IDA6ICAgICAgICAjIGdldCB0aGUgd2hvbGUgdGhpbmcKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkKHJlYWRzaXplKQotICAgICAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCi0gICAgICAgICAgICBleGNlcHQgRU9GRXJyb3I6Ci0gICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzZWxmLl9yZWFkKHJlYWRzaXplKToKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCisgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKICAgICAgICAgZWxzZTogICAgICAgICAgICAgICAjIGp1c3QgZ2V0IHNvbWUgbW9yZSBvZiBpdAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdoaWxlIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZChyZWFkc2l6ZSkKLSAgICAgICAgICAgICAgICAgICAgcmVhZHNpemUgPSBtaW4oc2VsZi5tYXhfcmVhZF9jaHVuaywgcmVhZHNpemUgKiAyKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgIGlmIHNpemUgPiBzZWxmLmV4dHJhc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCisgICAgICAgICAgICB3aGlsZSBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuX3JlYWQocmVhZHNpemUpOgorICAgICAgICAgICAgICAgICAgICBpZiBzaXplID4gc2VsZi5leHRyYXNpemU6CisgICAgICAgICAgICAgICAgICAgICAgICBzaXplID0gc2VsZi5leHRyYXNpemUKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICByZWFkc2l6ZSA9IG1pbihzZWxmLm1heF9yZWFkX2NodW5rLCByZWFkc2l6ZSAqIDIpCiAKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgY2h1bmsgPSBzZWxmLmV4dHJhYnVmW29mZnNldDogb2Zmc2V0ICsgc2l6ZV0KQEAgLTM4MSwxNyArMzc5LDE0IEBACiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgogICAgICAgICAgICAgaW1wb3J0IGVycm5vCi0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVCQURGLCAicmVhZDEoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgaWYgc2VsZi5leHRyYXNpemUgPD0gMCBhbmQgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gYicnCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBGb3IgY2VydGFpbiBpbnB1dCBkYXRhLCBhIHNpbmdsZSBjYWxsIHRvIF9yZWFkKCkgbWF5IG5vdCByZXR1cm4KLSAgICAgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCi0gICAgICAgICAgICB3aGlsZSBzZWxmLmV4dHJhc2l6ZSA8PSAwOgotICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQoKQotICAgICAgICBleGNlcHQgRU9GRXJyb3I6CisgICAgICAgICMgRm9yIGNlcnRhaW4gaW5wdXQgZGF0YSwgYSBzaW5nbGUgY2FsbCB0byBfcmVhZCgpIG1heSBub3QgcmV0dXJuCisgICAgICAgICMgYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgcmV0cnkgdW50aWwgd2UgZ2V0IHNvbWUgZGF0YSBvciByZWFjaCBFT0YuCisgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplIDw9IDAgYW5kIHNlbGYuX3JlYWQoKToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgc2l6ZSA8IDAgb3Igc2l6ZSA+IHNlbGYuZXh0cmFzaXplOgogICAgICAgICAgICAgc2l6ZSA9IHNlbGYuZXh0cmFzaXplCkBAIC00MDUsNyArNDAwLDcgQEAKICAgICBkZWYgcGVlayhzZWxmLCBuKToKICAgICAgICAgaWYgc2VsZi5tb2RlICE9IFJFQUQ6CiAgICAgICAgICAgICBpbXBvcnQgZXJybm8KLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoZXJybm8uRUJBREYsICJwZWVrKCkgb24gd3JpdGUtb25seSBHemlwRmlsZSBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FQkFERiwgInBlZWsoKSBvbiB3cml0ZS1vbmx5IEd6aXBGaWxlIG9iamVjdCIpCiAKICAgICAgICAgIyBEbyBub3QgcmV0dXJuIHJpZGljdWxvdXNseSBzbWFsbCBidWZmZXJzLCBmb3Igb25lIGNvbW1vbiBpZGlvbQogICAgICAgICAjIGlzIHRvIGNhbGwgcGVlaygxKSBhbmQgZXhwZWN0IG1vcmUgYnl0ZXMgaW4gcmV0dXJuLgpAQCAtNDE0LDEyICs0MDksOSBAQAogICAgICAgICBpZiBzZWxmLmV4dHJhc2l6ZSA9PSAwOgogICAgICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICMgRW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmV0dXJuIGIiIiBpZiB3ZSBoYXZlbid0IHJlYWNoZWQgRU9GLgotICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYuZXh0cmFzaXplID09IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgMTAyNCBpcyB0aGUgc2FtZSBidWZmZXJpbmcgaGV1cmlzdGljIHVzZWQgaW4gcmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWQobWF4KG4sIDEwMjQpKQotICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBkb24ndCByZXR1cm4gYiIiIGlmIHdlIGhhdmVuJ3QgcmVhY2hlZCBFT0YuCisgICAgICAgICAgICAjIDEwMjQgaXMgdGhlIHNhbWUgYnVmZmVyaW5nIGhldXJpc3RpYyB1c2VkIGluIHJlYWQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5leHRyYXNpemUgPT0gMCBhbmQgc2VsZi5fcmVhZChtYXgobiwgMTAyNCkpOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgb2Zmc2V0ID0gc2VsZi5vZmZzZXQgLSBzZWxmLmV4dHJhc3RhcnQKICAgICAgICAgcmVtYWluaW5nID0gc2VsZi5leHRyYXNpemUKQEAgLTQzMiwxMyArNDI0LDE0IEBACiAKICAgICBkZWYgX3JlYWQoc2VsZiwgc2l6ZT0xMDI0KToKICAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcigiUmVhY2hlZCBFT0YiKQorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAgICAgaWYgc2VsZi5fbmV3X21lbWJlcjoKICAgICAgICAgICAgICMgSWYgdGhlIF9uZXdfbWVtYmVyIGZsYWcgaXMgc2V0LCB3ZSBoYXZlIHRvCiAgICAgICAgICAgICAjIGp1bXAgdG8gdGhlIG5leHQgbWVtYmVyLCBpZiB0aGVyZSBpcyBvbmUuCiAgICAgICAgICAgICBzZWxmLl9pbml0X3JlYWQoKQotICAgICAgICAgICAgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fcmVhZF9nemlwX2hlYWRlcigpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgc2VsZi5kZWNvbXByZXNzID0gemxpYi5kZWNvbXByZXNzb2JqKC16bGliLk1BWF9XQklUUykKICAgICAgICAgICAgIHNlbGYuX25ld19tZW1iZXIgPSBGYWxzZQogCkBAIC00NTUsNyArNDQ4LDcgQEAKICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5wcmVwZW5kKHNlbGYuZGVjb21wcmVzcy51bnVzZWRfZGF0YSwgVHJ1ZSkKICAgICAgICAgICAgIHNlbGYuX3JlYWRfZW9mKCkKICAgICAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQotICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ1JlYWNoZWQgRU9GJykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIHVuY29tcHJlc3MgPSBzZWxmLmRlY29tcHJlc3MuZGVjb21wcmVzcyhidWYpCiAgICAgICAgIHNlbGYuX2FkZF9yZWFkX2RhdGEoIHVuY29tcHJlc3MgKQpAQCAtNDcxLDYgKzQ2NCw3IEBACiAgICAgICAgICAgICAjIGEgbmV3IG1lbWJlciBvbiB0aGUgbmV4dCBjYWxsCiAgICAgICAgICAgICBzZWxmLl9yZWFkX2VvZigpCiAgICAgICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQorICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgZGVmIF9hZGRfcmVhZF9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmNyYyA9IHpsaWIuY3JjMzIoZGF0YSwgc2VsZi5jcmMpICYgMHhmZmZmZmZmZgpAQCAtNDg1LDEzICs0NzksMTIgQEAKICAgICAgICAgIyBXZSBjaGVjayB0aGUgdGhhdCB0aGUgY29tcHV0ZWQgQ1JDIGFuZCBzaXplIG9mIHRoZQogICAgICAgICAjIHVuY29tcHJlc3NlZCBkYXRhIG1hdGNoZXMgdGhlIHN0b3JlZCB2YWx1ZXMuICBOb3RlIHRoYXQgdGhlIHNpemUKICAgICAgICAgIyBzdG9yZWQgaXMgdGhlIHRydWUgZmlsZSBzaXplIG1vZCAyKiozMi4KLSAgICAgICAgY3JjMzIgPSByZWFkMzIoc2VsZi5maWxlb2JqKQotICAgICAgICBpc2l6ZSA9IHJlYWQzMihzZWxmLmZpbGVvYmopICAjIG1heSBleGNlZWQgMkdCCisgICAgICAgIGNyYzMyLCBpc2l6ZSA9IHN0cnVjdC51bnBhY2soIjxJSSIsIHNlbGYuX3JlYWRfZXhhY3QoOCkpCiAgICAgICAgIGlmIGNyYzMyICE9IHNlbGYuY3JjOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ1JDIGNoZWNrIGZhaWxlZCAlcyAhPSAlcyIgJSAoaGV4KGNyYzMyKSwKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNSQyBjaGVjayBmYWlsZWQgJXMgIT0gJXMiICUgKGhleChjcmMzMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXgoc2VsZi5jcmMpKSkKICAgICAgICAgZWxpZiBpc2l6ZSAhPSAoc2VsZi5zaXplICYgMHhmZmZmZmZmZik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJJbmNvcnJlY3QgbGVuZ3RoIG9mIGRhdGEgcHJvZHVjZWQiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiSW5jb3JyZWN0IGxlbmd0aCBvZiBkYXRhIHByb2R1Y2VkIikKIAogICAgICAgICAjIEd6aXAgZmlsZXMgY2FuIGJlIHBhZGRlZCB3aXRoIHplcm9lcyBhbmQgc3RpbGwgaGF2ZSBhcmNoaXZlcy4KICAgICAgICAgIyBDb25zdW1lIGFsbCB6ZXJvIGJ5dGVzIGFuZCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIGZpcnN0CkBAIC01MDcsMTkgKzUwMCwyMSBAQAogICAgICAgICByZXR1cm4gc2VsZi5maWxlb2JqIGlzIE5vbmUKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5maWxlb2JqIGlzIE5vbmU6CisgICAgICAgIGZpbGVvYmogPSBzZWxmLmZpbGVvYmoKKyAgICAgICAgaWYgZmlsZW9iaiBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHNlbGYubW9kZSA9PSBXUklURToKLSAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzZWxmLmNvbXByZXNzLmZsdXNoKCkpCi0gICAgICAgICAgICB3cml0ZTMydShzZWxmLmZpbGVvYmosIHNlbGYuY3JjKQotICAgICAgICAgICAgIyBzZWxmLnNpemUgbWF5IGV4Y2VlZCAyR0IsIG9yIGV2ZW4gNEdCCi0gICAgICAgICAgICB3cml0ZTMydShzZWxmLmZpbGVvYmosIHNlbGYuc2l6ZSAmIDB4ZmZmZmZmZmYpCi0gICAgICAgICAgICBzZWxmLmZpbGVvYmogPSBOb25lCi0gICAgICAgIGVsaWYgc2VsZi5tb2RlID09IFJFQUQ6Ci0gICAgICAgICAgICBzZWxmLmZpbGVvYmogPSBOb25lCi0gICAgICAgIGlmIHNlbGYubXlmaWxlb2JqOgotICAgICAgICAgICAgc2VsZi5teWZpbGVvYmouY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5teWZpbGVvYmogPSBOb25lCisgICAgICAgIHNlbGYuZmlsZW9iaiA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5tb2RlID09IFdSSVRFOgorICAgICAgICAgICAgICAgIGZpbGVvYmoud3JpdGUoc2VsZi5jb21wcmVzcy5mbHVzaCgpKQorICAgICAgICAgICAgICAgIHdyaXRlMzJ1KGZpbGVvYmosIHNlbGYuY3JjKQorICAgICAgICAgICAgICAgICMgc2VsZi5zaXplIG1heSBleGNlZWQgMkdCLCBvciBldmVuIDRHQgorICAgICAgICAgICAgICAgIHdyaXRlMzJ1KGZpbGVvYmosIHNlbGYuc2l6ZSAmIDB4ZmZmZmZmZmYpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBteWZpbGVvYmogPSBzZWxmLm15ZmlsZW9iagorICAgICAgICAgICAgaWYgbXlmaWxlb2JqOgorICAgICAgICAgICAgICAgIHNlbGYubXlmaWxlb2JqID0gTm9uZQorICAgICAgICAgICAgICAgIG15ZmlsZW9iai5jbG9zZSgpCiAKICAgICBkZWYgZmx1c2goc2VsZix6bGliX21vZGU9emxpYi5aX1NZTkNfRkxVU0gpOgogICAgICAgICBzZWxmLl9jaGVja19jbG9zZWQoKQpAQCAtNTQwLDcgKzUzNSw3IEBACiAgICAgICAgICcnJ1JldHVybiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBmaWxlIHBvc2l0aW9uIGluZGljYXRvciB0byB0aGUKICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBmaWxlJycnCiAgICAgICAgIGlmIHNlbGYubW9kZSAhPSBSRUFEOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiQ2FuJ3QgcmV3aW5kIGluIHdyaXRlIG1vZGUiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ2FuJ3QgcmV3aW5kIGluIHdyaXRlIG1vZGUiKQogICAgICAgICBzZWxmLmZpbGVvYmouc2VlaygwKQogICAgICAgICBzZWxmLl9uZXdfbWVtYmVyID0gVHJ1ZQogICAgICAgICBzZWxmLmV4dHJhYnVmID0gYiIiCkBAIC01NjUsNyArNTYwLDcgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTZWVrIGZyb20gZW5kIG5vdCBzdXBwb3J0ZWQnKQogICAgICAgICBpZiBzZWxmLm1vZGUgPT0gV1JJVEU6CiAgICAgICAgICAgICBpZiBvZmZzZXQgPCBzZWxmLm9mZnNldDoKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdOZWdhdGl2ZSBzZWVrIGluIHdyaXRlIG1vZGUnKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ05lZ2F0aXZlIHNlZWsgaW4gd3JpdGUgbW9kZScpCiAgICAgICAgICAgICBjb3VudCA9IG9mZnNldCAtIHNlbGYub2Zmc2V0CiAgICAgICAgICAgICBjaHVuayA9IGJ5dGVzKDEwMjQpCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShjb3VudCAvLyAxMDI0KToKZGlmZiAtLWdpdCBhL0xpYi9oYXNobGliLnB5IGIvTGliL2hhc2hsaWIucHkKaW5kZXggMjE0NTRjNy4uMzE2Y2VjZSAxMDA2NDQKLS0tIGEvTGliL2hhc2hsaWIucHkKKysrIGIvTGliL2hhc2hsaWIucHkKQEAgLTEsNCArMSw0IEBACi0jICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKKyMuICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgIEdyZWdvcnkgUC4gU21pdGggKGdyZWdAa3J5cHRvLm9yZykKICMgIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIApAQCAtNjAsMzQgKzYwLDM4IEBACiBhbGdvcml0aG1zX2F2YWlsYWJsZSA9IHNldChfX2Fsd2F5c19zdXBwb3J0ZWQpCiAKIF9fYWxsX18gPSBfX2Fsd2F5c19zdXBwb3J0ZWQgKyAoJ25ldycsICdhbGdvcml0aG1zX2d1YXJhbnRlZWQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxnb3JpdGhtc19hdmFpbGFibGUnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWxnb3JpdGhtc19hdmFpbGFibGUnLCAncGJrZGYyX2htYWMnKQogCiAKK19fYnVpbHRpbl9jb25zdHJ1Y3Rvcl9jYWNoZSA9IHt9CisKIGRlZiBfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yKG5hbWUpOgorICAgIGNhY2hlID0gX19idWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlCisgICAgY29uc3RydWN0b3IgPSBjYWNoZS5nZXQobmFtZSkKKyAgICBpZiBjb25zdHJ1Y3RvciBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yCiAgICAgdHJ5OgogICAgICAgICBpZiBuYW1lIGluICgnU0hBMScsICdzaGExJyk6CiAgICAgICAgICAgICBpbXBvcnQgX3NoYTEKLSAgICAgICAgICAgIHJldHVybiBfc2hhMS5zaGExCisgICAgICAgICAgICBjYWNoZVsnU0hBMSddID0gY2FjaGVbJ3NoYTEnXSA9IF9zaGExLnNoYTEKICAgICAgICAgZWxpZiBuYW1lIGluICgnTUQ1JywgJ21kNScpOgogICAgICAgICAgICAgaW1wb3J0IF9tZDUKLSAgICAgICAgICAgIHJldHVybiBfbWQ1Lm1kNQorICAgICAgICAgICAgY2FjaGVbJ01ENSddID0gY2FjaGVbJ21kNSddID0gX21kNS5tZDUKICAgICAgICAgZWxpZiBuYW1lIGluICgnU0hBMjU2JywgJ3NoYTI1NicsICdTSEEyMjQnLCAnc2hhMjI0Jyk6CiAgICAgICAgICAgICBpbXBvcnQgX3NoYTI1NgotICAgICAgICAgICAgYnMgPSBuYW1lWzM6XQotICAgICAgICAgICAgaWYgYnMgPT0gJzI1Nic6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF9zaGEyNTYuc2hhMjU2Ci0gICAgICAgICAgICBlbGlmIGJzID09ICcyMjQnOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhMjU2LnNoYTIyNAorICAgICAgICAgICAgY2FjaGVbJ1NIQTIyNCddID0gY2FjaGVbJ3NoYTIyNCddID0gX3NoYTI1Ni5zaGEyMjQKKyAgICAgICAgICAgIGNhY2hlWydTSEEyNTYnXSA9IGNhY2hlWydzaGEyNTYnXSA9IF9zaGEyNTYuc2hhMjU2CiAgICAgICAgIGVsaWYgbmFtZSBpbiAoJ1NIQTUxMicsICdzaGE1MTInLCAnU0hBMzg0JywgJ3NoYTM4NCcpOgogICAgICAgICAgICAgaW1wb3J0IF9zaGE1MTIKLSAgICAgICAgICAgIGJzID0gbmFtZVszOl0KLSAgICAgICAgICAgIGlmIGJzID09ICc1MTInOgotICAgICAgICAgICAgICAgIHJldHVybiBfc2hhNTEyLnNoYTUxMgotICAgICAgICAgICAgZWxpZiBicyA9PSAnMzg0JzoKLSAgICAgICAgICAgICAgICByZXR1cm4gX3NoYTUxMi5zaGEzODQKKyAgICAgICAgICAgIGNhY2hlWydTSEEzODQnXSA9IGNhY2hlWydzaGEzODQnXSA9IF9zaGE1MTIuc2hhMzg0CisgICAgICAgICAgICBjYWNoZVsnU0hBNTEyJ10gPSBjYWNoZVsnc2hhNTEyJ10gPSBfc2hhNTEyLnNoYTUxMgogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgcGFzcyAgIyBubyBleHRlbnNpb24gbW9kdWxlLCB0aGlzIGhhc2ggaXMgdW5zdXBwb3J0ZWQuCiAKKyAgICBjb25zdHJ1Y3RvciA9IGNhY2hlLmdldChuYW1lKQorICAgIGlmIGNvbnN0cnVjdG9yIGlzIG5vdCBOb25lOgorICAgICAgICByZXR1cm4gY29uc3RydWN0b3IKKwogICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3Vuc3VwcG9ydGVkIGhhc2ggdHlwZSAnICsgbmFtZSkKIAogCkBAIC0xMzQsNiArMTM4LDcxIEBACiAgICAgbmV3ID0gX19weV9uZXcKICAgICBfX2dldF9oYXNoID0gX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcgogCit0cnk6CisgICAgIyBPcGVuU1NMJ3MgUEtDUzVfUEJLREYyX0hNQUMgcmVxdWlyZXMgT3BlblNTTCAxLjArIHdpdGggSE1BQyBhbmQgU0hBCisgICAgZnJvbSBfaGFzaGxpYiBpbXBvcnQgcGJrZGYyX2htYWMKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfdHJhbnNfNUMgPSBieXRlcygoeCBeIDB4NUMpIGZvciB4IGluIHJhbmdlKDI1NikpCisgICAgX3RyYW5zXzM2ID0gYnl0ZXMoKHggXiAweDM2KSBmb3IgeCBpbiByYW5nZSgyNTYpKQorCisgICAgZGVmIHBia2RmMl9obWFjKGhhc2hfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIGl0ZXJhdGlvbnMsIGRrbGVuPU5vbmUpOgorICAgICAgICAiIiJQYXNzd29yZCBiYXNlZCBrZXkgZGVyaXZhdGlvbiBmdW5jdGlvbiAyIChQS0NTICM1IHYyLjApCisKKyAgICAgICAgVGhpcyBQeXRob24gaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIHRoZSBobWFjIG1vZHVsZSBhYm91dCBhcyBmYXN0CisgICAgICAgIGFzIE9wZW5TU0wncyBQS0NTNV9QQktERjJfSE1BQyBmb3Igc2hvcnQgcGFzc3dvcmRzIGFuZCBtdWNoIGZhc3RlcgorICAgICAgICBmb3IgbG9uZyBwYXNzd29yZHMuCisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShoYXNoX25hbWUsIHN0cik6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoaGFzaF9uYW1lKQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHBhc3N3b3JkLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgcGFzc3dvcmQgPSBieXRlcyhtZW1vcnl2aWV3KHBhc3N3b3JkKSkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoc2FsdCwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHNhbHQgPSBieXRlcyhtZW1vcnl2aWV3KHNhbHQpKQorCisgICAgICAgICMgRmFzdCBpbmxpbmUgSE1BQyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBpbm5lciA9IG5ldyhoYXNoX25hbWUpCisgICAgICAgIG91dGVyID0gbmV3KGhhc2hfbmFtZSkKKyAgICAgICAgYmxvY2tzaXplID0gZ2V0YXR0cihpbm5lciwgJ2Jsb2NrX3NpemUnLCA2NCkKKyAgICAgICAgaWYgbGVuKHBhc3N3b3JkKSA+IGJsb2Nrc2l6ZToKKyAgICAgICAgICAgIHBhc3N3b3JkID0gbmV3KGhhc2hfbmFtZSwgcGFzc3dvcmQpLmRpZ2VzdCgpCisgICAgICAgIHBhc3N3b3JkID0gcGFzc3dvcmQgKyBiJ1x4MDAnICogKGJsb2Nrc2l6ZSAtIGxlbihwYXNzd29yZCkpCisgICAgICAgIGlubmVyLnVwZGF0ZShwYXNzd29yZC50cmFuc2xhdGUoX3RyYW5zXzM2KSkKKyAgICAgICAgb3V0ZXIudXBkYXRlKHBhc3N3b3JkLnRyYW5zbGF0ZShfdHJhbnNfNUMpKQorCisgICAgICAgIGRlZiBwcmYobXNnLCBpbm5lcj1pbm5lciwgb3V0ZXI9b3V0ZXIpOgorICAgICAgICAgICAgIyBQQktERjJfSE1BQyB1c2VzIHRoZSBwYXNzd29yZCBhcyBrZXkuIFdlIGNhbiByZS11c2UgdGhlIHNhbWUKKyAgICAgICAgICAgICMgZGlnZXN0IG9iamVjdHMgYW5kIGp1c3QgdXBkYXRlIGNvcGllcyB0byBza2lwIGluaXRpYWxpemF0aW9uLgorICAgICAgICAgICAgaWNweSA9IGlubmVyLmNvcHkoKQorICAgICAgICAgICAgb2NweSA9IG91dGVyLmNvcHkoKQorICAgICAgICAgICAgaWNweS51cGRhdGUobXNnKQorICAgICAgICAgICAgb2NweS51cGRhdGUoaWNweS5kaWdlc3QoKSkKKyAgICAgICAgICAgIHJldHVybiBvY3B5LmRpZ2VzdCgpCisKKyAgICAgICAgaWYgaXRlcmF0aW9ucyA8IDE6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGl0ZXJhdGlvbnMpCisgICAgICAgIGlmIGRrbGVuIGlzIE5vbmU6CisgICAgICAgICAgICBka2xlbiA9IG91dGVyLmRpZ2VzdF9zaXplCisgICAgICAgIGlmIGRrbGVuIDwgMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZGtsZW4pCisKKyAgICAgICAgZGtleSA9IGInJworICAgICAgICBsb29wID0gMQorICAgICAgICBmcm9tX2J5dGVzID0gaW50LmZyb21fYnl0ZXMKKyAgICAgICAgd2hpbGUgbGVuKGRrZXkpIDwgZGtsZW46CisgICAgICAgICAgICBwcmV2ID0gcHJmKHNhbHQgKyBsb29wLnRvX2J5dGVzKDQsICdiaWcnKSkKKyAgICAgICAgICAgICMgZW5kaWFuZXNzIGRvZXNuJ3QgbWF0dGVyIGhlcmUgYXMgbG9uZyB0byAvIGZyb20gdXNlIHRoZSBzYW1lCisgICAgICAgICAgICBya2V5ID0gaW50LmZyb21fYnl0ZXMocHJldiwgJ2JpZycpCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShpdGVyYXRpb25zIC0gMSk6CisgICAgICAgICAgICAgICAgcHJldiA9IHByZihwcmV2KQorICAgICAgICAgICAgICAgICMgcmtleSA9IHJrZXkgXiBwcmV2CisgICAgICAgICAgICAgICAgcmtleSBePSBmcm9tX2J5dGVzKHByZXYsICdiaWcnKQorICAgICAgICAgICAgbG9vcCArPSAxCisgICAgICAgICAgICBka2V5ICs9IHJrZXkudG9fYnl0ZXMoaW5uZXIuZGlnZXN0X3NpemUsICdiaWcnKQorCisgICAgICAgIHJldHVybiBka2V5Wzpka2xlbl0KKworCiBmb3IgX19mdW5jX25hbWUgaW4gX19hbHdheXNfc3VwcG9ydGVkOgogICAgICMgdHJ5IHRoZW0gYWxsLCBzb21lIG1heSBub3Qgd29yayBkdWUgdG8gdGhlIE9wZW5TU0wKICAgICAjIHZlcnNpb24gbm90IHN1cHBvcnRpbmcgdGhhdCBhbGdvcml0aG0uCmRpZmYgLS1naXQgYS9MaWIvaG1hYy5weSBiL0xpYi9obWFjLnB5CmluZGV4IDQyOTdhNzEuLjc3Nzg1YTIgMTAwNjQ0Ci0tLSBhL0xpYi9obWFjLnB5CisrKyBiL0xpYi9obWFjLnB5CkBAIC00LDcgKzQsOCBAQAogIiIiCiAKIGltcG9ydCB3YXJuaW5ncyBhcyBfd2FybmluZ3MKLWZyb20gb3BlcmF0b3IgaW1wb3J0IF9jb21wYXJlX2RpZ2VzdCBhcyBjb21wYXJlX2RpZ2VzdAorZnJvbSBfb3BlcmF0b3IgaW1wb3J0IF9jb21wYXJlX2RpZ2VzdCBhcyBjb21wYXJlX2RpZ2VzdAoraW1wb3J0IGhhc2hsaWIgYXMgX2hhc2hsaWIKIAogdHJhbnNfNUMgPSBieXRlcygoeCBeIDB4NUMpIGZvciB4IGluIHJhbmdlKDI1NikpCiB0cmFuc18zNiA9IGJ5dGVzKCh4IF4gMHgzNikgZm9yIHggaW4gcmFuZ2UoMjU2KSkKQEAgLTI4LDIxICsyOSwyNyBAQAogICAgICAgICBrZXk6ICAgICAgIGtleSBmb3IgdGhlIGtleWVkIGhhc2ggb2JqZWN0LgogICAgICAgICBtc2c6ICAgICAgIEluaXRpYWwgaW5wdXQgZm9yIHRoZSBoYXNoLCBpZiBwcm92aWRlZC4KICAgICAgICAgZGlnZXN0bW9kOiBBIG1vZHVsZSBzdXBwb3J0aW5nIFBFUCAyNDcuICAqT1IqCi0gICAgICAgICAgICAgICAgICAgQSBoYXNobGliIGNvbnN0cnVjdG9yIHJldHVybmluZyBhIG5ldyBoYXNoIG9iamVjdC4KKyAgICAgICAgICAgICAgICAgICBBIGhhc2hsaWIgY29uc3RydWN0b3IgcmV0dXJuaW5nIGEgbmV3IGhhc2ggb2JqZWN0LiAqT1IqCisgICAgICAgICAgICAgICAgICAgQSBoYXNoIG5hbWUgc3VpdGFibGUgZm9yIGhhc2hsaWIubmV3KCkuCiAgICAgICAgICAgICAgICAgICAgRGVmYXVsdHMgdG8gaGFzaGxpYi5tZDUuCisgICAgICAgICAgICAgICAgICAgSW1wbGljaXQgZGVmYXVsdCB0byBoYXNobGliLm1kNSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBpbiBQeXRob24gMy42LgogCi0gICAgICAgIE5vdGU6IGtleSBhbmQgbXNnIG11c3QgYmUgYnl0ZXMgb2JqZWN0cy4KKyAgICAgICAgTm90ZToga2V5IGFuZCBtc2cgbXVzdCBiZSBhIGJ5dGVzIG9yIGJ5dGVhcnJheSBvYmplY3RzLgogICAgICAgICAiIiIKIAotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrZXksIGJ5dGVzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcywgYnV0IGdvdCAlciIgJSB0eXBlKGtleSkuX19uYW1lX18pCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGtleSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5OiBleHBlY3RlZCBieXRlcyBvciBieXRlYXJyYXksIGJ1dCBnb3QgJXIiICUgdHlwZShrZXkpLl9fbmFtZV9fKQogCiAgICAgICAgIGlmIGRpZ2VzdG1vZCBpcyBOb25lOgotICAgICAgICAgICAgaW1wb3J0IGhhc2hsaWIKLSAgICAgICAgICAgIGRpZ2VzdG1vZCA9IGhhc2hsaWIubWQ1CisgICAgICAgICAgICBfd2FybmluZ3Mud2FybigiSE1BQygpIHdpdGhvdXQgYW4gZXhwbGljaXQgZGlnZXN0bW9kIGFyZ3VtZW50ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcyBkZXByZWNhdGVkLiIsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgICAgICAgICBkaWdlc3Rtb2QgPSBfaGFzaGxpYi5tZDUKIAogICAgICAgICBpZiBjYWxsYWJsZShkaWdlc3Rtb2QpOgogICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGRpZ2VzdG1vZAorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGlnZXN0bW9kLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5kaWdlc3RfY29ucyA9IGxhbWJkYSBkPWInJzogX2hhc2hsaWIubmV3KGRpZ2VzdG1vZCwgZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZGlnZXN0X2NvbnMgPSBsYW1iZGEgZD1iJyc6IGRpZ2VzdG1vZC5uZXcoZCkKIApAQCAtNjMsNiArNzAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCAyKQogICAgICAgICAgICAgYmxvY2tzaXplID0gc2VsZi5ibG9ja3NpemUKIAorICAgICAgICAjIHNlbGYuYmxvY2tzaXplIGlzIHRoZSBkZWZhdWx0IGJsb2Nrc2l6ZS4gc2VsZi5ibG9ja19zaXplIGlzCisgICAgICAgICMgZWZmZWN0aXZlIGJsb2NrIHNpemUgYXMgd2VsbCBhcyB0aGUgcHVibGljIEFQSSBhdHRyaWJ1dGUuCisgICAgICAgIHNlbGYuYmxvY2tfc2l6ZSA9IGJsb2Nrc2l6ZQorCiAgICAgICAgIGlmIGxlbihrZXkpID4gYmxvY2tzaXplOgogICAgICAgICAgICAga2V5ID0gc2VsZi5kaWdlc3RfY29ucyhrZXkpLmRpZ2VzdCgpCiAKQEAgLTcyLDExICs4MywxMyBAQAogICAgICAgICBpZiBtc2cgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnVwZGF0ZShtc2cpCiAKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuICJobWFjLSIgKyBzZWxmLmlubmVyLm5hbWUKKwogICAgIGRlZiB1cGRhdGUoc2VsZiwgbXNnKToKICAgICAgICAgIiIiVXBkYXRlIHRoaXMgaGFzaGluZyBvYmplY3Qgd2l0aCB0aGUgc3RyaW5nIG1zZy4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG1zZywgYnl0ZXMpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJleHBlY3RlZCBieXRlcywgYnV0IGdvdCAlciIgJSB0eXBlKG1zZykuX19uYW1lX18pCiAgICAgICAgIHNlbGYuaW5uZXIudXBkYXRlKG1zZykKIAogICAgIGRlZiBjb3B5KHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL2h0bWwvX19pbml0X18ucHkgYi9MaWIvaHRtbC9fX2luaXRfXy5weQppbmRleCAwMjY1MmVmLi5kYTBhMGEzIDEwMDY0NAotLS0gYS9MaWIvaHRtbC9fX2luaXRfXy5weQorKysgYi9MaWIvaHRtbC9fX2luaXRfXy5weQpAQCAtMiwxMiArMiwxMiBAQAogR2VuZXJhbCBmdW5jdGlvbnMgZm9yIEhUTUwgbWFuaXB1bGF0aW9uLgogIiIiCiAKK2ltcG9ydCByZSBhcyBfcmUKK2Zyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUgYXMgX2h0bWw1CiAKLV9lc2NhcGVfbWFwID0ge29yZCgnJicpOiAnJmFtcDsnLCBvcmQoJzwnKTogJyZsdDsnLCBvcmQoJz4nKTogJyZndDsnfQotX2VzY2FwZV9tYXBfZnVsbCA9IHtvcmQoJyYnKTogJyZhbXA7Jywgb3JkKCc8Jyk6ICcmbHQ7Jywgb3JkKCc+Jyk6ICcmZ3Q7JywKLSAgICAgICAgICAgICAgICAgICAgb3JkKCciJyk6ICcmcXVvdDsnLCBvcmQoJ1wnJyk6ICcmI3gyNzsnfQogCi0jIE5COiB0aGlzIGlzIGEgY2FuZGlkYXRlIGZvciBhIGJ5dGVzL3N0cmluZyBwb2x5bW9ycGhpYyBpbnRlcmZhY2UKK19fYWxsX18gPSBbJ2VzY2FwZScsICd1bmVzY2FwZSddCisKIAogZGVmIGVzY2FwZShzLCBxdW90ZT1UcnVlKToKICAgICAiIiIKQEAgLTE2LDYgKzE2LDExNyBAQAogICAgIGNoYXJhY3RlcnMsIGJvdGggZG91YmxlIHF1b3RlICgiKSBhbmQgc2luZ2xlIHF1b3RlICgnKSBjaGFyYWN0ZXJzIGFyZSBhbHNvCiAgICAgdHJhbnNsYXRlZC4KICAgICAiIiIKKyAgICBzID0gcy5yZXBsYWNlKCImIiwgIiZhbXA7IikgIyBNdXN0IGJlIGRvbmUgZmlyc3QhCisgICAgcyA9IHMucmVwbGFjZSgiPCIsICImbHQ7IikKKyAgICBzID0gcy5yZXBsYWNlKCI+IiwgIiZndDsiKQogICAgIGlmIHF1b3RlOgotICAgICAgICByZXR1cm4gcy50cmFuc2xhdGUoX2VzY2FwZV9tYXBfZnVsbCkKLSAgICByZXR1cm4gcy50cmFuc2xhdGUoX2VzY2FwZV9tYXApCisgICAgICAgIHMgPSBzLnJlcGxhY2UoJyInLCAiJnF1b3Q7IikKKyAgICAgICAgcyA9IHMucmVwbGFjZSgnXCcnLCAiJiN4Mjc7IikKKyAgICByZXR1cm4gcworCisKKyMgc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L3N5bnRheC5odG1sI3Rva2VuaXppbmctY2hhcmFjdGVyLXJlZmVyZW5jZXMKKworX2ludmFsaWRfY2hhcnJlZnMgPSB7CisgICAgMHgwMDogJ1x1ZmZmZCcsICAjIFJFUExBQ0VNRU5UIENIQVJBQ1RFUgorICAgIDB4MGQ6ICdccicsICAgICAgIyBDQVJSSUFHRSBSRVRVUk4KKyAgICAweDgwOiAnXHUyMGFjJywgICMgRVVSTyBTSUdOCisgICAgMHg4MTogJ1x4ODEnLCAgICAjIDxjb250cm9sPgorICAgIDB4ODI6ICdcdTIwMWEnLCAgIyBTSU5HTEUgTE9XLTkgUVVPVEFUSU9OIE1BUksKKyAgICAweDgzOiAnXHUwMTkyJywgICMgTEFUSU4gU01BTEwgTEVUVEVSIEYgV0lUSCBIT09LCisgICAgMHg4NDogJ1x1MjAxZScsICAjIERPVUJMRSBMT1ctOSBRVU9UQVRJT04gTUFSSworICAgIDB4ODU6ICdcdTIwMjYnLCAgIyBIT1JJWk9OVEFMIEVMTElQU0lTCisgICAgMHg4NjogJ1x1MjAyMCcsICAjIERBR0dFUgorICAgIDB4ODc6ICdcdTIwMjEnLCAgIyBET1VCTEUgREFHR0VSCisgICAgMHg4ODogJ1x1MDJjNicsICAjIE1PRElGSUVSIExFVFRFUiBDSVJDVU1GTEVYIEFDQ0VOVAorICAgIDB4ODk6ICdcdTIwMzAnLCAgIyBQRVIgTUlMTEUgU0lHTgorICAgIDB4OGE6ICdcdTAxNjAnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBTIFdJVEggQ0FST04KKyAgICAweDhiOiAnXHUyMDM5JywgICMgU0lOR0xFIExFRlQtUE9JTlRJTkcgQU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDhjOiAnXHUwMTUyJywgICMgTEFUSU4gQ0FQSVRBTCBMSUdBVFVSRSBPRQorICAgIDB4OGQ6ICdceDhkJywgICAgIyA8Y29udHJvbD4KKyAgICAweDhlOiAnXHUwMTdkJywgICMgTEFUSU4gQ0FQSVRBTCBMRVRURVIgWiBXSVRIIENBUk9OCisgICAgMHg4ZjogJ1x4OGYnLCAgICAjIDxjb250cm9sPgorICAgIDB4OTA6ICdceDkwJywgICAgIyA8Y29udHJvbD4KKyAgICAweDkxOiAnXHUyMDE4JywgICMgTEVGVCBTSU5HTEUgUVVPVEFUSU9OIE1BUksKKyAgICAweDkyOiAnXHUyMDE5JywgICMgUklHSFQgU0lOR0xFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5MzogJ1x1MjAxYycsICAjIExFRlQgRE9VQkxFIFFVT1RBVElPTiBNQVJLCisgICAgMHg5NDogJ1x1MjAxZCcsICAjIFJJR0hUIERPVUJMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OTU6ICdcdTIwMjInLCAgIyBCVUxMRVQKKyAgICAweDk2OiAnXHUyMDEzJywgICMgRU4gREFTSAorICAgIDB4OTc6ICdcdTIwMTQnLCAgIyBFTSBEQVNICisgICAgMHg5ODogJ1x1MDJkYycsICAjIFNNQUxMIFRJTERFCisgICAgMHg5OTogJ1x1MjEyMicsICAjIFRSQURFIE1BUksgU0lHTgorICAgIDB4OWE6ICdcdTAxNjEnLCAgIyBMQVRJTiBTTUFMTCBMRVRURVIgUyBXSVRIIENBUk9OCisgICAgMHg5YjogJ1x1MjAzYScsICAjIFNJTkdMRSBSSUdIVC1QT0lOVElORyBBTkdMRSBRVU9UQVRJT04gTUFSSworICAgIDB4OWM6ICdcdTAxNTMnLCAgIyBMQVRJTiBTTUFMTCBMSUdBVFVSRSBPRQorICAgIDB4OWQ6ICdceDlkJywgICAgIyA8Y29udHJvbD4KKyAgICAweDllOiAnXHUwMTdlJywgICMgTEFUSU4gU01BTEwgTEVUVEVSIFogV0lUSCBDQVJPTgorICAgIDB4OWY6ICdcdTAxNzgnLCAgIyBMQVRJTiBDQVBJVEFMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCit9CisKK19pbnZhbGlkX2NvZGVwb2ludHMgPSB7CisgICAgIyAweDAwMDEgdG8gMHgwMDA4CisgICAgMHgxLCAweDIsIDB4MywgMHg0LCAweDUsIDB4NiwgMHg3LCAweDgsCisgICAgIyAweDAwMEUgdG8gMHgwMDFGCisgICAgMHhlLCAweGYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksCisgICAgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKyAgICAjIDB4MDA3RiB0byAweDAwOUYKKyAgICAweDdmLCAweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhhLAorICAgIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsIDB4OTAsIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsCisgICAgMHg5NywgMHg5OCwgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwKKyAgICAjIDB4RkREMCB0byAweEZERUYKKyAgICAweGZkZDAsIDB4ZmRkMSwgMHhmZGQyLCAweGZkZDMsIDB4ZmRkNCwgMHhmZGQ1LCAweGZkZDYsIDB4ZmRkNywgMHhmZGQ4LAorICAgIDB4ZmRkOSwgMHhmZGRhLCAweGZkZGIsIDB4ZmRkYywgMHhmZGRkLCAweGZkZGUsIDB4ZmRkZiwgMHhmZGUwLCAweGZkZTEsCisgICAgMHhmZGUyLCAweGZkZTMsIDB4ZmRlNCwgMHhmZGU1LCAweGZkZTYsIDB4ZmRlNywgMHhmZGU4LCAweGZkZTksIDB4ZmRlYSwKKyAgICAweGZkZWIsIDB4ZmRlYywgMHhmZGVkLCAweGZkZWUsIDB4ZmRlZiwKKyAgICAjIG90aGVycworICAgIDB4YiwgMHhmZmZlLCAweGZmZmYsIDB4MWZmZmUsIDB4MWZmZmYsIDB4MmZmZmUsIDB4MmZmZmYsIDB4M2ZmZmUsIDB4M2ZmZmYsCisgICAgMHg0ZmZmZSwgMHg0ZmZmZiwgMHg1ZmZmZSwgMHg1ZmZmZiwgMHg2ZmZmZSwgMHg2ZmZmZiwgMHg3ZmZmZSwgMHg3ZmZmZiwKKyAgICAweDhmZmZlLCAweDhmZmZmLCAweDlmZmZlLCAweDlmZmZmLCAweGFmZmZlLCAweGFmZmZmLCAweGJmZmZlLCAweGJmZmZmLAorICAgIDB4Y2ZmZmUsIDB4Y2ZmZmYsIDB4ZGZmZmUsIDB4ZGZmZmYsIDB4ZWZmZmUsIDB4ZWZmZmYsIDB4ZmZmZmUsIDB4ZmZmZmYsCisgICAgMHgxMGZmZmUsIDB4MTBmZmZmCit9CisKKworZGVmIF9yZXBsYWNlX2NoYXJyZWYocyk6CisgICAgcyA9IHMuZ3JvdXAoMSkKKyAgICBpZiBzWzBdID09ICcjJzoKKyAgICAgICAgIyBudW1lcmljIGNoYXJyZWYKKyAgICAgICAgaWYgc1sxXSBpbiAneFgnOgorICAgICAgICAgICAgbnVtID0gaW50KHNbMjpdLnJzdHJpcCgnOycpLCAxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG51bSA9IGludChzWzE6XS5yc3RyaXAoJzsnKSkKKyAgICAgICAgaWYgbnVtIGluIF9pbnZhbGlkX2NoYXJyZWZzOgorICAgICAgICAgICAgcmV0dXJuIF9pbnZhbGlkX2NoYXJyZWZzW251bV0KKyAgICAgICAgaWYgMHhEODAwIDw9IG51bSA8PSAweERGRkYgb3IgbnVtID4gMHgxMEZGRkY6CisgICAgICAgICAgICByZXR1cm4gJ1x1RkZGRCcKKyAgICAgICAgaWYgbnVtIGluIF9pbnZhbGlkX2NvZGVwb2ludHM6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuIGNocihudW0pCisgICAgZWxzZToKKyAgICAgICAgIyBuYW1lZCBjaGFycmVmCisgICAgICAgIGlmIHMgaW4gX2h0bWw1OgorICAgICAgICAgICAgcmV0dXJuIF9odG1sNVtzXQorICAgICAgICAjIGZpbmQgdGhlIGxvbmdlc3QgbWF0Y2hpbmcgbmFtZSAoYXMgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQpCisgICAgICAgIGZvciB4IGluIHJhbmdlKGxlbihzKS0xLCAxLCAtMSk6CisgICAgICAgICAgICBpZiBzWzp4XSBpbiBfaHRtbDU6CisgICAgICAgICAgICAgICAgcmV0dXJuIF9odG1sNVtzWzp4XV0gKyBzW3g6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICcmJyArIHMKKworCitfY2hhcnJlZiA9IF9yZS5jb21waWxlKHInJigjWzAtOV0rOz8nCisgICAgICAgICAgICAgICAgICAgICAgIHInfCNbeFhdWzAtOWEtZkEtRl0rOz8nCisgICAgICAgICAgICAgICAgICAgICAgIHInfFteXHRcblxmIDwmIztdezEsMzJ9Oz8pJykKKworZGVmIHVuZXNjYXBlKHMpOgorICAgICIiIgorICAgIENvbnZlcnQgYWxsIG5hbWVkIGFuZCBudW1lcmljIGNoYXJhY3RlciByZWZlcmVuY2VzIChlLmcuICZndDssICYjNjI7LAorICAgICZ4M2U7KSBpbiB0aGUgc3RyaW5nIHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdW5pY29kZSBjaGFyYWN0ZXJzLgorICAgIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgcnVsZXMgZGVmaW5lZCBieSB0aGUgSFRNTCA1IHN0YW5kYXJkCisgICAgZm9yIGJvdGggdmFsaWQgYW5kIGludmFsaWQgY2hhcmFjdGVyIHJlZmVyZW5jZXMsIGFuZCB0aGUgbGlzdCBvZgorICAgIEhUTUwgNSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBkZWZpbmVkIGluIGh0bWwuZW50aXRpZXMuaHRtbDUuCisgICAgIiIiCisgICAgaWYgJyYnIG5vdCBpbiBzOgorICAgICAgICByZXR1cm4gcworICAgIHJldHVybiBfY2hhcnJlZi5zdWIoX3JlcGxhY2VfY2hhcnJlZiwgcykKZGlmZiAtLWdpdCBhL0xpYi9odG1sL2VudGl0aWVzLnB5IGIvTGliL2h0bWwvZW50aXRpZXMucHkKaW5kZXggZTg5MWFkNi4uYmUzZjYyNyAxMDA2NDQKLS0tIGEvTGliL2h0bWwvZW50aXRpZXMucHkKKysrIGIvTGliL2h0bWwvZW50aXRpZXMucHkKQEAgLTEsNiArMSw2IEBACiAiIiJIVE1MIGNoYXJhY3RlciBlbnRpdHkgcmVmZXJlbmNlcy4iIiIKIAotIyBtYXBzIHRoZSBIVE1MIGVudGl0eSBuYW1lIHRvIHRoZSBVbmljb2RlIGNvZGVwb2ludAorIyBtYXBzIHRoZSBIVE1MIGVudGl0eSBuYW1lIHRvIHRoZSBVbmljb2RlIGNvZGUgcG9pbnQKIG5hbWUyY29kZXBvaW50ID0gewogICAgICdBRWxpZyc6ICAgIDB4MDBjNiwgIyBsYXRpbiBjYXBpdGFsIGxldHRlciBBRSA9IGxhdGluIGNhcGl0YWwgbGlnYXR1cmUgQUUsIFUrMDBDNiBJU09sYXQxCiAgICAgJ0FhY3V0ZSc6ICAgMHgwMGMxLCAjIGxhdGluIGNhcGl0YWwgbGV0dGVyIEEgd2l0aCBhY3V0ZSwgVSswMEMxIElTT2xhdDEKQEAgLTIyMSw3ICsyMjEsNyBAQAogICAgICdzcGFkZXMnOiAgIDB4MjY2MCwgIyBibGFjayBzcGFkZSBzdWl0LCBVKzI2NjAgSVNPcHViCiAgICAgJ3N1Yic6ICAgICAgMHgyMjgyLCAjIHN1YnNldCBvZiwgVSsyMjgyIElTT3RlY2gKICAgICAnc3ViZSc6ICAgICAweDIyODYsICMgc3Vic2V0IG9mIG9yIGVxdWFsIHRvLCBVKzIyODYgSVNPdGVjaAotICAgICdzdW0nOiAgICAgIDB4MjIxMSwgIyBuLWFyeSBzdW1hdGlvbiwgVSsyMjExIElTT2Ftc2IKKyAgICAnc3VtJzogICAgICAweDIyMTEsICMgbi1hcnkgc3VtbWF0aW9uLCBVKzIyMTEgSVNPYW1zYgogICAgICdzdXAnOiAgICAgIDB4MjI4MywgIyBzdXBlcnNldCBvZiwgVSsyMjgzIElTT3RlY2gKICAgICAnc3VwMSc6ICAgICAweDAwYjksICMgc3VwZXJzY3JpcHQgb25lID0gc3VwZXJzY3JpcHQgZGlnaXQgb25lLCBVKzAwQjkgSVNPbnVtCiAgICAgJ3N1cDInOiAgICAgMHgwMGIyLCAjIHN1cGVyc2NyaXB0IHR3byA9IHN1cGVyc2NyaXB0IGRpZ2l0IHR3byA9IHNxdWFyZWQsIFUrMDBCMiBJU09udW0KQEAgLTI0OTIsNyArMjQ5Miw3IEBACiAgICAgJ3p3bmo7JzogJ1x1MjAwYycsCiB9CiAKLSMgbWFwcyB0aGUgVW5pY29kZSBjb2RlcG9pbnQgdG8gdGhlIEhUTUwgZW50aXR5IG5hbWUKKyMgbWFwcyB0aGUgVW5pY29kZSBjb2RlIHBvaW50IHRvIHRoZSBIVE1MIGVudGl0eSBuYW1lCiBjb2RlcG9pbnQybmFtZSA9IHt9CiAKICMgbWFwcyB0aGUgSFRNTCBlbnRpdHkgbmFtZSB0byB0aGUgY2hhcmFjdGVyCmRpZmYgLS1naXQgYS9MaWIvaHRtbC9wYXJzZXIucHkgYi9MaWIvaHRtbC9wYXJzZXIucHkKaW5kZXggNjNmZTc3NC4uOWFlMzFiOSAxMDA2NDQKLS0tIGEvTGliL2h0bWwvcGFyc2VyLnB5CisrKyBiL0xpYi9odG1sL3BhcnNlci5weQpAQCAtOCw5ICs4LDE0IEBACiAjIGFuZCBDREFUQSAoY2hhcmFjdGVyIGRhdGEgLS0gb25seSBlbmQgdGFncyBhcmUgc3BlY2lhbCkuCiAKIAotaW1wb3J0IF9tYXJrdXBiYXNlCiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncworaW1wb3J0IF9tYXJrdXBiYXNlCisKK2Zyb20gaHRtbCBpbXBvcnQgdW5lc2NhcGUKKworCitfX2FsbF9fID0gWydIVE1MUGFyc2VyJ10KIAogIyBSZWd1bGFyIGV4cHJlc3Npb25zIHVzZWQgZm9yIHBhcnNpbmcKIApAQCAtOTIsNiArOTcsOCBAQAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKIAorX2RlZmF1bHRfc2VudGluZWwgPSBvYmplY3QoKQorCiBjbGFzcyBIVE1MUGFyc2VyKF9tYXJrdXBiYXNlLlBhcnNlckJhc2UpOgogICAgICIiIkZpbmQgdGFncyBhbmQgb3RoZXIgbWFya3VwIGFuZCBjYWxsIGhhbmRsZXIgZnVuY3Rpb25zLgogCkBAIC0xMDUsMjYgKzExMiwzOSBAQAogICAgIHNlbGYuaGFuZGxlX3N0YXJ0ZW5kdGFnKCk7IGVuZCB0YWdzIGJ5IHNlbGYuaGFuZGxlX2VuZHRhZygpLiAgVGhlCiAgICAgZGF0YSBiZXR3ZWVuIHRhZ3MgaXMgcGFzc2VkIGZyb20gdGhlIHBhcnNlciB0byB0aGUgZGVyaXZlZCBjbGFzcwogICAgIGJ5IGNhbGxpbmcgc2VsZi5oYW5kbGVfZGF0YSgpIHdpdGggdGhlIGRhdGEgYXMgYXJndW1lbnQgKHRoZSBkYXRhCi0gICAgbWF5IGJlIHNwbGl0IHVwIGluIGFyYml0cmFyeSBjaHVua3MpLiAgRW50aXR5IHJlZmVyZW5jZXMgYXJlCi0gICAgcGFzc2VkIGJ5IGNhbGxpbmcgc2VsZi5oYW5kbGVfZW50aXR5cmVmKCkgd2l0aCB0aGUgZW50aXR5Ci0gICAgcmVmZXJlbmNlIGFzIHRoZSBhcmd1bWVudC4gIE51bWVyaWMgY2hhcmFjdGVyIHJlZmVyZW5jZXMgYXJlCi0gICAgcGFzc2VkIHRvIHNlbGYuaGFuZGxlX2NoYXJyZWYoKSB3aXRoIHRoZSBzdHJpbmcgY29udGFpbmluZyB0aGUKLSAgICByZWZlcmVuY2UgYXMgdGhlIGFyZ3VtZW50LgorICAgIG1heSBiZSBzcGxpdCB1cCBpbiBhcmJpdHJhcnkgY2h1bmtzKS4gIElmIGNvbnZlcnRfY2hhcnJlZnMgaXMKKyAgICBUcnVlIHRoZSBjaGFyYWN0ZXIgcmVmZXJlbmNlcyBhcmUgY29udmVydGVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlCisgICAgY29ycmVzcG9uZGluZyBVbmljb2RlIGNoYXJhY3RlciAoYW5kIHNlbGYuaGFuZGxlX2RhdGEoKSBpcyBubworICAgIGxvbmdlciBzcGxpdCBpbiBjaHVua3MpLCBvdGhlcndpc2UgdGhleSBhcmUgcGFzc2VkIGJ5IGNhbGxpbmcKKyAgICBzZWxmLmhhbmRsZV9lbnRpdHlyZWYoKSBvciBzZWxmLmhhbmRsZV9jaGFycmVmKCkgd2l0aCB0aGUgc3RyaW5nCisgICAgY29udGFpbmluZyByZXNwZWN0aXZlbHkgdGhlIG5hbWVkIG9yIG51bWVyaWMgcmVmZXJlbmNlIGFzIHRoZQorICAgIGFyZ3VtZW50LgogICAgICIiIgogCiAgICAgQ0RBVEFfQ09OVEVOVF9FTEVNRU5UUyA9ICgic2NyaXB0IiwgInN0eWxlIikKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJpY3Q9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdHJpY3Q9X2RlZmF1bHRfc2VudGluZWwsICosCisgICAgICAgICAgICAgICAgIGNvbnZlcnRfY2hhcnJlZnM9X2RlZmF1bHRfc2VudGluZWwpOgogICAgICAgICAiIiJJbml0aWFsaXplIGFuZCByZXNldCB0aGlzIGluc3RhbmNlLgogCisgICAgICAgIElmIGNvbnZlcnRfY2hhcnJlZnMgaXMgVHJ1ZSAoZGVmYXVsdDogRmFsc2UpLCBhbGwgY2hhcmFjdGVyIHJlZmVyZW5jZXMKKyAgICAgICAgYXJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIHRoZSBjb3JyZXNwb25kaW5nIFVuaWNvZGUgY2hhcmFjdGVycy4KICAgICAgICAgSWYgc3RyaWN0IGlzIHNldCB0byBGYWxzZSAodGhlIGRlZmF1bHQpIHRoZSBwYXJzZXIgd2lsbCBwYXJzZSBpbnZhbGlkCiAgICAgICAgIG1hcmt1cCwgb3RoZXJ3aXNlIGl0IHdpbGwgcmFpc2UgYW4gZXJyb3IuICBOb3RlIHRoYXQgdGhlIHN0cmljdCBtb2RlCi0gICAgICAgIGlzIGRlcHJlY2F0ZWQuCisgICAgICAgIGFuZCBhcmd1bWVudCBhcmUgZGVwcmVjYXRlZC4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIHN0cmljdDoKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSBzdHJpY3QgbW9kZSBpcyBkZXByZWNhdGVkLiIsCisgICAgICAgIGlmIHN0cmljdCBpcyBub3QgX2RlZmF1bHRfc2VudGluZWw6CisgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgc3RyaWN0IGFyZ3VtZW50IGFuZCBtb2RlIGFyZSBkZXByZWNhdGVkLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3RyaWN0ID0gRmFsc2UgICMgZGVmYXVsdAogICAgICAgICBzZWxmLnN0cmljdCA9IHN0cmljdAorICAgICAgICBpZiBjb252ZXJ0X2NoYXJyZWZzIGlzIF9kZWZhdWx0X3NlbnRpbmVsOgorICAgICAgICAgICAgY29udmVydF9jaGFycmVmcyA9IEZhbHNlICAjIGRlZmF1bHQKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRoZSB2YWx1ZSBvZiBjb252ZXJ0X2NoYXJyZWZzIHdpbGwgYmVjb21lIFRydWUgaW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiMy41LiBZb3UgYXJlIGVuY291cmFnZWQgdG8gc2V0IHRoZSB2YWx1ZSBleHBsaWNpdGx5LiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgPSBjb252ZXJ0X2NoYXJyZWZzCiAgICAgICAgIHNlbGYucmVzZXQoKQogCiAgICAgZGVmIHJlc2V0KHNlbGYpOgpAQCAtMTQ5LDYgKzE2OSw4IEBACiAgICAgICAgIHNlbGYuZ29haGVhZCgxKQogCiAgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGUgJ2Vycm9yJyBtZXRob2QgaXMgZGVwcmVjYXRlZC4iLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgICAgICByYWlzZSBIVE1MUGFyc2VFcnJvcihtZXNzYWdlLCBzZWxmLmdldHBvcygpKQogCiAgICAgX19zdGFydHRhZ190ZXh0ID0gTm9uZQpAQCAtMTczLDE0ICsxOTUsMzMgQEAKICAgICAgICAgaSA9IDAKICAgICAgICAgbiA9IGxlbihyYXdkYXRhKQogICAgICAgICB3aGlsZSBpIDwgbjoKLSAgICAgICAgICAgIG1hdGNoID0gc2VsZi5pbnRlcmVzdGluZy5zZWFyY2gocmF3ZGF0YSwgaSkgIyA8IG9yICYKLSAgICAgICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgICAgIGogPSBtYXRjaC5zdGFydCgpCisgICAgICAgICAgICBpZiBzZWxmLmNvbnZlcnRfY2hhcnJlZnMgYW5kIG5vdCBzZWxmLmNkYXRhX2VsZW06CisgICAgICAgICAgICAgICAgaiA9IHJhd2RhdGEuZmluZCgnPCcsIGkpCisgICAgICAgICAgICAgICAgaWYgaiA8IDA6CisgICAgICAgICAgICAgICAgICAgICMgaWYgd2UgY2FuJ3QgZmluZCB0aGUgbmV4dCA8LCBlaXRoZXIgd2UgYXJlIGF0IHRoZSBlbmQKKyAgICAgICAgICAgICAgICAgICAgIyBvciB0aGVyZSdzIG1vcmUgdGV4dCBpbmNvbWluZy4gIElmIHRoZSBsYXR0ZXIgaXMgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBjYW4ndCBwYXNzIHRoZSB0ZXh0IHRvIGhhbmRsZV9kYXRhIGluIGNhc2Ugd2UgaGF2ZQorICAgICAgICAgICAgICAgICAgICAjIGEgY2hhcnJlZiBjdXQgaW4gaGFsZiBhdCBlbmQuICBUcnkgdG8gZGV0ZXJtaW5lIGlmCisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyB0aGUgY2FzZSBiZWZvcmUgcHJvY2VkaW5nIGJ5IGxvb2tpbmcgZm9yIGFuCisgICAgICAgICAgICAgICAgICAgICMgJiBuZWFyIHRoZSBlbmQgYW5kIHNlZSBpZiBpdCdzIGZvbGxvd2VkIGJ5IGEgc3BhY2Ugb3IgOy4KKyAgICAgICAgICAgICAgICAgICAgYW1wcG9zID0gcmF3ZGF0YS5yZmluZCgnJicsIG1heChpLCBuLTM0KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFtcHBvcyA+PSAwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgbm90IHJlLmNvbXBpbGUocidbXHM7XScpLnNlYXJjaChyYXdkYXRhLCBhbXBwb3MpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICAjIHdhaXQgdGlsbCB3ZSBnZXQgYWxsIHRoZSB0ZXh0CisgICAgICAgICAgICAgICAgICAgIGogPSBuCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY2RhdGFfZWxlbToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBqID0gbgotICAgICAgICAgICAgaWYgaSA8IGo6IHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmpdKQorICAgICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5pbnRlcmVzdGluZy5zZWFyY2gocmF3ZGF0YSwgaSkgICMgPCBvciAmCisgICAgICAgICAgICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgICAgIGogPSBtYXRjaC5zdGFydCgpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgaiA9IG4KKyAgICAgICAgICAgIGlmIGkgPCBqOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YSh1bmVzY2FwZShyYXdkYXRhW2k6al0pKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmpdKQogICAgICAgICAgICAgaSA9IHNlbGYudXBkYXRlcG9zKGksIGopCiAgICAgICAgICAgICBpZiBpID09IG46IGJyZWFrCiAgICAgICAgICAgICBzdGFydHN3aXRoID0gcmF3ZGF0YS5zdGFydHN3aXRoCkBAIC0yMTUsNyArMjU2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgayA9IGkgKyAxCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBrICs9IDEKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6a10pCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuY29udmVydF9jaGFycmVmcyBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodW5lc2NhcGUocmF3ZGF0YVtpOmtdKSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOmtdKQogICAgICAgICAgICAgICAgIGkgPSBzZWxmLnVwZGF0ZXBvcyhpLCBrKQogICAgICAgICAgICAgZWxpZiBzdGFydHN3aXRoKCImIyIsIGkpOgogICAgICAgICAgICAgICAgIG1hdGNoID0gY2hhcnJlZi5tYXRjaChyYXdkYXRhLCBpKQpAQCAtMjY2LDcgKzMxMCwxMCBAQAogICAgICAgICAgICAgICAgIGFzc2VydCAwLCAiaW50ZXJlc3Rpbmcuc2VhcmNoKCkgbGllZCIKICAgICAgICAgIyBlbmQgd2hpbGUKICAgICAgICAgaWYgZW5kIGFuZCBpIDwgbiBhbmQgbm90IHNlbGYuY2RhdGFfZWxlbToKLSAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEocmF3ZGF0YVtpOm5dKQorICAgICAgICAgICAgaWYgc2VsZi5jb252ZXJ0X2NoYXJyZWZzIGFuZCBub3Qgc2VsZi5jZGF0YV9lbGVtOgorICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGEodW5lc2NhcGUocmF3ZGF0YVtpOm5dKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfZGF0YShyYXdkYXRhW2k6bl0pCiAgICAgICAgICAgICBpID0gc2VsZi51cGRhdGVwb3MoaSwgbikKICAgICAgICAgc2VsZi5yYXdkYXRhID0gcmF3ZGF0YVtpOl0KIApAQCAtMzQ5LDcgKzM5Niw3IEBACiAgICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZVs6MV0gPT0gJyInID09IGF0dHJ2YWx1ZVstMTpdOgogICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IGF0dHJ2YWx1ZVsxOi0xXQogICAgICAgICAgICAgaWYgYXR0cnZhbHVlOgotICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHNlbGYudW5lc2NhcGUoYXR0cnZhbHVlKQorICAgICAgICAgICAgICAgIGF0dHJ2YWx1ZSA9IHVuZXNjYXBlKGF0dHJ2YWx1ZSkKICAgICAgICAgICAgIGF0dHJzLmFwcGVuZCgoYXR0cm5hbWUubG93ZXIoKSwgYXR0cnZhbHVlKSkKICAgICAgICAgICAgIGsgPSBtLmVuZCgpCiAKQEAgLTUwNSwzMSArNTUyLDcgQEAKIAogICAgICMgSW50ZXJuYWwgLS0gaGVscGVyIHRvIHJlbW92ZSBzcGVjaWFsIGNoYXJhY3RlciBxdW90aW5nCiAgICAgZGVmIHVuZXNjYXBlKHNlbGYsIHMpOgotICAgICAgICBpZiAnJicgbm90IGluIHM6Ci0gICAgICAgICAgICByZXR1cm4gcwotICAgICAgICBkZWYgcmVwbGFjZUVudGl0aWVzKHMpOgotICAgICAgICAgICAgcyA9IHMuZ3JvdXBzKClbMF0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBzWzBdID09ICIjIjoKLSAgICAgICAgICAgICAgICAgICAgcyA9IHNbMTpdCi0gICAgICAgICAgICAgICAgICAgIGlmIHNbMF0gaW4gWyd4JywnWCddOgotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGludChzWzE6XS5yc3RyaXAoJzsnKSwgMTYpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjID0gaW50KHMucnN0cmlwKCc7JykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaHIoYykKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHJldHVybiAnJiMnICsgcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBmcm9tIGh0bWwuZW50aXRpZXMgaW1wb3J0IGh0bWw1Ci0gICAgICAgICAgICAgICAgaWYgcyBpbiBodG1sNToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWw1W3NdCi0gICAgICAgICAgICAgICAgZWxpZiBzLmVuZHN3aXRoKCc7Jyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAnJicgKyBzCi0gICAgICAgICAgICAgICAgZm9yIHggaW4gcmFuZ2UoMiwgbGVuKHMpKToKLSAgICAgICAgICAgICAgICAgICAgaWYgc1s6eF0gaW4gaHRtbDU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbDVbc1s6eF1dICsgc1t4Ol0KLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gJyYnICsgcwotCi0gICAgICAgIHJldHVybiByZS5zdWIociImKCM/W3hYXT8oPzpbMC05YS1mQS1GXSs7fFx3ezEsMzJ9Oz8pKSIsCi0gICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZUVudGl0aWVzLCBzLCBmbGFncz1yZS5BU0NJSSkKKyAgICAgICAgd2FybmluZ3Mud2FybignVGhlIHVuZXNjYXBlIG1ldGhvZCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgJworICAgICAgICAgICAgICAgICAgICAgICdpbiAzLjUsIHVzZSBodG1sLnVuZXNjYXBlKCkgaW5zdGVhZC4nLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICByZXR1cm4gdW5lc2NhcGUocykKZGlmZiAtLWdpdCBhL0xpYi9odHRwL2NsaWVudC5weSBiL0xpYi9odHRwL2NsaWVudC5weQppbmRleCBlMDVjODRkLi4xYzY5ZGNiIDEwMDY0NAotLS0gYS9MaWIvaHR0cC9jbGllbnQucHkKKysrIGIvTGliL2h0dHAvY2xpZW50LnB5CkBAIC03MCwxNyArNzAsMTkgQEAKIGltcG9ydCBlbWFpbC5tZXNzYWdlCiBpbXBvcnQgaW8KIGltcG9ydCBvcworaW1wb3J0IHJlCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgY29sbGVjdGlvbnMKIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxzcGxpdAotaW1wb3J0IHdhcm5pbmdzCiAKKyMgSFRUUE1lc3NhZ2UsIHBhcnNlX2hlYWRlcnMoKSwgYW5kIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGNvbnN0YW50cyBhcmUKKyMgaW50ZW50aW9uYWxseSBvbWl0dGVkIGZvciBzaW1wbGljaXR5CiBfX2FsbF9fID0gWyJIVFRQUmVzcG9uc2UiLCAiSFRUUENvbm5lY3Rpb24iLAogICAgICAgICAgICAiSFRUUEV4Y2VwdGlvbiIsICJOb3RDb25uZWN0ZWQiLCAiVW5rbm93blByb3RvY29sIiwKICAgICAgICAgICAgIlVua25vd25UcmFuc2ZlckVuY29kaW5nIiwgIlVuaW1wbGVtZW50ZWRGaWxlTW9kZSIsCiAgICAgICAgICAgICJJbmNvbXBsZXRlUmVhZCIsICJJbnZhbGlkVVJMIiwgIkltcHJvcGVyQ29ubmVjdGlvblN0YXRlIiwKICAgICAgICAgICAgIkNhbm5vdFNlbmRSZXF1ZXN0IiwgIkNhbm5vdFNlbmRIZWFkZXIiLCAiUmVzcG9uc2VOb3RSZWFkeSIsCi0gICAgICAgICAgICJCYWRTdGF0dXNMaW5lIiwgImVycm9yIiwgInJlc3BvbnNlcyJdCisgICAgICAgICAgICJCYWRTdGF0dXNMaW5lIiwgIkxpbmVUb29Mb25nIiwgImVycm9yIiwgInJlc3BvbnNlcyJdCiAKIEhUVFBfUE9SVCA9IDgwCiBIVFRQU19QT1JUID0gNDQzCkBAIC0yMTYsNiArMjE4LDM4IEBACiBfTUFYTElORSA9IDY1NTM2CiBfTUFYSEVBREVSUyA9IDEwMAogCisjIEhlYWRlciBuYW1lL3ZhbHVlIEFCTkYgKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIpCisjCisjIFZDSEFSICAgICAgICAgID0gJXgyMS03RQorIyBvYnMtdGV4dCAgICAgICA9ICV4ODAtRkYKKyMgaGVhZGVyLWZpZWxkICAgPSBmaWVsZC1uYW1lICI6IiBPV1MgZmllbGQtdmFsdWUgT1dTCisjIGZpZWxkLW5hbWUgICAgID0gdG9rZW4KKyMgZmllbGQtdmFsdWUgICAgPSAqKCBmaWVsZC1jb250ZW50IC8gb2JzLWZvbGQgKQorIyBmaWVsZC1jb250ZW50ICA9IGZpZWxkLXZjaGFyIFsgMSooIFNQIC8gSFRBQiApIGZpZWxkLXZjaGFyIF0KKyMgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0CisjCisjIG9icy1mb2xkICAgICAgID0gQ1JMRiAxKiggU1AgLyBIVEFCICkKKyMgICAgICAgICAgICAgICAgOyBvYnNvbGV0ZSBsaW5lIGZvbGRpbmcKKyMgICAgICAgICAgICAgICAgOyBzZWUgU2VjdGlvbiAzLjIuNAorCisjIHRva2VuICAgICAgICAgID0gMSp0Y2hhcgorIworIyB0Y2hhciAgICAgICAgICA9ICIhIiAvICIjIiAvICIkIiAvICIlIiAvICImIiAvICInIiAvICIqIgorIyAgICAgICAgICAgICAgICAvICIrIiAvICItIiAvICIuIiAvICJeIiAvICJfIiAvICJgIiAvICJ8IiAvICJ+IgorIyAgICAgICAgICAgICAgICAvIERJR0lUIC8gQUxQSEEKKyMgICAgICAgICAgICAgICAgOyBhbnkgVkNIQVIsIGV4Y2VwdCBkZWxpbWl0ZXJzCisjCisjIFZDSEFSIGRlZmluZWQgaW4gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTIzNCNhcHBlbmRpeC1CLjEKKworIyB0aGUgcGF0dGVybnMgZm9yIGJvdGggbmFtZSBhbmQgdmFsdWUgYXJlIG1vcmUgbGVuaWFudCB0aGFuIFJGQworIyBkZWZpbml0aW9ucyB0byBhbGxvdyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKK19pc19sZWdhbF9oZWFkZXJfbmFtZSA9IHJlLmNvbXBpbGUocmInW146XHNdW146XHJcbl0qJykuZnVsbG1hdGNoCitfaXNfaWxsZWdhbF9oZWFkZXJfdmFsdWUgPSByZS5jb21waWxlKHJiJ1xuKD8hWyBcdF0pfFxyKD8hWyBcdFxuXSknKS5zZWFyY2gKKworIyBXZSBhbHdheXMgc2V0IHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZm9yIHRoZXNlIG1ldGhvZHMgYmVjYXVzZSBzb21lCisjIHNlcnZlcnMgd2lsbCBvdGhlcndpc2UgcmVzcG9uZCB3aXRoIGEgNDExCitfTUVUSE9EU19FWFBFQ1RJTkdfQk9EWSA9IHsnUEFUQ0gnLCAnUE9TVCcsICdQVVQnfQorCiAKIGNsYXNzIEhUVFBNZXNzYWdlKGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSk6CiAgICAgIyBYWFggVGhlIG9ubHkgdXNhZ2Ugb2YgdGhpcyBtZXRob2QgaXMgaW4KQEAgLTI3MSw4ICszMDUsNiBAQAogICAgIHJldHVybiBlbWFpbC5wYXJzZXIuUGFyc2VyKF9jbGFzcz1fY2xhc3MpLnBhcnNlc3RyKGhzdHJpbmcpCiAKIAotX3N0cmljdF9zZW50aW5lbCA9IG9iamVjdCgpCi0KIGNsYXNzIEhUVFBSZXNwb25zZShpby5SYXdJT0Jhc2UpOgogCiAgICAgIyBTZWUgUkZDIDI2MTYgc2VjIDE5LjYgYW5kIFJGQyAxOTQ1IHNlYyA2IGZvciBkZXRhaWxzLgpAQCAtMjgyLDcgKzMxNCw3IEBACiAgICAgIyB0ZXh0IGZvbGxvd2luZyBSRkMgMjA0Ny4gIFRoZSBiYXNpYyBzdGF0dXMgbGluZSBwYXJzaW5nIG9ubHkKICAgICAjIGFjY2VwdHMgaXNvLTg4NTktMS4KIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLCBtZXRob2Q9Tm9uZSwgdXJsPU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzb2NrLCBkZWJ1Z2xldmVsPTAsIG1ldGhvZD1Ob25lLCB1cmw9Tm9uZSk6CiAgICAgICAgICMgSWYgdGhlIHJlc3BvbnNlIGluY2x1ZGVzIGEgY29udGVudC1sZW5ndGggaGVhZGVyLCB3ZSBuZWVkIHRvCiAgICAgICAgICMgbWFrZSBzdXJlIHRoYXQgdGhlIGNsaWVudCBkb2Vzbid0IHJlYWQgbW9yZSB0aGFuIHRoZQogICAgICAgICAjIHNwZWNpZmllZCBudW1iZXIgb2YgYnl0ZXMuICBJZiBpdCBkb2VzLCBpdCB3aWxsIGJsb2NrIHVudGlsCkBAIC0yOTIsMTAgKzMyNCw2IEBACiAgICAgICAgICMgY2xpZW50cyB1bmxlc3MgdGhleSBrbm93IHdoYXQgdGhleSBhcmUgZG9pbmcuCiAgICAgICAgIHNlbGYuZnAgPSBzb2NrLm1ha2VmaWxlKCJyYiIpCiAgICAgICAgIHNlbGYuZGVidWdsZXZlbCA9IGRlYnVnbGV2ZWwKLSAgICAgICAgaWYgc3RyaWN0IGlzIG5vdCBfc3RyaWN0X3NlbnRpbmVsOgotICAgICAgICAgICAgd2FybmluZ3Mud2FybigidGhlICdzdHJpY3QnIGFyZ3VtZW50IGlzbid0IHN1cHBvcnRlZCBhbnltb3JlOyAiCi0gICAgICAgICAgICAgICAgImh0dHAuY2xpZW50IG5vdyBhbHdheXMgYXNzdW1lcyBIVFRQLzEueCBjb21wbGlhbnQgc2VydmVycy4iLAotICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICAgICAgc2VsZi5fbWV0aG9kID0gbWV0aG9kCiAKICAgICAgICAgIyBUaGUgSFRUUFJlc3BvbnNlIG9iamVjdCBpcyByZXR1cm5lZCB2aWEgdXJsbGliLiAgVGhlIGNsaWVudHMKQEAgLTQ2NCw5ICs0OTIsMTEgQEAKICAgICAgICAgZnAuY2xvc2UoKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzdXBlcigpLmNsb3NlKCkgIyBzZXQgImNsb3NlZCIgZmxhZwotICAgICAgICBpZiBzZWxmLmZwOgotICAgICAgICAgICAgc2VsZi5fY2xvc2VfY29ubigpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1cGVyKCkuY2xvc2UoKSAjIHNldCAiY2xvc2VkIiBmbGFnCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBzZWxmLmZwOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2Nvbm4oKQogCiAgICAgIyBUaGVzZSBpbXBsZW1lbnRhdGlvbnMgYXJlIGZvciB0aGUgYmVuZWZpdCBvZiBpby5CdWZmZXJlZFJlYWRlci4KIApAQCAtNzMyLDEzICs3NjIsMTcgQEAKICAgICBkZWZhdWx0X3BvcnQgPSBIVFRQX1BPUlQKICAgICBhdXRvX29wZW4gPSAxCiAgICAgZGVidWdsZXZlbCA9IDAKKyAgICAjIFRDUCBNYXhpbXVtIFNlZ21lbnQgU2l6ZSAoTVNTKSBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBUQ1Agc3RhY2sgb24KKyAgICAjIGEgcGVyLWNvbm5lY3Rpb24gYmFzaXMuICBUaGVyZSBpcyBubyBzaW1wbGUgYW5kIGVmZmljaWVudAorICAgICMgcGxhdGZvcm0gaW5kZXBlbmRlbnQgbWVjaGFuaXNtIGZvciBkZXRlcm1pbmluZyB0aGUgTVNTLCBzbworICAgICMgaW5zdGVhZCBhIHJlYXNvbmFibGUgZXN0aW1hdGUgaXMgY2hvc2VuLiAgVGhlIGdldHNvY2tvcHQoKQorICAgICMgaW50ZXJmYWNlIHVzaW5nIHRoZSBUQ1BfTUFYU0VHIHBhcmFtZXRlciBtYXkgYmUgYSBzdWl0YWJsZQorICAgICMgYXBwcm9hY2ggb24gc29tZSBvcGVyYXRpbmcgc3lzdGVtcy4gQSB2YWx1ZSBvZiAxNktpQiBpcyBjaG9zZW4KKyAgICAjIGFzIGEgcmVhc29uYWJsZSBlc3RpbWF0ZSBvZiB0aGUgbWF4aW11bSBNU1MuCisgICAgbXNzID0gMTYzODQKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIHN0cmljdD1fc3RyaWN0X3NlbnRpbmVsLAotICAgICAgICAgICAgICAgICB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwgc291cmNlX2FkZHJlc3M9Tm9uZSk6Ci0gICAgICAgIGlmIHN0cmljdCBpcyBub3QgX3N0cmljdF9zZW50aW5lbDoKLSAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oInRoZSAnc3RyaWN0JyBhcmd1bWVudCBpc24ndCBzdXBwb3J0ZWQgYW55bW9yZTsgIgotICAgICAgICAgICAgICAgICJodHRwLmNsaWVudCBub3cgYWx3YXlzIGFzc3VtZXMgSFRUUC8xLnggY29tcGxpYW50IHNlcnZlcnMuIiwKLSAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQ9Tm9uZSwgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPU5vbmUpOgogICAgICAgICBzZWxmLnRpbWVvdXQgPSB0aW1lb3V0CiAgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MgPSBzb3VyY2VfYWRkcmVzcwogICAgICAgICBzZWxmLnNvY2sgPSBOb25lCkBAIC03NTAsMjIgKzc4NCwzNyBAQAogICAgICAgICBzZWxmLl90dW5uZWxfcG9ydCA9IE5vbmUKICAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMgPSB7fQogCi0gICAgICAgIHNlbGYuX3NldF9ob3N0cG9ydChob3N0LCBwb3J0KQorICAgICAgICAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpID0gc2VsZi5fZ2V0X2hvc3Rwb3J0KGhvc3QsIHBvcnQpCisKKyAgICAgICAgIyBUaGlzIGlzIHN0b3JlZCBhcyBhbiBpbnN0YW5jZSB2YXJpYWJsZSB0byBhbGxvdyB1bml0CisgICAgICAgICMgdGVzdHMgdG8gcmVwbGFjZSBpdCB3aXRoIGEgc3VpdGFibGUgbW9ja3VwCisgICAgICAgIHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uCiAKICAgICBkZWYgc2V0X3R1bm5lbChzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGhlYWRlcnM9Tm9uZSk6Ci0gICAgICAgICIiIiBTZXRzIHVwIHRoZSBob3N0IGFuZCB0aGUgcG9ydCBmb3IgdGhlIEhUVFAgQ09OTkVDVCBUdW5uZWxsaW5nLgorICAgICAgICAiIiJTZXQgdXAgaG9zdCBhbmQgcG9ydCBmb3IgSFRUUCBDT05ORUNUIHR1bm5lbGxpbmcuCiAKLSAgICAgICAgVGhlIGhlYWRlcnMgYXJndW1lbnQgc2hvdWxkIGJlIGEgbWFwcGluZyBvZiBleHRyYSBIVFRQIGhlYWRlcnMKLSAgICAgICAgdG8gc2VuZCB3aXRoIHRoZSBDT05ORUNUIHJlcXVlc3QuCisgICAgICAgIEluIGEgY29ubmVjdGlvbiB0aGF0IHVzZXMgSFRUUCBDT05ORUNUIHR1bm5lbGluZywgdGhlIGhvc3QgcGFzc2VkIHRvIHRoZQorICAgICAgICBjb25zdHJ1Y3RvciBpcyB1c2VkIGFzIGEgcHJveHkgc2VydmVyIHRoYXQgcmVsYXlzIGFsbCBjb21tdW5pY2F0aW9uIHRvCisgICAgICAgIHRoZSBlbmRwb2ludCBwYXNzZWQgdG8gYHNldF90dW5uZWxgLiBUaGlzIGRvbmUgYnkgc2VuZGluZyBhbiBIVFRQCisgICAgICAgIENPTk5FQ1QgcmVxdWVzdCB0byB0aGUgcHJveHkgc2VydmVyIHdoZW4gdGhlIGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQuCisKKyAgICAgICAgVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBIVE1MIGNvbm5lY3Rpb24gaGFzIGJlZW4KKyAgICAgICAgZXN0YWJsaXNoZWQuCisKKyAgICAgICAgVGhlIGhlYWRlcnMgYXJndW1lbnQgc2hvdWxkIGJlIGEgbWFwcGluZyBvZiBleHRyYSBIVFRQIGhlYWRlcnMgdG8gc2VuZAorICAgICAgICB3aXRoIHRoZSBDT05ORUNUIHJlcXVlc3QuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl90dW5uZWxfaG9zdCA9IGhvc3QKLSAgICAgICAgc2VsZi5fdHVubmVsX3BvcnQgPSBwb3J0CisKKyAgICAgICAgaWYgc2VsZi5zb2NrOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBzZXQgdXAgdHVubmVsIGZvciBlc3RhYmxpc2hlZCBjb25uZWN0aW9uIikKKworICAgICAgICBzZWxmLl90dW5uZWxfaG9zdCwgc2VsZi5fdHVubmVsX3BvcnQgPSBzZWxmLl9nZXRfaG9zdHBvcnQoaG9zdCwgcG9ydCkKICAgICAgICAgaWYgaGVhZGVyczoKICAgICAgICAgICAgIHNlbGYuX3R1bm5lbF9oZWFkZXJzID0gaGVhZGVycwogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fdHVubmVsX2hlYWRlcnMuY2xlYXIoKQogCi0gICAgZGVmIF9zZXRfaG9zdHBvcnQoc2VsZiwgaG9zdCwgcG9ydCk6CisgICAgZGVmIF9nZXRfaG9zdHBvcnQoc2VsZiwgaG9zdCwgcG9ydCk6CiAgICAgICAgIGlmIHBvcnQgaXMgTm9uZToKICAgICAgICAgICAgIGkgPSBob3N0LnJmaW5kKCc6JykKICAgICAgICAgICAgIGogPSBob3N0LnJmaW5kKCddJykgICAgICAgICAjIGlwdjYgYWRkcmVzc2VzIGhhdmUgWy4uLl0KQEAgLTc4MiwxNSArODMxLDE1IEBACiAgICAgICAgICAgICAgICAgcG9ydCA9IHNlbGYuZGVmYXVsdF9wb3J0CiAgICAgICAgICAgICBpZiBob3N0IGFuZCBob3N0WzBdID09ICdbJyBhbmQgaG9zdFstMV0gPT0gJ10nOgogICAgICAgICAgICAgICAgIGhvc3QgPSBob3N0WzE6LTFdCi0gICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKLSAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorCisgICAgICAgIHJldHVybiAoaG9zdCwgcG9ydCkKIAogICAgIGRlZiBzZXRfZGVidWdsZXZlbChzZWxmLCBsZXZlbCk6CiAgICAgICAgIHNlbGYuZGVidWdsZXZlbCA9IGxldmVsCiAKICAgICBkZWYgX3R1bm5lbChzZWxmKToKLSAgICAgICAgc2VsZi5fc2V0X2hvc3Rwb3J0KHNlbGYuX3R1bm5lbF9ob3N0LCBzZWxmLl90dW5uZWxfcG9ydCkKLSAgICAgICAgY29ubmVjdF9zdHIgPSAiQ09OTkVDVCAlczolZCBIVFRQLzEuMFxyXG4iICUgKHNlbGYuaG9zdCwgc2VsZi5wb3J0KQorICAgICAgICBjb25uZWN0X3N0ciA9ICJDT05ORUNUICVzOiVkIEhUVFAvMS4wXHJcbiIgJSAoc2VsZi5fdHVubmVsX2hvc3QsCisgICAgICAgICAgICBzZWxmLl90dW5uZWxfcG9ydCkKICAgICAgICAgY29ubmVjdF9ieXRlcyA9IGNvbm5lY3Rfc3RyLmVuY29kZSgiYXNjaWkiKQogICAgICAgICBzZWxmLnNlbmQoY29ubmVjdF9ieXRlcykKICAgICAgICAgZm9yIGhlYWRlciwgdmFsdWUgaW4gc2VsZi5fdHVubmVsX2hlYWRlcnMuaXRlbXMoKToKQEAgLTgwNCw4ICs4NTMsOCBAQAogCiAgICAgICAgIGlmIGNvZGUgIT0gMjAwOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoIlR1bm5lbCBjb25uZWN0aW9uIGZhaWxlZDogJWQgJXMiICUgKGNvZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2Uuc3RyaXAoKSkpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJUdW5uZWwgY29ubmVjdGlvbiBmYWlsZWQ6ICVkICVzIiAlIChjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5zdHJpcCgpKSkKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGxpbmUgPSByZXNwb25zZS5mcC5yZWFkbGluZShfTUFYTElORSArIDEpCiAgICAgICAgICAgICBpZiBsZW4obGluZSkgPiBfTUFYTElORToKQEAgLTgxOCwyMCArODY3LDI1IEBACiAKICAgICBkZWYgY29ubmVjdChzZWxmKToKICAgICAgICAgIiIiQ29ubmVjdCB0byB0aGUgaG9zdCBhbmQgcG9ydCBzcGVjaWZpZWQgaW4gX19pbml0X18uIiIiCi0gICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoc2VsZi5ob3N0LHNlbGYucG9ydCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRpbWVvdXQsIHNlbGYuc291cmNlX2FkZHJlc3MpCisgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NyZWF0ZV9jb25uZWN0aW9uKChzZWxmLmhvc3Qsc2VsZi5wb3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0LCBzZWxmLnNvdXJjZV9hZGRyZXNzKQorCiAgICAgICAgIGlmIHNlbGYuX3R1bm5lbF9ob3N0OgogICAgICAgICAgICAgc2VsZi5fdHVubmVsKCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIiIiQ2xvc2UgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIEhUVFAgc2VydmVyLiIiIgotICAgICAgICBpZiBzZWxmLnNvY2s6Ci0gICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKSAgICMgY2xvc2UgaXQgbWFudWFsbHkuLi4gdGhlcmUgbWF5IGJlIG90aGVyIHJlZnMKLSAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKLSAgICAgICAgaWYgc2VsZi5fX3Jlc3BvbnNlOgotICAgICAgICAgICAgc2VsZi5fX3Jlc3BvbnNlLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX19yZXNwb25zZSA9IE5vbmUKICAgICAgICAgc2VsZi5fX3N0YXRlID0gX0NTX0lETEUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jayA9IHNlbGYuc29jaworICAgICAgICAgICAgaWYgc29jazoKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBOb25lCisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpICAgIyBjbG9zZSBpdCBtYW51YWxseS4uLiB0aGVyZSBtYXkgYmUgb3RoZXIgcmVmcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLl9fcmVzcG9uc2UKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlOgorICAgICAgICAgICAgICAgIHNlbGYuX19yZXNwb25zZSA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXNwb25zZS5jbG9zZSgpCiAKICAgICBkZWYgc2VuZChzZWxmLCBkYXRhKToKICAgICAgICAgIiIiU2VuZCBgZGF0YScgdG8gdGhlIHNlcnZlci4KQEAgLTg5OSw4ICs5NTMsMTEgQEAKICAgICAgICAgZGVsIHNlbGYuX2J1ZmZlcls6XQogICAgICAgICAjIElmIG1zZyBhbmQgbWVzc2FnZV9ib2R5IGFyZSBzZW50IGluIGEgc2luZ2xlIHNlbmQoKSBjYWxsLAogICAgICAgICAjIGl0IHdpbGwgYXZvaWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgY2F1c2VkIGJ5IHRoZSBpbnRlcmFjdGlvbgotICAgICAgICAjIGJldHdlZW4gZGVsYXllZCBhY2sgYW5kIHRoZSBOYWdsZSBhbGdvcml0aG0uCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWVzc2FnZV9ib2R5LCBieXRlcyk6CisgICAgICAgICMgYmV0d2VlbiBkZWxheWVkIGFjayBhbmQgdGhlIE5hZ2xlIGFsZ29yaXRobS4gSG93ZXZlciwKKyAgICAgICAgIyB0aGVyZSBpcyBubyBwZXJmb3JtYW5jZSBnYWluIGlmIHRoZSBtZXNzYWdlIGlzIGxhcmdlcgorICAgICAgICAjIHRoYW4gTVNTIChhbmQgdGhlcmUgaXMgYSBtZW1vcnkgcGVuYWx0eSBmb3IgdGhlIG1lc3NhZ2UKKyAgICAgICAgIyBjb3B5KS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShtZXNzYWdlX2JvZHksIGJ5dGVzKSBhbmQgbGVuKG1lc3NhZ2VfYm9keSkgPCBzZWxmLm1zczoKICAgICAgICAgICAgIG1zZyArPSBtZXNzYWdlX2JvZHkKICAgICAgICAgICAgIG1lc3NhZ2VfYm9keSA9IE5vbmUKICAgICAgICAgc2VsZi5zZW5kKG1zZykKQEAgLTk4NSwyMiArMTA0MiwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbmV0bG9jX2VuYyA9IG5ldGxvYy5lbmNvZGUoImlkbmEiKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsIG5ldGxvY19lbmMpCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fdHVubmVsX2hvc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICBob3N0ID0gc2VsZi5fdHVubmVsX2hvc3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQgPSBzZWxmLl90dW5uZWxfcG9ydAorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdCA9IHNlbGYuaG9zdAorICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCA9IHNlbGYucG9ydAorCiAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gc2VsZi5ob3N0LmVuY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9lbmMgPSBob3N0LmVuY29kZSgiYXNjaWkiKQogICAgICAgICAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgotICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9lbmMgPSBzZWxmLmhvc3QuZW5jb2RlKCJpZG5hIikKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gaG9zdC5lbmNvZGUoImlkbmEiKQogCiAgICAgICAgICAgICAgICAgICAgICMgQXMgcGVyIFJGQyAyNzMsIElQdjYgYWRkcmVzcyBzaG91bGQgYmUgd3JhcHBlZCB3aXRoIFtdCiAgICAgICAgICAgICAgICAgICAgICMgd2hlbiB1c2VkIGFzIEhvc3QgaGVhZGVyCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5ob3N0LmZpbmQoJzonKSA+PSAwOgorICAgICAgICAgICAgICAgICAgICBpZiBob3N0LmZpbmQoJzonKSA+PSAwOgogICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9lbmMgPSBiJ1snICsgaG9zdF9lbmMgKyBiJ10nCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5wb3J0ID09IHNlbGYuZGVmYXVsdF9wb3J0OgorICAgICAgICAgICAgICAgICAgICBpZiBwb3J0ID09IHNlbGYuZGVmYXVsdF9wb3J0OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wdXRoZWFkZXIoJ0hvc3QnLCBob3N0X2VuYykKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfZW5jID0gaG9zdF9lbmMuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsICIlczolcyIgJSAoaG9zdF9lbmMsIHNlbGYucG9ydCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignSG9zdCcsICIlczolcyIgJSAoaG9zdF9lbmMsIHBvcnQpKQogCiAgICAgICAgICAgICAjIG5vdGU6IHdlIGFyZSBhc3N1bWluZyB0aGF0IGNsaWVudHMgd2lsbCBub3QgYXR0ZW1wdCB0byBzZXQgdGhlc2UKICAgICAgICAgICAgICMgICAgICAgaGVhZGVycyBzaW5jZSAqdGhpcyogbGlicmFyeSBtdXN0IGRlYWwgd2l0aCB0aGUKQEAgLTEwMzUsMTIgKzEwOTksMjAgQEAKIAogICAgICAgICBpZiBoYXNhdHRyKGhlYWRlciwgJ2VuY29kZScpOgogICAgICAgICAgICAgaGVhZGVyID0gaGVhZGVyLmVuY29kZSgnYXNjaWknKQorCisgICAgICAgIGlmIG5vdCBfaXNfbGVnYWxfaGVhZGVyX25hbWUoaGVhZGVyKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgaGVhZGVyIG5hbWUgJXInICUgKGhlYWRlciwpKQorCiAgICAgICAgIHZhbHVlcyA9IGxpc3QodmFsdWVzKQogICAgICAgICBmb3IgaSwgb25lX3ZhbHVlIGluIGVudW1lcmF0ZSh2YWx1ZXMpOgogICAgICAgICAgICAgaWYgaGFzYXR0cihvbmVfdmFsdWUsICdlbmNvZGUnKToKICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSBvbmVfdmFsdWUuZW5jb2RlKCdsYXRpbi0xJykKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShvbmVfdmFsdWUsIGludCk6CiAgICAgICAgICAgICAgICAgdmFsdWVzW2ldID0gc3RyKG9uZV92YWx1ZSkuZW5jb2RlKCdhc2NpaScpCisKKyAgICAgICAgICAgIGlmIF9pc19pbGxlZ2FsX2hlYWRlcl92YWx1ZSh2YWx1ZXNbaV0pOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlICVyJyAlICh2YWx1ZXNbaV0sKSkKKwogICAgICAgICB2YWx1ZSA9IGInXHJcblx0Jy5qb2luKHZhbHVlcykKICAgICAgICAgaGVhZGVyID0gaGVhZGVyICsgYic6ICcgKyB2YWx1ZQogICAgICAgICBzZWxmLl9vdXRwdXQoaGVhZGVyKQpAQCAtMTA2NCwxOSArMTEzNiwyNiBAQAogICAgICAgICAiIiJTZW5kIGEgY29tcGxldGUgcmVxdWVzdCB0byB0aGUgc2VydmVyLiIiIgogICAgICAgICBzZWxmLl9zZW5kX3JlcXVlc3QobWV0aG9kLCB1cmwsIGJvZHksIGhlYWRlcnMpCiAKLSAgICBkZWYgX3NldF9jb250ZW50X2xlbmd0aChzZWxmLCBib2R5KToKLSAgICAgICAgIyBTZXQgdGhlIGNvbnRlbnQtbGVuZ3RoIGJhc2VkIG9uIHRoZSBib2R5LgorICAgIGRlZiBfc2V0X2NvbnRlbnRfbGVuZ3RoKHNlbGYsIGJvZHksIG1ldGhvZCk6CisgICAgICAgICMgU2V0IHRoZSBjb250ZW50LWxlbmd0aCBiYXNlZCBvbiB0aGUgYm9keS4gSWYgdGhlIGJvZHkgaXMgImVtcHR5Iiwgd2UKKyAgICAgICAgIyBzZXQgQ29udGVudC1MZW5ndGg6IDAgZm9yIG1ldGhvZHMgdGhhdCBleHBlY3QgYSBib2R5IChSRkMgNzIzMCwKKyAgICAgICAgIyBTZWN0aW9uIDMuMy4yKS4gSWYgdGhlIGJvZHkgaXMgc2V0IGZvciBvdGhlciBtZXRob2RzLCB3ZSBzZXQgdGhlCisgICAgICAgICMgaGVhZGVyIHByb3ZpZGVkIHdlIGNhbiBmaWd1cmUgb3V0IHdoYXQgdGhlIGxlbmd0aCBpcy4KICAgICAgICAgdGhlbGVuID0gTm9uZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0aGVsZW4gPSBzdHIobGVuKGJvZHkpKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIHRlOgotICAgICAgICAgICAgIyBJZiB0aGlzIGlzIGEgZmlsZS1saWtlIG9iamVjdCwgdHJ5IHRvCi0gICAgICAgICAgICAjIGZzdGF0IGl0cyBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgbWV0aG9kX2V4cGVjdHNfYm9keSA9IG1ldGhvZC51cHBlcigpIGluIF9NRVRIT0RTX0VYUEVDVElOR19CT0RZCisgICAgICAgIGlmIGJvZHkgaXMgTm9uZSBhbmQgbWV0aG9kX2V4cGVjdHNfYm9keToKKyAgICAgICAgICAgIHRoZWxlbiA9ICcwJworICAgICAgICBlbGlmIGJvZHkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdGhlbGVuID0gc3RyKG9zLmZzdGF0KGJvZHkuZmlsZW5vKCkpLnN0X3NpemUpCi0gICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKLSAgICAgICAgICAgICAgICAjIERvbid0IHNlbmQgYSBsZW5ndGggaWYgdGhpcyBmYWlsZWQKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOiBwcmludCgiQ2Fubm90IHN0YXQhISIpCisgICAgICAgICAgICAgICAgdGhlbGVuID0gc3RyKGxlbihib2R5KSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICAgICAgIyBJZiB0aGlzIGlzIGEgZmlsZS1saWtlIG9iamVjdCwgdHJ5IHRvCisgICAgICAgICAgICAgICAgIyBmc3RhdCBpdHMgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0aGVsZW4gPSBzdHIob3MuZnN0YXQoYm9keS5maWxlbm8oKSkuc3Rfc2l6ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBzZW5kIGEgbGVuZ3RoIGlmIHRoaXMgZmFpbGVkCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6IHByaW50KCJDYW5ub3Qgc3RhdCEhIikKIAogICAgICAgICBpZiB0aGVsZW4gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcignQ29udGVudC1MZW5ndGgnLCB0aGVsZW4pCkBAIC0xMDkyLDggKzExNzEsOCBAQAogCiAgICAgICAgIHNlbGYucHV0cmVxdWVzdChtZXRob2QsIHVybCwgKipza2lwcykKIAotICAgICAgICBpZiBib2R5IGlzIG5vdCBOb25lIGFuZCAoJ2NvbnRlbnQtbGVuZ3RoJyBub3QgaW4gaGVhZGVyX25hbWVzKToKLSAgICAgICAgICAgIHNlbGYuX3NldF9jb250ZW50X2xlbmd0aChib2R5KQorICAgICAgICBpZiAnY29udGVudC1sZW5ndGgnIG5vdCBpbiBoZWFkZXJfbmFtZXM6CisgICAgICAgICAgICBzZWxmLl9zZXRfY29udGVudF9sZW5ndGgoYm9keSwgbWV0aG9kKQogICAgICAgICBmb3IgaGRyLCB2YWx1ZSBpbiBoZWFkZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLnB1dGhlYWRlcihoZHIsIHZhbHVlKQogICAgICAgICBpZiBpc2luc3RhbmNlKGJvZHksIHN0cik6CkBAIC0xMTQ0LDE4ICsxMjIzLDIyIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXNwb25zZSA9IHNlbGYucmVzcG9uc2VfY2xhc3Moc2VsZi5zb2NrLCBtZXRob2Q9c2VsZi5fbWV0aG9kKQogCi0gICAgICAgIHJlc3BvbnNlLmJlZ2luKCkKLSAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLndpbGxfY2xvc2UgIT0gX1VOS05PV04KLSAgICAgICAgc2VsZi5fX3N0YXRlID0gX0NTX0lETEUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmVzcG9uc2UuYmVnaW4oKQorICAgICAgICAgICAgYXNzZXJ0IHJlc3BvbnNlLndpbGxfY2xvc2UgIT0gX1VOS05PV04KKyAgICAgICAgICAgIHNlbGYuX19zdGF0ZSA9IF9DU19JRExFCiAKLSAgICAgICAgaWYgcmVzcG9uc2Uud2lsbF9jbG9zZToKLSAgICAgICAgICAgICMgdGhpcyBlZmZlY3RpdmVseSBwYXNzZXMgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHJlc3BvbnNlCi0gICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgcmVtZW1iZXIgdGhpcywgc28gd2UgY2FuIHRlbGwgd2hlbiBpdCBpcyBjb21wbGV0ZQotICAgICAgICAgICAgc2VsZi5fX3Jlc3BvbnNlID0gcmVzcG9uc2UKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlLndpbGxfY2xvc2U6CisgICAgICAgICAgICAgICAgIyB0aGlzIGVmZmVjdGl2ZWx5IHBhc3NlcyB0aGUgY29ubmVjdGlvbiB0byB0aGUgcmVzcG9uc2UKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyByZW1lbWJlciB0aGlzLCBzbyB3ZSBjYW4gdGVsbCB3aGVuIGl0IGlzIGNvbXBsZXRlCisgICAgICAgICAgICAgICAgc2VsZi5fX3Jlc3BvbnNlID0gcmVzcG9uc2UKIAotICAgICAgICByZXR1cm4gcmVzcG9uc2UKKyAgICAgICAgICAgIHJldHVybiByZXNwb25zZQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICByZXNwb25zZS5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQogCiB0cnk6CiAgICAgaW1wb3J0IHNzbApAQCAtMTE3MCwyMCArMTI1MywxOSBAQAogICAgICAgICAjIFhYWCBTaG91bGQga2V5X2ZpbGUgYW5kIGNlcnRfZmlsZSBiZSBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBjb250ZXh0PwogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0PU5vbmUsIGtleV9maWxlPU5vbmUsIGNlcnRfZmlsZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgc3RyaWN0PV9zdHJpY3Rfc2VudGluZWwsIHRpbWVvdXQ9c29ja2V0Ll9HTE9CQUxfREVGQVVMVF9USU1FT1VULAotICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3M9Tm9uZSwgKiwgY29udGV4dD1Ob25lLCBjaGVja19ob3N0bmFtZT1Ob25lKToKLSAgICAgICAgICAgIHN1cGVyKEhUVFBTQ29ubmVjdGlvbiwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydCwgc3RyaWN0LCB0aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgdGltZW91dD1zb2NrZXQuX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcz1Ob25lLCAqLCBjb250ZXh0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZT1Ob25lKToKKyAgICAgICAgICAgIHN1cGVyKEhUVFBTQ29ubmVjdGlvbiwgc2VsZikuX19pbml0X18oaG9zdCwgcG9ydCwgdGltZW91dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3MpCiAgICAgICAgICAgICBzZWxmLmtleV9maWxlID0ga2V5X2ZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydF9maWxlID0gY2VydF9maWxlCiAgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgIyBTb21lIHJlYXNvbmFibGUgZGVmYXVsdHMKLSAgICAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX2RlZmF1bHRfaHR0cHNfY29udGV4dCgpCiAgICAgICAgICAgICB3aWxsX3ZlcmlmeSA9IGNvbnRleHQudmVyaWZ5X21vZGUgIT0gc3NsLkNFUlRfTk9ORQogICAgICAgICAgICAgaWYgY2hlY2tfaG9zdG5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBjaGVja19ob3N0bmFtZSA9IHdpbGxfdmVyaWZ5Ci0gICAgICAgICAgICBlbGlmIGNoZWNrX2hvc3RuYW1lIGFuZCBub3Qgd2lsbF92ZXJpZnk6CisgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWUgPSBjb250ZXh0LmNoZWNrX2hvc3RuYW1lCisgICAgICAgICAgICBpZiBjaGVja19ob3N0bmFtZSBhbmQgbm90IHdpbGxfdmVyaWZ5OgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNoZWNrX2hvc3RuYW1lIG5lZWRzIGEgU1NMIGNvbnRleHQgd2l0aCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZWl0aGVyIENFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRCIpCiAgICAgICAgICAgICBpZiBrZXlfZmlsZSBvciBjZXJ0X2ZpbGU6CkBAIC0xMTk0LDIzICsxMjc2LDIyIEBACiAgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgogICAgICAgICAgICAgIkNvbm5lY3QgdG8gYSBob3N0IG9uIGEgZ2l2ZW4gKFNTTCkgcG9ydC4iCiAKLSAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50aW1lb3V0LCBzZWxmLnNvdXJjZV9hZGRyZXNzKQorICAgICAgICAgICAgc3VwZXIoKS5jb25uZWN0KCkKIAogICAgICAgICAgICAgaWYgc2VsZi5fdHVubmVsX2hvc3Q6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gc29jawotICAgICAgICAgICAgICAgIHNlbGYuX3R1bm5lbCgpCisgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5fdHVubmVsX2hvc3QKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lID0gc2VsZi5ob3N0CiAKLSAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSA9IHNlbGYuaG9zdCBpZiBzc2wuSEFTX1NOSSBlbHNlIE5vbmUKLSAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NvbnRleHQud3JhcF9zb2NrZXQoc29jaywKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYuX2NvbnRleHQud3JhcF9zb2NrZXQoc2VsZi5zb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2NoZWNrX2hvc3RuYW1lOgotICAgICAgICAgICAgICAgICAgICBzc2wubWF0Y2hfaG9zdG5hbWUoc2VsZi5zb2NrLmdldHBlZXJjZXJ0KCksIHNlbGYuaG9zdCkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCi0gICAgICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlbGYuX2NoZWNrX2hvc3RuYW1lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc3NsLm1hdGNoX2hvc3RuYW1lKHNlbGYuc29jay5nZXRwZWVyY2VydCgpLCBzZXJ2ZXJfaG9zdG5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBfX2FsbF9fLmFwcGVuZCgiSFRUUFNDb25uZWN0aW9uIikKIApkaWZmIC0tZ2l0IGEvTGliL2h0dHAvY29va2llamFyLnB5IGIvTGliL2h0dHAvY29va2llamFyLnB5CmluZGV4IDlmY2Q0YzYuLmNhZDZiM2EgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL2Nvb2tpZWphci5weQorKysgYi9MaWIvaHR0cC9jb29raWVqYXIucHkKQEAgLTQyMywxMCArNDIzLDEwIEBACiAgICAgVGFrZXMgYSBsaXN0IG9mIGxpc3RzIG9mIChrZXksIHZhbHVlKSBwYWlycyBhbmQgcHJvZHVjZXMgYSBzaW5nbGUgaGVhZGVyCiAgICAgdmFsdWUuICBBdHRyaWJ1dGUgdmFsdWVzIGFyZSBxdW90ZWQgaWYgbmVlZGVkLgogCi0gICAgPj4+IGpvaW5faGVhZGVyX3dvcmRzKFtbKCJ0ZXh0L3BsYWluIiwgTm9uZSksICgiY2hhcnNldCIsICJpc28tODg1OS8xIildXSkKLSAgICAndGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTg4NTkvMSInCi0gICAgPj4+IGpvaW5faGVhZGVyX3dvcmRzKFtbKCJ0ZXh0L3BsYWluIiwgTm9uZSldLCBbKCJjaGFyc2V0IiwgImlzby04ODU5LzEiKV1dKQotICAgICd0ZXh0L3BsYWluLCBjaGFyc2V0PSJpc28tODg1OS8xIicKKyAgICA+Pj4gam9pbl9oZWFkZXJfd29yZHMoW1soInRleHQvcGxhaW4iLCBOb25lKSwgKCJjaGFyc2V0IiwgImlzby04ODU5LTEiKV1dKQorICAgICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIicKKyAgICA+Pj4gam9pbl9oZWFkZXJfd29yZHMoW1soInRleHQvcGxhaW4iLCBOb25lKV0sIFsoImNoYXJzZXQiLCAiaXNvLTg4NTktMSIpXV0pCisgICAgJ3RleHQvcGxhaW4sIGNoYXJzZXQ9Imlzby04ODU5LTEiJwogCiAgICAgIiIiCiAgICAgaGVhZGVycyA9IFtdCkBAIC00NzIsMjYgKzQ3Miw0MiBAQAogICAgIGZvciBuc19oZWFkZXIgaW4gbnNfaGVhZGVyczoKICAgICAgICAgcGFpcnMgPSBbXQogICAgICAgICB2ZXJzaW9uX3NldCA9IEZhbHNlCi0gICAgICAgIGZvciBpaSwgcGFyYW0gaW4gZW51bWVyYXRlKHJlLnNwbGl0KHIiO1xzKiIsIG5zX2hlYWRlcikpOgotICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5yc3RyaXAoKQotICAgICAgICAgICAgaWYgcGFyYW0gPT0gIiI6IGNvbnRpbnVlCi0gICAgICAgICAgICBpZiAiPSIgbm90IGluIHBhcmFtOgotICAgICAgICAgICAgICAgIGssIHYgPSBwYXJhbSwgTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBrLCB2ID0gcmUuc3BsaXQociJccyo9XHMqIiwgcGFyYW0sIDEpCi0gICAgICAgICAgICAgICAgayA9IGsubHN0cmlwKCkKKworICAgICAgICAjIFhYWDogVGhlIGZvbGxvd2luZyBkb2VzIG5vdCBzdHJpY3RseSBhZGhlcmUgdG8gUkZDcyBpbiB0aGF0IGVtcHR5CisgICAgICAgICMgbmFtZXMgYW5kIHZhbHVlcyBhcmUgbGVnYWwgKHRoZSBmb3JtZXIgd2lsbCBvbmx5IGFwcGVhciBvbmNlIGFuZCB3aWxsCisgICAgICAgICMgYmUgb3ZlcndyaXR0ZW4gaWYgbXVsdGlwbGUgb2NjdXJyZW5jZXMgYXJlIHByZXNlbnQpLiBUaGlzIGlzCisgICAgICAgICMgbW9zdGx5IHRvIGRlYWwgd2l0aCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAgICAgICAgZm9yIGlpLCBwYXJhbSBpbiBlbnVtZXJhdGUobnNfaGVhZGVyLnNwbGl0KCc7JykpOgorICAgICAgICAgICAgcGFyYW0gPSBwYXJhbS5zdHJpcCgpCisKKyAgICAgICAgICAgIGtleSwgc2VwLCB2YWwgPSBwYXJhbS5wYXJ0aXRpb24oJz0nKQorICAgICAgICAgICAga2V5ID0ga2V5LnN0cmlwKCkKKworICAgICAgICAgICAgaWYgbm90IGtleToKKyAgICAgICAgICAgICAgICBpZiBpaSA9PSAwOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICMgYWxsb3cgZm9yIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBwcmVzZW50IGFuZCBlbXB0eSBhbmQgbWlzc2luZworICAgICAgICAgICAgIyBhbHRvZ2V0aGVyCisgICAgICAgICAgICB2YWwgPSB2YWwuc3RyaXAoKSBpZiBzZXAgZWxzZSBOb25lCisKICAgICAgICAgICAgIGlmIGlpICE9IDA6Ci0gICAgICAgICAgICAgICAgbGMgPSBrLmxvd2VyKCkKKyAgICAgICAgICAgICAgICBsYyA9IGtleS5sb3dlcigpCiAgICAgICAgICAgICAgICAgaWYgbGMgaW4ga25vd25fYXR0cnM6Ci0gICAgICAgICAgICAgICAgICAgIGsgPSBsYwotICAgICAgICAgICAgICAgIGlmIGsgPT0gInZlcnNpb24iOgorICAgICAgICAgICAgICAgICAgICBrZXkgPSBsYworCisgICAgICAgICAgICAgICAgaWYga2V5ID09ICJ2ZXJzaW9uIjoKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGFuIFJGQyAyMTA5IGNvb2tpZS4KLSAgICAgICAgICAgICAgICAgICAgdiA9IHN0cmlwX3F1b3Rlcyh2KQorICAgICAgICAgICAgICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBzdHJpcF9xdW90ZXModmFsKQogICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uX3NldCA9IFRydWUKLSAgICAgICAgICAgICAgICBpZiBrID09ICJleHBpcmVzIjoKKyAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSAiZXhwaXJlcyI6CiAgICAgICAgICAgICAgICAgICAgICMgY29udmVydCBleHBpcmVzIGRhdGUgdG8gc2Vjb25kcyBzaW5jZSBlcG9jaAotICAgICAgICAgICAgICAgICAgICB2ID0gaHR0cDJ0aW1lKHN0cmlwX3F1b3Rlcyh2KSkgICMgTm9uZSBpZiBpbnZhbGlkCi0gICAgICAgICAgICBwYWlycy5hcHBlbmQoKGssIHYpKQorICAgICAgICAgICAgICAgICAgICBpZiB2YWwgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSBodHRwMnRpbWUoc3RyaXBfcXVvdGVzKHZhbCkpICAjIE5vbmUgaWYgaW52YWxpZAorICAgICAgICAgICAgcGFpcnMuYXBwZW5kKChrZXksIHZhbCkpCiAKICAgICAgICAgaWYgcGFpcnM6CiAgICAgICAgICAgICBpZiBub3QgdmVyc2lvbl9zZXQ6CkBAIC03NDIsNyArNzU4LDcgQEAKICAgICAgICAgICAgICAgICAgKToKIAogICAgICAgICBpZiB2ZXJzaW9uIGlzIG5vdCBOb25lOiB2ZXJzaW9uID0gaW50KHZlcnNpb24pCi0gICAgICAgIGlmIGV4cGlyZXMgaXMgbm90IE5vbmU6IGV4cGlyZXMgPSBpbnQoZXhwaXJlcykKKyAgICAgICAgaWYgZXhwaXJlcyBpcyBub3QgTm9uZTogZXhwaXJlcyA9IGludChmbG9hdChleHBpcmVzKSkKICAgICAgICAgaWYgcG9ydCBpcyBOb25lIGFuZCBwb3J0X3NwZWNpZmllZCBpcyBUcnVlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaWYgcG9ydCBpcyBOb25lLCBwb3J0X3NwZWNpZmllZCBtdXN0IGJlIGZhbHNlIikKIApAQCAtMTE5Myw4ICsxMjA5LDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1hcHBpbmcgPSBUcnVlCi0gICAgICAgICAgICBmb3Igc3Vib2JqIGluIGRlZXB2YWx1ZXMob2JqKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzdWJvYmoKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZGVlcHZhbHVlcyhvYmopCiAgICAgICAgIGlmIG5vdCBtYXBwaW5nOgogICAgICAgICAgICAgeWllbGQgb2JqCiAKQEAgLTE0MjIsNyArMTQzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICAjIGNvbnZlcnQgUkZDIDI5NjUgTWF4LUFnZSB0byBzZWNvbmRzIHNpbmNlIGVwb2NoCiAgICAgICAgICAgICAgICAgICAgICMgWFhYIFN0cmljdGx5IHlvdSdyZSBzdXBwb3NlZCB0byBmb2xsb3cgUkZDIDI2MTYKLSAgICAgICAgICAgICAgICAgICAgIyAgIGFnZS1jYWxjdWxhdGlvbiBydWxlcy4gIFJlbWVtYmVyIHRoYXQgemVybyBNYXgtQWdlIGlzIGEKKyAgICAgICAgICAgICAgICAgICAgIyAgIGFnZS1jYWxjdWxhdGlvbiBydWxlcy4gIFJlbWVtYmVyIHRoYXQgemVybyBNYXgtQWdlCiAgICAgICAgICAgICAgICAgICAgICMgICBpcyBhIHJlcXVlc3QgdG8gZGlzY2FyZCAob2xkIGFuZCBuZXcpIGNvb2tpZSwgdGhvdWdoLgogICAgICAgICAgICAgICAgICAgICBrID0gImV4cGlyZXMiCiAgICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLl9ub3cgKyB2CkBAIC0xNzIzLDE2ICsxNzM4LDE2IEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByID0gW10KICAgICAgICAgZm9yIGNvb2tpZSBpbiBzZWxmOiByLmFwcGVuZChyZXByKGNvb2tpZSkpCi0gICAgICAgIHJldHVybiAiPCVzWyVzXT4iICUgKHNlbGYuX19jbGFzc19fLCAiLCAiLmpvaW4ocikpCisgICAgICAgIHJldHVybiAiPCVzWyVzXT4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAiLCAiLmpvaW4ocikpCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgciA9IFtdCiAgICAgICAgIGZvciBjb29raWUgaW4gc2VsZjogci5hcHBlbmQoc3RyKGNvb2tpZSkpCi0gICAgICAgIHJldHVybiAiPCVzWyVzXT4iICUgKHNlbGYuX19jbGFzc19fLCAiLCAiLmpvaW4ocikpCisgICAgICAgIHJldHVybiAiPCVzWyVzXT4iICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCAiLCAiLmpvaW4ocikpCiAKIAotIyBkZXJpdmVzIGZyb20gSU9FcnJvciBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi40LjAKLWNsYXNzIExvYWRFcnJvcihJT0Vycm9yKTogcGFzcworIyBkZXJpdmVzIGZyb20gT1NFcnJvciBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgd2l0aCBQeXRob24gMi40LjAKK2NsYXNzIExvYWRFcnJvcihPU0Vycm9yKTogcGFzcwogCiBjbGFzcyBGaWxlQ29va2llSmFyKENvb2tpZUphcik6CiAgICAgIiIiQ29va2llSmFyIHRoYXQgY2FuIGJlIGxvYWRlZCBmcm9tIGFuZCBzYXZlZCB0byBhIGZpbGUuIiIiCkBAIC0xNzYyLDE3ICsxNzc3LDE0IEBACiAgICAgICAgICAgICBpZiBzZWxmLmZpbGVuYW1lIGlzIG5vdCBOb25lOiBmaWxlbmFtZSA9IHNlbGYuZmlsZW5hbWUKICAgICAgICAgICAgIGVsc2U6IHJhaXNlIFZhbHVlRXJyb3IoTUlTU0lOR19GSUxFTkFNRV9URVhUKQogCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZjoKICAgICAgICAgICAgIHNlbGYuX3JlYWxseV9sb2FkKGYsIGZpbGVuYW1lLCBpZ25vcmVfZGlzY2FyZCwgaWdub3JlX2V4cGlyZXMpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiByZXZlcnQoc2VsZiwgZmlsZW5hbWU9Tm9uZSwKICAgICAgICAgICAgICAgIGlnbm9yZV9kaXNjYXJkPUZhbHNlLCBpZ25vcmVfZXhwaXJlcz1GYWxzZSk6CiAgICAgICAgICIiIkNsZWFyIGFsbCBjb29raWVzIGFuZCByZWxvYWQgY29va2llcyBmcm9tIGEgc2F2ZWQgZmlsZS4KIAotICAgICAgICBSYWlzZXMgTG9hZEVycm9yIChvciBJT0Vycm9yKSBpZiByZXZlcnNpb24gaXMgbm90IHN1Y2Nlc3NmdWw7IHRoZQorICAgICAgICBSYWlzZXMgTG9hZEVycm9yIChvciBPU0Vycm9yKSBpZiByZXZlcnNpb24gaXMgbm90IHN1Y2Nlc3NmdWw7IHRoZQogICAgICAgICBvYmplY3QncyBzdGF0ZSB3aWxsIG5vdCBiZSBhbHRlcmVkIGlmIHRoaXMgaGFwcGVucy4KIAogICAgICAgICAiIiIKQEAgLTE3ODcsNyArMTc5OSw3IEBACiAgICAgICAgICAgICBzZWxmLl9jb29raWVzID0ge30KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmxvYWQoZmlsZW5hbWUsIGlnbm9yZV9kaXNjYXJkLCBpZ25vcmVfZXhwaXJlcykKLSAgICAgICAgICAgIGV4Y2VwdCAoTG9hZEVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuX2Nvb2tpZXMgPSBvbGRfc3RhdGUKICAgICAgICAgICAgICAgICByYWlzZQogCkBAIC0xNzk2LDcgKzE4MDgsNyBAQAogCiAKIGRlZiBsd3BfY29va2llX3N0cihjb29raWUpOgotICAgICIiIlJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgQ29va2llIGluIGFuIHRoZSBMV1AgY29va2llIGZpbGUgZm9ybWF0LgorICAgICIiIlJldHVybiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgQ29va2llIGluIHRoZSBMV1AgY29va2llIGZpbGUgZm9ybWF0LgogCiAgICAgQWN0dWFsbHksIHRoZSBmb3JtYXQgaXMgZXh0ZW5kZWQgYSBiaXQgLS0gc2VlIG1vZHVsZSBkb2NzdHJpbmcuCiAKQEAgLTE4NTcsMTUgKzE4NjksMTIgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZmlsZW5hbWUgaXMgbm90IE5vbmU6IGZpbGVuYW1lID0gc2VsZi5maWxlbmFtZQogICAgICAgICAgICAgZWxzZTogcmFpc2UgVmFsdWVFcnJvcihNSVNTSU5HX0ZJTEVOQU1FX1RFWFQpCiAKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJ3IikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3IikgYXMgZjoKICAgICAgICAgICAgICMgVGhlcmUgcmVhbGx5IGlzbid0IGFuIExXUCBDb29raWVzIDIuMCBmb3JtYXQsIGJ1dCB0aGlzIGluZGljYXRlcwogICAgICAgICAgICAgIyB0aGF0IHRoZXJlIGlzIGV4dHJhIGluZm9ybWF0aW9uIGluIGhlcmUgKGRvbWFpbl9kb3QgYW5kCiAgICAgICAgICAgICAjIHBvcnRfc3BlYykgd2hpbGUgc3RpbGwgYmVpbmcgY29tcGF0aWJsZSB3aXRoIGxpYnd3dy1wZXJsLCBJIGhvcGUuCiAgICAgICAgICAgICBmLndyaXRlKCIjTFdQLUNvb2tpZXMtMi4wXG4iKQogICAgICAgICAgICAgZi53cml0ZShzZWxmLmFzX2x3cF9zdHIoaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogCiAgICAgZGVmIF9yZWFsbHlfbG9hZChzZWxmLCBmLCBmaWxlbmFtZSwgaWdub3JlX2Rpc2NhcmQsIGlnbm9yZV9leHBpcmVzKToKICAgICAgICAgbWFnaWMgPSBmLnJlYWRsaW5lKCkKQEAgLTE5MzgsOCArMTk0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpZ25vcmVfZXhwaXJlcyBhbmQgYy5pc19leHBpcmVkKG5vdyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNldF9jb29raWUoYykKLQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgX3dhcm5fdW5oYW5kbGVkX2V4Y2VwdGlvbigpCkBAIC0yMDQ1LDcgKzIwNTMsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIHNlbGYuc2V0X2Nvb2tpZShjKQogCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBfd2Fybl91bmhhbmRsZWRfZXhjZXB0aW9uKCkKQEAgLTIwNTcsOCArMjA2NSw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLmZpbGVuYW1lIGlzIG5vdCBOb25lOiBmaWxlbmFtZSA9IHNlbGYuZmlsZW5hbWUKICAgICAgICAgICAgIGVsc2U6IHJhaXNlIFZhbHVlRXJyb3IoTUlTU0lOR19GSUxFTkFNRV9URVhUKQogCi0gICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHNlbGYuaGVhZGVyKQogICAgICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKICAgICAgICAgICAgIGZvciBjb29raWUgaW4gc2VsZjoKQEAgLTIwODcsNSArMjA5NCwzIEBACiAgICAgICAgICAgICAgICAgICAgICJcdCIuam9pbihbY29va2llLmRvbWFpbiwgaW5pdGlhbF9kb3QsIGNvb2tpZS5wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3VyZSwgZXhwaXJlcywgbmFtZSwgdmFsdWVdKSsKICAgICAgICAgICAgICAgICAgICAgIlxuIikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvY29va2llcy5weSBiL0xpYi9odHRwL2Nvb2tpZXMucHkKaW5kZXggMDAwODJhNi4uNDgyZTYwMSAxMDA2NDQKLS0tIGEvTGliL2h0dHAvY29va2llcy5weQorKysgYi9MaWIvaHR0cC9jb29raWVzLnB5CkBAIC0zMzAsOCArMzMwLDggQEAKICAgICAgICAgImNvbW1lbnQiICA6ICJDb21tZW50IiwKICAgICAgICAgImRvbWFpbiIgICA6ICJEb21haW4iLAogICAgICAgICAibWF4LWFnZSIgIDogIk1heC1BZ2UiLAotICAgICAgICAic2VjdXJlIiAgIDogInNlY3VyZSIsCi0gICAgICAgICJodHRwb25seSIgOiAiaHR0cG9ubHkiLAorICAgICAgICAic2VjdXJlIiAgIDogIlNlY3VyZSIsCisgICAgICAgICJodHRwb25seSIgOiAiSHR0cE9ubHkiLAogICAgICAgICAidmVyc2lvbiIgIDogIlZlcnNpb24iLAogICAgIH0KIApAQCAtNDg3LDggKzQ4NywxMiBAQAogCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgogICAgICAgICAiIiJEaWN0aW9uYXJ5IHN0eWxlIGFzc2lnbm1lbnQuIiIiCi0gICAgICAgIHJ2YWwsIGN2YWwgPSBzZWxmLnZhbHVlX2VuY29kZSh2YWx1ZSkKLSAgICAgICAgc2VsZi5fX3NldChrZXksIHJ2YWwsIGN2YWwpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIE1vcnNlbCk6CisgICAgICAgICAgICAjIGFsbG93IGFzc2lnbm1lbnQgb2YgY29uc3RydWN0ZWQgTW9yc2VscyAoZS5nLiBmb3IgcGlja2xpbmcpCisgICAgICAgICAgICBkaWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBydmFsLCBjdmFsID0gc2VsZi52YWx1ZV9lbmNvZGUodmFsdWUpCisgICAgICAgICAgICBzZWxmLl9fc2V0KGtleSwgcnZhbCwgY3ZhbCkKIAogICAgIGRlZiBvdXRwdXQoc2VsZiwgYXR0cnM9Tm9uZSwgaGVhZGVyPSJTZXQtQ29va2llOiIsIHNlcD0iXDAxNVwwMTIiKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBIVFRQLiIiIgpkaWZmIC0tZ2l0IGEvTGliL2h0dHAvc2VydmVyLnB5IGIvTGliL2h0dHAvc2VydmVyLnB5CmluZGV4IDdkM2I1MDYuLjQ2ODgwOTYgMTAwNjQ0Ci0tLSBhL0xpYi9odHRwL3NlcnZlci5weQorKysgYi9MaWIvaHR0cC9zZXJ2ZXIucHkKQEAgLTgyLDExICs4MiwxMiBAQAogCiBfX3ZlcnNpb25fXyA9ICIwLjYiCiAKLV9fYWxsX18gPSBbIkhUVFBTZXJ2ZXIiLCAiQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciJdCitfX2FsbF9fID0gWworICAgICJIVFRQU2VydmVyIiwgIkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIiLAorICAgICJTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIiLCAiQ0dJSFRUUFJlcXVlc3RIYW5kbGVyIiwKK10KIAogaW1wb3J0IGh0bWwKLWltcG9ydCBlbWFpbC5tZXNzYWdlCi1pbXBvcnQgZW1haWwucGFyc2VyCiBpbXBvcnQgaHR0cC5jbGllbnQKIGltcG9ydCBpbwogaW1wb3J0IG1pbWV0eXBlcwpAQCAtMjcyLDcgKzI3Myw3IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmNvbW1hbmQgPSBOb25lICAjIHNldCBpbiBjYXNlIG9mIGVycm9yIG9uIHRoZSBmaXJzdCBsaW5lCiAgICAgICAgIHNlbGYucmVxdWVzdF92ZXJzaW9uID0gdmVyc2lvbiA9IHNlbGYuZGVmYXVsdF9yZXF1ZXN0X3ZlcnNpb24KLSAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMQorICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSBUcnVlCiAgICAgICAgIHJlcXVlc3RsaW5lID0gc3RyKHNlbGYucmF3X3JlcXVlc3RsaW5lLCAnaXNvLTg4NTktMScpCiAgICAgICAgIHJlcXVlc3RsaW5lID0gcmVxdWVzdGxpbmUucnN0cmlwKCdcclxuJykKICAgICAgICAgc2VsZi5yZXF1ZXN0bGluZSA9IHJlcXVlc3RsaW5lCkBAIC0yOTgsMTQgKzI5OSwxNCBAQAogICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDAsICJCYWQgcmVxdWVzdCB2ZXJzaW9uICglcikiICUgdmVyc2lvbikKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIGlmIHZlcnNpb25fbnVtYmVyID49ICgxLCAxKSBhbmQgc2VsZi5wcm90b2NvbF92ZXJzaW9uID49ICJIVFRQLzEuMSI6Ci0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMAorICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IEZhbHNlCiAgICAgICAgICAgICBpZiB2ZXJzaW9uX251bWJlciA+PSAoMiwgMCk6CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDUwNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgSFRUUCBWZXJzaW9uICglcykiICUgYmFzZV92ZXJzaW9uX251bWJlcikKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxpZiBsZW4od29yZHMpID09IDI6CiAgICAgICAgICAgICBjb21tYW5kLCBwYXRoID0gd29yZHMKLSAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IDEKKyAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IFRydWUKICAgICAgICAgICAgIGlmIGNvbW1hbmQgIT0gJ0dFVCc6CiAgICAgICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBIVFRQLzAuOSByZXF1ZXN0IHR5cGUgKCVyKSIgJSBjb21tYW5kKQpAQCAtMzI3LDEwICszMjgsMTAgQEAKIAogICAgICAgICBjb25udHlwZSA9IHNlbGYuaGVhZGVycy5nZXQoJ0Nvbm5lY3Rpb24nLCAiIikKICAgICAgICAgaWYgY29ubnR5cGUubG93ZXIoKSA9PSAnY2xvc2UnOgotICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMQorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQogICAgICAgICBlbGlmIChjb25udHlwZS5sb3dlcigpID09ICdrZWVwLWFsaXZlJyBhbmQKICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbF92ZXJzaW9uID49ICJIVFRQLzEuMSIpOgotICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMAorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gRmFsc2UKICAgICAgICAgIyBFeGFtaW5lIHRoZSBoZWFkZXJzIGFuZCBsb29rIGZvciBhbiBFeHBlY3QgZGlyZWN0aXZlCiAgICAgICAgIGV4cGVjdCA9IHNlbGYuaGVhZGVycy5nZXQoJ0V4cGVjdCcsICIiKQogICAgICAgICBpZiAoZXhwZWN0Lmxvd2VyKCkgPT0gIjEwMC1jb250aW51ZSIgYW5kCkBAIC0zNzUsNyArMzc2LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDE0KQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgaWYgbm90IHNlbGYucmF3X3JlcXVlc3RsaW5lOgotICAgICAgICAgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IDEKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSBUcnVlCiAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICBpZiBub3Qgc2VsZi5wYXJzZV9yZXF1ZXN0KCk6CiAgICAgICAgICAgICAgICAgIyBBbiBlcnJvciBjb2RlIGhhcyBiZWVuIHNlbnQsIGp1c3QgZXhpdApAQCAtMzkwLDIzICszOTEsMjggQEAKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0IGFzIGU6CiAgICAgICAgICAgICAjYSByZWFkIG9yIGEgd3JpdGUgdGltZWQgb3V0LiAgRGlzY2FyZCB0aGlzIGNvbm5lY3Rpb24KICAgICAgICAgICAgIHNlbGYubG9nX2Vycm9yKCJSZXF1ZXN0IHRpbWVkIG91dDogJXIiLCBlKQotICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gMQorICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICBkZWYgaGFuZGxlKHNlbGYpOgogICAgICAgICAiIiJIYW5kbGUgbXVsdGlwbGUgcmVxdWVzdHMgaWYgbmVjZXNzYXJ5LiIiIgotICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAxCisgICAgICAgIHNlbGYuY2xvc2VfY29ubmVjdGlvbiA9IFRydWUKIAogICAgICAgICBzZWxmLmhhbmRsZV9vbmVfcmVxdWVzdCgpCiAgICAgICAgIHdoaWxlIG5vdCBzZWxmLmNsb3NlX2Nvbm5lY3Rpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZV9vbmVfcmVxdWVzdCgpCiAKLSAgICBkZWYgc2VuZF9lcnJvcihzZWxmLCBjb2RlLCBtZXNzYWdlPU5vbmUpOgorICAgIGRlZiBzZW5kX2Vycm9yKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSwgZXhwbGFpbj1Ob25lKToKICAgICAgICAgIiIiU2VuZCBhbmQgbG9nIGFuIGVycm9yIHJlcGx5LgogCi0gICAgICAgIEFyZ3VtZW50cyBhcmUgdGhlIGVycm9yIGNvZGUsIGFuZCBhIGRldGFpbGVkIG1lc3NhZ2UuCi0gICAgICAgIFRoZSBkZXRhaWxlZCBtZXNzYWdlIGRlZmF1bHRzIHRvIHRoZSBzaG9ydCBlbnRyeSBtYXRjaGluZyB0aGUKLSAgICAgICAgcmVzcG9uc2UgY29kZS4KKyAgICAgICAgQXJndW1lbnRzIGFyZQorICAgICAgICAqIGNvZGU6ICAgIGFuIEhUVFAgZXJyb3IgY29kZQorICAgICAgICAgICAgICAgICAgIDMgZGlnaXRzCisgICAgICAgICogbWVzc2FnZTogYSBzaW1wbGUgb3B0aW9uYWwgMSBsaW5lIHJlYXNvbiBwaHJhc2UuCisgICAgICAgICAgICAgICAgICAgKiggSFRBQiAvIFNQIC8gVkNIQVIgLyAleDgwLUZGICkKKyAgICAgICAgICAgICAgICAgICBkZWZhdWx0cyB0byBzaG9ydCBlbnRyeSBtYXRjaGluZyB0aGUgcmVzcG9uc2UgY29kZQorICAgICAgICAqIGV4cGxhaW46IGEgZGV0YWlsZWQgbWVzc2FnZSBkZWZhdWx0cyB0byB0aGUgbG9uZyBlbnRyeQorICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nIHRoZSByZXNwb25zZSBjb2RlLgogCiAgICAgICAgIFRoaXMgc2VuZHMgYW4gZXJyb3IgcmVzcG9uc2UgKHNvIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZSBhbnkKICAgICAgICAgb3V0cHV0IGhhcyBiZWVuIGdlbmVyYXRlZCksIGxvZ3MgdGhlIGVycm9yLCBhbmQgZmluYWxseSBzZW5kcwpAQCAtNDIwLDE3ICs0MjYsMjAgQEAKICAgICAgICAgICAgIHNob3J0bXNnLCBsb25nbXNnID0gJz8/PycsICc/Pz8nCiAgICAgICAgIGlmIG1lc3NhZ2UgaXMgTm9uZToKICAgICAgICAgICAgIG1lc3NhZ2UgPSBzaG9ydG1zZwotICAgICAgICBleHBsYWluID0gbG9uZ21zZworICAgICAgICBpZiBleHBsYWluIGlzIE5vbmU6CisgICAgICAgICAgICBleHBsYWluID0gbG9uZ21zZwogICAgICAgICBzZWxmLmxvZ19lcnJvcigiY29kZSAlZCwgbWVzc2FnZSAlcyIsIGNvZGUsIG1lc3NhZ2UpCiAgICAgICAgICMgdXNpbmcgX3F1b3RlX2h0bWwgdG8gcHJldmVudCBDcm9zcyBTaXRlIFNjcmlwdGluZyBhdHRhY2tzIChzZWUgYnVnICMxMTAwMjAxKQogICAgICAgICBjb250ZW50ID0gKHNlbGYuZXJyb3JfbWVzc2FnZV9mb3JtYXQgJQotICAgICAgICAgICAgICAgICAgIHsnY29kZSc6IGNvZGUsICdtZXNzYWdlJzogX3F1b3RlX2h0bWwobWVzc2FnZSksICdleHBsYWluJzogZXhwbGFpbn0pCisgICAgICAgICAgICAgICAgICAgeydjb2RlJzogY29kZSwgJ21lc3NhZ2UnOiBfcXVvdGVfaHRtbChtZXNzYWdlKSwgJ2V4cGxhaW4nOiBfcXVvdGVfaHRtbChleHBsYWluKX0pCisgICAgICAgIGJvZHkgPSBjb250ZW50LmVuY29kZSgnVVRGLTgnLCAncmVwbGFjZScpCiAgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZShjb2RlLCBtZXNzYWdlKQogICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJDb250ZW50LVR5cGUiLCBzZWxmLmVycm9yX2NvbnRlbnRfdHlwZSkKICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJywgaW50KGxlbihib2R5KSkpCiAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQogICAgICAgICBpZiBzZWxmLmNvbW1hbmQgIT0gJ0hFQUQnIGFuZCBjb2RlID49IDIwMCBhbmQgY29kZSBub3QgaW4gKDIwNCwgMzA0KToKLSAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoY29udGVudC5lbmNvZGUoJ1VURi04JywgJ3JlcGxhY2UnKSkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoYm9keSkKIAogICAgIGRlZiBzZW5kX3Jlc3BvbnNlKHNlbGYsIGNvZGUsIG1lc3NhZ2U9Tm9uZSk6CiAgICAgICAgICIiIkFkZCB0aGUgcmVzcG9uc2UgaGVhZGVyIHRvIHRoZSBoZWFkZXJzIGJ1ZmZlciBhbmQgbG9nIHRoZQpAQCAtNDY5LDkgKzQ3OCw5IEBACiAKICAgICAgICAgaWYga2V5d29yZC5sb3dlcigpID09ICdjb25uZWN0aW9uJzoKICAgICAgICAgICAgIGlmIHZhbHVlLmxvd2VyKCkgPT0gJ2Nsb3NlJzoKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAxCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gVHJ1ZQogICAgICAgICAgICAgZWxpZiB2YWx1ZS5sb3dlcigpID09ICdrZWVwLWFsaXZlJzoKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX2Nvbm5lY3Rpb24gPSAwCisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9jb25uZWN0aW9uID0gRmFsc2UKIAogICAgIGRlZiBlbmRfaGVhZGVycyhzZWxmKToKICAgICAgICAgIiIiU2VuZCB0aGUgYmxhbmsgbGluZSBlbmRpbmcgdGhlIE1JTUUgaGVhZGVycy4iIiIKQEAgLTY5NSwxMCArNzA0LDE0IEBACiAgICAgICAgIHBhdGggPSBzZWxmLnRyYW5zbGF0ZV9wYXRoKHNlbGYucGF0aCkKICAgICAgICAgZiA9IE5vbmUKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLnBhdGguZW5kc3dpdGgoJy8nKToKKyAgICAgICAgICAgIHBhcnRzID0gdXJsbGliLnBhcnNlLnVybHNwbGl0KHNlbGYucGF0aCkKKyAgICAgICAgICAgIGlmIG5vdCBwYXJ0cy5wYXRoLmVuZHN3aXRoKCcvJyk6CiAgICAgICAgICAgICAgICAgIyByZWRpcmVjdCBicm93c2VyIC0gZG9pbmcgYmFzaWNhbGx5IHdoYXQgYXBhY2hlIGRvZXMKICAgICAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoMzAxKQotICAgICAgICAgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkxvY2F0aW9uIiwgc2VsZi5wYXRoICsgIi8iKQorICAgICAgICAgICAgICAgIG5ld19wYXJ0cyA9IChwYXJ0c1swXSwgcGFydHNbMV0sIHBhcnRzWzJdICsgJy8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0c1szXSwgcGFydHNbNF0pCisgICAgICAgICAgICAgICAgbmV3X3VybCA9IHVybGxpYi5wYXJzZS51cmx1bnNwbGl0KG5ld19wYXJ0cykKKyAgICAgICAgICAgICAgICBzZWxmLnNlbmRfaGVhZGVyKCJMb2NhdGlvbiIsIG5ld191cmwpCiAgICAgICAgICAgICAgICAgc2VsZi5lbmRfaGVhZGVycygpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGZvciBpbmRleCBpbiAiaW5kZXguaHRtbCIsICJpbmRleC5odG0iOgpAQCAtNzExLDcgKzcyNCw3IEBACiAgICAgICAgIGN0eXBlID0gc2VsZi5ndWVzc190eXBlKHBhdGgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJGaWxlIG5vdCBmb3VuZCIpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICB0cnk6CkBAIC03MzYsMTIgKzc0OSwxNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGlzdCA9IG9zLmxpc3RkaXIocGF0aCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig0MDQsICJObyBwZXJtaXNzaW9uIHRvIGxpc3QgZGlyZWN0b3J5IikKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGxpc3Quc29ydChrZXk9bGFtYmRhIGE6IGEubG93ZXIoKSkKICAgICAgICAgciA9IFtdCi0gICAgICAgIGRpc3BsYXlwYXRoID0gaHRtbC5lc2NhcGUodXJsbGliLnBhcnNlLnVucXVvdGUoc2VsZi5wYXRoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGlzcGxheXBhdGggPSB1cmxsaWIucGFyc2UudW5xdW90ZShzZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz0nc3Vycm9nYXRlcGFzcycpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CisgICAgICAgICAgICBkaXNwbGF5cGF0aCA9IHVybGxpYi5wYXJzZS51bnF1b3RlKHBhdGgpCisgICAgICAgIGRpc3BsYXlwYXRoID0gaHRtbC5lc2NhcGUoZGlzcGxheXBhdGgpCiAgICAgICAgIGVuYyA9IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQogICAgICAgICB0aXRsZSA9ICdEaXJlY3RvcnkgbGlzdGluZyBmb3IgJXMnICUgZGlzcGxheXBhdGgKICAgICAgICAgci5hcHBlbmQoJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxLy9FTiIgJwpAQCAtNzYzLDkgKzc4MSwxMSBAQAogICAgICAgICAgICAgICAgIGRpc3BsYXluYW1lID0gbmFtZSArICJAIgogICAgICAgICAgICAgICAgICMgTm90ZTogYSBsaW5rIHRvIGEgZGlyZWN0b3J5IGRpc3BsYXlzIHdpdGggQCBhbmQgbGlua3Mgd2l0aCAvCiAgICAgICAgICAgICByLmFwcGVuZCgnPGxpPjxhIGhyZWY9IiVzIj4lczwvYT48L2xpPicKLSAgICAgICAgICAgICAgICAgICAgJSAodXJsbGliLnBhcnNlLnF1b3RlKGxpbmtuYW1lKSwgaHRtbC5lc2NhcGUoZGlzcGxheW5hbWUpKSkKKyAgICAgICAgICAgICAgICAgICAgJSAodXJsbGliLnBhcnNlLnF1b3RlKGxpbmtuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzPSdzdXJyb2dhdGVwYXNzJyksCisgICAgICAgICAgICAgICAgICAgICAgIGh0bWwuZXNjYXBlKGRpc3BsYXluYW1lKSkpCiAgICAgICAgIHIuYXBwZW5kKCc8L3VsPlxuPGhyPlxuPC9ib2R5PlxuPC9odG1sPlxuJykKLSAgICAgICAgZW5jb2RlZCA9ICdcbicuam9pbihyKS5lbmNvZGUoZW5jKQorICAgICAgICBlbmNvZGVkID0gJ1xuJy5qb2luKHIpLmVuY29kZShlbmMsICdzdXJyb2dhdGVlc2NhcGUnKQogICAgICAgICBmID0gaW8uQnl0ZXNJTygpCiAgICAgICAgIGYud3JpdGUoZW5jb2RlZCkKICAgICAgICAgZi5zZWVrKDApCkBAIC03ODgsNyArODA4LDExIEBACiAgICAgICAgIHBhdGggPSBwYXRoLnNwbGl0KCcjJywxKVswXQogICAgICAgICAjIERvbid0IGZvcmdldCBleHBsaWNpdCB0cmFpbGluZyBzbGFzaCB3aGVuIG5vcm1hbGl6aW5nLiBJc3N1ZTE3MzI0CiAgICAgICAgIHRyYWlsaW5nX3NsYXNoID0gcGF0aC5yc3RyaXAoKS5lbmRzd2l0aCgnLycpCi0gICAgICAgIHBhdGggPSBwb3NpeHBhdGgubm9ybXBhdGgodXJsbGliLnBhcnNlLnVucXVvdGUocGF0aCkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhdGggPSB1cmxsaWIucGFyc2UudW5xdW90ZShwYXRoLCBlcnJvcnM9J3N1cnJvZ2F0ZXBhc3MnKQorICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgorICAgICAgICAgICAgcGF0aCA9IHVybGxpYi5wYXJzZS51bnF1b3RlKHBhdGgpCisgICAgICAgIHBhdGggPSBwb3NpeHBhdGgubm9ybXBhdGgocGF0aCkKICAgICAgICAgd29yZHMgPSBwYXRoLnNwbGl0KCcvJykKICAgICAgICAgd29yZHMgPSBmaWx0ZXIoTm9uZSwgd29yZHMpCiAgICAgICAgIHBhdGggPSBvcy5nZXRjd2QoKQpAQCAtODU3LDE5ICs4ODEsMjEgQEAKIGRlZiBfdXJsX2NvbGxhcHNlX3BhdGgocGF0aCk6CiAgICAgIiIiCiAgICAgR2l2ZW4gYSBVUkwgcGF0aCwgcmVtb3ZlIGV4dHJhICcvJ3MgYW5kICcuJyBwYXRoIGVsZW1lbnRzIGFuZCBjb2xsYXBzZQotICAgIGFueSAnLi4nIHJlZmVyZW5jZXMgYW5kIHJldHVybnMgYSBjb2xsbGFwc2VkIHBhdGguCisgICAgYW55ICcuLicgcmVmZXJlbmNlcyBhbmQgcmV0dXJucyBhIGNvbGxhcHNlZCBwYXRoLgogCiAgICAgSW1wbGVtZW50cyBzb21ldGhpbmcgYWtpbiB0byBSRkMtMjM5NiA1LjIgc3RlcCA2IHRvIHBhcnNlIHJlbGF0aXZlIHBhdGhzLgogICAgIFRoZSB1dGlsaXR5IG9mIHRoaXMgZnVuY3Rpb24gaXMgbGltaXRlZCB0byBpc19jZ2kgbWV0aG9kIGFuZCBoZWxwcwogICAgIHByZXZlbnRpbmcgc29tZSBzZWN1cml0eSBhdHRhY2tzLgogCi0gICAgUmV0dXJuczogQSB0dXBsZSBvZiAoaGVhZCwgdGFpbCkgd2hlcmUgdGFpbCBpcyBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaW5hbCAvCi0gICAgYW5kIGhlYWQgaXMgZXZlcnl0aGluZyBiZWZvcmUgaXQuICBIZWFkIHdpbGwgYWx3YXlzIHN0YXJ0IHdpdGggYSAnLycgYW5kLAotICAgIGlmIGl0IGNvbnRhaW5zIGFueXRoaW5nIGVsc2UsIG5ldmVyIGhhdmUgYSB0cmFpbGluZyAnLycuCisgICAgUmV0dXJuczogVGhlIHJlY29uc3RpdHV0ZWQgVVJMLCB3aGljaCB3aWxsIGFsd2F5cyBzdGFydCB3aXRoIGEgJy8nLgogCiAgICAgUmFpc2VzOiBJbmRleEVycm9yIGlmIHRvbyBtYW55ICcuLicgb2NjdXIgd2l0aGluIHRoZSBwYXRoLgogCiAgICAgIiIiCisgICAgIyBRdWVyeSBjb21wb25lbnQgc2hvdWxkIG5vdCBiZSBpbnZvbHZlZC4KKyAgICBwYXRoLCBfLCBxdWVyeSA9IHBhdGgucGFydGl0aW9uKCc/JykKKyAgICBwYXRoID0gdXJsbGliLnBhcnNlLnVucXVvdGUocGF0aCkKKwogICAgICMgU2ltaWxhciB0byBvcy5wYXRoLnNwbGl0KG9zLnBhdGgubm9ybXBhdGgocGF0aCkpIGJ1dCBzcGVjaWZpYyB0byBVUkwKICAgICAjIHBhdGggc2VtYW50aWNzIHJhdGhlciB0aGFuIGxvY2FsIG9wZXJhdGluZyBzeXN0ZW0gc2VtYW50aWNzLgogICAgIHBhdGhfcGFydHMgPSBwYXRoLnNwbGl0KCcvJykKQEAgLTg5MCw2ICs5MTYsOSBAQAogICAgIGVsc2U6CiAgICAgICAgIHRhaWxfcGFydCA9ICcnCiAKKyAgICBpZiBxdWVyeToKKyAgICAgICAgdGFpbF9wYXJ0ID0gJz8nLmpvaW4oKHRhaWxfcGFydCwgcXVlcnkpKQorCiAgICAgc3BsaXRwYXRoID0gKCcvJyArICcvJy5qb2luKGhlYWRfcGFydHMpLCB0YWlsX3BhcnQpCiAgICAgY29sbGFwc2VkX3BhdGggPSAiLyIuam9pbihzcGxpdHBhdGgpCiAKQEAgLTk3MSw3ICsxMDAwLDcgQEAKICAgICAgICAgKGFuZCB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYSAnLycgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nKS4KIAogICAgICAgICAiIiIKLSAgICAgICAgY29sbGFwc2VkX3BhdGggPSBfdXJsX2NvbGxhcHNlX3BhdGgodXJsbGliLnBhcnNlLnVucXVvdGUoc2VsZi5wYXRoKSkKKyAgICAgICAgY29sbGFwc2VkX3BhdGggPSBfdXJsX2NvbGxhcHNlX3BhdGgoc2VsZi5wYXRoKQogICAgICAgICBkaXJfc2VwID0gY29sbGFwc2VkX3BhdGguZmluZCgnLycsIDEpCiAgICAgICAgIGhlYWQsIHRhaWwgPSBjb2xsYXBzZWRfcGF0aFs6ZGlyX3NlcF0sIGNvbGxhcHNlZF9wYXRoW2Rpcl9zZXArMTpdCiAgICAgICAgIGlmIGhlYWQgaW4gc2VsZi5jZ2lfZGlyZWN0b3JpZXM6CkBAIC0xMDA4LDExICsxMDM3LDcgQEAKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICMgZmluZCBhbiBleHBsaWNpdCBxdWVyeSBzdHJpbmcsIGlmIHByZXNlbnQuCi0gICAgICAgIGkgPSByZXN0LnJmaW5kKCc/JykKLSAgICAgICAgaWYgaSA+PSAwOgotICAgICAgICAgICAgcmVzdCwgcXVlcnkgPSByZXN0WzppXSwgcmVzdFtpKzE6XQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcXVlcnkgPSAnJworICAgICAgICByZXN0LCBfLCBxdWVyeSA9IHJlc3QucGFydGl0aW9uKCc/JykKIAogICAgICAgICAjIGRpc3NlY3QgdGhlIHBhcnQgYWZ0ZXIgdGhlIGRpcmVjdG9yeSBuYW1lIGludG8gYSBzY3JpcHQgbmFtZSAmCiAgICAgICAgICMgYSBwb3NzaWJsZSBhZGRpdGlvbmFsIHBhdGgsIHRvIGJlIHN0b3JlZCBpbiBQQVRIX0lORk8uCkBAIC0xMTMwLDcgKzExNTUsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Muc2V0dWlkKG5vYm9keSkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBvcy5kdXAyKHNlbGYucmZpbGUuZmlsZW5vKCksIDApCiAgICAgICAgICAgICAgICAgb3MuZHVwMihzZWxmLndmaWxlLmZpbGVubygpLCAxKQpAQCAtMTE4MywxNSArMTIwOCwxNCBAQAogICAgICAgICAgICAgICAgIHNlbGYubG9nX21lc3NhZ2UoIkNHSSBzY3JpcHQgZXhpdGVkIE9LIikKIAogCi1kZWYgdGVzdChIYW5kbGVyQ2xhc3MgPSBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLAotICAgICAgICAgU2VydmVyQ2xhc3MgPSBIVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDApOgorZGVmIHRlc3QoSGFuZGxlckNsYXNzPUJhc2VIVFRQUmVxdWVzdEhhbmRsZXIsCisgICAgICAgICBTZXJ2ZXJDbGFzcz1IVFRQU2VydmVyLCBwcm90b2NvbD0iSFRUUC8xLjAiLCBwb3J0PTgwMDAsIGJpbmQ9IiIpOgogICAgICIiIlRlc3QgdGhlIEhUVFAgcmVxdWVzdCBoYW5kbGVyIGNsYXNzLgogCi0gICAgVGhpcyBydW5zIGFuIEhUVFAgc2VydmVyIG9uIHBvcnQgODAwMCAob3IgdGhlIGZpcnN0IGNvbW1hbmQgbGluZQotICAgIGFyZ3VtZW50KS4KKyAgICBUaGlzIHJ1bnMgYW4gSFRUUCBzZXJ2ZXIgb24gcG9ydCA4MDAwIChvciB0aGUgcG9ydCBhcmd1bWVudCkuCiAKICAgICAiIiIKLSAgICBzZXJ2ZXJfYWRkcmVzcyA9ICgnJywgcG9ydCkKKyAgICBzZXJ2ZXJfYWRkcmVzcyA9IChiaW5kLCBwb3J0KQogCiAgICAgSGFuZGxlckNsYXNzLnByb3RvY29sX3ZlcnNpb24gPSBwcm90b2NvbAogICAgIGh0dHBkID0gU2VydmVyQ2xhc3Moc2VydmVyX2FkZHJlc3MsIEhhbmRsZXJDbGFzcykKQEAgLTEyMDksMTIgKzEyMzMsMTYgQEAKICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1jZ2knLCBhY3Rpb249J3N0b3JlX3RydWUnLAogICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdSdW4gYXMgQ0dJIFNlcnZlcicpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iaW5kJywgJy1iJywgZGVmYXVsdD0nJywgbWV0YXZhcj0nQUREUkVTUycsCisgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTcGVjaWZ5IGFsdGVybmF0ZSBiaW5kIGFkZHJlc3MgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnW2RlZmF1bHQ6IGFsbCBpbnRlcmZhY2VzXScpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgncG9ydCcsIGFjdGlvbj0nc3RvcmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD04MDAwLCB0eXBlPWludCwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hcmdzPSc/JywKICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1NwZWNpZnkgYWx0ZXJuYXRlIHBvcnQgW2RlZmF1bHQ6IDgwMDBdJykKICAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQogICAgIGlmIGFyZ3MuY2dpOgotICAgICAgICB0ZXN0KEhhbmRsZXJDbGFzcz1DR0lIVFRQUmVxdWVzdEhhbmRsZXIsIHBvcnQ9YXJncy5wb3J0KQorICAgICAgICBoYW5kbGVyX2NsYXNzID0gQ0dJSFRUUFJlcXVlc3RIYW5kbGVyCiAgICAgZWxzZToKLSAgICAgICAgdGVzdChIYW5kbGVyQ2xhc3M9U2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyLCBwb3J0PWFyZ3MucG9ydCkKKyAgICAgICAgaGFuZGxlcl9jbGFzcyA9IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlcgorICAgIHRlc3QoSGFuZGxlckNsYXNzPWhhbmRsZXJfY2xhc3MsIHBvcnQ9YXJncy5wb3J0LCBiaW5kPWFyZ3MuYmluZCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0F1dG9Db21wbGV0ZS5weSBiL0xpYi9pZGxlbGliL0F1dG9Db21wbGV0ZS5weQppbmRleCBmMzY2MDMwLi5iMjA1MTJkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9BdXRvQ29tcGxldGUucHkKKysrIGIvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlLnB5CkBAIC0yMjYsMyArMjI2LDggQEAKICAgICAgICAgbmFtZXNwYWNlID0gc3lzLm1vZHVsZXMuY29weSgpCiAgICAgICAgIG5hbWVzcGFjZS51cGRhdGUoX19tYWluX18uX19kaWN0X18pCiAgICAgICAgIHJldHVybiBldmFsKG5hbWUsIG5hbWVzcGFjZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGZyb20gdW5pdHRlc3QgaW1wb3J0IG1haW4KKyAgICBtYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X2F1dG9jb21wbGV0ZScsIHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlV2luZG93LnB5IGIvTGliL2lkbGVsaWIvQXV0b0NvbXBsZXRlV2luZG93LnB5CmluZGV4IGY2NjZlYTYuLjJlZTY4NzggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0F1dG9Db21wbGV0ZVdpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9BdXRvQ29tcGxldGVXaW5kb3cucHkKQEAgLTE5Miw2ICsxOTIsNyBAQAogICAgICAgICBzY3JvbGxiYXIuY29uZmlnKGNvbW1hbmQ9bGlzdGJveC55dmlldykKICAgICAgICAgc2Nyb2xsYmFyLnBhY2soc2lkZT1SSUdIVCwgZmlsbD1ZKQogICAgICAgICBsaXN0Ym94LnBhY2soc2lkZT1MRUZULCBmaWxsPUJPVEgsIGV4cGFuZD1UcnVlKQorICAgICAgICBhY3cubGlmdCgpICAjIHdvcmsgYXJvdW5kIGJ1ZyBpbiBUayA4LjUuMTgrIChpc3N1ZSAjMjQ1NzApCiAKICAgICAgICAgIyBJbml0aWFsaXplIHRoZSBsaXN0Ym94IHNlbGVjdGlvbgogICAgICAgICBzZWxmLmxpc3Rib3guc2VsZWN0X3NldChzZWxmLl9iaW5hcnlfc2VhcmNoKHNlbGYuc3RhcnQpKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQXV0b0V4cGFuZC5weSBiL0xpYi9pZGxlbGliL0F1dG9FeHBhbmQucHkKaW5kZXggOWU5M2Q1Ny4uNzA1OTA1NCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvQXV0b0V4cGFuZC5weQorKysgYi9MaWIvaWRsZWxpYi9BdXRvRXhwYW5kLnB5CkBAIC0xLDMgKzEsMTcgQEAKKycnJ0NvbXBsZXRlIHRoZSBjdXJyZW50IHdvcmQgYmVmb3JlIHRoZSBjdXJzb3Igd2l0aCB3b3JkcyBpbiB0aGUgZWRpdG9yLgorCitFYWNoIG1lbnUgc2VsZWN0aW9uIG9yIHNob3J0Y3V0IGtleSBzZWxlY3Rpb24gcmVwbGFjZXMgdGhlIHdvcmQgd2l0aCBhCitkaWZmZXJlbnQgd29yZCB3aXRoIHRoZSBzYW1lIHByZWZpeC4gVGhlIHNlYXJjaCBmb3IgbWF0Y2hlcyBiZWdpbnMKK2JlZm9yZSB0aGUgdGFyZ2V0IGFuZCBtb3ZlcyB0b3dhcmQgdGhlIHRvcCBvZiB0aGUgZWRpdG9yLiBJdCB0aGVuIHN0YXJ0cworYWZ0ZXIgdGhlIGN1cnNvciBhbmQgbW92ZXMgZG93bi4gSXQgdGhlbiByZXR1cm5zIHRvIHRoZSBvcmlnaW5hbCB3b3JkIGFuZAordGhlIGN5Y2xlIHN0YXJ0cyBhZ2Fpbi4KKworQ2hhbmdpbmcgdGhlIGN1cnJlbnQgdGV4dCBsaW5lIG9yIGxlYXZpbmcgdGhlIGN1cnNvciBpbiBhIGRpZmZlcmVudAorcGxhY2UgYmVmb3JlIHJlcXVlc3RpbmcgdGhlIG5leHQgc2VsZWN0aW9uIGNhdXNlcyBBdXRvRXhwYW5kIHRvIHJlc2V0CitpdHMgc3RhdGUuCisKK1RoaXMgaXMgYW4gZXh0ZW5zaW9uIGZpbGUgYW5kIHRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlIG9mIEF1dG9FeHBhbmQuCisnJycKIGltcG9ydCBzdHJpbmcKIGltcG9ydCByZQogCkBAIC0yMCw2ICszNCw3IEBACiAgICAgICAgIHNlbGYuc3RhdGUgPSBOb25lCiAKICAgICBkZWYgZXhwYW5kX3dvcmRfZXZlbnQoc2VsZiwgZXZlbnQpOgorICAgICAgICAiUmVwbGFjZSB0aGUgY3VycmVudCB3b3JkIHdpdGggdGhlIG5leHQgZXhwYW5zaW9uLiIKICAgICAgICAgY3VyaW5zZXJ0ID0gc2VsZi50ZXh0LmluZGV4KCJpbnNlcnQiKQogICAgICAgICBjdXJsaW5lID0gc2VsZi50ZXh0LmdldCgiaW5zZXJ0IGxpbmVzdGFydCIsICJpbnNlcnQgbGluZWVuZCIpCiAgICAgICAgIGlmIG5vdCBzZWxmLnN0YXRlOgpAQCAtNDYsNiArNjEsNyBAQAogICAgICAgICByZXR1cm4gImJyZWFrIgogCiAgICAgZGVmIGdldHdvcmRzKHNlbGYpOgorICAgICAgICAiUmV0dXJuIGEgbGlzdCBvZiB3b3JkcyB0aGF0IG1hdGNoIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBjdXJzb3IuIgogICAgICAgICB3b3JkID0gc2VsZi5nZXRwcmV2d29yZCgpCiAgICAgICAgIGlmIG5vdCB3b3JkOgogICAgICAgICAgICAgcmV0dXJuIFtdCkBAIC03Niw4ICs5MiwxMyBAQAogICAgICAgICByZXR1cm4gd29yZHMKIAogICAgIGRlZiBnZXRwcmV2d29yZChzZWxmKToKKyAgICAgICAgIlJldHVybiB0aGUgd29yZCBwcmVmaXggYmVmb3JlIHRoZSBjdXJzb3IuIgogICAgICAgICBsaW5lID0gc2VsZi50ZXh0LmdldCgiaW5zZXJ0IGxpbmVzdGFydCIsICJpbnNlcnQiKQogICAgICAgICBpID0gbGVuKGxpbmUpCiAgICAgICAgIHdoaWxlIGkgPiAwIGFuZCBsaW5lW2ktMV0gaW4gc2VsZi53b3JkY2hhcnM6CiAgICAgICAgICAgICBpID0gaS0xCiAgICAgICAgIHJldHVybiBsaW5lW2k6XQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfYXV0b2V4cGFuZCcsIHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQmluZGluZ3MucHkgYi9MaWIvaWRsZWxpYi9CaW5kaW5ncy5weQppbmRleCA2NWMwMzE3Li5hYjI1ZmYxIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9CaW5kaW5ncy5weQorKysgYi9MaWIvaWRsZWxpYi9CaW5kaW5ncy5weQpAQCAtOCw5ICs4LDE2IEBACiB3aW5kb3dzLgogCiAiIiIKLWltcG9ydCBzeXMKK2Zyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IGZpbmRfc3BlYworCiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKLWZyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAorCisjICAgV2FybmluZzogbWVudWRlZnMgaXMgYWx0ZXJlZCBpbiBtYWNvc3hTdXBwb3J0Lm92ZXJyaWRlUm9vdE1lbnUoKQorIyAgIGFmdGVyIGl0IGlzIGRldGVybWluZWQgdGhhdCBhbiBPUyBYIEFxdWEgVGsgaXMgaW4gdXNlLAorIyAgIHdoaWNoIGNhbm5vdCBiZSBkb25lIHVudGlsIGFmdGVyIFRrKCkgaXMgZmlyc3QgY2FsbGVkLgorIyAgIERvIG5vdCBhbHRlciB0aGUgJ2ZpbGUnLCAnb3B0aW9ucycsIG9yICdoZWxwJyBjYXNjYWRlcyBoZXJlCisjICAgd2l0aG91dCBhbHRlcmluZyBvdmVycmlkZVJvb3RNZW51KCkgYXMgd2VsbC4KKyMgICAgICAgVE9ETzogTWFrZSB0aGlzIG1vcmUgcm9idXN0CiAKIG1lbnVkZWZzID0gWwogICMgdW5kZXJzY29yZSBwcmVmaXhlcyBjaGFyYWN0ZXIgdG8gdW5kZXJzY29yZQpAQCAtNzAsNyArNzcsNyBAQAogICAgKCchX0F1dG8tb3BlbiBTdGFjayBWaWV3ZXInLCAnPDx0b2dnbGUtaml0LXN0YWNrLXZpZXdlcj4+JyksCiAgICBdKSwKICAoJ29wdGlvbnMnLCBbCi0gICAoJ19Db25maWd1cmUgSURMRS4uLicsICc8PG9wZW4tY29uZmlnLWRpYWxvZz4+JyksCisgICAoJ0NvbmZpZ3VyZSBfSURMRScsICc8PG9wZW4tY29uZmlnLWRpYWxvZz4+JyksCiAgICBOb25lLAogICAgXSksCiAgKCdoZWxwJywgWwpAQCAtODEsMjcgKzg4LDcgQEAKICAgIF0pLAogXQogCi1pZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgotICAgICMgUnVubmluZyBhcyBhIHByb3BlciBNYWNPUyBhcHBsaWNhdGlvbiBidW5kbGUuIFRoaXMgYmxvY2sgcmVzdHJ1Y3R1cmVzCi0gICAgIyB0aGUgbWVudXMgYSBsaXR0bGUgdG8gbWFrZSB0aGVtIGNvbmZvcm0gYmV0dGVyIHRvIHRoZSBISUcuCi0KLSAgICBxdWl0SXRlbSA9IG1lbnVkZWZzWzBdWzFdWy0xXQotICAgIGNsb3NlSXRlbSA9IG1lbnVkZWZzWzBdWzFdWy0yXQotCi0gICAgIyBSZW1vdmUgdGhlIGxhc3QgMyBpdGVtcyBvZiB0aGUgZmlsZSBtZW51OiBhIHNlcGFyYXRvciwgY2xvc2Ugd2luZG93IGFuZAotICAgICMgcXVpdC4gQ2xvc2Ugd2luZG93IHdpbGwgYmUgcmVpbnNlcnRlZCBqdXN0IGFib3ZlIHRoZSBzYXZlIGl0ZW0sIHdoZXJlCi0gICAgIyBpdCBzaG91bGQgYmUgYWNjb3JkaW5nIHRvIHRoZSBISUcuIFF1aXQgaXMgaW4gdGhlIGFwcGxpY2F0aW9uIG1lbnUuCi0gICAgZGVsIG1lbnVkZWZzWzBdWzFdWy0zOl0KLSAgICBtZW51ZGVmc1swXVsxXS5pbnNlcnQoNiwgY2xvc2VJdGVtKQotCi0gICAgIyBSZW1vdmUgdGhlICdBYm91dCcgZW50cnkgZnJvbSB0aGUgaGVscCBtZW51LCBpdCBpcyBpbiB0aGUgYXBwbGljYXRpb24KLSAgICAjIG1lbnUKLSAgICBkZWwgbWVudWRlZnNbLTFdWzFdWzA6Ml0KLQotICAgICMgUmVtb3ZlIHRoZSAnQ29uZmlndXJlJyBlbnRyeSBmcm9tIHRoZSBvcHRpb25zIG1lbnUsIGl0IGlzIGluIHRoZQotICAgICMgYXBwbGljYXRpb24gbWVudSBhcyAnUHJlZmVyZW5jZXMnCi0gICAgZGVsIG1lbnVkZWZzWy0yXVsxXVswOjJdCitpZiBmaW5kX3NwZWMoJ3R1cnRsZWRlbW8nKToKKyAgICBtZW51ZGVmc1stMV1bMV0uYXBwZW5kKCgnVHVydGxlIERlbW8nLCAnPDxvcGVuLXR1cnRsZS1kZW1vPj4nKSkKIAogZGVmYXVsdF9rZXlkZWZzID0gaWRsZUNvbmYuR2V0Q3VycmVudEtleVNldCgpCi0KLWRlbCBzeXMKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0NhbGxUaXBXaW5kb3cucHkgYi9MaWIvaWRsZWxpYi9DYWxsVGlwV2luZG93LnB5CmluZGV4IDhlMjlkYWIuLjhlNjhhNzYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0NhbGxUaXBXaW5kb3cucHkKKysrIGIvTGliL2lkbGVsaWIvQ2FsbFRpcFdpbmRvdy5weQpAQCAtMiw5ICsyLDggQEAKIAogQWZ0ZXIgVG9vbFRpcC5weSwgd2hpY2ggdXNlcyBpZGVhcyBnbGVhbmVkIGZyb20gUHlTb2wKIFVzZWQgYnkgdGhlIENhbGxUaXBzIElETEUgZXh0ZW5zaW9uLgotCiAiIiIKLWZyb20gdGtpbnRlciBpbXBvcnQgKgorZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbCwgTGFiZWwsIExFRlQsIFNPTElELCBUY2xFcnJvcgogCiBISURFX1ZJUlRVQUxfRVZFTlRfTkFNRSA9ICI8PGNhbGx0aXB3aW5kb3ctaGlkZT4+IgogSElERV9TRVFVRU5DRVMgPSAoIjxLZXktRXNjYXBlPiIsICI8Rm9jdXNPdXQ+IikKQEAgLTczLDYgKzcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ9IiNmZmZmZTAiLCByZWxpZWY9U09MSUQsIGJvcmRlcndpZHRoPTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250ID0gc2VsZi53aWRnZXRbJ2ZvbnQnXSkKICAgICAgICAgc2VsZi5sYWJlbC5wYWNrKCkKKyAgICAgICAgdHcubGlmdCgpICAjIHdvcmsgYXJvdW5kIGJ1ZyBpbiBUayA4LjUuMTgrIChpc3N1ZSAjMjQ1NzApCiAKICAgICAgICAgc2VsZi5jaGVja2hpZGVpZCA9IHNlbGYud2lkZ2V0LmJpbmQoQ0hFQ0tISURFX1ZJUlRVQUxfRVZFTlRfTkFNRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2hpZGVfZXZlbnQpCkBAIC0xMzMsMzcgKzEzMywyOSBAQAogICAgICAgICByZXR1cm4gYm9vbChzZWxmLnRpcHdpbmRvdykKIAogCitkZWYgX2NhbGx0aXBfd2luZG93KHBhcmVudCk6ICAjIGh0ZXN0ICMKKyAgICBmcm9tIHRraW50ZXIgaW1wb3J0IFRvcGxldmVsLCBUZXh0LCBMRUZULCBCT1RICiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgVGVzdCBDb2RlCi0jCi1jbGFzcyBjb250YWluZXI6ICMgQ29uY2VwdHVhbGx5IGFuIGVkaXRvcl93aW5kb3cKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHJvb3QgPSBUaygpCi0gICAgICAgIHRleHQgPSBzZWxmLnRleHQgPSBUZXh0KHJvb3QpCi0gICAgICAgIHRleHQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCwgZXhwYW5kPTEpCi0gICAgICAgIHRleHQuaW5zZXJ0KCJpbnNlcnQiLCAic3RyaW5nLnNwbGl0IikKLSAgICAgICAgcm9vdC51cGRhdGUoKQotICAgICAgICBzZWxmLmNhbGx0aXAgPSBDYWxsVGlwKHRleHQpCisgICAgdG9wID0gVG9wbGV2ZWwocGFyZW50KQorICAgIHRvcC50aXRsZSgiVGVzdCBjYWxsdGlwcyIpCisgICAgdG9wLmdlb21ldHJ5KCIyMDB4MTAwKyVkKyVkIiAlIChwYXJlbnQud2luZm9fcm9vdHgoKSArIDIwMCwKKyAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsgMTUwKSkKKyAgICB0ZXh0ID0gVGV4dCh0b3ApCisgICAgdGV4dC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKKyAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0IiwgInN0cmluZy5zcGxpdCIpCisgICAgdG9wLnVwZGF0ZSgpCisgICAgY2FsbHRpcCA9IENhbGxUaXAodGV4dCkKIAotICAgICAgICB0ZXh0LmV2ZW50X2FkZCgiPDxjYWxsdGlwLXNob3c+PiIsICIoIikKLSAgICAgICAgdGV4dC5ldmVudF9hZGQoIjw8Y2FsbHRpcC1oaWRlPj4iLCAiKSIpCi0gICAgICAgIHRleHQuYmluZCgiPDxjYWxsdGlwLXNob3c+PiIsIHNlbGYuY2FsbHRpcF9zaG93KQotICAgICAgICB0ZXh0LmJpbmQoIjw8Y2FsbHRpcC1oaWRlPj4iLCBzZWxmLmNhbGx0aXBfaGlkZSkKLQotICAgICAgICB0ZXh0LmZvY3VzX3NldCgpCi0gICAgICAgIHJvb3QubWFpbmxvb3AoKQotCi0gICAgZGVmIGNhbGx0aXBfc2hvdyhzZWxmLCBldmVudCk6Ci0gICAgICAgIHNlbGYuY2FsbHRpcC5zaG93dGlwKCJIZWxsbyB3b3JsZCIpCi0KLSAgICBkZWYgY2FsbHRpcF9oaWRlKHNlbGYsIGV2ZW50KToKLSAgICAgICAgc2VsZi5jYWxsdGlwLmhpZGV0aXAoKQotCi1kZWYgbWFpbigpOgotICAgICMgVGVzdCBjb2RlCi0gICAgYz1jb250YWluZXIoKQorICAgIGRlZiBjYWxsdGlwX3Nob3coZXZlbnQpOgorICAgICAgICBjYWxsdGlwLnNob3d0aXAoIihzPUhlbGxvIHdvcmxkKSIsICJpbnNlcnQiLCAiZW5kIikKKyAgICBkZWYgY2FsbHRpcF9oaWRlKGV2ZW50KToKKyAgICAgICAgY2FsbHRpcC5oaWRldGlwKCkKKyAgICB0ZXh0LmV2ZW50X2FkZCgiPDxjYWxsdGlwLXNob3c+PiIsICIoIikKKyAgICB0ZXh0LmV2ZW50X2FkZCgiPDxjYWxsdGlwLWhpZGU+PiIsICIpIikKKyAgICB0ZXh0LmJpbmQoIjw8Y2FsbHRpcC1zaG93Pj4iLCBjYWxsdGlwX3Nob3cpCisgICAgdGV4dC5iaW5kKCI8PGNhbGx0aXAtaGlkZT4+IiwgY2FsbHRpcF9oaWRlKQorICAgIHRleHQuZm9jdXNfc2V0KCkKIAogaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgbWFpbigpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9jYWxsdGlwX3dpbmRvdykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0NsYXNzQnJvd3Nlci5weSBiL0xpYi9pZGxlbGliL0NsYXNzQnJvd3Nlci5weQppbmRleCA3MTE3NmNkLi5kMDljNTJmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9DbGFzc0Jyb3dzZXIucHkKKysrIGIvTGliL2lkbGVsaWIvQ2xhc3NCcm93c2VyLnB5CkBAIC0xOSwxMyArMTksMjMgQEAKIGZyb20gaWRsZWxpYi5UcmVlV2lkZ2V0IGltcG9ydCBUcmVlTm9kZSwgVHJlZUl0ZW0sIFNjcm9sbGVkQ2FudmFzCiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIAorZmlsZV9vcGVuID0gTm9uZSAgIyBNZXRob2QuLi5JdGVtIGFuZCBDbGFzcy4uLkl0ZW0gdXNlIHRoaXMuCisjIE5vcm1hbGx5IFB5U2hlbGwuZmxpc3Qub3BlbiwgYnV0IHRoZXJlIGlzIG5vIFB5U2hlbGwuZmxpc3QgZm9yIGh0ZXN0LgorCiBjbGFzcyBDbGFzc0Jyb3dzZXI6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmxpc3QsIG5hbWUsIHBhdGgpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbGlzdCwgbmFtZSwgcGF0aCwgX2h0ZXN0PUZhbHNlKToKICAgICAgICAgIyBYWFggVGhpcyBBUEkgc2hvdWxkIGNoYW5nZSwgaWYgdGhlIGZpbGUgZG9lc24ndCBlbmQgaW4gIi5weSIKICAgICAgICAgIyBYWFggdGhlIGNvZGUgaGVyZSBpcyBib2d1cyEKKyAgICAgICAgIiIiCisgICAgICAgIF9odGVzdCAtIGJvb2wsIGNoYW5nZSBib3ggd2hlbiBsb2NhdGlvbiBydW5uaW5nIGh0ZXN0LgorICAgICAgICAiIiIKKyAgICAgICAgZ2xvYmFsIGZpbGVfb3BlbgorICAgICAgICBpZiBub3QgX2h0ZXN0OgorICAgICAgICAgICAgZmlsZV9vcGVuID0gUHlTaGVsbC5mbGlzdC5vcGVuCiAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKICAgICAgICAgc2VsZi5maWxlID0gb3MucGF0aC5qb2luKHBhdGhbMF0sIHNlbGYubmFtZSArICIucHkiKQorICAgICAgICBzZWxmLl9odGVzdCA9IF9odGVzdAogICAgICAgICBzZWxmLmluaXQoZmxpc3QpCiAKICAgICBkZWYgY2xvc2Uoc2VsZiwgZXZlbnQ9Tm9uZSk6CkBAIC00MCwxMCArNTAsMTMgQEAKICAgICAgICAgc2VsZi50b3AgPSB0b3AgPSBMaXN0ZWRUb3BsZXZlbChmbGlzdC5yb290KQogICAgICAgICB0b3AucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBzZWxmLmNsb3NlKQogICAgICAgICB0b3AuYmluZCgiPEVzY2FwZT4iLCBzZWxmLmNsb3NlKQorICAgICAgICBpZiBzZWxmLl9odGVzdDogIyBwbGFjZSBkaWFsb2cgYmVsb3cgcGFyZW50IGlmIHJ1bm5pbmcgaHRlc3QKKyAgICAgICAgICAgIHRvcC5nZW9tZXRyeSgiKyVkKyVkIiAlCisgICAgICAgICAgICAgICAgKGZsaXN0LnJvb3Qud2luZm9fcm9vdHgoKSwgZmxpc3Qucm9vdC53aW5mb19yb290eSgpICsgMjAwKSkKICAgICAgICAgc2VsZi5zZXR0aXRsZSgpCiAgICAgICAgIHRvcC5mb2N1c19zZXQoKQogICAgICAgICAjIGNyZWF0ZSBzY3JvbGxlZCBjYW52YXMKLSAgICAgICAgdGhlbWUgPSBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdUaGVtZScsJ25hbWUnKQorICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCiAgICAgICAgIGJhY2tncm91bmQgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdub3JtYWwnKVsnYmFja2dyb3VuZCddCiAgICAgICAgIHNjID0gU2Nyb2xsZWRDYW52YXModG9wLCBiZz1iYWNrZ3JvdW5kLCBoaWdobGlnaHR0aGlja25lc3M9MCwgdGFrZWZvY3VzPTEpCiAgICAgICAgIHNjLmZyYW1lLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQpAQCAtOTQsNyArMTA3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBbXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkaWN0ID0gcHljbGJyLnJlYWRtb2R1bGVfZXgobmFtZSwgW2Rpcl0gKyBzeXMucGF0aCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIGl0ZW1zID0gW10KICAgICAgICAgc2VsZi5jbGFzc2VzID0ge30KQEAgLTE2Myw3ICsxNzYsNyBAQAogICAgIGRlZiBPbkRvdWJsZUNsaWNrKHNlbGYpOgogICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5maWxlKToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBlZGl0ID0gUHlTaGVsbC5mbGlzdC5vcGVuKHNlbGYuZmlsZSkKKyAgICAgICAgZWRpdCA9IGZpbGVfb3BlbihzZWxmLmZpbGUpCiAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5jbCwgJ2xpbmVubycpOgogICAgICAgICAgICAgbGluZW5vID0gc2VsZi5jbC5saW5lbm8KICAgICAgICAgICAgIGVkaXQuZ290b2xpbmUobGluZW5vKQpAQCAtMTk5LDEwICsyMTIsMTAgQEAKICAgICBkZWYgT25Eb3VibGVDbGljayhzZWxmKToKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZSk6CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZWRpdCA9IFB5U2hlbGwuZmxpc3Qub3BlbihzZWxmLmZpbGUpCisgICAgICAgIGVkaXQgPSBmaWxlX29wZW4oc2VsZi5maWxlKQogICAgICAgICBlZGl0LmdvdG9saW5lKHNlbGYuY2wubWV0aG9kc1tzZWxmLm5hbWVdKQogCi1kZWYgbWFpbigpOgorZGVmIF9jbGFzc19icm93c2VyKHBhcmVudCk6ICNXcmFwcGVyIGZvciBodGVzdAogICAgIHRyeToKICAgICAgICAgZmlsZSA9IF9fZmlsZV9fCiAgICAgZXhjZXB0IE5hbWVFcnJvcjoKQEAgLTIxMyw5ICsyMjYsMTEgQEAKICAgICAgICAgICAgIGZpbGUgPSBzeXMuYXJndlswXQogICAgIGRpciwgZmlsZSA9IG9zLnBhdGguc3BsaXQoZmlsZSkKICAgICBuYW1lID0gb3MucGF0aC5zcGxpdGV4dChmaWxlKVswXQotICAgIENsYXNzQnJvd3NlcihQeVNoZWxsLmZsaXN0LCBuYW1lLCBbZGlyXSkKLSAgICBpZiBzeXMuc3RkaW4gaXMgc3lzLl9fc3RkaW5fXzoKLSAgICAgICAgbWFpbmxvb3AoKQorICAgIGZsaXN0ID0gUHlTaGVsbC5QeVNoZWxsRmlsZUxpc3QocGFyZW50KQorICAgIGdsb2JhbCBmaWxlX29wZW4KKyAgICBmaWxlX29wZW4gPSBmbGlzdC5vcGVuCisgICAgQ2xhc3NCcm93c2VyKGZsaXN0LCBuYW1lLCBbZGlyXSwgX2h0ZXN0PVRydWUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9jbGFzc19icm93c2VyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQ29kZUNvbnRleHQucHkgYi9MaWIvaWRsZWxpYi9Db2RlQ29udGV4dC5weQppbmRleCA4NDQ5MWQ1Li40NDc4M2I2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9Db2RlQ29udGV4dC5weQorKysgYi9MaWIvaWRsZWxpYi9Db2RlQ29udGV4dC5weQpAQCAtMTUsOCArMTUsOCBAQAogZnJvbSBzeXMgaW1wb3J0IG1heHNpemUgYXMgSU5GSU5JVFkKIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgogCi1CTE9DS09QRU5FUlMgPSBzZXQoWyJjbGFzcyIsICJkZWYiLCAiZWxpZiIsICJlbHNlIiwgImV4Y2VwdCIsICJmaW5hbGx5IiwgImZvciIsCi0gICAgICAgICAgICAgICAgICAgICJpZiIsICJ0cnkiLCAid2hpbGUiLCAid2l0aCJdKQorQkxPQ0tPUEVORVJTID0geyJjbGFzcyIsICJkZWYiLCAiZWxpZiIsICJlbHNlIiwgImV4Y2VwdCIsICJmaW5hbGx5IiwgImZvciIsCisgICAgICAgICAgICAgICAgICAgICJpZiIsICJ0cnkiLCAid2hpbGUiLCAid2l0aCJ9CiBVUERBVEVJTlRFUlZBTCA9IDEwMCAjIG1pbGxpc2VjCiBGT05UVVBEQVRFSU5URVJWQUwgPSAxMDAwICMgbWlsbGlzZWMKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvQ29sb3JEZWxlZ2F0b3IucHkgYi9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weQppbmRleCA2MWUyYmU0Li45ZjMxMzQ5IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weQorKysgYi9MaWIvaWRsZWxpYi9Db2xvckRlbGVnYXRvci5weQpAQCAtMiw3ICsyLDYgQEAKIGltcG9ydCByZQogaW1wb3J0IGtleXdvcmQKIGltcG9ydCBidWlsdGlucwotZnJvbSB0a2ludGVyIGltcG9ydCAqCiBmcm9tIGlkbGVsaWIuRGVsZWdhdG9yIGltcG9ydCBEZWxlZ2F0b3IKIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgogCkBAIC0zMiw3ICszMSw2IEBACiAKIHByb2cgPSByZS5jb21waWxlKG1ha2VfcGF0KCksIHJlLlMpCiBpZHByb2cgPSByZS5jb21waWxlKHIiXHMrKFx3KykiLCByZS5TKQotYXNwcm9nID0gcmUuY29tcGlsZShyIi4qP1xiKGFzKVxiIikKIAogY2xhc3MgQ29sb3JEZWxlZ2F0b3IoRGVsZWdhdG9yKToKIApAQCAtNDAsNyArMzgsNiBAQAogICAgICAgICBEZWxlZ2F0b3IuX19pbml0X18oc2VsZikKICAgICAgICAgc2VsZi5wcm9nID0gcHJvZwogICAgICAgICBzZWxmLmlkcHJvZyA9IGlkcHJvZwotICAgICAgICBzZWxmLmFzcHJvZyA9IGFzcHJvZwogICAgICAgICBzZWxmLkxvYWRUYWdEZWZzKCkKIAogICAgIGRlZiBzZXRkZWxlZ2F0ZShzZWxmLCBkZWxlZ2F0ZSk6CkBAIC02Myw3ICs2MCw3IEBACiAgICAgICAgIHNlbGYudGFnX3JhaXNlKCdzZWwnKQogCiAgICAgZGVmIExvYWRUYWdEZWZzKHNlbGYpOgotICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ1RoZW1lJywnbmFtZScpCisgICAgICAgIHRoZW1lID0gaWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKICAgICAgICAgc2VsZi50YWdkZWZzID0gewogICAgICAgICAgICAgIkNPTU1FTlQiOiBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICJjb21tZW50IiksCiAgICAgICAgICAgICAiS0VZV09SRCI6IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgImtleXdvcmQiKSwKQEAgLTcyLDcgKzY5LDYgQEAKICAgICAgICAgICAgICJERUZJTklUSU9OIjogaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAiZGVmaW5pdGlvbiIpLAogICAgICAgICAgICAgIlNZTkMiOiB7J2JhY2tncm91bmQnOk5vbmUsJ2ZvcmVncm91bmQnOk5vbmV9LAogICAgICAgICAgICAgIlRPRE8iOiB7J2JhY2tncm91bmQnOk5vbmUsJ2ZvcmVncm91bmQnOk5vbmV9LAotICAgICAgICAgICAgIkJSRUFLIjogaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAiYnJlYWsiKSwKICAgICAgICAgICAgICJFUlJPUiI6IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgImVycm9yIiksCiAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgaXMgdXNlZCBieSBSZXBsYWNlRGlhbG9nOgogICAgICAgICAgICAgImhpdCI6IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgImhpdCIpLApAQCAtMjE0LDIyICsyMTAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWdfYWRkKCJERUZJTklUSU9OIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICsgIislZGMiICUgYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICsgIislZGMiICUgYikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHZhbHVlID09ICJpbXBvcnQiOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbG9yIGFsbCB0aGUgImFzIiB3b3JkcyBvbiBzYW1lIGxpbmUsIGV4Y2VwdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlmIGluIGEgY29tbWVudDsgY2hlYXAgYXBwcm94aW1hdGlvbiB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0cnV0aAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAnIycgaW4gY2hhcnM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBjaGFycy5pbmRleCgnIycpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb3MgPSBsZW4oY2hhcnMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtMSA9IHNlbGYuYXNwcm9nLm1hdGNoKGNoYXJzLCBiLCBlbmRwb3MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbTE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEsIGIgPSBtMS5zcGFuKDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhZ19hZGQoIktFWVdPUkQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgKyAiKyVkYyIgJSBhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgKyAiKyVkYyIgJSBiKQogICAgICAgICAgICAgICAgICAgICBtID0gc2VsZi5wcm9nLnNlYXJjaChjaGFycywgbS5lbmQoKSkKICAgICAgICAgICAgICAgICBpZiAiU1lOQyIgaW4gc2VsZi50YWdfbmFtZXMobmV4dCArICItMWMiKToKICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IG5leHQKQEAgLTI1MywxNyArMjMzLDI0IEBACiAgICAgICAgIGZvciB0YWcgaW4gc2VsZi50YWdkZWZzOgogICAgICAgICAgICAgc2VsZi50YWdfcmVtb3ZlKHRhZywgIjEuMCIsICJlbmQiKQogCi1kZWYgbWFpbigpOgorZGVmIF9jb2xvcl9kZWxlZ2F0b3IocGFyZW50KTogICMgaHRlc3QgIworICAgIGZyb20gdGtpbnRlciBpbXBvcnQgVG9wbGV2ZWwsIFRleHQKICAgICBmcm9tIGlkbGVsaWIuUGVyY29sYXRvciBpbXBvcnQgUGVyY29sYXRvcgotICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC53bV9wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIHJvb3QucXVpdCkKLSAgICB0ZXh0ID0gVGV4dChiYWNrZ3JvdW5kPSJ3aGl0ZSIpCisKKyAgICB0b3AgPSBUb3BsZXZlbChwYXJlbnQpCisgICAgdG9wLnRpdGxlKCJUZXN0IENvbG9yRGVsZWdhdG9yIikKKyAgICB0b3AuZ2VvbWV0cnkoIjIwMHgxMDArJWQrJWQiICUgKHBhcmVudC53aW5mb19yb290eCgpICsgMjAwLAorICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkgKyAxNTApKQorICAgIHNvdXJjZSA9ICJpZiBzb21lbmFtZTogeCA9ICdhYmMnICMgY29tbWVudFxucHJpbnRcbiIKKyAgICB0ZXh0ID0gVGV4dCh0b3AsIGJhY2tncm91bmQ9IndoaXRlIikKICAgICB0ZXh0LnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQorICAgIHRleHQuaW5zZXJ0KCJpbnNlcnQiLCBzb3VyY2UpCiAgICAgdGV4dC5mb2N1c19zZXQoKQorCiAgICAgcCA9IFBlcmNvbGF0b3IodGV4dCkKICAgICBkID0gQ29sb3JEZWxlZ2F0b3IoKQogICAgIHAuaW5zZXJ0ZmlsdGVyKGQpCi0gICAgcm9vdC5tYWlubG9vcCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgbWFpbigpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKF9jb2xvcl9kZWxlZ2F0b3IpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9EZWJ1Z2dlci5weSBiL0xpYi9pZGxlbGliL0RlYnVnZ2VyLnB5CmluZGV4IGQ0ODcyZWQuLjI1MDQyMmUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL0RlYnVnZ2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL0RlYnVnZ2VyLnB5CkBAIC0xLDYgKzEsNSBAQAogaW1wb3J0IG9zCiBpbXBvcnQgYmRiCi1pbXBvcnQgdHlwZXMKIGZyb20gdGtpbnRlciBpbXBvcnQgKgogZnJvbSBpZGxlbGliLldpbmRvd0xpc3QgaW1wb3J0IExpc3RlZFRvcGxldmVsCiBmcm9tIGlkbGVsaWIuU2Nyb2xsZWRMaXN0IGltcG9ydCBTY3JvbGxlZExpc3QKQEAgLTE4LDcgKzE3LDEwIEBACiAgICAgICAgICAgICBzZWxmLnNldF9zdGVwKCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBtZXNzYWdlID0gc2VsZi5fX2ZyYW1lMm1lc3NhZ2UoZnJhbWUpCi0gICAgICAgIHNlbGYuZ3VpLmludGVyYWN0aW9uKG1lc3NhZ2UsIGZyYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmd1aS5pbnRlcmFjdGlvbihtZXNzYWdlLCBmcmFtZSkKKyAgICAgICAgZXhjZXB0IFRjbEVycm9yOiAgIyBXaGVuIGNsb3NpbmcgZGVidWdnZXIgd2luZG93IHdpdGggW3hdIGluIDMueAorICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHVzZXJfZXhjZXB0aW9uKHNlbGYsIGZyYW1lLCBpbmZvKToKICAgICAgICAgaWYgc2VsZi5pbl9ycGNfY29kZShmcmFtZSk6CkBAIC02MCw4ICs2Miw0MiBAQAogICAgICAgICBzZWxmLmZyYW1lID0gTm9uZQogICAgICAgICBzZWxmLm1ha2VfZ3VpKCkKICAgICAgICAgc2VsZi5pbnRlcmFjdGluZyA9IDAKKyAgICAgICAgc2VsZi5uZXN0aW5nX2xldmVsID0gMAogCiAgICAgZGVmIHJ1bihzZWxmLCAqYXJncyk6CisgICAgICAgICMgRGVhbCB3aXRoIHRoZSBzY2VuYXJpbyB3aGVyZSB3ZSd2ZSBhbHJlYWR5IGdvdCBhIHByb2dyYW0gcnVubmluZworICAgICAgICAjIGluIHRoZSBkZWJ1Z2dlciBhbmQgd2Ugd2FudCB0byBzdGFydCBhbm90aGVyLiBJZiB0aGF0IGlzIHRoZSBjYXNlLAorICAgICAgICAjIG91ciBzZWNvbmQgJ3J1bicgd2FzIGludm9rZWQgZnJvbSBhbiBldmVudCBkaXNwYXRjaGVkIG5vdCBmcm9tCisgICAgICAgICMgdGhlIG1haW4gZXZlbnQgbG9vcCwgYnV0IGZyb20gdGhlIG5lc3RlZCBldmVudCBsb29wIGluICdpbnRlcmFjdGlvbicKKyAgICAgICAgIyBiZWxvdy4gU28gb3VyIHN0YWNrIGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6CisgICAgICAgICMgICAgICAgb3V0ZXIgbWFpbiBldmVudCBsb29wCisgICAgICAgICMgICAgICAgICBydW4oKQorICAgICAgICAjICAgICAgICAgICA8cnVubmluZyBwcm9ncmFtIHdpdGggdHJhY2VzPgorICAgICAgICAjICAgICAgICAgICAgIGNhbGxiYWNrIHRvIGRlYnVnZ2VyJ3MgaW50ZXJhY3Rpb24oKQorICAgICAgICAjICAgICAgICAgICAgICAgbmVzdGVkIGV2ZW50IGxvb3AKKyAgICAgICAgIyAgICAgICAgICAgICAgICAgcnVuKCkgZm9yIHNlY29uZCBjb21tYW5kCisgICAgICAgICMKKyAgICAgICAgIyBUaGlzIGtpbmQgb2YgbmVzdGluZyBvZiBldmVudCBsb29wcyBjYXVzZXMgYWxsIGtpbmRzIG9mIHByb2JsZW1zCisgICAgICAgICMgKHNlZSBlLmcuIGlzc3VlICMyNDQ1NSkgZXNwZWNpYWxseSB3aGVuIGRlYWxpbmcgd2l0aCBydW5uaW5nIGFzIGEKKyAgICAgICAgIyBzdWJwcm9jZXNzLCB3aGVyZSB0aGVyZSdzIGFsbCBraW5kcyBvZiBleHRyYSBzdHVmZiBoYXBwZW5pbmcgaW4KKyAgICAgICAgIyB0aGVyZSAtIGluc2VydCBhIHRyYWNlYmFjay5wcmludF9zdGFjaygpIHRvIGNoZWNrIGl0IG91dC4KKyAgICAgICAgIworICAgICAgICAjIEJ5IHRoaXMgcG9pbnQsIHdlJ3ZlIGFscmVhZHkgY2FsbGVkIHJlc3RhcnRfc3VicHJvY2VzcygpIGluCisgICAgICAgICMgU2NyaXB0QmluZGluZy4gSG93ZXZlciwgd2UgYWxzbyBuZWVkIHRvIHVud2luZCB0aGUgc3RhY2sgYmFjayB0bworICAgICAgICAjIHRoYXQgb3V0ZXIgZXZlbnQgbG9vcC4gIFRvIGFjY29tcGxpc2ggdGhpcywgd2U6CisgICAgICAgICMgICAtIHJldHVybiBpbW1lZGlhdGVseSBmcm9tIHRoZSBuZXN0ZWQgcnVuKCkKKyAgICAgICAgIyAgIC0gYWJvcnRfbG9vcCBlbnN1cmVzIHRoZSBuZXN0ZWQgZXZlbnQgbG9vcCB3aWxsIHRlcm1pbmF0ZQorICAgICAgICAjICAgLSB0aGUgZGVidWdnZXIncyBpbnRlcmFjdGlvbiByb3V0aW5lIGNvbXBsZXRlcyBub3JtYWxseQorICAgICAgICAjICAgLSB0aGUgcmVzdGFydF9zdWJwcm9jZXNzKCkgd2lsbCBoYXZlIHRha2VuIGNhcmUgb2Ygc3RvcHBpbmcKKyAgICAgICAgIyAgICAgdGhlIHJ1bm5pbmcgcHJvZ3JhbSwgd2hpY2ggd2lsbCBhbHNvIGxldCB0aGUgb3V0ZXIgcnVuIGNvbXBsZXRlCisgICAgICAgICMKKyAgICAgICAgIyBUaGF0IGxlYXZlcyB1cyBiYWNrIGF0IHRoZSBvdXRlciBtYWluIGV2ZW50IGxvb3AsIGF0IHdoaWNoIHBvaW50IG91cgorICAgICAgICAjIGFmdGVyIGV2ZW50IGNhbiBmaXJlLCBhbmQgd2UnbGwgY29tZSBiYWNrIHRvIHRoaXMgcm91dGluZSB3aXRoIGEKKyAgICAgICAgIyBjbGVhbiBzdGFjay4KKyAgICAgICAgaWYgc2VsZi5uZXN0aW5nX2xldmVsID4gMDoKKyAgICAgICAgICAgIHNlbGYuYWJvcnRfbG9vcCgpCisgICAgICAgICAgICBzZWxmLnJvb3QuYWZ0ZXIoMTAwLCBsYW1iZGE6IHNlbGYucnVuKCphcmdzKSkKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmludGVyYWN0aW5nID0gMQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuaWRiLnJ1bigqYXJncykKQEAgLTY5LDYgKzEwNSwxMCBAQAogICAgICAgICAgICAgc2VsZi5pbnRlcmFjdGluZyA9IDAKIAogICAgIGRlZiBjbG9zZShzZWxmLCBldmVudD1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5xdWl0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgaWYgc2VsZi5pbnRlcmFjdGluZzoKICAgICAgICAgICAgIHNlbGYudG9wLmJlbGwoKQogICAgICAgICAgICAgcmV0dXJuCkBAIC0xOTIsNyArMjMyLDEyIEBACiAgICAgICAgICAgICBiLmNvbmZpZ3VyZShzdGF0ZT0ibm9ybWFsIikKICAgICAgICAgIwogICAgICAgICBzZWxmLnRvcC53YWtldXAoKQotICAgICAgICBzZWxmLnJvb3QubWFpbmxvb3AoKQorICAgICAgICAjIE5lc3RlZCBtYWluIGxvb3A6IFRraW50ZXIncyBtYWluIGxvb3AgaXMgbm90IHJlZW50cmFudCwgc28gdXNlCisgICAgICAgICMgVGNsJ3MgdndhaXQgZmFjaWxpdHksIHdoaWNoIHJlZW50ZXJzIHRoZSBldmVudCBsb29wIHVudGlsIGFuCisgICAgICAgICMgZXZlbnQgaGFuZGxlciBzZXRzIHRoZSB2YXJpYWJsZSB3ZSdyZSB3YWl0aW5nIG9uCisgICAgICAgIHNlbGYubmVzdGluZ19sZXZlbCArPSAxCisgICAgICAgIHNlbGYucm9vdC50ay5jYWxsKCd2d2FpdCcsICc6OmlkbGVkZWJ1Z3dhaXQnKQorICAgICAgICBzZWxmLm5lc3RpbmdfbGV2ZWwgLT0gMQogICAgICAgICAjCiAgICAgICAgIGZvciBiIGluIHNlbGYuYnV0dG9uczoKICAgICAgICAgICAgIGIuY29uZmlndXJlKHN0YXRlPSJkaXNhYmxlZCIpCkBAIC0yMTYsMjMgKzI2MSwyNiBAQAogCiAgICAgZGVmIGNvbnQoc2VsZik6CiAgICAgICAgIHNlbGYuaWRiLnNldF9jb250aW51ZSgpCi0gICAgICAgIHNlbGYucm9vdC5xdWl0KCkKKyAgICAgICAgc2VsZi5hYm9ydF9sb29wKCkKIAogICAgIGRlZiBzdGVwKHNlbGYpOgogICAgICAgICBzZWxmLmlkYi5zZXRfc3RlcCgpCi0gICAgICAgIHNlbGYucm9vdC5xdWl0KCkKKyAgICAgICAgc2VsZi5hYm9ydF9sb29wKCkKIAogICAgIGRlZiBuZXh0KHNlbGYpOgogICAgICAgICBzZWxmLmlkYi5zZXRfbmV4dChzZWxmLmZyYW1lKQotICAgICAgICBzZWxmLnJvb3QucXVpdCgpCisgICAgICAgIHNlbGYuYWJvcnRfbG9vcCgpCiAKICAgICBkZWYgcmV0KHNlbGYpOgogICAgICAgICBzZWxmLmlkYi5zZXRfcmV0dXJuKHNlbGYuZnJhbWUpCi0gICAgICAgIHNlbGYucm9vdC5xdWl0KCkKKyAgICAgICAgc2VsZi5hYm9ydF9sb29wKCkKIAogICAgIGRlZiBxdWl0KHNlbGYpOgogICAgICAgICBzZWxmLmlkYi5zZXRfcXVpdCgpCi0gICAgICAgIHNlbGYucm9vdC5xdWl0KCkKKyAgICAgICAgc2VsZi5hYm9ydF9sb29wKCkKKworICAgIGRlZiBhYm9ydF9sb29wKHNlbGYpOgorICAgICAgICBzZWxmLnJvb3QudGsuY2FsbCgnc2V0JywgJzo6aWRsZWRlYnVnd2FpdCcsICcxJykKIAogICAgIHN0YWNrdmlld2VyID0gTm9uZQogCkBAIC0zMjIsNyArMzcwLDcgQEAKIGNsYXNzIFN0YWNrVmlld2VyKFNjcm9sbGVkTGlzdCk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyLCBmbGlzdCwgZ3VpKToKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0FxdWFUaygpOgogICAgICAgICAgICAgIyBBdCBsZWFzdCBvbiB3aXRoIHRoZSBzdG9jayBBcXVhVGsgdmVyc2lvbiBvbiBPU1ggMTAuNCB5b3UnbGwKICAgICAgICAgICAgICMgZ2V0IGFuIHNoYWtpbmcgR1VJIHRoYXQgZXZlbnR1YWxseSBraWxscyBJRExFIGlmIHRoZSB3aWR0aAogICAgICAgICAgICAgIyBhcmd1bWVudCBpcyBzcGVjaWZpZWQuCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkgYi9MaWIvaWRsZWxpYi9FZGl0b3JXaW5kb3cucHkKaW5kZXggNGJmMTExMS4uYjU4NjhiZSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRWRpdG9yV2luZG93LnB5CisrKyBiL0xpYi9pZGxlbGliL0VkaXRvcldpbmRvdy5weQpAQCAtMSw3ICsxLDggQEAKIGltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBpbXBvcnRsaWIuYWJjCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcwotZnJvbSBwbGF0Zm9ybSBpbXBvcnQgcHl0aG9uX3ZlcnNpb24KK2ltcG9ydCBwbGF0Zm9ybQogaW1wb3J0IHJlCiBpbXBvcnQgc3RyaW5nCiBpbXBvcnQgc3lzCkBAIC0xMiw3ICsxMyw2IEBACiBpbXBvcnQgd2ViYnJvd3NlcgogCiBmcm9tIGlkbGVsaWIuTXVsdGlDYWxsIGltcG9ydCBNdWx0aUNhbGxDcmVhdG9yCi1mcm9tIGlkbGVsaWIgaW1wb3J0IGlkbGV2ZXIKIGZyb20gaWRsZWxpYiBpbXBvcnQgV2luZG93TGlzdAogZnJvbSBpZGxlbGliIGltcG9ydCBTZWFyY2hEaWFsb2cKIGZyb20gaWRsZWxpYiBpbXBvcnQgR3JlcERpYWxvZwpAQCAtMjEsMTAgKzIxLDEzIEBACiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIGZyb20gaWRsZWxpYiBpbXBvcnQgYWJvdXREaWFsb2csIHRleHRWaWV3LCBjb25maWdEaWFsb2cKIGZyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAorZnJvbSBpZGxlbGliIGltcG9ydCBoZWxwCiAKICMgVGhlIGRlZmF1bHQgdGFiIHNldHRpbmcgZm9yIGEgVGV4dCB3aWRnZXQsIGluIGF2ZXJhZ2Utd2lkdGggY2hhcmFjdGVycy4KIFRLX1RBQldJRFRIX0RFRkFVTFQgPSA4CiAKK19weV92ZXJzaW9uID0gJyAoJXMpJyAlIHBsYXRmb3JtLnB5dGhvbl92ZXJzaW9uKCkKKwogZGVmIF9zcGhpbnhfdmVyc2lvbigpOgogICAgICJGb3JtYXQgc3lzLnZlcnNpb25faW5mbyB0byBwcm9kdWNlIHRoZSBTcGhpbnggdmVyc2lvbiBzdHJpbmcgdXNlZCB0byBpbnN0YWxsIHRoZSBjaG0gZG9jcyIKICAgICBtYWpvciwgbWlub3IsIG1pY3JvLCBsZXZlbCwgc2VyaWFsID0gc3lzLnZlcnNpb25faW5mbwpAQCAtNTEsNiArNTQsMTEgQEAKICAgICAgICAgICAgIG5lYXIgLSBhIFRvcGxldmVsIHdpZGdldCAoZS5nLiBFZGl0b3JXaW5kb3cgb3IgUHlTaGVsbCkKICAgICAgICAgICAgICAgICAgICB0byB1c2UgYXMgYSByZWZlcmVuY2UgZm9yIHBsYWNpbmcgdGhlIGhlbHAgd2luZG93CiAgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgd2FybmluZ3MgYXMgdworICAgICAgICB3Lndhcm4oIkVkaXRvcldpbmRvdy5IZWxwRGlhbG9nIGlzIG5vIGxvbmdlciB1c2VkIGJ5IElkbGUuXG4iCisgICAgICAgICAgICAgICAiSXQgd2lsbCBiZSByZW1vdmVkIGluIDMuNiBvciBsYXRlci5cbiIKKyAgICAgICAgICAgICAgICJJdCBoYXMgYmVlbiByZXBsYWNlZCBieSBwcml2YXRlIGhlbHAuSGVscFdpbmRvd1xuIiwKKyAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgICAgICBpZiBzZWxmLmRsZyBpcyBOb25lOgogICAgICAgICAgICAgc2VsZi5zaG93X2RpYWxvZyhwYXJlbnQpCiAgICAgICAgIGlmIG5lYXI6CkBAIC03Nyw3ICs4NSw3IEBACiAgICAgICAgIHNlbGYuZGxnID0gTm9uZQogICAgICAgICBzZWxmLnBhcmVudCA9IE5vbmUKIAotaGVscERpYWxvZyA9IEhlbHBEaWFsb2coKSAgIyBzaW5nbGV0b24gaW5zdGFuY2UKK2hlbHBEaWFsb2cgPSBIZWxwRGlhbG9nKCkgICMgc2luZ2xldG9uIGluc3RhbmNlLCBubyBsb25nZXIgdXNlZAogCiAKIGNsYXNzIEVkaXRvcldpbmRvdyhvYmplY3QpOgpAQCAtMTA4LDggKzExNiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUHl0aG9uJXMuY2htJyAlIF9zcGhpbnhfdmVyc2lvbigpKQogICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGNobWZpbGUpOgogICAgICAgICAgICAgICAgICAgICBkb2Nob21lID0gY2htZmlsZQotICAgICAgICAgICAgZWxpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgotICAgICAgICAgICAgICAgICMgZG9jdW1lbnRhdGlvbiBpcyBzdG9yZWQgaW5zaWRlIHRoZSBweXRob24gZnJhbWV3b3JrCisgICAgICAgICAgICBlbGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIGRvY3VtZW50YXRpb24gbWF5IGJlIHN0b3JlZCBpbnNpZGUgYSBweXRob24gZnJhbWV3b3JrCiAgICAgICAgICAgICAgICAgZG9jaG9tZSA9IG9zLnBhdGguam9pbihzeXMuYmFzZV9wcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2VzL0VuZ2xpc2gubHByb2ovRG9jdW1lbnRhdGlvbi9pbmRleC5odG1sJykKICAgICAgICAgICAgIGRvY2hvbWUgPSBvcy5wYXRoLm5vcm1wYXRoKGRvY2hvbWUpCkBAIC0xMTksOCArMTI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBTYWZhcmkgcmVxdWlyZXMgcmVhbCBmaWxlOi1VUkxzCiAgICAgICAgICAgICAgICAgICAgIEVkaXRvcldpbmRvdy5oZWxwX3VybCA9ICdmaWxlOi8vJyArIEVkaXRvcldpbmRvdy5oZWxwX3VybAogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBFZGl0b3JXaW5kb3cuaGVscF91cmwgPSAiaHR0cDovL2RvY3MucHl0aG9uLm9yZy8lZC4lZCIgJSBzeXMudmVyc2lvbl9pbmZvWzoyXQotICAgICAgICBjdXJyZW50VGhlbWU9aWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKKyAgICAgICAgICAgICAgICBFZGl0b3JXaW5kb3cuaGVscF91cmwgPSAiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvJWQuJWQvIiAlIHN5cy52ZXJzaW9uX2luZm9bOjJdCiAgICAgICAgIHNlbGYuZmxpc3QgPSBmbGlzdAogICAgICAgICByb290ID0gcm9vdCBvciBmbGlzdC5yb290CiAgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKQEAgLTE0OSw2ICsxNTYsNyBAQAogICAgICAgICAgICAgICAgICduYW1lJzogJ3RleHQnLAogICAgICAgICAgICAgICAgICdwYWR4JzogNSwKICAgICAgICAgICAgICAgICAnd3JhcCc6ICdub25lJywKKyAgICAgICAgICAgICAgICAnaGlnaGxpZ2h0dGhpY2tuZXNzJzogMCwKICAgICAgICAgICAgICAgICAnd2lkdGgnOiBzZWxmLndpZHRoLAogICAgICAgICAgICAgICAgICdoZWlnaHQnOiBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnRWRpdG9yV2luZG93JywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQnLCB0eXBlPSdpbnQnKX0KQEAgLTE2NSwxNiArMTczLDE2IEBACiAKICAgICAgICAgc2VsZi50b3AucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBzZWxmLmNsb3NlKQogICAgICAgICBzZWxmLnRvcC5iaW5kKCI8PGNsb3NlLXdpbmRvdz4+Iiwgc2VsZi5jbG9zZV9ldmVudCkKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0FxdWFUaygpOgogICAgICAgICAgICAgIyBDb21tYW5kLVcgb24gZWRpdG9yd2luZG93cyBkb2Vzbid0IHdvcmsgd2l0aG91dCB0aGlzLgogICAgICAgICAgICAgdGV4dC5iaW5kKCc8PGNsb3NlLXdpbmRvdz4+Jywgc2VsZi5jbG9zZV9ldmVudCkKLSAgICAgICAgICAgICMgU29tZSBPUyBYIHN5c3RlbXMgaGF2ZSBvbmx5IG9uZSBtb3VzZSBidXR0b24sCi0gICAgICAgICAgICAjIHNvIHVzZSBjb250cm9sLWNsaWNrIGZvciBwdWxsZG93biBtZW51cyB0aGVyZS4KLSAgICAgICAgICAgICMgIChOb3RlLCBBcXVhVGsgZGVmaW5lcyA8Mj4gYXMgdGhlIHJpZ2h0IGJ1dHRvbiBpZgotICAgICAgICAgICAgIyAgIHByZXNlbnQgYW5kIHRoZSBUayBUZXh0IHdpZGdldCBhbHJlYWR5IGJpbmRzIDwyPi4pCisgICAgICAgICAgICAjIFNvbWUgT1MgWCBzeXN0ZW1zIGhhdmUgb25seSBvbmUgbW91c2UgYnV0dG9uLCBzbyB1c2UKKyAgICAgICAgICAgICMgY29udHJvbC1jbGljayBmb3IgcG9wdXAgY29udGV4dCBtZW51cyB0aGVyZS4gRm9yIHR3bworICAgICAgICAgICAgIyBidXR0b25zLCBBcXVhVGsgZGVmaW5lcyA8Mj4gYXMgdGhlIHJpZ2h0IGJ1dHRvbiwgbm90IDwzPi4KICAgICAgICAgICAgIHRleHQuYmluZCgiPENvbnRyb2wtQnV0dG9uLTE+IixzZWxmLnJpZ2h0X21lbnVfZXZlbnQpCisgICAgICAgICAgICB0ZXh0LmJpbmQoIjwyPiIsIHNlbGYucmlnaHRfbWVudV9ldmVudCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgRWxzZXdoZXJlLCB1c2UgcmlnaHQtY2xpY2sgZm9yIHB1bGxkb3duIG1lbnVzLgorICAgICAgICAgICAgIyBFbHNld2hlcmUsIHVzZSByaWdodC1jbGljayBmb3IgcG9wdXAgbWVudXMuCiAgICAgICAgICAgICB0ZXh0LmJpbmQoIjwzPiIsc2VsZi5yaWdodF9tZW51X2V2ZW50KQogICAgICAgICB0ZXh0LmJpbmQoIjw8Y3V0Pj4iLCBzZWxmLmN1dCkKICAgICAgICAgdGV4dC5iaW5kKCI8PGNvcHk+PiIsIHNlbGYuY29weSkKQEAgLTIxOSwxOCArMjI3LDEzIEBACiAgICAgICAgICAgICB0ZXh0LmJpbmQoIjw8Y2xvc2UtYWxsLXdpbmRvd3M+PiIsIHNlbGYuZmxpc3QuY2xvc2VfYWxsX2NhbGxiYWNrKQogICAgICAgICAgICAgdGV4dC5iaW5kKCI8PG9wZW4tY2xhc3MtYnJvd3Nlcj4+Iiwgc2VsZi5vcGVuX2NsYXNzX2Jyb3dzZXIpCiAgICAgICAgICAgICB0ZXh0LmJpbmQoIjw8b3Blbi1wYXRoLWJyb3dzZXI+PiIsIHNlbGYub3Blbl9wYXRoX2Jyb3dzZXIpCisgICAgICAgICAgICB0ZXh0LmJpbmQoIjw8b3Blbi10dXJ0bGUtZGVtbz4+Iiwgc2VsZi5vcGVuX3R1cnRsZV9kZW1vKQogCiAgICAgICAgIHNlbGYuc2V0X3N0YXR1c19iYXIoKQogICAgICAgICB2YmFyWydjb21tYW5kJ10gPSB0ZXh0Lnl2aWV3CiAgICAgICAgIHZiYXIucGFjayhzaWRlPVJJR0hULCBmaWxsPVkpCiAgICAgICAgIHRleHRbJ3lzY3JvbGxjb21tYW5kJ10gPSB2YmFyLnNldAotICAgICAgICBmb250V2VpZ2h0ID0gJ25vcm1hbCcKLSAgICAgICAgaWYgaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250LWJvbGQnLCB0eXBlPSdib29sJyk6Ci0gICAgICAgICAgICBmb250V2VpZ2h0PSdib2xkJwotICAgICAgICB0ZXh0LmNvbmZpZyhmb250PShpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnRWRpdG9yV2luZG93JywgJ2ZvbnQnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9udC1zaXplJywgdHlwZT0naW50JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHQpKQorICAgICAgICB0ZXh0Wydmb250J10gPSBpZGxlQ29uZi5HZXRGb250KHNlbGYucm9vdCwgJ21haW4nLCAnRWRpdG9yV2luZG93JykKICAgICAgICAgdGV4dF9mcmFtZS5wYWNrKHNpZGU9TEVGVCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKICAgICAgICAgdGV4dC5wYWNrKHNpZGU9VE9QLCBmaWxsPUJPVEgsIGV4cGFuZD0xKQogICAgICAgICB0ZXh0LmZvY3VzX3NldCgpCkBAIC0zMTMsNTAgKzMxNiwyMCBAQAogICAgICAgICBzZWxmLmFza2ludGVnZXIgPSB0a1NpbXBsZURpYWxvZy5hc2tpbnRlZ2VyCiAgICAgICAgIHNlbGYuc2hvd2Vycm9yID0gdGtNZXNzYWdlQm94LnNob3dlcnJvcgogCi0gICAgICAgIHNlbGYuX2hpZ2hsaWdodF93b3JrYXJvdW5kKCkgICMgRml4IHNlbGVjdGlvbiB0YWdzIG9uIFdpbmRvd3MKLQotICAgIGRlZiBfaGlnaGxpZ2h0X3dvcmthcm91bmQoc2VsZik6Ci0gICAgICAgICMgT24gV2luZG93cywgVGsgcmVtb3ZlcyBwYWludGluZyBvZiB0aGUgc2VsZWN0aW9uCi0gICAgICAgICMgdGFncyB3aGljaCBpcyBkaWZmZXJlbnQgYmVoYXZpb3IgdGhhbiBvbiBMaW51eCBhbmQgTWFjLgotICAgICAgICAjIFNlZSBpc3N1ZTE0MTQ2IGZvciBtb3JlIGluZm9ybWF0aW9uLgotICAgICAgICBpZiBub3Qgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgICAgICAgICAgcmV0dXJuCi0KLSAgICAgICAgdGV4dCA9IHNlbGYudGV4dAotICAgICAgICB0ZXh0LmV2ZW50X2FkZCgiPDxIaWdobGlnaHQtRm9jdXNPdXQ+PiIsICI8Rm9jdXNPdXQ+IikKLSAgICAgICAgdGV4dC5ldmVudF9hZGQoIjw8SGlnaGxpZ2h0LUZvY3VzSW4+PiIsICI8Rm9jdXNJbj4iKQotICAgICAgICBkZWYgaGlnaGxpZ2h0X2ZpeChmb2N1cyk6Ci0gICAgICAgICAgICBzZWxfcmFuZ2UgPSB0ZXh0LnRhZ19yYW5nZXMoInNlbCIpCi0gICAgICAgICAgICBpZiBzZWxfcmFuZ2U6Ci0gICAgICAgICAgICAgICAgaWYgZm9jdXMgPT0gJ291dCc6Ci0gICAgICAgICAgICAgICAgICAgIEhJTElURV9DT05GSUcgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZUNvbmYuQ3VycmVudFRoZW1lKCksICdoaWxpdGUnKQotICAgICAgICAgICAgICAgICAgICB0ZXh0LnRhZ19jb25maWcoInNlbF9maXgiLCBISUxJVEVfQ09ORklHKQotICAgICAgICAgICAgICAgICAgICB0ZXh0LnRhZ19yYWlzZSgic2VsX2ZpeCIpCi0gICAgICAgICAgICAgICAgICAgIHRleHQudGFnX2FkZCgic2VsX2ZpeCIsICpzZWxfcmFuZ2UpCi0gICAgICAgICAgICAgICAgZWxpZiBmb2N1cyA9PSAnaW4nOgotICAgICAgICAgICAgICAgICAgICB0ZXh0LnRhZ19yZW1vdmUoInNlbF9maXgiLCAiMS4wIiwgImVuZCIpCi0KLSAgICAgICAgdGV4dC5iaW5kKCI8PEhpZ2hsaWdodC1Gb2N1c091dD4+IiwKLSAgICAgICAgICAgICAgICBsYW1iZGEgZXY6IGhpZ2hsaWdodF9maXgoIm91dCIpKQotICAgICAgICB0ZXh0LmJpbmQoIjw8SGlnaGxpZ2h0LUZvY3VzSW4+PiIsCi0gICAgICAgICAgICAgICAgbGFtYmRhIGV2OiBoaWdobGlnaHRfZml4KCJpbiIpKQotCi0KICAgICBkZWYgX2ZpbGVuYW1lX3RvX3VuaWNvZGUoc2VsZiwgZmlsZW5hbWUpOgotICAgICAgICAiIiJjb252ZXJ0IGZpbGVuYW1lIHRvIHVuaWNvZGUgaW4gb3JkZXIgdG8gZGlzcGxheSBpdCBpbiBUayIiIgotICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVuYW1lLCBzdHIpIG9yIG5vdCBmaWxlbmFtZToKLSAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZQotICAgICAgICBlbHNlOgorICAgICAgICAiIiJSZXR1cm4gZmlsZW5hbWUgYXMgQk1QIHVuaWNvZGUgc28gZGlwbGF5YWJsZSBpbiBUay4iIiIKKyAgICAgICAgIyBEZWNvZGUgYnl0ZXMgdG8gdW5pY29kZS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShmaWxlbmFtZSwgYnl0ZXMpOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiBmaWxlbmFtZS5kZWNvZGUoc2VsZi5maWxlc3lzdGVtZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5kZWNvZGUoc2VsZi5maWxlc3lzdGVtZW5jb2RpbmcpCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZURlY29kZUVycm9yOgotICAgICAgICAgICAgICAgICMgWFhYCiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUuZGVjb2RlKHNlbGYuZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWUuZGVjb2RlKHNlbGYuZW5jb2RpbmcpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBieXRlLXRvLWJ5dGUgY29udmVyc2lvbgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsZW5hbWUuZGVjb2RlKCdpc284ODU5LTEnKQorICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lLmRlY29kZSgnaXNvODg1OS0xJykKKyAgICAgICAgIyBSZXBsYWNlIG5vbi1CTVAgY2hhciB3aXRoIGRpYW1vbmQgcXVlc3Rpb25tYXJrLgorICAgICAgICByZXR1cm4gcmUuc3ViKCdbXFUwMDAxMDAwMC1cVTAwMTBGRkZGXScsICdcdWZmZmQnLCBmaWxlbmFtZSkKIAogICAgIGRlZiBuZXdfY2FsbGJhY2soc2VsZiwgZXZlbnQpOgogICAgICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9IHNlbGYuaW8uZGVmYXVsdGZpbGVuYW1lKCkKQEAgLTQwOCwxMyArMzgxLDE1IEBACiAKICAgICBkZWYgc2V0X3N0YXR1c19iYXIoc2VsZik6CiAgICAgICAgIHNlbGYuc3RhdHVzX2JhciA9IHNlbGYuTXVsdGlTdGF0dXNCYXIoc2VsZi50b3ApCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgICAgIHNlcCA9IEZyYW1lKHNlbGYudG9wLCBoZWlnaHQ9MSwgYm9yZGVyd2lkdGg9MSwgYmFja2dyb3VuZD0nZ3JleTc1JykKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJkYXJ3aW4iOgogICAgICAgICAgICAgIyBJbnNlcnQgc29tZSBwYWRkaW5nIHRvIGF2b2lkIG9ic2N1cmluZyBzb21lIG9mIHRoZSBzdGF0dXNiYXIKICAgICAgICAgICAgICMgYnkgdGhlIHJlc2l6ZSB3aWRnZXQuCiAgICAgICAgICAgICBzZWxmLnN0YXR1c19iYXIuc2V0X2xhYmVsKCdfcGFkZGluZzEnLCAnICAgICcsIHNpZGU9UklHSFQpCiAgICAgICAgIHNlbGYuc3RhdHVzX2Jhci5zZXRfbGFiZWwoJ2NvbHVtbicsICdDb2w6ID8nLCBzaWRlPVJJR0hUKQogICAgICAgICBzZWxmLnN0YXR1c19iYXIuc2V0X2xhYmVsKCdsaW5lJywgJ0xuOiA/Jywgc2lkZT1SSUdIVCkKICAgICAgICAgc2VsZi5zdGF0dXNfYmFyLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKKyAgICAgICAgc2VwLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKICAgICAgICAgc2VsZi50ZXh0LmJpbmQoIjw8c2V0LWxpbmUtYW5kLWNvbHVtbj4+Iiwgc2VsZi5zZXRfbGluZV9hbmRfY29sdW1uKQogICAgICAgICBzZWxmLnRleHQuZXZlbnRfYWRkKCI8PHNldC1saW5lLWFuZC1jb2x1bW4+PiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxLZXlSZWxlYXNlPiIsICI8QnV0dG9uUmVsZWFzZT4iKQpAQCAtNDMxLDI3ICs0MDYsMjUgQEAKICAgICAgICAgKCJmb3JtYXQiLCAiRl9vcm1hdCIpLAogICAgICAgICAoInJ1biIsICJfUnVuIiksCiAgICAgICAgICgib3B0aW9ucyIsICJfT3B0aW9ucyIpLAotICAgICAgICAoIndpbmRvd3MiLCAiX1dpbmRvd3MiKSwKKyAgICAgICAgKCJ3aW5kb3dzIiwgIl9XaW5kb3ciKSwKICAgICAgICAgKCJoZWxwIiwgIl9IZWxwIiksCiAgICAgXQogCi0gICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKLSAgICAgICAgbWVudV9zcGVjc1stMl0gPSAoIndpbmRvd3MiLCAiX1dpbmRvdyIpCi0KIAogICAgIGRlZiBjcmVhdGVtZW51YmFyKHNlbGYpOgogICAgICAgICBtYmFyID0gc2VsZi5tZW51YmFyCiAgICAgICAgIHNlbGYubWVudWRpY3QgPSBtZW51ZGljdCA9IHt9CiAgICAgICAgIGZvciBuYW1lLCBsYWJlbCBpbiBzZWxmLm1lbnVfc3BlY3M6CiAgICAgICAgICAgICB1bmRlcmxpbmUsIGxhYmVsID0gcHJlcHN0cihsYWJlbCkKLSAgICAgICAgICAgIG1lbnVkaWN0W25hbWVdID0gbWVudSA9IE1lbnUobWJhciwgbmFtZT1uYW1lKQorICAgICAgICAgICAgbWVudWRpY3RbbmFtZV0gPSBtZW51ID0gTWVudShtYmFyLCBuYW1lPW5hbWUsIHRlYXJvZmY9MCkKICAgICAgICAgICAgIG1iYXIuYWRkX2Nhc2NhZGUobGFiZWw9bGFiZWwsIG1lbnU9bWVudSwgdW5kZXJsaW5lPXVuZGVybGluZSkKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0NhcmJvbkFxdWFUayhzZWxmLnJvb3QpOgorICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LmlzQ2FyYm9uVGsoKToKICAgICAgICAgICAgICMgSW5zZXJ0IHRoZSBhcHBsaWNhdGlvbiBtZW51Ci0gICAgICAgICAgICBtZW51ZGljdFsnYXBwbGljYXRpb24nXSA9IG1lbnUgPSBNZW51KG1iYXIsIG5hbWU9J2FwcGxlJykKKyAgICAgICAgICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVudSA9IE1lbnUobWJhciwgbmFtZT0nYXBwbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZWFyb2ZmPTApCiAgICAgICAgICAgICBtYmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdJRExFJywgbWVudT1tZW51KQogICAgICAgICBzZWxmLmZpbGxfbWVudXMoKQotICAgICAgICBzZWxmLnJlY2VudF9maWxlc19tZW51ID0gTWVudShzZWxmLm1lbnViYXIpCisgICAgICAgIHNlbGYucmVjZW50X2ZpbGVzX21lbnUgPSBNZW51KHNlbGYubWVudWJhciwgdGVhcm9mZj0wKQogICAgICAgICBzZWxmLm1lbnVkaWN0WydmaWxlJ10uaW5zZXJ0X2Nhc2NhZGUoMywgbGFiZWw9J1JlY2VudCBGaWxlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlcmxpbmU9MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnU9c2VsZi5yZWNlbnRfZmlsZXNfbWVudSkKQEAgLTUzMywyMyArNTA2LDI5IEBACiAgICAgICAgICAgICByZXR1cm4gJ25vcm1hbCcKIAogICAgIGRlZiBhYm91dF9kaWFsb2coc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgSGVscCAnQWJvdXQgSURMRScgZXZlbnQuIgorICAgICAgICAjIFN5bmNocm9uaXplIHdpdGggbWFjb3N4U3VwcG9ydC5vdmVycmlkZVJvb3RNZW51LmFib3V0X2RpYWxvZy4KICAgICAgICAgYWJvdXREaWFsb2cuQWJvdXREaWFsb2coc2VsZi50b3AsJ0Fib3V0IElETEUnKQogCiAgICAgZGVmIGNvbmZpZ19kaWFsb2coc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgT3B0aW9ucyAnQ29uZmlndXJlIElETEUnIGV2ZW50LiIKKyAgICAgICAgIyBTeW5jaHJvbml6ZSB3aXRoIG1hY29zeFN1cHBvcnQub3ZlcnJpZGVSb290TWVudS5jb25maWdfZGlhbG9nLgogICAgICAgICBjb25maWdEaWFsb2cuQ29uZmlnRGlhbG9nKHNlbGYudG9wLCdTZXR0aW5ncycpCiAKICAgICBkZWYgaGVscF9kaWFsb2coc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgSGVscCAnSURMRSBIZWxwJyBldmVudC4iCisgICAgICAgICMgU3luY2hyb25pemUgd2l0aCBtYWNvc3hTdXBwb3J0Lm92ZXJyaWRlUm9vdE1lbnUuaGVscF9kaWFsb2cuCiAgICAgICAgIGlmIHNlbGYucm9vdDoKICAgICAgICAgICAgIHBhcmVudCA9IHNlbGYucm9vdAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGFyZW50ID0gc2VsZi50b3AKLSAgICAgICAgaGVscERpYWxvZy5kaXNwbGF5KHBhcmVudCwgbmVhcj1zZWxmLnRvcCkKKyAgICAgICAgaGVscC5zaG93X2lkbGVoZWxwKHBhcmVudCkKIAogICAgIGRlZiBweXRob25fZG9jcyhzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUoc2VsZi5oZWxwX3VybCkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3IgYXMgd2h5OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0RvY3VtZW50IFN0YXJ0IEZhaWx1cmUnLAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPXN0cih3aHkpLCBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICBlbHNlOgpAQCAtNjYwLDIwICs2MzksMjAgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjIFhYWCBPdWdodCB0byBpbnNlcnQgY3VycmVudCBmaWxlJ3MgZGlyZWN0b3J5IGluIGZyb250IG9mIHBhdGgKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjKG5hbWUpCiAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW1wb3J0RXJyb3IpIGFzIG1zZzoKICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIkltcG9ydCBlcnJvciIsIHN0cihtc2cpLCBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIGxvYWRlciBpcyBOb25lOgorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJbXBvcnQgZXJyb3IiLCAibW9kdWxlIG5vdCBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobG9hZGVyLCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcik6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNwZWMubG9hZGVyLCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlcik6CiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJbXBvcnQgZXJyb3IiLCAibm90IGEgc291cmNlLWJhc2VkIG1vZHVsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZmlsZV9wYXRoID0gbG9hZGVyLmdldF9maWxlbmFtZShuYW1lKQorICAgICAgICAgICAgZmlsZV9wYXRoID0gc3BlYy5sb2FkZXIuZ2V0X2ZpbGVuYW1lKG5hbWUpCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIkltcG9ydCBlcnJvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb2FkZXIgZG9lcyBub3Qgc3VwcG9ydCBnZXRfZmlsZW5hbWUiLApAQCAtNjgzLDE2ICs2NjIsMTUgQEAKICAgICAgICAgICAgIHNlbGYuZmxpc3Qub3BlbihmaWxlX3BhdGgpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmlvLmxvYWRmaWxlKGZpbGVfcGF0aCkKKyAgICAgICAgcmV0dXJuIGZpbGVfcGF0aAogCiAgICAgZGVmIG9wZW5fY2xhc3NfYnJvd3NlcihzZWxmLCBldmVudD1Ob25lKToKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmlvLmZpbGVuYW1lCi0gICAgICAgIGlmIG5vdCBmaWxlbmFtZToKLSAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoCi0gICAgICAgICAgICAgICAgIk5vIGZpbGVuYW1lIiwKLSAgICAgICAgICAgICAgICAiVGhpcyBidWZmZXIgaGFzIG5vIGFzc29jaWF0ZWQgZmlsZW5hbWUiLAotICAgICAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRleHQpCi0gICAgICAgICAgICBzZWxmLnRleHQuZm9jdXNfc2V0KCkKLSAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIG5vdCAoc2VsZi5fX2NsYXNzX18uX19uYW1lX18gPT0gJ1B5U2hlbGxFZGl0b3JXaW5kb3cnCisgICAgICAgICAgICAgICAgYW5kIGZpbGVuYW1lKToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vcGVuX21vZHVsZSgpCisgICAgICAgICAgICBpZiBmaWxlbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSkKICAgICAgICAgYmFzZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dCh0YWlsKQogICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IENsYXNzQnJvd3NlcgpAQCAtNzAyLDYgKzY4MCwxNCBAQAogICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IFBhdGhCcm93c2VyCiAgICAgICAgIFBhdGhCcm93c2VyLlBhdGhCcm93c2VyKHNlbGYuZmxpc3QpCiAKKyAgICBkZWYgb3Blbl90dXJ0bGVfZGVtbyhzZWxmLCBldmVudCA9IE5vbmUpOgorICAgICAgICBpbXBvcnQgc3VicHJvY2VzcworCisgICAgICAgIGNtZCA9IFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICctYycsCisgICAgICAgICAgICAgICAnZnJvbSB0dXJ0bGVkZW1vLl9fbWFpbl9fIGltcG9ydCBtYWluOyBtYWluKCknXQorICAgICAgICBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9RmFsc2UpCisKICAgICBkZWYgZ290b2xpbmUoc2VsZiwgbGluZW5vKToKICAgICAgICAgaWYgbGluZW5vIGlzIG5vdCBOb25lIGFuZCBsaW5lbm8gPiAwOgogICAgICAgICAgICAgc2VsZi50ZXh0Lm1hcmtfc2V0KCJpbnNlcnQiLCAiJWQuMCIgJSBsaW5lbm8pCkBAIC03NTIsMTEgKzczOCwxMSBAQAogICAgICAgICBzZWxmLmNvbG9yID0gTm9uZQogCiAgICAgZGVmIFJlc2V0Q29sb3JpemVyKHNlbGYpOgotICAgICAgICAiVXBkYXRlIHRoZSBjb2xvdXIgdGhlbWUiCisgICAgICAgICJVcGRhdGUgdGhlIGNvbG9yIHRoZW1lIgogICAgICAgICAjIENhbGxlZCBmcm9tIHNlbGYuZmlsZW5hbWVfY2hhbmdlX2hvb2sgYW5kIGZyb20gY29uZmlnRGlhbG9nLnB5CiAgICAgICAgIHNlbGYuX3JtY29sb3JpemVyKCkKICAgICAgICAgc2VsZi5fYWRkY29sb3JpemVyKCkKLSAgICAgICAgdGhlbWUgPSBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdUaGVtZScsJ25hbWUnKQorICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCiAgICAgICAgIG5vcm1hbF9jb2xvcnMgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdub3JtYWwnKQogICAgICAgICBjdXJzb3JfY29sb3IgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdjdXJzb3InLCBmZ0JnPSdmZycpCiAgICAgICAgIHNlbGVjdF9jb2xvcnMgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdoaWxpdGUnKQpAQCAtNzY3LDYgKzc1Myw5IEBACiAgICAgICAgICAgICBzZWxlY3Rmb3JlZ3JvdW5kPXNlbGVjdF9jb2xvcnNbJ2ZvcmVncm91bmQnXSwKICAgICAgICAgICAgIHNlbGVjdGJhY2tncm91bmQ9c2VsZWN0X2NvbG9yc1snYmFja2dyb3VuZCddLAogICAgICAgICAgICAgKQorICAgICAgICBpZiBUa1ZlcnNpb24gPj0gOC41OgorICAgICAgICAgICAgc2VsZi50ZXh0LmNvbmZpZygKKyAgICAgICAgICAgICAgICBpbmFjdGl2ZXNlbGVjdGJhY2tncm91bmQ9c2VsZWN0X2NvbG9yc1snYmFja2dyb3VuZCddKQogCiAgICAgSURFTlRDSEFSUyA9IHN0cmluZy5hc2NpaV9sZXR0ZXJzICsgc3RyaW5nLmRpZ2l0cyArICJfIgogCkBAIC03ODQsMTMgKzc3Myw4IEBACiAgICAgZGVmIFJlc2V0Rm9udChzZWxmKToKICAgICAgICAgIlVwZGF0ZSB0aGUgdGV4dCB3aWRnZXRzJyBmb250IGlmIGl0IGlzIGNoYW5nZWQiCiAgICAgICAgICMgQ2FsbGVkIGZyb20gY29uZmlnRGlhbG9nLnB5Ci0gICAgICAgIGZvbnRXZWlnaHQ9J25vcm1hbCcKLSAgICAgICAgaWYgaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udC1ib2xkJyx0eXBlPSdib29sJyk6Ci0gICAgICAgICAgICBmb250V2VpZ2h0PSdib2xkJwotICAgICAgICBzZWxmLnRleHQuY29uZmlnKGZvbnQ9KGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ0VkaXRvcldpbmRvdycsJ2ZvbnQnKSwKLSAgICAgICAgICAgICAgICBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCdmb250LXNpemUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdpbnQnKSwKLSAgICAgICAgICAgICAgICBmb250V2VpZ2h0KSkKKworICAgICAgICBzZWxmLnRleHRbJ2ZvbnQnXSA9IGlkbGVDb25mLkdldEZvbnQoc2VsZi5yb290LCAnbWFpbicsJ0VkaXRvcldpbmRvdycpCiAKICAgICBkZWYgUmVtb3ZlS2V5YmluZGluZ3Moc2VsZik6CiAgICAgICAgICJSZW1vdmUgdGhlIGtleWJpbmRpbmdzIGJlZm9yZSB0aGV5IGFyZSBjaGFuZ2VkLiIKQEAgLTg3Miw3ICs4NTYsNyBAQAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAnd2luJzoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXJ0ZmlsZShoZWxwZmlsZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIHdoeToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CiAgICAgICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0RvY3VtZW50IFN0YXJ0IEZhaWx1cmUnLAogICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT1zdHIod2h5KSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIGVsc2U6CkBAIC05MDYsOSArODkwLDExIEBACiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIG5vdCBnZXRhdHRyKHNlbGYucm9vdCwgInJlY2VudGZpbGVsaXN0X2Vycm9yX2Rpc3BsYXllZCIsIEZhbHNlKToKICAgICAgICAgICAgICAgICBzZWxmLnJvb3QucmVjZW50ZmlsZWxpc3RfZXJyb3JfZGlzcGxheWVkID0gVHJ1ZQotICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGU9J0lETEUgRXJyb3InLAotICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSdVbmFibGUgdG8gdXBkYXRlIFJlY2VudCBGaWxlcyBsaXN0OlxuJXMnCi0gICAgICAgICAgICAgICAgICAgICAgICAlIHN0cihlcnIpLAorICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93d2FybmluZyh0aXRsZT0nSURMRSBXYXJuaW5nJywKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0iQ2Fubm90IHVwZGF0ZSBGaWxlIG1lbnUgUmVjZW50IEZpbGVzIGxpc3QuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWW91ciBvcGVyYXRpbmcgc3lzdGVtIHNheXM6XG4lc1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWxlY3QgT0sgYW5kIElETEUgd2lsbCBjb250aW51ZSB3aXRob3V0IHVwZGF0aW5nLiIKKyAgICAgICAgICAgICAgICAgICAgICAgICUgc2VsZi5fZmlsZW5hbWVfdG9fdW5pY29kZShzdHIoZXJyKSksCiAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICMgZm9yIGVhY2ggZWRpdCB3aW5kb3cgaW5zdGFuY2UsIGNvbnN0cnVjdCB0aGUgcmVjZW50IGZpbGVzIG1lbnUKICAgICAgICAgZm9yIGluc3RhbmNlIGluIHNlbGYudG9wLmluc3RhbmNlX2RpY3Q6CkBAIC05MzIsNyArOTE4LDcgQEAKICAgICAgICAgc2hvcnQgPSBzZWxmLnNob3J0X3RpdGxlKCkKICAgICAgICAgbG9uZyA9IHNlbGYubG9uZ190aXRsZSgpCiAgICAgICAgIGlmIHNob3J0IGFuZCBsb25nOgotICAgICAgICAgICAgdGl0bGUgPSBzaG9ydCArICIgLSAiICsgbG9uZworICAgICAgICAgICAgdGl0bGUgPSBzaG9ydCArICIgLSAiICsgbG9uZyArIF9weV92ZXJzaW9uCiAgICAgICAgIGVsaWYgc2hvcnQ6CiAgICAgICAgICAgICB0aXRsZSA9IHNob3J0CiAgICAgICAgIGVsaWYgbG9uZzoKQEAgLTk1NiwxNCArOTQyLDEzIEBACiAgICAgICAgIHNlbGYudW5kby5yZXNldF91bmRvKCkKIAogICAgIGRlZiBzaG9ydF90aXRsZShzZWxmKToKLSAgICAgICAgcHl2ZXJzaW9uID0gIlB5dGhvbiAiICsgcHl0aG9uX3ZlcnNpb24oKSArICI6ICIKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmlvLmZpbGVuYW1lCiAgICAgICAgIGlmIGZpbGVuYW1lOgogICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZmlsZW5hbWUgPSAiVW50aXRsZWQiCiAgICAgICAgICMgcmV0dXJuIHVuaWNvZGUgc3RyaW5nIHRvIGRpc3BsYXkgbm9uLUFTQ0lJIGNoYXJzIGNvcnJlY3RseQotICAgICAgICByZXR1cm4gcHl2ZXJzaW9uICsgc2VsZi5fZmlsZW5hbWVfdG9fdW5pY29kZShmaWxlbmFtZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbGVuYW1lX3RvX3VuaWNvZGUoZmlsZW5hbWUpCiAKICAgICBkZWYgbG9uZ190aXRsZShzZWxmKToKICAgICAgICAgIyByZXR1cm4gdW5pY29kZSBzdHJpbmcgdG8gZGlzcGxheSBub24tQVNDSUkgY2hhcnMgY29ycmVjdGx5CkBAIC0xMDYzLDcgKzEwNDgsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJy4nICsgbmFtZSwgcGFja2FnZT1fX3BhY2thZ2VfXykKLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICAgbW9kID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcHJpbnQoIlxuRmFpbGVkIHRvIGltcG9ydCBleHRlbnNpb246ICIsIG5hbWUpCkBAIC0xMzk3LDcgKzEzODIsNyBAQAogICAgICAgICAgICAgdGV4dC5zZWUoImluc2VydCIpCiAgICAgICAgICAgICB0ZXh0LnVuZG9fYmxvY2tfc3RvcCgpCiAKLSAgICAjIE91ciBlZGl0d2luIHByb3ZpZGVzIGEgaXNfY2hhcl9pbl9zdHJpbmcgZnVuY3Rpb24gdGhhdCB3b3JrcworICAgICMgT3VyIGVkaXR3aW4gcHJvdmlkZXMgYW4gaXNfY2hhcl9pbl9zdHJpbmcgZnVuY3Rpb24gdGhhdCB3b3JrcwogICAgICMgd2l0aCBhIFRrIHRleHQgaW5kZXgsIGJ1dCBQeVBhcnNlIG9ubHkga25vd3MgYWJvdXQgb2Zmc2V0cyBpbnRvCiAgICAgIyBhIHN0cmluZy4gVGhpcyBidWlsZHMgYSBmdW5jdGlvbiBmb3IgUHlQYXJzZSB0aGF0IGFjY2VwdHMgYW4KICAgICAjIG9mZnNldC4KQEAgLTE2NzIsNyArMTY1Nyw3IEBACiAgICAga2V5bGlzdCA9IGtleWRlZnMuZ2V0KGV2ZW50bmFtZSkKICAgICAjIGlzc3VlMTA5NDA6IHRlbXBvcmFyeSB3b3JrYXJvdW5kIHRvIHByZXZlbnQgaGFuZyB3aXRoIE9TIFggQ29jb2EgVGsgOC41CiAgICAgIyBpZiBub3Qga2V5bGlzdDoKLSAgICBpZiAobm90IGtleWxpc3QpIG9yIChtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpIGFuZCBldmVudG5hbWUgaW4geworICAgIGlmIChub3Qga2V5bGlzdCkgb3IgKG1hY29zeFN1cHBvcnQuaXNDb2NvYVRrKCkgYW5kIGV2ZW50bmFtZSBpbiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8b3Blbi1tb2R1bGU+PiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjw8Z290by1saW5lPj4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8PGNoYW5nZS1pbmRlbnR3aWR0aD4+In0pOgpAQCAtMTY5OSwxOSArMTY4NCwyMCBAQAogICAgIHRrLmNhbGwoJ3NldCcsICd0Y2xfbm9ud29yZGNoYXJzJywgJ1teYS16QS1aMC05X10nKQogCiAKLWRlZiB0ZXN0KCk6Ci0gICAgcm9vdCA9IFRrKCkKK2RlZiBfZWRpdG9yX3dpbmRvdyhwYXJlbnQpOiAgIyBodGVzdCAjCisgICAgIyBlcnJvciBpZiBjbG9zZSBtYXN0ZXIgd2luZG93IGZpcnN0IC0gdGltZXIgZXZlbnQsIGFmdGVyIHNjcmlwdAorICAgIHJvb3QgPSBwYXJlbnQKICAgICBmaXh3b3JkYnJlYWtzKHJvb3QpCi0gICAgcm9vdC53aXRoZHJhdygpCiAgICAgaWYgc3lzLmFyZ3ZbMTpdOgogICAgICAgICBmaWxlbmFtZSA9IHN5cy5hcmd2WzFdCiAgICAgZWxzZToKICAgICAgICAgZmlsZW5hbWUgPSBOb25lCisgICAgbWFjb3N4U3VwcG9ydC5zZXR1cEFwcChyb290LCBOb25lKQogICAgIGVkaXQgPSBFZGl0b3JXaW5kb3cocm9vdD1yb290LCBmaWxlbmFtZT1maWxlbmFtZSkKLSAgICBlZGl0LnNldF9jbG9zZV9ob29rKHJvb3QucXVpdCkKICAgICBlZGl0LnRleHQuYmluZCgiPDxjbG9zZS1hbGwtd2luZG93cz4+IiwgZWRpdC5jbG9zZV9ldmVudCkKLSAgICByb290Lm1haW5sb29wKCkKLSAgICByb290LmRlc3Ryb3koKQorICAgICMgRG9lcyBub3Qgc3RvcCBlcnJvciwgbmVpdGhlciBkb2VzIGZvbGxvd2luZworICAgICMgZWRpdC50ZXh0LmJpbmQoIjw8Y2xvc2Utd2luZG93Pj4iLCBlZGl0LmNsb3NlX2V2ZW50KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfZWRpdG9yX3dpbmRvdykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0ZpbGVMaXN0LnB5IGIvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKaW5kZXggMzdhMzM3ZS4uYTk5ODlhOCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKKysrIGIvTGliL2lkbGVsaWIvRmlsZUxpc3QucHkKQEAgLTEwMyw3ICsxMDMsNyBAQAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhmaWxlbmFtZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocHdkLCBmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0Zvcm1hdFBhcmFncmFwaC5weSBiL0xpYi9pZGxlbGliL0Zvcm1hdFBhcmFncmFwaC5weQppbmRleCBhZTRlNmU3Li43YTlkMTg1IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9Gb3JtYXRQYXJhZ3JhcGgucHkKKysrIGIvTGliL2lkbGVsaWIvRm9ybWF0UGFyYWdyYXBoLnB5CkBAIC0zMiw3ICszMiw3IEBACiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLmVkaXR3aW4gPSBOb25lCiAKLSAgICBkZWYgZm9ybWF0X3BhcmFncmFwaF9ldmVudChzZWxmLCBldmVudCk6CisgICAgZGVmIGZvcm1hdF9wYXJhZ3JhcGhfZXZlbnQoc2VsZiwgZXZlbnQsIGxpbWl0PU5vbmUpOgogICAgICAgICAiIiJGb3JtYXRzIHBhcmFncmFwaCB0byBhIG1heCB3aWR0aCBzcGVjaWZpZWQgaW4gaWRsZUNvbmYuCiAKICAgICAgICAgSWYgdGV4dCBpcyBzZWxlY3RlZCwgZm9ybWF0X3BhcmFncmFwaF9ldmVudCB3aWxsIHN0YXJ0IGJyZWFraW5nIGxpbmVzCkBAIC00MSw5ICs0MSwxNCBAQAogICAgICAgICBJZiBubyB0ZXh0IGlzIHNlbGVjdGVkLCBmb3JtYXRfcGFyYWdyYXBoX2V2ZW50IHVzZXMgdGhlIGN1cnJlbnQKICAgICAgICAgY3Vyc29yIGxvY2F0aW9uIHRvIGRldGVybWluZSB0aGUgcGFyYWdyYXBoIChsaW5lcyBvZiB0ZXh0IHN1cnJvdW5kZWQKICAgICAgICAgYnkgYmxhbmsgbGluZXMpIGFuZCBmb3JtYXRzIGl0LgorCisgICAgICAgIFRoZSBsZW5ndGggbGltaXQgcGFyYW1ldGVyIGlzIGZvciB0ZXN0aW5nIHdpdGggYSBrbm93biB2YWx1ZS4KICAgICAgICAgIiIiCi0gICAgICAgIG1heGZvcm1hdHdpZHRoID0gaWRsZUNvbmYuR2V0T3B0aW9uKAotICAgICAgICAgICAgICAgICdtYWluJywgJ0Zvcm1hdFBhcmFncmFwaCcsICdwYXJhZ3JhcGgnLCB0eXBlPSdpbnQnKQorICAgICAgICBpZiBsaW1pdCBpcyBOb25lOgorICAgICAgICAgICAgIyBUaGUgZGVmYXVsdCBsZW5ndGggbGltaXQgaXMgdGhhdCBkZWZpbmVkIGJ5IHBlcDgKKyAgICAgICAgICAgIGxpbWl0ID0gaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdleHRlbnNpb25zJywgJ0Zvcm1hdFBhcmFncmFwaCcsICdtYXgtd2lkdGgnLAorICAgICAgICAgICAgICAgIHR5cGU9J2ludCcsIGRlZmF1bHQ9NzIpCiAgICAgICAgIHRleHQgPSBzZWxmLmVkaXR3aW4udGV4dAogICAgICAgICBmaXJzdCwgbGFzdCA9IHNlbGYuZWRpdHdpbi5nZXRfc2VsZWN0aW9uX2luZGljZXMoKQogICAgICAgICBpZiBmaXJzdCBhbmQgbGFzdDoKQEAgLTUzLDkgKzU4LDkgQEAKICAgICAgICAgICAgIGZpcnN0LCBsYXN0LCBjb21tZW50X2hlYWRlciwgZGF0YSA9IFwKICAgICAgICAgICAgICAgICAgICAgZmluZF9wYXJhZ3JhcGgodGV4dCwgdGV4dC5pbmRleCgiaW5zZXJ0IikpCiAgICAgICAgIGlmIGNvbW1lbnRfaGVhZGVyOgotICAgICAgICAgICAgbmV3ZGF0YSA9IHJlZm9ybWF0X2NvbW1lbnQoZGF0YSwgbWF4Zm9ybWF0d2lkdGgsIGNvbW1lbnRfaGVhZGVyKQorICAgICAgICAgICAgbmV3ZGF0YSA9IHJlZm9ybWF0X2NvbW1lbnQoZGF0YSwgbGltaXQsIGNvbW1lbnRfaGVhZGVyKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmV3ZGF0YSA9IHJlZm9ybWF0X3BhcmFncmFwaChkYXRhLCBtYXhmb3JtYXR3aWR0aCkKKyAgICAgICAgICAgIG5ld2RhdGEgPSByZWZvcm1hdF9wYXJhZ3JhcGgoZGF0YSwgbGltaXQpCiAgICAgICAgIHRleHQudGFnX3JlbW92ZSgic2VsIiwgIjEuMCIsICJlbmQiKQogCiAgICAgICAgIGlmIG5ld2RhdGEgIT0gZGF0YToKQEAgLTE4NSw3ICsxOTAsNiBAQAogICAgIHJldHVybiBtLmdyb3VwKDEpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0OyBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCiAgICAgaW1wb3J0IHVuaXR0ZXN0CiAgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9mb3JtYXRwYXJhZ3JhcGgnLAogICAgICAgICAgICAgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvR3JlcERpYWxvZy5weQppbmRleCBjMzU5MDc0Li43MjFiMjMxIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9HcmVwRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL0dyZXBEaWFsb2cucHkKQEAgLTEsOSArMSwxMyBAQAogaW1wb3J0IG9zCiBpbXBvcnQgZm5tYXRjaAoraW1wb3J0IHJlICAjIGZvciBodGVzdAogaW1wb3J0IHN5cwotZnJvbSB0a2ludGVyIGltcG9ydCAqCitmcm9tIHRraW50ZXIgaW1wb3J0IFN0cmluZ1ZhciwgQm9vbGVhblZhciwgQ2hlY2tidXR0b24gICMgZm9yIEdyZXBEaWFsb2cKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRleHQsIEJ1dHRvbiwgU0VMLCBFTkQgICMgZm9yIGh0ZXN0CiBmcm9tIGlkbGVsaWIgaW1wb3J0IFNlYXJjaEVuZ2luZQogZnJvbSBpZGxlbGliLlNlYXJjaERpYWxvZ0Jhc2UgaW1wb3J0IFNlYXJjaERpYWxvZ0Jhc2UKKyMgSW1wb3J0aW5nIE91dHB1dFdpbmRvdyBmYWlscyBkdWUgdG8gaW1wb3J0IGxvb3AKKyMgRWRpdG9yV2luZG93IC0+IEdyZXBEaWFsb3AgLT4gT3V0cHV0V2luZG93IC0+IEVkaXRvcldpbmRvdwogCiBkZWYgZ3JlcCh0ZXh0LCBpbz1Ob25lLCBmbGlzdD1Ob25lKToKICAgICByb290ID0gdGV4dC5fcm9vdCgpCkBAIC00MCwxMCArNDQsMTAgQEAKIAogICAgIGRlZiBjcmVhdGVfZW50cmllcyhzZWxmKToKICAgICAgICAgU2VhcmNoRGlhbG9nQmFzZS5jcmVhdGVfZW50cmllcyhzZWxmKQotICAgICAgICBzZWxmLmdsb2JlbnQgPSBzZWxmLm1ha2VfZW50cnkoIkluIGZpbGVzOiIsIHNlbGYuZ2xvYnZhcikKKyAgICAgICAgc2VsZi5nbG9iZW50ID0gc2VsZi5tYWtlX2VudHJ5KCJJbiBmaWxlczoiLCBzZWxmLmdsb2J2YXIpWzBdCiAKICAgICBkZWYgY3JlYXRlX290aGVyX2J1dHRvbnMoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLm1ha2VfZnJhbWUoKQorICAgICAgICBmID0gc2VsZi5tYWtlX2ZyYW1lKClbMF0KIAogICAgICAgICBidG4gPSBDaGVja2J1dHRvbihmLCBhbmNob3I9InciLAogICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYucmVjdmFyLApAQCAtNjMsNyArNjcsNyBAQAogICAgICAgICBpZiBub3QgcGF0aDoKICAgICAgICAgICAgIHNlbGYudG9wLmJlbGwoKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGZyb20gaWRsZWxpYi5PdXRwdXRXaW5kb3cgaW1wb3J0IE91dHB1dFdpbmRvdworICAgICAgICBmcm9tIGlkbGVsaWIuT3V0cHV0V2luZG93IGltcG9ydCBPdXRwdXRXaW5kb3cgICMgbGVhdmUgaGVyZSEKICAgICAgICAgc2F2ZSA9IHN5cy5zdGRvdXQKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc3lzLnN0ZG91dCA9IE91dHB1dFdpbmRvdyhzZWxmLmZsaXN0KQpAQCAtNzksMjEgKzgzLDI2IEBACiAgICAgICAgIHBhdCA9IHNlbGYuZW5naW5lLmdldHBhdCgpCiAgICAgICAgIHByaW50KCJTZWFyY2hpbmcgJXIgaW4gJXMgLi4uIiAlIChwYXQsIHBhdGgpKQogICAgICAgICBoaXRzID0gMAotICAgICAgICBmb3IgZm4gaW4gbGlzdDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sIGVycm9ycz0ncmVwbGFjZScpIGFzIGY6Ci0gICAgICAgICAgICAgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGYsIDEpOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbGluZVstMTpdID09ICdcbic6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgcHJvZy5zZWFyY2gobGluZSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiJXM6ICVzOiAlc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm4sIGxpbmVubywgbGluZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGl0cyArPSAxCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgcHJpbnQobXNnKQotICAgICAgICBwcmludCgoIkhpdHMgZm91bmQ6ICVzXG4iCi0gICAgICAgICAgICAgICIoSGludDogcmlnaHQtY2xpY2sgdG8gb3BlbiBsb2NhdGlvbnMuKSIKLSAgICAgICAgICAgICAgJSBoaXRzKSBpZiBoaXRzIGVsc2UgIk5vIGhpdHMuIikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGZuIGluIGxpc3Q6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZm4sIGVycm9ycz0ncmVwbGFjZScpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgbGluZW5vLCBsaW5lIGluIGVudW1lcmF0ZShmLCAxKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsaW5lWy0xOl0gPT0gJ1xuJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHByb2cuc2VhcmNoKGxpbmUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCIlczogJXM6ICVzXG4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm4sIGxpbmVubywgbGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpdHMgKz0gMQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorICAgICAgICAgICAgcHJpbnQoKCJIaXRzIGZvdW5kOiAlc1xuIgorICAgICAgICAgICAgICAgICAgIihIaW50OiByaWdodC1jbGljayB0byBvcGVuIGxvY2F0aW9ucy4pIgorICAgICAgICAgICAgICAgICAgJSBoaXRzKSBpZiBoaXRzIGVsc2UgIk5vIGhpdHMuIikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgIyBUayB3aW5kb3cgaGFzIGJlZW4gY2xvc2VkLCBPdXRwdXRXaW5kb3cudGV4dCA9IE5vbmUsCisgICAgICAgICAgICAjIHNvIGluIE9XLndyaXRlLCBPVy50ZXh0Lmluc2VydCBmYWlscy4KKyAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBmaW5kZmlsZXMoc2VsZiwgZGlyLCBiYXNlLCByZWMpOgogICAgICAgICB0cnk6CkBAIC0xMjAsOSArMTI5LDMwIEBACiAgICAgICAgICAgICBzZWxmLnRvcC5ncmFiX3JlbGVhc2UoKQogICAgICAgICAgICAgc2VsZi50b3Aud2l0aGRyYXcoKQogCisKK2RlZiBfZ3JlcF9kaWFsb2cocGFyZW50KTogICMgaHRlc3QgIworICAgIGZyb20gaWRsZWxpYi5QeVNoZWxsIGltcG9ydCBQeVNoZWxsRmlsZUxpc3QKKyAgICByb290ID0gVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgR3JlcERpYWxvZyIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorCisgICAgZmxpc3QgPSBQeVNoZWxsRmlsZUxpc3Qocm9vdCkKKyAgICB0ZXh0ID0gVGV4dChyb290LCBoZWlnaHQ9NSkKKyAgICB0ZXh0LnBhY2soKQorCisgICAgZGVmIHNob3dfZ3JlcF9kaWFsb2coKToKKyAgICAgICAgdGV4dC50YWdfYWRkKFNFTCwgIjEuMCIsIEVORCkKKyAgICAgICAgZ3JlcCh0ZXh0LCBmbGlzdD1mbGlzdCkKKyAgICAgICAgdGV4dC50YWdfcmVtb3ZlKFNFTCwgIjEuMCIsIEVORCkKKworICAgIGJ1dHRvbiA9IEJ1dHRvbihyb290LCB0ZXh0PSJTaG93IEdyZXBEaWFsb2ciLCBjb21tYW5kPXNob3dfZ3JlcF9kaWFsb2cpCisgICAgYnV0dG9uLnBhY2soKQorICAgIHJvb3QubWFpbmxvb3AoKQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgICMgQSBodW1hbiB0ZXN0IGlzIGEgYml0IHRyaWNreSBzaW5jZSBFZGl0b3JXaW5kb3coKSBpbXBvcnRzIHRoaXMgbW9kdWxlLgotICAgICMgSGVuY2UgSWRsZSBtdXN0IGJlIHJlc3RhcnRlZCBhZnRlciBlZGl0aW5nIHRoaXMgZmlsZSBmb3IgYSBsaXZlIHRlc3QuCiAgICAgaW1wb3J0IHVuaXR0ZXN0CiAgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9ncmVwJywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCiAKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX2dyZXBfZGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvSHlwZXJQYXJzZXIucHkgYi9MaWIvaWRsZWxpYi9IeXBlclBhcnNlci5weQppbmRleCA0YWY0YjA4Li43N2NiMDU3IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9IeXBlclBhcnNlci5weQorKysgYi9MaWIvaWRsZWxpYi9IeXBlclBhcnNlci5weQpAQCAtMSwyMyArMSwzMSBAQAotIiIiCi1IeXBlclBhcnNlcgotPT09PT09PT09PT0KLVRoaXMgbW9kdWxlIGRlZmluZXMgdGhlIEh5cGVyUGFyc2VyIGNsYXNzLCB3aGljaCBwcm92aWRlcyBhZHZhbmNlZCBwYXJzaW5nCi1hYmlsaXRpZXMgZm9yIHRoZSBQYXJlbk1hdGNoIGFuZCBvdGhlciBleHRlbnNpb25zLgotVGhlIEh5cGVyUGFyc2VyIHVzZXMgUHlQYXJzZXIuIFB5UGFyc2VyIGlzIGludGVuZGVkIG1vc3RseSB0byBnaXZlIGluZm9ybWF0aW9uCi1vbiB0aGUgcHJvcGVyIGluZGVudGF0aW9uIG9mIGNvZGUuIEh5cGVyUGFyc2VyIGdpdmVzIHNvbWUgaW5mb3JtYXRpb24gb24gdGhlCi1zdHJ1Y3R1cmUgb2YgY29kZSwgdXNlZCBieSBleHRlbnNpb25zIHRvIGhlbHAgdGhlIHVzZXIuCisiIiJQcm92aWRlIGFkdmFuY2VkIHBhcnNpbmcgYWJpbGl0aWVzIGZvciBQYXJlbk1hdGNoIGFuZCBvdGhlciBleHRlbnNpb25zLgorCitIeXBlclBhcnNlciB1c2VzIFB5UGFyc2VyLiAgUHlQYXJzZXIgbW9zdGx5IGdpdmVzIGluZm9ybWF0aW9uIG9uIHRoZQorcHJvcGVyIGluZGVudGF0aW9uIG9mIGNvZGUuICBIeXBlclBhcnNlciBnaXZlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uCit0aGUgc3RydWN0dXJlIG9mIGNvZGUuCiAiIiIKIAogaW1wb3J0IHN0cmluZwotaW1wb3J0IGtleXdvcmQKK2Zyb20ga2V5d29yZCBpbXBvcnQgaXNrZXl3b3JkCiBmcm9tIGlkbGVsaWIgaW1wb3J0IFB5UGFyc2UKIAotY2xhc3MgSHlwZXJQYXJzZXI6CiAKKyMgYWxsIEFTQ0lJIGNoYXJzIHRoYXQgbWF5IGJlIGluIGFuIGlkZW50aWZpZXIKK19BU0NJSV9JRF9DSEFSUyA9IGZyb3plbnNldChzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAiXyIpCisjIGFsbCBBU0NJSSBjaGFycyB0aGF0IG1heSBiZSB0aGUgZmlyc3QgY2hhciBvZiBhbiBpZGVudGlmaWVyCitfQVNDSUlfSURfRklSU1RfQ0hBUlMgPSBmcm96ZW5zZXQoc3RyaW5nLmFzY2lpX2xldHRlcnMgKyAiXyIpCisKKyMgbG9va3VwIHRhYmxlIGZvciB3aGV0aGVyIDctYml0IEFTQ0lJIGNoYXJzIGFyZSB2YWxpZCBpbiBhIFB5dGhvbiBpZGVudGlmaWVyCitfSVNfQVNDSUlfSURfQ0hBUiA9IFsoY2hyKHgpIGluIF9BU0NJSV9JRF9DSEFSUykgZm9yIHggaW4gcmFuZ2UoMTI4KV0KKyMgbG9va3VwIHRhYmxlIGZvciB3aGV0aGVyIDctYml0IEFTQ0lJIGNoYXJzIGFyZSB2YWxpZCBhcyB0aGUgZmlyc3QKKyMgY2hhciBpbiBhIFB5dGhvbiBpZGVudGlmaWVyCitfSVNfQVNDSUlfSURfRklSU1RfQ0hBUiA9IFwKKyAgICBbKGNocih4KSBpbiBfQVNDSUlfSURfRklSU1RfQ0hBUlMpIGZvciB4IGluIHJhbmdlKDEyOCldCisKKworY2xhc3MgSHlwZXJQYXJzZXI6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVkaXR3aW4sIGluZGV4KToKLSAgICAgICAgIiIiSW5pdGlhbGl6ZSB0aGUgSHlwZXJQYXJzZXIgdG8gYW5hbHl6ZSB0aGUgc3Vycm91bmRpbmdzIG9mIHRoZSBnaXZlbgotICAgICAgICBpbmRleC4KLSAgICAgICAgIiIiCisgICAgICAgICJUbyBpbml0aWFsaXplLCBhbmFseXplIHRoZSBzdXJyb3VuZGluZ3Mgb2YgdGhlIGdpdmVuIGluZGV4LiIKIAogICAgICAgICBzZWxmLmVkaXR3aW4gPSBlZGl0d2luCiAgICAgICAgIHNlbGYudGV4dCA9IHRleHQgPSBlZGl0d2luLnRleHQKQEAgLTMzLDkgKzQxLDEwIEBACiAgICAgICAgICAgICAgICAgc3RhcnRhdCA9IG1heChsbm8gLSBjb250ZXh0LCAxKQogICAgICAgICAgICAgICAgIHN0YXJ0YXRpbmRleCA9IHJlcHIoc3RhcnRhdCkgKyAiLjAiCiAgICAgICAgICAgICAgICAgc3RvcGF0aW5kZXggPSAiJWQuZW5kIiAlIGxubwotICAgICAgICAgICAgICAgICMgV2UgYWRkIHRoZSBuZXdsaW5lIGJlY2F1c2UgUHlQYXJzZSByZXF1aXJlcyBhIG5ld2xpbmUgYXQgZW5kLgotICAgICAgICAgICAgICAgICMgV2UgYWRkIGEgc3BhY2Ugc28gdGhhdCBpbmRleCB3b24ndCBiZSBhdCBlbmQgb2YgbGluZSwgc28gdGhhdAotICAgICAgICAgICAgICAgICMgaXRzIHN0YXR1cyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBjaGFyIGJlZm9yZSBpdCwgaWYgc2hvdWxkLgorICAgICAgICAgICAgICAgICMgV2UgYWRkIHRoZSBuZXdsaW5lIGJlY2F1c2UgUHlQYXJzZSByZXF1aXJlcyBhIG5ld2xpbmUKKyAgICAgICAgICAgICAgICAjIGF0IGVuZC4gV2UgYWRkIGEgc3BhY2Ugc28gdGhhdCBpbmRleCB3b24ndCBiZSBhdCBlbmQKKyAgICAgICAgICAgICAgICAjIG9mIGxpbmUsIHNvIHRoYXQgaXRzIHN0YXR1cyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgICAgICMgY2hhciBiZWZvcmUgaXQsIGlmIHNob3VsZC4KICAgICAgICAgICAgICAgICBwYXJzZXIuc2V0X3N0cih0ZXh0LmdldChzdGFydGF0aW5kZXgsIHN0b3BhdGluZGV4KSsnIFxuJykKICAgICAgICAgICAgICAgICBib2QgPSBwYXJzZXIuZmluZF9nb29kX3BhcnNlX3N0YXJ0KAogICAgICAgICAgICAgICAgICAgICAgICAgICBlZGl0d2luLl9idWlsZF9jaGFyX2luX3N0cmluZ19mdW5jKHN0YXJ0YXRpbmRleCkpCkBAIC00OSwxMjIgKzU4LDE3NSBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzdGFydGF0aW5kZXggPSAiMS4wIgogICAgICAgICAgICAgc3RvcGF0aW5kZXggPSAiJWQuZW5kIiAlIGxubwotICAgICAgICAgICAgIyBXZSBhZGQgdGhlIG5ld2xpbmUgYmVjYXVzZSBQeVBhcnNlIHJlcXVpcmVzIGEgbmV3bGluZSBhdCBlbmQuCi0gICAgICAgICAgICAjIFdlIGFkZCBhIHNwYWNlIHNvIHRoYXQgaW5kZXggd29uJ3QgYmUgYXQgZW5kIG9mIGxpbmUsIHNvIHRoYXQKLSAgICAgICAgICAgICMgaXRzIHN0YXR1cyB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSBjaGFyIGJlZm9yZSBpdCwgaWYgc2hvdWxkLgorICAgICAgICAgICAgIyBXZSBhZGQgdGhlIG5ld2xpbmUgYmVjYXVzZSBQeVBhcnNlIHJlcXVpcmVzIGl0LiBXZSBhZGQgYQorICAgICAgICAgICAgIyBzcGFjZSBzbyB0aGF0IGluZGV4IHdvbid0IGJlIGF0IGVuZCBvZiBsaW5lLCBzbyB0aGF0IGl0cworICAgICAgICAgICAgIyBzdGF0dXMgd2lsbCBiZSB0aGUgc2FtZSBhcyB0aGUgY2hhciBiZWZvcmUgaXQsIGlmIHNob3VsZC4KICAgICAgICAgICAgIHBhcnNlci5zZXRfc3RyKHRleHQuZ2V0KHN0YXJ0YXRpbmRleCwgc3RvcGF0aW5kZXgpKycgXG4nKQogICAgICAgICAgICAgcGFyc2VyLnNldF9sbygwKQogCi0gICAgICAgICMgV2Ugd2FudCB3aGF0IHRoZSBwYXJzZXIgaGFzLCBleGNlcHQgZm9yIHRoZSBsYXN0IG5ld2xpbmUgYW5kIHNwYWNlLgorICAgICAgICAjIFdlIHdhbnQgd2hhdCB0aGUgcGFyc2VyIGhhcywgbWludXMgdGhlIGxhc3QgbmV3bGluZSBhbmQgc3BhY2UuCiAgICAgICAgIHNlbGYucmF3dGV4dCA9IHBhcnNlci5zdHJbOi0yXQotICAgICAgICAjIEFzIGZhciBhcyBJIGNhbiBzZWUsIHBhcnNlci5zdHIgcHJlc2VydmVzIHRoZSBzdGF0ZW1lbnQgd2UgYXJlIGluLAotICAgICAgICAjIHNvIHRoYXQgc3RvcGF0aW5kZXggY2FuIGJlIHVzZWQgdG8gc3luY2hyb25pemUgdGhlIHN0cmluZyB3aXRoIHRoZQotICAgICAgICAjIHRleHQgYm94IGluZGljZXMuCisgICAgICAgICMgUGFyc2VyLnN0ciBhcHBhcmVudGx5IHByZXNlcnZlcyB0aGUgc3RhdGVtZW50IHdlIGFyZSBpbiwgc28KKyAgICAgICAgIyB0aGF0IHN0b3BhdGluZGV4IGNhbiBiZSB1c2VkIHRvIHN5bmNocm9uaXplIHRoZSBzdHJpbmcgd2l0aAorICAgICAgICAjIHRoZSB0ZXh0IGJveCBpbmRpY2VzLgogICAgICAgICBzZWxmLnN0b3BhdGluZGV4ID0gc3RvcGF0aW5kZXgKICAgICAgICAgc2VsZi5icmFja2V0aW5nID0gcGFyc2VyLmdldF9sYXN0X3N0bXRfYnJhY2tldGluZygpCi0gICAgICAgICMgZmluZCB3aGljaCBwYWlycyBvZiBicmFja2V0aW5nIGFyZSBvcGVuZXJzLiBUaGVzZSBhbHdheXMgY29ycmVzcG9uZAotICAgICAgICAjIHRvIGEgY2hhcmFjdGVyIG9mIHJhd3RleHQuCi0gICAgICAgIHNlbGYuaXNvcGVuZXIgPSBbaT4wIGFuZCBzZWxmLmJyYWNrZXRpbmdbaV1bMV0gPiBzZWxmLmJyYWNrZXRpbmdbaS0xXVsxXQorICAgICAgICAjIGZpbmQgd2hpY2ggcGFpcnMgb2YgYnJhY2tldGluZyBhcmUgb3BlbmVycy4gVGhlc2UgYWx3YXlzCisgICAgICAgICMgY29ycmVzcG9uZCB0byBhIGNoYXJhY3RlciBvZiByYXd0ZXh0LgorICAgICAgICBzZWxmLmlzb3BlbmVyID0gW2k+MCBhbmQgc2VsZi5icmFja2V0aW5nW2ldWzFdID4KKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJyYWNrZXRpbmdbaS0xXVsxXQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihzZWxmLmJyYWNrZXRpbmcpKV0KIAogICAgICAgICBzZWxmLnNldF9pbmRleChpbmRleCkKIAogICAgIGRlZiBzZXRfaW5kZXgoc2VsZiwgaW5kZXgpOgotICAgICAgICAiIiJTZXQgdGhlIGluZGV4IHRvIHdoaWNoIHRoZSBmdW5jdGlvbnMgcmVsYXRlLiBOb3RlIHRoYXQgaXQgbXVzdCBiZQotICAgICAgICBpbiB0aGUgc2FtZSBzdGF0ZW1lbnQuCisgICAgICAgICIiIlNldCB0aGUgaW5kZXggdG8gd2hpY2ggdGhlIGZ1bmN0aW9ucyByZWxhdGUuCisKKyAgICAgICAgVGhlIGluZGV4IG11c3QgYmUgaW4gdGhlIHNhbWUgc3RhdGVtZW50LgogICAgICAgICAiIiIKLSAgICAgICAgaW5kZXhpbnJhd3RleHQgPSBcCi0gICAgICAgICAgICBsZW4oc2VsZi5yYXd0ZXh0KSAtIGxlbihzZWxmLnRleHQuZ2V0KGluZGV4LCBzZWxmLnN0b3BhdGluZGV4KSkKKyAgICAgICAgaW5kZXhpbnJhd3RleHQgPSAobGVuKHNlbGYucmF3dGV4dCkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oc2VsZi50ZXh0LmdldChpbmRleCwgc2VsZi5zdG9wYXRpbmRleCkpKQogICAgICAgICBpZiBpbmRleGlucmF3dGV4dCA8IDA6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJUaGUgaW5kZXggZ2l2ZW4gaXMgYmVmb3JlIHRoZSBhbmFseXplZCBzdGF0ZW1lbnQiKQorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW5kZXggJXMgcHJlY2VkZXMgdGhlIGFuYWx5emVkIHN0YXRlbWVudCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBpbmRleCkKICAgICAgICAgc2VsZi5pbmRleGlucmF3dGV4dCA9IGluZGV4aW5yYXd0ZXh0CiAgICAgICAgICMgZmluZCB0aGUgcmlnaHRtb3N0IGJyYWNrZXQgdG8gd2hpY2ggaW5kZXggYmVsb25ncwogICAgICAgICBzZWxmLmluZGV4YnJhY2tldCA9IDAKLSAgICAgICAgd2hpbGUgc2VsZi5pbmRleGJyYWNrZXQgPCBsZW4oc2VsZi5icmFja2V0aW5nKS0xIGFuZCBcCi0gICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldCsxXVswXSA8IHNlbGYuaW5kZXhpbnJhd3RleHQ6CisgICAgICAgIHdoaWxlIChzZWxmLmluZGV4YnJhY2tldCA8IGxlbihzZWxmLmJyYWNrZXRpbmcpLTEgYW5kCisgICAgICAgICAgICAgICBzZWxmLmJyYWNrZXRpbmdbc2VsZi5pbmRleGJyYWNrZXQrMV1bMF0gPCBzZWxmLmluZGV4aW5yYXd0ZXh0KToKICAgICAgICAgICAgIHNlbGYuaW5kZXhicmFja2V0ICs9IDEKLSAgICAgICAgaWYgc2VsZi5pbmRleGJyYWNrZXQgPCBsZW4oc2VsZi5icmFja2V0aW5nKS0xIGFuZCBcCi0gICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldCsxXVswXSA9PSBzZWxmLmluZGV4aW5yYXd0ZXh0IGFuZCBcCi0gICAgICAgICAgIG5vdCBzZWxmLmlzb3BlbmVyW3NlbGYuaW5kZXhicmFja2V0KzFdOgorICAgICAgICBpZiAoc2VsZi5pbmRleGJyYWNrZXQgPCBsZW4oc2VsZi5icmFja2V0aW5nKS0xIGFuZAorICAgICAgICAgICAgc2VsZi5icmFja2V0aW5nW3NlbGYuaW5kZXhicmFja2V0KzFdWzBdID09IHNlbGYuaW5kZXhpbnJhd3RleHQgYW5kCisgICAgICAgICAgIG5vdCBzZWxmLmlzb3BlbmVyW3NlbGYuaW5kZXhicmFja2V0KzFdKToKICAgICAgICAgICAgIHNlbGYuaW5kZXhicmFja2V0ICs9IDEKIAogICAgIGRlZiBpc19pbl9zdHJpbmcoc2VsZik6Ci0gICAgICAgICIiIklzIHRoZSBpbmRleCBnaXZlbiB0byB0aGUgSHlwZXJQYXJzZXIgaXMgaW4gYSBzdHJpbmc/IiIiCisgICAgICAgICIiIklzIHRoZSBpbmRleCBnaXZlbiB0byB0aGUgSHlwZXJQYXJzZXIgaW4gYSBzdHJpbmc/IiIiCiAgICAgICAgICMgVGhlIGJyYWNrZXQgdG8gd2hpY2ggd2UgYmVsb25nIHNob3VsZCBiZSBhbiBvcGVuZXIuCiAgICAgICAgICMgSWYgaXQncyBhbiBvcGVuZXIsIGl0IGhhcyB0byBoYXZlIGEgY2hhcmFjdGVyLgotICAgICAgICByZXR1cm4gc2VsZi5pc29wZW5lcltzZWxmLmluZGV4YnJhY2tldF0gYW5kIFwKLSAgICAgICAgICAgICAgIHNlbGYucmF3dGV4dFtzZWxmLmJyYWNrZXRpbmdbc2VsZi5pbmRleGJyYWNrZXRdWzBdXSBpbiAoJyInLCAiJyIpCisgICAgICAgIHJldHVybiAoc2VsZi5pc29wZW5lcltzZWxmLmluZGV4YnJhY2tldF0gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5yYXd0ZXh0W3NlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldF1bMF1dCisgICAgICAgICAgICAgICAgaW4gKCciJywgIiciKSkKIAogICAgIGRlZiBpc19pbl9jb2RlKHNlbGYpOgotICAgICAgICAiIiJJcyB0aGUgaW5kZXggZ2l2ZW4gdG8gdGhlIEh5cGVyUGFyc2VyIGlzIGluIGEgbm9ybWFsIGNvZGU/IiIiCi0gICAgICAgIHJldHVybiBub3Qgc2VsZi5pc29wZW5lcltzZWxmLmluZGV4YnJhY2tldF0gb3IgXAotICAgICAgICAgICAgICAgc2VsZi5yYXd0ZXh0W3NlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldF1bMF1dIG5vdCBpbiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcjJywgJyInLCAiJyIpCisgICAgICAgICIiIklzIHRoZSBpbmRleCBnaXZlbiB0byB0aGUgSHlwZXJQYXJzZXIgaW4gbm9ybWFsIGNvZGU/IiIiCisgICAgICAgIHJldHVybiAobm90IHNlbGYuaXNvcGVuZXJbc2VsZi5pbmRleGJyYWNrZXRdIG9yCisgICAgICAgICAgICAgICAgc2VsZi5yYXd0ZXh0W3NlbGYuYnJhY2tldGluZ1tzZWxmLmluZGV4YnJhY2tldF1bMF1dCisgICAgICAgICAgICAgICAgbm90IGluICgnIycsICciJywgIiciKSkKIAogICAgIGRlZiBnZXRfc3Vycm91bmRpbmdfYnJhY2tldHMoc2VsZiwgb3BlbmVycz0nKFt7JywgbXVzdGNsb3NlPUZhbHNlKToKLSAgICAgICAgIiIiSWYgdGhlIGluZGV4IGdpdmVuIHRvIHRoZSBIeXBlclBhcnNlciBpcyBzdXJyb3VuZGVkIGJ5IGEgYnJhY2tldAotICAgICAgICBkZWZpbmVkIGluIG9wZW5lcnMgKG9yIGF0IGxlYXN0IGhhcyBvbmUgYmVmb3JlIGl0KSwgcmV0dXJuIHRoZQotICAgICAgICBpbmRpY2VzIG9mIHRoZSBvcGVuaW5nIGJyYWNrZXQgYW5kIHRoZSBjbG9zaW5nIGJyYWNrZXQgKG9yIHRoZQotICAgICAgICBlbmQgb2YgbGluZSwgd2hpY2hldmVyIGNvbWVzIGZpcnN0KS4KLSAgICAgICAgSWYgaXQgaXMgbm90IHN1cnJvdW5kZWQgYnkgYnJhY2tldHMsIG9yIHRoZSBlbmQgb2YgbGluZSBjb21lcyBiZWZvcmUKLSAgICAgICAgdGhlIGNsb3NpbmcgYnJhY2tldCBhbmQgbXVzdGNsb3NlIGlzIFRydWUsIHJldHVybnMgTm9uZS4KKyAgICAgICAgIiIiUmV0dXJuIGJyYWNrZXQgaW5kZXhlcyBvciBOb25lLgorCisgICAgICAgIElmIHRoZSBpbmRleCBnaXZlbiB0byB0aGUgSHlwZXJQYXJzZXIgaXMgc3Vycm91bmRlZCBieSBhCisgICAgICAgIGJyYWNrZXQgZGVmaW5lZCBpbiBvcGVuZXJzIChvciBhdCBsZWFzdCBoYXMgb25lIGJlZm9yZSBpdCksCisgICAgICAgIHJldHVybiB0aGUgaW5kaWNlcyBvZiB0aGUgb3BlbmluZyBicmFja2V0IGFuZCB0aGUgY2xvc2luZworICAgICAgICBicmFja2V0IChvciB0aGUgZW5kIG9mIGxpbmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdCkuCisKKyAgICAgICAgSWYgaXQgaXMgbm90IHN1cnJvdW5kZWQgYnkgYnJhY2tldHMsIG9yIHRoZSBlbmQgb2YgbGluZSBjb21lcworICAgICAgICBiZWZvcmUgdGhlIGNsb3NpbmcgYnJhY2tldCBhbmQgbXVzdGNsb3NlIGlzIFRydWUsIHJldHVybnMgTm9uZS4KICAgICAgICAgIiIiCisKICAgICAgICAgYnJhY2tldGluZ2xldmVsID0gc2VsZi5icmFja2V0aW5nW3NlbGYuaW5kZXhicmFja2V0XVsxXQogICAgICAgICBiZWZvcmUgPSBzZWxmLmluZGV4YnJhY2tldAotICAgICAgICB3aGlsZSBub3Qgc2VsZi5pc29wZW5lcltiZWZvcmVdIG9yIFwKLSAgICAgICAgICAgICAgc2VsZi5yYXd0ZXh0W3NlbGYuYnJhY2tldGluZ1tiZWZvcmVdWzBdXSBub3QgaW4gb3BlbmVycyBvciBcCi0gICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tiZWZvcmVdWzFdID4gYnJhY2tldGluZ2xldmVsOgorICAgICAgICB3aGlsZSAobm90IHNlbGYuaXNvcGVuZXJbYmVmb3JlXSBvcgorICAgICAgICAgICAgICBzZWxmLnJhd3RleHRbc2VsZi5icmFja2V0aW5nW2JlZm9yZV1bMF1dIG5vdCBpbiBvcGVuZXJzIG9yCisgICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1tiZWZvcmVdWzFdID4gYnJhY2tldGluZ2xldmVsKToKICAgICAgICAgICAgIGJlZm9yZSAtPSAxCiAgICAgICAgICAgICBpZiBiZWZvcmUgPCAwOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBicmFja2V0aW5nbGV2ZWwgPSBtaW4oYnJhY2tldGluZ2xldmVsLCBzZWxmLmJyYWNrZXRpbmdbYmVmb3JlXVsxXSkKICAgICAgICAgYWZ0ZXIgPSBzZWxmLmluZGV4YnJhY2tldCArIDEKLSAgICAgICAgd2hpbGUgYWZ0ZXIgPCBsZW4oc2VsZi5icmFja2V0aW5nKSBhbmQgXAotICAgICAgICAgICAgICBzZWxmLmJyYWNrZXRpbmdbYWZ0ZXJdWzFdID49IGJyYWNrZXRpbmdsZXZlbDoKKyAgICAgICAgd2hpbGUgKGFmdGVyIDwgbGVuKHNlbGYuYnJhY2tldGluZykgYW5kCisgICAgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1thZnRlcl1bMV0gPj0gYnJhY2tldGluZ2xldmVsKToKICAgICAgICAgICAgIGFmdGVyICs9IDEKIAogICAgICAgICBiZWZvcmVpbmRleCA9IHNlbGYudGV4dC5pbmRleCgiJXMtJWRjIiAlCiAgICAgICAgICAgICAoc2VsZi5zdG9wYXRpbmRleCwgbGVuKHNlbGYucmF3dGV4dCktc2VsZi5icmFja2V0aW5nW2JlZm9yZV1bMF0pKQotICAgICAgICBpZiBhZnRlciA+PSBsZW4oc2VsZi5icmFja2V0aW5nKSBvciBcCi0gICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1thZnRlcl1bMF0gPiBsZW4oc2VsZi5yYXd0ZXh0KToKKyAgICAgICAgaWYgKGFmdGVyID49IGxlbihzZWxmLmJyYWNrZXRpbmcpIG9yCisgICAgICAgICAgIHNlbGYuYnJhY2tldGluZ1thZnRlcl1bMF0gPiBsZW4oc2VsZi5yYXd0ZXh0KSk6CiAgICAgICAgICAgICBpZiBtdXN0Y2xvc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgIGFmdGVyaW5kZXggPSBzZWxmLnN0b3BhdGluZGV4CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIFdlIGFyZSBhZnRlciBhIHJlYWwgY2hhciwgc28gaXQgaXMgYSAnKScgYW5kIHdlIGdpdmUgdGhlIGluZGV4Ci0gICAgICAgICAgICAjIGJlZm9yZSBpdC4KLSAgICAgICAgICAgIGFmdGVyaW5kZXggPSBzZWxmLnRleHQuaW5kZXgoIiVzLSVkYyIgJQotICAgICAgICAgICAgICAgIChzZWxmLnN0b3BhdGluZGV4LAorICAgICAgICAgICAgIyBXZSBhcmUgYWZ0ZXIgYSByZWFsIGNoYXIsIHNvIGl0IGlzIGEgJyknIGFuZCB3ZSBnaXZlIHRoZQorICAgICAgICAgICAgIyBpbmRleCBiZWZvcmUgaXQuCisgICAgICAgICAgICBhZnRlcmluZGV4ID0gc2VsZi50ZXh0LmluZGV4KAorICAgICAgICAgICAgICAgICIlcy0lZGMiICUgKHNlbGYuc3RvcGF0aW5kZXgsCiAgICAgICAgICAgICAgICAgIGxlbihzZWxmLnJhd3RleHQpLShzZWxmLmJyYWNrZXRpbmdbYWZ0ZXJdWzBdLTEpKSkKIAogICAgICAgICByZXR1cm4gYmVmb3JlaW5kZXgsIGFmdGVyaW5kZXgKIAotICAgICMgVGhpcyBzdHJpbmcgaW5jbHVkZXMgYWxsIGNoYXJzIHRoYXQgbWF5IGJlIGluIGEgd2hpdGUgc3BhY2UKLSAgICBfd2hpdGVzcGFjZV9jaGFycyA9ICIgXHRcblxcIgotICAgICMgVGhpcyBzdHJpbmcgaW5jbHVkZXMgYWxsIGNoYXJzIHRoYXQgbWF5IGJlIGluIGFuIGlkZW50aWZpZXIKLSAgICBfaWRfY2hhcnMgPSBzdHJpbmcuYXNjaWlfbGV0dGVycyArIHN0cmluZy5kaWdpdHMgKyAiXyIKLSAgICAjIFRoaXMgc3RyaW5nIGluY2x1ZGVzIGFsbCBjaGFycyB0aGF0IG1heSBiZSB0aGUgZmlyc3QgY2hhciBvZiBhbiBpZGVudGlmaWVyCi0gICAgX2lkX2ZpcnN0X2NoYXJzID0gc3RyaW5nLmFzY2lpX2xldHRlcnMgKyAiXyIKKyAgICAjIHRoZSBzZXQgb2YgYnVpbHQtaW4gaWRlbnRpZmllcnMgd2hpY2ggYXJlIGFsc28ga2V5d29yZHMsCisgICAgIyBpLmUuIGtleXdvcmQuaXNrZXl3b3JkKCkgcmV0dXJucyBUcnVlIGZvciB0aGVtCisgICAgX0lEX0tFWVdPUkRTID0gZnJvemVuc2V0KHsiVHJ1ZSIsICJGYWxzZSIsICJOb25lIn0pCiAKLSAgICAjIEdpdmVuIGEgc3RyaW5nIGFuZCBwb3MsIHJldHVybiB0aGUgbnVtYmVyIG9mIGNoYXJzIGluIHRoZSBpZGVudGlmaWVyCi0gICAgIyB3aGljaCBlbmRzIGF0IHBvcywgb3IgMCBpZiB0aGVyZSBpcyBubyBzdWNoIG9uZS4gU2F2ZWQgd29yZHMgYXJlIG5vdAotICAgICMgaWRlbnRpZmllcnMuCi0gICAgZGVmIF9lYXRfaWRlbnRpZmllcihzZWxmLCBzdHIsIGxpbWl0LCBwb3MpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZWF0X2lkZW50aWZpZXIoY2xzLCBzdHIsIGxpbWl0LCBwb3MpOgorICAgICAgICAiIiJHaXZlbiBhIHN0cmluZyBhbmQgcG9zLCByZXR1cm4gdGhlIG51bWJlciBvZiBjaGFycyBpbiB0aGUKKyAgICAgICAgaWRlbnRpZmllciB3aGljaCBlbmRzIGF0IHBvcywgb3IgMCBpZiB0aGVyZSBpcyBubyBzdWNoIG9uZS4KKworICAgICAgICBUaGlzIGlnbm9yZXMgbm9uLWlkZW50aWZpZXIgZXl3b3JkcyBhcmUgbm90IGlkZW50aWZpZXJzLgorICAgICAgICAiIiIKKyAgICAgICAgaXNfYXNjaWlfaWRfY2hhciA9IF9JU19BU0NJSV9JRF9DSEFSCisKKyAgICAgICAgIyBTdGFydCBhdCB0aGUgZW5kIChwb3MpIGFuZCB3b3JrIGJhY2t3YXJkcy4KICAgICAgICAgaSA9IHBvcwotICAgICAgICB3aGlsZSBpID4gbGltaXQgYW5kIHN0cltpLTFdIGluIHNlbGYuX2lkX2NoYXJzOgorCisgICAgICAgICMgR28gYmFja3dhcmRzIGFzIGxvbmcgYXMgdGhlIGNoYXJhY3RlcnMgYXJlIHZhbGlkIEFTQ0lJCisgICAgICAgICMgaWRlbnRpZmllciBjaGFyYWN0ZXJzLiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiwgc2luY2UgaXQKKyAgICAgICAgIyBpcyBmYXN0ZXIgaW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIG1vc3Qgb2YgdGhlIGNoYXJhY3RlcnMKKyAgICAgICAgIyBhcmUgQVNDSUkuCisgICAgICAgIHdoaWxlIGkgPiBsaW1pdCBhbmQgKAorICAgICAgICAgICAgICAgIG9yZChzdHJbaSAtIDFdKSA8IDEyOCBhbmQKKyAgICAgICAgICAgICAgICBpc19hc2NpaV9pZF9jaGFyW29yZChzdHJbaSAtIDFdKV0KKyAgICAgICAgKToKICAgICAgICAgICAgIGkgLT0gMQotICAgICAgICBpZiBpIDwgcG9zIGFuZCAoc3RyW2ldIG5vdCBpbiBzZWxmLl9pZF9maXJzdF9jaGFycyBvciBcCi0gICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkLmlza2V5d29yZChzdHJbaTpwb3NdKSk6Ci0gICAgICAgICAgICBpID0gcG9zCisKKyAgICAgICAgIyBJZiB0aGUgYWJvdmUgbG9vcCBlbmRlZCBkdWUgdG8gcmVhY2hpbmcgYSBub24tQVNDSUkKKyAgICAgICAgIyBjaGFyYWN0ZXIsIGNvbnRpbnVlIGdvaW5nIGJhY2t3YXJkcyB1c2luZyB0aGUgbW9zdCBnZW5lcmljCisgICAgICAgICMgdGVzdCBmb3Igd2hldGhlciBhIHN0cmluZyBjb250YWlucyBvbmx5IHZhbGlkIGlkZW50aWZpZXIKKyAgICAgICAgIyBjaGFyYWN0ZXJzLgorICAgICAgICBpZiBpID4gbGltaXQgYW5kIG9yZChzdHJbaSAtIDFdKSA+PSAxMjg6CisgICAgICAgICAgICB3aGlsZSBpIC0gNCA+PSBsaW1pdCBhbmQgKCdhJyArIHN0cltpIC0gNDpwb3NdKS5pc2lkZW50aWZpZXIoKToKKyAgICAgICAgICAgICAgICBpIC09IDQKKyAgICAgICAgICAgIGlmIGkgLSAyID49IGxpbWl0IGFuZCAoJ2EnICsgc3RyW2kgLSAyOnBvc10pLmlzaWRlbnRpZmllcigpOgorICAgICAgICAgICAgICAgIGkgLT0gMgorICAgICAgICAgICAgaWYgaSAtIDEgPj0gbGltaXQgYW5kICgnYScgKyBzdHJbaSAtIDE6cG9zXSkuaXNpZGVudGlmaWVyKCk6CisgICAgICAgICAgICAgICAgaSAtPSAxCisKKyAgICAgICAgICAgICMgVGhlIGlkZW50aWZpZXIgY2FuZGlkYXRlIHN0YXJ0cyBoZXJlLiBJZiBpdCBpc24ndCBhIHZhbGlkCisgICAgICAgICAgICAjIGlkZW50aWZpZXIsIGRvbid0IGVhdCBhbnl0aGluZy4gQXQgdGhpcyBwb2ludCB0aGF0IGlzIG9ubHkKKyAgICAgICAgICAgICMgcG9zc2libGUgaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBpc24ndCBhIHZhbGlkIGZpcnN0CisgICAgICAgICAgICAjIGNoYXJhY3RlciBmb3IgYW4gaWRlbnRpZmllci4KKyAgICAgICAgICAgIGlmIG5vdCBzdHJbaTpwb3NdLmlzaWRlbnRpZmllcigpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIGVsaWYgaSA8IHBvczoKKyAgICAgICAgICAgICMgQWxsIGNoYXJhY3RlcnMgaW4gc3RyW2k6cG9zXSBhcmUgdmFsaWQgQVNDSUkgaWRlbnRpZmllcgorICAgICAgICAgICAgIyBjaGFyYWN0ZXJzLCBzbyBpdCBpcyBlbm91Z2ggdG8gY2hlY2sgdGhhdCB0aGUgZmlyc3QgaXMKKyAgICAgICAgICAgICMgdmFsaWQgYXMgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBhbiBpZGVudGlmaWVyLgorICAgICAgICAgICAgaWYgbm90IF9JU19BU0NJSV9JRF9GSVJTVF9DSEFSW29yZChzdHJbaV0pXToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgICMgQWxsIGtleXdvcmRzIGFyZSB2YWxpZCBpZGVudGlmaWVycywgYnV0IHNob3VsZCBub3QgYmUKKyAgICAgICAgIyBjb25zaWRlcmVkIGlkZW50aWZpZXJzIGhlcmUsIGV4Y2VwdCBmb3IgVHJ1ZSwgRmFsc2UgYW5kIE5vbmUuCisgICAgICAgIGlmIGkgPCBwb3MgYW5kICgKKyAgICAgICAgICAgICAgICBpc2tleXdvcmQoc3RyW2k6cG9zXSkgYW5kCisgICAgICAgICAgICAgICAgc3RyW2k6cG9zXSBub3QgaW4gY2xzLl9JRF9LRVlXT1JEUworICAgICAgICApOgorICAgICAgICAgICAgcmV0dXJuIDAKKwogICAgICAgICByZXR1cm4gcG9zIC0gaQogCisgICAgIyBUaGlzIHN0cmluZyBpbmNsdWRlcyBhbGwgY2hhcnMgdGhhdCBtYXkgYmUgaW4gYSB3aGl0ZSBzcGFjZQorICAgIF93aGl0ZXNwYWNlX2NoYXJzID0gIiBcdFxuXFwiCisKICAgICBkZWYgZ2V0X2V4cHJlc3Npb24oc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBhIHN0cmluZyB3aXRoIHRoZSBQeXRob24gZXhwcmVzc2lvbiB3aGljaCBlbmRzIGF0IHRoZSBnaXZlbgotICAgICAgICBpbmRleCwgd2hpY2ggaXMgZW1wdHkgaWYgdGhlcmUgaXMgbm8gcmVhbCBvbmUuCisgICAgICAgICIiIlJldHVybiBhIHN0cmluZyB3aXRoIHRoZSBQeXRob24gZXhwcmVzc2lvbiB3aGljaCBlbmRzIGF0IHRoZQorICAgICAgICBnaXZlbiBpbmRleCwgd2hpY2ggaXMgZW1wdHkgaWYgdGhlcmUgaXMgbm8gcmVhbCBvbmUuCiAgICAgICAgICIiIgogICAgICAgICBpZiBub3Qgc2VsZi5pc19pbl9jb2RlKCk6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJnZXRfZXhwcmVzc2lvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaWYgaW5kZXggIlwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlzIGluc2lkZSBhIGNvZGUuIikKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImdldF9leHByZXNzaW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlmIGluZGV4IGlzIGluc2lkZSBhIGNvZGUuIikKIAogICAgICAgICByYXd0ZXh0ID0gc2VsZi5yYXd0ZXh0CiAgICAgICAgIGJyYWNrZXRpbmcgPSBzZWxmLmJyYWNrZXRpbmcKQEAgLTE3NywyMCArMjM5LDIwIEBACiAgICAgICAgIHBvc3Rkb3RfcGhhc2UgPSBUcnVlCiAKICAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgRWF0IHdoaXRlc3BhY2VzLCBjb21tZW50cywgYW5kIGlmIHBvc3Rkb3RfcGhhc2UgaXMgRmFsc2UgLSBvbmUgZG90CisgICAgICAgICAgICAjIEVhdCB3aGl0ZXNwYWNlcywgY29tbWVudHMsIGFuZCBpZiBwb3N0ZG90X3BoYXNlIGlzIEZhbHNlIC0gYSBkb3QKICAgICAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICAgICAgaWYgcG9zPmJyY2tfbGltaXQgYW5kIHJhd3RleHRbcG9zLTFdIGluIHNlbGYuX3doaXRlc3BhY2VfY2hhcnM6CiAgICAgICAgICAgICAgICAgICAgICMgRWF0IGEgd2hpdGVzcGFjZQogICAgICAgICAgICAgICAgICAgICBwb3MgLT0gMQotICAgICAgICAgICAgICAgIGVsaWYgbm90IHBvc3Rkb3RfcGhhc2UgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgIHBvcyA+IGJyY2tfbGltaXQgYW5kIHJhd3RleHRbcG9zLTFdID09ICcuJzoKKyAgICAgICAgICAgICAgICBlbGlmIChub3QgcG9zdGRvdF9waGFzZSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICBwb3MgPiBicmNrX2xpbWl0IGFuZCByYXd0ZXh0W3Bvcy0xXSA9PSAnLicpOgogICAgICAgICAgICAgICAgICAgICAjIEVhdCBhIGRvdAogICAgICAgICAgICAgICAgICAgICBwb3MgLT0gMQogICAgICAgICAgICAgICAgICAgICBwb3N0ZG90X3BoYXNlID0gVHJ1ZQotICAgICAgICAgICAgICAgICMgVGhlIG5leHQgbGluZSB3aWxsIGZhaWwgaWYgd2UgYXJlICppbnNpZGUqIGEgY29tbWVudCwgYnV0IHdlCi0gICAgICAgICAgICAgICAgIyBzaG91bGRuJ3QgYmUuCi0gICAgICAgICAgICAgICAgZWxpZiBwb3MgPT0gYnJja19saW1pdCBhbmQgYnJja19pbmRleCA+IDAgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgIHJhd3RleHRbYnJhY2tldGluZ1ticmNrX2luZGV4LTFdWzBdXSA9PSAnIyc6CisgICAgICAgICAgICAgICAgIyBUaGUgbmV4dCBsaW5lIHdpbGwgZmFpbCBpZiB3ZSBhcmUgKmluc2lkZSogYSBjb21tZW50LAorICAgICAgICAgICAgICAgICMgYnV0IHdlIHNob3VsZG4ndCBiZS4KKyAgICAgICAgICAgICAgICBlbGlmIChwb3MgPT0gYnJja19saW1pdCBhbmQgYnJja19pbmRleCA+IDAgYW5kCisgICAgICAgICAgICAgICAgICAgICAgcmF3dGV4dFticmFja2V0aW5nW2JyY2tfaW5kZXgtMV1bMF1dID09ICcjJyk6CiAgICAgICAgICAgICAgICAgICAgICMgRWF0IGEgY29tbWVudAogICAgICAgICAgICAgICAgICAgICBicmNrX2luZGV4IC09IDIKICAgICAgICAgICAgICAgICAgICAgYnJja19saW1pdCA9IGJyYWNrZXRpbmdbYnJja19pbmRleF1bMF0KQEAgLTIwMCw4ICsyNjIsOCBAQAogICAgICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBpZiBub3QgcG9zdGRvdF9waGFzZToKLSAgICAgICAgICAgICAgICAjIFdlIGRpZG4ndCBmaW5kIGEgZG90LCBzbyB0aGUgZXhwcmVzc2lvbiBlbmQgYXQgdGhlIGxhc3QKLSAgICAgICAgICAgICAgICAjIGlkZW50aWZpZXIgcG9zLgorICAgICAgICAgICAgICAgICMgV2UgZGlkbid0IGZpbmQgYSBkb3QsIHNvIHRoZSBleHByZXNzaW9uIGVuZCBhdCB0aGUKKyAgICAgICAgICAgICAgICAjIGxhc3QgaWRlbnRpZmllciBwb3MuCiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgcmV0ID0gc2VsZi5fZWF0X2lkZW50aWZpZXIocmF3dGV4dCwgYnJja19saW1pdCwgcG9zKQpAQCAtMjA5LDEzICsyNzEsMTMgQEAKICAgICAgICAgICAgICAgICAjIFRoZXJlIGlzIGFuIGlkZW50aWZpZXIgdG8gZWF0CiAgICAgICAgICAgICAgICAgcG9zID0gcG9zIC0gcmV0CiAgICAgICAgICAgICAgICAgbGFzdF9pZGVudGlmaWVyX3BvcyA9IHBvcwotICAgICAgICAgICAgICAgICMgTm93LCBpbiBvcmRlciB0byBjb250aW51ZSB0aGUgc2VhcmNoLCB3ZSBtdXN0IGZpbmQgYSBkb3QuCisgICAgICAgICAgICAgICAgIyBOb3csIHRvIGNvbnRpbnVlIHRoZSBzZWFyY2gsIHdlIG11c3QgZmluZCBhIGRvdC4KICAgICAgICAgICAgICAgICBwb3N0ZG90X3BoYXNlID0gRmFsc2UKICAgICAgICAgICAgICAgICAjICh0aGUgbG9vcCBjb250aW51ZXMgbm93KQogCiAgICAgICAgICAgICBlbGlmIHBvcyA9PSBicmNrX2xpbWl0OgotICAgICAgICAgICAgICAgICMgV2UgYXJlIGF0IGEgYnJhY2tldGluZyBsaW1pdC4gSWYgaXQgaXMgYSBjbG9zaW5nIGJyYWNrZXQsCi0gICAgICAgICAgICAgICAgIyBlYXQgdGhlIGJyYWNrZXQsIG90aGVyd2lzZSwgc3RvcCB0aGUgc2VhcmNoLgorICAgICAgICAgICAgICAgICMgV2UgYXJlIGF0IGEgYnJhY2tldGluZyBsaW1pdC4gSWYgaXQgaXMgYSBjbG9zaW5nCisgICAgICAgICAgICAgICAgIyBicmFja2V0LCBlYXQgdGhlIGJyYWNrZXQsIG90aGVyd2lzZSwgc3RvcCB0aGUgc2VhcmNoLgogICAgICAgICAgICAgICAgIGxldmVsID0gYnJhY2tldGluZ1ticmNrX2luZGV4XVsxXQogICAgICAgICAgICAgICAgIHdoaWxlIGJyY2tfaW5kZXggPiAwIGFuZCBicmFja2V0aW5nW2JyY2tfaW5kZXgtMV1bMV0gPiBsZXZlbDoKICAgICAgICAgICAgICAgICAgICAgYnJja19pbmRleCAtPSAxCkBAIC0yNDQsMyArMzA2LDggQEAKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIHJldHVybiByYXd0ZXh0W2xhc3RfaWRlbnRpZmllcl9wb3M6c2VsZi5pbmRleGlucmF3dGV4dF0KKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGltcG9ydCB1bml0dGVzdAorICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfaHlwZXJwYXJzZXInLCB2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0lPQmluZGluZy5weSBiL0xpYi9pZGxlbGliL0lPQmluZGluZy5weQppbmRleCBmMDA4YjQ2Li41ZWM5ZDU0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9JT0JpbmRpbmcucHkKKysrIGIvTGliL2lkbGVsaWIvSU9CaW5kaW5nLnB5CkBAIC0xLDE4ICsxLDE2IEBACitpbXBvcnQgY29kZWNzCitmcm9tIGNvZGVjcyBpbXBvcnQgQk9NX1VURjgKIGltcG9ydCBvcwotaW1wb3J0IHR5cGVzCitpbXBvcnQgcmUKIGltcG9ydCBzaGxleAogaW1wb3J0IHN5cwotaW1wb3J0IGNvZGVjcwogaW1wb3J0IHRlbXBmaWxlCisKIGltcG9ydCB0a2ludGVyLmZpbGVkaWFsb2cgYXMgdGtGaWxlRGlhbG9nCiBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAotaW1wb3J0IHJlCi1mcm9tIHRraW50ZXIgaW1wb3J0ICoKIGZyb20gdGtpbnRlci5zaW1wbGVkaWFsb2cgaW1wb3J0IGFza3N0cmluZwogCi1mcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIAotZnJvbSBjb2RlY3MgaW1wb3J0IEJPTV9VVEY4CiAKICMgVHJ5IHNldHRpbmcgdGhlIGxvY2FsZSwgc28gdGhhdCB3ZSBjYW4gZmluZCBvdXQKICMgd2hhdCBlbmNvZGluZyB0byB1c2UKQEAgLTIxOCw3ICsyMTYsNyBAQAogICAgICAgICAgICAgICAgIGYuc2VlaygwKQogICAgICAgICAgICAgICAgIGJ5dGVzID0gZi5yZWFkKCkKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSS9PIEVycm9yIiwgc3RyKG1zZyksIG1hc3Rlcj1zZWxmLnRleHQpCisgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJJL08gRXJyb3IiLCBzdHIobXNnKSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBjaGFycywgY29udmVydGVkID0gc2VsZi5fZGVjb2RlKHR3b19saW5lcywgYnl0ZXMpCiAgICAgICAgIGlmIGNoYXJzIGlzIE5vbmU6CkBAIC0yNjcsNyArMjY1LDcgQEAKICAgICAgICAgICAgICAgICB0aXRsZT0iRXJyb3IgbG9hZGluZyB0aGUgZmlsZSIsCiAgICAgICAgICAgICAgICAgbWVzc2FnZT0iVGhlIGVuY29kaW5nICclcycgaXMgbm90IGtub3duIHRvIHRoaXMgUHl0aG9uICJcCiAgICAgICAgICAgICAgICAgImluc3RhbGxhdGlvbi4gVGhlIGZpbGUgbWF5IG5vdCBkaXNwbGF5IGNvcnJlY3RseSIgJSBuYW1lLAotICAgICAgICAgICAgICAgIG1hc3RlciA9IHNlbGYudGV4dCkKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRleHQpCiAgICAgICAgICAgICBlbmMgPSBOb25lCiAgICAgICAgIGV4Y2VwdCBVbmljb2RlRGVjb2RlRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gTm9uZSwgRmFsc2UKQEAgLTMyMiw3ICszMjAsNyBAQAogICAgICAgICAgICAgICAgICAgdGl0bGU9IlNhdmUgT24gQ2xvc2UiLAogICAgICAgICAgICAgICAgICAgbWVzc2FnZT1tZXNzYWdlLAogICAgICAgICAgICAgICAgICAgZGVmYXVsdD10a01lc3NhZ2VCb3guWUVTLAotICAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYudGV4dCkKKyAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgIGlmIGNvbmZpcm06CiAgICAgICAgICAgICByZXBseSA9ICJ5ZXMiCiAgICAgICAgICAgICBzZWxmLnNhdmUoTm9uZSkKQEAgLTM4Miw3ICszODAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFRydWUKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSS9PIEVycm9yIiwgc3RyKG1zZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgIGRlZiBlbmNvZGUoc2VsZiwgY2hhcnMpOgpAQCAtNDE5LDcgKzQxNyw3IEBACiAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoCiAgICAgICAgICAgICAiSS9PIEVycm9yIiwKICAgICAgICAgICAgICIlcy5cblNhdmluZyBhcyBVVEYtOCIgJSBmYWlsZWQsCi0gICAgICAgICAgICBtYXN0ZXIgPSBzZWxmLnRleHQpCisgICAgICAgICAgICBwYXJlbnQgPSBzZWxmLnRleHQpCiAgICAgICAgICMgRmFsbGJhY2s6IHNhdmUgYXMgVVRGLTgsIHdpdGggQk9NIC0gaWdub3JpbmcgdGhlIGluY29ycmVjdAogICAgICAgICAjIGRlY2xhcmVkIGVuY29kaW5nCiAgICAgICAgIHJldHVybiBCT01fVVRGOCArIGNoYXJzLmVuY29kZSgidXRmLTgiKQpAQCAtNDM0LDcgKzQzMiw3IEBACiAgICAgICAgICAgICAgICAgICB0aXRsZT0iUHJpbnQiLAogICAgICAgICAgICAgICAgICAgbWVzc2FnZT0iUHJpbnQgdG8gRGVmYXVsdCBQcmludGVyIiwKICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ9dGtNZXNzYWdlQm94Lk9LLAotICAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYudGV4dCkKKyAgICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgIGlmIG5vdCBjb25maXJtOgogICAgICAgICAgICAgc2VsZi50ZXh0LmZvY3VzX3NldCgpCiAgICAgICAgICAgICByZXR1cm4gImJyZWFrIgpAQCAtNDcxLDEwICs0NjksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMgKyBvdXRwdXQKICAgICAgICAgICAgIGlmIG91dHB1dDoKICAgICAgICAgICAgICAgICBvdXRwdXQgPSAiUHJpbnRpbmcgY29tbWFuZDogJXNcbiIgJSByZXByKGNvbW1hbmQpICsgb3V0cHV0Ci0gICAgICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiUHJpbnQgc3RhdHVzIiwgb3V0cHV0LCBtYXN0ZXI9c2VsZi50ZXh0KQorICAgICAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIlByaW50IHN0YXR1cyIsIG91dHB1dCwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgZWxzZTogICNubyBwcmludGluZyBmb3IgdGhpcyBwbGF0Zm9ybQogICAgICAgICAgICAgbWVzc2FnZSA9ICJQcmludGluZyBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBwbGF0Zm9ybTogJXMiICUgcGxhdGZvcm0KLSAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93aW5mbygiUHJpbnQgc3RhdHVzIiwgbWVzc2FnZSwgbWFzdGVyPXNlbGYudGV4dCkKKyAgICAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93aW5mbygiUHJpbnQgc3RhdHVzIiwgbWVzc2FnZSwgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgaWYgdGVtcGZpbGVuYW1lOgogICAgICAgICAgICAgb3MudW5saW5rKHRlbXBmaWxlbmFtZSkKICAgICAgICAgcmV0dXJuICJicmVhayIKQEAgLTQ5Myw3ICs0OTEsNyBAQAogICAgIGRlZiBhc2tvcGVuZmlsZShzZWxmKToKICAgICAgICAgZGlyLCBiYXNlID0gc2VsZi5kZWZhdWx0ZmlsZW5hbWUoIm9wZW4iKQogICAgICAgICBpZiBub3Qgc2VsZi5vcGVuZGlhbG9nOgotICAgICAgICAgICAgc2VsZi5vcGVuZGlhbG9nID0gdGtGaWxlRGlhbG9nLk9wZW4obWFzdGVyPXNlbGYudGV4dCwKKyAgICAgICAgICAgIHNlbGYub3BlbmRpYWxvZyA9IHRrRmlsZURpYWxvZy5PcGVuKHBhcmVudD1zZWxmLnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxldHlwZXM9c2VsZi5maWxldHlwZXMpCiAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vcGVuZGlhbG9nLnNob3coaW5pdGlhbGRpcj1kaXIsIGluaXRpYWxmaWxlPWJhc2UpCiAgICAgICAgIHJldHVybiBmaWxlbmFtZQpAQCAtNTA2LDcgKzUwNCw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHB3ZCA9ICIiCiAgICAgICAgICAgICByZXR1cm4gcHdkLCAiIgogCkBAIC01MTQsNyArNTEyLDcgQEAKICAgICAgICAgZGlyLCBiYXNlID0gc2VsZi5kZWZhdWx0ZmlsZW5hbWUoInNhdmUiKQogICAgICAgICBpZiBub3Qgc2VsZi5zYXZlZGlhbG9nOgogICAgICAgICAgICAgc2VsZi5zYXZlZGlhbG9nID0gdGtGaWxlRGlhbG9nLlNhdmVBcygKLSAgICAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYudGV4dCwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYudGV4dCwKICAgICAgICAgICAgICAgICAgICAgZmlsZXR5cGVzPXNlbGYuZmlsZXR5cGVzLAogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0ZXh0ZW5zaW9uPXNlbGYuZGVmYXVsdGV4dGVuc2lvbikKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLnNhdmVkaWFsb2cuc2hvdyhpbml0aWFsZGlyPWRpciwgaW5pdGlhbGZpbGU9YmFzZSkKQEAgLTUyNSwxNiArNTIzLDIwIEBACiAgICAgICAgIGlmIHNlbGYuZWRpdHdpbi5mbGlzdDoKICAgICAgICAgICAgIHNlbGYuZWRpdHdpbi51cGRhdGVfcmVjZW50X2ZpbGVzX2xpc3QoZmlsZW5hbWUpCiAKLWRlZiB0ZXN0KCk6Ci0gICAgcm9vdCA9IFRrKCkKK2RlZiBfaW9fYmluZGluZyhwYXJlbnQpOiAgIyBodGVzdCAjCisgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbCwgVGV4dAorICAgIGZyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgorCisgICAgcm9vdCA9IFRvcGxldmVsKHBhcmVudCkKKyAgICByb290LnRpdGxlKCJUZXN0IElPQmluZGluZyIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogICAgIGNsYXNzIE15RWRpdFdpbjoKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgogICAgICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAogICAgICAgICAgICAgc2VsZi5mbGlzdCA9IE5vbmUKICAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKCI8Q29udHJvbC1vPiIsIHNlbGYub3BlbikKICAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKCI8Q29udHJvbC1zPiIsIHNlbGYuc2F2ZSkKLSAgICAgICAgICAgIHNlbGYudGV4dC5iaW5kKCI8QWx0LXM+Iiwgc2VsZi5zYXZlX2FzKQotICAgICAgICAgICAgc2VsZi50ZXh0LmJpbmQoIjxBbHQtej4iLCBzZWxmLnNhdmVfYV9jb3B5KQogICAgICAgICBkZWYgZ2V0X3NhdmVkKHNlbGYpOiByZXR1cm4gMAogICAgICAgICBkZWYgc2V0X3NhdmVkKHNlbGYsIGZsYWcpOiBwYXNzCiAgICAgICAgIGRlZiByZXNldF91bmRvKHNlbGYpOiBwYXNzCkBAIC01NDIsMTYgKzU0NCwxMyBAQAogICAgICAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2dlbmVyYXRlKCI8PG9wZW4td2luZG93LWZyb20tZmlsZT4+IikKICAgICAgICAgZGVmIHNhdmUoc2VsZiwgZXZlbnQpOgogICAgICAgICAgICAgc2VsZi50ZXh0LmV2ZW50X2dlbmVyYXRlKCI8PHNhdmUtd2luZG93Pj4iKQotICAgICAgICBkZWYgc2F2ZV9hcyhzZWxmLCBldmVudCk6Ci0gICAgICAgICAgICBzZWxmLnRleHQuZXZlbnRfZ2VuZXJhdGUoIjw8c2F2ZS13aW5kb3ctYXMtZmlsZT4+IikKLSAgICAgICAgZGVmIHNhdmVfYV9jb3B5KHNlbGYsIGV2ZW50KToKLSAgICAgICAgICAgIHNlbGYudGV4dC5ldmVudF9nZW5lcmF0ZSgiPDxzYXZlLWNvcHktb2Ytd2luZG93LWFzLWZpbGU+PiIpCisKICAgICB0ZXh0ID0gVGV4dChyb290KQogICAgIHRleHQucGFjaygpCiAgICAgdGV4dC5mb2N1c19zZXQoKQogICAgIGVkaXR3aW4gPSBNeUVkaXRXaW4odGV4dCkKLSAgICBpbyA9IElPQmluZGluZyhlZGl0d2luKQotICAgIHJvb3QubWFpbmxvb3AoKQorICAgIElPQmluZGluZyhlZGl0d2luKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3QoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfaW9fYmluZGluZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL0lkbGVIaXN0b3J5LnB5IGIvTGliL2lkbGVsaWIvSWRsZUhpc3RvcnkucHkKaW5kZXggZDZjYjE2Mi4uMDc4YWYyOSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvSWRsZUhpc3RvcnkucHkKKysrIGIvTGliL2lkbGVsaWIvSWRsZUhpc3RvcnkucHkKQEAgLTEwMCw3ICsxMDAsNSBAQAogICAgICAgICBzZWxmLnByZWZpeCA9IE5vbmUKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLSAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCiAgICAgZnJvbSB1bml0dGVzdCBpbXBvcnQgbWFpbgogICAgIG1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfaWRsZWhpc3RvcnknLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weSBiL0xpYi9pZGxlbGliL011bHRpQ2FsbC5weQppbmRleCA2NDcyOWVhLi4yNTFhODRkIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9NdWx0aUNhbGwucHkKKysrIGIvTGliL2lkbGVsaWIvTXVsdGlDYWxsLnB5CkBAIC0zMiw3ICszMiw2IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKIGltcG9ydCB0a2ludGVyCi1mcm9tIGlkbGVsaWIgaW1wb3J0IG1hY29zeFN1cHBvcnQKIAogIyB0aGUgZXZlbnQgdHlwZSBjb25zdGFudHMsIHdoaWNoIGRlZmluZSB0aGUgbWVhbmluZyBvZiBtY190eXBlCiBNQ19LRVlQUkVTUz0wOyBNQ19LRVlSRUxFQVNFPTE7IE1DX0JVVFRPTlBSRVNTPTI7IE1DX0JVVFRPTlJFTEVBU0U9MzsKQEAgLTQ1LDcgKzQ0LDcgQEAKIE1DX09QVElPTiA9IDE8PDY7IE1DX0NPTU1BTkQgPSAxPDw3CiAKICMgZGVmaW5lIHRoZSBsaXN0IG9mIG1vZGlmaWVycywgdG8gYmUgdXNlZCBpbiBjb21wbGV4IGV2ZW50IHR5cGVzLgotaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKK2lmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICBfbW9kaWZpZXJzID0gKCgiU2hpZnQiLCksICgiQ29udHJvbCIsKSwgKCJPcHRpb24iLCksICgiQ29tbWFuZCIsKSkKICAgICBfbW9kaWZpZXJfbWFza3MgPSAoTUNfU0hJRlQsIE1DX0NPTlRST0wsIE1DX09QVElPTiwgTUNfQ09NTUFORCkKIGVsc2U6CkBAIC01Nyw2ICs1NiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBudW1iZXIgaW4gcmFuZ2UobGVuKF9tb2RpZmllcnMpKQogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIF9tb2RpZmllcnNbbnVtYmVyXV0pCiAKKyMgSW4gMy40LCBpZiBubyBzaGVsbCB3aW5kb3cgaXMgZXZlciBvcGVuLCB0aGUgdW5kZXJseWluZyBUayB3aWRnZXQgaXMKKyMgZGVzdHJveWVkIGJlZm9yZSAuX19kZWxfXyBtZXRob2RzIGhlcmUgYXJlIGNhbGxlZC4gIFRoZSBmb2xsb3dpbmcKKyMgaXMgdXNlZCB0byBzZWxlY3RpdmVseSBpZ25vcmUgc2h1dGRvd24gZXhjZXB0aW9ucyB0byBhdm9pZAorIyAnRXhjZXB0aW9uIGlnbm9yZWQnIG1lc3NhZ2VzLiAgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDE2NworQVBQTElDQVRJT05fR09ORSA9ICJhcHBsaWNhdGlvbiBoYXMgYmVlbiBkZXN0cm95ZWQiCisKICMgQSBiaW5kZXIgaXMgYSBjbGFzcyB3aGljaCBiaW5kcyBmdW5jdGlvbnMgdG8gb25lIHR5cGUgb2YgZXZlbnQuIEl0IGhhcyB0d28KICMgbWV0aG9kczogYmluZCBhbmQgdW5iaW5kLCB3aGljaCBnZXQgYSBmdW5jdGlvbiBhbmQgYSBwYXJzZWQgc2VxdWVuY2UsIGFzCiAjIHJldHVybmVkIGJ5IF9wYXJzZV9zZXF1ZW5jZSgpLiBUaGVyZSBhcmUgdHdvIHR5cGVzIG9mIGJpbmRlcnM6CkBAIC05OCw3ICsxMDMsMTIgQEAKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmhhbmRsZXJpZDoKLSAgICAgICAgICAgIHNlbGYud2lkZ2V0LnVuYmluZChzZWxmLndpZGdldGluc3QsIHNlbGYuc2VxdWVuY2UsIHNlbGYuaGFuZGxlcmlkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0LnVuYmluZChzZWxmLndpZGdldGluc3QsIHNlbGYuc2VxdWVuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZXJpZCkKKyAgICAgICAgICAgIGV4Y2VwdCB0a2ludGVyLlRjbEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgbm90IEFQUExJQ0FUSU9OX0dPTkUgaW4gZS5hcmdzWzBdOgorICAgICAgICAgICAgICAgICAgICByYWlzZQogCiAjIEFuIGludCBpbiByYW5nZSgxIDw8IGxlbihfbW9kaWZpZXJzKSkgcmVwcmVzZW50cyBhIGNvbWJpbmF0aW9uIG9mIG1vZGlmaWVycwogIyAoaWYgdGhlIGxlYXN0IHNpZ25pZmljZW50IGJpdCBpcyBvbiwgX21vZGlmaWVyc1swXSBpcyBvbiwgYW5kIHNvIG9uKS4KQEAgLTIyNyw3ICsyMzcsMTEgQEAKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBmb3Igc2VxLCBpZCBpbiBzZWxmLmhhbmRsZXJpZHM6Ci0gICAgICAgICAgICBzZWxmLndpZGdldC51bmJpbmQoc2VsZi53aWRnZXRpbnN0LCBzZXEsIGlkKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0LnVuYmluZChzZWxmLndpZGdldGluc3QsIHNlcSwgaWQpCisgICAgICAgICAgICBleGNlcHQgdGtpbnRlci5UY2xFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIG5vdCBBUFBMSUNBVElPTl9HT05FIGluIGUuYXJnc1swXToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogIyBkZWZpbmUgdGhlIGxpc3Qgb2YgZXZlbnQgdHlwZXMgdG8gYmUgaGFuZGxlZCBieSBNdWx0aUV2ZW50LiB0aGUgb3JkZXIgaXMKICMgY29tcGF0aWJsZSB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIGV2ZW50IHR5cGUgY29uc3RhbnRzLgpAQCAtMzkwLDE1ICs0MDQsMjEgQEAKICAgICAgICAgICAgICAgICBmdW5jLCB0cmlwbGV0cyA9IHNlbGYuX19ldmVudGluZm9bdmlydHVhbF0KICAgICAgICAgICAgICAgICBpZiBmdW5jOgogICAgICAgICAgICAgICAgICAgICBmb3IgdHJpcGxldCBpbiB0cmlwbGV0czoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19iaW5kZXJzW3RyaXBsZXRbMV1dLnVuYmluZCh0cmlwbGV0LCBmdW5jKQotCisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2JpbmRlcnNbdHJpcGxldFsxXV0udW5iaW5kKHRyaXBsZXQsIGZ1bmMpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgdGtpbnRlci5UY2xFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBBUFBMSUNBVElPTl9HT05FIGluIGUuYXJnc1swXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIF9tdWx0aWNhbGxfZGljdFt3aWRnZXRdID0gTXVsdGlDYWxsCiAgICAgcmV0dXJuIE11bHRpQ2FsbAogCi1pZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgICMgVGVzdAorCitkZWYgX211bHRpX2NhbGwocGFyZW50KToKICAgICByb290ID0gdGtpbnRlci5UaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBNdWx0aUNhbGwiKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKICAgICB0ZXh0ID0gTXVsdGlDYWxsQ3JlYXRvcih0a2ludGVyLlRleHQpKHJvb3QpCiAgICAgdGV4dC5wYWNrKCkKICAgICBkZWYgYmluZHNlcShzZXEsIG49WzBdKToKQEAgLTQxNCw4ICs0MzQsMTMgQEAKICAgICBiaW5kc2VxKCI8QWx0LUNvbnRyb2wtS2V5LWE+IikKICAgICBiaW5kc2VxKCI8S2V5LWI+IikKICAgICBiaW5kc2VxKCI8Q29udHJvbC1CdXR0b24tMT4iKQorICAgIGJpbmRzZXEoIjxCdXR0b24tMj4iKQogICAgIGJpbmRzZXEoIjxBbHQtQnV0dG9uLTE+IikKICAgICBiaW5kc2VxKCI8Rm9jdXNPdXQ+IikKICAgICBiaW5kc2VxKCI8RW50ZXI+IikKICAgICBiaW5kc2VxKCI8TGVhdmU+IikKICAgICByb290Lm1haW5sb29wKCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX211bHRpX2NhbGwpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9NdWx0aVN0YXR1c0Jhci5weSBiL0xpYi9pZGxlbGliL011bHRpU3RhdHVzQmFyLnB5CmluZGV4IDRmYzhkY2YuLmU4MmJhOWEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL011bHRpU3RhdHVzQmFyLnB5CisrKyBiL0xpYi9pZGxlbGliL011bHRpU3RhdHVzQmFyLnB5CkBAIC04LDI1ICs4LDQwIEBACiAgICAgICAgIEZyYW1lLl9faW5pdF9fKHNlbGYsIG1hc3RlciwgKiprdykKICAgICAgICAgc2VsZi5sYWJlbHMgPSB7fQogCi0gICAgZGVmIHNldF9sYWJlbChzZWxmLCBuYW1lLCB0ZXh0PScnLCBzaWRlPUxFRlQpOgorICAgIGRlZiBzZXRfbGFiZWwoc2VsZiwgbmFtZSwgdGV4dD0nJywgc2lkZT1MRUZULCB3aWR0aD0wKToKICAgICAgICAgaWYgbmFtZSBub3QgaW4gc2VsZi5sYWJlbHM6Ci0gICAgICAgICAgICBsYWJlbCA9IExhYmVsKHNlbGYsIGJkPTEsIHJlbGllZj1TVU5LRU4sIGFuY2hvcj1XKQotICAgICAgICAgICAgbGFiZWwucGFjayhzaWRlPXNpZGUpCisgICAgICAgICAgICBsYWJlbCA9IExhYmVsKHNlbGYsIGJvcmRlcndpZHRoPTAsIGFuY2hvcj1XKQorICAgICAgICAgICAgbGFiZWwucGFjayhzaWRlPXNpZGUsIHBhZHk9MCwgcGFkeD00KQogICAgICAgICAgICAgc2VsZi5sYWJlbHNbbmFtZV0gPSBsYWJlbAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGFiZWwgPSBzZWxmLmxhYmVsc1tuYW1lXQorICAgICAgICBpZiB3aWR0aCAhPSAwOgorICAgICAgICAgICAgbGFiZWwuY29uZmlnKHdpZHRoPXdpZHRoKQogICAgICAgICBsYWJlbC5jb25maWcodGV4dD10ZXh0KQogCi1kZWYgX3Rlc3QoKToKLSAgICBiID0gRnJhbWUoKQotICAgIGMgPSBUZXh0KGIpCi0gICAgYy5wYWNrKHNpZGU9VE9QKQotICAgIGEgPSBNdWx0aVN0YXR1c0JhcihiKQotICAgIGEuc2V0X2xhYmVsKCJvbmUiLCAiaGVsbG8iKQotICAgIGEuc2V0X2xhYmVsKCJ0d28iLCAid29ybGQiKQotICAgIGEucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YKQotICAgIGIucGFjaygpCi0gICAgYi5tYWlubG9vcCgpCitkZWYgX211bHRpc3RhdHVzX2JhcihwYXJlbnQpOgorICAgIHJvb3QgPSBUaygpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIgJSh4LCB5ICsgMTUwKSkKKyAgICByb290LnRpdGxlKCJUZXN0IG11bHRpc3RhdHVzIGJhciIpCisgICAgZnJhbWUgPSBGcmFtZShyb290KQorICAgIHRleHQgPSBUZXh0KGZyYW1lKQorICAgIHRleHQucGFjaygpCisgICAgbXNiID0gTXVsdGlTdGF0dXNCYXIoZnJhbWUpCisgICAgbXNiLnNldF9sYWJlbCgib25lIiwgImhlbGxvIikKKyAgICBtc2Iuc2V0X2xhYmVsKCJ0d28iLCAid29ybGQiKQorICAgIG1zYi5wYWNrKHNpZGU9Qk9UVE9NLCBmaWxsPVgpCisKKyAgICBkZWYgY2hhbmdlKCk6CisgICAgICAgIG1zYi5zZXRfbGFiZWwoIm9uZSIsICJmb28iKQorICAgICAgICBtc2Iuc2V0X2xhYmVsKCJ0d28iLCAiYmFyIikKKworICAgIGJ1dHRvbiA9IEJ1dHRvbihyb290LCB0ZXh0PSJVcGRhdGUgc3RhdHVzIiwgY29tbWFuZD1jaGFuZ2UpCisgICAgYnV0dG9uLnBhY2soc2lkZT1CT1RUT00pCisgICAgZnJhbWUucGFjaygpCisgICAgZnJhbWUubWFpbmxvb3AoKQorICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIF90ZXN0KCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX211bHRpc3RhdHVzX2JhcikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL05FV1MudHh0IGIvTGliL2lkbGVsaWIvTkVXUy50eHQKaW5kZXggNjM4OGQwZC4uOGI4ZTEwYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvTkVXUy50eHQKKysrIGIvTGliL2lkbGVsaWIvTkVXUy50eHQKQEAgLTEsNzQgKzEsMjE4IEBACi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjQ/CitXaGF0J3MgTmV3IGluIElkbGUgMy40LjQ/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE1LTEyLTIwKgogCi0tIElzc3VlICMxNzM5MDogQWRkIFB5dGhvbiB2ZXJzaW9uIHRvIElkbGUgZWRpdG9yIHdpbmRvdyB0aXRsZSBiYXIuCi0gIE9yaWdpbmFsIHBhdGNoZXMgYnkgRWRtb25kIEJ1cm5ldHQgYW5kIEtlbnQgSm9obnNvbi4KKy0gSXNzdWUgMTUzNDg6IFN0b3AgdGhlIGRlYnVnZ2VyIGVuZ2luZSAobm9ybWFsbHkgaW4gYSB1c2VyIHByb2Nlc3MpCisgIGJlZm9yZSBjbG9zaW5nIHRoZSBkZWJ1Z2dlciB3aW5kb3cgKHJ1bm5pbmcgaW4gdGhlIElETEUgcHJvY2VzcykuCisgIFRoaXMgcHJldmVudHMgdGhlIFJ1bnRpbWVFcnJvcnMgdGhhdCB3ZXJlIGJlaW5nIGNhdWdodCBhbmQgaWdub3JlZC4KIAotLSBJc3N1ZSAjMTg5NjA6IElETEUgbm93IGlnbm9yZXMgdGhlIHNvdXJjZSBlbmNvZGluZyBkZWNsYXJhdGlvbiBvbiB0aGUgc2Vjb25kCi0gIGxpbmUgaWYgdGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYW55dGhpbmcgZXhjZXB0IGEgY29tbWVudC4KKy0gSXNzdWUgIzI0NDU1OiBQcmV2ZW50IElETEUgZnJvbSBoYW5naW5nIHdoZW4gYSkgY2xvc2luZyB0aGUgc2hlbGwgd2hpbGUgdGhlCisgIGRlYnVnZ2VyIGlzIGFjdGl2ZSAoMTUzNDcpOyBiKSBjbG9zaW5nIHRoZSBkZWJ1Z2dlciB3aXRoIHRoZSBbWF0gYnV0dG9uCisgICgxNTM0OCk7IGFuZCBjKSBhY3RpdmF0aW5nIHRoZSBkZWJ1Z2dlciB3aGVuIGFscmVhZHkgYWN0aXZlICgyNDQ1NSkuCisgIFRoZSBwYXRjaCBieSBNYXJrIFJvc2VtYW4gZG9lcyB0aGlzIGJ5IG1ha2luZyB0d28gY2hhbmdlcy4KKyAgMS4gU3VzcGVuZCBhbmQgcmVzdW1lIHRoZSBndWkuaW50ZXJhY3Rpb24gbWV0aG9kIHdpdGggdGhlIHRjbCB2d2FpdAorICBtZWNoYW5pc20gaW50ZW5kZWQgZm9yIHRoaXMgcHVycG9zZSAoaW5zdGVhZCBvZiByb290Lm1haW5sb29wICYgLnF1aXQpLgorICAyLiBJbiBndWkucnVuLCBhbGxvdyBhbnkgZXhpc3RpbmcgaW50ZXJhY3Rpb24gdG8gdGVybWluYXRlIGZpcnN0LgogCi0tIElzc3VlICMyMDA1ODogc3lzLnN0ZGluLnJlYWRsaW5lKCkgaW4gSURMRSBub3cgYWx3YXlzIHJldHVybnMgb25seSBvbmUgbGluZS4KKy0gQ2hhbmdlICdUaGUgcHJvZ3JhbScgdG8gJ1lvdXIgcHJvZ3JhbScgaW4gYW4gSURMRSAna2lsbCBwcm9ncmFtPycgbWVzc2FnZQorICB0byBtYWtlIGl0IGNsZWFyZXIgdGhhdCB0aGUgcHJvZ3JhbSByZWZlcnJlZCB0byBpcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcKKyAgdXNlciBwcm9ncmFtLCBub3QgSURMRSBpdHNlbGYuCiAKLS0gSXNzdWUgIzE5NDgxOiBwcmludCgpIG9mIHN0cmluZyBzdWJjbGFzcyBpbnN0YW5jZSBpbiBJRExFIG5vIGxvbmdlciBoYW5ncy4KKy0gSXNzdWUgIzI0NzUwOiBJbXByb3ZlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBJRExFIGVkaXRvciB3aW5kb3cgc3RhdHVzIGJhci4KKyAgUGF0Y2ggYnkgTWFyayBSb3NlbWFuLgogCi0tIElzc3VlICMxODI3MDogUHJldmVudCBwb3NzaWJsZSBJRExFIEF0dHJpYnV0ZUVycm9yIG9uIE9TIFggd2hlbiBubyBpbml0aWFsCi0gIHNoZWxsIHdpbmRvdyBpcyBwcmVzZW50LgorLSBJc3N1ZSAjMjUzMTM6IENoYW5nZSB0aGUgaGFuZGxpbmcgb2YgbmV3IGJ1aWx0LWluIHRleHQgY29sb3IgdGhlbWVzIHRvIGJldHRlcgorICBhZGRyZXNzIHRoZSBjb21wYXRpYmlsaXR5IHByb2JsZW0gaW50cm9kdWNlZCBieSB0aGUgYWRkaXRpb24gb2YgSURMRSBEYXJrLgorICBDb25zaXN0ZW50bHkgdXNlIHRoZSByZXZpc2VkIGlkbGVDb25mLkN1cnJlbnRUaGVtZSBldmVyeXdoZXJlIGluIGlkbGVsaWIuCisKKy0gSXNzdWUgIzI0NzgyOiBFeHRlbnNpb24gY29uZmlndXJhdGlvbiBpcyBub3cgYSB0YWIgaW4gdGhlIElETEUgUHJlZmVyZW5jZXMKKyAgZGlhbG9nIHJhdGhlciB0aGFuIGEgc2VwYXJhdGUgZGlhbG9nLiAgIFRoZSBmb3JtZXIgdGFicyBhcmUgbm93IGEgc29ydGVkCisgIGxpc3QuICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzIyNzI2OiBSZS1hY3RpdmF0ZSB0aGUgY29uZmlnIGRpYWxvZyBoZWxwIGJ1dHRvbiB3aXRoIHNvbWUgY29udGVudAorICBhYm91dCB0aGUgb3RoZXIgYnV0dG9ucyBhbmQgdGhlIG5ldyBJRExFIERhcmsgdGhlbWUuCisKKy0gSXNzdWUgIzI0ODIwOiBJRExFIG5vdyBoYXMgYW4gJ0lETEUgRGFyaycgYnVpbHQtaW4gdGV4dCBjb2xvciB0aGVtZS4KKyAgSXQgaXMgbW9yZSBvciBsZXNzIElETEUgQ2xhc3NpYyBpbnZlcnRlZCwgd2l0aCBhIGNvYmFsdCBibHVlIGJhY2tncm91bmQuCisgIFN0cmluZ3MsIGNvbW1lbnRzLCBrZXl3b3JkcywgLi4uIGFyZSBzdGlsbCBncmVlbiwgcmVkLCBvcmFuZ2UsIC4uLiAuCisgIFRvIHVzZSBpdCB3aXRoIElETEVzIHJlbGVhc2VkIGJlZm9yZSBOb3ZlbWJlciAyMDE1LCBoaXQgdGhlCisgICdTYXZlIGFzIE5ldyBDdXN0b20gVGhlbWUnIGJ1dHRvbiBhbmQgZW50ZXIgYSBuZXcgbmFtZSwKKyAgc3VjaCBhcyAnQ3VzdG9tIERhcmsnLiAgVGhlIGN1c3RvbSB0aGVtZSB3aWxsIHdvcmsgd2l0aCBhbnkgSURMRQorICByZWxlYXNlLCBhbmQgY2FuIGJlIG1vZGlmaWVkLgorCistIElzc3VlICMyNTIyNDogUkVBRE1FLnR4dCBpcyBub3cgYW4gaWRsZWxpYiBpbmRleCBmb3IgSURMRSBkZXZlbG9wZXJzIGFuZAorICBjdXJpb3VzIHVzZXJzLiAgVGhlIHByZXZpb3VzIHVzZXIgY29udGVudCBpcyBub3cgaW4gdGhlIElETEUgZG9jIGNoYXB0ZXIuCisgICdJRExFJyBub3cgbWVhbnMgJ0ludGVncmF0ZWQgRGV2ZWxvcG1lbnQgYW5kIExlYXJuaW5nIEVudmlyb25tZW50Jy4KKworLSBJc3N1ZSAjMjQ4MjA6IFVzZXJzIGNhbiBub3cgc2V0IGJyZWFrcG9pbnQgY29sb3JzIGluCisgIFNldHRpbmdzIC0+IEN1c3RvbSBIaWdobGlnaHRpbmcuICBPcmlnaW5hbCBwYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI0OTcyOiBJbmFjdGl2ZSBzZWxlY3Rpb24gYmFja2dyb3VuZCBub3cgbWF0Y2hlcyBhY3RpdmUgc2VsZWN0aW9uCisgIGJhY2tncm91bmQsIGFzIGNvbmZpZ3VyZWQgYnkgdXNlcnMsIG9uIGFsbCBzeXN0ZW1zLiAgRm91bmQgaXRlbXMgYXJlIG5vdworICBhbHdheXMgaGlnaGxpZ2h0ZWQgb24gV2luZG93cy4gIEluaXRpYWwgcGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNDU3MDogSWRsZTogbWFrZSBjYWxsdGlwIGFuZCBjb21wbGV0aW9uIGJveGVzIGFwcGVhciBvbiBNYWNzCisgIGFmZmVjdGVkIGJ5IGEgdGsgcmVncmVzc2lvbi4gIEluaXRpYWwgcGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNDk4ODogSWRsZSBTY3JvbGxlZExpc3QgY29udGV4dCBtZW51cyAodXNlZCBpbiBkZWJ1Z2dlcikKKyAgbm93IHdvcmsgb24gTWFjIEFxdWEuICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI0ODAxOiBNYWtlIHJpZ2h0LWNsaWNrIGZvciBjb250ZXh0IG1lbnUgd29yayBvbiBNYWMgQXF1YS4KKyAgUGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNTE3MzogQXNzb2NpYXRlIHRraW50ZXIgbWVzc2FnZWJveGVzIHdpdGggYSBzcGVjaWZpYyB3aWRnZXQuCisgIEZvciBNYWMgT1NYLCBtYWtlIHRoZW0gYSAnc2hlZXQnLiAgUGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNTE5ODogRW5oYW5jZSB0aGUgaW5pdGlhbCBodG1sIHZpZXdlciBub3cgdXNlZCBmb3IgSWRsZSBIZWxwLgorICAqIFByb3Blcmx5IGluZGVudCBmaXhlZC1waXRjaCB0ZXh0IChwYXRjaCBieSBNYXJrIFJvc2VtYW4pLgorICAqIEdpdmUgY29kZSBzbmlwcGV0IGEgdmVyeSBTcGhpbngtbGlrZSBsaWdodCBibHVlaXNoLWdyYXkgYmFja2dyb3VuZC4KKyAgKiBSZS11c2UgaW5pdGlhbCB3aWR0aCBhbmQgaGVpZ2h0IHNldCBieSB1c2VycyBmb3Igc2hlbGwgYW5kIGVkaXRvci4KKyAgKiBXaGVuIHRoZSBUYWJsZSBvZiBDb250ZW50cyAoVE9DKSBtZW51IGlzIHVzZWQsIHB1dCB0aGUgc2VjdGlvbiBoZWFkZXIKKyAgYXQgdGhlIHRvcCBvZiB0aGUgc2NyZWVuLgorCistIElzc3VlICMyNTIyNTogQ29uZGVuc2UgYW5kIHJld3JpdGUgSWRsZSBkb2Mgc2VjdGlvbiBvbiB0ZXh0IGNvbG9ycy4KKworLSBJc3N1ZSAjMjE5OTU6IEV4cGxhaW4gc29tZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIElETEUgYW5kIGNvbnNvbGUgUHl0aG9uLgorCistIElzc3VlICMyMjgyMDogRXhwbGFpbiBuZWVkIGZvciAqcHJpbnQqIHdoZW4gcnVubmluZyBmaWxlIGZyb20gSWRsZSBlZGl0b3IuCisKKy0gSXNzdWUgIzI1MjI0OiBEb2M6IGF1Z21lbnQgSWRsZSBmZWF0dXJlIGxpc3QgYW5kIG5vLXN1YnByb2Nlc3Mgc2VjdGlvbi4KKworLSBJc3N1ZSAjMjUyMTk6IFVwZGF0ZSBkb2MgZm9yIElkbGUgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisgIFNvbWUgd2VyZSBtaXNzaW5nIGFuZCBub3RlcyB3ZXJlIG5vdCBjb3JyZWN0LgorCistIElzc3VlICMyNDg2MTogTW9zdCBvZiBpZGxlbGliIGlzIHByaXZhdGUgYW5kIHN1YmplY3QgdG8gY2hhbmdlLgorICBVc2UgaWRsZWliLmlkbGUuKiB0byBzdGFydCBJZGxlLiBTZWUgaWRsZWxpYi5fX2luaXRfXy5fX2RvY19fLgorCistIElzc3VlICMyNTE5OTogSWRsZTogYWRkIHN5bmNocm9uaXphdGlvbiBjb21tZW50cyBmb3IgZnV0dXJlIG1haW50YWluZXJzLgorCistIElzc3VlICMxNjg5MzogUmVwbGFjZSBoZWxwLnR4dCB3aXRoIGhlbHAuaHRtbCBmb3IgSWRsZSBkb2MgZGlzcGxheS4KKyAgVGhlIG5ldyBpZGxlbGliL2hlbHAuaHRtbCBpcyByc3RyaXBwZWQgRG9jL2J1aWxkL2h0bWwvbGlicmFyeS9pZGxlLmh0bWwuCisgIEl0IGxvb2tzIGJldHRlciB0aGFuIGhlbHAudHh0IGFuZCB3aWxsIGJldHRlciBkb2N1bWVudCBJZGxlIGFzIHJlbGVhc2VkLgorICBUaGUgdGtpbnRlciBodG1sIHZpZXdlciB0aGF0IHdvcmtzIGZvciB0aGlzIGZpbGUgd2FzIHdyaXR0ZW4gYnkgTWFyayBSb3NlbWFuLgorICBUaGUgbm93IHVudXNlZCBFZGl0b3JXaW5kb3cuSGVscERpYWxvZyBjbGFzcyBhbmQgaGVsdC50eHQgZmlsZSBhcmUgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMjQxOTk6IERlcHJlY2F0ZSB1bnVzZWQgaWRsZWxpYi5pZGxldmVyIHdpdGggcG9zc2libGUgcmVtb3ZhbCBpbiAzLjYuCisKKy0gSXNzdWUgIzI0NzkwOiBSZW1vdmUgZXh0cmFuZW91cyBjb2RlICh3aGljaCBhbHNvIGNyZWF0ZSAyICYgMyBjb25mbGljdHMpLgorCistIElzc3VlICMyMzY3MjogQWxsb3cgSWRsZSB0byBlZGl0IGFuZCBydW4gZmlsZXMgd2l0aCBhc3RyYWwgY2hhcnMgaW4gbmFtZS4KKyAgUGF0Y2ggYnkgTW9oZCBTYW5hZCBaYWtpIFJpenZpLgorCistIElzc3VlIDI0NzQ1OiBJZGxlIGVkaXRvciBkZWZhdWx0IGZvbnQuIFN3aXRjaCBmcm9tIENvdXJpZXIgdG8KKyAgcGxhdGZvcm0tc2Vuc2l0aXZlIFRrRml4ZWRGb250LiAgVGhpcyBzaG91bGQgbm90IGFmZmVjdCBjdXJyZW50IGN1c3RvbWl6ZWQKKyAgZm9udCBzZWxlY3Rpb25zLiAgSWYgdGhlcmUgaXMgYSBwcm9ibGVtLCBlZGl0ICRIT01FLy5pZGxlcmMvY29uZmlnLW1haW4uY2ZnCisgIGFuZCByZW1vdmUgJ2ZvbnR4eHgnIGVudHJpZXMgZnJvbSBbRWRpdG9yIFdpbmRvd10uICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzIxMTkyOiBJZGxlIGVkaXRvci4gV2hlbiBhIGZpbGUgaXMgcnVuLCBwdXQgaXRzIG5hbWUgaW4gdGhlIHJlc3RhcnQgYmFyLgorICBEbyBub3QgcHJpbnQgZmFsc2UgcHJvbXB0cy4gT3JpZ2luYWwgcGF0Y2ggYnkgQWRuYW4gVW1lci4KKworLSBJc3N1ZSAjMTM4ODQ6IElkbGUgbWVudXMuIFJlbW92ZSB0ZWFyb2ZmIGxpbmVzLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMjMxODQ6IHJlbW92ZSB1bnVzZWQgbmFtZXMgYW5kIGltcG9ydHMgaW4gaWRsZWxpYi4KKyAgSW5pdGlhbCBwYXRjaCBieSBBbCBTd2VpZ2FydC4KIAogCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjM/CitXaGF0J3MgTmV3IGluIElkbGUgMy40LjM/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE1LTAyLTI1KgogCi0tIElzc3VlICMxODg3MzogSURMRSBub3cgZGV0ZWN0cyBQeXRob24gc291cmNlIGNvZGUgZW5jb2Rpbmcgb25seSBpbiBjb21tZW50Ci0gIGxpbmVzLgorLSBJc3N1ZSAjMjA1Nzc6IENvbmZpZ3VyYXRpb24gb2YgdGhlIG1heCBsaW5lIGxlbmd0aCBmb3IgdGhlIEZvcm1hdFBhcmFncmFwaAorICBleHRlbnNpb24gaGFzIGJlZW4gbW92ZWQgZnJvbSB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIElkbGUgcHJlZmVyZW5jZXMgZGlhbG9nCisgIHRvIHRoZSBGb3JtYXRQYXJhZ3JhcGggdGFiIG9mIHRoZSBDb25maWcgRXh0ZW5zaW9ucyBkaWFsb2cuCisgIFBhdGNoIGJ5IFRhbCBFaW5hdC4KIAotLSBJc3N1ZSAjMTg5ODg6IFRoZSAiVGFiIiBrZXkgbm93IHdvcmtzIHdoZW4gYSB3b3JkIGlzIGFscmVhZHkgYXV0b2NvbXBsZXRlZC4KKy0gSXNzdWUgIzE2ODkzOiBVcGRhdGUgSWRsZSBkb2MgY2hhcHRlciB0byBtYXRjaCBjdXJyZW50IElkbGUgYW5kIGFkZCBuZXcKKyAgaW5mb3JtYXRpb24uCiAKLS0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorLSBJc3N1ZSAjMzA2ODogQWRkIElkbGUgZXh0ZW5zaW9uIGNvbmZpZ3VyYXRpb24gZGlhbG9nIHRvIE9wdGlvbnMgbWVudS4KKyAgQ2hhbmdlcyBhcmUgd3JpdHRlbiB0byBIT01FLy5pZGxlcmMvY29uZmlnLWV4dGVuc2lvbnMuY2ZnLgorICBPcmlnaW5hbCBwYXRjaCBieSBUYWwgRWluYXQuCiAKLS0gSXNzdWUgIzE4NDI5OiBGb3JtYXQgLyBGb3JtYXQgUGFyYWdyYXBoLCBub3cgd29ya3Mgd2hlbiBjb21tZW50IGJsb2NrcwotICBhcmUgc2VsZWN0ZWQuIEFzIHdpdGggdGV4dCBibG9ja3MsIHRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSBzZWxlY3Rpb24KLSAgb25seSBpbmNsdWRlcyBjb21wbGV0ZSBsaW5lcy4KKy0gSXNzdWUgIzE2MjMzOiBBIG1vZHVsZSBicm93c2VyIChGaWxlIDogQ2xhc3MgQnJvd3NlciwgQWx0K0MpIHJlcXVpcmVzIGEKKyAgZWRpdG9yIHdpbmRvdyB3aXRoIGEgZmlsZW5hbWUuICBXaGVuIENsYXNzIEJyb3dzZXIgaXMgcmVxdWVzdGVkIG90aGVyd2lzZSwKKyAgZnJvbSBhIHNoZWxsLCBvdXRwdXQgd2luZG93LCBvciAnVW50aXRsZWQnIGVkaXRvciwgSWRsZSBubyBsb25nZXIgZGlzcGxheXMKKyAgYW4gZXJyb3IgYm94LiAgSXQgbm93IHBvcHMgdXAgYW4gIE9wZW4gTW9kdWxlIGJveCAoQWx0K00pLiBJZiBhIHZhbGlkIG5hbWUKKyAgaXMgZW50ZXJlZCBhbmQgYSBtb2R1bGUgaXMgb3BlbmVkLCBhIGNvcnJlc3BvbmRpbmcgYnJvd3NlciBpcyBhbHNvIG9wZW5lZC4KIAotLSBJc3N1ZSAjMTgyMjY6IEFkZCBkb2NzdHJpbmdzIGFuZCB1bml0dGVzdHMgZm9yIEZvcm1hdFBhcmFncmFwaC5weS4KLSAgT3JpZ2luYWwgcGF0Y2hlcyBieSBUb2RkIFJvdml0byBhbmQgUGhpbCBXZWJzdGVyLgorLSBJc3N1ZSAjNDgzMjogU2F2ZSBBcyB0byB0eXBlIFB5dGhvbiBmaWxlcyBhdXRvbWF0aWNhbGx5IGFkZHMgLnB5IHRvIHRoZQorICBuYW1lIHlvdSBlbnRlciAoZXZlbiBpZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBkaXNwbGF5IGl0KS4gIFNvbWUgc3lzdGVtcworICBhdXRvbWF0aWNhbGx5IGFkZCAudHh0IHdoZW4gdHlwZSBpcyBUZXh0IGZpbGVzLgogCi0tIElzc3VlICMxODI3OTogRm9ybWF0IC0gU3RyaXAgdHJhaWxpbmcgd2hpdGVzcGFjZSBubyBsb25nZXIgbWFya3MgYSBmaWxlIGFzCi0gIGNoYW5nZWQgd2hlbiBpdCBoYXMgbm90IGJlZW4gY2hhbmdlZC4gVGhpcyBmaXggZm9sbG93ZWQgdGhlIGFkZGl0aW9uIG9mIGEKLSAgdGVzdCBmaWxlIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBQaGlsIFdlYnN0ZXIgKHRoZSBpc3N1ZSdzIG1haW4gZ29hbCkuCistIElzc3VlICMyMTk4NjogQ29kZSBvYmplY3RzIGFyZSBub3Qgbm9ybWFsbHkgcGlja2xlZCBieSB0aGUgcGlja2xlIG1vZHVsZS4KKyAgVG8gbWF0Y2ggdGhpcywgdGhleSBhcmUgbm8gbG9uZ2VyIHBpY2tsZWQgd2hlbiBydW5uaW5nIHVuZGVyIElkbGUuCiAKLS0gSXNzdWUgIzcxMzY6IEluIHRoZSBJZGxlIEZpbGUgbWVudSwgIk5ldyBXaW5kb3ciIGlzIHJlbmFtZWQgIk5ldyBGaWxlIi4KLSAgUGF0Y2ggYnkgVGFsIEVpbmF0LCBSb2dldCBTZXJ3eSwgYW5kIFRvZGQgUm92aXRvLgotCi0tIFJlbW92ZSBkZWFkIGltcG9ydHMgb2YgaW1wLgotCi0tIElzc3VlICMxODE5NjogQXZvaWQgZGlzcGxheWluZyBzcHVyaW91cyBTeXN0ZW1FeGl0IHRyYWNlYmFja3MuCi0KLS0gSXNzdWUgIzU0OTI6IEF2b2lkIHRyYWNlYmFjayB3aGVuIGV4aXRpbmcgSURMRSBjYXVzZWQgYnkgYSByYWNlIGNvbmRpdGlvbi4KLQotLSBJc3N1ZSAjMTc1MTE6IEtlZXAgSURMRSBmaW5kIGRpYWxvZyBvcGVuIGFmdGVyIGNsaWNraW5nICJGaW5kIE5leHQiLgotICBPcmlnaW5hbCBwYXRjaCBieSBTYXJhaCBLLgotCi0tIElzc3VlICMxODA1NTogTW92ZSBJRExFIG9mZiBvZiBpbXAgYW5kIG9uIHRvIGltcG9ydGxpYi4KLQotLSBJc3N1ZSAjMTUzOTI6IENyZWF0ZSBhIHVuaXR0ZXN0IGZyYW1ld29yayBmb3IgSURMRS4KLSAgSW5pdGlhbCBwYXRjaCBieSBSYWphZ29wYWxhc2FybWEgSmF5YWtyaXNobmFuLgotICBTZWUgTGliL2lkbGVsaWIvaWRsZV90ZXN0L1JFQURNRS50eHQgZm9yIGhvdyB0byBydW4gSWRsZSB0ZXN0cy4KLQotLSBJc3N1ZSAjMTQxNDY6IEhpZ2hsaWdodCBzb3VyY2UgbGluZSB3aGlsZSBkZWJ1Z2dpbmcgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTc1MzI6IEFsd2F5cyBpbmNsdWRlIE9wdGlvbnMgbWVudSBmb3IgSURMRSBvbiBPUyBYLgotICBQYXRjaCBieSBHdWlsaGVybWUgU2ltw7Vlcy4KKy0gSXNzdWUgIzIzMTgwOiBSZW5hbWUgSURMRSAiV2luZG93cyIgbWVudSBpdGVtIHRvICJXaW5kb3ciLgorICBQYXRjaCBieSBBbCBTd2VpZ2FydC4KIAogCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjI/CitXaGF0J3MgTmV3IGluIElETEUgMy40LjI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE0LTEwLTA2KgorCistIElzc3VlICMxNzM5MDogQWRqdXN0IEVkaXRvciB3aW5kb3cgdGl0bGU7IHJlbW92ZSAnUHl0aG9uJywKKyAgbW92ZSB2ZXJzaW9uIHRvIGVuZC4KKworLSBJc3N1ZSAjMTQxMDU6IElkbGUgZGVidWdnZXIgYnJlYWtwb2ludHMgbm8gbG9uZ2VyIGRpc2FwcGVhcgorICB3aGVuIGluc2V0aW5nIG9yIGRlbGV0aW5nIGxpbmVzLgorCistIElzc3VlICMxNzE3MjogVHVydGxlZGVtbyBjYW4gbm93IGJlIHJ1biBmcm9tIElkbGUuCisgIEN1cnJlbnRseSwgdGhlIGVudHJ5IGlzIG9uIHRoZSBIZWxwIG1lbnUsIGJ1dCBpdCBtYXkgbW92ZSB0byBSdW4uCisgIFBhdGNoIGJ5IFJhbWNoYW5kcmEgQXB0IGFuZCBMaXRhIENoby4KKworLSBJc3N1ZSAjMjE3NjU6IEFkZCBzdXBwb3J0IGZvciBub24tYXNjaWkgaWRlbnRpZmllcnMgdG8gSHlwZXJQYXJzZXIuCisKKy0gSXNzdWUgIzIxOTQwOiBBZGQgdW5pdHRlc3QgZm9yIFdpZGdldFJlZGlyZWN0b3IuIEluaXRpYWwgcGF0Y2ggYnkgU2FpbWFkaGF2CisgIEhlYmxpa2FyLgorCistIElzc3VlICMxODU5MjogQWRkIHVuaXR0ZXN0IGZvciBTZWFyY2hEaWFsb2dCYXNlLiBQYXRjaCBieSBQaGlsIFdlYnN0ZXIuCisKKy0gSXNzdWUgIzIxNjk0OiBBZGQgdW5pdHRlc3QgZm9yIFBhcmVuTWF0Y2guIFBhdGNoIGJ5IFNhaW1hZGhhdiBIZWJsaWthci4KKworLSBJc3N1ZSAjMjE2ODY6IGFkZCB1bml0dGVzdCBmb3IgSHlwZXJQYXJzZXIuIE9yaWdpbmFsIHBhdGNoIGJ5IFNhaW1hZGhhdgorICBIZWJsaWthci4KKworLSBJc3N1ZSAjMTIzODc6IEFkZCBtaXNzaW5nIHVwcGVyKGxvd2VyKWNhc2UgdmVyc2lvbnMgb2YgZGVmYXVsdCBXaW5kb3dzIGtleQorICBiaW5kaW5ncyBmb3IgSWRsZSBzbyBDYXBzIExvY2sgZG9lcyBub3QgZGlzYWJsZSB0aGVtLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMjE2OTU6IENsb3NpbmcgYSBGaW5kLWluLWZpbGVzIG91dHB1dCB3aW5kb3cgd2hpbGUgdGhlIHNlYXJjaCBpcworICBzdGlsbCBpbiBwcm9ncmVzcyBubyBsb25nZXIgY2xvc2VzIElkbGUuCisKKy0gSXNzdWUgIzE4OTEwOiBBZGQgdW5pdHRlc3QgZm9yIHRleHRWaWV3LiBQYXRjaCBieSBQaGlsIFdlYnN0ZXIuCisKKy0gSXNzdWUgIzE4MjkyOiBBZGQgdW5pdHRlc3QgZm9yIEF1dG9FeHBhbmQuIFBhdGNoIGJ5IFNhaWhhZGhhdiBIZWJsaWthci4KKworLSBJc3N1ZSAjMTg0MDk6IEFkZCB1bml0dGVzdCBmb3IgQXV0b0NvbXBsZXRlLiBQYXRjaCBieSBQaGlsIFdlYnN0ZXIuCisKKy0gSXNzdWUgIzE4MTA0OiBBZGQgaWRsZWxpYi9pZGxlX3Rlc3QvaHRlc3QucHkgd2l0aCBhIGZldyBzYW1wbGUgdGVzdHMgdG8gYmVnaW4KKyAgY29uc29saWRhdGluZyBhbmQgaW1wcm92aW5nIGh1bWFuLXZhbGlkYXRlZCB0ZXN0cyBvZiBJZGxlLiBDaGFuZ2Ugb3RoZXIgZmlsZXMKKyAgYXMgbmVlZGVkIHRvIHdvcmsgd2l0aCBodGVzdC4gIFJ1bm5pbmcgdGhlIG1vZHVsZSBhcyBfX21haW5fXyBydW5zIGFsbCB0ZXN0cy4KKworCitXaGF0J3MgTmV3IGluIElETEUgMy40LjE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE0LTA1LTE4KgorCistIElzc3VlICMxODEwNDogQWRkIGlkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5IHdpdGggYSBmZXcgc2FtcGxlIHRlc3RzIHRvIGJlZ2luCisgIGNvbnNvbGlkYXRpbmcgYW5kIGltcHJvdmluZyBodW1hbi12YWxpZGF0ZWQgdGVzdHMgb2YgSWRsZS4gQ2hhbmdlIG90aGVyIGZpbGVzCisgIGFzIG5lZWRlZCB0byB3b3JrIHdpdGggaHRlc3QuICBSdW5uaW5nIHRoZSBtb2R1bGUgYXMgX19tYWluX18gcnVucyBhbGwgdGVzdHMuCisKKy0gSXNzdWUgIzIxMTM5OiBDaGFuZ2UgZGVmYXVsdCBwYXJhZ3JhcGggd2lkdGggdG8gNzIsIHRoZSBQRVAgOCByZWNvbW1lbmRhdGlvbi4KKworLSBJc3N1ZSAjMjEyODQ6IFBhcmFncmFwaCByZWZvcm1hdCB0ZXN0IHBhc3NlcyBhZnRlciB1c2VyIGNoYW5nZXMgcmVmb3JtYXQgd2lkdGguCisKKy0gSXNzdWUgIzE3NjU0OiBFbnN1cmUgSURMRSBtZW51cyBhcmUgY3VzdG9taXplZCBwcm9wZXJseSBvbiBPUyBYIGZvcgorICBub24tZnJhbWV3b3JrIGJ1aWxkcyBhbmQgZm9yIGFsbCB2YXJpYW50cyBvZiBUay4KKworCitXaGF0J3MgTmV3IGluIElETEUgMy40LjA/Cis9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDE0LTAzLTE2KgogCiAtIElzc3VlICMxNzM5MDogRGlzcGxheSBQeXRob24gdmVyc2lvbiBvbiBJZGxlIHRpdGxlIGJhci4KICAgSW5pdGlhbCBwYXRjaCBieSBFZG1vbmQgQnVybmV0dC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMy4zLjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09CistIElzc3VlICM1MDY2OiBVcGRhdGUgSURMRSBkb2NzLiBQYXRjaCBieSBUb2RkIFJvdml0by4KIAogLSBJc3N1ZSAjMTc2MjU6IENsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgogCkBAIC04MSw2ICsyMjUsNyBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4zLjA/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CisqUmVsZWFzZSBkYXRlOiAyMDEyLTA5LTI5KgogCiAtIElzc3VlICMxNzYyNTogQ2xvc2UgdGhlIHJlcGxhY2UgZGlhbG9nIGFmdGVyIGl0IGlzIHVzZWQuCiAKQEAgLTEyMyw3ICsyNjgsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4yLjE/CiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDE1LU1heS0xMSoKIAogLSBJc3N1ZSAjNjM3ODogRnVydGhlciBhZGp1c3QgaWRsZS5iYXQgdG8gc3RhcnQgYXNzb2NpYXRlZCBQeXRob24KQEAgLTE0MSw3ICsyODUsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4xYjE/CiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDA2LU1heS0wOSoKIAogLSBVc2Ugb2YgJ2ZpbHRlcicgaW4ga2V5YmluZGluZ0RpYWxvZy5weSB3YXMgY2F1c2luZyBjdXN0b20ga2V5IGFzc2lnbm1lbnQgdG8KQEAgLTE1MCw3ICsyOTMsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4xYTE/CiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDA3LU1hci0wOSoKIAogLSBJc3N1ZSAjNDgxNTogT2ZmZXIgY29udmVyc2lvbiB0byBVVEYtOCBpZiBzb3VyY2UgZmlsZXMgaGF2ZQpAQCAtMTY2LDkgKzMwOCw5IEBACiAtIElzc3VlICMyNjY1OiBPbiBXaW5kb3dzLCBhbiBJRExFIGluc3RhbGxhdGlvbiB1cGdyYWRlZCBmcm9tIGFuIG9sZCB2ZXJzaW9uCiAgIHdvdWxkIG5vdCBzdGFydCBpZiBhIGN1c3RvbSB0aGVtZSB3YXMgZGVmaW5lZC4KIAorCiBXaGF0J3MgTmV3IGluIElETEUgMi43PyAoVU5SRUxFQVNFRCwgYnV0IG1lcmdlZCBpbnRvIDMuMSByZWxlYXNlcyBhYm92ZS4pCiA9PT09PT09PT09PT09PT09PT09PT09PQotCiAqUmVsZWFzZSBkYXRlOiBYWC1YWFgtMjAxMCoKIAogLSBpZGxlLnB5IG1vZGlmaWVkIGFuZCBzaW1wbGlmaWVkIHRvIGJldHRlciBzdXBwb3J0IGRldmVsb3BpbmcgZXhwZXJpbWVudGFsCkBAIC0xOTIsOSArMzM0LDkgQEAKIAogLSBJc3N1ZSAjMzU0OTogT24gTWFjT1MgdGhlIHByZWZlcmVuY2VzIG1lbnUgd2FzIG5vdCBwcmVzZW50CiAKKwogV2hhdCdzIE5ldyBpbiBJRExFIDMuMCBmaW5hbD8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDAzLURlYy0yMDA4KgogCiAtIElETEUgd291bGQgcHJpbnQgYSAiVW5oYW5kbGVkIHNlcnZlciBleGNlcHRpb24hIiBtZXNzYWdlIHdoZW4gaW50ZXJuYWwKQEAgLTIwOSw3ICszNTEsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMy4wYTM/CiA9PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDI5LUZlYi0yMDA4KgogCiAtIGhlbHAoKSB3YXMgbm90IHBhZ2luZyB0byB0aGUgc2hlbGwuICBJc3N1ZTE2NTAuCkBAIC0yMjYsNyArMzY3LDYgQEAKIAogV2hhdCdzIE5ldyBpbiBJRExFIDMuMGEyPwogPT09PT09PT09PT09PT09PT09PT09PT09PQotCiAqUmVsZWFzZSBkYXRlOiAwNi1EZWMtMjAwNyoKIAogLSBXaW5kb3dzIEVPTCBzZXF1ZW5jZSBub3QgY29udmVydGVkIGNvcnJlY3RseSwgZW5jb2RpbmcgZXJyb3IuCkBAIC0yMzUsNyArMzc1LDYgQEAKIAogV2hhdCdzIE5ldyBpbiBJRExFIDMuMGExPwogPT09PT09PT09PT09PT09PT09PT09PT09PQotCiAqUmVsZWFzZSBkYXRlOiAzMS1BdWctMjAwNyoKIAogLSBJRExFIGNvbnZlcnRlZCB0byBQeXRob24gMzAwMCBzeW50YXguCkBAIC0yNTEsOSArMzkwLDggQEAKICAgYmUgY2xlYXJlZCBiZWZvcmUgSURMRSBleGl0cy4KIAogCi1XaGF0J3MgTmV3IGluIElETEUgMi42IGZpbmFsPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQorV2hhdCdzIE5ldyBpbiBJRExFIDIuNgorPT09PT09PT09PT09PT09PT09PT09PQogKlJlbGVhc2UgZGF0ZTogMDEtT2N0LTIwMDgqLCBtZXJnZWQgaW50byAzLjAgcmVsZWFzZXMgZGV0YWlsZWQgYWJvdmUgKDMuMHJjMikKIAogLSBJc3N1ZSAjMjY2NTogT24gV2luZG93cywgYW4gSURMRSBpbnN0YWxsYXRpb24gdXBncmFkZWQgZnJvbSBhbiBvbGQgdmVyc2lvbgpAQCAtMzM4LDE1ICs0NzYsOCBAQAogCiBXaGF0J3MgTmV3IGluIElETEUgMS4yPwogPT09PT09PT09PT09PT09PT09PT09PT0KLQogKlJlbGVhc2UgZGF0ZTogMTktU0VQLTIwMDYqCiAKLQotV2hhdCdzIE5ldyBpbiBJRExFIDEuMmMxPwotPT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAxNy1BVUctMjAwNioKLQogLSBGaWxlIG1lbnUgaG90a2V5czogdGhlcmUgd2VyZSB0aHJlZSAncCcgYXNzaWdubWVudHMuICBSZWFzc2lnbiB0aGUKICAgJ1NhdmUgQ29weSBBcycgYW5kICdQcmludCcgaG90a2V5cyB0byAneScgYW5kICd0Jy4gIENoYW5nZSB0aGUKICAgU2hlbGwgaG90a2V5IGZyb20gJ3MnIHRvICdsJy4KQEAgLTM2NywxMSArNDk4LDYgQEAKIC0gV2hlbiB1c2VkIHcvbyBzdWJwcm9jZXNzLCBhbGwgZXhjZXB0aW9ucyB3ZXJlIHByZWNlZGVkIGJ5IGFuIGVycm9yCiAgIG1lc3NhZ2UgY2xhaW1pbmcgdGhleSB3ZXJlIElETEUgaW50ZXJuYWwgZXJyb3JzIChzaW5jZSAxLjJhMSkuCiAKLVdoYXQncyBOZXcgaW4gSURMRSAxLjJiMz8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDMtQVVHLTIwMDYqCi0KIC0gQnVnICMxNTI1ODE3OiBEb24ndCB0cnVuY2F0ZSBzaG9ydCBsaW5lcyBpbiBJRExFJ3MgdG9vbCB0aXBzLgogCiAtIEJ1ZyAjMTUxNzk5MDogSURMRSBrZXliaW5kaW5ncyBvbiBNYWNPUyBYIG5vdyB3b3JrIGNvcnJlY3RseQpAQCAtMzk1LDI2ICs1MjEsNiBAQAogICAnYXMnIGtleXdvcmQgaW4gY29tbWVudCBkaXJlY3RseSBmb2xsb3dpbmcgaW1wb3J0IGNvbW1hbmQuIENsb3NlcyAxMzI1MDcxLgogICBQYXRjaCAxNDc5MjE5IFRhbCBFaW5hdAogCi1XaGF0J3MgTmV3IGluIElETEUgMS4yYjI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDExLUpVTC0yMDA2KgotCi1XaGF0J3MgTmV3IGluIElETEUgMS4yYjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDIwLUpVTi0yMDA2KgotCi1XaGF0J3MgTmV3IGluIElETEUgMS4yYTI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDI3LUFQUi0yMDA2KgotCi1XaGF0J3MgTmV3IGluIElETEUgMS4yYTE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA1LUFQUi0yMDA2KgotCiAtIFBhdGNoICMxMTYyODI1OiBTdXBwb3J0IG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIElETEUgd2luZG93IHRpdGxlcy4KIAogLSBTb3VyY2UgZmlsZSBmLmZsdXNoKCkgYWZ0ZXIgd3JpdGluZzsgdHJ5aW5nIHRvIGF2b2lkIGxvc3NhZ2UgaWYgdXNlcgpAQCAtNDk0LDE5ICs2MDAsMTQgQEAKIC0gVGhlIHJlbW90ZSBwcm9jZWR1cmUgY2FsbCBtb2R1bGUgcnBjLnB5IGNhbiBub3cgYWNjZXNzIGRhdGEgYXR0cmlidXRlcyBvZgogICByZW1vdGUgcmVnaXN0ZXJlZCBvYmplY3RzLiAgQ2hhbmdlcyB0byB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBsb2NhbCwgaG93ZXZlci4KIAorCiBXaGF0J3MgTmV3IGluIElETEUgMS4xPwogPT09PT09PT09PT09PT09PT09PT09PT0KLQogKlJlbGVhc2UgZGF0ZTogMzAtTk9WLTIwMDQqCiAKIC0gT24gT3BlbkJTRCwgdGVybWluYXRpbmcgSURMRSB3aXRoIGN0cmwtYyBmcm9tIHRoZSBjb21tYW5kIGxpbmUgY2F1c2VkIGEKICAgc3R1Y2sgc3VicHJvY2VzcyBNYWluVGhyZWFkIGJlY2F1c2Ugb25seSB0aGUgU29ja2V0VGhyZWFkIHdhcyBleGl0aW5nLgogCi1XaGF0J3MgTmV3IGluIElETEUgMS4xYjMvcmMxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMTgtTk9WLTIwMDQqCi0KIC0gU2F2aW5nIGEgS2V5c2V0IHcvbyBtYWtpbmcgY2hhbmdlcyAoYnkgdXNpbmcgdGhlICJTYXZlIGFzIE5ldyBDdXN0b20gS2V5IFNldCIKICAgYnV0dG9uKSBjYXVzZWQgSURMRSB0byBmYWlsIG9uIHJlc3RhcnQgKG5vIG5ldyBrZXlzZXQgd2FzIGNyZWF0ZWQgaW4KICAgY29uZmlnLWtleXMuY2ZnKS4gIEFsc28gdHJ1ZSBmb3IgVGhlbWUvaGlnaGxpZ2h0cy4gIFB5dGhvbiBCdWcgMTA2NDUzNS4KQEAgLTUxNCwyOCArNjE1LDEyIEBACiAtIEEgY2hhbmdlIHRvIHRoZSBsaW5lY2FjaGUucHkgQVBJIGNhdXNlZCBJRExFIHRvIGV4aXQgd2hlbiBhbiBleGNlcHRpb24gd2FzCiAgIHJhaXNlZCB3aGlsZSBydW5uaW5nIHdpdGhvdXQgdGhlIHN1YnByb2Nlc3MgKC1uIHN3aXRjaCkuICBQeXRob24gQnVnIDEwNjM4NDAuCiAKLVdoYXQncyBOZXcgaW4gSURMRSAxLjFiMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDMtTk9WLTIwMDQqCi0KIC0gV2hlbiBwYXJhZ3JhcGggcmVmb3JtYXQgd2lkdGggd2FzIG1hZGUgY29uZmlndXJhYmxlLCBhIGJ1ZyB3YXMKICAgaW50cm9kdWNlZCB0aGF0IGNhdXNlZCByZWZvcm1hdHRpbmcgb2YgY29tbWVudCBibG9ja3MgdG8gaWdub3JlIGhvdwogICBmYXIgdGhlIGJsb2NrIHdhcyBpbmRlbnRlZCwgZWZmZWN0aXZlbHkgYWRkaW5nIHRoZSBpbmRlbnRhdGlvbiB3aWR0aAogICB0byB0aGUgcmVmb3JtYXQgd2lkdGguICBUaGlzIGhhcyBiZWVuIHJlcGFpcmVkLCBhbmQgdGhlIHJlZm9ybWF0CiAgIHdpZHRoIGlzIGFnYWluIGEgYm91bmQgb24gdGhlIHRvdGFsIHdpZHRoIG9mIHJlZm9ybWF0dGVkIGxpbmVzLgogCi1XaGF0J3MgTmV3IGluIElETEUgMS4xYjE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDE1LU9DVC0yMDA0KgotCi0KLVdoYXQncyBOZXcgaW4gSURMRSAxLjFhMz8KLT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMDItU0VQLTIwMDQqCi0KIC0gSW1wcm92ZSBrZXlib2FyZCBmb2N1cyBiaW5kaW5nLCBlc3BlY2lhbGx5IGluIFdpbmRvd3MgbWVudS4gIEltcHJvdmUKICAgd2luZG93IHJhaXNpbmcsIGVzcGVjaWFsbHkgaW4gdGhlIFdpbmRvd3MgbWVudSBhbmQgaW4gdGhlIGRlYnVnZ2VyLgogICBJRExFZm9yayA3NjM1MjQuCkBAIC01NDMsMjQgKzYyOCwxMiBAQAogLSBJZiB1c2VyIHBhc3NlcyBhIG5vbi1leGlzdGVudCBmaWxlbmFtZSBvbiB0aGUgY29tbWFuZGxpbmUsIGp1c3QKICAgb3BlbiBhIG5ldyBmaWxlLCBkb24ndCByYWlzZSBhIGRpYWxvZy4gIElETEVmb3JrIDg1NDkyOC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMS4xYTI/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA1LUFVRy0yMDA0KgotCiAtIEVkaXRvcldpbmRvdy5weSB3YXMgbm90IGZpbmRpbmcgdGhlIC5jaG0gaGVscCBmaWxlIG9uIFdpbmRvd3MuICBUeXBvCiAgIGF0IFJldiAxLjU0LiAgUHl0aG9uIEJ1ZyA5OTA5NTQKIAogLSBjaGVja2luZyBzeXMucGxhdGZvcm0gZm9yIHN1YnN0cmluZyAnd2luJyB3YXMgYnJlYWtpbmcgSURMRSBkb2NzIG9uIE1hYwogICAoZGFyd2luKS4gIEFsc28sIE1hYyBTYWZhcmkgYnJvd3NlciByZXF1aXJlcyBmdWxsIGZpbGU6Ly8gVVJJcy4gIFNGIDkwMDU4MC4KIAotCi1XaGF0J3MgTmV3IGluIElETEUgMS4xYTE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDA4LUpVTC0yMDA0KgotCiAtIFJlZGlyZWN0IHRoZSB3YXJuaW5nIHN0cmVhbSB0byB0aGUgc2hlbGwgZHVyaW5nIHRoZSBTY3JpcHRCaW5kaW5nIGNoZWNrIG9mCiAgIHVzZXIgY29kZSBhbmQgZm9ybWF0IHRoZSB3YXJuaW5nIHNpbWlsYXJseSB0byBhbiBleGNlcHRpb24gZm9yIGJvdGggdGhhdAogICBjaGVjayBhbmQgZm9yIHJ1bnRpbWUgd2FybmluZ3MgcmFpc2VkIGluIHRoZSBzdWJwcm9jZXNzLgpAQCAtNjIzLDI2ICs2OTYsMTMgQEAKIAogV2hhdCdzIE5ldyBpbiBJRExFIDEuMD8KID09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDI5LUp1bC0yMDAzKgogCiAtIEFkZGVkIGEgYmFubmVyIHRvIHRoZSBzaGVsbCBkaXNjdXNzaW5nIHdhcm5pbmdzIHBvc3NpYmx5IHJhaXNlZCBieSBwZXJzb25hbAogICBmaXJld2FsbCBzb2Z0d2FyZS4gIEFkZGVkIHNhbWUgY29tbWVudCB0byBSRUFETUUudHh0LgogCi0KLVdoYXQncyBOZXcgaW4gSURMRSAxLjAgcmVsZWFzZSBjYW5kaWRhdGUgMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjQtSnVsLTIwMDMqCi0KIC0gQ2FsbHRpcCBlcnJvciB3aGVuIGRvY3N0cmluZyB3YXMgTm9uZSAgUHl0aG9uIEJ1ZyA3NzU1NDEKIAotCi1XaGF0J3MgTmV3IGluIElETEUgMS4wIHJlbGVhc2UgY2FuZGlkYXRlIDE/Ci09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDE4LUp1bC0yMDAzKgotCiAtIFVwZGF0ZWQgZXh0ZW5kLnR4dCwgaGVscC50eHQsIGFuZCBjb25maWctZXh0ZW5zaW9ucy5kZWYgdG8gY29ycmVjdGx5CiAgIHJlZmxlY3QgdGhlIGN1cnJlbnQgc3RhdHVzIG9mIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbS4gIFB5dGhvbiBCdWcgNzY4NDY5CiAKQEAgLTY1OCwxMiArNzE4LDYgQEAKICAgc3lzLnN0ZHtpbnxvdXR8ZXJyfS5lbmNvZGluZywgZm9yIGJvdGggdGhlIGxvY2FsIGFuZCB0aGUgc3VicHJvY2VzcyBjYXNlLgogICBTRiBJRExFZm9yayBwYXRjaCA2ODIzNDcuCiAKLQotV2hhdCdzIE5ldyBpbiBJRExFIDEuMGIyPwotPT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAyOS1KdW4tMjAwMyoKLQogLSBFeHRlbmQgQWJvdXREaWFsb2cuVmlld0ZpbGUoKSB0byBzdXBwb3J0IGZpbGUgZW5jb2RpbmdzLiAgTWFrZSB0aGUgQ1JFRElUUwogICBmaWxlIExhdGluLTEuCiAKQEAgLTcwMiw3ICs3NTYsNiBAQAogCiBXaGF0J3MgTmV3IGluIElETEVmb3JrIDAuOWIxPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQogKlJlbGVhc2UgZGF0ZTogMDItSnVuLTIwMDMqCiAKIC0gVGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCAoYW5kIHNoZWxsCkBAIC04MDQsMTAgKzg1Nyw4IEBACiAgIGV4Y2VwdGlvbiBmb3JtYXR0aW5nIHRvIHRoZSBzdWJwcm9jZXNzLgogCiAKLQogV2hhdCdzIE5ldyBpbiBJRExFZm9yayAwLjkgQWxwaGEgMj8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDI3LUphbi0yMDAzKgogCiAtIFVwZGF0ZWQgSU5TVEFMTC50eHQgdG8gY2xhaWZ5IHVzZSBvZiB0aGUgcHl0aG9uMiBycG0uCkBAIC05MTEsNyArOTYyLDYgQEAKIAogV2hhdCdzIE5ldyBpbiBJRExFZm9yayAwLjkgQWxwaGEgMT8KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICpSZWxlYXNlIGRhdGU6IDMxLURlYy0yMDAyKgogCiAtIEZpcnN0IHJlbGVhc2Ugb2YgbWFqb3IgbmV3IGZ1bmN0aW9uYWxpdHkuICBGb3IgZnVydGhlciBkZXRhaWxzIHJlZmVyIHRvCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9PYmplY3RCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvT2JqZWN0QnJvd3Nlci5weQppbmRleCBiMzU5ZWZjLi43YjU3YWE0IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9PYmplY3RCcm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL09iamVjdEJyb3dzZXIucHkKQEAgLTksNiArOSw4IEBACiAjIFhYWCBUTyBETzoKICMgLSBmb3IgY2xhc3Nlcy9tb2R1bGVzLCBhZGQgIm9wZW4gc291cmNlIiB0byBvYmplY3QgYnJvd3NlcgogCitpbXBvcnQgcmUKKwogZnJvbSBpZGxlbGliLlRyZWVXaWRnZXQgaW1wb3J0IFRyZWVJdGVtLCBUcmVlTm9kZSwgU2Nyb2xsZWRDYW52YXMKIAogZnJvbSByZXBybGliIGltcG9ydCBSZXByCkBAIC0xMTksMTIgKzEyMSwxNCBAQAogICAgICAgICBjID0gT2JqZWN0VHJlZUl0ZW0KICAgICByZXR1cm4gYyhsYWJlbHRleHQsIG9iamVjdCwgc2V0ZnVuY3Rpb24pCiAKLSMgVGVzdCBzY3JpcHQKIAotZGVmIF90ZXN0KCk6CitkZWYgX29iamVjdF9icm93c2VyKHBhcmVudCk6CiAgICAgaW1wb3J0IHN5cwogICAgIGZyb20gdGtpbnRlciBpbXBvcnQgVGsKICAgICByb290ID0gVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgT2JqZWN0QnJvd3NlciIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogICAgIHJvb3QuY29uZmlndXJlKGJkPTAsIGJnPSJ5ZWxsb3ciKQogICAgIHJvb3QuZm9jdXNfc2V0KCkKICAgICBzYyA9IFNjcm9sbGVkQ2FudmFzKHJvb3QsIGJnPSJ3aGl0ZSIsIGhpZ2hsaWdodHRoaWNrbmVzcz0wLCB0YWtlZm9jdXM9MSkKQEAgLTEzNSw0ICsxMzksNSBAQAogICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIF90ZXN0KCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX29iamVjdF9icm93c2VyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvT3V0cHV0V2luZG93LnB5IGIvTGliL2lkbGVsaWIvT3V0cHV0V2luZG93LnB5CmluZGV4IDlkYWNjNDkuLmU2MTRmOWIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL091dHB1dFdpbmRvdy5weQorKysgYi9MaWIvaWRsZWxpYi9PdXRwdXRXaW5kb3cucHkKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIk5vIHNwZWNpYWwgbGluZSIsCiAgICAgICAgICAgICAgICAgICAgICJUaGUgbGluZSB5b3UgcG9pbnQgYXQgZG9lc24ndCBsb29rIGxpa2UgIgogICAgICAgICAgICAgICAgICAgICAiYSB2YWxpZCBmaWxlIG5hbWUgZm9sbG93ZWQgYnkgYSBsaW5lIG51bWJlci4iLAotICAgICAgICAgICAgICAgICAgICBtYXN0ZXI9c2VsZi50ZXh0KQorICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi50ZXh0KQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gcmVzdWx0CiAgICAgICAgIGVkaXQgPSBzZWxmLmZsaXN0Lm9wZW4oZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QYXJlbk1hdGNoLnB5IGIvTGliL2lkbGVsaWIvUGFyZW5NYXRjaC5weQppbmRleCA2ZDkxYjM5Li4xOWJhZDhjIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9QYXJlbk1hdGNoLnB5CisrKyBiL0xpYi9pZGxlbGliL1BhcmVuTWF0Y2gucHkKQEAgLTkwLDcgKzkwLDggQEAKICAgICAgICAgICAgIHNlbGYuc2V0X3RpbWVvdXQgPSBzZWxmLnNldF90aW1lb3V0X25vbmUKIAogICAgIGRlZiBmbGFzaF9wYXJlbl9ldmVudChzZWxmLCBldmVudCk6Ci0gICAgICAgIGluZGljZXMgPSBIeXBlclBhcnNlcihzZWxmLmVkaXR3aW4sICJpbnNlcnQiKS5nZXRfc3Vycm91bmRpbmdfYnJhY2tldHMoKQorICAgICAgICBpbmRpY2VzID0gKEh5cGVyUGFyc2VyKHNlbGYuZWRpdHdpbiwgImluc2VydCIpCisgICAgICAgICAgICAgICAgICAgLmdldF9zdXJyb3VuZGluZ19icmFja2V0cygpKQogICAgICAgICBpZiBpbmRpY2VzIGlzIE5vbmU6CiAgICAgICAgICAgICBzZWxmLndhcm5fbWlzbWF0Y2hlZCgpCiAgICAgICAgICAgICByZXR1cm4KQEAgLTE2Nyw2ICsxNjgsMTEgQEAKICAgICAgICAgIyBhc3NvY2lhdGUgYSBjb3VudGVyIHdpdGggYW4gZXZlbnQ7IG9ubHkgZGlzYWJsZSB0aGUgInBhcmVuIgogICAgICAgICAjIHRhZyBpZiB0aGUgZXZlbnQgaXMgZm9yIHRoZSBtb3N0IHJlY2VudCB0aW1lci4KICAgICAgICAgc2VsZi5jb3VudGVyICs9IDEKLSAgICAgICAgc2VsZi5lZGl0d2luLnRleHRfZnJhbWUuYWZ0ZXIoc2VsZi5GTEFTSF9ERUxBWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHNlbGY9c2VsZiwgYz1zZWxmLmNvdW50ZXI6IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfcmVzdG9yZV90aW1lcihjKSkKKyAgICAgICAgc2VsZi5lZGl0d2luLnRleHRfZnJhbWUuYWZ0ZXIoCisgICAgICAgICAgICBzZWxmLkZMQVNIX0RFTEFZLAorICAgICAgICAgICAgbGFtYmRhIHNlbGY9c2VsZiwgYz1zZWxmLmNvdW50ZXI6IHNlbGYuaGFuZGxlX3Jlc3RvcmVfdGltZXIoYykpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3BhcmVubWF0Y2gnLCB2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1BhdGhCcm93c2VyLnB5IGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKaW5kZXggYmE0MDcxOS4uOWFiNzYzMiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKKysrIGIvTGliL2lkbGVsaWIvUGF0aEJyb3dzZXIucHkKQEAgLTQsMTMgKzQsMjAgQEAKIAogZnJvbSBpZGxlbGliLlRyZWVXaWRnZXQgaW1wb3J0IFRyZWVJdGVtCiBmcm9tIGlkbGVsaWIuQ2xhc3NCcm93c2VyIGltcG9ydCBDbGFzc0Jyb3dzZXIsIE1vZHVsZUJyb3dzZXJUcmVlSXRlbQorZnJvbSBpZGxlbGliLlB5U2hlbGwgaW1wb3J0IFB5U2hlbGxGaWxlTGlzdAorCiAKIGNsYXNzIFBhdGhCcm93c2VyKENsYXNzQnJvd3Nlcik6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmxpc3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbGlzdCwgX2h0ZXN0PUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIF9odGVzdCAtIGJvb2wsIGNoYW5nZSBib3ggbG9jYXRpb24gd2hlbiBydW5uaW5nIGh0ZXN0CisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9odGVzdCA9IF9odGVzdAogICAgICAgICBzZWxmLmluaXQoZmxpc3QpCiAKICAgICBkZWYgc2V0dGl0bGUoc2VsZik6CisgICAgICAgICJTZXQgd2luZG93IHRpdGxlcy4iCiAgICAgICAgIHNlbGYudG9wLndtX3RpdGxlKCJQYXRoIEJyb3dzZXIiKQogICAgICAgICBzZWxmLnRvcC53bV9pY29ubmFtZSgiUGF0aCBCcm93c2VyIikKIApAQCAtNDQsNyArNTEsNyBAQAogICAgIGRlZiBHZXRTdWJMaXN0KHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoc2VsZi5kaXIgb3Igb3MuY3VyZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIHBhY2thZ2VzID0gW10KICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkBAIC02MywxNiArNzAsMTcgQEAKICAgICAgICAgcmV0dXJuIHN1Ymxpc3QKIAogICAgIGRlZiBpc3BhY2thZ2VkaXIoc2VsZiwgZmlsZSk6CisgICAgICAgICIgUmV0dXJuIHRydWUgZm9yIGRpcmVjdG9yaWVzIHRoYXQgYXJlIHBhY2thZ2VzLiIKICAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoZmlsZSk6Ci0gICAgICAgICAgICByZXR1cm4gMAorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGluaXQgPSBvcy5wYXRoLmpvaW4oZmlsZSwgIl9faW5pdF9fLnB5IikKICAgICAgICAgcmV0dXJuIG9zLnBhdGguZXhpc3RzKGluaXQpCiAKICAgICBkZWYgbGlzdG1vZHVsZXMoc2VsZiwgYWxsbmFtZXMpOgogICAgICAgICBtb2R1bGVzID0ge30KICAgICAgICAgc3VmZml4ZXMgPSBpbXBvcnRsaWIubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFU1s6XQotICAgICAgICBzdWZmaXhlcyArPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU1s6XQotICAgICAgICBzdWZmaXhlcyArPSBpbXBvcnRsaWIubWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTWzpdCisgICAgICAgIHN1ZmZpeGVzICs9IGltcG9ydGxpYi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTCisgICAgICAgIHN1ZmZpeGVzICs9IGltcG9ydGxpYi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVMKICAgICAgICAgc29ydGVkID0gW10KICAgICAgICAgZm9yIHN1ZmYgaW4gc3VmZml4ZXM6CiAgICAgICAgICAgICBpID0gLWxlbihzdWZmKQpAQCAtODcsMTIgKzk1LDE0IEBACiAgICAgICAgIHNvcnRlZC5zb3J0KCkKICAgICAgICAgcmV0dXJuIHNvcnRlZAogCi1kZWYgbWFpbigpOgotICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgUHlTaGVsbAotICAgIFBhdGhCcm93c2VyKFB5U2hlbGwuZmxpc3QpCi0gICAgaWYgc3lzLnN0ZGluIGlzIHN5cy5fX3N0ZGluX186Ci0gICAgICAgIG1haW5sb29wKCkKK2RlZiBfcGF0aF9icm93c2VyKHBhcmVudCk6ICAjIGh0ZXN0ICMKKyAgICBmbGlzdCA9IFB5U2hlbGxGaWxlTGlzdChwYXJlbnQpCisgICAgUGF0aEJyb3dzZXIoZmxpc3QsIF9odGVzdD1UcnVlKQorICAgIHBhcmVudC5tYWlubG9vcCgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgZnJvbSB1bml0dGVzdCBpbXBvcnQgbWFpbgogICAgIG1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3RfcGF0aGJyb3dzZXInLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKKworICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfcGF0aF9icm93c2VyKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUGVyY29sYXRvci5weSBiL0xpYi9pZGxlbGliL1BlcmNvbGF0b3IucHkKaW5kZXggYzkxZGUzOC4uOWU5MzMxOSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvUGVyY29sYXRvci5weQorKysgYi9MaWIvaWRsZWxpYi9QZXJjb2xhdG9yLnB5CkBAIC01MSw4ICs1MSw5IEBACiAgICAgICAgICAgICBmLnNldGRlbGVnYXRlKGZpbHRlci5kZWxlZ2F0ZSkKICAgICAgICAgICAgIGZpbHRlci5zZXRkZWxlZ2F0ZShOb25lKQogCi1kZWYgbWFpbigpOgotICAgIGltcG9ydCB0a2ludGVyIGFzIFRrCitkZWYgX3BlcmNvbGF0b3IocGFyZW50KToKKyAgICBpbXBvcnQgdGtpbnRlciBhcyB0aworICAgIGltcG9ydCByZQogICAgIGNsYXNzIFRyYWNlcihEZWxlZ2F0b3IpOgogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCkBAIC02MywyMiArNjQsNDEgQEAKICAgICAgICAgZGVmIGRlbGV0ZShzZWxmLCAqYXJncyk6CiAgICAgICAgICAgICBwcmludChzZWxmLm5hbWUsICI6IGRlbGV0ZSIsIGFyZ3MpCiAgICAgICAgICAgICBzZWxmLmRlbGVnYXRlLmRlbGV0ZSgqYXJncykKLSAgICByb290ID0gVGsuVGsoKQotICAgIHJvb3Qud21fcHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCByb290LnF1aXQpCi0gICAgdGV4dCA9IFRrLlRleHQoKQotICAgIHRleHQucGFjaygpCi0gICAgdGV4dC5mb2N1c19zZXQoKQorICAgIHJvb3QgPSB0ay5UaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBQZXJjb2xhdG9yIikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCisgICAgdGV4dCA9IHRrLlRleHQocm9vdCkKICAgICBwID0gUGVyY29sYXRvcih0ZXh0KQogICAgIHQxID0gVHJhY2VyKCJ0MSIpCiAgICAgdDIgPSBUcmFjZXIoInQyIikKLSAgICBwLmluc2VydGZpbHRlcih0MSkKLSAgICBwLmluc2VydGZpbHRlcih0MikKLSAgICByb290Lm1haW5sb29wKCkgIyBjbGljayBjbG9zZSB3aWRnZXQgdG8gY29udGludWUuLi4KLSAgICBwLnJlbW92ZWZpbHRlcih0MikKLSAgICByb290Lm1haW5sb29wKCkKLSAgICBwLmluc2VydGZpbHRlcih0MikKLSAgICBwLnJlbW92ZWZpbHRlcih0MSkKKworICAgIGRlZiB0b2dnbGUxKCk6CisgICAgICAgIGlmIHZhcjEuZ2V0KCkgPT0gMDoKKyAgICAgICAgICAgIHZhcjEuc2V0KDEpCisgICAgICAgICAgICBwLmluc2VydGZpbHRlcih0MSkKKyAgICAgICAgZWxpZiB2YXIxLmdldCgpID09IDE6CisgICAgICAgICAgICB2YXIxLnNldCgwKQorICAgICAgICAgICAgcC5yZW1vdmVmaWx0ZXIodDEpCisKKyAgICBkZWYgdG9nZ2xlMigpOgorICAgICAgICBpZiB2YXIyLmdldCgpID09IDA6CisgICAgICAgICAgICB2YXIyLnNldCgxKQorICAgICAgICAgICAgcC5pbnNlcnRmaWx0ZXIodDIpCisgICAgICAgIGVsaWYgdmFyMi5nZXQoKSA9PSAxOgorICAgICAgICAgICAgdmFyMi5zZXQoMCkKKyAgICAgICAgICAgIHAucmVtb3ZlZmlsdGVyKHQyKQorCisgICAgdGV4dC5wYWNrKCkKKyAgICB2YXIxID0gdGsuSW50VmFyKCkKKyAgICBjYjEgPSB0ay5DaGVja2J1dHRvbihyb290LCB0ZXh0PSJUcmFjZXIxIiwgY29tbWFuZD10b2dnbGUxLCB2YXJpYWJsZT12YXIxKQorICAgIGNiMS5wYWNrKCkKKyAgICB2YXIyID0gdGsuSW50VmFyKCkKKyAgICBjYjIgPSB0ay5DaGVja2J1dHRvbihyb290LCB0ZXh0PSJUcmFjZXIyIiwgY29tbWFuZD10b2dnbGUyLCB2YXJpYWJsZT12YXIyKQorICAgIGNiMi5wYWNrKCkKKwogICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfcGVyY29sYXRvcikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1B5UGFyc2UucHkgYi9MaWIvaWRsZWxpYi9QeVBhcnNlLnB5CmluZGV4IDYxYTAwMDMuLjljY2JiMjUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1B5UGFyc2UucHkKKysrIGIvTGliL2lkbGVsaWIvUHlQYXJzZS5weQpAQCAtMSw1ICsxLDYgQEAKIGltcG9ydCByZQogaW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgTWFwcGluZwogCiAjIFJlYXNvbiBsYXN0IHN0bXQgaXMgY29udGludWVkIChvciBDX05PTkUgaWYgaXQncyBub3QpLgogKENfTk9ORSwgQ19CQUNLU0xBU0gsIENfU1RSSU5HX0ZJUlNUX0xJTkUsCkBAIC05MSwxOSArOTIsNDggQEAKICAgICBbXltcXSgpe30jJyJcXF0rCiAiIiIsIHJlLlZFUkJPU0UpLm1hdGNoCiAKLSMgQnVpbGQgdHJhbnNsYXRpb24gdGFibGUgdG8gbWFwIHVuaW50ZXJlc3RpbmcgY2hhcnMgdG8gIngiLCBvcGVuCi0jIGJyYWNrZXRzIHRvICIoIiwgYW5kIGNsb3NlIGJyYWNrZXRzIHRvICIpIi4KIAotX3RyYW4gPSB7fQotZm9yIGkgaW4gcmFuZ2UoMjU2KToKLSAgICBfdHJhbltpXSA9ICd4JwotZm9yIGNoIGluICIoe1siOgotICAgIF90cmFuW29yZChjaCldID0gJygnCi1mb3IgY2ggaW4gIil9XSI6Ci0gICAgX3RyYW5bb3JkKGNoKV0gPSAnKScKLWZvciBjaCBpbiAiXCInXFxcbiMiOgotICAgIF90cmFuW29yZChjaCldID0gY2gKLWRlbCBpLCBjaAorY2xhc3MgU3RyaW5nVHJhbnNsYXRlUHNldWRvTWFwcGluZyhNYXBwaW5nKToKKyAgICByIiIiVXRpbGl0eSBjbGFzcyB0byBiZSB1c2VkIHdpdGggc3RyLnRyYW5zbGF0ZSgpCisKKyAgICBUaGlzIE1hcHBpbmcgY2xhc3Mgd3JhcHMgYSBnaXZlbiBkaWN0LiBXaGVuIGEgdmFsdWUgZm9yIGEga2V5IGlzCisgICAgcmVxdWVzdGVkIHZpYSBfX2dldGl0ZW1fXygpIG9yIGdldCgpLCB0aGUga2V5IGlzIGxvb2tlZCB1cCBpbiB0aGUKKyAgICBnaXZlbiBkaWN0LiBJZiBmb3VuZCB0aGVyZSwgdGhlIHZhbHVlIGZyb20gdGhlIGRpY3QgaXMgcmV0dXJuZWQuCisgICAgT3RoZXJ3aXNlLCB0aGUgZGVmYXVsdCB2YWx1ZSBnaXZlbiB1cG9uIGluaXRpYWxpemF0aW9uIGlzIHJldHVybmVkLgorCisgICAgVGhpcyBhbGxvd3MgdXNpbmcgc3RyLnRyYW5zbGF0ZSgpIHRvIG1ha2Ugc29tZSByZXBsYWNlbWVudHMsIGFuZCB0bworICAgIHJlcGxhY2UgYWxsIGNoYXJhY3RlcnMgZm9yIHdoaWNoIG5vIHJlcGxhY2VtZW50IHdhcyBzcGVjaWZpZWQgd2l0aAorICAgIGEgZ2l2ZW4gY2hhcmFjdGVyIGluc3RlYWQgb2YgbGVhdmluZyB0aGVtIGFzLWlzLgorCisgICAgRm9yIGV4YW1wbGUsIHRvIHJlcGxhY2UgZXZlcnl0aGluZyBleGNlcHQgd2hpdGVzcGFjZSB3aXRoICd4JzoKKworICAgID4+PiB3aGl0ZXNwYWNlX2NoYXJzID0gJyBcdFxuXHInCisgICAgPj4+IHByZXNlcnZlX2RpY3QgPSB7b3JkKGMpOiBvcmQoYykgZm9yIGMgaW4gd2hpdGVzcGFjZV9jaGFyc30KKyAgICA+Pj4gbWFwcGluZyA9IFN0cmluZ1RyYW5zbGF0ZVBzZXVkb01hcHBpbmcocHJlc2VydmVfZGljdCwgb3JkKCd4JykpCisgICAgPj4+IHRleHQgPSAiYSArIGJcdGNcbmQiCisgICAgPj4+IHRleHQudHJhbnNsYXRlKG1hcHBpbmcpCisgICAgJ3ggeCB4XHR4XG54JworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBub25fZGVmYXVsdHMsIGRlZmF1bHRfdmFsdWUpOgorICAgICAgICBzZWxmLl9ub25fZGVmYXVsdHMgPSBub25fZGVmYXVsdHMKKyAgICAgICAgc2VsZi5fZGVmYXVsdF92YWx1ZSA9IGRlZmF1bHRfdmFsdWUKKworICAgICAgICBkZWYgX2dldChrZXksIF9nZXQ9bm9uX2RlZmF1bHRzLmdldCwgX2RlZmF1bHQ9ZGVmYXVsdF92YWx1ZSk6CisgICAgICAgICAgICByZXR1cm4gX2dldChrZXksIF9kZWZhdWx0KQorICAgICAgICBzZWxmLl9nZXQgPSBfZ2V0CisKKyAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaXRlbSk6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXQoaXRlbSkKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX25vbl9kZWZhdWx0cykKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fbm9uX2RlZmF1bHRzKQorCisgICAgZGVmIGdldChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9nZXQoa2V5KQorCiAKIGNsYXNzIFBhcnNlcjoKIApAQCAtMTEzLDE5ICsxNDMsNiBAQAogCiAgICAgZGVmIHNldF9zdHIoc2VsZiwgcyk6CiAgICAgICAgIGFzc2VydCBsZW4ocykgPT0gMCBvciBzWy0xXSA9PSAnXG4nCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uocywgc3RyKToKLSAgICAgICAgICAgICMgVGhlIHBhcnNlIGZ1bmN0aW9ucyBoYXZlIG5vIGlkZWEgd2hhdCB0byBkbyB3aXRoIFVuaWNvZGUsIHNvCi0gICAgICAgICAgICAjIHJlcGxhY2UgYWxsIFVuaWNvZGUgY2hhcmFjdGVycyB3aXRoICJ4Ii4gIFRoaXMgaXMgInNhZmUiCi0gICAgICAgICAgICAjIHNvIGxvbmcgYXMgdGhlIG9ubHkgY2hhcmFjdGVycyBnZXJtYW5lIHRvIHBhcnNpbmcgdGhlIHN0cnVjdHVyZQotICAgICAgICAgICAgIyBvZiBQeXRob24gYXJlIDctYml0IEFTQ0lJLiAgSXQncyAqbmVjZXNzYXJ5KiBiZWNhdXNlIFVuaWNvZGUKLSAgICAgICAgICAgICMgc3RyaW5ncyBkb24ndCBoYXZlIGEgLnRyYW5zbGF0ZSgpIG1ldGhvZCB0aGF0IHN1cHBvcnRzCi0gICAgICAgICAgICAjIGRlbGV0ZWNoYXJzLgotICAgICAgICAgICAgdW5pcGhvb2V5ID0gcwotICAgICAgICAgICAgcyA9IFtdCi0gICAgICAgICAgICBwdXNoID0gcy5hcHBlbmQKLSAgICAgICAgICAgIGZvciByYXcgaW4gbWFwKG9yZCwgdW5pcGhvb2V5KToKLSAgICAgICAgICAgICAgICBwdXNoKHJhdyA8IDEyNyBhbmQgY2hyKHJhdykgb3IgIngiKQotICAgICAgICAgICAgcyA9ICIiLmpvaW4ocykKICAgICAgICAgc2VsZi5zdHIgPSBzCiAgICAgICAgIHNlbGYuc3R1ZHlfbGV2ZWwgPSAwCiAKQEAgLTE5Nyw2ICsyMTQsMTYgQEAKICAgICAgICAgaWYgbG8gPiAwOgogICAgICAgICAgICAgc2VsZi5zdHIgPSBzZWxmLnN0cltsbzpdCiAKKyAgICAjIEJ1aWxkIGEgdHJhbnNsYXRpb24gdGFibGUgdG8gbWFwIHVuaW50ZXJlc3RpbmcgY2hhcnMgdG8gJ3gnLCBvcGVuCisgICAgIyBicmFja2V0cyB0byAnKCcsIGNsb3NlIGJyYWNrZXRzIHRvICcpJyB3aGlsZSBwcmVzZXJ2aW5nIHF1b3RlcywKKyAgICAjIGJhY2tzbGFzaGVzLCBuZXdsaW5lcyBhbmQgaGFzaGVzLiBUaGlzIGlzIHRvIGJlIHBhc3NlZCB0bworICAgICMgc3RyLnRyYW5zbGF0ZSgpIGluIF9zdHVkeTEoKS4KKyAgICBfdHJhbiA9IHt9CisgICAgX3RyYW4udXBkYXRlKChvcmQoYyksIG9yZCgnKCcpKSBmb3IgYyBpbiAiKHtbIikKKyAgICBfdHJhbi51cGRhdGUoKG9yZChjKSwgb3JkKCcpJykpIGZvciBjIGluICIpfV0iKQorICAgIF90cmFuLnVwZGF0ZSgob3JkKGMpLCBvcmQoYykpIGZvciBjIGluICJcIidcXFxuIyIpCisgICAgX3RyYW4gPSBTdHJpbmdUcmFuc2xhdGVQc2V1ZG9NYXBwaW5nKF90cmFuLCBkZWZhdWx0X3ZhbHVlPW9yZCgneCcpKQorCiAgICAgIyBBcyBxdWlja2x5IGFzIGh1bWFubHkgcG9zc2libGUgPHdpbms+LCBmaW5kIHRoZSBsaW5lIG51bWJlcnMgKDAtCiAgICAgIyBiYXNlZCkgb2YgdGhlIG5vbi1jb250aW51YXRpb24gbGluZXMuCiAgICAgIyBDcmVhdGVzIHNlbGYue2dvb2RsaW5lcywgY29udGludWF0aW9ufS4KQEAgLTIxMSw3ICsyMzgsNyBAQAogICAgICAgICAjIHVuaW50ZXJlc3RpbmcgY2hhcmFjdGVycy4gIFRoaXMgY2FuIGN1dCB0aGUgbnVtYmVyIG9mIGNoYXJzCiAgICAgICAgICMgYnkgYSBmYWN0b3Igb2YgMTAtNDAsIGFuZCBzbyBncmVhdGx5IHNwZWVkIHRoZSBmb2xsb3dpbmcgbG9vcC4KICAgICAgICAgc3RyID0gc2VsZi5zdHIKLSAgICAgICAgc3RyID0gc3RyLnRyYW5zbGF0ZShfdHJhbikKKyAgICAgICAgc3RyID0gc3RyLnRyYW5zbGF0ZShzZWxmLl90cmFuKQogICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgneHh4eHh4eHgnLCAneCcpCiAgICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCd4eHh4JywgJ3gnKQogICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgneHgnLCAneCcpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5IGIvTGliL2lkbGVsaWIvUHlTaGVsbC5weQppbmRleCAyZTVlYmIyLi4xYmNjOWI2IDEwMDc1NQotLS0gYS9MaWIvaWRsZWxpYi9QeVNoZWxsLnB5CisrKyBiL0xpYi9pZGxlbGliL1B5U2hlbGwucHkKQEAgLTEwLDggKzEwLDYgQEAKIGltcG9ydCB0aHJlYWRpbmcKIGltcG9ydCB0aW1lCiBpbXBvcnQgdG9rZW5pemUKLWltcG9ydCB0cmFjZWJhY2sKLWltcG9ydCB0eXBlcwogaW1wb3J0IGlvCiAKIGltcG9ydCBsaW5lY2FjaGUKQEAgLTIxLDcgKzE5LDcgQEAKIHRyeToKICAgICBmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwcmludCgiKiogSURMRSBjYW4ndCBpbXBvcnQgVGtpbnRlci4gICIgXAorICAgIHByaW50KCIqKiBJRExFIGNhbid0IGltcG9ydCBUa2ludGVyLlxuIgogICAgICAgICAgICJZb3VyIFB5dGhvbiBtYXkgbm90IGJlIGNvbmZpZ3VyZWQgZm9yIFRrLiAqKiIsIGZpbGU9c3lzLl9fc3RkZXJyX18pCiAgICAgc3lzLmV4aXQoMSkKIGltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3ggYXMgdGtNZXNzYWdlQm94CkBAIC0zMiw3ICszMCw2IEBACiBmcm9tIGlkbGVsaWIuVW5kb0RlbGVnYXRvciBpbXBvcnQgVW5kb0RlbGVnYXRvcgogZnJvbSBpZGxlbGliLk91dHB1dFdpbmRvdyBpbXBvcnQgT3V0cHV0V2luZG93CiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKLWZyb20gaWRsZWxpYiBpbXBvcnQgaWRsZXZlcgogZnJvbSBpZGxlbGliIGltcG9ydCBycGMKIGZyb20gaWRsZWxpYiBpbXBvcnQgRGVidWdnZXIKIGZyb20gaWRsZWxpYiBpbXBvcnQgUmVtb3RlRGVidWdnZXIKQEAgLTEzOCw2ICsxMzUsNyBAQAogICAgICAgICBzZWxmLmlvLnNldF9maWxlbmFtZV9jaGFuZ2VfaG9vayhmaWxlbmFtZV9jaGFuZ2VkX2hvb2spCiAgICAgICAgIGlmIHNlbGYuaW8uZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLnJlc3RvcmVfZmlsZV9icmVha3MoKQorICAgICAgICBzZWxmLmNvbG9yX2JyZWFrcG9pbnRfdGV4dCgpCiAKICAgICBybWVudV9zcGVjcyA9IFsKICAgICAgICAgKCJDdXQiLCAiPDxjdXQ+PiIsICJybWVudV9jaGVja19jdXQiKSwKQEAgLTE0OCwxMiArMTQ2LDI0IEBACiAgICAgICAgICgiQ2xlYXIgQnJlYWtwb2ludCIsICI8PGNsZWFyLWJyZWFrcG9pbnQtaGVyZT4+IiwgTm9uZSkKICAgICBdCiAKKyAgICBkZWYgY29sb3JfYnJlYWtwb2ludF90ZXh0KHNlbGYsIGNvbG9yPVRydWUpOgorICAgICAgICAiVHVybiBjb2xvcml6aW5nIG9mIGJyZWFrcG9pbnQgdGV4dCBvbiBvciBvZmYiCisgICAgICAgIGlmIHNlbGYuaW8gaXMgTm9uZToKKyAgICAgICAgICAgICMgcG9zc2libGUgZHVlIHRvIHVwZGF0ZSBpbiByZXN0b3JlX2ZpbGVfYnJlYWtzCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgY29sb3I6CisgICAgICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCisgICAgICAgICAgICBjZmcgPSBpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICJicmVhayIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjZmcgPSB7J2ZvcmVncm91bmQnOiAnJywgJ2JhY2tncm91bmQnOiAnJ30KKyAgICAgICAgc2VsZi50ZXh0LnRhZ19jb25maWcoJ0JSRUFLJywgY2ZnKQorCiAgICAgZGVmIHNldF9icmVha3BvaW50KHNlbGYsIGxpbmVubyk6CiAgICAgICAgIHRleHQgPSBzZWxmLnRleHQKICAgICAgICAgZmlsZW5hbWUgPSBzZWxmLmlvLmZpbGVuYW1lCiAgICAgICAgIHRleHQudGFnX2FkZCgiQlJFQUsiLCAiJWQuMCIgJSBsaW5lbm8sICIlZC4wIiAlIChsaW5lbm8rMSkpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGkgPSBzZWxmLmJyZWFrcG9pbnRzLmluZGV4KGxpbmVubykKKyAgICAgICAgICAgIHNlbGYuYnJlYWtwb2ludHMuaW5kZXgobGluZW5vKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjogICMgb25seSBhZGQgaWYgbWlzc2luZywgaS5lLiBkbyBvbmNlCiAgICAgICAgICAgICBzZWxmLmJyZWFrcG9pbnRzLmFwcGVuZChsaW5lbm8pCiAgICAgICAgIHRyeTogICAgIyB1cGRhdGUgdGhlIHN1YnByb2Nlc3MgZGVidWdnZXIKQEAgLTIxNywxMyArMjI3LDggQEAKICAgICAgICAgIyAgICAgVGhpcyBpcyBuZWNlc3NhcnkgdG8ga2VlcCB0aGUgc2F2ZWQgYnJlYWtzIHN5bmNoZWQgd2l0aCB0aGUKICAgICAgICAgIyAgICAgc2F2ZWQgZmlsZS4KICAgICAgICAgIwotICAgICAgICAjICAgICBCcmVha3BvaW50cyBhcmUgc2V0IGFzIHRhZ2dlZCByYW5nZXMgaW4gdGhlIHRleHQuICBDZXJ0YWluCi0gICAgICAgICMgICAgIGtpbmRzIG9mIGVkaXRzIGNhdXNlIHRoZXNlIHJhbmdlcyB0byBiZSBkZWxldGVkOiBJbnNlcnRpbmcKLSAgICAgICAgIyAgICAgb3IgZGVsZXRpbmcgYSBsaW5lIGp1c3QgYmVmb3JlIGEgYnJlYWtwb2ludCwgYW5kIGNlcnRhaW4KLSAgICAgICAgIyAgICAgZGVsZXRpb25zIHByaW9yIHRvIGEgYnJlYWtwb2ludC4gIFRoZXNlIGlzc3VlcyBuZWVkIHRvIGJlCi0gICAgICAgICMgICAgIGludmVzdGlnYXRlZCBhbmQgdW5kZXJzdG9vZC4gIEl0J3Mgbm90IGNsZWFyIGlmIHRoZXkgYXJlCi0gICAgICAgICMgICAgIFRrIGlzc3VlcyBvciBJRExFIGlzc3Vlcywgb3Igd2hldGhlciB0aGV5IGNhbiBhY3R1YWxseQotICAgICAgICAjICAgICBiZSBmaXhlZC4gIFNpbmNlIGEgbW9kaWZpZWQgZmlsZSBoYXMgdG8gYmUgc2F2ZWQgYmVmb3JlIGl0IGlzCisgICAgICAgICMgICAgIEJyZWFrcG9pbnRzIGFyZSBzZXQgYXMgdGFnZ2VkIHJhbmdlcyBpbiB0aGUgdGV4dC4KKyAgICAgICAgIyAgICAgU2luY2UgYSBtb2RpZmllZCBmaWxlIGhhcyB0byBiZSBzYXZlZCBiZWZvcmUgaXQgaXMKICAgICAgICAgIyAgICAgcnVuLCBhbmQgc2luY2Ugc2VsZi5icmVha3BvaW50cyAoZnJvbSB3aGljaCB0aGUgc3VicHJvY2VzcwogICAgICAgICAjICAgICBkZWJ1Z2dlciBpcyBsb2FkZWQpIGlzIHVwZGF0ZWQgZHVyaW5nIHRoZSBzYXZlLCB0aGUgdmlzaWJsZQogICAgICAgICAjICAgICBicmVha3Mgc3RheSBzeW5jaGVkIHdpdGggdGhlIHN1YnByb2Nlc3MgZXZlbiBpZiBvbmUgb2YgdGhlc2UKQEAgLTMzMyw3ICszMzgsNyBAQAogCiAgICAgZGVmIExvYWRUYWdEZWZzKHNlbGYpOgogICAgICAgICBDb2xvckRlbGVnYXRvci5Mb2FkVGFnRGVmcyhzZWxmKQotICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ1RoZW1lJywnbmFtZScpCisgICAgICAgIHRoZW1lID0gaWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKICAgICAgICAgc2VsZi50YWdkZWZzLnVwZGF0ZSh7CiAgICAgICAgICAgICAic3RkaW4iOiB7J2JhY2tncm91bmQnOk5vbmUsJ2ZvcmVncm91bmQnOk5vbmV9LAogICAgICAgICAgICAgInN0ZG91dCI6IGlkbGVDb25mLkdldEhpZ2hsaWdodCh0aGVtZSwgInN0ZG91dCIpLApAQCAtNDE5LDcgKzQyNCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5ycGNjbHQgPSBNeVJQQ0NsaWVudChhZGRyKQogICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZGlzcGxheV9wb3J0X2JpbmRpbmdfZXJyb3IoKQpAQCAtNDQwLDcgKzQ0NSw3IEBACiAgICAgICAgIHNlbGYucnBjY2x0Lmxpc3RlbmluZ19zb2NrLnNldHRpbWVvdXQoMTApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucnBjY2x0LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dCBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZGlzcGxheV9ub19zdWJwcm9jZXNzX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHNlbGYucnBjY2x0LnJlZ2lzdGVyKCJjb25zb2xlIiwgc2VsZi50a2NvbnNvbGUpCkBAIC00NTQsNyArNDU5LDcgQEAKICAgICAgICAgc2VsZi5wb2xsX3N1YnByb2Nlc3MoKQogICAgICAgICByZXR1cm4gc2VsZi5ycGNjbHQKIAotICAgIGRlZiByZXN0YXJ0X3N1YnByb2Nlc3Moc2VsZiwgd2l0aF9jd2Q9RmFsc2UpOgorICAgIGRlZiByZXN0YXJ0X3N1YnByb2Nlc3Moc2VsZiwgd2l0aF9jd2Q9RmFsc2UsIGZpbGVuYW1lPScnKToKICAgICAgICAgaWYgc2VsZi5yZXN0YXJ0aW5nOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYucnBjY2x0CiAgICAgICAgIHNlbGYucmVzdGFydGluZyA9IFRydWUKQEAgLTQ3NSwyNSArNDgwLDI0IEBACiAgICAgICAgIHNlbGYuc3Bhd25fc3VicHJvY2VzcygpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucnBjY2x0LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dCBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZGlzcGxheV9ub19zdWJwcm9jZXNzX2Vycm9yKCkKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHNlbGYudHJhbnNmZXJfcGF0aCh3aXRoX2N3ZD13aXRoX2N3ZCkKICAgICAgICAgY29uc29sZS5zdG9wX3JlYWRsaW5lKCkKICAgICAgICAgIyBhbm5vdGF0ZSByZXN0YXJ0IGluIHNoZWxsIHdpbmRvdyBhbmQgbWFyayBpdAogICAgICAgICBjb25zb2xlLnRleHQuZGVsZXRlKCJpb21hcmsiLCAiZW5kLTFjIikKLSAgICAgICAgaWYgd2FzX2V4ZWN1dGluZzoKLSAgICAgICAgICAgIGNvbnNvbGUud3JpdGUoJ1xuJykKLSAgICAgICAgICAgIGNvbnNvbGUuc2hvd3Byb21wdCgpCi0gICAgICAgIGhhbGZiYXIgPSAoKGludChjb25zb2xlLndpZHRoKSAtIDE2KSAvLyAyKSAqICc9JwotICAgICAgICBjb25zb2xlLndyaXRlKGhhbGZiYXIgKyAnIFJFU1RBUlQgJyArIGhhbGZiYXIpCisgICAgICAgIHRhZyA9ICdSRVNUQVJUOiAnICsgKGZpbGVuYW1lIGlmIGZpbGVuYW1lIGVsc2UgJ1NoZWxsJykKKyAgICAgICAgaGFsZmJhciA9ICgoaW50KGNvbnNvbGUud2lkdGgpIC1sZW4odGFnKSAtIDQpIC8vIDIpICogJz0nCisgICAgICAgIGNvbnNvbGUud3JpdGUoIlxuezB9IHsxfSB7MH0iLmZvcm1hdChoYWxmYmFyLCB0YWcpKQogICAgICAgICBjb25zb2xlLnRleHQubWFya19zZXQoInJlc3RhcnQiLCAiZW5kLTFjIikKICAgICAgICAgY29uc29sZS50ZXh0Lm1hcmtfZ3Jhdml0eSgicmVzdGFydCIsICJsZWZ0IikKLSAgICAgICAgY29uc29sZS5zaG93cHJvbXB0KCkKKyAgICAgICAgaWYgbm90IGZpbGVuYW1lOgorICAgICAgICAgICAgY29uc29sZS5zaG93cHJvbXB0KCkKICAgICAgICAgIyByZXN0YXJ0IHN1YnByb2Nlc3MgZGVidWdnZXIKICAgICAgICAgaWYgZGVidWc6CiAgICAgICAgICAgICAjIFJlc3RhcnRlZCBkZWJ1Z2dlciBjb25uZWN0cyB0byBjdXJyZW50IGluc3RhbmNlIG9mIGRlYnVnIEdVSQotICAgICAgICAgICAgZ3VpID0gUmVtb3RlRGVidWdnZXIucmVzdGFydF9zdWJwcm9jZXNzX2RlYnVnZ2VyKHNlbGYucnBjY2x0KQorICAgICAgICAgICAgUmVtb3RlRGVidWdnZXIucmVzdGFydF9zdWJwcm9jZXNzX2RlYnVnZ2VyKHNlbGYucnBjY2x0KQogICAgICAgICAgICAgIyByZWxvYWQgcmVtb3RlIGRlYnVnZ2VyIGJyZWFrcG9pbnRzIGZvciBhbGwgUHlTaGVsbEVkaXRXaW5kb3dzCiAgICAgICAgICAgICBkZWJ1Zy5sb2FkX2JyZWFrcG9pbnRzKCkKICAgICAgICAgc2VsZi5jb21waWxlLmNvbXBpbGVyLmZsYWdzID0gc2VsZi5vcmlnaW5hbF9jb21waWxlcl9mbGFncwpAQCAtNjE3LDcgKzYyMSw3IEBACiAgICAgICAgIGl0ZW0gPSBSZW1vdGVPYmplY3RCcm93c2VyLlN0dWJPYmplY3RUcmVlSXRlbShzZWxmLnJwY2NsdCwgb2lkKQogICAgICAgICBmcm9tIGlkbGVsaWIuVHJlZVdpZGdldCBpbXBvcnQgU2Nyb2xsZWRDYW52YXMsIFRyZWVOb2RlCiAgICAgICAgIHRvcCA9IFRvcGxldmVsKHNlbGYudGtjb25zb2xlLnJvb3QpCi0gICAgICAgIHRoZW1lID0gaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnVGhlbWUnLCduYW1lJykKKyAgICAgICAgdGhlbWUgPSBpZGxlQ29uZi5DdXJyZW50VGhlbWUoKQogICAgICAgICBiYWNrZ3JvdW5kID0gaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCAnbm9ybWFsJylbJ2JhY2tncm91bmQnXQogICAgICAgICBzYyA9IFNjcm9sbGVkQ2FudmFzKHRvcCwgYmc9YmFja2dyb3VuZCwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApCiAgICAgICAgIHNjLmZyYW1lLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQpAQCAtNjQxLDkgKzY0NSw5IEBACiAgICAgICAgICAgICBjb2RlID0gY29tcGlsZShzb3VyY2UsIGZpbGVuYW1lLCAiZXhlYyIpCiAgICAgICAgIGV4Y2VwdCAoT3ZlcmZsb3dFcnJvciwgU3ludGF4RXJyb3IpOgogICAgICAgICAgICAgc2VsZi50a2NvbnNvbGUucmVzZXRvdXRwdXQoKQotICAgICAgICAgICAgdGtlcnIgPSBzZWxmLnRrY29uc29sZS5zdGRlcnIKLSAgICAgICAgICAgIHByaW50KCcqKiogRXJyb3IgaW4gc2NyaXB0IG9yIGNvbW1hbmQhXG4nLCBmaWxlPXRrZXJyKQotICAgICAgICAgICAgcHJpbnQoJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonLCBmaWxlPXRrZXJyKQorICAgICAgICAgICAgcHJpbnQoJyoqKiBFcnJvciBpbiBzY3JpcHQgb3IgY29tbWFuZCFcbicKKyAgICAgICAgICAgICAgICAgJ1RyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTonLAorICAgICAgICAgICAgICAgICAgZmlsZT1zZWxmLnRrY29uc29sZS5zdGRlcnIpCiAgICAgICAgICAgICBJbnRlcmFjdGl2ZUludGVycHJldGVyLnNob3dzeW50YXhlcnJvcihzZWxmLCBmaWxlbmFtZSkKICAgICAgICAgICAgIHNlbGYudGtjb25zb2xlLnNob3dwcm9tcHQoKQogICAgICAgICBlbHNlOgpAQCAtNzcwLDcgKzc3NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICJFeGl0PyIsCiAgICAgICAgICAgICAgICAgICAgICJEbyB5b3Ugd2FudCB0byBleGl0IGFsdG9nZXRoZXI/IiwKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD0ieWVzIiwKLSAgICAgICAgICAgICAgICAgICAgbWFzdGVyPXNlbGYudGtjb25zb2xlLnRleHQpOgorICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZi50a2NvbnNvbGUudGV4dCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaG93dHJhY2ViYWNrKCkKQEAgLTgwOCw3ICs4MTIsNyBAQAogICAgICAgICAgICAgIlJ1biBJRExFIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggdG8gc3RhcnQgd2l0aG91dCBhICIKICAgICAgICAgICAgICJzdWJwcm9jZXNzIGFuZCByZWZlciB0byBIZWxwL0lETEUgSGVscCAnUnVubmluZyB3aXRob3V0IGEgIgogICAgICAgICAgICAgInN1YnByb2Nlc3MnIGZvciBmdXJ0aGVyIGRldGFpbHMuIiwKLSAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRrY29uc29sZS50ZXh0KQorICAgICAgICAgICAgcGFyZW50PXNlbGYudGtjb25zb2xlLnRleHQpCiAKICAgICBkZWYgZGlzcGxheV9ub19zdWJwcm9jZXNzX2Vycm9yKHNlbGYpOgogICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKApAQCAtODE2LDE0ICs4MjAsMTQgQEAKICAgICAgICAgICAgICJJRExFJ3Mgc3VicHJvY2VzcyBkaWRuJ3QgbWFrZSBjb25uZWN0aW9uLiAgRWl0aGVyIElETEUgY2FuJ3QgIgogICAgICAgICAgICAgInN0YXJ0IGEgc3VicHJvY2VzcyBvciBwZXJzb25hbCBmaXJld2FsbCBzb2Z0d2FyZSBpcyBibG9ja2luZyAiCiAgICAgICAgICAgICAidGhlIGNvbm5lY3Rpb24uIiwKLSAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRrY29uc29sZS50ZXh0KQorICAgICAgICAgICAgcGFyZW50PXNlbGYudGtjb25zb2xlLnRleHQpCiAKICAgICBkZWYgZGlzcGxheV9leGVjdXRpbmdfZGlhbG9nKHNlbGYpOgogICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKAogICAgICAgICAgICAgIkFscmVhZHkgZXhlY3V0aW5nIiwKICAgICAgICAgICAgICJUaGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBpcyBhbHJlYWR5IGV4ZWN1dGluZyBhIGNvbW1hbmQ7ICIKICAgICAgICAgICAgICJwbGVhc2Ugd2FpdCB1bnRpbCBpdCBpcyBmaW5pc2hlZC4iLAotICAgICAgICAgICAgbWFzdGVyPXNlbGYudGtjb25zb2xlLnRleHQpCisgICAgICAgICAgICBwYXJlbnQ9c2VsZi50a2NvbnNvbGUudGV4dCkKIAogCiBjbGFzcyBQeVNoZWxsKE91dHB1dFdpbmRvdyk6CkBAIC04NDAsMTMgKzg0NCwxMCBAQAogICAgICAgICAoImVkaXQiLCAiX0VkaXQiKSwKICAgICAgICAgKCJkZWJ1ZyIsICJfRGVidWciKSwKICAgICAgICAgKCJvcHRpb25zIiwgIl9PcHRpb25zIiksCi0gICAgICAgICgid2luZG93cyIsICJfV2luZG93cyIpLAorICAgICAgICAoIndpbmRvd3MiLCAiX1dpbmRvdyIpLAogICAgICAgICAoImhlbHAiLCAiX0hlbHAiKSwKICAgICBdCiAKLSAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgotICAgICAgICBtZW51X3NwZWNzWy0yXSA9ICgid2luZG93cyIsICJfV2luZG93IikKLQogCiAgICAgIyBOZXcgY2xhc3NlcwogICAgIGZyb20gaWRsZWxpYi5JZGxlSGlzdG9yeSBpbXBvcnQgSGlzdG9yeQpAQCAtOTMwLDcgKzkzMSw3IEBACiAgICAgICAgIGlmIHNlbGYuZXhlY3V0aW5nOgogICAgICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiRG9uJ3QgZGVidWcgbm93IiwKICAgICAgICAgICAgICAgICAiWW91IGNhbiBvbmx5IHRvZ2dsZSB0aGUgZGVidWdnZXIgd2hlbiBpZGxlIiwKLSAgICAgICAgICAgICAgICBtYXN0ZXI9c2VsZi50ZXh0KQorICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICBzZWxmLnNldF9kZWJ1Z2dlcl9pbmRpY2F0b3IoKQogICAgICAgICAgICAgcmV0dXJuICJicmVhayIKICAgICAgICAgZWxzZToKQEAgLTk4OCw3ICs5ODksNyBAQAogICAgICAgICBpZiBzZWxmLmV4ZWN1dGluZzoKICAgICAgICAgICAgIHJlc3BvbnNlID0gdGtNZXNzYWdlQm94LmFza29rY2FuY2VsKAogICAgICAgICAgICAgICAgICJLaWxsPyIsCi0gICAgICAgICAgICAgICAgIlRoZSBwcm9ncmFtIGlzIHN0aWxsIHJ1bm5pbmchXG4gRG8geW91IHdhbnQgdG8ga2lsbCBpdD8iLAorICAgICAgICAgICAgICAgICJZb3VyIHByb2dyYW0gaXMgc3RpbGwgcnVubmluZyFcbiBEbyB5b3Ugd2FudCB0byBraWxsIGl0PyIsCiAgICAgICAgICAgICAgICAgZGVmYXVsdD0ib2siLAogICAgICAgICAgICAgICAgIHBhcmVudD1zZWxmLnRleHQpCiAgICAgICAgICAgICBpZiByZXNwb25zZSBpcyBGYWxzZToKQEAgLTEwMzQsMTEgKzEwMzUsMTUgQEAKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5vc3ViID0gIj09PT0gTm8gU3VicHJvY2VzcyA9PT09IgorICAgICAgICAgICAgbm9zdWIgPSAoIj09PT0gTm8gU3VicHJvY2VzcyA9PT09XG5cbiIgKworICAgICAgICAgICAgICAgICAgICAiV0FSTklORzogUnVubmluZyBJRExFIHdpdGhvdXQgYSBTdWJwcm9jZXNzIGlzIGRlcHJlY2F0ZWRcbiIgKworICAgICAgICAgICAgICAgICAgICAiYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGxhdGVyIHZlcnNpb24uIFNlZSBIZWxwL0lETEUgSGVscFxuIiArCisgICAgICAgICAgICAgICAgICAgICJmb3IgZGV0YWlscy5cblxuIikKICAgICAgICAgICAgIHN5cy5kaXNwbGF5aG9vayA9IHJwYy5kaXNwbGF5aG9vawogCiAgICAgICAgIHNlbGYud3JpdGUoIlB5dGhvbiAlcyBvbiAlc1xuJXNcbiVzIiAlCiAgICAgICAgICAgICAgICAgICAgKHN5cy52ZXJzaW9uLCBzeXMucGxhdGZvcm0sIHNlbGYuQ09QWVJJR0hULCBub3N1YikpCisgICAgICAgIHNlbGYudGV4dC5mb2N1c19mb3JjZSgpCiAgICAgICAgIHNlbGYuc2hvd3Byb21wdCgpCiAgICAgICAgIGltcG9ydCB0a2ludGVyCiAgICAgICAgIHRraW50ZXIuX2RlZmF1bHRfcm9vdCA9IE5vbmUgIyAwM0phbjA0IEtCSyBXaGF0J3MgdGhpcz8KQEAgLTEyMjMsNyArMTIyOCw3IEBACiAgICAgICAgIHdoaWxlIGkgPiAwIGFuZCBsaW5lW2ktMV0gaW4gIiBcdCI6CiAgICAgICAgICAgICBpID0gaS0xCiAgICAgICAgIGxpbmUgPSBsaW5lWzppXQotICAgICAgICBtb3JlID0gc2VsZi5pbnRlcnAucnVuc291cmNlKGxpbmUpCisgICAgICAgIHNlbGYuaW50ZXJwLnJ1bnNvdXJjZShsaW5lKQogCiAgICAgZGVmIG9wZW5fc3RhY2tfdmlld2VyKHNlbGYsIGV2ZW50PU5vbmUpOgogICAgICAgICBpZiBzZWxmLmludGVycC5ycGNjbHQ6CkBAIC0xMjM0LDEwICsxMjM5LDEwIEBACiAgICAgICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKCJObyBzdGFjayB0cmFjZSIsCiAgICAgICAgICAgICAgICAgIlRoZXJlIGlzIG5vIHN0YWNrIHRyYWNlIHlldC5cbiIKICAgICAgICAgICAgICAgICAiKHN5cy5sYXN0X3RyYWNlYmFjayBpcyBub3QgZGVmaW5lZCkiLAotICAgICAgICAgICAgICAgIG1hc3Rlcj1zZWxmLnRleHQpCisgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYudGV4dCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBmcm9tIGlkbGVsaWIuU3RhY2tWaWV3ZXIgaW1wb3J0IFN0YWNrQnJvd3NlcgotICAgICAgICBzdiA9IFN0YWNrQnJvd3NlcihzZWxmLnJvb3QsIHNlbGYuZmxpc3QpCisgICAgICAgIFN0YWNrQnJvd3NlcihzZWxmLnJvb3QsIHNlbGYuZmxpc3QpCiAKICAgICBkZWYgdmlld19yZXN0YXJ0X21hcmsoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAgICAgICAgIHNlbGYudGV4dC5zZWUoImlvbWFyayIpCkBAIC0xMzk4LDcgKzE0MDMsOCBAQAogICAgICAgIGlkbGUgIFstZG5zXSBbLXQgdGl0bGVdIC0gW2FyZ10qCiAKICAgLWggICAgICAgICBwcmludCB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAotICAtbiAgICAgICAgIHJ1biBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIChzZWUgSGVscC9JRExFIEhlbHAgZm9yIGRldGFpbHMpCisgIC1uICAgICAgICAgcnVuIElETEUgd2l0aG91dCBhIHN1YnByb2Nlc3MgKERFUFJFQ0FURUQsCisgICAgICAgICAgICAgc2VlIEhlbHAvSURMRSBIZWxwIGZvciBkZXRhaWxzKQogCiBUaGUgZm9sbG93aW5nIG9wdGlvbnMgd2lsbCBvdmVycmlkZSB0aGUgSURMRSAnc2V0dGluZ3MnIGNvbmZpZ3VyYXRpb246CiAKQEAgLTE0NTgsOCArMTQ2NCw3IEBACiAgICAgdHJ5OgogICAgICAgICBvcHRzLCBhcmdzID0gZ2V0b3B0LmdldG9wdChzeXMuYXJndlsxOl0sICJjOmRlaWhucjpzdDoiKQogICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgotICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJFcnJvcjogJXNcbiIgJSBzdHIobXNnKSkKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSh1c2FnZV9tc2cpCisgICAgICAgIHByaW50KCJFcnJvcjogJXNcbiVzIiAlIChtc2csIHVzYWdlX21zZyksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgc3lzLmV4aXQoMikKICAgICBmb3IgbywgYSBpbiBvcHRzOgogICAgICAgICBpZiBvID09ICctYyc6CkBAIC0xNDc2LDYgKzE0ODEsOCBAQAogICAgICAgICBpZiBvID09ICctaSc6CiAgICAgICAgICAgICBlbmFibGVfc2hlbGwgPSBUcnVlCiAgICAgICAgIGlmIG8gPT0gJy1uJzoKKyAgICAgICAgICAgIHByaW50KCIgV2FybmluZzogcnVubmluZyBJRExFIHdpdGhvdXQgYSBzdWJwcm9jZXNzIGlzIGRlcHJlY2F0ZWQuIiwKKyAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHVzZV9zdWJwcm9jZXNzID0gRmFsc2UKICAgICAgICAgaWYgbyA9PSAnLXInOgogICAgICAgICAgICAgc2NyaXB0ID0gYQpAQCAtMTU0MSw2ICsxNTQ4LDE0IEBACiAgICAgZmxpc3QgPSBQeVNoZWxsRmlsZUxpc3Qocm9vdCkKICAgICBtYWNvc3hTdXBwb3J0LnNldHVwQXBwKHJvb3QsIGZsaXN0KQogCisgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0FxdWFUaygpOgorICAgICAgICAjIFRoZXJlIGFyZSBzb21lIHNjcmV3ZWQgdXAgPDI+IGNsYXNzIGJpbmRpbmdzIGZvciB0ZXh0CisgICAgICAgICMgd2lkZ2V0cyBkZWZpbmVkIGluIFRrIHdoaWNoIHdlIG5lZWQgdG8gZG8gYXdheSB3aXRoLgorICAgICAgICAjIFNlZSBpc3N1ZSAjMjQ4MDEuCisgICAgICAgIHJvb3QudW5iaW5kX2NsYXNzKCdUZXh0JywgJzxCMj4nKQorICAgICAgICByb290LnVuYmluZF9jbGFzcygnVGV4dCcsICc8QjItTW90aW9uPicpCisgICAgICAgIHJvb3QudW5iaW5kX2NsYXNzKCdUZXh0JywgJzw8UGFzdGVTZWxlY3Rpb24+PicpCisKICAgICBpZiBlbmFibGVfZWRpdDoKICAgICAgICAgaWYgbm90IChjbWQgb3Igc2NyaXB0KToKICAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBhcmdzWzpdOgpAQCAtMTU1NCw3ICsxNTY5LDcgQEAKICAgICAgICAgc2hlbGwgPSBmbGlzdC5vcGVuX3NoZWxsKCkKICAgICAgICAgaWYgbm90IHNoZWxsOgogICAgICAgICAgICAgcmV0dXJuICMgY291bGRuJ3Qgb3BlbiBzaGVsbAotICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpIGFuZCBmbGlzdC5kaWN0OgorICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LmlzQXF1YVRrKCkgYW5kIGZsaXN0LmRpY3Q6CiAgICAgICAgICAgICAjIE9uIE9TWDogd2hlbiB0aGUgdXNlciBoYXMgZG91YmxlLWNsaWNrZWQgb24gYSBmaWxlIHRoYXQgY2F1c2VzCiAgICAgICAgICAgICAjIElETEUgdG8gYmUgbGF1bmNoZWQgdGhlIHNoZWxsIHdpbmRvdyB3aWxsIG9wZW4ganVzdCBpbiBmcm9udCBvZgogICAgICAgICAgICAgIyB0aGUgZmlsZSBzaGUgd2FudHMgdG8gc2VlLiBMb3dlciB0aGUgaW50ZXJwcmV0ZXIgd2luZG93IHdoZW4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1JFQURNRS50eHQgYi9MaWIvaWRsZWxpYi9SRUFETUUudHh0CmluZGV4IGIyYmI3M2IuLjdiZjc0YzAgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1JFQURNRS50eHQKKysrIGIvTGliL2lkbGVsaWIvUkVBRE1FLnR4dApAQCAtMSw2MCArMSwyMjkgQEAKLUlETEUgaXMgUHl0aG9uJ3MgVGtpbnRlci1iYXNlZCBJbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50LgorUkVBRE1FLnR4dDogYW4gaW5kZXggdG8gaWRsZWxpYiBmaWxlcyBhbmQgdGhlIElETEUgbWVudS4KIAotSURMRSBlbXBoYXNpemVzIGEgbGlnaHR3ZWlnaHQsIGNsZWFuIGRlc2lnbiB3aXRoIGEgc2ltcGxlIHVzZXIgaW50ZXJmYWNlLgotQWx0aG91Z2ggaXQgaXMgc3VpdGFibGUgZm9yIGJlZ2lubmVycywgZXZlbiBhZHZhbmNlZCB1c2VycyB3aWxsIGZpbmQgdGhhdAotSURMRSBoYXMgZXZlcnl0aGluZyB0aGV5IHJlYWxseSBuZWVkIHRvIGRldmVsb3AgcHVyZSBQeXRob24gY29kZS4KK0lETEUgaXMgUHl0aG9uJ3MgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBhbmQgTGVhcm5pbmcKK0Vudmlyb25tZW50LiAgVGhlIHVzZXIgZG9jdW1lbnRhdGlvbiBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5IFJlZmVyZW5jZSBhbmQKK2lzIGF2YWlsYWJsZSBpbiBJRExFIGJ5IHNlbGVjdGluZyBIZWxwID0+IElETEUgSGVscC4gIFRoaXMgUkVBRE1FIGRvY3VtZW50cworaWRsZWxpYiBmb3IgSURMRSBkZXZlbG9wZXJzIGFuZCBjdXJpb3VzIHVzZXJzLgogCi1JRExFIGZlYXR1cmVzIGEgbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsCi1hbmQgbWFueSBvdGhlciBjYXBhYmlsaXRpZXMsIGUuZy4gc21hcnQgaW5kZW50LCBjYWxsIHRpcHMsIGFuZCBhdXRvY29tcGxldGlvbi4KK0lETEVMSUIgRklMRVMgbGlzdHMgZmlsZXMgYWxwaGFiZXRpY2FsbHkgYnkgY2F0ZWdvcnksCit3aXRoIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgZWFjaC4KIAotVGhlIGVkaXRvciBoYXMgY29tcHJlaGVuc2l2ZSBzZWFyY2ggZnVuY3Rpb25zLCBpbmNsdWRpbmcgc2VhcmNoaW5nIHRocm91Z2gKLW11bHRpcGxlIGZpbGVzLiAgQ2xhc3MgYnJvd3NlcnMgYW5kIHBhdGggYnJvd3NlcnMgcHJvdmlkZSBmYXN0IGFjY2VzcyB0bwotY29kZSBvYmplY3RzIGZyb20gYSB0b3AgbGV2ZWwgdmlld3BvaW50IHdpdGhvdXQgZGVhbGluZyB3aXRoIGNvZGUgZm9sZGluZy4KK0lETEUgTUVOVSBzaG93IHRoZSBtZW51IHRyZWUsIGFubm90YXRlZCB3aXRoIHRoZSBtb2R1bGUKK29yIG1vZHVsZSBvYmplY3QgdGhhdCBpbXBsZW1lbnRzIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uLgogCi1UaGVyZSBpcyBhIFB5dGhvbiBTaGVsbCB3aW5kb3cgd2hpY2ggZmVhdHVyZXMgY29sb3JpemluZyBhbmQgY29tbWFuZCByZWNhbGwuCi0KLUlETEUgZXhlY3V0ZXMgUHl0aG9uIGNvZGUgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzLCB3aGljaCBpcyByZXN0YXJ0ZWQgZm9yIGVhY2gKLVJ1biAoRjUpIGluaXRpYXRlZCBmcm9tIGFuIGVkaXRvciB3aW5kb3cuICBUaGUgZW52aXJvbm1lbnQgY2FuIGFsc28gYmUgCi1yZXN0YXJ0ZWQgZnJvbSB0aGUgU2hlbGwgd2luZG93IHdpdGhvdXQgcmVzdGFydGluZyBJRExFLgotCi1UaGlzIGVuaGFuY2VtZW50IGhhcyBvZnRlbiBiZWVuIHJlcXVlc3RlZCwgYW5kIGlzIG5vdyBmaW5hbGx5IGF2YWlsYWJsZS4gIFRoZQotbWFnaWMgInJlbG9hZC9pbXBvcnQgKiIgaW5jYW50YXRpb25zIGFyZSBubyBsb25nZXIgcmVxdWlyZWQgd2hlbiBlZGl0aW5nIGFuZAotdGVzdGluZyBhIG1vZHVsZSB0d28gb3IgdGhyZWUgc3RlcHMgZG93biB0aGUgaW1wb3J0IGNoYWluLgotCi0oUGVyc29uYWwgZmlyZXdhbGwgc29mdHdhcmUgbWF5IHdhcm4gYWJvdXQgdGhlIGNvbm5lY3Rpb24gSURMRSBtYWtlcyB0byBpdHMKLXN1YnByb2Nlc3MgdXNpbmcgdGhpcyBjb21wdXRlcidzIGludGVybmFsIGxvb3BiYWNrIGludGVyZmFjZS4gIFRoaXMgY29ubmVjdGlvbgotaXMgbm90IHZpc2libGUgb24gYW55IGV4dGVybmFsIGludGVyZmFjZSBhbmQgbm8gZGF0YSBpcyBzZW50IHRvIG9yIHJlY2VpdmVkCi1mcm9tIHRoZSBJbnRlcm5ldC4pCi0KLUl0IGlzIHBvc3NpYmxlIHRvIGludGVycnVwdCB0aWdodGx5IGxvb3BpbmcgdXNlciBjb2RlLCBldmVuIG9uIFdpbmRvd3MuCi0KLUFwcGxpY2F0aW9ucyB3aGljaCBjYW5ub3Qgc3VwcG9ydCBzdWJwcm9jZXNzZXMgYW5kL29yIHNvY2tldHMgY2FuIHN0aWxsIHJ1bgotSURMRSBpbiBhIHNpbmdsZSBwcm9jZXNzLgotCi1JRExFIGhhcyBhbiBpbnRlZ3JhdGVkIGRlYnVnZ2VyIHdpdGggc3RlcHBpbmcsIHBlcnNpc3RlbnQgYnJlYWtwb2ludHMsIGFuZCBjYWxsCi1zdGFjayB2aXNpYmlsaXR5LgotCi1UaGVyZSBpcyBhIEdVSSBjb25maWd1cmF0aW9uIG1hbmFnZXIgd2hpY2ggbWFrZXMgaXQgZWFzeSB0byBzZWxlY3QgZm9udHMsCi1jb2xvcnMsIGtleWJpbmRpbmdzLCBhbmQgc3RhcnR1cCBvcHRpb25zLiAgVGhpcyBmYWNpbGl0eSBpbmNsdWRlcyBhIGZlYXR1cmUKLXdoaWNoIGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgaGVscCBzb3VyY2VzLCBlaXRoZXIgbG9jYWxseSBvciBvbgotdGhlIHdlYi4KLQotSURMRSBpcyBjb2RlZCBpbiAxMDAlIHB1cmUgUHl0aG9uLCB1c2luZyB0aGUgVGtpbnRlciBHVUkgdG9vbGtpdCAoVGsvVGNsKQotYW5kIGlzIGNyb3NzLXBsYXRmb3JtLCB3b3JraW5nIG9uIFVuaXgsIE1hYywgYW5kIFdpbmRvd3MuCi0KLUlETEUgYWNjZXB0cyBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiAgVHJ5IGlkbGUgLWggdG8gc2VlIHRoZSBvcHRpb25zLgorVGhpcyBmaWxlIGlzIGRlc2NyaXB0aXZlLCBub3QgcHJlc2NyaXB0aXZlLCBhbmQgbWF5IGhhdmUgZXJyb3JzCithbmQgb21pc3Npb25zIGFuZCBsYWcgYmVoaW5kIGNoYW5nZXMgaW4gaWRsZWxpYi4KIAogCi1JZiB5b3UgZmluZCBidWdzIG9yIGhhdmUgc3VnZ2VzdGlvbnMgb3IgcGF0Y2hlcywgbGV0IHVzIGtub3cgYWJvdXQKLXRoZW0gYnkgdXNpbmcgdGhlIFB5dGhvbiBpc3N1ZSB0cmFja2VyOgorSURMRUxJQiBGSUxFUworSW1wbGVtZXRhdGlvbiBmaWxlcyBub3QgaW4gSURMRSBNRU5VIGFyZSBtYXJrZWQgKG5pbSkuCitEZXByZWNhdGVkIGZpbGVzIGFuZCBvYmplY3RzIGFyZSBsaXN0ZWQgc2VwYXJhdGVseSBhcyB0aGUgZW5kLgogCi1odHRwOi8vYnVncy5weXRob24ub3JnCitTdGFydHVwCistLS0tLS0tCitfX2luaXRfXy5weSAgIyBpbXBvcnQsIGRvZXMgbm90aGluZworX19tYWluX18ucHkgICMgLW0sIHN0YXJ0cyBJRExFCitpZGxlLmJhdAoraWRsZS5weQoraWRsZS5weXcKIAotRm9yIGZ1cnRoZXIgZGV0YWlscyBhbmQgbGlua3MsIHJlYWQgdGhlIEhlbHAgZmlsZXMgYW5kIGNoZWNrIHRoZSBJRExFIGhvbWUKLXBhZ2UgYXQKK0ltcGxlbWVudGF0aW9uCistLS0tLS0tLS0tLS0tLQorQXV0b0NvbXBsZXRlLnB5ICAgIyBDb21wbGV0ZSBhdHRyaWJ1dGUgbmFtZXMgb3IgZmlsZW5hbWVzLgorQXV0b0NvbXBsZXRlV2luZG93LnB5ICAjIERpc3BsYXkgY29tcGxldGlvbnMuCitBdXRvRXhwYW5kLnB5ICAgICAjIEV4cGFuZCB3b3JkIHdpdGggcHJldmlvdXMgd29yZCBpbiBmaWxlLgorQmluZGluZ3MucHkgICAgICAgIyBEZWZpbmUgbW9zdCBvZiBJRExFIG1lbnUuCitDYWxsVGlwV2luZG93LnB5ICAjIERpc3BsYXkgY2FsbHRpcC4KK0NhbGxUaXBzLnB5ICAgICAgICMgQ3JlYXRlIGNhbGx0aXAgdGV4dC4KK0NsYXNzQnJvd3Nlci5weSAgICMgQ3JlYXRlIG1vZHVsZSBicm93c2VyIHdpbmRvdy4KK0NvZGVDb250ZXh0LnB5ICAgICMgU2hvdyBjb21wb3VuZCBzdGF0ZW1lbnQgaGVhZGVycyBvdGhlcndpc2Ugbm90IHZpc2libGUuCitDb2xvckRlbGVnYXRvci5weSAjIENvbG9yaXplIHRleHQgKG5pbSkuCitEZWJ1Z2dlci5weSAgICAgICAjIERlYnVnIGNvZGUgcnVuIGZyb20gZWRpdG9yOyBzaG93IHdpbmRvdy4KK0RlbGVnYXRvci5weSAgICAgICMgRGVmaW5lIGJhc2UgY2xhc3MgZm9yIGRlbGVnYXRvcnMgKG5pbSkuCitFZGl0b3JXaW5kb3cucHkgICAjIERlZmluZSBtb3N0IG9mIGVkaXRvciBhbmQgdXRpbGl0eSBmdW5jdGlvbnMuCitGaWxlTGlzdC5weSAgICAgICAjIE9wZW4gZmlsZXMgYW5kIG1hbmFnZSBsaXN0IG9mIG9wZW4gd2luZG93cyAobmltKS4KK0Zvcm1hdFBhcmFncmFwaC5weSMgUmUtd3JhcCBtdWx0aWxpbmUgc3RyaW5ncyBhbmQgY29tbWVudHMuCitHcmVwRGlhbG9nLnB5ICAgICAjIEZpbmQgYWxsIG9jY3VycmVuY2VzIG9mIHBhdHRlcm4gaW4gbXVsdGlwbGUgZmlsZXMuCitIeXBlclBhcnNlci5weSAgICAjIFBhcnNlIGNvZGUgYXJvdW5kIGEgZ2l2ZW4gaW5kZXguCitJT0JpbmRpbmcucHkgICAgICAjIE9wZW4sIHJlYWQsIGFuZCB3cml0ZSBmaWxlcworSWRsZUhpc3RvcnkucHkgICAgIyBHZXQgcHJldmlvdXMgb3IgbmV4dCB1c2VyIGlucHV0IGluIHNoZWxsIChuaW0pCitNdWx0aUNhbGwucHkgICAgICAjIFdyYXAgdGsgd2lkZ2V0IHRvIGFsbG93IG11bHRpcGxlIGNhbGxzIHBlciBldmVudCAobmltKS4KK011bHRpU3RhdHVzQmFyLnB5ICMgRGVmaW5lIHN0YXR1cyBiYXIgZm9yIHdpbmRvd3MgKG5pbSkuCitPYmplY3RCcm93c2VyLnB5ICAjIERlZmluZSBjbGFzcyB1c2VkIGluIFN0YWNrVmlld2VyIChuaW0pLgorT3V0cHV0V2luZG93LnB5ICAgIyBDcmVhdGUgd2luZG93IGZvciBncmVwIG91dHB1dC4KK1BhcmVuTWF0Y2gucHkgICAgICMgTWF0Y2ggZmVuY2Vwb3N0czogKCksIFtdLCBhbmQge30uCitQYXRoQnJvd3Nlci5weSAgICAjIENyZWF0ZSBwYXRoIGJyb3dzZXIgd2luZG93LgorUGVyY29sYXRvci5weSAgICAgIyBNYW5hZ2UgZGVsZWdhdG9yIHN0YWNrIChuaW0pLgorUHlQYXJzZS5weSAgICAgICAgIyBHaXZlIGluZm9ybWF0aW9uIG9uIGNvZGUgaW5kZW50YXRpb24KK1B5U2hlbGwucHkgICAgICAgICMgU3RhcnQgSURMRSwgbWFuYWdlIHNoZWxsLCBjb21wbGV0ZSBlZGl0b3Igd2luZG93CitSZW1vdGVEZWJ1Z2dlci5weSAjIERlYnVnIGNvZGUgcnVuIGluIHJlbW90ZSBwcm9jZXNzLgorUmVtb3RlT2JqZWN0QnJvd3Nlci5weSAjIENvbW11bmljYXRlIG9iamVjdHMgYmV0d2VlbiBwcm9jZXNzZXMgd2l0aCBycGMgKG5pbSkuCitSZXBsYWNlRGlhbG9nLnB5ICAjIFNlYXJjaCBhbmQgcmVwbGFjZSBwYXR0ZXJuIGluIHRleHQuCitSc3RyaXBFeHRlbnNpb24ucHkjIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UKK1NjcmlwdEJpbmRpbmcucHkgICMgQ2hlY2sgYW5kIHJ1biB1c2VyIGNvZGUuCitTY3JvbGxlZExpc3QucHkgICAjIERlZmluZSBTY3JvbGxlZExpc3Qgd2lkZ2V0IGZvciBJRExFIChuaW0pLgorU2VhcmNoRGlhbG9nLnB5ICAgIyBTZWFyY2ggZm9yIHBhdHRlcm4gaW4gdGV4dC4KK1NlYXJjaERpYWxvZ0Jhc2UucHkgICMgRGVmaW5lIGJhc2UgZm9yIHNlYXJjaCwgcmVwbGFjZSwgYW5kIGdyZXAgZGlhbG9ncy4KK1NlYXJjaEVuZ2luZS5weSAgICMgRGVmaW5lIGVuZ2luZSBmb3IgYWxsIDMgc2VhcmNoIGRpYWxvZ3MuCitTdGFja1ZpZXdlci5weSAgICAjIFZpZXcgc3RhY2sgYWZ0ZXIgZXhjZXB0aW9uLgorVHJlZVdpZGdldC5weSAgICAgIyBEZWZpbmUgdHJlZSB3aWRnZXIsIHVzZWQgaW4gYnJvd3NlcnMgKG5pbSkuCitVbmRvRGVsZWdhdG9yLnB5ICAjIE1hbmFnZSB1bmRvIHN0YWNrLgorV2lkZ2V0UmVkaXJlY3Rvci5weSAjIEludGVyY2VwdCB3aWRnZXQgc3ViY29tbWFuZHMgKGZvciBwZXJjb2xhdG9yKSAobmltKS4KK1dpbmRvd0xpc3QucHkgICAgICMgTWFuYWdlIHdpbmRvdyBsaXN0IGFuZCBkZWZpbmUgbGlzdGVkIHRvcCBsZXZlbC4KK1pvb21IZWlnaHQucHkgICAgICMgWm9vbSB3aW5kb3cgdG8gZnVsbCBoZWlnaHQgb2Ygc2NyZWVuLgorYWJvdXREaWFsb2cucHkgICAgIyBEaXNwbGF5IEFib3V0IElETEUgZGlhbG9nLgorY29uZmlnRGlhbG9nLnB5ICAgIyBEaXNwbGF5IHVzZXIgY29uZmlndXJhdGlvbiBkaWFsb2dzLgorY29uZmlnSGFuZGxlci5weSAgIyBMb2FkLCBmZXRjaCwgYW5kIHNhdmUgY29uZmlndXJhdGlvbiAobmltKS4KK2NvbmZpZ0hlbHBTb3VyY2VFZGl0LnB5ICAjIFNwZWNpZnkgaGVscCBzb3VyY2UuCitjb25maWdTZWN0aW9uTmFtZURpYWxvZy5weSAgIyBTcGVmaWZ5IHVzZXIgY29uZmlnIHNlY3Rpb24gbmFtZQorZHluT3B0aW9uTWVudVdpZGdldC5weSAgIyBkZWZpbmUgbXV0YWJsZSBPcHRpb25NZW51IHdpZGdldCAobmltKS4KK2hlbHAucHkgICAgICAgICAgICMgRGlzcGxheSBJRExFJ3MgaHRtbCBkb2MuCitrZXliaW5kaW5nRGlhbG9nLnB5ICAjIENoYW5nZSBrZXliaW5kaW5ncy4KK21hY29zeFN1cHBvcnQucHkgICMgSGVscCBJRExFIHJ1biBvbiBNYWNzIChuaW0pLgorcnBjLnB5ICAgICAgICAgICAgIyBDb21tdWljYXRlIGJldHdlZW4gaWRsZSBhbmQgdXNlciBwcm9jZXNzZXMgKG5pbSkuCitydW4ucHkgICAgICAgICAgICAjIE1hbmFnZSB1c2VyIGNvZGUgZXhlY3V0aW9uIHN1YnByb2Nlc3MuCit0YWJiZWRwYWdlcy5weSAgICAjIERlZmluZSB0YWJiZWQgcGFnZXMgd2lkZ2V0IChuaW0pLgordGV4dFZpZXcucHkgICAgICAgIyBEZWZpbmUgcmVhZC1vbmx5IHRleHQgd2lkZ2V0IChuaW0pLgogCi1odHRwOi8vd3d3LnB5dGhvbi5vcmcvaWRsZS8KK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KK2NvbmZpZy1leHRlbnNpb25zLmRlZiAjIERlZmF1bHRzIGZvciBleHRlbnNpb25zCitjb25maWctaGlnaGxpZ2h0LmRlZiAgIyBEZWZhdWx0cyBmb3IgY29sb3JpemluZworY29uZmlnLWtleXMuZGVmICAgICAgICMgRGVmYXVsdHMgZm9yIGtleSBiaW5kaW5ncworY29uZmlnLW1haW4uZGVmICAgICAgICMgRGVmYWk7dHMgZnByIGZvbnQgYW5kIGdlbmVhbAogCi1UaGVyZSBpcyBhIG1haWwgbGlzdCBmb3IgSURMRTogaWRsZS1kZXZAcHl0aG9uLm9yZy4gIFlvdSBjYW4gam9pbiBhdAorVGV4dAorLS0tLQorQ1JFRElUUy50eHQgICMgbm90IG1haW50YWluZWQsIGRpc3BsYXllZCBieSBBYm91dCBJRExFCitISVNUT1JZLnR4dCAgIyBORVdTIHVwIHRvIEp1bHkgMjAwMQorTkVXUy50eHQgICAgICMgY29tbWl0cywgZGlzcGxheWVkIGJ5IEFib3V0IElETEUKK1JFQURNRS50eHQgICAjIHRoaXMgZmlsZSwgZGlzcGxleWVkIGJ5IEFib3V0IElETEUKK1RPRE8udHh0ICAgICAjIG5lZWRzIHJldmlldworZXh0ZW5kLnR4dCAgICMgYWJvdXQgd3JpdGluZyBleHRlbnNpb25zCitoZWxwLmh0bWwgICAgIyBjb3B5IG9mIGlkbGUuaHRtbCBpbiBkb2NzLCBkaXNwbGF5ZWQgYnkgSURMRSBIZWxwCiAKLWh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvbWFpbG1hbi9saXN0aW5mby9pZGxlLWRldgorU3ViZGlyZWN0b3JpZXMKKy0tLS0tLS0tLS0tLS0tCitJY29ucyAgIyBzbWFsbCBpbWFnZSBmaWxlcworaWRsZV90ZXN0ICAjIGZpbGVzIGZvciBodW1hbiB0ZXN0IGFuZCBhdXRvbWF0ZWQgdW5pdCB0ZXN0cworCitVbnVzZWQgYW5kIERlcHJlY2F0ZWQgZmlsZXMgYW5kIG9iamVjdHMgKG5pbSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRWRpdG9yV2luZG93LnB5OiBIZWxwZGlhbG9nIGFuZCBoZWxwRGlhbG9nCitUb29sVGlwLnB5OiB1bnVzZWQuCitoZWxwLnR4dAoraWRsZXZlci5weQorCisKK0lETEUgTUVOVVMKK1RvcCBsZXZlbCBpdGVtcyBhbmQgbW9zdCBzdWJtZW51IGl0ZW1zIGFyZSBkZWZpbmVkIGluIEJpbmRpbmdzLgorRXh0ZW5zdGlvbnMgYWRkIHN1Ym1lbnUgaXRlbXMgd2hlbiBhY3RpdmUuICBUaGUgbmFtZXMgZ2l2ZW4gYXJlCitmb3VuZCwgcXVvdGVkLCBpbiBvbmUgb2YgdGhlc2UgbW9kdWxlcywgcGFpcmVkIHdpdGggYSAnPDxwc2V1ZG9ldmVudD4+Jy4KK0VhY2ggcHNldWRvZXZlbnQgaXMgYm91bmQgdG8gYW4gZXZlbnQgaGFuZGxlci4gIFNvbWUgZXZlbnQgaGFuZGxlcnMKK2NhbGwgYW5vdGhlciBmdW5jdGlvbiB0aGF0IGRvZXMgdGhlIGFjdHVhbCB3b3JrLiAgVGhlIGFubm90YXRpb25zIGJlbG93CithcmUgaW50ZW5kZWQgdG8gYXQgbGVhc3QgZ2l2ZSB0aGUgbW9kdWxlIHdoZXJlIHRoZSBhY3R1YWwgd29yayBpcyBkb25lLgorCitGaWxlICAjIElPQmluZGlnIGV4Y2VwdCBhcyBub3RlZAorICBOZXcgRmlsZQorICBPcGVuLi4uICAjIElPQmluZGluZy5vcGVuCisgIE9wZW4gTW9kdWxlCisgIFJlY2VudCBGaWxlcworICBDbGFzcyBCcm93c2VyICAjIENsYXNzIEJyb3dzZXIKKyAgUGF0aCBCcm93c2VyICAjIFBhdGggQnJvd3NlcgorICAtLS0KKyAgU2F2ZSAgIyBJREJpbmRpbmcuc2F2ZQorICBTYXZlIEFzLi4uICAjIElPQmluZGluZy5zYXZlX2FzCisgIFNhdmUgQ29weSBBcy4uLiAgIyBJT0JpbmRsaW5nLnNhdmVfYV9jb3B5CisgIC0tLQorICBQcmludCBXaW5kb3cgICMgSU9CaW5kaW5nLnByaW50X3dpbmRvdworICAtLS0KKyAgQ2xvc2UKKyAgRXhpdAorCitFZGl0CisgIFVuZG8gICMgdW5kb0RlbGVnYXRvcgorICBSZWRvICAjIHVuZG9EZWxlZ2F0b3IKKyAgLS0tCisgIEN1dAorICBDb3B5CisgIFBhc3RlCisgIFNlbGVjdCBBbGwKKyAgLS0tICAjIE5leHQgNSBpdGVtcyB1c2UgU2VhcmNoRW5naW5lOyBkaWFsb2dzIHVzZSBTZWFyY2hEaWFsb2dCYXNlCisgIEZpbmQgICMgU2VhcmNoIERpYWxvZworICBGaW5kIEFnYWluCisgIEZpbmQgU2VsZWN0aW9uCisgIEZpbmQgaW4gRmlsZXMuLi4gICMgR3JlcERpYWxvZworICBSZXBsYWNlLi4uICAjIFJlcGxhY2VEaWFsb2cKKyAgR28gdG8gTGluZQorICBTaG93IENvbXBsZXRpb25zICAjIEF1dG9Db21wbGV0ZSBleHRlbnNpb24gYW5kIEF1dG9Db21wbGV0ZVdpZG93ICgmSFApCisgIEV4cGFuZCBXb3JkICAjIEF1dG9FeHBhbmQgZXh0ZW5zaW9uCisgIFNob3cgY2FsbCB0aXAgICMgQ2FsbHRpcHMgZXh0ZW5zaW9uIGFuZCBDYWxsdGlwV2luZG93ICgmIEh5cGVycGFyc2VyKQorICBTaG93IHN1cnJvdW5kaW5nIHBhcmVucyAgIyBQYXJlbk1hdGNoICgmIEh5cGVycGFyc2VyKQorCitTaGVsbCAgIyBQeVNoZWxsCisgIFZpZXcgTGFzdCBSZXN0YXJ0ICAjIFB5U2hlbGwuPworICBSZXN0YXJ0IFNoZWxsICAjIFB5U2hlbGwuPworCitEZWJ1ZyAoU2hlbGwgb25seSkKKyAgR28gdG8gRmlsZS9MaW5lCisgIERlYnVnZ2VyICAjIERlYnVnZ2VyLCBSZW1vdGVEZWJ1Z2dlcgorICBTdGFjayBWaWV3ZXIgICMgU3RhY2tWaWV3ZXIKKyAgQXV0by1vcGVuIFN0YWNrIFZpZXdlciAgIyBTdGFja1ZpZXdlcgorCitGb3JtYXQgKEVkaXRvciBvbmx5KQorICBJbmRlbnQgUmVnaW9uCisgIERlZGVudCBSZWdpb24KKyAgQ29tbWVudCBPdXQgUmVnaW9uCisgIFVuY29tbWVudCBSZWdpb24KKyAgVGFiaWZ5IFJlZ2lvbgorICBVbnRhYmlmeSBSZWdpb24KKyAgVG9nZ2xlIFRhYnMKKyAgTmV3IEluZGVudCBXaWR0aAorICBGb3JtYXQgUGFyYWdyYXBoICAjIEZvcm1hdFBhcmFncmFwaCBleHRlbnNpb24KKyAgLS0tCisgIFN0cmlwIHRhaWxpbmcgd2hpdGVzcGFjZSAgIyBSc3RyaXBFeHRlbnNpb24gZXh0ZW5zaW9uCisKK1J1biAoRWRpdG9yIG9ubHkpCisgIFB5dGhvbiBTaGVsbCAgIyBQeVNoZWxsCisgIC0tLQorICBDaGVjayBNb2R1bGUgICMgU2NyaXB0QmluZGluZworICBSdW4gTW9kdWxlICAjIFNjcmlwdEJpbmRpbmcKKworT3B0aW9ucworICBDb25maWd1cmUgSURMRSAgIyBjb25maWdEaWFsb2cKKyAgICAodGFicyBpbiB0aGUgZGlhbG9nKQorICAgIEZvbnQgdGFiICAjIG9uZmlnLW1haW4uZGVmCisgICAgSGlnaGxpZ2h0IHRhYiAgIyBjb25maWdTZWN0aW9uTmFtZURpYWxvZywgY29uZmlnLWhpZ2hsaWdodC5kZWYKKyAgICBLZXlzIHRhYiAgIyBrZXliaW5kaW5nRGlhbG9nLCBjb25maWdTZWN0aW9uTmFtZURpYWxvZywgb25maWcta2V1cy5kZWYKKyAgICBHZW5lcmFsIHRhYiAgIyBjb25maWdIZWxwU291cmNlRWRpdCwgY29uZmlnLW1haW4uZGVmCisgIENvbmZpZ3VyZSBFeHRlbnNpb25zICAjIGNvbmZpZ0RpYWxvZworICAgIFh5eiB0YWIgICMgeHl6LnB5LCBjb25maWctZXh0ZW5zaW9ucy5kZWYKKyAgLS0tCisgIENvZGUgQ29udGV4dCAoZWRpdG9yIG9ubHkpICAjIENvZGVDb250ZXh0IGV4dGVuc2lvbgorCitXaW5kb3cKKyAgWm9vbWhlaWdodCAgIyBab29tSGVpZ2h0IGV4dGVuc2lvbgorICAtLS0KKyAgPG9wZW4gd2luZG93cz4gICMgV2luZG93TGlzdAorCitIZWxwCisgIEFib3V0IElETEUgICMgYWJvdXREaWFsb2cKKyAgLS0tCisgIElETEUgSGVscCAgIyBoZWxwCisgIFB5dGhvbiBEb2MKKyAgVHVydGxlIERlbW8KKyAgLS0tCisgIDxvdGhlciBoZWxwIHNvdXJjZXM+CisKKzxDb250ZXh0IE1lbnU+IChyaWdodCBjbGljaykKK0RlZmluZWQgaW4gRWRpdG9yV2luZG93LCBQeVNoZWxsLCBPdXRwdXQKKyAgIEN1dAorICAgQ29weQorICAgUGFzdGUKKyAgIC0tLQorICAgR28gdG8gZmlsZS9saW5lIChzaGVsbCBhbmQgb3V0cHV0IG9ubHkpCisgICBTZXQgQnJlYWtwb2ludCAoZWRpdG9yIG9ubHkpCisgICBDbGVhciBCcmVha3BvaW50IChlZGl0b3Igb25seSkKKyBEZWZpbmVkIGluIERlYnVnZ2VyCisgICBHbyB0byBzb3VyY2UgbGluZQorICAgU2hvdyBzdGFjayBmcmFtZQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvUmVtb3RlRGVidWdnZXIucHkgYi9MaWIvaWRsZWxpYi9SZW1vdGVEZWJ1Z2dlci5weQppbmRleCBkODY2MmJiLi5iZTIyNjJmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9SZW1vdGVEZWJ1Z2dlci5weQorKysgYi9MaWIvaWRsZWxpYi9SZW1vdGVEZWJ1Z2dlci5weQpAQCAtMjEsNyArMjEsNiBAQAogIiIiCiAKIGltcG9ydCB0eXBlcwotZnJvbSBpZGxlbGliIGltcG9ydCBycGMKIGZyb20gaWRsZWxpYiBpbXBvcnQgRGVidWdnZXIKIAogZGVidWdnaW5nID0gMApAQCAtOTksNyArOTgsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdGIgPSB0cmFjZWJhY2t0YWJsZVt0YmlkXQogICAgICAgICBzdGFjaywgaSA9IHNlbGYuaWRiLmdldF9zdGFjayhmcmFtZSwgdGIpCi0gICAgICAgIHN0YWNrID0gWyh3cmFwX2ZyYW1lKGZyYW1lKSwgaykgZm9yIGZyYW1lLCBrIGluIHN0YWNrXQorICAgICAgICBzdGFjayA9IFsod3JhcF9mcmFtZShmcmFtZTIpLCBrKSBmb3IgZnJhbWUyLCBrIGluIHN0YWNrXQogICAgICAgICByZXR1cm4gc3RhY2ssIGkKIAogICAgIGRlZiBydW4oc2VsZiwgY21kKToKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1JlcGxhY2VEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9SZXBsYWNlRGlhbG9nLnB5CmluZGV4IGU3M2YyYzUuLjI2NjVhMWMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1JlcGxhY2VEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvUmVwbGFjZURpYWxvZy5weQpAQCAtNDAsNyArNDAsNyBAQAogCiAgICAgZGVmIGNyZWF0ZV9lbnRyaWVzKHNlbGYpOgogICAgICAgICBTZWFyY2hEaWFsb2dCYXNlLmNyZWF0ZV9lbnRyaWVzKHNlbGYpCi0gICAgICAgIHNlbGYucmVwbGVudCA9IHNlbGYubWFrZV9lbnRyeSgiUmVwbGFjZSB3aXRoOiIsIHNlbGYucmVwbHZhcikKKyAgICAgICAgc2VsZi5yZXBsZW50ID0gc2VsZi5tYWtlX2VudHJ5KCJSZXBsYWNlIHdpdGg6Iiwgc2VsZi5yZXBsdmFyKVswXQogCiAgICAgZGVmIGNyZWF0ZV9jb21tYW5kX2J1dHRvbnMoc2VsZik6CiAgICAgICAgIFNlYXJjaERpYWxvZ0Jhc2UuY3JlYXRlX2NvbW1hbmRfYnV0dG9ucyhzZWxmKQpAQCAtNTksNyArNTksNyBAQAogICAgIGRlZiBkZWZhdWx0X2NvbW1hbmQoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAgICAgICAgIGlmIHNlbGYuZG9fZmluZChzZWxmLm9rKToKICAgICAgICAgICAgIGlmIHNlbGYuZG9fcmVwbGFjZSgpOiAgICMgT25seSBmaW5kIG5leHQgbWF0Y2ggaWYgcmVwbGFjZSBzdWNjZWVkZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEEgYmFkIHJlIGNhbiBjYXVzZSBhIGl0IHRvIGZhaWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEEgYmFkIHJlIGNhbiBjYXVzZSBpdCB0byBmYWlsLgogICAgICAgICAgICAgICAgIHNlbGYuZG9fZmluZCgwKQogCiAgICAgZGVmIF9yZXBsYWNlX2V4cGFuZChzZWxmLCBtLCByZXBsKToKQEAgLTE4OCwzICsxODgsMzQgQEAKICAgICBkZWYgY2xvc2Uoc2VsZiwgZXZlbnQ9Tm9uZSk6CiAgICAgICAgIFNlYXJjaERpYWxvZ0Jhc2UuY2xvc2Uoc2VsZiwgZXZlbnQpCiAgICAgICAgIHNlbGYudGV4dC50YWdfcmVtb3ZlKCJoaXQiLCAiMS4wIiwgImVuZCIpCisKK2RlZiBfcmVwbGFjZV9kaWFsb2cocGFyZW50KToKKyAgICByb290ID0gVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgUmVwbGFjZURpYWxvZyIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorCisgICAgIyBtb2NrIHVuZG8gZGVsZWdhdG9yIG1ldGhvZHMKKyAgICBkZWYgdW5kb19ibG9ja19zdGFydCgpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdW5kb19ibG9ja19zdG9wKCk6CisgICAgICAgIHBhc3MKKworICAgIHRleHQgPSBUZXh0KHJvb3QpCisgICAgdGV4dC51bmRvX2Jsb2NrX3N0YXJ0ID0gdW5kb19ibG9ja19zdGFydAorICAgIHRleHQudW5kb19ibG9ja19zdG9wID0gdW5kb19ibG9ja19zdG9wCisgICAgdGV4dC5wYWNrKCkKKyAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0IiwiVGhpcyBpcyBhIHNhbXBsZSBzdHJpbmcuXG4iKjEwKQorCisgICAgZGVmIHNob3dfcmVwbGFjZSgpOgorICAgICAgICB0ZXh0LnRhZ19hZGQoU0VMLCAiMS4wIiwgRU5EKQorICAgICAgICByZXBsYWNlKHRleHQpCisgICAgICAgIHRleHQudGFnX3JlbW92ZShTRUwsICIxLjAiLCBFTkQpCisKKyAgICBidXR0b24gPSBCdXR0b24ocm9vdCwgdGV4dD0iUmVwbGFjZSIsIGNvbW1hbmQ9c2hvd19yZXBsYWNlKQorICAgIGJ1dHRvbi5wYWNrKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3JlcGxhY2VfZGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvU2NyaXB0QmluZGluZy5weSBiL0xpYi9pZGxlbGliL1NjcmlwdEJpbmRpbmcucHkKaW5kZXggNmJmZTEyOC4uNWNiODE4ZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvU2NyaXB0QmluZGluZy5weQorKysgYi9MaWIvaWRsZWxpYi9TY3JpcHRCaW5kaW5nLnB5CkBAIC0xOCwxMyArMTgsMTAgQEAKICIiIgogCiBpbXBvcnQgb3MKLWltcG9ydCByZQotaW1wb3J0IHN0cmluZwogaW1wb3J0IHRhYm5hbm55CiBpbXBvcnQgdG9rZW5pemUKIGltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3ggYXMgdGtNZXNzYWdlQm94Ci1mcm9tIGlkbGVsaWIuRWRpdG9yV2luZG93IGltcG9ydCBFZGl0b3JXaW5kb3cKLWZyb20gaWRsZWxpYiBpbXBvcnQgUHlTaGVsbCwgSU9CaW5kaW5nCitmcm9tIGlkbGVsaWIgaW1wb3J0IFB5U2hlbGwKIAogZnJvbSBpZGxlbGliLmNvbmZpZ0hhbmRsZXIgaW1wb3J0IGlkbGVDb25mCiBmcm9tIGlkbGVsaWIgaW1wb3J0IG1hY29zeFN1cHBvcnQKQEAgLTM5LDYgKzM2LDcgQEAKIGJ5IEZvcm1hdC0+VW50YWJpZnkgUmVnaW9uIGFuZCBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY29sdW1ucyB1c2VkIGJ5IGVhY2ggdGFiLgogIiIiCiAKKwogY2xhc3MgU2NyaXB0QmluZGluZzoKIAogICAgIG1lbnVkZWZzID0gWwpAQCAtNTMsNyArNTEsNyBAQAogICAgICAgICBzZWxmLmZsaXN0ID0gc2VsZi5lZGl0d2luLmZsaXN0CiAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuZWRpdHdpbi5yb290CiAKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0NvY29hVGsoKToKICAgICAgICAgICAgIHNlbGYuZWRpdHdpbi50ZXh0X2ZyYW1lLmJpbmQoJzw8cnVuLW1vZHVsZS1ldmVudC0yPj4nLCBzZWxmLl9ydW5fbW9kdWxlX2V2ZW50KQogCiAgICAgZGVmIGNoZWNrX21vZHVsZV9ldmVudChzZWxmLCBldmVudCk6CkBAIC03MSw3ICs2OSw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFibmFubnkucHJvY2Vzc190b2tlbnModG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5zKGYucmVhZGxpbmUpKQogICAgICAgICAgICAgZXhjZXB0IHRva2VuaXplLlRva2VuRXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIG1zZ3R4dCwgKGxpbmVubywgc3RhcnQpID0gbXNnCisgICAgICAgICAgICAgICAgbXNndHh0LCAobGluZW5vLCBzdGFydCkgPSBtc2cuYXJncwogICAgICAgICAgICAgICAgIHNlbGYuZWRpdHdpbi5nb3RvbGluZShsaW5lbm8pCiAgICAgICAgICAgICAgICAgc2VsZi5lcnJvcmJveCgiVGFibmFubnkgVG9rZW5pemluZyBFcnJvciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVG9rZW4gRXJyb3I6ICVzIiAlIG1zZ3R4dCkKQEAgLTExNCw3ICsxMTIsNyBAQAogICAgICAgICAgICAgc2hlbGwuc2V0X3dhcm5pbmdfc3RyZWFtKHNhdmVkX3N0cmVhbSkKIAogICAgIGRlZiBydW5fbW9kdWxlX2V2ZW50KHNlbGYsIGV2ZW50KToKLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5pc0NvY29hVGsoKToKICAgICAgICAgICAgICMgVGstQ29jb2EgaW4gTWFjT1NYIGlzIGJyb2tlbiB1bnRpbCBhdCBsZWFzdAogICAgICAgICAgICAgIyBUayA4LjUuOSwgYW5kIHdpdGhvdXQgdGhpcyByYXRoZXIKICAgICAgICAgICAgICMgY3J1ZGUgd29ya2Fyb3VuZCBJRExFIHdvdWxkIGhhbmcgd2hlbiBhIHVzZXIKQEAgLTE0NSw3ICsxNDMsOCBAQAogICAgICAgICAgICAgcmV0dXJuICdicmVhaycKICAgICAgICAgaW50ZXJwID0gc2VsZi5zaGVsbC5pbnRlcnAKICAgICAgICAgaWYgUHlTaGVsbC51c2Vfc3VicHJvY2VzczoKLSAgICAgICAgICAgIGludGVycC5yZXN0YXJ0X3N1YnByb2Nlc3Mod2l0aF9jd2Q9RmFsc2UpCisgICAgICAgICAgICBpbnRlcnAucmVzdGFydF9zdWJwcm9jZXNzKHdpdGhfY3dkPUZhbHNlLCBmaWxlbmFtZT0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZWRpdHdpbi5fZmlsZW5hbWVfdG9fdW5pY29kZShmaWxlbmFtZSkpCiAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpCiAgICAgICAgICMgWFhYIFRvbyBvZnRlbiB0aGlzIGRpc2NhcmRzIGFyZ3VtZW50cyB0aGUgdXNlciBqdXN0IHNldC4uLgogICAgICAgICBpbnRlcnAucnVuY29tbWFuZCgiIiJpZiAxOgpAQCAtMTk4LDEwICsxOTcsMTAgQEAKICAgICAgICAgY29uZmlybSA9IHRrTWVzc2FnZUJveC5hc2tva2NhbmNlbCh0aXRsZT0iU2F2ZSBCZWZvcmUgUnVuIG9yIENoZWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPW1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PXRrTWVzc2FnZUJveC5PSywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXN0ZXI9c2VsZi5lZGl0d2luLnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYuZWRpdHdpbi50ZXh0KQogICAgICAgICByZXR1cm4gY29uZmlybQogCiAgICAgZGVmIGVycm9yYm94KHNlbGYsIHRpdGxlLCBtZXNzYWdlKToKICAgICAgICAgIyBYWFggVGhpcyBzaG91bGQgcmVhbGx5IGJlIGEgZnVuY3Rpb24gb2YgRWRpdG9yV2luZG93Li4uCi0gICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IodGl0bGUsIG1lc3NhZ2UsIG1hc3Rlcj1zZWxmLmVkaXR3aW4udGV4dCkKKyAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcih0aXRsZSwgbWVzc2FnZSwgcGFyZW50PXNlbGYuZWRpdHdpbi50ZXh0KQogICAgICAgICBzZWxmLmVkaXR3aW4udGV4dC5mb2N1c19zZXQoKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvU2Nyb2xsZWRMaXN0LnB5IGIvTGliL2lkbGVsaWIvU2Nyb2xsZWRMaXN0LnB5CmluZGV4IDAyNTVhMGEuLjUzNTc2YjUgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1Njcm9sbGVkTGlzdC5weQorKysgYi9MaWIvaWRsZWxpYi9TY3JvbGxlZExpc3QucHkKQEAgLTEsNCArMSw1IEBACiBmcm9tIHRraW50ZXIgaW1wb3J0ICoKK2Zyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAogCiBjbGFzcyBTY3JvbGxlZExpc3Q6CiAKQEAgLTIyLDcgKzIzLDExIEBACiAgICAgICAgICMgQmluZCBldmVudHMgdG8gdGhlIGxpc3QgYm94CiAgICAgICAgIGxpc3Rib3guYmluZCgiPEJ1dHRvblJlbGVhc2UtMT4iLCBzZWxmLmNsaWNrX2V2ZW50KQogICAgICAgICBsaXN0Ym94LmJpbmQoIjxEb3VibGUtQnV0dG9uUmVsZWFzZS0xPiIsIHNlbGYuZG91YmxlX2NsaWNrX2V2ZW50KQotICAgICAgICBsaXN0Ym94LmJpbmQoIjxCdXR0b25QcmVzcy0zPiIsIHNlbGYucG9wdXBfZXZlbnQpCisgICAgICAgIGlmIG1hY29zeFN1cHBvcnQuaXNBcXVhVGsoKToKKyAgICAgICAgICAgIGxpc3Rib3guYmluZCgiPEJ1dHRvblByZXNzLTI+Iiwgc2VsZi5wb3B1cF9ldmVudCkKKyAgICAgICAgICAgIGxpc3Rib3guYmluZCgiPENvbnRyb2wtQnV0dG9uLTE+Iiwgc2VsZi5wb3B1cF9ldmVudCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpc3Rib3guYmluZCgiPEJ1dHRvblByZXNzLTM+Iiwgc2VsZi5wb3B1cF9ldmVudCkKICAgICAgICAgbGlzdGJveC5iaW5kKCI8S2V5LVVwPiIsIHNlbGYudXBfZXZlbnQpCiAgICAgICAgIGxpc3Rib3guYmluZCgiPEtleS1Eb3duPiIsIHNlbGYuZG93bl9ldmVudCkKICAgICAgICAgIyBNYXJrIGFzIGVtcHR5CkBAIC0xMTksMjEgKzEyNCwyMiBAQAogICAgICAgICBwYXNzCiAKIAotZGVmIHRlc3QoKToKK2RlZiBfc2Nyb2xsZWRfbGlzdChwYXJlbnQpOgogICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC5wcm90b2NvbCgiV01fREVMRVRFX1dJTkRPVyIsIHJvb3QuZGVzdHJveSkKKyAgICByb290LnRpdGxlKCJUZXN0IFNjcm9sbGVkTGlzdCIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQogICAgIGNsYXNzIE15U2Nyb2xsZWRMaXN0KFNjcm9sbGVkTGlzdCk6Ci0gICAgICAgIGRlZiBmaWxsX21lbnUoc2VsZik6IHNlbGYubWVudS5hZGRfY29tbWFuZChsYWJlbD0icGFzcyIpCisgICAgICAgIGRlZiBmaWxsX21lbnUoc2VsZik6IHNlbGYubWVudS5hZGRfY29tbWFuZChsYWJlbD0icmlnaHQgY2xpY2siKQogICAgICAgICBkZWYgb25fc2VsZWN0KHNlbGYsIGluZGV4KTogcHJpbnQoInNlbGVjdCIsIHNlbGYuZ2V0KGluZGV4KSkKICAgICAgICAgZGVmIG9uX2RvdWJsZShzZWxmLCBpbmRleCk6IHByaW50KCJkb3VibGUiLCBzZWxmLmdldChpbmRleCkpCi0gICAgcyA9IE15U2Nyb2xsZWRMaXN0KHJvb3QpCi0gICAgZm9yIGkgaW4gcmFuZ2UoMzApOgotICAgICAgICBzLmFwcGVuZCgiaXRlbSAlMDJkIiAlIGkpCi0gICAgcmV0dXJuIHJvb3QKIAotZGVmIG1haW4oKToKLSAgICByb290ID0gdGVzdCgpCisgICAgc2Nyb2xsZWRfbGlzdCA9IE15U2Nyb2xsZWRMaXN0KHJvb3QpCisgICAgZm9yIGkgaW4gcmFuZ2UoMzApOgorICAgICAgICBzY3JvbGxlZF9saXN0LmFwcGVuZCgiSXRlbSAlMDJkIiAlIGkpCisKICAgICByb290Lm1haW5sb29wKCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3Njcm9sbGVkX2xpc3QpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2cucHkKaW5kZXggYmY3NmM0MS4uNzdlZjdiOSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvU2VhcmNoRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL1NlYXJjaERpYWxvZy5weQpAQCAtMjMsNyArMjMsNyBAQAogY2xhc3MgU2VhcmNoRGlhbG9nKFNlYXJjaERpYWxvZ0Jhc2UpOgogCiAgICAgZGVmIGNyZWF0ZV93aWRnZXRzKHNlbGYpOgotICAgICAgICBmID0gU2VhcmNoRGlhbG9nQmFzZS5jcmVhdGVfd2lkZ2V0cyhzZWxmKQorICAgICAgICBTZWFyY2hEaWFsb2dCYXNlLmNyZWF0ZV93aWRnZXRzKHNlbGYpCiAgICAgICAgIHNlbGYubWFrZV9idXR0b24oIkZpbmQgTmV4dCIsIHNlbGYuZGVmYXVsdF9jb21tYW5kLCAxKQogCiAgICAgZGVmIGRlZmF1bHRfY29tbWFuZChzZWxmLCBldmVudD1Ob25lKToKQEAgLTY1LDMgKzY1LDI1IEBACiAgICAgICAgIGlmIHBhdDoKICAgICAgICAgICAgIHNlbGYuZW5naW5lLnNldGNvb2tlZHBhdChwYXQpCiAgICAgICAgIHJldHVybiBzZWxmLmZpbmRfYWdhaW4odGV4dCkKKworZGVmIF9zZWFyY2hfZGlhbG9nKHBhcmVudCk6CisgICAgcm9vdCA9IFRrKCkKKyAgICByb290LnRpdGxlKCJUZXN0IFNlYXJjaERpYWxvZyIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorICAgIHRleHQgPSBUZXh0KHJvb3QpCisgICAgdGV4dC5wYWNrKCkKKyAgICB0ZXh0Lmluc2VydCgiaW5zZXJ0IiwiVGhpcyBpcyBhIHNhbXBsZSBzdHJpbmcuXG4iKjEwKQorCisgICAgZGVmIHNob3dfZmluZCgpOgorICAgICAgICB0ZXh0LnRhZ19hZGQoU0VMLCAiMS4wIiwgRU5EKQorICAgICAgICBzID0gX3NldHVwKHRleHQpCisgICAgICAgIHMub3Blbih0ZXh0KQorICAgICAgICB0ZXh0LnRhZ19yZW1vdmUoU0VMLCAiMS4wIiwgRU5EKQorCisgICAgYnV0dG9uID0gQnV0dG9uKHJvb3QsIHRleHQ9IlNlYXJjaCIsIGNvbW1hbmQ9c2hvd19maW5kKQorICAgIGJ1dHRvbi5wYWNrKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3NlYXJjaF9kaWFsb2cpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2dCYXNlLnB5IGIvTGliL2lkbGVsaWIvU2VhcmNoRGlhbG9nQmFzZS5weQppbmRleCBiOGI0OWIyLi41ZmE4NGUyIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9TZWFyY2hEaWFsb2dCYXNlLnB5CisrKyBiL0xpYi9pZGxlbGliL1NlYXJjaERpYWxvZ0Jhc2UucHkKQEAgLTEsMzQgKzEsNTEgQEAKICcnJ0RlZmluZSBTZWFyY2hEaWFsb2dCYXNlIHVzZWQgYnkgU2VhcmNoLCBSZXBsYWNlLCBhbmQgR3JlcCBkaWFsb2dzLicnJwotZnJvbSB0a2ludGVyIGltcG9ydCAqCisKK2Zyb20gdGtpbnRlciBpbXBvcnQgKFRvcGxldmVsLCBGcmFtZSwgRW50cnksIExhYmVsLCBCdXR0b24sCisgICAgICAgICAgICAgICAgICAgICBDaGVja2J1dHRvbiwgUmFkaW9idXR0b24pCiAKIGNsYXNzIFNlYXJjaERpYWxvZ0Jhc2U6Ci0gICAgJycnQ3JlYXRlIG1vc3Qgb2YgYSBtb2RhbCBzZWFyY2ggZGlhbG9nIChtYWtlX2ZyYW1lLCBjcmVhdGVfd2lkZ2V0cykuCisgICAgJycnQ3JlYXRlIG1vc3Qgb2YgYSAzIG9yIDQgcm93LCAzIGNvbHVtbiBzZWFyY2ggZGlhbG9nLgogCi0gICAgVGhlIHdpZGUgbGVmdCBjb2x1bW4gY29udGFpbnM6Ci0gICAgMSBvciAyIHRleHQgZW50cnkgbGluZXMgKGNyZWF0ZV9lbnRyaWVzLCBtYWtlX2VudHJ5KTsKLSAgICBhIHJvdyBvZiBzdGFuZGFyZCByYWRpb2J1dHRvbnMgKGNyZWF0ZV9vcHRpb25fYnV0dG9ucyk7Ci0gICAgYSByb3cgb2YgZGlhbG9nIHNwZWNpZmljIHJhZGlvYnV0dG9ucyAoY3JlYXRlX290aGVyX2J1dHRvbnMpLgorICAgIFRoZSBsZWZ0IGFuZCB3aWRlIG1pZGRsZSBjb2x1bW4gY29udGFpbjoKKyAgICAxIG9yIDIgbGFiZWxlZCB0ZXh0IGVudHJ5IGxpbmVzIChtYWtlX2VudHJ5LCBjcmVhdGVfZW50cmllcyk7CisgICAgYSByb3cgb2Ygc3RhbmRhcmQgQ2hlY2tidXR0b25zIChtYWtlX2ZyYW1lLCBjcmVhdGVfb3B0aW9uX2J1dHRvbnMpLAorICAgIGVhY2ggb2Ygd2hpY2ggY29ycmVzcG9uZHMgdG8gYSBzZWFyY2ggZW5naW5lIFZhcmlhYmxlOworICAgIGEgcm93IG9mIGRpYWxvZy1zcGVjaWZpYyBDaGVjay9SYWRpb2J1dHRvbnMgKGNyZWF0ZV9vdGhlcl9idXR0b25zKS4KIAogICAgIFRoZSBuYXJyb3cgcmlnaHQgY29sdW1uIGNvbnRhaW5zIGNvbW1hbmQgYnV0dG9ucwotICAgIChjcmVhdGVfY29tbWFuZF9idXR0b25zLCBtYWtlX2J1dHRvbikuCisgICAgKG1ha2VfYnV0dG9uLCBjcmVhdGVfY29tbWFuZF9idXR0b25zKS4KICAgICBUaGVzZSBhcmUgYm91bmQgdG8gZnVuY3Rpb25zIHRoYXQgZXhlY3V0ZSB0aGUgY29tbWFuZC4KIAotICAgIEV4Y2VwdCBmb3IgY29tbWFuZCBidXR0b25zLCB0aGlzIGJhc2UgY2xhc3MgaXMgbm90IGxpbWl0ZWQgdG8KLSAgICBpdGVtcyBjb21tb24gdG8gYWxsIHRocmVlIHN1YmNsYXNzZXMuICBSYXRoZXIsIGl0IGlzIHRoZSBGaW5kIGRpYWxvZwotICAgIG1pbnVzIHRoZSAiRmluZCBOZXh0IiBjb21tYW5kIGFuZCBpdHMgZXhlY3V0aW9uIGZ1bmN0aW9uLgotICAgIFRoZSBvdGhlciBkaWFsb2dzIG92ZXJyaWRlIG1ldGhvZHMgdG8gcmVwbGFjZSBhbmQgYWRkIHdpZGdldHMuCisgICAgRXhjZXB0IGZvciBjb21tYW5kIGJ1dHRvbnMsIHRoaXMgYmFzZSBjbGFzcyBpcyBub3QgbGltaXRlZCB0byBpdGVtcworICAgIGNvbW1vbiB0byBhbGwgdGhyZWUgc3ViY2xhc3Nlcy4gIFJhdGhlciwgaXQgaXMgdGhlIEZpbmQgZGlhbG9nIG1pbnVzCisgICAgdGhlICJGaW5kIE5leHQiIGNvbW1hbmQsIGl0cyBleGVjdXRpb24gZnVuY3Rpb24sIGFuZCB0aGUKKyAgICBkZWZhdWx0X2NvbW1hbmQgYXR0cmlidXRlIG5lZWRlZCBpbiBjcmVhdGVfd2lkZ2V0cy4gVGhlIG90aGVyCisgICAgZGlhbG9ncyBvdmVycmlkZSBhdHRyaWJ1dGVzIGFuZCBtZXRob2RzLCB0aGUgbGF0dGVyIHRvIHJlcGxhY2UgYW5kCisgICAgYWRkIHdpZGdldHMuCiAgICAgJycnCiAKLSAgICB0aXRsZSA9ICJTZWFyY2ggRGlhbG9nIgorICAgIHRpdGxlID0gIlNlYXJjaCBEaWFsb2ciICAjIHJlcGxhY2UgaW4gc3ViY2xhc3NlcwogICAgIGljb24gPSAiU2VhcmNoIgotICAgIG5lZWR3cmFwYnV0dG9uID0gMQorICAgIG5lZWR3cmFwYnV0dG9uID0gMSAgIyBub3QgaW4gRmluZCBpbiBGaWxlcwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3QsIGVuZ2luZSk6CisgICAgICAgICcnJ0luaXRpYWxpemUgcm9vdCwgZW5naW5lLCBhbmQgdG9wIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgdG9wIChsZXZlbCB3aWRnZXQpOiBzZXQgaW4gY3JlYXRlX3dpZGdldHMoKSBjYWxsZWQgZnJvbSBvcGVuKCkuCisgICAgICAgIHRleHQgKFRleHQgc2VhcmNoZWQpOiBzZXQgaW4gb3BlbigpLCBvbmx5IHVzZWQgaW4gc3ViY2xhc3NlcygpLgorICAgICAgICBlbnQgKHJ5KTogY3JlYXRlZCBpbiBtYWtlX2VudHJ5KCkgY2FsbGVkIGZyb20gY3JlYXRlX2VudHJ5KCkuCisgICAgICAgIHJvdyAob2YgZ3JpZCk6IDAgaW4gY3JlYXRlX3dpZGdldHMoKSwgKzEgaW4gbWFrZV9lbnRyeS9mcmFtZSgpLgorICAgICAgICBkZWZhdWx0X2NvbW1hbmQ6IHNldCBpbiBzdWJjbGFzc2VzLCB1c2VkIGluIGNyZWF0ZV93aWRnZXJzKCkuCisKKyAgICAgICAgdGl0bGUgKG9mIGRpYWxvZyk6IGNsYXNzIGF0dHJpYnV0ZSwgb3ZlcnJpZGUgaW4gc3ViY2xhc3Nlcy4KKyAgICAgICAgaWNvbiAob2YgZGlhbG9nKTogZGl0dG8sIHVzZSB1bmNsZWFyIGlmIGNhbm5vdCBtaW5pbWl6ZSBkaWFsb2cuCisgICAgICAgICcnJwogICAgICAgICBzZWxmLnJvb3QgPSByb290CiAgICAgICAgIHNlbGYuZW5naW5lID0gZW5naW5lCiAgICAgICAgIHNlbGYudG9wID0gTm9uZQogCiAgICAgZGVmIG9wZW4oc2VsZiwgdGV4dCwgc2VhcmNocGhyYXNlPU5vbmUpOgorICAgICAgICAiTWFrZSBkaWFsb2cgdmlzaWJsZSBvbiB0b3Agb2Ygb3RoZXJzIGFuZCByZWFkeSB0byB1c2UuIgogICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CiAgICAgICAgIGlmIG5vdCBzZWxmLnRvcDoKICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3dpZGdldHMoKQpAQCAtNDQsMTEgKzYxLDE3IEBACiAgICAgICAgIHNlbGYudG9wLmdyYWJfc2V0KCkKIAogICAgIGRlZiBjbG9zZShzZWxmLCBldmVudD1Ob25lKToKKyAgICAgICAgIlB1dCBkaWFsb2cgYXdheSBmb3IgbGF0ZXIgdXNlLiIKICAgICAgICAgaWYgc2VsZi50b3A6CiAgICAgICAgICAgICBzZWxmLnRvcC5ncmFiX3JlbGVhc2UoKQogICAgICAgICAgICAgc2VsZi50b3Aud2l0aGRyYXcoKQogCiAgICAgZGVmIGNyZWF0ZV93aWRnZXRzKHNlbGYpOgorICAgICAgICAnJydDcmVhdGUgYmFzaWMgMyByb3cgeCAzIGNvbCBzZWFyY2ggKGZpbmQpIGRpYWxvZy4KKworICAgICAgICBPdGhlciBkaWFsb2dzIG92ZXJyaWRlIHN1YnNpZGlhcnkgY3JlYXRlX3ggbWV0aG9kcyBhcyBuZWVkZWQuCisgICAgICAgIFJlcGxhY2UgYW5kIEZpbmQtaW4tRmlsZXMgYWRkIGFub3RoZXIgZW50cnkgcm93LgorICAgICAgICAnJycKICAgICAgICAgdG9wID0gVG9wbGV2ZWwoc2VsZi5yb290KQogICAgICAgICB0b3AuYmluZCgiPFJldHVybj4iLCBzZWxmLmRlZmF1bHRfY29tbWFuZCkKICAgICAgICAgdG9wLmJpbmQoIjxFc2NhcGU+Iiwgc2VsZi5jbG9zZSkKQEAgLTYxLDI5ICs4NCw4NCBAQAogICAgICAgICBzZWxmLnRvcC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCBwYWQ9Miwgd2VpZ2h0PTApCiAgICAgICAgIHNlbGYudG9wLmdyaWRfY29sdW1uY29uZmlndXJlKDEsIHBhZD0yLCBtaW5zaXplPTEwMCwgd2VpZ2h0PTEwMCkKIAotICAgICAgICBzZWxmLmNyZWF0ZV9lbnRyaWVzKCkKLSAgICAgICAgc2VsZi5jcmVhdGVfb3B0aW9uX2J1dHRvbnMoKQotICAgICAgICBzZWxmLmNyZWF0ZV9vdGhlcl9idXR0b25zKCkKLSAgICAgICAgcmV0dXJuIHNlbGYuY3JlYXRlX2NvbW1hbmRfYnV0dG9ucygpCisgICAgICAgIHNlbGYuY3JlYXRlX2VudHJpZXMoKSAgIyByb3cgMCAoYW5kIG1heWJlIDEpLCBjb2xzIDAsIDEKKyAgICAgICAgc2VsZi5jcmVhdGVfb3B0aW9uX2J1dHRvbnMoKSAgIyBuZXh0IHJvdywgY29scyAwLCAxCisgICAgICAgIHNlbGYuY3JlYXRlX290aGVyX2J1dHRvbnMoKSAgIyBuZXh0IHJvdywgY29scyAwLCAxCisgICAgICAgIHNlbGYuY3JlYXRlX2NvbW1hbmRfYnV0dG9ucygpICAjIGNvbCAyLCBhbGwgcm93cwogCi0gICAgZGVmIG1ha2VfZW50cnkoc2VsZiwgbGFiZWwsIHZhcik6Ci0gICAgICAgIGwgPSBMYWJlbChzZWxmLnRvcCwgdGV4dD1sYWJlbCkKLSAgICAgICAgbC5ncmlkKHJvdz1zZWxmLnJvdywgY29sdW1uPTAsIHN0aWNreT0ibnciKQotICAgICAgICBlID0gRW50cnkoc2VsZi50b3AsIHRleHR2YXJpYWJsZT12YXIsIGV4cG9ydHNlbGVjdGlvbj0wKQotICAgICAgICBlLmdyaWQocm93PXNlbGYucm93LCBjb2x1bW49MSwgc3RpY2t5PSJud2UiKQorICAgIGRlZiBtYWtlX2VudHJ5KHNlbGYsIGxhYmVsX3RleHQsIHZhcik6CisgICAgICAgICcnJ1JldHVybiAoZW50cnksIGxhYmVsKSwgLgorCisgICAgICAgIGVudHJ5IC0gZ3JpZGRlZCBsYWJlbGVkIEVudHJ5IGZvciB0ZXh0IGVudHJ5LgorICAgICAgICBsYWJlbCAtIExhYmVsIHdpZGdldCwgcmV0dXJuZWQgZm9yIHRlc3RpbmcuCisgICAgICAgICcnJworICAgICAgICBsYWJlbCA9IExhYmVsKHNlbGYudG9wLCB0ZXh0PWxhYmVsX3RleHQpCisgICAgICAgIGxhYmVsLmdyaWQocm93PXNlbGYucm93LCBjb2x1bW49MCwgc3RpY2t5PSJudyIpCisgICAgICAgIGVudHJ5ID0gRW50cnkoc2VsZi50b3AsIHRleHR2YXJpYWJsZT12YXIsIGV4cG9ydHNlbGVjdGlvbj0wKQorICAgICAgICBlbnRyeS5ncmlkKHJvdz1zZWxmLnJvdywgY29sdW1uPTEsIHN0aWNreT0ibndlIikKICAgICAgICAgc2VsZi5yb3cgPSBzZWxmLnJvdyArIDEKLSAgICAgICAgcmV0dXJuIGUKKyAgICAgICAgcmV0dXJuIGVudHJ5LCBsYWJlbAorCisgICAgZGVmIGNyZWF0ZV9lbnRyaWVzKHNlbGYpOgorICAgICAgICAiQ3JlYXRlIG9uZSBvciBtb3JlIGVudHJ5IGxpbmVzIHdpdGggbWFrZV9lbnRyeS4iCisgICAgICAgIHNlbGYuZW50ID0gc2VsZi5tYWtlX2VudHJ5KCJGaW5kOiIsIHNlbGYuZW5naW5lLnBhdHZhcilbMF0KIAogICAgIGRlZiBtYWtlX2ZyYW1lKHNlbGYsbGFiZWx0ZXh0PU5vbmUpOgorICAgICAgICAnJydSZXR1cm4gKGZyYW1lLCBsYWJlbCkuCisKKyAgICAgICAgZnJhbWUgLSBncmlkZGVkIGxhYmVsZWQgRnJhbWUgZm9yIG9wdGlvbiBvciBvdGhlciBidXR0b25zLgorICAgICAgICBsYWJlbCAtIExhYmVsIHdpZGdldCwgcmV0dXJuZWQgZm9yIHRlc3RpbmcuCisgICAgICAgICcnJwogICAgICAgICBpZiBsYWJlbHRleHQ6Ci0gICAgICAgICAgICBsID0gTGFiZWwoc2VsZi50b3AsIHRleHQ9bGFiZWx0ZXh0KQotICAgICAgICAgICAgbC5ncmlkKHJvdz1zZWxmLnJvdywgY29sdW1uPTAsIHN0aWNreT0ibnciKQotICAgICAgICBmID0gRnJhbWUoc2VsZi50b3ApCi0gICAgICAgIGYuZ3JpZChyb3c9c2VsZi5yb3csIGNvbHVtbj0xLCBjb2x1bW5zcGFuPTEsIHN0aWNreT0ibndlIikKKyAgICAgICAgICAgIGxhYmVsID0gTGFiZWwoc2VsZi50b3AsIHRleHQ9bGFiZWx0ZXh0KQorICAgICAgICAgICAgbGFiZWwuZ3JpZChyb3c9c2VsZi5yb3csIGNvbHVtbj0wLCBzdGlja3k9Im53IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxhYmVsID0gJycKKyAgICAgICAgZnJhbWUgPSBGcmFtZShzZWxmLnRvcCkKKyAgICAgICAgZnJhbWUuZ3JpZChyb3c9c2VsZi5yb3csIGNvbHVtbj0xLCBjb2x1bW5zcGFuPTEsIHN0aWNreT0ibndlIikKICAgICAgICAgc2VsZi5yb3cgPSBzZWxmLnJvdyArIDEKLSAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgcmV0dXJuIGZyYW1lLCBsYWJlbAorCisgICAgZGVmIGNyZWF0ZV9vcHRpb25fYnV0dG9ucyhzZWxmKToKKyAgICAgICAgJycnUmV0dXJuIChmaWxsZWQgZnJhbWUsIG9wdGlvbnMpIGZvciB0ZXN0aW5nLgorCisgICAgICAgIE9wdGlvbnMgaXMgYSBsaXN0IG9mIFNlYXJjaEVuZ2luZSBib29sZWFudmFyLCBsYWJlbCBwYWlycy4KKyAgICAgICAgQSBncmlkZGVkIGZyYW1lIGZyb20gbWFrZV9mcmFtZSBpcyBmaWxsZWQgd2l0aCBhIENoZWNrYnV0dG9uCisgICAgICAgIGZvciBlYWNoIHBhaXIsIGJvdW5kIHRvIHRoZSB2YXIsIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgbGFiZWwuCisgICAgICAgICcnJworICAgICAgICBmcmFtZSA9IHNlbGYubWFrZV9mcmFtZSgiT3B0aW9ucyIpWzBdCisgICAgICAgIGVuZ2luZSA9IHNlbGYuZW5naW5lCisgICAgICAgIG9wdGlvbnMgPSBbKGVuZ2luZS5yZXZhciwgIlJlZ3VsYXIgZXhwcmVzc2lvbiIpLAorICAgICAgICAgICAgICAgICAgIChlbmdpbmUuY2FzZXZhciwgIk1hdGNoIGNhc2UiKSwKKyAgICAgICAgICAgICAgICAgICAoZW5naW5lLndvcmR2YXIsICJXaG9sZSB3b3JkIildCisgICAgICAgIGlmIHNlbGYubmVlZHdyYXBidXR0b246CisgICAgICAgICAgICBvcHRpb25zLmFwcGVuZCgoZW5naW5lLndyYXB2YXIsICJXcmFwIGFyb3VuZCIpKQorICAgICAgICBmb3IgdmFyLCBsYWJlbCBpbiBvcHRpb25zOgorICAgICAgICAgICAgYnRuID0gQ2hlY2tidXR0b24oZnJhbWUsIGFuY2hvcj0idyIsIHZhcmlhYmxlPXZhciwgdGV4dD1sYWJlbCkKKyAgICAgICAgICAgIGJ0bi5wYWNrKHNpZGU9ImxlZnQiLCBmaWxsPSJib3RoIikKKyAgICAgICAgICAgIGlmIHZhci5nZXQoKToKKyAgICAgICAgICAgICAgICBidG4uc2VsZWN0KCkKKyAgICAgICAgcmV0dXJuIGZyYW1lLCBvcHRpb25zCisKKyAgICBkZWYgY3JlYXRlX290aGVyX2J1dHRvbnMoc2VsZik6CisgICAgICAgICcnJ1JldHVybiAoZnJhbWUsIG90aGVycykgZm9yIHRlc3RpbmcuCisKKyAgICAgICAgT3RoZXJzIGlzIGEgbGlzdCBvZiB2YWx1ZSwgbGFiZWwgcGFpcnMuCisgICAgICAgIEEgZ3JpZGRlZCBmcmFtZSBmcm9tIG1ha2VfZnJhbWUgaXMgZmlsbGVkIHdpdGggcmFkaW8gYnV0dG9ucy4KKyAgICAgICAgJycnCisgICAgICAgIGZyYW1lID0gc2VsZi5tYWtlX2ZyYW1lKCJEaXJlY3Rpb24iKVswXQorICAgICAgICB2YXIgPSBzZWxmLmVuZ2luZS5iYWNrdmFyCisgICAgICAgIG90aGVycyA9IFsoMSwgJ1VwJyksICgwLCAnRG93bicpXQorICAgICAgICBmb3IgdmFsLCBsYWJlbCBpbiBvdGhlcnM6CisgICAgICAgICAgICBidG4gPSBSYWRpb2J1dHRvbihmcmFtZSwgYW5jaG9yPSJ3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXZhciwgdmFsdWU9dmFsLCB0ZXh0PWxhYmVsKQorICAgICAgICAgICAgYnRuLnBhY2soc2lkZT0ibGVmdCIsIGZpbGw9ImJvdGgiKQorICAgICAgICAgICAgaWYgdmFyLmdldCgpID09IHZhbDoKKyAgICAgICAgICAgICAgICBidG4uc2VsZWN0KCkKKyAgICAgICAgcmV0dXJuIGZyYW1lLCBvdGhlcnMKIAogICAgIGRlZiBtYWtlX2J1dHRvbihzZWxmLCBsYWJlbCwgY29tbWFuZCwgaXNkZWY9MCk6CisgICAgICAgICJSZXR1cm4gY29tbWFuZCBidXR0b24gZ3JpZGRlZCBpbiBjb21tYW5kIGZyYW1lLiIKICAgICAgICAgYiA9IEJ1dHRvbihzZWxmLmJ1dHRvbmZyYW1lLAogICAgICAgICAgICAgICAgICAgIHRleHQ9bGFiZWwsIGNvbW1hbmQ9Y29tbWFuZCwKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWlzZGVmIGFuZCAiYWN0aXZlIiBvciAibm9ybWFsIikKQEAgLTkyLDY2ICsxNzAsMTUgQEAKICAgICAgICAgc2VsZi5idXR0b25mcmFtZS5ncmlkKHJvd3NwYW49cm93cysxKQogICAgICAgICByZXR1cm4gYgogCi0gICAgZGVmIGNyZWF0ZV9lbnRyaWVzKHNlbGYpOgotICAgICAgICBzZWxmLmVudCA9IHNlbGYubWFrZV9lbnRyeSgiRmluZDoiLCBzZWxmLmVuZ2luZS5wYXR2YXIpCi0KLSAgICBkZWYgY3JlYXRlX29wdGlvbl9idXR0b25zKHNlbGYpOgotICAgICAgICBmID0gc2VsZi5tYWtlX2ZyYW1lKCJPcHRpb25zIikKLQotICAgICAgICBidG4gPSBDaGVja2J1dHRvbihmLCBhbmNob3I9InciLAotICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYuZW5naW5lLnJldmFyLAotICAgICAgICAgICAgICAgIHRleHQ9IlJlZ3VsYXIgZXhwcmVzc2lvbiIpCi0gICAgICAgIGJ0bi5wYWNrKHNpZGU9ImxlZnQiLCBmaWxsPSJib3RoIikKLSAgICAgICAgaWYgc2VsZi5lbmdpbmUuaXNyZSgpOgotICAgICAgICAgICAgYnRuLnNlbGVjdCgpCi0KLSAgICAgICAgYnRuID0gQ2hlY2tidXR0b24oZiwgYW5jaG9yPSJ3IiwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmVuZ2luZS5jYXNldmFyLAotICAgICAgICAgICAgICAgIHRleHQ9Ik1hdGNoIGNhc2UiKQotICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgIGlmIHNlbGYuZW5naW5lLmlzY2FzZSgpOgotICAgICAgICAgICAgYnRuLnNlbGVjdCgpCi0KLSAgICAgICAgYnRuID0gQ2hlY2tidXR0b24oZiwgYW5jaG9yPSJ3IiwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmVuZ2luZS53b3JkdmFyLAotICAgICAgICAgICAgICAgIHRleHQ9Ildob2xlIHdvcmQiKQotICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgIGlmIHNlbGYuZW5naW5lLmlzd29yZCgpOgotICAgICAgICAgICAgYnRuLnNlbGVjdCgpCi0KLSAgICAgICAgaWYgc2VsZi5uZWVkd3JhcGJ1dHRvbjoKLSAgICAgICAgICAgIGJ0biA9IENoZWNrYnV0dG9uKGYsIGFuY2hvcj0idyIsCi0gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYuZW5naW5lLndyYXB2YXIsCi0gICAgICAgICAgICAgICAgICAgIHRleHQ9IldyYXAgYXJvdW5kIikKLSAgICAgICAgICAgIGJ0bi5wYWNrKHNpZGU9ImxlZnQiLCBmaWxsPSJib3RoIikKLSAgICAgICAgICAgIGlmIHNlbGYuZW5naW5lLmlzd3JhcCgpOgotICAgICAgICAgICAgICAgIGJ0bi5zZWxlY3QoKQotCi0gICAgZGVmIGNyZWF0ZV9vdGhlcl9idXR0b25zKHNlbGYpOgotICAgICAgICBmID0gc2VsZi5tYWtlX2ZyYW1lKCJEaXJlY3Rpb24iKQotCi0gICAgICAgICNsYmwgPSBMYWJlbChmLCB0ZXh0PSJEaXJlY3Rpb246ICIpCi0gICAgICAgICNsYmwucGFjayhzaWRlPSJsZWZ0IikKLQotICAgICAgICBidG4gPSBSYWRpb2J1dHRvbihmLCBhbmNob3I9InciLAotICAgICAgICAgICAgICAgIHZhcmlhYmxlPXNlbGYuZW5naW5lLmJhY2t2YXIsIHZhbHVlPTEsCi0gICAgICAgICAgICAgICAgdGV4dD0iVXAiKQotICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgIGlmIHNlbGYuZW5naW5lLmlzYmFjaygpOgotICAgICAgICAgICAgYnRuLnNlbGVjdCgpCi0KLSAgICAgICAgYnRuID0gUmFkaW9idXR0b24oZiwgYW5jaG9yPSJ3IiwKLSAgICAgICAgICAgICAgICB2YXJpYWJsZT1zZWxmLmVuZ2luZS5iYWNrdmFyLCB2YWx1ZT0wLAotICAgICAgICAgICAgICAgIHRleHQ9IkRvd24iKQotICAgICAgICBidG4ucGFjayhzaWRlPSJsZWZ0IiwgZmlsbD0iYm90aCIpCi0gICAgICAgIGlmIG5vdCBzZWxmLmVuZ2luZS5pc2JhY2soKToKLSAgICAgICAgICAgIGJ0bi5zZWxlY3QoKQotCiAgICAgZGVmIGNyZWF0ZV9jb21tYW5kX2J1dHRvbnMoc2VsZik6Ci0gICAgICAgICMKLSAgICAgICAgIyBwbGFjZSBidXR0b24gZnJhbWUgb24gdGhlIHJpZ2h0CisgICAgICAgICJQbGFjZSBidXR0b25zIGluIHZlcnRpY2FsIGNvbW1hbmQgZnJhbWUgZ3JpZGRlZCBvbiByaWdodC4iCiAgICAgICAgIGYgPSBzZWxmLmJ1dHRvbmZyYW1lID0gRnJhbWUoc2VsZi50b3ApCiAgICAgICAgIGYuZ3JpZChyb3c9MCxjb2x1bW49MixwYWR4PTIscGFkeT0yLGlwYWR4PTIsaXBhZHk9MikKIAogICAgICAgICBiID0gc2VsZi5tYWtlX2J1dHRvbigiY2xvc2UiLCBzZWxmLmNsb3NlKQogICAgICAgICBiLmxvd2VyKCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICB1bml0dGVzdC5tYWluKAorICAgICAgICAnaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9zZWFyY2hkaWFsb2diYXNlJywgdmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TZWFyY2hFbmdpbmUucHkgYi9MaWIvaWRsZWxpYi9TZWFyY2hFbmdpbmUucHkKaW5kZXggOWQzYzRjYi4uMzc4ODNiZiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvU2VhcmNoRW5naW5lLnB5CisrKyBiL0xpYi9pZGxlbGliL1NlYXJjaEVuZ2luZS5weQpAQCAtODUsNyArODUsNyBAQAogICAgICAgICBleGNlcHQgcmUuZXJyb3IgYXMgd2hhdDoKICAgICAgICAgICAgIGFyZ3MgPSB3aGF0LmFyZ3MKICAgICAgICAgICAgIG1zZyA9IGFyZ3NbMF0KLSAgICAgICAgICAgIGNvbCA9IGFyZ1sxXSBpZiBsZW4oYXJncykgPj0gMiBlbHNlIC0xCisgICAgICAgICAgICBjb2wgPSBhcmdzWzFdIGlmIGxlbihhcmdzKSA+PSAyIGVsc2UgLTEKICAgICAgICAgICAgIHNlbGYucmVwb3J0X2Vycm9yKHBhdCwgbXNnLCBjb2wpCiAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICByZXR1cm4gcHJvZwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgICAgIEl0IGRpcmVjdGx5IHJldHVybiB0aGUgcmVzdWx0IG9mIHRoYXQgY2FsbC4KIAogICAgICAgICBUZXh0IGlzIGEgdGV4dCB3aWRnZXQuIFByb2cgaXMgYSBwcmVjb21waWxlZCBwYXR0ZXJuLgotICAgICAgICBUaGUgb2sgcGFyYW1ldGVyaXMgYSBiaXQgY29tcGxpY2F0ZWQgYXMgaXQgaGFzIHR3byBlZmZlY3RzLgorICAgICAgICBUaGUgb2sgcGFyYW1ldGVyIGlzIGEgYml0IGNvbXBsaWNhdGVkIGFzIGl0IGhhcyB0d28gZWZmZWN0cy4KIAogICAgICAgICBJZiB0aGVyZSBpcyBhIHNlbGVjdGlvbiwgdGhlIHNlYXJjaCBiZWdpbiBhdCBlaXRoZXIgZW5kLAogICAgICAgICBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBzZXR0aW5nIGFuZCBvaywgd2l0aCBvayBtZWFuaW5nIHRoYXQKQEAgLTE5MSw3ICsxOTEsNyBAQAogCiAgICAgVGhpcyBpcyBkb25lIGJ5IHNlYXJjaGluZyBmb3J3YXJkcyB1bnRpbCB0aGVyZSBpcyBubyBtYXRjaC4KICAgICBQcm9nOiBjb21waWxlZCByZSBvYmplY3Qgd2l0aCBhIHNlYXJjaCBtZXRob2QgcmV0dXJuaW5nIGEgbWF0Y2guCi0gICAgQ2hhcnM6IGxpbmUgb2YgdGV4dCwgd2l0aG91dCBcbi4KKyAgICBDaGFyczogbGluZSBvZiB0ZXh0LCB3aXRob3V0IFxcbi4KICAgICBDb2w6IHN0b3AgaW5kZXggZm9yIHRoZSBzZWFyY2g7IHRoZSBsaW1pdCBmb3IgbWF0Y2guZW5kKCkuCiAgICAgJycnCiAgICAgbSA9IHByb2cuc2VhcmNoKGNoYXJzKQpAQCAtMjI5LDYgKzIyOSw1IEBACiAgICAgcmV0dXJuIGxpbmUsIGNvbAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydDsgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWydndWknXQogICAgIGltcG9ydCB1bml0dGVzdAogICAgIHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0LnRlc3Rfc2VhcmNoZW5naW5lJywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9TdGFja1ZpZXdlci5weSBiL0xpYi9pZGxlbGliL1N0YWNrVmlld2VyLnB5CmluZGV4IDRlZjJkMzEuLmNjYzc1NWMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1N0YWNrVmlld2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL1N0YWNrVmlld2VyLnB5CkBAIC0xLDE0ICsxLDE2IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBsaW5lY2FjaGUKK2ltcG9ydCByZQoraW1wb3J0IHRraW50ZXIgYXMgdGsKIAogZnJvbSBpZGxlbGliLlRyZWVXaWRnZXQgaW1wb3J0IFRyZWVOb2RlLCBUcmVlSXRlbSwgU2Nyb2xsZWRDYW52YXMKIGZyb20gaWRsZWxpYi5PYmplY3RCcm93c2VyIGltcG9ydCBPYmplY3RUcmVlSXRlbSwgbWFrZV9vYmplY3R0cmVlaXRlbQorZnJvbSBpZGxlbGliLlB5U2hlbGwgaW1wb3J0IFB5U2hlbGxGaWxlTGlzdAogCiBkZWYgU3RhY2tCcm93c2VyKHJvb3QsIGZsaXN0PU5vbmUsIHRiPU5vbmUsIHRvcD1Ob25lKToKICAgICBpZiB0b3AgaXMgTm9uZToKLSAgICAgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbAotICAgICAgICB0b3AgPSBUb3BsZXZlbChyb290KQorICAgICAgICB0b3AgPSB0ay5Ub3BsZXZlbChyb290KQogICAgIHNjID0gU2Nyb2xsZWRDYW52YXModG9wLCBiZz0id2hpdGUiLCBoaWdobGlnaHR0aGlja25lc3M9MCkKICAgICBzYy5mcmFtZS5wYWNrKGV4cGFuZD0xLCBmaWxsPSJib3RoIikKICAgICBpdGVtID0gU3RhY2tUcmVlSXRlbShmbGlzdCwgdGIpCkBAIC0xMDUsMTIgKzEwNyw5IEBACiAgICAgZGVmIElzRXhwYW5kYWJsZShzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLm9iamVjdCkgPiAwCiAKLSAgICBkZWYga2V5cyhzZWxmKToKLSAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5vYmplY3Qua2V5cygpKQotCiAgICAgZGVmIEdldFN1Ykxpc3Qoc2VsZik6CiAgICAgICAgIHN1Ymxpc3QgPSBbXQotICAgICAgICBmb3Iga2V5IGluIHNlbGYua2V5cygpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYub2JqZWN0LmtleXMoKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYub2JqZWN0W2tleV0KICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTEyMCwzICsxMTksMzMgQEAKICAgICAgICAgICAgIGl0ZW0gPSBtYWtlX29iamVjdHRyZWVpdGVtKGtleSArICIgPSIsIHZhbHVlLCBzZXRmdW5jdGlvbikKICAgICAgICAgICAgIHN1Ymxpc3QuYXBwZW5kKGl0ZW0pCiAgICAgICAgIHJldHVybiBzdWJsaXN0CisKKyAgICBkZWYga2V5cyhzZWxmKTogICMgdW51c2VkLCBsZWZ0IGZvciBwb3NzaWJsZSAzcmQgcGFydHkgdXNlCisgICAgICAgIHJldHVybiBsaXN0KHNlbGYub2JqZWN0LmtleXMoKSkKKworZGVmIF9zdGFja192aWV3ZXIocGFyZW50KToKKyAgICByb290ID0gdGsuVGsoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgU3RhY2tWaWV3ZXIiKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKKyAgICBmbGlzdCA9IFB5U2hlbGxGaWxlTGlzdChyb290KQorICAgIHRyeTogIyB0byBvYnRhaW4gYSB0cmFjZWJhY2sgb2JqZWN0CisgICAgICAgIGludGVudGlvbmFsX25hbWVfZXJyb3IKKyAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICBleGNfdHlwZSwgZXhjX3ZhbHVlLCBleGNfdGIgPSBzeXMuZXhjX2luZm8oKQorCisgICAgIyBpbmplY3Qgc3RhY2sgdHJhY2UgdG8gc3lzCisgICAgc3lzLmxhc3RfdHlwZSA9IGV4Y190eXBlCisgICAgc3lzLmxhc3RfdmFsdWUgPSBleGNfdmFsdWUKKyAgICBzeXMubGFzdF90cmFjZWJhY2sgPSBleGNfdGIKKworICAgIFN0YWNrQnJvd3Nlcihyb290LCBmbGlzdD1mbGlzdCwgdG9wPXJvb3QsIHRiPWV4Y190YikKKworICAgICMgcmVzdG9yZSBzeXMgdG8gb3JpZ2luYWwgc3RhdGUKKyAgICBkZWwgc3lzLmxhc3RfdHlwZQorICAgIGRlbCBzeXMubGFzdF92YWx1ZQorICAgIGRlbCBzeXMubGFzdF90cmFjZWJhY2sKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3N0YWNrX3ZpZXdlcikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL1Rvb2xUaXAucHkgYi9MaWIvaWRsZWxpYi9Ub29sVGlwLnB5CmluZGV4IGIxNzg4MDMuLjk2NDEwN2UgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL1Rvb2xUaXAucHkKKysrIGIvTGliL2lkbGVsaWIvVG9vbFRpcC5weQpAQCAtNzYsMTQgKzc2LDIyIEBACiAgICAgICAgIGZvciBpdGVtIGluIHNlbGYuaXRlbXM6CiAgICAgICAgICAgICBsaXN0Ym94Lmluc2VydChFTkQsIGl0ZW0pCiAKLWRlZiBtYWluKCk6Ci0gICAgIyBUZXN0IGNvZGUKK2RlZiBfdG9vbHRpcChwYXJlbnQpOgogICAgIHJvb3QgPSBUaygpCi0gICAgYiA9IEJ1dHRvbihyb290LCB0ZXh0PSJIZWxsbyIsIGNvbW1hbmQ9cm9vdC5kZXN0cm95KQotICAgIGIucGFjaygpCi0gICAgcm9vdC51cGRhdGUoKQotICAgIHRpcCA9IExpc3Rib3hUb29sVGlwKGIsIFsiSGVsbG8iLCAid29ybGQiXSkKKyAgICByb290LnRpdGxlKCJUZXN0IHRvb2x0aXAiKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKKyAgICBsYWJlbCA9IExhYmVsKHJvb3QsIHRleHQ9IlBsYWNlIHlvdXIgbW91c2Ugb3ZlciBidXR0b25zIikKKyAgICBsYWJlbC5wYWNrKCkKKyAgICBidXR0b24xID0gQnV0dG9uKHJvb3QsIHRleHQ9IkJ1dHRvbiAxIikKKyAgICBidXR0b24yID0gQnV0dG9uKHJvb3QsIHRleHQ9IkJ1dHRvbiAyIikKKyAgICBidXR0b24xLnBhY2soKQorICAgIGJ1dHRvbjIucGFjaygpCisgICAgVG9vbFRpcChidXR0b24xLCAiVGhpcyBpcyB0b29sdGlwIHRleHQgZm9yIGJ1dHRvbjEuIikKKyAgICBMaXN0Ym94VG9vbFRpcChidXR0b24yLCBbIlRoaXMgaXMiLCJtdWx0aXBsZSBsaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9vbHRpcCB0ZXh0IiwiZm9yIGJ1dHRvbjIiXSkKICAgICByb290Lm1haW5sb29wKCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3Rvb2x0aXApCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5IGIvTGliL2lkbGVsaWIvVHJlZVdpZGdldC5weQppbmRleCAyNWJhZTQ4Li5hMTk1NzhmIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9UcmVlV2lkZ2V0LnB5CisrKyBiL0xpYi9pZGxlbGliL1RyZWVXaWRnZXQucHkKQEAgLTE3MywxMSArMTczLDEyIEBACiAKICAgICBkZWYgZHJhdyhzZWxmLCB4LCB5KToKICAgICAgICAgIyBYWFggVGhpcyBoYXJkLWNvZGVzIHRvbyBtYW55IGdlb21ldHJ5IGNvbnN0YW50cyEKKyAgICAgICAgZHkgPSAyMAogICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHkKICAgICAgICAgc2VsZi5kcmF3aWNvbigpCiAgICAgICAgIHNlbGYuZHJhd3RleHQoKQogICAgICAgICBpZiBzZWxmLnN0YXRlICE9ICdleHBhbmRlZCc6Ci0gICAgICAgICAgICByZXR1cm4geSsxNworICAgICAgICAgICAgcmV0dXJuIHkgKyBkeQogICAgICAgICAjIGRyYXcgY2hpbGRyZW4KICAgICAgICAgaWYgbm90IHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgICBzdWJsaXN0ID0gc2VsZi5pdGVtLl9HZXRTdWJMaXN0KCkKQEAgLTE4OCw3ICsxODksNyBAQAogICAgICAgICAgICAgICAgIGNoaWxkID0gc2VsZi5fX2NsYXNzX18oc2VsZi5jYW52YXMsIHNlbGYsIGl0ZW0pCiAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5hcHBlbmQoY2hpbGQpCiAgICAgICAgIGN4ID0geCsyMAotICAgICAgICBjeSA9IHkrMTcKKyAgICAgICAgY3kgPSB5ICsgZHkKICAgICAgICAgY3lsYXN0ID0gMAogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKICAgICAgICAgICAgIGN5bGFzdCA9IGN5CkBAIC0yMjcsNyArMjI4LDcgQEAKIAogICAgIGRlZiBkcmF3dGV4dChzZWxmKToKICAgICAgICAgdGV4dHggPSBzZWxmLngrMjAtMQotICAgICAgICB0ZXh0eSA9IHNlbGYueS0xCisgICAgICAgIHRleHR5ID0gc2VsZi55LTQKICAgICAgICAgbGFiZWx0ZXh0ID0gc2VsZi5pdGVtLkdldExhYmVsVGV4dCgpCiAgICAgICAgIGlmIGxhYmVsdGV4dDoKICAgICAgICAgICAgIGlkID0gc2VsZi5jYW52YXMuY3JlYXRlX3RleHQodGV4dHgsIHRleHR5LCBhbmNob3I9Im53IiwKQEAgLTI0NCwxMSArMjQ1LDExIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmVkaXRfZmluaXNoKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbGFiZWwgPSBzZWxmLmxhYmVsCisgICAgICAgICAgICBzZWxmLmxhYmVsCiAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKICAgICAgICAgICAgICMgcGFkZGluZyBjYXJlZnVsbHkgc2VsZWN0ZWQgKG9uIFdpbmRvd3MpIHRvIG1hdGNoIEVudHJ5IHdpZGdldDoKICAgICAgICAgICAgIHNlbGYubGFiZWwgPSBMYWJlbChzZWxmLmNhbnZhcywgdGV4dD10ZXh0LCBiZD0wLCBwYWR4PTIsIHBhZHk9MikKLSAgICAgICAgdGhlbWUgPSBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdUaGVtZScsJ25hbWUnKQorICAgICAgICB0aGVtZSA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCiAgICAgICAgIGlmIHNlbGYuc2VsZWN0ZWQ6CiAgICAgICAgICAgICBzZWxmLmxhYmVsLmNvbmZpZ3VyZShpZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsICdoaWxpdGUnKSkKICAgICAgICAgZWxzZToKQEAgLTM4MSw3ICszODIsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5yZW5hbWUoc2VsZi5wYXRoLCBuZXdwYXRoKQogICAgICAgICAgICAgc2VsZi5wYXRoID0gbmV3cGF0aAotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIEdldEljb25OYW1lKHNlbGYpOgpAQCAtMzk0LDcgKzM5NSw3IEBACiAgICAgZGVmIEdldFN1Ykxpc3Qoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihzZWxmLnBhdGgpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gW10KICAgICAgICAgbmFtZXMuc29ydChrZXkgPSBvcy5wYXRoLm5vcm1jYXNlKQogICAgICAgICBzdWJsaXN0ID0gW10KQEAgLTQ0OCwyOSArNDQ5LDE4IEBACiAgICAgICAgIHJldHVybiAiYnJlYWsiCiAKIAotIyBUZXN0aW5nIGZ1bmN0aW9ucwotCi1kZWYgdGVzdCgpOgotICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgUHlTaGVsbAotICAgIHJvb3QgPSBUb3BsZXZlbChQeVNoZWxsLnJvb3QpCi0gICAgcm9vdC5jb25maWd1cmUoYmQ9MCwgYmc9InllbGxvdyIpCi0gICAgcm9vdC5mb2N1c19zZXQoKQorZGVmIF90cmVlX3dpZGdldChwYXJlbnQpOgorICAgIHJvb3QgPSBUaygpCisgICAgcm9vdC50aXRsZSgiVGVzdCBUcmVlV2lkZ2V0IikKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE1MCkpCiAgICAgc2MgPSBTY3JvbGxlZENhbnZhcyhyb290LCBiZz0id2hpdGUiLCBoaWdobGlnaHR0aGlja25lc3M9MCwgdGFrZWZvY3VzPTEpCi0gICAgc2MuZnJhbWUucGFjayhleHBhbmQ9MSwgZmlsbD0iYm90aCIpCi0gICAgaXRlbSA9IEZpbGVUcmVlSXRlbSgiQzovd2luZG93cy9kZXNrdG9wIikKKyAgICBzYy5mcmFtZS5wYWNrKGV4cGFuZD0xLCBmaWxsPSJib3RoIiwgc2lkZT1MRUZUKQorICAgIGl0ZW0gPSBGaWxlVHJlZUl0ZW0ob3MuZ2V0Y3dkKCkpCiAgICAgbm9kZSA9IFRyZWVOb2RlKHNjLmNhbnZhcywgTm9uZSwgaXRlbSkKICAgICBub2RlLmV4cGFuZCgpCi0KLWRlZiB0ZXN0MigpOgotICAgICMgdGVzdCB3L28gc2Nyb2xsaW5nIGNhbnZhcwotICAgIHJvb3QgPSBUaygpCi0gICAgcm9vdC5jb25maWd1cmUoYmQ9MCkKLSAgICBjYW52YXMgPSBDYW52YXMocm9vdCwgYmc9IndoaXRlIiwgaGlnaGxpZ2h0dGhpY2tuZXNzPTApCi0gICAgY2FudmFzLnBhY2soZXhwYW5kPTEsIGZpbGw9ImJvdGgiKQotICAgIGl0ZW0gPSBGaWxlVHJlZUl0ZW0ob3MuY3VyZGlyKQotICAgIG5vZGUgPSBUcmVlTm9kZShjYW52YXMsIE5vbmUsIGl0ZW0pCi0gICAgbm9kZS51cGRhdGUoKQotICAgIGNhbnZhcy5mb2N1c19zZXQoKQorICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3QoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfdHJlZV93aWRnZXQpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9VbmRvRGVsZWdhdG9yLnB5IGIvTGliL2lkbGVsaWIvVW5kb0RlbGVnYXRvci5weQppbmRleCBkMmVmNjM4Li4wNGMxY2Y1IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9VbmRvRGVsZWdhdG9yLnB5CisrKyBiL0xpYi9pZGxlbGliL1VuZG9EZWxlZ2F0b3IucHkKQEAgLTMzNiwxNyArMzM2LDMwIEBACiAgICAgICAgIHNlbGYuZGVwdGggPSBzZWxmLmRlcHRoICsgaW5jcgogICAgICAgICByZXR1cm4gc2VsZi5kZXB0aAogCi1kZWYgbWFpbigpOgorZGVmIF91bmRvX2RlbGVnYXRvcihwYXJlbnQpOgogICAgIGZyb20gaWRsZWxpYi5QZXJjb2xhdG9yIGltcG9ydCBQZXJjb2xhdG9yCiAgICAgcm9vdCA9IFRrKCkKLSAgICByb290LndtX3Byb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgcm9vdC5xdWl0KQotICAgIHRleHQgPSBUZXh0KCkKKyAgICByb290LnRpdGxlKCJUZXN0IFVuZG9EZWxlZ2F0b3IiKQorICAgIHdpZHRoLCBoZWlnaHQsIHgsIHkgPSBsaXN0KG1hcChpbnQsIHJlLnNwbGl0KCdbeCtdJywgcGFyZW50Lmdlb21ldHJ5KCkpKSkKKyAgICByb290Lmdlb21ldHJ5KCIrJWQrJWQiJSh4LCB5ICsgMTUwKSkKKworICAgIHRleHQgPSBUZXh0KHJvb3QpCisgICAgdGV4dC5jb25maWcoaGVpZ2h0PTEwKQogICAgIHRleHQucGFjaygpCiAgICAgdGV4dC5mb2N1c19zZXQoKQogICAgIHAgPSBQZXJjb2xhdG9yKHRleHQpCiAgICAgZCA9IFVuZG9EZWxlZ2F0b3IoKQogICAgIHAuaW5zZXJ0ZmlsdGVyKGQpCisKKyAgICB1bmRvID0gQnV0dG9uKHJvb3QsIHRleHQ9IlVuZG8iLCBjb21tYW5kPWxhbWJkYTpkLnVuZG9fZXZlbnQoTm9uZSkpCisgICAgdW5kby5wYWNrKHNpZGU9J2xlZnQnKQorICAgIHJlZG8gPSBCdXR0b24ocm9vdCwgdGV4dD0iUmVkbyIsIGNvbW1hbmQ9bGFtYmRhOmQucmVkb19ldmVudChOb25lKSkKKyAgICByZWRvLnBhY2soc2lkZT0nbGVmdCcpCisgICAgZHVtcCA9IEJ1dHRvbihyb290LCB0ZXh0PSJEdW1wIiwgY29tbWFuZD1sYW1iZGE6ZC5kdW1wX2V2ZW50KE5vbmUpKQorICAgIGR1bXAucGFjayhzaWRlPSdsZWZ0JykKKwogICAgIHJvb3QubWFpbmxvb3AoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfdW5kb19kZWxlZ2F0b3IpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9XaWRnZXRSZWRpcmVjdG9yLnB5IGIvTGliL2lkbGVsaWIvV2lkZ2V0UmVkaXJlY3Rvci5weQppbmRleCBiYTUyNTFmLi5iM2Q3YmZhIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9XaWRnZXRSZWRpcmVjdG9yLnB5CisrKyBiL0xpYi9pZGxlbGliL1dpZGdldFJlZGlyZWN0b3IucHkKQEAgLTEsMjkgKzEsNDAgQEAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgorZnJvbSB0a2ludGVyIGltcG9ydCBUY2xFcnJvcgogCiBjbGFzcyBXaWRnZXRSZWRpcmVjdG9yOgotCiAgICAgIiIiU3VwcG9ydCBmb3IgcmVkaXJlY3RpbmcgYXJiaXRyYXJ5IHdpZGdldCBzdWJjb21tYW5kcy4KIAotICAgIFNvbWUgVGsgb3BlcmF0aW9ucyBkb24ndCBub3JtYWxseSBwYXNzIHRocm91Z2ggVGtpbnRlci4gIEZvciBleGFtcGxlLCBpZiBhCisgICAgU29tZSBUayBvcGVyYXRpb25zIGRvbid0IG5vcm1hbGx5IHBhc3MgdGhyb3VnaCB0a2ludGVyLiAgRm9yIGV4YW1wbGUsIGlmIGEKICAgICBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQgaW50byBhIFRleHQgd2lkZ2V0IGJ5IHByZXNzaW5nIGEga2V5LCBhIGRlZmF1bHQgVGsKICAgICBiaW5kaW5nIHRvIHRoZSB3aWRnZXQncyAnaW5zZXJ0JyBvcGVyYXRpb24gaXMgYWN0aXZhdGVkLCBhbmQgdGhlIFRrIGxpYnJhcnkKLSAgICBwcm9jZXNzZXMgdGhlIGluc2VydCB3aXRob3V0IGNhbGxpbmcgYmFjayBpbnRvIFRraW50ZXIuCisgICAgcHJvY2Vzc2VzIHRoZSBpbnNlcnQgd2l0aG91dCBjYWxsaW5nIGJhY2sgaW50byB0a2ludGVyLgogCi0gICAgQWx0aG91Z2ggYSBiaW5kaW5nIHRvIDxLZXk+IGNvdWxkIGJlIG1hZGUgdmlhIFRraW50ZXIsIHdoYXQgd2UgcmVhbGx5IHdhbnQKLSAgICB0byBkbyBpcyB0byBob29rIHRoZSBUayAnaW5zZXJ0JyBvcGVyYXRpb24gaXRzZWxmLgorICAgIEFsdGhvdWdoIGEgYmluZGluZyB0byA8S2V5PiBjb3VsZCBiZSBtYWRlIHZpYSB0a2ludGVyLCB3aGF0IHdlIHJlYWxseSB3YW50CisgICAgdG8gZG8gaXMgdG8gaG9vayB0aGUgVGsgJ2luc2VydCcgb3BlcmF0aW9uIGl0c2VsZi4gIEZvciBvbmUgdGhpbmcsIHdlIHdhbnQKKyAgICBhIHRleHQuaW5zZXJ0IGNhbGwgaW4gaWRsZSBjb2RlIHRvIGhhdmUgdGhlIHNhbWUgZWZmZWN0IGFzIGEga2V5IHByZXNzLgogCiAgICAgV2hlbiBhIHdpZGdldCBpcyBpbnN0YW50aWF0ZWQsIGEgVGNsIGNvbW1hbmQgaXMgY3JlYXRlZCB3aG9zZSBuYW1lIGlzIHRoZQogICAgIHNhbWUgYXMgdGhlIHBhdGhuYW1lIHdpZGdldC5fdy4gIFRoaXMgY29tbWFuZCBpcyB1c2VkIHRvIGludm9rZSB0aGUgdmFyaW91cwogICAgIHdpZGdldCBvcGVyYXRpb25zLCBlLmcuIGluc2VydCAoZm9yIGEgVGV4dCB3aWRnZXQpLiBXZSBhcmUgZ29pbmcgdG8gaG9vawogICAgIHRoaXMgY29tbWFuZCBhbmQgcHJvdmlkZSBhIGZhY2lsaXR5ICgncmVnaXN0ZXInKSB0byBpbnRlcmNlcHQgdGhlIHdpZGdldAotICAgIG9wZXJhdGlvbi4KKyAgICBvcGVyYXRpb24uICBXZSB3aWxsIGFsc28gaW50ZXJjZXB0IG1ldGhvZCBjYWxscyBvbiB0aGUgdGtpbnRlciBjbGFzcworICAgIGluc3RhbmNlIHRoYXQgcmVwcmVzZW50cyB0aGUgdGsgd2lkZ2V0LgogCi0gICAgSW4gSURMRSwgdGhlIGZ1bmN0aW9uIGJlaW5nIHJlZ2lzdGVyZWQgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSB0b3Agb2YgYQotICAgIFBlcmNvbGF0b3IgY2hhaW4uICBBdCB0aGUgYm90dG9tIG9mIHRoZSBjaGFpbiBpcyBhIGNhbGwgdG8gdGhlIG9yaWdpbmFsCi0gICAgVGsgd2lkZ2V0IG9wZXJhdGlvbi4KLQorICAgIEluIElETEUsIFdpZGdldFJlZGlyZWN0b3IgaXMgdXNlZCBpbiBQZXJjb2xhdG9yIHRvIGludGVyY2VwdCBUZXh0CisgICAgY29tbWFuZHMuICBUaGUgZnVuY3Rpb24gYmVpbmcgcmVnaXN0ZXJlZCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIHRvcAorICAgIG9mIGEgUGVyY29sYXRvciBjaGFpbi4gIEF0IHRoZSBib3R0b20gb2YgdGhlIGNoYWluIGlzIGEgY2FsbCB0byB0aGUKKyAgICBvcmlnaW5hbCBUayB3aWRnZXQgb3BlcmF0aW9uLgogICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3aWRnZXQpOgorICAgICAgICAnJydJbml0aWFsaXplIGF0dHJpYnV0ZXMgYW5kIHNldHVwIHJlZGlyZWN0aW9uLgorCisgICAgICAgIF9vcGVyYXRpb25zOiBkaWN0IG1hcHBpbmcgb3BlcmF0aW9uIG5hbWUgdG8gbmV3IGZ1bmN0aW9uLgorICAgICAgICB3aWRnZXQ6IHRoZSB3aWRnZXQgd2hvc2UgdGNsIGNvbW1hbmQgaXMgdG8gYmUgaW50ZXJjZXB0ZWQuCisgICAgICAgIHRrOiB3aWRnZXQudGssIGEgY29udmVuaWVuY2UgYXR0cmlidXRlLCBwcm9iYWJseSBub3QgbmVlZGVkLgorICAgICAgICBvcmlnOiBuZXcgbmFtZSBvZiB0aGUgb3JpZ2luYWwgdGNsIGNvbW1hbmQuCisKKyAgICAgICAgU2luY2UgcmVuYW1pbmcgdG8gb3JpZyBmYWlscyB3aXRoIFRjbEVycm9yIHdoZW4gb3JpZyBhbHJlYWR5CisgICAgICAgIGV4aXN0cywgb25seSBvbmUgV2lkZ2V0RGlyZWN0b3IgY2FuIGV4aXN0IGZvciBhIGdpdmVuIHdpZGdldC4KKyAgICAgICAgJycnCiAgICAgICAgIHNlbGYuX29wZXJhdGlvbnMgPSB7fQogICAgICAgICBzZWxmLndpZGdldCA9IHdpZGdldCAgICAgICAgICAgICMgd2lkZ2V0IGluc3RhbmNlCiAgICAgICAgIHNlbGYudGsgPSB0ayA9IHdpZGdldC50ayAgICAgICAgIyB3aWRnZXQncyByb290CkBAIC00MCwyNyArNTEsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2lkZ2V0Ll93KQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiVW5yZWdpc3RlciBvcGVyYXRpb25zIGFuZCByZXZlcnQgcmVkaXJlY3Rpb24gY3JlYXRlZCBieSAuX19pbml0X18uIgogICAgICAgICBmb3Igb3BlcmF0aW9uIGluIGxpc3Qoc2VsZi5fb3BlcmF0aW9ucyk6CiAgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIob3BlcmF0aW9uKQotICAgICAgICB3aWRnZXQgPSBzZWxmLndpZGdldDsgZGVsIHNlbGYud2lkZ2V0Ci0gICAgICAgIG9yaWcgPSBzZWxmLm9yaWc7IGRlbCBzZWxmLm9yaWcKKyAgICAgICAgd2lkZ2V0ID0gc2VsZi53aWRnZXQKICAgICAgICAgdGsgPSB3aWRnZXQudGsKICAgICAgICAgdyA9IHdpZGdldC5fdworICAgICAgICAjIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHdpZGdldCBUY2wgY29tbWFuZC4KICAgICAgICAgdGsuZGVsZXRlY29tbWFuZCh3KQotICAgICAgICAjIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHdpZGdldCBUY2wgY29tbWFuZDoKLSAgICAgICAgdGsuY2FsbCgicmVuYW1lIiwgb3JpZywgdykKKyAgICAgICAgdGsuY2FsbCgicmVuYW1lIiwgc2VsZi5vcmlnLCB3KQorICAgICAgICBkZWwgc2VsZi53aWRnZXQsIHNlbGYudGsgICMgU2hvdWxkIG5vdCBiZSBuZWVkZWQKKyAgICAgICAgIyBpZiBpbnN0YW5jZSBpcyBkZWxldGVkIGFmdGVyIGNsb3NlLCBhcyBpbiBQZXJjb2xhdG9yLgogCiAgICAgZGVmIHJlZ2lzdGVyKHNlbGYsIG9wZXJhdGlvbiwgZnVuY3Rpb24pOgorICAgICAgICAnJydSZXR1cm4gT3JpZ2luYWxDb21tYW5kKG9wZXJhdGlvbikgYWZ0ZXIgcmVnaXN0ZXJpbmcgZnVuY3Rpb24uCisKKyAgICAgICAgUmVnaXN0cmF0aW9uIGFkZHMgYW4gb3BlcmF0aW9uOiBmdW5jdGlvbiBwYWlyIHRvIC5fb3BlcmF0aW9ucy4KKyAgICAgICAgSXQgYWxzbyBhZGRzIGFuIHdpZGdldCBmdW5jdGlvbiBhdHRyaWJ1dGUgdGhhdCBtYXNrcyB0aGUgdGtpbnRlcgorICAgICAgICBjbGFzcyBpbnN0YW5jZSBtZXRob2QuICBNZXRob2QgbWFza2luZyBvcGVyYXRlcyBpbmRlcGVuZGVudGx5CisgICAgICAgIGZyb20gY29tbWFuZCBkaXNwYXRjaC4KKworICAgICAgICBJZiBhIHNlY29uZCBmdW5jdGlvbiBpcyByZWdpc3RlcmVkIGZvciB0aGUgc2FtZSBvcGVyYXRpb24sIHRoZQorICAgICAgICBmaXJzdCBmdW5jdGlvbiBpcyByZXBsYWNlZCBpbiBib3RoIHBsYWNlcy4KKyAgICAgICAgJycnCiAgICAgICAgIHNlbGYuX29wZXJhdGlvbnNbb3BlcmF0aW9uXSA9IGZ1bmN0aW9uCiAgICAgICAgIHNldGF0dHIoc2VsZi53aWRnZXQsIG9wZXJhdGlvbiwgZnVuY3Rpb24pCiAgICAgICAgIHJldHVybiBPcmlnaW5hbENvbW1hbmQoc2VsZiwgb3BlcmF0aW9uKQogCiAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgb3BlcmF0aW9uKToKKyAgICAgICAgJycnUmV0dXJuIHRoZSBmdW5jdGlvbiBmb3IgdGhlIG9wZXJhdGlvbiwgb3IgTm9uZS4KKworICAgICAgICBEZWxldGluZyB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIHVubWFza3MgdGhlIGNsYXNzIGF0dHJpYnV0ZS4KKyAgICAgICAgJycnCiAgICAgICAgIGlmIG9wZXJhdGlvbiBpbiBzZWxmLl9vcGVyYXRpb25zOgogICAgICAgICAgICAgZnVuY3Rpb24gPSBzZWxmLl9vcGVyYXRpb25zW29wZXJhdGlvbl0KICAgICAgICAgICAgIGRlbCBzZWxmLl9vcGVyYXRpb25zW29wZXJhdGlvbl0KLSAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi53aWRnZXQsIG9wZXJhdGlvbik6CisgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZGVsYXR0cihzZWxmLndpZGdldCwgb3BlcmF0aW9uKQorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKQEAgLTg4LDE0ICsxMTcsMjkgQEAKIAogCiBjbGFzcyBPcmlnaW5hbENvbW1hbmQ6CisgICAgJycnQ2FsbGFibGUgZm9yIG9yaWdpbmFsIHRrIGNvbW1hbmQgdGhhdCBoYXMgYmVlbiByZWRpcmVjdGVkLgorCisgICAgUmV0dXJuZWQgYnkgLnJlZ2lzdGVyOyBjYW4gYmUgdXNlZCBpbiB0aGUgZnVuY3Rpb24gcmVnaXN0ZXJlZC4KKyAgICByZWRpciA9IFdpZGdldFJlZGlyZWN0b3IodGV4dCkKKyAgICBkZWYgbXlfaW5zZXJ0KCphcmdzKToKKyAgICAgICAgcHJpbnQoImluc2VydCIsIGFyZ3MpCisgICAgICAgIG9yaWdpbmFsX2luc2VydCgqYXJncykKKyAgICBvcmlnaW5hbF9pbnNlcnQgPSByZWRpci5yZWdpc3RlcigiaW5zZXJ0IiwgbXlfaW5zZXJ0KQorICAgICcnJwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlZGlyLCBvcGVyYXRpb24pOgorICAgICAgICAnJydDcmVhdGUgLnRrX2NhbGwgYW5kIC5vcmlnX2FuZF9vcGVyYXRpb24gZm9yIC5fX2NhbGxfXyBtZXRob2QuCisKKyAgICAgICAgLnJlZGlyIGFuZCAub3BlcmF0aW9uIHN0b3JlIHRoZSBpbnB1dCBhcmdzIGZvciBfX3JlcHJfXy4KKyAgICAgICAgLnRrIGFuZCAub3JpZyBjb3B5IGF0dHJpYnV0ZXMgb2YgLnJlZGlyIChwcm9iYWJseSBub3QgbmVlZGVkKS4KKyAgICAgICAgJycnCiAgICAgICAgIHNlbGYucmVkaXIgPSByZWRpcgogICAgICAgICBzZWxmLm9wZXJhdGlvbiA9IG9wZXJhdGlvbgotICAgICAgICBzZWxmLnRrID0gcmVkaXIudGsKLSAgICAgICAgc2VsZi5vcmlnID0gcmVkaXIub3JpZwotICAgICAgICBzZWxmLnRrX2NhbGwgPSBzZWxmLnRrLmNhbGwKLSAgICAgICAgc2VsZi5vcmlnX2FuZF9vcGVyYXRpb24gPSAoc2VsZi5vcmlnLCBzZWxmLm9wZXJhdGlvbikKKyAgICAgICAgc2VsZi50ayA9IHJlZGlyLnRrICAjIHJlZHVuZGFudCB3aXRoIHNlbGYucmVkaXIKKyAgICAgICAgc2VsZi5vcmlnID0gcmVkaXIub3JpZyAgIyByZWR1bmRhbnQgd2l0aCBzZWxmLnJlZGlyCisgICAgICAgICMgVGhlc2UgdHdvIGNvdWxkIGJlIGRlbGV0ZWQgYWZ0ZXIgY2hlY2tpbmcgcmVjaXBpZW50IGNvZGUuCisgICAgICAgIHNlbGYudGtfY2FsbCA9IHJlZGlyLnRrLmNhbGwKKyAgICAgICAgc2VsZi5vcmlnX2FuZF9vcGVyYXRpb24gPSAocmVkaXIub3JpZywgb3BlcmF0aW9uKQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIk9yaWdpbmFsQ29tbWFuZCglciwgJXIpIiAlIChzZWxmLnJlZGlyLCBzZWxmLm9wZXJhdGlvbikKQEAgLTEwNCwyMyArMTQ4LDI3IEBACiAgICAgICAgIHJldHVybiBzZWxmLnRrX2NhbGwoc2VsZi5vcmlnX2FuZF9vcGVyYXRpb24gKyBhcmdzKQogCiAKLWRlZiBtYWluKCk6CitkZWYgX3dpZGdldF9yZWRpcmVjdG9yKHBhcmVudCk6ICAjIGh0ZXN0ICMKKyAgICBmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0CisgICAgaW1wb3J0IHJlCisKICAgICByb290ID0gVGsoKQotICAgIHJvb3Qud21fcHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCByb290LnF1aXQpCi0gICAgdGV4dCA9IFRleHQoKQorICAgIHJvb3QudGl0bGUoIlRlc3QgV2lkZ2V0UmVkaXJlY3RvciIpCisgICAgd2lkdGgsIGhlaWdodCwgeCwgeSA9IGxpc3QobWFwKGludCwgcmUuc3BsaXQoJ1t4K10nLCBwYXJlbnQuZ2VvbWV0cnkoKSkpKQorICAgIHJvb3QuZ2VvbWV0cnkoIislZCslZCIlKHgsIHkgKyAxNTApKQorICAgIHRleHQgPSBUZXh0KHJvb3QpCiAgICAgdGV4dC5wYWNrKCkKICAgICB0ZXh0LmZvY3VzX3NldCgpCiAgICAgcmVkaXIgPSBXaWRnZXRSZWRpcmVjdG9yKHRleHQpCi0gICAgZ2xvYmFsIHByZXZpb3VzX3RjbF9mY24KICAgICBkZWYgbXlfaW5zZXJ0KCphcmdzKToKICAgICAgICAgcHJpbnQoImluc2VydCIsIGFyZ3MpCi0gICAgICAgIHByZXZpb3VzX3RjbF9mY24oKmFyZ3MpCi0gICAgcHJldmlvdXNfdGNsX2ZjbiA9IHJlZGlyLnJlZ2lzdGVyKCJpbnNlcnQiLCBteV9pbnNlcnQpCisgICAgICAgIG9yaWdpbmFsX2luc2VydCgqYXJncykKKyAgICBvcmlnaW5hbF9pbnNlcnQgPSByZWRpci5yZWdpc3RlcigiaW5zZXJ0IiwgbXlfaW5zZXJ0KQogICAgIHJvb3QubWFpbmxvb3AoKQotICAgIHJlZGlyLnVucmVnaXN0ZXIoImluc2VydCIpICAjIHJ1bnMgYWZ0ZXIgZmlyc3QgJ2Nsb3NlIHdpbmRvdycKLSAgICByZWRpci5jbG9zZSgpCi0gICAgcm9vdC5tYWlubG9vcCgpCi0gICAgcm9vdC5kZXN0cm95KCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICBtYWluKCkKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3dpZGdldHJlZGlyJywKKyAgICAgICAgICAgICAgICAgIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfd2lkZ2V0X3JlZGlyZWN0b3IpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9ab29tSGVpZ2h0LnB5IGIvTGliL2lkbGVsaWIvWm9vbUhlaWdodC5weQppbmRleCBlOGQxNzEwLi5hNWQ2NzllIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ab29tSGVpZ2h0LnB5CisrKyBiL0xpYi9pZGxlbGliL1pvb21IZWlnaHQucHkKQEAgLTMyLDcgKzMyLDcgQEAKICAgICAgICAgbmV3eSA9IDAKICAgICAgICAgbmV3aGVpZ2h0ID0gbmV3aGVpZ2h0IC0gNzIKIAotICAgIGVsaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKKyAgICBlbGlmIG1hY29zeFN1cHBvcnQuaXNBcXVhVGsoKToKICAgICAgICAgIyBUaGUgJzg4JyBiZWxvdyBpcyBhIG1hZ2ljIG51bWJlciB0aGF0IGF2b2lkcyBwbGFjaW5nIHRoZSBib3R0b20KICAgICAgICAgIyBvZiB0aGUgd2luZG93IGJlbG93IHRoZSBwYW5lbCBvbiBteSBtYWNoaW5lLiBJIGRvbid0IGtub3cgaG93CiAgICAgICAgICMgdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGlzIHdpdGggdGtpbnRlci4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL19faW5pdF9fLnB5IGIvTGliL2lkbGVsaWIvX19pbml0X18ucHkKaW5kZXggN2E4M2RkZS4uNzExZjYxYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvX19pbml0X18ucHkKKysrIGIvTGliL2lkbGVsaWIvX19pbml0X18ucHkKQEAgLTEgKzEsOCBAQAotIyBEdW1teSBmaWxlIHRvIG1ha2UgdGhpcyBhIHBhY2thZ2UuCisiIiJUaGUgaWRsZWxpYiBwYWNrYWdlIGltcGxlbWVudHMgdGhlIElkbGUgYXBwbGljYXRpb24uCisKK0lkbGUgaW5jbHVkZXMgYW4gaW50ZXJhY3RpdmUgc2hlbGwgYW5kIGVkaXRvci4KK1VzZSB0aGUgZmlsZXMgbmFtZWQgaWRsZS4qIHRvIHN0YXJ0IElkbGUuCisKK1RoZSBvdGhlciBmaWxlcyBhcmUgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbnMuICBUaGVpciBkZXRhaWxzIGFyZSBzdWJqZWN0IHRvCitjaGFuZ2UuICBTZWUgUEVQIDQzNCBmb3IgbW9yZS4gIEltcG9ydCB0aGVtIGF0IHlvdXIgb3duIHJpc2suCisiIiIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL19fbWFpbl9fLnB5IGIvTGliL2lkbGVsaWIvX19tYWluX18ucHkKaW5kZXggMDY2NmYyZi4uMmVkZjVmNyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvX19tYWluX18ucHkKKysrIGIvTGliL2lkbGVsaWIvX19tYWluX18ucHkKQEAgLTMsNyArMyw2IEBACiAKIFJ1biBJRExFIGFzIHB5dGhvbiAtbSBpZGxlbGliCiAiIiIKLQotCiBpbXBvcnQgaWRsZWxpYi5QeVNoZWxsCiBpZGxlbGliLlB5U2hlbGwubWFpbigpCisjIFRoaXMgZmlsZSBkb2VzIG5vdCB3b3JrIGZvciAyLjc7IFNlZSBpc3N1ZSAyNDIxMi4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2Fib3V0RGlhbG9nLnB5IGIvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkKaW5kZXggN2ZlMWFiOC4uZDg3NmE5NyAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIvYWJvdXREaWFsb2cucHkKQEAgLTIsMjEgKzIsMjUgQEAKIAogIiIiCiAKLWZyb20gdGtpbnRlciBpbXBvcnQgKgogaW1wb3J0IG9zCi0KK2Zyb20gc3lzIGltcG9ydCB2ZXJzaW9uCitmcm9tIHRraW50ZXIgaW1wb3J0ICoKIGZyb20gaWRsZWxpYiBpbXBvcnQgdGV4dFZpZXcKLWZyb20gaWRsZWxpYiBpbXBvcnQgaWRsZXZlcgogCiBjbGFzcyBBYm91dERpYWxvZyhUb3BsZXZlbCk6CiAgICAgIiIiTW9kYWwgYWJvdXQgZGlhbG9nIGZvciBpZGxlCiAKICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZixwYXJlbnQsdGl0bGUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBfaHRlc3Q9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgX2h0ZXN0IC0gYm9vbCwgY2hhbmdlIGJveCBsb2NhdGlvbiB3aGVuIHJ1bm5pbmcgaHRlc3QKKyAgICAgICAgIiIiCiAgICAgICAgIFRvcGxldmVsLl9faW5pdF9fKHNlbGYsIHBhcmVudCkKICAgICAgICAgc2VsZi5jb25maWd1cmUoYm9yZGVyd2lkdGg9NSkKLSAgICAgICAgc2VsZi5nZW9tZXRyeSgiKyVkKyVkIiAlIChwYXJlbnQud2luZm9fcm9vdHgoKSszMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSszMCkpCisgICAgICAgICMgcGxhY2UgZGlhbG9nIGJlbG93IHBhcmVudCBpZiBydW5uaW5nIGh0ZXN0CisgICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSszMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpKygzMCBpZiBub3QgX2h0ZXN0IGVsc2UgMTAwKSkpCiAgICAgICAgIHNlbGYuYmcgPSAiIzcwNzA3MCIKICAgICAgICAgc2VsZi5mZyA9ICIjZmZmZmZmIgogICAgICAgICBzZWxmLkNyZWF0ZVdpZGdldHMoKQpAQCAtMzIsNiArMzYsNyBAQAogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKIAogICAgIGRlZiBDcmVhdGVXaWRnZXRzKHNlbGYpOgorICAgICAgICByZWxlYXNlID0gdmVyc2lvbls6dmVyc2lvbi5pbmRleCgnICcpXQogICAgICAgICBmcmFtZU1haW4gPSBGcmFtZShzZWxmLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9U1VOS0VOKQogICAgICAgICBmcmFtZUJ1dHRvbnMgPSBGcmFtZShzZWxmKQogICAgICAgICBmcmFtZUJ1dHRvbnMucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YKQpAQCAtNTcsMTQgKzYyLDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqdXN0aWZ5PUxFRlQsIGZnPXNlbGYuZmcsIGJnPXNlbGYuYmcpCiAgICAgICAgIGxhYmVsRW1haWwuZ3JpZChyb3c9NiwgY29sdW1uPTAsIGNvbHVtbnNwYW49MiwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0aWNreT1XLCBwYWR4PTEwLCBwYWR5PTApCi0gICAgICAgIGxhYmVsV1dXID0gTGFiZWwoZnJhbWVCZywgdGV4dD0nd3d3OiAgaHR0cDovL3d3dy5weXRob24ub3JnL2lkbGUvJywKKyAgICAgICAgbGFiZWxXV1cgPSBMYWJlbChmcmFtZUJnLCB0ZXh0PSdodHRwczovL2RvY3MucHl0aG9uLm9yZy8nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uWzozXSArICcvbGlicmFyeS9pZGxlLmh0bWwnLAogICAgICAgICAgICAgICAgICAgICAgICAgIGp1c3RpZnk9TEVGVCwgZmc9c2VsZi5mZywgYmc9c2VsZi5iZykKICAgICAgICAgbGFiZWxXV1cuZ3JpZChyb3c9NywgY29sdW1uPTAsIGNvbHVtbnNwYW49Miwgc3RpY2t5PVcsIHBhZHg9MTAsIHBhZHk9MCkKICAgICAgICAgRnJhbWUoZnJhbWVCZywgYm9yZGVyd2lkdGg9MSwgcmVsaWVmPVNVTktFTiwKICAgICAgICAgICAgICAgaGVpZ2h0PTIsIGJnPXNlbGYuYmcpLmdyaWQocm93PTgsIGNvbHVtbj0wLCBzdGlja3k9RVcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNwYW49MywgcGFkeD01LCBwYWR5PTUpCi0gICAgICAgIGxhYmVsUHl0aG9uVmVyID0gTGFiZWwoZnJhbWVCZywgdGV4dD0nUHl0aG9uIHZlcnNpb246ICAnICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy52ZXJzaW9uLnNwbGl0KClbMF0sIGZnPXNlbGYuZmcsIGJnPXNlbGYuYmcpCisgICAgICAgIGxhYmVsUHl0aG9uVmVyID0gTGFiZWwoZnJhbWVCZywgdGV4dD0nUHl0aG9uIHZlcnNpb246ICAnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlLCBmZz1zZWxmLmZnLCBiZz1zZWxmLmJnKQogICAgICAgICBsYWJlbFB5dGhvblZlci5ncmlkKHJvdz05LCBjb2x1bW49MCwgc3RpY2t5PVcsIHBhZHg9MTAsIHBhZHk9MCkKICAgICAgICAgdGtWZXIgPSBzZWxmLnRrLmNhbGwoJ2luZm8nLCAncGF0Y2hsZXZlbCcpCiAgICAgICAgIGxhYmVsVGtWZXIgPSBMYWJlbChmcmFtZUJnLCB0ZXh0PSdUayB2ZXJzaW9uOiAgJysKQEAgLTg3LDcgKzkzLDcgQEAKICAgICAgICAgRnJhbWUoZnJhbWVCZywgYm9yZGVyd2lkdGg9MSwgcmVsaWVmPVNVTktFTiwKICAgICAgICAgICAgICAgaGVpZ2h0PTIsIGJnPXNlbGYuYmcpLmdyaWQocm93PTExLCBjb2x1bW49MCwgc3RpY2t5PUVXLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zcGFuPTMsIHBhZHg9NSwgcGFkeT01KQotICAgICAgICBpZGxlX3YgPSBMYWJlbChmcmFtZUJnLCB0ZXh0PSdJRExFIHZlcnNpb246ICAgJyArIGlkbGV2ZXIuSURMRV9WRVJTSU9OLAorICAgICAgICBpZGxlX3YgPSBMYWJlbChmcmFtZUJnLCB0ZXh0PSdJRExFIHZlcnNpb246ICAgJyArIHJlbGVhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgIGZnPXNlbGYuZmcsIGJnPXNlbGYuYmcpCiAgICAgICAgIGlkbGVfdi5ncmlkKHJvdz0xMiwgY29sdW1uPTAsIHN0aWNreT1XLCBwYWR4PTEwLCBwYWR5PTApCiAgICAgICAgIGlkbGVfYnV0dG9uX2YgPSBGcmFtZShmcmFtZUJnLCBiZz1zZWxmLmJnKQpAQCAtMTM2LDEwICsxNDIsNSBAQAogICAgICAgICBzZWxmLmRlc3Ryb3koKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICMgdGVzdCB0aGUgZGlhbG9nCi0gICAgcm9vdCA9IFRrKCkKLSAgICBkZWYgcnVuKCk6Ci0gICAgICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgYWJvdXREaWFsb2cKLSAgICAgICAgYWJvdXREaWFsb2cuQWJvdXREaWFsb2cocm9vdCwgJ0Fib3V0JykKLSAgICBCdXR0b24ocm9vdCwgdGV4dD0nRGlhbG9nJywgY29tbWFuZD1ydW4pLnBhY2soKQotICAgIHJvb3QubWFpbmxvb3AoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihBYm91dERpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZy1leHRlbnNpb25zLmRlZiBiL0xpYi9pZGxlbGliL2NvbmZpZy1leHRlbnNpb25zLmRlZgppbmRleCAzOWU2OWNlLi5hMjRiOGM5IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWctZXh0ZW5zaW9ucy5kZWYKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnLWV4dGVuc2lvbnMuZGVmCkBAIC0zLDc1ICszLDM3IEBACiAjIElETEUgcmVhZHMgc2V2ZXJhbCBjb25maWcgZmlsZXMgdG8gZGV0ZXJtaW5lIHVzZXIgcHJlZmVyZW5jZXMuICBUaGlzCiAjIGZpbGUgaXMgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmaWxlIGZvciBJRExFIGV4dGVuc2lvbnMgc2V0dGluZ3MuCiAjCi0jIEVhY2ggZXh0ZW5zaW9uIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc2VjdGlvbiwgbmFtZWQgYWZ0ZXIgdGhlIGV4dGVuc2lvbgotIyBtb2R1bGUuIFRoaXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gJ2VuYWJsZScgaXRlbSAoPTEgdG8gZW5hYmxlIHRoZQotIyBleHRlbnNpb24sID0wIHRvIGRpc2FibGUgaXQpLCBpdCBtYXkgY29udGFpbiAnZW5hYmxlX2VkaXRvcicgb3IgJ2VuYWJsZV9zaGVsbCcKLSMgaXRlbXMsIHRvIGFwcGx5IGl0IG9ubHkgdG8gZWRpdG9yL3NoZWxsIHdpbmRvd3MsIGFuZCBtYXkgYWxzbyBjb250YWluIGFueQotIyBvdGhlciBnZW5lcmFsIGNvbmZpZ3VyYXRpb24gaXRlbXMgZm9yIHRoZSBleHRlbnNpb24uCisjIEVhY2ggZXh0ZW5zaW9uIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgc2VjdGlvbiwgbmFtZWQgYWZ0ZXIgdGhlCisjIGV4dGVuc2lvbiBtb2R1bGUuIFRoaXMgc2VjdGlvbiBtdXN0IGNvbnRhaW4gYW4gJ2VuYWJsZScgaXRlbSAoPVRydWUgdG8KKyMgZW5hYmxlIHRoZSBleHRlbnNpb24sID1GYWxzZSB0byBkaXNhYmxlIGl0KSwgaXQgbWF5IGNvbnRhaW4KKyMgJ2VuYWJsZV9lZGl0b3InIG9yICdlbmFibGVfc2hlbGwnIGl0ZW1zLCB0byBhcHBseSBpdCBvbmx5IHRvIGVkaXRvciBpcgorIyBzaGVsbCB3aW5kb3dzLCBhbmQgbWF5IGFsc28gY29udGFpbiBhbnkgb3RoZXIgZ2VuZXJhbCBjb25maWd1cmF0aW9uCisjIGl0ZW1zIGZvciB0aGUgZXh0ZW5zaW9uLiAgT3RoZXIgVHJ1ZS9GYWxzZSB2YWx1ZXMgd2lsbCBhbHNvIGJlCisjIHJlY29nbml6ZWQgYXMgYm9vbGVhbiBieSB0aGUgRXh0ZW5zaW9uIENvbmZpZ3VyYXRpb24gZGlhbG9nLgogIwotIyBFYWNoIGV4dGVuc2lvbiBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VjdGlvbiBuYW1lZCBFeHRlbnNpb25OYW1lX2JpbmRpbmdzCi0jIG9yIEV4dGVuc2lvbk5hbWVfY2ZnQmluZGluZ3MuIElmIHByZXNlbnQsIEV4dGVuc2lvbk5hbWVfYmluZGluZ3MgZGVmaW5lcwotIyB2aXJ0dWFsIGV2ZW50IGJpbmRpbmdzIGZvciB0aGUgZXh0ZW5zaW9uIHRoYXQgYXJlIG5vdCB1c2VyIHJlLWNvbmZpZ3VyYWJsZS4KLSMgSWYgcHJlc2VudCwgRXh0ZW5zaW9uTmFtZV9jZmdCaW5kaW5ncyBkZWZpbmVzIHZpcnR1YWwgZXZlbnQgYmluZGluZ3MgZm9yIHRoZQorIyBFYWNoIGV4dGVuc2lvbiBtdXN0IGRlZmluZSBhdCBsZWFzdCBvbmUgc2VjdGlvbiBuYW1lZAorIyBFeHRlbnNpb25OYW1lX2JpbmRpbmdzIG9yIEV4dGVuc2lvbk5hbWVfY2ZnQmluZGluZ3MuIElmIHByZXNlbnQsCisjIEV4dGVuc2lvbk5hbWVfYmluZGluZ3MgZGVmaW5lcyB2aXJ0dWFsIGV2ZW50IGJpbmRpbmdzIGZvciB0aGUKKyMgZXh0ZW5zaW9uIHRoYXQgYXJlIG5vdCB1c2VyIHJlLWNvbmZpZ3VyYWJsZS4gSWYgcHJlc2VudCwKKyMgRXh0ZW5zaW9uTmFtZV9jZmdCaW5kaW5ncyBkZWZpbmVzIHZpcnR1YWwgZXZlbnQgYmluZGluZ3MgZm9yIHRoZQogIyBleHRlbnNpb24gdGhhdCBtYXkgYmUgc2Vuc2libHkgcmUtY29uZmlndXJlZC4KICMKLSMgSWYgdGhlcmUgYXJlIG5vIGtleWJpbmRpbmdzIGZvciBhIG1lbnVzJyB2aXJ0dWFsIGV2ZW50cywgaW5jbHVkZSBsaW5lcyBsaWtlCi0jIDw8dG9nZ2xlLWNvZGUtY29udGV4dD4+PSAgIChTZWUgW0NvZGVDb250ZXh0XSwgYmVsb3cuKQorIyBJZiB0aGVyZSBhcmUgbm8ga2V5YmluZGluZ3MgZm9yIGEgbWVudXMnIHZpcnR1YWwgZXZlbnRzLCBpbmNsdWRlIGxpbmVzCisjIGxpa2UgPDx0b2dnbGUtY29kZS1jb250ZXh0Pj49ICAoU2VlIFtDb2RlQ29udGV4dF0sIGJlbG93LikKICMKLSMgQ3VycmVudGx5IGl0IGlzIG5lY2Vzc2FyeSB0byBtYW51YWxseSBtb2RpZnkgdGhpcyBmaWxlIHRvIGNoYW5nZSBleHRlbnNpb24KLSMga2V5IGJpbmRpbmdzIGFuZCBkZWZhdWx0IHZhbHVlcy4gVG8gY3VzdG9taXplLCBjcmVhdGUKKyMgQ3VycmVudGx5IGl0IGlzIG5lY2Vzc2FyeSB0byBtYW51YWxseSBtb2RpZnkgdGhpcyBmaWxlIHRvIGNoYW5nZQorIyBleHRlbnNpb24ga2V5IGJpbmRpbmdzIGFuZCBkZWZhdWx0IHZhbHVlcy4gVG8gY3VzdG9taXplLCBjcmVhdGUKICMgfi8uaWRsZXJjL2NvbmZpZy1leHRlbnNpb25zLmNmZyBhbmQgYXBwZW5kIHRoZSBhcHByb3ByaWF0ZSBjdXN0b21pemVkCiAjIHNlY3Rpb24ocykuICBUaG9zZSBzZWN0aW9ucyB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0cyBpbiB0aGlzIGZpbGUuCiAjCi0jIE5vdGU6IElmIGEga2V5YmluZGluZyBpcyBhbHJlYWR5IGluIHVzZSB3aGVuIHRoZSBleHRlbnNpb24gaXMKLSMgbG9hZGVkLCB0aGUgZXh0ZW5zaW9uJ3MgdmlydHVhbCBldmVudCdzIGtleWJpbmRpbmcgd2lsbCBiZSBzZXQgdG8gJycuCisjIE5vdGU6IElmIGEga2V5YmluZGluZyBpcyBhbHJlYWR5IGluIHVzZSB3aGVuIHRoZSBleHRlbnNpb24gaXMgbG9hZGVkLAorIyB0aGUgZXh0ZW5zaW9uJ3MgdmlydHVhbCBldmVudCdzIGtleWJpbmRpbmcgd2lsbCBiZSBzZXQgdG8gJycuCiAjCiAjIFNlZSBjb25maWcta2V5cy5kZWYgZm9yIG5vdGVzIG9uIHNwZWNpZnlpbmcga2V5cyBhbmQgZXh0ZW5kLnR4dCBmb3IKICMgaW5mb3JtYXRpb24gb24gY3JlYXRpbmcgSURMRSBleHRlbnNpb25zLgogCi1bRm9ybWF0UGFyYWdyYXBoXQotZW5hYmxlPTEKLVtGb3JtYXRQYXJhZ3JhcGhfY2ZnQmluZGluZ3NdCi1mb3JtYXQtcGFyYWdyYXBoPTxBbHQtS2V5LXE+Ci0KLVtBdXRvRXhwYW5kXQotZW5hYmxlPTEKLVtBdXRvRXhwYW5kX2NmZ0JpbmRpbmdzXQotZXhwYW5kLXdvcmQ9PEFsdC1LZXktc2xhc2g+Ci0KLVtab29tSGVpZ2h0XQotZW5hYmxlPTEKLVtab29tSGVpZ2h0X2NmZ0JpbmRpbmdzXQotem9vbS1oZWlnaHQ9PEFsdC1LZXktMj4KLQotW1NjcmlwdEJpbmRpbmddCi1lbmFibGU9MQotZW5hYmxlX3NoZWxsPTAKLWVuYWJsZV9lZGl0b3I9MQotW1NjcmlwdEJpbmRpbmdfY2ZnQmluZGluZ3NdCi1ydW4tbW9kdWxlPTxLZXktRjU+Ci1jaGVjay1tb2R1bGU9PEFsdC1LZXkteD4KLQotW0NhbGxUaXBzXQotZW5hYmxlPTEKLVtDYWxsVGlwc19jZmdCaW5kaW5nc10KLWZvcmNlLW9wZW4tY2FsbHRpcD08Q29udHJvbC1LZXktYmFja3NsYXNoPgotW0NhbGxUaXBzX2JpbmRpbmdzXQotdHJ5LW9wZW4tY2FsbHRpcD08S2V5UmVsZWFzZS1wYXJlbmxlZnQ+Ci1yZWZyZXNoLWNhbGx0aXA9PEtleVJlbGVhc2UtcGFyZW5yaWdodD4gPEtleVJlbGVhc2UtMD4KLQotW1BhcmVuTWF0Y2hdCi1lbmFibGU9MQotc3R5bGU9IGV4cHJlc3Npb24KLWZsYXNoLWRlbGF5PSA1MDAKLWJlbGw9IDEKLVtQYXJlbk1hdGNoX2NmZ0JpbmRpbmdzXQotZmxhc2gtcGFyZW49PENvbnRyb2wtS2V5LTA+Ci1bUGFyZW5NYXRjaF9iaW5kaW5nc10KLXBhcmVuLWNsb3NlZD08S2V5UmVsZWFzZS1wYXJlbnJpZ2h0PiA8S2V5UmVsZWFzZS1icmFja2V0cmlnaHQ+IDxLZXlSZWxlYXNlLWJyYWNlcmlnaHQ+Ci0KIFtBdXRvQ29tcGxldGVdCi1lbmFibGU9MQorZW5hYmxlPVRydWUKIHBvcHVwd2FpdD0yMDAwCiBbQXV0b0NvbXBsZXRlX2NmZ0JpbmRpbmdzXQogZm9yY2Utb3Blbi1jb21wbGV0aW9ucz08Q29udHJvbC1LZXktc3BhY2U+CkBAIC03OSwxOCArNDEsNTkgQEAKIGF1dG9jb21wbGV0ZT08S2V5LVRhYj4KIHRyeS1vcGVuLWNvbXBsZXRpb25zPTxLZXlSZWxlYXNlLXBlcmlvZD4gPEtleVJlbGVhc2Utc2xhc2g+IDxLZXlSZWxlYXNlLWJhY2tzbGFzaD4KIAorW0F1dG9FeHBhbmRdCitlbmFibGU9VHJ1ZQorW0F1dG9FeHBhbmRfY2ZnQmluZGluZ3NdCitleHBhbmQtd29yZD08QWx0LUtleS1zbGFzaD4KKworW0NhbGxUaXBzXQorZW5hYmxlPVRydWUKK1tDYWxsVGlwc19jZmdCaW5kaW5nc10KK2ZvcmNlLW9wZW4tY2FsbHRpcD08Q29udHJvbC1LZXktYmFja3NsYXNoPgorW0NhbGxUaXBzX2JpbmRpbmdzXQordHJ5LW9wZW4tY2FsbHRpcD08S2V5UmVsZWFzZS1wYXJlbmxlZnQ+CityZWZyZXNoLWNhbGx0aXA9PEtleVJlbGVhc2UtcGFyZW5yaWdodD4gPEtleVJlbGVhc2UtMD4KKwogW0NvZGVDb250ZXh0XQotZW5hYmxlPTEKLWVuYWJsZV9zaGVsbD0wCitlbmFibGU9VHJ1ZQorZW5hYmxlX3NoZWxsPUZhbHNlCiBudW1saW5lcz0zCi12aXNpYmxlPTAKK3Zpc2libGU9RmFsc2UKIGJnY29sb3I9TGlnaHRHcmF5CiBmZ2NvbG9yPUJsYWNrCiBbQ29kZUNvbnRleHRfYmluZGluZ3NdCiB0b2dnbGUtY29kZS1jb250ZXh0PQogCi1bUnN0cmlwRXh0ZW5zaW9uXQotZW5hYmxlPTEKLWVuYWJsZV9zaGVsbD0wCi1lbmFibGVfZWRpdG9yPTEKK1tGb3JtYXRQYXJhZ3JhcGhdCitlbmFibGU9VHJ1ZQorbWF4LXdpZHRoPTcyCitbRm9ybWF0UGFyYWdyYXBoX2NmZ0JpbmRpbmdzXQorZm9ybWF0LXBhcmFncmFwaD08QWx0LUtleS1xPgogCitbUGFyZW5NYXRjaF0KK2VuYWJsZT1UcnVlCitzdHlsZT0gZXhwcmVzc2lvbgorZmxhc2gtZGVsYXk9IDUwMAorYmVsbD1UcnVlCitbUGFyZW5NYXRjaF9jZmdCaW5kaW5nc10KK2ZsYXNoLXBhcmVuPTxDb250cm9sLUtleS0wPgorW1BhcmVuTWF0Y2hfYmluZGluZ3NdCitwYXJlbi1jbG9zZWQ9PEtleVJlbGVhc2UtcGFyZW5yaWdodD4gPEtleVJlbGVhc2UtYnJhY2tldHJpZ2h0PiA8S2V5UmVsZWFzZS1icmFjZXJpZ2h0PgorCitbUnN0cmlwRXh0ZW5zaW9uXQorZW5hYmxlPVRydWUKK2VuYWJsZV9zaGVsbD1GYWxzZQorZW5hYmxlX2VkaXRvcj1UcnVlCisKK1tTY3JpcHRCaW5kaW5nXQorZW5hYmxlPVRydWUKK2VuYWJsZV9zaGVsbD1GYWxzZQorZW5hYmxlX2VkaXRvcj1UcnVlCitbU2NyaXB0QmluZGluZ19jZmdCaW5kaW5nc10KK3J1bi1tb2R1bGU9PEtleS1GNT4KK2NoZWNrLW1vZHVsZT08QWx0LUtleS14PgorCitbWm9vbUhlaWdodF0KK2VuYWJsZT1UcnVlCitbWm9vbUhlaWdodF9jZmdCaW5kaW5nc10KK3pvb20taGVpZ2h0PTxBbHQtS2V5LTI+CmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWctaGlnaGxpZ2h0LmRlZiBiL0xpYi9pZGxlbGliL2NvbmZpZy1oaWdobGlnaHQuZGVmCmluZGV4IDdkMjBmNzguLjQxNDZlMjggMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZy1oaWdobGlnaHQuZGVmCisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZy1oaWdobGlnaHQuZGVmCkBAIC02MiwzICs2MiwzMiBAQAogc3RkZXJyLWJhY2tncm91bmQ9ICNmZmZmZmYKIGNvbnNvbGUtZm9yZWdyb3VuZD0gIzc3MDAwMAogY29uc29sZS1iYWNrZ3JvdW5kPSAjZmZmZmZmCisKK1tJRExFIERhcmtdCitjb21tZW50LWZvcmVncm91bmQgPSAjZGQwMDAwCitjb25zb2xlLWZvcmVncm91bmQgPSAjZmY0ZDRkCitlcnJvci1mb3JlZ3JvdW5kID0gI0ZGRkZGRgoraGlsaXRlLWJhY2tncm91bmQgPSAjN2U3ZTdlCitzdHJpbmctZm9yZWdyb3VuZCA9ICMwMmZmMDIKK3N0ZGVyci1iYWNrZ3JvdW5kID0gIzAwMjI0MAorc3RkZXJyLWZvcmVncm91bmQgPSAjZmZiM2IzCitjb25zb2xlLWJhY2tncm91bmQgPSAjMDAyMjQwCitoaXQtYmFja2dyb3VuZCA9ICNmYmZiZmIKK3N0cmluZy1iYWNrZ3JvdW5kID0gIzAwMjI0MAorbm9ybWFsLWJhY2tncm91bmQgPSAjMDAyMjQwCitoaWxpdGUtZm9yZWdyb3VuZCA9ICNGRkZGRkYKK2tleXdvcmQtZm9yZWdyb3VuZCA9ICNmZjgwMDAKK2Vycm9yLWJhY2tncm91bmQgPSAjYzg2NDY0CitrZXl3b3JkLWJhY2tncm91bmQgPSAjMDAyMjQwCitidWlsdGluLWJhY2tncm91bmQgPSAjMDAyMjQwCiticmVhay1iYWNrZ3JvdW5kID0gIzgwODAwMAorYnVpbHRpbi1mb3JlZ3JvdW5kID0gI2ZmMDBmZgorZGVmaW5pdGlvbi1mb3JlZ3JvdW5kID0gIzVlNWVmZgorc3Rkb3V0LWZvcmVncm91bmQgPSAjYzJkMWZhCitkZWZpbml0aW9uLWJhY2tncm91bmQgPSAjMDAyMjQwCitub3JtYWwtZm9yZWdyb3VuZCA9ICNGRkZGRkYKK2N1cnNvci1mb3JlZ3JvdW5kID0gI2ZmZmZmZgorc3Rkb3V0LWJhY2tncm91bmQgPSAjMDAyMjQwCitoaXQtZm9yZWdyb3VuZCA9ICMwMDIyNDAKK2NvbW1lbnQtYmFja2dyb3VuZCA9ICMwMDIyNDAKK2JyZWFrLWZvcmVncm91bmQgPSAjRkZGRkZGCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWcta2V5cy5kZWYgYi9MaWIvaWRsZWxpYi9jb25maWcta2V5cy5kZWYKaW5kZXggZmRjMzViYS4uM2JmY2I2OSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnLWtleXMuZGVmCisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZy1rZXlzLmRlZgpAQCAtMTMsMzcgKzEzLDM3IEBACiBwYXN0ZT08Q29udHJvbC1LZXktdj4gPENvbnRyb2wtS2V5LVY+CiBiZWdpbm5pbmctb2YtbGluZT0gPEtleS1Ib21lPgogY2VudGVyLWluc2VydD08Q29udHJvbC1LZXktbD4gPENvbnRyb2wtS2V5LUw+Ci1jbG9zZS1hbGwtd2luZG93cz08Q29udHJvbC1LZXktcT4KK2Nsb3NlLWFsbC13aW5kb3dzPTxDb250cm9sLUtleS1xPiA8Q29udHJvbC1LZXktUT4KIGNsb3NlLXdpbmRvdz08QWx0LUtleS1GND4gPE1ldGEtS2V5LUY0PgogZG8tbm90aGluZz08Q29udHJvbC1LZXktRjEyPgogZW5kLW9mLWZpbGU9PENvbnRyb2wtS2V5LWQ+IDxDb250cm9sLUtleS1EPgogcHl0aG9uLWRvY3M9PEtleS1GMT4KIHB5dGhvbi1jb250ZXh0LWhlbHA9PFNoaWZ0LUtleS1GMT4KLWhpc3RvcnktbmV4dD08QWx0LUtleS1uPiA8TWV0YS1LZXktbj4KLWhpc3RvcnktcHJldmlvdXM9PEFsdC1LZXktcD4gPE1ldGEtS2V5LXA+CitoaXN0b3J5LW5leHQ9PEFsdC1LZXktbj4gPE1ldGEtS2V5LW4+IDxBbHQtS2V5LU4+IDxNZXRhLUtleS1OPgoraGlzdG9yeS1wcmV2aW91cz08QWx0LUtleS1wPiA8TWV0YS1LZXktcD4gPEFsdC1LZXktUD4gPE1ldGEtS2V5LVA+CiBpbnRlcnJ1cHQtZXhlY3V0aW9uPTxDb250cm9sLUtleS1jPiA8Q29udHJvbC1LZXktQz4KIHZpZXctcmVzdGFydD08S2V5LUY2PgogcmVzdGFydC1zaGVsbD08Q29udHJvbC1LZXktRjY+Ci1vcGVuLWNsYXNzLWJyb3dzZXI9PEFsdC1LZXktYz4gPE1ldGEtS2V5LWM+IDxBbHQtS2V5LUM+Ci1vcGVuLW1vZHVsZT08QWx0LUtleS1tPiA8TWV0YS1LZXktbT4gPEFsdC1LZXktTT4KK29wZW4tY2xhc3MtYnJvd3Nlcj08QWx0LUtleS1jPiA8TWV0YS1LZXktYz4gPEFsdC1LZXktQz4gPE1ldGEtS2V5LUM+CitvcGVuLW1vZHVsZT08QWx0LUtleS1tPiA8TWV0YS1LZXktbT4gPEFsdC1LZXktTT4gPE1ldGEtS2V5LU0+CiBvcGVuLW5ldy13aW5kb3c9PENvbnRyb2wtS2V5LW4+IDxDb250cm9sLUtleS1OPgogb3Blbi13aW5kb3ctZnJvbS1maWxlPTxDb250cm9sLUtleS1vPiA8Q29udHJvbC1LZXktTz4KIHBsYWluLW5ld2xpbmUtYW5kLWluZGVudD08Q29udHJvbC1LZXktaj4gPENvbnRyb2wtS2V5LUo+CiBwcmludC13aW5kb3c9PENvbnRyb2wtS2V5LXA+IDxDb250cm9sLUtleS1QPgotcmVkbz08Q29udHJvbC1TaGlmdC1LZXktWj4KK3JlZG89PENvbnRyb2wtU2hpZnQtS2V5LVo+IDxDb250cm9sLVNoaWZ0LUtleS16PgogcmVtb3ZlLXNlbGVjdGlvbj08S2V5LUVzY2FwZT4KLXNhdmUtY29weS1vZi13aW5kb3ctYXMtZmlsZT08QWx0LVNoaWZ0LUtleS1TPgotc2F2ZS13aW5kb3ctYXMtZmlsZT08Q29udHJvbC1TaGlmdC1LZXktUz4KLXNhdmUtd2luZG93PTxDb250cm9sLUtleS1zPgotc2VsZWN0LWFsbD08Q29udHJvbC1LZXktYT4KK3NhdmUtY29weS1vZi13aW5kb3ctYXMtZmlsZT08QWx0LVNoaWZ0LUtleS1TPiA8QWx0LVNoaWZ0LUtleS1zPgorc2F2ZS13aW5kb3ctYXMtZmlsZT08Q29udHJvbC1TaGlmdC1LZXktUz4gPENvbnRyb2wtU2hpZnQtS2V5LXM+CitzYXZlLXdpbmRvdz08Q29udHJvbC1LZXktcz4gPENvbnRyb2wtS2V5LVM+CitzZWxlY3QtYWxsPTxDb250cm9sLUtleS1hPiA8Q29udHJvbC1LZXktQT4KIHRvZ2dsZS1hdXRvLWNvbG9yaW5nPTxDb250cm9sLUtleS1zbGFzaD4KIHVuZG89PENvbnRyb2wtS2V5LXo+IDxDb250cm9sLUtleS1aPgogZmluZD08Q29udHJvbC1LZXktZj4gPENvbnRyb2wtS2V5LUY+Ci1maW5kLWFnYWluPTxDb250cm9sLUtleS1nPiA8S2V5LUYzPgorZmluZC1hZ2Fpbj08Q29udHJvbC1LZXktZz4gPEtleS1GMz4gPENvbnRyb2wtS2V5LUc+CiBmaW5kLWluLWZpbGVzPTxBbHQtS2V5LUYzPiA8TWV0YS1LZXktRjM+CiBmaW5kLXNlbGVjdGlvbj08Q29udHJvbC1LZXktRjM+CiByZXBsYWNlPTxDb250cm9sLUtleS1oPiA8Q29udHJvbC1LZXktSD4KLWdvdG8tbGluZT08QWx0LUtleS1nPiA8TWV0YS1LZXktZz4KK2dvdG8tbGluZT08QWx0LUtleS1nPiA8TWV0YS1LZXktZz4gPEFsdC1LZXktRz4gPE1ldGEtS2V5LUc+CiBzbWFydC1iYWNrc3BhY2U9PEtleS1CYWNrU3BhY2U+CiBuZXdsaW5lLWFuZC1pbmRlbnQ9PEtleS1SZXR1cm4+IDxLZXktS1BfRW50ZXI+CiBzbWFydC1pbmRlbnQ9PEtleS1UYWI+CkBAIC01Myw4ICs1Myw4IEBACiB1bmNvbW1lbnQtcmVnaW9uPTxBbHQtS2V5LTQ+IDxNZXRhLUtleS00PgogdGFiaWZ5LXJlZ2lvbj08QWx0LUtleS01PiA8TWV0YS1LZXktNT4KIHVudGFiaWZ5LXJlZ2lvbj08QWx0LUtleS02PiA8TWV0YS1LZXktNj4KLXRvZ2dsZS10YWJzPTxBbHQtS2V5LXQ+IDxNZXRhLUtleS10PiA8QWx0LUtleS1UPgotY2hhbmdlLWluZGVudHdpZHRoPTxBbHQtS2V5LXU+IDxNZXRhLUtleS11PiA8QWx0LUtleS1VPgordG9nZ2xlLXRhYnM9PEFsdC1LZXktdD4gPE1ldGEtS2V5LXQ+IDxBbHQtS2V5LVQ+IDxNZXRhLUtleS1UPgorY2hhbmdlLWluZGVudHdpZHRoPTxBbHQtS2V5LXU+IDxNZXRhLUtleS11PiA8QWx0LUtleS1VPiA8TWV0YS1LZXktVT4KIGRlbC13b3JkLWxlZnQ9PENvbnRyb2wtS2V5LUJhY2tTcGFjZT4KIGRlbC13b3JkLXJpZ2h0PTxDb250cm9sLUtleS1EZWxldGU+CiAKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZy1tYWluLmRlZiBiL0xpYi9pZGxlbGliL2NvbmZpZy1tYWluLmRlZgppbmRleCA5NTQ2ZTJiLi44ZWJiYzFiIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWctbWFpbi5kZWYKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnLW1haW4uZGVmCkBAIC01MywxNCArNTMsMTEgQEAKIFtFZGl0b3JXaW5kb3ddCiB3aWR0aD0gODAKIGhlaWdodD0gNDAKLWZvbnQ9IGNvdXJpZXIKK2ZvbnQ9IFRrRml4ZWRGb250CiBmb250LXNpemU9IDEwCiBmb250LWJvbGQ9IDAKIGVuY29kaW5nPSBub25lCiAKLVtGb3JtYXRQYXJhZ3JhcGhdCi1wYXJhZ3JhcGg9NzAKLQogW0luZGVudF0KIHVzZS1zcGFjZXM9IDEKIG51bS1zcGFjZXM9IDQKQEAgLTY4LDYgKzY1LDggQEAKIFtUaGVtZV0KIGRlZmF1bHQ9IDEKIG5hbWU9IElETEUgQ2xhc3NpYworbmFtZTI9CisjIG5hbWUyIHNldCBpbiB1c2VyIGNvbmZpZy1tYWluLmNmZyBmb3IgdGhlbWVzIGFkZGVkIGFmdGVyIDIwMTUgT2N0IDEKIAogW0tleXNdCiBkZWZhdWx0PSAxCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9jb25maWdEaWFsb2cucHkKaW5kZXggZWZlNWM0My4uOWIxNjQ1OSAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnRGlhbG9nLnB5CisrKyBiL0xpYi9pZGxlbGliL2NvbmZpZ0RpYWxvZy5weQpAQCAtMTMsNTM0ICsxMyw1NzYgQEAKIGltcG9ydCB0a2ludGVyLm1lc3NhZ2Vib3ggYXMgdGtNZXNzYWdlQm94CiBpbXBvcnQgdGtpbnRlci5jb2xvcmNob29zZXIgYXMgdGtDb2xvckNob29zZXIKIGltcG9ydCB0a2ludGVyLmZvbnQgYXMgdGtGb250Ci1pbXBvcnQgY29weQogCiBmcm9tIGlkbGVsaWIuY29uZmlnSGFuZGxlciBpbXBvcnQgaWRsZUNvbmYKIGZyb20gaWRsZWxpYi5keW5PcHRpb25NZW51V2lkZ2V0IGltcG9ydCBEeW5PcHRpb25NZW51Ci1mcm9tIGlkbGVsaWIudGFiYmVkcGFnZXMgaW1wb3J0IFRhYmJlZFBhZ2VTZXQKIGZyb20gaWRsZWxpYi5rZXliaW5kaW5nRGlhbG9nIGltcG9ydCBHZXRLZXlzRGlhbG9nCiBmcm9tIGlkbGVsaWIuY29uZmlnU2VjdGlvbk5hbWVEaWFsb2cgaW1wb3J0IEdldENmZ1NlY3Rpb25OYW1lRGlhbG9nCiBmcm9tIGlkbGVsaWIuY29uZmlnSGVscFNvdXJjZUVkaXQgaW1wb3J0IEdldEhlbHBTb3VyY2VEaWFsb2cKK2Zyb20gaWRsZWxpYi50YWJiZWRwYWdlcyBpbXBvcnQgVGFiYmVkUGFnZVNldAorZnJvbSBpZGxlbGliLnRleHRWaWV3IGltcG9ydCB2aWV3X3RleHQKIGZyb20gaWRsZWxpYiBpbXBvcnQgbWFjb3N4U3VwcG9ydAogCiBjbGFzcyBDb25maWdEaWFsb2coVG9wbGV2ZWwpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50LHRpdGxlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCB0aXRsZT0nJywgX2h0ZXN0PUZhbHNlLCBfdXRlc3Q9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgX2h0ZXN0IC0gYm9vbCwgY2hhbmdlIGJveCBsb2NhdGlvbiB3aGVuIHJ1bm5pbmcgaHRlc3QKKyAgICAgICAgX3V0ZXN0IC0gYm9vbCwgZG9uJ3Qgd2FpdF93aW5kb3cgd2hlbiBydW5uaW5nIHVuaXR0ZXN0CisgICAgICAgICIiIgogICAgICAgICBUb3BsZXZlbC5fX2luaXRfXyhzZWxmLCBwYXJlbnQpCisgICAgICAgIHNlbGYucGFyZW50ID0gcGFyZW50CisgICAgICAgIGlmIF9odGVzdDoKKyAgICAgICAgICAgIHBhcmVudC5pbnN0YW5jZV9kaWN0ID0ge30KICAgICAgICAgc2VsZi53bV93aXRoZHJhdygpCiAKICAgICAgICAgc2VsZi5jb25maWd1cmUoYm9yZGVyd2lkdGg9NSkKLSAgICAgICAgc2VsZi50aXRsZSgnSURMRSBQcmVmZXJlbmNlcycpCi0gICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJSAocGFyZW50LndpbmZvX3Jvb3R4KCkrMjAsCi0gICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkrMzApKQorICAgICAgICBzZWxmLnRpdGxlKHRpdGxlIG9yICdJRExFIFByZWZlcmVuY2VzJykKKyAgICAgICAgc2VsZi5nZW9tZXRyeSgKKyAgICAgICAgICAgICAgICAiKyVkKyVkIiAlIChwYXJlbnQud2luZm9fcm9vdHgoKSArIDIwLAorICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsgKDMwIGlmIG5vdCBfaHRlc3QgZWxzZSAxNTApKSkKICAgICAgICAgI1RoZW1lIEVsZW1lbnRzLiBFYWNoIHRoZW1lIGVsZW1lbnQga2V5IGlzIGl0cyBkaXNwbGF5IG5hbWUuCiAgICAgICAgICNUaGUgZmlyc3QgdmFsdWUgb2YgdGhlIHR1cGxlIGlzIHRoZSBzYW1wbGUgYXJlYSB0YWcgbmFtZS4KICAgICAgICAgI1RoZSBzZWNvbmQgdmFsdWUgaXMgdGhlIGRpc3BsYXkgbmFtZSBsaXN0IHNvcnQgaW5kZXguCi0gICAgICAgIHNlbGYudGhlbWVFbGVtZW50cz17J05vcm1hbCBUZXh0JzooJ25vcm1hbCcsJzAwJyksCi0gICAgICAgICAgICAnUHl0aG9uIEtleXdvcmRzJzooJ2tleXdvcmQnLCcwMScpLAotICAgICAgICAgICAgJ1B5dGhvbiBEZWZpbml0aW9ucyc6KCdkZWZpbml0aW9uJywnMDInKSwKLSAgICAgICAgICAgICdQeXRob24gQnVpbHRpbnMnOignYnVpbHRpbicsICcwMycpLAotICAgICAgICAgICAgJ1B5dGhvbiBDb21tZW50cyc6KCdjb21tZW50JywnMDQnKSwKLSAgICAgICAgICAgICdQeXRob24gU3RyaW5ncyc6KCdzdHJpbmcnLCcwNScpLAotICAgICAgICAgICAgJ1NlbGVjdGVkIFRleHQnOignaGlsaXRlJywnMDYnKSwKLSAgICAgICAgICAgICdGb3VuZCBUZXh0JzooJ2hpdCcsJzA3JyksCi0gICAgICAgICAgICAnQ3Vyc29yJzooJ2N1cnNvcicsJzA4JyksCi0gICAgICAgICAgICAnRXJyb3IgVGV4dCc6KCdlcnJvcicsJzA5JyksCi0gICAgICAgICAgICAnU2hlbGwgTm9ybWFsIFRleHQnOignY29uc29sZScsJzEwJyksCi0gICAgICAgICAgICAnU2hlbGwgU3Rkb3V0IFRleHQnOignc3Rkb3V0JywnMTEnKSwKLSAgICAgICAgICAgICdTaGVsbCBTdGRlcnIgVGV4dCc6KCdzdGRlcnInLCcxMicpLAorICAgICAgICBzZWxmLnRoZW1lRWxlbWVudHM9eworICAgICAgICAgICAgJ05vcm1hbCBUZXh0JzogKCdub3JtYWwnLCAnMDAnKSwKKyAgICAgICAgICAgICdQeXRob24gS2V5d29yZHMnOiAoJ2tleXdvcmQnLCAnMDEnKSwKKyAgICAgICAgICAgICdQeXRob24gRGVmaW5pdGlvbnMnOiAoJ2RlZmluaXRpb24nLCAnMDInKSwKKyAgICAgICAgICAgICdQeXRob24gQnVpbHRpbnMnOiAoJ2J1aWx0aW4nLCAnMDMnKSwKKyAgICAgICAgICAgICdQeXRob24gQ29tbWVudHMnOiAoJ2NvbW1lbnQnLCAnMDQnKSwKKyAgICAgICAgICAgICdQeXRob24gU3RyaW5ncyc6ICgnc3RyaW5nJywgJzA1JyksCisgICAgICAgICAgICAnU2VsZWN0ZWQgVGV4dCc6ICgnaGlsaXRlJywgJzA2JyksCisgICAgICAgICAgICAnRm91bmQgVGV4dCc6ICgnaGl0JywgJzA3JyksCisgICAgICAgICAgICAnQ3Vyc29yJzogKCdjdXJzb3InLCAnMDgnKSwKKyAgICAgICAgICAgICdFZGl0b3IgQnJlYWtwb2ludCc6ICgnYnJlYWsnLCAnMDknKSwKKyAgICAgICAgICAgICdTaGVsbCBOb3JtYWwgVGV4dCc6ICgnY29uc29sZScsICcxMCcpLAorICAgICAgICAgICAgJ1NoZWxsIEVycm9yIFRleHQnOiAoJ2Vycm9yJywgJzExJyksCisgICAgICAgICAgICAnU2hlbGwgU3Rkb3V0IFRleHQnOiAoJ3N0ZG91dCcsICcxMicpLAorICAgICAgICAgICAgJ1NoZWxsIFN0ZGVyciBUZXh0JzogKCdzdGRlcnInLCAnMTMnKSwKICAgICAgICAgICAgIH0KICAgICAgICAgc2VsZi5SZXNldENoYW5nZWRJdGVtcygpICNsb2FkIGluaXRpYWwgdmFsdWVzIGluIGNoYW5nZWQgaXRlbXMgZGljdAogICAgICAgICBzZWxmLkNyZWF0ZVdpZGdldHMoKQotICAgICAgICBzZWxmLnJlc2l6YWJsZShoZWlnaHQ9RkFMU0Usd2lkdGg9RkFMU0UpCisgICAgICAgIHNlbGYucmVzaXphYmxlKGhlaWdodD1GQUxTRSwgd2lkdGg9RkFMU0UpCiAgICAgICAgIHNlbGYudHJhbnNpZW50KHBhcmVudCkKICAgICAgICAgc2VsZi5ncmFiX3NldCgpCiAgICAgICAgIHNlbGYucHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBzZWxmLkNhbmNlbCkKLSAgICAgICAgc2VsZi5wYXJlbnQgPSBwYXJlbnQKICAgICAgICAgc2VsZi50YWJQYWdlcy5mb2N1c19zZXQoKQogICAgICAgICAja2V5IGJpbmRpbmdzIGZvciB0aGlzIGRpYWxvZwotICAgICAgICAjc2VsZi5iaW5kKCc8RXNjYXBlPicsc2VsZi5DYW5jZWwpICNkaXNtaXNzIGRpYWxvZywgbm8gc2F2ZQotICAgICAgICAjc2VsZi5iaW5kKCc8QWx0LWE+JyxzZWxmLkFwcGx5KSAjYXBwbHkgY2hhbmdlcywgc2F2ZQotICAgICAgICAjc2VsZi5iaW5kKCc8RjE+JyxzZWxmLkhlbHApICNjb250ZXh0IGhlbHAKKyAgICAgICAgI3NlbGYuYmluZCgnPEVzY2FwZT4nLCBzZWxmLkNhbmNlbCkgI2Rpc21pc3MgZGlhbG9nLCBubyBzYXZlCisgICAgICAgICNzZWxmLmJpbmQoJzxBbHQtYT4nLCBzZWxmLkFwcGx5KSAjYXBwbHkgY2hhbmdlcywgc2F2ZQorICAgICAgICAjc2VsZi5iaW5kKCc8RjE+Jywgc2VsZi5IZWxwKSAjY29udGV4dCBoZWxwCiAgICAgICAgIHNlbGYuTG9hZENvbmZpZ3MoKQogICAgICAgICBzZWxmLkF0dGFjaFZhckNhbGxiYWNrcygpICNhdm9pZCBjYWxsYmFja3MgZHVyaW5nIExvYWRDb25maWdzCiAKLSAgICAgICAgc2VsZi53bV9kZWljb25pZnkoKQotICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKKyAgICAgICAgaWYgbm90IF91dGVzdDoKKyAgICAgICAgICAgIHNlbGYud21fZGVpY29uaWZ5KCkKKyAgICAgICAgICAgIHNlbGYud2FpdF93aW5kb3coKQogCiAgICAgZGVmIENyZWF0ZVdpZGdldHMoc2VsZik6CiAgICAgICAgIHNlbGYudGFiUGFnZXMgPSBUYWJiZWRQYWdlU2V0KHNlbGYsCi0gICAgICAgICAgICAgICAgcGFnZV9uYW1lcz1bJ0ZvbnRzL1RhYnMnLCdIaWdobGlnaHRpbmcnLCdLZXlzJywnR2VuZXJhbCddKQotICAgICAgICBmcmFtZUFjdGlvbkJ1dHRvbnMgPSBGcmFtZShzZWxmLHBhZHk9MikKLSAgICAgICAgI2FjdGlvbiBidXR0b25zCi0KLSAgICAgICAgaWYgbWFjb3N4U3VwcG9ydC5ydW5uaW5nQXNPU1hBcHAoKToKLSAgICAgICAgICAgICMgU3VycHJlc3MgdGhlIHBhZHggYW5kIHBhZHkgYXJndW1lbnRzIHdoZW4KLSAgICAgICAgICAgICMgcnVubmluZyBhcyBJRExFLmFwcCwgb3RoZXJ3aXNlIHRoZSB0ZXh0Ci0gICAgICAgICAgICAjIG9uIHRoZXNlIGJ1dHRvbnMgd2lsbCBub3QgYmUgcmVhZGFibGUuCi0gICAgICAgICAgICBleHRyYUt3ZHM9e30KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGV4dHJhS3dkcz1kaWN0KHBhZHg9NiwgcGFkeT0zKQotCi0jIENvbW1lbnQgb3V0IGJ1dHRvbiBjcmVhdGlvbiBhbmQgcGFja2luZyB1bnRpbCBpbXBsZW1lbnQgc2VsZi5IZWxwCi0jIyAgICAgICAgc2VsZi5idXR0b25IZWxwID0gQnV0dG9uKGZyYW1lQWN0aW9uQnV0dG9ucyx0ZXh0PSdIZWxwJywKLSMjICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5IZWxwLHRha2Vmb2N1cz1GQUxTRSwKLSMjICAgICAgICAgICAgICAgICoqZXh0cmFLd2RzKQotICAgICAgICBzZWxmLmJ1dHRvbk9rID0gQnV0dG9uKGZyYW1lQWN0aW9uQnV0dG9ucyx0ZXh0PSdPaycsCi0gICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLk9rLHRha2Vmb2N1cz1GQUxTRSwKLSAgICAgICAgICAgICAgICAqKmV4dHJhS3dkcykKLSAgICAgICAgc2VsZi5idXR0b25BcHBseSA9IEJ1dHRvbihmcmFtZUFjdGlvbkJ1dHRvbnMsdGV4dD0nQXBwbHknLAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5BcHBseSx0YWtlZm9jdXM9RkFMU0UsCi0gICAgICAgICAgICAgICAgKipleHRyYUt3ZHMpCi0gICAgICAgIHNlbGYuYnV0dG9uQ2FuY2VsID0gQnV0dG9uKGZyYW1lQWN0aW9uQnV0dG9ucyx0ZXh0PSdDYW5jZWwnLAotICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5DYW5jZWwsdGFrZWZvY3VzPUZBTFNFLAotICAgICAgICAgICAgICAgICoqZXh0cmFLd2RzKQorICAgICAgICAgICAgICAgIHBhZ2VfbmFtZXM9WydGb250cy9UYWJzJywgJ0hpZ2hsaWdodGluZycsICdLZXlzJywgJ0dlbmVyYWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeHRlbnNpb25zJ10pCisgICAgICAgIHNlbGYudGFiUGFnZXMucGFjayhzaWRlPVRPUCwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKICAgICAgICAgc2VsZi5DcmVhdGVQYWdlRm9udFRhYigpCiAgICAgICAgIHNlbGYuQ3JlYXRlUGFnZUhpZ2hsaWdodCgpCiAgICAgICAgIHNlbGYuQ3JlYXRlUGFnZUtleXMoKQogICAgICAgICBzZWxmLkNyZWF0ZVBhZ2VHZW5lcmFsKCkKLSMjICAgICAgICBzZWxmLmJ1dHRvbkhlbHAucGFjayhzaWRlPVJJR0hULHBhZHg9NSkKLSAgICAgICAgc2VsZi5idXR0b25Pay5wYWNrKHNpZGU9TEVGVCxwYWR4PTUpCi0gICAgICAgIHNlbGYuYnV0dG9uQXBwbHkucGFjayhzaWRlPUxFRlQscGFkeD01KQotICAgICAgICBzZWxmLmJ1dHRvbkNhbmNlbC5wYWNrKHNpZGU9TEVGVCxwYWR4PTUpCi0gICAgICAgIGZyYW1lQWN0aW9uQnV0dG9ucy5wYWNrKHNpZGU9Qk9UVE9NKQotICAgICAgICBGcmFtZShzZWxmLCBoZWlnaHQ9MiwgYm9yZGVyd2lkdGg9MCkucGFjayhzaWRlPUJPVFRPTSkKLSAgICAgICAgc2VsZi50YWJQYWdlcy5wYWNrKHNpZGU9VE9QLGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKKyAgICAgICAgc2VsZi5DcmVhdGVQYWdlRXh0ZW5zaW9ucygpCisgICAgICAgIHNlbGYuY3JlYXRlX2FjdGlvbl9idXR0b25zKCkucGFjayhzaWRlPUJPVFRPTSkKKworICAgIGRlZiBjcmVhdGVfYWN0aW9uX2J1dHRvbnMoc2VsZik6CisgICAgICAgIGlmIG1hY29zeFN1cHBvcnQuaXNBcXVhVGsoKToKKyAgICAgICAgICAgICMgQ2hhbmdpbmcgdGhlIGRlZmF1bHQgcGFkZGluZyBvbiBPU1ggcmVzdWx0cyBpbiB1bnJlYWRhYmxlCisgICAgICAgICAgICAjIHRleHQgaW4gdGhlIGJ1dHRvbnMKKyAgICAgICAgICAgIHBhZGRpbmdBcmdzID0ge30KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhZGRpbmdBcmdzID0geydwYWR4Jzo2LCAncGFkeSc6M30KKyAgICAgICAgb3V0ZXIgPSBGcmFtZShzZWxmLCBwYWR5PTIpCisgICAgICAgIGJ1dHRvbnMgPSBGcmFtZShvdXRlciwgcGFkeT0yKQorICAgICAgICBmb3IgdHh0LCBjbWQgaW4gKAorICAgICAgICAgICAgKCdPaycsIHNlbGYuT2spLAorICAgICAgICAgICAgKCdBcHBseScsIHNlbGYuQXBwbHkpLAorICAgICAgICAgICAgKCdDYW5jZWwnLCBzZWxmLkNhbmNlbCksCisgICAgICAgICAgICAoJ0hlbHAnLCBzZWxmLkhlbHApKToKKyAgICAgICAgICAgIEJ1dHRvbihidXR0b25zLCB0ZXh0PXR4dCwgY29tbWFuZD1jbWQsIHRha2Vmb2N1cz1GQUxTRSwKKyAgICAgICAgICAgICAgICAgICAqKnBhZGRpbmdBcmdzKS5wYWNrKHNpZGU9TEVGVCwgcGFkeD01KQorICAgICAgICAjIGFkZCBzcGFjZSBhYm92ZSBidXR0b25zCisgICAgICAgIEZyYW1lKG91dGVyLCBoZWlnaHQ9MiwgYm9yZGVyd2lkdGg9MCkucGFjayhzaWRlPVRPUCkKKyAgICAgICAgYnV0dG9ucy5wYWNrKHNpZGU9Qk9UVE9NKQorICAgICAgICByZXR1cm4gb3V0ZXIKIAogICAgIGRlZiBDcmVhdGVQYWdlRm9udFRhYihzZWxmKToKLSAgICAgICAgI3RrVmFycwotICAgICAgICBzZWxmLmZvbnRTaXplPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmZvbnRCb2xkPUJvb2xlYW5WYXIoc2VsZikKLSAgICAgICAgc2VsZi5mb250TmFtZT1TdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi5zcGFjZU51bT1JbnRWYXIoc2VsZikKLSAgICAgICAgc2VsZi5lZGl0Rm9udD10a0ZvbnQuRm9udChzZWxmLCgnY291cmllcicsMTAsJ25vcm1hbCcpKQorICAgICAgICBwYXJlbnQgPSBzZWxmLnBhcmVudAorICAgICAgICBzZWxmLmZvbnRTaXplID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5mb250Qm9sZCA9IEJvb2xlYW5WYXIocGFyZW50KQorICAgICAgICBzZWxmLmZvbnROYW1lID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5zcGFjZU51bSA9IEludFZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuZWRpdEZvbnQgPSB0a0ZvbnQuRm9udChwYXJlbnQsICgnY291cmllcicsIDEwLCAnbm9ybWFsJykpCisKICAgICAgICAgIyN3aWRnZXQgY3JlYXRpb24KICAgICAgICAgI2JvZHkgZnJhbWUKLSAgICAgICAgZnJhbWU9c2VsZi50YWJQYWdlcy5wYWdlc1snRm9udHMvVGFicyddLmZyYW1lCisgICAgICAgIGZyYW1lID0gc2VsZi50YWJQYWdlcy5wYWdlc1snRm9udHMvVGFicyddLmZyYW1lCiAgICAgICAgICNib2R5IHNlY3Rpb24gZnJhbWVzCi0gICAgICAgIGZyYW1lRm9udD1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEJhc2UgRWRpdG9yIEZvbnQgJykKLSAgICAgICAgZnJhbWVJbmRlbnQ9TGFiZWxGcmFtZShmcmFtZSxib3JkZXJ3aWR0aD0yLHJlbGllZj1HUk9PVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEluZGVudGF0aW9uIFdpZHRoICcpCisgICAgICAgIGZyYW1lRm9udCA9IExhYmVsRnJhbWUoCisgICAgICAgICAgICAgICAgZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUsIHRleHQ9JyBCYXNlIEVkaXRvciBGb250ICcpCisgICAgICAgIGZyYW1lSW5kZW50ID0gTGFiZWxGcmFtZSgKKyAgICAgICAgICAgICAgICBmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwgdGV4dD0nIEluZGVudGF0aW9uIFdpZHRoICcpCiAgICAgICAgICNmcmFtZUZvbnQKLSAgICAgICAgZnJhbWVGb250TmFtZT1GcmFtZShmcmFtZUZvbnQpCi0gICAgICAgIGZyYW1lRm9udFBhcmFtPUZyYW1lKGZyYW1lRm9udCkKLSAgICAgICAgbGFiZWxGb250TmFtZVRpdGxlPUxhYmVsKGZyYW1lRm9udE5hbWUsanVzdGlmeT1MRUZULAotICAgICAgICAgICAgICAgIHRleHQ9J0ZvbnQgRmFjZSA6JykKLSAgICAgICAgc2VsZi5saXN0Rm9udE5hbWU9TGlzdGJveChmcmFtZUZvbnROYW1lLGhlaWdodD01LHRha2Vmb2N1cz1GQUxTRSwKLSAgICAgICAgICAgICAgICBleHBvcnRzZWxlY3Rpb249RkFMU0UpCi0gICAgICAgIHNlbGYubGlzdEZvbnROYW1lLmJpbmQoJzxCdXR0b25SZWxlYXNlLTE+JyxzZWxmLk9uTGlzdEZvbnRCdXR0b25SZWxlYXNlKQotICAgICAgICBzY3JvbGxGb250PVNjcm9sbGJhcihmcmFtZUZvbnROYW1lKQorICAgICAgICBmcmFtZUZvbnROYW1lID0gRnJhbWUoZnJhbWVGb250KQorICAgICAgICBmcmFtZUZvbnRQYXJhbSA9IEZyYW1lKGZyYW1lRm9udCkKKyAgICAgICAgbGFiZWxGb250TmFtZVRpdGxlID0gTGFiZWwoCisgICAgICAgICAgICAgICAgZnJhbWVGb250TmFtZSwganVzdGlmeT1MRUZULCB0ZXh0PSdGb250IEZhY2UgOicpCisgICAgICAgIHNlbGYubGlzdEZvbnROYW1lID0gTGlzdGJveCgKKyAgICAgICAgICAgICAgICBmcmFtZUZvbnROYW1lLCBoZWlnaHQ9NSwgdGFrZWZvY3VzPUZBTFNFLCBleHBvcnRzZWxlY3Rpb249RkFMU0UpCisgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLmJpbmQoCisgICAgICAgICAgICAgICAgJzxCdXR0b25SZWxlYXNlLTE+Jywgc2VsZi5Pbkxpc3RGb250QnV0dG9uUmVsZWFzZSkKKyAgICAgICAgc2Nyb2xsRm9udCA9IFNjcm9sbGJhcihmcmFtZUZvbnROYW1lKQogICAgICAgICBzY3JvbGxGb250LmNvbmZpZyhjb21tYW5kPXNlbGYubGlzdEZvbnROYW1lLnl2aWV3KQogICAgICAgICBzZWxmLmxpc3RGb250TmFtZS5jb25maWcoeXNjcm9sbGNvbW1hbmQ9c2Nyb2xsRm9udC5zZXQpCi0gICAgICAgIGxhYmVsRm9udFNpemVUaXRsZT1MYWJlbChmcmFtZUZvbnRQYXJhbSx0ZXh0PSdTaXplIDonKQotICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZT1EeW5PcHRpb25NZW51KGZyYW1lRm9udFBhcmFtLHNlbGYuZm9udFNpemUsTm9uZSwKLSAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRGb250U2FtcGxlKQotICAgICAgICBjaGVja0ZvbnRCb2xkPUNoZWNrYnV0dG9uKGZyYW1lRm9udFBhcmFtLHZhcmlhYmxlPXNlbGYuZm9udEJvbGQsCi0gICAgICAgICAgICBvbnZhbHVlPTEsb2ZmdmFsdWU9MCx0ZXh0PSdCb2xkJyxjb21tYW5kPXNlbGYuU2V0Rm9udFNhbXBsZSkKLSAgICAgICAgZnJhbWVGb250U2FtcGxlPUZyYW1lKGZyYW1lRm9udCxyZWxpZWY9U09MSUQsYm9yZGVyd2lkdGg9MSkKLSAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGU9TGFiZWwoZnJhbWVGb250U2FtcGxlLAotICAgICAgICAgICAgICAgIHRleHQ9J0FhQmJDY0RkRWVcbkZmR2dIaElpSmpLXG4xMjM0NTY3ODkwXG4jOis9KCl7fVtdJywKLSAgICAgICAgICAgICAgICBqdXN0aWZ5PUxFRlQsZm9udD1zZWxmLmVkaXRGb250KQorICAgICAgICBsYWJlbEZvbnRTaXplVGl0bGUgPSBMYWJlbChmcmFtZUZvbnRQYXJhbSwgdGV4dD0nU2l6ZSA6JykKKyAgICAgICAgc2VsZi5vcHRNZW51Rm9udFNpemUgPSBEeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIGZyYW1lRm9udFBhcmFtLCBzZWxmLmZvbnRTaXplLCBOb25lLCBjb21tYW5kPXNlbGYuU2V0Rm9udFNhbXBsZSkKKyAgICAgICAgY2hlY2tGb250Qm9sZCA9IENoZWNrYnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lRm9udFBhcmFtLCB2YXJpYWJsZT1zZWxmLmZvbnRCb2xkLCBvbnZhbHVlPTEsCisgICAgICAgICAgICAgICAgb2ZmdmFsdWU9MCwgdGV4dD0nQm9sZCcsIGNvbW1hbmQ9c2VsZi5TZXRGb250U2FtcGxlKQorICAgICAgICBmcmFtZUZvbnRTYW1wbGUgPSBGcmFtZShmcmFtZUZvbnQsIHJlbGllZj1TT0xJRCwgYm9yZGVyd2lkdGg9MSkKKyAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGUgPSBMYWJlbCgKKyAgICAgICAgICAgICAgICBmcmFtZUZvbnRTYW1wbGUsIGp1c3RpZnk9TEVGVCwgZm9udD1zZWxmLmVkaXRGb250LAorICAgICAgICAgICAgICAgIHRleHQ9J0FhQmJDY0RkRWVcbkZmR2dIaElpSmpLXG4xMjM0NTY3ODkwXG4jOis9KCl7fVtdJykKICAgICAgICAgI2ZyYW1lSW5kZW50Ci0gICAgICAgIGZyYW1lSW5kZW50U2l6ZT1GcmFtZShmcmFtZUluZGVudCkKLSAgICAgICAgbGFiZWxTcGFjZU51bVRpdGxlPUxhYmVsKGZyYW1lSW5kZW50U2l6ZSwganVzdGlmeT1MRUZULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nUHl0aG9uIFN0YW5kYXJkOiA0IFNwYWNlcyEnKQotICAgICAgICBzZWxmLnNjYWxlU3BhY2VOdW09U2NhbGUoZnJhbWVJbmRlbnRTaXplLCB2YXJpYWJsZT1zZWxmLnNwYWNlTnVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZW50PSdob3Jpem9udGFsJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tpbnRlcnZhbD0yLCBmcm9tXz0yLCB0bz0xNikKKyAgICAgICAgZnJhbWVJbmRlbnRTaXplID0gRnJhbWUoZnJhbWVJbmRlbnQpCisgICAgICAgIGxhYmVsU3BhY2VOdW1UaXRsZSA9IExhYmVsKAorICAgICAgICAgICAgICAgIGZyYW1lSW5kZW50U2l6ZSwganVzdGlmeT1MRUZULAorICAgICAgICAgICAgICAgIHRleHQ9J1B5dGhvbiBTdGFuZGFyZDogNCBTcGFjZXMhJykKKyAgICAgICAgc2VsZi5zY2FsZVNwYWNlTnVtID0gU2NhbGUoCisgICAgICAgICAgICAgICAgZnJhbWVJbmRlbnRTaXplLCB2YXJpYWJsZT1zZWxmLnNwYWNlTnVtLAorICAgICAgICAgICAgICAgIG9yaWVudD0naG9yaXpvbnRhbCcsIHRpY2tpbnRlcnZhbD0yLCBmcm9tXz0yLCB0bz0xNikKKwogICAgICAgICAjd2lkZ2V0IHBhY2tpbmcKICAgICAgICAgI2JvZHkKLSAgICAgICAgZnJhbWVGb250LnBhY2soc2lkZT1MRUZULHBhZHg9NSxwYWR5PTUsZXhwYW5kPVRSVUUsZmlsbD1CT1RIKQotICAgICAgICBmcmFtZUluZGVudC5wYWNrKHNpZGU9TEVGVCxwYWR4PTUscGFkeT01LGZpbGw9WSkKKyAgICAgICAgZnJhbWVGb250LnBhY2soc2lkZT1MRUZULCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKKyAgICAgICAgZnJhbWVJbmRlbnQucGFjayhzaWRlPUxFRlQsIHBhZHg9NSwgcGFkeT01LCBmaWxsPVkpCiAgICAgICAgICNmcmFtZUZvbnQKLSAgICAgICAgZnJhbWVGb250TmFtZS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZmlsbD1YKQotICAgICAgICBmcmFtZUZvbnRQYXJhbS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZmlsbD1YKQotICAgICAgICBsYWJlbEZvbnROYW1lVGl0bGUucGFjayhzaWRlPVRPUCxhbmNob3I9VykKLSAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUucGFjayhzaWRlPUxFRlQsZXhwYW5kPVRSVUUsZmlsbD1YKQotICAgICAgICBzY3JvbGxGb250LnBhY2soc2lkZT1MRUZULGZpbGw9WSkKLSAgICAgICAgbGFiZWxGb250U2l6ZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XKQotICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZS5wYWNrKHNpZGU9TEVGVCxhbmNob3I9VykKLSAgICAgICAgY2hlY2tGb250Qm9sZC5wYWNrKHNpZGU9TEVGVCxhbmNob3I9VyxwYWR4PTIwKQotICAgICAgICBmcmFtZUZvbnRTYW1wbGUucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKLSAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGUucGFjayhleHBhbmQ9VFJVRSxmaWxsPUJPVEgpCisgICAgICAgIGZyYW1lRm9udE5hbWUucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WCkKKyAgICAgICAgZnJhbWVGb250UGFyYW0ucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WCkKKyAgICAgICAgbGFiZWxGb250TmFtZVRpdGxlLnBhY2soc2lkZT1UT1AsIGFuY2hvcj1XKQorICAgICAgICBzZWxmLmxpc3RGb250TmFtZS5wYWNrKHNpZGU9TEVGVCwgZXhwYW5kPVRSVUUsIGZpbGw9WCkKKyAgICAgICAgc2Nyb2xsRm9udC5wYWNrKHNpZGU9TEVGVCwgZmlsbD1ZKQorICAgICAgICBsYWJlbEZvbnRTaXplVGl0bGUucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XKQorICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZS5wYWNrKHNpZGU9TEVGVCwgYW5jaG9yPVcpCisgICAgICAgIGNoZWNrRm9udEJvbGQucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XLCBwYWR4PTIwKQorICAgICAgICBmcmFtZUZvbnRTYW1wbGUucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGV4cGFuZD1UUlVFLCBmaWxsPUJPVEgpCisgICAgICAgIHNlbGYubGFiZWxGb250U2FtcGxlLnBhY2soZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKICAgICAgICAgI2ZyYW1lSW5kZW50Ci0gICAgICAgIGZyYW1lSW5kZW50U2l6ZS5wYWNrKHNpZGU9VE9QLGZpbGw9WCkKLSAgICAgICAgbGFiZWxTcGFjZU51bVRpdGxlLnBhY2soc2lkZT1UT1AsYW5jaG9yPVcscGFkeD01KQotICAgICAgICBzZWxmLnNjYWxlU3BhY2VOdW0ucGFjayhzaWRlPVRPUCxwYWR4PTUsZmlsbD1YKQorICAgICAgICBmcmFtZUluZGVudFNpemUucGFjayhzaWRlPVRPUCwgZmlsbD1YKQorICAgICAgICBsYWJlbFNwYWNlTnVtVGl0bGUucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcsIHBhZHg9NSkKKyAgICAgICAgc2VsZi5zY2FsZVNwYWNlTnVtLnBhY2soc2lkZT1UT1AsIHBhZHg9NSwgZmlsbD1YKQogICAgICAgICByZXR1cm4gZnJhbWUKIAogICAgIGRlZiBDcmVhdGVQYWdlSGlnaGxpZ2h0KHNlbGYpOgotICAgICAgICBzZWxmLmJ1aWx0aW5UaGVtZT1TdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi5jdXN0b21UaGVtZT1TdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi5mZ0hpbGl0ZT1Cb29sZWFuVmFyKHNlbGYpCi0gICAgICAgIHNlbGYuY29sb3VyPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmZvbnROYW1lPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluPUJvb2xlYW5WYXIoc2VsZikKLSAgICAgICAgc2VsZi5oaWdobGlnaHRUYXJnZXQ9U3RyaW5nVmFyKHNlbGYpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIHNlbGYuYnVpbHRpblRoZW1lID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5jdXN0b21UaGVtZSA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuZmdIaWxpdGUgPSBCb29sZWFuVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5jb2xvdXIgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmZvbnROYW1lID0gU3RyaW5nVmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi50aGVtZUlzQnVpbHRpbiA9IEJvb2xlYW5WYXIocGFyZW50KQorICAgICAgICBzZWxmLmhpZ2hsaWdodFRhcmdldCA9IFN0cmluZ1ZhcihwYXJlbnQpCisKICAgICAgICAgIyN3aWRnZXQgY3JlYXRpb24KICAgICAgICAgI2JvZHkgZnJhbWUKLSAgICAgICAgZnJhbWU9c2VsZi50YWJQYWdlcy5wYWdlc1snSGlnaGxpZ2h0aW5nJ10uZnJhbWUKKyAgICAgICAgZnJhbWUgPSBzZWxmLnRhYlBhZ2VzLnBhZ2VzWydIaWdobGlnaHRpbmcnXS5mcmFtZQogICAgICAgICAjYm9keSBzZWN0aW9uIGZyYW1lcwotICAgICAgICBmcmFtZUN1c3RvbT1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgQ3VzdG9tIEhpZ2hsaWdodGluZyAnKQotICAgICAgICBmcmFtZVRoZW1lPUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEhpZ2hsaWdodGluZyBUaGVtZSAnKQorICAgICAgICBmcmFtZUN1c3RvbSA9IExhYmVsRnJhbWUoZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgQ3VzdG9tIEhpZ2hsaWdodGluZyAnKQorICAgICAgICBmcmFtZVRoZW1lID0gTGFiZWxGcmFtZShmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEhpZ2hsaWdodGluZyBUaGVtZSAnKQogICAgICAgICAjZnJhbWVDdXN0b20KLSAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlPVRleHQoZnJhbWVDdXN0b20scmVsaWVmPVNPTElELGJvcmRlcndpZHRoPTEsCi0gICAgICAgICAgICBmb250PSgnY291cmllcicsMTIsJycpLGN1cnNvcj0naGFuZDInLHdpZHRoPTIxLGhlaWdodD0xMSwKLSAgICAgICAgICAgIHRha2Vmb2N1cz1GQUxTRSxoaWdobGlnaHR0aGlja25lc3M9MCx3cmFwPU5PTkUpCisgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZT1UZXh0KAorICAgICAgICAgICAgICAgIGZyYW1lQ3VzdG9tLCByZWxpZWY9U09MSUQsIGJvcmRlcndpZHRoPTEsCisgICAgICAgICAgICAgICAgZm9udD0oJ2NvdXJpZXInLCAxMiwgJycpLCBjdXJzb3I9J2hhbmQyJywgd2lkdGg9MjEsIGhlaWdodD0xMSwKKyAgICAgICAgICAgICAgICB0YWtlZm9jdXM9RkFMU0UsIGhpZ2hsaWdodHRoaWNrbmVzcz0wLCB3cmFwPU5PTkUpCiAgICAgICAgIHRleHQ9c2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlCi0gICAgICAgIHRleHQuYmluZCgnPERvdWJsZS1CdXR0b24tMT4nLGxhbWJkYSBlOiAnYnJlYWsnKQotICAgICAgICB0ZXh0LmJpbmQoJzxCMS1Nb3Rpb24+JyxsYW1iZGEgZTogJ2JyZWFrJykKLSAgICAgICAgdGV4dEFuZFRhZ3M9KCgnI3lvdSBjYW4gY2xpY2sgaGVyZScsJ2NvbW1lbnQnKSwoJ1xuJywnbm9ybWFsJyksCi0gICAgICAgICAgICAoJyN0byBjaG9vc2UgaXRlbXMnLCdjb21tZW50JyksKCdcbicsJ25vcm1hbCcpLCgnZGVmJywna2V5d29yZCcpLAotICAgICAgICAgICAgKCcgJywnbm9ybWFsJyksKCdmdW5jJywnZGVmaW5pdGlvbicpLCgnKHBhcmFtKTonLCdub3JtYWwnKSwKLSAgICAgICAgICAgICgnXG4gICcsJ25vcm1hbCcpLCgnIiIic3RyaW5nIiIiJywnc3RyaW5nJyksKCdcbiAgdmFyMCA9ICcsJ25vcm1hbCcpLAotICAgICAgICAgICAgKCInc3RyaW5nJyIsJ3N0cmluZycpLCgnXG4gIHZhcjEgPSAnLCdub3JtYWwnKSwoIidzZWxlY3RlZCciLCdoaWxpdGUnKSwKLSAgICAgICAgICAgICgnXG4gIHZhcjIgPSAnLCdub3JtYWwnKSwoIidmb3VuZCciLCdoaXQnKSwKLSAgICAgICAgICAgICgnXG4gIHZhcjMgPSAnLCdub3JtYWwnKSwoJ2xpc3QnLCAnYnVpbHRpbicpLCAoJygnLCdub3JtYWwnKSwKLSAgICAgICAgICAgICgnTm9uZScsICdrZXl3b3JkJyksKCcpXG5cbicsJ25vcm1hbCcpLAotICAgICAgICAgICAgKCcgZXJyb3IgJywnZXJyb3InKSwoJyAnLCdub3JtYWwnKSwoJ2N1cnNvciB8JywnY3Vyc29yJyksCi0gICAgICAgICAgICAoJ1xuICcsJ25vcm1hbCcpLCgnc2hlbGwnLCdjb25zb2xlJyksKCcgJywnbm9ybWFsJyksKCdzdGRvdXQnLCdzdGRvdXQnKSwKLSAgICAgICAgICAgICgnICcsJ25vcm1hbCcpLCgnc3RkZXJyJywnc3RkZXJyJyksKCdcbicsJ25vcm1hbCcpKQorICAgICAgICB0ZXh0LmJpbmQoJzxEb3VibGUtQnV0dG9uLTE+JywgbGFtYmRhIGU6ICdicmVhaycpCisgICAgICAgIHRleHQuYmluZCgnPEIxLU1vdGlvbj4nLCBsYW1iZGEgZTogJ2JyZWFrJykKKyAgICAgICAgdGV4dEFuZFRhZ3M9KAorICAgICAgICAgICAgKCcjeW91IGNhbiBjbGljayBoZXJlJywgJ2NvbW1lbnQnKSwgKCdcbicsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnI3RvIGNob29zZSBpdGVtcycsICdjb21tZW50JyksICgnXG4nLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJ2RlZicsICdrZXl3b3JkJyksICgnICcsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnZnVuYycsICdkZWZpbml0aW9uJyksICgnKHBhcmFtKTpcbiAgJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCciIiJzdHJpbmciIiInLCAnc3RyaW5nJyksICgnXG4gIHZhcjAgPSAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoIidzdHJpbmcnIiwgJ3N0cmluZycpLCAoJ1xuICB2YXIxID0gJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCInc2VsZWN0ZWQnIiwgJ2hpbGl0ZScpLCAoJ1xuICB2YXIyID0gJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCInZm91bmQnIiwgJ2hpdCcpLCAoJ1xuICB2YXIzID0gJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCdsaXN0JywgJ2J1aWx0aW4nKSwgKCcoJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCdOb25lJywgJ2tleXdvcmQnKSwgKCcpXG4nLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJyAgYnJlYWtwb2ludCgibGluZSIpJywgJ2JyZWFrJyksICgnXG5cbicsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnIGVycm9yICcsICdlcnJvcicpLCAoJyAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJ2N1cnNvciB8JywgJ2N1cnNvcicpLCAoJ1xuICcsICdub3JtYWwnKSwKKyAgICAgICAgICAgICgnc2hlbGwnLCAnY29uc29sZScpLCAoJyAnLCAnbm9ybWFsJyksCisgICAgICAgICAgICAoJ3N0ZG91dCcsICdzdGRvdXQnKSwgKCcgJywgJ25vcm1hbCcpLAorICAgICAgICAgICAgKCdzdGRlcnInLCAnc3RkZXJyJyksICgnXG4nLCAnbm9ybWFsJykpCiAgICAgICAgIGZvciB0eFRhIGluIHRleHRBbmRUYWdzOgotICAgICAgICAgICAgdGV4dC5pbnNlcnQoRU5ELHR4VGFbMF0sdHhUYVsxXSkKKyAgICAgICAgICAgIHRleHQuaW5zZXJ0KEVORCwgdHhUYVswXSwgdHhUYVsxXSkKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gc2VsZi50aGVtZUVsZW1lbnRzOgotICAgICAgICAgICAgdGV4dC50YWdfYmluZChzZWxmLnRoZW1lRWxlbWVudHNbZWxlbWVudF1bMF0sJzxCdXR0b25QcmVzcy0xPicsCi0gICAgICAgICAgICAgICAgbGFtYmRhIGV2ZW50LGVsZW09ZWxlbWVudDogZXZlbnQud2lkZ2V0LndpbmZvX3RvcGxldmVsKCkKLSAgICAgICAgICAgICAgICAuaGlnaGxpZ2h0VGFyZ2V0LnNldChlbGVtKSkKKyAgICAgICAgICAgIGRlZiB0ZW0oZXZlbnQsIGVsZW09ZWxlbWVudCk6CisgICAgICAgICAgICAgICAgZXZlbnQud2lkZ2V0LndpbmZvX3RvcGxldmVsKCkuaGlnaGxpZ2h0VGFyZ2V0LnNldChlbGVtKQorICAgICAgICAgICAgdGV4dC50YWdfYmluZCgKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50aGVtZUVsZW1lbnRzW2VsZW1lbnRdWzBdLCAnPEJ1dHRvblByZXNzLTE+JywgdGVtKQogICAgICAgICB0ZXh0LmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKLSAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldD1GcmFtZShmcmFtZUN1c3RvbSxyZWxpZWY9U09MSUQsYm9yZGVyd2lkdGg9MSkKLSAgICAgICAgZnJhbWVGZ0JnPUZyYW1lKGZyYW1lQ3VzdG9tKQotICAgICAgICBidXR0b25TZXRDb2xvdXI9QnV0dG9uKHNlbGYuZnJhbWVDb2xvdXJTZXQsdGV4dD0nQ2hvb3NlIENvbG91ciBmb3IgOicsCi0gICAgICAgICAgICBjb21tYW5kPXNlbGYuR2V0Q29sb3VyLGhpZ2hsaWdodHRoaWNrbmVzcz0wKQotICAgICAgICBzZWxmLm9wdE1lbnVIaWdobGlnaHRUYXJnZXQ9RHluT3B0aW9uTWVudShzZWxmLmZyYW1lQ29sb3VyU2V0LAotICAgICAgICAgICAgc2VsZi5oaWdobGlnaHRUYXJnZXQsTm9uZSxoaWdobGlnaHR0aGlja25lc3M9MCkjLGNvbW1hbmQ9c2VsZi5TZXRIaWdobGlnaHRUYXJnZXRCaW5kaW5nCi0gICAgICAgIHNlbGYucmFkaW9GZz1SYWRpb2J1dHRvbihmcmFtZUZnQmcsdmFyaWFibGU9c2VsZi5mZ0hpbGl0ZSwKLSAgICAgICAgICAgIHZhbHVlPTEsdGV4dD0nRm9yZWdyb3VuZCcsY29tbWFuZD1zZWxmLlNldENvbG91clNhbXBsZUJpbmRpbmcpCi0gICAgICAgIHNlbGYucmFkaW9CZz1SYWRpb2J1dHRvbihmcmFtZUZnQmcsdmFyaWFibGU9c2VsZi5mZ0hpbGl0ZSwKLSAgICAgICAgICAgIHZhbHVlPTAsdGV4dD0nQmFja2dyb3VuZCcsY29tbWFuZD1zZWxmLlNldENvbG91clNhbXBsZUJpbmRpbmcpCisgICAgICAgIHNlbGYuZnJhbWVDb2xvdXJTZXQgPSBGcmFtZShmcmFtZUN1c3RvbSwgcmVsaWVmPVNPTElELCBib3JkZXJ3aWR0aD0xKQorICAgICAgICBmcmFtZUZnQmcgPSBGcmFtZShmcmFtZUN1c3RvbSkKKyAgICAgICAgYnV0dG9uU2V0Q29sb3VyID0gQnV0dG9uKAorICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVDb2xvdXJTZXQsIHRleHQ9J0Nob29zZSBDb2xvdXIgZm9yIDonLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5HZXRDb2xvdXIsIGhpZ2hsaWdodHRoaWNrbmVzcz0wKQorICAgICAgICBzZWxmLm9wdE1lbnVIaWdobGlnaHRUYXJnZXQgPSBEeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIHNlbGYuZnJhbWVDb2xvdXJTZXQsIHNlbGYuaGlnaGxpZ2h0VGFyZ2V0LCBOb25lLAorICAgICAgICAgICAgICAgIGhpZ2hsaWdodHRoaWNrbmVzcz0wKSAjLCBjb21tYW5kPXNlbGYuU2V0SGlnaGxpZ2h0VGFyZ2V0QmluZGluZworICAgICAgICBzZWxmLnJhZGlvRmcgPSBSYWRpb2J1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUZnQmcsIHZhcmlhYmxlPXNlbGYuZmdIaWxpdGUsIHZhbHVlPTEsCisgICAgICAgICAgICAgICAgdGV4dD0nRm9yZWdyb3VuZCcsIGNvbW1hbmQ9c2VsZi5TZXRDb2xvdXJTYW1wbGVCaW5kaW5nKQorICAgICAgICBzZWxmLnJhZGlvQmc9UmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVGZ0JnLCB2YXJpYWJsZT1zZWxmLmZnSGlsaXRlLCB2YWx1ZT0wLAorICAgICAgICAgICAgICAgIHRleHQ9J0JhY2tncm91bmQnLCBjb21tYW5kPXNlbGYuU2V0Q29sb3VyU2FtcGxlQmluZGluZykKICAgICAgICAgc2VsZi5mZ0hpbGl0ZS5zZXQoMSkKLSAgICAgICAgYnV0dG9uU2F2ZUN1c3RvbVRoZW1lPUJ1dHRvbihmcmFtZUN1c3RvbSwKLSAgICAgICAgICAgIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBUaGVtZScsY29tbWFuZD1zZWxmLlNhdmVBc05ld1RoZW1lKQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tVGhlbWUgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVDdXN0b20sIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBUaGVtZScsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLlNhdmVBc05ld1RoZW1lKQogICAgICAgICAjZnJhbWVUaGVtZQotICAgICAgICBsYWJlbFR5cGVUaXRsZT1MYWJlbChmcmFtZVRoZW1lLHRleHQ9J1NlbGVjdCA6ICcpCi0gICAgICAgIHNlbGYucmFkaW9UaGVtZUJ1aWx0aW49UmFkaW9idXR0b24oZnJhbWVUaGVtZSx2YXJpYWJsZT1zZWxmLnRoZW1lSXNCdWlsdGluLAotICAgICAgICAgICAgdmFsdWU9MSxjb21tYW5kPXNlbGYuU2V0VGhlbWVUeXBlLHRleHQ9J2EgQnVpbHQtaW4gVGhlbWUnKQotICAgICAgICBzZWxmLnJhZGlvVGhlbWVDdXN0b209UmFkaW9idXR0b24oZnJhbWVUaGVtZSx2YXJpYWJsZT1zZWxmLnRoZW1lSXNCdWlsdGluLAotICAgICAgICAgICAgdmFsdWU9MCxjb21tYW5kPXNlbGYuU2V0VGhlbWVUeXBlLHRleHQ9J2EgQ3VzdG9tIFRoZW1lJykKLSAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVCdWlsdGluPUR5bk9wdGlvbk1lbnUoZnJhbWVUaGVtZSwKLSAgICAgICAgICAgIHNlbGYuYnVpbHRpblRoZW1lLE5vbmUsY29tbWFuZD1Ob25lKQotICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbT1EeW5PcHRpb25NZW51KGZyYW1lVGhlbWUsCi0gICAgICAgICAgICBzZWxmLmN1c3RvbVRoZW1lLE5vbmUsY29tbWFuZD1Ob25lKQotICAgICAgICBzZWxmLmJ1dHRvbkRlbGV0ZUN1c3RvbVRoZW1lPUJ1dHRvbihmcmFtZVRoZW1lLHRleHQ9J0RlbGV0ZSBDdXN0b20gVGhlbWUnLAorICAgICAgICBsYWJlbFR5cGVUaXRsZSA9IExhYmVsKGZyYW1lVGhlbWUsIHRleHQ9J1NlbGVjdCA6ICcpCisgICAgICAgIHNlbGYucmFkaW9UaGVtZUJ1aWx0aW4gPSBSYWRpb2J1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZVRoZW1lLCB2YXJpYWJsZT1zZWxmLnRoZW1lSXNCdWlsdGluLCB2YWx1ZT0xLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRUaGVtZVR5cGUsIHRleHQ9J2EgQnVpbHQtaW4gVGhlbWUnKQorICAgICAgICBzZWxmLnJhZGlvVGhlbWVDdXN0b20gPSBSYWRpb2J1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZVRoZW1lLCB2YXJpYWJsZT1zZWxmLnRoZW1lSXNCdWlsdGluLCB2YWx1ZT0wLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRUaGVtZVR5cGUsIHRleHQ9J2EgQ3VzdG9tIFRoZW1lJykKKyAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVCdWlsdGluID0gRHluT3B0aW9uTWVudSgKKyAgICAgICAgICAgICAgICBmcmFtZVRoZW1lLCBzZWxmLmJ1aWx0aW5UaGVtZSwgTm9uZSwgY29tbWFuZD1Ob25lKQorICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbT1EeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIGZyYW1lVGhlbWUsIHNlbGYuY3VzdG9tVGhlbWUsIE5vbmUsIGNvbW1hbmQ9Tm9uZSkKKyAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21UaGVtZT1CdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVUaGVtZSwgdGV4dD0nRGVsZXRlIEN1c3RvbSBUaGVtZScsCiAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLkRlbGV0ZUN1c3RvbVRoZW1lKQorICAgICAgICBzZWxmLm5ld19jdXN0b21fdGhlbWUgPSBMYWJlbChmcmFtZVRoZW1lLCBiZD0yKQorCiAgICAgICAgICMjd2lkZ2V0IHBhY2tpbmcKICAgICAgICAgI2JvZHkKLSAgICAgICAgZnJhbWVDdXN0b20ucGFjayhzaWRlPUxFRlQscGFkeD01LHBhZHk9NSxleHBhbmQ9VFJVRSxmaWxsPUJPVEgpCi0gICAgICAgIGZyYW1lVGhlbWUucGFjayhzaWRlPUxFRlQscGFkeD01LHBhZHk9NSxmaWxsPVkpCisgICAgICAgIGZyYW1lQ3VzdG9tLnBhY2soc2lkZT1MRUZULCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKKyAgICAgICAgZnJhbWVUaGVtZS5wYWNrKHNpZGU9TEVGVCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WSkKICAgICAgICAgI2ZyYW1lQ3VzdG9tCi0gICAgICAgIHNlbGYuZnJhbWVDb2xvdXJTZXQucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9WCkKLSAgICAgICAgZnJhbWVGZ0JnLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9MCkKLSAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxleHBhbmQ9VFJVRSwKLSAgICAgICAgICAgIGZpbGw9Qk9USCkKLSAgICAgICAgYnV0dG9uU2V0Q29sb3VyLnBhY2soc2lkZT1UT1AsZXhwYW5kPVRSVUUsZmlsbD1YLHBhZHg9OCxwYWR5PTQpCi0gICAgICAgIHNlbGYub3B0TWVudUhpZ2hsaWdodFRhcmdldC5wYWNrKHNpZGU9VE9QLGV4cGFuZD1UUlVFLGZpbGw9WCxwYWR4PTgscGFkeT0zKQotICAgICAgICBzZWxmLnJhZGlvRmcucGFjayhzaWRlPUxFRlQsYW5jaG9yPUUpCi0gICAgICAgIHNlbGYucmFkaW9CZy5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPVcpCi0gICAgICAgIGJ1dHRvblNhdmVDdXN0b21UaGVtZS5wYWNrKHNpZGU9Qk9UVE9NLGZpbGw9WCxwYWR4PTUscGFkeT01KQorICAgICAgICBzZWxmLmZyYW1lQ29sb3VyU2V0LnBhY2soc2lkZT1UT1AsIHBhZHg9NSwgcGFkeT01LCBleHBhbmQ9VFJVRSwgZmlsbD1YKQorICAgICAgICBmcmFtZUZnQmcucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTApCisgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS5wYWNrKAorICAgICAgICAgICAgICAgIHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKKyAgICAgICAgYnV0dG9uU2V0Q29sb3VyLnBhY2soc2lkZT1UT1AsIGV4cGFuZD1UUlVFLCBmaWxsPVgsIHBhZHg9OCwgcGFkeT00KQorICAgICAgICBzZWxmLm9wdE1lbnVIaWdobGlnaHRUYXJnZXQucGFjaygKKyAgICAgICAgICAgICAgICBzaWRlPVRPUCwgZXhwYW5kPVRSVUUsIGZpbGw9WCwgcGFkeD04LCBwYWR5PTMpCisgICAgICAgIHNlbGYucmFkaW9GZy5wYWNrKHNpZGU9TEVGVCwgYW5jaG9yPUUpCisgICAgICAgIHNlbGYucmFkaW9CZy5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1XKQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tVGhlbWUucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YLCBwYWR4PTUsIHBhZHk9NSkKICAgICAgICAgI2ZyYW1lVGhlbWUKLSAgICAgICAgbGFiZWxUeXBlVGl0bGUucGFjayhzaWRlPVRPUCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQotICAgICAgICBzZWxmLnJhZGlvVGhlbWVCdWlsdGluLnBhY2soc2lkZT1UT1AsYW5jaG9yPVcscGFkeD01KQotICAgICAgICBzZWxmLnJhZGlvVGhlbWVDdXN0b20ucGFjayhzaWRlPVRPUCxhbmNob3I9VyxwYWR4PTUscGFkeT0yKQotICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW4ucGFjayhzaWRlPVRPUCxmaWxsPVgscGFkeD01LHBhZHk9NSkKLSAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20ucGFjayhzaWRlPVRPUCxmaWxsPVgsYW5jaG9yPVcscGFkeD01LHBhZHk9NSkKLSAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21UaGVtZS5wYWNrKHNpZGU9VE9QLGZpbGw9WCxwYWR4PTUscGFkeT01KQorICAgICAgICBsYWJlbFR5cGVUaXRsZS5wYWNrKHNpZGU9VE9QLCBhbmNob3I9VywgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHNlbGYucmFkaW9UaGVtZUJ1aWx0aW4ucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcsIHBhZHg9NSkKKyAgICAgICAgc2VsZi5yYWRpb1RoZW1lQ3VzdG9tLnBhY2soc2lkZT1UT1AsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9MikKKyAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVCdWlsdGluLnBhY2soc2lkZT1UT1AsIGZpbGw9WCwgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLnBhY2soc2lkZT1UT1AsIGZpbGw9WCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQorICAgICAgICBzZWxmLmJ1dHRvbkRlbGV0ZUN1c3RvbVRoZW1lLnBhY2soc2lkZT1UT1AsIGZpbGw9WCwgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHNlbGYubmV3X2N1c3RvbV90aGVtZS5wYWNrKHNpZGU9VE9QLCBmaWxsPVgsIHBhZHk9NSkKICAgICAgICAgcmV0dXJuIGZyYW1lCiAKICAgICBkZWYgQ3JlYXRlUGFnZUtleXMoc2VsZik6Ci0gICAgICAgICN0a1ZhcnMKLSAgICAgICAgc2VsZi5iaW5kaW5nVGFyZ2V0PVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmJ1aWx0aW5LZXlzPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLmN1c3RvbUtleXM9U3RyaW5nVmFyKHNlbGYpCi0gICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW49Qm9vbGVhblZhcihzZWxmKQotICAgICAgICBzZWxmLmtleUJpbmRpbmc9U3RyaW5nVmFyKHNlbGYpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIHNlbGYuYmluZGluZ1RhcmdldCA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuYnVpbHRpbktleXMgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmN1c3RvbUtleXMgPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLmtleXNBcmVCdWlsdGluID0gQm9vbGVhblZhcihwYXJlbnQpCisgICAgICAgIHNlbGYua2V5QmluZGluZyA9IFN0cmluZ1ZhcihwYXJlbnQpCisKICAgICAgICAgIyN3aWRnZXQgY3JlYXRpb24KICAgICAgICAgI2JvZHkgZnJhbWUKLSAgICAgICAgZnJhbWU9c2VsZi50YWJQYWdlcy5wYWdlc1snS2V5cyddLmZyYW1lCisgICAgICAgIGZyYW1lID0gc2VsZi50YWJQYWdlcy5wYWdlc1snS2V5cyddLmZyYW1lCiAgICAgICAgICNib2R5IHNlY3Rpb24gZnJhbWVzCi0gICAgICAgIGZyYW1lQ3VzdG9tPUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBDdXN0b20gS2V5IEJpbmRpbmdzICcpCi0gICAgICAgIGZyYW1lS2V5U2V0cz1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBLZXkgU2V0ICcpCisgICAgICAgIGZyYW1lQ3VzdG9tID0gTGFiZWxGcmFtZSgKKyAgICAgICAgICAgICAgICBmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwKKyAgICAgICAgICAgICAgICB0ZXh0PScgQ3VzdG9tIEtleSBCaW5kaW5ncyAnKQorICAgICAgICBmcmFtZUtleVNldHMgPSBMYWJlbEZyYW1lKAorICAgICAgICAgICAgICAgIGZyYW1lLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9R1JPT1ZFLCB0ZXh0PScgS2V5IFNldCAnKQogICAgICAgICAjZnJhbWVDdXN0b20KLSAgICAgICAgZnJhbWVUYXJnZXQ9RnJhbWUoZnJhbWVDdXN0b20pCi0gICAgICAgIGxhYmVsVGFyZ2V0VGl0bGU9TGFiZWwoZnJhbWVUYXJnZXQsdGV4dD0nQWN0aW9uIC0gS2V5KHMpJykKLSAgICAgICAgc2Nyb2xsVGFyZ2V0WT1TY3JvbGxiYXIoZnJhbWVUYXJnZXQpCi0gICAgICAgIHNjcm9sbFRhcmdldFg9U2Nyb2xsYmFyKGZyYW1lVGFyZ2V0LG9yaWVudD1IT1JJWk9OVEFMKQotICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncz1MaXN0Ym94KGZyYW1lVGFyZ2V0LHRha2Vmb2N1cz1GQUxTRSwKLSAgICAgICAgICAgICAgICBleHBvcnRzZWxlY3Rpb249RkFMU0UpCi0gICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLmJpbmQoJzxCdXR0b25SZWxlYXNlLTE+JyxzZWxmLktleUJpbmRpbmdTZWxlY3RlZCkKKyAgICAgICAgZnJhbWVUYXJnZXQgPSBGcmFtZShmcmFtZUN1c3RvbSkKKyAgICAgICAgbGFiZWxUYXJnZXRUaXRsZSA9IExhYmVsKGZyYW1lVGFyZ2V0LCB0ZXh0PSdBY3Rpb24gLSBLZXkocyknKQorICAgICAgICBzY3JvbGxUYXJnZXRZID0gU2Nyb2xsYmFyKGZyYW1lVGFyZ2V0KQorICAgICAgICBzY3JvbGxUYXJnZXRYID0gU2Nyb2xsYmFyKGZyYW1lVGFyZ2V0LCBvcmllbnQ9SE9SSVpPTlRBTCkKKyAgICAgICAgc2VsZi5saXN0QmluZGluZ3MgPSBMaXN0Ym94KAorICAgICAgICAgICAgICAgIGZyYW1lVGFyZ2V0LCB0YWtlZm9jdXM9RkFMU0UsIGV4cG9ydHNlbGVjdGlvbj1GQUxTRSkKKyAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuYmluZCgnPEJ1dHRvblJlbGVhc2UtMT4nLCBzZWxmLktleUJpbmRpbmdTZWxlY3RlZCkKICAgICAgICAgc2Nyb2xsVGFyZ2V0WS5jb25maWcoY29tbWFuZD1zZWxmLmxpc3RCaW5kaW5ncy55dmlldykKICAgICAgICAgc2Nyb2xsVGFyZ2V0WC5jb25maWcoY29tbWFuZD1zZWxmLmxpc3RCaW5kaW5ncy54dmlldykKICAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuY29uZmlnKHlzY3JvbGxjb21tYW5kPXNjcm9sbFRhcmdldFkuc2V0KQogICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5jb25maWcoeHNjcm9sbGNvbW1hbmQ9c2Nyb2xsVGFyZ2V0WC5zZXQpCi0gICAgICAgIHNlbGYuYnV0dG9uTmV3S2V5cz1CdXR0b24oZnJhbWVDdXN0b20sdGV4dD0nR2V0IE5ldyBLZXlzIGZvciBTZWxlY3Rpb24nLAotICAgICAgICAgICAgY29tbWFuZD1zZWxmLkdldE5ld0tleXMsc3RhdGU9RElTQUJMRUQpCisgICAgICAgIHNlbGYuYnV0dG9uTmV3S2V5cyA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUN1c3RvbSwgdGV4dD0nR2V0IE5ldyBLZXlzIGZvciBTZWxlY3Rpb24nLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5HZXROZXdLZXlzLCBzdGF0ZT1ESVNBQkxFRCkKICAgICAgICAgI2ZyYW1lS2V5U2V0cwogICAgICAgICBmcmFtZXMgPSBbRnJhbWUoZnJhbWVLZXlTZXRzLCBwYWR4PTIsIHBhZHk9MiwgYm9yZGVyd2lkdGg9MCkKICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDIpXQotICAgICAgICBzZWxmLnJhZGlvS2V5c0J1aWx0aW49UmFkaW9idXR0b24oZnJhbWVzWzBdLHZhcmlhYmxlPXNlbGYua2V5c0FyZUJ1aWx0aW4sCi0gICAgICAgICAgICB2YWx1ZT0xLGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSx0ZXh0PSdVc2UgYSBCdWlsdC1pbiBLZXkgU2V0JykKLSAgICAgICAgc2VsZi5yYWRpb0tleXNDdXN0b209UmFkaW9idXR0b24oZnJhbWVzWzBdLHZhcmlhYmxlPXNlbGYua2V5c0FyZUJ1aWx0aW4sCi0gICAgICAgICAgICB2YWx1ZT0wLGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSx0ZXh0PSdVc2UgYSBDdXN0b20gS2V5IFNldCcpCi0gICAgICAgIHNlbGYub3B0TWVudUtleXNCdWlsdGluPUR5bk9wdGlvbk1lbnUoZnJhbWVzWzBdLAotICAgICAgICAgICAgc2VsZi5idWlsdGluS2V5cyxOb25lLGNvbW1hbmQ9Tm9uZSkKLSAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbT1EeW5PcHRpb25NZW51KGZyYW1lc1swXSwKLSAgICAgICAgICAgIHNlbGYuY3VzdG9tS2V5cyxOb25lLGNvbW1hbmQ9Tm9uZSkKLSAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21LZXlzPUJ1dHRvbihmcmFtZXNbMV0sdGV4dD0nRGVsZXRlIEN1c3RvbSBLZXkgU2V0JywKKyAgICAgICAgc2VsZi5yYWRpb0tleXNCdWlsdGluID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVzWzBdLCB2YXJpYWJsZT1zZWxmLmtleXNBcmVCdWlsdGluLCB2YWx1ZT0xLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSwgdGV4dD0nVXNlIGEgQnVpbHQtaW4gS2V5IFNldCcpCisgICAgICAgIHNlbGYucmFkaW9LZXlzQ3VzdG9tID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVzWzBdLCB2YXJpYWJsZT1zZWxmLmtleXNBcmVCdWlsdGluLCAgdmFsdWU9MCwKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2V0S2V5c1R5cGUsIHRleHQ9J1VzZSBhIEN1c3RvbSBLZXkgU2V0JykKKyAgICAgICAgc2VsZi5vcHRNZW51S2V5c0J1aWx0aW4gPSBEeW5PcHRpb25NZW51KAorICAgICAgICAgICAgICAgIGZyYW1lc1swXSwgc2VsZi5idWlsdGluS2V5cywgTm9uZSwgY29tbWFuZD1Ob25lKQorICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tID0gRHluT3B0aW9uTWVudSgKKyAgICAgICAgICAgICAgICBmcmFtZXNbMF0sIHNlbGYuY3VzdG9tS2V5cywgTm9uZSwgY29tbWFuZD1Ob25lKQorICAgICAgICBzZWxmLmJ1dHRvbkRlbGV0ZUN1c3RvbUtleXMgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVzWzFdLCB0ZXh0PSdEZWxldGUgQ3VzdG9tIEtleSBTZXQnLAogICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5EZWxldGVDdXN0b21LZXlzKQotICAgICAgICBidXR0b25TYXZlQ3VzdG9tS2V5cz1CdXR0b24oZnJhbWVzWzFdLAotICAgICAgICAgICAgICAgIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBLZXkgU2V0Jyxjb21tYW5kPXNlbGYuU2F2ZUFzTmV3S2V5U2V0KQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tS2V5cyA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZXNbMV0sIHRleHQ9J1NhdmUgYXMgTmV3IEN1c3RvbSBLZXkgU2V0JywKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2F2ZUFzTmV3S2V5U2V0KQorCiAgICAgICAgICMjd2lkZ2V0IHBhY2tpbmcKICAgICAgICAgI2JvZHkKLSAgICAgICAgZnJhbWVDdXN0b20ucGFjayhzaWRlPUJPVFRPTSxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKLSAgICAgICAgZnJhbWVLZXlTZXRzLnBhY2soc2lkZT1CT1RUT00scGFkeD01LHBhZHk9NSxmaWxsPUJPVEgpCisgICAgICAgIGZyYW1lQ3VzdG9tLnBhY2soc2lkZT1CT1RUT00sIHBhZHg9NSwgcGFkeT01LCBleHBhbmQ9VFJVRSwgZmlsbD1CT1RIKQorICAgICAgICBmcmFtZUtleVNldHMucGFjayhzaWRlPUJPVFRPTSwgcGFkeD01LCBwYWR5PTUsIGZpbGw9Qk9USCkKICAgICAgICAgI2ZyYW1lQ3VzdG9tCi0gICAgICAgIHNlbGYuYnV0dG9uTmV3S2V5cy5wYWNrKHNpZGU9Qk9UVE9NLGZpbGw9WCxwYWR4PTUscGFkeT01KQotICAgICAgICBmcmFtZVRhcmdldC5wYWNrKHNpZGU9TEVGVCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKKyAgICAgICAgc2VsZi5idXR0b25OZXdLZXlzLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCwgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIGZyYW1lVGFyZ2V0LnBhY2soc2lkZT1MRUZULCBwYWR4PTUsIHBhZHk9NSwgZXhwYW5kPVRSVUUsIGZpbGw9Qk9USCkKICAgICAgICAgI2ZyYW1lIHRhcmdldAotICAgICAgICBmcmFtZVRhcmdldC5jb2x1bW5jb25maWd1cmUoMCx3ZWlnaHQ9MSkKLSAgICAgICAgZnJhbWVUYXJnZXQucm93Y29uZmlndXJlKDEsd2VpZ2h0PTEpCi0gICAgICAgIGxhYmVsVGFyZ2V0VGl0bGUuZ3JpZChyb3c9MCxjb2x1bW49MCxjb2x1bW5zcGFuPTIsc3RpY2t5PVcpCi0gICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLmdyaWQocm93PTEsY29sdW1uPTAsc3RpY2t5PU5TRVcpCi0gICAgICAgIHNjcm9sbFRhcmdldFkuZ3JpZChyb3c9MSxjb2x1bW49MSxzdGlja3k9TlMpCi0gICAgICAgIHNjcm9sbFRhcmdldFguZ3JpZChyb3c9Mixjb2x1bW49MCxzdGlja3k9RVcpCisgICAgICAgIGZyYW1lVGFyZ2V0LmNvbHVtbmNvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKKyAgICAgICAgZnJhbWVUYXJnZXQucm93Y29uZmlndXJlKDEsIHdlaWdodD0xKQorICAgICAgICBsYWJlbFRhcmdldFRpdGxlLmdyaWQocm93PTAsIGNvbHVtbj0wLCBjb2x1bW5zcGFuPTIsIHN0aWNreT1XKQorICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5ncmlkKHJvdz0xLCBjb2x1bW49MCwgc3RpY2t5PU5TRVcpCisgICAgICAgIHNjcm9sbFRhcmdldFkuZ3JpZChyb3c9MSwgY29sdW1uPTEsIHN0aWNreT1OUykKKyAgICAgICAgc2Nyb2xsVGFyZ2V0WC5ncmlkKHJvdz0yLCBjb2x1bW49MCwgc3RpY2t5PUVXKQogICAgICAgICAjZnJhbWVLZXlTZXRzCiAgICAgICAgIHNlbGYucmFkaW9LZXlzQnVpbHRpbi5ncmlkKHJvdz0wLCBjb2x1bW49MCwgc3RpY2t5PVcrTlMpCiAgICAgICAgIHNlbGYucmFkaW9LZXlzQ3VzdG9tLmdyaWQocm93PTEsIGNvbHVtbj0wLCBzdGlja3k9VytOUykKICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0J1aWx0aW4uZ3JpZChyb3c9MCwgY29sdW1uPTEsIHN0aWNreT1OU0VXKQogICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLmdyaWQocm93PTEsIGNvbHVtbj0xLCBzdGlja3k9TlNFVykKLSAgICAgICAgc2VsZi5idXR0b25EZWxldGVDdXN0b21LZXlzLnBhY2soc2lkZT1MRUZULGZpbGw9WCxleHBhbmQ9VHJ1ZSxwYWR4PTIpCi0gICAgICAgIGJ1dHRvblNhdmVDdXN0b21LZXlzLnBhY2soc2lkZT1MRUZULGZpbGw9WCxleHBhbmQ9VHJ1ZSxwYWR4PTIpCisgICAgICAgIHNlbGYuYnV0dG9uRGVsZXRlQ3VzdG9tS2V5cy5wYWNrKHNpZGU9TEVGVCwgZmlsbD1YLCBleHBhbmQ9VHJ1ZSwgcGFkeD0yKQorICAgICAgICBidXR0b25TYXZlQ3VzdG9tS2V5cy5wYWNrKHNpZGU9TEVGVCwgZmlsbD1YLCBleHBhbmQ9VHJ1ZSwgcGFkeD0yKQogICAgICAgICBmcmFtZXNbMF0ucGFjayhzaWRlPVRPUCwgZmlsbD1CT1RILCBleHBhbmQ9VHJ1ZSkKICAgICAgICAgZnJhbWVzWzFdLnBhY2soc2lkZT1UT1AsIGZpbGw9WCwgZXhwYW5kPVRydWUsIHBhZHk9MikKICAgICAgICAgcmV0dXJuIGZyYW1lCiAKICAgICBkZWYgQ3JlYXRlUGFnZUdlbmVyYWwoc2VsZik6Ci0gICAgICAgICN0a1ZhcnMKLSAgICAgICAgc2VsZi53aW5XaWR0aD1TdHJpbmdWYXIoc2VsZikKLSAgICAgICAgc2VsZi53aW5IZWlnaHQ9U3RyaW5nVmFyKHNlbGYpCi0gICAgICAgIHNlbGYucGFyYVdpZHRoPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLnN0YXJ0dXBFZGl0PUludFZhcihzZWxmKQotICAgICAgICBzZWxmLmF1dG9TYXZlPUludFZhcihzZWxmKQotICAgICAgICBzZWxmLmVuY29kaW5nPVN0cmluZ1ZhcihzZWxmKQotICAgICAgICBzZWxmLnVzZXJIZWxwQnJvd3Nlcj1Cb29sZWFuVmFyKHNlbGYpCi0gICAgICAgIHNlbGYuaGVscEJyb3dzZXI9U3RyaW5nVmFyKHNlbGYpCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIHNlbGYud2luV2lkdGggPSBTdHJpbmdWYXIocGFyZW50KQorICAgICAgICBzZWxmLndpbkhlaWdodCA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuc3RhcnR1cEVkaXQgPSBJbnRWYXIocGFyZW50KQorICAgICAgICBzZWxmLmF1dG9TYXZlID0gSW50VmFyKHBhcmVudCkKKyAgICAgICAgc2VsZi5lbmNvZGluZyA9IFN0cmluZ1ZhcihwYXJlbnQpCisgICAgICAgIHNlbGYudXNlckhlbHBCcm93c2VyID0gQm9vbGVhblZhcihwYXJlbnQpCisgICAgICAgIHNlbGYuaGVscEJyb3dzZXIgPSBTdHJpbmdWYXIocGFyZW50KQorCiAgICAgICAgICN3aWRnZXQgY3JlYXRpb24KICAgICAgICAgI2JvZHkKLSAgICAgICAgZnJhbWU9c2VsZi50YWJQYWdlcy5wYWdlc1snR2VuZXJhbCddLmZyYW1lCisgICAgICAgIGZyYW1lID0gc2VsZi50YWJQYWdlcy5wYWdlc1snR2VuZXJhbCddLmZyYW1lCiAgICAgICAgICNib2R5IHNlY3Rpb24gZnJhbWVzCi0gICAgICAgIGZyYW1lUnVuPUxhYmVsRnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBTdGFydHVwIFByZWZlcmVuY2VzICcpCi0gICAgICAgIGZyYW1lU2F2ZT1MYWJlbEZyYW1lKGZyYW1lLGJvcmRlcndpZHRoPTIscmVsaWVmPUdST09WRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD0nIEF1dG9zYXZlIFByZWZlcmVuY2VzICcpCi0gICAgICAgIGZyYW1lV2luU2l6ZT1GcmFtZShmcmFtZSxib3JkZXJ3aWR0aD0yLHJlbGllZj1HUk9PVkUpCi0gICAgICAgIGZyYW1lUGFyYVNpemU9RnJhbWUoZnJhbWUsYm9yZGVyd2lkdGg9MixyZWxpZWY9R1JPT1ZFKQotICAgICAgICBmcmFtZUhlbHA9TGFiZWxGcmFtZShmcmFtZSxib3JkZXJ3aWR0aD0yLHJlbGllZj1HUk9PVkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBBZGRpdGlvbmFsIEhlbHAgU291cmNlcyAnKQorICAgICAgICBmcmFtZVJ1biA9IExhYmVsRnJhbWUoZnJhbWUsIGJvcmRlcndpZHRoPTIsIHJlbGllZj1HUk9PVkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgU3RhcnR1cCBQcmVmZXJlbmNlcyAnKQorICAgICAgICBmcmFtZVNhdmUgPSBMYWJlbEZyYW1lKGZyYW1lLCBib3JkZXJ3aWR0aD0yLCByZWxpZWY9R1JPT1ZFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ9JyBBdXRvc2F2ZSBQcmVmZXJlbmNlcyAnKQorICAgICAgICBmcmFtZVdpblNpemUgPSBGcmFtZShmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSkKKyAgICAgICAgZnJhbWVIZWxwID0gTGFiZWxGcmFtZShmcmFtZSwgYm9yZGVyd2lkdGg9MiwgcmVsaWVmPUdST09WRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0PScgQWRkaXRpb25hbCBIZWxwIFNvdXJjZXMgJykKICAgICAgICAgI2ZyYW1lUnVuCi0gICAgICAgIGxhYmVsUnVuQ2hvaWNlVGl0bGU9TGFiZWwoZnJhbWVSdW4sdGV4dD0nQXQgU3RhcnR1cCcpCi0gICAgICAgIHJhZGlvU3RhcnR1cEVkaXQ9UmFkaW9idXR0b24oZnJhbWVSdW4sdmFyaWFibGU9c2VsZi5zdGFydHVwRWRpdCwKLSAgICAgICAgICAgIHZhbHVlPTEsY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLHRleHQ9Ik9wZW4gRWRpdCBXaW5kb3ciKQotICAgICAgICByYWRpb1N0YXJ0dXBTaGVsbD1SYWRpb2J1dHRvbihmcmFtZVJ1bix2YXJpYWJsZT1zZWxmLnN0YXJ0dXBFZGl0LAotICAgICAgICAgICAgdmFsdWU9MCxjb21tYW5kPXNlbGYuU2V0S2V5c1R5cGUsdGV4dD0nT3BlbiBTaGVsbCBXaW5kb3cnKQorICAgICAgICBsYWJlbFJ1bkNob2ljZVRpdGxlID0gTGFiZWwoZnJhbWVSdW4sIHRleHQ9J0F0IFN0YXJ0dXAnKQorICAgICAgICByYWRpb1N0YXJ0dXBFZGl0ID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVSdW4sIHZhcmlhYmxlPXNlbGYuc3RhcnR1cEVkaXQsIHZhbHVlPTEsCisgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLCB0ZXh0PSJPcGVuIEVkaXQgV2luZG93IikKKyAgICAgICAgcmFkaW9TdGFydHVwU2hlbGwgPSBSYWRpb2J1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZVJ1biwgdmFyaWFibGU9c2VsZi5zdGFydHVwRWRpdCwgdmFsdWU9MCwKKyAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuU2V0S2V5c1R5cGUsIHRleHQ9J09wZW4gU2hlbGwgV2luZG93JykKICAgICAgICAgI2ZyYW1lU2F2ZQotICAgICAgICBsYWJlbFJ1blNhdmVUaXRsZT1MYWJlbChmcmFtZVNhdmUsdGV4dD0nQXQgU3RhcnQgb2YgUnVuIChGNSkgICcpCi0gICAgICAgIHJhZGlvU2F2ZUFzaz1SYWRpb2J1dHRvbihmcmFtZVNhdmUsdmFyaWFibGU9c2VsZi5hdXRvU2F2ZSwKLSAgICAgICAgICAgIHZhbHVlPTAsY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLHRleHQ9IlByb21wdCB0byBTYXZlIikKLSAgICAgICAgcmFkaW9TYXZlQXV0bz1SYWRpb2J1dHRvbihmcmFtZVNhdmUsdmFyaWFibGU9c2VsZi5hdXRvU2F2ZSwKLSAgICAgICAgICAgIHZhbHVlPTEsY29tbWFuZD1zZWxmLlNldEtleXNUeXBlLHRleHQ9J05vIFByb21wdCcpCisgICAgICAgIGxhYmVsUnVuU2F2ZVRpdGxlID0gTGFiZWwoZnJhbWVTYXZlLCB0ZXh0PSdBdCBTdGFydCBvZiBSdW4gKEY1KSAgJykKKyAgICAgICAgcmFkaW9TYXZlQXNrID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVTYXZlLCB2YXJpYWJsZT1zZWxmLmF1dG9TYXZlLCB2YWx1ZT0wLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSwgdGV4dD0iUHJvbXB0IHRvIFNhdmUiKQorICAgICAgICByYWRpb1NhdmVBdXRvID0gUmFkaW9idXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVTYXZlLCB2YXJpYWJsZT1zZWxmLmF1dG9TYXZlLCB2YWx1ZT0xLAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2VsZi5TZXRLZXlzVHlwZSwgdGV4dD0nTm8gUHJvbXB0JykKICAgICAgICAgI2ZyYW1lV2luU2l6ZQotICAgICAgICBsYWJlbFdpblNpemVUaXRsZT1MYWJlbChmcmFtZVdpblNpemUsdGV4dD0nSW5pdGlhbCBXaW5kb3cgU2l6ZScrCi0gICAgICAgICAgICAgICAgJyAgKGluIGNoYXJhY3RlcnMpJykKLSAgICAgICAgbGFiZWxXaW5XaWR0aFRpdGxlPUxhYmVsKGZyYW1lV2luU2l6ZSx0ZXh0PSdXaWR0aCcpCi0gICAgICAgIGVudHJ5V2luV2lkdGg9RW50cnkoZnJhbWVXaW5TaXplLHRleHR2YXJpYWJsZT1zZWxmLndpbldpZHRoLAotICAgICAgICAgICAgICAgIHdpZHRoPTMpCi0gICAgICAgIGxhYmVsV2luSGVpZ2h0VGl0bGU9TGFiZWwoZnJhbWVXaW5TaXplLHRleHQ9J0hlaWdodCcpCi0gICAgICAgIGVudHJ5V2luSGVpZ2h0PUVudHJ5KGZyYW1lV2luU2l6ZSx0ZXh0dmFyaWFibGU9c2VsZi53aW5IZWlnaHQsCi0gICAgICAgICAgICAgICAgd2lkdGg9MykKLSAgICAgICAgI3BhcmFncmFwaEZvcm1hdFdpZHRoCi0gICAgICAgIGxhYmVsUGFyYVdpZHRoVGl0bGU9TGFiZWwoZnJhbWVQYXJhU2l6ZSx0ZXh0PSdQYXJhZ3JhcGggcmVmb3JtYXQnKwotICAgICAgICAgICAgICAgICcgd2lkdGggKGluIGNoYXJhY3RlcnMpJykKLSAgICAgICAgZW50cnlQYXJhV2lkdGg9RW50cnkoZnJhbWVQYXJhU2l6ZSx0ZXh0dmFyaWFibGU9c2VsZi5wYXJhV2lkdGgsCi0gICAgICAgICAgICAgICAgd2lkdGg9MykKKyAgICAgICAgbGFiZWxXaW5TaXplVGl0bGUgPSBMYWJlbCgKKyAgICAgICAgICAgICAgICBmcmFtZVdpblNpemUsIHRleHQ9J0luaXRpYWwgV2luZG93IFNpemUgIChpbiBjaGFyYWN0ZXJzKScpCisgICAgICAgIGxhYmVsV2luV2lkdGhUaXRsZSA9IExhYmVsKGZyYW1lV2luU2l6ZSwgdGV4dD0nV2lkdGgnKQorICAgICAgICBlbnRyeVdpbldpZHRoID0gRW50cnkoCisgICAgICAgICAgICAgICAgZnJhbWVXaW5TaXplLCB0ZXh0dmFyaWFibGU9c2VsZi53aW5XaWR0aCwgd2lkdGg9MykKKyAgICAgICAgbGFiZWxXaW5IZWlnaHRUaXRsZSA9IExhYmVsKGZyYW1lV2luU2l6ZSwgdGV4dD0nSGVpZ2h0JykKKyAgICAgICAgZW50cnlXaW5IZWlnaHQgPSBFbnRyeSgKKyAgICAgICAgICAgICAgICBmcmFtZVdpblNpemUsIHRleHR2YXJpYWJsZT1zZWxmLndpbkhlaWdodCwgd2lkdGg9MykKICAgICAgICAgI2ZyYW1lSGVscAotICAgICAgICBmcmFtZUhlbHBMaXN0PUZyYW1lKGZyYW1lSGVscCkKLSAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnM9RnJhbWUoZnJhbWVIZWxwTGlzdCkKLSAgICAgICAgc2Nyb2xsSGVscExpc3Q9U2Nyb2xsYmFyKGZyYW1lSGVscExpc3QpCi0gICAgICAgIHNlbGYubGlzdEhlbHA9TGlzdGJveChmcmFtZUhlbHBMaXN0LGhlaWdodD01LHRha2Vmb2N1cz1GQUxTRSwKKyAgICAgICAgZnJhbWVIZWxwTGlzdCA9IEZyYW1lKGZyYW1lSGVscCkKKyAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnMgPSBGcmFtZShmcmFtZUhlbHBMaXN0KQorICAgICAgICBzY3JvbGxIZWxwTGlzdCA9IFNjcm9sbGJhcihmcmFtZUhlbHBMaXN0KQorICAgICAgICBzZWxmLmxpc3RIZWxwID0gTGlzdGJveCgKKyAgICAgICAgICAgICAgICBmcmFtZUhlbHBMaXN0LCBoZWlnaHQ9NSwgdGFrZWZvY3VzPUZBTFNFLAogICAgICAgICAgICAgICAgIGV4cG9ydHNlbGVjdGlvbj1GQUxTRSkKICAgICAgICAgc2Nyb2xsSGVscExpc3QuY29uZmlnKGNvbW1hbmQ9c2VsZi5saXN0SGVscC55dmlldykKICAgICAgICAgc2VsZi5saXN0SGVscC5jb25maWcoeXNjcm9sbGNvbW1hbmQ9c2Nyb2xsSGVscExpc3Quc2V0KQotICAgICAgICBzZWxmLmxpc3RIZWxwLmJpbmQoJzxCdXR0b25SZWxlYXNlLTE+JyxzZWxmLkhlbHBTb3VyY2VTZWxlY3RlZCkKLSAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEVkaXQ9QnV0dG9uKGZyYW1lSGVscExpc3RCdXR0b25zLHRleHQ9J0VkaXQnLAotICAgICAgICAgICAgICAgIHN0YXRlPURJU0FCTEVELHdpZHRoPTgsY29tbWFuZD1zZWxmLkhlbHBMaXN0SXRlbUVkaXQpCi0gICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RBZGQ9QnV0dG9uKGZyYW1lSGVscExpc3RCdXR0b25zLHRleHQ9J0FkZCcsCi0gICAgICAgICAgICAgICAgd2lkdGg9OCxjb21tYW5kPXNlbGYuSGVscExpc3RJdGVtQWRkKQotICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0UmVtb3ZlPUJ1dHRvbihmcmFtZUhlbHBMaXN0QnV0dG9ucyx0ZXh0PSdSZW1vdmUnLAotICAgICAgICAgICAgICAgIHN0YXRlPURJU0FCTEVELHdpZHRoPTgsY29tbWFuZD1zZWxmLkhlbHBMaXN0SXRlbVJlbW92ZSkKKyAgICAgICAgc2VsZi5saXN0SGVscC5iaW5kKCc8QnV0dG9uUmVsZWFzZS0xPicsIHNlbGYuSGVscFNvdXJjZVNlbGVjdGVkKQorICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0RWRpdCA9IEJ1dHRvbigKKyAgICAgICAgICAgICAgICBmcmFtZUhlbHBMaXN0QnV0dG9ucywgdGV4dD0nRWRpdCcsIHN0YXRlPURJU0FCTEVELAorICAgICAgICAgICAgICAgIHdpZHRoPTgsIGNvbW1hbmQ9c2VsZi5IZWxwTGlzdEl0ZW1FZGl0KQorICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0QWRkID0gQnV0dG9uKAorICAgICAgICAgICAgICAgIGZyYW1lSGVscExpc3RCdXR0b25zLCB0ZXh0PSdBZGQnLAorICAgICAgICAgICAgICAgIHdpZHRoPTgsIGNvbW1hbmQ9c2VsZi5IZWxwTGlzdEl0ZW1BZGQpCisgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RSZW1vdmUgPSBCdXR0b24oCisgICAgICAgICAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnMsIHRleHQ9J1JlbW92ZScsIHN0YXRlPURJU0FCTEVELAorICAgICAgICAgICAgICAgIHdpZHRoPTgsIGNvbW1hbmQ9c2VsZi5IZWxwTGlzdEl0ZW1SZW1vdmUpCisKICAgICAgICAgI3dpZGdldCBwYWNraW5nCiAgICAgICAgICNib2R5Ci0gICAgICAgIGZyYW1lUnVuLnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxmaWxsPVgpCi0gICAgICAgIGZyYW1lU2F2ZS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZmlsbD1YKQotICAgICAgICBmcmFtZVdpblNpemUucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGZpbGw9WCkKLSAgICAgICAgZnJhbWVQYXJhU2l6ZS5wYWNrKHNpZGU9VE9QLHBhZHg9NSxwYWR5PTUsZmlsbD1YKQotICAgICAgICBmcmFtZUhlbHAucGFjayhzaWRlPVRPUCxwYWR4PTUscGFkeT01LGV4cGFuZD1UUlVFLGZpbGw9Qk9USCkKKyAgICAgICAgZnJhbWVSdW4ucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGZpbGw9WCkKKyAgICAgICAgZnJhbWVTYXZlLnBhY2soc2lkZT1UT1AsIHBhZHg9NSwgcGFkeT01LCBmaWxsPVgpCisgICAgICAgIGZyYW1lV2luU2l6ZS5wYWNrKHNpZGU9VE9QLCBwYWR4PTUsIHBhZHk9NSwgZmlsbD1YKQorICAgICAgICBmcmFtZUhlbHAucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGV4cGFuZD1UUlVFLCBmaWxsPUJPVEgpCiAgICAgICAgICNmcmFtZVJ1bgotICAgICAgICBsYWJlbFJ1bkNob2ljZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHJhZGlvU3RhcnR1cFNoZWxsLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQotICAgICAgICByYWRpb1N0YXJ0dXBFZGl0LnBhY2soc2lkZT1SSUdIVCxhbmNob3I9VyxwYWR4PTUscGFkeT01KQorICAgICAgICBsYWJlbFJ1bkNob2ljZVRpdGxlLnBhY2soc2lkZT1MRUZULCBhbmNob3I9VywgcGFkeD01LCBwYWR5PTUpCisgICAgICAgIHJhZGlvU3RhcnR1cFNoZWxsLnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQorICAgICAgICByYWRpb1N0YXJ0dXBFZGl0LnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQogICAgICAgICAjZnJhbWVTYXZlCi0gICAgICAgIGxhYmVsUnVuU2F2ZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHJhZGlvU2F2ZUF1dG8ucGFjayhzaWRlPVJJR0hULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIHJhZGlvU2F2ZUFzay5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPVcscGFkeD01LHBhZHk9NSkKKyAgICAgICAgbGFiZWxSdW5TYXZlVGl0bGUucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgcmFkaW9TYXZlQXV0by5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgcmFkaW9TYXZlQXNrLnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIHBhZHg9NSwgcGFkeT01KQogICAgICAgICAjZnJhbWVXaW5TaXplCi0gICAgICAgIGxhYmVsV2luU2l6ZVRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIGVudHJ5V2luSGVpZ2h0LnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR4PTEwLHBhZHk9NSkKLSAgICAgICAgbGFiZWxXaW5IZWlnaHRUaXRsZS5wYWNrKHNpZGU9UklHSFQsYW5jaG9yPUUscGFkeT01KQotICAgICAgICBlbnRyeVdpbldpZHRoLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR4PTEwLHBhZHk9NSkKLSAgICAgICAgbGFiZWxXaW5XaWR0aFRpdGxlLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR5PTUpCi0gICAgICAgICNwYXJhZ3JhcGhGb3JtYXRXaWR0aAotICAgICAgICBsYWJlbFBhcmFXaWR0aFRpdGxlLnBhY2soc2lkZT1MRUZULGFuY2hvcj1XLHBhZHg9NSxwYWR5PTUpCi0gICAgICAgIGVudHJ5UGFyYVdpZHRoLnBhY2soc2lkZT1SSUdIVCxhbmNob3I9RSxwYWR4PTEwLHBhZHk9NSkKKyAgICAgICAgbGFiZWxXaW5TaXplVGl0bGUucGFjayhzaWRlPUxFRlQsIGFuY2hvcj1XLCBwYWR4PTUsIHBhZHk9NSkKKyAgICAgICAgZW50cnlXaW5IZWlnaHQucGFjayhzaWRlPVJJR0hULCBhbmNob3I9RSwgcGFkeD0xMCwgcGFkeT01KQorICAgICAgICBsYWJlbFdpbkhlaWdodFRpdGxlLnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPUUsIHBhZHk9NSkKKyAgICAgICAgZW50cnlXaW5XaWR0aC5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1FLCBwYWR4PTEwLCBwYWR5PTUpCisgICAgICAgIGxhYmVsV2luV2lkdGhUaXRsZS5wYWNrKHNpZGU9UklHSFQsIGFuY2hvcj1FLCBwYWR5PTUpCiAgICAgICAgICNmcmFtZUhlbHAKLSAgICAgICAgZnJhbWVIZWxwTGlzdEJ1dHRvbnMucGFjayhzaWRlPVJJR0hULHBhZHg9NSxwYWR5PTUsZmlsbD1ZKQotICAgICAgICBmcmFtZUhlbHBMaXN0LnBhY2soc2lkZT1UT1AscGFkeD01LHBhZHk9NSxleHBhbmQ9VFJVRSxmaWxsPUJPVEgpCi0gICAgICAgIHNjcm9sbEhlbHBMaXN0LnBhY2soc2lkZT1SSUdIVCxhbmNob3I9VyxmaWxsPVkpCi0gICAgICAgIHNlbGYubGlzdEhlbHAucGFjayhzaWRlPUxFRlQsYW5jaG9yPUUsZXhwYW5kPVRSVUUsZmlsbD1CT1RIKQotICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0RWRpdC5wYWNrKHNpZGU9VE9QLGFuY2hvcj1XLHBhZHk9NSkKLSAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEFkZC5wYWNrKHNpZGU9VE9QLGFuY2hvcj1XKQotICAgICAgICBzZWxmLmJ1dHRvbkhlbHBMaXN0UmVtb3ZlLnBhY2soc2lkZT1UT1AsYW5jaG9yPVcscGFkeT01KQorICAgICAgICBmcmFtZUhlbHBMaXN0QnV0dG9ucy5wYWNrKHNpZGU9UklHSFQsIHBhZHg9NSwgcGFkeT01LCBmaWxsPVkpCisgICAgICAgIGZyYW1lSGVscExpc3QucGFjayhzaWRlPVRPUCwgcGFkeD01LCBwYWR5PTUsIGV4cGFuZD1UUlVFLCBmaWxsPUJPVEgpCisgICAgICAgIHNjcm9sbEhlbHBMaXN0LnBhY2soc2lkZT1SSUdIVCwgYW5jaG9yPVcsIGZpbGw9WSkKKyAgICAgICAgc2VsZi5saXN0SGVscC5wYWNrKHNpZGU9TEVGVCwgYW5jaG9yPUUsIGV4cGFuZD1UUlVFLCBmaWxsPUJPVEgpCisgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RFZGl0LnBhY2soc2lkZT1UT1AsIGFuY2hvcj1XLCBwYWR5PTUpCisgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RBZGQucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcpCisgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RSZW1vdmUucGFjayhzaWRlPVRPUCwgYW5jaG9yPVcsIHBhZHk9NSkKICAgICAgICAgcmV0dXJuIGZyYW1lCiAKICAgICBkZWYgQXR0YWNoVmFyQ2FsbGJhY2tzKHNlbGYpOgotICAgICAgICBzZWxmLmZvbnRTaXplLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfZm9udFNpemUpCi0gICAgICAgIHNlbGYuZm9udE5hbWUudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9mb250TmFtZSkKLSAgICAgICAgc2VsZi5mb250Qm9sZC50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2ZvbnRCb2xkKQotICAgICAgICBzZWxmLnNwYWNlTnVtLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfc3BhY2VOdW0pCi0gICAgICAgIHNlbGYuY29sb3VyLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfY29sb3VyKQotICAgICAgICBzZWxmLmJ1aWx0aW5UaGVtZS50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2J1aWx0aW5UaGVtZSkKLSAgICAgICAgc2VsZi5jdXN0b21UaGVtZS50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbVRoZW1lKQotICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfdGhlbWVJc0J1aWx0aW4pCi0gICAgICAgIHNlbGYuaGlnaGxpZ2h0VGFyZ2V0LnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfaGlnaGxpZ2h0VGFyZ2V0KQotICAgICAgICBzZWxmLmtleUJpbmRpbmcudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9rZXlCaW5kaW5nKQotICAgICAgICBzZWxmLmJ1aWx0aW5LZXlzLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfYnVpbHRpbktleXMpCi0gICAgICAgIHNlbGYuY3VzdG9tS2V5cy50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbUtleXMpCi0gICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW4udHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9rZXlzQXJlQnVpbHRpbikKLSAgICAgICAgc2VsZi53aW5XaWR0aC50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX3dpbldpZHRoKQotICAgICAgICBzZWxmLndpbkhlaWdodC50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX3dpbkhlaWdodCkKLSAgICAgICAgc2VsZi5wYXJhV2lkdGgudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9wYXJhV2lkdGgpCi0gICAgICAgIHNlbGYuc3RhcnR1cEVkaXQudHJhY2VfdmFyaWFibGUoJ3cnLHNlbGYuVmFyQ2hhbmdlZF9zdGFydHVwRWRpdCkKLSAgICAgICAgc2VsZi5hdXRvU2F2ZS50cmFjZV92YXJpYWJsZSgndycsc2VsZi5WYXJDaGFuZ2VkX2F1dG9TYXZlKQotICAgICAgICBzZWxmLmVuY29kaW5nLnRyYWNlX3ZhcmlhYmxlKCd3JyxzZWxmLlZhckNoYW5nZWRfZW5jb2RpbmcpCisgICAgICAgIHNlbGYuZm9udFNpemUudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfZm9udCkKKyAgICAgICAgc2VsZi5mb250TmFtZS50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9mb250KQorICAgICAgICBzZWxmLmZvbnRCb2xkLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2ZvbnQpCisgICAgICAgIHNlbGYuc3BhY2VOdW0udHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfc3BhY2VOdW0pCisgICAgICAgIHNlbGYuY29sb3VyLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2NvbG91cikKKyAgICAgICAgc2VsZi5idWlsdGluVGhlbWUudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfYnVpbHRpblRoZW1lKQorICAgICAgICBzZWxmLmN1c3RvbVRoZW1lLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbVRoZW1lKQorICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX3RoZW1lSXNCdWlsdGluKQorICAgICAgICBzZWxmLmhpZ2hsaWdodFRhcmdldC50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9oaWdobGlnaHRUYXJnZXQpCisgICAgICAgIHNlbGYua2V5QmluZGluZy50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9rZXlCaW5kaW5nKQorICAgICAgICBzZWxmLmJ1aWx0aW5LZXlzLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2J1aWx0aW5LZXlzKQorICAgICAgICBzZWxmLmN1c3RvbUtleXMudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfY3VzdG9tS2V5cykKKyAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF9rZXlzQXJlQnVpbHRpbikKKyAgICAgICAgc2VsZi53aW5XaWR0aC50cmFjZV92YXJpYWJsZSgndycsIHNlbGYuVmFyQ2hhbmdlZF93aW5XaWR0aCkKKyAgICAgICAgc2VsZi53aW5IZWlnaHQudHJhY2VfdmFyaWFibGUoJ3cnLCBzZWxmLlZhckNoYW5nZWRfd2luSGVpZ2h0KQorICAgICAgICBzZWxmLnN0YXJ0dXBFZGl0LnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX3N0YXJ0dXBFZGl0KQorICAgICAgICBzZWxmLmF1dG9TYXZlLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2F1dG9TYXZlKQorICAgICAgICBzZWxmLmVuY29kaW5nLnRyYWNlX3ZhcmlhYmxlKCd3Jywgc2VsZi5WYXJDaGFuZ2VkX2VuY29kaW5nKQogCi0gICAgZGVmIFZhckNoYW5nZWRfZm9udFNpemUoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5mb250U2l6ZS5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udC1zaXplJyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF9mb250KHNlbGYsICpwYXJhbXMpOgorICAgICAgICAnJydXaGVuIG9uZSBmb250IGF0dHJpYnV0ZSBjaGFuZ2VzLCBzYXZlIHRoZW0gYWxsLCBhcyB0aGV5IGFyZQorICAgICAgICBub3QgaW5kZXBlbmRlbnQgZnJvbSBlYWNoIG90aGVyLiBJbiBwYXJ0aWN1bGFyLCB3aGVuIHdlIGFyZQorICAgICAgICBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGZvbnQsIHdlIG5lZWQgdG8gd3JpdGUgb3V0IGV2ZXJ5dGhpbmcuCisgICAgICAgICcnJworICAgICAgICB2YWx1ZSA9IHNlbGYuZm9udE5hbWUuZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnZm9udCcsIHZhbHVlKQorICAgICAgICB2YWx1ZSA9IHNlbGYuZm9udFNpemUuZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnZm9udC1zaXplJywgdmFsdWUpCisgICAgICAgIHZhbHVlID0gc2VsZi5mb250Qm9sZC5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250LWJvbGQnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2ZvbnROYW1lKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuZm9udE5hbWUuZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0VkaXRvcldpbmRvdycsJ2ZvbnQnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX3NwYWNlTnVtKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYuc3BhY2VOdW0uZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdJbmRlbnQnLCAnbnVtLXNwYWNlcycsIHZhbHVlKQogCi0gICAgZGVmIFZhckNoYW5nZWRfZm9udEJvbGQoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5mb250Qm9sZC5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udC1ib2xkJyx2YWx1ZSkKLQotICAgIGRlZiBWYXJDaGFuZ2VkX3NwYWNlTnVtKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuc3BhY2VOdW0uZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0luZGVudCcsJ251bS1zcGFjZXMnLHZhbHVlKQotCi0gICAgZGVmIFZhckNoYW5nZWRfY29sb3VyKHNlbGYsKnBhcmFtcyk6CisgICAgZGVmIFZhckNoYW5nZWRfY29sb3VyKHNlbGYsICpwYXJhbXMpOgogICAgICAgICBzZWxmLk9uTmV3Q29sb3VyU2V0KCkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2J1aWx0aW5UaGVtZShzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmJ1aWx0aW5UaGVtZS5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnVGhlbWUnLCduYW1lJyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF9idWlsdGluVGhlbWUoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKKyAgICAgICAgaWYgdmFsdWUgPT0gJ0lETEUgRGFyayc6CisgICAgICAgICAgICBpZiBpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnVGhlbWUnLCAnbmFtZScpICE9ICdJRExFIE5ldyc6CisgICAgICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdUaGVtZScsICduYW1lJywgJ0lETEUgQ2xhc3NpYycpCisgICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ1RoZW1lJywgJ25hbWUyJywgdmFsdWUpCisgICAgICAgICAgICBzZWxmLm5ld19jdXN0b21fdGhlbWUuY29uZmlnKHRleHQ9J05ldyB0aGVtZSwgc2VlIEhlbHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZz0nIzUwMDAwMCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ1RoZW1lJywgJ25hbWUnLCB2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCAnVGhlbWUnLCAnbmFtZTInLCAnJykKKyAgICAgICAgICAgIHNlbGYubmV3X2N1c3RvbV90aGVtZS5jb25maWcodGV4dD0nJywgZmc9J2JsYWNrJykKICAgICAgICAgc2VsZi5QYWludFRoZW1lU2FtcGxlKCkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2N1c3RvbVRoZW1lKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKKyAgICBkZWYgVmFyQ2hhbmdlZF9jdXN0b21UaGVtZShzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLmN1c3RvbVRoZW1lLmdldCgpCiAgICAgICAgIGlmIHZhbHVlICE9ICctIG5vIGN1c3RvbSB0aGVtZXMgLSc6Ci0gICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnVGhlbWUnLCduYW1lJyx2YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCAnVGhlbWUnLCAnbmFtZScsIHZhbHVlKQogICAgICAgICAgICAgc2VsZi5QYWludFRoZW1lU2FtcGxlKCkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX3RoZW1lSXNCdWlsdGluKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ1RoZW1lJywnZGVmYXVsdCcsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfdGhlbWVJc0J1aWx0aW4oc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ1RoZW1lJywgJ2RlZmF1bHQnLCB2YWx1ZSkKICAgICAgICAgaWYgdmFsdWU6CiAgICAgICAgICAgICBzZWxmLlZhckNoYW5nZWRfYnVpbHRpblRoZW1lKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuVmFyQ2hhbmdlZF9jdXN0b21UaGVtZSgpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9oaWdobGlnaHRUYXJnZXQoc2VsZiwqcGFyYW1zKToKKyAgICBkZWYgVmFyQ2hhbmdlZF9oaWdobGlnaHRUYXJnZXQoc2VsZiwgKnBhcmFtcyk6CiAgICAgICAgIHNlbGYuU2V0SGlnaGxpZ2h0VGFyZ2V0KCkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2tleUJpbmRpbmcoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5rZXlCaW5kaW5nLmdldCgpCi0gICAgICAgIGtleVNldD1zZWxmLmN1c3RvbUtleXMuZ2V0KCkKLSAgICAgICAgZXZlbnQ9c2VsZi5saXN0QmluZGluZ3MuZ2V0KEFOQ0hPUikuc3BsaXQoKVswXQorICAgIGRlZiBWYXJDaGFuZ2VkX2tleUJpbmRpbmcoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5rZXlCaW5kaW5nLmdldCgpCisgICAgICAgIGtleVNldCA9IHNlbGYuY3VzdG9tS2V5cy5nZXQoKQorICAgICAgICBldmVudCA9IHNlbGYubGlzdEJpbmRpbmdzLmdldChBTkNIT1IpLnNwbGl0KClbMF0KICAgICAgICAgaWYgaWRsZUNvbmYuSXNDb3JlQmluZGluZyhldmVudCk6CiAgICAgICAgICAgICAjdGhpcyBpcyBhIGNvcmUga2V5YmluZGluZwotICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgna2V5cycsa2V5U2V0LGV2ZW50LHZhbHVlKQorICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgna2V5cycsIGtleVNldCwgZXZlbnQsIHZhbHVlKQogICAgICAgICBlbHNlOiAjdGhpcyBpcyBhbiBleHRlbnNpb24ga2V5IGJpbmRpbmcKLSAgICAgICAgICAgIGV4dE5hbWU9aWRsZUNvbmYuR2V0RXh0bk5hbWVGb3JFdmVudChldmVudCkKLSAgICAgICAgICAgIGV4dEtleWJpbmRTZWN0aW9uPWV4dE5hbWUrJ19jZmdCaW5kaW5ncycKLSAgICAgICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ2V4dGVuc2lvbnMnLGV4dEtleWJpbmRTZWN0aW9uLGV2ZW50LHZhbHVlKQorICAgICAgICAgICAgZXh0TmFtZSA9IGlkbGVDb25mLkdldEV4dG5OYW1lRm9yRXZlbnQoZXZlbnQpCisgICAgICAgICAgICBleHRLZXliaW5kU2VjdGlvbiA9IGV4dE5hbWUgKyAnX2NmZ0JpbmRpbmdzJworICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnZXh0ZW5zaW9ucycsIGV4dEtleWJpbmRTZWN0aW9uLCBldmVudCwgdmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9idWlsdGluS2V5cyhzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmJ1aWx0aW5LZXlzLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdLZXlzJywnbmFtZScsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfYnVpbHRpbktleXMoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5idWlsdGluS2V5cy5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0tleXMnLCAnbmFtZScsIHZhbHVlKQogICAgICAgICBzZWxmLkxvYWRLZXlzTGlzdCh2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2N1c3RvbUtleXMoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5jdXN0b21LZXlzLmdldCgpCisgICAgZGVmIFZhckNoYW5nZWRfY3VzdG9tS2V5cyhzZWxmLCAqcGFyYW1zKToKKyAgICAgICAgdmFsdWUgPSBzZWxmLmN1c3RvbUtleXMuZ2V0KCkKICAgICAgICAgaWYgdmFsdWUgIT0gJy0gbm8gY3VzdG9tIGtleXMgLSc6Ci0gICAgICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnS2V5cycsJ25hbWUnLHZhbHVlKQorICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdLZXlzJywgJ25hbWUnLCB2YWx1ZSkKICAgICAgICAgICAgIHNlbGYuTG9hZEtleXNMaXN0KHZhbHVlKQogCi0gICAgZGVmIFZhckNoYW5nZWRfa2V5c0FyZUJ1aWx0aW4oc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5rZXlzQXJlQnVpbHRpbi5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnS2V5cycsJ2RlZmF1bHQnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX2tleXNBcmVCdWlsdGluKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYua2V5c0FyZUJ1aWx0aW4uZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdLZXlzJywgJ2RlZmF1bHQnLCB2YWx1ZSkKICAgICAgICAgaWYgdmFsdWU6CiAgICAgICAgICAgICBzZWxmLlZhckNoYW5nZWRfYnVpbHRpbktleXMoKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5WYXJDaGFuZ2VkX2N1c3RvbUtleXMoKQogCi0gICAgZGVmIFZhckNoYW5nZWRfd2luV2lkdGgoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi53aW5XaWR0aC5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93Jywnd2lkdGgnLHZhbHVlKQorICAgIGRlZiBWYXJDaGFuZ2VkX3dpbldpZHRoKHNlbGYsICpwYXJhbXMpOgorICAgICAgICB2YWx1ZSA9IHNlbGYud2luV2lkdGguZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnd2lkdGgnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX3dpbkhlaWdodChzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLndpbkhlaWdodC5nZXQoKQotICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywnRWRpdG9yV2luZG93JywnaGVpZ2h0Jyx2YWx1ZSkKKyAgICBkZWYgVmFyQ2hhbmdlZF93aW5IZWlnaHQoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi53aW5IZWlnaHQuZ2V0KCkKKyAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsICdFZGl0b3JXaW5kb3cnLCAnaGVpZ2h0JywgdmFsdWUpCiAKLSAgICBkZWYgVmFyQ2hhbmdlZF9wYXJhV2lkdGgoc2VsZiwqcGFyYW1zKToKLSAgICAgICAgdmFsdWU9c2VsZi5wYXJhV2lkdGguZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0Zvcm1hdFBhcmFncmFwaCcsJ3BhcmFncmFwaCcsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfc3RhcnR1cEVkaXQoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5zdGFydHVwRWRpdC5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0dlbmVyYWwnLCAnZWRpdG9yLW9uLXN0YXJ0dXAnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX3N0YXJ0dXBFZGl0KHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuc3RhcnR1cEVkaXQuZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0dlbmVyYWwnLCdlZGl0b3Itb24tc3RhcnR1cCcsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfYXV0b1NhdmUoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5hdXRvU2F2ZS5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0dlbmVyYWwnLCAnYXV0b3NhdmUnLCB2YWx1ZSkKIAotICAgIGRlZiBWYXJDaGFuZ2VkX2F1dG9TYXZlKHNlbGYsKnBhcmFtcyk6Ci0gICAgICAgIHZhbHVlPXNlbGYuYXV0b1NhdmUuZ2V0KCkKLSAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0dlbmVyYWwnLCdhdXRvc2F2ZScsdmFsdWUpCi0KLSAgICBkZWYgVmFyQ2hhbmdlZF9lbmNvZGluZyhzZWxmLCpwYXJhbXMpOgotICAgICAgICB2YWx1ZT1zZWxmLmVuY29kaW5nLmdldCgpCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCdlbmNvZGluZycsdmFsdWUpCisgICAgZGVmIFZhckNoYW5nZWRfZW5jb2Rpbmcoc2VsZiwgKnBhcmFtcyk6CisgICAgICAgIHZhbHVlID0gc2VsZi5lbmNvZGluZy5nZXQoKQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdlbmNvZGluZycsIHZhbHVlKQogCiAgICAgZGVmIFJlc2V0Q2hhbmdlZEl0ZW1zKHNlbGYpOgogICAgICAgICAjV2hlbiBhbnkgY29uZmlnIGl0ZW0gaXMgY2hhbmdlZCBpbiB0aGlzIGRpYWxvZywgYW4gZW50cnkKQEAgLTU0OCwyNCArNTkwLDI1IEBACiAgICAgICAgICNkaWN0aW9uYXJ5LiBUaGUga2V5IHNob3VsZCBiZSB0aGUgY29uZmlnIGZpbGUgc2VjdGlvbiBuYW1lIGFuZCB0aGUKICAgICAgICAgI3ZhbHVlIGEgZGljdGlvbmFyeSwgd2hvc2Uga2V5OnZhbHVlIHBhaXJzIGFyZSBpdGVtPXZhbHVlIHBhaXJzIGZvcgogICAgICAgICAjdGhhdCBjb25maWcgZmlsZSBzZWN0aW9uLgotICAgICAgICBzZWxmLmNoYW5nZWRJdGVtcz17J21haW4nOnt9LCdoaWdobGlnaHQnOnt9LCdrZXlzJzp7fSwnZXh0ZW5zaW9ucyc6e319CisgICAgICAgIHNlbGYuY2hhbmdlZEl0ZW1zID0geydtYWluJzp7fSwgJ2hpZ2hsaWdodCc6e30sICdrZXlzJzp7fSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V4dGVuc2lvbnMnOnt9fQogCi0gICAgZGVmIEFkZENoYW5nZWRJdGVtKHNlbGYsdHlwZSxzZWN0aW9uLGl0ZW0sdmFsdWUpOgotICAgICAgICB2YWx1ZT1zdHIodmFsdWUpICNtYWtlIHN1cmUgd2UgdXNlIGEgc3RyaW5nCi0gICAgICAgIGlmIHNlY3Rpb24gbm90IGluIHNlbGYuY2hhbmdlZEl0ZW1zW3R5cGVdOgotICAgICAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV1bc2VjdGlvbl09e30KLSAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwZV1bc2VjdGlvbl1baXRlbV09dmFsdWUKKyAgICBkZWYgQWRkQ2hhbmdlZEl0ZW0oc2VsZiwgdHlwLCBzZWN0aW9uLCBpdGVtLCB2YWx1ZSk6CisgICAgICAgIHZhbHVlID0gc3RyKHZhbHVlKSAjbWFrZSBzdXJlIHdlIHVzZSBhIHN0cmluZworICAgICAgICBpZiBzZWN0aW9uIG5vdCBpbiBzZWxmLmNoYW5nZWRJdGVtc1t0eXBdOgorICAgICAgICAgICAgc2VsZi5jaGFuZ2VkSXRlbXNbdHlwXVtzZWN0aW9uXSA9IHt9CisgICAgICAgIHNlbGYuY2hhbmdlZEl0ZW1zW3R5cF1bc2VjdGlvbl1baXRlbV0gPSB2YWx1ZQogCiAgICAgZGVmIEdldERlZmF1bHRJdGVtcyhzZWxmKToKLSAgICAgICAgZEl0ZW1zPXsnbWFpbic6e30sJ2hpZ2hsaWdodCc6e30sJ2tleXMnOnt9LCdleHRlbnNpb25zJzp7fX0KKyAgICAgICAgZEl0ZW1zPXsnbWFpbic6e30sICdoaWdobGlnaHQnOnt9LCAna2V5cyc6e30sICdleHRlbnNpb25zJzp7fX0KICAgICAgICAgZm9yIGNvbmZpZ1R5cGUgaW4gZEl0ZW1zOgotICAgICAgICAgICAgc2VjdGlvbnM9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLGNvbmZpZ1R5cGUpCisgICAgICAgICAgICBzZWN0aW9ucyA9IGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCdkZWZhdWx0JywgY29uZmlnVHlwZSkKICAgICAgICAgICAgIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zOgotICAgICAgICAgICAgICAgIGRJdGVtc1tjb25maWdUeXBlXVtzZWN0aW9uXT17fQotICAgICAgICAgICAgICAgIG9wdGlvbnM9aWRsZUNvbmYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5HZXRPcHRpb25MaXN0KHNlY3Rpb24pCisgICAgICAgICAgICAgICAgZEl0ZW1zW2NvbmZpZ1R5cGVdW3NlY3Rpb25dID0ge30KKyAgICAgICAgICAgICAgICBvcHRpb25zID0gaWRsZUNvbmYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5HZXRPcHRpb25MaXN0KHNlY3Rpb24pCiAgICAgICAgICAgICAgICAgZm9yIG9wdGlvbiBpbiBvcHRpb25zOgotICAgICAgICAgICAgICAgICAgICBkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl1bb3B0aW9uXT0oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRsZUNvbmYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5HZXQoc2VjdGlvbixvcHRpb24pKQorICAgICAgICAgICAgICAgICAgICBkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl1bb3B0aW9uXSA9ICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLkdldChzZWN0aW9uLCBvcHRpb24pKQogICAgICAgICByZXR1cm4gZEl0ZW1zCiAKICAgICBkZWYgU2V0VGhlbWVUeXBlKHNlbGYpOgpAQCAtNTkxLDI2ICs2MzQsMjYgQEAKICAgICAgICAgICAgIHNlbGYuYnV0dG9uRGVsZXRlQ3VzdG9tS2V5cy5jb25maWcoc3RhdGU9Tk9STUFMKQogCiAgICAgZGVmIEdldE5ld0tleXMoc2VsZik6Ci0gICAgICAgIGxpc3RJbmRleD1zZWxmLmxpc3RCaW5kaW5ncy5pbmRleChBTkNIT1IpCi0gICAgICAgIGJpbmRpbmc9c2VsZi5saXN0QmluZGluZ3MuZ2V0KGxpc3RJbmRleCkKLSAgICAgICAgYmluZE5hbWU9YmluZGluZy5zcGxpdCgpWzBdICNmaXJzdCBwYXJ0LCB1cCB0byBmaXJzdCBzcGFjZQorICAgICAgICBsaXN0SW5kZXggPSBzZWxmLmxpc3RCaW5kaW5ncy5pbmRleChBTkNIT1IpCisgICAgICAgIGJpbmRpbmcgPSBzZWxmLmxpc3RCaW5kaW5ncy5nZXQobGlzdEluZGV4KQorICAgICAgICBiaW5kTmFtZSA9IGJpbmRpbmcuc3BsaXQoKVswXSAjZmlyc3QgcGFydCwgdXAgdG8gZmlyc3Qgc3BhY2UKICAgICAgICAgaWYgc2VsZi5rZXlzQXJlQnVpbHRpbi5nZXQoKToKLSAgICAgICAgICAgIGN1cnJlbnRLZXlTZXROYW1lPXNlbGYuYnVpbHRpbktleXMuZ2V0KCkKKyAgICAgICAgICAgIGN1cnJlbnRLZXlTZXROYW1lID0gc2VsZi5idWlsdGluS2V5cy5nZXQoKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgY3VycmVudEtleVNldE5hbWU9c2VsZi5jdXN0b21LZXlzLmdldCgpCi0gICAgICAgIGN1cnJlbnRCaW5kaW5ncz1pZGxlQ29uZi5HZXRDdXJyZW50S2V5U2V0KCkKKyAgICAgICAgICAgIGN1cnJlbnRLZXlTZXROYW1lID0gc2VsZi5jdXN0b21LZXlzLmdldCgpCisgICAgICAgIGN1cnJlbnRCaW5kaW5ncyA9IGlkbGVDb25mLkdldEN1cnJlbnRLZXlTZXQoKQogICAgICAgICBpZiBjdXJyZW50S2V5U2V0TmFtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddOiAjdW5zYXZlZCBjaGFuZ2VzCi0gICAgICAgICAgICBrZXlTZXRDaGFuZ2VzPXNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11bY3VycmVudEtleVNldE5hbWVdCisgICAgICAgICAgICBrZXlTZXRDaGFuZ2VzID0gc2VsZi5jaGFuZ2VkSXRlbXNbJ2tleXMnXVtjdXJyZW50S2V5U2V0TmFtZV0KICAgICAgICAgICAgIGZvciBldmVudCBpbiBrZXlTZXRDaGFuZ2VzOgotICAgICAgICAgICAgICAgIGN1cnJlbnRCaW5kaW5nc1tldmVudF09a2V5U2V0Q2hhbmdlc1tldmVudF0uc3BsaXQoKQorICAgICAgICAgICAgICAgIGN1cnJlbnRCaW5kaW5nc1tldmVudF0gPSBrZXlTZXRDaGFuZ2VzW2V2ZW50XS5zcGxpdCgpCiAgICAgICAgIGN1cnJlbnRLZXlTZXF1ZW5jZXMgPSBsaXN0KGN1cnJlbnRCaW5kaW5ncy52YWx1ZXMoKSkKLSAgICAgICAgbmV3S2V5cz1HZXRLZXlzRGlhbG9nKHNlbGYsJ0dldCBOZXcgS2V5cycsYmluZE5hbWUsCisgICAgICAgIG5ld0tleXMgPSBHZXRLZXlzRGlhbG9nKHNlbGYsICdHZXQgTmV3IEtleXMnLCBiaW5kTmFtZSwKICAgICAgICAgICAgICAgICBjdXJyZW50S2V5U2VxdWVuY2VzKS5yZXN1bHQKICAgICAgICAgaWYgbmV3S2V5czogI25ldyBrZXlzIHdlcmUgc3BlY2lmaWVkCiAgICAgICAgICAgICBpZiBzZWxmLmtleXNBcmVCdWlsdGluLmdldCgpOiAjY3VycmVudCBrZXkgc2V0IGlzIGEgYnVpbHQtaW4KLSAgICAgICAgICAgICAgICBtZXNzYWdlPSgnWW91ciBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQgYXMgYSBuZXcgQ3VzdG9tIEtleSBTZXQuICcrCi0gICAgICAgICAgICAgICAgICAgICAgICAnRW50ZXIgYSBuYW1lIGZvciB5b3VyIG5ldyBDdXN0b20gS2V5IFNldCBiZWxvdy4nKQotICAgICAgICAgICAgICAgIG5ld0tleVNldD1zZWxmLkdldE5ld0tleXNOYW1lKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgbWVzc2FnZSA9ICgnWW91ciBjaGFuZ2VzIHdpbGwgYmUgc2F2ZWQgYXMgYSBuZXcgQ3VzdG9tIEtleSBTZXQuJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBFbnRlciBhIG5hbWUgZm9yIHlvdXIgbmV3IEN1c3RvbSBLZXkgU2V0IGJlbG93LicpCisgICAgICAgICAgICAgICAgbmV3S2V5U2V0ID0gc2VsZi5HZXROZXdLZXlzTmFtZShtZXNzYWdlKQogICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdLZXlTZXQ6ICN1c2VyIGNhbmNlbGxlZCBjdXN0b20ga2V5IHNldCBjcmVhdGlvbgogICAgICAgICAgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5zZWxlY3Rfc2V0KGxpc3RJbmRleCkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5saXN0QmluZGluZ3Muc2VsZWN0X2FuY2hvcihsaXN0SW5kZXgpCkBAIC02MTgsNyArNjYxLDcgQEAKICAgICAgICAgICAgICAgICBlbHNlOiAjY3JlYXRlIG5ldyBjdXN0b20ga2V5IHNldCBiYXNlZCBvbiBwcmV2aW91c2x5IGFjdGl2ZSBrZXkgc2V0CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuQ3JlYXRlTmV3S2V5U2V0KG5ld0tleVNldCkKICAgICAgICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLmRlbGV0ZShsaXN0SW5kZXgpCi0gICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5pbnNlcnQobGlzdEluZGV4LGJpbmROYW1lKycgLSAnK25ld0tleXMpCisgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5pbnNlcnQobGlzdEluZGV4LCBiaW5kTmFtZSsnIC0gJytuZXdLZXlzKQogICAgICAgICAgICAgc2VsZi5saXN0QmluZGluZ3Muc2VsZWN0X3NldChsaXN0SW5kZXgpCiAgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5zZWxlY3RfYW5jaG9yKGxpc3RJbmRleCkKICAgICAgICAgICAgIHNlbGYua2V5QmluZGluZy5zZXQobmV3S2V5cykKQEAgLTYyNiw2NSArNjY5LDY1IEBACiAgICAgICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5zZWxlY3Rfc2V0KGxpc3RJbmRleCkKICAgICAgICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLnNlbGVjdF9hbmNob3IobGlzdEluZGV4KQogCi0gICAgZGVmIEdldE5ld0tleXNOYW1lKHNlbGYsbWVzc2FnZSk6Ci0gICAgICAgIHVzZWROYW1lcz0oaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdrZXlzJykrCi0gICAgICAgICAgICAgICAgaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCdrZXlzJykpCi0gICAgICAgIG5ld0tleVNldD1HZXRDZmdTZWN0aW9uTmFtZURpYWxvZyhzZWxmLCdOZXcgQ3VzdG9tIEtleSBTZXQnLAotICAgICAgICAgICAgICAgIG1lc3NhZ2UsdXNlZE5hbWVzKS5yZXN1bHQKKyAgICBkZWYgR2V0TmV3S2V5c05hbWUoc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHVzZWROYW1lcyA9IChpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdrZXlzJykgKworICAgICAgICAgICAgICAgIGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCdkZWZhdWx0JywgJ2tleXMnKSkKKyAgICAgICAgbmV3S2V5U2V0ID0gR2V0Q2ZnU2VjdGlvbk5hbWVEaWFsb2coCisgICAgICAgICAgICAgICAgc2VsZiwgJ05ldyBDdXN0b20gS2V5IFNldCcsIG1lc3NhZ2UsIHVzZWROYW1lcykucmVzdWx0CiAgICAgICAgIHJldHVybiBuZXdLZXlTZXQKIAogICAgIGRlZiBTYXZlQXNOZXdLZXlTZXQoc2VsZik6Ci0gICAgICAgIG5ld0tleXNOYW1lPXNlbGYuR2V0TmV3S2V5c05hbWUoJ05ldyBLZXkgU2V0IE5hbWU6JykKKyAgICAgICAgbmV3S2V5c05hbWUgPSBzZWxmLkdldE5ld0tleXNOYW1lKCdOZXcgS2V5IFNldCBOYW1lOicpCiAgICAgICAgIGlmIG5ld0tleXNOYW1lOgogICAgICAgICAgICAgc2VsZi5DcmVhdGVOZXdLZXlTZXQobmV3S2V5c05hbWUpCiAKLSAgICBkZWYgS2V5QmluZGluZ1NlbGVjdGVkKHNlbGYsZXZlbnQpOgorICAgIGRlZiBLZXlCaW5kaW5nU2VsZWN0ZWQoc2VsZiwgZXZlbnQpOgogICAgICAgICBzZWxmLmJ1dHRvbk5ld0tleXMuY29uZmlnKHN0YXRlPU5PUk1BTCkKIAotICAgIGRlZiBDcmVhdGVOZXdLZXlTZXQoc2VsZixuZXdLZXlTZXROYW1lKToKKyAgICBkZWYgQ3JlYXRlTmV3S2V5U2V0KHNlbGYsIG5ld0tleVNldE5hbWUpOgogICAgICAgICAjY3JlYXRlcyBuZXcgY3VzdG9tIGtleSBzZXQgYmFzZWQgb24gdGhlIHByZXZpb3VzbHkgYWN0aXZlIGtleSBzZXQsCiAgICAgICAgICNhbmQgbWFrZXMgdGhlIG5ldyBrZXkgc2V0IGFjdGl2ZQogICAgICAgICBpZiBzZWxmLmtleXNBcmVCdWlsdGluLmdldCgpOgotICAgICAgICAgICAgcHJldktleVNldE5hbWU9c2VsZi5idWlsdGluS2V5cy5nZXQoKQorICAgICAgICAgICAgcHJldktleVNldE5hbWUgPSBzZWxmLmJ1aWx0aW5LZXlzLmdldCgpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwcmV2S2V5U2V0TmFtZT1zZWxmLmN1c3RvbUtleXMuZ2V0KCkKLSAgICAgICAgcHJldktleXM9aWRsZUNvbmYuR2V0Q29yZUtleXMocHJldktleVNldE5hbWUpCi0gICAgICAgIG5ld0tleXM9e30KKyAgICAgICAgICAgIHByZXZLZXlTZXROYW1lID0gc2VsZi5jdXN0b21LZXlzLmdldCgpCisgICAgICAgIHByZXZLZXlzID0gaWRsZUNvbmYuR2V0Q29yZUtleXMocHJldktleVNldE5hbWUpCisgICAgICAgIG5ld0tleXMgPSB7fQogICAgICAgICBmb3IgZXZlbnQgaW4gcHJldktleXM6ICNhZGQga2V5IHNldCB0byBjaGFuZ2VkIGl0ZW1zCi0gICAgICAgICAgICBldmVudE5hbWU9ZXZlbnRbMjotMl0gI3RyaW0gb2ZmIHRoZSBhbmdsZSBicmFja2V0cwotICAgICAgICAgICAgYmluZGluZz0nICcuam9pbihwcmV2S2V5c1tldmVudF0pCi0gICAgICAgICAgICBuZXdLZXlzW2V2ZW50TmFtZV09YmluZGluZworICAgICAgICAgICAgZXZlbnROYW1lID0gZXZlbnRbMjotMl0gI3RyaW0gb2ZmIHRoZSBhbmdsZSBicmFja2V0cworICAgICAgICAgICAgYmluZGluZyA9ICcgJy5qb2luKHByZXZLZXlzW2V2ZW50XSkKKyAgICAgICAgICAgIG5ld0tleXNbZXZlbnROYW1lXSA9IGJpbmRpbmcKICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHByZXYga2V5IHNldAogICAgICAgICBpZiBwcmV2S2V5U2V0TmFtZSBpbiBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddOgotICAgICAgICAgICAga2V5U2V0Q2hhbmdlcz1zZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW3ByZXZLZXlTZXROYW1lXQorICAgICAgICAgICAga2V5U2V0Q2hhbmdlcyA9IHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11bcHJldktleVNldE5hbWVdCiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4ga2V5U2V0Q2hhbmdlczoKLSAgICAgICAgICAgICAgICBuZXdLZXlzW2V2ZW50XT1rZXlTZXRDaGFuZ2VzW2V2ZW50XQorICAgICAgICAgICAgICAgIG5ld0tleXNbZXZlbnRdID0ga2V5U2V0Q2hhbmdlc1tldmVudF0KICAgICAgICAgI3NhdmUgdGhlIG5ldyB0aGVtZQotICAgICAgICBzZWxmLlNhdmVOZXdLZXlTZXQobmV3S2V5U2V0TmFtZSxuZXdLZXlzKQorICAgICAgICBzZWxmLlNhdmVOZXdLZXlTZXQobmV3S2V5U2V0TmFtZSwgbmV3S2V5cykKICAgICAgICAgI2NoYW5nZSBndWkgb3ZlciB0byB0aGUgbmV3IGtleSBzZXQKLSAgICAgICAgY3VzdG9tS2V5TGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsJ2tleXMnKQorICAgICAgICBjdXN0b21LZXlMaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAna2V5cycpCiAgICAgICAgIGN1c3RvbUtleUxpc3Quc29ydCgpCi0gICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShjdXN0b21LZXlMaXN0LG5ld0tleVNldE5hbWUpCisgICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShjdXN0b21LZXlMaXN0LCBuZXdLZXlTZXROYW1lKQogICAgICAgICBzZWxmLmtleXNBcmVCdWlsdGluLnNldCgwKQogICAgICAgICBzZWxmLlNldEtleXNUeXBlKCkKIAotICAgIGRlZiBMb2FkS2V5c0xpc3Qoc2VsZixrZXlTZXROYW1lKToKLSAgICAgICAgcmVzZWxlY3Q9MAotICAgICAgICBuZXdLZXlTZXQ9MAorICAgIGRlZiBMb2FkS2V5c0xpc3Qoc2VsZiwga2V5U2V0TmFtZSk6CisgICAgICAgIHJlc2VsZWN0ID0gMAorICAgICAgICBuZXdLZXlTZXQgPSAwCiAgICAgICAgIGlmIHNlbGYubGlzdEJpbmRpbmdzLmN1cnNlbGVjdGlvbigpOgotICAgICAgICAgICAgcmVzZWxlY3Q9MQotICAgICAgICAgICAgbGlzdEluZGV4PXNlbGYubGlzdEJpbmRpbmdzLmluZGV4KEFOQ0hPUikKLSAgICAgICAga2V5U2V0PWlkbGVDb25mLkdldEtleVNldChrZXlTZXROYW1lKQorICAgICAgICAgICAgcmVzZWxlY3QgPSAxCisgICAgICAgICAgICBsaXN0SW5kZXggPSBzZWxmLmxpc3RCaW5kaW5ncy5pbmRleChBTkNIT1IpCisgICAgICAgIGtleVNldCA9IGlkbGVDb25mLkdldEtleVNldChrZXlTZXROYW1lKQogICAgICAgICBiaW5kTmFtZXMgPSBsaXN0KGtleVNldC5rZXlzKCkpCiAgICAgICAgIGJpbmROYW1lcy5zb3J0KCkKLSAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuZGVsZXRlKDAsRU5EKQorICAgICAgICBzZWxmLmxpc3RCaW5kaW5ncy5kZWxldGUoMCwgRU5EKQogICAgICAgICBmb3IgYmluZE5hbWUgaW4gYmluZE5hbWVzOgotICAgICAgICAgICAga2V5PScgJy5qb2luKGtleVNldFtiaW5kTmFtZV0pICNtYWtlIGtleShzKSBpbnRvIGEgc3RyaW5nCi0gICAgICAgICAgICBiaW5kTmFtZT1iaW5kTmFtZVsyOi0yXSAjdHJpbSBvZmYgdGhlIGFuZ2xlIGJyYWNrZXRzCisgICAgICAgICAgICBrZXkgPSAnICcuam9pbihrZXlTZXRbYmluZE5hbWVdKSAjbWFrZSBrZXkocykgaW50byBhIHN0cmluZworICAgICAgICAgICAgYmluZE5hbWUgPSBiaW5kTmFtZVsyOi0yXSAjdHJpbSBvZmYgdGhlIGFuZ2xlIGJyYWNrZXRzCiAgICAgICAgICAgICBpZiBrZXlTZXROYW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ106CiAgICAgICAgICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMga2V5IHNldAogICAgICAgICAgICAgICAgIGlmIGJpbmROYW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydrZXlzJ11ba2V5U2V0TmFtZV06Ci0gICAgICAgICAgICAgICAgICAgIGtleT1zZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW2tleVNldE5hbWVdW2JpbmROYW1lXQorICAgICAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLmNoYW5nZWRJdGVtc1sna2V5cyddW2tleVNldE5hbWVdW2JpbmROYW1lXQogICAgICAgICAgICAgc2VsZi5saXN0QmluZGluZ3MuaW5zZXJ0KEVORCwgYmluZE5hbWUrJyAtICcra2V5KQogICAgICAgICBpZiByZXNlbGVjdDoKICAgICAgICAgICAgIHNlbGYubGlzdEJpbmRpbmdzLnNlZShsaXN0SW5kZXgpCkBAIC02OTMsOSArNzM2LDkgQEAKIAogICAgIGRlZiBEZWxldGVDdXN0b21LZXlzKHNlbGYpOgogICAgICAgICBrZXlTZXROYW1lPXNlbGYuY3VzdG9tS2V5cy5nZXQoKQotICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKCdEZWxldGUgS2V5IFNldCcsJ0FyZSB5b3Ugc3VyZSB5b3Ugd2lzaCAnKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBkZWxldGUgdGhlIGtleSBzZXQgJXIgPycgJSAoa2V5U2V0TmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYpOgorICAgICAgICBkZWxtc2cgPSAnQXJlIHlvdSBzdXJlIHlvdSB3aXNoIHRvIGRlbGV0ZSB0aGUga2V5IHNldCAlciA/JworICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKAorICAgICAgICAgICAgICAgICdEZWxldGUgS2V5IFNldCcsICBkZWxtc2cgJSBrZXlTZXROYW1lLCBwYXJlbnQ9c2VsZik6CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgI3JlbW92ZSBrZXkgc2V0IGZyb20gY29uZmlnCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2tleXMnXS5yZW1vdmVfc2VjdGlvbihrZXlTZXROYW1lKQpAQCAtNzA0LDI1ICs3NDcsMjUgQEAKICAgICAgICAgI3dyaXRlIGNoYW5nZXMKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1sna2V5cyddLlNhdmUoKQogICAgICAgICAjcmVsb2FkIHVzZXIga2V5IHNldCBsaXN0Ci0gICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywna2V5cycpCisgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAna2V5cycpCiAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQogICAgICAgICBpZiBub3QgaXRlbUxpc3Q6CiAgICAgICAgICAgICBzZWxmLnJhZGlvS2V5c0N1c3RvbS5jb25maWcoc3RhdGU9RElTQUJMRUQpCi0gICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsJy0gbm8gY3VzdG9tIGtleXMgLScpCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsICctIG5vIGN1c3RvbSBrZXlzIC0nKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LGl0ZW1MaXN0WzBdKQorICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgI3JldmVydCB0byBkZWZhdWx0IGtleSBzZXQKLSAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsJ2RlZmF1bHQnKSkKLSAgICAgICAgc2VsZi5idWlsdGluS2V5cy5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsJ25hbWUnKSkKKyAgICAgICAgc2VsZi5rZXlzQXJlQnVpbHRpbi5zZXQoaWRsZUNvbmYuZGVmYXVsdENmZ1snbWFpbiddLkdldCgnS2V5cycsICdkZWZhdWx0JykpCisgICAgICAgIHNlbGYuYnVpbHRpbktleXMuc2V0KGlkbGVDb25mLmRlZmF1bHRDZmdbJ21haW4nXS5HZXQoJ0tleXMnLCAnbmFtZScpKQogICAgICAgICAjdXNlciBjYW4ndCBiYWNrIG91dCBvZiB0aGVzZSBjaGFuZ2VzLCB0aGV5IG11c3QgYmUgYXBwbGllZCBub3cKICAgICAgICAgc2VsZi5BcHBseSgpCiAgICAgICAgIHNlbGYuU2V0S2V5c1R5cGUoKQogCiAgICAgZGVmIERlbGV0ZUN1c3RvbVRoZW1lKHNlbGYpOgotICAgICAgICB0aGVtZU5hbWU9c2VsZi5jdXN0b21UaGVtZS5nZXQoKQotICAgICAgICBpZiBub3QgdGtNZXNzYWdlQm94LmFza3llc25vKCdEZWxldGUgVGhlbWUnLCdBcmUgeW91IHN1cmUgeW91IHdpc2ggJysKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndG8gZGVsZXRlIHRoZSB0aGVtZSAlciA/JyAlICh0aGVtZU5hbWUsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9c2VsZik6CisgICAgICAgIHRoZW1lTmFtZSA9IHNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKKyAgICAgICAgZGVsbXNnID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBkZWxldGUgdGhlIHRoZW1lICVyID8nCisgICAgICAgIGlmIG5vdCB0a01lc3NhZ2VCb3guYXNreWVzbm8oCisgICAgICAgICAgICAgICAgJ0RlbGV0ZSBUaGVtZScsICBkZWxtc2cgJSB0aGVtZU5hbWUsIHBhcmVudD1zZWxmKToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICAjcmVtb3ZlIHRoZW1lIGZyb20gY29uZmlnCiAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLnJlbW92ZV9zZWN0aW9uKHRoZW1lTmFtZSkKQEAgLTczMSwxNTMgKzc3NCwxNDkgQEAKICAgICAgICAgI3dyaXRlIGNoYW5nZXMKICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2F2ZSgpCiAgICAgICAgICNyZWxvYWQgdXNlciB0aGVtZSBsaXN0Ci0gICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywnaGlnaGxpZ2h0JykKKyAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdoaWdobGlnaHQnKQogICAgICAgICBpdGVtTGlzdC5zb3J0KCkKICAgICAgICAgaWYgbm90IGl0ZW1MaXN0OgogICAgICAgICAgICAgc2VsZi5yYWRpb1RoZW1lQ3VzdG9tLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsJy0gbm8gY3VzdG9tIHRoZW1lcyAtJykKKyAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsICctIG5vIGN1c3RvbSB0aGVtZXMgLScpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LGl0ZW1MaXN0WzBdKQorICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20uU2V0TWVudShpdGVtTGlzdCwgaXRlbUxpc3RbMF0pCiAgICAgICAgICNyZXZlcnQgdG8gZGVmYXVsdCB0aGVtZQotICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsJ2RlZmF1bHQnKSkKLSAgICAgICAgc2VsZi5idWlsdGluVGhlbWUuc2V0KGlkbGVDb25mLmRlZmF1bHRDZmdbJ21haW4nXS5HZXQoJ1RoZW1lJywnbmFtZScpKQorICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICdkZWZhdWx0JykpCisgICAgICAgIHNlbGYuYnVpbHRpblRoZW1lLnNldChpZGxlQ29uZi5kZWZhdWx0Q2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICduYW1lJykpCiAgICAgICAgICN1c2VyIGNhbid0IGJhY2sgb3V0IG9mIHRoZXNlIGNoYW5nZXMsIHRoZXkgbXVzdCBiZSBhcHBsaWVkIG5vdwogICAgICAgICBzZWxmLkFwcGx5KCkKICAgICAgICAgc2VsZi5TZXRUaGVtZVR5cGUoKQogCiAgICAgZGVmIEdldENvbG91cihzZWxmKToKLSAgICAgICAgdGFyZ2V0PXNlbGYuaGlnaGxpZ2h0VGFyZ2V0LmdldCgpCi0gICAgICAgIHByZXZDb2xvdXI9c2VsZi5mcmFtZUNvbG91clNldC5jZ2V0KCdiZycpCi0gICAgICAgIHJnYlR1cGxldCwgY29sb3VyU3RyaW5nID0gdGtDb2xvckNob29zZXIuYXNrY29sb3IocGFyZW50PXNlbGYsCi0gICAgICAgICAgICB0aXRsZT0nUGljayBuZXcgY29sb3VyIGZvciA6ICcrdGFyZ2V0LGluaXRpYWxjb2xvcj1wcmV2Q29sb3VyKQotICAgICAgICBpZiBjb2xvdXJTdHJpbmcgYW5kIChjb2xvdXJTdHJpbmchPXByZXZDb2xvdXIpOgorICAgICAgICB0YXJnZXQgPSBzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKQorICAgICAgICBwcmV2Q29sb3VyID0gc2VsZi5mcmFtZUNvbG91clNldC5jZ2V0KCdiZycpCisgICAgICAgIHJnYlR1cGxldCwgY29sb3VyU3RyaW5nID0gdGtDb2xvckNob29zZXIuYXNrY29sb3IoCisgICAgICAgICAgICAgICAgcGFyZW50PXNlbGYsIHRpdGxlPSdQaWNrIG5ldyBjb2xvdXIgZm9yIDogJyt0YXJnZXQsCisgICAgICAgICAgICAgICAgaW5pdGlhbGNvbG9yPXByZXZDb2xvdXIpCisgICAgICAgIGlmIGNvbG91clN0cmluZyBhbmQgKGNvbG91clN0cmluZyAhPSBwcmV2Q29sb3VyKToKICAgICAgICAgICAgICN1c2VyIGRpZG4ndCBjYW5jZWwsIGFuZCB0aGV5IGNob3NlIGEgbmV3IGNvbG91cgotICAgICAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogI2N1cnJlbnQgdGhlbWUgaXMgYSBidWlsdC1pbgotICAgICAgICAgICAgICAgIG1lc3NhZ2U9KCdZb3VyIGNoYW5nZXMgd2lsbCBiZSBzYXZlZCBhcyBhIG5ldyBDdXN0b20gVGhlbWUuICcrCi0gICAgICAgICAgICAgICAgICAgICAgICAnRW50ZXIgYSBuYW1lIGZvciB5b3VyIG5ldyBDdXN0b20gVGhlbWUgYmVsb3cuJykKLSAgICAgICAgICAgICAgICBuZXdUaGVtZT1zZWxmLkdldE5ld1RoZW1lTmFtZShtZXNzYWdlKQotICAgICAgICAgICAgICAgIGlmIG5vdCBuZXdUaGVtZTogI3VzZXIgY2FuY2VsbGVkIGN1c3RvbSB0aGVtZSBjcmVhdGlvbgorICAgICAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogICNjdXJyZW50IHRoZW1lIGlzIGEgYnVpbHQtaW4KKyAgICAgICAgICAgICAgICBtZXNzYWdlID0gKCdZb3VyIGNoYW5nZXMgd2lsbCBiZSBzYXZlZCBhcyBhIG5ldyBDdXN0b20gVGhlbWUuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdFbnRlciBhIG5hbWUgZm9yIHlvdXIgbmV3IEN1c3RvbSBUaGVtZSBiZWxvdy4nKQorICAgICAgICAgICAgICAgIG5ld1RoZW1lID0gc2VsZi5HZXROZXdUaGVtZU5hbWUobWVzc2FnZSkKKyAgICAgICAgICAgICAgICBpZiBub3QgbmV3VGhlbWU6ICAjdXNlciBjYW5jZWxsZWQgY3VzdG9tIHRoZW1lIGNyZWF0aW9uCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgIGVsc2U6ICNjcmVhdGUgbmV3IGN1c3RvbSB0aGVtZSBiYXNlZCBvbiBwcmV2aW91c2x5IGFjdGl2ZSB0aGVtZQorICAgICAgICAgICAgICAgIGVsc2U6ICAjY3JlYXRlIG5ldyBjdXN0b20gdGhlbWUgYmFzZWQgb24gcHJldmlvdXNseSBhY3RpdmUgdGhlbWUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5DcmVhdGVOZXdUaGVtZShuZXdUaGVtZSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2xvdXIuc2V0KGNvbG91clN0cmluZykKLSAgICAgICAgICAgIGVsc2U6ICNjdXJyZW50IHRoZW1lIGlzIHVzZXIgZGVmaW5lZAorICAgICAgICAgICAgZWxzZTogICNjdXJyZW50IHRoZW1lIGlzIHVzZXIgZGVmaW5lZAogICAgICAgICAgICAgICAgIHNlbGYuY29sb3VyLnNldChjb2xvdXJTdHJpbmcpCiAKICAgICBkZWYgT25OZXdDb2xvdXJTZXQoc2VsZik6CiAgICAgICAgIG5ld0NvbG91cj1zZWxmLmNvbG91ci5nZXQoKQotICAgICAgICBzZWxmLmZyYW1lQ29sb3VyU2V0LmNvbmZpZyhiZz1uZXdDb2xvdXIpI3NldCBzYW1wbGUKLSAgICAgICAgaWYgc2VsZi5mZ0hpbGl0ZS5nZXQoKTogcGxhbmU9J2ZvcmVncm91bmQnCi0gICAgICAgIGVsc2U6IHBsYW5lPSdiYWNrZ3JvdW5kJwotICAgICAgICBzYW1wbGVFbGVtZW50PXNlbGYudGhlbWVFbGVtZW50c1tzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKV1bMF0KKyAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldC5jb25maWcoYmc9bmV3Q29sb3VyKSAgI3NldCBzYW1wbGUKKyAgICAgICAgcGxhbmUgPSdmb3JlZ3JvdW5kJyBpZiBzZWxmLmZnSGlsaXRlLmdldCgpIGVsc2UgJ2JhY2tncm91bmQnCisgICAgICAgIHNhbXBsZUVsZW1lbnQgPSBzZWxmLnRoZW1lRWxlbWVudHNbc2VsZi5oaWdobGlnaHRUYXJnZXQuZ2V0KCldWzBdCiAgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS50YWdfY29uZmlnKHNhbXBsZUVsZW1lbnQsICoqe3BsYW5lOm5ld0NvbG91cn0pCi0gICAgICAgIHRoZW1lPXNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKLSAgICAgICAgdGhlbWVFbGVtZW50PXNhbXBsZUVsZW1lbnQrJy0nK3BsYW5lCi0gICAgICAgIHNlbGYuQWRkQ2hhbmdlZEl0ZW0oJ2hpZ2hsaWdodCcsdGhlbWUsdGhlbWVFbGVtZW50LG5ld0NvbG91cikKKyAgICAgICAgdGhlbWUgPSBzZWxmLmN1c3RvbVRoZW1lLmdldCgpCisgICAgICAgIHRoZW1lRWxlbWVudCA9IHNhbXBsZUVsZW1lbnQgKyAnLScgKyBwbGFuZQorICAgICAgICBzZWxmLkFkZENoYW5nZWRJdGVtKCdoaWdobGlnaHQnLCB0aGVtZSwgdGhlbWVFbGVtZW50LCBuZXdDb2xvdXIpCiAKLSAgICBkZWYgR2V0TmV3VGhlbWVOYW1lKHNlbGYsbWVzc2FnZSk6Ci0gICAgICAgIHVzZWROYW1lcz0oaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdoaWdobGlnaHQnKSsKLSAgICAgICAgICAgICAgICBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2hpZ2hsaWdodCcpKQotICAgICAgICBuZXdUaGVtZT1HZXRDZmdTZWN0aW9uTmFtZURpYWxvZyhzZWxmLCdOZXcgQ3VzdG9tIFRoZW1lJywKLSAgICAgICAgICAgICAgICBtZXNzYWdlLHVzZWROYW1lcykucmVzdWx0CisgICAgZGVmIEdldE5ld1RoZW1lTmFtZShzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgdXNlZE5hbWVzID0gKGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywgJ2hpZ2hsaWdodCcpICsKKyAgICAgICAgICAgICAgICBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsICdoaWdobGlnaHQnKSkKKyAgICAgICAgbmV3VGhlbWUgPSBHZXRDZmdTZWN0aW9uTmFtZURpYWxvZygKKyAgICAgICAgICAgICAgICBzZWxmLCAnTmV3IEN1c3RvbSBUaGVtZScsIG1lc3NhZ2UsIHVzZWROYW1lcykucmVzdWx0CiAgICAgICAgIHJldHVybiBuZXdUaGVtZQogCiAgICAgZGVmIFNhdmVBc05ld1RoZW1lKHNlbGYpOgotICAgICAgICBuZXdUaGVtZU5hbWU9c2VsZi5HZXROZXdUaGVtZU5hbWUoJ05ldyBUaGVtZSBOYW1lOicpCisgICAgICAgIG5ld1RoZW1lTmFtZSA9IHNlbGYuR2V0TmV3VGhlbWVOYW1lKCdOZXcgVGhlbWUgTmFtZTonKQogICAgICAgICBpZiBuZXdUaGVtZU5hbWU6CiAgICAgICAgICAgICBzZWxmLkNyZWF0ZU5ld1RoZW1lKG5ld1RoZW1lTmFtZSkKIAotICAgIGRlZiBDcmVhdGVOZXdUaGVtZShzZWxmLG5ld1RoZW1lTmFtZSk6CisgICAgZGVmIENyZWF0ZU5ld1RoZW1lKHNlbGYsIG5ld1RoZW1lTmFtZSk6CiAgICAgICAgICNjcmVhdGVzIG5ldyBjdXN0b20gdGhlbWUgYmFzZWQgb24gdGhlIHByZXZpb3VzbHkgYWN0aXZlIHRoZW1lLAogICAgICAgICAjYW5kIG1ha2VzIHRoZSBuZXcgdGhlbWUgYWN0aXZlCiAgICAgICAgIGlmIHNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCk6Ci0gICAgICAgICAgICB0aGVtZVR5cGU9J2RlZmF1bHQnCi0gICAgICAgICAgICB0aGVtZU5hbWU9c2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKKyAgICAgICAgICAgIHRoZW1lVHlwZSA9ICdkZWZhdWx0JworICAgICAgICAgICAgdGhlbWVOYW1lID0gc2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHRoZW1lVHlwZT0ndXNlcicKLSAgICAgICAgICAgIHRoZW1lTmFtZT1zZWxmLmN1c3RvbVRoZW1lLmdldCgpCi0gICAgICAgIG5ld1RoZW1lPWlkbGVDb25mLkdldFRoZW1lRGljdCh0aGVtZVR5cGUsdGhlbWVOYW1lKQorICAgICAgICAgICAgdGhlbWVUeXBlID0gJ3VzZXInCisgICAgICAgICAgICB0aGVtZU5hbWUgPSBzZWxmLmN1c3RvbVRoZW1lLmdldCgpCisgICAgICAgIG5ld1RoZW1lID0gaWRsZUNvbmYuR2V0VGhlbWVEaWN0KHRoZW1lVHlwZSwgdGhlbWVOYW1lKQogICAgICAgICAjYXBwbHkgYW55IG9mIHRoZSBvbGQgdGhlbWUncyB1bnNhdmVkIGNoYW5nZXMgdG8gdGhlIG5ldyB0aGVtZQogICAgICAgICBpZiB0aGVtZU5hbWUgaW4gc2VsZi5jaGFuZ2VkSXRlbXNbJ2hpZ2hsaWdodCddOgotICAgICAgICAgICAgdGhlbWVDaGFuZ2VzPXNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXVt0aGVtZU5hbWVdCisgICAgICAgICAgICB0aGVtZUNoYW5nZXMgPSBzZWxmLmNoYW5nZWRJdGVtc1snaGlnaGxpZ2h0J11bdGhlbWVOYW1lXQogICAgICAgICAgICAgZm9yIGVsZW1lbnQgaW4gdGhlbWVDaGFuZ2VzOgotICAgICAgICAgICAgICAgIG5ld1RoZW1lW2VsZW1lbnRdPXRoZW1lQ2hhbmdlc1tlbGVtZW50XQorICAgICAgICAgICAgICAgIG5ld1RoZW1lW2VsZW1lbnRdID0gdGhlbWVDaGFuZ2VzW2VsZW1lbnRdCiAgICAgICAgICNzYXZlIHRoZSBuZXcgdGhlbWUKLSAgICAgICAgc2VsZi5TYXZlTmV3VGhlbWUobmV3VGhlbWVOYW1lLG5ld1RoZW1lKQorICAgICAgICBzZWxmLlNhdmVOZXdUaGVtZShuZXdUaGVtZU5hbWUsIG5ld1RoZW1lKQogICAgICAgICAjY2hhbmdlIGd1aSBvdmVyIHRvIHRoZSBuZXcgdGhlbWUKLSAgICAgICAgY3VzdG9tVGhlbWVMaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywnaGlnaGxpZ2h0JykKKyAgICAgICAgY3VzdG9tVGhlbWVMaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAnaGlnaGxpZ2h0JykKICAgICAgICAgY3VzdG9tVGhlbWVMaXN0LnNvcnQoKQotICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGN1c3RvbVRoZW1lTGlzdCxuZXdUaGVtZU5hbWUpCisgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQ3VzdG9tLlNldE1lbnUoY3VzdG9tVGhlbWVMaXN0LCBuZXdUaGVtZU5hbWUpCiAgICAgICAgIHNlbGYudGhlbWVJc0J1aWx0aW4uc2V0KDApCiAgICAgICAgIHNlbGYuU2V0VGhlbWVUeXBlKCkKIAotICAgIGRlZiBPbkxpc3RGb250QnV0dG9uUmVsZWFzZShzZWxmLGV2ZW50KToKKyAgICBkZWYgT25MaXN0Rm9udEJ1dHRvblJlbGVhc2Uoc2VsZiwgZXZlbnQpOgogICAgICAgICBmb250ID0gc2VsZi5saXN0Rm9udE5hbWUuZ2V0KEFOQ0hPUikKICAgICAgICAgc2VsZi5mb250TmFtZS5zZXQoZm9udC5sb3dlcigpKQogICAgICAgICBzZWxmLlNldEZvbnRTYW1wbGUoKQogCi0gICAgZGVmIFNldEZvbnRTYW1wbGUoc2VsZixldmVudD1Ob25lKToKLSAgICAgICAgZm9udE5hbWU9c2VsZi5mb250TmFtZS5nZXQoKQotICAgICAgICBpZiBzZWxmLmZvbnRCb2xkLmdldCgpOgotICAgICAgICAgICAgZm9udFdlaWdodD10a0ZvbnQuQk9MRAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZm9udFdlaWdodD10a0ZvbnQuTk9STUFMCisgICAgZGVmIFNldEZvbnRTYW1wbGUoc2VsZiwgZXZlbnQ9Tm9uZSk6CisgICAgICAgIGZvbnROYW1lID0gc2VsZi5mb250TmFtZS5nZXQoKQorICAgICAgICBmb250V2VpZ2h0ID0gdGtGb250LkJPTEQgaWYgc2VsZi5mb250Qm9sZC5nZXQoKSBlbHNlIHRrRm9udC5OT1JNQUwKICAgICAgICAgbmV3Rm9udCA9IChmb250TmFtZSwgc2VsZi5mb250U2l6ZS5nZXQoKSwgZm9udFdlaWdodCkKICAgICAgICAgc2VsZi5sYWJlbEZvbnRTYW1wbGUuY29uZmlnKGZvbnQ9bmV3Rm9udCkKICAgICAgICAgc2VsZi50ZXh0SGlnaGxpZ2h0U2FtcGxlLmNvbmZpZ3VyZShmb250PW5ld0ZvbnQpCiAKICAgICBkZWYgU2V0SGlnaGxpZ2h0VGFyZ2V0KHNlbGYpOgotICAgICAgICBpZiBzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKT09J0N1cnNvcic6ICNiZyBub3QgcG9zc2libGUKKyAgICAgICAgaWYgc2VsZi5oaWdobGlnaHRUYXJnZXQuZ2V0KCkgPT0gJ0N1cnNvcic6ICAjYmcgbm90IHBvc3NpYmxlCiAgICAgICAgICAgICBzZWxmLnJhZGlvRmcuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogICAgICAgICAgICAgc2VsZi5yYWRpb0JnLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKICAgICAgICAgICAgIHNlbGYuZmdIaWxpdGUuc2V0KDEpCi0gICAgICAgIGVsc2U6ICNib3RoIGZnIGFuZCBiZyBjYW4gYmUgc2V0CisgICAgICAgIGVsc2U6ICAjYm90aCBmZyBhbmQgYmcgY2FuIGJlIHNldAogICAgICAgICAgICAgc2VsZi5yYWRpb0ZnLmNvbmZpZyhzdGF0ZT1OT1JNQUwpCiAgICAgICAgICAgICBzZWxmLnJhZGlvQmcuY29uZmlnKHN0YXRlPU5PUk1BTCkKICAgICAgICAgICAgIHNlbGYuZmdIaWxpdGUuc2V0KDEpCiAgICAgICAgIHNlbGYuU2V0Q29sb3VyU2FtcGxlKCkKIAotICAgIGRlZiBTZXRDb2xvdXJTYW1wbGVCaW5kaW5nKHNlbGYsKmFyZ3MpOgorICAgIGRlZiBTZXRDb2xvdXJTYW1wbGVCaW5kaW5nKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5TZXRDb2xvdXJTYW1wbGUoKQogCiAgICAgZGVmIFNldENvbG91clNhbXBsZShzZWxmKToKICAgICAgICAgI3NldCB0aGUgY29sb3VyIHNtYXBsZSBhcmVhCi0gICAgICAgIHRhZz1zZWxmLnRoZW1lRWxlbWVudHNbc2VsZi5oaWdobGlnaHRUYXJnZXQuZ2V0KCldWzBdCi0gICAgICAgIGlmIHNlbGYuZmdIaWxpdGUuZ2V0KCk6IHBsYW5lPSdmb3JlZ3JvdW5kJwotICAgICAgICBlbHNlOiBwbGFuZT0nYmFja2dyb3VuZCcKLSAgICAgICAgY29sb3VyPXNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS50YWdfY2dldCh0YWcscGxhbmUpCisgICAgICAgIHRhZyA9IHNlbGYudGhlbWVFbGVtZW50c1tzZWxmLmhpZ2hsaWdodFRhcmdldC5nZXQoKV1bMF0KKyAgICAgICAgcGxhbmUgPSAnZm9yZWdyb3VuZCcgaWYgc2VsZi5mZ0hpbGl0ZS5nZXQoKSBlbHNlICdiYWNrZ3JvdW5kJworICAgICAgICBjb2xvdXIgPSBzZWxmLnRleHRIaWdobGlnaHRTYW1wbGUudGFnX2NnZXQodGFnLCBwbGFuZSkKICAgICAgICAgc2VsZi5mcmFtZUNvbG91clNldC5jb25maWcoYmc9Y29sb3VyKQogCiAgICAgZGVmIFBhaW50VGhlbWVTYW1wbGUoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCk6ICNhIGRlZmF1bHQgdGhlbWUKLSAgICAgICAgICAgIHRoZW1lPXNlbGYuYnVpbHRpblRoZW1lLmdldCgpCi0gICAgICAgIGVsc2U6ICNhIHVzZXIgdGhlbWUKLSAgICAgICAgICAgIHRoZW1lPXNlbGYuY3VzdG9tVGhlbWUuZ2V0KCkKKyAgICAgICAgaWYgc2VsZi50aGVtZUlzQnVpbHRpbi5nZXQoKTogICNhIGRlZmF1bHQgdGhlbWUKKyAgICAgICAgICAgIHRoZW1lID0gc2VsZi5idWlsdGluVGhlbWUuZ2V0KCkKKyAgICAgICAgZWxzZTogICNhIHVzZXIgdGhlbWUKKyAgICAgICAgICAgIHRoZW1lID0gc2VsZi5jdXN0b21UaGVtZS5nZXQoKQogICAgICAgICBmb3IgZWxlbWVudFRpdGxlIGluIHNlbGYudGhlbWVFbGVtZW50czoKLSAgICAgICAgICAgIGVsZW1lbnQ9c2VsZi50aGVtZUVsZW1lbnRzW2VsZW1lbnRUaXRsZV1bMF0KLSAgICAgICAgICAgIGNvbG91cnM9aWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLGVsZW1lbnQpCi0gICAgICAgICAgICBpZiBlbGVtZW50PT0nY3Vyc29yJzogI2N1cnNvciBzYW1wbGUgbmVlZHMgc3BlY2lhbCBwYWludGluZwotICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXT1pZGxlQ29uZi5HZXRIaWdobGlnaHQodGhlbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAnbm9ybWFsJywgZmdCZz0nYmcnKQorICAgICAgICAgICAgZWxlbWVudCA9IHNlbGYudGhlbWVFbGVtZW50c1tlbGVtZW50VGl0bGVdWzBdCisgICAgICAgICAgICBjb2xvdXJzID0gaWRsZUNvbmYuR2V0SGlnaGxpZ2h0KHRoZW1lLCBlbGVtZW50KQorICAgICAgICAgICAgaWYgZWxlbWVudCA9PSAnY3Vyc29yJzogI2N1cnNvciBzYW1wbGUgbmVlZHMgc3BlY2lhbCBwYWludGluZworICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXSA9IGlkbGVDb25mLkdldEhpZ2hsaWdodCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lLCAnbm9ybWFsJywgZmdCZz0nYmcnKQogICAgICAgICAgICAgI2hhbmRsZSBhbnkgdW5zYXZlZCBjaGFuZ2VzIHRvIHRoaXMgdGhlbWUKICAgICAgICAgICAgIGlmIHRoZW1lIGluIHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXToKLSAgICAgICAgICAgICAgICB0aGVtZURpY3Q9c2VsZi5jaGFuZ2VkSXRlbXNbJ2hpZ2hsaWdodCddW3RoZW1lXQotICAgICAgICAgICAgICAgIGlmIGVsZW1lbnQrJy1mb3JlZ3JvdW5kJyBpbiB0aGVtZURpY3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2ZvcmVncm91bmQnXT10aGVtZURpY3RbZWxlbWVudCsnLWZvcmVncm91bmQnXQotICAgICAgICAgICAgICAgIGlmIGVsZW1lbnQrJy1iYWNrZ3JvdW5kJyBpbiB0aGVtZURpY3Q6Ci0gICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXT10aGVtZURpY3RbZWxlbWVudCsnLWJhY2tncm91bmQnXQorICAgICAgICAgICAgICAgIHRoZW1lRGljdCA9IHNlbGYuY2hhbmdlZEl0ZW1zWydoaWdobGlnaHQnXVt0aGVtZV0KKyAgICAgICAgICAgICAgICBpZiBlbGVtZW50ICsgJy1mb3JlZ3JvdW5kJyBpbiB0aGVtZURpY3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2ZvcmVncm91bmQnXSA9IHRoZW1lRGljdFtlbGVtZW50ICsgJy1mb3JlZ3JvdW5kJ10KKyAgICAgICAgICAgICAgICBpZiBlbGVtZW50ICsgJy1iYWNrZ3JvdW5kJyBpbiB0aGVtZURpY3Q6CisgICAgICAgICAgICAgICAgICAgIGNvbG91cnNbJ2JhY2tncm91bmQnXSA9IHRoZW1lRGljdFtlbGVtZW50ICsgJy1iYWNrZ3JvdW5kJ10KICAgICAgICAgICAgIHNlbGYudGV4dEhpZ2hsaWdodFNhbXBsZS50YWdfY29uZmlnKGVsZW1lbnQsICoqY29sb3VycykKICAgICAgICAgc2VsZi5TZXRDb2xvdXJTYW1wbGUoKQogCi0gICAgZGVmIEhlbHBTb3VyY2VTZWxlY3RlZChzZWxmLGV2ZW50KToKKyAgICBkZWYgSGVscFNvdXJjZVNlbGVjdGVkKHNlbGYsIGV2ZW50KToKICAgICAgICAgc2VsZi5TZXRIZWxwTGlzdEJ1dHRvblN0YXRlcygpCiAKICAgICBkZWYgU2V0SGVscExpc3RCdXR0b25TdGF0ZXMoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYubGlzdEhlbHAuc2l6ZSgpPDE6ICNubyBlbnRyaWVzIGluIGxpc3QKKyAgICAgICAgaWYgc2VsZi5saXN0SGVscC5zaXplKCkgPCAxOiAgI25vIGVudHJpZXMgaW4gbGlzdAogICAgICAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdEVkaXQuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogICAgICAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdFJlbW92ZS5jb25maWcoc3RhdGU9RElTQUJMRUQpCiAgICAgICAgIGVsc2U6ICN0aGVyZSBhcmUgc29tZSBlbnRyaWVzCi0gICAgICAgICAgICBpZiBzZWxmLmxpc3RIZWxwLmN1cnNlbGVjdGlvbigpOiAjdGhlcmUgY3VycmVudGx5IGlzIGEgc2VsZWN0aW9uCisgICAgICAgICAgICBpZiBzZWxmLmxpc3RIZWxwLmN1cnNlbGVjdGlvbigpOiAgI3RoZXJlIGN1cnJlbnRseSBpcyBhIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RFZGl0LmNvbmZpZyhzdGF0ZT1OT1JNQUwpCiAgICAgICAgICAgICAgICAgc2VsZi5idXR0b25IZWxwTGlzdFJlbW92ZS5jb25maWcoc3RhdGU9Tk9STUFMKQogICAgICAgICAgICAgZWxzZTogICN0aGVyZSBjdXJyZW50bHkgaXMgbm90IGEgc2VsZWN0aW9uCkBAIC04ODUsMjggKzkyNCwyOSBAQAogICAgICAgICAgICAgICAgIHNlbGYuYnV0dG9uSGVscExpc3RSZW1vdmUuY29uZmlnKHN0YXRlPURJU0FCTEVEKQogCiAgICAgZGVmIEhlbHBMaXN0SXRlbUFkZChzZWxmKToKLSAgICAgICAgaGVscFNvdXJjZT1HZXRIZWxwU291cmNlRGlhbG9nKHNlbGYsJ05ldyBIZWxwIFNvdXJjZScpLnJlc3VsdAorICAgICAgICBoZWxwU291cmNlID0gR2V0SGVscFNvdXJjZURpYWxvZyhzZWxmLCAnTmV3IEhlbHAgU291cmNlJykucmVzdWx0CiAgICAgICAgIGlmIGhlbHBTb3VyY2U6Ci0gICAgICAgICAgICBzZWxmLnVzZXJIZWxwTGlzdC5hcHBlbmQoIChoZWxwU291cmNlWzBdLGhlbHBTb3VyY2VbMV0pICkKLSAgICAgICAgICAgIHNlbGYubGlzdEhlbHAuaW5zZXJ0KEVORCxoZWxwU291cmNlWzBdKQorICAgICAgICAgICAgc2VsZi51c2VySGVscExpc3QuYXBwZW5kKChoZWxwU291cmNlWzBdLCBoZWxwU291cmNlWzFdKSkKKyAgICAgICAgICAgIHNlbGYubGlzdEhlbHAuaW5zZXJ0KEVORCwgaGVscFNvdXJjZVswXSkKICAgICAgICAgICAgIHNlbGYuVXBkYXRlVXNlckhlbHBDaGFuZ2VkSXRlbXMoKQogICAgICAgICBzZWxmLlNldEhlbHBMaXN0QnV0dG9uU3RhdGVzKCkKIAogICAgIGRlZiBIZWxwTGlzdEl0ZW1FZGl0KHNlbGYpOgotICAgICAgICBpdGVtSW5kZXg9c2VsZi5saXN0SGVscC5pbmRleChBTkNIT1IpCi0gICAgICAgIGhlbHBTb3VyY2U9c2VsZi51c2VySGVscExpc3RbaXRlbUluZGV4XQotICAgICAgICBuZXdIZWxwU291cmNlPUdldEhlbHBTb3VyY2VEaWFsb2coc2VsZiwnRWRpdCBIZWxwIFNvdXJjZScsCi0gICAgICAgICAgICAgICAgbWVudUl0ZW09aGVscFNvdXJjZVswXSxmaWxlUGF0aD1oZWxwU291cmNlWzFdKS5yZXN1bHQKLSAgICAgICAgaWYgKG5vdCBuZXdIZWxwU291cmNlKSBvciAobmV3SGVscFNvdXJjZT09aGVscFNvdXJjZSk6CisgICAgICAgIGl0ZW1JbmRleCA9IHNlbGYubGlzdEhlbHAuaW5kZXgoQU5DSE9SKQorICAgICAgICBoZWxwU291cmNlID0gc2VsZi51c2VySGVscExpc3RbaXRlbUluZGV4XQorICAgICAgICBuZXdIZWxwU291cmNlID0gR2V0SGVscFNvdXJjZURpYWxvZygKKyAgICAgICAgICAgICAgICBzZWxmLCAnRWRpdCBIZWxwIFNvdXJjZScsIG1lbnVJdGVtPWhlbHBTb3VyY2VbMF0sCisgICAgICAgICAgICAgICAgZmlsZVBhdGg9aGVscFNvdXJjZVsxXSkucmVzdWx0CisgICAgICAgIGlmIChub3QgbmV3SGVscFNvdXJjZSkgb3IgKG5ld0hlbHBTb3VyY2UgPT0gaGVscFNvdXJjZSk6CiAgICAgICAgICAgICByZXR1cm4gI25vIGNoYW5nZXMKLSAgICAgICAgc2VsZi51c2VySGVscExpc3RbaXRlbUluZGV4XT1uZXdIZWxwU291cmNlCisgICAgICAgIHNlbGYudXNlckhlbHBMaXN0W2l0ZW1JbmRleF0gPSBuZXdIZWxwU291cmNlCiAgICAgICAgIHNlbGYubGlzdEhlbHAuZGVsZXRlKGl0ZW1JbmRleCkKLSAgICAgICAgc2VsZi5saXN0SGVscC5pbnNlcnQoaXRlbUluZGV4LG5ld0hlbHBTb3VyY2VbMF0pCisgICAgICAgIHNlbGYubGlzdEhlbHAuaW5zZXJ0KGl0ZW1JbmRleCwgbmV3SGVscFNvdXJjZVswXSkKICAgICAgICAgc2VsZi5VcGRhdGVVc2VySGVscENoYW5nZWRJdGVtcygpCiAgICAgICAgIHNlbGYuU2V0SGVscExpc3RCdXR0b25TdGF0ZXMoKQogCiAgICAgZGVmIEhlbHBMaXN0SXRlbVJlbW92ZShzZWxmKToKLSAgICAgICAgaXRlbUluZGV4PXNlbGYubGlzdEhlbHAuaW5kZXgoQU5DSE9SKQorICAgICAgICBpdGVtSW5kZXggPSBzZWxmLmxpc3RIZWxwLmluZGV4KEFOQ0hPUikKICAgICAgICAgZGVsKHNlbGYudXNlckhlbHBMaXN0W2l0ZW1JbmRleF0pCiAgICAgICAgIHNlbGYubGlzdEhlbHAuZGVsZXRlKGl0ZW1JbmRleCkKICAgICAgICAgc2VsZi5VcGRhdGVVc2VySGVscENoYW5nZWRJdGVtcygpCkBAIC05MTUsMTI4ICs5NTUsMTI2IEBACiAgICAgZGVmIFVwZGF0ZVVzZXJIZWxwQ2hhbmdlZEl0ZW1zKHNlbGYpOgogICAgICAgICAiQ2xlYXIgYW5kIHJlYnVpbGQgdGhlIEhlbHBGaWxlcyBzZWN0aW9uIGluIHNlbGYuY2hhbmdlZEl0ZW1zIgogICAgICAgICBzZWxmLmNoYW5nZWRJdGVtc1snbWFpbiddWydIZWxwRmlsZXMnXSA9IHt9Ci0gICAgICAgIGZvciBudW0gaW4gcmFuZ2UoMSxsZW4oc2VsZi51c2VySGVscExpc3QpKzEpOgotICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgnbWFpbicsJ0hlbHBGaWxlcycsc3RyKG51bSksCisgICAgICAgIGZvciBudW0gaW4gcmFuZ2UoMSwgbGVuKHNlbGYudXNlckhlbHBMaXN0KSArIDEpOgorICAgICAgICAgICAgc2VsZi5BZGRDaGFuZ2VkSXRlbSgKKyAgICAgICAgICAgICAgICAgICAgJ21haW4nLCAnSGVscEZpbGVzJywgc3RyKG51bSksCiAgICAgICAgICAgICAgICAgICAgICc7Jy5qb2luKHNlbGYudXNlckhlbHBMaXN0W251bS0xXVs6Ml0pKQogCiAgICAgZGVmIExvYWRGb250Q2ZnKHNlbGYpOgogICAgICAgICAjI2Jhc2UgZWRpdG9yIGZvbnQgc2VsZWN0aW9uIGxpc3QKLSAgICAgICAgZm9udHM9bGlzdCh0a0ZvbnQuZmFtaWxpZXMoc2VsZikpCisgICAgICAgIGZvbnRzID0gbGlzdCh0a0ZvbnQuZmFtaWxpZXMoc2VsZikpCiAgICAgICAgIGZvbnRzLnNvcnQoKQogICAgICAgICBmb3IgZm9udCBpbiBmb250czoKLSAgICAgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLmluc2VydChFTkQsZm9udCkKLSAgICAgICAgY29uZmlndXJlZEZvbnQ9aWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnRWRpdG9yV2luZG93JywnZm9udCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PSdjb3VyaWVyJykKLSAgICAgICAgbGNfY29uZmlndXJlZEZvbnQgPSBjb25maWd1cmVkRm9udC5sb3dlcigpCi0gICAgICAgIHNlbGYuZm9udE5hbWUuc2V0KGxjX2NvbmZpZ3VyZWRGb250KQorICAgICAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUuaW5zZXJ0KEVORCwgZm9udCkKKyAgICAgICAgY29uZmlndXJlZEZvbnQgPSBpZGxlQ29uZi5HZXRGb250KHNlbGYsICdtYWluJywgJ0VkaXRvcldpbmRvdycpCisgICAgICAgIGZvbnROYW1lID0gY29uZmlndXJlZEZvbnRbMF0ubG93ZXIoKQorICAgICAgICBmb250U2l6ZSA9IGNvbmZpZ3VyZWRGb250WzFdCisgICAgICAgIGZvbnRCb2xkICA9IGNvbmZpZ3VyZWRGb250WzJdPT0nYm9sZCcKKyAgICAgICAgc2VsZi5mb250TmFtZS5zZXQoZm9udE5hbWUpCiAgICAgICAgIGxjX2ZvbnRzID0gW3MubG93ZXIoKSBmb3IgcyBpbiBmb250c10KLSAgICAgICAgaWYgbGNfY29uZmlndXJlZEZvbnQgaW4gbGNfZm9udHM6Ci0gICAgICAgICAgICBjdXJyZW50Rm9udEluZGV4ID0gbGNfZm9udHMuaW5kZXgobGNfY29uZmlndXJlZEZvbnQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGN1cnJlbnRGb250SW5kZXggPSBsY19mb250cy5pbmRleChmb250TmFtZSkKICAgICAgICAgICAgIHNlbGYubGlzdEZvbnROYW1lLnNlZShjdXJyZW50Rm9udEluZGV4KQogICAgICAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUuc2VsZWN0X3NldChjdXJyZW50Rm9udEluZGV4KQogICAgICAgICAgICAgc2VsZi5saXN0Rm9udE5hbWUuc2VsZWN0X2FuY2hvcihjdXJyZW50Rm9udEluZGV4KQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyNmb250IHNpemUgZHJvcGRvd24KLSAgICAgICAgZm9udFNpemU9aWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdmb250LXNpemUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0naW50JywgZGVmYXVsdD0nMTAnKQotICAgICAgICBzZWxmLm9wdE1lbnVGb250U2l6ZS5TZXRNZW51KCgnNycsJzgnLCc5JywnMTAnLCcxMScsJzEyJywnMTMnLCcxNCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxNicsJzE4JywnMjAnLCcyMicpLCBmb250U2l6ZSApCisgICAgICAgIHNlbGYub3B0TWVudUZvbnRTaXplLlNldE1lbnUoKCc3JywgJzgnLCAnOScsICcxMCcsICcxMScsICcxMicsICcxMycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcxNCcsICcxNicsICcxOCcsICcyMCcsICcyMicpLCBmb250U2l6ZSApCiAgICAgICAgICMjZm9udFdlaWdodAotICAgICAgICBzZWxmLmZvbnRCb2xkLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdFZGl0b3JXaW5kb3cnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvbnQtYm9sZCcsZGVmYXVsdD0wLHR5cGU9J2Jvb2wnKSkKKyAgICAgICAgc2VsZi5mb250Qm9sZC5zZXQoZm9udEJvbGQpCiAgICAgICAgICMjZm9udCBzYW1wbGUKICAgICAgICAgc2VsZi5TZXRGb250U2FtcGxlKCkKIAogICAgIGRlZiBMb2FkVGFiQ2ZnKHNlbGYpOgogICAgICAgICAjI2luZGVudCBzaXplcwotICAgICAgICBzcGFjZU51bT1pZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdJbmRlbnQnLCdudW0tc3BhY2VzJywKLSAgICAgICAgICAgICAgICBkZWZhdWx0PTQsdHlwZT0naW50JykKKyAgICAgICAgc3BhY2VOdW0gPSBpZGxlQ29uZi5HZXRPcHRpb24oCisgICAgICAgICAgICAnbWFpbicsICdJbmRlbnQnLCAnbnVtLXNwYWNlcycsIGRlZmF1bHQ9NCwgdHlwZT0naW50JykKICAgICAgICAgc2VsZi5zcGFjZU51bS5zZXQoc3BhY2VOdW0pCiAKICAgICBkZWYgTG9hZFRoZW1lQ2ZnKHNlbGYpOgogICAgICAgICAjI2N1cnJlbnQgdGhlbWUgdHlwZSByYWRpb2J1dHRvbgotICAgICAgICBzZWxmLnRoZW1lSXNCdWlsdGluLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdUaGVtZScsJ2RlZmF1bHQnLAotICAgICAgICAgICAgdHlwZT0nYm9vbCcsZGVmYXVsdD0xKSkKKyAgICAgICAgc2VsZi50aGVtZUlzQnVpbHRpbi5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ1RoZW1lJywgJ2RlZmF1bHQnLCB0eXBlPSdib29sJywgZGVmYXVsdD0xKSkKICAgICAgICAgIyNjdXJyZW50bHkgc2V0IHRoZW1lCi0gICAgICAgIGN1cnJlbnRPcHRpb249aWRsZUNvbmYuQ3VycmVudFRoZW1lKCkKKyAgICAgICAgY3VycmVudE9wdGlvbiA9IGlkbGVDb25mLkN1cnJlbnRUaGVtZSgpCiAgICAgICAgICMjbG9hZCBhdmFpbGFibGUgdGhlbWUgb3B0aW9uIG1lbnVzCiAgICAgICAgIGlmIHNlbGYudGhlbWVJc0J1aWx0aW4uZ2V0KCk6ICNkZWZhdWx0IHRoZW1lIHNlbGVjdGVkCi0gICAgICAgICAgICBpdGVtTGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2hpZ2hsaWdodCcpCisgICAgICAgICAgICBpdGVtTGlzdCA9IGlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCdkZWZhdWx0JywgJ2hpZ2hsaWdodCcpCiAgICAgICAgICAgICBpdGVtTGlzdC5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudVRoZW1lQnVpbHRpbi5TZXRNZW51KGl0ZW1MaXN0LGN1cnJlbnRPcHRpb24pCi0gICAgICAgICAgICBpdGVtTGlzdD1pZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsJ2hpZ2hsaWdodCcpCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW4uU2V0TWVudShpdGVtTGlzdCwgY3VycmVudE9wdGlvbikKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAnaGlnaGxpZ2h0JykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQogICAgICAgICAgICAgaWYgbm90IGl0ZW1MaXN0OgogICAgICAgICAgICAgICAgIHNlbGYucmFkaW9UaGVtZUN1c3RvbS5jb25maWcoc3RhdGU9RElTQUJMRUQpCiAgICAgICAgICAgICAgICAgc2VsZi5jdXN0b21UaGVtZS5zZXQoJy0gbm8gY3VzdG9tIHRoZW1lcyAtJykKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20uU2V0TWVudShpdGVtTGlzdCxpdGVtTGlzdFswXSkKKyAgICAgICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUN1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgZWxzZTogI3VzZXIgdGhlbWUgc2VsZWN0ZWQKLSAgICAgICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywnaGlnaGxpZ2h0JykKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAnaGlnaGxpZ2h0JykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQotICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20uU2V0TWVudShpdGVtTGlzdCxjdXJyZW50T3B0aW9uKQotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCdoaWdobGlnaHQnKQorICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVDdXN0b20uU2V0TWVudShpdGVtTGlzdCwgY3VycmVudE9wdGlvbikKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCAnaGlnaGxpZ2h0JykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQotICAgICAgICAgICAgc2VsZi5vcHRNZW51VGhlbWVCdWlsdGluLlNldE1lbnUoaXRlbUxpc3QsaXRlbUxpc3RbMF0pCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVUaGVtZUJ1aWx0aW4uU2V0TWVudShpdGVtTGlzdCwgaXRlbUxpc3RbMF0pCiAgICAgICAgIHNlbGYuU2V0VGhlbWVUeXBlKCkKICAgICAgICAgIyNsb2FkIHRoZW1lIGVsZW1lbnQgb3B0aW9uIG1lbnUKICAgICAgICAgdGhlbWVOYW1lcyA9IGxpc3Qoc2VsZi50aGVtZUVsZW1lbnRzLmtleXMoKSkKICAgICAgICAgdGhlbWVOYW1lcy5zb3J0KGtleT1sYW1iZGEgeDogc2VsZi50aGVtZUVsZW1lbnRzW3hdWzFdKQotICAgICAgICBzZWxmLm9wdE1lbnVIaWdobGlnaHRUYXJnZXQuU2V0TWVudSh0aGVtZU5hbWVzLHRoZW1lTmFtZXNbMF0pCisgICAgICAgIHNlbGYub3B0TWVudUhpZ2hsaWdodFRhcmdldC5TZXRNZW51KHRoZW1lTmFtZXMsIHRoZW1lTmFtZXNbMF0pCiAgICAgICAgIHNlbGYuUGFpbnRUaGVtZVNhbXBsZSgpCiAgICAgICAgIHNlbGYuU2V0SGlnaGxpZ2h0VGFyZ2V0KCkKIAogICAgIGRlZiBMb2FkS2V5Q2ZnKHNlbGYpOgogICAgICAgICAjI2N1cnJlbnQga2V5cyB0eXBlIHJhZGlvYnV0dG9uCi0gICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW4uc2V0KGlkbGVDb25mLkdldE9wdGlvbignbWFpbicsJ0tleXMnLCdkZWZhdWx0JywKLSAgICAgICAgICAgIHR5cGU9J2Jvb2wnLGRlZmF1bHQ9MSkpCisgICAgICAgIHNlbGYua2V5c0FyZUJ1aWx0aW4uc2V0KGlkbGVDb25mLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAnbWFpbicsICdLZXlzJywgJ2RlZmF1bHQnLCB0eXBlPSdib29sJywgZGVmYXVsdD0xKSkKICAgICAgICAgIyNjdXJyZW50bHkgc2V0IGtleXMKLSAgICAgICAgY3VycmVudE9wdGlvbj1pZGxlQ29uZi5DdXJyZW50S2V5cygpCisgICAgICAgIGN1cnJlbnRPcHRpb24gPSBpZGxlQ29uZi5DdXJyZW50S2V5cygpCiAgICAgICAgICMjbG9hZCBhdmFpbGFibGUga2V5c2V0IG9wdGlvbiBtZW51cwogICAgICAgICBpZiBzZWxmLmtleXNBcmVCdWlsdGluLmdldCgpOiAjZGVmYXVsdCB0aGVtZSBzZWxlY3RlZAotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCdrZXlzJykKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCAna2V5cycpCiAgICAgICAgICAgICBpdGVtTGlzdC5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNCdWlsdGluLlNldE1lbnUoaXRlbUxpc3QsY3VycmVudE9wdGlvbikKLSAgICAgICAgICAgIGl0ZW1MaXN0PWlkbGVDb25mLkdldFNlY3Rpb25MaXN0KCd1c2VyJywna2V5cycpCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQnVpbHRpbi5TZXRNZW51KGl0ZW1MaXN0LCBjdXJyZW50T3B0aW9uKQorICAgICAgICAgICAgaXRlbUxpc3QgPSBpZGxlQ29uZi5HZXRTZWN0aW9uTGlzdCgndXNlcicsICdrZXlzJykKICAgICAgICAgICAgIGl0ZW1MaXN0LnNvcnQoKQogICAgICAgICAgICAgaWYgbm90IGl0ZW1MaXN0OgogICAgICAgICAgICAgICAgIHNlbGYucmFkaW9LZXlzQ3VzdG9tLmNvbmZpZyhzdGF0ZT1ESVNBQkxFRCkKICAgICAgICAgICAgICAgICBzZWxmLmN1c3RvbUtleXMuc2V0KCctIG5vIGN1c3RvbSBrZXlzIC0nKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQ3VzdG9tLlNldE1lbnUoaXRlbUxpc3QsaXRlbUxpc3RbMF0pCisgICAgICAgICAgICAgICAgc2VsZi5vcHRNZW51S2V5c0N1c3RvbS5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgZWxzZTogI3VzZXIga2V5IHNldCBzZWxlY3RlZAotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdrZXlzJykKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAna2V5cycpCiAgICAgICAgICAgICBpdGVtTGlzdC5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShpdGVtTGlzdCxjdXJyZW50T3B0aW9uKQotICAgICAgICAgICAgaXRlbUxpc3Q9aWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCdrZXlzJykKKyAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNDdXN0b20uU2V0TWVudShpdGVtTGlzdCwgY3VycmVudE9wdGlvbikKKyAgICAgICAgICAgIGl0ZW1MaXN0ID0gaWRsZUNvbmYuR2V0U2VjdGlvbkxpc3QoJ2RlZmF1bHQnLCAna2V5cycpCiAgICAgICAgICAgICBpdGVtTGlzdC5zb3J0KCkKLSAgICAgICAgICAgIHNlbGYub3B0TWVudUtleXNCdWlsdGluLlNldE1lbnUoaXRlbUxpc3QsaXRlbUxpc3RbMF0pCisgICAgICAgICAgICBzZWxmLm9wdE1lbnVLZXlzQnVpbHRpbi5TZXRNZW51KGl0ZW1MaXN0LCBpdGVtTGlzdFswXSkKICAgICAgICAgc2VsZi5TZXRLZXlzVHlwZSgpCiAgICAgICAgICMjbG9hZCBrZXlzZXQgZWxlbWVudCBsaXN0Ci0gICAgICAgIGtleVNldE5hbWU9aWRsZUNvbmYuQ3VycmVudEtleXMoKQorICAgICAgICBrZXlTZXROYW1lID0gaWRsZUNvbmYuQ3VycmVudEtleXMoKQogICAgICAgICBzZWxmLkxvYWRLZXlzTGlzdChrZXlTZXROYW1lKQogCiAgICAgZGVmIExvYWRHZW5lcmFsQ2ZnKHNlbGYpOgogICAgICAgICAjc3RhcnR1cCBzdGF0ZQotICAgICAgICBzZWxmLnN0YXJ0dXBFZGl0LnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdHZW5lcmFsJywKLSAgICAgICAgICAgICAgICAnZWRpdG9yLW9uLXN0YXJ0dXAnLGRlZmF1bHQ9MSx0eXBlPSdib29sJykpCisgICAgICAgIHNlbGYuc3RhcnR1cEVkaXQuc2V0KGlkbGVDb25mLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAnbWFpbicsICdHZW5lcmFsJywgJ2VkaXRvci1vbi1zdGFydHVwJywgZGVmYXVsdD0xLCB0eXBlPSdib29sJykpCiAgICAgICAgICNhdXRvc2F2ZSBzdGF0ZQotICAgICAgICBzZWxmLmF1dG9TYXZlLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnR2VuZXJhbCcsICdhdXRvc2F2ZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PTAsIHR5cGU9J2Jvb2wnKSkKKyAgICAgICAgc2VsZi5hdXRvU2F2ZS5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0dlbmVyYWwnLCAnYXV0b3NhdmUnLCBkZWZhdWx0PTAsIHR5cGU9J2Jvb2wnKSkKICAgICAgICAgI2luaXRpYWwgd2luZG93IHNpemUKLSAgICAgICAgc2VsZi53aW5XaWR0aC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnRWRpdG9yV2luZG93Jywnd2lkdGgnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0naW50JykpCi0gICAgICAgIHNlbGYud2luSGVpZ2h0LnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCdFZGl0b3JXaW5kb3cnLCdoZWlnaHQnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J2ludCcpKQotICAgICAgICAjaW5pdGlhbCBwYXJhZ3JhcGggcmVmb3JtYXQgc2l6ZQotICAgICAgICBzZWxmLnBhcmFXaWR0aC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywnRm9ybWF0UGFyYWdyYXBoJywncGFyYWdyYXBoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPSdpbnQnKSkKKyAgICAgICAgc2VsZi53aW5XaWR0aC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0VkaXRvcldpbmRvdycsICd3aWR0aCcsIHR5cGU9J2ludCcpKQorICAgICAgICBzZWxmLndpbkhlaWdodC5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0VkaXRvcldpbmRvdycsICdoZWlnaHQnLCB0eXBlPSdpbnQnKSkKICAgICAgICAgIyBkZWZhdWx0IHNvdXJjZSBlbmNvZGluZwotICAgICAgICBzZWxmLmVuY29kaW5nLnNldChpZGxlQ29uZi5HZXRPcHRpb24oJ21haW4nLCAnRWRpdG9yV2luZG93JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmNvZGluZycsIGRlZmF1bHQ9J25vbmUnKSkKKyAgICAgICAgc2VsZi5lbmNvZGluZy5zZXQoaWRsZUNvbmYuR2V0T3B0aW9uKAorICAgICAgICAgICAgICAgICdtYWluJywgJ0VkaXRvcldpbmRvdycsICdlbmNvZGluZycsIGRlZmF1bHQ9J25vbmUnKSkKICAgICAgICAgIyBhZGRpdGlvbmFsIGhlbHAgc291cmNlcwogICAgICAgICBzZWxmLnVzZXJIZWxwTGlzdCA9IGlkbGVDb25mLkdldEFsbEV4dHJhSGVscFNvdXJjZXNMaXN0KCkKICAgICAgICAgZm9yIGhlbHBJdGVtIGluIHNlbGYudXNlckhlbHBMaXN0OgotICAgICAgICAgICAgc2VsZi5saXN0SGVscC5pbnNlcnQoRU5ELGhlbHBJdGVtWzBdKQorICAgICAgICAgICAgc2VsZi5saXN0SGVscC5pbnNlcnQoRU5ELCBoZWxwSXRlbVswXSkKICAgICAgICAgc2VsZi5TZXRIZWxwTGlzdEJ1dHRvblN0YXRlcygpCiAKICAgICBkZWYgTG9hZENvbmZpZ3Moc2VsZik6CkBAIC0xMDUzLDggKzEwOTEsOSBAQAogICAgICAgICBzZWxmLkxvYWRLZXlDZmcoKQogICAgICAgICAjIyMgZ2VuZXJhbCBwYWdlCiAgICAgICAgIHNlbGYuTG9hZEdlbmVyYWxDZmcoKQorICAgICAgICAjIG5vdGU6IGV4dGVuc2lvbiBwYWdlIGhhbmRsZWQgc2VwYXJhdGVseQogCi0gICAgZGVmIFNhdmVOZXdLZXlTZXQoc2VsZixrZXlTZXROYW1lLGtleVNldCk6CisgICAgZGVmIFNhdmVOZXdLZXlTZXQoc2VsZiwga2V5U2V0TmFtZSwga2V5U2V0KToKICAgICAgICAgIiIiCiAgICAgICAgIHNhdmUgYSBuZXdseSBjcmVhdGVkIGNvcmUga2V5IHNldC4KICAgICAgICAga2V5U2V0TmFtZSAtIHN0cmluZywgdGhlIG5hbWUgb2YgdGhlIG5ldyBrZXkgc2V0CkBAIC0xMDYzLDEwICsxMTAyLDEwIEBACiAgICAgICAgIGlmIG5vdCBpZGxlQ29uZi51c2VyQ2ZnWydrZXlzJ10uaGFzX3NlY3Rpb24oa2V5U2V0TmFtZSk6CiAgICAgICAgICAgICBpZGxlQ29uZi51c2VyQ2ZnWydrZXlzJ10uYWRkX3NlY3Rpb24oa2V5U2V0TmFtZSkKICAgICAgICAgZm9yIGV2ZW50IGluIGtleVNldDoKLSAgICAgICAgICAgIHZhbHVlPWtleVNldFtldmVudF0KLSAgICAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2tleXMnXS5TZXRPcHRpb24oa2V5U2V0TmFtZSxldmVudCx2YWx1ZSkKKyAgICAgICAgICAgIHZhbHVlID0ga2V5U2V0W2V2ZW50XQorICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1sna2V5cyddLlNldE9wdGlvbihrZXlTZXROYW1lLCBldmVudCwgdmFsdWUpCiAKLSAgICBkZWYgU2F2ZU5ld1RoZW1lKHNlbGYsdGhlbWVOYW1lLHRoZW1lKToKKyAgICBkZWYgU2F2ZU5ld1RoZW1lKHNlbGYsIHRoZW1lTmFtZSwgdGhlbWUpOgogICAgICAgICAiIiIKICAgICAgICAgc2F2ZSBhIG5ld2x5IGNyZWF0ZWQgdGhlbWUuCiAgICAgICAgIHRoZW1lTmFtZSAtIHN0cmluZywgdGhlIG5hbWUgb2YgdGhlIG5ldyB0aGVtZQpAQCAtMTA3NSwxNiArMTExNCwxNiBAQAogICAgICAgICBpZiBub3QgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uaGFzX3NlY3Rpb24odGhlbWVOYW1lKToKICAgICAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLmFkZF9zZWN0aW9uKHRoZW1lTmFtZSkKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gdGhlbWU6Ci0gICAgICAgICAgICB2YWx1ZT10aGVtZVtlbGVtZW50XQotICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2V0T3B0aW9uKHRoZW1lTmFtZSxlbGVtZW50LHZhbHVlKQorICAgICAgICAgICAgdmFsdWUgPSB0aGVtZVtlbGVtZW50XQorICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1snaGlnaGxpZ2h0J10uU2V0T3B0aW9uKHRoZW1lTmFtZSwgZWxlbWVudCwgdmFsdWUpCiAKLSAgICBkZWYgU2V0VXNlclZhbHVlKHNlbGYsY29uZmlnVHlwZSxzZWN0aW9uLGl0ZW0sdmFsdWUpOgotICAgICAgICBpZiBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLmhhc19vcHRpb24oc2VjdGlvbixpdGVtKToKLSAgICAgICAgICAgIGlmIGlkbGVDb25mLmRlZmF1bHRDZmdbY29uZmlnVHlwZV0uR2V0KHNlY3Rpb24saXRlbSk9PXZhbHVlOgorICAgIGRlZiBTZXRVc2VyVmFsdWUoc2VsZiwgY29uZmlnVHlwZSwgc2VjdGlvbiwgaXRlbSwgdmFsdWUpOgorICAgICAgICBpZiBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLmhhc19vcHRpb24oc2VjdGlvbiwgaXRlbSk6CisgICAgICAgICAgICBpZiBpZGxlQ29uZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLkdldChzZWN0aW9uLCBpdGVtKSA9PSB2YWx1ZToKICAgICAgICAgICAgICAgICAjdGhlIHNldHRpbmcgZXF1YWxzIGEgZGVmYXVsdCBzZXR0aW5nLCByZW1vdmUgaXQgZnJvbSB1c2VyIGNmZwotICAgICAgICAgICAgICAgIHJldHVybiBpZGxlQ29uZi51c2VyQ2ZnW2NvbmZpZ1R5cGVdLlJlbW92ZU9wdGlvbihzZWN0aW9uLGl0ZW0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGlkbGVDb25mLnVzZXJDZmdbY29uZmlnVHlwZV0uUmVtb3ZlT3B0aW9uKHNlY3Rpb24sIGl0ZW0pCiAgICAgICAgICNpZiB3ZSBnb3QgaGVyZSBzZXQgdGhlIG9wdGlvbgotICAgICAgICByZXR1cm4gaWRsZUNvbmYudXNlckNmZ1tjb25maWdUeXBlXS5TZXRPcHRpb24oc2VjdGlvbixpdGVtLHZhbHVlKQorICAgICAgICByZXR1cm4gaWRsZUNvbmYudXNlckNmZ1tjb25maWdUeXBlXS5TZXRPcHRpb24oc2VjdGlvbiwgaXRlbSwgdmFsdWUpCiAKICAgICBkZWYgU2F2ZUFsbENoYW5nZWRDb25maWdzKHNlbGYpOgogICAgICAgICAiU2F2ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGhlIHVzZXIgY29uZmlnIGZpbGUuIgpAQCAtMTA5OCw3ICsxMTM3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgY2ZnVHlwZUhhc0NoYW5nZXMgPSBUcnVlCiAgICAgICAgICAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5jaGFuZ2VkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl06CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5jaGFuZ2VkSXRlbXNbY29uZmlnVHlwZV1bc2VjdGlvbl1baXRlbV0KLSAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5TZXRVc2VyVmFsdWUoY29uZmlnVHlwZSxzZWN0aW9uLGl0ZW0sdmFsdWUpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLlNldFVzZXJWYWx1ZShjb25maWdUeXBlLCBzZWN0aW9uLCBpdGVtLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjZmdUeXBlSGFzQ2hhbmdlcyA9IFRydWUKICAgICAgICAgICAgIGlmIGNmZ1R5cGVIYXNDaGFuZ2VzOgogICAgICAgICAgICAgICAgIGlkbGVDb25mLnVzZXJDZmdbY29uZmlnVHlwZV0uU2F2ZSgpCkBAIC0xMTA2LDYgKzExNDUsNyBAQAogICAgICAgICAgICAgIyBzYXZlIHRoZXNlIGV2ZW4gaWYgdW5jaGFuZ2VkIQogICAgICAgICAgICAgaWRsZUNvbmYudXNlckNmZ1tjb25maWdUeXBlXS5TYXZlKCkKICAgICAgICAgc2VsZi5SZXNldENoYW5nZWRJdGVtcygpICNjbGVhciB0aGUgY2hhbmdlZCBpdGVtcyBkaWN0CisgICAgICAgIHNlbGYuc2F2ZV9hbGxfY2hhbmdlZF9leHRlbnNpb25zKCkgICMgdXNlcyBhIGRpZmZlcmVudCBtZWNoYW5pc20KIAogICAgIGRlZiBEZWFjdGl2YXRlQ3VycmVudENvbmZpZyhzZWxmKToKICAgICAgICAgI0JlZm9yZSBhIGNvbmZpZyBpcyBzYXZlZCwgc29tZSBjbGVhbnVwIG9mIGN1cnJlbnQKQEAgLTExMzcsMTIgKzExNzcsMjQ3IEBACiAgICAgICAgIHNlbGYuQWN0aXZhdGVDb25maWdDaGFuZ2VzKCkKIAogICAgIGRlZiBIZWxwKHNlbGYpOgotICAgICAgICBwYXNzCisgICAgICAgIHBhZ2UgPSBzZWxmLnRhYlBhZ2VzLl9jdXJyZW50X3BhZ2UKKyAgICAgICAgdmlld190ZXh0KHNlbGYsIHRpdGxlPSdIZWxwIGZvciBJRExFIHByZWZlcmVuY2VzJywKKyAgICAgICAgICAgICAgICAgdGV4dD1oZWxwX2NvbW1vbitoZWxwX3BhZ2VzLmdldChwYWdlLCAnJykpCisKKyAgICBkZWYgQ3JlYXRlUGFnZUV4dGVuc2lvbnMoc2VsZik6CisgICAgICAgICIiIlBhcnQgb2YgdGhlIGNvbmZpZyBkaWFsb2cgdXNlZCBmb3IgY29uZmlndXJpbmcgSURMRSBleHRlbnNpb25zLgorCisgICAgICAgIFRoaXMgY29kZSBpcyBnZW5lcmljIC0gaXQgd29ya3MgZm9yIGFueSBhbmQgYWxsIElETEUgZXh0ZW5zaW9ucy4KKworICAgICAgICBJRExFIGV4dGVuc2lvbnMgc2F2ZSB0aGVpciBjb25maWd1cmF0aW9uIG9wdGlvbnMgdXNpbmcgaWRsZUNvbmYuCisgICAgICAgIFRoaXMgY29kZSByZWFkcyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHVzaW5nIGlkbGVDb25mLCBzdXBwbGllcyBhCisgICAgICAgIEdVSSBpbnRlcmZhY2UgdG8gY2hhbmdlIHRoZSBjb25maWd1cmF0aW9uIHZhbHVlcywgYW5kIHNhdmVzIHRoZQorICAgICAgICBjaGFuZ2VzIHVzaW5nIGlkbGVDb25mLgorCisgICAgICAgIE5vdCBhbGwgY2hhbmdlcyB0YWtlIGVmZmVjdCBpbW1lZGlhdGVseSAtIHNvbWUgbWF5IHJlcXVpcmUgcmVzdGFydGluZyBJRExFLgorICAgICAgICBUaGlzIGRlcGVuZHMgb24gZWFjaCBleHRlbnNpb24ncyBpbXBsZW1lbnRhdGlvbi4KKworICAgICAgICBBbGwgdmFsdWVzIGFyZSB0cmVhdGVkIGFzIHRleHQsIGFuZCBpdCBpcyB1cCB0byB0aGUgdXNlciB0byBzdXBwbHkKKyAgICAgICAgcmVhc29uYWJsZSB2YWx1ZXMuIFRoZSBvbmx5IGV4Y2VwdGlvbiB0byB0aGlzIGFyZSB0aGUgJ2VuYWJsZSonIG9wdGlvbnMsCisgICAgICAgIHdoaWNoIGFyZSBib29sZWFuLCBhbmQgY2FuIGJlIHRvZ2dsZWQgd2l0aCBhbiBUcnVlL0ZhbHNlIGJ1dHRvbi4KKyAgICAgICAgIiIiCisgICAgICAgIHBhcmVudCA9IHNlbGYucGFyZW50CisgICAgICAgIGZyYW1lID0gc2VsZi50YWJQYWdlcy5wYWdlc1snRXh0ZW5zaW9ucyddLmZyYW1lCisgICAgICAgIHNlbGYuZXh0X2RlZmF1bHRDZmcgPSBpZGxlQ29uZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10KKyAgICAgICAgc2VsZi5leHRfdXNlckNmZyA9IGlkbGVDb25mLnVzZXJDZmdbJ2V4dGVuc2lvbnMnXQorICAgICAgICBzZWxmLmlzX2ludCA9IHNlbGYucmVnaXN0ZXIoaXNfaW50KQorICAgICAgICBzZWxmLmxvYWRfZXh0ZW5zaW9ucygpCisgICAgICAgICMgY3JlYXRlIHdpZGdldHMgLSBhIGxpc3Rib3ggc2hvd3MgYWxsIGF2YWlsYWJsZSBleHRlbnNpb25zLCB3aXRoIHRoZQorICAgICAgICAjIGNvbnRyb2xzIGZvciB0aGUgZXh0ZW5zaW9uIHNlbGVjdGVkIGluIHRoZSBsaXN0Ym94IHRvIHRoZSByaWdodAorICAgICAgICBzZWxmLmV4dGVuc2lvbl9uYW1lcyA9IFN0cmluZ1ZhcihzZWxmKQorICAgICAgICBmcmFtZS5yb3djb25maWd1cmUoMCwgd2VpZ2h0PTEpCisgICAgICAgIGZyYW1lLmNvbHVtbmNvbmZpZ3VyZSgyLCB3ZWlnaHQ9MSkKKyAgICAgICAgc2VsZi5leHRlbnNpb25fbGlzdCA9IExpc3Rib3goZnJhbWUsIGxpc3R2YXJpYWJsZT1zZWxmLmV4dGVuc2lvbl9uYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0bW9kZT0nYnJvd3NlJykKKyAgICAgICAgc2VsZi5leHRlbnNpb25fbGlzdC5iaW5kKCc8PExpc3Rib3hTZWxlY3Q+PicsIHNlbGYuZXh0ZW5zaW9uX3NlbGVjdGVkKQorICAgICAgICBzY3JvbGwgPSBTY3JvbGxiYXIoZnJhbWUsIGNvbW1hbmQ9c2VsZi5leHRlbnNpb25fbGlzdC55dmlldykKKyAgICAgICAgc2VsZi5leHRlbnNpb25fbGlzdC55c2Nyb2xsY29tbWFuZD1zY3JvbGwuc2V0CisgICAgICAgIHNlbGYuZGV0YWlsc19mcmFtZSA9IExhYmVsRnJhbWUoZnJhbWUsIHdpZHRoPTI1MCwgaGVpZ2h0PTI1MCkKKyAgICAgICAgc2VsZi5leHRlbnNpb25fbGlzdC5ncmlkKGNvbHVtbj0wLCByb3c9MCwgc3RpY2t5PSdud3MnKQorICAgICAgICBzY3JvbGwuZ3JpZChjb2x1bW49MSwgcm93PTAsIHN0aWNreT0nbnMnKQorICAgICAgICBzZWxmLmRldGFpbHNfZnJhbWUuZ3JpZChjb2x1bW49Miwgcm93PTAsIHN0aWNreT0nbnNldycsIHBhZHg9WzEwLCAwXSkKKyAgICAgICAgZnJhbWUuY29uZmlndXJlKHBhZHg9MTAsIHBhZHk9MTApCisgICAgICAgIHNlbGYuY29uZmlnX2ZyYW1lID0ge30KKyAgICAgICAgc2VsZi5jdXJyZW50X2V4dGVuc2lvbiA9IE5vbmUKKworICAgICAgICBzZWxmLm91dGVyZnJhbWUgPSBzZWxmICAgICAgICAgICAgICAgICAgICAgICMgVEVNUE9SQVJZCisgICAgICAgIHNlbGYudGFiYmVkX3BhZ2Vfc2V0ID0gc2VsZi5leHRlbnNpb25fbGlzdCAgIyBURU1QT1JBUlkKKworICAgICAgICAjIGNyZWF0ZSB0aGUgZnJhbWUgaG9sZGluZyBjb250cm9scyBmb3IgZWFjaCBleHRlbnNpb24KKyAgICAgICAgZXh0X25hbWVzID0gJycKKyAgICAgICAgZm9yIGV4dF9uYW1lIGluIHNvcnRlZChzZWxmLmV4dGVuc2lvbnMpOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfZXh0ZW5zaW9uX2ZyYW1lKGV4dF9uYW1lKQorICAgICAgICAgICAgZXh0X25hbWVzID0gZXh0X25hbWVzICsgJ3snICsgZXh0X25hbWUgKyAnfSAnCisgICAgICAgIHNlbGYuZXh0ZW5zaW9uX25hbWVzLnNldChleHRfbmFtZXMpCisgICAgICAgIHNlbGYuZXh0ZW5zaW9uX2xpc3Quc2VsZWN0aW9uX3NldCgwKQorICAgICAgICBzZWxmLmV4dGVuc2lvbl9zZWxlY3RlZChOb25lKQorCisgICAgZGVmIGxvYWRfZXh0ZW5zaW9ucyhzZWxmKToKKyAgICAgICAgIkZpbGwgc2VsZi5leHRlbnNpb25zIHdpdGggZGF0YSBmcm9tIHRoZSBkZWZhdWx0IGFuZCB1c2VyIGNvbmZpZ3MuIgorICAgICAgICBzZWxmLmV4dGVuc2lvbnMgPSB7fQorICAgICAgICBmb3IgZXh0X25hbWUgaW4gaWRsZUNvbmYuR2V0RXh0ZW5zaW9ucyhhY3RpdmVfb25seT1GYWxzZSk6CisgICAgICAgICAgICBzZWxmLmV4dGVuc2lvbnNbZXh0X25hbWVdID0gW10KKworICAgICAgICBmb3IgZXh0X25hbWUgaW4gc2VsZi5leHRlbnNpb25zOgorICAgICAgICAgICAgb3B0X2xpc3QgPSBzb3J0ZWQoc2VsZi5leHRfZGVmYXVsdENmZy5HZXRPcHRpb25MaXN0KGV4dF9uYW1lKSkKKworICAgICAgICAgICAgIyBicmluZyAnZW5hYmxlJyBvcHRpb25zIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QKKyAgICAgICAgICAgIGVuYWJsZXMgPSBbb3B0X25hbWUgZm9yIG9wdF9uYW1lIGluIG9wdF9saXN0CisgICAgICAgICAgICAgICAgICAgICAgIGlmIG9wdF9uYW1lLnN0YXJ0c3dpdGgoJ2VuYWJsZScpXQorICAgICAgICAgICAgZm9yIG9wdF9uYW1lIGluIGVuYWJsZXM6CisgICAgICAgICAgICAgICAgb3B0X2xpc3QucmVtb3ZlKG9wdF9uYW1lKQorICAgICAgICAgICAgb3B0X2xpc3QgPSBlbmFibGVzICsgb3B0X2xpc3QKKworICAgICAgICAgICAgZm9yIG9wdF9uYW1lIGluIG9wdF9saXN0OgorICAgICAgICAgICAgICAgIGRlZl9zdHIgPSBzZWxmLmV4dF9kZWZhdWx0Q2ZnLkdldCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4dF9uYW1lLCBvcHRfbmFtZSwgcmF3PVRydWUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkZWZfb2JqID0geydUcnVlJzpUcnVlLCAnRmFsc2UnOkZhbHNlfVtkZWZfc3RyXQorICAgICAgICAgICAgICAgICAgICBvcHRfdHlwZSA9ICdib29sJworICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZGVmX29iaiA9IGludChkZWZfc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3R5cGUgPSAnaW50JworICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZl9vYmogPSBkZWZfc3RyCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfdHlwZSA9IE5vbmUKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5leHRfdXNlckNmZy5HZXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X25hbWUsIG9wdF9uYW1lLCB0eXBlPW9wdF90eXBlLCByYXc9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWRlZl9vYmopCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6ICAjIE5lZWQgdGhpcyB1bnRpbCAuR2V0IGZpeGVkCisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmX29iaiAgIyBiYWQgdmFsdWVzIG92ZXJ3cml0dGVuIGJ5IGVudHJ5CisgICAgICAgICAgICAgICAgdmFyID0gU3RyaW5nVmFyKHNlbGYpCisgICAgICAgICAgICAgICAgdmFyLnNldChzdHIodmFsdWUpKQorCisgICAgICAgICAgICAgICAgc2VsZi5leHRlbnNpb25zW2V4dF9uYW1lXS5hcHBlbmQoeyduYW1lJzogb3B0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlJzogb3B0X3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0JzogZGVmX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2YXInOiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkKKworICAgIGRlZiBleHRlbnNpb25fc2VsZWN0ZWQoc2VsZiwgZXZlbnQpOgorICAgICAgICBuZXdzZWwgPSBzZWxmLmV4dGVuc2lvbl9saXN0LmN1cnNlbGVjdGlvbigpCisgICAgICAgIGlmIG5ld3NlbDoKKyAgICAgICAgICAgIG5ld3NlbCA9IHNlbGYuZXh0ZW5zaW9uX2xpc3QuZ2V0KG5ld3NlbCkKKyAgICAgICAgaWYgbmV3c2VsIGlzIE5vbmUgb3IgbmV3c2VsICE9IHNlbGYuY3VycmVudF9leHRlbnNpb246CisgICAgICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZXh0ZW5zaW9uOgorICAgICAgICAgICAgICAgIHNlbGYuZGV0YWlsc19mcmFtZS5jb25maWcodGV4dD0nJykKKyAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ19mcmFtZVtzZWxmLmN1cnJlbnRfZXh0ZW5zaW9uXS5ncmlkX2ZvcmdldCgpCisgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50X2V4dGVuc2lvbiA9IE5vbmUKKyAgICAgICAgaWYgbmV3c2VsOgorICAgICAgICAgICAgc2VsZi5kZXRhaWxzX2ZyYW1lLmNvbmZpZyh0ZXh0PW5ld3NlbCkKKyAgICAgICAgICAgIHNlbGYuY29uZmlnX2ZyYW1lW25ld3NlbF0uZ3JpZChjb2x1bW49MCwgcm93PTAsIHN0aWNreT0nbnNldycpCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZXh0ZW5zaW9uID0gbmV3c2VsCisKKyAgICBkZWYgY3JlYXRlX2V4dGVuc2lvbl9mcmFtZShzZWxmLCBleHRfbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZSBhIGZyYW1lIGhvbGRpbmcgdGhlIHdpZGdldHMgdG8gY29uZmlndXJlIG9uZSBleHRlbnNpb24iIiIKKyAgICAgICAgZiA9IFZlcnRpY2FsU2Nyb2xsZWRGcmFtZShzZWxmLmRldGFpbHNfZnJhbWUsIGhlaWdodD0yNTAsIHdpZHRoPTI1MCkKKyAgICAgICAgc2VsZi5jb25maWdfZnJhbWVbZXh0X25hbWVdID0gZgorICAgICAgICBlbnRyeV9hcmVhID0gZi5pbnRlcmlvcgorICAgICAgICAjIGNyZWF0ZSBhbiBlbnRyeSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbgorICAgICAgICBmb3Igcm93LCBvcHQgaW4gZW51bWVyYXRlKHNlbGYuZXh0ZW5zaW9uc1tleHRfbmFtZV0pOgorICAgICAgICAgICAgIyBjcmVhdGUgYSByb3cgd2l0aCBhIGxhYmVsIGFuZCBlbnRyeS9jaGVja2J1dHRvbgorICAgICAgICAgICAgbGFiZWwgPSBMYWJlbChlbnRyeV9hcmVhLCB0ZXh0PW9wdFsnbmFtZSddKQorICAgICAgICAgICAgbGFiZWwuZ3JpZChyb3c9cm93LCBjb2x1bW49MCwgc3RpY2t5PU5XKQorICAgICAgICAgICAgdmFyID0gb3B0Wyd2YXInXQorICAgICAgICAgICAgaWYgb3B0Wyd0eXBlJ10gPT0gJ2Jvb2wnOgorICAgICAgICAgICAgICAgIENoZWNrYnV0dG9uKGVudHJ5X2FyZWEsIHRleHR2YXJpYWJsZT12YXIsIHZhcmlhYmxlPXZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbnZhbHVlPSdUcnVlJywgb2ZmdmFsdWU9J0ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRpY2F0b3Jvbj1GQUxTRSwgc2VsZWN0Y29sb3I9JycsIHdpZHRoPTgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApLmdyaWQocm93PXJvdywgY29sdW1uPTEsIHN0aWNreT1XLCBwYWR4PTcpCisgICAgICAgICAgICBlbGlmIG9wdFsndHlwZSddID09ICdpbnQnOgorICAgICAgICAgICAgICAgIEVudHJ5KGVudHJ5X2FyZWEsIHRleHR2YXJpYWJsZT12YXIsIHZhbGlkYXRlPSdrZXknLAorICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlY29tbWFuZD0oc2VsZi5pc19pbnQsICclUCcpCisgICAgICAgICAgICAgICAgICAgICAgKS5ncmlkKHJvdz1yb3csIGNvbHVtbj0xLCBzdGlja3k9TlNFVywgcGFkeD03KQorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIEVudHJ5KGVudHJ5X2FyZWEsIHRleHR2YXJpYWJsZT12YXIKKyAgICAgICAgICAgICAgICAgICAgICApLmdyaWQocm93PXJvdywgY29sdW1uPTEsIHN0aWNreT1OU0VXLCBwYWR4PTcpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIHNldF9leHRlbnNpb25fdmFsdWUoc2VsZiwgc2VjdGlvbiwgb3B0KToKKyAgICAgICAgbmFtZSA9IG9wdFsnbmFtZSddCisgICAgICAgIGRlZmF1bHQgPSBvcHRbJ2RlZmF1bHQnXQorICAgICAgICB2YWx1ZSA9IG9wdFsndmFyJ10uZ2V0KCkuc3RyaXAoKSBvciBkZWZhdWx0CisgICAgICAgIG9wdFsndmFyJ10uc2V0KHZhbHVlKQorICAgICAgICAjIGlmIHNlbGYuZGVmYXVsdENmZy5oYXNfc2VjdGlvbihzZWN0aW9uKToKKyAgICAgICAgIyBDdXJyZW50bHksIGFsd2F5cyB0cnVlOyBpZiBub3QsIGluZGVudCB0byByZXR1cm4KKyAgICAgICAgaWYgKHZhbHVlID09IGRlZmF1bHQpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZXh0X3VzZXJDZmcuUmVtb3ZlT3B0aW9uKHNlY3Rpb24sIG5hbWUpCisgICAgICAgICMgc2V0IHRoZSBvcHRpb24KKyAgICAgICAgcmV0dXJuIHNlbGYuZXh0X3VzZXJDZmcuU2V0T3B0aW9uKHNlY3Rpb24sIG5hbWUsIHZhbHVlKQorCisgICAgZGVmIHNhdmVfYWxsX2NoYW5nZWRfZXh0ZW5zaW9ucyhzZWxmKToKKyAgICAgICAgIiIiU2F2ZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgdG8gdGhlIHVzZXIgY29uZmlnIGZpbGUuIiIiCisgICAgICAgIGhhc19jaGFuZ2VzID0gRmFsc2UKKyAgICAgICAgZm9yIGV4dF9uYW1lIGluIHNlbGYuZXh0ZW5zaW9uczoKKyAgICAgICAgICAgIG9wdGlvbnMgPSBzZWxmLmV4dGVuc2lvbnNbZXh0X25hbWVdCisgICAgICAgICAgICBmb3Igb3B0IGluIG9wdGlvbnM6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXRfZXh0ZW5zaW9uX3ZhbHVlKGV4dF9uYW1lLCBvcHQpOgorICAgICAgICAgICAgICAgICAgICBoYXNfY2hhbmdlcyA9IFRydWUKKyAgICAgICAgaWYgaGFzX2NoYW5nZXM6CisgICAgICAgICAgICBzZWxmLmV4dF91c2VyQ2ZnLlNhdmUoKQorCisKK2hlbHBfY29tbW9uID0gJycnXAorV2hlbiB5b3UgY2xpY2sgZWl0aGVyIHRoZSBBcHBseSBvciBPayBidXR0b25zLCBzZXR0aW5ncyBpbiB0aGlzCitkaWFsb2cgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gSURMRSdzIGRlZmF1bHQgYXJlIHNhdmVkIGluCithIC5pZGxlcmMgZGlyZWN0b3J5IGluIHlvdXIgaG9tZSBkaXJlY3RvcnkuIEV4Y2VwdCBhcyBub3RlZCwKK3RoZXNlIGNoYW5nZXMgYXBwbHkgdG8gYWxsIHZlcnNpb25zIG9mIElETEUgaW5zdGFsbGVkIG9uIHRoaXMKK21hY2hpbmUuIFNvbWUgZG8gbm90IHRha2UgYWZmZWN0IHVudGlsIElETEUgaXMgcmVzdGFydGVkLgorW0NhbmNlbF0gb25seSBjYW5jZWxzIGNoYW5nZXMgbWFkZSBzaW5jZSB0aGUgbGFzdCBzYXZlLgorJycnCitoZWxwX3BhZ2VzID0geworICAgICdIaWdobGlnaHRpbmcnOicnJworSGlnaGxpZ2h0aW5nOgorVGhlIElETEUgRGFyayBjb2xvciB0aGVtZSBpcyBuZXcgaW4gT2N0b2JlciAyMDE1LiAgSXQgY2FuIG9ubHkKK2JlIHVzZWQgd2l0aCBvbGRlciBJRExFIHJlbGVhc2VzIGlmIGl0IGlzIHNhdmVkIGFzIGEgY3VzdG9tCit0aGVtZSwgd2l0aCBhIGRpZmZlcmVudCBuYW1lLgorJycnCit9CisKKworZGVmIGlzX2ludChzKToKKyAgICAiUmV0dXJuICdzIGlzIGJsYW5rIG9yIHJlcHJlc2VudHMgYW4gaW50JyIKKyAgICBpZiBub3QgczoKKyAgICAgICAgcmV0dXJuIFRydWUKKyAgICB0cnk6CisgICAgICAgIGludChzKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBWZXJ0aWNhbFNjcm9sbGVkRnJhbWUoRnJhbWUpOgorICAgICIiIkEgcHVyZSBUa2ludGVyIHZlcnRpY2FsbHkgc2Nyb2xsYWJsZSBmcmFtZS4KKworICAgICogVXNlIHRoZSAnaW50ZXJpb3InIGF0dHJpYnV0ZSB0byBwbGFjZSB3aWRnZXRzIGluc2lkZSB0aGUgc2Nyb2xsYWJsZSBmcmFtZQorICAgICogQ29uc3RydWN0IGFuZCBwYWNrL3BsYWNlL2dyaWQgbm9ybWFsbHkKKyAgICAqIFRoaXMgZnJhbWUgb25seSBhbGxvd3MgdmVydGljYWwgc2Nyb2xsaW5nCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgKmFyZ3MsICoqa3cpOgorICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBwYXJlbnQsICphcmdzLCAqKmt3KQorCisgICAgICAgICMgY3JlYXRlIGEgY2FudmFzIG9iamVjdCBhbmQgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIgZm9yIHNjcm9sbGluZyBpdAorICAgICAgICB2c2Nyb2xsYmFyID0gU2Nyb2xsYmFyKHNlbGYsIG9yaWVudD1WRVJUSUNBTCkKKyAgICAgICAgdnNjcm9sbGJhci5wYWNrKGZpbGw9WSwgc2lkZT1SSUdIVCwgZXhwYW5kPUZBTFNFKQorICAgICAgICBjYW52YXMgPSBDYW52YXMoc2VsZiwgYmQ9MCwgaGlnaGxpZ2h0dGhpY2tuZXNzPTAsCisgICAgICAgICAgICAgICAgICAgICAgICB5c2Nyb2xsY29tbWFuZD12c2Nyb2xsYmFyLnNldCwgd2lkdGg9MjQwKQorICAgICAgICBjYW52YXMucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCwgZXhwYW5kPVRSVUUpCisgICAgICAgIHZzY3JvbGxiYXIuY29uZmlnKGNvbW1hbmQ9Y2FudmFzLnl2aWV3KQorCisgICAgICAgICMgcmVzZXQgdGhlIHZpZXcKKyAgICAgICAgY2FudmFzLnh2aWV3X21vdmV0bygwKQorICAgICAgICBjYW52YXMueXZpZXdfbW92ZXRvKDApCisKKyAgICAgICAgIyBjcmVhdGUgYSBmcmFtZSBpbnNpZGUgdGhlIGNhbnZhcyB3aGljaCB3aWxsIGJlIHNjcm9sbGVkIHdpdGggaXQKKyAgICAgICAgc2VsZi5pbnRlcmlvciA9IGludGVyaW9yID0gRnJhbWUoY2FudmFzKQorICAgICAgICBpbnRlcmlvcl9pZCA9IGNhbnZhcy5jcmVhdGVfd2luZG93KDAsIDAsIHdpbmRvdz1pbnRlcmlvciwgYW5jaG9yPU5XKQorCisgICAgICAgICMgdHJhY2sgY2hhbmdlcyB0byB0aGUgY2FudmFzIGFuZCBmcmFtZSB3aWR0aCBhbmQgc3luYyB0aGVtLAorICAgICAgICAjIGFsc28gdXBkYXRpbmcgdGhlIHNjcm9sbGJhcgorICAgICAgICBkZWYgX2NvbmZpZ3VyZV9pbnRlcmlvcihldmVudCk6CisgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgc2Nyb2xsYmFycyB0byBtYXRjaCB0aGUgc2l6ZSBvZiB0aGUgaW5uZXIgZnJhbWUKKyAgICAgICAgICAgIHNpemUgPSAoaW50ZXJpb3Iud2luZm9fcmVxd2lkdGgoKSwgaW50ZXJpb3Iud2luZm9fcmVxaGVpZ2h0KCkpCisgICAgICAgICAgICBjYW52YXMuY29uZmlnKHNjcm9sbHJlZ2lvbj0iMCAwICVzICVzIiAlIHNpemUpCisgICAgICAgIGludGVyaW9yLmJpbmQoJzxDb25maWd1cmU+JywgX2NvbmZpZ3VyZV9pbnRlcmlvcikKKworICAgICAgICBkZWYgX2NvbmZpZ3VyZV9jYW52YXMoZXZlbnQpOgorICAgICAgICAgICAgaWYgaW50ZXJpb3Iud2luZm9fcmVxd2lkdGgoKSAhPSBjYW52YXMud2luZm9fd2lkdGgoKToKKyAgICAgICAgICAgICAgICAjIHVwZGF0ZSB0aGUgaW5uZXIgZnJhbWUncyB3aWR0aCB0byBmaWxsIHRoZSBjYW52YXMKKyAgICAgICAgICAgICAgICBjYW52YXMuaXRlbWNvbmZpZ3VyZShpbnRlcmlvcl9pZCwgd2lkdGg9Y2FudmFzLndpbmZvX3dpZHRoKCkpCisgICAgICAgIGNhbnZhcy5iaW5kKCc8Q29uZmlndXJlPicsIF9jb25maWd1cmVfY2FudmFzKQorCisgICAgICAgIHJldHVybgorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgI3Rlc3QgdGhlIGRpYWxvZwotICAgIHJvb3Q9VGsoKQotICAgIEJ1dHRvbihyb290LHRleHQ9J0RpYWxvZycsCi0gICAgICAgICAgICBjb21tYW5kPWxhbWJkYTpDb25maWdEaWFsb2cocm9vdCwnU2V0dGluZ3MnKSkucGFjaygpCi0gICAgcm9vdC5pbnN0YW5jZV9kaWN0PXt9Ci0gICAgcm9vdC5tYWlubG9vcCgpCisgICAgaW1wb3J0IHVuaXR0ZXN0CisgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF9jb25maWdkaWFsb2cnLAorICAgICAgICAgICAgICAgICAgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKENvbmZpZ0RpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkgYi9MaWIvaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CmluZGV4IGE5NzRkNTQuLjUzMWVmYjQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2NvbmZpZ0hhbmRsZXIucHkKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnSGFuZGxlci5weQpAQCAtMTUsMTMgKzE1LDE1IEBACiB0aGUgcmV0cmlldmFsIG9mIGNvbmZpZyBpbmZvcm1hdGlvbi4gV2hlbiBhIGRlZmF1bHQgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZgogYSByZXF1ZXN0ZWQgY29uZmlnIHZhbHVlLCBhIG1lc3NhZ2UgaXMgcHJpbnRlZCB0byBzdGRlcnIgdG8gYWlkIGluCiBjb25maWd1cmF0aW9uIHByb2JsZW0gbm90aWZpY2F0aW9uIGFuZCByZXNvbHV0aW9uLgotCiAiIiIKKyMgVE9ET3MgYWRkZWQgT2N0IDIwMTQsIHRqcgorCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIAotZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0Ci1mcm9tIGNvbmZpZ3BhcnNlciBpbXBvcnQgQ29uZmlnUGFyc2VyLCBOb09wdGlvbkVycm9yLCBOb1NlY3Rpb25FcnJvcgorZnJvbSBjb25maWdwYXJzZXIgaW1wb3J0IENvbmZpZ1BhcnNlcgorZnJvbSB0a2ludGVyIGltcG9ydCBUa1ZlcnNpb24KK2Zyb20gdGtpbnRlci5mb250IGltcG9ydCBGb250LCBuYW1ldG9mb250CiAKIGNsYXNzIEludmFsaWRDb25maWdUeXBlKEV4Y2VwdGlvbik6IHBhc3MKIGNsYXNzIEludmFsaWRDb25maWdTZXQoRXhjZXB0aW9uKTogcGFzcwpAQCAtMzYsNyArMzgsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgY2ZnRmlsZSAtIHN0cmluZywgZnVsbHkgc3BlY2lmaWVkIGNvbmZpZ3VyYXRpb24gZmlsZSBuYW1lCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmZpbGU9Y2ZnRmlsZQorICAgICAgICBzZWxmLmZpbGUgPSBjZmdGaWxlCiAgICAgICAgIENvbmZpZ1BhcnNlci5fX2luaXRfXyhzZWxmLCBkZWZhdWx0cz1jZmdEZWZhdWx0cywgc3RyaWN0PUZhbHNlKQogCiAgICAgZGVmIEdldChzZWxmLCBzZWN0aW9uLCBvcHRpb24sIHR5cGU9Tm9uZSwgZGVmYXVsdD1Ob25lLCByYXc9RmFsc2UpOgpAQCAtNDQsMjggKzQ2LDI3IEBACiAgICAgICAgIEdldCBhbiBvcHRpb24gdmFsdWUgZm9yIGdpdmVuIHNlY3Rpb24vb3B0aW9uIG9yIHJldHVybiBkZWZhdWx0LgogICAgICAgICBJZiB0eXBlIGlzIHNwZWNpZmllZCwgcmV0dXJuIGFzIHR5cGUuCiAgICAgICAgICIiIgorICAgICAgICAjIFRPRE8gVXNlIGRlZmF1bHQgYXMgZmFsbGJhY2ssIGF0IGxlYXN0IGlmIG5vdCBOb25lCisgICAgICAgICMgU2hvdWxkIGFsc28gcHJpbnQgV2FybmluZyhmaWxlLCBzZWN0aW9uLCBvcHRpb24pLgorICAgICAgICAjIEN1cnJlbnRseSBtYXkgcmFpc2UgVmFsdWVFcnJvcgogICAgICAgICBpZiBub3Qgc2VsZi5oYXNfb3B0aW9uKHNlY3Rpb24sIG9wdGlvbik6CiAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdAotICAgICAgICBpZiB0eXBlPT0nYm9vbCc6CisgICAgICAgIGlmIHR5cGUgPT0gJ2Jvb2wnOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0Ym9vbGVhbihzZWN0aW9uLCBvcHRpb24pCi0gICAgICAgIGVsaWYgdHlwZT09J2ludCc6CisgICAgICAgIGVsaWYgdHlwZSA9PSAnaW50JzoKICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldGludChzZWN0aW9uLCBvcHRpb24pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5nZXQoc2VjdGlvbiwgb3B0aW9uLCByYXc9cmF3KQogCi0gICAgZGVmIEdldE9wdGlvbkxpc3Qoc2VsZixzZWN0aW9uKToKLSAgICAgICAgIiIiCi0gICAgICAgIEdldCBhbiBvcHRpb24gbGlzdCBmb3IgZ2l2ZW4gc2VjdGlvbgotICAgICAgICAiIiIKKyAgICBkZWYgR2V0T3B0aW9uTGlzdChzZWxmLCBzZWN0aW9uKToKKyAgICAgICAgIlJldHVybiBhIGxpc3Qgb2Ygb3B0aW9ucyBmb3IgZ2l2ZW4gc2VjdGlvbiwgZWxzZSBbXS4iCiAgICAgICAgIGlmIHNlbGYuaGFzX3NlY3Rpb24oc2VjdGlvbik6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5vcHRpb25zKHNlY3Rpb24pCiAgICAgICAgIGVsc2U6ICAjcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZQogICAgICAgICAgICAgcmV0dXJuIFtdCiAKICAgICBkZWYgTG9hZChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIExvYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBmcm9tIGRpc2sKLSAgICAgICAgIiIiCisgICAgICAgICJMb2FkIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgZnJvbSBkaXNrLiIKICAgICAgICAgc2VsZi5yZWFkKHNlbGYuZmlsZSkKIAogY2xhc3MgSWRsZVVzZXJDb25mUGFyc2VyKElkbGVDb25mUGFyc2VyKToKQEAgLTczLDYxICs3NCw1MCBAQAogICAgIElkbGVDb25maWdQYXJzZXIgc3BlY2lhbGlzZWQgZm9yIHVzZXIgY29uZmlndXJhdGlvbiBoYW5kbGluZy4KICAgICAiIiIKIAotICAgIGRlZiBBZGRTZWN0aW9uKHNlbGYsc2VjdGlvbik6Ci0gICAgICAgICIiIgotICAgICAgICBpZiBzZWN0aW9uIGRvZXNuJ3QgZXhpc3QsIGFkZCBpdAotICAgICAgICAiIiIKKyAgICBkZWYgQWRkU2VjdGlvbihzZWxmLCBzZWN0aW9uKToKKyAgICAgICAgIklmIHNlY3Rpb24gZG9lc24ndCBleGlzdCwgYWRkIGl0LiIKICAgICAgICAgaWYgbm90IHNlbGYuaGFzX3NlY3Rpb24oc2VjdGlvbik6CiAgICAgICAgICAgICBzZWxmLmFkZF9zZWN0aW9uKHNlY3Rpb24pCiAKICAgICBkZWYgUmVtb3ZlRW1wdHlTZWN0aW9ucyhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIHJlbW92ZSBhbnkgc2VjdGlvbnMgdGhhdCBoYXZlIG5vIG9wdGlvbnMKLSAgICAgICAgIiIiCisgICAgICAgICJSZW1vdmUgYW55IHNlY3Rpb25zIHRoYXQgaGF2ZSBubyBvcHRpb25zLiIKICAgICAgICAgZm9yIHNlY3Rpb24gaW4gc2VsZi5zZWN0aW9ucygpOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuR2V0T3B0aW9uTGlzdChzZWN0aW9uKToKICAgICAgICAgICAgICAgICBzZWxmLnJlbW92ZV9zZWN0aW9uKHNlY3Rpb24pCiAKICAgICBkZWYgSXNFbXB0eShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJlbW92ZSBlbXB0eSBzZWN0aW9ucyBhbmQgdGhlbiByZXR1cm4gMSBpZiBwYXJzZXIgaGFzIG5vIHNlY3Rpb25zCi0gICAgICAgIGxlZnQsIGVsc2UgcmV0dXJuIDAuCi0gICAgICAgICIiIgorICAgICAgICAiUmV0dXJuIFRydWUgaWYgbm8gc2VjdGlvbnMgYWZ0ZXIgcmVtb3ZpbmcgZW1wdHkgc2VjdGlvbnMuIgogICAgICAgICBzZWxmLlJlbW92ZUVtcHR5U2VjdGlvbnMoKQotICAgICAgICBpZiBzZWxmLnNlY3Rpb25zKCk6Ci0gICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgcmV0dXJuIG5vdCBzZWxmLnNlY3Rpb25zKCkKIAotICAgIGRlZiBSZW1vdmVPcHRpb24oc2VsZixzZWN0aW9uLG9wdGlvbik6Ci0gICAgICAgICIiIgotICAgICAgICBJZiBzZWN0aW9uL29wdGlvbiBleGlzdHMsIHJlbW92ZSBpdC4KLSAgICAgICAgUmV0dXJucyAxIGlmIG9wdGlvbiB3YXMgcmVtb3ZlZCwgMCBvdGhlcndpc2UuCisgICAgZGVmIFJlbW92ZU9wdGlvbihzZWxmLCBzZWN0aW9uLCBvcHRpb24pOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBvcHRpb24gaXMgcmVtb3ZlZCBmcm9tIHNlY3Rpb24sIGVsc2UgRmFsc2UuCisKKyAgICAgICAgRmFsc2UgaWYgZWl0aGVyIHNlY3Rpb24gZG9lcyBub3QgZXhpc3Qgb3IgZGlkIG5vdCBoYXZlIG9wdGlvbi4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuaGFzX3NlY3Rpb24oc2VjdGlvbik6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZW1vdmVfb3B0aW9uKHNlY3Rpb24sb3B0aW9uKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVtb3ZlX29wdGlvbihzZWN0aW9uLCBvcHRpb24pCisgICAgICAgIHJldHVybiBGYWxzZQogCi0gICAgZGVmIFNldE9wdGlvbihzZWxmLHNlY3Rpb24sb3B0aW9uLHZhbHVlKToKKyAgICBkZWYgU2V0T3B0aW9uKHNlbGYsIHNlY3Rpb24sIG9wdGlvbiwgdmFsdWUpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiBvcHRpb24gaXMgYWRkZWQgb3IgY2hhbmdlZCB0byB2YWx1ZSwgZWxzZSBGYWxzZS4KKworICAgICAgICBBZGQgc2VjdGlvbiBpZiByZXF1aXJlZC4gIEZhbHNlIG1lYW5zIG9wdGlvbiBhbHJlYWR5IGhhZCB2YWx1ZS4KICAgICAgICAgIiIiCi0gICAgICAgIFNldHMgb3B0aW9uIHRvIHZhbHVlLCBhZGRpbmcgc2VjdGlvbiBpZiByZXF1aXJlZC4KLSAgICAgICAgUmV0dXJucyAxIGlmIG9wdGlvbiB3YXMgYWRkZWQgb3IgY2hhbmdlZCwgb3RoZXJ3aXNlIDAuCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLmhhc19vcHRpb24oc2VjdGlvbixvcHRpb24pOgotICAgICAgICAgICAgaWYgc2VsZi5nZXQoc2VjdGlvbixvcHRpb24pPT12YWx1ZToKLSAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBpZiBzZWxmLmhhc19vcHRpb24oc2VjdGlvbiwgb3B0aW9uKToKKyAgICAgICAgICAgIGlmIHNlbGYuZ2V0KHNlY3Rpb24sIG9wdGlvbikgPT0gdmFsdWU6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc2V0KHNlY3Rpb24sb3B0aW9uLHZhbHVlKQotICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICAgICAgICAgc2VsZi5zZXQoc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuaGFzX3NlY3Rpb24oc2VjdGlvbik6CiAgICAgICAgICAgICAgICAgc2VsZi5hZGRfc2VjdGlvbihzZWN0aW9uKQotICAgICAgICAgICAgc2VsZi5zZXQoc2VjdGlvbixvcHRpb24sdmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgc2VsZi5zZXQoc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICBkZWYgUmVtb3ZlRmlsZShzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFJlbW92ZXMgdGhlIHVzZXIgY29uZmlnIGZpbGUgZnJvbSBkaXNrIGlmIGl0IGV4aXN0cy4KLSAgICAgICAgIiIiCisgICAgICAgICJSZW1vdmUgdXNlciBjb25maWcgZmlsZSBzZWxmLmZpbGUgZnJvbSBkaXNrIGlmIGl0IGV4aXN0cy4iCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuZmlsZSk6CiAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlKQogCkBAIC0xNTEsNjIgKzE0MSw1OSBAQAogICAgICAgICAgICAgc2VsZi5SZW1vdmVGaWxlKCkKIAogY2xhc3MgSWRsZUNvbmY6Ci0gICAgIiIiCi0gICAgaG9sZHMgY29uZmlnIHBhcnNlcnMgZm9yIGFsbCBpZGxlIGNvbmZpZyBmaWxlczoKLSAgICBkZWZhdWx0IGNvbmZpZyBmaWxlcwotICAgICAgICAoaWRsZSBpbnN0YWxsIGRpcikvY29uZmlnLW1haW4uZGVmCi0gICAgICAgIChpZGxlIGluc3RhbGwgZGlyKS9jb25maWctZXh0ZW5zaW9ucy5kZWYKLSAgICAgICAgKGlkbGUgaW5zdGFsbCBkaXIpL2NvbmZpZy1oaWdobGlnaHQuZGVmCi0gICAgICAgIChpZGxlIGluc3RhbGwgZGlyKS9jb25maWcta2V5cy5kZWYKLSAgICB1c2VyIGNvbmZpZyAgZmlsZXMKLSAgICAgICAgKHVzZXIgaG9tZSBkaXIpLy5pZGxlcmMvY29uZmlnLW1haW4uY2ZnCi0gICAgICAgICh1c2VyIGhvbWUgZGlyKS8uaWRsZXJjL2NvbmZpZy1leHRlbnNpb25zLmNmZwotICAgICAgICAodXNlciBob21lIGRpcikvLmlkbGVyYy9jb25maWctaGlnaGxpZ2h0LmNmZwotICAgICAgICAodXNlciBob21lIGRpcikvLmlkbGVyYy9jb25maWcta2V5cy5jZmcKKyAgICAiIiJIb2xkIGNvbmZpZyBwYXJzZXJzIGZvciBhbGwgaWRsZSBjb25maWcgZmlsZXMgaW4gc2luZ2xldG9uIGluc3RhbmNlLgorCisgICAgRGVmYXVsdCBjb25maWcgZmlsZXMsIHNlbGYuZGVmYXVsdENmZyAtLQorICAgICAgICBmb3IgY29uZmlnX3R5cGUgaW4gc2VsZi5jb25maWdfdHlwZXM6CisgICAgICAgICAgICAoaWRsZSBpbnN0YWxsIGRpcikvY29uZmlnLXtjb25maWctdHlwZX0uZGVmCisKKyAgICBVc2VyIGNvbmZpZyBmaWxlcywgc2VsZi51c2VyQ2ZnIC0tCisgICAgICAgIGZvciBjb25maWdfdHlwZSBpbiBzZWxmLmNvbmZpZ190eXBlczoKKyAgICAgICAgKHVzZXIgaG9tZSBkaXIpLy5pZGxlcmMvY29uZmlnLXtjb25maWctdHlwZX0uY2ZnCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLmRlZmF1bHRDZmc9e30KLSAgICAgICAgc2VsZi51c2VyQ2ZnPXt9Ci0gICAgICAgIHNlbGYuY2ZnPXt9CisgICAgICAgIHNlbGYuY29uZmlnX3R5cGVzID0gKCdtYWluJywgJ2V4dGVuc2lvbnMnLCAnaGlnaGxpZ2h0JywgJ2tleXMnKQorICAgICAgICBzZWxmLmRlZmF1bHRDZmcgPSB7fQorICAgICAgICBzZWxmLnVzZXJDZmcgPSB7fQorICAgICAgICBzZWxmLmNmZyA9IHt9ICAjIFRPRE8gdXNlIHRvIHNlbGVjdCB1c2VyQ2ZnIHZzIGRlZmF1bHRDZmcKICAgICAgICAgc2VsZi5DcmVhdGVDb25maWdIYW5kbGVycygpCiAgICAgICAgIHNlbGYuTG9hZENmZ0ZpbGVzKCkKLSAgICAgICAgI3NlbGYuTG9hZENmZygpCisKIAogICAgIGRlZiBDcmVhdGVDb25maWdIYW5kbGVycyhzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIHNldCB1cCBhIGRpY3Rpb25hcnkgb2YgY29uZmlnIHBhcnNlcnMgZm9yIGRlZmF1bHQgYW5kIHVzZXIKLSAgICAgICAgY29uZmlndXJhdGlvbnMgcmVzcGVjdGl2ZWx5Ci0gICAgICAgICIiIgorICAgICAgICAiUG9wdWxhdGUgZGVmYXVsdCBhbmQgdXNlciBjb25maWcgcGFyc2VyIGRpY3Rpb25hcmllcy4iCiAgICAgICAgICNidWlsZCBpZGxlIGluc3RhbGwgcGF0aAogICAgICAgICBpZiBfX25hbWVfXyAhPSAnX19tYWluX18nOiAjIHdlIHdlcmUgaW1wb3J0ZWQKICAgICAgICAgICAgIGlkbGVEaXI9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQogICAgICAgICBlbHNlOiAjIHdlIHdlcmUgZXhlYydlZCAoZm9yIHRlc3Rpbmcgb25seSkKICAgICAgICAgICAgIGlkbGVEaXI9b3MucGF0aC5hYnNwYXRoKHN5cy5wYXRoWzBdKQogICAgICAgICB1c2VyRGlyPXNlbGYuR2V0VXNlckNmZ0RpcigpCi0gICAgICAgIGNvbmZpZ1R5cGVzPSgnbWFpbicsJ2V4dGVuc2lvbnMnLCdoaWdobGlnaHQnLCdrZXlzJykKLSAgICAgICAgZGVmQ2ZnRmlsZXM9e30KLSAgICAgICAgdXNyQ2ZnRmlsZXM9e30KLSAgICAgICAgZm9yIGNmZ1R5cGUgaW4gY29uZmlnVHlwZXM6ICNidWlsZCBjb25maWcgZmlsZSBuYW1lcwotICAgICAgICAgICAgZGVmQ2ZnRmlsZXNbY2ZnVHlwZV09b3MucGF0aC5qb2luKGlkbGVEaXIsJ2NvbmZpZy0nK2NmZ1R5cGUrJy5kZWYnKQotICAgICAgICAgICAgdXNyQ2ZnRmlsZXNbY2ZnVHlwZV09b3MucGF0aC5qb2luKHVzZXJEaXIsJ2NvbmZpZy0nK2NmZ1R5cGUrJy5jZmcnKQotICAgICAgICBmb3IgY2ZnVHlwZSBpbiBjb25maWdUeXBlczogI2NyZWF0ZSBjb25maWcgcGFyc2VycwotICAgICAgICAgICAgc2VsZi5kZWZhdWx0Q2ZnW2NmZ1R5cGVdPUlkbGVDb25mUGFyc2VyKGRlZkNmZ0ZpbGVzW2NmZ1R5cGVdKQotICAgICAgICAgICAgc2VsZi51c2VyQ2ZnW2NmZ1R5cGVdPUlkbGVVc2VyQ29uZlBhcnNlcih1c3JDZmdGaWxlc1tjZmdUeXBlXSkKKworICAgICAgICBkZWZDZmdGaWxlcyA9IHt9CisgICAgICAgIHVzckNmZ0ZpbGVzID0ge30KKyAgICAgICAgIyBUT0RPIGVsaW1pbmF0ZSB0aGVzZSB0ZW1wb3JhcmllcyBieSBjb21iaW5pbmcgbG9vcHMKKyAgICAgICAgZm9yIGNmZ1R5cGUgaW4gc2VsZi5jb25maWdfdHlwZXM6ICNidWlsZCBjb25maWcgZmlsZSBuYW1lcworICAgICAgICAgICAgZGVmQ2ZnRmlsZXNbY2ZnVHlwZV0gPSBvcy5wYXRoLmpvaW4oCisgICAgICAgICAgICAgICAgICAgIGlkbGVEaXIsICdjb25maWctJyArIGNmZ1R5cGUgKyAnLmRlZicpCisgICAgICAgICAgICB1c3JDZmdGaWxlc1tjZmdUeXBlXSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgICAgICAgICAgICAgdXNlckRpciwgJ2NvbmZpZy0nICsgY2ZnVHlwZSArICcuY2ZnJykKKyAgICAgICAgZm9yIGNmZ1R5cGUgaW4gc2VsZi5jb25maWdfdHlwZXM6ICNjcmVhdGUgY29uZmlnIHBhcnNlcnMKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdENmZ1tjZmdUeXBlXSA9IElkbGVDb25mUGFyc2VyKGRlZkNmZ0ZpbGVzW2NmZ1R5cGVdKQorICAgICAgICAgICAgc2VsZi51c2VyQ2ZnW2NmZ1R5cGVdID0gSWRsZVVzZXJDb25mUGFyc2VyKHVzckNmZ0ZpbGVzW2NmZ1R5cGVdKQogCiAgICAgZGVmIEdldFVzZXJDZmdEaXIoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBDcmVhdGVzIChpZiByZXF1aXJlZCkgYW5kIHJldHVybnMgYSBmaWxlc3lzdGVtIGRpcmVjdG9yeSBmb3Igc3RvcmluZwotICAgICAgICB1c2VyIGNvbmZpZyBmaWxlcy4KKyAgICAgICAgIiIiUmV0dXJuIGEgZmlsZXN5c3RlbSBkaXJlY3RvcnkgZm9yIHN0b3JpbmcgdXNlciBjb25maWcgZmlsZXMuCiAKKyAgICAgICAgQ3JlYXRlcyBpdCBpZiByZXF1aXJlZC4KICAgICAgICAgIiIiCiAgICAgICAgIGNmZ0RpciA9ICcuaWRsZXJjJwogICAgICAgICB1c2VyRGlyID0gb3MucGF0aC5leHBhbmR1c2VyKCd+JykKICAgICAgICAgaWYgdXNlckRpciAhPSAnfic6ICMgZXhwYW5kdXNlcigpIGZvdW5kIHVzZXIgaG9tZSBkaXIKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh1c2VyRGlyKToKLSAgICAgICAgICAgICAgICB3YXJuID0gKCdcbiBXYXJuaW5nOiBvcy5wYXRoLmV4cGFuZHVzZXIoIn4iKSBwb2ludHMgdG9cbiAnKwotICAgICAgICAgICAgICAgICAgICAgICAgdXNlckRpcisnLFxuIGJ1dCB0aGUgcGF0aCBkb2VzIG5vdCBleGlzdC5cbicpCisgICAgICAgICAgICAgICAgd2FybiA9ICgnXG4gV2FybmluZzogb3MucGF0aC5leHBhbmR1c2VyKCJ+IikgcG9pbnRzIHRvXG4gJyArCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyRGlyICsgJyxcbiBidXQgdGhlIHBhdGggZG9lcyBub3QgZXhpc3QuJykKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUod2FybikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQod2FybiwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgdXNlckRpciA9ICd+JwpAQCAtMjE4LDQ1ICsyMDUsNDQgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5ta2Rpcih1c2VyRGlyKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgd2FybiA9ICgnXG4gV2FybmluZzogdW5hYmxlIHRvIGNyZWF0ZSB1c2VyIGNvbmZpZyBkaXJlY3RvcnlcbicrCi0gICAgICAgICAgICAgICAgICAgICAgICB1c2VyRGlyKydcbiBDaGVjayBwYXRoIGFuZCBwZXJtaXNzaW9ucy5cbiBFeGl0aW5nIVxuXG4nKQotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUod2FybikKKyAgICAgICAgICAgICAgICB3YXJuID0gKCdcbiBXYXJuaW5nOiB1bmFibGUgdG8gY3JlYXRlIHVzZXIgY29uZmlnIGRpcmVjdG9yeVxuJyArCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyRGlyICsgJ1xuIENoZWNrIHBhdGggYW5kIHBlcm1pc3Npb25zLlxuIEV4aXRpbmchXG4nKQorICAgICAgICAgICAgICAgIHByaW50KHdhcm4sIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0CisgICAgICAgICMgVE9ETyBjb250aW51ZSB3aXRob3V0IHVzZXJESXIgaW5zdGVhZCBvZiBleGl0CiAgICAgICAgIHJldHVybiB1c2VyRGlyCiAKICAgICBkZWYgR2V0T3B0aW9uKHNlbGYsIGNvbmZpZ1R5cGUsIHNlY3Rpb24sIG9wdGlvbiwgZGVmYXVsdD1Ob25lLCB0eXBlPU5vbmUsCiAgICAgICAgICAgICAgICAgICB3YXJuX29uX2RlZmF1bHQ9VHJ1ZSwgcmF3PUZhbHNlKToKLSAgICAgICAgIiIiCi0gICAgICAgIEdldCBhbiBvcHRpb24gdmFsdWUgZm9yIGdpdmVuIGNvbmZpZyB0eXBlIGFuZCBnaXZlbiBnZW5lcmFsCi0gICAgICAgIGNvbmZpZ3VyYXRpb24gc2VjdGlvbi9vcHRpb24gb3IgcmV0dXJuIGEgZGVmYXVsdC4gSWYgdHlwZSBpcyBzcGVjaWZpZWQsCi0gICAgICAgIHJldHVybiBhcyB0eXBlLiBGaXJzdGx5IHRoZSB1c2VyIGNvbmZpZ3VyYXRpb24gaXMgY2hlY2tlZCwgd2l0aCBhCi0gICAgICAgIGZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24sIGFuZCBhIGZpbmFsICdjYXRjaCBhbGwnCi0gICAgICAgIGZhbGxiYWNrIHRvIGEgdXNlYWJsZSBwYXNzZWQtaW4gZGVmYXVsdCBpZiB0aGUgb3B0aW9uIGlzbid0IHByZXNlbnQgaW4KLSAgICAgICAgZWl0aGVyIHRoZSB1c2VyIG9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCi0gICAgICAgIGNvbmZpZ1R5cGUgbXVzdCBiZSBvbmUgb2YgKCdtYWluJywnZXh0ZW5zaW9ucycsJ2hpZ2hsaWdodCcsJ2tleXMnKQotICAgICAgICBJZiBhIGRlZmF1bHQgaXMgcmV0dXJuZWQsIGFuZCB3YXJuX29uX2RlZmF1bHQgaXMgVHJ1ZSwgYSB3YXJuaW5nIGlzCi0gICAgICAgIHByaW50ZWQgdG8gc3RkZXJyLgorICAgICAgICAiIiJSZXR1cm4gYSB2YWx1ZSBmb3IgY29uZmlnVHlwZSBzZWN0aW9uIG9wdGlvbiwgb3IgZGVmYXVsdC4KIAorICAgICAgICBJZiB0eXBlIGlzIG5vdCBOb25lLCByZXR1cm4gYSB2YWx1ZSBvZiB0aGF0IHR5cGUuICBBbHNvIHBhc3MgcmF3CisgICAgICAgIHRvIHRoZSBjb25maWcgcGFyc2VyLiAgRmlyc3QgdHJ5IHRvIHJldHVybiBhIHZhbGlkIHZhbHVlCisgICAgICAgIChpbmNsdWRpbmcgdHlwZSkgZnJvbSBhIHVzZXIgY29uZmlndXJhdGlvbi4gSWYgdGhhdCBmYWlscywgdHJ5CisgICAgICAgIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIElmIHRoYXQgZmFpbHMsIHJldHVybiBkZWZhdWx0LCB3aXRoIGEKKyAgICAgICAgZGVmYXVsdCBvZiBOb25lLgorCisgICAgICAgIFdhcm4gaWYgZWl0aGVyIHVzZXIgb3IgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBoYXZlIGFuIGludmFsaWQgdmFsdWUuCisgICAgICAgIFdhcm4gaWYgZGVmYXVsdCBpcyByZXR1cm5lZCBhbmQgd2Fybl9vbl9kZWZhdWx0IGlzIFRydWUuCiAgICAgICAgICIiIgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uaGFzX29wdGlvbihzZWN0aW9uLG9wdGlvbik6CisgICAgICAgICAgICBpZiBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uaGFzX29wdGlvbihzZWN0aW9uLCBvcHRpb24pOgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uR2V0KHNlY3Rpb24sIG9wdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXR5cGUsIHJhdz1yYXcpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgd2FybmluZyA9ICgnXG4gV2FybmluZzogY29uZmlnSGFuZGxlci5weSAtIElkbGVDb25mLkdldE9wdGlvbiAtXG4nCiAgICAgICAgICAgICAgICAgICAgICAgICcgaW52YWxpZCAlciB2YWx1ZSBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gJXJcbicKLSAgICAgICAgICAgICAgICAgICAgICAgJyBmcm9tIHNlY3Rpb24gJXI6ICVyXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgJyBmcm9tIHNlY3Rpb24gJXI6ICVyJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlLCBvcHRpb24sIHNlY3Rpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uR2V0KHNlY3Rpb24sIG9wdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3PXJhdykpKQorICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnVzZXJDZmdbY29uZmlnVHlwZV0uR2V0KHNlY3Rpb24sIG9wdGlvbiwgcmF3PXJhdykpKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUod2FybmluZykKKyAgICAgICAgICAgICAgICBwcmludCh3YXJuaW5nLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuZGVmYXVsdENmZ1tjb25maWdUeXBlXS5oYXNfb3B0aW9uKHNlY3Rpb24sb3B0aW9uKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWZhdWx0Q2ZnW2NvbmZpZ1R5cGVdLkdldChzZWN0aW9uLCBvcHRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT10eXBlLCByYXc9cmF3KQorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmRlZmF1bHRDZmdbY29uZmlnVHlwZV0uR2V0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiwgb3B0aW9uLCB0eXBlPXR5cGUsIHJhdz1yYXcpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICAjcmV0dXJuaW5nIGRlZmF1bHQsIHByaW50IHdhcm5pbmcKQEAgLTI2NCwyOSArMjUwLDI4IEBACiAgICAgICAgICAgICB3YXJuaW5nID0gKCdcbiBXYXJuaW5nOiBjb25maWdIYW5kbGVyLnB5IC0gSWRsZUNvbmYuR2V0T3B0aW9uIC1cbicKICAgICAgICAgICAgICAgICAgICAgICAgJyBwcm9ibGVtIHJldHJpZXZpbmcgY29uZmlndXJhdGlvbiBvcHRpb24gJXJcbicKICAgICAgICAgICAgICAgICAgICAgICAgJyBmcm9tIHNlY3Rpb24gJXIuXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICcgcmV0dXJuaW5nIGRlZmF1bHQgdmFsdWU6ICVyXG4nICUKKyAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm5pbmcgZGVmYXVsdCB2YWx1ZTogJXInICUKICAgICAgICAgICAgICAgICAgICAgICAgKG9wdGlvbiwgc2VjdGlvbiwgZGVmYXVsdCkpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSh3YXJuaW5nKQorICAgICAgICAgICAgICAgIHByaW50KHdhcm5pbmcsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKKwogICAgIGRlZiBTZXRPcHRpb24oc2VsZiwgY29uZmlnVHlwZSwgc2VjdGlvbiwgb3B0aW9uLCB2YWx1ZSk6Ci0gICAgICAgICIiIkluIHVzZXIncyBjb25maWcgZmlsZSwgc2V0IHNlY3Rpb24ncyBvcHRpb24gdG8gdmFsdWUuCi0gICAgICAgICIiIgorICAgICAgICAiIiJTZXQgc2VjdGlvbiBvcHRpb24gdG8gdmFsdWUgaW4gdXNlciBjb25maWcgZmlsZS4iIiIKICAgICAgICAgc2VsZi51c2VyQ2ZnW2NvbmZpZ1R5cGVdLlNldE9wdGlvbihzZWN0aW9uLCBvcHRpb24sIHZhbHVlKQogCiAgICAgZGVmIEdldFNlY3Rpb25MaXN0KHNlbGYsIGNvbmZpZ1NldCwgY29uZmlnVHlwZSk6Ci0gICAgICAgICIiIgotICAgICAgICBHZXQgYSBsaXN0IG9mIHNlY3Rpb25zIGZyb20gZWl0aGVyIHRoZSB1c2VyIG9yIGRlZmF1bHQgY29uZmlnIGZvcgotICAgICAgICB0aGUgZ2l2ZW4gY29uZmlnIHR5cGUuCisgICAgICAgICIiIlJldHVybiBzZWN0aW9ucyBmb3IgY29uZmlnU2V0IGNvbmZpZ1R5cGUgY29uZmlndXJhdGlvbi4KKwogICAgICAgICBjb25maWdTZXQgbXVzdCBiZSBlaXRoZXIgJ3VzZXInIG9yICdkZWZhdWx0JwotICAgICAgICBjb25maWdUeXBlIG11c3QgYmUgb25lIG9mICgnbWFpbicsJ2V4dGVuc2lvbnMnLCdoaWdobGlnaHQnLCdrZXlzJykKKyAgICAgICAgY29uZmlnVHlwZSBtdXN0IGJlIGluIHNlbGYuY29uZmlnX3R5cGVzLgogICAgICAgICAiIiIKLSAgICAgICAgaWYgbm90IChjb25maWdUeXBlIGluICgnbWFpbicsJ2V4dGVuc2lvbnMnLCdoaWdobGlnaHQnLCdrZXlzJykpOgorICAgICAgICBpZiBub3QgKGNvbmZpZ1R5cGUgaW4gc2VsZi5jb25maWdfdHlwZXMpOgogICAgICAgICAgICAgcmFpc2UgSW52YWxpZENvbmZpZ1R5cGUoJ0ludmFsaWQgY29uZmlnVHlwZSBzcGVjaWZpZWQnKQogICAgICAgICBpZiBjb25maWdTZXQgPT0gJ3VzZXInOgotICAgICAgICAgICAgY2ZnUGFyc2VyPXNlbGYudXNlckNmZ1tjb25maWdUeXBlXQorICAgICAgICAgICAgY2ZnUGFyc2VyID0gc2VsZi51c2VyQ2ZnW2NvbmZpZ1R5cGVdCiAgICAgICAgIGVsaWYgY29uZmlnU2V0ID09ICdkZWZhdWx0JzoKICAgICAgICAgICAgIGNmZ1BhcnNlcj1zZWxmLmRlZmF1bHRDZmdbY29uZmlnVHlwZV0KICAgICAgICAgZWxzZToKQEAgLTI5NCwyNSArMjc5LDI3IEBACiAgICAgICAgIHJldHVybiBjZmdQYXJzZXIuc2VjdGlvbnMoKQogCiAgICAgZGVmIEdldEhpZ2hsaWdodChzZWxmLCB0aGVtZSwgZWxlbWVudCwgZmdCZz1Ob25lKToKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBpbmRpdmlkdWFsIGhpZ2hsaWdodGluZyB0aGVtZSBlbGVtZW50cy4KLSAgICAgICAgZmdCZyAtIHN0cmluZyAoJ2ZnJ29yJ2JnJykgb3IgTm9uZSwgaWYgTm9uZSByZXR1cm4gYSBkaWN0aW9uYXJ5Ci0gICAgICAgIGNvbnRhaW5pbmcgZmcgYW5kIGJnIGNvbG91cnMgKGFwcHJvcHJpYXRlIGZvciBwYXNzaW5nIHRvIFRraW50ZXIgaW4sCi0gICAgICAgIGUuZy4sIGEgdGFnX2NvbmZpZyBjYWxsKSwgb3RoZXJ3aXNlIGZnIG9yIGJnIGNvbG91ciBvbmx5IGFzIHNwZWNpZmllZC4KKyAgICAgICAgIiIiUmV0dXJuIGluZGl2aWR1YWwgdGhlbWUgZWxlbWVudCBoaWdobGlnaHQgY29sb3IocykuCisKKyAgICAgICAgZmdCZyAtIHN0cmluZyAoJ2ZnJyBvciAnYmcnKSBvciBOb25lLgorICAgICAgICBJZiBOb25lLCByZXR1cm4gYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZmcgYW5kIGJnIGNvbG9ycyB3aXRoCisgICAgICAgIGtleXMgJ2ZvcmVncm91bmQnIGFuZCAnYmFja2dyb3VuZCcuICBPdGhlcndpc2UsIG9ubHkgcmV0dXJuCisgICAgICAgIGZnIG9yIGJnIGNvbG9yLCBhcyBzcGVjaWZpZWQuICBDb2xvcnMgYXJlIGludGVuZGVkIHRvIGJlCisgICAgICAgIGFwcHJvcHJpYXRlIGZvciBwYXNzaW5nIHRvIFRraW50ZXIgaW4sIGUuZy4sIGEgdGFnX2NvbmZpZyBjYWxsKS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuZGVmYXVsdENmZ1snaGlnaGxpZ2h0J10uaGFzX3NlY3Rpb24odGhlbWUpOgotICAgICAgICAgICAgdGhlbWVEaWN0PXNlbGYuR2V0VGhlbWVEaWN0KCdkZWZhdWx0Jyx0aGVtZSkKKyAgICAgICAgICAgIHRoZW1lRGljdCA9IHNlbGYuR2V0VGhlbWVEaWN0KCdkZWZhdWx0JywgdGhlbWUpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0aGVtZURpY3Q9c2VsZi5HZXRUaGVtZURpY3QoJ3VzZXInLHRoZW1lKQotICAgICAgICBmb3JlPXRoZW1lRGljdFtlbGVtZW50KyctZm9yZWdyb3VuZCddCi0gICAgICAgIGlmIGVsZW1lbnQ9PSdjdXJzb3InOiAjdGhlcmUgaXMgbm8gY29uZmlnIHZhbHVlIGZvciBjdXJzb3IgYmcKLSAgICAgICAgICAgIGJhY2s9dGhlbWVEaWN0Wydub3JtYWwtYmFja2dyb3VuZCddCisgICAgICAgICAgICB0aGVtZURpY3QgPSBzZWxmLkdldFRoZW1lRGljdCgndXNlcicsIHRoZW1lKQorICAgICAgICBmb3JlID0gdGhlbWVEaWN0W2VsZW1lbnQgKyAnLWZvcmVncm91bmQnXQorICAgICAgICBpZiBlbGVtZW50ID09ICdjdXJzb3InOiAgIyBUaGVyZSBpcyBubyBjb25maWcgdmFsdWUgZm9yIGN1cnNvciBiZworICAgICAgICAgICAgYmFjayA9IHRoZW1lRGljdFsnbm9ybWFsLWJhY2tncm91bmQnXQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYmFjaz10aGVtZURpY3RbZWxlbWVudCsnLWJhY2tncm91bmQnXQotICAgICAgICBoaWdobGlnaHQ9eyJmb3JlZ3JvdW5kIjogZm9yZSwiYmFja2dyb3VuZCI6IGJhY2t9Ci0gICAgICAgIGlmIG5vdCBmZ0JnOiAjcmV0dXJuIGRpY3Qgb2YgYm90aCBjb2xvdXJzCisgICAgICAgICAgICBiYWNrID0gdGhlbWVEaWN0W2VsZW1lbnQgKyAnLWJhY2tncm91bmQnXQorICAgICAgICBoaWdobGlnaHQgPSB7ImZvcmVncm91bmQiOiBmb3JlLCAiYmFja2dyb3VuZCI6IGJhY2t9CisgICAgICAgIGlmIG5vdCBmZ0JnOiAgIyBSZXR1cm4gZGljdCBvZiBib3RoIGNvbG9ycwogICAgICAgICAgICAgcmV0dXJuIGhpZ2hsaWdodAotICAgICAgICBlbHNlOiAjcmV0dXJuIHNwZWNpZmllZCBjb2xvdXIgb25seQorICAgICAgICBlbHNlOiAgIyBSZXR1cm4gc3BlY2lmaWVkIGNvbG9yIG9ubHkKICAgICAgICAgICAgIGlmIGZnQmcgPT0gJ2ZnJzoKICAgICAgICAgICAgICAgICByZXR1cm4gaGlnaGxpZ2h0WyJmb3JlZ3JvdW5kIl0KICAgICAgICAgICAgIGlmIGZnQmcgPT0gJ2JnJzoKQEAgLTMyMCwyNiArMzA3LDI2IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlIEludmFsaWRGZ0JnKCdJbnZhbGlkIGZnQmcgc3BlY2lmaWVkJykKIAotICAgIGRlZiBHZXRUaGVtZURpY3Qoc2VsZix0eXBlLHRoZW1lTmFtZSk6Ci0gICAgICAgICIiIgorICAgIGRlZiBHZXRUaGVtZURpY3Qoc2VsZiwgdHlwZSwgdGhlbWVOYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHtvcHRpb246dmFsdWV9IGRpY3QgZm9yIGVsZW1lbnRzIGluIHRoZW1lTmFtZS4KKwogICAgICAgICB0eXBlIC0gc3RyaW5nLCAnZGVmYXVsdCcgb3IgJ3VzZXInIHRoZW1lIHR5cGUKICAgICAgICAgdGhlbWVOYW1lIC0gc3RyaW5nLCB0aGVtZSBuYW1lCi0gICAgICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IHdoaWNoIGhvbGRzIHtvcHRpb246dmFsdWV9IGZvciBlYWNoIGVsZW1lbnQKLSAgICAgICAgaW4gdGhlIHNwZWNpZmllZCB0aGVtZS4gVmFsdWVzIGFyZSBsb2FkZWQgb3ZlciBhIHNldCBvZiB1bHRpbWF0ZSBsYXN0Ci0gICAgICAgIGZhbGxiYWNrIGRlZmF1bHRzIHRvIGd1YXJhbnRlZSB0aGF0IGFsbCB0aGVtZSBlbGVtZW50cyBhcmUgcHJlc2VudCBpbgotICAgICAgICBhIG5ld2x5IGNyZWF0ZWQgdGhlbWUuCisgICAgICAgIFZhbHVlcyBhcmUgbG9hZGVkIG92ZXIgdWx0aW1hdGUgZmFsbGJhY2sgZGVmYXVsdHMgdG8gZ3VhcmFudGVlCisgICAgICAgIHRoYXQgYWxsIHRoZW1lIGVsZW1lbnRzIGFyZSBwcmVzZW50IGluIGEgbmV3bHkgY3JlYXRlZCB0aGVtZS4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHR5cGUgPT0gJ3VzZXInOgotICAgICAgICAgICAgY2ZnUGFyc2VyPXNlbGYudXNlckNmZ1snaGlnaGxpZ2h0J10KKyAgICAgICAgICAgIGNmZ1BhcnNlciA9IHNlbGYudXNlckNmZ1snaGlnaGxpZ2h0J10KICAgICAgICAgZWxpZiB0eXBlID09ICdkZWZhdWx0JzoKLSAgICAgICAgICAgIGNmZ1BhcnNlcj1zZWxmLmRlZmF1bHRDZmdbJ2hpZ2hsaWdodCddCisgICAgICAgICAgICBjZmdQYXJzZXIgPSBzZWxmLmRlZmF1bHRDZmdbJ2hpZ2hsaWdodCddCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBJbnZhbGlkVGhlbWUoJ0ludmFsaWQgdGhlbWUgdHlwZSBzcGVjaWZpZWQnKQotICAgICAgICAjZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCB2YWx1ZXMgYXJlIHByb3ZkZWQgZm9yIGVhY2ggdGhlbWUgZWxlbWVudAotICAgICAgICAjKGFwYXJ0IGZyb20gY3Vyc29yKSBldmVuIHRob3VnaCBhbGwgdGhlc2UgdmFsdWVzIGFyZSBub3QgeWV0IHVzZWQKLSAgICAgICAgI2J5IGlkbGUsIHRvIGFsbG93IGZvciB0aGVpciB1c2UgaW4gdGhlIGZ1dHVyZS4gRGVmYXVsdCB2YWx1ZXMgYXJlCi0gICAgICAgICNnZW5lcmFsbHkgYmxhY2sgYW5kIHdoaXRlLgotICAgICAgICB0aGVtZT17ICdub3JtYWwtZm9yZWdyb3VuZCc6JyMwMDAwMDAnLAorICAgICAgICAjIFByb3ZpZGUgZm9yZWdyb3VuZCBhbmQgYmFja2dyb3VuZCBjb2xvcnMgZm9yIGVhY2ggdGhlbWUKKyAgICAgICAgIyBlbGVtZW50IChvdGhlciB0aGFuIGN1cnNvcikgZXZlbiB0aG91Z2ggc29tZSB2YWx1ZXMgYXJlIG5vdAorICAgICAgICAjIHlldCB1c2VkIGJ5IGlkbGUsIHRvIGFsbG93IGZvciB0aGVpciB1c2UgaW4gdGhlIGZ1dHVyZS4KKyAgICAgICAgIyBEZWZhdWx0IHZhbHVlcyBhcmUgZ2VuZXJhbGx5IGJsYWNrIGFuZCB3aGl0ZS4KKyAgICAgICAgIyBUT0RPIGNvcHkgdGhlbWUgZnJvbSBhIGNsYXNzIGF0dHJpYnV0ZS4KKyAgICAgICAgdGhlbWUgPXsnbm9ybWFsLWZvcmVncm91bmQnOicjMDAwMDAwJywKICAgICAgICAgICAgICAgICAnbm9ybWFsLWJhY2tncm91bmQnOicjZmZmZmZmJywKICAgICAgICAgICAgICAgICAna2V5d29yZC1mb3JlZ3JvdW5kJzonIzAwMDAwMCcsCiAgICAgICAgICAgICAgICAgJ2tleXdvcmQtYmFja2dyb3VuZCc6JyNmZmZmZmYnLApAQCAtMzY5LDUyICszNTYsNzQgQEAKICAgICAgICAgICAgICAgICAnY29uc29sZS1mb3JlZ3JvdW5kJzonIzAwMDAwMCcsCiAgICAgICAgICAgICAgICAgJ2NvbnNvbGUtYmFja2dyb3VuZCc6JyNmZmZmZmYnIH0KICAgICAgICAgZm9yIGVsZW1lbnQgaW4gdGhlbWU6Ci0gICAgICAgICAgICBpZiBub3QgY2ZnUGFyc2VyLmhhc19vcHRpb24odGhlbWVOYW1lLGVsZW1lbnQpOgotICAgICAgICAgICAgICAgICN3ZSBhcmUgZ29pbmcgdG8gcmV0dXJuIGEgZGVmYXVsdCwgcHJpbnQgd2FybmluZwotICAgICAgICAgICAgICAgIHdhcm5pbmc9KCdcbiBXYXJuaW5nOiBjb25maWdIYW5kbGVyLnB5IC0gSWRsZUNvbmYuR2V0VGhlbWVEaWN0JworICAgICAgICAgICAgaWYgbm90IGNmZ1BhcnNlci5oYXNfb3B0aW9uKHRoZW1lTmFtZSwgZWxlbWVudCk6CisgICAgICAgICAgICAgICAgIyBQcmludCB3YXJuaW5nIHRoYXQgd2lsbCByZXR1cm4gYSBkZWZhdWx0IGNvbG9yCisgICAgICAgICAgICAgICAgd2FybmluZyA9ICgnXG4gV2FybmluZzogY29uZmlnSGFuZGxlci5JZGxlQ29uZi5HZXRUaGVtZURpY3QnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1cbiBwcm9ibGVtIHJldHJpZXZpbmcgdGhlbWUgZWxlbWVudCAlcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiBmcm9tIHRoZW1lICVyLlxuJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm5pbmcgZGVmYXVsdCB2YWx1ZTogJXJcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm5pbmcgZGVmYXVsdCBjb2xvcjogJXInICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbGVtZW50LCB0aGVtZU5hbWUsIHRoZW1lW2VsZW1lbnRdKSkKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUod2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQod2FybmluZywgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBjb2xvdXI9Y2ZnUGFyc2VyLkdldCh0aGVtZU5hbWUsZWxlbWVudCxkZWZhdWx0PXRoZW1lW2VsZW1lbnRdKQotICAgICAgICAgICAgdGhlbWVbZWxlbWVudF09Y29sb3VyCisgICAgICAgICAgICB0aGVtZVtlbGVtZW50XSA9IGNmZ1BhcnNlci5HZXQoCisgICAgICAgICAgICAgICAgICAgIHRoZW1lTmFtZSwgZWxlbWVudCwgZGVmYXVsdD10aGVtZVtlbGVtZW50XSkKICAgICAgICAgcmV0dXJuIHRoZW1lCiAKICAgICBkZWYgQ3VycmVudFRoZW1lKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGV4dCBjb2xvciB0aGVtZS4KKworICAgICAgICBpZGxlbGliLmNvbmZpZy1tYWluLmRlZiBpbmNsdWRlcyB0aGlzIHNlY3Rpb24KKyAgICAgICAgW1RoZW1lXQorICAgICAgICBkZWZhdWx0PSAxCisgICAgICAgIG5hbWU9IElETEUgQ2xhc3NpYworICAgICAgICBuYW1lMj0KKyAgICAgICAgIyBuYW1lMiBzZXQgaW4gdXNlciBjb25maWctbWFpbi5jZmcgZm9yIHRoZW1lcyBhZGRlZCBhZnRlciAyMDE1IE9jdCAxCisKKyAgICAgICAgSXRlbSBuYW1lMiBpcyBuZWVkZWQgYmVjYXVzZSBzZXR0aW5nIG5hbWUgdG8gYSBuZXcgYnVpbHRpbgorICAgICAgICBjYXVzZXMgb2xkZXIgSURMRXMgdG8gZGlzcGxheSBtdWx0aXBsZSBlcnJvciBtZXNzYWdlcyBvciBxdWl0LgorICAgICAgICBTZWUgaHR0cHM6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTMxMy4KKyAgICAgICAgV2hlbiBkZWZhdWx0ID0gVHJ1ZSwgbmFtZTIgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIG5hbWUsCisgICAgICAgIHdoaWxlIG9sZGVyIElETEVzIHdpbGwganVzdCB1c2UgbmFtZS4KICAgICAgICAgIiIiCi0gICAgICAgIFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGhlbWUKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLkdldE9wdGlvbignbWFpbicsJ1RoZW1lJywnbmFtZScsZGVmYXVsdD0nJykKKyAgICAgICAgZGVmYXVsdCA9IHNlbGYuR2V0T3B0aW9uKCdtYWluJywgJ1RoZW1lJywgJ2RlZmF1bHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0nYm9vbCcsIGRlZmF1bHQ9VHJ1ZSkKKyAgICAgICAgaWYgZGVmYXVsdDoKKyAgICAgICAgICAgIHRoZW1lID0gc2VsZi5HZXRPcHRpb24oJ21haW4nLCAnVGhlbWUnLCAnbmFtZTInLCBkZWZhdWx0PScnKQorICAgICAgICBpZiBkZWZhdWx0IGFuZCBub3QgdGhlbWUgb3Igbm90IGRlZmF1bHQ6CisgICAgICAgICAgICB0aGVtZSA9IHNlbGYuR2V0T3B0aW9uKCdtYWluJywgJ1RoZW1lJywgJ25hbWUnLCBkZWZhdWx0PScnKQorICAgICAgICBzb3VyY2UgPSBzZWxmLmRlZmF1bHRDZmcgaWYgZGVmYXVsdCBlbHNlIHNlbGYudXNlckNmZworICAgICAgICBpZiBzb3VyY2VbJ2hpZ2hsaWdodCddLmhhc19zZWN0aW9uKHRoZW1lKToKKyAgICAgICAgICAgIHJldHVybiB0aGVtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJJRExFIENsYXNzaWMiCiAKICAgICBkZWYgQ3VycmVudEtleXMoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGtleSBzZXQKLSAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBzZWxmLkdldE9wdGlvbignbWFpbicsJ0tleXMnLCduYW1lJyxkZWZhdWx0PScnKQorICAgICAgICAiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIGtleSBzZXQuIgorICAgICAgICByZXR1cm4gc2VsZi5HZXRPcHRpb24oJ21haW4nLCAnS2V5cycsICduYW1lJywgZGVmYXVsdD0nJykKIAogICAgIGRlZiBHZXRFeHRlbnNpb25zKHNlbGYsIGFjdGl2ZV9vbmx5PVRydWUsIGVkaXRvcl9vbmx5PUZhbHNlLCBzaGVsbF9vbmx5PUZhbHNlKToKKyAgICAgICAgIiIiUmV0dXJuIGV4dGVuc2lvbnMgaW4gZGVmYXVsdCBhbmQgdXNlciBjb25maWctZXh0ZW5zaW9ucyBmaWxlcy4KKworICAgICAgICBJZiBhY3RpdmVfb25seSBUcnVlLCBvbmx5IHJldHVybiBhY3RpdmUgKGVuYWJsZWQpIGV4dGVuc2lvbnMKKyAgICAgICAgYW5kIG9wdGlvbmFsbHkgb25seSBlZGl0b3Igb3Igc2hlbGwgZXh0ZW5zaW9ucy4KKyAgICAgICAgSWYgYWN0aXZlX29ubHkgRmFsc2UsIHJldHVybiBhbGwgZXh0ZW5zaW9ucy4KICAgICAgICAgIiIiCi0gICAgICAgIEdldHMgYSBsaXN0IG9mIGFsbCBpZGxlIGV4dGVuc2lvbnMgZGVjbGFyZWQgaW4gdGhlIGNvbmZpZyBmaWxlcy4KLSAgICAgICAgYWN0aXZlX29ubHkgLSBib29sZWFuLCBpZiB0cnVlIG9ubHkgcmV0dXJuIGFjdGl2ZSAoZW5hYmxlZCkgZXh0ZW5zaW9ucwotICAgICAgICAiIiIKLSAgICAgICAgZXh0bnM9c2VsZi5SZW1vdmVLZXlCaW5kTmFtZXMoCi0gICAgICAgICAgICAgICAgc2VsZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsJ2V4dGVuc2lvbnMnKSkKLSAgICAgICAgdXNlckV4dG5zPXNlbGYuUmVtb3ZlS2V5QmluZE5hbWVzKAotICAgICAgICAgICAgICAgIHNlbGYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCdleHRlbnNpb25zJykpCisgICAgICAgIGV4dG5zID0gc2VsZi5SZW1vdmVLZXlCaW5kTmFtZXMoCisgICAgICAgICAgICAgICAgc2VsZi5HZXRTZWN0aW9uTGlzdCgnZGVmYXVsdCcsICdleHRlbnNpb25zJykpCisgICAgICAgIHVzZXJFeHRucyA9IHNlbGYuUmVtb3ZlS2V5QmluZE5hbWVzKAorICAgICAgICAgICAgICAgIHNlbGYuR2V0U2VjdGlvbkxpc3QoJ3VzZXInLCAnZXh0ZW5zaW9ucycpKQogICAgICAgICBmb3IgZXh0biBpbiB1c2VyRXh0bnM6CiAgICAgICAgICAgICBpZiBleHRuIG5vdCBpbiBleHRuczogI3VzZXIgaGFzIGFkZGVkIG93biBleHRlbnNpb24KICAgICAgICAgICAgICAgICBleHRucy5hcHBlbmQoZXh0bikKICAgICAgICAgaWYgYWN0aXZlX29ubHk6Ci0gICAgICAgICAgICBhY3RpdmVFeHRucz1bXQorICAgICAgICAgICAgYWN0aXZlRXh0bnMgPSBbXQogICAgICAgICAgICAgZm9yIGV4dG4gaW4gZXh0bnM6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5HZXRPcHRpb24oJ2V4dGVuc2lvbnMnLCBleHRuLCAnZW5hYmxlJywgZGVmYXVsdD1UcnVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9J2Jvb2wnKToKICAgICAgICAgICAgICAgICAgICAgI3RoZSBleHRlbnNpb24gaXMgZW5hYmxlZAotICAgICAgICAgICAgICAgICAgICBpZiBlZGl0b3Jfb25seSBvciBzaGVsbF9vbmx5OgorICAgICAgICAgICAgICAgICAgICBpZiBlZGl0b3Jfb25seSBvciBzaGVsbF9vbmx5OiAgIyBUT0RPIGlmIGJvdGgsIGNvbnRyYWRpY3RvcnkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGVkaXRvcl9vbmx5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbiA9ICJlbmFibGVfZWRpdG9yIgogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKQEAgLTQyOSwxMDYgKzQzOCwxMTAgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBleHRucwogCi0gICAgZGVmIFJlbW92ZUtleUJpbmROYW1lcyhzZWxmLGV4dG5OYW1lTGlzdCk6Ci0gICAgICAgICNnZXQgcmlkIG9mIGtleWJpbmRpbmcgc2VjdGlvbiBuYW1lcwotICAgICAgICBuYW1lcz1leHRuTmFtZUxpc3QKLSAgICAgICAga2JOYW1lSW5kaWNpZXM9W10KKyAgICBkZWYgUmVtb3ZlS2V5QmluZE5hbWVzKHNlbGYsIGV4dG5OYW1lTGlzdCk6CisgICAgICAgICJSZXR1cm4gZXh0bk5hbWVMaXN0IHdpdGgga2V5YmluZGluZyBzZWN0aW9uIG5hbWVzIHJlbW92ZWQuIgorICAgICAgICAjIFRPRE8gRWFzaWVyIHRvIHJldHVybiBmaWx0ZXJlZCBjb3B5IHdpdGggbGlzdCBjb21wCisgICAgICAgIG5hbWVzID0gZXh0bk5hbWVMaXN0CisgICAgICAgIGtiTmFtZUluZGljaWVzID0gW10KICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCgnX2JpbmRpbmdzJywgJ19jZmdCaW5kaW5ncycpKToKICAgICAgICAgICAgICAgICBrYk5hbWVJbmRpY2llcy5hcHBlbmQobmFtZXMuaW5kZXgobmFtZSkpCi0gICAgICAgIGtiTmFtZUluZGljaWVzLnNvcnQoKQotICAgICAgICBrYk5hbWVJbmRpY2llcy5yZXZlcnNlKCkKKyAgICAgICAga2JOYW1lSW5kaWNpZXMuc29ydChyZXZlcnNlPVRydWUpCiAgICAgICAgIGZvciBpbmRleCBpbiBrYk5hbWVJbmRpY2llczogI2RlbGV0ZSBlYWNoIGtleWJpbmRpbmcgc2VjdGlvbiBuYW1lCiAgICAgICAgICAgICBkZWwobmFtZXNbaW5kZXhdKQogICAgICAgICByZXR1cm4gbmFtZXMKIAotICAgIGRlZiBHZXRFeHRuTmFtZUZvckV2ZW50KHNlbGYsdmlydHVhbEV2ZW50KToKKyAgICBkZWYgR2V0RXh0bk5hbWVGb3JFdmVudChzZWxmLCB2aXJ0dWFsRXZlbnQpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiBiaW5kaW5nIHZpcnR1YWxFdmVudCwgb3IgTm9uZS4KKworICAgICAgICB2aXJ0dWFsRXZlbnQgLSBzdHJpbmcsIG5hbWUgb2YgdGhlIHZpcnR1YWwgZXZlbnQgdG8gdGVzdCBmb3IsCisgICAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgdGhlIGVuY2xvc2luZyAnPDwgPj4nCiAgICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBleHRlbnNpb24gdGhhdCB2aXJ0dWFsRXZlbnQgaXMgYm91bmQgaW4sIG9yCi0gICAgICAgIE5vbmUgaWYgbm90IGJvdW5kIGluIGFueSBleHRlbnNpb24uCi0gICAgICAgIHZpcnR1YWxFdmVudCAtIHN0cmluZywgbmFtZSBvZiB0aGUgdmlydHVhbCBldmVudCB0byB0ZXN0IGZvciwgd2l0aG91dAotICAgICAgICAgICAgICAgICAgICAgICB0aGUgZW5jbG9zaW5nICc8PCA+PicKLSAgICAgICAgIiIiCi0gICAgICAgIGV4dE5hbWU9Tm9uZQotICAgICAgICB2RXZlbnQ9Jzw8Jyt2aXJ0dWFsRXZlbnQrJz4+JworICAgICAgICBleHROYW1lID0gTm9uZQorICAgICAgICB2RXZlbnQgPSAnPDwnICsgdmlydHVhbEV2ZW50ICsgJz4+JwogICAgICAgICBmb3IgZXh0biBpbiBzZWxmLkdldEV4dGVuc2lvbnMoYWN0aXZlX29ubHk9MCk6CiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4gc2VsZi5HZXRFeHRlbnNpb25LZXlzKGV4dG4pOgogICAgICAgICAgICAgICAgIGlmIGV2ZW50ID09IHZFdmVudDoKLSAgICAgICAgICAgICAgICAgICAgZXh0TmFtZT1leHRuCisgICAgICAgICAgICAgICAgICAgIGV4dE5hbWUgPSBleHRuICAjIFRPRE8gcmV0dXJuIGhlcmU/CiAgICAgICAgIHJldHVybiBleHROYW1lCiAKLSAgICBkZWYgR2V0RXh0ZW5zaW9uS2V5cyhzZWxmLGV4dGVuc2lvbk5hbWUpOgorICAgIGRlZiBHZXRFeHRlbnNpb25LZXlzKHNlbGYsIGV4dGVuc2lvbk5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gZGljdDoge2NvbmZpZ3VyYWJsZSBleHRlbnNpb25OYW1lIGV2ZW50IDogYWN0aXZlIGtleWJpbmRpbmd9LgorCisgICAgICAgIEV2ZW50cyBjb21lIGZyb20gZGVmYXVsdCBjb25maWcgZXh0ZW5zaW9uX2NmZ0JpbmRpbmdzIHNlY3Rpb24uCisgICAgICAgIEtleWJpbmRpbmdzIGNvbWUgZnJvbSBHZXRDdXJyZW50S2V5U2V0KCkgYWN0aXZlIGtleSBkaWN0LAorICAgICAgICB3aGVyZSBwcmV2aW91c2x5IHVzZWQgYmluZGluZ3MgYXJlIGRpc2FibGVkLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgdGhlIGNvbmZpZ3VyYWJsZSBrZXliaW5kaW5ncyBmb3IgYSBwYXJ0aWN1bGFyCi0gICAgICAgIGV4dGVuc2lvbixhcyB0aGV5IGV4aXN0IGluIHRoZSBkaWN0aW9uYXJ5IHJldHVybmVkIGJ5IEdldEN1cnJlbnRLZXlTZXQ7Ci0gICAgICAgIHRoYXQgaXMsIHdoZXJlIHByZXZpb3VzbHkgdXNlZCBiaW5kaW5ncyBhcmUgZGlzYWJsZWQuCi0gICAgICAgICIiIgotICAgICAgICBrZXlzTmFtZT1leHRlbnNpb25OYW1lKydfY2ZnQmluZGluZ3MnCi0gICAgICAgIGFjdGl2ZUtleXM9c2VsZi5HZXRDdXJyZW50S2V5U2V0KCkKLSAgICAgICAgZXh0S2V5cz17fQorICAgICAgICBrZXlzTmFtZSA9IGV4dGVuc2lvbk5hbWUgKyAnX2NmZ0JpbmRpbmdzJworICAgICAgICBhY3RpdmVLZXlzID0gc2VsZi5HZXRDdXJyZW50S2V5U2V0KCkKKyAgICAgICAgZXh0S2V5cyA9IHt9CiAgICAgICAgIGlmIHNlbGYuZGVmYXVsdENmZ1snZXh0ZW5zaW9ucyddLmhhc19zZWN0aW9uKGtleXNOYW1lKToKLSAgICAgICAgICAgIGV2ZW50TmFtZXM9c2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uR2V0T3B0aW9uTGlzdChrZXlzTmFtZSkKKyAgICAgICAgICAgIGV2ZW50TmFtZXMgPSBzZWxmLmRlZmF1bHRDZmdbJ2V4dGVuc2lvbnMnXS5HZXRPcHRpb25MaXN0KGtleXNOYW1lKQogICAgICAgICAgICAgZm9yIGV2ZW50TmFtZSBpbiBldmVudE5hbWVzOgotICAgICAgICAgICAgICAgIGV2ZW50PSc8PCcrZXZlbnROYW1lKyc+PicKLSAgICAgICAgICAgICAgICBiaW5kaW5nPWFjdGl2ZUtleXNbZXZlbnRdCi0gICAgICAgICAgICAgICAgZXh0S2V5c1tldmVudF09YmluZGluZworICAgICAgICAgICAgICAgIGV2ZW50ID0gJzw8JyArIGV2ZW50TmFtZSArICc+PicKKyAgICAgICAgICAgICAgICBiaW5kaW5nID0gYWN0aXZlS2V5c1tldmVudF0KKyAgICAgICAgICAgICAgICBleHRLZXlzW2V2ZW50XSA9IGJpbmRpbmcKICAgICAgICAgcmV0dXJuIGV4dEtleXMKIAogICAgIGRlZiBfX0dldFJhd0V4dGVuc2lvbktleXMoc2VsZixleHRlbnNpb25OYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIGRpY3Qge2NvbmZpZ3VyYWJsZSBleHRlbnNpb25OYW1lIGV2ZW50IDoga2V5YmluZGluZyBsaXN0fS4KKworICAgICAgICBFdmVudHMgY29tZSBmcm9tIGRlZmF1bHQgY29uZmlnIGV4dGVuc2lvbl9jZmdCaW5kaW5ncyBzZWN0aW9uLgorICAgICAgICBLZXliaW5kaW5ncyBsaXN0IGNvbWUgZnJvbSB0aGUgc3BsaXR0aW5nIG9mIEdldE9wdGlvbiwgd2hpY2gKKyAgICAgICAgdHJpZXMgdXNlciBjb25maWcgYmVmb3JlIGRlZmF1bHQgY29uZmlnLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyBhIGRpY3Rpb25hcnkgb2YgdGhlIGNvbmZpZ3VyYWJsZSBrZXliaW5kaW5ncyBmb3IgYSBwYXJ0aWN1bGFyCi0gICAgICAgIGV4dGVuc2lvbiwgYXMgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcywgb3IgYW4gZW1wdHkgZGljdGlvbmFyeQotICAgICAgICBpZiBubyBiaW5kaW5ncyBhcmUgZm91bmQKLSAgICAgICAgIiIiCi0gICAgICAgIGtleXNOYW1lPWV4dGVuc2lvbk5hbWUrJ19jZmdCaW5kaW5ncycKLSAgICAgICAgZXh0S2V5cz17fQorICAgICAgICBrZXlzTmFtZSA9IGV4dGVuc2lvbk5hbWUrJ19jZmdCaW5kaW5ncycKKyAgICAgICAgZXh0S2V5cyA9IHt9CiAgICAgICAgIGlmIHNlbGYuZGVmYXVsdENmZ1snZXh0ZW5zaW9ucyddLmhhc19zZWN0aW9uKGtleXNOYW1lKToKLSAgICAgICAgICAgIGV2ZW50TmFtZXM9c2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uR2V0T3B0aW9uTGlzdChrZXlzTmFtZSkKKyAgICAgICAgICAgIGV2ZW50TmFtZXMgPSBzZWxmLmRlZmF1bHRDZmdbJ2V4dGVuc2lvbnMnXS5HZXRPcHRpb25MaXN0KGtleXNOYW1lKQogICAgICAgICAgICAgZm9yIGV2ZW50TmFtZSBpbiBldmVudE5hbWVzOgotICAgICAgICAgICAgICAgIGJpbmRpbmc9c2VsZi5HZXRPcHRpb24oJ2V4dGVuc2lvbnMnLGtleXNOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lLGRlZmF1bHQ9JycpLnNwbGl0KCkKLSAgICAgICAgICAgICAgICBldmVudD0nPDwnK2V2ZW50TmFtZSsnPj4nCi0gICAgICAgICAgICAgICAgZXh0S2V5c1tldmVudF09YmluZGluZworICAgICAgICAgICAgICAgIGJpbmRpbmcgPSBzZWxmLkdldE9wdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHRlbnNpb25zJywga2V5c05hbWUsIGV2ZW50TmFtZSwgZGVmYXVsdD0nJykuc3BsaXQoKQorICAgICAgICAgICAgICAgIGV2ZW50ID0gJzw8JyArIGV2ZW50TmFtZSArICc+PicKKyAgICAgICAgICAgICAgICBleHRLZXlzW2V2ZW50XSA9IGJpbmRpbmcKICAgICAgICAgcmV0dXJuIGV4dEtleXMKIAotICAgIGRlZiBHZXRFeHRlbnNpb25CaW5kaW5ncyhzZWxmLGV4dGVuc2lvbk5hbWUpOgorICAgIGRlZiBHZXRFeHRlbnNpb25CaW5kaW5ncyhzZWxmLCBleHRlbnNpb25OYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIGRpY3Qge2V4dGVuc2lvbk5hbWUgZXZlbnQgOiBhY3RpdmUgb3IgZGVmaW5lZCBrZXliaW5kaW5nfS4KKworICAgICAgICBBdWdtZW50IHNlbGYuR2V0RXh0ZW5zaW9uS2V5cyhleHRlbnNpb25OYW1lKSB3aXRoIG1hcHBpbmcgb2Ygbm9uLQorICAgICAgICBjb25maWd1cmFibGUgZXZlbnRzIChmcm9tIGRlZmF1bHQgY29uZmlnKSB0byBHZXRPcHRpb24gc3BsaXRzLAorICAgICAgICBhcyBpbiBzZWxmLl9fR2V0UmF3RXh0ZW5zaW9uS2V5cy4KICAgICAgICAgIiIiCi0gICAgICAgIFJldHVybnMgYSBkaWN0aW9uYXJ5IG9mIGFsbCB0aGUgZXZlbnQgYmluZGluZ3MgZm9yIGEgcGFydGljdWxhcgotICAgICAgICBleHRlbnNpb24uIFRoZSBjb25maWd1cmFibGUga2V5YmluZGluZ3MgYXJlIHJldHVybmVkIGFzIHRoZXkgZXhpc3QgaW4KLSAgICAgICAgdGhlIGRpY3Rpb25hcnkgcmV0dXJuZWQgYnkgR2V0Q3VycmVudEtleVNldDsgdGhhdCBpcywgd2hlcmUgcmUtdXNlZAotICAgICAgICBrZXliaW5kaW5ncyBhcmUgZGlzYWJsZWQuCi0gICAgICAgICIiIgotICAgICAgICBiaW5kc05hbWU9ZXh0ZW5zaW9uTmFtZSsnX2JpbmRpbmdzJwotICAgICAgICBleHRCaW5kcz1zZWxmLkdldEV4dGVuc2lvbktleXMoZXh0ZW5zaW9uTmFtZSkKKyAgICAgICAgYmluZHNOYW1lID0gZXh0ZW5zaW9uTmFtZSArICdfYmluZGluZ3MnCisgICAgICAgIGV4dEJpbmRzID0gc2VsZi5HZXRFeHRlbnNpb25LZXlzKGV4dGVuc2lvbk5hbWUpCiAgICAgICAgICNhZGQgdGhlIG5vbi1jb25maWd1cmFibGUgYmluZGluZ3MKICAgICAgICAgaWYgc2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uaGFzX3NlY3Rpb24oYmluZHNOYW1lKToKLSAgICAgICAgICAgIGV2ZW50TmFtZXM9c2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uR2V0T3B0aW9uTGlzdChiaW5kc05hbWUpCisgICAgICAgICAgICBldmVudE5hbWVzID0gc2VsZi5kZWZhdWx0Q2ZnWydleHRlbnNpb25zJ10uR2V0T3B0aW9uTGlzdChiaW5kc05hbWUpCiAgICAgICAgICAgICBmb3IgZXZlbnROYW1lIGluIGV2ZW50TmFtZXM6Ci0gICAgICAgICAgICAgICAgYmluZGluZz1zZWxmLkdldE9wdGlvbignZXh0ZW5zaW9ucycsYmluZHNOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnROYW1lLGRlZmF1bHQ9JycpLnNwbGl0KCkKLSAgICAgICAgICAgICAgICBldmVudD0nPDwnK2V2ZW50TmFtZSsnPj4nCi0gICAgICAgICAgICAgICAgZXh0QmluZHNbZXZlbnRdPWJpbmRpbmcKKyAgICAgICAgICAgICAgICBiaW5kaW5nID0gc2VsZi5HZXRPcHRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAnZXh0ZW5zaW9ucycsIGJpbmRzTmFtZSwgZXZlbnROYW1lLCBkZWZhdWx0PScnKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgZXZlbnQgPSAnPDwnICsgZXZlbnROYW1lICsgJz4+JworICAgICAgICAgICAgICAgIGV4dEJpbmRzW2V2ZW50XSA9IGJpbmRpbmcKIAogICAgICAgICByZXR1cm4gZXh0QmluZHMKIAogICAgIGRlZiBHZXRLZXlCaW5kaW5nKHNlbGYsIGtleVNldE5hbWUsIGV2ZW50U3RyKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBrZXliaW5kaW5nIGxpc3QgZm9yIGtleVNldE5hbWUgZXZlbnRTdHIuCisKKyAgICAgICAga2V5U2V0TmFtZSAtIG5hbWUgb2Yga2V5IGJpbmRpbmcgc2V0IChjb25maWcta2V5cyBzZWN0aW9uKS4KKyAgICAgICAgZXZlbnRTdHIgLSB2aXJ0dWFsIGV2ZW50LCBpbmNsdWRpbmcgYnJhY2tldHMsIGFzIGluICc8PGV2ZW50Pj4nLgogICAgICAgICAiIiIKLSAgICAgICAgcmV0dXJucyB0aGUga2V5YmluZGluZyBmb3IgYSBzcGVjaWZpYyBldmVudC4KLSAgICAgICAga2V5U2V0TmFtZSAtIHN0cmluZywgbmFtZSBvZiBrZXkgYmluZGluZyBzZXQKLSAgICAgICAgZXZlbnRTdHIgLSBzdHJpbmcsIHRoZSB2aXJ0dWFsIGV2ZW50IHdlIHdhbnQgdGhlIGJpbmRpbmcgZm9yLAotICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLCBlZy4gJzw8ZXZlbnQ+PicKLSAgICAgICAgIiIiCi0gICAgICAgIGV2ZW50TmFtZT1ldmVudFN0clsyOi0yXSAjdHJpbSBvZmYgdGhlIGFuZ2xlIGJyYWNrZXRzCi0gICAgICAgIGJpbmRpbmc9c2VsZi5HZXRPcHRpb24oJ2tleXMnLGtleVNldE5hbWUsZXZlbnROYW1lLGRlZmF1bHQ9JycpLnNwbGl0KCkKKyAgICAgICAgZXZlbnROYW1lID0gZXZlbnRTdHJbMjotMl0gI3RyaW0gb2ZmIHRoZSBhbmdsZSBicmFja2V0cworICAgICAgICBiaW5kaW5nID0gc2VsZi5HZXRPcHRpb24oJ2tleXMnLCBrZXlTZXROYW1lLCBldmVudE5hbWUsIGRlZmF1bHQ9JycpLnNwbGl0KCkKICAgICAgICAgcmV0dXJuIGJpbmRpbmcKIAogICAgIGRlZiBHZXRDdXJyZW50S2V5U2V0KHNlbGYpOgorICAgICAgICAiUmV0dXJuIEN1cnJlbnRLZXlzIHdpdGggJ2RhcndpbicgbW9kaWZpY2F0aW9ucy4iCiAgICAgICAgIHJlc3VsdCA9IHNlbGYuR2V0S2V5U2V0KHNlbGYuQ3VycmVudEtleXMoKSkKIAotICAgICAgICBpZiBtYWNvc3hTdXBwb3J0LnJ1bm5pbmdBc09TWEFwcCgpOgotICAgICAgICAgICAgIyBXZSdyZSB1c2luZyBBcXVhVGssIHJlcGxhY2UgYWxsIGtleWJpbmdpbmdzIHRoYXQgdXNlIHRoZQotICAgICAgICAgICAgIyBBbHQga2V5IGJ5IG9uZXMgdGhhdCB1c2UgdGhlIE9wdGlvbiBrZXkgYmVjYXVzZSB0aGUgZm9ybWVyCi0gICAgICAgICAgICAjIGRvbid0IHdvcmsgcmVsaWFibHkuCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKKyAgICAgICAgICAgICMgT1MgWCBUayB2YXJpYW50cyBkbyBub3Qgc3VwcG9ydCB0aGUgIkFsdCIga2V5Ym9hcmQgbW9kaWZpZXIuCisgICAgICAgICAgICAjIFNvIHJlcGxhY2UgYWxsIGtleWJpbmdpbmdzIHRoYXQgdXNlICJBbHQiIHdpdGggb25lcyB0aGF0CisgICAgICAgICAgICAjIHVzZSB0aGUgIk9wdGlvbiIga2V5Ym9hcmQgbW9kaWZpZXIuCisgICAgICAgICAgICAjIFRPRE8gKE5lZD8pOiB0aGUgIk9wdGlvbiIgbW9kaWZpZXIgZG9lcyBub3Qgd29yayBwcm9wZXJseSBmb3IKKyAgICAgICAgICAgICMgICAgICAgIENvY29hIFRrIGFuZCBYUXVhcnR6IFRrIHNvIHdlIHNob3VsZCBub3QgdXNlIGl0CisgICAgICAgICAgICAjICAgICAgICBpbiBkZWZhdWx0IE9TIFggS2V5U2V0cy4KICAgICAgICAgICAgIGZvciBrLCB2IGluIHJlc3VsdC5pdGVtcygpOgogICAgICAgICAgICAgICAgIHYyID0gWyB4LnJlcGxhY2UoJzxBbHQtJywgJzxPcHRpb24tJykgZm9yIHggaW4gdiBdCiAgICAgICAgICAgICAgICAgaWYgdiAhPSB2MjoKQEAgLTUzNiw0MCArNTQ5LDQzIEBACiAKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIEdldEtleVNldChzZWxmLGtleVNldE5hbWUpOgorICAgIGRlZiBHZXRLZXlTZXQoc2VsZiwga2V5U2V0TmFtZSk6CisgICAgICAgICIiIlJldHVybiBldmVudC1rZXkgZGljdCBmb3Iga2V5U2V0TmFtZSBjb3JlIHBsdXMgYWN0aXZlIGV4dGVuc2lvbnMuCisKKyAgICAgICAgSWYgYSBiaW5kaW5nIGRlZmluZWQgaW4gYW4gZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gdXNlLCB0aGUKKyAgICAgICAgZXh0ZW5zaW9uIGJpbmRpbmcgaXMgZGlzYWJsZWQgYnkgYmVpbmcgc2V0IHRvICcnCiAgICAgICAgICIiIgotICAgICAgICBSZXR1cm5zIGEgZGljdGlvbmFyeSBvZjogYWxsIHJlcXVlc3RlZCBjb3JlIGtleWJpbmRpbmdzLCBwbHVzIHRoZQotICAgICAgICBrZXliaW5kaW5ncyBmb3IgYWxsIGN1cnJlbnRseSBhY3RpdmUgZXh0ZW5zaW9ucy4gSWYgYSBiaW5kaW5nIGRlZmluZWQKLSAgICAgICAgaW4gYW4gZXh0ZW5zaW9uIGlzIGFscmVhZHkgaW4gdXNlLCB0aGF0IGJpbmRpbmcgaXMgZGlzYWJsZWQuCi0gICAgICAgICIiIgotICAgICAgICBrZXlTZXQ9c2VsZi5HZXRDb3JlS2V5cyhrZXlTZXROYW1lKQotICAgICAgICBhY3RpdmVFeHRucz1zZWxmLkdldEV4dGVuc2lvbnMoYWN0aXZlX29ubHk9MSkKKyAgICAgICAga2V5U2V0ID0gc2VsZi5HZXRDb3JlS2V5cyhrZXlTZXROYW1lKQorICAgICAgICBhY3RpdmVFeHRucyA9IHNlbGYuR2V0RXh0ZW5zaW9ucyhhY3RpdmVfb25seT0xKQogICAgICAgICBmb3IgZXh0biBpbiBhY3RpdmVFeHRuczoKLSAgICAgICAgICAgIGV4dEtleXM9c2VsZi5fX0dldFJhd0V4dGVuc2lvbktleXMoZXh0bikKKyAgICAgICAgICAgIGV4dEtleXMgPSBzZWxmLl9fR2V0UmF3RXh0ZW5zaW9uS2V5cyhleHRuKQogICAgICAgICAgICAgaWYgZXh0S2V5czogI3RoZSBleHRlbnNpb24gZGVmaW5lcyBrZXliaW5kaW5ncwogICAgICAgICAgICAgICAgIGZvciBldmVudCBpbiBleHRLZXlzOgogICAgICAgICAgICAgICAgICAgICBpZiBleHRLZXlzW2V2ZW50XSBpbiBrZXlTZXQudmFsdWVzKCk6CiAgICAgICAgICAgICAgICAgICAgICAgICAjdGhlIGJpbmRpbmcgaXMgYWxyZWFkeSBpbiB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4dEtleXNbZXZlbnRdPScnICNkaXNhYmxlIHRoaXMgYmluZGluZwotICAgICAgICAgICAgICAgICAgICBrZXlTZXRbZXZlbnRdPWV4dEtleXNbZXZlbnRdICNhZGQgYmluZGluZworICAgICAgICAgICAgICAgICAgICAgICAgZXh0S2V5c1tldmVudF0gPSAnJyAjZGlzYWJsZSB0aGlzIGJpbmRpbmcKKyAgICAgICAgICAgICAgICAgICAga2V5U2V0W2V2ZW50XSA9IGV4dEtleXNbZXZlbnRdICNhZGQgYmluZGluZwogICAgICAgICByZXR1cm4ga2V5U2V0CiAKLSAgICBkZWYgSXNDb3JlQmluZGluZyhzZWxmLHZpcnR1YWxFdmVudCk6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIHZpcnR1YWwgZXZlbnQgaXMgYm91bmQgaW4gdGhlIGNvcmUgaWRsZSBrZXliaW5kaW5ncy4KLSAgICAgICAgdmlydHVhbEV2ZW50IC0gc3RyaW5nLCBuYW1lIG9mIHRoZSB2aXJ0dWFsIGV2ZW50IHRvIHRlc3QgZm9yLCB3aXRob3V0Ci0gICAgICAgICAgICAgICAgICAgICAgIHRoZSBlbmNsb3NpbmcgJzw8ID4+JworICAgIGRlZiBJc0NvcmVCaW5kaW5nKHNlbGYsIHZpcnR1YWxFdmVudCk6CisgICAgICAgICIiIlJldHVybiBUcnVlIGlmIHRoZSB2aXJ0dWFsIGV2ZW50IGlzIG9uZSBvZiB0aGUgY29yZSBpZGxlIGtleSBldmVudHMuCisKKyAgICAgICAgdmlydHVhbEV2ZW50IC0gc3RyaW5nLCBuYW1lIG9mIHRoZSB2aXJ0dWFsIGV2ZW50IHRvIHRlc3QgZm9yLAorICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IHRoZSBlbmNsb3NpbmcgJzw8ID4+JwogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuICgnPDwnK3ZpcnR1YWxFdmVudCsnPj4nKSBpbiBzZWxmLkdldENvcmVLZXlzKCkKIAorIyBUT0RPIG1ha2Uga2V5QmluZGlucyBhIGZpbGUgb3IgY2xhc3MgYXR0cmlidXRlIHVzZWQgZm9yIHRlc3QgYWJvdmUKKyMgYW5kIGNvcGllZCBpbiBmdW5jdGlvbiBiZWxvdworCiAgICAgZGVmIEdldENvcmVLZXlzKHNlbGYsIGtleVNldE5hbWU9Tm9uZSk6Ci0gICAgICAgICIiIgotICAgICAgICByZXR1cm5zIHRoZSByZXF1ZXN0ZWQgc2V0IG9mIGNvcmUga2V5YmluZGluZ3MsIHdpdGggZmFsbGJhY2tzIGlmCi0gICAgICAgIHJlcXVpcmVkLgotICAgICAgICBLZXliaW5kaW5ncyBsb2FkZWQgZnJvbSB0aGUgY29uZmlnIGZpbGUocykgYXJlIGxvYWRlZCBfb3Zlcl8gdGhlc2UKLSAgICAgICAgZGVmYXVsdHMsIHNvIGlmIHRoZXJlIGlzIGEgcHJvYmxlbSBnZXR0aW5nIGFueSBjb3JlIGJpbmRpbmcgdGhlcmUgd2lsbAotICAgICAgICBiZSBhbiAndWx0aW1hdGUgbGFzdCByZXNvcnQgZmFsbGJhY2snIHRvIHRoZSBDVUEtaXNoIGJpbmRpbmdzCi0gICAgICAgIGRlZmluZWQgaGVyZS4KKyAgICAgICAgIiIiUmV0dXJuIGRpY3Qgb2YgY29yZSB2aXJ0dWFsLWtleSBrZXliaW5kaW5ncyBmb3Iga2V5U2V0TmFtZS4KKworICAgICAgICBUaGUgZGVmYXVsdCBrZXlTZXROYW1lIE5vbmUgY29ycmVzcG9uZHMgdG8gdGhlIGtleUJpbmRpbmdzIGJhc2UKKyAgICAgICAgZGljdC4gSWYga2V5U2V0TmFtZSBpcyBub3QgTm9uZSwgYmluZGluZ3MgZnJvbSB0aGUgY29uZmlnCisgICAgICAgIGZpbGUocykgYXJlIGxvYWRlZCBfb3Zlcl8gdGhlc2UgZGVmYXVsdHMsIHNvIGlmIHRoZXJlIGlzIGEKKyAgICAgICAgcHJvYmxlbSBnZXR0aW5nIGFueSBjb3JlIGJpbmRpbmcgdGhlcmUgd2lsbCBiZSBhbiAndWx0aW1hdGUgbGFzdAorICAgICAgICByZXNvcnQgZmFsbGJhY2snIHRvIHRoZSBDVUEtaXNoIGJpbmRpbmdzIGRlZmluZWQgaGVyZS4KICAgICAgICAgIiIiCiAgICAgICAgIGtleUJpbmRpbmdzPXsKICAgICAgICAgICAgICc8PGNvcHk+Pic6IFsnPENvbnRyb2wtYz4nLCAnPENvbnRyb2wtQz4nXSwKQEAgLTYyNCwyMiArNjQwLDI0IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIGlmIGtleVNldE5hbWU6CiAgICAgICAgICAgICBmb3IgZXZlbnQgaW4ga2V5QmluZGluZ3M6Ci0gICAgICAgICAgICAgICAgYmluZGluZz1zZWxmLkdldEtleUJpbmRpbmcoa2V5U2V0TmFtZSxldmVudCkKKyAgICAgICAgICAgICAgICBiaW5kaW5nID0gc2VsZi5HZXRLZXlCaW5kaW5nKGtleVNldE5hbWUsIGV2ZW50KQogICAgICAgICAgICAgICAgIGlmIGJpbmRpbmc6Ci0gICAgICAgICAgICAgICAgICAgIGtleUJpbmRpbmdzW2V2ZW50XT1iaW5kaW5nCisgICAgICAgICAgICAgICAgICAgIGtleUJpbmRpbmdzW2V2ZW50XSA9IGJpbmRpbmcKICAgICAgICAgICAgICAgICBlbHNlOiAjd2UgYXJlIGdvaW5nIHRvIHJldHVybiBhIGRlZmF1bHQsIHByaW50IHdhcm5pbmcKICAgICAgICAgICAgICAgICAgICAgd2FybmluZz0oJ1xuIFdhcm5pbmc6IGNvbmZpZ0hhbmRsZXIucHkgLSBJZGxlQ29uZi5HZXRDb3JlS2V5cycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIC1cbiBwcm9ibGVtIHJldHJpZXZpbmcga2V5IGJpbmRpbmcgZm9yIGV2ZW50ICVyJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcbiBmcm9tIGtleSBzZXQgJXIuXG4nCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyByZXR1cm5pbmcgZGVmYXVsdCB2YWx1ZTogJXJcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgcmV0dXJuaW5nIGRlZmF1bHQgdmFsdWU6ICVyJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LCBrZXlTZXROYW1lLCBrZXlCaW5kaW5nc1tldmVudF0pKQogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKHdhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludCh3YXJuaW5nLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICByZXR1cm4ga2V5QmluZGluZ3MKLSAgICBkZWYgR2V0RXh0cmFIZWxwU291cmNlTGlzdChzZWxmLGNvbmZpZ1NldCk6Ci0gICAgICAgICIiIkZldGNoIGxpc3Qgb2YgZXh0cmEgaGVscCBzb3VyY2VzIGZyb20gYSBnaXZlbiBjb25maWdTZXQuCisKKyAgICBkZWYgR2V0RXh0cmFIZWxwU291cmNlTGlzdChzZWxmLCBjb25maWdTZXQpOgorICAgICAgICAiIiJSZXR1cm4gbGlzdCBvZiBleHRyYSBoZWxwIHNvdXJjZXMgZnJvbSBhIGdpdmVuIGNvbmZpZ1NldC4KKwogICAgICAgICBWYWxpZCBjb25maWdTZXRzIGFyZSAndXNlcicgb3IgJ2RlZmF1bHQnLiAgUmV0dXJuIGEgbGlzdCBvZiB0dXBsZXMgb2YKICAgICAgICAgdGhlIGZvcm0gKG1lbnVfaXRlbSAsIHBhdGhfdG9faGVscF9maWxlICwgb3B0aW9uKSwgb3IgcmV0dXJuIHRoZSBlbXB0eQogICAgICAgICBsaXN0LiAgJ29wdGlvbicgaXMgdGhlIHNlcXVlbmNlIG51bWJlciBvZiB0aGUgaGVscCByZXNvdXJjZS4gICdvcHRpb24nCkBAIC02NDcsMTkgKzY2NSwxOSBAQAogICAgICAgICB0aGVyZWZvcmUgdGhlIHJldHVybmVkIGxpc3QgbXVzdCBiZSBzb3J0ZWQgYnkgJ29wdGlvbicuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGhlbHBTb3VyY2VzPVtdCi0gICAgICAgIGlmIGNvbmZpZ1NldD09J3VzZXInOgotICAgICAgICAgICAgY2ZnUGFyc2VyPXNlbGYudXNlckNmZ1snbWFpbiddCi0gICAgICAgIGVsaWYgY29uZmlnU2V0PT0nZGVmYXVsdCc6Ci0gICAgICAgICAgICBjZmdQYXJzZXI9c2VsZi5kZWZhdWx0Q2ZnWydtYWluJ10KKyAgICAgICAgaGVscFNvdXJjZXMgPSBbXQorICAgICAgICBpZiBjb25maWdTZXQgPT0gJ3VzZXInOgorICAgICAgICAgICAgY2ZnUGFyc2VyID0gc2VsZi51c2VyQ2ZnWydtYWluJ10KKyAgICAgICAgZWxpZiBjb25maWdTZXQgPT0gJ2RlZmF1bHQnOgorICAgICAgICAgICAgY2ZnUGFyc2VyID0gc2VsZi5kZWZhdWx0Q2ZnWydtYWluJ10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEludmFsaWRDb25maWdTZXQoJ0ludmFsaWQgY29uZmlnU2V0IHNwZWNpZmllZCcpCiAgICAgICAgIG9wdGlvbnM9Y2ZnUGFyc2VyLkdldE9wdGlvbkxpc3QoJ0hlbHBGaWxlcycpCiAgICAgICAgIGZvciBvcHRpb24gaW4gb3B0aW9uczoKLSAgICAgICAgICAgIHZhbHVlPWNmZ1BhcnNlci5HZXQoJ0hlbHBGaWxlcycsb3B0aW9uLGRlZmF1bHQ9JzsnKQotICAgICAgICAgICAgaWYgdmFsdWUuZmluZCgnOycpPT0tMTogI21hbGZvcm1lZCBjb25maWcgZW50cnkgd2l0aCBubyAnOycKLSAgICAgICAgICAgICAgICBtZW51SXRlbT0nJyAjbWFrZSB0aGVzZSBlbXB0eQotICAgICAgICAgICAgICAgIGhlbHBQYXRoPScnICNzbyB2YWx1ZSB3b24ndCBiZSBhZGRlZCB0byBsaXN0CisgICAgICAgICAgICB2YWx1ZT1jZmdQYXJzZXIuR2V0KCdIZWxwRmlsZXMnLCBvcHRpb24sIGRlZmF1bHQ9JzsnKQorICAgICAgICAgICAgaWYgdmFsdWUuZmluZCgnOycpID09IC0xOiAjbWFsZm9ybWVkIGNvbmZpZyBlbnRyeSB3aXRoIG5vICc7JworICAgICAgICAgICAgICAgIG1lbnVJdGVtID0gJycgI21ha2UgdGhlc2UgZW1wdHkKKyAgICAgICAgICAgICAgICBoZWxwUGF0aCA9ICcnICNzbyB2YWx1ZSB3b24ndCBiZSBhZGRlZCB0byBsaXN0CiAgICAgICAgICAgICBlbHNlOiAjY29uZmlnIGVudHJ5IGNvbnRhaW5zICc7JyBhcyBleHBlY3RlZAogICAgICAgICAgICAgICAgIHZhbHVlPXZhbHVlLnNwbGl0KCc7JykKICAgICAgICAgICAgICAgICBtZW51SXRlbT12YWx1ZVswXS5zdHJpcCgpCkBAIC02NzAsNDcgKzY4OCw3MyBAQAogICAgICAgICByZXR1cm4gaGVscFNvdXJjZXMKIAogICAgIGRlZiBHZXRBbGxFeHRyYUhlbHBTb3VyY2VzTGlzdChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbGlzdCBvZiB0aGUgZGV0YWlscyBvZiBhbGwgYWRkaXRpb25hbCBoZWxwIHNvdXJjZXMuCisKKyAgICAgICAgVHVwbGVzIGluIHRoZSBsaXN0IGFyZSB0aG9zZSBvZiBHZXRFeHRyYUhlbHBTb3VyY2VMaXN0LgogICAgICAgICAiIiIKLSAgICAgICAgUmV0dXJucyBhIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgYWxsIGFkZGl0aW9uYWwgaGVscAotICAgICAgICBzb3VyY2VzIGNvbmZpZ3VyZWQsIG9yIGFuIGVtcHR5IGxpc3QgaWYgdGhlcmUgYXJlIG5vbmUuIFR1cGxlcyBhcmUgb2YKLSAgICAgICAgdGhlIGZvcm1hdCByZXR1cm5lZCBieSBHZXRFeHRyYUhlbHBTb3VyY2VMaXN0LgotICAgICAgICAiIiIKLSAgICAgICAgYWxsSGVscFNvdXJjZXM9KCBzZWxmLkdldEV4dHJhSGVscFNvdXJjZUxpc3QoJ2RlZmF1bHQnKSsKKyAgICAgICAgYWxsSGVscFNvdXJjZXMgPSAoc2VsZi5HZXRFeHRyYUhlbHBTb3VyY2VMaXN0KCdkZWZhdWx0JykgKwogICAgICAgICAgICAgICAgIHNlbGYuR2V0RXh0cmFIZWxwU291cmNlTGlzdCgndXNlcicpICkKICAgICAgICAgcmV0dXJuIGFsbEhlbHBTb3VyY2VzCiAKKyAgICBkZWYgR2V0Rm9udChzZWxmLCByb290LCBjb25maWdUeXBlLCBzZWN0aW9uKToKKyAgICAgICAgIiIiUmV0cmlldmUgYSBmb250IGZyb20gY29uZmlndXJhdGlvbiAoZm9udCwgZm9udC1zaXplLCBmb250LWJvbGQpCisgICAgICAgIEludGVyY2VwdCB0aGUgc3BlY2lhbCB2YWx1ZSAnVGtGaXhlZEZvbnQnIGFuZCBzdWJzdGl0dXRlCisgICAgICAgIHRoZSBhY3R1YWwgZm9udCwgZmFjdG9yaW5nIGluIHNvbWUgdHdlYWtzIGlmIG5lZWRlZCBmb3IKKyAgICAgICAgYXBwZWFyYW5jZSBzYWtlcy4KKworICAgICAgICBUaGUgJ3Jvb3QnIHBhcmFtZXRlciBjYW4gbm9ybWFsbHkgYmUgYW55IHZhbGlkIFRraW50ZXIgd2lkZ2V0LgorCisgICAgICAgIFJldHVybiBhIHR1cGxlIChmYW1pbHksIHNpemUsIHdlaWdodCkgc3VpdGFibGUgZm9yIHBhc3NpbmcKKyAgICAgICAgdG8gdGtpbnRlci5Gb250CisgICAgICAgICIiIgorICAgICAgICBmYW1pbHkgPSBzZWxmLkdldE9wdGlvbihjb25maWdUeXBlLCBzZWN0aW9uLCAnZm9udCcsIGRlZmF1bHQ9J2NvdXJpZXInKQorICAgICAgICBzaXplID0gc2VsZi5HZXRPcHRpb24oY29uZmlnVHlwZSwgc2VjdGlvbiwgJ2ZvbnQtc2l6ZScsIHR5cGU9J2ludCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PScxMCcpCisgICAgICAgIGJvbGQgPSBzZWxmLkdldE9wdGlvbihjb25maWdUeXBlLCBzZWN0aW9uLCAnZm9udC1ib2xkJywgZGVmYXVsdD0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT0nYm9vbCcpCisgICAgICAgIGlmIChmYW1pbHkgPT0gJ1RrRml4ZWRGb250Jyk6CisgICAgICAgICAgICBpZiBUa1ZlcnNpb24gPCA4LjU6CisgICAgICAgICAgICAgICAgZmFtaWx5ID0gJ0NvdXJpZXInCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGYgPSBGb250KG5hbWU9J1RrRml4ZWRGb250JywgZXhpc3RzPVRydWUsIHJvb3Q9cm9vdCkKKyAgICAgICAgICAgICAgICBhY3R1YWxGb250ID0gRm9udC5hY3R1YWwoZikKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBhY3R1YWxGb250WydmYW1pbHknXQorICAgICAgICAgICAgICAgIHNpemUgPSBhY3R1YWxGb250WydzaXplJ10KKyAgICAgICAgICAgICAgICBpZiBzaXplIDwgMDoKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IDEwICAjIGlmIGZvbnQgaW4gcGl4ZWxzLCBpZ25vcmUgYWN0dWFsIHNpemUKKyAgICAgICAgICAgICAgICBib2xkID0gYWN0dWFsRm9udFsnd2VpZ2h0J109PSdib2xkJworICAgICAgICByZXR1cm4gKGZhbWlseSwgc2l6ZSwgJ2JvbGQnIGlmIGJvbGQgZWxzZSAnbm9ybWFsJykKKwogICAgIGRlZiBMb2FkQ2ZnRmlsZXMoc2VsZik6Ci0gICAgICAgICIiIgotICAgICAgICBsb2FkIGFsbCBjb25maWd1cmF0aW9uIGZpbGVzLgotICAgICAgICAiIiIKKyAgICAgICAgIkxvYWQgYWxsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIgogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZGVmYXVsdENmZzoKICAgICAgICAgICAgIHNlbGYuZGVmYXVsdENmZ1trZXldLkxvYWQoKQogICAgICAgICAgICAgc2VsZi51c2VyQ2ZnW2tleV0uTG9hZCgpICNzYW1lIGtleXMKIAogICAgIGRlZiBTYXZlVXNlckNmZ0ZpbGVzKHNlbGYpOgotICAgICAgICAiIiIKLSAgICAgICAgd3JpdGUgYWxsIGxvYWRlZCB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgYmFjayB0byBkaXNrCi0gICAgICAgICIiIgorICAgICAgICAiV3JpdGUgYWxsIGxvYWRlZCB1c2VyIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gZGlzay4iCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi51c2VyQ2ZnOgogICAgICAgICAgICAgc2VsZi51c2VyQ2ZnW2tleV0uU2F2ZSgpCiAKLWlkbGVDb25mPUlkbGVDb25mKCkKIAoraWRsZUNvbmYgPSBJZGxlQ29uZigpCisKKyMgVE9ETyBSZXZpc2UgdGVzdCBvdXRwdXQsIHdyaXRlIGV4cGFuZGVkIHVuaXR0ZXN0CiAjIyMgbW9kdWxlIHRlc3QKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgZGVmIGR1bXBDZmcoY2ZnKToKLSAgICAgICAgcHJpbnQoJ1xuJyxjZmcsJ1xuJykKKyAgICAgICAgcHJpbnQoJ1xuJywgY2ZnLCAnXG4nKQogICAgICAgICBmb3Iga2V5IGluIGNmZzoKLSAgICAgICAgICAgIHNlY3Rpb25zPWNmZ1trZXldLnNlY3Rpb25zKCkKKyAgICAgICAgICAgIHNlY3Rpb25zID0gY2ZnW2tleV0uc2VjdGlvbnMoKQogICAgICAgICAgICAgcHJpbnQoa2V5KQogICAgICAgICAgICAgcHJpbnQoc2VjdGlvbnMpCiAgICAgICAgICAgICBmb3Igc2VjdGlvbiBpbiBzZWN0aW9uczoKLSAgICAgICAgICAgICAgICBvcHRpb25zPWNmZ1trZXldLm9wdGlvbnMoc2VjdGlvbikKKyAgICAgICAgICAgICAgICBvcHRpb25zID0gY2ZnW2tleV0ub3B0aW9ucyhzZWN0aW9uKQogICAgICAgICAgICAgICAgIHByaW50KHNlY3Rpb24pCiAgICAgICAgICAgICAgICAgcHJpbnQob3B0aW9ucykKICAgICAgICAgICAgICAgICBmb3Igb3B0aW9uIGluIG9wdGlvbnM6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KG9wdGlvbiwgJz0nLCBjZmdba2V5XS5HZXQoc2VjdGlvbixvcHRpb24pKQorICAgICAgICAgICAgICAgICAgICBwcmludChvcHRpb24sICc9JywgY2ZnW2tleV0uR2V0KHNlY3Rpb24sIG9wdGlvbikpCiAgICAgZHVtcENmZyhpZGxlQ29uZi5kZWZhdWx0Q2ZnKQogICAgIGR1bXBDZmcoaWRsZUNvbmYudXNlckNmZykKLSAgICBwcmludChpZGxlQ29uZi51c2VyQ2ZnWydtYWluJ10uR2V0KCdUaGVtZScsJ25hbWUnKSkKKyAgICBwcmludChpZGxlQ29uZi51c2VyQ2ZnWydtYWluJ10uR2V0KCdUaGVtZScsICduYW1lJykpCiAgICAgI3ByaW50IGlkbGVDb25mLnVzZXJDZmdbJ2hpZ2hsaWdodCddLkdldERlZkhpZ2hsaWdodCgnRm9vJywnbm9ybWFsJykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2NvbmZpZ0hlbHBTb3VyY2VFZGl0LnB5IGIvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkKaW5kZXggMmNjYjQwMC4uMjQyYjA4ZCAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkKKysrIGIvTGliL2lkbGVsaWIvY29uZmlnSGVscFNvdXJjZUVkaXQucHkKQEAgLTgsMTMgKzgsMTQgQEAKIGltcG9ydCB0a2ludGVyLmZpbGVkaWFsb2cgYXMgdGtGaWxlRGlhbG9nCiAKIGNsYXNzIEdldEhlbHBTb3VyY2VEaWFsb2coVG9wbGV2ZWwpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBtZW51SXRlbT0nJywgZmlsZVBhdGg9JycpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBtZW51SXRlbT0nJywgZmlsZVBhdGg9JycsIF9odGVzdD1GYWxzZSk6CiAgICAgICAgICIiIkdldCBtZW51IGVudHJ5IGFuZCB1cmwvIGxvY2FsIGZpbGUgbG9jYXRpb24gZm9yIEFkZGl0aW9uYWwgSGVscAogCiAgICAgICAgIFVzZXIgc2VsZWN0cyBhIG5hbWUgZm9yIHRoZSBIZWxwIHJlc291cmNlIGFuZCBwcm92aWRlcyBhIHdlYiB1cmwKICAgICAgICAgb3IgYSBsb2NhbCBmaWxlIGFzIGl0cyBzb3VyY2UuICBUaGUgdXNlciBjYW4gZW50ZXIgYSB1cmwgb3IgYnJvd3NlCiAgICAgICAgIGZvciB0aGUgZmlsZS4KIAorICAgICAgICBfaHRlc3QgLSBib29sLCBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdAogICAgICAgICAiIiIKICAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQogICAgICAgICBzZWxmLmNvbmZpZ3VyZShib3JkZXJ3aWR0aD01KQpAQCAtMzEsMTIgKzMyLDE0IEBACiAgICAgICAgIHNlbGYud2l0aGRyYXcoKSAjaGlkZSB3aGlsZSBzZXR0aW5nIGdlb21ldHJ5CiAgICAgICAgICNuZWVkcyB0byBiZSBkb25lIGhlcmUgc28gdGhhdCB0aGUgd2luZm9fcmVxd2lkdGggaXMgdmFsaWQKICAgICAgICAgc2VsZi51cGRhdGVfaWRsZXRhc2tzKCkKLSAgICAgICAgI2NlbnRyZSBkaWFsb2cgb3ZlciBwYXJlbnQ6Ci0gICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJQotICAgICAgICAgICAgICAgICAgICAgICgocGFyZW50LndpbmZvX3Jvb3R4KCkgKyAoKHBhcmVudC53aW5mb193aWR0aCgpLzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKHNlbGYud2luZm9fcmVxd2lkdGgoKS8yKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArICgocGFyZW50LndpbmZvX2hlaWdodCgpLzIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKHNlbGYud2luZm9fcmVxaGVpZ2h0KCkvMikpKSkpCisgICAgICAgICNjZW50cmUgZGlhbG9nIG92ZXIgcGFyZW50LiBiZWxvdyBwYXJlbnQgaWYgcnVubmluZyBodGVzdC4KKyAgICAgICAgc2VsZi5nZW9tZXRyeSgKKyAgICAgICAgICAgICAgICAiKyVkKyVkIiAlICgKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R4KCkgKworICAgICAgICAgICAgICAgICAgICAocGFyZW50LndpbmZvX3dpZHRoKCkvMiAtIHNlbGYud2luZm9fcmVxd2lkdGgoKS8yKSwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkgKworICAgICAgICAgICAgICAgICAgICAoKHBhcmVudC53aW5mb19oZWlnaHQoKS8yIC0gc2VsZi53aW5mb19yZXFoZWlnaHQoKS8yKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgX2h0ZXN0IGVsc2UgMTUwKSkpCiAgICAgICAgIHNlbGYuZGVpY29uaWZ5KCkgI2dlb21ldHJ5IHNldCwgdW5oaWRlCiAgICAgICAgIHNlbGYuYmluZCgnPFJldHVybj4nLCBzZWxmLk9rKQogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKQEAgLTE1OSwxMSArMTYyLDUgQEAKICAgICAgICAgc2VsZi5kZXN0cm95KCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjdGVzdCB0aGUgZGlhbG9nCi0gICAgcm9vdCA9IFRrKCkKLSAgICBkZWYgcnVuKCk6Ci0gICAgICAgIGtleVNlcSA9ICcnCi0gICAgICAgIGRsZyA9IEdldEhlbHBTb3VyY2VEaWFsb2cocm9vdCwgJ0dldCBIZWxwIFNvdXJjZScpCi0gICAgICAgIHByaW50KGRsZy5yZXN1bHQpCi0gICAgQnV0dG9uKHJvb3QsdGV4dD0nRGlhbG9nJywgY29tbWFuZD1ydW4pLnBhY2soKQotICAgIHJvb3QubWFpbmxvb3AoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihHZXRIZWxwU291cmNlRGlhbG9nKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvY29uZmlnU2VjdGlvbk5hbWVEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9jb25maWdTZWN0aW9uTmFtZURpYWxvZy5weQppbmRleCBiMDVlMzhlLi41MTM3ODM2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9jb25maWdTZWN0aW9uTmFtZURpYWxvZy5weQorKysgYi9MaWIvaWRsZWxpYi9jb25maWdTZWN0aW9uTmFtZURpYWxvZy5weQpAQCAtOCwxMCArOCwxMSBAQAogaW1wb3J0IHRraW50ZXIubWVzc2FnZWJveCBhcyB0a01lc3NhZ2VCb3gKIAogY2xhc3MgR2V0Q2ZnU2VjdGlvbk5hbWVEaWFsb2coVG9wbGV2ZWwpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnQsIHRpdGxlLCBtZXNzYWdlLCB1c2VkX25hbWVzKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCB0aXRsZSwgbWVzc2FnZSwgdXNlZF9uYW1lcywgX2h0ZXN0PUZhbHNlKToKICAgICAgICAgIiIiCiAgICAgICAgIG1lc3NhZ2UgLSBzdHJpbmcsIGluZm9ybWF0aW9uYWwgbWVzc2FnZSB0byBkaXNwbGF5CiAgICAgICAgIHVzZWRfbmFtZXMgLSBzdHJpbmcgY29sbGVjdGlvbiwgbmFtZXMgYWxyZWFkeSBpbiB1c2UgZm9yIHZhbGlkaXR5IGNoZWNrCisgICAgICAgIF9odGVzdCAtIGJvb2wsIGNoYW5nZSBib3ggbG9jYXRpb24gd2hlbiBydW5uaW5nIGh0ZXN0CiAgICAgICAgICIiIgogICAgICAgICBUb3BsZXZlbC5fX2luaXRfXyhzZWxmLCBwYXJlbnQpCiAgICAgICAgIHNlbGYuY29uZmlndXJlKGJvcmRlcndpZHRoPTUpCkBAIC0zMCwxMSArMzEsMTIgQEAKICAgICAgICAgc2VsZi5tZXNzYWdlSW5mby5jb25maWcod2lkdGg9c2VsZi5mcmFtZU1haW4ud2luZm9fcmVxd2lkdGgoKSkKICAgICAgICAgc2VsZi5nZW9tZXRyeSgKICAgICAgICAgICAgICAgICAiKyVkKyVkIiAlICgKLSAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSArCi0gICAgICAgICAgICAgICAgKHBhcmVudC53aW5mb193aWR0aCgpLzIgLSBzZWxmLndpbmZvX3JlcXdpZHRoKCkvMiksCi0gICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkgKwotICAgICAgICAgICAgICAgIChwYXJlbnQud2luZm9faGVpZ2h0KCkvMiAtIHNlbGYud2luZm9fcmVxaGVpZ2h0KCkvMikKLSAgICAgICAgICAgICAgICApICkgICNjZW50cmUgZGlhbG9nIG92ZXIgcGFyZW50CisgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eCgpICsKKyAgICAgICAgICAgICAgICAgICAgKHBhcmVudC53aW5mb193aWR0aCgpLzIgLSBzZWxmLndpbmZvX3JlcXdpZHRoKCkvMiksCisgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsKKyAgICAgICAgICAgICAgICAgICAgKChwYXJlbnQud2luZm9faGVpZ2h0KCkvMiAtIHNlbGYud2luZm9fcmVxaGVpZ2h0KCkvMikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IF9odGVzdCBlbHNlIDEwMCkKKyAgICAgICAgICAgICAgICApICkgICNjZW50cmUgZGlhbG9nIG92ZXIgcGFyZW50IChvciBiZWxvdyBodGVzdCBib3gpCiAgICAgICAgIHNlbGYuZGVpY29uaWZ5KCkgICNnZW9tZXRyeSBzZXQsIHVuaGlkZQogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKIApAQCAtOTIsMTUgKzk0LDUgQEAKICAgICBpbXBvcnQgdW5pdHRlc3QKICAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X2NvbmZpZ19uYW1lJywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCiAKLSAgICAjIGFsc28gaHVtYW4gdGVzdCB0aGUgZGlhbG9nCi0gICAgcm9vdCA9IFRrKCkKLSAgICBkZWYgcnVuKCk6Ci0gICAgICAgIGRsZz1HZXRDZmdTZWN0aW9uTmFtZURpYWxvZyhyb290LCdHZXQgTmFtZScsCi0gICAgICAgICAgICAgICAgIkFmdGVyIHRoZSB0ZXh0IGVudGVyZWQgd2l0aCBbT2tdIGlzIHN0cmlwcGVkLCA8bm90aGluZz4sICIKLSAgICAgICAgICAgICAgICAiJ2FiYycsIG9yIG1vcmUgdGhhdCAzMCBjaGFycyBhcmUgZXJyb3JzLiAiCi0gICAgICAgICAgICAgICAgIkNsb3NlIHdpdGggYSB2YWxpZCBlbnRyeSAocHJpbnRlZCksIFtDYW5jZWxdLCBvciBbWF0iLAotICAgICAgICAgICAgICAgIHsnYWJjJ30pCi0gICAgICAgIHByaW50KGRsZy5yZXN1bHQpCi0gICAgTWVzc2FnZShyb290LCB0ZXh0PScnKS5wYWNrKCkgICMgd2lsbCBiZSBuZWVkZWQgZm9yIG9oZXIgZGlhbG9nIHRlc3RzCi0gICAgQnV0dG9uKHJvb3QsIHRleHQ9J0NsaWNrIHRvIGJlZ2luIGRpYWxvZyB0ZXN0JywgY29tbWFuZD1ydW4pLnBhY2soKQotICAgIHJvb3QubWFpbmxvb3AoKQorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihHZXRDZmdTZWN0aW9uTmFtZURpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2R5bk9wdGlvbk1lbnVXaWRnZXQucHkgYi9MaWIvaWRsZWxpYi9keW5PcHRpb25NZW51V2lkZ2V0LnB5CmluZGV4IDkyMmRlOTYuLjUxNWI0YmEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2R5bk9wdGlvbk1lbnVXaWRnZXQucHkKKysrIGIvTGliL2lkbGVsaWIvZHluT3B0aW9uTWVudVdpZGdldC5weQpAQCAtMiwxNiArMiwxNSBAQAogT3B0aW9uTWVudSB3aWRnZXQgbW9kaWZpZWQgdG8gYWxsb3cgZHluYW1pYyBtZW51IHJlY29uZmlndXJhdGlvbgogYW5kIHNldHRpbmcgb2YgaGlnaGxpZ2h0dGhpY2tuZXNzCiAiIiIKLWZyb20gdGtpbnRlciBpbXBvcnQgT3B0aW9uTWVudQotZnJvbSB0a2ludGVyIGltcG9ydCBfc2V0aXQKIGltcG9ydCBjb3B5Citmcm9tIHRraW50ZXIgaW1wb3J0IE9wdGlvbk1lbnUsIF9zZXRpdCwgU3RyaW5nVmFyLCBCdXR0b24KIAogY2xhc3MgRHluT3B0aW9uTWVudShPcHRpb25NZW51KToKICAgICAiIiIKICAgICB1bmxpa2UgT3B0aW9uTWVudSwgb3VyIGt3YXJncyBjYW4gaW5jbHVkZSBoaWdobGlnaHR0aGlja25lc3MKICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzdGVyLCB2YXJpYWJsZSwgdmFsdWUsICp2YWx1ZXMsICoqa3dhcmdzKToKLSAgICAgICAgI2dldCBhIGNvcHkgb2Yga3dhcmdzIGJlZm9yZSBPcHRpb25NZW51Ll9faW5pdF9fIG11bmdlcyB0aGVtCisgICAgICAgICMgVE9ETyBjb3B5IHZhbHVlIGluc3RlYWQgb2Ygd2hvbGUgZGljdAogICAgICAgICBrd2FyZ3NDb3B5PWNvcHkuY29weShrd2FyZ3MpCiAgICAgICAgIGlmICdoaWdobGlnaHR0aGlja25lc3MnIGluIGxpc3Qoa3dhcmdzLmtleXMoKSk6CiAgICAgICAgICAgICBkZWwoa3dhcmdzWydoaWdobGlnaHR0aGlja25lc3MnXSkKQEAgLTMzLDMgKzMyLDI2IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9X3NldGl0KHNlbGYudmFyaWFibGUsaXRlbSxzZWxmLmNvbW1hbmQpKQogICAgICAgICBpZiB2YWx1ZToKICAgICAgICAgICAgIHNlbGYudmFyaWFibGUuc2V0KHZhbHVlKQorCitkZWYgX2R5bl9vcHRpb25fbWVudShwYXJlbnQpOiAgIyBodGVzdCAjCisgICAgZnJvbSB0a2ludGVyIGltcG9ydCBUb3BsZXZlbAorCisgICAgdG9wID0gVG9wbGV2ZWwoKQorICAgIHRvcC50aXRsZSgiVGV0cyBkeW5hbWljIG9wdGlvbiBtZW51IikKKyAgICB0b3AuZ2VvbWV0cnkoIjIwMHgxMDArJWQrJWQiICUgKHBhcmVudC53aW5mb19yb290eCgpICsgMjAwLAorICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R5KCkgKyAxNTApKQorICAgIHRvcC5mb2N1c19zZXQoKQorCisgICAgdmFyID0gU3RyaW5nVmFyKHRvcCkKKyAgICB2YXIuc2V0KCJPbGQgb3B0aW9uIHNldCIpICNTZXQgdGhlIGRlZmF1bHQgdmFsdWUKKyAgICBkeW4gPSBEeW5PcHRpb25NZW51KHRvcCx2YXIsICJvbGQxIiwib2xkMiIsIm9sZDMiLCJvbGQ0IikKKyAgICBkeW4ucGFjaygpCisKKyAgICBkZWYgdXBkYXRlKCk6CisgICAgICAgIGR5bi5TZXRNZW51KFsibmV3MSIsIm5ldzIiLCJuZXczIiwibmV3NCJdLCB2YWx1ZT0ibmV3IG9wdGlvbiBzZXQiKQorICAgIGJ1dHRvbiA9IEJ1dHRvbih0b3AsIHRleHQ9IkNoYW5nZSBvcHRpb24gc2V0IiwgY29tbWFuZD11cGRhdGUpCisgICAgYnV0dG9uLnBhY2soKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QuaHRlc3QgaW1wb3J0IHJ1bgorICAgIHJ1bihfZHluX29wdGlvbl9tZW51KQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaGVscC5odG1sIGIvTGliL2lkbGVsaWIvaGVscC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODlmZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9oZWxwLmh0bWwKQEAgLTAsMCArMSw3MDkgQEAKKzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iCisgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KKworCis8aHRtbCB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+CisgIDxoZWFkPgorICAgIDxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCisgICAgPHRpdGxlPjI1LjUuIElETEUgJm1kYXNoOyBQeXRob24gMy40LjMgZG9jdW1lbnRhdGlvbjwvdGl0bGU+CisKKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL19zdGF0aWMvcHlkb2N0aGVtZS5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vX3N0YXRpYy9weWdtZW50cy5jc3MiIHR5cGU9InRleHQvY3NzIiAvPgorCisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgdmFyIERPQ1VNRU5UQVRJT05fT1BUSU9OUyA9IHsKKyAgICAgICAgVVJMX1JPT1Q6ICAgICcuLi8nLAorICAgICAgICBWRVJTSU9OOiAgICAgJzMuNC4zJywKKyAgICAgICAgQ09MTEFQU0VfSU5ERVg6IGZhbHNlLAorICAgICAgICBGSUxFX1NVRkZJWDogJy5odG1sJywKKyAgICAgICAgSEFTX1NPVVJDRTogIHRydWUKKyAgICAgIH07CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vX3N0YXRpYy9qcXVlcnkuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL19zdGF0aWMvdW5kZXJzY29yZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vX3N0YXRpYy9kb2N0b29scy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vX3N0YXRpYy9zaWRlYmFyLmpzIj48L3NjcmlwdD4KKyAgICA8bGluayByZWw9InNlYXJjaCIgdHlwZT0iYXBwbGljYXRpb24vb3BlbnNlYXJjaGRlc2NyaXB0aW9uK3htbCIKKyAgICAgICAgICB0aXRsZT0iU2VhcmNoIHdpdGhpbiBQeXRob24gMy40LjMgZG9jdW1lbnRhdGlvbiIKKyAgICAgICAgICBocmVmPSIuLi9fc3RhdGljL29wZW5zZWFyY2gueG1sIi8+CisgICAgPGxpbmsgcmVsPSJhdXRob3IiIHRpdGxlPSJBYm91dCB0aGVzZSBkb2N1bWVudHMiIGhyZWY9Ii4uL2Fib3V0Lmh0bWwiIC8+CisgICAgPGxpbmsgcmVsPSJjb3B5cmlnaHQiIHRpdGxlPSJDb3B5cmlnaHQiIGhyZWY9Ii4uL2NvcHlyaWdodC5odG1sIiAvPgorICAgIDxsaW5rIHJlbD0idG9wIiB0aXRsZT0iUHl0aG9uIDMuNC4zIGRvY3VtZW50YXRpb24iIGhyZWY9Ii4uL2luZGV4Lmh0bWwiIC8+CisgICAgPGxpbmsgcmVsPSJ1cCIgdGl0bGU9IjI1LiBHcmFwaGljYWwgVXNlciBJbnRlcmZhY2VzIHdpdGggVGsiIGhyZWY9InRrLmh0bWwiIC8+CisgICAgPGxpbmsgcmVsPSJuZXh0IiB0aXRsZT0iMjUuNi4gT3RoZXIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIFBhY2thZ2VzIiBocmVmPSJvdGhlcmd1aS5odG1sIiAvPgorICAgIDxsaW5rIHJlbD0icHJldiIgdGl0bGU9IjI1LjQuIHRraW50ZXIuc2Nyb2xsZWR0ZXh0IOKAlCBTY3JvbGxlZCBUZXh0IFdpZGdldCIgaHJlZj0idGtpbnRlci5zY3JvbGxlZHRleHQuaHRtbCIgLz4KKyAgICA8bGluayByZWw9InNob3J0Y3V0IGljb24iIHR5cGU9ImltYWdlL3BuZyIgaHJlZj0iLi4vX3N0YXRpYy9weS5wbmciIC8+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vX3N0YXRpYy9jb3B5YnV0dG9uLmpzIj48L3NjcmlwdD4KKworCisKKworICA8L2hlYWQ+CisgIDxib2R5PgorICAgIDxkaXYgY2xhc3M9InJlbGF0ZWQiPgorICAgICAgPGgzPk5hdmlnYXRpb248L2gzPgorICAgICAgPHVsPgorICAgICAgICA8bGkgY2xhc3M9InJpZ2h0IiBzdHlsZT0ibWFyZ2luLXJpZ2h0OiAxMHB4Ij4KKyAgICAgICAgICA8YSBocmVmPSIuLi9nZW5pbmRleC5odG1sIiB0aXRsZT0iR2VuZXJhbCBJbmRleCIKKyAgICAgICAgICAgICBhY2Nlc3NrZXk9IkkiPmluZGV4PC9hPjwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSIuLi9weS1tb2RpbmRleC5odG1sIiB0aXRsZT0iUHl0aG9uIE1vZHVsZSBJbmRleCIKKyAgICAgICAgICAgICA+bW9kdWxlczwvYT4gfDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSJvdGhlcmd1aS5odG1sIiB0aXRsZT0iMjUuNi4gT3RoZXIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIFBhY2thZ2VzIgorICAgICAgICAgICAgIGFjY2Vzc2tleT0iTiI+bmV4dDwvYT4gfDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSJ0a2ludGVyLnNjcm9sbGVkdGV4dC5odG1sIiB0aXRsZT0iMjUuNC4gdGtpbnRlci5zY3JvbGxlZHRleHQg4oCUIFNjcm9sbGVkIFRleHQgV2lkZ2V0IgorICAgICAgICAgICAgIGFjY2Vzc2tleT0iUCI+cHJldmlvdXM8L2E+IHw8L2xpPgorICAgICAgICA8bGk+PGltZyBzcmM9Ii4uL19zdGF0aWMvcHkucG5nIiBhbHQ9IiIKKyAgICAgICAgICAgICAgICAgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi10b3A6IC0xcHgiLz48L2xpPgorICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cucHl0aG9uLm9yZy8iPlB5dGhvbjwvYT4gJnJhcXVvOzwvbGk+CisgICAgICAgIDxsaT4KKyAgICAgICAgICA8YSBocmVmPSIuLi9pbmRleC5odG1sIj4zLjQuMyBEb2N1bWVudGF0aW9uPC9hPiAmcmFxdW87CisgICAgICAgIDwvbGk+CisKKyAgICAgICAgICA8bGk+PGEgaHJlZj0iaW5kZXguaHRtbCIgPlRoZSBQeXRob24gU3RhbmRhcmQgTGlicmFyeTwvYT4gJnJhcXVvOzwvbGk+CisgICAgICAgICAgPGxpPjxhIGhyZWY9InRrLmh0bWwiIGFjY2Vzc2tleT0iVSI+MjUuIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZXMgd2l0aCBUazwvYT4gJnJhcXVvOzwvbGk+CisgICAgICA8L3VsPgorICAgIDwvZGl2PgorCisgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQiPgorICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnR3cmFwcGVyIj4KKyAgICAgICAgPGRpdiBjbGFzcz0iYm9keXdyYXBwZXIiPgorICAgICAgICAgIDxkaXYgY2xhc3M9ImJvZHkiPgorCisgIDxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJpZGxlIj4KKzxzcGFuIGlkPSJpZDEiPjwvc3Bhbj48aDE+MjUuNS4gSURMRTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjaWRsZSIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gxPgorPHAgaWQ9ImluZGV4LTAiPklETEUgaXMgUHl0aG9uJiM4MjE3O3MgSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBhbmQgTGVhcm5pbmcgRW52aXJvbm1lbnQuPC9wPgorPHA+SURMRSBoYXMgdGhlIGZvbGxvd2luZyBmZWF0dXJlczo8L3A+Cis8dWwgY2xhc3M9InNpbXBsZSI+Cis8bGk+Y29kZWQgaW4gMTAwJSBwdXJlIFB5dGhvbiwgdXNpbmcgdGhlIDxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9InRraW50ZXIuaHRtbCNtb2R1bGUtdGtpbnRlciIgdGl0bGU9InRraW50ZXI6IEludGVyZmFjZSB0byBUY2wvVGsgZm9yIGdyYXBoaWNhbCB1c2VyIGludGVyZmFjZXMiPjx0dCBjbGFzcz0ieHJlZiBweSBweS1tb2QgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+dGtpbnRlcjwvc3Bhbj48L3R0PjwvYT4gR1VJIHRvb2xraXQ8L2xpPgorPGxpPmNyb3NzLXBsYXRmb3JtOiB3b3JrcyBtb3N0bHkgdGhlIHNhbWUgb24gV2luZG93cywgVW5peCwgYW5kIE1hYyBPUyBYPC9saT4KKzxsaT5QeXRob24gc2hlbGwgd2luZG93IChpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikgd2l0aCBjb2xvcml6aW5nCitvZiBjb2RlIGlucHV0LCBvdXRwdXQsIGFuZCBlcnJvciBtZXNzYWdlczwvbGk+Cis8bGk+bXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsCitzbWFydCBpbmRlbnQsIGNhbGwgdGlwcywgYXV0byBjb21wbGV0aW9uLCBhbmQgb3RoZXIgZmVhdHVyZXM8L2xpPgorPGxpPnNlYXJjaCB3aXRoaW4gYW55IHdpbmRvdywgcmVwbGFjZSB3aXRoaW4gZWRpdG9yIHdpbmRvd3MsIGFuZCBzZWFyY2gKK3Rocm91Z2ggbXVsdGlwbGUgZmlsZXMgKGdyZXApPC9saT4KKzxsaT5kZWJ1Z2dlciB3aXRoIHBlcnNpc3RlbnQgYnJlYWtwb2ludHMsIHN0ZXBwaW5nLCBhbmQgdmlld2luZworb2YgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2VzPC9saT4KKzxsaT5jb25maWd1cmF0aW9uLCBicm93c2VycywgYW5kIG90aGVyIGRpYWxvZ3M8L2xpPgorPC91bD4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJtZW51cyI+Cis8aDI+MjUuNS4xLiBNZW51czxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjbWVudXMiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMj4KKzxwPklETEUgaGFzIHR3byBtYWluIHdpbmRvdyB0eXBlcywgdGhlIFNoZWxsIHdpbmRvdyBhbmQgdGhlIEVkaXRvciB3aW5kb3cuICBJdCBpcworcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBlZGl0b3Igd2luZG93cyBzaW11bHRhbmVvdXNseS4gIE91dHB1dCB3aW5kb3dzLCBzdWNoCithcyB1c2VkIGZvciBFZGl0IC8gRmluZCBpbiBGaWxlcywgYXJlIGEgc3VidHlwZSBvZiBlZGl0IHdpbmRvdy4gIFRoZXkgY3VycmVudGx5CitoYXZlIHRoZSBzYW1lIHRvcCBtZW51IGFzIEVkaXRvciB3aW5kb3dzIGJ1dCBhIGRpZmZlcmVudCBkZWZhdWx0IHRpdGxlIGFuZAorY29udGV4dCBtZW51LjwvcD4KKzxwPklETEUmIzgyMTc7cyBtZW51cyBkeW5hbWljYWxseSBjaGFuZ2UgYmFzZWQgb24gd2hpY2ggd2luZG93IGlzIGN1cnJlbnRseSBzZWxlY3RlZC4KK0VhY2ggbWVudSBkb2N1bWVudGVkIGJlbG93IGluZGljYXRlcyB3aGljaCB3aW5kb3cgdHlwZSBpdCBpcyBhc3NvY2lhdGVkIHdpdGguPC9wPgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImZpbGUtbWVudS1zaGVsbC1hbmQtZWRpdG9yIj4KKzxoMz4yNS41LjEuMS4gRmlsZSBtZW51IChTaGVsbCBhbmQgRWRpdG9yKTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjZmlsZS1tZW51LXNoZWxsLWFuZC1lZGl0b3IiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMz4KKzxkbCBjbGFzcz0iZG9jdXRpbHMiPgorPGR0Pk5ldyBGaWxlPC9kdD4KKzxkZD5DcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdy48L2RkPgorPGR0Pk9wZW4uLi48L2R0PgorPGRkPk9wZW4gYW4gZXhpc3RpbmcgZmlsZSB3aXRoIGFuIE9wZW4gZGlhbG9nLjwvZGQ+Cis8ZHQ+UmVjZW50IEZpbGVzPC9kdD4KKzxkZD5PcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMuICBDbGljayBvbmUgdG8gb3BlbiBpdC48L2RkPgorPGR0Pk9wZW4gTW9kdWxlLi4uPC9kdD4KKzxkZD5PcGVuIGFuIGV4aXN0aW5nIG1vZHVsZSAoc2VhcmNoZXMgc3lzLnBhdGgpLjwvZGQ+Cis8L2RsPgorPGRsIGNsYXNzPSJkb2N1dGlscyIgaWQ9ImluZGV4LTEiPgorPGR0PkNsYXNzIEJyb3dzZXI8L2R0PgorPGRkPlNob3cgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgbWV0aG9kcyBpbiB0aGUgY3VycmVudCBFZGl0b3IgZmlsZSBpbiBhCit0cmVlIHN0cnVjdHVyZS4gIEluIHRoZSBzaGVsbCwgb3BlbiBhIG1vZHVsZSBmaXJzdC48L2RkPgorPGR0PlBhdGggQnJvd3NlcjwvZHQ+Cis8ZGQ+U2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgZnVuY3Rpb25zLCBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGEKK3RyZWUgc3RydWN0dXJlLjwvZGQ+Cis8ZHQ+U2F2ZTwvZHQ+Cis8ZGQ+U2F2ZSB0aGUgY3VycmVudCB3aW5kb3cgdG8gdGhlIGFzc29jaWF0ZWQgZmlsZSwgaWYgdGhlcmUgaXMgb25lLiAgV2luZG93cwordGhhdCBoYXZlIGJlZW4gY2hhbmdlZCBzaW5jZSBiZWluZyBvcGVuZWQgb3IgbGFzdCBzYXZlZCBoYXZlIGEgKiBiZWZvcmUKK2FuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlLiAgSWYgdGhlcmUgaXMgbm8gYXNzb2NpYXRlZCBmaWxlLAorZG8gU2F2ZSBBcyBpbnN0ZWFkLjwvZGQ+Cis8ZHQ+U2F2ZSBBcy4uLjwvZHQ+Cis8ZGQ+U2F2ZSB0aGUgY3VycmVudCB3aW5kb3cgd2l0aCBhIFNhdmUgQXMgZGlhbG9nLiAgVGhlIGZpbGUgc2F2ZWQgYmVjb21lcyB0aGUKK25ldyBhc3NvY2lhdGVkIGZpbGUgZm9yIHRoZSB3aW5kb3cuPC9kZD4KKzxkdD5TYXZlIENvcHkgQXMuLi48L2R0PgorPGRkPlNhdmUgdGhlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQKK2ZpbGUuPC9kZD4KKzxkdD5QcmludCBXaW5kb3c8L2R0PgorPGRkPlByaW50IHRoZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgZGVmYXVsdCBwcmludGVyLjwvZGQ+Cis8ZHQ+Q2xvc2U8L2R0PgorPGRkPkNsb3NlIHRoZSBjdXJyZW50IHdpbmRvdyAoYXNrIHRvIHNhdmUgaWYgdW5zYXZlZCkuPC9kZD4KKzxkdD5FeGl0PC9kdD4KKzxkZD5DbG9zZSBhbGwgd2luZG93cyBhbmQgcXVpdCBJRExFIChhc2sgdG8gc2F2ZSB1bnNhdmVkIHdpbmRvd3MpLjwvZGQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iZWRpdC1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPgorPGgzPjI1LjUuMS4yLiBFZGl0IG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNlZGl0LW1lbnUtc2hlbGwtYW5kLWVkaXRvciIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+VW5kbzwvZHQ+Cis8ZGQ+VW5kbyB0aGUgbGFzdCBjaGFuZ2UgdG8gdGhlIGN1cnJlbnQgd2luZG93LiAgQSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkKK2JlIHVuZG9uZS48L2RkPgorPGR0PlJlZG88L2R0PgorPGRkPlJlZG8gdGhlIGxhc3QgdW5kb25lIGNoYW5nZSB0byB0aGUgY3VycmVudCB3aW5kb3cuPC9kZD4KKzxkdD5DdXQ8L2R0PgorPGRkPkNvcHkgc2VsZWN0aW9uIGludG8gdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbi48L2RkPgorPGR0PkNvcHk8L2R0PgorPGRkPkNvcHkgc2VsZWN0aW9uIGludG8gdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZC48L2RkPgorPGR0PlBhc3RlPC9kdD4KKzxkZD5JbnNlcnQgY29udGVudHMgb2YgdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHRoZSBjdXJyZW50IHdpbmRvdy48L2RkPgorPC9kbD4KKzxwPlRoZSBjbGlwYm9hcmQgZnVuY3Rpb25zIGFyZSBhbHNvIGF2YWlsYWJsZSBpbiBjb250ZXh0IG1lbnVzLjwvcD4KKzxkbCBjbGFzcz0iZG9jdXRpbHMiPgorPGR0PlNlbGVjdCBBbGw8L2R0PgorPGRkPlNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50IHdpbmRvdy48L2RkPgorPGR0PkZpbmQuLi48L2R0PgorPGRkPk9wZW4gYSBzZWFyY2ggZGlhbG9nIHdpdGggbWFueSBvcHRpb25zPC9kZD4KKzxkdD5GaW5kIEFnYWluPC9kdD4KKzxkZD5SZXBlYXQgdGhlIGxhc3Qgc2VhcmNoLCBpZiB0aGVyZSBpcyBvbmUuPC9kZD4KKzxkdD5GaW5kIFNlbGVjdGlvbjwvZHQ+Cis8ZGQ+U2VhcmNoIGZvciB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHN0cmluZywgaWYgdGhlcmUgaXMgb25lLjwvZGQ+Cis8ZHQ+RmluZCBpbiBGaWxlcy4uLjwvZHQ+Cis8ZGQ+T3BlbiBhIGZpbGUgc2VhcmNoIGRpYWxvZy4gIFB1dCByZXN1bHRzIGluIGFuIG5ldyBvdXRwdXQgd2luZG93LjwvZGQ+Cis8ZHQ+UmVwbGFjZS4uLjwvZHQ+Cis8ZGQ+T3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cuPC9kZD4KKzxkdD5HbyB0byBMaW5lPC9kdD4KKzxkZD5Nb3ZlIGN1cnNvciB0byB0aGUgbGluZSBudW1iZXIgcmVxdWVzdGVkIGFuZCBtYWtlIHRoYXQgbGluZSB2aXNpYmxlLjwvZGQ+Cis8ZHQ+U2hvdyBDb21wbGV0aW9uczwvZHQ+Cis8ZGQ+T3BlbiBhIHNjcm9sbGFibGUgbGlzdCBhbGxvd2luZyBzZWxlY3Rpb24gb2Yga2V5d29yZHMgYW5kIGF0dHJpYnV0ZXMuIFNlZQorQ29tcGxldGlvbnMgaW4gdGhlIFRpcHMgc2VjdGlvbnMgYmVsb3cuPC9kZD4KKzxkdD5FeHBhbmQgV29yZDwvZHQ+Cis8ZGQ+RXhwYW5kIGEgcHJlZml4IHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGEgZnVsbCB3b3JkIGluIHRoZSBzYW1lIHdpbmRvdzsKK3JlcGVhdCB0byBnZXQgYSBkaWZmZXJlbnQgZXhwYW5zaW9uLjwvZGQ+Cis8ZHQ+U2hvdyBjYWxsIHRpcDwvZHQ+Cis8ZGQ+QWZ0ZXIgYW4gdW5jbG9zZWQgcGFyZW50aGVzaXMgZm9yIGEgZnVuY3Rpb24sIG9wZW4gYSBzbWFsbCB3aW5kb3cgd2l0aAorZnVuY3Rpb24gcGFyYW1ldGVyIGhpbnRzLjwvZGQ+Cis8ZHQ+U2hvdyBzdXJyb3VuZGluZyBwYXJlbnM8L2R0PgorPGRkPkhpZ2hsaWdodCB0aGUgc3Vycm91bmRpbmcgcGFyZW50aGVzaXMuPC9kZD4KKzwvZGw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJmb3JtYXQtbWVudS1lZGl0b3Itd2luZG93LW9ubHkiPgorPGgzPjI1LjUuMS4zLiBGb3JtYXQgbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjZm9ybWF0LW1lbnUtZWRpdG9yLXdpbmRvdy1vbmx5IiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5JbmRlbnQgUmVnaW9uPC9kdD4KKzxkZD5TaGlmdCBzZWxlY3RlZCBsaW5lcyByaWdodCBieSB0aGUgaW5kZW50IHdpZHRoIChkZWZhdWx0IDQgc3BhY2VzKS48L2RkPgorPGR0PkRlZGVudCBSZWdpb248L2R0PgorPGRkPlNoaWZ0IHNlbGVjdGVkIGxpbmVzIGxlZnQgYnkgdGhlIGluZGVudCB3aWR0aCAoZGVmYXVsdCA0IHNwYWNlcykuPC9kZD4KKzxkdD5Db21tZW50IE91dCBSZWdpb248L2R0PgorPGRkPkluc2VydCAjIyBpbiBmcm9udCBvZiBzZWxlY3RlZCBsaW5lcy48L2RkPgorPGR0PlVuY29tbWVudCBSZWdpb248L2R0PgorPGRkPlJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcy48L2RkPgorPGR0PlRhYmlmeSBSZWdpb248L2R0PgorPGRkPlR1cm4gPGVtPmxlYWRpbmc8L2VtPiBzdHJldGNoZXMgb2Ygc3BhY2VzIGludG8gdGFicy4gKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZworNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLik8L2RkPgorPGR0PlVudGFiaWZ5IFJlZ2lvbjwvZHQ+Cis8ZGQ+VHVybiA8ZW0+YWxsPC9lbT4gdGFicyBpbnRvIHRoZSBjb3JyZWN0IG51bWJlciBvZiBzcGFjZXMuPC9kZD4KKzxkdD5Ub2dnbGUgVGFiczwvZHQ+Cis8ZGQ+T3BlbiBhIGRpYWxvZyB0byBzd2l0Y2ggYmV0d2VlbiBpbmRlbnRpbmcgd2l0aCBzcGFjZXMgYW5kIHRhYnMuPC9kZD4KKzxkdD5OZXcgSW5kZW50IFdpZHRoPC9kdD4KKzxkZD5PcGVuIGEgZGlhbG9nIHRvIGNoYW5nZSBpbmRlbnQgd2lkdGguIFRoZSBhY2NlcHRlZCBkZWZhdWx0IGJ5IHRoZSBQeXRob24KK2NvbW11bml0eSBpcyA0IHNwYWNlcy48L2RkPgorPGR0PkZvcm1hdCBQYXJhZ3JhcGg8L2R0PgorPGRkPlJlZm9ybWF0IHRoZSBjdXJyZW50IGJsYW5rLWxpbmUtZGVsaW1pdGVkIHBhcmFncmFwaCBpbiBjb21tZW50IGJsb2NrIG9yCittdWx0aWxpbmUgc3RyaW5nIG9yIHNlbGVjdGVkIGxpbmUgaW4gYSBzdHJpbmcuICBBbGwgbGluZXMgaW4gdGhlCitwYXJhZ3JhcGggd2lsbCBiZSBmb3JtYXR0ZWQgdG8gbGVzcyB0aGFuIE4gY29sdW1ucywgd2hlcmUgTiBkZWZhdWx0cyB0byA3Mi48L2RkPgorPGR0PlN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2U8L2R0PgorPGRkPlJlbW92ZSBhbnkgc3BhY2UgY2hhcmFjdGVycyBhZnRlciB0aGUgbGFzdCBub24tc3BhY2UgY2hhcmFjdGVyIG9mIGEgbGluZS48L2RkPgorPC9kbD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InJ1bi1tZW51LWVkaXRvci13aW5kb3ctb25seSI+Cis8c3BhbiBpZD0iaW5kZXgtMiI+PC9zcGFuPjxoMz4yNS41LjEuNC4gUnVuIG1lbnUgKEVkaXRvciB3aW5kb3cgb25seSk8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI3J1bi1tZW51LWVkaXRvci13aW5kb3ctb25seSIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+UHl0aG9uIFNoZWxsPC9kdD4KKzxkZD5PcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBTaGVsbCB3aW5kb3cuPC9kZD4KKzxkdD5DaGVjayBNb2R1bGU8L2R0PgorPGRkPkNoZWNrIHRoZSBzeW50YXggb2YgdGhlIG1vZHVsZSBjdXJyZW50bHkgb3BlbiBpbiB0aGUgRWRpdG9yIHdpbmRvdy4gSWYgdGhlCittb2R1bGUgaGFzIG5vdCBiZWVuIHNhdmVkIElETEUgd2lsbCBlaXRoZXIgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgb3IKK2F1dG9zYXZlLCBhcyBzZWxlY3RlZCBpbiB0aGUgR2VuZXJhbCB0YWIgb2YgdGhlIElkbGUgU2V0dGluZ3MgZGlhbG9nLiAgSWYKK3RoZXJlIGlzIGEgc3ludGF4IGVycm9yLCB0aGUgYXBwcm94aW1hdGUgbG9jYXRpb24gaXMgaW5kaWNhdGVkIGluIHRoZQorRWRpdG9yIHdpbmRvdy48L2RkPgorPGR0PlJ1biBNb2R1bGU8L2R0PgorPGRkPkRvIENoZWNrIE1vZHVsZSAoYWJvdmUpLiAgSWYgbm8gZXJyb3IsIHJlc3RhcnQgdGhlIHNoZWxsIHRvIGNsZWFuIHRoZQorZW52aXJvbm1lbnQsIHRoZW4gZXhlY3V0ZSB0aGUgbW9kdWxlLiAgT3V0cHV0IGlzIGRpc3BsYXllZCBpbiB0aGUgU2hlbGwKK3dpbmRvdy4gIE5vdGUgdGhhdCBvdXRwdXQgcmVxdWlyZXMgdXNlIG9mIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+cHJpbnQ8L3NwYW4+PC90dD4gb3IgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj53cml0ZTwvc3Bhbj48L3R0Pi4KK1doZW4gZXhlY3V0aW9uIGlzIGNvbXBsZXRlLCB0aGUgU2hlbGwgcmV0YWlucyBmb2N1cyBhbmQgZGlzcGxheXMgYSBwcm9tcHQuCitBdCB0aGlzIHBvaW50LCBvbmUgbWF5IGludGVyYWN0aXZlbHkgZXhwbG9yZSB0aGUgcmVzdWx0IG9mIGV4ZWN1dGlvbi4KK1RoaXMgaXMgc2ltaWxhciB0byBleGVjdXRpbmcgYSBmaWxlIHdpdGggPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5weXRob248L3NwYW4+IDxzcGFuIGNsYXNzPSJwcmUiPi1pPC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj5maWxlPC9zcGFuPjwvdHQ+IGF0IGEgY29tbWFuZAorbGluZS48L2RkPgorPC9kbD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InNoZWxsLW1lbnUtc2hlbGwtd2luZG93LW9ubHkiPgorPGgzPjI1LjUuMS41LiBTaGVsbCBtZW51IChTaGVsbCB3aW5kb3cgb25seSk8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI3NoZWxsLW1lbnUtc2hlbGwtd2luZG93LW9ubHkiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMz4KKzxkbCBjbGFzcz0iZG9jdXRpbHMiPgorPGR0PlZpZXcgTGFzdCBSZXN0YXJ0PC9kdD4KKzxkZD5TY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCBTaGVsbCByZXN0YXJ0LjwvZGQ+Cis8ZHQ+UmVzdGFydCBTaGVsbDwvZHQ+Cis8ZGQ+UmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50LjwvZGQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iZGVidWctbWVudS1zaGVsbC13aW5kb3ctb25seSI+Cis8aDM+MjUuNS4xLjYuIERlYnVnIG1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjZGVidWctbWVudS1zaGVsbC13aW5kb3ctb25seSIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+R28gdG8gRmlsZS9MaW5lPC9kdD4KKzxkZD5Mb29rIG9uIHRoZSBjdXJyZW50IGxpbmUuIHdpdGggdGhlIGN1cnNvciwgYW5kIHRoZSBsaW5lIGFib3ZlIGZvciBhIGZpbGVuYW1lCithbmQgbGluZSBudW1iZXIuICBJZiBmb3VuZCwgb3BlbiB0aGUgZmlsZSBpZiBub3QgYWxyZWFkeSBvcGVuLCBhbmQgc2hvdyB0aGUKK2xpbmUuICBVc2UgdGhpcyB0byB2aWV3IHNvdXJjZSBsaW5lcyByZWZlcmVuY2VkIGluIGFuIGV4Y2VwdGlvbiB0cmFjZWJhY2sKK2FuZCBsaW5lcyBmb3VuZCBieSBGaW5kIGluIEZpbGVzLiBBbHNvIGF2YWlsYWJsZSBpbiB0aGUgY29udGV4dCBtZW51IG9mCit0aGUgU2hlbGwgd2luZG93IGFuZCBPdXRwdXQgd2luZG93cy48L2RkPgorPC9kbD4KKzxkbCBjbGFzcz0iZG9jdXRpbHMiIGlkPSJpbmRleC0zIj4KKzxkdD5EZWJ1Z2dlciAodG9nZ2xlKTwvZHQ+Cis8ZGQ+V2hlbiBhY3RpdmVkLCBjb2RlIGVudGVyZWQgaW4gdGhlIFNoZWxsIG9yIHJ1biBmcm9tIGFuIEVkaXRvciB3aWxsIHJ1bgordW5kZXIgdGhlIGRlYnVnZ2VyLiAgSW4gdGhlIEVkaXRvciwgYnJlYWtwb2ludHMgY2FuIGJlIHNldCB3aXRoIHRoZSBjb250ZXh0CittZW51LiAgVGhpcyBmZWF0dXJlIGlzIHN0aWxsIGluY29tcGxldGUgYW5kIHNvbWV3aGF0IGV4cGVyaW1lbnRhbC48L2RkPgorPGR0PlN0YWNrIFZpZXdlcjwvZHQ+Cis8ZGQ+U2hvdyB0aGUgc3RhY2sgdHJhY2ViYWNrIG9mIHRoZSBsYXN0IGV4Y2VwdGlvbiBpbiBhIHRyZWUgd2lkZ2V0LCB3aXRoCithY2Nlc3MgdG8gbG9jYWxzIGFuZCBnbG9iYWxzLjwvZGQ+Cis8ZHQ+QXV0by1vcGVuIFN0YWNrIFZpZXdlcjwvZHQ+Cis8ZGQ+VG9nZ2xlIGF1dG9tYXRpY2FsbHkgb3BlbmluZyB0aGUgc3RhY2sgdmlld2VyIG9uIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uPC9kZD4KKzwvZGw+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJvcHRpb25zLW1lbnUtc2hlbGwtYW5kLWVkaXRvciI+Cis8aDM+MjUuNS4xLjcuIE9wdGlvbnMgbWVudSAoU2hlbGwgYW5kIEVkaXRvcik8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI29wdGlvbnMtbWVudS1zaGVsbC1hbmQtZWRpdG9yIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5Db25maWd1cmUgSURMRTwvZHQ+Cis8ZGQ+PHAgY2xhc3M9ImZpcnN0Ij5PcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cgYW5kIGNoYW5nZSBwcmVmZXJlbmNlcyBmb3IgdGhlIGZvbGxvd2luZzoKK2ZvbnRzLCBpbmRlbnRhdGlvbiwga2V5YmluZGluZ3MsIHRleHQgY29sb3IgdGhlbWVzLCBzdGFydHVwIHdpbmRvd3MgYW5kCitzaXplLCBhZGRpdGlvbmFsIGhlbHAgc291cmNlcywgYW5kIGV4dGVuc2lvbnMgKHNlZSBiZWxvdykuICBPbiBPUyBYLAorb3BlbiB0aGUgY29uZmlndXJhdGlvbiBkaWFsb2cgYnkgc2VsZWN0aW5nIFByZWZlcmVuY2VzIGluIHRoZSBhcHBsaWNhdGlvbgorbWVudS4gIFRvIHVzZSBhIG5ldyBidWlsdC1pbiBjb2xvciB0aGVtZSAoSURMRSBEYXJrKSB3aXRoIG9sZGVyIElETEVzLAorc2F2ZSBpdCBhcyBhIG5ldyBjdXN0b20gdGhlbWUuPC9wPgorPHAgY2xhc3M9Imxhc3QiPk5vbi1kZWZhdWx0IHVzZXIgc2V0dGluZ3MgYXJlIHNhdmVkIGluIGEgLmlkbGVyYyBkaXJlY3RvcnkgaW4gdGhlIHVzZXImIzgyMTc7cworaG9tZSBkaXJlY3RvcnkuICBQcm9ibGVtcyBjYXVzZWQgYnkgYmFkIHVzZXIgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgc29sdmVkCitieSBlZGl0aW5nIG9yIGRlbGV0aW5nIG9uZSBvciBtb3JlIG9mIHRoZSBmaWxlcyBpbiAuaWRsZXJjLjwvcD4KKzwvZGQ+Cis8ZHQ+Q29kZSBDb250ZXh0ICh0b2dnbGUpKEVkaXRvciBXaW5kb3cgb25seSk8L2R0PgorPGRkPk9wZW4gYSBwYW5lIGF0IHRoZSB0b3Agb2YgdGhlIGVkaXQgd2luZG93IHdoaWNoIHNob3dzIHRoZSBibG9jayBjb250ZXh0CitvZiB0aGUgY29kZSB3aGljaCBoYXMgc2Nyb2xsZWQgYWJvdmUgdGhlIHRvcCBvZiB0aGUgd2luZG93LjwvZGQ+Cis8L2RsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0id2luZG93LW1lbnUtc2hlbGwtYW5kLWVkaXRvciI+Cis8aDM+MjUuNS4xLjguIFdpbmRvdyBtZW51IChTaGVsbCBhbmQgRWRpdG9yKTxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjd2luZG93LW1lbnUtc2hlbGwtYW5kLWVkaXRvciIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+Wm9vbSBIZWlnaHQ8L2R0PgorPGRkPlRvZ2dsZXMgdGhlIHdpbmRvdyBiZXR3ZWVuIG5vcm1hbCBzaXplIGFuZCBtYXhpbXVtIGhlaWdodC4gVGhlIGluaXRpYWwgc2l6ZQorZGVmYXVsdHMgdG8gNDAgbGluZXMgYnkgODAgY2hhcnMgdW5sZXNzIGNoYW5nZWQgb24gdGhlIEdlbmVyYWwgdGFiIG9mIHRoZQorQ29uZmlndXJlIElETEUgZGlhbG9nLjwvZGQ+Cis8L2RsPgorPHA+VGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOyBzZWxlY3Qgb25lIHRvIGJyaW5nCitpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmIG5lY2Vzc2FyeSkuPC9wPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iaGVscC1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPgorPGgzPjI1LjUuMS45LiBIZWxwIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNoZWxwLW1lbnUtc2hlbGwtYW5kLWVkaXRvciIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRsIGNsYXNzPSJkb2N1dGlscyI+Cis8ZHQ+QWJvdXQgSURMRTwvZHQ+Cis8ZGQ+RGlzcGxheSB2ZXJzaW9uLCBjb3B5cmlnaHQsIGxpY2Vuc2UsIGNyZWRpdHMsIGFuZCBtb3JlLjwvZGQ+Cis8ZHQ+SURMRSBIZWxwPC9kdD4KKzxkZD5EaXNwbGF5IGEgaGVscCBmaWxlIGZvciBJRExFIGRldGFpbGluZyB0aGUgbWVudSBvcHRpb25zLCBiYXNpYyBlZGl0aW5nIGFuZAorbmF2aWdhdGlvbiwgYW5kIG90aGVyIHRpcHMuPC9kZD4KKzxkdD5QeXRob24gRG9jczwvZHQ+Cis8ZGQ+QWNjZXNzIGxvY2FsIFB5dGhvbiBkb2N1bWVudGF0aW9uLCBpZiBpbnN0YWxsZWQsIG9yIHN0YXJ0IGEgd2ViIGJyb3dzZXIKK2FuZCBvcGVuIGRvY3MucHl0aG9uLm9yZyBzaG93aW5nIHRoZSBsYXRlc3QgUHl0aG9uIGRvY3VtZW50YXRpb24uPC9kZD4KKzxkdD5UdXJ0bGUgRGVtbzwvZHQ+Cis8ZGQ+UnVuIHRoZSB0dXJ0bGVkZW1vIG1vZHVsZSB3aXRoIGV4YW1wbGUgcHl0aG9uIGNvZGUgYW5kIHR1cnRsZSBkcmF3aW5ncy48L2RkPgorPC9kbD4KKzxwPkFkZGl0aW9uYWwgaGVscCBzb3VyY2VzIG1heSBiZSBhZGRlZCBoZXJlIHdpdGggdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZyB1bmRlcgordGhlIEdlbmVyYWwgdGFiLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImNvbnRleHQtbWVudXMiPgorPHNwYW4gaWQ9ImluZGV4LTQiPjwvc3Bhbj48aDM+MjUuNS4xLjEwLiBDb250ZXh0IE1lbnVzPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNjb250ZXh0LW1lbnVzIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8cD5PcGVuIGEgY29udGV4dCBtZW51IGJ5IHJpZ2h0LWNsaWNraW5nIGluIGEgd2luZG93IChDb250cm9sLWNsaWNrIG9uIE9TIFgpLgorQ29udGV4dCBtZW51cyBoYXZlIHRoZSBzdGFuZGFyZCBjbGlwYm9hcmQgZnVuY3Rpb25zIGFsc28gb24gdGhlIEVkaXQgbWVudS48L3A+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5DdXQ8L2R0PgorPGRkPkNvcHkgc2VsZWN0aW9uIGludG8gdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZDsgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbi48L2RkPgorPGR0PkNvcHk8L2R0PgorPGRkPkNvcHkgc2VsZWN0aW9uIGludG8gdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZC48L2RkPgorPGR0PlBhc3RlPC9kdD4KKzxkZD5JbnNlcnQgY29udGVudHMgb2YgdGhlIHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHRoZSBjdXJyZW50IHdpbmRvdy48L2RkPgorPC9kbD4KKzxwPkVkaXRvciB3aW5kb3dzIGFsc28gaGF2ZSBicmVha3BvaW50IGZ1bmN0aW9ucy4gIExpbmVzIHdpdGggYSBicmVha3BvaW50IHNldCBhcmUKK3NwZWNpYWxseSBtYXJrZWQuICBCcmVha3BvaW50cyBvbmx5IGhhdmUgYW4gZWZmZWN0IHdoZW4gcnVubmluZyB1bmRlciB0aGUKK2RlYnVnZ2VyLiAgQnJlYWtwb2ludHMgZm9yIGEgZmlsZSBhcmUgc2F2ZWQgaW4gdGhlIHVzZXImIzgyMTc7cyAuaWRsZXJjIGRpcmVjdG9yeS48L3A+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5TZXQgQnJlYWtwb2ludDwvZHQ+Cis8ZGQ+U2V0IGEgYnJlYWtwb2ludCBvbiB0aGUgY3VycmVudCBsaW5lLjwvZGQ+Cis8ZHQ+Q2xlYXIgQnJlYWtwb2ludDwvZHQ+Cis8ZGQ+Q2xlYXIgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lLjwvZGQ+Cis8L2RsPgorPHA+U2hlbGwgYW5kIE91dHB1dCB3aW5kb3dzIGhhdmUgdGhlIGZvbGxvd2luZy48L3A+Cis8ZGwgY2xhc3M9ImRvY3V0aWxzIj4KKzxkdD5HbyB0byBmaWxlL2xpbmU8L2R0PgorPGRkPlNhbWUgYXMgaW4gRGVidWcgbWVudS48L2RkPgorPC9kbD4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iZWRpdGluZy1hbmQtbmF2aWdhdGlvbiI+Cis8aDI+MjUuNS4yLiBFZGl0aW5nIGFuZCBuYXZpZ2F0aW9uPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNlZGl0aW5nLWFuZC1uYXZpZ2F0aW9uIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDI+Cis8cD5JbiB0aGlzIHNlY3Rpb24sICYjODIxNjtDJiM4MjE3OyByZWZlcnMgdG8gdGhlIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkNvbnRyb2w8L3NwYW4+PC90dD4ga2V5IG9uIFdpbmRvd3MgYW5kIFVuaXggYW5kCit0aGUgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Q29tbWFuZDwvc3Bhbj48L3R0PiBrZXkgb24gTWFjIE9TWC48L3A+Cis8dWw+Cis8bGk+PHAgY2xhc3M9ImZpcnN0Ij48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5CYWNrc3BhY2U8L3NwYW4+PC90dD4gZGVsZXRlcyB0byB0aGUgbGVmdDsgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+RGVsPC9zcGFuPjwvdHQ+IGRlbGV0ZXMgdG8gdGhlIHJpZ2h0PC9wPgorPC9saT4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtQmFja3NwYWNlPC9zcGFuPjwvdHQ+IGRlbGV0ZSB3b3JkIGxlZnQ7IDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtRGVsPC9zcGFuPjwvdHQ+IGRlbGV0ZSB3b3JkIHRvIHRoZSByaWdodDwvcD4KKzwvbGk+Cis8bGk+PHAgY2xhc3M9ImZpcnN0Ij5BcnJvdyBrZXlzIGFuZCA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5QYWdlPC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj5VcDwvc3Bhbj48L3R0Pi88dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5QYWdlPC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj5Eb3duPC9zcGFuPjwvdHQ+IHRvIG1vdmUgYXJvdW5kPC9wPgorPC9saT4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtTGVmdEFycm93PC9zcGFuPjwvdHQ+IGFuZCA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLVJpZ2h0QXJyb3c8L3NwYW4+PC90dD4gbW92ZXMgYnkgd29yZHM8L3A+Cis8L2xpPgorPGxpPjxwIGNsYXNzPSJmaXJzdCI+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+SG9tZTwvc3Bhbj48L3R0Pi88dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5FbmQ8L3NwYW4+PC90dD4gZ28gdG8gYmVnaW4vZW5kIG9mIGxpbmU8L3A+Cis8L2xpPgorPGxpPjxwIGNsYXNzPSJmaXJzdCI+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1Ib21lPC9zcGFuPjwvdHQ+Lzx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtRW5kPC9zcGFuPjwvdHQ+IGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlPC9wPgorPC9saT4KKzxsaT48cCBjbGFzcz0iZmlyc3QiPlNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6PC9wPgorPGJsb2NrcXVvdGU+Cis8ZGl2Pjx1bCBjbGFzcz0ic2ltcGxlIj4KKzxsaT48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWE8L3NwYW4+PC90dD4gYmVnaW5uaW5nIG9mIGxpbmU8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZTwvc3Bhbj48L3R0PiBlbmQgb2YgbGluZTwvbGk+Cis8bGk+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1rPC9zcGFuPjwvdHQ+IGtpbGwgbGluZSAoYnV0IGRvZXNuJiM4MjE3O3QgcHV0IGl0IGluIGNsaXBib2FyZCk8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtbDwvc3Bhbj48L3R0PiBjZW50ZXIgd2luZG93IGFyb3VuZCB0aGUgaW5zZXJ0aW9uIHBvaW50PC9saT4KKzxsaT48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWI8L3NwYW4+PC90dD4gZ28gYmFja3dhcmRzIG9uZSBjaGFyYWN0ZXIgd2l0aG91dCBkZWxldGluZyAodXN1YWxseSB5b3UgY2FuCithbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcyk8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZjwvc3Bhbj48L3R0PiBnbyBmb3J3YXJkIG9uZSBjaGFyYWN0ZXIgd2l0aG91dCBkZWxldGluZyAodXN1YWxseSB5b3UgY2FuCithbHNvIHVzZSB0aGUgY3Vyc29yIGtleSBmb3IgdGhpcyk8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtcDwvc3Bhbj48L3R0PiBnbyB1cCBvbmUgbGluZSAodXN1YWxseSB5b3UgY2FuIGFsc28gdXNlIHRoZSBjdXJzb3Iga2V5IGZvcgordGhpcyk8L2xpPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtZDwvc3Bhbj48L3R0PiBkZWxldGUgbmV4dCBjaGFyYWN0ZXI8L2xpPgorPC91bD4KKzwvZGl2PjwvYmxvY2txdW90ZT4KKzwvbGk+Cis8L3VsPgorPHA+U3RhbmRhcmQga2V5YmluZGluZ3MgKGxpa2UgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1jPC9zcGFuPjwvdHQ+IHRvIGNvcHkgYW5kIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkMtdjwvc3Bhbj48L3R0PiB0byBwYXN0ZSkKK21heSB3b3JrLiAgS2V5YmluZGluZ3MgYXJlIHNlbGVjdGVkIGluIHRoZSBDb25maWd1cmUgSURMRSBkaWFsb2cuPC9wPgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImF1dG9tYXRpYy1pbmRlbnRhdGlvbiI+Cis8aDM+MjUuNS4yLjEuIEF1dG9tYXRpYyBpbmRlbnRhdGlvbjxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjYXV0b21hdGljLWluZGVudGF0aW9uIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8cD5BZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzIChpbiB0aGUKK1B5dGhvbiBTaGVsbCB3aW5kb3cgYnkgb25lIHRhYikuICBBZnRlciBjZXJ0YWluIGtleXdvcmRzIChicmVhaywgcmV0dXJuIGV0Yy4pCit0aGUgbmV4dCBsaW5lIGlzIGRlZGVudGVkLiAgSW4gbGVhZGluZyBpbmRlbnRhdGlvbiwgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+QmFja3NwYWNlPC9zcGFuPjwvdHQ+IGRlbGV0ZXMgdXAKK3RvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5UYWI8L3NwYW4+PC90dD4gaW5zZXJ0cyBzcGFjZXMgKGluIHRoZSBQeXRob24KK1NoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24gSW5kZW50IHdpZHRoLiBDdXJyZW50bHkgdGFicworYXJlIHJlc3RyaWN0ZWQgdG8gZm91ciBzcGFjZXMgZHVlIHRvIFRjbC9UayBsaW1pdGF0aW9ucy48L3A+Cis8cD5TZWUgYWxzbyB0aGUgaW5kZW50L2RlZGVudCByZWdpb24gY29tbWFuZHMgaW4gdGhlIGVkaXQgbWVudS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJjb21wbGV0aW9ucyI+Cis8aDM+MjUuNS4yLjIuIENvbXBsZXRpb25zPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNjb21wbGV0aW9ucyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPHA+Q29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mIGNsYXNzZXMsCitib3RoIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQuIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkIGZvcgorZmlsZW5hbWVzLjwvcD4KKzxwPlRoZSBBdXRvQ29tcGxldGVXaW5kb3cgKEFDVykgd2lsbCBvcGVuIGFmdGVyIGEgcHJlZGVmaW5lZCBkZWxheSAoZGVmYXVsdCBpcwordHdvIHNlY29uZHMpIGFmdGVyIGEgJiM4MjE2Oy4mIzgyMTc7IG9yIChpbiBhIHN0cmluZykgYW4gb3Muc2VwIGlzIHR5cGVkLiBJZiBhZnRlciBvbmUKK29mIHRob3NlIGNoYXJhY3RlcnMgKHBsdXMgemVybyBvciBtb3JlIG90aGVyIGNoYXJhY3RlcnMpIGEgdGFiIGlzIHR5cGVkCit0aGUgQUNXIHdpbGwgb3BlbiBpbW1lZGlhdGVseSBpZiBhIHBvc3NpYmxlIGNvbnRpbnVhdGlvbiBpcyBmb3VuZC48L3A+Cis8cD5JZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCis8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5UYWI8L3NwYW4+PC90dD4gd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLjwvcD4KKzxwPiYjODIxNjtTaG93IENvbXBsZXRpb25zJiM4MjE3OyB3aWxsIGZvcmNlIG9wZW4gYSBjb21wbGV0aW9ucyB3aW5kb3csIGJ5IGRlZmF1bHQgdGhlCis8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLXNwYWNlPC9zcGFuPjwvdHQ+IHdpbGwgb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gSW4gYW4gZW1wdHkKK3N0cmluZywgdGhpcyB3aWxsIGNvbnRhaW4gdGhlIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gT24gYQorYmxhbmsgbGluZSwgaXQgd2lsbCBjb250YWluIHRoZSBidWlsdC1pbiBhbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyBhbmQKK2NsYXNzZXMgaW4gdGhlIGN1cnJlbnQgbmFtZSBzcGFjZXMsIHBsdXMgYW55IG1vZHVsZXMgaW1wb3J0ZWQuIElmIHNvbWUKK2NoYXJhY3RlcnMgaGF2ZSBiZWVuIGVudGVyZWQsIHRoZSBBQ1cgd2lsbCBhdHRlbXB0IHRvIGJlIG1vcmUgc3BlY2lmaWMuPC9wPgorPHA+SWYgYSBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQorZW50cnkgbW9zdCBjbG9zZWx5IG1hdGNoaW5nIHRob3NlIGNoYXJhY3RlcnMuICBFbnRlcmluZyBhIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnRhYjwvc3Bhbj48L3R0PiB3aWxsCitjYXVzZSB0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXRvciB3aW5kb3cgb3IKK1NoZWxsLiAgVHdvIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPnRhYjwvc3Bhbj48L3R0PiBpbiBhIHJvdyB3aWxsIHN1cHBseSB0aGUgY3VycmVudCBBQ1cgc2VsZWN0aW9uLCBhcword2lsbCByZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZSBzZWxlY3Rpb24sCithbmQgdGhlIHNjcm9sbCB3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLjwvcD4KKzxwPiYjODIyMDtIaWRkZW4mIzgyMjE7IGF0dHJpYnV0ZXMgY2FuIGJlIGFjY2Vzc2VkIGJ5IHR5cGluZyB0aGUgYmVnaW5uaW5nIG9mIGhpZGRlbgorbmFtZSBhZnRlciBhICYjODIxNjsuJiM4MjE3OywgZS5nLiAmIzgyMTY7XyYjODIxNzsuIFRoaXMgYWxsb3dzIGFjY2VzcyB0byBtb2R1bGVzIHdpdGgKKzx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+X19hbGxfXzwvc3Bhbj48L3R0PiBzZXQsIG9yIHRvIGNsYXNzLXByaXZhdGUgYXR0cmlidXRlcy48L3A+Cis8cD5Db21wbGV0aW9ucyBhbmQgdGhlICYjODIxNjtFeHBhbmQgV29yZCYjODIxNzsgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nITwvcD4KKzxwPkNvbXBsZXRpb25zIGFyZSBjdXJyZW50bHkgbGltaXRlZCB0byB0aG9zZSBpbiB0aGUgbmFtZXNwYWNlcy4gTmFtZXMgaW4KK2FuIEVkaXRvciB3aW5kb3cgd2hpY2ggYXJlIG5vdCB2aWEgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5fX21haW5fXzwvc3Bhbj48L3R0PiBhbmQgPGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0ic3lzLmh0bWwjc3lzLm1vZHVsZXMiIHRpdGxlPSJzeXMubW9kdWxlcyI+PHR0IGNsYXNzPSJ4cmVmIHB5IHB5LWRhdGEgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+c3lzLm1vZHVsZXM8L3NwYW4+PC90dD48L2E+IHdpbGwKK25vdCBiZSBmb3VuZC4gIFJ1biB0aGUgbW9kdWxlIG9uY2Ugd2l0aCB5b3VyIGltcG9ydHMgdG8gY29ycmVjdCB0aGlzIHNpdHVhdGlvbi4KK05vdGUgdGhhdCBJRExFIGl0c2VsZiBwbGFjZXMgcXVpdGUgYSBmZXcgbW9kdWxlcyBpbiBzeXMubW9kdWxlcywgc28KK211Y2ggY2FuIGJlIGZvdW5kIGJ5IGRlZmF1bHQsIGUuZy4gdGhlIHJlIG1vZHVsZS48L3A+Cis8cD5JZiB5b3UgZG9uJiM4MjE3O3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQorbG9uZ2VyIG9yIGRpc2FibGUgdGhlIGV4dGVuc2lvbi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJjYWxsdGlwcyI+Cis8aDM+MjUuNS4yLjMuIENhbGx0aXBzPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNjYWxsdGlwcyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPHA+QSBjYWxsdGlwIGlzIHNob3duIHdoZW4gb25lIHR5cGVzIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPig8L3NwYW4+PC90dD4gYWZ0ZXIgdGhlIG5hbWUgb2YgYW4gPGVtPmFjY2Nlc3NpYmxlPC9lbT4KK2Z1bmN0aW9uLiAgQSBuYW1lIGV4cHJlc3Npb24gbWF5IGluY2x1ZGUgZG90cyBhbmQgc3Vic2NyaXB0cy4gIEEgY2FsbHRpcAorcmVtYWlucyB1bnRpbCBpdCBpcyBjbGlja2VkLCB0aGUgY3Vyc29yIGlzIG1vdmVkIG91dCBvZiB0aGUgYXJndW1lbnQgYXJlYSwKK29yIDx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPik8L3NwYW4+PC90dD4gaXMgdHlwZWQuICBXaGVuIHRoZSBjdXJzb3IgaXMgaW4gdGhlIGFyZ3VtZW50IHBhcnQgb2YgYSBkZWZpbml0aW9uLAordGhlIG1lbnUgb3Igc2hvcnRjdXQgZGlzcGxheSBhIGNhbGx0aXAuPC9wPgorPHA+QSBjYWxsdGlwIGNvbnNpc3RzIG9mIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSBmaXJzdCBsaW5lIG9mIHRoZQorZG9jc3RyaW5nLiAgRm9yIGJ1aWx0aW5zIHdpdGhvdXQgYW4gYWNjZXNzaWJsZSBzaWduYXR1cmUsIHRoZSBjYWxsdGlwCitjb25zaXN0cyBvZiBhbGwgbGluZXMgdXAgdGhlIGZpZnRoIGxpbmUgb3IgdGhlIGZpcnN0IGJsYW5rIGxpbmUuICBUaGVzZQorZGV0YWlscyBtYXkgY2hhbmdlLjwvcD4KKzxwPlRoZSBzZXQgb2YgPGVtPmFjY2Vzc2libGU8L2VtPiBmdW5jdGlvbnMgZGVwZW5kcyBvbiB3aGF0IG1vZHVsZXMgaGF2ZSBiZWVuIGltcG9ydGVkCitpbnRvIHRoZSB1c2VyIHByb2Nlc3MsIGluY2x1ZGluZyB0aG9zZSBpbXBvcnRlZCBieSBJZGxlIGl0c2VsZiwKK2FuZCB3aGF0IGRlZmluaXRpb25zIGhhdmUgYmVlbiBydW4sIGFsbCBzaW5jZSB0aGUgbGFzdCByZXN0YXJ0LjwvcD4KKzxwPkZvciBleGFtcGxlLCByZXN0YXJ0IHRoZSBTaGVsbCBhbmQgZW50ZXIgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5pdGVydG9vbHMuY291bnQoPC9zcGFuPjwvdHQ+LiAgQSBjYWxsdGlwCithcHBlYXJzIGJlY2F1c2UgSWRsZSBpbXBvcnRzIGl0ZXJ0b29scyBpbnRvIHRoZSB1c2VyIHByb2Nlc3MgZm9yIGl0cyBvd24gdXNlLgorKFRoaXMgY291bGQgY2hhbmdlLikgIEVudGVyIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+dHVydGxlLndyaXRlKDwvc3Bhbj48L3R0PiBhbmQgbm90aGluZyBhcHBlYXJzLiAgSWRsZSBkb2VzCitub3QgaW1wb3J0IHR1cnRsZS4gIFRoZSBtZW51IG9yIHNob3J0Y3V0IGRvIG5vdGhpbmcgZWl0aGVyLiAgRW50ZXIKKzx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+aW1wb3J0PC9zcGFuPiA8c3BhbiBjbGFzcz0icHJlIj50dXJ0bGU8L3NwYW4+PC90dD4gYW5kIHRoZW4gPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj50dXJ0bGUud3JpdGUoPC9zcGFuPjwvdHQ+IHdpbGwgd29yay48L3A+Cis8cD5JbiBhbiBlZGl0b3IsIGltcG9ydCBzdGF0ZW1lbnRzIGhhdmUgbm8gZWZmZWN0IHVudGlsIG9uZSBydW5zIHRoZSBmaWxlLiAgT25lCittaWdodCB3YW50IHRvIHJ1biBhIGZpbGUgYWZ0ZXIgd3JpdGluZyB0aGUgaW1wb3J0IHN0YXRlbWVudHMgYXQgdGhlIHRvcCwKK29yIGltbWVkaWF0ZWx5IHJ1biBhbiBleGlzdGluZyBmaWxlIGJlZm9yZSBlZGl0aW5nLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InB5dGhvbi1zaGVsbC13aW5kb3ciPgorPGgzPjI1LjUuMi40LiBQeXRob24gU2hlbGwgd2luZG93PGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNweXRob24tc2hlbGwtd2luZG93IiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8dWw+Cis8bGk+PHAgY2xhc3M9ImZpcnN0Ij48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWM8L3NwYW4+PC90dD4gaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZDwvcD4KKzwvbGk+Cis8bGk+PHAgY2xhc3M9ImZpcnN0Ij48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLWQ8L3NwYW4+PC90dD4gc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgYSA8dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPiZndDsmZ3Q7Jmd0Ozwvc3Bhbj48L3R0PiBwcm9tcHQ8L3A+Cis8L2xpPgorPGxpPjxwIGNsYXNzPSJmaXJzdCI+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+QWx0LS88L3NwYW4+PC90dD4gKEV4cGFuZCB3b3JkKSBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nPC9wPgorPHA+Q29tbWFuZCBoaXN0b3J5PC9wPgorPHVsIGNsYXNzPSJzaW1wbGUiPgorPGxpPjx0dCBjbGFzcz0ia2JkIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPkFsdC1wPC9zcGFuPjwvdHQ+IHJldHJpZXZlcyBwcmV2aW91cyBjb21tYW5kIG1hdGNoaW5nIHdoYXQgeW91IGhhdmUgdHlwZWQuIE9uCitPUyBYIHVzZSA8dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5DLXA8L3NwYW4+PC90dD4uPC9saT4KKzxsaT48dHQgY2xhc3M9ImtiZCBkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5BbHQtbjwvc3Bhbj48L3R0PiByZXRyaWV2ZXMgbmV4dC4gT24gT1MgWCB1c2UgPHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Qy1uPC9zcGFuPjwvdHQ+LjwvbGk+Cis8bGk+PHR0IGNsYXNzPSJrYmQgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+UmV0dXJuPC9zcGFuPjwvdHQ+IHdoaWxlIG9uIGFueSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQ8L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0idGV4dC1jb2xvcnMiPgorPGgzPjI1LjUuMi41LiBUZXh0IGNvbG9yczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjdGV4dC1jb2xvcnMiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMz4KKzxwPklkbGUgZGVmYXVsdHMgdG8gYmxhY2sgb24gd2hpdGUgdGV4dCwgYnV0IGNvbG9ycyB0ZXh0IHdpdGggc3BlY2lhbCBtZWFuaW5ncy4KK0ZvciB0aGUgc2hlbGwsIHRoZXNlIGFyZSBzaGVsbCBvdXRwdXQsIHNoZWxsIGVycm9yLCB1c2VyIG91dHB1dCwgYW5kCit1c2VyIGVycm9yLiAgRm9yIFB5dGhvbiBjb2RlLCBhdCB0aGUgc2hlbGwgcHJvbXB0IG9yIGluIGFuIGVkaXRvciwgdGhlc2UgYXJlCitrZXl3b3JkcywgYnVpbHRpbiBjbGFzcyBhbmQgZnVuY3Rpb24gbmFtZXMsIG5hbWVzIGZvbGxvd2luZyA8dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPmNsYXNzPC9zcGFuPjwvdHQ+IGFuZAorPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5kZWY8L3NwYW4+PC90dD4sIHN0cmluZ3MsIGFuZCBjb21tZW50cy4gRm9yIGFueSB0ZXh0IHdpbmRvdywgdGhlc2UgYXJlIHRoZSBjdXJzb3IgKHdoZW4KK3ByZXNlbnQpLCBmb3VuZCB0ZXh0ICh3aGVuIHBvc3NpYmxlKSwgYW5kIHNlbGVjdGVkIHRleHQuPC9wPgorPHA+VGV4dCBjb2xvcmluZyBpcyBkb25lIGluIHRoZSBiYWNrZ3JvdW5kLCBzbyB1bmNvbG9yaXplZCB0ZXh0IGlzIG9jY2FzaW9uYWxseQordmlzaWJsZS4gIFRvIGNoYW5nZSB0aGUgY29sb3Igc2NoZW1lLCB1c2UgdGhlIENvbmZpZ3VyZSBJRExFIGRpYWxvZworSGlnaGxpZ2h0aW5nIHRhYi4gIFRoZSBtYXJraW5nIG9mIGRlYnVnZ2VyIGJyZWFrcG9pbnQgbGluZXMgaW4gdGhlIGVkaXRvciBhbmQKK3RleHQgaW4gcG9wdXBzIGFuZCBkaWFsb2dzIGlzIG5vdCB1c2VyLWNvbmZpZ3VyYWJsZS48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InN0YXJ0dXAtYW5kLWNvZGUtZXhlY3V0aW9uIj4KKzxoMj4yNS41LjMuIFN0YXJ0dXAgYW5kIGNvZGUgZXhlY3V0aW9uPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNzdGFydHVwLWFuZC1jb2RlLWV4ZWN1dGlvbiIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gyPgorPHA+VXBvbiBzdGFydHVwIHdpdGggdGhlIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LXM8L3NwYW4+PC90dD4gb3B0aW9uLCBJRExFIHdpbGwgZXhlY3V0ZSB0aGUgZmlsZSByZWZlcmVuY2VkIGJ5Cit0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIDxzcGFuIGNsYXNzPSJ0YXJnZXQiIGlkPSJpbmRleC01Ij48L3NwYW4+PHR0IGNsYXNzPSJ4cmVmIHN0ZCBzdGQtZW52dmFyIGRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPklETEVTVEFSVFVQPC9zcGFuPjwvdHQ+IG9yIDxzcGFuIGNsYXNzPSJ0YXJnZXQiIGlkPSJpbmRleC02Ij48L3NwYW4+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iLi4vdXNpbmcvY21kbGluZS5odG1sI2VudnZhci1QWVRIT05TVEFSVFVQIj48dHQgY2xhc3M9InhyZWYgc3RkIHN0ZC1lbnZ2YXIgZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+UFlUSE9OU1RBUlRVUDwvc3Bhbj48L3R0PjwvYT4uCitJRExFIGZpcnN0IGNoZWNrcyBmb3IgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5JRExFU1RBUlRVUDwvc3Bhbj48L3R0PjsgaWYgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5JRExFU1RBUlRVUDwvc3Bhbj48L3R0PiBpcyBwcmVzZW50IHRoZSBmaWxlCityZWZlcmVuY2VkIGlzIHJ1bi4gIElmIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+SURMRVNUQVJUVVA8L3NwYW4+PC90dD4gaXMgbm90IHByZXNlbnQsIElETEUgY2hlY2tzIGZvcgorPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5QWVRIT05TVEFSVFVQPC9zcGFuPjwvdHQ+LiAgRmlsZXMgcmVmZXJlbmNlZCBieSB0aGVzZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlCitjb252ZW5pZW50IHBsYWNlcyB0byBzdG9yZSBmdW5jdGlvbnMgdGhhdCBhcmUgdXNlZCBmcmVxdWVudGx5IGZyb20gdGhlIElETEUKK3NoZWxsLCBvciBmb3IgZXhlY3V0aW5nIGltcG9ydCBzdGF0ZW1lbnRzIHRvIGltcG9ydCBjb21tb24gbW9kdWxlcy48L3A+Cis8cD5JbiBhZGRpdGlvbiwgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5Uazwvc3Bhbj48L3R0PiBhbHNvIGxvYWRzIGEgc3RhcnR1cCBmaWxlIGlmIGl0IGlzIHByZXNlbnQuICBOb3RlIHRoYXQgdGhlCitUayBmaWxlIGlzIGxvYWRlZCB1bmNvbmRpdGlvbmFsbHkuICBUaGlzIGFkZGl0aW9uYWwgZmlsZSBpcyA8dHQgY2xhc3M9ImRvY3V0aWxzIGxpdGVyYWwiPjxzcGFuIGNsYXNzPSJwcmUiPi5JZGxlLnB5PC9zcGFuPjwvdHQ+IGFuZCBpcworbG9va2VkIGZvciBpbiB0aGUgdXNlciYjODIxNztzIGhvbWUgZGlyZWN0b3J5LiAgU3RhdGVtZW50cyBpbiB0aGlzIGZpbGUgd2lsbCBiZQorZXhlY3V0ZWQgaW4gdGhlIFRrIG5hbWVzcGFjZSwgc28gdGhpcyBmaWxlIGlzIG5vdCB1c2VmdWwgZm9yIGltcG9ydGluZworZnVuY3Rpb25zIHRvIGJlIHVzZWQgZnJvbSBJRExFJiM4MjE3O3MgUHl0aG9uIHNoZWxsLjwvcD4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJjb21tYW5kLWxpbmUtdXNhZ2UiPgorPGgzPjI1LjUuMy4xLiBDb21tYW5kIGxpbmUgdXNhZ2U8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI2NvbW1hbmQtbGluZS11c2FnZSIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPGRpdiBjbGFzcz0iaGlnaGxpZ2h0LXB5dGhvbjMiPjxkaXYgY2xhc3M9ImhpZ2hsaWdodCI+PHByZT5pZGxlLnB5IFstYyBjb21tYW5kXSBbLWRdIFstZV0gWy1oXSBbLWldIFstciBmaWxlXSBbLXNdIFstdCB0aXRsZV0gWy1dIFthcmddIC4uLgorCistYyBjb21tYW5kICBydW4gY29tbWFuZCBpbiB0aGUgc2hlbGwgd2luZG93CistZCAgICAgICAgICBlbmFibGUgZGVidWdnZXIgYW5kIG9wZW4gc2hlbGwgd2luZG93CistZSAgICAgICAgICBvcGVuIGVkaXRvciB3aW5kb3cKKy1oICAgICAgICAgIHByaW50IGhlbHAgbWVzc2FnZSB3aXRoIGxlZ2FsIGNvbWJpbmF0aW9zIGFuZCBleGl0CistaSAgICAgICAgICBvcGVuIHNoZWxsIHdpbmRvdworLXIgZmlsZSAgICAgcnVuIGZpbGUgaW4gc2hlbGwgd2luZG93CistcyAgICAgICAgICBydW4gJElETEVTVEFSVFVQIG9yICRQWVRIT05TVEFSVFVQIGZpcnN0LCBpbiBzaGVsbCB3aW5kb3cKKy10IHRpdGxlICAgIHNldCB0aXRsZSBvZiBzaGVsbCB3aW5kb3cKKy0gICAgICAgICAgIHJ1biBzdGRpbiBpbiBzaGVsbCAoLSBtdXN0IGJlIGxhc3Qgb3B0aW9uIGJlZm9yZSBhcmdzKQorPC9wcmU+PC9kaXY+Cis8L2Rpdj4KKzxwPklmIHRoZXJlIGFyZSBhcmd1bWVudHM6PC9wPgorPHVsIGNsYXNzPSJzaW1wbGUiPgorPGxpPklmIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+LTwvc3Bhbj48L3R0PiwgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj4tYzwvc3Bhbj48L3R0Piwgb3IgPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5yPC9zcGFuPjwvdHQ+IGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgorPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5zeXMuYXJndlsxOi4uLl08L3NwYW4+PC90dD4gYW5kIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+c3lzLmFyZ3ZbMF08L3NwYW4+PC90dD4gaXMgc2V0IHRvIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jyc8L3NwYW4+PC90dD4sIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jy1jJzwvc3Bhbj48L3R0PiwKK29yIDx0dCBjbGFzcz0iZG9jdXRpbHMgbGl0ZXJhbCI+PHNwYW4gY2xhc3M9InByZSI+Jy1yJzwvc3Bhbj48L3R0Pi4gIE5vIGVkaXRvciB3aW5kb3cgaXMgb3BlbmVkLCBldmVuIGlmIHRoYXQgaXMgdGhlIGRlZmF1bHQKK3NldCBpbiB0aGUgT3B0aW9ucyBkaWFsb2cuPC9saT4KKzxsaT5PdGhlcndpc2UsIGFyZ3VtZW50cyBhcmUgZmlsZXMgb3BlbmVkIGZvciBlZGl0aW5nIGFuZAorPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj5zeXMuYXJndjwvc3Bhbj48L3R0PiByZWZsZWN0cyB0aGUgYXJndW1lbnRzIHBhc3NlZCB0byBJRExFIGl0c2VsZi48L2xpPgorPC91bD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9ImlkbGUtY29uc29sZS1kaWZmZXJlbmNlcyI+Cis8aDM+MjUuNS4zLjIuIElETEUtY29uc29sZSBkaWZmZXJlbmNlczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjaWRsZS1jb25zb2xlLWRpZmZlcmVuY2VzIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8cD5BcyBtdWNoIGFzIHBvc3NpYmxlLCB0aGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBQeXRob24gY29kZSB3aXRoIElETEUgaXMgdGhlCitzYW1lIGFzIGV4ZWN1dGluZyB0aGUgc2FtZSBjb2RlIGluIGEgY29uc29sZSB3aW5kb3cuICBIb3dldmVyLCB0aGUgZGlmZmVyZW50CitpbnRlcmZhY2UgYW5kIG9wZXJhdGlvbiBvY2Nhc2lvbmFsbHkgYWZmZWN0cyByZXN1bHRzLjwvcD4KKzxwPkZvciBpbnN0YW5jZSwgSURMRSBub3JtYWxseSBleGVjdXRlcyB1c2VyIGNvZGUgaW4gYSBzZXBhcmF0ZSBwcm9jZXNzIGZyb20KK3RoZSBJRExFIEdVSSBpdHNlbGYuICBUaGUgSURMRSB2ZXJzaW9ucyBvZiBzeXMuc3RkaW4sIC5zdGRvdXQsIGFuZCAuc3RkZXJyIGluIHRoZQorZXhlY3V0aW9uIHByb2Nlc3MgZ2V0IGlucHV0IGZyb20gYW5kIHNlbmQgb3V0cHV0IHRvIHRoZSBHVUkgcHJvY2VzcywKK3doaWNoIGtlZXBzIGNvbnRyb2wgb2YgdGhlIGtleWJvYXJkIGFuZCBzY3JlZW4uICBUaGlzIGlzIG5vcm1hbGx5IHRyYW5zcGFyZW50LAorYnV0IGNvZGUgdGhhdCBhY2Nlc3MgdGhlc2Ugb2JqZWN0IHdpbGwgc2VlIGRpZmZlcmVudCBhdHRyaWJ1dGUgdmFsdWVzLgorQWxzbywgZnVuY3Rpb25zIHRoYXQgZGlyZWN0bHkgYWNjZXNzIHRoZSBrZXlib2FyZCBhbmQgc2NyZWVuIHdpbGwgbm90IHdvcmsuPC9wPgorPHA+V2l0aCBJRExFJiM4MjE3O3MgU2hlbGwsIG9uZSBlbnRlcnMsIGVkaXRzLCBhbmQgcmVjYWxscyBjb21wbGV0ZSBzdGF0ZW1lbnRzLgorU29tZSBjb25zb2xlcyBvbmx5IHdvcmsgd2l0aCBhIHNpbmdsZSBwaHlzaWNhbCBsaW5lIGF0IGEgdGltZS48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJydW5uaW5nLXdpdGhvdXQtYS1zdWJwcm9jZXNzIj4KKzxoMz4yNS41LjMuMy4gUnVubmluZyB3aXRob3V0IGEgc3VicHJvY2VzczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjcnVubmluZy13aXRob3V0LWEtc3VicHJvY2VzcyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPHA+QnkgZGVmYXVsdCwgSURMRSBleGVjdXRlcyB1c2VyIGNvZGUgaW4gYSBzZXBhcmF0ZSBzdWJwcm9jZXNzIHZpYSBhIHNvY2tldCwKK3doaWNoIHVzZXMgdGhlIGludGVybmFsIGxvb3BiYWNrIGludGVyZmFjZS4gIFRoaXMgY29ubmVjdGlvbiBpcyBub3QKK2V4dGVybmFsbHkgdmlzaWJsZSBhbmQgbm8gZGF0YSBpcyBzZW50IHRvIG9yIHJlY2VpdmVkIGZyb20gdGhlIEludGVybmV0LgorSWYgZmlyZXdhbGwgc29mdHdhcmUgY29tcGxhaW5zIGFueXdheSwgeW91IGNhbiBpZ25vcmUgaXQuPC9wPgorPHA+SWYgdGhlIGF0dGVtcHQgdG8gbWFrZSB0aGUgc29ja2V0IGNvbm5lY3Rpb24gZmFpbHMsIElkbGUgd2lsbCBub3RpZnkgeW91LgorU3VjaCBmYWlsdXJlcyBhcmUgc29tZXRpbWVzIHRyYW5zaWVudCwgYnV0IGlmIHBlcnNpc3RlbnQsIHRoZSBwcm9ibGVtCittYXkgYmUgZWl0aGVyIGEgZmlyZXdhbGwgYmxvY2tpbmcgdGhlIGNvbm5lY3RvbiBvciBtaXNjb25maWd1cmF0aW9uIG9mCithIHBhcnRpY3VsYXIgc3lzdGVtLiAgVW50aWwgdGhlIHByb2JsZW0gaXMgZml4ZWQsIG9uZSBjYW4gcnVuIElkbGUgd2l0aAordGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2guPC9wPgorPHA+SWYgSURMRSBpcyBzdGFydGVkIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXQgd2lsbCBydW4gaW4gYQorc2luZ2xlIHByb2Nlc3MgYW5kIHdpbGwgbm90IGNyZWF0ZSB0aGUgc3VicHJvY2VzcyB3aGljaCBydW5zIHRoZSBSUEMKK1B5dGhvbiBleGVjdXRpb24gc2VydmVyLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGlmIFB5dGhvbiBjYW5ub3QgY3JlYXRlCit0aGUgc3VicHJvY2VzcyBvciB0aGUgUlBDIHNvY2tldCBpbnRlcmZhY2Ugb24geW91ciBwbGF0Zm9ybS4gIEhvd2V2ZXIsCitpbiB0aGlzIG1vZGUgdXNlciBjb2RlIGlzIG5vdCBpc29sYXRlZCBmcm9tIElETEUgaXRzZWxmLiAgQWxzbywgdGhlCitlbnZpcm9ubWVudCBpcyBub3QgcmVzdGFydGVkIHdoZW4gUnVuL1J1biBNb2R1bGUgKEY1KSBpcyBzZWxlY3RlZC4gIElmCit5b3VyIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQsIHlvdSBtdXN0IHJlbG9hZCgpIHRoZSBhZmZlY3RlZCBtb2R1bGVzIGFuZAorcmUtaW1wb3J0IGFueSBzcGVjaWZpYyBpdGVtcyAoZS5nLiBmcm9tIGZvbyBpbXBvcnQgYmF6KSBpZiB0aGUgY2hhbmdlcworYXJlIHRvIHRha2UgZWZmZWN0LiAgRm9yIHRoZXNlIHJlYXNvbnMsIGl0IGlzIHByZWZlcmFibGUgdG8gcnVuIElETEUKK3dpdGggdGhlIGRlZmF1bHQgc3VicHJvY2VzcyBpZiBhdCBhbGwgcG9zc2libGUuPC9wPgorPGRpdiBjbGFzcz0iZGVwcmVjYXRlZCI+Cis8cD48c3BhbiBjbGFzcz0idmVyc2lvbm1vZGlmaWVkIj5EZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMy40Ljwvc3Bhbj48L3A+Cis8L2Rpdj4KKzwvZGl2PgorPC9kaXY+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iaGVscC1hbmQtcHJlZmVyZW5jZXMiPgorPGgyPjI1LjUuNC4gSGVscCBhbmQgcHJlZmVyZW5jZXM8YSBjbGFzcz0iaGVhZGVybGluayIgaHJlZj0iI2hlbHAtYW5kLXByZWZlcmVuY2VzIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDI+Cis8ZGl2IGNsYXNzPSJzZWN0aW9uIiBpZD0iYWRkaXRpb25hbC1oZWxwLXNvdXJjZXMiPgorPGgzPjI1LjUuNC4xLiBBZGRpdGlvbmFsIGhlbHAgc291cmNlczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjYWRkaXRpb25hbC1oZWxwLXNvdXJjZXMiIHRpdGxlPSJQZXJtYWxpbmsgdG8gdGhpcyBoZWFkbGluZSI+wrY8L2E+PC9oMz4KKzxwPklETEUgaW5jbHVkZXMgYSBoZWxwIG1lbnUgZW50cnkgY2FsbGVkICYjODIyMDtQeXRob24gRG9jcyYjODIyMTsgdGhhdCB3aWxsIG9wZW4gdGhlCitleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcgdHV0b3JpYWxzLCBhdmFpbGFibGUgYXQgZG9jcy5weXRob24ub3JnLgorU2VsZWN0ZWQgVVJMcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBoZWxwIG1lbnUgYXQgYW55IHRpbWUgdXNpbmcgdGhlCitDb25maWd1cmUgSURMRSBkaWFsb2cuIFNlZSB0aGUgSURMRSBoZWxwIG9wdGlvbiBpbiB0aGUgaGVscCBtZW51IG9mIElETEUgZm9yCittb3JlIGluZm9ybWF0aW9uLjwvcD4KKzwvZGl2PgorPGRpdiBjbGFzcz0ic2VjdGlvbiIgaWQ9InNldHRpbmctcHJlZmVyZW5jZXMiPgorPGgzPjI1LjUuNC4yLiBTZXR0aW5nIHByZWZlcmVuY2VzPGEgY2xhc3M9ImhlYWRlcmxpbmsiIGhyZWY9IiNzZXR0aW5nLXByZWZlcmVuY2VzIiB0aXRsZT0iUGVybWFsaW5rIHRvIHRoaXMgaGVhZGxpbmUiPsK2PC9hPjwvaDM+Cis8cD5UaGUgZm9udCBwcmVmZXJlbmNlcywgaGlnaGxpZ2h0aW5nLCBrZXlzLCBhbmQgZ2VuZXJhbCBwcmVmZXJlbmNlcyBjYW4gYmUKK2NoYW5nZWQgdmlhIENvbmZpZ3VyZSBJRExFIG9uIHRoZSBPcHRpb24gbWVudS4gIEtleXMgY2FuIGJlIHVzZXIgZGVmaW5lZDsKK0lETEUgc2hpcHMgd2l0aCBmb3VyIGJ1aWx0IGluIGtleSBzZXRzLiBJbiBhZGRpdGlvbiBhIHVzZXIgY2FuIGNyZWF0ZSBhCitjdXN0b20ga2V5IHNldCBpbiB0aGUgQ29uZmlndXJlIElETEUgZGlhbG9nIHVuZGVyIHRoZSBrZXlzIHRhYi48L3A+Cis8L2Rpdj4KKzxkaXYgY2xhc3M9InNlY3Rpb24iIGlkPSJleHRlbnNpb25zIj4KKzxoMz4yNS41LjQuMy4gRXh0ZW5zaW9uczxhIGNsYXNzPSJoZWFkZXJsaW5rIiBocmVmPSIjZXh0ZW5zaW9ucyIgdGl0bGU9IlBlcm1hbGluayB0byB0aGlzIGhlYWRsaW5lIj7CtjwvYT48L2gzPgorPHA+SURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBQZWZlcmVuY2VzIGZvciBleHRlbnNpb25zIGNhbiBiZQorY2hhbmdlZCB3aXRoIENvbmZpZ3VyZSBFeHRlbnNpb25zLiBTZWUgdGhlIGJlZ2lubmluZyBvZiBjb25maWctZXh0ZW5zaW9ucy5kZWYKK2luIHRoZSBpZGxlbGliIGRpcmVjdG9yeSBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4gIFRoZSBkZWZhdWx0IGV4dGVuc2lvbnMKK2FyZSBjdXJyZW50bHk6PC9wPgorPHVsIGNsYXNzPSJzaW1wbGUiPgorPGxpPkZvcm1hdFBhcmFncmFwaDwvbGk+Cis8bGk+QXV0b0V4cGFuZDwvbGk+Cis8bGk+Wm9vbUhlaWdodDwvbGk+Cis8bGk+U2NyaXB0QmluZGluZzwvbGk+Cis8bGk+Q2FsbFRpcHM8L2xpPgorPGxpPlBhcmVuTWF0Y2g8L2xpPgorPGxpPkF1dG9Db21wbGV0ZTwvbGk+Cis8bGk+Q29kZUNvbnRleHQ8L2xpPgorPGxpPlJzdHJpcEV4dGVuc2lvbjwvbGk+Cis8L3VsPgorPC9kaXY+Cis8L2Rpdj4KKzwvZGl2PgorCisKKyAgICAgICAgICA8L2Rpdj4KKyAgICAgICAgPC9kaXY+CisgICAgICA8L2Rpdj4KKyAgICAgIDxkaXYgY2xhc3M9InNwaGlueHNpZGViYXIiPgorICAgICAgICA8ZGl2IGNsYXNzPSJzcGhpbnhzaWRlYmFyd3JhcHBlciI+CisgIDxoMz48YSBocmVmPSIuLi9jb250ZW50cy5odG1sIj5UYWJsZSBPZiBDb250ZW50czwvYT48L2gzPgorICA8dWw+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iIyI+MjUuNS4gSURMRTwvYT48dWw+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI21lbnVzIj4yNS41LjEuIE1lbnVzPC9hPjx1bD4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjZmlsZS1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPjI1LjUuMS4xLiBGaWxlIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2VkaXQtbWVudS1zaGVsbC1hbmQtZWRpdG9yIj4yNS41LjEuMi4gRWRpdCBtZW51IChTaGVsbCBhbmQgRWRpdG9yKTwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNmb3JtYXQtbWVudS1lZGl0b3Itd2luZG93LW9ubHkiPjI1LjUuMS4zLiBGb3JtYXQgbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KTwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNydW4tbWVudS1lZGl0b3Itd2luZG93LW9ubHkiPjI1LjUuMS40LiBSdW4gbWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KTwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNzaGVsbC1tZW51LXNoZWxsLXdpbmRvdy1vbmx5Ij4yNS41LjEuNS4gU2hlbGwgbWVudSAoU2hlbGwgd2luZG93IG9ubHkpPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2RlYnVnLW1lbnUtc2hlbGwtd2luZG93LW9ubHkiPjI1LjUuMS42LiBEZWJ1ZyBtZW51IChTaGVsbCB3aW5kb3cgb25seSk8L2E+PC9saT4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjb3B0aW9ucy1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPjI1LjUuMS43LiBPcHRpb25zIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI3dpbmRvdy1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPjI1LjUuMS44LiBXaW5kb3cgbWVudSAoU2hlbGwgYW5kIEVkaXRvcik8L2E+PC9saT4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjaGVscC1tZW51LXNoZWxsLWFuZC1lZGl0b3IiPjI1LjUuMS45LiBIZWxwIG1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2NvbnRleHQtbWVudXMiPjI1LjUuMS4xMC4gQ29udGV4dCBNZW51czwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2VkaXRpbmctYW5kLW5hdmlnYXRpb24iPjI1LjUuMi4gRWRpdGluZyBhbmQgbmF2aWdhdGlvbjwvYT48dWw+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2F1dG9tYXRpYy1pbmRlbnRhdGlvbiI+MjUuNS4yLjEuIEF1dG9tYXRpYyBpbmRlbnRhdGlvbjwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNjb21wbGV0aW9ucyI+MjUuNS4yLjIuIENvbXBsZXRpb25zPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2NhbGx0aXBzIj4yNS41LjIuMy4gQ2FsbHRpcHM8L2E+PC9saT4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjcHl0aG9uLXNoZWxsLXdpbmRvdyI+MjUuNS4yLjQuIFB5dGhvbiBTaGVsbCB3aW5kb3c8L2E+PC9saT4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjdGV4dC1jb2xvcnMiPjI1LjUuMi41LiBUZXh0IGNvbG9yczwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI3N0YXJ0dXAtYW5kLWNvZGUtZXhlY3V0aW9uIj4yNS41LjMuIFN0YXJ0dXAgYW5kIGNvZGUgZXhlY3V0aW9uPC9hPjx1bD4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjY29tbWFuZC1saW5lLXVzYWdlIj4yNS41LjMuMS4gQ29tbWFuZCBsaW5lIHVzYWdlPC9hPjwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2lkbGUtY29uc29sZS1kaWZmZXJlbmNlcyI+MjUuNS4zLjIuIElETEUtY29uc29sZSBkaWZmZXJlbmNlczwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNydW5uaW5nLXdpdGhvdXQtYS1zdWJwcm9jZXNzIj4yNS41LjMuMy4gUnVubmluZyB3aXRob3V0IGEgc3VicHJvY2VzczwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8bGk+PGEgY2xhc3M9InJlZmVyZW5jZSBpbnRlcm5hbCIgaHJlZj0iI2hlbHAtYW5kLXByZWZlcmVuY2VzIj4yNS41LjQuIEhlbHAgYW5kIHByZWZlcmVuY2VzPC9hPjx1bD4KKzxsaT48YSBjbGFzcz0icmVmZXJlbmNlIGludGVybmFsIiBocmVmPSIjYWRkaXRpb25hbC1oZWxwLXNvdXJjZXMiPjI1LjUuNC4xLiBBZGRpdGlvbmFsIGhlbHAgc291cmNlczwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNzZXR0aW5nLXByZWZlcmVuY2VzIj4yNS41LjQuMi4gU2V0dGluZyBwcmVmZXJlbmNlczwvYT48L2xpPgorPGxpPjxhIGNsYXNzPSJyZWZlcmVuY2UgaW50ZXJuYWwiIGhyZWY9IiNleHRlbnNpb25zIj4yNS41LjQuMy4gRXh0ZW5zaW9uczwvYT48L2xpPgorPC91bD4KKzwvbGk+Cis8L3VsPgorPC9saT4KKzwvdWw+CisKKyAgPGg0PlByZXZpb3VzIHRvcGljPC9oND4KKyAgPHAgY2xhc3M9InRvcGxlc3MiPjxhIGhyZWY9InRraW50ZXIuc2Nyb2xsZWR0ZXh0Lmh0bWwiCisgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0icHJldmlvdXMgY2hhcHRlciI+MjUuNC4gPHR0IGNsYXNzPSJkb2N1dGlscyBsaXRlcmFsIj48c3BhbiBjbGFzcz0icHJlIj50a2ludGVyLnNjcm9sbGVkdGV4dDwvc3Bhbj48L3R0PiAmIzgyMTI7IFNjcm9sbGVkIFRleHQgV2lkZ2V0PC9hPjwvcD4KKyAgPGg0Pk5leHQgdG9waWM8L2g0PgorICA8cCBjbGFzcz0idG9wbGVzcyI+PGEgaHJlZj0ib3RoZXJndWkuaHRtbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJuZXh0IGNoYXB0ZXIiPjI1LjYuIE90aGVyIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZSBQYWNrYWdlczwvYT48L3A+Cis8aDM+VGhpcyBQYWdlPC9oMz4KKzx1bCBjbGFzcz0idGhpcy1wYWdlLW1lbnUiPgorICA8bGk+PGEgaHJlZj0iLi4vYnVncy5odG1sIj5SZXBvcnQgYSBCdWc8L2E+PC9saT4KKyAgPGxpPjxhIGhyZWY9Ii4uL19zb3VyY2VzL2xpYnJhcnkvaWRsZS50eHQiCisgICAgICAgICByZWw9Im5vZm9sbG93Ij5TaG93IFNvdXJjZTwvYT48L2xpPgorPC91bD4KKworPGRpdiBpZD0ic2VhcmNoYm94IiBzdHlsZT0iZGlzcGxheTogbm9uZSI+CisgIDxoMz5RdWljayBzZWFyY2g8L2gzPgorICAgIDxmb3JtIGNsYXNzPSJzZWFyY2giIGFjdGlvbj0iLi4vc2VhcmNoLmh0bWwiIG1ldGhvZD0iZ2V0Ij4KKyAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJxIiAvPgorICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIiAvPgorICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2hlY2tfa2V5d29yZHMiIHZhbHVlPSJ5ZXMiIC8+CisgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhcmVhIiB2YWx1ZT0iZGVmYXVsdCIgLz4KKyAgICA8L2Zvcm0+CisgICAgPHAgY2xhc3M9InNlYXJjaHRpcCIgc3R5bGU9ImZvbnQtc2l6ZTogOTAlIj4KKyAgICBFbnRlciBzZWFyY2ggdGVybXMgb3IgYSBtb2R1bGUsIGNsYXNzIG9yIGZ1bmN0aW9uIG5hbWUuCisgICAgPC9wPgorPC9kaXY+Cis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+JCgnI3NlYXJjaGJveCcpLnNob3coMCk7PC9zY3JpcHQ+CisgICAgICAgIDwvZGl2PgorICAgICAgPC9kaXY+CisgICAgICA8ZGl2IGNsYXNzPSJjbGVhcmVyIj48L2Rpdj4KKyAgICA8L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJyZWxhdGVkIj4KKyAgICAgIDxoMz5OYXZpZ2F0aW9uPC9oMz4KKyAgICAgIDx1bD4KKyAgICAgICAgPGxpIGNsYXNzPSJyaWdodCIgc3R5bGU9Im1hcmdpbi1yaWdodDogMTBweCI+CisgICAgICAgICAgPGEgaHJlZj0iLi4vZ2VuaW5kZXguaHRtbCIgdGl0bGU9IkdlbmVyYWwgSW5kZXgiCisgICAgICAgICAgICAgPmluZGV4PC9hPjwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSIuLi9weS1tb2RpbmRleC5odG1sIiB0aXRsZT0iUHl0aG9uIE1vZHVsZSBJbmRleCIKKyAgICAgICAgICAgICA+bW9kdWxlczwvYT4gfDwvbGk+CisgICAgICAgIDxsaSBjbGFzcz0icmlnaHQiID4KKyAgICAgICAgICA8YSBocmVmPSJvdGhlcmd1aS5odG1sIiB0aXRsZT0iMjUuNi4gT3RoZXIgR3JhcGhpY2FsIFVzZXIgSW50ZXJmYWNlIFBhY2thZ2VzIgorICAgICAgICAgICAgID5uZXh0PC9hPiB8PC9saT4KKyAgICAgICAgPGxpIGNsYXNzPSJyaWdodCIgPgorICAgICAgICAgIDxhIGhyZWY9InRraW50ZXIuc2Nyb2xsZWR0ZXh0Lmh0bWwiIHRpdGxlPSIyNS40LiB0a2ludGVyLnNjcm9sbGVkdGV4dCDigJQgU2Nyb2xsZWQgVGV4dCBXaWRnZXQiCisgICAgICAgICAgICAgPnByZXZpb3VzPC9hPiB8PC9saT4KKyAgICAgICAgPGxpPjxpbWcgc3JjPSIuLi9fc3RhdGljL3B5LnBuZyIgYWx0PSIiCisgICAgICAgICAgICAgICAgIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyBtYXJnaW4tdG9wOiAtMXB4Ii8+PC9saT4KKyAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvIj5QeXRob248L2E+ICZyYXF1bzs8L2xpPgorICAgICAgICA8bGk+CisgICAgICAgICAgPGEgaHJlZj0iLi4vaW5kZXguaHRtbCI+My40LjMgRG9jdW1lbnRhdGlvbjwvYT4gJnJhcXVvOworICAgICAgICA8L2xpPgorCisgICAgICAgICAgPGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiID5UaGUgUHl0aG9uIFN0YW5kYXJkIExpYnJhcnk8L2E+ICZyYXF1bzs8L2xpPgorICAgICAgICAgIDxsaT48YSBocmVmPSJ0ay5odG1sIiA+MjUuIEdyYXBoaWNhbCBVc2VyIEludGVyZmFjZXMgd2l0aCBUazwvYT4gJnJhcXVvOzwvbGk+CisgICAgICA8L3VsPgorICAgIDwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImZvb3RlciI+CisgICAgJmNvcHk7IDxhIGhyZWY9Ii4uL2NvcHlyaWdodC5odG1sIj5Db3B5cmlnaHQ8L2E+IDE5OTAtMjAxNSwgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgICAgPGJyIC8+CisgICAgVGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIGlzIGEgbm9uLXByb2ZpdCBjb3Jwb3JhdGlvbi4KKyAgICA8YSBocmVmPSJodHRwczovL3d3dy5weXRob24ub3JnL3BzZi9kb25hdGlvbnMvIj5QbGVhc2UgZG9uYXRlLjwvYT4KKyAgICA8YnIgLz4KKyAgICBMYXN0IHVwZGF0ZWQgb24gT2N0IDEzLCAyMDE1LgorICAgIDxhIGhyZWY9Ii4uL2J1Z3MuaHRtbCI+Rm91bmQgYSBidWc8L2E+PworICAgIDxiciAvPgorICAgIENyZWF0ZWQgdXNpbmcgPGEgaHJlZj0iaHR0cDovL3NwaGlueC5wb2Nvby5vcmcvIj5TcGhpbng8L2E+IDEuMi4zLgorICAgIDwvZGl2PgorCisgIDwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2hlbHAucHkgYi9MaWIvaWRsZWxpYi9oZWxwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTU5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9oZWxwLnB5CkBAIC0wLDAgKzEsMjQ5IEBACisiIiIgaGVscC5weTogSW1wbGVtZW50IHRoZSBJZGxlIGhlbHAgbWVudS4KK0NvbnRlbnRzIGFyZSBzdWJqZWN0IHRvIHJldmlzaW9uIGF0IGFueSB0aW1lLCB3aXRob3V0IG5vdGljZS4KKworCitIZWxwID0+IEFib3V0IElETEU6IGRpcGxheSBBYm91dCBJZGxlIGRpYWxvZworCis8dG8gYmUgbW92ZWQgaGVyZSBmcm9tIGFib3V0RGlhbG9nLnB5PgorCisKK0hlbHAgPT4gSURMRSBIZWxwOiBEaXNwbGF5IGhlbHAuaHRtbCB3aXRoIHByb3BlciBmb3JtYXR0aW5nLgorRG9jL2xpYnJhcnkvaWRsZS5yc3QgKFNwaGlueCk9PiBEb2MvYnVpbGQvaHRtbC9saWJyYXJ5L2lkbGUuaHRtbAorKGhlbHAuY29weV9zdHJpcCk9PiBMaWIvaWRsZWxpYi9oZWxwLmh0bWwKKworSGVscFBhcnNlciAtIFBhcnNlIGhlbHAuaHRtbCBhbmQgYW5kIHJlbmRlciB0byB0ayBUZXh0LgorCitIZWxwVGV4dCAtIERpc3BsYXkgZm9ybWF0dGVkIGhlbHAuaHRtbC4KKworSGVscEZyYW1lIC0gQ29udGFpbiB0ZXh0LCBzY3JvbGxiYXIsIGFuZCB0YWJsZS1vZi1jb250ZW50cy4KKyhUaGlzIHdpbGwgYmUgbmVlZGVkIGZvciBkaXNwbGF5IGluIGEgZnV0dXJlIHRhYmJlZCB3aW5kb3cuKQorCitIZWxwV2luZG93IC0gRGlzcGxheSBIZWxwRnJhbWUgaW4gYSBzdGFuZGFsb25lIHdpbmRvdy4KKworY29weV9zdHJpcCAtIENvcHkgaWRsZS5odG1sIHRvIGhlbHAuaHRtbCwgcnN0cmlwcGluZyBlYWNoIGxpbmUuCisKK3Nob3dfaWRsZWhlbHAgLSBDcmVhdGUgSGVscFdpbmRvdy4gIENhbGxlZCBpbiBFZGl0b3JXaW5kb3cuaGVscF9kaWFsb2cuCisiIiIKK2Zyb20gaHRtbC5wYXJzZXIgaW1wb3J0IEhUTUxQYXJzZXIKK2Zyb20gb3MucGF0aCBpbXBvcnQgYWJzcGF0aCwgZGlybmFtZSwgaXNkaXIsIGlzZmlsZSwgam9pbgorZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVG9wbGV2ZWwsIEZyYW1lLCBUZXh0LCBTY3JvbGxiYXIsIE1lbnUsIE1lbnVidXR0b24KK2Zyb20gdGtpbnRlciBpbXBvcnQgZm9udCBhcyB0a2ZvbnQKK2Zyb20gaWRsZWxpYi5jb25maWdIYW5kbGVyIGltcG9ydCBpZGxlQ29uZgorCit1c2VfdHRrID0gRmFsc2UgIyB1bnRpbCBhdmFpbGFibGUgdG8gaW1wb3J0CitpZiB1c2VfdHRrOgorICAgIGZyb20gdGtpbnRlci50dGsgaW1wb3J0IE1lbnVidXR0b24KKworIyMgQWJvdXQgSURMRSAjIworCisKKyMjIElETEUgSGVscCAjIworCitjbGFzcyBIZWxwUGFyc2VyKEhUTUxQYXJzZXIpOgorICAgICIiIlJlbmRlciBoZWxwLmh0bWwgaW50byBhIHRleHQgd2lkZ2V0LgorCisgICAgVGhlIG92ZXJyaWRkZW4gaGFuZGxlX3h5eiBtZXRob2RzIGhhbmRsZSBhIHN1YnNldCBvZiBodG1sIHRhZ3MuCisgICAgVGhlIHN1cHBsaWVkIHRleHQgc2hvdWxkIGhhdmUgdGhlIG5lZWRlZCB0YWcgY29uZmlndXJhdGlvbnMuCisgICAgVGhlIGJlaGF2aW9yIGZvciB1bnN1cHBvcnRlZCB0YWdzLCBzdWNoIGFzIHRhYmxlLCBpcyB1bmRlZmluZWQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgorICAgICAgICBIVE1MUGFyc2VyLl9faW5pdF9fKHNlbGYsIGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZSkKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dCAgICAgICAgICMgdGV4dCB3aWRnZXQgd2UncmUgcmVuZGVyaW5nIGludG8KKyAgICAgICAgc2VsZi50YWdzID0gJycgICAgICAgICAgICMgY3VycmVudCBibG9jayBsZXZlbCB0ZXh0IHRhZ3MgdG8gYXBwbHkKKyAgICAgICAgc2VsZi5jaGFydGFncyA9ICcnICAgICAgICMgY3VycmVudCBjaGFyYWN0ZXIgbGV2ZWwgdGV4dCB0YWdzCisgICAgICAgIHNlbGYuc2hvdyA9IEZhbHNlICAgICAgICAjIHVzZWQgc28gd2UgZXhjbHVkZSBwYWdlIG5hdmlnYXRpb24KKyAgICAgICAgc2VsZi5oZHJsaW5rID0gRmFsc2UgICAgICMgdXNlZCBzbyB3ZSBkb24ndCBzaG93IGhlYWRlciBsaW5rcworICAgICAgICBzZWxmLmxldmVsID0gMCAgICAgICAgICAgIyBpbmRlbnRhdGlvbiBsZXZlbAorICAgICAgICBzZWxmLnByZSA9IEZhbHNlICAgICAgICAgIyBkaXNwbGF5aW5nIHByZWZvcm1hdHRlZCB0ZXh0CisgICAgICAgIHNlbGYuaHByZWZpeCA9ICcnICAgICAgICAjIHByZWZpeCBzdWNoIGFzICcyNS41JyB0byBzdHJpcCBmcm9tIGhlYWRpbmdzCisgICAgICAgIHNlbGYubmVzdGVkX2RsID0gRmFsc2UgICAjIGlmIHdlJ3JlIGluIGEgbmVzdGVkIDxkbD4KKyAgICAgICAgc2VsZi5zaW1wbGVsaXN0ID0gRmFsc2UgICMgc2ltcGxlIGxpc3QgKG5vIGRvdWJsZSBzcGFjaW5nKQorICAgICAgICBzZWxmLnRvYyA9IFtdICAgICAgICAgICAgIyBwYWlyIGhlYWRlcnMgd2l0aCB0ZXh0IGluZGV4ZXMgZm9yIHRvYworICAgICAgICBzZWxmLmhlYWRlciA9ICcnICAgICAgICAgIyB0ZXh0IHdpdGhpbiBoZWFkZXIgdGFncyBmb3IgdG9jCisKKyAgICBkZWYgaW5kZW50KHNlbGYsIGFtdD0xKToKKyAgICAgICAgc2VsZi5sZXZlbCArPSBhbXQKKyAgICAgICAgc2VsZi50YWdzID0gJycgaWYgc2VsZi5sZXZlbCA9PSAwIGVsc2UgJ2wnK3N0cihzZWxmLmxldmVsKQorCisgICAgZGVmIGhhbmRsZV9zdGFydHRhZyhzZWxmLCB0YWcsIGF0dHJzKToKKyAgICAgICAgIkhhbmRsZSBzdGFydHRhZ3MgaW4gaGVscC5odG1sLiIKKyAgICAgICAgY2xhc3NfID0gJycKKyAgICAgICAgZm9yIGEsIHYgaW4gYXR0cnM6CisgICAgICAgICAgICBpZiBhID09ICdjbGFzcyc6CisgICAgICAgICAgICAgICAgY2xhc3NfID0gdgorICAgICAgICBzID0gJycKKyAgICAgICAgaWYgdGFnID09ICdkaXYnIGFuZCBjbGFzc18gPT0gJ3NlY3Rpb24nOgorICAgICAgICAgICAgc2VsZi5zaG93ID0gVHJ1ZSAgICAjIHN0YXJ0IG9mIG1haW4gY29udGVudAorICAgICAgICBlbGlmIHRhZyA9PSAnZGl2JyBhbmQgY2xhc3NfID09ICdzcGhpbnhzaWRlYmFyJzoKKyAgICAgICAgICAgIHNlbGYuc2hvdyA9IEZhbHNlICAgIyBlbmQgb2YgbWFpbiBjb250ZW50CisgICAgICAgIGVsaWYgdGFnID09ICdwJyBhbmQgY2xhc3NfICE9ICdmaXJzdCc6CisgICAgICAgICAgICBzID0gJ1xuXG4nCisgICAgICAgIGVsaWYgdGFnID09ICdzcGFuJyBhbmQgY2xhc3NfID09ICdwcmUnOgorICAgICAgICAgICAgc2VsZi5jaGFydGFncyA9ICdwcmUnCisgICAgICAgIGVsaWYgdGFnID09ICdzcGFuJyBhbmQgY2xhc3NfID09ICd2ZXJzaW9ubW9kaWZpZWQnOgorICAgICAgICAgICAgc2VsZi5jaGFydGFncyA9ICdlbScKKyAgICAgICAgZWxpZiB0YWcgPT0gJ2VtJzoKKyAgICAgICAgICAgIHNlbGYuY2hhcnRhZ3MgPSAnZW0nCisgICAgICAgIGVsaWYgdGFnIGluIFsndWwnLCAnb2wnXToKKyAgICAgICAgICAgIGlmIGNsYXNzXy5maW5kKCdzaW1wbGUnKSAhPSAtMToKKyAgICAgICAgICAgICAgICBzID0gJ1xuJworICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlbGlzdCA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVsaXN0ID0gRmFsc2UKKyAgICAgICAgICAgIHNlbGYuaW5kZW50KCkKKyAgICAgICAgZWxpZiB0YWcgPT0gJ2RsJzoKKyAgICAgICAgICAgIGlmIHNlbGYubGV2ZWwgPiAwOgorICAgICAgICAgICAgICAgIHNlbGYubmVzdGVkX2RsID0gVHJ1ZQorICAgICAgICBlbGlmIHRhZyA9PSAnbGknOgorICAgICAgICAgICAgcyA9ICdcbiogJyBpZiBzZWxmLnNpbXBsZWxpc3QgZWxzZSAnXG5cbiogJworICAgICAgICBlbGlmIHRhZyA9PSAnZHQnOgorICAgICAgICAgICAgcyA9ICdcblxuJyBpZiBub3Qgc2VsZi5uZXN0ZWRfZGwgZWxzZSAnXG4nICAjIGF2b2lkIGV4dHJhIGxpbmUKKyAgICAgICAgICAgIHNlbGYubmVzdGVkX2RsID0gRmFsc2UKKyAgICAgICAgZWxpZiB0YWcgPT0gJ2RkJzoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50KCkKKyAgICAgICAgICAgIHMgPSAnXG4nCisgICAgICAgIGVsaWYgdGFnID09ICdwcmUnOgorICAgICAgICAgICAgc2VsZi5wcmUgPSBUcnVlCisgICAgICAgICAgICBpZiBzZWxmLnNob3c6CisgICAgICAgICAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnZW5kJywgJ1xuXG4nKQorICAgICAgICAgICAgc2VsZi50YWdzID0gJ3ByZWJsb2NrJworICAgICAgICBlbGlmIHRhZyA9PSAnYScgYW5kIGNsYXNzXyA9PSAnaGVhZGVybGluayc6CisgICAgICAgICAgICBzZWxmLmhkcmxpbmsgPSBUcnVlCisgICAgICAgIGVsaWYgdGFnID09ICdoMSc6CisgICAgICAgICAgICBzZWxmLnRhZ3MgPSB0YWcKKyAgICAgICAgZWxpZiB0YWcgaW4gWydoMicsICdoMyddOgorICAgICAgICAgICAgaWYgc2VsZi5zaG93OgorICAgICAgICAgICAgICAgIHNlbGYuaGVhZGVyID0gJycKKyAgICAgICAgICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCdlbmQnLCAnXG5cbicpCisgICAgICAgICAgICBzZWxmLnRhZ3MgPSB0YWcKKyAgICAgICAgaWYgc2VsZi5zaG93OgorICAgICAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnZW5kJywgcywgKHNlbGYudGFncywgc2VsZi5jaGFydGFncykpCisKKyAgICBkZWYgaGFuZGxlX2VuZHRhZyhzZWxmLCB0YWcpOgorICAgICAgICAiSGFuZGxlIGVuZHRhZ3MgaW4gaGVscC5odG1sLiIKKyAgICAgICAgaWYgdGFnIGluIFsnaDEnLCAnaDInLCAnaDMnXToKKyAgICAgICAgICAgIHNlbGYuaW5kZW50KDApICAjIGNsZWFyIHRhZywgcmVzZXQgaW5kZW50CisgICAgICAgICAgICBpZiBzZWxmLnNob3c6CisgICAgICAgICAgICAgICAgc2VsZi50b2MuYXBwZW5kKChzZWxmLmhlYWRlciwgc2VsZi50ZXh0LmluZGV4KCdpbnNlcnQnKSkpCisgICAgICAgIGVsaWYgdGFnIGluIFsnc3BhbicsICdlbSddOgorICAgICAgICAgICAgc2VsZi5jaGFydGFncyA9ICcnCisgICAgICAgIGVsaWYgdGFnID09ICdhJzoKKyAgICAgICAgICAgIHNlbGYuaGRybGluayA9IEZhbHNlCisgICAgICAgIGVsaWYgdGFnID09ICdwcmUnOgorICAgICAgICAgICAgc2VsZi5wcmUgPSBGYWxzZQorICAgICAgICAgICAgc2VsZi50YWdzID0gJycKKyAgICAgICAgZWxpZiB0YWcgaW4gWyd1bCcsICdkZCcsICdvbCddOgorICAgICAgICAgICAgc2VsZi5pbmRlbnQoYW10PS0xKQorCisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICAiSGFuZGxlIGRhdGUgc2VnbWVudHMgaW4gaGVscC5odG1sLiIKKyAgICAgICAgaWYgc2VsZi5zaG93IGFuZCBub3Qgc2VsZi5oZHJsaW5rOgorICAgICAgICAgICAgZCA9IGRhdGEgaWYgc2VsZi5wcmUgZWxzZSBkYXRhLnJlcGxhY2UoJ1xuJywgJyAnKQorICAgICAgICAgICAgaWYgc2VsZi50YWdzID09ICdoMSc6CisgICAgICAgICAgICAgICAgc2VsZi5ocHJlZml4ID0gZFswOmQuaW5kZXgoJyAnKV0KKyAgICAgICAgICAgIGlmIHNlbGYudGFncyBpbiBbJ2gxJywgJ2gyJywgJ2gzJ10gYW5kIHNlbGYuaHByZWZpeCAhPSAnJzoKKyAgICAgICAgICAgICAgICBpZiBkWzA6bGVuKHNlbGYuaHByZWZpeCldID09IHNlbGYuaHByZWZpeDoKKyAgICAgICAgICAgICAgICAgICAgZCA9IGRbbGVuKHNlbGYuaHByZWZpeCk6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgc2VsZi5oZWFkZXIgKz0gZAorICAgICAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnZW5kJywgZCwgKHNlbGYudGFncywgc2VsZi5jaGFydGFncykpCisKKworY2xhc3MgSGVscFRleHQoVGV4dCk6CisgICAgIkRpc3BsYXkgaGVscC5odG1sLiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCBmaWxlbmFtZSk6CisgICAgICAgICJDb25maWd1cmUgdGFncyBhbmQgZmVlZCBmaWxlIHRvIHBhcnNlci4iCisgICAgICAgIHV3aWRlID0gaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICd3aWR0aCcsIHR5cGU9J2ludCcpCisgICAgICAgIHVoaWdoID0gaWRsZUNvbmYuR2V0T3B0aW9uKCdtYWluJywgJ0VkaXRvcldpbmRvdycsICdoZWlnaHQnLCB0eXBlPSdpbnQnKQorICAgICAgICB1aGlnaCA9IDMgKiB1aGlnaCAvLyA0ICAjIGxpbmVzIGF2ZXJhZ2UgNC8zIG9mIGVkaXRvciBsaW5lIGhlaWdodAorICAgICAgICBUZXh0Ll9faW5pdF9fKHNlbGYsIHBhcmVudCwgd3JhcD0nd29yZCcsIGhpZ2hsaWdodHRoaWNrbmVzcz0wLAorICAgICAgICAgICAgICAgICAgICAgIHBhZHg9NSwgYm9yZGVyd2lkdGg9MCwgd2lkdGg9dXdpZGUsIGhlaWdodD11aGlnaCkKKworICAgICAgICBub3JtYWxmb250ID0gc2VsZi5maW5kZm9udChbJ1RrRGVmYXVsdEZvbnQnLCAnYXJpYWwnLCAnaGVsdmV0aWNhJ10pCisgICAgICAgIGZpeGVkZm9udCA9IHNlbGYuZmluZGZvbnQoWydUa0ZpeGVkRm9udCcsICdtb25hY28nLCAnY291cmllciddKQorICAgICAgICBzZWxmWydmb250J10gPSAobm9ybWFsZm9udCwgMTIpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnZW0nLCBmb250PShub3JtYWxmb250LCAxMiwgJ2l0YWxpYycpKQorICAgICAgICBzZWxmLnRhZ19jb25maWd1cmUoJ2gxJywgZm9udD0obm9ybWFsZm9udCwgMjAsICdib2xkJykpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnaDInLCBmb250PShub3JtYWxmb250LCAxOCwgJ2JvbGQnKSkKKyAgICAgICAgc2VsZi50YWdfY29uZmlndXJlKCdoMycsIGZvbnQ9KG5vcm1hbGZvbnQsIDE1LCAnYm9sZCcpKQorICAgICAgICBzZWxmLnRhZ19jb25maWd1cmUoJ3ByZScsIGZvbnQ9KGZpeGVkZm9udCwgMTIpLCBiYWNrZ3JvdW5kPScjZjZmNmZmJykKKyAgICAgICAgc2VsZi50YWdfY29uZmlndXJlKCdwcmVibG9jaycsIGZvbnQ9KGZpeGVkZm9udCwgMTApLCBsbWFyZ2luMT0yNSwKKyAgICAgICAgICAgICAgICBib3JkZXJ3aWR0aD0xLCByZWxpZWY9J3NvbGlkJywgYmFja2dyb3VuZD0nI2VlZmZjYycpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnbDEnLCBsbWFyZ2luMT0yNSwgbG1hcmdpbjI9MjUpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnbDInLCBsbWFyZ2luMT01MCwgbG1hcmdpbjI9NTApCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnbDMnLCBsbWFyZ2luMT03NSwgbG1hcmdpbjI9NzUpCisgICAgICAgIHNlbGYudGFnX2NvbmZpZ3VyZSgnbDQnLCBsbWFyZ2luMT0xMDAsIGxtYXJnaW4yPTEwMCkKKworICAgICAgICBzZWxmLnBhcnNlciA9IEhlbHBQYXJzZXIoc2VsZikKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCBlbmNvZGluZz0ndXRmLTgnKSBhcyBmOgorICAgICAgICAgICAgY29udGVudHMgPSBmLnJlYWQoKQorICAgICAgICBzZWxmLnBhcnNlci5mZWVkKGNvbnRlbnRzKQorICAgICAgICBzZWxmWydzdGF0ZSddID0gJ2Rpc2FibGVkJworCisgICAgZGVmIGZpbmRmb250KHNlbGYsIG5hbWVzKToKKyAgICAgICAgIlJldHVybiBuYW1lIG9mIGZpcnN0IGZvbnQgZmFtaWx5IGRlcml2ZWQgZnJvbSBuYW1lcy4iCisgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgorICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpIGluICh4Lmxvd2VyKCkgZm9yIHggaW4gdGtmb250Lm5hbWVzKHJvb3Q9c2VsZikpOgorICAgICAgICAgICAgICAgIGZvbnQgPSB0a2ZvbnQuRm9udChuYW1lPW5hbWUsIGV4aXN0cz1UcnVlLCByb290PXNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZvbnQuYWN0dWFsKClbJ2ZhbWlseSddCisgICAgICAgICAgICBlbGlmIG5hbWUubG93ZXIoKSBpbiAoeC5sb3dlcigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHggaW4gdGtmb250LmZhbWlsaWVzKHJvb3Q9c2VsZikpOgorICAgICAgICAgICAgICAgIHJldHVybiBuYW1lCisKKworY2xhc3MgSGVscEZyYW1lKEZyYW1lKToKKyAgICAiRGlzcGxheSBodG1sIHRleHQsIHNjcm9sbGJhciwgYW5kIHRvYy4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgZmlsZW5hbWUpOgorICAgICAgICBGcmFtZS5fX2luaXRfXyhzZWxmLCBwYXJlbnQpCisgICAgICAgIHRleHQgPSBIZWxwVGV4dChzZWxmLCBmaWxlbmFtZSkKKyAgICAgICAgc2VsZlsnYmFja2dyb3VuZCddID0gdGV4dFsnYmFja2dyb3VuZCddCisgICAgICAgIHNjcm9sbCA9IFNjcm9sbGJhcihzZWxmLCBjb21tYW5kPXRleHQueXZpZXcpCisgICAgICAgIHRleHRbJ3lzY3JvbGxjb21tYW5kJ10gPSBzY3JvbGwuc2V0CisgICAgICAgIHNlbGYucm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICBzZWxmLmNvbHVtbmNvbmZpZ3VyZSgxLCB3ZWlnaHQ9MSkgICMgdGV4dAorICAgICAgICBzZWxmLnRvY19tZW51KHRleHQpLmdyaWQoY29sdW1uPTAsIHJvdz0wLCBzdGlja3k9J253JykKKyAgICAgICAgdGV4dC5ncmlkKGNvbHVtbj0xLCByb3c9MCwgc3RpY2t5PSduc2V3JykKKyAgICAgICAgc2Nyb2xsLmdyaWQoY29sdW1uPTIsIHJvdz0wLCBzdGlja3k9J25zJykKKworICAgIGRlZiB0b2NfbWVudShzZWxmLCB0ZXh0KToKKyAgICAgICAgIkNyZWF0ZSB0YWJsZSBvZiBjb250ZW50cyBhcyBkcm9wLWRvd24gbWVudS4iCisgICAgICAgIHRvYyA9IE1lbnVidXR0b24oc2VsZiwgdGV4dD0nVE9DJykKKyAgICAgICAgZHJvcCA9IE1lbnUodG9jLCB0ZWFyb2ZmPUZhbHNlKQorICAgICAgICBmb3IgbGJsLCBkZXggaW4gdGV4dC5wYXJzZXIudG9jOgorICAgICAgICAgICAgZHJvcC5hZGRfY29tbWFuZChsYWJlbD1sYmwsIGNvbW1hbmQ9bGFtYmRhIGRleD1kZXg6dGV4dC55dmlldyhkZXgpKQorICAgICAgICB0b2NbJ21lbnUnXSA9IGRyb3AKKyAgICAgICAgcmV0dXJuIHRvYworCisKK2NsYXNzIEhlbHBXaW5kb3coVG9wbGV2ZWwpOgorICAgICJEaXNwbGF5IGZyYW1lIHdpdGggcmVuZGVyZWQgaHRtbC4iCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgZmlsZW5hbWUsIHRpdGxlKToKKyAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQorICAgICAgICBzZWxmLndtX3RpdGxlKHRpdGxlKQorICAgICAgICBzZWxmLnByb3RvY29sKCJXTV9ERUxFVEVfV0lORE9XIiwgc2VsZi5kZXN0cm95KQorICAgICAgICBIZWxwRnJhbWUoc2VsZiwgZmlsZW5hbWUpLmdyaWQoY29sdW1uPTAsIHJvdz0wLCBzdGlja3k9J25zZXcnKQorICAgICAgICBzZWxmLmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0xKQorICAgICAgICBzZWxmLmdyaWRfcm93Y29uZmlndXJlKDAsIHdlaWdodD0xKQorCisKK2RlZiBjb3B5X3N0cmlwKCk6CisgICAgIkNvcHkgaWRsZS5odG1sIHRvIGlkbGVsaWIvaGVscC5odG1sLCBzdHJpcHBpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4iCisgICAgc3JjID0gam9pbihhYnNwYXRoKGRpcm5hbWUoZGlybmFtZShkaXJuYW1lKF9fZmlsZV9fKSkpKSwKKyAgICAgICAgICAgICAgICdEb2MnLCAnYnVpbGQnLCAnaHRtbCcsICdsaWJyYXJ5JywgJ2lkbGUuaHRtbCcpCisgICAgZHN0ID0gam9pbihhYnNwYXRoKGRpcm5hbWUoX19maWxlX18pKSwgJ2hlbHAuaHRtbCcpCisgICAgd2l0aCBvcGVuKHNyYywgJ3JiJykgYXMgaW5uLFwKKyAgICAgICAgIG9wZW4oZHN0LCAnd2InKSBhcyBvdXQ6CisgICAgICAgIGZvciBsaW5lIGluIGlubjoKKyAgICAgICAgICAgIG91dC53cml0ZShsaW5lLnJzdHJpcCgpICsgYidcbicpCisgICAgcHJpbnQoJ2lkbGUuaHRtbCBjb3BpZWQgdG8gaGVscC5odG1sJykKKworZGVmIHNob3dfaWRsZWhlbHAocGFyZW50KToKKyAgICAiQ3JlYXRlIEhlbHBXaW5kb3c7IGNhbGxlZCBmcm9tIElkbGUgSGVscCBldmVudCBoYW5kbGVyLiIKKyAgICBmaWxlbmFtZSA9IGpvaW4oYWJzcGF0aChkaXJuYW1lKF9fZmlsZV9fKSksICdoZWxwLmh0bWwnKQorICAgIGlmIG5vdCBpc2ZpbGUoZmlsZW5hbWUpOgorICAgICAgICAjIHRyeSBjb3B5X3N0cmlwLCBwcmVzZW50IG1lc3NhZ2UKKyAgICAgICAgcmV0dXJuCisgICAgSGVscFdpbmRvdyhwYXJlbnQsIGZpbGVuYW1lLCAnSURMRSBIZWxwJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oc2hvd19pZGxlaGVscCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2hlbHAudHh0IGIvTGliL2lkbGVsaWIvaGVscC50eHQKaW5kZXggZmY3ODZjNS4uODlmYmUwYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaGVscC50eHQKKysrIGIvTGliL2lkbGVsaWIvaGVscC50eHQKQEAgLTEsMTQyICsxLDE4OSBAQAorVGhpcyBmaWxlLCBpZGxlbGliL2hlbHAudHh0IGlzIG91dC1vZi1kYXRlIGFuZCBubyBsb25nZXIgdXNlZCBieSBJZGxlLgorSXQgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUsIHBvc3NpYmx5IGluIDMuNgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBbU2VlIHRoZSBlbmQgb2YgdGhpcyBmaWxlIGZvciAqKiBUSVBTICoqIG9uIHVzaW5nIElETEUgISFdCiAKLUNsaWNrIG9uIHRoZSBkb3R0ZWQgbGluZSBhdCB0aGUgdG9wIG9mIGEgbWVudSB0byAidGVhciBpdCBvZmYiOiBhCi1zZXBhcmF0ZSB3aW5kb3cgY29udGFpbmluZyB0aGUgbWVudSBpcyBjcmVhdGVkLgorSURMRSBpcyB0aGUgUHl0aG9uIElERSBidWlsdCB3aXRoIHRoZSB0a2ludGVyIEdVSSB0b29sa2l0LgogCi1GaWxlIE1lbnU6CitJRExFIGhhcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzOgorLWNvZGVkIGluIDEwMCUgcHVyZSBQeXRob24sIHVzaW5nIHRoZSB0a2ludGVyIEdVSSB0b29sa2l0CistY3Jvc3MtcGxhdGZvcm06IHdvcmtzIG9uIFdpbmRvd3MsIFVuaXgsIGFuZCBPUyBYCistbXVsdGktd2luZG93IHRleHQgZWRpdG9yIHdpdGggbXVsdGlwbGUgdW5kbywgUHl0aG9uIGNvbG9yaXppbmcsIHNtYXJ0IGluZGVudCwKK2NhbGwgdGlwcywgYW5kIG1hbnkgb3RoZXIgZmVhdHVyZXMKKy1QeXRob24gc2hlbGwgd2luZG93IChhLmsuYSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlcikKKy1kZWJ1Z2dlciAobm90IGNvbXBsZXRlLCBidXQgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMsIHZpZXcgYW5kIHN0ZXApCiAKLQlOZXcgRmlsZSAgICAgICAgIC0tIENyZWF0ZSBhIG5ldyBmaWxlIGVkaXRpbmcgd2luZG93Ci0JT3Blbi4uLiAgICAgICAgICAtLSBPcGVuIGFuIGV4aXN0aW5nIGZpbGUKLQlSZWNlbnQgRmlsZXMuLi4gIC0tIE9wZW4gYSBsaXN0IG9mIHJlY2VudCBmaWxlcwotCU9wZW4gTW9kdWxlLi4uICAgLS0gT3BlbiBhbiBleGlzdGluZyBtb2R1bGUgKHNlYXJjaGVzIHN5cy5wYXRoKQotCUNsYXNzIEJyb3dzZXIgICAgLS0gU2hvdyBjbGFzc2VzIGFuZCBtZXRob2RzIGluIGN1cnJlbnQgZmlsZQotCVBhdGggQnJvd3NlciAgICAgLS0gU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcworTWVudXM6CisKK0lETEUgaGFzIHR3byB3aW5kb3cgdHlwZXMgdGhlIFNoZWxsIHdpbmRvdyBhbmQgdGhlIEVkaXRvciB3aW5kb3cuIEl0IGlzCitwb3NzaWJsZSB0byBoYXZlIG11bHRpcGxlIGVkaXRvciB3aW5kb3dzIHNpbXVsdGFuZW91c2x5LiBJRExFJ3MKK21lbnVzIGR5bmFtaWNhbGx5IGNoYW5nZSBiYXNlZCBvbiB3aGljaCB3aW5kb3cgaXMgY3VycmVudGx5IHNlbGVjdGVkLiBFYWNoIG1lbnUKK2RvY3VtZW50ZWQgYmVsb3cgaW5kaWNhdGVzIHdoaWNoIHdpbmRvdyB0eXBlIGl0IGlzIGFzc29jaWF0ZWQgd2l0aC4gCisKK0ZpbGUgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CisKKyAgICAgICAgTmV3IEZpbGUgICAgICAgICAtLSBDcmVhdGUgYSBuZXcgZmlsZSBlZGl0aW5nIHdpbmRvdworICAgICAgICBPcGVuLi4uICAgICAgICAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgZmlsZQorICAgICAgICBPcGVuIE1vZHVsZS4uLiAgIC0tIE9wZW4gYW4gZXhpc3RpbmcgbW9kdWxlIChzZWFyY2hlcyBzeXMucGF0aCkKKyAgICAgICAgUmVjZW50IEZpbGVzLi4uICAtLSBPcGVuIGEgbGlzdCBvZiByZWNlbnQgZmlsZXMKKyAgICAgICAgQ2xhc3MgQnJvd3NlciAgICAtLSBTaG93IGNsYXNzZXMgYW5kIG1ldGhvZHMgaW4gY3VycmVudCBmaWxlCisgICAgICAgIFBhdGggQnJvd3NlciAgICAgLS0gU2hvdyBzeXMucGF0aCBkaXJlY3RvcmllcywgbW9kdWxlcywgY2xhc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgbWV0aG9kcwotCS0tLQotCVNhdmUgICAgICAgICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byB0aGUgYXNzb2NpYXRlZCBmaWxlICh1bnNhdmVkCi0JCSAgICAgICAgICAgIHdpbmRvd3MgaGF2ZSBhICogYmVmb3JlIGFuZCBhZnRlciB0aGUgd2luZG93IHRpdGxlKQorICAgICAgICAtLS0KKyAgICAgICAgU2F2ZSAgICAgICAgICAgICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIHRoZSBhc3NvY2lhdGVkIGZpbGUgKHVuc2F2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzIGhhdmUgYSAqIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIHdpbmRvdyB0aXRsZSkKIAotCVNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcwotCQkgICAgICAgICAgICB0aGUgYXNzb2NpYXRlZCBmaWxlCi0JU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCi0JCSAgICAgICAgICAgIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFzc29jaWF0ZWQgZmlsZQotCS0tLQotCVByaW50IFdpbmRvdyAgICAgLS0gUHJpbnQgdGhlIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCi0JRXhpdCAgICAgICAgICAgICAtLSBDbG9zZSBhbGwgd2luZG93cywgcXVpdCAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIFNhdmUgQXMuLi4gICAgICAgLS0gU2F2ZSBjdXJyZW50IHdpbmRvdyB0byBuZXcgZmlsZSwgd2hpY2ggYmVjb21lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIGZpbGUKKyAgICAgICAgU2F2ZSBDb3B5IEFzLi4uICAtLSBTYXZlIGN1cnJlbnQgd2luZG93IHRvIGRpZmZlcmVudCBmaWxlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCBmaWxlCisgICAgICAgIC0tLQorICAgICAgICBQcmludCBXaW5kb3cgICAgIC0tIFByaW50IHRoZSBjdXJyZW50IHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2xvc2UgICAgICAgICAgICAtLSBDbG9zZSBjdXJyZW50IHdpbmRvdyAoYXNrcyB0byBzYXZlIGlmIHVuc2F2ZWQpCisgICAgICAgIEV4aXQgICAgICAgICAgICAgLS0gQ2xvc2UgYWxsIHdpbmRvd3MsIHF1aXQgKGFza3MgdG8gc2F2ZSBpZiB1bnNhdmVkKQogCi1FZGl0IE1lbnU6CitFZGl0IE1lbnUgKFNoZWxsIGFuZCBFZGl0b3IpOgogCi0JVW5kbyAgICAgICAgICAgICAtLSBVbmRvIGxhc3QgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKEEgbWF4aW11bSBvZiAxMDAwIGNoYW5nZXMgbWF5IGJlIHVuZG9uZSkKLQlSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93Ci0JLS0tCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBVbmRvICAgICAgICAgICAgIC0tIFVuZG8gbGFzdCBjaGFuZ2UgdG8gY3VycmVudCB3aW5kb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYSBtYXhpbXVtIG9mIDEwMDAgY2hhbmdlcyBtYXkgYmUgdW5kb25lKQorICAgICAgICBSZWRvICAgICAgICAgICAgIC0tIFJlZG8gbGFzdCB1bmRvbmUgY2hhbmdlIHRvIGN1cnJlbnQgd2luZG93CisgICAgICAgIC0tLQorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQlTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgotCS0tLQotCUZpbmQuLi4gICAgICAgICAgLS0gT3BlbiBhIHNlYXJjaCBkaWFsb2cgYm94IHdpdGggbWFueSBvcHRpb25zCi0JRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKLQlGaW5kIFNlbGVjdGlvbiAgIC0tIFNlYXJjaCBmb3IgdGhlIHN0cmluZyBpbiB0aGUgc2VsZWN0aW9uCi0JRmluZCBpbiBGaWxlcy4uLiAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggZm9yIHNlYXJjaGluZyBmaWxlcwotCVJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94Ci0JR28gdG8gTGluZSAgICAgICAtLSBBc2sgZm9yIGEgbGluZSBudW1iZXIgYW5kIHNob3cgdGhhdCBsaW5lCi0JU2hvdyBDYWxsdGlwICAgICAtLSBPcGVuIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW0gaGludHMKLQlTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcwotCQkJICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKLQlTaG93IFBhcmVucwkgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcwotCUV4cGFuZCBXb3JkICAgICAgLS0gRXhwYW5kIHRoZSB3b3JkIHlvdSBoYXZlIHR5cGVkIHRvIG1hdGNoIGFub3RoZXIKLQkJICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICBTZWxlY3QgQWxsICAgICAgIC0tIFNlbGVjdCB0aGUgZW50aXJlIGNvbnRlbnRzIG9mIHRoZSBlZGl0IGJ1ZmZlcgorICAgICAgICAtLS0KKyAgICAgICAgRmluZC4uLiAgICAgICAgICAtLSBPcGVuIGEgc2VhcmNoIGRpYWxvZyBib3ggd2l0aCBtYW55IG9wdGlvbnMKKyAgICAgICAgRmluZCBBZ2FpbiAgICAgICAtLSBSZXBlYXQgbGFzdCBzZWFyY2gKKyAgICAgICAgRmluZCBTZWxlY3Rpb24gICAtLSBTZWFyY2ggZm9yIHRoZSBzdHJpbmcgaW4gdGhlIHNlbGVjdGlvbgorICAgICAgICBGaW5kIGluIEZpbGVzLi4uIC0tIE9wZW4gYSBzZWFyY2ggZGlhbG9nIGJveCBmb3Igc2VhcmNoaW5nIGZpbGVzCisgICAgICAgIFJlcGxhY2UuLi4gICAgICAgLS0gT3BlbiBhIHNlYXJjaC1hbmQtcmVwbGFjZSBkaWFsb2cgYm94CisgICAgICAgIEdvIHRvIExpbmUgICAgICAgLS0gQXNrIGZvciBhIGxpbmUgbnVtYmVyIGFuZCBzaG93IHRoYXQgbGluZQorICAgICAgICBFeHBhbmQgV29yZCAgICAgIC0tIEV4cGFuZCB0aGUgd29yZCB5b3UgaGF2ZSB0eXBlZCB0byBtYXRjaCBhbm90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29yZCBpbiB0aGUgc2FtZSBidWZmZXI7IHJlcGVhdCB0byBnZXQgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZmZlcmVudCBleHBhbnNpb24KKyAgICAgICAgU2hvdyBDYWxsdGlwICAgICAtLSBBZnRlciBhbiB1bmNsb3NlZCBwYXJlbnRoZXNpcyBmb3IgYSBmdW5jdGlvbiwgb3BlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc21hbGwgd2luZG93IHdpdGggZnVuY3Rpb24gcGFyYW1ldGVyIGhpbnRzCisgICAgICAgIFNob3cgUGFyZW5zICAgICAgLS0gSGlnaGxpZ2h0IHRoZSBzdXJyb3VuZGluZyBwYXJlbnRoZXNpcworICAgICAgICBTaG93IENvbXBsZXRpb25zIC0tIE9wZW4gYSBzY3JvbGwgd2luZG93IGFsbG93aW5nIHNlbGVjdGlvbiBrZXl3b3JkcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhdHRyaWJ1dGVzLiAoc2VlICcqVElQUyonLCBiZWxvdykKIAotRm9ybWF0IE1lbnUgKG9ubHkgaW4gRWRpdCB3aW5kb3cpOgorRm9ybWF0IE1lbnUgKEVkaXRvciB3aW5kb3cgb25seSk6CiAKLQlJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IDQgc3BhY2VzCi0JRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IDQgc3BhY2VzCi0JQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKLQlVbmNvbW1lbnQgUmVnaW9uICAgIC0tIFJlbW92ZSBsZWFkaW5nICMgb3IgIyMgZnJvbSBzZWxlY3RlZCBsaW5lcwotCVRhYmlmeSBSZWdpb24gICAgICAgLS0gVHVybnMgKmxlYWRpbmcqIHN0cmV0Y2hlcyBvZiBzcGFjZXMgaW50byB0YWJzCi0JCShOb3RlOiBXZSByZWNvbW1lbmQgdXNpbmcgNCBzcGFjZSBibG9ja3MgdG8gaW5kZW50IFB5dGhvbiBjb2RlLikKLQlVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSByaWdodCBudW1iZXIgb2Ygc3BhY2VzCi0JTmV3IEluZGVudCBXaWR0aC4uLiAtLSBPcGVuIGRpYWxvZyB0byBjaGFuZ2UgaW5kZW50IHdpZHRoCi0JRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaAorICAgICAgICBJbmRlbnQgUmVnaW9uICAgICAgIC0tIFNoaWZ0IHNlbGVjdGVkIGxpbmVzIHJpZ2h0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgRGVkZW50IFJlZ2lvbiAgICAgICAtLSBTaGlmdCBzZWxlY3RlZCBsaW5lcyBsZWZ0IGJ5IHRoZSBpbmRlbnQgd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA0IHNwYWNlcykKKyAgICAgICAgQ29tbWVudCBPdXQgUmVnaW9uICAtLSBJbnNlcnQgIyMgaW4gZnJvbnQgb2Ygc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVW5jb21tZW50IFJlZ2lvbiAgICAtLSBSZW1vdmUgbGVhZGluZyAjIG9yICMjIGZyb20gc2VsZWN0ZWQgbGluZXMKKyAgICAgICAgVGFiaWZ5IFJlZ2lvbiAgICAgICAtLSBUdXJucyAqbGVhZGluZyogc3RyZXRjaGVzIG9mIHNwYWNlcyBpbnRvIHRhYnMuCisgICAgICAgICAgICAgICAgKE5vdGU6IFdlIHJlY29tbWVuZCB1c2luZyA0IHNwYWNlIGJsb2NrcyB0byBpbmRlbnQgUHl0aG9uIGNvZGUuKQorICAgICAgICBVbnRhYmlmeSBSZWdpb24gICAgIC0tIFR1cm4gKmFsbCogdGFicyBpbnRvIHRoZSBjb3JyZW50IG51bWJlciBvZiBzcGFjZXMKKyAgICAgICAgVG9nZ2xlIHRhYnMgICAgICAgICAtLSBPcGVuIGEgZGlhbG9nIHRvIHN3aXRjaCBiZXR3ZWVuIGluZGVudGluZyB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2VzIGFuZCB0YWJzLgorICAgICAgICBOZXcgSW5kZW50IFdpZHRoLi4uIC0tIE9wZW4gYSBkaWFsb2cgdG8gY2hhbmdlIGluZGVudCB3aWR0aC4gIFRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIGRlZmF1bHQgYnkgdGhlIFB5dGhvbiBjb21tdW5pdHkgaXMgNAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlcy4KKyAgICAgICAgRm9ybWF0IFBhcmFncmFwaCAgICAtLSBSZWZvcm1hdCB0aGUgY3VycmVudCBibGFuay1saW5lLXNlcGFyYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFncmFwaC4gQWxsIGxpbmVzIGluIHRoZSBwYXJhZ3JhcGggd2lsbCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZCB0byBsZXNzIHRoYW4gODAgY29sdW1ucy4KKyAgICAgICAgLS0tCisgICAgICAgIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgLS0gUmVtb3ZlZCBhbnkgc3BhY2UgY2hhcmFjdGVycyBhZnRlciB0aGUgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGxhc3Qgbm9uLXNwYWNlIGNoYXJhY3RlcgogCi1SdW4gTWVudSAob25seSBpbiBFZGl0IHdpbmRvdyk6CitSdW4gTWVudSAoRWRpdG9yIHdpbmRvdyBvbmx5KToKIAotCVB5dGhvbiBTaGVsbCAtLSBPcGVuIG9yIHdha2UgdXAgdGhlIFB5dGhvbiBzaGVsbCB3aW5kb3cKLQktLS0KLQlDaGVjayBNb2R1bGUgLS0gUnVuIGEgc3ludGF4IGNoZWNrIG9uIHRoZSBtb2R1bGUKLQlSdW4gTW9kdWxlICAgLS0gRXhlY3V0ZSB0aGUgY3VycmVudCBmaWxlIGluIHRoZSBfX21haW5fXyBuYW1lc3BhY2UKKyAgICAgICAgUHl0aG9uIFNoZWxsIC0tIE9wZW4gb3Igd2FrZSB1cCB0aGUgUHl0aG9uIHNoZWxsIHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgQ2hlY2sgTW9kdWxlIC0tIENoZWNrIHRoZSBzeW50YXggb2YgdGhlIG1vZHVsZSBjdXJyZW50bHkgb3BlbiBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgIEVkaXRvciB3aW5kb3cuICBJZiB0aGUgbW9kdWxlIGhhcyBub3QgYmVlbiBzYXZlZCBJRExFCisgICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHByb21wdCB0aGUgdXNlciB0byBzYXZlIHRoZSBjb2RlLgorICAgICAgICBSdW4gTW9kdWxlICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50LCB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlIHRoZSBjdXJyZW50bHkgb3BlbiBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaGFzCisgICAgICAgICAgICAgICAgICAgICAgICBub3QgYmVlbiBzYXZlZCBJRExFIHdpbGwgcHJvbXB0IHRoZSB1c2VyIHRvIHNhdmUgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLgogCi1TaGVsbCBNZW51IChvbmx5IGluIFNoZWxsIHdpbmRvdyk6CitTaGVsbCBNZW51IChTaGVsbCB3aW5kb3cgb25seSk6CiAKLQlWaWV3IExhc3QgUmVzdGFydCAtLSBTY3JvbGwgdGhlIHNoZWxsIHdpbmRvdyB0byB0aGUgbGFzdCByZXN0YXJ0Ci0JUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgaW50ZXJwcmV0ZXIgd2l0aCBhIGZyZXNoIGVudmlyb25tZW50CisgICAgICAgIFZpZXcgTGFzdCBSZXN0YXJ0IC0tIFNjcm9sbCB0aGUgc2hlbGwgd2luZG93IHRvIHRoZSBsYXN0IFNoZWxsIHJlc3RhcnQKKyAgICAgICAgUmVzdGFydCBTaGVsbCAgICAgLS0gUmVzdGFydCB0aGUgc2hlbGwgdG8gY2xlYW4gdGhlIGVudmlyb25tZW50CiAKLURlYnVnIE1lbnUgKG9ubHkgaW4gU2hlbGwgd2luZG93KToKK0RlYnVnIE1lbnUgKFNoZWxsIHdpbmRvdyBvbmx5KToKIAotCUdvIHRvIEZpbGUvTGluZSAgIC0tIGxvb2sgYXJvdW5kIHRoZSBpbnNlcnQgcG9pbnQgZm9yIGEgZmlsZW5hbWUKLQkJICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUKLQlEZWJ1Z2dlciAodG9nZ2xlKSAtLSBSdW4gY29tbWFuZHMgaW4gdGhlIHNoZWxsIHVuZGVyIHRoZSBkZWJ1Z2dlcgotCVN0YWNrIFZpZXdlciAgICAgIC0tIFNob3cgdGhlIHN0YWNrIHRyYWNlYmFjayBvZiB0aGUgbGFzdCBleGNlcHRpb24KLQlBdXRvLW9wZW4gU3RhY2sgVmlld2VyICh0b2dnbGUpIC0tIE9wZW4gc3RhY2sgdmlld2VyIG9uIHRyYWNlYmFjaworICAgICAgICBHbyB0byBGaWxlL0xpbmUgICAtLSBMb29rIGFyb3VuZCB0aGUgaW5zZXJ0IHBvaW50IGZvciBhIGZpbGVuYW1lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsaW5lIG51bWJlciwgb3BlbiB0aGUgZmlsZSwgYW5kIHNob3cgdGhlIGxpbmUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWZ1bCB0byB2aWV3IHRoZSBzb3VyY2UgbGluZXMgcmVmZXJlbmNlZCBpbiBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb24gdHJhY2ViYWNrLiAgQXZhaWxhYmxlIGluIHRoZSBjb250ZXh0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbnUgb2YgdGhlIFNoZWxsIHdpbmRvdy4KKyAgICAgICAgRGVidWdnZXIgKHRvZ2dsZSkgLS0gVGhpcyBmZWF0dXJlIGlzIG5vdCBjb21wbGV0ZSBhbmQgY29uc2lkZXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlcmltZW50YWwuIFJ1biBjb21tYW5kcyBpbiB0aGUgc2hlbGwgdW5kZXIgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZ2VyLgorICAgICAgICBTdGFjayBWaWV3ZXIgICAgICAtLSBTaG93IHRoZSBzdGFjayB0cmFjZWJhY2sgb2YgdGhlIGxhc3QgZXhjZXB0aW9uCisgICAgICAgIEF1dG8tb3BlbiBTdGFjayBWaWV3ZXIgKHRvZ2dsZSkgLS0gVG9nZ2xlIGF1dG9tYXRpY2FsbHkgb3BlbmluZyB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFjayB2aWV3ZXIgb24gdW5oYW5kbGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uCiAKLU9wdGlvbnMgTWVudToKK09wdGlvbnMgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CiAKLQlDb25maWd1cmUgSURMRSAtLSBPcGVuIGEgY29uZmlndXJhdGlvbiBkaWFsb2cuICBGb250cywgaW5kZW50YXRpb24sCisgICAgICAgIENvbmZpZ3VyZSBJRExFIC0tIE9wZW4gYSBjb25maWd1cmF0aW9uIGRpYWxvZy4gIEZvbnRzLCBpbmRlbnRhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5YmluZGluZ3MsIGFuZCBjb2xvciB0aGVtZXMgbWF5IGJlIGFsdGVyZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIEFkZGl0aW9uYWwgSGVscAotICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuCi0JCQkgIAotCQkJICBPbiBPUyBYIHRoaXMgbWVudSBpcyBub3QgcHJlc2VudCwgdXNlCi0JCQkgIG1lbnUgJ0lETEUgLT4gUHJlZmVyZW5jZXMuLi4nIGluc3RlYWQuCi0JLS0tCi0JQ29kZSBDb250ZXh0IC0tCSAgT3BlbiBhIHBhbmUgYXQgdGhlIHRvcCBvZiB0aGUgZWRpdCB3aW5kb3cgd2hpY2gKLQkJCSAgc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24gb2YgY29kZQotCQkJICB3aGljaCBpcyBzY3JvbGxpbmcgb2ZmIHRoZSB0b3Agb3IgdGhlIHdpbmRvdy4KLQkJCSAgKE5vdCBwcmVzZW50IGluIFNoZWxsIHdpbmRvdy4pCisgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXJ0dXAgUHJlZmVyZW5jZXMgbWF5IGJlIHNldCwgYW5kIGFkZGl0aW9uYWwgSGVscAorICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VzIGNhbiBiZSBzcGVjaWZpZWQuICBPbiBPUyBYLCBvcGVuIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGRpYWxvZyBieSBzZWxlY3RpbmcgUHJlZmVyZW5jZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gdGhlIGFwcGxpY2F0aW9uIG1lbnUuCiAKLVdpbmRvd3MgTWVudToKKyAgICAgICAgLS0tCisgICAgICAgIENvZGUgQ29udGV4dCAodG9nZ2xlKSAtLSBPcGVuIGEgcGFuZSBhdCB0aGUgdG9wIG9mIHRoZSBlZGl0IHdpbmRvdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggc2hvd3MgdGhlIGJsb2NrIGNvbnRleHQgb2YgdGhlIHNlY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGNvZGUgd2hpY2ggaXMgc2Nyb2xsaW5nIG9mZiB0aGUgdG9wIG9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiBUaGlzIGlzIG5vdCBwcmVzZW50IGluIHRoZSBTaGVsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93IG9ubHkgdGhlIEVkaXRvciB3aW5kb3cuCiAKLQlab29tIEhlaWdodCAtLSB0b2dnbGVzIHRoZSB3aW5kb3cgYmV0d2VlbiBjb25maWd1cmVkIHNpemUKLQlhbmQgbWF4aW11bSBoZWlnaHQuCi0JLS0tCi0JVGhlIHJlc3Qgb2YgdGhpcyBtZW51IGxpc3RzIHRoZSBuYW1lcyBvZiBhbGwgb3BlbiB3aW5kb3dzOwotCXNlbGVjdCBvbmUgdG8gYnJpbmcgaXQgdG8gdGhlIGZvcmVncm91bmQgKGRlaWNvbmlmeWluZyBpdCBpZgotCW5lY2Vzc2FyeSkuCitXaW5kb3cgTWVudSAoU2hlbGwgYW5kIEVkaXRvcik6CisKKyAgICAgICAgWm9vbSBIZWlnaHQgLS0gVG9nZ2xlcyB0aGUgd2luZG93IGJldHdlZW4gbm9ybWFsIHNpemUgKDQweDgwIGluaXRpYWwKKyAgICAgICAgc2V0dGluZykgYW5kIG1heGltdW0gaGVpZ2h0LiAgVGhlIGluaXRpYWwgc2l6ZSBpcyBpbiB0aGUgQ29uZmlndXJlCisgICAgICAgIElETEUgZGlhbG9nIHVuZGVyIHRoZSBnZW5lcmFsIHRhYi4KKyAgICAgICAgLS0tCisgICAgICAgIFRoZSByZXN0IG9mIHRoaXMgbWVudSBsaXN0cyB0aGUgbmFtZXMgb2YgYWxsIG9wZW4gd2luZG93czsKKyAgICAgICAgc2VsZWN0IG9uZSB0byBicmluZyBpdCB0byB0aGUgZm9yZWdyb3VuZCAoZGVpY29uaWZ5aW5nIGl0IGlmCisgICAgICAgIG5lY2Vzc2FyeSkuCiAKIEhlbHAgTWVudToKIAotCUFib3V0IElETEUgIC0tIFZlcnNpb24sIGNvcHlyaWdodCwgbGljZW5zZSwgY3JlZGl0cwotCUlETEUgUmVhZG1lIC0tIEJhY2tncm91bmQgZGlzY3Vzc2lvbiBhbmQgY2hhbmdlIGRldGFpbHMKLQktLS0KLQlJRExFIEhlbHAgICAtLSBEaXNwbGF5IHRoaXMgZmlsZQotCVB5dGhvbiBEb2NzIC0tIEFjY2VzcyBsb2NhbCBQeXRob24gZG9jdW1lbnRhdGlvbiwgaWYKLQkJICAgICAgIGluc3RhbGxlZC4gIE90aGVyd2lzZSwgYWNjZXNzIHd3dy5weXRob24ub3JnLgotCS0tLQotCShBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSkKKyAgICAgICAgQWJvdXQgSURMRSAgLS0gVmVyc2lvbiwgY29weXJpZ2h0LCBsaWNlbnNlLCBjcmVkaXRzCisgICAgICAgIC0tLQorICAgICAgICBJRExFIEhlbHAgICAtLSBEaXNwbGF5IHRoaXMgZmlsZSB3aGljaCBpcyBhIGhlbHAgZmlsZSBmb3IgSURMRQorICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxpbmcgdGhlIG1lbnUgb3B0aW9ucywgYmFzaWMgZWRpdGluZyBhbmQgbmF2aWdhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgYW5kIG90aGVyIHRpcHMuCisgICAgICAgIFB5dGhvbiBEb2NzIC0tIEFjY2VzcyBsb2NhbCBQeXRob24gZG9jdW1lbnRhdGlvbiwgaWYKKyAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFsbGVkLiAgT3Igd2lsbCBzdGFydCBhIHdlYiBicm93c2VyIGFuZCBvcGVuCisgICAgICAgICAgICAgICAgICAgICAgIGRvY3MucHl0aG9uLm9yZyBzaG93aW5nIHRoZSBsYXRlc3QgUHl0aG9uIGRvY3VtZW50YXRpb24uCisgICAgICAgIC0tLQorICAgICAgICBBZGRpdGlvbmFsIGhlbHAgc291cmNlcyBtYXkgYmUgYWRkZWQgaGVyZSB3aXRoIHRoZSBDb25maWd1cmUgSURMRQorICAgICAgICBkaWFsb2cgdW5kZXIgdGhlIEdlbmVyYWwgdGFiLgogCi1FZGl0IGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gRWRpdCB3aW5kb3cpOgorRWRpdG9yIGNvbnRleHQgbWVudSAoUmlnaHQtY2xpY2sgLyBDb250cm9sLWNsaWNrIG9uIE9TIFggaW4gRWRpdCB3aW5kb3cpOgogCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQlTZXQgQnJlYWtwb2ludCAgIC0tIFNldHMgYSBicmVha3BvaW50ICh3aGVuIGRlYnVnZ2VyIG9wZW4pCi0JQ2xlYXIgQnJlYWtwb2ludCAtLSBDbGVhcnMgdGhlIGJyZWFrcG9pbnQgb24gdGhhdCBsaW5lCisgICAgICAgIENvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKKyAgICAgICAgUGFzdGUgICAgICAgICAgICAtLSBJbnNlcnQgc3lzdGVtLXdpZGUgY2xpcGJvYXJkIGludG8gd2luZG93CisgICAgICAgIFNldCBCcmVha3BvaW50ICAgLS0gU2V0cyBhIGJyZWFrcG9pbnQuIEJyZWFrcG9pbnRzIGFyZSBvbmx5IGVuYWJsZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIHRoZSBkZWJ1Z2dlciBpcyBvcGVuLgorICAgICAgICBDbGVhciBCcmVha3BvaW50IC0tIENsZWFycyB0aGUgYnJlYWtwb2ludCBvbiB0aGF0IGxpbmUKIAogU2hlbGwgY29udGV4dCBtZW51IChSaWdodC1jbGljayAvIENvbnRyb2wtY2xpY2sgb24gT1MgWCBpbiBTaGVsbCB3aW5kb3cpOgogCi0JQ3V0ICAgICAgICAgICAgICAtLSBDb3B5IGEgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkLAorICAgICAgICBDdXQgICAgICAgICAgICAgIC0tIENvcHkgYSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbiBkZWxldGUgdGhlIHNlbGVjdGlvbgotCUNvcHkgICAgICAgICAgICAgLS0gQ29weSBzZWxlY3Rpb24gaW50byBzeXN0ZW0td2lkZSBjbGlwYm9hcmQKLQlQYXN0ZSAgICAgICAgICAgIC0tIEluc2VydCBzeXN0ZW0td2lkZSBjbGlwYm9hcmQgaW50byB3aW5kb3cKLQktLS0KLQlHbyB0byBmaWxlL2xpbmUgIC0tIFNhbWUgYXMgaW4gRGVidWcgbWVudQorICAgICAgICBDb3B5ICAgICAgICAgICAgIC0tIENvcHkgc2VsZWN0aW9uIGludG8gc3lzdGVtLXdpZGUgY2xpcGJvYXJkCisgICAgICAgIFBhc3RlICAgICAgICAgICAgLS0gSW5zZXJ0IHN5c3RlbS13aWRlIGNsaXBib2FyZCBpbnRvIHdpbmRvdworICAgICAgICAtLS0KKyAgICAgICAgR28gdG8gZmlsZS9saW5lICAtLSBTYW1lIGFzIGluIERlYnVnIG1lbnUKIAogCiAqKiBUSVBTICoqCkBAIC0xNDQsMTU5ICsxOTEsMTgyIEBACiAKIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzOgogCi0JV2luZG93cyB1c2VycyBjYW4gR29vZ2xlIG9uIHpvcGVzaGVsZi5jaG0gdG8gYWNjZXNzIFpvcGUgaGVscCBmaWxlcyBpbgotCXRoZSBXaW5kb3dzIGhlbHAgZm9ybWF0LiAgVGhlIEFkZGl0aW9uYWwgSGVscCBTb3VyY2VzIGZlYXR1cmUgb2YgdGhlCi0JY29uZmlndXJhdGlvbiBHVUkgc3VwcG9ydHMgLmNobSwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZmlsZXR5cGVzCi0Jc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4gIFN1cHBseSBhIE1lbnUgSXRlbSB0aXRsZSwgYW5kIGVudGVyIHRoZQotCWxvY2F0aW9uIGluIHRoZSBIZWxwIEZpbGUgUGF0aCBzbG90IG9mIHRoZSBOZXcgSGVscCBTb3VyY2UgZGlhbG9nLiAgVXNlCi0JaHR0cDovLyBhbmQvb3Igd3d3LiB0byBpZGVudGlmeSBleHRlcm5hbCBVUkxzLCBvciBkb3dubG9hZCB0aGUgZmlsZSBhbmQKLQlicm93c2UgZm9yIGl0cyBwYXRoIG9uIHlvdXIgbWFjaGluZSB1c2luZyB0aGUgQnJvd3NlIGJ1dHRvbi4KKyAgICAgICAgV2luZG93cyB1c2VycyBjYW4gR29vZ2xlIG9uIHpvcGVzaGVsZi5jaG0gdG8gYWNjZXNzIFpvcGUgaGVscCBmaWxlcyBpbgorICAgICAgICB0aGUgV2luZG93cyBoZWxwIGZvcm1hdC4gIFRoZSBBZGRpdGlvbmFsIEhlbHAgU291cmNlcyBmZWF0dXJlIG9mIHRoZQorICAgICAgICBjb25maWd1cmF0aW9uIEdVSSBzdXBwb3J0cyAuY2htLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmaWxldHlwZXMKKyAgICAgICAgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3Nlci4gIFN1cHBseSBhIE1lbnUgSXRlbSB0aXRsZSwgYW5kIGVudGVyIHRoZQorICAgICAgICBsb2NhdGlvbiBpbiB0aGUgSGVscCBGaWxlIFBhdGggc2xvdCBvZiB0aGUgTmV3IEhlbHAgU291cmNlIGRpYWxvZy4gIFVzZQorICAgICAgICBodHRwOi8vIGFuZC9vciB3d3cuIHRvIGlkZW50aWZ5IGV4dGVybmFsIFVSTHMsIG9yIGRvd25sb2FkIHRoZSBmaWxlIGFuZAorICAgICAgICBicm93c2UgZm9yIGl0cyBwYXRoIG9uIHlvdXIgbWFjaGluZSB1c2luZyB0aGUgQnJvd3NlIGJ1dHRvbi4KIAotCUFsbCB1c2VycyBjYW4gYWNjZXNzIHRoZSBleHRlbnNpdmUgc291cmNlcyBvZiBoZWxwLCBpbmNsdWRpbmcKLQl0dXRvcmlhbHMsIGF2YWlsYWJsZSBhdCB3d3cucHl0aG9uLm9yZy9kb2MuICBTZWxlY3RlZCBVUkxzIGNhbiBiZSBhZGRlZAotCW9yIHJlbW92ZWQgZnJvbSB0aGUgSGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIENvbmZpZ3VyZSBJRExFLgorICAgICAgICBBbGwgdXNlcnMgY2FuIGFjY2VzcyB0aGUgZXh0ZW5zaXZlIHNvdXJjZXMgb2YgaGVscCwgaW5jbHVkaW5nCisgICAgICAgIHR1dG9yaWFscywgYXZhaWxhYmxlIGF0IGRvY3MucHl0aG9uLm9yZy4gIFNlbGVjdGVkIFVSTHMgY2FuIGJlIGFkZGVkCisgICAgICAgIG9yIHJlbW92ZWQgZnJvbSB0aGUgSGVscCBtZW51IGF0IGFueSB0aW1lIHVzaW5nIENvbmZpZ3VyZSBJRExFLgogCiBCYXNpYyBlZGl0aW5nIGFuZCBuYXZpZ2F0aW9uOgogCi0JQmFja3NwYWNlIGRlbGV0ZXMgY2hhciB0byB0aGUgbGVmdDsgREVMIGRlbGV0ZXMgY2hhciB0byB0aGUgcmlnaHQuCi0JQ29udHJvbC1iYWNrc3BhY2UgZGVsZXRlcyB3b3JkIGxlZnQsIENvbnRyb2wtREVMIGRlbGV0ZXMgd29yZCByaWdodC4KLQlBcnJvdyBrZXlzIGFuZCBQYWdlIFVwL0Rvd24gbW92ZSBhcm91bmQuCi0JQ29udHJvbC1sZWZ0L3JpZ2h0IEFycm93IG1vdmVzIGJ5IHdvcmRzIGluIGEgc3RyYW5nZSBidXQgdXNlZnVsIHdheS4KLQlIb21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZS4KLQlDb250cm9sLUhvbWUvRW5kIGdvIHRvIGJlZ2luL2VuZCBvZiBmaWxlLgotCVNvbWUgdXNlZnVsIEVtYWNzIGJpbmRpbmdzIGFyZSBpbmhlcml0ZWQgZnJvbSBUY2wvVGs6Ci0JCUNvbnRyb2wtYSAgICAgYmVnaW5uaW5nIG9mIGxpbmUKLQkJQ29udHJvbC1lICAgICBlbmQgb2YgbGluZQotCQlDb250cm9sLWsgICAgIGtpbGwgbGluZSAoYnV0IGRvZXNuJ3QgcHV0IGl0IGluIGNsaXBib2FyZCkKLQkJQ29udHJvbC1sICAgICBjZW50ZXIgd2luZG93IGFyb3VuZCB0aGUgaW5zZXJ0aW9uIHBvaW50Ci0JU3RhbmRhcmQgV2luZG93cyBiaW5kaW5ncyBtYXkgd29yayBvbiB0aGF0IHBsYXRmb3JtLgotCUtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgU2V0dGluZ3MgRGlhbG9nLCBsb29rIHRoZXJlLgorICAgICAgICBCYWNrc3BhY2UgZGVsZXRlcyBjaGFyIHRvIHRoZSBsZWZ0OyBERUwgZGVsZXRlcyBjaGFyIHRvIHRoZSByaWdodC4KKyAgICAgICAgQ29udHJvbC1iYWNrc3BhY2UgZGVsZXRlcyB3b3JkIGxlZnQsIENvbnRyb2wtREVMIGRlbGV0ZXMgd29yZCByaWdodC4KKyAgICAgICAgQXJyb3cga2V5cyBhbmQgUGFnZSBVcC9Eb3duIG1vdmUgYXJvdW5kLgorICAgICAgICBDb250cm9sLWxlZnQvcmlnaHQgQXJyb3cgbW92ZXMgYnkgd29yZHMgaW4gYSBzdHJhbmdlIGJ1dCB1c2VmdWwgd2F5LgorICAgICAgICBIb21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgbGluZS4KKyAgICAgICAgQ29udHJvbC1Ib21lL0VuZCBnbyB0byBiZWdpbi9lbmQgb2YgZmlsZS4KKyAgICAgICAgU29tZSB1c2VmdWwgRW1hY3MgYmluZGluZ3MgYXJlIGluaGVyaXRlZCBmcm9tIFRjbC9UazoKKyAgICAgICAgICAgICAgICBDb250cm9sLWEgICAgIGJlZ2lubmluZyBvZiBsaW5lCisgICAgICAgICAgICAgICAgQ29udHJvbC1lICAgICBlbmQgb2YgbGluZQorICAgICAgICAgICAgICAgIENvbnRyb2wtayAgICAga2lsbCBsaW5lIChidXQgZG9lc24ndCBwdXQgaXQgaW4gY2xpcGJvYXJkKQorICAgICAgICAgICAgICAgIENvbnRyb2wtbCAgICAgY2VudGVyIHdpbmRvdyBhcm91bmQgdGhlIGluc2VydGlvbiBwb2ludAorICAgICAgICBTdGFuZGFyZCBrZXliaW5kaW5ncyAobGlrZSBDb250cm9sLWMgdG8gY29weSBhbmQgQ29udHJvbC12IHRvCisgICAgICAgIHBhc3RlKSBtYXkgd29yay4gIEtleWJpbmRpbmdzIGFyZSBzZWxlY3RlZCBpbiB0aGUgQ29uZmlndXJlIElETEUKKyAgICAgICAgZGlhbG9nLgogCiBBdXRvbWF0aWMgaW5kZW50YXRpb246CiAKLQlBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzCi0JKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IGJ5IG9uZSB0YWIpLiAgQWZ0ZXIgY2VydGFpbiBrZXl3b3JkcwotCShicmVhaywgcmV0dXJuIGV0Yy4pIHRoZSBuZXh0IGxpbmUgaXMgZGVkZW50ZWQuICBJbiBsZWFkaW5nCi0JaW5kZW50YXRpb24sIEJhY2tzcGFjZSBkZWxldGVzIHVwIHRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiAgVGFiCi0JaW5zZXJ0cyBzcGFjZXMgKGluIHRoZSBQeXRob24gU2hlbGwgd2luZG93IG9uZSB0YWIpLCBudW1iZXIgZGVwZW5kcyBvbgotCUluZGVudCBXaWR0aC4gIChOLkIuIEN1cnJlbnRseSB0YWJzIGFyZSByZXN0cmljdGVkIHRvIGZvdXIgc3BhY2VzIGR1ZQotCXRvIFRjbC9UayBpc3N1ZXMuKQorICAgICAgICBBZnRlciBhIGJsb2NrLW9wZW5pbmcgc3RhdGVtZW50LCB0aGUgbmV4dCBsaW5lIGlzIGluZGVudGVkIGJ5IDQgc3BhY2VzCisgICAgICAgIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBieSBvbmUgdGFiKS4gIEFmdGVyIGNlcnRhaW4ga2V5d29yZHMKKyAgICAgICAgKGJyZWFrLCByZXR1cm4gZXRjLikgdGhlIG5leHQgbGluZSBpcyBkZWRlbnRlZC4gIEluIGxlYWRpbmcKKyAgICAgICAgaW5kZW50YXRpb24sIEJhY2tzcGFjZSBkZWxldGVzIHVwIHRvIDQgc3BhY2VzIGlmIHRoZXkgYXJlIHRoZXJlLiAgVGFiCisgICAgICAgIGluc2VydHMgc3BhY2VzIChpbiB0aGUgUHl0aG9uIFNoZWxsIHdpbmRvdyBvbmUgdGFiKSwgbnVtYmVyIGRlcGVuZHMgb24KKyAgICAgICAgSW5kZW50IFdpZHRoLiBDdXJyZW50bHkgdGFicyBhcmUgcmVzdHJpY3RlZCB0byBmb3VyIHNwYWNlcyBkdWUKKyAgICAgICAgdG8gVGNsL1RrIGxpbWl0YXRpb25zLgogCiAgICAgICAgIFNlZSBhbHNvIHRoZSBpbmRlbnQvZGVkZW50IHJlZ2lvbiBjb21tYW5kcyBpbiB0aGUgZWRpdCBtZW51LgogCiBDb21wbGV0aW9uczoKIAotCUNvbXBsZXRpb25zIGFyZSBzdXBwbGllZCBmb3IgZnVuY3Rpb25zLCBjbGFzc2VzLCBhbmQgYXR0cmlidXRlcyBvZgotCWNsYXNzZXMsIGJvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkCi0JZm9yIGZpbGVuYW1lcy4KKyAgICAgICAgQ29tcGxldGlvbnMgYXJlIHN1cHBsaWVkIGZvciBmdW5jdGlvbnMsIGNsYXNzZXMsIGFuZCBhdHRyaWJ1dGVzIG9mCisgICAgICAgIGNsYXNzZXMsIGJvdGggYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZC4gIENvbXBsZXRpb25zIGFyZSBhbHNvIHByb3ZpZGVkCisgICAgICAgIGZvciBmaWxlbmFtZXMuCiAKLQlUaGUgQXV0b0NvbXBsZXRlV2luZG93IChBQ1cpIHdpbGwgb3BlbiBhZnRlciBhIHByZWRlZmluZWQgZGVsYXkKLQkoZGVmYXVsdCBpcyB0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMKLQl0eXBlZC4gIElmIGFmdGVyIG9uZSBvZiB0aG9zZSBjaGFyYWN0ZXJzIChwbHVzIHplcm8gb3IgbW9yZSBvdGhlcgotCWNoYXJhY3RlcnMpIHlvdSB0eXBlIGEgVGFiIHRoZSBBQ1cgd2lsbCBvcGVuIGltbWVkaWF0ZWx5IGlmIGEgcG9zc2libGUKLQljb250aW51YXRpb24gaXMgZm91bmQuCisgICAgICAgIFRoZSBBdXRvQ29tcGxldGVXaW5kb3cgKEFDVykgd2lsbCBvcGVuIGFmdGVyIGEgcHJlZGVmaW5lZCBkZWxheQorICAgICAgICAoZGVmYXVsdCBpcyB0d28gc2Vjb25kcykgYWZ0ZXIgYSAnLicgb3IgKGluIGEgc3RyaW5nKSBhbiBvcy5zZXAgaXMKKyAgICAgICAgdHlwZWQuICBJZiBhZnRlciBvbmUgb2YgdGhvc2UgY2hhcmFjdGVycyAocGx1cyB6ZXJvIG9yIG1vcmUgb3RoZXIKKyAgICAgICAgY2hhcmFjdGVycykgYSB0YWIgaXMgdHlwZWQgdGhlIEFDVyB3aWxsIG9wZW4gaW1tZWRpYXRlbHkgaWYgYSBwb3NzaWJsZQorICAgICAgICBjb250aW51YXRpb24gaXMgZm91bmQuCiAKLQlJZiB0aGVyZSBpcyBvbmx5IG9uZSBwb3NzaWJsZSBjb21wbGV0aW9uIGZvciB0aGUgY2hhcmFjdGVycyBlbnRlcmVkLCBhCi0JVGFiIHdpbGwgc3VwcGx5IHRoYXQgY29tcGxldGlvbiB3aXRob3V0IG9wZW5pbmcgdGhlIEFDVy4KKyAgICAgICAgSWYgdGhlcmUgaXMgb25seSBvbmUgcG9zc2libGUgY29tcGxldGlvbiBmb3IgdGhlIGNoYXJhY3RlcnMgZW50ZXJlZCwgYQorICAgICAgICB0YWIgd2lsbCBzdXBwbHkgdGhhdCBjb21wbGV0aW9uIHdpdGhvdXQgb3BlbmluZyB0aGUgQUNXLgogCi0JJ1Nob3cgQ29tcGxldGlvbnMnIHdpbGwgZm9yY2Ugb3BlbiBhIGNvbXBsZXRpb25zIHdpbmRvdy4gIEluIGFuIGVtcHR5Ci0Jc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT24gYQotCWJsYW5rIGxpbmUsIGl0IHdpbGwgY29udGFpbiB0aGUgYnVpbHQtaW4gYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMgYW5kCi0JY2xhc3NlcyBpbiB0aGUgY3VycmVudCBuYW1lIHNwYWNlcywgcGx1cyBhbnkgbW9kdWxlcyBpbXBvcnRlZC4gIElmIHNvbWUKLQljaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgorICAgICAgICAnU2hvdyBDb21wbGV0aW9ucycgd2lsbCBmb3JjZSBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LCBieSBkZWZhdWx0IHRoZQorICAgICAgICBDb250cm9sLXNwYWNlIGtleXMgd2lsbCBvcGVuIGEgY29tcGxldGlvbnMgd2luZG93LiAgSW4gYW4gZW1wdHkKKyAgICAgICAgc3RyaW5nLCB0aGlzIHdpbGwgY29udGFpbiB0aGUgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LiAgT24gYQorICAgICAgICBibGFuayBsaW5lLCBpdCB3aWxsIGNvbnRhaW4gdGhlIGJ1aWx0LWluIGFuZCB1c2VyLWRlZmluZWQgZnVuY3Rpb25zIGFuZAorICAgICAgICBjbGFzc2VzIGluIHRoZSBjdXJyZW50IG5hbWUgc3BhY2VzLCBwbHVzIGFueSBtb2R1bGVzIGltcG9ydGVkLiAgSWYgc29tZQorICAgICAgICBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBlbnRlcmVkLCB0aGUgQUNXIHdpbGwgYXR0ZW1wdCB0byBiZSBtb3JlIHNwZWNpZmljLgogCi0JSWYgc3RyaW5nIG9mIGNoYXJhY3RlcnMgaXMgdHlwZWQsIHRoZSBBQ1cgc2VsZWN0aW9uIHdpbGwganVtcCB0byB0aGUKLQllbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gRW50ZXJpbmcgYSBUYWIgd2lsbCBjYXVzZQotCXRoZSBsb25nZXN0IG5vbi1hbWJpZ3VvdXMgbWF0Y2ggdG8gYmUgZW50ZXJlZCBpbiB0aGUgRWRpdCB3aW5kb3cgb3IKLQlTaGVsbC4gIFR3byBUYWJzIGluIGEgcm93IHdpbGwgc3VwcGx5IHRoZSBjdXJyZW50IEFDVyBzZWxlY3Rpb24sIGFzCi0Jd2lsbCBSZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZQotCXNlbGVjdGlvbiwgYW5kIHRoZSBzY3JvbGx3aGVlbCBhbGwgb3BlcmF0ZSBvbiB0aGUgQUNXLgorICAgICAgICBJZiBzdHJpbmcgb2YgY2hhcmFjdGVycyBpcyB0eXBlZCwgdGhlIEFDVyBzZWxlY3Rpb24gd2lsbCBqdW1wIHRvIHRoZQorICAgICAgICBlbnRyeSBtb3N0IGNsb3NlbHkgbWF0Y2hpbmcgdGhvc2UgY2hhcmFjdGVycy4gRW50ZXJpbmcgYSB0YWIgd2lsbCBjYXVzZQorICAgICAgICB0aGUgbG9uZ2VzdCBub24tYW1iaWd1b3VzIG1hdGNoIHRvIGJlIGVudGVyZWQgaW4gdGhlIEVkaXQgd2luZG93IG9yCisgICAgICAgIFNoZWxsLiAgVHdvIHRhYnMgaW4gYSByb3cgd2lsbCBzdXBwbHkgdGhlIGN1cnJlbnQgQUNXIHNlbGVjdGlvbiwgYXMKKyAgICAgICAgd2lsbCByZXR1cm4gb3IgYSBkb3VibGUgY2xpY2suICBDdXJzb3Iga2V5cywgUGFnZSBVcC9Eb3duLCBtb3VzZQorICAgICAgICBzZWxlY3Rpb24sIGFuZCB0aGUgc2Nyb2xsIHdoZWVsIGFsbCBvcGVyYXRlIG9uIHRoZSBBQ1cuCiAKLQknSGlkZGVuJyBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KLQluYW1lIGFmdGVyIGEgJy4nLiAgZS5nLiAnXycuICBUaGlzIGFsbG93cyBhY2Nlc3MgdG8gbW9kdWxlcyB3aXRoCi0JJ19fYWxsX18nIHNldCwgb3IgdG8gY2xhc3MtcHJpdmF0ZSBhdHRyaWJ1dGVzLgorICAgICAgICAiSGlkZGVuIiBhdHRyaWJ1dGVzIGNhbiBiZSBhY2Nlc3NlZCBieSB0eXBpbmcgdGhlIGJlZ2lubmluZyBvZiBoaWRkZW4KKyAgICAgICAgbmFtZSBhZnRlciBhICcuJywgIGUuZy4gJ18nLiAgVGhpcyBhbGxvd3MgYWNjZXNzIHRvIG1vZHVsZXMgd2l0aAorICAgICAgICAnX19hbGxfXycgc2V0LCBvciB0byBjbGFzcy1wcml2YXRlIGF0dHJpYnV0ZXMuCiAKLQlDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQorICAgICAgICBDb21wbGV0aW9ucyBhbmQgdGhlICdFeHBhbmQgV29yZCcgZmFjaWxpdHkgY2FuIHNhdmUgYSBsb3Qgb2YgdHlwaW5nIQogCi0JQ29tcGxldGlvbnMgYXJlIGN1cnJlbnRseSBsaW1pdGVkIHRvIHRob3NlIGluIHRoZSBuYW1lc3BhY2VzLiAgTmFtZXMgaW4KLQlhbiBFZGl0IHdpbmRvdyB3aGljaCBhcmUgbm90IHZpYSBfX21haW5fXyBvciBzeXMubW9kdWxlcyB3aWxsIG5vdCBiZQotCWZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMKLQlzaXR1YXRpb24uICBOb3RlIHRoYXQgSURMRSBpdHNlbGYgcGxhY2VzIHF1aXRlIGEgZmV3IG1vZHVsZXMgaW4KLQlzeXMubW9kdWxlcywgc28gbXVjaCBjYW4gYmUgZm91bmQgYnkgZGVmYXVsdCwgZS5nLiB0aGUgcmUgbW9kdWxlLgorICAgICAgICBDb21wbGV0aW9ucyBhcmUgY3VycmVudGx5IGxpbWl0ZWQgdG8gdGhvc2UgaW4gdGhlIG5hbWVzcGFjZXMuICBOYW1lcyBpbgorICAgICAgICBhbiBFZGl0b3Igd2luZG93IHdoaWNoIGFyZSBub3QgdmlhIF9fbWFpbl9fIG9yIHN5cy5tb2R1bGVzIHdpbGwgbm90IGJlCisgICAgICAgIGZvdW5kLiAgUnVuIHRoZSBtb2R1bGUgb25jZSB3aXRoIHlvdXIgaW1wb3J0cyB0byBjb3JyZWN0IHRoaXMKKyAgICAgICAgc2l0dWF0aW9uLiAgTm90ZSB0aGF0IElETEUgaXRzZWxmIHBsYWNlcyBxdWl0ZSBhIGZldyBtb2R1bGVzIGluCisgICAgICAgIHN5cy5tb2R1bGVzLCBzbyBtdWNoIGNhbiBiZSBmb3VuZCBieSBkZWZhdWx0LCBlLmcuIHRoZSByZSBtb2R1bGUuCiAKLQlJZiB5b3UgZG9uJ3QgbGlrZSB0aGUgQUNXIHBvcHBpbmcgdXAgdW5iaWRkZW4sIHNpbXBseSBtYWtlIHRoZSBkZWxheQotCWxvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPVE9ILCB5b3UgY291bGQgbWFrZSB0aGUgZGVsYXkgemVyby4KLQotCVlvdSBjb3VsZCBhbHNvIHN3aXRjaCBvZmYgdGhlIENhbGxUaXBzIGV4dGVuc2lvbi4gIChXZSB3aWxsIGJlIGFkZGluZwotCWEgZGVsYXkgdG8gdGhlIGNhbGwgdGlwIHdpbmRvdy4pCisgICAgICAgIElmIHlvdSBkb24ndCBsaWtlIHRoZSBBQ1cgcG9wcGluZyB1cCB1bmJpZGRlbiwgc2ltcGx5IG1ha2UgdGhlIGRlbGF5CisgICAgICAgIGxvbmdlciBvciBkaXNhYmxlIHRoZSBleHRlbnNpb24uICBPciBhbm90aGVyIG9wdGlvbiBpcyB0aGUgZGVsYXkgY291bGQKKyAgICAgICAgYmUgc2V0IHRvIHplcm8uIEFub3RoZXIgYWx0ZXJuYXRpdmUgdG8gcHJldmVudGluZyBBQ1cgcG9wdXBzIGlzIHRvCisgICAgICAgIGRpc2FibGUgdGhlIGNhbGwgdGlwcyBleHRlbnNpb24uCiAKIFB5dGhvbiBTaGVsbCB3aW5kb3c6CiAKLQlDb250cm9sLWMgaW50ZXJydXB0cyBleGVjdXRpbmcgY29tbWFuZC4KLQlDb250cm9sLWQgc2VuZHMgZW5kLW9mLWZpbGU7IGNsb3NlcyB3aW5kb3cgaWYgdHlwZWQgYXQgPj4+IHByb21wdC4KKyAgICAgICAgQ29udHJvbC1jIGludGVycnVwdHMgZXhlY3V0aW5nIGNvbW1hbmQuCisgICAgICAgIENvbnRyb2wtZCBzZW5kcyBlbmQtb2YtZmlsZTsgY2xvc2VzIHdpbmRvdyBpZiB0eXBlZCBhdCA+Pj4gcHJvbXB0LgorICAgICAgICBBbHQtLyBleHBhbmQgd29yZCBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nLgogCiAgICAgQ29tbWFuZCBoaXN0b3J5OgogCi0JQWx0LXAgcmV0cmlldmVzIHByZXZpb3VzIGNvbW1hbmQgbWF0Y2hpbmcgd2hhdCB5b3UgaGF2ZSB0eXBlZC4KLQlBbHQtbiByZXRyaWV2ZXMgbmV4dC4KLQkgICAgICAoVGhlc2UgYXJlIENvbnRyb2wtcCwgQ29udHJvbC1uIG9uIE9TIFgpCi0JUmV0dXJuIHdoaWxlIGN1cnNvciBpcyBvbiBhIHByZXZpb3VzIGNvbW1hbmQgcmV0cmlldmVzIHRoYXQgY29tbWFuZC4KLQlFeHBhbmQgd29yZCBpcyBhbHNvIHVzZWZ1bCB0byByZWR1Y2UgdHlwaW5nLgorICAgICAgICBBbHQtcCByZXRyaWV2ZXMgcHJldmlvdXMgY29tbWFuZCBtYXRjaGluZyB3aGF0IHlvdSBoYXZlIHR5cGVkLiBPbiBPUyBYCisgICAgICAgIHVzZSBDb250cm9sLXAuCisgICAgICAgIEFsdC1uIHJldHJpZXZlcyBuZXh0LiBPbiBPUyBYIHVzZSBDb250cm9sLW4uCisgICAgICAgIFJldHVybiB3aGlsZSBjdXJzb3IgaXMgb24gYSBwcmV2aW91cyBjb21tYW5kIHJldHJpZXZlcyB0aGF0IGNvbW1hbmQuCiAKICAgICBTeW50YXggY29sb3JzOgogCi0JVGhlIGNvbG9yaW5nIGlzIGFwcGxpZWQgaW4gYSBiYWNrZ3JvdW5kICJ0aHJlYWQiLCBzbyB5b3UgbWF5Ci0Jb2NjYXNpb25hbGx5IHNlZSB1bmNvbG9yaXplZCB0ZXh0LiAgVG8gY2hhbmdlIHRoZSBjb2xvcgotCXNjaGVtZSwgdXNlIHRoZSBDb25maWd1cmUgSURMRSAvIEhpZ2hsaWdodGluZyBkaWFsb2cuCisgICAgICAgIFRoZSBjb2xvcmluZyBpcyBhcHBsaWVkIGluIGEgYmFja2dyb3VuZCAidGhyZWFkIiwgc28geW91IG1heQorICAgICAgICBvY2Nhc2lvbmFsbHkgc2VlIHVuY29sb3JpemVkIHRleHQuICBUbyBjaGFuZ2UgdGhlIGNvbG9yCisgICAgICAgIHNjaGVtZSwgdXNlIHRoZSBDb25maWd1cmUgSURMRSAvIEhpZ2hsaWdodGluZyBkaWFsb2cuCiAKICAgICBQeXRob24gZGVmYXVsdCBzeW50YXggY29sb3JzOgogCi0JS2V5d29yZHMJb3JhbmdlCi0JQnVpbHRpbnMJcm95YWwgcHVycGxlCi0JU3RyaW5ncwkJZ3JlZW4KLQlDb21tZW50cwlyZWQKLQlEZWZpbml0aW9ucwlibHVlCisgICAgICAgIEtleXdvcmRzICAgICAgICBvcmFuZ2UKKyAgICAgICAgQnVpbHRpbnMgICAgICAgIHJveWFsIHB1cnBsZQorICAgICAgICBTdHJpbmdzICAgICAgICAgZ3JlZW4KKyAgICAgICAgQ29tbWVudHMgICAgICAgIHJlZAorICAgICAgICBEZWZpbml0aW9ucyAgICAgYmx1ZQogCiAgICAgU2hlbGwgZGVmYXVsdCBjb2xvcnM6CiAKLQlDb25zb2xlIG91dHB1dAlicm93bgotCXN0ZG91dAkJYmx1ZQotCXN0ZGVycgkJcmVkCi0Jc3RkaW4JCWJsYWNrCisgICAgICAgIENvbnNvbGUgb3V0cHV0ICBicm93bgorICAgICAgICBzdGRvdXQgICAgICAgICAgYmx1ZQorICAgICAgICBzdGRlcnIgICAgICAgICAgcmVkCisgICAgICAgIHN0ZGluICAgICAgICAgICBibGFjawogCiBPdGhlciBwcmVmZXJlbmNlczoKIAotCVRoZSBmb250IHByZWZlcmVuY2VzLCBrZXliaW5kaW5nLCBhbmQgc3RhcnR1cCBwcmVmZXJlbmNlcyBjYW4KLQliZSBjaGFuZ2VkIHVzaW5nIHRoZSBTZXR0aW5ncyBkaWFsb2cuCisgICAgICAgIFRoZSBmb250IHByZWZlcmVuY2VzLCBoaWdobGlnaHRpbmcsIGtleXMsIGFuZCBnZW5lcmFsIHByZWZlcmVuY2VzIGNhbgorICAgICAgICBiZSBjaGFuZ2VkIHZpYSB0aGUgQ29uZmlndXJlIElETEUgbWVudSBvcHRpb24uICBCZSBzdXJlIHRvIG5vdGUgdGhhdAorICAgICAgICBrZXlzIGNhbiBiZSB1c2VyIGRlZmluZWQsIElETEUgc2hpcHMgd2l0aCBmb3VyIGJ1aWx0IGluIGtleSBzZXRzLiBJbgorICAgICAgICBhZGRpdGlvbiBhIHVzZXIgY2FuIGNyZWF0ZSBhIGN1c3RvbSBrZXkgc2V0IGluIHRoZSBDb25maWd1cmUgSURMRQorICAgICAgICBkaWFsb2cgdW5kZXIgdGhlIGtleXMgdGFiLgogCiBDb21tYW5kIGxpbmUgdXNhZ2U6CiAKLQlFbnRlciBpZGxlIC1oIGF0IHRoZSBjb21tYW5kIHByb21wdCB0byBnZXQgYSB1c2FnZSBtZXNzYWdlLgorICAgICAgICBFbnRlciBpZGxlIC1oIGF0IHRoZSBjb21tYW5kIHByb21wdCB0byBnZXQgYSB1c2FnZSBtZXNzYWdlLgogCi1SdW5uaW5nIHdpdGhvdXQgYSBzdWJwcm9jZXNzOgorICAgICAgICBpZGxlLnB5IFstYyBjb21tYW5kXSBbLWRdIFstZV0gWy1zXSBbLXQgdGl0bGVdIFthcmddIC4uLgogCi0JSWYgSURMRSBpcyBzdGFydGVkIHdpdGggdGhlIC1uIGNvbW1hbmQgbGluZSBzd2l0Y2ggaXQgd2lsbCBydW4gaW4gYQotCXNpbmdsZSBwcm9jZXNzIGFuZCB3aWxsIG5vdCBjcmVhdGUgdGhlIHN1YnByb2Nlc3Mgd2hpY2ggcnVucyB0aGUgUlBDCi0JUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgUHl0aG9uIGNhbm5vdCBjcmVhdGUKLQl0aGUgc3VicHJvY2VzcyBvciB0aGUgUlBDIHNvY2tldCBpbnRlcmZhY2Ugb24geW91ciBwbGF0Zm9ybS4gIEhvd2V2ZXIsCi0JaW4gdGhpcyBtb2RlIHVzZXIgY29kZSBpcyBub3QgaXNvbGF0ZWQgZnJvbSBJRExFIGl0c2VsZi4gIEFsc28sIHRoZQotCWVudmlyb25tZW50IGlzIG5vdCByZXN0YXJ0ZWQgd2hlbiBSdW4vUnVuIE1vZHVsZSAoRjUpIGlzIHNlbGVjdGVkLiAgSWYKLQl5b3VyIGNvZGUgaGFzIGJlZW4gbW9kaWZpZWQsIHlvdSBtdXN0IHJlbG9hZCgpIHRoZSBhZmZlY3RlZCBtb2R1bGVzIGFuZAotCXJlLWltcG9ydCBhbnkgc3BlY2lmaWMgaXRlbXMgKGUuZy4gZnJvbSBmb28gaW1wb3J0IGJheikgaWYgdGhlIGNoYW5nZXMKLQlhcmUgdG8gdGFrZSBlZmZlY3QuICBGb3IgdGhlc2UgcmVhc29ucywgaXQgaXMgcHJlZmVyYWJsZSB0byBydW4gSURMRQotCXdpdGggdGhlIGRlZmF1bHQgc3VicHJvY2VzcyBpZiBhdCBhbGwgcG9zc2libGUuCisgICAgICAgIC1jIGNvbW1hbmQgIHJ1biB0aGlzIGNvbW1hbmQKKyAgICAgICAgLWQgICAgICAgICAgZW5hYmxlIGRlYnVnZ2VyCisgICAgICAgIC1lICAgICAgICAgIGVkaXQgbW9kZTsgYXJndW1lbnRzIGFyZSBmaWxlcyB0byBiZSBlZGl0ZWQKKyAgICAgICAgLXMgICAgICAgICAgcnVuICRJRExFU1RBUlRVUCBvciAkUFlUSE9OU1RBUlRVUCBmaXJzdAorICAgICAgICAtdCB0aXRsZSAgICBzZXQgdGl0bGUgb2Ygc2hlbGwgd2luZG93CisKKyAgICAgICAgSWYgdGhlcmUgYXJlIGFyZ3VtZW50czoKKyAgICAgICAgMS4gSWYgLWUgaXMgdXNlZCwgYXJndW1lbnRzIGFyZSBmaWxlcyBvcGVuZWQgZm9yIGVkaXRpbmcgYW5kIHN5cy5hcmd2CisgICAgICAgICAgIHJlZmxlY3RzIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIElETEUgaXRzZWxmLgorICAgICAgICAyLiBPdGhlcndpc2UsIGlmIC1jIGlzIHVzZWQsIGFsbCBhcmd1bWVudHMgYXJlIHBsYWNlZCBpbgorICAgICAgICAgICBzeXMuYXJndlsxOi4uLl0sIHdpdGggc3lzLmFyZ3ZbMF0gc2V0IHRvIC1jLgorICAgICAgICAzLiBPdGhlcndpc2UsIGlmIG5laXRoZXIgLWUgbm9yIC1jIGlzIHVzZWQsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBhCisgICAgICAgICAgIHNjcmlwdCB3aGljaCBpcyBleGVjdXRlZCB3aXRoIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIGluCisgICAgICAgICAgIHN5cy5hcmd2WzE6Li4uXSAgYW5kIHN5cy5hcmd2WzBdIHNldCB0byB0aGUgc2NyaXB0IG5hbWUuICBJZiB0aGUKKyAgICAgICAgICAgc2NyaXB0IG5hbWUgaXMgLSwgbm8gc2NyaXB0IGlzIGV4ZWN1dGVkIGJ1dCBhbiBpbnRlcmFjdGl2ZSBQeXRob24KKyAgICAgICAgICAgc2Vzc2lvbiBpcyBzdGFydGVkOyB0aGUgYXJndW1lbnRzIGFyZSBzdGlsbCBhdmFpbGFibGUgaW4gc3lzLmFyZ3YuCisKK1J1bm5pbmcgd2l0aG91dCBhIHN1YnByb2Nlc3M6IChERVBSRUNBVEVEIGluIFB5dGhvbiAzLjQgc2VlIElzc3VlIDE2MTIzKQorCisgICAgICAgIElmIElETEUgaXMgc3RhcnRlZCB3aXRoIHRoZSAtbiBjb21tYW5kIGxpbmUgc3dpdGNoIGl0IHdpbGwgcnVuIGluIGEKKyAgICAgICAgc2luZ2xlIHByb2Nlc3MgYW5kIHdpbGwgbm90IGNyZWF0ZSB0aGUgc3VicHJvY2VzcyB3aGljaCBydW5zIHRoZSBSUEMKKyAgICAgICAgUHl0aG9uIGV4ZWN1dGlvbiBzZXJ2ZXIuICBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgUHl0aG9uIGNhbm5vdCBjcmVhdGUKKyAgICAgICAgdGhlIHN1YnByb2Nlc3Mgb3IgdGhlIFJQQyBzb2NrZXQgaW50ZXJmYWNlIG9uIHlvdXIgcGxhdGZvcm0uICBIb3dldmVyLAorICAgICAgICBpbiB0aGlzIG1vZGUgdXNlciBjb2RlIGlzIG5vdCBpc29sYXRlZCBmcm9tIElETEUgaXRzZWxmLiAgQWxzbywgdGhlCisgICAgICAgIGVudmlyb25tZW50IGlzIG5vdCByZXN0YXJ0ZWQgd2hlbiBSdW4vUnVuIE1vZHVsZSAoRjUpIGlzIHNlbGVjdGVkLiAgSWYKKyAgICAgICAgeW91ciBjb2RlIGhhcyBiZWVuIG1vZGlmaWVkLCB5b3UgbXVzdCByZWxvYWQoKSB0aGUgYWZmZWN0ZWQgbW9kdWxlcyBhbmQKKyAgICAgICAgcmUtaW1wb3J0IGFueSBzcGVjaWZpYyBpdGVtcyAoZS5nLiBmcm9tIGZvbyBpbXBvcnQgYmF6KSBpZiB0aGUgY2hhbmdlcworICAgICAgICBhcmUgdG8gdGFrZSBlZmZlY3QuICBGb3IgdGhlc2UgcmVhc29ucywgaXQgaXMgcHJlZmVyYWJsZSB0byBydW4gSURMRQorICAgICAgICB3aXRoIHRoZSBkZWZhdWx0IHN1YnByb2Nlc3MgaWYgYXQgYWxsIHBvc3NpYmxlLgogCiBFeHRlbnNpb25zOgogCi0JSURMRSBjb250YWlucyBhbiBleHRlbnNpb24gZmFjaWxpdHkuICBTZWUgdGhlIGJlZ2lubmluZyBvZgotCWNvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCi0JVGhlIGRlZmF1bHQgZXh0ZW5zaW9ucyBhcmUgY3VycmVudGx5OgorICAgICAgICBJRExFIGNvbnRhaW5zIGFuIGV4dGVuc2lvbiBmYWNpbGl0eS4gIFNlZSB0aGUgYmVnaW5uaW5nIG9mCisgICAgICAgIGNvbmZpZy1leHRlbnNpb25zLmRlZiBpbiB0aGUgaWRsZWxpYiBkaXJlY3RvcnkgZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCisgICAgICAgIFRoZSBkZWZhdWx0IGV4dGVuc2lvbnMgYXJlIGN1cnJlbnRseToKIAotCQlGb3JtYXRQYXJhZ3JhcGgKLQkJQXV0b0V4cGFuZAotCQlab29tSGVpZ2h0Ci0JCVNjcmlwdEJpbmRpbmcKLQkJQ2FsbFRpcHMKLQkJUGFyZW5NYXRjaAotCQlBdXRvQ29tcGxldGUKLQkJQ29kZUNvbnRleHQKKyAgICAgICAgICAgICAgICBGb3JtYXRQYXJhZ3JhcGgKKyAgICAgICAgICAgICAgICBBdXRvRXhwYW5kCisgICAgICAgICAgICAgICAgWm9vbUhlaWdodAorICAgICAgICAgICAgICAgIFNjcmlwdEJpbmRpbmcKKyAgICAgICAgICAgICAgICBDYWxsVGlwcworICAgICAgICAgICAgICAgIFBhcmVuTWF0Y2gKKyAgICAgICAgICAgICAgICBBdXRvQ29tcGxldGUKKyAgICAgICAgICAgICAgICBDb2RlQ29udGV4dApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZS5iYXQgYi9MaWIvaWRsZWxpYi9pZGxlLmJhdAppbmRleCBlNzdiOTZlLi4zZDYxOWEzIDEwMDc1NQotLS0gYS9MaWIvaWRsZWxpYi9pZGxlLmJhdAorKysgYi9MaWIvaWRsZWxpYi9pZGxlLmJhdApAQCAtMSw0ICsxLDQgQEAKLUBlY2hvIG9mZgotcmVtIFN0YXJ0IElETEUgdXNpbmcgdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiBpbnRlcnByZXRlcgotc2V0IENVUlJESVI9JX5kcDAKLXN0YXJ0ICJJRExFIiAiJUNVUlJESVIlLi5cLi5ccHl0aG9udy5leGUiICIlQ1VSUkRJUiVpZGxlLnB5dyIgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKK0BlY2hvIG9mZg0KK3JlbSBTdGFydCBJRExFIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBQeXRob24gaW50ZXJwcmV0ZXINCitzZXQgQ1VSUkRJUj0lfmRwMA0KK3N0YXJ0ICJJRExFIiAiJUNVUlJESVIlLi5cLi5ccHl0aG9udy5leGUiICIlQ1VSUkRJUiVpZGxlLnB5dyIgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkNCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlLnB5dyBiL0xpYi9pZGxlbGliL2lkbGUucHl3CmluZGV4IDBkYjVmZDQuLjE0MmNiMzIgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGUucHl3CisrKyBiL0xpYi9pZGxlbGliL2lkbGUucHl3CkBAIC0yLDIwICsyLDE2IEBACiAgICAgaW1wb3J0IGlkbGVsaWIuUHlTaGVsbAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgICMgSURMRSBpcyBub3QgaW5zdGFsbGVkLCBidXQgbWF5YmUgUHlTaGVsbCBpcyBvbiBzeXMucGF0aDoKLSAgICB0cnk6Ci0gICAgICAgIGZyb20gLiBpbXBvcnQgUHlTaGVsbAotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcmFpc2UKLSAgICBlbHNlOgotICAgICAgICBpbXBvcnQgb3MKLSAgICAgICAgaWRsZWRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoUHlTaGVsbC5fX2ZpbGVfXykpCi0gICAgICAgIGlmIGlkbGVkaXIgIT0gb3MuZ2V0Y3dkKCk6Ci0gICAgICAgICAgICAjIFdlJ3JlIG5vdCBpbiB0aGUgSURMRSBkaXJlY3RvcnksIGhlbHAgdGhlIHN1YnByb2Nlc3MgZmluZCBydW4ucHkKLSAgICAgICAgICAgIHB5cGF0aCA9IG9zLmVudmlyb24uZ2V0KCdQWVRIT05QQVRIJywgJycpCi0gICAgICAgICAgICBpZiBweXBhdGg6Ci0gICAgICAgICAgICAgICAgb3MuZW52aXJvblsnUFlUSE9OUEFUSCddID0gcHlwYXRoICsgJzonICsgaWRsZWRpcgotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydQWVRIT05QQVRIJ10gPSBpZGxlZGlyCi0gICAgICAgIFB5U2hlbGwubWFpbigpCisgICAgZnJvbSAuIGltcG9ydCBQeVNoZWxsCisgICAgaW1wb3J0IG9zCisgICAgaWRsZWRpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmFic3BhdGgoUHlTaGVsbC5fX2ZpbGVfXykpCisgICAgaWYgaWRsZWRpciAhPSBvcy5nZXRjd2QoKToKKyAgICAgICAgIyBXZSdyZSBub3QgaW4gdGhlIElETEUgZGlyZWN0b3J5LCBoZWxwIHRoZSBzdWJwcm9jZXNzIGZpbmQgcnVuLnB5CisgICAgICAgIHB5cGF0aCA9IG9zLmVudmlyb24uZ2V0KCdQWVRIT05QQVRIJywgJycpCisgICAgICAgIGlmIHB5cGF0aDoKKyAgICAgICAgICAgIG9zLmVudmlyb25bJ1BZVEhPTlBBVEgnXSA9IHB5cGF0aCArICc6JyArIGlkbGVkaXIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmVudmlyb25bJ1BZVEhPTlBBVEgnXSA9IGlkbGVkaXIKKyAgICBQeVNoZWxsLm1haW4oKQogZWxzZToKICAgICBpZGxlbGliLlB5U2hlbGwubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvUkVBRE1FLnR4dCBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0CmluZGV4IDZiOTI0ODMuLjIzMzk5MjYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9SRUFETUUudHh0CkBAIC0xLDE0ICsxLDI0IEBACiBSRUFETUUgRk9SIElETEUgVEVTVFMgSU4gSURMRUxJQi5JRExFX1RFU1QKIAorMC4gUXVpY2sgU3RhcnQKKworQXV0b21hdGVkIHVuaXQgdGVzdHMgd2VyZSBhZGRlZCBpbiAyLjcgZm9yIFB5dGhvbiAyLnggYW5kIDMuMyBmb3IgUHl0aG9uIDMueC4KK1RvIHJ1biB0aGUgdGVzdHMgZnJvbSBhIGNvbW1hbmQgbGluZToKKworcHl0aG9uIC1tIHRlc3QudGVzdF9pZGxlCisKK0h1bWFuLW1lZGlhdGVkIHRlc3RzIHdlcmUgYWRkZWQgbGF0ZXIgaW4gMi43IGFuZCBpbiAzLjQuCisKK3B5dGhvbiAtbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdAorCiAKIDEuIFRlc3QgRmlsZXMKIAogVGhlIGlkbGUgZGlyZWN0b3J5LCBpZGxlbGliLCBoYXMgb3ZlciA2MCB4eXoucHkgZmlsZXMuIFRoZSBpZGxlX3Rlc3QKLXN1YmRpcmVjdG9yeSBzaG91bGQgY29udGFpbiBhIHRlc3RfeHl5LnB5IGZvciBlYWNoLiAoRm9yIHRlc3QgbW9kdWxlcywgbWFrZQotJ3h5eicgbG93ZXIgY2FzZSwgYW5kIHBvc3NpYmx5IHNob3J0ZW4gaXQuKSBFYWNoIGZpbGUgc2hvdWxkIHN0YXJ0IHdpdGggdGhlCi1zb21ldGhpbmcgbGlrZSB0aGUgZm9sbG93aW5nIHRlbXBsYXRlLCB3aXRoIHRoZSBibGFua3MgYWZ0ZXIgYWZ0ZXIgJy4nIGFuZCAnYXMnLAotYW5kIGJlZm9yZSBhbmQgYWZ0ZXIgJ18nIGZpbGxlZCBpbi4KLS0tLQorc3ViZGlyZWN0b3J5IHNob3VsZCBjb250YWluIGEgdGVzdF94eXoucHkgZm9yIGVhY2gsIHdoZXJlICd4eXonIGlzIGxvd2VyY2FzZWQKK2V2ZW4gaWYgeHl6LnB5IGlzIG5vdC4gSGVyZSBpcyBhIHBvc3NpYmxlIHRlbXBsYXRlLCB3aXRoIHRoZSBibGFua3MgYWZ0ZXIgYWZ0ZXIKKycuJyBhbmQgJ2FzJywgYW5kIGJlZm9yZSBhbmQgYWZ0ZXIgJ18nIHRvIGJlIGZpbGxlZCBpbi4KKwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKIGltcG9ydCBpZGxlbGliLiBhcwpAQCAtMTgsMzQgKzI4LDMzIEBACiAgICAgZGVmIHRlc3RfKHNlbGYpOgogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIsIGV4aXQ9MikKLS0tLQotSWRsZSB0ZXN0cyBhcmUgcnVuIHdpdGggdW5pdHRlc3Q7IGRvIG5vdCB1c2UgcmVncnRlc3QncyB0ZXN0X21haW4uCisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKIAotT25jZSB0ZXN0X3h5eSBpcyB3cml0dGVuLCB0aGUgZm9sbG93aW5nIHNob3VsZCBnbyBhdCB0aGUgZW5kIG9mIHh5eS5weSwKLXdpdGggeHl6IChsb3dlcmNhc2VkKSBhZGRlZCBhZnRlciAndGVzdF8nLgotLS0tCitBZGQgdGhlIGZvbGxvd2luZyBhdCB0aGUgZW5kIG9mIHh5eS5weSwgd2l0aCB0aGUgYXBwcm9wcmlhdGUgbmFtZSBhZGRlZCBhZnRlcgorJ3Rlc3RfJy4gU29tZSBmaWxlcyBhbHJlYWR5IGhhdmUgc29tZXRoaW5nIGxpa2UgdGhpcyBmb3IgaHRlc3QuICBJZiBzbywgaW5zZXJ0Cit0aGUgaW1wb3J0IGFuZCB1bml0dGVzdC5tYWluIGxpbmVzIGJlZm9yZSB0aGUgaHRlc3QgbGluZXMuCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0OyBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCiAgICAgaW1wb3J0IHVuaXR0ZXN0CiAgICAgdW5pdHRlc3QubWFpbignaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF8nLCB2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKLS0tLQogCiAKLTIuIEd1aSBUZXN0cwogCi1HdWkgdGVzdHMgbmVlZCAncmVxdWlyZXMnIGFuZCAndXNlX3Jlc291cmNlcycgZnJvbSB0ZXN0LnN1cHBvcnQKLSh0ZXN0LnRlc3Rfc3VwcG9ydCBpbiAyLjcpLiBBIHRlc3QgaXMgYSBndWkgdGVzdCBpZiBpdCBjcmVhdGVzIGEgVGsgcm9vdCBvcgotbWFzdGVyIG9iamVjdCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSBpbnN0YW50aWF0aW5nIGEgdGtpbnRlciBvcgotaWRsZSBjbGFzcy4gRm9yIHRoZSBiZW5lZml0IG9mIGJ1aWxkYm90IG1hY2hpbmVzIHRoYXQgZG8gbm90IGhhdmUgYSBncmFwaGljcwotc2NyZWVuLCBndWkgdGVzdHMgbXVzdCBiZSAnZ3VhcmRlZCcgYnkgInJlcXVpcmVzKCdndWknKSIgaW4gYSBzZXRVcAotZnVuY3Rpb24gb3IgbWV0aG9kLiBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIHNldFVwQ2xhc3MuCisyLiBHVUkgVGVzdHMKIAotVG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBndWkgdGVzdHMsIGFsbCBndWkgb2JqZWN0cyBtdXN0IGJlIGRlc3Ryb3llZAotYW5kIGRlbGV0ZWQgYnkgdGhlIGVuZCBvZiB0aGUgdGVzdC4gIElmIGEgd2lkZ2V0LCBzdWNoIGFzIGEgVGsgcm9vdCwgaXMgY3JlYXRlZAotaW4gYSBzZXRVcFggZnVuY3Rpb24sIGRlc3Ryb3kgaXQgaW4gdGhlIGNvcnJlc3BvbmRpbmcgdGVhckRvd25YLiAgRm9yIG1vZHVsZQotYW5kIGNsYXNzIGF0dHJpYnV0ZXMsIGFsc28gZGVsZXRlIHRoZSB3aWRnZXQuCi0tLS0KK1doZW4gcnVuIGFzIHBhcnQgb2YgdGhlIFB5dGhvbiB0ZXN0IHN1aXRlLCBJZGxlIGd1aSB0ZXN0cyBuZWVkIHRvIHJ1bgordGVzdC5zdXBwb3J0LnJlcXVpcmVzKCdndWknKSAodGVzdC50ZXN0X3N1cHBvcnQgaW4gMi43KS4gIEEgdGVzdCBpcyBhIGd1aSB0ZXN0CitpZiBpdCBjcmVhdGVzIGEgVGsgcm9vdCBvciBtYXN0ZXIgb2JqZWN0IGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5CitpbnN0YW50aWF0aW5nIGEgdGtpbnRlciBvciBpZGxlIGNsYXNzLiAgRm9yIHRoZSBiZW5lZml0IG9mIHRlc3QgcHJvY2Vzc2VzIHRoYXQKK2VpdGhlciBoYXZlIG5vIGdyYXBoaWNhbCBlbnZpcm9ubWVudCBhdmFpbGFibGUgb3IgYXJlIG5vdCBhbGxvd2VkIHRvIHVzZSBpdCwgZ3VpCit0ZXN0cyBtdXN0IGJlICdndWFyZGVkJyBieSAicmVxdWlyZXMoJ2d1aScpIiBpbiBhIHNldFVwIGZ1bmN0aW9uIG9yIG1ldGhvZC4KK1RoaXMgd2lsbCB0eXBpY2FsbHkgYmUgc2V0VXBDbGFzcy4KKworVG8gYXZvaWQgaW50ZXJmZXJpbmcgd2l0aCBvdGhlciBndWkgdGVzdHMsIGFsbCBndWkgb2JqZWN0cyBtdXN0IGJlIGRlc3Ryb3llZCBhbmQKK2RlbGV0ZWQgYnkgdGhlIGVuZCBvZiB0aGUgdGVzdC4gIFdpZGdldHMsIHN1Y2ggYXMgYSBUayByb290LCBjcmVhdGVkIGluIGEgc2V0VXBYCitmdW5jdGlvbiwgc2hvdWxkIGJlIGRlc3Ryb3llZCBpbiB0aGUgY29ycmVzcG9uZGluZyB0ZWFyRG93blguICBNb2R1bGUgYW5kIGNsYXNzCit3aWRnZXQgYXR0cmlidXRlcyBzaG91bGQgYWxzbyBiZSBkZWxldGVkLi4KKwogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CiAgICAgICAgIHJlcXVpcmVzKCdndWknKQpAQCAtNTUsNTYgKzY0LDgwIEBACiAgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKICAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCiAgICAgICAgIGRlbCBjbHMucm9vdAotLS0tCi0KLVN1cHBvcnQucmVxdWlyZXMoJ2d1aScpIHJldHVybnMgdHJ1ZSBpZiBpdCBpcyBlaXRoZXIgY2FsbGVkIGluIGEgbWFpbiBtb2R1bGUKLSh3aGljaCBuZXZlciBoYXBwZW5zIG9uIGJ1aWxkYm90cykgb3IgaWYgdXNlX3Jlc291cmNlcyBjb250YWlucyAnZ3VpJy4KLVVzZV9yZXNvdXJjZXMgaXMgc2V0IGJ5IHRlc3QucmVncnRlc3QgYnV0IG5vdCBieSB1bml0dGVzdC4gU28gd2hlbiBydW5uaW5nCi10ZXN0cyBpbiBhbm90aGVyIG1vZHVsZSB3aXRoIHVuaXR0ZXN0LCB3ZSBzZXQgaXQgb3Vyc2VsdmVzLCBhcyBpbiB0aGUgeHl6LnB5Ci10ZW1wbGF0ZSBhYm92ZS4KLQotU2luY2Ugbm9uLWd1aSB0ZXN0cyBhbHdheXMgcnVuLCBidXQgZ3VpIHRlc3RzIG9ubHkgc29tZXRpbWVzLCB0ZXN0cyBvZiBub24tZ3VpCi1vcGVyYXRpb25zIHNob3VsZCBiZXN0IGF2b2lkIG5lZWRpbmcgYSBndWkuIE1ldGhvZHMgdGhhdCBtYWtlIGluY2lkZW50YWwgdXNlIG9mCi10a2ludGVyICh0aykgdmFyaWFibGVzIGFuZCBtZXNzYWdlYm94ZXMgY2FuIGRvIHRoaXMgYnkgdXNpbmcgdGhlIG1vY2sgY2xhc3NlcyBpbgotaWRsZV90ZXN0L21vY2tfdGsucHkuIFRoZXJlIGlzIGFsc28gYSBtb2NrIHRleHQgdGhhdCB3aWxsIGhhbmRsZSBzb21lIHVzZXMgb2YgdGhlCi10ayBUZXh0IHdpZGdldC4KIAogCi0zLiBSdW5uaW5nIFRlc3RzCitSZXF1aXJlcygnZ3VpJykgY2F1c2VzIHRoZSB0ZXN0KHMpIGl0IGd1YXJkcyB0byBiZSBza2lwcGVkIGlmIGFueSBvZgorYSBmZXcgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgIAorIC0gVGhlIHRlc3RzIGFyZSBiZWluZyBydW4gYnkgcmVncnRlc3QucHksIGFuZCBpdCB3YXMgc3RhcnRlZCB3aXRob3V0IGVuYWJsaW5nCisgICB0aGUgImd1aSIgcmVzb3VyY2Ugd2l0aCB0aGUgIi11IiBjb21tYW5kIGxpbmUgb3B0aW9uLgorICAgCisgLSBUaGUgdGVzdHMgYXJlIGJlaW5nIHJ1biBvbiBXaW5kb3dzIGJ5IGEgc2VydmljZSB0aGF0IGlzIG5vdCBhbGxvd2VkIHRvCisgICBpbnRlcmFjdCB3aXRoIHRoZSBncmFwaGljYWwgZW52aXJvbm1lbnQuCisgICAKKyAtIFRoZSB0ZXN0cyBhcmUgYmVpbmcgcnVuIG9uIE1hYyBPU1ggaW4gYSBwcm9jZXNzIHRoYXQgY2Fubm90IG1ha2UgYSB3aW5kb3cKKyAgIG1hbmFnZXIgY29ubmVjdGlvbi4KKyAgIAorIC0gdGtpbnRlci5UayBjYW5ub3QgYmUgc3VjY2Vzc2Z1bGx5IGluc3RhbnRpYXRlZCBmb3Igc29tZSByZWFzb24uCisgCisgLSB0ZXN0LnN1cHBvcnQudXNlX3Jlc291cmNlcyBoYXMgYmVlbiBzZXQgYnkgc29tZXRoaW5nIG90aGVyIHRoYW4KKyAgIHJlZ3J0ZXN0LnB5IGFuZCBkb2VzIG5vdCBjb250YWluICJndWkiLgorICAgCitUZXN0cyBvZiBub24tZ3VpIG9wZXJhdGlvbnMgc2hvdWxkIGF2b2lkIGNyZWF0aW5nIHRrIHdpZGdldHMuIEluY2lkZW50YWwgdXNlcyBvZgordGsgdmFyaWFibGVzIGFuZCBtZXNzYWdlYm94ZXMgY2FuIGJlIHJlcGxhY2VkIGJ5IHRoZSBtb2NrIGNsYXNzZXMgaW4KK2lkbGVfdGVzdC9tb2NrX3RrLnB5LiBUaGUgbW9jayB0ZXh0IGhhbmRsZXMgc29tZSB1c2VzIG9mIHRoZSB0ayBUZXh0IHdpZGdldC4KIAotQXNzdW1lIHRoYXQgeHl6LnB5IGFuZCB0ZXN0X3h5ei5weSBlbmQgd2l0aCB0aGUgImlmIF9fbmFtZV9fIiBzdGF0ZW1lbnRzIGdpdmVuCi1hYm92ZS4gSW4gSWRsZSwgcHJlc3NpbmcgRjUgaW4gYW4gZWRpdG9yIHdpbmRvdyB3aXRoIGVpdGhlciBsb2FkZWQgd2lsbCBydW4gYWxsCi10ZXN0cyBpbiB0aGUgdGVzdF94eXogZmlsZSB3aXRoIHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiBydW5uaW5nIElkbGUuICBUaGUgdGVzdAotcmVwb3J0IGFuZCBhbnkgdHJhY2ViYWNrcyB3aWxsIGFwcGVhciBpbiB0aGUgU2hlbGwgd2luZG93LiBUaGUgb3B0aW9ucyBpbiB0aGVzZQotImlmIF9fbmFtZV9fIiBzdGF0ZW1lbnRzIGFyZSBhcHByb3ByaWF0ZSBmb3IgZGV2ZWxvcGVycyBydW5uaW5nIChhcyBvcHBvc2VkIHRvCi1pbXBvcnRpbmcpIGVpdGhlciBvZiB0aGUgZmlsZXMgZHVyaW5nIGRldmVsb3BtZW50OiB2ZXJib3NpdHk9MiBsaXN0cyBhbGwgdGVzdAotbWV0aG9kcyBpbiB0aGUgZmlsZTsgZXhpdD1GYWxzZSBhdm9pZHMgYSBzcHVyaW91cyBzeXMuZXhpdCB0cmFjZWJhY2sgdGhhdCB3b3VsZAotb3RoZXJ3aXNlIG9jY3VyIHdoZW4gcnVubmluZyBpbiBJZGxlLiBUaGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZXMgYWxzbyBydW4KLWFsbCB0ZXN0IG1ldGhvZHMsIGluY2x1ZGluZyBndWkgdGVzdHMsIGluIHRlc3RfeHl6LnB5LiAoVGhlIGV4Y2VwdGlvbnMgYXJlIHRoYXQKLWlkbGVsaWIgYW5kIGlkbGVsaWIuaWRsZSBzdGFydCBJZGxlIGFuZCBpZGxlbGliLlB5U2hlbGwgc2hvdWxkIChpc3N1ZSAxODMzMCkuKQogCi1weXRob24gLW0gaWRsZWxpYi54eXogICMgV2l0aCB0aGUgY2FwaXRhbGl6YXRpb24gb2YgdGhlIHh5eiBtb2R1bGUKKzMuIFJ1bm5pbmcgVW5pdCBUZXN0cworCitBc3N1bWUgdGhhdCB4eXoucHkgYW5kIHRlc3RfeHl6LnB5IGJvdGggZW5kIHdpdGggYSB1bml0dGVzdC5tYWluKCkgY2FsbC4KK1J1bm5pbmcgZWl0aGVyIGZyb20gYW4gSWRsZSBlZGl0b3IgcnVucyBhbGwgdGVzdHMgaW4gdGhlIHRlc3RfeHl6IGZpbGUgd2l0aCB0aGUKK3ZlcnNpb24gb2YgUHl0aG9uIHJ1bm5pbmcgSWRsZS4gIFRlc3Qgb3V0cHV0IGFwcGVhcnMgaW4gdGhlIFNoZWxsIHdpbmRvdy4gIFRoZQorJ3ZlcmJvc2l0eT0yJyBvcHRpb24gbGlzdHMgYWxsIHRlc3QgbWV0aG9kcyBpbiB0aGUgZmlsZSwgd2hpY2ggaXMgYXBwcm9wcmlhdGUKK3doZW4gZGV2ZWxvcGluZyB0ZXN0cy4gVGhlICdleGl0PUZhbHNlJyBvcHRpb24gaXMgbmVlZGVkIGluIHh5eC5weSBmaWxlcyB3aGVuIGFuCitodGVzdCBmb2xsb3dzLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZXMgYWxzbyBydW4gYWxsIHRlc3QgbWV0aG9kcywgaW5jbHVkaW5nCitndWkgdGVzdHMsIGluIHRlc3RfeHl6LnB5LiAoQm90aCAnLW0gaWRsZWxpYicgYW5kICctbSBpZGxlbGliLmlkbGUnIHN0YXJ0CitJZGxlIGFuZCBzbyBjYW5ub3QgcnVuIHRlc3RzLikKKworcHl0aG9uIC1tIGlkbGVsaWIueHl6CiBweXRob24gLW0gaWRsZWxpYi5pZGxlX3Rlc3QudGVzdF94eXoKIAotVG8gcnVuIGFsbCBpZGxlX3Rlc3QvdGVzdF8qLnB5IHRlc3RzLCBlaXRoZXIgaW50ZXJhY3RpdmVseQotKCc+Pj4nLCB3aXRoIHVuaXR0ZXN0IGltcG9ydGVkKSBvciBmcm9tIGEgY29tbWFuZCBsaW5lLCB1c2Ugb25lIG9mIHRoZQotZm9sbG93aW5nLiAoTm90ZXM6IHVuaXR0ZXN0IGRvZXMgbm90IHJ1biBndWkgdGVzdHM7IGluIDIuNywgJ3Rlc3QgJyAod2l0aCB0aGUKLXNwYWNlKSBpcyAndGVzdC5yZWdydGVzdCAnOyB3aGVyZSBwcmVzZW50LCAtdiBhbmQgLXVndWkgY2FuIGJlIG9taXR0ZWQuKQorVGhlIGZvbGxvd2luZyBydW5zIGFsbCBpZGxlX3Rlc3QvdGVzdF8qLnB5IHRlc3RzIGludGVyYWN0aXZlbHkuCiAKLT4+PiB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdCcsIHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQorPj4+IGltcG9ydCB1bml0dGVzdAorPj4+IHVuaXR0ZXN0Lm1haW4oJ2lkbGVsaWIuaWRsZV90ZXN0JywgdmVyYm9zaXR5PTIpCisKK1RoZSBmb2xsb3dpbmcgcnVuIGFsbCBJZGxlIHRlc3RzIGF0IGEgY29tbWFuZCBsaW5lLiAgT3B0aW9uICctdicgaXMgdGhlIHNhbWUgYXMKKyd2ZXJib3NpdHk9MicuICAoRm9yIDIuNywgcmVwbGFjZSAndGVzdCcgaW4gdGhlIHNlY29uZCBsaW5lIHdpdGgKKyd0ZXN0LnJlZ3J0ZXN0Jy4pCisKIHB5dGhvbiAtbSB1bml0dGVzdCAtdiBpZGxlbGliLmlkbGVfdGVzdAogcHl0aG9uIC1tIHRlc3QgLXYgLXVndWkgdGVzdF9pZGxlCiBweXRob24gLW0gdGVzdC50ZXN0X2lkbGUKIAogVGhlIGlkbGUgdGVzdHMgYXJlICdkaXNjb3ZlcmVkJyBieSBpZGxlbGliLmlkbGVfdGVzdC5fX2luaXRfXy5sb2FkX3Rlc3RzLAogd2hpY2ggaXMgYWxzbyBpbXBvcnRlZCBpbnRvIHRlc3QudGVzdF9pZGxlLiBOb3JtYWxseSwgbmVpdGhlciBmaWxlIHNob3VsZCBiZQotY2hhbmdlZCB3aGVuIHdvcmtpbmcgb24gaW5kaXZpZHVhbCB0ZXN0IG1vZHVsZXMuIFRoZSB0aGlyZCBjb21tYW5kIHJ1bnMgcnVucworY2hhbmdlZCB3aGVuIHdvcmtpbmcgb24gaW5kaXZpZHVhbCB0ZXN0IG1vZHVsZXMuIFRoZSB0aGlyZCBjb21tYW5kIHJ1bnMKIHVuaXR0ZXN0IGluZGlyZWN0bHkgdGhyb3VnaCByZWdydGVzdC4gVGhlIHNhbWUgaGFwcGVucyB3aGVuIHRoZSBlbnRpcmUgdGVzdAogc3VpdGUgaXMgcnVuIHdpdGggJ3B5dGhvbiAtbSB0ZXN0Jy4gU28gdGhhdCBjb21tYW5kIG11c3Qgd29yayBmb3IgYnVpbGRib3RzCiB0byBzdGF5IGdyZWVuLiBJZGxlIHRlc3RzIG11c3Qgbm90IGRpc3R1cmIgdGhlIGVudmlyb25tZW50IGluIGEgd2F5IHRoYXQKIG1ha2VzIG90aGVyIHRlc3RzIGZhaWwgKGlzc3VlIDE4MDgxKS4KIAogVG8gcnVuIGFuIGluZGl2aWR1YWwgVGVzdGNhc2Ugb3IgdGVzdCBtZXRob2QsIGV4dGVuZCB0aGUgZG90dGVkIG5hbWUgZ2l2ZW4gdG8KLXVuaXR0ZXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuIChCdXQgZ3VpIHRlc3RzIHdpbGwgbm90IHRoaXMgd2F5LikKK3VuaXR0ZXN0IG9uIHRoZSBjb21tYW5kIGxpbmUuCiAKIHB5dGhvbiAtbSB1bml0dGVzdCAtdiBpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3h5ei5UZXN0X2Nhc2UudGVzdF9tZXRoCisKKworNC4gSHVtYW4tbWVkaWF0ZWQgVGVzdHMKKworSHVtYW4tbWVkaWF0ZWQgdGVzdHMgYXJlIHdpZGdldCB0ZXN0cyB0aGF0IGNhbm5vdCBiZSBhdXRvbWF0ZWQgYnV0IG5lZWQgaHVtYW4KK3ZlcmlmaWNhdGlvbi4gVGhleSBhcmUgY29udGFpbmVkIGluIGlkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5LCB3aGljaCBoYXMKK2luc3RydWN0aW9ucy4gIChTb21lIG1vZHVsZXMgbmVlZCBhbiBhdXhpbGlhcnkgZnVuY3Rpb24sIGlkZW50aWZpZWQgd2l0aCAjIGh0ZXN0CisjIG9uIHRoZSBoZWFkZXIgbGluZS4pICBUaGUgc2V0IGlzIGFib3V0IGNvbXBsZXRlLCB0aG91Z2ggc29tZSB0ZXN0cyBuZWVkCitpbXByb3ZlbWVudC4gVG8gcnVuIGFsbCBodGVzdHMsIHJ1biB0aGUgaHRlc3QgZmlsZSBmcm9tIGFuIGVkaXRvciBvciBmcm9tIHRoZQorY29tbWFuZCBsaW5lIHdpdGg6CisKK3B5dGhvbiAtbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L2h0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMjQ1MTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvaHRlc3QucHkKQEAgLTAsMCArMSw0MDEgQEAKKycnJ1J1biBodW1hbiB0ZXN0cyBvZiBJZGxlJ3Mgd2luZG93LCBkaWFsb2csIGFuZCBwb3B1cCB3aWRnZXRzLgorCitydW4oKnRlc3RzKQorQ3JlYXRlIGEgbWFzdGVyIFRrIHdpbmRvdy4gIFdpdGhpbiB0aGF0LCBydW4gZWFjaCBjYWxsYWJsZSBpbiB0ZXN0cworYWZ0ZXIgZmluZGluZyB0aGUgbWF0Y2hpbmcgdGVzdCBzcGVjIGluIHRoaXMgZmlsZS4gIElmIHRlc3RzIGlzIGVtcHR5LAorcnVuIGFuIGh0ZXN0IGZvciBlYWNoIHNwZWMgZGljdCBpbiB0aGlzIGZpbGUgYWZ0ZXIgZmluZGluZyB0aGUgbWF0Y2hpbmcKK2NhbGxhYmxlIGluIHRoZSBtb2R1bGUgbmFtZWQgaW4gdGhlIHNwZWMuICBDbG9zZSB0aGUgd2luZG93IHRvIHNraXAgb3IKK2VuZCB0aGUgdGVzdC4KKworSW4gYSB0ZXN0ZWQgbW9kdWxlLCBsZXQgWCBiZSBhIGdsb2JhbCBuYW1lIGJvdW5kIHRvIGEgY2FsbGFibGUgKGNsYXNzCitvciBmdW5jdGlvbikgd2hvc2UgLl9fbmFtZV9fIGF0dHJ1YnV0ZSBpcyBhbHNvIFggKHRoZSB1c3VhbCBzaXR1YXRpb24pLgorVGhlIGZpcnN0IHBhcmFtZXRlciBvZiBYIG11c3QgYmUgJ3BhcmVudCcuICBXaGVuIGNhbGxlZCwgdGhlIHBhcmVudAorYXJndW1lbnQgd2lsbCBiZSB0aGUgcm9vdCB3aW5kb3cuICBYIG11c3QgY3JlYXRlIGEgY2hpbGQgVG9wbGV2ZWwKK3dpbmRvdyAob3Igc3ViY2xhc3MgdGhlcmVvZikuICBUaGUgVG9wbGV2ZWwgbWF5IGJlIGEgdGVzdCB3aWRnZXQgb3IKK2RpYWxvZywgaW4gd2hpY2ggY2FzZSB0aGUgY2FsbGFibGUgaXMgdGhlIGNvcnJlc29uZGluZyBjbGFzcy4gIE9yIHRoZQorVG9wbGV2ZWwgbWF5IGNvbnRhaW4gdGhlIHdpZGdldCB0byBiZSB0ZXN0ZWQgb3Igc2V0IHVwIGEgY29udGV4dCBpbgord2hpY2ggYSB0ZXN0IHdpZGdldCBpcyBpbnZva2VkLiAgSW4gdGhpcyBsYXR0ZXIgY2FzZSwgdGhlIGNhbGxhYmxlIGlzIGEKK3dyYXBwZXIgZnVuY3Rpb24gdGhhdCBzZXRzIHVwIHRoZSBUb3BsZXZlbCBhbmQgb3RoZXIgb2JqZWN0cy4gIFdyYXBwZXIKK2Z1bmN0aW9uIG5hbWVzLCBzdWNoIGFzIF9lZGl0b3Jfd2luZG93Jywgc2hvdWxkIHN0YXJ0IHdpdGggJ18nLgorCisKK0VuZCB0aGUgbW9kdWxlIHdpdGgKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICA8dW5pdHRlc3QsIGlmIHRoZXJlIGlzIG9uZT4KKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oWCkKKworVG8gaGF2ZSB3cmFwcGVyIGZ1bmN0aW9ucyBhbmQgdGVzdCBpbnZvY2F0aW9uIGNvZGUgaWdub3JlZCBieSBjb3ZlcmFnZXB5CityZXBvcnRzLCBwdXQgJyMgaHRlc3QgIycgb24gdGhlIGRlZiBzdGF0ZW1lbnQgaGVhZGVyIGxpbmUuCisKK2RlZiBfd3JhcHBlcihwYXJlbnQpOiAgIyBodGVzdCAjCisKK0Fsc28gbWFrZSBzdXJlIHRoYXQgdGhlICdpZiBfX25hbWVfXycgbGluZSBtYXRjaGVzIHRoZSBhYm92ZS4gIFRoZW4gaGF2ZQorbWFrZSBzdXJlIHRoYXQgLmNvdmVyYWdlcmMgaW5jbHVkZXMgdGhlIGZvbGxvd2luZy4KKworW3JlcG9ydF0KK2V4Y2x1ZGVfbGluZXMgPQorICAgIC4qIyBodGVzdCAjCisgICAgaWYgX19uYW1lX18gPT0gLl9fbWFpbl9fLjoKKworKFRoZSAiLiIgaW5zdGVhZCBvZiAiJyIgaXMgaW50ZW50aW9uYWwgYW5kIG5lY2Vzc2FyeS4pCisKKworVG8gcnVuIGFueSBYLCB0aGlzIGZpbGUgbXVzdCBjb250YWluIGEgbWF0Y2hpbmcgaW5zdGFuY2Ugb2YgdGhlCitmb2xsb3dpbmcgdGVtcGxhdGUsIHdpdGggWC5fX25hbWVfXyBwcmVwZW5kZWQgdG8gJ19zcGVjJy4KK1doZW4gYWxsIHRlc3RzIGFyZSBydW4sIHRoZSBwcmVmaXggaXMgdXNlIHRvIGdldCBYLgorCitfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICcnLAorICAgICdrd2RzJzogeyd0aXRsZSc6ICcnfSwKKyAgICAnbXNnJzogIiIKKyAgICB9CisKK2ZpbGUgKG5vIC5weSk6IHJ1bigpIGltcG9ydHMgZmlsZS5weS4KK2t3ZHM6IGF1Z21lbnRlZCB3aXRoIHsncGFyZW50Jzpyb290fSBhbmQgcGFzc2VkIHRvIFggYXMgKiprd2RzLgordGl0bGU6IGFuIGV4YW1wbGUga3dkOyBzb21lIHdpZGdldHMgbmVlZCB0aGlzLCBkZWxldGUgaWYgbm90LgorbXNnOiBtYXN0ZXIgd2luZG93IGhpbnRzIGFib3V0IHRlc3RpbmcgdGhlIHdpZGdldC4KKworCitNb2R1bGVzIGFuZCBjbGFzc2VzIG5vdCBiZWluZyB0ZXN0ZWQgYXQgdGhlIG1vbWVudDoKK1B5U2hlbGwuUHlTaGVsbEVkaXRvcldpbmRvdworRGVidWdnZXIuRGVidWdnZXIKK0F1dG9Db21wbGV0ZVdpbmRvdy5BdXRvQ29tcGxldGVXaW5kb3cKK091dHB1dFdpbmRvdy5PdXRwdXRXaW5kb3cgKGluZGlyZWN0bHkgYmVpbmcgdGVzdGVkIHdpdGggZ3JlcCB0ZXN0KQorJycnCisKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBpbXBvcnRfbW9kdWxlCitmcm9tIGlkbGVsaWIubWFjb3N4U3VwcG9ydCBpbXBvcnQgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cworaW1wb3J0IHRraW50ZXIgYXMgdGsKKworQWJvdXREaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdhYm91dERpYWxvZycsCisgICAgJ2t3ZHMnOiB7J3RpdGxlJzogJ2Fib3V0RGlhbG9nIHRlc3QnLAorICAgICAgICAgICAgICdfaHRlc3QnOiBUcnVlLAorICAgICAgICAgICAgIH0sCisgICAgJ21zZyc6ICJUZXN0IGV2ZXJ5IGJ1dHRvbi4gRW5zdXJlIFB5dGhvbiwgVEsgYW5kIElETEUgdmVyc2lvbnMgIgorICAgICAgICAgICAiYXJlIGNvcnJlY3RseSBkaXNwbGF5ZWQuXG4gW0Nsb3NlXSB0byBleGl0LiIsCisgICAgfQorCitfY2FsbHRpcF93aW5kb3dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdDYWxsVGlwV2luZG93JywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiVHlwaW5nICcoJyBzaG91bGQgZGlzcGxheSBhIGNhbGx0aXAuXG4iCisgICAgICAgICAgICJUeXBpbmcgJykgc2hvdWxkIGhpZGUgdGhlIGNhbGx0aXAuXG4iCisgICAgfQorCitfY2xhc3NfYnJvd3Nlcl9zcGVjID0geworICAgICdmaWxlJzogJ0NsYXNzQnJvd3NlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkluc3BlY3QgbmFtZXMgb2YgbW9kdWxlLCBjbGFzcyh3aXRoIHN1cGVyY2xhc3MgaWYgIgorICAgICAgICAgICAiYXBwbGljYWJsZSksIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucy5cblRvZ2dsZSBuZXN0ZWQgaXRlbXMuXG4iCisgICAgICAgICAgICJEb3VibGUgY2xpY2tpbmcgb24gaXRlbXMgcHJpbnRzIGEgdHJhY2ViYWNrIGZvciBhbiBleGNlcHRpb24gIgorICAgICAgICAgICAidGhhdCBpcyBpZ25vcmVkLiIKKyAgICB9CisKK19jb2xvcl9kZWxlZ2F0b3Jfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdDb2xvckRlbGVnYXRvcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRoZSB0ZXh0IGlzIHNhbXBsZSBQeXRob24gY29kZS5cbiIKKyAgICAgICAgICAgIkVuc3VyZSBjb21wb25lbnRzIGxpa2UgY29tbWVudHMsIGtleXdvcmRzLCBidWlsdGlucyxcbiIKKyAgICAgICAgICAgInN0cmluZywgZGVmaW5pdGlvbnMsIGFuZCBicmVhayBhcmUgY29ycmVjdGx5IGNvbG9yZWQuXG4iCisgICAgICAgICAgICJUaGUgZGVmYXVsdCBjb2xvciBzY2hlbWUgaXMgaW4gaWRsZWxpYi9jb25maWctaGlnaGxpZ2h0LmRlZiIKKyAgICB9CisKK0NvbmZpZ0RpYWxvZ19zcGVjID0geworICAgICdmaWxlJzogJ2NvbmZpZ0RpYWxvZycsCisgICAgJ2t3ZHMnOiB7J3RpdGxlJzogJ0NvbmZpZ0RpYWxvZ1Rlc3QnLAorICAgICAgICAgICAgICdfaHRlc3QnOiBUcnVlLH0sCisgICAgJ21zZyc6ICJJRExFIHByZWZlcmVuY2VzIGRpYWxvZy5cbiIKKyAgICAgICAgICAgIkluIHRoZSAnRm9udHMvVGFicycgdGFiLCBjaGFuZ2luZyBmb250IGZhY2UsIHNob3VsZCB1cGRhdGUgdGhlICIKKyAgICAgICAgICAgImZvbnQgZmFjZSBvZiB0aGUgdGV4dCBpbiB0aGUgYXJlYSBiZWxvdyBpdC5cbkluIHRoZSAiCisgICAgICAgICAgICInSGlnaGxpZ2h0aW5nJyB0YWIsIHRyeSBkaWZmZXJlbnQgY29sb3Igc2NoZW1lcy4gQ2xpY2tpbmcgIgorICAgICAgICAgICAiaXRlbXMgaW4gdGhlIHNhbXBsZSBwcm9ncmFtIHNob3VsZCB1cGRhdGUgdGhlIGNob2ljZXMgYWJvdmUgaXQuIgorICAgICAgICAgICAiXG5JbiB0aGUgJ0tleXMnLCAnR2VuZXJhbCcgYW5kICdFeHRlbnNpb25zJyB0YWJzLCB0ZXN0IHNldHRpbmdzIgorICAgICAgICAgICAib2YgaW50ZXJlc3QuIgorICAgICAgICAgICAiXG5bT2tdIHRvIGNsb3NlIHRoZSBkaWFsb2cuW0FwcGx5XSB0byBhcHBseSB0aGUgc2V0dGluZ3MgYW5kICIKKyAgICAgICAgICAgImFuZCBbQ2FuY2VsXSB0byByZXZlcnQgYWxsIGNoYW5nZXMuXG5SZS1ydW4gdGhlIHRlc3QgdG8gZW5zdXJlICIKKyAgICAgICAgICAgImNoYW5nZXMgbWFkZSBoYXZlIHBlcnNpc3RlZC4iCisgICAgfQorCisjIFRPRE8gSW1wcm92ZSBtZXNzYWdlCitfZHluX29wdGlvbl9tZW51X3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnZHluT3B0aW9uTWVudVdpZGdldCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlNlbGVjdCBvbmUgb2YgdGhlIG1hbnkgb3B0aW9ucyBpbiB0aGUgJ29sZCBvcHRpb24gc2V0Jy5cbiIKKyAgICAgICAgICAgIkNsaWNrIHRoZSBidXR0b24gdG8gY2hhbmdlIHRoZSBvcHRpb24gc2V0LlxuIgorICAgICAgICAgICAiU2VsZWN0IG9uZSBvZiB0aGUgbWFueSBvcHRpb25zIGluIHRoZSAnbmV3IG9wdGlvbiBzZXQnLiIKKyAgICB9CisKKyMgVE9ETyBlZGl0IHdyYXBwZXIKK19lZGl0b3Jfd2luZG93X3NwZWMgPSB7CisgICAnZmlsZSc6ICdFZGl0b3JXaW5kb3cnLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJUZXN0IGVkaXRvciBmdW5jdGlvbnMgb2YgaW50ZXJlc3QuXG4iCisgICAgICAgICAgICJCZXN0IHRvIGNsb3NlIGVkaXRvciBmaXJzdC4iCisgICAgfQorCitHZXRDZmdTZWN0aW9uTmFtZURpYWxvZ19zcGVjID0geworICAgICdmaWxlJzogJ2NvbmZpZ1NlY3Rpb25OYW1lRGlhbG9nJywKKyAgICAna3dkcyc6IHsndGl0bGUnOidHZXQgTmFtZScsCisgICAgICAgICAgICAgJ21lc3NhZ2UnOidFbnRlciBzb21ldGhpbmcnLAorICAgICAgICAgICAgICd1c2VkX25hbWVzJzogeydhYmMnfSwKKyAgICAgICAgICAgICAnX2h0ZXN0JzogVHJ1ZX0sCisgICAgJ21zZyc6ICJBZnRlciB0aGUgdGV4dCBlbnRlcmVkIHdpdGggW09rXSBpcyBzdHJpcHBlZCwgPG5vdGhpbmc+LCAiCisgICAgICAgICAgICInYWJjJywgb3IgbW9yZSB0aGF0IDMwIGNoYXJzIGFyZSBlcnJvcnMuXG4iCisgICAgICAgICAgICJDbG9zZSAnR2V0IE5hbWUnIHdpdGggYSB2YWxpZCBlbnRyeSAocHJpbnRlZCB0byBTaGVsbCksICIKKyAgICAgICAgICAgIltDYW5jZWxdLCBvciBbWF0iLAorICAgIH0KKworR2V0SGVscFNvdXJjZURpYWxvZ19zcGVjID0geworICAgICdmaWxlJzogJ2NvbmZpZ0hlbHBTb3VyY2VFZGl0JywKKyAgICAna3dkcyc6IHsndGl0bGUnOiAnR2V0IGhlbHBzb3VyY2UnLAorICAgICAgICAgICAgICdfaHRlc3QnOiBUcnVlfSwKKyAgICAnbXNnJzogIkVudGVyIG1lbnUgaXRlbSBuYW1lIGFuZCBoZWxwIGZpbGUgcGF0aFxuICIKKyAgICAgICAgICAgIjxub3RoaW5nPiBhbmQgbW9yZSB0aGFuIDMwIGNoYXJzIGFyZSBpbnZhbGlkIG1lbnUgaXRlbSBuYW1lcy5cbiIKKyAgICAgICAgICAgIjxub3RoaW5nPiwgZmlsZSBkb2VzIG5vdCBleGlzdCBhcmUgaW52YWxpZCBwYXRoIGl0ZW1zLlxuIgorICAgICAgICAgICAiVGVzdCBmb3IgaW5jb21wbGV0ZSB3ZWIgYWRkcmVzcyBmb3IgaGVscCBmaWxlIHBhdGguXG4iCisgICAgICAgICAgICJBIHZhbGlkIGVudHJ5IHdpbGwgYmUgcHJpbnRlZCB0byBzaGVsbCB3aXRoIFswa10uXG4iCisgICAgICAgICAgICJbQ2FuY2VsXSB3aWxsIHByaW50IE5vbmUgdG8gc2hlbGwiLAorICAgIH0KKworIyBVcGRhdGUgb25jZSBpc3N1ZTIxNTE5IGlzIHJlc29sdmVkLgorR2V0S2V5c0RpYWxvZ19zcGVjID0geworICAgICdmaWxlJzogJ2tleWJpbmRpbmdEaWFsb2cnLAorICAgICdrd2RzJzogeyd0aXRsZSc6ICdUZXN0IGtleWJpbmRpbmdzJywKKyAgICAgICAgICAgICAnYWN0aW9uJzogJ2ZpbmQtYWdhaW4nLAorICAgICAgICAgICAgICdjdXJyZW50S2V5U2VxdWVuY2VzJzogWycnXSAsCisgICAgICAgICAgICAgJ19odGVzdCc6IFRydWUsCisgICAgICAgICAgICAgfSwKKyAgICAnbXNnJzogIlRlc3QgZm9yIGRpZmZlcmVudCBrZXkgbW9kaWZpZXIgc2VxdWVuY2VzLlxuIgorICAgICAgICAgICAiPG5vdGhpbmc+IGlzIGludmFsaWQuXG4iCisgICAgICAgICAgICJObyBtb2RpZmllciBrZXkgaXMgaW52YWxpZC5cbiIKKyAgICAgICAgICAgIlNoaWZ0IGtleSB3aXRoIFthLXpdLFswLTldLCBmdW5jdGlvbiBrZXksIG1vdmUga2V5LCB0YWIsIHNwYWNlIgorICAgICAgICAgICAiaXMgaW52YWxpZC5cbk5vIHZhbGlkaXR5IGNoZWNraW5nIGlmIGFkdmFuY2VkIGtleSBiaW5kaW5nICIKKyAgICAgICAgICAgImVudHJ5IGlzIHVzZWQuIgorICAgIH0KKworX2dyZXBfZGlhbG9nX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnR3JlcERpYWxvZycsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkNsaWNrIHRoZSAnU2hvdyBHcmVwRGlhbG9nJyBidXR0b24uXG4iCisgICAgICAgICAgICJUZXN0IHRoZSB2YXJpb3VzICdGaW5kLWluLWZpbGVzJyBmdW5jdGlvbnMuXG4iCisgICAgICAgICAgICJUaGUgcmVzdWx0cyBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgbmV3ICcqT3V0cHV0Kicgd2luZG93LlxuIgorICAgICAgICAgICAiJ1JpZ2h0LWNsaWNrJy0+J0dvdG8gZmlsZS9saW5lJyBhbnl3aGVyZSBpbiB0aGUgc2VhcmNoIHJlc3VsdHMgIgorICAgICAgICAgICAic2hvdWxkIG9wZW4gdGhhdCBmaWxlIFxuaW4gYSBuZXcgRWRpdG9yV2luZG93LiIKKyAgICB9CisKK19pb19iaW5kaW5nX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnSU9CaW5kaW5nJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiVGVzdCB0aGUgZm9sbG93aW5nIGJpbmRpbmdzLlxuIgorICAgICAgICAgICAiPENvbnRyb2wtbz4gdG8gb3BlbiBmaWxlIGZyb20gZGlhbG9nLlxuIgorICAgICAgICAgICAiRWRpdCB0aGUgZmlsZS5cbiIKKyAgICAgICAgICAgIjxDb250cm9sLXM+IHRvIHNhdmUgdGhlIGZpbGUuXG4iCisgICAgICAgICAgICJDaGVjayB0aGF0IGNoYW5nZXMgd2VyZSBzYXZlZCBieSBvcGVuaW5nIHRoZSBmaWxlIGVsc2V3aGVyZS4iCisgICAgfQorCitfbXVsdGlfY2FsbF9zcGVjID0geworICAgICdmaWxlJzogJ011bHRpQ2FsbCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRoZSBmb2xsb3dpbmcgYWN0aW9ucyBzaG91bGQgdHJpZ2dlciBhIHByaW50IHRvIGNvbnNvbGUgb3IgSURMRSIKKyAgICAgICAgICAgIiBTaGVsbC5cbkVudGVyaW5nIGFuZCBsZWF2aW5nIHRoZSB0ZXh0IGFyZWEsIGtleSBlbnRyeSwgIgorICAgICAgICAgICAiPENvbnRyb2wtS2V5PixcbjxBbHQtS2V5LWE+LCA8Q29udHJvbC1LZXktYT4sICIKKyAgICAgICAgICAgIjxBbHQtQ29udHJvbC1LZXktYT4sIFxuPENvbnRyb2wtQnV0dG9uLTE+LCA8QWx0LUJ1dHRvbi0xPiBhbmQgIgorICAgICAgICAgICAiZm9jdXNpbmcgb3V0IG9mIHRoZSB3aW5kb3dcbmFyZSBzZXF1ZW5jZXMgdG8gYmUgdGVzdGVkLiIKKyAgICB9CisKK19tdWx0aXN0YXR1c19iYXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdNdWx0aVN0YXR1c0JhcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkVuc3VyZSBwcmVzZW5jZSBvZiBtdWx0aS1zdGF0dXMgYmFyIGJlbG93IHRleHQgYXJlYS5cbiIKKyAgICAgICAgICAgIkNsaWNrICdVcGRhdGUgU3RhdHVzJyB0byBjaGFuZ2UgdGhlIG11bHRpLXN0YXR1cyB0ZXh0IgorICAgIH0KKworX29iamVjdF9icm93c2VyX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnT2JqZWN0QnJvd3NlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkRvdWJsZSBjbGljayBvbiBpdGVtcyB1cHRvIHRoZSBsb3dlc3QgbGV2ZWwuXG4iCisgICAgICAgICAgICJBdHRyaWJ1dGVzIG9mIHRoZSBvYmplY3RzIGFuZCByZWxhdGVkIGluZm9ybWF0aW9uICIKKyAgICAgICAgICAgIndpbGwgYmUgZGlzcGxheWVkIHNpZGUtYnktc2lkZSBhdCBlYWNoIGxldmVsLiIKKyAgICB9CisKK19wYXRoX2Jyb3dzZXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdQYXRoQnJvd3NlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRlc3QgZm9yIGNvcnJlY3QgZGlzcGxheSBvZiBhbGwgcGF0aHMgaW4gc3lzLnBhdGguXG4iCisgICAgICAgICAgICJUb2dnbGUgbmVzdGVkIGl0ZW1zIHVwdG8gdGhlIGxvd2VzdCBsZXZlbC5cbiIKKyAgICAgICAgICAgIkRvdWJsZSBjbGlja2luZyBvbiBhbiBpdGVtIHByaW50cyBhIHRyYWNlYmFja1xuIgorICAgICAgICAgICAiZm9yIGFuIGV4Y2VwdGlvbiB0aGF0IGlzIGlnbm9yZWQuIgorICAgIH0KKworX3BlcmNvbGF0b3Jfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdQZXJjb2xhdG9yJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiVGhlcmUgYXJlIHR3byB0cmFjZXJzIHdoaWNoIGNhbiBiZSB0b2dnbGVkIHVzaW5nIGEgY2hlY2tib3guXG4iCisgICAgICAgICAgICJUb2dnbGluZyBhIHRyYWNlciAnb24nIGJ5IGNoZWNraW5nIGl0IHNob3VsZCBwcmludCB0cmFjZXIiCisgICAgICAgICAgICJvdXRwdXQgdG8gdGhlIGNvbnNvbGUgb3IgdG8gdGhlIElETEUgc2hlbGwuXG4iCisgICAgICAgICAgICJJZiBib3RoIHRoZSB0cmFjZXJzIGFyZSAnb24nLCB0aGUgb3V0cHV0IGZyb20gdGhlIHRyYWNlciB3aGljaCAiCisgICAgICAgICAgICJ3YXMgc3dpdGNoZWQgJ29uJyBsYXRlciwgc2hvdWxkIGJlIHByaW50ZWQgZmlyc3RcbiIKKyAgICAgICAgICAgIlRlc3QgZm9yIGFjdGlvbnMgbGlrZSB0ZXh0IGVudHJ5LCBhbmQgcmVtb3ZhbC4iCisgICAgfQorCitfcmVwbGFjZV9kaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdSZXBsYWNlRGlhbG9nJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiQ2xpY2sgdGhlICdSZXBsYWNlJyBidXR0b24uXG4iCisgICAgICAgICAgICJUZXN0IHZhcmlvdXMgcmVwbGFjZSBvcHRpb25zIGluIHRoZSAnUmVwbGFjZSBkaWFsb2cnLlxuIgorICAgICAgICAgICAiQ2xpY2sgW0Nsb3NlXSBvciBbWF0gdG8gY2xvc2UgdGhlICdSZXBsYWNlIERpYWxvZycuIgorICAgIH0KKworX3NlYXJjaF9kaWFsb2dfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdTZWFyY2hEaWFsb2cnLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJDbGljayB0aGUgJ1NlYXJjaCcgYnV0dG9uLlxuIgorICAgICAgICAgICAiVGVzdCB2YXJpb3VzIHNlYXJjaCBvcHRpb25zIGluIHRoZSAnU2VhcmNoIGRpYWxvZycuXG4iCisgICAgICAgICAgICJDbGljayBbQ2xvc2VdIG9yIFtYXSB0byBjbG9zZSB0aGUgJ1NlYXJjaCBEaWFsb2cnLiIKKyAgICB9CisKK19zY3JvbGxlZF9saXN0X3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnU2Nyb2xsZWRMaXN0JywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiWW91IHNob3VsZCBzZWUgYSBzY3JvbGxhYmxlIGxpc3Qgb2YgaXRlbXNcbiIKKyAgICAgICAgICAgIlNlbGVjdGluZyAoY2xpY2tpbmcpIG9yIGRvdWJsZSBjbGlja2luZyBhbiBpdGVtICIKKyAgICAgICAgICAgInByaW50cyB0aGUgbmFtZSB0byB0aGUgY29uc29sZSBvciBJZGxlIHNoZWxsLlxuIgorICAgICAgICAgICAiUmlnaHQgY2xpY2tpbmcgYW4gaXRlbSB3aWxsIGRpc3BsYXkgYSBwb3B1cC4iCisgICAgfQorCitzaG93X2lkbGVoZWxwX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnaGVscCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIklmIHRoZSBoZWxwIHRleHQgZGlzcGxheXMsIHRoaXMgd29ya3MuXG4iCisgICAgICAgICAgICJUZXh0IGlzIHNlbGVjdGFibGUuIFdpbmRvdyBpcyBzY3JvbGxhYmxlLiIKKyAgICB9CisKK19zdGFja192aWV3ZXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdTdGFja1ZpZXdlcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkEgc3RhY2t0cmFjZSBmb3IgYSBOYW1lRXJyb3IgZXhjZXB0aW9uLlxuIgorICAgICAgICAgICAiRXhwYW5kICdpZGxlbGliIC4uLicgYW5kICc8bG9jYWxzPicuXG4iCisgICAgICAgICAgICJDaGVjayB0aGF0IGV4Y192YWx1ZSwgZXhjX3RiLCBhbmQgZXhjX3R5cGUgYXJlIGNvcnJlY3QuXG4iCisgICAgfQorCitfdGFiYmVkX3BhZ2VzX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAndGFiYmVkcGFnZXMnLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJUb2dnbGUgYmV0d2VlbiB0aGUgdHdvIHRhYnMgJ2ZvbycgYW5kICdiYXInXG4iCisgICAgICAgICAgICJBZGQgYSB0YWIgYnkgZW50ZXJpbmcgYSBzdWl0YWJsZSBuYW1lIGZvciBpdC5cbiIKKyAgICAgICAgICAgIlJlbW92ZSBhbiBleGlzdGluZyB0YWIgYnkgZW50ZXJpbmcgaXRzIG5hbWUuXG4iCisgICAgICAgICAgICJSZW1vdmUgYWxsIGV4aXN0aW5nIHRhYnMuXG4iCisgICAgICAgICAgICI8bm90aGluZz4gaXMgYW4gaW52YWxpZCBhZGQgcGFnZSBhbmQgcmVtb3ZlIHBhZ2UgbmFtZS5cbiIKKyAgICB9CisKK1RleHRWaWV3ZXJfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICd0ZXh0VmlldycsCisgICAgJ2t3ZHMnOiB7J3RpdGxlJzogJ1Rlc3QgdGV4dFZpZXcnLAorICAgICAgICAgICAgICd0ZXh0JzonVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cbicqMzUsCisgICAgICAgICAgICAgJ19odGVzdCc6IFRydWV9LAorICAgICdtc2cnOiAiVGVzdCBmb3IgcmVhZC1vbmx5IHByb3BlcnR5IG9mIHRleHQuXG4iCisgICAgICAgICAgICJUZXh0IGlzIHNlbGVjdGFibGUuIFdpbmRvdyBpcyBzY3JvbGxhYmxlLiIsCisgICAgIH0KKworX3Rvb2x0aXBfc3BlYyA9IHsKKyAgICAnZmlsZSc6ICdUb29sVGlwJywKKyAgICAna3dkcyc6IHt9LAorICAgICdtc2cnOiAiUGxhY2UgbW91c2UgY3Vyc29yIG92ZXIgYm90aCB0aGUgYnV0dG9uc1xuIgorICAgICAgICAgICAiQSB0b29sdGlwIHNob3VsZCBhcHBlYXIgd2l0aCBzb21lIHRleHQuIgorICAgIH0KKworX3RyZWVfd2lkZ2V0X3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnVHJlZVdpZGdldCcsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIlRoZSBjYW52YXMgaXMgc2Nyb2xsYWJsZS5cbiIKKyAgICAgICAgICAgIkNsaWNrIG9uIGZvbGRlcnMgdXB0byB0byB0aGUgbG93ZXN0IGxldmVsLiIKKyAgICB9CisKK191bmRvX2RlbGVnYXRvcl9zcGVjID0geworICAgICdmaWxlJzogJ1VuZG9EZWxlZ2F0b3InLAorICAgICdrd2RzJzoge30sCisgICAgJ21zZyc6ICJDbGljayBbVW5kb10gdG8gdW5kbyBhbnkgYWN0aW9uLlxuIgorICAgICAgICAgICAiQ2xpY2sgW1JlZG9dIHRvIHJlZG8gYW55IGFjdGlvbi5cbiIKKyAgICAgICAgICAgIkNsaWNrIFtEdW1wXSB0byBkdW1wIHRoZSBjdXJyZW50IHN0YXRlICIKKyAgICAgICAgICAgImJ5IHByaW50aW5nIHRvIHRoZSBjb25zb2xlIG9yIHRoZSBJRExFIHNoZWxsLlxuIgorICAgIH0KKworX3dpZGdldF9yZWRpcmVjdG9yX3NwZWMgPSB7CisgICAgJ2ZpbGUnOiAnV2lkZ2V0UmVkaXJlY3RvcicsCisgICAgJ2t3ZHMnOiB7fSwKKyAgICAnbXNnJzogIkV2ZXJ5IHRleHQgaW5zZXJ0IHNob3VsZCBiZSBwcmludGVkIHRvIHRoZSBjb25zb2xlLiIKKyAgICAgICAgICAgIm9yIHRoZSBJRExFIHNoZWxsLiIKKyAgICB9CisKK2RlZiBydW4oKnRlc3RzKToKKyAgICByb290ID0gdGsuVGsoKQorICAgIHJvb3QudGl0bGUoJ0lETEUgaHRlc3QnKQorICAgIHJvb3QucmVzaXphYmxlKDAsIDApCisgICAgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cyhyb290KQorCisgICAgIyBhIHNjcm9sbGFibGUgTGFiZWwgbGlrZSBjb25zdGFudCB3aWR0aCB0ZXh0IHdpZGdldC4KKyAgICBmcmFtZUxhYmVsID0gdGsuRnJhbWUocm9vdCwgcGFkeD0xMCkKKyAgICBmcmFtZUxhYmVsLnBhY2soKQorICAgIHRleHQgPSB0ay5UZXh0KGZyYW1lTGFiZWwsIHdyYXA9J3dvcmQnKQorICAgIHRleHQuY29uZmlndXJlKGJnPXJvb3QuY2dldCgnYmcnKSwgcmVsaWVmPSdmbGF0JywgaGVpZ2h0PTQsIHdpZHRoPTcwKQorICAgIHNjcm9sbGJhciA9IHRrLlNjcm9sbGJhcihmcmFtZUxhYmVsLCBjb21tYW5kPXRleHQueXZpZXcpCisgICAgdGV4dC5jb25maWcoeXNjcm9sbGNvbW1hbmQ9c2Nyb2xsYmFyLnNldCkKKyAgICBzY3JvbGxiYXIucGFjayhzaWRlPSdyaWdodCcsIGZpbGw9J3knLCBleHBhbmQ9RmFsc2UpCisgICAgdGV4dC5wYWNrKHNpZGU9J2xlZnQnLCBmaWxsPSdib3RoJywgZXhwYW5kPVRydWUpCisKKyAgICB0ZXN0X2xpc3QgPSBbXSAjIExpc3Qgb2YgdHVwbGVzIG9mIHRoZSBmb3JtIChzcGVjLCBjYWxsYWJsZSB3aWRnZXQpCisgICAgaWYgdGVzdHM6CisgICAgICAgIGZvciB0ZXN0IGluIHRlc3RzOgorICAgICAgICAgICAgdGVzdF9zcGVjID0gZ2xvYmFscygpW3Rlc3QuX19uYW1lX18gKyAnX3NwZWMnXQorICAgICAgICAgICAgdGVzdF9zcGVjWyduYW1lJ10gPSB0ZXN0Ll9fbmFtZV9fCisgICAgICAgICAgICB0ZXN0X2xpc3QuYXBwZW5kKCh0ZXN0X3NwZWMsICB0ZXN0KSkKKyAgICBlbHNlOgorICAgICAgICBmb3IgaywgZCBpbiBnbG9iYWxzKCkuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGsuZW5kc3dpdGgoJ19zcGVjJyk6CisgICAgICAgICAgICAgICAgdGVzdF9uYW1lID0ga1s6LTVdCisgICAgICAgICAgICAgICAgdGVzdF9zcGVjID0gZAorICAgICAgICAgICAgICAgIHRlc3Rfc3BlY1snbmFtZSddID0gdGVzdF9uYW1lCisgICAgICAgICAgICAgICAgbW9kID0gaW1wb3J0X21vZHVsZSgnaWRsZWxpYi4nICsgdGVzdF9zcGVjWydmaWxlJ10pCisgICAgICAgICAgICAgICAgdGVzdCA9IGdldGF0dHIobW9kLCB0ZXN0X25hbWUpCisgICAgICAgICAgICAgICAgdGVzdF9saXN0LmFwcGVuZCgodGVzdF9zcGVjLCB0ZXN0KSkKKworICAgIHRlc3RfbmFtZSA9IHRrLlN0cmluZ1ZhcignJykKKyAgICBjYWxsYWJsZV9vYmplY3QgPSBOb25lCisgICAgdGVzdF9rd2RzID0gTm9uZQorCisgICAgZGVmIG5leHQoKToKKworICAgICAgICBub25sb2NhbCB0ZXN0X25hbWUsIGNhbGxhYmxlX29iamVjdCwgdGVzdF9rd2RzCisgICAgICAgIGlmIGxlbih0ZXN0X2xpc3QpID09IDE6CisgICAgICAgICAgICBuZXh0X2J1dHRvbi5wYWNrX2ZvcmdldCgpCisgICAgICAgIHRlc3Rfc3BlYywgY2FsbGFibGVfb2JqZWN0ID0gdGVzdF9saXN0LnBvcCgpCisgICAgICAgIHRlc3Rfa3dkcyA9IHRlc3Rfc3BlY1sna3dkcyddCisgICAgICAgIHRlc3Rfa3dkc1sncGFyZW50J10gPSByb290CisgICAgICAgIHRlc3RfbmFtZS5zZXQoJ1Rlc3QgJyArIHRlc3Rfc3BlY1snbmFtZSddKQorCisgICAgICAgIHRleHQuY29uZmlndXJlKHN0YXRlPSdub3JtYWwnKSAjIGVuYWJsZSB0ZXh0IGVkaXRpbmcKKyAgICAgICAgdGV4dC5kZWxldGUoJzEuMCcsJ2VuZCcpCisgICAgICAgIHRleHQuaW5zZXJ0KCIxLjAiLHRlc3Rfc3BlY1snbXNnJ10pCisgICAgICAgIHRleHQuY29uZmlndXJlKHN0YXRlPSdkaXNhYmxlZCcpICMgcHJlc2VydmUgcmVhZC1vbmx5IHByb3BlcnR5CisKKyAgICBkZWYgcnVuX3Rlc3QoKToKKyAgICAgICAgd2lkZ2V0ID0gY2FsbGFibGVfb2JqZWN0KCoqdGVzdF9rd2RzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmludCh3aWRnZXQucmVzdWx0KQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBidXR0b24gPSB0ay5CdXR0b24ocm9vdCwgdGV4dHZhcmlhYmxlPXRlc3RfbmFtZSwgY29tbWFuZD1ydW5fdGVzdCkKKyAgICBidXR0b24ucGFjaygpCisgICAgbmV4dF9idXR0b24gPSB0ay5CdXR0b24ocm9vdCwgdGV4dD0iTmV4dCIsIGNvbW1hbmQ9bmV4dCkKKyAgICBuZXh0X2J1dHRvbi5wYWNrKCkKKworICAgIG5leHQoKQorCisgICAgcm9vdC5tYWlubG9vcCgpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgcnVuKCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9tb2NrX2lkbGUucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja19pZGxlLnB5CmluZGV4IGMzNjRhMjQuLjE2NzJhMzQgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC9tb2NrX2lkbGUucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L21vY2tfaWRsZS5weQpAQCAtNSw2ICs1LDMzIEBACiAKIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ayBpbXBvcnQgVGV4dAogCitjbGFzcyBGdW5jOgorICAgICcnJ01vY2sgZnVuY3Rpb24gY2FwdHVyZXMgYXJncyBhbmQgcmV0dXJucyByZXN1bHQgc2V0IGJ5IHRlc3QuCisKKyAgICBBdHRyaWJ1dGVzOgorICAgIHNlbGYuY2FsbGVkIC0gcmVjb3JkcyBjYWxsIGV2ZW4gaWYgbm8gYXJncywga3dkcyBwYXNzZWQuCisgICAgc2VsZi5yZXN1bHQgLSBzZXQgYnkgaW5pdCwgcmV0dXJuZWQgYnkgY2FsbC4KKyAgICBzZWxmLmFyZ3MgLSBjYXB0dXJlcyBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKyAgICBzZWxmLmt3ZHMgLSBjYXB0dXJlcyBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgIE1vc3QgY29tbW9uIHVzZSB3aWxsIHByb2JhYmx5IGJlIHRvIG1vY2sgbWV0aG9kcy4KKyAgICBNb2NrX3RrLlZhciBhbmQgTWJveF9mdW5jIGFyZSBzcGVjaWFsIHZhcmlhbnRzIG9mIHRoaXMuCisgICAgJycnCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJlc3VsdD1Ob25lKToKKyAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQorICAgICAgICBzZWxmLnJlc3VsdCA9IHJlc3VsdAorICAgICAgICBzZWxmLmFyZ3MgPSBOb25lCisgICAgICAgIHNlbGYua3dkcyA9IE5vbmUKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CisgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCisgICAgICAgIHNlbGYua3dkcyA9IGt3ZHMKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLnJlc3VsdCwgQmFzZUV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBzZWxmLnJlc3VsdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucmVzdWx0CisKKwogY2xhc3MgRWRpdG9yOgogICAgICcnJ01pbmltYWxseSBpbWl0YXRlIEVkaXRvcldpbmRvdy5FZGl0b3JXaW5kb3cgY2xhc3MuCiAgICAgJycnCkBAIC0xNyw2ICs0NCw3IEBACiAgICAgICAgIGxhc3QgPSBzZWxmLnRleHQuaW5kZXgoJ2VuZCcpCiAgICAgICAgIHJldHVybiBmaXJzdCwgbGFzdAogCisKIGNsYXNzIFVuZG9EZWxlZ2F0b3I6CiAgICAgJycnTWluaW1hbGx5IGltaXRhdGUgVW5kb0RlbGVnYXRvcixVbmRvRGVsZWdhdG9yIGNsYXNzLgogICAgICcnJwpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L21vY2tfdGsucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja190ay5weQppbmRleCA3NjJiYmM5Li44NmZlODQ4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja190ay5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvbW9ja190ay5weQpAQCAtMSw5ICsxLDI3IEBACiAiIiJDbGFzc2VzIHRoYXQgcmVwbGFjZSB0a2ludGVyIGd1aSBvYmplY3RzIHVzZWQgYnkgYW4gb2JqZWN0IGJlaW5nIHRlc3RlZC4KIAotQSBndWkgb2JqZWN0IGlzIGFueXRoaW5nIHdpdGggYSBtYXN0ZXIgb3IgcGFyZW50IHBhcmFtZW50ZXIsIHdoaWNoIGlzIHR5cGljYWxseQotcmVxdWlyZWQgaW4gc3BpdGUgb2Ygd2hhdCB0aGUgZG9jIHN0cmluZ3Mgc2F5LgorQSBndWkgb2JqZWN0IGlzIGFueXRoaW5nIHdpdGggYSBtYXN0ZXIgb3IgcGFyZW50IHBhcmFtZXRlciwgd2hpY2ggaXMKK3R5cGljYWxseSByZXF1aXJlZCBpbiBzcGl0ZSBvZiB3aGF0IHRoZSBkb2Mgc3RyaW5ncyBzYXkuCiAiIiIKIAorY2xhc3MgRXZlbnQ6CisgICAgJycnTWluaW1hbCBtb2NrIHdpdGggYXR0cmlidXRlcyBmb3IgdGVzdGluZyBldmVudCBoYW5kbGVycy4KKworICAgIFRoaXMgaXMgbm90IGEgZ3VpIG9iamVjdCwgYnV0IGlzIHVzZWQgYXMgYW4gYXJndW1lbnQgZm9yIGNhbGxiYWNrcworICAgIHRoYXQgYWNjZXNzIGF0dHJpYnV0ZXMgb2YgdGhlIGV2ZW50IHBhc3NlZC4gSWYgYSBjYWxsYmFjayBpZ25vcmVzCisgICAgdGhlIGV2ZW50LCBvdGhlciB0aGFuIHRoZSBmYWN0IHRoYXQgaXMgaGFwcGVuZWQsIHBhc3MgJ2V2ZW50Jy4KKworICAgIEtleWJvYXJkLCBtb3VzZSwgd2luZG93LCBhbmQgb3RoZXIgc291cmNlcyBnZW5lcmF0ZSBFdmVudCBpbnN0YW5jZXMuCisgICAgRXZlbnQgaW5zdGFuY2VzIGhhdmUgdGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzOiBzZXJpYWwgKG51bWJlciBvZgorICAgIGV2ZW50KSwgdGltZSAob2YgZXZlbnQpLCB0eXBlIChvZiBldmVudCBhcyBudW1iZXIpLCB3aWRnZXQgKGluIHdoaWNoCisgICAgZXZlbnQgb2NjdXJyZWQpLCBhbmQgeCx5IChwb3NpdGlvbiBvZiBtb3VzZSkuIFRoZXJlIGFyZSBvdGhlcgorICAgIGF0dHJpYnV0ZXMgZm9yIHNwZWNpZmljIGV2ZW50cywgc3VjaCBhcyBrZXljb2RlIGZvciBrZXkgZXZlbnRzLgorICAgIHRraW50ZXIuRXZlbnQuX19kb2NfXyBoYXMgbW9yZSBidXQgaXMgc3RpbGwgbm90IGNvbXBsZXRlLgorICAgICcnJworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3ZHMpOgorICAgICAgICAiQ3JlYXRlIGV2ZW50IHdpdGggYXR0cmlidXRlcyBuZWVkZWQgZm9yIHRlc3QiCisgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGt3ZHMpCisKIGNsYXNzIFZhcjoKICAgICAiVXNlIGZvciBTdHJpbmcvSW50L0Jvb2xlYW5WYXI6IGluY29tcGxldGUiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1hc3Rlcj1Ob25lLCB2YWx1ZT1Ob25lLCBuYW1lPU5vbmUpOgpAQCAtMjAsOSArMzgsMTAgQEAKIAogICAgIEluc3RlYWQgb2YgZGlzcGxheWluZyBhIG1lc3NhZ2UgYm94LCB0aGUgbW9jaydzIGNhbGwgbWV0aG9kIHNhdmVzIHRoZQogICAgIGFyZ3VtZW50cyBhcyBpbnN0YW5jZSBhdHRyaWJ1dGVzLCB3aGljaCB0ZXN0IGZ1bmN0aW9ucyBjYW4gdGhlbiBleGFtaW1lLgorICAgIFRoZSB0ZXN0IGNhbiBzZXQgdGhlIHJlc3VsdCByZXR1cm5lZCB0byBhc2sgZnVuY3Rpb24KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYucmVzdWx0ID0gTm9uZSAgIyBUaGUgcmV0dXJuIGZvciBhbGwgc2hvdyBmdW5jcworICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZXN1bHQ9Tm9uZSk6CisgICAgICAgIHNlbGYucmVzdWx0ID0gcmVzdWx0ICAjIFJldHVybiBOb25lIGZvciBhbGwgc2hvdyBmdW5jcwogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCB0aXRsZSwgbWVzc2FnZSwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgICMgU2F2ZSBhbGwgYXJncyBmb3IgcG9zc2libGUgZXhhbWluYXRpb24gYnkgdGVzdGVyCiAgICAgICAgIHNlbGYudGl0bGUgPSB0aXRsZQpAQCAtOTcsNyArMTE2LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIGEgKGxpbmUsIGNoYXIpIHR1cGxlIG9mIGludCBpbmRleGVzIGludG8gc2VsZi5kYXRhLgogCiAgICAgICAgIFRoaXMgaW1wbGVtZW50cyAuaW5kZXggd2l0aG91dCBjb252ZXJ0aW5nIHRoZSByZXN1bHQgYmFjayB0byBhIHN0cmluZy4KLSAgICAgICAgVGhlIHJlc3VsdCBpcyBjb250cmFpbmVkIGJ5IHRoZSBudW1iZXIgb2YgbGluZXMgYW5kIGxpbmVsZW5ndGhzIG9mCisgICAgICAgIFRoZSByZXN1bHQgaXMgY29uc3RyYWluZWQgYnkgdGhlIG51bWJlciBvZiBsaW5lcyBhbmQgbGluZWxlbmd0aHMgb2YKICAgICAgICAgc2VsZi5kYXRhLiBGb3IgbWFueSBpbmRleGVzLCB0aGUgcmVzdWx0IGlzIGluaXRpYWxseSAoMSwgMCkuCiAKICAgICAgICAgVGhlIGlucHV0IGluZGV4IG1heSBoYXZlIGFueSBvZiBzZXZlcmFsIHBvc3NpYmxlIGZvcm1zOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2NvbXBsZXRlLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2NvbXBsZXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMjE5MmUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9hdXRvY29tcGxldGUucHkKQEAgLTAsMCArMSwxNDMgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0CisKK2ltcG9ydCBpZGxlbGliLkF1dG9Db21wbGV0ZSBhcyBhYworaW1wb3J0IGlkbGVsaWIuQXV0b0NvbXBsZXRlV2luZG93IGFzIGFjdworaW1wb3J0IGlkbGVsaWIubWFjb3N4U3VwcG9ydCBhcyBtYWMKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja19pZGxlIGltcG9ydCBGdW5jCitmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfdGsgaW1wb3J0IEV2ZW50CisKK2NsYXNzIEF1dG9Db21wbGV0ZVdpbmRvdzoKKyAgICBkZWYgY29tcGxldGUoKToKKyAgICAgICAgcmV0dXJuCisKK2NsYXNzIER1bW15RWRpdHdpbjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcm9vdCwgdGV4dCk6CisgICAgICAgIHNlbGYucm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorICAgICAgICBzZWxmLmluZGVudHdpZHRoID0gOAorICAgICAgICBzZWxmLnRhYndpZHRoID0gOAorICAgICAgICBzZWxmLmNvbnRleHRfdXNlX3BzMSA9IFRydWUKKworCitjbGFzcyBBdXRvQ29tcGxldGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICBjbHMucm9vdCA9IFRrKCkKKyAgICAgICAgbWFjLnNldHVwQXBwKGNscy5yb290LCBOb25lKQorICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnJvb3QpCisgICAgICAgIGNscy5lZGl0b3IgPSBEdW1teUVkaXR3aW4oY2xzLnJvb3QsIGNscy50ZXh0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCisgICAgICAgIGRlbCBjbHMudGV4dAorICAgICAgICBkZWwgY2xzLmVkaXRvcgorICAgICAgICBkZWwgY2xzLnJvb3QKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5lZGl0b3IudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorICAgICAgICBzZWxmLmF1dG9jb21wbGV0ZSA9IGFjLkF1dG9Db21wbGV0ZShzZWxmLmVkaXRvcikKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hdXRvY29tcGxldGUuZWRpdHdpbiwgc2VsZi5lZGl0b3IpCisKKyAgICBkZWYgdGVzdF9tYWtlX2F1dG9jb21wbGV0ZV93aW5kb3coc2VsZik6CisgICAgICAgIHRlc3R3aW4gPSBzZWxmLmF1dG9jb21wbGV0ZS5fbWFrZV9hdXRvY29tcGxldGVfd2luZG93KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRlc3R3aW4sIGFjdy5BdXRvQ29tcGxldGVXaW5kb3cpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfYXV0b2NvbXBsZXRlX3dpbmRvdyhzZWxmKToKKyAgICAgICAgc2VsZi5hdXRvY29tcGxldGUuYXV0b2NvbXBsZXRld2luZG93ID0gKAorICAgICAgICAgICAgc2VsZi5hdXRvY29tcGxldGUuX21ha2VfYXV0b2NvbXBsZXRlX3dpbmRvdygpKQorICAgICAgICBzZWxmLmF1dG9jb21wbGV0ZS5fcmVtb3ZlX2F1dG9jb21wbGV0ZV93aW5kb3coKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGV3aW5kb3cpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9vcGVuX2NvbXBsZXRpb25zX2V2ZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmb3JjZV9vcGVuX2NvbXBsZXRpb25zX2V2ZW50IGNhbGxzIF9vcGVuX2NvbXBsZXRpb25zCisgICAgICAgIG9fY3MgPSBGdW5jKCkKKyAgICAgICAgc2VsZi5hdXRvY29tcGxldGUub3Blbl9jb21wbGV0aW9ucyA9IG9fY3MKKyAgICAgICAgc2VsZi5hdXRvY29tcGxldGUuZm9yY2Vfb3Blbl9jb21wbGV0aW9uc19ldmVudCgnZXZlbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9fY3MuYXJncywgKFRydWUsIEZhbHNlLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X3RyeV9vcGVuX2NvbXBsZXRpb25zX2V2ZW50KHNlbGYpOgorICAgICAgICBFcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYXV0b2NvbXBsZXRlID0gc2VsZi5hdXRvY29tcGxldGUKKyAgICAgICAgdHJ5Y29tcGxldGlvbnMgPSBzZWxmLmF1dG9jb21wbGV0ZS50cnlfb3Blbl9jb21wbGV0aW9uc19ldmVudAorICAgICAgICBvX2NfbCA9IEZ1bmMoKQorICAgICAgICBhdXRvY29tcGxldGUuX29wZW5fY29tcGxldGlvbnNfbGF0ZXIgPSBvX2NfbAorCisgICAgICAgICMgX29wZW5fY29tcGxldGlvbnNfbGF0ZXIgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBubyB0ZXh0IGluIGVkaXRvcgorICAgICAgICB0cnljb21wbGV0aW9ucygnZXZlbnQnKQorICAgICAgICBFcXVhbChvX2NfbC5hcmdzLCBOb25lKQorCisgICAgICAgICMgX29wZW5fY29tcGxldGlvbnNfbGF0ZXIgc2hvdWxkIGJlIGNhbGxlZCB3aXRoIENPTVBMRVRFX0FUVFJJQlVURVMgKDEpCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJzEuMCcsICdyZS4nKQorICAgICAgICB0cnljb21wbGV0aW9ucygnZXZlbnQnKQorICAgICAgICBFcXVhbChvX2NfbC5hcmdzLCAoRmFsc2UsIEZhbHNlLCBGYWxzZSwgMSkpCisKKyAgICAgICAgIyBfb3Blbl9jb21wbGV0aW9uc19sYXRlciBzaG91bGQgYmUgY2FsbGVkIHdpdGggQ09NUExFVEVfRklMRVMgKDIpCisgICAgICAgIHNlbGYudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCcxLjAnLCAnIi4vTGliLycpCisgICAgICAgIHRyeWNvbXBsZXRpb25zKCdldmVudCcpCisgICAgICAgIEVxdWFsKG9fY19sLmFyZ3MsIChGYWxzZSwgRmFsc2UsIEZhbHNlLCAyKSkKKworICAgIGRlZiB0ZXN0X2F1dG9jb21wbGV0ZV9ldmVudChzZWxmKToKKyAgICAgICAgRXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIGF1dG9jb21wbGV0ZSA9IHNlbGYuYXV0b2NvbXBsZXRlCisKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIGF1dG9jb21wbGV0ZSBldmVudCBpcyBpZ25vcmVkIGlmIHVzZXIgaXMgcHJlc3NpbmcgYQorICAgICAgICAjIG1vZGlmaWVyIGtleSBpbiBhZGRpdGlvbiB0byB0aGUgdGFiIGtleQorICAgICAgICBldiA9IEV2ZW50KG1jX3N0YXRlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGF1dG9jb21wbGV0ZS5hdXRvY29tcGxldGVfZXZlbnQoZXYpKQorICAgICAgICBkZWwgZXYubWNfc3RhdGUKKworICAgICAgICAjIElmIGF1dG9jb21wbGV0ZSB3aW5kb3cgaXMgb3BlbiwgY29tcGxldGUoKSBtZXRob2QgaXMgY2FsbGVkCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJzEuMCcsICdyZS4nKQorICAgICAgICAjIFRoaXMgbXVzdCBjYWxsIGF1dG9jb21wbGV0ZS5fbWFrZV9hdXRvY29tcGxldGVfd2luZG93KCkKKyAgICAgICAgRXF1YWwoc2VsZi5hdXRvY29tcGxldGUuYXV0b2NvbXBsZXRlX2V2ZW50KGV2KSwgJ2JyZWFrJykKKworICAgICAgICAjIElmIGF1dG9jb21wbGV0ZSB3aW5kb3cgaXMgbm90IGFjdGl2ZSBvciBkb2VzIG5vdCBleGlzdCwKKyAgICAgICAgIyBvcGVuX2NvbXBsZXRpb25zIGlzIGNhbGxlZC4gUmV0dXJuIGRlcGVuZHMgb24gaXRzIHJldHVybi4KKyAgICAgICAgYXV0b2NvbXBsZXRlLl9yZW1vdmVfYXV0b2NvbXBsZXRlX3dpbmRvdygpCisgICAgICAgIG9fY3MgPSBGdW5jKCkgICMgLnJlc3VsdCA9IE5vbmUKKyAgICAgICAgYXV0b2NvbXBsZXRlLm9wZW5fY29tcGxldGlvbnMgPSBvX2NzCisgICAgICAgIEVxdWFsKHNlbGYuYXV0b2NvbXBsZXRlLmF1dG9jb21wbGV0ZV9ldmVudChldiksIE5vbmUpCisgICAgICAgIEVxdWFsKG9fY3MuYXJncywgKEZhbHNlLCBUcnVlLCBUcnVlKSkKKyAgICAgICAgb19jcy5yZXN1bHQgPSBUcnVlCisgICAgICAgIEVxdWFsKHNlbGYuYXV0b2NvbXBsZXRlLmF1dG9jb21wbGV0ZV9ldmVudChldiksICdicmVhaycpCisgICAgICAgIEVxdWFsKG9fY3MuYXJncywgKEZhbHNlLCBUcnVlLCBUcnVlKSkKKworICAgIGRlZiB0ZXN0X29wZW5fY29tcGxldGlvbnNfbGF0ZXIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGF1dG9jb21wbGV0ZS5fZGVsYXllZF9jb21wbGV0aW9uX2lkIGlzIHNldAorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9kZWxheWVkX29wZW5fY29tcGxldGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGF1dG9jb21wbGV0ZS5fZGVsYXllZF9jb21wbGV0aW9uX2lkIHNldCB0byBOb25lIGFuZCB0aGF0CisgICAgICAgICMgb3Blbl9jb21wbGV0aW9ucyBvbmx5IGNhbGxlZCBpZiBpbnNlcnRpb24gaW5kZXggaXMgdGhlIHNhbWUgYXMKKyAgICAgICAgIyBfZGVsYXllZF9jb21wbGV0aW9uX2luZGV4CisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X29wZW5fY29tcGxldGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBjb21wbGV0aW9ucyBvZiBmaWxlcyBhbmQgYXR0cmlidXRlcyBhcyB3ZWxsIGFzIG5vbi1jb21wbGV0aW9uCisgICAgICAgICMgb2YgZXJyb3JzCisgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2ZldGNoX2NvbXBsZXRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmZXRjaF9jb21wbGV0aW9ucyByZXR1cm5zIDIgbGlzdHM6CisgICAgICAgICMgRm9yIGF0dHJpYnV0ZSBjb21wbGV0aW9uLCBhIGxhcmdlIGxpc3QgY29udGFpbmluZyBhbGwgdmFyaWFibGVzLCBhbmQKKyAgICAgICAgIyBhIHNtYWxsIGxpc3QgY29udGFpbmluZyBub24tcHJpdmF0ZSB2YXJpYWJsZXMuCisgICAgICAgICMgRm9yIGZpbGUgY29tcGxldGlvbiwgYSBsYXJnZSBsaXN0IGNvbnRhaW5pbmcgYWxsIGZpbGVzIGluIHRoZSBwYXRoLAorICAgICAgICAjIGFuZCBhIHNtYWxsIGxpc3QgY29udGFpbmluZyBmaWxlcyB0aGF0IGRvIG5vdCBzdGFydCB3aXRoICcuJworICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9nZXRfZW50aXR5KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhIG5hbWUgaXMgaW4gdGhlIG5hbWVzcGFjZSBvZiBzeXMubW9kdWxlcyBhbmQKKyAgICAgICAgIyBfX21haW5fXy5fX2RpY3RfXworICAgICAgICBwYXNzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfYXV0b2V4cGFuZC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2F1dG9leHBhbmQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NhOTQxZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2F1dG9leHBhbmQucHkKQEAgLTAsMCArMSwxNDEgQEAKKyIiIlVuaXQgdGVzdHMgZm9yIGlkbGVsaWIuQXV0b0V4cGFuZCIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGV4dCwgVGsKKyNmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfdGsgaW1wb3J0IFRleHQKK2Zyb20gaWRsZWxpYi5BdXRvRXhwYW5kIGltcG9ydCBBdXRvRXhwYW5kCisKKworY2xhc3MgRHVtbXlfRWRpdHdpbjoKKyAgICAjIEF1dG9FeHBhbmQuX19pbml0X18gb25seSBuZWVkcyAudGV4dAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0KToKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAorCitjbGFzcyBBdXRvRXhwYW5kVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBpZiAndGtpbnRlcicgaW4gc3RyKFRleHQpOgorICAgICAgICAgICAgcmVxdWlyZXMoJ2d1aScpCisgICAgICAgICAgICBjbHMudGsgPSBUaygpCisgICAgICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnRrKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2xzLnRleHQgPSBUZXh0KCkKKyAgICAgICAgY2xzLmF1dG9fZXhwYW5kID0gQXV0b0V4cGFuZChEdW1teV9FZGl0d2luKGNscy50ZXh0KSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIGlmIGhhc2F0dHIoY2xzLCAndGsnKToKKyAgICAgICAgICAgIGNscy50ay5kZXN0cm95KCkKKyAgICAgICAgICAgIGRlbCBjbHMudGsKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMuYXV0b19leHBhbmQKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgnMS4wJywgJ2VuZCcpCisKKyAgICBkZWYgdGVzdF9nZXRfcHJldndvcmQoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGVxdWFsID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICcnKQorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAndCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICd0JykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2hpcycpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICd0aGlzJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJyAnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2lzJykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2lzJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ1xuc2FtcGxlXG5zdHJpbmcnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnc3RyaW5nJykKKworICAgICAgICB0ZXh0LmRlbGV0ZSgnMy4wJywgJ2luc2VydCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICcnKQorCisgICAgICAgIHRleHQuZGVsZXRlKCcxLjAnLCAnZW5kJykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJycpCisKKyAgICBkZWYgdGVzdF9iZWZvcmVfb25seShzZWxmKToKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2FiIGFjIGJ4IGFkIGFiIGEnKQorICAgICAgICBlcXVhbChzZWxmLmF1dG9fZXhwYW5kLmdldHdvcmRzKCksIFsnYWInLCAnYWQnLCAnYWMnLCAnYSddKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2FiJykKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhZCcpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnYWMnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2EnKQorCisgICAgZGVmIHRlc3RfYWZ0ZXJfb25seShzZWxmKToKKyAgICAgICAgIyBBbHNvIGFkZCBwdW5jdHVhdGlvbiAnbm9pc2UnIHRoYXQgc2hvdWxkIGJlIGlnbm9yZWQuCisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdhLCBbYWJdIGFjOiAoKSBieCIiIGNkIGFjPSBhZCB5YScpCisgICAgICAgIHRleHQubWFya19zZXQoJ2luc2VydCcsICcxLjEnKQorICAgICAgICBlcXVhbChzZWxmLmF1dG9fZXhwYW5kLmdldHdvcmRzKCksIFsnYWInLCAnYWMnLCAnYWQnLCAnYSddKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2FiJykKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhYycpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnYWQnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2EnKQorCisgICAgZGVmIHRlc3RfYm90aF9iZWZvcmVfYWZ0ZXIoc2VsZik6CisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcHJldmlvdXMgPSBzZWxmLmF1dG9fZXhwYW5kLmdldHByZXZ3b3JkCisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdhYiB4eSB5elxuJykKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICdhIGFjIGJ5IGFjJykKKworICAgICAgICB0ZXh0Lm1hcmtfc2V0KCdpbnNlcnQnLCAnMi4xJykKKyAgICAgICAgZXF1YWwoc2VsZi5hdXRvX2V4cGFuZC5nZXR3b3JkcygpLCBbJ2FiJywgJ2FjJywgJ2EnXSkKKyAgICAgICAgZXhwYW5kKCdldmVudCcpCisgICAgICAgIGVxdWFsKHByZXZpb3VzKCksICdhYicpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBlcXVhbChwcmV2aW91cygpLCAnYWMnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgZXF1YWwocHJldmlvdXMoKSwgJ2EnKQorCisgICAgZGVmIHRlc3Rfb3RoZXJfZXhwYW5kX2Nhc2VzKHNlbGYpOgorICAgICAgICB0ZXh0ID0gc2VsZi50ZXh0CisgICAgICAgIGV4cGFuZCA9IHNlbGYuYXV0b19leHBhbmQuZXhwYW5kX3dvcmRfZXZlbnQKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgIyBubyBleHBhbnNpb24gY2FuZGlkYXRlIGZvdW5kCisgICAgICAgIGVxdWFsKHNlbGYuYXV0b19leHBhbmQuZ2V0d29yZHMoKSwgW10pCisgICAgICAgIGVxdWFsKGV4cGFuZCgnZXZlbnQnKSwgJ2JyZWFrJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2J4IGN5IGR6IGEnKQorICAgICAgICBlcXVhbChzZWxmLmF1dG9fZXhwYW5kLmdldHdvcmRzKCksIFtdKQorCisgICAgICAgICMgcmVzZXQgc3RhdGUgYnkgc3VjY2Vzc2Z1bGx5IGV4cGFuZGluZyBvbmNlCisgICAgICAgICMgbW92ZSBjdXJzb3IgdG8gYW5vdGhlciBwb3NpdGlvbiBhbmQgZXhwYW5kIGFnYWluCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnYWMgeHkgYSBhYyBhZCBhJykKKyAgICAgICAgdGV4dC5tYXJrX3NldCgnaW5zZXJ0JywgJzEuNycpCisgICAgICAgIGV4cGFuZCgnZXZlbnQnKQorICAgICAgICBpbml0aWFsX3N0YXRlID0gc2VsZi5hdXRvX2V4cGFuZC5zdGF0ZQorICAgICAgICB0ZXh0Lm1hcmtfc2V0KCdpbnNlcnQnLCAnMS5lbmQnKQorICAgICAgICBleHBhbmQoJ2V2ZW50JykKKyAgICAgICAgbmV3X3N0YXRlID0gc2VsZi5hdXRvX2V4cGFuZC5zdGF0ZQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluaXRpYWxfc3RhdGUsIG5ld19zdGF0ZSkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY2FsbHRpcHMucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jYWxsdGlwcy5weQppbmRleCBmMzYzNzY0Li5iMmE3MzNjIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jYWxsdGlwcy5weQorKysgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9jYWxsdGlwcy5weQpAQCAtNTIsMTEgKzUyLDEyIEBACiAgICAgICAgIGRlZiBndGVzdChvYmosIG91dCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShvYmopLCBvdXQpCiAKLSAgICAgICAgZ3Rlc3QoTGlzdCwgTGlzdC5fX2RvY19fKQorICAgICAgICBpZiBMaXN0Ll9fZG9jX18gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBndGVzdChMaXN0LCBMaXN0Ll9fZG9jX18pCiAgICAgICAgIGd0ZXN0KGxpc3QuX19uZXdfXywKLSAgICAgICAgICAgICAgICdULl9fbmV3X18oUywgLi4uKSAtPiBhIG5ldyBvYmplY3Qgd2l0aCB0eXBlIFMsIGEgc3VidHlwZSBvZiBUJykKKyAgICAgICAgICAgICAgICdDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBvYmplY3QuICBTZWUgaGVscCh0eXBlKSBmb3IgYWNjdXJhdGUgc2lnbmF0dXJlLicpCiAgICAgICAgIGd0ZXN0KGxpc3QuX19pbml0X18sCi0gICAgICAgICAgICAgICAneC5fX2luaXRfXyguLi4pIGluaXRpYWxpemVzIHg7IHNlZSBoZWxwKHR5cGUoeCkpIGZvciBzaWduYXR1cmUnKQorICAgICAgICAgICAgICAgJ0luaXRpYWxpemUgc2VsZi4gIFNlZSBoZWxwKHR5cGUoc2VsZikpIGZvciBhY2N1cmF0ZSBzaWduYXR1cmUuJykKICAgICAgICAgYXBwZW5kX2RvYyA9ICAiTC5hcHBlbmQob2JqZWN0KSAtPiBOb25lIC0tIGFwcGVuZCBvYmplY3QgdG8gZW5kIgogICAgICAgICBndGVzdChsaXN0LmFwcGVuZCwgYXBwZW5kX2RvYykKICAgICAgICAgZ3Rlc3QoW10uYXBwZW5kLCBhcHBlbmRfZG9jKQpAQCAtNjYsMTAgKzY3LDEyIEBACiAgICAgICAgIGd0ZXN0KFNCKCksIGRlZmF1bHRfdGlwKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3dyYXAoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKHRleHR3cmFwLlRleHRXcmFwcGVyKSwgJycnXAorICAgICAgICBpZiB0ZXh0d3JhcC5UZXh0V3JhcHBlci5fX2RvY19fIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUodGV4dHdyYXAuVGV4dFdyYXBwZXIpLCAnJydcCiAod2lkdGg9NzAsIGluaXRpYWxfaW5kZW50PScnLCBzdWJzZXF1ZW50X2luZGVudD0nJywgZXhwYW5kX3RhYnM9VHJ1ZSwKICAgICByZXBsYWNlX3doaXRlc3BhY2U9VHJ1ZSwgZml4X3NlbnRlbmNlX2VuZGluZ3M9RmFsc2UsIGJyZWFrX2xvbmdfd29yZHM9VHJ1ZSwKLSAgICBkcm9wX3doaXRlc3BhY2U9VHJ1ZSwgYnJlYWtfb25faHlwaGVucz1UcnVlLCB0YWJzaXplPTgpJycnKQorICAgIGRyb3Bfd2hpdGVzcGFjZT1UcnVlLCBicmVha19vbl9oeXBoZW5zPVRydWUsIHRhYnNpemU9OCwgKiwgbWF4X2xpbmVzPU5vbmUsCisgICAgcGxhY2Vob2xkZXI9JyBbLi4uXScpJycnKQogCiAgICAgZGVmIHRlc3RfZG9jbGluZV90cnVuY2F0aW9uKHNlbGYpOgogICAgICAgICBkZWYgZigpOiBwYXNzCkBAIC0xMDcsMjAgKzExMCwyMyBAQAogICAgICAgICBkZWYgdDUoYSwgYj1Ob25lLCAqYXJncywgKiprdyk6ICdkb2MnCiAgICAgICAgIHQ1LnRpcCA9ICIoYSwgYj1Ob25lLCAqYXJncywgKiprdykiCiAKKyAgICAgICAgZG9jID0gJ1xuZG9jJyBpZiB0MS5fX2RvY19fIGlzIG5vdCBOb25lIGVsc2UgJycKICAgICAgICAgZm9yIGZ1bmMgaW4gKHQxLCB0MiwgdDMsIHQ0LCB0NSwgVEMpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoZnVuYyksIGZ1bmMudGlwICsgJ1xuZG9jJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKGZ1bmMpLCBmdW5jLnRpcCArIGRvYykKIAogICAgIGRlZiB0ZXN0X21ldGhvZHMoc2VsZik6CisgICAgICAgIGRvYyA9ICdcbmRvYycgaWYgVEMuX19kb2NfXyBpcyBub3QgTm9uZSBlbHNlICcnCiAgICAgICAgIGZvciBtZXRoIGluIChUQy50MSwgVEMudDIsIFRDLnQzLCBUQy50NCwgVEMudDUsIFRDLnQ2LCBUQy5fX2NhbGxfXyk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShtZXRoKSwgbWV0aC50aXAgKyAiXG5kb2MiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShUQy5jbSksICIoYSlcbmRvYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKFRDLnNtKSwgIihiKVxuZG9jIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnbmF0dXJlKG1ldGgpLCBtZXRoLnRpcCArIGRvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoVEMuY20pLCAiKGEpIiArIGRvYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUoVEMuc20pLCAiKGIpIiArIGRvYykKIAogICAgIGRlZiB0ZXN0X2JvdW5kX21ldGhvZHMoc2VsZik6CiAgICAgICAgICMgdGVzdCB0aGF0IGZpcnN0IHBhcmFtZXRlciBpcyBjb3JyZWN0bHkgcmVtb3ZlZCBmcm9tIGFyZ3NwZWMKKyAgICAgICAgZG9jID0gJ1xuZG9jJyBpZiBUQy5fX2RvY19fIGlzIG5vdCBOb25lIGVsc2UgJycKICAgICAgICAgZm9yIG1ldGgsIG10aXAgIGluICgodGMudDEsICIoKSIpLCAodGMudDQsICIoKmFyZ3MpIiksICh0Yy50NiwgIihzZWxmKSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0Yy5fX2NhbGxfXywgJyhjaSknKSwgKHRjLCAnKGNpKScpLCAoVEMuY20sICIoYSkiKSwpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUobWV0aCksIG10aXAgKyAiXG5kb2MiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYXR1cmUobWV0aCksIG10aXAgKyBkb2MpCiAKICAgICBkZWYgdGVzdF9zdGFycmVkX3BhcmFtZXRlcihzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoYXQgc3RhcnJlZCBmaXJzdCBwYXJhbWV0ZXIgaXMgKm5vdCogcmVtb3ZlZCBmcm9tIGFyZ3NwZWMKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2NvbmZpZ2RpYWxvZy5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2NvbmZpZ2RpYWxvZy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODgzMTIzCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfY29uZmlnZGlhbG9nLnB5CkBAIC0wLDAgKzEsMzIgQEAKKycnJ1VuaXR0ZXN0cyBmb3IgaWRsZWxpYi9jb25maWdIYW5kbGVyLnB5CisKK0NvdmVyYWdlOiA0NiUganVzdCBieSBjcmVhdGluZyBkaWFsb2cuIFRoZSBvdGhlciBoYWxmIGlzIGNoYW5nZSBjb2RlLgorCisnJycKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrCitmcm9tIGlkbGVsaWIuY29uZmlnRGlhbG9nIGltcG9ydCBDb25maWdEaWFsb2cKK2Zyb20gaWRsZWxpYi5tYWNvc3hTdXBwb3J0IGltcG9ydCBfaW5pdGlhbGl6ZVRrVmFyaWFudFRlc3RzCisKKworY2xhc3MgQ29uZmlnRGlhbG9nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICByZXF1aXJlcygnZ3VpJykKKyAgICAgICAgY2xzLnJvb3QgPSBUaygpCisgICAgICAgIF9pbml0aWFsaXplVGtWYXJpYW50VGVzdHMoY2xzLnJvb3QpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgdGVzdF9kaWFsb2coc2VsZik6CisgICAgICAgIGQ9Q29uZmlnRGlhbG9nKHNlbGYucm9vdCwgJ1Rlc3QnLCBfdXRlc3Q9VHJ1ZSkKKyAgICAgICAgZC5kZXN0cm95KCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9lZGl0b3IucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9lZGl0b3IucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMxZDI2ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2VkaXRvci5weQpAQCAtMCwwICsxLDE2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRleHQKK2Zyb20gaWRsZWxpYi5FZGl0b3JXaW5kb3cgaW1wb3J0IEVkaXRvcldpbmRvdworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCisKK2NsYXNzIEVkaXRvcl9mdW5jX3Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3RvX3VuaWNvZGUoc2VsZik6CisgICAgICAgIGZ1bmMgPSBFZGl0b3JXaW5kb3cuX2ZpbGVuYW1lX3RvX3VuaWNvZGUKKyAgICAgICAgY2xhc3MgZHVtbXkoKTogZmlsZXN5c3RlbWVuY29kaW5nID0gJ3V0Zi04JworICAgICAgICBwYWlycyA9ICgoJ2FiYycsICdhYmMnKSwgKCdhXFUwMDAxMTExMWMnLCAnYVx1ZmZmZGMnKSwKKyAgICAgICAgICAgICAgICAgKGInYWJjJywgJ2FiYycpLCAoYidhXHhmMFx4OTFceDg0XHg5MWMnLCAnYVx1ZmZmZGMnKSkKKyAgICAgICAgZm9yIGlucCwgb3V0IGluIHBhaXJzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKGR1bW15LCBpbnApLCBvdXQpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2Zvcm1hdHBhcmFncmFwaC5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2Zvcm1hdHBhcmFncmFwaC5weQppbmRleCBmNGE3YzJkLi5mNjAzOWU2IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9mb3JtYXRwYXJhZ3JhcGgucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfZm9ybWF0cGFyYWdyYXBoLnB5CkBAIC0yLDcgKzIsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGlkbGVsaWIgaW1wb3J0IEZvcm1hdFBhcmFncmFwaCBhcyBmcAogZnJvbSBpZGxlbGliLkVkaXRvcldpbmRvdyBpbXBvcnQgRWRpdG9yV2luZG93Ci1mcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0LCBUY2xFcnJvcgorZnJvbSB0a2ludGVyIGltcG9ydCBUaywgVGV4dAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCiAKIApAQCAtMjkzLDcgKzI5Myw3IEBACiAgICAgICAgICMgU2V0IGN1cnNvciAoJ2luc2VydCcgbWFyaykgdG8gJzEuMCcsIHdpdGhpbiB0ZXh0LgogICAgICAgICB0ZXh0Lmluc2VydCgnMS4wJywgc2VsZi50ZXN0X3N0cmluZykKICAgICAgICAgdGV4dC5tYXJrX3NldCgnaW5zZXJ0JywgJzEuMCcpCi0gICAgICAgIHNlbGYuZm9ybWF0dGVyKCdQYXJhbWV0ZXJEb2VzTm90aGluZycpCisgICAgICAgIHNlbGYuZm9ybWF0dGVyKCdQYXJhbWV0ZXJEb2VzTm90aGluZycsIGxpbWl0PTcwKQogICAgICAgICByZXN1bHQgPSB0ZXh0LmdldCgnMS4wJywgJ2luc2VydCcpCiAgICAgICAgICMgZmluZCBmdW5jdGlvbiBpbmNsdWRlcyBcbgogICAgICAgICBleHBlY3RlZCA9ICgKQEAgLTMwNSw3ICszMDUsNyBAQAogICAgICAgICAjIFNlbGVjdCBmcm9tIDEuMTEgdG8gbGluZSBlbmQuCiAgICAgICAgIHRleHQuaW5zZXJ0KCcxLjAnLCBzZWxmLnRlc3Rfc3RyaW5nKQogICAgICAgICB0ZXh0LnRhZ19hZGQoJ3NlbCcsICcxLjExJywgJzEuZW5kJykKLSAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJykKKyAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJywgbGltaXQ9NzApCiAgICAgICAgIHJlc3VsdCA9IHRleHQuZ2V0KCcxLjAnLCAnaW5zZXJ0JykKICAgICAgICAgIyBzZWxlY3Rpb24gZXhjbHVkZXMgXG4KICAgICAgICAgZXhwZWN0ZWQgPSAoCkBAIC0zMTksNyArMzE5LDcgQEAKICAgICAgICAgIyAgU2VsZWN0IDIgbG9uZyBsaW5lcy4KICAgICAgICAgdGV4dC5pbnNlcnQoJzEuMCcsIHNlbGYubXVsdGlsaW5lX3Rlc3Rfc3RyaW5nKQogICAgICAgICB0ZXh0LnRhZ19hZGQoJ3NlbCcsICcyLjAnLCAnNC4wJykKLSAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJykKKyAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJywgbGltaXQ9NzApCiAgICAgICAgIHJlc3VsdCA9IHRleHQuZ2V0KCcyLjAnLCAnaW5zZXJ0JykKICAgICAgICAgZXhwZWN0ZWQgPSAoCiAiICAgIFRoZSBzZWNvbmQgbGluZSdzIGxlbmd0aCBpcyB3YXkgb3ZlciB0aGUgbWF4IHdpZHRoLiBJdCBnb2VzIG9uIGFuZFxuIgpAQCAtMzM0LDcgKzMzNCw3IEBACiAKICAgICAgICAgIyBTZXQgY3Vyc29yICgnaW5zZXJ0JykgdG8gJzEuMCcsIHdpdGhpbiBibG9jay4KICAgICAgICAgdGV4dC5pbnNlcnQoJzEuMCcsIHNlbGYubXVsdGlsaW5lX3Rlc3RfY29tbWVudCkKLSAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJykKKyAgICAgICAgc2VsZi5mb3JtYXR0ZXIoJ1BhcmFtZXRlckRvZXNOb3RoaW5nJywgbGltaXQ9NzApCiAgICAgICAgIHJlc3VsdCA9IHRleHQuZ2V0KCcxLjAnLCAnaW5zZXJ0JykKICAgICAgICAgZXhwZWN0ZWQgPSAoCiAiIyBUaGUgZmlyc3QgbGluZSBpcyB1bmRlciB0aGUgbWF4IHdpZHRoLiBUaGUgc2Vjb25kIGxpbmUncyBsZW5ndGggaXNcbiIKQEAgLTM0OCw3ICszNDgsNyBAQAogICAgICAgICAjIFNlbGVjdCBsaW5lIDIsIHZlcmlmeSBsaW5lIDEgdW5hZmZlY3RlZC4KICAgICAgICAgdGV4dC5pbnNlcnQoJzEuMCcsIHNlbGYubXVsdGlsaW5lX3Rlc3RfY29tbWVudCkKICAgICAgICAgdGV4dC50YWdfYWRkKCdzZWwnLCAnMi4wJywgJzMuMCcpCi0gICAgICAgIHNlbGYuZm9ybWF0dGVyKCdQYXJhbWV0ZXJEb2VzTm90aGluZycpCisgICAgICAgIHNlbGYuZm9ybWF0dGVyKCdQYXJhbWV0ZXJEb2VzTm90aGluZycsIGxpbWl0PTcwKQogICAgICAgICByZXN1bHQgPSB0ZXh0LmdldCgnMS4wJywgJ2luc2VydCcpCiAgICAgICAgIGV4cGVjdGVkID0gKAogIiMgVGhlIGZpcnN0IGxpbmUgaXMgdW5kZXIgdGhlIG1heCB3aWR0aC5cbiIKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2h5cGVycGFyc2VyLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaHlwZXJwYXJzZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmYzc4MwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X2h5cGVycGFyc2VyLnB5CkBAIC0wLDAgKzEsMjczIEBACisiIiJVbml0dGVzdCBmb3IgaWRsZWxpYi5IeXBlclBhcnNlciIiIgoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRleHQKK2Zyb20gaWRsZWxpYi5FZGl0b3JXaW5kb3cgaW1wb3J0IEVkaXRvcldpbmRvdworZnJvbSBpZGxlbGliLkh5cGVyUGFyc2VyIGltcG9ydCBIeXBlclBhcnNlcgorCitjbGFzcyBEdW1teUVkaXR3aW46CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisgICAgICAgIHNlbGYuaW5kZW50d2lkdGggPSA4CisgICAgICAgIHNlbGYudGFid2lkdGggPSA4CisgICAgICAgIHNlbGYuY29udGV4dF91c2VfcHMxID0gVHJ1ZQorICAgICAgICBzZWxmLm51bV9jb250ZXh0X2xpbmVzID0gNTAsIDUwMCwgMTAwMAorCisgICAgX2J1aWxkX2NoYXJfaW5fc3RyaW5nX2Z1bmMgPSBFZGl0b3JXaW5kb3cuX2J1aWxkX2NoYXJfaW5fc3RyaW5nX2Z1bmMKKyAgICBpc19jaGFyX2luX3N0cmluZyA9IEVkaXRvcldpbmRvdy5pc19jaGFyX2luX3N0cmluZworCisKK2NsYXNzIEh5cGVyUGFyc2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY29kZSA9ICgKKyAgICAgICAgICAgICciIiJUaGlzIGlzIGEgbW9kdWxlIGRvY3N0cmluZyIiIlxuJworICAgICAgICAgICAgJyMgdGhpcyBsaW5lIGlzIGEgY29tbWVudFxuJworICAgICAgICAgICAgJ3ggPSAidGhpcyBpcyBhIHN0cmluZyJcbicKKyAgICAgICAgICAgICJ5ID0gJ3RoaXMgaXMgYWxzbyBhIHN0cmluZydcbiIKKyAgICAgICAgICAgICdsID0gW2kgZm9yIGkgaW4gcmFuZ2UoMTApXVxuJworICAgICAgICAgICAgJ20gPSBbcHkqcHkgZm9yICMgY29tbWVudFxuJworICAgICAgICAgICAgJyAgICAgICBweSBpbiBsXVxuJworICAgICAgICAgICAgJ3guX19sZW5fX1xuJworICAgICAgICAgICAgInogPSAoKHInYXNkZicpKygnYScpKSlcbiIKKyAgICAgICAgICAgICdbeCBmb3IgeCBpblxuJworICAgICAgICAgICAgJ2ZvciA9IEZhbHNlXG4nCisgICAgICAgICAgICAnY2xpY2jDqSA9ICJ0aGlzIGlzIGEgc3RyaW5nIHdpdGggdW5pY29kZSwgd2hhdCBhIGNsaWNow6kiJworICAgICAgICAgICAgKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgcmVxdWlyZXMoJ2d1aScpCisgICAgICAgIGNscy5yb290ID0gVGsoKQorICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnJvb3QpCisgICAgICAgIGNscy5lZGl0d2luID0gRHVtbXlFZGl0d2luKGNscy50ZXh0KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMuZWRpdHdpbgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJ2luc2VydCcsIHNlbGYuY29kZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi50ZXh0LmRlbGV0ZSgnMS4wJywgJ2VuZCcpCisgICAgICAgIHNlbGYuZWRpdHdpbi5jb250ZXh0X3VzZV9wczEgPSBUcnVlCisKKyAgICBkZWYgZ2V0X3BhcnNlcihzZWxmLCBpbmRleCk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gYSBwYXJzZXIgb2JqZWN0IHdpdGggaW5kZXggYXQgJ2luZGV4JworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIEh5cGVyUGFyc2VyKHNlbGYuZWRpdHdpbiwgaW5kZXgpCisKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgdGVzdCBjb3JuZXIgY2FzZXMgaW4gdGhlIGluaXQgbWV0aG9kCisgICAgICAgICIiIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIHZlOgorICAgICAgICAgICAgc2VsZi50ZXh0LnRhZ19hZGQoJ2NvbnNvbGUnLCAnMS4wJywgJzEuZW5kJykKKyAgICAgICAgICAgIHAgPSBzZWxmLmdldF9wYXJzZXIoJzEuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3ByZWNlZGVzJywgc3RyKHZlLmV4Y2VwdGlvbikpCisKKyAgICAgICAgIyB0ZXN0IHdpdGhvdXQgcHMxCisgICAgICAgIHNlbGYuZWRpdHdpbi5jb250ZXh0X3VzZV9wczEgPSBGYWxzZQorCisgICAgICAgICMgbnVtYmVyIG9mIGxpbmVzIGxlc3NlciB0aGFuIDUwCisgICAgICAgIHAgPSBzZWxmLmdldF9wYXJzZXIoJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yYXd0ZXh0LCBzZWxmLnRleHQuZ2V0KCcxLjAnLCAnZW5kJykpCisKKyAgICAgICAgIyBudW1iZXIgb2YgbGluZXMgZ3JlYXRlciB0aGFuIDUwCisgICAgICAgIHNlbGYudGV4dC5pbnNlcnQoJ2VuZCcsIHNlbGYudGV4dC5nZXQoJzEuMCcsICdlbmQnKSo0KQorICAgICAgICBwID0gc2VsZi5nZXRfcGFyc2VyKCc1NC41JykKKworICAgIGRlZiB0ZXN0X2lzX2luX3N0cmluZyhzZWxmKToKKyAgICAgICAgZ2V0ID0gc2VsZi5nZXRfcGFyc2VyCisKKyAgICAgICAgcCA9IGdldCgnMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX3N0cmluZygpKQorICAgICAgICBwID0gZ2V0KCcxLjQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19pbl9zdHJpbmcoKSkKKyAgICAgICAgcCA9IGdldCgnMi4zJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX3N0cmluZygpKQorICAgICAgICBwID0gZ2V0KCczLjMnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuaXNfaW5fc3RyaW5nKCkpCisgICAgICAgIHAgPSBnZXQoJzMuNycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2luX3N0cmluZygpKQorICAgICAgICBwID0gZ2V0KCc0LjYnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19pbl9zdHJpbmcoKSkKKyAgICAgICAgcCA9IGdldCgnMTIuNTQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19pbl9zdHJpbmcoKSkKKworICAgIGRlZiB0ZXN0X2lzX2luX2NvZGUoc2VsZik6CisgICAgICAgIGdldCA9IHNlbGYuZ2V0X3BhcnNlcgorCisgICAgICAgIHAgPSBnZXQoJzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2luX2NvZGUoKSkKKyAgICAgICAgcCA9IGdldCgnMS4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX2NvZGUoKSkKKyAgICAgICAgcCA9IGdldCgnMi41JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX2NvZGUoKSkKKyAgICAgICAgcCA9IGdldCgnMy40JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfaW5fY29kZSgpKQorICAgICAgICBwID0gZ2V0KCczLjYnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuaXNfaW5fY29kZSgpKQorICAgICAgICBwID0gZ2V0KCc0LjE0JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2luX2NvZGUoKSkKKworICAgIGRlZiB0ZXN0X2dldF9zdXJyb3VuZGluZ19icmFja2V0KHNlbGYpOgorICAgICAgICBnZXQgPSBzZWxmLmdldF9wYXJzZXIKKworICAgICAgICBkZWYgd2l0aG91dF9tdXN0Y2xvc2UocGFyc2VyKToKKyAgICAgICAgICAgICMgYSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGdldCBzdXJyb3VuZGluZyBicmFja2V0CisgICAgICAgICAgICAjIHdpdGggbXVzdGNsb3NlPUZhbHNlCisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLmdldF9zdXJyb3VuZGluZ19icmFja2V0cyhtdXN0Y2xvc2U9RmFsc2UpCisKKyAgICAgICAgZGVmIHdpdGhfbXVzdGNsb3NlKHBhcnNlcik6CisgICAgICAgICAgICAjIGEgdXRpbGl0eSBmdW5jdGlvbiB0byBnZXQgc3Vycm91bmRpbmcgYnJhY2tldAorICAgICAgICAgICAgIyB3aXRoIG11c3RjbG9zZT1UcnVlCisgICAgICAgICAgICByZXR1cm4gcGFyc2VyLmdldF9zdXJyb3VuZGluZ19icmFja2V0cyhtdXN0Y2xvc2U9VHJ1ZSkKKworICAgICAgICBwID0gZ2V0KCczLjInKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aXRoX211c3RjbG9zZShwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2l0aG91dF9tdXN0Y2xvc2UocCkpCisKKyAgICAgICAgcCA9IGdldCgnNS42JykKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHdpdGhvdXRfbXVzdGNsb3NlKHApLCAoJzUuNCcsICc1LjI1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCh3aXRob3V0X211c3RjbG9zZShwKSwgd2l0aF9tdXN0Y2xvc2UocCkpCisKKyAgICAgICAgcCA9IGdldCgnNS4yMycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHVwbGVFcXVhbCh3aXRob3V0X211c3RjbG9zZShwKSwgKCc1LjIxJywgJzUuMjQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHdpdGhvdXRfbXVzdGNsb3NlKHApLCB3aXRoX211c3RjbG9zZShwKSkKKworICAgICAgICBwID0gZ2V0KCc2LjE1JykKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHdpdGhvdXRfbXVzdGNsb3NlKHApLCAoJzYuNCcsICc2LmVuZCcpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aXRoX211c3RjbG9zZShwKSkKKworICAgICAgICBwID0gZ2V0KCc5LmVuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdpdGhfbXVzdGNsb3NlKHApKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3aXRob3V0X211c3RjbG9zZShwKSkKKworICAgIGRlZiB0ZXN0X2dldF9leHByZXNzaW9uKHNlbGYpOgorICAgICAgICBnZXQgPSBzZWxmLmdldF9wYXJzZXIKKworICAgICAgICBwID0gZ2V0KCc0LjInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJ3kgJykKKworICAgICAgICBwID0gZ2V0KCc0LjcnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIHZlOgorICAgICAgICAgICAgcC5nZXRfZXhwcmVzc2lvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lzIGluc2lkZSBhIGNvZGUnLCBzdHIodmUuZXhjZXB0aW9uKSkKKworICAgICAgICBwID0gZ2V0KCc1LjI1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICdyYW5nZSgxMCknKQorCisgICAgICAgIHAgPSBnZXQoJzYuNycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAncHknKQorCisgICAgICAgIHAgPSBnZXQoJzYuOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAnJykKKworICAgICAgICBwID0gZ2V0KCc3LjknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJ3B5JykKKworICAgICAgICBwID0gZ2V0KCc4LmVuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAneC5fX2xlbl9fJykKKworICAgICAgICBwID0gZ2V0KCc5LjEzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICJyJ2FzZGYnIikKKworICAgICAgICBwID0gZ2V0KCc5LjE3JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyB2ZToKKyAgICAgICAgICAgIHAuZ2V0X2V4cHJlc3Npb24oKQorICAgICAgICBzZWxmLmFzc2VydEluKCdpcyBpbnNpZGUgYSBjb2RlJywgc3RyKHZlLmV4Y2VwdGlvbikpCisKKyAgICAgICAgcCA9IGdldCgnMTAuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5nZXRfZXhwcmVzc2lvbigpLCAnJykKKworICAgICAgICBwID0gZ2V0KCcxMC42JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICcnKQorCisgICAgICAgIHAgPSBnZXQoJzEwLjExJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICcnKQorCisgICAgICAgIHAgPSBnZXQoJzExLjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJycpCisKKyAgICAgICAgcCA9IGdldCgnMTEuMTEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZ2V0X2V4cHJlc3Npb24oKSwgJ0ZhbHNlJykKKworICAgICAgICBwID0gZ2V0KCcxMi42JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdldF9leHByZXNzaW9uKCksICdjbGljaMOpJykKKworICAgIGRlZiB0ZXN0X2VhdF9pZGVudGlmaWVyKHNlbGYpOgorICAgICAgICBkZWYgaXNfdmFsaWRfaWQoY2FuZGlkYXRlKToKKyAgICAgICAgICAgIHJlc3VsdCA9IEh5cGVyUGFyc2VyLl9lYXRfaWRlbnRpZmllcihjYW5kaWRhdGUsIDAsIGxlbihjYW5kaWRhdGUpKQorICAgICAgICAgICAgaWYgcmVzdWx0ID09IGxlbihjYW5kaWRhdGUpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICAgICBlbGlmIHJlc3VsdCA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBlcnJfbXNnID0gIlVuZXhwZWN0ZWQgcmVzdWx0OiB7fSAoZXhwZWN0ZWQgMCBvciB7fSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZXN1bHQsIGxlbihjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihlcnJfbXNnKQorCisgICAgICAgICMgaW52YWxpZCBmaXJzdCBjaGFyYWN0ZXIgd2hpY2ggaXMgdmFsaWQgZWxzZXdoZXJlIGluIGFuIGlkZW50aWZpZXIKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnMm5vdGlkJykpCisKKyAgICAgICAgIyBBU0NJSS1vbmx5IHZhbGlkIGlkZW50aWZpZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc192YWxpZF9pZCgndmFsaWRfaWQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCdfdmFsaWRfaWQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCd2YWxpZF9pZF8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCdfMnZhbGlkX2lkJykpCisKKyAgICAgICAgIyBrZXl3b3JkcyB3aGljaCBzaG91bGQgYmUgImVhdGVuIgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ1RydWUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCdGYWxzZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ05vbmUnKSkKKworICAgICAgICAjIGtleXdvcmRzIHdoaWNoIHNob3VsZCBub3QgYmUgImVhdGVuIgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCdmb3InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnaW1wb3J0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJ3JldHVybicpKQorCisgICAgICAgICMgdmFsaWQgdW5pY29kZSBpZGVudGlmaWVycworICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ2NsaWNoZScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfdmFsaWRfaWQoJ2NsaWNow6knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzX3ZhbGlkX2lkKCdh2aInKSkKKworICAgICAgICAjIGludmFsaWQgdW5pY29kZSBpZGVudGlmaWVycworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCcyYScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCfZomEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnYcKyJykpCisKKyAgICAgICAgIyB2YWxpZCBpZGVudGlmaWVyIGFmdGVyICJwdW5jdHVhdGlvbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChIeXBlclBhcnNlci5fZWF0X2lkZW50aWZpZXIoJysgdmFyJywgMCwgNSksIGxlbigndmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHlwZXJQYXJzZXIuX2VhdF9pZGVudGlmaWVyKCcrdmFyJywgMCwgNCksIGxlbigndmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHlwZXJQYXJzZXIuX2VhdF9pZGVudGlmaWVyKCcudmFyJywgMCwgNCksIGxlbigndmFyJykpCisKKyAgICAgICAgIyBpbnZhbGlkIGlkZW50aWZpZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJysnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnICcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCc6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJz8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc192YWxpZF9pZCgnXicpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCdcXCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzX3ZhbGlkX2lkKCciJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfdmFsaWRfaWQoJyJhIHN0cmluZyInKSkKKworICAgIGRlZiB0ZXN0X2VhdF9pZGVudGlmaWVyX3ZhcmlvdXNfbGVuZ3RocyhzZWxmKToKKyAgICAgICAgZWF0X2lkID0gSHlwZXJQYXJzZXIuX2VhdF9pZGVudGlmaWVyCisKKyAgICAgICAgZm9yIGxlbmd0aCBpbiByYW5nZSgxLCAyMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVhdF9pZCgnYScgKiBsZW5ndGgsIDAsIGxlbmd0aCksIGxlbmd0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF0X2lkKCfDqScgKiBsZW5ndGgsIDAsIGxlbmd0aCksIGxlbmd0aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWF0X2lkKCdhJyArICcyJyAqIChsZW5ndGggLSAxKSwgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJ8OpJyArICcyJyAqIChsZW5ndGggLSAxKSwgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJ8OpJyArICdhJyAqIChsZW5ndGggLSAxKSwgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJ8OpJyAqIChsZW5ndGggLSAxKSArICdhJywgMCwgbGVuZ3RoKSwgbGVuZ3RoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJysnICogbGVuZ3RoLCAwLCBsZW5ndGgpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJzInICsgJ2EnICogKGxlbmd0aCAtIDEpLCAwLCBsZW5ndGgpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlYXRfaWQoJzInICsgJ8OpJyAqIChsZW5ndGggLSAxKSwgMCwgbGVuZ3RoKSwgMCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaW8ucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9pby5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMGUzYjk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfaW8ucHkKQEAgLTAsMCArMSwyMzMgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGlvCitmcm9tIGlkbGVsaWIuUHlTaGVsbCBpbXBvcnQgUHNldWRvSW5wdXRGaWxlLCBQc2V1ZG9PdXRwdXRGaWxlCisKKworY2xhc3MgUyhzdHIpOgorICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzOnN0cicgJSB0eXBlKHNlbGYpLl9fbmFtZV9fCisgICAgZGVmIF9fdW5pY29kZV9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzOnVuaWNvZGUnICUgdHlwZShzZWxmKS5fX25hbWVfXworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gMworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoJ2FiYycpCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuICclczppdGVtJyAlIHR5cGUoc2VsZikuX19uYW1lX18KKyAgICBkZWYgX19nZXRzbGljZV9fKHNlbGYsICphcmdzKToKKyAgICAgICAgcmV0dXJuICclczpzbGljZScgJSB0eXBlKHNlbGYpLl9fbmFtZV9fCisKK2NsYXNzIE1vY2tTaGVsbDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYucmVzZXQoKQorCisgICAgZGVmIHdyaXRlKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi53cml0dGVuLmFwcGVuZChhcmdzKQorCisgICAgZGVmIHJlYWRsaW5lKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5saW5lcy5wb3AoKQorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYud3JpdHRlbiA9IFtdCisKKyAgICBkZWYgcHVzaChzZWxmLCBsaW5lcyk6CisgICAgICAgIHNlbGYubGluZXMgPSBsaXN0KGxpbmVzKVs6Oi0xXQorCisKK2NsYXNzIFBzZXVkZU91dHB1dEZpbGVzVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbWlzYyhzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvT3V0cHV0RmlsZShzaGVsbCwgJ3N0ZG91dCcsICd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBpby5UZXh0SU9CYXNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZW5jb2RpbmcsICd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYuZXJyb3JzKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLm5ld2xpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgJzxzdGRvdXQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5yZWFkYWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi53cml0YWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuc2Vla2FibGUoKSkKKworICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkKHNlbGYpOgorICAgICAgICBzaGVsbCA9IE1vY2tTaGVsbCgpCisgICAgICAgIGYgPSBQc2V1ZG9PdXRwdXRGaWxlKHNoZWxsLCAnc3Rkb3V0JywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi5maWxlbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYudGVsbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLnJlYWQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYucmVhZGxpbmUsIDApCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvT3V0cHV0RmlsZShzaGVsbCwgJ3N0ZG91dCcsICd1dGYtOCcpCisgICAgICAgIGYud3JpdGUoJ3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFsoJ3Rlc3QnLCAnc3Rkb3V0JyldKQorICAgICAgICBzaGVsbC5yZXNldCgpCisgICAgICAgIGYud3JpdGUoJ3RceGU4c3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFsoJ3RceGU4c3QnLCAnc3Rkb3V0JyldKQorICAgICAgICBzaGVsbC5yZXNldCgpCisKKyAgICAgICAgZi53cml0ZShTKCd0XHhlOHN0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwgWygndFx4ZThzdCcsICdzdGRvdXQnKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShzaGVsbC53cml0dGVuWzBdWzBdKSwgc3RyKQorICAgICAgICBzaGVsbC5yZXNldCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLndyaXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGUsIGIndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi53cml0ZSwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGUsICd0ZXN0JywgJ3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorCisgICAgZGVmIHRlc3Rfd3JpdGVsaW5lcyhzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvT3V0cHV0RmlsZShzaGVsbCwgJ3N0ZG91dCcsICd1dGYtOCcpCisgICAgICAgIGYud3JpdGVsaW5lcyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaGVsbC53cml0dGVuLCBbXSkKKyAgICAgICAgc2hlbGwucmVzZXQoKQorICAgICAgICBmLndyaXRlbGluZXMoWydvbmVcbicsICd0d28nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaGVsbC53cml0dGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ29uZVxuJywgJ3N0ZG91dCcpLCAoJ3R3bycsICdzdGRvdXQnKV0pCisgICAgICAgIHNoZWxsLnJlc2V0KCkKKyAgICAgICAgZi53cml0ZWxpbmVzKFsnb25ceGU4XG4nLCAndHdceGYyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdvblx4ZThcbicsICdzdGRvdXQnKSwgKCd0d1x4ZjInLCAnc3Rkb3V0JyldKQorICAgICAgICBzaGVsbC5yZXNldCgpCisKKyAgICAgICAgZi53cml0ZWxpbmVzKFtTKCd0XHhlOHN0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFsoJ3RceGU4c3QnLCAnc3Rkb3V0JyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc2hlbGwud3JpdHRlblswXVswXSksIHN0cikKKyAgICAgICAgc2hlbGwucmVzZXQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi53cml0ZWxpbmVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGVsaW5lcywgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNoZWxsLndyaXR0ZW4sIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGVsaW5lcywgW2IndGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYud3JpdGVsaW5lcywgWzEyM10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi53cml0ZWxpbmVzLCBbXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwgW10pCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvT3V0cHV0RmlsZShzaGVsbCwgJ3N0ZG91dCcsICd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIGYud3JpdGUoJ3Rlc3QnKQorICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLndyaXRlLCAneCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGwud3JpdHRlbiwgWygndGVzdCcsICdzdGRvdXQnKV0pCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYuY2xvc2UsIDEpCisKKworY2xhc3MgUHNldWRlSW5wdXRGaWxlc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6CisgICAgICAgIHNoZWxsID0gTW9ja1NoZWxsKCkKKyAgICAgICAgZiA9IFBzZXVkb0lucHV0RmlsZShzaGVsbCwgJ3N0ZGluJywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGlvLlRleHRJT0Jhc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5lbmNvZGluZywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5lcnJvcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYubmV3bGluZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCAnPHN0ZGluPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5yZWFkYWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYud3JpdGFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLnNlZWthYmxlKCkpCisKKyAgICBkZWYgdGVzdF91bnN1cHBvcnRlZChzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvSW5wdXRGaWxlKHNoZWxsLCAnc3RkaW4nLCAndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLmZpbGVubykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGYud3JpdGUsICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi53cml0ZWxpbmVzLCBbJ3gnXSkKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgIHNoZWxsID0gTW9ja1NoZWxsKCkKKyAgICAgICAgZiA9IFBzZXVkb0lucHV0RmlsZShzaGVsbCwgJ3N0ZGluJywgJ3V0Zi04JykKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnb25lXG50d29cbicpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoLTEpLCAnb25lXG50d29cbicpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoTm9uZSksICdvbmVcbnR3b1xuJykKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJ3RocmVlXG4nLCAnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDIpLCAnb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgzKSwgJ2VcbnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgxMCksICd3b1xudGhyZWVcbicpCisKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKDApLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWQsIDEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWQsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWQsIDEsIDEpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZShzZWxmKToKKyAgICAgICAgc2hlbGwgPSBNb2NrU2hlbGwoKQorICAgICAgICBmID0gUHNldWRvSW5wdXRGaWxlKHNoZWxsLCAnc3RkaW4nLCAndXRmLTgnKQorICAgICAgICBzaGVsbC5wdXNoKFsnb25lXG4nLCAndHdvXG4nLCAndGhyZWVcbicsICdmb3VyXG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICdvbmVcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgtMSksICd0d29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZShOb25lKSwgJ3RocmVlXG4nKQorICAgICAgICBzaGVsbC5wdXNoKFsnb25lXG50d29cbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgJ29uZVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICd0d29cbicpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmUnLCAndHdvJywgJ3RocmVlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgpLCAnb25lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICd0d28nKQorICAgICAgICBzaGVsbC5wdXNoKFsnb25lXG4nLCAndHdvXG4nLCAndGhyZWVcbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoMiksICdvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgxKSwgJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoMSksICdcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgxMCksICd0d29cbicpCisKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZSgwKSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkbGluZXMsIDEuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRsaW5lcywgJzEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZGxpbmVzLCAxLCAxKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzKHNlbGYpOgorICAgICAgICBzaGVsbCA9IE1vY2tTaGVsbCgpCisgICAgICAgIGYgPSBQc2V1ZG9JbnB1dEZpbGUoc2hlbGwsICdzdGRpbicsICd1dGYtOCcpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbJ29uZVxuJywgJ3R3b1xuJ10pCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygtMSksIFsnb25lXG4nLCAndHdvXG4nXSkKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKE5vbmUpLCBbJ29uZVxuJywgJ3R3b1xuJ10pCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygwKSwgWydvbmVcbicsICd0d29cbiddKQorICAgICAgICBzaGVsbC5wdXNoKFsnb25lXG4nLCAndHdvXG4nLCAnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkbGluZXMoMyksIFsnb25lXG4nXSkKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKDQpLCBbJ29uZVxuJywgJ3R3b1xuJ10pCisKKyAgICAgICAgc2hlbGwucHVzaChbJ29uZVxuJywgJ3R3b1xuJywgJyddKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYucmVhZGxpbmVzLCAxLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkbGluZXMsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRsaW5lcywgMSwgMSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzaGVsbCA9IE1vY2tTaGVsbCgpCisgICAgICAgIGYgPSBQc2V1ZG9JbnB1dEZpbGUoc2hlbGwsICdzdGRpbicsICd1dGYtOCcpCisgICAgICAgIHNoZWxsLnB1c2goWydvbmVcbicsICd0d29cbicsICcnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lKCksICdvbmVcbicpCisgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmUoKSwgJ3R3b1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLmNsb3NlLCAxKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9wYXJlbm1hdGNoLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGFyZW5tYXRjaC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWJhNGJlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfcGFyZW5tYXRjaC5weQpAQCAtMCwwICsxLDEwOSBAQAorIiIiVGVzdCBpZGxlbGliLlBhcmVuTWF0Y2guIiIiCisjIFRoaXMgbXVzdCBjdXJyZW50bHkgYmUgYSBndWkgdGVzdCBiZWNhdXNlIFBhcmVuTWF0Y2ggbWV0aG9kcyB1c2UKKyMgc2V2ZXJhbCB0ZXh0IG1ldGhvZHMgbm90IGRlZmluZWQgb24gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ay5UZXh0LgorCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgTW9jaworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0Citmcm9tIGlkbGVsaWIuUGFyZW5NYXRjaCBpbXBvcnQgUGFyZW5NYXRjaAorCitjbGFzcyBEdW1teUVkaXR3aW46CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRleHQpOgorICAgICAgICBzZWxmLnRleHQgPSB0ZXh0CisgICAgICAgIHNlbGYuaW5kZW50d2lkdGggPSA4CisgICAgICAgIHNlbGYudGFid2lkdGggPSA4CisgICAgICAgIHNlbGYuY29udGV4dF91c2VfcHMxID0gVHJ1ZQorCisKK2NsYXNzIFBhcmVuTWF0Y2hUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICBjbHMucm9vdCA9IFRrKCkKKyAgICAgICAgY2xzLnRleHQgPSBUZXh0KGNscy5yb290KQorICAgICAgICBjbHMuZWRpdHdpbiA9IER1bW15RWRpdHdpbihjbHMudGV4dCkKKyAgICAgICAgY2xzLmVkaXR3aW4udGV4dF9mcmFtZSA9IE1vY2soKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMuZWRpdHdpbgorICAgICAgICBjbHMucm9vdC5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy5yb290CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorCisgICAgZGVmIHRlc3RfcGFyZW5fZXhwcmVzc2lvbihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgUGFyZW5NYXRjaCB3aXRoICdleHByZXNzaW9uJyBzdHlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRleHQgPSBzZWxmLnRleHQKKyAgICAgICAgcG0gPSBQYXJlbk1hdGNoKHNlbGYuZWRpdHdpbikKKyAgICAgICAgcG0uc2V0X3N0eWxlKCdleHByZXNzaW9uJykKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2RlZiBmb29iYXIoYSwgYicpCisgICAgICAgIHBtLmZsYXNoX3BhcmVuX2V2ZW50KCdldmVudCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzw8cGFyZW5tYXRjaC1jaGVjay1yZXN0b3JlPj4nLCB0ZXh0LmV2ZW50X2luZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUdXBsZUVxdWFsKHRleHQudGFnX3ByZXZyYW5nZSgncGFyZW4nLCAnZW5kJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnMS4xMCcsICcxLjE1JykpCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnKScpCisgICAgICAgIHBtLnJlc3RvcmVfZXZlbnQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCc8PHBhcmVubWF0Y2gtY2hlY2stcmVzdG9yZT4+JywgdGV4dC5ldmVudF9pbmZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dC50YWdfcHJldnJhbmdlKCdwYXJlbicsICdlbmQnKSwgKCkpCisKKyAgICAgICAgIyBwYXJlbl9jbG9zZWRfZXZlbnQgY2FuIG9ubHkgYmUgdGVzdGVkIGFzIGJlbG93CisgICAgICAgIHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodGV4dC50YWdfcHJldnJhbmdlKCdwYXJlbicsICdlbmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnMS4xMCcsICcxLjE2JykpCisKKyAgICBkZWYgdGVzdF9wYXJlbl9kZWZhdWx0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCBQYXJlbk1hdGNoIHdpdGggJ2RlZmF1bHQnIHN0eWxlLgorICAgICAgICAiIiIKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorICAgICAgICBwbSA9IFBhcmVuTWF0Y2goc2VsZi5lZGl0d2luKQorICAgICAgICBwbS5zZXRfc3R5bGUoJ2RlZmF1bHQnKQorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnZGVmIGZvb2JhcihhLCBiJykKKyAgICAgICAgcG0uZmxhc2hfcGFyZW5fZXZlbnQoJ2V2ZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignPDxwYXJlbm1hdGNoLWNoZWNrLXJlc3RvcmU+PicsIHRleHQuZXZlbnRfaW5mbygpKQorICAgICAgICBzZWxmLmFzc2VydFR1cGxlRXF1YWwodGV4dC50YWdfcHJldnJhbmdlKCdwYXJlbicsICdlbmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCcxLjEwJywgJzEuMTEnKSkKKyAgICAgICAgdGV4dC5pbnNlcnQoJ2luc2VydCcsICcpJykKKyAgICAgICAgcG0ucmVzdG9yZV9ldmVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJzw8cGFyZW5tYXRjaC1jaGVjay1yZXN0b3JlPj4nLCB0ZXh0LmV2ZW50X2luZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0LnRhZ19wcmV2cmFuZ2UoJ3BhcmVuJywgJ2VuZCcpLCAoKSkKKworICAgIGRlZiB0ZXN0X3BhcmVuX2Nvcm5lcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgY29ybmVyIGNhc2VzIGluIGZsYXNoX3BhcmVuX2V2ZW50IGFuZCBwYXJlbl9jbG9zZWRfZXZlbnQuCisKKyAgICAgICAgVGhlc2UgY2FzZXMgZm9yY2UgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhbmQgYWx0ZXJuYXRlIHBhdGhzLgorICAgICAgICAiIiIKKyAgICAgICAgdGV4dCA9IHNlbGYudGV4dAorICAgICAgICBwbSA9IFBhcmVuTWF0Y2goc2VsZi5lZGl0d2luKQorCisgICAgICAgIHRleHQuaW5zZXJ0KCdpbnNlcnQnLCAnIyB0aGlzIGlzIGEgY29tbWVuKScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKSkKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ1xuZGVmJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG0uZmxhc2hfcGFyZW5fZXZlbnQoJ2V2ZW50JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKSkKKworICAgICAgICB0ZXh0Lmluc2VydCgnaW5zZXJ0JywgJyBhLCAqYXJnKScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBtLnBhcmVuX2Nsb3NlZF9ldmVudCgnZXZlbnQnKSkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9yZXN0b3JlX3RpbWVyKHNlbGYpOgorICAgICAgICBwbSA9IFBhcmVuTWF0Y2goc2VsZi5lZGl0d2luKQorICAgICAgICBwbS5yZXN0b3JlX2V2ZW50ID0gTW9jaygpCisgICAgICAgIHBtLmhhbmRsZV9yZXN0b3JlX3RpbWVyKDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwbS5yZXN0b3JlX2V2ZW50LmNhbGxlZCkKKyAgICAgICAgcG0ucmVzdG9yZV9ldmVudC5yZXNldF9tb2NrKCkKKyAgICAgICAgcG0uaGFuZGxlX3Jlc3RvcmVfdGltZXIoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwbS5yZXN0b3JlX2V2ZW50LmNhbGxlZCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4odmVyYm9zaXR5PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9wYXRoYnJvd3Nlci5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3BhdGhicm93c2VyLnB5CmluZGV4IDdhZDdjOTcuLmFmYjg4NmYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3BhdGhicm93c2VyLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3BhdGhicm93c2VyLnB5CkBAIC0xLDUgKzEsOCBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgaWRsZWxpYi5QYXRoQnJvd3NlciBhcyBQYXRoQnJvd3NlcgoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgaWRsZWxpYgorZnJvbSBpZGxlbGliIGltcG9ydCBQYXRoQnJvd3NlcgogCiBjbGFzcyBQYXRoQnJvd3NlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC03LDYgKzEwLDE4IEBACiAgICAgICAgICMgSXNzdWUxNjIyNiAtIG1ha2Ugc3VyZSB0aGF0IGdldHRpbmcgYSBzdWJsaXN0IHdvcmtzCiAgICAgICAgIGQgPSBQYXRoQnJvd3Nlci5EaXJCcm93c2VyVHJlZUl0ZW0oJycpCiAgICAgICAgIGQuR2V0U3ViTGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycsIGQuR2V0VGV4dCgpKQorCisgICAgICAgIGRpciA9IG9zLnBhdGguc3BsaXQob3MucGF0aC5hYnNwYXRoKGlkbGVsaWIuX19maWxlX18pKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuaXNwYWNrYWdlZGlyKGRpciksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5pc3BhY2thZ2VkaXIoZGlyICsgJy9JY29ucycpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X1BhdGhCcm93c2VyVHJlZUl0ZW0oc2VsZik6CisgICAgICAgIHAgPSBQYXRoQnJvd3Nlci5QYXRoQnJvd3NlclRyZWVJdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLkdldFRleHQoKSwgJ3N5cy5wYXRoJykKKyAgICAgICAgc3ViID0gcC5HZXRTdWJMaXN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3ViKSwgbGVuKHN5cy5wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHN1YlswXSksIFBhdGhCcm93c2VyLkRpckJyb3dzZXJUcmVlSXRlbSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yLCBleGl0PUZhbHNlKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfc2VhcmNoZGlhbG9nYmFzZS5weSBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3NlYXJjaGRpYWxvZ2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODAzNmI5MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3NlYXJjaGRpYWxvZ2Jhc2UucHkKQEAgLTAsMCArMSwxNjUgQEAKKycnJ1VuaXR0ZXN0cyBmb3IgaWRsZWxpYi9TZWFyY2hEaWFsb2dCYXNlLnB5CisKK0NvdmVyYWdlOiA5OSUuIFRoZSBvbmx5IHRoaW5nIG5vdCBjb3ZlcmVkIGlzIGluY29uc2VxdWVudGlhbCAtLQordGVzdGluZyBza2lwcGluZyBvZiBzdWl0ZSB3aGVuIHNlbGYubmVlZHdyYXBidXR0b24gaXMgZmFsc2UuCisKKycnJworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKK2Zyb20gdGtpbnRlciBpbXBvcnQgVGssIFRvcGxldmVsLCBGcmFtZSAjIywgQm9vbGVhblZhciwgU3RyaW5nVmFyCitmcm9tIGlkbGVsaWIgaW1wb3J0IFNlYXJjaEVuZ2luZSBhcyBzZQorZnJvbSBpZGxlbGliIGltcG9ydCBTZWFyY2hEaWFsb2dCYXNlIGFzIHNkYgorZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX2lkbGUgaW1wb3J0IEZ1bmMKKyMjIGZyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja190ayBpbXBvcnQgVmFyCisKKyMgVGhlICMjIGltcG9ydHMgYWJvdmUgJiBmb2xsb3dpbmcgY291bGQgaGVscCBtYWtlIHNvbWUgdGVzdHMgZ3VpLWZyZWUuCisjIEhvd2V2ZXIsIHRoZXkgY3VycmVudGx5IG1ha2UgcmFkaW9idXR0b24gdGVzdHMgZmFpbC4KKyMjZGVmIHNldFVwTW9kdWxlKCk6CisjIyAgICAjIFJlcGxhY2UgdGsgb2JqZWN0cyB1c2VkIHRvIGluaXRpYWxpemUgc2UuU2VhcmNoRW5naW5lLgorIyMgICAgc2UuQm9vbGVhblZhciA9IFZhcgorIyMgICAgc2UuU3RyaW5nVmFyID0gVmFyCisjIworIyNkZWYgdGVhckRvd25Nb2R1bGUoKToKKyMjICAgIHNlLkJvb2xlYW5WYXIgPSBCb29sZWFuVmFyCisjIyAgICBzZS5TdHJpbmdWYXIgPSBTdHJpbmdWYXIKKworY2xhc3MgU2VhcmNoRGlhbG9nQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgcmVxdWlyZXMoJ2d1aScpCisgICAgICAgIGNscy5yb290ID0gVGsoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCisgICAgICAgIGRlbCBjbHMucm9vdAorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmVuZ2luZSA9IHNlLlNlYXJjaEVuZ2luZShzZWxmLnJvb3QpICAjIE5vbmUgYWxzbyBzZWVtcyB0byB3b3JrCisgICAgICAgIHNlbGYuZGlhbG9nID0gc2RiLlNlYXJjaERpYWxvZ0Jhc2Uocm9vdD1zZWxmLnJvb3QsIGVuZ2luZT1zZWxmLmVuZ2luZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5kaWFsb2cuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfb3Blbl9hbmRfY2xvc2Uoc2VsZik6CisgICAgICAgICMgb3BlbiBjYWxscyBjcmVhdGVfd2lkZ2V0cywgd2hpY2ggbmVlZHMgZGVmYXVsdF9jb21tYW5kCisgICAgICAgIHNlbGYuZGlhbG9nLmRlZmF1bHRfY29tbWFuZCA9IE5vbmUKKworICAgICAgICAjIFNpbmNlIHRleHQgcGFyYW1ldGVyIG9mIC5vcGVuIGlzIG5vdCB1c2VkIGluIGJhc2UgY2xhc3MsCisgICAgICAgICMgcGFzcyBkdW1teSAndGV4dCcgaW5zdGVhZCBvZiB0ay5UZXh0KCkuCisgICAgICAgIHNlbGYuZGlhbG9nLm9wZW4oJ3RleHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGlhbG9nLnRvcC5zdGF0ZSgpLCAnbm9ybWFsJykKKyAgICAgICAgc2VsZi5kaWFsb2cuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZGlhbG9nLnRvcC5zdGF0ZSgpLCAnd2l0aGRyYXduJykKKworICAgICAgICBzZWxmLmRpYWxvZy5vcGVuKCd0ZXh0Jywgc2VhcmNocGhyYXNlPSJoZWxsbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kaWFsb2cuZW50LmdldCgpLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmRpYWxvZy5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfd2lkZ2V0cyhzZWxmKToKKyAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX2VudHJpZXMgPSBGdW5jKCkKKyAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX29wdGlvbl9idXR0b25zID0gRnVuYygpCisgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV9vdGhlcl9idXR0b25zID0gRnVuYygpCisgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV9jb21tYW5kX2J1dHRvbnMgPSBGdW5jKCkKKworICAgICAgICBzZWxmLmRpYWxvZy5kZWZhdWx0X2NvbW1hbmQgPSBOb25lCisgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV93aWRnZXRzKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuY3JlYXRlX2VudHJpZXMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5kaWFsb2cuY3JlYXRlX29wdGlvbl9idXR0b25zLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGlhbG9nLmNyZWF0ZV9vdGhlcl9idXR0b25zLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZGlhbG9nLmNyZWF0ZV9jb21tYW5kX2J1dHRvbnMuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbWFrZV9lbnRyeShzZWxmKToKKyAgICAgICAgZXF1YWwgPSBzZWxmLmFzc2VydEVxdWFsCisgICAgICAgIHNlbGYuZGlhbG9nLnJvdyA9IDAKKyAgICAgICAgc2VsZi5kaWFsb2cudG9wID0gVG9wbGV2ZWwoc2VsZi5yb290KQorICAgICAgICBlbnRyeSwgbGFiZWwgPSBzZWxmLmRpYWxvZy5tYWtlX2VudHJ5KCJUZXN0OiIsICdoZWxsbycpCisgICAgICAgIGVxdWFsKGxhYmVsWyd0ZXh0J10sICdUZXN0OicpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihlbnRyeS5nZXQoKSwgJ2hlbGxvJykKKyAgICAgICAgZWdpID0gZW50cnkuZ3JpZF9pbmZvKCkKKyAgICAgICAgZXF1YWwoaW50KGVnaVsncm93J10pLCAwKQorICAgICAgICBlcXVhbChpbnQoZWdpWydjb2x1bW4nXSksIDEpCisgICAgICAgIGVxdWFsKGludChlZ2lbJ3Jvd3NwYW4nXSksIDEpCisgICAgICAgIGVxdWFsKGludChlZ2lbJ2NvbHVtbnNwYW4nXSksIDEpCisgICAgICAgIGVxdWFsKHNlbGYuZGlhbG9nLnJvdywgMSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9lbnRyaWVzKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy5yb3cgPSAwCisgICAgICAgIHNlbGYuZW5naW5lLnNldHBhdCgnaGVsbG8nKQorICAgICAgICBzZWxmLmRpYWxvZy5jcmVhdGVfZW50cmllcygpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5kaWFsb2cuZW50LmdldCgpLCAnaGVsbG8nKQorCisgICAgZGVmIHRlc3RfbWFrZV9mcmFtZShzZWxmKToKKyAgICAgICAgc2VsZi5kaWFsb2cucm93ID0gMAorICAgICAgICBzZWxmLmRpYWxvZy50b3AgPSBUb3BsZXZlbChzZWxmLnJvb3QpCisgICAgICAgIGZyYW1lLCBsYWJlbCA9IHNlbGYuZGlhbG9nLm1ha2VfZnJhbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhYmVsLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZyYW1lLCBGcmFtZSkKKworICAgICAgICBmcmFtZSwgbGFiZWwgPSBzZWxmLmRpYWxvZy5tYWtlX2ZyYW1lKCd0ZXN0bGFiZWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhYmVsWyd0ZXh0J10sICd0ZXN0bGFiZWwnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnJhbWUsIEZyYW1lKQorCisgICAgZGVmIGJ0bl90ZXN0X3NldHVwKHNlbGYsIG1ldGgpOgorICAgICAgICBzZWxmLmRpYWxvZy50b3AgPSBUb3BsZXZlbChzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuZGlhbG9nLnJvdyA9IDAKKyAgICAgICAgcmV0dXJuIG1ldGgoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX29wdGlvbl9idXR0b25zKHNlbGYpOgorICAgICAgICBlID0gc2VsZi5lbmdpbmUKKyAgICAgICAgZm9yIHN0YXRlIGluICgwLCAxKToKKyAgICAgICAgICAgIGZvciB2YXIgaW4gKGUucmV2YXIsIGUuY2FzZXZhciwgZS53b3JkdmFyLCBlLndyYXB2YXIpOgorICAgICAgICAgICAgICAgIHZhci5zZXQoc3RhdGUpCisgICAgICAgICAgICBmcmFtZSwgb3B0aW9ucyA9IHNlbGYuYnRuX3Rlc3Rfc2V0dXAoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGlhbG9nLmNyZWF0ZV9vcHRpb25fYnV0dG9ucykKKyAgICAgICAgICAgIGZvciBzcGVjLCBidXR0b24gaW4gemlwIChvcHRpb25zLCBmcmFtZS5wYWNrX3NsYXZlcygpKToKKyAgICAgICAgICAgICAgICB2YXIsIGxhYmVsID0gc3BlYworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnV0dG9uWyd0ZXh0J10sIGxhYmVsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCBzdGF0ZSkKKyAgICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBidXR0b24uZGVzZWxlY3QoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zZWxlY3QoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCAxIC0gc3RhdGUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfb3RoZXJfYnV0dG9ucyhzZWxmKToKKyAgICAgICAgZm9yIHN0YXRlIGluIChGYWxzZSwgVHJ1ZSk6CisgICAgICAgICAgICB2YXIgPSBzZWxmLmVuZ2luZS5iYWNrdmFyCisgICAgICAgICAgICB2YXIuc2V0KHN0YXRlKQorICAgICAgICAgICAgZnJhbWUsIG90aGVycyA9IHNlbGYuYnRuX3Rlc3Rfc2V0dXAoCisgICAgICAgICAgICAgICAgc2VsZi5kaWFsb2cuY3JlYXRlX290aGVyX2J1dHRvbnMpCisgICAgICAgICAgICBidXR0b25zID0gZnJhbWUucGFja19zbGF2ZXMoKQorICAgICAgICAgICAgZm9yIHNwZWMsIGJ1dHRvbiBpbiB6aXAob3RoZXJzLCBidXR0b25zKToKKyAgICAgICAgICAgICAgICB2YWwsIGxhYmVsID0gc3BlYworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnV0dG9uWyd0ZXh0J10sIGxhYmVsKQorICAgICAgICAgICAgICAgIGlmIHZhbCA9PSBzdGF0ZToKKyAgICAgICAgICAgICAgICAgICAgIyBoaXQgb3RoZXIgYnV0dG9uLCB0aGVuIHRoaXMgb25lCisgICAgICAgICAgICAgICAgICAgICMgaW5kZXhlcyBkZXBlbmQgb24gYnV0dG9uIG9yZGVyCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCBzdGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnV0dG9uc1t2YWxdLnNlbGVjdCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCAxIC0gc3RhdGUpCisgICAgICAgICAgICAgICAgICAgIGJ1dHRvbnNbMS12YWxdLnNlbGVjdCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyLmdldCgpLCBzdGF0ZSkKKworICAgIGRlZiB0ZXN0X21ha2VfYnV0dG9uKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy50b3AgPSBUb3BsZXZlbChzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuZGlhbG9nLmJ1dHRvbmZyYW1lID0gRnJhbWUoc2VsZi5kaWFsb2cudG9wKQorICAgICAgICBidG4gPSBzZWxmLmRpYWxvZy5tYWtlX2J1dHRvbignVGVzdCcsIHNlbGYuZGlhbG9nLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ0blsndGV4dCddLCAnVGVzdCcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9idXR0b25zKHNlbGYpOgorICAgICAgICBzZWxmLmRpYWxvZy5jcmVhdGVfY29tbWFuZF9idXR0b25zKCkKKyAgICAgICAgIyBMb29rIGZvciBjbG9zZSBidXR0b24gY29tbWFuZCBpbiBidXR0b25mcmFtZQorICAgICAgICBjbG9zZWJ1dHRvbmNvbW1hbmQgPSAnJworICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5kaWFsb2cuYnV0dG9uZnJhbWUud2luZm9fY2hpbGRyZW4oKToKKyAgICAgICAgICAgIGlmIGNoaWxkWyd0ZXh0J10gPT0gJ2Nsb3NlJzoKKyAgICAgICAgICAgICAgICBjbG9zZWJ1dHRvbmNvbW1hbmQgPSBjaGlsZFsnY29tbWFuZCddCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2Nsb3NlJywgY2xvc2VidXR0b25jb21tYW5kKQorCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKHZlcmJvc2l0eT0yLCBleGl0PTIpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9zZWFyY2hlbmdpbmUucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF9zZWFyY2hlbmdpbmUucHkKaW5kZXggMTI5YTVhMy4uYzc3OTJmYiAxMDA2NDQKLS0tIGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfc2VhcmNoZW5naW5lLnB5CisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3NlYXJjaGVuZ2luZS5weQpAQCAtNyw3ICs3LDcgQEAKIAogaW1wb3J0IHJlCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworIyBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMKIGZyb20gdGtpbnRlciBpbXBvcnQgIEJvb2xlYW5WYXIsIFN0cmluZ1ZhciwgVGNsRXJyb3IgICMgLFRrLCBUZXh0CiBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAogZnJvbSBpZGxlbGliIGltcG9ydCBTZWFyY2hFbmdpbmUgYXMgc2UKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3RleHQucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF90ZXh0LnB5CmluZGV4IDVhYzJmZDcuLjdlODIzZGYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3RleHQucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfdGV4dC5weQpAQCAtMyw3ICszLDYgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcwogCiBmcm9tIF90a2ludGVyIGltcG9ydCBUY2xFcnJvcgotaW1wb3J0IHRraW50ZXIgYXMgdGsKIAogY2xhc3MgVGV4dFRlc3Qob2JqZWN0KToKIApkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfdGV4dHZpZXcucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF90ZXh0dmlldy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU1YjgyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3RfdGV4dHZpZXcucHkKQEAgLTAsMCArMSw5NyBAQAorJycnVGVzdCB0aGUgZnVuY3Rpb25zIGFuZCBtYWluIGNsYXNzIG1ldGhvZCBvZiB0ZXh0Vmlldy5weS4KKworU2luY2UgYWxsIG1ldGhvZHMgYW5kIGZ1bmN0aW9ucyBjcmVhdGUgKG9yIGRlc3Ryb3kpIGEgVGV4dFZpZXdlciwgd2hpY2gKK2lzIGEgd2lkZ2V0IGNvbnRhaW5pbmcgbXVsdGlwbGUgd2lkZ2V0cywgYWxsIHRlc3RzIG11c3QgYmUgZ3VpIHRlc3RzLgorVXNpbmcgbW9jayBUZXh0IHdvdWxkIG5vdCBjaGFuZ2UgdGhpcy4gIE90aGVyIG1vY2tzIGFyZSB1c2VkIHRvIHJldHJpZXZlCitpbmZvcm1hdGlvbiBhYm91dCBjYWxscy4KKworVGhlIGNvdmVyYWdlIGlzIGVzc2VudGlhbGx5IDEwMCUuCisnJycKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcworcmVxdWlyZXMoJ2d1aScpCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrCitmcm9tIGlkbGVsaWIgaW1wb3J0IHRleHRWaWV3IGFzIHR2Citmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lm1vY2tfaWRsZSBpbXBvcnQgRnVuYworZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5tb2NrX3RrIGltcG9ydCBNYm94CisKK2RlZiBzZXRVcE1vZHVsZSgpOgorICAgIGdsb2JhbCByb290CisgICAgcm9vdCA9IFRrKCkKKworZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgZ2xvYmFsIHJvb3QKKyAgICByb290LmRlc3Ryb3koKSAgIyBweWZsYWtlcyBmYWxzZWx5IHNlZXMgcm9vdCBhcyB1bmRlZmluZWQKKyAgICBkZWwgcm9vdAorCisKK2NsYXNzIFRWKHR2LlRleHRWaWV3ZXIpOiAgIyB1c2VkIGJ5IFRleHRWaWV3VGVzdAorICAgIHRyYW5zaWVudCA9IEZ1bmMoKQorICAgIGdyYWJfc2V0ID0gRnVuYygpCisgICAgd2FpdF93aW5kb3cgPSBGdW5jKCkKKworY2xhc3MgVGV4dFZpZXdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgVFYudHJhbnNpZW50Ll9faW5pdF9fKCkKKyAgICAgICAgVFYuZ3JhYl9zZXQuX19pbml0X18oKQorICAgICAgICBUVi53YWl0X3dpbmRvdy5fX2luaXRfXygpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZGFsKHNlbGYpOgorICAgICAgICB2aWV3ID0gVFYocm9vdCwgJ1RpdGxlJywgJ3Rlc3QgdGV4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShUVi50cmFuc2llbnQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVFYuZ3JhYl9zZXQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoVFYud2FpdF93aW5kb3cuY2FsbGVkKQorICAgICAgICB2aWV3Lk9rKCkKKworICAgIGRlZiB0ZXN0X2luaXRfbm9ubW9kYWwoc2VsZik6CisgICAgICAgIHZpZXcgPSBUVihyb290LCAnVGl0bGUnLCAndGVzdCB0ZXh0JywgbW9kYWw9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVFYudHJhbnNpZW50LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShUVi5ncmFiX3NldC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoVFYud2FpdF93aW5kb3cuY2FsbGVkKQorICAgICAgICB2aWV3Lk9rKCkKKworICAgIGRlZiB0ZXN0X29rKHNlbGYpOgorICAgICAgICB2aWV3ID0gVFYocm9vdCwgJ1RpdGxlJywgJ3Rlc3QgdGV4dCcsIG1vZGFsPUZhbHNlKQorICAgICAgICB2aWV3LmRlc3Ryb3kgPSBGdW5jKCkKKyAgICAgICAgdmlldy5PaygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh2aWV3LmRlc3Ryb3kuY2FsbGVkKQorICAgICAgICBkZWwgdmlldy5kZXN0cm95ICAjIHVubWFzayByZWFsIGZ1bmN0aW9uCisgICAgICAgIHZpZXcuZGVzdHJveQorCisKK2NsYXNzIHRleHR2aWV3VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMub3JpZ19tYm94ID0gdHYudGtNZXNzYWdlQm94CisgICAgICAgIHR2LnRrTWVzc2FnZUJveCA9IE1ib3gKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIHR2LnRrTWVzc2FnZUJveCA9IGNscy5vcmlnX21ib3gKKyAgICAgICAgZGVsIGNscy5vcmlnX21ib3gKKworICAgIGRlZiB0ZXN0X3ZpZXdfdGV4dChzZWxmKToKKyAgICAgICAgIyBJZiBtb2RhbCBUcnVlLCB0a2ludGVyIHdpbGwgZXJyb3Igd2l0aCAnY2FuJ3QgaW52b2tlICJldmVudCIgY29tbWFuZCcKKyAgICAgICAgdmlldyA9IHR2LnZpZXdfdGV4dChyb290LCAnVGl0bGUnLCAndGVzdCB0ZXh0JywgbW9kYWw9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aWV3LCB0di5UZXh0Vmlld2VyKQorCisgICAgZGVmIHRlc3Rfdmlld19maWxlKHNlbGYpOgorICAgICAgICB0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICAgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICd0ZXN0X3RleHR2aWV3LnB5JykKKyAgICAgICAgdmlldyA9IHR2LnZpZXdfZmlsZShyb290LCAnVGl0bGUnLCB0ZXN0ZmlsZSwgbW9kYWw9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2aWV3LCB0di5UZXh0Vmlld2VyKQorICAgICAgICBzZWxmLmFzc2VydEluKCdUZXN0Jywgdmlldy50ZXh0Vmlldy5nZXQoJzEuMCcsICcxLmVuZCcpKQorICAgICAgICB2aWV3Lk9rKCkKKworICAgICAgICAjIE1vY2sgbWVzc2FnZWJveCB3aWxsIGJlIHVzZWQgYW5kIHZpZXdfZmlsZSB3aWxsIG5vdCByZXR1cm4gYW55dGhpbmcKKyAgICAgICAgdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICcuLi9ub3R0aGVyZS5weScpCisgICAgICAgIHZpZXcgPSB0di52aWV3X2ZpbGUocm9vdCwgJ1RpdGxlJywgdGVzdGZpbGUsIG1vZGFsPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh2aWV3KQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dhcm5pbmcucHkgYi9MaWIvaWRsZWxpYi9pZGxlX3Rlc3QvdGVzdF93YXJuaW5nLnB5CmluZGV4IDE4NjI3ZGQuLjU0YWM5OTMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dhcm5pbmcucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfd2FybmluZy5weQpAQCAtNjgsNiArNjgsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QnLCBVc2VyV2FybmluZywgJ3Rlc3Rfd2FybmluZy5weScsIDk5LCBmLCAnTGluZSBvZiBjb2RlJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2hlbGxtc2cuc3BsaXRsaW5lcygpLCBmLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpKQogCitjbGFzcyBJbXBvcnRXYXJuVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaWRsZXZlcihzZWxmKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIikKKyAgICAgICAgICAgIGltcG9ydCBpZGxlbGliLmlkbGV2ZXIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mod1stMV0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ2ZXJzaW9uIiwgc3RyKHdbLTFdLm1lc3NhZ2UpKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dpZGdldHJlZGlyLnB5IGIvTGliL2lkbGVsaWIvaWRsZV90ZXN0L3Rlc3Rfd2lkZ2V0cmVkaXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ0MDU2MQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9pZGxlbGliL2lkbGVfdGVzdC90ZXN0X3dpZGdldHJlZGlyLnB5CkBAIC0wLDAgKzEsMTIyIEBACisiIiJVbml0dGVzdCBmb3IgaWRsZWxpYi5XaWRnZXRSZWRpcmVjdG9yCisKKzEwMCUgY292ZXJhZ2UKKyIiIgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gaWRsZWxpYi5pZGxlX3Rlc3QubW9ja19pZGxlIGltcG9ydCBGdW5jCitmcm9tIHRraW50ZXIgaW1wb3J0IFRrLCBUZXh0LCBUY2xFcnJvcgorZnJvbSBpZGxlbGliLldpZGdldFJlZGlyZWN0b3IgaW1wb3J0IFdpZGdldFJlZGlyZWN0b3IKKworCitjbGFzcyBJbml0Q2xvc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIHJlcXVpcmVzKCdndWknKQorICAgICAgICBjbHMudGsgPSBUaygpCisgICAgICAgIGNscy50ZXh0ID0gVGV4dChjbHMudGspCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMudGV4dC5kZXN0cm95KCkKKyAgICAgICAgY2xzLnRrLmRlc3Ryb3koKQorICAgICAgICBkZWwgY2xzLnRleHQsIGNscy50aworCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgcmVkaXIgPSBXaWRnZXRSZWRpcmVjdG9yKHNlbGYudGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWRpci53aWRnZXQsIHNlbGYudGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWRpci50aywgc2VsZi50ZXh0LnRrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgV2lkZ2V0UmVkaXJlY3Rvciwgc2VsZi50ZXh0KQorICAgICAgICByZWRpci5jbG9zZSgpICAjIHJlc3RvcmUgc2VsZi50aywgc2VsZi50ZXh0CisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgcmVkaXIgPSBXaWRnZXRSZWRpcmVjdG9yKHNlbGYudGV4dCkKKyAgICAgICAgcmVkaXIucmVnaXN0ZXIoJ2luc2VydCcsIEZ1bmMpCisgICAgICAgIHJlZGlyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWRpci5fb3BlcmF0aW9ucywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihzZWxmLnRleHQsICd3aWRnZXQnKSkKKworCitjbGFzcyBXaWRnZXRSZWRpcmVjdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICByZXF1aXJlcygnZ3VpJykKKyAgICAgICAgY2xzLnRrID0gVGsoKQorICAgICAgICBjbHMudGV4dCA9IFRleHQoY2xzLnRrKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnRleHQuZGVzdHJveSgpCisgICAgICAgIGNscy50ay5kZXN0cm95KCkKKyAgICAgICAgZGVsIGNscy50ZXh0LCBjbHMudGsKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5yZWRpciA9IFdpZGdldFJlZGlyZWN0b3Ioc2VsZi50ZXh0KQorICAgICAgICBzZWxmLmZ1bmMgPSBGdW5jKCkKKyAgICAgICAgc2VsZi5vcmlnX2luc2VydCA9IHNlbGYucmVkaXIucmVnaXN0ZXIoJ2luc2VydCcsIHNlbGYuZnVuYykKKyAgICAgICAgc2VsZi50ZXh0Lmluc2VydCgnaW5zZXJ0JywgJ2FzZGYnKSAgIyBsZWF2ZXMgc2VsZi50ZXh0IGVtcHR5CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYudGV4dC5kZWxldGUoJzEuMCcsICdlbmQnKQorICAgICAgICBzZWxmLnJlZGlyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6ICAjIHBhcnRseSBmb3IgMTAwJSBjb3ZlcmFnZQorICAgICAgICBzZWxmLmFzc2VydEluKCdSZWRpcmVjdG9yJywgcmVwcihzZWxmLnJlZGlyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignT3JpZ2luYWwnLCByZXByKHNlbGYub3JpZ19pbnNlcnQpKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpLCAnXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYy5hcmdzLCAoJ2luc2VydCcsICdhc2RmJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2luc2VydCcsIHNlbGYucmVkaXIuX29wZXJhdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2luc2VydCcsIHNlbGYudGV4dC5fX2RpY3RfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHQuaW5zZXJ0LCBzZWxmLmZ1bmMpCisKKyAgICBkZWYgdGVzdF9vcmlnaW5hbF9jb21tYW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYub3JpZ19pbnNlcnQub3BlcmF0aW9uLCAnaW5zZXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9yaWdfaW5zZXJ0LnRrX2NhbGwsIHNlbGYudGV4dC50ay5jYWxsKQorICAgICAgICBzZWxmLm9yaWdfaW5zZXJ0KCdpbnNlcnQnLCAnYXNkZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpLCAnYXNkZlxuJykKKworICAgIGRlZiB0ZXN0X3VucmVnaXN0ZXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYucmVkaXIudW5yZWdpc3RlcignaW52YWxpZCBvcGVyYXRpb24gbmFtZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucmVkaXIudW5yZWdpc3RlcignaW5zZXJ0JyksIHNlbGYuZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignaW5zZXJ0Jywgc2VsZi5yZWRpci5fb3BlcmF0aW9ucykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignaW5zZXJ0Jywgc2VsZi50ZXh0Ll9fZGljdF9fKQorCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9ub19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGRlbCBzZWxmLnRleHQuaW5zZXJ0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWRpci51bnJlZ2lzdGVyKCdpbnNlcnQnKSwgc2VsZi5mdW5jKQorCisgICAgZGVmIHRlc3RfZGlzcGF0Y2hfaW50ZXJjZXB0KHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMuX19pbml0X18oVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucmVkaXIuZGlzcGF0Y2goJ2luc2VydCcsIEZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZ1bmMuYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X2Rpc3BhdGNoX2J5cGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5vcmlnX2luc2VydCgnaW5zZXJ0JywgJ2FzZGYnKQorICAgICAgICAjIHRrLmNhbGwgcmV0dXJucyAnJyB3aGVyZSBQeXRob24gd291bGQgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZGlyLmRpc3BhdGNoKCdkZWxldGUnLCAnMS4wJywgJ2VuZCcpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHQuZ2V0KCcxLjAnLCAnZW5kJyksICdcbicpCisKKyAgICBkZWYgdGVzdF9kaXNwYXRjaF9lcnJvcihzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jLl9faW5pdF9fKFRjbEVycm9yKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yZWRpci5kaXNwYXRjaCgnaW5zZXJ0JywgRmFsc2UpLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJlZGlyLmRpc3BhdGNoKCdpbnZhbGlkJyksICcnKQorCisgICAgZGVmIHRlc3RfY29tbWFuZF9kaXNwYXRjaChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgLl9faW5pdF9fIGNhdXNlcyByZWRpcmVjdGlvbiBvZiB0ayBjYWxscworICAgICAgICAjIHRocm91Z2ggcmVkaXIuZGlzcGF0Y2gKKyAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYudGV4dC5fdywgJ2luc2VydCcsICdoZWxsbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jLmFyZ3MsICgnaGVsbG8nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0LmdldCgnMS4wJywgJ2VuZCcpLCAnXG4nKQorICAgICAgICAjIEVuc3VyZSB0aGF0IGNhbGxlZCB0aHJvdWdoIHJlZGlyIC5kaXNwYXRjaCBhbmQgbm90IHRocm91Z2gKKyAgICAgICAgIyBzZWxmLnRleHQuaW5zZXJ0IGJ5IGhhdmluZyBtb2NrIHJhaXNlIFRjbEVycm9yLgorICAgICAgICBzZWxmLmZ1bmMuX19pbml0X18oVGNsRXJyb3IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRrLmNhbGwoc2VsZi50ZXh0Ll93LCAnaW5zZXJ0JywgJ2JvbycpLCAnJykKKworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MikKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkgYi9MaWIvaWRsZWxpYi9pZGxldmVyLnB5CmluZGV4IDlhZDdkODkuLjNlOWY2OWEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2lkbGV2ZXIucHkKKysrIGIvTGliL2lkbGVsaWIvaWRsZXZlci5weQpAQCAtMSArMSwxMiBAQAotSURMRV9WRVJTSU9OID0gIjMuMy42IgorIiIiCitUaGUgc2VwYXJhdGUgSWRsZSB2ZXJzaW9uIHdhcyBlbGltaW5hdGVkIHllYXJzIGFnbzsKK2lkbGVsaWIuaWRsZXZlciBpcyBubyBsb25nZXIgdXNlZCBieSBJZGxlCithbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNiBvciBsYXRlci4gIFVzZQorICAgIGZyb20gc3lzIGltcG9ydCB2ZXJzaW9uCisgICAgSURMRV9WRVJTSU9OID0gdmVyc2lvbls6dmVyc2lvbi5pbmRleCgnICcpXQorIiIiCisjIEtlcHQgZm9yIG5vdyBvbmx5IGZvciBwb3NzaWJsZSBleGlzdGluZyBleHRlbnNpb24gdXNlCitpbXBvcnQgd2FybmluZ3MgYXMgdwordy53YXJuKF9fZG9jX18sIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorZnJvbSBzeXMgaW1wb3J0IHZlcnNpb24KK0lETEVfVkVSU0lPTiA9IHZlcnNpb25bOnZlcnNpb24uaW5kZXgoJyAnKV0KZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL2tleWJpbmRpbmdEaWFsb2cucHkgYi9MaWIvaWRsZWxpYi9rZXliaW5kaW5nRGlhbG9nLnB5CmluZGV4IDBmMGRhOGMuLmU2NDM4YmYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL2tleWJpbmRpbmdEaWFsb2cucHkKKysrIGIvTGliL2lkbGVsaWIva2V5YmluZGluZ0RpYWxvZy5weQpAQCAtNCwxNSArNCwxNiBAQAogZnJvbSB0a2ludGVyIGltcG9ydCAqCiBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAogaW1wb3J0IHN0cmluZwotZnJvbSBpZGxlbGliIGltcG9ydCBtYWNvc3hTdXBwb3J0CitpbXBvcnQgc3lzCiAKIGNsYXNzIEdldEtleXNEaWFsb2coVG9wbGV2ZWwpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLHBhcmVudCx0aXRsZSxhY3Rpb24sY3VycmVudEtleVNlcXVlbmNlcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYscGFyZW50LHRpdGxlLGFjdGlvbixjdXJyZW50S2V5U2VxdWVuY2VzLF9odGVzdD1GYWxzZSk6CiAgICAgICAgICIiIgogICAgICAgICBhY3Rpb24gLSBzdHJpbmcsIHRoZSBuYW1lIG9mIHRoZSB2aXJ0dWFsIGV2ZW50IHRoZXNlIGtleXMgd2lsbCBiZQogICAgICAgICAgICAgICAgICBtYXBwZWQgdG8KICAgICAgICAgY3VycmVudEtleXMgLSBsaXN0LCBhIGxpc3Qgb2YgYWxsIGtleSBzZXF1ZW5jZSBsaXN0cyBjdXJyZW50bHkgbWFwcGVkCiAgICAgICAgICAgICAgICAgIHRvIHZpcnR1YWwgZXZlbnRzLCBmb3Igb3ZlcmxhcCBjaGVja2luZworICAgICAgICBfaHRlc3QgLSBib29sLCBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdAogICAgICAgICAiIiIKICAgICAgICAgVG9wbGV2ZWwuX19pbml0X18oc2VsZiwgcGFyZW50KQogICAgICAgICBzZWxmLmNvbmZpZ3VyZShib3JkZXJ3aWR0aD01KQpAQCAtMzgsMTEgKzM5LDE0IEBACiAgICAgICAgIHNlbGYuTG9hZEZpbmFsS2V5TGlzdCgpCiAgICAgICAgIHNlbGYud2l0aGRyYXcoKSAjaGlkZSB3aGlsZSBzZXR0aW5nIGdlb21ldHJ5CiAgICAgICAgIHNlbGYudXBkYXRlX2lkbGV0YXNrcygpCi0gICAgICAgIHNlbGYuZ2VvbWV0cnkoIislZCslZCIgJQotICAgICAgICAgICAgKChwYXJlbnQud2luZm9fcm9vdHgoKSsoKHBhcmVudC53aW5mb193aWR0aCgpLzIpCi0gICAgICAgICAgICAgICAgLShzZWxmLndpbmZvX3JlcXdpZHRoKCkvMikpLAotICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSsoKHBhcmVudC53aW5mb19oZWlnaHQoKS8yKQotICAgICAgICAgICAgICAgIC0oc2VsZi53aW5mb19yZXFoZWlnaHQoKS8yKSkgKSkgKSAjY2VudHJlIGRpYWxvZyBvdmVyIHBhcmVudAorICAgICAgICBzZWxmLmdlb21ldHJ5KAorICAgICAgICAgICAgICAgICIrJWQrJWQiICUgKAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSArCisgICAgICAgICAgICAgICAgICAgIChwYXJlbnQud2luZm9fd2lkdGgoKS8yIC0gc2VsZi53aW5mb19yZXF3aWR0aCgpLzIpLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHkoKSArCisgICAgICAgICAgICAgICAgICAgICgocGFyZW50LndpbmZvX2hlaWdodCgpLzIgLSBzZWxmLndpbmZvX3JlcWhlaWdodCgpLzIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBfaHRlc3QgZWxzZSAxNTApCisgICAgICAgICAgICAgICAgKSApICAjY2VudHJlIGRpYWxvZyBvdmVyIHBhcmVudCAob3IgYmVsb3cgaHRlc3QgYm94KQogICAgICAgICBzZWxmLmRlaWNvbmlmeSgpICNnZW9tZXRyeSBzZXQsIHVuaGlkZQogICAgICAgICBzZWxmLndhaXRfd2luZG93KCkKIApAQCAtMTMzLDggKzEzNyw3IEBACiAgICAgICAgIG9yZGVyIGlzIGFsc28gaW1wb3J0YW50OiBrZXkgYmluZGluZyBlcXVhbGl0eSBkZXBlbmRzIG9uIGl0LCBzbwogICAgICAgICBjb25maWcta2V5cy5kZWYgbXVzdCB1c2UgdGhlIHNhbWUgb3JkZXJpbmcuCiAgICAgICAgICIiIgotICAgICAgICBpbXBvcnQgc3lzCi0gICAgICAgIGlmIG1hY29zeFN1cHBvcnQucnVubmluZ0FzT1NYQXBwKCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIjoKICAgICAgICAgICAgIHNlbGYubW9kaWZpZXJzID0gWydTaGlmdCcsICdDb250cm9sJywgJ09wdGlvbicsICdDb21tYW5kJ10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYubW9kaWZpZXJzID0gWydDb250cm9sJywgJ0FsdCcsICdTaGlmdCddCkBAIC0yNTksMTEgKzI2Miw1IEBACiAgICAgICAgIHJldHVybiBrZXlzT0sKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICAjdGVzdCB0aGUgZGlhbG9nCi0gICAgcm9vdD1UaygpCi0gICAgZGVmIHJ1bigpOgotICAgICAgICBrZXlTZXE9JycKLSAgICAgICAgZGxnPUdldEtleXNEaWFsb2cocm9vdCwnR2V0IEtleXMnLCdmaW5kLWFnYWluJyxbXSkKLSAgICAgICAgcHJpbnQoZGxnLnJlc3VsdCkKLSAgICBCdXR0b24ocm9vdCx0ZXh0PSdEaWFsb2cnLGNvbW1hbmQ9cnVuKS5wYWNrKCkKLSAgICByb290Lm1haW5sb29wKCkKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oR2V0S2V5c0RpYWxvZykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkgYi9MaWIvaWRsZWxpYi9tYWNvc3hTdXBwb3J0LnB5CmluZGV4IDY3MDY5ZmEuLmI5NmJhZTEgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL21hY29zeFN1cHBvcnQucHkKKysrIGIvTGliL2lkbGVsaWIvbWFjb3N4U3VwcG9ydC5weQpAQCAtMSw0OCArMSw3MCBAQAogIiIiCi1BIG51bWJlciBvZiBmdW5jdGlvbiB0aGF0IGVuaGFuY2UgSURMRSBvbiBNYWNPU1ggd2hlbiBpdCB1c2VkIGFzIGEgbm9ybWFsCi1HVUkgYXBwbGljYXRpb24gKGFzIG9wcG9zZWQgdG8gYW4gWDExIGFwcGxpY2F0aW9uKS4KK0EgbnVtYmVyIG9mIGZ1bmN0aW9ucyB0aGF0IGVuaGFuY2UgSURMRSBvbiBNYWMgT1NYLgogIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGtpbnRlcgogZnJvbSBvcyBpbXBvcnQgcGF0aAotCi0KLV9hcHBidW5kbGUgPSBOb25lCitpbXBvcnQgd2FybmluZ3MKIAogZGVmIHJ1bm5pbmdBc09TWEFwcCgpOgotICAgICIiIgotICAgIFJldHVybnMgVHJ1ZSBpZiBQeXRob24gaXMgcnVubmluZyBmcm9tIHdpdGhpbiBhbiBhcHAgb24gT1NYLgotICAgIElmIHNvLCB0aGUgdmFyaW91cyBPUyBYIGN1c3RvbWl6YXRpb25zIHdpbGwgYmUgdHJpZ2dlcmVkIGxhdGVyIChtZW51Ci0gICAgZml4dXAsIGV0IGFsKS4gIChPcmlnaW5hbGx5LCB0aGlzIHRlc3Qgd2FzIHN1cHBvc2VkIHRvIGNvbmRpdGlvbgotICAgIGJlaGF2aW9yIG9uIHdoZXRoZXIgSURMRSB3YXMgcnVubmluZyB1bmRlciBBcXVhIFRrIHJhdGhlciB0aGFuCi0gICAgdW5kZXIgWDExIFRrIGJ1dCB0aGF0IGRvZXMgbm90IHdvcmsgc2luY2UgYSBmcmFtZXdvcmsgYnVpbGQKLSAgICBjb3VsZCBiZSBsaW5rZWQgd2l0aCBYMTEuICBGb3Igc2V2ZXJhbCByZWxlYXNlcywgdGhpcyB0ZXN0IGFjdHVhbGx5Ci0gICAgZGlmZmVyZW50aWF0ZXMgYmV0d2VlbiB3aGV0aGVyIElETEUgaXMgcnVubmluZyBmcm9tIGEgZnJhbWV3b3JrIG9yCi0gICAgbm90LiAgQXMgYSBmdXR1cmUgZW5oYW5jZW1lbnQsIGl0IHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZXRoZXIgdGhlcmUKLSAgICBzaG91bGQgYmUgYSBkaWZmZXJlbmNlIGJhc2VkIG9uIGZyYW1ld29yayBhbmQgYW55IG5lZWRlZCBYMTEgYWRhcHRpb25zCi0gICAgc2hvdWxkIGJlIG1hZGUgZGVwZW5kZW50IG9uIGEgbmV3IGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgdGVzdHMgZm9yIFgxMS4pCi0gICAgIiIiCi0gICAgZ2xvYmFsIF9hcHBidW5kbGUKLSAgICBpZiBfYXBwYnVuZGxlIGlzIE5vbmU6Ci0gICAgICAgIF9hcHBidW5kbGUgPSBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicKLSAgICAgICAgaWYgX2FwcGJ1bmRsZToKLSAgICAgICAgICAgIGltcG9ydCBzeXNjb25maWcKLSAgICAgICAgICAgIF9hcHBidW5kbGUgPSBib29sKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignUFlUSE9ORlJBTUVXT1JLJykpCi0gICAgcmV0dXJuIF9hcHBidW5kbGUKLQotX2NhcmJvbmFxdWF0ayA9IE5vbmUKKyAgICB3YXJuaW5ncy53YXJuKCJydW5uaW5nQXNPU1hBcHAoKSBpcyBkZXByZWNhdGVkLCB1c2UgaXNBcXVhVGsoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICByZXR1cm4gaXNBcXVhVGsoKQogCiBkZWYgaXNDYXJib25BcXVhVGsocm9vdCk6CisgICAgd2FybmluZ3Mud2FybigiaXNDYXJib25BcXVhVGsocm9vdCkgaXMgZGVwcmVjYXRlZCwgdXNlIGlzQ2FyYm9uVGsoKSIsCisgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICByZXR1cm4gaXNDYXJib25UaygpCisKK190a190eXBlID0gTm9uZQorCitkZWYgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cyhyb290KToKKyAgICAiIiIKKyAgICBJbml0aWFsaXplcyBPUyBYIFRrIHZhcmlhbnQgdmFsdWVzIGZvcgorICAgIGlzQXF1YVRrKCksIGlzQ2FyYm9uVGsoKSwgaXNDb2NvYVRrKCksIGFuZCBpc1hRdWFydHooKS4KKyAgICAiIiIKKyAgICBnbG9iYWwgX3RrX3R5cGUKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6CisgICAgICAgIHdzID0gcm9vdC50ay5jYWxsKCd0aycsICd3aW5kb3dpbmdzeXN0ZW0nKQorICAgICAgICBpZiAneDExJyBpbiB3czoKKyAgICAgICAgICAgIF90a190eXBlID0gInhxdWFydHoiCisgICAgICAgIGVsaWYgJ2FxdWEnIG5vdCBpbiB3czoKKyAgICAgICAgICAgIF90a190eXBlID0gIm90aGVyIgorICAgICAgICBlbGlmICdBcHBLaXQnIGluIHJvb3QudGsuY2FsbCgnd2luZm8nLCAnc2VydmVyJywgJy4nKToKKyAgICAgICAgICAgIF90a190eXBlID0gImNvY29hIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX3RrX3R5cGUgPSAiY2FyYm9uIgorICAgIGVsc2U6CisgICAgICAgIF90a190eXBlID0gIm90aGVyIgorCitkZWYgaXNBcXVhVGsoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIFRydWUgaWYgSURMRSBpcyB1c2luZyBhIG5hdGl2ZSBPUyBYIFRrIChDb2NvYSBvciBDYXJib24pLgorICAgICIiIgorICAgIGFzc2VydCBfdGtfdHlwZSBpcyBub3QgTm9uZQorICAgIHJldHVybiBfdGtfdHlwZSA9PSAiY29jb2EiIG9yIF90a190eXBlID09ICJjYXJib24iCisKK2RlZiBpc0NhcmJvblRrKCk6CiAgICAgIiIiCiAgICAgUmV0dXJucyBUcnVlIGlmIElETEUgaXMgdXNpbmcgYSBDYXJib24gQXF1YSBUayAoaW5zdGVhZCBvZiB0aGUKICAgICBuZXdlciBDb2NvYSBBcXVhIFRrKS4KICAgICAiIiIKLSAgICBnbG9iYWwgX2NhcmJvbmFxdWF0awotICAgIGlmIF9jYXJib25hcXVhdGsgaXMgTm9uZToKLSAgICAgICAgX2NhcmJvbmFxdWF0ayA9IChydW5uaW5nQXNPU1hBcHAoKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAnYXF1YScgaW4gcm9vdC50ay5jYWxsKCd0aycsICd3aW5kb3dpbmdzeXN0ZW0nKSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAnQXBwS2l0JyBub3QgaW4gcm9vdC50ay5jYWxsKCd3aW5mbycsICdzZXJ2ZXInLCAnLicpKQotICAgIHJldHVybiBfY2FyYm9uYXF1YXRrCisgICAgYXNzZXJ0IF90a190eXBlIGlzIG5vdCBOb25lCisgICAgcmV0dXJuIF90a190eXBlID09ICJjYXJib24iCisKK2RlZiBpc0NvY29hVGsoKToKKyAgICAiIiIKKyAgICBSZXR1cm5zIFRydWUgaWYgSURMRSBpcyB1c2luZyBhIENvY29hIEFxdWEgVGsuCisgICAgIiIiCisgICAgYXNzZXJ0IF90a190eXBlIGlzIG5vdCBOb25lCisgICAgcmV0dXJuIF90a190eXBlID09ICJjb2NvYSIKKworZGVmIGlzWFF1YXJ0eigpOgorICAgICIiIgorICAgIFJldHVybnMgVHJ1ZSBpZiBJRExFIGlzIHVzaW5nIGFuIE9TIFggWDExIFRrLgorICAgICIiIgorICAgIGFzc2VydCBfdGtfdHlwZSBpcyBub3QgTm9uZQorICAgIHJldHVybiBfdGtfdHlwZSA9PSAieHF1YXJ0eiIKIAogZGVmIHRrVmVyc2lvbldhcm5pbmcocm9vdCk6CiAgICAgIiIiCkBAIC01Myw4ICs3NSw3IEBACiAgICAgICAgIGNhbiBzdGlsbCBjcmFzaCB1bmV4cGVjdGVkbHkuCiAgICAgIiIiCiAKLSAgICBpZiAocnVubmluZ0FzT1NYQXBwKCkgYW5kCi0gICAgICAgICAgICAoJ0FwcEtpdCcgaW4gcm9vdC50ay5jYWxsKCd3aW5mbycsICdzZXJ2ZXInLCAnLicpKSApOgorICAgIGlmIGlzQ29jb2FUaygpOgogICAgICAgICBwYXRjaGxldmVsID0gcm9vdC50ay5jYWxsKCdpbmZvJywgJ3BhdGNobGV2ZWwnKQogICAgICAgICBpZiBwYXRjaGxldmVsIG5vdCBpbiAoJzguNS43JywgJzguNS45Jyk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTg4LDggKzEwOSw4IEBACiAKIGRlZiBvdmVycmlkZVJvb3RNZW51KHJvb3QsIGZsaXN0KToKICAgICAiIiIKLSAgICBSZXBsYWNlIHRoZSBUayByb290IG1lbnUgYnkgc29tZXRoaW5nIHRoYXQncyBtb3JlIGFwcHJvcHJpYXRlIGZvcgotICAgIElETEUuCisgICAgUmVwbGFjZSB0aGUgVGsgcm9vdCBtZW51IGJ5IHNvbWV0aGluZyB0aGF0IGlzIG1vcmUgYXBwcm9wcmlhdGUgZm9yCisgICAgSURMRSB3aXRoIGFuIEFxdWEgVGsuCiAgICAgIiIiCiAgICAgIyBUaGUgbWVudSB0aGF0IGlzIGF0dGFjaGVkIHRvIHRoZSBUayByb290ICgiLiIpIGlzIGFsc28gdXNlZCBieSBBcXVhVGsgZm9yCiAgICAgIyBhbGwgd2luZG93cyB0aGF0IGRvbid0IHNwZWNpZnkgYSBtZW51IG9mIHRoZWlyIG93bi4gVGhlIGRlZmF1bHQgbWVudWJhcgpAQCAtMTAyLDE3ICsxMjMsMjkgQEAKICAgICAjCiAgICAgIyBEdWUgdG8gYSAobWlzLSlmZWF0dXJlIG9mIFRrQXF1YSB0aGUgdXNlciB3aWxsIGFsc28gc2VlIGFuIGVtcHR5IEhlbHAKICAgICAjIG1lbnUuCi0gICAgZnJvbSB0a2ludGVyIGltcG9ydCBNZW51LCBUZXh0LCBUZXh0Ci0gICAgZnJvbSBpZGxlbGliLkVkaXRvcldpbmRvdyBpbXBvcnQgcHJlcHN0ciwgZ2V0X2FjY2VsZXJhdG9yCisgICAgZnJvbSB0a2ludGVyIGltcG9ydCBNZW51CiAgICAgZnJvbSBpZGxlbGliIGltcG9ydCBCaW5kaW5ncwogICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgV2luZG93TGlzdAotICAgIGZyb20gaWRsZWxpYi5NdWx0aUNhbGwgaW1wb3J0IE11bHRpQ2FsbENyZWF0b3IKIAorICAgIGNsb3NlSXRlbSA9IEJpbmRpbmdzLm1lbnVkZWZzWzBdWzFdWy0yXQorCisgICAgIyBSZW1vdmUgdGhlIGxhc3QgMyBpdGVtcyBvZiB0aGUgZmlsZSBtZW51OiBhIHNlcGFyYXRvciwgY2xvc2Ugd2luZG93IGFuZAorICAgICMgcXVpdC4gQ2xvc2Ugd2luZG93IHdpbGwgYmUgcmVpbnNlcnRlZCBqdXN0IGFib3ZlIHRoZSBzYXZlIGl0ZW0sIHdoZXJlCisgICAgIyBpdCBzaG91bGQgYmUgYWNjb3JkaW5nIHRvIHRoZSBISUcuIFF1aXQgaXMgaW4gdGhlIGFwcGxpY2F0aW9uIG1lbnUuCisgICAgZGVsIEJpbmRpbmdzLm1lbnVkZWZzWzBdWzFdWy0zOl0KKyAgICBCaW5kaW5ncy5tZW51ZGVmc1swXVsxXS5pbnNlcnQoNiwgY2xvc2VJdGVtKQorCisgICAgIyBSZW1vdmUgdGhlICdBYm91dCcgZW50cnkgZnJvbSB0aGUgaGVscCBtZW51LCBpdCBpcyBpbiB0aGUgYXBwbGljYXRpb24KKyAgICAjIG1lbnUKKyAgICBkZWwgQmluZGluZ3MubWVudWRlZnNbLTFdWzFdWzA6Ml0KKyAgICAjIFJlbW92ZSB0aGUgJ0NvbmZpZ3VyZSBJZGxlJyBlbnRyeSBmcm9tIHRoZSBvcHRpb25zIG1lbnUsIGl0IGlzIGluIHRoZQorICAgICMgYXBwbGljYXRpb24gbWVudSBhcyAnUHJlZmVyZW5jZXMnCisgICAgZGVsIEJpbmRpbmdzLm1lbnVkZWZzWy0yXVsxXVswXQogICAgIG1lbnViYXIgPSBNZW51KHJvb3QpCiAgICAgcm9vdC5jb25maWd1cmUobWVudT1tZW51YmFyKQogICAgIG1lbnVkaWN0ID0ge30KIAotICAgIG1lbnVkaWN0Wyd3aW5kb3dzJ10gPSBtZW51ID0gTWVudShtZW51YmFyLCBuYW1lPSd3aW5kb3dzJykKKyAgICBtZW51ZGljdFsnd2luZG93cyddID0gbWVudSA9IE1lbnUobWVudWJhciwgbmFtZT0nd2luZG93cycsIHRlYXJvZmY9MCkKICAgICBtZW51YmFyLmFkZF9jYXNjYWRlKGxhYmVsPSdXaW5kb3cnLCBtZW51PW1lbnUsIHVuZGVybGluZT0wKQogCiAgICAgZGVmIHBvc3R3aW5kb3dzbWVudShtZW51PW1lbnUpOgpAQCAtMTI2LDEwICsxNTksMTQgQEAKICAgICBXaW5kb3dMaXN0LnJlZ2lzdGVyX2NhbGxiYWNrKHBvc3R3aW5kb3dzbWVudSkKIAogICAgIGRlZiBhYm91dF9kaWFsb2coZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgSGVscCAnQWJvdXQgSURMRScgZXZlbnQuIgorICAgICAgICAjIFN5bmNocm9uaXplIHdpdGggRWRpdG9yV2luZG93LkVkaXRvcldpbmRvdy5hYm91dF9kaWFsb2cuCiAgICAgICAgIGZyb20gaWRsZWxpYiBpbXBvcnQgYWJvdXREaWFsb2cKICAgICAgICAgYWJvdXREaWFsb2cuQWJvdXREaWFsb2cocm9vdCwgJ0Fib3V0IElETEUnKQogCiAgICAgZGVmIGNvbmZpZ19kaWFsb2coZXZlbnQ9Tm9uZSk6CisgICAgICAgICJIYW5kbGUgT3B0aW9ucyAnQ29uZmlndXJlIElETEUnIGV2ZW50LiIKKyAgICAgICAgIyBTeW5jaHJvbml6ZSB3aXRoIEVkaXRvcldpbmRvdy5FZGl0b3JXaW5kb3cuY29uZmlnX2RpYWxvZy4KICAgICAgICAgZnJvbSBpZGxlbGliIGltcG9ydCBjb25maWdEaWFsb2cKIAogICAgICAgICAjIEVuc3VyZSB0aGF0IHRoZSByb290IG9iamVjdCBoYXMgYW4gaW5zdGFuY2VfZGljdCBhdHRyaWJ1dGUsCkBAIC0xMzcsMTMgKzE3NCwxMyBAQAogICAgICAgICAjIG9uIGFuIEVkaXRvcldpbmRvdyBpbnN0YW5jZSB0aGF0IGlzIHRoZW4gcGFzc2VkIGFzIHRoZSBmaXJzdAogICAgICAgICAjIGFyZ3VtZW50IHRvIENvbmZpZ0RpYWxvZykKICAgICAgICAgcm9vdC5pbnN0YW5jZV9kaWN0ID0gZmxpc3QuaW52ZXJzZWRpY3QKLSAgICAgICAgcm9vdC5pbnN0YW5jZV9kaWN0ID0gZmxpc3QuaW52ZXJzZWRpY3QKICAgICAgICAgY29uZmlnRGlhbG9nLkNvbmZpZ0RpYWxvZyhyb290LCAnU2V0dGluZ3MnKQogCiAgICAgZGVmIGhlbHBfZGlhbG9nKGV2ZW50PU5vbmUpOgotICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IHRleHRWaWV3Ci0gICAgICAgIGZuID0gcGF0aC5qb2luKHBhdGguYWJzcGF0aChwYXRoLmRpcm5hbWUoX19maWxlX18pKSwgJ2hlbHAudHh0JykKLSAgICAgICAgdGV4dFZpZXcudmlld19maWxlKHJvb3QsICdIZWxwJywgZm4pCisgICAgICAgICJIYW5kbGUgSGVscCAnSURMRSBIZWxwJyBldmVudC4iCisgICAgICAgICMgU3luY2hyb25pemUgd2l0aCBFZGl0b3JXaW5kb3cuRWRpdG9yV2luZG93LmhlbHBfZGlhbG9nLgorICAgICAgICBmcm9tIGlkbGVsaWIgaW1wb3J0IGhlbHAKKyAgICAgICAgaGVscC5zaG93X2lkbGVoZWxwKHJvb3QpCiAKICAgICByb290LmJpbmQoJzw8YWJvdXQtaWRsZT4+JywgYWJvdXRfZGlhbG9nKQogICAgIHJvb3QuYmluZCgnPDxvcGVuLWNvbmZpZy1kaWFsb2c+PicsIGNvbmZpZ19kaWFsb2cpCkBAIC0xNTYsOSArMTkzLDEwIEBACiAgICAgICAgICMgcmlnaHQgdGhpbmcgZm9yIG5vdy4KICAgICAgICAgcm9vdC5jcmVhdGVjb21tYW5kKCdleGl0JywgZmxpc3QuY2xvc2VfYWxsX2NhbGxiYWNrKQogCi0gICAgaWYgaXNDYXJib25BcXVhVGsocm9vdCk6CisgICAgaWYgaXNDYXJib25UaygpOgogICAgICAgICAjIGZvciBDYXJib24gQXF1YVRrLCByZXBsYWNlIHRoZSBkZWZhdWx0IFRrIGFwcGxlIG1lbnUKLSAgICAgICAgbWVudWRpY3RbJ2FwcGxpY2F0aW9uJ10gPSBtZW51ID0gTWVudShtZW51YmFyLCBuYW1lPSdhcHBsZScpCisgICAgICAgIG1lbnVkaWN0WydhcHBsaWNhdGlvbiddID0gbWVudSA9IE1lbnUobWVudWJhciwgbmFtZT0nYXBwbGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlYXJvZmY9MCkKICAgICAgICAgbWVudWJhci5hZGRfY2FzY2FkZShsYWJlbD0nSURMRScsIG1lbnU9bWVudSkKICAgICAgICAgQmluZGluZ3MubWVudWRlZnMuaW5zZXJ0KDAsCiAgICAgICAgICAgICAoJ2FwcGxpY2F0aW9uJywgWwpAQCAtMTcxLDggKzIwOSw3IEBACiAgICAgICAgICAgICBCaW5kaW5ncy5tZW51ZGVmc1swXVsxXS5hcHBlbmQoCiAgICAgICAgICAgICAgICAgICAgICgnX1ByZWZlcmVuY2VzLi4uLicsICc8PG9wZW4tY29uZmlnLWRpYWxvZz4+JyksCiAgICAgICAgICAgICAgICAgKQotICAgIGVsc2U6Ci0gICAgICAgICMgYXNzdW1lIENvY29hIEFxdWFUaworICAgIGlmIGlzQ29jb2FUaygpOgogICAgICAgICAjIHJlcGxhY2UgZGVmYXVsdCBBYm91dCBkaWFsb2cgd2l0aCBBYm91dCBJRExFIG9uZQogICAgICAgICByb290LmNyZWF0ZWNvbW1hbmQoJ3RrQWJvdXREaWFsb2cnLCBhYm91dF9kaWFsb2cpCiAgICAgICAgICMgcmVwbGFjZSBkZWZhdWx0ICJIZWxwIiBpdGVtIGluIEhlbHAgbWVudQpAQCAtMTgyLDEwICsyMTksMjIgQEAKIAogZGVmIHNldHVwQXBwKHJvb3QsIGZsaXN0KToKICAgICAiIiIKLSAgICBQZXJmb3JtIHNldHVwIGZvciB0aGUgT1NYIGFwcGxpY2F0aW9uIGJ1bmRsZS4KLSAgICAiIiIKLSAgICBpZiBub3QgcnVubmluZ0FzT1NYQXBwKCk6IHJldHVybgorICAgIFBlcmZvcm0gaW5pdGlhbCBPUyBYIGN1c3RvbWl6YXRpb25zIGlmIG5lZWRlZC4KKyAgICBDYWxsZWQgZnJvbSBQeVNoZWxsLm1haW4oKSBhZnRlciBpbml0aWFsIGNhbGxzIHRvIFRrKCkKIAotICAgIGhpZGVUa0NvbnNvbGUocm9vdCkKLSAgICBvdmVycmlkZVJvb3RNZW51KHJvb3QsIGZsaXN0KQotICAgIGFkZE9wZW5FdmVudFN1cHBvcnQocm9vdCwgZmxpc3QpCisgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0aHJlZSBtYWpvciB2ZXJzaW9ucyBvZiBUayBpbiB1c2Ugb24gT1MgWDoKKyAgICAgICAgMS4gQXF1YSBDb2NvYSBUayAobmF0aXZlIGRlZmF1bHQgc2luY2UgT1MgWCAxMC42KQorICAgICAgICAyLiBBcXVhIENhcmJvbiBUayAob3JpZ2luYWwgbmF0aXZlLCAzMi1iaXQgb25seSwgZGVwcmVjYXRlZCkKKyAgICAgICAgMy4gWDExIChzdXBwb3J0ZWQgYnkgc29tZSB0aGlyZC1wYXJ0eSBkaXN0cmlidXRvcnMsIGRlcHJlY2F0ZWQpCisgICAgVGhlcmUgYXJlIHZhcmlvdXMgZGlmZmVyZW5jZXMgYW1vbmcgdGhlIHRocmVlIHRoYXQgYWZmZWN0IElETEUKKyAgICBiZWhhdmlvciwgcHJpbWFyaWx5IHdpdGggbWVudXMsIG1vdXNlIGtleSBldmVudHMsIGFuZCBhY2NlbGVyYXRvcnMuCisgICAgU29tZSBvbmUtdGltZSBjdXN0b21pemF0aW9ucyBhcmUgcGVyZm9ybWVkIGhlcmUuCisgICAgT3RoZXJzIGFyZSBkeW5hbWljYWxseSB0ZXN0ZWQgdGhyb3VnaG91dCBpZGxlbGliIGJ5IGNhbGxzIHRvIHRoZQorICAgIGlzQXF1YVRrKCksIGlzQ2FyYm9uVGsoKSwgaXNDb2NvYVRrKCksIGlzWFF1YXJ0eigpIGZ1bmN0aW9ucyB3aGljaAorICAgIGFyZSBpbml0aWFsaXplZCBoZXJlIGFzIHdlbGwuCisgICAgIiIiCisgICAgX2luaXRpYWxpemVUa1ZhcmlhbnRUZXN0cyhyb290KQorICAgIGlmIGlzQXF1YVRrKCk6CisgICAgICAgIGhpZGVUa0NvbnNvbGUocm9vdCkKKyAgICAgICAgb3ZlcnJpZGVSb290TWVudShyb290LCBmbGlzdCkKKyAgICAgICAgYWRkT3BlbkV2ZW50U3VwcG9ydChyb290LCBmbGlzdCkKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3JwYy5weSBiL0xpYi9pZGxlbGliL3JwYy5weQppbmRleCBkZGNlNmU5Li5hYTMzMDQxIDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi9ycGMucHkKKysrIGIvTGliL2lkbGVsaWIvcnBjLnB5CkBAIC0yOSw2ICsyOSw3IEBACiAKIGltcG9ydCBzeXMKIGltcG9ydCBvcworaW1wb3J0IGlvCiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgc29ja2V0c2VydmVyCkBAIC01MywxNiArNTQsMTUgQEAKICAgICBtcyA9IG1hcnNoYWwuZHVtcHMoY28pCiAgICAgcmV0dXJuIHVucGlja2xlX2NvZGUsIChtcywpCiAKLSMgWFhYIEtCSyAyNEF1ZzAyIGZ1bmN0aW9uIHBpY2tsaW5nIGNhcGFiaWxpdHkgbm90IHVzZWQgaW4gSWRsZQotIyAgZGVmIHVucGlja2xlX2Z1bmN0aW9uKG1zKToKLSMgICAgICByZXR1cm4gbXMKK2RlZiBkdW1wcyhvYmosIHByb3RvY29sPU5vbmUpOgorICAgIGYgPSBpby5CeXRlc0lPKCkKKyAgICBwID0gQ29kZVBpY2tsZXIoZiwgcHJvdG9jb2wpCisgICAgcC5kdW1wKG9iaikKKyAgICByZXR1cm4gZi5nZXR2YWx1ZSgpCiAKLSMgIGRlZiBwaWNrbGVfZnVuY3Rpb24oZm4pOgotIyAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZuLCB0eXBlLkZ1bmN0aW9uVHlwZSkKLSMgICAgICByZXR1cm4gcmVwcihmbikKLQotY29weXJlZy5waWNrbGUodHlwZXMuQ29kZVR5cGUsIHBpY2tsZV9jb2RlLCB1bnBpY2tsZV9jb2RlKQotIyBjb3B5cmVnLnBpY2tsZSh0eXBlcy5GdW5jdGlvblR5cGUsIHBpY2tsZV9mdW5jdGlvbiwgdW5waWNrbGVfZnVuY3Rpb24pCitjbGFzcyBDb2RlUGlja2xlcihwaWNrbGUuUGlja2xlcik6CisgICAgZGlzcGF0Y2hfdGFibGUgPSB7dHlwZXMuQ29kZVR5cGU6IHBpY2tsZV9jb2RlfQorICAgIGRpc3BhdGNoX3RhYmxlLnVwZGF0ZShjb3B5cmVnLmRpc3BhdGNoX3RhYmxlKQogCiBCVUZTSVpFID0gOCoxMDI0CiBMT0NBTEhPU1QgPSAnMTI3LjAuMC4xJwpAQCAtMTk5LDcgKzE5OSw3IEBACiAgICAgICAgICAgICByYWlzZQogICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXg6CiAgICAgICAgICAgICByZXR1cm4gKCJDQUxMRVhDIiwgZXgpCkBAIC0zMjksNyArMzI5LDcgQEAKICAgICBkZWYgcHV0bWVzc2FnZShzZWxmLCBtZXNzYWdlKToKICAgICAgICAgc2VsZi5kZWJ1ZygicHV0bWVzc2FnZTolZDoiICUgbWVzc2FnZVswXSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhtZXNzYWdlKQorICAgICAgICAgICAgcyA9IGR1bXBzKG1lc3NhZ2UpCiAgICAgICAgIGV4Y2VwdCBwaWNrbGUuUGlja2xpbmdFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJDYW5ub3QgcGlja2xlOiIsIHJlcHIobWVzc2FnZSksIGZpbGU9c3lzLl9fc3RkZXJyX18pCiAgICAgICAgICAgICByYWlzZQpAQCAtMzQwLDEwICszNDAsNyBAQAogICAgICAgICAgICAgICAgIG4gPSBzZWxmLnNvY2suc2VuZChzWzpCVUZTSVpFXSkKICAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigic29ja2V0IG5vIGxvbmdlciBleGlzdHMiKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzID0gc1tuOl0KKyAgICAgICAgICAgIHMgPSBzW246XQogCiAgICAgYnVmZiA9IGInJwogICAgIGJ1Zm5lZWQgPSA0CkBAIC0zNTcsNyArMzU0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHMgPSBzZWxmLnNvY2sucmVjdihCVUZTSVpFKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCiAgICAgICAgICAgICBpZiBsZW4ocykgPT0gMDoKICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgpAQCAtNTM3LDcgKzUzNCw3IEBACiAgICAgICAgICAgICBTb2NrZXRJTy5fX2luaXRfXyhzZWxmLCB3b3JraW5nX3NvY2spCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBwcmludCgiKiogSW52YWxpZCBob3N0OiAiLCBhZGRyZXNzLCBmaWxlPXN5cy5fX3N0ZGVycl9fKQotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCiAKICAgICBkZWYgZ2V0X3JlbW90ZV9wcm94eShzZWxmLCBvaWQpOgogICAgICAgICByZXR1cm4gUlBDUHJveHkoc2VsZiwgb2lkKQpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvcnVuLnB5IGIvTGliL2lkbGVsaWIvcnVuLnB5CmluZGV4IGMxODU5YjYuLjU5NWU3YmMgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3J1bi5weQorKysgYi9MaWIvaWRsZWxpYi9ydW4ucHkKQEAgLTEsOCArMSw2IEBACiBpbXBvcnQgc3lzCi1pbXBvcnQgaW8KIGltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCB0aW1lCi1pbXBvcnQgc29ja2V0CiBpbXBvcnQgdHJhY2ViYWNrCiBpbXBvcnQgX3RocmVhZCBhcyB0aHJlYWQKIGltcG9ydCB0aHJlYWRpbmcKQEAgLTE1MCw4ICsxNDgsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBNeVJQQ1NlcnZlcihhZGRyZXNzLCBNeUhhbmRsZXIpCiAgICAgICAgICAgICBicmVhawotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKLSAgICAgICAgICAgIHByaW50KCJJRExFIFN1YnByb2Nlc3M6IHNvY2tldCBlcnJvcjogIiArIGVyci5hcmdzWzFdICsKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgcHJpbnQoIklETEUgU3VicHJvY2VzczogT1NFcnJvcjogIiArIGVyci5hcmdzWzFdICsKICAgICAgICAgICAgICAgICAgICIsIHJldHJ5aW5nLi4uLiIsIGZpbGU9c3lzLl9fc3RkZXJyX18pCiAgICAgICAgICAgICBzb2NrZXRfZXJyb3IgPSBlcnIKICAgICBlbHNlOgpAQCAtMTc2LDcgKzE3NCw3IEBACiAgICAgICAgIHRrTWVzc2FnZUJveC5zaG93ZXJyb3IoIklETEUgU3VicHJvY2VzcyBFcnJvciIsIG1zZywgcGFyZW50PXJvb3QpCiAgICAgZWxzZToKICAgICAgICAgdGtNZXNzYWdlQm94LnNob3dlcnJvcigiSURMRSBTdWJwcm9jZXNzIEVycm9yIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ja2V0IEVycm9yOiAlcyIgJSBlcnIuYXJnc1sxXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU29ja2V0IEVycm9yOiAlcyIgJSBlcnIuYXJnc1sxXSwgcGFyZW50PXJvb3QpCiAgICAgcm9vdC5kZXN0cm95KCkKIAogZGVmIHByaW50X2V4Y2VwdGlvbigpOgpkaWZmIC0tZ2l0IGEvTGliL2lkbGVsaWIvdGFiYmVkcGFnZXMucHkgYi9MaWIvaWRsZWxpYi90YWJiZWRwYWdlcy5weQppbmRleCAyNTU3NzMyLi45NjVmOWY4IDEwMDY0NAotLS0gYS9MaWIvaWRsZWxpYi90YWJiZWRwYWdlcy5weQorKysgYi9MaWIvaWRsZWxpYi90YWJiZWRwYWdlcy5weQpAQCAtNDY3LDkgKzQ2NywxMiBAQAogCiAgICAgICAgIHNlbGYuX3RhYl9zZXQuc2V0X3NlbGVjdGVkX3RhYihwYWdlX25hbWUpCiAKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CitkZWYgX3RhYmJlZF9wYWdlcyhwYXJlbnQpOgogICAgICMgdGVzdCBkaWFsb2cKICAgICByb290PVRrKCkKKyAgICB3aWR0aCwgaGVpZ2h0LCB4LCB5ID0gbGlzdChtYXAoaW50LCByZS5zcGxpdCgnW3grXScsIHBhcmVudC5nZW9tZXRyeSgpKSkpCisgICAgcm9vdC5nZW9tZXRyeSgiKyVkKyVkIiUoeCwgeSArIDE3NSkpCisgICAgcm9vdC50aXRsZSgiVGVzdCB0YWJiZWQgcGFnZXMiKQogICAgIHRhYlBhZ2U9VGFiYmVkUGFnZVNldChyb290LCBwYWdlX25hbWVzPVsnRm9vYmFyJywnQmF6J10sIG5fcm93cz0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICBleHBhbmRfdGFicz1GYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgKQpAQCAtNDg4LDMgKzQ5MSw4IEBACiAgICAgbGFiZWxQZ05hbWUucGFjayhwYWR4PTUpCiAgICAgZW50cnlQZ05hbWUucGFjayhwYWR4PTUpCiAgICAgcm9vdC5tYWlubG9vcCgpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBmcm9tIGlkbGVsaWIuaWRsZV90ZXN0Lmh0ZXN0IGltcG9ydCBydW4KKyAgICBydW4oX3RhYmJlZF9wYWdlcykKZGlmZiAtLWdpdCBhL0xpYi9pZGxlbGliL3Rlc3Rjb2RlLnB5IGIvTGliL2lkbGVsaWIvdGVzdGNvZGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1ZWFhNTYuLjAwMDAwMDAKLS0tIGEvTGliL2lkbGVsaWIvdGVzdGNvZGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMSArMCwwIEBACi1pbXBvcnQgc3RyaW5nCi0KLWRlZiBmKCk6Ci0gICAgYSA9IDAKLSAgICBiID0gMQotICAgIGMgPSAyCi0gICAgZCA9IDMKLSAgICBlID0gNAotICAgIGcoKQotCi1kZWYgZygpOgotICAgIGgoKQotCi1kZWYgaCgpOgotICAgIGkoKQotCi1kZWYgaSgpOgotICAgIGooKQotCi1kZWYgaigpOgotICAgIGsoKQotCi1kZWYgaygpOgotICAgIGwoKQotCi1sID0gbGFtYmRhOiB0ZXN0KCkKLQotZGVmIHRlc3QoKToKLSAgICBzdHJpbmcuY2Fwd29yZHMoMSkKLQotZigpCmRpZmYgLS1naXQgYS9MaWIvaWRsZWxpYi90ZXh0Vmlldy5weSBiL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CmluZGV4IGRkNTA1NDQuLjAxYjJkOGYgMTAwNjQ0Ci0tLSBhL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CisrKyBiL0xpYi9pZGxlbGliL3RleHRWaWV3LnB5CkBAIC05LDE1ICs5LDIxIEBACiAgICAgIiIiQSBzaW1wbGUgdGV4dCB2aWV3ZXIgZGlhbG9nIGZvciBJRExFCiAKICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFyZW50LCB0aXRsZSwgdGV4dCwgbW9kYWw9VHJ1ZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudCwgdGl0bGUsIHRleHQsIG1vZGFsPVRydWUsIF9odGVzdD1GYWxzZSk6CiAgICAgICAgICIiIlNob3cgdGhlIGdpdmVuIHRleHQgaW4gYSBzY3JvbGxhYmxlIHdpbmRvdyB3aXRoIGEgJ2Nsb3NlJyBidXR0b24KIAorICAgICAgICBJZiBtb2RhbCBvcHRpb24gc2V0IHRvIEZhbHNlLCB1c2VyIGNhbiBpbnRlcmFjdCB3aXRoIG90aGVyIHdpbmRvd3MsCisgICAgICAgIG90aGVyd2lzZSB0aGV5IHdpbGwgYmUgdW5hYmxlIHRvIGludGVyYWN0IHdpdGggb3RoZXIgd2luZG93cyB1bnRpbAorICAgICAgICB0aGUgdGV4dHZpZXcgd2luZG93IGlzIGNsb3NlZC4KKworICAgICAgICBfaHRlc3QgLSBib29sOyBjaGFuZ2UgYm94IGxvY2F0aW9uIHdoZW4gcnVubmluZyBodGVzdC4KICAgICAgICAgIiIiCiAgICAgICAgIFRvcGxldmVsLl9faW5pdF9fKHNlbGYsIHBhcmVudCkKICAgICAgICAgc2VsZi5jb25maWd1cmUoYm9yZGVyd2lkdGg9NSkKLSAgICAgICAgc2VsZi5nZW9tZXRyeSgiPSVkeCVkKyVkKyVkIiAlICg2MjUsIDUwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQud2luZm9fcm9vdHgoKSArIDEwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsgMTApKQorICAgICAgICAjIHBsYWNlIGRpYWxvZyBiZWxvdyBwYXJlbnQgaWYgcnVubmluZyBodGVzdAorICAgICAgICBzZWxmLmdlb21ldHJ5KCI9JWR4JWQrJWQrJWQiICUgKDc1MCwgNTAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LndpbmZvX3Jvb3R4KCkgKyAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC53aW5mb19yb290eSgpICsgKDEwIGlmIG5vdCBfaHRlc3QgZWxzZSAxMDApKSkKICAgICAgICAgI2VsZ3VhdmFzIC0gY29uZmlnIHBsYWNlaG9sZGVycyB0aWwgY29uZmlnIHN0dWZmIGNvbXBsZXRlZAogICAgICAgICBzZWxmLmJnID0gJyNmZmZmZmYnCiAgICAgICAgIHNlbGYuZmcgPSAnIzAwMDAwMCcKQEAgLTY2LDMyICs3MiwxNSBAQAogICAgIHRyeToKICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmaWxlOgogICAgICAgICAgICAgY29udGVudHMgPSBmaWxlLnJlYWQoKQotICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICBpbXBvcnQgdGtpbnRlci5tZXNzYWdlYm94IGFzIHRrTWVzc2FnZUJveAorICAgIGV4Y2VwdCBJT0Vycm9yOgogICAgICAgICB0a01lc3NhZ2VCb3guc2hvd2Vycm9yKHRpdGxlPSdGaWxlIExvYWQgRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9J1VuYWJsZSB0byBsb2FkIGZpbGUgJXIgLicgJSBmaWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ9cGFyZW50KQogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiB2aWV3X3RleHQocGFyZW50LCB0aXRsZSwgY29udGVudHMsIG1vZGFsKQogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgI3Rlc3QgdGhlIGRpYWxvZwotICAgIHJvb3Q9VGsoKQotICAgIHJvb3QudGl0bGUoJ3RleHRWaWV3IHRlc3QnKQotICAgIGZpbGVuYW1lID0gJy4vdGV4dFZpZXcucHknCi0gICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGY6Ci0gICAgICAgIHRleHQgPSBmLnJlYWQoKQotICAgIGJ0bjEgPSBCdXR0b24ocm9vdCwgdGV4dD0ndmlld190ZXh0JywKLSAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhOnZpZXdfdGV4dChyb290LCAndmlld190ZXh0JywgdGV4dCkpCi0gICAgYnRuMS5wYWNrKHNpZGU9TEVGVCkKLSAgICBidG4yID0gQnV0dG9uKHJvb3QsIHRleHQ9J3ZpZXdfZmlsZScsCi0gICAgICAgICAgICAgICAgICBjb21tYW5kPWxhbWJkYTp2aWV3X2ZpbGUocm9vdCwgJ3ZpZXdfZmlsZScsIGZpbGVuYW1lKSkKLSAgICBidG4yLnBhY2soc2lkZT1MRUZUKQotICAgIGJ0bjMgPSBCdXR0b24ocm9vdCwgdGV4dD0nbm9ubW9kYWwgdmlld190ZXh0JywKLSAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9bGFtYmRhOnZpZXdfdGV4dChyb290LCAnbm9ubW9kYWwgdmlld190ZXh0JywgdGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RhbD1GYWxzZSkpCi0gICAgYnRuMy5wYWNrKHNpZGU9TEVGVCkKLSAgICBjbG9zZSA9IEJ1dHRvbihyb290LCB0ZXh0PSdDbG9zZScsIGNvbW1hbmQ9cm9vdC5kZXN0cm95KQotICAgIGNsb3NlLnBhY2soc2lkZT1SSUdIVCkKLSAgICByb290Lm1haW5sb29wKCkKKyAgICBpbXBvcnQgdW5pdHRlc3QKKyAgICB1bml0dGVzdC5tYWluKCdpZGxlbGliLmlkbGVfdGVzdC50ZXN0X3RleHR2aWV3JywgdmVyYm9zaXR5PTIsIGV4aXQ9RmFsc2UpCisgICAgZnJvbSBpZGxlbGliLmlkbGVfdGVzdC5odGVzdCBpbXBvcnQgcnVuCisgICAgcnVuKFRleHRWaWV3ZXIpCmRpZmYgLS1naXQgYS9MaWIvaW1hcGxpYi5weSBiL0xpYi9pbWFwbGliLnB5CmluZGV4IGFkNWY0ZTkuLmViMDVkY2IgMTAwNjQ0Ci0tLSBhL0xpYi9pbWFwbGliLnB5CisrKyBiL0xpYi9pbWFwbGliLnB5CkBAIC00NSwxMSArNDUsMTIgQEAKIAogIyBNYXhpbWFsIGxpbmUgbGVuZ3RoIHdoZW4gY2FsbGluZyByZWFkbGluZSgpLiBUaGlzIGlzIHRvIHByZXZlbnQKICMgcmVhZGluZyBhcmJpdHJhcnkgbGVuZ3RoIGxpbmVzLiBSRkMgMzUwMSBhbmQgMjA2MCAoSU1BUCA0cmV2MSkKLSMgZG9uJ3Qgc3BlY2lmeSBhIGxpbmUgbGVuZ3RoLiBSRkMgMjY4MyBob3dldmVyIHN1Z2dlc3RzIGxpbWl0aW5nIGNsaWVudAotIyBjb21tYW5kIGxpbmVzIHRvIDEwMDAgb2N0ZXRzIGFuZCBzZXJ2ZXIgY29tbWFuZCBsaW5lcyB0byA4MDAwIG9jdGV0cy4KLSMgV2UgaGF2ZSBzZWxlY3RlZCAxMDAwMCBmb3Igc29tZSBleHRyYSBtYXJnaW4gYW5kIHNpbmNlIHRoYXQgaXMgc3VwcG9zZWRseQotIyBhbHNvIHdoYXQgVVcgYW5kIFBhbmRhIElNQVAgZG9lcy4KLV9NQVhMSU5FID0gMTAwMDAKKyMgZG9uJ3Qgc3BlY2lmeSBhIGxpbmUgbGVuZ3RoLiBSRkMgMjY4MyBzdWdnZXN0cyBsaW1pdGluZyBjbGllbnQKKyMgY29tbWFuZCBsaW5lcyB0byAxMDAwIG9jdGV0cyBhbmQgdGhhdCBzZXJ2ZXJzIHNob3VsZCBiZSBwcmVwYXJlZAorIyB0byBhY2NlcHQgY29tbWFuZCBsaW5lcyB1cCB0byA4MDAwIG9jdGV0cywgc28gd2UgdXNlZCB0byB1c2UgMTBLIGhlcmUuCisjIEluIHRoZSBtb2Rlcm4gd29ybGQgKGVnOiBnbWFpbCkgdGhlIHJlc3BvbnNlIHRvLCBmb3IgZXhhbXBsZSwgYQorIyBzZWFyY2ggY29tbWFuZCBjYW4gYmUgcXVpdGUgbGFyZ2UsIHNvIHdlIG5vdyB1c2UgMU0uCitfTUFYTElORSA9IDEwMDAwMDAKIAogCiAjICAgICAgIENvbW1hbmRzCkBAIC0xODUsNyArMTg2LDcgQEAKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNodXRkb3duKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICByYWlzZQogCkBAIC0yODEsNyArMjgyLDcgQEAKICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duKHNvY2tldC5TSFVUX1JEV1IpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgVGhlIHNlcnZlciBtaWdodCBhbHJlYWR5IGhhdmUgY2xvc2VkIHRoZSBjb25uZWN0aW9uCiAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgogICAgICAgICAgICAgICAgIHJhaXNlCkBAIC01NTQsNyArNTU1LDcgQEAKICAgICAgICAgaW1wb3J0IGhtYWMKICAgICAgICAgcHdkID0gKHNlbGYucGFzc3dvcmQuZW5jb2RlKCdBU0NJSScpIGlmIGlzaW5zdGFuY2Uoc2VsZi5wYXNzd29yZCwgc3RyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBzZWxmLnBhc3N3b3JkKQotICAgICAgICByZXR1cm4gc2VsZi51c2VyICsgIiAiICsgaG1hYy5ITUFDKHB3ZCwgY2hhbGxlbmdlKS5oZXhkaWdlc3QoKQorICAgICAgICByZXR1cm4gc2VsZi51c2VyICsgIiAiICsgaG1hYy5ITUFDKHB3ZCwgY2hhbGxlbmdlLCAnbWQ1JykuaGV4ZGlnZXN0KCkKIAogCiAgICAgZGVmIGxvZ291dChzZWxmKToKQEAgLTc0MiwxMiArNzQzLDExIEBACiAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdUTFMgbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXInKQogICAgICAgICAjIEdlbmVyYXRlIGEgZGVmYXVsdCBTU0wgY29udGV4dCBpZiBub25lIHdhcyBwYXNzZWQuCiAgICAgICAgIGlmIHNzbF9jb250ZXh0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgICAgICAjIFNTTHYyIGNvbnNpZGVyZWQgaGFybWZ1bC4KLSAgICAgICAgICAgIHNzbF9jb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgICAgICBzc2xfY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKICAgICAgICAgdHlwLCBkYXQgPSBzZWxmLl9zaW1wbGVfY29tbWFuZChuYW1lKQogICAgICAgICBpZiB0eXAgPT0gJ09LJzoKLSAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbF9jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaykKKyAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbF9jb250ZXh0LndyYXBfc29ja2V0KHNlbGYuc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLmhvc3QpCiAgICAgICAgICAgICBzZWxmLmZpbGUgPSBzZWxmLnNvY2subWFrZWZpbGUoJ3JiJykKICAgICAgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IFRydWUKICAgICAgICAgICAgIHNlbGYuX2dldF9jYXBhYmlsaXRpZXMoKQpAQCAtOTE1LDcgKzkxNSw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZW5kKGRhdGEgKyBDUkxGKQotICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgT1NFcnJvcikgYXMgdmFsOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB2YWw6CiAgICAgICAgICAgICByYWlzZSBzZWxmLmFib3J0KCdzb2NrZXQgZXJyb3I6ICVzJyAlIHZhbCkKIAogICAgICAgICBpZiBsaXRlcmFsIGlzIE5vbmU6CkBAIC05NDAsNyArOTQwLDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLnNlbmQobGl0ZXJhbCkKICAgICAgICAgICAgICAgICBzZWxmLnNlbmQoQ1JMRikKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBPU0Vycm9yKSBhcyB2YWw6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB2YWw6CiAgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiAlcycgJSB2YWwpCiAKICAgICAgICAgICAgIGlmIG5vdCBsaXRlcmF0b3I6CkBAIC0xMDkwLDcgKzEwOTAsNyBAQAogCiAgICAgICAgICMgUHJvdG9jb2wgbWFuZGF0ZXMgYWxsIGxpbmVzIHRlcm1pbmF0ZWQgYnkgQ1JMRgogICAgICAgICBpZiBub3QgbGluZS5lbmRzd2l0aChiJ1xyXG4nKToKLSAgICAgICAgICAgIHJhaXNlIHNlbGYuYWJvcnQoJ3NvY2tldCBlcnJvcjogdW50ZXJtaW5hdGVkIGxpbmUnKQorICAgICAgICAgICAgcmFpc2Ugc2VsZi5hYm9ydCgnc29ja2V0IGVycm9yOiB1bnRlcm1pbmF0ZWQgbGluZTogJXInICUgbGluZSkKIAogICAgICAgICBsaW5lID0gbGluZVs6LTJdCiAgICAgICAgIGlmIF9fZGVidWdfXzoKQEAgLTEyMTUsMTUgKzEyMTUsMTYgQEAKIAogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICBpZiBzc2xfY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoY2VydGZpbGU9Y2VydGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCiAgICAgICAgICAgICBzZWxmLnNzbF9jb250ZXh0ID0gc3NsX2NvbnRleHQKICAgICAgICAgICAgIElNQVA0Ll9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQpCiAKICAgICAgICAgZGVmIF9jcmVhdGVfc29ja2V0KHNlbGYpOgogICAgICAgICAgICAgc29jayA9IElNQVA0Ll9jcmVhdGVfc29ja2V0KHNlbGYpCi0gICAgICAgICAgICBpZiBzZWxmLnNzbF9jb250ZXh0OgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNzbF9jb250ZXh0LndyYXBfc29ja2V0KHNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBzc2wud3JhcF9zb2NrZXQoc29jaywgc2VsZi5rZXlmaWxlLCBzZWxmLmNlcnRmaWxlKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3NsX2NvbnRleHQud3JhcF9zb2NrZXQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLmhvc3QpCiAKICAgICAgICAgZGVmIG9wZW4oc2VsZiwgaG9zdD0nJywgcG9ydD1JTUFQNF9TU0xfUE9SVCk6CiAgICAgICAgICAgICAiIiJTZXR1cCBjb25uZWN0aW9uIHRvIHJlbW90ZSBzZXJ2ZXIgb24gImhvc3Q6cG9ydCIuCkBAIC0xMzA1LDcgKzEzMDYsNyBAQAogICAgIGRlZiBwcm9jZXNzKHNlbGYsIGRhdGEpOgogICAgICAgICByZXQgPSBzZWxmLm1lY2goc2VsZi5kZWNvZGUoZGF0YSkpCiAgICAgICAgIGlmIHJldCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuICcqJyAgICAgICMgQWJvcnQgY29udmVyc2F0aW9uCisgICAgICAgICAgICByZXR1cm4gYicqJyAgICAgIyBBYm9ydCBjb252ZXJzYXRpb24KICAgICAgICAgcmV0dXJuIHNlbGYuZW5jb2RlKHJldCkKIAogICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wKToKZGlmZiAtLWdpdCBhL0xpYi9pbWdoZHIucHkgYi9MaWIvaW1naGRyLnB5CmluZGV4IGJkZDQ3ZWUuLmFkZDJlYTggMTAwNjQ0Ci0tLSBhL0xpYi9pbWdoZHIucHkKKysrIGIvTGliL2ltZ2hkci5weQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBwcmludCh3aGF0KGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcHJpbnQoJyoqKiBub3QgZm91bmQgKioqJykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi9pbXAucHkgYi9MaWIvaW1wLnB5CmluZGV4IDQwODgzODMuLmM5MjJlOTIgMTAwNjQ0Ci0tLSBhL0xpYi9pbXAucHkKKysrIGIvTGliL2ltcC5weQpAQCAtMTYsMTggKzE2LDIwIEBACiAgICAgIyBQbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQgZHluYW1pYyBsb2FkaW5nLgogICAgIGxvYWRfZHluYW1pYyA9IE5vbmUKIAotIyBEaXJlY3RseSBleHBvc2VkIGJ5IHRoaXMgbW9kdWxlCi1mcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBuZXdfbW9kdWxlCi1mcm9tIGltcG9ydGxpYi5fYm9vdHN0cmFwIGltcG9ydCBjYWNoZV9mcm9tX3NvdXJjZSwgc291cmNlX2Zyb21fY2FjaGUKK2Zyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IFNvdXJjZWxlc3NGaWxlTG9hZGVyLCBfRVJSX01TRywgX1NwZWNNZXRob2RzCiAKLQotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKIGZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2Zyb20gaW1wb3J0bGliIGltcG9ydCB1dGlsCitpbXBvcnQgaW1wb3J0bGliCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0b2tlbml6ZQoraW1wb3J0IHR5cGVzCiBpbXBvcnQgd2FybmluZ3MKIAord2FybmluZ3Mud2FybigidGhlIGltcCBtb2R1bGUgaXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgaW1wb3J0bGliOyAiCisgICAgICAgICAgICAgICJzZWUgdGhlIG1vZHVsZSdzIGRvY3VtZW50YXRpb24gZm9yIGFsdGVybmF0aXZlIHVzZXMiLAorICAgICAgICAgICAgICBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQogCiAjIERFUFJFQ0FURUQKIFNFQVJDSF9FUlJPUiA9IDAKQEAgLTQyLDkgKzQ0LDIzIEBACiBJTVBfSE9PSyA9IDkKIAogCitkZWYgbmV3X21vZHVsZShuYW1lKToKKyAgICAiIiIqKkRFUFJFQ0FURUQqKgorCisgICAgQ3JlYXRlIGEgbmV3IG1vZHVsZS4KKworICAgIFRoZSBtb2R1bGUgaXMgbm90IGVudGVyZWQgaW50byBzeXMubW9kdWxlcy4KKworICAgICIiIgorICAgIHJldHVybiB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisKKwogZGVmIGdldF9tYWdpYygpOgotICAgICIiIlJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuIiIiCi0gICAgcmV0dXJuIF9ib290c3RyYXAuX01BR0lDX0JZVEVTCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIFJldHVybiB0aGUgbWFnaWMgbnVtYmVyIGZvciAucHljIG9yIC5weW8gZmlsZXMuCisgICAgIiIiCisgICAgcmV0dXJuIHV0aWwuTUFHSUNfTlVNQkVSCiAKIAogZGVmIGdldF90YWcoKToKQEAgLTUyLDEyICs2OCw0MiBAQAogICAgIHJldHVybiBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnCiAKIAorZGVmIGNhY2hlX2Zyb21fc291cmNlKHBhdGgsIGRlYnVnX292ZXJyaWRlPU5vbmUpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBHaXZlbiB0aGUgcGF0aCB0byBhIC5weSBmaWxlLCByZXR1cm4gdGhlIHBhdGggdG8gaXRzIC5weWMvLnB5byBmaWxlLgorCisgICAgVGhlIC5weSBmaWxlIGRvZXMgbm90IG5lZWQgdG8gZXhpc3Q7IHRoaXMgc2ltcGx5IHJldHVybnMgdGhlIHBhdGggdG8gdGhlCisgICAgLnB5Yy8ucHlvIGZpbGUgY2FsY3VsYXRlZCBhcyBpZiB0aGUgLnB5IGZpbGUgd2VyZSBpbXBvcnRlZC4gIFRoZSBleHRlbnNpb24KKyAgICB3aWxsIGJlIC5weWMgdW5sZXNzIHN5cy5mbGFncy5vcHRpbWl6ZSBpcyBub24temVybywgdGhlbiBpdCB3aWxsIGJlIC5weW8uCisKKyAgICBJZiBkZWJ1Z19vdmVycmlkZSBpcyBub3QgTm9uZSwgdGhlbiBpdCBtdXN0IGJlIGEgYm9vbGVhbiBhbmQgaXMgdXNlZCBpbgorICAgIHBsYWNlIG9mIHN5cy5mbGFncy5vcHRpbWl6ZS4KKworICAgIElmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZSB0aGVuIE5vdEltcGxlbWVudGVkRXJyb3IgaXMgcmFpc2VkLgorCisgICAgIiIiCisgICAgcmV0dXJuIHV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgZGVidWdfb3ZlcnJpZGUpCisKKworZGVmIHNvdXJjZV9mcm9tX2NhY2hlKHBhdGgpOgorICAgICIiIioqREVQUkVDQVRFRCoqCisKKyAgICBHaXZlbiB0aGUgcGF0aCB0byBhIC5weWMuLy5weW8gZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvIGl0cyAucHkgZmlsZS4KKworICAgIFRoZSAucHljLy5weW8gZmlsZSBkb2VzIG5vdCBuZWVkIHRvIGV4aXN0OyB0aGlzIHNpbXBseSByZXR1cm5zIHRoZSBwYXRoIHRvCisgICAgdGhlIC5weSBmaWxlIGNhbGN1bGF0ZWQgdG8gY29ycmVzcG9uZCB0byB0aGUgLnB5Yy8ucHlvIGZpbGUuICBJZiBwYXRoIGRvZXMKKyAgICBub3QgY29uZm9ybSB0byBQRVAgMzE0NyBmb3JtYXQsIFZhbHVlRXJyb3Igd2lsbCBiZSByYWlzZWQuIElmCisgICAgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBOb25lIHRoZW4gTm90SW1wbGVtZW50ZWRFcnJvciBpcyByYWlzZWQuCisKKyAgICAiIiIKKyAgICByZXR1cm4gdXRpbC5zb3VyY2VfZnJvbV9jYWNoZShwYXRoKQorCisKIGRlZiBnZXRfc3VmZml4ZXMoKToKLSAgICB3YXJuaW5ncy53YXJuKCdpbXAuZ2V0X3N1ZmZpeGVzKCkgaXMgZGVwcmVjYXRlZDsgdXNlIHRoZSBjb25zdGFudHMgJwotICAgICAgICAgICAgICAgICAgJ2RlZmluZWQgb24gaW1wb3J0bGliLm1hY2hpbmVyeSBpbnN0ZWFkJywKLSAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgMikKKyAgICAiIiIqKkRFUFJFQ0FURUQqKiIiIgogICAgIGV4dGVuc2lvbnMgPSBbKHMsICdyYicsIENfRVhURU5TSU9OKSBmb3IgcyBpbiBtYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTXQotICAgIHNvdXJjZSA9IFsocywgJ1UnLCBQWV9TT1VSQ0UpIGZvciBzIGluIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVNdCisgICAgc291cmNlID0gWyhzLCAncicsIFBZX1NPVVJDRSkgZm9yIHMgaW4gbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFU10KICAgICBieXRlY29kZSA9IFsocywgJ3JiJywgUFlfQ09NUElMRUQpIGZvciBzIGluIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFU10KIAogICAgIHJldHVybiBleHRlbnNpb25zICsgc291cmNlICsgYnl0ZWNvZGUKQEAgLTY1LDcgKzExMSwxMSBAQAogCiBjbGFzcyBOdWxsSW1wb3J0ZXI6CiAKLSAgICAiIiJOdWxsIGltcG9ydCBvYmplY3QuIiIiCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIE51bGwgaW1wb3J0IG9iamVjdC4KKworICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgpOgogICAgICAgICBpZiBwYXRoID09ICcnOgpAQCAtODAsNyArMTMwLDcgQEAKIAogY2xhc3MgX0hhY2tlZEdldERhdGE6CiAKLSAgICAiIiJDb21wYXRpYmlpbHR5IHN1cHBvcnQgZm9yICdmaWxlJyBhcmd1bWVudHMgb2YgdmFyaW91cyBsb2FkXyooKQorICAgICIiIkNvbXBhdGliaWxpdHkgc3VwcG9ydCBmb3IgJ2ZpbGUnIGFyZ3VtZW50cyBvZiB2YXJpb3VzIGxvYWRfKigpCiAgICAgZnVuY3Rpb25zLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bGxuYW1lLCBwYXRoLCBmaWxlPU5vbmUpOgpAQCAtMTA2LDQ4ICsxNTYsNDkgQEAKICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9kYXRhKHBhdGgpCiAKIAotY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIpOgorY2xhc3MgX0xvYWRTb3VyY2VDb21wYXRpYmlsaXR5KF9IYWNrZWRHZXREYXRhLCBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcik6CiAKICAgICAiIiJDb21wYXRpYmlsaXR5IHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBsb2FkX3NvdXJjZSgpLiIiIgogCiAKIGRlZiBsb2FkX3NvdXJjZShuYW1lLCBwYXRobmFtZSwgZmlsZT1Ob25lKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3NvdXJjZSgpIGlzIGRlcHJlY2F0ZWQ7IHVzZSAnCi0gICAgICAgICAgICdpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpLmxvYWRfbW9kdWxlKCknCi0gICAgICAgICAgICcgaW5zdGVhZCcpCi0gICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbmFtZV0KKyAgICBsb2FkZXIgPSBfTG9hZFNvdXJjZUNvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpCisgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMuZXhlYyhzeXMubW9kdWxlc1tuYW1lXSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBtZXRob2RzLmxvYWQoKQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KLSAgICBtb2R1bGUuX19sb2FkZXJfXyA9IF9ib290c3RyYXAuU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19sb2FkZXJfXyA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgIG1vZHVsZS5fX3NwZWNfXy5sb2FkZXIgPSBtb2R1bGUuX19sb2FkZXJfXwogICAgIHJldHVybiBtb2R1bGUKIAogCi1jbGFzcyBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShfSGFja2VkR2V0RGF0YSwKLSAgICAgICAgX2Jvb3RzdHJhcC5Tb3VyY2VsZXNzRmlsZUxvYWRlcik6CitjbGFzcyBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShfSGFja2VkR2V0RGF0YSwgU291cmNlbGVzc0ZpbGVMb2FkZXIpOgogCiAgICAgIiIiQ29tcGF0aWJpbGl0eSBzdXBwb3J0IGZvciBpbXBsZW1lbnRpbmcgbG9hZF9jb21waWxlZCgpLiIiIgogCiAKIGRlZiBsb2FkX2NvbXBpbGVkKG5hbWUsIHBhdGhuYW1lLCBmaWxlPU5vbmUpOgotICAgIG1zZyA9ICgnaW1wLmxvYWRfY29tcGlsZWQoKSBpcyBkZXByZWNhdGVkOyB1c2UgJwotICAgICAgICAgICAnaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkuJwotICAgICAgICAgICAnbG9hZF9tb2R1bGUoKSBpbnN0ZWFkICcpCi0gICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgMikKLSAgICBfTG9hZENvbXBpbGVkQ29tcGF0aWJpbGl0eShuYW1lLCBwYXRobmFtZSwgZmlsZSkubG9hZF9tb2R1bGUobmFtZSkKLSAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCisgICAgbG9hZGVyID0gX0xvYWRDb21waWxlZENvbXBhdGliaWxpdHkobmFtZSwgcGF0aG5hbWUsIGZpbGUpCisgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aG5hbWUsIGxvYWRlcj1sb2FkZXIpCisgICAgbWV0aG9kcyA9IF9TcGVjTWV0aG9kcyhzcGVjKQorICAgIGlmIG5hbWUgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgIG1vZHVsZSA9IG1ldGhvZHMuZXhlYyhzeXMubW9kdWxlc1tuYW1lXSkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBtZXRob2RzLmxvYWQoKQogICAgICMgVG8gYWxsb3cgcmVsb2FkaW5nIHRvIHBvdGVudGlhbGx5IHdvcmssIHVzZSBhIG5vbi1oYWNrZWQgbG9hZGVyIHdoaWNoCiAgICAgIyB3b24ndCByZWx5IG9uIGEgbm93LWNsb3NlZCBmaWxlIG9iamVjdC4KLSAgICBtb2R1bGUuX19sb2FkZXJfXyA9IF9ib290c3RyYXAuU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aG5hbWUpCisgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBTb3VyY2VsZXNzRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBtb2R1bGUuX19zcGVjX18ubG9hZGVyID0gbW9kdWxlLl9fbG9hZGVyX18KICAgICByZXR1cm4gbW9kdWxlCiAKIAogZGVmIGxvYWRfcGFja2FnZShuYW1lLCBwYXRoKToKLSAgICBtc2cgPSAoJ2ltcC5sb2FkX3BhY2thZ2UoKSBpcyBkZXByZWNhdGVkOyB1c2UgZWl0aGVyICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcigpIG9yICcKLSAgICAgICAgICAgJ2ltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIoKSBpbnN0ZWFkJykKLSAgICB3YXJuaW5ncy53YXJuKG1zZywgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICIiIioqREVQUkVDQVRFRCoqIiIiCiAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKICAgICAgICAgZXh0ZW5zaW9ucyA9IChtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTWzpdICsKICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVNbOl0pCkBAIC0xNTcsNyArMjA4LDEzIEBACiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3shcn0gaXMgbm90IGEgcGFja2FnZScuZm9ybWF0KHBhdGgpKQotICAgIHJldHVybiBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIobmFtZSwgcGF0aCkubG9hZF9tb2R1bGUobmFtZSkKKyAgICBzcGVjID0gdXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVtdKQorICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICByZXR1cm4gbWV0aG9kcy5leGVjKHN5cy5tb2R1bGVzW25hbWVdKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBtZXRob2RzLmxvYWQoKQogCiAKIGRlZiBsb2FkX21vZHVsZShuYW1lLCBmaWxlLCBmaWxlbmFtZSwgZGV0YWlscyk6CkBAIC0xNjksMzIgKzIyNiwzMCBAQAogCiAgICAgIiIiCiAgICAgc3VmZml4LCBtb2RlLCB0eXBlXyA9IGRldGFpbHMKLSAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJykKLSAgICAgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBmaWxlIG9wZW4gbW9kZSB7IXJ9Jy5mb3JtYXQobW9kZSkpCi0gICAgICAgIGVsaWYgZmlsZSBpcyBOb25lIGFuZCB0eXBlXyBpbiB7UFlfU09VUkNFLCBQWV9DT01QSUxFRH06Ci0gICAgICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQotICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfU09VUkNFOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQotICAgICAgICBlbGlmIHR5cGVfID09IFBZX0NPTVBJTEVEOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfY29tcGlsZWQobmFtZSwgZmlsZW5hbWUsIGZpbGUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICdyYicpIGFzIG9wZW5lZF9maWxlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRfZHluYW1pYyhuYW1lLCBmaWxlbmFtZSwgZmlsZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgotICAgICAgICAgICAgcmV0dXJuIGxvYWRfcGFja2FnZShuYW1lLCBmaWxlbmFtZSkKLSAgICAgICAgZWxpZiB0eXBlXyA9PSBDX0JVSUxUSU46Ci0gICAgICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCi0gICAgICAgIGVsaWYgdHlwZV8gPT0gUFlfRlJPWkVOOgotICAgICAgICAgICAgcmV0dXJuIGluaXRfZnJvemVuKG5hbWUpCisgICAgaWYgbW9kZSBhbmQgKG5vdCBtb2RlLnN0YXJ0c3dpdGgoKCdyJywgJ1UnKSkgb3IgJysnIGluIG1vZGUpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdpbnZhbGlkIGZpbGUgb3BlbiBtb2RlIHshcn0nLmZvcm1hdChtb2RlKSkKKyAgICBlbGlmIGZpbGUgaXMgTm9uZSBhbmQgdHlwZV8gaW4ge1BZX1NPVVJDRSwgUFlfQ09NUElMRUR9OgorICAgICAgICBtc2cgPSAnZmlsZSBvYmplY3QgcmVxdWlyZWQgZm9yIGltcG9ydCAodHlwZSBjb2RlIHt9KScuZm9ybWF0KHR5cGVfKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKKyAgICBlbGlmIHR5cGVfID09IFBZX1NPVVJDRToKKyAgICAgICAgcmV0dXJuIGxvYWRfc291cmNlKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gUFlfQ09NUElMRUQ6CisgICAgICAgIHJldHVybiBsb2FkX2NvbXBpbGVkKG5hbWUsIGZpbGVuYW1lLCBmaWxlKQorICAgIGVsaWYgdHlwZV8gPT0gQ19FWFRFTlNJT04gYW5kIGxvYWRfZHluYW1pYyBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgZmlsZSBpcyBOb25lOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncmInKSBhcyBvcGVuZWRfZmlsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gbG9hZF9keW5hbWljKG5hbWUsIGZpbGVuYW1lLCBvcGVuZWRfZmlsZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIHJldHVybiBsb2FkX2R5bmFtaWMobmFtZSwgZmlsZW5hbWUsIGZpbGUpCisgICAgZWxpZiB0eXBlXyA9PSBQS0dfRElSRUNUT1JZOgorICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlKG5hbWUsIGZpbGVuYW1lKQorICAgIGVsaWYgdHlwZV8gPT0gQ19CVUlMVElOOgorICAgICAgICByZXR1cm4gaW5pdF9idWlsdGluKG5hbWUpCisgICAgZWxpZiB0eXBlXyA9PSBQWV9GUk9aRU46CisgICAgICAgIHJldHVybiBpbml0X2Zyb3plbihuYW1lKQorICAgIGVsc2U6CisgICAgICAgIG1zZyA9ICAiRG9uJ3Qga25vdyBob3cgdG8gaW1wb3J0IHt9ICh0eXBlIGNvZGUge30pIi5mb3JtYXQobmFtZSwgdHlwZV8pCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1uYW1lKQogCiAKIGRlZiBmaW5kX21vZHVsZShuYW1lLCBwYXRoPU5vbmUpOgpAQCAtMjMwLDU0ICsyODUsMzEgQEAKICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihwYWNrYWdlX2RpcmVjdG9yeSwgcGFja2FnZV9maWxlX25hbWUpCiAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlX3BhdGgpOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lLCBwYWNrYWdlX2RpcmVjdG9yeSwgKCcnLCAnJywgUEtHX0RJUkVDVE9SWSkKLSAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnKQotICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbW9kZSwgdHlwZV8gaW4gZ2V0X3N1ZmZpeGVzKCk6Ci0gICAgICAgICAgICAgICAgZmlsZV9uYW1lID0gbmFtZSArIHN1ZmZpeAotICAgICAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGVfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBicmVhayAgIyBCcmVhayBvdXQgb2Ygb3V0ZXIgbG9vcCB3aGVuIGJyZWFraW5nIG91dCBvZiBpbm5lciBsb29wLgorICAgICAgICBmb3Igc3VmZml4LCBtb2RlLCB0eXBlXyBpbiBnZXRfc3VmZml4ZXMoKToKKyAgICAgICAgICAgIGZpbGVfbmFtZSA9IG5hbWUgKyBzdWZmaXgKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihlbnRyeSwgZmlsZV9uYW1lKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZmlsZV9wYXRoKToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgYnJlYWsgICMgQnJlYWsgb3V0IG9mIG91dGVyIGxvb3Agd2hlbiBicmVha2luZyBvdXQgb2YgaW5uZXIgbG9vcC4KICAgICBlbHNlOgotICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfYm9vdHN0cmFwLl9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihfRVJSX01TRy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKIAogICAgIGVuY29kaW5nID0gTm9uZQotICAgIGlmIG1vZGUgPT0gJ1UnOgorICAgIGlmICdiJyBub3QgaW4gbW9kZToKICAgICAgICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKGZpbGUucmVhZGxpbmUpWzBdCiAgICAgZmlsZSA9IG9wZW4oZmlsZV9wYXRoLCBtb2RlLCBlbmNvZGluZz1lbmNvZGluZykKICAgICByZXR1cm4gZmlsZSwgZmlsZV9wYXRoLCAoc3VmZml4LCBtb2RlLCB0eXBlXykKIAogCi1fUkVMT0FESU5HID0ge30KLQogZGVmIHJlbG9hZChtb2R1bGUpOgotICAgICIiIlJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCisgICAgIiIiKipERVBSRUNBVEVEKioKKworICAgIFJlbG9hZCB0aGUgbW9kdWxlIGFuZCByZXR1cm4gaXQuCiAKICAgICBUaGUgbW9kdWxlIG11c3QgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBpbXBvcnRlZCBiZWZvcmUuCiAKICAgICAiIiIKLSAgICBpZiBub3QgbW9kdWxlIG9yIHR5cGUobW9kdWxlKSAhPSB0eXBlKHN5cyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigicmVsb2FkKCkgYXJndW1lbnQgbXVzdCBiZSBtb2R1bGUiKQotICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KLSAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgbXNnID0gIm1vZHVsZSB7fSBub3QgaW4gc3lzLm1vZHVsZXMiCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQobmFtZSksIG5hbWU9bmFtZSkKLSAgICBpZiBuYW1lIGluIF9SRUxPQURJTkc6Ci0gICAgICAgIHJldHVybiBfUkVMT0FESU5HW25hbWVdCi0gICAgX1JFTE9BRElOR1tuYW1lXSA9IG1vZHVsZQotICAgIHRyeToKLSAgICAgICAgcGFyZW50X25hbWUgPSBuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBpZiBwYXJlbnRfbmFtZSBhbmQgcGFyZW50X25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZy5mb3JtYXQocGFyZW50X25hbWUpLCBuYW1lPXBhcmVudF9uYW1lKQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXy5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAjIFRoZSBtb2R1bGUgbWF5IGhhdmUgcmVwbGFjZWQgaXRzZWxmIGluIHN5cy5tb2R1bGVzIQotICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbW9kdWxlLl9fbmFtZV9fXQotICAgIGZpbmFsbHk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBfUkVMT0FESU5HW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKKyAgICByZXR1cm4gaW1wb3J0bGliLnJlbG9hZChtb2R1bGUpCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5IGIvTGliL2ltcG9ydGxpYi9fX2luaXRfXy5weQppbmRleCAyMmM5MGYyLi4xYmM5OTQ3IDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL19faW5pdF9fLnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvX19pbml0X18ucHkKQEAgLTEsNSArMSw1IEBACiAiIiJBIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIGltcG9ydC4iIiIKLV9fYWxsX18gPSBbJ19faW1wb3J0X18nLCAnaW1wb3J0X21vZHVsZScsICdpbnZhbGlkYXRlX2NhY2hlcyddCitfX2FsbF9fID0gWydfX2ltcG9ydF9fJywgJ2ltcG9ydF9tb2R1bGUnLCAnaW52YWxpZGF0ZV9jYWNoZXMnLCAncmVsb2FkJ10KIAogIyBCb290c3RyYXAgaGVscCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0yMiw3ICsyMiwxMiBAQAogICAgICMgYSBzZWNvbmQgY29weSBvZiB0aGUgbW9kdWxlLgogICAgIF9ib290c3RyYXAuX19uYW1lX18gPSAnaW1wb3J0bGliLl9ib290c3RyYXAnCiAgICAgX2Jvb3RzdHJhcC5fX3BhY2thZ2VfXyA9ICdpbXBvcnRsaWInCi0gICAgX2Jvb3RzdHJhcC5fX2ZpbGVfXyA9IF9fZmlsZV9fLnJlcGxhY2UoJ19faW5pdF9fLnB5JywgJ19ib290c3RyYXAucHknKQorICAgIHRyeToKKyAgICAgICAgX2Jvb3RzdHJhcC5fX2ZpbGVfXyA9IF9fZmlsZV9fLnJlcGxhY2UoJ19faW5pdF9fLnB5JywgJ19ib290c3RyYXAucHknKQorICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICMgX19maWxlX18gaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgZGVmaW5lZCwgZS5nLiBpZiB0aGlzIGNvZGUgZ2V0cworICAgICAgICAjIGZyb3plbiBieSBhIHRvb2wgbGlrZSBjeF9GcmVlemUuCisgICAgICAgIHBhc3MKICAgICBzeXMubW9kdWxlc1snaW1wb3J0bGliLl9ib290c3RyYXAnXSA9IF9ib290c3RyYXAKIAogIyBUbyBzaW1wbGlmeSBpbXBvcnRzIGluIHRlc3QgY29kZQpAQCAtMzIsNiArMzcsMTAgQEAKICMgRnVsbHkgYm9vdHN0cmFwcGVkIGF0IHRoaXMgcG9pbnQsIGltcG9ydCB3aGF0ZXZlciB5b3UgbGlrZSwgY2lyY3VsYXIKICMgZGVwZW5kZW5jaWVzIGFuZCBzdGFydHVwIG92ZXJoZWFkIG1pbmltaXNhdGlvbiBwZXJtaXR0aW5nIDopCiAKK2ltcG9ydCB0eXBlcworaW1wb3J0IHdhcm5pbmdzCisKKwogIyBQdWJsaWMgQVBJICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBfX2ltcG9ydF9fCkBAIC00NiwyMCArNTUsMTUgQEAKIAogCiBkZWYgZmluZF9sb2FkZXIobmFtZSwgcGF0aD1Ob25lKToKLSAgICAiIiJGaW5kIHRoZSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgorICAgICIiIlJldHVybiB0aGUgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZS4KIAotICAgIEZpcnN0LCBzeXMubW9kdWxlcyBpcyBjaGVja2VkIHRvIHNlZSBpZiB0aGUgbW9kdWxlIHdhcyBhbHJlYWR5IGltcG9ydGVkLiBJZgotICAgIHNvLCB0aGVuIHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18gaXMgcmV0dXJuZWQuIElmIHRoYXQgaGFwcGVucyB0byBiZQotICAgIHNldCB0byBOb25lLCB0aGVuIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBpbgotICAgIHN5cy5tb2R1bGVzLCB0aGVuIHN5cy5tZXRhX3BhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUgbG9hZGVyIHdpdGggdGhlCi0gICAgdmFsdWUgb2YgJ3BhdGgnIGdpdmVuIHRvIHRoZSBmaW5kZXJzLiBOb25lIGlzIHJldHVybmVkIGlmIG5vIGxvYWRlciBjb3VsZAotICAgIGJlIGZvdW5kLgorICAgIFRoaXMgaXMgYSBiYWNrd2FyZC1jb21wYXRpYmxlIHdyYXBwZXIgYXJvdW5kIGZpbmRfc3BlYygpLgogCi0gICAgRG90dGVkIG5hbWVzIGRvIG5vdCBoYXZlIHRoZWlyIHBhcmVudCBwYWNrYWdlcyBpbXBsaWNpdGx5IGltcG9ydGVkLiBZb3Ugd2lsbAotICAgIG1vc3QgbGlrZWx5IG5lZWQgdG8gZXhwbGljaXRseSBpbXBvcnQgYWxsIHBhcmVudCBwYWNrYWdlcyBpbiB0aGUgcHJvcGVyCi0gICAgb3JkZXIgZm9yIGEgc3VibW9kdWxlIHRvIGdldCB0aGUgY29ycmVjdCBsb2FkZXIuCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYygpLgogCiAgICAgIiIiCisgICAgd2FybmluZ3Mud2FybignVXNlIGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYygpIGluc3RlYWQuJywKKyAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQogICAgIHRyeToKICAgICAgICAgbG9hZGVyID0gc3lzLm1vZHVsZXNbbmFtZV0uX19sb2FkZXJfXwogICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKQEAgLTY4LDcgKzcyLDIwIEBACiAgICAgICAgICAgICByZXR1cm4gbG9hZGVyCiAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICBwYXNzCi0gICAgcmV0dXJuIF9ib290c3RyYXAuX2ZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7fS5fX2xvYWRlcl9fIGlzIG5vdCBzZXQnLmZvcm1hdChuYW1lKSkKKworICAgIHNwZWMgPSBfYm9vdHN0cmFwLl9maW5kX3NwZWMobmFtZSwgcGF0aCkKKyAgICAjIFdlIHdvbid0IHdvcnJ5IGFib3V0IG1hbGZvcm1lZCBzcGVjcyAobWlzc2luZyBhdHRyaWJ1dGVzKS4KKyAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgaWYgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3NwZWMgZm9yIHt9IG1pc3NpbmcgbG9hZGVyJy5mb3JtYXQobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPW5hbWUpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCduYW1lc3BhY2UgcGFja2FnZXMgZG8gbm90IGhhdmUgbG9hZGVycycsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSkKKyAgICByZXR1cm4gc3BlYy5sb2FkZXIKIAogCiBkZWYgaW1wb3J0X21vZHVsZShuYW1lLCBwYWNrYWdlPU5vbmUpOgpAQCAtODIsOSArOTksNTggQEAKICAgICBsZXZlbCA9IDAKICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoJy4nKToKICAgICAgICAgaWYgbm90IHBhY2thZ2U6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInJlbGF0aXZlIGltcG9ydHMgcmVxdWlyZSB0aGUgJ3BhY2thZ2UnIGFyZ3VtZW50IikKKyAgICAgICAgICAgIG1zZyA9ICgidGhlICdwYWNrYWdlJyBhcmd1bWVudCBpcyByZXF1aXJlZCB0byBwZXJmb3JtIGEgcmVsYXRpdmUgIgorICAgICAgICAgICAgICAgICAgICJpbXBvcnQgZm9yIHshcn0iKQorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZy5mb3JtYXQobmFtZSkpCiAgICAgICAgIGZvciBjaGFyYWN0ZXIgaW4gbmFtZToKICAgICAgICAgICAgIGlmIGNoYXJhY3RlciAhPSAnLic6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGxldmVsICs9IDEKICAgICByZXR1cm4gX2Jvb3RzdHJhcC5fZ2NkX2ltcG9ydChuYW1lW2xldmVsOl0sIHBhY2thZ2UsIGxldmVsKQorCisKK19SRUxPQURJTkcgPSB7fQorCisKK2RlZiByZWxvYWQobW9kdWxlKToKKyAgICAiIiJSZWxvYWQgdGhlIG1vZHVsZSBhbmQgcmV0dXJuIGl0LgorCisgICAgVGhlIG1vZHVsZSBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgaW1wb3J0ZWQgYmVmb3JlLgorCisgICAgIiIiCisgICAgaWYgbm90IG1vZHVsZSBvciBub3QgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoInJlbG9hZCgpIGFyZ3VtZW50IG11c3QgYmUgbW9kdWxlIikKKyAgICB0cnk6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19zcGVjX18ubmFtZQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXworCisgICAgaWYgc3lzLm1vZHVsZXMuZ2V0KG5hbWUpIGlzIG5vdCBtb2R1bGU6CisgICAgICAgIG1zZyA9ICJtb2R1bGUge30gbm90IGluIHN5cy5tb2R1bGVzIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCisgICAgaWYgbmFtZSBpbiBfUkVMT0FESU5HOgorICAgICAgICByZXR1cm4gX1JFTE9BRElOR1tuYW1lXQorICAgIF9SRUxPQURJTkdbbmFtZV0gPSBtb2R1bGUKKyAgICB0cnk6CisgICAgICAgIHBhcmVudF9uYW1lID0gbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgaWYgcGFyZW50X25hbWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGFyZW50ID0gc3lzLm1vZHVsZXNbcGFyZW50X25hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgbXNnID0gInBhcmVudCB7IXJ9IG5vdCBpbiBzeXMubW9kdWxlcyIKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cuZm9ybWF0KHBhcmVudF9uYW1lKSwgbmFtZT1wYXJlbnRfbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcGtncGF0aCA9IHBhcmVudC5fX3BhdGhfXworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGtncGF0aCA9IE5vbmUKKyAgICAgICAgdGFyZ2V0ID0gbW9kdWxlCisgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18gPSBfYm9vdHN0cmFwLl9maW5kX3NwZWMobmFtZSwgcGtncGF0aCwgdGFyZ2V0KQorICAgICAgICBtZXRob2RzID0gX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykKKyAgICAgICAgbWV0aG9kcy5leGVjKG1vZHVsZSkKKyAgICAgICAgIyBUaGUgbW9kdWxlIG1heSBoYXZlIHJlcGxhY2VkIGl0c2VsZiBpbiBzeXMubW9kdWxlcyEKKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCisgICAgZmluYWxseToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIF9SRUxPQURJTkdbbmFtZV0KKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5IGIvTGliL2ltcG9ydGxpYi9fYm9vdHN0cmFwLnB5CmluZGV4IGU0MGVjOTIuLjY0YmJiNDYgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQorKysgYi9MaWIvaW1wb3J0bGliL19ib290c3RyYXAucHkKQEAgLTksNyArOSw3IEBACiAjCiAjIElNUE9SVEFOVDogV2hlbmV2ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhpcyBtb2R1bGUsIGJlIHN1cmUgdG8gcnVuCiAjIGEgdG9wLWxldmVsIG1ha2UgaW4gb3JkZXIgdG8gZ2V0IHRoZSBmcm96ZW4gdmVyc2lvbiBvZiB0aGUgbW9kdWxlCi0jIHVwZGF0ZS4gTm90IGRvaW5nIHNvLCB3aWxsIHJlc3VsdCBpbiB0aGUgTWFrZWZpbGUgdG8gZmFpbCBmb3IKKyMgdXBkYXRlLiBOb3QgZG9pbmcgc28gd2lsbCByZXN1bHQgaW4gdGhlIE1ha2VmaWxlIHRvIGZhaWwgZm9yCiAjIGFsbCBvdGhlcnMgd2hvIGRvbid0IGhhdmUgYSAuL3B5dGhvbiBhcm91bmQgdG8gZnJlZXplIHRoZSBtb2R1bGUKICMgaW4gdGhlIGVhcmx5IHN0YWdlcyBvZiBjb21waWxhdGlvbi4KICMKQEAgLTIwLDEwICsyMCw2IEBACiAjIHJlZmVyZW5jZSBhbnkgaW5qZWN0ZWQgb2JqZWN0cyEgVGhpcyBpbmNsdWRlcyBub3Qgb25seSBnbG9iYWwgY29kZSBidXQgYWxzbwogIyBhbnl0aGluZyBzcGVjaWZpZWQgYXQgdGhlIGNsYXNzIGxldmVsLgogCi0jIFhYWCBNYWtlIHN1cmUgYWxsIHB1YmxpYyBuYW1lcyBoYXZlIG5vIHNpbmdsZSBsZWFkaW5nIHVuZGVyc2NvcmUgYW5kIGFsbAotIyAgICAgb3RoZXJzIGRvLgotCi0KICMgQm9vdHN0cmFwLXJlbGF0ZWQgY29kZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogX0NBU0VfSU5TRU5TSVRJVkVfUExBVEZPUk1TID0gJ3dpbicsICdjeWd3aW4nLCAnZGFyd2luJwpAQCAtNDEsNzYgKzM3LDU4IEBACiAgICAgcmV0dXJuIF9yZWxheF9jYXNlCiAKIAotIyBUT0RPOiBFeHBvc2UgZnJvbSBtYXJzaGFsCiBkZWYgX3dfbG9uZyh4KToKLSAgICAiIiJDb252ZXJ0IGEgMzItYml0IGludGVnZXIgdG8gbGl0dGxlLWVuZGlhbi4KLQotICAgIFhYWCBUZW1wb3JhcnkgdW50aWwgbWFyc2hhbCdzIGxvbmcgZnVuY3Rpb25zIGFyZSBleHBvc2VkLgotCi0gICAgIiIiCi0gICAgeCA9IGludCh4KQotICAgIGludF9ieXRlcyA9IFtdCi0gICAgaW50X2J5dGVzLmFwcGVuZCh4ICYgMHhGRikKLSAgICBpbnRfYnl0ZXMuYXBwZW5kKCh4ID4+IDgpICYgMHhGRikKLSAgICBpbnRfYnl0ZXMuYXBwZW5kKCh4ID4+IDE2KSAmIDB4RkYpCi0gICAgaW50X2J5dGVzLmFwcGVuZCgoeCA+PiAyNCkgJiAweEZGKQotICAgIHJldHVybiBieXRlYXJyYXkoaW50X2J5dGVzKQorICAgICIiIkNvbnZlcnQgYSAzMi1iaXQgaW50ZWdlciB0byBsaXR0bGUtZW5kaWFuLiIiIgorICAgIHJldHVybiAoaW50KHgpICYgMHhGRkZGRkZGRikudG9fYnl0ZXMoNCwgJ2xpdHRsZScpCiAKIAotIyBUT0RPOiBFeHBvc2UgZnJvbSBtYXJzaGFsCiBkZWYgX3JfbG9uZyhpbnRfYnl0ZXMpOgotICAgICIiIkNvbnZlcnQgNCBieXRlcyBpbiBsaXR0bGUtZW5kaWFuIHRvIGFuIGludGVnZXIuCi0KLSAgICBYWFggVGVtcG9yYXJ5IHVudGlsIG1hcnNoYWwncyBsb25nIGZ1bmN0aW9uIGFyZSBleHBvc2VkLgotCi0gICAgIiIiCi0gICAgeCA9IGludF9ieXRlc1swXQotICAgIHggfD0gaW50X2J5dGVzWzFdIDw8IDgKLSAgICB4IHw9IGludF9ieXRlc1syXSA8PCAxNgotICAgIHggfD0gaW50X2J5dGVzWzNdIDw8IDI0Ci0gICAgcmV0dXJuIHgKKyAgICAiIiJDb252ZXJ0IDQgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiB0byBhbiBpbnRlZ2VyLiIiIgorICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhpbnRfYnl0ZXMsICdsaXR0bGUnKQogCiAKIGRlZiBfcGF0aF9qb2luKCpwYXRoX3BhcnRzKToKICAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5qb2luKCkuIiIiCi0gICAgbmV3X3BhcnRzID0gW10KLSAgICBmb3IgcGFydCBpbiBwYXRoX3BhcnRzOgotICAgICAgICBpZiBub3QgcGFydDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIG5ld19wYXJ0cy5hcHBlbmQocGFydCkKLSAgICAgICAgaWYgcGFydFstMV0gbm90IGluIHBhdGhfc2VwYXJhdG9yczoKLSAgICAgICAgICAgIG5ld19wYXJ0cy5hcHBlbmQocGF0aF9zZXApCi0gICAgcmV0dXJuICcnLmpvaW4obmV3X3BhcnRzWzotMV0pICAjIERyb3Agc3VwZXJmbHVvdXMgcGF0aCBzZXBhcmF0b3IuCisgICAgcmV0dXJuIHBhdGhfc2VwLmpvaW4oW3BhcnQucnN0cmlwKHBhdGhfc2VwYXJhdG9ycykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHBhcnQgaW4gcGF0aF9wYXJ0cyBpZiBwYXJ0XSkKIAogCiBkZWYgX3BhdGhfc3BsaXQocGF0aCk6CiAgICAgIiIiUmVwbGFjZW1lbnQgZm9yIG9zLnBhdGguc3BsaXQoKS4iIiIKKyAgICBpZiBsZW4ocGF0aF9zZXBhcmF0b3JzKSA9PSAxOgorICAgICAgICBmcm9udCwgXywgdGFpbCA9IHBhdGgucnBhcnRpdGlvbihwYXRoX3NlcCkKKyAgICAgICAgcmV0dXJuIGZyb250LCB0YWlsCiAgICAgZm9yIHggaW4gcmV2ZXJzZWQocGF0aCk6CiAgICAgICAgIGlmIHggaW4gcGF0aF9zZXBhcmF0b3JzOgotICAgICAgICAgICAgc2VwID0geAotICAgICAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgICBzZXAgPSBwYXRoX3NlcAotICAgIGZyb250LCBfLCB0YWlsID0gcGF0aC5ycGFydGl0aW9uKHNlcCkKLSAgICByZXR1cm4gZnJvbnQsIHRhaWwKKyAgICAgICAgICAgIGZyb250LCB0YWlsID0gcGF0aC5yc3BsaXQoeCwgbWF4c3BsaXQ9MSkKKyAgICAgICAgICAgIHJldHVybiBmcm9udCwgdGFpbAorICAgIHJldHVybiAnJywgcGF0aAorCisKK2RlZiBfcGF0aF9zdGF0KHBhdGgpOgorICAgICIiIlN0YXQgdGhlIHBhdGguCisKKyAgICBNYWRlIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gbWFrZSBpdCBlYXNpZXIgdG8gb3ZlcnJpZGUgaW4gZXhwZXJpbWVudHMKKyAgICAoZS5nLiBjYWNoZSBzdGF0IHJlc3VsdHMpLgorCisgICAgIiIiCisgICAgcmV0dXJuIF9vcy5zdGF0KHBhdGgpCiAKIAogZGVmIF9wYXRoX2lzX21vZGVfdHlwZShwYXRoLCBtb2RlKToKICAgICAiIiJUZXN0IHdoZXRoZXIgdGhlIHBhdGggaXMgdGhlIHNwZWNpZmllZCBtb2RlIHR5cGUuIiIiCiAgICAgdHJ5OgotICAgICAgICBzdGF0X2luZm8gPSBfb3Muc3RhdChwYXRoKQorICAgICAgICBzdGF0X2luZm8gPSBfcGF0aF9zdGF0KHBhdGgpCiAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgIHJldHVybiAoc3RhdF9pbmZvLnN0X21vZGUgJiAwbzE3MDAwMCkgPT0gbW9kZQogCiAKLSMgWFhYIENvdWxkIGFsc28gZXhwb3NlIE1vZHVsZXMvZ2V0cGF0aC5jOmlzZmlsZSgpCiBkZWYgX3BhdGhfaXNmaWxlKHBhdGgpOgogICAgICIiIlJlcGxhY2VtZW50IGZvciBvcy5wYXRoLmlzZmlsZS4iIiIKICAgICByZXR1cm4gX3BhdGhfaXNfbW9kZV90eXBlKHBhdGgsIDBvMTAwMDAwKQogCiAKLSMgWFhYIENvdWxkIGFsc28gZXhwb3NlIE1vZHVsZXMvZ2V0cGF0aC5jOmlzZGlyKCkKIGRlZiBfcGF0aF9pc2RpcihwYXRoKToKICAgICAiIiJSZXBsYWNlbWVudCBmb3Igb3MucGF0aC5pc2Rpci4iIiIKICAgICBpZiBub3QgcGF0aDoKQEAgLTE0OCwxNyArMTI2LDMwIEBACiAgICAgbmV3Ll9fZGljdF9fLnVwZGF0ZShvbGQuX19kaWN0X18pCiAKIAorZGVmIF9uZXdfbW9kdWxlKG5hbWUpOgorICAgIHJldHVybiB0eXBlKHN5cykobmFtZSkKKworCiBfY29kZV90eXBlID0gdHlwZShfd3JhcC5fX2NvZGVfXykKIAogCi1kZWYgbmV3X21vZHVsZShuYW1lKToKLSAgICAiIiJDcmVhdGUgYSBuZXcgbW9kdWxlLgogCi0gICAgVGhlIG1vZHVsZSBpcyBub3QgZW50ZXJlZCBpbnRvIHN5cy5tb2R1bGVzLgorY2xhc3MgX01hbmFnZVJlbG9hZDoKIAotICAgICIiIgotICAgIHJldHVybiB0eXBlKF9pbykobmFtZSkKKyAgICAiIiJNYW5hZ2VzIHRoZSBwb3NzaWJsZSBjbGVhbi11cCBvZiBzeXMubW9kdWxlcyBmb3IgbG9hZF9tb2R1bGUoKS4iIiIKIAorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHNlbGYuX2lzX3JlbG9hZCA9IHNlbGYuX25hbWUgaW4gc3lzLm1vZHVsZXMKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIGlmIGFueShhcmcgaXMgbm90IE5vbmUgZm9yIGFyZyBpbiBhcmdzKSBhbmQgbm90IHNlbGYuX2lzX3JlbG9hZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc2VsZi5fbmFtZV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAKICMgTW9kdWxlLWxldmVsIGxvY2tpbmcgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMjE0LDcgKzIwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50ICs9IDEKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCiAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuaGFzX2RlYWRsb2NrKCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBfRGVhZGxvY2tFcnJvcigiZGVhZGxvY2sgZGV0ZWN0ZWQgYnkgJXIiICUgc2VsZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIF9EZWFkbG9ja0Vycm9yKCdkZWFkbG9jayBkZXRlY3RlZCBieSAlcicgJSBzZWxmKQogICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLndha2V1cC5hY3F1aXJlKEZhbHNlKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud2FpdGVycyArPSAxCiAgICAgICAgICAgICAgICAgIyBXYWl0IGZvciBhIHJlbGVhc2UoKSBjYWxsCkBAIC0yMjcsNyArMjE4LDcgQEAKICAgICAgICAgdGlkID0gX3RocmVhZC5nZXRfaWRlbnQoKQogICAgICAgICB3aXRoIHNlbGYubG9jazoKICAgICAgICAgICAgIGlmIHNlbGYub3duZXIgIT0gdGlkOgotICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiY2Fubm90IHJlbGVhc2UgdW4tYWNxdWlyZWQgbG9jayIpCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrJykKICAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvdW50ID4gMAogICAgICAgICAgICAgc2VsZi5jb3VudCAtPSAxCiAgICAgICAgICAgICBpZiBzZWxmLmNvdW50ID09IDA6CkBAIC0yMzcsNyArMjI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi53YWtldXAucmVsZWFzZSgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX01vZHVsZUxvY2soJXIpIGF0ICVkIiAlIChzZWxmLm5hbWUsIGlkKHNlbGYpKQorICAgICAgICByZXR1cm4gJ19Nb2R1bGVMb2NrKHshcn0pIGF0IHt9Jy5mb3JtYXQoc2VsZi5uYW1lLCBpZChzZWxmKSkKIAogCiBjbGFzcyBfRHVtbXlNb2R1bGVMb2NrOgpAQCAtMjU0LDExICsyNDUsMjggQEAKIAogICAgIGRlZiByZWxlYXNlKHNlbGYpOgogICAgICAgICBpZiBzZWxmLmNvdW50ID09IDA6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCByZWxlYXNlIHVuLWFjcXVpcmVkIGxvY2siKQorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdjYW5ub3QgcmVsZWFzZSB1bi1hY3F1aXJlZCBsb2NrJykKICAgICAgICAgc2VsZi5jb3VudCAtPSAxCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX0R1bW15TW9kdWxlTG9jayglcikgYXQgJWQiICUgKHNlbGYubmFtZSwgaWQoc2VsZikpCisgICAgICAgIHJldHVybiAnX0R1bW15TW9kdWxlTG9jayh7IXJ9KSBhdCB7fScuZm9ybWF0KHNlbGYubmFtZSwgaWQoc2VsZikpCisKKworY2xhc3MgX01vZHVsZUxvY2tNYW5hZ2VyOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgorICAgICAgICBzZWxmLl9uYW1lID0gbmFtZQorICAgICAgICBzZWxmLl9sb2NrID0gTm9uZQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fbG9jayA9IF9nZXRfbW9kdWxlX2xvY2soc2VsZi5fbmFtZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF9pbXAucmVsZWFzZV9sb2NrKCkKKyAgICAgICAgc2VsZi5fbG9jay5hY3F1aXJlKCkKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9sb2NrLnJlbGVhc2UoKQogCiAKICMgVGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zIGFyZSBmb3IgY29uc3VtcHRpb24gYnkgUHl0aG9uL2ltcG9ydC5jLgpAQCAtMzE1LDk1ICszMjMsMTA5IEBACiAKICMgRmluZGVyL2xvYWRlciB1dGlsaXR5IGNvZGUgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotIiIiTWFnaWMgd29yZCB0byByZWplY3QgLnB5YyBmaWxlcyBnZW5lcmF0ZWQgYnkgb3RoZXIgUHl0aG9uIHZlcnNpb25zLgotSXQgc2hvdWxkIGNoYW5nZSBmb3IgZWFjaCBpbmNvbXBhdGlibGUgY2hhbmdlIHRvIHRoZSBieXRlY29kZS4KKyMgTWFnaWMgd29yZCB0byByZWplY3QgLnB5YyBmaWxlcyBnZW5lcmF0ZWQgYnkgb3RoZXIgUHl0aG9uIHZlcnNpb25zLgorIyBJdCBzaG91bGQgY2hhbmdlIGZvciBlYWNoIGluY29tcGF0aWJsZSBjaGFuZ2UgdG8gdGhlIGJ5dGVjb2RlLgorIworIyBUaGUgdmFsdWUgb2YgQ1IgYW5kIExGIGlzIGluY29ycG9yYXRlZCBzbyBpZiB5b3UgZXZlciByZWFkIG9yIHdyaXRlCisjIGEgLnB5YyBmaWxlIGluIHRleHQgbW9kZSB0aGUgbWFnaWMgbnVtYmVyIHdpbGwgYmUgd3Jvbmc7IGFsc28sIHRoZQorIyBBcHBsZSBNUFcgY29tcGlsZXIgc3dhcHMgdGhlaXIgdmFsdWVzLCBib3RjaGluZyBzdHJpbmcgY29uc3RhbnRzLgorIworIyBUaGUgbWFnaWMgbnVtYmVycyBtdXN0IGJlIHNwYWNlZCBhcGFydCBhdCBsZWFzdCAyIHZhbHVlcywgYXMgdGhlCisjIC1VIGludGVycGV0ZXIgZmxhZyB3aWxsIGNhdXNlIE1BR0lDKzEgYmVpbmcgdXNlZC4gVGhleSBoYXZlIGJlZW4KKyMgb2RkIG51bWJlcnMgZm9yIHNvbWUgdGltZSBub3cuCisjCisjIFRoZXJlIHdlcmUgYSB2YXJpZXR5IG9mIG9sZCBzY2hlbWVzIGZvciBzZXR0aW5nIHRoZSBtYWdpYyBudW1iZXIuCisjIFRoZSBjdXJyZW50IHdvcmtpbmcgc2NoZW1lIGlzIHRvIGluY3JlbWVudCB0aGUgcHJldmlvdXMgdmFsdWUgYnkKKyMgMTAuCisjCisjIFN0YXJ0aW5nIHdpdGggdGhlIGFkb3B0aW9uIG9mIFBFUCAzMTQ3IGluIFB5dGhvbiAzLjIsIGV2ZXJ5IGJ1bXAgaW4gbWFnaWMKKyMgbnVtYmVyIGFsc28gaW5jbHVkZXMgYSBuZXcgIm1hZ2ljIHRhZyIsIGkuZS4gYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgdXNlZAorIyB0byByZXByZXNlbnQgdGhlIG1hZ2ljIG51bWJlciBpbiBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllcy4gIFdoZW4geW91IGNoYW5nZQorIyB0aGUgbWFnaWMgbnVtYmVyLCB5b3UgbXVzdCBhbHNvIHNldCBhIG5ldyB1bmlxdWUgbWFnaWMgdGFnLiAgR2VuZXJhbGx5IHRoaXMKKyMgY2FuIGJlIG5hbWVkIGFmdGVyIHRoZSBQeXRob24gbWFqb3IgdmVyc2lvbiBvZiB0aGUgbWFnaWMgbnVtYmVyIGJ1bXAsIGJ1dAorIyBpdCBjYW4gcmVhbGx5IGJlIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3MgZGlmZmVyZW50IHRoYW4gYW55dGhpbmcgZWxzZQorIyB0aGF0J3MgY29tZSBiZWZvcmUuICBUaGUgdGFncyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSwgc3RhcnRpbmcKKyMgd2l0aCBQeXRob24gMy4yYTAuCisjCisjIEtub3duIHZhbHVlczoKKyMgIFB5dGhvbiAxLjU6ICAgMjAxMjEKKyMgIFB5dGhvbiAxLjUuMTogMjAxMjEKKyMgICAgIFB5dGhvbiAxLjUuMjogMjAxMjEKKyMgICAgIFB5dGhvbiAxLjY6ICAgNTA0MjgKKyMgICAgIFB5dGhvbiAyLjA6ICAgNTA4MjMKKyMgICAgIFB5dGhvbiAyLjAuMTogNTA4MjMKKyMgICAgIFB5dGhvbiAyLjE6ICAgNjAyMDIKKyMgICAgIFB5dGhvbiAyLjEuMTogNjAyMDIKKyMgICAgIFB5dGhvbiAyLjEuMjogNjAyMDIKKyMgICAgIFB5dGhvbiAyLjI6ICAgNjA3MTcKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMTEKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMjEKKyMgICAgIFB5dGhvbiAyLjNhMDogNjIwMTEgKCEpCisjICAgICBQeXRob24gMi40YTA6IDYyMDQxCisjICAgICBQeXRob24gMi40YTM6IDYyMDUxCisjICAgICBQeXRob24gMi40YjE6IDYyMDYxCisjICAgICBQeXRob24gMi41YTA6IDYyMDcxCisjICAgICBQeXRob24gMi41YTA6IDYyMDgxIChhc3QtYnJhbmNoKQorIyAgICAgUHl0aG9uIDIuNWEwOiA2MjA5MSAod2l0aCkKKyMgICAgIFB5dGhvbiAyLjVhMDogNjIwOTIgKGNoYW5nZWQgV0lUSF9DTEVBTlVQIG9wY29kZSkKKyMgICAgIFB5dGhvbiAyLjViMzogNjIxMDEgKGZpeCB3cm9uZyBjb2RlOiBmb3IgeCwgaW4gLi4uKQorIyAgICAgUHl0aG9uIDIuNWIzOiA2MjExMSAoZml4IHdyb25nIGNvZGU6IHggKz0geWllbGQpCisjICAgICBQeXRob24gMi41YzE6IDYyMTIxIChmaXggd3JvbmcgbG5vdGFiIHdpdGggZm9yIGxvb3BzIGFuZAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmluZyBjb25zdGFudHMgdGhhdCBzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQpCisjICAgICBQeXRob24gMi41YzI6IDYyMTMxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLiBpbiBsaXN0Y29tcC9nZW5leHApCisjICAgICBQeXRob24gMi42YTA6IDYyMTUxIChwZWVwaG9sZSBvcHRpbWl6YXRpb25zIGFuZCBTVE9SRV9NQVAgb3Bjb2RlKQorIyAgICAgUHl0aG9uIDIuNmExOiA2MjE2MSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikKKyMgICAgIFB5dGhvbiAyLjdhMDogNjIxNzEgKG9wdGltaXplIGxpc3QgY29tcHJlaGVuc2lvbnMvY2hhbmdlIExJU1RfQVBQRU5EKQorIyAgICAgUHl0aG9uIDIuN2EwOiA2MjE4MSAob3B0aW1pemUgY29uZGl0aW9uYWwgYnJhbmNoZXM6CisjICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyb2R1Y2UgUE9QX0pVTVBfSUZfRkFMU0UgYW5kIFBPUF9KVU1QX0lGX1RSVUUpCisjICAgICBQeXRob24gMi43YTAgIDYyMTkxIChpbnRyb2R1Y2UgU0VUVVBfV0lUSCkKKyMgICAgIFB5dGhvbiAyLjdhMCAgNjIyMDEgKGludHJvZHVjZSBCVUlMRF9TRVQpCisjICAgICBQeXRob24gMi43YTAgIDYyMjExIChpbnRyb2R1Y2UgTUFQX0FERCBhbmQgU0VUX0FERCkKKyMgICAgIFB5dGhvbiAzMDAwOiAgIDMwMDAKKyMgICAgICAgICAgICAgICAgICAgIDMwMTAgKHJlbW92ZWQgVU5BUllfQ09OVkVSVCkKKyMgICAgICAgICAgICAgICAgICAgIDMwMjAgKGFkZGVkIEJVSUxEX1NFVCkKKyMgICAgICAgICAgICAgICAgICAgIDMwMzAgKGFkZGVkIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzKQorIyAgICAgICAgICAgICAgICAgICAgMzA0MCAoYWRkZWQgc2lnbmF0dXJlIGFubm90YXRpb25zKQorIyAgICAgICAgICAgICAgICAgICAgMzA1MCAocHJpbnQgYmVjb21lcyBhIGZ1bmN0aW9uKQorIyAgICAgICAgICAgICAgICAgICAgMzA2MCAoUEVQIDMxMTUgbWV0YWNsYXNzIHN5bnRheCkKKyMgICAgICAgICAgICAgICAgICAgIDMwNjEgKHN0cmluZyBsaXRlcmFscyBiZWNvbWUgdW5pY29kZSkKKyMgICAgICAgICAgICAgICAgICAgIDMwNzEgKFBFUCAzMTA5IHJhaXNlIGNoYW5nZXMpCisjICAgICAgICAgICAgICAgICAgICAzMDgxIChQRVAgMzEzNyBtYWtlIF9fZmlsZV9fIGFuZCBfX25hbWVfXyB1bmljb2RlKQorIyAgICAgICAgICAgICAgICAgICAgMzA5MSAoa2lsbCBzdHI4IGludGVybmluZykKKyMgICAgICAgICAgICAgICAgICAgIDMxMDEgKG1lcmdlIGZyb20gMi42YTAsIHNlZSA2MjE1MSkKKyMgICAgICAgICAgICAgICAgICAgIDMxMDMgKF9fZmlsZV9fIHBvaW50cyB0byBzb3VyY2UgZmlsZSkKKyMgICAgIFB5dGhvbiAzLjBhNDogMzExMSAoV0lUSF9DTEVBTlVQIG9wdGltaXphdGlvbikuCisjICAgICBQeXRob24gMy4wYTU6IDMxMzEgKGxleGljYWwgZXhjZXB0aW9uIHN0YWNraW5nLCBpbmNsdWRpbmcgUE9QX0VYQ0VQVCkKKyMgICAgIFB5dGhvbiAzLjFhMDogMzE0MSAob3B0aW1pemUgbGlzdCwgc2V0IGFuZCBkaWN0IGNvbXByZWhlbnNpb25zOgorIyAgICAgICAgICAgICBjaGFuZ2UgTElTVF9BUFBFTkQgYW5kIFNFVF9BREQsIGFkZCBNQVBfQUREKQorIyAgICAgUHl0aG9uIDMuMWEwOiAzMTUxIChvcHRpbWl6ZSBjb25kaXRpb25hbCBicmFuY2hlczoKKyMgICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQorIyAgICAgUHl0aG9uIDMuMmEwOiAzMTYwIChhZGQgU0VUVVBfV0lUSCkKKyMgICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCisjICAgICBQeXRob24gMy4yYTE6IDMxNzAgKGFkZCBEVVBfVE9QX1RXTywgcmVtb3ZlIERVUF9UT1BYIGFuZCBST1RfRk9VUikKKyMgICAgICAgICAgICAgICAgICAgdGFnOiBjcHl0aG9uLTMyCisjICAgICBQeXRob24gMy4yYTIgIDMxODAgKGFkZCBERUxFVEVfREVSRUYpCisjICAgICBQeXRob24gMy4zYTAgIDMxOTAgX19jbGFzc19fIHN1cGVyIGNsb3N1cmUgY2hhbmdlZAorIyAgICAgUHl0aG9uIDMuM2EwICAzMjAwIChfX3F1YWxuYW1lX18gYWRkZWQpCisjICAgICAgICAgICAgICAgICAgICAgIDMyMTAgKGFkZGVkIHNpemUgbW9kdWxvIDIqKjMyIHRvIHRoZSBweWMgaGVhZGVyKQorIyAgICAgUHl0aG9uIDMuM2ExICAzMjIwIChjaGFuZ2VkIFBFUCAzODAgaW1wbGVtZW50YXRpb24pCisjICAgICBQeXRob24gMy4zYTQgIDMyMzAgKHJldmVydCBjaGFuZ2VzIHRvIGltcGxpY2l0IF9fY2xhc3NfXyBjbG9zdXJlKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjUwIChldmFsdWF0ZSBwb3NpdGlvbmFsIGRlZmF1bHQgYXJndW1lbnRzIGJlZm9yZQorIyAgICAgICAgICAgICAgICAgICAgICAgIGtleXdvcmQtb25seSBkZWZhdWx0cykKKyMgICAgIFB5dGhvbiAzLjRhMSAgMzI2MCAoYWRkIExPQURfQ0xBU1NERVJFRjsgYWxsb3cgbG9jYWxzIG9mIGNsYXNzIHRvIG92ZXJyaWRlCisjICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSB2YXJzKQorIyAgICAgUHl0aG9uIDMuNGExICAzMjcwICh2YXJpb3VzIHR3ZWFrcyB0byB0aGUgX19jbGFzc19fIGNsb3N1cmUpCisjICAgICBQeXRob24gMy40YTEgIDMyODAgKHJlbW92ZSBpbXBsaWNpdCBjbGFzcyBhcmd1bWVudCkKKyMgICAgIFB5dGhvbiAzLjRhNCAgMzI5MCAoY2hhbmdlcyB0byBfX3F1YWxuYW1lX18gY29tcHV0YXRpb24pCisjICAgICBQeXRob24gMy40YTQgIDMzMDAgKG1vcmUgY2hhbmdlcyB0byBfX3F1YWxuYW1lX18gY29tcHV0YXRpb24pCisjICAgICBQeXRob24gMy40cmMyIDMzMTAgKGFsdGVyIF9fcXVhbG5hbWVfXyBjb21wdXRhdGlvbikKKyMKKyMgTUFHSUMgbXVzdCBjaGFuZ2Ugd2hlbmV2ZXIgdGhlIGJ5dGVjb2RlIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyIG1heSBubworIyBsb25nZXIgYmUgdW5kZXJzdG9vZCBieSBvbGRlciBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGV2YWwgbG9vcCAodXN1YWxseQorIyBkdWUgdG8gdGhlIGFkZGl0aW9uIG9mIG5ldyBvcGNvZGVzKS4KIAotVGhlIHZhbHVlIG9mIENSIGFuZCBMRiBpcyBpbmNvcnBvcmF0ZWQgc28gaWYgeW91IGV2ZXIgcmVhZCBvciB3cml0ZQotYSAucHljIGZpbGUgaW4gdGV4dCBtb2RlIHRoZSBtYWdpYyBudW1iZXIgd2lsbCBiZSB3cm9uZzsgYWxzbywgdGhlCi1BcHBsZSBNUFcgY29tcGlsZXIgc3dhcHMgdGhlaXIgdmFsdWVzLCBib3RjaGluZyBzdHJpbmcgY29uc3RhbnRzLgotCi1UaGUgbWFnaWMgbnVtYmVycyBtdXN0IGJlIHNwYWNlZCBhcGFydCBhdCBsZWFzdCAyIHZhbHVlcywgYXMgdGhlCi0tVSBpbnRlcnBldGVyIGZsYWcgd2lsbCBjYXVzZSBNQUdJQysxIGJlaW5nIHVzZWQuIFRoZXkgaGF2ZSBiZWVuCi1vZGQgbnVtYmVycyBmb3Igc29tZSB0aW1lIG5vdy4KLQotVGhlcmUgd2VyZSBhIHZhcmlldHkgb2Ygb2xkIHNjaGVtZXMgZm9yIHNldHRpbmcgdGhlIG1hZ2ljIG51bWJlci4KLVRoZSBjdXJyZW50IHdvcmtpbmcgc2NoZW1lIGlzIHRvIGluY3JlbWVudCB0aGUgcHJldmlvdXMgdmFsdWUgYnkKLTEwLgotCi1TdGFydGluZyB3aXRoIHRoZSBhZG9wdGlvbiBvZiBQRVAgMzE0NyBpbiBQeXRob24gMy4yLCBldmVyeSBidW1wIGluIG1hZ2ljCi1udW1iZXIgYWxzbyBpbmNsdWRlcyBhIG5ldyAibWFnaWMgdGFnIiwgaS5lLiBhIGh1bWFuIHJlYWRhYmxlIHN0cmluZyB1c2VkCi10byByZXByZXNlbnQgdGhlIG1hZ2ljIG51bWJlciBpbiBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllcy4gIFdoZW4geW91IGNoYW5nZQotdGhlIG1hZ2ljIG51bWJlciwgeW91IG11c3QgYWxzbyBzZXQgYSBuZXcgdW5pcXVlIG1hZ2ljIHRhZy4gIEdlbmVyYWxseSB0aGlzCi1jYW4gYmUgbmFtZWQgYWZ0ZXIgdGhlIFB5dGhvbiBtYWpvciB2ZXJzaW9uIG9mIHRoZSBtYWdpYyBudW1iZXIgYnVtcCwgYnV0Ci1pdCBjYW4gcmVhbGx5IGJlIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3MgZGlmZmVyZW50IHRoYW4gYW55dGhpbmcgZWxzZQotdGhhdCdzIGNvbWUgYmVmb3JlLiAgVGhlIHRhZ3MgYXJlIGluY2x1ZGVkIGluIHRoZSBmb2xsb3dpbmcgdGFibGUsIHN0YXJ0aW5nCi13aXRoIFB5dGhvbiAzLjJhMC4KLQotS25vd24gdmFsdWVzOgotIFB5dGhvbiAxLjU6ICAgMjAxMjEKLSBQeXRob24gMS41LjE6IDIwMTIxCi0gICAgUHl0aG9uIDEuNS4yOiAyMDEyMQotICAgIFB5dGhvbiAxLjY6ICAgNTA0MjgKLSAgICBQeXRob24gMi4wOiAgIDUwODIzCi0gICAgUHl0aG9uIDIuMC4xOiA1MDgyMwotICAgIFB5dGhvbiAyLjE6ICAgNjAyMDIKLSAgICBQeXRob24gMi4xLjE6IDYwMjAyCi0gICAgUHl0aG9uIDIuMS4yOiA2MDIwMgotICAgIFB5dGhvbiAyLjI6ICAgNjA3MTcKLSAgICBQeXRob24gMi4zYTA6IDYyMDExCi0gICAgUHl0aG9uIDIuM2EwOiA2MjAyMQotICAgIFB5dGhvbiAyLjNhMDogNjIwMTEgKCEpCi0gICAgUHl0aG9uIDIuNGEwOiA2MjA0MQotICAgIFB5dGhvbiAyLjRhMzogNjIwNTEKLSAgICBQeXRob24gMi40YjE6IDYyMDYxCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA3MQotICAgIFB5dGhvbiAyLjVhMDogNjIwODEgKGFzdC1icmFuY2gpCi0gICAgUHl0aG9uIDIuNWEwOiA2MjA5MSAod2l0aCkKLSAgICBQeXRob24gMi41YTA6IDYyMDkyIChjaGFuZ2VkIFdJVEhfQ0xFQU5VUCBvcGNvZGUpCi0gICAgUHl0aG9uIDIuNWIzOiA2MjEwMSAoZml4IHdyb25nIGNvZGU6IGZvciB4LCBpbiAuLi4pCi0gICAgUHl0aG9uIDIuNWIzOiA2MjExMSAoZml4IHdyb25nIGNvZGU6IHggKz0geWllbGQpCi0gICAgUHl0aG9uIDIuNWMxOiA2MjEyMSAoZml4IHdyb25nIGxub3RhYiB3aXRoIGZvciBsb29wcyBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yaW5nIGNvbnN0YW50cyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gcmVtb3ZlZCkKLSAgICBQeXRob24gMi41YzI6IDYyMTMxIChmaXggd3JvbmcgY29kZTogZm9yIHgsIGluIC4uLiBpbiBsaXN0Y29tcC9nZW5leHApCi0gICAgUHl0aG9uIDIuNmEwOiA2MjE1MSAocGVlcGhvbGUgb3B0aW1pemF0aW9ucyBhbmQgU1RPUkVfTUFQIG9wY29kZSkKLSAgICBQeXRob24gMi42YTE6IDYyMTYxIChXSVRIX0NMRUFOVVAgb3B0aW1pemF0aW9uKQotICAgIFB5dGhvbiAzMDAwOiAgIDMwMDAKLSAgICAgICAgICAgICAgICAgICAzMDEwIChyZW1vdmVkIFVOQVJZX0NPTlZFUlQpCi0gICAgICAgICAgICAgICAgICAgMzAyMCAoYWRkZWQgQlVJTERfU0VUKQotICAgICAgICAgICAgICAgICAgIDMwMzAgKGFkZGVkIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzKQotICAgICAgICAgICAgICAgICAgIDMwNDAgKGFkZGVkIHNpZ25hdHVyZSBhbm5vdGF0aW9ucykKLSAgICAgICAgICAgICAgICAgICAzMDUwIChwcmludCBiZWNvbWVzIGEgZnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgICAgMzA2MCAoUEVQIDMxMTUgbWV0YWNsYXNzIHN5bnRheCkKLSAgICAgICAgICAgICAgICAgICAzMDYxIChzdHJpbmcgbGl0ZXJhbHMgYmVjb21lIHVuaWNvZGUpCi0gICAgICAgICAgICAgICAgICAgMzA3MSAoUEVQIDMxMDkgcmFpc2UgY2hhbmdlcykKLSAgICAgICAgICAgICAgICAgICAzMDgxIChQRVAgMzEzNyBtYWtlIF9fZmlsZV9fIGFuZCBfX25hbWVfXyB1bmljb2RlKQotICAgICAgICAgICAgICAgICAgIDMwOTEgKGtpbGwgc3RyOCBpbnRlcm5pbmcpCi0gICAgICAgICAgICAgICAgICAgMzEwMSAobWVyZ2UgZnJvbSAyLjZhMCwgc2VlIDYyMTUxKQotICAgICAgICAgICAgICAgICAgIDMxMDMgKF9fZmlsZV9fIHBvaW50cyB0byBzb3VyY2UgZmlsZSkKLSAgICBQeXRob24gMy4wYTQ6IDMxMTEgKFdJVEhfQ0xFQU5VUCBvcHRpbWl6YXRpb24pLgotICAgIFB5dGhvbiAzLjBhNTogMzEzMSAobGV4aWNhbCBleGNlcHRpb24gc3RhY2tpbmcsIGluY2x1ZGluZyBQT1BfRVhDRVBUKQotICAgIFB5dGhvbiAzLjFhMDogMzE0MSAob3B0aW1pemUgbGlzdCwgc2V0IGFuZCBkaWN0IGNvbXByZWhlbnNpb25zOgotICAgICAgICAgICAgY2hhbmdlIExJU1RfQVBQRU5EIGFuZCBTRVRfQURELCBhZGQgTUFQX0FERCkKLSAgICBQeXRob24gMy4xYTA6IDMxNTEgKG9wdGltaXplIGNvbmRpdGlvbmFsIGJyYW5jaGVzOgotICAgICAgICAgICAgaW50cm9kdWNlIFBPUF9KVU1QX0lGX0ZBTFNFIGFuZCBQT1BfSlVNUF9JRl9UUlVFKQotICAgIFB5dGhvbiAzLjJhMDogMzE2MCAoYWRkIFNFVFVQX1dJVEgpCi0gICAgICAgICAgICAgICAgICB0YWc6IGNweXRob24tMzIKLSAgICBQeXRob24gMy4yYTE6IDMxNzAgKGFkZCBEVVBfVE9QX1RXTywgcmVtb3ZlIERVUF9UT1BYIGFuZCBST1RfRk9VUikKLSAgICAgICAgICAgICAgICAgIHRhZzogY3B5dGhvbi0zMgotICAgIFB5dGhvbiAzLjJhMiAgMzE4MCAoYWRkIERFTEVURV9ERVJFRikKLSAgICBQeXRob24gMy4zYTAgIDMxOTAgX19jbGFzc19fIHN1cGVyIGNsb3N1cmUgY2hhbmdlZAotICAgIFB5dGhvbiAzLjNhMCAgMzIwMCAoX19xdWFsbmFtZV9fIGFkZGVkKQotICAgICAgICAgICAgICAgICAgICAgMzIxMCAoYWRkZWQgc2l6ZSBtb2R1bG8gMioqMzIgdG8gdGhlIHB5YyBoZWFkZXIpCi0gICAgUHl0aG9uIDMuM2ExICAzMjIwIChjaGFuZ2VkIFBFUCAzODAgaW1wbGVtZW50YXRpb24pCi0gICAgUHl0aG9uIDMuM2E0ICAzMjMwIChyZXZlcnQgY2hhbmdlcyB0byBpbXBsaWNpdCBfX2NsYXNzX18gY2xvc3VyZSkKLQotTUFHSUMgbXVzdCBjaGFuZ2Ugd2hlbmV2ZXIgdGhlIGJ5dGVjb2RlIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyIG1heSBubwotbG9uZ2VyIGJlIHVuZGVyc3Rvb2QgYnkgb2xkZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBldmFsIGxvb3AgKHVzdWFsbHkKLWR1ZSB0byB0aGUgYWRkaXRpb24gb2YgbmV3IG9wY29kZXMpLgotCi0iIiIKLV9SQVdfTUFHSUNfTlVNQkVSID0gMzIzMCB8IG9yZCgnXHInKSA8PCAxNiB8IG9yZCgnXG4nKSA8PCAyNAotX01BR0lDX0JZVEVTID0gYnl0ZXMoX1JBV19NQUdJQ19OVU1CRVIgPj4gbiAmIDB4ZmYgZm9yIG4gaW4gcmFuZ2UoMCwgMjUsIDgpKQorTUFHSUNfTlVNQkVSID0gKDMzMTApLnRvX2J5dGVzKDIsICdsaXR0bGUnKSArIGInXHJcbicKK19SQVdfTUFHSUNfTlVNQkVSID0gaW50LmZyb21fYnl0ZXMoTUFHSUNfTlVNQkVSLCAnbGl0dGxlJykgICMgRm9yIGltcG9ydC5jCiAKIF9QWUNBQ0hFID0gJ19fcHljYWNoZV9fJwogCkBAIC00MzEsMTEgKzQ1MywxMSBAQAogICAgIGVsc2U6CiAgICAgICAgIHN1ZmZpeGVzID0gT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTCiAgICAgaGVhZCwgdGFpbCA9IF9wYXRoX3NwbGl0KHBhdGgpCi0gICAgYmFzZV9maWxlbmFtZSwgc2VwLCBfID0gdGFpbC5wYXJ0aXRpb24oJy4nKQorICAgIGJhc2UsIHNlcCwgcmVzdCA9IHRhaWwucnBhcnRpdGlvbignLicpCiAgICAgdGFnID0gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZwogICAgIGlmIHRhZyBpcyBOb25lOgogICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIE5vbmUnKQotICAgIGZpbGVuYW1lID0gJycuam9pbihbYmFzZV9maWxlbmFtZSwgc2VwLCB0YWcsIHN1ZmZpeGVzWzBdXSkKKyAgICBmaWxlbmFtZSA9ICcnLmpvaW4oWyhiYXNlIGlmIGJhc2UgZWxzZSByZXN0KSwgc2VwLCB0YWcsIHN1ZmZpeGVzWzBdXSkKICAgICByZXR1cm4gX3BhdGhfam9pbihoZWFkLCBfUFlDQUNIRSwgZmlsZW5hbWUpCiAKIApAQCAtNDgxLDYgKzUwMywxOCBAQAogICAgIHJldHVybiBzb3VyY2VfcGF0aCBpZiBfcGF0aF9pc2ZpbGUoc291cmNlX3BhdGgpIGVsc2UgYnl0ZWNvZGVfcGF0aAogCiAKK2RlZiBfY2FsY19tb2RlKHBhdGgpOgorICAgICIiIkNhbGN1bGF0ZSB0aGUgbW9kZSBwZXJtaXNzaW9ucyBmb3IgYSBieXRlY29kZSBmaWxlLiIiIgorICAgIHRyeToKKyAgICAgICAgbW9kZSA9IF9wYXRoX3N0YXQocGF0aCkuc3RfbW9kZQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICBtb2RlID0gMG82NjYKKyAgICAjIFdlIGFsd2F5cyBlbnN1cmUgd3JpdGUgYWNjZXNzIHNvIHdlIGNhbiB1cGRhdGUgY2FjaGVkIGZpbGVzCisgICAgIyBsYXRlciBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlcyBhcmUgcmVhZC1vbmx5IG9uIFdpbmRvd3MgKCM2MDc0KQorICAgIG1vZGUgfD0gMG8yMDAKKyAgICByZXR1cm4gbW9kZQorCisKIGRlZiBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UsICphcmdzLCB2ZXJib3NpdHk9MSk6CiAgICAgIiIiUHJpbnQgdGhlIG1lc3NhZ2UgdG8gc3RkZXJyIGlmIC12L1BZVEhPTlZFUkJPU0UgaXMgdHVybmVkIG9uLiIiIgogICAgIGlmIHN5cy5mbGFncy52ZXJib3NlID49IHZlcmJvc2l0eToKQEAgLTQ4OSw4NSArNTIzLDYgQEAKICAgICAgICAgcHJpbnQobWVzc2FnZS5mb3JtYXQoKmFyZ3MpLCBmaWxlPXN5cy5zdGRlcnIpCiAKIAotZGVmIHNldF9wYWNrYWdlKGZ4bik6Ci0gICAgIiIiU2V0IF9fcGFja2FnZV9fIG9uIHRoZSByZXR1cm5lZCBtb2R1bGUuIiIiCi0gICAgZGVmIHNldF9wYWNrYWdlX3dyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgbW9kdWxlID0gZnhuKCphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICByZXR1cm4gbW9kdWxlCi0gICAgX3dyYXAoc2V0X3BhY2thZ2Vfd3JhcHBlciwgZnhuKQotICAgIHJldHVybiBzZXRfcGFja2FnZV93cmFwcGVyCi0KLQotZGVmIHNldF9sb2FkZXIoZnhuKToKLSAgICAiIiJTZXQgX19sb2FkZXJfXyBvbiB0aGUgcmV0dXJuZWQgbW9kdWxlLiIiIgotICAgIGRlZiBzZXRfbG9hZGVyX3dyYXBwZXIoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgbW9kdWxlID0gZnhuKHNlbGYsICphcmdzLCAqKmt3YXJncykKLSAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpOgotICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIHJldHVybiBtb2R1bGUKLSAgICBfd3JhcChzZXRfbG9hZGVyX3dyYXBwZXIsIGZ4bikKLSAgICByZXR1cm4gc2V0X2xvYWRlcl93cmFwcGVyCi0KLQotZGVmIG1vZHVsZV9mb3JfbG9hZGVyKGZ4bik6Ci0gICAgIiIiRGVjb3JhdG9yIHRvIGhhbmRsZSBzZWxlY3RpbmcgdGhlIHByb3BlciBtb2R1bGUgZm9yIGxvYWRlcnMuCi0KLSAgICBUaGUgZGVjb3JhdGVkIGZ1bmN0aW9uIGlzIHBhc3NlZCB0aGUgbW9kdWxlIHRvIHVzZSBpbnN0ZWFkIG9mIHRoZSBtb2R1bGUKLSAgICBuYW1lLiBUaGUgbW9kdWxlIHBhc3NlZCBpbiB0byB0aGUgZnVuY3Rpb24gaXMgZWl0aGVyIGZyb20gc3lzLm1vZHVsZXMgaWYKLSAgICBpdCBhbHJlYWR5IGV4aXN0cyBvciBpcyBhIG5ldyBtb2R1bGUuIElmIHRoZSBtb2R1bGUgaXMgbmV3LCB0aGVuIF9fbmFtZV9fCi0gICAgaXMgc2V0IHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgbWV0aG9kLCBfX2xvYWRlcl9fIGlzIHNldCB0byBzZWxmLCBhbmQKLSAgICBfX3BhY2thZ2VfXyBpcyBzZXQgYWNjb3JkaW5nbHkgKGlmIHNlbGYuaXNfcGFja2FnZSgpIGlzIGRlZmluZWQpIHdpbGwgYmUgc2V0Ci0gICAgYmVmb3JlIGl0IGlzIHBhc3NlZCB0byB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uIChpZiBzZWxmLmlzX3BhY2thZ2UoKSBkb2VzCi0gICAgbm90IHdvcmsgZm9yIHRoZSBtb2R1bGUgaXQgd2lsbCBiZSBzZXQgcG9zdC1sb2FkKS4KLQotICAgIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYW5kIHRoZSBkZWNvcmF0b3IgY3JlYXRlZCB0aGUgbW9kdWxlIGl0IGlzCi0gICAgc3Vic2VxdWVudGx5IHJlbW92ZWQgZnJvbSBzeXMubW9kdWxlcy4KLQotICAgIFRoZSBkZWNvcmF0b3IgYXNzdW1lcyB0aGF0IHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gdGFrZXMgdGhlIG1vZHVsZSBuYW1lIGFzCi0gICAgdGhlIHNlY29uZCBhcmd1bWVudC4KLQotICAgICIiIgotICAgIGRlZiBtb2R1bGVfZm9yX2xvYWRlcl93cmFwcGVyKHNlbGYsIGZ1bGxuYW1lLCAqYXJncywgKiprd2FyZ3MpOgotICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlcy5nZXQoZnVsbG5hbWUpCi0gICAgICAgIGlzX3JlbG9hZCA9IG1vZHVsZSBpcyBub3QgTm9uZQotICAgICAgICBpZiBub3QgaXNfcmVsb2FkOgotICAgICAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgb3BlbigpIGlzIGNhbGxlZCBhcyB0aGUgJ2lvJyBtb2R1bGUKLSAgICAgICAgICAgICMgaW1wbGljaXRseSBpbXBvcnRzICdsb2NhbGUnIGFuZCB3b3VsZCBvdGhlcndpc2UgdHJpZ2dlciBhbgotICAgICAgICAgICAgIyBpbmZpbml0ZSBsb29wLgotICAgICAgICAgICAgbW9kdWxlID0gbmV3X21vZHVsZShmdWxsbmFtZSkKLSAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHB1dHRpbmcgdGhlIG1vZHVsZSBpbiBzeXMubW9kdWxlcwotICAgICAgICAgICAgIyAob3RoZXJ3aXNlIGFuIG9wdGltaXphdGlvbiBzaG9ydGN1dCBpbiBpbXBvcnQuYyBiZWNvbWVzIHdyb25nKQotICAgICAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBUcnVlCi0gICAgICAgICAgICBzeXMubW9kdWxlc1tmdWxsbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBzZWxmLmlzX3BhY2thZ2UoZnVsbG5hbWUpCi0gICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBUcnVlCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgSWYgX19wYWNrYWdlX18gd2FzIG5vdCBzZXQgYWJvdmUsIF9faW1wb3J0X18oKSB3aWxsIGRvIGl0IGxhdGVyLgotICAgICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBtb2R1bGUsICphcmdzLCAqKmt3YXJncykKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZDoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgbW9kdWxlLl9faW5pdGlhbGl6aW5nX18gPSBGYWxzZQotICAgIF93cmFwKG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIsIGZ4bikKLSAgICByZXR1cm4gbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcgotCi0KIGRlZiBfY2hlY2tfbmFtZShtZXRob2QpOgogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhhdCB0aGUgbW9kdWxlIGJlaW5nIHJlcXVlc3RlZCBtYXRjaGVzIHRoZSBvbmUgdGhlCiAgICAgbG9hZGVyIGNhbiBoYW5kbGUuCkBAIC01ODAsNyArNTM1LDcgQEAKICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgbmFtZSA9IHNlbGYubmFtZQogICAgICAgICBlbGlmIHNlbGYubmFtZSAhPSBuYW1lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImxvYWRlciBjYW5ub3QgaGFuZGxlICVzIiAlIG5hbWUsIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdsb2FkZXIgY2Fubm90IGhhbmRsZSAlcycgJSBuYW1lLCBuYW1lPW5hbWUpCiAgICAgICAgIHJldHVybiBtZXRob2Qoc2VsZiwgbmFtZSwgKmFyZ3MsICoqa3dhcmdzKQogICAgIF93cmFwKF9jaGVja19uYW1lX3dyYXBwZXIsIG1ldGhvZCkKICAgICByZXR1cm4gX2NoZWNrX25hbWVfd3JhcHBlcgpAQCAtNTkwLDcgKzU0NSw3IEBACiAgICAgIiIiRGVjb3JhdG9yIHRvIHZlcmlmeSB0aGUgbmFtZWQgbW9kdWxlIGlzIGJ1aWx0LWluLiIiIgogICAgIGRlZiBfcmVxdWlyZXNfYnVpbHRpbl93cmFwcGVyKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgaWYgZnVsbG5hbWUgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJ7fSBpcyBub3QgYSBidWlsdC1pbiBtb2R1bGUiLmZvcm1hdChmdWxsbmFtZSksCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigneyFyfSBpcyBub3QgYSBidWlsdC1pbiBtb2R1bGUnLmZvcm1hdChmdWxsbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIGZ1bGxuYW1lKQogICAgIF93cmFwKF9yZXF1aXJlc19idWlsdGluX3dyYXBwZXIsIGZ4bikKQEAgLTYwMSw3ICs1NTYsNyBAQAogICAgICIiIkRlY29yYXRvciB0byB2ZXJpZnkgdGhlIG5hbWVkIG1vZHVsZSBpcyBmcm96ZW4uIiIiCiAgICAgZGVmIF9yZXF1aXJlc19mcm96ZW5fd3JhcHBlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIGlmIG5vdCBfaW1wLmlzX2Zyb3plbihmdWxsbmFtZSk6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigie30gaXMgbm90IGEgZnJvemVuIG1vZHVsZSIuZm9ybWF0KGZ1bGxuYW1lKSwKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7IXJ9IGlzIG5vdCBhIGZyb3plbiBtb2R1bGUnLmZvcm1hdChmdWxsbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKQogICAgICAgICByZXR1cm4gZnhuKHNlbGYsIGZ1bGxuYW1lKQogICAgIF93cmFwKF9yZXF1aXJlc19mcm96ZW5fd3JhcHBlciwgZnhuKQpAQCAtNjEwLDE3ICs1NjUsNjgyIEBACiAKIGRlZiBfZmluZF9tb2R1bGVfc2hpbShzZWxmLCBmdWxsbmFtZSk6CiAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlIGJ5IGRlbGVnYXRpbmcgdG8KLSAgICBzZWxmLmZpbmRfbG9hZGVyKCkuIiIiCisgICAgc2VsZi5maW5kX2xvYWRlcigpLgorCisgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBmaW5kZXIuZmluZF9zcGVjKCkuCisKKyAgICAiIiIKICAgICAjIENhbGwgZmluZF9sb2FkZXIoKS4gSWYgaXQgcmV0dXJucyBhIHN0cmluZyAoaW5kaWNhdGluZyB0aGlzCiAgICAgIyBpcyBhIG5hbWVzcGFjZSBwYWNrYWdlIHBvcnRpb24pLCBnZW5lcmF0ZSBhIHdhcm5pbmcgYW5kCiAgICAgIyByZXR1cm4gTm9uZS4KICAgICBsb2FkZXIsIHBvcnRpb25zID0gc2VsZi5maW5kX2xvYWRlcihmdWxsbmFtZSkKICAgICBpZiBsb2FkZXIgaXMgTm9uZSBhbmQgbGVuKHBvcnRpb25zKToKLSAgICAgICAgbXNnID0gIk5vdCBpbXBvcnRpbmcgZGlyZWN0b3J5IHt9OiBtaXNzaW5nIF9faW5pdF9fIgorICAgICAgICBtc2cgPSAnTm90IGltcG9ydGluZyBkaXJlY3Rvcnkge306IG1pc3NpbmcgX19pbml0X18nCiAgICAgICAgIF93YXJuaW5ncy53YXJuKG1zZy5mb3JtYXQocG9ydGlvbnNbMF0pLCBJbXBvcnRXYXJuaW5nKQogICAgIHJldHVybiBsb2FkZXIKIAogCitkZWYgX2xvYWRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpOgorICAgICIiIkxvYWQgdGhlIHNwZWNpZmllZCBtb2R1bGUgaW50byBzeXMubW9kdWxlcyBhbmQgcmV0dXJuIGl0LgorCisgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBsb2FkZXIuZXhlY19tb2R1bGUgaW5zdGVhZC4KKworICAgICIiIgorICAgIHNwZWMgPSBzcGVjX2Zyb21fbG9hZGVyKGZ1bGxuYW1lLCBzZWxmKQorICAgIG1ldGhvZHMgPSBfU3BlY01ldGhvZHMoc3BlYykKKyAgICBpZiBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgICAgIG1ldGhvZHMuZXhlYyhtb2R1bGUpCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tmdWxsbmFtZV0KKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gbWV0aG9kcy5sb2FkKCkKKworCitkZWYgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLCBzb3VyY2Vfc3RhdHM9Tm9uZSwgbmFtZT1Ob25lLCBwYXRoPU5vbmUpOgorICAgICIiIlZhbGlkYXRlIHRoZSBoZWFkZXIgb2YgdGhlIHBhc3NlZC1pbiBieXRlY29kZSBhZ2FpbnN0IHNvdXJjZV9zdGF0cyAoaWYKKyAgICBnaXZlbikgYW5kIHJldHVybmluZyB0aGUgYnl0ZWNvZGUgdGhhdCBjYW4gYmUgY29tcGlsZWQgYnkgY29tcGlsZSgpLgorCisgICAgQWxsIG90aGVyIGFyZ3VtZW50cyBhcmUgdXNlZCB0byBlbmhhbmNlIGVycm9yIHJlcG9ydGluZy4KKworICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCB3aGVuIHRoZSBtYWdpYyBudW1iZXIgaXMgaW5jb3JyZWN0IG9yIHRoZSBieXRlY29kZSBpcworICAgIGZvdW5kIHRvIGJlIHN0YWxlLiBFT0ZFcnJvciBpcyByYWlzZWQgd2hlbiB0aGUgZGF0YSBpcyBmb3VuZCB0byBiZQorICAgIHRydW5jYXRlZC4KKworICAgICIiIgorICAgIGV4Y19kZXRhaWxzID0ge30KKyAgICBpZiBuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1snbmFtZSddID0gbmFtZQorICAgIGVsc2U6CisgICAgICAgICMgVG8gcHJldmVudCBoYXZpbmcgdG8gbWFrZSBhbGwgbWVzc2FnZXMgaGF2ZSBhIGNvbmRpdGlvbmFsIG5hbWUuCisgICAgICAgIG5hbWUgPSAnPGJ5dGVjb2RlPicKKyAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgorICAgICAgICBleGNfZGV0YWlsc1sncGF0aCddID0gcGF0aAorICAgIG1hZ2ljID0gZGF0YVs6NF0KKyAgICByYXdfdGltZXN0YW1wID0gZGF0YVs0OjhdCisgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCisgICAgaWYgbWFnaWMgIT0gTUFHSUNfTlVNQkVSOgorICAgICAgICBtZXNzYWdlID0gJ2JhZCBtYWdpYyBudW1iZXIgaW4geyFyfTogeyFyfScuZm9ybWF0KG5hbWUsIG1hZ2ljKQorICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCd7fScsIG1lc3NhZ2UpCisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsICoqZXhjX2RldGFpbHMpCisgICAgZWxpZiBsZW4ocmF3X3RpbWVzdGFtcCkgIT0gNDoKKyAgICAgICAgbWVzc2FnZSA9ICdyZWFjaGVkIEVPRiB3aGlsZSByZWFkaW5nIHRpbWVzdGFtcCBpbiB7IXJ9Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30nLCBtZXNzYWdlKQorICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQorICAgIGVsaWYgbGVuKHJhd19zaXplKSAhPSA0OgorICAgICAgICBtZXNzYWdlID0gJ3JlYWNoZWQgRU9GIHdoaWxlIHJlYWRpbmcgc2l6ZSBvZiBzb3VyY2UgaW4geyFyfScuZm9ybWF0KG5hbWUpCisgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3t9JywgbWVzc2FnZSkKKyAgICAgICAgcmFpc2UgRU9GRXJyb3IobWVzc2FnZSkKKyAgICBpZiBzb3VyY2Vfc3RhdHMgaXMgbm90IE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvdXJjZV9tdGltZSA9IGludChzb3VyY2Vfc3RhdHNbJ210aW1lJ10pCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIF9yX2xvbmcocmF3X3RpbWVzdGFtcCkgIT0gc291cmNlX210aW1lOgorICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3t9JywgbWVzc2FnZSkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCAqKmV4Y19kZXRhaWxzKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzb3VyY2Vfc2l6ZSA9IHNvdXJjZV9zdGF0c1snc2l6ZSddICYgMHhGRkZGRkZGRgorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHshcn0nLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmV4Y19kZXRhaWxzKQorICAgIHJldHVybiBkYXRhWzEyOl0KKworCitkZWYgX2NvbXBpbGVfYnl0ZWNvZGUoZGF0YSwgbmFtZT1Ob25lLCBieXRlY29kZV9wYXRoPU5vbmUsIHNvdXJjZV9wYXRoPU5vbmUpOgorICAgICIiIkNvbXBpbGUgYnl0ZWNvZGUgYXMgcmV0dXJuZWQgYnkgX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcigpLiIiIgorICAgIGNvZGUgPSBtYXJzaGFsLmxvYWRzKGRhdGEpCisgICAgaWYgaXNpbnN0YW5jZShjb2RlLCBfY29kZV90eXBlKToKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7IXJ9JywgYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgaWYgc291cmNlX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfaW1wLl9maXhfY29fZmlsZW5hbWUoY29kZSwgc291cmNlX3BhdGgpCisgICAgICAgIHJldHVybiBjb2RlCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ05vbi1jb2RlIG9iamVjdCBpbiB7IXJ9Jy5mb3JtYXQoYnl0ZWNvZGVfcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQorCitkZWYgX2NvZGVfdG9fYnl0ZWNvZGUoY29kZSwgbXRpbWU9MCwgc291cmNlX3NpemU9MCk6CisgICAgIiIiQ29tcGlsZSBhIGNvZGUgb2JqZWN0IGludG8gYnl0ZWNvZGUgZm9yIHdyaXRpbmcgb3V0IHRvIGEgYnl0ZS1jb21waWxlZAorICAgIGZpbGUuIiIiCisgICAgZGF0YSA9IGJ5dGVhcnJheShNQUdJQ19OVU1CRVIpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhtdGltZSkpCisgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2Vfc2l6ZSkpCisgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlKSkKKyAgICByZXR1cm4gZGF0YQorCisKK2RlZiBkZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyk6CisgICAgIiIiRGVjb2RlIGJ5dGVzIHJlcHJlc2VudGluZyBzb3VyY2UgY29kZSBhbmQgcmV0dXJuIHRoZSBzdHJpbmcuCisKKyAgICBVbml2ZXJzYWwgbmV3bGluZSBzdXBwb3J0IGlzIHVzZWQgaW4gdGhlIGRlY29kaW5nLgorICAgICIiIgorICAgIGltcG9ydCB0b2tlbml6ZSAgIyBUbyBhdm9pZCBib290c3RyYXAgaXNzdWVzLgorICAgIHNvdXJjZV9ieXRlc19yZWFkbGluZSA9IF9pby5CeXRlc0lPKHNvdXJjZV9ieXRlcykucmVhZGxpbmUKKyAgICBlbmNvZGluZyA9IHRva2VuaXplLmRldGVjdF9lbmNvZGluZyhzb3VyY2VfYnl0ZXNfcmVhZGxpbmUpCisgICAgbmV3bGluZV9kZWNvZGVyID0gX2lvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkKKyAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKKworCisjIE1vZHVsZSBzcGVjaWZpY2F0aW9ucyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2RlZiBfbW9kdWxlX3JlcHIobW9kdWxlKToKKyAgICAjIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiBNb2R1bGVUeXBlX19yZXByX18oKS4KKyAgICBsb2FkZXIgPSBnZXRhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nLCBOb25lKQorICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnbW9kdWxlX3JlcHInKToKKyAgICAgICAgIyBBcyBzb29uIGFzIEJ1aWx0aW5JbXBvcnRlciwgRnJvemVuSW1wb3J0ZXIsIGFuZCBOYW1lc3BhY2VMb2FkZXIKKyAgICAgICAgIyBkcm9wIHRoZWlyIGltcGxlbWVudGF0aW9ucyBmb3IgbW9kdWxlX3JlcHIuIHdlIGNhbiBhZGQgYQorICAgICAgICAjIGRlcHJlY2F0aW9uIHdhcm5pbmcgaGVyZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIGxvYWRlci5tb2R1bGVfcmVwcihtb2R1bGUpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBfU3BlY01ldGhvZHMoc3BlYykubW9kdWxlX3JlcHIoKQorCisgICAgIyBXZSBjb3VsZCB1c2UgbW9kdWxlLl9fY2xhc3NfXy5fX25hbWVfXyBpbnN0ZWFkIG9mICdtb2R1bGUnIGluIHRoZQorICAgICMgdmFyaW91cyByZXByIHBlcm11dGF0aW9ucy4KKyAgICB0cnk6CisgICAgICAgIG5hbWUgPSBtb2R1bGUuX19uYW1lX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIG5hbWUgPSAnPycKKyAgICB0cnk6CisgICAgICAgIGZpbGVuYW1lID0gbW9kdWxlLl9fZmlsZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9PicuZm9ybWF0KG5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoeyFyfSk+Jy5mb3JtYXQobmFtZSwgbG9hZGVyKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IGZyb20geyFyfT4nLmZvcm1hdChuYW1lLCBmaWxlbmFtZSkKKworCitjbGFzcyBfaW5zdGFsbGVkX3NhZmVseToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGUpOgorICAgICAgICBzZWxmLl9tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgc2VsZi5fc3BlYyA9IG1vZHVsZS5fX3NwZWNfXworCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgZG9uZSBiZWZvcmUgcHV0dGluZyB0aGUgbW9kdWxlIGluIHN5cy5tb2R1bGVzCisgICAgICAgICMgKG90aGVyd2lzZSBhbiBvcHRpbWl6YXRpb24gc2hvcnRjdXQgaW4gaW1wb3J0LmMgYmVjb21lcworICAgICAgICAjIHdyb25nKQorICAgICAgICBzZWxmLl9zcGVjLl9pbml0aWFsaXppbmcgPSBUcnVlCisgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYuX3NwZWMubmFtZV0gPSBzZWxmLl9tb2R1bGUKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLl9zcGVjCisgICAgICAgICAgICBpZiBhbnkoYXJnIGlzIG5vdCBOb25lIGZvciBhcmcgaW4gYXJncyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbc3BlYy5uYW1lXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdpbXBvcnQgeyFyfSAjIHshcn0nLCBzcGVjLm5hbWUsIHNwZWMubG9hZGVyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc3BlYy5faW5pdGlhbGl6aW5nID0gRmFsc2UKKworCitjbGFzcyBNb2R1bGVTcGVjOgorICAgICIiIlRoZSBzcGVjaWZpY2F0aW9uIGZvciBhIG1vZHVsZSwgdXNlZCBmb3IgbG9hZGluZy4KKworICAgIEEgbW9kdWxlJ3Mgc3BlYyBpcyB0aGUgc291cmNlIGZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbW9kdWxlLiAgRm9yCisgICAgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIG1vZHVsZSwgaW5jbHVkaW5nIHNvdXJjZSwgdXNlIHRoZSBzcGVjJ3MKKyAgICBsb2FkZXIuCisKKyAgICBgbmFtZWAgaXMgdGhlIGFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZS4gIGBsb2FkZXJgIGlzIHRoZSBsb2FkZXIKKyAgICB0byB1c2Ugd2hlbiBsb2FkaW5nIHRoZSBtb2R1bGUuICBgcGFyZW50YCBpcyB0aGUgbmFtZSBvZiB0aGUKKyAgICBwYWNrYWdlIHRoZSBtb2R1bGUgaXMgaW4uICBUaGUgcGFyZW50IGlzIGRlcml2ZWQgZnJvbSB0aGUgbmFtZS4KKworICAgIGBpc19wYWNrYWdlYCBkZXRlcm1pbmVzIGlmIHRoZSBtb2R1bGUgaXMgY29uc2lkZXJlZCBhIHBhY2thZ2Ugb3IKKyAgICBub3QuICBPbiBtb2R1bGVzIHRoaXMgaXMgcmVmbGVjdGVkIGJ5IHRoZSBgX19wYXRoX19gIGF0dHJpYnV0ZS4KKworICAgIGBvcmlnaW5gIGlzIHRoZSBzcGVjaWZpYyBsb2NhdGlvbiB1c2VkIGJ5IHRoZSBsb2FkZXIgZnJvbSB3aGljaCB0bworICAgIGxvYWQgdGhlIG1vZHVsZSwgaWYgdGhhdCBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUuICBXaGVuIGZpbGVuYW1lIGlzCisgICAgc2V0LCBvcmlnaW4gd2lsbCBtYXRjaC4KKworICAgIGBoYXNfbG9jYXRpb25gIGluZGljYXRlcyB0aGF0IGEgc3BlYydzICJvcmlnaW4iIHJlZmxlY3RzIGEgbG9jYXRpb24uCisgICAgV2hlbiB0aGlzIGlzIFRydWUsIGBfX2ZpbGVfX2AgYXR0cmlidXRlIG9mIHRoZSBtb2R1bGUgaXMgc2V0LgorCisgICAgYGNhY2hlZGAgaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZSwgaWYgYW55LiAgSXQKKyAgICBjb3JyZXNwb25kcyB0byB0aGUgYF9fY2FjaGVkX19gIGF0dHJpYnV0ZS4KKworICAgIGBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9uc2AgaXMgdGhlIHNlcXVlbmNlIG9mIHBhdGggZW50cmllcyB0bworICAgIHNlYXJjaCB3aGVuIGltcG9ydGluZyBzdWJtb2R1bGVzLiAgSWYgc2V0LCBpc19wYWNrYWdlIHNob3VsZCBiZQorICAgIFRydWUtLWFuZCBGYWxzZSBvdGhlcndpc2UuCisKKyAgICBQYWNrYWdlcyBhcmUgc2ltcGx5IG1vZHVsZXMgdGhhdCAobWF5KSBoYXZlIHN1Ym1vZHVsZXMuICBJZiBhIHNwZWMKKyAgICBoYXMgYSBub24tTm9uZSB2YWx1ZSBpbiBgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnNgLCB0aGUgaW1wb3J0CisgICAgc3lzdGVtIHdpbGwgY29uc2lkZXIgbW9kdWxlcyBsb2FkZWQgZnJvbSB0aGUgc3BlYyBhcyBwYWNrYWdlcy4KKworICAgIE9ubHkgZmluZGVycyAoc2VlIGltcG9ydGxpYi5hYmMuTWV0YVBhdGhGaW5kZXIgYW5kCisgICAgaW1wb3J0bGliLmFiYy5QYXRoRW50cnlGaW5kZXIpIHNob3VsZCBtb2RpZnkgTW9kdWxlU3BlYyBpbnN0YW5jZXMuCisKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBsb2FkZXIsICosIG9yaWdpbj1Ob25lLCBsb2FkZXJfc3RhdGU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLmxvYWRlciA9IGxvYWRlcgorICAgICAgICBzZWxmLm9yaWdpbiA9IG9yaWdpbgorICAgICAgICBzZWxmLmxvYWRlcl9zdGF0ZSA9IGxvYWRlcl9zdGF0ZQorICAgICAgICBzZWxmLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gW10gaWYgaXNfcGFja2FnZSBlbHNlIE5vbmUKKworICAgICAgICAjIGZpbGUtbG9jYXRpb24gYXR0cmlidXRlcworICAgICAgICBzZWxmLl9zZXRfZmlsZWF0dHIgPSBGYWxzZQorICAgICAgICBzZWxmLl9jYWNoZWQgPSBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGFyZ3MgPSBbJ25hbWU9eyFyfScuZm9ybWF0KHNlbGYubmFtZSksCisgICAgICAgICAgICAgICAgJ2xvYWRlcj17IXJ9Jy5mb3JtYXQoc2VsZi5sb2FkZXIpXQorICAgICAgICBpZiBzZWxmLm9yaWdpbiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCdvcmlnaW49eyFyfScuZm9ybWF0KHNlbGYub3JpZ2luKSkKKyAgICAgICAgaWYgc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCdzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz17fScKKyAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQoc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucykpCisgICAgICAgIHJldHVybiAne30oe30pJy5mb3JtYXQoc2VsZi5fX2NsYXNzX18uX19uYW1lX18sICcsICcuam9pbihhcmdzKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzbXNsID0gc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gKHNlbGYubmFtZSA9PSBvdGhlci5uYW1lIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRlciA9PSBvdGhlci5sb2FkZXIgYW5kCisgICAgICAgICAgICAgICAgICAgIHNlbGYub3JpZ2luID09IG90aGVyLm9yaWdpbiBhbmQKKyAgICAgICAgICAgICAgICAgICAgc21zbCA9PSBvdGhlci5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWNoZWQgPT0gb3RoZXIuY2FjaGVkIGFuZAorICAgICAgICAgICAgICAgICAgICBzZWxmLmhhc19sb2NhdGlvbiA9PSBvdGhlci5oYXNfbG9jYXRpb24pCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGNhY2hlZChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2FjaGVkIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLm9yaWdpbiBpcyBub3QgTm9uZSBhbmQgc2VsZi5fc2V0X2ZpbGVhdHRyOgorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5vcmlnaW4KKyAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZS5lbmRzd2l0aCh0dXBsZShTT1VSQ0VfU1VGRklYRVMpKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkID0gY2FjaGVfZnJvbV9zb3VyY2UoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoQllURUNPREVfU1VGRklYRVMpKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2FjaGVkID0gZmlsZW5hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZAorCisgICAgQGNhY2hlZC5zZXR0ZXIKKyAgICBkZWYgY2FjaGVkKHNlbGYsIGNhY2hlZCk6CisgICAgICAgIHNlbGYuX2NhY2hlZCA9IGNhY2hlZAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHBhcmVudChzZWxmKToKKyAgICAgICAgIiIiVGhlIG5hbWUgb2YgdGhlIG1vZHVsZSdzIHBhcmVudC4iIiIKKyAgICAgICAgaWYgc2VsZi5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYubmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zZXRfZmlsZWF0dHIKKworICAgIEBoYXNfbG9jYXRpb24uc2V0dGVyCisgICAgZGVmIGhhc19sb2NhdGlvbihzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NldF9maWxlYXR0ciA9IGJvb2wodmFsdWUpCisKKworZGVmIHNwZWNfZnJvbV9sb2FkZXIobmFtZSwgbG9hZGVyLCAqLCBvcmlnaW49Tm9uZSwgaXNfcGFja2FnZT1Ob25lKToKKyAgICAiIiJSZXR1cm4gYSBtb2R1bGUgc3BlYyBiYXNlZCBvbiB2YXJpb3VzIGxvYWRlciBtZXRob2RzLiIiIgorICAgIGlmIGhhc2F0dHIobG9hZGVyLCAnZ2V0X2ZpbGVuYW1lJyk6CisgICAgICAgIGlmIGlzX3BhY2thZ2UgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihuYW1lLCBsb2FkZXI9bG9hZGVyKQorICAgICAgICBzZWFyY2ggPSBbXSBpZiBpc19wYWNrYWdlIGVsc2UgTm9uZQorICAgICAgICByZXR1cm4gc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9hZGVyPWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPXNlYXJjaCkKKworICAgIGlmIGlzX3BhY2thZ2UgaXMgTm9uZToKKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdpc19wYWNrYWdlJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IGxvYWRlci5pc19wYWNrYWdlKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IE5vbmUgICMgYWthLCB1bmRlZmluZWQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBGYWxzZQorCisgICAgcmV0dXJuIE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49b3JpZ2luLCBpc19wYWNrYWdlPWlzX3BhY2thZ2UpCisKKworX1BPUFVMQVRFID0gb2JqZWN0KCkKKworCitkZWYgc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgbG9jYXRpb249Tm9uZSwgKiwgbG9hZGVyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9X1BPUFVMQVRFKToKKyAgICAiIiJSZXR1cm4gYSBtb2R1bGUgc3BlYyBiYXNlZCBvbiBhIGZpbGUgbG9jYXRpb24uCisKKyAgICBUbyBpbmRpY2F0ZSB0aGF0IHRoZSBtb2R1bGUgaXMgYSBwYWNrYWdlLCBzZXQKKyAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyB0byBhIGxpc3Qgb2YgZGlyZWN0b3J5IHBhdGhzLiAgQW4KKyAgICBlbXB0eSBsaXN0IGlzIHN1ZmZpY2llbnQsIHRob3VnaCBpdHMgbm90IG90aGVyd2lzZSB1c2VmdWwgdG8gdGhlCisgICAgaW1wb3J0IHN5c3RlbS4KKworICAgIFRoZSBsb2FkZXIgbXVzdCB0YWtlIGEgc3BlYyBhcyBpdHMgb25seSBfX2luaXRfXygpIGFyZy4KKworICAgICIiIgorICAgIGlmIGxvY2F0aW9uIGlzIE5vbmU6CisgICAgICAgICMgVGhlIGNhbGxlciBtYXkgc2ltcGx5IHdhbnQgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkIGxvY2F0aW9uLQorICAgICAgICAjIG9yaWVudGVkIHNwZWMuICBTbyB3ZSBzZXQgdGhlIGxvY2F0aW9uIHRvIGEgYm9ndXMgdmFsdWUgYW5kCisgICAgICAgICMgZmlsbCBpbiBhcyBtdWNoIGFzIHdlIGNhbi4KKyAgICAgICAgbG9jYXRpb24gPSAnPHVua25vd24+JworICAgICAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2dldF9maWxlbmFtZScpOgorICAgICAgICAgICAgIyBFeGVjdXRpb25Mb2FkZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IGxvYWRlci5nZXRfZmlsZW5hbWUobmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAjIElmIHRoZSBsb2NhdGlvbiBpcyBvbiB0aGUgZmlsZXN5c3RlbSwgYnV0IGRvZXNuJ3QgYWN0dWFsbHkgZXhpc3QsCisgICAgIyB3ZSBjb3VsZCByZXR1cm4gTm9uZSBoZXJlLCBpbmRpY2F0aW5nIHRoYXQgdGhlIGxvY2F0aW9uIGlzIG5vdAorICAgICMgdmFsaWQuICBIb3dldmVyLCB3ZSBkb24ndCBoYXZlIGEgZ29vZCB3YXkgb2YgdGVzdGluZyBzaW5jZSBhbgorICAgICMgaW5kaXJlY3QgbG9jYXRpb24gKGUuZy4gYSB6aXAgZmlsZSBvciBVUkwpIHdpbGwgbG9vayBsaWtlIGEKKyAgICAjIG5vbi1leGlzdGVudCBmaWxlIHJlbGF0aXZlIHRvIHRoZSBmaWxlc3lzdGVtLgorCisgICAgc3BlYyA9IE1vZHVsZVNwZWMobmFtZSwgbG9hZGVyLCBvcmlnaW49bG9jYXRpb24pCisgICAgc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgIyBQaWNrIGEgbG9hZGVyIGlmIG9uZSB3YXNuJ3QgcHJvdmlkZWQuCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIGZvciBsb2FkZXJfY2xhc3MsIHN1ZmZpeGVzIGluIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpOgorICAgICAgICAgICAgaWYgbG9jYXRpb24uZW5kc3dpdGgodHVwbGUoc3VmZml4ZXMpKToKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBsb2FkZXJfY2xhc3MobmFtZSwgbG9jYXRpb24pCisgICAgICAgICAgICAgICAgc3BlYy5sb2FkZXIgPSBsb2FkZXIKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgU2V0IHN1Ym1vZHVsZV9zZWFyY2hfcGF0aHMgYXBwcm9wcmlhdGVseS4KKyAgICBpZiBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBfUE9QVUxBVEU6CisgICAgICAgICMgQ2hlY2sgdGhlIGxvYWRlci4KKyAgICAgICAgaWYgaGFzYXR0cihsb2FkZXIsICdpc19wYWNrYWdlJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaXNfcGFja2FnZSA9IGxvYWRlci5pc19wYWNrYWdlKG5hbWUpCisgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gW10KKyAgICBlbHNlOgorICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMKKyAgICBpZiBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID09IFtdOgorICAgICAgICBpZiBsb2NhdGlvbjoKKyAgICAgICAgICAgIGRpcm5hbWUgPSBfcGF0aF9zcGxpdChsb2NhdGlvbilbMF0KKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMuYXBwZW5kKGRpcm5hbWUpCisKKyAgICByZXR1cm4gc3BlYworCisKK2RlZiBfc3BlY19mcm9tX21vZHVsZShtb2R1bGUsIGxvYWRlcj1Ob25lLCBvcmlnaW49Tm9uZSk6CisgICAgIyBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciB1c2UgaW4gX3NldHVwKCkuCisgICAgdHJ5OgorICAgICAgICBzcGVjID0gbW9kdWxlLl9fc3BlY19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgZWxzZToKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBuYW1lID0gbW9kdWxlLl9fbmFtZV9fCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlciA9IG1vZHVsZS5fX2xvYWRlcl9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgbG9hZGVyIHdpbGwgc3RheSBOb25lLgorICAgICAgICAgICAgcGFzcworICAgIHRyeToKKyAgICAgICAgbG9jYXRpb24gPSBtb2R1bGUuX19maWxlX18KKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGxvY2F0aW9uID0gTm9uZQorICAgIGlmIG9yaWdpbiBpcyBOb25lOgorICAgICAgICBpZiBsb2NhdGlvbiBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9yaWdpbiA9IGxvYWRlci5fT1JJR0lOCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgb3JpZ2luID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3JpZ2luID0gbG9jYXRpb24KKyAgICB0cnk6CisgICAgICAgIGNhY2hlZCA9IG1vZHVsZS5fX2NhY2hlZF9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBjYWNoZWQgPSBOb25lCisgICAgdHJ5OgorICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IGxpc3QobW9kdWxlLl9fcGF0aF9fKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBOb25lCisKKyAgICBzcGVjID0gTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIsIG9yaWdpbj1vcmlnaW4pCisgICAgc3BlYy5fc2V0X2ZpbGVhdHRyID0gRmFsc2UgaWYgbG9jYXRpb24gaXMgTm9uZSBlbHNlIFRydWUKKyAgICBzcGVjLmNhY2hlZCA9IGNhY2hlZAorICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgIHJldHVybiBzcGVjCisKKworY2xhc3MgX1NwZWNNZXRob2RzOgorCisgICAgIiIiQ29udmVuaWVuY2Ugd3JhcHBlciBhcm91bmQgc3BlYyBvYmplY3RzIHRvIHByb3ZpZGUgc3BlYy1zcGVjaWZpYworICAgIG1ldGhvZHMuIiIiCisKKyAgICAjIFRoZSB2YXJpb3VzIHNwZWNfZnJvbV8qIGZ1bmN0aW9ucyBjb3VsZCBiZSBtYWRlIGZhY3RvcnkgbWV0aG9kcyBoZXJlLgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICBzZWxmLnNwZWMgPSBzcGVjCisKKyAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgcmVwciB0byB1c2UgZm9yIHRoZSBtb2R1bGUuIiIiCisgICAgICAgICMgV2UgbW9zdGx5IHJlcGxpY2F0ZSBfbW9kdWxlX3JlcHIoKSB1c2luZyB0aGUgc3BlYyBhdHRyaWJ1dGVzLgorICAgICAgICBzcGVjID0gc2VsZi5zcGVjCisgICAgICAgIG5hbWUgPSAnPycgaWYgc3BlYy5uYW1lIGlzIE5vbmUgZWxzZSBzcGVjLm5hbWUKKyAgICAgICAgaWYgc3BlYy5vcmlnaW4gaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNwZWMubG9hZGVyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gKHshcn0pPicuZm9ybWF0KG5hbWUsIHNwZWMubG9hZGVyKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3BlYy5oYXNfbG9jYXRpb246CisgICAgICAgICAgICAgICAgcmV0dXJuICc8bW9kdWxlIHshcn0gZnJvbSB7IXJ9PicuZm9ybWF0KG5hbWUsIHNwZWMub3JpZ2luKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoe30pPicuZm9ybWF0KHNwZWMubmFtZSwgc3BlYy5vcmlnaW4pCisKKyAgICBkZWYgaW5pdF9tb2R1bGVfYXR0cnMoc2VsZiwgbW9kdWxlLCAqLCBfb3ZlcnJpZGU9RmFsc2UsIF9mb3JjZV9uYW1lPVRydWUpOgorICAgICAgICAiIiJTZXQgdGhlIG1vZHVsZSdzIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgQWxsIG1pc3NpbmcgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgd2lsbCBiZSBzZXQuICBIZXJlCisgICAgICAgIGlzIGhvdyB0aGUgc3BlYyBhdHRyaWJ1dGVzIG1hcCBvbnRvIHRoZSBtb2R1bGU6CisKKyAgICAgICAgc3BlYy5uYW1lIC0+IG1vZHVsZS5fX25hbWVfXworICAgICAgICBzcGVjLmxvYWRlciAtPiBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICBzcGVjLnBhcmVudCAtPiBtb2R1bGUuX19wYWNrYWdlX18KKyAgICAgICAgc3BlYyAtPiBtb2R1bGUuX19zcGVjX18KKworICAgICAgICBPcHRpb25hbDoKKyAgICAgICAgc3BlYy5vcmlnaW4gLT4gbW9kdWxlLl9fZmlsZV9fIChpZiBzcGVjLnNldF9maWxlYXR0ciBpcyB0cnVlKQorICAgICAgICBzcGVjLmNhY2hlZCAtPiBtb2R1bGUuX19jYWNoZWRfXyAoaWYgX19maWxlX18gYWxzbyBzZXQpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgLT4gbW9kdWxlLl9fcGF0aF9fIChpZiBzZXQpCisKKyAgICAgICAgIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKworICAgICAgICAjIFRoZSBwYXNzZWQgaW4gbW9kdWxlIG1heSBiZSBub3Qgc3VwcG9ydCBhdHRyaWJ1dGUgYXNzaWdubWVudCwKKyAgICAgICAgIyBpbiB3aGljaCBjYXNlIHdlIHNpbXBseSBkb24ndCBzZXQgdGhlIGF0dHJpYnV0ZXMuCisKKyAgICAgICAgIyBfX25hbWVfXworICAgICAgICBpZiAoX292ZXJyaWRlIG9yIF9mb3JjZV9uYW1lIG9yCisgICAgICAgICAgICBnZXRhdHRyKG1vZHVsZSwgJ19fbmFtZV9fJywgTm9uZSkgaXMgTm9uZSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fbmFtZV9fID0gc3BlYy5uYW1lCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgX19sb2FkZXJfXworICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCisgICAgICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIEEgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBoYWNrLgorICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IF9OYW1lc3BhY2VMb2FkZXIuX19uZXdfXyhfTmFtZXNwYWNlTG9hZGVyKQorICAgICAgICAgICAgICAgICAgICBsb2FkZXIuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX3BhY2thZ2VfXworICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gc3BlYy5wYXJlbnQKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBfX3NwZWNfXworICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIF9fcGF0aF9fCisgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgaWYgc3BlYy5oYXNfbG9jYXRpb246CisgICAgICAgICAgICAjIF9fZmlsZV9fCisgICAgICAgICAgICBpZiBfb3ZlcnJpZGUgb3IgZ2V0YXR0cihtb2R1bGUsICdfX2ZpbGVfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzcGVjLm9yaWdpbgorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAjIF9fY2FjaGVkX18KKyAgICAgICAgICAgIGlmIF9vdmVycmlkZSBvciBnZXRhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nLCBOb25lKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNwZWMuY2FjaGVkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNwZWMuY2FjaGVkCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiBjcmVhdGUoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBtb2R1bGUgdG8gYmUgbG9hZGVkLgorCisgICAgICAgIFRoZSBpbXBvcnQtcmVsYXRlZCBtb2R1bGUgYXR0cmlidXRlcyBhcmUgYWxzbyBzZXQgd2l0aCB0aGUKKyAgICAgICAgYXBwcm9wcmlhdGUgdmFsdWVzIGZyb20gdGhlIHNwZWMuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKyAgICAgICAgIyBUeXBpY2FsbHkgbG9hZGVycyB3aWxsIG5vdCBpbXBsZW1lbnQgY3JlYXRlX21vZHVsZSgpLgorICAgICAgICBpZiBoYXNhdHRyKHNwZWMubG9hZGVyLCAnY3JlYXRlX21vZHVsZScpOgorICAgICAgICAgICAgIyBJZiBjcmVhdGVfbW9kdWxlKCkgcmV0dXJucyBgTm9uZWAgaXQgbWVhbnMgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICMgbW9kdWxlIGNyZWF0aW9uIHNob3VsZCBiZSB1c2VkLgorICAgICAgICAgICAgbW9kdWxlID0gc3BlYy5sb2FkZXIuY3JlYXRlX21vZHVsZShzcGVjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIG9wZW4oKSBpcyBldmVyIGNhbGxlZCBhcyB0aGUgJ2lvJworICAgICAgICAgICAgIyBtb2R1bGUgaW1wbGljaXRseSBpbXBvcnRzICdsb2NhbGUnIGFuZCB3b3VsZCBvdGhlcndpc2UKKyAgICAgICAgICAgICMgdHJpZ2dlciBhbiBpbmZpbml0ZSBsb29wLgorICAgICAgICAgICAgbW9kdWxlID0gX25ld19tb2R1bGUoc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCisgICAgZGVmIF9leGVjKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICIiIkRvIGV2ZXJ5dGhpbmcgbmVjZXNzYXJ5IHRvIGV4ZWN1dGUgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgbmFtZXNwYWNlIG9mIGBtb2R1bGVgIGlzIHVzZWQgYXMgdGhlIHRhcmdldCBvZiBleGVjdXRpb24uCisgICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgdGhlIGxvYWRlcidzIGBleGVjX21vZHVsZSgpYCBtZXRob2QuCisKKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorCisgICAgIyBVc2VkIGJ5IGltcG9ydGxpYi5yZWxvYWQoKSBhbmQgX2xvYWRfbW9kdWxlX3NoaW0oKS4KKyAgICBkZWYgZXhlYyhzZWxmLCBtb2R1bGUpOgorICAgICAgICAiIiJFeGVjdXRlIHRoZSBzcGVjIGluIGFuIGV4aXN0aW5nIG1vZHVsZSdzIG5hbWVzcGFjZS4iIiIKKyAgICAgICAgbmFtZSA9IHNlbGYuc3BlYy5uYW1lCisgICAgICAgIF9pbXAuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIobmFtZSk6CisgICAgICAgICAgICBpZiBzeXMubW9kdWxlcy5nZXQobmFtZSkgaXMgbm90IG1vZHVsZToKKyAgICAgICAgICAgICAgICBtc2cgPSAnbW9kdWxlIHshcn0gbm90IGluIHN5cy5tb2R1bGVzJy5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKKyAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ21pc3NpbmcgbG9hZGVyJywgbmFtZT1zZWxmLnNwZWMubmFtZSkKKyAgICAgICAgICAgICAgICAjIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICAgICAgc2VsZi5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUsIF9vdmVycmlkZT1UcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgICAgIHNlbGYuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlLCBfb3ZlcnJpZGU9VHJ1ZSkKKyAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYuc3BlYy5sb2FkZXIsICdleGVjX21vZHVsZScpOgorICAgICAgICAgICAgICAgICMgKGlzc3VlMTk3MTMpIE9uY2UgQnVpbHRpbkltcG9ydGVyIGFuZCBFeHRlbnNpb25GaWxlTG9hZGVyCisgICAgICAgICAgICAgICAgIyBoYXZlIGV4ZWNfbW9kdWxlKCkgaW1wbGVtZW50ZWQsIHdlIGNhbiBhZGQgYSBkZXByZWNhdGlvbgorICAgICAgICAgICAgICAgICMgd2FybmluZyBoZXJlLgorICAgICAgICAgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlYyhtb2R1bGUpCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXQorCisgICAgZGVmIF9sb2FkX2JhY2t3YXJkX2NvbXBhdGlibGUoc2VsZik6CisgICAgICAgICMgKGlzc3VlMTk3MTMpIE9uY2UgQnVpbHRpbkltcG9ydGVyIGFuZCBFeHRlbnNpb25GaWxlTG9hZGVyCisgICAgICAgICMgaGF2ZSBleGVjX21vZHVsZSgpIGltcGxlbWVudGVkLCB3ZSBjYW4gYWRkIGEgZGVwcmVjYXRpb24KKyAgICAgICAgIyB3YXJuaW5nIGhlcmUuCisgICAgICAgIHNwZWMgPSBzZWxmLnNwZWMKKyAgICAgICAgc3BlYy5sb2FkZXIubG9hZF9tb2R1bGUoc3BlYy5uYW1lKQorICAgICAgICAjIFRoZSBtb2R1bGUgbXVzdCBiZSBpbiBzeXMubW9kdWxlcyBhdCB0aGlzIHBvaW50IQorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tzcGVjLm5hbWVdCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzcGVjLmxvYWRlcgorICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3BhY2thZ2VfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBTaW5jZSBtb2R1bGUuX19wYXRoX18gbWF5IG5vdCBsaW5lIHVwIHdpdGgKKyAgICAgICAgICAgICAgICAjIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9wYXRocywgd2UgY2FuJ3QgbmVjZXNzYXJpbHkgcmVseQorICAgICAgICAgICAgICAgICMgb24gc3BlYy5wYXJlbnQgaGVyZS4KKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzcGVjLm5hbWUucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fc3BlY19fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICByZXR1cm4gbW9kdWxlCisKKyAgICBkZWYgX2xvYWRfdW5sb2NrZWQoc2VsZik6CisgICAgICAgICMgQSBoZWxwZXIgZm9yIGRpcmVjdCB1c2UgYnkgdGhlIGltcG9ydCBzeXN0ZW0uCisgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIG5vdCBhIG5hbWVzcGFjZSBwYWNrYWdlCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLnNwZWMubG9hZGVyLCAnZXhlY19tb2R1bGUnKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9iYWNrd2FyZF9jb21wYXRpYmxlKCkKKworICAgICAgICBtb2R1bGUgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIHdpdGggX2luc3RhbGxlZF9zYWZlbHkobW9kdWxlKToKKyAgICAgICAgICAgIGlmIHNlbGYuc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ21pc3NpbmcgbG9hZGVyJywgbmFtZT1zZWxmLnNwZWMubmFtZSkKKyAgICAgICAgICAgICAgICAjIEEgbmFtZXNwYWNlIHBhY2thZ2Ugc28gZG8gbm90aGluZy4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZXhlYyhtb2R1bGUpCisKKyAgICAgICAgIyBXZSBkb24ndCBlbnN1cmUgdGhhdCB0aGUgaW1wb3J0LXJlbGF0ZWQgbW9kdWxlIGF0dHJpYnV0ZXMgZ2V0CisgICAgICAgICMgc2V0IGluIHRoZSBzeXMubW9kdWxlcyByZXBsYWNlbWVudCBjYXNlLiAgU3VjaCBtb2R1bGVzIGFyZSBvbgorICAgICAgICAjIHRoZWlyIG93bi4KKyAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgIyBBIG1ldGhvZCB1c2VkIGR1cmluZyB0ZXN0aW5nIG9mIF9sb2FkX3VubG9ja2VkKCkgYW5kIGJ5CisgICAgIyBfbG9hZF9tb2R1bGVfc2hpbSgpLgorICAgIGRlZiBsb2FkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYSBuZXcgbW9kdWxlIG9iamVjdCwgbG9hZGVkIGJ5IHRoZSBzcGVjJ3MgbG9hZGVyLgorCisgICAgICAgIFRoZSBtb2R1bGUgaXMgbm90IGFkZGVkIHRvIGl0cyBwYXJlbnQuCisKKyAgICAgICAgSWYgYSBtb2R1bGUgaXMgYWxyZWFkeSBpbiBzeXMubW9kdWxlcywgdGhhdCBleGlzdGluZyBtb2R1bGUgZ2V0cworICAgICAgICBjbG9iYmVyZWQuCisKKyAgICAgICAgIiIiCisgICAgICAgIF9pbXAuYWNxdWlyZV9sb2NrKCkKKyAgICAgICAgd2l0aCBfTW9kdWxlTG9ja01hbmFnZXIoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xvYWRfdW5sb2NrZWQoKQorCisKK2RlZiBfZml4X3VwX21vZHVsZShucywgbmFtZSwgcGF0aG5hbWUsIGNwYXRobmFtZT1Ob25lKToKKyAgICAjIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdCgpLgorICAgIGxvYWRlciA9IG5zLmdldCgnX19sb2FkZXJfXycpCisgICAgc3BlYyA9IG5zLmdldCgnX19zcGVjX18nKQorICAgIGlmIG5vdCBsb2FkZXI6CisgICAgICAgIGlmIHNwZWM6CisgICAgICAgICAgICBsb2FkZXIgPSBzcGVjLmxvYWRlcgorICAgICAgICBlbGlmIHBhdGhuYW1lID09IGNwYXRobmFtZToKKyAgICAgICAgICAgIGxvYWRlciA9IFNvdXJjZWxlc3NGaWxlTG9hZGVyKG5hbWUsIHBhdGhuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9hZGVyID0gU291cmNlRmlsZUxvYWRlcihuYW1lLCBwYXRobmFtZSkKKyAgICBpZiBub3Qgc3BlYzoKKyAgICAgICAgc3BlYyA9IHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKG5hbWUsIHBhdGhuYW1lLCBsb2FkZXI9bG9hZGVyKQorICAgIHRyeToKKyAgICAgICAgbnNbJ19fc3BlY19fJ10gPSBzcGVjCisgICAgICAgIG5zWydfX2xvYWRlcl9fJ10gPSBsb2FkZXIKKyAgICAgICAgbnNbJ19fZmlsZV9fJ10gPSBwYXRobmFtZQorICAgICAgICBuc1snX19jYWNoZWRfXyddID0gY3BhdGhuYW1lCisgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgIyBOb3QgaW1wb3J0YW50IGVub3VnaCB0byByZXBvcnQuCisgICAgICAgIHBhc3MKIAogCiAjIExvYWRlcnMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC02MzQsOSArMTI1NCwyMyBAQAogCiAgICAgIiIiCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1vZHVsZV9yZXByKG1vZHVsZSk6CisgICAgICAgICIiIlJldHVybiByZXByIGZvciB0aGUgbW9kdWxlLgorCisgICAgICAgIFRoZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvZXMgdGhlIGpvYiBpdHNlbGYuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IChidWlsdC1pbik+Jy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1vZHVsZV9yZXByKGNscywgbW9kdWxlKToKLSAgICAgICAgcmV0dXJuICI8bW9kdWxlICd7fScgKGJ1aWx0LWluKT4iLmZvcm1hdChtb2R1bGUuX19uYW1lX18pCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlmIF9pbXAuaXNfYnVpbHRpbihmdWxsbmFtZSk6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgY2xzLCBvcmlnaW49J2J1aWx0LWluJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKQEAgLTY0NCwyNCArMTI3OCwyMyBAQAogCiAgICAgICAgIElmICdwYXRoJyBpcyBldmVyIHNwZWNpZmllZCB0aGVuIHRoZSBzZWFyY2ggaXMgY29uc2lkZXJlZCBhIGZhaWx1cmUuCiAKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCiAgICAgICAgICIiIgotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIGNscyBpZiBfaW1wLmlzX2J1aWx0aW4oZnVsbG5hbWUpIGVsc2UgTm9uZQorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyIGlmIHNwZWMgaXMgbm90IE5vbmUgZWxzZSBOb25lCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBAc2V0X3BhY2thZ2UKLSAgICBAc2V0X2xvYWRlcgogICAgIEBfcmVxdWlyZXNfYnVpbHRpbgogICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiTG9hZCBhIGJ1aWx0LWluIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2J1aWx0aW4sIGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBmdWxsbmFtZSBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbZnVsbG5hbWVdCi0gICAgICAgICAgICByYWlzZQorICAgICAgICAjIE9uY2UgYW4gZXhlY19tb2R1bGUoKSBpbXBsZW1lbnRhdGlvbiBpcyBhZGRlZCB3ZSBjYW4gYWxzbworICAgICAgICAjIGFkZCBhIGRlcHJlY2F0aW9uIHdhcm5pbmcgaGVyZS4KKyAgICAgICAgd2l0aCBfTWFuYWdlUmVsb2FkKGZ1bGxuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2J1aWx0aW4sIGZ1bGxuYW1lKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGNscworICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSAnJworICAgICAgICByZXR1cm4gbW9kdWxlCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBAX3JlcXVpcmVzX2J1aWx0aW4KQEAgLTY5MSwzMSArMTMyNCw0OCBAQAogCiAgICAgIiIiCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG1vZHVsZV9yZXByKG0pOgorICAgICAgICAiIiJSZXR1cm4gcmVwciBmb3IgdGhlIG1vZHVsZS4KKworICAgICAgICBUaGUgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBUaGUgaW1wb3J0IG1hY2hpbmVyeSBkb2VzIHRoZSBqb2IgaXRzZWxmLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gJzxtb2R1bGUgeyFyfSAoZnJvemVuKT4nLmZvcm1hdChtLl9fbmFtZV9fKQorCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIG1vZHVsZV9yZXByKGNscywgbSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChmcm96ZW4pPiIuZm9ybWF0KG0uX19uYW1lX18pCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgaWYgX2ltcC5pc19mcm96ZW4oZnVsbG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIoZnVsbG5hbWUsIGNscywgb3JpZ2luPSdmcm96ZW4nKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICAiIiJGaW5kIGEgZnJvemVuIG1vZHVsZS4iIiIKKyAgICAgICAgIiIiRmluZCBhIGZyb3plbiBtb2R1bGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gY2xzIGlmIF9pbXAuaXNfZnJvemVuKGZ1bGxuYW1lKSBlbHNlIE5vbmUKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhlY19tb2R1bGUobW9kdWxlKToKKyAgICAgICAgbmFtZSA9IG1vZHVsZS5fX3NwZWNfXy5uYW1lCisgICAgICAgIGlmIG5vdCBfaW1wLmlzX2Zyb3plbihuYW1lKToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCd7IXJ9IGlzIG5vdCBhIGZyb3plbiBtb2R1bGUnLmZvcm1hdChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSkKKyAgICAgICAgY29kZSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5nZXRfZnJvemVuX29iamVjdCwgbmFtZSkKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisKICAgICBAY2xhc3NtZXRob2QKLSAgICBAc2V0X3BhY2thZ2UKLSAgICBAc2V0X2xvYWRlcgotICAgIEBfcmVxdWlyZXNfZnJvemVuCiAgICAgZGVmIGxvYWRfbW9kdWxlKGNscywgZnVsbG5hbWUpOgotICAgICAgICAiIiJMb2FkIGEgZnJvemVuIG1vZHVsZS4iIiIKLSAgICAgICAgaXNfcmVsb2FkID0gZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXMKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbSA9IF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoX2ltcC5pbml0X2Zyb3plbiwgZnVsbG5hbWUpCi0gICAgICAgICAgICAjIExldCBvdXIgb3duIG1vZHVsZV9yZXByKCkgbWV0aG9kIHByb2R1Y2UgYSBzdWl0YWJsZSByZXByLgotICAgICAgICAgICAgZGVsIG0uX19maWxlX18KLSAgICAgICAgICAgIHJldHVybiBtCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIGlmIG5vdCBpc19yZWxvYWQgYW5kIGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgICIiIkxvYWQgYSBmcm96ZW4gbW9kdWxlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZXhlY19tb2R1bGUoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2xvYWRfbW9kdWxlX3NoaW0oY2xzLCBmdWxsbmFtZSkKIAogICAgIEBjbGFzc21ldGhvZAogICAgIEBfcmVxdWlyZXNfZnJvemVuCkBAIC03MzgsMjIgKzEzODgsMjEgQEAKIAogY2xhc3MgV2luZG93c1JlZ2lzdHJ5RmluZGVyOgogCi0gICAgIiIiTWV0YSBwYXRoIGZpbmRlciBmb3IgbW9kdWxlcyBkZWNsYXJlZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4KLSAgICAiIiIKKyAgICAiIiJNZXRhIHBhdGggZmluZGVyIGZvciBtb2R1bGVzIGRlY2xhcmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiIiIgogCiAgICAgUkVHSVNUUllfS0VZID0gKAotICAgICAgICAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxce3N5c192ZXJzaW9ufSIKLSAgICAgICAgIlxcTW9kdWxlc1xce2Z1bGxuYW1lfSIpCisgICAgICAgICdTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259JworICAgICAgICAnXFxNb2R1bGVzXFx7ZnVsbG5hbWV9JykKICAgICBSRUdJU1RSWV9LRVlfREVCVUcgPSAoCi0gICAgICAgICJTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259IgotICAgICAgICAiXFxNb2R1bGVzXFx7ZnVsbG5hbWV9XFxEZWJ1ZyIpCisgICAgICAgICdTb2Z0d2FyZVxcUHl0aG9uXFxQeXRob25Db3JlXFx7c3lzX3ZlcnNpb259JworICAgICAgICAnXFxNb2R1bGVzXFx7ZnVsbG5hbWV9XFxEZWJ1ZycpCiAgICAgREVCVUdfQlVJTEQgPSBGYWxzZSAgIyBDaGFuZ2VkIGluIF9zZXR1cCgpCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX29wZW5fcmVnaXN0cnkoY2xzLCBrZXkpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXR1cm4gX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9DVVJSRU5UX1VTRVIsIGtleSkKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9MT0NBTF9NQUNISU5FLCBrZXkpCiAKICAgICBAY2xhc3NtZXRob2QKQEAgLTc2NiwyNCArMTQxNSwzOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c192ZXJzaW9uPXN5cy52ZXJzaW9uWzozXSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBjbHMuX29wZW5fcmVnaXN0cnkoa2V5KSBhcyBoa2V5OgotICAgICAgICAgICAgICAgIGZpbGVwYXRoID0gX3dpbnJlZy5RdWVyeVZhbHVlKGhrZXksICIiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgICAgIGZpbGVwYXRoID0gX3dpbnJlZy5RdWVyeVZhbHVlKGhrZXksICcnKQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHJldHVybiBmaWxlcGF0aAogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIkZpbmQgbW9kdWxlIG5hbWVkIGluIHRoZSByZWdpc3RyeS4iIiIKKyAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgogICAgICAgICBmaWxlcGF0aCA9IGNscy5fc2VhcmNoX3JlZ2lzdHJ5KGZ1bGxuYW1lKQogICAgICAgICBpZiBmaWxlcGF0aCBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgX29zLnN0YXQoZmlsZXBhdGgpCisgICAgICAgICAgICBfcGF0aF9zdGF0KGZpbGVwYXRoKQogICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIGZvciBsb2FkZXIsIHN1ZmZpeGVzIGluIF9nZXRfc3VwcG9ydGVkX2ZpbGVfbG9hZGVycygpOgogICAgICAgICAgICAgaWYgZmlsZXBhdGguZW5kc3dpdGgodHVwbGUoc3VmZml4ZXMpKToKLSAgICAgICAgICAgICAgICByZXR1cm4gbG9hZGVyKGZ1bGxuYW1lLCBmaWxlcGF0aCkKKyAgICAgICAgICAgICAgICBzcGVjID0gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgbG9hZGVyKGZ1bGxuYW1lLCBmaWxlcGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPWZpbGVwYXRoKQorICAgICAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiRmluZCBtb2R1bGUgbmFtZWQgaW4gdGhlIHJlZ2lzdHJ5LgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZXhlY19tb2R1bGUoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjLmxvYWRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKIAogCiBjbGFzcyBfTG9hZGVyQmFzaWNzOgpAQCAtNzk5LDc0ICsxNDYyLDE1IEBACiAgICAgICAgIHRhaWxfbmFtZSA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVsyXQogICAgICAgICByZXR1cm4gZmlsZW5hbWVfYmFzZSA9PSAnX19pbml0X18nIGFuZCB0YWlsX25hbWUgIT0gJ19faW5pdF9fJwogCi0gICAgZGVmIF9ieXRlc19mcm9tX2J5dGVjb2RlKHNlbGYsIGZ1bGxuYW1lLCBkYXRhLCBieXRlY29kZV9wYXRoLCBzb3VyY2Vfc3RhdHMpOgotICAgICAgICAiIiJSZXR1cm4gdGhlIG1hcnNoYWxsZWQgYnl0ZXMgZnJvbSBieXRlY29kZSwgdmVyaWZ5aW5nIHRoZSBtYWdpYwotICAgICAgICBudW1iZXIsIHRpbWVzdGFtcCBhbmQgc291cmNlIHNpemUgYWxvbmcgdGhlIHdheS4KKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgIiIiRXhlY3V0ZSB0aGUgbW9kdWxlLiIiIgorICAgICAgICBjb2RlID0gc2VsZi5nZXRfY29kZShtb2R1bGUuX19uYW1lX18pCisgICAgICAgIGlmIGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdjYW5ub3QgbG9hZCBtb2R1bGUgeyFyfSB3aGVuIGdldF9jb2RlKCkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldHVybnMgTm9uZScuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykpCisgICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZSwgbW9kdWxlLl9fZGljdF9fKQogCi0gICAgICAgIElmIHNvdXJjZV9zdGF0cyBpcyBOb25lIHRoZW4gc2tpcCB0aGUgdGltZXN0YW1wIGNoZWNrLgotCi0gICAgICAgICIiIgotICAgICAgICBtYWdpYyA9IGRhdGFbOjRdCi0gICAgICAgIHJhd190aW1lc3RhbXAgPSBkYXRhWzQ6OF0KLSAgICAgICAgcmF3X3NpemUgPSBkYXRhWzg6MTJdCi0gICAgICAgIGlmIG1hZ2ljICE9IF9NQUdJQ19CWVRFUzoKLSAgICAgICAgICAgIG1zZyA9ICdiYWQgbWFnaWMgbnVtYmVyIGluIHshcn06IHshcn0nLmZvcm1hdChmdWxsbmFtZSwgbWFnaWMpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1zZykKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZywgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICBlbGlmIGxlbihyYXdfdGltZXN0YW1wKSAhPSA0OgotICAgICAgICAgICAgbWVzc2FnZSA9ICdiYWQgdGltZXN0YW1wIGluIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKG1lc3NhZ2UpCi0gICAgICAgICAgICByYWlzZSBFT0ZFcnJvcihtZXNzYWdlKQotICAgICAgICBlbGlmIGxlbihyYXdfc2l6ZSkgIT0gNDoKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAnYmFkIHNpemUgaW4ge30nLmZvcm1hdChmdWxsbmFtZSkKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKG1lc3NhZ2UpCi0gICAgICAgIGlmIHNvdXJjZV9zdGF0cyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc291cmNlX3N0YXRzWydtdGltZSddKQotICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgX3JfbG9uZyhyYXdfdGltZXN0YW1wKSAhPSBzb3VyY2VfbXRpbWU6Ci0gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSAnYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Jy5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UobWVzc2FnZSkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobWVzc2FnZSwgbmFtZT1mdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvdXJjZV9zaXplID0gc291cmNlX3N0YXRzWydzaXplJ10gJiAweEZGRkZGRkZGCi0gICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBfcl9sb25nKHJhd19zaXplKSAhPSBzb3VyY2Vfc2l6ZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiYnl0ZWNvZGUgaXMgc3RhbGUgZm9yIHt9Ii5mb3JtYXQoZnVsbG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1mdWxsbmFtZSwgcGF0aD1ieXRlY29kZV9wYXRoKQotICAgICAgICAjIENhbid0IHJldHVybiB0aGUgY29kZSBvYmplY3QgYXMgZXJyb3JzIGZyb20gbWFyc2hhbCBsb2FkaW5nIG5lZWQgdG8KLSAgICAgICAgIyBwcm9wYWdhdGUgZXZlbiB3aGVuIHNvdXJjZSBpcyBhdmFpbGFibGUuCi0gICAgICAgIHJldHVybiBkYXRhWzEyOl0KLQotICAgIEBtb2R1bGVfZm9yX2xvYWRlcgotICAgIGRlZiBfbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlLCAqLCBzb3VyY2VsZXNzPUZhbHNlKToKLSAgICAgICAgIiIiSGVscGVyIGZvciBsb2FkX21vZHVsZSBhYmxlIHRvIGhhbmRsZSBlaXRoZXIgc291cmNlIG9yIHNvdXJjZWxlc3MKLSAgICAgICAgbG9hZGluZy4iIiIKLSAgICAgICAgbmFtZSA9IG1vZHVsZS5fX25hbWVfXwotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuZ2V0X2NvZGUobmFtZSkKLSAgICAgICAgbW9kdWxlLl9fZmlsZV9fID0gc2VsZi5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgaWYgbm90IHNvdXJjZWxlc3M6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBjYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IG1vZHVsZS5fX2ZpbGVfXwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBtb2R1bGUuX19maWxlX18KLSAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbmFtZQotICAgICAgICBpZiBzZWxmLmlzX3BhY2thZ2UobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQobW9kdWxlLl9fZmlsZV9fKVswXV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX3BhY2thZ2VfXy5ycGFydGl0aW9uKCcuJylbMF0KLSAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCi0gICAgICAgIF9jYWxsX3dpdGhfZnJhbWVzX3JlbW92ZWQoZXhlYywgY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIGxvYWRfbW9kdWxlID0gX2xvYWRfbW9kdWxlX3NoaW0KIAogCiBjbGFzcyBTb3VyY2VMb2FkZXIoX0xvYWRlckJhc2ljcyk6CkBAIC04NzQsOCArMTQ3OCwxMCBAQAogICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgdGhhdCByZXR1cm5zIHRoZSBtb2RpZmljYXRpb24gdGltZSAoYW4gaW50KSBmb3IgdGhlCiAgICAgICAgIHNwZWNpZmllZCBwYXRoLCB3aGVyZSBwYXRoIGlzIGEgc3RyLgorCisgICAgICAgIFJhaXNlcyBJT0Vycm9yIHdoZW4gdGhlIHBhdGggY2Fubm90IGJlIGhhbmRsZWQuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIHJhaXNlIElPRXJyb3IKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2QgcmV0dXJuaW5nIGEgbWV0YWRhdGEgZGljdCBmb3IgdGhlIHNwZWNpZmllZCBwYXRoCkBAIC04ODYsNiArMTQ5Miw3IEBACiAgICAgICAgIC0gJ3NpemUnIChvcHRpb25hbCkgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgdGhlIGxvYWRlciB0byByZWFkIGJ5dGVjb2RlIGZpbGVzLgorICAgICAgICBSYWlzZXMgSU9FcnJvciB3aGVuIHRoZSBwYXRoIGNhbm5vdCBiZSBoYW5kbGVkLgogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnBhdGhfbXRpbWUocGF0aCl9CiAKQEAgLTkwMywzMiArMTUxMCwyNiBAQAogICAgICAgICAiIiJPcHRpb25hbCBtZXRob2Qgd2hpY2ggd3JpdGVzIGRhdGEgKGJ5dGVzKSB0byBhIGZpbGUgcGF0aCAoYSBzdHIpLgogCiAgICAgICAgIEltcGxlbWVudGluZyB0aGlzIG1ldGhvZCBhbGxvd3MgZm9yIHRoZSB3cml0aW5nIG9mIGJ5dGVjb2RlIGZpbGVzLgotCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgSW5zcGVjdExvYWRlci5nZXRfc291cmNlLiIiIgotICAgICAgICBpbXBvcnQgdG9rZW5pemUKICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLmdldF9kYXRhKHBhdGgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGV4YzoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJzb3VyY2Ugbm90IGF2YWlsYWJsZSB0aHJvdWdoIGdldF9kYXRhKCkiLAorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleGM6CisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignc291cmNlIG5vdCBhdmFpbGFibGUgdGhyb3VnaCBnZXRfZGF0YSgpJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpIGZyb20gZXhjCi0gICAgICAgIHJlYWRzb3VyY2UgPSBfaW8uQnl0ZXNJTyhzb3VyY2VfYnl0ZXMpLnJlYWRsaW5lCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGVuY29kaW5nID0gdG9rZW5pemUuZGV0ZWN0X2VuY29kaW5nKHJlYWRzb3VyY2UpCi0gICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRldGVjdCBlbmNvZGluZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YwotICAgICAgICBuZXdsaW5lX2RlY29kZXIgPSBfaW8uSW5jcmVtZW50YWxOZXdsaW5lRGVjb2RlcihOb25lLCBUcnVlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gbmV3bGluZV9kZWNvZGVyLmRlY29kZShzb3VyY2VfYnl0ZXMuZGVjb2RlKGVuY29kaW5nWzBdKSkKLSAgICAgICAgZXhjZXB0IFVuaWNvZGVEZWNvZGVFcnJvciBhcyBleGM6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiRmFpbGVkIHRvIGRlY29kZSBzb3VyY2UgZmlsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lKSBmcm9tIGV4YworICAgICAgICByZXR1cm4gZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpCisKKyAgICBkZWYgc291cmNlX3RvX2NvZGUoc2VsZiwgZGF0YSwgcGF0aCwgKiwgX29wdGltaXplPS0xKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBjb2RlIG9iamVjdCBjb21waWxlZCBmcm9tIHNvdXJjZS4KKworICAgICAgICBUaGUgJ2RhdGEnIGFyZ3VtZW50IGNhbiBiZSBhbnkgb2JqZWN0IHR5cGUgdGhhdCBjb21waWxlKCkgc3VwcG9ydHMuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLCBkYXRhLCBwYXRoLCAnZXhlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUsIG9wdGltaXplPV9vcHRpbWl6ZSkKIAogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluc3BlY3RMb2FkZXIuZ2V0X2NvZGUuCkBAIC05NDYsNDUgKzE1NDcsMzQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdCA9IHNlbGYucGF0aF9zdGF0cyhzb3VyY2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgorICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgPSBpbnQoc3RbJ210aW1lJ10pCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5nZXRfZGF0YShieXRlY29kZV9wYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QpCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlc19kYXRhID0gX3ZhbGlkYXRlX2J5dGVjb2RlX2hlYWRlcihkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2Vfc3RhdHM9c3QsIG5hbWU9ZnVsbG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRU9GRXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgne30gbWF0Y2hlcyB7fScsIGJ5dGVjb2RlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IG1hcnNoYWwubG9hZHMoYnl0ZXNfZGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm91bmQsIF9jb2RlX3R5cGUpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pbXAuX2ZpeF9jb19maWxlbmFtZShmb3VuZCwgc291cmNlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJOb24tY29kZSBvYmplY3QgaW4ge30iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChieXRlY29kZV9wYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieXRlY29kZV9wYXRoPWJ5dGVjb2RlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX3BhdGg9c291cmNlX3BhdGgpCiAgICAgICAgIHNvdXJjZV9ieXRlcyA9IHNlbGYuZ2V0X2RhdGEoc291cmNlX3BhdGgpCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gX2NhbGxfd2l0aF9mcmFtZXNfcmVtb3ZlZChjb21waWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYnl0ZXMsIHNvdXJjZV9wYXRoLCAnZXhlYycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYuc291cmNlX3RvX2NvZGUoc291cmNlX2J5dGVzLCBzb3VyY2VfcGF0aCkKICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnY29kZSBvYmplY3QgZnJvbSB7fScsIHNvdXJjZV9wYXRoKQogICAgICAgICBpZiAobm90IHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGFuZCBieXRlY29kZV9wYXRoIGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgc291cmNlX210aW1lIGlzIG5vdCBOb25lKToKLSAgICAgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoX01BR0lDX0JZVEVTKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhzb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoX3dfbG9uZyhsZW4oc291cmNlX2J5dGVzKSkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKKyAgICAgICAgICAgICAgICBzb3VyY2VfbXRpbWUgaXMgbm90IE5vbmUpOgorICAgICAgICAgICAgZGF0YSA9IF9jb2RlX3RvX2J5dGVjb2RlKGNvZGVfb2JqZWN0LCBzb3VyY2VfbXRpbWUsCisgICAgICAgICAgICAgICAgICAgIGxlbihzb3VyY2VfYnl0ZXMpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlX2J5dGVjb2RlKHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKQogICAgICAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ3dyb3RlIHshcn0nLCBieXRlY29kZV9wYXRoKQpAQCAtOTkyLDE2ICsxNTgyLDYgQEAKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAogCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgTG9hZGVyLmxvYWRfbW9kdWxlLgotCi0gICAgICAgIFJlcXVpcmVzIEV4ZWN1dGlvbkxvYWRlci5nZXRfZmlsZW5hbWUgYW5kIFJlc291cmNlTG9hZGVyLmdldF9kYXRhIHRvIGJlCi0gICAgICAgIGltcGxlbWVudGVkIHRvIGxvYWQgc291cmNlIGNvZGUuIFVzZSBvZiBieXRlY29kZSBpcyBkaWN0YXRlZCBieSB3aGV0aGVyCi0gICAgICAgIGdldF9jb2RlIHVzZXMvd3JpdGVzIGJ5dGVjb2RlLgotCi0gICAgICAgICIiIgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUpCi0KIAogY2xhc3MgRmlsZUxvYWRlcjoKIApAQCAtMTAxNCwxMCArMTU5NCwyMiBAQAogICAgICAgICBzZWxmLm5hbWUgPSBmdWxsbmFtZQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5uYW1lKSBeIGhhc2goc2VsZi5wYXRoKQorCiAgICAgQF9jaGVja19uYW1lCiAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiTG9hZCBhIG1vZHVsZSBmcm9tIGEgZmlsZS4iIiIKLSAgICAgICAgIyBJc3N1ZSAjMTQ4NTc6IEF2b2lkIHRoZSB6ZXJvLWFyZ3VtZW50IGZvcm0gc28gdGhlIGltcGxlbWVudGF0aW9uCisgICAgICAgICIiIkxvYWQgYSBtb2R1bGUgZnJvbSBhIGZpbGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBleGVjX21vZHVsZSgpIGluc3RlYWQuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgVGhlIG9ubHkgcmVhc29uIGZvciB0aGlzIG1ldGhvZCBpcyBmb3IgdGhlIG5hbWUgY2hlY2suCisgICAgICAgICMgSXNzdWUgIzE0ODU3OiBBdm9pZCB0aGUgemVyby1hcmd1bWVudCBmb3JtIG9mIHN1cGVyIHNvIHRoZSBpbXBsZW1lbnRhdGlvbgogICAgICAgICAjIG9mIHRoYXQgZm9ybSBjYW4gYmUgdXBkYXRlZCB3aXRob3V0IGJyZWFraW5nIHRoZSBmcm96ZW4gbW9kdWxlCiAgICAgICAgIHJldHVybiBzdXBlcihGaWxlTG9hZGVyLCBzZWxmKS5sb2FkX21vZHVsZShmdWxsbmFtZSkKIApAQCAtMTAzOCwxOCArMTYzMCwxMiBAQAogCiAgICAgZGVmIHBhdGhfc3RhdHMoc2VsZiwgcGF0aCk6CiAgICAgICAgICIiIlJldHVybiB0aGUgbWV0YWRhdGEgZm9yIHRoZSBwYXRoLiIiIgotICAgICAgICBzdCA9IF9vcy5zdGF0KHBhdGgpCisgICAgICAgIHN0ID0gX3BhdGhfc3RhdChwYXRoKQogICAgICAgICByZXR1cm4geydtdGltZSc6IHN0LnN0X210aW1lLCAnc2l6ZSc6IHN0LnN0X3NpemV9CiAKICAgICBkZWYgX2NhY2hlX2J5dGVjb2RlKHNlbGYsIHNvdXJjZV9wYXRoLCBieXRlY29kZV9wYXRoLCBkYXRhKToKICAgICAgICAgIyBBZGFwdCBiZXR3ZWVuIHRoZSB0d28gQVBJcwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2RlID0gX29zLnN0YXQoc291cmNlX3BhdGgpLnN0X21vZGUKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBtb2RlID0gMG82NjYKLSAgICAgICAgIyBXZSBhbHdheXMgZW5zdXJlIHdyaXRlIGFjY2VzcyBzbyB3ZSBjYW4gdXBkYXRlIGNhY2hlZCBmaWxlcwotICAgICAgICAjIGxhdGVyIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSByZWFkLW9ubHkgb24gV2luZG93cyAoIzYwNzQpCi0gICAgICAgIG1vZGUgfD0gMG8yMDAKKyAgICAgICAgbW9kZSA9IF9jYWxjX21vZGUoc291cmNlX3BhdGgpCiAgICAgICAgIHJldHVybiBzZWxmLnNldF9kYXRhKGJ5dGVjb2RlX3BhdGgsIGRhdGEsIF9tb2RlPW1vZGUpCiAKICAgICBkZWYgc2V0X2RhdGEoc2VsZiwgcGF0aCwgZGF0YSwgKiwgX21vZGU9MG82NjYpOgpAQCAtMTA4NSwyMCArMTY3MSwxMSBAQAogCiAgICAgIiIiTG9hZGVyIHdoaWNoIGhhbmRsZXMgc291cmNlbGVzcyBmaWxlIGltcG9ydHMuIiIiCiAKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICByZXR1cm4gc2VsZi5fbG9hZF9tb2R1bGUoZnVsbG5hbWUsIHNvdXJjZWxlc3M9VHJ1ZSkKLQogICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgIHBhdGggPSBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgYnl0ZXNfZGF0YSA9IHNlbGYuX2J5dGVzX2Zyb21fYnl0ZWNvZGUoZnVsbG5hbWUsIGRhdGEsIHBhdGgsIE5vbmUpCi0gICAgICAgIGZvdW5kID0gbWFyc2hhbC5sb2FkcyhieXRlc19kYXRhKQotICAgICAgICBpZiBpc2luc3RhbmNlKGZvdW5kLCBfY29kZV90eXBlKToKLSAgICAgICAgICAgIF92ZXJib3NlX21lc3NhZ2UoJ2NvZGUgb2JqZWN0IGZyb20geyFyfScsIHBhdGgpCi0gICAgICAgICAgICByZXR1cm4gZm91bmQKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJOb24tY29kZSBvYmplY3QgaW4ge30iLmZvcm1hdChwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9cGF0aCkKKyAgICAgICAgYnl0ZXNfZGF0YSA9IF92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZGF0YSwgbmFtZT1mdWxsbmFtZSwgcGF0aD1wYXRoKQorICAgICAgICByZXR1cm4gX2NvbXBpbGVfYnl0ZWNvZGUoYnl0ZXNfZGF0YSwgbmFtZT1mdWxsbmFtZSwgYnl0ZWNvZGVfcGF0aD1wYXRoKQogCiAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJSZXR1cm4gTm9uZSBhcyB0aGVyZSBpcyBubyBzb3VyY2UgY29kZS4iIiIKQEAgLTExMjEsMjMgKzE2OTgsMzAgQEAKICAgICAgICAgc2VsZi5uYW1lID0gbmFtZQogICAgICAgICBzZWxmLnBhdGggPSBwYXRoCiAKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl9fY2xhc3NfXyA9PSBvdGhlci5fX2NsYXNzX18gYW5kCisgICAgICAgICAgICAgICAgc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXykKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5uYW1lKSBeIGhhc2goc2VsZi5wYXRoKQorCiAgICAgQF9jaGVja19uYW1lCi0gICAgQHNldF9wYWNrYWdlCi0gICAgQHNldF9sb2FkZXIKICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJMb2FkIGFuIGV4dGVuc2lvbiBtb2R1bGUuIiIiCi0gICAgICAgIGlzX3JlbG9hZCA9IGZ1bGxuYW1lIGluIHN5cy5tb2R1bGVzCi0gICAgICAgIHRyeToKKyAgICAgICAgIyBPbmNlIGFuIGV4ZWNfbW9kdWxlKCkgaW1wbGVtZW50YXRpb24gaXMgYWRkZWQgd2UgY2FuIGFsc28KKyAgICAgICAgIyBhZGQgYSBkZXByZWNhdGlvbiB3YXJuaW5nIGhlcmUuCisgICAgICAgIHdpdGggX01hbmFnZVJlbG9hZChmdWxsbmFtZSk6CiAgICAgICAgICAgICBtb2R1bGUgPSBfY2FsbF93aXRoX2ZyYW1lc19yZW1vdmVkKF9pbXAubG9hZF9keW5hbWljLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsbmFtZSwgc2VsZi5wYXRoKQotICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQotICAgICAgICAgICAgaWYgc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKSBhbmQgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKLSAgICAgICAgICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbX3BhdGhfc3BsaXQoc2VsZi5wYXRoKVswXV0KLSAgICAgICAgICAgIHJldHVybiBtb2R1bGUKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgaWYgbm90IGlzX3JlbG9hZCBhbmQgZnVsbG5hbWUgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQotICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnZXh0ZW5zaW9uIG1vZHVsZSBsb2FkZWQgZnJvbSB7IXJ9Jywgc2VsZi5wYXRoKQorICAgICAgICBpc19wYWNrYWdlID0gc2VsZi5pc19wYWNrYWdlKGZ1bGxuYW1lKQorICAgICAgICBpZiBpc19wYWNrYWdlIGFuZCBub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpOgorICAgICAgICAgICAgbW9kdWxlLl9fcGF0aF9fID0gW19wYXRoX3NwbGl0KHNlbGYucGF0aClbMF1dCisgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KKyAgICAgICAgaWYgbm90IGlzX3BhY2thZ2U6CisgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIHJldHVybiBtb2R1bGUKIAogICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaXMgYSBwYWNrYWdlLiIiIgpAQCAtMTE1Myw2ICsxNzM3LDExIEBACiAgICAgICAgICIiIlJldHVybiBOb25lIGFzIGV4dGVuc2lvbiBtb2R1bGVzIGhhdmUgbm8gc291cmNlIGNvZGUuIiIiCiAgICAgICAgIHJldHVybiBOb25lCiAKKyAgICBAX2NoZWNrX25hbWUKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIHRvIHRoZSBzb3VyY2UgZmlsZSBhcyBmb3VuZCBieSB0aGUgZmluZGVyLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKIAogY2xhc3MgX05hbWVzcGFjZVBhdGg6CiAgICAgIiIiUmVwcmVzZW50cyBhIG5hbWVzcGFjZSBwYWNrYWdlJ3MgcGF0aC4gIEl0IHVzZXMgdGhlIG1vZHVsZSBuYW1lCkBAIC0xMTg1LDExICsxNzc0LDEyIEBACiAgICAgICAgICMgSWYgdGhlIHBhcmVudCdzIHBhdGggaGFzIGNoYW5nZWQsIHJlY2FsY3VsYXRlIF9wYXRoCiAgICAgICAgIHBhcmVudF9wYXRoID0gdHVwbGUoc2VsZi5fZ2V0X3BhcmVudF9wYXRoKCkpICMgTWFrZSBhIGNvcHkKICAgICAgICAgaWYgcGFyZW50X3BhdGggIT0gc2VsZi5fbGFzdF9wYXJlbnRfcGF0aDoKLSAgICAgICAgICAgIGxvYWRlciwgbmV3X3BhdGggPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLl9wYXRoX2ZpbmRlcihzZWxmLl9uYW1lLCBwYXJlbnRfcGF0aCkKICAgICAgICAgICAgICMgTm90ZSB0aGF0IG5vIGNoYW5nZXMgYXJlIG1hZGUgaWYgYSBsb2FkZXIgaXMgcmV0dXJuZWQsIGJ1dCB3ZQogICAgICAgICAgICAgIyAgZG8gcmVtZW1iZXIgdGhlIG5ldyBwYXJlbnQgcGF0aAotICAgICAgICAgICAgaWYgbG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5fcGF0aCA9IG5ld19wYXRoCisgICAgICAgICAgICBpZiBzcGVjIGlzIG5vdCBOb25lIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhdGggPSBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCiAgICAgICAgICAgICBzZWxmLl9sYXN0X3BhcmVudF9wYXRoID0gcGFyZW50X3BhdGggICAgICMgU2F2ZSB0aGUgY29weQogICAgICAgICByZXR1cm4gc2VsZi5fcGF0aAogCkBAIC0xMjAwLDcgKzE3OTAsNyBAQAogICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3JlY2FsY3VsYXRlKCkpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiAiX05hbWVzcGFjZVBhdGgoeyFyfSkiLmZvcm1hdChzZWxmLl9wYXRoKQorICAgICAgICByZXR1cm4gJ19OYW1lc3BhY2VQYXRoKHshcn0pJy5mb3JtYXQoc2VsZi5fcGF0aCkKIAogICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgaXRlbSk6CiAgICAgICAgIHJldHVybiBpdGVtIGluIHNlbGYuX3JlY2FsY3VsYXRlKCkKQEAgLTEyMDksMjAgKzE3OTksNDEgQEAKICAgICAgICAgc2VsZi5fcGF0aC5hcHBlbmQoaXRlbSkKIAogCi1jbGFzcyBOYW1lc3BhY2VMb2FkZXI6CisjIFdlIHVzZSB0aGlzIGV4Y2x1c2l2ZWx5IGluIGluaXRfbW9kdWxlX2F0dHJzKCkgZm9yIGJhY2t3YXJkLWNvbXBhdGliaWxpdHkuCitjbGFzcyBfTmFtZXNwYWNlTG9hZGVyOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcik6CiAgICAgICAgIHNlbGYuX3BhdGggPSBfTmFtZXNwYWNlUGF0aChuYW1lLCBwYXRoLCBwYXRoX2ZpbmRlcikKIAogICAgIEBjbGFzc21ldGhvZAogICAgIGRlZiBtb2R1bGVfcmVwcihjbHMsIG1vZHVsZSk6Ci0gICAgICAgIHJldHVybiAiPG1vZHVsZSAne30nIChuYW1lc3BhY2UpPiIuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKyAgICAgICAgIiIiUmV0dXJuIHJlcHIgZm9yIHRoZSBtb2R1bGUuCiAKLSAgICBAbW9kdWxlX2Zvcl9sb2FkZXIKLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiTG9hZCBhIG5hbWVzcGFjZSBtb2R1bGUuIiIiCisgICAgICAgIFRoZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFRoZSBpbXBvcnQgbWFjaGluZXJ5IGRvZXMgdGhlIGpvYiBpdHNlbGYuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAnPG1vZHVsZSB7IXJ9IChuYW1lc3BhY2UpPicuZm9ybWF0KG1vZHVsZS5fX25hbWVfXykKKworICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuICcnCisKKyAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gY29tcGlsZSgnJywgJzxzdHJpbmc+JywgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJMb2FkIGEgbmFtZXNwYWNlIG1vZHVsZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLiAgVXNlIGV4ZWNfbW9kdWxlKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKKyAgICAgICAgIyBUaGUgaW1wb3J0IHN5c3RlbSBuZXZlciBjYWxscyB0aGlzIG1ldGhvZC4KICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnbmFtZXNwYWNlIG1vZHVsZSBsb2FkZWQgd2l0aCBwYXRoIHshcn0nLCBzZWxmLl9wYXRoKQotICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBzZWxmLl9wYXRoCi0gICAgICAgIHJldHVybiBtb2R1bGUKKyAgICAgICAgcmV0dXJuIF9sb2FkX21vZHVsZV9zaGltKHNlbGYsIGZ1bGxuYW1lKQogCiAKICMgRmluZGVycyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTEyNjUsNyArMTg3Niw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIHBhdGggPT0gJyc6Ci0gICAgICAgICAgICBwYXRoID0gJy4nCisgICAgICAgICAgICBwYXRoID0gX29zLmdldGN3ZCgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZpbmRlciA9IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW3BhdGhdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTEyNzQsNyArMTg4NSwyMiBAQAogICAgICAgICByZXR1cm4gZmluZGVyCiAKICAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2dldF9sb2FkZXIoY2xzLCBmdWxsbmFtZSwgcGF0aCk6CisgICAgZGVmIF9sZWdhY3lfZ2V0X3NwZWMoY2xzLCBmdWxsbmFtZSwgZmluZGVyKToKKyAgICAgICAgIyBUaGlzIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSBmb3IgYSBEZXByZWNhdGlvbldhcm5pbmcgaWYKKyAgICAgICAgIyB3ZSBlbmRlZCB1cCBnb2luZyB0aGF0IHJvdXRlLgorICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6CisgICAgICAgICAgICBsb2FkZXIsIHBvcnRpb25zID0gZmluZGVyLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKGZ1bGxuYW1lKQorICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQorICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc3BlY19mcm9tX2xvYWRlcihmdWxsbmFtZSwgbG9hZGVyKQorICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IHBvcnRpb25zCisgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2dldF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKICAgICAgICAgIiIiRmluZCB0aGUgbG9hZGVyIG9yIG5hbWVzcGFjZV9wYXRoIGZvciB0aGlzIG1vZHVsZS9wYWNrYWdlIG5hbWUuIiIiCiAgICAgICAgICMgSWYgdGhpcyBlbmRzIHVwIGJlaW5nIGEgbmFtZXNwYWNlIHBhY2thZ2UsIG5hbWVzcGFjZV9wYXRoIGlzCiAgICAgICAgICMgIHRoZSBsaXN0IG9mIHBhdGhzIHRoYXQgd2lsbCBiZWNvbWUgaXRzIF9fcGF0aF9fCkBAIC0xMjg0LDM4ICsxOTEwLDYxIEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGZpbmRlciA9IGNscy5fcGF0aF9pbXBvcnRlcl9jYWNoZShlbnRyeSkKICAgICAgICAgICAgIGlmIGZpbmRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGZpbmRlciwgJ2ZpbmRfbG9hZGVyJyk6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRlciwgcG9ydGlvbnMgPSBmaW5kZXIuZmluZF9sb2FkZXIoZnVsbG5hbWUpCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmaW5kZXIsICdmaW5kX3NwZWMnKToKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRlci5maW5kX3NwZWMoZnVsbG5hbWUsIHRhcmdldCkKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHBvcnRpb25zID0gW10KLSAgICAgICAgICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYSBsb2FkZXI6IHJldHVybiBpdCBpbW1lZGlhdGVseS4KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvYWRlciwgbmFtZXNwYWNlX3BhdGgKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IGNscy5fbGVnYWN5X2dldF9zcGVjKGZ1bGxuYW1lLCBmaW5kZXIpCisgICAgICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHNwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworICAgICAgICAgICAgICAgIHBvcnRpb25zID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucworICAgICAgICAgICAgICAgIGlmIHBvcnRpb25zIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdzcGVjIG1pc3NpbmcgbG9hZGVyJykKICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgcG9zc2libHkgcGFydCBvZiBhIG5hbWVzcGFjZSBwYWNrYWdlLgogICAgICAgICAgICAgICAgICMgIFJlbWVtYmVyIHRoZXNlIHBhdGggZW50cmllcyAoaWYgYW55KSBmb3Igd2hlbiB3ZQogICAgICAgICAgICAgICAgICMgIGNyZWF0ZSBhIG5hbWVzcGFjZSBwYWNrYWdlLCBhbmQgY29udGludWUgaXRlcmF0aW5nCiAgICAgICAgICAgICAgICAgIyAgb24gcGF0aC4KICAgICAgICAgICAgICAgICBuYW1lc3BhY2VfcGF0aC5leHRlbmQocG9ydGlvbnMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZSwgbmFtZXNwYWNlX3BhdGgKKyAgICAgICAgICAgIHNwZWMgPSBNb2R1bGVTcGVjKGZ1bGxuYW1lLCBOb25lKQorICAgICAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IG5hbWVzcGFjZV9wYXRoCisgICAgICAgICAgICByZXR1cm4gc3BlYwogCiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgICIiIkZpbmQgdGhlIG1vZHVsZSBvbiBzeXMucGF0aCBvciAncGF0aCcgYmFzZWQgb24gc3lzLnBhdGhfaG9va3MgYW5kCisgICAgZGVmIGZpbmRfc3BlYyhjbHMsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIiIiZmluZCB0aGUgbW9kdWxlIG9uIHN5cy5wYXRoIG9yICdwYXRoJyBiYXNlZCBvbiBzeXMucGF0aF9ob29rcyBhbmQKICAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuIiIiCiAgICAgICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICAgICAgIHBhdGggPSBzeXMucGF0aAotICAgICAgICBsb2FkZXIsIG5hbWVzcGFjZV9wYXRoID0gY2xzLl9nZXRfbG9hZGVyKGZ1bGxuYW1lLCBwYXRoKQotICAgICAgICBpZiBsb2FkZXIgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gbG9hZGVyCi0gICAgICAgIGVsc2U6CisgICAgICAgIHNwZWMgPSBjbHMuX2dldF9zcGVjKGZ1bGxuYW1lLCBwYXRoLCB0YXJnZXQpCisgICAgICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGVsaWYgc3BlYy5sb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIG5hbWVzcGFjZV9wYXRoID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucwogICAgICAgICAgICAgaWYgbmFtZXNwYWNlX3BhdGg6CiAgICAgICAgICAgICAgICAgIyBXZSBmb3VuZCBhdCBsZWFzdCBvbmUgbmFtZXNwYWNlIHBhdGguICBSZXR1cm4gYQotICAgICAgICAgICAgICAgICMgIGxvYWRlciB3aGljaCBjYW4gY3JlYXRlIHRoZSBuYW1lc3BhY2UgcGFja2FnZS4KLSAgICAgICAgICAgICAgICByZXR1cm4gTmFtZXNwYWNlTG9hZGVyKGZ1bGxuYW1lLCBuYW1lc3BhY2VfcGF0aCwgY2xzLl9nZXRfbG9hZGVyKQorICAgICAgICAgICAgICAgICMgIHNwZWMgd2hpY2ggY2FuIGNyZWF0ZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UuCisgICAgICAgICAgICAgICAgc3BlYy5vcmlnaW4gPSAnbmFtZXNwYWNlJworICAgICAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBfTmFtZXNwYWNlUGF0aChmdWxsbmFtZSwgbmFtZXNwYWNlX3BhdGgsIGNscy5fZ2V0X3NwZWMpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKKyAgICAgICAgIiIiZmluZCB0aGUgbW9kdWxlIG9uIHN5cy5wYXRoIG9yICdwYXRoJyBiYXNlZCBvbiBzeXMucGF0aF9ob29rcyBhbmQKKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZC4gIFVzZSBmaW5kX3NwZWMoKSBpbnN0ZWFkLgorCisgICAgICAgICIiIgorICAgICAgICBzcGVjID0gY2xzLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyCiAKIAogY2xhc3MgRmlsZUZpbmRlcjoKQEAgLTEzNDksMTEgKzE5OTgsMjggQEAKIAogICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIlRyeSB0byBmaW5kIGEgbG9hZGVyIGZvciB0aGUgc3BlY2lmaWVkIG1vZHVsZSwgb3IgdGhlIG5hbWVzcGFjZQorICAgICAgICBwYWNrYWdlIHBvcnRpb25zLiBSZXR1cm5zIChsb2FkZXIsIGxpc3Qtb2YtcG9ydGlvbnMpLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQuICBVc2UgZmluZF9zcGVjKCkgaW5zdGVhZC4KKworICAgICAgICAiIiIKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZF9zcGVjKGZ1bGxuYW1lKQorICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgW10KKyAgICAgICAgcmV0dXJuIHNwZWMubG9hZGVyLCBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIG9yIFtdCisKKyAgICBkZWYgX2dldF9zcGVjKHNlbGYsIGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIHBhdGgsIHNtc2wsIHRhcmdldCk6CisgICAgICAgIGxvYWRlciA9IGxvYWRlcl9jbGFzcyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKGZ1bGxuYW1lLCBwYXRoLCBsb2FkZXI9bG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9c21zbCkKKworICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIiIiVHJ5IHRvIGZpbmQgYSBsb2FkZXIgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLCBvciB0aGUgbmFtZXNwYWNlCiAgICAgICAgIHBhY2thZ2UgcG9ydGlvbnMuIFJldHVybnMgKGxvYWRlciwgbGlzdC1vZi1wb3J0aW9ucykuIiIiCiAgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCiAgICAgICAgIHRhaWxfbW9kdWxlID0gZnVsbG5hbWUucnBhcnRpdGlvbignLicpWzJdCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG10aW1lID0gX29zLnN0YXQoc2VsZi5wYXRoKS5zdF9tdGltZQorICAgICAgICAgICAgbXRpbWUgPSBfcGF0aF9zdGF0KHNlbGYucGF0aCBvciBfb3MuZ2V0Y3dkKCkpLnN0X210aW1lCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgbXRpbWUgPSAtMQogICAgICAgICBpZiBtdGltZSAhPSBzZWxmLl9wYXRoX210aW1lOgpAQCAtMTM2OSwzMyArMjAzNSwzNCBAQAogICAgICAgICAjIENoZWNrIGlmIHRoZSBtb2R1bGUgaXMgdGhlIG5hbWUgb2YgYSBkaXJlY3RvcnkgKGFuZCB0aHVzIGEgcGFja2FnZSkuCiAgICAgICAgIGlmIGNhY2hlX21vZHVsZSBpbiBjYWNoZToKICAgICAgICAgICAgIGJhc2VfcGF0aCA9IF9wYXRoX2pvaW4oc2VsZi5wYXRoLCB0YWlsX21vZHVsZSkKLSAgICAgICAgICAgIGlmIF9wYXRoX2lzZGlyKGJhc2VfcGF0aCk6Ci0gICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6Ci0gICAgICAgICAgICAgICAgICAgIGluaXRfZmlsZW5hbWUgPSAnX19pbml0X18nICsgc3VmZml4Ci0gICAgICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IF9wYXRoX2pvaW4oYmFzZV9wYXRoLCBpbml0X2ZpbGVuYW1lKQotICAgICAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpLCBbYmFzZV9wYXRoXSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAjIEEgbmFtZXNwYWNlIHBhY2thZ2UsIHJldHVybiB0aGUgcGF0aCBpZiB3ZSBkb24ndCBhbHNvCi0gICAgICAgICAgICAgICAgICAgICMgIGZpbmQgYSBtb2R1bGUgaW4gdGhlIG5leHQgc2VjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gVHJ1ZQorICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyX2NsYXNzIGluIHNlbGYuX2xvYWRlcnM6CisgICAgICAgICAgICAgICAgaW5pdF9maWxlbmFtZSA9ICdfX2luaXRfXycgKyBzdWZmaXgKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBfcGF0aF9qb2luKGJhc2VfcGF0aCwgaW5pdF9maWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBfcGF0aF9pc2ZpbGUoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgW2Jhc2VfcGF0aF0sIHRhcmdldCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBJZiBhIG5hbWVzcGFjZSBwYWNrYWdlLCByZXR1cm4gdGhlIHBhdGggaWYgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAjICBmaW5kIGEgbW9kdWxlIGluIHRoZSBuZXh0IHNlY3Rpb24uCisgICAgICAgICAgICAgICAgaXNfbmFtZXNwYWNlID0gX3BhdGhfaXNkaXIoYmFzZV9wYXRoKQogICAgICAgICAjIENoZWNrIGZvciBhIGZpbGUgdy8gYSBwcm9wZXIgc3VmZml4IGV4aXN0cy4KLSAgICAgICAgZm9yIHN1ZmZpeCwgbG9hZGVyIGluIHNlbGYuX2xvYWRlcnM6CisgICAgICAgIGZvciBzdWZmaXgsIGxvYWRlcl9jbGFzcyBpbiBzZWxmLl9sb2FkZXJzOgogICAgICAgICAgICAgZnVsbF9wYXRoID0gX3BhdGhfam9pbihzZWxmLnBhdGgsIHRhaWxfbW9kdWxlICsgc3VmZml4KQogICAgICAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgndHJ5aW5nIHt9Jy5mb3JtYXQoZnVsbF9wYXRoKSwgdmVyYm9zaXR5PTIpCiAgICAgICAgICAgICBpZiBjYWNoZV9tb2R1bGUgKyBzdWZmaXggaW4gY2FjaGU6CiAgICAgICAgICAgICAgICAgaWYgX3BhdGhfaXNmaWxlKGZ1bGxfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAobG9hZGVyKGZ1bGxuYW1lLCBmdWxsX3BhdGgpLCBbXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9zcGVjKGxvYWRlcl9jbGFzcywgZnVsbG5hbWUsIGZ1bGxfcGF0aCwgTm9uZSwgdGFyZ2V0KQogICAgICAgICBpZiBpc19uYW1lc3BhY2U6CiAgICAgICAgICAgICBfdmVyYm9zZV9tZXNzYWdlKCdwb3NzaWJsZSBuYW1lc3BhY2UgZm9yIHt9Jy5mb3JtYXQoYmFzZV9wYXRoKSkKLSAgICAgICAgICAgIHJldHVybiAoTm9uZSwgW2Jhc2VfcGF0aF0pCi0gICAgICAgIHJldHVybiAoTm9uZSwgW10pCisgICAgICAgICAgICBzcGVjID0gTW9kdWxlU3BlYyhmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbYmFzZV9wYXRoXQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBfZmlsbF9jYWNoZShzZWxmKToKICAgICAgICAgIiIiRmlsbCB0aGUgY2FjaGUgb2YgcG90ZW50aWFsIG1vZHVsZXMgYW5kIHBhY2thZ2VzIGZvciB0aGlzIGRpcmVjdG9yeS4iIiIKICAgICAgICAgcGF0aCA9IHNlbGYucGF0aAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjb250ZW50cyA9IF9vcy5saXN0ZGlyKHBhdGgpCisgICAgICAgICAgICBjb250ZW50cyA9IF9vcy5saXN0ZGlyKHBhdGggb3IgX29zLmdldGN3ZCgpKQogICAgICAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBQZXJtaXNzaW9uRXJyb3IsIE5vdEFEaXJlY3RvcnlFcnJvcik6CiAgICAgICAgICAgICAjIERpcmVjdG9yeSBoYXMgZWl0aGVyIGJlZW4gcmVtb3ZlZCwgdHVybmVkIGludG8gYSBmaWxlLCBvciBtYWRlCiAgICAgICAgICAgICAjIHVucmVhZGFibGUuCkBAIC0xNDIwLDcgKzIwODcsNyBAQAogICAgICAgICAgICAgICAgIGxvd2VyX3N1ZmZpeF9jb250ZW50cy5hZGQobmV3X25hbWUpCiAgICAgICAgICAgICBzZWxmLl9wYXRoX2NhY2hlID0gbG93ZXJfc3VmZml4X2NvbnRlbnRzCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKF9DQVNFX0lOU0VOU0lUSVZFX1BMQVRGT1JNUyk6Ci0gICAgICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSBzZXQoZm4ubG93ZXIoKSBmb3IgZm4gaW4gY29udGVudHMpCisgICAgICAgICAgICBzZWxmLl9yZWxheGVkX3BhdGhfY2FjaGUgPSB7Zm4ubG93ZXIoKSBmb3IgZm4gaW4gY29udGVudHN9CiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgcGF0aF9ob29rKGNscywgKmxvYWRlcl9kZXRhaWxzKToKQEAgLTE0MzUsMTMgKzIxMDIsMTMgQEAKICAgICAgICAgZGVmIHBhdGhfaG9va19mb3JfRmlsZUZpbmRlcihwYXRoKToKICAgICAgICAgICAgICIiIlBhdGggaG9vayBmb3IgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLiIiIgogICAgICAgICAgICAgaWYgbm90IF9wYXRoX2lzZGlyKHBhdGgpOgotICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCJvbmx5IGRpcmVjdG9yaWVzIGFyZSBzdXBwb3J0ZWQiLCBwYXRoPXBhdGgpCisgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ29ubHkgZGlyZWN0b3JpZXMgYXJlIHN1cHBvcnRlZCcsIHBhdGg9cGF0aCkKICAgICAgICAgICAgIHJldHVybiBjbHMocGF0aCwgKmxvYWRlcl9kZXRhaWxzKQogCiAgICAgICAgIHJldHVybiBwYXRoX2hvb2tfZm9yX0ZpbGVGaW5kZXIKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuICJGaWxlRmluZGVyKCVyKSIgJSAoc2VsZi5wYXRoLCkKKyAgICAgICAgcmV0dXJuICdGaWxlRmluZGVyKHshcn0pJy5mb3JtYXQoc2VsZi5wYXRoKQogCiAKICMgSW1wb3J0IGl0c2VsZiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTE0NjgsMTkgKzIxMzUsNTEgQEAKICAgICByZXR1cm4gJ3t9Lnt9Jy5mb3JtYXQoYmFzZSwgbmFtZSkgaWYgbmFtZSBlbHNlIGJhc2UKIAogCi1kZWYgX2ZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpOgorZGVmIF9maW5kX3NwZWNfbGVnYWN5KGZpbmRlciwgbmFtZSwgcGF0aCk6CisgICAgIyBUaGlzIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSBmb3IgYSBEZXByZWNhdGlvbldhcm5pbmcgaWYKKyAgICAjIHdlIGVuZGVkIHVwIGdvaW5nIHRoYXQgcm91dGUuCisgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCisgICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBOb25lCisgICAgcmV0dXJuIHNwZWNfZnJvbV9sb2FkZXIobmFtZSwgbG9hZGVyKQorCisKK2RlZiBfZmluZF9zcGVjKG5hbWUsIHBhdGgsIHRhcmdldD1Ob25lKToKICAgICAiIiJGaW5kIGEgbW9kdWxlJ3MgbG9hZGVyLiIiIgogICAgIGlmIG5vdCBzeXMubWV0YV9wYXRoOgogICAgICAgICBfd2FybmluZ3Mud2Fybignc3lzLm1ldGFfcGF0aCBpcyBlbXB0eScsIEltcG9ydFdhcm5pbmcpCisgICAgIyBXZSBjaGVjayBzeXMubW9kdWxlcyBoZXJlIGZvciB0aGUgcmVsb2FkIGNhc2UuICBXaGlsZSBhIHBhc3NlZC1pbgorICAgICMgdGFyZ2V0IHdpbGwgdXN1YWxseSBpbmRpY2F0ZSBhIHJlbG9hZCB0aGVyZSBpcyBubyBndWFyYW50ZWUsIHdoZXJlYXMKKyAgICAjIHN5cy5tb2R1bGVzIHByb3ZpZGVzIG9uZS4KKyAgICBpc19yZWxvYWQgPSBuYW1lIGluIHN5cy5tb2R1bGVzCiAgICAgZm9yIGZpbmRlciBpbiBzeXMubWV0YV9wYXRoOgogICAgICAgICB3aXRoIF9JbXBvcnRMb2NrQ29udGV4dCgpOgotICAgICAgICAgICAgbG9hZGVyID0gZmluZGVyLmZpbmRfbW9kdWxlKG5hbWUsIHBhdGgpCi0gICAgICAgIGlmIGxvYWRlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICMgVGhlIHBhcmVudCBpbXBvcnQgbWF5IGhhdmUgYWxyZWFkeSBpbXBvcnRlZCB0aGlzIG1vZHVsZS4KLSAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgICAgIHJldHVybiBsb2FkZXIKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmaW5kX3NwZWMgPSBmaW5kZXIuZmluZF9zcGVjCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgc3BlYyA9IF9maW5kX3NwZWNfbGVnYWN5KGZpbmRlciwgbmFtZSwgcGF0aCkKKyAgICAgICAgICAgICAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1tuYW1lXS5fX2xvYWRlcl9fCisgICAgICAgICAgICAgICAgc3BlYyA9IGZpbmRfc3BlYyhuYW1lLCBwYXRoLCB0YXJnZXQpCisgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIFRoZSBwYXJlbnQgaW1wb3J0IG1heSBoYXZlIGFscmVhZHkgaW1wb3J0ZWQgdGhpcyBtb2R1bGUuCisgICAgICAgICAgICBpZiBub3QgaXNfcmVsb2FkIGFuZCBuYW1lIGluIHN5cy5tb2R1bGVzOgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfX3NwZWNfXyA9IG1vZHVsZS5fX3NwZWNfXworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBXZSB1c2UgdGhlIGZvdW5kIHNwZWMgc2luY2UgdGhhdCBpcyB0aGUgb25lIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSB3b3VsZCBoYXZlIHVzZWQgaWYgdGhlIHBhcmVudCBtb2R1bGUgaGFkbid0CisgICAgICAgICAgICAgICAgICAgICMgYmVhdGVuIHVzIHRvIHRoZSBwdW5jaC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBfX3NwZWNfXyBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3NwZWNfXworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYwogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBOb25lCiAKQEAgLTE0ODgsMjEgKzIxODcsMjIgQEAKIGRlZiBfc2FuaXR5X2NoZWNrKG5hbWUsIHBhY2thZ2UsIGxldmVsKToKICAgICAiIiJWZXJpZnkgYXJndW1lbnRzIGFyZSAic2FuZSIuIiIiCiAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKLSAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJtb2R1bGUgbmFtZSBtdXN0IGJlIHN0ciwgbm90IHt9Ii5mb3JtYXQodHlwZShuYW1lKSkpCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcignbW9kdWxlIG5hbWUgbXVzdCBiZSBzdHIsIG5vdCB7fScuZm9ybWF0KHR5cGUobmFtZSkpKQogICAgIGlmIGxldmVsIDwgMDoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbGV2ZWwgbXVzdCBiZSA+PSAwJykKICAgICBpZiBwYWNrYWdlOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYWNrYWdlLCBzdHIpOgotICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJfX3BhY2thZ2VfXyBub3Qgc2V0IHRvIGEgc3RyaW5nIikKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignX19wYWNrYWdlX18gbm90IHNldCB0byBhIHN0cmluZycpCiAgICAgICAgIGVsaWYgcGFja2FnZSBub3QgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBtc2cgPSAoIlBhcmVudCBtb2R1bGUgeyFyfSBub3QgbG9hZGVkLCBjYW5ub3QgcGVyZm9ybSByZWxhdGl2ZSAiCi0gICAgICAgICAgICAgICAgICAgImltcG9ydCIpCisgICAgICAgICAgICBtc2cgPSAoJ1BhcmVudCBtb2R1bGUgeyFyfSBub3QgbG9hZGVkLCBjYW5ub3QgcGVyZm9ybSByZWxhdGl2ZSAnCisgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCcpCiAgICAgICAgICAgICByYWlzZSBTeXN0ZW1FcnJvcihtc2cuZm9ybWF0KHBhY2thZ2UpKQogICAgIGlmIG5vdCBuYW1lIGFuZCBsZXZlbCA9PSAwOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFbXB0eSBtb2R1bGUgbmFtZSIpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0VtcHR5IG1vZHVsZSBuYW1lJykKIAogCi1fRVJSX01TRyA9ICdObyBtb2R1bGUgbmFtZWQgeyFyfScKK19FUlJfTVNHX1BSRUZJWCA9ICdObyBtb2R1bGUgbmFtZWQgJworX0VSUl9NU0cgPSBfRVJSX01TR19QUkVGSVggKyAneyFyfScKIAogZGVmIF9maW5kX2FuZF9sb2FkX3VubG9ja2VkKG5hbWUsIGltcG9ydF8pOgogICAgIHBhdGggPSBOb25lCkBAIC0xNTEzLDU4ICsyMjEzLDI4IEBACiAgICAgICAgICMgQ3Jhenkgc2lkZS1lZmZlY3RzIQogICAgICAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIHN5cy5tb2R1bGVzW25hbWVdCi0gICAgICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHk7IGJlIG5pY2VyIHRvIHNraXAgdGhlIGRpY3QgbG9va3VwLgogICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwYXRoID0gcGFyZW50X21vZHVsZS5fX3BhdGhfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBtc2cgPSAoX0VSUl9NU0cgKyAnOyB7fSBpcyBub3QgYSBwYWNrYWdlJykuZm9ybWF0KG5hbWUsIHBhcmVudCkKKyAgICAgICAgICAgIG1zZyA9IChfRVJSX01TRyArICc7IHshcn0gaXMgbm90IGEgcGFja2FnZScpLmZvcm1hdChuYW1lLCBwYXJlbnQpCiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2csIG5hbWU9bmFtZSkKLSAgICBsb2FkZXIgPSBfZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKLSAgICBpZiBsb2FkZXIgaXMgTm9uZToKLSAgICAgICAgZXhjID0gSW1wb3J0RXJyb3IoX0VSUl9NU0cuZm9ybWF0KG5hbWUpLCBuYW1lPW5hbWUpCi0gICAgICAgICMgVE9ETyhicmV0dCk6IHN3aXRjaCB0byBhIHByb3BlciBNb2R1bGVOb3RGb3VuZCBleGNlcHRpb24gaW4gUHl0aG9uCi0gICAgICAgICMgMy40LgotICAgICAgICBleGMuX25vdF9mb3VuZCA9IFRydWUKLSAgICAgICAgcmFpc2UgZXhjCi0gICAgZWxpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgIyBUaGUgcGFyZW50IGltcG9ydCBtYXkgaGF2ZSBhbHJlYWR5IGltcG9ydGVkIHRoaXMgbW9kdWxlLgotICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgX3ZlcmJvc2VfbWVzc2FnZSgnaW1wb3J0IHshcn0gIyB7IXJ9JywgbmFtZSwgbG9hZGVyKQotICAgICMgQmFja3dhcmRzLWNvbXBhdGliaWxpdHk7IGJlIG5pY2VyIHRvIHNraXAgdGhlIGRpY3QgbG9va3VwLgotICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW25hbWVdCisgICAgc3BlYyA9IF9maW5kX3NwZWMobmFtZSwgcGF0aCkKKyAgICBpZiBzcGVjIGlzIE5vbmU6CisgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKF9FUlJfTVNHLmZvcm1hdChuYW1lKSwgbmFtZT1uYW1lKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IF9TcGVjTWV0aG9kcyhzcGVjKS5fbG9hZF91bmxvY2tlZCgpCiAgICAgaWYgcGFyZW50OgogICAgICAgICAjIFNldCB0aGUgbW9kdWxlIGFzIGFuIGF0dHJpYnV0ZSBvbiBpdHMgcGFyZW50LgogICAgICAgICBwYXJlbnRfbW9kdWxlID0gc3lzLm1vZHVsZXNbcGFyZW50XQogICAgICAgICBzZXRhdHRyKHBhcmVudF9tb2R1bGUsIG5hbWUucnBhcnRpdGlvbignLicpWzJdLCBtb2R1bGUpCi0gICAgIyBTZXQgX19wYWNrYWdlX18gaWYgdGhlIGxvYWRlciBkaWQgbm90LgotICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nLCBOb25lKSBpcyBOb25lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19uYW1lX18KLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gbW9kdWxlLl9fcGFja2FnZV9fLnJwYXJ0aXRpb24oJy4nKVswXQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgIyBTZXQgbG9hZGVyIGlmIG5lZWQgYmUuCi0gICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGxvYWRlcgotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCiAgICAgcmV0dXJuIG1vZHVsZQogCiAKIGRlZiBfZmluZF9hbmRfbG9hZChuYW1lLCBpbXBvcnRfKToKICAgICAiIiJGaW5kIGFuZCBsb2FkIHRoZSBtb2R1bGUsIGFuZCByZWxlYXNlIHRoZSBpbXBvcnQgbG9jay4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGxvY2sgPSBfZ2V0X21vZHVsZV9sb2NrKG5hbWUpCi0gICAgZmluYWxseToKLSAgICAgICAgX2ltcC5yZWxlYXNlX2xvY2soKQotICAgIGxvY2suYWNxdWlyZSgpCi0gICAgdHJ5OgorICAgIHdpdGggX01vZHVsZUxvY2tNYW5hZ2VyKG5hbWUpOgogICAgICAgICByZXR1cm4gX2ZpbmRfYW5kX2xvYWRfdW5sb2NrZWQobmFtZSwgaW1wb3J0XykKLSAgICBmaW5hbGx5OgotICAgICAgICBsb2NrLnJlbGVhc2UoKQogCiAKIGRlZiBfZ2NkX2ltcG9ydChuYW1lLCBwYWNrYWdlPU5vbmUsIGxldmVsPTApOgpAQCAtMTU4NSw4ICsyMjU1LDggQEAKICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQogICAgIGlmIG1vZHVsZSBpcyBOb25lOgogICAgICAgICBfaW1wLnJlbGVhc2VfbG9jaygpCi0gICAgICAgIG1lc3NhZ2UgPSAoImltcG9ydCBvZiB7fSBoYWx0ZWQ7ICIKLSAgICAgICAgICAgICAgICAgICAgIk5vbmUgaW4gc3lzLm1vZHVsZXMiLmZvcm1hdChuYW1lKSkKKyAgICAgICAgbWVzc2FnZSA9ICgnaW1wb3J0IG9mIHt9IGhhbHRlZDsgJworICAgICAgICAgICAgICAgICAgICdOb25lIGluIHN5cy5tb2R1bGVzJy5mb3JtYXQobmFtZSkpCiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1lc3NhZ2UsIG5hbWU9bmFtZSkKICAgICBfbG9ja191bmxvY2tfbW9kdWxlKG5hbWUpCiAgICAgcmV0dXJuIG1vZHVsZQpAQCAtMTYxNiw5ICsyMjg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgIyBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBkaWN0YXRlcyB3ZSBpZ25vcmUgZmFpbGVkCiAgICAgICAgICAgICAgICAgICAgICMgaW1wb3J0cyB0cmlnZ2VyZWQgYnkgZnJvbWxpc3QgZm9yIG1vZHVsZXMgdGhhdCBkb24ndAogICAgICAgICAgICAgICAgICAgICAjIGV4aXN0LgotICAgICAgICAgICAgICAgICAgICAjIFRPRE8oYnJldHQpOiBJbiBQeXRob24gMy40LCBoYXZlIGltcG9ydCByYWlzZQotICAgICAgICAgICAgICAgICAgICAjICAgTW9kdWxlTm90Rm91bmQgYW5kIGNhdGNoIHRoYXQuCi0gICAgICAgICAgICAgICAgICAgIGlmIGdldGF0dHIoZXhjLCAnX25vdF9mb3VuZCcsIEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc3RyKGV4Yykuc3RhcnRzd2l0aChfRVJSX01TR19QUkVGSVgpOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhjLm5hbWUgPT0gZnJvbV9uYW1lOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCkBAIC0xNjg2LDYgKzIzNTQsMTMgQEAKICAgICAgICAgcmV0dXJuIF9oYW5kbGVfZnJvbWxpc3QobW9kdWxlLCBmcm9tbGlzdCwgX2djZF9pbXBvcnQpCiAKIAorZGVmIF9idWlsdGluX2Zyb21fbmFtZShuYW1lKToKKyAgICBzcGVjID0gQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhuYW1lKQorICAgIGlmIHNwZWMgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ25vIGJ1aWx0LWluIG1vZHVsZSBuYW1lZCAnICsgbmFtZSkKKyAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgcmV0dXJuIG1ldGhvZHMuX2xvYWRfdW5sb2NrZWQoKQorCiAKIGRlZiBfc2V0dXAoc3lzX21vZHVsZSwgX2ltcF9tb2R1bGUpOgogICAgICIiIlNldHVwIGltcG9ydGxpYiBieSBpbXBvcnRpbmcgbmVlZGVkIGJ1aWx0LWluIG1vZHVsZXMgYW5kIGluamVjdGluZyB0aGVtCkBAIC0xNzA0LDI0ICsyMzc5LDMxIEBACiAgICAgZWxzZToKICAgICAgICAgQllURUNPREVfU1VGRklYRVMgPSBERUJVR19CWVRFQ09ERV9TVUZGSVhFUwogCisgICAgIyBTZXQgdXAgdGhlIHNwZWMgZm9yIGV4aXN0aW5nIGJ1aWx0aW4vZnJvemVuIG1vZHVsZXMuCiAgICAgbW9kdWxlX3R5cGUgPSB0eXBlKHN5cykKICAgICBmb3IgbmFtZSwgbW9kdWxlIGluIHN5cy5tb2R1bGVzLml0ZW1zKCk6CiAgICAgICAgIGlmIGlzaW5zdGFuY2UobW9kdWxlLCBtb2R1bGVfdHlwZSk6Ci0gICAgICAgICAgICBpZiBub3QgaGFzYXR0cihtb2R1bGUsICdfX2xvYWRlcl9fJyk6Ci0gICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gQnVpbHRpbkltcG9ydGVyCi0gICAgICAgICAgICAgICAgZWxpZiBfaW1wLmlzX2Zyb3plbihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBGcm96ZW5JbXBvcnRlcgorICAgICAgICAgICAgaWYgbmFtZSBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXM6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gQnVpbHRpbkltcG9ydGVyCisgICAgICAgICAgICBlbGlmIF9pbXAuaXNfZnJvemVuKG5hbWUpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IEZyb3plbkltcG9ydGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBzcGVjID0gX3NwZWNfZnJvbV9tb2R1bGUobW9kdWxlLCBsb2FkZXIpCisgICAgICAgICAgICBtZXRob2RzID0gX1NwZWNNZXRob2RzKHNwZWMpCisgICAgICAgICAgICBtZXRob2RzLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCBidWlsdC1pbiBtb2R1bGVzIG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwLgogICAgIHNlbGZfbW9kdWxlID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCiAgICAgZm9yIGJ1aWx0aW5fbmFtZSBpbiAoJ19pbycsICdfd2FybmluZ3MnLCAnYnVpbHRpbnMnLCAnbWFyc2hhbCcpOgogICAgICAgICBpZiBidWlsdGluX25hbWUgbm90IGluIHN5cy5tb2R1bGVzOgotICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoYnVpbHRpbl9uYW1lKQorICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoYnVpbHRpbl9uYW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYnVpbHRpbl9tb2R1bGUgPSBzeXMubW9kdWxlc1tidWlsdGluX25hbWVdCiAgICAgICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsIGJ1aWx0aW5fbmFtZSwgYnVpbHRpbl9tb2R1bGUpCiAKLSAgICBvc19kZXRhaWxzID0gKCdwb3NpeCcsIFsnLyddKSwgKCdudCcsIFsnXFwnLCAnLyddKSwgKCdvczInLCBbJ1xcJywgJy8nXSkKKyAgICAjIERpcmVjdGx5IGxvYWQgdGhlIG9zIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgorICAgIG9zX2RldGFpbHMgPSAoJ3Bvc2l4JywgWycvJ10pLCAoJ250JywgWydcXCcsICcvJ10pCiAgICAgZm9yIGJ1aWx0aW5fb3MsIHBhdGhfc2VwYXJhdG9ycyBpbiBvc19kZXRhaWxzOgogICAgICAgICAjIEFzc3VtcHRpb24gbWFkZSBpbiBfcGF0aF9qb2luKCkKICAgICAgICAgYXNzZXJ0IGFsbChsZW4oc2VwKSA9PSAxIGZvciBzZXAgaW4gcGF0aF9zZXBhcmF0b3JzKQpAQCAtMTczMSwzMiArMjQxMywzMyBAQAogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvc19tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoYnVpbHRpbl9vcykKLSAgICAgICAgICAgICAgICAjIFRPRE86IHJpcCBvdXQgb3MyIGNvZGUgYWZ0ZXIgMy4zIGlzIHJlbGVhc2VkIGFzIHBlciBQRVAgMTEKLSAgICAgICAgICAgICAgICBpZiBidWlsdGluX29zID09ICdvczInIGFuZCAnRU1YIEdDQycgaW4gc3lzLnZlcnNpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhdGhfc2VwID0gcGF0aF9zZXBhcmF0b3JzWzFdCisgICAgICAgICAgICAgICAgb3NfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKGJ1aWx0aW5fb3MpCiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdpbXBvcnRsaWIgcmVxdWlyZXMgcG9zaXggb3IgbnQnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfb3MnLCBvc19tb2R1bGUpCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCisgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsICcnLmpvaW4ocGF0aF9zZXBhcmF0b3JzKSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgX3RocmVhZCBtb2R1bGUgKG5lZWRlZCBkdXJpbmcgYm9vdHN0cmFwKS4KICAgICB0cnk6Ci0gICAgICAgIHRocmVhZF9tb2R1bGUgPSBCdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ190aHJlYWQnKQorICAgICAgICB0aHJlYWRfbW9kdWxlID0gX2J1aWx0aW5fZnJvbV9uYW1lKCdfdGhyZWFkJykKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICMgUHl0aG9uIHdhcyBidWlsdCB3aXRob3V0IHRocmVhZHMKICAgICAgICAgdGhyZWFkX21vZHVsZSA9IE5vbmUKLSAgICB3ZWFrcmVmX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX3dlYWtyZWYnKQorICAgIHNldGF0dHIoc2VsZl9tb2R1bGUsICdfdGhyZWFkJywgdGhyZWFkX21vZHVsZSkKIAorICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgX3dlYWtyZWYgbW9kdWxlIChuZWVkZWQgZHVyaW5nIGJvb3RzdHJhcCkuCisgICAgd2Vha3JlZl9tb2R1bGUgPSBfYnVpbHRpbl9mcm9tX25hbWUoJ193ZWFrcmVmJykKKyAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3dlYWtyZWYnLCB3ZWFrcmVmX21vZHVsZSkKKworICAgICMgRGlyZWN0bHkgbG9hZCB0aGUgd2lucmVnIG1vZHVsZSAobmVlZGVkIGR1cmluZyBib290c3RyYXApLgogICAgIGlmIGJ1aWx0aW5fb3MgPT0gJ250JzoKLSAgICAgICAgd2lucmVnX21vZHVsZSA9IEJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZSgnd2lucmVnJykKKyAgICAgICAgd2lucmVnX21vZHVsZSA9IF9idWlsdGluX2Zyb21fbmFtZSgnd2lucmVnJykKICAgICAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193aW5yZWcnLCB3aW5yZWdfbW9kdWxlKQogCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19vcycsIG9zX21vZHVsZSkKLSAgICBzZXRhdHRyKHNlbGZfbW9kdWxlLCAnX3RocmVhZCcsIHRocmVhZF9tb2R1bGUpCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ193ZWFrcmVmJywgd2Vha3JlZl9tb2R1bGUpCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwJywgcGF0aF9zZXApCi0gICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ3BhdGhfc2VwYXJhdG9ycycsIHNldChwYXRoX3NlcGFyYXRvcnMpKQogICAgICMgQ29uc3RhbnRzCiAgICAgc2V0YXR0cihzZWxmX21vZHVsZSwgJ19yZWxheF9jYXNlJywgX21ha2VfcmVsYXhfY2FzZSgpKQogICAgIEVYVEVOU0lPTl9TVUZGSVhFUy5leHRlbmQoX2ltcC5leHRlbnNpb25fc3VmZml4ZXMoKSkKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvYWJjLnB5IGIvTGliL2ltcG9ydGxpYi9hYmMucHkKaW5kZXggMzg3NTY3YS4uNTU4YWJkMyAxMDA2NDQKLS0tIGEvTGliL2ltcG9ydGxpYi9hYmMucHkKKysrIGIvTGliL2ltcG9ydGxpYi9hYmMucHkKQEAgLTgsMTEgKzgsNiBAQAogICAgICAgICByYWlzZQogICAgIF9mcm96ZW5faW1wb3J0bGliID0gTm9uZQogaW1wb3J0IGFiYwotaW1wb3J0IGltcAotaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBzeXMKLWltcG9ydCB0b2tlbml6ZQotaW1wb3J0IHdhcm5pbmdzCiAKIAogZGVmIF9yZWdpc3RlcihhYnN0cmFjdF9jbHMsICpjbGFzc2VzKToKQEAgLTM3LDI4ICszMiwzNyBAQAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKICAgICAgICAgIiIiQW4gYWJzdHJhY3QgbWV0aG9kIHRoYXQgc2hvdWxkIGZpbmQgYSBtb2R1bGUuCiAgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQgdGhlIG9wdGlvbmFsIHBhdGggaXMgYSBzdHIgb3IgTm9uZS4KLSAgICAgICAgUmV0dXJucyBhIExvYWRlciBvYmplY3QuCisgICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0IG9yIE5vbmUuCiAgICAgICAgICIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCiAKIAogY2xhc3MgTWV0YVBhdGhGaW5kZXIoRmluZGVyKToKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGltcG9ydCBmaW5kZXJzIG9uIHN5cy5tZXRhX3BhdGguIiIiCiAKLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgIyBXZSBkb24ndCBkZWZpbmUgZmluZF9zcGVjKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2gsIHdoZW4gaW1wbGVtZW50ZWQsIHNob3VsZCBmaW5kIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIgYW5kIHRoZSBwYXRoIGlzIGEgc3RyIG9yIE5vbmUuCi0gICAgICAgIFJldHVybnMgYSBMb2FkZXIgb2JqZWN0LgorICAgICAgICAiIiJSZXR1cm4gYSBsb2FkZXIgZm9yIHRoZSBtb2R1bGUuCisKKyAgICAgICAgSWYgbm8gbW9kdWxlIGlzIGZvdW5kLCByZXR1cm4gTm9uZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ciBhbmQKKyAgICAgICAgdGhlIHBhdGggaXMgYSBsaXN0IG9mIHN0cmluZ3Mgb3IgTm9uZS4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkIGluIGZhdm9yIG9mIGZpbmRlci5maW5kX3NwZWMoKS4gSWYgZmluZF9zcGVjKCkKKyAgICAgICAgZXhpc3RzIHRoZW4gYmFja3dhcmRzLWNvbXBhdGlibGUgZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZCBmb3IgdGhpcworICAgICAgICBtZXRob2QuCisKICAgICAgICAgIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ2ZpbmRfc3BlYycpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZm91bmQgPSBzZWxmLmZpbmRfc3BlYyhmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgcmV0dXJuIGZvdW5kLmxvYWRlciBpZiBmb3VuZCBpcyBub3QgTm9uZSBlbHNlIE5vbmUKIAogICAgIGRlZiBpbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKICAgICAgICAgIiIiQW4gb3B0aW9uYWwgbWV0aG9kIGZvciBjbGVhcmluZyB0aGUgZmluZGVyJ3MgY2FjaGUsIGlmIGFueS4KICAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBieSBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKS4KICAgICAgICAgIiIiCi0gICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogCiBfcmVnaXN0ZXIoTWV0YVBhdGhGaW5kZXIsIG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwKICAgICAgICAgICBtYWNoaW5lcnkuUGF0aEZpbmRlciwgbWFjaGluZXJ5LldpbmRvd3NSZWdpc3RyeUZpbmRlcikKQEAgLTY4LDE1ICs3MiwzNSBAQAogCiAgICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgcGF0aCBlbnRyeSBmaW5kZXJzIHVzZWQgYnkgUGF0aEZpbmRlci4iIiIKIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAjIFdlIGRvbid0IGRlZmluZSBmaW5kX3NwZWMoKSBoZXJlIHNpbmNlIHRoYXQgd291bGQgYnJlYWsKKyAgICAjIGhhc2F0dHIgY2hlY2tzIHdlIGRvIHRvIHN1cHBvcnQgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKwogICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCwgd2hlbiBpbXBsZW1lbnRlZCwgcmV0dXJucyBhIG1vZHVsZSBsb2FkZXIuCi0gICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSAyLXR1cGxlIG9mIChMb2FkZXIsIHBvcnRpb24pIHdoZXJlCi0gICAgICAgIHBvcnRpb24gaXMgYSBzZXF1ZW5jZSBvZiBmaWxlIHN5c3RlbSBsb2NhdGlvbnMgY29udHJpYnV0aW5nIHRvIHBhcnQgb2YKLSAgICAgICAgYSBuYW1lc3BhY2UgcGFja2FnZS4gIFRoZSBzZXF1ZW5jZSBtYXkgYmUgZW1wdHkgYW5kIHRoZSBsb2FkZXIgbWF5IGJlCi0gICAgICAgIE5vbmUuCisgICAgICAgICIiIlJldHVybiAobG9hZGVyLCBuYW1lc3BhY2UgcG9ydGlvbikgZm9yIHRoZSBwYXRoIGVudHJ5LgorCisgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFRoZSBuYW1lc3BhY2UgcG9ydGlvbiBpcyBhIHNlcXVlbmNlIG9mCisgICAgICAgIHBhdGggZW50cmllcyBjb250cmlidXRpbmcgdG8gcGFydCBvZiBhIG5hbWVzcGFjZSBwYWNrYWdlLiBUaGUKKyAgICAgICAgc2VxdWVuY2UgbWF5IGJlIGVtcHR5LiAgSWYgbG9hZGVyIGlzIG5vdCBOb25lLCB0aGUgcG9ydGlvbiB3aWxsCisgICAgICAgIGJlIGlnbm9yZWQuCisKKyAgICAgICAgVGhlIHBvcnRpb24gd2lsbCBiZSBkaXNjYXJkZWQgaWYgYW5vdGhlciBwYXRoIGVudHJ5IGZpbmRlcgorICAgICAgICBsb2NhdGVzIHRoZSBtb2R1bGUgYXMgYSBub3JtYWwgbW9kdWxlIG9yIHBhY2thZ2UuCisKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiBmaW5kZXIuZmluZF9zcGVjKCkuIElmIGZpbmRfc3BlYygpCisgICAgICAgIGlzIHByb3ZpZGVkIHRoYW4gYmFja3dhcmRzLWNvbXBhdGlibGUgZnVuY3Rpb25hbGl0eSBpcyBwcm92aWRlZC4KKwogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAnZmluZF9zcGVjJyk6CisgICAgICAgICAgICByZXR1cm4gTm9uZSwgW10KKyAgICAgICAgZm91bmQgPSBzZWxmLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgaWYgZm91bmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBub3QgZm91bmQuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM6CisgICAgICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IGZvdW5kLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zCisgICAgICAgICAgICByZXR1cm4gZm91bmQubG9hZGVyLCBwb3J0aW9ucworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUsIFtdCiAKICAgICBmaW5kX21vZHVsZSA9IF9ib290c3RyYXAuX2ZpbmRfbW9kdWxlX3NoaW0KIApAQCAtODQsNyArMTA4LDYgQEAKICAgICAgICAgIiIiQW4gb3B0aW9uYWwgbWV0aG9kIGZvciBjbGVhcmluZyB0aGUgZmluZGVyJ3MgY2FjaGUsIGlmIGFueS4KICAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCBieSBQYXRoRmluZGVyLmludmFsaWRhdGVfY2FjaGVzKCkuCiAgICAgICAgICIiIgotICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogX3JlZ2lzdGVyKFBhdGhFbnRyeUZpbmRlciwgbWFjaGluZXJ5LkZpbGVGaW5kZXIpCiAKQEAgLTkzLDE2ICsxMTYsNDkgQEAKIAogICAgICIiIkFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGltcG9ydCBsb2FkZXJzLiIiIgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAotICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCBsb2FkIGEgbW9kdWxlLgotICAgICAgICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbW9kdWxlIHRvIGluaXRpYWxpemUgYW5kIGludG8gd2hpY2ggdG8gbG9hZC4KIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKKyAgICAgICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yIGlmIGFueXRoaW5nIHByZXZlbnRzIGl0CisgICAgICAgIGZyb20gY3JlYXRpbmcgYSBuZXcgbW9kdWxlLiAgSXQgbWF5IHJldHVybiBOb25lIHRvIGluZGljYXRlCisgICAgICAgIHRoYXQgdGhlIHNwZWMgc2hvdWxkIGNyZWF0ZSB0aGUgbmV3IG1vZHVsZS4KKworICAgICAgICBjcmVhdGVfbW9kdWxlKCkgaXMgb3B0aW9uYWwuCisKKyAgICAgICAgIiIiCisgICAgICAgICMgQnkgZGVmYXVsdCwgZGVmZXIgdG8gX1NwZWNNZXRob2RzLmNyZWF0ZSgpIGZvciB0aGUgbmV3IG1vZHVsZS4KKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgV2UgZG9uJ3QgZGVmaW5lIGV4ZWNfbW9kdWxlKCkgaGVyZSBzaW5jZSB0aGF0IHdvdWxkIGJyZWFrCisgICAgIyBoYXNhdHRyIGNoZWNrcyB3ZSBkbyB0byBzdXBwb3J0IGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICAiIiJSZXR1cm4gdGhlIGxvYWRlZCBtb2R1bGUuCisKKyAgICAgICAgVGhlIG1vZHVsZSBtdXN0IGJlIGFkZGVkIHRvIHN5cy5tb2R1bGVzIGFuZCBoYXZlIGltcG9ydC1yZWxhdGVkCisgICAgICAgIGF0dHJpYnV0ZXMgc2V0IHByb3Blcmx5LiAgVGhlIGZ1bGxuYW1lIGlzIGEgc3RyLgorCisgICAgICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCBvbiBmYWlsdXJlLgorCisgICAgICAgIFRoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgbG9hZGVyLmV4ZWNfbW9kdWxlKCkuIElmCisgICAgICAgIGV4ZWNfbW9kdWxlKCkgZXhpc3RzIHRoZW4gaXQgaXMgdXNlZCB0byBwcm92aWRlIGEgYmFja3dhcmRzLWNvbXBhdGlibGUKKyAgICAgICAgZnVuY3Rpb25hbGl0eSBmb3IgdGhpcyBtZXRob2QuCisKKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICdleGVjX21vZHVsZScpOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgcmV0dXJuIF9ib290c3RyYXAuX2xvYWRfbW9kdWxlX3NoaW0oc2VsZiwgZnVsbG5hbWUpCisKICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgY2FsY3VsYXRlcyBhbmQgcmV0dXJucyB0aGUKLSAgICAgICAgZ2l2ZW4gbW9kdWxlJ3MgcmVwci4iIiIKKyAgICAgICAgIiIiUmV0dXJuIGEgbW9kdWxlJ3MgcmVwci4KKworICAgICAgICBVc2VkIGJ5IHRoZSBtb2R1bGUgdHlwZSB3aGVuIHRoZSBtZXRob2QgZG9lcyBub3QgcmFpc2UKKyAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvci4KKworICAgICAgICBUaGlzIG1ldGhvZCBpcyBkZXByZWNhdGVkLgorCisgICAgICAgICIiIgorICAgICAgICAjIFRoZSBleGNlcHRpb24gd2lsbCBjYXVzZSBNb2R1bGVUeXBlLl9fcmVwcl9fIHRvIGlnbm9yZSB0aGlzIG1ldGhvZC4KICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiAKQEAgLTExOSw3ICsxNzUsNyBAQAogICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKICAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB0aGUgYnl0ZXMgZm9yCiAgICAgICAgIHRoZSBzcGVjaWZpZWQgcGF0aC4gIFRoZSBwYXRoIG11c3QgYmUgYSBzdHIuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgcmFpc2UgSU9FcnJvcgogCiAKIGNsYXNzIEluc3BlY3RMb2FkZXIoTG9hZGVyKToKQEAgLTEzMSwyNiArMTg3LDQ3IEBACiAKICAgICAiIiIKIAotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gd2hldGhlciB0aGUKLSAgICAgICAgbW9kdWxlIGlzIGEgcGFja2FnZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBib29sLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgICIiIk9wdGlvbmFsIG1ldGhvZCB3aGljaCB3aGVuIGltcGxlbWVudGVkIHNob3VsZCByZXR1cm4gd2hldGhlciB0aGUKKyAgICAgICAgbW9kdWxlIGlzIGEgcGFja2FnZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBib29sLgogCi0gICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgICAgICBSYWlzZXMgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorCiAgICAgZGVmIGdldF9jb2RlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kIHdoaWNoIHdoZW4gaW1wbGVtZW50ZWQgc2hvdWxkIHJldHVybiB0aGUgY29kZSBvYmplY3QKLSAgICAgICAgZm9yIHRoZSBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgdHlwZXMuQ29kZVR5cGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKyAgICAgICAgIiIiTWV0aG9kIHdoaWNoIHJldHVybnMgdGhlIGNvZGUgb2JqZWN0IGZvciB0aGUgbW9kdWxlLgorCisgICAgICAgIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSB0eXBlcy5Db2RlVHlwZSBpZiBwb3NzaWJsZSwgZWxzZQorICAgICAgICByZXR1cm5zIE5vbmUgaWYgYSBjb2RlIG9iamVjdCBkb2VzIG5vdCBtYWtlIHNlbnNlCisgICAgICAgIChlLmcuIGJ1aWx0LWluIG1vZHVsZSkuIFJhaXNlcyBJbXBvcnRFcnJvciBpZiB0aGUgbW9kdWxlIGNhbm5vdCBiZQorICAgICAgICBmb3VuZC4KKyAgICAgICAgIiIiCisgICAgICAgIHNvdXJjZSA9IHNlbGYuZ2V0X3NvdXJjZShmdWxsbmFtZSkKKyAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2UpCiAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGdldF9zb3VyY2Uoc2VsZiwgZnVsbG5hbWUpOgogICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2Qgd2hpY2ggc2hvdWxkIHJldHVybiB0aGUgc291cmNlIGNvZGUgZm9yIHRoZQotICAgICAgICBtb2R1bGUuICBUaGUgZnVsbG5hbWUgaXMgYSBzdHIuICBSZXR1cm5zIGEgc3RyLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisgICAgICAgIG1vZHVsZS4gIFRoZSBmdWxsbmFtZSBpcyBhIHN0ci4gIFJldHVybnMgYSBzdHIuCiAKLV9yZWdpc3RlcihJbnNwZWN0TG9hZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKKyAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKworICAgIGRlZiBzb3VyY2VfdG9fY29kZShzZWxmLCBkYXRhLCBwYXRoPSc8c3RyaW5nPicpOgorICAgICAgICAiIiJDb21waWxlICdkYXRhJyBpbnRvIGEgY29kZSBvYmplY3QuCisKKyAgICAgICAgVGhlICdkYXRhJyBhcmd1bWVudCBjYW4gYmUgYW55dGhpbmcgdGhhdCBjb21waWxlKCkgY2FuIGhhbmRsZS4gVGhlJ3BhdGgnCisgICAgICAgIGFyZ3VtZW50IHNob3VsZCBiZSB3aGVyZSB0aGUgZGF0YSB3YXMgcmV0cmlldmVkICh3aGVuIGFwcGxpY2FibGUpLiIiIgorICAgICAgICByZXR1cm4gY29tcGlsZShkYXRhLCBwYXRoLCAnZXhlYycsIGRvbnRfaW5oZXJpdD1UcnVlKQorCisgICAgZXhlY19tb2R1bGUgPSBfYm9vdHN0cmFwLl9Mb2FkZXJCYXNpY3MuZXhlY19tb2R1bGUKKyAgICBsb2FkX21vZHVsZSA9IF9ib290c3RyYXAuX0xvYWRlckJhc2ljcy5sb2FkX21vZHVsZQorCitfcmVnaXN0ZXIoSW5zcGVjdExvYWRlciwgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlciwgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyKQogCiAKIGNsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbnNwZWN0TG9hZGVyKToKQEAgLTE2NSw4ICsyNDIsMjkgQEAKICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CiAgICAgICAgICIiIkFic3RyYWN0IG1ldGhvZCB3aGljaCBzaG91bGQgcmV0dXJuIHRoZSB2YWx1ZSB0aGF0IF9fZmlsZV9fIGlzIHRvIGJlCi0gICAgICAgIHNldCB0by4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZXQgdG8uCisKKyAgICAgICAgUmFpc2VzIEltcG9ydEVycm9yIGlmIHRoZSBtb2R1bGUgY2Fubm90IGJlIGZvdW5kLgorICAgICAgICAiIiIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKworICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgICIiIk1ldGhvZCB0byByZXR1cm4gdGhlIGNvZGUgb2JqZWN0IGZvciBmdWxsbmFtZS4KKworICAgICAgICBTaG91bGQgcmV0dXJuIE5vbmUgaWYgbm90IGFwcGxpY2FibGUgKGUuZy4gYnVpbHQtaW4gbW9kdWxlKS4KKyAgICAgICAgUmFpc2UgSW1wb3J0RXJyb3IgaWYgdGhlIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAgICIiIgorICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9zb3VyY2UoZnVsbG5hbWUpCisgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGF0aCA9IHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2UpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2VfdG9fY29kZShzb3VyY2UsIHBhdGgpCisKK19yZWdpc3RlcihFeGVjdXRpb25Mb2FkZXIsIG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKQogCiAKIGNsYXNzIEZpbGVMb2FkZXIoX2Jvb3RzdHJhcC5GaWxlTG9hZGVyLCBSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyKToKQEAgLTE5OCw3ICsyOTYsNyBAQAogICAgIGRlZiBwYXRoX210aW1lKHNlbGYsIHBhdGgpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIChpbnQpIG1vZGlmaWNhdGlvbiB0aW1lIGZvciB0aGUgcGF0aCAoc3RyKS4iIiIKICAgICAgICAgaWYgc2VsZi5wYXRoX3N0YXRzLl9fZnVuY19fIGlzIFNvdXJjZUxvYWRlci5wYXRoX3N0YXRzOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgogICAgICAgICByZXR1cm4gaW50KHNlbGYucGF0aF9zdGF0cyhwYXRoKVsnbXRpbWUnXSkKIAogICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgpAQCAtMjA5LDcgKzMwNyw3IEBACiAgICAgICAgIC0gJ3NpemUnIChvcHRpb25hbCkgaXMgdGhlIHNpemUgaW4gYnl0ZXMgb2YgdGhlIHNvdXJjZSBjb2RlLgogICAgICAgICAiIiIKICAgICAgICAgaWYgc2VsZi5wYXRoX210aW1lLl9fZnVuY19fIGlzIFNvdXJjZUxvYWRlci5wYXRoX210aW1lOgotICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgogICAgICAgICByZXR1cm4geydtdGltZSc6IHNlbGYucGF0aF9tdGltZShwYXRoKX0KIAogICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKQEAgLTIyMCwxODUgKzMxOCw2IEBACiAgICAgICAgIEFueSBuZWVkZWQgaW50ZXJtZWRpYXJ5IGRpcmVjdG9yaWVzIGFyZSB0byBiZSBjcmVhdGVkLiBJZiBmb3Igc29tZQogICAgICAgICByZWFzb24gdGhlIGZpbGUgY2Fubm90IGJlIHdyaXR0ZW4gYmVjYXVzZSBvZiBwZXJtaXNzaW9ucywgZmFpbAogICAgICAgICBzaWxlbnRseS4KLQogICAgICAgICAiIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgogCiBfcmVnaXN0ZXIoU291cmNlTG9hZGVyLCBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKLQotY2xhc3MgUHlMb2FkZXIoU291cmNlTG9hZGVyKToKLQotICAgICIiIkltcGxlbWVudCB0aGUgZGVwcmVjYXRlZCBQeUxvYWRlciBBQkMgaW4gdGVybXMgb2YgU291cmNlTG9hZGVyLgotCi0gICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkISBJdCBpcyBzbGF0ZWQgZm9yIHJlbW92YWwgaW4gUHl0aG9uIDMuNC4KLSAgICBJZiBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMSBpcyBub3QgbmVlZGVkIHRoZW4gaW1wbGVtZW50IHRoZQotICAgIFNvdXJjZUxvYWRlciBBQkMgaW5zdGVhZCBvZiB0aGlzIGNsYXNzLiBJZiBQeXRob24gMy4xIGNvbXBhdGliaWxpdHkgaXMKLSAgICBuZWVkZWQsIHRoZW4gdXNlIHRoZSBmb2xsb3dpbmcgaWRpb20gdG8gaGF2ZSBhIHNpbmdsZSBjbGFzcyB0aGF0IGlzCi0gICAgY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgb253YXJkczo6Ci0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBTb3VyY2VMb2FkZXIKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgZnJvbSBpbXBvcnRsaWIuYWJjIGltcG9ydCBQeUxvYWRlciBhcyBTb3VyY2VMb2FkZXIKLQotCi0gICAgICAgIGNsYXNzIEN1c3RvbUxvYWRlcihTb3VyY2VMb2FkZXIpOgotICAgICAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgIyBJbXBsZW1lbnQgLi4uCi0KLSAgICAgICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAgICAgJycnSW1wbGVtZW50IHNvdXJjZV9wYXRoIGluIHRlcm1zIG9mIGdldF9maWxlbmFtZS4nJycKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmdldF9maWxlbmFtZShmdWxsbmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoc2VsZi5nZXRfZmlsZW5hbWUoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKVswXSA9PSAnX19pbml0X18nCi0KLSAgICAiIiIKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgc291cmNlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuICBBY2NlcHRzIGEgc3RyIG1vZHVsZSBuYW1lIGFuZCByZXR1cm5zIHRoZSBwYXRoIHRvCi0gICAgICAgIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIG1vZHVsZS4iIiIKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkltcGxlbWVudCBnZXRfZmlsZW5hbWUgaW4gdGVybXMgb2Ygc291cmNlX3BhdGguCi0KLSAgICAgICAgQXMgZ2V0X2ZpbGVuYW1lIHNob3VsZCBvbmx5IHJldHVybiBhIHNvdXJjZSBmaWxlIHBhdGggdGhlcmUgaXMgbm8KLSAgICAgICAgY2hhbmNlIG9mIHRoZSBwYXRoIG5vdCBleGlzdGluZyBidXQgbG9hZGluZyBzdGlsbCBiZWluZyBwb3NzaWJsZSwgc28KLSAgICAgICAgSW1wb3J0RXJyb3Igc2hvdWxkIHByb3BhZ2F0ZSBpbnN0ZWFkIG9mIGJlaW5nIHR1cm5lZCBpbnRvIHJldHVybmluZwotICAgICAgICBOb25lLgotCi0gICAgICAgICIiIgotICAgICAgICB3YXJuaW5ncy53YXJuKCJpbXBvcnRsaWIuYWJjLlB5TG9hZGVyIGlzIGRlcHJlY2F0ZWQgYW5kIGlzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xhdGVkIGZvciByZW1vdmFsIGluIFB5dGhvbiAzLjQ7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIFNvdXJjZUxvYWRlciBpbnN0ZWFkLiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSB0aGUgaW1wb3J0bGliIGRvY3VtZW50YXRpb24gb24gaG93IHRvIGJlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGF0aWJsZSB3aXRoIFB5dGhvbiAzLjEgb253YXJkcy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICBwYXRoID0gc2VsZi5zb3VyY2VfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgcGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobmFtZT1mdWxsbmFtZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBwYXRoCi0KLQotY2xhc3MgUHlQeWNMb2FkZXIoUHlMb2FkZXIpOgotCi0gICAgIiIiQWJzdHJhY3QgYmFzZSBjbGFzcyB0byBhc3Npc3QgaW4gbG9hZGluZyBzb3VyY2UgYW5kIGJ5dGVjb2RlIGJ5Ci0gICAgcmVxdWlyaW5nIG9ubHkgYmFjay1lbmQgc3RvcmFnZSBtZXRob2RzIHRvIGJlIGltcGxlbWVudGVkLgotCi0gICAgVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkISBSZW1vdmFsIGlzIHNsYXRlZCBmb3IgUHl0aG9uIDMuNC4gSW1wbGVtZW50Ci0gICAgdGhlIFNvdXJjZUxvYWRlciBBQkMgaW5zdGVhZC4gSWYgUHl0aG9uIDMuMSBjb21wYXRpYmlsaXR5IGlzIG5lZWRlZCwgc2VlCi0gICAgUHlMb2FkZXIuCi0KLSAgICBUaGUgbWV0aG9kcyBnZXRfY29kZSwgZ2V0X3NvdXJjZSwgYW5kIGxvYWRfbW9kdWxlIGFyZSBpbXBsZW1lbnRlZCBmb3IgdGhlCi0gICAgdXNlci4KLQotICAgICIiIgotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIlJldHVybiB0aGUgc291cmNlIG9yIGJ5dGVjb2RlIGZpbGUgcGF0aC4iIiIKLSAgICAgICAgcGF0aCA9IHNlbGYuc291cmNlX3BhdGgoZnVsbG5hbWUpCi0gICAgICAgIGlmIHBhdGggaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gcGF0aAotICAgICAgICBwYXRoID0gc2VsZi5ieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBwYXRoIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIm5vIHNvdXJjZSBvciBieXRlY29kZSBwYXRoIGF2YWlsYWJsZSBmb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7MCFyfSIuZm9ybWF0KGZ1bGxuYW1lKSwgbmFtZT1mdWxsbmFtZSkKLQotICAgIGRlZiBnZXRfY29kZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICIiIkdldCBhIGNvZGUgb2JqZWN0IGZyb20gc291cmNlIG9yIGJ5dGVjb2RlLiIiIgotICAgICAgICB3YXJuaW5ncy53YXJuKCJpbXBvcnRsaWIuYWJjLlB5UHljTG9hZGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHNsYXRlZCBmb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmFsIGluIFB5dGhvbiAzLjQ7IHVzZSBTb3VyY2VMb2FkZXIgaW5zdGVhZC4gIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJZiBQeXRob24gMy4xIGNvbXBhdGliaWxpdHkgaXMgcmVxdWlyZWQsIHNlZSB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsYXRlc3QgZG9jdW1lbnRhdGlvbiBmb3IgUHlMb2FkZXIuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgc291cmNlX3RpbWVzdGFtcCA9IHNlbGYuc291cmNlX210aW1lKGZ1bGxuYW1lKQotICAgICAgICAjIFRyeSB0byB1c2UgYnl0ZWNvZGUgaWYgaXQgaXMgYXZhaWxhYmxlLgotICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi5ieXRlY29kZV9wYXRoKGZ1bGxuYW1lKQotICAgICAgICBpZiBieXRlY29kZV9wYXRoOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtYWdpYyA9IGRhdGFbOjRdCi0gICAgICAgICAgICAgICAgaWYgbGVuKG1hZ2ljKSA8IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBtYWdpYyBudW1iZXIgaW4ge30iLmZvcm1hdChmdWxsbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPWZ1bGxuYW1lLCBwYXRoPWJ5dGVjb2RlX3BhdGgpCi0gICAgICAgICAgICAgICAgcmF3X3RpbWVzdGFtcCA9IGRhdGFbNDo4XQotICAgICAgICAgICAgICAgIGlmIGxlbihyYXdfdGltZXN0YW1wKSA8IDQ6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yKCJiYWQgdGltZXN0YW1wIGluIHt9Ii5mb3JtYXQoZnVsbG5hbWUpKQotICAgICAgICAgICAgICAgIHB5Y190aW1lc3RhbXAgPSBfYm9vdHN0cmFwLl9yX2xvbmcocmF3X3RpbWVzdGFtcCkKLSAgICAgICAgICAgICAgICByYXdfc291cmNlX3NpemUgPSBkYXRhWzg6MTJdCi0gICAgICAgICAgICAgICAgaWYgbGVuKHJhd19zb3VyY2Vfc2l6ZSkgIT0gNDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoImJhZCBmaWxlIHNpemUgaW4ge30iLmZvcm1hdChmdWxsbmFtZSkpCi0gICAgICAgICAgICAgICAgIyBTb3VyY2Ugc2l6ZSBpcyB1bnVzZWQgYXMgdGhlIEFCQyBkb2VzIG5vdCBwcm92aWRlIGEgd2F5IHRvCi0gICAgICAgICAgICAgICAgIyBnZXQgdGhlIHNpemUgb2YgdGhlIHNvdXJjZSBhaGVhZCBvZiByZWFkaW5nIGl0LgotICAgICAgICAgICAgICAgIGJ5dGVjb2RlID0gZGF0YVsxMjpdCi0gICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgbWFnaWMgbnVtYmVyIGlzIHZhbGlkLgotICAgICAgICAgICAgICAgIGlmIGltcC5nZXRfbWFnaWMoKSAhPSBtYWdpYzoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICAgICAiYmFkIG1hZ2ljIG51bWJlciBpbiB7fSIuZm9ybWF0KGZ1bGxuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUsIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgICAgICAjIFZlcmlmeSB0aGF0IHRoZSBieXRlY29kZSBpcyBub3Qgc3RhbGUgKG9ubHkgbWF0dGVycyB3aGVuCi0gICAgICAgICAgICAgICAgIyB0aGVyZSBpcyBzb3VyY2UgdG8gZmFsbCBiYWNrIG9uLgotICAgICAgICAgICAgICAgIGlmIHNvdXJjZV90aW1lc3RhbXA6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHB5Y190aW1lc3RhbXAgPCBzb3VyY2VfdGltZXN0YW1wOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoImJ5dGVjb2RlIGlzIHN0YWxlIiwgbmFtZT1mdWxsbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9Ynl0ZWNvZGVfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICAjIElmIHNvdXJjZSBpcyBhdmFpbGFibGUgZ2l2ZSBpdCBhIHNob3QuCi0gICAgICAgICAgICAgICAgaWYgc291cmNlX3RpbWVzdGFtcCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgQnl0ZWNvZGUgc2VlbXMgZmluZSwgc28gdHJ5IHRvIHVzZSBpdC4KLSAgICAgICAgICAgICAgICByZXR1cm4gbWFyc2hhbC5sb2FkcyhieXRlY29kZSkKLSAgICAgICAgZWxpZiBzb3VyY2VfdGltZXN0YW1wIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigibm8gc291cmNlIG9yIGJ5dGVjb2RlIGF2YWlsYWJsZSB0byBjcmVhdGUgY29kZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IGZvciB7MCFyfSIuZm9ybWF0KGZ1bGxuYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9ZnVsbG5hbWUpCi0gICAgICAgICMgVXNlIHRoZSBzb3VyY2UuCi0gICAgICAgIHNvdXJjZV9wYXRoID0gc2VsZi5zb3VyY2VfcGF0aChmdWxsbmFtZSkKLSAgICAgICAgaWYgc291cmNlX3BhdGggaXMgTm9uZToKLSAgICAgICAgICAgIG1lc3NhZ2UgPSAiYSBzb3VyY2UgcGF0aCBtdXN0IGV4aXN0IHRvIGxvYWQgezB9Ii5mb3JtYXQoZnVsbG5hbWUpCi0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtZXNzYWdlLCBuYW1lPWZ1bGxuYW1lKQotICAgICAgICBzb3VyY2UgPSBzZWxmLmdldF9kYXRhKHNvdXJjZV9wYXRoKQotICAgICAgICBjb2RlX29iamVjdCA9IGNvbXBpbGUoc291cmNlLCBzb3VyY2VfcGF0aCwgJ2V4ZWMnLCBkb250X2luaGVyaXQ9VHJ1ZSkKLSAgICAgICAgIyBHZW5lcmF0ZSBieXRlY29kZSBhbmQgd3JpdGUgaXQgb3V0LgotICAgICAgICBpZiBub3Qgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKF9ib290c3RyYXAuX3dfbG9uZyhzb3VyY2VfdGltZXN0YW1wKSkKLSAgICAgICAgICAgIGRhdGEuZXh0ZW5kKF9ib290c3RyYXAuX3dfbG9uZyhsZW4oc291cmNlKSAmIDB4RkZGRkZGRkYpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCi0gICAgICAgICAgICBzZWxmLndyaXRlX2J5dGVjb2RlKGZ1bGxuYW1lLCBkYXRhKQotICAgICAgICByZXR1cm4gY29kZV9vYmplY3QKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiBBY2NlcHRzIGEgc3RyIGZpbGVuYW1lIGFuZCByZXR1cm5zIGFuIGludAotICAgICAgICBtb2RpZmljYXRpb24gdGltZSBmb3IgdGhlIHNvdXJjZSBvZiB0aGUgbW9kdWxlLiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0KLSAgICBAYWJjLmFic3RyYWN0bWV0aG9kCi0gICAgZGVmIGJ5dGVjb2RlX3BhdGgoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICAiIiJBYnN0cmFjdCBtZXRob2QuIEFjY2VwdHMgYSBzdHIgZmlsZW5hbWUgYW5kIHJldHVybnMgdGhlIHN0ciBwYXRobmFtZQotICAgICAgICB0byB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBtb2R1bGUuIiIiCi0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgd3JpdGVfYnl0ZWNvZGUoc2VsZiwgZnVsbG5hbWUsIGJ5dGVjb2RlKToKLSAgICAgICAgIiIiQWJzdHJhY3QgbWV0aG9kLiAgQWNjZXB0cyBhIHN0ciBmaWxlbmFtZSBhbmQgYnl0ZXMgb2JqZWN0Ci0gICAgICAgIHJlcHJlc2VudGluZyB0aGUgYnl0ZWNvZGUgZm9yIHRoZSBtb2R1bGUuICBSZXR1cm5zIGEgYm9vbGVhbgotICAgICAgICByZXByZXNlbnRpbmcgd2hldGhlciB0aGUgYnl0ZWNvZGUgd2FzIHdyaXR0ZW4gb3Igbm90LiIiIgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCmRpZmYgLS1naXQgYS9MaWIvaW1wb3J0bGliL21hY2hpbmVyeS5weSBiL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5CmluZGV4IGZmODI2ZTQuLjJlMWIyZDcgMTAwNjQ0Ci0tLSBhL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5CisrKyBiL0xpYi9pbXBvcnRsaWIvbWFjaGluZXJ5LnB5CkBAIC01LDYgKzUsNyBAQAogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgKFNPVVJDRV9TVUZGSVhFUywgREVCVUdfQllURUNPREVfU1VGRklYRVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTLCBCWVRFQ09ERV9TVUZGSVhFUywKICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRFTlNJT05fU1VGRklYRVMpCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBNb2R1bGVTcGVjCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBCdWlsdGluSW1wb3J0ZXIKIGZyb20gLl9ib290c3RyYXAgaW1wb3J0IEZyb3plbkltcG9ydGVyCiBmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBXaW5kb3dzUmVnaXN0cnlGaW5kZXIKZGlmZiAtLWdpdCBhL0xpYi9pbXBvcnRsaWIvdXRpbC5weSBiL0xpYi9pbXBvcnRsaWIvdXRpbC5weQppbmRleCAxMzE2NDM3Li42ZDczYjFkIDEwMDY0NAotLS0gYS9MaWIvaW1wb3J0bGliL3V0aWwucHkKKysrIGIvTGliL2ltcG9ydGxpYi91dGlsLnB5CkBAIC0xLDkgKzEsMTggQEAKICIiIlV0aWxpdHkgY29kZSBmb3IgY29uc3RydWN0aW5nIGltcG9ydGVycywgZXRjLiIiIgogCi1mcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBtb2R1bGVfZm9yX2xvYWRlcgotZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc2V0X2xvYWRlcgotZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgc2V0X3BhY2thZ2UKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IE1BR0lDX05VTUJFUgorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgY2FjaGVfZnJvbV9zb3VyY2UKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IGRlY29kZV9zb3VyY2UKK2Zyb20gLl9ib290c3RyYXAgaW1wb3J0IHNvdXJjZV9mcm9tX2NhY2hlCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzcGVjX2Zyb21fbG9hZGVyCitmcm9tIC5fYm9vdHN0cmFwIGltcG9ydCBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbgogZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgX3Jlc29sdmVfbmFtZQorZnJvbSAuX2Jvb3RzdHJhcCBpbXBvcnQgX2ZpbmRfc3BlYworCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCitpbXBvcnQgZnVuY3Rvb2xzCitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKIAogCiBkZWYgcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpOgpAQCAtMTksMyArMjgsMTc1IEBACiAgICAgICAgICAgICBicmVhawogICAgICAgICBsZXZlbCArPSAxCiAgICAgcmV0dXJuIF9yZXNvbHZlX25hbWUobmFtZVtsZXZlbDpdLCBwYWNrYWdlLCBsZXZlbCkKKworCitkZWYgX2ZpbmRfc3BlY19mcm9tX3BhdGgobmFtZSwgcGF0aD1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNwZWMgZm9yIHRoZSBzcGVjaWZpZWQgbW9kdWxlLgorCisgICAgRmlyc3QsIHN5cy5tb2R1bGVzIGlzIGNoZWNrZWQgdG8gc2VlIGlmIHRoZSBtb2R1bGUgd2FzIGFscmVhZHkgaW1wb3J0ZWQuIElmCisgICAgc28sIHRoZW4gc3lzLm1vZHVsZXNbbmFtZV0uX19zcGVjX18gaXMgcmV0dXJuZWQuIElmIHRoYXQgaGFwcGVucyB0byBiZQorICAgIHNldCB0byBOb25lLCB0aGVuIFZhbHVlRXJyb3IgaXMgcmFpc2VkLiBJZiB0aGUgbW9kdWxlIGlzIG5vdCBpbgorICAgIHN5cy5tb2R1bGVzLCB0aGVuIHN5cy5tZXRhX3BhdGggaXMgc2VhcmNoZWQgZm9yIGEgc3VpdGFibGUgc3BlYyB3aXRoIHRoZQorICAgIHZhbHVlIG9mICdwYXRoJyBnaXZlbiB0byB0aGUgZmluZGVycy4gTm9uZSBpcyByZXR1cm5lZCBpZiBubyBzcGVjIGNvdWxkCisgICAgYmUgZm91bmQuCisKKyAgICBEb3R0ZWQgbmFtZXMgZG8gbm90IGhhdmUgdGhlaXIgcGFyZW50IHBhY2thZ2VzIGltcGxpY2l0bHkgaW1wb3J0ZWQuIFlvdSB3aWxsCisgICAgbW9zdCBsaWtlbHkgbmVlZCB0byBleHBsaWNpdGx5IGltcG9ydCBhbGwgcGFyZW50IHBhY2thZ2VzIGluIHRoZSBwcm9wZXIKKyAgICBvcmRlciBmb3IgYSBzdWJtb2R1bGUgdG8gZ2V0IHRoZSBjb3JyZWN0IHNwZWMuCisKKyAgICAiIiIKKyAgICBpZiBuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgcmV0dXJuIF9maW5kX3NwZWMobmFtZSwgcGF0aCkKKyAgICBlbHNlOgorICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fc3BlY19fIGlzIE5vbmUnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKworZGVmIGZpbmRfc3BlYyhuYW1lLCBwYWNrYWdlPU5vbmUpOgorICAgICIiIlJldHVybiB0aGUgc3BlYyBmb3IgdGhlIHNwZWNpZmllZCBtb2R1bGUuCisKKyAgICBGaXJzdCwgc3lzLm1vZHVsZXMgaXMgY2hlY2tlZCB0byBzZWUgaWYgdGhlIG1vZHVsZSB3YXMgYWxyZWFkeSBpbXBvcnRlZC4gSWYKKyAgICBzbywgdGhlbiBzeXMubW9kdWxlc1tuYW1lXS5fX3NwZWNfXyBpcyByZXR1cm5lZC4gSWYgdGhhdCBoYXBwZW5zIHRvIGJlCisgICAgc2V0IHRvIE5vbmUsIHRoZW4gVmFsdWVFcnJvciBpcyByYWlzZWQuIElmIHRoZSBtb2R1bGUgaXMgbm90IGluCisgICAgc3lzLm1vZHVsZXMsIHRoZW4gc3lzLm1ldGFfcGF0aCBpcyBzZWFyY2hlZCBmb3IgYSBzdWl0YWJsZSBzcGVjIHdpdGggdGhlCisgICAgdmFsdWUgb2YgJ3BhdGgnIGdpdmVuIHRvIHRoZSBmaW5kZXJzLiBOb25lIGlzIHJldHVybmVkIGlmIG5vIHNwZWMgY291bGQKKyAgICBiZSBmb3VuZC4KKworICAgIElmIHRoZSBuYW1lIGlzIGZvciBzdWJtb2R1bGUgKGNvbnRhaW5zIGEgZG90KSwgdGhlIHBhcmVudCBtb2R1bGUgaXMKKyAgICBhdXRvbWF0aWNhbGx5IGltcG9ydGVkLgorCisgICAgVGhlIG5hbWUgYW5kIHBhY2thZ2UgYXJndW1lbnRzIHdvcmsgdGhlIHNhbWUgYXMgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKS4KKyAgICBJbiBvdGhlciB3b3JkcywgcmVsYXRpdmUgbW9kdWxlIG5hbWVzICh3aXRoIGxlYWRpbmcgZG90cykgd29yay4KKworICAgICIiIgorICAgIGZ1bGxuYW1lID0gcmVzb2x2ZV9uYW1lKG5hbWUsIHBhY2thZ2UpIGlmIG5hbWUuc3RhcnRzd2l0aCgnLicpIGVsc2UgbmFtZQorICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgcGFyZW50X25hbWUgPSBmdWxsbmFtZS5ycGFydGl0aW9uKCcuJylbMF0KKyAgICAgICAgaWYgcGFyZW50X25hbWU6CisgICAgICAgICAgICAjIFVzZSBidWlsdGlucy5fX2ltcG9ydF9fKCkgaW4gY2FzZSBzb21lb25lIHJlcGxhY2VkIGl0LgorICAgICAgICAgICAgcGFyZW50ID0gX19pbXBvcnRfXyhwYXJlbnRfbmFtZSwgZnJvbWxpc3Q9WydfX3BhdGhfXyddKQorICAgICAgICAgICAgcmV0dXJuIF9maW5kX3NwZWMoZnVsbG5hbWUsIHBhcmVudC5fX3BhdGhfXykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBfZmluZF9zcGVjKGZ1bGxuYW1lLCBOb25lKQorICAgIGVsc2U6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzW2Z1bGxuYW1lXQorICAgICAgICBpZiBtb2R1bGUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNwZWMgPSBtb2R1bGUuX19zcGVjX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigne30uX19zcGVjX18gaXMgbm90IHNldCcuZm9ybWF0KG5hbWUpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3t9Ll9fc3BlY19fIGlzIE5vbmUnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgIHJldHVybiBzcGVjCisKKworQGNvbnRleHRtYW5hZ2VyCitkZWYgX21vZHVsZV90b19sb2FkKG5hbWUpOgorICAgIGlzX3JlbG9hZCA9IG5hbWUgaW4gc3lzLm1vZHVsZXMKKworICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzLmdldChuYW1lKQorICAgIGlmIG5vdCBpc19yZWxvYWQ6CisgICAgICAgICMgVGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIG9wZW4oKSBpcyBjYWxsZWQgYXMgdGhlICdpbycgbW9kdWxlCisgICAgICAgICMgaW1wbGljaXRseSBpbXBvcnRzICdsb2NhbGUnIGFuZCB3b3VsZCBvdGhlcndpc2UgdHJpZ2dlciBhbgorICAgICAgICAjIGluZmluaXRlIGxvb3AuCisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShuYW1lKQorICAgICAgICAjIFRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSBwdXR0aW5nIHRoZSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMKKyAgICAgICAgIyAob3RoZXJ3aXNlIGFuIG9wdGltaXphdGlvbiBzaG9ydGN1dCBpbiBpbXBvcnQuYyBiZWNvbWVzIHdyb25nKQorICAgICAgICBtb2R1bGUuX19pbml0aWFsaXppbmdfXyA9IFRydWUKKyAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICB0cnk6CisgICAgICAgIHlpZWxkIG1vZHVsZQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgIGlmIG5vdCBpc19yZWxvYWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgIGZpbmFsbHk6CisgICAgICAgIG1vZHVsZS5fX2luaXRpYWxpemluZ19fID0gRmFsc2UKKworCitkZWYgc2V0X3BhY2thZ2UoZnhuKToKKyAgICAiIiJTZXQgX19wYWNrYWdlX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4KKworICAgICIiIgorICAgIEBmdW5jdG9vbHMud3JhcHMoZnhuKQorICAgIGRlZiBzZXRfcGFja2FnZV93cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdhcm5pbmdzLndhcm4oJ1RoZSBpbXBvcnQgc3lzdGVtIG5vdyB0YWtlcyBjYXJlIG9mIHRoaXMgYXV0b21hdGljYWxseS4nLAorICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0yKQorICAgICAgICBtb2R1bGUgPSBmeG4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBpZiBnZXRhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJywgTm9uZSkgaXMgTm9uZToKKyAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IG1vZHVsZS5fX25hbWVfXworICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKToKKyAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBtb2R1bGUuX19wYWNrYWdlX18ucnBhcnRpdGlvbignLicpWzBdCisgICAgICAgIHJldHVybiBtb2R1bGUKKyAgICByZXR1cm4gc2V0X3BhY2thZ2Vfd3JhcHBlcgorCisKK2RlZiBzZXRfbG9hZGVyKGZ4bik6CisgICAgIiIiU2V0IF9fbG9hZGVyX18gb24gdGhlIHJldHVybmVkIG1vZHVsZS4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZC4KKworICAgICIiIgorICAgIEBmdW5jdG9vbHMud3JhcHMoZnhuKQorICAgIGRlZiBzZXRfbG9hZGVyX3dyYXBwZXIoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2FybmluZ3Mud2FybignVGhlIGltcG9ydCBzeXN0ZW0gbm93IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LicsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCisgICAgICAgIG1vZHVsZSA9IGZ4bihzZWxmLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGlmIGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorICAgIHJldHVybiBzZXRfbG9hZGVyX3dyYXBwZXIKKworCitkZWYgbW9kdWxlX2Zvcl9sb2FkZXIoZnhuKToKKyAgICAiIiJEZWNvcmF0b3IgdG8gaGFuZGxlIHNlbGVjdGluZyB0aGUgcHJvcGVyIG1vZHVsZSBmb3IgbG9hZGVycy4KKworICAgIFRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gaXMgcGFzc2VkIHRoZSBtb2R1bGUgdG8gdXNlIGluc3RlYWQgb2YgdGhlIG1vZHVsZQorICAgIG5hbWUuIFRoZSBtb2R1bGUgcGFzc2VkIGluIHRvIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgZnJvbSBzeXMubW9kdWxlcyBpZgorICAgIGl0IGFscmVhZHkgZXhpc3RzIG9yIGlzIGEgbmV3IG1vZHVsZS4gSWYgdGhlIG1vZHVsZSBpcyBuZXcsIHRoZW4gX19uYW1lX18KKyAgICBpcyBzZXQgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBtZXRob2QsIF9fbG9hZGVyX18gaXMgc2V0IHRvIHNlbGYsIGFuZAorICAgIF9fcGFja2FnZV9fIGlzIHNldCBhY2NvcmRpbmdseSAoaWYgc2VsZi5pc19wYWNrYWdlKCkgaXMgZGVmaW5lZCkgd2lsbCBiZSBzZXQKKyAgICBiZWZvcmUgaXQgaXMgcGFzc2VkIHRvIHRoZSBkZWNvcmF0ZWQgZnVuY3Rpb24gKGlmIHNlbGYuaXNfcGFja2FnZSgpIGRvZXMKKyAgICBub3Qgd29yayBmb3IgdGhlIG1vZHVsZSBpdCB3aWxsIGJlIHNldCBwb3N0LWxvYWQpLgorCisgICAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlIGRlY29yYXRvciBjcmVhdGVkIHRoZSBtb2R1bGUgaXQgaXMKKyAgICBzdWJzZXF1ZW50bHkgcmVtb3ZlZCBmcm9tIHN5cy5tb2R1bGVzLgorCisgICAgVGhlIGRlY29yYXRvciBhc3N1bWVzIHRoYXQgdGhlIGRlY29yYXRlZCBmdW5jdGlvbiB0YWtlcyB0aGUgbW9kdWxlIG5hbWUgYXMKKyAgICB0aGUgc2Vjb25kIGFyZ3VtZW50LgorCisgICAgIiIiCisgICAgd2FybmluZ3Mud2FybignVGhlIGltcG9ydCBzeXN0ZW0gbm93IHRha2VzIGNhcmUgb2YgdGhpcyBhdXRvbWF0aWNhbGx5LicsCisgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKKyAgICBAZnVuY3Rvb2xzLndyYXBzKGZ4bikKKyAgICBkZWYgbW9kdWxlX2Zvcl9sb2FkZXJfd3JhcHBlcihzZWxmLCBmdWxsbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBfbW9kdWxlX3RvX2xvYWQoZnVsbG5hbWUpIGFzIG1vZHVsZToKKyAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fID0gc2VsZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlzX3BhY2thZ2UgPSBzZWxmLmlzX3BhY2thZ2UoZnVsbG5hbWUpCisgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBpc19wYWNrYWdlOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBmdWxsbmFtZQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oJy4nKVswXQorICAgICAgICAgICAgIyBJZiBfX3BhY2thZ2VfXyB3YXMgbm90IHNldCBhYm92ZSwgX19pbXBvcnRfXygpIHdpbGwgZG8gaXQgbGF0ZXIuCisgICAgICAgICAgICByZXR1cm4gZnhuKHNlbGYsIG1vZHVsZSwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgcmV0dXJuIG1vZHVsZV9mb3JfbG9hZGVyX3dyYXBwZXIKZGlmZiAtLWdpdCBhL0xpYi9pbnNwZWN0LnB5IGIvTGliL2luc3BlY3QucHkKaW5kZXggNjgwNjIzZC4uNDI5OGRlNiAxMDA2NDQKLS0tIGEvTGliL2luc3BlY3QucHkKKysrIGIvTGliL2luc3BlY3QucHkKQEAgLTMxLDcgKzMxLDcgQEAKIF9fYXV0aG9yX18gPSAoJ0thLVBpbmcgWWVlIDxwaW5nQGxmdy5vcmc+JywKICAgICAgICAgICAgICAgJ1l1cnkgU2VsaXZhbm92IDx5c2VsaXZhbm92QHNwcnltaXguY29tPicpCiAKLWltcG9ydCBpbXAKK2ltcG9ydCBhc3QKIGltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgbGluZWNhY2hlCkBAIC0zOSw2ICszOSw3IEBACiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKIGltcG9ydCB0b2tlbml6ZQoraW1wb3J0IHRva2VuCiBpbXBvcnQgdHlwZXMKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGZ1bmN0b29scwpAQCAtNDgsNyArNDksNyBAQAogCiAjIENyZWF0ZSBjb25zdGFudHMgZm9yIHRoZSBjb21waWxlciBmbGFncyBpbiBJbmNsdWRlL2NvZGUuaAogIyBXZSB0cnkgdG8gZ2V0IHRoZW0gZnJvbSBkaXMgdG8gYXZvaWQgZHVwbGljYXRpb24sIGJ1dCBmYWxsCi0jIGJhY2sgdG8gaGFyZGNvZGluZyBzbyB0aGUgZGVwZW5kZW5jeSBpcyBvcHRpb25hbAorIyBiYWNrIHRvIGhhcmQtY29kaW5nIHNvIHRoZSBkZXBlbmRlbmN5IGlzIG9wdGlvbmFsCiB0cnk6CiAgICAgZnJvbSBkaXMgaW1wb3J0IENPTVBJTEVSX0ZMQUdfTkFNRVMgYXMgX2ZsYWdfbmFtZXMKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKQEAgLTI2OCwyMSArMjY5LDQwIEBACiAgICAgZWxzZToKICAgICAgICAgbXJvID0gKCkKICAgICByZXN1bHRzID0gW10KLSAgICBmb3Iga2V5IGluIGRpcihvYmplY3QpOgotICAgICAgICAjIEZpcnN0IHRyeSB0byBnZXQgdGhlIHZhbHVlIHZpYSBfX2RpY3RfXy4gU29tZSBkZXNjcmlwdG9ycyBkb24ndAotICAgICAgICAjIGxpa2UgY2FsbGluZyB0aGVpciBfX2dldF9fIChzZWUgYnVnICMxNzg1KS4KLSAgICAgICAgZm9yIGJhc2UgaW4gbXJvOgotICAgICAgICAgICAgaWYga2V5IGluIGJhc2UuX19kaWN0X186Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBiYXNlLl9fZGljdF9fW2tleV0KLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBlbHNlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvYmplY3QsIGtleSkKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICBwcm9jZXNzZWQgPSBzZXQoKQorICAgIG5hbWVzID0gZGlyKG9iamVjdCkKKyAgICAjIDpkZCBhbnkgRHluYW1pY0NsYXNzQXR0cmlidXRlcyB0byB0aGUgbGlzdCBvZiBuYW1lcyBpZiBvYmplY3QgaXMgYSBjbGFzczsKKyAgICAjIHRoaXMgbWF5IHJlc3VsdCBpbiBkdXBsaWNhdGUgZW50cmllcyBpZiwgZm9yIGV4YW1wbGUsIGEgdmlydHVhbAorICAgICMgYXR0cmlidXRlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBleGlzdHMKKyAgICB0cnk6CisgICAgICAgIGZvciBiYXNlIGluIG9iamVjdC5fX2Jhc2VzX186CisgICAgICAgICAgICBmb3IgaywgdiBpbiBiYXNlLl9fZGljdF9fLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2LCB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaykKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBmb3Iga2V5IGluIG5hbWVzOgorICAgICAgICAjIEZpcnN0IHRyeSB0byBnZXQgdGhlIHZhbHVlIHZpYSBnZXRhdHRyLiAgU29tZSBkZXNjcmlwdG9ycyBkb24ndAorICAgICAgICAjIGxpa2UgY2FsbGluZyB0aGVpciBfX2dldF9fIChzZWUgYnVnICMxNzg1KSwgc28gZmFsbCBiYWNrIHRvCisgICAgICAgICMgbG9va2luZyBpbiB0aGUgX19kaWN0X18uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHZhbHVlID0gZ2V0YXR0cihvYmplY3QsIGtleSkKKyAgICAgICAgICAgICMgaGFuZGxlIHRoZSBkdXBsaWNhdGUga2V5CisgICAgICAgICAgICBpZiBrZXkgaW4gcHJvY2Vzc2VkOgorICAgICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIGZvciBiYXNlIGluIG1ybzoKKyAgICAgICAgICAgICAgICBpZiBrZXkgaW4gYmFzZS5fX2RpY3RfXzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBiYXNlLl9fZGljdF9fW2tleV0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBjb3VsZCBiZSBhIChjdXJyZW50bHkpIG1pc3Npbmcgc2xvdCBtZW1iZXIsIG9yIGEgYnVnZ3kKKyAgICAgICAgICAgICAgICAjIF9fZGlyX187IGRpc2NhcmQgYW5kIG1vdmUgb24KICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBpZiBub3QgcHJlZGljYXRlIG9yIHByZWRpY2F0ZSh2YWx1ZSk6CiAgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoa2V5LCB2YWx1ZSkpCi0gICAgcmVzdWx0cy5zb3J0KCkKKyAgICAgICAgcHJvY2Vzc2VkLmFkZChrZXkpCisgICAgcmVzdWx0cy5zb3J0KGtleT1sYW1iZGEgcGFpcjogcGFpclswXSkKICAgICByZXR1cm4gcmVzdWx0cwogCiBBdHRyaWJ1dGUgPSBuYW1lZHR1cGxlKCdBdHRyaWJ1dGUnLCAnbmFtZSBraW5kIGRlZmluaW5nX2NsYXNzIG9iamVjdCcpCkBAIC0yOTksNjAgKzMxOSwxMDYgQEAKICAgICAgICAgICAgICAgICdjbGFzcyBtZXRob2QnICAgIGNyZWF0ZWQgdmlhIGNsYXNzbWV0aG9kKCkKICAgICAgICAgICAgICAgICdzdGF0aWMgbWV0aG9kJyAgIGNyZWF0ZWQgdmlhIHN0YXRpY21ldGhvZCgpCiAgICAgICAgICAgICAgICAncHJvcGVydHknICAgICAgICBjcmVhdGVkIHZpYSBwcm9wZXJ0eSgpCi0gICAgICAgICAgICAgICAnbWV0aG9kJyAgICAgICAgICBhbnkgb3RoZXIgZmxhdm9yIG9mIG1ldGhvZAorICAgICAgICAgICAgICAgJ21ldGhvZCcgICAgICAgICAgYW55IG90aGVyIGZsYXZvciBvZiBtZXRob2Qgb3IgZGVzY3JpcHRvcgogICAgICAgICAgICAgICAgJ2RhdGEnICAgICAgICAgICAgbm90IGEgbWV0aG9kCiAKICAgICAgICAgMi4gVGhlIGNsYXNzIHdoaWNoIGRlZmluZWQgdGhpcyBhdHRyaWJ1dGUgKGEgY2xhc3MpLgogCi0gICAgICAgIDMuIFRoZSBvYmplY3QgYXMgb2J0YWluZWQgZGlyZWN0bHkgZnJvbSB0aGUgZGVmaW5pbmcgY2xhc3MncwotICAgICAgICAgICBfX2RpY3RfXywgbm90IHZpYSBnZXRhdHRyLiAgVGhpcyBpcyBlc3BlY2lhbGx5IGltcG9ydGFudCBmb3IKLSAgICAgICAgICAgZGF0YSBhdHRyaWJ1dGVzOiAgQy5kYXRhIGlzIGp1c3QgYSBkYXRhIG9iamVjdCwgYnV0Ci0gICAgICAgICAgIEMuX19kaWN0X19bJ2RhdGEnXSBtYXkgYmUgYSBkYXRhIGRlc2NyaXB0b3Igd2l0aCBhZGRpdGlvbmFsCi0gICAgICAgICAgIGluZm8sIGxpa2UgYSBfX2RvY19fIHN0cmluZy4KKyAgICAgICAgMy4gVGhlIG9iamVjdCBhcyBvYnRhaW5lZCBieSBjYWxsaW5nIGdldGF0dHI7IGlmIHRoaXMgZmFpbHMsIG9yIGlmIHRoZQorICAgICAgICAgICByZXN1bHRpbmcgb2JqZWN0IGRvZXMgbm90IGxpdmUgYW55d2hlcmUgaW4gdGhlIGNsYXNzJyBtcm8gKGluY2x1ZGluZworICAgICAgICAgICBtZXRhY2xhc3NlcykgdGhlbiB0aGUgb2JqZWN0IGlzIGxvb2tlZCB1cCBpbiB0aGUgZGVmaW5pbmcgY2xhc3MncworICAgICAgICAgICBkaWN0IChmb3VuZCBieSB3YWxraW5nIHRoZSBtcm8pLgorCisgICAgSWYgb25lIG9mIHRoZSBpdGVtcyBpbiBkaXIoY2xzKSBpcyBzdG9yZWQgaW4gdGhlIG1ldGFjbGFzcyBpdCB3aWxsIG5vdworICAgIGJlIGRpc2NvdmVyZWQgYW5kIG5vdCBoYXZlIE5vbmUgYmUgbGlzdGVkIGFzIHRoZSBjbGFzcyBpbiB3aGljaCBpdCB3YXMKKyAgICBkZWZpbmVkLiAgQW55IGl0ZW1zIHdob3NlIGhvbWUgY2xhc3MgY2Fubm90IGJlIGRpc2NvdmVyZWQgYXJlIHNraXBwZWQuCiAgICAgIiIiCiAKICAgICBtcm8gPSBnZXRtcm8oY2xzKQorICAgIG1ldGFtcm8gPSBnZXRtcm8odHlwZShjbHMpKSAjIGZvciBhdHRyaWJ1dGVzIHN0b3JlZCBpbiB0aGUgbWV0YWNsYXNzCisgICAgbWV0YW1ybyA9IHR1cGxlKFtjbHMgZm9yIGNscyBpbiBtZXRhbXJvIGlmIGNscyBub3QgaW4gKHR5cGUsIG9iamVjdCldKQorICAgIGNsYXNzX2Jhc2VzID0gKGNscywpICsgbXJvCisgICAgYWxsX2Jhc2VzID0gY2xhc3NfYmFzZXMgKyBtZXRhbXJvCiAgICAgbmFtZXMgPSBkaXIoY2xzKQorICAgICMgOmRkIGFueSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGVzIHRvIHRoZSBsaXN0IG9mIG5hbWVzOworICAgICMgdGhpcyBtYXkgcmVzdWx0IGluIGR1cGxpY2F0ZSBlbnRyaWVzIGlmLCBmb3IgZXhhbXBsZSwgYSB2aXJ0dWFsCisgICAgIyBhdHRyaWJ1dGUgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIGEgRHluYW1pY0NsYXNzQXR0cmlidXRlIGV4aXN0cy4KKyAgICBmb3IgYmFzZSBpbiBtcm86CisgICAgICAgIGZvciBrLCB2IGluIGJhc2UuX19kaWN0X18uaXRlbXMoKToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodiwgdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQoaykKICAgICByZXN1bHQgPSBbXQorICAgIHByb2Nlc3NlZCA9IHNldCgpCisKICAgICBmb3IgbmFtZSBpbiBuYW1lczoKICAgICAgICAgIyBHZXQgdGhlIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIG5hbWUsIGFuZCB3aGVyZSBpdCB3YXMgZGVmaW5lZC4KKyAgICAgICAgIyBOb3JtYWwgb2JqZWN0cyB3aWxsIGJlIGxvb2tlZCB1cCB3aXRoIGJvdGggZ2V0YXR0ciBhbmQgZGlyZWN0bHkgaW4KKyAgICAgICAgIyBpdHMgY2xhc3MnIGRpY3QgKGluIGNhc2UgZ2V0YXR0ciBmYWlscyBbYnVnICMxNzg1XSwgYW5kIGFsc28gdG8gbG9vaworICAgICAgICAjIGZvciBhIGRvY3N0cmluZykuCisgICAgICAgICMgRm9yIER5bmFtaWNDbGFzc0F0dHJpYnV0ZXMgb24gdGhlIHNlY29uZCBwYXNzIHdlIG9ubHkgbG9vayBpbiB0aGUKKyAgICAgICAgIyBjbGFzcydzIGRpY3QuCisgICAgICAgICMKICAgICAgICAgIyBHZXR0aW5nIGFuIG9iaiBmcm9tIHRoZSBfX2RpY3RfXyBzb21ldGltZXMgcmV2ZWFscyBtb3JlIHRoYW4KICAgICAgICAgIyB1c2luZyBnZXRhdHRyLiAgU3RhdGljIGFuZCBjbGFzcyBtZXRob2RzIGFyZSBkcmFtYXRpYyBleGFtcGxlcy4KLSAgICAgICAgIyBGdXJ0aGVybW9yZSwgc29tZSBvYmplY3RzIG1heSByYWlzZSBhbiBFeGNlcHRpb24gd2hlbiBmZXRjaGVkIHdpdGgKLSAgICAgICAgIyBnZXRhdHRyKCkuIFRoaXMgaXMgdGhlIGNhc2Ugd2l0aCBzb21lIGRlc2NyaXB0b3JzIChidWcgIzE3ODUpLgotICAgICAgICAjIFRodXMsIHdlIG9ubHkgdXNlIGdldGF0dHIoKSBhcyBhIGxhc3QgcmVzb3J0LgogICAgICAgICBob21lY2xzID0gTm9uZQotICAgICAgICBmb3IgYmFzZSBpbiAoY2xzLCkgKyBtcm86Ci0gICAgICAgICAgICBpZiBuYW1lIGluIGJhc2UuX19kaWN0X186Ci0gICAgICAgICAgICAgICAgb2JqID0gYmFzZS5fX2RpY3RfX1tuYW1lXQotICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBiYXNlCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9iaiA9IGdldGF0dHIoY2xzLCBuYW1lKQotICAgICAgICAgICAgaG9tZWNscyA9IGdldGF0dHIob2JqLCAiX19vYmpjbGFzc19fIiwgaG9tZWNscykKLQotICAgICAgICAjIENsYXNzaWZ5IHRoZSBvYmplY3QuCi0gICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdGF0aWNtZXRob2QpOgotICAgICAgICAgICAga2luZCA9ICJzdGF0aWMgbWV0aG9kIgotICAgICAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBjbGFzc21ldGhvZCk6Ci0gICAgICAgICAgICBraW5kID0gImNsYXNzIG1ldGhvZCIKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgcHJvcGVydHkpOgotICAgICAgICAgICAga2luZCA9ICJwcm9wZXJ0eSIKLSAgICAgICAgZWxpZiBpc21ldGhvZGRlc2NyaXB0b3Iob2JqKToKLSAgICAgICAgICAgIGtpbmQgPSAibWV0aG9kIgotICAgICAgICBlbGlmIGlzZGF0YWRlc2NyaXB0b3Iob2JqKToKLSAgICAgICAgICAgIGtpbmQgPSAiZGF0YSIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9ial92aWFfZ2V0YXR0ciA9IGdldGF0dHIoY2xzLCBuYW1lKQotICAgICAgICAgICAgaWYgKGlzZnVuY3Rpb24ob2JqX3ZpYV9nZXRhdHRyKSBvcgotICAgICAgICAgICAgICAgIGlzbWV0aG9kZGVzY3JpcHRvcihvYmpfdmlhX2dldGF0dHIpKToKLSAgICAgICAgICAgICAgICBraW5kID0gIm1ldGhvZCIKKyAgICAgICAgZ2V0X29iaiA9IE5vbmUKKyAgICAgICAgZGljdF9vYmogPSBOb25lCisgICAgICAgIGlmIG5hbWUgbm90IGluIHByb2Nlc3NlZDoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdfX2RpY3RfXyc6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiX19kaWN0X18gaXMgc3BlY2lhbCwgZG9uJ3Qgd2FudCB0aGUgcHJveHkiKQorICAgICAgICAgICAgICAgIGdldF9vYmogPSBnZXRhdHRyKGNscywgbmFtZSkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAga2luZCA9ICJkYXRhIgotICAgICAgICAgICAgb2JqID0gb2JqX3ZpYV9nZXRhdHRyCi0KKyAgICAgICAgICAgICAgICBob21lY2xzID0gZ2V0YXR0cihnZXRfb2JqLCAiX19vYmpjbGFzc19fIiwgaG9tZWNscykKKyAgICAgICAgICAgICAgICBpZiBob21lY2xzIG5vdCBpbiBjbGFzc19iYXNlczoKKyAgICAgICAgICAgICAgICAgICAgIyBpZiB0aGUgcmVzdWx0aW5nIG9iamVjdCBkb2VzIG5vdCBsaXZlIHNvbWV3aGVyZSBpbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgIyBtcm8sIGRyb3AgaXQgYW5kIHNlYXJjaCB0aGUgbXJvIG1hbnVhbGx5CisgICAgICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIGxhc3RfY2xzID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IGxvb2sgaW4gdGhlIGNsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNyY2hfY2xzIGluIGNsYXNzX2Jhc2VzOgorICAgICAgICAgICAgICAgICAgICAgICAgc3JjaF9vYmogPSBnZXRhdHRyKHNyY2hfY2xzLCBuYW1lLCBOb25lKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3JjaF9vYmogaXMgZ2V0X29iajoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2NscyA9IHNyY2hfY2xzCisgICAgICAgICAgICAgICAgICAgICMgdGhlbiBjaGVjayB0aGUgbWV0YWNsYXNzZXMKKyAgICAgICAgICAgICAgICAgICAgZm9yIHNyY2hfY2xzIGluIG1ldGFtcm86CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjaF9vYmogPSBzcmNoX2Nscy5fX2dldGF0dHJfXyhjbHMsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNyY2hfb2JqIGlzIGdldF9vYmo6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9jbHMgPSBzcmNoX2NscworICAgICAgICAgICAgICAgICAgICBpZiBsYXN0X2NscyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGhvbWVjbHMgPSBsYXN0X2NscworICAgICAgICBmb3IgYmFzZSBpbiBhbGxfYmFzZXM6CisgICAgICAgICAgICBpZiBuYW1lIGluIGJhc2UuX19kaWN0X186CisgICAgICAgICAgICAgICAgZGljdF9vYmogPSBiYXNlLl9fZGljdF9fW25hbWVdCisgICAgICAgICAgICAgICAgaWYgaG9tZWNscyBub3QgaW4gbWV0YW1ybzoKKyAgICAgICAgICAgICAgICAgICAgaG9tZWNscyA9IGJhc2UKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBob21lY2xzIGlzIE5vbmU6CisgICAgICAgICAgICAjIHVuYWJsZSB0byBsb2NhdGUgdGhlIGF0dHJpYnV0ZSBhbnl3aGVyZSwgbW9zdCBsaWtlbHkgZHVlIHRvCisgICAgICAgICAgICAjIGJ1Z2d5IGN1c3RvbSBfX2Rpcl9fOyBkaXNjYXJkIGFuZCBtb3ZlIG9uCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBvYmogPSBnZXRfb2JqIGlmIGdldF9vYmogaXMgbm90IE5vbmUgZWxzZSBkaWN0X29iagorICAgICAgICAjIENsYXNzaWZ5IHRoZSBvYmplY3Qgb3IgaXRzIGRlc2NyaXB0b3IuCisgICAgICAgIGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIHN0YXRpY21ldGhvZCk6CisgICAgICAgICAgICBraW5kID0gInN0YXRpYyBtZXRob2QiCisgICAgICAgICAgICBvYmogPSBkaWN0X29iagorICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGljdF9vYmosIGNsYXNzbWV0aG9kKToKKyAgICAgICAgICAgIGtpbmQgPSAiY2xhc3MgbWV0aG9kIgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRpY3Rfb2JqLCBwcm9wZXJ0eSk6CisgICAgICAgICAgICBraW5kID0gInByb3BlcnR5IgorICAgICAgICAgICAgb2JqID0gZGljdF9vYmoKKyAgICAgICAgZWxpZiBpc3JvdXRpbmUob2JqKToKKyAgICAgICAgICAgIGtpbmQgPSAibWV0aG9kIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAga2luZCA9ICJkYXRhIgogICAgICAgICByZXN1bHQuYXBwZW5kKEF0dHJpYnV0ZShuYW1lLCBraW5kLCBob21lY2xzLCBvYmopKQotCisgICAgICAgIHByb2Nlc3NlZC5hZGQobmFtZSkKICAgICByZXR1cm4gcmVzdWx0CiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gY2xhc3MgaGVscGVycwpAQCAtMzYxLDYgKzQyNyw0MCBAQAogICAgICJSZXR1cm4gdHVwbGUgb2YgYmFzZSBjbGFzc2VzIChpbmNsdWRpbmcgY2xzKSBpbiBtZXRob2QgcmVzb2x1dGlvbiBvcmRlci4iCiAgICAgcmV0dXJuIGNscy5fX21yb19fCiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZnVuY3Rpb24gaGVscGVycworCitkZWYgdW53cmFwKGZ1bmMsICosIHN0b3A9Tm9uZSk6CisgICAgIiIiR2V0IHRoZSBvYmplY3Qgd3JhcHBlZCBieSAqZnVuYyouCisKKyAgIEZvbGxvd3MgdGhlIGNoYWluIG9mIDphdHRyOmBfX3dyYXBwZWRfX2AgYXR0cmlidXRlcyByZXR1cm5pbmcgdGhlIGxhc3QKKyAgIG9iamVjdCBpbiB0aGUgY2hhaW4uCisKKyAgICpzdG9wKiBpcyBhbiBvcHRpb25hbCBjYWxsYmFjayBhY2NlcHRpbmcgYW4gb2JqZWN0IGluIHRoZSB3cmFwcGVyIGNoYWluCisgICBhcyBpdHMgc29sZSBhcmd1bWVudCB0aGF0IGFsbG93cyB0aGUgdW53cmFwcGluZyB0byBiZSB0ZXJtaW5hdGVkIGVhcmx5IGlmCisgICB0aGUgY2FsbGJhY2sgcmV0dXJucyBhIHRydWUgdmFsdWUuIElmIHRoZSBjYWxsYmFjayBuZXZlciByZXR1cm5zIGEgdHJ1ZQorICAgdmFsdWUsIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgY2hhaW4gaXMgcmV0dXJuZWQgYXMgdXN1YWwuIEZvciBleGFtcGxlLAorICAgOmZ1bmM6YHNpZ25hdHVyZWAgdXNlcyB0aGlzIHRvIHN0b3AgdW53cmFwcGluZyBpZiBhbnkgb2JqZWN0IGluIHRoZQorICAgY2hhaW4gaGFzIGEgYGBfX3NpZ25hdHVyZV9fYGAgYXR0cmlidXRlIGRlZmluZWQuCisKKyAgIDpleGM6YFZhbHVlRXJyb3JgIGlzIHJhaXNlZCBpZiBhIGN5Y2xlIGlzIGVuY291bnRlcmVkLgorCisgICAgIiIiCisgICAgaWYgc3RvcCBpcyBOb25lOgorICAgICAgICBkZWYgX2lzX3dyYXBwZXIoZik6CisgICAgICAgICAgICByZXR1cm4gaGFzYXR0cihmLCAnX193cmFwcGVkX18nKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBfaXNfd3JhcHBlcihmKToKKyAgICAgICAgICAgIHJldHVybiBoYXNhdHRyKGYsICdfX3dyYXBwZWRfXycpIGFuZCBub3Qgc3RvcChmKQorICAgIGYgPSBmdW5jICAjIHJlbWVtYmVyIHRoZSBvcmlnaW5hbCBmdW5jIGZvciBlcnJvciByZXBvcnRpbmcKKyAgICBtZW1vID0ge2lkKGYpfSAjIE1lbW9pc2UgYnkgaWQgdG8gdG9sZXJhdGUgbm9uLWhhc2hhYmxlIG9iamVjdHMKKyAgICB3aGlsZSBfaXNfd3JhcHBlcihmdW5jKToKKyAgICAgICAgZnVuYyA9IGZ1bmMuX193cmFwcGVkX18KKyAgICAgICAgaWRfZnVuYyA9IGlkKGZ1bmMpCisgICAgICAgIGlmIGlkX2Z1bmMgaW4gbWVtbzoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3dyYXBwZXIgbG9vcCB3aGVuIHVud3JhcHBpbmcgeyFyfScuZm9ybWF0KGYpKQorICAgICAgICBtZW1vLmFkZChpZF9mdW5jKQorICAgIHJldHVybiBmdW5jCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gc291cmNlIGNvZGUgZXh0cmFjdGlvbgogZGVmIGluZGVudHNpemUobGluZSk6CiAgICAgIiIiUmV0dXJuIHRoZSBpbmRlbnQgc2l6ZSwgaW4gc3BhY2VzLCBhdCB0aGUgc3RhcnQgb2YgYSBsaW5lIG9mIHRleHQuIiIiCkBAIC00MTcsOSArNTE3LDEwIEBACiAgICAgICAgICAgICByZXR1cm4gb2JqZWN0Ll9fZmlsZV9fCiAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBhIGJ1aWx0LWluIG1vZHVsZScuZm9ybWF0KG9iamVjdCkpCiAgICAgaWYgaXNjbGFzcyhvYmplY3QpOgotICAgICAgICBvYmplY3QgPSBzeXMubW9kdWxlcy5nZXQob2JqZWN0Ll9fbW9kdWxlX18pCi0gICAgICAgIGlmIGhhc2F0dHIob2JqZWN0LCAnX19maWxlX18nKToKLSAgICAgICAgICAgIHJldHVybiBvYmplY3QuX19maWxlX18KKyAgICAgICAgaWYgaGFzYXR0cihvYmplY3QsICdfX21vZHVsZV9fJyk6CisgICAgICAgICAgICBvYmplY3QgPSBzeXMubW9kdWxlcy5nZXQob2JqZWN0Ll9fbW9kdWxlX18pCisgICAgICAgICAgICBpZiBoYXNhdHRyKG9iamVjdCwgJ19fZmlsZV9fJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG9iamVjdC5fX2ZpbGVfXwogICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3shcn0gaXMgYSBidWlsdC1pbiBjbGFzcycuZm9ybWF0KG9iamVjdCkpCiAgICAgaWYgaXNtZXRob2Qob2JqZWN0KToKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fZnVuY19fCkBAIC00NDAsNiArNTQxLDkgQEAKICAgICAiIiJHZXQgdGhlIG1vZHVsZSBuYW1lLCBzdWZmaXgsIG1vZGUsIGFuZCBtb2R1bGUgdHlwZSBmb3IgYSBnaXZlbiBmaWxlLiIiIgogICAgIHdhcm5pbmdzLndhcm4oJ2luc3BlY3QuZ2V0bW9kdWxlaW5mbygpIGlzIGRlcHJlY2F0ZWQnLCBEZXByZWNhdGlvbldhcm5pbmcsCiAgICAgICAgICAgICAgICAgICAyKQorICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBpbXBvcnQgaW1wCiAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCiAgICAgc3VmZml4ZXMgPSBbKC1sZW4oc3VmZml4KSwgc3VmZml4LCBtb2RlLCBtdHlwZSkKICAgICAgICAgICAgICAgICAgICAgZm9yIHN1ZmZpeCwgbW9kZSwgbXR5cGUgaW4gaW1wLmdldF9zdWZmaXhlcygpXQpAQCAtNDc2LDcgKzU4MCw3IEBACiAgICAgaWYgb3MucGF0aC5leGlzdHMoZmlsZW5hbWUpOgogICAgICAgICByZXR1cm4gZmlsZW5hbWUKICAgICAjIG9ubHkgcmV0dXJuIGEgbm9uLWV4aXN0ZW50IGZpbGVuYW1lIGlmIHRoZSBtb2R1bGUgaGFzIGEgUEVQIDMwMiBsb2FkZXIKLSAgICBpZiBoYXNhdHRyKGdldG1vZHVsZShvYmplY3QsIGZpbGVuYW1lKSwgJ19fbG9hZGVyX18nKToKKyAgICBpZiBnZXRhdHRyKGdldG1vZHVsZShvYmplY3QsIGZpbGVuYW1lKSwgJ19fbG9hZGVyX18nLCBOb25lKSBpcyBub3QgTm9uZToKICAgICAgICAgcmV0dXJuIGZpbGVuYW1lCiAgICAgIyBvciBpdCBpcyBpbiB0aGUgbGluZWNhY2hlCiAgICAgaWYgZmlsZW5hbWUgaW4gbGluZWNhY2hlLmNhY2hlOgpAQCAtNTQ1LDE0ICs2NDksMjAgQEAKIAogICAgIFRoZSBhcmd1bWVudCBtYXkgYmUgYSBtb2R1bGUsIGNsYXNzLCBtZXRob2QsIGZ1bmN0aW9uLCB0cmFjZWJhY2ssIGZyYW1lLAogICAgIG9yIGNvZGUgb2JqZWN0LiAgVGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgbGlzdCBvZiBhbGwgdGhlIGxpbmVzCi0gICAgaW4gdGhlIGZpbGUgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRleGVzIGEgbGluZSBpbiB0aGF0IGxpc3QuICBBbiBJT0Vycm9yCisgICAgaW4gdGhlIGZpbGUgYW5kIHRoZSBsaW5lIG51bWJlciBpbmRleGVzIGEgbGluZSBpbiB0aGF0IGxpc3QuICBBbiBPU0Vycm9yCiAgICAgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgogCi0gICAgZmlsZSA9IGdldGZpbGUob2JqZWN0KQotICAgIHNvdXJjZWZpbGUgPSBnZXRzb3VyY2VmaWxlKG9iamVjdCkKLSAgICBpZiBub3Qgc291cmNlZmlsZSBhbmQgZmlsZVs6MV0gKyBmaWxlWy0xOl0gIT0gJzw+JzoKLSAgICAgICAgcmFpc2UgSU9FcnJvcignc291cmNlIGNvZGUgbm90IGF2YWlsYWJsZScpCi0gICAgZmlsZSA9IHNvdXJjZWZpbGUgaWYgc291cmNlZmlsZSBlbHNlIGZpbGUKKyAgICBmaWxlID0gZ2V0c291cmNlZmlsZShvYmplY3QpCisgICAgaWYgZmlsZToKKyAgICAgICAgIyBJbnZhbGlkYXRlIGNhY2hlIGlmIG5lZWRlZC4KKyAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZSkKKyAgICBlbHNlOgorICAgICAgICBmaWxlID0gZ2V0ZmlsZShvYmplY3QpCisgICAgICAgICMgQWxsb3cgZmlsZW5hbWVzIGluIGZvcm0gb2YgIjxzb21ldGhpbmc+IiB0byBwYXNzIHRocm91Z2guCisgICAgICAgICMgYGRvY3Rlc3RgIG1vbmtleXBhdGNoZXMgYGxpbmVjYWNoZWAgbW9kdWxlIHRvIGVuYWJsZQorICAgICAgICAjIGluc3BlY3Rpb24sIHNvIGxldCBgbGluZWNhY2hlLmdldGxpbmVzYCB0byBiZSBjYWxsZWQuCisgICAgICAgIGlmIG5vdCAoZmlsZS5zdGFydHN3aXRoKCc8JykgYW5kIGZpbGUuZW5kc3dpdGgoJz4nKSk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdzb3VyY2UgY29kZSBub3QgYXZhaWxhYmxlJykKIAogICAgIG1vZHVsZSA9IGdldG1vZHVsZShvYmplY3QsIGZpbGUpCiAgICAgaWYgbW9kdWxlOgpAQCAtNTYwLDcgKzY3MCw3IEBACiAgICAgZWxzZToKICAgICAgICAgbGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMoZmlsZSkKICAgICBpZiBub3QgbGluZXM6Ci0gICAgICAgIHJhaXNlIElPRXJyb3IoJ2NvdWxkIG5vdCBnZXQgc291cmNlIGNvZGUnKQorICAgICAgICByYWlzZSBPU0Vycm9yKCdjb3VsZCBub3QgZ2V0IHNvdXJjZSBjb2RlJykKIAogICAgIGlmIGlzbW9kdWxlKG9iamVjdCk6CiAgICAgICAgIHJldHVybiBsaW5lcywgMApAQCAtNTg2LDcgKzY5Niw3IEBACiAgICAgICAgICAgICBjYW5kaWRhdGVzLnNvcnQoKQogICAgICAgICAgICAgcmV0dXJuIGxpbmVzLCBjYW5kaWRhdGVzWzBdWzFdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZmluZCBjbGFzcyBkZWZpbml0aW9uJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGNsYXNzIGRlZmluaXRpb24nKQogCiAgICAgaWYgaXNtZXRob2Qob2JqZWN0KToKICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fZnVuY19fCkBAIC01OTgsMTQgKzcwOCwxNCBAQAogICAgICAgICBvYmplY3QgPSBvYmplY3QuZl9jb2RlCiAgICAgaWYgaXNjb2RlKG9iamVjdCk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKG9iamVjdCwgJ2NvX2ZpcnN0bGluZW5vJyk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZmluZCBmdW5jdGlvbiBkZWZpbml0aW9uJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2NvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uIGRlZmluaXRpb24nKQogICAgICAgICBsbnVtID0gb2JqZWN0LmNvX2ZpcnN0bGluZW5vIC0gMQogICAgICAgICBwYXQgPSByZS5jb21waWxlKHInXihccypkZWZccyl8KC4qKD88IVx3KWxhbWJkYSg6fFxzKSl8XihccypAKScpCiAgICAgICAgIHdoaWxlIGxudW0gPiAwOgogICAgICAgICAgICAgaWYgcGF0Lm1hdGNoKGxpbmVzW2xudW1dKTogYnJlYWsKICAgICAgICAgICAgIGxudW0gPSBsbnVtIC0gMQogICAgICAgICByZXR1cm4gbGluZXMsIGxudW0KLSAgICByYWlzZSBJT0Vycm9yKCdjb3VsZCBub3QgZmluZCBjb2RlIG9iamVjdCcpCisgICAgcmFpc2UgT1NFcnJvcignY291bGQgbm90IGZpbmQgY29kZSBvYmplY3QnKQogCiBkZWYgZ2V0Y29tbWVudHMob2JqZWN0KToKICAgICAiIiJHZXQgbGluZXMgb2YgY29tbWVudHMgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGFuIG9iamVjdCdzIHNvdXJjZSBjb2RlLgpAQCAtNjE0LDcgKzcyNCw3IEBACiAgICAgIiIiCiAgICAgdHJ5OgogICAgICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2Uob2JqZWN0KQotICAgIGV4Y2VwdCAoSU9FcnJvciwgVHlwZUVycm9yKToKKyAgICBleGNlcHQgKE9TRXJyb3IsIFR5cGVFcnJvcik6CiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBpZiBpc21vZHVsZShvYmplY3QpOgpAQCAtNzEwLDcgKzgyMCw3IEBACiAgICAgVGhlIGFyZ3VtZW50IG1heSBiZSBhIG1vZHVsZSwgY2xhc3MsIG1ldGhvZCwgZnVuY3Rpb24sIHRyYWNlYmFjaywgZnJhbWUsCiAgICAgb3IgY29kZSBvYmplY3QuICBUaGUgc291cmNlIGNvZGUgaXMgcmV0dXJuZWQgYXMgYSBsaXN0IG9mIHRoZSBsaW5lcwogICAgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9iamVjdCBhbmQgdGhlIGxpbmUgbnVtYmVyIGluZGljYXRlcyB3aGVyZSBpbiB0aGUKLSAgICBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGUgZmlyc3QgbGluZSBvZiBjb2RlIHdhcyBmb3VuZC4gIEFuIElPRXJyb3IgaXMKKyAgICBvcmlnaW5hbCBzb3VyY2UgZmlsZSB0aGUgZmlyc3QgbGluZSBvZiBjb2RlIHdhcyBmb3VuZC4gIEFuIE9TRXJyb3IgaXMKICAgICByYWlzZWQgaWYgdGhlIHNvdXJjZSBjb2RlIGNhbm5vdCBiZSByZXRyaWV2ZWQuIiIiCiAgICAgbGluZXMsIGxudW0gPSBmaW5kc291cmNlKG9iamVjdCkKIApAQCAtNzIyLDcgKzgzMiw3IEBACiAKICAgICBUaGUgYXJndW1lbnQgbWF5IGJlIGEgbW9kdWxlLCBjbGFzcywgbWV0aG9kLCBmdW5jdGlvbiwgdHJhY2ViYWNrLCBmcmFtZSwKICAgICBvciBjb2RlIG9iamVjdC4gIFRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIHNpbmdsZSBzdHJpbmcuICBBbgotICAgIElPRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgorICAgIE9TRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBzb3VyY2UgY29kZSBjYW5ub3QgYmUgcmV0cmlldmVkLiIiIgogICAgIGxpbmVzLCBsbnVtID0gZ2V0c291cmNlbGluZXMob2JqZWN0KQogICAgIHJldHVybiAnJy5qb2luKGxpbmVzKQogCkBAIC04MzEsNyArOTQxLDcgQEAKICAgICAnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHlhcmdzLCBrd29ubHlkZWZhdWx0cywgYW5ub3RhdGlvbnMnKQogCiBkZWYgZ2V0ZnVsbGFyZ3NwZWMoZnVuYyk6Ci0gICAgIiIiR2V0IHRoZSBuYW1lcyBhbmQgZGVmYXVsdCB2YWx1ZXMgb2YgYSBmdW5jdGlvbidzIGFyZ3VtZW50cy4KKyAgICAiIiJHZXQgdGhlIG5hbWVzIGFuZCBkZWZhdWx0IHZhbHVlcyBvZiBhIGNhbGxhYmxlIG9iamVjdCdzIGFyZ3VtZW50cy4KIAogICAgIEEgdHVwbGUgb2Ygc2V2ZW4gdGhpbmdzIGlzIHJldHVybmVkOgogICAgIChhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsIGt3b25seWFyZ3MsIGt3b25seWRlZmF1bHRzIGFubm90YXRpb25zKS4KQEAgLTg0NSwxMyArOTU1LDc4IEBACiAgICAgVGhlIGZpcnN0IGZvdXIgaXRlbXMgaW4gdGhlIHR1cGxlIGNvcnJlc3BvbmQgdG8gZ2V0YXJnc3BlYygpLgogICAgICIiIgogCi0gICAgaWYgaXNtZXRob2QoZnVuYyk6Ci0gICAgICAgIGZ1bmMgPSBmdW5jLl9fZnVuY19fCi0gICAgaWYgbm90IGlzZnVuY3Rpb24oZnVuYyk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nLmZvcm1hdChmdW5jKSkKLSAgICBhcmdzLCB2YXJhcmdzLCBrd29ubHlhcmdzLCB2YXJrdyA9IF9nZXRmdWxsYXJncyhmdW5jLl9fY29kZV9fKQotICAgIHJldHVybiBGdWxsQXJnU3BlYyhhcmdzLCB2YXJhcmdzLCB2YXJrdywgZnVuYy5fX2RlZmF1bHRzX18sCi0gICAgICAgICAgICBrd29ubHlhcmdzLCBmdW5jLl9fa3dkZWZhdWx0c19fLCBmdW5jLl9fYW5ub3RhdGlvbnNfXykKKyAgICB0cnk6CisgICAgICAgICMgUmU6IGBza2lwX2JvdW5kX2FyZz1GYWxzZWAKKyAgICAgICAgIworICAgICAgICAjIFRoZXJlIGlzIGEgbm90YWJsZSBkaWZmZXJlbmNlIGluIGJlaGF2aW91ciBiZXR3ZWVuIGdldGZ1bGxhcmdzcGVjCisgICAgICAgICMgYW5kIFNpZ25hdHVyZTogdGhlIGZvcm1lciBhbHdheXMgcmV0dXJucyAnc2VsZicgcGFyYW1ldGVyIGZvciBib3VuZAorICAgICAgICAjIG1ldGhvZHMsIHdoZXJlYXMgdGhlIFNpZ25hdHVyZSBhbHdheXMgc2hvd3MgdGhlIGFjdHVhbCBjYWxsaW5nCisgICAgICAgICMgc2lnbmF0dXJlIG9mIHRoZSBwYXNzZWQgb2JqZWN0LgorICAgICAgICAjCisgICAgICAgICMgVG8gc2ltdWxhdGUgdGhpcyBiZWhhdmlvdXIsIHdlICJ1bmJpbmQiIGJvdW5kIG1ldGhvZHMsIHRvIHRyaWNrCisgICAgICAgICMgaW5zcGVjdC5zaWduYXR1cmUgdG8gYWx3YXlzIHJldHVybiB0aGVpciBmaXJzdCBwYXJhbWV0ZXIgKCJzZWxmIiwKKyAgICAgICAgIyB1c3VhbGx5KQorCisgICAgICAgICMgUmU6IGBmb2xsb3dfd3JhcHBlcl9jaGFpbnM9RmFsc2VgCisgICAgICAgICMKKyAgICAgICAgIyBnZXRmdWxsYXJnc3BlYygpIGhpc3RvcmljYWxseSBpZ25vcmVkIF9fd3JhcHBlZF9fIGF0dHJpYnV0ZXMsCisgICAgICAgICMgc28gd2UgZW5zdXJlIHRoYXQgcmVtYWlucyB0aGUgY2FzZSBpbiAzLjMrCisKKyAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChmdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1GYWxzZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgorICAgICAgICAjIE1vc3Qgb2YgdGhlIHRpbWVzICdzaWduYXR1cmUnIHdpbGwgcmFpc2UgVmFsdWVFcnJvci4KKyAgICAgICAgIyBCdXQsIGl0IGNhbiBhbHNvIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCBhbmQsIG1heWJlIHNvbWV0aGluZworICAgICAgICAjIGVsc2UuIFNvIHRvIGJlIGZ1bGx5IGJhY2t3YXJkcyBjb21wYXRpYmxlLCB3ZSBjYXRjaCBhbGwKKyAgICAgICAgIyBwb3NzaWJsZSBleGNlcHRpb25zIGhlcmUsIGFuZCByZXJhaXNlIGEgVHlwZUVycm9yLgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3Vuc3VwcG9ydGVkIGNhbGxhYmxlJykgZnJvbSBleAorCisgICAgYXJncyA9IFtdCisgICAgdmFyYXJncyA9IE5vbmUKKyAgICB2YXJrdyA9IE5vbmUKKyAgICBrd29ubHlhcmdzID0gW10KKyAgICBkZWZhdWx0cyA9ICgpCisgICAgYW5ub3RhdGlvbnMgPSB7fQorICAgIGRlZmF1bHRzID0gKCkKKyAgICBrd2RlZmF1bHRzID0ge30KKworICAgIGlmIHNpZy5yZXR1cm5fYW5ub3RhdGlvbiBpcyBub3Qgc2lnLmVtcHR5OgorICAgICAgICBhbm5vdGF0aW9uc1sncmV0dXJuJ10gPSBzaWcucmV0dXJuX2Fubm90YXRpb24KKworICAgIGZvciBwYXJhbSBpbiBzaWcucGFyYW1ldGVycy52YWx1ZXMoKToKKyAgICAgICAga2luZCA9IHBhcmFtLmtpbmQKKyAgICAgICAgbmFtZSA9IHBhcmFtLm5hbWUKKworICAgICAgICBpZiBraW5kIGlzIF9QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICBhcmdzLmFwcGVuZChuYW1lKQorICAgICAgICBlbGlmIGtpbmQgaXMgX1BPU0lUSU9OQUxfT1JfS0VZV09SRDoKKyAgICAgICAgICAgIGFyZ3MuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpZiBwYXJhbS5kZWZhdWx0IGlzIG5vdCBwYXJhbS5lbXB0eToKKyAgICAgICAgICAgICAgICBkZWZhdWx0cyArPSAocGFyYW0uZGVmYXVsdCwpCisgICAgICAgIGVsaWYga2luZCBpcyBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICB2YXJhcmdzID0gbmFtZQorICAgICAgICBlbGlmIGtpbmQgaXMgX0tFWVdPUkRfT05MWToKKyAgICAgICAgICAgIGt3b25seWFyZ3MuYXBwZW5kKG5hbWUpCisgICAgICAgICAgICBpZiBwYXJhbS5kZWZhdWx0IGlzIG5vdCBwYXJhbS5lbXB0eToKKyAgICAgICAgICAgICAgICBrd2RlZmF1bHRzW25hbWVdID0gcGFyYW0uZGVmYXVsdAorICAgICAgICBlbGlmIGtpbmQgaXMgX1ZBUl9LRVlXT1JEOgorICAgICAgICAgICAgdmFya3cgPSBuYW1lCisKKyAgICAgICAgaWYgcGFyYW0uYW5ub3RhdGlvbiBpcyBub3QgcGFyYW0uZW1wdHk6CisgICAgICAgICAgICBhbm5vdGF0aW9uc1tuYW1lXSA9IHBhcmFtLmFubm90YXRpb24KKworICAgIGlmIG5vdCBrd2RlZmF1bHRzOgorICAgICAgICAjIGNvbXBhdGliaWxpdHkgd2l0aCAnZnVuYy5fX2t3ZGVmYXVsdHNfXycKKyAgICAgICAga3dkZWZhdWx0cyA9IE5vbmUKKworICAgIGlmIG5vdCBkZWZhdWx0czoKKyAgICAgICAgIyBjb21wYXRpYmlsaXR5IHdpdGggJ2Z1bmMuX19kZWZhdWx0c19fJworICAgICAgICBkZWZhdWx0cyA9IE5vbmUKKworICAgIHJldHVybiBGdWxsQXJnU3BlYyhhcmdzLCB2YXJhcmdzLCB2YXJrdywgZGVmYXVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIGFubm90YXRpb25zKQorCiAKIEFyZ0luZm8gPSBuYW1lZHR1cGxlKCdBcmdJbmZvJywgJ2FyZ3MgdmFyYXJncyBrZXl3b3JkcyBsb2NhbHMnKQogCkBAIC05NTYsNyArMTEzMSw3IEBACiAgICAgZWxpZiBtaXNzaW5nID09IDI6CiAgICAgICAgIHMgPSAie30gYW5kIHt9Ii5mb3JtYXQoKm5hbWVzKQogICAgIGVsc2U6Ci0gICAgICAgIHRhaWwgPSAiLCB7fSBhbmQge30iLmZvcm1hdChuYW1lc1stMjpdKQorICAgICAgICB0YWlsID0gIiwge30gYW5kIHt9Ii5mb3JtYXQoKm5hbWVzWy0yOl0pCiAgICAgICAgIGRlbCBuYW1lc1stMjpdCiAgICAgICAgIHMgPSAiLCAiLmpvaW4obmFtZXMpICsgdGFpbAogICAgIHJhaXNlIFR5cGVFcnJvcigiJXMoKSBtaXNzaW5nICVpIHJlcXVpcmVkICVzIGFyZ3VtZW50JXM6ICVzIiAlCkBAIC0xMDM5LDcgKzEyMTQsNyBAQAogICAgIG1pc3NpbmcgPSAwCiAgICAgZm9yIGt3YXJnIGluIGt3b25seWFyZ3M6CiAgICAgICAgIGlmIGt3YXJnIG5vdCBpbiBhcmcydmFsdWU6Ci0gICAgICAgICAgICBpZiBrd2FyZyBpbiBrd29ubHlkZWZhdWx0czoKKyAgICAgICAgICAgIGlmIGt3b25seWRlZmF1bHRzIGFuZCBrd2FyZyBpbiBrd29ubHlkZWZhdWx0czoKICAgICAgICAgICAgICAgICBhcmcydmFsdWVba3dhcmddID0ga3dvbmx5ZGVmYXVsdHNba3dhcmddCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG1pc3NpbmcgKz0gMQpAQCAtMTEyNSw3ICsxMzAwLDcgQEAKICAgICAgICAgc3RhcnQgPSBsaW5lbm8gLSAxIC0gY29udGV4dC8vMgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbG51bSA9IGZpbmRzb3VyY2UoZnJhbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGxpbmVzID0gaW5kZXggPSBOb25lCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzdGFydCA9IG1heChzdGFydCwgMSkKQEAgLTEzMTcsMTMgKzE0OTIsMTUgQEAKIAogX1dyYXBwZXJEZXNjcmlwdG9yID0gdHlwZSh0eXBlLl9fY2FsbF9fKQogX01ldGhvZFdyYXBwZXIgPSB0eXBlKGFsbC5fX2NhbGxfXykKK19DbGFzc01ldGhvZFdyYXBwZXIgPSB0eXBlKGludC5fX2RpY3RfX1snZnJvbV9ieXRlcyddKQogCiBfTm9uVXNlckRlZmluZWRDYWxsYWJsZXMgPSAoX1dyYXBwZXJEZXNjcmlwdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NZXRob2RXcmFwcGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DbGFzc01ldGhvZFdyYXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuQnVpbHRpbkZ1bmN0aW9uVHlwZSkKIAogCi1kZWYgX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKGNscywgbWV0aG9kX25hbWUpOgorZGVmIF9zaWduYXR1cmVfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QoY2xzLCBtZXRob2RfbmFtZSk6CiAgICAgdHJ5OgogICAgICAgICBtZXRoID0gZ2V0YXR0cihjbHMsIG1ldGhvZF9uYW1lKQogICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKQEAgLTEzMzUsOCArMTUxMiwzODcgQEAKICAgICAgICAgICAgIHJldHVybiBtZXRoCiAKIAotZGVmIHNpZ25hdHVyZShvYmopOgotICAgICcnJ0dldCBhIHNpZ25hdHVyZSBvYmplY3QgZm9yIHRoZSBwYXNzZWQgY2FsbGFibGUuJycnCitkZWYgX3NpZ25hdHVyZV9nZXRfcGFydGlhbCh3cmFwcGVkX3NpZywgcGFydGlhbCwgZXh0cmFfYXJncz0oKSk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gY2FsY3VsYXRlIGhvdyAnd3JhcHBlZF9zaWcnIHNpZ25hdHVyZSB3aWxsCisgICAgIyBsb29rIGxpa2UgYWZ0ZXIgYXBwbHlpbmcgYSAnZnVuY3Rvb2xzLnBhcnRpYWwnIG9iamVjdCAob3IgYWxpa2UpCisgICAgIyBvbiBpdC4KKworICAgIG9sZF9wYXJhbXMgPSB3cmFwcGVkX3NpZy5wYXJhbWV0ZXJzCisgICAgbmV3X3BhcmFtcyA9IE9yZGVyZWREaWN0KG9sZF9wYXJhbXMuaXRlbXMoKSkKKworICAgIHBhcnRpYWxfYXJncyA9IHBhcnRpYWwuYXJncyBvciAoKQorICAgIHBhcnRpYWxfa2V5d29yZHMgPSBwYXJ0aWFsLmtleXdvcmRzIG9yIHt9CisKKyAgICBpZiBleHRyYV9hcmdzOgorICAgICAgICBwYXJ0aWFsX2FyZ3MgPSBleHRyYV9hcmdzICsgcGFydGlhbF9hcmdzCisKKyAgICB0cnk6CisgICAgICAgIGJhID0gd3JhcHBlZF9zaWcuYmluZF9wYXJ0aWFsKCpwYXJ0aWFsX2FyZ3MsICoqcGFydGlhbF9rZXl3b3JkcykKKyAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4OgorICAgICAgICBtc2cgPSAncGFydGlhbCBvYmplY3QgeyFyfSBoYXMgaW5jb3JyZWN0IGFyZ3VtZW50cycuZm9ybWF0KHBhcnRpYWwpCisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKSBmcm9tIGV4CisKKworICAgIHRyYW5zZm9ybV90b19rd29ubHkgPSBGYWxzZQorICAgIGZvciBwYXJhbV9uYW1lLCBwYXJhbSBpbiBvbGRfcGFyYW1zLml0ZW1zKCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFyZ192YWx1ZSA9IGJhLmFyZ3VtZW50c1twYXJhbV9uYW1lXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwYXJhbS5raW5kIGlzIF9QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICAgICAgIyBJZiBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVyIGlzIGJvdW5kIGJ5IHBhcnRpYWwsCisgICAgICAgICAgICAgICAgIyBpdCBlZmZlY3RpdmVseSBkaXNhcHBlYXJzIGZyb20gdGhlIHNpZ25hdHVyZQorICAgICAgICAgICAgICAgIG5ld19wYXJhbXMucG9wKHBhcmFtX25hbWUpCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgcGFyYW0ua2luZCBpcyBfUE9TSVRJT05BTF9PUl9LRVlXT1JEOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgaW4gcGFydGlhbF9rZXl3b3JkczoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGlzIG1lYW5zIHRoYXQgdGhpcyBwYXJhbWV0ZXIsIGFuZCBhbGwgcGFyYW1ldGVycworICAgICAgICAgICAgICAgICAgICAjIGFmdGVyIGl0IHNob3VsZCBiZSBrZXl3b3JkLW9ubHkgKGFuZCB2YXItcG9zaXRpb25hbAorICAgICAgICAgICAgICAgICAgICAjIHNob3VsZCBiZSByZW1vdmVkKS4gSGVyZSdzIHdoeS4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZworICAgICAgICAgICAgICAgICAgICAjIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgICAgICAjICAgICBmb28oYSwgYiwgKmFyZ3MsIGMpOgorICAgICAgICAgICAgICAgICAgICAjICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgICAgICMgInBhcnRpYWwoZm9vLCBhPSdzcGFtJykiIHdpbGwgaGF2ZSB0aGUgZm9sbG93aW5nCisgICAgICAgICAgICAgICAgICAgICMgc2lnbmF0dXJlOiAiKCosIGE9J3NwYW0nLCBiLCBjKSIuIEJlY2F1c2UgYXR0ZW1wdGluZworICAgICAgICAgICAgICAgICAgICAjIHRvIGNhbGwgdGhhdCBwYXJ0aWFsIHdpdGggIigxMCwgMjApIiBhcmd1bWVudHMgd2lsbAorICAgICAgICAgICAgICAgICAgICAjIHJhaXNlIGEgVHlwZUVycm9yLCBzYXlpbmcgdGhhdCAiYSIgYXJndW1lbnQgcmVjZWl2ZWQKKyAgICAgICAgICAgICAgICAgICAgIyBtdWx0aXBsZSB2YWx1ZXMuCisgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybV90b19rd29ubHkgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICMgU2V0IHRoZSBuZXcgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICBuZXdfcGFyYW1zW3BhcmFtX25hbWVdID0gcGFyYW0ucmVwbGFjZShkZWZhdWx0PWFyZ192YWx1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAjIHdhcyBwYXNzZWQgYXMgYSBwb3NpdGlvbmFsIGFyZ3VtZW50CisgICAgICAgICAgICAgICAgICAgIG5ld19wYXJhbXMucG9wKHBhcmFtLm5hbWUpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgaXMgX0tFWVdPUkRfT05MWToKKyAgICAgICAgICAgICAgICAjIFNldCB0aGUgbmV3IGRlZmF1bHQgdmFsdWUKKyAgICAgICAgICAgICAgICBuZXdfcGFyYW1zW3BhcmFtX25hbWVdID0gcGFyYW0ucmVwbGFjZShkZWZhdWx0PWFyZ192YWx1ZSkKKworICAgICAgICBpZiB0cmFuc2Zvcm1fdG9fa3dvbmx5OgorICAgICAgICAgICAgYXNzZXJ0IHBhcmFtLmtpbmQgaXMgbm90IF9QT1NJVElPTkFMX09OTFkKKworICAgICAgICAgICAgaWYgcGFyYW0ua2luZCBpcyBfUE9TSVRJT05BTF9PUl9LRVlXT1JEOgorICAgICAgICAgICAgICAgIG5ld19wYXJhbSA9IG5ld19wYXJhbXNbcGFyYW1fbmFtZV0ucmVwbGFjZShraW5kPV9LRVlXT1JEX09OTFkpCisgICAgICAgICAgICAgICAgbmV3X3BhcmFtc1twYXJhbV9uYW1lXSA9IG5ld19wYXJhbQorICAgICAgICAgICAgICAgIG5ld19wYXJhbXMubW92ZV90b19lbmQocGFyYW1fbmFtZSkKKyAgICAgICAgICAgIGVsaWYgcGFyYW0ua2luZCBpbiAoX0tFWVdPUkRfT05MWSwgX1ZBUl9LRVlXT1JEKToKKyAgICAgICAgICAgICAgICBuZXdfcGFyYW1zLm1vdmVfdG9fZW5kKHBhcmFtX25hbWUpCisgICAgICAgICAgICBlbGlmIHBhcmFtLmtpbmQgaXMgX1ZBUl9QT1NJVElPTkFMOgorICAgICAgICAgICAgICAgIG5ld19wYXJhbXMucG9wKHBhcmFtLm5hbWUpCisKKyAgICByZXR1cm4gd3JhcHBlZF9zaWcucmVwbGFjZShwYXJhbWV0ZXJzPW5ld19wYXJhbXMudmFsdWVzKCkpCisKKworZGVmIF9zaWduYXR1cmVfYm91bmRfbWV0aG9kKHNpZyk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gdHJhbnNmb3JtIHNpZ25hdHVyZXMgZm9yIHVuYm91bmQKKyAgICAjIGZ1bmN0aW9ucyB0byBib3VuZCBtZXRob2RzCisKKyAgICBwYXJhbXMgPSB0dXBsZShzaWcucGFyYW1ldGVycy52YWx1ZXMoKSkKKworICAgIGlmIG5vdCBwYXJhbXMgb3IgcGFyYW1zWzBdLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgbWV0aG9kIHNpZ25hdHVyZScpCisKKyAgICBraW5kID0gcGFyYW1zWzBdLmtpbmQKKyAgICBpZiBraW5kIGluIChfUE9TSVRJT05BTF9PUl9LRVlXT1JELCBfUE9TSVRJT05BTF9PTkxZKToKKyAgICAgICAgIyBEcm9wIGZpcnN0IHBhcmFtZXRlcjoKKyAgICAgICAgIyAnKHAxLCBwMlssIC4uLl0pJyAtPiAnKHAyWywgLi4uXSknCisgICAgICAgIHBhcmFtcyA9IHBhcmFtc1sxOl0KKyAgICBlbHNlOgorICAgICAgICBpZiBraW5kIGlzIG5vdCBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICAjIFVubGVzcyB3ZSBhZGQgYSBuZXcgcGFyYW1ldGVyIHR5cGUgd2UgbmV2ZXIKKyAgICAgICAgICAgICMgZ2V0IGhlcmUKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2ludmFsaWQgYXJndW1lbnQgdHlwZScpCisgICAgICAgICMgSXQncyBhIHZhci1wb3NpdGlvbmFsIHBhcmFtZXRlci4KKyAgICAgICAgIyBEbyBub3RoaW5nLiAnKCphcmdzWywgLi4uXSknIC0+ICcoKmFyZ3NbLCAuLi5dKScKKworICAgIHJldHVybiBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPXBhcmFtcykKKworCitkZWYgX3NpZ25hdHVyZV9pc19idWlsdGluKG9iaik6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gdGVzdCBpZiBgb2JqYCBpcyBhIGNhbGxhYmxlIHRoYXQgbWlnaHQKKyAgICAjIHN1cHBvcnQgQXJndW1lbnQgQ2xpbmljJ3MgX190ZXh0X3NpZ25hdHVyZV9fIHByb3RvY29sLgorICAgIHJldHVybiAoaXNidWlsdGluKG9iaikgb3IKKyAgICAgICAgICAgIGlzbWV0aG9kZGVzY3JpcHRvcihvYmopIG9yCisgICAgICAgICAgICBpc2luc3RhbmNlKG9iaiwgX05vblVzZXJEZWZpbmVkQ2FsbGFibGVzKSBvcgorICAgICAgICAgICAgIyBDYW4ndCB0ZXN0ICdpc2luc3RhbmNlKHR5cGUpJyBoZXJlLCBhcyBpdCB3b3VsZAorICAgICAgICAgICAgIyBhbHNvIGJlIFRydWUgZm9yIHJlZ3VsYXIgcHl0aG9uIGNsYXNzZXMKKyAgICAgICAgICAgIG9iaiBpbiAodHlwZSwgb2JqZWN0KSkKKworCitkZWYgX3NpZ25hdHVyZV9pc19mdW5jdGlvbmxpa2Uob2JqKToKKyAgICAjIEludGVybmFsIGhlbHBlciB0byB0ZXN0IGlmIGBvYmpgIGlzIGEgZHVjayB0eXBlIG9mIEZ1bmN0aW9uVHlwZS4KKyAgICAjIEEgZ29vZCBleGFtcGxlIG9mIHN1Y2ggb2JqZWN0cyBhcmUgZnVuY3Rpb25zIGNvbXBpbGVkIHdpdGgKKyAgICAjIEN5dGhvbiwgd2hpY2ggaGF2ZSBhbGwgYXR0cmlidXRlcyB0aGF0IGEgcHVyZSBQeXRob24gZnVuY3Rpb24KKyAgICAjIHdvdWxkIGhhdmUsIGJ1dCBoYXZlIHRoZWlyIGNvZGUgc3RhdGljYWxseSBjb21waWxlZC4KKworICAgIGlmIG5vdCBjYWxsYWJsZShvYmopIG9yIGlzY2xhc3Mob2JqKToKKyAgICAgICAgIyBBbGwgZnVuY3Rpb24tbGlrZSBvYmplY3RzIGFyZSBvYnZpb3VzbHkgY2FsbGFibGVzLAorICAgICAgICAjIGFuZCBub3QgY2xhc3Nlcy4KKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBuYW1lID0gZ2V0YXR0cihvYmosICdfX25hbWVfXycsIE5vbmUpCisgICAgY29kZSA9IGdldGF0dHIob2JqLCAnX19jb2RlX18nLCBOb25lKQorICAgIGRlZmF1bHRzID0gZ2V0YXR0cihvYmosICdfX2RlZmF1bHRzX18nLCBfdm9pZCkgIyBJbXBvcnRhbnQgdG8gdXNlIF92b2lkIC4uLgorICAgIGt3ZGVmYXVsdHMgPSBnZXRhdHRyKG9iaiwgJ19fa3dkZWZhdWx0c19fJywgX3ZvaWQpICMgLi4uIGFuZCBub3QgTm9uZSBoZXJlCisgICAgYW5ub3RhdGlvbnMgPSBnZXRhdHRyKG9iaiwgJ19fYW5ub3RhdGlvbnNfXycsIE5vbmUpCisKKyAgICByZXR1cm4gKGlzaW5zdGFuY2UoY29kZSwgdHlwZXMuQ29kZVR5cGUpIGFuZAorICAgICAgICAgICAgaXNpbnN0YW5jZShuYW1lLCBzdHIpIGFuZAorICAgICAgICAgICAgKGRlZmF1bHRzIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShkZWZhdWx0cywgdHVwbGUpKSBhbmQKKyAgICAgICAgICAgIChrd2RlZmF1bHRzIGlzIE5vbmUgb3IgaXNpbnN0YW5jZShrd2RlZmF1bHRzLCBkaWN0KSkgYW5kCisgICAgICAgICAgICBpc2luc3RhbmNlKGFubm90YXRpb25zLCBkaWN0KSkKKworCitkZWYgX3NpZ25hdHVyZV9nZXRfYm91bmRfcGFyYW0oc3BlYyk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gZ2V0IGZpcnN0IHBhcmFtZXRlciBuYW1lIGZyb20gYQorICAgICMgX190ZXh0X3NpZ25hdHVyZV9fIG9mIGEgYnVpbHRpbiBtZXRob2QsIHdoaWNoIHNob3VsZAorICAgICMgYmUgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6ICcoJHBhcmFtMSwgLi4uKScuCisgICAgIyBBc3N1bXB0aW9ucyBhcmUgdGhhdCB0aGUgZmlyc3QgYXJndW1lbnQgd29uJ3QgaGF2ZQorICAgICMgYSBkZWZhdWx0IHZhbHVlIG9yIGFuIGFubm90YXRpb24uCisKKyAgICBhc3NlcnQgc3BlYy5zdGFydHN3aXRoKCcoJCcpCisKKyAgICBwb3MgPSBzcGVjLmZpbmQoJywnKQorICAgIGlmIHBvcyA9PSAtMToKKyAgICAgICAgcG9zID0gc3BlYy5maW5kKCcpJykKKworICAgIGNwb3MgPSBzcGVjLmZpbmQoJzonKQorICAgIGFzc2VydCBjcG9zID09IC0xIG9yIGNwb3MgPiBwb3MKKworICAgIGNwb3MgPSBzcGVjLmZpbmQoJz0nKQorICAgIGFzc2VydCBjcG9zID09IC0xIG9yIGNwb3MgPiBwb3MKKworICAgIHJldHVybiBzcGVjWzI6cG9zXQorCisKK2RlZiBfc2lnbmF0dXJlX3N0cmlwX25vbl9weXRob25fc3ludGF4KHNpZ25hdHVyZSk6CisgICAgIiIiCisgICAgVGFrZXMgYSBzaWduYXR1cmUgaW4gQXJndW1lbnQgQ2xpbmljJ3MgZXh0ZW5kZWQgc2lnbmF0dXJlIGZvcm1hdC4KKyAgICBSZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgdGhpbmdzOgorICAgICAgKiB0aGF0IHNpZ25hdHVyZSByZS1yZW5kZXJlZCBpbiBzdGFuZGFyZCBQeXRob24gc3ludGF4LAorICAgICAgKiB0aGUgaW5kZXggb2YgdGhlICJzZWxmIiBwYXJhbWV0ZXIgKGdlbmVyYWxseSAwKSwgb3IgTm9uZSBpZgorICAgICAgICB0aGUgZnVuY3Rpb24gZG9lcyBub3QgaGF2ZSBhICJzZWxmIiBwYXJhbWV0ZXIsIGFuZAorICAgICAgKiB0aGUgaW5kZXggb2YgdGhlIGxhc3QgInBvc2l0aW9uYWwgb25seSIgcGFyYW1ldGVyLAorICAgICAgICBvciBOb25lIGlmIHRoZSBzaWduYXR1cmUgaGFzIG5vIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLgorICAgICIiIgorCisgICAgaWYgbm90IHNpZ25hdHVyZToKKyAgICAgICAgcmV0dXJuIHNpZ25hdHVyZSwgTm9uZSwgTm9uZQorCisgICAgc2VsZl9wYXJhbWV0ZXIgPSBOb25lCisgICAgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBOb25lCisKKyAgICBsaW5lcyA9IFtsLmVuY29kZSgnYXNjaWknKSBmb3IgbCBpbiBzaWduYXR1cmUuc3BsaXQoJ1xuJyldCisgICAgZ2VuZXJhdG9yID0gaXRlcihsaW5lcykuX19uZXh0X18KKyAgICB0b2tlbl9zdHJlYW0gPSB0b2tlbml6ZS50b2tlbml6ZShnZW5lcmF0b3IpCisKKyAgICBkZWxheWVkX2NvbW1hID0gRmFsc2UKKyAgICBza2lwX25leHRfY29tbWEgPSBGYWxzZQorICAgIHRleHQgPSBbXQorICAgIGFkZCA9IHRleHQuYXBwZW5kCisKKyAgICBjdXJyZW50X3BhcmFtZXRlciA9IDAKKyAgICBPUCA9IHRva2VuLk9QCisgICAgRVJST1JUT0tFTiA9IHRva2VuLkVSUk9SVE9LRU4KKworICAgICMgdG9rZW4gc3RyZWFtIGFsd2F5cyBzdGFydHMgd2l0aCBFTkNPRElORyB0b2tlbiwgc2tpcCBpdAorICAgIHQgPSBuZXh0KHRva2VuX3N0cmVhbSkKKyAgICBhc3NlcnQgdC50eXBlID09IHRva2VuaXplLkVOQ09ESU5HCisKKyAgICBmb3IgdCBpbiB0b2tlbl9zdHJlYW06CisgICAgICAgIHR5cGUsIHN0cmluZyA9IHQudHlwZSwgdC5zdHJpbmcKKworICAgICAgICBpZiB0eXBlID09IE9QOgorICAgICAgICAgICAgaWYgc3RyaW5nID09ICcsJzoKKyAgICAgICAgICAgICAgICBpZiBza2lwX25leHRfY29tbWE6CisgICAgICAgICAgICAgICAgICAgIHNraXBfbmV4dF9jb21tYSA9IEZhbHNlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG5vdCBkZWxheWVkX2NvbW1hCisgICAgICAgICAgICAgICAgICAgIGRlbGF5ZWRfY29tbWEgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW1ldGVyICs9IDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBpZiBzdHJpbmcgPT0gJy8nOgorICAgICAgICAgICAgICAgIGFzc2VydCBub3Qgc2tpcF9uZXh0X2NvbW1hCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxhc3RfcG9zaXRpb25hbF9vbmx5IGlzIE5vbmUKKyAgICAgICAgICAgICAgICBza2lwX25leHRfY29tbWEgPSBUcnVlCisgICAgICAgICAgICAgICAgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBjdXJyZW50X3BhcmFtZXRlciAtIDEKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmICh0eXBlID09IEVSUk9SVE9LRU4pIGFuZCAoc3RyaW5nID09ICckJyk6CisgICAgICAgICAgICBhc3NlcnQgc2VsZl9wYXJhbWV0ZXIgaXMgTm9uZQorICAgICAgICAgICAgc2VsZl9wYXJhbWV0ZXIgPSBjdXJyZW50X3BhcmFtZXRlcgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBpZiBkZWxheWVkX2NvbW1hOgorICAgICAgICAgICAgZGVsYXllZF9jb21tYSA9IEZhbHNlCisgICAgICAgICAgICBpZiBub3QgKCh0eXBlID09IE9QKSBhbmQgKHN0cmluZyA9PSAnKScpKToKKyAgICAgICAgICAgICAgICBhZGQoJywgJykKKyAgICAgICAgYWRkKHN0cmluZykKKyAgICAgICAgaWYgKHN0cmluZyA9PSAnLCcpOgorICAgICAgICAgICAgYWRkKCcgJykKKyAgICBjbGVhbl9zaWduYXR1cmUgPSAnJy5qb2luKHRleHQpCisgICAgcmV0dXJuIGNsZWFuX3NpZ25hdHVyZSwgc2VsZl9wYXJhbWV0ZXIsIGxhc3RfcG9zaXRpb25hbF9vbmx5CisKKworZGVmIF9zaWduYXR1cmVfZnJvbXN0cihjbHMsIG9iaiwgcywgc2tpcF9ib3VuZF9hcmc9VHJ1ZSk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgdG8gcGFyc2UgY29udGVudCBvZiAnX190ZXh0X3NpZ25hdHVyZV9fJworICAgICMgYW5kIHJldHVybiBhIFNpZ25hdHVyZSBiYXNlZCBvbiBpdAorICAgIFBhcmFtZXRlciA9IGNscy5fcGFyYW1ldGVyX2NscworCisgICAgY2xlYW5fc2lnbmF0dXJlLCBzZWxmX3BhcmFtZXRlciwgbGFzdF9wb3NpdGlvbmFsX29ubHkgPSBcCisgICAgICAgIF9zaWduYXR1cmVfc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgocykKKworICAgIHByb2dyYW0gPSAiZGVmIGZvbyIgKyBjbGVhbl9zaWduYXR1cmUgKyAiOiBwYXNzIgorCisgICAgdHJ5OgorICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UocHJvZ3JhbSkKKyAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgIG1vZHVsZSA9IE5vbmUKKworICAgIGlmIG5vdCBpc2luc3RhbmNlKG1vZHVsZSwgYXN0Lk1vZHVsZSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInshcn0gYnVpbHRpbiBoYXMgaW52YWxpZCBzaWduYXR1cmUiLmZvcm1hdChvYmopKQorCisgICAgZiA9IG1vZHVsZS5ib2R5WzBdCisKKyAgICBwYXJhbWV0ZXJzID0gW10KKyAgICBlbXB0eSA9IFBhcmFtZXRlci5lbXB0eQorICAgIGludmFsaWQgPSBvYmplY3QoKQorCisgICAgbW9kdWxlID0gTm9uZQorICAgIG1vZHVsZV9kaWN0ID0ge30KKyAgICBtb2R1bGVfbmFtZSA9IGdldGF0dHIob2JqLCAnX19tb2R1bGVfXycsIE5vbmUpCisgICAgaWYgbW9kdWxlX25hbWU6CisgICAgICAgIG1vZHVsZSA9IHN5cy5tb2R1bGVzLmdldChtb2R1bGVfbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgbW9kdWxlOgorICAgICAgICAgICAgbW9kdWxlX2RpY3QgPSBtb2R1bGUuX19kaWN0X18KKyAgICBzeXNfbW9kdWxlX2RpY3QgPSBzeXMubW9kdWxlcworCisgICAgZGVmIHBhcnNlX25hbWUobm9kZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG5vZGUsIGFzdC5hcmcpCisgICAgICAgIGlmIG5vZGUuYW5ub3RhdGlvbiAhPSBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQW5ub3RhdGlvbnMgYXJlIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIikKKyAgICAgICAgcmV0dXJuIG5vZGUuYXJnCisKKyAgICBkZWYgd3JhcF92YWx1ZShzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdmFsdWUgPSBldmFsKHMsIG1vZHVsZV9kaWN0KQorICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHZhbHVlID0gZXZhbChzLCBzeXNfbW9kdWxlX2RpY3QpCisgICAgICAgICAgICBleGNlcHQgTmFtZUVycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIHJldHVybiBhc3QuU3RyKHZhbHVlKQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAoaW50LCBmbG9hdCkpOgorICAgICAgICAgICAgcmV0dXJuIGFzdC5OdW0odmFsdWUpCisgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIGJ5dGVzKToKKyAgICAgICAgICAgIHJldHVybiBhc3QuQnl0ZXModmFsdWUpCisgICAgICAgIGlmIHZhbHVlIGluIChUcnVlLCBGYWxzZSwgTm9uZSk6CisgICAgICAgICAgICByZXR1cm4gYXN0Lk5hbWVDb25zdGFudCh2YWx1ZSkKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCkKKworICAgIGNsYXNzIFJld3JpdGVTeW1ib2xpY3MoYXN0Lk5vZGVUcmFuc2Zvcm1lcik6CisgICAgICAgIGRlZiB2aXNpdF9BdHRyaWJ1dGUoc2VsZiwgbm9kZSk6CisgICAgICAgICAgICBhID0gW10KKyAgICAgICAgICAgIG4gPSBub2RlCisgICAgICAgICAgICB3aGlsZSBpc2luc3RhbmNlKG4sIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgIGEuYXBwZW5kKG4uYXR0cikKKyAgICAgICAgICAgICAgICBuID0gbi52YWx1ZQorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobiwgYXN0Lk5hbWUpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigpCisgICAgICAgICAgICBhLmFwcGVuZChuLmlkKQorICAgICAgICAgICAgdmFsdWUgPSAiLiIuam9pbihyZXZlcnNlZChhKSkKKyAgICAgICAgICAgIHJldHVybiB3cmFwX3ZhbHVlKHZhbHVlKQorCisgICAgICAgIGRlZiB2aXNpdF9OYW1lKHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uobm9kZS5jdHgsIGFzdC5Mb2FkKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKyAgICAgICAgICAgIHJldHVybiB3cmFwX3ZhbHVlKG5vZGUuaWQpCisKKyAgICBkZWYgcChuYW1lX25vZGUsIGRlZmF1bHRfbm9kZSwgZGVmYXVsdD1lbXB0eSk6CisgICAgICAgIG5hbWUgPSBwYXJzZV9uYW1lKG5hbWVfbm9kZSkKKyAgICAgICAgaWYgbmFtZSBpcyBpbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgaWYgZGVmYXVsdF9ub2RlIGFuZCBkZWZhdWx0X25vZGUgaXMgbm90IF9lbXB0eToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWZhdWx0X25vZGUgPSBSZXdyaXRlU3ltYm9saWNzKCkudmlzaXQoZGVmYXVsdF9ub2RlKQorICAgICAgICAgICAgICAgIG8gPSBhc3QubGl0ZXJhbF9ldmFsKGRlZmF1bHRfbm9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIG8gPSBpbnZhbGlkCisgICAgICAgICAgICBpZiBvIGlzIGludmFsaWQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgIGRlZmF1bHQgPSBvIGlmIG8gaXMgbm90IGludmFsaWQgZWxzZSBkZWZhdWx0CisgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBraW5kLCBkZWZhdWx0PWRlZmF1bHQsIGFubm90YXRpb249ZW1wdHkpKQorCisgICAgIyBub24ta2V5d29yZC1vbmx5IHBhcmFtZXRlcnMKKyAgICBhcmdzID0gcmV2ZXJzZWQoZi5hcmdzLmFyZ3MpCisgICAgZGVmYXVsdHMgPSByZXZlcnNlZChmLmFyZ3MuZGVmYXVsdHMpCisgICAgaXRlciA9IGl0ZXJ0b29scy56aXBfbG9uZ2VzdChhcmdzLCBkZWZhdWx0cywgZmlsbHZhbHVlPU5vbmUpCisgICAgaWYgbGFzdF9wb3NpdGlvbmFsX29ubHkgaXMgbm90IE5vbmU6CisgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZCisgICAgZWxzZToKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQKKyAgICBmb3IgaSwgKG5hbWUsIGRlZmF1bHQpIGluIGVudW1lcmF0ZShyZXZlcnNlZChsaXN0KGl0ZXIpKSk6CisgICAgICAgIHAobmFtZSwgZGVmYXVsdCkKKyAgICAgICAgaWYgaSA9PSBsYXN0X3Bvc2l0aW9uYWxfb25seToKKyAgICAgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuUE9TSVRJT05BTF9PUl9LRVlXT1JECisKKyAgICAjICphcmdzCisgICAgaWYgZi5hcmdzLnZhcmFyZzoKKyAgICAgICAga2luZCA9IFBhcmFtZXRlci5WQVJfUE9TSVRJT05BTAorICAgICAgICBwKGYuYXJncy52YXJhcmcsIGVtcHR5KQorCisgICAgIyBrZXl3b3JkLW9ubHkgYXJndW1lbnRzCisgICAga2luZCA9IFBhcmFtZXRlci5LRVlXT1JEX09OTFkKKyAgICBmb3IgbmFtZSwgZGVmYXVsdCBpbiB6aXAoZi5hcmdzLmt3b25seWFyZ3MsIGYuYXJncy5rd19kZWZhdWx0cyk6CisgICAgICAgIHAobmFtZSwgZGVmYXVsdCkKKworICAgICMgKiprd2FyZ3MKKyAgICBpZiBmLmFyZ3Mua3dhcmc6CisgICAgICAgIGtpbmQgPSBQYXJhbWV0ZXIuVkFSX0tFWVdPUkQKKyAgICAgICAgcChmLmFyZ3Mua3dhcmcsIGVtcHR5KQorCisgICAgaWYgc2VsZl9wYXJhbWV0ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICMgUG9zc2libHkgc3RyaXAgdGhlIGJvdW5kIGFyZ3VtZW50OgorICAgICAgICAjICAgIC0gV2UgKmFsd2F5cyogc3RyaXAgZmlyc3QgYm91bmQgYXJndW1lbnQgaWYKKyAgICAgICAgIyAgICAgIGl0IGlzIGEgbW9kdWxlLgorICAgICAgICAjICAgIC0gV2UgZG9uJ3Qgc3RyaXAgZmlyc3QgYm91bmQgYXJndW1lbnQgaWYKKyAgICAgICAgIyAgICAgIHNraXBfYm91bmRfYXJnIGlzIEZhbHNlLgorICAgICAgICBhc3NlcnQgcGFyYW1ldGVycworICAgICAgICBfc2VsZiA9IGdldGF0dHIob2JqLCAnX19zZWxmX18nLCBOb25lKQorICAgICAgICBzZWxmX2lzYm91bmQgPSBfc2VsZiBpcyBub3QgTm9uZQorICAgICAgICBzZWxmX2lzbW9kdWxlID0gaXNtb2R1bGUoX3NlbGYpCisgICAgICAgIGlmIHNlbGZfaXNib3VuZCBhbmQgKHNlbGZfaXNtb2R1bGUgb3Igc2tpcF9ib3VuZF9hcmcpOgorICAgICAgICAgICAgcGFyYW1ldGVycy5wb3AoMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgZm9yIGJ1aWx0aW5zLCBzZWxmIHBhcmFtZXRlciBpcyBhbHdheXMgcG9zaXRpb25hbC1vbmx5IQorICAgICAgICAgICAgcCA9IHBhcmFtZXRlcnNbMF0ucmVwbGFjZShraW5kPVBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisgICAgICAgICAgICBwYXJhbWV0ZXJzWzBdID0gcAorCisgICAgcmV0dXJuIGNscyhwYXJhbWV0ZXJzLCByZXR1cm5fYW5ub3RhdGlvbj1jbHMuZW1wdHkpCisKKworZGVmIF9zaWduYXR1cmVfZnJvbV9idWlsdGluKGNscywgZnVuYywgc2tpcF9ib3VuZF9hcmc9VHJ1ZSk6CisgICAgIyBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdG8gZ2V0IHNpZ25hdHVyZSBmb3IKKyAgICAjIGJ1aWx0aW4gY2FsbGFibGVzCisgICAgaWYgbm90IF9zaWduYXR1cmVfaXNfYnVpbHRpbihmdW5jKToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ7IXJ9IGlzIG5vdCBhIFB5dGhvbiBidWlsdGluICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiIuZm9ybWF0KGZ1bmMpKQorCisgICAgcyA9IGdldGF0dHIoZnVuYywgIl9fdGV4dF9zaWduYXR1cmVfXyIsIE5vbmUpCisgICAgaWYgbm90IHM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm5vIHNpZ25hdHVyZSBmb3VuZCBmb3IgYnVpbHRpbiB7IXJ9Ii5mb3JtYXQoZnVuYykpCisKKyAgICByZXR1cm4gX3NpZ25hdHVyZV9mcm9tc3RyKGNscywgZnVuYywgcywgc2tpcF9ib3VuZF9hcmcpCisKKworZGVmIF9zaWduYXR1cmVfaW50ZXJuYWwob2JqLCBmb2xsb3dfd3JhcHBlcl9jaGFpbnM9VHJ1ZSwgc2tpcF9ib3VuZF9hcmc9VHJ1ZSk6CiAKICAgICBpZiBub3QgY2FsbGFibGUob2JqKToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCd7IXJ9IGlzIG5vdCBhIGNhbGxhYmxlIG9iamVjdCcuZm9ybWF0KG9iaikpCkBAIC0xMzQ0LDggKzE5MDAsMjUgQEAKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZXMuTWV0aG9kVHlwZSk6CiAgICAgICAgICMgSW4gdGhpcyBjYXNlIHdlIHNraXAgdGhlIGZpcnN0IHBhcmFtZXRlciBvZiB0aGUgdW5kZXJseWluZwogICAgICAgICAjIGZ1bmN0aW9uICh1c3VhbGx5IGBzZWxmYCBvciBgY2xzYCkuCi0gICAgICAgIHNpZyA9IHNpZ25hdHVyZShvYmouX19mdW5jX18pCi0gICAgICAgIHJldHVybiBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPXR1cGxlKHNpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKVsxOl0pCisgICAgICAgIHNpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwob2JqLl9fZnVuY19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgaWYgc2tpcF9ib3VuZF9hcmc6CisgICAgICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9ib3VuZF9tZXRob2Qoc2lnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNpZworCisgICAgIyBXYXMgdGhpcyBmdW5jdGlvbiB3cmFwcGVkIGJ5IGEgZGVjb3JhdG9yPworICAgIGlmIGZvbGxvd193cmFwcGVyX2NoYWluczoKKyAgICAgICAgb2JqID0gdW53cmFwKG9iaiwgc3RvcD0obGFtYmRhIGY6IGhhc2F0dHIoZiwgIl9fc2lnbmF0dXJlX18iKSkpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCB0eXBlcy5NZXRob2RUeXBlKToKKyAgICAgICAgICAgICMgSWYgdGhlIHVud3JhcHBlZCBvYmplY3QgaXMgYSAqbWV0aG9kKiwgd2UgbWlnaHQgd2FudCB0bworICAgICAgICAgICAgIyBza2lwIGl0cyBmaXJzdCBwYXJhbWV0ZXIgKHNlbGYpLgorICAgICAgICAgICAgIyBTZWUgdGVzdF9zaWduYXR1cmVfd3JhcHBlZF9ib3VuZF9tZXRob2QgZm9yIGRldGFpbHMuCisgICAgICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9pbnRlcm5hbCgKKyAgICAgICAgICAgICAgICBvYmosCisgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zPWZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZz1za2lwX2JvdW5kX2FyZykKIAogICAgIHRyeToKICAgICAgICAgc2lnID0gb2JqLl9fc2lnbmF0dXJlX18KQEAgLTEzNTMsNjAgKzE5MjYsNDkgQEAKICAgICAgICAgcGFzcwogICAgIGVsc2U6CiAgICAgICAgIGlmIHNpZyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNpZywgU2lnbmF0dXJlKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICd1bmV4cGVjdGVkIG9iamVjdCB7IXJ9IGluIF9fc2lnbmF0dXJlX18gJworICAgICAgICAgICAgICAgICAgICAnYXR0cmlidXRlJy5mb3JtYXQoc2lnKSkKICAgICAgICAgICAgIHJldHVybiBzaWcKIAogICAgIHRyeToKLSAgICAgICAgIyBXYXMgdGhpcyBmdW5jdGlvbiB3cmFwcGVkIGJ5IGEgZGVjb3JhdG9yPwotICAgICAgICB3cmFwcGVkID0gb2JqLl9fd3JhcHBlZF9fCisgICAgICAgIHBhcnRpYWxtZXRob2QgPSBvYmouX3BhcnRpYWxtZXRob2QKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gc2lnbmF0dXJlKHdyYXBwZWQpCisgICAgICAgIGlmIGlzaW5zdGFuY2UocGFydGlhbG1ldGhvZCwgZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QpOgorICAgICAgICAgICAgIyBVbmJvdW5kIHBhcnRpYWxtZXRob2QgKHNlZSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZCkKKyAgICAgICAgICAgICMgVGhpcyBtZWFucywgdGhhdCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAjIGFzIGlmIGl0J3MgYSByZWd1bGFyIHBhcnRpYWwgb2JqZWN0LCBidXQgdGFraW5nIGludG8KKyAgICAgICAgICAgICMgYWNjb3VudCB0aGF0IHRoZSBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50CisgICAgICAgICAgICAjICh1c3VhbGx5IGBzZWxmYCwgb3IgYGNsc2ApIHdpbGwgbm90IGJlIHBhc3NlZAorICAgICAgICAgICAgIyBhdXRvbWF0aWNhbGx5IChhcyBmb3IgYm91bmRtZXRob2RzKQogCi0gICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLkZ1bmN0aW9uVHlwZSk6CisgICAgICAgICAgICB3cmFwcGVkX3NpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwocGFydGlhbG1ldGhvZC5mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgICAgIHNpZyA9IF9zaWduYXR1cmVfZ2V0X3BhcnRpYWwod3JhcHBlZF9zaWcsIHBhcnRpYWxtZXRob2QsIChOb25lLCkpCisKKyAgICAgICAgICAgIGZpcnN0X3dyYXBwZWRfcGFyYW0gPSB0dXBsZSh3cmFwcGVkX3NpZy5wYXJhbWV0ZXJzLnZhbHVlcygpKVswXQorICAgICAgICAgICAgbmV3X3BhcmFtcyA9IChmaXJzdF93cmFwcGVkX3BhcmFtLCkgKyB0dXBsZShzaWcucGFyYW1ldGVycy52YWx1ZXMoKSkKKworICAgICAgICAgICAgcmV0dXJuIHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9bmV3X3BhcmFtcykKKworICAgIGlmIGlzZnVuY3Rpb24ob2JqKSBvciBfc2lnbmF0dXJlX2lzX2Z1bmN0aW9ubGlrZShvYmopOgorICAgICAgICAjIElmIGl0J3MgYSBwdXJlIFB5dGhvbiBmdW5jdGlvbiwgb3IgYW4gb2JqZWN0IHRoYXQgaXMgZHVjayB0eXBlCisgICAgICAgICMgb2YgYSBQeXRob24gZnVuY3Rpb24gKEN5dGhvbiBmdW5jdGlvbnMsIGZvciBpbnN0YW5jZSksIHRoZW46CiAgICAgICAgIHJldHVybiBTaWduYXR1cmUuZnJvbV9mdW5jdGlvbihvYmopCiAKKyAgICBpZiBfc2lnbmF0dXJlX2lzX2J1aWx0aW4ob2JqKToKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbV9idWlsdGluKFNpZ25hdHVyZSwgb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmc9c2tpcF9ib3VuZF9hcmcpCisKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgZnVuY3Rvb2xzLnBhcnRpYWwpOgotICAgICAgICBzaWcgPSBzaWduYXR1cmUob2JqLmZ1bmMpCi0KLSAgICAgICAgbmV3X3BhcmFtcyA9IE9yZGVyZWREaWN0KHNpZy5wYXJhbWV0ZXJzLml0ZW1zKCkpCi0KLSAgICAgICAgcGFydGlhbF9hcmdzID0gb2JqLmFyZ3Mgb3IgKCkKLSAgICAgICAgcGFydGlhbF9rZXl3b3JkcyA9IG9iai5rZXl3b3JkcyBvciB7fQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBiYSA9IHNpZy5iaW5kX3BhcnRpYWwoKnBhcnRpYWxfYXJncywgKipwYXJ0aWFsX2tleXdvcmRzKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGV4OgotICAgICAgICAgICAgbXNnID0gJ3BhcnRpYWwgb2JqZWN0IHshcn0gaGFzIGluY29ycmVjdCBhcmd1bWVudHMnLmZvcm1hdChvYmopCi0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykgZnJvbSBleAotCi0gICAgICAgIGZvciBhcmdfbmFtZSwgYXJnX3ZhbHVlIGluIGJhLmFyZ3VtZW50cy5pdGVtcygpOgotICAgICAgICAgICAgcGFyYW0gPSBuZXdfcGFyYW1zW2FyZ19uYW1lXQotICAgICAgICAgICAgaWYgYXJnX25hbWUgaW4gcGFydGlhbF9rZXl3b3JkczoKLSAgICAgICAgICAgICAgICAjIFdlIHNldCBhIG5ldyBkZWZhdWx0IHZhbHVlLCBiZWNhdXNlIHRoZSBmb2xsb3dpbmcgY29kZQotICAgICAgICAgICAgICAgICMgaXMgY29ycmVjdDoKLSAgICAgICAgICAgICAgICAjCi0gICAgICAgICAgICAgICAgIyAgID4+PiBkZWYgZm9vKGEpOiBwcmludChhKQotICAgICAgICAgICAgICAgICMgICA+Pj4gcHJpbnQocGFydGlhbChwYXJ0aWFsKGZvbywgYT0xMCksIGE9MjApKCkpCi0gICAgICAgICAgICAgICAgIyAgIDIwCi0gICAgICAgICAgICAgICAgIyAgID4+PiBwcmludChwYXJ0aWFsKHBhcnRpYWwoZm9vLCBhPTEwKSwgYT0yMCkoYT0zMCkpCi0gICAgICAgICAgICAgICAgIyAgIDMwCi0gICAgICAgICAgICAgICAgIwotICAgICAgICAgICAgICAgICMgU28sIHdpdGggJ3BhcnRpYWwnIG9iamVjdHMsIHBhc3NpbmcgYSBrZXl3b3JkIGFyZ3VtZW50IGlzCi0gICAgICAgICAgICAgICAgIyBsaWtlIHNldHRpbmcgYSBuZXcgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcKLSAgICAgICAgICAgICAgICAjIHBhcmFtZXRlcgotICAgICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIFdlIGFsc28gbWFyayB0aGlzIHBhcmFtZXRlciB3aXRoICdfcGFydGlhbF9rd2FyZycKLSAgICAgICAgICAgICAgICAjIGZsYWcuICBMYXRlciwgaW4gJ19iaW5kJywgdGhlICdkZWZhdWx0JyB2YWx1ZSBvZiB0aGlzCi0gICAgICAgICAgICAgICAgIyBwYXJhbWV0ZXIgd2lsbCBiZSBhZGRlZCB0byAna3dhcmdzJywgdG8gc2ltdWxhdGUKLSAgICAgICAgICAgICAgICAjIHRoZSAnZnVuY3Rvb2xzLnBhcnRpYWwnIHJlYWwgY2FsbC4KLSAgICAgICAgICAgICAgICBuZXdfcGFyYW1zW2FyZ19uYW1lXSA9IHBhcmFtLnJlcGxhY2UoZGVmYXVsdD1hcmdfdmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJ0aWFsX2t3YXJnPVRydWUpCi0KLSAgICAgICAgICAgIGVsaWYgKHBhcmFtLmtpbmQgbm90IGluIChfVkFSX0tFWVdPUkQsIF9WQVJfUE9TSVRJT05BTCkgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IHBhcmFtLl9wYXJ0aWFsX2t3YXJnKToKLSAgICAgICAgICAgICAgICBuZXdfcGFyYW1zLnBvcChhcmdfbmFtZSkKLQotICAgICAgICByZXR1cm4gc2lnLnJlcGxhY2UocGFyYW1ldGVycz1uZXdfcGFyYW1zLnZhbHVlcygpKQorICAgICAgICB3cmFwcGVkX3NpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwob2JqLmZ1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKyAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZ2V0X3BhcnRpYWwod3JhcHBlZF9zaWcsIG9iaikKIAogICAgIHNpZyA9IE5vbmUKICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSk6CkBAIC0xNDE0LDMyICsxOTc2LDgwIEBACiAKICAgICAgICAgIyBGaXJzdCwgbGV0J3Mgc2VlIGlmIGl0IGhhcyBhbiBvdmVybG9hZGVkIF9fY2FsbF9fIGRlZmluZWQKICAgICAgICAgIyBpbiBpdHMgbWV0YWNsYXNzCi0gICAgICAgIGNhbGwgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QodHlwZShvYmopLCAnX19jYWxsX18nKQorICAgICAgICBjYWxsID0gX3NpZ25hdHVyZV9nZXRfdXNlcl9kZWZpbmVkX21ldGhvZCh0eXBlKG9iaiksICdfX2NhbGxfXycpCiAgICAgICAgIGlmIGNhbGwgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzaWcgPSBzaWduYXR1cmUoY2FsbCkKKyAgICAgICAgICAgIHNpZyA9IF9zaWduYXR1cmVfaW50ZXJuYWwoY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgTm93IHdlIGNoZWNrIGlmIHRoZSAnb2JqJyBjbGFzcyBoYXMgYSAnX19uZXdfXycgbWV0aG9kCi0gICAgICAgICAgICBuZXcgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2Qob2JqLCAnX19uZXdfXycpCisgICAgICAgICAgICBuZXcgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKG9iaiwgJ19fbmV3X18nKQogICAgICAgICAgICAgaWYgbmV3IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNpZyA9IHNpZ25hdHVyZShuZXcpCisgICAgICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChuZXcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2xsb3dfd3JhcHBlcl9jaGFpbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBGaW5hbGx5LCB3ZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBfX2luaXRfXyBpbXBsZW1lbnRlZAotICAgICAgICAgICAgICAgIGluaXQgPSBfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2Qob2JqLCAnX19pbml0X18nKQorICAgICAgICAgICAgICAgIGluaXQgPSBfc2lnbmF0dXJlX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKG9iaiwgJ19faW5pdF9fJykKICAgICAgICAgICAgICAgICBpZiBpbml0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzaWcgPSBzaWduYXR1cmUoaW5pdCkKKyAgICAgICAgICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChpbml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbGxvd193cmFwcGVyX2NoYWlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JvdW5kX2FyZykKKworICAgICAgICBpZiBzaWcgaXMgTm9uZToKKyAgICAgICAgICAgICMgQXQgdGhpcyBwb2ludCB3ZSBrbm93LCB0aGF0IGBvYmpgIGlzIGEgY2xhc3MsIHdpdGggbm8gdXNlci0KKyAgICAgICAgICAgICMgZGVmaW5lZCAnX19pbml0X18nLCAnX19uZXdfXycsIG9yIGNsYXNzLWxldmVsICdfX2NhbGxfXycKKworICAgICAgICAgICAgZm9yIGJhc2UgaW4gb2JqLl9fbXJvX19bOi0xXToKKyAgICAgICAgICAgICAgICAjIFNpbmNlICdfX3RleHRfc2lnbmF0dXJlX18nIGlzIGltcGxlbWVudGVkIGFzIGEKKyAgICAgICAgICAgICAgICAjIGRlc2NyaXB0b3IgdGhhdCBleHRyYWN0cyB0ZXh0IHNpZ25hdHVyZSBmcm9tIHRoZQorICAgICAgICAgICAgICAgICMgY2xhc3MgZG9jc3RyaW5nLCBpZiAnb2JqJyBpcyBkZXJpdmVkIGZyb20gYSBidWlsdGluCisgICAgICAgICAgICAgICAgIyBjbGFzcywgaXRzIG93biAnX190ZXh0X3NpZ25hdHVyZV9fJyBtYXkgYmUgJ05vbmUnLgorICAgICAgICAgICAgICAgICMgVGhlcmVmb3JlLCB3ZSBnbyB0aHJvdWdoIHRoZSBNUk8gKGV4Y2VwdCB0aGUgbGFzdAorICAgICAgICAgICAgICAgICMgY2xhc3MgaW4gdGhlcmUsIHdoaWNoIGlzICdvYmplY3QnKSB0byBmaW5kIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgICMgY2xhc3Mgd2l0aCBub24tZW1wdHkgdGV4dCBzaWduYXR1cmUuCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB0ZXh0X3NpZyA9IGJhc2UuX190ZXh0X3NpZ25hdHVyZV9fCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGV4dF9zaWc6CisgICAgICAgICAgICAgICAgICAgICAgICAjIElmICdvYmonIGNsYXNzIGhhcyBhIF9fdGV4dF9zaWduYXR1cmVfXyBhdHRyaWJ1dGU6CisgICAgICAgICAgICAgICAgICAgICAgICAjIHJldHVybiBhIHNpZ25hdHVyZSBiYXNlZCBvbiBpdAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zaWduYXR1cmVfZnJvbXN0cihTaWduYXR1cmUsIG9iaiwgdGV4dF9zaWcpCisKKyAgICAgICAgICAgICMgTm8gJ19fdGV4dF9zaWduYXR1cmVfXycgd2FzIGZvdW5kIGZvciB0aGUgJ29iaicgY2xhc3MuCisgICAgICAgICAgICAjIExhc3Qgb3B0aW9uIGlzIHRvIGNoZWNrIGlmIGl0cyAnX19pbml0X18nIGlzCisgICAgICAgICAgICAjIG9iamVjdC5fX2luaXRfXyBvciB0eXBlLl9faW5pdF9fLgorICAgICAgICAgICAgaWYgdHlwZSBub3QgaW4gb2JqLl9fbXJvX186CisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIGEgY2xhc3MgKG5vdCBtZXRhY2xhc3MpLCBidXQgbm8gdXNlci1kZWZpbmVkCisgICAgICAgICAgICAgICAgIyBfX2luaXRfXyBvciBfX25ld19fIGZvciBpdAorICAgICAgICAgICAgICAgIGlmIG9iai5fX2luaXRfXyBpcyBvYmplY3QuX19pbml0X186CisgICAgICAgICAgICAgICAgICAgICMgUmV0dXJuIGEgc2lnbmF0dXJlIG9mICdvYmplY3QnIGJ1aWx0aW4uCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzaWduYXR1cmUob2JqZWN0KQorCiAgICAgZWxpZiBub3QgaXNpbnN0YW5jZShvYmosIF9Ob25Vc2VyRGVmaW5lZENhbGxhYmxlcyk6CiAgICAgICAgICMgQW4gb2JqZWN0IHdpdGggX19jYWxsX18KICAgICAgICAgIyBXZSBhbHNvIGNoZWNrIHRoYXQgdGhlICdvYmonIGlzIG5vdCBhbiBpbnN0YW5jZSBvZgogICAgICAgICAjIF9XcmFwcGVyRGVzY3JpcHRvciBvciBfTWV0aG9kV3JhcHBlciB0byBhdm9pZAogICAgICAgICAjIGluZmluaXRlIHJlY3Vyc2lvbiAoYW5kIGV2ZW4gcG90ZW50aWFsIHNlZ2ZhdWx0KQotICAgICAgICBjYWxsID0gX2dldF91c2VyX2RlZmluZWRfbWV0aG9kKHR5cGUob2JqKSwgJ19fY2FsbF9fJykKKyAgICAgICAgY2FsbCA9IF9zaWduYXR1cmVfZ2V0X3VzZXJfZGVmaW5lZF9tZXRob2QodHlwZShvYmopLCAnX19jYWxsX18nKQogICAgICAgICBpZiBjYWxsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2lnID0gc2lnbmF0dXJlKGNhbGwpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2lnID0gX3NpZ25hdHVyZV9pbnRlcm5hbChjYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3dyYXBwZXJfY2hhaW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcF9ib3VuZF9hcmcpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBleDoKKyAgICAgICAgICAgICAgICBtc2cgPSAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciB7IXJ9Jy5mb3JtYXQob2JqKQorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKSBmcm9tIGV4CiAKICAgICBpZiBzaWcgaXMgbm90IE5vbmU6CiAgICAgICAgICMgRm9yIGNsYXNzZXMgYW5kIG9iamVjdHMgd2Ugc2tpcCB0aGUgZmlyc3QgcGFyYW1ldGVyIG9mIHRoZWlyCiAgICAgICAgICMgX19jYWxsX18sIF9fbmV3X18sIG9yIF9faW5pdF9fIG1ldGhvZHMKLSAgICAgICAgcmV0dXJuIHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9dHVwbGUoc2lnLnBhcmFtZXRlcnMudmFsdWVzKCkpWzE6XSkKKyAgICAgICAgaWYgc2tpcF9ib3VuZF9hcmc6CisgICAgICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9ib3VuZF9tZXRob2Qoc2lnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNpZwogCiAgICAgaWYgaXNpbnN0YW5jZShvYmosIHR5cGVzLkJ1aWx0aW5GdW5jdGlvblR5cGUpOgogICAgICAgICAjIFJhaXNlIGEgbmljZXIgZXJyb3IgbWVzc2FnZSBmb3IgYnVpbHRpbnMKQEAgLTE0NDgsNiArMjA1OCwxMCBAQAogCiAgICAgcmFpc2UgVmFsdWVFcnJvcignY2FsbGFibGUgeyFyfSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZScuZm9ybWF0KG9iaikpCiAKK2RlZiBzaWduYXR1cmUob2JqKToKKyAgICAnJydHZXQgYSBzaWduYXR1cmUgb2JqZWN0IGZvciB0aGUgcGFzc2VkIGNhbGxhYmxlLicnJworICAgIHJldHVybiBfc2lnbmF0dXJlX2ludGVybmFsKG9iaikKKwogCiBjbGFzcyBfdm9pZDoKICAgICAnJydBIHByaXZhdGUgbWFya2VyIC0gdXNlZCBpbiBQYXJhbWV0ZXIgJiBTaWduYXR1cmUnJycKQEAgLTE0ODYsMTAgKzIxMDAsMTIgQEAKICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlciBhcyBhIHN0cmluZy4KICAgICAqIGRlZmF1bHQgOiBvYmplY3QKICAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBwYXJhbWV0ZXIgaWYgc3BlY2lmaWVkLiAgSWYgdGhlCi0gICAgICAgIHBhcmFtZXRlciBoYXMgbm8gZGVmYXVsdCB2YWx1ZSwgdGhpcyBhdHRyaWJ1dGUgaXMgbm90IHNldC4KKyAgICAgICAgcGFyYW1ldGVyIGhhcyBubyBkZWZhdWx0IHZhbHVlLCB0aGlzIGF0dHJpYnV0ZSBpcyBzZXQgdG8KKyAgICAgICAgYFBhcmFtZXRlci5lbXB0eWAuCiAgICAgKiBhbm5vdGF0aW9uCiAgICAgICAgIFRoZSBhbm5vdGF0aW9uIGZvciB0aGUgcGFyYW1ldGVyIGlmIHNwZWNpZmllZC4gIElmIHRoZQotICAgICAgICBwYXJhbWV0ZXIgaGFzIG5vIGFubm90YXRpb24sIHRoaXMgYXR0cmlidXRlIGlzIG5vdCBzZXQuCisgICAgICAgIHBhcmFtZXRlciBoYXMgbm8gYW5ub3RhdGlvbiwgdGhpcyBhdHRyaWJ1dGUgaXMgc2V0IHRvCisgICAgICAgIGBQYXJhbWV0ZXIuZW1wdHlgLgogICAgICoga2luZCA6IHN0cgogICAgICAgICBEZXNjcmliZXMgaG93IGFyZ3VtZW50IHZhbHVlcyBhcmUgYm91bmQgdG8gdGhlIHBhcmFtZXRlci4KICAgICAgICAgUG9zc2libGUgdmFsdWVzOiBgUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWWAsCkBAIC0xNDk3LDcgKzIxMTMsNyBAQAogICAgICAgICBgUGFyYW1ldGVyLktFWVdPUkRfT05MWWAsIGBQYXJhbWV0ZXIuVkFSX0tFWVdPUkRgLgogICAgICcnJwogCi0gICAgX19zbG90c19fID0gKCdfbmFtZScsICdfa2luZCcsICdfZGVmYXVsdCcsICdfYW5ub3RhdGlvbicsICdfcGFydGlhbF9rd2FyZycpCisgICAgX19zbG90c19fID0gKCdfbmFtZScsICdfa2luZCcsICdfZGVmYXVsdCcsICdfYW5ub3RhdGlvbicpCiAKICAgICBQT1NJVElPTkFMX09OTFkgICAgICAgICA9IF9QT1NJVElPTkFMX09OTFkKICAgICBQT1NJVElPTkFMX09SX0tFWVdPUkQgICA9IF9QT1NJVElPTkFMX09SX0tFWVdPUkQKQEAgLTE1MDcsOCArMjEyMyw3IEBACiAKICAgICBlbXB0eSA9IF9lbXB0eQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGtpbmQsICosIGRlZmF1bHQ9X2VtcHR5LCBhbm5vdGF0aW9uPV9lbXB0eSwKLSAgICAgICAgICAgICAgICAgX3BhcnRpYWxfa3dhcmc9RmFsc2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBraW5kLCAqLCBkZWZhdWx0PV9lbXB0eSwgYW5ub3RhdGlvbj1fZW1wdHkpOgogCiAgICAgICAgIGlmIGtpbmQgbm90IGluIChfUE9TSVRJT05BTF9PTkxZLCBfUE9TSVRJT05BTF9PUl9LRVlXT1JELAogICAgICAgICAgICAgICAgICAgICAgICAgX1ZBUl9QT1NJVElPTkFMLCBfS0VZV09SRF9PTkxZLCBfVkFSX0tFWVdPUkQpOgpAQCAtMTUyMiwxOSArMjEzNywxNiBAQAogICAgICAgICBzZWxmLl9kZWZhdWx0ID0gZGVmYXVsdAogICAgICAgICBzZWxmLl9hbm5vdGF0aW9uID0gYW5ub3RhdGlvbgogCi0gICAgICAgIGlmIG5hbWUgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIGtpbmQgIT0gX1BPU0lUSU9OQUxfT05MWToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJOb25lIGlzIG5vdCBhIHZhbGlkIG5hbWUgZm9yIGEgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi1wb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVyIikKLSAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBuYW1lID0gc3RyKG5hbWUpCi0gICAgICAgICAgICBpZiBraW5kICE9IF9QT1NJVElPTkFMX09OTFkgYW5kIG5vdCBuYW1lLmlzaWRlbnRpZmllcigpOgotICAgICAgICAgICAgICAgIG1zZyA9ICd7IXJ9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJy5mb3JtYXQobmFtZSkKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKG1zZykKLSAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCisgICAgICAgIGlmIG5hbWUgaXMgX2VtcHR5OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignbmFtZSBpcyBhIHJlcXVpcmVkIGF0dHJpYnV0ZSBmb3IgUGFyYW1ldGVyJykKIAotICAgICAgICBzZWxmLl9wYXJ0aWFsX2t3YXJnID0gX3BhcnRpYWxfa3dhcmcKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobmFtZSwgc3RyKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBtdXN0IGJlIGEgc3RyLCBub3QgYSB7IXJ9Ii5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgaWYgbm90IG5hbWUuaXNpZGVudGlmaWVyKCk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd7IXJ9IGlzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJy5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBuYW1lKHNlbGYpOgpAQCAtMTU1Miw4ICsyMTY0LDggQEAKICAgICBkZWYga2luZChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX2tpbmQKIAotICAgIGRlZiByZXBsYWNlKHNlbGYsICosIG5hbWU9X3ZvaWQsIGtpbmQ9X3ZvaWQsIGFubm90YXRpb249X3ZvaWQsCi0gICAgICAgICAgICAgICAgZGVmYXVsdD1fdm9pZCwgX3BhcnRpYWxfa3dhcmc9X3ZvaWQpOgorICAgIGRlZiByZXBsYWNlKHNlbGYsICosIG5hbWU9X3ZvaWQsIGtpbmQ9X3ZvaWQsCisgICAgICAgICAgICAgICAgYW5ub3RhdGlvbj1fdm9pZCwgZGVmYXVsdD1fdm9pZCk6CiAgICAgICAgICcnJ0NyZWF0ZXMgYSBjdXN0b21pemVkIGNvcHkgb2YgdGhlIFBhcmFtZXRlci4nJycKIAogICAgICAgICBpZiBuYW1lIGlzIF92b2lkOgpAQCAtMTU2OCwyMCArMjE4MCwxMSBAQAogICAgICAgICBpZiBkZWZhdWx0IGlzIF92b2lkOgogICAgICAgICAgICAgZGVmYXVsdCA9IHNlbGYuX2RlZmF1bHQKIAotICAgICAgICBpZiBfcGFydGlhbF9rd2FyZyBpcyBfdm9pZDoKLSAgICAgICAgICAgIF9wYXJ0aWFsX2t3YXJnID0gc2VsZi5fcGFydGlhbF9rd2FyZwotCi0gICAgICAgIHJldHVybiB0eXBlKHNlbGYpKG5hbWUsIGtpbmQsIGRlZmF1bHQ9ZGVmYXVsdCwgYW5ub3RhdGlvbj1hbm5vdGF0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICBfcGFydGlhbF9rd2FyZz1fcGFydGlhbF9rd2FyZykKKyAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikobmFtZSwga2luZCwgZGVmYXVsdD1kZWZhdWx0LCBhbm5vdGF0aW9uPWFubm90YXRpb24pCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAga2luZCA9IHNlbGYua2luZAotCiAgICAgICAgIGZvcm1hdHRlZCA9IHNlbGYuX25hbWUKLSAgICAgICAgaWYga2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgotICAgICAgICAgICAgaWYgZm9ybWF0dGVkIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZm9ybWF0dGVkID0gJycKLSAgICAgICAgICAgIGZvcm1hdHRlZCA9ICc8e30+Jy5mb3JtYXQoZm9ybWF0dGVkKQogCiAgICAgICAgICMgQWRkIGFubm90YXRpb24gYW5kIGRlZmF1bHQgdmFsdWUKICAgICAgICAgaWYgc2VsZi5fYW5ub3RhdGlvbiBpcyBub3QgX2VtcHR5OgpAQCAtMTYwMywxNSArMjIwNiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkKHNlbGYpLCBzZWxmLm5hbWUpCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIChpc3N1YmNsYXNzKG90aGVyLl9fY2xhc3NfXywgUGFyYW1ldGVyKSBhbmQKLSAgICAgICAgICAgICAgICBzZWxmLl9uYW1lID09IG90aGVyLl9uYW1lIGFuZAorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUGFyYW1ldGVyKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gKHNlbGYuX25hbWUgPT0gb3RoZXIuX25hbWUgYW5kCiAgICAgICAgICAgICAgICAgc2VsZi5fa2luZCA9PSBvdGhlci5fa2luZCBhbmQKICAgICAgICAgICAgICAgICBzZWxmLl9kZWZhdWx0ID09IG90aGVyLl9kZWZhdWx0IGFuZAogICAgICAgICAgICAgICAgIHNlbGYuX2Fubm90YXRpb24gPT0gb3RoZXIuX2Fubm90YXRpb24pCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKLQogCiBjbGFzcyBCb3VuZEFyZ3VtZW50czoKICAgICAnJydSZXN1bHQgb2YgYFNpZ25hdHVyZS5iaW5kYCBjYWxsLiAgSG9sZHMgdGhlIG1hcHBpbmcgb2YgYXJndW1lbnRzCkBAIC0xNjQyLDEyICsyMjQzLDcgQEAKICAgICBkZWYgYXJncyhzZWxmKToKICAgICAgICAgYXJncyA9IFtdCiAgICAgICAgIGZvciBwYXJhbV9uYW1lLCBwYXJhbSBpbiBzZWxmLl9zaWduYXR1cmUucGFyYW1ldGVycy5pdGVtcygpOgotICAgICAgICAgICAgaWYgKHBhcmFtLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS5fcGFydGlhbF9rd2FyZyk6Ci0gICAgICAgICAgICAgICAgIyBLZXl3b3JkIGFyZ3VtZW50cyBtYXBwZWQgYnkgJ2Z1bmN0b29scy5wYXJ0aWFsJwotICAgICAgICAgICAgICAgICMgKFBhcmFtZXRlci5fcGFydGlhbF9rd2FyZyBpcyBUcnVlKSBhcmUgbWFwcGVkCi0gICAgICAgICAgICAgICAgIyBpbiAnQm91bmRBcmd1bWVudHMua3dhcmdzJywgYWxvbmcgd2l0aCBWQVJfS0VZV09SRCAmCi0gICAgICAgICAgICAgICAgIyBLRVlXT1JEX09OTFkKKyAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSk6CiAgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgICAgICAgICAgdHJ5OgpAQCAtMTY3Miw4ICsyMjY4LDcgQEAKICAgICAgICAga3dhcmdzX3N0YXJ0ZWQgPSBGYWxzZQogICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW0gaW4gc2VsZi5fc2lnbmF0dXJlLnBhcmFtZXRlcnMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5vdCBrd2FyZ3Nfc3RhcnRlZDoKLSAgICAgICAgICAgICAgICBpZiAocGFyYW0ua2luZCBpbiAoX1ZBUl9LRVlXT1JELCBfS0VZV09SRF9PTkxZKSBvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uX3BhcnRpYWxfa3dhcmcpOgorICAgICAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgaW4gKF9WQVJfS0VZV09SRCwgX0tFWVdPUkRfT05MWSk6CiAgICAgICAgICAgICAgICAgICAgIGt3YXJnc19zdGFydGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtX25hbWUgbm90IGluIHNlbGYuYXJndW1lbnRzOgpAQCAtMTY5OCwxMyArMjI5MywxMSBAQAogICAgICAgICByZXR1cm4ga3dhcmdzCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIChpc3N1YmNsYXNzKG90aGVyLl9fY2xhc3NfXywgQm91bmRBcmd1bWVudHMpIGFuZAotICAgICAgICAgICAgICAgIHNlbGYuc2lnbmF0dXJlID09IG90aGVyLnNpZ25hdHVyZSBhbmQKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIEJvdW5kQXJndW1lbnRzKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gKHNlbGYuc2lnbmF0dXJlID09IG90aGVyLnNpZ25hdHVyZSBhbmQKICAgICAgICAgICAgICAgICBzZWxmLmFyZ3VtZW50cyA9PSBvdGhlci5hcmd1bWVudHMpCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9fZXFfXyhvdGhlcikKLQogCiBjbGFzcyBTaWduYXR1cmU6CiAgICAgJycnQSBTaWduYXR1cmUgb2JqZWN0IHJlcHJlc2VudHMgdGhlIG92ZXJhbGwgc2lnbmF0dXJlIG9mIGEgZnVuY3Rpb24uCkBAIC0xNzIwLDcgKzIzMTMsNyBAQAogICAgICogcmV0dXJuX2Fubm90YXRpb24gOiBvYmplY3QKICAgICAgICAgVGhlIGFubm90YXRpb24gZm9yIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZnVuY3Rpb24gaWYgc3BlY2lmaWVkLgogICAgICAgICBJZiB0aGUgZnVuY3Rpb24gaGFzIG5vIGFubm90YXRpb24gZm9yIGl0cyByZXR1cm4gdHlwZSwgdGhpcwotICAgICAgICBhdHRyaWJ1dGUgaXMgbm90IHNldC4KKyAgICAgICAgYXR0cmlidXRlIGlzIHNldCB0byBgU2lnbmF0dXJlLmVtcHR5YC4KICAgICAqIGJpbmQoKmFyZ3MsICoqa3dhcmdzKSAtPiBCb3VuZEFyZ3VtZW50cwogICAgICAgICBDcmVhdGVzIGEgbWFwcGluZyBmcm9tIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQgYXJndW1lbnRzIHRvCiAgICAgICAgIHBhcmFtZXRlcnMuCkBAIC0xNzQ4LDI0ICsyMzQxLDM3IEBACiAgICAgICAgICAgICBpZiBfX3ZhbGlkYXRlX3BhcmFtZXRlcnNfXzoKICAgICAgICAgICAgICAgICBwYXJhbXMgPSBPcmRlcmVkRGljdCgpCiAgICAgICAgICAgICAgICAgdG9wX2tpbmQgPSBfUE9TSVRJT05BTF9PTkxZCisgICAgICAgICAgICAgICAga2luZF9kZWZhdWx0cyA9IEZhbHNlCiAKICAgICAgICAgICAgICAgICBmb3IgaWR4LCBwYXJhbSBpbiBlbnVtZXJhdGUocGFyYW1ldGVycyk6CiAgICAgICAgICAgICAgICAgICAgIGtpbmQgPSBwYXJhbS5raW5kCisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBwYXJhbS5uYW1lCisKICAgICAgICAgICAgICAgICAgICAgaWYga2luZCA8IHRvcF9raW5kOgotICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gJ3dyb25nIHBhcmFtZXRlciBvcmRlcjoge30gYmVmb3JlIHt9JwotICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gbXNnLmZvcm1hdCh0b3Bfa2luZCwgcGFyYW0ua2luZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICd3cm9uZyBwYXJhbWV0ZXIgb3JkZXI6IHshcn0gYmVmb3JlIHshcn0nCisgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBtc2cuZm9ybWF0KHRvcF9raW5kLCBraW5kKQogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGVsaWYga2luZCA+IHRvcF9raW5kOgorICAgICAgICAgICAgICAgICAgICAgICAga2luZF9kZWZhdWx0cyA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICB0b3Bfa2luZCA9IGtpbmQKIAotICAgICAgICAgICAgICAgICAgICBuYW1lID0gcGFyYW0ubmFtZQotICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gc3RyKGlkeCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtID0gcGFyYW0ucmVwbGFjZShuYW1lPW5hbWUpCisgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQgaW4gKF9QT1NJVElPTkFMX09OTFksIF9QT1NJVElPTkFMX09SX0tFWVdPUkQpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGFyYW0uZGVmYXVsdCBpcyBfZW1wdHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga2luZF9kZWZhdWx0czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBObyBkZWZhdWx0IGZvciB0aGlzIHBhcmFtZXRlciwgYnV0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHByZXZpb3VzIHBhcmFtZXRlciBvZiB0aGUgc2FtZSBraW5kIGhhZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGEgZGVmYXVsdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSAnbm9uLWRlZmF1bHQgYXJndW1lbnQgZm9sbG93cyBkZWZhdWx0ICcgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJndW1lbnQnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobXNnKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZXJlIGlzIGEgZGVmYXVsdCBmb3IgdGhpcyBwYXJhbWV0ZXIuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZF9kZWZhdWx0cyA9IFRydWUKIAogICAgICAgICAgICAgICAgICAgICBpZiBuYW1lIGluIHBhcmFtczoKICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICdkdXBsaWNhdGUgcGFyYW1ldGVyIG5hbWU6IHshcn0nLmZvcm1hdChuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisKICAgICAgICAgICAgICAgICAgICAgcGFyYW1zW25hbWVdID0gcGFyYW0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcGFyYW1zID0gT3JkZXJlZERpY3QoKChwYXJhbS5uYW1lLCBwYXJhbSkKQEAgLTE3NzgsOCArMjM4NCwxNCBAQAogICAgIGRlZiBmcm9tX2Z1bmN0aW9uKGNscywgZnVuYyk6CiAgICAgICAgICcnJ0NvbnN0cnVjdHMgU2lnbmF0dXJlIGZvciB0aGUgZ2l2ZW4gcHl0aG9uIGZ1bmN0aW9uJycnCiAKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZnVuYywgdHlwZXMuRnVuY3Rpb25UeXBlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nLmZvcm1hdChmdW5jKSkKKyAgICAgICAgaXNfZHVja19mdW5jdGlvbiA9IEZhbHNlCisgICAgICAgIGlmIG5vdCBpc2Z1bmN0aW9uKGZ1bmMpOgorICAgICAgICAgICAgaWYgX3NpZ25hdHVyZV9pc19mdW5jdGlvbmxpa2UoZnVuYyk6CisgICAgICAgICAgICAgICAgaXNfZHVja19mdW5jdGlvbiA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBJZiBpdCdzIG5vdCBhIHB1cmUgUHl0aG9uIGZ1bmN0aW9uLCBhbmQgbm90IGEgZHVjayB0eXBlCisgICAgICAgICAgICAgICAgIyBvZiBwdXJlIGZ1bmN0aW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigneyFyfSBpcyBub3QgYSBQeXRob24gZnVuY3Rpb24nLmZvcm1hdChmdW5jKSkKIAogICAgICAgICBQYXJhbWV0ZXIgPSBjbHMuX3BhcmFtZXRlcl9jbHMKIApAQCAtMTgxNiw3ICsyNDI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWRlZmF1bHRzW29mZnNldF0pKQogCiAgICAgICAgICMgKmFyZ3MKLSAgICAgICAgaWYgZnVuY19jb2RlLmNvX2ZsYWdzICYgMHgwNDoKKyAgICAgICAgaWYgZnVuY19jb2RlLmNvX2ZsYWdzICYgQ09fVkFSQVJHUzoKICAgICAgICAgICAgIG5hbWUgPSBhcmdfbmFtZXNbcG9zX2NvdW50ICsga2V5d29yZF9vbmx5X2NvdW50XQogICAgICAgICAgICAgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zLmdldChuYW1lLCBfZW1wdHkpCiAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChQYXJhbWV0ZXIobmFtZSwgYW5ub3RhdGlvbj1hbm5vdGF0aW9uLApAQCAtMTgzMyw5ICsyNDQ1LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kPV9LRVlXT1JEX09OTFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1kZWZhdWx0KSkKICAgICAgICAgIyAqKmt3YXJncwotICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiAweDA4OgorICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiBDT19WQVJLRVlXT1JEUzoKICAgICAgICAgICAgIGluZGV4ID0gcG9zX2NvdW50ICsga2V5d29yZF9vbmx5X2NvdW50Ci0gICAgICAgICAgICBpZiBmdW5jX2NvZGUuY29fZmxhZ3MgJiAweDA0OgorICAgICAgICAgICAgaWYgZnVuY19jb2RlLmNvX2ZsYWdzICYgQ09fVkFSQVJHUzoKICAgICAgICAgICAgICAgICBpbmRleCArPSAxCiAKICAgICAgICAgICAgIG5hbWUgPSBhcmdfbmFtZXNbaW5kZXhdCkBAIC0xODQzLDkgKzI0NTUsMTUgQEAKICAgICAgICAgICAgIHBhcmFtZXRlcnMuYXBwZW5kKFBhcmFtZXRlcihuYW1lLCBhbm5vdGF0aW9uPWFubm90YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1fVkFSX0tFWVdPUkQpKQogCisgICAgICAgICMgSXMgJ2Z1bmMnIGlzIGEgcHVyZSBQeXRob24gZnVuY3Rpb24gLSBkb24ndCB2YWxpZGF0ZSB0aGUKKyAgICAgICAgIyBwYXJhbWV0ZXJzIGxpc3QgKGZvciBjb3JyZWN0IG9yZGVyIGFuZCBkZWZhdWx0cyksIGl0IHNob3VsZCBiZSBPSy4KICAgICAgICAgcmV0dXJuIGNscyhwYXJhbWV0ZXJzLAogICAgICAgICAgICAgICAgICAgIHJldHVybl9hbm5vdGF0aW9uPWFubm90YXRpb25zLmdldCgncmV0dXJuJywgX2VtcHR5KSwKLSAgICAgICAgICAgICAgICAgICBfX3ZhbGlkYXRlX3BhcmFtZXRlcnNfXz1GYWxzZSkKKyAgICAgICAgICAgICAgICAgICBfX3ZhbGlkYXRlX3BhcmFtZXRlcnNfXz1pc19kdWNrX2Z1bmN0aW9uKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21fYnVpbHRpbihjbHMsIGZ1bmMpOgorICAgICAgICByZXR1cm4gX3NpZ25hdHVyZV9mcm9tX2J1aWx0aW4oY2xzLCBmdW5jKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIHBhcmFtZXRlcnMoc2VsZik6CkBAIC0xODcxLDkgKzI0ODksMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2Fubm90YXRpb249cmV0dXJuX2Fubm90YXRpb24pCiAKICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgaWYgKG5vdCBpc3N1YmNsYXNzKHR5cGUob3RoZXIpLCBTaWduYXR1cmUpIG9yCi0gICAgICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuX2Fubm90YXRpb24gIT0gb3RoZXIucmV0dXJuX2Fubm90YXRpb24gb3IKLSAgICAgICAgICAgICAgICAgICAgbGVuKHNlbGYucGFyYW1ldGVycykgIT0gbGVuKG90aGVyLnBhcmFtZXRlcnMpKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFNpZ25hdHVyZSk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgaWYgKHNlbGYucmV0dXJuX2Fubm90YXRpb24gIT0gb3RoZXIucmV0dXJuX2Fubm90YXRpb24gb3IKKyAgICAgICAgICAgIGxlbihzZWxmLnBhcmFtZXRlcnMpICE9IGxlbihvdGhlci5wYXJhbWV0ZXJzKSk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAogICAgICAgICBvdGhlcl9wb3NpdGlvbnMgPSB7cGFyYW06IGlkeApAQCAtMTkwMCw5ICsyNTE5LDYgQEAKIAogICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZi5fX2VxX18ob3RoZXIpCi0KICAgICBkZWYgX2JpbmQoc2VsZiwgYXJncywga3dhcmdzLCAqLCBwYXJ0aWFsPUZhbHNlKToKICAgICAgICAgJycnUHJpdmF0ZSBtZXRob2QuICBEb24ndCB1c2UgZGlyZWN0bHkuJycnCiAKQEAgLTE5MTIsMTUgKzI1MjgsNiBAQAogICAgICAgICBwYXJhbWV0ZXJzX2V4ID0gKCkKICAgICAgICAgYXJnX3ZhbHMgPSBpdGVyKGFyZ3MpCiAKLSAgICAgICAgaWYgcGFydGlhbDoKLSAgICAgICAgICAgICMgU3VwcG9ydCBmb3IgYmluZGluZyBhcmd1bWVudHMgdG8gJ2Z1bmN0b29scy5wYXJ0aWFsJyBvYmplY3RzLgotICAgICAgICAgICAgIyBTZWUgJ2Z1bmN0b29scy5wYXJ0aWFsJyBjYXNlIGluICdzaWduYXR1cmUoKScgaW1wbGVtZW50YXRpb24KLSAgICAgICAgICAgICMgZm9yIGRldGFpbHMuCi0gICAgICAgICAgICBmb3IgcGFyYW1fbmFtZSwgcGFyYW0gaW4gc2VsZi5wYXJhbWV0ZXJzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgaWYgKHBhcmFtLl9wYXJ0aWFsX2t3YXJnIGFuZCBwYXJhbV9uYW1lIG5vdCBpbiBrd2FyZ3MpOgotICAgICAgICAgICAgICAgICAgICAjIFNpbXVsYXRpbmcgJ2Z1bmN0b29scy5wYXJ0aWFsJyBiZWhhdmlvcgotICAgICAgICAgICAgICAgICAgICBrd2FyZ3NbcGFyYW1fbmFtZV0gPSBwYXJhbS5kZWZhdWx0Ci0KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICMgTGV0J3MgaXRlcmF0ZSB0aHJvdWdoIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhbmQgY29ycmVzcG9uZGluZwogICAgICAgICAgICAgIyBwYXJhbWV0ZXJzCkBAIC0xOTU1LDYgKzI1NjIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyc19leCA9IChwYXJhbSwpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBObyBkZWZhdWx0LCBub3QgVkFSX0tFWVdPUkQsIG5vdCBWQVJfUE9TSVRJT05BTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICMgbm90IGluIGBrd2FyZ3NgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwYXJ0aWFsOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNfZXggPSAocGFyYW0sKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xOTkzLDE5ICsyNjAyLDE3IEBACiAgICAgICAgICMga2V5d29yZCBhcmd1bWVudHMKICAgICAgICAga3dhcmdzX3BhcmFtID0gTm9uZQogICAgICAgICBmb3IgcGFyYW0gaW4gaXRlcnRvb2xzLmNoYWluKHBhcmFtZXRlcnNfZXgsIHBhcmFtZXRlcnMpOgotICAgICAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgotICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIGNhc2Ugb2YgYSBwcm9wZXJseSBidWlsdAotICAgICAgICAgICAgICAgICMgU2lnbmF0dXJlIG9iamVjdCAoYnV0IGxldCdzIGhhdmUgdGhpcyBjaGVjayBoZXJlCi0gICAgICAgICAgICAgICAgIyB0byBlbnN1cmUgY29ycmVjdCBiZWhhdmlvdXIganVzdCBpbiBjYXNlKQotICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigne2FyZyFyfSBwYXJhbWV0ZXIgaXMgcG9zaXRpb25hbCBvbmx5LCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgd2FzIHBhc3NlZCBhcyBhIGtleXdvcmQnLiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChhcmc9cGFyYW0ubmFtZSkpCi0KICAgICAgICAgICAgIGlmIHBhcmFtLmtpbmQgPT0gX1ZBUl9LRVlXT1JEOgogICAgICAgICAgICAgICAgICMgTWVtb3JpemUgdGhhdCB3ZSBoYXZlIGEgJyoqa3dhcmdzJy1saWtlIHBhcmFtZXRlcgogICAgICAgICAgICAgICAgIGt3YXJnc19wYXJhbSA9IHBhcmFtCiAgICAgICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICAgICAgaWYgcGFyYW0ua2luZCA9PSBfVkFSX1BPU0lUSU9OQUw6CisgICAgICAgICAgICAgICAgIyBOYW1lZCBhcmd1bWVudHMgZG9uJ3QgcmVmZXIgdG8gJyphcmdzJy1saWtlIHBhcmFtZXRlcnMuCisgICAgICAgICAgICAgICAgIyBXZSBvbmx5IGFycml2ZSBoZXJlIGlmIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBlbmRlZAorICAgICAgICAgICAgICAgICMgYmVmb3JlIHJlYWNoaW5nIHRoZSBsYXN0IHBhcmFtZXRlciBiZWZvcmUgKmFyZ3MuCisgICAgICAgICAgICAgICAgY29udGludWUKKwogICAgICAgICAgICAgcGFyYW1fbmFtZSA9IHBhcmFtLm5hbWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhcmdfdmFsID0ga3dhcmdzLnBvcChwYXJhbV9uYW1lKQpAQCAtMjAyMCw2ICsyNjI3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQoYXJnPXBhcmFtX25hbWUpKSBmcm9tIE5vbmUKIAogICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBwYXJhbS5raW5kID09IF9QT1NJVElPTkFMX09OTFk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGluIGNhc2Ugb2YgYSBwcm9wZXJseSBidWlsdAorICAgICAgICAgICAgICAgICAgICAjIFNpZ25hdHVyZSBvYmplY3QgKGJ1dCBsZXQncyBoYXZlIHRoaXMgY2hlY2sgaGVyZQorICAgICAgICAgICAgICAgICAgICAjIHRvIGVuc3VyZSBjb3JyZWN0IGJlaGF2aW91ciBqdXN0IGluIGNhc2UpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigne2FyZyFyfSBwYXJhbWV0ZXIgaXMgcG9zaXRpb25hbCBvbmx5LCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0IHdhcyBwYXNzZWQgYXMgYSBrZXl3b3JkJy4gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KGFyZz1wYXJhbS5uYW1lKSkKKwogICAgICAgICAgICAgICAgIGFyZ3VtZW50c1twYXJhbV9uYW1lXSA9IGFyZ192YWwKIAogICAgICAgICBpZiBrd2FyZ3M6CkBAIC0yMDMxLDI3ICsyNjQ2LDM3IEBACiAKICAgICAgICAgcmV0dXJuIHNlbGYuX2JvdW5kX2FyZ3VtZW50c19jbHMoc2VsZiwgYXJndW1lbnRzKQogCi0gICAgZGVmIGJpbmQoX19iaW5kX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgZGVmIGJpbmQoKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgJycnR2V0IGEgQm91bmRBcmd1bWVudHMgb2JqZWN0LCB0aGF0IG1hcHMgdGhlIHBhc3NlZCBgYXJnc2AKICAgICAgICAgYW5kIGBrd2FyZ3NgIHRvIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZS4gIFJhaXNlcyBgVHlwZUVycm9yYAogICAgICAgICBpZiB0aGUgcGFzc2VkIGFyZ3VtZW50cyBjYW4gbm90IGJlIGJvdW5kLgogICAgICAgICAnJycKLSAgICAgICAgcmV0dXJuIF9fYmluZF9zZWxmLl9iaW5kKGFyZ3MsIGt3YXJncykKKyAgICAgICAgcmV0dXJuIGFyZ3NbMF0uX2JpbmQoYXJnc1sxOl0sIGt3YXJncykKIAotICAgIGRlZiBiaW5kX3BhcnRpYWwoX19iaW5kX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgZGVmIGJpbmRfcGFydGlhbCgqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAnJydHZXQgYSBCb3VuZEFyZ3VtZW50cyBvYmplY3QsIHRoYXQgcGFydGlhbGx5IG1hcHMgdGhlCiAgICAgICAgIHBhc3NlZCBgYXJnc2AgYW5kIGBrd2FyZ3NgIHRvIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZS4KICAgICAgICAgUmFpc2VzIGBUeXBlRXJyb3JgIGlmIHRoZSBwYXNzZWQgYXJndW1lbnRzIGNhbiBub3QgYmUgYm91bmQuCiAgICAgICAgICcnJwotICAgICAgICByZXR1cm4gX19iaW5kX3NlbGYuX2JpbmQoYXJncywga3dhcmdzLCBwYXJ0aWFsPVRydWUpCisgICAgICAgIHJldHVybiBhcmdzWzBdLl9iaW5kKGFyZ3NbMTpdLCBrd2FyZ3MsIHBhcnRpYWw9VHJ1ZSkKIAogICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICByZW5kZXJfcG9zX29ubHlfc2VwYXJhdG9yID0gRmFsc2UKICAgICAgICAgcmVuZGVyX2t3X29ubHlfc2VwYXJhdG9yID0gVHJ1ZQotICAgICAgICBmb3IgaWR4LCBwYXJhbSBpbiBlbnVtZXJhdGUoc2VsZi5wYXJhbWV0ZXJzLnZhbHVlcygpKToKKyAgICAgICAgZm9yIHBhcmFtIGluIHNlbGYucGFyYW1ldGVycy52YWx1ZXMoKToKICAgICAgICAgICAgIGZvcm1hdHRlZCA9IHN0cihwYXJhbSkKIAogICAgICAgICAgICAga2luZCA9IHBhcmFtLmtpbmQKKworICAgICAgICAgICAgaWYga2luZCA9PSBfUE9TSVRJT05BTF9PTkxZOgorICAgICAgICAgICAgICAgIHJlbmRlcl9wb3Nfb25seV9zZXBhcmF0b3IgPSBUcnVlCisgICAgICAgICAgICBlbGlmIHJlbmRlcl9wb3Nfb25seV9zZXBhcmF0b3I6CisgICAgICAgICAgICAgICAgIyBJdCdzIG5vdCBhIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXIsIGFuZCB0aGUgZmxhZworICAgICAgICAgICAgICAgICMgaXMgc2V0IHRvICdUcnVlJyAodGhlcmUgd2VyZSBwb3Mtb25seSBwYXJhbXMgYmVmb3JlLikKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcvJykKKyAgICAgICAgICAgICAgICByZW5kZXJfcG9zX29ubHlfc2VwYXJhdG9yID0gRmFsc2UKKwogICAgICAgICAgICAgaWYga2luZCA9PSBfVkFSX1BPU0lUSU9OQUw6CiAgICAgICAgICAgICAgICAgIyBPSywgd2UgaGF2ZSBhbiAnKmFyZ3MnLWxpa2UgcGFyYW1ldGVyLCBzbyB3ZSB3b24ndCBuZWVkCiAgICAgICAgICAgICAgICAgIyBhICcqJyB0byBzZXBhcmF0ZSBrZXl3b3JkLW9ubHkgYXJndW1lbnRzCkBAIC0yMDY3LDYgKzI2OTIsMTEgQEAKIAogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmb3JtYXR0ZWQpCiAKKyAgICAgICAgaWYgcmVuZGVyX3Bvc19vbmx5X3NlcGFyYXRvcjoKKyAgICAgICAgICAgICMgVGhlcmUgd2VyZSBvbmx5IHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCBoZW5jZSB0aGUKKyAgICAgICAgICAgICMgZmxhZyB3YXMgbm90IHJlc2V0IHRvICdGYWxzZScKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJy8nKQorCiAgICAgICAgIHJlbmRlcmVkID0gJyh7fSknLmZvcm1hdCgnLCAnLmpvaW4ocmVzdWx0KSkKIAogICAgICAgICBpZiBzZWxmLnJldHVybl9hbm5vdGF0aW9uIGlzIG5vdCBfZW1wdHk6CkBAIC0yMDc0LDMgKzI3MDQsNjQgQEAKICAgICAgICAgICAgIHJlbmRlcmVkICs9ICcgLT4ge30nLmZvcm1hdChhbm5vKQogCiAgICAgICAgIHJldHVybiByZW5kZXJlZAorCitkZWYgX21haW4oKToKKyAgICAiIiIgTG9naWMgZm9yIGluc3BlY3RpbmcgYW4gb2JqZWN0IGdpdmVuIGF0IGNvbW1hbmQgbGluZSAiIiIKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBpbXBvcnQgaW1wb3J0bGliCisKKyAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgKKyAgICAgICAgJ29iamVjdCcsCisgICAgICAgICBoZWxwPSJUaGUgb2JqZWN0IHRvIGJlIGFuYWx5c2VkLiAiCisgICAgICAgICAgICAgICJJdCBzdXBwb3J0cyB0aGUgJ21vZHVsZTpxdWFsbmFtZScgc3ludGF4IikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAorICAgICAgICAnLWQnLCAnLS1kZXRhaWxzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgaGVscD0nRGlzcGxheSBpbmZvIGFib3V0IHRoZSBtb2R1bGUgcmF0aGVyIHRoYW4gaXRzIHNvdXJjZSBjb2RlJykKKworICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICB0YXJnZXQgPSBhcmdzLm9iamVjdAorICAgIG1vZF9uYW1lLCBoYXNfYXR0cnMsIGF0dHJzID0gdGFyZ2V0LnBhcnRpdGlvbigiOiIpCisgICAgdHJ5OgorICAgICAgICBvYmogPSBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShtb2RfbmFtZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgbXNnID0gIkZhaWxlZCB0byBpbXBvcnQge30gKHt9OiB7fSkiLmZvcm1hdChtb2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlKGV4YykuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjKQorICAgICAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZXhpdCgyKQorCisgICAgaWYgaGFzX2F0dHJzOgorICAgICAgICBwYXJ0cyA9IGF0dHJzLnNwbGl0KCIuIikKKyAgICAgICAgb2JqID0gbW9kdWxlCisgICAgICAgIGZvciBwYXJ0IGluIHBhcnRzOgorICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIHBhcnQpCisKKyAgICBpZiBtb2R1bGUuX19uYW1lX18gaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICBwcmludCgiQ2FuJ3QgZ2V0IGluZm8gZm9yIGJ1aWx0aW4gbW9kdWxlcy4iLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgIGV4aXQoMSkKKworICAgIGlmIGFyZ3MuZGV0YWlsczoKKyAgICAgICAgcHJpbnQoJ1RhcmdldDoge30nLmZvcm1hdCh0YXJnZXQpKQorICAgICAgICBwcmludCgnT3JpZ2luOiB7fScuZm9ybWF0KGdldHNvdXJjZWZpbGUobW9kdWxlKSkpCisgICAgICAgIHByaW50KCdDYWNoZWQ6IHt9Jy5mb3JtYXQobW9kdWxlLl9fY2FjaGVkX18pKQorICAgICAgICBpZiBvYmogaXMgbW9kdWxlOgorICAgICAgICAgICAgcHJpbnQoJ0xvYWRlcjoge30nLmZvcm1hdChyZXByKG1vZHVsZS5fX2xvYWRlcl9fKSkpCisgICAgICAgICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJyk6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1N1Ym1vZHVsZSBzZWFyY2ggcGF0aDoge30nLmZvcm1hdChtb2R1bGUuX19wYXRoX18pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIF9fLCBsaW5lbm8gPSBmaW5kc291cmNlKG9iaikKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwcmludCgnTGluZToge30nLmZvcm1hdChsaW5lbm8pKQorCisgICAgICAgIHByaW50KCdcbicpCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoZ2V0c291cmNlKG9iaikpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvaW8ucHkgYi9MaWIvaW8ucHkKaW5kZXggYmRhNGRlZi4uZTAzZGI5NyAxMDA2NDQKLS0tIGEvTGliL2lvLnB5CisrKyBiL0xpYi9pby5weQpAQCAtNCw3ICs0LDcgQEAKIEF0IHRoZSB0b3Agb2YgdGhlIEkvTyBoaWVyYXJjaHkgaXMgdGhlIGFic3RyYWN0IGJhc2UgY2xhc3MgSU9CYXNlLiBJdAogZGVmaW5lcyB0aGUgYmFzaWMgaW50ZXJmYWNlIHRvIGEgc3RyZWFtLiBOb3RlLCBob3dldmVyLCB0aGF0IHRoZXJlIGlzIG5vCiBzZXBhcmF0aW9uIGJldHdlZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBzdHJlYW1zOyBpbXBsZW1lbnRhdGlvbnMgYXJlCi1hbGxvd2VkIHRvIHJhaXNlIGFuIElPRXJyb3IgaWYgdGhleSBkbyBub3Qgc3VwcG9ydCBhIGdpdmVuIG9wZXJhdGlvbi4KK2FsbG93ZWQgdG8gcmFpc2UgYW4gT1NFcnJvciBpZiB0aGV5IGRvIG5vdCBzdXBwb3J0IGEgZ2l2ZW4gb3BlcmF0aW9uLgogCiBFeHRlbmRpbmcgSU9CYXNlIGlzIFJhd0lPQmFzZSB3aGljaCBkZWFscyBzaW1wbHkgd2l0aCB0aGUgcmVhZGluZyBhbmQKIHdyaXRpbmcgb2YgcmF3IGJ5dGVzIHRvIGEgc3RyZWFtLiBGaWxlSU8gc3ViY2xhc3NlcyBSYXdJT0Jhc2UgdG8gcHJvdmlkZQpAQCAtMTksNyArMTksNyBAQAogQW5vdGhlciBJT0Jhc2Ugc3ViY2xhc3MsIFRleHRJT0Jhc2UsIGRlYWxzIHdpdGggdGhlIGVuY29kaW5nIGFuZCBkZWNvZGluZwogb2Ygc3RyZWFtcyBpbnRvIHRleHQuIFRleHRJT1dyYXBwZXIsIHdoaWNoIGV4dGVuZHMgaXQsIGlzIGEgYnVmZmVyZWQgdGV4dAogaW50ZXJmYWNlIHRvIGEgYnVmZmVyZWQgcmF3IHN0cmVhbSAoYEJ1ZmZlcmVkSU9CYXNlYCkuIEZpbmFsbHksIFN0cmluZ0lPCi1pcyBhIGluLW1lbW9yeSBzdHJlYW0gZm9yIHRleHQuCitpcyBhbiBpbi1tZW1vcnkgc3RyZWFtIGZvciB0ZXh0LgogCiBBcmd1bWVudCBuYW1lcyBhcmUgbm90IHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24sIGFuZCBvbmx5IHRoZSBhcmd1bWVudHMKIG9mIG9wZW4oKSBhcmUgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KQEAgLTcwLDE2ICs3MCwxNiBAQAogIyBNZXRob2QgZGVzY3JpcHRpb25zIGFuZCBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBhcmUgaW5oZXJpdGVkIGZyb20gdGhlIEMKICMgdmVyc2lvbiBob3dldmVyLgogY2xhc3MgSU9CYXNlKF9pby5fSU9CYXNlLCBtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgotICAgIHBhc3MKKyAgICBfX2RvY19fID0gX2lvLl9JT0Jhc2UuX19kb2NfXwogCiBjbGFzcyBSYXdJT0Jhc2UoX2lvLl9SYXdJT0Jhc2UsIElPQmFzZSk6Ci0gICAgcGFzcworICAgIF9fZG9jX18gPSBfaW8uX1Jhd0lPQmFzZS5fX2RvY19fCiAKIGNsYXNzIEJ1ZmZlcmVkSU9CYXNlKF9pby5fQnVmZmVyZWRJT0Jhc2UsIElPQmFzZSk6Ci0gICAgcGFzcworICAgIF9fZG9jX18gPSBfaW8uX0J1ZmZlcmVkSU9CYXNlLl9fZG9jX18KIAogY2xhc3MgVGV4dElPQmFzZShfaW8uX1RleHRJT0Jhc2UsIElPQmFzZSk6Ci0gICAgcGFzcworICAgIF9fZG9jX18gPSBfaW8uX1RleHRJT0Jhc2UuX19kb2NfXwogCiBSYXdJT0Jhc2UucmVnaXN0ZXIoRmlsZUlPKQogCmRpZmYgLS1naXQgYS9MaWIvaXBhZGRyZXNzLnB5IGIvTGliL2lwYWRkcmVzcy5weQppbmRleCBlY2YzZjQ0Li5hYzAzYzM2IDEwMDY0NAotLS0gYS9MaWIvaXBhZGRyZXNzLnB5CisrKyBiL0xpYi9pcGFkZHJlc3MucHkKQEAgLTM4OCw0MCArMzg4LDcgQEAKICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogCi1jbGFzcyBfVG90YWxPcmRlcmluZ01peGluOgotICAgICMgSGVscGVyIHRoYXQgZGVyaXZlcyB0aGUgb3RoZXIgY29tcGFyaXNvbiBvcGVyYXRpb25zIGZyb20KLSAgICAjIF9fbHRfXyBhbmQgX19lcV9fCi0gICAgIyBXZSBhdm9pZCBmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcgYmVjYXVzZSBpdCBkb2Vzbid0IGhhbmRsZQotICAgICMgTm90SW1wbGVtZW50ZWQgY29ycmVjdGx5IHlldCAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEwMDQyKQotICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgotICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGVxdWFsID0gc2VsZi5fX2VxX18ob3RoZXIpCi0gICAgICAgIGlmIGVxdWFsIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBub3QgZXF1YWwKLSAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcgotICAgIGRlZiBfX2xlX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBsZXNzID0gc2VsZi5fX2x0X18ob3RoZXIpCi0gICAgICAgIGlmIGxlc3MgaXMgTm90SW1wbGVtZW50ZWQgb3Igbm90IGxlc3M6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5fX2VxX18ob3RoZXIpCi0gICAgICAgIHJldHVybiBsZXNzCi0gICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIGxlc3MgPSBzZWxmLl9fbHRfXyhvdGhlcikKLSAgICAgICAgaWYgbGVzcyBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICBlcXVhbCA9IHNlbGYuX19lcV9fKG90aGVyKQotICAgICAgICBpZiBlcXVhbCBpcyBOb3RJbXBsZW1lbnRlZDoKLSAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAotICAgICAgICByZXR1cm4gbm90IChsZXNzIG9yIGVxdWFsKQotICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgotICAgICAgICBsZXNzID0gc2VsZi5fX2x0X18ob3RoZXIpCi0gICAgICAgIGlmIGxlc3MgaXMgTm90SW1wbGVtZW50ZWQ6Ci0gICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKLSAgICAgICAgcmV0dXJuIG5vdCBsZXNzCi0KLWNsYXNzIF9JUEFkZHJlc3NCYXNlKF9Ub3RhbE9yZGVyaW5nTWl4aW4pOgorY2xhc3MgX0lQQWRkcmVzc0Jhc2U6CiAKICAgICAiIiJUaGUgbW90aGVyIGNsYXNzLiIiIgogCkBAIC00NzIsNyArNDM5LDcgQEAKICAgICAgICAgIiIiUmV0dXJuIHByZWZpeCBsZW5ndGggZnJvbSB0aGUgYml0d2lzZSBuZXRtYXNrLgogCiAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBpcF9pbnQ6IEFuIGludGVnZXIsIHRoZSBuZXRtYXNrIGluIGF4cGFuZGVkIGJpdHdpc2UgZm9ybWF0CisgICAgICAgICAgICBpcF9pbnQ6IEFuIGludGVnZXIsIHRoZSBuZXRtYXNrIGluIGV4cGFuZGVkIGJpdHdpc2UgZm9ybWF0CiAKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgIEFuIGludGVnZXIsIHRoZSBwcmVmaXggbGVuZ3RoLgpAQCAtNTU0LDYgKzUyMSw3IEBACiAgICAgICAgICAgICBzZWxmLl9yZXBvcnRfaW52YWxpZF9uZXRtYXNrKGlwX3N0cikKIAogCitAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCiBjbGFzcyBfQmFzZUFkZHJlc3MoX0lQQWRkcmVzc0Jhc2UpOgogCiAgICAgIiIiQSBnZW5lcmljIElQIG9iamVjdC4KQEAgLTU3OCwxMiArNTQ2LDExIEBACiAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKIAogICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgX0Jhc2VBZGRyZXNzKToKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogICAgICAgICBpZiBzZWxmLl92ZXJzaW9uICE9IG90aGVyLl92ZXJzaW9uOgogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclcyBhbmQgJXMgYXJlIG5vdCBvZiB0aGUgc2FtZSB2ZXJzaW9uJyAlICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwgb3RoZXIpKQotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgX0Jhc2VBZGRyZXNzKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMgYW5kICVzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdHlwZScgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIG90aGVyKSkKICAgICAgICAgaWYgc2VsZi5faXAgIT0gb3RoZXIuX2lwOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lwIDwgb3RoZXIuX2lwCiAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtNjEzLDYgKzU4MCw3IEBACiAgICAgICAgIHJldHVybiAoc2VsZi5fdmVyc2lvbiwgc2VsZikKIAogCitAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCiBjbGFzcyBfQmFzZU5ldHdvcmsoX0lQQWRkcmVzc0Jhc2UpOgogCiAgICAgIiIiQSBnZW5lcmljIElQIG5ldHdvcmsgb2JqZWN0LgpAQCAtNjYyLDEyICs2MzAsMTEgQEAKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9hZGRyZXNzX2NsYXNzKGJyb2FkY2FzdCArIG4pCiAKICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIF9CYXNlTmV0d29yayk6CisgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICAgICAgaWYgc2VsZi5fdmVyc2lvbiAhPSBvdGhlci5fdmVyc2lvbjoKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignJXMgYW5kICVzIGFyZSBub3Qgb2YgdGhlIHNhbWUgdmVyc2lvbicgJSAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIG90aGVyKSkKLSAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIF9CYXNlTmV0d29yayk6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJyVzIGFuZCAlcyBhcmUgbm90IG9mIHRoZSBzYW1lIHR5cGUnICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLCBvdGhlcikpCiAgICAgICAgIGlmIHNlbGYubmV0d29ya19hZGRyZXNzICE9IG90aGVyLm5ldHdvcmtfYWRkcmVzczoKICAgICAgICAgICAgIHJldHVybiBzZWxmLm5ldHdvcmtfYWRkcmVzcyA8IG90aGVyLm5ldHdvcmtfYWRkcmVzcwogICAgICAgICBpZiBzZWxmLm5ldG1hc2sgIT0gb3RoZXIubmV0bWFzazoKQEAgLTEwMzAsMTMgKzk5NywyNSBAQAogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDQxOTMuCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeSBvciBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIChzZWxmLm5ldHdvcmtfYWRkcmVzcy5pc19wcml2YXRlIGFuZAogICAgICAgICAgICAgICAgIHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MuaXNfcHJpdmF0ZSkKIAogICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19nbG9iYWwoc2VsZik6CisgICAgICAgICIiIlRlc3QgaWYgdGhpcyBhZGRyZXNzIGlzIGFsbG9jYXRlZCBmb3IgcHVibGljIG5ldHdvcmtzLgorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgbm90IHJlc2VydmVkIHBlcgorICAgICAgICAgICAgaWFuYS1pcHY0LXNwZWNpYWwtcmVnaXN0cnkgb3IgaWFuYS1pcHY2LXNwZWNpYWwtcmVnaXN0cnkuCisKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5pc19wcml2YXRlCisKKyAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfdW5zcGVjaWZpZWQoc2VsZik6CiAgICAgICAgICIiIlRlc3QgaWYgdGhlIGFkZHJlc3MgaXMgdW5zcGVjaWZpZWQuCiAKQEAgLTEyNzYsMTkgKzEyNTUsMzAgQEAKICAgICAgICAgcmV0dXJuIHNlbGYgaW4gcmVzZXJ2ZWRfbmV0d29yawogCiAgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQogICAgIGRlZiBpc19wcml2YXRlKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDE5MTguCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjQtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKLSAgICAgICAgcHJpdmF0ZV8xMCA9IElQdjROZXR3b3JrKCcxMC4wLjAuMC84JykKLSAgICAgICAgcHJpdmF0ZV8xNzIgPSBJUHY0TmV0d29yaygnMTcyLjE2LjAuMC8xMicpCi0gICAgICAgIHByaXZhdGVfMTkyID0gSVB2NE5ldHdvcmsoJzE5Mi4xNjguMC4wLzE2JykKLSAgICAgICAgcmV0dXJuIChzZWxmIGluIHByaXZhdGVfMTAgb3IKLSAgICAgICAgICAgICAgICBzZWxmIGluIHByaXZhdGVfMTcyIG9yCi0gICAgICAgICAgICAgICAgc2VsZiBpbiBwcml2YXRlXzE5MikKKyAgICAgICAgcmV0dXJuIChzZWxmIGluIElQdjROZXR3b3JrKCcwLjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzEwLjAuMC4wLzgnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzEyNy4wLjAuMC84Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxNjkuMjU0LjAuMC8xNicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTcyLjE2LjAuMC8xMicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMC4wLzI5Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMC4wLjE3MC8zMScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTkyLjAuMi4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcxOTIuMTY4LjAuMC8xNicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTk4LjE4LjAuMC8xNScpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMTk4LjUxLjEwMC4wLzI0Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjROZXR3b3JrKCcyMDMuMC4xMTMuMC8yNCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY0TmV0d29yaygnMjQwLjAuMC4wLzQnKSBvcgorICAgICAgICAgICAgICAgIHNlbGYgaW4gSVB2NE5ldHdvcmsoJzI1NS4yNTUuMjU1LjI1NS8zMicpKQorCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgaXNfbXVsdGljYXN0KHNlbGYpOgpAQCAtMTUwNCw2ICsxNDk0LDIxIEBACiAgICAgICAgIGlmIHNlbGYuX3ByZWZpeGxlbiA9PSAoc2VsZi5fbWF4X3ByZWZpeGxlbiAtIDEpOgogICAgICAgICAgICAgc2VsZi5ob3N0cyA9IHNlbGYuX19pdGVyX18KIAorICAgIEBwcm9wZXJ0eQorICAgIEBmdW5jdG9vbHMubHJ1X2NhY2hlKCkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCBUcnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2NC1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gKG5vdCAoc2VsZi5uZXR3b3JrX2FkZHJlc3MgaW4gSVB2NE5ldHdvcmsoJzEwMC42NC4wLjAvMTAnKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5icm9hZGNhc3RfYWRkcmVzcyBpbiBJUHY0TmV0d29yaygnMTAwLjY0LjAuMC8xMCcpKSBhbmQKKyAgICAgICAgICAgICAgICBub3Qgc2VsZi5pc19wcml2YXRlKQorCisKIAogY2xhc3MgX0Jhc2VWNjoKIApAQCAtMTg2MCwxNSArMTg2NSwzNiBAQAogICAgICAgICByZXR1cm4gc2VsZiBpbiBzaXRlbG9jYWxfbmV0d29yawogCiAgICAgQHByb3BlcnR5CisgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQogICAgIGRlZiBpc19wcml2YXRlKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHByaXZhdGUgbmV0d29ya3MuCiAKICAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEEgYm9vbGVhbiwgVHJ1ZSBpZiB0aGUgYWRkcmVzcyBpcyByZXNlcnZlZCBwZXIgUkZDIDQxOTMuCisgICAgICAgICAgICBBIGJvb2xlYW4sIFRydWUgaWYgdGhlIGFkZHJlc3MgaXMgcmVzZXJ2ZWQgcGVyCisgICAgICAgICAgICBpYW5hLWlwdjYtc3BlY2lhbC1yZWdpc3RyeS4KIAogICAgICAgICAiIiIKLSAgICAgICAgcHJpdmF0ZV9uZXR3b3JrID0gSVB2Nk5ldHdvcmsoJ2ZjMDA6Oi83JykKLSAgICAgICAgcmV0dXJuIHNlbGYgaW4gcHJpdmF0ZV9uZXR3b3JrCisgICAgICAgIHJldHVybiAoc2VsZiBpbiBJUHY2TmV0d29yaygnOjoxLzEyOCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnOjovMTI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCc6OmZmZmY6MDowLzk2Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcxMDA6Oi82NCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMTo6LzIzJykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCcyMDAxOjI6Oi80OCcpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMTpkYjg6Oi8zMicpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnMjAwMToxMDo6LzI4Jykgb3IKKyAgICAgICAgICAgICAgICBzZWxmIGluIElQdjZOZXR3b3JrKCdmYzAwOjovNycpIG9yCisgICAgICAgICAgICAgICAgc2VsZiBpbiBJUHY2TmV0d29yaygnZmU4MDo6LzEwJykpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaXNfZ2xvYmFsKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGlmIHRoaXMgYWRkcmVzcyBpcyBhbGxvY2F0ZWQgZm9yIHB1YmxpYyBuZXR3b3Jrcy4KKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgQSBib29sZWFuLCB0cnVlIGlmIHRoZSBhZGRyZXNzIGlzIG5vdCByZXNlcnZlZCBwZXIKKyAgICAgICAgICAgIGlhbmEtaXB2Ni1zcGVjaWFsLXJlZ2lzdHJ5LgorCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gbm90IHNlbGYuaXNfcHJpdmF0ZQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGlzX3Vuc3BlY2lmaWVkKHNlbGYpOgpAQCAtMjA5Niw2ICsyMTIyLDE4IEBACiAgICAgICAgIGlmIHNlbGYuX3ByZWZpeGxlbiA9PSAoc2VsZi5fbWF4X3ByZWZpeGxlbiAtIDEpOgogICAgICAgICAgICAgc2VsZi5ob3N0cyA9IHNlbGYuX19pdGVyX18KIAorICAgIGRlZiBob3N0cyhzZWxmKToKKyAgICAgICAgIiIiR2VuZXJhdGUgSXRlcmF0b3Igb3ZlciB1c2FibGUgaG9zdHMgaW4gYSBuZXR3b3JrLgorCisgICAgICAgICAgVGhpcyBpcyBsaWtlIF9faXRlcl9fIGV4Y2VwdCBpdCBkb2Vzbid0IHJldHVybiB0aGUKKyAgICAgICAgICBTdWJuZXQtUm91dGVyIGFueWNhc3QgYWRkcmVzcy4KKworICAgICAgICAiIiIKKyAgICAgICAgbmV0d29yayA9IGludChzZWxmLm5ldHdvcmtfYWRkcmVzcykKKyAgICAgICAgYnJvYWRjYXN0ID0gaW50KHNlbGYuYnJvYWRjYXN0X2FkZHJlc3MpCisgICAgICAgIGZvciB4IGluIHJhbmdlKG5ldHdvcmsgKyAxLCBicm9hZGNhc3QgKyAxKToKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX2FkZHJlc3NfY2xhc3MoeCkKKwogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBpc19zaXRlX2xvY2FsKHNlbGYpOgogICAgICAgICAiIiJUZXN0IGlmIHRoZSBhZGRyZXNzIGlzIHJlc2VydmVkIGZvciBzaXRlLWxvY2FsLgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vX19pbml0X18ucHkgYi9MaWIvanNvbi9fX2luaXRfXy5weQppbmRleCA2ZDliMzBkLi45Mzk4NjY3IDEwMDY0NAotLS0gYS9MaWIvanNvbi9fX2luaXRfXy5weQorKysgYi9MaWIvanNvbi9fX2luaXRfXy5weQpAQCAtMzYsOCArMzYsNyBAQAogUHJldHR5IHByaW50aW5nOjoKIAogICAgID4+PiBpbXBvcnQganNvbgotICAgID4+PiBwcmludChqc29uLmR1bXBzKHsnNCc6IDUsICc2JzogN30sIHNvcnRfa2V5cz1UcnVlLAotICAgIC4uLiAgICAgICAgICAgICAgICAgIGluZGVudD00LCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKSkKKyAgICA+Pj4gcHJpbnQoanNvbi5kdW1wcyh7JzQnOiA1LCAnNic6IDd9LCBzb3J0X2tleXM9VHJ1ZSwgaW5kZW50PTQpKQogICAgIHsKICAgICAgICAgIjQiOiA1LAogICAgICAgICAiNiI6IDcKQEAgLTE0MywxMyArMTQyLDEyIEBACiAgICAgSWYgYGBpbmRlbnRgYCBpcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLCB0aGVuIEpTT04gYXJyYXkgZWxlbWVudHMgYW5kCiAgICAgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQgaW5kZW50IGxldmVsLiBBbiBpbmRlbnQKICAgICBsZXZlbCBvZiAwIHdpbGwgb25seSBpbnNlcnQgbmV3bGluZXMuIGBgTm9uZWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QKLSAgICByZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoZSBkZWZhdWx0IGl0ZW0gc2VwYXJhdG9yIGlzIGBgJywgJ2BgLCAgdGhlCi0gICAgb3V0cHV0IG1pZ2h0IGluY2x1ZGUgdHJhaWxpbmcgd2hpdGVzcGFjZSB3aGVuIGBgaW5kZW50YGAgaXMgc3BlY2lmaWVkLgotICAgIFlvdSBjYW4gdXNlIGBgc2VwYXJhdG9ycz0oJywnLCAnOiAnKWBgIHRvIGF2b2lkIHRoaXMuCisgICAgcmVwcmVzZW50YXRpb24uCiAKLSAgICBJZiBgYHNlcGFyYXRvcnNgYCBpcyBhbiBgYChpdGVtX3NlcGFyYXRvciwgZGljdF9zZXBhcmF0b3IpYGAgdHVwbGUKLSAgICB0aGVuIGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IGBgKCcsICcsICc6ICcpYGAgc2VwYXJhdG9ycy4KLSAgICBgYCgnLCcsICc6JylgYCBpcyB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24uCisgICAgSWYgc3BlY2lmaWVkLCBgYHNlcGFyYXRvcnNgYCBzaG91bGQgYmUgYW4gYGAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpYGAKKyAgICB0dXBsZS4gIFRoZSBkZWZhdWx0IGlzIGBgKCcsICcsICc6ICcpYGAgaWYgKmluZGVudCogaXMgYGBOb25lYGAgYW5kCisgICAgYGAoJywnLCAnOiAnKWBgIG90aGVyd2lzZS4gIFRvIGdldCB0aGUgbW9zdCBjb21wYWN0IEpTT04gcmVwcmVzZW50YXRpb24sCisgICAgeW91IHNob3VsZCBzcGVjaWZ5IGBgKCcsJywgJzonKWBgIHRvIGVsaW1pbmF0ZSB3aGl0ZXNwYWNlLgogCiAgICAgYGBkZWZhdWx0KG9iailgYCBpcyBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHJldHVybiBhIHNlcmlhbGl6YWJsZSB2ZXJzaW9uCiAgICAgb2Ygb2JqIG9yIHJhaXNlIFR5cGVFcnJvci4gVGhlIGRlZmF1bHQgc2ltcGx5IHJhaXNlcyBUeXBlRXJyb3IuCkBAIC0xODYsNyArMTg0LDcgQEAKICAgICAgICAgZGVmYXVsdD1Ob25lLCBzb3J0X2tleXM9RmFsc2UsICoqa3cpOgogICAgICIiIlNlcmlhbGl6ZSBgYG9iamBgIHRvIGEgSlNPTiBmb3JtYXR0ZWQgYGBzdHJgYC4KIAotICAgIElmIGBgc2tpcGtleXNgYCBpcyBmYWxzZSB0aGVuIGBgZGljdGBgIGtleXMgdGhhdCBhcmUgbm90IGJhc2ljIHR5cGVzCisgICAgSWYgYGBza2lwa2V5c2BgIGlzIHRydWUgdGhlbiBgYGRpY3RgYCBrZXlzIHRoYXQgYXJlIG5vdCBiYXNpYyB0eXBlcwogICAgIChgYHN0cmBgLCBgYGludGBgLCBgYGZsb2F0YGAsIGBgYm9vbGBgLCBgYE5vbmVgYCkgd2lsbCBiZSBza2lwcGVkCiAgICAgaW5zdGVhZCBvZiByYWlzaW5nIGEgYGBUeXBlRXJyb3JgYC4KIApAQCAtMjA2LDEzICsyMDQsMTIgQEAKICAgICBJZiBgYGluZGVudGBgIGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheSBlbGVtZW50cyBhbmQKICAgICBvYmplY3QgbWVtYmVycyB3aWxsIGJlIHByZXR0eS1wcmludGVkIHdpdGggdGhhdCBpbmRlbnQgbGV2ZWwuIEFuIGluZGVudAogICAgIGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4gYGBOb25lYGAgaXMgdGhlIG1vc3QgY29tcGFjdAotICAgIHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQgaXRlbSBzZXBhcmF0b3IgaXMgYGAnLCAnYGAsICB0aGUKLSAgICBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZyB3aGl0ZXNwYWNlIHdoZW4gYGBpbmRlbnRgYCBpcyBzcGVjaWZpZWQuCi0gICAgWW91IGNhbiB1c2UgYGBzZXBhcmF0b3JzPSgnLCcsICc6ICcpYGAgdG8gYXZvaWQgdGhpcy4KKyAgICByZXByZXNlbnRhdGlvbi4KIAotICAgIElmIGBgc2VwYXJhdG9yc2BgIGlzIGFuIGBgKGl0ZW1fc2VwYXJhdG9yLCBkaWN0X3NlcGFyYXRvcilgYCB0dXBsZQotICAgIHRoZW4gaXQgd2lsbCBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgYGAoJywgJywgJzogJylgYCBzZXBhcmF0b3JzLgotICAgIGBgKCcsJywgJzonKWBgIGlzIHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbi4KKyAgICBJZiBzcGVjaWZpZWQsIGBgc2VwYXJhdG9yc2BgIHNob3VsZCBiZSBhbiBgYChpdGVtX3NlcGFyYXRvciwga2V5X3NlcGFyYXRvcilgYAorICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgYGAoJywgJywgJzogJylgYCBpZiAqaW5kZW50KiBpcyBgYE5vbmVgYCBhbmQKKyAgICBgYCgnLCcsICc6ICcpYGAgb3RoZXJ3aXNlLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTiByZXByZXNlbnRhdGlvbiwKKyAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgYGAoJywnLCAnOicpYGAgdG8gZWxpbWluYXRlIHdoaXRlc3BhY2UuCiAKICAgICBgYGRlZmF1bHQob2JqKWBgIGlzIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgcmV0dXJuIGEgc2VyaWFsaXphYmxlIHZlcnNpb24KICAgICBvZiBvYmogb3IgcmFpc2UgVHlwZUVycm9yLiBUaGUgZGVmYXVsdCBzaW1wbHkgcmFpc2VzIFR5cGVFcnJvci4KQEAgLTMxMCw2ICszMDcsMTEgQEAKICAgICBUaGUgYGBlbmNvZGluZ2BgIGFyZ3VtZW50IGlzIGlnbm9yZWQgYW5kIGRlcHJlY2F0ZWQuCiAKICAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzLCBzdHIpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3RoZSBKU09OIG9iamVjdCBtdXN0IGJlIHN0ciwgbm90IHshcn0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLl9fY2xhc3NfXy5fX25hbWVfXykpCisgICAgaWYgcy5zdGFydHN3aXRoKHUnXHVmZWZmJyk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuZXhwZWN0ZWQgVVRGLTggQk9NIChkZWNvZGUgdXNpbmcgdXRmLTgtc2lnKSIpCiAgICAgaWYgKGNscyBpcyBOb25lIGFuZCBvYmplY3RfaG9vayBpcyBOb25lIGFuZAogICAgICAgICAgICAgcGFyc2VfaW50IGlzIE5vbmUgYW5kIHBhcnNlX2Zsb2F0IGlzIE5vbmUgYW5kCiAgICAgICAgICAgICBwYXJzZV9jb25zdGFudCBpcyBOb25lIGFuZCBvYmplY3RfcGFpcnNfaG9vayBpcyBOb25lIGFuZCBub3Qga3cpOgpkaWZmIC0tZ2l0IGEvTGliL2pzb24vZGVjb2Rlci5weSBiL0xpYi9qc29uL2RlY29kZXIucHkKaW5kZXggODBkMzQyMC4uNTllNWY0MSAxMDA2NDQKLS0tIGEvTGliL2pzb24vZGVjb2Rlci5weQorKysgYi9MaWIvanNvbi9kZWNvZGVyLnB5CkBAIC0xLDkgKzEsNiBAQAogIiIiSW1wbGVtZW50YXRpb24gb2YgSlNPTkRlY29kZXIKICIiIgotaW1wb3J0IGJpbmFzY2lpCiBpbXBvcnQgcmUKLWltcG9ydCBzeXMKLWltcG9ydCBzdHJ1Y3QKIAogZnJvbSBqc29uIGltcG9ydCBzY2FubmVyCiB0cnk6CkBAIC0xNSwxNCArMTIsOSBAQAogCiBGTEFHUyA9IHJlLlZFUkJPU0UgfCByZS5NVUxUSUxJTkUgfCByZS5ET1RBTEwKIAotZGVmIF9mbG9hdGNvbnN0YW50cygpOgotICAgIF9CWVRFUyA9IGJpbmFzY2lpLnVuaGV4bGlmeShiJzdGRjgwMDAwMDAwMDAwMDA3RkYwMDAwMDAwMDAwMDAwJykKLSAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBfQllURVMgPSBfQllURVNbOjhdWzo6LTFdICsgX0JZVEVTWzg6XVs6Oi0xXQotICAgIG5hbiwgaW5mID0gc3RydWN0LnVucGFjaygnZGQnLCBfQllURVMpCi0gICAgcmV0dXJuIG5hbiwgaW5mLCAtaW5mCi0KLU5hTiwgUG9zSW5mLCBOZWdJbmYgPSBfZmxvYXRjb25zdGFudHMoKQorTmFOID0gZmxvYXQoJ25hbicpCitQb3NJbmYgPSBmbG9hdCgnaW5mJykKK05lZ0luZiA9IGZsb2F0KCctaW5mJykKIAogCiBkZWYgbGluZWNvbChkb2MsIHBvcyk6CkBAIC0xOTUsOCArMTg3LDggQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB2YWx1ZSwgZW5kID0gc2Nhbl9vbmNlKHMsIGVuZCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHMsIGVuZCkpCisgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGVycjoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBzLCBlcnIudmFsdWUpKSBmcm9tIE5vbmUKICAgICAgICAgcGFpcnNfYXBwZW5kKChrZXksIHZhbHVlKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dGNoYXIgPSBzW2VuZF0KQEAgLTIzOSw4ICsyMzEsOCBAQAogICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHZhbHVlLCBlbmQgPSBzY2FuX29uY2UocywgZW5kKQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcywgZW5kKSkKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICBfYXBwZW5kKHZhbHVlKQogICAgICAgICBuZXh0Y2hhciA9IHNbZW5kOmVuZCArIDFdCiAgICAgICAgIGlmIG5leHRjaGFyIGluIF93czoKQEAgLTI1MCw3ICsyNDIsNyBAQAogICAgICAgICBpZiBuZXh0Y2hhciA9PSAnXSc6CiAgICAgICAgICAgICBicmVhawogICAgICAgICBlbGlmIG5leHRjaGFyICE9ICcsJzoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHMsIGVuZCkpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKGVycm1zZygiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCBzLCBlbmQgLSAxKSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc1tlbmRdIGluIF93czoKICAgICAgICAgICAgICAgICBlbmQgKz0gMQpAQCAtMzY1LDYgKzM1Nyw2IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvYmosIGVuZCA9IHNlbGYuc2Nhbl9vbmNlKHMsIGlkeCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBKU09OIG9iamVjdCBjb3VsZCBiZSBkZWNvZGVkIikKKyAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXJyOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihlcnJtc2coIkV4cGVjdGluZyB2YWx1ZSIsIHMsIGVyci52YWx1ZSkpIGZyb20gTm9uZQogICAgICAgICByZXR1cm4gb2JqLCBlbmQKZGlmZiAtLWdpdCBhL0xpYi9qc29uL2VuY29kZXIucHkgYi9MaWIvanNvbi9lbmNvZGVyLnB5CmluZGV4IDFkOGIyMGMuLjA1MTM4MzggMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL2VuY29kZXIucHkKKysrIGIvTGliL2pzb24vZW5jb2Rlci5weQpAQCAtMTI1LDE0ICsxMjUsMTIgQEAKICAgICAgICAgSWYgaW5kZW50IGlzIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIsIHRoZW4gSlNPTiBhcnJheQogICAgICAgICBlbGVtZW50cyBhbmQgb2JqZWN0IG1lbWJlcnMgd2lsbCBiZSBwcmV0dHktcHJpbnRlZCB3aXRoIHRoYXQKICAgICAgICAgaW5kZW50IGxldmVsLiAgQW4gaW5kZW50IGxldmVsIG9mIDAgd2lsbCBvbmx5IGluc2VydCBuZXdsaW5lcy4KLSAgICAgICAgTm9uZSBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLiAgU2luY2UgdGhlIGRlZmF1bHQKLSAgICAgICAgaXRlbSBzZXBhcmF0b3IgaXMgJywgJywgIHRoZSBvdXRwdXQgbWlnaHQgaW5jbHVkZSB0cmFpbGluZwotICAgICAgICB3aGl0ZXNwYWNlIHdoZW4gaW5kZW50IGlzIHNwZWNpZmllZC4gIFlvdSBjYW4gdXNlCi0gICAgICAgIHNlcGFyYXRvcnM9KCcsJywgJzogJykgdG8gYXZvaWQgdGhpcy4KKyAgICAgICAgTm9uZSBpcyB0aGUgbW9zdCBjb21wYWN0IHJlcHJlc2VudGF0aW9uLgogCi0gICAgICAgIElmIHNwZWNpZmllZCwgc2VwYXJhdG9ycyBzaG91bGQgYmUgYSAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCi0gICAgICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpLiAgVG8gZ2V0IHRoZSBtb3N0IGNvbXBhY3QgSlNPTgotICAgICAgICByZXByZXNlbnRhdGlvbiB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KKyAgICAgICAgSWYgc3BlY2lmaWVkLCBzZXBhcmF0b3JzIHNob3VsZCBiZSBhbiAoaXRlbV9zZXBhcmF0b3IsIGtleV9zZXBhcmF0b3IpCisgICAgICAgIHR1cGxlLiAgVGhlIGRlZmF1bHQgaXMgKCcsICcsICc6ICcpIGlmICppbmRlbnQqIGlzIGBgTm9uZWBgIGFuZAorICAgICAgICAoJywnLCAnOiAnKSBvdGhlcndpc2UuICBUbyBnZXQgdGhlIG1vc3QgY29tcGFjdCBKU09OIHJlcHJlc2VudGF0aW9uLAorICAgICAgICB5b3Ugc2hvdWxkIHNwZWNpZnkgKCcsJywgJzonKSB0byBlbGltaW5hdGUgd2hpdGVzcGFjZS4KIAogICAgICAgICBJZiBzcGVjaWZpZWQsIGRlZmF1bHQgaXMgYSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBvYmplY3RzCiAgICAgICAgIHRoYXQgY2FuJ3Qgb3RoZXJ3aXNlIGJlIHNlcmlhbGl6ZWQuICBJdCBzaG91bGQgcmV0dXJuIGEgSlNPTiBlbmNvZGFibGUKQEAgLTE0OCw2ICsxNDYsOCBAQAogICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAogICAgICAgICBpZiBzZXBhcmF0b3JzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5pdGVtX3NlcGFyYXRvciwgc2VsZi5rZXlfc2VwYXJhdG9yID0gc2VwYXJhdG9ycworICAgICAgICBlbGlmIGluZGVudCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuaXRlbV9zZXBhcmF0b3IgPSAnLCcKICAgICAgICAgaWYgZGVmYXVsdCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGRlZmF1bHQKIApAQCAtMTc1LDYgKzE3NSw3IEBACiAgICAgZGVmIGVuY29kZShzZWxmLCBvKToKICAgICAgICAgIiIiUmV0dXJuIGEgSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBQeXRob24gZGF0YSBzdHJ1Y3R1cmUuCiAKKyAgICAgICAgPj4+IGZyb20ganNvbi5lbmNvZGVyIGltcG9ydCBKU09ORW5jb2RlcgogICAgICAgICA+Pj4gSlNPTkVuY29kZXIoKS5lbmNvZGUoeyJmb28iOiBbImJhciIsICJiYXoiXX0pCiAgICAgICAgICd7ImZvbyI6IFsiYmFyIiwgImJheiJdfScKIApAQCAtMjk4LDkgKzI5OSwxMyBAQAogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCBidWYgKyAnZmFsc2UnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgc3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgU3ViY2xhc3NlcyBvZiBpbnQvZmxvYXQgbWF5IG92ZXJyaWRlIF9fc3RyX18sIGJ1dCB3ZSBzdGlsbAorICAgICAgICAgICAgICAgICMgd2FudCB0byBlbmNvZGUgdGhlbSBhcyBpbnRlZ2Vycy9mbG9hdHMgaW4gSlNPTi4gT25lIGV4YW1wbGUKKyAgICAgICAgICAgICAgICAjIHdpdGhpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBpcyBJbnRFbnVtLgorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIHN0cihpbnQodmFsdWUpKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgYnVmICsgX2Zsb2F0c3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdmUgZm9yIGludAorICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZiArIF9mbG9hdHN0cihmbG9hdCh2YWx1ZSkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHlpZWxkIGJ1ZgogICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChsaXN0LCB0dXBsZSkpOgpAQCAtMzA5LDggKzMxNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjaHVua3MKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQogICAgICAgICAgICAgeWllbGQgJ1xuJyArIF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwKQEAgLTM0Nyw3ICszNTEsOCBAQAogICAgICAgICAgICAgIyBKYXZhU2NyaXB0IGlzIHdlYWtseSB0eXBlZCBmb3IgdGhlc2UsIHNvIGl0IG1ha2VzIHNlbnNlIHRvCiAgICAgICAgICAgICAjIGFsc28gYWxsb3cgdGhlbS4gIE1hbnkgZW5jb2RlcnMgc2VlbSB0byBkbyBzb21ldGhpbmcgbGlrZSB0aGlzLgogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGtleSwgZmxvYXQpOgotICAgICAgICAgICAgICAgIGtleSA9IF9mbG9hdHN0cihrZXkpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICBrZXkgPSBfZmxvYXRzdHIoZmxvYXQoa2V5KSkKICAgICAgICAgICAgIGVsaWYga2V5IGlzIFRydWU6CiAgICAgICAgICAgICAgICAga2V5ID0gJ3RydWUnCiAgICAgICAgICAgICBlbGlmIGtleSBpcyBGYWxzZToKQEAgLTM1NSw3ICszNjAsOCBAQAogICAgICAgICAgICAgZWxpZiBrZXkgaXMgTm9uZToKICAgICAgICAgICAgICAgICBrZXkgPSAnbnVsbCcKICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShrZXksIGludCk6Ci0gICAgICAgICAgICAgICAga2V5ID0gc3RyKGtleSkKKyAgICAgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgICAgIGtleSA9IHN0cihpbnQoa2V5KSkKICAgICAgICAgICAgIGVsaWYgX3NraXBrZXlzOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzc1LDkgKzM4MSwxMSBAQAogICAgICAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKICAgICAgICAgICAgICAgICB5aWVsZCAnZmFsc2UnCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgc3RyKHZhbHVlKQorICAgICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICAgICAgeWllbGQgc3RyKGludCh2YWx1ZSkpCiAgICAgICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIodmFsdWUpCisgICAgICAgICAgICAgICAgIyBzZWUgY29tbWVudCBmb3IgaW50L2Zsb2F0IGluIF9tYWtlX2l0ZXJlbmNvZGUKKyAgICAgICAgICAgICAgICB5aWVsZCBfZmxvYXRzdHIoZmxvYXQodmFsdWUpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAobGlzdCwgdHVwbGUpKToKICAgICAgICAgICAgICAgICAgICAgY2h1bmtzID0gX2l0ZXJlbmNvZGVfbGlzdCh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQpAQCAtMzg1LDggKzM5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rcyA9IF9pdGVyZW5jb2RlX2RpY3QodmFsdWUsIF9jdXJyZW50X2luZGVudF9sZXZlbCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBjaHVua3MgPSBfaXRlcmVuY29kZSh2YWx1ZSwgX2N1cnJlbnRfaW5kZW50X2xldmVsKQotICAgICAgICAgICAgICAgIGZvciBjaHVuayBpbiBjaHVua3M6Ci0gICAgICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjaHVua3MKICAgICAgICAgaWYgbmV3bGluZV9pbmRlbnQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBfY3VycmVudF9pbmRlbnRfbGV2ZWwgLT0gMQogICAgICAgICAgICAgeWllbGQgJ1xuJyArIF9pbmRlbnQgKiBfY3VycmVudF9pbmRlbnRfbGV2ZWwKQEAgLTQwNCwxNSArNDExLDE1IEBACiAgICAgICAgIGVsaWYgbyBpcyBGYWxzZToKICAgICAgICAgICAgIHlpZWxkICdmYWxzZScKICAgICAgICAgZWxpZiBpc2luc3RhbmNlKG8sIGludCk6Ci0gICAgICAgICAgICB5aWVsZCBzdHIobykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgZm9yIGludC9mbG9hdCBpbiBfbWFrZV9pdGVyZW5jb2RlCisgICAgICAgICAgICB5aWVsZCBzdHIoaW50KG8pKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZmxvYXQpOgotICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKG8pCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGZvciBpbnQvZmxvYXQgaW4gX21ha2VfaXRlcmVuY29kZQorICAgICAgICAgICAgeWllbGQgX2Zsb2F0c3RyKGZsb2F0KG8pKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgKGxpc3QsIHR1cGxlKSk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfbGlzdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlX2xpc3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICBlbGlmIGlzaW5zdGFuY2UobywgZGljdCk6Ci0gICAgICAgICAgICBmb3IgY2h1bmsgaW4gX2l0ZXJlbmNvZGVfZGljdChvLCBfY3VycmVudF9pbmRlbnRfbGV2ZWwpOgotICAgICAgICAgICAgICAgIHlpZWxkIGNodW5rCisgICAgICAgICAgICB5aWVsZCBmcm9tIF9pdGVyZW5jb2RlX2RpY3QobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBtYXJrZXJpZCA9IGlkKG8pCkBAIC00MjAsOCArNDI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIikKICAgICAgICAgICAgICAgICBtYXJrZXJzW21hcmtlcmlkXSA9IG8KICAgICAgICAgICAgIG8gPSBfZGVmYXVsdChvKQotICAgICAgICAgICAgZm9yIGNodW5rIGluIF9pdGVyZW5jb2RlKG8sIF9jdXJyZW50X2luZGVudF9sZXZlbCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgY2h1bmsKKyAgICAgICAgICAgIHlpZWxkIGZyb20gX2l0ZXJlbmNvZGUobywgX2N1cnJlbnRfaW5kZW50X2xldmVsKQogICAgICAgICAgICAgaWYgbWFya2VycyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICBkZWwgbWFya2Vyc1ttYXJrZXJpZF0KICAgICByZXR1cm4gX2l0ZXJlbmNvZGUKZGlmZiAtLWdpdCBhL0xpYi9qc29uL3NjYW5uZXIucHkgYi9MaWIvanNvbi9zY2FubmVyLnB5CmluZGV4IDIzZWVmNjEuLjg2NDI2Y2QgMTAwNjQ0Ci0tLSBhL0xpYi9qc29uL3NjYW5uZXIucHkKKysrIGIvTGliL2pzb24vc2Nhbm5lci5weQpAQCAtMjksNyArMjksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuZXh0Y2hhciA9IHN0cmluZ1tpZHhdCiAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgorICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbihpZHgpCiAKICAgICAgICAgaWYgbmV4dGNoYXIgPT0gJyInOgogICAgICAgICAgICAgcmV0dXJuIHBhcnNlX3N0cmluZyhzdHJpbmcsIGlkeCArIDEsIHN0cmljdCkKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgZWxpZiBuZXh0Y2hhciA9PSAnLScgYW5kIHN0cmluZ1tpZHg6aWR4ICsgOV0gPT0gJy1JbmZpbml0eSc6CiAgICAgICAgICAgICByZXR1cm4gcGFyc2VfY29uc3RhbnQoJy1JbmZpbml0eScpLCBpZHggKyA5CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uKGlkeCkKIAogICAgIGRlZiBzY2FuX29uY2Uoc3RyaW5nLCBpZHgpOgogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvanNvbi90b29sLnB5IGIvTGliL2pzb24vdG9vbC5weQppbmRleCBlY2Y5YzQ3Li43ZGI0NTI4IDEwMDY0NAotLS0gYS9MaWIvanNvbi90b29sLnB5CisrKyBiL0xpYi9qc29uL3Rvb2wucHkKQEAgLTMxLDggKzMxLDcgQEAKICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIFN5c3RlbUV4aXQoZSkKICAgICB3aXRoIG91dGZpbGU6Ci0gICAgICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLAotICAgICAgICAgICAgICAgICAgaW5kZW50PTQsIHNlcGFyYXRvcnM9KCcsJywgJzogJykpCisgICAgICAgIGpzb24uZHVtcChvYmosIG91dGZpbGUsIHNvcnRfa2V5cz1UcnVlLCBpbmRlbnQ9NCkKICAgICAgICAgb3V0ZmlsZS53cml0ZSgnXG4nKQogCiAKZGlmZiAtLWdpdCBhL0xpYi9rZXl3b3JkLnB5IGIvTGliL2tleXdvcmQucHkKaW5kZXggZGFkMzljYy4uNmUxZTg4MiAxMDA3NTUKLS0tIGEvTGliL2tleXdvcmQucHkKKysrIGIvTGliL2tleXdvcmQucHkKQEAgLTYwLDYgKzYwLDEyIEBACiAgICAgaWYgbGVuKGFyZ3MpID4gMTogb3B0ZmlsZSA9IGFyZ3NbMV0KICAgICBlbHNlOiBvcHRmaWxlID0gIkxpYi9rZXl3b3JkLnB5IgogCisgICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0LCB0YWtpbmcgY2FyZSB0byBwcmVzZXJ2ZSBpdHMKKyAgICAjIG5ld2xpbmUgY29udmVudGlvbi4KKyAgICB3aXRoIG9wZW4ob3B0ZmlsZSwgbmV3bGluZT0nJykgYXMgZnA6CisgICAgICAgIGZvcm1hdCA9IGZwLnJlYWRsaW5lcygpCisgICAgbmwgPSBmb3JtYXRbMF1bbGVuKGZvcm1hdFswXS5zdHJpcCgpKTpdIGlmIGZvcm1hdCBlbHNlICdcbicKKwogICAgICMgc2NhbiB0aGUgc291cmNlIGZpbGUgZm9yIGtleXdvcmRzCiAgICAgd2l0aCBvcGVuKGlwdGZpbGUpIGFzIGZwOgogICAgICAgICBzdHJwcm9nID0gcmUuY29tcGlsZSgnIihbXiJdKykiJykKQEAgLTY4LDI2ICs3NCwyMSBAQAogICAgICAgICAgICAgaWYgJ3sxLCAiJyBpbiBsaW5lOgogICAgICAgICAgICAgICAgIG1hdGNoID0gc3RycHJvZy5zZWFyY2gobGluZSkKICAgICAgICAgICAgICAgICBpZiBtYXRjaDoKLSAgICAgICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKCIgICAgICAgICciICsgbWF0Y2guZ3JvdXAoMSkgKyAiJyxcbiIpCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgiICAgICAgICAnIiArIG1hdGNoLmdyb3VwKDEpICsgIicsIiArIG5sKQogICAgIGxpbmVzLnNvcnQoKQogCi0gICAgIyBsb2FkIHRoZSBvdXRwdXQgc2tlbGV0b24gZnJvbSB0aGUgdGFyZ2V0Ci0gICAgd2l0aCBvcGVuKG9wdGZpbGUpIGFzIGZwOgotICAgICAgICBmb3JtYXQgPSBmcC5yZWFkbGluZXMoKQotCi0gICAgIyBpbnNlcnQgdGhlIGxpbmVzIG9mIGtleXdvcmRzCisgICAgIyBpbnNlcnQgdGhlIGxpbmVzIG9mIGtleXdvcmRzIGludG8gdGhlIHNrZWxldG9uCiAgICAgdHJ5OgotICAgICAgICBzdGFydCA9IGZvcm1hdC5pbmRleCgiIy0tc3RhcnQga2V5d29yZHMtLVxuIikgKyAxCi0gICAgICAgIGVuZCA9IGZvcm1hdC5pbmRleCgiIy0tZW5kIGtleXdvcmRzLS1cbiIpCisgICAgICAgIHN0YXJ0ID0gZm9ybWF0LmluZGV4KCIjLS1zdGFydCBrZXl3b3Jkcy0tIiArIG5sKSArIDEKKyAgICAgICAgZW5kID0gZm9ybWF0LmluZGV4KCIjLS1lbmQga2V5d29yZHMtLSIgKyBubCkKICAgICAgICAgZm9ybWF0W3N0YXJ0OmVuZF0gPSBsaW5lcwogICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJ0YXJnZXQgZG9lcyBub3QgY29udGFpbiBmb3JtYXQgbWFya2Vyc1xuIikKICAgICAgICAgc3lzLmV4aXQoMSkKIAogICAgICMgd3JpdGUgdGhlIG91dHB1dCBmaWxlCi0gICAgZnAgPSBvcGVuKG9wdGZpbGUsICd3JykKLSAgICBmcC53cml0ZSgnJy5qb2luKGZvcm1hdCkpCi0gICAgZnAuY2xvc2UoKQorICAgIHdpdGggb3BlbihvcHRmaWxlLCAndycsIG5ld2xpbmU9JycpIGFzIGZwOgorICAgICAgICBmcC53cml0ZWxpbmVzKGZvcm1hdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL0dyYW1tYXIudHh0IGIvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQKaW5kZXggMWUxZjI0Yy4uZTY2N2JjZCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQKKysrIGIvTGliL2xpYjJ0bzMvR3JhbW1hci50eHQKQEAgLTU2LDcgKzU2LDcgQEAKIGV4cHJfc3RtdDogdGVzdGxpc3Rfc3Rhcl9leHByIChhdWdhc3NpZ24gKHlpZWxkX2V4cHJ8dGVzdGxpc3QpIHwKICAgICAgICAgICAgICAgICAgICAgICgnPScgKHlpZWxkX2V4cHJ8dGVzdGxpc3Rfc3Rhcl9leHByKSkqKQogdGVzdGxpc3Rfc3Rhcl9leHByOiAodGVzdHxzdGFyX2V4cHIpICgnLCcgKHRlc3R8c3Rhcl9leHByKSkqIFsnLCddCi1hdWdhc3NpZ246ICgnKz0nIHwgJy09JyB8ICcqPScgfCAnLz0nIHwgJyU9JyB8ICcmPScgfCAnfD0nIHwgJ149JyB8CithdWdhc3NpZ246ICgnKz0nIHwgJy09JyB8ICcqPScgfCAnQD0nIHwgJy89JyB8ICclPScgfCAnJj0nIHwgJ3w9JyB8ICdePScgfAogICAgICAgICAgICAgJzw8PScgfCAnPj49JyB8ICcqKj0nIHwgJy8vPScpCiAjIEZvciBub3JtYWwgYXNzaWdubWVudHMsIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIGVuZm9yY2VkIGJ5IHRoZSBpbnRlcnByZXRlcgogcHJpbnRfc3RtdDogJ3ByaW50JyAoIFsgdGVzdCAoJywnIHRlc3QpKiBbJywnXSBdIHwKQEAgLTExOSw3ICsxMTksNyBAQAogYW5kX2V4cHI6IHNoaWZ0X2V4cHIgKCcmJyBzaGlmdF9leHByKSoKIHNoaWZ0X2V4cHI6IGFyaXRoX2V4cHIgKCgnPDwnfCc+PicpIGFyaXRoX2V4cHIpKgogYXJpdGhfZXhwcjogdGVybSAoKCcrJ3wnLScpIHRlcm0pKgotdGVybTogZmFjdG9yICgoJyonfCcvJ3wnJSd8Jy8vJykgZmFjdG9yKSoKK3Rlcm06IGZhY3RvciAoKCcqJ3wnQCd8Jy8nfCclJ3wnLy8nKSBmYWN0b3IpKgogZmFjdG9yOiAoJysnfCctJ3wnficpIGZhY3RvciB8IHBvd2VyCiBwb3dlcjogYXRvbSB0cmFpbGVyKiBbJyoqJyBmYWN0b3JdCiBhdG9tOiAoJygnIFt5aWVsZF9leHByfHRlc3RsaXN0X2dleHBdICcpJyB8CkBAIC0xNTUsNCArMTU1LDUgQEAKICMgbm90IHVzZWQgaW4gZ3JhbW1hciwgYnV0IG1heSBhcHBlYXIgaW4gIm5vZGUiIHBhc3NlZCBmcm9tIFBhcnNlciB0byBDb21waWxlcgogZW5jb2RpbmdfZGVjbDogTkFNRQogCi15aWVsZF9leHByOiAneWllbGQnIFt0ZXN0bGlzdF0KK3lpZWxkX2V4cHI6ICd5aWVsZCcgW3lpZWxkX2FyZ10KK3lpZWxkX2FyZzogJ2Zyb20nIHRlc3QgfCB0ZXN0bGlzdApkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5IGIvTGliL2xpYjJ0bzMvYnRtX3V0aWxzLnB5CmluZGV4IDIyNzZkYzkuLjMzOTc1MGUgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2J0bV91dGlscy5weQorKysgYi9MaWIvbGliMnRvMy9idG1fdXRpbHMucHkKQEAgLTk2LDggKzk2LDcgQEAKICAgICBkZWYgbGVhdmVzKHNlbGYpOgogICAgICAgICAiR2VuZXJhdG9yIHRoYXQgcmV0dXJucyB0aGUgbGVhdmVzIG9mIHRoZSB0cmVlIgogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciB4IGluIGNoaWxkLmxlYXZlcygpOgotICAgICAgICAgICAgICAgIHlpZWxkIHgKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQubGVhdmVzKCkKICAgICAgICAgaWYgbm90IHNlbGYuY2hpbGRyZW46CiAgICAgICAgICAgICB5aWVsZCBzZWxmCiAKQEAgLTI3Nyw3ICsyNzYsNiBAQAogICAgIHN1Yi1pdGVyYWJsZXMiIiIKICAgICBmb3IgeCBpbiBzZXF1ZW5jZToKICAgICAgICAgaWYgaXNpbnN0YW5jZSh4LCAobGlzdCwgdHVwbGUpKToKLSAgICAgICAgICAgIGZvciB5IGluIHJlY190ZXN0KHgsIHRlc3RfZnVuYyk6Ci0gICAgICAgICAgICAgICAgeWllbGQgeQorICAgICAgICAgICAgeWllbGQgZnJvbSByZWNfdGVzdCh4LCB0ZXN0X2Z1bmMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB5aWVsZCB0ZXN0X2Z1bmMoeCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkgYi9MaWIvbGliMnRvMy9maXhlcl91dGlsLnB5CmluZGV4IDYwZDIxOWYuLjQ0NTAyYmYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVyX3V0aWwucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXJfdXRpbC5weQpAQCAtMTI5LDYgKzEyOSwyOSBAQAogICAgIGltcCA9IE5vZGUoc3ltcy5pbXBvcnRfZnJvbSwgY2hpbGRyZW4pCiAgICAgcmV0dXJuIGltcAogCitkZWYgSW1wb3J0QW5kQ2FsbChub2RlLCByZXN1bHRzLCBuYW1lcyk6CisgICAgIiIiUmV0dXJucyBhbiBpbXBvcnQgc3RhdGVtZW50IGFuZCBjYWxscyBhIG1ldGhvZAorICAgIG9mIHRoZSBtb2R1bGU6CisKKyAgICBpbXBvcnQgbW9kdWxlCisgICAgbW9kdWxlLm5hbWUoKSIiIgorICAgIG9iaiA9IHJlc3VsdHNbIm9iaiJdLmNsb25lKCkKKyAgICBpZiBvYmoudHlwZSA9PSBzeW1zLmFyZ2xpc3Q6CisgICAgICAgIG5ld2FyZ2xpc3QgPSBvYmouY2xvbmUoKQorICAgIGVsc2U6CisgICAgICAgIG5ld2FyZ2xpc3QgPSBOb2RlKHN5bXMuYXJnbGlzdCwgW29iai5jbG9uZSgpXSkKKyAgICBhZnRlciA9IHJlc3VsdHNbImFmdGVyIl0KKyAgICBpZiBhZnRlcjoKKyAgICAgICAgYWZ0ZXIgPSBbbi5jbG9uZSgpIGZvciBuIGluIGFmdGVyXQorICAgIG5ldyA9IE5vZGUoc3ltcy5wb3dlciwKKyAgICAgICAgICAgICAgIEF0dHIoTmFtZShuYW1lc1swXSksIE5hbWUobmFtZXNbMV0pKSArCisgICAgICAgICAgICAgICBbTm9kZShzeW1zLnRyYWlsZXIsCisgICAgICAgICAgICAgICAgICAgICBbcmVzdWx0c1sibHBhciJdLmNsb25lKCksCisgICAgICAgICAgICAgICAgICAgICAgbmV3YXJnbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzWyJycGFyIl0uY2xvbmUoKV0pXSArIGFmdGVyKQorICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAorICAgIHJldHVybiBuZXcKKwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIERldGVybWluZSB3aGV0aGVyIGEgbm9kZSByZXByZXNlbnRzIGEgZ2l2ZW4gbGl0ZXJhbApAQCAtMTY0LDggKzE4Nyw4IEBACiAgICAgcmV0dXJuIE5vZGUoc3ltcy5hdG9tLCBbTFBhcmVuKCksIG5vZGUsIFJQYXJlbigpXSkKIAogCi1jb25zdW1pbmdfY2FsbHMgPSBzZXQoWyJzb3J0ZWQiLCAibGlzdCIsICJzZXQiLCAiYW55IiwgImFsbCIsICJ0dXBsZSIsICJzdW0iLAotICAgICAgICAgICAgICAgICAgICAgICAibWluIiwgIm1heCIsICJlbnVtZXJhdGUiXSkKK2NvbnN1bWluZ19jYWxscyA9IHsic29ydGVkIiwgImxpc3QiLCAic2V0IiwgImFueSIsICJhbGwiLCAidHVwbGUiLCAic3VtIiwKKyAgICAgICAgICAgICAgICAgICAibWluIiwgIm1heCIsICJlbnVtZXJhdGUifQogCiBkZWYgYXR0cl9jaGFpbihvYmosIGF0dHIpOgogICAgICIiIkZvbGxvdyBhbiBhdHRyaWJ1dGUgY2hhaW4uCkBAIC0zMzYsNyArMzU5LDcgQEAKICAgICByb290Lmluc2VydF9jaGlsZChpbnNlcnRfcG9zLCBOb2RlKHN5bXMuc2ltcGxlX3N0bXQsIGNoaWxkcmVuKSkKIAogCi1fZGVmX3N5bXMgPSBzZXQoW3N5bXMuY2xhc3NkZWYsIHN5bXMuZnVuY2RlZl0pCitfZGVmX3N5bXMgPSB7c3ltcy5jbGFzc2RlZiwgc3ltcy5mdW5jZGVmfQogZGVmIGZpbmRfYmluZGluZyhuYW1lLCBub2RlLCBwYWNrYWdlPU5vbmUpOgogICAgICIiIiBSZXR1cm5zIHRoZSBub2RlIHdoaWNoIGJpbmRzIHZhcmlhYmxlIG5hbWUsIG90aGVyd2lzZSBOb25lLgogICAgICAgICBJZiBvcHRpb25hbCBhcmd1bWVudCBwYWNrYWdlIGlzIHN1cHBsaWVkLCBvbmx5IGltcG9ydHMgd2lsbApAQCAtMzc5LDcgKzQwMiw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldAogICAgIHJldHVybiBOb25lCiAKLV9ibG9ja19zeW1zID0gc2V0KFtzeW1zLmZ1bmNkZWYsIHN5bXMuY2xhc3NkZWYsIHN5bXMudHJhaWxlcl0pCitfYmxvY2tfc3ltcyA9IHtzeW1zLmZ1bmNkZWYsIHN5bXMuY2xhc3NkZWYsIHN5bXMudHJhaWxlcn0KIGRlZiBfZmluZChuYW1lLCBub2RlKToKICAgICBub2RlcyA9IFtub2RlXQogICAgIHdoaWxlIG5vZGVzOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Fzc2VydHMucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfYXNzZXJ0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmNlYzg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2Fzc2VydHMucHkKQEAgLTAsMCArMSwzNCBAQAorIiIiRml4ZXIgdGhhdCByZXBsYWNlcyBkZXByZWNhdGVkIHVuaXR0ZXN0IG1ldGhvZCBuYW1lcy4iIiIKKworIyBBdXRob3I6IEV6aW8gTWVsb3R0aQorCitmcm9tIC4uZml4ZXJfYmFzZSBpbXBvcnQgQmFzZUZpeAorZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUKKworTkFNRVMgPSBkaWN0KAorICAgIGFzc2VydF89ImFzc2VydFRydWUiLAorICAgIGFzc2VydEVxdWFscz0iYXNzZXJ0RXF1YWwiLAorICAgIGFzc2VydE5vdEVxdWFscz0iYXNzZXJ0Tm90RXF1YWwiLAorICAgIGFzc2VydEFsbW9zdEVxdWFscz0iYXNzZXJ0QWxtb3N0RXF1YWwiLAorICAgIGFzc2VydE5vdEFsbW9zdEVxdWFscz0iYXNzZXJ0Tm90QWxtb3N0RXF1YWwiLAorICAgIGFzc2VydFJlZ2V4cE1hdGNoZXM9ImFzc2VydFJlZ2V4IiwKKyAgICBhc3NlcnRSYWlzZXNSZWdleHA9ImFzc2VydFJhaXNlc1JlZ2V4IiwKKyAgICBmYWlsVW5sZXNzRXF1YWw9ImFzc2VydEVxdWFsIiwKKyAgICBmYWlsSWZFcXVhbD0iYXNzZXJ0Tm90RXF1YWwiLAorICAgIGZhaWxVbmxlc3NBbG1vc3RFcXVhbD0iYXNzZXJ0QWxtb3N0RXF1YWwiLAorICAgIGZhaWxJZkFsbW9zdEVxdWFsPSJhc3NlcnROb3RBbG1vc3RFcXVhbCIsCisgICAgZmFpbFVubGVzcz0iYXNzZXJ0VHJ1ZSIsCisgICAgZmFpbFVubGVzc1JhaXNlcz0iYXNzZXJ0UmFpc2VzIiwKKyAgICBmYWlsSWY9ImFzc2VydEZhbHNlIiwKKykKKworCitjbGFzcyBGaXhBc3NlcnRzKEJhc2VGaXgpOgorCisgICAgUEFUVEVSTiA9ICIiIgorICAgICAgICAgICAgICBwb3dlcjwgYW55KyB0cmFpbGVyPCAnLicgbWV0aD0oJXMpPiBhbnkqID4KKyAgICAgICAgICAgICAgIiIiICUgJ3wnLmpvaW4obWFwKHJlcHIsIE5BTUVTKSkKKworICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG5hbWUgPSByZXN1bHRzWyJtZXRoIl1bMF0KKyAgICAgICAgbmFtZS5yZXBsYWNlKE5hbWUoTkFNRVNbc3RyKG5hbWUpXSwgcHJlZml4PW5hbWUucHJlZml4KSkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9kaWN0LnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkKaW5kZXggNGNjMzcxNy4uOTYzZjk1MiAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2RpY3QucHkKQEAgLTM2LDcgKzM2LDcgQEAKIGZyb20gLi4gaW1wb3J0IGZpeGVyX3V0aWwKIAogCi1pdGVyX2V4ZW1wdCA9IGZpeGVyX3V0aWwuY29uc3VtaW5nX2NhbGxzIHwgc2V0KFsiaXRlciJdKQoraXRlcl9leGVtcHQgPSBmaXhlcl91dGlsLmNvbnN1bWluZ19jYWxscyB8IHsiaXRlciJ9CiAKIAogY2xhc3MgRml4RGljdChmaXhlcl9iYXNlLkJhc2VGaXgpOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4aXRmdW5jLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2V4aXRmdW5jLnB5CmluZGV4IDlhZmMyZmEuLjJlNDc4ODcgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9leGl0ZnVuYy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfZXhpdGZ1bmMucHkKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgc2VsZi5zeXNfaW1wb3J0ID0gTm9uZQogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKLSAgICAgICAgIyBGaXJzdCwgZmluZCBhIHRoZSBzeXMgaW1wb3J0LiBXZSdsbCBqdXN0IGhvcGUgaXQncyBnbG9iYWwgc2NvcGUuCisgICAgICAgICMgRmlyc3QsIGZpbmQgdGhlIHN5cyBpbXBvcnQuIFdlJ2xsIGp1c3QgaG9wZSBpdCdzIGdsb2JhbCBzY29wZS4KICAgICAgICAgaWYgInN5c19pbXBvcnQiIGluIHJlc3VsdHM6CiAgICAgICAgICAgICBpZiBzZWxmLnN5c19pbXBvcnQgaXMgTm9uZToKICAgICAgICAgICAgICAgICBzZWxmLnN5c19pbXBvcnQgPSByZXN1bHRzWyJzeXNfaW1wb3J0Il0KZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnB1dC5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnB1dC5weQppbmRleCAxMjZkYTFiLi45Y2Y5YTQ4IDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW5wdXQucHkKKysrIGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2lucHV0LnB5CkBAIC0xNyw3ICsxNyw3IEBACiAgICAgICAgICAgICAgICIiIgogCiAgICAgZGVmIHRyYW5zZm9ybShzZWxmLCBub2RlLCByZXN1bHRzKToKLSAgICAgICAgIyBJZiB3ZSdyZSBhbHJlYWR5IHdyYXBwZWQgaW4gYSBldmFsKCkgY2FsbCwgd2UncmUgZG9uZS4KKyAgICAgICAgIyBJZiB3ZSdyZSBhbHJlYWR5IHdyYXBwZWQgaW4gYW4gZXZhbCgpIGNhbGwsIHdlJ3JlIGRvbmUuCiAgICAgICAgIGlmIGNvbnRleHQubWF0Y2gobm9kZS5wYXJlbnQucGFyZW50KToKICAgICAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5IGIvTGliL2xpYjJ0bzMvZml4ZXMvZml4X2ludGVybi5weQppbmRleCA2YmUxMWNkLi5mYjI5NzNjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9maXhlcy9maXhfaW50ZXJuLnB5CisrKyBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9pbnRlcm4ucHkKQEAgLTYsOSArNiw4IEBACiBpbnRlcm4ocykgLT4gc3lzLmludGVybihzKSIiIgogCiAjIExvY2FsIGltcG9ydHMKLWZyb20gLi4gaW1wb3J0IHB5dHJlZQogZnJvbSAuLiBpbXBvcnQgZml4ZXJfYmFzZQotZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IE5hbWUsIEF0dHIsIHRvdWNoX2ltcG9ydAorZnJvbSAuLmZpeGVyX3V0aWwgaW1wb3J0IEltcG9ydEFuZENhbGwsIHRvdWNoX2ltcG9ydAogCiAKIGNsYXNzIEZpeEludGVybihmaXhlcl9iYXNlLkJhc2VGaXgpOgpAQCAtMjYsMjEgKzI1LDcgQEAKICAgICAiIiIKIAogICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6Ci0gICAgICAgIHN5bXMgPSBzZWxmLnN5bXMKLSAgICAgICAgb2JqID0gcmVzdWx0c1sib2JqIl0uY2xvbmUoKQotICAgICAgICBpZiBvYmoudHlwZSA9PSBzeW1zLmFyZ2xpc3Q6Ci0gICAgICAgICAgICBuZXdhcmdsaXN0ID0gb2JqLmNsb25lKCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG5ld2FyZ2xpc3QgPSBweXRyZWUuTm9kZShzeW1zLmFyZ2xpc3QsIFtvYmouY2xvbmUoKV0pCi0gICAgICAgIGFmdGVyID0gcmVzdWx0c1siYWZ0ZXIiXQotICAgICAgICBpZiBhZnRlcjoKLSAgICAgICAgICAgIGFmdGVyID0gW24uY2xvbmUoKSBmb3IgbiBpbiBhZnRlcl0KLSAgICAgICAgbmV3ID0gcHl0cmVlLk5vZGUoc3ltcy5wb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cihOYW1lKCJzeXMiKSwgTmFtZSgiaW50ZXJuIikpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgW3B5dHJlZS5Ob2RlKHN5bXMudHJhaWxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZXN1bHRzWyJscGFyIl0uY2xvbmUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdhcmdsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHNbInJwYXIiXS5jbG9uZSgpXSldICsgYWZ0ZXIpCi0gICAgICAgIG5ldy5wcmVmaXggPSBub2RlLnByZWZpeAorICAgICAgICBuYW1lcyA9ICgnc3lzJywgJ2ludGVybicpCisgICAgICAgIG5ldyA9IEltcG9ydEFuZENhbGwobm9kZSwgcmVzdWx0cywgbmFtZXMpCiAgICAgICAgIHRvdWNoX2ltcG9ydChOb25lLCAnc3lzJywgbm9kZSkKICAgICAgICAgcmV0dXJuIG5ldwpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGFjbGFzcy5weSBiL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9tZXRhY2xhc3MucHkKaW5kZXggZDRmOTlhMy4uZjNmODcwOCAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvZml4ZXMvZml4X21ldGFjbGFzcy5weQorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfbWV0YWNsYXNzLnB5CkBAIC0xMTQsNyArMTE0LDcgQEAKICAgICAgICAgICAgICAgICBsZWZ0X25vZGUgPSBleHByX25vZGUuY2hpbGRyZW5bMF0KICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGxlZnRfbm9kZSwgTGVhZikgYW5kIFwKICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnRfbm9kZS52YWx1ZSA9PSAnX19tZXRhY2xhc3NfXyc6Ci0gICAgICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYSBhc3NpZ25tZW50IHRvIF9fbWV0YWNsYXNzX18uCisgICAgICAgICAgICAgICAgICAgICMgV2UgZm91bmQgYW4gYXNzaWdubWVudCB0byBfX21ldGFjbGFzc19fLgogICAgICAgICAgICAgICAgICAgICBmaXh1cF9zaW1wbGVfc3RtdChub2RlLCBpLCBzaW1wbGVfbm9kZSkKICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlX3RyYWlsaW5nX25ld2xpbmUoc2ltcGxlX25vZGUpCiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIChub2RlLCBpLCBzaW1wbGVfbm9kZSkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL2ZpeGVzL2ZpeF9yZWxvYWQucHkgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NTUzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbGliMnRvMy9maXhlcy9maXhfcmVsb2FkLnB5CkBAIC0wLDAgKzEsMjggQEAKKyIiIkZpeGVyIGZvciByZWxvYWQoKS4KKworcmVsb2FkKHMpIC0+IGltcC5yZWxvYWQocykiIiIKKworIyBMb2NhbCBpbXBvcnRzCitmcm9tIC4uIGltcG9ydCBmaXhlcl9iYXNlCitmcm9tIC4uZml4ZXJfdXRpbCBpbXBvcnQgSW1wb3J0QW5kQ2FsbCwgdG91Y2hfaW1wb3J0CisKKworY2xhc3MgRml4UmVsb2FkKGZpeGVyX2Jhc2UuQmFzZUZpeCk6CisgICAgQk1fY29tcGF0aWJsZSA9IFRydWUKKyAgICBvcmRlciA9ICJwcmUiCisKKyAgICBQQVRURVJOID0gIiIiCisgICAgcG93ZXI8ICdyZWxvYWQnCisgICAgICAgICAgIHRyYWlsZXI8IGxwYXI9JygnCisgICAgICAgICAgICAgICAgICAgICggbm90KGFyZ2xpc3QgfCBhcmd1bWVudDxhbnkgJz0nIGFueT4pIG9iaj1hbnkKKyAgICAgICAgICAgICAgICAgICAgICB8IG9iaj1hcmdsaXN0PChub3QgYXJndW1lbnQ8YW55ICc9JyBhbnk+KSBhbnkgJywnPiApCisgICAgICAgICAgICAgICAgICAgIHJwYXI9JyknID4KKyAgICAgICAgICAgYWZ0ZXI9YW55KgorICAgID4KKyAgICAiIiIKKworICAgIGRlZiB0cmFuc2Zvcm0oc2VsZiwgbm9kZSwgcmVzdWx0cyk6CisgICAgICAgIG5hbWVzID0gKCdpbXAnLCAncmVsb2FkJykKKyAgICAgICAgbmV3ID0gSW1wb3J0QW5kQ2FsbChub2RlLCByZXN1bHRzLCBuYW1lcykKKyAgICAgICAgdG91Y2hfaW1wb3J0KE5vbmUsICdpbXAnLCBub2RlKQorICAgICAgICByZXR1cm4gbmV3CmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9tYWluLnB5IGIvTGliL2xpYjJ0bzMvbWFpbi5weQppbmRleCBmOWNjMThiLi4xYTFkZjAxIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9tYWluLnB5CisrKyBiL0xpYi9saWIydG8zL21haW4ucHkKQEAgLTIsNyArMiw3IEBACiBNYWluIHByb2dyYW0gZm9yIDJ0bzMuCiAiIiIKIAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudCwgcHJpbnRfZnVuY3Rpb24KIAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCkBAIC05MCwxMSArOTAsMTEgQEAKICAgICAgICAgICAgIGlmIG9zLnBhdGgubGV4aXN0cyhiYWNrdXApOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGJhY2t1cCkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb2dfbWVzc2FnZSgiQ2FuJ3QgcmVtb3ZlIGJhY2t1cCAlcyIsIGJhY2t1cCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoZmlsZW5hbWUsIGJhY2t1cCkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgc2VsZi5sb2dfbWVzc2FnZSgiQ2FuJ3QgcmVuYW1lICVzIHRvICVzIiwgZmlsZW5hbWUsIGJhY2t1cCkKICAgICAgICAgIyBBY3R1YWxseSB3cml0ZSB0aGUgbmV3IGZpbGUKICAgICAgICAgd3JpdGUgPSBzdXBlcihTdGRvdXRSZWZhY3RvcmluZ1Rvb2wsIHNlbGYpLndyaXRlX2ZpbGUKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkgYi9MaWIvbGliMnRvMy9wYXRjb21wLnB5CmluZGV4IDBhMjU5ZTkuLjIwMTJlYzQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BhdGNvbXAucHkKKysrIGIvTGliL2xpYjJ0bzMvcGF0Y29tcC5weQpAQCAtMzIsNyArMzIsNyBAQAogCiBkZWYgdG9rZW5pemVfd3JhcHBlcihpbnB1dCk6CiAgICAgIiIiVG9rZW5pemVzIGEgc3RyaW5nIHN1cHByZXNzaW5nIHNpZ25pZmljYW50IHdoaXRlc3BhY2UuIiIiCi0gICAgc2tpcCA9IHNldCgodG9rZW4uTkVXTElORSwgdG9rZW4uSU5ERU5ULCB0b2tlbi5ERURFTlQpKQorICAgIHNraXAgPSB7dG9rZW4uTkVXTElORSwgdG9rZW4uSU5ERU5ULCB0b2tlbi5ERURFTlR9CiAgICAgdG9rZW5zID0gdG9rZW5pemUuZ2VuZXJhdGVfdG9rZW5zKGlvLlN0cmluZ0lPKGlucHV0KS5yZWFkbGluZSkKICAgICBmb3IgcXVpbnR1cGxlIGluIHRva2VuczoKICAgICAgICAgdHlwZSwgdmFsdWUsIHN0YXJ0LCBlbmQsIGxpbmVfdGV4dCA9IHF1aW50dXBsZQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weSBiL0xpYi9saWIydG8zL3BnZW4yL2NvbnYucHkKaW5kZXggYmY0OTc2Mi4uZWQwY2FjNSAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvY29udi5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9jb252LnB5CkBAIC02MCw3ICs2MCw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgb3BlbiAlczogJXMiICUgKGZpbGVuYW1lLCBlcnIpKQogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIHNlbGYuc3ltYm9sMm51bWJlciA9IHt9CkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCBvcGVuICVzOiAlcyIgJSAoZmlsZW5hbWUsIGVycikpCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBUaGUgY29kZSBiZWxvdyBlc3NlbnRpYWxseSB1c2VzIGYncyBpdGVyYXRvci1uZXNzIQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZHJpdmVyLnB5CmluZGV4IDRjNjExYzYuLjNjY2M2OWQgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL2RyaXZlci5weQorKysgYi9MaWIvbGliMnRvMy9wZ2VuMi9kcml2ZXIucHkKQEAgLTEyMyw3ICsxMjMsNyBAQAogICAgICAgICAgICAgbG9nZ2VyLmluZm8oIldyaXRpbmcgZ3JhbW1hciB0YWJsZXMgdG8gJXMiLCBncCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBnLmR1bXAoZ3ApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBsb2dnZXIuaW5mbygiV3JpdGluZyBmYWlsZWQ6IitzdHIoZSkpCiAgICAgZWxzZToKICAgICAgICAgZyA9IGdyYW1tYXIuR3JhbW1hcigpCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvZ3JhbW1hci5weQppbmRleCAxNGM1ZjcwLi5iNDQ4MWQxIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9wZ2VuMi9ncmFtbWFyLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL2dyYW1tYXIucHkKQEAgLTg2LDE1ICs4NiwxMyBAQAogCiAgICAgZGVmIGR1bXAoc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiJEdW1wIHRoZSBncmFtbWFyIHRhYmxlcyB0byBhIHBpY2tsZSBmaWxlLiIiIgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgIndiIikKLSAgICAgICAgcGlja2xlLmR1bXAoc2VsZi5fX2RpY3RfXywgZiwgMikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wKHNlbGYuX19kaWN0X18sIGYsIDIpCiAKICAgICBkZWYgbG9hZChzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIkxvYWQgdGhlIGdyYW1tYXIgdGFibGVzIGZyb20gYSBwaWNrbGUgZmlsZS4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICJyYiIpCi0gICAgICAgIGQgPSBwaWNrbGUubG9hZChmKQotICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZCA9IHBpY2tsZS5sb2FkKGYpCiAgICAgICAgIHNlbGYuX19kaWN0X18udXBkYXRlKGQpCiAKICAgICBkZWYgY29weShzZWxmKToKQEAgLTE1MSw2ICsxNDksNyBAQAogeyBMQlJBQ0UKIH0gUkJSQUNFCiBAIEFUCitAPSBBVEVRVUFMCiA9PSBFUUVRVUFMCiAhPSBOT1RFUVVBTAogPD4gTk9URVFVQUwKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuLnB5IGIvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkKaW5kZXggNmE2ZDBiNi4uNzU5OTM5NiAxMDA3NTUKLS0tIGEvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkKKysrIGIvTGliL2xpYjJ0bzMvcGdlbjIvdG9rZW4ucHkKQEAgLTU3LDEyICs1NywxMyBAQAogRE9VQkxFU0xBU0ggPSA0OAogRE9VQkxFU0xBU0hFUVVBTCA9IDQ5CiBBVCA9IDUwCi1PUCA9IDUxCi1DT01NRU5UID0gNTIKLU5MID0gNTMKLVJBUlJPVyA9IDU0Ci1FUlJPUlRPS0VOID0gNTUKLU5fVE9LRU5TID0gNTYKK0FURVFVQUwgPSA1MQorT1AgPSA1MgorQ09NTUVOVCA9IDUzCitOTCA9IDU0CitSQVJST1cgPSA1NQorRVJST1JUT0tFTiA9IDU2CitOX1RPS0VOUyA9IDU3CiBOVF9PRkZTRVQgPSAyNTYKICMtLWVuZCBjb25zdGFudHMtLQogCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9wZ2VuMi90b2tlbml6ZS5weSBiL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CmluZGV4IDFiYjkzMWUuLjNkZDFlZTkgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CisrKyBiL0xpYi9saWIydG8zL3BnZW4yL3Rva2VuaXplLnB5CkBAIC04NCw3ICs4NCw3IEBACiAjIHJlY29nbml6ZWQgYXMgdHdvIGluc3RhbmNlcyBvZiA9KS4KIE9wZXJhdG9yID0gZ3JvdXAociJcKlwqPT8iLCByIj4+PT8iLCByIjw8PT8iLCByIjw+IiwgciIhPSIsCiAgICAgICAgICAgICAgICAgIHIiLy89PyIsIHIiLT4iLAotICAgICAgICAgICAgICAgICByIlsrXC0qLyUmfF49PD5dPT8iLAorICAgICAgICAgICAgICAgICByIlsrXC0qLyUmQHxePTw+XT0/IiwKICAgICAgICAgICAgICAgICAgciJ+IikKIAogQnJhY2tldCA9ICdbXVsoKXt9XScKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3B5dHJlZS5weSBiL0xpYi9saWIydG8zL3B5dHJlZS5weQppbmRleCAxN2NiZjBhLi5hZDM1OTJjIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy9weXRyZWUucHkKKysrIGIvTGliL2xpYjJ0bzMvcHl0cmVlLnB5CkBAIC02NCwxNiArNjQsNiBAQAogCiAgICAgX19oYXNoX18gPSBOb25lICMgRm9yIFB5MyBjb21wYXRpYmlsaXR5LgogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICIiIgotICAgICAgICBDb21wYXJlIHR3byBub2RlcyBmb3IgaW5lcXVhbGl0eS4KLQotICAgICAgICBUaGlzIGNhbGxzIHRoZSBtZXRob2QgX2VxKCkuCi0gICAgICAgICIiIgotICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBub3Qgb3RoZXIuX19jbGFzc19fOgotICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCi0gICAgICAgIHJldHVybiBub3Qgc2VsZi5fZXEob3RoZXIpCi0KICAgICBkZWYgX2VxKHNlbGYsIG90aGVyKToKICAgICAgICAgIiIiCiAgICAgICAgIENvbXBhcmUgdHdvIG5vZGVzIGZvciBlcXVhbGl0eS4KQEAgLTE5NCw4ICsxODQsNyBAQAogCiAgICAgZGVmIGxlYXZlcyhzZWxmKToKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3IgeCBpbiBjaGlsZC5sZWF2ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB4CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNoaWxkLmxlYXZlcygpCiAKICAgICBkZWYgZGVwdGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYucGFyZW50IGlzIE5vbmU6CkBAIC0yNzQsMTYgKzI2MywxNCBAQAogICAgIGRlZiBwb3N0X29yZGVyKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYSBwb3N0LW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgZm9yIGNoaWxkIGluIHNlbGYuY2hpbGRyZW46Ci0gICAgICAgICAgICBmb3Igbm9kZSBpbiBjaGlsZC5wb3N0X29yZGVyKCk6Ci0gICAgICAgICAgICAgICAgeWllbGQgbm9kZQorICAgICAgICAgICAgeWllbGQgZnJvbSBjaGlsZC5wb3N0X29yZGVyKCkKICAgICAgICAgeWllbGQgc2VsZgogCiAgICAgZGVmIHByZV9vcmRlcihzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgcHJlLW9yZGVyIGl0ZXJhdG9yIGZvciB0aGUgdHJlZS4iIiIKICAgICAgICAgeWllbGQgc2VsZgogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciBub2RlIGluIGNoaWxkLnByZV9vcmRlcigpOgotICAgICAgICAgICAgICAgIHlpZWxkIG5vZGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY2hpbGQucHJlX29yZGVyKCkKIAogICAgIGRlZiBfcHJlZml4X2dldHRlcihzZWxmKToKICAgICAgICAgIiIiCmRpZmYgLS1naXQgYS9MaWIvbGliMnRvMy9yZWZhY3Rvci5weSBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CmluZGV4IDIwMWUxOTMuLmFkZjk5OTYgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CisrKyBiL0xpYi9saWIydG8zL3JlZmFjdG9yLnB5CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgICMgQWx3YXlzIHJldHVybiBsZWFmcwogICAgICAgICBpZiBwYXQudHlwZSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgX0V2ZXJ5Tm9kZQotICAgICAgICByZXR1cm4gc2V0KFtwYXQudHlwZV0pCisgICAgICAgIHJldHVybiB7cGF0LnR5cGV9CiAKICAgICBpZiBpc2luc3RhbmNlKHBhdCwgcHl0cmVlLk5lZ2F0ZWRQYXR0ZXJuKToKICAgICAgICAgaWYgcGF0LmNvbnRlbnQ6CkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICBkZWYgYWR2YW5jZSgpOgogICAgICAgICB0b2sgPSBuZXh0KGdlbikKICAgICAgICAgcmV0dXJuIHRva1swXSwgdG9rWzFdCi0gICAgaWdub3JlID0gZnJvemVuc2V0KCh0b2tlbi5ORVdMSU5FLCB0b2tlbml6ZS5OTCwgdG9rZW4uQ09NTUVOVCkpCisgICAgaWdub3JlID0gZnJvemVuc2V0KHt0b2tlbi5ORVdMSU5FLCB0b2tlbml6ZS5OTCwgdG9rZW4uQ09NTUVOVH0pCiAgICAgZmVhdHVyZXMgPSBzZXQoKQogICAgIHRyeToKICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTI1NSw3ICsyNTUsNyBAQAogICAgICAgICAgICAgZml4ZXIgPSBmaXhfY2xhc3Moc2VsZi5vcHRpb25zLCBzZWxmLmZpeGVyX2xvZykKICAgICAgICAgICAgIGlmIGZpeGVyLmV4cGxpY2l0IGFuZCBzZWxmLmV4cGxpY2l0IGlzIG5vdCBUcnVlIGFuZCBcCiAgICAgICAgICAgICAgICAgICAgIGZpeF9tb2RfcGF0aCBub3QgaW4gc2VsZi5leHBsaWNpdDoKLSAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJTa2lwcGluZyBpbXBsaWNpdCBmaXhlcjogJXMiLCBmaXhfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmxvZ19tZXNzYWdlKCJTa2lwcGluZyBvcHRpb25hbCBmaXhlcjogJXMiLCBmaXhfbmFtZSkKICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICBzZWxmLmxvZ19kZWJ1ZygiQWRkaW5nIHRyYW5zZm9ybWF0aW9uOiAlcyIsIGZpeF9uYW1lKQpAQCAtMzI2LDcgKzMyNiw3IEBACiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInJiIikKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3Qgb3BlbiAlczogJXMiLCBmaWxlbmFtZSwgZXJyKQogICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKICAgICAgICAgdHJ5OgpAQCAtNTM0LDEyICs1MzQsMTIgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBfb3Blbl93aXRoX2VuY29kaW5nKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzZWxmLmxvZ19lcnJvcigiQ2FuJ3QgY3JlYXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZi53cml0ZShfdG9fc3lzdGVtX25ld2xpbmVzKG5ld190ZXh0KSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5sb2dfZXJyb3IoIkNhbid0IHdyaXRlICVzOiAlcyIsIGZpbGVuYW1lLCBlcnIpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL19faW5pdF9fLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvX19pbml0X18ucHkKaW5kZXggY2ZhZWEwZC4uYzUxNjZmYyAxMDA2NDQKLS0tIGEvTGliL2xpYjJ0bzMvdGVzdHMvX19pbml0X18ucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvX19pbml0X18ucHkKQEAgLTEsMjQgKzEsOSBAQAotIiIiTWFrZSB0ZXN0cy8gaW50byBhIHBhY2thZ2UuIFRoaXMgYWxsb3dzIHVzIHRvICJpbXBvcnQgdGVzdHMiIGFuZAotaGF2ZSB0ZXN0cy5hbGxfdGVzdHMgYmUgYSBUZXN0U3VpdGUgcmVwcmVzZW50aW5nIGFsbCB0ZXN0IGNhc2VzCi1mcm9tIGFsbCB0ZXN0XyoucHkgZmlsZXMgaW4gdGVzdHMvLiIiIgogIyBBdXRob3I6IENvbGxpbiBXaW50ZXIKIAogaW1wb3J0IG9zCi1pbXBvcnQgb3MucGF0aAogaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgdHlwZXMKIAotZnJvbSAuIGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLWFsbF90ZXN0cyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0KLXRlc3RzX2RpciA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnLi4nLCAndGVzdHMnKQotdGVzdHMgPSBbdFswOi0zXSBmb3IgdCBpbiBvcy5saXN0ZGlyKHRlc3RzX2RpcikKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHQuc3RhcnRzd2l0aCgndGVzdF8nKSBhbmQgdC5lbmRzd2l0aCgnLnB5JyldCi0KLWxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCi1mb3IgdCBpbiB0ZXN0czoKLSAgICBfX2ltcG9ydF9fKCIiLGdsb2JhbHMoKSxsb2NhbHMoKSxbdF0sbGV2ZWw9MSkKLSAgICBtb2QgPSBnbG9iYWxzKClbdF0KLSAgICBhbGxfdGVzdHMuYWRkVGVzdHMobG9hZGVyLmxvYWRUZXN0c0Zyb21Nb2R1bGUobW9kKSkKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvX19tYWluX18ucHkgYi9MaWIvbGliMnRvMy90ZXN0cy9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGEyM2EyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weSBiL0xpYi9saWIydG8zL3Rlc3RzL3B5dHJlZV9pZGVtcG90ZW5jeS5weQppbmRleCBhMDJiYmZlLi5jNjM1OWJmIDEwMDc1NQotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy9weXRyZWVfaWRlbXBvdGVuY3kucHkKKysrIGIvTGliL2xpYjJ0bzMvdGVzdHMvcHl0cmVlX2lkZW1wb3RlbmN5LnB5CkBAIC00LDYgKzQsOCBAQAogCiAiIiJNYWluIHByb2dyYW0gZm9yIHRlc3RpbmcgdGhlIGluZnJhc3RydWN0dXJlLiIiIgogCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCisKIF9fYXV0aG9yX18gPSAiR3VpZG8gdmFuIFJvc3N1bSA8Z3VpZG9AcHl0aG9uLm9yZz4iCiAKICMgU3VwcG9ydCBpbXBvcnRzIChuZWVkIHRvIGJlIGltcG9ydGVkIGZpcnN0KQpAQCAtNTMsNyArNTUsNyBAQAogICAgIGZvciBkaXIgaW4gc3lzLnBhdGg6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBwcmludCgiU2Nhbm5pbmciLCBkaXIsICIuLi4iLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgICAgIGZvciBuYW1lIGluIG5hbWVzOgpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9hbGxfZml4ZXJzLnB5IGIvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9hbGxfZml4ZXJzLnB5CmluZGV4IGY2NGIzZDkuLjE1MDc5ZmUgMTAwNjQ0Ci0tLSBhL0xpYi9saWIydG8zL3Rlc3RzL3Rlc3RfYWxsX2ZpeGVycy5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2FsbF9maXhlcnMucHkKQEAgLTcsMTIgKzcsMTQgQEAKIAogIyBQeXRob24gaW1wb3J0cwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVzdC5zdXBwb3J0CiAKICMgTG9jYWwgaW1wb3J0cwogZnJvbSBsaWIydG8zIGltcG9ydCByZWZhY3RvcgogZnJvbSAuIGltcG9ydCBzdXBwb3J0CiAKIAorQHRlc3Quc3VwcG9ydC5yZXF1aXJlc19yZXNvdXJjZSgnY3B1JykKIGNsYXNzIFRlc3RfYWxsKHN1cHBvcnQuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMjEsMyArMjMsNiBAQAogICAgIGRlZiB0ZXN0X2FsbF9wcm9qZWN0X2ZpbGVzKHNlbGYpOgogICAgICAgICBmb3IgZmlsZXBhdGggaW4gc3VwcG9ydC5hbGxfcHJvamVjdF9maWxlcygpOgogICAgICAgICAgICAgc2VsZi5yZWZhY3Rvci5yZWZhY3Rvcl9maWxlKGZpbGVwYXRoKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9maXhlcnMucHkgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQppbmRleCAyZjA4ZjkzLi4wNmIwMDMzIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X2ZpeGVycy5weQpAQCAtMjgyLDYgKzI4Miw2NSBAQAogICAgICAgICBiID0gIiIiZigqYXJncywgKiprd2RzKSIiIgogICAgICAgICBzZWxmLmNoZWNrKGEsIGIpCiAKK2NsYXNzIFRlc3RfcmVsb2FkKEZpeGVyVGVzdENhc2UpOgorICAgIGZpeGVyID0gInJlbG9hZCIKKworICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICBiID0gIiIicmVsb2FkKGEpIiIiCisgICAgICAgIGEgPSAiIiJpbXBvcnQgaW1wXG5pbXAucmVsb2FkKGEpIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X2NvbW1lbnQoc2VsZik6CisgICAgICAgIGIgPSAiIiJyZWxvYWQoIGEgKSAjIGNvbW1lbnQiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoIGEgKSAjIGNvbW1lbnQiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgICAgICMgUEVQIDggY29tbWVudHMKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSApICAjIGNvbW1lbnQiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoIGEgKSAgIyBjb21tZW50IiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X3NwYWNlKHNlbGYpOgorICAgICAgICBiID0gIiIicmVsb2FkKCBhICkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoIGEgKSIiIgorICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisKKyAgICAgICAgYiA9ICIiInJlbG9hZCggYSkiIiIKKyAgICAgICAgYSA9ICIiImltcG9ydCBpbXBcbmltcC5yZWxvYWQoIGEpIiIiCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgICAgICBiID0gIiIicmVsb2FkKGEgKSIiIgorICAgICAgICBhID0gIiIiaW1wb3J0IGltcFxuaW1wLnJlbG9hZChhICkiIiIKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgorICAgICAgICBzID0gIiIicmVsb2FkKGE9MSkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsIGcpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZChmLCAqaCkiIiIKKyAgICAgICAgc2VsZi51bmNoYW5nZWQocykKKworICAgICAgICBzID0gIiIicmVsb2FkKGYsICpoLCAqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZChmLCAqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgqaCwgKippKSIiIgorICAgICAgICBzZWxmLnVuY2hhbmdlZChzKQorCisgICAgICAgIHMgPSAiIiJyZWxvYWQoKmgpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgqKmkpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKyAgICAgICAgcyA9ICIiInJlbG9hZCgpIiIiCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKIGNsYXNzIFRlc3RfaW50ZXJuKEZpeGVyVGVzdENhc2UpOgogICAgIGZpeGVyID0gImludGVybiIKIApAQCAtNDU3NiwzICs0NjM1LDUzIEBACiAgICAgZGVmIHRlc3RfdW5jaGFuZ2VkKHNlbGYpOgogICAgICAgICBzID0gIiIiZihzeXMuZXhpdGZ1bmMpIiIiCiAgICAgICAgIHNlbGYudW5jaGFuZ2VkKHMpCisKKworY2xhc3MgVGVzdF9hc3NlcnRzKEZpeGVyVGVzdENhc2UpOgorCisgICAgZml4ZXIgPSAiYXNzZXJ0cyIKKworICAgIGRlZiB0ZXN0X2RlcHJlY2F0ZWRfbmFtZXMoc2VsZik6CisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKCdzZWxmLmFzc2VydF8oVHJ1ZSknLCAnc2VsZi5hc3NlcnRUcnVlKFRydWUpJyksCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0RXF1YWxzKDIsIDIpJywgJ3NlbGYuYXNzZXJ0RXF1YWwoMiwgMiknKSwKKyAgICAgICAgICAgICgnc2VsZi5hc3NlcnROb3RFcXVhbHMoMiwgMyknLCAnc2VsZi5hc3NlcnROb3RFcXVhbCgyLCAzKScpLAorICAgICAgICAgICAgKCdzZWxmLmFzc2VydEFsbW9zdEVxdWFscygyLCAzKScsICdzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDIsIDMpJyksCisgICAgICAgICAgICAoJ3NlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWxzKDIsIDgpJywgJ3NlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMiwgOCknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsVW5sZXNzRXF1YWwoMiwgMiknLCAnc2VsZi5hc3NlcnRFcXVhbCgyLCAyKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxJZkVxdWFsKDIsIDMpJywgJ3NlbGYuYXNzZXJ0Tm90RXF1YWwoMiwgMyknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsVW5sZXNzQWxtb3N0RXF1YWwoMiwgMyknLCAnc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgyLCAzKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxJZkFsbW9zdEVxdWFsKDIsIDgpJywgJ3NlbGYuYXNzZXJ0Tm90QWxtb3N0RXF1YWwoMiwgOCknKSwKKyAgICAgICAgICAgICgnc2VsZi5mYWlsVW5sZXNzKFRydWUpJywgJ3NlbGYuYXNzZXJ0VHJ1ZShUcnVlKScpLAorICAgICAgICAgICAgKCdzZWxmLmZhaWxVbmxlc3NSYWlzZXMoZm9vKScsICdzZWxmLmFzc2VydFJhaXNlcyhmb28pJyksCisgICAgICAgICAgICAoJ3NlbGYuZmFpbElmKEZhbHNlKScsICdzZWxmLmFzc2VydEZhbHNlKEZhbHNlKScpLAorICAgICAgICBdCisgICAgICAgIGZvciBiLCBhIGluIHRlc3RzOgorICAgICAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorCisgICAgZGVmIHRlc3RfdmFyaWFudHMoc2VsZik6CisgICAgICAgIGIgPSAnZXEgPSBzZWxmLmFzc2VydEVxdWFscycKKyAgICAgICAgYSA9ICdlcSA9IHNlbGYuYXNzZXJ0RXF1YWwnCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICdzZWxmLmFzc2VydEVxdWFscygyLCAzLCBtc2c9ImZhaWwiKScKKyAgICAgICAgYSA9ICdzZWxmLmFzc2VydEVxdWFsKDIsIDMsIG1zZz0iZmFpbCIpJworICAgICAgICBzZWxmLmNoZWNrKGIsIGEpCisgICAgICAgIGIgPSAnc2VsZi5hc3NlcnRFcXVhbHMoMiwgMywgbXNnPSJmYWlsIikgIyBmb28nCisgICAgICAgIGEgPSAnc2VsZi5hc3NlcnRFcXVhbCgyLCAzLCBtc2c9ImZhaWwiKSAjIGZvbycKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJ3NlbGYuYXNzZXJ0RXF1YWxzICgyLCAzKScKKyAgICAgICAgYSA9ICdzZWxmLmFzc2VydEVxdWFsICgyLCAzKScKKyAgICAgICAgc2VsZi5jaGVjayhiLCBhKQorICAgICAgICBiID0gJyAgc2VsZi5hc3NlcnRFcXVhbHMgKDIsIDMpJworICAgICAgICBhID0gJyAgc2VsZi5hc3NlcnRFcXVhbCAoMiwgMyknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICd3aXRoIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhFeHBsb3Npb24pOiBleHBsb2RlKCknCisgICAgICAgIGEgPSAnd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeHBsb3Npb24pOiBleHBsb2RlKCknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKyAgICAgICAgYiA9ICd3aXRoIHNlbGYuZmFpbFVubGVzc1JhaXNlcyhFeHBsb3Npb24pIGFzIGNtOiBleHBsb2RlKCknCisgICAgICAgIGEgPSAnd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeHBsb3Npb24pIGFzIGNtOiBleHBsb2RlKCknCisgICAgICAgIHNlbGYuY2hlY2soYiwgYSkKKworICAgIGRlZiB0ZXN0X3VuY2hhbmdlZChzZWxmKToKKyAgICAgICAgc2VsZi51bmNoYW5nZWQoJ3NlbGYuYXNzZXJ0RXF1YWxzT25TYXR1cmRheScpCisgICAgICAgIHNlbGYudW5jaGFuZ2VkKCdzZWxmLmFzc2VydEVxdWFsc09uU2F0dXJkYXkoMywgNSknKQpkaWZmIC0tZ2l0IGEvTGliL2xpYjJ0bzMvdGVzdHMvdGVzdF9wYXJzZXIucHkgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQppbmRleCBhMzgzYTE0Li41YmI5ZDJiIDEwMDY0NAotLS0gYS9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQorKysgYi9MaWIvbGliMnRvMy90ZXN0cy90ZXN0X3BhcnNlci5weQpAQCAtNDgsNiArNDgsMTkgQEAKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJTeW50YXggc2hvdWxkbid0IGhhdmUgYmVlbiB2YWxpZCIpCiAKIAorY2xhc3MgVGVzdE1hdHJpeE11bHRpcGxpY2F0aW9uKEdyYW1tYXJUZXN0KToKKyAgICBkZWYgdGVzdF9tYXRyaXhfbXVsdGlwbGljYXRpb25fb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYudmFsaWRhdGUoImEgQCBiIikKKyAgICAgICAgc2VsZi52YWxpZGF0ZSgiYSBAPSBiIikKKworCitjbGFzcyBUZXN0WWllbGRGcm9tKEdyYW1tYXJUZXN0KToKKyAgICBkZWYgdGVzdF9tYXRyaXhfbXVsdGlwbGljYXRpb25fb3BlcmF0b3Ioc2VsZik6CisgICAgICAgIHNlbGYudmFsaWRhdGUoInlpZWxkIGZyb20geCIpCisgICAgICAgIHNlbGYudmFsaWRhdGUoIih5aWVsZCBmcm9tIHgpICsgeSIpCisgICAgICAgIHNlbGYuaW52YWxpZF9zeW50YXgoInlpZWxkIGZyb20iKQorCisKIGNsYXNzIFRlc3RSYWlzZUNoYW5nZXMoR3JhbW1hclRlc3QpOgogICAgIGRlZiB0ZXN0XzJ4X3N0eWxlXzEoc2VsZik6CiAgICAgICAgIHNlbGYudmFsaWRhdGUoInJhaXNlIikKQEAgLTc3LDcgKzkwLDcgQEAKICAgICAgICAgc2VsZi5pbnZhbGlkX3N5bnRheCgicmFpc2UgRSBmcm9tIikKIAogCi0jIEFkYXB0YXRlZCBmcm9tIFB5dGhvbiAzJ3MgTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5OkdyYW1tYXJUZXN0cy50ZXN0RnVuY2RlZgorIyBBZGFwdGVkIGZyb20gUHl0aG9uIDMncyBMaWIvdGVzdC90ZXN0X2dyYW1tYXIucHk6R3JhbW1hclRlc3RzLnRlc3RGdW5jZGVmCiBjbGFzcyBUZXN0RnVuY3Rpb25Bbm5vdGF0aW9ucyhHcmFtbWFyVGVzdCk6CiAgICAgZGVmIHRlc3RfMShzZWxmKToKICAgICAgICAgc2VsZi52YWxpZGF0ZSgiIiJkZWYgZih4KSAtPiBsaXN0OiBwYXNzIiIiKQpkaWZmIC0tZ2l0IGEvTGliL2xpbmVjYWNoZS5weSBiL0xpYi9saW5lY2FjaGUucHkKaW5kZXggYzNmMmMzZi4uODg0Y2JmNCAxMDA2NDQKLS0tIGEvTGliL2xpbmVjYWNoZS5weQorKysgYi9MaWIvbGluZWNhY2hlLnB5CkBAIC0xLDQgKzEsNCBAQAotIiIiQ2FjaGUgbGluZXMgZnJvbSBmaWxlcy4KKyIiIkNhY2hlIGxpbmVzIGZyb20gUHl0aG9uIHNvdXJjZSBmaWxlcy4KIAogVGhpcyBpcyBpbnRlbmRlZCB0byByZWFkIGxpbmVzIGZyb20gbW9kdWxlcyBpbXBvcnRlZCAtLSBoZW5jZSBpZiBhIGZpbGVuYW1lCiBpcyBub3QgZm91bmQsIGl0IHdpbGwgbG9vayBkb3duIHRoZSBtb2R1bGUgc2VhcmNoIHBhdGggZm9yIGEgZmlsZSBieQpAQCAtMzIsMTMgKzMyLDE3IEBACiAKIAogZGVmIGdldGxpbmVzKGZpbGVuYW1lLCBtb2R1bGVfZ2xvYmFscz1Ob25lKToKLSAgICAiIiJHZXQgdGhlIGxpbmVzIGZvciBhIGZpbGUgZnJvbSB0aGUgY2FjaGUuCisgICAgIiIiR2V0IHRoZSBsaW5lcyBmb3IgYSBQeXRob24gc291cmNlIGZpbGUgZnJvbSB0aGUgY2FjaGUuCiAgICAgVXBkYXRlIHRoZSBjYWNoZSBpZiBpdCBkb2Vzbid0IGNvbnRhaW4gYW4gZW50cnkgZm9yIHRoaXMgZmlsZSBhbHJlYWR5LiIiIgogCiAgICAgaWYgZmlsZW5hbWUgaW4gY2FjaGU6CiAgICAgICAgIHJldHVybiBjYWNoZVtmaWxlbmFtZV1bMl0KLSAgICBlbHNlOgorCisgICAgdHJ5OgogICAgICAgICByZXR1cm4gdXBkYXRlY2FjaGUoZmlsZW5hbWUsIG1vZHVsZV9nbG9iYWxzKQorICAgIGV4Y2VwdCBNZW1vcnlFcnJvcjoKKyAgICAgICAgY2xlYXJjYWNoZSgpCisgICAgICAgIHJldHVybiBbXQogCiAKIGRlZiBjaGVja2NhY2hlKGZpbGVuYW1lPU5vbmUpOgpAQCAtNTksNyArNjMsNyBAQAogICAgICAgICAgICAgY29udGludWUgICAjIG5vLW9wIGZvciBmaWxlcyBsb2FkZWQgdmlhIGEgX19sb2FkZXJfXwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdGF0ID0gb3Muc3RhdChmdWxsbmFtZSkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGRlbCBjYWNoZVtmaWxlbmFtZV0KICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIHNpemUgIT0gc3RhdC5zdF9zaXplIG9yIG10aW1lICE9IHN0YXQuc3RfbXRpbWU6CkBAIC05MSw3ICs5NSw3IEBACiAgICAgICAgICAgICBpZiBuYW1lIGFuZCBnZXRfc291cmNlOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGdldF9zb3VyY2UobmFtZSkKLSAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKQEAgLTExOCwxNCArMTIyLDE0IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3RhdCA9IG9zLnN0YXQoZnVsbG5hbWUpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBbXQogICAgIHRyeToKICAgICAgICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZ1bGxuYW1lKSBhcyBmcDoKICAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIFtdCiAgICAgaWYgbGluZXMgYW5kIG5vdCBsaW5lc1stMV0uZW5kc3dpdGgoJ1xuJyk6CiAgICAgICAgIGxpbmVzWy0xXSArPSAnXG4nCmRpZmYgLS1naXQgYS9MaWIvbG9jYWxlLnB5IGIvTGliL2xvY2FsZS5weQppbmRleCA3Y2ZlYTYxLi43ZmY0MzU2IDEwMDY0NAotLS0gYS9MaWIvbG9jYWxlLnB5CisrKyBiL0xpYi9sb2NhbGUucHkKQEAgLTM0NCwxNCArMzQ0LDMyIEBACiAgICAgIyBDb252ZXJ0IHRoZSBlbmNvZGluZyB0byBhIEMgbGliIGNvbXBhdGlibGUgZW5jb2Rpbmcgc3RyaW5nCiAgICAgbm9ybV9lbmNvZGluZyA9IGVuY29kaW5ncy5ub3JtYWxpemVfZW5jb2RpbmcoZW5jb2RpbmcpCiAgICAgI3ByaW50KCdub3JtIGVuY29kaW5nOiAlcicgJSBub3JtX2VuY29kaW5nKQotICAgIG5vcm1fZW5jb2RpbmcgPSBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzLmdldChub3JtX2VuY29kaW5nLAorICAgIG5vcm1fZW5jb2RpbmcgPSBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzLmdldChub3JtX2VuY29kaW5nLmxvd2VyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1fZW5jb2RpbmcpCiAgICAgI3ByaW50KCdhbGlhc2VkIGVuY29kaW5nOiAlcicgJSBub3JtX2VuY29kaW5nKQotICAgIGVuY29kaW5nID0gbG9jYWxlX2VuY29kaW5nX2FsaWFzLmdldChub3JtX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtX2VuY29kaW5nKQorICAgIGVuY29kaW5nID0gbm9ybV9lbmNvZGluZworICAgIG5vcm1fZW5jb2RpbmcgPSBub3JtX2VuY29kaW5nLmxvd2VyKCkKKyAgICBpZiBub3JtX2VuY29kaW5nIGluIGxvY2FsZV9lbmNvZGluZ19hbGlhczoKKyAgICAgICAgZW5jb2RpbmcgPSBsb2NhbGVfZW5jb2RpbmdfYWxpYXNbbm9ybV9lbmNvZGluZ10KKyAgICBlbHNlOgorICAgICAgICBub3JtX2VuY29kaW5nID0gbm9ybV9lbmNvZGluZy5yZXBsYWNlKCdfJywgJycpCisgICAgICAgIG5vcm1fZW5jb2RpbmcgPSBub3JtX2VuY29kaW5nLnJlcGxhY2UoJy0nLCAnJykKKyAgICAgICAgaWYgbm9ybV9lbmNvZGluZyBpbiBsb2NhbGVfZW5jb2RpbmdfYWxpYXM6CisgICAgICAgICAgICBlbmNvZGluZyA9IGxvY2FsZV9lbmNvZGluZ19hbGlhc1tub3JtX2VuY29kaW5nXQogICAgICNwcmludCgnZm91bmQgZW5jb2RpbmcgJXInICUgZW5jb2RpbmcpCiAgICAgcmV0dXJuIGxhbmduYW1lICsgJy4nICsgZW5jb2RpbmcKIAorZGVmIF9hcHBlbmRfbW9kaWZpZXIoY29kZSwgbW9kaWZpZXIpOgorICAgIGlmIG1vZGlmaWVyID09ICdldXJvJzoKKyAgICAgICAgaWYgJy4nIG5vdCBpbiBjb2RlOgorICAgICAgICAgICAgcmV0dXJuIGNvZGUgKyAnLklTTzg4NTktMTUnCisgICAgICAgIF8sIF8sIGVuY29kaW5nID0gY29kZS5wYXJ0aXRpb24oJy4nKQorICAgICAgICBpZiBlbmNvZGluZyBpbiAoJ0lTTzg4NTktMTUnLCAnVVRGLTgnKToKKyAgICAgICAgICAgIHJldHVybiBjb2RlCisgICAgICAgIGlmIGVuY29kaW5nID09ICdJU084ODU5LTEnOgorICAgICAgICAgICAgcmV0dXJuIF9yZXBsYWNlX2VuY29kaW5nKGNvZGUsICdJU084ODU5LTE1JykKKyAgICByZXR1cm4gY29kZSArICdAJyArIG1vZGlmaWVyCisKIGRlZiBub3JtYWxpemUobG9jYWxlbmFtZSk6CiAKICAgICAiIiIgUmV0dXJucyBhIG5vcm1hbGl6ZWQgbG9jYWxlIGNvZGUgZm9yIHRoZSBnaXZlbiBsb2NhbGUKQEAgLTQwMyw3ICs0MjEsNyBAQAogICAgICAgICBpZiBjb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgI3ByaW50KCdsb29rdXAgd2l0aG91dCBtb2RpZmllciBzdWNjZWVkZWQnKQogICAgICAgICAgICAgaWYgJ0AnIG5vdCBpbiBjb2RlOgotICAgICAgICAgICAgICAgIHJldHVybiBjb2RlICsgJ0AnICsgbW9kaWZpZXIKKyAgICAgICAgICAgICAgICByZXR1cm4gX2FwcGVuZF9tb2RpZmllcihjb2RlLCBtb2RpZmllcikKICAgICAgICAgICAgIGlmIGNvZGUuc3BsaXQoJ0AnLCAxKVsxXS5sb3dlcigpID09IG1vZGlmaWVyOgogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlCiAgICAgICAgICNwcmludCgnc2Vjb25kIGxvb2t1cCBmYWlsZWQnKQpAQCAtNDI3LDcgKzQ0NSw4IEBACiAgICAgICAgICAgICBpZiBjb2RlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICNwcmludCgnbG9va3VwIHdpdGhvdXQgbW9kaWZpZXIgYW5kIGVuY29kaW5nIHN1Y2NlZWRlZCcpCiAgICAgICAgICAgICAgICAgaWYgJ0AnIG5vdCBpbiBjb2RlOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3JlcGxhY2VfZW5jb2RpbmcoY29kZSwgZW5jb2RpbmcpICsgJ0AnICsgbW9kaWZpZXIKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IF9yZXBsYWNlX2VuY29kaW5nKGNvZGUsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2FwcGVuZF9tb2RpZmllcihjb2RlLCBtb2RpZmllcikKICAgICAgICAgICAgICAgICBjb2RlLCBkZWZtb2QgPSBjb2RlLnNwbGl0KCdAJywgMSkKICAgICAgICAgICAgICAgICBpZiBkZWZtb2QubG93ZXIoKSA9PSBtb2RpZmllcjoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9yZXBsYWNlX2VuY29kaW5nKGNvZGUsIGVuY29kaW5nKSArICdAJyArIGRlZm1vZApAQCAtNTg2LDggKzYwNSw4IEBACiAgICAgIyBPbiBXaW4zMiwgdGhpcyB3aWxsIHJldHVybiB0aGUgQU5TSSBjb2RlIHBhZ2UKICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlID0gVHJ1ZSk6CiAgICAgICAgICIiIlJldHVybiB0aGUgY2hhcnNldCB0aGF0IHRoZSB1c2VyIGlzIGxpa2VseSB1c2luZy4iIiIKLSAgICAgICAgaW1wb3J0IF9sb2NhbGUKLSAgICAgICAgcmV0dXJuIF9sb2NhbGUuX2dldGRlZmF1bHRsb2NhbGUoKVsxXQorICAgICAgICBpbXBvcnQgX2Jvb3Rsb2NhbGUKKyAgICAgICAgcmV0dXJuIF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQogZWxzZToKICAgICAjIE9uIFVuaXgsIGlmIENPREVTRVQgaXMgYXZhaWxhYmxlLCB1c2UgdGhhdC4KICAgICB0cnk6CkBAIC02MDYsMjcgKzYyNSwxNiBAQAogICAgICAgICBkZWYgZ2V0cHJlZmVycmVkZW5jb2RpbmcoZG9fc2V0bG9jYWxlID0gVHJ1ZSk6CiAgICAgICAgICAgICAiIiJSZXR1cm4gdGhlIGNoYXJzZXQgdGhhdCB0aGUgdXNlciBpcyBsaWtlbHkgdXNpbmcsCiAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uLiIiIgorICAgICAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlCiAgICAgICAgICAgICBpZiBkb19zZXRsb2NhbGU6CiAgICAgICAgICAgICAgICAgb2xkbG9jID0gc2V0bG9jYWxlKExDX0NUWVBFKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX0NUWVBFLCAiIikKICAgICAgICAgICAgICAgICBleGNlcHQgRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBubF9sYW5naW5mbyhDT0RFU0VUKQotICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICAgICAgICAgIyBubF9sYW5naW5mbyBjYW4gcmV0dXJuIGFuIGVtcHR5IHN0cmluZwotICAgICAgICAgICAgICAgICAgICAjIHdoZW4gdGhlIHNldHRpbmcgaGFzIGFuIGludmFsaWQgdmFsdWUuCi0gICAgICAgICAgICAgICAgICAgICMgRGVmYXVsdCB0byBVVEYtOCBpbiB0aGF0IGNhc2UgYmVjYXVzZQotICAgICAgICAgICAgICAgICAgICAjIFVURi04IGlzIHRoZSBkZWZhdWx0IGNoYXJzZXQgb24gT1NYIGFuZAotICAgICAgICAgICAgICAgICAgICAjIHJldHVybmluZyBub3RoaW5nIHdpbGwgY3Jhc2ggdGhlCi0gICAgICAgICAgICAgICAgICAgICMgaW50ZXJwcmV0ZXIuCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdVVEYtOCcKKyAgICAgICAgICAgIHJlc3VsdCA9IF9ib290bG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQorICAgICAgICAgICAgaWYgZG9fc2V0bG9jYWxlOgogICAgICAgICAgICAgICAgIHNldGxvY2FsZShMQ19DVFlQRSwgb2xkbG9jKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBubF9sYW5naW5mbyhDT0RFU0VUKQotICAgICAgICAgICAgICAgIGlmIG5vdCByZXN1bHQgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgICAgICAgICAgIyBTZWUgYWJvdmUgZm9yIGV4cGxhbmF0aW9uCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9ICdVVEYtOCcKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogCkBAIC02NTQsNiArNjYyLDE0IEBACiAgICAgJ2ppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnSklTNycsCiAgICAgJ2ppczcnOiAgICAgICAgICAgICAgICAgICAgICAgICAnSklTNycsCiAgICAgJ2FqZWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZXVjSlAnLAorICAgICdrb2k4Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgJ0tPSTgtQycsCisgICAgJ21pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAnQ1AxMjUxJywKKyAgICAnbWljcm9zb2Z0Y3AxMjU1JzogICAgICAgICAgICAgICdDUDEyNTUnLAorICAgICdtaWNyb3NvZnRjcDEyNTYnOiAgICAgICAgICAgICAgJ0NQMTI1NicsCisgICAgJzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xJywKKyAgICAnODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgICdJU084ODU5LTInLAorICAgICc4ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAgJ0lTTzg4NTktNScsCisgICAgJzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xNScsCiAKICAgICAjIE1hcHBpbmdzIGZyb20gUHl0aG9uIGNvZGVjIG5hbWVzIHRvIEMgbGliIGVuY29kaW5nIG5hbWVzCiAgICAgJ2FzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAnSVNPODg1OS0xJywKQEAgLTY4MSwxMCArNjk3LDE4IEBACiAgICAgJ3V0Zl84JzogICAgICAgICAgICAgICAgICAgICAgICAnVVRGLTgnLAogICAgICdrb2k4X3InOiAgICAgICAgICAgICAgICAgICAgICAgJ0tPSTgtUicsCiAgICAgJ2tvaThfdSc6ICAgICAgICAgICAgICAgICAgICAgICAnS09JOC1VJywKKyAgICAnY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICdDUDEyNTEnLAorICAgICdjcDEyNTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ0NQMTI1NScsCisgICAgJ2NwMTI1Nic6ICAgICAgICAgICAgICAgICAgICAgICAnQ1AxMjU2JywKKwogICAgICMgWFhYIFRoaXMgbGlzdCBpcyBzdGlsbCBpbmNvbXBsZXRlLiBJZiB5b3Uga25vdyBtb3JlCiAgICAgIyBtYXBwaW5ncywgcGxlYXNlIGZpbGUgYSBidWcgcmVwb3J0LiBUaGFua3MuCiB9CiAKK2ZvciBrLCB2IGluIHNvcnRlZChsb2NhbGVfZW5jb2RpbmdfYWxpYXMuaXRlbXMoKSk6CisgICAgayA9IGsucmVwbGFjZSgnXycsICcnKQorICAgIGxvY2FsZV9lbmNvZGluZ19hbGlhcy5zZXRkZWZhdWx0KGssIHYpCisKICMKICMgVGhlIGxvY2FsZV9hbGlhcyB0YWJsZSBtYXBzIGxvd2VyY2FzZSBhbGlhcyBuYW1lcyB0byBDIGxvY2FsZSBuYW1lcwogIyAoY2FzZS1zZW5zaXRpdmUpLiBFbmNvZGluZ3MgYXJlIGFsd2F5cyBzZXBhcmF0ZWQgZnJvbSB0aGUgbG9jYWxlCkBAIC03OTMsNDQwICs4MTcsMjM3IEBACiAjICAgIHVwZGF0ZWQgJ3NyX2NzJyAtPiAnc3JfUlMuVVRGLTgnIHRvICdzcl9DUy5VVEYtOCcKICMgICAgdXBkYXRlZCAnc3JfY3MudXRmOEBsYXRuJyAtPiAnc3JfUlMuVVRGLThAbGF0aW4nIHRvICdzcl9DUy5VVEYtOEBsYXRpbicKICMgICAgdXBkYXRlZCAnc3JfY3NAbGF0bicgLT4gJ3NyX1JTLlVURi04QGxhdGluJyB0byAnc3JfQ1MuVVRGLThAbGF0aW4nCisjCisjIFNTIDIwMTQtMTAtMDE6CisjIFVwZGF0ZWQgYWxpYXMgbWFwcGluZyB3aXRoIGdsaWJjIDIuMTkgc3VwcG9ydGVkIGxvY2FsZXMuCiAKIGxvY2FsZV9hbGlhcyA9IHsKICAgICAnYTMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLktPSTgtQycsCiAgICAgJ2EzX2F6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5LT0k4LUMnLAotICAgICdhM19hei5rb2k4Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouS09JOC1DJywKICAgICAnYTNfYXoua29pYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLktPSTgtQycsCisgICAgJ2FhX2RqJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhYV9ESi5JU084ODU5LTEnLAorICAgICdhYV9lcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWFfRVIuVVRGLTgnLAorICAgICdhYV9ldCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWFfRVQuVVRGLTgnLAogICAgICdhZic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWZfWkEuSVNPODg1OS0xJywKICAgICAnYWZfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FmX1pBLklTTzg4NTktMScsCi0gICAgJ2FmX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdhZl9aQS5JU084ODU5LTEnLAogICAgICdhbSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW1fRVQuVVRGLTgnLAogICAgICdhbV9ldCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW1fRVQuVVRGLTgnLAogICAgICdhbWVyaWNhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnYW1lcmljYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCisgICAgJ2FuX2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbl9FUy5JU084ODU5LTE1JywKICAgICAnYXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0FBLklTTzg4NTktNicsCiAgICAgJ2FyX2FhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9BQS5JU084ODU5LTYnLAotICAgICdhcl9hYS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKICAgICAnYXJfYWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0FFLklTTzg4NTktNicsCi0gICAgJ2FyX2FlLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9BRS5JU084ODU5LTYnLAogICAgICdhcl9iaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfQkguSVNPODg1OS02JywKLSAgICAnYXJfYmguaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0JILklTTzg4NTktNicsCiAgICAgJ2FyX2R6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9EWi5JU084ODU5LTYnLAotICAgICdhcl9kei5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfRFouSVNPODg1OS02JywKICAgICAnYXJfZWcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0VHLklTTzg4NTktNicsCi0gICAgJ2FyX2VnLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9FRy5JU084ODU5LTYnLAogICAgICdhcl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfSU4uVVRGLTgnLAogICAgICdhcl9pcSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfSVEuSVNPODg1OS02JywKLSAgICAnYXJfaXEuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0lRLklTTzg4NTktNicsCiAgICAgJ2FyX2pvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9KTy5JU084ODU5LTYnLAotICAgICdhcl9qby5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfSk8uSVNPODg1OS02JywKICAgICAnYXJfa3cnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0tXLklTTzg4NTktNicsCi0gICAgJ2FyX2t3Lmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9LVy5JU084ODU5LTYnLAogICAgICdhcl9sYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfTEIuSVNPODg1OS02JywKLSAgICAnYXJfbGIuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX0xCLklTTzg4NTktNicsCiAgICAgJ2FyX2x5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9MWS5JU084ODU5LTYnLAotICAgICdhcl9seS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfTFkuSVNPODg1OS02JywKICAgICAnYXJfbWEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX01BLklTTzg4NTktNicsCi0gICAgJ2FyX21hLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9NQS5JU084ODU5LTYnLAogICAgICdhcl9vbSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfT00uSVNPODg1OS02JywKLSAgICAnYXJfb20uaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX09NLklTTzg4NTktNicsCiAgICAgJ2FyX3FhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9RQS5JU084ODU5LTYnLAotICAgICdhcl9xYS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfUUEuSVNPODg1OS02JywKICAgICAnYXJfc2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1NBLklTTzg4NTktNicsCi0gICAgJ2FyX3NhLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9TQS5JU084ODU5LTYnLAogICAgICdhcl9zZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfU0QuSVNPODg1OS02JywKLSAgICAnYXJfc2QuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1NELklTTzg4NTktNicsCiAgICAgJ2FyX3N5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9TWS5JU084ODU5LTYnLAotICAgICdhcl9zeS5pc284ODU5Nic6ICAgICAgICAgICAgICAgICAgICAgICAnYXJfU1kuSVNPODg1OS02JywKICAgICAnYXJfdG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1ROLklTTzg4NTktNicsCi0gICAgJ2FyX3RuLmlzbzg4NTk2JzogICAgICAgICAgICAgICAgICAgICAgICdhcl9UTi5JU084ODU5LTYnLAogICAgICdhcl95ZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXJfWUUuSVNPODg1OS02JywKLSAgICAnYXJfeWUuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAgJ2FyX1lFLklTTzg4NTktNicsCiAgICAgJ2FyYWJpYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcl9BQS5JU084ODU5LTYnLAotICAgICdhcmFiaWMuaXNvODg1OTYnOiAgICAgICAgICAgICAgICAgICAgICAnYXJfQUEuSVNPODg1OS02JywKICAgICAnYXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzX0lOLlVURi04JywKICAgICAnYXNfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzX0lOLlVURi04JywKKyAgICAnYXN0X2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzdF9FUy5JU084ODU5LTE1JywKKyAgICAnYXljX3BlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F5Y19QRS5VVEYtOCcsCiAgICAgJ2F6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhel9BWi5JU084ODU5LTlFJywKICAgICAnYXpfYXonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F6X0FaLklTTzg4NTktOUUnLAogICAgICdhel9hei5pc284ODU5OWUnOiAgICAgICAgICAgICAgICAgICAgICAnYXpfQVouSVNPODg1OS05RScsCiAgICAgJ2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAogICAgICdiZUBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAorICAgICdiZV9iZy51dGY4JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuVVRGLTgnLAogICAgICdiZV9ieSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuQ1AxMjUxJywKLSAgICAnYmVfYnkuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ2JlX0JZLkNQMTI1MScsCi0gICAgJ2JlX2J5Lm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdiZV9CWS5DUDEyNTEnLAotICAgICdiZV9ieS51dGY4QGxhdGluJzogICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAogICAgICdiZV9ieUBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVfQlkuVVRGLThAbGF0aW4nLAorICAgICdiZW1fem0nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmVtX1pNLlVURi04JywKKyAgICAnYmVyX2R6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jlcl9EWi5VVEYtOCcsCisgICAgJ2Jlcl9tYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZXJfTUEuVVRGLTgnLAogICAgICdiZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKICAgICAnYmdfYmcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLkNQMTI1MScsCi0gICAgJ2JnX2JnLmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAotICAgICdiZ19iZy5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuSVNPODg1OS01JywKLSAgICAnYmdfYmcua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JnX0JHLktPSTgtUicsCi0gICAgJ2JnX2JnLm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdiZ19CRy5DUDEyNTEnLAorICAgICdiaG9faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmhvX0lOLlVURi04JywKKyAgICAnYm5fYmQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JuX0JELlVURi04JywKICAgICAnYm5faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JuX0lOLlVURi04JywKKyAgICAnYm9fY24nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvX0NOLlVURi04JywKICAgICAnYm9faW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JvX0lOLlVURi04JywKICAgICAnYm9rbWFsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMScsCiAgICAgJ2Jva21ceGU1bCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTEnLAogICAgICdicic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xJywKICAgICAnYnJfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JyX0ZSLklTTzg4NTktMScsCi0gICAgJ2JyX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5JU084ODU5LTEnLAotICAgICdicl9mci5pc284ODU5MTQnOiAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xNCcsCi0gICAgJ2JyX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdicl9GUi5JU084ODU5LTE1JywKLSAgICAnYnJfZnIuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2JyX0ZSLklTTzg4NTktMTUnLAotICAgICdicl9mci51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuVVRGLTgnLAotICAgICdicl9mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnYnJfRlIuSVNPODg1OS0xNScsCisgICAgJ2JyeF9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdicnhfSU4uVVRGLTgnLAogICAgICdicyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnNfQkEuSVNPODg1OS0yJywKICAgICAnYnNfYmEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JzX0JBLklTTzg4NTktMicsCi0gICAgJ2JzX2JhLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdic19CQS5JU084ODU5LTInLAogICAgICdidWxnYXJpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmdfQkcuQ1AxMjUxJywKKyAgICAnYnluX2VyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J5bl9FUi5VVEYtOCcsCiAgICAgJ2MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnYy1mcmVuY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NBLklTTzg4NTktMScsCi0gICAgJ2MtZnJlbmNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTEnLAogICAgICdjLmFzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ2MuZW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnYy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCisgICAgJ2MudXRmOCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5VVEYtOCcsCiAgICAgJ2NfYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDJywKICAgICAnY19jLmMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0MnLAogICAgICdjYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xJywKICAgICAnY2FfYWQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMScsCi0gICAgJ2NhX2FkLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTEnLAotICAgICdjYV9hZC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY2FfQUQuSVNPODg1OS0xNScsCi0gICAgJ2NhX2FkLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdjYV9BRC5JU084ODU5LTE1JywKLSAgICAnY2FfYWQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELlVURi04JywKLSAgICAnY2FfYWRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0FELklTTzg4NTktMTUnLAogICAgICdjYV9lcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xJywKLSAgICAnY2FfZXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMScsCi0gICAgJ2NhX2VzLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTE1JywKLSAgICAnY2FfZXMuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0VTLklTTzg4NTktMTUnLAotICAgICdjYV9lcy51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuVVRGLTgnLAotICAgICdjYV9lc0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfRVMuSVNPODg1OS0xNScsCisgICAgJ2NhX2VzQHZhbGVuY2lhJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTE1QHZhbGVuY2lhJywKICAgICAnY2FfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMScsCi0gICAgJ2NhX2ZyLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTEnLAotICAgICdjYV9mci5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY2FfRlIuSVNPODg1OS0xNScsCi0gICAgJ2NhX2ZyLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdjYV9GUi5JU084ODU5LTE1JywKLSAgICAnY2FfZnIudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLlVURi04JywKLSAgICAnY2FfZnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0ZSLklTTzg4NTktMTUnLAogICAgICdjYV9pdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xJywKLSAgICAnY2FfaXQuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMScsCi0gICAgJ2NhX2l0Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdjYV9JVC5JU084ODU5LTE1JywKLSAgICAnY2FfaXQuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2NhX0lULklTTzg4NTktMTUnLAotICAgICdjYV9pdC51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuVVRGLTgnLAotICAgICdjYV9pdEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FfSVQuSVNPODg1OS0xNScsCiAgICAgJ2NhdGFsYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYV9FUy5JU084ODU5LTEnLAogICAgICdjZXh0ZW5kJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnY2V4dGVuZC5lbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCiAgICAgJ2NoaW5lc2Utcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5ldWNDTicsCiAgICAgJ2NoaW5lc2UtdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9UVy5ldWNUVycsCisgICAgJ2NyaF91YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmhfVUEuVVRGLTgnLAogICAgICdjcm9hdGlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKICAgICAnY3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2NzX2NzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAotICAgICdjc19jcy5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnY3NfY3onOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCi0gICAgJ2NzX2N6Lmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAorICAgICdjc2JfcGwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NiX1BMLlVURi04JywKKyAgICAnY3ZfcnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N2X1JVLlVURi04JywKICAgICAnY3knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N5X0dCLklTTzg4NTktMScsCiAgICAgJ2N5X2diJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjeV9HQi5JU084ODU5LTEnLAotICAgICdjeV9nYi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnY3lfR0IuSVNPODg1OS0xJywKLSAgICAnY3lfZ2IuaXNvODg1OTE0JzogICAgICAgICAgICAgICAgICAgICAgJ2N5X0dCLklTTzg4NTktMTQnLAotICAgICdjeV9nYi5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnY3lfR0IuSVNPODg1OS0xNScsCi0gICAgJ2N5X2diQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdjeV9HQi5JU084ODU5LTE1JywKICAgICAnY3onOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NzX0NaLklTTzg4NTktMicsCiAgICAgJ2N6X2N6JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjc19DWi5JU084ODU5LTInLAogICAgICdjemVjaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3NfQ1ouSVNPODg1OS0yJywKICAgICAnZGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCi0gICAgJ2RhLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTE1JywKICAgICAnZGFfZGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCi0gICAgJ2RhX2RrLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAotICAgICdkYV9kay44ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCi0gICAgJ2RhX2RrLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAotICAgICdkYV9kay5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xNScsCi0gICAgJ2RhX2RrQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTE1JywKICAgICAnZGFuaXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RhX0RLLklTTzg4NTktMScsCi0gICAgJ2RhbmlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICdkYV9ESy5JU084ODU5LTEnLAogICAgICdkYW5zayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGFfREsuSVNPODg1OS0xJywKICAgICAnZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCi0gICAgJ2RlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKICAgICAnZGVfYXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMScsCi0gICAgJ2RlX2F0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTEnLAotICAgICdkZV9hdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQVQuSVNPODg1OS0xNScsCi0gICAgJ2RlX2F0Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdkZV9BVC5JU084ODU5LTE1JywKLSAgICAnZGVfYXQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULlVURi04JywKLSAgICAnZGVfYXRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0FULklTTzg4NTktMTUnLAogICAgICdkZV9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuSVNPODg1OS0xJywKLSAgICAnZGVfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0JFLklTTzg4NTktMScsCi0gICAgJ2RlX2JlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9CRS5JU084ODU5LTE1JywKLSAgICAnZGVfYmUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2RlX0JFLklTTzg4NTktMTUnLAotICAgICdkZV9iZS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuVVRGLTgnLAotICAgICdkZV9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQkUuSVNPODg1OS0xNScsCiAgICAgJ2RlX2NoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9DSC5JU084ODU5LTEnLAotICAgICdkZV9jaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGVfQ0guSVNPODg1OS0xJywKLSAgICAnZGVfY2guaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0NILklTTzg4NTktMTUnLAotICAgICdkZV9jaEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfQ0guSVNPODg1OS0xNScsCiAgICAgJ2RlX2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdkZV9kZS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKLSAgICAnZGVfZGUuODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMTUnLAotICAgICdkZV9kZS44ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xNScsCi0gICAgJ2RlX2RlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdkZV9kZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xNScsCi0gICAgJ2RlX2RlLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTE1JywKLSAgICAnZGVfZGUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLlVURi04JywKLSAgICAnZGVfZGVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMTUnLAorICAgICdkZV9saS51dGY4JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfTEkuVVRGLTgnLAogICAgICdkZV9sdSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuSVNPODg1OS0xJywKLSAgICAnZGVfbHUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0xVLklTTzg4NTktMScsCi0gICAgJ2RlX2x1Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9MVS5JU084ODU5LTE1JywKLSAgICAnZGVfbHUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2RlX0xVLklTTzg4NTktMTUnLAotICAgICdkZV9sdS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuVVRGLTgnLAotICAgICdkZV9sdUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfTFUuSVNPODg1OS0xNScsCiAgICAgJ2RldXRzY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAorICAgICdkb2lfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZG9pX0lOLlVURi04JywKICAgICAnZHV0Y2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCiAgICAgJ2R1dGNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLAorICAgICdkdl9tdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHZfTVYuVVRGLTgnLAorICAgICdkel9idCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZHpfQlQuVVRGLTgnLAogICAgICdlZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWVfRUUuSVNPODg1OS00JywKICAgICAnZWVfZWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VlX0VFLklTTzg4NTktNCcsCi0gICAgJ2VlX2VlLmlzbzg4NTk0JzogICAgICAgICAgICAgICAgICAgICAgICdlZV9FRS5JU084ODU5LTQnLAogICAgICdlZXN0aSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS0xJywKICAgICAnZWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktNycsCisgICAgJ2VsX2N5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbF9DWS5JU084ODU5LTcnLAogICAgICdlbF9ncic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWxfR1IuSVNPODg1OS03JywKLSAgICAnZWxfZ3IuaXNvODg1OTcnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktNycsCiAgICAgJ2VsX2dyQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbF9HUi5JU084ODU5LTE1JywKICAgICAnZW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCi0gICAgJ2VuLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAorICAgICdlbl9hZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fQUcuVVRGLTgnLAogICAgICdlbl9hdSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fQVUuSVNPODg1OS0xJywKLSAgICAnZW5fYXUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0FVLklTTzg4NTktMScsCiAgICAgJ2VuX2JlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9CRS5JU084ODU5LTEnLAotICAgICdlbl9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fQkUuSVNPODg1OS0xNScsCiAgICAgJ2VuX2J3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9CVy5JU084ODU5LTEnLAotICAgICdlbl9idy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fQlcuSVNPODg1OS0xJywKICAgICAnZW5fY2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0NBLklTTzg4NTktMScsCi0gICAgJ2VuX2NhLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9DQS5JU084ODU5LTEnLAorICAgICdlbl9kayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fREsuSVNPODg1OS0xJywKKyAgICAnZW5fZGwudXRmOCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0RMLlVURi04JywKICAgICAnZW5fZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCi0gICAgJ2VuX2diLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAotICAgICdlbl9nYi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xJywKLSAgICAnZW5fZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMTUnLAotICAgICdlbl9nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xNScsCiAgICAgJ2VuX2hrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9ISy5JU084ODU5LTEnLAotICAgICdlbl9oay5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fSEsuSVNPODg1OS0xJywKICAgICAnZW5faWUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLklTTzg4NTktMScsCi0gICAgJ2VuX2llLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9JRS5JU084ODU5LTEnLAotICAgICdlbl9pZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZW5fSUUuSVNPODg1OS0xNScsCi0gICAgJ2VuX2llLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdlbl9JRS5JU084ODU5LTE1JywKLSAgICAnZW5faWUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLlVURi04JywKLSAgICAnZW5faWVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0lFLklTTzg4NTktMTUnLAogICAgICdlbl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fSU4uSVNPODg1OS0xJywKKyAgICAnZW5fbmcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX05HLlVURi04JywKICAgICAnZW5fbnonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX05aLklTTzg4NTktMScsCi0gICAgJ2VuX256Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9OWi5JU084ODU5LTEnLAogICAgICdlbl9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fUEguSVNPODg1OS0xJywKLSAgICAnZW5fcGguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1BILklTTzg4NTktMScsCiAgICAgJ2VuX3NnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9TRy5JU084ODU5LTEnLAotICAgICdlbl9zZy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fU0cuSVNPODg1OS0xJywKICAgICAnZW5fdWsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCiAgICAgJ2VuX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAotICAgICdlbl91cy44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5fdXMuODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAotICAgICdlbl91cy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5fdXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAotICAgICdlbl91cy5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xNScsCi0gICAgJ2VuX3VzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTE1JywKICAgICAnZW5fdXNAZXVyb0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAogICAgICdlbl96YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fWkEuSVNPODg1OS0xJywKLSAgICAnZW5femEuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1pBLklTTzg4NTktMScsCi0gICAgJ2VuX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9aQS5JU084ODU5LTEnLAotICAgICdlbl96YS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZW5fWkEuSVNPODg1OS0xNScsCi0gICAgJ2VuX3phQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9aQS5JU084ODU5LTE1JywKKyAgICAnZW5fem0nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1pNLlVURi04JywKICAgICAnZW5fencnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1pXLklTTzg4NTktMScsCi0gICAgJ2VuX3p3Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlbl9aVy5JU084ODU5LTEnLAorICAgICdlbl96dy51dGY4JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fWlMuVVRGLTgnLAogICAgICdlbmdfZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fR0IuSVNPODg1OS0xJywKLSAgICAnZW5nX2diLjg4NTknOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCiAgICAgJ2VuZ2xpc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9FTi5JU084ODU5LTEnLAotICAgICdlbmdsaXNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAnZW5fRU4uSVNPODg1OS0xJywKICAgICAnZW5nbGlzaF91ayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX0dCLklTTzg4NTktMScsCi0gICAgJ2VuZ2xpc2hfdWsuODg1OSc6ICAgICAgICAgICAgICAgICAgICAgICdlbl9HQi5JU084ODU5LTEnLAogICAgICdlbmdsaXNoX3VuaXRlZC1zdGF0ZXMnOiAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnZW5nbGlzaF91bml0ZWQtc3RhdGVzLjQzNyc6ICAgICAgICAgICAgJ0MnLAogICAgICdlbmdsaXNoX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKLSAgICAnZW5nbGlzaF91cy44ODU5JzogICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMScsCi0gICAgJ2VuZ2xpc2hfdXMuYXNjaWknOiAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdlbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW9fWFguSVNPODg1OS0zJywKKyAgICAnZW8udXRmOCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VvLlVURi04JywKICAgICAnZW9fZW8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VvX0VPLklTTzg4NTktMycsCi0gICAgJ2VvX2VvLmlzbzg4NTkzJzogICAgICAgICAgICAgICAgICAgICAgICdlb19FTy5JU084ODU5LTMnLAorICAgICdlb191cy51dGY4JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW9fVVMuVVRGLTgnLAogICAgICdlb194eCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW9fWFguSVNPODg1OS0zJywKLSAgICAnZW9feHguaXNvODg1OTMnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VvX1hYLklTTzg4NTktMycsCiAgICAgJ2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAogICAgICdlc19hcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfQVIuSVNPODg1OS0xJywKLSAgICAnZXNfYXIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0FSLklTTzg4NTktMScsCiAgICAgJ2VzX2JvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19CTy5JU084ODU5LTEnLAotICAgICdlc19iby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfQk8uSVNPODg1OS0xJywKICAgICAnZXNfY2wnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NMLklTTzg4NTktMScsCi0gICAgJ2VzX2NsLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19DTC5JU084ODU5LTEnLAogICAgICdlc19jbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfQ08uSVNPODg1OS0xJywKLSAgICAnZXNfY28uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NPLklTTzg4NTktMScsCiAgICAgJ2VzX2NyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19DUi5JU084ODU5LTEnLAotICAgICdlc19jci5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfQ1IuSVNPODg1OS0xJywKKyAgICAnZXNfY3UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0NVLlVURi04JywKICAgICAnZXNfZG8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0RPLklTTzg4NTktMScsCi0gICAgJ2VzX2RvLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19ETy5JU084ODU5LTEnLAogICAgICdlc19lYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRUMuSVNPODg1OS0xJywKLSAgICAnZXNfZWMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VDLklTTzg4NTktMScsCiAgICAgJ2VzX2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAotICAgICdlc19lcy44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKLSAgICAnZXNfZXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMScsCi0gICAgJ2VzX2VzLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTE1JywKLSAgICAnZXNfZXMuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMTUnLAotICAgICdlc19lcy51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuVVRGLTgnLAotICAgICdlc19lc0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xNScsCiAgICAgJ2VzX2d0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19HVC5JU084ODU5LTEnLAotICAgICdlc19ndC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfR1QuSVNPODg1OS0xJywKICAgICAnZXNfaG4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0hOLklTTzg4NTktMScsCi0gICAgJ2VzX2huLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19ITi5JU084ODU5LTEnLAogICAgICdlc19teCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfTVguSVNPODg1OS0xJywKLSAgICAnZXNfbXguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX01YLklTTzg4NTktMScsCiAgICAgJ2VzX25pJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19OSS5JU084ODU5LTEnLAotICAgICdlc19uaS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfTkkuSVNPODg1OS0xJywKICAgICAnZXNfcGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BBLklTTzg4NTktMScsCi0gICAgJ2VzX3BhLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QQS5JU084ODU5LTEnLAotICAgICdlc19wYS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXNfUEEuSVNPODg1OS0xNScsCi0gICAgJ2VzX3BhQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QQS5JU084ODU5LTE1JywKICAgICAnZXNfcGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BFLklTTzg4NTktMScsCi0gICAgJ2VzX3BlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QRS5JU084ODU5LTEnLAotICAgICdlc19wZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXNfUEUuSVNPODg1OS0xNScsCi0gICAgJ2VzX3BlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19QRS5JU084ODU5LTE1JywKICAgICAnZXNfcHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BSLklTTzg4NTktMScsCi0gICAgJ2VzX3ByLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdlc19QUi5JU084ODU5LTEnLAogICAgICdlc19weSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfUFkuSVNPODg1OS0xJywKLSAgICAnZXNfcHkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BZLklTTzg4NTktMScsCi0gICAgJ2VzX3B5Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19QWS5JU084ODU5LTE1JywKLSAgICAnZXNfcHlAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1BZLklTTzg4NTktMTUnLAogICAgICdlc19zdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfU1YuSVNPODg1OS0xJywKLSAgICAnZXNfc3YuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1NWLklTTzg4NTktMScsCi0gICAgJ2VzX3N2Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdlc19TVi5JU084ODU5LTE1JywKLSAgICAnZXNfc3ZAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1NWLklTTzg4NTktMTUnLAogICAgICdlc191cyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVMuSVNPODg1OS0xJywKLSAgICAnZXNfdXMuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2VzX1VTLklTTzg4NTktMScsCiAgICAgJ2VzX3V5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19VWS5JU084ODU5LTEnLAotICAgICdlc191eS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVkuSVNPODg1OS0xJywKLSAgICAnZXNfdXkuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VzX1VZLklTTzg4NTktMTUnLAotICAgICdlc191eUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVVkuSVNPODg1OS0xNScsCiAgICAgJ2VzX3ZlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19WRS5JU084ODU5LTEnLAotICAgICdlc192ZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZXNfVkUuSVNPODg1OS0xJywKLSAgICAnZXNfdmUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2VzX1ZFLklTTzg4NTktMTUnLAotICAgICdlc192ZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXNfVkUuSVNPODg1OS0xNScsCiAgICAgJ2VzdG9uaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTEnLAogICAgICdldCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS0xNScsCiAgICAgJ2V0X2VlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTE1JywKLSAgICAnZXRfZWUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMScsCi0gICAgJ2V0X2VlLmlzbzg4NTkxMyc6ICAgICAgICAgICAgICAgICAgICAgICdldF9FRS5JU084ODU5LTEzJywKLSAgICAnZXRfZWUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMTUnLAotICAgICdldF9lZS5pc284ODU5NCc6ICAgICAgICAgICAgICAgICAgICAgICAnZXRfRUUuSVNPODg1OS00JywKLSAgICAnZXRfZWVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V0X0VFLklTTzg4NTktMTUnLAogICAgICdldSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXVfRVMuSVNPODg1OS0xJywKICAgICAnZXVfZXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLklTTzg4NTktMScsCi0gICAgJ2V1X2VzLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdldV9FUy5JU084ODU5LTEnLAotICAgICdldV9lcy5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZXVfRVMuSVNPODg1OS0xNScsCi0gICAgJ2V1X2VzLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdldV9FUy5JU084ODU5LTE1JywKLSAgICAnZXVfZXMudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLlVURi04JywKLSAgICAnZXVfZXNAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2V1X0VTLklTTzg4NTktMTUnLAorICAgICdldV9mcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXVfRlIuSVNPODg1OS0xJywKICAgICAnZmEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhX0lSLlVURi04JywKICAgICAnZmFfaXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhX0lSLlVURi04JywKICAgICAnZmFfaXIuaXNpcmkzMzQyJzogICAgICAgICAgICAgICAgICAgICAgJ2ZhX0lSLklTSVJJLTMzNDInLAorICAgICdmZl9zbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmZfU04uVVRGLTgnLAogICAgICdmaSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCi0gICAgJ2ZpLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKICAgICAnZmlfZmknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAotICAgICdmaV9maS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xJywKLSAgICAnZmlfZmkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMScsCi0gICAgJ2ZpX2ZpLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmaV9GSS5JU084ODU5LTE1JywKLSAgICAnZmlfZmkuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMTUnLAotICAgICdmaV9maS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuVVRGLTgnLAotICAgICdmaV9maUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xNScsCisgICAgJ2ZpbF9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxfUEguVVRGLTgnLAogICAgICdmaW5uaXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlfRkkuSVNPODg1OS0xJywKLSAgICAnZmlubmlzaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgJ2ZpX0ZJLklTTzg4NTktMScsCiAgICAgJ2ZvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb19GTy5JU084ODU5LTEnLAogICAgICdmb19mbyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9fRk8uSVNPODg1OS0xJywKLSAgICAnZm9fZm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZvX0ZPLklTTzg4NTktMScsCi0gICAgJ2ZvX2ZvLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmb19GTy5JU084ODU5LTE1JywKLSAgICAnZm9fZm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvX0ZPLklTTzg4NTktMTUnLAogICAgICdmcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKLSAgICAnZnIuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMTUnLAogICAgICdmcl9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xJywKLSAgICAnZnJfYmUuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMScsCi0gICAgJ2ZyX2JlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTEnLAotICAgICdmcl9iZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZnJfQkUuSVNPODg1OS0xNScsCi0gICAgJ2ZyX2JlLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdmcl9CRS5JU084ODU5LTE1JywKLSAgICAnZnJfYmUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLlVURi04JywKLSAgICAnZnJfYmVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0JFLklTTzg4NTktMTUnLAogICAgICdmcl9jYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0EuSVNPODg1OS0xJywKLSAgICAnZnJfY2EuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NBLklTTzg4NTktMScsCi0gICAgJ2ZyX2NhLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTEnLAotICAgICdmcl9jYS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0EuSVNPODg1OS0xNScsCi0gICAgJ2ZyX2NhQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9DQS5JU084ODU5LTE1JywKICAgICAnZnJfY2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NILklTTzg4NTktMScsCi0gICAgJ2ZyX2NoLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9DSC5JU084ODU5LTEnLAotICAgICdmcl9jaC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0guSVNPODg1OS0xJywKLSAgICAnZnJfY2guaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2ZyX0NILklTTzg4NTktMTUnLAotICAgICdmcl9jaEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0guSVNPODg1OS0xNScsCiAgICAgJ2ZyX2ZyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAotICAgICdmcl9mci44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKLSAgICAnZnJfZnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCi0gICAgJ2ZyX2ZyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTE1JywKLSAgICAnZnJfZnIuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMTUnLAotICAgICdmcl9mci51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuVVRGLTgnLAotICAgICdmcl9mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xNScsCiAgICAgJ2ZyX2x1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9MVS5JU084ODU5LTEnLAotICAgICdmcl9sdS44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfTFUuSVNPODg1OS0xJywKLSAgICAnZnJfbHUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0xVLklTTzg4NTktMScsCi0gICAgJ2ZyX2x1Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdmcl9MVS5JU084ODU5LTE1JywKLSAgICAnZnJfbHUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ2ZyX0xVLklTTzg4NTktMTUnLAotICAgICdmcl9sdS51dGY4QGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAnZnJfTFUuVVRGLTgnLAotICAgICdmcl9sdUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfTFUuSVNPODg1OS0xNScsCiAgICAgJ2ZyYW5ceGU3YWlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAogICAgICdmcmVfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnJfRlIuSVNPODg1OS0xJywKLSAgICAnZnJlX2ZyLjg4NTknOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCiAgICAgJ2ZyZW5jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAogICAgICdmcmVuY2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAnZnJfQ0guSVNPODg1OS0xJywKICAgICAnZnJlbmNoX2ZyYW5jZSc6ICAgICAgICAgICAgICAgICAgICAgICAgJ2ZyX0ZSLklTTzg4NTktMScsCi0gICAgJ2ZyZW5jaF9mcmFuY2UuODg1OSc6ICAgICAgICAgICAgICAgICAgICdmcl9GUi5JU084ODU5LTEnLAorICAgICdmdXJfaXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnVyX0lULlVURi04JywKKyAgICAnZnlfZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z5X0RFLlVURi04JywKKyAgICAnZnlfbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z5X05MLlVURi04JywKICAgICAnZ2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMScsCiAgICAgJ2dhX2llJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnYV9JRS5JU084ODU5LTEnLAotICAgICdnYV9pZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZ2FfSUUuSVNPODg1OS0xJywKLSAgICAnZ2FfaWUuaXNvODg1OTE0JzogICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMTQnLAotICAgICdnYV9pZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnZ2FfSUUuSVNPODg1OS0xNScsCi0gICAgJ2dhX2llLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdnYV9JRS5JU084ODU5LTE1JywKLSAgICAnZ2FfaWUudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLlVURi04JywKLSAgICAnZ2FfaWVAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dhX0lFLklTTzg4NTktMTUnLAogICAgICdnYWxlZ28nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xJywKICAgICAnZ2FsaWNpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMScsCiAgICAgJ2dkJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZF9HQi5JU084ODU5LTEnLAogICAgICdnZF9nYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2RfR0IuSVNPODg1OS0xJywKLSAgICAnZ2RfZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2dkX0dCLklTTzg4NTktMScsCi0gICAgJ2dkX2diLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdnZF9HQi5JU084ODU5LTE0JywKLSAgICAnZ2RfZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2dkX0dCLklTTzg4NTktMTUnLAotICAgICdnZF9nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2RfR0IuSVNPODg1OS0xNScsCiAgICAgJ2dlcl9kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZV9ERS5JU084ODU5LTEnLAotICAgICdnZXJfZGUuODg1OSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKICAgICAnZ2VybWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCiAgICAgJ2dlcm1hbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICdkZV9DSC5JU084ODU5LTEnLAogICAgICdnZXJtYW5fZ2VybWFueSc6ICAgICAgICAgICAgICAgICAgICAgICAnZGVfREUuSVNPODg1OS0xJywKLSAgICAnZ2VybWFuX2dlcm1hbnkuODg1OSc6ICAgICAgICAgICAgICAgICAgJ2RlX0RFLklTTzg4NTktMScsCisgICAgJ2dlel9lcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXpfRVIuVVRGLTgnLAorICAgICdnZXpfZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V6X0VULlVURi04JywKICAgICAnZ2wnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMScsCiAgICAgJ2dsX2VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5JU084ODU5LTEnLAotICAgICdnbF9lcy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xJywKLSAgICAnZ2xfZXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2dsX0VTLklTTzg4NTktMTUnLAotICAgICdnbF9lcy5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnZ2xfRVMuSVNPODg1OS0xNScsCi0gICAgJ2dsX2VzLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5VVEYtOCcsCi0gICAgJ2dsX2VzQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdnbF9FUy5JU084ODU5LTE1JywKICAgICAnZ3JlZWsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VsX0dSLklTTzg4NTktNycsCi0gICAgJ2dyZWVrLmlzbzg4NTk3JzogICAgICAgICAgICAgICAgICAgICAgICdlbF9HUi5JU084ODU5LTcnLAogICAgICdndV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3VfSU4uVVRGLTgnLAogICAgICdndic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ3ZfR0IuSVNPODg1OS0xJywKICAgICAnZ3ZfZ2InOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2d2X0dCLklTTzg4NTktMScsCi0gICAgJ2d2X2diLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdndl9HQi5JU084ODU5LTEnLAotICAgICdndl9nYi5pc284ODU5MTQnOiAgICAgICAgICAgICAgICAgICAgICAnZ3ZfR0IuSVNPODg1OS0xNCcsCi0gICAgJ2d2X2diLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdndl9HQi5JU084ODU5LTE1JywKLSAgICAnZ3ZfZ2JAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2d2X0dCLklTTzg4NTktMTUnLAorICAgICdoYV9uZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGFfTkcuVVRGLTgnLAogICAgICdoZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKICAgICAnaGVfaWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCi0gICAgJ2hlX2lsLmNwMTI1NSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5DUDEyNTUnLAotICAgICdoZV9pbC5pc284ODU5OCc6ICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKLSAgICAnaGVfaWwubWljcm9zb2Z0Y3AxMjU1JzogICAgICAgICAgICAgICAgJ2hlX0lMLkNQMTI1NScsCiAgICAgJ2hlYnJldyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAotICAgICdoZWJyZXcuaXNvODg1OTgnOiAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKICAgICAnaGknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hpX0lOLklTQ0lJLURFVicsCiAgICAgJ2hpX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoaV9JTi5JU0NJSS1ERVYnLAogICAgICdoaV9pbi5pc2NpaWRldic6ICAgICAgICAgICAgICAgICAgICAgICAnaGlfSU4uSVNDSUktREVWJywKQEAgLTEyMzQsMjMgKzEwNTUsMjUgQEAKICAgICAnaG5lX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2huZV9JTi5VVEYtOCcsCiAgICAgJ2hyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAogICAgICdocl9ocic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHJfSFIuSVNPODg1OS0yJywKLSAgICAnaHJfaHIuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ2hydmF0c2tpJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdocl9IUi5JU084ODU5LTInLAorICAgICdoc2JfZGUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHNiX0RFLklTTzg4NTktMicsCisgICAgJ2h0X2h0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodF9IVC5VVEYtOCcsCiAgICAgJ2h1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodV9IVS5JU084ODU5LTInLAogICAgICdodV9odSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHVfSFUuSVNPODg1OS0yJywKLSAgICAnaHVfaHUuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2h1X0hVLklTTzg4NTktMicsCiAgICAgJ2h1bmdhcmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdodV9IVS5JU084ODU5LTInLAorICAgICdoeV9hbSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaHlfQU0uVVRGLTgnLAorICAgICdoeV9hbS5hcm1zY2lpOCc6ICAgICAgICAgICAgICAgICAgICAgICAnaHlfQU0uQVJNU0NJSV84JywKKyAgICAnaWEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lhLlVURi04JywKKyAgICAnaWFfZnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lhX0ZSLlVURi04JywKICAgICAnaWNlbGFuZGljJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMScsCi0gICAgJ2ljZWxhbmRpYy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICdpc19JUy5JU084ODU5LTEnLAogICAgICdpZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRfSUQuSVNPODg1OS0xJywKICAgICAnaWRfaWQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lkX0lELklTTzg4NTktMScsCisgICAgJ2lnX25nJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZ19ORy5VVEYtOCcsCisgICAgJ2lrX2NhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpa19DQS5VVEYtOCcsCiAgICAgJ2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpZF9JRC5JU084ODU5LTEnLAogICAgICdpbl9pZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWRfSUQuSVNPODg1OS0xJywKICAgICAnaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMScsCiAgICAgJ2lzX2lzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19JUy5JU084ODU5LTEnLAotICAgICdpc19pcy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnaXNfSVMuSVNPODg1OS0xJywKLSAgICAnaXNfaXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2lzX0lTLklTTzg4NTktMTUnLAotICAgICdpc19pc0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfSVMuSVNPODg1OS0xNScsCiAgICAgJ2lzby04ODU5LTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLAogICAgICdpc28tODg1OS0xNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xNScsCiAgICAgJ2lzbzg4NTktMSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy5JU084ODU5LTEnLApAQCAtMTI1OCw3NyArMTA4MSw1NSBAQAogICAgICdpc29fODg1OV8xJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMuSVNPODg1OS0xJywKICAgICAnaXNvXzg4NTlfMTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VuX1VTLklTTzg4NTktMTUnLAogICAgICdpdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKLSAgICAnaXQuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMTUnLAogICAgICdpdF9jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfQ0guSVNPODg1OS0xJywKLSAgICAnaXRfY2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0NILklTTzg4NTktMScsCi0gICAgJ2l0X2NoLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdpdF9DSC5JU084ODU5LTE1JywKLSAgICAnaXRfY2hAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0NILklTTzg4NTktMTUnLAogICAgICdpdF9pdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKLSAgICAnaXRfaXQuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMScsCi0gICAgJ2l0X2l0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTEnLAotICAgICdpdF9pdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xNScsCi0gICAgJ2l0X2l0Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdpdF9JVC5JU084ODU5LTE1JywKLSAgICAnaXRfaXQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULlVURi04JywKLSAgICAnaXRfaXRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMTUnLAogICAgICdpdGFsaWFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRfSVQuSVNPODg1OS0xJywKLSAgICAnaXRhbGlhbi5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgJ2l0X0lULklTTzg4NTktMScsCiAgICAgJ2l1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpdV9DQS5OVU5BQ09NLTgnLAogICAgICdpdV9jYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXVfQ0EuTlVOQUNPTS04JywKICAgICAnaXVfY2EubnVuYWNvbTgnOiAgICAgICAgICAgICAgICAgICAgICAgJ2l1X0NBLk5VTkFDT00tOCcsCiAgICAgJ2l3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZV9JTC5JU084ODU5LTgnLAogICAgICdpd19pbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVfSUwuSVNPODg1OS04JywKLSAgICAnaXdfaWwuaXNvODg1OTgnOiAgICAgICAgICAgICAgICAgICAgICAgJ2hlX0lMLklTTzg4NTktOCcsCisgICAgJ2l3X2lsLnV0ZjgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdpd19JTC5VVEYtOCcsCiAgICAgJ2phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCi0gICAgJ2phLmppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5KSVM3JywKLSAgICAnamEuc2ppcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAogICAgICdqYV9qcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAotICAgICdqYV9qcC5hamVjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAogICAgICdqYV9qcC5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAotICAgICdqYV9qcC5ldWNqcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuZXVjSlAnLAotICAgICdqYV9qcC5pc28tMjAyMi1qcCc6ICAgICAgICAgICAgICAgICAgICAnamFfSlAuSklTNycsCi0gICAgJ2phX2pwLmlzbzIwMjJqcCc6ICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5KSVM3JywKLSAgICAnamFfanAuamlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLkpJUzcnLAotICAgICdqYV9qcC5qaXM3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuSklTNycsCiAgICAgJ2phX2pwLm1zY29kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKICAgICAnamFfanAucGNrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLlNKSVMnLAotICAgICdqYV9qcC5zamlzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnamFfSlAuU0pJUycsCi0gICAgJ2phX2pwLnVqaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phcGFuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phcGFuZXNlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phcGFuZXNlLWV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCiAgICAgJ2phcGFuZXNlLmV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5ldWNKUCcsCi0gICAgJ2phcGFuZXNlLnNqaXMnOiAgICAgICAgICAgICAgICAgICAgICAgICdqYV9KUC5TSklTJywKICAgICAnanBfanAnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2phX0pQLmV1Y0pQJywKICAgICAna2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2thX0dFLkdFT1JHSUFOLUFDQURFTVknLAogICAgICdrYV9nZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2FfR0UuR0VPUkdJQU4tQUNBREVNWScsCiAgICAgJ2thX2dlLmdlb3JnaWFuYWNhZGVteSc6ICAgICAgICAgICAgICAgICdrYV9HRS5HRU9SR0lBTi1BQ0FERU1ZJywKICAgICAna2FfZ2UuZ2VvcmdpYW5wcyc6ICAgICAgICAgICAgICAgICAgICAgJ2thX0dFLkdFT1JHSUFOLVBTJywKICAgICAna2FfZ2UuZ2VvcmdpYW5ycyc6ICAgICAgICAgICAgICAgICAgICAgJ2thX0dFLkdFT1JHSUFOLUFDQURFTVknLAorICAgICdra19reic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna2tfS1ouUksxMDQ4JywKICAgICAna2wnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2tsX0dMLklTTzg4NTktMScsCiAgICAgJ2tsX2dsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbF9HTC5JU084ODU5LTEnLAotICAgICdrbF9nbC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAna2xfR0wuSVNPODg1OS0xJywKLSAgICAna2xfZ2wuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2tsX0dMLklTTzg4NTktMTUnLAotICAgICdrbF9nbEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna2xfR0wuSVNPODg1OS0xNScsCiAgICAgJ2ttX2toJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbV9LSC5VVEYtOCcsCiAgICAgJ2tuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbl9JTi5VVEYtOCcsCiAgICAgJ2tuX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrbl9JTi5VVEYtOCcsCiAgICAgJ2tvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCiAgICAgJ2tvX2tyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCiAgICAgJ2tvX2tyLmV1Yyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCi0gICAgJ2tvX2tyLmV1Y2tyJzogICAgICAgICAgICAgICAgICAgICAgICAgICdrb19LUi5ldWNLUicsCisgICAgJ2tva19pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrb2tfSU4uVVRGLTgnLAogICAgICdrb3JlYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrb3JlYW4uZXVjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna29fS1IuZXVjS1InLAogICAgICdrcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLTgnLAogICAgICdrc19pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLTgnLAotICAgICdrc19pbkBkZXZhbmFnYXJpJzogICAgICAgICAgICAgICAgICAgICAna3NfSU4uVVRGLThAZGV2YW5hZ2FyaScsCisgICAgJ2tzX2luQGRldmFuYWdhcmkudXRmOCc6ICAgICAgICAgICAgICAgICdrc19JTi5VVEYtOEBkZXZhbmFnYXJpJywKKyAgICAna3VfdHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2t1X1RSLklTTzg4NTktOScsCiAgICAgJ2t3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTEnLAogICAgICdrd19nYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xJywKLSAgICAna3dfZ2IuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMScsCi0gICAgJ2t3X2diLmlzbzg4NTkxNCc6ICAgICAgICAgICAgICAgICAgICAgICdrd19HQi5JU084ODU5LTE0JywKLSAgICAna3dfZ2IuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ2t3X0dCLklTTzg4NTktMTUnLAotICAgICdrd19nYkBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAna3dfR0IuSVNPODg1OS0xNScsCiAgICAgJ2t5JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdreV9LRy5VVEYtOCcsCiAgICAgJ2t5X2tnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdreV9LRy5VVEYtOCcsCisgICAgJ2xiX2x1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsYl9MVS5VVEYtOCcsCisgICAgJ2xnX3VnJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZ19VRy5JU084ODU5LTEwJywKKyAgICAnbGlfYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpX0JFLlVURi04JywKKyAgICAnbGlfbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpX05MLlVURi04JywKKyAgICAnbGlqX2l0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpal9JVC5VVEYtOCcsCiAgICAgJ2xpdGh1YW5pYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdsdF9MVC5JU084ODU5LTEzJywKICAgICAnbG8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvX0xBLk1VTEVMQU8tMScsCiAgICAgJ2xvX2xhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsb19MQS5NVUxFTEFPLTEnLApAQCAtMTMzNywxNTcgKzExMzgsMTAyIEBACiAgICAgJ2xvX2xhLm11bGVsYW8xJzogICAgICAgICAgICAgICAgICAgICAgICdsb19MQS5NVUxFTEFPLTEnLAogICAgICdsdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHRfTFQuSVNPODg1OS0xMycsCiAgICAgJ2x0X2x0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsdF9MVC5JU084ODU5LTEzJywKLSAgICAnbHRfbHQuaXNvODg1OTEzJzogICAgICAgICAgICAgICAgICAgICAgJ2x0X0xULklTTzg4NTktMTMnLAotICAgICdsdF9sdC5pc284ODU5NCc6ICAgICAgICAgICAgICAgICAgICAgICAnbHRfTFQuSVNPODg1OS00JywKICAgICAnbHYnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktMTMnLAogICAgICdsdl9sdic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbHZfTFYuSVNPODg1OS0xMycsCi0gICAgJ2x2X2x2Lmlzbzg4NTkxMyc6ICAgICAgICAgICAgICAgICAgICAgICdsdl9MVi5JU084ODU5LTEzJywKLSAgICAnbHZfbHYuaXNvODg1OTQnOiAgICAgICAgICAgICAgICAgICAgICAgJ2x2X0xWLklTTzg4NTktNCcsCisgICAgJ21hZ19pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtYWdfSU4uVVRGLTgnLAogICAgICdtYWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFpX0lOLlVURi04JywKICAgICAnbWFpX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21haV9JTi5VVEYtOCcsCisgICAgJ21nX21nJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZ19NRy5JU084ODU5LTE1JywKKyAgICAnbWhyX3J1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21ocl9SVS5VVEYtOCcsCiAgICAgJ21pJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaV9OWi5JU084ODU5LTEnLAogICAgICdtaV9ueic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlfTlouSVNPODg1OS0xJywKLSAgICAnbWlfbnouaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ21pX05aLklTTzg4NTktMScsCiAgICAgJ21rJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdta19NSy5JU084ODU5LTUnLAogICAgICdta19tayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWtfTUsuSVNPODg1OS01JywKLSAgICAnbWtfbWsuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ21rX01LLkNQMTI1MScsCi0gICAgJ21rX21rLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdta19NSy5JU084ODU5LTUnLAotICAgICdta19tay5taWNyb3NvZnRjcDEyNTEnOiAgICAgICAgICAgICAgICAnbWtfTUsuQ1AxMjUxJywKICAgICAnbWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21sX0lOLlVURi04JywKICAgICAnbWxfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21sX0lOLlVURi04JywKKyAgICAnbW5fbW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21uX01OLlVURi04JywKKyAgICAnbW5pX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21uaV9JTi5VVEYtOCcsCiAgICAgJ21yJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtcl9JTi5VVEYtOCcsCiAgICAgJ21yX2luJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtcl9JTi5VVEYtOCcsCiAgICAgJ21zJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtc19NWS5JU084ODU5LTEnLAogICAgICdtc19teSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXNfTVkuSVNPODg1OS0xJywKLSAgICAnbXNfbXkuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ21zX01ZLklTTzg4NTktMScsCiAgICAgJ210JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdF9NVC5JU084ODU5LTMnLAogICAgICdtdF9tdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXRfTVQuSVNPODg1OS0zJywKLSAgICAnbXRfbXQuaXNvODg1OTMnOiAgICAgICAgICAgICAgICAgICAgICAgJ210X01ULklTTzg4NTktMycsCisgICAgJ215X21tJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdteV9NTS5VVEYtOCcsCisgICAgJ25hbl90d0BsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICduYW5fVFcuVVRGLThAbGF0aW4nLAogICAgICduYic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xJywKICAgICAnbmJfbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMScsCi0gICAgJ25iX25vLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICduYl9OTy5JU084ODU5LTEnLAotICAgICduYl9uby5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xJywKLSAgICAnbmJfbm8uaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25iX05PLklTTzg4NTktMTUnLAotICAgICduYl9ub0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbmJfTk8uSVNPODg1OS0xNScsCisgICAgJ25kc19kZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZHNfREUuVVRGLTgnLAorICAgICduZHNfbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmRzX05MLlVURi04JywKICAgICAnbmVfbnAnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25lX05QLlVURi04JywKKyAgICAnbmhuX214JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25obl9NWC5VVEYtOCcsCisgICAgJ25pdV9udSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduaXVfTlUuVVRGLTgnLAorICAgICduaXVfbnonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbml1X05aLlVURi04JywKICAgICAnbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCi0gICAgJ25sLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTE1JywKKyAgICAnbmxfYXcnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX0FXLlVURi04JywKICAgICAnbmxfYmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMScsCi0gICAgJ25sX2JlLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTEnLAotICAgICdubF9iZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xJywKLSAgICAnbmxfYmUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25sX0JFLklTTzg4NTktMTUnLAotICAgICdubF9iZS5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnbmxfQkUuSVNPODg1OS0xNScsCi0gICAgJ25sX2JlLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5VVEYtOCcsCi0gICAgJ25sX2JlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdubF9CRS5JU084ODU5LTE1JywKICAgICAnbmxfbmwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMScsCi0gICAgJ25sX25sLjg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTEnLAotICAgICdubF9ubC5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xJywKLSAgICAnbmxfbmwuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ25sX05MLklTTzg4NTktMTUnLAotICAgICdubF9ubC5pc284ODU5MTVAZXVybyc6ICAgICAgICAgICAgICAgICAnbmxfTkwuSVNPODg1OS0xNScsCi0gICAgJ25sX25sLnV0ZjhAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5VVEYtOCcsCi0gICAgJ25sX25sQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdubF9OTC5JU084ODU5LTE1JywKICAgICAnbm4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMScsCiAgICAgJ25uX25vJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdubl9OTy5JU084ODU5LTEnLAotICAgICdubl9uby44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbm5fTk8uSVNPODg1OS0xJywKLSAgICAnbm5fbm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMScsCi0gICAgJ25uX25vLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdubl9OTy5JU084ODU5LTE1JywKLSAgICAnbm5fbm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25uX05PLklTTzg4NTktMTUnLAogICAgICdubyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKICAgICAnbm9Abnlub3Jzayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMScsCiAgICAgJ25vX25vJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAotICAgICdub19uby44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKLSAgICAnbm9fbm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCi0gICAgJ25vX25vLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTE1JywKICAgICAnbm9fbm8uaXNvODg1OTFAYm9rbWFsJzogICAgICAgICAgICAgICAgJ25vX05PLklTTzg4NTktMScsCiAgICAgJ25vX25vLmlzbzg4NTkxQG55bm9yc2snOiAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAotICAgICdub19ub0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xNScsCiAgICAgJ25vcndlZ2lhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub19OTy5JU084ODU5LTEnLAotICAgICdub3J3ZWdpYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAnbm9fTk8uSVNPODg1OS0xJywKICAgICAnbnInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25yX1pBLklTTzg4NTktMScsCiAgICAgJ25yX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICducl9aQS5JU084ODU5LTEnLAotICAgICducl96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnbnJfWkEuSVNPODg1OS0xJywKICAgICAnbnNvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25zb19aQS5JU084ODU5LTE1JywKICAgICAnbnNvX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25zb19aQS5JU084ODU5LTE1JywKLSAgICAnbnNvX3phLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgJ25zb19aQS5JU084ODU5LTE1JywKICAgICAnbnknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMScsCiAgICAgJ255X25vJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueV9OTy5JU084ODU5LTEnLAotICAgICdueV9uby44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnbnlfTk8uSVNPODg1OS0xJywKLSAgICAnbnlfbm8uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMScsCi0gICAgJ255X25vLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdueV9OTy5JU084ODU5LTE1JywKLSAgICAnbnlfbm9AZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ255X05PLklTTzg4NTktMTUnLAogICAgICdueW5vcnNrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm5fTk8uSVNPODg1OS0xJywKICAgICAnb2MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMScsCiAgICAgJ29jX2ZyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvY19GUi5JU084ODU5LTEnLAotICAgICdvY19mci5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xJywKLSAgICAnb2NfZnIuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ29jX0ZSLklTTzg4NTktMTUnLAotICAgICdvY19mckBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnb2NfRlIuSVNPODg1OS0xNScsCisgICAgJ29tX2V0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbV9FVC5VVEYtOCcsCisgICAgJ29tX2tlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbV9LRS5JU084ODU5LTEnLAogICAgICdvcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JfSU4uVVRGLTgnLAogICAgICdvcl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3JfSU4uVVRGLTgnLAorICAgICdvc19ydSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3NfUlUuVVRGLTgnLAogICAgICdwYSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfSU4uVVRGLTgnLAogICAgICdwYV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfSU4uVVRGLTgnLAorICAgICdwYV9wayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFfUEsuVVRGLTgnLAorICAgICdwYXBfYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGFwX0FOLlVURi04JywKICAgICAncGQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BkX1VTLklTTzg4NTktMScsCiAgICAgJ3BkX2RlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9ERS5JU084ODU5LTEnLAotICAgICdwZF9kZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncGRfREUuSVNPODg1OS0xJywKLSAgICAncGRfZGUuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3BkX0RFLklTTzg4NTktMTUnLAotICAgICdwZF9kZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncGRfREUuSVNPODg1OS0xNScsCiAgICAgJ3BkX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwZF9VUy5JU084ODU5LTEnLAotICAgICdwZF91cy5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAncGRfVVMuSVNPODg1OS0xJywKLSAgICAncGRfdXMuaXNvODg1OTE1JzogICAgICAgICAgICAgICAgICAgICAgJ3BkX1VTLklTTzg4NTktMTUnLAotICAgICdwZF91c0BldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncGRfVVMuSVNPODg1OS0xNScsCiAgICAgJ3BoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwaF9QSC5JU084ODU5LTEnLAogICAgICdwaF9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGhfUEguSVNPODg1OS0xJywKLSAgICAncGhfcGguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3BoX1BILklTTzg4NTktMScsCiAgICAgJ3BsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbF9QTC5JU084ODU5LTInLAogICAgICdwbF9wbCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGxfUEwuSVNPODg1OS0yJywKLSAgICAncGxfcGwuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3BsX1BMLklTTzg4NTktMicsCiAgICAgJ3BvbGlzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbF9QTC5JU084ODU5LTInLAogICAgICdwb3J0dWd1ZXNlJzogICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xJywKLSAgICAncG9ydHVndWVzZS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMScsCiAgICAgJ3BvcnR1Z3Vlc2VfYnJhemlsJzogICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAotICAgICdwb3J0dWd1ZXNlX2JyYXppbC44ODU5JzogICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKICAgICAncG9zaXgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0MnLAogICAgICdwb3NpeC11dGYyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnQycsCiAgICAgJ3BwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcF9BTi5JU084ODU5LTEnLAogICAgICdwcF9hbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHBfQU4uSVNPODg1OS0xJywKLSAgICAncHBfYW4uaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3BwX0FOLklTTzg4NTktMScsCisgICAgJ3BzX2FmJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwc19BRi5VVEYtOCcsCiAgICAgJ3B0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTEnLAotICAgICdwdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xNScsCiAgICAgJ3B0X2JyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTEnLAotICAgICdwdF9ici44ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfQlIuSVNPODg1OS0xJywKLSAgICAncHRfYnIuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMScsCi0gICAgJ3B0X2JyLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICdwdF9CUi5JU084ODU5LTE1JywKLSAgICAncHRfYnJAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X0JSLklTTzg4NTktMTUnLAogICAgICdwdF9wdCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xJywKLSAgICAncHRfcHQuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMScsCi0gICAgJ3B0X3B0Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTEnLAotICAgICdwdF9wdC5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAncHRfUFQuSVNPODg1OS0xNScsCi0gICAgJ3B0X3B0Lmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdwdF9QVC5JU084ODU5LTE1JywKLSAgICAncHRfcHQudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULlVURi04JywKLSAgICAncHRfcHRAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B0X1BULklTTzg4NTktMTUnLAogICAgICdybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKICAgICAncm9fcm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCi0gICAgJ3JvX3JvLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdyb19STy5JU084ODU5LTInLAogICAgICdyb21hbmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm9fUk8uSVNPODg1OS0yJywKICAgICAncnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLlVURi04JywKLSAgICAncnUua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLktPSTgtUicsCiAgICAgJ3J1X3J1JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5VVEYtOCcsCi0gICAgJ3J1X3J1LmNwMTI1MSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5DUDEyNTEnLAotICAgICdydV9ydS5pc284ODU5NSc6ICAgICAgICAgICAgICAgICAgICAgICAncnVfUlUuSVNPODg1OS01JywKLSAgICAncnVfcnUua29pOHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1JVLktPSTgtUicsCi0gICAgJ3J1X3J1Lm1pY3Jvc29mdGNwMTI1MSc6ICAgICAgICAgICAgICAgICdydV9SVS5DUDEyNTEnLAogICAgICdydV91YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVfVUEuS09JOC1VJywKLSAgICAncnVfdWEuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3J1X1VBLkNQMTI1MScsCi0gICAgJ3J1X3VhLmtvaTh1JzogICAgICAgICAgICAgICAgICAgICAgICAgICdydV9VQS5LT0k4LVUnLAotICAgICdydV91YS5taWNyb3NvZnRjcDEyNTEnOiAgICAgICAgICAgICAgICAncnVfVUEuQ1AxMjUxJywKICAgICAncnVtYW5pYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JvX1JPLklTTzg4NTktMicsCiAgICAgJ3J1c3NpYW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdydV9SVS5JU084ODU5LTUnLAogICAgICdydyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncndfUlcuSVNPODg1OS0xJywKICAgICAncndfcncnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3J3X1JXLklTTzg4NTktMScsCi0gICAgJ3J3X3J3Lmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdyd19SVy5JU084ODU5LTEnLAorICAgICdzYV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FfSU4uVVRGLTgnLAorICAgICdzYXRfaW4nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2F0X0lOLlVURi04JywKKyAgICAnc2NfaXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjX0lULlVURi04JywKICAgICAnc2QnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NkX0lOLlVURi04JywKLSAgICAnc2RAZGV2YW5hZ2FyaSc6ICAgICAgICAgICAgICAgICAgICAgICAgJ3NkX0lOLlVURi04QGRldmFuYWdhcmknLAogICAgICdzZF9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2RfSU4uVVRGLTgnLAotICAgICdzZF9pbkBkZXZhbmFnYXJpJzogICAgICAgICAgICAgICAgICAgICAnc2RfSU4uVVRGLThAZGV2YW5hZ2FyaScsCisgICAgJ3NkX2luQGRldmFuYWdhcmkudXRmOCc6ICAgICAgICAgICAgICAgICdzZF9JTi5VVEYtOEBkZXZhbmFnYXJpJywKKyAgICAnc2RfcGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NkX1BLLlVURi04JywKICAgICAnc2Vfbm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NlX05PLlVURi04JywKICAgICAnc2VyYm9jcm9hdGlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKICAgICAnc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKQEAgLTE0OTYsNDIgKzEyNDIsMzggQEAKICAgICAnc2hfaHIuaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ2hyX0hSLklTTzg4NTktMicsCiAgICAgJ3NoX3NwJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTInLAogICAgICdzaF95dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAorICAgICdzaHNfY2EnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hzX0NBLlVURi04JywKICAgICAnc2knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpX0xLLlVURi04JywKICAgICAnc2lfbGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpX0xLLlVURi04JywKKyAgICAnc2lkX2V0JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NpZF9FVC5VVEYtOCcsCiAgICAgJ3NpbmhhbGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaV9MSy5VVEYtOCcsCiAgICAgJ3NrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdza19TSy5JU084ODU5LTInLAogICAgICdza19zayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tfU0suSVNPODg1OS0yJywKLSAgICAnc2tfc2suaXNvODg1OTInOiAgICAgICAgICAgICAgICAgICAgICAgJ3NrX1NLLklTTzg4NTktMicsCiAgICAgJ3NsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzbF9TSS5JU084ODU5LTInLAogICAgICdzbF9jcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2xfQ1MuSVNPODg1OS0yJywKICAgICAnc2xfc2knOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NsX1NJLklTTzg4NTktMicsCi0gICAgJ3NsX3NpLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdzbF9TSS5JU084ODU5LTInLAogICAgICdzbG92YWsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2tfU0suSVNPODg1OS0yJywKICAgICAnc2xvdmVuZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NsX1NJLklTTzg4NTktMicsCiAgICAgJ3Nsb3Zlbmlhbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzbF9TSS5JU084ODU5LTInLAorICAgICdzb19kaic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc29fREouSVNPODg1OS0xJywKKyAgICAnc29fZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvX0VULlVURi04JywKKyAgICAnc29fa2UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvX0tFLklTTzg4NTktMScsCisgICAgJ3NvX3NvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzb19TTy5JU084ODU5LTEnLAogICAgICdzcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS01JywKICAgICAnc3BfeXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCiAgICAgJ3NwYW5pc2gnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAotICAgICdzcGFuaXNoLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAnZXNfRVMuSVNPODg1OS0xJywKICAgICAnc3BhbmlzaF9zcGFpbic6ICAgICAgICAgICAgICAgICAgICAgICAgJ2VzX0VTLklTTzg4NTktMScsCi0gICAgJ3NwYW5pc2hfc3BhaW4uODg1OSc6ICAgICAgICAgICAgICAgICAgICdlc19FUy5JU084ODU5LTEnLAogICAgICdzcSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3FfQUwuSVNPODg1OS0yJywKICAgICAnc3FfYWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NxX0FMLklTTzg4NTktMicsCi0gICAgJ3NxX2FsLmlzbzg4NTkyJzogICAgICAgICAgICAgICAgICAgICAgICdzcV9BTC5JU084ODU5LTInLAorICAgICdzcV9tayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3FfTUsuVVRGLTgnLAogICAgICdzcic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAogICAgICdzckBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAotICAgICdzckBsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzckBsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLThAbGF0aW4nLAogICAgICdzcl9jcyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLTgnLAotICAgICdzcl9jcy5pc284ODU5Mic6ICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKICAgICAnc3JfY3MuaXNvODg1OTJAbGF0bic6ICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktMicsCi0gICAgJ3NyX2NzLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAotICAgICdzcl9jcy51dGY4QGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLThAbGF0aW4nLAogICAgICdzcl9jc0BsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuVVRGLThAbGF0aW4nLAogICAgICdzcl9tZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfTUUuVVRGLTgnLAogICAgICdzcl9ycyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLTgnLAotICAgICdzcl9ycy51dGY4QGxhdG4nOiAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAotICAgICdzcl9yc0BsYXRpbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzcl9yc0BsYXRuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfUlMuVVRGLThAbGF0aW4nLAogICAgICdzcl9zcCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3JfQ1MuSVNPODg1OS0yJywKICAgICAnc3JfeXUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04QGxhdGluJywKQEAgLTE1NDAsNzkgKzEyODIsNjQgQEAKICAgICAnc3JfeXUuaXNvODg1OTUnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX0NTLklTTzg4NTktNScsCiAgICAgJ3NyX3l1Lmlzbzg4NTk1QGN5cmlsbGljJzogICAgICAgICAgICAgICdzcl9DUy5JU084ODU5LTUnLAogICAgICdzcl95dS5taWNyb3NvZnRjcDEyNTFAY3lyaWxsaWMnOiAgICAgICAnc3JfQ1MuQ1AxMjUxJywKKyAgICAnc3JfeXUudXRmOCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKICAgICAnc3JfeXUudXRmOEBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKICAgICAnc3JfeXVAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgJ3NyX1JTLlVURi04JywKICAgICAnc3MnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NzX1pBLklTTzg4NTktMScsCiAgICAgJ3NzX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc19aQS5JU084ODU5LTEnLAotICAgICdzc196YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3NfWkEuSVNPODg1OS0xJywKICAgICAnc3QnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0X1pBLklTTzg4NTktMScsCiAgICAgJ3N0X3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdF9aQS5JU084ODU5LTEnLAotICAgICdzdF96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAnc3RfWkEuSVNPODg1OS0xJywKICAgICAnc3YnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCi0gICAgJ3N2Lmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTE1JywKICAgICAnc3ZfZmknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMScsCi0gICAgJ3N2X2ZpLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTEnLAotICAgICdzdl9maS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnc3ZfRkkuSVNPODg1OS0xNScsCi0gICAgJ3N2X2ZpLmlzbzg4NTkxNUBldXJvJzogICAgICAgICAgICAgICAgICdzdl9GSS5JU084ODU5LTE1JywKLSAgICAnc3ZfZmkudXRmOEBldXJvJzogICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLlVURi04JywKLSAgICAnc3ZfZmlAZXVybyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X0ZJLklTTzg4NTktMTUnLAogICAgICdzdl9zZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xJywKLSAgICAnc3Zfc2UuODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCi0gICAgJ3N2X3NlLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTEnLAotICAgICdzdl9zZS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAnc3ZfU0UuSVNPODg1OS0xNScsCi0gICAgJ3N2X3NlQGV1cm8nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTE1JywKKyAgICAnc3dfa2UnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N3X0tFLlVURi04JywKKyAgICAnc3dfdHonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N3X1RaLlVURi04JywKICAgICAnc3dlZGlzaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N2X1NFLklTTzg4NTktMScsCi0gICAgJ3N3ZWRpc2guaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICdzdl9TRS5JU084ODU5LTEnLAorICAgICdzemxfcGwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3psX1BMLlVURi04JywKICAgICAndGEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhX0lOLlRTQ0lJLTAnLAogICAgICd0YV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGFfSU4uVFNDSUktMCcsCiAgICAgJ3RhX2luLnRzY2lpJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0YV9JTi5UU0NJSS0wJywKICAgICAndGFfaW4udHNjaWkwJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3RhX0lOLlRTQ0lJLTAnLAorICAgICd0YV9sayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGFfTEsuVVRGLTgnLAogICAgICd0ZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVfSU4uVVRGLTgnLAorICAgICd0ZV9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVfSU4uVVRGLTgnLAogICAgICd0Zyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGdfVEouS09JOC1DJywKICAgICAndGdfdGonOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RnX1RKLktPSTgtQycsCi0gICAgJ3RnX3RqLmtvaThjJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0Z19USi5LT0k4LUMnLAogICAgICd0aCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhfVEguSVNPODg1OS0xMScsCiAgICAgJ3RoX3RoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aF9USC5JU084ODU5LTExJywKLSAgICAndGhfdGguaXNvODg1OTExJzogICAgICAgICAgICAgICAgICAgICAgJ3RoX1RILklTTzg4NTktMTEnLAogICAgICd0aF90aC50YWN0aXMnOiAgICAgICAgICAgICAgICAgICAgICAgICAndGhfVEguVElTNjIwJywKICAgICAndGhfdGgudGlzNjIwJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3RoX1RILlRJUzYyMCcsCiAgICAgJ3RoYWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aF9USC5JU084ODU5LTExJywKKyAgICAndGlfZXInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpX0VSLlVURi04JywKKyAgICAndGlfZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpX0VULlVURi04JywKKyAgICAndGlnX2VyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpZ19FUi5VVEYtOCcsCisgICAgJ3RrX3RtJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0a19UTS5VVEYtOCcsCiAgICAgJ3RsJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0bF9QSC5JU084ODU5LTEnLAogICAgICd0bF9waCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGxfUEguSVNPODg1OS0xJywKLSAgICAndGxfcGguaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3RsX1BILklTTzg4NTktMScsCiAgICAgJ3RuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0bl9aQS5JU084ODU5LTE1JywKICAgICAndG5femEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RuX1pBLklTTzg4NTktMTUnLAotICAgICd0bl96YS5pc284ODU5MTUnOiAgICAgICAgICAgICAgICAgICAgICAndG5fWkEuSVNPODg1OS0xNScsCiAgICAgJ3RyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cl9UUi5JU084ODU5LTknLAorICAgICd0cl9jeSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJfQ1kuSVNPODg1OS05JywKICAgICAndHJfdHInOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyX1RSLklTTzg4NTktOScsCi0gICAgJ3RyX3RyLmlzbzg4NTk5JzogICAgICAgICAgICAgICAgICAgICAgICd0cl9UUi5JU084ODU5LTknLAogICAgICd0cyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHNfWkEuSVNPODg1OS0xJywKICAgICAndHNfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RzX1pBLklTTzg4NTktMScsCi0gICAgJ3RzX3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICd0c19aQS5JU084ODU5LTEnLAogICAgICd0dCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHRfUlUuVEFUQVItQ1lSJywKICAgICAndHRfcnUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R0X1JVLlRBVEFSLUNZUicsCi0gICAgJ3R0X3J1LmtvaThjJzogICAgICAgICAgICAgICAgICAgICAgICAgICd0dF9SVS5LT0k4LUMnLAogICAgICd0dF9ydS50YXRhcmN5cic6ICAgICAgICAgICAgICAgICAgICAgICAndHRfUlUuVEFUQVItQ1lSJywKKyAgICAndHRfcnVAaXF0ZWxpZic6ICAgICAgICAgICAgICAgICAgICAgICAgJ3R0X1JVLlVURi04QGlxdGVsaWYnLAogICAgICd0dXJraXNoJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJfVFIuSVNPODg1OS05JywKLSAgICAndHVya2lzaC5pc284ODU5OSc6ICAgICAgICAgICAgICAgICAgICAgJ3RyX1RSLklTTzg4NTktOScsCisgICAgJ3VnX2NuJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1Z19DTi5VVEYtOCcsCiAgICAgJ3VrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1a19VQS5LT0k4LVUnLAogICAgICd1a191YSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndWtfVUEuS09JOC1VJywKLSAgICAndWtfdWEuY3AxMjUxJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3VrX1VBLkNQMTI1MScsCi0gICAgJ3VrX3VhLmlzbzg4NTk1JzogICAgICAgICAgICAgICAgICAgICAgICd1a19VQS5JU084ODU5LTUnLAotICAgICd1a191YS5rb2k4dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAndWtfVUEuS09JOC1VJywKLSAgICAndWtfdWEubWljcm9zb2Z0Y3AxMjUxJzogICAgICAgICAgICAgICAgJ3VrX1VBLkNQMTI1MScsCiAgICAgJ3VuaXYnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbl9VUy51dGYnLAogICAgICd1bml2ZXJzYWwnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5fVVMudXRmJywKICAgICAndW5pdmVyc2FsLnV0ZjhAdWNzNCc6ICAgICAgICAgICAgICAgICAgJ2VuX1VTLlVURi04JywKKyAgICAndW5tX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VubV9VUy5VVEYtOCcsCiAgICAgJ3VyJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cl9QSy5DUDEyNTYnLAogICAgICd1cl9pbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJfSU4uVVRGLTgnLAogICAgICd1cl9wayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJfUEsuQ1AxMjU2JywKLSAgICAndXJfcGsuY3AxMjU2JzogICAgICAgICAgICAgICAgICAgICAgICAgJ3VyX1BLLkNQMTI1NicsCi0gICAgJ3VyX3BrLm1pY3Jvc29mdGNwMTI1Nic6ICAgICAgICAgICAgICAgICd1cl9QSy5DUDEyNTYnLAogICAgICd1eic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouVVRGLTgnLAogICAgICd1el91eic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouVVRGLTgnLAotICAgICd1el91ei5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAndXpfVVouSVNPODg1OS0xJywKLSAgICAndXpfdXoudXRmOEBjeXJpbGxpYyc6ICAgICAgICAgICAgICAgICAgJ3V6X1VaLlVURi04JywKICAgICAndXpfdXpAY3lyaWxsaWMnOiAgICAgICAgICAgICAgICAgICAgICAgJ3V6X1VaLlVURi04JywKICAgICAndmUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlX1pBLlVURi04JywKICAgICAndmVfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3ZlX1pBLlVURi04JywKQEAgLTE2MjQsMzUgKzEzNTEsMjggQEAKICAgICAndmlfdm4udmlzY2lpMTExJzogICAgICAgICAgICAgICAgICAgICAgJ3ZpX1ZOLlZJU0NJSScsCiAgICAgJ3dhJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YV9CRS5JU084ODU5LTEnLAogICAgICd3YV9iZSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FfQkUuSVNPODg1OS0xJywKLSAgICAnd2FfYmUuaXNvODg1OTEnOiAgICAgICAgICAgICAgICAgICAgICAgJ3dhX0JFLklTTzg4NTktMScsCi0gICAgJ3dhX2JlLmlzbzg4NTkxNSc6ICAgICAgICAgICAgICAgICAgICAgICd3YV9CRS5JU084ODU5LTE1JywKLSAgICAnd2FfYmUuaXNvODg1OTE1QGV1cm8nOiAgICAgICAgICAgICAgICAgJ3dhX0JFLklTTzg4NTktMTUnLAotICAgICd3YV9iZUBldXJvJzogICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FfQkUuSVNPODg1OS0xNScsCisgICAgJ3dhZV9jaCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3YWVfQ0guVVRGLTgnLAorICAgICd3YWxfZXQnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2FsX0VULlVURi04JywKKyAgICAnd29fc24nOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dvX1NOLlVURi04JywKICAgICAneGgnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3hoX1pBLklTTzg4NTktMScsCiAgICAgJ3hoX3phJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd4aF9aQS5JU084ODU5LTEnLAotICAgICd4aF96YS5pc284ODU5MSc6ICAgICAgICAgICAgICAgICAgICAgICAneGhfWkEuSVNPODg1OS0xJywKICAgICAneWknOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3lpX1VTLkNQMTI1NScsCiAgICAgJ3lpX3VzJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5aV9VUy5DUDEyNTUnLAotICAgICd5aV91cy5jcDEyNTUnOiAgICAgICAgICAgICAgICAgICAgICAgICAneWlfVVMuQ1AxMjU1JywKLSAgICAneWlfdXMubWljcm9zb2Z0Y3AxMjU1JzogICAgICAgICAgICAgICAgJ3lpX1VTLkNQMTI1NScsCisgICAgJ3lvX25nJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5b19ORy5VVEYtOCcsCisgICAgJ3l1ZV9oayc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd5dWVfSEsuVVRGLTgnLAogICAgICd6aCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZXVjQ04nLAogICAgICd6aF9jbic6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2IyMzEyJywKICAgICAnemhfY24uYmlnNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmJpZzUnLAogICAgICd6aF9jbi5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZXVjQ04nLAotICAgICd6aF9jbi5nYjE4MDMwJzogICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2IxODAzMCcsCi0gICAgJ3poX2NuLmdiMjMxMic6ICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9DTi5nYjIzMTInLAotICAgICd6aF9jbi5nYmsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfQ04uZ2JrJywKICAgICAnemhfaGsnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCi0gICAgJ3poX2hrLmJpZzUnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1JywKICAgICAnemhfaGsuYmlnNWhrJzogICAgICAgICAgICAgICAgICAgICAgICAgJ3poX0hLLmJpZzVoa3NjcycsCi0gICAgJ3poX2hrLmJpZzVoa3Njcyc6ICAgICAgICAgICAgICAgICAgICAgICd6aF9ISy5iaWc1aGtzY3MnLAorICAgICd6aF9zZyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfU0cuR0IyMzEyJywKKyAgICAnemhfc2cuZ2JrJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1NHLkdCSycsCiAgICAgJ3poX3R3JzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd6aF9UVy5iaWc1JywKLSAgICAnemhfdHcuYmlnNSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3poX1RXLmJpZzUnLAogICAgICd6aF90dy5ldWMnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuZXVjVFcnLAogICAgICd6aF90dy5ldWN0dyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAnemhfVFcuZXVjVFcnLAogICAgICd6dSc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnenVfWkEuSVNPODg1OS0xJywKICAgICAnenVfemEnOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3p1X1pBLklTTzg4NTktMScsCi0gICAgJ3p1X3phLmlzbzg4NTkxJzogICAgICAgICAgICAgICAgICAgICAgICd6dV9aQS5JU084ODU5LTEnLAogfQogCiAjCmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9fX2luaXRfXy5weSBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CmluZGV4IDlmNDM2ZjMuLjY3ZDlkMmUgMTAwNjQ0Ci0tLSBhL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CisrKyBiL0xpYi9sb2dnaW5nL19faW5pdF9fLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBDb3B5cmlnaHQgMjAwMS0yMDEzIGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIyBDb3B5cmlnaHQgMjAwMS0yMDE0IGJ5IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogIwogIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKICMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLApAQCAtMTgsMTIgKzE4LDEzIEBACiBMb2dnaW5nIHBhY2thZ2UgZm9yIFB5dGhvbi4gQmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbgogY29tcC5sYW5nLnB5dGhvbi4KIAotQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCitDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KIAogVG8gdXNlLCBzaW1wbHkgJ2ltcG9ydCBsb2dnaW5nJyBhbmQgbG9nIGF3YXkhCiAiIiIKIAotaW1wb3J0IHN5cywgb3MsIHRpbWUsIGlvLCB0cmFjZWJhY2ssIHdhcm5pbmdzLCB3ZWFrcmVmCitpbXBvcnQgc3lzLCBvcywgdGltZSwgaW8sIHRyYWNlYmFjaywgd2FybmluZ3MsIHdlYWtyZWYsIGNvbGxlY3Rpb25zCisKIGZyb20gc3RyaW5nIGltcG9ydCBUZW1wbGF0ZQogCiBfX2FsbF9fID0gWydCQVNJQ19GT1JNQVQnLCAnQnVmZmVyaW5nRm9ybWF0dGVyJywgJ0NSSVRJQ0FMJywgJ0RFQlVHJywgJ0VSUk9SJywKQEAgLTQyLDYgKzQzLDcgQEAKIAogX19hdXRob3JfXyAgPSAiVmluYXkgU2FqaXAgPHZpbmF5X3NhamlwQHJlZC1kb3ZlLmNvbT4iCiBfX3N0YXR1c19fICA9ICJwcm9kdWN0aW9uIgorIyBUaGUgZm9sbG93aW5nIG1vZHVsZSBhdHRyaWJ1dGVzIGFyZSBubyBsb25nZXIgdXBkYXRlZC4KIF9fdmVyc2lvbl9fID0gIjAuNS4xLjIiCiBfX2RhdGVfXyAgICA9ICIwNyBGZWJydWFyeSAyMDEwIgogCkBAIC01MCwzNCArNTIsNiBAQAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjCi0jIF9zcmNmaWxlIGlzIHVzZWQgd2hlbiB3YWxraW5nIHRoZSBzdGFjayB0byBjaGVjayB3aGVuIHdlJ3ZlIGdvdCB0aGUgZmlyc3QKLSMgY2FsbGVyIHN0YWNrIGZyYW1lLgotIwotaWYgaGFzYXR0cihzeXMsICdmcm96ZW4nKTogI3N1cHBvcnQgZm9yIHB5MmV4ZQotICAgIF9zcmNmaWxlID0gImxvZ2dpbmclc19faW5pdF9fJXMiICUgKG9zLnNlcCwgX19maWxlX19bLTQ6XSkKLWVsc2U6Ci0gICAgX3NyY2ZpbGUgPSBfX2ZpbGVfXwotX3NyY2ZpbGUgPSBvcy5wYXRoLm5vcm1jYXNlKF9zcmNmaWxlKQotCi0KLWlmIGhhc2F0dHIoc3lzLCAnX2dldGZyYW1lJyk6Ci0gICAgY3VycmVudGZyYW1lID0gbGFtYmRhOiBzeXMuX2dldGZyYW1lKDMpCi1lbHNlOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgIGRlZiBjdXJyZW50ZnJhbWUoKToKLSAgICAgICAgIiIiUmV0dXJuIHRoZSBmcmFtZSBvYmplY3QgZm9yIHRoZSBjYWxsZXIncyBzdGFjayBmcmFtZS4iIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCi0gICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgIHJldHVybiBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLQotIyBfc3JjZmlsZSBpcyBvbmx5IHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzeXMuX2dldGZyYW1lKCkuCi0jIFRvIHByb3ZpZGUgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHZlcnNpb25zIG9mIFB5dGhvbiwgc2V0IF9zcmNmaWxlCi0jIHRvIE5vbmUgaWYgX2dldGZyYW1lKCkgaXMgbm90IGF2YWlsYWJsZTsgdGhpcyB2YWx1ZSB3aWxsIHByZXZlbnQKLSMgZmluZENhbGxlcigpIGZyb20gYmVpbmcgY2FsbGVkLgotI2lmIG5vdCBoYXNhdHRyKHN5cywgIl9nZXRmcmFtZSIpOgotIyAgICBfc3JjZmlsZSA9IE5vbmUKLQotIwogI19zdGFydFRpbWUgaXMgdXNlZCBhcyB0aGUgYmFzZSB3aGVuIGNhbGN1bGF0aW5nIHRoZSByZWxhdGl2ZSB0aW1lIG9mIGV2ZW50cwogIwogX3N0YXJ0VGltZSA9IHRpbWUudGltZSgpCkBAIC0xMjMsMjAgKzk3LDIyIEBACiBERUJVRyA9IDEwCiBOT1RTRVQgPSAwCiAKLV9sZXZlbE5hbWVzID0gewotICAgIENSSVRJQ0FMIDogJ0NSSVRJQ0FMJywKLSAgICBFUlJPUiA6ICdFUlJPUicsCi0gICAgV0FSTklORyA6ICdXQVJOSU5HJywKLSAgICBJTkZPIDogJ0lORk8nLAotICAgIERFQlVHIDogJ0RFQlVHJywKLSAgICBOT1RTRVQgOiAnTk9UU0VUJywKLSAgICAnQ1JJVElDQUwnIDogQ1JJVElDQUwsCi0gICAgJ0VSUk9SJyA6IEVSUk9SLAotICAgICdXQVJOJyA6IFdBUk5JTkcsCi0gICAgJ1dBUk5JTkcnIDogV0FSTklORywKLSAgICAnSU5GTycgOiBJTkZPLAotICAgICdERUJVRycgOiBERUJVRywKLSAgICAnTk9UU0VUJyA6IE5PVFNFVCwKK19sZXZlbFRvTmFtZSA9IHsKKyAgICBDUklUSUNBTDogJ0NSSVRJQ0FMJywKKyAgICBFUlJPUjogJ0VSUk9SJywKKyAgICBXQVJOSU5HOiAnV0FSTklORycsCisgICAgSU5GTzogJ0lORk8nLAorICAgIERFQlVHOiAnREVCVUcnLAorICAgIE5PVFNFVDogJ05PVFNFVCcsCit9CitfbmFtZVRvTGV2ZWwgPSB7CisgICAgJ0NSSVRJQ0FMJzogQ1JJVElDQUwsCisgICAgJ0VSUk9SJzogRVJST1IsCisgICAgJ1dBUk4nOiBXQVJOSU5HLAorICAgICdXQVJOSU5HJzogV0FSTklORywKKyAgICAnSU5GTyc6IElORk8sCisgICAgJ0RFQlVHJzogREVCVUcsCisgICAgJ05PVFNFVCc6IE5PVFNFVCwKIH0KIAogZGVmIGdldExldmVsTmFtZShsZXZlbCk6CkBAIC0xNTMsNyArMTI5LDggQEAKIAogICAgIE90aGVyd2lzZSwgdGhlIHN0cmluZyAiTGV2ZWwgJXMiICUgbGV2ZWwgaXMgcmV0dXJuZWQuCiAgICAgIiIiCi0gICAgcmV0dXJuIF9sZXZlbE5hbWVzLmdldChsZXZlbCwgKCJMZXZlbCAlcyIgJSBsZXZlbCkpCisgICAgIyBTZWUgSXNzdWUgIzIyMzg2IGZvciB0aGUgcmVhc29uIGZvciB0aGlzIGNvbnZvbHV0ZWQgZXhwcmVzc2lvbgorICAgIHJldHVybiBfbGV2ZWxUb05hbWUuZ2V0KGxldmVsLCBfbmFtZVRvTGV2ZWwuZ2V0KGxldmVsLCAoIkxldmVsICVzIiAlIGxldmVsKSkpCiAKIGRlZiBhZGRMZXZlbE5hbWUobGV2ZWwsIGxldmVsTmFtZSk6CiAgICAgIiIiCkBAIC0xNjMsMTggKzE0MCw1MiBAQAogICAgICIiIgogICAgIF9hY3F1aXJlTG9jaygpCiAgICAgdHJ5OiAgICAjdW5saWtlbHkgdG8gY2F1c2UgYW4gZXhjZXB0aW9uLCBidXQgeW91IG5ldmVyIGtub3cuLi4KLSAgICAgICAgX2xldmVsTmFtZXNbbGV2ZWxdID0gbGV2ZWxOYW1lCi0gICAgICAgIF9sZXZlbE5hbWVzW2xldmVsTmFtZV0gPSBsZXZlbAorICAgICAgICBfbGV2ZWxUb05hbWVbbGV2ZWxdID0gbGV2ZWxOYW1lCisgICAgICAgIF9uYW1lVG9MZXZlbFtsZXZlbE5hbWVdID0gbGV2ZWwKICAgICBmaW5hbGx5OgogICAgICAgICBfcmVsZWFzZUxvY2soKQogCitpZiBoYXNhdHRyKHN5cywgJ19nZXRmcmFtZScpOgorICAgIGN1cnJlbnRmcmFtZSA9IGxhbWJkYTogc3lzLl9nZXRmcmFtZSgzKQorZWxzZTogI3ByYWdtYTogbm8gY292ZXIKKyAgICBkZWYgY3VycmVudGZyYW1lKCk6CisgICAgICAgICIiIlJldHVybiB0aGUgZnJhbWUgb2JqZWN0IGZvciB0aGUgY2FsbGVyJ3Mgc3RhY2sgZnJhbWUuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjaworCisjCisjIF9zcmNmaWxlIGlzIHVzZWQgd2hlbiB3YWxraW5nIHRoZSBzdGFjayB0byBjaGVjayB3aGVuIHdlJ3ZlIGdvdCB0aGUgZmlyc3QKKyMgY2FsbGVyIHN0YWNrIGZyYW1lLCBieSBza2lwcGluZyBmcmFtZXMgd2hvc2UgZmlsZW5hbWUgaXMgdGhhdCBvZiB0aGlzCisjIG1vZHVsZSdzIHNvdXJjZS4gSXQgdGhlcmVmb3JlIHNob3VsZCBjb250YWluIHRoZSBmaWxlbmFtZSBvZiB0aGlzIG1vZHVsZSdzCisjIHNvdXJjZSBmaWxlLgorIworIyBPcmRpbmFyaWx5IHdlIHdvdWxkIHVzZSBfX2ZpbGVfXyBmb3IgdGhpcywgYnV0IGZyb3plbiBtb2R1bGVzIGRvbid0IGFsd2F5cworIyBoYXZlIF9fZmlsZV9fIHNldCwgZm9yIHNvbWUgcmVhc29uIChzZWUgSXNzdWUgIzIxNzM2KS4gVGh1cywgd2UgZ2V0IHRoZQorIyBmaWxlbmFtZSBmcm9tIGEgaGFuZHkgY29kZSBvYmplY3QgZnJvbSBhIGZ1bmN0aW9uIGRlZmluZWQgaW4gdGhpcyBtb2R1bGUuCisjIChUaGVyZSdzIG5vIHBhcnRpY3VsYXIgcmVhc29uIGZvciBwaWNraW5nIGFkZExldmVsTmFtZS4pCisjCisKK19zcmNmaWxlID0gb3MucGF0aC5ub3JtY2FzZShhZGRMZXZlbE5hbWUuX19jb2RlX18uY29fZmlsZW5hbWUpCisKKyMgX3NyY2ZpbGUgaXMgb25seSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggc3lzLl9nZXRmcmFtZSgpLgorIyBUbyBwcm92aWRlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBQeXRob24sIHNldCBfc3JjZmlsZQorIyB0byBOb25lIGlmIF9nZXRmcmFtZSgpIGlzIG5vdCBhdmFpbGFibGU7IHRoaXMgdmFsdWUgd2lsbCBwcmV2ZW50CisjIGZpbmRDYWxsZXIoKSBmcm9tIGJlaW5nIGNhbGxlZC4gWW91IGNhbiBhbHNvIGRvIHRoaXMgaWYgeW91IHdhbnQgdG8gYXZvaWQKKyMgdGhlIG92ZXJoZWFkIG9mIGZldGNoaW5nIGNhbGxlciBpbmZvcm1hdGlvbiwgZXZlbiB3aGVuIF9nZXRmcmFtZSgpIGlzCisjIGF2YWlsYWJsZS4KKyNpZiBub3QgaGFzYXR0cihzeXMsICdfZ2V0ZnJhbWUnKToKKyMgICAgX3NyY2ZpbGUgPSBOb25lCisKKwogZGVmIF9jaGVja0xldmVsKGxldmVsKToKICAgICBpZiBpc2luc3RhbmNlKGxldmVsLCBpbnQpOgogICAgICAgICBydiA9IGxldmVsCiAgICAgZWxpZiBzdHIobGV2ZWwpID09IGxldmVsOgotICAgICAgICBpZiBsZXZlbCBub3QgaW4gX2xldmVsTmFtZXM6CisgICAgICAgIGlmIGxldmVsIG5vdCBpbiBfbmFtZVRvTGV2ZWw6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJVbmtub3duIGxldmVsOiAlciIgJSBsZXZlbCkKLSAgICAgICAgcnYgPSBfbGV2ZWxOYW1lc1tsZXZlbF0KKyAgICAgICAgcnYgPSBfbmFtZVRvTGV2ZWxbbGV2ZWxdCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJMZXZlbCBub3QgYW4gaW50ZWdlciBvciBhIHZhbGlkIHN0cmluZzogJXIiICUgbGV2ZWwpCiAgICAgcmV0dXJuIHJ2CkBAIC0yNTAsNyArMjYxLDEzIEBACiAgICAgICAgICMgJ1ZhbHVlIGlzICVkJyBpbnN0ZWFkIG9mICdWYWx1ZSBpcyAwJy4KICAgICAgICAgIyBGb3IgdGhlIHVzZSBjYXNlIG9mIHBhc3NpbmcgYSBkaWN0aW9uYXJ5LCB0aGlzIHNob3VsZCBub3QgYmUgYQogICAgICAgICAjIHByb2JsZW0uCi0gICAgICAgIGlmIGFyZ3MgYW5kIGxlbihhcmdzKSA9PSAxIGFuZCBpc2luc3RhbmNlKGFyZ3NbMF0sIGRpY3QpIGFuZCBhcmdzWzBdOgorICAgICAgICAjIElzc3VlICMyMTE3MjogYSByZXF1ZXN0IHdhcyBtYWRlIHRvIHJlbGF4IHRoZSBpc2luc3RhbmNlIGNoZWNrCisgICAgICAgICMgdG8gaGFzYXR0cihhcmdzWzBdLCAnX19nZXRpdGVtX18nKS4gSG93ZXZlciwgdGhlIGRvY3Mgb24gc3RyaW5nCisgICAgICAgICMgZm9ybWF0dGluZyBzdGlsbCBzZWVtIHRvIHN1Z2dlc3QgYSBtYXBwaW5nIG9iamVjdCBpcyByZXF1aXJlZC4KKyAgICAgICAgIyBUaHVzLCB3aGlsZSBub3QgcmVtb3ZpbmcgdGhlIGlzaW5zdGFuY2UgY2hlY2ssIGl0IGRvZXMgbm93IGxvb2sKKyAgICAgICAgIyBmb3IgY29sbGVjdGlvbnMuTWFwcGluZyByYXRoZXIgdGhhbiwgYXMgYmVmb3JlLCBkaWN0LgorICAgICAgICBpZiAoYXJncyBhbmQgbGVuKGFyZ3MpID09IDEgYW5kIGlzaW5zdGFuY2UoYXJnc1swXSwgY29sbGVjdGlvbnMuTWFwcGluZykKKyAgICAgICAgICAgIGFuZCBhcmdzWzBdKToKICAgICAgICAgICAgIGFyZ3MgPSBhcmdzWzBdCiAgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKICAgICAgICAgc2VsZi5sZXZlbG5hbWUgPSBnZXRMZXZlbE5hbWUobGV2ZWwpCkBAIC03MDgsMTYgKzcyNSwxNyBAQAogICAgIFJlbW92ZSBhIGhhbmRsZXIgcmVmZXJlbmNlIGZyb20gdGhlIGludGVybmFsIGNsZWFudXAgbGlzdC4KICAgICAiIiIKICAgICAjIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBkdXJpbmcgbW9kdWxlIHRlYXJkb3duLCB3aGVuIGdsb2JhbHMgYXJlCi0gICAgIyBzZXQgdG8gTm9uZS4gSWYgX2FjcXVpcmVMb2NrIGlzIE5vbmUsIGFzc3VtZSB0aGlzIGlzIHRoZSBjYXNlIGFuZCBkbwotICAgICMgbm90aGluZy4KLSAgICBpZiAoX2FjcXVpcmVMb2NrIGlzIG5vdCBOb25lIGFuZCBfaGFuZGxlckxpc3QgaXMgbm90IE5vbmUgYW5kCi0gICAgICAgIF9yZWxlYXNlTG9jayBpcyBub3QgTm9uZSk6Ci0gICAgICAgIF9hY3F1aXJlTG9jaygpCisgICAgIyBzZXQgdG8gTm9uZS4gSXQgY2FuIGFsc28gYmUgY2FsbGVkIGZyb20gYW5vdGhlciB0aHJlYWQuIFNvIHdlIG5lZWQgdG8KKyAgICAjIHByZS1lbXB0aXZlbHkgZ3JhYiB0aGUgbmVjZXNzYXJ5IGdsb2JhbHMgYW5kIGNoZWNrIGlmIHRoZXkncmUgTm9uZSwKKyAgICAjIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZCBmYWlsdXJlcyBkdXJpbmcgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisgICAgYWNxdWlyZSwgcmVsZWFzZSwgaGFuZGxlcnMgPSBfYWNxdWlyZUxvY2ssIF9yZWxlYXNlTG9jaywgX2hhbmRsZXJMaXN0CisgICAgaWYgYWNxdWlyZSBhbmQgcmVsZWFzZSBhbmQgaGFuZGxlcnM6CisgICAgICAgIGFjcXVpcmUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiB3ciBpbiBfaGFuZGxlckxpc3Q6Ci0gICAgICAgICAgICAgICAgX2hhbmRsZXJMaXN0LnJlbW92ZSh3cikKKyAgICAgICAgICAgIGlmIHdyIGluIGhhbmRsZXJzOgorICAgICAgICAgICAgICAgIGhhbmRsZXJzLnJlbW92ZSh3cikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIF9yZWxlYXNlTG9jaygpCisgICAgICAgICAgICByZWxlYXNlKCkKIAogZGVmIF9hZGRIYW5kbGVyUmVmKGhhbmRsZXIpOgogICAgICIiIgpAQCAtODgyLDE2ICs5MDAsMzcgQEAKICAgICAgICAgVGhlIHJlY29yZCB3aGljaCB3YXMgYmVpbmcgcHJvY2Vzc2VkIGlzIHBhc3NlZCBpbiB0byB0aGlzIG1ldGhvZC4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHJhaXNlRXhjZXB0aW9ucyBhbmQgc3lzLnN0ZGVycjogICMgc2VlIGlzc3VlIDEzODA3Ci0gICAgICAgICAgICBlaSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICB0LCB2LCB0YiA9IHN5cy5leGNfaW5mbygpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4Y2VwdGlvbihlaVswXSwgZWlbMV0sIGVpWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSwgc3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCdMb2dnZWQgZnJvbSBmaWxlICVzLCBsaW5lICVzXG4nICUgKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmZpbGVuYW1lLCByZWNvcmQubGluZW5vKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJy0tLSBMb2dnaW5nIGVycm9yIC0tLVxuJykKKyAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjZXB0aW9uKHQsIHYsIHRiLCBOb25lLCBzeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0NhbGwgc3RhY2s6XG4nKQorICAgICAgICAgICAgICAgICMgV2FsayB0aGUgc3RhY2sgZnJhbWUgdXAgdW50aWwgd2UncmUgb3V0IG9mIGxvZ2dpbmcsCisgICAgICAgICAgICAgICAgIyBzbyBhcyB0byBwcmludCB0aGUgY2FsbGluZyBjb250ZXh0LgorICAgICAgICAgICAgICAgIGZyYW1lID0gdGIudGJfZnJhbWUKKyAgICAgICAgICAgICAgICB3aGlsZSAoZnJhbWUgYW5kIG9zLnBhdGguZGlybmFtZShmcmFtZS5mX2NvZGUuY29fZmlsZW5hbWUpID09CisgICAgICAgICAgICAgICAgICAgICAgIF9fcGF0aF9fWzBdKToKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgICAgICAgICBpZiBmcmFtZToKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X3N0YWNrKGZyYW1lLCBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgIyBjb3VsZG4ndCBmaW5kIHRoZSByaWdodCBzdGFjayBmcmFtZSwgZm9yIHNvbWUgcmVhc29uCisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ0xvZ2dlZCBmcm9tIGZpbGUgJXMsIGxpbmUgJXNcbicgJSAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkLmZpbGVuYW1lLCByZWNvcmQubGluZW5vKSkKKyAgICAgICAgICAgICAgICAjIElzc3VlIDE4NjcxOiBvdXRwdXQgbG9nZ2luZyBtZXNzYWdlIGFuZCBhcmd1bWVudHMKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoJ01lc3NhZ2U6ICVyXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FyZ3VtZW50czogJXNcbicgJSAocmVjb3JkLm1zZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQuYXJncykpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnVW5hYmxlIHRvIHByaW50IHRoZSBtZXNzYWdlIGFuZCBhcmd1bWVudHMnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAtIHBvc3NpYmxlIGZvcm1hdHRpbmcgZXJyb3IuXG5Vc2UgdGhlJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgdHJhY2ViYWNrIGFib3ZlIHRvIGhlbHAgZmluZCB0aGUgZXJyb3IuXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBwYXNzICAgICMgc2VlIGlzc3VlIDU5NzEKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZGVsIGVpCisgICAgICAgICAgICAgICAgZGVsIHQsIHYsIHRiCiAKIGNsYXNzIFN0cmVhbUhhbmRsZXIoSGFuZGxlcik6CiAgICAgIiIiCkBAIC05NDEsOSArOTgwLDcgQEAKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShtc2cpCiAgICAgICAgICAgICBzdHJlYW0ud3JpdGUoc2VsZi50ZXJtaW5hdG9yKQogICAgICAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIEZpbGVIYW5kbGVyKFN0cmVhbUhhbmRsZXIpOgpAQCAtOTc0LDE0ICsxMDExLDE5IEBACiAgICAgICAgICIiIgogICAgICAgICBzZWxmLmFjcXVpcmUoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBpZiBzZWxmLnN0cmVhbToKLSAgICAgICAgICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHNlbGYuc3RyZWFtLCAiY2xvc2UiKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0uY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtID0gTm9uZQotICAgICAgICAgICAgIyBJc3N1ZSAjMTk1MjM6IGNhbGwgdW5jb25kaXRpb25hbGx5IHRvCi0gICAgICAgICAgICAjIHByZXZlbnQgYSBoYW5kbGVyIGxlYWsgd2hlbiBkZWxheSBpcyBzZXQKLSAgICAgICAgICAgIFN0cmVhbUhhbmRsZXIuY2xvc2Uoc2VsZikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0cmVhbToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaCgpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0gPSBzZWxmLnN0cmVhbQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKHN0cmVhbSwgImNsb3NlIik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtLmNsb3NlKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTk1MjM6IGNhbGwgdW5jb25kaXRpb25hbGx5IHRvCisgICAgICAgICAgICAgICAgIyBwcmV2ZW50IGEgaGFuZGxlciBsZWFrIHdoZW4gZGVsYXkgaXMgc2V0CisgICAgICAgICAgICAgICAgU3RyZWFtSGFuZGxlci5jbG9zZShzZWxmKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5yZWxlYXNlKCkKIApAQCAtMTY4Niw3ICsxNzI4LDcgQEAKICAgICBfYWNxdWlyZUxvY2soKQogICAgIHRyeToKICAgICAgICAgaWYgbGVuKHJvb3QuaGFuZGxlcnMpID09IDA6Ci0gICAgICAgICAgICBoYW5kbGVycyA9IGt3YXJncy5nZXQoImhhbmRsZXJzIikKKyAgICAgICAgICAgIGhhbmRsZXJzID0ga3dhcmdzLnBvcCgiaGFuZGxlcnMiLCBOb25lKQogICAgICAgICAgICAgaWYgaGFuZGxlcnMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBpZiAic3RyZWFtIiBpbiBrd2FyZ3MgYW5kICJmaWxlbmFtZSIgaW4ga3dhcmdzOgogICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCInc3RyZWFtJyBhbmQgJ2ZpbGVuYW1lJyBzaG91bGQgbm90IGJlICIKQEAgLTE2OTYsMjggKzE3MzgsMzEgQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJ3N0cmVhbScgb3IgJ2ZpbGVuYW1lJyBzaG91bGQgbm90IGJlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3BlY2lmaWVkIHRvZ2V0aGVyIHdpdGggJ2hhbmRsZXJzJyIpCiAgICAgICAgICAgICBpZiBoYW5kbGVycyBpcyBOb25lOgotICAgICAgICAgICAgICAgIGZpbGVuYW1lID0ga3dhcmdzLmdldCgiZmlsZW5hbWUiKQorICAgICAgICAgICAgICAgIGZpbGVuYW1lID0ga3dhcmdzLnBvcCgiZmlsZW5hbWUiLCBOb25lKQorICAgICAgICAgICAgICAgIG1vZGUgPSBrd2FyZ3MucG9wKCJmaWxlbW9kZSIsICdhJykKICAgICAgICAgICAgICAgICBpZiBmaWxlbmFtZToKLSAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGt3YXJncy5nZXQoImZpbGVtb2RlIiwgJ2EnKQogICAgICAgICAgICAgICAgICAgICBoID0gRmlsZUhhbmRsZXIoZmlsZW5hbWUsIG1vZGUpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0ga3dhcmdzLmdldCgic3RyZWFtIikKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtID0ga3dhcmdzLnBvcCgic3RyZWFtIiwgTm9uZSkKICAgICAgICAgICAgICAgICAgICAgaCA9IFN0cmVhbUhhbmRsZXIoc3RyZWFtKQogICAgICAgICAgICAgICAgIGhhbmRsZXJzID0gW2hdCi0gICAgICAgICAgICBkZnMgPSBrd2FyZ3MuZ2V0KCJkYXRlZm10IiwgTm9uZSkKLSAgICAgICAgICAgIHN0eWxlID0ga3dhcmdzLmdldCgic3R5bGUiLCAnJScpCisgICAgICAgICAgICBkZnMgPSBrd2FyZ3MucG9wKCJkYXRlZm10IiwgTm9uZSkKKyAgICAgICAgICAgIHN0eWxlID0ga3dhcmdzLnBvcCgic3R5bGUiLCAnJScpCiAgICAgICAgICAgICBpZiBzdHlsZSBub3QgaW4gX1NUWUxFUzoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdTdHlsZSBtdXN0IGJlIG9uZSBvZjogJXMnICUgJywnLmpvaW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU1RZTEVTLmtleXMoKSkpCi0gICAgICAgICAgICBmcyA9IGt3YXJncy5nZXQoImZvcm1hdCIsIF9TVFlMRVNbc3R5bGVdWzFdKQorICAgICAgICAgICAgZnMgPSBrd2FyZ3MucG9wKCJmb3JtYXQiLCBfU1RZTEVTW3N0eWxlXVsxXSkKICAgICAgICAgICAgIGZtdCA9IEZvcm1hdHRlcihmcywgZGZzLCBzdHlsZSkKICAgICAgICAgICAgIGZvciBoIGluIGhhbmRsZXJzOgogICAgICAgICAgICAgICAgIGlmIGguZm9ybWF0dGVyIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIGguc2V0Rm9ybWF0dGVyKGZtdCkKICAgICAgICAgICAgICAgICByb290LmFkZEhhbmRsZXIoaCkKLSAgICAgICAgICAgIGxldmVsID0ga3dhcmdzLmdldCgibGV2ZWwiKQorICAgICAgICAgICAgbGV2ZWwgPSBrd2FyZ3MucG9wKCJsZXZlbCIsIE5vbmUpCiAgICAgICAgICAgICBpZiBsZXZlbCBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByb290LnNldExldmVsKGxldmVsKQorICAgICAgICAgICAgaWYga3dhcmdzOgorICAgICAgICAgICAgICAgIGtleXMgPSAnLCAnLmpvaW4oa3dhcmdzLmtleXMoKSkKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbnJlY29nbmlzZWQgYXJndW1lbnQocyk6ICVzJyAlIGtleXMpCiAgICAgZmluYWxseToKICAgICAgICAgX3JlbGVhc2VMb2NrKCkKIApAQCAtMTgzNiw3ICsxODgxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgaC5hY3F1aXJlKCkKICAgICAgICAgICAgICAgICAgICAgaC5mbHVzaCgpCiAgICAgICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgZXJyb3JzIHdoaWNoIG1pZ2h0IGJlIGNhdXNlZAogICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaGFuZGxlcnMgaGF2ZSBiZWVuIGNsb3NlZCBidXQKICAgICAgICAgICAgICAgICAgICAgIyByZWZlcmVuY2VzIHRvIHRoZW0gYXJlIHN0aWxsIGFyb3VuZCBhdApAQCAtMTg0NCw3ICsxODg5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIGgucmVsZWFzZSgpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0OiAjIGlnbm9yZSBldmVyeXRoaW5nLCBhcyB3ZSdyZSBzaHV0dGluZyBkb3duCiAgICAgICAgICAgICBpZiByYWlzZUV4Y2VwdGlvbnM6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICNlbHNlLCBzd2FsbG93CmRpZmYgLS1naXQgYS9MaWIvbG9nZ2luZy9jb25maWcucHkgYi9MaWIvbG9nZ2luZy9jb25maWcucHkKaW5kZXggMTg4MDYxNC4uODk1ZmIyNiAxMDA2NDQKLS0tIGEvTGliL2xvZ2dpbmcvY29uZmlnLnB5CisrKyBiL0xpYi9sb2dnaW5nL2NvbmZpZy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMDEtMjAxMyBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMDEtMjAxNCBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKQEAgLTE5LDEzICsxOSwxOSBAQAogaXMgYmFzZWQgb24gUEVQIDI4MiBhbmQgY29tbWVudHMgdGhlcmV0byBpbiBjb21wLmxhbmcucHl0aG9uLCBhbmQgaW5mbHVlbmNlZAogYnkgQXBhY2hlJ3MgbG9nNGogc3lzdGVtLgogCi1Db3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvcHlyaWdodCAoQykgMjAwMS0yMDE0IFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgogCiBUbyB1c2UsIHNpbXBseSAnaW1wb3J0IGxvZ2dpbmcnIGFuZCBsb2cgYXdheSEKICIiIgogCi1pbXBvcnQgc3lzLCBsb2dnaW5nLCBsb2dnaW5nLmhhbmRsZXJzLCBzb2NrZXQsIHN0cnVjdCwgdHJhY2ViYWNrLCByZQoraW1wb3J0IGVycm5vCiBpbXBvcnQgaW8KK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgbG9nZ2luZy5oYW5kbGVycworaW1wb3J0IHJlCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCitpbXBvcnQgdHJhY2ViYWNrCiAKIHRyeToKICAgICBpbXBvcnQgX3RocmVhZCBhcyB0aHJlYWQKQEAgLTM4LDEwICs0NCw3IEBACiAKIERFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCA9IDkwMzAKIAotaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6Ci0gICAgUkVTRVRfRVJST1IgPSAxMDA1NCAgICNXU0FFQ09OTlJFU0VUCi1lbHNlOgotICAgIFJFU0VUX0VSUk9SID0gMTA0ICAgICAjRUNPTk5SRVNFVAorUkVTRVRfRVJST1IgPSBlcnJuby5FQ09OTlJFU0VUCiAKICMKICMgICBUaGUgZm9sbG93aW5nIGNvZGUgaW1wbGVtZW50cyBhIHNvY2tldCBsaXN0ZW5lciBmb3Igb24tdGhlLWZseQpAQCAtNjEsMTEgKzY0LDE0IEBACiAgICAgIiIiCiAgICAgaW1wb3J0IGNvbmZpZ3BhcnNlcgogCi0gICAgY3AgPSBjb25maWdwYXJzZXIuQ29uZmlnUGFyc2VyKGRlZmF1bHRzKQotICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgotICAgICAgICBjcC5yZWFkX2ZpbGUoZm5hbWUpCisgICAgaWYgaXNpbnN0YW5jZShmbmFtZSwgY29uZmlncGFyc2VyLlJhd0NvbmZpZ1BhcnNlcik6CisgICAgICAgIGNwID0gZm5hbWUKICAgICBlbHNlOgotICAgICAgICBjcC5yZWFkKGZuYW1lKQorICAgICAgICBjcCA9IGNvbmZpZ3BhcnNlci5Db25maWdQYXJzZXIoZGVmYXVsdHMpCisgICAgICAgIGlmIGhhc2F0dHIoZm5hbWUsICdyZWFkbGluZScpOgorICAgICAgICAgICAgY3AucmVhZF9maWxlKGZuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3AucmVhZChmbmFtZSkKIAogICAgIGZvcm1hdHRlcnMgPSBfY3JlYXRlX2Zvcm1hdHRlcnMoY3ApCiAKQEAgLTE0MSw3ICsxNDcsNyBAQAogICAgICAgICBoID0ga2xhc3MoKmFyZ3MpCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgaC5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgICAgIGguc2V0TGV2ZWwobGV2ZWwpCiAgICAgICAgIGlmIGxlbihmbXQpOgogICAgICAgICAgICAgaC5zZXRGb3JtYXR0ZXIoZm9ybWF0dGVyc1tmbXRdKQogICAgICAgICBpZiBpc3N1YmNsYXNzKGtsYXNzLCBsb2dnaW5nLmhhbmRsZXJzLk1lbW9yeUhhbmRsZXIpOgpAQCAtMTg4LDcgKzE5NCw3IEBACiAgICAgbG9nID0gcm9vdAogICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgbGV2ZWwgPSBzZWN0aW9uWyJsZXZlbCJdCi0gICAgICAgIGxvZy5zZXRMZXZlbChsb2dnaW5nLl9sZXZlbE5hbWVzW2xldmVsXSkKKyAgICAgICAgbG9nLnNldExldmVsKGxldmVsKQogICAgIGZvciBoIGluIHJvb3QuaGFuZGxlcnNbOl06CiAgICAgICAgIHJvb3QucmVtb3ZlSGFuZGxlcihoKQogICAgIGhsaXN0ID0gc2VjdGlvblsiaGFuZGxlcnMiXQpAQCAtMjM0LDcgKzI0MCw3IEBACiAgICAgICAgICAgICBleGlzdGluZy5yZW1vdmUocW4pCiAgICAgICAgIGlmICJsZXZlbCIgaW4gc2VjdGlvbjoKICAgICAgICAgICAgIGxldmVsID0gc2VjdGlvblsibGV2ZWwiXQotICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxvZ2dpbmcuX2xldmVsTmFtZXNbbGV2ZWxdKQorICAgICAgICAgICAgbG9nZ2VyLnNldExldmVsKGxldmVsKQogICAgICAgICBmb3IgaCBpbiBsb2dnZXIuaGFuZGxlcnNbOl06CiAgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoKQogICAgICAgICBsb2dnZXIucHJvcGFnYXRlID0gcHJvcGFnYXRlCkBAIC0yNzEsNiArMjc3LDMwIEBACiAgICAgcmV0dXJuIFRydWUKIAogCitjbGFzcyBDb252ZXJ0aW5nTWl4aW4ob2JqZWN0KToKKyAgICAiIiJGb3IgQ29udmVydGluZ1hYWCdzLCB0aGlzIG1peGluIGNsYXNzIHByb3ZpZGVzIGNvbW1vbiBmdW5jdGlvbnMiIiIKKworICAgIGRlZiBjb252ZXJ0X3dpdGhfa2V5KHNlbGYsIGtleSwgdmFsdWUsIHJlcGxhY2U9VHJ1ZSk6CisgICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCisgICAgICAgICNJZiB0aGUgY29udmVydGVkIHZhbHVlIGlzIGRpZmZlcmVudCwgc2F2ZSBmb3IgbmV4dCB0aW1lCisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6CisgICAgICAgICAgICBpZiByZXBsYWNlOgorICAgICAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGNvbnZlcnQoc2VsZiwgdmFsdWUpOgorICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQorICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgorICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKKyAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgorICAgICAgICByZXR1cm4gcmVzdWx0CisKKwogIyBUaGUgQ29udmVydGluZ1hYWCBjbGFzc2VzIGFyZSB3cmFwcGVycyBhcm91bmQgc3RhbmRhcmQgUHl0aG9uIGNvbnRhaW5lcnMsCiAjIGFuZCB0aGV5IHNlcnZlIHRvIGNvbnZlcnQgYW55IHN1aXRhYmxlIHZhbHVlcyBpbiB0aGUgY29udGFpbmVyLiBUaGUKICMgY29udmVyc2lvbiBjb252ZXJ0cyBiYXNlIGRpY3RzLCBsaXN0cyBhbmQgdHVwbGVzIHRvIHRoZWlyIHdyYXBwZWQKQEAgLTI4MCw3NyArMzEwLDM3IEBACiAjIEVhY2ggd3JhcHBlciBzaG91bGQgaGF2ZSBhIGNvbmZpZ3VyYXRvciBhdHRyaWJ1dGUgaG9sZGluZyB0aGUgYWN0dWFsCiAjIGNvbmZpZ3VyYXRvciB0byB1c2UgZm9yIGNvbnZlcnNpb24uCiAKLWNsYXNzIENvbnZlcnRpbmdEaWN0KGRpY3QpOgorY2xhc3MgQ29udmVydGluZ0RpY3QoZGljdCwgQ29udmVydGluZ01peGluKToKICAgICAiIiJBIGNvbnZlcnRpbmcgZGljdGlvbmFyeSB3cmFwcGVyLiIiIgogCiAgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6CiAgICAgICAgIHZhbHVlID0gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCi0gICAgICAgICNJZiB0aGUgY29udmVydGVkIHZhbHVlIGlzIGRpZmZlcmVudCwgc2F2ZSBmb3IgbmV4dCB0aW1lCi0gICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgICBzZWxmW2tleV0gPSByZXN1bHQKLSAgICAgICAgICAgIGlmIHR5cGUocmVzdWx0KSBpbiAoQ29udmVydGluZ0RpY3QsIENvbnZlcnRpbmdMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nVHVwbGUpOgotICAgICAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBzZWxmCi0gICAgICAgICAgICAgICAgcmVzdWx0LmtleSA9IGtleQotICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgIHJldHVybiBzZWxmLmNvbnZlcnRfd2l0aF9rZXkoa2V5LCB2YWx1ZSkKIAogICAgIGRlZiBnZXQoc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUpOgogICAgICAgICB2YWx1ZSA9IGRpY3QuZ2V0KHNlbGYsIGtleSwgZGVmYXVsdCkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKLSAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAotICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKLSAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5Ci0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlKQogCiAgICAgZGVmIHBvcChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CiAgICAgICAgIHZhbHVlID0gZGljdC5wb3Aoc2VsZiwga2V5LCBkZWZhdWx0KQotICAgICAgICByZXN1bHQgPSBzZWxmLmNvbmZpZ3VyYXRvci5jb252ZXJ0KHZhbHVlKQotICAgICAgICBpZiB2YWx1ZSBpcyBub3QgcmVzdWx0OgotICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKLSAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5Ci0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlLCByZXBsYWNlPUZhbHNlKQogCi1jbGFzcyBDb252ZXJ0aW5nTGlzdChsaXN0KToKK2NsYXNzIENvbnZlcnRpbmdMaXN0KGxpc3QsIENvbnZlcnRpbmdNaXhpbik6CiAgICAgIiIiQSBjb252ZXJ0aW5nIGxpc3Qgd3JhcHBlci4iIiIKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgdmFsdWUgPSBsaXN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKLSAgICAgICAgI0lmIHRoZSBjb252ZXJ0ZWQgdmFsdWUgaXMgZGlmZmVyZW50LCBzYXZlIGZvciBuZXh0IHRpbWUKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIHNlbGZba2V5XSA9IHJlc3VsdAotICAgICAgICAgICAgaWYgdHlwZShyZXN1bHQpIGluIChDb252ZXJ0aW5nRGljdCwgQ29udmVydGluZ0xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnZlcnRpbmdUdXBsZSk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LnBhcmVudCA9IHNlbGYKLSAgICAgICAgICAgICAgICByZXN1bHQua2V5ID0ga2V5Ci0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlKQogCiAgICAgZGVmIHBvcChzZWxmLCBpZHg9LTEpOgogICAgICAgICB2YWx1ZSA9IGxpc3QucG9wKHNlbGYsIGlkeCkKLSAgICAgICAgcmVzdWx0ID0gc2VsZi5jb25maWd1cmF0b3IuY29udmVydCh2YWx1ZSkKLSAgICAgICAgaWYgdmFsdWUgaXMgbm90IHJlc3VsdDoKLSAgICAgICAgICAgIGlmIHR5cGUocmVzdWx0KSBpbiAoQ29udmVydGluZ0RpY3QsIENvbnZlcnRpbmdMaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb252ZXJ0aW5nVHVwbGUpOgotICAgICAgICAgICAgICAgIHJlc3VsdC5wYXJlbnQgPSBzZWxmCi0gICAgICAgIHJldHVybiByZXN1bHQKKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydCh2YWx1ZSkKIAotY2xhc3MgQ29udmVydGluZ1R1cGxlKHR1cGxlKToKK2NsYXNzIENvbnZlcnRpbmdUdXBsZSh0dXBsZSwgQ29udmVydGluZ01peGluKToKICAgICAiIiJBIGNvbnZlcnRpbmcgdHVwbGUgd3JhcHBlci4iIiIKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgdmFsdWUgPSB0dXBsZS5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuY29uZmlndXJhdG9yLmNvbnZlcnQodmFsdWUpCi0gICAgICAgIGlmIHZhbHVlIGlzIG5vdCByZXN1bHQ6Ci0gICAgICAgICAgICBpZiB0eXBlKHJlc3VsdCkgaW4gKENvbnZlcnRpbmdEaWN0LCBDb252ZXJ0aW5nTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udmVydGluZ1R1cGxlKToKLSAgICAgICAgICAgICAgICByZXN1bHQucGFyZW50ID0gc2VsZgotICAgICAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXkKLSAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAjIENhbid0IHJlcGxhY2UgYSB0dXBsZSBlbnRyeS4KKyAgICAgICAgcmV0dXJuIHNlbGYuY29udmVydF93aXRoX2tleShrZXksIHZhbHVlLCByZXBsYWNlPUZhbHNlKQogCiBjbGFzcyBCYXNlQ29uZmlndXJhdG9yKG9iamVjdCk6CiAgICAgIiIiCkBAIC03MjksNiArNzE5LDcgQEAKICAgICAgICAgICAgICAgICAnYWRkcmVzcycgaW4gY29uZmlnOgogICAgICAgICAgICAgICAgIGNvbmZpZ1snYWRkcmVzcyddID0gc2VsZi5hc190dXBsZShjb25maWdbJ2FkZHJlc3MnXSkKICAgICAgICAgICAgIGZhY3RvcnkgPSBrbGFzcworICAgICAgICBwcm9wcyA9IGNvbmZpZy5wb3AoJy4nLCBOb25lKQogICAgICAgICBrd2FyZ3MgPSBkaWN0KFsoaywgY29uZmlnW2tdKSBmb3IgayBpbiBjb25maWcgaWYgdmFsaWRfaWRlbnQoayldKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSBmYWN0b3J5KCoqa3dhcmdzKQpAQCAtNzQ3LDYgKzczOCw5IEBACiAgICAgICAgICAgICByZXN1bHQuc2V0TGV2ZWwobG9nZ2luZy5fY2hlY2tMZXZlbChsZXZlbCkpCiAgICAgICAgIGlmIGZpbHRlcnM6CiAgICAgICAgICAgICBzZWxmLmFkZF9maWx0ZXJzKHJlc3VsdCwgZmlsdGVycykKKyAgICAgICAgaWYgcHJvcHM6CisgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gcHJvcHMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHJlc3VsdCwgbmFtZSwgdmFsdWUpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgIGRlZiBhZGRfaGFuZGxlcnMoc2VsZiwgbG9nZ2VyLCBoYW5kbGVycyk6CkBAIC03OTUsNyArNzg5LDcgQEAKICAgICBkaWN0Q29uZmlnQ2xhc3MoY29uZmlnKS5jb25maWd1cmUoKQogCiAKLWRlZiBsaXN0ZW4ocG9ydD1ERUZBVUxUX0xPR0dJTkdfQ09ORklHX1BPUlQpOgorZGVmIGxpc3Rlbihwb3J0PURFRkFVTFRfTE9HR0lOR19DT05GSUdfUE9SVCwgdmVyaWZ5PU5vbmUpOgogICAgICIiIgogICAgIFN0YXJ0IHVwIGEgc29ja2V0IHNlcnZlciBvbiB0aGUgc3BlY2lmaWVkIHBvcnQsIGFuZCBsaXN0ZW4gZm9yIG5ldwogICAgIGNvbmZpZ3VyYXRpb25zLgpAQCAtODA0LDYgKzc5OCwxNSBAQAogICAgIFJldHVybnMgYSBUaHJlYWQgb2JqZWN0IG9uIHdoaWNoIHlvdSBjYW4gY2FsbCBzdGFydCgpIHRvIHN0YXJ0IHRoZSBzZXJ2ZXIsCiAgICAgYW5kIHdoaWNoIHlvdSBjYW4gam9pbigpIHdoZW4gYXBwcm9wcmlhdGUuIFRvIHN0b3AgdGhlIHNlcnZlciwgY2FsbAogICAgIHN0b3BMaXN0ZW5pbmcoKS4KKworICAgIFVzZSB0aGUgYGB2ZXJpZnlgYCBhcmd1bWVudCB0byB2ZXJpZnkgYW55IGJ5dGVzIHJlY2VpdmVkIGFjcm9zcyB0aGUgd2lyZQorICAgIGZyb20gYSBjbGllbnQuIElmIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgY2FsbGFibGUgd2hpY2ggcmVjZWl2ZXMgYQorICAgIHNpbmdsZSBhcmd1bWVudCAtIHRoZSBieXRlcyBvZiBjb25maWd1cmF0aW9uIGRhdGEgcmVjZWl2ZWQgYWNyb3NzIHRoZQorICAgIG5ldHdvcmsgLSBhbmQgaXQgc2hvdWxkIHJldHVybiBlaXRoZXIgYGBOb25lYGAsIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgcGFzc2VkIGluIGJ5dGVzIGNvdWxkIG5vdCBiZSB2ZXJpZmllZCBhbmQgc2hvdWxkIGJlIGRpc2NhcmRlZCwgb3IgYQorICAgIGJ5dGUgc3RyaW5nIHdoaWNoIGlzIHRoZW4gcGFzc2VkIHRvIHRoZSBjb25maWd1cmF0aW9uIG1hY2hpbmVyeSBhcworICAgIG5vcm1hbC4gTm90ZSB0aGF0IHlvdSBjYW4gcmV0dXJuIHRyYW5zZm9ybWVkIGJ5dGVzLCBlLmcuIGJ5IGRlY3J5cHRpbmcKKyAgICB0aGUgYnl0ZXMgcGFzc2VkIGluLgogICAgICIiIgogICAgIGlmIG5vdCB0aHJlYWQ6ICNwcmFnbWE6IG5vIGNvdmVyCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImxpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrIikKQEAgLTgzMSwzMSArODM0LDI4IEBACiAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gc2VsZi5jb25uZWN0aW9uLnJlY3Yoc2xlbikKICAgICAgICAgICAgICAgICAgICAgd2hpbGUgbGVuKGNodW5rKSA8IHNsZW46CiAgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rICsgY29ubi5yZWN2KHNsZW4gLSBsZW4oY2h1bmspKQotICAgICAgICAgICAgICAgICAgICBjaHVuayA9IGNodW5rLmRlY29kZSgidXRmLTgiKQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgotICAgICAgICAgICAgICAgICAgICAgICAgZCA9anNvbi5sb2FkcyhjaHVuaykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGQsIGRpY3QpCi0gICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KLQotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSA9IGlvLlN0cmluZ0lPKGNodW5rKQorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci52ZXJpZnkgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuc2VydmVyLnZlcmlmeShjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgaWYgY2h1bmsgaXMgbm90IE5vbmU6ICAgIyB2ZXJpZmllZCwgY2FuIHByb2Nlc3MKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNvbmZpZyhmaWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQganNvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPWpzb24ubG9hZHMoY2h1bmspCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0Q29uZmlnKGQpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICNBcHBseSBuZXcgY29uZmlndXJhdGlvbi4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyhjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDb25maWcoZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIucmVhZHk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5yZWFkeS5zZXQoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUuYXJncywgdHVwbGUpOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IFJFU0VUX0VSUk9SOgogICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGVycmNvZGUgPSBlLmFyZ3NbMF0KLSAgICAgICAgICAgICAgICAgICAgaWYgZXJyY29kZSAhPSBSRVNFVF9FUlJPUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICBjbGFzcyBDb25maWdTb2NrZXRSZWNlaXZlcihUaHJlYWRpbmdUQ1BTZXJ2ZXIpOgogICAgICAgICAiIiIKQEAgLTg2NSwxMyArODY1LDE0IEBACiAgICAgICAgIGFsbG93X3JldXNlX2FkZHJlc3MgPSAxCiAKICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3Q9J2xvY2FsaG9zdCcsIHBvcnQ9REVGQVVMVF9MT0dHSU5HX0NPTkZJR19QT1JULAotICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcj1Ob25lLCByZWFkeT1Ob25lKToKKyAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI9Tm9uZSwgcmVhZHk9Tm9uZSwgdmVyaWZ5PU5vbmUpOgogICAgICAgICAgICAgVGhyZWFkaW5nVENQU2VydmVyLl9faW5pdF9fKHNlbGYsIChob3N0LCBwb3J0KSwgaGFuZGxlcikKICAgICAgICAgICAgIGxvZ2dpbmcuX2FjcXVpcmVMb2NrKCkKICAgICAgICAgICAgIHNlbGYuYWJvcnQgPSAwCiAgICAgICAgICAgICBsb2dnaW5nLl9yZWxlYXNlTG9jaygpCiAgICAgICAgICAgICBzZWxmLnRpbWVvdXQgPSAxCiAgICAgICAgICAgICBzZWxmLnJlYWR5ID0gcmVhZHkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CiAKICAgICAgICAgZGVmIHNlcnZlX3VudGlsX3N0b3BwZWQoc2VsZik6CiAgICAgICAgICAgICBpbXBvcnQgc2VsZWN0CkBAIC04ODksMTYgKzg5MCwxOCBAQAogCiAgICAgY2xhc3MgU2VydmVyKHRocmVhZGluZy5UaHJlYWQpOgogCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCByY3ZyLCBoZGxyLCBwb3J0KToKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHJjdnIsIGhkbHIsIHBvcnQsIHZlcmlmeSk6CiAgICAgICAgICAgICBzdXBlcihTZXJ2ZXIsIHNlbGYpLl9faW5pdF9fKCkKICAgICAgICAgICAgIHNlbGYucmN2ciA9IHJjdnIKICAgICAgICAgICAgIHNlbGYuaGRsciA9IGhkbHIKICAgICAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CiAgICAgICAgICAgICBzZWxmLnJlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKIAogICAgICAgICBkZWYgcnVuKHNlbGYpOgogICAgICAgICAgICAgc2VydmVyID0gc2VsZi5yY3ZyKHBvcnQ9c2VsZi5wb3J0LCBoYW5kbGVyPXNlbGYuaGRsciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeT1zZWxmLnJlYWR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWR5PXNlbGYucmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyaWZ5PXNlbGYudmVyaWZ5KQogICAgICAgICAgICAgaWYgc2VsZi5wb3J0ID09IDA6CiAgICAgICAgICAgICAgICAgc2VsZi5wb3J0ID0gc2VydmVyLnNlcnZlcl9hZGRyZXNzWzFdCiAgICAgICAgICAgICBzZWxmLnJlYWR5LnNldCgpCkBAIC05MDgsNyArOTExLDcgQEAKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKICAgICAgICAgICAgIHNlcnZlci5zZXJ2ZV91bnRpbF9zdG9wcGVkKCkKIAotICAgIHJldHVybiBTZXJ2ZXIoQ29uZmlnU29ja2V0UmVjZWl2ZXIsIENvbmZpZ1N0cmVhbUhhbmRsZXIsIHBvcnQpCisgICAgcmV0dXJuIFNlcnZlcihDb25maWdTb2NrZXRSZWNlaXZlciwgQ29uZmlnU3RyZWFtSGFuZGxlciwgcG9ydCwgdmVyaWZ5KQogCiBkZWYgc3RvcExpc3RlbmluZygpOgogICAgICIiIgpkaWZmIC0tZ2l0IGEvTGliL2xvZ2dpbmcvaGFuZGxlcnMucHkgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQppbmRleCBkZGVjN2RkLi4xM2E4ZmIyIDEwMDY0NAotLS0gYS9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQorKysgYi9MaWIvbG9nZ2luZy9oYW5kbGVycy5weQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IDIwMDEtMjAxMyBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgQ29weXJpZ2h0IDIwMDEtMjAxNSBieSBWaW5heSBTYWppcC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICMKICMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCiAjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKQEAgLTE4LDEzICsxOCwxMiBAQAogQWRkaXRpb25hbCBoYW5kbGVycyBmb3IgdGhlIGxvZ2dpbmcgcGFja2FnZSBmb3IgUHl0aG9uLiBUaGUgY29yZSBwYWNrYWdlIGlzCiBiYXNlZCBvbiBQRVAgMjgyIGFuZCBjb21tZW50cyB0aGVyZXRvIGluIGNvbXAubGFuZy5weXRob24uCiAKLUNvcHlyaWdodCAoQykgMjAwMS0yMDEzIFZpbmF5IFNhamlwLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorQ29weXJpZ2h0IChDKSAyMDAxLTIwMTUgVmluYXkgU2FqaXAuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAKIFRvIHVzZSwgc2ltcGx5ICdpbXBvcnQgbG9nZ2luZy5oYW5kbGVycycgYW5kIGxvZyBhd2F5IQogIiIiCiAKLWltcG9ydCBlcnJubywgbG9nZ2luZywgc29ja2V0LCBvcywgcGlja2xlLCBzdHJ1Y3QsIHRpbWUsIHJlCi1mcm9tIGNvZGVjcyBpbXBvcnQgQk9NX1VURjgKK2ltcG9ydCBsb2dnaW5nLCBzb2NrZXQsIG9zLCBwaWNrbGUsIHN0cnVjdCwgdGltZSwgcmUKIGZyb20gc3RhdCBpbXBvcnQgU1RfREVWLCBTVF9JTk8sIFNUX01USU1FCiBpbXBvcnQgcXVldWUKIHRyeToKQEAgLTcyLDkgKzcxLDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuc2hvdWxkUm9sbG92ZXIocmVjb3JkKToKICAgICAgICAgICAgICAgICBzZWxmLmRvUm9sbG92ZXIoKQogICAgICAgICAgICAgbG9nZ2luZy5GaWxlSGFuZGxlci5lbWl0KHNlbGYsIHJlY29yZCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogICAgIGRlZiByb3RhdGlvbl9maWxlbmFtZShzZWxmLCBkZWZhdWx0X25hbWUpOgpAQCAtMjAxLDExICsxOTgsMTIgQEAKICAgICBJZiBiYWNrdXBDb3VudCBpcyA+IDAsIHdoZW4gcm9sbG92ZXIgaXMgZG9uZSwgbm8gbW9yZSB0aGFuIGJhY2t1cENvdW50CiAgICAgZmlsZXMgYXJlIGtlcHQgLSB0aGUgb2xkZXN0IG9uZXMgYXJlIGRlbGV0ZWQuCiAgICAgIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCB3aGVuPSdoJywgaW50ZXJ2YWw9MSwgYmFja3VwQ291bnQ9MCwgZW5jb2Rpbmc9Tm9uZSwgZGVsYXk9RmFsc2UsIHV0Yz1GYWxzZSwgYXRUaW1lPU5vbmUpOgogICAgICAgICBCYXNlUm90YXRpbmdIYW5kbGVyLl9faW5pdF9fKHNlbGYsIGZpbGVuYW1lLCAnYScsIGVuY29kaW5nLCBkZWxheSkKICAgICAgICAgc2VsZi53aGVuID0gd2hlbi51cHBlcigpCiAgICAgICAgIHNlbGYuYmFja3VwQ291bnQgPSBiYWNrdXBDb3VudAogICAgICAgICBzZWxmLnV0YyA9IHV0YworICAgICAgICBzZWxmLmF0VGltZSA9IGF0VGltZQogICAgICAgICAjIENhbGN1bGF0ZSB0aGUgcmVhbCByb2xsb3ZlciBpbnRlcnZhbCwgd2hpY2ggaXMganVzdCB0aGUgbnVtYmVyIG9mCiAgICAgICAgICMgc2Vjb25kcyBiZXR3ZWVuIHJvbGxvdmVycy4gIEFsc28gc2V0IHRoZSBmaWxlbmFtZSBzdWZmaXggdXNlZCB3aGVuCiAgICAgICAgICMgYSByb2xsb3ZlciBvY2N1cnMuICBDdXJyZW50ICd3aGVuJyBldmVudHMgc3VwcG9ydGVkOgpAQCAtMjc1LDkgKzI3MywyMiBAQAogICAgICAgICAgICAgY3VycmVudEhvdXIgPSB0WzNdCiAgICAgICAgICAgICBjdXJyZW50TWludXRlID0gdFs0XQogICAgICAgICAgICAgY3VycmVudFNlY29uZCA9IHRbNV0KLSAgICAgICAgICAgICMgciBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgbGVmdCBiZXR3ZWVuIG5vdyBhbmQgbWlkbmlnaHQKLSAgICAgICAgICAgIHIgPSBfTUlETklHSFQgLSAoKGN1cnJlbnRIb3VyICogNjAgKyBjdXJyZW50TWludXRlKSAqIDYwICsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlY29uZCkKKyAgICAgICAgICAgIGN1cnJlbnREYXkgPSB0WzZdCisgICAgICAgICAgICAjIHIgaXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGxlZnQgYmV0d2VlbiBub3cgYW5kIHRoZSBuZXh0IHJvdGF0aW9uCisgICAgICAgICAgICBpZiBzZWxmLmF0VGltZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJvdGF0ZV90cyA9IF9NSUROSUdIVAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByb3RhdGVfdHMgPSAoKHNlbGYuYXRUaW1lLmhvdXIgKiA2MCArIHNlbGYuYXRUaW1lLm1pbnV0ZSkqNjAgKworICAgICAgICAgICAgICAgICAgICBzZWxmLmF0VGltZS5zZWNvbmQpCisKKyAgICAgICAgICAgIHIgPSByb3RhdGVfdHMgLSAoKGN1cnJlbnRIb3VyICogNjAgKyBjdXJyZW50TWludXRlKSAqIDYwICsKKyAgICAgICAgICAgICAgICBjdXJyZW50U2Vjb25kKQorICAgICAgICAgICAgaWYgciA8IDA6CisgICAgICAgICAgICAgICAgIyBSb3RhdGUgdGltZSBpcyBiZWZvcmUgdGhlIGN1cnJlbnQgdGltZSAoZm9yIGV4YW1wbGUgd2hlbgorICAgICAgICAgICAgICAgICMgc2VsZi5yb3RhdGVBdCBpcyAxMzo0NSBhbmQgaXQgbm93IDE0OjE1KSwgcm90YXRpb24gaXMKKyAgICAgICAgICAgICAgICAjIHRvbW9ycm93LgorICAgICAgICAgICAgICAgIHIgKz0gX01JRE5JR0hUCisgICAgICAgICAgICAgICAgY3VycmVudERheSA9IChjdXJyZW50RGF5ICsgMSkgJSA3CiAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50VGltZSArIHIKICAgICAgICAgICAgICMgSWYgd2UgYXJlIHJvbGxpbmcgb3ZlciBvbiBhIGNlcnRhaW4gZGF5LCBhZGQgaW4gdGhlIG51bWJlciBvZiBkYXlzIHVudGlsCiAgICAgICAgICAgICAjIHRoZSBuZXh0IHJvbGxvdmVyLCBidXQgb2Zmc2V0IGJ5IDEgc2luY2Ugd2UganVzdCBjYWxjdWxhdGVkIHRoZSB0aW1lCkBAIC0yOTUsNyArMzA2LDcgQEAKICAgICAgICAgICAgICMgVGhpcyBpcyBiZWNhdXNlIHRoZSBhYm92ZSB0aW1lIGNhbGN1bGF0aW9uIHRha2VzIHVzIHRvIG1pZG5pZ2h0IG9uIHRoaXMKICAgICAgICAgICAgICMgZGF5LCBpLmUuIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBkYXkuCiAgICAgICAgICAgICBpZiBzZWxmLndoZW4uc3RhcnRzd2l0aCgnVycpOgotICAgICAgICAgICAgICAgIGRheSA9IHRbNl0gIyAwIGlzIE1vbmRheQorICAgICAgICAgICAgICAgIGRheSA9IGN1cnJlbnREYXkgIyAwIGlzIE1vbmRheQogICAgICAgICAgICAgICAgIGlmIGRheSAhPSBzZWxmLmRheU9mV2VlazoKICAgICAgICAgICAgICAgICAgICAgaWYgZGF5IDwgc2VsZi5kYXlPZldlZWs6CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXlzVG9XYWl0ID0gc2VsZi5kYXlPZldlZWsgLSBkYXkKQEAgLTQ0NCwxNyArNDU1LDE1IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgICMgc3RhdCB0aGUgZmlsZSBieSBwYXRoLCBjaGVja2luZyBmb3IgZXhpc3RlbmNlCiAgICAgICAgICAgICBzcmVzID0gb3Muc3RhdChzZWxmLmJhc2VGaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgaWYgZXJyLmVycm5vID09IGVycm5vLkVOT0VOVDoKLSAgICAgICAgICAgICAgICBzcmVzID0gTm9uZQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICBzcmVzID0gTm9uZQogICAgICAgICAjIGNvbXBhcmUgZmlsZSBzeXN0ZW0gc3RhdCB3aXRoIHRoYXQgb2Ygb3VyIHN0cmVhbSBmaWxlIGhhbmRsZQogICAgICAgICBpZiBub3Qgc3JlcyBvciBzcmVzW1NUX0RFVl0gIT0gc2VsZi5kZXYgb3Igc3Jlc1tTVF9JTk9dICE9IHNlbGYuaW5vOgogICAgICAgICAgICAgaWYgc2VsZi5zdHJlYW0gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgIyB3ZSBoYXZlIGFuIG9wZW4gZmlsZSBoYW5kbGUsIGNsZWFuIGl0IHVwCiAgICAgICAgICAgICAgICAgc2VsZi5zdHJlYW0uZmx1c2goKQogICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLnN0cmVhbSA9IE5vbmUgICMgU2VlIElzc3VlICMyMTc0MjogX29wZW4gKCkgbWlnaHQgZmFpbC4KICAgICAgICAgICAgICAgICAjIG9wZW4gYSBuZXcgZmlsZSBoYW5kbGUgYW5kIGdldCBuZXcgc3RhdCBpbmZvIGZyb20gdGhhdCBmZAogICAgICAgICAgICAgICAgIHNlbGYuc3RyZWFtID0gc2VsZi5fb3BlbigpCiAgICAgICAgICAgICAgICAgc2VsZi5fc3RhdHN0cmVhbSgpCkBAIC00ODUsNiArNDk0LDEwIEBACiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQogICAgICAgICBzZWxmLmhvc3QgPSBob3N0CiAgICAgICAgIHNlbGYucG9ydCA9IHBvcnQKKyAgICAgICAgaWYgcG9ydCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gaG9zdAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hZGRyZXNzID0gKGhvc3QsIHBvcnQpCiAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKICAgICAgICAgc2VsZi5jbG9zZU9uRXJyb3IgPSBGYWxzZQogICAgICAgICBzZWxmLnJldHJ5VGltZSA9IE5vbmUKQEAgLTUwMCwxNSArNTEzLDE3IEBACiAgICAgICAgIEEgZmFjdG9yeSBtZXRob2Qgd2hpY2ggYWxsb3dzIHN1YmNsYXNzZXMgdG8gZGVmaW5lIHRoZSBwcmVjaXNlCiAgICAgICAgIHR5cGUgb2Ygc29ja2V0IHRoZXkgd2FudC4KICAgICAgICAgIiIiCi0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIGlmIGhhc2F0dHIocywgJ3NldHRpbWVvdXQnKToKLSAgICAgICAgICAgIHMuc2V0dGltZW91dCh0aW1lb3V0KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzLmNvbm5lY3QoKHNlbGYuaG9zdCwgc2VsZi5wb3J0KSkKLSAgICAgICAgICAgIHJldHVybiBzCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6Ci0gICAgICAgICAgICBzLmNsb3NlKCkKLSAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHNlbGYucG9ydCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbihzZWxmLmFkZHJlc3MsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXR0aW1lb3V0KHRpbWVvdXQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNvbm5lY3Qoc2VsZi5hZGRyZXNzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcmVzdWx0LmNsb3NlKCkgICMgSXNzdWUgMTkxODIKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgY3JlYXRlU29ja2V0KHNlbGYpOgogICAgICAgICAiIiIKQEAgLTUyOCw3ICs1NDMsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNlbGYubWFrZVNvY2tldCgpCiAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVRpbWUgPSBOb25lICMgbmV4dCB0aW1lLCBubyBkZWxheSBiZWZvcmUgdHJ5aW5nCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgI0NyZWF0aW9uIGZhaWxlZCwgc28gc2V0IHRoZSByZXRyeSB0aW1lIGFuZCByZXR1cm4uCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5yZXRyeVRpbWUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXRyeVBlcmlvZCA9IHNlbGYucmV0cnlTdGFydApAQCAtNTUyLDE2ICs1NjcsOCBAQAogICAgICAgICAjYnV0IGFyZSBzdGlsbCB1bmFibGUgdG8gY29ubmVjdC4KICAgICAgICAgaWYgc2VsZi5zb2NrOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoc2VsZi5zb2NrLCAic2VuZGFsbCIpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2suc2VuZGFsbChzKQotICAgICAgICAgICAgICAgIGVsc2U6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgICAgIHNlbnRzb2ZhciA9IDAKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlbihzKQotICAgICAgICAgICAgICAgICAgICB3aGlsZSBsZWZ0ID4gMDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbnQgPSBzZWxmLnNvY2suc2VuZChzW3NlbnRzb2ZhcjpdKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VudHNvZmFyID0gc2VudHNvZmFyICsgc2VudAotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IGxlZnQgLSBzZW50Ci0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOiAjcHJhZ21hOiBubyBjb3ZlcgorICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjogI3ByYWdtYTogbm8gY292ZXIKICAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQogICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUgICMgc28gd2UgY2FuIGNhbGwgY3JlYXRlU29ja2V0IG5leHQgdGltZQogCkBAIC02MTEsOSArNjE4LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcyA9IHNlbGYubWFrZVBpY2tsZShyZWNvcmQpCiAgICAgICAgICAgICBzZWxmLnNlbmQocykKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKQEAgLTYyMiw5ICs2MjcsMTAgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuYWNxdWlyZSgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGlmIHNlbGYuc29jazoKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgc29jayA9IHNlbGYuc29jaworICAgICAgICAgICAgaWYgc29jazoKICAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBOb25lCisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCiAgICAgICAgICAgICBsb2dnaW5nLkhhbmRsZXIuY2xvc2Uoc2VsZikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYucmVsZWFzZSgpCkBAIC02NTIsNyArNjU4LDExIEBACiAgICAgICAgIFRoZSBmYWN0b3J5IG1ldGhvZCBvZiBTb2NrZXRIYW5kbGVyIGlzIGhlcmUgb3ZlcnJpZGRlbiB0byBjcmVhdGUKICAgICAgICAgYSBVRFAgc29ja2V0IChTT0NLX0RHUkFNKS4KICAgICAgICAgIiIiCi0gICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKKyAgICAgICAgaWYgc2VsZi5wb3J0IGlzIE5vbmU6CisgICAgICAgICAgICBmYW1pbHkgPSBzb2NrZXQuQUZfVU5JWAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFtaWx5ID0gc29ja2V0LkFGX0lORVQKKyAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCBzb2NrZXQuU09DS19ER1JBTSkKICAgICAgICAgcmV0dXJuIHMKIAogICAgIGRlZiBzZW5kKHNlbGYsIHMpOgpAQCAtNjY1LDcgKzY3NSw3IEBACiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLnNvY2sgaXMgTm9uZToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlU29ja2V0KCkKLSAgICAgICAgc2VsZi5zb2NrLnNlbmR0byhzLCAoc2VsZi5ob3N0LCBzZWxmLnBvcnQpKQorICAgICAgICBzZWxmLnNvY2suc2VuZHRvKHMsIHNlbGYuYWRkcmVzcykKIAogY2xhc3MgU3lzTG9nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgogICAgICIiIgpAQCAtNzc3LDcgKzc4NywxMSBAQAogCiAgICAgICAgIElmIGFkZHJlc3MgaXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nLCBhIFVOSVggc29ja2V0IGlzIHVzZWQuIFRvIGxvZyB0byBhCiAgICAgICAgIGxvY2FsIHN5c2xvZ2QsICJTeXNMb2dIYW5kbGVyKGFkZHJlc3M9Ii9kZXYvbG9nIikiIGNhbiBiZSB1c2VkLgotICAgICAgICBJZiBmYWNpbGl0eSBpcyBub3Qgc3BlY2lmaWVkLCBMT0dfVVNFUiBpcyB1c2VkLgorICAgICAgICBJZiBmYWNpbGl0eSBpcyBub3Qgc3BlY2lmaWVkLCBMT0dfVVNFUiBpcyB1c2VkLiBJZiBzb2NrdHlwZSBpcworICAgICAgICBzcGVjaWZpZWQgYXMgc29ja2V0LlNPQ0tfREdSQU0gb3Igc29ja2V0LlNPQ0tfU1RSRUFNLCB0aGF0IHNwZWNpZmljCisgICAgICAgIHNvY2tldCB0eXBlIHdpbGwgYmUgdXNlZC4gRm9yIFVuaXggc29ja2V0cywgeW91IGNhbiBhbHNvIHNwZWNpZnkgYQorICAgICAgICBzb2NrdHlwZSBvZiBOb25lLCBpbiB3aGljaCBjYXNlIHNvY2tldC5TT0NLX0RHUkFNIHdpbGwgYmUgdXNlZCwgZmFsbGluZworICAgICAgICBiYWNrIHRvIHNvY2tldC5TT0NLX1NUUkVBTS4KICAgICAgICAgIiIiCiAgICAgICAgIGxvZ2dpbmcuSGFuZGxlci5fX2luaXRfXyhzZWxmKQogCkBAIC04MDcsNyArODIxLDcgQEAKICAgICAgICAgICAgIHNlbGYuc29ja2V0LmNvbm5lY3QoYWRkcmVzcykKICAgICAgICAgICAgICMgaXQgd29ya2VkLCBzbyBzZXQgc2VsZi5zb2NrdHlwZSB0byB0aGUgdXNlZCB0eXBlCiAgICAgICAgICAgICBzZWxmLnNvY2t0eXBlID0gdXNlX3NvY2t0eXBlCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAgICAgaWYgc2VsZi5zb2NrdHlwZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAjIHVzZXIgZGlkbid0IHNwZWNpZnkgZmFsbGluZyBiYWNrLCBzbyBmYWlsCkBAIC04MTgsNyArODMyLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5jb25uZWN0KGFkZHJlc3MpCiAgICAgICAgICAgICAgICAgIyBpdCB3b3JrZWQsIHNvIHNldCBzZWxmLnNvY2t0eXBlIHRvIHRoZSB1c2VkIHR5cGUKICAgICAgICAgICAgICAgICBzZWxmLnNvY2t0eXBlID0gdXNlX3NvY2t0eXBlCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTg2NiwyNiArODgwLDI1IEBACiAgICAgICAgIFRoZSByZWNvcmQgaXMgZm9ybWF0dGVkLCBhbmQgdGhlbiBzZW50IHRvIHRoZSBzeXNsb2cgc2VydmVyLiBJZgogICAgICAgICBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgaXQgaXMgTk9UIHNlbnQgdG8gdGhlIHNlcnZlci4KICAgICAgICAgIiIiCi0gICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkKLSAgICAgICAgaWYgc2VsZi5pZGVudDoKLSAgICAgICAgICAgIG1zZyA9IHNlbGYuaWRlbnQgKyBtc2cKLSAgICAgICAgaWYgc2VsZi5hcHBlbmRfbnVsOgotICAgICAgICAgICAgbXNnICs9ICdcMDAwJwotICAgICAgICAiIiIKLSAgICAgICAgV2UgbmVlZCB0byBjb252ZXJ0IHJlY29yZCBsZXZlbCB0byBsb3dlcmNhc2UsIG1heWJlIHRoaXMgd2lsbAotICAgICAgICBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4KLSAgICAgICAgIiIiCi0gICAgICAgIHByaW8gPSAnPCVkPicgJSBzZWxmLmVuY29kZVByaW9yaXR5KHNlbGYuZmFjaWxpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFwUHJpb3JpdHkocmVjb3JkLmxldmVsbmFtZSkpCi0gICAgICAgIHByaW8gPSBwcmlvLmVuY29kZSgndXRmLTgnKQotICAgICAgICAjIE1lc3NhZ2UgaXMgYSBzdHJpbmcuIENvbnZlcnQgdG8gYnl0ZXMgYXMgcmVxdWlyZWQgYnkgUkZDIDU0MjQKLSAgICAgICAgbXNnID0gbXNnLmVuY29kZSgndXRmLTgnKQotICAgICAgICBtc2cgPSBwcmlvICsgbXNnCiAgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkKKyAgICAgICAgICAgIGlmIHNlbGYuaWRlbnQ6CisgICAgICAgICAgICAgICAgbXNnID0gc2VsZi5pZGVudCArIG1zZworICAgICAgICAgICAgaWYgc2VsZi5hcHBlbmRfbnVsOgorICAgICAgICAgICAgICAgIG1zZyArPSAnXDAwMCcKKworICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGNvbnZlcnQgcmVjb3JkIGxldmVsIHRvIGxvd2VyY2FzZSwgbWF5YmUgdGhpcyB3aWxsCisgICAgICAgICAgICAjIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgorICAgICAgICAgICAgcHJpbyA9ICc8JWQ+JyAlIHNlbGYuZW5jb2RlUHJpb3JpdHkoc2VsZi5mYWNpbGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFwUHJpb3JpdHkocmVjb3JkLmxldmVsbmFtZSkpCisgICAgICAgICAgICBwcmlvID0gcHJpby5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgICAgICMgTWVzc2FnZSBpcyBhIHN0cmluZy4gQ29udmVydCB0byBieXRlcyBhcyByZXF1aXJlZCBieSBSRkMgNTQyNAorICAgICAgICAgICAgbXNnID0gbXNnLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgbXNnID0gcHJpbyArIG1zZwogICAgICAgICAgICAgaWYgc2VsZi51bml4c29ja2V0OgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZChtc2cpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICBzZWxmLl9jb25uZWN0X3VuaXhzb2NrZXQoc2VsZi5hZGRyZXNzKQogICAgICAgICAgICAgICAgICAgICBzZWxmLnNvY2tldC5zZW5kKG1zZykKQEAgLTg5Myw5ICs5MDYsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0LnNlbmR0byhtc2csIHNlbGYuYWRkcmVzcykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuc2VuZGFsbChtc2cpCi0gICAgICAgIGV4Y2VwdCAoS2V5Ym9hcmRJbnRlcnJ1cHQsIFN5c3RlbUV4aXQpOiAjcHJhZ21hOiBubyBjb3ZlcgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKIGNsYXNzIFNNVFBIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC05MjEsMTEgKzkzMiwxMSBAQAogICAgICAgICBkZWZhdWx0IGlzIG9uZSBzZWNvbmQpLgogICAgICAgICAiIiIKICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCi0gICAgICAgIGlmIGlzaW5zdGFuY2UobWFpbGhvc3QsIHR1cGxlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShtYWlsaG9zdCwgKGxpc3QsIHR1cGxlKSk6CiAgICAgICAgICAgICBzZWxmLm1haWxob3N0LCBzZWxmLm1haWxwb3J0ID0gbWFpbGhvc3QKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYubWFpbGhvc3QsIHNlbGYubWFpbHBvcnQgPSBtYWlsaG9zdCwgTm9uZQotICAgICAgICBpZiBpc2luc3RhbmNlKGNyZWRlbnRpYWxzLCB0dXBsZSk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoY3JlZGVudGlhbHMsIChsaXN0LCB0dXBsZSkpOgogICAgICAgICAgICAgc2VsZi51c2VybmFtZSwgc2VsZi5wYXNzd29yZCA9IGNyZWRlbnRpYWxzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLnVzZXJuYW1lID0gTm9uZQpAQCAtOTU0LDI4ICs5NjUsMjggQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBzbXRwbGliCi0gICAgICAgICAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBmb3JtYXRkYXRlCisgICAgICAgICAgICBmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorICAgICAgICAgICAgaW1wb3J0IGVtYWlsLnV0aWxzCisKICAgICAgICAgICAgIHBvcnQgPSBzZWxmLm1haWxwb3J0CiAgICAgICAgICAgICBpZiBub3QgcG9ydDoKICAgICAgICAgICAgICAgICBwb3J0ID0gc210cGxpYi5TTVRQX1BPUlQKICAgICAgICAgICAgIHNtdHAgPSBzbXRwbGliLlNNVFAoc2VsZi5tYWlsaG9zdCwgcG9ydCwgdGltZW91dD1zZWxmLnRpbWVvdXQpCi0gICAgICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpCi0gICAgICAgICAgICBtc2cgPSAiRnJvbTogJXNcclxuVG86ICVzXHJcblN1YmplY3Q6ICVzXHJcbkRhdGU6ICVzXHJcblxyXG4lcyIgJSAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcm9tYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIuam9pbihzZWxmLnRvYWRkcnMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0U3ViamVjdChyZWNvcmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdGRhdGUoKSwgbXNnKQorICAgICAgICAgICAgbXNnID0gRW1haWxNZXNzYWdlKCkKKyAgICAgICAgICAgIG1zZ1snRnJvbSddID0gc2VsZi5mcm9tYWRkcgorICAgICAgICAgICAgbXNnWydUbyddID0gJywnLmpvaW4oc2VsZi50b2FkZHJzKQorICAgICAgICAgICAgbXNnWydTdWJqZWN0J10gPSBzZWxmLmdldFN1YmplY3QocmVjb3JkKQorICAgICAgICAgICAgbXNnWydEYXRlJ10gPSBlbWFpbC51dGlscy5sb2NhbHRpbWUoKQorICAgICAgICAgICAgbXNnLnNldF9jb250ZW50KHNlbGYuZm9ybWF0KHJlY29yZCkpCiAgICAgICAgICAgICBpZiBzZWxmLnVzZXJuYW1lOgogICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VjdXJlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICBzbXRwLmVobG8oKQogICAgICAgICAgICAgICAgICAgICBzbXRwLnN0YXJ0dGxzKCpzZWxmLnNlY3VyZSkKICAgICAgICAgICAgICAgICAgICAgc210cC5laGxvKCkKICAgICAgICAgICAgICAgICBzbXRwLmxvZ2luKHNlbGYudXNlcm5hbWUsIHNlbGYucGFzc3dvcmQpCi0gICAgICAgICAgICBzbXRwLnNlbmRtYWlsKHNlbGYuZnJvbWFkZHIsIHNlbGYudG9hZGRycywgbXNnKQorICAgICAgICAgICAgc210cC5zZW5kX21lc3NhZ2UobXNnKQogICAgICAgICAgICAgc210cC5xdWl0KCkKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogY2xhc3MgTlRFdmVudExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKQEAgLTEwNjAsOSArMTA3MSw3IEBACiAgICAgICAgICAgICAgICAgdHlwZSA9IHNlbGYuZ2V0RXZlbnRUeXBlKHJlY29yZCkKICAgICAgICAgICAgICAgICBtc2cgPSBzZWxmLmZvcm1hdChyZWNvcmQpCiAgICAgICAgICAgICAgICAgc2VsZi5fd2VsdS5SZXBvcnRFdmVudChzZWxmLmFwcG5hbWUsIGlkLCBjYXQsIHR5cGUsIFttc2ddKQotICAgICAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVFcnJvcihyZWNvcmQpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CkBAIC0xMDgzLDcgKzEwOTIsOCBAQAogICAgIEEgY2xhc3Mgd2hpY2ggc2VuZHMgcmVjb3JkcyB0byBhIFdlYiBzZXJ2ZXIsIHVzaW5nIGVpdGhlciBHRVQgb3IKICAgICBQT1NUIHNlbWFudGljcy4KICAgICAiIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaG9zdCwgdXJsLCBtZXRob2Q9IkdFVCIsIHNlY3VyZT1GYWxzZSwgY3JlZGVudGlhbHM9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhvc3QsIHVybCwgbWV0aG9kPSJHRVQiLCBzZWN1cmU9RmFsc2UsIGNyZWRlbnRpYWxzPU5vbmUsCisgICAgICAgICAgICAgICAgIGNvbnRleHQ9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBJbml0aWFsaXplIHRoZSBpbnN0YW5jZSB3aXRoIHRoZSBob3N0LCB0aGUgcmVxdWVzdCBVUkwsIGFuZCB0aGUgbWV0aG9kCiAgICAgICAgICgiR0VUIiBvciAiUE9TVCIpCkBAIC0xMDkyLDExICsxMTAyLDE1IEBACiAgICAgICAgIG1ldGhvZCA9IG1ldGhvZC51cHBlcigpCiAgICAgICAgIGlmIG1ldGhvZCBub3QgaW4gWyJHRVQiLCAiUE9TVCJdOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWV0aG9kIG11c3QgYmUgR0VUIG9yIFBPU1QiKQorICAgICAgICBpZiBub3Qgc2VjdXJlIGFuZCBjb250ZXh0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY29udGV4dCBwYXJhbWV0ZXIgb25seSBtYWtlcyBzZW5zZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIHNlY3VyZT1UcnVlIikKICAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAogICAgICAgICBzZWxmLnVybCA9IHVybAogICAgICAgICBzZWxmLm1ldGhvZCA9IG1ldGhvZAogICAgICAgICBzZWxmLnNlY3VyZSA9IHNlY3VyZQogICAgICAgICBzZWxmLmNyZWRlbnRpYWxzID0gY3JlZGVudGlhbHMKKyAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAogCiAgICAgZGVmIG1hcExvZ1JlY29yZChzZWxmLCByZWNvcmQpOgogICAgICAgICAiIiIKQEAgLTExMTYsNyArMTEzMCw3IEBACiAgICAgICAgICAgICBpbXBvcnQgaHR0cC5jbGllbnQsIHVybGxpYi5wYXJzZQogICAgICAgICAgICAgaG9zdCA9IHNlbGYuaG9zdAogICAgICAgICAgICAgaWYgc2VsZi5zZWN1cmU6Ci0gICAgICAgICAgICAgICAgaCA9IGh0dHAuY2xpZW50LkhUVFBTQ29ubmVjdGlvbihob3N0KQorICAgICAgICAgICAgICAgIGggPSBodHRwLmNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oaG9zdCwgY29udGV4dD1zZWxmLmNvbnRleHQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGggPSBodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbihob3N0KQogICAgICAgICAgICAgdXJsID0gc2VsZi51cmwKQEAgLTExNDcsOSArMTE2MSw3IEBACiAgICAgICAgICAgICBpZiBzZWxmLm1ldGhvZCA9PSAiUE9TVCI6CiAgICAgICAgICAgICAgICAgaC5zZW5kKGRhdGEuZW5jb2RlKCd1dGYtOCcpKQogICAgICAgICAgICAgaC5nZXRyZXNwb25zZSgpICAgICNjYW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoZSByZXN1bHQKLSAgICAgICAgZXhjZXB0IChLZXlib2FyZEludGVycnVwdCwgU3lzdGVtRXhpdCk6ICNwcmFnbWE6IG5vIGNvdmVyCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQ6CisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICBzZWxmLmhhbmRsZUVycm9yKHJlY29yZCkKIAogY2xhc3MgQnVmZmVyaW5nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgpAQCAtMTIwNCw4ICsxMjE2LDEwIEBACiAKICAgICAgICAgVGhpcyB2ZXJzaW9uIGp1c3QgZmx1c2hlcyBhbmQgY2hhaW5zIHRvIHRoZSBwYXJlbnQgY2xhc3MnIGNsb3NlKCkuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmZsdXNoKCkKLSAgICAgICAgbG9nZ2luZy5IYW5kbGVyLmNsb3NlKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9nZ2luZy5IYW5kbGVyLmNsb3NlKHNlbGYpCiAKIGNsYXNzIE1lbW9yeUhhbmRsZXIoQnVmZmVyaW5nSGFuZGxlcik6CiAgICAgIiIiCkBAIC0xMjU5LDEzICsxMjczLDE1IEBACiAgICAgICAgICIiIgogICAgICAgICBGbHVzaCwgc2V0IHRoZSB0YXJnZXQgdG8gTm9uZSBhbmQgbG9zZSB0aGUgYnVmZmVyLgogICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIHNlbGYuYWNxdWlyZSgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYudGFyZ2V0ID0gTm9uZQotICAgICAgICAgICAgQnVmZmVyaW5nSGFuZGxlci5jbG9zZShzZWxmKQorICAgICAgICAgICAgc2VsZi5mbHVzaCgpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzZWxmLnJlbGVhc2UoKQorICAgICAgICAgICAgc2VsZi5hY3F1aXJlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLnRhcmdldCA9IE5vbmUKKyAgICAgICAgICAgICAgICBCdWZmZXJpbmdIYW5kbGVyLmNsb3NlKHNlbGYpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYucmVsZWFzZSgpCiAKIAogY2xhc3MgUXVldWVIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CkBAIC0xMzI5LDkgKzEzNDUsNyBAQAogICAgICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5lbnF1ZXVlKHNlbGYucHJlcGFyZShyZWNvcmQpKQotICAgICAgICBleGNlcHQgKEtleWJvYXJkSW50ZXJydXB0LCBTeXN0ZW1FeGl0KTogI3ByYWdtYTogbm8gY292ZXIKLSAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuaGFuZGxlRXJyb3IocmVjb3JkKQogCiBpZiB0aHJlYWRpbmc6CmRpZmYgLS1naXQgYS9MaWIvbHptYS5weSBiL0xpYi9sem1hLnB5CmluZGV4IDFhODk4ODcuLmYxZDM5NTggMTAwNjQ0Ci0tLSBhL0xpYi9sem1hLnB5CisrKyBiL0xpYi9sem1hLnB5CkBAIC01NCw5ICs1NCw5IEBACiAgICAgICAgIGJ5dGVzIG9iamVjdCksIGluIHdoaWNoIGNhc2UgdGhlIG5hbWVkIGZpbGUgaXMgb3BlbmVkLCBvciBpdCBjYW4KICAgICAgICAgYmUgYW4gZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgICAgIG1vZGUgY2FuIGJlICJyIiBmb3IgcmVhZGluZyAoZGVmYXVsdCksICJ3IiBmb3IgKG92ZXIpd3JpdGluZywgb3IKLSAgICAgICAgImEiIGZvciBhcHBlbmRpbmcuIFRoZXNlIGNhbiBlcXVpdmFsZW50bHkgYmUgZ2l2ZW4gYXMgInJiIiwgIndiIiwKLSAgICAgICAgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgorICAgICAgICBtb2RlIGNhbiBiZSAiciIgZm9yIHJlYWRpbmcgKGRlZmF1bHQpLCAidyIgZm9yIChvdmVyKXdyaXRpbmcsCisgICAgICAgICJ4IiBmb3IgY3JlYXRpbmcgZXhjbHVzaXZlbHksIG9yICJhIiBmb3IgYXBwZW5kaW5nLiBUaGVzZSBjYW4KKyAgICAgICAgZXF1aXZhbGVudGx5IGJlIGdpdmVuIGFzICJyYiIsICJ3YiIsICJ4YiIgYW5kICJhYiIgcmVzcGVjdGl2ZWx5LgogCiAgICAgICAgIGZvcm1hdCBzcGVjaWZpZXMgdGhlIGNvbnRhaW5lciBmb3JtYXQgdG8gdXNlIGZvciB0aGUgZmlsZS4KICAgICAgICAgSWYgbW9kZSBpcyAiciIsIHRoaXMgZGVmYXVsdHMgdG8gRk9STUFUX0FVVE8uIE90aGVyd2lzZSwgdGhlCkBAIC0xMTAsOCArMTEwLDkgQEAKICAgICAgICAgICAgICMgc3RyZWFtIHdpbGwgbmVlZCBhIHNlcGFyYXRlIGRlY29tcHJlc3NvciBvYmplY3QuCiAgICAgICAgICAgICBzZWxmLl9pbml0X2FyZ3MgPSB7ImZvcm1hdCI6Zm9ybWF0LCAiZmlsdGVycyI6ZmlsdGVyc30KICAgICAgICAgICAgIHNlbGYuX2RlY29tcHJlc3NvciA9IExaTUFEZWNvbXByZXNzb3IoKipzZWxmLl9pbml0X2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBOb25lCi0gICAgICAgIGVsaWYgbW9kZSBpbiAoInciLCAid2IiLCAiYSIsICJhYiIpOgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gYiIiCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gMAorICAgICAgICBlbGlmIG1vZGUgaW4gKCJ3IiwgIndiIiwgImEiLCAiYWIiLCAieCIsICJ4YiIpOgogICAgICAgICAgICAgaWYgZm9ybWF0IGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgZm9ybWF0ID0gRk9STUFUX1haCiAgICAgICAgICAgICBtb2RlX2NvZGUgPSBfTU9ERV9XUklURQpAQCAtMTQzLDcgKzE0NCw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX21vZGUgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKICAgICAgICAgICAgICAgICBzZWxmLl9kZWNvbXByZXNzb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICAgICAgZWxpZiBzZWxmLl9tb2RlID09IF9NT0RFX1dSSVRFOgogICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHNlbGYuX2NvbXByZXNzb3IuZmx1c2goKSkKICAgICAgICAgICAgICAgICBzZWxmLl9jb21wcmVzc29yID0gTm9uZQpAQCAtMTg3LDE1ICsxODgsMTggQEAKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGZpbGUiKQogCiAgICAgZGVmIF9jaGVja19jYW5fcmVhZChzZWxmKToKLSAgICAgICAgaWYgbm90IHNlbGYucmVhZGFibGUoKToKKyAgICAgICAgaWYgc2VsZi5fbW9kZSBub3QgaW4gKF9NT0RFX1JFQUQsIF9NT0RFX1JFQURfRU9GKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX25vdF9jbG9zZWQoKQogICAgICAgICAgICAgcmFpc2UgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24oIkZpbGUgbm90IG9wZW4gZm9yIHJlYWRpbmciKQogCiAgICAgZGVmIF9jaGVja19jYW5fd3JpdGUoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLndyaXRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgIT0gX01PREVfV1JJVEU6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJGaWxlIG5vdCBvcGVuIGZvciB3cml0aW5nIikKIAogICAgIGRlZiBfY2hlY2tfY2FuX3NlZWsoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBzZWxmLnJlYWRhYmxlKCk6CisgICAgICAgIGlmIHNlbGYuX21vZGUgbm90IGluIChfTU9ERV9SRUFELCBfTU9ERV9SRUFEX0VPRik6CisgICAgICAgICAgICBzZWxmLl9jaGVja19ub3RfY2xvc2VkKCkKICAgICAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uKCJTZWVraW5nIGlzIG9ubHkgc3VwcG9ydGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBmaWxlcyBvcGVuIGZvciByZWFkaW5nIikKICAgICAgICAgaWYgbm90IHNlbGYuX2ZwLnNlZWthYmxlKCk6CkBAIC0yMDQsMTYgKzIwOCwxMyBAQAogCiAgICAgIyBGaWxsIHRoZSByZWFkYWhlYWQgYnVmZmVyIGlmIGl0IGlzIGVtcHR5LiBSZXR1cm5zIEZhbHNlIG9uIEVPRi4KICAgICBkZWYgX2ZpbGxfYnVmZmVyKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICMgRGVwZW5kaW5nIG9uIHRoZSBpbnB1dCBkYXRhLCBvdXIgY2FsbCB0byB0aGUgZGVjb21wcmVzc29yIG1heSBub3QKICAgICAgICAgIyByZXR1cm4gYW55IGRhdGEuIEluIHRoaXMgY2FzZSwgdHJ5IGFnYWluIGFmdGVyIHJlYWRpbmcgYW5vdGhlciBibG9jay4KLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGlmIHNlbGYuX2J1ZmZlcjoKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgICAgICAgICBpZiBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGE6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9kZWNvbXByZXNzb3IudW51c2VkX2RhdGEKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmF3YmxvY2sgPSBzZWxmLl9mcC5yZWFkKF9CVUZGRVJfU0laRSkKKyAgICAgICAgd2hpbGUgc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKToKKyAgICAgICAgICAgIHJhd2Jsb2NrID0gKHNlbGYuX2RlY29tcHJlc3Nvci51bnVzZWRfZGF0YSBvcgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZnAucmVhZChfQlVGRkVSX1NJWkUpKQogCiAgICAgICAgICAgICBpZiBub3QgcmF3YmxvY2s6CiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGVjb21wcmVzc29yLmVvZjoKQEAgLTIzNiwzMCArMjM3LDQ4IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9kZWNvbXByZXNzb3IuZGVjb21wcmVzcyhyYXdibG9jaykKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAjIFJlYWQgZGF0YSB1bnRpbCBFT0YuCiAgICAgIyBJZiByZXR1cm5fZGF0YSBpcyBmYWxzZSwgY29uc3VtZSB0aGUgZGF0YSB3aXRob3V0IHJldHVybmluZyBpdC4KICAgICBkZWYgX3JlYWRfYWxsKHNlbGYsIHJldHVybl9kYXRhPVRydWUpOgorICAgICAgICAjIFRoZSBsb29wIGFzc3VtZXMgdGhhdCBfYnVmZmVyX29mZnNldCBpcyAwLiBFbnN1cmUgdGhhdCB0aGlzIGlzIHRydWUuCisgICAgICAgIHNlbGYuX2J1ZmZlciA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKKwogICAgICAgICBibG9ja3MgPSBbXQogICAgICAgICB3aGlsZSBzZWxmLl9maWxsX2J1ZmZlcigpOgogICAgICAgICAgICAgaWYgcmV0dXJuX2RhdGE6CiAgICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChzZWxmLl9idWZmZXIpCiAgICAgICAgICAgICBzZWxmLl9wb3MgKz0gbGVuKHNlbGYuX2J1ZmZlcikKLSAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgogICAgICAgICBpZiByZXR1cm5fZGF0YToKICAgICAgICAgICAgIHJldHVybiBiIiIuam9pbihibG9ja3MpCiAKICAgICAjIFJlYWQgYSBibG9jayBvZiB1cCB0byBuIGJ5dGVzLgogICAgICMgSWYgcmV0dXJuX2RhdGEgaXMgZmFsc2UsIGNvbnN1bWUgdGhlIGRhdGEgd2l0aG91dCByZXR1cm5pbmcgaXQuCiAgICAgZGVmIF9yZWFkX2Jsb2NrKHNlbGYsIG4sIHJldHVybl9kYXRhPVRydWUpOgorICAgICAgICAjIElmIHdlIGhhdmUgZW5vdWdoIGRhdGEgYnVmZmVyZWQsIHJldHVybiBpbW1lZGlhdGVseS4KKyAgICAgICAgZW5kID0gc2VsZi5fYnVmZmVyX29mZnNldCArIG4KKyAgICAgICAgaWYgZW5kIDw9IGxlbihzZWxmLl9idWZmZXIpOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDogZW5kXQorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IGVuZAorICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEgaWYgcmV0dXJuX2RhdGEgZWxzZSBOb25lCisKKyAgICAgICAgIyBUaGUgbG9vcCBhc3N1bWVzIHRoYXQgX2J1ZmZlcl9vZmZzZXQgaXMgMC4gRW5zdXJlIHRoYXQgdGhpcyBpcyB0cnVlLgorICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldDpdCisgICAgICAgIHNlbGYuX2J1ZmZlcl9vZmZzZXQgPSAwCisKICAgICAgICAgYmxvY2tzID0gW10KICAgICAgICAgd2hpbGUgbiA+IDAgYW5kIHNlbGYuX2ZpbGxfYnVmZmVyKCk6CiAgICAgICAgICAgICBpZiBuIDwgbGVuKHNlbGYuX2J1ZmZlcik6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcls6bl0KLSAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbbjpdCisgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IG4KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgotICAgICAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKICAgICAgICAgICAgIGlmIHJldHVybl9kYXRhOgogICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoZGF0YSkKICAgICAgICAgICAgIHNlbGYuX3BvcyArPSBsZW4oZGF0YSkKQEAgLTI3NCw5ICsyOTMsOSBAQAogICAgICAgICBUaGUgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIHJldHVybmVkIGlzIHVuc3BlY2lmaWVkLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2FuX3JlYWQoKQotICAgICAgICBpZiBzZWxmLl9tb2RlID09IF9NT0RFX1JFQURfRU9GIG9yIG5vdCBzZWxmLl9maWxsX2J1ZmZlcigpOgorICAgICAgICBpZiBub3Qgc2VsZi5fZmlsbF9idWZmZXIoKToKICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgcmV0dXJuIHNlbGYuX2J1ZmZlcgorICAgICAgICByZXR1cm4gc2VsZi5fYnVmZmVyW3NlbGYuX2J1ZmZlcl9vZmZzZXQ6XQogCiAgICAgZGVmIHJlYWQoc2VsZiwgc2l6ZT0tMSk6CiAgICAgICAgICIiIlJlYWQgdXAgdG8gc2l6ZSB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KQEAgLTI4NSw3ICszMDQsNyBAQAogICAgICAgICBSZXR1cm5zIGIiIiBpZiB0aGUgZmlsZSBpcyBhbHJlYWR5IGF0IEVPRi4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKLSAgICAgICAgaWYgc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvciBzaXplID09IDA6CisgICAgICAgIGlmIHNpemUgPT0gMDoKICAgICAgICAgICAgIHJldHVybiBiIiIKICAgICAgICAgZWxpZiBzaXplIDwgMDoKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2FsbCgpCkBAIC0zMDIsMTggKzMyMSw0MCBAQAogICAgICAgICAjIHRoaXMgZG9lcyBub3QgZ2l2ZSBlbm91Z2ggZGF0YSBmb3IgdGhlIGRlY29tcHJlc3NvciB0byBtYWtlIHByb2dyZXNzLgogICAgICAgICAjIEluIHRoaXMgY2FzZSB3ZSBtYWtlIG11bHRpcGxlIHJlYWRzLCB0byBhdm9pZCByZXR1cm5pbmcgYiIiLgogICAgICAgICBzZWxmLl9jaGVja19jYW5fcmVhZCgpCi0gICAgICAgIGlmIChzaXplID09IDAgb3Igc2VsZi5fbW9kZSA9PSBfTU9ERV9SRUFEX0VPRiBvcgotICAgICAgICAgICAgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCkpOgorICAgICAgICBpZiAoc2l6ZSA9PSAwIG9yCisgICAgICAgICAgICAjIE9ubHkgY2FsbCBfZmlsbF9idWZmZXIoKSBpZiB0aGUgYnVmZmVyIGlzIGFjdHVhbGx5IGVtcHR5LgorICAgICAgICAgICAgIyBUaGlzIGdpdmVzIGEgc2lnbmlmaWNhbnQgc3BlZWR1cCBpZiAqc2l6ZSogaXMgc21hbGwuCisgICAgICAgICAgICAoc2VsZi5fYnVmZmVyX29mZnNldCA9PSBsZW4oc2VsZi5fYnVmZmVyKSBhbmQgbm90IHNlbGYuX2ZpbGxfYnVmZmVyKCkpKToKICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgaWYgMCA8IHNpemUgPCBsZW4oc2VsZi5fYnVmZmVyKToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9idWZmZXJbOnNpemVdCi0gICAgICAgICAgICBzZWxmLl9idWZmZXIgPSBzZWxmLl9idWZmZXJbc2l6ZTpdCisgICAgICAgIGlmIHNpemUgPiAwOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0IDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCArIHNpemVdCisgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ICs9IGxlbihkYXRhKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcgotICAgICAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2J1ZmZlcltzZWxmLl9idWZmZXJfb2Zmc2V0Ol0KKyAgICAgICAgICAgIHNlbGYuX2J1ZmZlciA9IGIiIgorICAgICAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihkYXRhKQogICAgICAgICByZXR1cm4gZGF0YQogCisgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAiIiJSZWFkIGEgbGluZSBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgZmlsZS4KKworICAgICAgICBUaGUgdGVybWluYXRpbmcgbmV3bGluZSAoaWYgcHJlc2VudCkgaXMgcmV0YWluZWQuIElmIHNpemUgaXMKKyAgICAgICAgbm9uLW5lZ2F0aXZlLCBubyBtb3JlIHRoYW4gc2l6ZSBieXRlcyB3aWxsIGJlIHJlYWQgKGluIHdoaWNoCisgICAgICAgIGNhc2UgdGhlIGxpbmUgbWF5IGJlIGluY29tcGxldGUpLiBSZXR1cm5zIGInJyBpZiBhbHJlYWR5IGF0IEVPRi4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2NoZWNrX2Nhbl9yZWFkKCkKKyAgICAgICAgIyBTaG9ydGN1dCBmb3IgdGhlIGNvbW1vbiBjYXNlIC0gdGhlIHdob2xlIGxpbmUgaXMgaW4gdGhlIGJ1ZmZlci4KKyAgICAgICAgaWYgc2l6ZSA8IDA6CisgICAgICAgICAgICBlbmQgPSBzZWxmLl9idWZmZXIuZmluZChiIlxuIiwgc2VsZi5fYnVmZmVyX29mZnNldCkgKyAxCisgICAgICAgICAgICBpZiBlbmQgPiAwOgorICAgICAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9idWZmZXJbc2VsZi5fYnVmZmVyX29mZnNldCA6IGVuZF0KKyAgICAgICAgICAgICAgICBzZWxmLl9idWZmZXJfb2Zmc2V0ID0gZW5kCisgICAgICAgICAgICAgICAgc2VsZi5fcG9zICs9IGxlbihsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybiBsaW5lCisgICAgICAgIHJldHVybiBpby5CdWZmZXJlZElPQmFzZS5yZWFkbGluZShzZWxmLCBzaXplKQorCiAgICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgogICAgICAgICAiIiJXcml0ZSBhIGJ5dGVzIG9iamVjdCB0byB0aGUgZmlsZS4KIApAQCAtMzMzLDcgKzM3NCw4IEBACiAgICAgICAgIHNlbGYuX21vZGUgPSBfTU9ERV9SRUFECiAgICAgICAgIHNlbGYuX3BvcyA9IDAKICAgICAgICAgc2VsZi5fZGVjb21wcmVzc29yID0gTFpNQURlY29tcHJlc3NvcigqKnNlbGYuX2luaXRfYXJncykKLSAgICAgICAgc2VsZi5fYnVmZmVyID0gTm9uZQorICAgICAgICBzZWxmLl9idWZmZXIgPSBiIiIKKyAgICAgICAgc2VsZi5fYnVmZmVyX29mZnNldCA9IDAKIAogICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPTApOgogICAgICAgICAiIiJDaGFuZ2UgdGhlIGZpbGUgcG9zaXRpb24uCkBAIC0zNzIsOCArNDE0LDcgQEAKICAgICAgICAgICAgIG9mZnNldCAtPSBzZWxmLl9wb3MKIAogICAgICAgICAjIFJlYWQgYW5kIGRpc2NhcmQgZGF0YSB1bnRpbCB3ZSByZWFjaCB0aGUgZGVzaXJlZCBwb3NpdGlvbi4KLSAgICAgICAgaWYgc2VsZi5fbW9kZSAhPSBfTU9ERV9SRUFEX0VPRjoKLSAgICAgICAgICAgIHNlbGYuX3JlYWRfYmxvY2sob2Zmc2V0LCByZXR1cm5fZGF0YT1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmVhZF9ibG9jayhvZmZzZXQsIHJldHVybl9kYXRhPUZhbHNlKQogCiAgICAgICAgIHJldHVybiBzZWxmLl9wb3MKIApAQCAtMzg4LDIzICs0MjksMjUgQEAKICAgICAgICAgIGVuY29kaW5nPU5vbmUsIGVycm9ycz1Ob25lLCBuZXdsaW5lPU5vbmUpOgogICAgICIiIk9wZW4gYW4gTFpNQS1jb21wcmVzc2VkIGZpbGUgaW4gYmluYXJ5IG9yIHRleHQgbW9kZS4KIAotICAgIGZpbGVuYW1lIGNhbiBiZSBlaXRoZXIgYW4gYWN0dWFsIGZpbGUgbmFtZSAoZ2l2ZW4gYXMgYSBzdHIgb3IgYnl0ZXMgb2JqZWN0KSwKLSAgICBpbiB3aGljaCBjYXNlIHRoZSBuYW1lZCBmaWxlIGlzIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuIGV4aXN0aW5nIGZpbGUgb2JqZWN0Ci0gICAgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgorICAgIGZpbGVuYW1lIGNhbiBiZSBlaXRoZXIgYW4gYWN0dWFsIGZpbGUgbmFtZSAoZ2l2ZW4gYXMgYSBzdHIgb3IgYnl0ZXMKKyAgICBvYmplY3QpLCBpbiB3aGljaCBjYXNlIHRoZSBuYW1lZCBmaWxlIGlzIG9wZW5lZCwgb3IgaXQgY2FuIGJlIGFuCisgICAgZXhpc3RpbmcgZmlsZSBvYmplY3QgdG8gcmVhZCBmcm9tIG9yIHdyaXRlIHRvLgogCi0gICAgVGhlIG1vZGUgYXJndW1lbnQgY2FuIGJlICJyIiwgInJiIiAoZGVmYXVsdCksICJ3IiwgIndiIiwgImEiLCBvciAiYWIiIGZvcgotICAgIGJpbmFyeSBtb2RlLCBvciAicnQiLCAid3QiIG9yICJhdCIgZm9yIHRleHQgbW9kZS4KKyAgICBUaGUgbW9kZSBhcmd1bWVudCBjYW4gYmUgInIiLCAicmIiIChkZWZhdWx0KSwgInciLCAid2IiLCAieCIsICJ4YiIsCisgICAgImEiLCBvciAiYWIiIGZvciBiaW5hcnkgbW9kZSwgb3IgInJ0IiwgInd0IiwgInh0Iiwgb3IgImF0IiBmb3IgdGV4dAorICAgIG1vZGUuCiAKLSAgICBUaGUgZm9ybWF0LCBjaGVjaywgcHJlc2V0IGFuZCBmaWx0ZXJzIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBjb21wcmVzc2lvbgotICAgIHNldHRpbmdzLCBhcyBmb3IgTFpNQUNvbXByZXNzb3IsIExaTUFEZWNvbXByZXNzb3IgYW5kIExaTUFGaWxlLgorICAgIFRoZSBmb3JtYXQsIGNoZWNrLCBwcmVzZXQgYW5kIGZpbHRlcnMgYXJndW1lbnRzIHNwZWNpZnkgdGhlCisgICAgY29tcHJlc3Npb24gc2V0dGluZ3MsIGFzIGZvciBMWk1BQ29tcHJlc3NvciwgTFpNQURlY29tcHJlc3NvciBhbmQKKyAgICBMWk1BRmlsZS4KIAotICAgIEZvciBiaW5hcnkgbW9kZSwgdGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIHRoZSBMWk1BRmlsZSBjb25zdHJ1Y3RvcjoKLSAgICBMWk1BRmlsZShmaWxlbmFtZSwgbW9kZSwgLi4uKS4gSW4gdGhpcyBjYXNlLCB0aGUgZW5jb2RpbmcsIGVycm9ycyBhbmQKLSAgICBuZXdsaW5lIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSBwcm92aWRlZC4KKyAgICBGb3IgYmluYXJ5IG1vZGUsIHRoaXMgZnVuY3Rpb24gaXMgZXF1aXZhbGVudCB0byB0aGUgTFpNQUZpbGUKKyAgICBjb25zdHJ1Y3RvcjogTFpNQUZpbGUoZmlsZW5hbWUsIG1vZGUsIC4uLikuIEluIHRoaXMgY2FzZSwgdGhlCisgICAgZW5jb2RpbmcsIGVycm9ycyBhbmQgbmV3bGluZSBhcmd1bWVudHMgbXVzdCBub3QgYmUgcHJvdmlkZWQuCiAKICAgICBGb3IgdGV4dCBtb2RlLCBhIExaTUFGaWxlIG9iamVjdCBpcyBjcmVhdGVkLCBhbmQgd3JhcHBlZCBpbiBhbgotICAgIGlvLlRleHRJT1dyYXBwZXIgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGVuY29kaW5nLCBlcnJvciBoYW5kbGluZwotICAgIGJlaGF2aW9yLCBhbmQgbGluZSBlbmRpbmcocykuCisgICAgaW8uVGV4dElPV3JhcHBlciBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcsIGVycm9yCisgICAgaGFuZGxpbmcgYmVoYXZpb3IsIGFuZCBsaW5lIGVuZGluZyhzKS4KIAogICAgICIiIgogICAgIGlmICJ0IiBpbiBtb2RlOgpAQCAtNDM0LDcgKzQ3Nyw3IEBACiAgICAgUmVmZXIgdG8gTFpNQUNvbXByZXNzb3IncyBkb2NzdHJpbmcgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlCiAgICAgb3B0aW9uYWwgYXJndW1lbnRzICpmb3JtYXQqLCAqY2hlY2sqLCAqcHJlc2V0KiBhbmQgKmZpbHRlcnMqLgogCi0gICAgRm9yIGluY3JlbWVudGFsIGNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQUNvbXByZXNzb3Igb2JqZWN0IGluc3RlYWQuCisgICAgRm9yIGluY3JlbWVudGFsIGNvbXByZXNzaW9uLCB1c2UgYW4gTFpNQUNvbXByZXNzb3IgaW5zdGVhZC4KICAgICAiIiIKICAgICBjb21wID0gTFpNQUNvbXByZXNzb3IoZm9ybWF0LCBjaGVjaywgcHJlc2V0LCBmaWx0ZXJzKQogICAgIHJldHVybiBjb21wLmNvbXByZXNzKGRhdGEpICsgY29tcC5mbHVzaCgpCkBAIC00NDYsNyArNDg5LDcgQEAKICAgICBSZWZlciB0byBMWk1BRGVjb21wcmVzc29yJ3MgZG9jc3RyaW5nIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZQogICAgIG9wdGlvbmFsIGFyZ3VtZW50cyAqZm9ybWF0KiwgKmNoZWNrKiBhbmQgKmZpbHRlcnMqLgogCi0gICAgRm9yIGluY3JlbWVudGFsIGRlY29tcHJlc3Npb24sIHVzZSBhIExaTUFEZWNvbXByZXNzb3Igb2JqZWN0IGluc3RlYWQuCisgICAgRm9yIGluY3JlbWVudGFsIGRlY29tcHJlc3Npb24sIHVzZSBhbiBMWk1BRGVjb21wcmVzc29yIGluc3RlYWQuCiAgICAgIiIiCiAgICAgcmVzdWx0cyA9IFtdCiAgICAgd2hpbGUgVHJ1ZToKZGlmZiAtLWdpdCBhL0xpYi9tYWNwYXRoLnB5IGIvTGliL21hY3BhdGgucHkKaW5kZXggMTYxNWQ5MS4uNWNhMDA5NyAxMDA2NDQKLS0tIGEvTGliL21hY3BhdGgucHkKKysrIGIvTGliL21hY3BhdGgucHkKQEAgLTUzLDcgKzUzLDcgQEAKICAgICBjb2xvbiA9IF9nZXRfY29sb24ocykKICAgICBwYXRoID0gcwogICAgIGZvciB0IGluIHA6Ci0gICAgICAgIGlmIChub3Qgcykgb3IgaXNhYnModCk6CisgICAgICAgIGlmIChub3QgcGF0aCkgb3IgaXNhYnModCk6CiAgICAgICAgICAgICBwYXRoID0gdAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgdFs6MV0gPT0gY29sb246CkBAIC0xMjcsNyArMTI3LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0tZ2l0IGEvTGliL21haWxib3gucHkgYi9MaWIvbWFpbGJveC5weQppbmRleCAzYjY0YzJlLi40ZTQyYWQyIDEwMDY0NAotLS0gYS9MaWIvbWFpbGJveC5weQorKysgYi9MaWIvbWFpbGJveC5weQpAQCAtNiw3ICs2LDYgQEAKICMgb3IgcmV0dXJuaW5nIGZyb20gYSBmbHVzaCgpIG1ldGhvZC4gIFNlZSBmdW5jdGlvbnMgX3N5bmNfZmx1c2goKSBhbmQKICMgX3N5bmNfY2xvc2UoKS4KIAotaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgdGltZQogaW1wb3J0IGNhbGVuZGFyCkBAIC0yMCw5ICsxOSw2IEBACiBpbXBvcnQgaW8KIGltcG9ydCBjb250ZXh0bGliCiB0cnk6Ci0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdvczJlbXgnOgotICAgICAgICAjIE9TLzIgRU1YIGZjbnRsKCkgbm90IGFkZXF1YXRlCi0gICAgICAgIHJhaXNlIEltcG9ydEVycm9yCiAgICAgaW1wb3J0IGZjbnRsCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZmNudGwgPSBOb25lCkBAIC0xMDcsNyArMTAzLDcgQEAKIAogICAgIGRlZiBpdGVydmFsdWVzKHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBhbGwgbWVzc2FnZXMuIiIiCi0gICAgICAgIGZvciBrZXkgaW4gc2VsZi5rZXlzKCk6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5pdGVya2V5cygpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZltrZXldCiAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CkBAIC0xMjMsNyArMTE5LDcgQEAKIAogICAgIGRlZiBpdGVyaXRlbXMoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhbiBpdGVyYXRvciBvdmVyIChrZXksIG1lc3NhZ2UpIHR1cGxlcy4iIiIKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLmtleXMoKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLml0ZXJrZXlzKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2tleV0KICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKQEAgLTE1OCw3ICsxNTQsNyBAQAogCiAgICAgZGVmIHBvcGl0ZW0oc2VsZik6CiAgICAgICAgICIiIkRlbGV0ZSBhbiBhcmJpdHJhcnkgKGtleSwgbWVzc2FnZSkgcGFpciBhbmQgcmV0dXJuIGl0LiIiIgotICAgICAgICBmb3Iga2V5IGluIHNlbGYua2V5cygpOgorICAgICAgICBmb3Iga2V5IGluIHNlbGYuaXRlcmtleXMoKToKICAgICAgICAgICAgIHJldHVybiAoa2V5LCBzZWxmLnBvcChrZXkpKSAgICAgIyBUaGlzIGlzIG9ubHkgcnVuIG9uY2UuCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZXMgaW4gbWFpbGJveCcpCkBAIC0xNjYsNyArMTYyLDcgQEAKICAgICBkZWYgdXBkYXRlKHNlbGYsIGFyZz1Ob25lKToKICAgICAgICAgIiIiQ2hhbmdlIHRoZSBtZXNzYWdlcyB0aGF0IGNvcnJlc3BvbmQgdG8gY2VydGFpbiBrZXlzLiIiIgogICAgICAgICBpZiBoYXNhdHRyKGFyZywgJ2l0ZXJpdGVtcycpOgotICAgICAgICAgICAgc291cmNlID0gYXJnLml0ZW1zKCkKKyAgICAgICAgICAgIHNvdXJjZSA9IGFyZy5pdGVyaXRlbXMoKQogICAgICAgICBlbGlmIGhhc2F0dHIoYXJnLCAnaXRlbXMnKToKICAgICAgICAgICAgIHNvdXJjZSA9IGFyZy5pdGVtcygpCiAgICAgICAgIGVsc2U6CkBAIC0zMzksMTEgKzMzNSw4IEBACiAgICAgICAgICMgVGhpcyBvdmVycmlkZXMgYW4gaW5hcHBsaWNhYmxlIGltcGxlbWVudGF0aW9uIGluIHRoZSBzdXBlcmNsYXNzLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLnJlbW92ZShrZXkpCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgZXhjZXB0IChLZXlFcnJvciwgRmlsZU5vdEZvdW5kRXJyb3IpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIGRlZiBfX3NldGl0ZW1fXyhzZWxmLCBrZXksIG1lc3NhZ2UpOgogICAgICAgICAiIiJSZXBsYWNlIHRoZSBrZXllZCBtZXNzYWdlOyByYWlzZSBLZXlFcnJvciBpZiBpdCBkb2Vzbid0IGV4aXN0LiIiIgpAQCAtMzc1LDE0ICszNjgsMTEgQEAKICAgICBkZWYgZ2V0X21lc3NhZ2Uoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgTWVzc2FnZSByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgogICAgICAgICBzdWJwYXRoID0gc2VsZi5fbG9va3VwKGtleSkKLSAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN1YnBhdGgpLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3VicGF0aCksICdyYicpIGFzIGY6CiAgICAgICAgICAgICBpZiBzZWxmLl9mYWN0b3J5OgogICAgICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2ZhY3RvcnkoZikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgbXNnID0gTWFpbGRpck1lc3NhZ2UoZikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzdWJkaXIsIG5hbWUgPSBvcy5wYXRoLnNwbGl0KHN1YnBhdGgpCiAgICAgICAgIG1zZy5zZXRfc3ViZGlyKHN1YmRpcikKICAgICAgICAgaWYgc2VsZi5jb2xvbiBpbiBuYW1lOgpAQCAtMzkyLDExICszODIsOCBAQAogCiAgICAgZGVmIGdldF9ieXRlcyhzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBieXRlcyByZXByZXNlbnRhdGlvbiBvciByYWlzZSBhIEtleUVycm9yLiIiIgotICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc2VsZi5fbG9va3VwKGtleSkpLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc2VsZi5fbG9va3VwKGtleSkpLCAncmInKSBhcyBmOgogICAgICAgICAgICAgcmV0dXJuIGYucmVhZCgpLnJlcGxhY2UobGluZXNlcCwgYidcbicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgIGRlZiBnZXRfZmlsZShzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gYSBmaWxlLWxpa2UgcmVwcmVzZW50YXRpb24gb3IgcmFpc2UgYSBLZXlFcnJvci4iIiIKQEAgLTUwOCwxNiArNDk1LDEyIEBACiAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgJ3RtcCcsIHVuaXEpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnN0YXQocGF0aCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgotICAgICAgICAgICAgICAgIE1haWxkaXIuX2NvdW50ICs9IDEKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlX2NhcmVmdWxseShwYXRoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgTWFpbGRpci5fY291bnQgKz0gMQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJldHVybiBfY3JlYXRlX2NhcmVmdWxseShwYXRoKQorICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgIyBGYWxsIHRocm91Z2ggdG8gaGVyZSBpZiBzdGF0IHN1Y2NlZWRlZCBvciBvcGVuIHJhaXNlZCBFRVhJU1QuCiAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignTmFtZSBjbGFzaCBwcmV2ZW50ZWQgZmlsZSBjcmVhdGlvbjogJXMnICUKQEAgLTU3Niw3ICs1NTksNyBAQAogICAgIGRlZiBuZXh0KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIG5leHQgbWVzc2FnZSBpbiBhIG9uZS10aW1lIGl0ZXJhdGlvbi4iIiIKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgJ19vbmV0aW1lX2tleXMnKToKLSAgICAgICAgICAgIHNlbGYuX29uZXRpbWVfa2V5cyA9IGl0ZXIoc2VsZi5rZXlzKCkpCisgICAgICAgICAgICBzZWxmLl9vbmV0aW1lX2tleXMgPSBzZWxmLml0ZXJrZXlzKCkKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZltuZXh0KHNlbGYuX29uZXRpbWVfa2V5cyldCkBAIC01OTQsNyArNTc3LDcgQEAKICAgICAgICAgTWFpbGJveC5fX2luaXRfXyhzZWxmLCBwYXRoLCBmYWN0b3J5LCBjcmVhdGUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKHNlbGYuX3BhdGgsICdyYisnKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgaWYgY3JlYXRlOgogICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihzZWxmLl9wYXRoLCAnd2IrJykKQEAgLTYzNyw4ICs2MjAsNyBAQAogICAgIGRlZiBpdGVya2V5cyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGFuIGl0ZXJhdG9yIG92ZXIga2V5cy4iIiIKICAgICAgICAgc2VsZi5fbG9va3VwKCkKLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLl90b2Mua2V5cygpOgotICAgICAgICAgICAgeWllbGQga2V5CisgICAgICAgIHlpZWxkIGZyb20gc2VsZi5fdG9jLmtleXMoKQogCiAgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBrZXkpOgogICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUga2V5ZWQgbWVzc2FnZSBleGlzdHMsIEZhbHNlIG90aGVyd2lzZS4iIiIKQEAgLTcxNiwxMyArNjk4LDkgQEAKICAgICAgICAgb3MuY2htb2QobmV3X2ZpbGUubmFtZSwgbW9kZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVFWElTVCBvciBcCi0gICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuX3BhdGgpCi0gICAgICAgICAgICAgICAgb3MucmVuYW1lKG5ld19maWxlLm5hbWUsIHNlbGYuX3BhdGgpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5fcGF0aCkKKyAgICAgICAgICAgIG9zLnJlbmFtZShuZXdfZmlsZS5uYW1lLCBzZWxmLl9wYXRoKQogICAgICAgICBzZWxmLl9maWxlID0gb3BlbihzZWxmLl9wYXRoLCAncmIrJykKICAgICAgICAgc2VsZi5fdG9jID0gbmV3X3RvYwogICAgICAgICBzZWxmLl9wZW5kaW5nID0gRmFsc2UKQEAgLTc0NCwxMCArNzIyLDE0IEBACiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkZsdXNoIGFuZCBjbG9zZSB0aGUgbWFpbGJveC4iIiIKLSAgICAgICAgc2VsZi5mbHVzaCgpCi0gICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKLSAgICAgICAgICAgIHNlbGYudW5sb2NrKCkKLSAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpICAjIFN5bmMgaGFzIGJlZW4gZG9uZSBieSBzZWxmLmZsdXNoKCkgYWJvdmUuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi51bmxvY2soKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkgICMgU3luYyBoYXMgYmVlbiBkb25lIGJ5IHNlbGYuZmx1c2goKSBhYm92ZS4KIAogICAgIGRlZiBfbG9va3VwKHNlbGYsIGtleT1Ob25lKToKICAgICAgICAgIiIiUmV0dXJuIChzdGFydCwgc3RvcCkgb3IgcmFpc2UgS2V5RXJyb3IuIiIiCkBAIC05OTksNyArOTgxLDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTEwMTMsNyArOTk1LDcgQEAKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZiA9IG9wZW4ocGF0aCwgJ3JiKycpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTEwMzksMTIgKzEwMjEsMTIgQEAKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmIrJykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuX3BhdGgsIHN0cihrZXkpKSwgJ3JiJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PRU5UOgogICAgICAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdObyBtZXNzYWdlIHdpdGgga2V5OiAlcycgJSBrZXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBmOgogICAgICAgICAgICAgaWYgc2VsZi5fbG9ja2VkOgogICAgICAgICAgICAgICAgIF9sb2NrX2ZpbGUoZikKICAgICAgICAgICAgIHRyeToKQEAgLTEwNTIsOCArMTAzNCw2IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2xvY2tlZDoKICAgICAgICAgICAgICAgICAgICAgX3VubG9ja19maWxlKGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZm9yIG5hbWUsIGtleV9saXN0IGluIHNlbGYuZ2V0X3NlcXVlbmNlcygpLml0ZW1zKCk6CiAgICAgICAgICAgICBpZiBrZXkgaW4ga2V5X2xpc3Q6CiAgICAgICAgICAgICAgICAgbXNnLmFkZF9zZXF1ZW5jZShuYW1lKQpAQCAtMTA2NiwxMiArMTA0NiwxMiBAQAogICAgICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYisnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5fcGF0aCwgc3RyKGtleSkpLCAncmInKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FTk9FTlQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ05vIG1lc3NhZ2Ugd2l0aCBrZXk6ICVzJyAlIGtleSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIGY6CiAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgX2xvY2tfZmlsZShmKQogICAgICAgICAgICAgdHJ5OgpAQCAtMTA3OSwxNCArMTA1OSwxMiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpZiBzZWxmLl9sb2NrZWQ6CiAgICAgICAgICAgICAgICAgICAgIF91bmxvY2tfZmlsZShmKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgZ2V0X2ZpbGUoc2VsZiwga2V5KToKICAgICAgICAgIiIiUmV0dXJuIGEgZmlsZS1saWtlIHJlcHJlc2VudGF0aW9uIG9yIHJhaXNlIGEgS2V5RXJyb3IuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGYgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLl9wYXRoLCBzdHIoa2V5KSksICdyYicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcignTm8gbWVzc2FnZSB3aXRoIGtleTogJXMnICUga2V5KQogICAgICAgICAgICAgZWxzZToKQEAgLTExMDQsNyArMTA4Miw3IEBACiAKICAgICBkZWYgX19sZW5fXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIGEgY291bnQgb2YgbWVzc2FnZXMgaW4gdGhlIG1haWxib3guIiIiCi0gICAgICAgIHJldHVybiBsZW4obGlzdChzZWxmLmtleXMoKSkpCisgICAgICAgIHJldHVybiBsZW4obGlzdChzZWxmLml0ZXJrZXlzKCkpKQogCiAgICAgZGVmIGxvY2soc2VsZik6CiAgICAgICAgICIiIkxvY2sgdGhlIG1haWxib3guIiIiCkBAIC0xMjE4LDcgKzExOTYsNyBAQAogICAgICAgICBzZXF1ZW5jZXMgPSBzZWxmLmdldF9zZXF1ZW5jZXMoKQogICAgICAgICBwcmV2ID0gMAogICAgICAgICBjaGFuZ2VzID0gW10KLSAgICAgICAgZm9yIGtleSBpbiBzZWxmLmtleXMoKToKKyAgICAgICAgZm9yIGtleSBpbiBzZWxmLml0ZXJrZXlzKCk6CiAgICAgICAgICAgICBpZiBrZXkgLSAxICE9IHByZXY6CiAgICAgICAgICAgICAgICAgY2hhbmdlcy5hcHBlbmQoKGtleSwgcHJldiArIDEpKQogICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICdsaW5rJyk6CkBAIC0yMDA2LDcgKzE5ODQsNyBAQAogICAgICAgICByZXR1cm4gcmVzdWx0CiAKICAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICAiIiJDb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgc3VwcG9ydC4iIiIKKyAgICAgICAgIiIiQ29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHN1cHBvcnQuIiIiCiAgICAgICAgIHJldHVybiBzZWxmCiAKICAgICBkZWYgX19leGl0X18oc2VsZiwgKmV4Yyk6CkBAIC0yMDc5LDcgKzIwNTcsNyBAQAogICAgICAgICBpZiBmY250bDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmY250bC5sb2NrZihmLCBmY250bC5MT0NLX0VYIHwgZmNudGwuTE9DS19OQikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gaW4gKGVycm5vLkVBR0FJTiwgZXJybm8uRUFDQ0VTLCBlcnJuby5FUk9GUyk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignbG9ja2Y6IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLm5hbWUpCkBAIC0yMDg5LDcgKzIwNjcsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByZV9sb2NrID0gX2NyZWF0ZV90ZW1wb3JhcnkoZi5uYW1lICsgJy5sb2NrJykKICAgICAgICAgICAgICAgICBwcmVfbG9jay5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLmVycm5vIGluIChlcnJuby5FQUNDRVMsIGVycm5vLkVST0ZTKToKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICAjIFdpdGhvdXQgd3JpdGUgYWNjZXNzLCBqdXN0IHNraXAgZG90bG9ja2luZy4KICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMjEwMiwxNCArMjA4MCwxMCBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShwcmVfbG9jay5uYW1lLCBmLm5hbWUgKyAnLmxvY2snKQogICAgICAgICAgICAgICAgICAgICBkb3Rsb2NrX2RvbmUgPSBUcnVlCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRUVYSVNUIG9yIFwKLSAgICAgICAgICAgICAgICAgIChvcy5uYW1lID09ICdvczInIGFuZCBlLmVycm5vID09IGVycm5vLkVBQ0NFUyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQotICAgICAgICAgICAgICAgICAgICByYWlzZSBFeHRlcm5hbENsYXNoRXJyb3IoJ2RvdCBsb2NrIHVuYXZhaWxhYmxlOiAlcycgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5uYW1lKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShwcmVfbG9jay5uYW1lKQorICAgICAgICAgICAgICAgIHJhaXNlIEV4dGVybmFsQ2xhc2hFcnJvcignZG90IGxvY2sgdW5hdmFpbGFibGU6ICVzJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYubmFtZSkKICAgICBleGNlcHQ6CiAgICAgICAgIGlmIGZjbnRsOgogICAgICAgICAgICAgZmNudGwubG9ja2YoZiwgZmNudGwuTE9DS19VTikKZGlmZiAtLWdpdCBhL0xpYi9tYWlsY2FwLnB5IGIvTGliL21haWxjYXAucHkKaW5kZXggMGMwYjE5Yy4uOTdlMzAzNSAxMDA2NDQKLS0tIGEvTGliL21haWxjYXAucHkKKysrIGIvTGliL21haWxjYXAucHkKQEAgLTIwLDcgKzIwLDcgQEAKICAgICBmb3IgbWFpbGNhcCBpbiBsaXN0bWFpbGNhcGZpbGVzKCk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZwID0gb3BlbihtYWlsY2FwLCAncicpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBtb3JlY2FwcyA9IHJlYWRtYWlsY2FwZmlsZShmcCkKZGlmZiAtLWdpdCBhL0xpYi9taW1ldHlwZXMucHkgYi9MaWIvbWltZXR5cGVzLnB5CmluZGV4IGNkZWJmN2EuLmQ2NDcyNmIgMTAwNjQ0Ci0tLSBhL0xpYi9taW1ldHlwZXMucHkKKysrIGIvTGliL21pbWV0eXBlcy5weQpAQCAtMjQ2LDcgKzI0Niw4IEBACiAgICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgeWllbGQgY3R5cGUKKyAgICAgICAgICAgICAgICAgICAgaWYgJ1wwJyBub3QgaW4gY3R5cGU6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBjdHlwZQogICAgICAgICAgICAgICAgIGkgKz0gMQogCiAgICAgICAgIHdpdGggX3dpbnJlZy5PcGVuS2V5KF93aW5yZWcuSEtFWV9DTEFTU0VTX1JPT1QsICcnKSBhcyBoa2NyOgpAQCAtMzYxLDcgKzM2Miw3IEBACiBkZWYgcmVhZF9taW1lX3R5cGVzKGZpbGUpOgogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICB3aXRoIGY6CiAgICAgICAgIGRiID0gTWltZVR5cGVzKCkKZGlmZiAtLWdpdCBhL0xpYi9tb2R1bGVmaW5kZXIucHkgYi9MaWIvbW9kdWxlZmluZGVyLnB5CmluZGV4IDI2NGIwZjAuLmI3NzhlNjAgMTAwNjQ0Ci0tLSBhL0xpYi9tb2R1bGVmaW5kZXIucHkKKysrIGIvTGliL21vZHVsZWZpbmRlci5weQpAQCAtMSwxMyArMSwxNyBAQAogIiIiRmluZCBtb2R1bGVzIHVzZWQgYnkgYSBzY3JpcHQsIHVzaW5nIGludHJvc3BlY3Rpb24uIiIiCiAKIGltcG9ydCBkaXMKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIuX2Jvb3RzdHJhcAogaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwogaW1wb3J0IHN0cnVjdAoraW1wb3J0IHdhcm5pbmdzCit3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIGltcG9ydCBpbXAKIAogIyBYWFggQ2xlYW4gdXAgb25jZSBzdHI4J3MgY3N0b3IgbWF0Y2hlcyBieXRlcy4KIExPQURfQ09OU1QgPSBieXRlcyhbZGlzLm9wbmFtZS5pbmRleCgnTE9BRF9DT05TVCcpXSkKQEAgLTIyOSw3ICsyMzMsNyBAQAogICAgICAgICBmb3IgZGlyIGluIG0uX19wYXRoX186CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHNlbGYubXNnKDIsICJjYW4ndCBsaXN0IGRpcmVjdG9yeSIsIGRpcikKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CkBAIC0yODQsMTEgKzI4OCwxMiBAQAogICAgICAgICBpZiB0eXBlID09IGltcC5QWV9TT1VSQ0U6CiAgICAgICAgICAgICBjbyA9IGNvbXBpbGUoZnAucmVhZCgpKydcbicsIHBhdGhuYW1lLCAnZXhlYycpCiAgICAgICAgIGVsaWYgdHlwZSA9PSBpbXAuUFlfQ09NUElMRUQ6Ci0gICAgICAgICAgICBpZiBmcC5yZWFkKDQpICE9IGltcC5nZXRfbWFnaWMoKToKLSAgICAgICAgICAgICAgICBzZWxmLm1zZ291dCgyLCAicmFpc2UgSW1wb3J0RXJyb3I6IEJhZCBtYWdpYyBudW1iZXIiLCBwYXRobmFtZSkKLSAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiQmFkIG1hZ2ljIG51bWJlciBpbiAlcyIgJSBwYXRobmFtZSkKLSAgICAgICAgICAgIGZwLnJlYWQoOCkgICMgU2tpcCBtdGltZSBhbmQgc2l6ZS4KLSAgICAgICAgICAgIGNvID0gbWFyc2hhbC5sb2FkKGZwKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1hcnNoYWxfZGF0YSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl92YWxpZGF0ZV9ieXRlY29kZV9oZWFkZXIoZnAucmVhZCgpKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBzZWxmLm1zZ291dCgyLCAicmFpc2UgSW1wb3J0RXJyb3I6ICIgKyBzdHIoZXhjKSwgcGF0aG5hbWUpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGNvID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsX2RhdGEpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjbyA9IE5vbmUKICAgICAgICAgbSA9IHNlbGYuYWRkX21vZHVsZShmcW5hbWUpCkBAIC01NjMsMTEgKzU2OCwxMiBAQAogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShjb25zdHNbaV0sIHR5cGUoY28pKToKICAgICAgICAgICAgICAgICBjb25zdHNbaV0gPSBzZWxmLnJlcGxhY2VfcGF0aHNfaW5fY29kZShjb25zdHNbaV0pCiAKLSAgICAgICAgcmV0dXJuIHR5cGVzLkNvZGVUeXBlKGNvLmNvX2FyZ2NvdW50LCBjby5jb19ubG9jYWxzLCBjby5jb19zdGFja3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fZmxhZ3MsIGNvLmNvX2NvZGUsIHR1cGxlKGNvbnN0cyksIGNvLmNvX25hbWVzLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvLmNvX3Zhcm5hbWVzLCBuZXdfZmlsZW5hbWUsIGNvLmNvX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fZmlyc3RsaW5lbm8sIGNvLmNvX2xub3RhYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb19mcmVldmFycywgY28uY29fY2VsbHZhcnMpCisgICAgICAgIHJldHVybiB0eXBlcy5Db2RlVHlwZShjby5jb19hcmdjb3VudCwgY28uY29fa3dvbmx5YXJnY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb19ubG9jYWxzLCBjby5jb19zdGFja3NpemUsIGNvLmNvX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fY29kZSwgdHVwbGUoY29uc3RzKSwgY28uY29fbmFtZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb192YXJuYW1lcywgbmV3X2ZpbGVuYW1lLCBjby5jb19uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY28uY29fZmlyc3RsaW5lbm8sIGNvLmNvX2xub3RhYiwgY28uY29fZnJlZXZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjby5jb19jZWxsdmFycykKIAogCiBkZWYgdGVzdCgpOgpkaWZmIC0tZ2l0IGEvTGliL21zaWxpYi9zY2hlbWEucHkgYi9MaWIvbXNpbGliL3NjaGVtYS5weQppbmRleCBhOWUxNjc5Li43MGZlMTM4IDEwMDY0NAotLS0gYS9MaWIvbXNpbGliL3NjaGVtYS5weQorKysgYi9MaWIvbXNpbGliL3NjaGVtYS5weQpAQCAtNzMzLDcgKzczMyw3IEBACiAoJ0N1c3RvbUFjdGlvbicsJ1NvdXJjZScsJ1knLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsICdDdXN0b21Tb3VyY2UnLE5vbmUsICdUaGUgdGFibGUgcmVmZXJlbmNlIG9mIHRoZSBzb3VyY2Ugb2YgdGhlIGNvZGUuJywpLAogKCdDdXN0b21BY3Rpb24nLCdUYXJnZXQnLCdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnRm9ybWF0dGVkJyxOb25lLCAnRXhjZWN1dGlvbiBwYXJhbWV0ZXIsIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgY3VzdG9tIGFjdGlvbicsKSwKICgnRHJMb2NhdG9yJywnU2lnbmF0dXJlXycsJ04nLE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsICdJZGVudGlmaWVyJyxOb25lLCAnVGhlIFNpZ25hdHVyZV8gcmVwcmVzZW50cyBhIHVuaXF1ZSBmaWxlIHNpZ25hdHVyZSBhbmQgaXMgYWxzbyB0aGUgZm9yZWlnbiBrZXkgaW4gdGhlIFNpZ25hdHVyZSB0YWJsZS4nLCksCi0oJ0RyTG9jYXRvcicsJ1BhdGgnLCdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnQW55UGF0aCcsTm9uZSwgJ1RoZSBwYXRoIG9uIHRoZSB1c2VyIHN5c3RlbS4gVGhpcyBpcyBhIGVpdGhlciBhIHN1YnBhdGggYmVsb3cgdGhlIHZhbHVlIG9mIHRoZSBQYXJlbnQgb3IgYSBmdWxsIHBhdGguIFRoZSBwYXRoIG1heSBjb250YWluIHByb3BlcnRpZXMgZW5jbG9zZWQgd2l0aGluIFsgXSB0aGF0IHdpbGwgYmUgZXhwYW5kZWQuJywpLAorKCdEckxvY2F0b3InLCdQYXRoJywnWScsTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgJ0FueVBhdGgnLE5vbmUsICdUaGUgcGF0aCBvbiB0aGUgdXNlciBzeXN0ZW0uIFRoaXMgaXMgZWl0aGVyIGEgc3VicGF0aCBiZWxvdyB0aGUgdmFsdWUgb2YgdGhlIFBhcmVudCBvciBhIGZ1bGwgcGF0aC4gVGhlIHBhdGggbWF5IGNvbnRhaW4gcHJvcGVydGllcyBlbmNsb3NlZCB3aXRoaW4gWyBdIHRoYXQgd2lsbCBiZSBleHBhbmRlZC4nLCksCiAoJ0RyTG9jYXRvcicsJ0RlcHRoJywnWScsMCwzMjc2NyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnVGhlIGRlcHRoIGJlbG93IHRoZSBwYXRoIHRvIHdoaWNoIHRoZSBTaWduYXR1cmVfIGlzIHJlY3Vyc2l2ZWx5IHNlYXJjaGVkLiBJZiBhYnNlbnQsIHRoZSBkZXB0aCBpcyBhc3N1bWVkIHRvIGJlIDAuJywpLAogKCdEckxvY2F0b3InLCdQYXJlbnQnLCdZJyxOb25lLCBOb25lLCBOb25lLCBOb25lLCAnSWRlbnRpZmllcicsTm9uZSwgJ1RoZSBwYXJlbnQgZmlsZSBzaWduYXR1cmUuIEl0IGlzIGFsc28gYSBmb3JlaWduIGtleSBpbiB0aGUgU2lnbmF0dXJlIHRhYmxlLiBJZiBudWxsIGFuZCB0aGUgUGF0aCBjb2x1bW4gZG9lcyBub3QgZXhwYW5kIHRvIGEgZnVsbCBwYXRoLCB0aGVuIGFsbCB0aGUgZml4ZWQgZHJpdmVzIG9mIHRoZSB1c2VyIHN5c3RlbSBhcmUgc2VhcmNoZWQgdXNpbmcgdGhlIFBhdGguJywpLAogKCdEdXBsaWNhdGVGaWxlJywnRmlsZV8nLCdOJyxOb25lLCBOb25lLCAnRmlsZScsMSwnSWRlbnRpZmllcicsTm9uZSwgJ0ZvcmVpZ24ga2V5IHJlZmVyZW5jaW5nIHRoZSBzb3VyY2UgZmlsZSB0byBiZSBkdXBsaWNhdGVkLicsKSwKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL19faW5pdF9fLnB5CmluZGV4IDFmM2U2N2MuLjg2ZGY2MzggMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvX19pbml0X18ucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9fX2luaXRfXy5weQpAQCAtOCwyNjAgKzgsMzEgQEAKICMgc3VicGFja2FnZSAnbXVsdGlwcm9jZXNzaW5nLmR1bW15JyBoYXMgdGhlIHNhbWUgQVBJIGJ1dCBpcyBhIHNpbXBsZQogIyB3cmFwcGVyIGZvciAndGhyZWFkaW5nJy4KICMKLSMgVHJ5IGNhbGxpbmcgYG11bHRpcHJvY2Vzc2luZy5kb2MubWFpbigpYCB0byByZWFkIHRoZSBodG1sCi0jIGRvY3VtZW50YXRpb24gaW4gYSB3ZWJicm93c2VyLgotIwotIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX192ZXJzaW9uX18gPSAnMC43MGExJwotCi1fX2FsbF9fID0gWwotICAgICdQcm9jZXNzJywgJ2N1cnJlbnRfcHJvY2VzcycsICdhY3RpdmVfY2hpbGRyZW4nLCAnZnJlZXplX3N1cHBvcnQnLAotICAgICdNYW5hZ2VyJywgJ1BpcGUnLCAnY3B1X2NvdW50JywgJ2xvZ190b19zdGRlcnInLCAnZ2V0X2xvZ2dlcicsCi0gICAgJ2FsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcnLCAnQnVmZmVyVG9vU2hvcnQnLCAnVGltZW91dEVycm9yJywKLSAgICAnTG9jaycsICdSTG9jaycsICdTZW1hcGhvcmUnLCAnQm91bmRlZFNlbWFwaG9yZScsICdDb25kaXRpb24nLAotICAgICdFdmVudCcsICdCYXJyaWVyJywgJ1F1ZXVlJywgJ1NpbXBsZVF1ZXVlJywgJ0pvaW5hYmxlUXVldWUnLCAnUG9vbCcsCi0gICAgJ1ZhbHVlJywgJ0FycmF5JywgJ1Jhd1ZhbHVlJywgJ1Jhd0FycmF5JywgJ1NVQkRFQlVHJywgJ1NVQldBUk5JTkcnLAotICAgIF0KLQotX19hdXRob3JfXyA9ICdSLiBPdWRrZXJrIChyLm0ub3Vka2Vya0BnbWFpbC5jb20pJwotCi0jCi0jIEltcG9ydHMKLSMKLQotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi0KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IFByb2Nlc3MsIGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBTVUJERUJVRywgU1VCV0FSTklORworZnJvbSAuIGltcG9ydCBjb250ZXh0CiAKICMKLSMgRXhjZXB0aW9ucworIyBDb3B5IHN0dWZmIGZyb20gZGVmYXVsdCBjb250ZXh0CiAjCiAKLWNsYXNzIFByb2Nlc3NFcnJvcihFeGNlcHRpb24pOgotICAgIHBhc3MKLQotY2xhc3MgQnVmZmVyVG9vU2hvcnQoUHJvY2Vzc0Vycm9yKToKLSAgICBwYXNzCi0KLWNsYXNzIFRpbWVvdXRFcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotY2xhc3MgQXV0aGVudGljYXRpb25FcnJvcihQcm9jZXNzRXJyb3IpOgotICAgIHBhc3MKLQotaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKK2dsb2JhbHMoKS51cGRhdGUoKG5hbWUsIGdldGF0dHIoY29udGV4dC5fZGVmYXVsdF9jb250ZXh0LCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgZm9yIG5hbWUgaW4gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18pCitfX2FsbF9fID0gY29udGV4dC5fZGVmYXVsdF9jb250ZXh0Ll9fYWxsX18KIAogIwotIyBEZWZpbml0aW9ucyBub3QgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIFhYWCBUaGVzZSBzaG91bGQgbm90IHJlYWxseSBiZSBkb2N1bWVudGVkIG9yIHB1YmxpYy4KICMKIAotZGVmIE1hbmFnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgbWFuYWdlciBhc3NvY2lhdGVkIHdpdGggYSBydW5uaW5nIHNlcnZlciBwcm9jZXNzCi0KLSAgICBUaGUgbWFuYWdlcnMgbWV0aG9kcyBzdWNoIGFzIGBMb2NrKClgLCBgQ29uZGl0aW9uKClgIGFuZCBgUXVldWUoKWAKLSAgICBjYW4gYmUgdXNlZCB0byBjcmVhdGUgc2hhcmVkIG9iamVjdHMuCi0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMgaW1wb3J0IFN5bmNNYW5hZ2VyCi0gICAgbSA9IFN5bmNNYW5hZ2VyKCkKLSAgICBtLnN0YXJ0KCkKLSAgICByZXR1cm4gbQotCi1kZWYgUGlwZShkdXBsZXg9VHJ1ZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyB0d28gY29ubmVjdGlvbiBvYmplY3QgY29ubmVjdGVkIGJ5IGEgcGlwZQotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IFBpcGUKLSAgICByZXR1cm4gUGlwZShkdXBsZXgpCi0KLWRlZiBjcHVfY291bnQoKToKLSAgICAnJycKLSAgICBSZXR1cm5zIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB0aGUgc3lzdGVtCi0gICAgJycnCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IGludChvcy5lbnZpcm9uWydOVU1CRVJfT0ZfUFJPQ0VTU09SUyddKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEtleUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLSAgICBlbGlmICdic2QnIGluIHN5cy5wbGF0Zm9ybSBvciBzeXMucGxhdGZvcm0gPT0gJ2Rhcndpbic6Ci0gICAgICAgIGNvbW0gPSAnL3NiaW4vc3lzY3RsIC1uIGh3Lm5jcHUnCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKLSAgICAgICAgICAgIGNvbW0gPSAnL3VzcicgKyBjb21tCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggb3MucG9wZW4oY29tbSkgYXMgcDoKLSAgICAgICAgICAgICAgICBudW0gPSBpbnQocC5yZWFkKCkpCi0gICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgbnVtID0gMAotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG51bSA9IG9zLnN5c2NvbmYoJ1NDX05QUk9DRVNTT1JTX09OTE4nKQotICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKLSAgICAgICAgICAgIG51bSA9IDAKLQotICAgIGlmIG51bSA+PSAxOgotICAgICAgICByZXR1cm4gbnVtCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignY2Fubm90IGRldGVybWluZSBudW1iZXIgb2YgY3B1cycpCi0KLWRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICcnJwotICAgIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGZha2UgZm9ya2VkIHByb2Nlc3MgaW4gYSBmcm96ZW4gZXhlY3V0YWJsZS4KLSAgICBJZiBzbyB0aGVuIHJ1biBjb2RlIHNwZWNpZmllZCBieSBjb21tYW5kbGluZSBhbmQgZXhpdC4KLSAgICAnJycKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGZyZWV6ZV9zdXBwb3J0Ci0gICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLQotZGVmIGdldF9sb2dnZXIoKToKLSAgICAnJycKLSAgICBSZXR1cm4gcGFja2FnZSBsb2dnZXIgLS0gaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB0aGVuIGl0IGlzIGNyZWF0ZWQKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBnZXRfbG9nZ2VyCi0gICAgcmV0dXJuIGdldF9sb2dnZXIoKQotCi1kZWYgbG9nX3RvX3N0ZGVycihsZXZlbD1Ob25lKToKLSAgICAnJycKLSAgICBUdXJuIG9uIGxvZ2dpbmcgYW5kIGFkZCBhIGhhbmRsZXIgd2hpY2ggcHJpbnRzIHRvIHN0ZGVycgotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGxvZ190b19zdGRlcnIKLSAgICByZXR1cm4gbG9nX3RvX3N0ZGVycihsZXZlbCkKLQotZGVmIGFsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcoKToKLSAgICAnJycKLSAgICBJbnN0YWxsIHN1cHBvcnQgZm9yIHNlbmRpbmcgY29ubmVjdGlvbnMgYW5kIHNvY2tldHMgYmV0d2VlbiBwcm9jZXNzZXMKLSAgICAnJycKLSAgICAjIFRoaXMgaXMgdW5kb2N1bWVudGVkLiAgSW4gcHJldmlvdXMgdmVyc2lvbnMgb2YgbXVsdGlwcm9jZXNzaW5nCi0gICAgIyBpdHMgb25seSBlZmZlY3Qgd2FzIHRvIG1ha2Ugc29ja2V0IG9iamVjdHMgaW5oZXJpdGFibGUgb24gV2luZG93cy4KLSAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KK1NVQkRFQlVHID0gNQorU1VCV0FSTklORyA9IDI1CiAKICMKLSMgRGVmaW5pdGlvbnMgZGVwZW5kaW5nIG9uIG5hdGl2ZSBzZW1hcGhvcmVzCisjIEFsaWFzIGZvciBtYWluIG1vZHVsZSAtLSB3aWxsIGJlIHJlc2V0IGJ5IGJvb3RzdHJhcHBpbmcgY2hpbGQgcHJvY2Vzc2VzCiAjCiAKLWRlZiBMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIG5vbi1yZWN1cnNpdmUgbG9jayBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jawotICAgIHJldHVybiBMb2NrKCkKLQotZGVmIFJMb2NrKCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHJlY3Vyc2l2ZSBsb2NrIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBSTG9jawotICAgIHJldHVybiBSTG9jaygpCi0KLWRlZiBDb25kaXRpb24obG9jaz1Ob25lKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgY29uZGl0aW9uIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBDb25kaXRpb24KLSAgICByZXR1cm4gQ29uZGl0aW9uKGxvY2spCi0KLWRlZiBTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHNlbWFwaG9yZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgU2VtYXBob3JlCi0gICAgcmV0dXJuIFNlbWFwaG9yZSh2YWx1ZSkKLQotZGVmIEJvdW5kZWRTZW1hcGhvcmUodmFsdWU9MSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplIGltcG9ydCBCb3VuZGVkU2VtYXBob3JlCi0gICAgcmV0dXJuIEJvdW5kZWRTZW1hcGhvcmUodmFsdWUpCi0KLWRlZiBFdmVudCgpOgotICAgICcnJwotICAgIFJldHVybnMgYW4gZXZlbnQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEV2ZW50Ci0gICAgcmV0dXJuIEV2ZW50KCkKLQotZGVmIEJhcnJpZXIocGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIGJhcnJpZXIgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUgaW1wb3J0IEJhcnJpZXIKLSAgICByZXR1cm4gQmFycmllcihwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQpCi0KLWRlZiBRdWV1ZShtYXhzaXplPTApOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFF1ZXVlCi0gICAgcmV0dXJuIFF1ZXVlKG1heHNpemUpCi0KLWRlZiBKb2luYWJsZVF1ZXVlKG1heHNpemU9MCk6Ci0gICAgJycnCi0gICAgUmV0dXJucyBhIHF1ZXVlIG9iamVjdAotICAgICcnJwotICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLnF1ZXVlcyBpbXBvcnQgSm9pbmFibGVRdWV1ZQotICAgIHJldHVybiBKb2luYWJsZVF1ZXVlKG1heHNpemUpCi0KLWRlZiBTaW1wbGVRdWV1ZSgpOgotICAgICcnJwotICAgIFJldHVybnMgYSBxdWV1ZSBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCi0gICAgcmV0dXJuIFNpbXBsZVF1ZXVlKCkKLQotZGVmIFBvb2wocHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrc3BlcmNoaWxkPU5vbmUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBwcm9jZXNzIHBvb2wgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgUG9vbAotICAgIHJldHVybiBQb29sKHByb2Nlc3NlcywgaW5pdGlhbGl6ZXIsIGluaXRhcmdzLCBtYXh0YXNrc3BlcmNoaWxkKQotCi1kZWYgUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgb2JqZWN0Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdWYWx1ZQotICAgIHJldHVybiBSYXdWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncykKLQotZGVmIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzaGFyZWQgYXJyYXkKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFJhd0FycmF5Ci0gICAgcmV0dXJuIFJhd0FycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIpCi0KLWRlZiBWYWx1ZSh0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlKToKLSAgICAnJycKLSAgICBSZXR1cm5zIGEgc3luY2hyb25pemVkIHNoYXJlZCBvYmplY3QKLSAgICAnJycKLSAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMgaW1wb3J0IFZhbHVlCi0gICAgcmV0dXJuIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPWxvY2spCi0KLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgotICAgICcnJwotICAgIFJldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIGFycmF5Ci0gICAgJycnCi0gICAgZnJvbSBtdWx0aXByb2Nlc3Npbmcuc2hhcmVkY3R5cGVzIGltcG9ydCBBcnJheQotICAgIHJldHVybiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCBsb2NrPWxvY2spCi0KLSMKLSMKLSMKLQotaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0KLSAgICBkZWYgc2V0X2V4ZWN1dGFibGUoZXhlY3V0YWJsZSk6Ci0gICAgICAgICcnJwotICAgICAgICBTZXRzIHRoZSBwYXRoIHRvIGEgcHl0aG9uLmV4ZSBvciBweXRob253LmV4ZSBiaW5hcnkgdXNlZCB0byBydW4KLSAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgaW5zdGVhZCBvZiBzeXMuZXhlY3V0YWJsZS4KLSAgICAgICAgVXNlZnVsIGZvciBwZW9wbGUgZW1iZWRkaW5nIFB5dGhvbi4KLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IHNldF9leGVjdXRhYmxlCi0gICAgICAgIHNldF9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCi0KLSAgICBfX2FsbF9fICs9IFsnc2V0X2V4ZWN1dGFibGUnXQoraWYgJ19fbWFpbl9fJyBpbiBzeXMubW9kdWxlczoKKyAgICBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2Nvbm5lY3Rpb24ucHkKaW5kZXggMjI1ODlkMC4uMWViMWE4ZCAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9jb25uZWN0aW9uLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29ubmVjdGlvbi5weQpAQCAtMTIsMjIgKzEyLDIzIEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IHBpY2tsZQotaW1wb3J0IHNlbGVjdAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN0cnVjdAotaW1wb3J0IGVycm5vCiBpbXBvcnQgdGltZQogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgaXRlcnRvb2xzCiAKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgY3VycmVudF9wcm9jZXNzLCBBdXRoZW50aWNhdGlvbkVycm9yLCBCdWZmZXJUb29TaG9ydAotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgZ2V0X3RlbXBfZGlyLCBGaW5hbGl6ZSwgc3ViX2RlYnVnLCBkZWJ1ZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKKworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitmcm9tIC4gaW1wb3J0IEF1dGhlbnRpY2F0aW9uRXJyb3IsIEJ1ZmZlclRvb1Nob3J0Citmcm9tIC5yZWR1Y3Rpb24gaW1wb3J0IEZvcmtpbmdQaWNrbGVyCisKIHRyeToKICAgICBpbXBvcnQgX3dpbmFwaQotICAgIGZyb20gX3dpbmFwaSBpbXBvcnQgV0FJVF9PQkpFQ1RfMCwgV0FJVF9USU1FT1VULCBJTkZJTklURQorICAgIGZyb20gX3dpbmFwaSBpbXBvcnQgV0FJVF9PQkpFQ1RfMCwgV0FJVF9BQkFORE9ORURfMCwgV0FJVF9USU1FT1VULCBJTkZJTklURQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICByYWlzZQpAQCAtNzIsMTAgKzczLDEwIEBACiAgICAgaWYgZmFtaWx5ID09ICdBRl9JTkVUJzoKICAgICAgICAgcmV0dXJuICgnbG9jYWxob3N0JywgMCkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfVU5JWCc6Ci0gICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9Z2V0X3RlbXBfZGlyKCkpCisgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PSdsaXN0ZW5lci0nLCBkaXI9dXRpbC5nZXRfdGVtcF9kaXIoKSkKICAgICBlbGlmIGZhbWlseSA9PSAnQUZfUElQRSc6CiAgICAgICAgIHJldHVybiB0ZW1wZmlsZS5ta3RlbXAocHJlZml4PXInXFwuXHBpcGVccHljLSVkLSVkLScgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcy5nZXRwaWQoKSwgbmV4dChfbW1hcF9jb3VudGVyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9zLmdldHBpZCgpLCBuZXh0KF9tbWFwX2NvdW50ZXIpKSwgZGlyPSIiKQogICAgIGVsc2U6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3VucmVjb2duaXplZCBmYW1pbHknKQogCkBAIC0xMzIsMjIgKzEzMywyMiBAQAogCiAgICAgZGVmIF9jaGVja19jbG9zZWQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX2hhbmRsZSBpcyBOb25lOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiaGFuZGxlIGlzIGNsb3NlZCIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJoYW5kbGUgaXMgY2xvc2VkIikKIAogICAgIGRlZiBfY2hlY2tfcmVhZGFibGUoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLl9yZWFkYWJsZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoImNvbm5lY3Rpb24gaXMgd3JpdGUtb25seSIpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJjb25uZWN0aW9uIGlzIHdyaXRlLW9ubHkiKQogCiAgICAgZGVmIF9jaGVja193cml0YWJsZShzZWxmKToKICAgICAgICAgaWYgbm90IHNlbGYuX3dyaXRhYmxlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY29ubmVjdGlvbiBpcyByZWFkLW9ubHkiKQogCiAgICAgZGVmIF9iYWRfbWVzc2FnZV9sZW5ndGgoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuX3dyaXRhYmxlOgogICAgICAgICAgICAgc2VsZi5fcmVhZGFibGUgPSBGYWxzZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgIHJhaXNlIElPRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoImJhZCBtZXNzYWdlIGxlbmd0aCIpCiAKICAgICBAcHJvcGVydHkKICAgICBkZWYgY2xvc2VkKHNlbGYpOgpAQCAtMjAyLDkgKzIwMyw3IEBACiAgICAgICAgICIiIlNlbmQgYSAocGlja2xhYmxlKSBvYmplY3QiIiIKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tfd3JpdGFibGUoKQotICAgICAgICBidWYgPSBpby5CeXRlc0lPKCkKLSAgICAgICAgRm9ya2luZ1BpY2tsZXIoYnVmLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCkuZHVtcChvYmopCi0gICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMoYnVmLmdldGJ1ZmZlcigpKQorICAgICAgICBzZWxmLl9zZW5kX2J5dGVzKEZvcmtpbmdQaWNrbGVyLmR1bXBzKG9iaikpCiAKICAgICBkZWYgcmVjdl9ieXRlcyhzZWxmLCBtYXhsZW5ndGg9Tm9uZSk6CiAgICAgICAgICIiIgpAQCAtMjIxLDcgKzIyMCw3IEBACiAKICAgICBkZWYgcmVjdl9ieXRlc19pbnRvKHNlbGYsIGJ1Ziwgb2Zmc2V0PTApOgogICAgICAgICAiIiIKLSAgICAgICAgUmVjZWl2ZSBieXRlcyBkYXRhIGludG8gYSB3cml0ZWFibGUgYnVmZmVyLWxpa2Ugb2JqZWN0LgorICAgICAgICBSZWNlaXZlIGJ5dGVzIGRhdGEgaW50byBhIHdyaXRlYWJsZSBieXRlcy1saWtlIG9iamVjdC4KICAgICAgICAgUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuX2NoZWNrX2Nsb3NlZCgpCkBAIC0yNDksNyArMjQ4LDcgQEAKICAgICAgICAgc2VsZi5fY2hlY2tfY2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tfcmVhZGFibGUoKQogICAgICAgICBidWYgPSBzZWxmLl9yZWN2X2J5dGVzKCkKLSAgICAgICAgcmV0dXJuIHBpY2tsZS5sb2FkcyhidWYuZ2V0YnVmZmVyKCkpCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhidWYuZ2V0YnVmZmVyKCkpCiAKICAgICBkZWYgcG9sbChzZWxmLCB0aW1lb3V0PTAuMCk6CiAgICAgICAgICIiIldoZXRoZXIgdGhlcmUgaXMgYW55IGlucHV0IGF2YWlsYWJsZSB0byBiZSByZWFkIiIiCkBAIC0zMTcsNyArMzE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZgogICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBlcnIgPT0gX3dpbmFwaS5FUlJPUl9NT1JFX0RBVEE6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2dldF9tb3JlX2RhdGEob3YsIG1heHNpemUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yID09IF93aW5hcGkuRVJST1JfQlJPS0VOX1BJUEU6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBFT0ZFcnJvcgogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMzg5LDcgKzM4OCw3IEBACiAgICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nID09IHNpemU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiZ290IGVuZCBvZiBmaWxlIGR1cmluZyBtZXNzYWdlIikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiZ290IGVuZCBvZiBmaWxlIGR1cmluZyBtZXNzYWdlIikKICAgICAgICAgICAgIGJ1Zi53cml0ZShjaHVuaykKICAgICAgICAgICAgIHJlbWFpbmluZyAtPSBuCiAgICAgICAgIHJldHVybiBidWYKQEAgLTQ1OSw3ICs0NTgsNyBAQAogICAgICAgICBSZXR1cm5zIGEgYENvbm5lY3Rpb25gIG9iamVjdC4KICAgICAgICAgJycnCiAgICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIE5vbmU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdsaXN0ZW5lciBpcyBjbG9zZWQnKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignbGlzdGVuZXIgaXMgY2xvc2VkJykKICAgICAgICAgYyA9IHNlbGYuX2xpc3RlbmVyLmFjY2VwdCgpCiAgICAgICAgIGlmIHNlbGYuX2F1dGhrZXk6CiAgICAgICAgICAgICBkZWxpdmVyX2NoYWxsZW5nZShjLCBzZWxmLl9hdXRoa2V5KQpAQCAtNDcwLDkgKzQ2OSwxMCBAQAogICAgICAgICAnJycKICAgICAgICAgQ2xvc2UgdGhlIGJvdW5kIHNvY2tldCBvciBuYW1lZCBwaXBlIG9mIGBzZWxmYC4KICAgICAgICAgJycnCi0gICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQorICAgICAgICBsaXN0ZW5lciA9IHNlbGYuX2xpc3RlbmVyCisgICAgICAgIGlmIGxpc3RlbmVyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgICAgICBsaXN0ZW5lci5jbG9zZSgpCiAKICAgICBhZGRyZXNzID0gcHJvcGVydHkobGFtYmRhIHNlbGY6IHNlbGYuX2xpc3RlbmVyLl9hZGRyZXNzKQogICAgIGxhc3RfYWNjZXB0ZWQgPSBwcm9wZXJ0eShsYW1iZGEgc2VsZjogc2VsZi5fbGlzdGVuZXIuX2xhc3RfYWNjZXB0ZWQpCkBAIC01NDUsNyArNTQ1LDkgQEAKICAgICAgICAgICAgIF93aW5hcGkuRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5TVEFOQ0UsCiAgICAgICAgICAgICBfd2luYXBpLlBJUEVfVFlQRV9NRVNTQUdFIHwgX3dpbmFwaS5QSVBFX1JFQURNT0RFX01FU1NBR0UgfAogICAgICAgICAgICAgX3dpbmFwaS5QSVBFX1dBSVQsCi0gICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwgX3dpbmFwaS5OVUxMCisgICAgICAgICAgICAxLCBvYnNpemUsIGlic2l6ZSwgX3dpbmFwaS5OTVBXQUlUX1dBSVRfRk9SRVZFUiwKKyAgICAgICAgICAgICMgZGVmYXVsdCBzZWN1cml0eSBkZXNjcmlwdG9yOiB0aGUgaGFuZGxlIGNhbm5vdCBiZSBpbmhlcml0ZWQKKyAgICAgICAgICAgIF93aW5hcGkuTlVMTAogICAgICAgICAgICAgKQogICAgICAgICBoMiA9IF93aW5hcGkuQ3JlYXRlRmlsZSgKICAgICAgICAgICAgIGFkZHJlc3MsIGFjY2VzcywgMCwgX3dpbmFwaS5OVUxMLCBfd2luYXBpLk9QRU5fRVhJU1RJTkcsCkBAIC01OTAsNyArNTkyLDcgQEAKICAgICAgICAgc2VsZi5fbGFzdF9hY2NlcHRlZCA9IE5vbmUKIAogICAgICAgICBpZiBmYW1pbHkgPT0gJ0FGX1VOSVgnOgotICAgICAgICAgICAgc2VsZi5fdW5saW5rID0gRmluYWxpemUoCisgICAgICAgICAgICBzZWxmLl91bmxpbmsgPSB1dGlsLkZpbmFsaXplKAogICAgICAgICAgICAgICAgIHNlbGYsIG9zLnVubGluaywgYXJncz0oYWRkcmVzcywpLCBleGl0cHJpb3JpdHk9MAogICAgICAgICAgICAgICAgICkKICAgICAgICAgZWxzZToKQEAgLTYwOCw5ICs2MTAsMTMgQEAKICAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24ocy5kZXRhY2goKSkKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgc2VsZi5fc29ja2V0LmNsb3NlKCkKLSAgICAgICAgaWYgc2VsZi5fdW5saW5rIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fdW5saW5rKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5fc29ja2V0LmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHVubGluayA9IHNlbGYuX3VubGluaworICAgICAgICAgICAgaWYgdW5saW5rIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3VubGluayA9IE5vbmUKKyAgICAgICAgICAgICAgICB1bmxpbmsoKQogCiAKIGRlZiBTb2NrZXRDbGllbnQoYWRkcmVzcyk6CkBAIC02MzgsOCArNjQ0LDggQEAKICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9xdWV1ZSA9IFtzZWxmLl9uZXdfaGFuZGxlKGZpcnN0PVRydWUpXQogCiAgICAgICAgICAgICBzZWxmLl9sYXN0X2FjY2VwdGVkID0gTm9uZQotICAgICAgICAgICAgc3ViX2RlYnVnKCdsaXN0ZW5lciBjcmVhdGVkIHdpdGggYWRkcmVzcz0lcicsIHNlbGYuX2FkZHJlc3MpCi0gICAgICAgICAgICBzZWxmLmNsb3NlID0gRmluYWxpemUoCisgICAgICAgICAgICB1dGlsLnN1Yl9kZWJ1ZygnbGlzdGVuZXIgY3JlYXRlZCB3aXRoIGFkZHJlc3M9JXInLCBzZWxmLl9hZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5jbG9zZSA9IHV0aWwuRmluYWxpemUoCiAgICAgICAgICAgICAgICAgc2VsZiwgUGlwZUxpc3RlbmVyLl9maW5hbGl6ZV9waXBlX2xpc3RlbmVyLAogICAgICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2hhbmRsZV9xdWV1ZSwgc2VsZi5fYWRkcmVzcyksIGV4aXRwcmlvcml0eT0wCiAgICAgICAgICAgICAgICAgKQpAQCAtNjgxLDcgKzY4Nyw3IEBACiAKICAgICAgICAgQHN0YXRpY21ldGhvZAogICAgICAgICBkZWYgX2ZpbmFsaXplX3BpcGVfbGlzdGVuZXIocXVldWUsIGFkZHJlc3MpOgotICAgICAgICAgICAgc3ViX2RlYnVnKCdjbG9zaW5nIGxpc3RlbmVyIHdpdGggYWRkcmVzcz0lcicsIGFkZHJlc3MpCisgICAgICAgICAgICB1dGlsLnN1Yl9kZWJ1ZygnY2xvc2luZyBsaXN0ZW5lciB3aXRoIGFkZHJlc3M9JXInLCBhZGRyZXNzKQogICAgICAgICAgICAgZm9yIGhhbmRsZSBpbiBxdWV1ZToKICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGhhbmRsZSkKIApAQCAtNjk4LDcgKzcwNCw3IEBACiAgICAgICAgICAgICAgICAgICAgIDAsIF93aW5hcGkuTlVMTCwgX3dpbmFwaS5PUEVOX0VYSVNUSU5HLAogICAgICAgICAgICAgICAgICAgICBfd2luYXBpLkZJTEVfRkxBR19PVkVSTEFQUEVELCBfd2luYXBpLk5VTEwKICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yIG5vdCBpbiAoX3dpbmFwaS5FUlJPUl9TRU1fVElNRU9VVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5FUlJPUl9QSVBFX0JVU1kpIG9yIF9jaGVja190aW1lb3V0KHQpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQpAQCAtNzI3LDcgKzczMyw3IEBACiAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYXV0aGtleSwgYnl0ZXMpCiAgICAgbWVzc2FnZSA9IG9zLnVyYW5kb20oTUVTU0FHRV9MRU5HVEgpCiAgICAgY29ubmVjdGlvbi5zZW5kX2J5dGVzKENIQUxMRU5HRSArIG1lc3NhZ2UpCi0gICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSkuZGlnZXN0KCkKKyAgICBkaWdlc3QgPSBobWFjLm5ldyhhdXRoa2V5LCBtZXNzYWdlLCAnbWQ1JykuZGlnZXN0KCkKICAgICByZXNwb25zZSA9IGNvbm5lY3Rpb24ucmVjdl9ieXRlcygyNTYpICAgICAgICAjIHJlamVjdCBsYXJnZSBtZXNzYWdlCiAgICAgaWYgcmVzcG9uc2UgPT0gZGlnZXN0OgogICAgICAgICBjb25uZWN0aW9uLnNlbmRfYnl0ZXMoV0VMQ09NRSkKQEAgLTc0MSw3ICs3NDcsNyBAQAogICAgIG1lc3NhZ2UgPSBjb25uZWN0aW9uLnJlY3ZfYnl0ZXMoMjU2KSAgICAgICAgICMgcmVqZWN0IGxhcmdlIG1lc3NhZ2UKICAgICBhc3NlcnQgbWVzc2FnZVs6bGVuKENIQUxMRU5HRSldID09IENIQUxMRU5HRSwgJ21lc3NhZ2UgPSAlcicgJSBtZXNzYWdlCiAgICAgbWVzc2FnZSA9IG1lc3NhZ2VbbGVuKENIQUxMRU5HRSk6XQotICAgIGRpZ2VzdCA9IGhtYWMubmV3KGF1dGhrZXksIG1lc3NhZ2UpLmRpZ2VzdCgpCisgICAgZGlnZXN0ID0gaG1hYy5uZXcoYXV0aGtleSwgbWVzc2FnZSwgJ21kNScpLmRpZ2VzdCgpCiAgICAgY29ubmVjdGlvbi5zZW5kX2J5dGVzKGRpZ2VzdCkKICAgICByZXNwb25zZSA9IGNvbm5lY3Rpb24ucmVjdl9ieXRlcygyNTYpICAgICAgICAjIHJlamVjdCBsYXJnZSBtZXNzYWdlCiAgICAgaWYgcmVzcG9uc2UgIT0gV0VMQ09NRToKQEAgLTg0Myw3ICs4NDksNyBAQAogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBvdiwgZXJyID0gX3dpbmFwaS5SZWFkRmlsZShmaWxlbm8oKSwgMCwgVHJ1ZSkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGUud2luZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgIG92LCBlcnIgPSBOb25lLCBlLndpbmVycm9yCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlcnIgbm90IGluIF9yZWFkeV9lcnJvcnM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgaWYgZXJyID09IF93aW5hcGkuRVJST1JfSU9fUEVORElORzoKQEAgLTg1Miw3ICs4NTgsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgby5maWxlbm8oKSBpcyBhbiBvdmVybGFwcGVkIHBpcGUgaGFuZGxlIGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgIyBlcnIgPT0gMCB0aGVuIHRoZXJlIGlzIGEgemVybyBsZW5ndGggbWVzc2FnZQotICAgICAgICAgICAgICAgICAgICAgICAgIyBpbiB0aGUgcGlwZSwgYnV0IGl0IEhBUyBOT1QgYmVlbiBjb25zdW1lZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIHBpcGUsIGJ1dCBpdCBIQVMgTk9UIGJlZW4gY29uc3VtZWQuLi4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG92IGFuZCBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKVs6Ml0gPj0gKDYsIDIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgLi4uIGV4Y2VwdCBvbiBXaW5kb3dzIDggYW5kIGxhdGVyLCB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdGhlIG1lc3NhZ2UgSEFTIGJlZW4gY29uc3VtZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfLCBlcnIgPSBvdi5HZXRPdmVybGFwcGVkUmVzdWx0KEZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGUud2luZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZXJyIGFuZCBoYXNhdHRyKG8sICdfZ290X2VtcHR5X21lc3NhZ2UnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgby5fZ290X2VtcHR5X21lc3NhZ2UgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkeV9vYmplY3RzLmFkZChvKQogICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IDAKIApAQCAtODg0LDI4ICs4OTksMTUgQEAKIAogZWxzZToKIAotICAgIGlmIGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpOgotICAgICAgICBkZWYgX3BvbGwoZmRzLCB0aW1lb3V0KToKLSAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IGludCh0aW1lb3V0ICogMTAwMCkgICMgdGltZW91dCBpcyBpbiBtaWxsaXNlY29uZHMKLSAgICAgICAgICAgIGZkX21hcCA9IHt9Ci0gICAgICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5wb2xsKCkKLSAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6Ci0gICAgICAgICAgICAgICAgcG9sbHN0ZXIucmVnaXN0ZXIoZmQsIHNlbGVjdC5QT0xMSU4pCi0gICAgICAgICAgICAgICAgaWYgaGFzYXR0cihmZCwgJ2ZpbGVubycpOgotICAgICAgICAgICAgICAgICAgICBmZF9tYXBbZmQuZmlsZW5vKCldID0gZmQKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBmZF9tYXBbZmRdID0gZmQKLSAgICAgICAgICAgIGxzID0gW10KLSAgICAgICAgICAgIGZvciBmZCwgZXZlbnQgaW4gcG9sbHN0ZXIucG9sbCh0aW1lb3V0KToKLSAgICAgICAgICAgICAgICBpZiBldmVudCAmIHNlbGVjdC5QT0xMTlZBTDoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignaW52YWxpZCBmaWxlIGRlc2NyaXB0b3IgJWknICUgZmQpCi0gICAgICAgICAgICAgICAgbHMuYXBwZW5kKGZkX21hcFtmZF0pCi0gICAgICAgICAgICByZXR1cm4gbHMKLSAgICBlbHNlOgotICAgICAgICBkZWYgX3BvbGwoZmRzLCB0aW1lb3V0KToKLSAgICAgICAgICAgIHJldHVybiBzZWxlY3Quc2VsZWN0KGZkcywgW10sIFtdLCB0aW1lb3V0KVswXQorICAgIGltcG9ydCBzZWxlY3RvcnMKIAorICAgICMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUKKyAgICAjIGRlc2NyaXB0b3IsIGNvbnRyYXJpbHkgdG8gZXBvbGwva3F1ZXVlIChhbHNvLCB0aGV5IHJlcXVpcmUgYSBzaW5nbGUKKyAgICAjIHN5c2NhbGwpLgorICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgICAgIF9XYWl0U2VsZWN0b3IgPSBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yCisgICAgZWxzZToKKyAgICAgICAgX1dhaXRTZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgogCiAgICAgZGVmIHdhaXQob2JqZWN0X2xpc3QsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgICcnJwpAQCAtOTEzLDM0ICs5MTUsNTQgQEAKIAogICAgICAgICBSZXR1cm5zIGxpc3Qgb2YgdGhvc2Ugb2JqZWN0cyBpbiBvYmplY3RfbGlzdCB3aGljaCBhcmUgcmVhZHkvcmVhZGFibGUuCiAgICAgICAgICcnJwotICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdGltZW91dCA8PSAwOgotICAgICAgICAgICAgICAgIHJldHVybiBfcG9sbChvYmplY3RfbGlzdCwgMCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXR1cm4gX3BvbGwob2JqZWN0X2xpc3QsIHRpbWVvdXQpCi0gICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHdpdGggX1dhaXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgZm9yIG9iaiBpbiBvYmplY3RfbGlzdDoKKyAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihvYmosIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCiAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBkZWFkbGluZSAtIHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIHRpbWVvdXQKKworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICByZWFkeSA9IHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICAgICAgICAgIGlmIHJlYWR5OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gW2tleS5maWxlb2JqIGZvciAoa2V5LCBldmVudHMpIGluIHJlYWR5XQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCA8IDA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlYWR5CiAKICMKICMgTWFrZSBjb25uZWN0aW9uIGFuZCBzb2NrZXQgb2JqZWN0cyBzaGFyYWJsZSBpZiBwb3NzaWJsZQogIwogCiBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIHJlZHVjdGlvbi5yZWR1Y2Vfc29ja2V0KQotICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKENvbm5lY3Rpb24sIHJlZHVjdGlvbi5yZWR1Y2VfY29ubmVjdGlvbikKLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihQaXBlQ29ubmVjdGlvbiwgcmVkdWN0aW9uLnJlZHVjZV9waXBlX2Nvbm5lY3Rpb24pCisgICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBoYW5kbGUgPSBjb25uLmZpbGVubygpCisgICAgICAgIHdpdGggc29ja2V0LmZyb21mZChoYW5kbGUsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICAgICAgZHMgPSByZXNvdXJjZV9zaGFyZXIuRHVwU29ja2V0KHMpCisgICAgICAgICAgICByZXR1cm4gcmVidWlsZF9jb25uZWN0aW9uLCAoZHMsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCisgICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkcywgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgc29jayA9IGRzLmRldGFjaCgpCisgICAgICAgIHJldHVybiBDb25uZWN0aW9uKHNvY2suZGV0YWNoKCksIHJlYWRhYmxlLCB3cml0YWJsZSkKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoQ29ubmVjdGlvbiwgcmVkdWNlX2Nvbm5lY3Rpb24pCisKKyAgICBkZWYgcmVkdWNlX3BpcGVfY29ubmVjdGlvbihjb25uKToKKyAgICAgICAgYWNjZXNzID0gKChfd2luYXBpLkZJTEVfR0VORVJJQ19SRUFEIGlmIGNvbm4ucmVhZGFibGUgZWxzZSAwKSB8CisgICAgICAgICAgICAgICAgICAoX3dpbmFwaS5GSUxFX0dFTkVSSUNfV1JJVEUgaWYgY29ubi53cml0YWJsZSBlbHNlIDApKQorICAgICAgICBkaCA9IHJlZHVjdGlvbi5EdXBIYW5kbGUoY29ubi5maWxlbm8oKSwgYWNjZXNzKQorICAgICAgICByZXR1cm4gcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24sIChkaCwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKKyAgICBkZWYgcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24oZGgsIHJlYWRhYmxlLCB3cml0YWJsZSk6CisgICAgICAgIGhhbmRsZSA9IGRoLmRldGFjaCgpCisgICAgICAgIHJldHVybiBQaXBlQ29ubmVjdGlvbihoYW5kbGUsIHJlYWRhYmxlLCB3cml0YWJsZSkKKyAgICByZWR1Y3Rpb24ucmVnaXN0ZXIoUGlwZUNvbm5lY3Rpb24sIHJlZHVjZV9waXBlX2Nvbm5lY3Rpb24pCisKIGVsc2U6Ci0gICAgdHJ5OgotICAgICAgICBmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIHJlZHVjdGlvbi5yZWR1Y2Vfc29ja2V0KQotICAgICAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y3Rpb24ucmVkdWNlX2Nvbm5lY3Rpb24pCisgICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgorICAgICAgICBkZiA9IHJlZHVjdGlvbi5EdXBGZChjb25uLmZpbGVubygpKQorICAgICAgICByZXR1cm4gcmVidWlsZF9jb25uZWN0aW9uLCAoZGYsIGNvbm4ucmVhZGFibGUsIGNvbm4ud3JpdGFibGUpCisgICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkZiwgcmVhZGFibGUsIHdyaXRhYmxlKToKKyAgICAgICAgZmQgPSBkZi5kZXRhY2goKQorICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihmZCwgcmVhZGFibGUsIHdyaXRhYmxlKQorICAgIHJlZHVjdGlvbi5yZWdpc3RlcihDb25uZWN0aW9uLCByZWR1Y2VfY29ubmVjdGlvbikKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29udGV4dC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvY29udGV4dC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Mzg0OWY5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9jb250ZXh0LnB5CkBAIC0wLDAgKzEsMzQ4IEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSAuIGltcG9ydCBwcm9jZXNzCisKK19fYWxsX18gPSBbXSAgICAgICAgICAgICMgdGhpbmdzIGFyZSBjb3BpZWQgZnJvbSBoZXJlIHRvIF9faW5pdF9fLnB5CisKKyMKKyMgRXhjZXB0aW9ucworIworCitjbGFzcyBQcm9jZXNzRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKK2NsYXNzIEJ1ZmZlclRvb1Nob3J0KFByb2Nlc3NFcnJvcik6CisgICAgcGFzcworCitjbGFzcyBUaW1lb3V0RXJyb3IoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKK2NsYXNzIEF1dGhlbnRpY2F0aW9uRXJyb3IoUHJvY2Vzc0Vycm9yKToKKyAgICBwYXNzCisKKyMKKyMgQmFzZSB0eXBlIGZvciBjb250ZXh0cworIworCitjbGFzcyBCYXNlQ29udGV4dChvYmplY3QpOgorCisgICAgUHJvY2Vzc0Vycm9yID0gUHJvY2Vzc0Vycm9yCisgICAgQnVmZmVyVG9vU2hvcnQgPSBCdWZmZXJUb29TaG9ydAorICAgIFRpbWVvdXRFcnJvciA9IFRpbWVvdXRFcnJvcgorICAgIEF1dGhlbnRpY2F0aW9uRXJyb3IgPSBBdXRoZW50aWNhdGlvbkVycm9yCisKKyAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MpCisgICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKHByb2Nlc3MuYWN0aXZlX2NoaWxkcmVuKQorCisgICAgZGVmIGNwdV9jb3VudChzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbScnJworICAgICAgICBudW0gPSBvcy5jcHVfY291bnQoKQorICAgICAgICBpZiBudW0gaXMgTm9uZToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoJ2Nhbm5vdCBkZXRlcm1pbmUgbnVtYmVyIG9mIGNwdXMnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG51bQorCisgICAgZGVmIE1hbmFnZXIoc2VsZik6CisgICAgICAgICcnJ1JldHVybnMgYSBtYW5hZ2VyIGFzc29jaWF0ZWQgd2l0aCBhIHJ1bm5pbmcgc2VydmVyIHByb2Nlc3MKKworICAgICAgICBUaGUgbWFuYWdlcnMgbWV0aG9kcyBzdWNoIGFzIGBMb2NrKClgLCBgQ29uZGl0aW9uKClgIGFuZCBgUXVldWUoKWAKKyAgICAgICAgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHNoYXJlZCBvYmplY3RzLgorICAgICAgICAnJycKKyAgICAgICAgZnJvbSAubWFuYWdlcnMgaW1wb3J0IFN5bmNNYW5hZ2VyCisgICAgICAgIG0gPSBTeW5jTWFuYWdlcihjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorICAgICAgICBtLnN0YXJ0KCkKKyAgICAgICAgcmV0dXJuIG0KKworICAgIGRlZiBQaXBlKHNlbGYsIGR1cGxleD1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyB0d28gY29ubmVjdGlvbiBvYmplY3QgY29ubmVjdGVkIGJ5IGEgcGlwZScnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBQaXBlCisgICAgICAgIHJldHVybiBQaXBlKGR1cGxleCkKKworICAgIGRlZiBMb2NrKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgbm9uLXJlY3Vyc2l2ZSBsb2NrIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jaworICAgICAgICByZXR1cm4gTG9jayhjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFJMb2NrKHNlbGYpOgorICAgICAgICAnJydSZXR1cm5zIGEgcmVjdXJzaXZlIGxvY2sgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnN5bmNocm9uaXplIGltcG9ydCBSTG9jaworICAgICAgICByZXR1cm4gUkxvY2soY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBDb25kaXRpb24oc2VsZiwgbG9jaz1Ob25lKToKKyAgICAgICAgJycnUmV0dXJucyBhIGNvbmRpdGlvbiBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IENvbmRpdGlvbgorICAgICAgICByZXR1cm4gQ29uZGl0aW9uKGxvY2ssIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgU2VtYXBob3JlKHNlbGYsIHZhbHVlPTEpOgorICAgICAgICAnJydSZXR1cm5zIGEgc2VtYXBob3JlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgU2VtYXBob3JlCisgICAgICAgIHJldHVybiBTZW1hcGhvcmUodmFsdWUsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgQm91bmRlZFNlbWFwaG9yZShzZWxmLCB2YWx1ZT0xKToKKyAgICAgICAgJycnUmV0dXJucyBhIGJvdW5kZWQgc2VtYXBob3JlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQm91bmRlZFNlbWFwaG9yZQorICAgICAgICByZXR1cm4gQm91bmRlZFNlbWFwaG9yZSh2YWx1ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBFdmVudChzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhbiBldmVudCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc3luY2hyb25pemUgaW1wb3J0IEV2ZW50CisgICAgICAgIHJldHVybiBFdmVudChjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEJhcnJpZXIoc2VsZiwgcGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBiYXJyaWVyIG9iamVjdCcnJworICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgQmFycmllcgorICAgICAgICByZXR1cm4gQmFycmllcihwYXJ0aWVzLCBhY3Rpb24sIHRpbWVvdXQsIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgUXVldWUoc2VsZiwgbWF4c2l6ZT0wKToKKyAgICAgICAgJycnUmV0dXJucyBhIHF1ZXVlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFF1ZXVlCisgICAgICAgIHJldHVybiBRdWV1ZShtYXhzaXplLCBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEpvaW5hYmxlUXVldWUoc2VsZiwgbWF4c2l6ZT0wKToKKyAgICAgICAgJycnUmV0dXJucyBhIHF1ZXVlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IEpvaW5hYmxlUXVldWUKKyAgICAgICAgcmV0dXJuIEpvaW5hYmxlUXVldWUobWF4c2l6ZSwgY3R4PXNlbGYuZ2V0X2NvbnRleHQoKSkKKworICAgIGRlZiBTaW1wbGVRdWV1ZShzZWxmKToKKyAgICAgICAgJycnUmV0dXJucyBhIHF1ZXVlIG9iamVjdCcnJworICAgICAgICBmcm9tIC5xdWV1ZXMgaW1wb3J0IFNpbXBsZVF1ZXVlCisgICAgICAgIHJldHVybiBTaW1wbGVRdWV1ZShjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFBvb2woc2VsZiwgcHJvY2Vzc2VzPU5vbmUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLAorICAgICAgICAgICAgIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBwcm9jZXNzIHBvb2wgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnBvb2wgaW1wb3J0IFBvb2wKKyAgICAgICAgcmV0dXJuIFBvb2wocHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MsIG1heHRhc2tzcGVyY2hpbGQsCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIFJhd1ZhbHVlKHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsICphcmdzKToKKyAgICAgICAgJycnUmV0dXJucyBhIHNoYXJlZCBvYmplY3QnJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdWYWx1ZQorICAgICAgICByZXR1cm4gUmF3VmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MpCisKKyAgICBkZWYgUmF3QXJyYXkoc2VsZiwgdHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplcik6CisgICAgICAgICcnJ1JldHVybnMgYSBzaGFyZWQgYXJyYXknJycKKyAgICAgICAgZnJvbSAuc2hhcmVkY3R5cGVzIGltcG9ydCBSYXdBcnJheQorICAgICAgICByZXR1cm4gUmF3QXJyYXkodHlwZWNvZGVfb3JfdHlwZSwgc2l6ZV9vcl9pbml0aWFsaXplcikKKworICAgIGRlZiBWYWx1ZShzZWxmLCB0eXBlY29kZV9vcl90eXBlLCAqYXJncywgbG9jaz1UcnVlKToKKyAgICAgICAgJycnUmV0dXJucyBhIHN5bmNocm9uaXplZCBzaGFyZWQgb2JqZWN0JycnCisgICAgICAgIGZyb20gLnNoYXJlZGN0eXBlcyBpbXBvcnQgVmFsdWUKKyAgICAgICAgcmV0dXJuIFZhbHVlKHR5cGVjb2RlX29yX3R5cGUsICphcmdzLCBsb2NrPWxvY2ssCisgICAgICAgICAgICAgICAgICAgICBjdHg9c2VsZi5nZXRfY29udGV4dCgpKQorCisgICAgZGVmIEFycmF5KHNlbGYsIHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSk6CisgICAgICAgICcnJ1JldHVybnMgYSBzeW5jaHJvbml6ZWQgc2hhcmVkIGFycmF5JycnCisgICAgICAgIGZyb20gLnNoYXJlZGN0eXBlcyBpbXBvcnQgQXJyYXkKKyAgICAgICAgcmV0dXJuIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsIGxvY2s9bG9jaywKKyAgICAgICAgICAgICAgICAgICAgIGN0eD1zZWxmLmdldF9jb250ZXh0KCkpCisKKyAgICBkZWYgZnJlZXplX3N1cHBvcnQoc2VsZik6CisgICAgICAgICcnJ0NoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGZha2UgZm9ya2VkIHByb2Nlc3MgaW4gYSBmcm96ZW4gZXhlY3V0YWJsZS4KKyAgICAgICAgSWYgc28gdGhlbiBydW4gY29kZSBzcGVjaWZpZWQgYnkgY29tbWFuZGxpbmUgYW5kIGV4aXQuCisgICAgICAgICcnJworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6CisgICAgICAgICAgICBmcm9tIC5zcGF3biBpbXBvcnQgZnJlZXplX3N1cHBvcnQKKyAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKworICAgIGRlZiBnZXRfbG9nZ2VyKHNlbGYpOgorICAgICAgICAnJydSZXR1cm4gcGFja2FnZSBsb2dnZXIgLS0gaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdCB0aGVuCisgICAgICAgIGl0IGlzIGNyZWF0ZWQuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBnZXRfbG9nZ2VyCisgICAgICAgIHJldHVybiBnZXRfbG9nZ2VyKCkKKworICAgIGRlZiBsb2dfdG9fc3RkZXJyKHNlbGYsIGxldmVsPU5vbmUpOgorICAgICAgICAnJydUdXJuIG9uIGxvZ2dpbmcgYW5kIGFkZCBhIGhhbmRsZXIgd2hpY2ggcHJpbnRzIHRvIHN0ZGVycicnJworICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBsb2dfdG9fc3RkZXJyCisgICAgICAgIHJldHVybiBsb2dfdG9fc3RkZXJyKGxldmVsKQorCisgICAgZGVmIGFsbG93X2Nvbm5lY3Rpb25fcGlja2xpbmcoc2VsZik6CisgICAgICAgICcnJ0luc3RhbGwgc3VwcG9ydCBmb3Igc2VuZGluZyBjb25uZWN0aW9ucyBhbmQgc29ja2V0cworICAgICAgICBiZXR3ZWVuIHByb2Nlc3NlcworICAgICAgICAnJycKKyAgICAgICAgIyBUaGlzIGlzIHVuZG9jdW1lbnRlZC4gIEluIHByZXZpb3VzIHZlcnNpb25zIG9mIG11bHRpcHJvY2Vzc2luZworICAgICAgICAjIGl0cyBvbmx5IGVmZmVjdCB3YXMgdG8gbWFrZSBzb2NrZXQgb2JqZWN0cyBpbmhlcml0YWJsZSBvbiBXaW5kb3dzLgorICAgICAgICBmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KKworICAgIGRlZiBzZXRfZXhlY3V0YWJsZShzZWxmLCBleGVjdXRhYmxlKToKKyAgICAgICAgJycnU2V0cyB0aGUgcGF0aCB0byBhIHB5dGhvbi5leGUgb3IgcHl0aG9udy5leGUgYmluYXJ5IHVzZWQgdG8gcnVuCisgICAgICAgIGNoaWxkIHByb2Nlc3NlcyBpbnN0ZWFkIG9mIHN5cy5leGVjdXRhYmxlIHdoZW4gdXNpbmcgdGhlICdzcGF3bicKKyAgICAgICAgc3RhcnQgbWV0aG9kLiAgVXNlZnVsIGZvciBwZW9wbGUgZW1iZWRkaW5nIFB5dGhvbi4KKyAgICAgICAgJycnCisgICAgICAgIGZyb20gLnNwYXduIGltcG9ydCBzZXRfZXhlY3V0YWJsZQorICAgICAgICBzZXRfZXhlY3V0YWJsZShleGVjdXRhYmxlKQorCisgICAgZGVmIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQoc2VsZiwgbW9kdWxlX25hbWVzKToKKyAgICAgICAgJycnU2V0IGxpc3Qgb2YgbW9kdWxlIG5hbWVzIHRvIHRyeSB0byBsb2FkIGluIGZvcmtzZXJ2ZXIgcHJvY2Vzcy4KKyAgICAgICAgVGhpcyBpcyByZWFsbHkganVzdCBhIGhpbnQuCisgICAgICAgICcnJworICAgICAgICBmcm9tIC5mb3Jrc2VydmVyIGltcG9ydCBzZXRfZm9ya3NlcnZlcl9wcmVsb2FkCisgICAgICAgIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQobW9kdWxlX25hbWVzKQorCisgICAgZGVmIGdldF9jb250ZXh0KHNlbGYsIG1ldGhvZD1Ob25lKToKKyAgICAgICAgaWYgbWV0aG9kIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjdHggPSBfY29uY3JldGVfY29udGV4dHNbbWV0aG9kXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdjYW5ub3QgZmluZCBjb250ZXh0IGZvciAlcicgJSBtZXRob2QpCisgICAgICAgIGN0eC5fY2hlY2tfYXZhaWxhYmxlKCkKKyAgICAgICAgcmV0dXJuIGN0eAorCisgICAgZGVmIGdldF9zdGFydF9tZXRob2Qoc2VsZiwgYWxsb3dfbm9uZT1GYWxzZSk6CisgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCisKKyAgICBkZWYgc2V0X3N0YXJ0X21ldGhvZChzZWxmLCBtZXRob2Q9Tm9uZSk6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBzZXQgc3RhcnQgbWV0aG9kIG9mIGNvbmNyZXRlIGNvbnRleHQnKQorCisgICAgZGVmIF9jaGVja19hdmFpbGFibGUoc2VsZik6CisgICAgICAgIHBhc3MKKworIworIyBUeXBlIG9mIGRlZmF1bHQgY29udGV4dCAtLSB1bmRlcmx5aW5nIGNvbnRleHQgY2FuIGJlIHNldCBhdCBtb3N0IG9uY2UKKyMKKworY2xhc3MgUHJvY2Vzcyhwcm9jZXNzLkJhc2VQcm9jZXNzKToKKyAgICBfc3RhcnRfbWV0aG9kID0gTm9uZQorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgcmV0dXJuIF9kZWZhdWx0X2NvbnRleHQuZ2V0X2NvbnRleHQoKS5Qcm9jZXNzLl9Qb3Blbihwcm9jZXNzX29iaikKKworY2xhc3MgRGVmYXVsdENvbnRleHQoQmFzZUNvbnRleHQpOgorICAgIFByb2Nlc3MgPSBQcm9jZXNzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGV4dCk6CisgICAgICAgIHNlbGYuX2RlZmF1bHRfY29udGV4dCA9IGNvbnRleHQKKyAgICAgICAgc2VsZi5fYWN0dWFsX2NvbnRleHQgPSBOb25lCisKKyAgICBkZWYgZ2V0X2NvbnRleHQoc2VsZiwgbWV0aG9kPU5vbmUpOgorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHNlbGYuX2FjdHVhbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5fYWN0dWFsX2NvbnRleHQgPSBzZWxmLl9kZWZhdWx0X2NvbnRleHQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9hY3R1YWxfY29udGV4dAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2NvbnRleHQobWV0aG9kKQorCisgICAgZGVmIHNldF9zdGFydF9tZXRob2Qoc2VsZiwgbWV0aG9kLCBmb3JjZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuX2FjdHVhbF9jb250ZXh0IGlzIG5vdCBOb25lIGFuZCBub3QgZm9yY2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2NvbnRleHQgaGFzIGFscmVhZHkgYmVlbiBzZXQnKQorICAgICAgICBpZiBtZXRob2QgaXMgTm9uZSBhbmQgZm9yY2U6CisgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IE5vbmUKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuZ2V0X2NvbnRleHQobWV0aG9kKQorCisgICAgZGVmIGdldF9zdGFydF9tZXRob2Qoc2VsZiwgYWxsb3dfbm9uZT1GYWxzZSk6CisgICAgICAgIGlmIHNlbGYuX2FjdHVhbF9jb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICBpZiBhbGxvd19ub25lOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICBzZWxmLl9hY3R1YWxfY29udGV4dCA9IHNlbGYuX2RlZmF1bHRfY29udGV4dAorICAgICAgICByZXR1cm4gc2VsZi5fYWN0dWFsX2NvbnRleHQuX25hbWUKKworICAgIGRlZiBnZXRfYWxsX3N0YXJ0X21ldGhvZHMoc2VsZik6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgICAgICAgICAgcmV0dXJuIFsnc3Bhd24nXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KKyAgICAgICAgICAgIGlmIHJlZHVjdGlvbi5IQVZFX1NFTkRfSEFORExFOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlciddCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ2ZvcmsnLCAnc3Bhd24nXQorCitEZWZhdWx0Q29udGV4dC5fX2FsbF9fID0gbGlzdCh4IGZvciB4IGluIGRpcihEZWZhdWx0Q29udGV4dCkgaWYgeFswXSAhPSAnXycpCisKKyMKKyMgQ29udGV4dCB0eXBlcyBmb3IgZml4ZWQgc3RhcnQgbWV0aG9kCisjCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorCisgICAgY2xhc3MgRm9ya1Byb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnZm9yaycKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgX1BvcGVuKHByb2Nlc3Nfb2JqKToKKyAgICAgICAgICAgIGZyb20gLnBvcGVuX2ZvcmsgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBTcGF3blByb2Nlc3MocHJvY2Vzcy5CYXNlUHJvY2Vzcyk6CisgICAgICAgIF9zdGFydF9tZXRob2QgPSAnc3Bhd24nCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9zcGF3bl9wb3NpeCBpbXBvcnQgUG9wZW4KKyAgICAgICAgICAgIHJldHVybiBQb3Blbihwcm9jZXNzX29iaikKKworICAgIGNsYXNzIEZvcmtTZXJ2ZXJQcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgICAgICBfc3RhcnRfbWV0aG9kID0gJ2ZvcmtzZXJ2ZXInCisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIF9Qb3Blbihwcm9jZXNzX29iaik6CisgICAgICAgICAgICBmcm9tIC5wb3Blbl9mb3Jrc2VydmVyIGltcG9ydCBQb3BlbgorICAgICAgICAgICAgcmV0dXJuIFBvcGVuKHByb2Nlc3Nfb2JqKQorCisgICAgY2xhc3MgRm9ya0NvbnRleHQoQmFzZUNvbnRleHQpOgorICAgICAgICBfbmFtZSA9ICdmb3JrJworICAgICAgICBQcm9jZXNzID0gRm9ya1Byb2Nlc3MKKworICAgIGNsYXNzIFNwYXduQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ3NwYXduJworICAgICAgICBQcm9jZXNzID0gU3Bhd25Qcm9jZXNzCisKKyAgICBjbGFzcyBGb3JrU2VydmVyQ29udGV4dChCYXNlQ29udGV4dCk6CisgICAgICAgIF9uYW1lID0gJ2ZvcmtzZXJ2ZXInCisgICAgICAgIFByb2Nlc3MgPSBGb3JrU2VydmVyUHJvY2VzcworICAgICAgICBkZWYgX2NoZWNrX2F2YWlsYWJsZShzZWxmKToKKyAgICAgICAgICAgIGZyb20gLiBpbXBvcnQgcmVkdWN0aW9uCisgICAgICAgICAgICBpZiBub3QgcmVkdWN0aW9uLkhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZm9ya3NlcnZlciBzdGFydCBtZXRob2Qgbm90IGF2YWlsYWJsZScpCisKKyAgICBfY29uY3JldGVfY29udGV4dHMgPSB7CisgICAgICAgICdmb3JrJzogRm9ya0NvbnRleHQoKSwKKyAgICAgICAgJ3NwYXduJzogU3Bhd25Db250ZXh0KCksCisgICAgICAgICdmb3Jrc2VydmVyJzogRm9ya1NlcnZlckNvbnRleHQoKSwKKyAgICB9CisgICAgX2RlZmF1bHRfY29udGV4dCA9IERlZmF1bHRDb250ZXh0KF9jb25jcmV0ZV9jb250ZXh0c1snZm9yayddKQorCitlbHNlOgorCisgICAgY2xhc3MgU3Bhd25Qcm9jZXNzKHByb2Nlc3MuQmFzZVByb2Nlc3MpOgorICAgICAgICBfc3RhcnRfbWV0aG9kID0gJ3NwYXduJworICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgIGRlZiBfUG9wZW4ocHJvY2Vzc19vYmopOgorICAgICAgICAgICAgZnJvbSAucG9wZW5fc3Bhd25fd2luMzIgaW1wb3J0IFBvcGVuCisgICAgICAgICAgICByZXR1cm4gUG9wZW4ocHJvY2Vzc19vYmopCisKKyAgICBjbGFzcyBTcGF3bkNvbnRleHQoQmFzZUNvbnRleHQpOgorICAgICAgICBfbmFtZSA9ICdzcGF3bicKKyAgICAgICAgUHJvY2VzcyA9IFNwYXduUHJvY2VzcworCisgICAgX2NvbmNyZXRlX2NvbnRleHRzID0geworICAgICAgICAnc3Bhd24nOiBTcGF3bkNvbnRleHQoKSwKKyAgICB9CisgICAgX2RlZmF1bHRfY29udGV4dCA9IERlZmF1bHRDb250ZXh0KF9jb25jcmV0ZV9jb250ZXh0c1snc3Bhd24nXSkKKworIworIyBGb3JjZSB0aGUgc3RhcnQgbWV0aG9kCisjCisKK2RlZiBfZm9yY2Vfc3RhcnRfbWV0aG9kKG1ldGhvZCk6CisgICAgX2RlZmF1bHRfY29udGV4dC5fYWN0dWFsX2NvbnRleHQgPSBfY29uY3JldGVfY29udGV4dHNbbWV0aG9kXQorCisjCisjIENoZWNrIHRoYXQgdGhlIGN1cnJlbnQgdGhyZWFkIGlzIHNwYXduaW5nIGEgY2hpbGQgcHJvY2VzcworIworCitfdGxzID0gdGhyZWFkaW5nLmxvY2FsKCkKKworZGVmIGdldF9zcGF3bmluZ19wb3BlbigpOgorICAgIHJldHVybiBnZXRhdHRyKF90bHMsICdzcGF3bmluZ19wb3BlbicsIE5vbmUpCisKK2RlZiBzZXRfc3Bhd25pbmdfcG9wZW4ocG9wZW4pOgorICAgIF90bHMuc3Bhd25pbmdfcG9wZW4gPSBwb3BlbgorCitkZWYgYXNzZXJ0X3NwYXduaW5nKG9iaik6CisgICAgaWYgZ2V0X3NwYXduaW5nX3BvcGVuKCkgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAorICAgICAgICAgICAgJyVzIG9iamVjdHMgc2hvdWxkIG9ubHkgYmUgc2hhcmVkIGJldHdlZW4gcHJvY2Vzc2VzJworICAgICAgICAgICAgJyB0aHJvdWdoIGluaGVyaXRhbmNlJyAlIHR5cGUob2JqKS5fX25hbWVfXworICAgICAgICAgICAgKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvX19pbml0X18ucHkKaW5kZXggZTMxZmM2MS4uMTM1ZGI3ZiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9fX2luaXRfXy5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CkBAIC00LDMyICs0LDcgQEAKICMgbXVsdGlwcm9jZXNzaW5nL2R1bW15L19faW5pdF9fLnB5CiAjCiAjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIwotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBhdXRob3Igbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heSBiZQotIyAgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0jIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0jIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0jIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSMgU1VDSCBEQU1BR0UuCisjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAogX19hbGxfXyA9IFsKQEAgLTQ3LDcgKzIyLDcgQEAKIGltcG9ydCB3ZWFrcmVmCiBpbXBvcnQgYXJyYXkKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZHVtbXkuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQorZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgUGlwZQogZnJvbSB0aHJlYWRpbmcgaW1wb3J0IExvY2ssIFJMb2NrLCBTZW1hcGhvcmUsIEJvdW5kZWRTZW1hcGhvcmUKIGZyb20gdGhyZWFkaW5nIGltcG9ydCBFdmVudCwgQ29uZGl0aW9uLCBCYXJyaWVyCiBmcm9tIHF1ZXVlIGltcG9ydCBRdWV1ZQpAQCAtMTI5LDcgKzEwNCw3IEBACiAgICAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWUKICAgICB2YWx1ZSA9IHByb3BlcnR5KF9nZXQsIF9zZXQpCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gJzwlciglciwgJXIpPiclKHR5cGUoc2VsZikuX19uYW1lX18sc2VsZi5fdHlwZWNvZGUsc2VsZi5fdmFsdWUpCisgICAgICAgIHJldHVybiAnPCVzKCVyLCAlcik+JyUodHlwZShzZWxmKS5fX25hbWVfXyxzZWxmLl90eXBlY29kZSxzZWxmLl92YWx1ZSkKIAogZGVmIE1hbmFnZXIoKToKICAgICByZXR1cm4gc3lzLm1vZHVsZXNbX19uYW1lX19dCkBAIC0xMzgsNyArMTEzLDcgQEAKICAgICBwYXNzCiAKIGRlZiBQb29sKHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6Ci0gICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcucG9vbCBpbXBvcnQgVGhyZWFkUG9vbAorICAgIGZyb20gLi5wb29sIGltcG9ydCBUaHJlYWRQb29sCiAgICAgcmV0dXJuIFRocmVhZFBvb2wocHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpCiAKIEpvaW5hYmxlUXVldWUgPSBRdWV1ZQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9kdW1teS9jb25uZWN0aW9uLnB5CmluZGV4IDg3NGVjOGUuLjY5NGVmOTYgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL2R1bW15L2Nvbm5lY3Rpb24ucHkKQEAgLTQsMzIgKzQsNyBAQAogIyBtdWx0aXByb2Nlc3NpbmcvZHVtbXkvY29ubmVjdGlvbi5weQogIwogIyBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCwgUiBPdWRrZXJrCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUKLSMgICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0jIFNVQ0ggREFNQUdFLgorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKIF9fYWxsX18gPSBbICdDbGllbnQnLCAnTGlzdGVuZXInLCAnUGlwZScgXQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDk5NzhhLi4wMDAwMDAwCi0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya2luZy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ3NCArMCwwIEBACi0jCi0jIE1vZHVsZSBmb3Igc3RhcnRpbmcgYSBwcm9jZXNzIG9iamVjdCB1c2luZyBvcy5mb3JrKCkgb3IgQ3JlYXRlUHJvY2VzcygpCi0jCi0jIG11bHRpcHJvY2Vzc2luZy9mb3JraW5nLnB5Ci0jCi0jIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKLSMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIwotCi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzaWduYWwKLWltcG9ydCBlcnJubwotCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgdXRpbCwgcHJvY2VzcwotCi1fX2FsbF9fID0gWydQb3BlbicsICdhc3NlcnRfc3Bhd25pbmcnLCAnZHVwbGljYXRlJywgJ2Nsb3NlJywgJ0ZvcmtpbmdQaWNrbGVyJ10KLQotIwotIyBDaGVjayB0aGF0IHRoZSBjdXJyZW50IHRocmVhZCBpcyBzcGF3bmluZyBhIGNoaWxkIHByb2Nlc3MKLSMKLQotZGVmIGFzc2VydF9zcGF3bmluZyhzZWxmKToKLSAgICBpZiBub3QgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICclcyBvYmplY3RzIHNob3VsZCBvbmx5IGJlIHNoYXJlZCBiZXR3ZWVuIHByb2Nlc3NlcycKLSAgICAgICAgICAgICcgdGhyb3VnaCBpbmhlcml0YW5jZScgJSB0eXBlKHNlbGYpLl9fbmFtZV9fCi0gICAgICAgICAgICApCi0KLSMKLSMgVHJ5IG1ha2luZyBzb21lIGNhbGxhYmxlIHR5cGVzIHBpY2tsYWJsZQotIwotCi1mcm9tIHBpY2tsZSBpbXBvcnQgUGlja2xlcgotZnJvbSBjb3B5cmVnIGltcG9ydCBkaXNwYXRjaF90YWJsZQotCi1jbGFzcyBGb3JraW5nUGlja2xlcihQaWNrbGVyKToKLSAgICBfZXh0cmFfcmVkdWNlcnMgPSB7fQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIFBpY2tsZXIuX19pbml0X18oc2VsZiwgKmFyZ3MpCi0gICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBkaXNwYXRjaF90YWJsZS5jb3B5KCkKLSAgICAgICAgc2VsZi5kaXNwYXRjaF90YWJsZS51cGRhdGUoc2VsZi5fZXh0cmFfcmVkdWNlcnMpCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHJlZ2lzdGVyKGNscywgdHlwZSwgcmVkdWNlKToKLSAgICAgICAgY2xzLl9leHRyYV9yZWR1Y2Vyc1t0eXBlXSA9IHJlZHVjZQotCi1kZWYgX3JlZHVjZV9tZXRob2QobSk6Ci0gICAgaWYgbS5fX3NlbGZfXyBpcyBOb25lOgotICAgICAgICByZXR1cm4gZ2V0YXR0ciwgKG0uX19jbGFzc19fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX3NlbGZfXywgbS5fX2Z1bmNfXy5fX25hbWVfXykKLWNsYXNzIF9DOgotICAgIGRlZiBmKHNlbGYpOgotICAgICAgICBwYXNzCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKF9DKCkuZiksIF9yZWR1Y2VfbWV0aG9kKQotCi0KLWRlZiBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKG0pOgotICAgIHJldHVybiBnZXRhdHRyLCAobS5fX29iamNsYXNzX18sIG0uX19uYW1lX18pCi1Gb3JraW5nUGlja2xlci5yZWdpc3Rlcih0eXBlKGxpc3QuYXBwZW5kKSwgX3JlZHVjZV9tZXRob2RfZGVzY3JpcHRvcikKLUZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHR5cGUoaW50Ll9fYWRkX18pLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQotCi10cnk6Ci0gICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1lbHNlOgotICAgIGRlZiBfcmVkdWNlX3BhcnRpYWwocCk6Ci0gICAgICAgIHJldHVybiBfcmVidWlsZF9wYXJ0aWFsLCAocC5mdW5jLCBwLmFyZ3MsIHAua2V5d29yZHMgb3Ige30pCi0gICAgZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgotICAgICAgICByZXR1cm4gcGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKLSAgICBGb3JraW5nUGlja2xlci5yZWdpc3RlcihwYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCi0KLSMKLSMgVW5peAotIwotCi1pZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKLSAgICBkdXBsaWNhdGUgPSBvcy5kdXAKLSAgICBjbG9zZSA9IG9zLmNsb3NlCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCi0gICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0KLSAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKLSAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSByCi0KLSAgICAgICAgICAgIHNlbGYucGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICBpZiBzZWxmLnBpZCA9PSAwOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCi0gICAgICAgICAgICAgICAgaWYgJ3JhbmRvbScgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCByYW5kb20KLSAgICAgICAgICAgICAgICAgICAgcmFuZG9tLnNlZWQoKQotICAgICAgICAgICAgICAgIGNvZGUgPSBwcm9jZXNzX29iai5fYm9vdHN0cmFwKCkKLSAgICAgICAgICAgICAgICBvcy5fZXhpdChjb2RlKQotCi0gICAgICAgICAgICAjIGB3YCB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZSBjaGlsZCBleGl0cywgYXQgd2hpY2ggcG9pbnQgYHJgCi0gICAgICAgICAgICAjIHdpbGwgYmVjb21lIHJlYWR5IGZvciByZWFkaW5nICh1c2luZyBlLmcuIHNlbGVjdCgpKS4KLSAgICAgICAgICAgIG9zLmNsb3NlKHcpCi0gICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAociwpKQotCi0gICAgICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICAgICAgIyBDaGlsZCBwcm9jZXNzIG5vdCB5ZXQgY3JlYXRlZC4gU2VlICMxNzMxNzE3Ci0gICAgICAgICAgICAgICAgICAgICAgICAjIGUuZXJybm8gPT0gZXJybm8uRUNISUxEID09IDEwCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiBwaWQgPT0gc2VsZi5waWQ6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9zLldJRlNJR05BTEVEKHN0cyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RzKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IG9zLldJRkVYSVRFRChzdHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdHMpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHdhaXQoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24gaW1wb3J0IHdhaXQKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICAgICAgIyBUaGlzIHNob3VsZG4ndCBibG9jayBpZiB3YWl0KCkgcmV0dXJuZWQgc3VjY2Vzc2Z1bGx5LgotICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBvbGwob3MuV05PSEFORyBpZiB0aW1lb3V0ID09IDAuMCBlbHNlIDApCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCi0KLSAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnbmFsLlNJR1RFUk0pCi0gICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTAuMSkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gRmFsc2UKLQotIwotIyBXaW5kb3dzCi0jCi0KLWVsc2U6Ci0gICAgaW1wb3J0IF90aHJlYWQKLSAgICBpbXBvcnQgbXN2Y3J0Ci0gICAgaW1wb3J0IF93aW5hcGkKLQotICAgIGZyb20gcGlja2xlIGltcG9ydCBsb2FkLCBISUdIRVNUX1BST1RPQ09MCi0KLSAgICBkZWYgZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUpOgotICAgICAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCi0KLSAgICAjCi0gICAgIwotICAgICMKLQotICAgIFRFUk1JTkFURSA9IDB4MTAwMDAKLSAgICBXSU5FWEUgPSAoc3lzLnBsYXRmb3JtID09ICd3aW4zMicgYW5kIGdldGF0dHIoc3lzLCAnZnJvemVuJywgRmFsc2UpKQotICAgIFdJTlNFUlZJQ0UgPSBzeXMuZXhlY3V0YWJsZS5sb3dlcigpLmVuZHN3aXRoKCJweXRob25zZXJ2aWNlLmV4ZSIpCi0KLSAgICBjbG9zZSA9IF93aW5hcGkuQ2xvc2VIYW5kbGUKLQotICAgICMKLSAgICAjIF9weXRob25fZXhlIGlzIHRoZSBhc3N1bWVkIHBhdGggdG8gdGhlIHB5dGhvbiBleGVjdXRhYmxlLgotICAgICMgUGVvcGxlIGVtYmVkZGluZyBQeXRob24gd2FudCB0byBtb2RpZnkgaXQuCi0gICAgIwotCi0gICAgaWYgV0lOU0VSVklDRToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBvcy5wYXRoLmpvaW4oc3lzLmV4ZWNfcHJlZml4LCAncHl0aG9uLmV4ZScpCi0gICAgZWxzZToKLSAgICAgICAgX3B5dGhvbl9leGUgPSBzeXMuZXhlY3V0YWJsZQotCi0gICAgZGVmIHNldF9leGVjdXRhYmxlKGV4ZSk6Ci0gICAgICAgIGdsb2JhbCBfcHl0aG9uX2V4ZQotICAgICAgICBfcHl0aG9uX2V4ZSA9IGV4ZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgZHVwbGljYXRlKGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3M9Tm9uZSwgaW5oZXJpdGFibGU9RmFsc2UpOgotICAgICAgICBpZiB0YXJnZXRfcHJvY2VzcyBpcyBOb25lOgotICAgICAgICAgICAgdGFyZ2V0X3Byb2Nlc3MgPSBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCkKLSAgICAgICAgcmV0dXJuIF93aW5hcGkuRHVwbGljYXRlSGFuZGxlKAotICAgICAgICAgICAgX3dpbmFwaS5HZXRDdXJyZW50UHJvY2VzcygpLCBoYW5kbGUsIHRhcmdldF9wcm9jZXNzLAotICAgICAgICAgICAgMCwgaW5oZXJpdGFibGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTCi0gICAgICAgICAgICApCi0KLSAgICAjCi0gICAgIyBXZSBkZWZpbmUgYSBQb3BlbiBjbGFzcyBzaW1pbGFyIHRvIHRoZSBvbmUgZnJvbSBzdWJwcm9jZXNzLCBidXQKLSAgICAjIHdob3NlIGNvbnN0cnVjdG9yIHRha2VzIGEgcHJvY2VzcyBvYmplY3QgYXMgaXRzIGFyZ3VtZW50LgotICAgICMKLQotICAgIGNsYXNzIFBvcGVuKG9iamVjdCk6Ci0gICAgICAgICcnJwotICAgICAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZSBjb2RlIG9mIGEgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIF90bHMgPSBfdGhyZWFkLl9sb2NhbCgpCi0KLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKLSAgICAgICAgICAgIGNtZCA9ICcgJy5qb2luKCciJXMiJyAlIHggZm9yIHggaW4gZ2V0X2NvbW1hbmRfbGluZSgpKQotICAgICAgICAgICAgcHJlcF9kYXRhID0gZ2V0X3ByZXBhcmF0aW9uX2RhdGEocHJvY2Vzc19vYmouX25hbWUpCi0KLSAgICAgICAgICAgICMgY3JlYXRlIHBpcGUgZm9yIGNvbW11bmljYXRpb24gd2l0aCBjaGlsZAotICAgICAgICAgICAgcmZkLCB3ZmQgPSBvcy5waXBlKCkKLQotICAgICAgICAgICAgIyBnZXQgaGFuZGxlIGZvciByZWFkIGVuZCBvZiB0aGUgcGlwZSBhbmQgbWFrZSBpdCBpbmhlcml0YWJsZQotICAgICAgICAgICAgcmhhbmRsZSA9IGR1cGxpY2F0ZShtc3ZjcnQuZ2V0X29zZmhhbmRsZShyZmQpLCBpbmhlcml0YWJsZT1UcnVlKQotICAgICAgICAgICAgb3MuY2xvc2UocmZkKQotCi0gICAgICAgICAgICB3aXRoIG9wZW4od2ZkLCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIHRvX2NoaWxkOgotICAgICAgICAgICAgICAgICMgc3RhcnQgcHJvY2VzcwotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaHAsIGh0LCBwaWQsIHRpZCA9IF93aW5hcGkuQ3JlYXRlUHJvY2VzcygKLSAgICAgICAgICAgICAgICAgICAgICAgIF9weXRob25fZXhlLCBjbWQgKyAoJyAlcycgJSByaGFuZGxlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIDEsIDAsIE5vbmUsIE5vbmUsIE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShodCkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBjbG9zZShyaGFuZGxlKQotCi0gICAgICAgICAgICAgICAgIyBzZXQgYXR0cmlidXRlcyBvZiBzZWxmCi0gICAgICAgICAgICAgICAgc2VsZi5waWQgPSBwaWQKLSAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCi0gICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlID0gaHAKLSAgICAgICAgICAgICAgICBzZWxmLnNlbnRpbmVsID0gaW50KGhwKQotICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgX3dpbmFwaS5DbG9zZUhhbmRsZSwgKHNlbGYuc2VudGluZWwsKSkKLQotICAgICAgICAgICAgICAgICMgc2VuZCBpbmZvcm1hdGlvbiB0byBjaGlsZAotICAgICAgICAgICAgICAgIFBvcGVuLl90bHMucHJvY2Vzc19oYW5kbGUgPSBpbnQoaHApCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBkdW1wKHByZXBfZGF0YSwgdG9fY2hpbGQsIEhJR0hFU1RfUFJPVE9DT0wpCi0gICAgICAgICAgICAgICAgICAgIGR1bXAocHJvY2Vzc19vYmosIHRvX2NoaWxkLCBISUdIRVNUX1BST1RPQ09MKQotICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgIGRlbCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlCi0KLSAgICAgICAgQHN0YXRpY21ldGhvZAotICAgICAgICBkZWYgdGhyZWFkX2lzX3NwYXduaW5nKCk6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihQb3Blbi5fdGxzLCAncHJvY2Vzc19oYW5kbGUnLCBOb25lKSBpcyBub3QgTm9uZQotCi0gICAgICAgIEBzdGF0aWNtZXRob2QKLSAgICAgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoaGFuZGxlKToKLSAgICAgICAgICAgIHJldHVybiBkdXBsaWNhdGUoaGFuZGxlLCBQb3Blbi5fdGxzLnByb2Nlc3NfaGFuZGxlKQotCi0gICAgICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gX3dpbmFwaS5JTkZJTklURQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIG1zZWNzID0gbWF4KDAsIGludCh0aW1lb3V0ICogMTAwMCArIDAuNSkpCi0KLSAgICAgICAgICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JTaW5nbGVPYmplY3QoaW50KHNlbGYuX2hhbmRsZSksIG1zZWNzKQotICAgICAgICAgICAgICAgIGlmIHJlcyA9PSBfd2luYXBpLldBSVRfT0JKRUNUXzA6Ci0gICAgICAgICAgICAgICAgICAgIGNvZGUgPSBfd2luYXBpLkdldEV4aXRDb2RlUHJvY2VzcyhzZWxmLl9oYW5kbGUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGNvZGUgPT0gVEVSTUlOQVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IC1zaWduYWwuU0lHVEVSTQotICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBjb2RlCi0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKLQotICAgICAgICBkZWYgcG9sbChzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLndhaXQodGltZW91dD0wKQotCi0gICAgICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIF93aW5hcGkuVGVybWluYXRlUHJvY2VzcyhpbnQoc2VsZi5faGFuZGxlKSwgVEVSTUlOQVRFKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0xLjApIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotCi0gICAgIwotICAgICMKLSAgICAjCi0KLSAgICBkZWYgaXNfZm9ya2luZyhhcmd2KToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiB3aGV0aGVyIGNvbW1hbmRsaW5lIGluZGljYXRlcyB3ZSBhcmUgZm9ya2luZwotICAgICAgICAnJycKLSAgICAgICAgaWYgbGVuKGFyZ3YpID49IDIgYW5kIGFyZ3ZbMV0gPT0gJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnOgotICAgICAgICAgICAgYXNzZXJ0IGxlbihhcmd2KSA9PSAzCi0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0KLQotICAgIGRlZiBmcmVlemVfc3VwcG9ydCgpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgZm9yIHByb2Nlc3Mgb2JqZWN0IGlmIHRoaXMgaW4gbm90IHRoZSBtYWluIHByb2Nlc3MKLSAgICAgICAgJycnCi0gICAgICAgIGlmIGlzX2Zvcmtpbmcoc3lzLmFyZ3YpOgotICAgICAgICAgICAgbWFpbigpCi0gICAgICAgICAgICBzeXMuZXhpdCgpCi0KLQotICAgIGRlZiBnZXRfY29tbWFuZF9saW5lKCk6Ci0gICAgICAgICcnJwotICAgICAgICBSZXR1cm5zIHByZWZpeCBvZiBjb21tYW5kIGxpbmUgdXNlZCBmb3Igc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCi0gICAgICAgICcnJwotICAgICAgICBpZiBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKToKLSAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJycKLSAgICAgICAgICAgIEF0dGVtcHQgdG8gc3RhcnQgYSBuZXcgcHJvY2VzcyBiZWZvcmUgdGhlIGN1cnJlbnQgcHJvY2VzcwotICAgICAgICAgICAgaGFzIGZpbmlzaGVkIGl0cyBib290c3RyYXBwaW5nIHBoYXNlLgotCi0gICAgICAgICAgICBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgeW91IGFyZSBvbiBXaW5kb3dzIGFuZCB5b3UgaGF2ZQotICAgICAgICAgICAgZm9yZ290dGVuIHRvIHVzZSB0aGUgcHJvcGVyIGlkaW9tIGluIHRoZSBtYWluIG1vZHVsZToKLQotICAgICAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKLSAgICAgICAgICAgICAgICAgICAgLi4uCi0KLSAgICAgICAgICAgIFRoZSAiZnJlZXplX3N1cHBvcnQoKSIgbGluZSBjYW4gYmUgb21pdHRlZCBpZiB0aGUgcHJvZ3JhbQotICAgICAgICAgICAgaXMgbm90IGdvaW5nIHRvIGJlIGZyb3plbiB0byBwcm9kdWNlIGEgV2luZG93cyBleGVjdXRhYmxlLicnJykKLQotICAgICAgICBpZiBnZXRhdHRyKHN5cywgJ2Zyb3plbicsIEZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBbc3lzLmV4ZWN1dGFibGUsICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByb2cgPSAnZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgbWFpbjsgbWFpbigpJwotICAgICAgICAgICAgb3B0cyA9IHV0aWwuX2FyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpCi0gICAgICAgICAgICByZXR1cm4gW19weXRob25fZXhlXSArIG9wdHMgKyBbJy1jJywgcHJvZywgJy0tbXVsdGlwcm9jZXNzaW5nLWZvcmsnXQotCi0KLSAgICBkZWYgbWFpbigpOgotICAgICAgICAnJycKLSAgICAgICAgUnVuIGNvZGUgc3BlY2lmaWVkIGJ5IGRhdGEgcmVjZWl2ZWQgb3ZlciBwaXBlCi0gICAgICAgICcnJwotICAgICAgICBhc3NlcnQgaXNfZm9ya2luZyhzeXMuYXJndikKLQotICAgICAgICBoYW5kbGUgPSBpbnQoc3lzLmFyZ3ZbLTFdKQotICAgICAgICBmZCA9IG1zdmNydC5vcGVuX29zZmhhbmRsZShoYW5kbGUsIG9zLk9fUkRPTkxZKQotICAgICAgICBmcm9tX3BhcmVudCA9IG9zLmZkb3BlbihmZCwgJ3JiJykKLQotICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gVHJ1ZQotICAgICAgICBwcmVwYXJhdGlvbl9kYXRhID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJlcGFyZShwcmVwYXJhdGlvbl9kYXRhKQotICAgICAgICBzZWxmID0gbG9hZChmcm9tX3BhcmVudCkKLSAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZyA9IEZhbHNlCi0KLSAgICAgICAgZnJvbV9wYXJlbnQuY2xvc2UoKQotCi0gICAgICAgIGV4aXRjb2RlID0gc2VsZi5fYm9vdHN0cmFwKCkKLSAgICAgICAgc3lzLmV4aXQoZXhpdGNvZGUpCi0KLQotICAgIGRlZiBnZXRfcHJlcGFyYXRpb25fZGF0YShuYW1lKToKLSAgICAgICAgJycnCi0gICAgICAgIFJldHVybiBpbmZvIGFib3V0IHBhcmVudCBuZWVkZWQgYnkgY2hpbGQgdG8gdW5waWNrbGUgcHJvY2VzcyBvYmplY3QKLSAgICAgICAgJycnCi0gICAgICAgIGZyb20gLnV0aWwgaW1wb3J0IF9sb2dnZXIsIF9sb2dfdG9fc3RkZXJyCi0KLSAgICAgICAgZCA9IGRpY3QoCi0gICAgICAgICAgICBuYW1lPW5hbWUsCi0gICAgICAgICAgICBzeXNfcGF0aD1zeXMucGF0aCwKLSAgICAgICAgICAgIHN5c19hcmd2PXN5cy5hcmd2LAotICAgICAgICAgICAgbG9nX3RvX3N0ZGVycj1fbG9nX3RvX3N0ZGVyciwKLSAgICAgICAgICAgIG9yaWdfZGlyPXByb2Nlc3MuT1JJR0lOQUxfRElSLAotICAgICAgICAgICAgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXksCi0gICAgICAgICAgICApCi0KLSAgICAgICAgaWYgX2xvZ2dlciBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGRbJ2xvZ19sZXZlbCddID0gX2xvZ2dlci5nZXRFZmZlY3RpdmVMZXZlbCgpCi0KLSAgICAgICAgaWYgbm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0U6Ci0gICAgICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKHN5cy5tb2R1bGVzWydfX21haW5fXyddLCAnX19maWxlX18nLCBOb25lKQotICAgICAgICAgICAgaWYgbm90IG1haW5fcGF0aCBhbmQgc3lzLmFyZ3ZbMF0gbm90IGluICgnJywgJy1jJyk6Ci0gICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gc3lzLmFyZ3ZbMF0KLSAgICAgICAgICAgIGlmIG1haW5fcGF0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhtYWluX3BhdGgpIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgbWFpbl9wYXRoID0gb3MucGF0aC5qb2luKHByb2Nlc3MuT1JJR0lOQUxfRElSLCBtYWluX3BhdGgpCi0gICAgICAgICAgICAgICAgZFsnbWFpbl9wYXRoJ10gPSBvcy5wYXRoLm5vcm1wYXRoKG1haW5fcGF0aCkKLQotICAgICAgICByZXR1cm4gZAotCi0jCi0jIFByZXBhcmUgY3VycmVudCBwcm9jZXNzCi0jCi0KLW9sZF9tYWluX21vZHVsZXMgPSBbXQotCi1kZWYgcHJlcGFyZShkYXRhKToKLSAgICAnJycKLSAgICBUcnkgdG8gZ2V0IGN1cnJlbnQgcHJvY2VzcyByZWFkeSB0byB1bnBpY2tsZSBwcm9jZXNzIG9iamVjdAotICAgICcnJwotICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKHN5cy5tb2R1bGVzWydfX21haW5fXyddKQotCi0gICAgaWYgJ25hbWUnIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZSA9IGRhdGFbJ25hbWUnXQotCi0gICAgaWYgJ2F1dGhrZXknIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2F1dGhrZXkgPSBkYXRhWydhdXRoa2V5J10KLQotICAgIGlmICdsb2dfdG9fc3RkZXJyJyBpbiBkYXRhIGFuZCBkYXRhWydsb2dfdG9fc3RkZXJyJ106Ci0gICAgICAgIHV0aWwubG9nX3RvX3N0ZGVycigpCi0KLSAgICBpZiAnbG9nX2xldmVsJyBpbiBkYXRhOgotICAgICAgICB1dGlsLmdldF9sb2dnZXIoKS5zZXRMZXZlbChkYXRhWydsb2dfbGV2ZWwnXSkKLQotICAgIGlmICdzeXNfcGF0aCcgaW4gZGF0YToKLSAgICAgICAgc3lzLnBhdGggPSBkYXRhWydzeXNfcGF0aCddCi0KLSAgICBpZiAnc3lzX2FyZ3YnIGluIGRhdGE6Ci0gICAgICAgIHN5cy5hcmd2ID0gZGF0YVsnc3lzX2FyZ3YnXQotCi0gICAgaWYgJ2RpcicgaW4gZGF0YToKLSAgICAgICAgb3MuY2hkaXIoZGF0YVsnZGlyJ10pCi0KLSAgICBpZiAnb3JpZ19kaXInIGluIGRhdGE6Ci0gICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSID0gZGF0YVsnb3JpZ19kaXInXQotCi0gICAgaWYgJ21haW5fcGF0aCcgaW4gZGF0YToKLSAgICAgICAgIyBYWFggKG5jb2dobGFuKTogVGhlIGZvbGxvd2luZyBjb2RlIG1ha2VzIHNldmVyYWwgYm9ndXMKLSAgICAgICAgIyBhc3N1bXB0aW9ucyByZWdhcmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIF9fZmlsZV9fCi0gICAgICAgICMgYW5kIGEgbW9kdWxlJ3MgcmVhbCBuYW1lLiBTZWUgUEVQIDMwMiBhbmQgaXNzdWUgIzEwODQ1Ci0gICAgICAgIG1haW5fcGF0aCA9IGRhdGFbJ21haW5fcGF0aCddCi0gICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShtYWluX3BhdGgpKVswXQotICAgICAgICBpZiBtYWluX25hbWUgPT0gJ19faW5pdF9fJzoKLSAgICAgICAgICAgIG1haW5fbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUob3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCkpCi0KLSAgICAgICAgaWYgbWFpbl9uYW1lID09ICdfX21haW5fXyc6Ci0gICAgICAgICAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCi0gICAgICAgICAgICBtYWluX21vZHVsZS5fX2ZpbGVfXyA9IG1haW5fcGF0aAotICAgICAgICBlbGlmIG1haW5fbmFtZSAhPSAnaXB5dGhvbic6Ci0gICAgICAgICAgICAjIE1haW4gbW9kdWxlcyBub3QgYWN0dWFsbHkgY2FsbGVkIF9fbWFpbl9fLnB5IG1heQotICAgICAgICAgICAgIyBjb250YWluIGFkZGl0aW9uYWwgY29kZSB0aGF0IHNob3VsZCBzdGlsbCBiZSBleGVjdXRlZAotICAgICAgICAgICAgaW1wb3J0IGltcAotCi0gICAgICAgICAgICBpZiBtYWluX3BhdGggaXMgTm9uZToKLSAgICAgICAgICAgICAgICBkaXJzID0gTm9uZQotICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmJhc2VuYW1lKG1haW5fcGF0aCkuc3RhcnRzd2l0aCgnX19pbml0X18ucHknKToKLSAgICAgICAgICAgICAgICBkaXJzID0gW29zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUobWFpbl9wYXRoKSldCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5kaXJuYW1lKG1haW5fcGF0aCldCi0KLSAgICAgICAgICAgIGFzc2VydCBtYWluX25hbWUgbm90IGluIHN5cy5tb2R1bGVzLCBtYWluX25hbWUKLSAgICAgICAgICAgIGZpbGUsIHBhdGhfbmFtZSwgZXRjID0gaW1wLmZpbmRfbW9kdWxlKG1haW5fbmFtZSwgZGlycykKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIFdlIHdvdWxkIGxpa2UgdG8gZG8gImltcC5sb2FkX21vZHVsZSgnX19tYWluX18nLCAuLi4pIgotICAgICAgICAgICAgICAgICMgaGVyZS4gIEhvd2V2ZXIsIHRoYXQgd291bGQgY2F1c2UgJ2lmIF9fbmFtZV9fID09Ci0gICAgICAgICAgICAgICAgIyAiX19tYWluX18iJyBjbGF1c2VzIHRvIGJlIGV4ZWN1dGVkLgotICAgICAgICAgICAgICAgIG1haW5fbW9kdWxlID0gaW1wLmxvYWRfbW9kdWxlKAotICAgICAgICAgICAgICAgICAgICAnX19wYXJlbnRzX21haW5fXycsIGZpbGUsIHBhdGhfbmFtZSwgZXRjCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgaWYgZmlsZToKLSAgICAgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgICAgIHN5cy5tb2R1bGVzWydfX21haW5fXyddID0gbWFpbl9tb2R1bGUKLSAgICAgICAgICAgIG1haW5fbW9kdWxlLl9fbmFtZV9fID0gJ19fbWFpbl9fJwotCi0gICAgICAgICAgICAjIFRyeSB0byBtYWtlIHRoZSBwb3RlbnRpYWxseSBwaWNrbGFibGUgb2JqZWN0cyBpbgotICAgICAgICAgICAgIyBzeXMubW9kdWxlc1snX19tYWluX18nXSByZWFsaXplIHRoZXkgYXJlIGluIHRoZSBtYWluCi0gICAgICAgICAgICAjIG1vZHVsZSAtLSBzb21ld2hhdCB1Z2x5LgotICAgICAgICAgICAgZm9yIG9iaiBpbiBsaXN0KG1haW5fbW9kdWxlLl9fZGljdF9fLnZhbHVlcygpKToKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGlmIG9iai5fX21vZHVsZV9fID09ICdfX3BhcmVudHNfbWFpbl9fJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIG9iai5fX21vZHVsZV9fID0gJ19fbWFpbl9fJwotICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvZm9ya3NlcnZlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODc1MTdlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9mb3Jrc2VydmVyLnB5CkBAIC0wLDAgKzEsMjY3IEBACitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0cnVjdAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgcHJvY2VzcworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgc2VtYXBob3JlX3RyYWNrZXIKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydlbnN1cmVfcnVubmluZycsICdnZXRfaW5oZXJpdGVkX2ZkcycsICdjb25uZWN0X3RvX25ld19wcm9jZXNzJywKKyAgICAgICAgICAgJ3NldF9mb3Jrc2VydmVyX3ByZWxvYWQnXQorCisjCisjCisjCisKK01BWEZEU19UT19TRU5EID0gMjU2CitVTlNJR05FRF9TVFJVQ1QgPSBzdHJ1Y3QuU3RydWN0KCdRJykgICAgICMgbGFyZ2UgZW5vdWdoIGZvciBwaWRfdAorCisjCisjIEZvcmtzZXJ2ZXIgY2xhc3MKKyMKKworY2xhc3MgRm9ya1NlcnZlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9mb3Jrc2VydmVyX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBOb25lCisgICAgICAgIHNlbGYuX2luaGVyaXRlZF9mZHMgPSBOb25lCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyA9IFsnX19tYWluX18nXQorCisgICAgZGVmIHNldF9mb3Jrc2VydmVyX3ByZWxvYWQoc2VsZiwgbW9kdWxlc19uYW1lcyk6CisgICAgICAgICcnJ1NldCBsaXN0IG9mIG1vZHVsZSBuYW1lcyB0byB0cnkgdG8gbG9hZCBpbiBmb3Jrc2VydmVyIHByb2Nlc3MuJycnCisgICAgICAgIGlmIG5vdCBhbGwodHlwZShtb2QpIGlzIHN0ciBmb3IgbW9kIGluIHNlbGYuX3ByZWxvYWRfbW9kdWxlcyk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ21vZHVsZV9uYW1lcyBtdXN0IGJlIGEgbGlzdCBvZiBzdHJpbmdzJykKKyAgICAgICAgc2VsZi5fcHJlbG9hZF9tb2R1bGVzID0gbW9kdWxlc19uYW1lcworCisgICAgZGVmIGdldF9pbmhlcml0ZWRfZmRzKHNlbGYpOgorICAgICAgICAnJydSZXR1cm4gbGlzdCBvZiBmZHMgaW5oZXJpdGVkIGZyb20gcGFyZW50IHByb2Nlc3MuCisKKyAgICAgICAgVGhpcyByZXR1cm5zIE5vbmUgaWYgdGhlIGN1cnJlbnQgcHJvY2VzcyB3YXMgbm90IHN0YXJ0ZWQgYnkgZm9yaworICAgICAgICBzZXJ2ZXIuCisgICAgICAgICcnJworICAgICAgICByZXR1cm4gc2VsZi5faW5oZXJpdGVkX2ZkcworCisgICAgZGVmIGNvbm5lY3RfdG9fbmV3X3Byb2Nlc3Moc2VsZiwgZmRzKToKKyAgICAgICAgJycnUmVxdWVzdCBmb3Jrc2VydmVyIHRvIGNyZWF0ZSBhIGNoaWxkIHByb2Nlc3MuCisKKyAgICAgICAgUmV0dXJucyBhIHBhaXIgb2YgZmRzIChzdGF0dXNfciwgZGF0YV93KS4gIFRoZSBjYWxsaW5nIHByb2Nlc3MgY2FuIHJlYWQKKyAgICAgICAgdGhlIGNoaWxkIHByb2Nlc3MncyBwaWQgYW5kIChldmVudHVhbGx5KSBpdHMgcmV0dXJuY29kZSBmcm9tIHN0YXR1c19yLgorICAgICAgICBUaGUgY2FsbGluZyBwcm9jZXNzIHNob3VsZCB3cml0ZSB0byBkYXRhX3cgdGhlIHBpY2tsZWQgcHJlcGFyYXRpb24gYW5kCisgICAgICAgIHByb2Nlc3MgZGF0YS4KKyAgICAgICAgJycnCisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBpZiBsZW4oZmRzKSArIDQgPj0gTUFYRkRTX1RPX1NFTkQ6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd0b28gbWFueSBmZHMnKQorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX1VOSVgpIGFzIGNsaWVudDoKKyAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KHNlbGYuX2ZvcmtzZXJ2ZXJfYWRkcmVzcykKKyAgICAgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBjaGlsZF9yLCBwYXJlbnRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgYWxsZmRzID0gW2NoaWxkX3IsIGNoaWxkX3csIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQsCisgICAgICAgICAgICAgICAgICAgICAgc2VtYXBob3JlX3RyYWNrZXIuZ2V0ZmQoKV0KKyAgICAgICAgICAgIGFsbGZkcyArPSBmZHMKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZWR1Y3Rpb24uc2VuZGZkcyhjbGllbnQsIGFsbGZkcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcGFyZW50X3IsIHBhcmVudF93CisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3IpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3cpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoY2hpbGRfcikKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShjaGlsZF93KQorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBhIGZvcmsgc2VydmVyIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55IHByb2Nlc3MuICBOb3RlIHRoYXQgdXN1YWxseSBhIGNoaWxkCisgICAgICAgIHByb2Nlc3Mgd2lsbCBqdXN0IHJldXNlIHRoZSBmb3Jrc2VydmVyIHN0YXJ0ZWQgYnkgaXRzIHBhcmVudCwgc28KKyAgICAgICAgZW5zdXJlX3J1bm5pbmcoKSB3aWxsIGRvIG5vdGhpbmcuCisgICAgICAgICcnJworICAgICAgICB3aXRoIHNlbGYuX2xvY2s6CisgICAgICAgICAgICBzZW1hcGhvcmVfdHJhY2tlci5lbnN1cmVfcnVubmluZygpCisgICAgICAgICAgICBpZiBzZWxmLl9mb3Jrc2VydmVyX2FsaXZlX2ZkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICAgICBjbWQgPSAoJ2Zyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtzZXJ2ZXIgaW1wb3J0IG1haW47ICcgKworICAgICAgICAgICAgICAgICAgICdtYWluKCVkLCAlZCwgJXIsICoqJXIpJykKKworICAgICAgICAgICAgaWYgc2VsZi5fcHJlbG9hZF9tb2R1bGVzOgorICAgICAgICAgICAgICAgIGRlc2lyZWRfa2V5cyA9IHsnbWFpbl9wYXRoJywgJ3N5c19wYXRoJ30KKyAgICAgICAgICAgICAgICBkYXRhID0gc3Bhd24uZ2V0X3ByZXBhcmF0aW9uX2RhdGEoJ2lnbm9yZScpCisgICAgICAgICAgICAgICAgZGF0YSA9IGRpY3QoKHgseSkgZm9yICh4LHkpIGluIGRhdGEuaXRlbXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHggaW4gZGVzaXJlZF9rZXlzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBkYXRhID0ge30KKworICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYKSBhcyBsaXN0ZW5lcjoKKyAgICAgICAgICAgICAgICBhZGRyZXNzID0gY29ubmVjdGlvbi5hcmJpdHJhcnlfYWRkcmVzcygnQUZfVU5JWCcpCisgICAgICAgICAgICAgICAgbGlzdGVuZXIuYmluZChhZGRyZXNzKQorICAgICAgICAgICAgICAgIG9zLmNobW9kKGFkZHJlc3MsIDBvNjAwKQorICAgICAgICAgICAgICAgIGxpc3RlbmVyLmxpc3RlbigxMDApCisKKyAgICAgICAgICAgICAgICAjIGFsbCBjbGllbnQgcHJvY2Vzc2VzIG93biB0aGUgd3JpdGUgZW5kIG9mIHRoZSAiYWxpdmUiIHBpcGU7CisgICAgICAgICAgICAgICAgIyB3aGVuIHRoZXkgYWxsIHRlcm1pbmF0ZSB0aGUgcmVhZCBlbmQgYmVjb21lcyByZWFkeS4KKyAgICAgICAgICAgICAgICBhbGl2ZV9yLCBhbGl2ZV93ID0gb3MucGlwZSgpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfcl0KKyAgICAgICAgICAgICAgICAgICAgY21kICU9IChsaXN0ZW5lci5maWxlbm8oKSwgYWxpdmVfciwgc2VsZi5fcHJlbG9hZF9tb2R1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEpCisgICAgICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9IFtleGVdICsgdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgICAgICAgICAgICAgYXJncyArPSBbJy1jJywgY21kXQorICAgICAgICAgICAgICAgICAgICBwaWQgPSB1dGlsLnNwYXdudl9wYXNzZmRzKGV4ZSwgYXJncywgZmRzX3RvX3Bhc3MpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShhbGl2ZV93KQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGFsaXZlX3IpCisgICAgICAgICAgICAgICAgc2VsZi5fZm9ya3NlcnZlcl9hZGRyZXNzID0gYWRkcmVzcworICAgICAgICAgICAgICAgIHNlbGYuX2ZvcmtzZXJ2ZXJfYWxpdmVfZmQgPSBhbGl2ZV93CisKKyMKKyMKKyMKKworZGVmIG1haW4obGlzdGVuZXJfZmQsIGFsaXZlX3IsIHByZWxvYWQsIG1haW5fcGF0aD1Ob25lLCBzeXNfcGF0aD1Ob25lKToKKyAgICAnJydSdW4gZm9ya3NlcnZlci4nJycKKyAgICBpZiBwcmVsb2FkOgorICAgICAgICBpZiAnX19tYWluX18nIGluIHByZWxvYWQgYW5kIG1haW5fcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2luaGVyaXRpbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc3Bhd24uaW1wb3J0X21haW5fcGF0aChtYWluX3BhdGgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRlbCBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nCisgICAgICAgIGZvciBtb2RuYW1lIGluIHByZWxvYWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICMgY2xvc2Ugc3lzLnN0ZGluCisgICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBOb25lOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzeXMuc3RkaW4uY2xvc2UoKQorICAgICAgICAgICAgc3lzLnN0ZGluID0gb3Blbihvcy5kZXZudWxsKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFzcworCisgICAgIyBpZ25vcmluZyBTSUdDSExEIG1lYW5zIG5vIG5lZWQgdG8gcmVhcCB6b21iaWUgcHJvY2Vzc2VzCisgICAgaGFuZGxlciA9IHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgZmlsZW5vPWxpc3RlbmVyX2ZkKSBhcyBsaXN0ZW5lciwgXAorICAgICAgICAgc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICBfZm9ya3NlcnZlci5fZm9ya3NlcnZlcl9hZGRyZXNzID0gbGlzdGVuZXIuZ2V0c29ja25hbWUoKQorCisgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKGxpc3RlbmVyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoYWxpdmVfciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgICAgICByZmRzID0gW2tleS5maWxlb2JqIGZvciAoa2V5LCBldmVudHMpIGluIHNlbGVjdG9yLnNlbGVjdCgpXQorICAgICAgICAgICAgICAgICAgICBpZiByZmRzOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgICAgIGlmIGFsaXZlX3IgaW4gcmZkczoKKyAgICAgICAgICAgICAgICAgICAgIyBFT0YgYmVjYXVzZSBubyBtb3JlIGNsaWVudCBwcm9jZXNzZXMgbGVmdAorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MucmVhZChhbGl2ZV9yLCAxKSA9PSBiJycKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3lzdGVtRXhpdAorCisgICAgICAgICAgICAgICAgYXNzZXJ0IGxpc3RlbmVyIGluIHJmZHMKKyAgICAgICAgICAgICAgICB3aXRoIGxpc3RlbmVyLmFjY2VwdCgpWzBdIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIGNvZGUgPSAxCisgICAgICAgICAgICAgICAgICAgIGlmIG9zLmZvcmsoKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuX2V4aXQoY29kZSkKKworICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKworZGVmIF9zZXJ2ZV9vbmUocywgbGlzdGVuZXIsIGFsaXZlX3IsIGhhbmRsZXIpOgorICAgICMgY2xvc2UgdW5uZWNlc3Nhcnkgc3R1ZmYgYW5kIHJlc2V0IFNJR0NITEQgaGFuZGxlcgorICAgIGxpc3RlbmVyLmNsb3NlKCkKKyAgICBvcy5jbG9zZShhbGl2ZV9yKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR0NITEQsIGhhbmRsZXIpCisKKyAgICAjIHJlY2VpdmUgZmRzIGZyb20gcGFyZW50IHByb2Nlc3MKKyAgICBmZHMgPSByZWR1Y3Rpb24ucmVjdmZkcyhzLCBNQVhGRFNfVE9fU0VORCArIDEpCisgICAgcy5jbG9zZSgpCisgICAgYXNzZXJ0IGxlbihmZHMpIDw9IE1BWEZEU19UT19TRU5ECisgICAgKGNoaWxkX3IsIGNoaWxkX3csIF9mb3Jrc2VydmVyLl9mb3Jrc2VydmVyX2FsaXZlX2ZkLAorICAgICBzdGZkLCAqX2ZvcmtzZXJ2ZXIuX2luaGVyaXRlZF9mZHMpID0gZmRzCisgICAgc2VtYXBob3JlX3RyYWNrZXIuX3NlbWFwaG9yZV90cmFja2VyLl9mZCA9IHN0ZmQKKworICAgICMgc2VuZCBwaWQgdG8gY2xpZW50IHByb2Nlc3NlcworICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIG9zLmdldHBpZCgpKQorCisgICAgIyByZXNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICBpZiAncmFuZG9tJyBpbiBzeXMubW9kdWxlczoKKyAgICAgICAgaW1wb3J0IHJhbmRvbQorICAgICAgICByYW5kb20uc2VlZCgpCisKKyAgICAjIHJ1biBwcm9jZXNzIG9iamVjdCByZWNlaXZlZCBvdmVyIHBpcGUKKyAgICBjb2RlID0gc3Bhd24uX21haW4oY2hpbGRfcikKKworICAgICMgd3JpdGUgdGhlIGV4aXQgY29kZSB0byB0aGUgcGlwZQorICAgIHdyaXRlX3Vuc2lnbmVkKGNoaWxkX3csIGNvZGUpCisKKyMKKyMgUmVhZCBhbmQgd3JpdGUgdW5zaWduZWQgbnVtYmVycworIworCitkZWYgcmVhZF91bnNpZ25lZChmZCk6CisgICAgZGF0YSA9IGInJworICAgIGxlbmd0aCA9IFVOU0lHTkVEX1NUUlVDVC5zaXplCisgICAgd2hpbGUgbGVuKGRhdGEpIDwgbGVuZ3RoOgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHMgPSBvcy5yZWFkKGZkLCBsZW5ndGggLSBsZW4oZGF0YSkpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmFpc2UgRU9GRXJyb3IoJ3VuZXhwZWN0ZWQgRU9GJykKKyAgICAgICAgZGF0YSArPSBzCisgICAgcmV0dXJuIFVOU0lHTkVEX1NUUlVDVC51bnBhY2soZGF0YSlbMF0KKworZGVmIHdyaXRlX3Vuc2lnbmVkKGZkLCBuKToKKyAgICBtc2cgPSBVTlNJR05FRF9TVFJVQ1QucGFjayhuKQorICAgIHdoaWxlIG1zZzoKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYnl0ZXMgPSBvcy53cml0ZShmZCwgbXNnKQorICAgICAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBuYnl0ZXMgPT0gMDoKKyAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignc2hvdWxkIG5vdCBnZXQgaGVyZScpCisgICAgICAgIG1zZyA9IG1zZ1tuYnl0ZXM6XQorCisjCisjCisjCisKK19mb3Jrc2VydmVyID0gRm9ya1NlcnZlcigpCitlbnN1cmVfcnVubmluZyA9IF9mb3Jrc2VydmVyLmVuc3VyZV9ydW5uaW5nCitnZXRfaW5oZXJpdGVkX2ZkcyA9IF9mb3Jrc2VydmVyLmdldF9pbmhlcml0ZWRfZmRzCitjb25uZWN0X3RvX25ld19wcm9jZXNzID0gX2ZvcmtzZXJ2ZXIuY29ubmVjdF90b19uZXdfcHJvY2Vzcworc2V0X2ZvcmtzZXJ2ZXJfcHJlbG9hZCA9IF9mb3Jrc2VydmVyLnNldF9mb3Jrc2VydmVyX3ByZWxvYWQKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvaGVhcC5weQppbmRleCBlNjNmZGI4Li4zNDRhNDVmIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL2hlYXAucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9oZWFwLnB5CkBAIC0xMSwxMiArMTEsMTIgQEAKIGltcG9ydCBtbWFwCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHRocmVhZGluZwotaW1wb3J0IGl0ZXJ0b29scwogCi1pbXBvcnQgX211bHRpcHJvY2Vzc2luZwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgRmluYWxpemUsIGluZm8KLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZworZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCiAKIF9fYWxsX18gPSBbJ0J1ZmZlcldyYXBwZXInXQogCkBAIC0zMCwxNyArMzAsMjUgQEAKIAogICAgIGNsYXNzIEFyZW5hKG9iamVjdCk6CiAKLSAgICAgICAgX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoKQorICAgICAgICBfcmFuZCA9IHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UoKQogCiAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplKToKICAgICAgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKLSAgICAgICAgICAgIHNlbGYubmFtZSA9ICdweW0tJWQtJWQnICUgKG9zLmdldHBpZCgpLCBuZXh0KEFyZW5hLl9jb3VudGVyKSkKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gbW1hcC5tbWFwKC0xLCBzZWxmLnNpemUsIHRhZ25hbWU9c2VsZi5uYW1lKQotICAgICAgICAgICAgYXNzZXJ0IF93aW5hcGkuR2V0TGFzdEVycm9yKCkgPT0gMCwgJ3RhZ25hbWUgYWxyZWFkeSBpbiB1c2UnCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgorICAgICAgICAgICAgICAgIG5hbWUgPSAncHltLSVkLSVzJyAlIChvcy5nZXRwaWQoKSwgbmV4dChzZWxmLl9yYW5kKSkKKyAgICAgICAgICAgICAgICBidWYgPSBtbWFwLm1tYXAoLTEsIHNpemUsIHRhZ25hbWU9bmFtZSkKKyAgICAgICAgICAgICAgICBpZiBfd2luYXBpLkdldExhc3RFcnJvcigpID09IDA6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIyBXZSBoYXZlIHJlb3BlbmVkIGEgcHJlZXhpc3RpbmcgbW1hcC4KKyAgICAgICAgICAgICAgICBidWYuY2xvc2UoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IoJ0Nhbm5vdCBmaW5kIG5hbWUgZm9yIG5ldyBtbWFwJykKKyAgICAgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gYnVmCiAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IChzZWxmLnNpemUsIHNlbGYubmFtZSkKIAogICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICAgICAgYXNzZXJ0X3NwYXduaW5nKHNlbGYpCisgICAgICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXRlCiAKICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CkBAIC01MiwxMCArNjAsMjggQEAKIAogICAgIGNsYXNzIEFyZW5hKG9iamVjdCk6CiAKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNpemUpOgotICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoLTEsIHNpemUpCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzaXplLCBmZD0tMSk6CiAgICAgICAgICAgICBzZWxmLnNpemUgPSBzaXplCi0gICAgICAgICAgICBzZWxmLm5hbWUgPSBOb25lCisgICAgICAgICAgICBzZWxmLmZkID0gZmQKKyAgICAgICAgICAgIGlmIGZkID09IC0xOgorICAgICAgICAgICAgICAgIHNlbGYuZmQsIG5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKAorICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSdweW0tJWQtJyVvcy5nZXRwaWQoKSwgZGlyPXV0aWwuZ2V0X3RlbXBfZGlyKCkpCisgICAgICAgICAgICAgICAgb3MudW5saW5rKG5hbWUpCisgICAgICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBvcy5jbG9zZSwgKHNlbGYuZmQsKSkKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5mZCwgJ3diJywgY2xvc2VmZD1GYWxzZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZShiJ1wwJypzaXplKQorICAgICAgICAgICAgc2VsZi5idWZmZXIgPSBtbWFwLm1tYXAoc2VsZi5mZCwgc2VsZi5zaXplKQorCisgICAgZGVmIHJlZHVjZV9hcmVuYShhKToKKyAgICAgICAgaWYgYS5mZCA9PSAtMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0FyZW5hIGlzIHVucGlja2xhYmxlIGJlY2F1c2UgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZm9ya2luZyB3YXMgZW5hYmxlZCB3aGVuIGl0IHdhcyBjcmVhdGVkJykKKyAgICAgICAgcmV0dXJuIHJlYnVpbGRfYXJlbmEsIChhLnNpemUsIHJlZHVjdGlvbi5EdXBGZChhLmZkKSkKKworICAgIGRlZiByZWJ1aWxkX2FyZW5hKHNpemUsIGR1cGZkKToKKyAgICAgICAgcmV0dXJuIEFyZW5hKHNpemUsIGR1cGZkLmRldGFjaCgpKQorCisgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKEFyZW5hLCByZWR1Y2VfYXJlbmEpCiAKICMKICMgQ2xhc3MgYWxsb3dpbmcgYWxsb2NhdGlvbiBvZiBjaHVua3Mgb2YgbWVtb3J5IGZyb20gYXJlbmFzCkBAIC05MCw3ICsxMTYsNyBAQAogICAgICAgICBpZiBpID09IGxlbihzZWxmLl9sZW5ndGhzKToKICAgICAgICAgICAgIGxlbmd0aCA9IHNlbGYuX3JvdW5kdXAobWF4KHNlbGYuX3NpemUsIHNpemUpLCBtbWFwLlBBR0VTSVpFKQogICAgICAgICAgICAgc2VsZi5fc2l6ZSAqPSAyCi0gICAgICAgICAgICBpbmZvKCdhbGxvY2F0aW5nIGEgbmV3IG1tYXAgb2YgbGVuZ3RoICVkJywgbGVuZ3RoKQorICAgICAgICAgICAgdXRpbC5pbmZvKCdhbGxvY2F0aW5nIGEgbmV3IG1tYXAgb2YgbGVuZ3RoICVkJywgbGVuZ3RoKQogICAgICAgICAgICAgYXJlbmEgPSBBcmVuYShsZW5ndGgpCiAgICAgICAgICAgICBzZWxmLl9hcmVuYXMuYXBwZW5kKGFyZW5hKQogICAgICAgICAgICAgcmV0dXJuIChhcmVuYSwgMCwgbGVuZ3RoKQpAQCAtMjE2LDcgKzI0Miw3IEBACiAgICAgICAgIGFzc2VydCAwIDw9IHNpemUgPCBzeXMubWF4c2l6ZQogICAgICAgICBibG9jayA9IEJ1ZmZlcldyYXBwZXIuX2hlYXAubWFsbG9jKHNpemUpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gKGJsb2NrLCBzaXplKQotICAgICAgICBGaW5hbGl6ZShzZWxmLCBCdWZmZXJXcmFwcGVyLl9oZWFwLmZyZWUsIGFyZ3M9KGJsb2NrLCkpCisgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgQnVmZmVyV3JhcHBlci5faGVhcC5mcmVlLCBhcmdzPShibG9jaywpKQogCiAgICAgZGVmIGNyZWF0ZV9tZW1vcnl2aWV3KHNlbGYpOgogICAgICAgICAoYXJlbmEsIHN0YXJ0LCBzdG9wKSwgc2l6ZSA9IHNlbGYuX3N0YXRlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9tYW5hZ2Vycy5weQppbmRleCA5NjA1NmIwLi42NmQ0NmZjIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL21hbmFnZXJzLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvbWFuYWdlcnMucHkKQEAgLTE5LDExICsxOSwxNiBAQAogaW1wb3J0IGFycmF5CiBpbXBvcnQgcXVldWUKIAotZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGMKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBQcm9jZXNzLCBjdXJyZW50X3Byb2Nlc3MsIGFjdGl2ZV9jaGlsZHJlbiwgUG9vbCwgdXRpbCwgY29ubmVjdGlvbgotZnJvbSBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcyBpbXBvcnQgQXV0aGVudGljYXRpb25TdHJpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IFBvcGVuLCBGb3JraW5nUGlja2xlcgogZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCitmcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YworCitmcm9tIC4gaW1wb3J0IGNvbm5lY3Rpb24KK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBwb29sCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQKIAogIwogIyBSZWdpc3RlciBzb21lIHRoaW5ncyBmb3IgcGlja2xpbmcKQEAgLTMxLDE2ICszNiwxNCBAQAogCiBkZWYgcmVkdWNlX2FycmF5KGEpOgogICAgIHJldHVybiBhcnJheS5hcnJheSwgKGEudHlwZWNvZGUsIGEudG9ieXRlcygpKQotRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIoYXJyYXkuYXJyYXksIHJlZHVjZV9hcnJheSkKK3JlZHVjdGlvbi5yZWdpc3RlcihhcnJheS5hcnJheSwgcmVkdWNlX2FycmF5KQogCiB2aWV3X3R5cGVzID0gW3R5cGUoZ2V0YXR0cih7fSwgbmFtZSkoKSkgZm9yIG5hbWUgaW4gKCdpdGVtcycsJ2tleXMnLCd2YWx1ZXMnKV0KIGlmIHZpZXdfdHlwZXNbMF0gaXMgbm90IGxpc3Q6ICAgICAgICMgb25seSBuZWVkZWQgaW4gUHkzLjAKICAgICBkZWYgcmVidWlsZF9hc19saXN0KG9iaik6CiAgICAgICAgIHJldHVybiBsaXN0LCAobGlzdChvYmopLCkKICAgICBmb3Igdmlld190eXBlIGluIHZpZXdfdHlwZXM6Ci0gICAgICAgIEZvcmtpbmdQaWNrbGVyLnJlZ2lzdGVyKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQotICAgICAgICBpbXBvcnQgY29weXJlZwotICAgICAgICBjb3B5cmVnLnBpY2tsZSh2aWV3X3R5cGUsIHJlYnVpbGRfYXNfbGlzdCkKKyAgICAgICAgcmVkdWN0aW9uLnJlZ2lzdGVyKHZpZXdfdHlwZSwgcmVidWlsZF9hc19saXN0KQogCiAjCiAjIFR5cGUgZm9yIGlkZW50aWZ5aW5nIHNoYXJlZCBvYmplY3RzCkBAIC0xMzAsNyArMTMzLDcgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgcmVnaXN0cnksIGFkZHJlc3MsIGF1dGhrZXksIHNlcmlhbGl6ZXIpOgogICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShhdXRoa2V5LCBieXRlcykKICAgICAgICAgc2VsZi5yZWdpc3RyeSA9IHJlZ2lzdHJ5Ci0gICAgICAgIHNlbGYuYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgIHNlbGYuYXV0aGtleSA9IHByb2Nlc3MuQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKICAgICAgICAgTGlzdGVuZXIsIENsaWVudCA9IGxpc3RlbmVyX2NsaWVudFtzZXJpYWxpemVyXQogCiAgICAgICAgICMgZG8gYXV0aGVudGljYXRpb24gbGF0ZXIKQEAgLTE0Niw3ICsxNDksNyBAQAogICAgICAgICBSdW4gdGhlIHNlcnZlciBmb3JldmVyCiAgICAgICAgICcnJwogICAgICAgICBzZWxmLnN0b3BfZXZlbnQgPSB0aHJlYWRpbmcuRXZlbnQoKQotICAgICAgICBjdXJyZW50X3Byb2Nlc3MoKS5fbWFuYWdlcl9zZXJ2ZXIgPSBzZWxmCisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX21hbmFnZXJfc2VydmVyID0gc2VsZgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBhY2NlcHRlciA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYuYWNjZXB0ZXIpCiAgICAgICAgICAgICBhY2NlcHRlci5kYWVtb24gPSBUcnVlCkBAIC0xNjcsNyArMTcwLDcgQEAKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjID0gc2VsZi5saXN0ZW5lci5hY2NlcHQoKQotICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBJT0Vycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5oYW5kbGVfcmVxdWVzdCwgYXJncz0oYywpKQogICAgICAgICAgICAgdC5kYWVtb24gPSBUcnVlCkBAIC00MzYsMTUgKzQzOSwxNyBAQAogICAgIF9yZWdpc3RyeSA9IHt9CiAgICAgX1NlcnZlciA9IFNlcnZlcgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGFkZHJlc3M9Tm9uZSwgYXV0aGtleT1Ob25lLCBzZXJpYWxpemVyPSdwaWNrbGUnKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkcmVzcz1Ob25lLCBhdXRoa2V5PU5vbmUsIHNlcmlhbGl6ZXI9J3BpY2tsZScsCisgICAgICAgICAgICAgICAgIGN0eD1Ob25lKToKICAgICAgICAgaWYgYXV0aGtleSBpcyBOb25lOgotICAgICAgICAgICAgYXV0aGtleSA9IGN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKKyAgICAgICAgICAgIGF1dGhrZXkgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkKICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IGFkZHJlc3MgICAgICMgWFhYIG5vdCBmaW5hbCBhZGRyZXNzIGlmIGVnICgnJywgMCkKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBwcm9jZXNzLkF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gU3RhdGUoKQogICAgICAgICBzZWxmLl9zdGF0ZS52YWx1ZSA9IFN0YXRlLklOSVRJQUwKICAgICAgICAgc2VsZi5fc2VyaWFsaXplciA9IHNlcmlhbGl6ZXIKICAgICAgICAgc2VsZi5fTGlzdGVuZXIsIHNlbGYuX0NsaWVudCA9IGxpc3RlbmVyX2NsaWVudFtzZXJpYWxpemVyXQorICAgICAgICBzZWxmLl9jdHggPSBjdHggb3IgZ2V0X2NvbnRleHQoKQogCiAgICAgZGVmIGdldF9zZXJ2ZXIoc2VsZik6CiAgICAgICAgICcnJwpAQCAtNDc2LDcgKzQ4MSw3IEBACiAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKIAogICAgICAgICAjIHNwYXduIHByb2Nlc3Mgd2hpY2ggcnVucyBhIHNlcnZlcgotICAgICAgICBzZWxmLl9wcm9jZXNzID0gUHJvY2VzcygKKyAgICAgICAgc2VsZi5fcHJvY2VzcyA9IHNlbGYuX2N0eC5Qcm9jZXNzKAogICAgICAgICAgICAgdGFyZ2V0PXR5cGUoc2VsZikuX3J1bl9zZXJ2ZXIsCiAgICAgICAgICAgICBhcmdzPShzZWxmLl9yZWdpc3RyeSwgc2VsZi5fYWRkcmVzcywgc2VsZi5fYXV0aGtleSwKICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlcmlhbGl6ZXIsIHdyaXRlciwgaW5pdGlhbGl6ZXIsIGluaXRhcmdzKSwKQEAgLTY5MSwxMSArNjk2LDExIEBACiAgICAgICAgIHNlbGYuX0NsaWVudCA9IGxpc3RlbmVyX2NsaWVudFtzZXJpYWxpemVyXVsxXQogCiAgICAgICAgIGlmIGF1dGhrZXkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKKyAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBwcm9jZXNzLkF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCiAgICAgICAgIGVsaWYgc2VsZi5fbWFuYWdlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYuX2F1dGhrZXkgPSBzZWxmLl9tYW5hZ2VyLl9hdXRoa2V5CiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLl9hdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICAgICAgc2VsZi5fYXV0aGtleSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQogCiAgICAgICAgIGlmIGluY3JlZjoKICAgICAgICAgICAgIHNlbGYuX2luY3JlZigpCkBAIC03MDQsNyArNzA5LDcgQEAKIAogICAgIGRlZiBfY29ubmVjdChzZWxmKToKICAgICAgICAgdXRpbC5kZWJ1ZygnbWFraW5nIGNvbm5lY3Rpb24gdG8gbWFuYWdlcicpCi0gICAgICAgIG5hbWUgPSBjdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkubmFtZSAhPSAnTWFpblRocmVhZCc6CiAgICAgICAgICAgICBuYW1lICs9ICd8JyArIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUKICAgICAgICAgY29ubiA9IHNlbGYuX0NsaWVudChzZWxmLl90b2tlbi5hZGRyZXNzLCBhdXRoa2V5PXNlbGYuX2F1dGhrZXkpCkBAIC03OTgsNyArODAzLDcgQEAKIAogICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgogICAgICAgICBrd2RzID0ge30KLSAgICAgICAgaWYgUG9wZW4udGhyZWFkX2lzX3NwYXduaW5nKCk6CisgICAgICAgIGlmIGNvbnRleHQuZ2V0X3NwYXduaW5nX3BvcGVuKCkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBrd2RzWydhdXRoa2V5J10gPSBzZWxmLl9hdXRoa2V5CiAKICAgICAgICAgaWYgZ2V0YXR0cihzZWxmLCAnX2lzYXV0bycsIEZhbHNlKToKQEAgLTgzNSwxNCArODQwLDE0IEBACiAKICAgICBJZiBwb3NzaWJsZSB0aGUgc2hhcmVkIG9iamVjdCBpcyByZXR1cm5lZCwgb3Igb3RoZXJ3aXNlIGEgcHJveHkgZm9yIGl0LgogICAgICcnJwotICAgIHNlcnZlciA9IGdldGF0dHIoY3VycmVudF9wcm9jZXNzKCksICdfbWFuYWdlcl9zZXJ2ZXInLCBOb25lKQorICAgIHNlcnZlciA9IGdldGF0dHIocHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKSwgJ19tYW5hZ2VyX3NlcnZlcicsIE5vbmUpCiAKICAgICBpZiBzZXJ2ZXIgYW5kIHNlcnZlci5hZGRyZXNzID09IHRva2VuLmFkZHJlc3M6CiAgICAgICAgIHJldHVybiBzZXJ2ZXIuaWRfdG9fb2JqW3Rva2VuLmlkXVswXQogICAgIGVsc2U6CiAgICAgICAgIGluY3JlZiA9ICgKICAgICAgICAgICAgIGt3ZHMucG9wKCdpbmNyZWYnLCBUcnVlKSBhbmQKLSAgICAgICAgICAgIG5vdCBnZXRhdHRyKGN1cnJlbnRfcHJvY2VzcygpLCAnX2luaGVyaXRpbmcnLCBGYWxzZSkKKyAgICAgICAgICAgIG5vdCBnZXRhdHRyKHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCksICdfaW5oZXJpdGluZycsIEZhbHNlKQogICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gZnVuYyh0b2tlbiwgc2VyaWFsaXplciwgaW5jcmVmPWluY3JlZiwgKiprd2RzKQogCkBAIC04ODksNyArODk0LDcgQEAKICAgICBpZiBhdXRoa2V5IGlzIE5vbmUgYW5kIG1hbmFnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgIGF1dGhrZXkgPSBtYW5hZ2VyLl9hdXRoa2V5CiAgICAgaWYgYXV0aGtleSBpcyBOb25lOgotICAgICAgICBhdXRoa2V5ID0gY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleQorICAgICAgICBhdXRoa2V5ID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5CiAKICAgICBQcm94eVR5cGUgPSBNYWtlUHJveHlUeXBlKCdBdXRvUHJveHlbJXNdJyAlIHRva2VuLnR5cGVpZCwgZXhwb3NlZCkKICAgICBwcm94eSA9IFByb3h5VHlwZSh0b2tlbiwgc2VyaWFsaXplciwgbWFuYWdlcj1tYW5hZ2VyLCBhdXRoa2V5PWF1dGhrZXksCkBAIC0xMDcyLDE3ICsxMDc3LDIyIEBACiAgICAgKSkKIAogCi1Qb29sUHJveHkgPSBNYWtlUHJveHlUeXBlKCdQb29sUHJveHknLCAoCitCYXNlUG9vbFByb3h5ID0gTWFrZVByb3h5VHlwZSgnUG9vbFByb3h5JywgKAogICAgICdhcHBseScsICdhcHBseV9hc3luYycsICdjbG9zZScsICdpbWFwJywgJ2ltYXBfdW5vcmRlcmVkJywgJ2pvaW4nLAotICAgICdtYXAnLCAnbWFwX2FzeW5jJywgJ3N0YXJtYXAnLCAnc3Rhcm1hcF9hc3luYycsICd0ZXJtaW5hdGUnCisgICAgJ21hcCcsICdtYXBfYXN5bmMnLCAnc3Rhcm1hcCcsICdzdGFybWFwX2FzeW5jJywgJ3Rlcm1pbmF0ZScsCiAgICAgKSkKLVBvb2xQcm94eS5fbWV0aG9kX3RvX3R5cGVpZF8gPSB7CitCYXNlUG9vbFByb3h5Ll9tZXRob2RfdG9fdHlwZWlkXyA9IHsKICAgICAnYXBwbHlfYXN5bmMnOiAnQXN5bmNSZXN1bHQnLAogICAgICdtYXBfYXN5bmMnOiAnQXN5bmNSZXN1bHQnLAogICAgICdzdGFybWFwX2FzeW5jJzogJ0FzeW5jUmVzdWx0JywKICAgICAnaW1hcCc6ICdJdGVyYXRvcicsCiAgICAgJ2ltYXBfdW5vcmRlcmVkJzogJ0l0ZXJhdG9yJwogICAgIH0KK2NsYXNzIFBvb2xQcm94eShCYXNlUG9vbFByb3h5KToKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiKToKKyAgICAgICAgc2VsZi50ZXJtaW5hdGUoKQogCiAjCiAjIERlZmluaXRpb24gb2YgU3luY01hbmFnZXIKQEAgLTExMDksNyArMTExOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICBBY3F1aXJlclByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0NvbmRpdGlvbicsIHRocmVhZGluZy5Db25kaXRpb24sIENvbmRpdGlvblByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ0JhcnJpZXInLCB0aHJlYWRpbmcuQmFycmllciwgQmFycmllclByb3h5KQotU3luY01hbmFnZXIucmVnaXN0ZXIoJ1Bvb2wnLCBQb29sLCBQb29sUHJveHkpCitTeW5jTWFuYWdlci5yZWdpc3RlcignUG9vbCcsIHBvb2wuUG9vbCwgUG9vbFByb3h5KQogU3luY01hbmFnZXIucmVnaXN0ZXIoJ2xpc3QnLCBsaXN0LCBMaXN0UHJveHkpCiBTeW5jTWFuYWdlci5yZWdpc3RlcignZGljdCcsIGRpY3QsIERpY3RQcm94eSkKIFN5bmNNYW5hZ2VyLnJlZ2lzdGVyKCdWYWx1ZScsIFZhbHVlLCBWYWx1ZVByb3h5KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb29sLnB5CmluZGV4IDBmMmRhYjQuLmRiNmUzZTEgMTAwNjQ0Ci0tLSBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9vbC5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Bvb2wucHkKQEAgLTcsNyArNyw3IEBACiAjIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KICMKIAotX19hbGxfXyA9IFsnUG9vbCddCitfX2FsbF9fID0gWydQb29sJywgJ1RocmVhZFBvb2wnXQogCiAjCiAjIEltcG9ydHMKQEAgLTE3LDEwICsxNywxNCBAQAogaW1wb3J0IHF1ZXVlCiBpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBvcwogaW1wb3J0IHRpbWUKK2ltcG9ydCB0cmFjZWJhY2sKIAotZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFByb2Nlc3MsIGNwdV9jb3VudCwgVGltZW91dEVycm9yCi1mcm9tIG11bHRpcHJvY2Vzc2luZy51dGlsIGltcG9ydCBGaW5hbGl6ZSwgZGVidWcKKyMgSWYgdGhyZWFkaW5nIGlzIGF2YWlsYWJsZSB0aGVuIFRocmVhZFBvb2wgc2hvdWxkIGJlIHByb3ZpZGVkLiAgVGhlcmVmb3JlCisjIHdlIGF2b2lkIHRvcC1sZXZlbCBpbXBvcnRzIHdoaWNoIGFyZSBsaWFibGUgdG8gZmFpbCBvbiBzb21lIHN5c3RlbXMuCitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgZ2V0X2NvbnRleHQsIFRpbWVvdXRFcnJvcgogCiAjCiAjIENvbnN0YW50cyByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIGEgcG9vbApAQCAtNDMsNiArNDcsMjkgQEAKICAgICByZXR1cm4gbGlzdChpdGVydG9vbHMuc3Rhcm1hcChhcmdzWzBdLCBhcmdzWzFdKSkKIAogIworIyBIYWNrIHRvIGVtYmVkIHN0cmluZ2lmaWNhdGlvbiBvZiByZW1vdGUgdHJhY2ViYWNrIGluIGxvY2FsIHRyYWNlYmFjaworIworCitjbGFzcyBSZW1vdGVUcmFjZWJhY2soRXhjZXB0aW9uKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdGIpOgorICAgICAgICBzZWxmLnRiID0gdGIKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYudGIKKworY2xhc3MgRXhjZXB0aW9uV2l0aFRyYWNlYmFjazoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjLCB0Yik6CisgICAgICAgIHRiID0gdHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb24odHlwZShleGMpLCBleGMsIHRiKQorICAgICAgICB0YiA9ICcnLmpvaW4odGIpCisgICAgICAgIHNlbGYuZXhjID0gZXhjCisgICAgICAgIHNlbGYudGIgPSAnXG4iIiJcbiVzIiIiJyAlIHRiCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgIHJldHVybiByZWJ1aWxkX2V4YywgKHNlbGYuZXhjLCBzZWxmLnRiKQorCitkZWYgcmVidWlsZF9leGMoZXhjLCB0Yik6CisgICAgZXhjLl9fY2F1c2VfXyA9IFJlbW90ZVRyYWNlYmFjayh0YikKKyAgICByZXR1cm4gZXhjCisKKyMKICMgQ29kZSBydW4gYnkgd29ya2VyIHByb2Nlc3NlcwogIwogCkBAIC02Myw3ICs5MCw4IEBACiAgICAgICAgIHJldHVybiAiPE1heWJlRW5jb2RpbmdFcnJvcjogJXM+IiAlIHN0cihzZWxmKQogCiAKLWRlZiB3b3JrZXIoaW5xdWV1ZSwgb3V0cXVldWUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrcz1Ob25lKToKK2RlZiB3b3JrZXIoaW5xdWV1ZSwgb3V0cXVldWUsIGluaXRpYWxpemVyPU5vbmUsIGluaXRhcmdzPSgpLCBtYXh0YXNrcz1Ob25lLAorICAgICAgICAgICB3cmFwX2V4Y2VwdGlvbj1GYWxzZSk6CiAgICAgYXNzZXJ0IG1heHRhc2tzIGlzIE5vbmUgb3IgKHR5cGUobWF4dGFza3MpID09IGludCBhbmQgbWF4dGFza3MgPiAwKQogICAgIHB1dCA9IG91dHF1ZXVlLnB1dAogICAgIGdldCA9IGlucXVldWUuZ2V0CkBAIC03OCwyOCArMTA2LDMwIEBACiAgICAgd2hpbGUgbWF4dGFza3MgaXMgTm9uZSBvciAobWF4dGFza3MgYW5kIGNvbXBsZXRlZCA8IG1heHRhc2tzKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgIGV4Y2VwdCAoRU9GRXJyb3IsIElPRXJyb3IpOgotICAgICAgICAgICAgZGVidWcoJ3dvcmtlciBnb3QgRU9GRXJyb3Igb3IgSU9FcnJvciAtLSBleGl0aW5nJykKKyAgICAgICAgZXhjZXB0IChFT0ZFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZ290IEVPRkVycm9yIG9yIE9TRXJyb3IgLS0gZXhpdGluZycpCiAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIGlmIHRhc2sgaXMgTm9uZToKLSAgICAgICAgICAgIGRlYnVnKCd3b3JrZXIgZ290IHNlbnRpbmVsIC0tIGV4aXRpbmcnKQorICAgICAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGdvdCBzZW50aW5lbCAtLSBleGl0aW5nJykKICAgICAgICAgICAgIGJyZWFrCiAKICAgICAgICAgam9iLCBpLCBmdW5jLCBhcmdzLCBrd2RzID0gdGFzawogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZXN1bHQgPSAoVHJ1ZSwgZnVuYygqYXJncywgKiprd2RzKSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgaWYgd3JhcF9leGNlcHRpb246CisgICAgICAgICAgICAgICAgZSA9IEV4Y2VwdGlvbldpdGhUcmFjZWJhY2soZSwgZS5fX3RyYWNlYmFja19fKQogICAgICAgICAgICAgcmVzdWx0ID0gKEZhbHNlLCBlKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwdXQoKGpvYiwgaSwgcmVzdWx0KSkKICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgd3JhcHBlZCA9IE1heWJlRW5jb2RpbmdFcnJvcihlLCByZXN1bHRbMV0pCi0gICAgICAgICAgICBkZWJ1ZygiUG9zc2libGUgZW5jb2RpbmcgZXJyb3Igd2hpbGUgc2VuZGluZyByZXN1bHQ6ICVzIiAlICgKKyAgICAgICAgICAgIHV0aWwuZGVidWcoIlBvc3NpYmxlIGVuY29kaW5nIGVycm9yIHdoaWxlIHNlbmRpbmcgcmVzdWx0OiAlcyIgJSAoCiAgICAgICAgICAgICAgICAgd3JhcHBlZCkpCiAgICAgICAgICAgICBwdXQoKGpvYiwgaSwgKEZhbHNlLCB3cmFwcGVkKSkpCiAgICAgICAgIGNvbXBsZXRlZCArPSAxCi0gICAgZGVidWcoJ3dvcmtlciBleGl0aW5nIGFmdGVyICVkIHRhc2tzJyAlIGNvbXBsZXRlZCkKKyAgICB1dGlsLmRlYnVnKCd3b3JrZXIgZXhpdGluZyBhZnRlciAlZCB0YXNrcycgJSBjb21wbGV0ZWQpCiAKICMKICMgQ2xhc3MgcmVwcmVzZW50aW5nIGEgcHJvY2VzcyBwb29sCkBAIC0xMDksMTAgKzEzOSwxNCBAQAogICAgICcnJwogICAgIENsYXNzIHdoaWNoIHN1cHBvcnRzIGFuIGFzeW5jIHZlcnNpb24gb2YgYXBwbHlpbmcgZnVuY3Rpb25zIHRvIGFyZ3VtZW50cy4KICAgICAnJycKLSAgICBQcm9jZXNzID0gUHJvY2VzcworICAgIF93cmFwX2V4Y2VwdGlvbiA9IFRydWUKKworICAgIGRlZiBQcm9jZXNzKHNlbGYsICphcmdzLCAqKmt3ZHMpOgorICAgICAgICByZXR1cm4gc2VsZi5fY3R4LlByb2Nlc3MoKmFyZ3MsICoqa3dkcykKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9jZXNzZXM9Tm9uZSwgaW5pdGlhbGl6ZXI9Tm9uZSwgaW5pdGFyZ3M9KCksCi0gICAgICAgICAgICAgICAgIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgIG1heHRhc2tzcGVyY2hpbGQ9Tm9uZSwgY29udGV4dD1Ob25lKToKKyAgICAgICAgc2VsZi5fY3R4ID0gY29udGV4dCBvciBnZXRfY29udGV4dCgpCiAgICAgICAgIHNlbGYuX3NldHVwX3F1ZXVlcygpCiAgICAgICAgIHNlbGYuX3Rhc2txdWV1ZSA9IHF1ZXVlLlF1ZXVlKCkKICAgICAgICAgc2VsZi5fY2FjaGUgPSB7fQpAQCAtMTIyLDEwICsxNTYsNyBAQAogICAgICAgICBzZWxmLl9pbml0YXJncyA9IGluaXRhcmdzCiAKICAgICAgICAgaWYgcHJvY2Vzc2VzIGlzIE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc2VzID0gY3B1X2NvdW50KCkKLSAgICAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgotICAgICAgICAgICAgICAgIHByb2Nlc3NlcyA9IDEKKyAgICAgICAgICAgIHByb2Nlc3NlcyA9IG9zLmNwdV9jb3VudCgpIG9yIDEKICAgICAgICAgaWYgcHJvY2Vzc2VzIDwgMToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIk51bWJlciBvZiBwcm9jZXNzZXMgbXVzdCBiZSBhdCBsZWFzdCAxIikKIApAQCAtMTYyLDcgKzE5Myw3IEBACiAgICAgICAgIHNlbGYuX3Jlc3VsdF9oYW5kbGVyLl9zdGF0ZSA9IFJVTgogICAgICAgICBzZWxmLl9yZXN1bHRfaGFuZGxlci5zdGFydCgpCiAKLSAgICAgICAgc2VsZi5fdGVybWluYXRlID0gRmluYWxpemUoCisgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZSA9IHV0aWwuRmluYWxpemUoCiAgICAgICAgICAgICBzZWxmLCBzZWxmLl90ZXJtaW5hdGVfcG9vbCwKICAgICAgICAgICAgIGFyZ3M9KHNlbGYuX3Rhc2txdWV1ZSwgc2VsZi5faW5xdWV1ZSwgc2VsZi5fb3V0cXVldWUsIHNlbGYuX3Bvb2wsCiAgICAgICAgICAgICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlciwgc2VsZi5fdGFza19oYW5kbGVyLApAQCAtMTc5LDcgKzIxMCw3IEBACiAgICAgICAgICAgICB3b3JrZXIgPSBzZWxmLl9wb29sW2ldCiAgICAgICAgICAgICBpZiB3b3JrZXIuZXhpdGNvZGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgIyB3b3JrZXIgZXhpdGVkCi0gICAgICAgICAgICAgICAgZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBpKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBpKQogICAgICAgICAgICAgICAgIHdvcmtlci5qb2luKCkKICAgICAgICAgICAgICAgICBjbGVhbmVkID0gVHJ1ZQogICAgICAgICAgICAgICAgIGRlbCBzZWxmLl9wb29sW2ldCkBAIC0xOTMsMTMgKzIyNCwxNCBAQAogICAgICAgICAgICAgdyA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9d29ya2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzPShzZWxmLl9pbnF1ZXVlLCBzZWxmLl9vdXRxdWV1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5pdGlhbGl6ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2luaXRhcmdzLCBzZWxmLl9tYXh0YXNrc3BlcmNoaWxkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbml0YXJncywgc2VsZi5fbWF4dGFza3NwZXJjaGlsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JhcF9leGNlcHRpb24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgc2VsZi5fcG9vbC5hcHBlbmQodykKICAgICAgICAgICAgIHcubmFtZSA9IHcubmFtZS5yZXBsYWNlKCdQcm9jZXNzJywgJ1Bvb2xXb3JrZXInKQogICAgICAgICAgICAgdy5kYWVtb24gPSBUcnVlCiAgICAgICAgICAgICB3LnN0YXJ0KCkKLSAgICAgICAgICAgIGRlYnVnKCdhZGRlZCB3b3JrZXInKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygnYWRkZWQgd29ya2VyJykKIAogICAgIGRlZiBfbWFpbnRhaW5fcG9vbChzZWxmKToKICAgICAgICAgIiIiQ2xlYW4gdXAgYW55IGV4aXRlZCB3b3JrZXJzIGFuZCBzdGFydCByZXBsYWNlbWVudHMgZm9yIHRoZW0uCkBAIC0yMDgsOSArMjQwLDggQEAKICAgICAgICAgICAgIHNlbGYuX3JlcG9wdWxhdGVfcG9vbCgpCiAKICAgICBkZWYgX3NldHVwX3F1ZXVlcyhzZWxmKToKLSAgICAgICAgZnJvbSAucXVldWVzIGltcG9ydCBTaW1wbGVRdWV1ZQotICAgICAgICBzZWxmLl9pbnF1ZXVlID0gU2ltcGxlUXVldWUoKQotICAgICAgICBzZWxmLl9vdXRxdWV1ZSA9IFNpbXBsZVF1ZXVlKCkKKyAgICAgICAgc2VsZi5faW5xdWV1ZSA9IHNlbGYuX2N0eC5TaW1wbGVRdWV1ZSgpCisgICAgICAgIHNlbGYuX291dHF1ZXVlID0gc2VsZi5fY3R4LlNpbXBsZVF1ZXVlKCkKICAgICAgICAgc2VsZi5fcXVpY2tfcHV0ID0gc2VsZi5faW5xdWV1ZS5fd3JpdGVyLnNlbmQKICAgICAgICAgc2VsZi5fcXVpY2tfZ2V0ID0gc2VsZi5fb3V0cXVldWUuX3JlYWRlci5yZWN2CiAKQEAgLTMzNiw0OSArMzY3LDU4IEBACiAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKICAgICAgICAgIyBzZW5kIHNlbnRpbmVsIHRvIHN0b3Agd29ya2VycwogICAgICAgICBwb29sLl90YXNrcXVldWUucHV0KE5vbmUpCi0gICAgICAgIGRlYnVnKCd3b3JrZXIgaGFuZGxlciBleGl0aW5nJykKKyAgICAgICAgdXRpbC5kZWJ1Zygnd29ya2VyIGhhbmRsZXIgZXhpdGluZycpCiAKICAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIF9oYW5kbGVfdGFza3ModGFza3F1ZXVlLCBwdXQsIG91dHF1ZXVlLCBwb29sLCBjYWNoZSk6CiAgICAgICAgIHRocmVhZCA9IHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpCiAKICAgICAgICAgZm9yIHRhc2tzZXEsIHNldF9sZW5ndGggaW4gaXRlcih0YXNrcXVldWUuZ2V0LCBOb25lKToKKyAgICAgICAgICAgIHRhc2sgPSBOb25lCiAgICAgICAgICAgICBpID0gLTEKLSAgICAgICAgICAgIGZvciBpLCB0YXNrIGluIGVudW1lcmF0ZSh0YXNrc2VxKToKLSAgICAgICAgICAgICAgICBpZiB0aHJlYWQuX3N0YXRlOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGUgIT0gUlVOJykKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHB1dCh0YXNrKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICAgICAgICAgam9iLCBpbmQgPSB0YXNrWzoyXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZvciBpLCB0YXNrIGluIGVudW1lcmF0ZSh0YXNrc2VxKToKKyAgICAgICAgICAgICAgICAgICAgaWYgdGhyZWFkLl9zdGF0ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBmb3VuZCB0aHJlYWQuX3N0YXRlICE9IFJVTicpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVtqb2JdLl9zZXQoaW5kLCAoRmFsc2UsIGUpKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcHV0KHRhc2spCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGpvYiwgaW5kID0gdGFza1s6Ml0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZVtqb2JdLl9zZXQoaW5kLCAoRmFsc2UsIGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBpZiBzZXRfbGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygnZG9pbmcgc2V0X2xlbmd0aCgpJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldF9sZW5ndGgoaSsxKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4OgorICAgICAgICAgICAgICAgIGpvYiwgaW5kID0gdGFza1s6Ml0gaWYgdGFzayBlbHNlICgwLCAwKQorICAgICAgICAgICAgICAgIGlmIGpvYiBpbiBjYWNoZToKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVbam9iXS5fc2V0KGluZCArIDEsIChGYWxzZSwgZXgpKQogICAgICAgICAgICAgICAgIGlmIHNldF9sZW5ndGg6Ci0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCdkb2luZyBzZXRfbGVuZ3RoKCknKQorICAgICAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdkb2luZyBzZXRfbGVuZ3RoKCknKQogICAgICAgICAgICAgICAgICAgICBzZXRfbGVuZ3RoKGkrMSkKLSAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgYnJlYWsKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IHNlbnRpbmVsJykKKyAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBnb3Qgc2VudGluZWwnKQogCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB0ZWxsIHJlc3VsdCBoYW5kbGVyIHRvIGZpbmlzaCB3aGVuIGNhY2hlIGlzIGVtcHR5Ci0gICAgICAgICAgICBkZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gcmVzdWx0IGhhbmRsZXInKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gcmVzdWx0IGhhbmRsZXInKQogICAgICAgICAgICAgb3V0cXVldWUucHV0KE5vbmUpCiAKICAgICAgICAgICAgICMgdGVsbCB3b3JrZXJzIHRoZXJlIGlzIG5vIG1vcmUgd29yawotICAgICAgICAgICAgZGVidWcoJ3Rhc2sgaGFuZGxlciBzZW5kaW5nIHNlbnRpbmVsIHRvIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIHNlbmRpbmcgc2VudGluZWwgdG8gd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgogICAgICAgICAgICAgICAgIHB1dChOb25lKQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZ290IElPRXJyb3Igd2hlbiBzZW5kaW5nIHNlbnRpbmVscycpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGFzayBoYW5kbGVyIGdvdCBPU0Vycm9yIHdoZW4gc2VuZGluZyBzZW50aW5lbHMnKQogCi0gICAgICAgIGRlYnVnKCd0YXNrIGhhbmRsZXIgZXhpdGluZycpCisgICAgICAgIHV0aWwuZGVidWcoJ3Rhc2sgaGFuZGxlciBleGl0aW5nJykKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2hhbmRsZV9yZXN1bHRzKG91dHF1ZXVlLCBnZXQsIGNhY2hlKToKQEAgLTM4NywxNyArNDI3LDE3IEBACiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFzayA9IGdldCgpCi0gICAgICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IEVPRkVycm9yL0lPRXJyb3IgLS0gZXhpdGluZycpCisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvT1NFcnJvciAtLSBleGl0aW5nJykKICAgICAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAgICAgaWYgdGhyZWFkLl9zdGF0ZToKICAgICAgICAgICAgICAgICBhc3NlcnQgdGhyZWFkLl9zdGF0ZSA9PSBURVJNSU5BVEUKLSAgICAgICAgICAgICAgICBkZWJ1ZygncmVzdWx0IGhhbmRsZXIgZm91bmQgdGhyZWFkLl9zdGF0ZT1URVJNSU5BVEUnKQorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGZvdW5kIHRocmVhZC5fc3RhdGU9VEVSTUlOQVRFJykKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBpZiB0YXNrIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBzZW50aW5lbCcpCisgICAgICAgICAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZ290IHNlbnRpbmVsJykKICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgICAgICBqb2IsIGksIG9iaiA9IHRhc2sKQEAgLTQwOSwxMiArNDQ5LDEyIEBACiAgICAgICAgIHdoaWxlIGNhY2hlIGFuZCB0aHJlYWQuX3N0YXRlICE9IFRFUk1JTkFURToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0YXNrID0gZ2V0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgotICAgICAgICAgICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBnb3QgRU9GRXJyb3IvSU9FcnJvciAtLSBleGl0aW5nJykKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGdvdCBFT0ZFcnJvci9PU0Vycm9yIC0tIGV4aXRpbmcnKQogICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgICAgICAgICBpZiB0YXNrIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgZGVidWcoJ3Jlc3VsdCBoYW5kbGVyIGlnbm9yaW5nIGV4dHJhIHNlbnRpbmVsJykKKyAgICAgICAgICAgICAgICB1dGlsLmRlYnVnKCdyZXN1bHQgaGFuZGxlciBpZ25vcmluZyBleHRyYSBzZW50aW5lbCcpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGpvYiwgaSwgb2JqID0gdGFzawogICAgICAgICAgICAgdHJ5OgpAQCAtNDIzLDcgKzQ2Myw3IEBACiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGlmIGhhc2F0dHIob3V0cXVldWUsICdfcmVhZGVyJyk6Ci0gICAgICAgICAgICBkZWJ1ZygnZW5zdXJpbmcgdGhhdCBvdXRxdWV1ZSBpcyBub3QgZnVsbCcpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdlbnN1cmluZyB0aGF0IG91dHF1ZXVlIGlzIG5vdCBmdWxsJykKICAgICAgICAgICAgICMgSWYgd2UgZG9uJ3QgbWFrZSByb29tIGF2YWlsYWJsZSBpbiBvdXRxdWV1ZSB0aGVuCiAgICAgICAgICAgICAjIGF0dGVtcHRzIHRvIGFkZCB0aGUgc2VudGluZWwgKE5vbmUpIHRvIG91dHF1ZXVlIG1heQogICAgICAgICAgICAgIyBibG9jay4gIFRoZXJlIGlzIGd1YXJhbnRlZWQgdG8gYmUgbm8gbW9yZSB0aGFuIDIgc2VudGluZWxzLgpAQCAtNDMyLDEwICs0NzIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG91dHF1ZXVlLl9yZWFkZXIucG9sbCgpOgogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICAgICAgZ2V0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgICAgIGRlYnVnKCdyZXN1bHQgaGFuZGxlciBleGl0aW5nOiBsZW4oY2FjaGUpPSVzLCB0aHJlYWQuX3N0YXRlPSVzJywKKyAgICAgICAgdXRpbC5kZWJ1ZygncmVzdWx0IGhhbmRsZXIgZXhpdGluZzogbGVuKGNhY2hlKT0lcywgdGhyZWFkLl9zdGF0ZT0lcycsCiAgICAgICAgICAgICAgIGxlbihjYWNoZSksIHRocmVhZC5fc3RhdGUpCiAKICAgICBAc3RhdGljbWV0aG9kCkBAIC00NTMsMTkgKzQ5MywxOSBAQAogICAgICAgICAgICAgICApCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGRlYnVnKCdjbG9zaW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCdjbG9zaW5nIHBvb2wnKQogICAgICAgICBpZiBzZWxmLl9zdGF0ZSA9PSBSVU46CiAgICAgICAgICAgICBzZWxmLl9zdGF0ZSA9IENMT1NFCiAgICAgICAgICAgICBzZWxmLl93b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBDTE9TRQogCiAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgZGVidWcoJ3Rlcm1pbmF0aW5nIHBvb2wnKQorICAgICAgICB1dGlsLmRlYnVnKCd0ZXJtaW5hdGluZyBwb29sJykKICAgICAgICAgc2VsZi5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuX3N0YXRlID0gVEVSTUlOQVRFCiAgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZSgpCiAKICAgICBkZWYgam9pbihzZWxmKToKLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgcG9vbCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgcG9vbCcpCiAgICAgICAgIGFzc2VydCBzZWxmLl9zdGF0ZSBpbiAoQ0xPU0UsIFRFUk1JTkFURSkKICAgICAgICAgc2VsZi5fd29ya2VyX2hhbmRsZXIuam9pbigpCiAgICAgICAgIHNlbGYuX3Rhc2tfaGFuZGxlci5qb2luKCkKQEAgLTQ3Niw3ICs1MTYsNyBAQAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX2hlbHBfc3R1ZmZfZmluaXNoKGlucXVldWUsIHRhc2tfaGFuZGxlciwgc2l6ZSk6CiAgICAgICAgICMgdGFza19oYW5kbGVyIG1heSBiZSBibG9ja2VkIHRyeWluZyB0byBwdXQgaXRlbXMgb24gaW5xdWV1ZQotICAgICAgICBkZWJ1ZygncmVtb3ZpbmcgdGFza3MgZnJvbSBpbnF1ZXVlIHVudGlsIHRhc2sgaGFuZGxlciBmaW5pc2hlZCcpCisgICAgICAgIHV0aWwuZGVidWcoJ3JlbW92aW5nIHRhc2tzIGZyb20gaW5xdWV1ZSB1bnRpbCB0YXNrIGhhbmRsZXIgZmluaXNoZWQnKQogICAgICAgICBpbnF1ZXVlLl9ybG9jay5hY3F1aXJlKCkKICAgICAgICAgd2hpbGUgdGFza19oYW5kbGVyLmlzX2FsaXZlKCkgYW5kIGlucXVldWUuX3JlYWRlci5wb2xsKCk6CiAgICAgICAgICAgICBpbnF1ZXVlLl9yZWFkZXIucmVjdigpCkBAIC00ODYsMTIgKzUyNiwxMiBAQAogICAgIGRlZiBfdGVybWluYXRlX3Bvb2woY2xzLCB0YXNrcXVldWUsIGlucXVldWUsIG91dHF1ZXVlLCBwb29sLAogICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyX2hhbmRsZXIsIHRhc2tfaGFuZGxlciwgcmVzdWx0X2hhbmRsZXIsIGNhY2hlKToKICAgICAgICAgIyB0aGlzIGlzIGd1YXJhbnRlZWQgdG8gb25seSBiZSBjYWxsZWQgb25jZQotICAgICAgICBkZWJ1ZygnZmluYWxpemluZyBwb29sJykKKyAgICAgICAgdXRpbC5kZWJ1ZygnZmluYWxpemluZyBwb29sJykKIAogICAgICAgICB3b3JrZXJfaGFuZGxlci5fc3RhdGUgPSBURVJNSU5BVEUKICAgICAgICAgdGFza19oYW5kbGVyLl9zdGF0ZSA9IFRFUk1JTkFURQogCi0gICAgICAgIGRlYnVnKCdoZWxwaW5nIHRhc2sgaGFuZGxlci93b3JrZXJzIHRvIGZpbmlzaCcpCisgICAgICAgIHV0aWwuZGVidWcoJ2hlbHBpbmcgdGFzayBoYW5kbGVyL3dvcmtlcnMgdG8gZmluaXNoJykKICAgICAgICAgY2xzLl9oZWxwX3N0dWZmX2ZpbmlzaChpbnF1ZXVlLCB0YXNrX2hhbmRsZXIsIGxlbihwb29sKSkKIAogICAgICAgICBhc3NlcnQgcmVzdWx0X2hhbmRsZXIuaXNfYWxpdmUoKSBvciBsZW4oY2FjaGUpID09IDAKQEAgLTUwMSwzMSArNTQxLDMxIEBACiAKICAgICAgICAgIyBXZSBtdXN0IHdhaXQgZm9yIHRoZSB3b3JrZXIgaGFuZGxlciB0byBleGl0IGJlZm9yZSB0ZXJtaW5hdGluZwogICAgICAgICAjIHdvcmtlcnMgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHdvcmtlcnMgdG8gYmUgcmVzdGFydGVkIGJlaGluZCBvdXIgYmFjay4KLSAgICAgICAgZGVidWcoJ2pvaW5pbmcgd29ya2VyIGhhbmRsZXInKQorICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHdvcmtlciBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHdvcmtlcl9oYW5kbGVyOgogICAgICAgICAgICAgd29ya2VyX2hhbmRsZXIuam9pbigpCiAKICAgICAgICAgIyBUZXJtaW5hdGUgd29ya2VycyB3aGljaCBoYXZlbid0IGFscmVhZHkgZmluaXNoZWQuCiAgICAgICAgIGlmIHBvb2wgYW5kIGhhc2F0dHIocG9vbFswXSwgJ3Rlcm1pbmF0ZScpOgotICAgICAgICAgICAgZGVidWcoJ3Rlcm1pbmF0aW5nIHdvcmtlcnMnKQorICAgICAgICAgICAgdXRpbC5kZWJ1ZygndGVybWluYXRpbmcgd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgogICAgICAgICAgICAgICAgIGlmIHAuZXhpdGNvZGUgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcC50ZXJtaW5hdGUoKQogCi0gICAgICAgIGRlYnVnKCdqb2luaW5nIHRhc2sgaGFuZGxlcicpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgdGFzayBoYW5kbGVyJykKICAgICAgICAgaWYgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkgaXMgbm90IHRhc2tfaGFuZGxlcjoKICAgICAgICAgICAgIHRhc2tfaGFuZGxlci5qb2luKCkKIAotICAgICAgICBkZWJ1Zygnam9pbmluZyByZXN1bHQgaGFuZGxlcicpCisgICAgICAgIHV0aWwuZGVidWcoJ2pvaW5pbmcgcmVzdWx0IGhhbmRsZXInKQogICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKSBpcyBub3QgcmVzdWx0X2hhbmRsZXI6CiAgICAgICAgICAgICByZXN1bHRfaGFuZGxlci5qb2luKCkKIAogICAgICAgICBpZiBwb29sIGFuZCBoYXNhdHRyKHBvb2xbMF0sICd0ZXJtaW5hdGUnKToKLSAgICAgICAgICAgIGRlYnVnKCdqb2luaW5nIHBvb2wgd29ya2VycycpCisgICAgICAgICAgICB1dGlsLmRlYnVnKCdqb2luaW5nIHBvb2wgd29ya2VycycpCiAgICAgICAgICAgICBmb3IgcCBpbiBwb29sOgogICAgICAgICAgICAgICAgIGlmIHAuaXNfYWxpdmUoKToKICAgICAgICAgICAgICAgICAgICAgIyB3b3JrZXIgaGFzIG5vdCB5ZXQgZXhpdGVkCi0gICAgICAgICAgICAgICAgICAgIGRlYnVnKCdjbGVhbmluZyB1cCB3b3JrZXIgJWQnICUgcC5waWQpCisgICAgICAgICAgICAgICAgICAgIHV0aWwuZGVidWcoJ2NsZWFuaW5nIHVwIHdvcmtlciAlZCcgJSBwLnBpZCkKICAgICAgICAgICAgICAgICAgICAgcC5qb2luKCkKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CkBAIC03MTAsOCArNzUwLDEyIEBACiAjCiAKIGNsYXNzIFRocmVhZFBvb2woUG9vbCk6CisgICAgX3dyYXBfZXhjZXB0aW9uID0gRmFsc2UKIAotICAgIGZyb20gLmR1bW15IGltcG9ydCBQcm9jZXNzCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBQcm9jZXNzKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICBmcm9tIC5kdW1teSBpbXBvcnQgUHJvY2VzcworICAgICAgICByZXR1cm4gUHJvY2VzcygqYXJncywgKiprd2RzKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nlcz1Ob25lLCBpbml0aWFsaXplcj1Ob25lLCBpbml0YXJncz0oKSk6CiAgICAgICAgIFBvb2wuX19pbml0X18oc2VsZiwgcHJvY2Vzc2VzLCBpbml0aWFsaXplciwgaW5pdGFyZ3MpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmsucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmsucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY3ZTcyZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fZm9yay5weQpAQCAtMCwwICsxLDgzIEBACitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBlcnJubworCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisjCisjIFN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgZm9yaworIworCitjbGFzcyBQb3BlbihvYmplY3QpOgorICAgIG1ldGhvZCA9ICdmb3JrJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgIHNlbGYuX2xhdW5jaChwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgcmV0dXJuIGZkCisKKyAgICBkZWYgcG9sbChzZWxmLCBmbGFnPW9zLldOT0hBTkcpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IG9zLndhaXRwaWQoc2VsZi5waWQsIGZsYWcpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBub3QgeWV0IGNyZWF0ZWQuIFNlZSAjMTczMTcxNworICAgICAgICAgICAgICAgICAgICAjIGUuZXJybm8gPT0gZXJybm8uRUNISUxEID09IDEwCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKKyAgICAgICAgICAgICAgICBpZiBvcy5XSUZTSUdOQUxFRChzdHMpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSAtb3MuV1RFUk1TSUcoc3RzKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBvcy5XSUZFWElURUQoc3RzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBvcy5XRVhJVFNUQVRVUyhzdHMpCisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCB3YWl0CisgICAgICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICMgVGhpcyBzaG91bGRuJ3QgYmxvY2sgaWYgd2FpdCgpIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBvbGwob3MuV05PSEFORyBpZiB0aW1lb3V0ID09IDAuMCBlbHNlIDApCisgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKKworICAgIGRlZiB0ZXJtaW5hdGUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIHNpZ25hbC5TSUdURVJNKQorICAgICAgICAgICAgZXhjZXB0IFByb2Nlc3NMb29rdXBFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICBpZiBzZWxmLndhaXQodGltZW91dD0wLjEpIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgX2xhdW5jaChzZWxmLCBwcm9jZXNzX29iaik6CisgICAgICAgIGNvZGUgPSAxCisgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYucGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHNlbGYucGlkID09IDA6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UocGFyZW50X3IpCisgICAgICAgICAgICAgICAgaWYgJ3JhbmRvbScgaW4gc3lzLm1vZHVsZXM6CisgICAgICAgICAgICAgICAgICAgIGltcG9ydCByYW5kb20KKyAgICAgICAgICAgICAgICAgICAgcmFuZG9tLnNlZWQoKQorICAgICAgICAgICAgICAgIGNvZGUgPSBwcm9jZXNzX29iai5fYm9vdHN0cmFwKCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgb3MuX2V4aXQoY29kZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9zLmNsb3NlKGNoaWxkX3cpCisgICAgICAgICAgICB1dGlsLkZpbmFsaXplKHNlbGYsIG9zLmNsb3NlLCAocGFyZW50X3IsKSkKKyAgICAgICAgICAgIHNlbGYuc2VudGluZWwgPSBwYXJlbnRfcgpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3Jrc2VydmVyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9mb3Jrc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OTIxOTQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX2ZvcmtzZXJ2ZXIucHkKQEAgLTAsMCArMSw2OSBAQAoraW1wb3J0IGlvCitpbXBvcnQgb3MKKworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2lmIG5vdCByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRToKKyAgICByYWlzZSBJbXBvcnRFcnJvcignTm8gc3VwcG9ydCBmb3Igc2VuZGluZyBmZHMgYmV0d2VlbiBwcm9jZXNzZXMnKQorZnJvbSAuIGltcG9ydCBjb250ZXh0Citmcm9tIC4gaW1wb3J0IGZvcmtzZXJ2ZXIKK2Zyb20gLiBpbXBvcnQgcG9wZW5fZm9yaworZnJvbSAuIGltcG9ydCBzcGF3bgorZnJvbSAuIGltcG9ydCB1dGlsCisKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisjCisjIFdyYXBwZXIgZm9yIGFuIGZkIHVzZWQgd2hpbGUgbGF1bmNoaW5nIGEgcHJvY2VzcworIworCitjbGFzcyBfRHVwRmQob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5kKToKKyAgICAgICAgc2VsZi5pbmQgPSBpbmQKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICByZXR1cm4gZm9ya3NlcnZlci5nZXRfaW5oZXJpdGVkX2ZkcygpW3NlbGYuaW5kXQorCisjCisjIFN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgYSBzZXJ2ZXIgcHJvY2VzcworIworCitjbGFzcyBQb3Blbihwb3Blbl9mb3JrLlBvcGVuKToKKyAgICBtZXRob2QgPSAnZm9ya3NlcnZlcicKKyAgICBEdXBGZCA9IF9EdXBGZAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgc2VsZi5fZmRzID0gW10KKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwcm9jZXNzX29iaikKKworICAgIGRlZiBkdXBsaWNhdGVfZm9yX2NoaWxkKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5fZmRzLmFwcGVuZChmZCkKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9mZHMpIC0gMQorCisgICAgZGVmIF9sYXVuY2goc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKyAgICAgICAgYnVmID0gaW8uQnl0ZXNJTygpCisgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByZXBfZGF0YSwgYnVmKQorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJvY2Vzc19vYmosIGJ1ZikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGNvbnRleHQuc2V0X3NwYXduaW5nX3BvcGVuKE5vbmUpCisKKyAgICAgICAgc2VsZi5zZW50aW5lbCwgdyA9IGZvcmtzZXJ2ZXIuY29ubmVjdF90b19uZXdfcHJvY2VzcyhzZWxmLl9mZHMpCisgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChzZWxmLnNlbnRpbmVsLCkpCisgICAgICAgIHdpdGggb3Blbih3LCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGJ1Zi5nZXRidWZmZXIoKSkKKyAgICAgICAgc2VsZi5waWQgPSBmb3Jrc2VydmVyLnJlYWRfdW5zaWduZWQoc2VsZi5zZW50aW5lbCkKKworICAgIGRlZiBwb2xsKHNlbGYsIGZsYWc9b3MuV05PSEFORyk6CisgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbiBpbXBvcnQgd2FpdAorICAgICAgICAgICAgdGltZW91dCA9IDAgaWYgZmxhZyA9PSBvcy5XTk9IQU5HIGVsc2UgTm9uZQorICAgICAgICAgICAgaWYgbm90IHdhaXQoW3NlbGYuc2VudGluZWxdLCB0aW1lb3V0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IGZvcmtzZXJ2ZXIucmVhZF91bnNpZ25lZChzZWxmLnNlbnRpbmVsKQorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICAgICAgIyBUaGUgcHJvY2VzcyBlbmRlZCBhYm5vcm1hbGx5IHBlcmhhcHMgYmVjYXVzZSBvZiBhIHNpZ25hbAorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IDI1NQorICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3BvcGVuX3NwYXduX3Bvc2l4LnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl9wb3NpeC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjBhOGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl9wb3NpeC5weQpAQCAtMCwwICsxLDY5IEBACitpbXBvcnQgaW8KK2ltcG9ydCBvcworCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgcG9wZW5fZm9yaworZnJvbSAuIGltcG9ydCByZWR1Y3Rpb24KK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgdXRpbAorCitfX2FsbF9fID0gWydQb3BlbiddCisKKworIworIyBXcmFwcGVyIGZvciBhbiBmZCB1c2VkIHdoaWxlIGxhdW5jaGluZyBhIHByb2Nlc3MKKyMKKworY2xhc3MgX0R1cEZkKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZkKToKKyAgICAgICAgc2VsZi5mZCA9IGZkCisgICAgZGVmIGRldGFjaChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZmQKKworIworIyBTdGFydCBjaGlsZCBwcm9jZXNzIHVzaW5nIGEgZnJlc2ggaW50ZXJwcmV0ZXIKKyMKKworY2xhc3MgUG9wZW4ocG9wZW5fZm9yay5Qb3Blbik6CisgICAgbWV0aG9kID0gJ3NwYXduJworICAgIER1cEZkID0gX0R1cEZkCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBzZWxmLl9mZHMgPSBbXQorICAgICAgICBzdXBlcigpLl9faW5pdF9fKHByb2Nlc3Nfb2JqKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgZmQpOgorICAgICAgICBzZWxmLl9mZHMuYXBwZW5kKGZkKQorICAgICAgICByZXR1cm4gZmQKKworICAgIGRlZiBfbGF1bmNoKHNlbGYsIHByb2Nlc3Nfb2JqKToKKyAgICAgICAgZnJvbSAuIGltcG9ydCBzZW1hcGhvcmVfdHJhY2tlcgorICAgICAgICB0cmFja2VyX2ZkID0gc2VtYXBob3JlX3RyYWNrZXIuZ2V0ZmQoKQorICAgICAgICBzZWxmLl9mZHMuYXBwZW5kKHRyYWNrZXJfZmQpCisgICAgICAgIHByZXBfZGF0YSA9IHNwYXduLmdldF9wcmVwYXJhdGlvbl9kYXRhKHByb2Nlc3Nfb2JqLl9uYW1lKQorICAgICAgICBmcCA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihzZWxmKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZWR1Y3Rpb24uZHVtcChwcmVwX2RhdGEsIGZwKQorICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJvY2Vzc19vYmosIGZwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY29udGV4dC5zZXRfc3Bhd25pbmdfcG9wZW4oTm9uZSkKKworICAgICAgICBwYXJlbnRfciA9IGNoaWxkX3cgPSBjaGlsZF9yID0gcGFyZW50X3cgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcmVudF9yLCBjaGlsZF93ID0gb3MucGlwZSgpCisgICAgICAgICAgICBjaGlsZF9yLCBwYXJlbnRfdyA9IG9zLnBpcGUoKQorICAgICAgICAgICAgY21kID0gc3Bhd24uZ2V0X2NvbW1hbmRfbGluZSh0cmFja2VyX2ZkPXRyYWNrZXJfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpcGVfaGFuZGxlPWNoaWxkX3IpCisgICAgICAgICAgICBzZWxmLl9mZHMuZXh0ZW5kKFtjaGlsZF9yLCBjaGlsZF93XSkKKyAgICAgICAgICAgIHNlbGYucGlkID0gdXRpbC5zcGF3bnZfcGFzc2ZkcyhzcGF3bi5nZXRfZXhlY3V0YWJsZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCwgc2VsZi5fZmRzKQorICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IHBhcmVudF9yCisgICAgICAgICAgICB3aXRoIG9wZW4ocGFyZW50X3csICd3YicsIGNsb3NlZmQ9RmFsc2UpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShmcC5nZXRidWZmZXIoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGlmIHBhcmVudF9yIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgb3MuY2xvc2UsIChwYXJlbnRfciwpKQorICAgICAgICAgICAgZm9yIGZkIGluIChjaGlsZF9yLCBjaGlsZF93LCBwYXJlbnRfdyk6CisgICAgICAgICAgICAgICAgaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9wb3Blbl9zcGF3bl93aW4zMi5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I1MzA2OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcG9wZW5fc3Bhd25fd2luMzIucHkKQEAgLTAsMCArMSw5OSBAQAoraW1wb3J0IG9zCitpbXBvcnQgbXN2Y3J0CitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCitpbXBvcnQgX3dpbmFwaQorCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKK2Zyb20gLiBpbXBvcnQgc3Bhd24KK2Zyb20gLiBpbXBvcnQgcmVkdWN0aW9uCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnUG9wZW4nXQorCisjCisjCisjCisKK1RFUk1JTkFURSA9IDB4MTAwMDAKK1dJTkVYRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSkpCitXSU5TRVJWSUNFID0gc3lzLmV4ZWN1dGFibGUubG93ZXIoKS5lbmRzd2l0aCgicHl0aG9uc2VydmljZS5leGUiKQorCisjCisjIFdlIGRlZmluZSBhIFBvcGVuIGNsYXNzIHNpbWlsYXIgdG8gdGhlIG9uZSBmcm9tIHN1YnByb2Nlc3MsIGJ1dAorIyB3aG9zZSBjb25zdHJ1Y3RvciB0YWtlcyBhIHByb2Nlc3Mgb2JqZWN0IGFzIGl0cyBhcmd1bWVudC4KKyMKKworY2xhc3MgUG9wZW4ob2JqZWN0KToKKyAgICAnJycKKyAgICBTdGFydCBhIHN1YnByb2Nlc3MgdG8gcnVuIHRoZSBjb2RlIG9mIGEgcHJvY2VzcyBvYmplY3QKKyAgICAnJycKKyAgICBtZXRob2QgPSAnc3Bhd24nCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvY2Vzc19vYmopOgorICAgICAgICBwcmVwX2RhdGEgPSBzcGF3bi5nZXRfcHJlcGFyYXRpb25fZGF0YShwcm9jZXNzX29iai5fbmFtZSkKKworICAgICAgICAjIHJlYWQgZW5kIG9mIHBpcGUgd2lsbCBiZSAic3RvbGVuIiBieSB0aGUgY2hpbGQgcHJvY2VzcworICAgICAgICAjIC0tIHNlZSBzcGF3bl9tYWluKCkgaW4gc3Bhd24ucHkuCisgICAgICAgIHJoYW5kbGUsIHdoYW5kbGUgPSBfd2luYXBpLkNyZWF0ZVBpcGUoTm9uZSwgMCkKKyAgICAgICAgd2ZkID0gbXN2Y3J0Lm9wZW5fb3NmaGFuZGxlKHdoYW5kbGUsIDApCisgICAgICAgIGNtZCA9IHNwYXduLmdldF9jb21tYW5kX2xpbmUocGFyZW50X3BpZD1vcy5nZXRwaWQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaXBlX2hhbmRsZT1yaGFuZGxlKQorICAgICAgICBjbWQgPSAnICcuam9pbignIiVzIicgJSB4IGZvciB4IGluIGNtZCkKKworICAgICAgICB3aXRoIG9wZW4od2ZkLCAnd2InLCBjbG9zZWZkPVRydWUpIGFzIHRvX2NoaWxkOgorICAgICAgICAgICAgIyBzdGFydCBwcm9jZXNzCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaHAsIGh0LCBwaWQsIHRpZCA9IF93aW5hcGkuQ3JlYXRlUHJvY2VzcygKKyAgICAgICAgICAgICAgICAgICAgc3Bhd24uZ2V0X2V4ZWN1dGFibGUoKSwgY21kLAorICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lLCBGYWxzZSwgMCwgTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGh0KQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUocmhhbmRsZSkKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgICAgICAjIHNldCBhdHRyaWJ1dGVzIG9mIHNlbGYKKyAgICAgICAgICAgIHNlbGYucGlkID0gcGlkCisgICAgICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBOb25lCisgICAgICAgICAgICBzZWxmLl9oYW5kbGUgPSBocAorICAgICAgICAgICAgc2VsZi5zZW50aW5lbCA9IGludChocCkKKyAgICAgICAgICAgIHV0aWwuRmluYWxpemUoc2VsZiwgX3dpbmFwaS5DbG9zZUhhbmRsZSwgKHNlbGYuc2VudGluZWwsKSkKKworICAgICAgICAgICAgIyBzZW5kIGluZm9ybWF0aW9uIHRvIGNoaWxkCisgICAgICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihzZWxmKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5kdW1wKHByZXBfZGF0YSwgdG9fY2hpbGQpCisgICAgICAgICAgICAgICAgcmVkdWN0aW9uLmR1bXAocHJvY2Vzc19vYmosIHRvX2NoaWxkKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBjb250ZXh0LnNldF9zcGF3bmluZ19wb3BlbihOb25lKQorCisgICAgZGVmIGR1cGxpY2F0ZV9mb3JfY2hpbGQoc2VsZiwgaGFuZGxlKToKKyAgICAgICAgYXNzZXJ0IHNlbGYgaXMgY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKQorICAgICAgICByZXR1cm4gcmVkdWN0aW9uLmR1cGxpY2F0ZShoYW5kbGUsIHNlbGYuc2VudGluZWwpCisKKyAgICBkZWYgd2FpdChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgTm9uZToKKyAgICAgICAgICAgICAgICBtc2VjcyA9IF93aW5hcGkuSU5GSU5JVEUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbXNlY3MgPSBtYXgoMCwgaW50KHRpbWVvdXQgKiAxMDAwICsgMC41KSkKKworICAgICAgICAgICAgcmVzID0gX3dpbmFwaS5XYWl0Rm9yU2luZ2xlT2JqZWN0KGludChzZWxmLl9oYW5kbGUpLCBtc2VjcykKKyAgICAgICAgICAgIGlmIHJlcyA9PSBfd2luYXBpLldBSVRfT0JKRUNUXzA6CisgICAgICAgICAgICAgICAgY29kZSA9IF93aW5hcGkuR2V0RXhpdENvZGVQcm9jZXNzKHNlbGYuX2hhbmRsZSkKKyAgICAgICAgICAgICAgICBpZiBjb2RlID09IFRFUk1JTkFURToKKyAgICAgICAgICAgICAgICAgICAgY29kZSA9IC1zaWduYWwuU0lHVEVSTQorICAgICAgICAgICAgICAgIHNlbGYucmV0dXJuY29kZSA9IGNvZGUKKworICAgICAgICByZXR1cm4gc2VsZi5yZXR1cm5jb2RlCisKKyAgICBkZWYgcG9sbChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYud2FpdCh0aW1lb3V0PTApCisKKyAgICBkZWYgdGVybWluYXRlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBfd2luYXBpLlRlcm1pbmF0ZVByb2Nlc3MoaW50KHNlbGYuX2hhbmRsZSksIFRFUk1JTkFURSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGlmIHNlbGYud2FpdCh0aW1lb3V0PTEuMCkgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvcHJvY2Vzcy5weQppbmRleCAzZDMyYWRkLi42ODk1OWJmIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3Byb2Nlc3MucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9wcm9jZXNzLnB5CkBAIC03LDcgKzcsNyBAQAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKLV9fYWxsX18gPSBbJ1Byb2Nlc3MnLCAnY3VycmVudF9wcm9jZXNzJywgJ2FjdGl2ZV9jaGlsZHJlbiddCitfX2FsbF9fID0gWydCYXNlUHJvY2VzcycsICdjdXJyZW50X3Byb2Nlc3MnLCAnYWN0aXZlX2NoaWxkcmVuJ10KIAogIwogIyBJbXBvcnRzCkBAIC00Myw3ICs0Myw3IEBACiAgICAgUmV0dXJuIGxpc3Qgb2YgcHJvY2VzcyBvYmplY3RzIGNvcnJlc3BvbmRpbmcgdG8gbGl2ZSBjaGlsZCBwcm9jZXNzZXMKICAgICAnJycKICAgICBfY2xlYW51cCgpCi0gICAgcmV0dXJuIGxpc3QoX2N1cnJlbnRfcHJvY2Vzcy5fY2hpbGRyZW4pCisgICAgcmV0dXJuIGxpc3QoX2NoaWxkcmVuKQogCiAjCiAjCkBAIC01MSwzMyArNTEsMjkgQEAKIAogZGVmIF9jbGVhbnVwKCk6CiAgICAgIyBjaGVjayBmb3IgcHJvY2Vzc2VzIHdoaWNoIGhhdmUgZmluaXNoZWQKLSAgICBmb3IgcCBpbiBsaXN0KF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuKToKKyAgICBmb3IgcCBpbiBsaXN0KF9jaGlsZHJlbik6CiAgICAgICAgIGlmIHAuX3BvcGVuLnBvbGwoKSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuLmRpc2NhcmQocCkKKyAgICAgICAgICAgIF9jaGlsZHJlbi5kaXNjYXJkKHApCiAKICMKICMgVGhlIGBQcm9jZXNzYCBjbGFzcwogIwogCi1jbGFzcyBQcm9jZXNzKG9iamVjdCk6CitjbGFzcyBCYXNlUHJvY2VzcyhvYmplY3QpOgogICAgICcnJwogICAgIFByb2Nlc3Mgb2JqZWN0cyByZXByZXNlbnQgYWN0aXZpdHkgdGhhdCBpcyBydW4gaW4gYSBzZXBhcmF0ZSBwcm9jZXNzCiAKLSAgICBUaGUgY2xhc3MgaXMgYW5hbGFnb3VzIHRvIGB0aHJlYWRpbmcuVGhyZWFkYAorICAgIFRoZSBjbGFzcyBpcyBhbmFsb2dvdXMgdG8gYHRocmVhZGluZy5UaHJlYWRgCiAgICAgJycnCi0gICAgX1BvcGVuID0gTm9uZQorICAgIGRlZiBfUG9wZW4oc2VsZik6CisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBncm91cD1Ob25lLCB0YXJnZXQ9Tm9uZSwgbmFtZT1Ob25lLCBhcmdzPSgpLCBrd2FyZ3M9e30sCiAgICAgICAgICAgICAgICAgICosIGRhZW1vbj1Ob25lKToKICAgICAgICAgYXNzZXJ0IGdyb3VwIGlzIE5vbmUsICdncm91cCBhcmd1bWVudCBtdXN0IGJlIE5vbmUgZm9yIG5vdycKLSAgICAgICAgY291bnQgPSBuZXh0KF9jdXJyZW50X3Byb2Nlc3MuX2NvdW50ZXIpCisgICAgICAgIGNvdW50ID0gbmV4dChfcHJvY2Vzc19jb3VudGVyKQogICAgICAgICBzZWxmLl9pZGVudGl0eSA9IF9jdXJyZW50X3Byb2Nlc3MuX2lkZW50aXR5ICsgKGNvdW50LCkKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IF9jdXJyZW50X3Byb2Nlc3MuX2F1dGhrZXkKLSAgICAgICAgaWYgZGFlbW9uIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBkYWVtb24KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gX2N1cnJlbnRfcHJvY2Vzcy5fZGFlbW9uaWMKLSAgICAgICAgc2VsZi5fdGVtcGRpciA9IF9jdXJyZW50X3Byb2Nlc3MuX3RlbXBkaXIKKyAgICAgICAgc2VsZi5fY29uZmlnID0gX2N1cnJlbnRfcHJvY2Vzcy5fY29uZmlnLmNvcHkoKQogICAgICAgICBzZWxmLl9wYXJlbnRfcGlkID0gb3MuZ2V0cGlkKCkKICAgICAgICAgc2VsZi5fcG9wZW4gPSBOb25lCiAgICAgICAgIHNlbGYuX3RhcmdldCA9IHRhcmdldApAQCAtODUsNiArODEsOCBAQAogICAgICAgICBzZWxmLl9rd2FyZ3MgPSBkaWN0KGt3YXJncykKICAgICAgICAgc2VsZi5fbmFtZSA9IG5hbWUgb3IgdHlwZShzZWxmKS5fX25hbWVfXyArICctJyArIFwKICAgICAgICAgICAgICAgICAgICAgICc6Jy5qb2luKHN0cihpKSBmb3IgaSBpbiBzZWxmLl9pZGVudGl0eSkKKyAgICAgICAgaWYgZGFlbW9uIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5kYWVtb24gPSBkYWVtb24KICAgICAgICAgX2RhbmdsaW5nLmFkZChzZWxmKQogCiAgICAgZGVmIHJ1bihzZWxmKToKQEAgLTEwMSwxNiArOTksMTIgQEAKICAgICAgICAgYXNzZXJ0IHNlbGYuX3BvcGVuIGlzIE5vbmUsICdjYW5ub3Qgc3RhcnQgYSBwcm9jZXNzIHR3aWNlJwogICAgICAgICBhc3NlcnQgc2VsZi5fcGFyZW50X3BpZCA9PSBvcy5nZXRwaWQoKSwgXAogICAgICAgICAgICAgICAgJ2NhbiBvbmx5IHN0YXJ0IGEgcHJvY2VzcyBvYmplY3QgY3JlYXRlZCBieSBjdXJyZW50IHByb2Nlc3MnCi0gICAgICAgIGFzc2VydCBub3QgX2N1cnJlbnRfcHJvY2Vzcy5fZGFlbW9uaWMsIFwKKyAgICAgICAgYXNzZXJ0IG5vdCBfY3VycmVudF9wcm9jZXNzLl9jb25maWcuZ2V0KCdkYWVtb24nKSwgXAogICAgICAgICAgICAgICAgJ2RhZW1vbmljIHByb2Nlc3NlcyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBjaGlsZHJlbicKICAgICAgICAgX2NsZWFudXAoKQotICAgICAgICBpZiBzZWxmLl9Qb3BlbiBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIFBvcGVuID0gc2VsZi5fUG9wZW4KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGZyb20gLmZvcmtpbmcgaW1wb3J0IFBvcGVuCi0gICAgICAgIHNlbGYuX3BvcGVuID0gUG9wZW4oc2VsZikKKyAgICAgICAgc2VsZi5fcG9wZW4gPSBzZWxmLl9Qb3BlbihzZWxmKQogICAgICAgICBzZWxmLl9zZW50aW5lbCA9IHNlbGYuX3BvcGVuLnNlbnRpbmVsCi0gICAgICAgIF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuLmFkZChzZWxmKQorICAgICAgICBfY2hpbGRyZW4uYWRkKHNlbGYpCiAKICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgogICAgICAgICAnJycKQEAgLTEyNiw3ICsxMjAsNyBAQAogICAgICAgICBhc3NlcnQgc2VsZi5fcG9wZW4gaXMgbm90IE5vbmUsICdjYW4gb25seSBqb2luIGEgc3RhcnRlZCBwcm9jZXNzJwogICAgICAgICByZXMgPSBzZWxmLl9wb3Blbi53YWl0KHRpbWVvdXQpCiAgICAgICAgIGlmIHJlcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIF9jdXJyZW50X3Byb2Nlc3MuX2NoaWxkcmVuLmRpc2NhcmQoc2VsZikKKyAgICAgICAgICAgIF9jaGlsZHJlbi5kaXNjYXJkKHNlbGYpCiAKICAgICBkZWYgaXNfYWxpdmUoc2VsZik6CiAgICAgICAgICcnJwpAQCAtMTU0LDcgKzE0OCw3IEBACiAgICAgICAgICcnJwogICAgICAgICBSZXR1cm4gd2hldGhlciBwcm9jZXNzIGlzIGEgZGFlbW9uCiAgICAgICAgICcnJwotICAgICAgICByZXR1cm4gc2VsZi5fZGFlbW9uaWMKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbmZpZy5nZXQoJ2RhZW1vbicsIEZhbHNlKQogCiAgICAgQGRhZW1vbi5zZXR0ZXIKICAgICBkZWYgZGFlbW9uKHNlbGYsIGRhZW1vbmljKToKQEAgLTE2MiwxOCArMTU2LDE4IEBACiAgICAgICAgIFNldCB3aGV0aGVyIHByb2Nlc3MgaXMgYSBkYWVtb24KICAgICAgICAgJycnCiAgICAgICAgIGFzc2VydCBzZWxmLl9wb3BlbiBpcyBOb25lLCAncHJvY2VzcyBoYXMgYWxyZWFkeSBzdGFydGVkJwotICAgICAgICBzZWxmLl9kYWVtb25pYyA9IGRhZW1vbmljCisgICAgICAgIHNlbGYuX2NvbmZpZ1snZGFlbW9uJ10gPSBkYWVtb25pYwogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIGF1dGhrZXkoc2VsZik6Ci0gICAgICAgIHJldHVybiBzZWxmLl9hdXRoa2V5CisgICAgICAgIHJldHVybiBzZWxmLl9jb25maWdbJ2F1dGhrZXknXQogCiAgICAgQGF1dGhrZXkuc2V0dGVyCiAgICAgZGVmIGF1dGhrZXkoc2VsZiwgYXV0aGtleSk6CiAgICAgICAgICcnJwogICAgICAgICBTZXQgYXV0aG9yaXphdGlvbiBrZXkgb2YgcHJvY2VzcwogICAgICAgICAnJycKLSAgICAgICAgc2VsZi5fYXV0aGtleSA9IEF1dGhlbnRpY2F0aW9uU3RyaW5nKGF1dGhrZXkpCisgICAgICAgIHNlbGYuX2NvbmZpZ1snYXV0aGtleSddID0gQXV0aGVudGljYXRpb25TdHJpbmcoYXV0aGtleSkKIAogICAgIEBwcm9wZXJ0eQogICAgIGRlZiBleGl0Y29kZShzZWxmKToKQEAgLTIyNywxNyArMjIxLDE5IEBACiAgICAgICAgICAgICAgICAgc3RhdHVzID0gJ3N0b3BwZWRbJXNdJyAlIF9leGl0Y29kZV90b19uYW1lLmdldChzdGF0dXMsIHN0YXR1cykKIAogICAgICAgICByZXR1cm4gJzwlcyglcywgJXMlcyk+JyAlICh0eXBlKHNlbGYpLl9fbmFtZV9fLCBzZWxmLl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHNlbGYuX2RhZW1vbmljIGFuZCAnIGRhZW1vbicgb3IgJycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cywgc2VsZi5kYWVtb24gYW5kICcgZGFlbW9uJyBvciAnJykKIAogICAgICMjCiAKICAgICBkZWYgX2Jvb3RzdHJhcChzZWxmKToKLSAgICAgICAgZnJvbSAuIGltcG9ydCB1dGlsCi0gICAgICAgIGdsb2JhbCBfY3VycmVudF9wcm9jZXNzCisgICAgICAgIGZyb20gLiBpbXBvcnQgdXRpbCwgY29udGV4dAorICAgICAgICBnbG9iYWwgX2N1cnJlbnRfcHJvY2VzcywgX3Byb2Nlc3NfY291bnRlciwgX2NoaWxkcmVuCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5fY2hpbGRyZW4gPSBzZXQoKQotICAgICAgICAgICAgc2VsZi5fY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQorICAgICAgICAgICAgaWYgc2VsZi5fc3RhcnRfbWV0aG9kIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQuX2ZvcmNlX3N0YXJ0X21ldGhvZChzZWxmLl9zdGFydF9tZXRob2QpCisgICAgICAgICAgICBfcHJvY2Vzc19jb3VudGVyID0gaXRlcnRvb2xzLmNvdW50KDEpCisgICAgICAgICAgICBfY2hpbGRyZW4gPSBzZXQoKQogICAgICAgICAgICAgaWYgc3lzLnN0ZGluIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKQEAgLTI4NSw4ICsyODEsOCBAQAogCiBjbGFzcyBBdXRoZW50aWNhdGlvblN0cmluZyhieXRlcyk6CiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6Ci0gICAgICAgIGZyb20gLmZvcmtpbmcgaW1wb3J0IFBvcGVuCi0gICAgICAgIGlmIG5vdCBQb3Blbi50aHJlYWRfaXNfc3Bhd25pbmcoKToKKyAgICAgICAgZnJvbSAuY29udGV4dCBpbXBvcnQgZ2V0X3NwYXduaW5nX3BvcGVuCisgICAgICAgIGlmIGdldF9zcGF3bmluZ19wb3BlbigpIGlzIE5vbmU6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCiAgICAgICAgICAgICAgICAgJ1BpY2tsaW5nIGFuIEF1dGhlbnRpY2F0aW9uU3RyaW5nIG9iamVjdCBpcyAnCiAgICAgICAgICAgICAgICAgJ2Rpc2FsbG93ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbnMnCkBAIC0yOTcsMjAgKzI5MywyOSBAQAogIyBDcmVhdGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbWFpbiBwcm9jZXNzCiAjCiAKLWNsYXNzIF9NYWluUHJvY2VzcyhQcm9jZXNzKToKK2NsYXNzIF9NYWluUHJvY2VzcyhCYXNlUHJvY2Vzcyk6CiAKICAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgIHNlbGYuX2lkZW50aXR5ID0gKCkKLSAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBGYWxzZQogICAgICAgICBzZWxmLl9uYW1lID0gJ01haW5Qcm9jZXNzJwogICAgICAgICBzZWxmLl9wYXJlbnRfcGlkID0gTm9uZQogICAgICAgICBzZWxmLl9wb3BlbiA9IE5vbmUKLSAgICAgICAgc2VsZi5fY291bnRlciA9IGl0ZXJ0b29scy5jb3VudCgxKQotICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IHNldCgpCi0gICAgICAgIHNlbGYuX2F1dGhrZXkgPSBBdXRoZW50aWNhdGlvblN0cmluZyhvcy51cmFuZG9tKDMyKSkKLSAgICAgICAgc2VsZi5fdGVtcGRpciA9IE5vbmUKKyAgICAgICAgc2VsZi5fY29uZmlnID0geydhdXRoa2V5JzogQXV0aGVudGljYXRpb25TdHJpbmcob3MudXJhbmRvbSgzMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NlbXByZWZpeCc6ICcvbXAnfQorICAgICAgICAjIE5vdGUgdGhhdCBzb21lIHZlcnNpb25zIG9mIEZyZWVCU0Qgb25seSBhbGxvdyBuYW1lZAorICAgICAgICAjIHNlbWFwaG9yZXMgdG8gaGF2ZSBuYW1lcyBvZiB1cCB0byAxNCBjaGFyYWN0ZXJzLiAgVGhlcmVmb3JlCisgICAgICAgICMgd2UgY2hvb3NlIGEgc2hvcnQgcHJlZml4LgorICAgICAgICAjCisgICAgICAgICMgT24gTWFjT1NYIGluIGEgc2FuZGJveCBpdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIHVzZSBhCisgICAgICAgICMgZGlmZmVyZW50IHByZWZpeCAtLSBzZWUgIzE5NDc4LgorICAgICAgICAjCisgICAgICAgICMgRXZlcnl0aGluZyBpbiBzZWxmLl9jb25maWcgd2lsbCBiZSBpbmhlcml0ZWQgYnkgZGVzY2VuZGFudAorICAgICAgICAjIHByb2Nlc3Nlcy4KKwogCiBfY3VycmVudF9wcm9jZXNzID0gX01haW5Qcm9jZXNzKCkKK19wcm9jZXNzX2NvdW50ZXIgPSBpdGVydG9vbHMuY291bnQoMSkKK19jaGlsZHJlbiA9IHNldCgpCiBkZWwgX01haW5Qcm9jZXNzCiAKICMKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvcXVldWVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKaW5kZXggMzcyNzFmYi4uMjkzYWQ3NiAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9xdWV1ZXMucHkKQEAgLTE4LDExICsxOCwxNCBAQAogaW1wb3J0IGVycm5vCiAKIGZyb20gcXVldWUgaW1wb3J0IEVtcHR5LCBGdWxsCisKIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uIGltcG9ydCBQaXBlCi1mcm9tIG11bHRpcHJvY2Vzc2luZy5zeW5jaHJvbml6ZSBpbXBvcnQgTG9jaywgQm91bmRlZFNlbWFwaG9yZSwgU2VtYXBob3JlLCBDb25kaXRpb24KLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGRlYnVnLCBpbmZvLCBGaW5hbGl6ZSwgcmVnaXN0ZXJfYWZ0ZXJfZm9yawotZnJvbSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBpbXBvcnQgYXNzZXJ0X3NwYXduaW5nCisKK2Zyb20gLiBpbXBvcnQgY29ubmVjdGlvbgorZnJvbSAuIGltcG9ydCBjb250ZXh0CisKK2Zyb20gLnV0aWwgaW1wb3J0IGRlYnVnLCBpbmZvLCBGaW5hbGl6ZSwgcmVnaXN0ZXJfYWZ0ZXJfZm9yaywgaXNfZXhpdGluZworZnJvbSAucmVkdWN0aW9uIGltcG9ydCBGb3JraW5nUGlja2xlcgogCiAjCiAjIFF1ZXVlIHR5cGUgdXNpbmcgYSBwaXBlLCBidWZmZXIgYW5kIHRocmVhZApAQCAtMzAsMTggKzMzLDE5IEBACiAKIGNsYXNzIFF1ZXVlKG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBjdHgpOgogICAgICAgICBpZiBtYXhzaXplIDw9IDA6Ci0gICAgICAgICAgICBtYXhzaXplID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrLlNFTV9WQUxVRV9NQVgKKyAgICAgICAgICAgICMgQ2FuIHJhaXNlIEltcG9ydEVycm9yIChzZWUgaXNzdWVzICMzNzcwIGFuZCAjMjM0MDApCisgICAgICAgICAgICBmcm9tIC5zeW5jaHJvbml6ZSBpbXBvcnQgU0VNX1ZBTFVFX01BWCBhcyBtYXhzaXplCiAgICAgICAgIHNlbGYuX21heHNpemUgPSBtYXhzaXplCi0gICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gUGlwZShkdXBsZXg9RmFsc2UpCi0gICAgICAgIHNlbGYuX3Jsb2NrID0gTG9jaygpCisgICAgICAgIHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyID0gY29ubmVjdGlvbi5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgc2VsZi5fcmxvY2sgPSBjdHguTG9jaygpCiAgICAgICAgIHNlbGYuX29waWQgPSBvcy5nZXRwaWQoKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTm9uZQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBMb2NrKCkKLSAgICAgICAgc2VsZi5fc2VtID0gQm91bmRlZFNlbWFwaG9yZShtYXhzaXplKQorICAgICAgICAgICAgc2VsZi5fd2xvY2sgPSBjdHguTG9jaygpCisgICAgICAgIHNlbGYuX3NlbSA9IGN0eC5Cb3VuZGVkU2VtYXBob3JlKG1heHNpemUpCiAgICAgICAgICMgRm9yIHVzZSBieSBjb25jdXJyZW50LmZ1dHVyZXMKICAgICAgICAgc2VsZi5faWdub3JlX2VwaXBlID0gRmFsc2UKIApAQCAtNTEsNyArNTUsNyBAQAogICAgICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBRdWV1ZS5fYWZ0ZXJfZm9yaykKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2lnbm9yZV9lcGlwZSwgc2VsZi5fbWF4c2l6ZSwgc2VsZi5fcmVhZGVyLCBzZWxmLl93cml0ZXIsCiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2ssIHNlbGYuX3dsb2NrLCBzZWxmLl9zZW0sIHNlbGYuX29waWQpCiAKQEAgLTY5LDggKzczLDggQEAKICAgICAgICAgc2VsZi5fam9pbmNhbmNlbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX2Nsb3NlID0gTm9uZQotICAgICAgICBzZWxmLl9zZW5kID0gc2VsZi5fd3JpdGVyLnNlbmQKLSAgICAgICAgc2VsZi5fcmVjdiA9IHNlbGYuX3JlYWRlci5yZWN2CisgICAgICAgIHNlbGYuX3NlbmRfYnl0ZXMgPSBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcworICAgICAgICBzZWxmLl9yZWN2X2J5dGVzID0gc2VsZi5fcmVhZGVyLnJlY3ZfYnl0ZXMKICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGYuX3JlYWRlci5wb2xsCiAKICAgICBkZWYgcHV0KHNlbGYsIG9iaiwgYmxvY2s9VHJ1ZSwgdGltZW91dD1Ob25lKToKQEAgLTg5LDE0ICs5Myw5IEBACiAKICAgICBkZWYgZ2V0KHNlbGYsIGJsb2NrPVRydWUsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgIGlmIGJsb2NrIGFuZCB0aW1lb3V0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLl9ybG9jay5hY3F1aXJlKCkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2KCkKLSAgICAgICAgICAgICAgICBzZWxmLl9zZW0ucmVsZWFzZSgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJlcwotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLl9ybG9jay5yZWxlYXNlKCkKLQorICAgICAgICAgICAgd2l0aCBzZWxmLl9ybG9jazoKKyAgICAgICAgICAgICAgICByZXMgPSBzZWxmLl9yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgIHNlbGYuX3NlbS5yZWxlYXNlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgICAgIGRlYWRsaW5lID0gdGltZS50aW1lKCkgKyB0aW1lb3V0CkBAIC0xMDksMTEgKzEwOCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRW1wdHkKICAgICAgICAgICAgICAgICBlbGlmIG5vdCBzZWxmLl9wb2xsKCk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVtcHR5Ci0gICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdigpCisgICAgICAgICAgICAgICAgcmVzID0gc2VsZi5fcmVjdl9ieXRlcygpCiAgICAgICAgICAgICAgICAgc2VsZi5fc2VtLnJlbGVhc2UoKQotICAgICAgICAgICAgICAgIHJldHVybiByZXMKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgc2VsZi5fcmxvY2sucmVsZWFzZSgpCisgICAgICAgICMgdW5zZXJpYWxpemUgdGhlIGRhdGEgYWZ0ZXIgaGF2aW5nIHJlbGVhc2VkIHRoZSBsb2NrCisgICAgICAgIHJldHVybiBGb3JraW5nUGlja2xlci5sb2FkcyhyZXMpCiAKICAgICBkZWYgcXNpemUoc2VsZik6CiAgICAgICAgICMgUmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3Igb24gTWFjIE9TWCBiZWNhdXNlIG9mIGJyb2tlbiBzZW1fZ2V0dmFsdWUoKQpAQCAtMTMzLDkgKzEzMywxMyBAQAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLl9jbG9zZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuX3JlYWRlci5jbG9zZSgpCi0gICAgICAgIGlmIHNlbGYuX2Nsb3NlOgotICAgICAgICAgICAgc2VsZi5fY2xvc2UoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl9yZWFkZXIuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY2xvc2UgPSBzZWxmLl9jbG9zZQorICAgICAgICAgICAgaWYgY2xvc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fY2xvc2UgPSBOb25lCisgICAgICAgICAgICAgICAgY2xvc2UoKQogCiAgICAgZGVmIGpvaW5fdGhyZWFkKHNlbGYpOgogICAgICAgICBkZWJ1ZygnUXVldWUuam9pbl90aHJlYWQoKScpCkBAIC0xNTgsNyArMTYyLDcgQEAKICAgICAgICAgc2VsZi5fYnVmZmVyLmNsZWFyKCkKICAgICAgICAgc2VsZi5fdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCgKICAgICAgICAgICAgIHRhcmdldD1RdWV1ZS5fZmVlZCwKLSAgICAgICAgICAgIGFyZ3M9KHNlbGYuX2J1ZmZlciwgc2VsZi5fbm90ZW1wdHksIHNlbGYuX3NlbmQsCisgICAgICAgICAgICBhcmdzPShzZWxmLl9idWZmZXIsIHNlbGYuX25vdGVtcHR5LCBzZWxmLl9zZW5kX2J5dGVzLAogICAgICAgICAgICAgICAgICAgc2VsZi5fd2xvY2ssIHNlbGYuX3dyaXRlci5jbG9zZSwgc2VsZi5faWdub3JlX2VwaXBlKSwKICAgICAgICAgICAgIG5hbWU9J1F1ZXVlRmVlZGVyVGhyZWFkJwogICAgICAgICAgICAgKQpAQCAtMjEwLDEwICsyMTQsOCBAQAogICAgICAgICAgICAgbm90ZW1wdHkucmVsZWFzZSgpCiAKICAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9mZWVkKGJ1ZmZlciwgbm90ZW1wdHksIHNlbmQsIHdyaXRlbG9jaywgY2xvc2UsIGlnbm9yZV9lcGlwZSk6CisgICAgZGVmIF9mZWVkKGJ1ZmZlciwgbm90ZW1wdHksIHNlbmRfYnl0ZXMsIHdyaXRlbG9jaywgY2xvc2UsIGlnbm9yZV9lcGlwZSk6CiAgICAgICAgIGRlYnVnKCdzdGFydGluZyB0aHJlYWQgdG8gZmVlZCBkYXRhIHRvIHBpcGUnKQotICAgICAgICBmcm9tIC51dGlsIGltcG9ydCBpc19leGl0aW5nCi0KICAgICAgICAgbmFjcXVpcmUgPSBub3RlbXB0eS5hY3F1aXJlCiAgICAgICAgIG5yZWxlYXNlID0gbm90ZW1wdHkucmVsZWFzZQogICAgICAgICBud2FpdCA9IG5vdGVtcHR5LndhaXQKQEAgLTI0MSwxMiArMjQzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgICAgICAgICAgICAgICAgICAjIHNlcmlhbGl6ZSB0aGUgZGF0YSBiZWZvcmUgYWNxdWlyaW5nIHRoZSBsb2NrCisgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBGb3JraW5nUGlja2xlci5kdW1wcyhvYmopCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiB3YWNxdWlyZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmQob2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYnl0ZXMob2JqKQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWNxdWlyZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kKG9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF9ieXRlcyhvYmopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JlbGVhc2UoKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgpAQCAtMjc5LDEwICsyODMsMTAgQEAKIAogY2xhc3MgSm9pbmFibGVRdWV1ZShRdWV1ZSk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wKToKLSAgICAgICAgUXVldWUuX19pbml0X18oc2VsZiwgbWF4c2l6ZSkKLSAgICAgICAgc2VsZi5fdW5maW5pc2hlZF90YXNrcyA9IFNlbWFwaG9yZSgwKQotICAgICAgICBzZWxmLl9jb25kID0gQ29uZGl0aW9uKCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWF4c2l6ZT0wLCAqLCBjdHgpOgorICAgICAgICBRdWV1ZS5fX2luaXRfXyhzZWxmLCBtYXhzaXplLCBjdHg9Y3R4KQorICAgICAgICBzZWxmLl91bmZpbmlzaGVkX3Rhc2tzID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl9jb25kID0gY3R4LkNvbmRpdGlvbigpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgogICAgICAgICByZXR1cm4gUXVldWUuX19nZXRzdGF0ZV9fKHNlbGYpICsgKHNlbGYuX2NvbmQsIHNlbGYuX3VuZmluaXNoZWRfdGFza3MpCkBAIC0zMzIsNDggKzMzNiwzNyBAQAogCiBjbGFzcyBTaW1wbGVRdWV1ZShvYmplY3QpOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciA9IFBpcGUoZHVwbGV4PUZhbHNlKQotICAgICAgICBzZWxmLl9ybG9jayA9IExvY2soKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBzZWxmLl9yZWFkZXIsIHNlbGYuX3dyaXRlciA9IGNvbm5lY3Rpb24uUGlwZShkdXBsZXg9RmFsc2UpCisgICAgICAgIHNlbGYuX3Jsb2NrID0gY3R4LkxvY2soKQogICAgICAgICBzZWxmLl9wb2xsID0gc2VsZi5fcmVhZGVyLnBvbGwKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICBzZWxmLl93bG9jayA9IE5vbmUKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX3dsb2NrID0gTG9jaygpCi0gICAgICAgIHNlbGYuX21ha2VfbWV0aG9kcygpCisgICAgICAgICAgICBzZWxmLl93bG9jayA9IGN0eC5Mb2NrKCkKIAogICAgIGRlZiBlbXB0eShzZWxmKToKICAgICAgICAgcmV0dXJuIG5vdCBzZWxmLl9wb2xsKCkKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyLCBzZWxmLl9ybG9jaywgc2VsZi5fd2xvY2spCiAKICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKICAgICAgICAgKHNlbGYuX3JlYWRlciwgc2VsZi5fd3JpdGVyLCBzZWxmLl9ybG9jaywgc2VsZi5fd2xvY2spID0gc3RhdGUKLSAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAotICAgIGRlZiBfbWFrZV9tZXRob2RzKHNlbGYpOgotICAgICAgICByZWN2ID0gc2VsZi5fcmVhZGVyLnJlY3YKLSAgICAgICAgcmFjcXVpcmUsIHJyZWxlYXNlID0gc2VsZi5fcmxvY2suYWNxdWlyZSwgc2VsZi5fcmxvY2sucmVsZWFzZQotICAgICAgICBkZWYgZ2V0KCk6Ci0gICAgICAgICAgICByYWNxdWlyZSgpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3YoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBycmVsZWFzZSgpCi0gICAgICAgIHNlbGYuZ2V0ID0gZ2V0CisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLl9ybG9jazoKKyAgICAgICAgICAgIHJlcyA9IHNlbGYuX3JlYWRlci5yZWN2X2J5dGVzKCkKKyAgICAgICAgIyB1bnNlcmlhbGl6ZSB0aGUgZGF0YSBhZnRlciBoYXZpbmcgcmVsZWFzZWQgdGhlIGxvY2sKKyAgICAgICAgcmV0dXJuIEZvcmtpbmdQaWNrbGVyLmxvYWRzKHJlcykKIAorICAgIGRlZiBwdXQoc2VsZiwgb2JqKToKKyAgICAgICAgIyBzZXJpYWxpemUgdGhlIGRhdGEgYmVmb3JlIGFjcXVpcmluZyB0aGUgbG9jaworICAgICAgICBvYmogPSBGb3JraW5nUGlja2xlci5kdW1wcyhvYmopCiAgICAgICAgIGlmIHNlbGYuX3dsb2NrIGlzIE5vbmU6CiAgICAgICAgICAgICAjIHdyaXRlcyB0byBhIG1lc3NhZ2Ugb3JpZW50ZWQgd2luMzIgcGlwZSBhcmUgYXRvbWljCi0gICAgICAgICAgICBzZWxmLnB1dCA9IHNlbGYuX3dyaXRlci5zZW5kCisgICAgICAgICAgICBzZWxmLl93cml0ZXIuc2VuZF9ieXRlcyhvYmopCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZW5kID0gc2VsZi5fd3JpdGVyLnNlbmQKLSAgICAgICAgICAgIHdhY3F1aXJlLCB3cmVsZWFzZSA9IHNlbGYuX3dsb2NrLmFjcXVpcmUsIHNlbGYuX3dsb2NrLnJlbGVhc2UKLSAgICAgICAgICAgIGRlZiBwdXQob2JqKToKLSAgICAgICAgICAgICAgICB3YWNxdWlyZSgpCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VuZChvYmopCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgd3JlbGVhc2UoKQotICAgICAgICAgICAgc2VsZi5wdXQgPSBwdXQKKyAgICAgICAgICAgIHdpdGggc2VsZi5fd2xvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVyLnNlbmRfYnl0ZXMob2JqKQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQppbmRleCA2NTZmYThmLi44ZjIwOWI0IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQorKysgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3JlZHVjdGlvbi5weQpAQCAtMSw2ICsxLDUgQEAKICMKLSMgTW9kdWxlIHRvIGFsbG93IGNvbm5lY3Rpb24gYW5kIHNvY2tldCBvYmplY3RzIHRvIGJlIHRyYW5zZmVycmVkCi0jIGJldHdlZW4gcHJvY2Vzc2VzCisjIE1vZHVsZSB3aGljaCBkZWFscyB3aXRoIHBpY2tsaW5nIG9mIG9iamVjdHMuCiAjCiAjIG11bHRpcHJvY2Vzc2luZy9yZWR1Y3Rpb24ucHkKICMKQEAgLTgsMjcgKzcsNTYgQEAKICMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgogIwogCi1fX2FsbF9fID0gWydyZWR1Y2Vfc29ja2V0JywgJ3JlZHVjZV9jb25uZWN0aW9uJywgJ3NlbmRfaGFuZGxlJywgJ3JlY3ZfaGFuZGxlJ10KLQoraW1wb3J0IGNvcHlyZWcKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBpbwogaW1wb3J0IG9zCi1pbXBvcnQgc3lzCitpbXBvcnQgcGlja2xlCiBpbXBvcnQgc29ja2V0Ci1pbXBvcnQgdGhyZWFkaW5nCi1pbXBvcnQgc3RydWN0Ci1pbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCiAKLWZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBjdXJyZW50X3Byb2Nlc3MKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IHJlZ2lzdGVyX2FmdGVyX2ZvcmssIGRlYnVnLCBzdWJfZGVidWcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnV0aWwgaW1wb3J0IGlzX2V4aXRpbmcsIHN1Yl93YXJuaW5nCitmcm9tIC4gaW1wb3J0IGNvbnRleHQKIAorX19hbGxfXyA9IFsnc2VuZF9oYW5kbGUnLCAncmVjdl9oYW5kbGUnLCAnRm9ya2luZ1BpY2tsZXInLCAncmVnaXN0ZXInLCAnZHVtcCddCisKKworSEFWRV9TRU5EX0hBTkRMRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvcgorICAgICAgICAgICAgICAgICAgICAoaGFzYXR0cihzb2NrZXQsICdDTVNHX0xFTicpIGFuZAorICAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihzb2NrZXQsICdTQ01fUklHSFRTJykgYW5kCisgICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKHNvY2tldC5zb2NrZXQsICdzZW5kbXNnJykpKQogCiAjCi0jCisjIFBpY2tsZXIgc3ViY2xhc3MKICMKIAotaWYgbm90KHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yIChoYXNhdHRyKHNvY2tldCwgJ0NNU0dfTEVOJykgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIoc29ja2V0LCAnU0NNX1JJR0hUUycpKSk6Ci0gICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3BpY2tsaW5nIG9mIGNvbm5lY3Rpb25zIG5vdCBzdXBwb3J0ZWQnKQorY2xhc3MgRm9ya2luZ1BpY2tsZXIocGlja2xlLlBpY2tsZXIpOgorICAgICcnJ1BpY2tsZXIgc3ViY2xhc3MgdXNlZCBieSBtdWx0aXByb2Nlc3NpbmcuJycnCisgICAgX2V4dHJhX3JlZHVjZXJzID0ge30KKyAgICBfY29weXJlZ19kaXNwYXRjaF90YWJsZSA9IGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MpCisgICAgICAgIHNlbGYuZGlzcGF0Y2hfdGFibGUgPSBzZWxmLl9jb3B5cmVnX2Rpc3BhdGNoX3RhYmxlLmNvcHkoKQorICAgICAgICBzZWxmLmRpc3BhdGNoX3RhYmxlLnVwZGF0ZShzZWxmLl9leHRyYV9yZWR1Y2VycykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiByZWdpc3RlcihjbHMsIHR5cGUsIHJlZHVjZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIGEgcmVkdWNlIGZ1bmN0aW9uIGZvciBhIHR5cGUuJycnCisgICAgICAgIGNscy5fZXh0cmFfcmVkdWNlcnNbdHlwZV0gPSByZWR1Y2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBkdW1wcyhjbHMsIG9iaiwgcHJvdG9jb2w9Tm9uZSk6CisgICAgICAgIGJ1ZiA9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjbHMoYnVmLCBwcm90b2NvbCkuZHVtcChvYmopCisgICAgICAgIHJldHVybiBidWYuZ2V0YnVmZmVyKCkKKworICAgIGxvYWRzID0gcGlja2xlLmxvYWRzCisKK3JlZ2lzdGVyID0gRm9ya2luZ1BpY2tsZXIucmVnaXN0ZXIKKworZGVmIGR1bXAob2JqLCBmaWxlLCBwcm90b2NvbD1Ob25lKToKKyAgICAnJydSZXBsYWNlbWVudCBmb3IgcGlja2xlLmR1bXAoKSB1c2luZyBGb3JraW5nUGlja2xlci4nJycKKyAgICBGb3JraW5nUGlja2xlcihmaWxlLCBwcm90b2NvbCkuZHVtcChvYmopCiAKICMKICMgUGxhdGZvcm0gc3BlY2lmaWMgZGVmaW5pdGlvbnMKQEAgLTM2LDIwICs2NCw0NCBAQAogCiBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAjIFdpbmRvd3MKLSAgICBfX2FsbF9fICs9IFsncmVkdWNlX3BpcGVfY29ubmVjdGlvbiddCisgICAgX19hbGxfXyArPSBbJ0R1cEhhbmRsZScsICdkdXBsaWNhdGUnLCAnc3RlYWxfaGFuZGxlJ10KICAgICBpbXBvcnQgX3dpbmFwaQogCisgICAgZGVmIGR1cGxpY2F0ZShoYW5kbGUsIHRhcmdldF9wcm9jZXNzPU5vbmUsIGluaGVyaXRhYmxlPUZhbHNlKToKKyAgICAgICAgJycnRHVwbGljYXRlIGEgaGFuZGxlLiAgKHRhcmdldF9wcm9jZXNzIGlzIGEgaGFuZGxlIG5vdCBhIHBpZCEpJycnCisgICAgICAgIGlmIHRhcmdldF9wcm9jZXNzIGlzIE5vbmU6CisgICAgICAgICAgICB0YXJnZXRfcHJvY2VzcyA9IF93aW5hcGkuR2V0Q3VycmVudFByb2Nlc3MoKQorICAgICAgICByZXR1cm4gX3dpbmFwaS5EdXBsaWNhdGVIYW5kbGUoCisgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIGhhbmRsZSwgdGFyZ2V0X3Byb2Nlc3MsCisgICAgICAgICAgICAwLCBpbmhlcml0YWJsZSwgX3dpbmFwaS5EVVBMSUNBVEVfU0FNRV9BQ0NFU1MpCisKKyAgICBkZWYgc3RlYWxfaGFuZGxlKHNvdXJjZV9waWQsIGhhbmRsZSk6CisgICAgICAgICcnJ1N0ZWFsIGEgaGFuZGxlIGZyb20gcHJvY2VzcyBpZGVudGlmaWVkIGJ5IHNvdXJjZV9waWQuJycnCisgICAgICAgIHNvdXJjZV9wcm9jZXNzX2hhbmRsZSA9IF93aW5hcGkuT3BlblByb2Nlc3MoCisgICAgICAgICAgICBfd2luYXBpLlBST0NFU1NfRFVQX0hBTkRMRSwgRmFsc2UsIHNvdXJjZV9waWQpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBfd2luYXBpLkR1cGxpY2F0ZUhhbmRsZSgKKyAgICAgICAgICAgICAgICBzb3VyY2VfcHJvY2Vzc19oYW5kbGUsIGhhbmRsZSwKKyAgICAgICAgICAgICAgICBfd2luYXBpLkdldEN1cnJlbnRQcm9jZXNzKCksIDAsIEZhbHNlLAorICAgICAgICAgICAgICAgIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTIHwgX3dpbmFwaS5EVVBMSUNBVEVfQ0xPU0VfU09VUkNFKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX3dpbmFwaS5DbG9zZUhhbmRsZShzb3VyY2VfcHJvY2Vzc19oYW5kbGUpCisKICAgICBkZWYgc2VuZF9oYW5kbGUoY29ubiwgaGFuZGxlLCBkZXN0aW5hdGlvbl9waWQpOgorICAgICAgICAnJydTZW5kIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJwogICAgICAgICBkaCA9IER1cEhhbmRsZShoYW5kbGUsIF93aW5hcGkuRFVQTElDQVRFX1NBTUVfQUNDRVNTLCBkZXN0aW5hdGlvbl9waWQpCiAgICAgICAgIGNvbm4uc2VuZChkaCkKIAogICAgIGRlZiByZWN2X2hhbmRsZShjb25uKToKKyAgICAgICAgJycnUmVjZWl2ZSBhIGhhbmRsZSBvdmVyIGEgbG9jYWwgY29ubmVjdGlvbi4nJycKICAgICAgICAgcmV0dXJuIGNvbm4ucmVjdigpLmRldGFjaCgpCiAKICAgICBjbGFzcyBEdXBIYW5kbGUob2JqZWN0KToKKyAgICAgICAgJycnUGlja2xhYmxlIHdyYXBwZXIgZm9yIGEgaGFuZGxlLicnJwogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgaGFuZGxlLCBhY2Nlc3MsIHBpZD1Ob25lKToKLSAgICAgICAgICAgICMgZHVwbGljYXRlIGhhbmRsZSBmb3IgcHJvY2VzcyB3aXRoIGdpdmVuIHBpZAogICAgICAgICAgICAgaWYgcGlkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBXZSBqdXN0IGR1cGxpY2F0ZSB0aGUgaGFuZGxlIGluIHRoZSBjdXJyZW50IHByb2Nlc3MgYW5kCisgICAgICAgICAgICAgICAgIyBsZXQgdGhlIHJlY2VpdmluZyBwcm9jZXNzIHN0ZWFsIHRoZSBoYW5kbGUuCiAgICAgICAgICAgICAgICAgcGlkID0gb3MuZ2V0cGlkKCkKICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwgcGlkKQogICAgICAgICAgICAgdHJ5OgpAQCAtNjIsOSArMTE0LDEyIEBACiAgICAgICAgICAgICBzZWxmLl9waWQgPSBwaWQKIAogICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBoYW5kbGUuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJwogICAgICAgICAgICAgIyByZXRyaWV2ZSBoYW5kbGUgZnJvbSBwcm9jZXNzIHdoaWNoIGN1cnJlbnRseSBvd25zIGl0CiAgICAgICAgICAgICBpZiBzZWxmLl9waWQgPT0gb3MuZ2V0cGlkKCk6CisgICAgICAgICAgICAgICAgIyBUaGUgaGFuZGxlIGhhcyBhbHJlYWR5IGJlZW4gZHVwbGljYXRlZCBmb3IgdGhpcyBwcm9jZXNzLgogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9oYW5kbGUKKyAgICAgICAgICAgICMgV2UgbXVzdCBzdGVhbCB0aGUgaGFuZGxlIGZyb20gdGhlIHByb2Nlc3Mgd2hvc2UgcGlkIGlzIHNlbGYuX3BpZC4KICAgICAgICAgICAgIHByb2MgPSBfd2luYXBpLk9wZW5Qcm9jZXNzKF93aW5hcGkuUFJPQ0VTU19EVVBfSEFORExFLCBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BpZCkKICAgICAgICAgICAgIHRyeToKQEAgLTc0LDIwNyArMTI5LDExMiBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKHByb2MpCiAKLSAgICBjbGFzcyBEdXBTb2NrZXQob2JqZWN0KToKLSAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgotICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQotICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKLSAgICAgICAgICAgIHNlbGYuX2lkID0gcmVzb3VyY2Vfc2hhcmVyLnJlZ2lzdGVyKHNlbmQsIG5ld19zb2NrLmNsb3NlKQotCi0gICAgICAgIGRlZiBkZXRhY2goc2VsZik6Ci0gICAgICAgICAgICBjb25uID0gcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKLSAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgY29ubi5jbG9zZSgpCi0KLSAgICBkZWYgcmVkdWNlX3NvY2tldChzKToKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoRHVwU29ja2V0KHMpLCkKLQotICAgIGRlZiByZWJ1aWxkX3NvY2tldChkcyk6Ci0gICAgICAgIHJldHVybiBkcy5kZXRhY2goKQotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBoYW5kbGUgPSBjb25uLmZpbGVubygpCi0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChoYW5kbGUsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBkcyA9IER1cFNvY2tldChzKQotICAgICAgICAgICAgcmV0dXJuIHJlYnVpbGRfY29ubmVjdGlvbiwgKGRzLCBjb25uLnJlYWRhYmxlLCBjb25uLndyaXRhYmxlKQotCi0gICAgZGVmIHJlYnVpbGRfY29ubmVjdGlvbihkcywgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ29ubmVjdGlvbgotICAgICAgICBzb2NrID0gZHMuZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIENvbm5lY3Rpb24oc29jay5kZXRhY2goKSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0gICAgZGVmIHJlZHVjZV9waXBlX2Nvbm5lY3Rpb24oY29ubik6Ci0gICAgICAgIGFjY2VzcyA9ICgoX3dpbmFwaS5GSUxFX0dFTkVSSUNfUkVBRCBpZiBjb25uLnJlYWRhYmxlIGVsc2UgMCkgfAotICAgICAgICAgICAgICAgICAgKF93aW5hcGkuRklMRV9HRU5FUklDX1dSSVRFIGlmIGNvbm4ud3JpdGFibGUgZWxzZSAwKSkKLSAgICAgICAgZGggPSBEdXBIYW5kbGUoY29ubi5maWxlbm8oKSwgYWNjZXNzKQotICAgICAgICByZXR1cm4gcmVidWlsZF9waXBlX2Nvbm5lY3Rpb24sIChkaCwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX3BpcGVfY29ubmVjdGlvbihkaCwgcmVhZGFibGUsIHdyaXRhYmxlKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgUGlwZUNvbm5lY3Rpb24KLSAgICAgICAgaGFuZGxlID0gZGguZGV0YWNoKCkKLSAgICAgICAgcmV0dXJuIFBpcGVDb25uZWN0aW9uKGhhbmRsZSwgcmVhZGFibGUsIHdyaXRhYmxlKQotCiBlbHNlOgogICAgICMgVW5peAorICAgIF9fYWxsX18gKz0gWydEdXBGZCcsICdzZW5kZmRzJywgJ3JlY3ZmZHMnXQorICAgIGltcG9ydCBhcnJheQogCiAgICAgIyBPbiBNYWNPU1ggd2Ugc2hvdWxkIGFja25vd2xlZGdlIHJlY2VpcHQgb2YgZmRzIC0tIHNlZSBJc3N1ZTE0NjY5CiAgICAgQUNLTk9XTEVER0UgPSBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicKIAotICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6Ci0gICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgcy5zZW5kbXNnKFtiJ3gnXSwgWyhzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNDTV9SSUdIVFMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCJAaSIsIGhhbmRsZSkpXSkKLSAgICAgICAgaWYgQUNLTk9XTEVER0UgYW5kIGNvbm4ucmVjdl9ieXRlcygpICE9IGInQUNLJzoKKyAgICBkZWYgc2VuZGZkcyhzb2NrLCBmZHMpOgorICAgICAgICAnJydTZW5kIGFuIGFycmF5IG9mIGZkcyBvdmVyIGFuIEFGX1VOSVggc29ja2V0LicnJworICAgICAgICBmZHMgPSBhcnJheS5hcnJheSgnaScsIGZkcykKKyAgICAgICAgbXNnID0gYnl0ZXMoW2xlbihmZHMpICUgMjU2XSkKKyAgICAgICAgc29jay5zZW5kbXNnKFttc2ddLCBbKHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU0NNX1JJR0hUUywgZmRzKV0pCisgICAgICAgIGlmIEFDS05PV0xFREdFIGFuZCBzb2NrLnJlY3YoMSkgIT0gYidBJzoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZGlkIG5vdCByZWNlaXZlIGFja25vd2xlZGdlbWVudCBvZiBmZCcpCiAKLSAgICBkZWYgcmVjdl9oYW5kbGUoY29ubik6Ci0gICAgICAgIHNpemUgPSBzdHJ1Y3QuY2FsY3NpemUoIkBpIikKKyAgICBkZWYgcmVjdmZkcyhzb2NrLCBzaXplKToKKyAgICAgICAgJycnUmVjZWl2ZSBhbiBhcnJheSBvZiBmZHMgb3ZlciBhbiBBRl9VTklYIHNvY2tldC4nJycKKyAgICAgICAgYSA9IGFycmF5LmFycmF5KCdpJykKKyAgICAgICAgYnl0ZXNfc2l6ZSA9IGEuaXRlbXNpemUgKiBzaXplCisgICAgICAgIG1zZywgYW5jZGF0YSwgZmxhZ3MsIGFkZHIgPSBzb2NrLnJlY3Ztc2coMSwgc29ja2V0LkNNU0dfTEVOKGJ5dGVzX3NpemUpKQorICAgICAgICBpZiBub3QgbXNnIGFuZCBub3QgYW5jZGF0YToKKyAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIEFDS05PV0xFREdFOgorICAgICAgICAgICAgICAgIHNvY2suc2VuZChiJ0EnKQorICAgICAgICAgICAgaWYgbGVuKGFuY2RhdGEpICE9IDE6CisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdyZWNlaXZlZCAlZCBpdGVtcyBvZiBhbmNkYXRhJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihhbmNkYXRhKSkKKyAgICAgICAgICAgIGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSwgY21zZ19kYXRhID0gYW5jZGF0YVswXQorICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCisgICAgICAgICAgICAgICAgY21zZ190eXBlID09IHNvY2tldC5TQ01fUklHSFRTKToKKyAgICAgICAgICAgICAgICBpZiBsZW4oY21zZ19kYXRhKSAlIGEuaXRlbXNpemUgIT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICAgICAgICAgIGEuZnJvbWJ5dGVzKGNtc2dfZGF0YSkKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGEpICUgMjU2ID09IG1zZ1swXQorICAgICAgICAgICAgICAgIHJldHVybiBsaXN0KGEpCisgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignSW52YWxpZCBkYXRhIHJlY2VpdmVkJykKKworICAgIGRlZiBzZW5kX2hhbmRsZShjb25uLCBoYW5kbGUsIGRlc3RpbmF0aW9uX3BpZCk6CisgICAgICAgICcnJ1NlbmQgYSBoYW5kbGUgb3ZlciBhIGxvY2FsIGNvbm5lY3Rpb24uJycnCiAgICAgICAgIHdpdGggc29ja2V0LmZyb21mZChjb25uLmZpbGVubygpLCBzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKSBhcyBzOgotICAgICAgICAgICAgbXNnLCBhbmNkYXRhLCBmbGFncywgYWRkciA9IHMucmVjdm1zZygxLCBzb2NrZXQuQ01TR19MRU4oc2l6ZSkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgQUNLTk9XTEVER0U6Ci0gICAgICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhiJ0FDSycpCi0gICAgICAgICAgICAgICAgY21zZ19sZXZlbCwgY21zZ190eXBlLCBjbXNnX2RhdGEgPSBhbmNkYXRhWzBdCi0gICAgICAgICAgICAgICAgaWYgKGNtc2dfbGV2ZWwgPT0gc29ja2V0LlNPTF9TT0NLRVQgYW5kCi0gICAgICAgICAgICAgICAgICAgIGNtc2dfdHlwZSA9PSBzb2NrZXQuU0NNX1JJR0hUUyk6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCJAaSIsIGNtc2dfZGF0YVs6c2l6ZV0pWzBdCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IsIHN0cnVjdC5lcnJvcik6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdJbnZhbGlkIGRhdGEgcmVjZWl2ZWQnKQorICAgICAgICAgICAgc2VuZGZkcyhzLCBbaGFuZGxlXSkKIAotICAgIGNsYXNzIER1cEZkKG9iamVjdCk6Ci0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6Ci0gICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCi0gICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgotICAgICAgICAgICAgICAgIHNlbmRfaGFuZGxlKGNvbm4sIG5ld19mZCwgcGlkKQotICAgICAgICAgICAgZGVmIGNsb3NlKCk6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UobmV3X2ZkKQotICAgICAgICAgICAgc2VsZi5faWQgPSByZXNvdXJjZV9zaGFyZXIucmVnaXN0ZXIoc2VuZCwgY2xvc2UpCisgICAgZGVmIHJlY3ZfaGFuZGxlKGNvbm4pOgorICAgICAgICAnJydSZWNlaXZlIGEgaGFuZGxlIG92ZXIgYSBsb2NhbCBjb25uZWN0aW9uLicnJworICAgICAgICB3aXRoIHNvY2tldC5mcm9tZmQoY29ubi5maWxlbm8oKSwgc29ja2V0LkFGX1VOSVgsIHNvY2tldC5TT0NLX1NUUkVBTSkgYXMgczoKKyAgICAgICAgICAgIHJldHVybiByZWN2ZmRzKHMsIDEpWzBdCiAKLSAgICAgICAgZGVmIGRldGFjaChzZWxmKToKLSAgICAgICAgICAgIGNvbm4gPSByZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlY3ZfaGFuZGxlKGNvbm4pCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQorICAgIGRlZiBEdXBGZChmZCk6CisgICAgICAgICcnJ1JldHVybiBhIHdyYXBwZXIgZm9yIGFuIGZkLicnJworICAgICAgICBwb3Blbl9vYmogPSBjb250ZXh0LmdldF9zcGF3bmluZ19wb3BlbigpCisgICAgICAgIGlmIHBvcGVuX29iaiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBwb3Blbl9vYmouRHVwRmQocG9wZW5fb2JqLmR1cGxpY2F0ZV9mb3JfY2hpbGQoZmQpKQorICAgICAgICBlbGlmIEhBVkVfU0VORF9IQU5ETEU6CisgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICAgICAgcmV0dXJuIHJlc291cmNlX3NoYXJlci5EdXBGZChmZCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1NDTV9SSUdIVFMgYXBwZWFycyBub3QgdG8gYmUgYXZhaWxhYmxlJykKIAotICAgIGRlZiByZWR1Y2Vfc29ja2V0KHMpOgorIworIyBUcnkgbWFraW5nIHNvbWUgY2FsbGFibGUgdHlwZXMgcGlja2xhYmxlCisjCisKK2RlZiBfcmVkdWNlX21ldGhvZChtKToKKyAgICBpZiBtLl9fc2VsZl9fIGlzIE5vbmU6CisgICAgICAgIHJldHVybiBnZXRhdHRyLCAobS5fX2NsYXNzX18sIG0uX19mdW5jX18uX19uYW1lX18pCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fc2VsZl9fLCBtLl9fZnVuY19fLl9fbmFtZV9fKQorY2xhc3MgX0M6CisgICAgZGVmIGYoc2VsZik6CisgICAgICAgIHBhc3MKK3JlZ2lzdGVyKHR5cGUoX0MoKS5mKSwgX3JlZHVjZV9tZXRob2QpCisKKworZGVmIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IobSk6CisgICAgcmV0dXJuIGdldGF0dHIsIChtLl9fb2JqY2xhc3NfXywgbS5fX25hbWVfXykKK3JlZ2lzdGVyKHR5cGUobGlzdC5hcHBlbmQpLCBfcmVkdWNlX21ldGhvZF9kZXNjcmlwdG9yKQorcmVnaXN0ZXIodHlwZShpbnQuX19hZGRfXyksIF9yZWR1Y2VfbWV0aG9kX2Rlc2NyaXB0b3IpCisKKworZGVmIF9yZWR1Y2VfcGFydGlhbChwKToKKyAgICByZXR1cm4gX3JlYnVpbGRfcGFydGlhbCwgKHAuZnVuYywgcC5hcmdzLCBwLmtleXdvcmRzIG9yIHt9KQorZGVmIF9yZWJ1aWxkX3BhcnRpYWwoZnVuYywgYXJncywga2V5d29yZHMpOgorICAgIHJldHVybiBmdW5jdG9vbHMucGFydGlhbChmdW5jLCAqYXJncywgKiprZXl3b3JkcykKK3JlZ2lzdGVyKGZ1bmN0b29scy5wYXJ0aWFsLCBfcmVkdWNlX3BhcnRpYWwpCisKKyMKKyMgTWFrZSBzb2NrZXRzIHBpY2tsYWJsZQorIworCitpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CisgICAgICAgIGZyb20gLnJlc291cmNlX3NoYXJlciBpbXBvcnQgRHVwU29ja2V0CisgICAgICAgIHJldHVybiBfcmVidWlsZF9zb2NrZXQsIChEdXBTb2NrZXQocyksKQorICAgIGRlZiBfcmVidWlsZF9zb2NrZXQoZHMpOgorICAgICAgICByZXR1cm4gZHMuZGV0YWNoKCkKKyAgICByZWdpc3Rlcihzb2NrZXQuc29ja2V0LCBfcmVkdWNlX3NvY2tldCkKKworZWxzZToKKyAgICBkZWYgX3JlZHVjZV9zb2NrZXQocyk6CiAgICAgICAgIGRmID0gRHVwRmQocy5maWxlbm8oKSkKLSAgICAgICAgcmV0dXJuIHJlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCi0KLSAgICBkZWYgcmVidWlsZF9zb2NrZXQoZGYsIGZhbWlseSwgdHlwZSwgcHJvdG8pOgorICAgICAgICByZXR1cm4gX3JlYnVpbGRfc29ja2V0LCAoZGYsIHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pCisgICAgZGVmIF9yZWJ1aWxkX3NvY2tldChkZiwgZmFtaWx5LCB0eXBlLCBwcm90byk6CiAgICAgICAgIGZkID0gZGYuZGV0YWNoKCkKLSAgICAgICAgcyA9IHNvY2tldC5mcm9tZmQoZmQsIGZhbWlseSwgdHlwZSwgcHJvdG8pCi0gICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICByZXR1cm4gcwotCi0gICAgZGVmIHJlZHVjZV9jb25uZWN0aW9uKGNvbm4pOgotICAgICAgICBkZiA9IER1cEZkKGNvbm4uZmlsZW5vKCkpCi0gICAgICAgIHJldHVybiByZWJ1aWxkX2Nvbm5lY3Rpb24sIChkZiwgY29ubi5yZWFkYWJsZSwgY29ubi53cml0YWJsZSkKLQotICAgIGRlZiByZWJ1aWxkX2Nvbm5lY3Rpb24oZGYsIHJlYWRhYmxlLCB3cml0YWJsZSk6Ci0gICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENvbm5lY3Rpb24KLSAgICAgICAgZmQgPSBkZi5kZXRhY2goKQotICAgICAgICByZXR1cm4gQ29ubmVjdGlvbihmZCwgcmVhZGFibGUsIHdyaXRhYmxlKQotCi0jCi0jIFNlcnZlciB3aGljaCBzaGFyZXMgcmVnaXN0ZXJlZCByZXNvdXJjZXMgd2l0aCBjbGllbnRzCi0jCi0KLWNsYXNzIFJlc291cmNlU2hhcmVyKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBzZWxmLl9rZXkgPSAwCi0gICAgICAgIHNlbGYuX2NhY2hlID0ge30KLSAgICAgICAgc2VsZi5fb2xkX2xvY2tzID0gW10KLSAgICAgICAgc2VsZi5fbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKLSAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCi0gICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCi0gICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBSZXNvdXJjZVNoYXJlci5fYWZ0ZXJmb3JrKQotCi0gICAgZGVmIHJlZ2lzdGVyKHNlbGYsIHNlbmQsIGNsb3NlKToKLSAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgotICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKLSAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCi0gICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQotICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIGFkZHJlc3MsIGtleSA9IGlkZW50Ci0gICAgICAgIGMgPSBDbGllbnQoYWRkcmVzcywgYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQotICAgICAgICByZXR1cm4gYwotCi0gICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgQ2xpZW50Ci0gICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIGlmIHNlbGYuX2FkZHJlc3MgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgYyA9IENsaWVudChzZWxmLl9hZGRyZXNzLCBhdXRoa2V5PWN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCi0gICAgICAgICAgICAgICAgYy5zZW5kKE5vbmUpCi0gICAgICAgICAgICAgICAgYy5jbG9zZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fdGhyZWFkLmpvaW4odGltZW91dCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl90aHJlYWQuaXNfYWxpdmUoKToKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm4oJ1Jlc291cmNlU2hhcmVyIHRocmVhZCBkaWQgbm90IHN0b3Agd2hlbiBhc2tlZCcpCi0gICAgICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKLSAgICAgICAgICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQotICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQotICAgICAgICAgICAgICAgIGZvciBrZXksIChzZW5kLCBjbG9zZSkgaW4gc2VsZi5fY2FjaGUuaXRlbXMoKToKLSAgICAgICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLQotICAgIGRlZiBfYWZ0ZXJmb3JrKHNlbGYpOgotICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6Ci0gICAgICAgICAgICBjbG9zZSgpCi0gICAgICAgIHNlbGYuX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgIyBJZiBzZWxmLl9sb2NrIHdhcyBsb2NrZWQgYXQgdGhlIHRpbWUgb2YgdGhlIGZvcmssIGl0IG1heSBiZSBicm9rZW4KLSAgICAgICAgIyAtLSBzZWUgaXNzdWUgNjcyMS4gIFJlcGxhY2UgaXQgd2l0aG91dCBsZXR0aW5nIGl0IGJlIGdjJ2VkLgotICAgICAgICBzZWxmLl9vbGRfbG9ja3MuYXBwZW5kKHNlbGYuX2xvY2spCi0gICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCi0gICAgICAgIGlmIHNlbGYuX2xpc3RlbmVyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIuY2xvc2UoKQotICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKLSAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQotCi0gICAgZGVmIF9zdGFydChzZWxmKToKLSAgICAgICAgZnJvbSAuY29ubmVjdGlvbiBpbXBvcnQgTGlzdGVuZXIKLSAgICAgICAgYXNzZXJ0IHNlbGYuX2xpc3RlbmVyIGlzIE5vbmUKLSAgICAgICAgZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCi0gICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQotICAgICAgICBzZWxmLl9hZGRyZXNzID0gc2VsZi5fbGlzdGVuZXIuYWRkcmVzcwotICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5fc2VydmUpCi0gICAgICAgIHQuZGFlbW9uID0gVHJ1ZQotICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgc2VsZi5fdGhyZWFkID0gdAotCi0gICAgZGVmIF9zZXJ2ZShzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzaWduYWwsICdwdGhyZWFkX3NpZ21hc2snKToKLSAgICAgICAgICAgIHNpZ25hbC5wdGhyZWFkX3NpZ21hc2soc2lnbmFsLlNJR19CTE9DSywgcmFuZ2UoMSwgc2lnbmFsLk5TSUcpKQotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGNvbm4gPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQotICAgICAgICAgICAgICAgIG1zZyA9IGNvbm4ucmVjdigpCi0gICAgICAgICAgICAgICAgaWYgbXNnIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAga2V5LCBkZXN0aW5hdGlvbl9waWQgPSBtc2cKLSAgICAgICAgICAgICAgICBzZW5kLCBjbG9zZSA9IHNlbGYuX2NhY2hlLnBvcChrZXkpCi0gICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCi0gICAgICAgICAgICAgICAgY2xvc2UoKQotICAgICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIGlmIG5vdCBpc19leGl0aW5nKCk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgICAgICAgICAgICAgc3ViX3dhcm5pbmcoCi0gICAgICAgICAgICAgICAgICAgICAgICAndGhyZWFkIGZvciBzaGFyaW5nIGhhbmRsZXMgcmFpc2VkIGV4Y2VwdGlvbiA6XG4nICsKLSAgICAgICAgICAgICAgICAgICAgICAgICctJyo3OSArICdcbicgKyB0cmFjZWJhY2suZm9ybWF0X2V4YygpICsgJy0nKjc5Ci0gICAgICAgICAgICAgICAgICAgICAgICApCi0KLXJlc291cmNlX3NoYXJlciA9IFJlc291cmNlU2hhcmVyKCkKKyAgICAgICAgcmV0dXJuIHNvY2tldC5zb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90bywgZmlsZW5vPWZkKQorICAgIHJlZ2lzdGVyKHNvY2tldC5zb2NrZXQsIF9yZWR1Y2Vfc29ja2V0KQpkaWZmIC0tZ2l0IGEvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkgYi9MaWIvbXVsdGlwcm9jZXNzaW5nL3Jlc291cmNlX3NoYXJlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTQ2ZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9yZXNvdXJjZV9zaGFyZXIucHkKQEAgLTAsMCArMSwxNTggQEAKKyMKKyMgV2UgdXNlIGEgYmFja2dyb3VuZCB0aHJlYWQgZm9yIHNoYXJpbmcgZmRzIG9uIFVuaXgsIGFuZCBmb3Igc2hhcmluZyBzb2NrZXRzIG9uCisjIFdpbmRvd3MuCisjCisjIEEgY2xpZW50IHdoaWNoIHdhbnRzIHRvIHBpY2tsZSBhIHJlc291cmNlIHJlZ2lzdGVycyBpdCB3aXRoIHRoZSByZXNvdXJjZQorIyBzaGFyZXIgYW5kIGdldHMgYW4gaWRlbnRpZmllciBpbiByZXR1cm4uICBUaGUgdW5waWNrbGluZyBwcm9jZXNzIHdpbGwgY29ubmVjdAorIyB0byB0aGUgcmVzb3VyY2Ugc2hhcmVyLCBzZW5kcyB0aGUgaWRlbnRpZmllciBhbmQgaXRzIHBpZCwgYW5kIHRoZW4gcmVjZWl2ZXMKKyMgdGhlIHJlc291cmNlLgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKKworZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHJlZHVjdGlvbgorZnJvbSAuIGltcG9ydCB1dGlsCisKK19fYWxsX18gPSBbJ3N0b3AnXQorCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIF9fYWxsX18gKz0gWydEdXBTb2NrZXQnXQorCisgICAgY2xhc3MgRHVwU29ja2V0KG9iamVjdCk6CisgICAgICAgICcnJ1BpY2tsYWJsZSB3cmFwcGVyIGZvciBhIHNvY2tldC4nJycKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvY2spOgorICAgICAgICAgICAgbmV3X3NvY2sgPSBzb2NrLmR1cCgpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHNoYXJlID0gbmV3X3NvY2suc2hhcmUocGlkKQorICAgICAgICAgICAgICAgIGNvbm4uc2VuZF9ieXRlcyhzaGFyZSkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBuZXdfc29jay5jbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBzb2NrZXQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLicnJworICAgICAgICAgICAgd2l0aCBfcmVzb3VyY2Vfc2hhcmVyLmdldF9jb25uZWN0aW9uKHNlbGYuX2lkKSBhcyBjb25uOgorICAgICAgICAgICAgICAgIHNoYXJlID0gY29ubi5yZWN2X2J5dGVzKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc29ja2V0LmZyb21zaGFyZShzaGFyZSkKKworZWxzZToKKyAgICBfX2FsbF9fICs9IFsnRHVwRmQnXQorCisgICAgY2xhc3MgRHVwRmQob2JqZWN0KToKKyAgICAgICAgJycnV3JhcHBlciBmb3IgZmQgd2hpY2ggY2FuIGJlIHVzZWQgYXQgYW55IHRpbWUuJycnCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZCk6CisgICAgICAgICAgICBuZXdfZmQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBkZWYgc2VuZChjb25uLCBwaWQpOgorICAgICAgICAgICAgICAgIHJlZHVjdGlvbi5zZW5kX2hhbmRsZShjb25uLCBuZXdfZmQsIHBpZCkKKyAgICAgICAgICAgIGRlZiBjbG9zZSgpOgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKG5ld19mZCkKKyAgICAgICAgICAgIHNlbGYuX2lkID0gX3Jlc291cmNlX3NoYXJlci5yZWdpc3RlcihzZW5kLCBjbG9zZSkKKworICAgICAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAgICAgJycnR2V0IHRoZSBmZC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uY2UuJycnCisgICAgICAgICAgICB3aXRoIF9yZXNvdXJjZV9zaGFyZXIuZ2V0X2Nvbm5lY3Rpb24oc2VsZi5faWQpIGFzIGNvbm46CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlZHVjdGlvbi5yZWN2X2hhbmRsZShjb25uKQorCisKK2NsYXNzIF9SZXNvdXJjZVNoYXJlcihvYmplY3QpOgorICAgICcnJ01hbmFnZXIgZm9yIHJlc291Y2VzIHVzaW5nIGJhY2tncm91bmQgdGhyZWFkLicnJworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fa2V5ID0gMAorICAgICAgICBzZWxmLl9jYWNoZSA9IHt9CisgICAgICAgIHNlbGYuX29sZF9sb2NrcyA9IFtdCisgICAgICAgIHNlbGYuX2xvY2sgPSB0aHJlYWRpbmcuTG9jaygpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTm9uZQorICAgICAgICBzZWxmLl9hZGRyZXNzID0gTm9uZQorICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgIHV0aWwucmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBfUmVzb3VyY2VTaGFyZXIuX2FmdGVyZm9yaykKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBzZW5kLCBjbG9zZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIHJlc291cmNlLCByZXR1cm5pbmcgYW4gaWRlbnRpZmllci4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0YXJ0KCkKKyAgICAgICAgICAgIHNlbGYuX2tleSArPSAxCisgICAgICAgICAgICBzZWxmLl9jYWNoZVtzZWxmLl9rZXldID0gKHNlbmQsIGNsb3NlKQorICAgICAgICAgICAgcmV0dXJuIChzZWxmLl9hZGRyZXNzLCBzZWxmLl9rZXkpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdldF9jb25uZWN0aW9uKGlkZW50KToKKyAgICAgICAgJycnUmV0dXJuIGNvbm5lY3Rpb24gZnJvbSB3aGljaCB0byByZWNlaXZlIGlkZW50aWZpZWQgcmVzb3VyY2UuJycnCisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IENsaWVudAorICAgICAgICBhZGRyZXNzLCBrZXkgPSBpZGVudAorICAgICAgICBjID0gQ2xpZW50KGFkZHJlc3MsIGF1dGhrZXk9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5KQorICAgICAgICBjLnNlbmQoKGtleSwgb3MuZ2V0cGlkKCkpKQorICAgICAgICByZXR1cm4gYworCisgICAgZGVmIHN0b3Aoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgJycnU3RvcCB0aGUgYmFja2dyb3VuZCB0aHJlYWQgYW5kIGNsZWFyIHJlZ2lzdGVyZWQgcmVzb3VyY2VzLicnJworICAgICAgICBmcm9tIC5jb25uZWN0aW9uIGltcG9ydCBDbGllbnQKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fYWRkcmVzcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBjID0gQ2xpZW50KHNlbGYuX2FkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoa2V5PXByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuYXV0aGtleSkKKyAgICAgICAgICAgICAgICBjLnNlbmQoTm9uZSkKKyAgICAgICAgICAgICAgICBjLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQuam9pbih0aW1lb3V0KQorICAgICAgICAgICAgICAgIGlmIHNlbGYuX3RocmVhZC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICB1dGlsLnN1Yl93YXJuaW5nKCdfUmVzb3VyY2VTaGFyZXIgdGhyZWFkIGRpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vdCBzdG9wIHdoZW4gYXNrZWQnKQorICAgICAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkcmVzcyA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLl9saXN0ZW5lciA9IE5vbmUKKyAgICAgICAgICAgICAgICBmb3Iga2V5LCAoc2VuZCwgY2xvc2UpIGluIHNlbGYuX2NhY2hlLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisKKyAgICBkZWYgX2FmdGVyZm9yayhzZWxmKToKKyAgICAgICAgZm9yIGtleSwgKHNlbmQsIGNsb3NlKSBpbiBzZWxmLl9jYWNoZS5pdGVtcygpOgorICAgICAgICAgICAgY2xvc2UoKQorICAgICAgICBzZWxmLl9jYWNoZS5jbGVhcigpCisgICAgICAgICMgSWYgc2VsZi5fbG9jayB3YXMgbG9ja2VkIGF0IHRoZSB0aW1lIG9mIHRoZSBmb3JrLCBpdCBtYXkgYmUgYnJva2VuCisgICAgICAgICMgLS0gc2VlIGlzc3VlIDY3MjEuICBSZXBsYWNlIGl0IHdpdGhvdXQgbGV0dGluZyBpdCBiZSBnYydlZC4KKyAgICAgICAgc2VsZi5fb2xkX2xvY2tzLmFwcGVuZChzZWxmLl9sb2NrKQorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBpZiBzZWxmLl9saXN0ZW5lciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBOb25lCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBOb25lCisgICAgICAgIHNlbGYuX3RocmVhZCA9IE5vbmUKKworICAgIGRlZiBfc3RhcnQoc2VsZik6CisgICAgICAgIGZyb20gLmNvbm5lY3Rpb24gaW1wb3J0IExpc3RlbmVyCisgICAgICAgIGFzc2VydCBzZWxmLl9saXN0ZW5lciBpcyBOb25lCisgICAgICAgIHV0aWwuZGVidWcoJ3N0YXJ0aW5nIGxpc3RlbmVyIGFuZCB0aHJlYWQgZm9yIHNlbmRpbmcgaGFuZGxlcycpCisgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gTGlzdGVuZXIoYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXkpCisgICAgICAgIHNlbGYuX2FkZHJlc3MgPSBzZWxmLl9saXN0ZW5lci5hZGRyZXNzCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLl9zZXJ2ZSkKKyAgICAgICAgdC5kYWVtb24gPSBUcnVlCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzZWxmLl90aHJlYWQgPSB0CisKKyAgICBkZWYgX3NlcnZlKHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ3B0aHJlYWRfc2lnbWFzaycpOgorICAgICAgICAgICAgc2lnbmFsLnB0aHJlYWRfc2lnbWFzayhzaWduYWwuU0lHX0JMT0NLLCByYW5nZSgxLCBzaWduYWwuTlNJRykpCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKSBhcyBjb25uOgorICAgICAgICAgICAgICAgICAgICBtc2cgPSBjb25uLnJlY3YoKQorICAgICAgICAgICAgICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGtleSwgZGVzdGluYXRpb25fcGlkID0gbXNnCisgICAgICAgICAgICAgICAgICAgIHNlbmQsIGNsb3NlID0gc2VsZi5fY2FjaGUucG9wKGtleSkKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VuZChjb25uLCBkZXN0aW5hdGlvbl9waWQpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZSgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgaWYgbm90IHV0aWwuaXNfZXhpdGluZygpOgorICAgICAgICAgICAgICAgICAgICBzeXMuZXhjZXB0aG9vaygqc3lzLmV4Y19pbmZvKCkpCisKKworX3Jlc291cmNlX3NoYXJlciA9IF9SZXNvdXJjZVNoYXJlcigpCitzdG9wID0gX3Jlc291cmNlX3NoYXJlci5zdG9wCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZV90cmFja2VyLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTc3MzhlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmVfdHJhY2tlci5weQpAQCAtMCwwICsxLDE0MyBAQAorIworIyBPbiBVbml4IHdlIHJ1biBhIHNlcnZlciBwcm9jZXNzIHdoaWNoIGtlZXBzIHRyYWNrIG9mIHVubGlua2VkCisjIHNlbWFwaG9yZXMuIFRoZSBzZXJ2ZXIgaWdub3JlcyBTSUdJTlQgYW5kIFNJR1RFUk0gYW5kIHJlYWRzIGZyb20gYQorIyBwaXBlLiAgRXZlcnkgb3RoZXIgcHJvY2VzcyBvZiB0aGUgcHJvZ3JhbSBoYXMgYSBjb3B5IG9mIHRoZSB3cml0YWJsZQorIyBlbmQgb2YgdGhlIHBpcGUsIHNvIHdlIGdldCBFT0Ygd2hlbiBhbGwgb3RoZXIgcHJvY2Vzc2VzIGhhdmUgZXhpdGVkLgorIyBUaGVuIHRoZSBzZXJ2ZXIgcHJvY2VzcyB1bmxpbmtzIGFueSByZW1haW5pbmcgc2VtYXBob3JlIG5hbWVzLgorIworIyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBzeXN0ZW0gb25seSBzdXBwb3J0cyBhIGxpbWl0ZWQgbnVtYmVyCisjIG9mIG5hbWVkIHNlbWFwaG9yZXMsIGFuZCB0aGV5IHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCB0aWxsCisjIHRoZSBuZXh0IHJlYm9vdC4gIFdpdGhvdXQgdGhpcyBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzLCAia2lsbGFsbAorIyBweXRob24iIHdvdWxkIHByb2JhYmx5IGxlYXZlIHVubGlua2VkIHNlbWFwaG9yZXMuCisjCisKK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHdhcm5pbmdzCitpbXBvcnQgX211bHRpcHJvY2Vzc2luZworCitmcm9tIC4gaW1wb3J0IHNwYXduCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnZW5zdXJlX3J1bm5pbmcnLCAncmVnaXN0ZXInLCAndW5yZWdpc3RlciddCisKKworY2xhc3MgU2VtYXBob3JlVHJhY2tlcihvYmplY3QpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQorICAgICAgICBzZWxmLl9mZCA9IE5vbmUKKworICAgIGRlZiBnZXRmZChzZWxmKToKKyAgICAgICAgc2VsZi5lbnN1cmVfcnVubmluZygpCisgICAgICAgIHJldHVybiBzZWxmLl9mZAorCisgICAgZGVmIGVuc3VyZV9ydW5uaW5nKHNlbGYpOgorICAgICAgICAnJydNYWtlIHN1cmUgdGhhdCBzZW1hcGhvcmUgdHJhY2tlciBwcm9jZXNzIGlzIHJ1bm5pbmcuCisKKyAgICAgICAgVGhpcyBjYW4gYmUgcnVuIGZyb20gYW55IHByb2Nlc3MuICBVc3VhbGx5IGEgY2hpbGQgcHJvY2VzcyB3aWxsIHVzZQorICAgICAgICB0aGUgc2VtYXBob3JlIGNyZWF0ZWQgYnkgaXRzIHBhcmVudC4nJycKKyAgICAgICAgd2l0aCBzZWxmLl9sb2NrOgorICAgICAgICAgICAgaWYgc2VsZi5fZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBmZHNfdG9fcGFzcyA9IFtdCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZmRzX3RvX3Bhc3MuYXBwZW5kKHN5cy5zdGRlcnIuZmlsZW5vKCkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGNtZCA9ICdmcm9tIG11bHRpcHJvY2Vzc2luZy5zZW1hcGhvcmVfdHJhY2tlciBpbXBvcnQgbWFpbjttYWluKCVkKScKKyAgICAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmZHNfdG9fcGFzcy5hcHBlbmQocikKKyAgICAgICAgICAgICAgICAjIHByb2Nlc3Mgd2lsbCBvdXQgbGl2ZSB1cywgc28gbm8gbmVlZCB0byB3YWl0IG9uIHBpZAorICAgICAgICAgICAgICAgIGV4ZSA9IHNwYXduLmdldF9leGVjdXRhYmxlKCkKKyAgICAgICAgICAgICAgICBhcmdzID0gW2V4ZV0gKyB1dGlsLl9hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQorICAgICAgICAgICAgICAgIGFyZ3MgKz0gWyctYycsIGNtZCAlIHJdCisgICAgICAgICAgICAgICAgdXRpbC5zcGF3bnZfcGFzc2ZkcyhleGUsIGFyZ3MsIGZkc190b19wYXNzKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5fZmQgPSB3CisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNsb3NlKHIpCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgbmFtZSk6CisgICAgICAgICcnJ1JlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1JFR0lTVEVSJywgbmFtZSkKKworICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIG5hbWUpOgorICAgICAgICAnJydVbnJlZ2lzdGVyIG5hbWUgb2Ygc2VtYXBob3JlIHdpdGggc2VtYXBob3JlIHRyYWNrZXIuJycnCisgICAgICAgIHNlbGYuX3NlbmQoJ1VOUkVHSVNURVInLCBuYW1lKQorCisgICAgZGVmIF9zZW5kKHNlbGYsIGNtZCwgbmFtZSk6CisgICAgICAgIHNlbGYuZW5zdXJlX3J1bm5pbmcoKQorICAgICAgICBtc2cgPSAnezB9OnsxfVxuJy5mb3JtYXQoY21kLCBuYW1lKS5lbmNvZGUoJ2FzY2lpJykKKyAgICAgICAgaWYgbGVuKG5hbWUpID4gNTEyOgorICAgICAgICAgICAgIyBwb3NpeCBndWFyYW50ZWVzIHRoYXQgd3JpdGVzIHRvIGEgcGlwZSBvZiBsZXNzIHRoYW4gUElQRV9CVUYKKyAgICAgICAgICAgICMgYnl0ZXMgYXJlIGF0b21pYywgYW5kIHRoYXQgUElQRV9CVUYgPj0gNTEyCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCduYW1lIHRvbyBsb25nJykKKyAgICAgICAgbmJ5dGVzID0gb3Mud3JpdGUoc2VsZi5fZmQsIG1zZykKKyAgICAgICAgYXNzZXJ0IG5ieXRlcyA9PSBsZW4obXNnKQorCisKK19zZW1hcGhvcmVfdHJhY2tlciA9IFNlbWFwaG9yZVRyYWNrZXIoKQorZW5zdXJlX3J1bm5pbmcgPSBfc2VtYXBob3JlX3RyYWNrZXIuZW5zdXJlX3J1bm5pbmcKK3JlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnJlZ2lzdGVyCit1bnJlZ2lzdGVyID0gX3NlbWFwaG9yZV90cmFja2VyLnVucmVnaXN0ZXIKK2dldGZkID0gX3NlbWFwaG9yZV90cmFja2VyLmdldGZkCisKKworZGVmIG1haW4oZmQpOgorICAgICcnJ1J1biBzZW1hcGhvcmUgdHJhY2tlci4nJycKKyAgICAjIHByb3RlY3QgdGhlIHByb2Nlc3MgZnJvbSBeQyBhbmQgImtpbGxhbGwgcHl0aG9uIiBldGMKKyAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdJTlQsIHNpZ25hbC5TSUdfSUdOKQorICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIHNpZ25hbC5TSUdfSUdOKQorCisgICAgZm9yIGYgaW4gKHN5cy5zdGRpbiwgc3lzLnN0ZG91dCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcGFzcworCisgICAgY2FjaGUgPSBzZXQoKQorICAgIHRyeToKKyAgICAgICAgIyBrZWVwIHRyYWNrIG9mIHJlZ2lzdGVyZWQvdW5yZWdpc3RlcmVkIHNlbWFwaG9yZXMKKyAgICAgICAgd2l0aCBvcGVuKGZkLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGNtZCwgbmFtZSA9IGxpbmUuc3RyaXAoKS5zcGxpdChiJzonKQorICAgICAgICAgICAgICAgICAgICBpZiBjbWQgPT0gYidSRUdJU1RFUic6CisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZS5hZGQobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBjbWQgPT0gYidVTlJFR0lTVEVSJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd1bnJlY29nbml6ZWQgY29tbWFuZCAlcicgJSBjbWQpCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgIyBhbGwgcHJvY2Vzc2VzIGhhdmUgdGVybWluYXRlZDsgY2xlYW51cCBhbnkgcmVtYWluaW5nIHNlbWFwaG9yZXMKKyAgICAgICAgaWYgY2FjaGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6IFRoZXJlIGFwcGVhciB0byBiZSAlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGVha2VkIHNlbWFwaG9yZXMgdG8gY2xlYW4gdXAgYXQgc2h1dGRvd24nICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihjYWNoZSkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIG5hbWUgaW4gY2FjaGU6CisgICAgICAgICAgICAjIEZvciBzb21lIHJlYXNvbiB0aGUgcHJvY2VzcyB3aGljaCBjcmVhdGVkIGFuZCByZWdpc3RlcmVkIHRoaXMKKyAgICAgICAgICAgICMgc2VtYXBob3JlIGhhcyBmYWlsZWQgdG8gdW5yZWdpc3RlciBpdC4gUHJlc3VtYWJseSBpdCBoYXMgZGllZC4KKyAgICAgICAgICAgICMgV2UgdGhlcmVmb3JlIHVubGluayBpdC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFtZS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2Fybignc2VtYXBob3JlX3RyYWNrZXI6ICVyOiAlcycgJSAobmFtZSwgZSkpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3Npbmcvc2hhcmVkY3R5cGVzLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKaW5kZXggYTM1OGVkNC4uMGMxNzgyNSAxMDA2NDQKLS0tIGEvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zaGFyZWRjdHlwZXMucHkKQEAgLTEwLDggKzEwLDExIEBACiBpbXBvcnQgY3R5cGVzCiBpbXBvcnQgd2Vha3JlZgogCi1mcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgaGVhcCwgUkxvY2sKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZywgRm9ya2luZ1BpY2tsZXIKK2Zyb20gLiBpbXBvcnQgaGVhcAorZnJvbSAuIGltcG9ydCBnZXRfY29udGV4dAorCitmcm9tIC5jb250ZXh0IGltcG9ydCBhc3NlcnRfc3Bhd25pbmcKK2Zyb20gLnJlZHVjdGlvbiBpbXBvcnQgRm9ya2luZ1BpY2tsZXIKIAogX19hbGxfXyA9IFsnUmF3VmFsdWUnLCAnUmF3QXJyYXknLCAnVmFsdWUnLCAnQXJyYXknLCAnY29weScsICdzeW5jaHJvbml6ZWQnXQogCkBAIC02Myw3ICs2Niw3IEBACiAgICAgICAgIHJlc3VsdC5fX2luaXRfXygqc2l6ZV9vcl9pbml0aWFsaXplcikKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi1kZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSk6CitkZWYgVmFsdWUodHlwZWNvZGVfb3JfdHlwZSwgKmFyZ3MsIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFZhbHVlCiAgICAgJycnCkBAIC03MSwxMiArNzQsMTMgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKLWRlZiBBcnJheSh0eXBlY29kZV9vcl90eXBlLCBzaXplX29yX2luaXRpYWxpemVyLCAqLCBsb2NrPVRydWUpOgorZGVmIEFycmF5KHR5cGVjb2RlX29yX3R5cGUsIHNpemVfb3JfaW5pdGlhbGl6ZXIsICosIGxvY2s9VHJ1ZSwgY3R4PU5vbmUpOgogICAgICcnJwogICAgIFJldHVybiBhIHN5bmNocm9uaXphdGlvbiB3cmFwcGVyIGZvciBhIFJhd0FycmF5CiAgICAgJycnCkBAIC04NCwyNSArODgsMjcgQEAKICAgICBpZiBsb2NrIGlzIEZhbHNlOgogICAgICAgICByZXR1cm4gb2JqCiAgICAgaWYgbG9jayBpbiAoVHJ1ZSwgTm9uZSk6Ci0gICAgICAgIGxvY2sgPSBSTG9jaygpCisgICAgICAgIGN0eCA9IGN0eCBvciBnZXRfY29udGV4dCgpCisgICAgICAgIGxvY2sgPSBjdHguUkxvY2soKQogICAgIGlmIG5vdCBoYXNhdHRyKGxvY2ssICdhY3F1aXJlJyk6CiAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCInJXInIGhhcyBubyBtZXRob2QgJ2FjcXVpcmUnIiAlIGxvY2spCi0gICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgcmV0dXJuIHN5bmNocm9uaXplZChvYmosIGxvY2ssIGN0eD1jdHgpCiAKIGRlZiBjb3B5KG9iaik6CiAgICAgbmV3X29iaiA9IF9uZXdfdmFsdWUodHlwZShvYmopKQogICAgIGN0eXBlcy5wb2ludGVyKG5ld19vYmopWzBdID0gb2JqCiAgICAgcmV0dXJuIG5ld19vYmoKIAotZGVmIHN5bmNocm9uaXplZChvYmosIGxvY2s9Tm9uZSk6CitkZWYgc3luY2hyb25pemVkKG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgYXNzZXJ0IG5vdCBpc2luc3RhbmNlKG9iaiwgU3luY2hyb25pemVkQmFzZSksICdvYmplY3QgYWxyZWFkeSBzeW5jaHJvbml6ZWQnCisgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KCkKIAogICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBjdHlwZXMuX1NpbXBsZUNEYXRhKToKLSAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZChvYmosIGxvY2spCisgICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWQob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxpZiBpc2luc3RhbmNlKG9iaiwgY3R5cGVzLkFycmF5KToKICAgICAgICAgaWYgb2JqLl90eXBlXyBpcyBjdHlwZXMuY19jaGFyOgotICAgICAgICAgICAgcmV0dXJuIFN5bmNocm9uaXplZFN0cmluZyhvYmosIGxvY2spCi0gICAgICAgIHJldHVybiBTeW5jaHJvbml6ZWRBcnJheShvYmosIGxvY2spCisgICAgICAgICAgICByZXR1cm4gU3luY2hyb25pemVkU3RyaW5nKG9iaiwgbG9jaywgY3R4KQorICAgICAgICByZXR1cm4gU3luY2hyb25pemVkQXJyYXkob2JqLCBsb2NrLCBjdHgpCiAgICAgZWxzZToKICAgICAgICAgY2xzID0gdHlwZShvYmopCiAgICAgICAgIHRyeToKQEAgLTExMiw3ICsxMTgsNyBAQAogICAgICAgICAgICAgZCA9IGRpY3QoKG5hbWUsIG1ha2VfcHJvcGVydHkobmFtZSkpIGZvciBuYW1lIGluIG5hbWVzKQogICAgICAgICAgICAgY2xhc3NuYW1lID0gJ1N5bmNocm9uaXplZCcgKyBjbHMuX19uYW1lX18KICAgICAgICAgICAgIHNjbHMgPSBjbGFzc19jYWNoZVtjbHNdID0gdHlwZShjbGFzc25hbWUsIChTeW5jaHJvbml6ZWRCYXNlLCksIGQpCi0gICAgICAgIHJldHVybiBzY2xzKG9iaiwgbG9jaykKKyAgICAgICAgcmV0dXJuIHNjbHMob2JqLCBsb2NrLCBjdHgpCiAKICMKICMgRnVuY3Rpb25zIGZvciBwaWNrbGluZy91bnBpY2tsaW5nCkBAIC0xNzIsOSArMTc4LDEzIEBACiAKIGNsYXNzIFN5bmNocm9uaXplZEJhc2Uob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvYmosIGxvY2s9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgbG9jaz1Ob25lLCBjdHg9Tm9uZSk6CiAgICAgICAgIHNlbGYuX29iaiA9IG9iagotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCisgICAgICAgIGlmIGxvY2s6CisgICAgICAgICAgICBzZWxmLl9sb2NrID0gbG9jaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgY3R4ID0gY3R4IG9yIGdldF9jb250ZXh0KGZvcmNlPVRydWUpCisgICAgICAgICAgICBzZWxmLl9sb2NrID0gY3R4LlJMb2NrKCkKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fbG9jay5hY3F1aXJlCiAgICAgICAgIHNlbGYucmVsZWFzZSA9IHNlbGYuX2xvY2sucmVsZWFzZQogCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzZlNDc5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy9zcGF3bi5weQpAQCAtMCwwICsxLDI4NyBAQAorIworIyBDb2RlIHVzZWQgdG8gc3RhcnQgcHJvY2Vzc2VzIHdoZW4gdXNpbmcgdGhlIHNwYXduIG9yIGZvcmtzZXJ2ZXIKKyMgc3RhcnQgbWV0aG9kcy4KKyMKKyMgbXVsdGlwcm9jZXNzaW5nL3NwYXduLnB5CisjCisjIENvcHlyaWdodCAoYykgMjAwNi0yMDA4LCBSIE91ZGtlcmsKKyMgTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgorIworCitpbXBvcnQgb3MKK2ltcG9ydCBwaWNrbGUKK2ltcG9ydCBzeXMKK2ltcG9ydCBydW5weQoraW1wb3J0IHR5cGVzCisKK2Zyb20gLiBpbXBvcnQgZ2V0X3N0YXJ0X21ldGhvZCwgc2V0X3N0YXJ0X21ldGhvZAorZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHV0aWwKKworX19hbGxfXyA9IFsnX21haW4nLCAnZnJlZXplX3N1cHBvcnQnLCAnc2V0X2V4ZWN1dGFibGUnLCAnZ2V0X2V4ZWN1dGFibGUnLAorICAgICAgICAgICAnZ2V0X3ByZXBhcmF0aW9uX2RhdGEnLCAnZ2V0X2NvbW1hbmRfbGluZScsICdpbXBvcnRfbWFpbl9wYXRoJ10KKworIworIyBfcHl0aG9uX2V4ZSBpcyB0aGUgYXNzdW1lZCBwYXRoIHRvIHRoZSBweXRob24gZXhlY3V0YWJsZS4KKyMgUGVvcGxlIGVtYmVkZGluZyBQeXRob24gd2FudCB0byBtb2RpZnkgaXQuCisjCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgIFdJTkVYRSA9IEZhbHNlCisgICAgV0lOU0VSVklDRSA9IEZhbHNlCitlbHNlOgorICAgIFdJTkVYRSA9IChzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBhbmQgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSkpCisgICAgV0lOU0VSVklDRSA9IHN5cy5leGVjdXRhYmxlLmxvd2VyKCkuZW5kc3dpdGgoInB5dGhvbnNlcnZpY2UuZXhlIikKKworaWYgV0lOU0VSVklDRToKKyAgICBfcHl0aG9uX2V4ZSA9IG9zLnBhdGguam9pbihzeXMuZXhlY19wcmVmaXgsICdweXRob24uZXhlJykKK2Vsc2U6CisgICAgX3B5dGhvbl9leGUgPSBzeXMuZXhlY3V0YWJsZQorCitkZWYgc2V0X2V4ZWN1dGFibGUoZXhlKToKKyAgICBnbG9iYWwgX3B5dGhvbl9leGUKKyAgICBfcHl0aG9uX2V4ZSA9IGV4ZQorCitkZWYgZ2V0X2V4ZWN1dGFibGUoKToKKyAgICByZXR1cm4gX3B5dGhvbl9leGUKKworIworIworIworCitkZWYgaXNfZm9ya2luZyhhcmd2KToKKyAgICAnJycKKyAgICBSZXR1cm4gd2hldGhlciBjb21tYW5kbGluZSBpbmRpY2F0ZXMgd2UgYXJlIGZvcmtpbmcKKyAgICAnJycKKyAgICBpZiBsZW4oYXJndikgPj0gMiBhbmQgYXJndlsxXSA9PSAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayc6CisgICAgICAgIHJldHVybiBUcnVlCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGZyZWV6ZV9zdXBwb3J0KCk6CisgICAgJycnCisgICAgUnVuIGNvZGUgZm9yIHByb2Nlc3Mgb2JqZWN0IGlmIHRoaXMgaW4gbm90IHRoZSBtYWluIHByb2Nlc3MKKyAgICAnJycKKyAgICBpZiBpc19mb3JraW5nKHN5cy5hcmd2KToKKyAgICAgICAga3dkcyA9IHt9CisgICAgICAgIGZvciBhcmcgaW4gc3lzLmFyZ3ZbMjpdOgorICAgICAgICAgICAgbmFtZSwgdmFsdWUgPSBhcmcuc3BsaXQoJz0nKQorICAgICAgICAgICAgaWYgdmFsdWUgPT0gJ05vbmUnOgorICAgICAgICAgICAgICAgIGt3ZHNbbmFtZV0gPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGt3ZHNbbmFtZV0gPSBpbnQodmFsdWUpCisgICAgICAgIHNwYXduX21haW4oKiprd2RzKQorICAgICAgICBzeXMuZXhpdCgpCisKKworZGVmIGdldF9jb21tYW5kX2xpbmUoKiprd2RzKToKKyAgICAnJycKKyAgICBSZXR1cm5zIHByZWZpeCBvZiBjb21tYW5kIGxpbmUgdXNlZCBmb3Igc3Bhd25pbmcgYSBjaGlsZCBwcm9jZXNzCisgICAgJycnCisgICAgaWYgZ2V0YXR0cihzeXMsICdmcm96ZW4nLCBGYWxzZSk6CisgICAgICAgIHJldHVybiAoW3N5cy5leGVjdXRhYmxlLCAnLS1tdWx0aXByb2Nlc3NpbmctZm9yayddICsKKyAgICAgICAgICAgICAgICBbJyVzPSVyJyAlIGl0ZW0gZm9yIGl0ZW0gaW4ga3dkcy5pdGVtcygpXSkKKyAgICBlbHNlOgorICAgICAgICBwcm9nID0gJ2Zyb20gbXVsdGlwcm9jZXNzaW5nLnNwYXduIGltcG9ydCBzcGF3bl9tYWluOyBzcGF3bl9tYWluKCVzKScKKyAgICAgICAgcHJvZyAlPSAnLCAnLmpvaW4oJyVzPSVyJyAlIGl0ZW0gZm9yIGl0ZW0gaW4ga3dkcy5pdGVtcygpKQorICAgICAgICBvcHRzID0gdXRpbC5fYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzKCkKKyAgICAgICAgcmV0dXJuIFtfcHl0aG9uX2V4ZV0gKyBvcHRzICsgWyctYycsIHByb2csICctLW11bHRpcHJvY2Vzc2luZy1mb3JrJ10KKworCitkZWYgc3Bhd25fbWFpbihwaXBlX2hhbmRsZSwgcGFyZW50X3BpZD1Ob25lLCB0cmFja2VyX2ZkPU5vbmUpOgorICAgICcnJworICAgIFJ1biBjb2RlIHNwZWNpZmVkIGJ5IGRhdGEgcmVjZWl2ZWQgb3ZlciBwaXBlCisgICAgJycnCisgICAgYXNzZXJ0IGlzX2Zvcmtpbmcoc3lzLmFyZ3YpCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIGltcG9ydCBtc3ZjcnQKKyAgICAgICAgZnJvbSAucmVkdWN0aW9uIGltcG9ydCBzdGVhbF9oYW5kbGUKKyAgICAgICAgbmV3X2hhbmRsZSA9IHN0ZWFsX2hhbmRsZShwYXJlbnRfcGlkLCBwaXBlX2hhbmRsZSkKKyAgICAgICAgZmQgPSBtc3ZjcnQub3Blbl9vc2ZoYW5kbGUobmV3X2hhbmRsZSwgb3MuT19SRE9OTFkpCisgICAgZWxzZToKKyAgICAgICAgZnJvbSAuIGltcG9ydCBzZW1hcGhvcmVfdHJhY2tlcgorICAgICAgICBzZW1hcGhvcmVfdHJhY2tlci5fc2VtYXBob3JlX3RyYWNrZXIuX2ZkID0gdHJhY2tlcl9mZAorICAgICAgICBmZCA9IHBpcGVfaGFuZGxlCisgICAgZXhpdGNvZGUgPSBfbWFpbihmZCkKKyAgICBzeXMuZXhpdChleGl0Y29kZSkKKworCitkZWYgX21haW4oZmQpOgorICAgIHdpdGggb3MuZmRvcGVuKGZkLCAncmInLCBjbG9zZWZkPVRydWUpIGFzIGZyb21fcGFyZW50OgorICAgICAgICBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9pbmhlcml0aW5nID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwcmVwYXJhdGlvbl9kYXRhID0gcGlja2xlLmxvYWQoZnJvbV9wYXJlbnQpCisgICAgICAgICAgICBwcmVwYXJlKHByZXBhcmF0aW9uX2RhdGEpCisgICAgICAgICAgICBzZWxmID0gcGlja2xlLmxvYWQoZnJvbV9wYXJlbnQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBkZWwgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5faW5oZXJpdGluZworICAgIHJldHVybiBzZWxmLl9ib290c3RyYXAoKQorCisKK2RlZiBfY2hlY2tfbm90X2ltcG9ydGluZ19tYWluKCk6CisgICAgaWYgZ2V0YXR0cihwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLCAnX2luaGVyaXRpbmcnLCBGYWxzZSk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignJycKKyAgICAgICAgQW4gYXR0ZW1wdCBoYXMgYmVlbiBtYWRlIHRvIHN0YXJ0IGEgbmV3IHByb2Nlc3MgYmVmb3JlIHRoZQorICAgICAgICBjdXJyZW50IHByb2Nlc3MgaGFzIGZpbmlzaGVkIGl0cyBib290c3RyYXBwaW5nIHBoYXNlLgorCisgICAgICAgIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB5b3UgYXJlIG5vdCB1c2luZyBmb3JrIHRvIHN0YXJ0IHlvdXIKKyAgICAgICAgY2hpbGQgcHJvY2Vzc2VzIGFuZCB5b3UgaGF2ZSBmb3Jnb3R0ZW4gdG8gdXNlIHRoZSBwcm9wZXIgaWRpb20KKyAgICAgICAgaW4gdGhlIG1haW4gbW9kdWxlOgorCisgICAgICAgICAgICBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICAgICAgICAgICAgIGZyZWV6ZV9zdXBwb3J0KCkKKyAgICAgICAgICAgICAgICAuLi4KKworICAgICAgICBUaGUgImZyZWV6ZV9zdXBwb3J0KCkiIGxpbmUgY2FuIGJlIG9taXR0ZWQgaWYgdGhlIHByb2dyYW0KKyAgICAgICAgaXMgbm90IGdvaW5nIHRvIGJlIGZyb3plbiB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUuJycnKQorCisKK2RlZiBnZXRfcHJlcGFyYXRpb25fZGF0YShuYW1lKToKKyAgICAnJycKKyAgICBSZXR1cm4gaW5mbyBhYm91dCBwYXJlbnQgbmVlZGVkIGJ5IGNoaWxkIHRvIHVucGlja2xlIHByb2Nlc3Mgb2JqZWN0CisgICAgJycnCisgICAgX2NoZWNrX25vdF9pbXBvcnRpbmdfbWFpbigpCisgICAgZCA9IGRpY3QoCisgICAgICAgIGxvZ190b19zdGRlcnI9dXRpbC5fbG9nX3RvX3N0ZGVyciwKKyAgICAgICAgYXV0aGtleT1wcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLmF1dGhrZXksCisgICAgICAgICkKKworICAgIGlmIHV0aWwuX2xvZ2dlciBpcyBub3QgTm9uZToKKyAgICAgICAgZFsnbG9nX2xldmVsJ10gPSB1dGlsLl9sb2dnZXIuZ2V0RWZmZWN0aXZlTGV2ZWwoKQorCisgICAgc3lzX3BhdGg9c3lzLnBhdGguY29weSgpCisgICAgdHJ5OgorICAgICAgICBpID0gc3lzX3BhdGguaW5kZXgoJycpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBzeXNfcGF0aFtpXSA9IHByb2Nlc3MuT1JJR0lOQUxfRElSCisKKyAgICBkLnVwZGF0ZSgKKyAgICAgICAgbmFtZT1uYW1lLAorICAgICAgICBzeXNfcGF0aD1zeXNfcGF0aCwKKyAgICAgICAgc3lzX2FyZ3Y9c3lzLmFyZ3YsCisgICAgICAgIG9yaWdfZGlyPXByb2Nlc3MuT1JJR0lOQUxfRElSLAorICAgICAgICBkaXI9b3MuZ2V0Y3dkKCksCisgICAgICAgIHN0YXJ0X21ldGhvZD1nZXRfc3RhcnRfbWV0aG9kKCksCisgICAgICAgICkKKworICAgICMgRmlndXJlIG91dCB3aGV0aGVyIHRvIGluaXRpYWxpc2UgbWFpbiBpbiB0aGUgc3VicHJvY2VzcyBhcyBhIG1vZHVsZQorICAgICMgb3IgdGhyb3VnaCBkaXJlY3QgZXhlY3V0aW9uIChvciB0byBsZWF2ZSBpdCBhbG9uZSBlbnRpcmVseSkKKyAgICBtYWluX21vZHVsZSA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisgICAgbWFpbl9tb2RfbmFtZSA9IGdldGF0dHIobWFpbl9tb2R1bGUuX19zcGVjX18sICJuYW1lIiwgTm9uZSkKKyAgICBpZiBtYWluX21vZF9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICBkWydpbml0X21haW5fZnJvbV9uYW1lJ10gPSBtYWluX21vZF9uYW1lCisgICAgZWxpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJyBvciAobm90IFdJTkVYRSBhbmQgbm90IFdJTlNFUlZJQ0UpOgorICAgICAgICBtYWluX3BhdGggPSBnZXRhdHRyKG1haW5fbW9kdWxlLCAnX19maWxlX18nLCBOb25lKQorICAgICAgICBpZiBtYWluX3BhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiAobm90IG9zLnBhdGguaXNhYnMobWFpbl9wYXRoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MuT1JJR0lOQUxfRElSIGlzIG5vdCBOb25lKToKKyAgICAgICAgICAgICAgICBtYWluX3BhdGggPSBvcy5wYXRoLmpvaW4ocHJvY2Vzcy5PUklHSU5BTF9ESVIsIG1haW5fcGF0aCkKKyAgICAgICAgICAgIGRbJ2luaXRfbWFpbl9mcm9tX3BhdGgnXSA9IG9zLnBhdGgubm9ybXBhdGgobWFpbl9wYXRoKQorCisgICAgcmV0dXJuIGQKKworIworIyBQcmVwYXJlIGN1cnJlbnQgcHJvY2VzcworIworCitvbGRfbWFpbl9tb2R1bGVzID0gW10KKworZGVmIHByZXBhcmUoZGF0YSk6CisgICAgJycnCisgICAgVHJ5IHRvIGdldCBjdXJyZW50IHByb2Nlc3MgcmVhZHkgdG8gdW5waWNrbGUgcHJvY2VzcyBvYmplY3QKKyAgICAnJycKKyAgICBpZiAnbmFtZScgaW4gZGF0YToKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5uYW1lID0gZGF0YVsnbmFtZSddCisKKyAgICBpZiAnYXV0aGtleScgaW4gZGF0YToKKyAgICAgICAgcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5hdXRoa2V5ID0gZGF0YVsnYXV0aGtleSddCisKKyAgICBpZiAnbG9nX3RvX3N0ZGVycicgaW4gZGF0YSBhbmQgZGF0YVsnbG9nX3RvX3N0ZGVyciddOgorICAgICAgICB1dGlsLmxvZ190b19zdGRlcnIoKQorCisgICAgaWYgJ2xvZ19sZXZlbCcgaW4gZGF0YToKKyAgICAgICAgdXRpbC5nZXRfbG9nZ2VyKCkuc2V0TGV2ZWwoZGF0YVsnbG9nX2xldmVsJ10pCisKKyAgICBpZiAnc3lzX3BhdGgnIGluIGRhdGE6CisgICAgICAgIHN5cy5wYXRoID0gZGF0YVsnc3lzX3BhdGgnXQorCisgICAgaWYgJ3N5c19hcmd2JyBpbiBkYXRhOgorICAgICAgICBzeXMuYXJndiA9IGRhdGFbJ3N5c19hcmd2J10KKworICAgIGlmICdkaXInIGluIGRhdGE6CisgICAgICAgIG9zLmNoZGlyKGRhdGFbJ2RpciddKQorCisgICAgaWYgJ29yaWdfZGlyJyBpbiBkYXRhOgorICAgICAgICBwcm9jZXNzLk9SSUdJTkFMX0RJUiA9IGRhdGFbJ29yaWdfZGlyJ10KKworICAgIGlmICdzdGFydF9tZXRob2QnIGluIGRhdGE6CisgICAgICAgIHNldF9zdGFydF9tZXRob2QoZGF0YVsnc3RhcnRfbWV0aG9kJ10pCisKKyAgICBpZiAnaW5pdF9tYWluX2Zyb21fbmFtZScgaW4gZGF0YToKKyAgICAgICAgX2ZpeHVwX21haW5fZnJvbV9uYW1lKGRhdGFbJ2luaXRfbWFpbl9mcm9tX25hbWUnXSkKKyAgICBlbGlmICdpbml0X21haW5fZnJvbV9wYXRoJyBpbiBkYXRhOgorICAgICAgICBfZml4dXBfbWFpbl9mcm9tX3BhdGgoZGF0YVsnaW5pdF9tYWluX2Zyb21fcGF0aCddKQorCisjIE11bHRpcHJvY2Vzc2luZyBtb2R1bGUgaGVscGVycyB0byBmaXggdXAgdGhlIG1haW4gbW9kdWxlIGluCisjIHNwYXduZWQgc3VicHJvY2Vzc2VzCitkZWYgX2ZpeHVwX21haW5fZnJvbV9uYW1lKG1vZF9uYW1lKToKKyAgICAjIF9fbWFpbl9fLnB5IGZpbGVzIGZvciBwYWNrYWdlcywgZGlyZWN0b3JpZXMsIHppcCBhcmNoaXZlcywgZXRjLCBydW4KKyAgICAjIHRoZWlyICJtYWluIG9ubHkiIGNvZGUgdW5jb25kaXRpb25hbGx5LCBzbyB3ZSBkb24ndCBldmVuIHRyeSB0bworICAgICMgcG9wdWxhdGUgYW55dGhpbmcgaW4gX19tYWluX18sIG5vciBkbyB3ZSBtYWtlIGFueSBjaGFuZ2VzIHRvCisgICAgIyBfX21haW5fXyBhdHRyaWJ1dGVzCisgICAgY3VycmVudF9tYWluID0gc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10KKyAgICBpZiBtb2RfbmFtZSA9PSAiX19tYWluX18iIG9yIG1vZF9uYW1lLmVuZHN3aXRoKCIuX19tYWluX18iKToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIElmIHRoaXMgcHJvY2VzcyB3YXMgZm9ya2VkLCBfX21haW5fXyBtYXkgYWxyZWFkeSBiZSBwb3B1bGF0ZWQKKyAgICBpZiBnZXRhdHRyKGN1cnJlbnRfbWFpbi5fX3NwZWNfXywgIm5hbWUiLCBOb25lKSA9PSBtb2RfbmFtZToKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIE90aGVyd2lzZSwgX19tYWluX18gbWF5IGNvbnRhaW4gc29tZSBub24tbWFpbiBjb2RlIHdoZXJlIHdlIG5lZWQgdG8KKyAgICAjIHN1cHBvcnQgdW5waWNrbGluZyBpdCBwcm9wZXJseS4gV2UgcmVydW4gaXQgYXMgX19tcF9tYWluX18gYW5kIG1ha2UKKyAgICAjIHRoZSBub3JtYWwgX19tYWluX18gYW4gYWxpYXMgdG8gdGhhdAorICAgIG9sZF9tYWluX21vZHVsZXMuYXBwZW5kKGN1cnJlbnRfbWFpbikKKyAgICBtYWluX21vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoIl9fbXBfbWFpbl9fIikKKyAgICBtYWluX2NvbnRlbnQgPSBydW5weS5ydW5fbW9kdWxlKG1vZF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX25hbWU9Il9fbXBfbWFpbl9fIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyX3N5cz1UcnVlKQorICAgIG1haW5fbW9kdWxlLl9fZGljdF9fLnVwZGF0ZShtYWluX2NvbnRlbnQpCisgICAgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gPSBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IG1haW5fbW9kdWxlCisKKworZGVmIF9maXh1cF9tYWluX2Zyb21fcGF0aChtYWluX3BhdGgpOgorICAgICMgSWYgdGhpcyBwcm9jZXNzIHdhcyBmb3JrZWQsIF9fbWFpbl9fIG1heSBhbHJlYWR5IGJlIHBvcHVsYXRlZAorICAgIGN1cnJlbnRfbWFpbiA9IHN5cy5tb2R1bGVzWydfX21haW5fXyddCisKKyAgICAjIFVuZm9ydHVuYXRlbHksIHRoZSBtYWluIGlweXRob24gbGF1bmNoIHNjcmlwdCBoaXN0b3JpY2FsbHkgaGFkIG5vCisgICAgIyAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIgZ3VhcmQsIHNvIHdlIHdvcmsgYXJvdW5kIHRoYXQKKyAgICAjIGJ5IHRyZWF0aW5nIGl0IGxpa2UgYSBfX21haW5fXy5weSBmaWxlCisgICAgIyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2lweXRob24vaXB5dGhvbi9pc3N1ZXMvNDY5OAorICAgIG1haW5fbmFtZSA9IG9zLnBhdGguc3BsaXRleHQob3MucGF0aC5iYXNlbmFtZShtYWluX3BhdGgpKVswXQorICAgIGlmIG1haW5fbmFtZSA9PSAnaXB5dGhvbic6CisgICAgICAgIHJldHVybgorCisgICAgIyBPdGhlcndpc2UsIGlmIF9fZmlsZV9fIGFscmVhZHkgaGFzIHRoZSBzZXR0aW5nIHdlIGV4cGVjdCwKKyAgICAjIHRoZXJlJ3Mgbm90aGluZyBtb3JlIHRvIGRvCisgICAgaWYgZ2V0YXR0cihjdXJyZW50X21haW4sICdfX2ZpbGVfXycsIE5vbmUpID09IG1haW5fcGF0aDoKKyAgICAgICAgcmV0dXJuCisKKyAgICAjIElmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgc2VudCBhIHBhdGggdGhyb3VnaCByYXRoZXIgdGhhbiBhIG1vZHVsZQorICAgICMgbmFtZSB3ZSBhc3N1bWUgaXQgaXMgYW4gZXhlY3V0YWJsZSBzY3JpcHQgdGhhdCBtYXkgY29udGFpbgorICAgICMgbm9uLW1haW4gY29kZSB0aGF0IG5lZWRzIHRvIGJlIGV4ZWN1dGVkCisgICAgb2xkX21haW5fbW9kdWxlcy5hcHBlbmQoY3VycmVudF9tYWluKQorICAgIG1haW5fbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgiX19tcF9tYWluX18iKQorICAgIG1haW5fY29udGVudCA9IHJ1bnB5LnJ1bl9wYXRoKG1haW5fcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fbmFtZT0iX19tcF9tYWluX18iKQorICAgIG1haW5fbW9kdWxlLl9fZGljdF9fLnVwZGF0ZShtYWluX2NvbnRlbnQpCisgICAgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gPSBzeXMubW9kdWxlc1snX19tcF9tYWluX18nXSA9IG1haW5fbW9kdWxlCisKKworZGVmIGltcG9ydF9tYWluX3BhdGgobWFpbl9wYXRoKToKKyAgICAnJycKKyAgICBTZXQgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10gdG8gbW9kdWxlIGF0IG1haW5fcGF0aAorICAgICcnJworICAgIF9maXh1cF9tYWluX2Zyb21fcGF0aChtYWluX3BhdGgpCmRpZmYgLS1naXQgYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5IGIvTGliL211bHRpcHJvY2Vzc2luZy9zeW5jaHJvbml6ZS5weQppbmRleCAwZmFjYTc4Li5kZWExY2JkIDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3N5bmNocm9uaXplLnB5CisrKyBiL0xpYi9tdWx0aXByb2Nlc3Npbmcvc3luY2hyb25pemUucHkKQEAgLTEzLDE4ICsxMywyMCBAQAogCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgc3lzCi0KK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IF9tdWx0aXByb2Nlc3NpbmcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IGN1cnJlbnRfcHJvY2VzcwotZnJvbSBtdWx0aXByb2Nlc3NpbmcudXRpbCBpbXBvcnQgcmVnaXN0ZXJfYWZ0ZXJfZm9yaywgZGVidWcKLWZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgaW1wb3J0IGFzc2VydF9zcGF3bmluZywgUG9wZW4KKwogZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCiAKK2Zyb20gLiBpbXBvcnQgY29udGV4dAorZnJvbSAuIGltcG9ydCBwcm9jZXNzCitmcm9tIC4gaW1wb3J0IHV0aWwKKwogIyBUcnkgdG8gaW1wb3J0IHRoZSBtcC5zeW5jaHJvbml6ZSBtb2R1bGUgY2xlYW5seSwgaWYgaXQgZmFpbHMKICMgcmFpc2UgSW1wb3J0RXJyb3IgZm9yIHBsYXRmb3JtcyBsYWNraW5nIGEgd29ya2luZyBzZW1fb3BlbiBpbXBsZW1lbnRhdGlvbi4KICMgU2VlIGlzc3VlIDM3NzAKIHRyeToKLSAgICBmcm9tIF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNlbUxvY2sKKyAgICBmcm9tIF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFNlbUxvY2ssIHNlbV91bmxpbmsKIGV4Y2VwdCAoSW1wb3J0RXJyb3IpOgogICAgIHJhaXNlIEltcG9ydEVycm9yKCJUaGlzIHBsYXRmb3JtIGxhY2tzIGEgZnVuY3Rpb25pbmcgc2VtX29wZW4iICsKICAgICAgICAgICAgICAgICAgICAgICAiIGltcGxlbWVudGF0aW9uLCB0aGVyZWZvcmUsIHRoZSByZXF1aXJlZCIgKwpAQCAtNDQsMTUgKzQ2LDQ3IEBACiAKIGNsYXNzIFNlbUxvY2sob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBraW5kLCB2YWx1ZSwgbWF4dmFsdWUpOgotICAgICAgICBzbCA9IHNlbGYuX3NlbWxvY2sgPSBfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2soa2luZCwgdmFsdWUsIG1heHZhbHVlKQotICAgICAgICBkZWJ1ZygnY3JlYXRlZCBzZW1sb2NrIHdpdGggaGFuZGxlICVzJyAlIHNsLmhhbmRsZSkKKyAgICBfcmFuZCA9IHRlbXBmaWxlLl9SYW5kb21OYW1lU2VxdWVuY2UoKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSwgKiwgY3R4KToKKyAgICAgICAgaWYgY3R4IGlzIE5vbmU6CisgICAgICAgICAgICBjdHggPSBjb250ZXh0Ll9kZWZhdWx0X2NvbnRleHQuZ2V0X2NvbnRleHQoKQorICAgICAgICBuYW1lID0gY3R4LmdldF9zdGFydF9tZXRob2QoKQorICAgICAgICB1bmxpbmtfbm93ID0gc3lzLnBsYXRmb3JtID09ICd3aW4zMicgb3IgbmFtZSA9PSAnZm9yaycKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzbCA9IHNlbGYuX3NlbWxvY2sgPSBfbXVsdGlwcm9jZXNzaW5nLlNlbUxvY2soCisgICAgICAgICAgICAgICAgICAgIGtpbmQsIHZhbHVlLCBtYXh2YWx1ZSwgc2VsZi5fbWFrZV9uYW1lKCksCisgICAgICAgICAgICAgICAgICAgIHVubGlua19ub3cpCisgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcignY2Fubm90IGZpbmQgbmFtZSBmb3Igc2VtYXBob3JlJykKKworICAgICAgICB1dGlsLmRlYnVnKCdjcmVhdGVkIHNlbWxvY2sgd2l0aCBoYW5kbGUgJXMnICUgc2wuaGFuZGxlKQogICAgICAgICBzZWxmLl9tYWtlX21ldGhvZHMoKQogCiAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgogICAgICAgICAgICAgZGVmIF9hZnRlcl9mb3JrKG9iaik6CiAgICAgICAgICAgICAgICAgb2JqLl9zZW1sb2NrLl9hZnRlcl9mb3JrKCkKLSAgICAgICAgICAgIHJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgX2FmdGVyX2ZvcmspCisgICAgICAgICAgICB1dGlsLnJlZ2lzdGVyX2FmdGVyX2Zvcmsoc2VsZiwgX2FmdGVyX2ZvcmspCisKKyAgICAgICAgaWYgc2VsZi5fc2VtbG9jay5uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgIyBXZSBvbmx5IGdldCBoZXJlIGlmIHdlIGFyZSBvbiBVbml4IHdpdGggZm9ya2luZworICAgICAgICAgICAgIyBkaXNhYmxlZC4gIFdoZW4gdGhlIG9iamVjdCBpcyBnYXJiYWdlIGNvbGxlY3RlZCBvciB0aGUKKyAgICAgICAgICAgICMgcHJvY2VzcyBzaHV0cyBkb3duIHdlIHVubGluayB0aGUgc2VtYXBob3JlIG5hbWUKKyAgICAgICAgICAgIGZyb20gLnNlbWFwaG9yZV90cmFja2VyIGltcG9ydCByZWdpc3RlcgorICAgICAgICAgICAgcmVnaXN0ZXIoc2VsZi5fc2VtbG9jay5uYW1lKQorICAgICAgICAgICAgdXRpbC5GaW5hbGl6ZShzZWxmLCBTZW1Mb2NrLl9jbGVhbnVwLCAoc2VsZi5fc2VtbG9jay5uYW1lLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXRwcmlvcml0eT0wKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfY2xlYW51cChuYW1lKToKKyAgICAgICAgZnJvbSAuc2VtYXBob3JlX3RyYWNrZXIgaW1wb3J0IHVucmVnaXN0ZXIKKyAgICAgICAgc2VtX3VubGluayhuYW1lKQorICAgICAgICB1bnJlZ2lzdGVyKG5hbWUpCiAKICAgICBkZWYgX21ha2VfbWV0aG9kcyhzZWxmKToKICAgICAgICAgc2VsZi5hY3F1aXJlID0gc2VsZi5fc2VtbG9jay5hY3F1aXJlCkBAIC02NSwyMyArOTksMzIgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX19leGl0X18oKmFyZ3MpCiAKICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgotICAgICAgICBhc3NlcnRfc3Bhd25pbmcoc2VsZikKKyAgICAgICAgY29udGV4dC5hc3NlcnRfc3Bhd25pbmcoc2VsZikKICAgICAgICAgc2wgPSBzZWxmLl9zZW1sb2NrCi0gICAgICAgIHJldHVybiAoUG9wZW4uZHVwbGljYXRlX2Zvcl9jaGlsZChzbC5oYW5kbGUpLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBoID0gY29udGV4dC5nZXRfc3Bhd25pbmdfcG9wZW4oKS5kdXBsaWNhdGVfZm9yX2NoaWxkKHNsLmhhbmRsZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGggPSBzbC5oYW5kbGUKKyAgICAgICAgcmV0dXJuIChoLCBzbC5raW5kLCBzbC5tYXh2YWx1ZSwgc2wubmFtZSkKIAogICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgc3RhdGUpOgogICAgICAgICBzZWxmLl9zZW1sb2NrID0gX211bHRpcHJvY2Vzc2luZy5TZW1Mb2NrLl9yZWJ1aWxkKCpzdGF0ZSkKLSAgICAgICAgZGVidWcoJ3JlY3JlYXRlZCBibG9ja2VyIHdpdGggaGFuZGxlICVyJyAlIHN0YXRlWzBdKQorICAgICAgICB1dGlsLmRlYnVnKCdyZWNyZWF0ZWQgYmxvY2tlciB3aXRoIGhhbmRsZSAlcicgJSBzdGF0ZVswXSkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX21ha2VfbmFtZSgpOgorICAgICAgICByZXR1cm4gJyVzLSVzJyAlIChwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLl9jb25maWdbJ3NlbXByZWZpeCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0KFNlbUxvY2suX3JhbmQpKQorCiAjCiAjIFNlbWFwaG9yZQogIwogCiBjbGFzcyBTZW1hcGhvcmUoU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgU0VNX1ZBTFVFX01BWCkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBTRU1BUEhPUkUsIHZhbHVlLCBTRU1fVkFMVUVfTUFYLCBjdHg9Y3R4KQogCiAgICAgZGVmIGdldF92YWx1ZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3NlbWxvY2suX2dldF92YWx1ZSgpCkBAIC05OSw4ICsxNDIsOCBAQAogCiBjbGFzcyBCb3VuZGVkU2VtYXBob3JlKFNlbWFwaG9yZSk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWU9MSk6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUpCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlPTEsICosIGN0eCk6CisgICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCB2YWx1ZSwgdmFsdWUsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTExNiwxMyArMTU5LDEzIEBACiAKIGNsYXNzIExvY2soU2VtTG9jayk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIFNlbUxvY2suX19pbml0X18oc2VsZiwgU0VNQVBIT1JFLCAxLCAxKQorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqLCBjdHgpOgorICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFNFTUFQSE9SRSwgMSwgMSwgY3R4PWN0eCkKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaWYgc2VsZi5fc2VtbG9jay5faXNfbWluZSgpOgotICAgICAgICAgICAgICAgIG5hbWUgPSBjdXJyZW50X3Byb2Nlc3MoKS5uYW1lCisgICAgICAgICAgICAgICAgbmFtZSA9IHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkubmFtZQogICAgICAgICAgICAgICAgIGlmIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUgIT0gJ01haW5UaHJlYWQnOgogICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICd8JyArIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLm5hbWUKICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2VtbG9jay5fZ2V0X3ZhbHVlKCkgPT0gMToKQEAgLTE0MSwxMyArMTg0LDEzIEBACiAKIGNsYXNzIFJMb2NrKFNlbUxvY2spOgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBTZW1Mb2NrLl9faW5pdF9fKHNlbGYsIFJFQ1VSU0lWRV9NVVRFWCwgMSwgMSkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKiwgY3R4KToKKyAgICAgICAgU2VtTG9jay5fX2luaXRfXyhzZWxmLCBSRUNVUlNJVkVfTVVURVgsIDEsIDEsIGN0eD1jdHgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIHNlbGYuX3NlbWxvY2suX2lzX21pbmUoKToKLSAgICAgICAgICAgICAgICBuYW1lID0gY3VycmVudF9wcm9jZXNzKCkubmFtZQorICAgICAgICAgICAgICAgIG5hbWUgPSBwcm9jZXNzLmN1cnJlbnRfcHJvY2VzcygpLm5hbWUKICAgICAgICAgICAgICAgICBpZiB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lICE9ICdNYWluVGhyZWFkJzoKICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSAnfCcgKyB0aHJlYWRpbmcuY3VycmVudF90aHJlYWQoKS5uYW1lCiAgICAgICAgICAgICAgICAgY291bnQgPSBzZWxmLl9zZW1sb2NrLl9jb3VudCgpCkBAIC0xNjcsMTUgKzIxMCwxNSBAQAogCiBjbGFzcyBDb25kaXRpb24ob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsb2NrPU5vbmUpOgotICAgICAgICBzZWxmLl9sb2NrID0gbG9jayBvciBSTG9jaygpCi0gICAgICAgIHNlbGYuX3NsZWVwaW5nX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gU2VtYXBob3JlKDApCi0gICAgICAgIHNlbGYuX3dhaXRfc2VtYXBob3JlID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvY2s9Tm9uZSwgKiwgY3R4KToKKyAgICAgICAgc2VsZi5fbG9jayA9IGxvY2sgb3IgY3R4LlJMb2NrKCkKKyAgICAgICAgc2VsZi5fc2xlZXBpbmdfY291bnQgPSBjdHguU2VtYXBob3JlKDApCisgICAgICAgIHNlbGYuX3dva2VuX2NvdW50ID0gY3R4LlNlbWFwaG9yZSgwKQorICAgICAgICBzZWxmLl93YWl0X3NlbWFwaG9yZSA9IGN0eC5TZW1hcGhvcmUoMCkKICAgICAgICAgc2VsZi5fbWFrZV9tZXRob2RzKCkKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIGFzc2VydF9zcGF3bmluZyhzZWxmKQorICAgICAgICBjb250ZXh0LmFzc2VydF9zcGF3bmluZyhzZWxmKQogICAgICAgICByZXR1cm4gKHNlbGYuX2xvY2ssIHNlbGYuX3NsZWVwaW5nX2NvdW50LAogICAgICAgICAgICAgICAgIHNlbGYuX3dva2VuX2NvdW50LCBzZWxmLl93YWl0X3NlbWFwaG9yZSkKIApAQCAtMjg5LDkgKzMzMiw5IEBACiAKIGNsYXNzIEV2ZW50KG9iamVjdCk6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuX2NvbmQgPSBDb25kaXRpb24oTG9jaygpKQotICAgICAgICBzZWxmLl9mbGFnID0gU2VtYXBob3JlKDApCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIGN0eCk6CisgICAgICAgIHNlbGYuX2NvbmQgPSBjdHguQ29uZGl0aW9uKGN0eC5Mb2NrKCkpCisgICAgICAgIHNlbGYuX2ZsYWcgPSBjdHguU2VtYXBob3JlKDApCiAKICAgICBkZWYgaXNfc2V0KHNlbGYpOgogICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQpAQCAtMzQwLDExICszODMsMTEgQEAKIAogY2xhc3MgQmFycmllcih0aHJlYWRpbmcuQmFycmllcik6CiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGFydGllcywgYWN0aW9uPU5vbmUsIHRpbWVvdXQ9Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcnRpZXMsIGFjdGlvbj1Ob25lLCB0aW1lb3V0PU5vbmUsICosIGN0eCk6CiAgICAgICAgIGltcG9ydCBzdHJ1Y3QKLSAgICAgICAgZnJvbSBtdWx0aXByb2Nlc3NpbmcuaGVhcCBpbXBvcnQgQnVmZmVyV3JhcHBlcgorICAgICAgICBmcm9tIC5oZWFwIGltcG9ydCBCdWZmZXJXcmFwcGVyCiAgICAgICAgIHdyYXBwZXIgPSBCdWZmZXJXcmFwcGVyKHN0cnVjdC5jYWxjc2l6ZSgnaScpICogMikKLSAgICAgICAgY29uZCA9IENvbmRpdGlvbigpCisgICAgICAgIGNvbmQgPSBjdHguQ29uZGl0aW9uKCkKICAgICAgICAgc2VsZi5fX3NldHN0YXRlX18oKHBhcnRpZXMsIGFjdGlvbiwgdGltZW91dCwgY29uZCwgd3JhcHBlcikpCiAgICAgICAgIHNlbGYuX3N0YXRlID0gMAogICAgICAgICBzZWxmLl9jb3VudCA9IDAKZGlmZiAtLWdpdCBhL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weSBiL0xpYi9tdWx0aXByb2Nlc3NpbmcvdXRpbC5weQppbmRleCBmNTg2MmI0Li4wYjY5NWU0IDEwMDY0NAotLS0gYS9MaWIvbXVsdGlwcm9jZXNzaW5nL3V0aWwucHkKKysrIGIvTGliL211bHRpcHJvY2Vzc2luZy91dGlsLnB5CkBAIC03LDggKzcsNiBAQAogIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCiAjCiAKLWltcG9ydCBzeXMKLWltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBvcwogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHdlYWtyZWYKQEAgLTE3LDEzICsxNSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyBjbGVhbnVwIGZ1bmN0aW9uIGJlZm9yZSBtdWx0aXByb2Nlc3NpbmcgZG9lcwogZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBfYXJnc19mcm9tX2ludGVycHJldGVyX2ZsYWdzCiAKLWZyb20gbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MgaW1wb3J0IGN1cnJlbnRfcHJvY2VzcywgYWN0aXZlX2NoaWxkcmVuCitmcm9tIC4gaW1wb3J0IHByb2Nlc3MKIAogX19hbGxfXyA9IFsKICAgICAnc3ViX2RlYnVnJywgJ2RlYnVnJywgJ2luZm8nLCAnc3ViX3dhcm5pbmcnLCAnZ2V0X2xvZ2dlcicsCiAgICAgJ2xvZ190b19zdGRlcnInLCAnZ2V0X3RlbXBfZGlyJywgJ3JlZ2lzdGVyX2FmdGVyX2ZvcmsnLAogICAgICdpc19leGl0aW5nJywgJ0ZpbmFsaXplJywgJ0ZvcmtBd2FyZVRocmVhZExvY2snLCAnRm9ya0F3YXJlTG9jYWwnLAotICAgICdTVUJERUJVRycsICdTVUJXQVJOSU5HJywKKyAgICAnY2xvc2VfYWxsX2Zkc19leGNlcHQnLCAnU1VCREVCVUcnLCAnU1VCV0FSTklORycsCiAgICAgXQogCiAjCkBAIC03MSw4ICs2OSw2IEBACiAKICAgICAgICAgICAgIF9sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihMT0dHRVJfTkFNRSkKICAgICAgICAgICAgIF9sb2dnZXIucHJvcGFnYXRlID0gMAotICAgICAgICAgICAgbG9nZ2luZy5hZGRMZXZlbE5hbWUoU1VCREVCVUcsICdTVUJERUJVRycpCi0gICAgICAgICAgICBsb2dnaW5nLmFkZExldmVsTmFtZShTVUJXQVJOSU5HLCAnU1VCV0FSTklORycpCiAKICAgICAgICAgICAgICMgWFhYIG11bHRpcHJvY2Vzc2luZyBzaG91bGQgY2xlYW51cCBiZWZvcmUgbG9nZ2luZwogICAgICAgICAgICAgaWYgaGFzYXR0cihhdGV4aXQsICd1bnJlZ2lzdGVyJyk6CkBAIC0xMTEsMTMgKzEwNywxNCBAQAogCiBkZWYgZ2V0X3RlbXBfZGlyKCk6CiAgICAgIyBnZXQgbmFtZSBvZiBhIHRlbXAgZGlyZWN0b3J5IHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhbmVkIHVwCi0gICAgaWYgY3VycmVudF9wcm9jZXNzKCkuX3RlbXBkaXIgaXMgTm9uZToKKyAgICB0ZW1wZGlyID0gcHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MoKS5fY29uZmlnLmdldCgndGVtcGRpcicpCisgICAgaWYgdGVtcGRpciBpcyBOb25lOgogICAgICAgICBpbXBvcnQgc2h1dGlsLCB0ZW1wZmlsZQogICAgICAgICB0ZW1wZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9J3B5bXAtJykKICAgICAgICAgaW5mbygnY3JlYXRlZCB0ZW1wIGRpcmVjdG9yeSAlcycsIHRlbXBkaXIpCiAgICAgICAgIEZpbmFsaXplKE5vbmUsIHNodXRpbC5ybXRyZWUsIGFyZ3M9W3RlbXBkaXJdLCBleGl0cHJpb3JpdHk9LTEwMCkKLSAgICAgICAgY3VycmVudF9wcm9jZXNzKCkuX3RlbXBkaXIgPSB0ZW1wZGlyCi0gICAgcmV0dXJuIGN1cnJlbnRfcHJvY2VzcygpLl90ZW1wZGlyCisgICAgICAgIHByb2Nlc3MuY3VycmVudF9wcm9jZXNzKCkuX2NvbmZpZ1sndGVtcGRpciddID0gdGVtcGRpcgorICAgIHJldHVybiB0ZW1wZGlyCiAKICMKICMgU3VwcG9ydCBmb3IgcmVpbml0aWFsaXphdGlvbiBvZiBvYmplY3RzIHdoZW4gYm9vdHN0cmFwcGluZyBhIGNoaWxkIHByb2Nlc3MKQEAgLTI3Myw4ICsyNzAsOCBAQAogX2V4aXRpbmcgPSBGYWxzZQogCiBkZWYgX2V4aXRfZnVuY3Rpb24oaW5mbz1pbmZvLCBkZWJ1Zz1kZWJ1ZywgX3J1bl9maW5hbGl6ZXJzPV9ydW5fZmluYWxpemVycywKLSAgICAgICAgICAgICAgICAgICBhY3RpdmVfY2hpbGRyZW49YWN0aXZlX2NoaWxkcmVuLAotICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfcHJvY2Vzcz1jdXJyZW50X3Byb2Nlc3MpOgorICAgICAgICAgICAgICAgICAgIGFjdGl2ZV9jaGlsZHJlbj1wcm9jZXNzLmFjdGl2ZV9jaGlsZHJlbiwKKyAgICAgICAgICAgICAgICAgICBjdXJyZW50X3Byb2Nlc3M9cHJvY2Vzcy5jdXJyZW50X3Byb2Nlc3MpOgogICAgICMgV2UgaG9sZCBvbiB0byByZWZlcmVuY2VzIHRvIGZ1bmN0aW9ucyBpbiB0aGUgYXJnbGlzdCBkdWUgdG8gdGhlCiAgICAgIyBzaXR1YXRpb24gZGVzY3JpYmVkIGJlbG93LCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciB0aGlzCiAgICAgIyBtb2R1bGUncyBnbG9iYWxzIGFyZSBkZXN0cm95ZWQuCkBAIC0zMDMsNyArMzAwLDcgQEAKICAgICAgICAgICAgICMgIzkyMDcuCiAKICAgICAgICAgICAgIGZvciBwIGluIGFjdGl2ZV9jaGlsZHJlbigpOgotICAgICAgICAgICAgICAgIGlmIHAuX2RhZW1vbmljOgorICAgICAgICAgICAgICAgIGlmIHAuZGFlbW9uOgogICAgICAgICAgICAgICAgICAgICBpbmZvKCdjYWxsaW5nIHRlcm1pbmF0ZSgpIGZvciBkYWVtb24gJXMnLCBwLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHAuX3BvcGVuLnRlcm1pbmF0ZSgpCiAKQEAgLTMzNSwzICszMzIsMzYgQEAKICAgICAgICAgcmVnaXN0ZXJfYWZ0ZXJfZm9yayhzZWxmLCBsYW1iZGEgb2JqIDogb2JqLl9fZGljdF9fLmNsZWFyKCkpCiAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CiAgICAgICAgIHJldHVybiB0eXBlKHNlbGYpLCAoKQorCisjCisjIENsb3NlIGZkcyBleGNlcHQgdGhvc2Ugc3BlY2lmaWVkCisjCisKK3RyeToKKyAgICBNQVhGRCA9IG9zLnN5c2NvbmYoIlNDX09QRU5fTUFYIikKK2V4Y2VwdCBFeGNlcHRpb246CisgICAgTUFYRkQgPSAyNTYKKworZGVmIGNsb3NlX2FsbF9mZHNfZXhjZXB0KGZkcyk6CisgICAgZmRzID0gbGlzdChmZHMpICsgWy0xLCBNQVhGRF0KKyAgICBmZHMuc29ydCgpCisgICAgYXNzZXJ0IGZkc1stMV0gPT0gTUFYRkQsICdmZCB0b28gbGFyZ2UnCisgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGZkcykgLSAxKToKKyAgICAgICAgb3MuY2xvc2VyYW5nZShmZHNbaV0rMSwgZmRzW2krMV0pCisKKyMKKyMgU3RhcnQgYSBwcm9ncmFtIHdpdGggb25seSBzcGVjaWZpZWQgZmRzIGtlcHQgb3BlbgorIworCitkZWYgc3Bhd252X3Bhc3NmZHMocGF0aCwgYXJncywgcGFzc2Zkcyk6CisgICAgaW1wb3J0IF9wb3NpeHN1YnByb2Nlc3MKKyAgICBwYXNzZmRzID0gc29ydGVkKHBhc3NmZHMpCisgICAgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlID0gb3MucGlwZSgpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gX3Bvc2l4c3VicHJvY2Vzcy5mb3JrX2V4ZWMoCisgICAgICAgICAgICBhcmdzLCBbb3MuZnNlbmNvZGUocGF0aCldLCBUcnVlLCBwYXNzZmRzLCBOb25lLCBOb25lLAorICAgICAgICAgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlLAorICAgICAgICAgICAgRmFsc2UsIEZhbHNlLCBOb25lKQorICAgIGZpbmFsbHk6CisgICAgICAgIG9zLmNsb3NlKGVycnBpcGVfcmVhZCkKKyAgICAgICAgb3MuY2xvc2UoZXJycGlwZV93cml0ZSkKZGlmZiAtLWdpdCBhL0xpYi9uZXRyYy5weSBiL0xpYi9uZXRyYy5weQppbmRleCAyYWE0OGYzLi5iYmIzZDIzIDEwMDY0NAotLS0gYS9MaWIvbmV0cmMucHkKKysrIGIvTGliL25ldHJjLnB5CkBAIC0zLDggKzMsNiBAQAogIyBNb2R1bGUgYW5kIGRvY3VtZW50YXRpb24gYnkgRXJpYyBTLiBSYXltb25kLCAyMSBEZWMgMTk5OAogCiBpbXBvcnQgb3MsIHNobGV4LCBzdGF0Ci1pZiBvcy5uYW1lID09ICdwb3NpeCc6Ci0gICAgaW1wb3J0IHB3ZAogCiBfX2FsbF9fID0gWyJuZXRyYyIsICJOZXRyY1BhcnNlRXJyb3IiXQogCkBAIC0yOCw3ICsyNiw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZmlsZSA9IG9zLnBhdGguam9pbihvcy5lbnZpcm9uWydIT01FJ10sICIubmV0cmMiKQogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIkNvdWxkIG5vdCBmaW5kIC5uZXRyYzogJEhPTUUgaXMgbm90IHNldCIpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiQ291bGQgbm90IGZpbmQgLm5ldHJjOiAkSE9NRSBpcyBub3Qgc2V0IikKICAgICAgICAgc2VsZi5ob3N0cyA9IHt9CiAgICAgICAgIHNlbGYubWFjcm9zID0ge30KICAgICAgICAgd2l0aCBvcGVuKGZpbGUpIGFzIGZwOgpAQCAtOTIsNiArOTAsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBvcy5uYW1lID09ICdwb3NpeCcgYW5kIGRlZmF1bHRfbmV0cmM6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wID0gb3MuZnN0YXQoZnAuZmlsZW5vKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwcm9wLnN0X3VpZCAhPSBvcy5nZXR1aWQoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnQgcHdkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3duZXIgPSBwd2QuZ2V0cHd1aWQocHJvcC5zdF91aWQpWzBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgpkaWZmIC0tZ2l0IGEvTGliL25udHBsaWIucHkgYi9MaWIvbm50cGxpYi5weQppbmRleCAwMmNjMzdjLi5hNzVmYWFkIDEwMDY0NAotLS0gYS9MaWIvbm50cGxpYi5weQorKysgYi9MaWIvbm50cGxpYi5weQpAQCAtODAsMTMgKzgwLDEzIEBACiBmcm9tIHNvY2tldCBpbXBvcnQgX0dMT0JBTF9ERUZBVUxUX1RJTUVPVVQKIAogX19hbGxfXyA9IFsiTk5UUCIsCi0gICAgICAgICAgICJOTlRQUmVwbHlFcnJvciIsICJOTlRQVGVtcG9yYXJ5RXJyb3IiLCAiTk5UUFBlcm1hbmVudEVycm9yIiwKLSAgICAgICAgICAgIk5OVFBQcm90b2NvbEVycm9yIiwgIk5OVFBEYXRhRXJyb3IiLAorICAgICAgICAgICAiTk5UUEVycm9yIiwgIk5OVFBSZXBseUVycm9yIiwgIk5OVFBUZW1wb3JhcnlFcnJvciIsCisgICAgICAgICAgICJOTlRQUGVybWFuZW50RXJyb3IiLCAiTk5UUFByb3RvY29sRXJyb3IiLCAiTk5UUERhdGFFcnJvciIsCiAgICAgICAgICAgICJkZWNvZGVfaGVhZGVyIiwKICAgICAgICAgICAgXQogCiAjIG1heGltYWwgbGluZSBsZW5ndGggd2hlbiBjYWxsaW5nIHJlYWRsaW5lKCkuIFRoaXMgaXMgdG8gcHJldmVudAotIyByZWFkaW5nIGFyYml0cmFyeSBsZW5naHQgbGluZXMuIFJGQyAzOTc3IGxpbWl0cyBOTlRQIGxpbmUgbGVuZ3RoIHRvCisjIHJlYWRpbmcgYXJiaXRyYXJ5IGxlbmd0aCBsaW5lcy4gUkZDIDM5NzcgbGltaXRzIE5OVFAgbGluZSBsZW5ndGggdG8KICMgNTEyIGNoYXJhY3RlcnMsIGluY2x1ZGluZyBDUkxGLiBXZSBoYXZlIHNlbGVjdGVkIDIwNDgganVzdCB0byBiZSBvbgogIyB0aGUgc2FmZSBzaWRlLgogX01BWExJTkUgPSAyMDQ4CkBAIC0yMDEsNyArMjAxLDcgQEAKICAgICByZXR1cm4gZm10CiAKIGRlZiBfcGFyc2Vfb3ZlcnZpZXcobGluZXMsIGZtdCwgZGF0YV9wcm9jZXNzX2Z1bmM9Tm9uZSk6Ci0gICAgIiIiUGFyc2UgdGhlIHJlc3BvbnNlIHRvIGEgT1ZFUiBvciBYT1ZFUiBjb21tYW5kIGFjY29yZGluZyB0byB0aGUKKyAgICAiIiJQYXJzZSB0aGUgcmVzcG9uc2UgdG8gYW4gT1ZFUiBvciBYT1ZFUiBjb21tYW5kIGFjY29yZGluZyB0byB0aGUKICAgICBvdmVydmlldyBmb3JtYXQgYGZtdGAuIiIiCiAgICAgbl9kZWZhdWx0cyA9IGxlbihfREVGQVVMVF9PVkVSVklFV19GTVQpCiAgICAgb3ZlcnZpZXcgPSBbXQpAQCAtMjc5LDcgKzI3OSw3IEBACiAKIGlmIF9oYXZlX3NzbDoKIAotICAgIGRlZiBfZW5jcnlwdF9vbihzb2NrLCBjb250ZXh0KToKKyAgICBkZWYgX2VuY3J5cHRfb24oc29jaywgY29udGV4dCwgaG9zdG5hbWUpOgogICAgICAgICAiIiJXcmFwIGEgc29ja2V0IGluIFNTTC9UTFMuIEFyZ3VtZW50czoKICAgICAgICAgLSBzb2NrOiBTb2NrZXQgdG8gd3JhcAogICAgICAgICAtIGNvbnRleHQ6IFNTTCBjb250ZXh0IHRvIHVzZSBmb3IgdGhlIGVuY3J5cHRlZCBjb25uZWN0aW9uCkBAIC0yODgsMTAgKzI4OCw4IEBACiAgICAgICAgICIiIgogICAgICAgICAjIEdlbmVyYXRlIGEgZGVmYXVsdCBTU0wgY29udGV4dCBpZiBub25lIHdhcyBwYXNzZWQuCiAgICAgICAgIGlmIGNvbnRleHQgaXMgTm9uZToKLSAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICAgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCi0gICAgICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCi0gICAgICAgIHJldHVybiBjb250ZXh0LndyYXBfc29ja2V0KHNvY2spCisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoKQorICAgICAgICByZXR1cm4gY29udGV4dC53cmFwX3NvY2tldChzb2NrLCBzZXJ2ZXJfaG9zdG5hbWU9aG9zdG5hbWUpCiAKIAogIyBUaGUgY2xhc3NlcyB0aGVtc2VsdmVzCkBAIC0zNjYsNyArMzY0LDcgQEAKICAgICAgICAgaWYgaXNfY29ubmVjdGVkKCk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2VsZi5xdWl0KCkKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIGlmIGlzX2Nvbm5lY3RlZCgpOgpAQCAtOTU2LDcgKzk1NCw3IEBACiAgICAgICAgICAgICAgICAgaWYgYXV0aDoKICAgICAgICAgICAgICAgICAgICAgdXNlciA9IGF1dGhbMF0KICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQgPSBhdXRoWzJdCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyBQZXJmb3JtIE5OVFAgYXV0aGVudGljYXRpb24gaWYgbmVlZGVkLgogICAgICAgICBpZiBub3QgdXNlcjoKQEAgLTEwMDcsNyArMTAwNSw3IEBACiAgICAgICAgICAgICByZXNwID0gc2VsZi5fc2hvcnRjbWQoJ1NUQVJUVExTJykKICAgICAgICAgICAgIGlmIHJlc3Auc3RhcnRzd2l0aCgnMzgyJyk6CiAgICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLnNvY2sgPSBfZW5jcnlwdF9vbihzZWxmLnNvY2ssIGNvbnRleHQpCisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gX2VuY3J5cHRfb24oc2VsZi5zb2NrLCBjb250ZXh0LCBzZWxmLmhvc3QpCiAgICAgICAgICAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQogICAgICAgICAgICAgICAgIHNlbGYudGxzX29uID0gVHJ1ZQogICAgICAgICAgICAgICAgICMgQ2FwYWJpbGl0aWVzIG1heSBjaGFuZ2UgYWZ0ZXIgVExTIHN0YXJ0cyB1cCwgc28gYXNrIGZvciB0aGVtCkBAIC0xMDQzLDExICsxMDQxLDE4IEBACiAgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAogICAgICAgICBzZWxmLnNvY2sgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCB0aW1lb3V0KQotICAgICAgICBmaWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQotICAgICAgICBfTk5UUEJhc2UuX19pbml0X18oc2VsZiwgZmlsZSwgaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGUsIHRpbWVvdXQpCi0gICAgICAgIGlmIHVzZXIgb3IgdXNlbmV0cmM6Ci0gICAgICAgICAgICBzZWxmLmxvZ2luKHVzZXIsIHBhc3N3b3JkLCB1c2VuZXRyYykKKyAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgicndiIikKKyAgICAgICAgICAgIF9OTlRQQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGUsIHRpbWVvdXQpCisgICAgICAgICAgICBpZiB1c2VyIG9yIHVzZW5ldHJjOgorICAgICAgICAgICAgICAgIHNlbGYubG9naW4odXNlciwgcGFzc3dvcmQsIHVzZW5ldHJjKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBpZiBmaWxlOgorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgX2Nsb3NlKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0xMDY3LDEyICsxMDcyLDE5IEBACiAgICAgICAgICAgICBpbiBkZWZhdWx0IHBvcnQgYW5kIHRoZSBgc3NsX2NvbnRleHRgIGFyZ3VtZW50IGZvciBTU0wgY29ubmVjdGlvbnMuCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIHNlbGYuc29jayA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQpCi0gICAgICAgICAgICBzZWxmLnNvY2sgPSBfZW5jcnlwdF9vbihzZWxmLnNvY2ssIHNzbF9jb250ZXh0KQotICAgICAgICAgICAgZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgicndiIikKLSAgICAgICAgICAgIF9OTlRQQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlcm1vZGU9cmVhZGVybW9kZSwgdGltZW91dD10aW1lb3V0KQotICAgICAgICAgICAgaWYgdXNlciBvciB1c2VuZXRyYzoKLSAgICAgICAgICAgICAgICBzZWxmLmxvZ2luKHVzZXIsIHBhc3N3b3JkLCB1c2VuZXRyYykKKyAgICAgICAgICAgIGZpbGUgPSBOb25lCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gX2VuY3J5cHRfb24oc2VsZi5zb2NrLCBzc2xfY29udGV4dCwgaG9zdCkKKyAgICAgICAgICAgICAgICBmaWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCJyd2IiKQorICAgICAgICAgICAgICAgIF9OTlRQQmFzZS5fX2luaXRfXyhzZWxmLCBmaWxlLCBob3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXJtb2RlPXJlYWRlcm1vZGUsIHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgICAgICAgICBpZiB1c2VyIG9yIHVzZW5ldHJjOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvZ2luKHVzZXIsIHBhc3N3b3JkLCB1c2VuZXRyYykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBpZiBmaWxlOgorICAgICAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCiAKICAgICAgICAgZGVmIF9jbG9zZShzZWxmKToKICAgICAgICAgICAgIHRyeToKQEAgLTEwODYsNyArMTA5OCw2IEBACiAjIFRlc3QgcmV0cmlldmFsIHdoZW4gcnVuIGFzIGEgc2NyaXB0LgogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBpbXBvcnQgYXJncGFyc2UKLSAgICBmcm9tIGVtYWlsLnV0aWxzIGltcG9ydCBwYXJzZWRhdGUKIAogICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSIiIlwKICAgICAgICAgbm50cGxpYiBidWlsdC1pbiBkZW1vIC0gZGlzcGxheSB0aGUgbGF0ZXN0IGFydGljbGVzIGluIGEgbmV3c2dyb3VwIiIiKQpkaWZmIC0tZ2l0IGEvTGliL250cGF0aC5weSBiL0xpYi9udHBhdGgucHkKaW5kZXggMzAzZTU4Ni4uOTkyOTcwYSAxMDA2NDQKLS0tIGEvTGliL250cGF0aC5weQorKysgYi9MaWIvbnRwYXRoLnB5CkBAIC0xNyw3ICsxNyw3IEBACiAgICAgICAgICAgICJpc21vdW50IiwgImV4cGFuZHVzZXIiLCJleHBhbmR2YXJzIiwibm9ybXBhdGgiLCJhYnNwYXRoIiwKICAgICAgICAgICAgInNwbGl0dW5jIiwiY3VyZGlyIiwicGFyZGlyIiwic2VwIiwicGF0aHNlcCIsImRlZnBhdGgiLCJhbHRzZXAiLAogICAgICAgICAgICAiZXh0c2VwIiwiZGV2bnVsbCIsInJlYWxwYXRoIiwic3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMiLCJyZWxwYXRoIiwKLSAgICAgICAgICAgInNhbWVmaWxlIiwgInNhbWVvcGVuZmlsZSIsXQorICAgICAgICAgICAic2FtZWZpbGUiLCAic2FtZW9wZW5maWxlIiwgInNhbWVzdGF0IixdCiAKICMgc3RyaW5ncyByZXByZXNlbnRpbmcgdmFyaW91cyBwYXRoLXJlbGF0ZWQgYml0cyBhbmQgcGllY2VzCiAjIFRoZXNlIGFyZSBwcmltYXJpbHkgZm9yIGV4cG9ydDsgaW50ZXJuYWxseSwgdGhleSBhcmUgaGFyZGNvZGVkLgpAQCAtMzAsOSArMzAsNiBAQAogZGVmcGF0aCA9ICcuO0M6XFxiaW4nCiBpZiAnY2UnIGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lczoKICAgICBkZWZwYXRoID0gJ1xcV2luZG93cycKLWVsaWYgJ29zMicgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotICAgICMgT1MvMiB3LyBWQUNQUAotICAgIGFsdHNlcCA9ICcvJwogZGV2bnVsbCA9ICdudWwnCiAKIGRlZiBfZ2V0X2VtcHR5KHBhdGgpOgpAQCAtMjYwLDEyICsyNTcsMTEgQEAKIAogZGVmIGlzbGluayhwYXRoKToKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgc3ltYm9saWMgbGluay4KLSAgICBUaGlzIHdpbGwgYWx3YXlzIHJldHVybiBmYWxzZSBmb3IgV2luZG93cyBwcmlvciB0byA2LjAKLSAgICBhbmQgZm9yIE9TLzIuCisgICAgVGhpcyB3aWxsIGFsd2F5cyByZXR1cm4gZmFsc2UgZm9yIFdpbmRvd3MgcHJpb3IgdG8gNi4wLgogICAgICIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICBleGNlcHQgKE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0xOSyhzdC5zdF9tb2RlKQogCkBAIC0yNzUsMjAgKzI3MSwzOSBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBUcnVlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKICAgICB0cnk6CiAgICAgICAgIHN0ID0gb3MubHN0YXQocGF0aCkKLSAgICBleGNlcHQgKG9zLmVycm9yLCBXaW5kb3dzRXJyb3IpOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCi0jIElzIGEgcGF0aCBhIG1vdW50IHBvaW50PyAgRWl0aGVyIGEgcm9vdCAod2l0aCBvciB3aXRob3V0IGRyaXZlIGxldHRlcikKLSMgb3IgYW4gVU5DIHBhdGggd2l0aCBhdCBtb3N0IGEgLyBvciBcIGFmdGVyIHRoZSBtb3VudCBwb2ludC4KLQorIyBJcyBhIHBhdGggYSBtb3VudCBwb2ludD8KKyMgQW55IGRyaXZlIGxldHRlciByb290IChlZyBjOlwpCisjIEFueSBzaGFyZSBVTkMgKGVnIFxcc2VydmVyXHNoYXJlKQorIyBBbnkgdm9sdW1lIG1vdW50ZWQgb24gYSBmaWxlc3lzdGVtIGZvbGRlcgorIworIyBObyBvbmUgbWV0aG9kIGRldGVjdHMgYWxsIHRocmVlIHNpdHVhdGlvbnMuIEhpc3RvcmljYWxseSB3ZSd2ZSBsZXhpY2FsbHkKKyMgZGV0ZWN0ZWQgZHJpdmUgbGV0dGVyIHJvb3RzIGFuZCBzaGFyZSBVTkNzLiBUaGUgY2Fub25pY2FsIGFwcHJvYWNoIHRvCisjIGRldGVjdGluZyBtb3VudGVkIHZvbHVtZXMgKHF1ZXJ5aW5nIHRoZSByZXBhcnNlIHRhZykgZmFpbHMgZm9yIHRoZSBtb3N0CisjIGNvbW1vbiBjYXNlOiBkcml2ZSBsZXR0ZXIgcm9vdHMuIFRoZSBhbHRlcm5hdGl2ZSB3aGljaCB1c2VzIEdldFZvbHVtZVBhdGhOYW1lCisjIGZhaWxzIGlmIHRoZSBkcml2ZSBsZXR0ZXIgaXMgdGhlIHJlc3VsdCBvZiBhIFNVQlNULgordHJ5OgorICAgIGZyb20gbnQgaW1wb3J0IF9nZXR2b2x1bWVwYXRobmFtZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9nZXR2b2x1bWVwYXRobmFtZSA9IE5vbmUKIGRlZiBpc21vdW50KHBhdGgpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCAoZGVmaW5lZCBhcyByb290IG9mIGRyaXZlKSIiIgorICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCAoYSBkcml2ZSByb290LCB0aGUgcm9vdCBvZiBhCisgICAgc2hhcmUsIG9yIGEgbW91bnRlZCB2b2x1bWUpIiIiCiAgICAgc2VwcyA9IF9nZXRfYm90aHNlcHMocGF0aCkKKyAgICBwYXRoID0gYWJzcGF0aChwYXRoKQogICAgIHJvb3QsIHJlc3QgPSBzcGxpdGRyaXZlKHBhdGgpCiAgICAgaWYgcm9vdCBhbmQgcm9vdFswXSBpbiBzZXBzOgogICAgICAgICByZXR1cm4gKG5vdCByZXN0KSBvciAocmVzdCBpbiBzZXBzKQotICAgIHJldHVybiByZXN0IGluIHNlcHMKKyAgICBpZiByZXN0IGluIHNlcHM6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBpZiBfZ2V0dm9sdW1lcGF0aG5hbWU6CisgICAgICAgIHJldHVybiBwYXRoLnJzdHJpcChzZXBzKSA9PSBfZ2V0dm9sdW1lcGF0aG5hbWUocGF0aCkucnN0cmlwKHNlcHMpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIEZhbHNlCiAKIAogIyBFeHBhbmQgcGF0aHMgYmVnaW5uaW5nIHdpdGggJ34nIG9yICd+dXNlcicuCkBAIC0zODUsNyArNDAwLDcgQEAKICAgICAgICAgICAgICAgICBpbmRleCA9IHBhdGguaW5kZXgoYykKICAgICAgICAgICAgICAgICByZXMgKz0gYyArIHBhdGhbOmluZGV4ICsgMV0KICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgICAgIHJlcyArPSBwYXRoCisgICAgICAgICAgICAgICAgcmVzICs9IGMgKyBwYXRoCiAgICAgICAgICAgICAgICAgaW5kZXggPSBwYXRobGVuIC0gMQogICAgICAgICBlbGlmIGMgPT0gcGVyY2VudDogICMgdmFyaWFibGUgb3IgJyUnCiAgICAgICAgICAgICBpZiBwYXRoW2luZGV4ICsgMTppbmRleCArIDJdID09IHBlcmNlbnQ6CkBAIC01MzAsNyArNTQ1LDcgQEAKICAgICAgICAgaWYgcGF0aDogIyBFbXB0eSBwYXRoIG11c3QgcmV0dXJuIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcGF0aCA9IF9nZXRmdWxscGF0aG5hbWUocGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzICMgQmFkIHBhdGggLSByZXR1cm4gdW5jaGFuZ2VkLgogICAgICAgICBlbGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgogICAgICAgICAgICAgcGF0aCA9IG9zLmdldGN3ZGIoKQpAQCAtNTk4LDIzICs2MTMsNiBAQAogICAgIGRlZiBfZ2V0ZmluYWxwYXRobmFtZShmKToKICAgICAgICAgcmV0dXJuIG5vcm1jYXNlKGFic3BhdGgoZikpCiAKLWRlZiBzYW1lZmlsZShmMSwgZjIpOgotICAgICJUZXN0IHdoZXRoZXIgdHdvIHBhdGhuYW1lcyByZWZlcmVuY2UgdGhlIHNhbWUgYWN0dWFsIGZpbGUiCi0gICAgcmV0dXJuIF9nZXRmaW5hbHBhdGhuYW1lKGYxKSA9PSBfZ2V0ZmluYWxwYXRobmFtZShmMikKLQotCi10cnk6Ci0gICAgZnJvbSBudCBpbXBvcnQgX2dldGZpbGVpbmZvcm1hdGlvbgotZXhjZXB0IEltcG9ydEVycm9yOgotICAgICMgT24gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMsIGp1c3QgcmV0dXJuIHRoZSBmZCBhbmQgc2VlIHRoYXQKLSAgICAjIGl0IGNvbXBhcmVzIGVxdWFsIGluIHNhbWVvcGVuZmlsZS4KLSAgICBkZWYgX2dldGZpbGVpbmZvcm1hdGlvbihmZCk6Ci0gICAgICAgIHJldHVybiBmZAotCi1kZWYgc2FtZW9wZW5maWxlKGYxLCBmMik6Ci0gICAgIiIiVGVzdCB3aGV0aGVyIHR3byBmaWxlIG9iamVjdHMgcmVmZXJlbmNlIHRoZSBzYW1lIGZpbGUiIiIKLSAgICByZXR1cm4gX2dldGZpbGVpbmZvcm1hdGlvbihmMSkgPT0gX2dldGZpbGVpbmZvcm1hdGlvbihmMikKLQogCiB0cnk6CiAgICAgIyBUaGUgZ2VuZXJpY3BhdGguaXNkaXIgaW1wbGVtZW50YXRpb24gdXNlcyBvcy5zdGF0IGFuZCBjaGVja3MgdGhlIG1vZGUKZGlmZiAtLWdpdCBhL0xpYi9udHVybDJwYXRoLnB5IGIvTGliL250dXJsMnBhdGgucHkKaW5kZXggNTExZGNlYy4uMzZkYzc2NSAxMDA2NDQKLS0tIGEvTGliL250dXJsMnBhdGgucHkKKysrIGIvTGliL250dXJsMnBhdGgucHkKQEAgLTQsOSArNCwxMSBAQAogICAgICIiIk9TLXNwZWNpZmljIGNvbnZlcnNpb24gZnJvbSBhIHJlbGF0aXZlIFVSTCBvZiB0aGUgJ2ZpbGUnIHNjaGVtZQogICAgIHRvIGEgZmlsZSBzeXN0ZW0gcGF0aDsgbm90IHJlY29tbWVuZGVkIGZvciBnZW5lcmFsIHVzZS4iIiIKICAgICAjIGUuZy4KLSAgICAjIC8vL0N8L2Zvby9iYXIvc3BhbS5mb28KLSAgICAjIGJlY29tZXMKLSAgICAjIEM6XGZvb1xiYXJcc3BhbS5mb28KKyAgICAjICAgLy8vQ3wvZm9vL2Jhci9zcGFtLmZvbworICAgICMgYW5kCisgICAgIyAgIC8vL0M6L2Zvby9iYXIvc3BhbS5mb28KKyAgICAjIGJlY29tZQorICAgICMgICBDOlxmb29cYmFyXHNwYW0uZm9vCiAgICAgaW1wb3J0IHN0cmluZywgdXJsbGliLnBhcnNlCiAgICAgIyBXaW5kb3dzIGl0c2VsZiB1c2VzICI6IiBldmVuIGluIFVSTHMuCiAgICAgdXJsID0gdXJsLnJlcGxhY2UoJzonLCAnfCcpCkBAIC0yMyw3ICsyNSw3IEBACiAgICAgY29tcCA9IHVybC5zcGxpdCgnfCcpCiAgICAgaWYgbGVuKGNvbXApICE9IDIgb3IgY29tcFswXVstMV0gbm90IGluIHN0cmluZy5hc2NpaV9sZXR0ZXJzOgogICAgICAgICBlcnJvciA9ICdCYWQgVVJMOiAnICsgdXJsCi0gICAgICAgIHJhaXNlIElPRXJyb3IoZXJyb3IpCisgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJyb3IpCiAgICAgZHJpdmUgPSBjb21wWzBdWy0xXS51cHBlcigpCiAgICAgY29tcG9uZW50cyA9IGNvbXBbMV0uc3BsaXQoJy8nKQogICAgIHBhdGggPSBkcml2ZSArICc6JwpAQCAtMzksOSArNDEsOSBAQAogICAgICIiIk9TLXNwZWNpZmljIGNvbnZlcnNpb24gZnJvbSBhIGZpbGUgc3lzdGVtIHBhdGggdG8gYSByZWxhdGl2ZSBVUkwKICAgICBvZiB0aGUgJ2ZpbGUnIHNjaGVtZTsgbm90IHJlY29tbWVuZGVkIGZvciBnZW5lcmFsIHVzZS4iIiIKICAgICAjIGUuZy4KLSAgICAjIEM6XGZvb1xiYXJcc3BhbS5mb28KKyAgICAjICAgQzpcZm9vXGJhclxzcGFtLmZvbwogICAgICMgYmVjb21lcwotICAgICMgLy8vQ3wvZm9vL2Jhci9zcGFtLmZvbworICAgICMgICAvLy9DOi9mb28vYmFyL3NwYW0uZm9vCiAgICAgaW1wb3J0IHVybGxpYi5wYXJzZQogICAgIGlmIG5vdCAnOicgaW4gcDoKICAgICAgICAgIyBObyBkcml2ZSBzcGVjaWZpZXIsIGp1c3QgY29udmVydCBzbGFzaGVzIGFuZCBxdW90ZSB0aGUgbmFtZQpAQCAtNTUsNyArNTcsNyBAQAogICAgIGNvbXAgPSBwLnNwbGl0KCc6JykKICAgICBpZiBsZW4oY29tcCkgIT0gMiBvciBsZW4oY29tcFswXSkgPiAxOgogICAgICAgICBlcnJvciA9ICdCYWQgcGF0aDogJyArIHAKLSAgICAgICAgcmFpc2UgSU9FcnJvcihlcnJvcikKKyAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJvcikKIAogICAgIGRyaXZlID0gdXJsbGliLnBhcnNlLnF1b3RlKGNvbXBbMF0udXBwZXIoKSkKICAgICBjb21wb25lbnRzID0gY29tcFsxXS5zcGxpdCgnXFwnKQpkaWZmIC0tZ2l0IGEvTGliL251bWJlcnMucHkgYi9MaWIvbnVtYmVycy5weQppbmRleCBiMjA2NDU3Li43ZWVkYzYzIDEwMDY0NAotLS0gYS9MaWIvbnVtYmVycy5weQorKysgYi9MaWIvbnVtYmVycy5weQpAQCAtMTQxLDExICsxNDEsNiBAQAogICAgICAgICAiIiJzZWxmID09IG90aGVyIiIiCiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKIAotICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgotICAgICAgICAiIiJzZWxmICE9IG90aGVyIiIiCi0gICAgICAgICMgVGhlIGRlZmF1bHQgX19uZV9fIGRvZXNuJ3QgbmVnYXRlIF9fZXFfXyB1bnRpbCAzLjAuCi0gICAgICAgIHJldHVybiBub3QgKHNlbGYgPT0gb3RoZXIpCi0KIENvbXBsZXgucmVnaXN0ZXIoY29tcGxleCkKIAogCmRpZmYgLS1naXQgYS9MaWIvb3Bjb2RlLnB5IGIvTGliL29wY29kZS5weQppbmRleCBhNjM5ZmUzLi4wYmQxZWU2IDEwMDY0NAotLS0gYS9MaWIvb3Bjb2RlLnB5CisrKyBiL0xpYi9vcGNvZGUucHkKQEAgLTgsNiArOCwxOSBAQAogICAgICAgICAgICAiaGFzbG9jYWwiLCAiaGFzY29tcGFyZSIsICJoYXNmcmVlIiwgIm9wbmFtZSIsICJvcG1hcCIsCiAgICAgICAgICAgICJIQVZFX0FSR1VNRU5UIiwgIkVYVEVOREVEX0FSRyIsICJoYXNuYXJncyJdCiAKKyMgSXQncyBhIGNoaWNrZW4tYW5kLWVnZyBJJ20gYWZyYWlkOgorIyBXZSdyZSBpbXBvcnRlZCBiZWZvcmUgX29wY29kZSdzIG1hZGUuCisjIFdpdGggZXhjZXB0aW9uIHVuaGVlZGVkCisjIChzdGFja19lZmZlY3QgaXMgbm90IG5lZWRlZCkKKyMgQm90aCBvdXIgY2hpY2tlbnMgYW5kIGVnZ3MgYXJlIGFsbGF5ZWQuCisjICAgICAtLUxhcnJ5IEhhc3RpbmdzLCAyMDEzLzExLzIzCisKK3RyeToKKyAgICBmcm9tIF9vcGNvZGUgaW1wb3J0IHN0YWNrX2VmZmVjdAorICAgIF9fYWxsX18uYXBwZW5kKCdzdGFja19lZmZlY3QnKQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKKwogY21wX29wID0gKCc8JywgJzw9JywgJz09JywgJyE9JywgJz4nLCAnPj0nLCAnaW4nLCAnbm90IGluJywgJ2lzJywKICAgICAgICAgJ2lzIG5vdCcsICdleGNlcHRpb24gbWF0Y2gnLCAnQkFEJykKIApAQCAtODQsNyArOTcsNiBAQAogZGVmX29wKCdCSU5BUllfT1InLCA2NikKIGRlZl9vcCgnSU5QTEFDRV9QT1dFUicsIDY3KQogZGVmX29wKCdHRVRfSVRFUicsIDY4KQotZGVmX29wKCdTVE9SRV9MT0NBTFMnLCA2OSkKIAogZGVmX29wKCdQUklOVF9FWFBSJywgNzApCiBkZWZfb3AoJ0xPQURfQlVJTERfQ0xBU1MnLCA3MSkKQEAgLTE3OSw2ICsxOTEsOSBAQAogZGVmX29wKCdTRVRfQUREJywgMTQ2KQogZGVmX29wKCdNQVBfQUREJywgMTQ3KQogCitkZWZfb3AoJ0xPQURfQ0xBU1NERVJFRicsIDE0OCkKK2hhc2ZyZWUuYXBwZW5kKDE0OCkKKwogZGVmX29wKCdFWFRFTkRFRF9BUkcnLCAxNDQpCiBFWFRFTkRFRF9BUkcgPSAxNDQKIApkaWZmIC0tZ2l0IGEvTGliL29wZXJhdG9yLnB5IGIvTGliL29wZXJhdG9yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MDM0OWYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvb3BlcmF0b3IucHkKQEAgLTAsMCArMSw0MTEgQEAKKyIiIgorT3BlcmF0b3IgSW50ZXJmYWNlCisKK1RoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXQgb2YgZnVuY3Rpb25zIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGludHJpbnNpYworb3BlcmF0b3JzIG9mIFB5dGhvbi4gIEZvciBleGFtcGxlLCBvcGVyYXRvci5hZGQoeCwgeSkgaXMgZXF1aXZhbGVudAordG8gdGhlIGV4cHJlc3Npb24geCt5LiAgVGhlIGZ1bmN0aW9uIG5hbWVzIGFyZSB0aG9zZSB1c2VkIGZvciBzcGVjaWFsCittZXRob2RzOyB2YXJpYW50cyB3aXRob3V0IGxlYWRpbmcgYW5kIHRyYWlsaW5nICdfXycgYXJlIGFsc28gcHJvdmlkZWQKK2ZvciBjb252ZW5pZW5jZS4KKworVGhpcyBpcyB0aGUgcHVyZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgdGhlIG1vZHVsZS4KKyIiIgorCitfX2FsbF9fID0gWydhYnMnLCAnYWRkJywgJ2FuZF8nLCAnYXR0cmdldHRlcicsICdjb25jYXQnLCAnY29udGFpbnMnLCAnY291bnRPZicsCisgICAgICAgICAgICdkZWxpdGVtJywgJ2VxJywgJ2Zsb29yZGl2JywgJ2dlJywgJ2dldGl0ZW0nLCAnZ3QnLCAnaWFkZCcsICdpYW5kJywKKyAgICAgICAgICAgJ2ljb25jYXQnLCAnaWZsb29yZGl2JywgJ2lsc2hpZnQnLCAnaW1vZCcsICdpbXVsJywgJ2luZGV4JywKKyAgICAgICAgICAgJ2luZGV4T2YnLCAnaW52JywgJ2ludmVydCcsICdpb3InLCAnaXBvdycsICdpcnNoaWZ0JywgJ2lzXycsCisgICAgICAgICAgICdpc19ub3QnLCAnaXN1YicsICdpdGVtZ2V0dGVyJywgJ2l0cnVlZGl2JywgJ2l4b3InLCAnbGUnLAorICAgICAgICAgICAnbGVuZ3RoX2hpbnQnLCAnbHNoaWZ0JywgJ2x0JywgJ21ldGhvZGNhbGxlcicsICdtb2QnLCAnbXVsJywgJ25lJywKKyAgICAgICAgICAgJ25lZycsICdub3RfJywgJ29yXycsICdwb3MnLCAncG93JywgJ3JzaGlmdCcsICdzZXRpdGVtJywgJ3N1YicsCisgICAgICAgICAgICd0cnVlZGl2JywgJ3RydXRoJywgJ3hvciddCisKK2Zyb20gYnVpbHRpbnMgaW1wb3J0IGFicyBhcyBfYWJzCisKKworIyBDb21wYXJpc29uIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGx0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgPCBiLiIKKyAgICByZXR1cm4gYSA8IGIKKworZGVmIGxlKGEsIGIpOgorICAgICJTYW1lIGFzIGEgPD0gYi4iCisgICAgcmV0dXJuIGEgPD0gYgorCitkZWYgZXEoYSwgYik6CisgICAgIlNhbWUgYXMgYSA9PSBiLiIKKyAgICByZXR1cm4gYSA9PSBiCisKK2RlZiBuZShhLCBiKToKKyAgICAiU2FtZSBhcyBhICE9IGIuIgorICAgIHJldHVybiBhICE9IGIKKworZGVmIGdlKGEsIGIpOgorICAgICJTYW1lIGFzIGEgPj0gYi4iCisgICAgcmV0dXJuIGEgPj0gYgorCitkZWYgZ3QoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+IGIuIgorICAgIHJldHVybiBhID4gYgorCisjIExvZ2ljYWwgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgbm90XyhhKToKKyAgICAiU2FtZSBhcyBub3QgYS4iCisgICAgcmV0dXJuIG5vdCBhCisKK2RlZiB0cnV0aChhKToKKyAgICAiUmV0dXJuIFRydWUgaWYgYSBpcyB0cnVlLCBGYWxzZSBvdGhlcndpc2UuIgorICAgIHJldHVybiBUcnVlIGlmIGEgZWxzZSBGYWxzZQorCitkZWYgaXNfKGEsIGIpOgorICAgICJTYW1lIGFzIGEgaXMgYi4iCisgICAgcmV0dXJuIGEgaXMgYgorCitkZWYgaXNfbm90KGEsIGIpOgorICAgICJTYW1lIGFzIGEgaXMgbm90IGIuIgorICAgIHJldHVybiBhIGlzIG5vdCBiCisKKyMgTWF0aGVtYXRpY2FsL0JpdHdpc2UgT3BlcmF0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiojCisKK2RlZiBhYnMoYSk6CisgICAgIlNhbWUgYXMgYWJzKGEpLiIKKyAgICByZXR1cm4gX2FicyhhKQorCitkZWYgYWRkKGEsIGIpOgorICAgICJTYW1lIGFzIGEgKyBiLiIKKyAgICByZXR1cm4gYSArIGIKKworZGVmIGFuZF8oYSwgYik6CisgICAgIlNhbWUgYXMgYSAmIGIuIgorICAgIHJldHVybiBhICYgYgorCitkZWYgZmxvb3JkaXYoYSwgYik6CisgICAgIlNhbWUgYXMgYSAvLyBiLiIKKyAgICByZXR1cm4gYSAvLyBiCisKK2RlZiBpbmRleChhKToKKyAgICAiU2FtZSBhcyBhLl9faW5kZXhfXygpLiIKKyAgICByZXR1cm4gYS5fX2luZGV4X18oKQorCitkZWYgaW52KGEpOgorICAgICJTYW1lIGFzIH5hLiIKKyAgICByZXR1cm4gfmEKK2ludmVydCA9IGludgorCitkZWYgbHNoaWZ0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgPDwgYi4iCisgICAgcmV0dXJuIGEgPDwgYgorCitkZWYgbW9kKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJSBiLiIKKyAgICByZXR1cm4gYSAlIGIKKworZGVmIG11bChhLCBiKToKKyAgICAiU2FtZSBhcyBhICogYi4iCisgICAgcmV0dXJuIGEgKiBiCisKK2RlZiBuZWcoYSk6CisgICAgIlNhbWUgYXMgLWEuIgorICAgIHJldHVybiAtYQorCitkZWYgb3JfKGEsIGIpOgorICAgICJTYW1lIGFzIGEgfCBiLiIKKyAgICByZXR1cm4gYSB8IGIKKworZGVmIHBvcyhhKToKKyAgICAiU2FtZSBhcyArYS4iCisgICAgcmV0dXJuICthCisKK2RlZiBwb3coYSwgYik6CisgICAgIlNhbWUgYXMgYSAqKiBiLiIKKyAgICByZXR1cm4gYSAqKiBiCisKK2RlZiByc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+PiBiLiIKKyAgICByZXR1cm4gYSA+PiBiCisKK2RlZiBzdWIoYSwgYik6CisgICAgIlNhbWUgYXMgYSAtIGIuIgorICAgIHJldHVybiBhIC0gYgorCitkZWYgdHJ1ZWRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC8gYi4iCisgICAgcmV0dXJuIGEgLyBiCisKK2RlZiB4b3IoYSwgYik6CisgICAgIlNhbWUgYXMgYSBeIGIuIgorICAgIHJldHVybiBhIF4gYgorCisjIFNlcXVlbmNlIE9wZXJhdGlvbnMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitkZWYgY29uY2F0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgKyBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIgorICAgIGlmIG5vdCBoYXNhdHRyKGEsICdfX2dldGl0ZW1fXycpOgorICAgICAgICBtc2cgPSAiJyVzJyBvYmplY3QgY2FuJ3QgYmUgY29uY2F0ZW5hdGVkIiAlIHR5cGUoYSkuX19uYW1lX18KKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKG1zZykKKyAgICByZXR1cm4gYSArIGIKKworZGVmIGNvbnRhaW5zKGEsIGIpOgorICAgICJTYW1lIGFzIGIgaW4gYSAobm90ZSByZXZlcnNlZCBvcGVyYW5kcykuIgorICAgIHJldHVybiBiIGluIGEKKworZGVmIGNvdW50T2YoYSwgYik6CisgICAgIlJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVzIGIgb2NjdXJzIGluIGEuIgorICAgIGNvdW50ID0gMAorICAgIGZvciBpIGluIGE6CisgICAgICAgIGlmIGkgPT0gYjoKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICByZXR1cm4gY291bnQKKworZGVmIGRlbGl0ZW0oYSwgYik6CisgICAgIlNhbWUgYXMgZGVsIGFbYl0uIgorICAgIGRlbCBhW2JdCisKK2RlZiBnZXRpdGVtKGEsIGIpOgorICAgICJTYW1lIGFzIGFbYl0uIgorICAgIHJldHVybiBhW2JdCisKK2RlZiBpbmRleE9mKGEsIGIpOgorICAgICJSZXR1cm4gdGhlIGZpcnN0IGluZGV4IG9mIGIgaW4gYS4iCisgICAgZm9yIGksIGogaW4gZW51bWVyYXRlKGEpOgorICAgICAgICBpZiBqID09IGI6CisgICAgICAgICAgICByZXR1cm4gaQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NlcXVlbmNlLmluZGV4KHgpOiB4IG5vdCBpbiBzZXF1ZW5jZScpCisKK2RlZiBzZXRpdGVtKGEsIGIsIGMpOgorICAgICJTYW1lIGFzIGFbYl0gPSBjLiIKKyAgICBhW2JdID0gYworCitkZWYgbGVuZ3RoX2hpbnQob2JqLCBkZWZhdWx0PTApOgorICAgICIiIgorICAgIFJldHVybiBhbiBlc3RpbWF0ZSBvZiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIG9iai4KKyAgICBUaGlzIGlzIHVzZWZ1bCBmb3IgcHJlc2l6aW5nIGNvbnRhaW5lcnMgd2hlbiBidWlsZGluZyBmcm9tIGFuIGl0ZXJhYmxlLgorCisgICAgSWYgdGhlIG9iamVjdCBzdXBwb3J0cyBsZW4oKSwgdGhlIHJlc3VsdCB3aWxsIGJlIGV4YWN0LiBPdGhlcndpc2UsIGl0IG1heQorICAgIG92ZXItIG9yIHVuZGVyLWVzdGltYXRlIGJ5IGFuIGFyYml0cmFyeSBhbW91bnQuIFRoZSByZXN1bHQgd2lsbCBiZSBhbgorICAgIGludGVnZXIgPj0gMC4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShkZWZhdWx0LCBpbnQpOgorICAgICAgICBtc2cgPSAoIiclcycgb2JqZWN0IGNhbm5vdCBiZSBpbnRlcnByZXRlZCBhcyBhbiBpbnRlZ2VyIiAlCisgICAgICAgICAgICAgICB0eXBlKGRlZmF1bHQpLl9fbmFtZV9fKQorICAgICAgICByYWlzZSBUeXBlRXJyb3IobXNnKQorCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gbGVuKG9iaikKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBwYXNzCisKKyAgICB0cnk6CisgICAgICAgIGhpbnQgPSB0eXBlKG9iaikuX19sZW5ndGhfaGludF9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorCisgICAgdHJ5OgorICAgICAgICB2YWwgPSBoaW50KG9iaikKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICByZXR1cm4gZGVmYXVsdAorICAgIGlmIHZhbCBpcyBOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgcmV0dXJuIGRlZmF1bHQKKyAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWwsIGludCk6CisgICAgICAgIG1zZyA9ICgnX19sZW5ndGhfaGludF9fIG11c3QgYmUgaW50ZWdlciwgbm90ICVzJyAlCisgICAgICAgICAgICAgICB0eXBlKHZhbCkuX19uYW1lX18pCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisgICAgaWYgdmFsIDwgMDoKKyAgICAgICAgbXNnID0gJ19fbGVuZ3RoX2hpbnRfXygpIHNob3VsZCByZXR1cm4gPj0gMCcKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihtc2cpCisgICAgcmV0dXJuIHZhbAorCisjIEdlbmVyYWxpemVkIExvb2t1cCBPYmplY3RzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIworCitjbGFzcyBhdHRyZ2V0dGVyOgorICAgICIiIgorICAgIFJldHVybiBhIGNhbGxhYmxlIG9iamVjdCB0aGF0IGZldGNoZXMgdGhlIGdpdmVuIGF0dHJpYnV0ZShzKSBmcm9tIGl0cyBvcGVyYW5kLgorICAgIEFmdGVyIGYgPSBhdHRyZ2V0dGVyKCduYW1lJyksIHRoZSBjYWxsIGYocikgcmV0dXJucyByLm5hbWUuCisgICAgQWZ0ZXIgZyA9IGF0dHJnZXR0ZXIoJ25hbWUnLCAnZGF0ZScpLCB0aGUgY2FsbCBnKHIpIHJldHVybnMgKHIubmFtZSwgci5kYXRlKS4KKyAgICBBZnRlciBoID0gYXR0cmdldHRlcignbmFtZS5maXJzdCcsICduYW1lLmxhc3QnKSwgdGhlIGNhbGwgaChyKSByZXR1cm5zCisgICAgKHIubmFtZS5maXJzdCwgci5uYW1lLmxhc3QpLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhdHRyLCAqYXR0cnMpOgorICAgICAgICBpZiBub3QgYXR0cnM6CisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhdHRyLCBzdHIpOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZycpCisgICAgICAgICAgICBuYW1lcyA9IGF0dHIuc3BsaXQoJy4nKQorICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIG5hbWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9iagorICAgICAgICAgICAgc2VsZi5fY2FsbCA9IGZ1bmMKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGdldHRlcnMgPSB0dXBsZShtYXAoYXR0cmdldHRlciwgKGF0dHIsKSArIGF0dHJzKSkKKyAgICAgICAgICAgIGRlZiBmdW5jKG9iaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlKGdldHRlcihvYmopIGZvciBnZXR0ZXIgaW4gZ2V0dGVycykKKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGwob2JqKQorCitjbGFzcyBpdGVtZ2V0dGVyOgorICAgICIiIgorICAgIFJldHVybiBhIGNhbGxhYmxlIG9iamVjdCB0aGF0IGZldGNoZXMgdGhlIGdpdmVuIGl0ZW0ocykgZnJvbSBpdHMgb3BlcmFuZC4KKyAgICBBZnRlciBmID0gaXRlbWdldHRlcigyKSwgdGhlIGNhbGwgZihyKSByZXR1cm5zIHJbMl0uCisgICAgQWZ0ZXIgZyA9IGl0ZW1nZXR0ZXIoMiwgNSwgMyksIHRoZSBjYWxsIGcocikgcmV0dXJucyAoclsyXSwgcls1XSwgclszXSkKKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaXRlbSwgKml0ZW1zKToKKyAgICAgICAgaWYgbm90IGl0ZW1zOgorICAgICAgICAgICAgZGVmIGZ1bmMob2JqKToKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqW2l0ZW1dCisgICAgICAgICAgICBzZWxmLl9jYWxsID0gZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaXRlbXMgPSAoaXRlbSwpICsgaXRlbXMKKyAgICAgICAgICAgIGRlZiBmdW5jKG9iaik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR1cGxlKG9ialtpXSBmb3IgaSBpbiBpdGVtcykKKyAgICAgICAgICAgIHNlbGYuX2NhbGwgPSBmdW5jCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgb2JqKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NhbGwob2JqKQorCitjbGFzcyBtZXRob2RjYWxsZXI6CisgICAgIiIiCisgICAgUmV0dXJuIGEgY2FsbGFibGUgb2JqZWN0IHRoYXQgY2FsbHMgdGhlIGdpdmVuIG1ldGhvZCBvbiBpdHMgb3BlcmFuZC4KKyAgICBBZnRlciBmID0gbWV0aG9kY2FsbGVyKCduYW1lJyksIHRoZSBjYWxsIGYocikgcmV0dXJucyByLm5hbWUoKS4KKyAgICBBZnRlciBnID0gbWV0aG9kY2FsbGVyKCduYW1lJywgJ2RhdGUnLCBmb289MSksIHRoZSBjYWxsIGcocikgcmV0dXJucworICAgIHIubmFtZSgnZGF0ZScsIGZvbz0xKS4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXygqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBsZW4oYXJncykgPCAyOgorICAgICAgICAgICAgbXNnID0gIm1ldGhvZGNhbGxlciBuZWVkcyBhdCBsZWFzdCBvbmUgYXJndW1lbnQsIHRoZSBtZXRob2QgbmFtZSIKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisgICAgICAgIHNlbGYgPSBhcmdzWzBdCisgICAgICAgIHNlbGYuX25hbWUgPSBhcmdzWzFdCisgICAgICAgIHNlbGYuX2FyZ3MgPSBhcmdzWzI6XQorICAgICAgICBzZWxmLl9rd2FyZ3MgPSBrd2FyZ3MKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBvYmopOgorICAgICAgICByZXR1cm4gZ2V0YXR0cihvYmosIHNlbGYuX25hbWUpKCpzZWxmLl9hcmdzLCAqKnNlbGYuX2t3YXJncykKKworIyBJbi1wbGFjZSBPcGVyYXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiMKKworZGVmIGlhZGQoYSwgYik6CisgICAgIlNhbWUgYXMgYSArPSBiLiIKKyAgICBhICs9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaWFuZChhLCBiKToKKyAgICAiU2FtZSBhcyBhICY9IGIuIgorICAgIGEgJj0gYgorICAgIHJldHVybiBhCisKK2RlZiBpY29uY2F0KGEsIGIpOgorICAgICJTYW1lIGFzIGEgKz0gYiwgZm9yIGEgYW5kIGIgc2VxdWVuY2VzLiIKKyAgICBpZiBub3QgaGFzYXR0cihhLCAnX19nZXRpdGVtX18nKToKKyAgICAgICAgbXNnID0gIiclcycgb2JqZWN0IGNhbid0IGJlIGNvbmNhdGVuYXRlZCIgJSB0eXBlKGEpLl9fbmFtZV9fCisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihtc2cpCisgICAgYSArPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlmbG9vcmRpdihhLCBiKToKKyAgICAiU2FtZSBhcyBhIC8vPSBiLiIKKyAgICBhIC8vPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlsc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA8PD0gYi4iCisgICAgYSA8PD0gYgorICAgIHJldHVybiBhCisKK2RlZiBpbW9kKGEsIGIpOgorICAgICJTYW1lIGFzIGEgJT0gYi4iCisgICAgYSAlPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGltdWwoYSwgYik6CisgICAgIlNhbWUgYXMgYSAqPSBiLiIKKyAgICBhICo9IGIKKyAgICByZXR1cm4gYQorCitkZWYgaW9yKGEsIGIpOgorICAgICJTYW1lIGFzIGEgfD0gYi4iCisgICAgYSB8PSBiCisgICAgcmV0dXJuIGEKKworZGVmIGlwb3coYSwgYik6CisgICAgIlNhbWUgYXMgYSAqKj0gYi4iCisgICAgYSAqKj1iCisgICAgcmV0dXJuIGEKKworZGVmIGlyc2hpZnQoYSwgYik6CisgICAgIlNhbWUgYXMgYSA+Pj0gYi4iCisgICAgYSA+Pj0gYgorICAgIHJldHVybiBhCisKK2RlZiBpc3ViKGEsIGIpOgorICAgICJTYW1lIGFzIGEgLT0gYi4iCisgICAgYSAtPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGl0cnVlZGl2KGEsIGIpOgorICAgICJTYW1lIGFzIGEgLz0gYi4iCisgICAgYSAvPSBiCisgICAgcmV0dXJuIGEKKworZGVmIGl4b3IoYSwgYik6CisgICAgIlNhbWUgYXMgYSBePSBiLiIKKyAgICBhIF49IGIKKyAgICByZXR1cm4gYQorCisKK3RyeToKKyAgICBmcm9tIF9vcGVyYXRvciBpbXBvcnQgKgorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHBhc3MKK2Vsc2U6CisgICAgZnJvbSBfb3BlcmF0b3IgaW1wb3J0IF9fZG9jX18KKworIyBBbGwgb2YgdGhlc2UgIl9fZnVuY19fID0gZnVuYyIgYXNzaWdubWVudHMgaGF2ZSB0byBoYXBwZW4gYWZ0ZXIgaW1wb3J0aW5nCisjIGZyb20gX29wZXJhdG9yIHRvIG1ha2Ugc3VyZSB0aGV5J3JlIHNldCB0byB0aGUgcmlnaHQgZnVuY3Rpb24KK19fbHRfXyA9IGx0CitfX2xlX18gPSBsZQorX19lcV9fID0gZXEKK19fbmVfXyA9IG5lCitfX2dlX18gPSBnZQorX19ndF9fID0gZ3QKK19fbm90X18gPSBub3RfCitfX2Fic19fID0gYWJzCitfX2FkZF9fID0gYWRkCitfX2FuZF9fID0gYW5kXworX19mbG9vcmRpdl9fID0gZmxvb3JkaXYKK19faW5kZXhfXyA9IGluZGV4CitfX2ludl9fID0gaW52CitfX2ludmVydF9fID0gaW52ZXJ0CitfX2xzaGlmdF9fID0gbHNoaWZ0CitfX21vZF9fID0gbW9kCitfX211bF9fID0gbXVsCitfX25lZ19fID0gbmVnCitfX29yX18gPSBvcl8KK19fcG9zX18gPSBwb3MKK19fcG93X18gPSBwb3cKK19fcnNoaWZ0X18gPSByc2hpZnQKK19fc3ViX18gPSBzdWIKK19fdHJ1ZWRpdl9fID0gdHJ1ZWRpdgorX194b3JfXyA9IHhvcgorX19jb25jYXRfXyA9IGNvbmNhdAorX19jb250YWluc19fID0gY29udGFpbnMKK19fZGVsaXRlbV9fID0gZGVsaXRlbQorX19nZXRpdGVtX18gPSBnZXRpdGVtCitfX3NldGl0ZW1fXyA9IHNldGl0ZW0KK19faWFkZF9fID0gaWFkZAorX19pYW5kX18gPSBpYW5kCitfX2ljb25jYXRfXyA9IGljb25jYXQKK19faWZsb29yZGl2X18gPSBpZmxvb3JkaXYKK19faWxzaGlmdF9fID0gaWxzaGlmdAorX19pbW9kX18gPSBpbW9kCitfX2ltdWxfXyA9IGltdWwKK19faW9yX18gPSBpb3IKK19faXBvd19fID0gaXBvdworX19pcnNoaWZ0X18gPSBpcnNoaWZ0CitfX2lzdWJfXyA9IGlzdWIKK19faXRydWVkaXZfXyA9IGl0cnVlZGl2CitfX2l4b3JfXyA9IGl4b3IKZGlmZiAtLWdpdCBhL0xpYi9vcy5weSBiL0xpYi9vcy5weQppbmRleCBiNDJjY2JhLi4yN2IyNDFhIDEwMDY0NAotLS0gYS9MaWIvb3MucHkKKysrIGIvTGliL29zLnB5CkBAIC0xLDkgKzEsOSBAQAotciIiIk9TIHJvdXRpbmVzIGZvciBNYWMsIE5ULCBvciBQb3NpeCBkZXBlbmRpbmcgb24gd2hhdCBzeXN0ZW0gd2UncmUgb24uCityIiIiT1Mgcm91dGluZXMgZm9yIE5UIG9yIFBvc2l4IGRlcGVuZGluZyBvbiB3aGF0IHN5c3RlbSB3ZSdyZSBvbi4KIAogVGhpcyBleHBvcnRzOgotICAtIGFsbCBmdW5jdGlvbnMgZnJvbSBwb3NpeCwgbnQsIG9zMiwgb3IgY2UsIGUuZy4gdW5saW5rLCBzdGF0LCBldGMuCisgIC0gYWxsIGZ1bmN0aW9ucyBmcm9tIHBvc2l4LCBudCBvciBjZSwgZS5nLiB1bmxpbmssIHN0YXQsIGV0Yy4KICAgLSBvcy5wYXRoIGlzIGVpdGhlciBwb3NpeHBhdGggb3IgbnRwYXRoCi0gIC0gb3MubmFtZSBpcyBlaXRoZXIgJ3Bvc2l4JywgJ250JywgJ29zMicgb3IgJ2NlJy4KKyAgLSBvcy5uYW1lIGlzIGVpdGhlciAncG9zaXgnLCAnbnQnIG9yICdjZScuCiAgIC0gb3MuY3VyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkaXJlY3RvcnkgKCcuJyBvciAnOicpCiAgIC0gb3MucGFyZGlyIGlzIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgcGFyZW50IGRpcmVjdG9yeSAoJy4uJyBvciAnOjonKQogICAtIG9zLnNlcCBpcyB0aGUgKG9yIGEgbW9zdCBjb21tb24pIHBhdGhuYW1lIHNlcGFyYXRvciAoJy8nIG9yICc6JyBvciAnXFwnKQpAQCAtODEsMzAgKzgxLDYgQEAKICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgIHBhc3MKIAotZWxpZiAnb3MyJyBpbiBfbmFtZXM6Ci0gICAgbmFtZSA9ICdvczInCi0gICAgbGluZXNlcCA9ICdcclxuJwotICAgIGZyb20gb3MyIGltcG9ydCAqCi0gICAgdHJ5OgotICAgICAgICBmcm9tIG9zMiBpbXBvcnQgX2V4aXQKLSAgICAgICAgX19hbGxfXy5hcHBlbmQoJ19leGl0JykKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBpZiBzeXMudmVyc2lvbi5maW5kKCdFTVggR0NDJykgPT0gLTE6Ci0gICAgICAgIGltcG9ydCBudHBhdGggYXMgcGF0aAotICAgIGVsc2U6Ci0gICAgICAgIGltcG9ydCBvczJlbXhwYXRoIGFzIHBhdGgKLSAgICAgICAgZnJvbSBfZW14X2xpbmsgaW1wb3J0IGxpbmsKLQotICAgIGltcG9ydCBvczIKLSAgICBfX2FsbF9fLmV4dGVuZChfZ2V0X2V4cG9ydHNfbGlzdChvczIpKQotICAgIGRlbCBvczIKLQotICAgIHRyeToKLSAgICAgICAgZnJvbSBvczIgaW1wb3J0IF9oYXZlX2Z1bmN0aW9ucwotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotCiBlbGlmICdjZScgaW4gX25hbWVzOgogICAgIG5hbWUgPSAnY2UnCiAgICAgbGluZXNlcCA9ICdcclxuJwpAQCAtMjM0LDcgKzIxMCw3IEBACiAjIChJbnNwaXJlZCBieSBFcmljIFJheW1vbmQ7IHRoZSBkb2Mgc3RyaW5ncyBhcmUgbW9zdGx5IGhpcykKIAogZGVmIG1ha2VkaXJzKG5hbWUsIG1vZGU9MG83NzcsIGV4aXN0X29rPUZhbHNlKToKLSAgICAiIiJtYWtlZGlycyhwYXRoIFssIG1vZGU9MG83NzddWywgZXhpc3Rfb2s9RmFsc2VdKQorICAgICIiIm1ha2VkaXJzKG5hbWUgWywgbW9kZT0wbzc3N11bLCBleGlzdF9vaz1GYWxzZV0pCiAKICAgICBTdXBlci1ta2RpcjsgY3JlYXRlIGEgbGVhZiBkaXJlY3RvcnkgYW5kIGFsbCBpbnRlcm1lZGlhdGUgb25lcy4gIFdvcmtzIGxpa2UKICAgICBta2RpciwgZXhjZXB0IHRoYXQgYW55IGludGVybWVkaWF0ZSBwYXRoIHNlZ21lbnQgKG5vdCBqdXN0IHRoZSByaWdodG1vc3QpCkBAIC0yNDksMTAgKzIyNSw5IEBACiAgICAgaWYgaGVhZCBhbmQgdGFpbCBhbmQgbm90IHBhdGguZXhpc3RzKGhlYWQpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtYWtlZGlycyhoZWFkLCBtb2RlLCBleGlzdF9vaykKLSAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKLSAgICAgICAgICAgICMgYmUgaGFwcHkgaWYgc29tZW9uZSBhbHJlYWR5IGNyZWF0ZWQgdGhlIHBhdGgKLSAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUVYSVNUOgotICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGV4Y2VwdCBGaWxlRXhpc3RzRXJyb3I6CisgICAgICAgICAgICAjIERlZmVhdHMgcmFjZSBjb25kaXRpb24gd2hlbiBhbm90aGVyIHRocmVhZCBjcmVhdGVkIHRoZSBwYXRoCisgICAgICAgICAgICBwYXNzCiAgICAgICAgIGNkaXIgPSBjdXJkaXIKICAgICAgICAgaWYgaXNpbnN0YW5jZSh0YWlsLCBieXRlcyk6CiAgICAgICAgICAgICBjZGlyID0gYnl0ZXMoY3VyZGlyLCAnQVNDSUknKQpAQCAtMjYwLDEyICsyMzUsMTQgQEAKICAgICAgICAgICAgIHJldHVybgogICAgIHRyeToKICAgICAgICAgbWtkaXIobmFtZSwgbW9kZSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICBpZiBub3QgZXhpc3Rfb2sgb3IgZS5lcnJubyAhPSBlcnJuby5FRVhJU1Qgb3Igbm90IHBhdGguaXNkaXIobmFtZSk6CisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICMgQ2Fubm90IHJlbHkgb24gY2hlY2tpbmcgZm9yIEVFWElTVCwgc2luY2UgdGhlIG9wZXJhdGluZyBzeXN0ZW0KKyAgICAgICAgIyBjb3VsZCBnaXZlIHByaW9yaXR5IHRvIG90aGVyIGVycm9ycyBsaWtlIEVBQ0NFUyBvciBFUk9GUworICAgICAgICBpZiBub3QgZXhpc3Rfb2sgb3Igbm90IHBhdGguaXNkaXIobmFtZSk6CiAgICAgICAgICAgICByYWlzZQogCiBkZWYgcmVtb3ZlZGlycyhuYW1lKToKLSAgICAiIiJyZW1vdmVkaXJzKHBhdGgpCisgICAgIiIicmVtb3ZlZGlycyhuYW1lKQogCiAgICAgU3VwZXItcm1kaXI7IHJlbW92ZSBhIGxlYWYgZGlyZWN0b3J5IGFuZCBhbGwgZW1wdHkgaW50ZXJtZWRpYXRlCiAgICAgb25lcy4gIFdvcmtzIGxpa2Ugcm1kaXIgZXhjZXB0IHRoYXQsIGlmIHRoZSBsZWFmIGRpcmVjdG9yeSBpcwpAQCAtMjgyLDcgKzI1OSw3IEBACiAgICAgd2hpbGUgaGVhZCBhbmQgdGFpbDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcm1kaXIoaGVhZCkKLSAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGhlYWQsIHRhaWwgPSBwYXRoLnNwbGl0KGhlYWQpCiAKQEAgLTI5Myw3ICsyNzAsNyBAQAogICAgIGVtcHR5LiAgV29ya3MgbGlrZSByZW5hbWUsIGV4Y2VwdCBjcmVhdGlvbiBvZiBhbnkgaW50ZXJtZWRpYXRlCiAgICAgZGlyZWN0b3JpZXMgbmVlZGVkIHRvIG1ha2UgdGhlIG5ldyBwYXRobmFtZSBnb29kIGlzIGF0dGVtcHRlZAogICAgIGZpcnN0LiAgQWZ0ZXIgdGhlIHJlbmFtZSwgZGlyZWN0b3JpZXMgY29ycmVzcG9uZGluZyB0byByaWdodG1vc3QKLSAgICBwYXRoIHNlZ21lbnRzIG9mIHRoZSBvbGQgbmFtZSB3aWxsIGJlIHBydW5lZCB3YXkgdW50aWwgZWl0aGVyIHRoZQorICAgIHBhdGggc2VnbWVudHMgb2YgdGhlIG9sZCBuYW1lIHdpbGwgYmUgcHJ1bmVkIHVudGlsIGVpdGhlciB0aGUKICAgICB3aG9sZSBwYXRoIGlzIGNvbnN1bWVkIG9yIGEgbm9uZW1wdHkgZGlyZWN0b3J5IGlzIGZvdW5kLgogCiAgICAgTm90ZTogdGhpcyBmdW5jdGlvbiBjYW4gZmFpbCB3aXRoIHRoZSBuZXcgZGlyZWN0b3J5IHN0cnVjdHVyZSBtYWRlCkBAIC0zMDksNyArMjg2LDcgQEAKICAgICBpZiBoZWFkIGFuZCB0YWlsOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICByZW1vdmVkaXJzKGhlYWQpCi0gICAgICAgIGV4Y2VwdCBlcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKIF9fYWxsX18uZXh0ZW5kKFsibWFrZWRpcnMiLCAicmVtb3ZlZGlycyIsICJyZW5hbWVzIl0pCkBAIC0zMzcsMTUgKzMxNCwxNiBAQAogCiAgICAgV2hlbiB0b3Bkb3duIGlzIHRydWUsIHRoZSBjYWxsZXIgY2FuIG1vZGlmeSB0aGUgZGlybmFtZXMgbGlzdCBpbi1wbGFjZQogICAgIChlLmcuLCB2aWEgZGVsIG9yIHNsaWNlIGFzc2lnbm1lbnQpLCBhbmQgd2FsayB3aWxsIG9ubHkgcmVjdXJzZSBpbnRvIHRoZQotICAgIHN1YmRpcmVjdG9yaWVzIHdob3NlIG5hbWVzIHJlbWFpbiBpbiBkaXJuYW1lczsgdGhpcyBjYW4gYmUgdXNlZCB0byBwcnVuZQotICAgIHRoZSBzZWFyY2gsIG9yIHRvIGltcG9zZSBhIHNwZWNpZmljIG9yZGVyIG9mIHZpc2l0aW5nLiAgTW9kaWZ5aW5nCi0gICAgZGlybmFtZXMgd2hlbiB0b3Bkb3duIGlzIGZhbHNlIGlzIGluZWZmZWN0aXZlLCBzaW5jZSB0aGUgZGlyZWN0b3JpZXMgaW4KLSAgICBkaXJuYW1lcyBoYXZlIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlIHRpbWUgZGlybmFtZXMgaXRzZWxmIGlzCi0gICAgZ2VuZXJhdGVkLgorICAgIHN1YmRpcmVjdG9yaWVzIHdob3NlIG5hbWVzIHJlbWFpbiBpbiBkaXJuYW1lczsgdGhpcyBjYW4gYmUgdXNlZCB0byBwcnVuZSB0aGUKKyAgICBzZWFyY2gsIG9yIHRvIGltcG9zZSBhIHNwZWNpZmljIG9yZGVyIG9mIHZpc2l0aW5nLiAgTW9kaWZ5aW5nIGRpcm5hbWVzIHdoZW4KKyAgICB0b3Bkb3duIGlzIGZhbHNlIGlzIGluZWZmZWN0aXZlLCBzaW5jZSB0aGUgZGlyZWN0b3JpZXMgaW4gZGlybmFtZXMgaGF2ZQorICAgIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQgYnkgdGhlIHRpbWUgZGlybmFtZXMgaXRzZWxmIGlzIGdlbmVyYXRlZC4gTm8gbWF0dGVyCisgICAgdGhlIHZhbHVlIG9mIHRvcGRvd24sIHRoZSBsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIGlzIHJldHJpZXZlZCBiZWZvcmUgdGhlCisgICAgdHVwbGVzIGZvciB0aGUgZGlyZWN0b3J5IGFuZCBpdHMgc3ViZGlyZWN0b3JpZXMgYXJlIGdlbmVyYXRlZC4KIAogICAgIEJ5IGRlZmF1bHQgZXJyb3JzIGZyb20gdGhlIG9zLmxpc3RkaXIoKSBjYWxsIGFyZSBpZ25vcmVkLiAgSWYKICAgICBvcHRpb25hbCBhcmcgJ29uZXJyb3InIGlzIHNwZWNpZmllZCwgaXQgc2hvdWxkIGJlIGEgZnVuY3Rpb247IGl0Ci0gICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIG9zLmVycm9yIGluc3RhbmNlLiAgSXQgY2FuCisgICAgd2lsbCBiZSBjYWxsZWQgd2l0aCBvbmUgYXJndW1lbnQsIGFuIE9TRXJyb3IgaW5zdGFuY2UuICBJdCBjYW4KICAgICByZXBvcnQgdGhlIGVycm9yIHRvIGNvbnRpbnVlIHdpdGggdGhlIHdhbGssIG9yIHJhaXNlIHRoZSBleGNlcHRpb24KICAgICB0byBhYm9ydCB0aGUgd2Fsay4gIE5vdGUgdGhhdCB0aGUgZmlsZW5hbWUgaXMgYXZhaWxhYmxlIGFzIHRoZQogICAgIGZpbGVuYW1lIGF0dHJpYnV0ZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdC4KQEAgLTM2OSw2ICszNDcsNyBAQAogICAgICAgICBwcmludCgiYnl0ZXMgaW4iLCBsZW4oZmlsZXMpLCAibm9uLWRpcmVjdG9yeSBmaWxlcyIpCiAgICAgICAgIGlmICdDVlMnIGluIGRpcnM6CiAgICAgICAgICAgICBkaXJzLnJlbW92ZSgnQ1ZTJykgICMgZG9uJ3QgdmlzaXQgQ1ZTIGRpcmVjdG9yaWVzCisKICAgICAiIiIKIAogICAgIGlzbGluaywgam9pbiwgaXNkaXIgPSBwYXRoLmlzbGluaywgcGF0aC5qb2luLCBwYXRoLmlzZGlyCkBAIC0zNzksMTAgKzM1OCwxMCBAQAogICAgICMgbWlub3IgcmVhc29uIHdoZW4gKHNheSkgYSB0aG91c2FuZCByZWFkYWJsZSBkaXJlY3RvcmllcyBhcmUgc3RpbGwKICAgICAjIGxlZnQgdG8gdmlzaXQuICBUaGF0IGxvZ2ljIGlzIGNvcGllZCBoZXJlLgogICAgIHRyeToKLSAgICAgICAgIyBOb3RlIHRoYXQgbGlzdGRpciBhbmQgZXJyb3IgYXJlIGdsb2JhbHMgaW4gdGhpcyBtb2R1bGUgZHVlCisgICAgICAgICMgTm90ZSB0aGF0IGxpc3RkaXIgaXMgZ2xvYmFsIGluIHRoaXMgbW9kdWxlIGR1ZQogICAgICAgICAjIHRvIGVhcmxpZXIgaW1wb3J0LSouCiAgICAgICAgIG5hbWVzID0gbGlzdGRpcih0b3ApCi0gICAgZXhjZXB0IGVycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIGlmIG9uZXJyb3IgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBvbmVycm9yKGVycikKICAgICAgICAgcmV0dXJuCkBAIC00ODQsNyArNDYzLDcgQEAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcmlnX3N0ID0gc3RhdChuYW1lLCBkaXJfZmQ9dG9wZmQsIGZvbGxvd19zeW1saW5rcz1mb2xsb3dfc3ltbGlua3MpCiAgICAgICAgICAgICAgICAgZGlyZmQgPSBvcGVuKG5hbWUsIE9fUkRPTkxZLCBkaXJfZmQ9dG9wZmQpCi0gICAgICAgICAgICBleGNlcHQgZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgIGlmIG9uZXJyb3IgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3IoZXJyKQogICAgICAgICAgICAgICAgIHJldHVybgpAQCAtNTc5LDcgKzU1OCw3IEBACiAgICAgICAgIGZ1bGxuYW1lID0gcGF0aC5qb2luKGRpciwgZmlsZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZXhlY19mdW5jKGZ1bGxuYW1lLCAqYXJncmVzdCkKLSAgICAgICAgZXhjZXB0IGVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBsYXN0X2V4YyA9IGUKICAgICAgICAgICAgIHRiID0gc3lzLmV4Y19pbmZvKClbMl0KICAgICAgICAgICAgIGlmIChlLmVycm5vICE9IGVycm5vLkVOT0VOVCBhbmQgZS5lcnJubyAhPSBlcnJuby5FTk9URElSCkBAIC02MzYsNyArNjE1LDcgQEAKIAogCiAjIENoYW5nZSBlbnZpcm9uIHRvIGF1dG9tYXRpY2FsbHkgY2FsbCBwdXRlbnYoKSwgdW5zZXRlbnYgaWYgdGhleSBleGlzdC4KLWZyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBNdXRhYmxlTWFwcGluZworZnJvbSBfY29sbGVjdGlvbnNfYWJjIGltcG9ydCBNdXRhYmxlTWFwcGluZwogCiBjbGFzcyBfRW52aXJvbihNdXRhYmxlTWFwcGluZyk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEsIGVuY29kZWtleSwgZGVjb2Rla2V5LCBlbmNvZGV2YWx1ZSwgZGVjb2RldmFsdWUsIHB1dGVudiwgdW5zZXRlbnYpOgpAQCAtNjk2LDE3ICs2NzUsMTkgQEAKIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgX3B1dGVudiA9IGxhbWJkYSBrZXksIHZhbHVlOiBOb25lCiBlbHNlOgotICAgIF9fYWxsX18uYXBwZW5kKCJwdXRlbnYiKQorICAgIGlmICJwdXRlbnYiIG5vdCBpbiBfX2FsbF9fOgorICAgICAgICBfX2FsbF9fLmFwcGVuZCgicHV0ZW52IikKIAogdHJ5OgogICAgIF91bnNldGVudiA9IHVuc2V0ZW52CiBleGNlcHQgTmFtZUVycm9yOgogICAgIF91bnNldGVudiA9IGxhbWJkYSBrZXk6IF9wdXRlbnYoa2V5LCAiIikKIGVsc2U6Ci0gICAgX19hbGxfXy5hcHBlbmQoInVuc2V0ZW52IikKKyAgICBpZiAidW5zZXRlbnYiIG5vdCBpbiBfX2FsbF9fOgorICAgICAgICBfX2FsbF9fLmFwcGVuZCgidW5zZXRlbnYiKQogCiBkZWYgX2NyZWF0ZWVudmlyb24oKToKLSAgICBpZiBuYW1lIGluICgnb3MyJywgJ250Jyk6CisgICAgaWYgbmFtZSA9PSAnbnQnOgogICAgICAgICAjIFdoZXJlIEVudiBWYXIgTmFtZXMgTXVzdCBCZSBVUFBFUkNBU0UKICAgICAgICAgZGVmIGNoZWNrX3N0cih2YWx1ZSk6CiAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKQEAgLTc0Niw3ICs3MjcsNyBAQAogICAgIGtleSwgZGVmYXVsdCBhbmQgdGhlIHJlc3VsdCBhcmUgc3RyLiIiIgogICAgIHJldHVybiBlbnZpcm9uLmdldChrZXksIGRlZmF1bHQpCiAKLXN1cHBvcnRzX2J5dGVzX2Vudmlyb24gPSBuYW1lIG5vdCBpbiAoJ29zMicsICdudCcpCitzdXBwb3J0c19ieXRlc19lbnZpcm9uID0gKG5hbWUgIT0gJ250JykKIF9fYWxsX18uZXh0ZW5kKCgiZ2V0ZW52IiwgInN1cHBvcnRzX2J5dGVzX2Vudmlyb24iKSkKIAogaWYgc3VwcG9ydHNfYnl0ZXNfZW52aXJvbjoKQEAgLTg0NSw3ICs4MjYsNyBAQAogICAgICAgICAgICAgICAgIGVsaWYgV0lGRVhJVEVEKHN0cyk6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBXRVhJVFNUQVRVUyhzdHMpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoIk5vdCBzdG9wcGVkLCBzaWduYWxlZCBvciBleGl0ZWQ/Pz8iKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJOb3Qgc3RvcHBlZCwgc2lnbmFsZWQgb3IgZXhpdGVkPz8/IikKIAogICAgIGRlZiBzcGF3bnYobW9kZSwgZmlsZSwgYXJncyk6CiAgICAgICAgICIiInNwYXdudihtb2RlLCBmaWxlLCBhcmdzKSAtPiBpbnRlZ2VyCkBAIC04ODgsNiArODY5LDEwIEBACiBvdGhlcndpc2UgcmV0dXJuIC1TSUcsIHdoZXJlIFNJRyBpcyB0aGUgc2lnbmFsIHRoYXQga2lsbGVkIGl0LiAiIiIKICAgICAgICAgcmV0dXJuIF9zcGF3bnZlZihtb2RlLCBmaWxlLCBhcmdzLCBlbnYsIGV4ZWN2cGUpCiAKKworICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd252IiwgInNwYXdudmUiLCAic3Bhd252cCIsICJzcGF3bnZwZSJdKQorCisKIGlmIF9leGlzdHMoInNwYXdudiIpOgogICAgICMgVGhlc2UgYXJlbid0IHN1cHBsaWVkIGJ5IHRoZSBiYXNpYyBXaW5kb3dzIGNvZGUKICAgICAjIGJ1dCBjYW4gYmUgZWFzaWx5IGltcGxlbWVudGVkIGluIFB5dGhvbgpAQCAtOTEzLDcgKzg5OCw3IEBACiAgICAgICAgIHJldHVybiBzcGF3bnZlKG1vZGUsIGZpbGUsIGFyZ3NbOi0xXSwgZW52KQogCiAKLSAgICBfX2FsbF9fLmV4dGVuZChbInNwYXdudiIsICJzcGF3bnZlIiwgInNwYXdubCIsICJzcGF3bmxlIixdKQorICAgIF9fYWxsX18uZXh0ZW5kKFsic3Bhd25sIiwgInNwYXdubGUiXSkKIAogCiBpZiBfZXhpc3RzKCJzcGF3bnZwIik6CkBAIC05NDEsMzQgKzkyNiw4IEBACiAgICAgICAgIHJldHVybiBzcGF3bnZwZShtb2RlLCBmaWxlLCBhcmdzWzotMV0sIGVudikKIAogCi0gICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bnZwIiwgInNwYXdudnBlIiwgInNwYXdubHAiLCAic3Bhd25scGUiLF0pCisgICAgX19hbGxfXy5leHRlbmQoWyJzcGF3bmxwIiwgInNwYXdubHBlIl0pCiAKLWltcG9ydCBjb3B5cmVnIGFzIF9jb3B5cmVnCi0KLWRlZiBfbWFrZV9zdGF0X3Jlc3VsdCh0dXAsIGRpY3QpOgotICAgIHJldHVybiBzdGF0X3Jlc3VsdCh0dXAsIGRpY3QpCi0KLWRlZiBfcGlja2xlX3N0YXRfcmVzdWx0KHNyKToKLSAgICAodHlwZSwgYXJncykgPSBzci5fX3JlZHVjZV9fKCkKLSAgICByZXR1cm4gKF9tYWtlX3N0YXRfcmVzdWx0LCBhcmdzKQotCi10cnk6Ci0gICAgX2NvcHlyZWcucGlja2xlKHN0YXRfcmVzdWx0LCBfcGlja2xlX3N0YXRfcmVzdWx0LCBfbWFrZV9zdGF0X3Jlc3VsdCkKLWV4Y2VwdCBOYW1lRXJyb3I6ICMgc3RhdF9yZXN1bHQgbWF5IG5vdCBleGlzdAotICAgIHBhc3MKLQotZGVmIF9tYWtlX3N0YXR2ZnNfcmVzdWx0KHR1cCwgZGljdCk6Ci0gICAgcmV0dXJuIHN0YXR2ZnNfcmVzdWx0KHR1cCwgZGljdCkKLQotZGVmIF9waWNrbGVfc3RhdHZmc19yZXN1bHQoc3IpOgotICAgICh0eXBlLCBhcmdzKSA9IHNyLl9fcmVkdWNlX18oKQotICAgIHJldHVybiAoX21ha2Vfc3RhdHZmc19yZXN1bHQsIGFyZ3MpCi0KLXRyeToKLSAgICBfY29weXJlZy5waWNrbGUoc3RhdHZmc19yZXN1bHQsIF9waWNrbGVfc3RhdHZmc19yZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICBfbWFrZV9zdGF0dmZzX3Jlc3VsdCkKLWV4Y2VwdCBOYW1lRXJyb3I6ICMgc3RhdHZmc19yZXN1bHQgbWF5IG5vdCBleGlzdAotICAgIHBhc3MKIAogIyBTdXBwbHkgb3MucG9wZW4oKQogZGVmIHBvcGVuKGNtZCwgbW9kZT0iciIsIGJ1ZmZlcmluZz0tMSk6CmRpZmYgLS1naXQgYS9MaWIvb3MyZW14cGF0aC5weSBiL0xpYi9vczJlbXhwYXRoLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2NiZjhhLi4wMDAwMDAwCi0tLSBhL0xpYi9vczJlbXhwYXRoLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTU4ICswLDAgQEAKLSMgTW9kdWxlICdvczJlbXhwYXRoJyAtLSBjb21tb24gb3BlcmF0aW9ucyBvbiBPUy8yIHBhdGhuYW1lcwotIiIiQ29tbW9uIHBhdGhuYW1lIG1hbmlwdWxhdGlvbnMsIE9TLzIgRU1YIHZlcnNpb24uCi0KLUluc3RlYWQgb2YgaW1wb3J0aW5nIHRoaXMgbW9kdWxlIGRpcmVjdGx5LCBpbXBvcnQgb3MgYW5kIHJlZmVyIHRvIHRoaXMKLW1vZHVsZSBhcyBvcy5wYXRoLgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN0YXQKLWZyb20gZ2VuZXJpY3BhdGggaW1wb3J0ICoKLWZyb20gbnRwYXRoIGltcG9ydCAoZXhwYW5kdXNlciwgZXhwYW5kdmFycywgaXNhYnMsIGlzbGluaywgc3BsaXRkcml2ZSwKLSAgICAgICAgICAgICAgICAgICAgc3BsaXRleHQsIHNwbGl0KQotCi1fX2FsbF9fID0gWyJub3JtY2FzZSIsImlzYWJzIiwiam9pbiIsInNwbGl0ZHJpdmUiLCJzcGxpdCIsInNwbGl0ZXh0IiwKLSAgICAgICAgICAgImJhc2VuYW1lIiwiZGlybmFtZSIsImNvbW1vbnByZWZpeCIsImdldHNpemUiLCJnZXRtdGltZSIsCi0gICAgICAgICAgICJnZXRhdGltZSIsImdldGN0aW1lIiwgImlzbGluayIsImV4aXN0cyIsImxleGlzdHMiLCJpc2RpciIsImlzZmlsZSIsCi0gICAgICAgICAgICJpc21vdW50IiwiZXhwYW5kdXNlciIsImV4cGFuZHZhcnMiLCJub3JtcGF0aCIsImFic3BhdGgiLAotICAgICAgICAgICAic3BsaXR1bmMiLCJjdXJkaXIiLCJwYXJkaXIiLCJzZXAiLCJwYXRoc2VwIiwiZGVmcGF0aCIsImFsdHNlcCIsCi0gICAgICAgICAgICJleHRzZXAiLCJkZXZudWxsIiwicmVhbHBhdGgiLCJzdXBwb3J0c191bmljb2RlX2ZpbGVuYW1lcyJdCi0KLSMgc3RyaW5ncyByZXByZXNlbnRpbmcgdmFyaW91cyBwYXRoLXJlbGF0ZWQgYml0cyBhbmQgcGllY2VzCi1jdXJkaXIgPSAnLicKLXBhcmRpciA9ICcuLicKLWV4dHNlcCA9ICcuJwotc2VwID0gJy8nCi1hbHRzZXAgPSAnXFwnCi1wYXRoc2VwID0gJzsnCi1kZWZwYXRoID0gJy47QzpcXGJpbicKLWRldm51bGwgPSAnbnVsJwotCi0jIE5vcm1hbGl6ZSB0aGUgY2FzZSBvZiBhIHBhdGhuYW1lIGFuZCBtYXAgc2xhc2hlcyB0byBiYWNrc2xhc2hlcy4KLSMgT3RoZXIgbm9ybWFsaXphdGlvbnMgKHN1Y2ggYXMgb3B0aW1pemluZyAnLi4vJyBhd2F5KSBhcmUgbm90IGRvbmUKLSMgKHRoaXMgaXMgZG9uZSBieSBub3JtcGF0aCkuCi0KLWRlZiBub3JtY2FzZShzKToKLSAgICAiIiJOb3JtYWxpemUgY2FzZSBvZiBwYXRobmFtZS4KLQotICAgIE1ha2VzIGFsbCBjaGFyYWN0ZXJzIGxvd2VyY2FzZSBhbmQgYWxsIGFsdHNlcHMgaW50byBzZXBzLiIiIgotICAgIGlmIG5vdCBpc2luc3RhbmNlKHMsIChieXRlcywgc3RyKSk6Ci0gICAgICAgIHJhaXNlIFR5cGVFcnJvcigibm9ybWNhc2UoKSBhcmd1bWVudCBtdXN0IGJlIHN0ciBvciBieXRlcywgIgotICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAne30nIi5mb3JtYXQocy5fX2NsYXNzX18uX19uYW1lX18pKQotICAgIHJldHVybiBzLnJlcGxhY2UoJ1xcJywgJy8nKS5sb3dlcigpCi0KLQotIyBKb2luIHR3byAob3IgbW9yZSkgcGF0aHMuCi0KLWRlZiBqb2luKGEsICpwKToKLSAgICAiIiJKb2luIHR3byBvciBtb3JlIHBhdGhuYW1lIGNvbXBvbmVudHMsIGluc2VydGluZyBzZXAgYXMgbmVlZGVkIiIiCi0gICAgcGF0aCA9IGEKLSAgICBmb3IgYiBpbiBwOgotICAgICAgICBpZiBpc2FicyhiKToKLSAgICAgICAgICAgIHBhdGggPSBiCi0gICAgICAgIGVsaWYgcGF0aCA9PSAnJyBvciBwYXRoWy0xOl0gaW4gJy9cXDonOgotICAgICAgICAgICAgcGF0aCA9IHBhdGggKyBiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwYXRoID0gcGF0aCArICcvJyArIGIKLSAgICByZXR1cm4gcGF0aAotCi0KLSMgUGFyc2UgVU5DIHBhdGhzCi1kZWYgc3BsaXR1bmMocCk6Ci0gICAgIiIiU3BsaXQgYSBwYXRobmFtZSBpbnRvIFVOQyBtb3VudCBwb2ludCBhbmQgcmVsYXRpdmUgcGF0aCBzcGVjaWZpZXJzLgotCi0gICAgUmV0dXJuIGEgMi10dXBsZSAodW5jLCByZXN0KTsgZWl0aGVyIHBhcnQgbWF5IGJlIGVtcHR5LgotICAgIElmIHVuYyBpcyBub3QgZW1wdHksIGl0IGhhcyB0aGUgZm9ybSAnLy9ob3N0L21vdW50JyAob3Igc2ltaWxhcgotICAgIHVzaW5nIGJhY2tzbGFzaGVzKS4gIHVuYytyZXN0IGlzIGFsd2F5cyB0aGUgaW5wdXQgcGF0aC4KLSAgICBQYXRocyBjb250YWluaW5nIGRyaXZlIGxldHRlcnMgbmV2ZXIgaGF2ZSBhbiBVTkMgcGFydC4KLSAgICAiIiIKLSAgICBpZiBwWzE6Ml0gPT0gJzonOgotICAgICAgICByZXR1cm4gJycsIHAgIyBEcml2ZSBsZXR0ZXIgcHJlc2VudAotICAgIGZpcnN0VHdvID0gcFswOjJdCi0gICAgaWYgZmlyc3RUd28gPT0gJy8nICogMiBvciBmaXJzdFR3byA9PSAnXFwnICogMjoKLSAgICAgICAgIyBpcyBhIFVOQyBwYXRoOgotICAgICAgICAjIHZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2IGVxdWl2YWxlbnQgdG8gZHJpdmUgbGV0dGVyCi0gICAgICAgICMgXFxtYWNoaW5lXG1vdW50cG9pbnRcZGlyZWN0b3JpZXMuLi4KLSAgICAgICAgIyAgICAgICAgICAgZGlyZWN0b3J5IF5eXl5eXl5eXl5eXl5eXgotICAgICAgICBub3JtcCA9IG5vcm1jYXNlKHApCi0gICAgICAgIGluZGV4ID0gbm9ybXAuZmluZCgnLycsIDIpCi0gICAgICAgIGlmIGluZGV4ID09IC0xOgotICAgICAgICAgICAgIyNyYWlzZSBSdW50aW1lRXJyb3IsICdpbGxlZ2FsIFVOQyBwYXRoOiAiJyArIHAgKyAnIicKLSAgICAgICAgICAgIHJldHVybiAoIiIsIHApCi0gICAgICAgIGluZGV4ID0gbm9ybXAuZmluZCgnLycsIGluZGV4ICsgMSkKLSAgICAgICAgaWYgaW5kZXggPT0gLTE6Ci0gICAgICAgICAgICBpbmRleCA9IGxlbihwKQotICAgICAgICByZXR1cm4gcFs6aW5kZXhdLCBwW2luZGV4Ol0KLSAgICByZXR1cm4gJycsIHAKLQotCi0jIFJldHVybiB0aGUgdGFpbCAoYmFzZW5hbWUpIHBhcnQgb2YgYSBwYXRoLgotCi1kZWYgYmFzZW5hbWUocCk6Ci0gICAgIiIiUmV0dXJucyB0aGUgZmluYWwgY29tcG9uZW50IG9mIGEgcGF0aG5hbWUiIiIKLSAgICByZXR1cm4gc3BsaXQocClbMV0KLQotCi0jIFJldHVybiB0aGUgaGVhZCAoZGlybmFtZSkgcGFydCBvZiBhIHBhdGguCi0KLWRlZiBkaXJuYW1lKHApOgotICAgICIiIlJldHVybnMgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgYSBwYXRobmFtZSIiIgotICAgIHJldHVybiBzcGxpdChwKVswXQotCi0KLSMgYWxpYXMgZXhpc3RzIHRvIGxleGlzdHMKLWxleGlzdHMgPSBleGlzdHMKLQotCi0jIElzIGEgcGF0aCBhIGRpcmVjdG9yeT8KLQotIyBJcyBhIHBhdGggYSBtb3VudCBwb2ludD8gIEVpdGhlciBhIHJvb3QgKHdpdGggb3Igd2l0aG91dCBkcml2ZSBsZXR0ZXIpCi0jIG9yIGFuIFVOQyBwYXRoIHdpdGggYXQgbW9zdCBhIC8gb3IgXCBhZnRlciB0aGUgbW91bnQgcG9pbnQuCi0KLWRlZiBpc21vdW50KHBhdGgpOgotICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggaXMgYSBtb3VudCBwb2ludCAoZGVmaW5lZCBhcyByb290IG9mIGRyaXZlKSIiIgotICAgIHVuYywgcmVzdCA9IHNwbGl0dW5jKHBhdGgpCi0gICAgaWYgdW5jOgotICAgICAgICByZXR1cm4gcmVzdCBpbiAoIiIsICIvIiwgIlxcIikKLSAgICBwID0gc3BsaXRkcml2ZShwYXRoKVsxXQotICAgIHJldHVybiBsZW4ocCkgPT0gMSBhbmQgcFswXSBpbiAnL1xcJwotCi0KLSMgTm9ybWFsaXplIGEgcGF0aCwgZS5nLiBBLy9CLCBBLy4vQiBhbmQgQS9mb28vLi4vQiBhbGwgYmVjb21lIEEvQi4KLQotZGVmIG5vcm1wYXRoKHBhdGgpOgotICAgICIiIk5vcm1hbGl6ZSBwYXRoLCBlbGltaW5hdGluZyBkb3VibGUgc2xhc2hlcywgZXRjLiIiIgotICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoJ1xcJywgJy8nKQotICAgIHByZWZpeCwgcGF0aCA9IHNwbGl0ZHJpdmUocGF0aCkKLSAgICB3aGlsZSBwYXRoWzoxXSA9PSAnLyc6Ci0gICAgICAgIHByZWZpeCA9IHByZWZpeCArICcvJwotICAgICAgICBwYXRoID0gcGF0aFsxOl0KLSAgICBjb21wcyA9IHBhdGguc3BsaXQoJy8nKQotICAgIGkgPSAwCi0gICAgd2hpbGUgaSA8IGxlbihjb21wcyk6Ci0gICAgICAgIGlmIGNvbXBzW2ldID09ICcuJzoKLSAgICAgICAgICAgIGRlbCBjb21wc1tpXQotICAgICAgICBlbGlmIGNvbXBzW2ldID09ICcuLicgYW5kIGkgPiAwIGFuZCBjb21wc1tpLTFdIG5vdCBpbiAoJycsICcuLicpOgotICAgICAgICAgICAgZGVsIGNvbXBzW2ktMTppKzFdCi0gICAgICAgICAgICBpID0gaSAtIDEKLSAgICAgICAgZWxpZiBjb21wc1tpXSA9PSAnJyBhbmQgaSA+IDAgYW5kIGNvbXBzW2ktMV0gIT0gJyc6Ci0gICAgICAgICAgICBkZWwgY29tcHNbaV0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGkgPSBpICsgMQotICAgICMgSWYgdGhlIHBhdGggaXMgbm93IGVtcHR5LCBzdWJzdGl0dXRlICcuJwotICAgIGlmIG5vdCBwcmVmaXggYW5kIG5vdCBjb21wczoKLSAgICAgICAgY29tcHMuYXBwZW5kKCcuJykKLSAgICByZXR1cm4gcHJlZml4ICsgJy8nLmpvaW4oY29tcHMpCi0KLQotIyBSZXR1cm4gYW4gYWJzb2x1dGUgcGF0aC4KLWRlZiBhYnNwYXRoKHBhdGgpOgotICAgICIiIlJldHVybiB0aGUgYWJzb2x1dGUgdmVyc2lvbiBvZiBhIHBhdGgiIiIKLSAgICBpZiBub3QgaXNhYnMocGF0aCk6Ci0gICAgICAgIHBhdGggPSBqb2luKG9zLmdldGN3ZCgpLCBwYXRoKQotICAgIHJldHVybiBub3JtcGF0aChwYXRoKQotCi0jIHJlYWxwYXRoIGlzIGEgbm8tb3Agb24gc3lzdGVtcyB3aXRob3V0IGlzbGluayBzdXBwb3J0Ci1yZWFscGF0aCA9IGFic3BhdGgKLQotc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMgPSBGYWxzZQpkaWZmIC0tZ2l0IGEvTGliL3BhdGhsaWIucHkgYi9MaWIvcGF0aGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZmE4NzJkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3BhdGhsaWIucHkKQEAgLTAsMCArMSwxMzA0IEBACitpbXBvcnQgZm5tYXRjaAoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGlvCitpbXBvcnQgbnRwYXRoCitpbXBvcnQgb3MKK2ltcG9ydCBwb3NpeHBhdGgKK2ltcG9ydCByZQoraW1wb3J0IHN5cworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2VxdWVuY2UKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKK2Zyb20gZXJybm8gaW1wb3J0IEVJTlZBTCwgRU5PRU5ULCBFTk9URElSCitmcm9tIG9wZXJhdG9yIGltcG9ydCBhdHRyZ2V0dGVyCitmcm9tIHN0YXQgaW1wb3J0IFNfSVNESVIsIFNfSVNMTkssIFNfSVNSRUcsIFNfSVNTT0NLLCBTX0lTQkxLLCBTX0lTQ0hSLCBTX0lTRklGTworZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX2Zyb21fYnl0ZXMgYXMgdXJscXVvdGVfZnJvbV9ieXRlcworCisKK3N1cHBvcnRzX3N5bWxpbmtzID0gVHJ1ZQoraWYgb3MubmFtZSA9PSAnbnQnOgorICAgIGltcG9ydCBudAorICAgIGlmIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpWzoyXSA+PSAoNiwgMCk6CisgICAgICAgIGZyb20gbnQgaW1wb3J0IF9nZXRmaW5hbHBhdGhuYW1lCisgICAgZWxzZToKKyAgICAgICAgc3VwcG9ydHNfc3ltbGlua3MgPSBGYWxzZQorICAgICAgICBfZ2V0ZmluYWxwYXRobmFtZSA9IE5vbmUKK2Vsc2U6CisgICAgbnQgPSBOb25lCisKKworX19hbGxfXyA9IFsKKyAgICAiUHVyZVBhdGgiLCAiUHVyZVBvc2l4UGF0aCIsICJQdXJlV2luZG93c1BhdGgiLAorICAgICJQYXRoIiwgIlBvc2l4UGF0aCIsICJXaW5kb3dzUGF0aCIsCisgICAgXQorCisjCisjIEludGVybmFscworIworCitkZWYgX2lzX3dpbGRjYXJkX3BhdHRlcm4ocGF0KToKKyAgICAjIFdoZXRoZXIgdGhpcyBwYXR0ZXJuIG5lZWRzIGFjdHVhbCBtYXRjaGluZyB1c2luZyBmbm1hdGNoLCBvciBjYW4KKyAgICAjIGJlIGxvb2tlZCB1cCBkaXJlY3RseSBhcyBhIGZpbGUuCisgICAgcmV0dXJuICIqIiBpbiBwYXQgb3IgIj8iIGluIHBhdCBvciAiWyIgaW4gcGF0CisKKworY2xhc3MgX0ZsYXZvdXIob2JqZWN0KToKKyAgICAiIiJBIGZsYXZvdXIgaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgKHBsYXRmb3JtLXNwZWNpZmljKSBzZXQgb2YgcGF0aAorICAgIHNlbWFudGljcy4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5qb2luID0gc2VsZi5zZXAuam9pbgorCisgICAgZGVmIHBhcnNlX3BhcnRzKHNlbGYsIHBhcnRzKToKKyAgICAgICAgcGFyc2VkID0gW10KKyAgICAgICAgc2VwID0gc2VsZi5zZXAKKyAgICAgICAgYWx0c2VwID0gc2VsZi5hbHRzZXAKKyAgICAgICAgZHJ2ID0gcm9vdCA9ICcnCisgICAgICAgIGl0ID0gcmV2ZXJzZWQocGFydHMpCisgICAgICAgIGZvciBwYXJ0IGluIGl0OgorICAgICAgICAgICAgaWYgbm90IHBhcnQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGFsdHNlcDoKKyAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC5yZXBsYWNlKGFsdHNlcCwgc2VwKQorICAgICAgICAgICAgZHJ2LCByb290LCByZWwgPSBzZWxmLnNwbGl0cm9vdChwYXJ0KQorICAgICAgICAgICAgaWYgc2VwIGluIHJlbDoKKyAgICAgICAgICAgICAgICBmb3IgeCBpbiByZXZlcnNlZChyZWwuc3BsaXQoc2VwKSk6CisgICAgICAgICAgICAgICAgICAgIGlmIHggYW5kIHggIT0gJy4nOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VkLmFwcGVuZChzeXMuaW50ZXJuKHgpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiByZWwgYW5kIHJlbCAhPSAnLic6CisgICAgICAgICAgICAgICAgICAgIHBhcnNlZC5hcHBlbmQoc3lzLmludGVybihyZWwpKQorICAgICAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICAgICAgaWYgbm90IGRydjoKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBubyBkcml2ZSBpcyBwcmVzZW50LCB0cnkgdG8gZmluZCBvbmUgaW4gdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICAgICMgcGFydHMuIFRoaXMgbWFrZXMgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGUuZy4KKyAgICAgICAgICAgICAgICAgICAgIyAoIkM6IiwgIi8iLCAiYSIpIHJlYXNvbmFibHkgaW50dWl0aXZlLgorICAgICAgICAgICAgICAgICAgICBmb3IgcGFydCBpbiBpdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJ0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBhbHRzZXA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQucmVwbGFjZShhbHRzZXAsIHNlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRydiA9IHNlbGYuc3BsaXRyb290KHBhcnQpWzBdCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkcnY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIHBhcnNlZC5hcHBlbmQoZHJ2ICsgcm9vdCkKKyAgICAgICAgcGFyc2VkLnJldmVyc2UoKQorICAgICAgICByZXR1cm4gZHJ2LCByb290LCBwYXJzZWQKKworICAgIGRlZiBqb2luX3BhcnNlZF9wYXJ0cyhzZWxmLCBkcnYsIHJvb3QsIHBhcnRzLCBkcnYyLCByb290MiwgcGFydHMyKToKKyAgICAgICAgIiIiCisgICAgICAgIEpvaW4gdGhlIHR3byBwYXRocyByZXByZXNlbnRlZCBieSB0aGUgcmVzcGVjdGl2ZQorICAgICAgICAoZHJpdmUsIHJvb3QsIHBhcnRzKSB0dXBsZXMuICBSZXR1cm4gYSBuZXcgKGRyaXZlLCByb290LCBwYXJ0cykgdHVwbGUuCisgICAgICAgICIiIgorICAgICAgICBpZiByb290MjoKKyAgICAgICAgICAgIGlmIG5vdCBkcnYyIGFuZCBkcnY6CisgICAgICAgICAgICAgICAgcmV0dXJuIGRydiwgcm9vdDIsIFtkcnYgKyByb290Ml0gKyBwYXJ0czJbMTpdCisgICAgICAgIGVsaWYgZHJ2MjoKKyAgICAgICAgICAgIGlmIGRydjIgPT0gZHJ2IG9yIHNlbGYuY2FzZWZvbGQoZHJ2MikgPT0gc2VsZi5jYXNlZm9sZChkcnYpOgorICAgICAgICAgICAgICAgICMgU2FtZSBkcml2ZSA9PiBzZWNvbmQgcGF0aCBpcyByZWxhdGl2ZSB0byB0aGUgZmlyc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gZHJ2LCByb290LCBwYXJ0cyArIHBhcnRzMlsxOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgU2Vjb25kIHBhdGggaXMgbm9uLWFuY2hvcmVkIChjb21tb24gY2FzZSkKKyAgICAgICAgICAgIHJldHVybiBkcnYsIHJvb3QsIHBhcnRzICsgcGFydHMyCisgICAgICAgIHJldHVybiBkcnYyLCByb290MiwgcGFydHMyCisKKworY2xhc3MgX1dpbmRvd3NGbGF2b3VyKF9GbGF2b3VyKToKKyAgICAjIFJlZmVyZW5jZSBmb3IgV2luZG93cyBwYXRocyBjYW4gYmUgZm91bmQgYXQKKyAgICAjIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM2NTI0NyUyOHY9dnMuODUlMjkuYXNweAorCisgICAgc2VwID0gJ1xcJworICAgIGFsdHNlcCA9ICcvJworICAgIGhhc19kcnYgPSBUcnVlCisgICAgcGF0aG1vZCA9IG50cGF0aAorCisgICAgaXNfc3VwcG9ydGVkID0gKG9zLm5hbWUgPT0gJ250JykKKworICAgIGRyaXZlX2xldHRlcnMgPSAoCisgICAgICAgIHNldChjaHIoeCkgZm9yIHggaW4gcmFuZ2Uob3JkKCdhJyksIG9yZCgneicpICsgMSkpIHwKKyAgICAgICAgc2V0KGNocih4KSBmb3IgeCBpbiByYW5nZShvcmQoJ0EnKSwgb3JkKCdaJykgKyAxKSkKKyAgICApCisgICAgZXh0X25hbWVzcGFjZV9wcmVmaXggPSAnXFxcXD9cXCcKKworICAgIHJlc2VydmVkX25hbWVzID0gKAorICAgICAgICB7J0NPTicsICdQUk4nLCAnQVVYJywgJ05VTCd9IHwKKyAgICAgICAgeydDT00lZCcgJSBpIGZvciBpIGluIHJhbmdlKDEsIDEwKX0gfAorICAgICAgICB7J0xQVCVkJyAlIGkgZm9yIGkgaW4gcmFuZ2UoMSwgMTApfQorICAgICAgICApCisKKyAgICAjIEludGVyZXN0aW5nIGZpbmRpbmdzIGFib3V0IGV4dGVuZGVkIHBhdGhzOgorICAgICMgLSAnXFw/XGM6XGEnLCAnLy8/L2M6XGEnIGFuZCAnLy8/L2M6L2EnIGFyZSBhbGwgc3VwcG9ydGVkCisgICAgIyAgIGJ1dCAnXFw/XGM6L2EnIGlzIG5vdAorICAgICMgLSBleHRlbmRlZCBwYXRocyBhcmUgYWx3YXlzIGFic29sdXRlOyAicmVsYXRpdmUiIGV4dGVuZGVkIHBhdGhzIHdpbGwKKyAgICAjICAgZmFpbC4KKworICAgIGRlZiBzcGxpdHJvb3Qoc2VsZiwgcGFydCwgc2VwPXNlcCk6CisgICAgICAgIGZpcnN0ID0gcGFydFswOjFdCisgICAgICAgIHNlY29uZCA9IHBhcnRbMToyXQorICAgICAgICBpZiAoc2Vjb25kID09IHNlcCBhbmQgZmlyc3QgPT0gc2VwKToKKyAgICAgICAgICAgICMgWFhYIGV4dGVuZGVkIHBhdGhzIHNob3VsZCBhbHNvIGRpc2FibGUgdGhlIGNvbGxhcHNpbmcgb2YgIi4iCisgICAgICAgICAgICAjIGNvbXBvbmVudHMgKGFjY29yZGluZyB0byBNU0ROIGRvY3MpLgorICAgICAgICAgICAgcHJlZml4LCBwYXJ0ID0gc2VsZi5fc3BsaXRfZXh0ZW5kZWRfcGF0aChwYXJ0KQorICAgICAgICAgICAgZmlyc3QgPSBwYXJ0WzA6MV0KKyAgICAgICAgICAgIHNlY29uZCA9IHBhcnRbMToyXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgdGhpcmQgPSBwYXJ0WzI6M10KKyAgICAgICAgaWYgKHNlY29uZCA9PSBzZXAgYW5kIGZpcnN0ID09IHNlcCBhbmQgdGhpcmQgIT0gc2VwKToKKyAgICAgICAgICAgICMgaXMgYSBVTkMgcGF0aDoKKyAgICAgICAgICAgICMgdnZ2dnZ2dnZ2dnZ2dnZ2dnZ2dnZ2IHJvb3QKKyAgICAgICAgICAgICMgXFxtYWNoaW5lXG1vdW50cG9pbnRcZGlyZWN0b3J5XGV0Y1wuLi4KKyAgICAgICAgICAgICMgICAgICAgICAgICBkaXJlY3RvcnkgXl5eXl5eXl5eXl5eXl4KKyAgICAgICAgICAgIGluZGV4ID0gcGFydC5maW5kKHNlcCwgMikKKyAgICAgICAgICAgIGlmIGluZGV4ICE9IC0xOgorICAgICAgICAgICAgICAgIGluZGV4MiA9IHBhcnQuZmluZChzZXAsIGluZGV4ICsgMSkKKyAgICAgICAgICAgICAgICAjIGEgVU5DIHBhdGggY2FuJ3QgaGF2ZSB0d28gc2xhc2hlcyBpbiBhIHJvdworICAgICAgICAgICAgICAgICMgKGFmdGVyIHRoZSBpbml0aWFsIHR3bykKKyAgICAgICAgICAgICAgICBpZiBpbmRleDIgIT0gaW5kZXggKyAxOgorICAgICAgICAgICAgICAgICAgICBpZiBpbmRleDIgPT0gLTE6CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRleDIgPSBsZW4ocGFydCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByZWZpeCArIHBhcnRbMTppbmRleDJdLCBzZXAsIHBhcnRbaW5kZXgyKzE6XQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcnRbOmluZGV4Ml0sIHNlcCwgcGFydFtpbmRleDIrMTpdCisgICAgICAgIGRydiA9IHJvb3QgPSAnJworICAgICAgICBpZiBzZWNvbmQgPT0gJzonIGFuZCBmaXJzdCBpbiBzZWxmLmRyaXZlX2xldHRlcnM6CisgICAgICAgICAgICBkcnYgPSBwYXJ0WzoyXQorICAgICAgICAgICAgcGFydCA9IHBhcnRbMjpdCisgICAgICAgICAgICBmaXJzdCA9IHRoaXJkCisgICAgICAgIGlmIGZpcnN0ID09IHNlcDoKKyAgICAgICAgICAgIHJvb3QgPSBmaXJzdAorICAgICAgICAgICAgcGFydCA9IHBhcnQubHN0cmlwKHNlcCkKKyAgICAgICAgcmV0dXJuIHByZWZpeCArIGRydiwgcm9vdCwgcGFydAorCisgICAgZGVmIGNhc2Vmb2xkKHNlbGYsIHMpOgorICAgICAgICByZXR1cm4gcy5sb3dlcigpCisKKyAgICBkZWYgY2FzZWZvbGRfcGFydHMoc2VsZiwgcGFydHMpOgorICAgICAgICByZXR1cm4gW3AubG93ZXIoKSBmb3IgcCBpbiBwYXJ0c10KKworICAgIGRlZiByZXNvbHZlKHNlbGYsIHBhdGgpOgorICAgICAgICBzID0gc3RyKHBhdGgpCisgICAgICAgIGlmIG5vdCBzOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldGN3ZCgpCisgICAgICAgIGlmIF9nZXRmaW5hbHBhdGhuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4dF90b19ub3JtYWwoX2dldGZpbmFscGF0aG5hbWUocykpCisgICAgICAgICMgTWVhbnMgZmFsbGJhY2sgb24gYWJzb2x1dGUKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBfc3BsaXRfZXh0ZW5kZWRfcGF0aChzZWxmLCBzLCBleHRfcHJlZml4PWV4dF9uYW1lc3BhY2VfcHJlZml4KToKKyAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgaWYgcy5zdGFydHN3aXRoKGV4dF9wcmVmaXgpOgorICAgICAgICAgICAgcHJlZml4ID0gc1s6NF0KKyAgICAgICAgICAgIHMgPSBzWzQ6XQorICAgICAgICAgICAgaWYgcy5zdGFydHN3aXRoKCdVTkNcXCcpOgorICAgICAgICAgICAgICAgIHByZWZpeCArPSBzWzozXQorICAgICAgICAgICAgICAgIHMgPSAnXFwnICsgc1szOl0KKyAgICAgICAgcmV0dXJuIHByZWZpeCwgcworCisgICAgZGVmIF9leHRfdG9fbm9ybWFsKHNlbGYsIHMpOgorICAgICAgICAjIFR1cm4gYmFjayBhbiBleHRlbmRlZCBwYXRoIGludG8gYSBub3JtYWwgRE9TLWxpa2UgcGF0aAorICAgICAgICByZXR1cm4gc2VsZi5fc3BsaXRfZXh0ZW5kZWRfcGF0aChzKVsxXQorCisgICAgZGVmIGlzX3Jlc2VydmVkKHNlbGYsIHBhcnRzKToKKyAgICAgICAgIyBOT1RFOiB0aGUgcnVsZXMgZm9yIHJlc2VydmVkIG5hbWVzIHNlZW0gc29tZXdoYXQgY29tcGxpY2F0ZWQKKyAgICAgICAgIyAoZS5nLiByIi4uXE5VTCIgaXMgcmVzZXJ2ZWQgYnV0IG5vdCByImZvb1xOVUwiKS4KKyAgICAgICAgIyBXZSBlcnIgb24gdGhlIHNpZGUgb2YgY2F1dGlvbiBhbmQgcmV0dXJuIFRydWUgZm9yIHBhdGhzIHdoaWNoIGFyZQorICAgICAgICAjIG5vdCBjb25zaWRlcmVkIHJlc2VydmVkIGJ5IFdpbmRvd3MuCisgICAgICAgIGlmIG5vdCBwYXJ0czoKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBwYXJ0c1swXS5zdGFydHN3aXRoKCdcXFxcJyk6CisgICAgICAgICAgICAjIFVOQyBwYXRocyBhcmUgbmV2ZXIgcmVzZXJ2ZWQKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gcGFydHNbLTFdLnBhcnRpdGlvbignLicpWzBdLnVwcGVyKCkgaW4gc2VsZi5yZXNlcnZlZF9uYW1lcworCisgICAgZGVmIG1ha2VfdXJpKHNlbGYsIHBhdGgpOgorICAgICAgICAjIFVuZGVyIFdpbmRvd3MsIGZpbGUgVVJJcyB1c2UgdGhlIFVURi04IGVuY29kaW5nLgorICAgICAgICBkcml2ZSA9IHBhdGguZHJpdmUKKyAgICAgICAgaWYgbGVuKGRyaXZlKSA9PSAyIGFuZCBkcml2ZVsxXSA9PSAnOic6CisgICAgICAgICAgICAjIEl0J3MgYSBwYXRoIG9uIGEgbG9jYWwgZHJpdmUgPT4gJ2ZpbGU6Ly8vYzovYS9iJworICAgICAgICAgICAgcmVzdCA9IHBhdGguYXNfcG9zaXgoKVsyOl0ubHN0cmlwKCcvJykKKyAgICAgICAgICAgIHJldHVybiAnZmlsZTovLy8lcy8lcycgJSAoCisgICAgICAgICAgICAgICAgZHJpdmUsIHVybHF1b3RlX2Zyb21fYnl0ZXMocmVzdC5lbmNvZGUoJ3V0Zi04JykpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJdCdzIGEgcGF0aCBvbiBhIG5ldHdvcmsgZHJpdmUgPT4gJ2ZpbGU6Ly9ob3N0L3NoYXJlL2EvYicKKyAgICAgICAgICAgIHJldHVybiAnZmlsZTonICsgdXJscXVvdGVfZnJvbV9ieXRlcyhwYXRoLmFzX3Bvc2l4KCkuZW5jb2RlKCd1dGYtOCcpKQorCisKK2NsYXNzIF9Qb3NpeEZsYXZvdXIoX0ZsYXZvdXIpOgorICAgIHNlcCA9ICcvJworICAgIGFsdHNlcCA9ICcnCisgICAgaGFzX2RydiA9IEZhbHNlCisgICAgcGF0aG1vZCA9IHBvc2l4cGF0aAorCisgICAgaXNfc3VwcG9ydGVkID0gKG9zLm5hbWUgIT0gJ250JykKKworICAgIGRlZiBzcGxpdHJvb3Qoc2VsZiwgcGFydCwgc2VwPXNlcCk6CisgICAgICAgIGlmIHBhcnQgYW5kIHBhcnRbMF0gPT0gc2VwOgorICAgICAgICAgICAgc3RyaXBwZWRfcGFydCA9IHBhcnQubHN0cmlwKHNlcCkKKyAgICAgICAgICAgICMgQWNjb3JkaW5nIHRvIFBPU0lYIHBhdGggcmVzb2x1dGlvbjoKKyAgICAgICAgICAgICMgaHR0cDovL3B1YnMub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9iYXNlZGVmcy94YmRfY2hhcDA0Lmh0bWwjdGFnXzA0XzExCisgICAgICAgICAgICAjICJBIHBhdGhuYW1lIHRoYXQgYmVnaW5zIHdpdGggdHdvIHN1Y2Nlc3NpdmUgc2xhc2hlcyBtYXkgYmUKKyAgICAgICAgICAgICMgaW50ZXJwcmV0ZWQgaW4gYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCBtYW5uZXIsIGFsdGhvdWdoIG1vcmUKKyAgICAgICAgICAgICMgdGhhbiB0d28gbGVhZGluZyBzbGFzaGVzIHNoYWxsIGJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUgc2xhc2giLgorICAgICAgICAgICAgaWYgbGVuKHBhcnQpIC0gbGVuKHN0cmlwcGVkX3BhcnQpID09IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuICcnLCBzZXAgKiAyLCBzdHJpcHBlZF9wYXJ0CisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnJywgc2VwLCBzdHJpcHBlZF9wYXJ0CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJycsICcnLCBwYXJ0CisKKyAgICBkZWYgY2FzZWZvbGQoc2VsZiwgcyk6CisgICAgICAgIHJldHVybiBzCisKKyAgICBkZWYgY2FzZWZvbGRfcGFydHMoc2VsZiwgcGFydHMpOgorICAgICAgICByZXR1cm4gcGFydHMKKworICAgIGRlZiByZXNvbHZlKHNlbGYsIHBhdGgpOgorICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBhY2Nlc3NvciA9IHBhdGguX2FjY2Vzc29yCisgICAgICAgIHNlZW4gPSB7fQorICAgICAgICBkZWYgX3Jlc29sdmUocGF0aCwgcmVzdCk6CisgICAgICAgICAgICBpZiByZXN0LnN0YXJ0c3dpdGgoc2VwKToKKyAgICAgICAgICAgICAgICBwYXRoID0gJycKKworICAgICAgICAgICAgZm9yIG5hbWUgaW4gcmVzdC5zcGxpdChzZXApOgorICAgICAgICAgICAgICAgIGlmIG5vdCBuYW1lIG9yIG5hbWUgPT0gJy4nOgorICAgICAgICAgICAgICAgICAgICAjIGN1cnJlbnQgZGlyCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAnLi4nOgorICAgICAgICAgICAgICAgICAgICAjIHBhcmVudCBkaXIKKyAgICAgICAgICAgICAgICAgICAgcGF0aCwgXywgXyA9IHBhdGgucnBhcnRpdGlvbihzZXApCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbmV3cGF0aCA9IHBhdGggKyBzZXAgKyBuYW1lCisgICAgICAgICAgICAgICAgaWYgbmV3cGF0aCBpbiBzZWVuOgorICAgICAgICAgICAgICAgICAgICAjIEFscmVhZHkgc2VlbiB0aGlzIHBhdGgKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHNlZW5bbmV3cGF0aF0KKyAgICAgICAgICAgICAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdXNlIGNhY2hlZCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgc3ltbGluayBpcyBub3QgcmVzb2x2ZWQsIHNvIHdlIG11c3QgaGF2ZSBhIHN5bWxpbmsgbG9vcC4KKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTeW1saW5rIGxvb3AgZnJvbSAlciIgJSBuZXdwYXRoKQorICAgICAgICAgICAgICAgICMgUmVzb2x2ZSB0aGUgc3ltYm9saWMgbGluaworICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gYWNjZXNzb3IucmVhZGxpbmsobmV3cGF0aCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IEVJTlZBTDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICMgTm90IGEgc3ltbGluaworICAgICAgICAgICAgICAgICAgICBwYXRoID0gbmV3cGF0aAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlZW5bbmV3cGF0aF0gPSBOb25lICMgbm90IHJlc29sdmVkIHN5bWxpbmsKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IF9yZXNvbHZlKHBhdGgsIHRhcmdldCkKKyAgICAgICAgICAgICAgICAgICAgc2VlbltuZXdwYXRoXSA9IHBhdGggIyByZXNvbHZlZCBzeW1saW5rCisKKyAgICAgICAgICAgIHJldHVybiBwYXRoCisgICAgICAgICMgTk9URTogYWNjb3JkaW5nIHRvIFBPU0lYLCBnZXRjd2QoKSBjYW5ub3QgY29udGFpbiBwYXRoIGNvbXBvbmVudHMKKyAgICAgICAgIyB3aGljaCBhcmUgc3ltbGlua3MuCisgICAgICAgIGJhc2UgPSAnJyBpZiBwYXRoLmlzX2Fic29sdXRlKCkgZWxzZSBvcy5nZXRjd2QoKQorICAgICAgICByZXR1cm4gX3Jlc29sdmUoYmFzZSwgc3RyKHBhdGgpKSBvciBzZXAKKworICAgIGRlZiBpc19yZXNlcnZlZChzZWxmLCBwYXJ0cyk6CisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIG1ha2VfdXJpKHNlbGYsIHBhdGgpOgorICAgICAgICAjIFdlIHJlcHJlc2VudCB0aGUgcGF0aCB1c2luZyB0aGUgbG9jYWwgZmlsZXN5c3RlbSBlbmNvZGluZywKKyAgICAgICAgIyBmb3IgcG9ydGFiaWxpdHkgdG8gb3RoZXIgYXBwbGljYXRpb25zLgorICAgICAgICBicGF0aCA9IGJ5dGVzKHBhdGgpCisgICAgICAgIHJldHVybiAnZmlsZTovLycgKyB1cmxxdW90ZV9mcm9tX2J5dGVzKGJwYXRoKQorCisKK193aW5kb3dzX2ZsYXZvdXIgPSBfV2luZG93c0ZsYXZvdXIoKQorX3Bvc2l4X2ZsYXZvdXIgPSBfUG9zaXhGbGF2b3VyKCkKKworCitjbGFzcyBfQWNjZXNzb3I6CisgICAgIiIiQW4gYWNjZXNzb3IgaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgKHN5c3RlbS1zcGVjaWZpYyBvciBub3QpIHdheSBvZgorICAgIGFjY2Vzc2luZyBwYXRocyBvbiB0aGUgZmlsZXN5c3RlbS4iIiIKKworCitjbGFzcyBfTm9ybWFsQWNjZXNzb3IoX0FjY2Vzc29yKToKKworICAgIGRlZiBfd3JhcF9zdHJmdW5jKHN0cmZ1bmMpOgorICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHN0cmZ1bmMpCisgICAgICAgIGRlZiB3cmFwcGVkKHBhdGhvYmosICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzdHJmdW5jKHN0cihwYXRob2JqKSwgKmFyZ3MpCisgICAgICAgIHJldHVybiBzdGF0aWNtZXRob2Qod3JhcHBlZCkKKworICAgIGRlZiBfd3JhcF9iaW5hcnlfc3RyZnVuYyhzdHJmdW5jKToKKyAgICAgICAgQGZ1bmN0b29scy53cmFwcyhzdHJmdW5jKQorICAgICAgICBkZWYgd3JhcHBlZChwYXRob2JqQSwgcGF0aG9iakIsICphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBzdHJmdW5jKHN0cihwYXRob2JqQSksIHN0cihwYXRob2JqQiksICphcmdzKQorICAgICAgICByZXR1cm4gc3RhdGljbWV0aG9kKHdyYXBwZWQpCisKKyAgICBzdGF0ID0gX3dyYXBfc3RyZnVuYyhvcy5zdGF0KQorCisgICAgbHN0YXQgPSBfd3JhcF9zdHJmdW5jKG9zLmxzdGF0KQorCisgICAgb3BlbiA9IF93cmFwX3N0cmZ1bmMob3Mub3BlbikKKworICAgIGxpc3RkaXIgPSBfd3JhcF9zdHJmdW5jKG9zLmxpc3RkaXIpCisKKyAgICBjaG1vZCA9IF93cmFwX3N0cmZ1bmMob3MuY2htb2QpCisKKyAgICBpZiBoYXNhdHRyKG9zLCAibGNobW9kIik6CisgICAgICAgIGxjaG1vZCA9IF93cmFwX3N0cmZ1bmMob3MubGNobW9kKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBsY2htb2Qoc2VsZiwgcGF0aG9iaiwgbW9kZSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJsY2htb2QoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKKworICAgIG1rZGlyID0gX3dyYXBfc3RyZnVuYyhvcy5ta2RpcikKKworICAgIHVubGluayA9IF93cmFwX3N0cmZ1bmMob3MudW5saW5rKQorCisgICAgcm1kaXIgPSBfd3JhcF9zdHJmdW5jKG9zLnJtZGlyKQorCisgICAgcmVuYW1lID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3MucmVuYW1lKQorCisgICAgcmVwbGFjZSA9IF93cmFwX2JpbmFyeV9zdHJmdW5jKG9zLnJlcGxhY2UpCisKKyAgICBpZiBudDoKKyAgICAgICAgaWYgc3VwcG9ydHNfc3ltbGlua3M6CisgICAgICAgICAgICBzeW1saW5rID0gX3dyYXBfYmluYXJ5X3N0cmZ1bmMob3Muc3ltbGluaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZiBzeW1saW5rKGEsIGIsIHRhcmdldF9pc19kaXJlY3RvcnkpOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoInN5bWxpbmsoKSBub3QgYXZhaWxhYmxlIG9uIHRoaXMgc3lzdGVtIikKKyAgICBlbHNlOgorICAgICAgICAjIFVuZGVyIFBPU0lYLCBvcy5zeW1saW5rKCkgdGFrZXMgdHdvIGFyZ3MKKyAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICBkZWYgc3ltbGluayhhLCBiLCB0YXJnZXRfaXNfZGlyZWN0b3J5KToKKyAgICAgICAgICAgIHJldHVybiBvcy5zeW1saW5rKHN0cihhKSwgc3RyKGIpKQorCisgICAgdXRpbWUgPSBfd3JhcF9zdHJmdW5jKG9zLnV0aW1lKQorCisgICAgIyBIZWxwZXIgZm9yIHJlc29sdmUoKQorICAgIGRlZiByZWFkbGluayhzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIG9zLnJlYWRsaW5rKHBhdGgpCisKKworX25vcm1hbF9hY2Nlc3NvciA9IF9Ob3JtYWxBY2Nlc3NvcigpCisKKworIworIyBHbG9iYmluZyBoZWxwZXJzCisjCisKK0Bjb250ZXh0bWFuYWdlcgorZGVmIF9jYWNoZWQoZnVuYyk6CisgICAgdHJ5OgorICAgICAgICBmdW5jLl9fY2FjaGVkX18KKyAgICAgICAgeWllbGQgZnVuYworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgY2FjaGUgPSB7fQorICAgICAgICBkZWYgd3JhcHBlcigqYXJncyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlW2FyZ3NdCisgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBjYWNoZVthcmdzXSA9IGZ1bmMoKmFyZ3MpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlCisgICAgICAgIHdyYXBwZXIuX19jYWNoZWRfXyA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgeWllbGQgd3JhcHBlcgorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgY2FjaGUuY2xlYXIoKQorCitkZWYgX21ha2Vfc2VsZWN0b3IocGF0dGVybl9wYXJ0cyk6CisgICAgcGF0ID0gcGF0dGVybl9wYXJ0c1swXQorICAgIGNoaWxkX3BhcnRzID0gcGF0dGVybl9wYXJ0c1sxOl0KKyAgICBpZiBwYXQgPT0gJyoqJzoKKyAgICAgICAgY2xzID0gX1JlY3Vyc2l2ZVdpbGRjYXJkU2VsZWN0b3IKKyAgICBlbGlmICcqKicgaW4gcGF0OgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHBhdHRlcm46ICcqKicgY2FuIG9ubHkgYmUgYW4gZW50aXJlIHBhdGggY29tcG9uZW50IikKKyAgICBlbGlmIF9pc193aWxkY2FyZF9wYXR0ZXJuKHBhdCk6CisgICAgICAgIGNscyA9IF9XaWxkY2FyZFNlbGVjdG9yCisgICAgZWxzZToKKyAgICAgICAgY2xzID0gX1ByZWNpc2VTZWxlY3RvcgorICAgIHJldHVybiBjbHMocGF0LCBjaGlsZF9wYXJ0cykKKworaWYgaGFzYXR0cihmdW5jdG9vbHMsICJscnVfY2FjaGUiKToKKyAgICBfbWFrZV9zZWxlY3RvciA9IGZ1bmN0b29scy5scnVfY2FjaGUoKShfbWFrZV9zZWxlY3RvcikKKworCitjbGFzcyBfU2VsZWN0b3I6CisgICAgIiIiQSBzZWxlY3RvciBtYXRjaGVzIGEgc3BlY2lmaWMgZ2xvYiBwYXR0ZXJuIHBhcnQgYWdhaW5zdCB0aGUgY2hpbGRyZW4KKyAgICBvZiBhIGdpdmVuIHBhdGguIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLmNoaWxkX3BhcnRzID0gY2hpbGRfcGFydHMKKyAgICAgICAgaWYgY2hpbGRfcGFydHM6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3NvciA9IF9tYWtlX3NlbGVjdG9yKGNoaWxkX3BhcnRzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdWNjZXNzb3IgPSBfVGVybWluYXRpbmdTZWxlY3RvcigpCisKKyAgICBkZWYgc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgpOgorICAgICAgICAiIiJJdGVyYXRlIG92ZXIgYWxsIGNoaWxkIHBhdGhzIG9mIGBwYXJlbnRfcGF0aGAgbWF0Y2hlZCBieSB0aGlzCisgICAgICAgIHNlbGVjdG9yLiAgVGhpcyBjYW4gY29udGFpbiBwYXJlbnRfcGF0aCBpdHNlbGYuIiIiCisgICAgICAgIHBhdGhfY2xzID0gdHlwZShwYXJlbnRfcGF0aCkKKyAgICAgICAgaXNfZGlyID0gcGF0aF9jbHMuaXNfZGlyCisgICAgICAgIGV4aXN0cyA9IHBhdGhfY2xzLmV4aXN0cworICAgICAgICBsaXN0ZGlyID0gcGFyZW50X3BhdGguX2FjY2Vzc29yLmxpc3RkaXIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NlbGVjdF9mcm9tKHBhcmVudF9wYXRoLCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcikKKworCitjbGFzcyBfVGVybWluYXRpbmdTZWxlY3RvcjoKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgeWllbGQgcGFyZW50X3BhdGgKKworCitjbGFzcyBfUHJlY2lzZVNlbGVjdG9yKF9TZWxlY3Rvcik6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwgY2hpbGRfcGFydHMpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIF9TZWxlY3Rvci5fX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cykKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBwYXRoID0gcGFyZW50X3BhdGguX21ha2VfY2hpbGRfcmVscGF0aChzZWxmLm5hbWUpCisgICAgICAgICAgICBpZiBleGlzdHMocGF0aCk6CisgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5zdWNjZXNzb3IuX3NlbGVjdF9mcm9tKHBhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgcAorICAgICAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKworY2xhc3MgX1dpbGRjYXJkU2VsZWN0b3IoX1NlbGVjdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXQsIGNoaWxkX3BhcnRzKToKKyAgICAgICAgc2VsZi5wYXQgPSByZS5jb21waWxlKGZubWF0Y2gudHJhbnNsYXRlKHBhdCkpCisgICAgICAgIF9TZWxlY3Rvci5fX2luaXRfXyhzZWxmLCBjaGlsZF9wYXJ0cykKKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICBjZiA9IHBhcmVudF9wYXRoLl9mbGF2b3VyLmNhc2Vmb2xkCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBsaXN0ZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgICAgICBjYXNlZm9sZGVkID0gY2YobmFtZSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnBhdC5tYXRjaChjYXNlZm9sZGVkKToKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHBhcmVudF9wYXRoLl9tYWtlX2NoaWxkX3JlbHBhdGgobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5zdWNjZXNzb3IuX3NlbGVjdF9mcm9tKHBhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHAKKyAgICAgICAgZXhjZXB0IFBlcm1pc3Npb25FcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisKKworY2xhc3MgX1JlY3Vyc2l2ZVdpbGRjYXJkU2VsZWN0b3IoX1NlbGVjdG9yKToKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXQsIGNoaWxkX3BhcnRzKToKKyAgICAgICAgX1NlbGVjdG9yLl9faW5pdF9fKHNlbGYsIGNoaWxkX3BhcnRzKQorCisgICAgZGVmIF9pdGVyYXRlX2RpcmVjdG9yaWVzKHNlbGYsIHBhcmVudF9wYXRoLCBpc19kaXIsIGxpc3RkaXIpOgorICAgICAgICB5aWVsZCBwYXJlbnRfcGF0aAorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBsaXN0ZGlyKHBhcmVudF9wYXRoKToKKyAgICAgICAgICAgICAgICBwYXRoID0gcGFyZW50X3BhdGguX21ha2VfY2hpbGRfcmVscGF0aChuYW1lKQorICAgICAgICAgICAgICAgIGlmIGlzX2RpcihwYXRoKSBhbmQgbm90IHBhdGguaXNfc3ltbGluaygpOgorICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLl9pdGVyYXRlX2RpcmVjdG9yaWVzKHBhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBwCisgICAgICAgIGV4Y2VwdCBQZXJtaXNzaW9uRXJyb3I6CisgICAgICAgICAgICByZXR1cm4KKworICAgIGRlZiBfc2VsZWN0X2Zyb20oc2VsZiwgcGFyZW50X3BhdGgsIGlzX2RpciwgZXhpc3RzLCBsaXN0ZGlyKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IGlzX2RpcihwYXJlbnRfcGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICB3aXRoIF9jYWNoZWQobGlzdGRpcikgYXMgbGlzdGRpcjoKKyAgICAgICAgICAgICAgICB5aWVsZGVkID0gc2V0KCkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvcl9zZWxlY3QgPSBzZWxmLnN1Y2Nlc3Nvci5fc2VsZWN0X2Zyb20KKyAgICAgICAgICAgICAgICAgICAgZm9yIHN0YXJ0aW5nX3BvaW50IGluIHNlbGYuX2l0ZXJhdGVfZGlyZWN0b3JpZXMocGFyZW50X3BhdGgsIGlzX2RpciwgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBzdWNjZXNzb3Jfc2VsZWN0KHN0YXJ0aW5nX3BvaW50LCBpc19kaXIsIGV4aXN0cywgbGlzdGRpcik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcCBub3QgaW4geWllbGRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgcAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZGVkLmFkZChwKQorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkZWQuY2xlYXIoKQorICAgICAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yOgorICAgICAgICAgICAgcmV0dXJuCisKKworIworIyBQdWJsaWMgQVBJCisjCisKK2NsYXNzIF9QYXRoUGFyZW50cyhTZXF1ZW5jZSk6CisgICAgIiIiVGhpcyBvYmplY3QgcHJvdmlkZXMgc2VxdWVuY2UtbGlrZSBhY2Nlc3MgdG8gdGhlIGxvZ2ljYWwgYW5jZXN0b3JzCisgICAgb2YgYSBwYXRoLiAgRG9uJ3QgdHJ5IHRvIGNvbnN0cnVjdCBpdCB5b3Vyc2VsZi4iIiIKKyAgICBfX3Nsb3RzX18gPSAoJ19wYXRoY2xzJywgJ19kcnYnLCAnX3Jvb3QnLCAnX3BhcnRzJykKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgIyBXZSBkb24ndCBzdG9yZSB0aGUgaW5zdGFuY2UgdG8gYXZvaWQgcmVmZXJlbmNlIGN5Y2xlcworICAgICAgICBzZWxmLl9wYXRoY2xzID0gdHlwZShwYXRoKQorICAgICAgICBzZWxmLl9kcnYgPSBwYXRoLl9kcnYKKyAgICAgICAgc2VsZi5fcm9vdCA9IHBhdGguX3Jvb3QKKyAgICAgICAgc2VsZi5fcGFydHMgPSBwYXRoLl9wYXJ0cworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2RydiBvciBzZWxmLl9yb290OgorICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9wYXJ0cykgLSAxCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3BhcnRzKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGlkeCk6CisgICAgICAgIGlmIGlkeCA8IDAgb3IgaWR4ID49IGxlbihzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoaWR4KQorICAgICAgICByZXR1cm4gc2VsZi5fcGF0aGNscy5fZnJvbV9wYXJzZWRfcGFydHMoc2VsZi5fZHJ2LCBzZWxmLl9yb290LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFydHNbOi1pZHggLSAxXSkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8e30ucGFyZW50cz4iLmZvcm1hdChzZWxmLl9wYXRoY2xzLl9fbmFtZV9fKQorCisKK2NsYXNzIFB1cmVQYXRoKG9iamVjdCk6CisgICAgIiIiUHVyZVBhdGggcmVwcmVzZW50cyBhIGZpbGVzeXN0ZW0gcGF0aCBhbmQgb2ZmZXJzIG9wZXJhdGlvbnMgd2hpY2gKKyAgICBkb24ndCBpbXBseSBhbnkgYWN0dWFsIGZpbGVzeXN0ZW0gSS9PLiAgRGVwZW5kaW5nIG9uIHlvdXIgc3lzdGVtLAorICAgIGluc3RhbnRpYXRpbmcgYSBQdXJlUGF0aCB3aWxsIHJldHVybiBlaXRoZXIgYSBQdXJlUG9zaXhQYXRoIG9yIGEKKyAgICBQdXJlV2luZG93c1BhdGggb2JqZWN0LiAgWW91IGNhbiBhbHNvIGluc3RhbnRpYXRlIGVpdGhlciBvZiB0aGVzZSBjbGFzc2VzCisgICAgZGlyZWN0bHksIHJlZ2FyZGxlc3Mgb2YgeW91ciBzeXN0ZW0uCisgICAgIiIiCisgICAgX19zbG90c19fID0gKAorICAgICAgICAnX2RydicsICdfcm9vdCcsICdfcGFydHMnLAorICAgICAgICAnX3N0cicsICdfaGFzaCcsICdfcHBhcnRzJywgJ19jYWNoZWRfY3BhcnRzJywKKyAgICApCisKKyAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgIiIiQ29uc3RydWN0IGEgUHVyZVBhdGggZnJvbSBvbmUgb3Igc2V2ZXJhbCBzdHJpbmdzIGFuZCBvciBleGlzdGluZworICAgICAgICBQdXJlUGF0aCBvYmplY3RzLiAgVGhlIHN0cmluZ3MgYW5kIHBhdGggb2JqZWN0cyBhcmUgY29tYmluZWQgc28gYXMKKyAgICAgICAgdG8geWllbGQgYSBjYW5vbmljYWxpemVkIHBhdGgsIHdoaWNoIGlzIGluY29ycG9yYXRlZCBpbnRvIHRoZQorICAgICAgICBuZXcgUHVyZVBhdGggb2JqZWN0LgorICAgICAgICAiIiIKKyAgICAgICAgaWYgY2xzIGlzIFB1cmVQYXRoOgorICAgICAgICAgICAgY2xzID0gUHVyZVdpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIFB1cmVQb3NpeFBhdGgKKyAgICAgICAgcmV0dXJuIGNscy5fZnJvbV9wYXJ0cyhhcmdzKQorCisgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICMgVXNpbmcgdGhlIHBhcnRzIHR1cGxlIGhlbHBzIHNoYXJlIGludGVybmVkIHBhdGggcGFydHMKKyAgICAgICAgIyB3aGVuIHBpY2tsaW5nIHJlbGF0ZWQgcGF0aHMuCisgICAgICAgIHJldHVybiAoc2VsZi5fX2NsYXNzX18sIHR1cGxlKHNlbGYuX3BhcnRzKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfcGFyc2VfYXJncyhjbHMsIGFyZ3MpOgorICAgICAgICAjIFRoaXMgaXMgdXNlZnVsIHdoZW4geW91IGRvbid0IHdhbnQgdG8gY3JlYXRlIGFuIGluc3RhbmNlLCBqdXN0CisgICAgICAgICMgY2Fub25pY2FsaXplIHNvbWUgY29uc3RydWN0b3IgYXJndW1lbnRzLgorICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIGZvciBhIGluIGFyZ3M6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGEsIFB1cmVQYXRoKToKKyAgICAgICAgICAgICAgICBwYXJ0cyArPSBhLl9wYXJ0cworICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGEsIHN0cik6CisgICAgICAgICAgICAgICAgIyBGb3JjZS1jYXN0IHN0ciBzdWJjbGFzc2VzIHRvIHN0ciAoaXNzdWUgIzIxMTI3KQorICAgICAgICAgICAgICAgIHBhcnRzLmFwcGVuZChzdHIoYSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50IHNob3VsZCBiZSBhIHBhdGggb3Igc3RyIG9iamVjdCwgbm90ICVyIgorICAgICAgICAgICAgICAgICAgICAlIHR5cGUoYSkpCisgICAgICAgIHJldHVybiBjbHMuX2ZsYXZvdXIucGFyc2VfcGFydHMocGFydHMpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21fcGFydHMoY2xzLCBhcmdzLCBpbml0PVRydWUpOgorICAgICAgICAjIFdlIG5lZWQgdG8gY2FsbCBfcGFyc2VfYXJncyBvbiB0aGUgaW5zdGFuY2UsIHNvIGFzIHRvIGdldCB0aGUKKyAgICAgICAgIyByaWdodCBmbGF2b3VyLgorICAgICAgICBzZWxmID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICBkcnYsIHJvb3QsIHBhcnRzID0gc2VsZi5fcGFyc2VfYXJncyhhcmdzKQorICAgICAgICBzZWxmLl9kcnYgPSBkcnYKKyAgICAgICAgc2VsZi5fcm9vdCA9IHJvb3QKKyAgICAgICAgc2VsZi5fcGFydHMgPSBwYXJ0cworICAgICAgICBpZiBpbml0OgorICAgICAgICAgICAgc2VsZi5faW5pdCgpCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2Zyb21fcGFyc2VkX3BhcnRzKGNscywgZHJ2LCByb290LCBwYXJ0cywgaW5pdD1UcnVlKToKKyAgICAgICAgc2VsZiA9IG9iamVjdC5fX25ld19fKGNscykKKyAgICAgICAgc2VsZi5fZHJ2ID0gZHJ2CisgICAgICAgIHNlbGYuX3Jvb3QgPSByb290CisgICAgICAgIHNlbGYuX3BhcnRzID0gcGFydHMKKyAgICAgICAgaWYgaW5pdDoKKyAgICAgICAgICAgIHNlbGYuX2luaXQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9mb3JtYXRfcGFyc2VkX3BhcnRzKGNscywgZHJ2LCByb290LCBwYXJ0cyk6CisgICAgICAgIGlmIGRydiBvciByb290OgorICAgICAgICAgICAgcmV0dXJuIGRydiArIHJvb3QgKyBjbHMuX2ZsYXZvdXIuam9pbihwYXJ0c1sxOl0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gY2xzLl9mbGF2b3VyLmpvaW4ocGFydHMpCisKKyAgICBkZWYgX2luaXQoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGVuIGluIGNvbmNyZXRlIFBhdGgKKyAgICAgICAgcGFzcworCisgICAgZGVmIF9tYWtlX2NoaWxkKHNlbGYsIGFyZ3MpOgorICAgICAgICBkcnYsIHJvb3QsIHBhcnRzID0gc2VsZi5fcGFyc2VfYXJncyhhcmdzKQorICAgICAgICBkcnYsIHJvb3QsIHBhcnRzID0gc2VsZi5fZmxhdm91ci5qb2luX3BhcnNlZF9wYXJ0cygKKyAgICAgICAgICAgIHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwgc2VsZi5fcGFydHMsIGRydiwgcm9vdCwgcGFydHMpCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhkcnYsIHJvb3QsIHBhcnRzKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwYXRoLCBzdWl0YWJsZSBmb3IKKyAgICAgICAgcGFzc2luZyB0byBzeXN0ZW0gY2FsbHMuIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdHIKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgc2VsZi5fc3RyID0gc2VsZi5fZm9ybWF0X3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzKSBvciAnLicKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zdHIKKworICAgIGRlZiBhc19wb3NpeChzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhdGggd2l0aCBmb3J3YXJkICgvKQorICAgICAgICBzbGFzaGVzLiIiIgorICAgICAgICBmID0gc2VsZi5fZmxhdm91cgorICAgICAgICByZXR1cm4gc3RyKHNlbGYpLnJlcGxhY2UoZi5zZXAsICcvJykKKworICAgIGRlZiBfX2J5dGVzX18oc2VsZik6CisgICAgICAgICIiIlJldHVybiB0aGUgYnl0ZXMgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBhdGguICBUaGlzIGlzIG9ubHkKKyAgICAgICAgcmVjb21tZW5kZWQgdG8gdXNlIHVuZGVyIFVuaXguIiIiCisgICAgICAgIHJldHVybiBvcy5mc2VuY29kZShzdHIoc2VsZikpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAie30oeyFyfSkiLmZvcm1hdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgc2VsZi5hc19wb3NpeCgpKQorCisgICAgZGVmIGFzX3VyaShzZWxmKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBwYXRoIGFzIGEgJ2ZpbGUnIFVSSS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYuaXNfYWJzb2x1dGUoKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInJlbGF0aXZlIHBhdGggY2FuJ3QgYmUgZXhwcmVzc2VkIGFzIGEgZmlsZSBVUkkiKQorICAgICAgICByZXR1cm4gc2VsZi5fZmxhdm91ci5tYWtlX3VyaShzZWxmKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIF9jcGFydHMoc2VsZik6CisgICAgICAgICMgQ2FjaGVkIGNhc2Vmb2xkZWQgcGFydHMsIGZvciBoYXNoaW5nIGFuZCBjb21wYXJpc29uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9jYWNoZWRfY3BhcnRzCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX2NhY2hlZF9jcGFydHMgPSBzZWxmLl9mbGF2b3VyLmNhc2Vmb2xkX3BhcnRzKHNlbGYuX3BhcnRzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NhY2hlZF9jcGFydHMKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUHVyZVBhdGgpOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jcGFydHMgPT0gb3RoZXIuX2NwYXJ0cyBhbmQgc2VsZi5fZmxhdm91ciBpcyBvdGhlci5fZmxhdm91cgorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5faGFzaAorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9oYXNoID0gaGFzaCh0dXBsZShzZWxmLl9jcGFydHMpKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2hhc2gKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUHVyZVBhdGgpIG9yIHNlbGYuX2ZsYXZvdXIgaXMgbm90IG90aGVyLl9mbGF2b3VyOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jcGFydHMgPCBvdGhlci5fY3BhcnRzCisKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzIDw9IG90aGVyLl9jcGFydHMKKworICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgUHVyZVBhdGgpIG9yIHNlbGYuX2ZsYXZvdXIgaXMgbm90IG90aGVyLl9mbGF2b3VyOgorICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIHJldHVybiBzZWxmLl9jcGFydHMgPiBvdGhlci5fY3BhcnRzCisKKyAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uob3RoZXIsIFB1cmVQYXRoKSBvciBzZWxmLl9mbGF2b3VyIGlzIG5vdCBvdGhlci5fZmxhdm91cjoKKyAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICByZXR1cm4gc2VsZi5fY3BhcnRzID49IG90aGVyLl9jcGFydHMKKworICAgIGRyaXZlID0gcHJvcGVydHkoYXR0cmdldHRlcignX2RydicpLAorICAgICAgICAgICAgICAgICAgICAgZG9jPSIiIlRoZSBkcml2ZSBwcmVmaXggKGxldHRlciBvciBVTkMgcGF0aCksIGlmIGFueS4iIiIpCisKKyAgICByb290ID0gcHJvcGVydHkoYXR0cmdldHRlcignX3Jvb3QnKSwKKyAgICAgICAgICAgICAgICAgICAgZG9jPSIiIlRoZSByb290IG9mIHRoZSBwYXRoLCBpZiBhbnkuIiIiKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFuY2hvcihzZWxmKToKKyAgICAgICAgIiIiVGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIGRyaXZlIGFuZCByb290LCBvciAnJy4iIiIKKyAgICAgICAgYW5jaG9yID0gc2VsZi5fZHJ2ICsgc2VsZi5fcm9vdAorICAgICAgICByZXR1cm4gYW5jaG9yCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbmFtZShzZWxmKToKKyAgICAgICAgIiIiVGhlIGZpbmFsIHBhdGggY29tcG9uZW50LCBpZiBhbnkuIiIiCisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMKKyAgICAgICAgaWYgbGVuKHBhcnRzKSA9PSAoMSBpZiAoc2VsZi5fZHJ2IG9yIHNlbGYuX3Jvb3QpIGVsc2UgMCk6CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgcmV0dXJuIHBhcnRzWy0xXQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN1ZmZpeChzZWxmKToKKyAgICAgICAgIiIiVGhlIGZpbmFsIGNvbXBvbmVudCdzIGxhc3Qgc3VmZml4LCBpZiBhbnkuIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaSA9IG5hbWUucmZpbmQoJy4nKQorICAgICAgICBpZiAwIDwgaSA8IGxlbihuYW1lKSAtIDE6CisgICAgICAgICAgICByZXR1cm4gbmFtZVtpOl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAnJworCisgICAgQHByb3BlcnR5CisgICAgZGVmIHN1ZmZpeGVzKHNlbGYpOgorICAgICAgICAiIiJBIGxpc3Qgb2YgdGhlIGZpbmFsIGNvbXBvbmVudCdzIHN1ZmZpeGVzLCBpZiBhbnkuIiIiCisgICAgICAgIG5hbWUgPSBzZWxmLm5hbWUKKyAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLicpOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIG5hbWUgPSBuYW1lLmxzdHJpcCgnLicpCisgICAgICAgIHJldHVybiBbJy4nICsgc3VmZml4IGZvciBzdWZmaXggaW4gbmFtZS5zcGxpdCgnLicpWzE6XV0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdGVtKHNlbGYpOgorICAgICAgICAiIiJUaGUgZmluYWwgcGF0aCBjb21wb25lbnQsIG1pbnVzIGl0cyBsYXN0IHN1ZmZpeC4iIiIKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBpID0gbmFtZS5yZmluZCgnLicpCisgICAgICAgIGlmIDAgPCBpIDwgbGVuKG5hbWUpIC0gMToKKyAgICAgICAgICAgIHJldHVybiBuYW1lWzppXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIG5hbWUKKworICAgIGRlZiB3aXRoX25hbWUoc2VsZiwgbmFtZSk6CisgICAgICAgICIiIlJldHVybiBhIG5ldyBwYXRoIHdpdGggdGhlIGZpbGUgbmFtZSBjaGFuZ2VkLiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5uYW1lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiJXIgaGFzIGFuIGVtcHR5IG5hbWUiICUgKHNlbGYsKSkKKyAgICAgICAgZHJ2LCByb290LCBwYXJ0cyA9IHNlbGYuX2ZsYXZvdXIucGFyc2VfcGFydHMoKG5hbWUsKSkKKyAgICAgICAgaWYgKG5vdCBuYW1lIG9yIG5hbWVbLTFdIGluIFtzZWxmLl9mbGF2b3VyLnNlcCwgc2VsZi5fZmxhdm91ci5hbHRzZXBdCisgICAgICAgICAgICBvciBkcnYgb3Igcm9vdCBvciBsZW4ocGFydHMpICE9IDEpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBuYW1lICVyIiAlIChuYW1lKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzWzotMV0gKyBbbmFtZV0pCisKKyAgICBkZWYgd2l0aF9zdWZmaXgoc2VsZiwgc3VmZml4KToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IHBhdGggd2l0aCB0aGUgZmlsZSBzdWZmaXggY2hhbmdlZCAob3IgYWRkZWQsIGlmIG5vbmUpLiIiIgorICAgICAgICAjIFhYWCBpZiBzdWZmaXggaXMgTm9uZSwgc2hvdWxkIHRoZSBjdXJyZW50IHN1ZmZpeCBiZSByZW1vdmVkPworICAgICAgICBmID0gc2VsZi5fZmxhdm91cgorICAgICAgICBpZiBmLnNlcCBpbiBzdWZmaXggb3IgZi5hbHRzZXAgYW5kIGYuYWx0c2VwIGluIHN1ZmZpeDoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIkludmFsaWQgc3VmZml4ICVyIiAlIChzdWZmaXgpKQorICAgICAgICBpZiBzdWZmaXggYW5kIG5vdCBzdWZmaXguc3RhcnRzd2l0aCgnLicpIG9yIHN1ZmZpeCA9PSAnLic6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIHN1ZmZpeCAlciIgJSAoc3VmZml4KSkKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBpZiBub3QgbmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIiVyIGhhcyBhbiBlbXB0eSBuYW1lIiAlIChzZWxmLCkpCisgICAgICAgIG9sZF9zdWZmaXggPSBzZWxmLnN1ZmZpeAorICAgICAgICBpZiBub3Qgb2xkX3N1ZmZpeDoKKyAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgc3VmZml4CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuYW1lID0gbmFtZVs6LWxlbihvbGRfc3VmZml4KV0gKyBzdWZmaXgKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKHNlbGYuX2Rydiwgc2VsZi5fcm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3BhcnRzWzotMV0gKyBbbmFtZV0pCisKKyAgICBkZWYgcmVsYXRpdmVfdG8oc2VsZiwgKm90aGVyKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSByZWxhdGl2ZSBwYXRoIHRvIGFub3RoZXIgcGF0aCBpZGVudGlmaWVkIGJ5IHRoZSBwYXNzZWQKKyAgICAgICAgYXJndW1lbnRzLiAgSWYgdGhlIG9wZXJhdGlvbiBpcyBub3QgcG9zc2libGUgKGJlY2F1c2UgdGhpcyBpcyBub3QKKyAgICAgICAgYSBzdWJwYXRoIG9mIHRoZSBvdGhlciBwYXRoKSwgcmFpc2UgVmFsdWVFcnJvci4KKyAgICAgICAgIiIiCisgICAgICAgICMgRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgbWV0aG9kLCBkcml2ZSBhbmQgcm9vdCBhcmUgY29uc2lkZXJlZAorICAgICAgICAjIHNlcGFyYXRlIHBhcnRzLCBpLmUuOgorICAgICAgICAjICAgUGF0aCgnYzovJykucmVsYXRpdmVfdG8oJ2M6JykgIGdpdmVzIFBhdGgoJy8nKQorICAgICAgICAjICAgUGF0aCgnYzovJykucmVsYXRpdmVfdG8oJy8nKSAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgaWYgbm90IG90aGVyOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuZWVkIGF0IGxlYXN0IG9uZSBhcmd1bWVudCIpCisgICAgICAgIHBhcnRzID0gc2VsZi5fcGFydHMKKyAgICAgICAgZHJ2ID0gc2VsZi5fZHJ2CisgICAgICAgIHJvb3QgPSBzZWxmLl9yb290CisgICAgICAgIGlmIHJvb3Q6CisgICAgICAgICAgICBhYnNfcGFydHMgPSBbZHJ2LCByb290XSArIHBhcnRzWzE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWJzX3BhcnRzID0gcGFydHMKKyAgICAgICAgdG9fZHJ2LCB0b19yb290LCB0b19wYXJ0cyA9IHNlbGYuX3BhcnNlX2FyZ3Mob3RoZXIpCisgICAgICAgIGlmIHRvX3Jvb3Q6CisgICAgICAgICAgICB0b19hYnNfcGFydHMgPSBbdG9fZHJ2LCB0b19yb290XSArIHRvX3BhcnRzWzE6XQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdG9fYWJzX3BhcnRzID0gdG9fcGFydHMKKyAgICAgICAgbiA9IGxlbih0b19hYnNfcGFydHMpCisgICAgICAgIGNmID0gc2VsZi5fZmxhdm91ci5jYXNlZm9sZF9wYXJ0cworICAgICAgICBpZiAocm9vdCBvciBkcnYpIGlmIG4gPT0gMCBlbHNlIGNmKGFic19wYXJ0c1s6bl0pICE9IGNmKHRvX2Fic19wYXJ0cyk6CisgICAgICAgICAgICBmb3JtYXR0ZWQgPSBzZWxmLl9mb3JtYXRfcGFyc2VkX3BhcnRzKHRvX2RydiwgdG9fcm9vdCwgdG9fcGFydHMpCisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ7IXJ9IGRvZXMgbm90IHN0YXJ0IHdpdGggeyFyfSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzdHIoc2VsZiksIHN0cihmb3JtYXR0ZWQpKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2Zyb21fcGFyc2VkX3BhcnRzKCcnLCByb290IGlmIG4gPT0gMSBlbHNlICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzX3BhcnRzW246XSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBwYXJ0cyhzZWxmKToKKyAgICAgICAgIiIiQW4gb2JqZWN0IHByb3ZpZGluZyBzZXF1ZW5jZS1saWtlIGFjY2VzcyB0byB0aGUKKyAgICAgICAgY29tcG9uZW50cyBpbiB0aGUgZmlsZXN5c3RlbSBwYXRoLiIiIgorICAgICAgICAjIFdlIGNhY2hlIHRoZSB0dXBsZSB0byBhdm9pZCBidWlsZGluZyBhIG5ldyBvbmUgZWFjaCB0aW1lIC5wYXJ0cworICAgICAgICAjIGlzIGFjY2Vzc2VkLiAgWFhYIGlzIHRoaXMgbmVjZXNzYXJ5PworICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fcHBhcnRzCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX3BwYXJ0cyA9IHR1cGxlKHNlbGYuX3BhcnRzKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BwYXJ0cworCisgICAgZGVmIGpvaW5wYXRoKHNlbGYsICphcmdzKToKKyAgICAgICAgIiIiQ29tYmluZSB0aGlzIHBhdGggd2l0aCBvbmUgb3Igc2V2ZXJhbCBhcmd1bWVudHMsIGFuZCByZXR1cm4gYQorICAgICAgICBuZXcgcGF0aCByZXByZXNlbnRpbmcgZWl0aGVyIGEgc3VicGF0aCAoaWYgYWxsIGFyZ3VtZW50cyBhcmUgcmVsYXRpdmUKKyAgICAgICAgcGF0aHMpIG9yIGEgdG90YWxseSBkaWZmZXJlbnQgcGF0aCAoaWYgb25lIG9mIHRoZSBhcmd1bWVudHMgaXMKKyAgICAgICAgYW5jaG9yZWQpLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ha2VfY2hpbGQoYXJncykKKworICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBrZXkpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWFrZV9jaGlsZCgoa2V5LCkpCisKKyAgICBkZWYgX19ydHJ1ZWRpdl9fKHNlbGYsIGtleSk6CisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnRzKFtrZXldICsgc2VsZi5fcGFydHMpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFyZW50KHNlbGYpOgorICAgICAgICAiIiJUaGUgbG9naWNhbCBwYXJlbnQgb2YgdGhlIHBhdGguIiIiCisgICAgICAgIGRydiA9IHNlbGYuX2RydgorICAgICAgICByb290ID0gc2VsZi5fcm9vdAorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzCisgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gMSBhbmQgKGRydiBvciByb290KToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhkcnYsIHJvb3QsIHBhcnRzWzotMV0pCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFyZW50cyhzZWxmKToKKyAgICAgICAgIiIiQSBzZXF1ZW5jZSBvZiB0aGlzIHBhdGgncyBsb2dpY2FsIHBhcmVudHMuIiIiCisgICAgICAgIHJldHVybiBfUGF0aFBhcmVudHMoc2VsZikKKworICAgIGRlZiBpc19hYnNvbHV0ZShzZWxmKToKKyAgICAgICAgIiIiVHJ1ZSBpZiB0aGUgcGF0aCBpcyBhYnNvbHV0ZSAoaGFzIGJvdGggYSByb290IGFuZCwgaWYgYXBwbGljYWJsZSwKKyAgICAgICAgYSBkcml2ZSkuIiIiCisgICAgICAgIGlmIG5vdCBzZWxmLl9yb290OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5fZmxhdm91ci5oYXNfZHJ2IG9yIGJvb2woc2VsZi5fZHJ2KQorCisgICAgZGVmIGlzX3Jlc2VydmVkKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBjb250YWlucyBvbmUgb2YgdGhlIHNwZWNpYWwgbmFtZXMgcmVzZXJ2ZWQKKyAgICAgICAgYnkgdGhlIHN5c3RlbSwgaWYgYW55LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZmxhdm91ci5pc19yZXNlcnZlZChzZWxmLl9wYXJ0cykKKworICAgIGRlZiBtYXRjaChzZWxmLCBwYXRoX3BhdHRlcm4pOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJuIFRydWUgaWYgdGhpcyBwYXRoIG1hdGNoZXMgdGhlIGdpdmVuIHBhdHRlcm4uCisgICAgICAgICIiIgorICAgICAgICBjZiA9IHNlbGYuX2ZsYXZvdXIuY2FzZWZvbGQKKyAgICAgICAgcGF0aF9wYXR0ZXJuID0gY2YocGF0aF9wYXR0ZXJuKQorICAgICAgICBkcnYsIHJvb3QsIHBhdF9wYXJ0cyA9IHNlbGYuX2ZsYXZvdXIucGFyc2VfcGFydHMoKHBhdGhfcGF0dGVybiwpKQorICAgICAgICBpZiBub3QgcGF0X3BhcnRzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZW1wdHkgcGF0dGVybiIpCisgICAgICAgIGlmIGRydiBhbmQgZHJ2ICE9IGNmKHNlbGYuX2Rydik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgcm9vdCBhbmQgcm9vdCAhPSBjZihzZWxmLl9yb290KToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBwYXJ0cyA9IHNlbGYuX2NwYXJ0cworICAgICAgICBpZiBkcnYgb3Igcm9vdDoKKyAgICAgICAgICAgIGlmIGxlbihwYXRfcGFydHMpICE9IGxlbihwYXJ0cyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBwYXRfcGFydHMgPSBwYXRfcGFydHNbMTpdCisgICAgICAgIGVsaWYgbGVuKHBhdF9wYXJ0cykgPiBsZW4ocGFydHMpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGZvciBwYXJ0LCBwYXQgaW4gemlwKHJldmVyc2VkKHBhcnRzKSwgcmV2ZXJzZWQocGF0X3BhcnRzKSk6CisgICAgICAgICAgICBpZiBub3QgZm5tYXRjaC5mbm1hdGNoY2FzZShwYXJ0LCBwYXQpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisKK2NsYXNzIFB1cmVQb3NpeFBhdGgoUHVyZVBhdGgpOgorICAgIF9mbGF2b3VyID0gX3Bvc2l4X2ZsYXZvdXIKKyAgICBfX3Nsb3RzX18gPSAoKQorCisKK2NsYXNzIFB1cmVXaW5kb3dzUGF0aChQdXJlUGF0aCk6CisgICAgX2ZsYXZvdXIgPSBfd2luZG93c19mbGF2b3VyCisgICAgX19zbG90c19fID0gKCkKKworCisjIEZpbGVzeXN0ZW0tYWNjZXNzaW5nIGNsYXNzZXMKKworCitjbGFzcyBQYXRoKFB1cmVQYXRoKToKKyAgICBfX3Nsb3RzX18gPSAoCisgICAgICAgICdfYWNjZXNzb3InLAorICAgICAgICAnX2Nsb3NlZCcsCisgICAgKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBjbHMgaXMgUGF0aDoKKyAgICAgICAgICAgIGNscyA9IFdpbmRvd3NQYXRoIGlmIG9zLm5hbWUgPT0gJ250JyBlbHNlIFBvc2l4UGF0aAorICAgICAgICBzZWxmID0gY2xzLl9mcm9tX3BhcnRzKGFyZ3MsIGluaXQ9RmFsc2UpCisgICAgICAgIGlmIG5vdCBzZWxmLl9mbGF2b3VyLmlzX3N1cHBvcnRlZDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoImNhbm5vdCBpbnN0YW50aWF0ZSAlciBvbiB5b3VyIHN5c3RlbSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoY2xzLl9fbmFtZV9fLCkpCisgICAgICAgIHNlbGYuX2luaXQoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9pbml0KHNlbGYsCisgICAgICAgICAgICAgICMgUHJpdmF0ZSBub24tY29uc3RydWN0b3IgYXJndW1lbnRzCisgICAgICAgICAgICAgIHRlbXBsYXRlPU5vbmUsCisgICAgICAgICAgICAgICk6CisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCisgICAgICAgIGlmIHRlbXBsYXRlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IgPSB0ZW1wbGF0ZS5fYWNjZXNzb3IKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yID0gX25vcm1hbF9hY2Nlc3NvcgorCisgICAgZGVmIF9tYWtlX2NoaWxkX3JlbHBhdGgoc2VsZiwgcGFydCk6CisgICAgICAgICMgVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gdXNlZCBmb3IgZGlyIHdhbGtpbmcuICBgcGFydGAgbXVzdCBiZQorICAgICAgICAjIGEgc2luZ2xlIHBhcnQgcmVsYXRpdmUgdG8gdGhpcyBwYXRoLgorICAgICAgICBwYXJ0cyA9IHNlbGYuX3BhcnRzICsgW3BhcnRdCisgICAgICAgIHJldHVybiBzZWxmLl9mcm9tX3BhcnNlZF9wYXJ0cyhzZWxmLl9kcnYsIHNlbGYuX3Jvb3QsIHBhcnRzKQorCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6CisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKKworICAgIGRlZiBfcmFpc2VfY2xvc2VkKHNlbGYpOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBwYXRoIikKKworICAgIGRlZiBfb3BlbmVyKHNlbGYsIG5hbWUsIGZsYWdzLCBtb2RlPTBvNjY2KToKKyAgICAgICAgIyBBIHN0dWIgZm9yIHRoZSBvcGVuZXIgYXJndW1lbnQgdG8gYnVpbHQtaW4gb3BlbigpCisgICAgICAgIHJldHVybiBzZWxmLl9hY2Nlc3Nvci5vcGVuKHNlbGYsIGZsYWdzLCBtb2RlKQorCisgICAgZGVmIF9yYXdfb3BlbihzZWxmLCBmbGFncywgbW9kZT0wbzc3Nyk6CisgICAgICAgICIiIgorICAgICAgICBPcGVuIHRoZSBmaWxlIHBvaW50ZWQgYnkgdGhpcyBwYXRoIGFuZCByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IsCisgICAgICAgIGFzIG9zLm9wZW4oKSBkb2VzLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgc2VsZi5fcmFpc2VfY2xvc2VkKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2FjY2Vzc29yLm9wZW4oc2VsZiwgZmxhZ3MsIG1vZGUpCisKKyAgICAjIFB1YmxpYyBBUEkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBjd2QoY2xzKToKKyAgICAgICAgIiIiUmV0dXJuIGEgbmV3IHBhdGggcG9pbnRpbmcgdG8gdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkKKyAgICAgICAgKGFzIHJldHVybmVkIGJ5IG9zLmdldGN3ZCgpKS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBjbHMob3MuZ2V0Y3dkKCkpCisKKyAgICBkZWYgaXRlcmRpcihzZWxmKToKKyAgICAgICAgIiIiSXRlcmF0ZSBvdmVyIHRoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeS4gIERvZXMgbm90IHlpZWxkIGFueQorICAgICAgICByZXN1bHQgZm9yIHRoZSBzcGVjaWFsIHBhdGhzICcuJyBhbmQgJy4uJy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGZvciBuYW1lIGluIHNlbGYuX2FjY2Vzc29yLmxpc3RkaXIoc2VsZik6CisgICAgICAgICAgICBpZiBuYW1lIGluIHsnLicsICcuLid9OgorICAgICAgICAgICAgICAgICMgWWllbGRpbmcgYSBwYXRoIG9iamVjdCBmb3IgdGhlc2UgbWFrZXMgbGl0dGxlIHNlbnNlCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHlpZWxkIHNlbGYuX21ha2VfY2hpbGRfcmVscGF0aChuYW1lKQorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VkOgorICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisKKyAgICBkZWYgZ2xvYihzZWxmLCBwYXR0ZXJuKToKKyAgICAgICAgIiIiSXRlcmF0ZSBvdmVyIHRoaXMgc3VidHJlZSBhbmQgeWllbGQgYWxsIGV4aXN0aW5nIGZpbGVzIChvZiBhbnkKKyAgICAgICAga2luZCwgaW5jbHVkaW5nIGRpcmVjdG9yaWVzKSBtYXRjaGluZyB0aGUgZ2l2ZW4gcGF0dGVybi4KKyAgICAgICAgIiIiCisgICAgICAgIHBhdHRlcm4gPSBzZWxmLl9mbGF2b3VyLmNhc2Vmb2xkKHBhdHRlcm4pCisgICAgICAgIGRydiwgcm9vdCwgcGF0dGVybl9wYXJ0cyA9IHNlbGYuX2ZsYXZvdXIucGFyc2VfcGFydHMoKHBhdHRlcm4sKSkKKyAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJOb24tcmVsYXRpdmUgcGF0dGVybnMgYXJlIHVuc3VwcG9ydGVkIikKKyAgICAgICAgc2VsZWN0b3IgPSBfbWFrZV9zZWxlY3Rvcih0dXBsZShwYXR0ZXJuX3BhcnRzKSkKKyAgICAgICAgZm9yIHAgaW4gc2VsZWN0b3Iuc2VsZWN0X2Zyb20oc2VsZik6CisgICAgICAgICAgICB5aWVsZCBwCisKKyAgICBkZWYgcmdsb2Ioc2VsZiwgcGF0dGVybik6CisgICAgICAgICIiIlJlY3Vyc2l2ZWx5IHlpZWxkIGFsbCBleGlzdGluZyBmaWxlcyAob2YgYW55IGtpbmQsIGluY2x1ZGluZworICAgICAgICBkaXJlY3RvcmllcykgbWF0Y2hpbmcgdGhlIGdpdmVuIHBhdHRlcm4sIGFueXdoZXJlIGluIHRoaXMgc3VidHJlZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhdHRlcm4gPSBzZWxmLl9mbGF2b3VyLmNhc2Vmb2xkKHBhdHRlcm4pCisgICAgICAgIGRydiwgcm9vdCwgcGF0dGVybl9wYXJ0cyA9IHNlbGYuX2ZsYXZvdXIucGFyc2VfcGFydHMoKHBhdHRlcm4sKSkKKyAgICAgICAgaWYgZHJ2IG9yIHJvb3Q6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCJOb24tcmVsYXRpdmUgcGF0dGVybnMgYXJlIHVuc3VwcG9ydGVkIikKKyAgICAgICAgc2VsZWN0b3IgPSBfbWFrZV9zZWxlY3RvcigoIioqIiwpICsgdHVwbGUocGF0dGVybl9wYXJ0cykpCisgICAgICAgIGZvciBwIGluIHNlbGVjdG9yLnNlbGVjdF9mcm9tKHNlbGYpOgorICAgICAgICAgICAgeWllbGQgcAorCisgICAgZGVmIGFic29sdXRlKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gYWJzb2x1dGUgdmVyc2lvbiBvZiB0aGlzIHBhdGguICBUaGlzIGZ1bmN0aW9uIHdvcmtzCisgICAgICAgIGV2ZW4gaWYgdGhlIHBhdGggZG9lc24ndCBwb2ludCB0byBhbnl0aGluZy4KKworICAgICAgICBObyBub3JtYWxpemF0aW9uIGlzIGRvbmUsIGkuZS4gYWxsICcuJyBhbmQgJy4uJyB3aWxsIGJlIGtlcHQgYWxvbmcuCisgICAgICAgIFVzZSByZXNvbHZlKCkgdG8gZ2V0IHRoZSBjYW5vbmljYWwgcGF0aCB0byBhIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICAjIFhYWCB1bnRlc3RlZCB5ZXQhCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIGlmIHNlbGYuaXNfYWJzb2x1dGUoKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICMgRklYTUUgdGhpcyBtdXN0IGRlZmVyIHRvIHRoZSBzcGVjaWZpYyBmbGF2b3VyIChhbmQsIHVuZGVyIFdpbmRvd3MsCisgICAgICAgICMgdXNlIG50Ll9nZXRmdWxscGF0aG5hbWUoKSkKKyAgICAgICAgb2JqID0gc2VsZi5fZnJvbV9wYXJ0cyhbb3MuZ2V0Y3dkKCldICsgc2VsZi5fcGFydHMsIGluaXQ9RmFsc2UpCisgICAgICAgIG9iai5faW5pdCh0ZW1wbGF0ZT1zZWxmKQorICAgICAgICByZXR1cm4gb2JqCisKKyAgICBkZWYgcmVzb2x2ZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ha2UgdGhlIHBhdGggYWJzb2x1dGUsIHJlc29sdmluZyBhbGwgc3ltbGlua3Mgb24gdGhlIHdheSBhbmQgYWxzbworICAgICAgICBub3JtYWxpemluZyBpdCAoZm9yIGV4YW1wbGUgdHVybmluZyBzbGFzaGVzIGludG8gYmFja3NsYXNoZXMgdW5kZXIKKyAgICAgICAgV2luZG93cykuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzID0gc2VsZi5fZmxhdm91ci5yZXNvbHZlKHNlbGYpCisgICAgICAgIGlmIHMgaXMgTm9uZToKKyAgICAgICAgICAgICMgTm8gc3ltbGluayByZXNvbHV0aW9uID0+IGZvciBjb25zaXN0ZW5jeSwgcmFpc2UgYW4gZXJyb3IgaWYKKyAgICAgICAgICAgICMgdGhlIHBhdGggZG9lc24ndCBleGlzdCBvciBpcyBmb3JiaWRkZW4KKyAgICAgICAgICAgIHNlbGYuc3RhdCgpCisgICAgICAgICAgICBzID0gc3RyKHNlbGYuYWJzb2x1dGUoKSkKKyAgICAgICAgIyBOb3cgd2UgaGF2ZSBubyBzeW1saW5rcyBpbiB0aGUgcGF0aCwgaXQncyBzYWZlIHRvIG5vcm1hbGl6ZSBpdC4KKyAgICAgICAgbm9ybWVkID0gc2VsZi5fZmxhdm91ci5wYXRobW9kLm5vcm1wYXRoKHMpCisgICAgICAgIG9iaiA9IHNlbGYuX2Zyb21fcGFydHMoKG5vcm1lZCwpLCBpbml0PUZhbHNlKQorICAgICAgICBvYmouX2luaXQodGVtcGxhdGU9c2VsZikKKyAgICAgICAgcmV0dXJuIG9iagorCisgICAgZGVmIHN0YXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgc3RhdCgpIHN5c3RlbSBjYWxsIG9uIHRoaXMgcGF0aCwgbGlrZQorICAgICAgICBvcy5zdGF0KCkgZG9lcy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9hY2Nlc3Nvci5zdGF0KHNlbGYpCisKKyAgICBkZWYgb3duZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGxvZ2luIG5hbWUgb2YgdGhlIGZpbGUgb3duZXIuCisgICAgICAgICIiIgorICAgICAgICBpbXBvcnQgcHdkCisgICAgICAgIHJldHVybiBwd2QuZ2V0cHd1aWQoc2VsZi5zdGF0KCkuc3RfdWlkKS5wd19uYW1lCisKKyAgICBkZWYgZ3JvdXAoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXR1cm4gdGhlIGdyb3VwIG5hbWUgb2YgdGhlIGZpbGUgZ2lkLgorICAgICAgICAiIiIKKyAgICAgICAgaW1wb3J0IGdycAorICAgICAgICByZXR1cm4gZ3JwLmdldGdyZ2lkKHNlbGYuc3RhdCgpLnN0X2dpZCkuZ3JfbmFtZQorCisgICAgZGVmIG9wZW4oc2VsZiwgbW9kZT0ncicsIGJ1ZmZlcmluZz0tMSwgZW5jb2Rpbmc9Tm9uZSwKKyAgICAgICAgICAgICBlcnJvcnM9Tm9uZSwgbmV3bGluZT1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIE9wZW4gdGhlIGZpbGUgcG9pbnRlZCBieSB0aGlzIHBhdGggYW5kIHJldHVybiBhIGZpbGUgb2JqZWN0LCBhcworICAgICAgICB0aGUgYnVpbHQtaW4gb3BlbigpIGZ1bmN0aW9uIGRvZXMuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gaW8ub3BlbihzdHIoc2VsZiksIG1vZGUsIGJ1ZmZlcmluZywgZW5jb2RpbmcsIGVycm9ycywgbmV3bGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVyPXNlbGYuX29wZW5lcikKKworICAgIGRlZiB0b3VjaChzZWxmLCBtb2RlPTBvNjY2LCBleGlzdF9vaz1UcnVlKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSB0aGlzIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gYWNjZXNzIG1vZGUsIGlmIGl0IGRvZXNuJ3QgZXhpc3QuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBpZiBleGlzdF9vazoKKyAgICAgICAgICAgICMgRmlyc3QgdHJ5IHRvIGJ1bXAgbW9kaWZpY2F0aW9uIHRpbWUKKyAgICAgICAgICAgICMgSW1wbGVtZW50YXRpb24gbm90ZTogR05VIHRvdWNoIHVzZXMgdGhlIFVUSU1FX05PVyBvcHRpb24gb2YKKyAgICAgICAgICAgICMgdGhlIHV0aW1lbnNhdCgpIC8gZnV0aW1lbnMoKSBmdW5jdGlvbnMuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IudXRpbWUoc2VsZiwgTm9uZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgICMgQXZvaWQgZXhjZXB0aW9uIGNoYWluaW5nCisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZmxhZ3MgPSBvcy5PX0NSRUFUIHwgb3MuT19XUk9OTFkKKyAgICAgICAgaWYgbm90IGV4aXN0X29rOgorICAgICAgICAgICAgZmxhZ3MgfD0gb3MuT19FWENMCisgICAgICAgIGZkID0gc2VsZi5fcmF3X29wZW4oZmxhZ3MsIG1vZGUpCisgICAgICAgIG9zLmNsb3NlKGZkKQorCisgICAgZGVmIG1rZGlyKHNlbGYsIG1vZGU9MG83NzcsIHBhcmVudHM9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBpZiBub3QgcGFyZW50czoKKyAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yLm1rZGlyKHNlbGYsIG1vZGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fYWNjZXNzb3IubWtkaXIoc2VsZiwgbW9kZSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBFTk9FTlQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgc2VsZi5wYXJlbnQubWtkaXIocGFyZW50cz1UcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuX2FjY2Vzc29yLm1rZGlyKHNlbGYsIG1vZGUpCisKKyAgICBkZWYgY2htb2Qoc2VsZiwgbW9kZSk6CisgICAgICAgICIiIgorICAgICAgICBDaGFuZ2UgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBwYXRoLCBsaWtlIG9zLmNobW9kKCkuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5jaG1vZChzZWxmLCBtb2RlKQorCisgICAgZGVmIGxjaG1vZChzZWxmLCBtb2RlKToKKyAgICAgICAgIiIiCisgICAgICAgIExpa2UgY2htb2QoKSwgZXhjZXB0IGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWxpbmssIHRoZSBzeW1saW5rJ3MKKyAgICAgICAgcGVybWlzc2lvbnMgYXJlIGNoYW5nZWQsIHJhdGhlciB0aGFuIGl0cyB0YXJnZXQncy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLmxjaG1vZChzZWxmLCBtb2RlKQorCisgICAgZGVmIHVubGluayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSB0aGlzIGZpbGUgb3IgbGluay4KKyAgICAgICAgSWYgdGhlIHBhdGggaXMgYSBkaXJlY3RvcnksIHVzZSBybWRpcigpIGluc3RlYWQuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci51bmxpbmsoc2VsZikKKworICAgIGRlZiBybWRpcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbW92ZSB0aGlzIGRpcmVjdG9yeS4gIFRoZSBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnJtZGlyKHNlbGYpCisKKyAgICBkZWYgbHN0YXQoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMaWtlIHN0YXQoKSwgZXhjZXB0IGlmIHRoZSBwYXRoIHBvaW50cyB0byBhIHN5bWxpbmssIHRoZSBzeW1saW5rJ3MKKyAgICAgICAgc3RhdHVzIGluZm9ybWF0aW9uIGlzIHJldHVybmVkLCByYXRoZXIgdGhhbiBpdHMgdGFyZ2V0J3MuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICByZXR1cm4gc2VsZi5fYWNjZXNzb3IubHN0YXQoc2VsZikKKworICAgIGRlZiByZW5hbWUoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbmFtZSB0aGlzIHBhdGggdG8gdGhlIGdpdmVuIHBhdGguCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLl9jbG9zZWQ6CisgICAgICAgICAgICBzZWxmLl9yYWlzZV9jbG9zZWQoKQorICAgICAgICBzZWxmLl9hY2Nlc3Nvci5yZW5hbWUoc2VsZiwgdGFyZ2V0KQorCisgICAgZGVmIHJlcGxhY2Uoc2VsZiwgdGFyZ2V0KToKKyAgICAgICAgIiIiCisgICAgICAgIFJlbmFtZSB0aGlzIHBhdGggdG8gdGhlIGdpdmVuIHBhdGgsIGNsb2JiZXJpbmcgdGhlIGV4aXN0aW5nCisgICAgICAgIGRlc3RpbmF0aW9uIGlmIGl0IGV4aXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnJlcGxhY2Uoc2VsZiwgdGFyZ2V0KQorCisgICAgZGVmIHN5bWxpbmtfdG8oc2VsZiwgdGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIE1ha2UgdGhpcyBwYXRoIGEgc3ltbGluayBwb2ludGluZyB0byB0aGUgZ2l2ZW4gcGF0aC4KKyAgICAgICAgTm90ZSB0aGUgb3JkZXIgb2YgYXJndW1lbnRzIChzZWxmLCB0YXJnZXQpIGlzIHRoZSByZXZlcnNlIG9mIG9zLnN5bWxpbmsncy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlZDoKKyAgICAgICAgICAgIHNlbGYuX3JhaXNlX2Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2FjY2Vzc29yLnN5bWxpbmsodGFyZ2V0LCBzZWxmLCB0YXJnZXRfaXNfZGlyZWN0b3J5KQorCisgICAgIyBDb252ZW5pZW5jZSBmdW5jdGlvbnMgZm9yIHF1ZXJ5aW5nIHRoZSBzdGF0IHJlc3VsdHMKKworICAgIGRlZiBleGlzdHMoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBleGlzdHMuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnN0YXQoKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS5lcnJubyBub3QgaW4gKEVOT0VOVCwgRU5PVERJUik6CisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGlzX2RpcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgZGlyZWN0b3J5LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNESVIoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gbm90IGluIChFTk9FTlQsIEVOT1RESVIpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2ZpbGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIHJlZ3VsYXIgZmlsZSAoYWxzbyBUcnVlIGZvciBzeW1saW5rcyBwb2ludGluZworICAgICAgICB0byByZWd1bGFyIGZpbGVzKS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBTX0lTUkVHKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoRU5PRU5ULCBFTk9URElSKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBpc19zeW1saW5rKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNMTksoc2VsZi5sc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoRU5PRU5ULCBFTk9URElSKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3QKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2Jsb2NrX2RldmljZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgYmxvY2sgZGV2aWNlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNCTEsoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gbm90IGluIChFTk9FTlQsIEVOT1RESVIpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2NoYXJfZGV2aWNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgV2hldGhlciB0aGlzIHBhdGggaXMgYSBjaGFyYWN0ZXIgZGV2aWNlLgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNDSFIoc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gbm90IGluIChFTk9FTlQsIEVOT1RESVIpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX2ZpZm8oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBXaGV0aGVyIHRoaXMgcGF0aCBpcyBhIEZJRk8uCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gU19JU0ZJRk8oc2VsZi5zdGF0KCkuc3RfbW9kZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmIGUuZXJybm8gbm90IGluIChFTk9FTlQsIEVOT1RESVIpOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAjIFBhdGggZG9lc24ndCBleGlzdCBvciBpcyBhIGJyb2tlbiBzeW1saW5rCisgICAgICAgICAgICAjIChzZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzEyLykKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgZGVmIGlzX3NvY2tldChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFdoZXRoZXIgdGhpcyBwYXRoIGlzIGEgc29ja2V0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmV0dXJuIFNfSVNTT0NLKHNlbGYuc3RhdCgpLnN0X21vZGUpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vIG5vdCBpbiAoRU5PRU5ULCBFTk9URElSKToKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgIyBQYXRoIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgYSBicm9rZW4gc3ltbGluaworICAgICAgICAgICAgIyAoc2VlIGh0dHBzOi8vYml0YnVja2V0Lm9yZy9waXRyb3UvcGF0aGxpYi9pc3N1ZS8xMi8pCisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBQb3NpeFBhdGgoUGF0aCwgUHVyZVBvc2l4UGF0aCk6CisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgV2luZG93c1BhdGgoUGF0aCwgUHVyZVdpbmRvd3NQYXRoKToKKyAgICBfX3Nsb3RzX18gPSAoKQpkaWZmIC0tZ2l0IGEvTGliL3BkYi5weSBiL0xpYi9wZGIucHkKaW5kZXggODBjYmE5ZC4uN2Q1OGMyYSAxMDA3NTUKLS0tIGEvTGliL3BkYi5weQorKysgYi9MaWIvcGRiLnB5CkBAIC05MiwyMSArOTIsMTQgQEAKICAgICBjcmUgPSByZS5jb21waWxlKHInZGVmXHMrJXNccypbKF0nICUgcmUuZXNjYXBlKGZ1bmNuYW1lKSkKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAjIGNvbnN1bWVyIG9mIHRoaXMgaW5mbyBleHBlY3RzIHRoZSBmaXJzdCBsaW5lIHRvIGJlIDEKLSAgICBsaW5lbm8gPSAxCi0gICAgYW5zd2VyID0gTm9uZQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGxpbmUgPSBmcC5yZWFkbGluZSgpCi0gICAgICAgIGlmIGxpbmUgPT0gJyc6Ci0gICAgICAgICAgICBicmVhawotICAgICAgICBpZiBjcmUubWF0Y2gobGluZSk6Ci0gICAgICAgICAgICBhbnN3ZXIgPSBmdW5jbmFtZSwgZmlsZW5hbWUsIGxpbmVubwotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgbGluZW5vICs9IDEKLSAgICBmcC5jbG9zZSgpCi0gICAgcmV0dXJuIGFuc3dlcgorICAgIHdpdGggZnA6CisgICAgICAgIGZvciBsaW5lbm8sIGxpbmUgaW4gZW51bWVyYXRlKGZwLCBzdGFydD0xKToKKyAgICAgICAgICAgIGlmIGNyZS5tYXRjaChsaW5lKToKKyAgICAgICAgICAgICAgICByZXR1cm4gZnVuY25hbWUsIGZpbGVuYW1lLCBsaW5lbm8KKyAgICByZXR1cm4gTm9uZQogCiBkZWYgZ2V0c291cmNlbGluZXMob2JqKToKICAgICBsaW5lcywgbGluZW5vID0gaW5zcGVjdC5maW5kc291cmNlKG9iaikKQEAgLTE3MCwxMiArMTYzLDEyIEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihlbnZIb21lLCAiLnBkYnJjIikpIGFzIHJjRmlsZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzLmV4dGVuZChyY0ZpbGUpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCBvcGVuKCIucGRicmMiKSBhcyByY0ZpbGU6CiAgICAgICAgICAgICAgICAgc2VsZi5yY0xpbmVzLmV4dGVuZChyY0ZpbGUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBzZWxmLmNvbW1hbmRzID0ge30gIyBhc3NvY2lhdGVzIGEgY29tbWFuZCBsaXN0IHRvIGJyZWFrcG9pbnQgbnVtYmVycwpAQCAtMzA0LDggKzI5NywxNiBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190cmFjZWJhY2sgPSBleGNfaW5mbwogICAgICAgICBmcmFtZS5mX2xvY2Fsc1snX19leGNlcHRpb25fXyddID0gZXhjX3R5cGUsIGV4Y192YWx1ZQotICAgICAgICBzZWxmLm1lc3NhZ2UodHJhY2ViYWNrLmZvcm1hdF9leGNlcHRpb25fb25seShleGNfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjX3ZhbHVlKVstMV0uc3RyaXAoKSkKKworICAgICAgICAjIEFuICdJbnRlcm5hbCBTdG9wSXRlcmF0aW9uJyBleGNlcHRpb24gaXMgYW4gZXhjZXB0aW9uIGRlYnVnIGV2ZW50CisgICAgICAgICMgaXNzdWVkIGJ5IHRoZSBpbnRlcnByZXRlciB3aGVuIGhhbmRsaW5nIGEgc3ViZ2VuZXJhdG9yIHJ1biB3aXRoCisgICAgICAgICMgJ3lpZWxkIGZyb20nIG9yIGEgZ2VuZXJhdG9yIGNvbnRyb2xlZCBieSBhIGZvciBsb29wLiBObyBleGNlcHRpb24gaGFzCisgICAgICAgICMgYWN0dWFsbHkgb2NjdXJyZWQgaW4gdGhpcyBjYXNlLiBUaGUgZGVidWdnZXIgdXNlcyB0aGlzIGRlYnVnIGV2ZW50IHRvCisgICAgICAgICMgc3RvcCB3aGVuIHRoZSBkZWJ1Z2dlZSBpcyByZXR1cm5pbmcgZnJvbSBzdWNoIGdlbmVyYXRvcnMuCisgICAgICAgIHByZWZpeCA9ICdJbnRlcm5hbCAnIGlmIChub3QgZXhjX3RyYWNlYmFjaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGV4Y190eXBlIGlzIFN0b3BJdGVyYXRpb24pIGVsc2UgJycKKyAgICAgICAgc2VsZi5tZXNzYWdlKCclcyVzJyAlIChwcmVmaXgsCisgICAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KGV4Y190eXBlLCBleGNfdmFsdWUpWy0xXS5zdHJpcCgpKSkKICAgICAgICAgc2VsZi5pbnRlcmFjdGlvbihmcmFtZSwgZXhjX3RyYWNlYmFjaykKIAogICAgICMgR2VuZXJhbCBpbnRlcmFjdGlvbiBmdW5jdGlvbgpAQCAtNjcyLDcgKzY3Myw3IEBACiAgICAgICAgICAgICAjIG5vdyBzZXQgdGhlIGJyZWFrIHBvaW50CiAgICAgICAgICAgICBlcnIgPSBzZWxmLnNldF9icmVhayhmaWxlbmFtZSwgbGluZSwgdGVtcG9yYXJ5LCBjb25kLCBmdW5jbmFtZSkKICAgICAgICAgICAgIGlmIGVycjoKLSAgICAgICAgICAgICAgICBzZWxmLmVycm9yKGVyciwgZmlsZT1zZWxmLnN0ZG91dCkKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9yKGVycikKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYnAgPSBzZWxmLmdldF9icmVha3MoZmlsZW5hbWUsIGxpbmUpWy0xXQogICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZSgiQnJlYWtwb2ludCAlZCBhdCAlczolZCIgJQpAQCAtMTE2MywxNSArMTE2NCwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIF9yc3RyKCcqKiByYWlzZWQgJXMgKionICUgZXJyKQogCiAgICAgZGVmIGRvX3Aoc2VsZiwgYXJnKToKLSAgICAgICAgIiIicChyaW50KSBleHByZXNzaW9uCisgICAgICAgICIiInAgZXhwcmVzc2lvbgogICAgICAgICBQcmludCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uCiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLm1lc3NhZ2UocmVwcihzZWxmLl9nZXR2YWwoYXJnKSkpCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHBhc3MKLSAgICAjIG1ha2UgInByaW50IiBhbiBhbGlhcyBvZiAicCIgc2luY2UgcHJpbnQgaXNuJ3QgYSBQeXRob24gc3RhdGVtZW50IGFueW1vcmUKLSAgICBkb19wcmludCA9IGRvX3AKIAogICAgIGRlZiBkb19wcChzZWxmLCBhcmcpOgogICAgICAgICAiIiJwcCBleHByZXNzaW9uCkBAIC0xMjQ1LDcgKzEyNDQsNyBAQAogICAgICAgICBicmVha2xpc3QgPSBzZWxmLmdldF9maWxlX2JyZWFrcyhmaWxlbmFtZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbGluZXMsIGxpbmVubyA9IGdldHNvdXJjZWxpbmVzKHNlbGYuY3VyZnJhbWUpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5fcHJpbnRfbGluZXMobGluZXMsIGxpbmVubywgYnJlYWtsaXN0LCBzZWxmLmN1cmZyYW1lKQpAQCAtMTI2MSw3ICsxMjYwLDcgQEAKICAgICAgICAgICAgIHJldHVybgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBsaW5lcywgbGluZW5vID0gZ2V0c291cmNlbGluZXMob2JqKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIFR5cGVFcnJvcikgYXMgZXJyOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFR5cGVFcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgc2VsZi5lcnJvcihlcnIpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5fcHJpbnRfbGluZXMobGluZXMsIGxpbmVubykKQEAgLTEzOTIsNyArMTM5MSw3IEBACiAgICAgICAgIHBsYWNlZCBpbiB0aGUgLnBkYnJjIGZpbGUpOgogCiAgICAgICAgICMgUHJpbnQgaW5zdGFuY2UgdmFyaWFibGVzICh1c2FnZSAicGkgY2xhc3NJbnN0IikKLSAgICAgICAgYWxpYXMgcGkgZm9yIGsgaW4gJTEuX19kaWN0X18ua2V5cygpOiBwcmludCAiJTEuIixrLCI9IiwlMS5fX2RpY3RfX1trXQorICAgICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKQogICAgICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyBpbiBzZWxmCiAgICAgICAgIGFsaWFzIHBzIHBpIHNlbGYKICAgICAgICAgIiIiCkBAIC0xNTUwLDcgKzE1NDksNyBAQAogICAgICAgICAnaGVscCcsICd3aGVyZScsICdkb3duJywgJ3VwJywgJ2JyZWFrJywgJ3RicmVhaycsICdjbGVhcicsICdkaXNhYmxlJywKICAgICAgICAgJ2VuYWJsZScsICdpZ25vcmUnLCAnY29uZGl0aW9uJywgJ2NvbW1hbmRzJywgJ3N0ZXAnLCAnbmV4dCcsICd1bnRpbCcsCiAgICAgICAgICdqdW1wJywgJ3JldHVybicsICdyZXR2YWwnLCAncnVuJywgJ2NvbnRpbnVlJywgJ2xpc3QnLCAnbG9uZ2xpc3QnLAotICAgICAgICAnYXJncycsICdwcmludCcsICdwcCcsICd3aGF0aXMnLCAnc291cmNlJywgJ2Rpc3BsYXknLCAndW5kaXNwbGF5JywKKyAgICAgICAgJ2FyZ3MnLCAncCcsICdwcCcsICd3aGF0aXMnLCAnc291cmNlJywgJ2Rpc3BsYXknLCAndW5kaXNwbGF5JywKICAgICAgICAgJ2ludGVyYWN0JywgJ2FsaWFzJywgJ3VuYWxpYXMnLCAnZGVidWcnLCAncXVpdCcsCiAgICAgXQogCkBAIC0xNjcwLDYgKzE2NjksOSBAQAogICAgICAgICAgICAgIyBJbiBtb3N0IGNhc2VzIFN5c3RlbUV4aXQgZG9lcyBub3Qgd2FycmFudCBhIHBvc3QtbW9ydGVtIHNlc3Npb24uCiAgICAgICAgICAgICBwcmludCgiVGhlIHByb2dyYW0gZXhpdGVkIHZpYSBzeXMuZXhpdCgpLiBFeGl0IHN0YXR1czoiLCBlbmQ9JyAnKQogICAgICAgICAgICAgcHJpbnQoc3lzLmV4Y19pbmZvKClbMV0pCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvcjoKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgc3lzLmV4aXQoMSkKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCiAgICAgICAgICAgICBwcmludCgiVW5jYXVnaHQgZXhjZXB0aW9uLiBFbnRlcmluZyBwb3N0IG1vcnRlbSBkZWJ1Z2dpbmciKQpkaWZmIC0tZ2l0IGEvTGliL3BpY2tsZS5weSBiL0xpYi9waWNrbGUucHkKaW5kZXggMzg2ZmZiYS4uM2IxMzk4NCAxMDA2NDQKLS0tIGEvTGliL3BpY2tsZS5weQorKysgYi9MaWIvcGlja2xlLnB5CkBAIC0yMywxMiArMjMsMTMgQEAKIAogIiIiCiAKLWZyb20gdHlwZXMgaW1wb3J0IEZ1bmN0aW9uVHlwZSwgQnVpbHRpbkZ1bmN0aW9uVHlwZQorZnJvbSB0eXBlcyBpbXBvcnQgRnVuY3Rpb25UeXBlCiBmcm9tIGNvcHlyZWcgaW1wb3J0IGRpc3BhdGNoX3RhYmxlCiBmcm9tIGNvcHlyZWcgaW1wb3J0IF9leHRlbnNpb25fcmVnaXN0cnksIF9pbnZlcnRlZF9yZWdpc3RyeSwgX2V4dGVuc2lvbl9jYWNoZQotaW1wb3J0IG1hcnNoYWwKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBpc2xpY2UKIGltcG9ydCBzeXMKLWltcG9ydCBzdHJ1Y3QKK2Zyb20gc3lzIGltcG9ydCBtYXhzaXplCitmcm9tIHN0cnVjdCBpbXBvcnQgcGFjaywgdW5wYWNrCiBpbXBvcnQgcmUKIGltcG9ydCBpbwogaW1wb3J0IGNvZGVjcwpAQCAtNDEsMjggKzQyLDI0IEBACiBieXRlc190eXBlcyA9IChieXRlcywgYnl0ZWFycmF5KQogCiAjIFRoZXNlIGFyZSBwdXJlbHkgaW5mb3JtYXRpb25hbDsgbm8gY29kZSB1c2VzIHRoZXNlLgotZm9ybWF0X3ZlcnNpb24gPSAiMy4wIiAgICAgICAgICAgICAgICAgICMgRmlsZSBmb3JtYXQgdmVyc2lvbiB3ZSB3cml0ZQorZm9ybWF0X3ZlcnNpb24gPSAiNC4wIiAgICAgICAgICAgICAgICAgICMgRmlsZSBmb3JtYXQgdmVyc2lvbiB3ZSB3cml0ZQogY29tcGF0aWJsZV9mb3JtYXRzID0gWyIxLjAiLCAgICAgICAgICAgICMgT3JpZ2luYWwgcHJvdG9jb2wgMAogICAgICAgICAgICAgICAgICAgICAgICIxLjEiLCAgICAgICAgICAgICMgUHJvdG9jb2wgMCB3aXRoIElOU1QgYWRkZWQKICAgICAgICAgICAgICAgICAgICAgICAiMS4yIiwgICAgICAgICAgICAjIE9yaWdpbmFsIHByb3RvY29sIDEKICAgICAgICAgICAgICAgICAgICAgICAiMS4zIiwgICAgICAgICAgICAjIFByb3RvY29sIDEgd2l0aCBCSU5GTE9BVCBhZGRlZAogICAgICAgICAgICAgICAgICAgICAgICIyLjAiLCAgICAgICAgICAgICMgUHJvdG9jb2wgMgogICAgICAgICAgICAgICAgICAgICAgICIzLjAiLCAgICAgICAgICAgICMgUHJvdG9jb2wgMworICAgICAgICAgICAgICAgICAgICAgICI0LjAiLCAgICAgICAgICAgICMgUHJvdG9jb2wgNAogICAgICAgICAgICAgICAgICAgICAgIF0gICAgICAgICAgICAgICAgICMgT2xkIGZvcm1hdCB2ZXJzaW9ucyB3ZSBjYW4gcmVhZAogCiAjIFRoaXMgaXMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgbnVtYmVyIHdlIGtub3cgaG93IHRvIHJlYWQuCi1ISUdIRVNUX1BST1RPQ09MID0gMworSElHSEVTVF9QUk9UT0NPTCA9IDQKIAogIyBUaGUgcHJvdG9jb2wgd2Ugd3JpdGUgYnkgZGVmYXVsdC4gIE1heSBiZSBsZXNzIHRoYW4gSElHSEVTVF9QUk9UT0NPTC4KICMgV2UgaW50ZW50aW9uYWxseSB3cml0ZSBhIHByb3RvY29sIHRoYXQgUHl0aG9uIDIueCBjYW5ub3QgcmVhZDsKICMgdGhlcmUgYXJlIHRvbyBtYW55IGlzc3VlcyB3aXRoIHRoYXQuCiBERUZBVUxUX1BST1RPQ09MID0gMwogCi0jIFdoeSB1c2Ugc3RydWN0LnBhY2soKSBmb3IgcGlja2xpbmcgYnV0IG1hcnNoYWwubG9hZHMoKSBmb3IKLSMgdW5waWNrbGluZz8gIHN0cnVjdC5wYWNrKCkgaXMgNDAlIGZhc3RlciB0aGFuIG1hcnNoYWwuZHVtcHMoKSwgYnV0Ci0jIG1hcnNoYWwubG9hZHMoKSBpcyB0d2ljZSBhcyBmYXN0IGFzIHN0cnVjdC51bnBhY2soKSEKLW1sb2FkcyA9IG1hcnNoYWwubG9hZHMKLQogY2xhc3MgUGlja2xlRXJyb3IoRXhjZXB0aW9uKToKICAgICAiIiJBIGNvbW1vbiBiYXNlIGNsYXNzIGZvciB0aGUgb3RoZXIgcGlja2xpbmcgZXhjZXB0aW9ucy4iIiIKICAgICBwYXNzCkBAIC0xNjgsNyArMTY1LDE4MyBAQAogQklOQllURVMgICAgICAgPSBiJ0InICAgIyBwdXNoIGJ5dGVzOyBjb3VudGVkIGJpbmFyeSBzdHJpbmcgYXJndW1lbnQKIFNIT1JUX0JJTkJZVEVTID0gYidDJyAgICMgICIgICAgICIgICA7ICAgICIgICAgICAiICAgICAgICIgICAgICAiIDwgMjU2IGJ5dGVzCiAKLV9fYWxsX18uZXh0ZW5kKFt4IGZvciB4IGluIGRpcigpIGlmIHJlLm1hdGNoKCJbQS1aXVtBLVowLTlfXSskIix4KV0pCisjIFByb3RvY29sIDQKK1NIT1JUX0JJTlVOSUNPREUgPSBiJ1x4OGMnICAjIHB1c2ggc2hvcnQgc3RyaW5nOyBVVEYtOCBsZW5ndGggPCAyNTYgYnl0ZXMKK0JJTlVOSUNPREU4ICAgICAgPSBiJ1x4OGQnICAjIHB1c2ggdmVyeSBsb25nIHN0cmluZworQklOQllURVM4ICAgICAgICA9IGInXHg4ZScgICMgcHVzaCB2ZXJ5IGxvbmcgYnl0ZXMgc3RyaW5nCitFTVBUWV9TRVQgICAgICAgID0gYidceDhmJyAgIyBwdXNoIGVtcHR5IHNldCBvbiB0aGUgc3RhY2sKK0FERElURU1TICAgICAgICAgPSBiJ1x4OTAnICAjIG1vZGlmeSBzZXQgYnkgYWRkaW5nIHRvcG1vc3Qgc3RhY2sgaXRlbXMKK0ZST1pFTlNFVCAgICAgICAgPSBiJ1x4OTEnICAjIGJ1aWxkIGZyb3plbnNldCBmcm9tIHRvcG1vc3Qgc3RhY2sgaXRlbXMKK05FV09CSl9FWCAgICAgICAgPSBiJ1x4OTInICAjIGxpa2UgTkVXT0JKIGJ1dCB3b3JrIHdpdGgga2V5d29yZCBvbmx5IGFyZ3VtZW50cworU1RBQ0tfR0xPQkFMICAgICA9IGInXHg5MycgICMgc2FtZSBhcyBHTE9CQUwgYnV0IHVzaW5nIG5hbWVzIG9uIHRoZSBzdGFja3MKK01FTU9JWkUgICAgICAgICAgPSBiJ1x4OTQnICAjIHN0b3JlIHRvcCBvZiB0aGUgc3RhY2sgaW4gbWVtbworRlJBTUUgICAgICAgICAgICA9IGInXHg5NScgICMgaW5kaWNhdGUgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBmcmFtZQorCitfX2FsbF9fLmV4dGVuZChbeCBmb3IgeCBpbiBkaXIoKSBpZiByZS5tYXRjaCgiW0EtWl1bQS1aMC05X10rJCIsIHgpXSkKKworCitjbGFzcyBfRnJhbWVyOgorCisgICAgX0ZSQU1FX1NJWkVfVEFSR0VUID0gNjQgKiAxMDI0CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZV93cml0ZSk6CisgICAgICAgIHNlbGYuZmlsZV93cml0ZSA9IGZpbGVfd3JpdGUKKyAgICAgICAgc2VsZi5jdXJyZW50X2ZyYW1lID0gTm9uZQorCisgICAgZGVmIHN0YXJ0X2ZyYW1pbmcoc2VsZik6CisgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IGlvLkJ5dGVzSU8oKQorCisgICAgZGVmIGVuZF9mcmFtaW5nKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWUgYW5kIHNlbGYuY3VycmVudF9mcmFtZS50ZWxsKCkgPiAwOgorICAgICAgICAgICAgc2VsZi5jb21taXRfZnJhbWUoZm9yY2U9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKworICAgIGRlZiBjb21taXRfZnJhbWUoc2VsZiwgZm9yY2U9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfZnJhbWU6CisgICAgICAgICAgICBmID0gc2VsZi5jdXJyZW50X2ZyYW1lCisgICAgICAgICAgICBpZiBmLnRlbGwoKSA+PSBzZWxmLl9GUkFNRV9TSVpFX1RBUkdFVCBvciBmb3JjZToKKyAgICAgICAgICAgICAgICB3aXRoIGYuZ2V0YnVmZmVyKCkgYXMgZGF0YToKKyAgICAgICAgICAgICAgICAgICAgbiA9IGxlbihkYXRhKQorICAgICAgICAgICAgICAgICAgICB3cml0ZSA9IHNlbGYuZmlsZV93cml0ZQorICAgICAgICAgICAgICAgICAgICB3cml0ZShGUkFNRSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocGFjaygiPFEiLCBuKSkKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoZGF0YSkKKyAgICAgICAgICAgICAgICBmLnNlZWsoMCkKKyAgICAgICAgICAgICAgICBmLnRydW5jYXRlKCkKKworICAgIGRlZiB3cml0ZShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY3VycmVudF9mcmFtZS53cml0ZShkYXRhKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV93cml0ZShkYXRhKQorCisKK2NsYXNzIF9VbmZyYW1lcjoKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlX3JlYWQsIGZpbGVfcmVhZGxpbmUsIGZpbGVfdGVsbD1Ob25lKToKKyAgICAgICAgc2VsZi5maWxlX3JlYWQgPSBmaWxlX3JlYWQKKyAgICAgICAgc2VsZi5maWxlX3JlYWRsaW5lID0gZmlsZV9yZWFkbGluZQorICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisKKyAgICBkZWYgcmVhZChzZWxmLCBuKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuY3VycmVudF9mcmFtZS5yZWFkKG4pCisgICAgICAgICAgICBpZiBub3QgZGF0YSBhbmQgbiAhPSAwOgorICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudF9mcmFtZSA9IE5vbmUKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3JlYWQobikKKyAgICAgICAgICAgIGlmIGxlbihkYXRhKSA8IG46CisgICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKAorICAgICAgICAgICAgICAgICAgICAicGlja2xlIGV4aGF1c3RlZCBiZWZvcmUgZW5kIG9mIGZyYW1lIikKKyAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlX3JlYWQobikKKworICAgIGRlZiByZWFkbGluZShzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2ZyYW1lOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYuY3VycmVudF9mcmFtZS5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBub3QgZGF0YToKKyAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBOb25lCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmlsZV9yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBkYXRhWy0xXSAhPSBiJ1xuJ1swXToKKyAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgZXhoYXVzdGVkIGJlZm9yZSBlbmQgb2YgZnJhbWUiKQorICAgICAgICAgICAgcmV0dXJuIGRhdGEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmZpbGVfcmVhZGxpbmUoKQorCisgICAgZGVmIGxvYWRfZnJhbWUoc2VsZiwgZnJhbWVfc2l6ZSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9mcmFtZSBhbmQgc2VsZi5jdXJyZW50X2ZyYW1lLnJlYWQoKSAhPSBiJyc6CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoCisgICAgICAgICAgICAgICAgImJlZ2lubmluZyBvZiBhIG5ldyBmcmFtZSBiZWZvcmUgZW5kIG9mIGN1cnJlbnQgZnJhbWUiKQorICAgICAgICBzZWxmLmN1cnJlbnRfZnJhbWUgPSBpby5CeXRlc0lPKHNlbGYuZmlsZV9yZWFkKGZyYW1lX3NpemUpKQorCisKKyMgVG9vbHMgdXNlZCBmb3IgcGlja2xpbmcuCisKK2RlZiBfZ2V0YXR0cmlidXRlKG9iaiwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9RmFsc2UpOgorICAgIGRvdHRlZF9wYXRoID0gbmFtZS5zcGxpdCgiLiIpCisgICAgaWYgbm90IGFsbG93X3F1YWxuYW1lIGFuZCBsZW4oZG90dGVkX3BhdGgpID4gMToKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkNhbid0IGdldCBxdWFsaWZpZWQgYXR0cmlidXRlIHshcn0gb24geyFyfTsgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgcHJvdG9jb2xzID49IDQgdG8gZW5hYmxlIHN1cHBvcnQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JtYXQobmFtZSwgb2JqKSkKKyAgICBmb3Igc3VicGF0aCBpbiBkb3R0ZWRfcGF0aDoKKyAgICAgICAgaWYgc3VicGF0aCA9PSAnPGxvY2Fscz4nOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkNhbid0IGdldCBsb2NhbCBhdHRyaWJ1dGUgeyFyfSBvbiB7IXJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lLCBvYmopKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iaiwgc3VicGF0aCkKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoIkNhbid0IGdldCBhdHRyaWJ1dGUgeyFyfSBvbiB7IXJ9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lLCBvYmopKQorICAgIHJldHVybiBvYmoKKworZGVmIHdoaWNobW9kdWxlKG9iaiwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9RmFsc2UpOgorICAgICIiIkZpbmQgdGhlIG1vZHVsZSBhbiBvYmplY3QgYmVsb25nIHRvLiIiIgorICAgIG1vZHVsZV9uYW1lID0gZ2V0YXR0cihvYmosICdfX21vZHVsZV9fJywgTm9uZSkKKyAgICBpZiBtb2R1bGVfbmFtZSBpcyBub3QgTm9uZToKKyAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lCisgICAgIyBQcm90ZWN0IHRoZSBpdGVyYXRpb24gYnkgdXNpbmcgYSBsaXN0IGNvcHkgb2Ygc3lzLm1vZHVsZXMgYWdhaW5zdCBkeW5hbWljCisgICAgIyBtb2R1bGVzIHRoYXQgdHJpZ2dlciBpbXBvcnRzIG9mIG90aGVyIG1vZHVsZXMgdXBvbiBjYWxscyB0byBnZXRhdHRyLgorICAgIGZvciBtb2R1bGVfbmFtZSwgbW9kdWxlIGluIGxpc3Qoc3lzLm1vZHVsZXMuaXRlbXMoKSk6CisgICAgICAgIGlmIG1vZHVsZV9uYW1lID09ICdfX21haW5fXycgb3IgbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBfZ2V0YXR0cmlidXRlKG1vZHVsZSwgbmFtZSwgYWxsb3dfcXVhbG5hbWUpIGlzIG9iajoKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgIHJldHVybiAnX19tYWluX18nCisKK2RlZiBlbmNvZGVfbG9uZyh4KToKKyAgICByIiIiRW5jb2RlIGEgbG9uZyB0byBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgorICAgIE5vdGUgdGhhdCAwIGlzIGEgc3BlY2lhbCBjYXNlLCByZXR1cm5pbmcgYW4gZW1wdHkgc3RyaW5nLCB0byBzYXZlIGEKKyAgICBieXRlIGluIHRoZSBMT05HMSBwaWNrbGluZyBjb250ZXh0LgorCisgICAgPj4+IGVuY29kZV9sb25nKDApCisgICAgYicnCisgICAgPj4+IGVuY29kZV9sb25nKDI1NSkKKyAgICBiJ1x4ZmZceDAwJworICAgID4+PiBlbmNvZGVfbG9uZygzMjc2NykKKyAgICBiJ1x4ZmZceDdmJworICAgID4+PiBlbmNvZGVfbG9uZygtMjU2KQorICAgIGInXHgwMFx4ZmYnCisgICAgPj4+IGVuY29kZV9sb25nKC0zMjc2OCkKKyAgICBiJ1x4MDBceDgwJworICAgID4+PiBlbmNvZGVfbG9uZygtMTI4KQorICAgIGInXHg4MCcKKyAgICA+Pj4gZW5jb2RlX2xvbmcoMTI3KQorICAgIGInXHg3ZicKKyAgICA+Pj4KKyAgICAiIiIKKyAgICBpZiB4ID09IDA6CisgICAgICAgIHJldHVybiBiJycKKyAgICBuYnl0ZXMgPSAoeC5iaXRfbGVuZ3RoKCkgPj4gMykgKyAxCisgICAgcmVzdWx0ID0geC50b19ieXRlcyhuYnl0ZXMsIGJ5dGVvcmRlcj0nbGl0dGxlJywgc2lnbmVkPVRydWUpCisgICAgaWYgeCA8IDAgYW5kIG5ieXRlcyA+IDE6CisgICAgICAgIGlmIHJlc3VsdFstMV0gPT0gMHhmZiBhbmQgKHJlc3VsdFstMl0gJiAweDgwKSAhPSAwOgorICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0WzotMV0KKyAgICByZXR1cm4gcmVzdWx0CisKK2RlZiBkZWNvZGVfbG9uZyhkYXRhKToKKyAgICByIiIiRGVjb2RlIGEgbG9uZyBmcm9tIGEgdHdvJ3MgY29tcGxlbWVudCBsaXR0bGUtZW5kaWFuIGJpbmFyeSBzdHJpbmcuCisKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYicnKQorICAgIDAKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceGZmXHgwMCIpCisgICAgMjU1CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4N2YiKQorICAgIDMyNzY3CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ZmYiKQorICAgIC0yNTYKKyAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDAwXHg4MCIpCisgICAgLTMyNzY4CisgICAgPj4+IGRlY29kZV9sb25nKGIiXHg4MCIpCisgICAgLTEyOAorICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4N2YiKQorICAgIDEyNworICAgICIiIgorICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhkYXRhLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQorCiAKICMgUGlja2xpbmcgbWFjaGluZXJ5CiAKQEAgLTE3NywyNCArMzUwLDI1IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpOgogICAgICAgICAiIiJUaGlzIHRha2VzIGEgYmluYXJ5IGZpbGUgZm9yIHdyaXRpbmcgYSBwaWNrbGUgZGF0YSBzdHJlYW0uCiAKLSAgICAgICAgVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUKLSAgICAgICAgZ2l2ZW4gcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdAotICAgICAgICBwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IKLSAgICAgICAgUHl0aG9uIDMuMC4KKyAgICAgICAgVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZQorICAgICAgICBnaXZlbiBwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZQorICAgICAgICBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkCisgICAgICAgIGZvciBQeXRob24gMy4KIAogICAgICAgICBTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0CiAgICAgICAgIHByb3RvY29sIHZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlCiAgICAgICAgIG1vcmUgcmVjZW50IHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlCiAgICAgICAgIHByb2R1Y2VkLgogCi0gICAgICAgIFRoZSBmaWxlIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZQotICAgICAgICBieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeQotICAgICAgICB3cml0aW5nLCBhIGlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQKLSAgICAgICAgbWVldHMgdGhpcyBpbnRlcmZhY2UuCisgICAgICAgIFRoZSAqZmlsZSogYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEKKyAgICAgICAgc2luZ2xlIGJ5dGVzIGFyZ3VtZW50LiBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IKKyAgICAgICAgYmluYXJ5IHdyaXRpbmcsIGFuIGlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20KKyAgICAgICAgb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKLSAgICAgICAgSWYgZml4X2ltcG9ydHMgaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0bwotICAgICAgICBtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uCi0gICAgICAgIDIueCwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC4KKyAgICAgICAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUKKyAgICAgICAgd2lsbCB0cnkgdG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMKKyAgICAgICAgdXNlZCBpbiBQeXRob24gMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlCisgICAgICAgIHdpdGggUHl0aG9uIDIuCiAgICAgICAgICIiIgogICAgICAgICBpZiBwcm90b2NvbCBpcyBOb25lOgogICAgICAgICAgICAgcHJvdG9jb2wgPSBERUZBVUxUX1BST1RPQ09MCkBAIC0yMDMsOSArMzc3LDExIEBACiAgICAgICAgIGVsaWYgbm90IDAgPD0gcHJvdG9jb2wgPD0gSElHSEVTVF9QUk9UT0NPTDoKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBpY2tsZSBwcm90b2NvbCBtdXN0IGJlIDw9ICVkIiAlIEhJR0hFU1RfUFJPVE9DT0wpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYud3JpdGUgPSBmaWxlLndyaXRlCisgICAgICAgICAgICBzZWxmLl9maWxlX3dyaXRlID0gZmlsZS53cml0ZQogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImZpbGUgbXVzdCBoYXZlIGEgJ3dyaXRlJyBhdHRyaWJ1dGUiKQorICAgICAgICBzZWxmLmZyYW1lciA9IF9GcmFtZXIoc2VsZi5fZmlsZV93cml0ZSkKKyAgICAgICAgc2VsZi53cml0ZSA9IHNlbGYuZnJhbWVyLndyaXRlCiAgICAgICAgIHNlbGYubWVtbyA9IHt9CiAgICAgICAgIHNlbGYucHJvdG8gPSBpbnQocHJvdG9jb2wpCiAgICAgICAgIHNlbGYuYmluID0gcHJvdG9jb2wgPj0gMQpAQCAtMjE2LDEwICszOTIsOSBAQAogICAgICAgICAiIiJDbGVhcnMgdGhlIHBpY2tsZXIncyAibWVtbyIuCiAKICAgICAgICAgVGhlIG1lbW8gaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIHdoaWNoIG9iamVjdHMgdGhlCi0gICAgICAgIHBpY2tsZXIgaGFzIGFscmVhZHkgc2Vlbiwgc28gdGhhdCBzaGFyZWQgb3IgcmVjdXJzaXZlIG9iamVjdHMgYXJlCi0gICAgICAgIHBpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlbgotICAgICAgICByZS11c2luZyBwaWNrbGVycy4KLQorICAgICAgICBwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzCisgICAgICAgIGFyZSBwaWNrbGVkIGJ5IHJlZmVyZW5jZSBhbmQgbm90IGJ5IHZhbHVlLiAgVGhpcyBtZXRob2QgaXMKKyAgICAgICAgdXNlZnVsIHdoZW4gcmUtdXNpbmcgcGlja2xlcnMuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLm1lbW8uY2xlYXIoKQogCkBAIC0yMjcsMTMgKzQwMiwxNiBAQAogICAgICAgICAiIiJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUuIiIiCiAgICAgICAgICMgQ2hlY2sgd2hldGhlciBQaWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRoaXMgaXMKICAgICAgICAgIyBvbmx5IG5lZWRlZCB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgX3BpY2tsZS5QaWNrbGVyLmR1bXAoKS4KLSAgICAgICAgaWYgbm90IGhhc2F0dHIoc2VsZiwgIndyaXRlIik6CisgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICJfZmlsZV93cml0ZSIpOgogICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiUGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLl9faW5pdF9fKCkiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCkpCiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKLSAgICAgICAgICAgIHNlbGYud3JpdGUoUFJPVE8gKyBieXRlcyhbc2VsZi5wcm90b10pKQorICAgICAgICAgICAgc2VsZi53cml0ZShQUk9UTyArIHBhY2soIjxCIiwgc2VsZi5wcm90bykpCisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHNlbGYuZnJhbWVyLnN0YXJ0X2ZyYW1pbmcoKQogICAgICAgICBzZWxmLnNhdmUob2JqKQogICAgICAgICBzZWxmLndyaXRlKFNUT1ApCisgICAgICAgIHNlbGYuZnJhbWVyLmVuZF9mcmFtaW5nKCkKIAogICAgIGRlZiBtZW1vaXplKHNlbGYsIG9iaik6CiAgICAgICAgICIiIlN0b3JlIGFuIG9iamVjdCBpbiB0aGUgbWVtby4iIiIKQEAgLTI1MywzMSArNDMxLDM1IEBACiAgICAgICAgIGlmIHNlbGYuZmFzdDoKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBhc3NlcnQgaWQob2JqKSBub3QgaW4gc2VsZi5tZW1vCi0gICAgICAgIG1lbW9fbGVuID0gbGVuKHNlbGYubWVtbykKLSAgICAgICAgc2VsZi53cml0ZShzZWxmLnB1dChtZW1vX2xlbikpCi0gICAgICAgIHNlbGYubWVtb1tpZChvYmopXSA9IG1lbW9fbGVuLCBvYmoKKyAgICAgICAgaWR4ID0gbGVuKHNlbGYubWVtbykKKyAgICAgICAgc2VsZi53cml0ZShzZWxmLnB1dChpZHgpKQorICAgICAgICBzZWxmLm1lbW9baWQob2JqKV0gPSBpZHgsIG9iagogCiAgICAgIyBSZXR1cm4gYSBQVVQgKEJJTlBVVCwgTE9OR19CSU5QVVQpIG9wY29kZSBzdHJpbmcsIHdpdGggYXJndW1lbnQgaS4KLSAgICBkZWYgcHV0KHNlbGYsIGksIHBhY2s9c3RydWN0LnBhY2spOgotICAgICAgICBpZiBzZWxmLmJpbjoKLSAgICAgICAgICAgIGlmIGkgPCAyNTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJJTlBVVCArIGJ5dGVzKFtpXSkKKyAgICBkZWYgcHV0KHNlbGYsIGlkeCk6CisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHJldHVybiBNRU1PSVpFCisgICAgICAgIGVsaWYgc2VsZi5iaW46CisgICAgICAgICAgICBpZiBpZHggPCAyNTY6CisgICAgICAgICAgICAgICAgcmV0dXJuIEJJTlBVVCArIHBhY2soIjxCIiwgaWR4KQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZXR1cm4gTE9OR19CSU5QVVQgKyBwYWNrKCI8SSIsIGkpCi0KLSAgICAgICAgcmV0dXJuIFBVVCArIHJlcHIoaSkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicKKyAgICAgICAgICAgICAgICByZXR1cm4gTE9OR19CSU5QVVQgKyBwYWNrKCI8SSIsIGlkeCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBQVVQgKyByZXByKGlkeCkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicKIAogICAgICMgUmV0dXJuIGEgR0VUIChCSU5HRVQsIExPTkdfQklOR0VUKSBvcGNvZGUgc3RyaW5nLCB3aXRoIGFyZ3VtZW50IGkuCi0gICAgZGVmIGdldChzZWxmLCBpLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgZ2V0KHNlbGYsIGkpOgogICAgICAgICBpZiBzZWxmLmJpbjoKICAgICAgICAgICAgIGlmIGkgPCAyNTY6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEJJTkdFVCArIGJ5dGVzKFtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQklOR0VUICsgcGFjaygiPEIiLCBpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByZXR1cm4gTE9OR19CSU5HRVQgKyBwYWNrKCI8SSIsIGkpCiAKICAgICAgICAgcmV0dXJuIEdFVCArIHJlcHIoaSkuZW5jb2RlKCJhc2NpaSIpICsgYidcbicKIAogICAgIGRlZiBzYXZlKHNlbGYsIG9iaiwgc2F2ZV9wZXJzaXN0ZW50X2lkPVRydWUpOgorICAgICAgICBzZWxmLmZyYW1lci5jb21taXRfZnJhbWUoKQorCiAgICAgICAgICMgQ2hlY2sgZm9yIHBlcnNpc3RlbnQgaWQgKGRlZmluZWQgYnkgYSBzdWJjbGFzcykKICAgICAgICAgcGlkID0gc2VsZi5wZXJzaXN0ZW50X2lkKG9iaikKICAgICAgICAgaWYgcGlkIGlzIG5vdCBOb25lIGFuZCBzYXZlX3BlcnNpc3RlbnRfaWQ6CkBAIC0yODYsMjAgKzQ2OCwyMCBAQAogCiAgICAgICAgICMgQ2hlY2sgdGhlIG1lbW8KICAgICAgICAgeCA9IHNlbGYubWVtby5nZXQoaWQob2JqKSkKLSAgICAgICAgaWYgeDoKKyAgICAgICAgaWYgeCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNlbGYud3JpdGUoc2VsZi5nZXQoeFswXSkpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIENoZWNrIHRoZSB0eXBlIGRpc3BhdGNoIHRhYmxlCiAgICAgICAgIHQgPSB0eXBlKG9iaikKICAgICAgICAgZiA9IHNlbGYuZGlzcGF0Y2guZ2V0KHQpCi0gICAgICAgIGlmIGY6CisgICAgICAgIGlmIGYgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBmKHNlbGYsIG9iaikgIyBDYWxsIHVuYm91bmQgbWV0aG9kIHdpdGggZXhwbGljaXQgc2VsZgogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBDaGVjayBwcml2YXRlIGRpc3BhdGNoIHRhYmxlIGlmIGFueSwgb3IgZWxzZSBjb3B5cmVnLmRpc3BhdGNoX3RhYmxlCiAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIoc2VsZiwgJ2Rpc3BhdGNoX3RhYmxlJywgZGlzcGF0Y2hfdGFibGUpLmdldCh0KQotICAgICAgICBpZiByZWR1Y2U6CisgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKG9iaikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgY2xhc3Mgd2l0aCBhIGN1c3RvbSBtZXRhY2xhc3M7IHRyZWF0IGFzIHJlZ3VsYXIgY2xhc3MKQEAgLTMxMywxMSArNDk1LDExIEBACiAKICAgICAgICAgICAgICMgQ2hlY2sgZm9yIGEgX19yZWR1Y2VfZXhfXyBtZXRob2QsIGZhbGwgYmFjayB0byBfX3JlZHVjZV9fCiAgICAgICAgICAgICByZWR1Y2UgPSBnZXRhdHRyKG9iaiwgIl9fcmVkdWNlX2V4X18iLCBOb25lKQotICAgICAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICAgICAgaWYgcmVkdWNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHJ2ID0gcmVkdWNlKHNlbGYucHJvdG8pCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJlZHVjZSA9IGdldGF0dHIob2JqLCAiX19yZWR1Y2VfXyIsIE5vbmUpCi0gICAgICAgICAgICAgICAgaWYgcmVkdWNlOgorICAgICAgICAgICAgICAgIGlmIHJlZHVjZSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgcnYgPSByZWR1Y2UoKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoIkNhbid0IHBpY2tsZSAlciBvYmplY3Q6ICVyIiAlCkBAIC0zNTMsMjQgKzUzNSwzMyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi53cml0ZShQRVJTSUQgKyBzdHIocGlkKS5lbmNvZGUoImFzY2lpIikgKyBiJ1xuJykKIAotICAgIGRlZiBzYXZlX3JlZHVjZShzZWxmLCBmdW5jLCBhcmdzLCBzdGF0ZT1Ob25lLAotICAgICAgICAgICAgICAgICAgICBsaXN0aXRlbXM9Tm9uZSwgZGljdGl0ZW1zPU5vbmUsIG9iaj1Ob25lKToKKyAgICBkZWYgc2F2ZV9yZWR1Y2Uoc2VsZiwgZnVuYywgYXJncywgc3RhdGU9Tm9uZSwgbGlzdGl0ZW1zPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIGRpY3RpdGVtcz1Ob25lLCBvYmo9Tm9uZSk6CiAgICAgICAgICMgVGhpcyBBUEkgaXMgY2FsbGVkIGJ5IHNvbWUgc3ViY2xhc3NlcwogCi0gICAgICAgICMgQXNzZXJ0IHRoYXQgYXJncyBpcyBhIHR1cGxlCiAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFyZ3MsIHR1cGxlKToKLSAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3MgZnJvbSBzYXZlX3JlZHVjZSgpIHNob3VsZCBiZSBhIHR1cGxlIikKLQotICAgICAgICAjIEFzc2VydCB0aGF0IGZ1bmMgaXMgY2FsbGFibGUKKyAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImFyZ3MgZnJvbSBzYXZlX3JlZHVjZSgpIG11c3QgYmUgYSB0dXBsZSIpCiAgICAgICAgIGlmIG5vdCBjYWxsYWJsZShmdW5jKToKLSAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoImZ1bmMgZnJvbSBzYXZlX3JlZHVjZSgpIHNob3VsZCBiZSBjYWxsYWJsZSIpCisgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJmdW5jIGZyb20gc2F2ZV9yZWR1Y2UoKSBtdXN0IGJlIGNhbGxhYmxlIikKIAogICAgICAgICBzYXZlID0gc2VsZi5zYXZlCiAgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQogCi0gICAgICAgICMgUHJvdG9jb2wgMiBzcGVjaWFsIGNhc2U6IGlmIGZ1bmMncyBuYW1lIGlzIF9fbmV3b2JqX18sIHVzZSBORVdPQkoKLSAgICAgICAgaWYgc2VsZi5wcm90byA+PSAyIGFuZCBnZXRhdHRyKGZ1bmMsICJfX25hbWVfXyIsICIiKSA9PSAiX19uZXdvYmpfXyI6Ci0gICAgICAgICAgICAjIEEgX19yZWR1Y2VfXyBpbXBsZW1lbnRhdGlvbiBjYW4gZGlyZWN0IHByb3RvY29sIDIgdG8KKyAgICAgICAgZnVuY19uYW1lID0gZ2V0YXR0cihmdW5jLCAiX19uYW1lX18iLCAiIikKKyAgICAgICAgaWYgc2VsZi5wcm90byA+PSA0IGFuZCBmdW5jX25hbWUgPT0gIl9fbmV3b2JqX2V4X18iOgorICAgICAgICAgICAgY2xzLCBhcmdzLCBrd2FyZ3MgPSBhcmdzCisgICAgICAgICAgICBpZiBub3QgaGFzYXR0cihjbHMsICJfX25ld19fIik6CisgICAgICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigiYXJnc1swXSBmcm9tIHt9IGFyZ3MgaGFzIG5vIF9fbmV3X18iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZ1bmNfbmFtZSkpCisgICAgICAgICAgICBpZiBvYmogaXMgbm90IE5vbmUgYW5kIGNscyBpcyBub3Qgb2JqLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKCJhcmdzWzBdIGZyb20ge30gYXJncyBoYXMgdGhlIHdyb25nIGNsYXNzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChmdW5jX25hbWUpKQorICAgICAgICAgICAgc2F2ZShjbHMpCisgICAgICAgICAgICBzYXZlKGFyZ3MpCisgICAgICAgICAgICBzYXZlKGt3YXJncykKKyAgICAgICAgICAgIHdyaXRlKE5FV09CSl9FWCkKKyAgICAgICAgZWxpZiBzZWxmLnByb3RvID49IDIgYW5kIGZ1bmNfbmFtZSA9PSAiX19uZXdvYmpfXyI6CisgICAgICAgICAgICAjIEEgX19yZWR1Y2VfXyBpbXBsZW1lbnRhdGlvbiBjYW4gZGlyZWN0IHByb3RvY29sIDIgb3IgbmV3ZXIgdG8KICAgICAgICAgICAgICMgdXNlIHRoZSBtb3JlIGVmZmljaWVudCBORVdPQkogb3Bjb2RlLCB3aGlsZSBzdGlsbAogICAgICAgICAgICAgIyBhbGxvd2luZyBwcm90b2NvbCAwIGFuZCAxIHRvIHdvcmsgbm9ybWFsbHkuICBGb3IgdGhpcyB0bwogICAgICAgICAgICAgIyB3b3JrLCB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBzaG91bGQgYmUKQEAgLTQxMyw3ICs2MDQsMTMgQEAKICAgICAgICAgICAgIHdyaXRlKFJFRFVDRSkKIAogICAgICAgICBpZiBvYmogaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQorICAgICAgICAgICAgIyBJZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1lbW8sIHRoaXMgbWVhbnMgaXQgaXMKKyAgICAgICAgICAgICMgcmVjdXJzaXZlLiBJbiB0aGlzIGNhc2UsIHRocm93IGF3YXkgZXZlcnl0aGluZyB3ZSBwdXQgb24gdGhlCisgICAgICAgICAgICAjIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uCisgICAgICAgICAgICBpZiBpZChvYmopIGluIHNlbGYubWVtbzoKKyAgICAgICAgICAgICAgICB3cml0ZShQT1AgKyBzZWxmLmdldChzZWxmLm1lbW9baWQob2JqKV1bMF0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogCiAgICAgICAgICMgTW9yZSBuZXcgc3BlY2lhbCBjYXNlcyAodGhhdCB3b3JrIHdpdGggb2xkZXIgcHJvdG9jb2xzIGFzCiAgICAgICAgICMgd2VsbCk6IHdoZW4gX19yZWR1Y2VfXyByZXR1cm5zIGEgdHVwbGUgd2l0aCA0IG9yIDUgaXRlbXMsCkBAIC00MzgsMjIgKzYzNSwxNCBAQAogICAgICAgICBzZWxmLndyaXRlKE5PTkUpCiAgICAgZGlzcGF0Y2hbdHlwZShOb25lKV0gPSBzYXZlX25vbmUKIAotICAgIGRlZiBzYXZlX2VsbGlwc2lzKHNlbGYsIG9iaik6Ci0gICAgICAgIHNlbGYuc2F2ZV9nbG9iYWwoRWxsaXBzaXMsICdFbGxpcHNpcycpCi0gICAgZGlzcGF0Y2hbdHlwZShFbGxpcHNpcyldID0gc2F2ZV9lbGxpcHNpcwotCi0gICAgZGVmIHNhdmVfbm90aW1wbGVtZW50ZWQoc2VsZiwgb2JqKToKLSAgICAgICAgc2VsZi5zYXZlX2dsb2JhbChOb3RJbXBsZW1lbnRlZCwgJ05vdEltcGxlbWVudGVkJykKLSAgICBkaXNwYXRjaFt0eXBlKE5vdEltcGxlbWVudGVkKV0gPSBzYXZlX25vdGltcGxlbWVudGVkCi0KICAgICBkZWYgc2F2ZV9ib29sKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKLSAgICAgICAgICAgIHNlbGYud3JpdGUob2JqIGFuZCBORVdUUlVFIG9yIE5FV0ZBTFNFKQorICAgICAgICAgICAgc2VsZi53cml0ZShORVdUUlVFIGlmIG9iaiBlbHNlIE5FV0ZBTFNFKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi53cml0ZShvYmogYW5kIFRSVUUgb3IgRkFMU0UpCisgICAgICAgICAgICBzZWxmLndyaXRlKFRSVUUgaWYgb2JqIGVsc2UgRkFMU0UpCiAgICAgZGlzcGF0Y2hbYm9vbF0gPSBzYXZlX2Jvb2wKIAotICAgIGRlZiBzYXZlX2xvbmcoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9sb25nKHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgIyBJZiB0aGUgaW50IGlzIHNtYWxsIGVub3VnaCB0byBmaXQgaW4gYSBzaWduZWQgNC1ieXRlIDIncy1jb21wCiAgICAgICAgICAgICAjIGZvcm1hdCwgd2UgY2FuIHN0b3JlIGl0IG1vcmUgZWZmaWNpZW50bHkgdGhhbiB0aGUgZ2VuZXJhbApAQCAtNDYxLDkzICs2NTAsOTUgQEAKICAgICAgICAgICAgICMgRmlyc3Qgb25lLSBhbmQgdHdvLWJ5dGUgdW5zaWduZWQgaW50czoKICAgICAgICAgICAgIGlmIG9iaiA+PSAwOgogICAgICAgICAgICAgICAgIGlmIG9iaiA8PSAweGZmOgotICAgICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKEJJTklOVDEgKyBieXRlcyhbb2JqXSkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UMSArIHBhY2soIjxCIiwgb2JqKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICAgICAgaWYgb2JqIDw9IDB4ZmZmZjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQyICsgYnl0ZXMoW29iaiYweGZmLCBvYmo+PjhdKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5JTlQyICsgcGFjaygiPEgiLCBvYmopKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICMgTmV4dCBjaGVjayBmb3IgNC1ieXRlIHNpZ25lZCBpbnRzOgotICAgICAgICAgICAgaGlnaF9iaXRzID0gb2JqID4+IDMxICAjIG5vdGUgdGhhdCBQeXRob24gc2hpZnQgc2lnbi1leHRlbmRzCi0gICAgICAgICAgICBpZiBoaWdoX2JpdHMgPT0gMCBvciBoaWdoX2JpdHMgPT0gLTE6Ci0gICAgICAgICAgICAgICAgIyBBbGwgaGlnaCBiaXRzIGFyZSBjb3BpZXMgb2YgYml0IDIqKjMxLCBzbyB0aGUgdmFsdWUKLSAgICAgICAgICAgICAgICAjIGZpdHMgaW4gYSA0LWJ5dGUgc2lnbmVkIGludC4KKyAgICAgICAgICAgIGlmIC0weDgwMDAwMDAwIDw9IG9iaiA8PSAweDdmZmZmZmZmOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOSU5UICsgcGFjaygiPGkiLCBvYmopKQogICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnByb3RvID49IDI6CiAgICAgICAgICAgICBlbmNvZGVkID0gZW5jb2RlX2xvbmcob2JqKQogICAgICAgICAgICAgbiA9IGxlbihlbmNvZGVkKQogICAgICAgICAgICAgaWYgbiA8IDI1NjoKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKExPTkcxICsgYnl0ZXMoW25dKSArIGVuY29kZWQpCisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShMT05HMSArIHBhY2soIjxCIiwgbikgKyBlbmNvZGVkKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKExPTkc0ICsgcGFjaygiPGkiLCBuKSArIGVuY29kZWQpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi53cml0ZShMT05HICsgcmVwcihvYmopLmVuY29kZSgiYXNjaWkiKSArIGInTFxuJykKICAgICBkaXNwYXRjaFtpbnRdID0gc2F2ZV9sb25nCiAKLSAgICBkZWYgc2F2ZV9mbG9hdChzZWxmLCBvYmosIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX2Zsb2F0KHNlbGYsIG9iaik6CiAgICAgICAgIGlmIHNlbGYuYmluOgogICAgICAgICAgICAgc2VsZi53cml0ZShCSU5GTE9BVCArIHBhY2soJz5kJywgb2JqKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYud3JpdGUoRkxPQVQgKyByZXByKG9iaikuZW5jb2RlKCJhc2NpaSIpICsgYidcbicpCiAgICAgZGlzcGF0Y2hbZmxvYXRdID0gc2F2ZV9mbG9hdAogCi0gICAgZGVmIHNhdmVfYnl0ZXMoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9ieXRlcyhzZWxmLCBvYmopOgogICAgICAgICBpZiBzZWxmLnByb3RvIDwgMzoKLSAgICAgICAgICAgIGlmIGxlbihvYmopID09IDA6CisgICAgICAgICAgICBpZiBub3Qgb2JqOiAjIGJ5dGVzIG9iamVjdCBpcyBlbXB0eQogICAgICAgICAgICAgICAgIHNlbGYuc2F2ZV9yZWR1Y2UoYnl0ZXMsICgpLCBvYmo9b2JqKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKGNvZGVjcy5lbmNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyKG9iaiwgJ2xhdGluMScpLCAnbGF0aW4xJyksIG9iaj1vYmopCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgbiA9IGxlbihvYmopCi0gICAgICAgIGlmIG4gPCAyNTY6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKFNIT1JUX0JJTkJZVEVTICsgYnl0ZXMoW25dKSArIGJ5dGVzKG9iaikpCisgICAgICAgIGlmIG4gPD0gMHhmZjoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOQllURVMgKyBwYWNrKCI8QiIsIG4pICsgb2JqKQorICAgICAgICBlbGlmIG4gPiAweGZmZmZmZmZmIGFuZCBzZWxmLnByb3RvID49IDQ6CisgICAgICAgICAgICBzZWxmLndyaXRlKEJJTkJZVEVTOCArIHBhY2soIjxRIiwgbikgKyBvYmopCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLndyaXRlKEJJTkJZVEVTICsgcGFjaygiPEkiLCBuKSArIGJ5dGVzKG9iaikpCisgICAgICAgICAgICBzZWxmLndyaXRlKEJJTkJZVEVTICsgcGFjaygiPEkiLCBuKSArIG9iaikKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICBkaXNwYXRjaFtieXRlc10gPSBzYXZlX2J5dGVzCiAKLSAgICBkZWYgc2F2ZV9zdHIoc2VsZiwgb2JqLCBwYWNrPXN0cnVjdC5wYWNrKToKKyAgICBkZWYgc2F2ZV9zdHIoc2VsZiwgb2JqKToKICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICBlbmNvZGVkID0gb2JqLmVuY29kZSgndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpCiAgICAgICAgICAgICBuID0gbGVuKGVuY29kZWQpCi0gICAgICAgICAgICBzZWxmLndyaXRlKEJJTlVOSUNPREUgKyBwYWNrKCI8SSIsIG4pICsgZW5jb2RlZCkKKyAgICAgICAgICAgIGlmIG4gPD0gMHhmZiBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoU0hPUlRfQklOVU5JQ09ERSArIHBhY2soIjxCIiwgbikgKyBlbmNvZGVkKQorICAgICAgICAgICAgZWxpZiBuID4gMHhmZmZmZmZmZiBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoQklOVU5JQ09ERTggKyBwYWNrKCI8USIsIG4pICsgZW5jb2RlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZShCSU5VTklDT0RFICsgcGFjaygiPEkiLCBuKSArIGVuY29kZWQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZSgiXFwiLCAiXFx1MDA1YyIpCiAgICAgICAgICAgICBvYmogPSBvYmoucmVwbGFjZSgiXG4iLCAiXFx1MDAwYSIpCi0gICAgICAgICAgICBzZWxmLndyaXRlKFVOSUNPREUgKyBieXRlcyhvYmouZW5jb2RlKCdyYXctdW5pY29kZS1lc2NhcGUnKSkgKworICAgICAgICAgICAgc2VsZi53cml0ZShVTklDT0RFICsgb2JqLmVuY29kZSgncmF3LXVuaWNvZGUtZXNjYXBlJykgKwogICAgICAgICAgICAgICAgICAgICAgICBiJ1xuJykKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICBkaXNwYXRjaFtzdHJdID0gc2F2ZV9zdHIKIAogICAgIGRlZiBzYXZlX3R1cGxlKHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotICAgICAgICBwcm90byA9IHNlbGYucHJvdG8KLQotICAgICAgICBuID0gbGVuKG9iaikKLSAgICAgICAgaWYgbiA9PSAwOgotICAgICAgICAgICAgaWYgcHJvdG86Ci0gICAgICAgICAgICAgICAgd3JpdGUoRU1QVFlfVFVQTEUpCisgICAgICAgIGlmIG5vdCBvYmo6ICMgdHVwbGUgaXMgZW1wdHkKKyAgICAgICAgICAgIGlmIHNlbGYuYmluOgorICAgICAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfVFVQTEUpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdyaXRlKE1BUksgKyBUVVBMRSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKE1BUksgKyBUVVBMRSkKICAgICAgICAgICAgIHJldHVybgogCisgICAgICAgIG4gPSBsZW4ob2JqKQogICAgICAgICBzYXZlID0gc2VsZi5zYXZlCiAgICAgICAgIG1lbW8gPSBzZWxmLm1lbW8KLSAgICAgICAgaWYgbiA8PSAzIGFuZCBwcm90byA+PSAyOgorICAgICAgICBpZiBuIDw9IDMgYW5kIHNlbGYucHJvdG8gPj0gMjoKICAgICAgICAgICAgIGZvciBlbGVtZW50IGluIG9iajoKICAgICAgICAgICAgICAgICBzYXZlKGVsZW1lbnQpCiAgICAgICAgICAgICAjIFN1YnRsZS4gIFNhbWUgYXMgaW4gdGhlIGJpZyBjb21tZW50IGJlbG93LgogICAgICAgICAgICAgaWYgaWQob2JqKSBpbiBtZW1vOgogICAgICAgICAgICAgICAgIGdldCA9IHNlbGYuZ2V0KG1lbW9baWQob2JqKV1bMF0pCi0gICAgICAgICAgICAgICAgd3JpdGUoUE9QICogbiArIGdldCkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKFBPUCAqIG4gKyBnZXQpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHdyaXRlKF90dXBsZXNpemUyY29kZVtuXSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKF90dXBsZXNpemUyY29kZVtuXSkKICAgICAgICAgICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICAgICAgcmV0dXJuCiAKICAgICAgICAgIyBwcm90byAwIG9yIHByb3RvIDEgYW5kIHR1cGxlIGlzbid0IGVtcHR5LCBvciBwcm90byA+IDEgYW5kIHR1cGxlCiAgICAgICAgICMgaGFzIG1vcmUgdGhhbiAzIGVsZW1lbnRzLgorICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKICAgICAgICAgd3JpdGUoTUFSSykKICAgICAgICAgZm9yIGVsZW1lbnQgaW4gb2JqOgogICAgICAgICAgICAgc2F2ZShlbGVtZW50KQpAQCAtNTYxLDI1ICs3NTIsMjMgQEAKICAgICAgICAgICAgICMgY291bGQgaGF2ZSBiZWVuIGRvbmUgaW4gdGhlICJmb3IgZWxlbWVudCIgbG9vcCBpbnN0ZWFkLCBidXQKICAgICAgICAgICAgICMgcmVjdXJzaXZlIHR1cGxlcyBhcmUgYSByYXJlIHRoaW5nLgogICAgICAgICAgICAgZ2V0ID0gc2VsZi5nZXQobWVtb1tpZChvYmopXVswXSkKLSAgICAgICAgICAgIGlmIHByb3RvOgorICAgICAgICAgICAgaWYgc2VsZi5iaW46CiAgICAgICAgICAgICAgICAgd3JpdGUoUE9QX01BUksgKyBnZXQpCiAgICAgICAgICAgICBlbHNlOiAgICMgcHJvdG8gMCAtLSBQT1BfTUFSSyBub3QgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICAgd3JpdGUoUE9QICogKG4rMSkgKyBnZXQpCiAgICAgICAgICAgICByZXR1cm4KIAogICAgICAgICAjIE5vIHJlY3Vyc2lvbi4KLSAgICAgICAgc2VsZi53cml0ZShUVVBMRSkKKyAgICAgICAgd3JpdGUoVFVQTEUpCiAgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCiAKICAgICBkaXNwYXRjaFt0dXBsZV0gPSBzYXZlX3R1cGxlCiAKICAgICBkZWYgc2F2ZV9saXN0KHNlbGYsIG9iaik6Ci0gICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQotCiAgICAgICAgIGlmIHNlbGYuYmluOgotICAgICAgICAgICAgd3JpdGUoRU1QVFlfTElTVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoRU1QVFlfTElTVCkKICAgICAgICAgZWxzZTogICAjIHByb3RvIDAgLS0gY2FuJ3QgdXNlIEVNUFRZX0xJU1QKLSAgICAgICAgICAgIHdyaXRlKE1BUksgKyBMSVNUKQorICAgICAgICAgICAgc2VsZi53cml0ZShNQVJLICsgTElTVCkKIAogICAgICAgICBzZWxmLm1lbW9pemUob2JqKQogICAgICAgICBzZWxmLl9iYXRjaF9hcHBlbmRzKG9iaikKQEAgLTU5OSwxNyArNzg4LDkgQEAKICAgICAgICAgICAgICAgICB3cml0ZShBUFBFTkQpCiAgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICBpdGVtcyA9IGl0ZXIoaXRlbXMpCi0gICAgICAgIHIgPSByYW5nZShzZWxmLl9CQVRDSFNJWkUpCi0gICAgICAgIHdoaWxlIGl0ZW1zIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdG1wID0gW10KLSAgICAgICAgICAgIGZvciBpIGluIHI6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB4ID0gbmV4dChpdGVtcykKLSAgICAgICAgICAgICAgICAgICAgdG1wLmFwcGVuZCh4KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgICAgICBpdGVtcyA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaXQgPSBpdGVyKGl0ZW1zKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgdG1wID0gbGlzdChpc2xpY2UoaXQsIHNlbGYuX0JBVENIU0laRSkpCiAgICAgICAgICAgICBuID0gbGVuKHRtcCkKICAgICAgICAgICAgIGlmIG4gPiAxOgogICAgICAgICAgICAgICAgIHdyaXRlKE1BUkspCkBAIC02MjAsMTQgKzgwMSwxNCBAQAogICAgICAgICAgICAgICAgIHNhdmUodG1wWzBdKQogICAgICAgICAgICAgICAgIHdyaXRlKEFQUEVORCkKICAgICAgICAgICAgICMgZWxzZSB0bXAgaXMgZW1wdHksIGFuZCB3ZSdyZSBkb25lCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgogCiAgICAgZGVmIHNhdmVfZGljdChzZWxmLCBvYmopOgotICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKLQogICAgICAgICBpZiBzZWxmLmJpbjoKLSAgICAgICAgICAgIHdyaXRlKEVNUFRZX0RJQ1QpCisgICAgICAgICAgICBzZWxmLndyaXRlKEVNUFRZX0RJQ1QpCiAgICAgICAgIGVsc2U6ICAgIyBwcm90byAwIC0tIGNhbid0IHVzZSBFTVBUWV9ESUNUCi0gICAgICAgICAgICB3cml0ZShNQVJLICsgRElDVCkKKyAgICAgICAgICAgIHNlbGYud3JpdGUoTUFSSyArIERJQ1QpCiAKICAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKICAgICAgICAgc2VsZi5fYmF0Y2hfc2V0aXRlbXMob2JqLml0ZW1zKCkpCkBAIC02NDgsMTYgKzgyOSw5IEBACiAgICAgICAgICAgICAgICAgd3JpdGUoU0VUSVRFTSkKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGl0ZW1zID0gaXRlcihpdGVtcykKLSAgICAgICAgciA9IHJhbmdlKHNlbGYuX0JBVENIU0laRSkKLSAgICAgICAgd2hpbGUgaXRlbXMgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0bXAgPSBbXQotICAgICAgICAgICAgZm9yIGkgaW4gcjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHRtcC5hcHBlbmQobmV4dChpdGVtcykpCi0gICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW1zID0gTm9uZQotICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBpdCA9IGl0ZXIoaXRlbXMpCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0bXAgPSBsaXN0KGlzbGljZShpdCwgc2VsZi5fQkFUQ0hTSVpFKSkKICAgICAgICAgICAgIG4gPSBsZW4odG1wKQogICAgICAgICAgICAgaWYgbiA+IDE6CiAgICAgICAgICAgICAgICAgd3JpdGUoTUFSSykKQEAgLTY3MSw1NSArODQ1LDEwOSBAQAogICAgICAgICAgICAgICAgIHNhdmUodikKICAgICAgICAgICAgICAgICB3cml0ZShTRVRJVEVNKQogICAgICAgICAgICAgIyBlbHNlIHRtcCBpcyBlbXB0eSwgYW5kIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgIGlmIG4gPCBzZWxmLl9CQVRDSFNJWkU6CisgICAgICAgICAgICAgICAgcmV0dXJuCiAKLSAgICBkZWYgc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBuYW1lPU5vbmUsIHBhY2s9c3RydWN0LnBhY2spOgorICAgIGRlZiBzYXZlX3NldChzZWxmLCBvYmopOgorICAgICAgICBzYXZlID0gc2VsZi5zYXZlCisgICAgICAgIHdyaXRlID0gc2VsZi53cml0ZQorCisgICAgICAgIGlmIHNlbGYucHJvdG8gPCA0OgorICAgICAgICAgICAgc2VsZi5zYXZlX3JlZHVjZShzZXQsIChsaXN0KG9iaiksKSwgb2JqPW9iaikKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHdyaXRlKEVNUFRZX1NFVCkKKyAgICAgICAgc2VsZi5tZW1vaXplKG9iaikKKworICAgICAgICBpdCA9IGl0ZXIob2JqKQorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgYmF0Y2ggPSBsaXN0KGlzbGljZShpdCwgc2VsZi5fQkFUQ0hTSVpFKSkKKyAgICAgICAgICAgIG4gPSBsZW4oYmF0Y2gpCisgICAgICAgICAgICBpZiBuID4gMDoKKyAgICAgICAgICAgICAgICB3cml0ZShNQVJLKQorICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGJhdGNoOgorICAgICAgICAgICAgICAgICAgICBzYXZlKGl0ZW0pCisgICAgICAgICAgICAgICAgd3JpdGUoQURESVRFTVMpCisgICAgICAgICAgICBpZiBuIDwgc2VsZi5fQkFUQ0hTSVpFOgorICAgICAgICAgICAgICAgIHJldHVybgorICAgIGRpc3BhdGNoW3NldF0gPSBzYXZlX3NldAorCisgICAgZGVmIHNhdmVfZnJvemVuc2V0KHNlbGYsIG9iaik6CisgICAgICAgIHNhdmUgPSBzZWxmLnNhdmUKKyAgICAgICAgd3JpdGUgPSBzZWxmLndyaXRlCisKKyAgICAgICAgaWYgc2VsZi5wcm90byA8IDQ6CisgICAgICAgICAgICBzZWxmLnNhdmVfcmVkdWNlKGZyb3plbnNldCwgKGxpc3Qob2JqKSwpLCBvYmo9b2JqKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgd3JpdGUoTUFSSykKKyAgICAgICAgZm9yIGl0ZW0gaW4gb2JqOgorICAgICAgICAgICAgc2F2ZShpdGVtKQorCisgICAgICAgIGlmIGlkKG9iaikgaW4gc2VsZi5tZW1vOgorICAgICAgICAgICAgIyBJZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1lbW8sIHRoaXMgbWVhbnMgaXQgaXMKKyAgICAgICAgICAgICMgcmVjdXJzaXZlLiBJbiB0aGlzIGNhc2UsIHRocm93IGF3YXkgZXZlcnl0aGluZyB3ZSBwdXQgb24gdGhlCisgICAgICAgICAgICAjIHN0YWNrLCBhbmQgZmV0Y2ggdGhlIG9iamVjdCBiYWNrIGZyb20gdGhlIG1lbW8uCisgICAgICAgICAgICB3cml0ZShQT1BfTUFSSyArIHNlbGYuZ2V0KHNlbGYubWVtb1tpZChvYmopXVswXSkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShGUk9aRU5TRVQpCisgICAgICAgIHNlbGYubWVtb2l6ZShvYmopCisgICAgZGlzcGF0Y2hbZnJvemVuc2V0XSA9IHNhdmVfZnJvemVuc2V0CisKKyAgICBkZWYgc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBuYW1lPU5vbmUpOgogICAgICAgICB3cml0ZSA9IHNlbGYud3JpdGUKICAgICAgICAgbWVtbyA9IHNlbGYubWVtbwogCisgICAgICAgIGlmIG5hbWUgaXMgTm9uZSBhbmQgc2VsZi5wcm90byA+PSA0OgorICAgICAgICAgICAgbmFtZSA9IGdldGF0dHIob2JqLCAnX19xdWFsbmFtZV9fJywgTm9uZSkKICAgICAgICAgaWYgbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgbmFtZSA9IG9iai5fX25hbWVfXwogCi0gICAgICAgIG1vZHVsZSA9IGdldGF0dHIob2JqLCAiX19tb2R1bGVfXyIsIE5vbmUpCi0gICAgICAgIGlmIG1vZHVsZSBpcyBOb25lOgotICAgICAgICAgICAgbW9kdWxlID0gd2hpY2htb2R1bGUob2JqLCBuYW1lKQotCisgICAgICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBuYW1lLCBhbGxvd19xdWFsbmFtZT1zZWxmLnByb3RvID49IDQpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlLCBsZXZlbD0wKQotICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kdWxlXQotICAgICAgICAgICAga2xhc3MgPSBnZXRhdHRyKG1vZCwgbmFtZSkKKyAgICAgICAgICAgIF9faW1wb3J0X18obW9kdWxlX25hbWUsIGxldmVsPTApCisgICAgICAgICAgICBtb2R1bGUgPSBzeXMubW9kdWxlc1ttb2R1bGVfbmFtZV0KKyAgICAgICAgICAgIG9iajIgPSBfZ2V0YXR0cmlidXRlKG1vZHVsZSwgbmFtZSwgYWxsb3dfcXVhbG5hbWU9c2VsZi5wcm90byA+PSA0KQogICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBLZXlFcnJvciwgQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgUGlja2xpbmdFcnJvcigKICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVyOiBpdCdzIG5vdCBmb3VuZCBhcyAlcy4lcyIgJQotICAgICAgICAgICAgICAgIChvYmosIG1vZHVsZSwgbmFtZSkpCisgICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlX25hbWUsIG5hbWUpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgaWYga2xhc3MgaXMgbm90IG9iajoKKyAgICAgICAgICAgIGlmIG9iajIgaXMgbm90IG9iajoKICAgICAgICAgICAgICAgICByYWlzZSBQaWNrbGluZ0Vycm9yKAogICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVyOiBpdCdzIG5vdCB0aGUgc2FtZSBvYmplY3QgYXMgJXMuJXMiICUKLSAgICAgICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgKG9iaiwgbW9kdWxlX25hbWUsIG5hbWUpKQogCiAgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMjoKLSAgICAgICAgICAgIGNvZGUgPSBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LmdldCgobW9kdWxlLCBuYW1lKSkKKyAgICAgICAgICAgIGNvZGUgPSBfZXh0ZW5zaW9uX3JlZ2lzdHJ5LmdldCgobW9kdWxlX25hbWUsIG5hbWUpKQogICAgICAgICAgICAgaWYgY29kZToKICAgICAgICAgICAgICAgICBhc3NlcnQgY29kZSA+IDAKICAgICAgICAgICAgICAgICBpZiBjb2RlIDw9IDB4ZmY6Ci0gICAgICAgICAgICAgICAgICAgIHdyaXRlKEVYVDEgKyBieXRlcyhbY29kZV0pKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQxICsgcGFjaygiPEIiLCBjb2RlKSkKICAgICAgICAgICAgICAgICBlbGlmIGNvZGUgPD0gMHhmZmZmOgotICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQyICsgYnl0ZXMoW2NvZGUmMHhmZiwgY29kZT4+OF0pKQorICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQyICsgcGFjaygiPEgiLCBjb2RlKSkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICB3cml0ZShFWFQ0ICsgcGFjaygiPGkiLCBjb2RlKSkKICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgIyBOb24tQVNDSUkgaWRlbnRpZmllcnMgYXJlIHN1cHBvcnRlZCBvbmx5IHdpdGggcHJvdG9jb2xzID49IDMuCi0gICAgICAgIGlmIHNlbGYucHJvdG8gPj0gMzoKLSAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZSwgInV0Zi04IikgKyBiJ1xuJyArCisgICAgICAgIGlmIHNlbGYucHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHNlbGYuc2F2ZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuc2F2ZShuYW1lKQorICAgICAgICAgICAgd3JpdGUoU1RBQ0tfR0xPQkFMKQorICAgICAgICBlbGlmIHNlbGYucHJvdG8gPj0gMzoKKyAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZV9uYW1lLCAidXRmLTgiKSArIGInXG4nICsKICAgICAgICAgICAgICAgICAgIGJ5dGVzKG5hbWUsICJ1dGYtOCIpICsgYidcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBpZiBzZWxmLmZpeF9pbXBvcnRzOgotICAgICAgICAgICAgICAgIGlmIChtb2R1bGUsIG5hbWUpIGluIF9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HOgotICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIG5hbWUgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElOR1sobW9kdWxlLCBuYW1lKV0KLSAgICAgICAgICAgICAgICBpZiBtb2R1bGUgaW4gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORzoKLSAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElOR1ttb2R1bGVdCisgICAgICAgICAgICAgICAgcl9uYW1lX21hcHBpbmcgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORworICAgICAgICAgICAgICAgIHJfaW1wb3J0X21hcHBpbmcgPSBfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HCisgICAgICAgICAgICAgICAgaWYgKG1vZHVsZV9uYW1lLCBuYW1lKSBpbiByX25hbWVfbWFwcGluZzoKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsIG5hbWUgPSByX25hbWVfbWFwcGluZ1sobW9kdWxlX25hbWUsIG5hbWUpXQorICAgICAgICAgICAgICAgIGVsaWYgbW9kdWxlX25hbWUgaW4gcl9pbXBvcnRfbWFwcGluZzoKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSByX2ltcG9ydF9tYXBwaW5nW21vZHVsZV9uYW1lXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHdyaXRlKEdMT0JBTCArIGJ5dGVzKG1vZHVsZSwgImFzY2lpIikgKyBiJ1xuJyArCisgICAgICAgICAgICAgICAgd3JpdGUoR0xPQkFMICsgYnl0ZXMobW9kdWxlX25hbWUsICJhc2NpaSIpICsgYidcbicgKwogICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzKG5hbWUsICJhc2NpaSIpICsgYidcbicpCiAgICAgICAgICAgICBleGNlcHQgVW5pY29kZUVuY29kZUVycm9yOgogICAgICAgICAgICAgICAgIHJhaXNlIFBpY2tsaW5nRXJyb3IoCkBAIC03MzgsNTggKzk2Niw4IEBACiAgICAgICAgIHJldHVybiBzZWxmLnNhdmVfZ2xvYmFsKG9iaikKIAogICAgIGRpc3BhdGNoW0Z1bmN0aW9uVHlwZV0gPSBzYXZlX2dsb2JhbAotICAgIGRpc3BhdGNoW0J1aWx0aW5GdW5jdGlvblR5cGVdID0gc2F2ZV9nbG9iYWwKICAgICBkaXNwYXRjaFt0eXBlXSA9IHNhdmVfdHlwZQogCi0jIFBpY2tsaW5nIGhlbHBlcnMKLQotZGVmIF9rZWVwX2FsaXZlKHgsIG1lbW8pOgotICAgICIiIktlZXBzIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QgeCBpbiB0aGUgbWVtby4KLQotICAgIEJlY2F1c2Ugd2UgcmVtZW1iZXIgb2JqZWN0cyBieSB0aGVpciBpZCwgd2UgaGF2ZQotICAgIHRvIGFzc3VyZSB0aGF0IHBvc3NpYmx5IHRlbXBvcmFyeSBvYmplY3RzIGFyZSBrZXB0Ci0gICAgYWxpdmUgYnkgcmVmZXJlbmNpbmcgdGhlbS4KLSAgICBXZSBzdG9yZSBhIHJlZmVyZW5jZSBhdCB0aGUgaWQgb2YgdGhlIG1lbW8sIHdoaWNoIHNob3VsZAotICAgIG5vcm1hbGx5IG5vdCBiZSB1c2VkIHVubGVzcyBzb21lb25lIHRyaWVzIHRvIGRlZXBjb3B5Ci0gICAgdGhlIG1lbW8gaXRzZWxmLi4uCi0gICAgIiIiCi0gICAgdHJ5OgotICAgICAgICBtZW1vW2lkKG1lbW8pXS5hcHBlbmQoeCkKLSAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICMgYWhhLCB0aGlzIGlzIHRoZSBmaXJzdCBvbmUgOi0pCi0gICAgICAgIG1lbW9baWQobWVtbyldPVt4XQotCi0KLSMgQSBjYWNoZSBmb3Igd2hpY2htb2R1bGUoKSwgbWFwcGluZyBhIGZ1bmN0aW9uIG9iamVjdCB0byB0aGUgbmFtZSBvZgotIyB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZSBmdW5jdGlvbiB3YXMgZm91bmQuCi0KLWNsYXNzbWFwID0ge30gIyBjYWxsZWQgY2xhc3NtYXAgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Ci0KLWRlZiB3aGljaG1vZHVsZShmdW5jLCBmdW5jbmFtZSk6Ci0gICAgIiIiRmlndXJlIG91dCB0aGUgbW9kdWxlIGluIHdoaWNoIGEgZnVuY3Rpb24gb2NjdXJzLgotCi0gICAgU2VhcmNoIHN5cy5tb2R1bGVzIGZvciB0aGUgbW9kdWxlLgotICAgIENhY2hlIGluIGNsYXNzbWFwLgotICAgIFJldHVybiBhIG1vZHVsZSBuYW1lLgotICAgIElmIHRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgZm91bmQsIHJldHVybiAiX19tYWluX18iLgotICAgICIiIgotICAgICMgUHl0aG9uIGZ1bmN0aW9ucyBzaG91bGQgYWx3YXlzIGdldCBhbiBfX21vZHVsZV9fIGZyb20gdGhlaXIgZ2xvYmFscy4KLSAgICBtb2QgPSBnZXRhdHRyKGZ1bmMsICJfX21vZHVsZV9fIiwgTm9uZSkKLSAgICBpZiBtb2QgaXMgbm90IE5vbmU6Ci0gICAgICAgIHJldHVybiBtb2QKLSAgICBpZiBmdW5jIGluIGNsYXNzbWFwOgotICAgICAgICByZXR1cm4gY2xhc3NtYXBbZnVuY10KLQotICAgIGZvciBuYW1lLCBtb2R1bGUgaW4gbGlzdChzeXMubW9kdWxlcy5pdGVtcygpKToKLSAgICAgICAgaWYgbW9kdWxlIGlzIE5vbmU6Ci0gICAgICAgICAgICBjb250aW51ZSAjIHNraXAgZHVtbXkgcGFja2FnZSBlbnRyaWVzCi0gICAgICAgIGlmIG5hbWUgIT0gJ19fbWFpbl9fJyBhbmQgZ2V0YXR0cihtb2R1bGUsIGZ1bmNuYW1lLCBOb25lKSBpcyBmdW5jOgotICAgICAgICAgICAgYnJlYWsKLSAgICBlbHNlOgotICAgICAgICBuYW1lID0gJ19fbWFpbl9fJwotICAgIGNsYXNzbWFwW2Z1bmNdID0gbmFtZQotICAgIHJldHVybiBuYW1lCi0KIAogIyBVbnBpY2tsaW5nIG1hY2hpbmVyeQogCkBAIC03OTksOCArOTc3LDE0IEBACiAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CiAgICAgICAgICIiIlRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3IgcmVhZGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS4KIAotICAgICAgICBUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vCi0gICAgICAgIHByb3RvIGFyZ3VtZW50IGlzIG5lZWRlZC4KKyAgICAgICAgVGhlIHByb3RvY29sIHZlcnNpb24gb2YgdGhlIHBpY2tsZSBpcyBkZXRlY3RlZCBhdXRvbWF0aWNhbGx5LCBzbworICAgICAgICBubyBwcm90byBhcmd1bWVudCBpcyBuZWVkZWQuCisKKyAgICAgICAgVGhlIGFyZ3VtZW50ICpmaWxlKiBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0CisgICAgICAgIHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMKKyAgICAgICAgbm8gYXJndW1lbnRzLiAgQm90aCBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKgorICAgICAgICBjYW4gYmUgYSBiaW5hcnkgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciByZWFkaW5nLCBhbiBpby5CeXRlc0lPCisgICAgICAgIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KIAogICAgICAgICBUaGUgZmlsZS1saWtlIG9iamVjdCBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZAogICAgICAgICB0aGF0IHRha2VzIGFuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQKQEAgLTgwOSwxNiArOTkzLDE3IEBACiAgICAgICAgIHJlYWRpbmcsIGEgQnl0ZXNJTyBvYmplY3QsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQKICAgICAgICAgbWVldHMgdGhpcyBpbnRlcmZhY2UuCiAKLSAgICAgICAgT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLAotICAgICAgICB3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtCi0gICAgICAgIGdlbmVyYXRlZCBieSBQeXRob24gMi54LiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8KLSAgICAgICAgbWFwIHRoZSBvbGQgUHl0aG9uIDIueCBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMueC4gIFRoZQotICAgICAgICAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZwotICAgICAgICBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24gMi54OyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kCi0gICAgICAgICdzdHJpY3QnLCByZXNwZWN0aXZlbHkuCisgICAgICAgIE9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZAorICAgICAgICAqZXJyb3JzKiwgd2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IKKyAgICAgICAgcGlja2xlIHN0cmVhbSBnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsCisgICAgICAgIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZCBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzCisgICAgICAgIHVzZWQgaW4gUHl0aG9uIDMuICBUaGUgKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93CisgICAgICAgIHRvIGRlY29kZSA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlCisgICAgICAgIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS4gKmVuY29kaW5nKiBjYW4gYmUKKyAgICAgICAgJ2J5dGVzJyB0byByZWFkIHRoZXNlcyA4LWJpdCBzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLnJlYWRsaW5lID0gZmlsZS5yZWFkbGluZQotICAgICAgICBzZWxmLnJlYWQgPSBmaWxlLnJlYWQKKyAgICAgICAgc2VsZi5fZmlsZV9yZWFkbGluZSA9IGZpbGUucmVhZGxpbmUKKyAgICAgICAgc2VsZi5fZmlsZV9yZWFkID0gZmlsZS5yZWFkCiAgICAgICAgIHNlbGYubWVtbyA9IHt9CiAgICAgICAgIHNlbGYuZW5jb2RpbmcgPSBlbmNvZGluZwogICAgICAgICBzZWxmLmVycm9ycyA9IGVycm9ycwpAQCAtODMyLDE2ICsxMDE3LDIwIEBACiAgICAgICAgICIiIgogICAgICAgICAjIENoZWNrIHdoZXRoZXIgVW5waWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkuIFRoaXMgaXMKICAgICAgICAgIyBvbmx5IG5lZWRlZCB0byBtaW1pYyB0aGUgYmVoYXZpb3Igb2YgX3BpY2tsZS5VbnBpY2tsZXIuZHVtcCgpLgotICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAicmVhZCIpOgorICAgICAgICBpZiBub3QgaGFzYXR0cihzZWxmLCAiX2ZpbGVfcmVhZCIpOgogICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJVbnBpY2tsZXIuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCBieSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzLl9faW5pdF9fKCkiICUgKHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCkpCisgICAgICAgIHNlbGYuX3VuZnJhbWVyID0gX1VuZnJhbWVyKHNlbGYuX2ZpbGVfcmVhZCwgc2VsZi5fZmlsZV9yZWFkbGluZSkKKyAgICAgICAgc2VsZi5yZWFkID0gc2VsZi5fdW5mcmFtZXIucmVhZAorICAgICAgICBzZWxmLnJlYWRsaW5lID0gc2VsZi5fdW5mcmFtZXIucmVhZGxpbmUKICAgICAgICAgc2VsZi5tYXJrID0gb2JqZWN0KCkgIyBhbnkgbmV3IHVuaXF1ZSBvYmplY3QKICAgICAgICAgc2VsZi5zdGFjayA9IFtdCiAgICAgICAgIHNlbGYuYXBwZW5kID0gc2VsZi5zdGFjay5hcHBlbmQKKyAgICAgICAgc2VsZi5wcm90byA9IDAKICAgICAgICAgcmVhZCA9IHNlbGYucmVhZAogICAgICAgICBkaXNwYXRjaCA9IHNlbGYuZGlzcGF0Y2gKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAga2V5ID0gcmVhZCgxKQogICAgICAgICAgICAgICAgIGlmIG5vdCBrZXk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCkBAIC04NzEsMTIgKzEwNjAsMTkgQEAKICAgICBkaXNwYXRjaCA9IHt9CiAKICAgICBkZWYgbG9hZF9wcm90byhzZWxmKToKLSAgICAgICAgcHJvdG8gPSBvcmQoc2VsZi5yZWFkKDEpKQorICAgICAgICBwcm90byA9IHNlbGYucmVhZCgxKVswXQogICAgICAgICBpZiBub3QgMCA8PSBwcm90byA8PSBISUdIRVNUX1BST1RPQ09MOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgcGlja2xlIHByb3RvY29sOiAlZCIgJSBwcm90bykKICAgICAgICAgc2VsZi5wcm90byA9IHByb3RvCiAgICAgZGlzcGF0Y2hbUFJPVE9bMF1dID0gbG9hZF9wcm90bwogCisgICAgZGVmIGxvYWRfZnJhbWUoc2VsZik6CisgICAgICAgIGZyYW1lX3NpemUsID0gdW5wYWNrKCc8UScsIHNlbGYucmVhZCg4KSkKKyAgICAgICAgaWYgZnJhbWVfc2l6ZSA+IHN5cy5tYXhzaXplOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZnJhbWUgc2l6ZSA+IHN5cy5tYXhzaXplOiAlZCIgJSBmcmFtZV9zaXplKQorICAgICAgICBzZWxmLl91bmZyYW1lci5sb2FkX2ZyYW1lKGZyYW1lX3NpemUpCisgICAgZGlzcGF0Y2hbRlJBTUVbMF1dID0gbG9hZF9mcmFtZQorCiAgICAgZGVmIGxvYWRfcGVyc2lkKHNlbGYpOgogICAgICAgICBwaWQgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoImFzY2lpIikKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5wZXJzaXN0ZW50X2xvYWQocGlkKSkKQEAgLTkwNiw0MyArMTEwMiw0MCBAQAogICAgICAgICBlbGlmIGRhdGEgPT0gVFJVRVsxOl06CiAgICAgICAgICAgICB2YWwgPSBUcnVlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgdmFsID0gaW50KGRhdGEsIDApCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICB2YWwgPSBpbnQoZGF0YSwgMCkKKyAgICAgICAgICAgIHZhbCA9IGludChkYXRhLCAwKQogICAgICAgICBzZWxmLmFwcGVuZCh2YWwpCiAgICAgZGlzcGF0Y2hbSU5UWzBdXSA9IGxvYWRfaW50CiAKICAgICBkZWYgbG9hZF9iaW5pbnQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXBwZW5kKG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKSkKKyAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc8aScsIHNlbGYucmVhZCg0KSlbMF0pCiAgICAgZGlzcGF0Y2hbQklOSU5UWzBdXSA9IGxvYWRfYmluaW50CiAKICAgICBkZWYgbG9hZF9iaW5pbnQxKHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChvcmQoc2VsZi5yZWFkKDEpKSkKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5yZWFkKDEpWzBdKQogICAgIGRpc3BhdGNoW0JJTklOVDFbMF1dID0gbG9hZF9iaW5pbnQxCiAKICAgICBkZWYgbG9hZF9iaW5pbnQyKHNlbGYpOgotICAgICAgICBzZWxmLmFwcGVuZChtbG9hZHMoYidpJyArIHNlbGYucmVhZCgyKSArIGInXDAwMFwwMDAnKSkKKyAgICAgICAgc2VsZi5hcHBlbmQodW5wYWNrKCc8SCcsIHNlbGYucmVhZCgyKSlbMF0pCiAgICAgZGlzcGF0Y2hbQklOSU5UMlswXV0gPSBsb2FkX2JpbmludDIKIAogICAgIGRlZiBsb2FkX2xvbmcoc2VsZik6Ci0gICAgICAgIHZhbCA9IHNlbGYucmVhZGxpbmUoKVs6LTFdLmRlY29kZSgiYXNjaWkiKQotICAgICAgICBpZiB2YWwgYW5kIHZhbFstMV0gPT0gJ0wnOgorICAgICAgICB2YWwgPSBzZWxmLnJlYWRsaW5lKClbOi0xXQorICAgICAgICBpZiB2YWwgYW5kIHZhbFstMV0gPT0gYidMJ1swXToKICAgICAgICAgICAgIHZhbCA9IHZhbFs6LTFdCiAgICAgICAgIHNlbGYuYXBwZW5kKGludCh2YWwsIDApKQogICAgIGRpc3BhdGNoW0xPTkdbMF1dID0gbG9hZF9sb25nCiAKICAgICBkZWYgbG9hZF9sb25nMShzZWxmKToKLSAgICAgICAgbiA9IG9yZChzZWxmLnJlYWQoMSkpCisgICAgICAgIG4gPSBzZWxmLnJlYWQoMSlbMF0KICAgICAgICAgZGF0YSA9IHNlbGYucmVhZChuKQogICAgICAgICBzZWxmLmFwcGVuZChkZWNvZGVfbG9uZyhkYXRhKSkKICAgICBkaXNwYXRjaFtMT05HMVswXV0gPSBsb2FkX2xvbmcxCiAKICAgICBkZWYgbG9hZF9sb25nNChzZWxmKToKLSAgICAgICAgbiA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDQpKQorICAgICAgICBuLCA9IHVucGFjaygnPGknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIGlmIG4gPCAwOgogICAgICAgICAgICAgIyBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlIC0tIHdlIG5ldmVyIHdyaXRlIG9uZSBsaWtlIHRoaXMKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKKyAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKQogICAgICAgICBkYXRhID0gc2VsZi5yZWFkKG4pCiAgICAgICAgIHNlbGYuYXBwZW5kKGRlY29kZV9sb25nKGRhdGEpKQogICAgIGRpc3BhdGNoW0xPTkc0WzBdXSA9IGxvYWRfbG9uZzQKQEAgLTk1MSwzOSArMTE0NCw0MyBAQAogICAgICAgICBzZWxmLmFwcGVuZChmbG9hdChzZWxmLnJlYWRsaW5lKClbOi0xXSkpCiAgICAgZGlzcGF0Y2hbRkxPQVRbMF1dID0gbG9hZF9mbG9hdAogCi0gICAgZGVmIGxvYWRfYmluZmxvYXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2spOgorICAgIGRlZiBsb2FkX2JpbmZsb2F0KHNlbGYpOgogICAgICAgICBzZWxmLmFwcGVuZCh1bnBhY2soJz5kJywgc2VsZi5yZWFkKDgpKVswXSkKICAgICBkaXNwYXRjaFtCSU5GTE9BVFswXV0gPSBsb2FkX2JpbmZsb2F0CiAKLSAgICBkZWYgbG9hZF9zdHJpbmcoc2VsZik6Ci0gICAgICAgIG9yaWcgPSBzZWxmLnJlYWRsaW5lKCkKLSAgICAgICAgcmVwID0gb3JpZ1s6LTFdCi0gICAgICAgIGZvciBxIGluIChiJyInLCBiIiciKTogIyBkb3VibGUgb3Igc2luZ2xlIHF1b3RlCi0gICAgICAgICAgICBpZiByZXAuc3RhcnRzd2l0aChxKToKLSAgICAgICAgICAgICAgICBpZiBsZW4ocmVwKSA8IDIgb3Igbm90IHJlcC5lbmRzd2l0aChxKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW5zZWN1cmUgc3RyaW5nIHBpY2tsZSIpCi0gICAgICAgICAgICAgICAgcmVwID0gcmVwW2xlbihxKTotbGVuKHEpXQotICAgICAgICAgICAgICAgIGJyZWFrCisgICAgZGVmIF9kZWNvZGVfc3RyaW5nKHNlbGYsIHZhbHVlKToKKyAgICAgICAgIyBVc2VkIHRvIGFsbG93IHN0cmluZ3MgZnJvbSBQeXRob24gMiB0byBiZSBkZWNvZGVkIGVpdGhlciBhcworICAgICAgICAjIGJ5dGVzIG9yIFVuaWNvZGUgc3RyaW5ncy4gIFRoaXMgc2hvdWxkIGJlIHVzZWQgb25seSB3aXRoIHRoZQorICAgICAgICAjIFNUUklORywgQklOU1RSSU5HIGFuZCBTSE9SVF9CSU5TVFJJTkcgb3Bjb2Rlcy4KKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZyA9PSAiYnl0ZXMiOgorICAgICAgICAgICAgcmV0dXJuIHZhbHVlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnNlY3VyZSBzdHJpbmcgcGlja2xlOiAlciIgJSBvcmlnKQotICAgICAgICBzZWxmLmFwcGVuZChjb2RlY3MuZXNjYXBlX2RlY29kZShyZXApWzBdCi0gICAgICAgICAgICAgICAgICAgIC5kZWNvZGUoc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpKQorICAgICAgICAgICAgcmV0dXJuIHZhbHVlLmRlY29kZShzZWxmLmVuY29kaW5nLCBzZWxmLmVycm9ycykKKworICAgIGRlZiBsb2FkX3N0cmluZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IHNlbGYucmVhZGxpbmUoKVs6LTFdCisgICAgICAgICMgU3RyaXAgb3V0ZXJtb3N0IHF1b3RlcworICAgICAgICBpZiBsZW4oZGF0YSkgPj0gMiBhbmQgZGF0YVswXSA9PSBkYXRhWy0xXSBhbmQgZGF0YVswXSBpbiBiJyJcJyc6CisgICAgICAgICAgICBkYXRhID0gZGF0YVsxOi0xXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJ0aGUgU1RSSU5HIG9wY29kZSBhcmd1bWVudCBtdXN0IGJlIHF1b3RlZCIpCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYuX2RlY29kZV9zdHJpbmcoY29kZWNzLmVzY2FwZV9kZWNvZGUoZGF0YSlbMF0pKQogICAgIGRpc3BhdGNoW1NUUklOR1swXV0gPSBsb2FkX3N0cmluZwogCiAgICAgZGVmIGxvYWRfYmluc3RyaW5nKHNlbGYpOgogICAgICAgICAjIERlcHJlY2F0ZWQgQklOU1RSSU5HIHVzZXMgc2lnbmVkIDMyLWJpdCBsZW5ndGgKLSAgICAgICAgbGVuID0gbWxvYWRzKGInaScgKyBzZWxmLnJlYWQoNCkpCisgICAgICAgIGxlbiwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBsZW4gPCAwOgotICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5TVFJJTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlNUUklORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKQogICAgICAgICBkYXRhID0gc2VsZi5yZWFkKGxlbikKLSAgICAgICAgdmFsdWUgPSBzdHIoZGF0YSwgc2VsZi5lbmNvZGluZywgc2VsZi5lcnJvcnMpCi0gICAgICAgIHNlbGYuYXBwZW5kKHZhbHVlKQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLl9kZWNvZGVfc3RyaW5nKGRhdGEpKQogICAgIGRpc3BhdGNoW0JJTlNUUklOR1swXV0gPSBsb2FkX2JpbnN0cmluZwogCi0gICAgZGVmIGxvYWRfYmluYnl0ZXMoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2ssIG1heHNpemU9c3lzLm1heHNpemUpOgorICAgIGRlZiBsb2FkX2JpbmJ5dGVzKHNlbGYpOgogICAgICAgICBsZW4sID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgbGVuID4gbWF4c2l6ZToKLSAgICAgICAgICAgIHJhaXNlIFVucGlja2xpbmdFcnJvcigiQklOQllURVMgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSk7CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTkJZVEVTIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSkKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5yZWFkKGxlbikpCiAgICAgZGlzcGF0Y2hbQklOQllURVNbMF1dID0gbG9hZF9iaW5ieXRlcwogCkBAIC05OTEsMjUgKzExODgsNDYgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoc3RyKHNlbGYucmVhZGxpbmUoKVs6LTFdLCAncmF3LXVuaWNvZGUtZXNjYXBlJykpCiAgICAgZGlzcGF0Y2hbVU5JQ09ERVswXV0gPSBsb2FkX3VuaWNvZGUKIAotICAgIGRlZiBsb2FkX2JpbnVuaWNvZGUoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2ssIG1heHNpemU9c3lzLm1heHNpemUpOgorICAgIGRlZiBsb2FkX2JpbnVuaWNvZGUoc2VsZik6CiAgICAgICAgIGxlbiwgPSB1bnBhY2soJzxJJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBpZiBsZW4gPiBtYXhzaXplOgotICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5VTklDT0RFIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplIG9mICVkIGJ5dGVzIiAlIG1heHNpemUpOworICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJCSU5VTklDT0RFIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSkKICAgICAgICAgc2VsZi5hcHBlbmQoc3RyKHNlbGYucmVhZChsZW4pLCAndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpKQogICAgIGRpc3BhdGNoW0JJTlVOSUNPREVbMF1dID0gbG9hZF9iaW51bmljb2RlCiAKKyAgICBkZWYgbG9hZF9iaW51bmljb2RlOChzZWxmKToKKyAgICAgICAgbGVuLCA9IHVucGFjaygnPFEnLCBzZWxmLnJlYWQoOCkpCisgICAgICAgIGlmIGxlbiA+IG1heHNpemU6CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTlVOSUNPREU4IGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBzaXplICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib2YgJWQgYnl0ZXMiICUgbWF4c2l6ZSkKKyAgICAgICAgc2VsZi5hcHBlbmQoc3RyKHNlbGYucmVhZChsZW4pLCAndXRmLTgnLCAnc3Vycm9nYXRlcGFzcycpKQorICAgIGRpc3BhdGNoW0JJTlVOSUNPREU4WzBdXSA9IGxvYWRfYmludW5pY29kZTgKKworICAgIGRlZiBsb2FkX2JpbmJ5dGVzOChzZWxmKToKKyAgICAgICAgbGVuLCA9IHVucGFjaygnPFEnLCBzZWxmLnJlYWQoOCkpCisgICAgICAgIGlmIGxlbiA+IG1heHNpemU6CisgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkJJTkJZVEVTOCBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mICVkIGJ5dGVzIiAlIG1heHNpemUpCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZChsZW4pKQorICAgIGRpc3BhdGNoW0JJTkJZVEVTOFswXV0gPSBsb2FkX2JpbmJ5dGVzOAorCiAgICAgZGVmIGxvYWRfc2hvcnRfYmluc3RyaW5nKHNlbGYpOgotICAgICAgICBsZW4gPSBvcmQoc2VsZi5yZWFkKDEpKQotICAgICAgICBkYXRhID0gYnl0ZXMoc2VsZi5yZWFkKGxlbikpCi0gICAgICAgIHZhbHVlID0gc3RyKGRhdGEsIHNlbGYuZW5jb2RpbmcsIHNlbGYuZXJyb3JzKQotICAgICAgICBzZWxmLmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgbGVuID0gc2VsZi5yZWFkKDEpWzBdCisgICAgICAgIGRhdGEgPSBzZWxmLnJlYWQobGVuKQorICAgICAgICBzZWxmLmFwcGVuZChzZWxmLl9kZWNvZGVfc3RyaW5nKGRhdGEpKQogICAgIGRpc3BhdGNoW1NIT1JUX0JJTlNUUklOR1swXV0gPSBsb2FkX3Nob3J0X2JpbnN0cmluZwogCiAgICAgZGVmIGxvYWRfc2hvcnRfYmluYnl0ZXMoc2VsZik6Ci0gICAgICAgIGxlbiA9IG9yZChzZWxmLnJlYWQoMSkpCi0gICAgICAgIHNlbGYuYXBwZW5kKGJ5dGVzKHNlbGYucmVhZChsZW4pKSkKKyAgICAgICAgbGVuID0gc2VsZi5yZWFkKDEpWzBdCisgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYucmVhZChsZW4pKQogICAgIGRpc3BhdGNoW1NIT1JUX0JJTkJZVEVTWzBdXSA9IGxvYWRfc2hvcnRfYmluYnl0ZXMKIAorICAgIGRlZiBsb2FkX3Nob3J0X2JpbnVuaWNvZGUoc2VsZik6CisgICAgICAgIGxlbiA9IHNlbGYucmVhZCgxKVswXQorICAgICAgICBzZWxmLmFwcGVuZChzdHIoc2VsZi5yZWFkKGxlbiksICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykpCisgICAgZGlzcGF0Y2hbU0hPUlRfQklOVU5JQ09ERVswXV0gPSBsb2FkX3Nob3J0X2JpbnVuaWNvZGUKKwogICAgIGRlZiBsb2FkX3R1cGxlKHNlbGYpOgogICAgICAgICBrID0gc2VsZi5tYXJrZXIoKQogICAgICAgICBzZWxmLnN0YWNrW2s6XSA9IFt0dXBsZShzZWxmLnN0YWNrW2srMTpdKV0KQEAgLTEwMzksNiArMTI1NywxNSBAQAogICAgICAgICBzZWxmLmFwcGVuZCh7fSkKICAgICBkaXNwYXRjaFtFTVBUWV9ESUNUWzBdXSA9IGxvYWRfZW1wdHlfZGljdGlvbmFyeQogCisgICAgZGVmIGxvYWRfZW1wdHlfc2V0KHNlbGYpOgorICAgICAgICBzZWxmLmFwcGVuZChzZXQoKSkKKyAgICBkaXNwYXRjaFtFTVBUWV9TRVRbMF1dID0gbG9hZF9lbXB0eV9zZXQKKworICAgIGRlZiBsb2FkX2Zyb3plbnNldChzZWxmKToKKyAgICAgICAgayA9IHNlbGYubWFya2VyKCkKKyAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbZnJvemVuc2V0KHNlbGYuc3RhY2tbaysxOl0pXQorICAgIGRpc3BhdGNoW0ZST1pFTlNFVFswXV0gPSBsb2FkX2Zyb3plbnNldAorCiAgICAgZGVmIGxvYWRfbGlzdChzZWxmKToKICAgICAgICAgayA9IHNlbGYubWFya2VyKCkKICAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbc2VsZi5zdGFja1trKzE6XV0KQEAgLTEwNDYsMTIgKzEyNzMsOSBAQAogCiAgICAgZGVmIGxvYWRfZGljdChzZWxmKToKICAgICAgICAgayA9IHNlbGYubWFya2VyKCkKLSAgICAgICAgZCA9IHt9CiAgICAgICAgIGl0ZW1zID0gc2VsZi5zdGFja1trKzE6XQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oaXRlbXMpLCAyKToKLSAgICAgICAgICAgIGtleSA9IGl0ZW1zW2ldCi0gICAgICAgICAgICB2YWx1ZSA9IGl0ZW1zW2krMV0KLSAgICAgICAgICAgIGRba2V5XSA9IHZhbHVlCisgICAgICAgIGQgPSB7aXRlbXNbaV06IGl0ZW1zW2krMV0KKyAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oaXRlbXMpLCAyKX0KICAgICAgICAgc2VsZi5zdGFja1trOl0gPSBbZF0KICAgICBkaXNwYXRjaFtESUNUWzBdXSA9IGxvYWRfZGljdAogCkBAIC0xMDkwLDExICsxMzE0LDE5IEBACiAKICAgICBkZWYgbG9hZF9uZXdvYmooc2VsZik6CiAgICAgICAgIGFyZ3MgPSBzZWxmLnN0YWNrLnBvcCgpCi0gICAgICAgIGNscyA9IHNlbGYuc3RhY2tbLTFdCisgICAgICAgIGNscyA9IHNlbGYuc3RhY2sucG9wKCkKICAgICAgICAgb2JqID0gY2xzLl9fbmV3X18oY2xzLCAqYXJncykKLSAgICAgICAgc2VsZi5zdGFja1stMV0gPSBvYmoKKyAgICAgICAgc2VsZi5hcHBlbmQob2JqKQogICAgIGRpc3BhdGNoW05FV09CSlswXV0gPSBsb2FkX25ld29iagogCisgICAgZGVmIGxvYWRfbmV3b2JqX2V4KHNlbGYpOgorICAgICAgICBrd2FyZ3MgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIGFyZ3MgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIGNscyA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgb2JqID0gY2xzLl9fbmV3X18oY2xzLCAqYXJncywgKiprd2FyZ3MpCisgICAgICAgIHNlbGYuYXBwZW5kKG9iaikKKyAgICBkaXNwYXRjaFtORVdPQkpfRVhbMF1dID0gbG9hZF9uZXdvYmpfZXgKKwogICAgIGRlZiBsb2FkX2dsb2JhbChzZWxmKToKICAgICAgICAgbW9kdWxlID0gc2VsZi5yZWFkbGluZSgpWzotMV0uZGVjb2RlKCJ1dGYtOCIpCiAgICAgICAgIG5hbWUgPSBzZWxmLnJlYWRsaW5lKClbOi0xXS5kZWNvZGUoInV0Zi04IikKQEAgLTExMDIsMTggKzEzMzQsMjYgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoa2xhc3MpCiAgICAgZGlzcGF0Y2hbR0xPQkFMWzBdXSA9IGxvYWRfZ2xvYmFsCiAKKyAgICBkZWYgbG9hZF9zdGFja19nbG9iYWwoc2VsZik6CisgICAgICAgIG5hbWUgPSBzZWxmLnN0YWNrLnBvcCgpCisgICAgICAgIG1vZHVsZSA9IHNlbGYuc3RhY2sucG9wKCkKKyAgICAgICAgaWYgdHlwZShuYW1lKSBpcyBub3Qgc3RyIG9yIHR5cGUobW9kdWxlKSBpcyBub3Qgc3RyOgorICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJTVEFDS19HTE9CQUwgcmVxdWlyZXMgc3RyIikKKyAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5maW5kX2NsYXNzKG1vZHVsZSwgbmFtZSkpCisgICAgZGlzcGF0Y2hbU1RBQ0tfR0xPQkFMWzBdXSA9IGxvYWRfc3RhY2tfZ2xvYmFsCisKICAgICBkZWYgbG9hZF9leHQxKHNlbGYpOgotICAgICAgICBjb2RlID0gb3JkKHNlbGYucmVhZCgxKSkKKyAgICAgICAgY29kZSA9IHNlbGYucmVhZCgxKVswXQogICAgICAgICBzZWxmLmdldF9leHRlbnNpb24oY29kZSkKICAgICBkaXNwYXRjaFtFWFQxWzBdXSA9IGxvYWRfZXh0MQogCiAgICAgZGVmIGxvYWRfZXh0MihzZWxmKToKLSAgICAgICAgY29kZSA9IG1sb2FkcyhiJ2knICsgc2VsZi5yZWFkKDIpICsgYidcMDAwXDAwMCcpCisgICAgICAgIGNvZGUsID0gdW5wYWNrKCc8SCcsIHNlbGYucmVhZCgyKSkKICAgICAgICAgc2VsZi5nZXRfZXh0ZW5zaW9uKGNvZGUpCiAgICAgZGlzcGF0Y2hbRVhUMlswXV0gPSBsb2FkX2V4dDIKIAogICAgIGRlZiBsb2FkX2V4dDQoc2VsZik6Ci0gICAgICAgIGNvZGUgPSBtbG9hZHMoYidpJyArIHNlbGYucmVhZCg0KSkKKyAgICAgICAgY29kZSwgPSB1bnBhY2soJzxpJywgc2VsZi5yZWFkKDQpKQogICAgICAgICBzZWxmLmdldF9leHRlbnNpb24oY29kZSkKICAgICBkaXNwYXRjaFtFWFQ0WzBdXSA9IGxvYWRfZXh0NAogCkBAIC0xMTI3LDcgKzEzNjcsNyBAQAogICAgICAgICBpZiBub3Qga2V5OgogICAgICAgICAgICAgaWYgY29kZSA8PSAwOiAjIG5vdGUgdGhhdCAwIGlzIGZvcmJpZGRlbgogICAgICAgICAgICAgICAgICMgQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZS4KLSAgICAgICAgICAgICAgICByYWlzZSBVbnBpY2tsaW5nRXJyb3IoIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIik7CisgICAgICAgICAgICAgICAgcmFpc2UgVW5waWNrbGluZ0Vycm9yKCJFWFQgc3BlY2lmaWVzIGNvZGUgPD0gMCIpCiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bnJlZ2lzdGVyZWQgZXh0ZW5zaW9uIGNvZGUgJWQiICUgY29kZSkKICAgICAgICAgb2JqID0gc2VsZi5maW5kX2NsYXNzKCprZXkpCiAgICAgICAgIF9leHRlbnNpb25fY2FjaGVbY29kZV0gPSBvYmoKQEAgLTExMzgsMjQgKzEzNzgsMTcgQEAKICAgICAgICAgaWYgc2VsZi5wcm90byA8IDMgYW5kIHNlbGYuZml4X2ltcG9ydHM6CiAgICAgICAgICAgICBpZiAobW9kdWxlLCBuYW1lKSBpbiBfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkc6CiAgICAgICAgICAgICAgICAgbW9kdWxlLCBuYW1lID0gX2NvbXBhdF9waWNrbGUuTkFNRV9NQVBQSU5HWyhtb2R1bGUsIG5hbWUpXQotICAgICAgICAgICAgaWYgbW9kdWxlIGluIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HOgorICAgICAgICAgICAgZWxpZiBtb2R1bGUgaW4gX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkc6CiAgICAgICAgICAgICAgICAgbW9kdWxlID0gX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkdbbW9kdWxlXQogICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZSwgbGV2ZWw9MCkKLSAgICAgICAgbW9kID0gc3lzLm1vZHVsZXNbbW9kdWxlXQotICAgICAgICBrbGFzcyA9IGdldGF0dHIobW9kLCBuYW1lKQotICAgICAgICByZXR1cm4ga2xhc3MKKyAgICAgICAgcmV0dXJuIF9nZXRhdHRyaWJ1dGUoc3lzLm1vZHVsZXNbbW9kdWxlXSwgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcXVhbG5hbWU9c2VsZi5wcm90byA+PSA0KQogCiAgICAgZGVmIGxvYWRfcmVkdWNlKHNlbGYpOgogICAgICAgICBzdGFjayA9IHNlbGYuc3RhY2sKICAgICAgICAgYXJncyA9IHN0YWNrLnBvcCgpCiAgICAgICAgIGZ1bmMgPSBzdGFja1stMV0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdmFsdWUgPSBmdW5jKCphcmdzKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICBwcmludChzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgICAgIHByaW50KGZ1bmMsIGFyZ3MpCi0gICAgICAgICAgICByYWlzZQotICAgICAgICBzdGFja1stMV0gPSB2YWx1ZQorICAgICAgICBzdGFja1stMV0gPSBmdW5jKCphcmdzKQogICAgIGRpc3BhdGNoW1JFRFVDRVswXV0gPSBsb2FkX3JlZHVjZQogCiAgICAgZGVmIGxvYWRfcG9wKHNlbGYpOgpAQCAtMTE4MSw3ICsxNDE0LDcgQEAKICAgICAgICAgc2VsZi5hcHBlbmQoc2VsZi5tZW1vW2ldKQogICAgIGRpc3BhdGNoW0JJTkdFVFswXV0gPSBsb2FkX2JpbmdldAogCi0gICAgZGVmIGxvYWRfbG9uZ19iaW5nZXQoc2VsZiwgdW5wYWNrPXN0cnVjdC51bnBhY2spOgorICAgIGRlZiBsb2FkX2xvbmdfYmluZ2V0KHNlbGYpOgogICAgICAgICBpLCA9IHVucGFjaygnPEknLCBzZWxmLnJlYWQoNCkpCiAgICAgICAgIHNlbGYuYXBwZW5kKHNlbGYubWVtb1tpXSkKICAgICBkaXNwYXRjaFtMT05HX0JJTkdFVFswXV0gPSBsb2FkX2xvbmdfYmluZ2V0CkBAIC0xMjAwLDEzICsxNDMzLDE4IEBACiAgICAgICAgIHNlbGYubWVtb1tpXSA9IHNlbGYuc3RhY2tbLTFdCiAgICAgZGlzcGF0Y2hbQklOUFVUWzBdXSA9IGxvYWRfYmlucHV0CiAKLSAgICBkZWYgbG9hZF9sb25nX2JpbnB1dChzZWxmLCB1bnBhY2s9c3RydWN0LnVucGFjaywgbWF4c2l6ZT1zeXMubWF4c2l6ZSk6CisgICAgZGVmIGxvYWRfbG9uZ19iaW5wdXQoc2VsZik6CiAgICAgICAgIGksID0gdW5wYWNrKCc8SScsIHNlbGYucmVhZCg0KSkKICAgICAgICAgaWYgaSA+IG1heHNpemU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJuZWdhdGl2ZSBMT05HX0JJTlBVVCBhcmd1bWVudCIpCiAgICAgICAgIHNlbGYubWVtb1tpXSA9IHNlbGYuc3RhY2tbLTFdCiAgICAgZGlzcGF0Y2hbTE9OR19CSU5QVVRbMF1dID0gbG9hZF9sb25nX2JpbnB1dAogCisgICAgZGVmIGxvYWRfbWVtb2l6ZShzZWxmKToKKyAgICAgICAgbWVtbyA9IHNlbGYubWVtbworICAgICAgICBtZW1vW2xlbihtZW1vKV0gPSBzZWxmLnN0YWNrWy0xXQorICAgIGRpc3BhdGNoW01FTU9JWkVbMF1dID0gbG9hZF9tZW1vaXplCisKICAgICBkZWYgbG9hZF9hcHBlbmQoc2VsZik6CiAgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjawogICAgICAgICB2YWx1ZSA9IHN0YWNrLnBvcCgpCkBAIC0xMjQ2LDEyICsxNDg0LDI2IEBACiAgICAgICAgIGRlbCBzdGFja1ttYXJrOl0KICAgICBkaXNwYXRjaFtTRVRJVEVNU1swXV0gPSBsb2FkX3NldGl0ZW1zCiAKKyAgICBkZWYgbG9hZF9hZGRpdGVtcyhzZWxmKToKKyAgICAgICAgc3RhY2sgPSBzZWxmLnN0YWNrCisgICAgICAgIG1hcmsgPSBzZWxmLm1hcmtlcigpCisgICAgICAgIHNldF9vYmogPSBzdGFja1ttYXJrIC0gMV0KKyAgICAgICAgaXRlbXMgPSBzdGFja1ttYXJrICsgMTpdCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2V0X29iaiwgc2V0KToKKyAgICAgICAgICAgIHNldF9vYmoudXBkYXRlKGl0ZW1zKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkID0gc2V0X29iai5hZGQKKyAgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZW1zOgorICAgICAgICAgICAgICAgIGFkZChpdGVtKQorICAgICAgICBkZWwgc3RhY2tbbWFyazpdCisgICAgZGlzcGF0Y2hbQURESVRFTVNbMF1dID0gbG9hZF9hZGRpdGVtcworCiAgICAgZGVmIGxvYWRfYnVpbGQoc2VsZik6CiAgICAgICAgIHN0YWNrID0gc2VsZi5zdGFjawogICAgICAgICBzdGF0ZSA9IHN0YWNrLnBvcCgpCiAgICAgICAgIGluc3QgPSBzdGFja1stMV0KICAgICAgICAgc2V0c3RhdGUgPSBnZXRhdHRyKGluc3QsICJfX3NldHN0YXRlX18iLCBOb25lKQotICAgICAgICBpZiBzZXRzdGF0ZToKKyAgICAgICAgaWYgc2V0c3RhdGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzZXRzdGF0ZShzdGF0ZSkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBzbG90c3RhdGUgPSBOb25lCkBAIC0xMjc5LDg2ICsxNTMxLDQ2IEBACiAgICAgICAgIHJhaXNlIF9TdG9wKHZhbHVlKQogICAgIGRpc3BhdGNoW1NUT1BbMF1dID0gbG9hZF9zdG9wCiAKLSMgRW5jb2RlL2RlY29kZSBpbnRzLgotCi1kZWYgZW5jb2RlX2xvbmcoeCk6Ci0gICAgciIiIkVuY29kZSBhIGxvbmcgdG8gYSB0d28ncyBjb21wbGVtZW50IGxpdHRsZS1lbmRpYW4gYmluYXJ5IHN0cmluZy4KLSAgICBOb3RlIHRoYXQgMCBpcyBhIHNwZWNpYWwgY2FzZSwgcmV0dXJuaW5nIGFuIGVtcHR5IHN0cmluZywgdG8gc2F2ZSBhCi0gICAgYnl0ZSBpbiB0aGUgTE9ORzEgcGlja2xpbmcgY29udGV4dC4KLQotICAgID4+PiBlbmNvZGVfbG9uZygwKQotICAgIGInJwotICAgID4+PiBlbmNvZGVfbG9uZygyNTUpCi0gICAgYidceGZmXHgwMCcKLSAgICA+Pj4gZW5jb2RlX2xvbmcoMzI3NjcpCi0gICAgYidceGZmXHg3ZicKLSAgICA+Pj4gZW5jb2RlX2xvbmcoLTI1NikKLSAgICBiJ1x4MDBceGZmJwotICAgID4+PiBlbmNvZGVfbG9uZygtMzI3NjgpCi0gICAgYidceDAwXHg4MCcKLSAgICA+Pj4gZW5jb2RlX2xvbmcoLTEyOCkKLSAgICBiJ1x4ODAnCi0gICAgPj4+IGVuY29kZV9sb25nKDEyNykKLSAgICBiJ1x4N2YnCi0gICAgPj4+Ci0gICAgIiIiCi0gICAgaWYgeCA9PSAwOgotICAgICAgICByZXR1cm4gYicnCi0gICAgbmJ5dGVzID0gKHguYml0X2xlbmd0aCgpID4+IDMpICsgMQotICAgIHJlc3VsdCA9IHgudG9fYnl0ZXMobmJ5dGVzLCBieXRlb3JkZXI9J2xpdHRsZScsIHNpZ25lZD1UcnVlKQotICAgIGlmIHggPCAwIGFuZCBuYnl0ZXMgPiAxOgotICAgICAgICBpZiByZXN1bHRbLTFdID09IDB4ZmYgYW5kIChyZXN1bHRbLTJdICYgMHg4MCkgIT0gMDoKLSAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdFs6LTFdCi0gICAgcmV0dXJuIHJlc3VsdAotCi1kZWYgZGVjb2RlX2xvbmcoZGF0YSk6Ci0gICAgciIiIkRlY29kZSBhbiBpbnQgZnJvbSBhIHR3bydzIGNvbXBsZW1lbnQgbGl0dGxlLWVuZGlhbiBiaW5hcnkgc3RyaW5nLgotCi0gICAgPj4+IGRlY29kZV9sb25nKGInJykKLSAgICAwCi0gICAgPj4+IGRlY29kZV9sb25nKGIiXHhmZlx4MDAiKQotICAgIDI1NQotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ZmZceDdmIikKLSAgICAzMjc2NwotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4MDBceGZmIikKLSAgICAtMjU2Ci0gICAgPj4+IGRlY29kZV9sb25nKGIiXHgwMFx4ODAiKQotICAgIC0zMjc2OAotICAgID4+PiBkZWNvZGVfbG9uZyhiIlx4ODAiKQotICAgIC0xMjgKLSAgICA+Pj4gZGVjb2RlX2xvbmcoYiJceDdmIikKLSAgICAxMjcKLSAgICAiIiIKLSAgICByZXR1cm4gaW50LmZyb21fYnl0ZXMoZGF0YSwgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9VHJ1ZSkKIAogIyBTaG9ydGhhbmRzCiAKLWRlZiBkdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6Ci0gICAgUGlja2xlcihmaWxlLCBwcm90b2NvbCwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMpLmR1bXAob2JqKQorZGVmIF9kdW1wKG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CisgICAgX1BpY2tsZXIoZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKIAotZGVmIGR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CitkZWYgX2R1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSk6CiAgICAgZiA9IGlvLkJ5dGVzSU8oKQotICAgIFBpY2tsZXIoZiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzPWZpeF9pbXBvcnRzKS5kdW1wKG9iaikKKyAgICBfUGlja2xlcihmLCBwcm90b2NvbCwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMpLmR1bXAob2JqKQogICAgIHJlcyA9IGYuZ2V0dmFsdWUoKQogICAgIGFzc2VydCBpc2luc3RhbmNlKHJlcywgYnl0ZXNfdHlwZXMpCiAgICAgcmV0dXJuIHJlcwogCi1kZWYgbG9hZChmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0iQVNDSUkiLCBlcnJvcnM9InN0cmljdCIpOgotICAgIHJldHVybiBVbnBpY2tsZXIoZmlsZSwgZml4X2ltcG9ydHM9Zml4X2ltcG9ydHMsCitkZWYgX2xvYWQoZmlsZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSwgZW5jb2Rpbmc9IkFTQ0lJIiwgZXJyb3JzPSJzdHJpY3QiKToKKyAgICByZXR1cm4gX1VucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKS5sb2FkKCkKIAotZGVmIGxvYWRzKHMsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CitkZWYgX2xvYWRzKHMsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSJBU0NJSSIsIGVycm9ycz0ic3RyaWN0Iik6CiAgICAgaWYgaXNpbnN0YW5jZShzLCBzdHIpOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIkNhbid0IGxvYWQgcGlja2xlIGZyb20gdW5pY29kZSBzdHJpbmciKQogICAgIGZpbGUgPSBpby5CeXRlc0lPKHMpCi0gICAgcmV0dXJuIFVucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKLSAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPWVuY29kaW5nLCBlcnJvcnM9ZXJyb3JzKS5sb2FkKCkKKyAgICByZXR1cm4gX1VucGlja2xlcihmaWxlLCBmaXhfaW1wb3J0cz1maXhfaW1wb3J0cywKKyAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPWVycm9ycykubG9hZCgpCiAKICMgVXNlIHRoZSBmYXN0ZXIgX3BpY2tsZSBpZiBwb3NzaWJsZQogdHJ5OgotICAgIGZyb20gX3BpY2tsZSBpbXBvcnQgKgorICAgIGZyb20gX3BpY2tsZSBpbXBvcnQgKAorICAgICAgICBQaWNrbGVFcnJvciwKKyAgICAgICAgUGlja2xpbmdFcnJvciwKKyAgICAgICAgVW5waWNrbGluZ0Vycm9yLAorICAgICAgICBQaWNrbGVyLAorICAgICAgICBVbnBpY2tsZXIsCisgICAgICAgIGR1bXAsCisgICAgICAgIGR1bXBzLAorICAgICAgICBsb2FkLAorICAgICAgICBsb2FkcworICAgICkKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBQaWNrbGVyLCBVbnBpY2tsZXIgPSBfUGlja2xlciwgX1VucGlja2xlcgorICAgIGR1bXAsIGR1bXBzLCBsb2FkLCBsb2FkcyA9IF9kdW1wLCBfZHVtcHMsIF9sb2FkLCBfbG9hZHMKIAogIyBEb2N0ZXN0CiBkZWYgX3Rlc3QoKToKZGlmZiAtLWdpdCBhL0xpYi9waWNrbGV0b29scy5weSBiL0xpYi9waWNrbGV0b29scy5weQppbmRleCA2MTJmYThmLi5jZjVkZjQxIDEwMDY0NAotLS0gYS9MaWIvcGlja2xldG9vbHMucHkKKysrIGIvTGliL3BpY2tsZXRvb2xzLnB5CkBAIC0xMSw2ICsxMSw3IEBACiAnJycKIAogaW1wb3J0IGNvZGVjcworaW1wb3J0IGlvCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgcmUKIGltcG9ydCBzeXMKQEAgLTM0LDExOSArMzUsMTE4IEBACiAjICAgYnkgYSBsYXRlciBHRVQuCiAKIAotIiIiCi0iQSBwaWNrbGUiIGlzIGEgcHJvZ3JhbSBmb3IgYSB2aXJ0dWFsIHBpY2tsZSBtYWNoaW5lIChQTSwgYnV0IG1vcmUgYWNjdXJhdGVseQotY2FsbGVkIGFuIHVucGlja2xpbmcgbWFjaGluZSkuICBJdCdzIGEgc2VxdWVuY2Ugb2Ygb3Bjb2RlcywgaW50ZXJwcmV0ZWQgYnkgdGhlCi1QTSwgYnVpbGRpbmcgYW4gYXJiaXRyYXJpbHkgY29tcGxleCBQeXRob24gb2JqZWN0LgorIyAiQSBwaWNrbGUiIGlzIGEgcHJvZ3JhbSBmb3IgYSB2aXJ0dWFsIHBpY2tsZSBtYWNoaW5lIChQTSwgYnV0IG1vcmUgYWNjdXJhdGVseQorIyBjYWxsZWQgYW4gdW5waWNrbGluZyBtYWNoaW5lKS4gIEl0J3MgYSBzZXF1ZW5jZSBvZiBvcGNvZGVzLCBpbnRlcnByZXRlZCBieSB0aGUKKyMgUE0sIGJ1aWxkaW5nIGFuIGFyYml0cmFyaWx5IGNvbXBsZXggUHl0aG9uIG9iamVjdC4KKyMKKyMgRm9yIHRoZSBtb3N0IHBhcnQsIHRoZSBQTSBpcyB2ZXJ5IHNpbXBsZTogIHRoZXJlIGFyZSBubyBsb29waW5nLCB0ZXN0aW5nLCBvcgorIyBjb25kaXRpb25hbCBpbnN0cnVjdGlvbnMsIG5vIGFyaXRobWV0aWMgYW5kIG5vIGZ1bmN0aW9uIGNhbGxzLiAgT3Bjb2RlcyBhcmUKKyMgZXhlY3V0ZWQgb25jZSBlYWNoLCBmcm9tIGZpcnN0IHRvIGxhc3QsIHVudGlsIGEgU1RPUCBvcGNvZGUgaXMgcmVhY2hlZC4KKyMKKyMgVGhlIFBNIGhhcyB0d28gZGF0YSBhcmVhcywgInRoZSBzdGFjayIgYW5kICJ0aGUgbWVtbyIuCisjCisjIE1hbnkgb3Bjb2RlcyBwdXNoIFB5dGhvbiBvYmplY3RzIG9udG8gdGhlIHN0YWNrOyBlLmcuLCBJTlQgcHVzaGVzIGEgUHl0aG9uCisjIGludGVnZXIgb2JqZWN0IG9uIHRoZSBzdGFjaywgd2hvc2UgdmFsdWUgaXMgZ290dGVuIGZyb20gYSBkZWNpbWFsIHN0cmluZworIyBsaXRlcmFsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgSU5UIG9wY29kZSBpbiB0aGUgcGlja2xlIGJ5dGVzdHJlYW0uICBPdGhlcgorIyBvcGNvZGVzIHRha2UgUHl0aG9uIG9iamVjdHMgb2ZmIHRoZSBzdGFjay4gIFRoZSByZXN1bHQgb2YgdW5waWNrbGluZyBpcworIyB3aGF0ZXZlciBvYmplY3QgaXMgbGVmdCBvbiB0aGUgc3RhY2sgd2hlbiB0aGUgZmluYWwgU1RPUCBvcGNvZGUgaXMgZXhlY3V0ZWQuCisjCisjIFRoZSBtZW1vIGlzIHNpbXBseSBhbiBhcnJheSBvZiBvYmplY3RzLCBvciBpdCBjYW4gYmUgaW1wbGVtZW50ZWQgYXMgYSBkaWN0CisjIG1hcHBpbmcgbGl0dGxlIGludGVnZXJzIHRvIG9iamVjdHMuICBUaGUgbWVtbyBzZXJ2ZXMgYXMgdGhlIFBNJ3MgImxvbmcgdGVybQorIyBtZW1vcnkiLCBhbmQgdGhlIGxpdHRsZSBpbnRlZ2VycyBpbmRleGluZyB0aGUgbWVtbyBhcmUgYWtpbiB0byB2YXJpYWJsZQorIyBuYW1lcy4gIFNvbWUgb3Bjb2RlcyBwb3AgYSBzdGFjayBvYmplY3QgaW50byB0aGUgbWVtbyBhdCBhIGdpdmVuIGluZGV4LAorIyBhbmQgb3RoZXJzIHB1c2ggYSBtZW1vIG9iamVjdCBhdCBhIGdpdmVuIGluZGV4IG9udG8gdGhlIHN0YWNrIGFnYWluLgorIworIyBBdCBoZWFydCwgdGhhdCdzIGFsbCB0aGUgUE0gaGFzLiAgU3VidGxldGllcyBhcmlzZSBmb3IgdGhlc2UgcmVhc29uczoKKyMKKyMgKyBPYmplY3QgaWRlbnRpdHkuICBPYmplY3RzIGNhbiBiZSBhcmJpdHJhcmlseSBjb21wbGV4LCBhbmQgc3Vib2JqZWN0cworIyAgIG1heSBiZSBzaGFyZWQgKGZvciBleGFtcGxlLCB0aGUgbGlzdCBbYSwgYV0gcmVmZXJzIHRvIHRoZSBzYW1lIG9iamVjdCBhCisjICAgdHdpY2UpLiAgSXQgY2FuIGJlIHZpdGFsIHRoYXQgdW5waWNrbGluZyByZWNyZWF0ZSBhbiBpc29tb3JwaGljIG9iamVjdAorIyAgIGdyYXBoLCBmYWl0aGZ1bGx5IHJlcHJvZHVjaW5nIHNoYXJpbmcuCisjCisjICsgUmVjdXJzaXZlIG9iamVjdHMuICBGb3IgZXhhbXBsZSwgYWZ0ZXIgIkwgPSBbXTsgTC5hcHBlbmQoTCkiLCBMIGlzIGEKKyMgICBsaXN0LCBhbmQgTFswXSBpcyB0aGUgc2FtZSBsaXN0LiAgVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvYmplY3QgaWRlbnRpdHkKKyMgICBwb2ludCwgYW5kIHNvbWUgc2VxdWVuY2VzIG9mIHBpY2tsZSBvcGNvZGVzIGFyZSBzdWJ0bGUgaW4gb3JkZXIgdG8KKyMgICBnZXQgdGhlIHJpZ2h0IHJlc3VsdCBpbiBhbGwgY2FzZXMuCisjCisjICsgVGhpbmdzIHBpY2tsZSBkb2Vzbid0IGtub3cgZXZlcnl0aGluZyBhYm91dC4gIEV4YW1wbGVzIG9mIHRoaW5ncyBwaWNrbGUKKyMgICBkb2VzIGtub3cgZXZlcnl0aGluZyBhYm91dCBhcmUgUHl0aG9uJ3MgYnVpbHRpbiBzY2FsYXIgYW5kIGNvbnRhaW5lcgorIyAgIHR5cGVzLCBsaWtlIGludHMgYW5kIHR1cGxlcy4gIFRoZXkgZ2VuZXJhbGx5IGhhdmUgb3Bjb2RlcyBkZWRpY2F0ZWQgdG8KKyMgICB0aGVtLiAgRm9yIHRoaW5ncyBsaWtlIG1vZHVsZSByZWZlcmVuY2VzIGFuZCBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkCisjICAgY2xhc3NlcywgcGlja2xlJ3Mga25vd2xlZGdlIGlzIGxpbWl0ZWQuICBIaXN0b3JpY2FsbHksIG1hbnkgZW5oYW5jZW1lbnRzCisjICAgaGF2ZSBiZWVuIG1hZGUgdG8gdGhlIHBpY2tsZSBwcm90b2NvbCBpbiBvcmRlciB0byBkbyBhIGJldHRlciAoZmFzdGVyLAorIyAgIGFuZC9vciBtb3JlIGNvbXBhY3QpIGpvYiBvbiB0aG9zZS4KKyMKKyMgKyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFuZCBtaWNyby1vcHRpbWl6YXRpb24uICBBcyBleHBsYWluZWQgYmVsb3csCisjICAgcGlja2xlIG9wY29kZXMgbmV2ZXIgZ28gYXdheSwgbm90IGV2ZW4gd2hlbiBiZXR0ZXIgd2F5cyB0byBkbyBhIHRoaW5nCisjICAgZ2V0IGludmVudGVkLiAgVGhlIHJlcGVydG9pcmUgb2YgdGhlIFBNIGp1c3Qga2VlcHMgZ3Jvd2luZyBvdmVyIHRpbWUuCisjICAgRm9yIGV4YW1wbGUsIHByb3RvY29sIDAgaGFkIHR3byBvcGNvZGVzIGZvciBidWlsZGluZyBQeXRob24gaW50ZWdlcnMgKElOVAorIyAgIGFuZCBMT05HKSwgcHJvdG9jb2wgMSBhZGRlZCB0aHJlZSBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZiBzaG9ydAorIyAgIGludGVnZXJzLCBhbmQgcHJvdG9jb2wgMiBhZGRlZCB0d28gbW9yZSBmb3IgbW9yZS1lZmZpY2llbnQgcGlja2xpbmcgb2YKKyMgICBsb25nIGludGVnZXJzIChiZWZvcmUgcHJvdG9jb2wgMiwgdGhlIG9ubHkgd2F5cyB0byBwaWNrbGUgYSBQeXRob24gbG9uZworIyAgIHRvb2sgdGltZSBxdWFkcmF0aWMgaW4gdGhlIG51bWJlciBvZiBkaWdpdHMsIGZvciBib3RoIHBpY2tsaW5nIGFuZAorIyAgIHVucGlja2xpbmcpLiAgIk9wY29kZSBibG9hdCIgaXNuJ3Qgc28gbXVjaCBhIHN1YnRsZXR5IGFzIGEgc291cmNlIG9mCisjICAgd2VhcnlpbmcgY29tcGxpY2F0aW9uLgorIworIworIyBQaWNrbGUgcHJvdG9jb2xzOgorIworIyBGb3IgY29tcGF0aWJpbGl0eSwgdGhlIG1lYW5pbmcgb2YgYSBwaWNrbGUgb3Bjb2RlIG5ldmVyIGNoYW5nZXMuICBJbnN0ZWFkIG5ldworIyBwaWNrbGUgb3Bjb2RlcyBnZXQgYWRkZWQsIGFuZCBlYWNoIHZlcnNpb24ncyB1bnBpY2tsZXIgY2FuIGhhbmRsZSBhbGwgdGhlCisjIHBpY2tsZSBvcGNvZGVzIGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucyB0byBkYXRlLiAgU28gb2xkIHBpY2tsZXMgY29udGludWUgdG8KKyMgYmUgcmVhZGFibGUgZm9yZXZlci4gIFRoZSBwaWNrbGVyIGNhbiBnZW5lcmFsbHkgYmUgdG9sZCB0byByZXN0cmljdCBpdHNlbGYgdG8KKyMgdGhlIHN1YnNldCBvZiBvcGNvZGVzIGF2YWlsYWJsZSB1bmRlciBwcmV2aW91cyBwcm90b2NvbCB2ZXJzaW9ucyB0b28sIHNvIHRoYXQKKyMgdXNlcnMgY2FuIGNyZWF0ZSBwaWNrbGVzIHVuZGVyIHRoZSBjdXJyZW50IHZlcnNpb24gcmVhZGFibGUgYnkgb2xkZXIKKyMgdmVyc2lvbnMuICBIb3dldmVyLCBhIHBpY2tsZSBkb2VzIG5vdCBjb250YWluIGl0cyB2ZXJzaW9uIG51bWJlciBlbWJlZGRlZAorIyB3aXRoaW4gaXQuICBJZiBhbiBvbGRlciB1bnBpY2tsZXIgdHJpZXMgdG8gcmVhZCBhIHBpY2tsZSB1c2luZyBhIGxhdGVyCisjIHByb3RvY29sLCB0aGUgcmVzdWx0IGlzIG1vc3QgbGlrZWx5IGFuIGV4Y2VwdGlvbiBkdWUgdG8gc2VlaW5nIGFuIHVua25vd24gKGluCisjIHRoZSBvbGRlciB1bnBpY2tsZXIpIG9wY29kZS4KKyMKKyMgVGhlIG9yaWdpbmFsIHBpY2tsZSB1c2VkIHdoYXQncyBub3cgY2FsbGVkICJwcm90b2NvbCAwIiwgYW5kIHdoYXQgd2FzIGNhbGxlZAorIyAidGV4dCBtb2RlIiBiZWZvcmUgUHl0aG9uIDIuMy4gIFRoZSBlbnRpcmUgcGlja2xlIGJ5dGVzdHJlYW0gaXMgbWFkZSB1cCBvZgorIyBwcmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycywgcGx1cyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIsIGluIHByb3RvY29sIDAuCisjIFRoYXQncyB3aHkgaXQgd2FzIGNhbGxlZCB0ZXh0IG1vZGUuICBQcm90b2NvbCAwIGlzIHNtYWxsIGFuZCBlbGVnYW50LCBidXQKKyMgc29tZXRpbWVzIHBhaW5mdWxseSBpbmVmZmljaWVudC4KKyMKKyMgVGhlIHNlY29uZCBtYWpvciBzZXQgb2YgYWRkaXRpb25zIGlzIG5vdyBjYWxsZWQgInByb3RvY29sIDEiLCBhbmQgd2FzIGNhbGxlZAorIyAiYmluYXJ5IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhpcyBhZGRlZCBtYW55IG9wY29kZXMgd2l0aCBhcmd1bWVudHMKKyMgY29uc2lzdGluZyBvZiBhcmJpdHJhcnkgYnl0ZXMsIGluY2x1ZGluZyBOVUwgYnl0ZXMgYW5kIHVucHJpbnRhYmxlICJoaWdoIGJpdCIKKyMgYnl0ZXMuICBCaW5hcnkgbW9kZSBwaWNrbGVzIGNhbiBiZSBzdWJzdGFudGlhbGx5IHNtYWxsZXIgdGhhbiBlcXVpdmFsZW50CisjIHRleHQgbW9kZSBwaWNrbGVzLCBhbmQgc29tZXRpbWVzIGZhc3RlciB0b287IGUuZy4sIEJJTklOVCByZXByZXNlbnRzIGEgNC1ieXRlCisjIGludCBhcyA0IGJ5dGVzIGZvbGxvd2luZyB0aGUgb3Bjb2RlLCB3aGljaCBpcyBjaGVhcGVyIHRvIHVucGlja2xlIHRoYW4gdGhlCisjIChwZXJoYXBzKSAxMS1jaGFyYWN0ZXIgZGVjaW1hbCBzdHJpbmcgYXR0YWNoZWQgdG8gSU5ULiAgUHJvdG9jb2wgMSBhbHNvIGFkZGVkCisjIGEgbnVtYmVyIG9mIG9wY29kZXMgdGhhdCBvcGVyYXRlIG9uIG1hbnkgc3RhY2sgZWxlbWVudHMgYXQgb25jZSAobGlrZSBBUFBFTkRTCisjIGFuZCBTRVRJVEVNUyksIGFuZCAic2hvcnRjdXQiIG9wY29kZXMgKGxpa2UgRU1QVFlfRElDVCBhbmQgRU1QVFlfVFVQTEUpLgorIworIyBUaGUgdGhpcmQgbWFqb3Igc2V0IG9mIGFkZGl0aW9ucyBjYW1lIGluIFB5dGhvbiAyLjMsIGFuZCBpcyBjYWxsZWQgInByb3RvY29sCisjIDIiLiAgVGhpcyBhZGRlZDoKKyMKKyMgLSBBIGJldHRlciB3YXkgdG8gcGlja2xlIGluc3RhbmNlcyBvZiBuZXctc3R5bGUgY2xhc3NlcyAoTkVXT0JKKS4KKyMKKyMgLSBBIHdheSBmb3IgYSBwaWNrbGUgdG8gaWRlbnRpZnkgaXRzIHByb3RvY29sIChQUk9UTykuCisjCisjIC0gVGltZS0gYW5kIHNwYWNlLSBlZmZpY2llbnQgcGlja2xpbmcgb2YgbG9uZyBpbnRzIChMT05HezEsNH0pLgorIworIyAtIFNob3J0Y3V0cyBmb3Igc21hbGwgdHVwbGVzIChUVVBMRXsxLDIsM319LgorIworIyAtIERlZGljYXRlZCBvcGNvZGVzIGZvciBib29scyAoTkVXVFJVRSwgTkVXRkFMU0UpLgorIworIyAtIFRoZSAiZXh0ZW5zaW9uIHJlZ2lzdHJ5IiwgYSB2ZWN0b3Igb2YgcG9wdWxhciBvYmplY3RzIHRoYXQgY2FuIGJlIHB1c2hlZAorIyAgIGVmZmljaWVudGx5IGJ5IGluZGV4IChFWFR7MSwyLDR9KS4gIFRoaXMgaXMgYWtpbiB0byB0aGUgbWVtbyBhbmQgR0VULCBidXQKKyMgICB0aGUgcmVnaXN0cnkgY29udGVudHMgYXJlIHByZWRlZmluZWQgKHRoZXJlJ3Mgbm90aGluZyBha2luIHRvIHRoZSBtZW1vJ3MKKyMgICBQVVQpLgorIworIyBBbm90aGVyIGluZGVwZW5kZW50IGNoYW5nZSB3aXRoIFB5dGhvbiAyLjMgaXMgdGhlIGFiYW5kb25tZW50IG9mIGFueQorIyBwcmV0ZW5zZSB0aGF0IGl0IG1pZ2h0IGJlIHNhZmUgdG8gbG9hZCBwaWNrbGVzIHJlY2VpdmVkIGZyb20gdW50cnVzdGVkCisjIHBhcnRpZXMgLS0gbm8gc3VmZmljaWVudCBzZWN1cml0eSBhbmFseXNpcyBoYXMgYmVlbiBkb25lIHRvIGd1YXJhbnRlZQorIyB0aGlzIGFuZCB0aGVyZSBpc24ndCBhIHVzZSBjYXNlIHRoYXQgd2FycmFudHMgdGhlIGV4cGVuc2Ugb2Ygc3VjaCBhbgorIyBhbmFseXNpcy4KKyMKKyMgVG8gdGhpcyBlbmQsIGFsbCB0ZXN0cyBmb3IgX19zYWZlX2Zvcl91bnBpY2tsaW5nX18gb3IgZm9yCisjIGNvcHlyZWcuc2FmZV9jb25zdHJ1Y3RvcnMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgdW5waWNrbGluZyBjb2RlLgorIyBSZWZlcmVuY2VzIHRvIHRoZXNlIHZhcmlhYmxlcyBpbiB0aGUgZGVzY3JpcHRpb25zIGJlbG93IGFyZSB0byBiZSBzZWVuCisjIGFzIGRlc2NyaWJpbmcgdW5waWNrbGluZyBpbiBQeXRob24gMi4yIGFuZCBiZWZvcmUuCiAKLUZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgUE0gaXMgdmVyeSBzaW1wbGU6ICB0aGVyZSBhcmUgbm8gbG9vcGluZywgdGVzdGluZywgb3IKLWNvbmRpdGlvbmFsIGluc3RydWN0aW9ucywgbm8gYXJpdGhtZXRpYyBhbmQgbm8gZnVuY3Rpb24gY2FsbHMuICBPcGNvZGVzIGFyZQotZXhlY3V0ZWQgb25jZSBlYWNoLCBmcm9tIGZpcnN0IHRvIGxhc3QsIHVudGlsIGEgU1RPUCBvcGNvZGUgaXMgcmVhY2hlZC4KLQotVGhlIFBNIGhhcyB0d28gZGF0YSBhcmVhcywgInRoZSBzdGFjayIgYW5kICJ0aGUgbWVtbyIuCi0KLU1hbnkgb3Bjb2RlcyBwdXNoIFB5dGhvbiBvYmplY3RzIG9udG8gdGhlIHN0YWNrOyBlLmcuLCBJTlQgcHVzaGVzIGEgUHl0aG9uCi1pbnRlZ2VyIG9iamVjdCBvbiB0aGUgc3RhY2ssIHdob3NlIHZhbHVlIGlzIGdvdHRlbiBmcm9tIGEgZGVjaW1hbCBzdHJpbmcKLWxpdGVyYWwgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBJTlQgb3Bjb2RlIGluIHRoZSBwaWNrbGUgYnl0ZXN0cmVhbS4gIE90aGVyCi1vcGNvZGVzIHRha2UgUHl0aG9uIG9iamVjdHMgb2ZmIHRoZSBzdGFjay4gIFRoZSByZXN1bHQgb2YgdW5waWNrbGluZyBpcwotd2hhdGV2ZXIgb2JqZWN0IGlzIGxlZnQgb24gdGhlIHN0YWNrIHdoZW4gdGhlIGZpbmFsIFNUT1Agb3Bjb2RlIGlzIGV4ZWN1dGVkLgotCi1UaGUgbWVtbyBpcyBzaW1wbHkgYW4gYXJyYXkgb2Ygb2JqZWN0cywgb3IgaXQgY2FuIGJlIGltcGxlbWVudGVkIGFzIGEgZGljdAotbWFwcGluZyBsaXR0bGUgaW50ZWdlcnMgdG8gb2JqZWN0cy4gIFRoZSBtZW1vIHNlcnZlcyBhcyB0aGUgUE0ncyAibG9uZyB0ZXJtCi1tZW1vcnkiLCBhbmQgdGhlIGxpdHRsZSBpbnRlZ2VycyBpbmRleGluZyB0aGUgbWVtbyBhcmUgYWtpbiB0byB2YXJpYWJsZQotbmFtZXMuICBTb21lIG9wY29kZXMgcG9wIGEgc3RhY2sgb2JqZWN0IGludG8gdGhlIG1lbW8gYXQgYSBnaXZlbiBpbmRleCwKLWFuZCBvdGhlcnMgcHVzaCBhIG1lbW8gb2JqZWN0IGF0IGEgZ2l2ZW4gaW5kZXggb250byB0aGUgc3RhY2sgYWdhaW4uCi0KLUF0IGhlYXJ0LCB0aGF0J3MgYWxsIHRoZSBQTSBoYXMuICBTdWJ0bGV0aWVzIGFyaXNlIGZvciB0aGVzZSByZWFzb25zOgotCi0rIE9iamVjdCBpZGVudGl0eS4gIE9iamVjdHMgY2FuIGJlIGFyYml0cmFyaWx5IGNvbXBsZXgsIGFuZCBzdWJvYmplY3RzCi0gIG1heSBiZSBzaGFyZWQgKGZvciBleGFtcGxlLCB0aGUgbGlzdCBbYSwgYV0gcmVmZXJzIHRvIHRoZSBzYW1lIG9iamVjdCBhCi0gIHR3aWNlKS4gIEl0IGNhbiBiZSB2aXRhbCB0aGF0IHVucGlja2xpbmcgcmVjcmVhdGUgYW4gaXNvbW9ycGhpYyBvYmplY3QKLSAgZ3JhcGgsIGZhaXRoZnVsbHkgcmVwcm9kdWNpbmcgc2hhcmluZy4KLQotKyBSZWN1cnNpdmUgb2JqZWN0cy4gIEZvciBleGFtcGxlLCBhZnRlciAiTCA9IFtdOyBMLmFwcGVuZChMKSIsIEwgaXMgYQotICBsaXN0LCBhbmQgTFswXSBpcyB0aGUgc2FtZSBsaXN0LiAgVGhpcyBpcyByZWxhdGVkIHRvIHRoZSBvYmplY3QgaWRlbnRpdHkKLSAgcG9pbnQsIGFuZCBzb21lIHNlcXVlbmNlcyBvZiBwaWNrbGUgb3Bjb2RlcyBhcmUgc3VidGxlIGluIG9yZGVyIHRvCi0gIGdldCB0aGUgcmlnaHQgcmVzdWx0IGluIGFsbCBjYXNlcy4KLQotKyBUaGluZ3MgcGlja2xlIGRvZXNuJ3Qga25vdyBldmVyeXRoaW5nIGFib3V0LiAgRXhhbXBsZXMgb2YgdGhpbmdzIHBpY2tsZQotICBkb2VzIGtub3cgZXZlcnl0aGluZyBhYm91dCBhcmUgUHl0aG9uJ3MgYnVpbHRpbiBzY2FsYXIgYW5kIGNvbnRhaW5lcgotICB0eXBlcywgbGlrZSBpbnRzIGFuZCB0dXBsZXMuICBUaGV5IGdlbmVyYWxseSBoYXZlIG9wY29kZXMgZGVkaWNhdGVkIHRvCi0gIHRoZW0uICBGb3IgdGhpbmdzIGxpa2UgbW9kdWxlIHJlZmVyZW5jZXMgYW5kIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQKLSAgY2xhc3NlcywgcGlja2xlJ3Mga25vd2xlZGdlIGlzIGxpbWl0ZWQuICBIaXN0b3JpY2FsbHksIG1hbnkgZW5oYW5jZW1lbnRzCi0gIGhhdmUgYmVlbiBtYWRlIHRvIHRoZSBwaWNrbGUgcHJvdG9jb2wgaW4gb3JkZXIgdG8gZG8gYSBiZXR0ZXIgKGZhc3RlciwKLSAgYW5kL29yIG1vcmUgY29tcGFjdCkgam9iIG9uIHRob3NlLgotCi0rIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYW5kIG1pY3JvLW9wdGltaXphdGlvbi4gIEFzIGV4cGxhaW5lZCBiZWxvdywKLSAgcGlja2xlIG9wY29kZXMgbmV2ZXIgZ28gYXdheSwgbm90IGV2ZW4gd2hlbiBiZXR0ZXIgd2F5cyB0byBkbyBhIHRoaW5nCi0gIGdldCBpbnZlbnRlZC4gIFRoZSByZXBlcnRvaXJlIG9mIHRoZSBQTSBqdXN0IGtlZXBzIGdyb3dpbmcgb3ZlciB0aW1lLgotICBGb3IgZXhhbXBsZSwgcHJvdG9jb2wgMCBoYWQgdHdvIG9wY29kZXMgZm9yIGJ1aWxkaW5nIFB5dGhvbiBpbnRlZ2VycyAoSU5UCi0gIGFuZCBMT05HKSwgcHJvdG9jb2wgMSBhZGRlZCB0aHJlZSBtb3JlIGZvciBtb3JlLWVmZmljaWVudCBwaWNrbGluZyBvZiBzaG9ydAotICBpbnRlZ2VycywgYW5kIHByb3RvY29sIDIgYWRkZWQgdHdvIG1vcmUgZm9yIG1vcmUtZWZmaWNpZW50IHBpY2tsaW5nIG9mCi0gIGxvbmcgaW50ZWdlcnMgKGJlZm9yZSBwcm90b2NvbCAyLCB0aGUgb25seSB3YXlzIHRvIHBpY2tsZSBhIFB5dGhvbiBsb25nCi0gIHRvb2sgdGltZSBxdWFkcmF0aWMgaW4gdGhlIG51bWJlciBvZiBkaWdpdHMsIGZvciBib3RoIHBpY2tsaW5nIGFuZAotICB1bnBpY2tsaW5nKS4gICJPcGNvZGUgYmxvYXQiIGlzbid0IHNvIG11Y2ggYSBzdWJ0bGV0eSBhcyBhIHNvdXJjZSBvZgotICB3ZWFyeWluZyBjb21wbGljYXRpb24uCi0KLQotUGlja2xlIHByb3RvY29sczoKLQotRm9yIGNvbXBhdGliaWxpdHksIHRoZSBtZWFuaW5nIG9mIGEgcGlja2xlIG9wY29kZSBuZXZlciBjaGFuZ2VzLiAgSW5zdGVhZCBuZXcKLXBpY2tsZSBvcGNvZGVzIGdldCBhZGRlZCwgYW5kIGVhY2ggdmVyc2lvbidzIHVucGlja2xlciBjYW4gaGFuZGxlIGFsbCB0aGUKLXBpY2tsZSBvcGNvZGVzIGluIGFsbCBwcm90b2NvbCB2ZXJzaW9ucyB0byBkYXRlLiAgU28gb2xkIHBpY2tsZXMgY29udGludWUgdG8KLWJlIHJlYWRhYmxlIGZvcmV2ZXIuICBUaGUgcGlja2xlciBjYW4gZ2VuZXJhbGx5IGJlIHRvbGQgdG8gcmVzdHJpY3QgaXRzZWxmIHRvCi10aGUgc3Vic2V0IG9mIG9wY29kZXMgYXZhaWxhYmxlIHVuZGVyIHByZXZpb3VzIHByb3RvY29sIHZlcnNpb25zIHRvbywgc28gdGhhdAotdXNlcnMgY2FuIGNyZWF0ZSBwaWNrbGVzIHVuZGVyIHRoZSBjdXJyZW50IHZlcnNpb24gcmVhZGFibGUgYnkgb2xkZXIKLXZlcnNpb25zLiAgSG93ZXZlciwgYSBwaWNrbGUgZG9lcyBub3QgY29udGFpbiBpdHMgdmVyc2lvbiBudW1iZXIgZW1iZWRkZWQKLXdpdGhpbiBpdC4gIElmIGFuIG9sZGVyIHVucGlja2xlciB0cmllcyB0byByZWFkIGEgcGlja2xlIHVzaW5nIGEgbGF0ZXIKLXByb3RvY29sLCB0aGUgcmVzdWx0IGlzIG1vc3QgbGlrZWx5IGFuIGV4Y2VwdGlvbiBkdWUgdG8gc2VlaW5nIGFuIHVua25vd24gKGluCi10aGUgb2xkZXIgdW5waWNrbGVyKSBvcGNvZGUuCi0KLVRoZSBvcmlnaW5hbCBwaWNrbGUgdXNlZCB3aGF0J3Mgbm93IGNhbGxlZCAicHJvdG9jb2wgMCIsIGFuZCB3aGF0IHdhcyBjYWxsZWQKLSJ0ZXh0IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhlIGVudGlyZSBwaWNrbGUgYnl0ZXN0cmVhbSBpcyBtYWRlIHVwIG9mCi1wcmludGFibGUgNy1iaXQgQVNDSUkgY2hhcmFjdGVycywgcGx1cyB0aGUgbmV3bGluZSBjaGFyYWN0ZXIsIGluIHByb3RvY29sIDAuCi1UaGF0J3Mgd2h5IGl0IHdhcyBjYWxsZWQgdGV4dCBtb2RlLiAgUHJvdG9jb2wgMCBpcyBzbWFsbCBhbmQgZWxlZ2FudCwgYnV0Ci1zb21ldGltZXMgcGFpbmZ1bGx5IGluZWZmaWNpZW50LgotCi1UaGUgc2Vjb25kIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgaXMgbm93IGNhbGxlZCAicHJvdG9jb2wgMSIsIGFuZCB3YXMgY2FsbGVkCi0iYmluYXJ5IG1vZGUiIGJlZm9yZSBQeXRob24gMi4zLiAgVGhpcyBhZGRlZCBtYW55IG9wY29kZXMgd2l0aCBhcmd1bWVudHMKLWNvbnNpc3Rpbmcgb2YgYXJiaXRyYXJ5IGJ5dGVzLCBpbmNsdWRpbmcgTlVMIGJ5dGVzIGFuZCB1bnByaW50YWJsZSAiaGlnaCBiaXQiCi1ieXRlcy4gIEJpbmFyeSBtb2RlIHBpY2tsZXMgY2FuIGJlIHN1YnN0YW50aWFsbHkgc21hbGxlciB0aGFuIGVxdWl2YWxlbnQKLXRleHQgbW9kZSBwaWNrbGVzLCBhbmQgc29tZXRpbWVzIGZhc3RlciB0b287IGUuZy4sIEJJTklOVCByZXByZXNlbnRzIGEgNC1ieXRlCi1pbnQgYXMgNCBieXRlcyBmb2xsb3dpbmcgdGhlIG9wY29kZSwgd2hpY2ggaXMgY2hlYXBlciB0byB1bnBpY2tsZSB0aGFuIHRoZQotKHBlcmhhcHMpIDExLWNoYXJhY3RlciBkZWNpbWFsIHN0cmluZyBhdHRhY2hlZCB0byBJTlQuICBQcm90b2NvbCAxIGFsc28gYWRkZWQKLWEgbnVtYmVyIG9mIG9wY29kZXMgdGhhdCBvcGVyYXRlIG9uIG1hbnkgc3RhY2sgZWxlbWVudHMgYXQgb25jZSAobGlrZSBBUFBFTkRTCi1hbmQgU0VUSVRFTVMpLCBhbmQgInNob3J0Y3V0IiBvcGNvZGVzIChsaWtlIEVNUFRZX0RJQ1QgYW5kIEVNUFRZX1RVUExFKS4KLQotVGhlIHRoaXJkIG1ham9yIHNldCBvZiBhZGRpdGlvbnMgY2FtZSBpbiBQeXRob24gMi4zLCBhbmQgaXMgY2FsbGVkICJwcm90b2NvbAotMiIuICBUaGlzIGFkZGVkOgotCi0tIEEgYmV0dGVyIHdheSB0byBwaWNrbGUgaW5zdGFuY2VzIG9mIG5ldy1zdHlsZSBjbGFzc2VzIChORVdPQkopLgotCi0tIEEgd2F5IGZvciBhIHBpY2tsZSB0byBpZGVudGlmeSBpdHMgcHJvdG9jb2wgKFBST1RPKS4KLQotLSBUaW1lLSBhbmQgc3BhY2UtIGVmZmljaWVudCBwaWNrbGluZyBvZiBsb25nIGludHMgKExPTkd7MSw0fSkuCi0KLS0gU2hvcnRjdXRzIGZvciBzbWFsbCB0dXBsZXMgKFRVUExFezEsMiwzfX0uCi0KLS0gRGVkaWNhdGVkIG9wY29kZXMgZm9yIGJvb2xzIChORVdUUlVFLCBORVdGQUxTRSkuCi0KLS0gVGhlICJleHRlbnNpb24gcmVnaXN0cnkiLCBhIHZlY3RvciBvZiBwb3B1bGFyIG9iamVjdHMgdGhhdCBjYW4gYmUgcHVzaGVkCi0gIGVmZmljaWVudGx5IGJ5IGluZGV4IChFWFR7MSwyLDR9KS4gIFRoaXMgaXMgYWtpbiB0byB0aGUgbWVtbyBhbmQgR0VULCBidXQKLSAgdGhlIHJlZ2lzdHJ5IGNvbnRlbnRzIGFyZSBwcmVkZWZpbmVkICh0aGVyZSdzIG5vdGhpbmcgYWtpbiB0byB0aGUgbWVtbydzCi0gIFBVVCkuCi0KLUFub3RoZXIgaW5kZXBlbmRlbnQgY2hhbmdlIHdpdGggUHl0aG9uIDIuMyBpcyB0aGUgYWJhbmRvbm1lbnQgb2YgYW55Ci1wcmV0ZW5zZSB0aGF0IGl0IG1pZ2h0IGJlIHNhZmUgdG8gbG9hZCBwaWNrbGVzIHJlY2VpdmVkIGZyb20gdW50cnVzdGVkCi1wYXJ0aWVzIC0tIG5vIHN1ZmZpY2llbnQgc2VjdXJpdHkgYW5hbHlzaXMgaGFzIGJlZW4gZG9uZSB0byBndWFyYW50ZWUKLXRoaXMgYW5kIHRoZXJlIGlzbid0IGEgdXNlIGNhc2UgdGhhdCB3YXJyYW50cyB0aGUgZXhwZW5zZSBvZiBzdWNoIGFuCi1hbmFseXNpcy4KLQotVG8gdGhpcyBlbmQsIGFsbCB0ZXN0cyBmb3IgX19zYWZlX2Zvcl91bnBpY2tsaW5nX18gb3IgZm9yCi1jb3B5cmVnLnNhZmVfY29uc3RydWN0b3JzIGFyZSByZW1vdmVkIGZyb20gdGhlIHVucGlja2xpbmcgY29kZS4KLVJlZmVyZW5jZXMgdG8gdGhlc2UgdmFyaWFibGVzIGluIHRoZSBkZXNjcmlwdGlvbnMgYmVsb3cgYXJlIHRvIGJlIHNlZW4KLWFzIGRlc2NyaWJpbmcgdW5waWNrbGluZyBpbiBQeXRob24gMi4yIGFuZCBiZWZvcmUuCi0iIiIKIAogIyBNZXRhLXJ1bGU6ICBEZXNjcmlwdGlvbnMgYXJlIHN0b3JlZCBpbiBpbnN0YW5jZXMgb2YgZGVzY3JpcHRvciBvYmplY3RzLAogIyB3aXRoIHBsYWluIGNvbnN0cnVjdG9ycy4gIE5vIG1ldGEtbGFuZ3VhZ2UgaXMgZGVmaW5lZCBmcm9tIHdoaWNoCkBAIC0xNjksNiArMTY5LDcgQEAKIFRBS0VOX0ZST01fQVJHVU1FTlQxICA9IC0yICAgIyBudW0gYnl0ZXMgaXMgMS1ieXRlIHVuc2lnbmVkIGludAogVEFLRU5fRlJPTV9BUkdVTUVOVDQgID0gLTMgICAjIG51bSBieXRlcyBpcyA0LWJ5dGUgc2lnbmVkIGxpdHRsZS1lbmRpYW4gaW50CiBUQUtFTl9GUk9NX0FSR1VNRU5UNFUgPSAtNCAgICMgbnVtIGJ5dGVzIGlzIDQtYnl0ZSB1bnNpZ25lZCBsaXR0bGUtZW5kaWFuIGludAorVEFLRU5fRlJPTV9BUkdVTUVOVDhVID0gLTUgICAjIG51bSBieXRlcyBpcyA4LWJ5dGUgdW5zaWduZWQgbGl0dGxlLWVuZGlhbiBpbnQKIAogY2xhc3MgQXJndW1lbnREZXNjcmlwdG9yKG9iamVjdCk6CiAgICAgX19zbG90c19fID0gKApAQCAtMTc2LDcgKzE3Nyw3IEBACiAgICAgICAgICduYW1lJywKIAogICAgICAgICAjIGxlbmd0aCBvZiBhcmd1bWVudCwgaW4gYnl0ZXM7IGFuIGludDsgVVBfVE9fTkVXTElORSBhbmQKLSAgICAgICAgIyBUQUtFTl9GUk9NX0FSR1VNRU5UezEsNH0gYXJlIG5lZ2F0aXZlIHZhbHVlcyBmb3IgdmFyaWFibGUtbGVuZ3RoCisgICAgICAgICMgVEFLRU5fRlJPTV9BUkdVTUVOVHsxLDQsOH0gYXJlIG5lZ2F0aXZlIHZhbHVlcyBmb3IgdmFyaWFibGUtbGVuZ3RoCiAgICAgICAgICMgY2FzZXMKICAgICAgICAgJ24nLAogCkBAIC0xOTcsNyArMTk4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4gaW4gKFVQX1RPX05FV0xJTkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUtFTl9GUk9NX0FSR1VNRU5UMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFLRU5fRlJPTV9BUkdVTUVOVDRVKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ0VSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBS0VOX0ZST01fQVJHVU1FTlQ4VSkpCiAgICAgICAgIHNlbGYubiA9IG4KIAogICAgICAgICBzZWxmLnJlYWRlciA9IHJlYWRlcgpAQCAtMjg5LDYgKzI5MSwyNyBAQAogICAgICAgICAgICAgZG9jPSJGb3VyLWJ5dGUgdW5zaWduZWQgaW50ZWdlciwgbGl0dGxlLWVuZGlhbi4iKQogCiAKK2RlZiByZWFkX3VpbnQ4KGYpOgorICAgIHIiIiIKKyAgICA+Pj4gaW1wb3J0IGlvCisgICAgPj4+IHJlYWRfdWludDgoaW8uQnl0ZXNJTyhiJ1x4ZmZceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJykpCisgICAgMjU1CisgICAgPj4+IHJlYWRfdWludDgoaW8uQnl0ZXNJTyhiJ1x4ZmYnICogOCkpID09IDIqKjY0LTEKKyAgICBUcnVlCisgICAgIiIiCisKKyAgICBkYXRhID0gZi5yZWFkKDgpCisgICAgaWYgbGVuKGRhdGEpID09IDg6CisgICAgICAgIHJldHVybiBfdW5wYWNrKCI8USIsIGRhdGEpWzBdCisgICAgcmFpc2UgVmFsdWVFcnJvcigibm90IGVub3VnaCBkYXRhIGluIHN0cmVhbSB0byByZWFkIHVpbnQ4IikKKwordWludDggPSBBcmd1bWVudERlc2NyaXB0b3IoCisgICAgICAgICAgICBuYW1lPSd1aW50OCcsCisgICAgICAgICAgICBuPTgsCisgICAgICAgICAgICByZWFkZXI9cmVhZF91aW50OCwKKyAgICAgICAgICAgIGRvYz0iRWlnaHQtYnl0ZSB1bnNpZ25lZCBpbnRlZ2VyLCBsaXR0bGUtZW5kaWFuLiIpCisKKwogZGVmIHJlYWRfc3RyaW5nbmwoZiwgZGVjb2RlPVRydWUsIHN0cmlwcXVvdGVzPVRydWUpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC0zODIsNiArNDA1LDM2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgc2luZ2xlIGJsYW5rIHNlcGFyYXRpbmcgdGhlIHR3byBzdHJpbmdzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIiIpCiAKKworZGVmIHJlYWRfc3RyaW5nMShmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiByZWFkX3N0cmluZzEoaW8uQnl0ZXNJTyhiIlx4MDAiKSkKKyAgICAnJworICAgID4+PiByZWFkX3N0cmluZzEoaW8uQnl0ZXNJTyhiIlx4MDNhYmNkZWYiKSkKKyAgICAnYWJjJworICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDEoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgZGF0YSA9IGYucmVhZChuKQorICAgIGlmIGxlbihkYXRhKSA9PSBuOgorICAgICAgICByZXR1cm4gZGF0YS5kZWNvZGUoImxhdGluLTEiKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgc3RyaW5nMSwgYnV0IG9ubHkgJWQgcmVtYWluIiAlCisgICAgICAgICAgICAgICAgICAgICAobiwgbGVuKGRhdGEpKSkKKworc3RyaW5nMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgbmFtZT0ic3RyaW5nMSIsCisgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDEsCisgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3N0cmluZzEsCisgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgc3RyaW5nLgorCisgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDEtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nIHRoZSBudW1iZXIKKyAgICAgICAgICAgICAgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgdGhhdCBtYW55CisgICAgICAgICAgICAgIGJ5dGVzLgorICAgICAgICAgICAgICAiIiIpCisKKwogZGVmIHJlYWRfc3RyaW5nNChmKToKICAgICByIiIiCiAgICAgPj4+IGltcG9ydCBpbwpAQCAtNDE2LDI4ICs0NjksMjggQEAKICAgICAgICAgICAgICAgIiIiKQogCiAKLWRlZiByZWFkX3N0cmluZzEoZik6CitkZWYgcmVhZF9ieXRlczEoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KLSAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAwIikpCi0gICAgJycKLSAgICA+Pj4gcmVhZF9zdHJpbmcxKGlvLkJ5dGVzSU8oYiJceDAzYWJjZGVmIikpCi0gICAgJ2FiYycKKyAgICA+Pj4gcmVhZF9ieXRlczEoaW8uQnl0ZXNJTyhiIlx4MDAiKSkKKyAgICBiJycKKyAgICA+Pj4gcmVhZF9ieXRlczEoaW8uQnl0ZXNJTyhiIlx4MDNhYmNkZWYiKSkKKyAgICBiJ2FiYycKICAgICAiIiIKIAogICAgIG4gPSByZWFkX3VpbnQxKGYpCiAgICAgYXNzZXJ0IG4gPj0gMAogICAgIGRhdGEgPSBmLnJlYWQobikKICAgICBpZiBsZW4oZGF0YSkgPT0gbjoKLSAgICAgICAgcmV0dXJuIGRhdGEuZGVjb2RlKCJsYXRpbi0xIikKLSAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHN0cmluZzEsIGJ1dCBvbmx5ICVkIHJlbWFpbiIgJQorICAgICAgICByZXR1cm4gZGF0YQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgYnl0ZXMxLCBidXQgb25seSAlZCByZW1haW4iICUKICAgICAgICAgICAgICAgICAgICAgIChuLCBsZW4oZGF0YSkpKQogCi1zdHJpbmcxID0gQXJndW1lbnREZXNjcmlwdG9yKAotICAgICAgICAgICAgICBuYW1lPSJzdHJpbmcxIiwKK2J5dGVzMSA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgbmFtZT0iYnl0ZXMxIiwKICAgICAgICAgICAgICAgbj1UQUtFTl9GUk9NX0FSR1VNRU5UMSwKLSAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfc3RyaW5nMSwKLSAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBzdHJpbmcuCisgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX2J5dGVzMSwKKyAgICAgICAgICAgICAgZG9jPSIiIkEgY291bnRlZCBieXRlcyBzdHJpbmcuCiAKICAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgMS1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcgdGhlIG51bWJlcgogICAgICAgICAgICAgICBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCBpcyB0aGF0IG1hbnkKQEAgLTQ4Nyw2ICs1NDAsNyBAQAogICAgICIiIgogCiAgICAgbiA9IHJlYWRfdWludDQoZikKKyAgICBhc3NlcnQgbiA+PSAwCiAgICAgaWYgbiA+IHN5cy5tYXhzaXplOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJieXRlczQgYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQogICAgIGRhdGEgPSBmLnJlYWQobikKQEAgLTUwNiw2ICs1NjAsNDAgQEAKICAgICAgICAgICAgICAgIiIiKQogCiAKK2RlZiByZWFkX2J5dGVzOChmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbywgc3RydWN0LCBzeXMKKyAgICA+Pj4gcmVhZF9ieXRlczgoaW8uQnl0ZXNJTyhiIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwYWJjIikpCisgICAgYicnCisgICAgPj4+IHJlYWRfYnl0ZXM4KGlvLkJ5dGVzSU8oYiJceDAzXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMGFiY2RlZiIpKQorICAgIGInYWJjJworICAgID4+PiBiaWdzaXplOCA9IHN0cnVjdC5wYWNrKCI8USIsIHN5cy5tYXhzaXplLy8zKQorICAgID4+PiByZWFkX2J5dGVzOChpby5CeXRlc0lPKGJpZ3NpemU4ICsgYiJhYmNkZWYiKSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZXhwZWN0ZWQgLi4uIGJ5dGVzIGluIGEgYnl0ZXM4LCBidXQgb25seSA2IHJlbWFpbgorICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDgoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgaWYgbiA+IHN5cy5tYXhzaXplOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJieXRlczggYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQorICAgIGRhdGEgPSBmLnJlYWQobikKKyAgICBpZiBsZW4oZGF0YSkgPT0gbjoKKyAgICAgICAgcmV0dXJuIGRhdGEKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIGJ5dGVzOCwgYnV0IG9ubHkgJWQgcmVtYWluIiAlCisgICAgICAgICAgICAgICAgICAgICAobiwgbGVuKGRhdGEpKSkKKworYnl0ZXM4ID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgICBuYW1lPSJieXRlczgiLAorICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQ4VSwKKyAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfYnl0ZXM4LAorICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIGJ5dGVzIHN0cmluZy4KKworICAgICAgICAgICAgICBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSA4LWJ5dGUgbGl0dGxlLWVuZGlhbiB1bnNpZ25lZCBpbnQgZ2l2aW5nCisgICAgICAgICAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMsIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIHRoYXQgbWFueSBieXRlcy4KKyAgICAgICAgICAgICAgIiIiKQorCiBkZWYgcmVhZF91bmljb2Rlc3RyaW5nbmwoZik6CiAgICAgciIiIgogICAgID4+PiBpbXBvcnQgaW8KQEAgLTUzMSw2ICs2MTksNDYgQEAKICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGUgc2VxdWVuY2VzLgogICAgICAgICAgICAgICAgICAgICAgICIiIikKIAorCitkZWYgcmVhZF91bmljb2Rlc3RyaW5nMShmKToKKyAgICByIiIiCisgICAgPj4+IGltcG9ydCBpbworICAgID4+PiBzID0gJ2FiY2RcdWFiY2QnCisgICAgPj4+IGVuYyA9IHMuZW5jb2RlKCd1dGYtOCcpCisgICAgPj4+IGVuYworICAgIGInYWJjZFx4ZWFceGFmXHg4ZCcKKyAgICA+Pj4gbiA9IGJ5dGVzKFtsZW4oZW5jKV0pICAjIGxpdHRsZS1lbmRpYW4gMS1ieXRlIGxlbmd0aAorICAgID4+PiB0ID0gcmVhZF91bmljb2Rlc3RyaW5nMShpby5CeXRlc0lPKG4gKyBlbmMgKyBiJ2p1bmsnKSkKKyAgICA+Pj4gcyA9PSB0CisgICAgVHJ1ZQorCisgICAgPj4+IHJlYWRfdW5pY29kZXN0cmluZzEoaW8uQnl0ZXNJTyhuICsgZW5jWzotMV0pKQorICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAuLi4KKyAgICBWYWx1ZUVycm9yOiBleHBlY3RlZCA3IGJ5dGVzIGluIGEgdW5pY29kZXN0cmluZzEsIGJ1dCBvbmx5IDYgcmVtYWluCisgICAgIiIiCisKKyAgICBuID0gcmVhZF91aW50MShmKQorICAgIGFzc2VydCBuID49IDAKKyAgICBkYXRhID0gZi5yZWFkKG4pCisgICAgaWYgbGVuKGRhdGEpID09IG46CisgICAgICAgIHJldHVybiBzdHIoZGF0YSwgJ3V0Zi04JywgJ3N1cnJvZ2F0ZXBhc3MnKQorICAgIHJhaXNlIFZhbHVlRXJyb3IoImV4cGVjdGVkICVkIGJ5dGVzIGluIGEgdW5pY29kZXN0cmluZzEsIGJ1dCBvbmx5ICVkICIKKyAgICAgICAgICAgICAgICAgICAgICJyZW1haW4iICUgKG4sIGxlbihkYXRhKSkpCisKK3VuaWNvZGVzdHJpbmcxID0gQXJndW1lbnREZXNjcmlwdG9yKAorICAgICAgICAgICAgICAgICAgICBuYW1lPSJ1bmljb2Rlc3RyaW5nMSIsCisgICAgICAgICAgICAgICAgICAgIG49VEFLRU5fRlJPTV9BUkdVTUVOVDEsCisgICAgICAgICAgICAgICAgICAgIHJlYWRlcj1yZWFkX3VuaWNvZGVzdHJpbmcxLAorICAgICAgICAgICAgICAgICAgICBkb2M9IiIiQSBjb3VudGVkIFVuaWNvZGUgc3RyaW5nLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhIDEtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgICAgICAgICAgICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQKKyAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQtLSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nIC0tCisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zIHRoYXQgbWFueSBieXRlcy4KKyAgICAgICAgICAgICAgICAgICAgIiIiKQorCisKIGRlZiByZWFkX3VuaWNvZGVzdHJpbmc0KGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC01NTAsNiArNjc4LDcgQEAKICAgICAiIiIKIAogICAgIG4gPSByZWFkX3VpbnQ0KGYpCisgICAgYXNzZXJ0IG4gPj0gMAogICAgIGlmIG4gPiBzeXMubWF4c2l6ZToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5pY29kZXN0cmluZzQgYnl0ZSBjb3VudCA+IHN5cy5tYXhzaXplOiAlZCIgJSBuKQogICAgIGRhdGEgPSBmLnJlYWQobikKQEAgLTU3MSw2ICs3MDAsNDcgQEAKICAgICAgICAgICAgICAgICAgICAgIiIiKQogCiAKK2RlZiByZWFkX3VuaWNvZGVzdHJpbmc4KGYpOgorICAgIHIiIiIKKyAgICA+Pj4gaW1wb3J0IGlvCisgICAgPj4+IHMgPSAnYWJjZFx1YWJjZCcKKyAgICA+Pj4gZW5jID0gcy5lbmNvZGUoJ3V0Zi04JykKKyAgICA+Pj4gZW5jCisgICAgYidhYmNkXHhlYVx4YWZceDhkJworICAgID4+PiBuID0gYnl0ZXMoW2xlbihlbmMpXSkgKyBieXRlcyg3KSAgIyBsaXR0bGUtZW5kaWFuIDgtYnl0ZSBsZW5ndGgKKyAgICA+Pj4gdCA9IHJlYWRfdW5pY29kZXN0cmluZzgoaW8uQnl0ZXNJTyhuICsgZW5jICsgYidqdW5rJykpCisgICAgPj4+IHMgPT0gdAorICAgIFRydWUKKworICAgID4+PiByZWFkX3VuaWNvZGVzdHJpbmc4KGlvLkJ5dGVzSU8obiArIGVuY1s6LTFdKSkKKyAgICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6CisgICAgLi4uCisgICAgVmFsdWVFcnJvcjogZXhwZWN0ZWQgNyBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmc4LCBidXQgb25seSA2IHJlbWFpbgorICAgICIiIgorCisgICAgbiA9IHJlYWRfdWludDgoZikKKyAgICBhc3NlcnQgbiA+PSAwCisgICAgaWYgbiA+IHN5cy5tYXhzaXplOgorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJ1bmljb2Rlc3RyaW5nOCBieXRlIGNvdW50ID4gc3lzLm1heHNpemU6ICVkIiAlIG4pCisgICAgZGF0YSA9IGYucmVhZChuKQorICAgIGlmIGxlbihkYXRhKSA9PSBuOgorICAgICAgICByZXR1cm4gc3RyKGRhdGEsICd1dGYtOCcsICdzdXJyb2dhdGVwYXNzJykKKyAgICByYWlzZSBWYWx1ZUVycm9yKCJleHBlY3RlZCAlZCBieXRlcyBpbiBhIHVuaWNvZGVzdHJpbmc4LCBidXQgb25seSAlZCAiCisgICAgICAgICAgICAgICAgICAgICAicmVtYWluIiAlIChuLCBsZW4oZGF0YSkpKQorCit1bmljb2Rlc3RyaW5nOCA9IEFyZ3VtZW50RGVzY3JpcHRvcigKKyAgICAgICAgICAgICAgICAgICAgbmFtZT0idW5pY29kZXN0cmluZzgiLAorICAgICAgICAgICAgICAgICAgICBuPVRBS0VOX0ZST01fQVJHVU1FTlQ4VSwKKyAgICAgICAgICAgICAgICAgICAgcmVhZGVyPXJlYWRfdW5pY29kZXN0cmluZzgsCisgICAgICAgICAgICAgICAgICAgIGRvYz0iIiJBIGNvdW50ZWQgVW5pY29kZSBzdHJpbmcuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgOC1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgICAgICAgICAgICAgICBnaXZpbmcgdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgc3RyaW5nLCBhbmQgdGhlIHNlY29uZAorICAgICAgICAgICAgICAgICAgICBhcmd1bWVudC0tIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcgLS0KKyAgICAgICAgICAgICAgICAgICAgY29udGFpbnMgdGhhdCBtYW55IGJ5dGVzLgorICAgICAgICAgICAgICAgICAgICAiIiIpCisKKwogZGVmIHJlYWRfZGVjaW1hbG5sX3Nob3J0KGYpOgogICAgIHIiIiIKICAgICA+Pj4gaW1wb3J0IGlvCkBAIC03OTksMTAzICs5NjksMTA3IEBACiAgICAgICAgIHJldHVybiBzZWxmLm5hbWUKIAogCi1weWludCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgbmFtZT0naW50JywKLSAgICAgICAgICAgIG9idHlwZT1pbnQsCi0gICAgICAgICAgICBkb2M9IkEgc2hvcnQgKGFzIG9wcG9zZWQgdG8gbG9uZykgUHl0aG9uIGludGVnZXIgb2JqZWN0LiIpCi0KLXB5bG9uZyA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgIG5hbWU9J2xvbmcnLAotICAgICAgICAgICAgIG9idHlwZT1pbnQsCi0gICAgICAgICAgICAgZG9jPSJBIGxvbmcgKGFzIG9wcG9zZWQgdG8gc2hvcnQpIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4iKQorcHlpbnQgPSBweWxvbmcgPSBTdGFja09iamVjdCgKKyAgICBuYW1lPSdpbnQnLAorICAgIG9idHlwZT1pbnQsCisgICAgZG9jPSJBIFB5dGhvbiBpbnRlZ2VyIG9iamVjdC4iKQogCiBweWludGVnZXJfb3JfYm9vbCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT0naW50X29yX2Jvb2wnLAotICAgICAgICAgICAgICAgICAgICAgICAgb2J0eXBlPShpbnQsIGJvb2wpLAotICAgICAgICAgICAgICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiBpbnRlZ2VyIG9iamVjdCAoc2hvcnQgb3IgbG9uZyksIG9yICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBQeXRob24gYm9vbC4iKQorICAgIG5hbWU9J2ludF9vcl9ib29sJywKKyAgICBvYnR5cGU9KGludCwgYm9vbCksCisgICAgZG9jPSJBIFB5dGhvbiBpbnRlZ2VyIG9yIGJvb2xlYW4gb2JqZWN0LiIpCiAKIHB5Ym9vbCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgIG5hbWU9J2Jvb2wnLAotICAgICAgICAgICAgIG9idHlwZT0oYm9vbCwpLAotICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gYm9vbCBvYmplY3QuIikKKyAgICBuYW1lPSdib29sJywKKyAgICBvYnR5cGU9Ym9vbCwKKyAgICBkb2M9IkEgUHl0aG9uIGJvb2xlYW4gb2JqZWN0LiIpCiAKIHB5ZmxvYXQgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgbmFtZT0nZmxvYXQnLAotICAgICAgICAgICAgICBvYnR5cGU9ZmxvYXQsCi0gICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gZmxvYXQgb2JqZWN0LiIpCisgICAgbmFtZT0nZmxvYXQnLAorICAgIG9idHlwZT1mbG9hdCwKKyAgICBkb2M9IkEgUHl0aG9uIGZsb2F0IG9iamVjdC4iKQogCi1weXN0cmluZyA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgbmFtZT0nc3RyaW5nJywKLSAgICAgICAgICAgICAgIG9idHlwZT1ieXRlcywKLSAgICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gKDgtYml0KSBzdHJpbmcgb2JqZWN0LiIpCitweWJ5dGVzX29yX3N0ciA9IHB5c3RyaW5nID0gU3RhY2tPYmplY3QoCisgICAgbmFtZT0nYnl0ZXNfb3Jfc3RyJywKKyAgICBvYnR5cGU9KGJ5dGVzLCBzdHIpLAorICAgIGRvYz0iQSBQeXRob24gYnl0ZXMgb3IgKFVuaWNvZGUpIHN0cmluZyBvYmplY3QuIikKIAogcHlieXRlcyA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgbmFtZT0nYnl0ZXMnLAotICAgICAgICAgICAgICAgb2J0eXBlPWJ5dGVzLAotICAgICAgICAgICAgICAgZG9jPSJBIFB5dGhvbiBieXRlcyBvYmplY3QuIikKKyAgICBuYW1lPSdieXRlcycsCisgICAgb2J0eXBlPWJ5dGVzLAorICAgIGRvYz0iQSBQeXRob24gYnl0ZXMgb2JqZWN0LiIpCiAKIHB5dW5pY29kZSA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgIG5hbWU9J3N0cicsCi0gICAgICAgICAgICAgICAgb2J0eXBlPXN0ciwKLSAgICAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIChVbmljb2RlKSBzdHJpbmcgb2JqZWN0LiIpCisgICAgbmFtZT0nc3RyJywKKyAgICBvYnR5cGU9c3RyLAorICAgIGRvYz0iQSBQeXRob24gKFVuaWNvZGUpIHN0cmluZyBvYmplY3QuIikKIAogcHlub25lID0gU3RhY2tPYmplY3QoCi0gICAgICAgICAgICAgbmFtZT0iTm9uZSIsCi0gICAgICAgICAgICAgb2J0eXBlPXR5cGUoTm9uZSksCi0gICAgICAgICAgICAgZG9jPSJUaGUgUHl0aG9uIE5vbmUgb2JqZWN0LiIpCisgICAgbmFtZT0iTm9uZSIsCisgICAgb2J0eXBlPXR5cGUoTm9uZSksCisgICAgZG9jPSJUaGUgUHl0aG9uIE5vbmUgb2JqZWN0LiIpCiAKIHB5dHVwbGUgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgbmFtZT0idHVwbGUiLAotICAgICAgICAgICAgICBvYnR5cGU9dHVwbGUsCi0gICAgICAgICAgICAgIGRvYz0iQSBQeXRob24gdHVwbGUgb2JqZWN0LiIpCisgICAgbmFtZT0idHVwbGUiLAorICAgIG9idHlwZT10dXBsZSwKKyAgICBkb2M9IkEgUHl0aG9uIHR1cGxlIG9iamVjdC4iKQogCiBweWxpc3QgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICBuYW1lPSJsaXN0IiwKLSAgICAgICAgICAgICBvYnR5cGU9bGlzdCwKLSAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGxpc3Qgb2JqZWN0LiIpCisgICAgbmFtZT0ibGlzdCIsCisgICAgb2J0eXBlPWxpc3QsCisgICAgZG9jPSJBIFB5dGhvbiBsaXN0IG9iamVjdC4iKQogCiBweWRpY3QgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICBuYW1lPSJkaWN0IiwKLSAgICAgICAgICAgICBvYnR5cGU9ZGljdCwKLSAgICAgICAgICAgICBkb2M9IkEgUHl0aG9uIGRpY3Qgb2JqZWN0LiIpCisgICAgbmFtZT0iZGljdCIsCisgICAgb2J0eXBlPWRpY3QsCisgICAgZG9jPSJBIFB5dGhvbiBkaWN0IG9iamVjdC4iKQorCitweXNldCA9IFN0YWNrT2JqZWN0KAorICAgIG5hbWU9InNldCIsCisgICAgb2J0eXBlPXNldCwKKyAgICBkb2M9IkEgUHl0aG9uIHNldCBvYmplY3QuIikKKworcHlmcm96ZW5zZXQgPSBTdGFja09iamVjdCgKKyAgICBuYW1lPSJmcm96ZW5zZXQiLAorICAgIG9idHlwZT1zZXQsCisgICAgZG9jPSJBIFB5dGhvbiBmcm96ZW5zZXQgb2JqZWN0LiIpCiAKIGFueW9iamVjdCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgIG5hbWU9J2FueScsCi0gICAgICAgICAgICAgICAgb2J0eXBlPW9iamVjdCwKLSAgICAgICAgICAgICAgICBkb2M9IkFueSBraW5kIG9mIG9iamVjdCB3aGF0c29ldmVyLiIpCisgICAgbmFtZT0nYW55JywKKyAgICBvYnR5cGU9b2JqZWN0LAorICAgIGRvYz0iQW55IGtpbmQgb2Ygb2JqZWN0IHdoYXRzb2V2ZXIuIikKIAogbWFya29iamVjdCA9IFN0YWNrT2JqZWN0KAotICAgICAgICAgICAgICAgICBuYW1lPSJtYXJrIiwKLSAgICAgICAgICAgICAgICAgb2J0eXBlPVN0YWNrT2JqZWN0LAotICAgICAgICAgICAgICAgICBkb2M9IiIiJ1RoZSBtYXJrJyBpcyBhIHVuaXF1ZSBvYmplY3QuCisgICAgbmFtZT0ibWFyayIsCisgICAgb2J0eXBlPVN0YWNrT2JqZWN0LAorICAgIGRvYz0iIiInVGhlIG1hcmsnIGlzIGEgdW5pcXVlIG9iamVjdC4KIAotICAgICAgICAgICAgICAgICBPcGNvZGVzIHRoYXQgb3BlcmF0ZSBvbiBhIHZhcmlhYmxlIG51bWJlciBvZiBvYmplY3RzCi0gICAgICAgICAgICAgICAgIGdlbmVyYWxseSBkb24ndCBlbWJlZCB0aGUgY291bnQgb2Ygb2JqZWN0cyBpbiB0aGUgb3Bjb2RlLAotICAgICAgICAgICAgICAgICBvciBwdWxsIGl0IG9mZiB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBNQVJLIG9wY29kZSBpcyB1c2VkCi0gICAgICAgICAgICAgICAgIHRvIHB1c2ggYSBzcGVjaWFsIG1hcmtlciBvYmplY3Qgb24gdGhlIHN0YWNrLCBhbmQgdGhlbgotICAgICAgICAgICAgICAgICBzb21lIG90aGVyIG9wY29kZXMgZ3JhYiBhbGwgdGhlIG9iamVjdHMgZnJvbSB0aGUgdG9wIG9mCi0gICAgICAgICAgICAgICAgIHRoZSBzdGFjayBkb3duIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIHRvcG1vc3QgbWFya2VyCi0gICAgICAgICAgICAgICAgIG9iamVjdC4KLSAgICAgICAgICAgICAgICAgIiIiKQorT3Bjb2RlcyB0aGF0IG9wZXJhdGUgb24gYSB2YXJpYWJsZSBudW1iZXIgb2Ygb2JqZWN0cworZ2VuZXJhbGx5IGRvbid0IGVtYmVkIHRoZSBjb3VudCBvZiBvYmplY3RzIGluIHRoZSBvcGNvZGUsCitvciBwdWxsIGl0IG9mZiB0aGUgc3RhY2suICBJbnN0ZWFkIHRoZSBNQVJLIG9wY29kZSBpcyB1c2VkCit0byBwdXNoIGEgc3BlY2lhbCBtYXJrZXIgb2JqZWN0IG9uIHRoZSBzdGFjaywgYW5kIHRoZW4KK3NvbWUgb3RoZXIgb3Bjb2RlcyBncmFiIGFsbCB0aGUgb2JqZWN0cyBmcm9tIHRoZSB0b3Agb2YKK3RoZSBzdGFjayBkb3duIHRvIChidXQgbm90IGluY2x1ZGluZykgdGhlIHRvcG1vc3QgbWFya2VyCitvYmplY3QuCisiIiIpCiAKIHN0YWNrc2xpY2UgPSBTdGFja09iamVjdCgKLSAgICAgICAgICAgICAgICAgbmFtZT0ic3RhY2tzbGljZSIsCi0gICAgICAgICAgICAgICAgIG9idHlwZT1TdGFja09iamVjdCwKLSAgICAgICAgICAgICAgICAgZG9jPSIiIkFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb250aWd1b3VzIHNsaWNlIG9mIHRoZSBzdGFjay4KKyAgICBuYW1lPSJzdGFja3NsaWNlIiwKKyAgICBvYnR5cGU9U3RhY2tPYmplY3QsCisgICAgZG9jPSIiIkFuIG9iamVjdCByZXByZXNlbnRpbmcgYSBjb250aWd1b3VzIHNsaWNlIG9mIHRoZSBzdGFjay4KIAotICAgICAgICAgICAgICAgICBUaGlzIGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBtYXJrb2JqZWN0LCB0byByZXByZXNlbnQgYWxsCi0gICAgICAgICAgICAgICAgIG9mIHRoZSBzdGFjayBmb2xsb3dpbmcgdGhlIHRvcG1vc3QgbWFya29iamVjdC4gIEZvciBleGFtcGxlLAotICAgICAgICAgICAgICAgICB0aGUgUE9QX01BUksgb3Bjb2RlIGNoYW5nZXMgdGhlIHN0YWNrIGZyb20KK1RoaXMgaXMgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG1hcmtvYmplY3QsIHRvIHJlcHJlc2VudCBhbGwKK29mIHRoZSBzdGFjayBmb2xsb3dpbmcgdGhlIHRvcG1vc3QgbWFya29iamVjdC4gIEZvciBleGFtcGxlLAordGhlIFBPUF9NQVJLIG9wY29kZSBjaGFuZ2VzIHRoZSBzdGFjayBmcm9tCiAKLSAgICAgICAgICAgICAgICAgICAgIFsuLi4sIG1hcmtvYmplY3QsIHN0YWNrc2xpY2VdCi0gICAgICAgICAgICAgICAgIHRvCi0gICAgICAgICAgICAgICAgICAgICBbLi4uXQorICAgIFsuLi4sIG1hcmtvYmplY3QsIHN0YWNrc2xpY2VdCit0bworICAgIFsuLi5dCiAKLSAgICAgICAgICAgICAgICAgTm8gbWF0dGVyIGhvdyBtYW55IG9iamVjdCBhcmUgb24gdGhlIHN0YWNrIGFmdGVyIHRoZSB0b3Btb3N0Ci0gICAgICAgICAgICAgICAgIG1hcmtvYmplY3QsIFBPUF9NQVJLIGdldHMgcmlkIG9mIGFsbCBvZiB0aGVtIChpbmNsdWRpbmcgdGhlCi0gICAgICAgICAgICAgICAgIHRvcG1vc3QgbWFya29iamVjdCB0b28pLgotICAgICAgICAgICAgICAgICAiIiIpCitObyBtYXR0ZXIgaG93IG1hbnkgb2JqZWN0IGFyZSBvbiB0aGUgc3RhY2sgYWZ0ZXIgdGhlIHRvcG1vc3QKK21hcmtvYmplY3QsIFBPUF9NQVJLIGdldHMgcmlkIG9mIGFsbCBvZiB0aGVtIChpbmNsdWRpbmcgdGhlCit0b3Btb3N0IG1hcmtvYmplY3QgdG9vKS4KKyIiIikKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIERlc2NyaXB0b3JzIGZvciBwaWNrbGUgb3Bjb2Rlcy4KQEAgLTEwMzIsNyArMTIwNiw3IEBACiAgICAgICBjb2RlPSdMJywKICAgICAgIGFyZz1kZWNpbWFsbmxfbG9uZywKICAgICAgIHN0YWNrX2JlZm9yZT1bXSwKLSAgICAgIHN0YWNrX2FmdGVyPVtweWxvbmddLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5aW50XSwKICAgICAgIHByb3RvPTAsCiAgICAgICBkb2M9IiIiUHVzaCBhIGxvbmcgaW50ZWdlci4KIApAQCAtMTA1MCw3ICsxMjI0LDcgQEAKICAgICAgIGNvZGU9J1x4OGEnLAogICAgICAgYXJnPWxvbmcxLAogICAgICAgc3RhY2tfYmVmb3JlPVtdLAotICAgICAgc3RhY2tfYWZ0ZXI9W3B5bG9uZ10sCisgICAgICBzdGFja19hZnRlcj1bcHlpbnRdLAogICAgICAgcHJvdG89MiwKICAgICAgIGRvYz0iIiJMb25nIGludGVnZXIgdXNpbmcgb25lLWJ5dGUgbGVuZ3RoLgogCkBAIC0xMDYxLDcgKzEyMzUsNyBAQAogICAgICAgY29kZT0nXHg4YicsCiAgICAgICBhcmc9bG9uZzQsCiAgICAgICBzdGFja19iZWZvcmU9W10sCi0gICAgICBzdGFja19hZnRlcj1bcHlsb25nXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWludF0sCiAgICAgICBwcm90bz0yLAogICAgICAgZG9jPSIiIkxvbmcgaW50ZWdlciB1c2luZyBmb3VuZC1ieXRlIGxlbmd0aC4KIApAQCAtMTA3NCw0NSArMTI0OCw1MCBAQAogICAgICAgY29kZT0nUycsCiAgICAgICBhcmc9c3RyaW5nbmwsCiAgICAgICBzdGFja19iZWZvcmU9W10sCi0gICAgICBzdGFja19hZnRlcj1bcHlzdHJpbmddLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5Ynl0ZXNfb3Jfc3RyXSwKICAgICAgIHByb3RvPTAsCiAgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0LgogCiAgICAgICBUaGUgYXJndW1lbnQgaXMgYSByZXByLXN0eWxlIHN0cmluZywgd2l0aCBicmFja2V0aW5nIHF1b3RlIGNoYXJhY3RlcnMsCiAgICAgICBhbmQgcGVyaGFwcyBlbWJlZGRlZCBlc2NhcGVzLiAgVGhlIGFyZ3VtZW50IGV4dGVuZHMgdW50aWwgdGhlIG5leHQKLSAgICAgIG5ld2xpbmUgY2hhcmFjdGVyLiAgKEFjdHVhbGx5LCB0aGV5IGFyZSBkZWNvZGVkIGludG8gYSBzdHIgaW5zdGFuY2UKKyAgICAgIG5ld2xpbmUgY2hhcmFjdGVyLiAgVGhlc2UgYXJlIHVzdWFsbHkgZGVjb2RlZCBpbnRvIGEgc3RyIGluc3RhbmNlCiAgICAgICB1c2luZyB0aGUgZW5jb2RpbmcgZ2l2ZW4gdG8gdGhlIFVucGlja2xlciBjb25zdHJ1Y3Rvci4gb3IgdGhlIGRlZmF1bHQsCi0gICAgICAnQVNDSUknLikKKyAgICAgICdBU0NJSScuICBJZiB0aGUgZW5jb2RpbmcgZ2l2ZW4gd2FzICdieXRlcycgaG93ZXZlciwgdGhleSB3aWxsIGJlCisgICAgICBkZWNvZGVkIGFzIGJ5dGVzIG9iamVjdCBpbnN0ZWFkLgogICAgICAgIiIiKSwKIAogICAgIEkobmFtZT0nQklOU1RSSU5HJywKICAgICAgIGNvZGU9J1QnLAogICAgICAgYXJnPXN0cmluZzQsCiAgICAgICBzdGFja19iZWZvcmU9W10sCi0gICAgICBzdGFja19hZnRlcj1bcHlzdHJpbmddLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5Ynl0ZXNfb3Jfc3RyXSwKICAgICAgIHByb3RvPTEsCiAgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBzdHJpbmcgb2JqZWN0LgogCi0gICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDQtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKLSAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHRoYXQgbWFueQotICAgICAgYnl0ZXMsIHdoaWNoIGFyZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LiAgKEFjdHVhbGx5LAotICAgICAgdGhleSBhcmUgZGVjb2RlZCBpbnRvIGEgc3RyIGluc3RhbmNlIHVzaW5nIHRoZSBlbmNvZGluZyBnaXZlbiB0byB0aGUKLSAgICAgIFVucGlja2xlciBjb25zdHJ1Y3Rvci4gb3IgdGhlIGRlZmF1bHQsICdBU0NJSScuKQorICAgICAgVGhlcmUgYXJlIHR3byBhcmd1bWVudHM6IHRoZSBmaXJzdCBpcyBhIDQtYnl0ZSBsaXR0bGUtZW5kaWFuCisgICAgICBzaWduZWQgaW50IGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUKKyAgICAgIHNlY29uZCBpcyB0aGF0IG1hbnkgYnl0ZXMsIHdoaWNoIGFyZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZworICAgICAgY29udGVudC4gIFRoZXNlIGFyZSB1c3VhbGx5IGRlY29kZWQgaW50byBhIHN0ciBpbnN0YW5jZSB1c2luZyB0aGUKKyAgICAgIGVuY29kaW5nIGdpdmVuIHRvIHRoZSBVbnBpY2tsZXIgY29uc3RydWN0b3IuIG9yIHRoZSBkZWZhdWx0LAorICAgICAgJ0FTQ0lJJy4gIElmIHRoZSBlbmNvZGluZyBnaXZlbiB3YXMgJ2J5dGVzJyBob3dldmVyLCB0aGV5IHdpbGwgYmUKKyAgICAgIGRlY29kZWQgYXMgYnl0ZXMgb2JqZWN0IGluc3RlYWQuCiAgICAgICAiIiIpLAogCiAgICAgSShuYW1lPSdTSE9SVF9CSU5TVFJJTkcnLAogICAgICAgY29kZT0nVScsCiAgICAgICBhcmc9c3RyaW5nMSwKICAgICAgIHN0YWNrX2JlZm9yZT1bXSwKLSAgICAgIHN0YWNrX2FmdGVyPVtweXN0cmluZ10sCisgICAgICBzdGFja19hZnRlcj1bcHlieXRlc19vcl9zdHJdLAogICAgICAgcHJvdG89MSwKICAgICAgIGRvYz0iIiJQdXNoIGEgUHl0aG9uIHN0cmluZyBvYmplY3QuCiAKLSAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgMS1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcKLSAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgaXMgdGhhdCBtYW55IGJ5dGVzLAotICAgICAgd2hpY2ggYXJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuICAoQWN0dWFsbHksIHRoZXkKLSAgICAgIGFyZSBkZWNvZGVkIGludG8gYSBzdHIgaW5zdGFuY2UgdXNpbmcgdGhlIGVuY29kaW5nIGdpdmVuIHRvIHRoZQotICAgICAgVW5waWNrbGVyIGNvbnN0cnVjdG9yLiBvciB0aGUgZGVmYXVsdCwgJ0FTQ0lJJy4pCisgICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogdGhlIGZpcnN0IGlzIGEgMS1ieXRlIHVuc2lnbmVkIGludCBnaXZpbmcKKyAgICAgIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZywgYW5kIHRoZSBzZWNvbmQgaXMgdGhhdCBtYW55CisgICAgICBieXRlcywgd2hpY2ggYXJlIHRha2VuIGxpdGVyYWxseSBhcyB0aGUgc3RyaW5nIGNvbnRlbnQuICBUaGVzZSBhcmUKKyAgICAgIHVzdWFsbHkgZGVjb2RlZCBpbnRvIGEgc3RyIGluc3RhbmNlIHVzaW5nIHRoZSBlbmNvZGluZyBnaXZlbiB0bworICAgICAgdGhlIFVucGlja2xlciBjb25zdHJ1Y3Rvci4gb3IgdGhlIGRlZmF1bHQsICdBU0NJSScuICBJZiB0aGUKKyAgICAgIGVuY29kaW5nIGdpdmVuIHdhcyAnYnl0ZXMnIGhvd2V2ZXIsIHRoZXkgd2lsbCBiZSBkZWNvZGVkIGFzIGJ5dGVzCisgICAgICBvYmplY3QgaW5zdGVhZC4KICAgICAgICIiIiksCiAKICAgICAjIEJ5dGVzIChwcm90b2NvbCAzIG9ubHk7IG9sZGVyIHByb3RvY29scyBkb24ndCBzdXBwb3J0IGJ5dGVzIGF0IGFsbCkKQEAgLTExNDMsNiArMTMyMiwxOSBAQAogICAgICAgbGl0ZXJhbGx5IGFzIHRoZSBzdHJpbmcgY29udGVudC4KICAgICAgICIiIiksCiAKKyAgICBJKG5hbWU9J0JJTkJZVEVTOCcsCisgICAgICBjb2RlPSdceDhlJywKKyAgICAgIGFyZz1ieXRlczgsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHlieXRlc10sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gYnl0ZXMgb2JqZWN0LgorCisgICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDgtYnl0ZSB1bnNpZ25lZCBpbnQgZ2l2aW5nCisgICAgICB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcsIGFuZCB0aGUgc2Vjb25kIGlzIHRoYXQgbWFueSBieXRlcywKKyAgICAgIHdoaWNoIGFyZSB0YWtlbiBsaXRlcmFsbHkgYXMgdGhlIHN0cmluZyBjb250ZW50LgorICAgICAgIiIiKSwKKwogICAgICMgV2F5cyB0byBzcGVsbCBOb25lLgogCiAgICAgSShuYW1lPSdOT05FJywKQEAgLTExOTEsNiArMTM4MywxOSBAQAogICAgICAgdW50aWwgdGhlIG5leHQgbmV3bGluZSBjaGFyYWN0ZXIuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdTSE9SVF9CSU5VTklDT0RFJywKKyAgICAgIGNvZGU9J1x4OGMnLAorICAgICAgYXJnPXVuaWNvZGVzdHJpbmcxLAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5dW5pY29kZV0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIlB1c2ggYSBQeXRob24gVW5pY29kZSBzdHJpbmcgb2JqZWN0LgorCisgICAgICBUaGVyZSBhcmUgdHdvIGFyZ3VtZW50czogIHRoZSBmaXJzdCBpcyBhIDEtYnl0ZSBsaXR0bGUtZW5kaWFuIHNpZ25lZCBpbnQKKyAgICAgIGdpdmluZyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBzdHJpbmcuICBUaGUgc2Vjb25kIGlzIHRoYXQgbWFueQorICAgICAgYnl0ZXMsIGFuZCBpcyB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nLgorICAgICAgIiIiKSwKKwogICAgIEkobmFtZT0nQklOVU5JQ09ERScsCiAgICAgICBjb2RlPSdYJywKICAgICAgIGFyZz11bmljb2Rlc3RyaW5nNCwKQEAgLTEyMDQsNiArMTQwOSwxOSBAQAogICAgICAgYnl0ZXMsIGFuZCBpcyB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgdGhlIFVuaWNvZGUgc3RyaW5nLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nQklOVU5JQ09ERTgnLAorICAgICAgY29kZT0nXHg4ZCcsCisgICAgICBhcmc9dW5pY29kZXN0cmluZzgsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bcHl1bmljb2RlXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiUHVzaCBhIFB5dGhvbiBVbmljb2RlIHN0cmluZyBvYmplY3QuCisKKyAgICAgIFRoZXJlIGFyZSB0d28gYXJndW1lbnRzOiAgdGhlIGZpcnN0IGlzIGEgOC1ieXRlIGxpdHRsZS1lbmRpYW4gc2lnbmVkIGludAorICAgICAgZ2l2aW5nIHRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHN0cmluZy4gIFRoZSBzZWNvbmQgaXMgdGhhdCBtYW55CisgICAgICBieXRlcywgYW5kIGlzIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVW5pY29kZSBzdHJpbmcuCisgICAgICAiIiIpLAorCiAgICAgIyBXYXlzIHRvIHNwZWxsIGZsb2F0cy4KIAogICAgIEkobmFtZT0nRkxPQVQnLApAQCAtMTQyOSw2ICsxNjQ3LDU0IEBACiAgICAgICAxLCAyLCAuLi4sIG4sIGFuZCBpbiB0aGF0IG9yZGVyLgogICAgICAgIiIiKSwKIAorICAgICMgV2F5cyB0byBidWlsZCBzZXRzCisKKyAgICBJKG5hbWU9J0VNUFRZX1NFVCcsCisgICAgICBjb2RlPSdceDhmJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVtdLAorICAgICAgc3RhY2tfYWZ0ZXI9W3B5c2V0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IlB1c2ggYW4gZW1wdHkgc2V0LiIpLAorCisgICAgSShuYW1lPSdBRERJVEVNUycsCisgICAgICBjb2RlPSdceDkwJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVtweXNldCwgbWFya29iamVjdCwgc3RhY2tzbGljZV0sCisgICAgICBzdGFja19hZnRlcj1bcHlzZXRdLAorICAgICAgcHJvdG89NCwKKyAgICAgIGRvYz0iIiJBZGQgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBpdGVtcyB0byBhbiBleGlzdGluZyBzZXQuCisKKyAgICAgIFRoZSBzbGljZSBvZiB0aGUgc3RhY2sgZm9sbG93aW5nIHRoZSB0b3Btb3N0IG1hcmtvYmplY3QgaXMgdGFrZW4gYXMKKyAgICAgIGEgc2VxdWVuY2Ugb2YgaXRlbXMsIGFkZGVkIHRvIHRoZSBzZXQgaW1tZWRpYXRlbHkgdW5kZXIgdGhlIHRvcG1vc3QKKyAgICAgIG1hcmtvYmplY3QuICBFdmVyeXRoaW5nIGF0IGFuZCBhZnRlciB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0IGlzIHBvcHBlZCwKKyAgICAgIGxlYXZpbmcgdGhlIG11dGF0ZWQgc2V0IGF0IHRoZSB0b3Agb2YgdGhlIHN0YWNrLgorCisgICAgICBTdGFjayBiZWZvcmU6ICAuLi4gcHlzZXQgbWFya29iamVjdCBpdGVtXzEgLi4uIGl0ZW1fbgorICAgICAgU3RhY2sgYWZ0ZXI6ICAgLi4uIHB5c2V0CisKKyAgICAgIHdoZXJlIHB5c2V0IGhhcyBiZWVuIG1vZGlmaWVkIHZpYSBweXNldC5hZGQoaXRlbV9pKSA9IGl0ZW1faSBmb3IgaSBpbgorICAgICAgMSwgMiwgLi4uLCBuLCBhbmQgaW4gdGhhdCBvcmRlci4KKyAgICAgICIiIiksCisKKyAgICAjIFdheSB0byBidWlsZCBmcm96ZW5zZXRzCisKKyAgICBJKG5hbWU9J0ZST1pFTlNFVCcsCisgICAgICBjb2RlPSdceDkxJywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVttYXJrb2JqZWN0LCBzdGFja3NsaWNlXSwKKyAgICAgIHN0YWNrX2FmdGVyPVtweWZyb3plbnNldF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIkJ1aWxkIGEgZnJvemVuc2V0IG91dCBvZiB0aGUgdG9wbW9zdCBzbGljZSwgYWZ0ZXIgbWFya29iamVjdC4KKworICAgICAgQWxsIHRoZSBzdGFjayBlbnRyaWVzIGZvbGxvd2luZyB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0IGFyZSBwbGFjZWQgaW50bworICAgICAgYSBzaW5nbGUgUHl0aG9uIGZyb3plbnNldCwgd2hpY2ggc2luZ2xlIGZyb3plbnNldCBvYmplY3QgcmVwbGFjZXMgYWxsCisgICAgICBvZiB0aGUgc3RhY2sgZnJvbSB0aGUgdG9wbW9zdCBtYXJrb2JqZWN0IG9ud2FyZC4gIEZvciBleGFtcGxlLAorCisgICAgICBTdGFjayBiZWZvcmU6IC4uLiBtYXJrb2JqZWN0IDEgMiAzCisgICAgICBTdGFjayBhZnRlcjogIC4uLiBmcm96ZW5zZXQoezEsIDIsIDN9KQorICAgICAgIiIiKSwKKwogICAgICMgU3RhY2sgbWFuaXB1bGF0aW9uLgogCiAgICAgSShuYW1lPSdQT1AnLApAQCAtMTU1MCw2ICsxODE2LDE4IEBACiAgICAgICB1bnNpZ25lZCBsaXR0bGUtZW5kaWFuIGludGVnZXIgZm9sbG93aW5nLgogICAgICAgIiIiKSwKIAorICAgIEkobmFtZT0nTUVNT0laRScsCisgICAgICBjb2RlPSdceDk0JywKKyAgICAgIGFyZz1Ob25lLAorICAgICAgc3RhY2tfYmVmb3JlPVthbnlvYmplY3RdLAorICAgICAgc3RhY2tfYWZ0ZXI9W2FueW9iamVjdF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIlN0b3JlIHRoZSBzdGFjayB0b3AgaW50byB0aGUgbWVtby4gIFRoZSBzdGFjayBpcyBub3QgcG9wcGVkLgorCisgICAgICBUaGUgaW5kZXggb2YgdGhlIG1lbW8gbG9jYXRpb24gdG8gd3JpdGUgaXMgdGhlIG51bWJlciBvZgorICAgICAgZWxlbWVudHMgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIG1lbW8uCisgICAgICAiIiIpLAorCiAgICAgIyBBY2Nlc3MgdGhlIGV4dGVuc2lvbiByZWdpc3RyeSAocHJlZGVmaW5lZCBvYmplY3RzKS4gIEFraW4gdG8gdGhlIEdFVAogICAgICMgZmFtaWx5LgogCkBAIC0xNjE1LDYgKzE4OTMsMTUgQEAKICAgICAgIHN0YWNrLCBzbyB1bnBpY2tsaW5nIHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRoaXMgZm9ybSBvZiBsb29rdXAuCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdTVEFDS19HTE9CQUwnLAorICAgICAgY29kZT0nXHg5MycsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bcHl1bmljb2RlLCBweXVuaWNvZGVdLAorICAgICAgc3RhY2tfYWZ0ZXI9W2FueW9iamVjdF0sCisgICAgICBwcm90bz00LAorICAgICAgZG9jPSIiIlB1c2ggYSBnbG9iYWwgb2JqZWN0IChtb2R1bGUuYXR0cikgb24gdGhlIHN0YWNrLgorICAgICAgIiIiKSwKKwogICAgICMgV2F5cyB0byBidWlsZCBvYmplY3RzIG9mIGNsYXNzZXMgcGlja2xlIGRvZXNuJ3Qga25vdyBhYm91dCBkaXJlY3RseQogICAgICMgKHVzZXItZGVmaW5lZCBjbGFzc2VzKS4gIEkgZGVzcGFpciBvZiBkb2N1bWVudGluZyB0aGlzIGFjY3VyYXRlbHkKICAgICAjIGFuZCBjb21wcmVoZW5zaWJseSAtLSB5b3UgcmVhbGx5IGhhdmUgdG8gcmVhZCB0aGUgcGlja2xlIGNvZGUgdG8KQEAgLTE3NzEsNiArMjA1OCwyMSBAQAogICAgICAgb250byB0aGUgc3RhY2suCiAgICAgICAiIiIpLAogCisgICAgSShuYW1lPSdORVdPQkpfRVgnLAorICAgICAgY29kZT0nXHg5MicsCisgICAgICBhcmc9Tm9uZSwKKyAgICAgIHN0YWNrX2JlZm9yZT1bYW55b2JqZWN0LCBhbnlvYmplY3QsIGFueW9iamVjdF0sCisgICAgICBzdGFja19hZnRlcj1bYW55b2JqZWN0XSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiQnVpbGQgYW4gb2JqZWN0IGluc3RhbmNlLgorCisgICAgICBUaGUgc3RhY2sgYmVmb3JlIHNob3VsZCBiZSB0aG91Z2h0IG9mIGFzIGNvbnRhaW5pbmcgYSBjbGFzcworICAgICAgb2JqZWN0IGZvbGxvd2VkIGJ5IGFuIGFyZ3VtZW50IHR1cGxlIGFuZCBieSBhIGtleXdvcmQgYXJndW1lbnQgZGljdAorICAgICAgKHRoZSBkaWN0IGJlaW5nIHRoZSBzdGFjayB0b3ApLiAgQ2FsbCB0aGVzZSBjbHMgYW5kIGFyZ3MuICBUaGV5IGFyZQorICAgICAgcG9wcGVkIG9mZiB0aGUgc3RhY2ssIGFuZCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKKyAgICAgIGNscy5fX25ld19fKGNscywgKmFyZ3MsICprd2FyZ3MpIGlzICBwdXNoZWQgYmFjayAgb250byB0aGUgc3RhY2suCisgICAgICAiIiIpLAorCiAgICAgIyBNYWNoaW5lIGNvbnRyb2wuCiAKICAgICBJKG5hbWU9J1BST1RPJywKQEAgLTE3OTgsNiArMjEwMCwyMCBAQAogICAgICAgZW1wdHkgdGhlbi4KICAgICAgICIiIiksCiAKKyAgICAjIEZyYW1pbmcgc3VwcG9ydC4KKworICAgIEkobmFtZT0nRlJBTUUnLAorICAgICAgY29kZT0nXHg5NScsCisgICAgICBhcmc9dWludDgsCisgICAgICBzdGFja19iZWZvcmU9W10sCisgICAgICBzdGFja19hZnRlcj1bXSwKKyAgICAgIHByb3RvPTQsCisgICAgICBkb2M9IiIiSW5kaWNhdGUgdGhlIGJlZ2lubmluZyBvZiBhIG5ldyBmcmFtZS4KKworICAgICAgVGhlIHVucGlja2xlciBtYXkgdXNlIHRoaXMgb3Bjb2RlIHRvIHNhZmVseSBwcmVmZXRjaCBkYXRhIGZyb20gaXRzCisgICAgICB1bmRlcmx5aW5nIHN0cmVhbS4KKyAgICAgICIiIiksCisKICAgICAjIFdheXMgdG8gZGVhbCB3aXRoIHBlcnNpc3RlbnQgSURzLgogCiAgICAgSShuYW1lPSdQRVJTSUQnLApAQCAtMTkwNCw2ICsyMjIwLDM4IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQSBwaWNrbGUgb3Bjb2RlIGdlbmVyYXRvci4KIAorZGVmIF9nZW5vcHMoZGF0YSwgeWllbGRfZW5kX3Bvcz1GYWxzZSk6CisgICAgaWYgaXNpbnN0YW5jZShkYXRhLCBieXRlc190eXBlcyk6CisgICAgICAgIGRhdGEgPSBpby5CeXRlc0lPKGRhdGEpCisKKyAgICBpZiBoYXNhdHRyKGRhdGEsICJ0ZWxsIik6CisgICAgICAgIGdldHBvcyA9IGRhdGEudGVsbAorICAgIGVsc2U6CisgICAgICAgIGdldHBvcyA9IGxhbWJkYTogTm9uZQorCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgcG9zID0gZ2V0cG9zKCkKKyAgICAgICAgY29kZSA9IGRhdGEucmVhZCgxKQorICAgICAgICBvcGNvZGUgPSBjb2RlMm9wLmdldChjb2RlLmRlY29kZSgibGF0aW4tMSIpKQorICAgICAgICBpZiBvcGNvZGUgaXMgTm9uZToKKyAgICAgICAgICAgIGlmIGNvZGUgPT0gYiIiOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBpY2tsZSBleGhhdXN0ZWQgYmVmb3JlIHNlZWluZyBTVE9QIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXQgcG9zaXRpb24gJXMsIG9wY29kZSAlciB1bmtub3duIiAlICgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8dW5rbm93bj4iIGlmIHBvcyBpcyBOb25lIGVsc2UgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSkpCisgICAgICAgIGlmIG9wY29kZS5hcmcgaXMgTm9uZToKKyAgICAgICAgICAgIGFyZyA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZyA9IG9wY29kZS5hcmcucmVhZGVyKGRhdGEpCisgICAgICAgIGlmIHlpZWxkX2VuZF9wb3M6CisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIGFyZywgcG9zLCBnZXRwb3MoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBhcmcsIHBvcworICAgICAgICBpZiBjb2RlID09IGInLic6CisgICAgICAgICAgICBhc3NlcnQgb3Bjb2RlLm5hbWUgPT0gJ1NUT1AnCisgICAgICAgICAgICBicmVhaworCiBkZWYgZ2Vub3BzKHBpY2tsZSk6CiAgICAgIiIiR2VuZXJhdGUgYWxsIHRoZSBvcGNvZGVzIGluIGEgcGlja2xlLgogCkBAIC0xOTI3LDYyICsyMjc1LDY5IEBACiAgICAgdXNlZC4gIEVsc2UgKHRoZSBwaWNrbGUgZG9lc24ndCBoYXZlIGEgdGVsbCgpLCBhbmQgaXQncyBub3Qgb2J2aW91cyBob3cKICAgICB0byBxdWVyeSBpdHMgY3VycmVudCBwb3NpdGlvbikgcG9zIGlzIE5vbmUuCiAgICAgIiIiCi0KLSAgICBpZiBpc2luc3RhbmNlKHBpY2tsZSwgYnl0ZXNfdHlwZXMpOgotICAgICAgICBpbXBvcnQgaW8KLSAgICAgICAgcGlja2xlID0gaW8uQnl0ZXNJTyhwaWNrbGUpCi0KLSAgICBpZiBoYXNhdHRyKHBpY2tsZSwgInRlbGwiKToKLSAgICAgICAgZ2V0cG9zID0gcGlja2xlLnRlbGwKLSAgICBlbHNlOgotICAgICAgICBnZXRwb3MgPSBsYW1iZGE6IE5vbmUKLQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIHBvcyA9IGdldHBvcygpCi0gICAgICAgIGNvZGUgPSBwaWNrbGUucmVhZCgxKQotICAgICAgICBvcGNvZGUgPSBjb2RlMm9wLmdldChjb2RlLmRlY29kZSgibGF0aW4tMSIpKQotICAgICAgICBpZiBvcGNvZGUgaXMgTm9uZToKLSAgICAgICAgICAgIGlmIGNvZGUgPT0gYiIiOgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBpY2tsZSBleGhhdXN0ZWQgYmVmb3JlIHNlZWluZyBTVE9QIikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiYXQgcG9zaXRpb24gJXMsIG9wY29kZSAlciB1bmtub3duIiAlICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcyBpcyBOb25lIGFuZCAiPHVua25vd24+IiBvciBwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlKSkKLSAgICAgICAgaWYgb3Bjb2RlLmFyZyBpcyBOb25lOgotICAgICAgICAgICAgYXJnID0gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgYXJnID0gb3Bjb2RlLmFyZy5yZWFkZXIocGlja2xlKQotICAgICAgICB5aWVsZCBvcGNvZGUsIGFyZywgcG9zCi0gICAgICAgIGlmIGNvZGUgPT0gYicuJzoKLSAgICAgICAgICAgIGFzc2VydCBvcGNvZGUubmFtZSA9PSAnU1RPUCcKLSAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIF9nZW5vcHMocGlja2xlKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQSBwaWNrbGUgb3B0aW1pemVyLgogCiBkZWYgb3B0aW1pemUocCk6CiAgICAgJ09wdGltaXplIGEgcGlja2xlIHN0cmluZyBieSByZW1vdmluZyB1bnVzZWQgUFVUIG9wY29kZXMnCi0gICAgZ2V0cyA9IHNldCgpICAgICAgICAgICAgIyBzZXQgb2YgYXJncyB1c2VkIGJ5IGEgR0VUIG9wY29kZQotICAgIHB1dHMgPSBbXSAgICAgICAgICAgICAgICMgKGFyZywgc3RhcnRwb3MsIHN0b3Bwb3MpIGZvciB0aGUgUFVUIG9wY29kZXMKLSAgICBwcmV2cG9zID0gTm9uZSAgICAgICAgICAjIHNldCB0byBwb3MgaWYgcHJldmlvdXMgb3Bjb2RlIHdhcyBhIFBVVAotICAgIGZvciBvcGNvZGUsIGFyZywgcG9zIGluIGdlbm9wcyhwKToKLSAgICAgICAgaWYgcHJldnBvcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHB1dHMuYXBwZW5kKChwcmV2YXJnLCBwcmV2cG9zLCBwb3MpKQotICAgICAgICAgICAgcHJldnBvcyA9IE5vbmUKKyAgICBwdXQgPSAnUFVUJworICAgIGdldCA9ICdHRVQnCisgICAgb2xkaWRzID0gc2V0KCkgICAgICAgICAgIyBzZXQgb2YgYWxsIFBVVCBpZHMKKyAgICBuZXdpZHMgPSB7fSAgICAgICAgICAgICAjIHNldCBvZiBpZHMgdXNlZCBieSBhIEdFVCBvcGNvZGUKKyAgICBvcGNvZGVzID0gW10gICAgICAgICAgICAjIChvcCwgaWR4KSBvciAocG9zLCBlbmRfcG9zKQorICAgIHByb3RvID0gMAorICAgIHByb3RvaGVhZGVyID0gYicnCisgICAgZm9yIG9wY29kZSwgYXJnLCBwb3MsIGVuZF9wb3MgaW4gX2dlbm9wcyhwLCB5aWVsZF9lbmRfcG9zPVRydWUpOgogICAgICAgICBpZiAnUFVUJyBpbiBvcGNvZGUubmFtZToKLSAgICAgICAgICAgIHByZXZhcmcsIHByZXZwb3MgPSBhcmcsIHBvcworICAgICAgICAgICAgb2xkaWRzLmFkZChhcmcpCisgICAgICAgICAgICBvcGNvZGVzLmFwcGVuZCgocHV0LCBhcmcpKQorICAgICAgICBlbGlmIG9wY29kZS5uYW1lID09ICdNRU1PSVpFJzoKKyAgICAgICAgICAgIGlkeCA9IGxlbihvbGRpZHMpCisgICAgICAgICAgICBvbGRpZHMuYWRkKGlkeCkKKyAgICAgICAgICAgIG9wY29kZXMuYXBwZW5kKChwdXQsIGlkeCkpCisgICAgICAgIGVsaWYgJ0ZSQU1FJyBpbiBvcGNvZGUubmFtZToKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxpZiAnR0VUJyBpbiBvcGNvZGUubmFtZToKLSAgICAgICAgICAgIGdldHMuYWRkKGFyZykKKyAgICAgICAgICAgIGlmIG9wY29kZS5wcm90byA+IHByb3RvOgorICAgICAgICAgICAgICAgIHByb3RvID0gb3Bjb2RlLnByb3RvCisgICAgICAgICAgICBuZXdpZHNbYXJnXSA9IE5vbmUKKyAgICAgICAgICAgIG9wY29kZXMuYXBwZW5kKChnZXQsIGFyZykpCisgICAgICAgIGVsaWYgb3Bjb2RlLm5hbWUgPT0gJ1BST1RPJzoKKyAgICAgICAgICAgIGlmIGFyZyA+IHByb3RvOgorICAgICAgICAgICAgICAgIHByb3RvID0gYXJnCisgICAgICAgICAgICBpZiBwb3MgPT0gMDoKKyAgICAgICAgICAgICAgICBwcm90b2hlYWRlciA9IHBbcG9zOiBlbmRfcG9zXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBvcGNvZGVzLmFwcGVuZCgocG9zLCBlbmRfcG9zKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG9wY29kZXMuYXBwZW5kKChwb3MsIGVuZF9wb3MpKQorICAgIGRlbCBvbGRpZHMKIAotICAgICMgQ29weSB0aGUgcGlja2xlIHN0cmluZyBleGNlcHQgZm9yIFBVVFMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgR0VUCi0gICAgcyA9IFtdCi0gICAgaSA9IDAKLSAgICBmb3IgYXJnLCBzdGFydCwgc3RvcCBpbiBwdXRzOgotICAgICAgICBqID0gc3RvcCBpZiAoYXJnIGluIGdldHMpIGVsc2Ugc3RhcnQKLSAgICAgICAgcy5hcHBlbmQocFtpOmpdKQotICAgICAgICBpID0gc3RvcAotICAgIHMuYXBwZW5kKHBbaTpdKQotICAgIHJldHVybiBiJycuam9pbihzKQorICAgICMgQ29weSB0aGUgb3Bjb2RlcyBleGNlcHQgZm9yIFBVVFMgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgR0VUCisgICAgb3V0ID0gaW8uQnl0ZXNJTygpCisgICAgIyBXcml0ZSB0aGUgUFJPVE8gaGVhZGVyIGJlZm9yZSBhbnkgZnJhbWluZworICAgIG91dC53cml0ZShwcm90b2hlYWRlcikKKyAgICBwaWNrbGVyID0gcGlja2xlLl9QaWNrbGVyKG91dCwgcHJvdG8pCisgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgcGlja2xlci5mcmFtZXIuc3RhcnRfZnJhbWluZygpCisgICAgaWR4ID0gMAorICAgIGZvciBvcCwgYXJnIGluIG9wY29kZXM6CisgICAgICAgIGlmIG9wIGlzIHB1dDoKKyAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gbmV3aWRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkYXRhID0gcGlja2xlci5wdXQoaWR4KQorICAgICAgICAgICAgbmV3aWRzW2FyZ10gPSBpZHgKKyAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgIGVsaWYgb3AgaXMgZ2V0OgorICAgICAgICAgICAgZGF0YSA9IHBpY2tsZXIuZ2V0KG5ld2lkc1thcmddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9IHBbb3A6YXJnXQorICAgICAgICBwaWNrbGVyLmZyYW1lci5jb21taXRfZnJhbWUoKQorICAgICAgICBwaWNrbGVyLndyaXRlKGRhdGEpCisgICAgcGlja2xlci5mcmFtZXIuZW5kX2ZyYW1pbmcoKQorICAgIHJldHVybiBvdXQuZ2V0dmFsdWUoKQogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQSBzeW1ib2xpYyBwaWNrbGUgZGlzYXNzZW1ibGVyLgpAQCAtMjA4MiwxNyArMjQzNywyMCBAQAogICAgICAgICAgICAgICAgIGVycm9ybXNnID0gbWFya21zZyA9ICJubyBNQVJLIGV4aXN0cyBvbiBzdGFjayIKIAogICAgICAgICAjIENoZWNrIGZvciBjb3JyZWN0IG1lbW8gdXNhZ2UuCi0gICAgICAgIGlmIG9wY29kZS5uYW1lIGluICgiUFVUIiwgIkJJTlBVVCIsICJMT05HX0JJTlBVVCIpOgotICAgICAgICAgICAgYXNzZXJ0IGFyZyBpcyBub3QgTm9uZQotICAgICAgICAgICAgaWYgYXJnIGluIG1lbW86CisgICAgICAgIGlmIG9wY29kZS5uYW1lIGluICgiUFVUIiwgIkJJTlBVVCIsICJMT05HX0JJTlBVVCIsICJNRU1PSVpFIik6CisgICAgICAgICAgICBpZiBvcGNvZGUubmFtZSA9PSAiTUVNT0laRSI6CisgICAgICAgICAgICAgICAgbWVtb19pZHggPSBsZW4obWVtbykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGFyZyBpcyBub3QgTm9uZQorICAgICAgICAgICAgICAgIG1lbW9faWR4ID0gYXJnCisgICAgICAgICAgICBpZiBtZW1vX2lkeCBpbiBtZW1vOgogICAgICAgICAgICAgICAgIGVycm9ybXNnID0gIm1lbW8ga2V5ICVyIGFscmVhZHkgZGVmaW5lZCIgJSBhcmcKICAgICAgICAgICAgIGVsaWYgbm90IHN0YWNrOgogICAgICAgICAgICAgICAgIGVycm9ybXNnID0gInN0YWNrIGlzIGVtcHR5IC0tIGNhbid0IHN0b3JlIGludG8gbWVtbyIKICAgICAgICAgICAgIGVsaWYgc3RhY2tbLTFdIGlzIG1hcmtvYmplY3Q6CiAgICAgICAgICAgICAgICAgZXJyb3Jtc2cgPSAiY2FuJ3Qgc3RvcmUgbWFya29iamVjdCBpbiB0aGUgbWVtbyIKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbWVtb1thcmddID0gc3RhY2tbLTFdCi0KKyAgICAgICAgICAgICAgICBtZW1vW21lbW9faWR4XSA9IHN0YWNrWy0xXQogICAgICAgICBlbGlmIG9wY29kZS5uYW1lIGluICgiR0VUIiwgIkJJTkdFVCIsICJMT05HX0JJTkdFVCIpOgogICAgICAgICAgICAgaWYgYXJnIGluIG1lbW86CiAgICAgICAgICAgICAgICAgYXNzZXJ0IGxlbihhZnRlcikgPT0gMQpkaWZmIC0tZ2l0IGEvTGliL3BrZ3V0aWwucHkgYi9MaWIvcGtndXRpbC5weQppbmRleCAyMGU2NDk4Li5hNTRlOTQ3IDEwMDY0NAotLS0gYS9MaWIvcGtndXRpbC5weQorKysgYi9MaWIvcGtndXRpbC5weQpAQCAtMSwxMiArMSwxNCBAQAogIiIiVXRpbGl0aWVzIHRvIHN1cHBvcnQgcGFja2FnZXMuIiIiCiAKLWltcG9ydCBvcwotaW1wb3J0IHN5cworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHNpbmdsZWRpc3BhdGNoIGFzIHNpbXBsZWdlbmVyaWMKIGltcG9ydCBpbXBvcnRsaWIKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAoraW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKK2ltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKLWZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KK2ltcG9ydCBzeXMKIGZyb20gdHlwZXMgaW1wb3J0IE1vZHVsZVR5cGUKK2ltcG9ydCB3YXJuaW5ncwogCiBfX2FsbF9fID0gWwogICAgICdnZXRfaW1wb3J0ZXInLCAnaXRlcl9pbXBvcnRlcnMnLCAnZ2V0X2xvYWRlcicsICdmaW5kX2xvYWRlcicsCkBAIC0xNCw1OSArMTYsMzQgQEAKICAgICAnSW1wSW1wb3J0ZXInLCAnSW1wTG9hZGVyJywgJ3JlYWRfY29kZScsICdleHRlbmRfcGF0aCcsCiBdCiAKKworZGVmIF9nZXRfc3BlYyhmaW5kZXIsIG5hbWUpOgorICAgICIiIlJldHVybiB0aGUgZmluZGVyLXNwZWNpZmljIG1vZHVsZSBzcGVjLiIiIgorICAgICMgV29ya3Mgd2l0aCBsZWdhY3kgZmluZGVycy4KKyAgICB0cnk6CisgICAgICAgIGZpbmRfc3BlYyA9IGZpbmRlci5maW5kX3NwZWMKKyAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgIGxvYWRlciA9IGZpbmRlci5maW5kX21vZHVsZShuYW1lKQorICAgICAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlcikKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZmluZF9zcGVjKG5hbWUpCisKKwogZGVmIHJlYWRfY29kZShzdHJlYW0pOgogICAgICMgVGhpcyBoZWxwZXIgaXMgbmVlZGVkIGluIG9yZGVyIGZvciB0aGUgUEVQIDMwMiBlbXVsYXRpb24gdG8KICAgICAjIGNvcnJlY3RseSBoYW5kbGUgY29tcGlsZWQgZmlsZXMKICAgICBpbXBvcnQgbWFyc2hhbAogCiAgICAgbWFnaWMgPSBzdHJlYW0ucmVhZCg0KQotICAgIGlmIG1hZ2ljICE9IGltcC5nZXRfbWFnaWMoKToKKyAgICBpZiBtYWdpYyAhPSBpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVI6CiAgICAgICAgIHJldHVybiBOb25lCiAKICAgICBzdHJlYW0ucmVhZCg4KSAjIFNraXAgdGltZXN0YW1wIGFuZCBzaXplCiAgICAgcmV0dXJuIG1hcnNoYWwubG9hZChzdHJlYW0pCiAKIAotZGVmIHNpbXBsZWdlbmVyaWMoZnVuYyk6Ci0gICAgIiIiTWFrZSBhIHRyaXZpYWwgc2luZ2xlLWRpc3BhdGNoIGdlbmVyaWMgZnVuY3Rpb24iIiIKLSAgICByZWdpc3RyeSA9IHt9Ci0gICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3cpOgotICAgICAgICBvYiA9IGFyZ3NbMF0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY2xzID0gb2IuX19jbGFzc19fCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIGNscyA9IHR5cGUob2IpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1ybyA9IGNscy5fX21yb19fCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBjbGFzcyBjbHMoY2xzLCBvYmplY3QpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgbXJvID0gY2xzLl9fbXJvX19bMTpdCi0gICAgICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgICAgIG1ybyA9IG9iamVjdCwgICAjIG11c3QgYmUgYW4gRXh0ZW5zaW9uQ2xhc3Mgb3Igc29tZSBzdWNoICA6KAotICAgICAgICBmb3IgdCBpbiBtcm86Ci0gICAgICAgICAgICBpZiB0IGluIHJlZ2lzdHJ5OgotICAgICAgICAgICAgICAgIHJldHVybiByZWdpc3RyeVt0XSgqYXJncywgKiprdykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3KQotICAgIHRyeToKLSAgICAgICAgd3JhcHBlci5fX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KLSAgICBleGNlcHQgKFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IpOgotICAgICAgICBwYXNzICAgICMgUHl0aG9uIDIuMyBkb2Vzbid0IGFsbG93IGZ1bmN0aW9ucyB0byBiZSByZW5hbWVkCi0KLSAgICBkZWYgcmVnaXN0ZXIodHlwLCBmdW5jPU5vbmUpOgotICAgICAgICBpZiBmdW5jIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gbGFtYmRhIGY6IHJlZ2lzdGVyKHR5cCwgZikKLSAgICAgICAgcmVnaXN0cnlbdHlwXSA9IGZ1bmMKLSAgICAgICAgcmV0dXJuIGZ1bmMKLQotICAgIHdyYXBwZXIuX19kaWN0X18gPSBmdW5jLl9fZGljdF9fCi0gICAgd3JhcHBlci5fX2RvY19fID0gZnVuYy5fX2RvY19fCi0gICAgd3JhcHBlci5yZWdpc3RlciA9IHJlZ2lzdGVyCi0gICAgcmV0dXJuIHdyYXBwZXIKLQotCiBkZWYgd2Fsa19wYWNrYWdlcyhwYXRoPU5vbmUsIHByZWZpeD0nJywgb25lcnJvcj1Ob25lKToKICAgICAiIiJZaWVsZHMgKG1vZHVsZV9sb2FkZXIsIG5hbWUsIGlzcGtnKSBmb3IgYWxsIG1vZHVsZXMgcmVjdXJzaXZlbHkKICAgICBvbiBwYXRoLCBvciwgaWYgcGF0aCBpcyBOb25lLCBhbGwgYWNjZXNzaWJsZSBtb2R1bGVzLgpAQCAtMTIxLDggKzk4LDcgQEAKICAgICAgICAgICAgICAgICAjIGRvbid0IHRyYXZlcnNlIHBhdGggaXRlbXMgd2UndmUgc2VlbiBiZWZvcmUKICAgICAgICAgICAgICAgICBwYXRoID0gW3AgZm9yIHAgaW4gcGF0aCBpZiBub3Qgc2VlbihwKV0KIAotICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIHdhbGtfcGFja2FnZXMocGF0aCwgbmFtZSsnLicsIG9uZXJyb3IpOgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBpdGVtCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSB3YWxrX3BhY2thZ2VzKHBhdGgsIG5hbWUrJy4nLCBvbmVycm9yKQogCiAKIGRlZiBpdGVyX21vZHVsZXMocGF0aD1Ob25lLCBwcmVmaXg9JycpOgpAQCAtMTQ5LDEzICsxMjUsMTIgQEAKICAgICAgICAgICAgICAgICB5aWVsZCBpLCBuYW1lLCBpc3BrZwogCiAKLSNAc2ltcGxlZ2VuZXJpYworQHNpbXBsZWdlbmVyaWMKIGRlZiBpdGVyX2ltcG9ydGVyX21vZHVsZXMoaW1wb3J0ZXIsIHByZWZpeD0nJyk6CiAgICAgaWYgbm90IGhhc2F0dHIoaW1wb3J0ZXIsICdpdGVyX21vZHVsZXMnKToKICAgICAgICAgcmV0dXJuIFtdCiAgICAgcmV0dXJuIGltcG9ydGVyLml0ZXJfbW9kdWxlcyhwcmVmaXgpCiAKLWl0ZXJfaW1wb3J0ZXJfbW9kdWxlcyA9IHNpbXBsZWdlbmVyaWMoaXRlcl9pbXBvcnRlcl9tb2R1bGVzKQogCiAjIEltcGxlbWVudCBhIGZpbGUgd2Fsa2VyIGZvciB0aGUgbm9ybWFsIGltcG9ydGxpYiBwYXRoIGhvb2sKIGRlZiBfaXRlcl9maWxlX2ZpbmRlcl9tb2R1bGVzKGltcG9ydGVyLCBwcmVmaXg9JycpOgpAQCAtMjAxLDYgKzE3NiwxMyBAQAogaXRlcl9pbXBvcnRlcl9tb2R1bGVzLnJlZ2lzdGVyKAogICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciwgX2l0ZXJfZmlsZV9maW5kZXJfbW9kdWxlcykKIAorCitkZWYgX2ltcG9ydF9pbXAoKToKKyAgICBnbG9iYWwgaW1wCisgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgIGltcCA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdpbXAnKQorCiBjbGFzcyBJbXBJbXBvcnRlcjoKICAgICAiIiJQRVAgMzAyIEltcG9ydGVyIHRoYXQgd3JhcHMgUHl0aG9uJ3MgImNsYXNzaWMiIGltcG9ydCBhbGdvcml0aG0KIApAQCAtMjEzLDggKzE5NSwxMCBAQAogICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIHdhcm4oIlRoaXMgZW11bGF0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAnaW1wb3J0bGliJyBpbnN0ZWFkIiwKKyAgICAgICAgZ2xvYmFsIGltcAorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGlzIGVtdWxhdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ2ltcG9ydGxpYicgaW5zdGVhZCIsCiAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBfaW1wb3J0X2ltcCgpCiAgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKIAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKQEAgLTI3OSw4ICsyNjMsOSBAQAogICAgIGNvZGUgPSBzb3VyY2UgPSBOb25lCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZnVsbG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBldGMpOgotICAgICAgICB3YXJuKCJUaGlzIGVtdWxhdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ2ltcG9ydGxpYicgaW5zdGVhZCIsCi0gICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICB3YXJuaW5ncy53YXJuKCJUaGlzIGVtdWxhdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgJ2ltcG9ydGxpYicgaW5zdGVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICBfaW1wb3J0X2ltcCgpCiAgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCiAgICAgICAgIHNlbGYuZnVsbG5hbWUgPSBmdWxsbmFtZQpAQCAtMzUwLDE2ICszMzUsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKICAgICAgICAgICAgIGVsaWYgbW9kX3R5cGU9PWltcC5QWV9DT01QSUxFRDoKICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhzZWxmLmZpbGVuYW1lWzotMV0pOgotICAgICAgICAgICAgICAgICAgICBmID0gb3BlbihzZWxmLmZpbGVuYW1lWzotMV0sICdyJykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBmLnJlYWQoKQotICAgICAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWVbOi0xXSwgJ3InKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBmLnJlYWQoKQogICAgICAgICAgICAgZWxpZiBtb2RfdHlwZT09aW1wLlBLR19ESVJFQ1RPUlk6CiAgICAgICAgICAgICAgICAgc2VsZi5zb3VyY2UgPSBzZWxmLl9nZXRfZGVsZWdhdGUoKS5nZXRfc291cmNlKCkKICAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlCiAKLQogICAgIGRlZiBfZ2V0X2RlbGVnYXRlKHNlbGYpOgotICAgICAgICByZXR1cm4gSW1wSW1wb3J0ZXIoc2VsZi5maWxlbmFtZSkuZmluZF9tb2R1bGUoJ19faW5pdF9fJykKKyAgICAgICAgZmluZGVyID0gSW1wSW1wb3J0ZXIoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgc3BlYyA9IF9nZXRfc3BlYyhmaW5kZXIsICdfX2luaXRfXycpCisgICAgICAgIHJldHVybiBzcGVjLmxvYWRlcgogCiAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZT1Ob25lKToKICAgICAgICAgZnVsbG5hbWUgPSBzZWxmLl9maXhfbmFtZShmdWxsbmFtZSkKQEAgLTQ1NiwxMiArNDQxLDEyIEBACiAgICAgICAgIGlmIHBhdGggaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybgogICAgIGVsc2U6Ci0gICAgICAgIGZvciBpbXBvcnRlciBpbiBzeXMubWV0YV9wYXRoOgotICAgICAgICAgICAgeWllbGQgaW1wb3J0ZXIKKyAgICAgICAgeWllbGQgZnJvbSBzeXMubWV0YV9wYXRoCiAgICAgICAgIHBhdGggPSBzeXMucGF0aAogICAgIGZvciBpdGVtIGluIHBhdGg6CiAgICAgICAgIHlpZWxkIGdldF9pbXBvcnRlcihpdGVtKQogCisKIGRlZiBnZXRfbG9hZGVyKG1vZHVsZV9vcl9uYW1lKToKICAgICAiIiJHZXQgYSBQRVAgMzAyICJsb2FkZXIiIG9iamVjdCBmb3IgbW9kdWxlX29yX25hbWUKIApAQCAtNDcxLDExICs0NTYsMTUgQEAKICAgICAiIiIKICAgICBpZiBtb2R1bGVfb3JfbmFtZSBpbiBzeXMubW9kdWxlczoKICAgICAgICAgbW9kdWxlX29yX25hbWUgPSBzeXMubW9kdWxlc1ttb2R1bGVfb3JfbmFtZV0KKyAgICAgICAgaWYgbW9kdWxlX29yX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGVfb3JfbmFtZSwgTW9kdWxlVHlwZSk6CiAgICAgICAgIG1vZHVsZSA9IG1vZHVsZV9vcl9uYW1lCiAgICAgICAgIGxvYWRlciA9IGdldGF0dHIobW9kdWxlLCAnX19sb2FkZXJfXycsIE5vbmUpCiAgICAgICAgIGlmIGxvYWRlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybiBsb2FkZXIKKyAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGUsICdfX3NwZWNfXycsIE5vbmUpIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICBmdWxsbmFtZSA9IG1vZHVsZS5fX25hbWVfXwogICAgIGVsc2U6CiAgICAgICAgIGZ1bGxuYW1lID0gbW9kdWxlX29yX25hbWUKQEAgLTQ4NSwyOSArNDc0LDIyIEBACiBkZWYgZmluZF9sb2FkZXIoZnVsbG5hbWUpOgogICAgICIiIkZpbmQgYSBQRVAgMzAyICJsb2FkZXIiIG9iamVjdCBmb3IgZnVsbG5hbWUKIAotICAgIFRoaXMgaXMgcyBjb252ZW5pZW5jZSB3cmFwcGVyIGFyb3VuZCA6ZnVuYzpgaW1wb3J0bGliLmZpbmRfbG9hZGVyYCB0aGF0Ci0gICAgc2V0cyB0aGUgKnBhdGgqIGFyZ3VtZW50IGNvcnJlY3RseSB3aGVuIHNlYXJjaGluZyBmb3Igc3VibW9kdWxlcywgYW5kCi0gICAgYWxzbyBlbnN1cmVzIHBhcmVudCBwYWNrYWdlcyAoaWYgYW55KSBhcmUgaW1wb3J0ZWQgYmVmb3JlIHNlYXJjaGluZyBmb3IKLSAgICBzdWJtb2R1bGVzLgorICAgIFRoaXMgaXMgYSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3cmFwcGVyIGFyb3VuZAorICAgIGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYyB0aGF0IGNvbnZlcnRzIG1vc3QgZmFpbHVyZXMgdG8gSW1wb3J0RXJyb3IKKyAgICBhbmQgb25seSByZXR1cm5zIHRoZSBsb2FkZXIgcmF0aGVyIHRoYW4gdGhlIGZ1bGwgc3BlYwogICAgICIiIgogICAgIGlmIGZ1bGxuYW1lLnN0YXJ0c3dpdGgoJy4nKToKICAgICAgICAgbXNnID0gIlJlbGF0aXZlIG1vZHVsZSBuYW1lIHshcn0gbm90IHN1cHBvcnRlZCIuZm9ybWF0KGZ1bGxuYW1lKQogICAgICAgICByYWlzZSBJbXBvcnRFcnJvcihtc2cpCi0gICAgcGF0aCA9IE5vbmUKLSAgICBwa2dfbmFtZSA9IGZ1bGxuYW1lLnJwYXJ0aXRpb24oIi4iKVswXQotICAgIGlmIHBrZ19uYW1lOgotICAgICAgICBwa2cgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShwa2dfbmFtZSkKLSAgICAgICAgcGF0aCA9IGdldGF0dHIocGtnLCAiX19wYXRoX18iLCBOb25lKQotICAgICAgICBpZiBwYXRoIGlzIE5vbmU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQogICAgIHRyeToKLSAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5maW5kX2xvYWRlcihmdWxsbmFtZSwgcGF0aCkKKyAgICAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvciwgVHlwZUVycm9yLCBWYWx1ZUVycm9yKSBhcyBleDoKICAgICAgICAgIyBUaGlzIGhhY2sgZml4ZXMgYW4gaW1wZWRhbmNlIG1pc21hdGNoIGJldHdlZW4gcGtndXRpbCBhbmQKICAgICAgICAgIyBpbXBvcnRsaWIsIHdoZXJlIHRoZSBsYXR0ZXIgcmFpc2VzIG90aGVyIGVycm9ycyBmb3IgY2FzZXMgd2hlcmUKICAgICAgICAgIyBwa2d1dGlsIHByZXZpb3VzbHkgcmFpc2VkIEltcG9ydEVycm9yCiAgICAgICAgIG1zZyA9ICJFcnJvciB3aGlsZSBmaW5kaW5nIGxvYWRlciBmb3IgeyFyfSAoe306IHt9KSIKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChmdWxsbmFtZSwgdHlwZShleCksIGV4KSkgZnJvbSBleAorICAgIHJldHVybiBzcGVjLmxvYWRlciBpZiBzcGVjIGlzIG5vdCBOb25lIGVsc2UgTm9uZQogCiAKIGRlZiBleHRlbmRfcGF0aChwYXRoLCBuYW1lKToKQEAgLTU2OSwxMyArNTUxLDE0IEBACiAKICAgICAgICAgZmluZGVyID0gZ2V0X2ltcG9ydGVyKGRpcikKICAgICAgICAgaWYgZmluZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcG9ydGlvbnMgPSBbXQorICAgICAgICAgICAgaWYgaGFzYXR0cihmaW5kZXIsICdmaW5kX3NwZWMnKToKKyAgICAgICAgICAgICAgICBzcGVjID0gZmluZGVyLmZpbmRfc3BlYyhmaW5hbF9uYW1lKQorICAgICAgICAgICAgICAgIGlmIHNwZWMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHBvcnRpb25zID0gc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBvciBbXQogICAgICAgICAgICAgIyBJcyB0aGlzIGZpbmRlciBQRVAgNDIwIGNvbXBsaWFudD8KLSAgICAgICAgICAgIGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9sb2FkZXInKToKLSAgICAgICAgICAgICAgICBsb2FkZXIsIHBvcnRpb25zID0gZmluZGVyLmZpbmRfbG9hZGVyKGZpbmFsX25hbWUpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICMgTm8sIG5vIG5lZWQgdG8gY2FsbCBpdAotICAgICAgICAgICAgICAgIGxvYWRlciA9IE5vbmUKLSAgICAgICAgICAgICAgICBwb3J0aW9ucyA9IFtdCisgICAgICAgICAgICBlbGlmIGhhc2F0dHIoZmluZGVyLCAnZmluZF9sb2FkZXInKToKKyAgICAgICAgICAgICAgICBfLCBwb3J0aW9ucyA9IGZpbmRlci5maW5kX2xvYWRlcihmaW5hbF9uYW1lKQogCiAgICAgICAgICAgICBmb3IgcG9ydGlvbiBpbiBwb3J0aW9uczoKICAgICAgICAgICAgICAgICAjIFhYWCBUaGlzIG1heSBzdGlsbCBhZGQgZHVwbGljYXRlIGVudHJpZXMgdG8gcGF0aCBvbgpAQCAtNTg5LDE5ICs1NzIsMjAgQEAKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGtnZmlsZSk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZiA9IG9wZW4ocGtnZmlsZSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBvcGVuICVzOiAlc1xuIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGtnZmlsZSwgbXNnKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW5lIG9yIGxpbmUuc3RhcnRzd2l0aCgnIycpOgotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICAgICAgcGF0aC5hcHBlbmQobGluZSkgIyBEb24ndCBjaGVjayBmb3IgZXhpc3RlbmNlIQotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHdpdGggZjoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgnXG4nKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmUgb3IgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGguYXBwZW5kKGxpbmUpICMgRG9uJ3QgY2hlY2sgZm9yIGV4aXN0ZW5jZSEKIAogICAgIHJldHVybiBwYXRoCiAKKwogZGVmIGdldF9kYXRhKHBhY2thZ2UsIHJlc291cmNlKToKICAgICAiIiJHZXQgYSByZXNvdXJjZSBmcm9tIGEgcGFja2FnZS4KIApAQCAtNjI0LDEwICs2MDgsMTUgQEAKICAgICB3aGljaCBkb2VzIG5vdCBzdXBwb3J0IGdldF9kYXRhKCksIHRoZW4gTm9uZSBpcyByZXR1cm5lZC4KICAgICAiIiIKIAotICAgIGxvYWRlciA9IGdldF9sb2FkZXIocGFja2FnZSkKKyAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjKHBhY2thZ2UpCisgICAgaWYgc3BlYyBpcyBOb25lOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCiAgICAgaWYgbG9hZGVyIGlzIE5vbmUgb3Igbm90IGhhc2F0dHIobG9hZGVyLCAnZ2V0X2RhdGEnKToKICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICBtb2QgPSBzeXMubW9kdWxlcy5nZXQocGFja2FnZSkgb3IgbG9hZGVyLmxvYWRfbW9kdWxlKHBhY2thZ2UpCisgICAgIyBYWFggbmVlZHMgdGVzdAorICAgIG1vZCA9IChzeXMubW9kdWxlcy5nZXQocGFja2FnZSkgb3IKKyAgICAgICAgICAgaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmxvYWQoKSkKICAgICBpZiBtb2QgaXMgTm9uZSBvciBub3QgaGFzYXR0cihtb2QsICdfX2ZpbGVfXycpOgogICAgICAgICByZXR1cm4gTm9uZQogCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvSU4ucHkgYi9MaWIvcGxhdC1vczJlbXgvSU4ucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1M2FlMjQuLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L0lOLnB5CisrKyAvZGV2L251bGwKQEAgLTEsODIgKzAsMCBAQAotIyBHZW5lcmF0ZWQgYnkgaDJweSBmcm9tIGY6L2VteC9pbmNsdWRlL25ldGluZXQvaW4uaAotCi0jIEluY2x1ZGVkIGZyb20gc3lzL3BhcmFtLmgKLVBBR0VfU0laRSA9IDB4MTAwMAotSFogPSAxMDAKLU1BWE5BTUxFTiA9IDI2MAotTUFYUEFUSExFTiA9IDI2MAotZGVmIGh0b25sKFgpOiByZXR1cm4gX3N3YXBsKFgpCi0KLWRlZiBudG9obChYKTogcmV0dXJuIF9zd2FwbChYKQotCi1kZWYgaHRvbnMoWCk6IHJldHVybiBfc3dhcHMoWCkKLQotZGVmIG50b2hzKFgpOiByZXR1cm4gX3N3YXBzKFgpCi0KLUlQUFJPVE9fSVAgPSAwCi1JUFBST1RPX0lDTVAgPSAxCi1JUFBST1RPX0lHTVAgPSAyCi1JUFBST1RPX0dHUCA9IDMKLUlQUFJPVE9fVENQID0gNgotSVBQUk9UT19FR1AgPSA4Ci1JUFBST1RPX1BVUCA9IDEyCi1JUFBST1RPX1VEUCA9IDE3Ci1JUFBST1RPX0lEUCA9IDIyCi1JUFBST1RPX1RQID0gMjkKLUlQUFJPVE9fRU9OID0gODAKLUlQUFJPVE9fUkFXID0gMjU1Ci1JUFBST1RPX01BWCA9IDI1NgotSVBQT1JUX1JFU0VSVkVEID0gMTAyNAotSVBQT1JUX1VTRVJSRVNFUlZFRCA9IDUwMDAKLWRlZiBJTl9DTEFTU0EoaSk6IHJldHVybiAoKChpbnQpKGkpICYgMHg4MDAwMDAwMCkgPT0gMCkKLQotSU5fQ0xBU1NBX05FVCA9IDB4ZmYwMDAwMDAKLUlOX0NMQVNTQV9OU0hJRlQgPSAyNAotSU5fQ0xBU1NBX0hPU1QgPSAweDAwZmZmZmZmCi1JTl9DTEFTU0FfTUFYID0gMTI4Ci1kZWYgSU5fQ0xBU1NCKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4YzAwMDAwMDApID09IDB4ODAwMDAwMDApCi0KLUlOX0NMQVNTQl9ORVQgPSAweGZmZmYwMDAwCi1JTl9DTEFTU0JfTlNISUZUID0gMTYKLUlOX0NMQVNTQl9IT1NUID0gMHgwMDAwZmZmZgotSU5fQ0xBU1NCX01BWCA9IDY1NTM2Ci1kZWYgSU5fQ0xBU1NDKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ZTAwMDAwMDApID09IDB4YzAwMDAwMDApCi0KLUlOX0NMQVNTQ19ORVQgPSAweGZmZmZmZjAwCi1JTl9DTEFTU0NfTlNISUZUID0gOAotSU5fQ0xBU1NDX0hPU1QgPSAweDAwMDAwMGZmCi1kZWYgSU5fQ0xBU1NEKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ZjAwMDAwMDApID09IDB4ZTAwMDAwMDApCi0KLUlOX0NMQVNTRF9ORVQgPSAweGYwMDAwMDAwCi1JTl9DTEFTU0RfTlNISUZUID0gMjgKLUlOX0NMQVNTRF9IT1NUID0gMHgwZmZmZmZmZgotZGVmIElOX01VTFRJQ0FTVChpKTogcmV0dXJuIElOX0NMQVNTRChpKQotCi1kZWYgSU5fRVhQRVJJTUVOVEFMKGkpOiByZXR1cm4gKCgoaW50KShpKSAmIDB4ZTAwMDAwMDApID09IDB4ZTAwMDAwMDApCi0KLWRlZiBJTl9CQURDTEFTUyhpKTogcmV0dXJuICgoKGludCkoaSkgJiAweGYwMDAwMDAwKSA9PSAweGYwMDAwMDAwKQotCi1JTkFERFJfQU5ZID0gMHgwMDAwMDAwMAotSU5BRERSX0xPT1BCQUNLID0gMHg3ZjAwMDAwMQotSU5BRERSX0JST0FEQ0FTVCA9IDB4ZmZmZmZmZmYKLUlOQUREUl9OT05FID0gMHhmZmZmZmZmZgotSU5BRERSX1VOU1BFQ19HUk9VUCA9IDB4ZTAwMDAwMDAKLUlOQUREUl9BTExIT1NUU19HUk9VUCA9IDB4ZTAwMDAwMDEKLUlOQUREUl9NQVhfTE9DQUxfR1JPVVAgPSAweGUwMDAwMGZmCi1JTl9MT09QQkFDS05FVCA9IDEyNwotSVBfT1BUSU9OUyA9IDEKLUlQX01VTFRJQ0FTVF9JRiA9IDIKLUlQX01VTFRJQ0FTVF9UVEwgPSAzCi1JUF9NVUxUSUNBU1RfTE9PUCA9IDQKLUlQX0FERF9NRU1CRVJTSElQID0gNQotSVBfRFJPUF9NRU1CRVJTSElQID0gNgotSVBfSERSSU5DTCA9IDIKLUlQX1RPUyA9IDMKLUlQX1RUTCA9IDQKLUlQX1JFQ1ZPUFRTID0gNQotSVBfUkVDVlJFVE9QVFMgPSA2Ci1JUF9SRUNWRFNUQUREUiA9IDcKLUlQX1JFVE9QVFMgPSA4Ci1JUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwgPSAxCi1JUF9ERUZBVUxUX01VTFRJQ0FTVF9MT09QID0gMQotSVBfTUFYX01FTUJFUlNISVBTID0gMjAKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW9zMmVteC9TT0NLRVQucHkgYi9MaWIvcGxhdC1vczJlbXgvU09DS0VULnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYWM1OTRhLi4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9TT0NLRVQucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMDYgKzAsMCBAQAotIyBHZW5lcmF0ZWQgYnkgaDJweSBmcm9tIGY6L2VteC9pbmNsdWRlL3N5cy9zb2NrZXQuaAotCi0jIEluY2x1ZGVkIGZyb20gc3lzL3R5cGVzLmgKLUZEX1NFVFNJWkUgPSAyNTYKLQotIyBJbmNsdWRlZCBmcm9tIHN5cy91aW8uaAotRlJFQUQgPSAxCi1GV1JJVEUgPSAyCi1TT0NLX1NUUkVBTSA9IDEKLVNPQ0tfREdSQU0gPSAyCi1TT0NLX1JBVyA9IDMKLVNPQ0tfUkRNID0gNAotU09DS19TRVFQQUNLRVQgPSA1Ci1TT19ERUJVRyA9IDB4MDAwMQotU09fQUNDRVBUQ09OTiA9IDB4MDAwMgotU09fUkVVU0VBRERSID0gMHgwMDA0Ci1TT19LRUVQQUxJVkUgPSAweDAwMDgKLVNPX0RPTlRST1VURSA9IDB4MDAxMAotU09fQlJPQURDQVNUID0gMHgwMDIwCi1TT19VU0VMT09QQkFDSyA9IDB4MDA0MAotU09fTElOR0VSID0gMHgwMDgwCi1TT19PT0JJTkxJTkUgPSAweDAxMDAKLVNPX0xfQlJPQURDQVNUID0gMHgwMjAwCi1TT19SQ1ZfU0hVVERPV04gPSAweDA0MDAKLVNPX1NORF9TSFVURE9XTiA9IDB4MDgwMAotU09fU05EQlVGID0gMHgxMDAxCi1TT19SQ1ZCVUYgPSAweDEwMDIKLVNPX1NORExPV0FUID0gMHgxMDAzCi1TT19SQ1ZMT1dBVCA9IDB4MTAwNAotU09fU05EVElNRU8gPSAweDEwMDUKLVNPX1JDVlRJTUVPID0gMHgxMDA2Ci1TT19FUlJPUiA9IDB4MTAwNwotU09fVFlQRSA9IDB4MTAwOAotU09fT1BUSU9OUyA9IDB4MTAxMAotU09MX1NPQ0tFVCA9IDB4ZmZmZgotQUZfVU5TUEVDID0gMAotQUZfVU5JWCA9IDEKLUFGX0lORVQgPSAyCi1BRl9JTVBMSU5LID0gMwotQUZfUFVQID0gNAotQUZfQ0hBT1MgPSA1Ci1BRl9OUyA9IDYKLUFGX05CUyA9IDcKLUFGX0lTTyA9IDcKLUFGX09TSSA9IEFGX0lTTwotQUZfRUNNQSA9IDgKLUFGX0RBVEFLSVQgPSA5Ci1BRl9DQ0lUVCA9IDEwCi1BRl9TTkEgPSAxMQotQUZfREVDbmV0ID0gMTIKLUFGX0RMSSA9IDEzCi1BRl9MQVQgPSAxNAotQUZfSFlMSU5LID0gMTUKLUFGX0FQUExFVEFMSyA9IDE2Ci1BRl9OQiA9IDE3Ci1BRl9ORVRCSU9TID0gQUZfTkIKLUFGX09TMiA9IEFGX1VOSVgKLUFGX01BWCA9IDE4Ci1QRl9VTlNQRUMgPSBBRl9VTlNQRUMKLVBGX1VOSVggPSBBRl9VTklYCi1QRl9JTkVUID0gQUZfSU5FVAotUEZfSU1QTElOSyA9IEFGX0lNUExJTksKLVBGX1BVUCA9IEFGX1BVUAotUEZfQ0hBT1MgPSBBRl9DSEFPUwotUEZfTlMgPSBBRl9OUwotUEZfTkJTID0gQUZfTkJTCi1QRl9JU08gPSBBRl9JU08KLVBGX09TSSA9IEFGX0lTTwotUEZfRUNNQSA9IEFGX0VDTUEKLVBGX0RBVEFLSVQgPSBBRl9EQVRBS0lUCi1QRl9DQ0lUVCA9IEFGX0NDSVRUCi1QRl9TTkEgPSBBRl9TTkEKLVBGX0RFQ25ldCA9IEFGX0RFQ25ldAotUEZfRExJID0gQUZfRExJCi1QRl9MQVQgPSBBRl9MQVQKLVBGX0hZTElOSyA9IEFGX0hZTElOSwotUEZfQVBQTEVUQUxLID0gQUZfQVBQTEVUQUxLCi1QRl9OQiA9IEFGX05CCi1QRl9ORVRCSU9TID0gQUZfTkIKLVBGX09TMiA9IEFGX1VOSVgKLVBGX01BWCA9IEFGX01BWAotU09NQVhDT05OID0gNQotTVNHX09PQiA9IDB4MQotTVNHX1BFRUsgPSAweDIKLU1TR19ET05UUk9VVEUgPSAweDQKLU1TR19FT1IgPSAweDgKLU1TR19UUlVOQyA9IDB4MTAKLU1TR19DVFJVTkMgPSAweDIwCi1NU0dfV0FJVEFMTCA9IDB4NDAKLU1TR19NQVhJT1ZMRU4gPSAxNgotU0NNX1JJR0hUUyA9IDB4MDEKLU1UX0ZSRUUgPSAwCi1NVF9EQVRBID0gMQotTVRfSEVBREVSID0gMgotTVRfU09DS0VUID0gMwotTVRfUENCID0gNAotTVRfUlRBQkxFID0gNQotTVRfSFRBQkxFID0gNgotTVRfQVRBQkxFID0gNwotTVRfU09OQU1FID0gOAotTVRfWk9NQklFID0gOQotTVRfU09PUFRTID0gMTAKLU1UX0ZUQUJMRSA9IDExCi1NVF9SSUdIVFMgPSAxMgotTVRfSUZBRERSID0gMTMKLU1BWFNPQ0tFVFMgPSAyMDQ4CmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvX2VteF9saW5rLnB5IGIvTGliL3BsYXQtb3MyZW14L19lbXhfbGluay5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFlNmI1NC4uMDAwMDAwMAotLS0gYS9MaWIvcGxhdC1vczJlbXgvX2VteF9saW5rLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotIyBfZW14X2xpbmsucHkKLQotIyBXcml0dGVuIGJ5IEFuZHJldyBJIE1hY0ludHlyZSwgRGVjZW1iZXIgMjAwMi4KLQotIiIiX2VteF9saW5rLnB5IGlzIGEgc2ltcGxpc3RpYyBlbXVsYXRpb24gb2YgdGhlIFVuaXggbGluaygyKSBsaWJyYXJ5IHJvdXRpbmUKLWZvciBjcmVhdGluZyBzby1jYWxsZWQgaGFyZCBsaW5rcy4gIEl0IGlzIGludGVuZGVkIHRvIGJlIGltcG9ydGVkIGludG8KLXRoZSBvcyBtb2R1bGUgaW4gcGxhY2Ugb2YgdGhlIHVuaW1wbGVtZW50ZWQgKG9uIE9TLzIpIFBvc2l4IGxpbmsoKQotZnVuY3Rpb24gKG9zLmxpbmsoKSkuCi0KLVdlIGRvIHRoaXMgb24gT1MvMiBieSBpbXBsZW1lbnRpbmcgYSBmaWxlIGNvcHksIHdpdGggbGluaygyKSBzZW1hbnRpY3M6LQotICAtIHRoZSB0YXJnZXQgY2Fubm90IGFscmVhZHkgZXhpc3Q7Ci0gIC0gd2UgaG9wZSB0aGF0IHRoZSBhY3R1YWwgZmlsZSBvcGVuIChpZiBzdWNjZXNzZnVsKSBpcyBhY3R1YWxseQotICAgIGF0b21pYy4uLgotCi1MaW1pdGF0aW9ucyBvZiB0aGlzIGFwcHJvYWNoL2ltcGxlbWVudGF0aW9uIGluY2x1ZGU6LQotICAtIG5vIHN1cHBvcnQgZm9yIGNvcnJlY3QgbGluayBjb3VudHMgKEVNWCBzdGF0KHRhcmdldCkuc3RfbmxpbmsKLSAgICBpcyBhbHdheXMgMSk7Ci0gIC0gdGhyZWFkIHNhZmV0eSB1bmRlZmluZWQ7Ci0gIC0gZGVmYXVsdCBmaWxlIHBlcm1pc3Npb25zIChyK3cpIHVzZWQsIGNhbid0IGJlIG92ZXItcmlkZGVuOwotICAtIGltcGxlbWVudGVkIGluIFB5dGhvbiBzbyBjb21wYXJhdGl2ZWx5IHNsb3csIGVzcGVjaWFsbHkgZm9yIGxhcmdlCi0gICAgc291cmNlIGZpbGVzOwotICAtIG5lZWQgc3VmZmljaWVudCBmcmVlIGRpc2sgc3BhY2UgdG8gc3RvcmUgdGhlIGNvcHkuCi0KLUJlaGF2aW91cjotCi0gIC0gYW55IGV4Y2VwdGlvbiBzaG91bGQgcHJvcGFnYXRlIHRvIHRoZSBjYWxsZXI7Ci0gIC0gd2FudCB0YXJnZXQgdG8gYmUgYW4gZXhhY3QgY29weSBvZiB0aGUgc291cmNlLCBzbyB1c2UgYmluYXJ5IG1vZGU7Ci0gIC0gcmV0dXJucyBOb25lLCBzYW1lIGFzIG9zLmxpbmsoKSB3aGljaCBpcyBpbXBsZW1lbnRlZCBpbiBwb3NpeG1vZHVsZS5jOwotICAtIHRhcmdldCByZW1vdmVkIGluIHRoZSBldmVudCBvZiBhIGZhaWx1cmUgd2hlcmUgcG9zc2libGU7Ci0gIC0gZ2l2ZW4gdGhlIG1vdGl2YXRpb24gdG8gd3JpdGUgdGhpcyBlbXVsYXRpb24gY2FtZSBmcm9tIHRyeWluZyB0bwotICAgIHN1cHBvcnQgYSBVbml4IHJlc291cmNlIGxvY2sgaW1wbGVtZW50YXRpb24sIHdoZXJlIG1pbmltYWwgb3ZlcmhlYWQKLSAgICBkdXJpbmcgY3JlYXRpb24gb2YgdGhlIHRhcmdldCBpcyBkZXNpcmFibGUgYW5kIHRoZSBmaWxlcyBhcmUgc21hbGwsCi0gICAgd2UgcmVhZCBhIHNvdXJjZSBibG9jayBiZWZvcmUgYXR0ZW1wdGluZyB0byBjcmVhdGUgdGhlIHRhcmdldCBzbyB0aGF0Ci0gICAgd2UncmUgcmVhZHkgdG8gaW1tZWRpYXRlbHkgd3JpdGUgc29tZSBkYXRhIGludG8gaXQuCi0iIiIKLQotaW1wb3J0IG9zCi1pbXBvcnQgZXJybm8KLQotX19hbGxfXyA9IFsnbGluayddCi0KLWRlZiBsaW5rKHNvdXJjZSwgdGFyZ2V0KToKLSAgICAiIiJsaW5rKHNvdXJjZSwgdGFyZ2V0KSAtPiBOb25lCi0KLSAgICBBdHRlbXB0IHRvIGhhcmQgbGluayB0aGUgc291cmNlIGZpbGUgdG8gdGhlIHRhcmdldCBmaWxlIG5hbWUuCi0gICAgT24gT1MvMiwgdGhpcyBjcmVhdGVzIGEgY29tcGxldGUgY29weSBvZiB0aGUgc291cmNlIGZpbGUuCi0gICAgIiIiCi0KLSAgICBzID0gb3Mub3Blbihzb3VyY2UsIG9zLk9fUkRPTkxZIHwgb3MuT19CSU5BUlkpCi0gICAgaWYgb3MuaXNhdHR5KHMpOgotICAgICAgICByYWlzZSBPU0Vycm9yKGVycm5vLkVYREVWLCAnQ3Jvc3MtZGV2aWNlIGxpbmsnKQotICAgIGRhdGEgPSBvcy5yZWFkKHMsIDEwMjQpCi0KLSAgICB0cnk6Ci0gICAgICAgIHQgPSBvcy5vcGVuKHRhcmdldCwgb3MuT19XUk9OTFkgfCBvcy5PX0JJTkFSWSB8IG9zLk9fQ1JFQVQgfCBvcy5PX0VYQ0wpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIG9zLmNsb3NlKHMpCi0gICAgICAgIHJhaXNlCi0KLSAgICB0cnk6Ci0gICAgICAgIHdoaWxlIGRhdGE6Ci0gICAgICAgICAgICBvcy53cml0ZSh0LCBkYXRhKQotICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQocywgMTAyNCkKLSAgICBleGNlcHQgT1NFcnJvcjoKLSAgICAgICAgb3MuY2xvc2UocykKLSAgICAgICAgb3MuY2xvc2UodCkKLSAgICAgICAgb3MudW5saW5rKHRhcmdldCkKLSAgICAgICAgcmFpc2UKLQotICAgIG9zLmNsb3NlKHMpCi0gICAgb3MuY2xvc2UodCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgc3lzCi0gICAgdHJ5OgotICAgICAgICBsaW5rKHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXSkKLSAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgcHJpbnQoJ1VzYWdlOiBlbXhfbGluayA8c291cmNlPiA8dGFyZ2V0PicpCi0gICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgIHByaW50KCdlbXhfbGluazogJXMnICUgc3RyKHN5cy5leGNfaW5mbygpWzFdKSkKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW9zMmVteC9ncnAucHkgYi9MaWIvcGxhdC1vczJlbXgvZ3JwLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZTYzZWY4Li4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9ncnAucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxODIgKzAsMCBAQAotIyB0aGlzIG1vZHVsZSBpcyBhbiBPUy8yIG9yaWVudGVkIHJlcGxhY2VtZW50IGZvciB0aGUgZ3JwIHN0YW5kYXJkCi0jIGV4dGVuc2lvbiBtb2R1bGUuCi0KLSMgd3JpdHRlbiBieSBBbmRyZXcgTWFjSW50eXJlLCBBcHJpbCAyMDAxLgotIyB1cGRhdGVkIEp1bHkgMjAwMywgYWRkaW5nIGZpZWxkIGFjY2Vzc29yIHN1cHBvcnQKLQotIyBub3RlIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBjaGVja3Mgd2hldGhlciAiOiIgb3IgIjsiIGFzIHVzZWQgYXMKLSMgdGhlIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIuCi0KLSIiIlJlcGxhY2VtZW50IGZvciBncnAgc3RhbmRhcmQgZXh0ZW5zaW9uIG1vZHVsZSwgaW50ZW5kZWQgZm9yIHVzZSBvbgotT1MvMiBhbmQgc2ltaWxhciBzeXN0ZW1zIHdoaWNoIGRvbid0IG5vcm1hbGx5IGhhdmUgYW4gL2V0Yy9ncm91cCBmaWxlLgotCi1UaGUgc3RhbmRhcmQgVW5peCBncm91cCBkYXRhYmFzZSBpcyBhbiBBU0NJSSB0ZXh0IGZpbGUgd2l0aCA0IGZpZWxkcyBwZXIKLXJlY29yZCAobGluZSksIHNlcGFyYXRlZCBieSBhIGNvbG9uOgotICAtIGdyb3VwIG5hbWUgKHN0cmluZykKLSAgLSBncm91cCBwYXNzd29yZCAob3B0aW9uYWwgZW5jcnlwdGVkIHN0cmluZykKLSAgLSBncm91cCBpZCAoaW50ZWdlcikKLSAgLSBncm91cCBtZW1iZXJzIChjb21tYSBkZWxpbWl0ZWQgbGlzdCBvZiB1c2VyaWRzLCB3aXRoIG5vIHNwYWNlcykKLQotTm90ZSB0aGF0IG1lbWJlcnMgYXJlIG9ubHkgaW5jbHVkZWQgaW4gdGhlIGdyb3VwIGZpbGUgZm9yIGdyb3VwcyB0aGF0Ci1hcmVuJ3QgdGhlaXIgcHJpbWFyeSBncm91cHMuCi0oc2VlIHRoZSBzZWN0aW9uIDguMiBvZiB0aGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlKQotCi1UaGlzIGltcGxlbWVudGF0aW9uIGRpZmZlcnMgZnJvbSB0aGUgc3RhbmRhcmQgVW5peCBpbXBsZW1lbnRhdGlvbiBieQotYWxsb3dpbmcgdXNlIG9mIHRoZSBwbGF0Zm9ybSdzIG5hdGl2ZSBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXIgLSAnOycgb24gT1MvMiwKLURPUyBhbmQgTVMtV2luZG93cyAtIGFzIHRoZSBmaWVsZCBzZXBhcmF0b3IgaW4gYWRkaXRpb24gdG8gdGhlIFVuaXgKLXN0YW5kYXJkICI6Ii4KLQotVGhlIG1vZHVsZSBsb29rcyBmb3IgdGhlIGdyb3VwIGRhdGFiYXNlIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zCi0oaW4gb3JkZXIgZmlyc3QgdG8gbGFzdCk6Ci0gIC0gJHtFVENfR1JPVVB9ICAgICAgICAgICAgICAob3IgJUVUQ19HUk9VUCUpCi0gIC0gJHtFVEN9L2dyb3VwICAgICAgICAgICAgICAob3IgJUVUQyUvZ3JvdXApCi0gIC0gJHtQWVRIT05IT01FfS9FdGMvZ3JvdXAgICAob3IgJVBZVEhPTkhPTUUlL0V0Yy9ncm91cCkKLQotQ2xhc3NlcwotLS0tLS0tLQotCi1Ob25lCi0KLUZ1bmN0aW9ucwotLS0tLS0tLS0tCi0KLWdldGdyZ2lkKGdpZCkgLSAgcmV0dXJuIHRoZSByZWNvcmQgZm9yIGdyb3VwLWlkIGdpZCBhcyBhIDQtdHVwbGUKLQotZ2V0Z3JuYW0obmFtZSkgLSByZXR1cm4gdGhlIHJlY29yZCBmb3IgZ3JvdXAgJ25hbWUnIGFzIGEgNC10dXBsZQotCi1nZXRncmFsbCgpIC0gICAgIHJldHVybiBhIGxpc3Qgb2YgNC10dXBsZXMsIGVhY2ggdHVwbGUgYmVpbmcgb25lIHJlY29yZAotICAgICAgICAgICAgICAgICAoTk9URTogdGhlIG9yZGVyIGlzIGFyYml0cmFyeSkKLQotQXR0cmlidXRlcwotLS0tLS0tLS0tLQotCi1ncm91cF9maWxlIC0gICAgIHRoZSBwYXRoIG9mIHRoZSBncm91cCBkYXRhYmFzZSBmaWxlCi0KLSIiIgotCi1pbXBvcnQgb3MKLQotIyB0cnkgYW5kIGZpbmQgdGhlIGdyb3VwIGZpbGUKLV9fZ3JvdXBfcGF0aCA9IFtdCi1pZiAnRVRDX0dST1VQJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fZ3JvdXBfcGF0aC5hcHBlbmQob3MuZW52aXJvblsnRVRDX0dST1VQJ10pCi1pZiAnRVRDJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fZ3JvdXBfcGF0aC5hcHBlbmQoJyVzL2dyb3VwJyAlIG9zLmVudmlyb25bJ0VUQyddKQotaWYgJ1BZVEhPTkhPTUUnIGluIG9zLmVudmlyb246Ci0gICAgX19ncm91cF9wYXRoLmFwcGVuZCgnJXMvRXRjL2dyb3VwJyAlIG9zLmVudmlyb25bJ1BZVEhPTkhPTUUnXSkKLQotZ3JvdXBfZmlsZSA9IE5vbmUKLWZvciBfX2kgaW4gX19ncm91cF9wYXRoOgotICAgIHRyeToKLSAgICAgICAgX19mID0gb3BlbihfX2ksICdyJykKLSAgICAgICAgX19mLmNsb3NlKCkKLSAgICAgICAgZ3JvdXBfZmlsZSA9IF9faQotICAgICAgICBicmVhawotICAgIGV4Y2VwdDoKLSAgICAgICAgcGFzcwotCi0jIGRlY2lkZSB3aGF0IGZpZWxkIHNlcGFyYXRvciB3ZSBjYW4gdHJ5IHRvIHVzZSAtIFVuaXggc3RhbmRhcmQsIHdpdGgKLSMgdGhlIHBsYXRmb3JtJ3MgcGF0aCBzZXBhcmF0b3IgYXMgYW4gb3B0aW9uLiAgTm8gc3BlY2lhbCBmaWVsZCBjb252ZXJzaW9uCi0jIGhhbmRsZXJzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGdyb3VwIGZpbGUuCi1fX2ZpZWxkX3NlcCA9IFsnOiddCi1pZiBvcy5wYXRoc2VwOgotICAgIGlmIG9zLnBhdGhzZXAgIT0gJzonOgotICAgICAgICBfX2ZpZWxkX3NlcC5hcHBlbmQob3MucGF0aHNlcCkKLQotIyBoZWxwZXIgcm91dGluZSB0byBpZGVudGlmeSB3aGljaCBzZXBhcmF0b3IgY2hhcmFjdGVyIGlzIGluIHVzZQotZGVmIF9fZ2V0X2ZpZWxkX3NlcChyZWNvcmQpOgotICAgIGZzID0gTm9uZQotICAgIGZvciBjIGluIF9fZmllbGRfc2VwOgotICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSAzIGRlbGltaXRlciBjaGFyYWN0ZXJzIChmb3IgNCBmaWVsZHMpCi0gICAgICAgIGlmIHJlY29yZC5jb3VudChjKSA9PSAzOgotICAgICAgICAgICAgZnMgPSBjCi0gICAgICAgICAgICBicmVhawotICAgIGlmIGZzOgotICAgICAgICByZXR1cm4gZnMKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBLZXlFcnJvcignPj4gZ3JvdXAgZGF0YWJhc2UgZmllbGRzIG5vdCBkZWxpbWl0ZWQgPDwnKQotCi0jIGNsYXNzIHRvIG1hdGNoIHRoZSBuZXcgcmVjb3JkIGZpZWxkIG5hbWUgYWNjZXNzb3JzLgotIyB0aGUgcmVzdWx0aW5nIG9iamVjdCBpcyBpbnRlbmRlZCB0byBiZWhhdmUgbGlrZSBhIHJlYWQtb25seSB0dXBsZSwKLSMgd2l0aCBlYWNoIG1lbWJlciBhbHNvIGFjY2Vzc2libGUgYnkgYSBmaWVsZCBuYW1lLgotY2xhc3MgR3JvdXA6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHBhc3N3ZCwgZ2lkLCBtZW0pOgotICAgICAgICBzZWxmLl9fZGljdF9fWydncl9uYW1lJ10gPSBuYW1lCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ2dyX3Bhc3N3ZCddID0gcGFzc3dkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ2dyX2dpZCddID0gZ2lkCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ2dyX21lbSddID0gbWVtCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ19yZWNvcmQnXSA9IChzZWxmLmdyX25hbWUsIHNlbGYuZ3JfcGFzc3dkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ncl9naWQsIHNlbGYuZ3JfbWVtKQotCi0gICAgZGVmIF9fbGVuX18oc2VsZik6Ci0gICAgICAgIHJldHVybiA0Ci0KLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKLSAgICAgICAgcmV0dXJuIHNlbGYuX3JlY29yZFtrZXldCi0KLSAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpOgotICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcignYXR0cmlidXRlIHJlYWQtb25seTogJXMnICUgbmFtZSkKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHN0cihzZWxmLl9yZWNvcmQpCi0KLSAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHRoaXMgPSBzdHIoc2VsZi5fcmVjb3JkKQotICAgICAgICBpZiB0aGlzID09IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgZWxpZiB0aGlzIDwgb3RoZXI6Ci0gICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAxCi0KLQotIyByZWFkIHRoZSB3aG9sZSBmaWxlLCBwYXJzaW5nIGVhY2ggZW50cnkgaW50byB0dXBsZSBmb3JtCi0jIHdpdGggZGljdGlvbmFyaWVzIHRvIHNwZWVkIHJlY2FsbCBieSBHSUQgb3IgZ3JvdXAgbmFtZQotZGVmIF9fcmVhZF9ncm91cF9maWxlKCk6Ci0gICAgaWYgZ3JvdXBfZmlsZToKLSAgICAgICAgZ3JvdXAgPSBvcGVuKGdyb3VwX2ZpbGUsICdyJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBLZXlFcnJvcignPj4gbm8gZ3JvdXAgZGF0YWJhc2UgPDwnKQotICAgIGdpZHggPSB7fQotICAgIG5hbXggPSB7fQotICAgIHNlcCA9IE5vbmUKLSAgICB3aGlsZSAxOgotICAgICAgICBlbnRyeSA9IGdyb3VwLnJlYWRsaW5lKCkuc3RyaXAoKQotICAgICAgICBpZiBsZW4oZW50cnkpID4gMzoKLSAgICAgICAgICAgIGlmIHNlcCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHNlcCA9IF9fZ2V0X2ZpZWxkX3NlcChlbnRyeSkKLSAgICAgICAgICAgIGZpZWxkcyA9IGVudHJ5LnNwbGl0KHNlcCkKLSAgICAgICAgICAgIGZpZWxkc1syXSA9IGludChmaWVsZHNbMl0pCi0gICAgICAgICAgICBmaWVsZHNbM10gPSBbZi5zdHJpcCgpIGZvciBmIGluIGZpZWxkc1szXS5zcGxpdCgnLCcpXQotICAgICAgICAgICAgcmVjb3JkID0gR3JvdXAoKmZpZWxkcykKLSAgICAgICAgICAgIGlmIGZpZWxkc1syXSBub3QgaW4gZ2lkeDoKLSAgICAgICAgICAgICAgICBnaWR4W2ZpZWxkc1syXV0gPSByZWNvcmQKLSAgICAgICAgICAgIGlmIGZpZWxkc1swXSBub3QgaW4gbmFteDoKLSAgICAgICAgICAgICAgICBuYW14W2ZpZWxkc1swXV0gPSByZWNvcmQKLSAgICAgICAgZWxpZiBsZW4oZW50cnkpID4gMDoKLSAgICAgICAgICAgIHBhc3MgICAgICAgICAgICAgICAgICAgICAgICAgIyBza2lwIGVtcHR5IG9yIG1hbGZvcm1lZCByZWNvcmRzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBicmVhawotICAgIGdyb3VwLmNsb3NlKCkKLSAgICBpZiBsZW4oZ2lkeCkgPT0gMDoKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICByZXR1cm4gKGdpZHgsIG5hbXgpCi0KLSMgcmV0dXJuIHRoZSBncm91cCBkYXRhYmFzZSBlbnRyeSBieSBHSUQKLWRlZiBnZXRncmdpZChnaWQpOgotICAgIGcsIG4gPSBfX3JlYWRfZ3JvdXBfZmlsZSgpCi0gICAgcmV0dXJuIGdbZ2lkXQotCi0jIHJldHVybiB0aGUgZ3JvdXAgZGF0YWJhc2UgZW50cnkgYnkgZ3JvdXAgbmFtZQotZGVmIGdldGdybmFtKG5hbWUpOgotICAgIGcsIG4gPSBfX3JlYWRfZ3JvdXBfZmlsZSgpCi0gICAgcmV0dXJuIG5bbmFtZV0KLQotIyByZXR1cm4gYWxsIHRoZSBncm91cCBkYXRhYmFzZSBlbnRyaWVzCi1kZWYgZ2V0Z3JhbGwoKToKLSAgICBnLCBuID0gX19yZWFkX2dyb3VwX2ZpbGUoKQotICAgIHJldHVybiBnLnZhbHVlcygpCi0KLSMgdGVzdCBoYXJuZXNzCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGdldGdyYWxsKCkKZGlmZiAtLWdpdCBhL0xpYi9wbGF0LW9zMmVteC9wd2QucHkgYi9MaWIvcGxhdC1vczJlbXgvcHdkLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyY2IwNzdmLi4wMDAwMDAwCi0tLSBhL0xpYi9wbGF0LW9zMmVteC9wd2QucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMDggKzAsMCBAQAotIyB0aGlzIG1vZHVsZSBpcyBhbiBPUy8yIG9yaWVudGVkIHJlcGxhY2VtZW50IGZvciB0aGUgcHdkIHN0YW5kYXJkCi0jIGV4dGVuc2lvbiBtb2R1bGUuCi0KLSMgd3JpdHRlbiBieSBBbmRyZXcgTWFjSW50eXJlLCBBcHJpbCAyMDAxLgotIyB1cGRhdGVkIEp1bHkgMjAwMywgYWRkaW5nIGZpZWxkIGFjY2Vzc29yIHN1cHBvcnQKLQotIyBub3RlIHRoYXQgdGhpcyBpbXBsZW1lbnRhdGlvbiBjaGVja3Mgd2hldGhlciAiOiIgb3IgIjsiIGFzIHVzZWQgYXMKLSMgdGhlIGZpZWxkIHNlcGFyYXRvciBjaGFyYWN0ZXIuICBQYXRoIGNvbnZlcnNpb25zIGFyZSBhcmUgYXBwbGllZCB3aGVuCi0jIHRoZSBkYXRhYmFzZSB1c2VzICI6IiBhcyB0aGUgZmllbGQgc2VwYXJhdG9yIGNoYXJhY3Rlci4KLQotIiIiUmVwbGFjZW1lbnQgZm9yIHB3ZCBzdGFuZGFyZCBleHRlbnNpb24gbW9kdWxlLCBpbnRlbmRlZCBmb3IgdXNlIG9uCi1PUy8yIGFuZCBzaW1pbGFyIHN5c3RlbXMgd2hpY2ggZG9uJ3Qgbm9ybWFsbHkgaGF2ZSBhbiAvZXRjL3Bhc3N3ZCBmaWxlLgotCi1UaGUgc3RhbmRhcmQgVW5peCBwYXNzd29yZCBkYXRhYmFzZSBpcyBhbiBBU0NJSSB0ZXh0IGZpbGUgd2l0aCA3IGZpZWxkcwotcGVyIHJlY29yZCAobGluZSksIHNlcGFyYXRlZCBieSBhIGNvbG9uOgotICAtIHVzZXIgbmFtZSAoc3RyaW5nKQotICAtIHBhc3N3b3JkIChlbmNyeXB0ZWQgc3RyaW5nLCBvciAiKiIgb3IgIiIpCi0gIC0gdXNlciBpZCAoaW50ZWdlcikKLSAgLSBncm91cCBpZCAoaW50ZWdlcikKLSAgLSBkZXNjcmlwdGlvbiAodXN1YWxseSB1c2VyJ3MgbmFtZSkKLSAgLSBob21lIGRpcmVjdG9yeSAocGF0aCB0byB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkpCi0gIC0gc2hlbGwgKHBhdGggdG8gdGhlIHVzZXIncyBsb2dpbiBzaGVsbCkKLQotKHNlZSB0aGUgc2VjdGlvbiA4LjEgb2YgdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSkKLQotVGhpcyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJzIGZyb20gdGhlIHN0YW5kYXJkIFVuaXggaW1wbGVtZW50YXRpb24gYnkKLWFsbG93aW5nIHVzZSBvZiB0aGUgcGxhdGZvcm0ncyBuYXRpdmUgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVyIC0gJzsnIG9uIE9TLzIsCi1ET1MgYW5kIE1TLVdpbmRvd3MgLSBhcyB0aGUgZmllbGQgc2VwYXJhdG9yIGluIGFkZGl0aW9uIHRvIHRoZSBVbml4Ci1zdGFuZGFyZCAiOiIuICBBZGRpdGlvbmFsbHksIHdoZW4gIjoiIGlzIHRoZSBzZXBhcmF0b3IgcGF0aCBjb252ZXJzaW9ucwotYXJlIGFwcGxpZWQgdG8gZGVhbCB3aXRoIGFueSBtdW5naW5nIG9mIHRoZSBkcml2ZSBsZXR0ZXIgcmVmZXJlbmNlLgotCi1UaGUgbW9kdWxlIGxvb2tzIGZvciB0aGUgcGFzc3dvcmQgZGF0YWJhc2UgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnMKLShpbiBvcmRlciBmaXJzdCB0byBsYXN0KToKLSAgLSAke0VUQ19QQVNTV0R9ICAgICAgICAgICAgIChvciAlRVRDX1BBU1NXRCUpCi0gIC0gJHtFVEN9L3Bhc3N3ZCAgICAgICAgICAgICAob3IgJUVUQyUvcGFzc3dkKQotICAtICR7UFlUSE9OSE9NRX0vRXRjL3Bhc3N3ZCAgKG9yICVQWVRIT05IT01FJS9FdGMvcGFzc3dkKQotCi1DbGFzc2VzCi0tLS0tLS0tCi0KLU5vbmUKLQotRnVuY3Rpb25zCi0tLS0tLS0tLS0KLQotZ2V0cHd1aWQodWlkKSAtICByZXR1cm4gdGhlIHJlY29yZCBmb3IgdXNlci1pZCB1aWQgYXMgYSA3LXR1cGxlCi0KLWdldHB3bmFtKG5hbWUpIC0gcmV0dXJuIHRoZSByZWNvcmQgZm9yIHVzZXIgJ25hbWUnIGFzIGEgNy10dXBsZQotCi1nZXRwd2FsbCgpIC0gICAgIHJldHVybiBhIGxpc3Qgb2YgNy10dXBsZXMsIGVhY2ggdHVwbGUgYmVpbmcgb25lIHJlY29yZAotICAgICAgICAgICAgICAgICAoTk9URTogdGhlIG9yZGVyIGlzIGFyYml0cmFyeSkKLQotQXR0cmlidXRlcwotLS0tLS0tLS0tLQotCi1wYXNzd2RfZmlsZSAtICAgIHRoZSBwYXRoIG9mIHRoZSBwYXNzd29yZCBkYXRhYmFzZSBmaWxlCi0KLSIiIgotCi1pbXBvcnQgb3MKLQotIyB0cnkgYW5kIGZpbmQgdGhlIHBhc3N3ZCBmaWxlCi1fX3Bhc3N3ZF9wYXRoID0gW10KLWlmICdFVENfUEFTU1dEJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fcGFzc3dkX3BhdGguYXBwZW5kKG9zLmVudmlyb25bJ0VUQ19QQVNTV0QnXSkKLWlmICdFVEMnIGluIG9zLmVudmlyb246Ci0gICAgX19wYXNzd2RfcGF0aC5hcHBlbmQoJyVzL3Bhc3N3ZCcgJSBvcy5lbnZpcm9uWydFVEMnXSkKLWlmICdQWVRIT05IT01FJyBpbiBvcy5lbnZpcm9uOgotICAgIF9fcGFzc3dkX3BhdGguYXBwZW5kKCclcy9FdGMvcGFzc3dkJyAlIG9zLmVudmlyb25bJ1BZVEhPTkhPTUUnXSkKLQotcGFzc3dkX2ZpbGUgPSBOb25lCi1mb3IgX19pIGluIF9fcGFzc3dkX3BhdGg6Ci0gICAgdHJ5OgotICAgICAgICBfX2YgPSBvcGVuKF9faSwgJ3InKQotICAgICAgICBfX2YuY2xvc2UoKQotICAgICAgICBwYXNzd2RfZmlsZSA9IF9faQotICAgICAgICBicmVhawotICAgIGV4Y2VwdDoKLSAgICAgICAgcGFzcwotCi0jIHBhdGggY29udmVyc2lvbiBoYW5kbGVycwotZGVmIF9fbnVsbHBhdGhjb252KHBhdGgpOgotICAgIHJldHVybiBwYXRoLnJlcGxhY2Uob3MuYWx0c2VwLCBvcy5zZXApCi0KLWRlZiBfX3VuaXhwYXRoY29udihwYXRoKToKLSAgICAjIHR3byBrbm93biBkcml2ZSBsZXR0ZXIgdmFyaWF0aW9uczogIng7IiBhbmQgIiR4IgotICAgIGlmIHBhdGhbMF0gPT0gJyQnOgotICAgICAgICBjb252ID0gcGF0aFsxXSArICc6JyArIHBhdGhbMjpdCi0gICAgZWxpZiBwYXRoWzFdID09ICc7JzoKLSAgICAgICAgY29udiA9IHBhdGhbMF0gKyAnOicgKyBwYXRoWzI6XQotICAgIGVsc2U6Ci0gICAgICAgIGNvbnYgPSBwYXRoCi0gICAgcmV0dXJuIGNvbnYucmVwbGFjZShvcy5hbHRzZXAsIG9zLnNlcCkKLQotIyBkZWNpZGUgd2hhdCBmaWVsZCBzZXBhcmF0b3Igd2UgY2FuIHRyeSB0byB1c2UgLSBVbml4IHN0YW5kYXJkLCB3aXRoCi0jIHRoZSBwbGF0Zm9ybSdzIHBhdGggc2VwYXJhdG9yIGFzIGFuIG9wdGlvbi4gIE5vIHNwZWNpYWwgZmllbGQgY29udmVyc2lvbgotIyBoYW5kbGVyIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdGhlIHBsYXRmb3JtJ3MgcGF0aCBzZXBhcmF0b3IgYXMgZmllbGQKLSMgc2VwYXJhdG9yLCBidXQgYXJlIHJlcXVpcmVkIGZvciB0aGUgaG9tZSBkaXJlY3RvcnkgYW5kIHNoZWxsIGZpZWxkcyB3aGVuCi0jIHVzaW5nIHRoZSBzdGFuZGFyZCBVbml4ICgiOiIpIGZpZWxkIHNlcGFyYXRvci4KLV9fZmllbGRfc2VwID0geyc6JzogX191bml4cGF0aGNvbnZ9Ci1pZiBvcy5wYXRoc2VwOgotICAgIGlmIG9zLnBhdGhzZXAgIT0gJzonOgotICAgICAgICBfX2ZpZWxkX3NlcFtvcy5wYXRoc2VwXSA9IF9fbnVsbHBhdGhjb252Ci0KLSMgaGVscGVyIHJvdXRpbmUgdG8gaWRlbnRpZnkgd2hpY2ggc2VwYXJhdG9yIGNoYXJhY3RlciBpcyBpbiB1c2UKLWRlZiBfX2dldF9maWVsZF9zZXAocmVjb3JkKToKLSAgICBmcyA9IE5vbmUKLSAgICBmb3IgYyBpbiBfX2ZpZWxkX3NlcC5rZXlzKCk6Ci0gICAgICAgICMgdGhlcmUgc2hvdWxkIGJlIDYgZGVsaW1pdGVyIGNoYXJhY3RlcnMgKGZvciA3IGZpZWxkcykKLSAgICAgICAgaWYgcmVjb3JkLmNvdW50KGMpID09IDY6Ci0gICAgICAgICAgICBmcyA9IGMKLSAgICAgICAgICAgIGJyZWFrCi0gICAgaWYgZnM6Ci0gICAgICAgIHJldHVybiBmcwotICAgIGVsc2U6Ci0gICAgICAgIHJhaXNlIEtleUVycm9yKCc+PiBwYXNzd2QgZGF0YWJhc2UgZmllbGRzIG5vdCBkZWxpbWl0ZWQgPDwnKQotCi0jIGNsYXNzIHRvIG1hdGNoIHRoZSBuZXcgcmVjb3JkIGZpZWxkIG5hbWUgYWNjZXNzb3JzLgotIyB0aGUgcmVzdWx0aW5nIG9iamVjdCBpcyBpbnRlbmRlZCB0byBiZWhhdmUgbGlrZSBhIHJlYWQtb25seSB0dXBsZSwKLSMgd2l0aCBlYWNoIG1lbWJlciBhbHNvIGFjY2Vzc2libGUgYnkgYSBmaWVsZCBuYW1lLgotY2xhc3MgUGFzc3dkOgotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBwYXNzd2QsIHVpZCwgZ2lkLCBnZWNvcywgZGlyLCBzaGVsbCk6Ci0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X25hbWUnXSA9IG5hbWUKLSAgICAgICAgc2VsZi5fX2RpY3RfX1sncHdfcGFzc3dkJ10gPSBwYXNzd2QKLSAgICAgICAgc2VsZi5fX2RpY3RfX1sncHdfdWlkJ10gPSB1aWQKLSAgICAgICAgc2VsZi5fX2RpY3RfX1sncHdfZ2lkJ10gPSBnaWQKLSAgICAgICAgc2VsZi5fX2RpY3RfX1sncHdfZ2Vjb3MnXSA9IGdlY29zCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X2RpciddID0gZGlyCi0gICAgICAgIHNlbGYuX19kaWN0X19bJ3B3X3NoZWxsJ10gPSBzaGVsbAotICAgICAgICBzZWxmLl9fZGljdF9fWydfcmVjb3JkJ10gPSAoc2VsZi5wd19uYW1lLCBzZWxmLnB3X3Bhc3N3ZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHdfdWlkLCBzZWxmLnB3X2dpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHdfZ2Vjb3MsIHNlbGYucHdfZGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wd19zaGVsbCkKLQotICAgIGRlZiBfX2xlbl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gNwotCi0gICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGtleSk6Ci0gICAgICAgIHJldHVybiBzZWxmLl9yZWNvcmRba2V5XQotCi0gICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKToKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoJ2F0dHJpYnV0ZSByZWFkLW9ubHk6ICVzJyAlIG5hbWUpCi0KLSAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBzdHIoc2VsZi5fcmVjb3JkKQotCi0gICAgZGVmIF9fY21wX18oc2VsZiwgb3RoZXIpOgotICAgICAgICB0aGlzID0gc3RyKHNlbGYuX3JlY29yZCkKLSAgICAgICAgaWYgdGhpcyA9PSBvdGhlcjoKLSAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIGVsaWYgdGhpcyA8IG90aGVyOgotICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gMQotCi0KLSMgcmVhZCB0aGUgd2hvbGUgZmlsZSwgcGFyc2luZyBlYWNoIGVudHJ5IGludG8gdHVwbGUgZm9ybQotIyB3aXRoIGRpY3Rpb25hcmllcyB0byBzcGVlZCByZWNhbGwgYnkgVUlEIG9yIHBhc3N3ZCBuYW1lCi1kZWYgX19yZWFkX3Bhc3N3ZF9maWxlKCk6Ci0gICAgaWYgcGFzc3dkX2ZpbGU6Ci0gICAgICAgIHBhc3N3ZCA9IG9wZW4ocGFzc3dkX2ZpbGUsICdyJykKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBLZXlFcnJvcignPj4gbm8gcGFzc3dvcmQgZGF0YWJhc2UgPDwnKQotICAgIHVpZHggPSB7fQotICAgIG5hbXggPSB7fQotICAgIHNlcCA9IE5vbmUKLSAgICB3aGlsZSBUcnVlOgotICAgICAgICBlbnRyeSA9IHBhc3N3ZC5yZWFkbGluZSgpLnN0cmlwKCkKLSAgICAgICAgaWYgbGVuKGVudHJ5KSA+IDY6Ci0gICAgICAgICAgICBpZiBzZXAgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZXAgPSBfX2dldF9maWVsZF9zZXAoZW50cnkpCi0gICAgICAgICAgICBmaWVsZHMgPSBlbnRyeS5zcGxpdChzZXApCi0gICAgICAgICAgICBmb3IgaSBpbiAoMiwgMyk6Ci0gICAgICAgICAgICAgICAgZmllbGRzW2ldID0gaW50KGZpZWxkc1tpXSkKLSAgICAgICAgICAgIGZvciBpIGluICg1LCA2KToKLSAgICAgICAgICAgICAgICBmaWVsZHNbaV0gPSBfX2ZpZWxkX3NlcFtzZXBdKGZpZWxkc1tpXSkKLSAgICAgICAgICAgIHJlY29yZCA9IFBhc3N3ZCgqZmllbGRzKQotICAgICAgICAgICAgaWYgZmllbGRzWzJdIG5vdCBpbiB1aWR4OgotICAgICAgICAgICAgICAgIHVpZHhbZmllbGRzWzJdXSA9IHJlY29yZAotICAgICAgICAgICAgaWYgZmllbGRzWzBdIG5vdCBpbiBuYW14OgotICAgICAgICAgICAgICAgIG5hbXhbZmllbGRzWzBdXSA9IHJlY29yZAotICAgICAgICBlbGlmIGxlbihlbnRyeSkgPiAwOgotICAgICAgICAgICAgcGFzcyAgICAgICAgICAgICAgICAgICAgICAgICAjIHNraXAgZW1wdHkgb3IgbWFsZm9ybWVkIHJlY29yZHMKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGJyZWFrCi0gICAgcGFzc3dkLmNsb3NlKCkKLSAgICBpZiBsZW4odWlkeCkgPT0gMDoKLSAgICAgICAgcmFpc2UgS2V5RXJyb3IKLSAgICByZXR1cm4gKHVpZHgsIG5hbXgpCi0KLSMgcmV0dXJuIHRoZSBwYXNzd2QgZGF0YWJhc2UgZW50cnkgYnkgVUlECi1kZWYgZ2V0cHd1aWQodWlkKToKLSAgICB1LCBuID0gX19yZWFkX3Bhc3N3ZF9maWxlKCkKLSAgICByZXR1cm4gdVt1aWRdCi0KLSMgcmV0dXJuIHRoZSBwYXNzd2QgZGF0YWJhc2UgZW50cnkgYnkgcGFzc3dkIG5hbWUKLWRlZiBnZXRwd25hbShuYW1lKToKLSAgICB1LCBuID0gX19yZWFkX3Bhc3N3ZF9maWxlKCkKLSAgICByZXR1cm4gbltuYW1lXQotCi0jIHJldHVybiBhbGwgdGhlIHBhc3N3ZCBkYXRhYmFzZSBlbnRyaWVzCi1kZWYgZ2V0cHdhbGwoKToKLSAgICB1LCBuID0gX19yZWFkX3Bhc3N3ZF9maWxlKCkKLSAgICByZXR1cm4gbi52YWx1ZXMoKQotCi0jIHRlc3QgaGFybmVzcwotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBnZXRwd2FsbCgpCmRpZmYgLS1naXQgYS9MaWIvcGxhdC1vczJlbXgvcmVnZW4gYi9MaWIvcGxhdC1vczJlbXgvcmVnZW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDNlY2QyYTguLjAwMDAwMDAKLS0tIGEvTGliL3BsYXQtb3MyZW14L3JlZ2VuCisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jISAvYmluL3NoCi1leHBvcnQgSU5DTFVERT0kQ19JTkNMVURFX1BBVEgKLXNldCAtdgotcHl0aG9uLmV4ZSAuLi8uLi9Ub29scy9zY3JpcHRzL2gycHkucHkgJENfSU5DTFVERV9QQVRIL2ZjbnRsLmgKLXB5dGhvbi5leGUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5ICRDX0lOQ0xVREVfUEFUSC9zeXMvc29ja2V0LmgKLXB5dGhvbi5leGUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5IC1pICcodV9sb25nKScgJENfSU5DTFVERV9QQVRIL25ldGluZXQvaW4uaAotI3B5dGhvbi5leGUgLi4vLi4vVG9vbHMvc2NyaXB0cy9oMnB5LnB5ICRDX0lOQ0xVREVfUEFUSC90ZXJtaW9zLmgKZGlmZiAtLWdpdCBhL0xpYi9wbGF0Zm9ybS5weSBiL0xpYi9wbGF0Zm9ybS5weQppbmRleCAwMzBlZjJhLi5hZDQyNWExIDEwMDc1NQotLS0gYS9MaWIvcGxhdGZvcm0ucHkKKysrIGIvTGliL3BsYXRmb3JtLnB5CkBAIC0yNiwxMiArMjYsMTQgQEAKICMgICAgICBCZXRhbmNvdXJ0LCBSYW5kYWxsIEhvcHBlciwgS2FybCBQdXRsYW5kLCBKb2huIEZhcnJlbGwsIEdyZWcKICMgICAgICBBbmRydWssIEp1c3QgdmFuIFJvc3N1bSwgVGhvbWFzIEhlbGxlciwgTWFyayBSLiBMZXZpbnNvbiwgTWFyawogIyAgICAgIEhhbW1vbmQsIEJpbGwgVHV0dCwgSGFucyBOb3dhaywgVXdlIFplc3NpbiAoT3BlblZNUyBzdXBwb3J0KSwKLSMgICAgICBDb2xpbiBLb25nLCBUcmVudCBNaWNrLCBHdWlkbyB2YW4gUm9zc3VtLCBBbnRob255IEJheHRlcgorIyAgICAgIENvbGluIEtvbmcsIFRyZW50IE1pY2ssIEd1aWRvIHZhbiBSb3NzdW0sIEFudGhvbnkgQmF4dGVyLCBTdGV2ZQorIyAgICAgIERvd2VyCiAjCiAjICAgIEhpc3Rvcnk6CiAjCiAjICAgIDxzZWUgQ1ZTIGFuZCBTVk4gY2hlY2tpbiBtZXNzYWdlcyBmb3IgaGlzdG9yeT4KICMKKyMgICAgMS4wLjggLSBjaGFuZ2VkIFdpbmRvd3Mgc3VwcG9ydCB0byByZWFkIHZlcnNpb24gZnJvbSBrZXJuZWwzMi5kbGwKICMgICAgMS4wLjcgLSBhZGRlZCBERVZfTlVMTAogIyAgICAxLjAuNiAtIGFkZGVkIGxpbnV4X2Rpc3RyaWJ1dGlvbigpCiAjICAgIDEuMC41IC0gZml4ZWQgSmF2YSBzdXBwb3J0IHRvIGFsbG93IHJ1bm5pbmcgdGhlIG1vZHVsZSBvbiBKeXRob24KQEAgLTEyMiw3ICsxMjQsNyBAQAogZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICMgb3MuZGV2bnVsbCB3YXMgYWRkZWQgaW4gUHl0aG9uIDIuNCwgc28gZW11bGF0ZSBpdCBmb3IgZWFybGllcgogICAgICMgUHl0aG9uIHZlcnNpb25zCi0gICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicsJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsICd3aW4zMicsICd3aW4xNicpOgogICAgICAgICAjIFVzZSB0aGUgb2xkIENQL00gTlVMIGFzIGRldmljZSBuYW1lCiAgICAgICAgIERFVl9OVUxMID0gJ05VTCcKICAgICBlbHNlOgpAQCAtMTQxLDcgKzE0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGInfCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInKGxpYmMoX1x3Kyk/XC5zbyg/OlwuKFxkWzAtOS5dKikpPyknLCByZS5BU0NJSSkKIAotZGVmIGxpYmNfdmVyKGV4ZWN1dGFibGU9c3lzLmV4ZWN1dGFibGUsbGliPScnLHZlcnNpb249JycsCitkZWYgbGliY192ZXIoZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSwgbGliPScnLCB2ZXJzaW9uPScnLAogCiAgICAgICAgICAgICAgY2h1bmtzaXplPTE2Mzg0KToKIApAQCAtMTYzLDEyICsxNjUsMTIgQEAKICAgICAgICAgIyBoZXJlIHRvIHdvcmsgYXJvdW5kIHByb2JsZW1zIHdpdGggQ3lnd2luIG5vdCBiZWluZwogICAgICAgICAjIGFibGUgdG8gb3BlbiBzeW1saW5rcyBmb3IgcmVhZGluZwogICAgICAgICBleGVjdXRhYmxlID0gb3MucGF0aC5yZWFscGF0aChleGVjdXRhYmxlKQotICAgIGYgPSBvcGVuKGV4ZWN1dGFibGUsJ3JiJykKKyAgICBmID0gb3BlbihleGVjdXRhYmxlLCAncmInKQogICAgIGJpbmFyeSA9IGYucmVhZChjaHVua3NpemUpCiAgICAgcG9zID0gMAogICAgIHdoaWxlIDE6CiAgICAgICAgIGlmIGInbGliYycgaW4gYmluYXJ5IG9yIGInR0xJQkMnIGluIGJpbmFyeToKLSAgICAgICAgICAgIG0gPSBfbGliY19zZWFyY2guc2VhcmNoKGJpbmFyeSxwb3MpCisgICAgICAgICAgICBtID0gX2xpYmNfc2VhcmNoLnNlYXJjaChiaW5hcnksIHBvcykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG0gPSBOb25lCiAgICAgICAgIGlmIG5vdCBtOgpAQCAtMTc3LDcgKzE3OSw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHBvcyA9IDAKICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGxpYmNpbml0LGdsaWJjLGdsaWJjdmVyc2lvbixzbyx0aHJlYWRzLHNvdmVyc2lvbiA9IFsKKyAgICAgICAgbGliY2luaXQsIGdsaWJjLCBnbGliY3ZlcnNpb24sIHNvLCB0aHJlYWRzLCBzb3ZlcnNpb24gPSBbCiAgICAgICAgICAgICBzLmRlY29kZSgnbGF0aW4xJykgaWYgcyBpcyBub3QgTm9uZSBlbHNlIHMKICAgICAgICAgICAgIGZvciBzIGluIG0uZ3JvdXBzKCldCiAgICAgICAgIGlmIGxpYmNpbml0IGFuZCBub3QgbGliOgpAQCAtMTk3LDkgKzE5OSw5IEBACiAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uICsgdGhyZWFkcwogICAgICAgICBwb3MgPSBtLmVuZCgpCiAgICAgZi5jbG9zZSgpCi0gICAgcmV0dXJuIGxpYix2ZXJzaW9uCisgICAgcmV0dXJuIGxpYiwgdmVyc2lvbgogCi1kZWYgX2Rpc3RfdHJ5X2hhcmRlcihkaXN0bmFtZSx2ZXJzaW9uLGlkKToKK2RlZiBfZGlzdF90cnlfaGFyZGVyKGRpc3RuYW1lLCB2ZXJzaW9uLCBpZCk6CiAKICAgICAiIiIgVHJpZXMgc29tZSBzcGVjaWFsIHRyaWNrcyB0byBnZXQgdGhlIGRpc3RyaWJ1dGlvbgogICAgICAgICBpbmZvcm1hdGlvbiBpbiBjYXNlIHRoZSBkZWZhdWx0IG1ldGhvZCBmYWlscy4KQEAgLTIxNCw3ICsyMTYsNyBAQAogICAgICAgICBmb3IgbGluZSBpbiBvcGVuKCcvdmFyL2FkbS9pbnN0LWxvZy9pbmZvJyk6CiAgICAgICAgICAgICB0diA9IGxpbmUuc3BsaXQoKQogICAgICAgICAgICAgaWYgbGVuKHR2KSA9PSAyOgotICAgICAgICAgICAgICAgIHRhZyx2YWx1ZSA9IHR2CisgICAgICAgICAgICAgICAgdGFnLCB2YWx1ZSA9IHR2CiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBpZiB0YWcgPT0gJ01JTl9ESVNUX1ZFUlNJT04nOgpAQCAtMjIyLDcgKzIyNCw3IEBACiAgICAgICAgICAgICBlbGlmIHRhZyA9PSAnRElTVF9JREVOVCc6CiAgICAgICAgICAgICAgICAgdmFsdWVzID0gdmFsdWUuc3BsaXQoJy0nKQogICAgICAgICAgICAgICAgIGlkID0gdmFsdWVzWzJdCi0gICAgICAgIHJldHVybiBkaXN0bmFtZSx2ZXJzaW9uLGlkCisgICAgICAgIHJldHVybiBkaXN0bmFtZSwgdmVyc2lvbiwgaWQKIAogICAgIGlmIG9zLnBhdGguZXhpc3RzKCcvZXRjLy5pbnN0YWxsZWQnKToKICAgICAgICAgIyBDYWxkZXJhIE9wZW5MaW51eCBoYXMgc29tZSBpbmZvcyBpbiB0aGF0IGZpbGUgKHRoYW5rcyB0byBDb2xpbiBLb25nKQpAQCAtMjMxLDcgKzIzMyw3IEBACiAgICAgICAgICAgICBpZiBsZW4ocGtnKSA+PSAyIGFuZCBwa2dbMF0gPT0gJ09wZW5MaW51eCc6CiAgICAgICAgICAgICAgICAgIyBYWFggZG9lcyBDYWxkZXJhIHN1cHBvcnQgbm9uIEludGVsIHBsYXRmb3JtcyA/IElmIHllcywKICAgICAgICAgICAgICAgICAjICAgICB3aGVyZSBjYW4gd2UgZmluZCB0aGUgbmVlZGVkIGlkID8KLSAgICAgICAgICAgICAgICByZXR1cm4gJ09wZW5MaW51eCcscGtnWzFdLGlkCisgICAgICAgICAgICAgICAgcmV0dXJuICdPcGVuTGludXgnLCBwa2dbMV0sIGlkCiAKICAgICBpZiBvcy5wYXRoLmlzZGlyKCcvdXNyL2xpYi9zZXR1cCcpOgogICAgICAgICAjIENoZWNrIGZvciBzbGFja3dhcmUgdmVyc2lvbiB0YWcgZmlsZSAodGhhbmtzIHRvIEdyZWcgQW5kcnVrKQpAQCAtMjQzLDkgKzI0NSw5IEBACiAgICAgICAgICAgICB2ZXJmaWxlcy5zb3J0KCkKICAgICAgICAgICAgIGRpc3RuYW1lID0gJ3NsYWNrd2FyZScKICAgICAgICAgICAgIHZlcnNpb24gPSB2ZXJmaWxlc1stMV1bMTQ6XQotICAgICAgICAgICAgcmV0dXJuIGRpc3RuYW1lLHZlcnNpb24saWQKKyAgICAgICAgICAgIHJldHVybiBkaXN0bmFtZSwgdmVyc2lvbiwgaWQKIAotICAgIHJldHVybiBkaXN0bmFtZSx2ZXJzaW9uLGlkCisgICAgcmV0dXJuIGRpc3RuYW1lLCB2ZXJzaW9uLCBpZAogCiBfcmVsZWFzZV9maWxlbmFtZSA9IHJlLmNvbXBpbGUocicoXHcrKVstX10ocmVsZWFzZXx2ZXJzaW9uKScsIHJlLkFTQ0lJKQogX2xzYl9yZWxlYXNlX3ZlcnNpb24gPSByZS5jb21waWxlKHInKC4rKScKQEAgLTMxNCwyNSArMzE2LDI1IEBACiAgICAgICAgIGRpc3RyaWJ1dGlvbiByZWFkIGZyb20gdGhlIE9TIGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHNob3J0CiAgICAgICAgIG5hbWUgdGFrZW4gZnJvbSBzdXBwb3J0ZWRfZGlzdHMgaXMgdXNlZC4KIAotICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKGRpc3RuYW1lLHZlcnNpb24saWQpIHdoaWNoIGRlZmF1bHQgdG8gdGhlCisgICAgICAgIFJldHVybnMgYSB0dXBsZSAoZGlzdG5hbWUsIHZlcnNpb24sIGlkKSB3aGljaCBkZWZhdWx0IHRvIHRoZQogICAgICAgICBhcmdzIGdpdmVuIGFzIHBhcmFtZXRlcnMuCiAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGV0YyA9IG9zLmxpc3RkaXIoX1VOSVhDT05GRElSKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgIyBQcm9iYWJseSBub3QgYSBVbml4IHN5c3RlbQotICAgICAgICByZXR1cm4gZGlzdG5hbWUsdmVyc2lvbixpZAorICAgICAgICByZXR1cm4gZGlzdG5hbWUsIHZlcnNpb24sIGlkCiAgICAgZXRjLnNvcnQoKQogICAgIGZvciBmaWxlIGluIGV0YzoKICAgICAgICAgbSA9IF9yZWxlYXNlX2ZpbGVuYW1lLm1hdGNoKGZpbGUpCiAgICAgICAgIGlmIG0gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBfZGlzdG5hbWUsZHVtbXkgPSBtLmdyb3VwcygpCisgICAgICAgICAgICBfZGlzdG5hbWUsIGR1bW15ID0gbS5ncm91cHMoKQogICAgICAgICAgICAgaWYgX2Rpc3RuYW1lIGluIHN1cHBvcnRlZF9kaXN0czoKICAgICAgICAgICAgICAgICBkaXN0bmFtZSA9IF9kaXN0bmFtZQogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgZWxzZToKLSAgICAgICAgcmV0dXJuIF9kaXN0X3RyeV9oYXJkZXIoZGlzdG5hbWUsdmVyc2lvbixpZCkKKyAgICAgICAgcmV0dXJuIF9kaXN0X3RyeV9oYXJkZXIoZGlzdG5hbWUsIHZlcnNpb24sIGlkKQogCiAgICAgIyBSZWFkIHRoZSBmaXJzdCBsaW5lCiAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihfVU5JWENPTkZESVIsIGZpbGUpLCAncicsCkBAIC0zNTAsNyArMzUyLDcgQEAKIAogIyBUbyBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKIAotZGVmIGRpc3QoZGlzdG5hbWU9JycsdmVyc2lvbj0nJyxpZD0nJywKK2RlZiBkaXN0KGRpc3RuYW1lPScnLCB2ZXJzaW9uPScnLCBpZD0nJywKIAogICAgICAgICAgc3VwcG9ydGVkX2Rpc3RzPV9zdXBwb3J0ZWRfZGlzdHMpOgogCkBAIC0zNjAsNyArMzYyLDcgQEAKICAgICAgICAgL2V0YyBhbmQgdGhlbiByZXZlcnRzIHRvIF9kaXN0X3RyeV9oYXJkZXIoKSBpbiBjYXNlIG5vCiAgICAgICAgIHN1aXRhYmxlIGZpbGVzIGFyZSBmb3VuZC4KIAotICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKGRpc3RuYW1lLHZlcnNpb24saWQpIHdoaWNoIGRlZmF1bHQgdG8gdGhlCisgICAgICAgIFJldHVybnMgYSB0dXBsZSAoZGlzdG5hbWUsIHZlcnNpb24sIGlkKSB3aGljaCBkZWZhdWx0IHRvIHRoZQogICAgICAgICBhcmdzIGdpdmVuIGFzIHBhcmFtZXRlcnMuCiAKICAgICAiIiIKQEAgLTM4NSwxMSArMzg3LDExIEBACiAgICAgaWYgYnVpbGQ6CiAgICAgICAgIGwuYXBwZW5kKGJ1aWxkKQogICAgIHRyeToKLSAgICAgICAgaW50cyA9IG1hcChpbnQsbCkKKyAgICAgICAgaW50cyA9IG1hcChpbnQsIGwpCiAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgIHN0cmluZ3MgPSBsCiAgICAgZWxzZToKLSAgICAgICAgc3RyaW5ncyA9IGxpc3QobWFwKHN0cixpbnRzKSkKKyAgICAgICAgc3RyaW5ncyA9IGxpc3QobWFwKHN0ciwgaW50cykpCiAgICAgdmVyc2lvbiA9ICcuJy5qb2luKHN0cmluZ3NbOjNdKQogICAgIHJldHVybiB2ZXJzaW9uCiAKQEAgLTQwOCw0NiArNDEwLDQzIEBACiAKIGRlZiBfc3lzY21kX3ZlcihzeXN0ZW09JycsIHJlbGVhc2U9JycsIHZlcnNpb249JycsCiAKLSAgICAgICAgICAgICAgIHN1cHBvcnRlZF9wbGF0Zm9ybXM9KCd3aW4zMicsJ3dpbjE2JywnZG9zJywnb3MyJykpOgorICAgICAgICAgICAgICAgc3VwcG9ydGVkX3BsYXRmb3Jtcz0oJ3dpbjMyJywgJ3dpbjE2JywgJ2RvcycpKToKIAogICAgICIiIiBUcmllcyB0byBmaWd1cmUgb3V0IHRoZSBPUyB2ZXJzaW9uIHVzZWQgYW5kIHJldHVybnMKLSAgICAgICAgYSB0dXBsZSAoc3lzdGVtLHJlbGVhc2UsdmVyc2lvbikuCisgICAgICAgIGEgdHVwbGUgKHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbikuCiAKICAgICAgICAgSXQgdXNlcyB0aGUgInZlciIgc2hlbGwgY29tbWFuZCBmb3IgdGhpcyB3aGljaCBpcyBrbm93bgotICAgICAgICB0byBleGlzdHMgb24gV2luZG93cywgRE9TIGFuZCBPUy8yLiBYWFggT3RoZXJzIHRvbyA/CisgICAgICAgIHRvIGV4aXN0cyBvbiBXaW5kb3dzLCBET1MuIFhYWCBPdGhlcnMgdG9vID8KIAogICAgICAgICBJbiBjYXNlIHRoaXMgZmFpbHMsIHRoZSBnaXZlbiBwYXJhbWV0ZXJzIGFyZSB1c2VkIGFzCiAgICAgICAgIGRlZmF1bHRzLgogCiAgICAgIiIiCiAgICAgaWYgc3lzLnBsYXRmb3JtIG5vdCBpbiBzdXBwb3J0ZWRfcGxhdGZvcm1zOgotICAgICAgICByZXR1cm4gc3lzdGVtLHJlbGVhc2UsdmVyc2lvbgorICAgICAgICByZXR1cm4gc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uCiAKICAgICAjIFRyeSBzb21lIGNvbW1vbiBjbWQgc3RyaW5ncwotICAgIGZvciBjbWQgaW4gKCd2ZXInLCdjb21tYW5kIC9jIHZlcicsJ2NtZCAvYyB2ZXInKToKKyAgICBmb3IgY21kIGluICgndmVyJywgJ2NvbW1hbmQgL2MgdmVyJywgJ2NtZCAvYyB2ZXInKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcGlwZSA9IHBvcGVuKGNtZCkKICAgICAgICAgICAgIGluZm8gPSBwaXBlLnJlYWQoKQogICAgICAgICAgICAgaWYgcGlwZS5jbG9zZSgpOgotICAgICAgICAgICAgICAgIHJhaXNlIG9zLmVycm9yKCdjb21tYW5kIGZhaWxlZCcpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignY29tbWFuZCBmYWlsZWQnKQogICAgICAgICAgICAgIyBYWFggSG93IGNhbiBJIHN1cHByZXNzIHNoZWxsIGVycm9ycyBmcm9tIGJlaW5nIHdyaXR0ZW4KICAgICAgICAgICAgICMgICAgIHRvIHN0ZGVyciA/Ci0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyB3aHk6Ci0gICAgICAgICAgICAjcHJpbnQgJ0NvbW1hbmQgJXMgZmFpbGVkOiAlcycgJSAoY21kLHdoeSkKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIHdoeToKLSAgICAgICAgICAgICNwcmludCAnQ29tbWFuZCAlcyBmYWlsZWQ6ICVzJyAlIChjbWQsd2h5KQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB3aHk6CisgICAgICAgICAgICAjcHJpbnQgJ0NvbW1hbmQgJXMgZmFpbGVkOiAlcycgJSAoY21kLCB3aHkpCiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYnJlYWsKICAgICBlbHNlOgotICAgICAgICByZXR1cm4gc3lzdGVtLHJlbGVhc2UsdmVyc2lvbgorICAgICAgICByZXR1cm4gc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uCiAKICAgICAjIFBhcnNlIHRoZSBvdXRwdXQKICAgICBpbmZvID0gaW5mby5zdHJpcCgpCiAgICAgbSA9IF92ZXJfb3V0cHV0Lm1hdGNoKGluZm8pCiAgICAgaWYgbSBpcyBub3QgTm9uZToKLSAgICAgICAgc3lzdGVtLHJlbGVhc2UsdmVyc2lvbiA9IG0uZ3JvdXBzKCkKKyAgICAgICAgc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uID0gbS5ncm91cHMoKQogICAgICAgICAjIFN0cmlwIHRyYWlsaW5nIGRvdHMgZnJvbSB2ZXJzaW9uIGFuZCByZWxlYXNlCiAgICAgICAgIGlmIHJlbGVhc2VbLTFdID09ICcuJzoKICAgICAgICAgICAgIHJlbGVhc2UgPSByZWxlYXNlWzotMV0KQEAgLTQ1NiwyNDcgKzQ1NSwxNDMgQEAKICAgICAgICAgIyBOb3JtYWxpemUgdGhlIHZlcnNpb24gYW5kIGJ1aWxkIHN0cmluZ3MgKGVsaW1pbmF0aW5nIGFkZGl0aW9uYWwKICAgICAgICAgIyB6ZXJvcykKICAgICAgICAgdmVyc2lvbiA9IF9ub3JtX3ZlcnNpb24odmVyc2lvbikKLSAgICByZXR1cm4gc3lzdGVtLHJlbGVhc2UsdmVyc2lvbgorICAgIHJldHVybiBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24KIAotZGVmIF93aW4zMl9nZXR2YWx1ZShrZXksbmFtZSxkZWZhdWx0PScnKToKK19XSU4zMl9DTElFTlRfUkVMRUFTRVMgPSB7CisgICAgKDUsIDApOiAiMjAwMCIsCisgICAgKDUsIDEpOiAiWFAiLAorICAgICMgU3RyaWN0bHksIDUuMiBjbGllbnQgaXMgWFAgNjQtYml0LCBidXQgcGxhdGZvcm0ucHkgaGlzdG9yaWNhbGx5CisgICAgIyBoYXMgYWx3YXlzIGNhbGxlZCBpdCAyMDAzIFNlcnZlcgorICAgICg1LCAyKTogIjIwMDNTZXJ2ZXIiLAorICAgICg1LCBOb25lKTogInBvc3QyMDAzIiwKIAotICAgICIiIiBSZWFkIGEgdmFsdWUgZm9yIG5hbWUgZnJvbSB0aGUgcmVnaXN0cnkga2V5LgorICAgICg2LCAwKTogIlZpc3RhIiwKKyAgICAoNiwgMSk6ICI3IiwKKyAgICAoNiwgMik6ICI4IiwKKyAgICAoNiwgMyk6ICI4LjEiLAorICAgICg2LCBOb25lKTogInBvc3Q4LjEiLAogCi0gICAgICAgIEluIGNhc2UgdGhpcyBmYWlscywgZGVmYXVsdCBpcyByZXR1cm5lZC4KKyAgICAoMTAsIDApOiAiMTAiLAorICAgICgxMCwgTm9uZSk6ICJwb3N0MTAiLAorfQogCi0gICAgIiIiCisjIFNlcnZlciByZWxlYXNlIG5hbWUgbG9va3VwIHdpbGwgZGVmYXVsdCB0byBjbGllbnQgbmFtZXMgaWYgbmVjZXNzYXJ5CitfV0lOMzJfU0VSVkVSX1JFTEVBU0VTID0geworICAgICg1LCAyKTogIjIwMDNTZXJ2ZXIiLAorCisgICAgKDYsIDApOiAiMjAwOFNlcnZlciIsCisgICAgKDYsIDEpOiAiMjAwOFNlcnZlclIyIiwKKyAgICAoNiwgMik6ICIyMDEyU2VydmVyIiwKKyAgICAoNiwgMyk6ICIyMDEyU2VydmVyUjIiLAorICAgICg2LCBOb25lKTogInBvc3QyMDEyU2VydmVyUjIiLAorfQorCitkZWYgX2dldF9yZWFsX3dpbnZlcihtYWosIG1pbiwgYnVpbGQpOgorICAgIGlmIG1haiA8IDYgb3IgKG1haiA9PSA2IGFuZCBtaW4gPCAyKToKKyAgICAgICAgcmV0dXJuIG1haiwgbWluLCBidWlsZAorCisgICAgZnJvbSBjdHlwZXMgaW1wb3J0IChjX2J1ZmZlciwgUE9JTlRFUiwgYnlyZWYsIGNyZWF0ZV91bmljb2RlX2J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0cnVjdHVyZSwgV2luRExMKQorICAgIGZyb20gY3R5cGVzLndpbnR5cGVzIGltcG9ydCBEV09SRCwgSEFORExFCisKKyAgICBjbGFzcyBWU19GSVhFREZJTEVJTkZPKFN0cnVjdHVyZSk6CisgICAgICAgIF9maWVsZHNfID0gWworICAgICAgICAgICAgKCJkd1NpZ25hdHVyZSIsIERXT1JEKSwKKyAgICAgICAgICAgICgiZHdTdHJ1Y1ZlcnNpb24iLCBEV09SRCksCisgICAgICAgICAgICAoImR3RmlsZVZlcnNpb25NUyIsIERXT1JEKSwKKyAgICAgICAgICAgICgiZHdGaWxlVmVyc2lvbkxTIiwgRFdPUkQpLAorICAgICAgICAgICAgKCJkd1Byb2R1Y3RWZXJzaW9uTVMiLCBEV09SRCksCisgICAgICAgICAgICAoImR3UHJvZHVjdFZlcnNpb25MUyIsIERXT1JEKSwKKyAgICAgICAgICAgICgiZHdGaWxlRmxhZ3NNYXNrIiwgRFdPUkQpLAorICAgICAgICAgICAgKCJkd0ZpbGVGbGFncyIsIERXT1JEKSwKKyAgICAgICAgICAgICgiZHdGaWxlT1MiLCBEV09SRCksCisgICAgICAgICAgICAoImR3RmlsZVR5cGUiLCBEV09SRCksCisgICAgICAgICAgICAoImR3RmlsZVN1YnR5cGUiLCBEV09SRCksCisgICAgICAgICAgICAoImR3RmlsZURhdGVNUyIsIERXT1JEKSwKKyAgICAgICAgICAgICgiZHdGaWxlRGF0ZUxTIiwgRFdPUkQpLAorICAgICAgICBdCisKKyAgICBrZXJuZWwzMiA9IFdpbkRMTCgna2VybmVsMzInKQorICAgIHZlcnNpb24gPSBXaW5ETEwoJ3ZlcnNpb24nKQorCisgICAgIyBXZSB3aWxsIGltbWVkaWF0ZWx5IGRvdWJsZSB0aGUgbGVuZ3RoIHVwIHRvIE1BWF9QQVRILCBidXQgdGhlCisgICAgIyBwYXRoIG1heSBiZSBsb25nZXIsIHNvIHdlIHJldHJ5IHVudGlsIHRoZSByZXR1cm5lZCBzdHJpbmcgaXMKKyAgICAjIHNob3J0ZXIgdGhhbiBvdXIgYnVmZmVyLgorICAgIG5hbWVfbGVuID0gYWN0dWFsX2xlbiA9IDEzMAorICAgIHdoaWxlIGFjdHVhbF9sZW4gPT0gbmFtZV9sZW46CisgICAgICAgIG5hbWVfbGVuICo9IDIKKyAgICAgICAgbmFtZSA9IGNyZWF0ZV91bmljb2RlX2J1ZmZlcihuYW1lX2xlbikKKyAgICAgICAgYWN0dWFsX2xlbiA9IGtlcm5lbDMyLkdldE1vZHVsZUZpbGVOYW1lVyhIQU5ETEUoa2VybmVsMzIuX2hhbmRsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbGVuKG5hbWUpKQorICAgICAgICBpZiBub3QgYWN0dWFsX2xlbjoKKyAgICAgICAgICAgIHJldHVybiBtYWosIG1pbiwgYnVpbGQKKworICAgIHNpemUgPSB2ZXJzaW9uLkdldEZpbGVWZXJzaW9uSW5mb1NpemVXKG5hbWUsIE5vbmUpCisgICAgaWYgbm90IHNpemU6CisgICAgICAgIHJldHVybiBtYWosIG1pbiwgYnVpbGQKKworICAgIHZlcl9ibG9jayA9IGNfYnVmZmVyKHNpemUpCisgICAgaWYgKG5vdCB2ZXJzaW9uLkdldEZpbGVWZXJzaW9uSW5mb1cobmFtZSwgTm9uZSwgc2l6ZSwgdmVyX2Jsb2NrKSBvcgorICAgICAgICBub3QgdmVyX2Jsb2NrKToKKyAgICAgICAgcmV0dXJuIG1haiwgbWluLCBidWlsZAorCisgICAgcHZpID0gUE9JTlRFUihWU19GSVhFREZJTEVJTkZPKSgpCisgICAgaWYgbm90IHZlcnNpb24uVmVyUXVlcnlWYWx1ZVcodmVyX2Jsb2NrLCAiIiwgYnlyZWYocHZpKSwgYnlyZWYoRFdPUkQoKSkpOgorICAgICAgICByZXR1cm4gbWFqLCBtaW4sIGJ1aWxkCisKKyAgICBtYWogPSBwdmkuY29udGVudHMuZHdQcm9kdWN0VmVyc2lvbk1TID4+IDE2CisgICAgbWluID0gcHZpLmNvbnRlbnRzLmR3UHJvZHVjdFZlcnNpb25NUyAmIDB4RkZGRgorICAgIGJ1aWxkID0gcHZpLmNvbnRlbnRzLmR3UHJvZHVjdFZlcnNpb25MUyA+PiAxNgorCisgICAgcmV0dXJuIG1haiwgbWluLCBidWlsZAorCitkZWYgd2luMzJfdmVyKHJlbGVhc2U9JycsIHZlcnNpb249JycsIGNzZD0nJywgcHR5cGU9JycpOgogICAgIHRyeToKLSAgICAgICAgIyBVc2Ugd2luMzJhcGkgaWYgYXZhaWxhYmxlCi0gICAgICAgIGZyb20gd2luMzJhcGkgaW1wb3J0IFJlZ1F1ZXJ5VmFsdWVFeAorICAgICAgICBmcm9tIHN5cyBpbXBvcnQgZ2V0d2luZG93c3ZlcnNpb24KICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICMgT24gUHl0aG9uIDIuMCBhbmQgbGF0ZXIsIGVtdWxhdGUgdXNpbmcgd2lucmVnCi0gICAgICAgIGltcG9ydCB3aW5yZWcKLSAgICAgICAgUmVnUXVlcnlWYWx1ZUV4ID0gd2lucmVnLlF1ZXJ5VmFsdWVFeAorICAgICAgICByZXR1cm4gcmVsZWFzZSwgdmVyc2lvbiwgY3NkLCBwdHlwZQogICAgIHRyeToKLSAgICAgICAgcmV0dXJuIFJlZ1F1ZXJ5VmFsdWVFeChrZXksbmFtZSkKLSAgICBleGNlcHQ6Ci0gICAgICAgIHJldHVybiBkZWZhdWx0Ci0KLWRlZiB3aW4zMl92ZXIocmVsZWFzZT0nJyx2ZXJzaW9uPScnLGNzZD0nJyxwdHlwZT0nJyk6Ci0KLSAgICAiIiIgR2V0IGFkZGl0aW9uYWwgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBXaW5kb3dzIFJlZ2lzdHJ5Ci0gICAgICAgIGFuZCByZXR1cm4gYSB0dXBsZSAodmVyc2lvbixjc2QscHR5cGUpIHJlZmVycmluZyB0byB2ZXJzaW9uCi0gICAgICAgIG51bWJlciwgQ1NEIGxldmVsIChzZXJ2aWNlIHBhY2spLCBhbmQgT1MgdHlwZSAobXVsdGkvc2luZ2xlCi0gICAgICAgIHByb2Nlc3NvcikuCi0KLSAgICAgICAgQXMgYSBoaW50OiBwdHlwZSByZXR1cm5zICdVbmlwcm9jZXNzb3IgRnJlZScgb24gc2luZ2xlCi0gICAgICAgIHByb2Nlc3NvciBOVCBtYWNoaW5lcyBhbmQgJ011bHRpcHJvY2Vzc29yIEZyZWUnIG9uIG11bHRpCi0gICAgICAgIHByb2Nlc3NvciBtYWNoaW5lcy4gVGhlICdGcmVlJyByZWZlcnMgdG8gdGhlIE9TIHZlcnNpb24gYmVpbmcKLSAgICAgICAgZnJlZSBvZiBkZWJ1Z2dpbmcgY29kZS4gSXQgY291bGQgYWxzbyBzdGF0ZSAnQ2hlY2tlZCcgd2hpY2gKLSAgICAgICAgbWVhbnMgdGhlIE9TIHZlcnNpb24gdXNlcyBkZWJ1Z2dpbmcgY29kZSwgaS5lLiBjb2RlIHRoYXQKLSAgICAgICAgY2hlY2tzIGFyZ3VtZW50cywgcmFuZ2VzLCBldGMuIChUaG9tYXMgSGVsbGVyKS4KLQotICAgICAgICBOb3RlOiB0aGlzIGZ1bmN0aW9uIHdvcmtzIGJlc3Qgd2l0aCBNYXJrIEhhbW1vbmQncyB3aW4zMgotICAgICAgICBwYWNrYWdlIGluc3RhbGxlZCwgYnV0IGFsc28gb24gUHl0aG9uIDIuMyBhbmQgbGF0ZXIuIEl0Ci0gICAgICAgIG9idmlvdXNseSBvbmx5IHJ1bnMgb24gV2luMzIgY29tcGF0aWJsZSBwbGF0Zm9ybXMuCi0KLSAgICAiIiIKLSAgICAjIFhYWCBJcyB0aGVyZSBhbnkgd2F5IHRvIGZpbmQgb3V0IHRoZSBwcm9jZXNzb3IgdHlwZSBvbiBXaW5YWCA/Ci0gICAgIyBYWFggSXMgd2luMzIgYXZhaWxhYmxlIG9uIFdpbmRvd3MgQ0UgPwotICAgICMKLSAgICAjIEFkYXB0ZWQgZnJvbSBjb2RlIHBvc3RlZCBieSBLYXJsIFB1dGxhbmQgdG8gY29tcC5sYW5nLnB5dGhvbi4KLSAgICAjCi0gICAgIyBUaGUgbWFwcGluZ3MgYmV0d2VlbiByZWcuIHZhbHVlcyBhbmQgcmVsZWFzZSBuYW1lcyBjYW4gYmUgZm91bmQKLSAgICAjIGhlcmU6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vbGlicmFyeS9lbi11cy9zeXNpbmZvL2Jhc2Uvb3N2ZXJzaW9uaW5mb19zdHIuYXNwCi0KLSAgICAjIEltcG9ydCB0aGUgbmVlZGVkIEFQSXMKLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCB3aW4zMmFwaQotICAgICAgICBmcm9tIHdpbjMyYXBpIGltcG9ydCBSZWdRdWVyeVZhbHVlRXgsIFJlZ09wZW5LZXlFeCwgXAotICAgICAgICAgICAgIFJlZ0Nsb3NlS2V5LCBHZXRWZXJzaW9uRXgKLSAgICAgICAgZnJvbSB3aW4zMmNvbiBpbXBvcnQgSEtFWV9MT0NBTF9NQUNISU5FLCBWRVJfUExBVEZPUk1fV0lOMzJfTlQsIFwKLSAgICAgICAgICAgICBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUywgVkVSX05UX1dPUktTVEFUSU9OCisgICAgICAgIGZyb20gd2lucmVnIGltcG9ydCBPcGVuS2V5RXgsIFF1ZXJ5VmFsdWVFeCwgQ2xvc2VLZXksIEhLRVlfTE9DQUxfTUFDSElORQogICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgIyBFbXVsYXRlIHRoZSB3aW4zMmFwaSBtb2R1bGUgdXNpbmcgUHl0aG9uIEFQSXMKKyAgICAgICAgZnJvbSBfd2lucmVnIGltcG9ydCBPcGVuS2V5RXgsIFF1ZXJ5VmFsdWVFeCwgQ2xvc2VLZXksIEhLRVlfTE9DQUxfTUFDSElORQorCisgICAgd2ludmVyID0gZ2V0d2luZG93c3ZlcnNpb24oKQorICAgIG1haiwgbWluLCBidWlsZCA9IF9nZXRfcmVhbF93aW52ZXIoKndpbnZlcls6M10pCisgICAgdmVyc2lvbiA9ICd7MH0uezF9LnsyfScuZm9ybWF0KG1haiwgbWluLCBidWlsZCkKKworICAgIHJlbGVhc2UgPSAoX1dJTjMyX0NMSUVOVF9SRUxFQVNFUy5nZXQoKG1haiwgbWluKSkgb3IKKyAgICAgICAgICAgICAgIF9XSU4zMl9DTElFTlRfUkVMRUFTRVMuZ2V0KChtYWosIE5vbmUpKSBvcgorICAgICAgICAgICAgICAgcmVsZWFzZSkKKworICAgICMgZ2V0d2luZG93c3ZlcnNpb24oKSByZWZsZWN0IHRoZSBjb21wYXRpYmlsaXR5IG1vZGUgUHl0aG9uIGlzCisgICAgIyBydW5uaW5nIHVuZGVyLCBhbmQgc28gdGhlIHNlcnZpY2UgcGFjayB2YWx1ZSBpcyBvbmx5IGdvaW5nIHRvIGJlCisgICAgIyB2YWxpZCBpZiB0aGUgdmVyc2lvbnMgbWF0Y2guCisgICAgaWYgd2ludmVyWzoyXSA9PSAobWFqLCBtaW4pOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuZ2V0d2luZG93c3ZlcnNpb24KKyAgICAgICAgICAgIGNzZCA9ICdTUHt9Jy5mb3JtYXQod2ludmVyLnNlcnZpY2VfcGFja19tYWpvcikKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgIyBObyBlbXVsYXRpb24gcG9zc2libGUsIHNvIHJldHVybiB0aGUgZGVmYXVsdHMuLi4KLSAgICAgICAgICAgIHJldHVybiByZWxlYXNlLHZlcnNpb24sY3NkLHB0eXBlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIEVtdWxhdGlvbiB1c2luZyB3aW5yZWcgKGFkZGVkIGluIFB5dGhvbiAyLjApIGFuZAotICAgICAgICAgICAgIyBzeXMuZ2V0d2luZG93c3ZlcnNpb24oKSAoYWRkZWQgaW4gUHl0aG9uIDIuMykKLSAgICAgICAgICAgIGltcG9ydCB3aW5yZWcKLSAgICAgICAgICAgIEdldFZlcnNpb25FeCA9IHN5cy5nZXR3aW5kb3dzdmVyc2lvbgotICAgICAgICAgICAgUmVnUXVlcnlWYWx1ZUV4ID0gd2lucmVnLlF1ZXJ5VmFsdWVFeAotICAgICAgICAgICAgUmVnT3BlbktleUV4ID0gd2lucmVnLk9wZW5LZXlFeAotICAgICAgICAgICAgUmVnQ2xvc2VLZXkgPSB3aW5yZWcuQ2xvc2VLZXkKLSAgICAgICAgICAgIEhLRVlfTE9DQUxfTUFDSElORSA9IHdpbnJlZy5IS0VZX0xPQ0FMX01BQ0hJTkUKLSAgICAgICAgICAgIFZFUl9QTEFURk9STV9XSU4zMl9XSU5ET1dTID0gMQotICAgICAgICAgICAgVkVSX1BMQVRGT1JNX1dJTjMyX05UID0gMgotICAgICAgICAgICAgVkVSX05UX1dPUktTVEFUSU9OID0gMQotICAgICAgICAgICAgVkVSX05UX1NFUlZFUiA9IDMKLSAgICAgICAgICAgIFJFR19TWiA9IDEKKyAgICAgICAgICAgIGlmIGNzZFs6MTNdID09ICdTZXJ2aWNlIFBhY2sgJzoKKyAgICAgICAgICAgICAgICBjc2QgPSAnU1AnICsgY3NkWzEzOl0KIAotICAgICMgRmluZCBvdXQgdGhlIHJlZ2lzdHJ5IGtleSBhbmQgc29tZSBnZW5lcmFsIHZlcnNpb24gaW5mb3MKLSAgICB3aW52ZXIgPSBHZXRWZXJzaW9uRXgoKQotICAgIG1haixtaW4sYnVpbGRubyxwbGF0LGNzZCA9IHdpbnZlcgotICAgIHZlcnNpb24gPSAnJWkuJWkuJWknICUgKG1haixtaW4sYnVpbGRubyAmIDB4RkZGRikKLSAgICBpZiBoYXNhdHRyKHdpbnZlciwgInNlcnZpY2VfcGFjayIpOgotICAgICAgICBpZiB3aW52ZXIuc2VydmljZV9wYWNrICE9ICIiOgotICAgICAgICAgICAgY3NkID0gJ1NQJXMnICUgd2ludmVyLnNlcnZpY2VfcGFja19tYWpvcgotICAgIGVsc2U6Ci0gICAgICAgIGlmIGNzZFs6MTNdID09ICdTZXJ2aWNlIFBhY2sgJzoKLSAgICAgICAgICAgIGNzZCA9ICdTUCcgKyBjc2RbMTM6XQorICAgICMgVkVSX05UX1NFUlZFUiA9IDMKKyAgICBpZiBnZXRhdHRyKHdpbnZlciwgJ3Byb2R1Y3RfdHlwZScsIE5vbmUpID09IDM6CisgICAgICAgIHJlbGVhc2UgPSAoX1dJTjMyX1NFUlZFUl9SRUxFQVNFUy5nZXQoKG1haiwgbWluKSkgb3IKKyAgICAgICAgICAgICAgICAgICBfV0lOMzJfU0VSVkVSX1JFTEVBU0VTLmdldCgobWFqLCBOb25lKSkgb3IKKyAgICAgICAgICAgICAgICAgICByZWxlYXNlKQogCi0gICAgaWYgcGxhdCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfV0lORE9XUzoKLSAgICAgICAgcmVna2V5ID0gJ1NPRlRXQVJFXFxNaWNyb3NvZnRcXFdpbmRvd3NcXEN1cnJlbnRWZXJzaW9uJwotICAgICAgICAjIFRyeSB0byBndWVzcyB0aGUgcmVsZWFzZSBuYW1lCi0gICAgICAgIGlmIG1haiA9PSA0OgotICAgICAgICAgICAgaWYgbWluID09IDA6Ci0gICAgICAgICAgICAgICAgcmVsZWFzZSA9ICc5NScKLSAgICAgICAgICAgIGVsaWYgbWluID09IDEwOgotICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAnOTgnCi0gICAgICAgICAgICBlbGlmIG1pbiA9PSA5MDoKLSAgICAgICAgICAgICAgICByZWxlYXNlID0gJ01lJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZWxlYXNlID0gJ3Bvc3RNZScKLSAgICAgICAgZWxpZiBtYWogPT0gNToKLSAgICAgICAgICAgIHJlbGVhc2UgPSAnMjAwMCcKLQotICAgIGVsaWYgcGxhdCA9PSBWRVJfUExBVEZPUk1fV0lOMzJfTlQ6Ci0gICAgICAgIHJlZ2tleSA9ICdTT0ZUV0FSRVxcTWljcm9zb2Z0XFxXaW5kb3dzIE5UXFxDdXJyZW50VmVyc2lvbicKLSAgICAgICAgaWYgbWFqIDw9IDQ6Ci0gICAgICAgICAgICByZWxlYXNlID0gJ05UJwotICAgICAgICBlbGlmIG1haiA9PSA1OgotICAgICAgICAgICAgaWYgbWluID09IDA6Ci0gICAgICAgICAgICAgICAgcmVsZWFzZSA9ICcyMDAwJwotICAgICAgICAgICAgZWxpZiBtaW4gPT0gMToKLSAgICAgICAgICAgICAgICByZWxlYXNlID0gJ1hQJwotICAgICAgICAgICAgZWxpZiBtaW4gPT0gMjoKLSAgICAgICAgICAgICAgICByZWxlYXNlID0gJzIwMDNTZXJ2ZXInCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAncG9zdDIwMDMnCi0gICAgICAgIGVsaWYgbWFqID09IDY6Ci0gICAgICAgICAgICBpZiBoYXNhdHRyKHdpbnZlciwgInByb2R1Y3RfdHlwZSIpOgotICAgICAgICAgICAgICAgIHByb2R1Y3RfdHlwZSA9IHdpbnZlci5wcm9kdWN0X3R5cGUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJvZHVjdF90eXBlID0gVkVSX05UX1dPUktTVEFUSU9OCi0gICAgICAgICAgICAgICAgIyBXaXRob3V0IGFuIE9TVkVSU0lPTklORk9FWCBjYXBhYmxlIHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpLAotICAgICAgICAgICAgICAgICMgb3IgaGVscCBmcm9tIHRoZSByZWdpc3RyeSwgd2UgY2Fubm90IHByb3Blcmx5IGlkZW50aWZ5Ci0gICAgICAgICAgICAgICAgIyBub24td29ya3N0YXRpb24gdmVyc2lvbnMuCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBrZXkgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCByZWdrZXkpCi0gICAgICAgICAgICAgICAgICAgIG5hbWUsIHR5cGUgPSBSZWdRdWVyeVZhbHVlRXgoa2V5LCAiUHJvZHVjdE5hbWUiKQotICAgICAgICAgICAgICAgICAgICAjIERpc2NhcmQgYW55IHR5cGUgdGhhdCBpc24ndCBSRUdfU1oKLSAgICAgICAgICAgICAgICAgICAgaWYgdHlwZSA9PSBSRUdfU1ogYW5kIG5hbWUuZmluZCgiU2VydmVyIikgIT0gLTE6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9kdWN0X3R5cGUgPSBWRVJfTlRfU0VSVkVSCi0gICAgICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgIyBVc2UgZGVmYXVsdCBvZiBWRVJfTlRfV09SS1NUQVRJT04KLSAgICAgICAgICAgICAgICAgICAgcGFzcwotCi0gICAgICAgICAgICBpZiBtaW4gPT0gMDoKLSAgICAgICAgICAgICAgICBpZiBwcm9kdWN0X3R5cGUgPT0gVkVSX05UX1dPUktTVEFUSU9OOgotICAgICAgICAgICAgICAgICAgICByZWxlYXNlID0gJ1Zpc3RhJwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAnMjAwOFNlcnZlcicKLSAgICAgICAgICAgIGVsaWYgbWluID09IDE6Ci0gICAgICAgICAgICAgICAgaWYgcHJvZHVjdF90eXBlID09IFZFUl9OVF9XT1JLU1RBVElPTjoKLSAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSA9ICc3JwotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgPSAnMjAwOFNlcnZlclIyJwotICAgICAgICAgICAgZWxpZiBtaW4gPT0gMjoKLSAgICAgICAgICAgICAgICBpZiBwcm9kdWN0X3R5cGUgPT0gVkVSX05UX1dPUktTVEFUSU9OOgotICAgICAgICAgICAgICAgICAgICByZWxlYXNlID0gJzgnCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmVsZWFzZSA9ICcyMDEyU2VydmVyJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByZWxlYXNlID0gJ3Bvc3QyMDEyU2VydmVyJwotCi0gICAgZWxzZToKLSAgICAgICAgaWYgbm90IHJlbGVhc2U6Ci0gICAgICAgICAgICAjIEUuZy4gV2luMy4xIHdpdGggd2luMzJzCi0gICAgICAgICAgICByZWxlYXNlID0gJyVpLiVpJyAlIChtYWosbWluKQotICAgICAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uLGNzZCxwdHlwZQotCi0gICAgIyBPcGVuIHRoZSByZWdpc3RyeSBrZXkKKyAgICBrZXkgPSBOb25lCiAgICAgdHJ5OgotICAgICAgICBrZXlDdXJWZXIgPSBSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLCByZWdrZXkpCi0gICAgICAgICMgR2V0IGEgdmFsdWUgdG8gbWFrZSBzdXJlIHRoZSBrZXkgZXhpc3RzLi4uCi0gICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeChrZXlDdXJWZXIsICdTeXN0ZW1Sb290JykKKyAgICAgICAga2V5ID0gT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHInU09GVFdBUkVcTWljcm9zb2Z0XFdpbmRvd3MgTlRcQ3VycmVudFZlcnNpb24nKQorICAgICAgICBwdHlwZSA9IFF1ZXJ5VmFsdWVFeChrZXksICdDdXJyZW50VHlwZScpWzBdCiAgICAgZXhjZXB0OgotICAgICAgICByZXR1cm4gcmVsZWFzZSx2ZXJzaW9uLGNzZCxwdHlwZQorICAgICAgICBwYXNzCisgICAgZmluYWxseToKKyAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgQ2xvc2VLZXkoa2V5KQogCi0gICAgIyBQYXJzZSB2YWx1ZXMKLSAgICAjc3VidmVyc2lvbiA9IF93aW4zMl9nZXR2YWx1ZShrZXlDdXJWZXIsCi0gICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU3ViVmVyc2lvbk51bWJlcicsCi0gICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJycsMSkpWzBdCi0gICAgI2lmIHN1YnZlcnNpb246Ci0gICAgIyAgIHJlbGVhc2UgPSByZWxlYXNlICsgc3VidmVyc2lvbiAjIDk1YSwgOTViLCBldGMuCi0gICAgYnVpbGQgPSBfd2luMzJfZ2V0dmFsdWUoa2V5Q3VyVmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDdXJyZW50QnVpbGROdW1iZXInLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnJywxKSlbMF0KLSAgICBwdHlwZSA9IF93aW4zMl9nZXR2YWx1ZShrZXlDdXJWZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAnQ3VycmVudFR5cGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB0eXBlLDEpKVswXQorICAgIHJldHVybiByZWxlYXNlLCB2ZXJzaW9uLCBjc2QsIHB0eXBlCiAKLSAgICAjIE5vcm1hbGl6ZSB2ZXJzaW9uCi0gICAgdmVyc2lvbiA9IF9ub3JtX3ZlcnNpb24odmVyc2lvbixidWlsZCkKLQotICAgICMgQ2xvc2Uga2V5Ci0gICAgUmVnQ2xvc2VLZXkoa2V5Q3VyVmVyKQotICAgIHJldHVybiByZWxlYXNlLHZlcnNpb24sY3NkLHB0eXBlCi0KLWRlZiBfbWFjX3Zlcl9sb29rdXAoc2VsZWN0b3JzLGRlZmF1bHQ9Tm9uZSk6Ci0KLSAgICBmcm9tIF9nZXN0YWx0IGltcG9ydCBnZXN0YWx0Ci0gICAgbCA9IFtdCi0gICAgYXBwZW5kID0gbC5hcHBlbmQKLSAgICBmb3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBhcHBlbmQoZ2VzdGFsdChzZWxlY3RvcikpCi0gICAgICAgIGV4Y2VwdCAoUnVudGltZUVycm9yLCBPU0Vycm9yKToKLSAgICAgICAgICAgIGFwcGVuZChkZWZhdWx0KQotICAgIHJldHVybiBsCi0KLWRlZiBfYmNkMnN0cihiY2QpOgotCi0gICAgcmV0dXJuIGhleChiY2QpWzI6XQotCi1kZWYgX21hY192ZXJfZ2VzdGFsdCgpOgotICAgICIiIgotICAgICAgICBUaGFua3MgdG8gTWFyayBSLiBMZXZpbnNvbiBmb3IgbWFpbGluZyBkb2N1bWVudGF0aW9uIGxpbmtzIGFuZAotICAgICAgICBjb2RlIGV4YW1wbGVzIGZvciB0aGlzIGZ1bmN0aW9uLiBEb2N1bWVudGF0aW9uIGZvciB0aGUKLSAgICAgICAgZ2VzdGFsdCgpIEFQSSBpcyBhdmFpbGFibGUgb25saW5lIGF0OgotCi0gICAgICAgICAgIGh0dHA6Ly93d3cucmdhcm9zLm5sL2dlc3RhbHQvCi0gICAgIiIiCi0gICAgIyBDaGVjayB3aGV0aGVyIHRoZSB2ZXJzaW9uIGluZm8gbW9kdWxlIGlzIGF2YWlsYWJsZQotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IF9nZXN0YWx0Ci0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICByZXR1cm4gTm9uZQotICAgICMgR2V0IHRoZSBpbmZvcwotICAgIHN5c3YsIHN5c2EgPSBfbWFjX3Zlcl9sb29rdXAoKCdzeXN2Jywnc3lzYScpKQotICAgICMgRGVjb2RlIHRoZSBpbmZvcwotICAgIGlmIHN5c3Y6Ci0gICAgICAgIG1ham9yID0gKHN5c3YgJiAweEZGMDApID4+IDgKLSAgICAgICAgbWlub3IgPSAoc3lzdiAmIDB4MDBGMCkgPj4gNAotICAgICAgICBwYXRjaCA9IChzeXN2ICYgMHgwMDBGKQotCi0gICAgICAgIGlmIChtYWpvciwgbWlub3IpID49ICgxMCwgNCk6Ci0gICAgICAgICAgICAjIHRoZSAnc3lzdicgZ2VzdGFsZCBjYW5ub3QgcmV0dXJuIHBhdGNobGV2ZWxzCi0gICAgICAgICAgICAjIGhpZ2hlciB0aGFuIDkuIEFwcGxlIGludHJvZHVjZWQgMyBuZXcKLSAgICAgICAgICAgICMgZ2VzdGFsdCBjb2RlcyBpbiAxMC40IHRvIGRlYWwgd2l0aCB0aGlzCi0gICAgICAgICAgICAjIGlzc3VlIChuZWVkZWQgYmVjYXVzZSBwYXRjaCBsZXZlbHMgY2FuCi0gICAgICAgICAgICAjIHJ1biBoaWdoZXIgdGhhbiA5LCBzdWNoIGFzIDEwLjQuMTEpCi0gICAgICAgICAgICBtYWpvcixtaW5vcixwYXRjaCA9IF9tYWNfdmVyX2xvb2t1cCgoJ3N5czEnLCdzeXMyJywnc3lzMycpKQotICAgICAgICAgICAgcmVsZWFzZSA9ICclaS4laS4laScgJShtYWpvciwgbWlub3IsIHBhdGNoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVsZWFzZSA9ICclcy4laS4laScgJSAoX2JjZDJzdHIobWFqb3IpLG1pbm9yLHBhdGNoKQotCi0gICAgaWYgc3lzYToKLSAgICAgICAgbWFjaGluZSA9IHsweDE6ICc2OGsnLAotICAgICAgICAgICAgICAgICAgIDB4MjogJ1Bvd2VyUEMnLAotICAgICAgICAgICAgICAgICAgIDB4YTogJ2kzODYnfS5nZXQoc3lzYSwnJykKLQotICAgIHZlcnNpb25pbmZvPSgnJywgJycsICcnKQotICAgIHJldHVybiByZWxlYXNlLHZlcnNpb25pbmZvLG1hY2hpbmUKIAogZGVmIF9tYWNfdmVyX3htbCgpOgogICAgIGZuID0gJy9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCcKQEAgLTcwOCwxOCArNjAzLDE5IEBACiAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICByZXR1cm4gTm9uZQogCi0gICAgcGwgPSBwbGlzdGxpYi5yZWFkUGxpc3QoZm4pCisgICAgd2l0aCBvcGVuKGZuLCAncmInKSBhcyBmOgorICAgICAgICBwbCA9IHBsaXN0bGliLmxvYWQoZikKICAgICByZWxlYXNlID0gcGxbJ1Byb2R1Y3RWZXJzaW9uJ10KLSAgICB2ZXJzaW9uaW5mbz0oJycsICcnLCAnJykKKyAgICB2ZXJzaW9uaW5mbyA9ICgnJywgJycsICcnKQogICAgIG1hY2hpbmUgPSBvcy51bmFtZSgpLm1hY2hpbmUKICAgICBpZiBtYWNoaW5lIGluICgncHBjJywgJ1Bvd2VyIE1hY2ludG9zaCcpOgotICAgICAgICAjIGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlIGdlc3RhbHQgYmFzZWQgY29kZQorICAgICAgICAjIENhbm9uaWNhbCBuYW1lCiAgICAgICAgIG1hY2hpbmUgPSAnUG93ZXJQQycKIAotICAgIHJldHVybiByZWxlYXNlLHZlcnNpb25pbmZvLG1hY2hpbmUKKyAgICByZXR1cm4gcmVsZWFzZSwgdmVyc2lvbmluZm8sIG1hY2hpbmUKIAogCi1kZWYgbWFjX3ZlcihyZWxlYXNlPScnLHZlcnNpb25pbmZvPSgnJywnJywnJyksbWFjaGluZT0nJyk6CitkZWYgbWFjX3ZlcihyZWxlYXNlPScnLCB2ZXJzaW9uaW5mbz0oJycsICcnLCAnJyksIG1hY2hpbmU9JycpOgogCiAgICAgIiIiIEdldCBNYWNPUyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCByZXR1cm4gaXQgYXMgdHVwbGUgKHJlbGVhc2UsCiAgICAgICAgIHZlcnNpb25pbmZvLCBtYWNoaW5lKSB3aXRoIHZlcnNpb25pbmZvIGJlaW5nIGEgdHVwbGUgKHZlcnNpb24sCkBAIC03MzUsMTYgKzYzMSwxMCBAQAogICAgIGlmIGluZm8gaXMgbm90IE5vbmU6CiAgICAgICAgIHJldHVybiBpbmZvCiAKLSAgICAjIElmIHRoYXQgZG9lc24ndCB3b3JrIGZvciBzb21lIHJlYXNvbiBmYWxsIGJhY2sgdG8gcmVhZGluZyB0aGUKLSAgICAjIGluZm9ybWF0aW9uIHVzaW5nIGdlc3RhbHQgY2FsbHMuCi0gICAgaW5mbyA9IF9tYWNfdmVyX2dlc3RhbHQoKQotICAgIGlmIGluZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgIHJldHVybiBpbmZvCi0KICAgICAjIElmIHRoYXQgYWxzbyBkb2Vzbid0IHdvcmsgcmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlcwotICAgIHJldHVybiByZWxlYXNlLHZlcnNpb25pbmZvLG1hY2hpbmUKKyAgICByZXR1cm4gcmVsZWFzZSwgdmVyc2lvbmluZm8sIG1hY2hpbmUKIAotZGVmIF9qYXZhX2dldHByb3AobmFtZSxkZWZhdWx0KToKK2RlZiBfamF2YV9nZXRwcm9wKG5hbWUsIGRlZmF1bHQpOgogCiAgICAgZnJvbSBqYXZhLmxhbmcgaW1wb3J0IFN5c3RlbQogICAgIHRyeToKQEAgLTc1NSwxMyArNjQ1LDEzIEBACiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICByZXR1cm4gZGVmYXVsdAogCi1kZWYgamF2YV92ZXIocmVsZWFzZT0nJyx2ZW5kb3I9Jycsdm1pbmZvPSgnJywnJywnJyksb3NpbmZvPSgnJywnJywnJykpOgorZGVmIGphdmFfdmVyKHJlbGVhc2U9JycsIHZlbmRvcj0nJywgdm1pbmZvPSgnJywgJycsICcnKSwgb3NpbmZvPSgnJywgJycsICcnKSk6CiAKICAgICAiIiIgVmVyc2lvbiBpbnRlcmZhY2UgZm9yIEp5dGhvbi4KIAotICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKHJlbGVhc2UsdmVuZG9yLHZtaW5mbyxvc2luZm8pIHdpdGggdm1pbmZvIGJlaW5nCi0gICAgICAgIGEgdHVwbGUgKHZtX25hbWUsdm1fcmVsZWFzZSx2bV92ZW5kb3IpIGFuZCBvc2luZm8gYmVpbmcgYQotICAgICAgICB0dXBsZSAob3NfbmFtZSxvc192ZXJzaW9uLG9zX2FyY2gpLgorICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKHJlbGVhc2UsIHZlbmRvciwgdm1pbmZvLCBvc2luZm8pIHdpdGggdm1pbmZvIGJlaW5nCisgICAgICAgIGEgdHVwbGUgKHZtX25hbWUsIHZtX3JlbGVhc2UsIHZtX3ZlbmRvcikgYW5kIG9zaW5mbyBiZWluZyBhCisgICAgICAgIHR1cGxlIChvc19uYW1lLCBvc192ZXJzaW9uLCBvc19hcmNoKS4KIAogICAgICAgICBWYWx1ZXMgd2hpY2ggY2Fubm90IGJlIGRldGVybWluZWQgYXJlIHNldCB0byB0aGUgZGVmYXVsdHMKICAgICAgICAgZ2l2ZW4gYXMgcGFyYW1ldGVycyAod2hpY2ggYWxsIGRlZmF1bHQgdG8gJycpLgpAQCAtNzcxLDcgKzY2MSw3IEBACiAgICAgdHJ5OgogICAgICAgICBpbXBvcnQgamF2YS5sYW5nCiAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICByZXR1cm4gcmVsZWFzZSx2ZW5kb3Isdm1pbmZvLG9zaW5mbworICAgICAgICByZXR1cm4gcmVsZWFzZSwgdmVuZG9yLCB2bWluZm8sIG9zaW5mbwogCiAgICAgdmVuZG9yID0gX2phdmFfZ2V0cHJvcCgnamF2YS52ZW5kb3InLCB2ZW5kb3IpCiAgICAgcmVsZWFzZSA9IF9qYXZhX2dldHByb3AoJ2phdmEudmVyc2lvbicsIHJlbGVhc2UpCkBAIC03OTAsOSArNjgwLDkgQEAKIAogIyMjIFN5c3RlbSBuYW1lIGFsaWFzaW5nCiAKLWRlZiBzeXN0ZW1fYWxpYXMoc3lzdGVtLHJlbGVhc2UsdmVyc2lvbik6CitkZWYgc3lzdGVtX2FsaWFzKHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbik6CiAKLSAgICAiIiIgUmV0dXJucyAoc3lzdGVtLHJlbGVhc2UsdmVyc2lvbikgYWxpYXNlZCB0byBjb21tb24KKyAgICAiIiIgUmV0dXJucyAoc3lzdGVtLCByZWxlYXNlLCB2ZXJzaW9uKSBhbGlhc2VkIHRvIGNvbW1vbgogICAgICAgICBtYXJrZXRpbmcgbmFtZXMgdXNlZCBmb3Igc29tZSBzeXN0ZW1zLgogCiAgICAgICAgIEl0IGFsc28gZG9lcyBzb21lIHJlb3JkZXJpbmcgb2YgdGhlIGluZm9ybWF0aW9uIGluIHNvbWUgY2FzZXMKQEAgLTgwMiwxMyArNjkyLDEzIEBACiAgICAgaWYgc3lzdGVtID09ICdSaGFwc29keSc6CiAgICAgICAgICMgQXBwbGUncyBCU0QgZGVyaXZhdGl2ZQogICAgICAgICAjIFhYWCBIb3cgY2FuIHdlIGRldGVybWluZSB0aGUgbWFya2V0aW5nIHJlbGVhc2UgbnVtYmVyID8KLSAgICAgICAgcmV0dXJuICdNYWNPUyBYIFNlcnZlcicsc3lzdGVtK3JlbGVhc2UsdmVyc2lvbgorICAgICAgICByZXR1cm4gJ01hY09TIFggU2VydmVyJywgc3lzdGVtK3JlbGVhc2UsIHZlcnNpb24KIAogICAgIGVsaWYgc3lzdGVtID09ICdTdW5PUyc6CiAgICAgICAgICMgU3VuJ3MgT1MKICAgICAgICAgaWYgcmVsZWFzZSA8ICc1JzoKICAgICAgICAgICAgICMgVGhlc2UgcmVsZWFzZXMgdXNlIHRoZSBvbGQgbmFtZSBTdW5PUwotICAgICAgICAgICAgcmV0dXJuIHN5c3RlbSxyZWxlYXNlLHZlcnNpb24KKyAgICAgICAgICAgIHJldHVybiBzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24KICAgICAgICAgIyBNb2RpZnkgcmVsZWFzZSAobWFya2V0aW5nIHJlbGVhc2UgPSBTdW5PUyByZWxlYXNlIC0gMykKICAgICAgICAgbCA9IHJlbGVhc2Uuc3BsaXQoJy4nKQogICAgICAgICBpZiBsOgpAQCAtODM2LDExICs3MjYsMTEgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHZlcnNpb24gPSAnNjRiaXQnCiAKLSAgICBlbGlmIHN5c3RlbSBpbiAoJ3dpbjMyJywnd2luMTYnKToKKyAgICBlbGlmIHN5c3RlbSBpbiAoJ3dpbjMyJywgJ3dpbjE2Jyk6CiAgICAgICAgICMgSW4gY2FzZSBvbmUgb2YgdGhlIG90aGVyIHRyaWNrcwogICAgICAgICBzeXN0ZW0gPSAnV2luZG93cycKIAotICAgIHJldHVybiBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uCisgICAgcmV0dXJuIHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbgogCiAjIyMgVmFyaW91cyBpbnRlcm5hbCBoZWxwZXJzCiAKQEAgLTg1MywyMSArNzQzLDIxIEBACiAgICAgcGxhdGZvcm0gPSAnLScuam9pbih4LnN0cmlwKCkgZm9yIHggaW4gZmlsdGVyKGxlbiwgYXJncykpCiAKICAgICAjIENsZWFudXAgc29tZSBwb3NzaWJsZSBmaWxlbmFtZSBvYnN0YWNsZXMuLi4KLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJyAnLCdfJykKLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJy8nLCctJykKLSAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJ1xcJywnLScpCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCc6JywnLScpCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCc7JywnLScpCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCciJywnLScpCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcoJywnLScpCi0gICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcpJywnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCcgJywgJ18nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnLycsICctJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJ1xcJywgJy0nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnOicsICctJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJzsnLCAnLScpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCciJywgJy0nKQorICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgnKCcsICctJykKKyAgICBwbGF0Zm9ybSA9IHBsYXRmb3JtLnJlcGxhY2UoJyknLCAnLScpCiAKICAgICAjIE5vIG5lZWQgdG8gcmVwb3J0ICd1bmtub3duJyBpbmZvcm1hdGlvbi4uLgotICAgIHBsYXRmb3JtID0gcGxhdGZvcm0ucmVwbGFjZSgndW5rbm93bicsJycpCisgICAgcGxhdGZvcm0gPSBwbGF0Zm9ybS5yZXBsYWNlKCd1bmtub3duJywgJycpCiAKICAgICAjIEZvbGQgJy0tJ3MgYW5kIHJlbW92ZSB0cmFpbGluZyAnLScKICAgICB3aGlsZSAxOgotICAgICAgICBjbGVhbmVkID0gcGxhdGZvcm0ucmVwbGFjZSgnLS0nLCctJykKKyAgICAgICAgY2xlYW5lZCA9IHBsYXRmb3JtLnJlcGxhY2UoJy0tJywgJy0nKQogICAgICAgICBpZiBjbGVhbmVkID09IHBsYXRmb3JtOgogICAgICAgICAgICAgYnJlYWsKICAgICAgICAgcGxhdGZvcm0gPSBjbGVhbmVkCkBAIC04ODcsNyArNzc3LDcgQEAKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBzb2NrZXQuZ2V0aG9zdG5hbWUoKQotICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICMgU3RpbGwgbm90IHdvcmtpbmcuLi4KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKIApAQCAtODk5LDE5ICs3ODksMTkgQEAKICAgICBmaWxlcGF0aCA9IG9zLnBhdGguYWJzcGF0aChmaWxlcGF0aCkKICAgICB3aGlsZSBvcy5wYXRoLmlzbGluayhmaWxlcGF0aCk6CiAgICAgICAgIGZpbGVwYXRoID0gb3MucGF0aC5ub3JtcGF0aCgKLSAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoZmlsZXBhdGgpLG9zLnJlYWRsaW5rKGZpbGVwYXRoKSkpCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKGZpbGVwYXRoKSwgb3MucmVhZGxpbmsoZmlsZXBhdGgpKSkKICAgICByZXR1cm4gZmlsZXBhdGgKIAotZGVmIF9zeXNjbWRfdW5hbWUob3B0aW9uLGRlZmF1bHQ9JycpOgorZGVmIF9zeXNjbWRfdW5hbWUob3B0aW9uLCBkZWZhdWx0PScnKToKIAogICAgICIiIiBJbnRlcmZhY2UgdG8gdGhlIHN5c3RlbSdzIHVuYW1lIGNvbW1hbmQuCiAgICAgIiIiCi0gICAgaWYgc3lzLnBsYXRmb3JtIGluICgnZG9zJywnd2luMzInLCd3aW4xNicsJ29zMicpOgorICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsICd3aW4zMicsICd3aW4xNicpOgogICAgICAgICAjIFhYWCBPdGhlcnMgdG9vID8KICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICB0cnk6CiAgICAgICAgIGYgPSBvcy5wb3BlbigndW5hbWUgJXMgMj4gJXMnICUgKG9wdGlvbiwgREVWX05VTEwpKQotICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3Isb3MuZXJyb3IpOgorICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICByZXR1cm4gZGVmYXVsdAogICAgIG91dHB1dCA9IGYucmVhZCgpLnN0cmlwKCkKICAgICByYyA9IGYuY2xvc2UoKQpAQCAtOTIwLDcgKzgxMCw3IEBACiAgICAgZWxzZToKICAgICAgICAgcmV0dXJuIG91dHB1dAogCi1kZWYgX3N5c2NtZF9maWxlKHRhcmdldCxkZWZhdWx0PScnKToKK2RlZiBfc3lzY21kX2ZpbGUodGFyZ2V0LCBkZWZhdWx0PScnKToKIAogICAgICIiIiBJbnRlcmZhY2UgdG8gdGhlIHN5c3RlbSdzIGZpbGUgY29tbWFuZC4KIApAQCAtOTI5LDcgKzgxOSw3IEBACiAgICAgICAgIGRlZmF1bHQgaW4gY2FzZSB0aGUgY29tbWFuZCBzaG91bGQgZmFpbC4KIAogICAgICIiIgotICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ2RvcycsJ3dpbjMyJywnd2luMTYnLCdvczInKToKKyAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdkb3MnLCAnd2luMzInLCAnd2luMTYnKToKICAgICAgICAgIyBYWFggT3RoZXJzIHRvbyA/CiAgICAgICAgIHJldHVybiBkZWZhdWx0CiAgICAgdGFyZ2V0ID0gX2ZvbGxvd19zeW1saW5rcyh0YXJnZXQpCkBAIC05MzcsNyArODI3LDcgQEAKICAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oWydmaWxlJywgdGFyZ2V0XSwKICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCiAKLSAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLG9zLmVycm9yKToKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcmV0dXJuIGRlZmF1bHQKICAgICBvdXRwdXQgPSBwcm9jLmNvbW11bmljYXRlKClbMF0uZGVjb2RlKCdsYXRpbi0xJykKICAgICByYyA9IHByb2Mud2FpdCgpCkBAIC05NTEsMTcgKzg0MSwxNyBAQAogIyBEZWZhdWx0IHZhbHVlcyBmb3IgYXJjaGl0ZWN0dXJlOyBub24tZW1wdHkgc3RyaW5ncyBvdmVycmlkZSB0aGUKICMgZGVmYXVsdHMgZ2l2ZW4gYXMgcGFyYW1ldGVycwogX2RlZmF1bHRfYXJjaGl0ZWN0dXJlID0gewotICAgICd3aW4zMic6ICgnJywnV2luZG93c1BFJyksCi0gICAgJ3dpbjE2JzogKCcnLCdXaW5kb3dzJyksCi0gICAgJ2Rvcyc6ICgnJywnTVNET1MnKSwKKyAgICAnd2luMzInOiAoJycsICdXaW5kb3dzUEUnKSwKKyAgICAnd2luMTYnOiAoJycsICdXaW5kb3dzJyksCisgICAgJ2Rvcyc6ICgnJywgJ01TRE9TJyksCiB9CiAKLWRlZiBhcmNoaXRlY3R1cmUoZXhlY3V0YWJsZT1zeXMuZXhlY3V0YWJsZSxiaXRzPScnLGxpbmthZ2U9JycpOgorZGVmIGFyY2hpdGVjdHVyZShleGVjdXRhYmxlPXN5cy5leGVjdXRhYmxlLCBiaXRzPScnLCBsaW5rYWdlPScnKToKIAogICAgICIiIiBRdWVyaWVzIHRoZSBnaXZlbiBleGVjdXRhYmxlIChkZWZhdWx0cyB0byB0aGUgUHl0aG9uIGludGVycHJldGVyCiAgICAgICAgIGJpbmFyeSkgZm9yIHZhcmlvdXMgYXJjaGl0ZWN0dXJlIGluZm9ybWF0aW9uLgogCi0gICAgICAgIFJldHVybnMgYSB0dXBsZSAoYml0cyxsaW5rYWdlKSB3aGljaCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dAorICAgICAgICBSZXR1cm5zIGEgdHVwbGUgKGJpdHMsIGxpbmthZ2UpIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0CiAgICAgICAgIHRoZSBiaXQgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgbGlua2FnZSBmb3JtYXQgdXNlZCBmb3IgdGhlCiAgICAgICAgIGV4ZWN1dGFibGUuIEJvdGggdmFsdWVzIGFyZSByZXR1cm5lZCBhcyBzdHJpbmdzLgogCkBAIC05OTksMTYgKzg4OSwxNiBAQAogICAgICAgICAjICJmaWxlIiBjb21tYW5kIGRpZCBub3QgcmV0dXJuIGFueXRoaW5nOyB3ZSdsbCB0cnkgdG8gcHJvdmlkZQogICAgICAgICAjIHNvbWUgc2Vuc2libGUgZGVmYXVsdHMgdGhlbi4uLgogICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gX2RlZmF1bHRfYXJjaGl0ZWN0dXJlOgotICAgICAgICAgICAgYixsID0gX2RlZmF1bHRfYXJjaGl0ZWN0dXJlW3N5cy5wbGF0Zm9ybV0KKyAgICAgICAgICAgIGIsIGwgPSBfZGVmYXVsdF9hcmNoaXRlY3R1cmVbc3lzLnBsYXRmb3JtXQogICAgICAgICAgICAgaWYgYjoKICAgICAgICAgICAgICAgICBiaXRzID0gYgogICAgICAgICAgICAgaWYgbDoKICAgICAgICAgICAgICAgICBsaW5rYWdlID0gbAotICAgICAgICByZXR1cm4gYml0cyxsaW5rYWdlCisgICAgICAgIHJldHVybiBiaXRzLCBsaW5rYWdlCiAKICAgICBpZiAnZXhlY3V0YWJsZScgbm90IGluIGZpbGVvdXQ6CiAgICAgICAgICMgRm9ybWF0IG5vdCBzdXBwb3J0ZWQKLSAgICAgICAgcmV0dXJuIGJpdHMsbGlua2FnZQorICAgICAgICByZXR1cm4gYml0cywgbGlua2FnZQogCiAgICAgIyBCaXRzCiAgICAgaWYgJzMyLWJpdCcgaW4gZmlsZW91dDoKQEAgLTEwMzYsNyArOTI2LDcgQEAKICAgICAgICAgIyBYWFggdGhlIEEuT1VUIGZvcm1hdCBhbHNvIGZhbGxzIHVuZGVyIHRoaXMgY2xhc3MuLi4KICAgICAgICAgcGFzcwogCi0gICAgcmV0dXJuIGJpdHMsbGlua2FnZQorICAgIHJldHVybiBiaXRzLCBsaW5rYWdlCiAKICMjIyBQb3J0YWJsZSB1bmFtZSgpIGludGVyZmFjZQogCkBAIC0xMDQ4LDcgKzkzOCw3IEBACiBkZWYgdW5hbWUoKToKIAogICAgICIiIiBGYWlybHkgcG9ydGFibGUgdW5hbWUgaW50ZXJmYWNlLiBSZXR1cm5zIGEgdHVwbGUKLSAgICAgICAgb2Ygc3RyaW5ncyAoc3lzdGVtLG5vZGUscmVsZWFzZSx2ZXJzaW9uLG1hY2hpbmUscHJvY2Vzc29yKQorICAgICAgICBvZiBzdHJpbmdzIChzeXN0ZW0sIG5vZGUsIHJlbGVhc2UsIHZlcnNpb24sIG1hY2hpbmUsIHByb2Nlc3NvcikKICAgICAgICAgaWRlbnRpZnlpbmcgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm0uCiAKICAgICAgICAgTm90ZSB0aGF0IHVubGlrZSB0aGUgb3MudW5hbWUgZnVuY3Rpb24gdGhpcyBhbHNvIHJldHVybnMKQEAgLTEwNjcsNyArOTU3LDcgQEAKIAogICAgICMgR2V0IHNvbWUgaW5mb3MgZnJvbSB0aGUgYnVpbHRpbiBvcy51bmFtZSBBUEkuLi4KICAgICB0cnk6Ci0gICAgICAgIHN5c3RlbSxub2RlLHJlbGVhc2UsdmVyc2lvbixtYWNoaW5lID0gb3MudW5hbWUoKQorICAgICAgICBzeXN0ZW0sIG5vZGUsIHJlbGVhc2UsIHZlcnNpb24sIG1hY2hpbmUgPSBvcy51bmFtZSgpCiAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICBub19vc191bmFtZSA9IDEKIApAQCAtMTA4NSw3ICs5NzUsNyBAQAogCiAgICAgICAgICMgVHJ5IHdpbjMyX3ZlcigpIG9uIHdpbjMyIHBsYXRmb3JtcwogICAgICAgICBpZiBzeXN0ZW0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIHJlbGVhc2UsdmVyc2lvbixjc2QscHR5cGUgPSB3aW4zMl92ZXIoKQorICAgICAgICAgICAgcmVsZWFzZSwgdmVyc2lvbiwgY3NkLCBwdHlwZSA9IHdpbjMyX3ZlcigpCiAgICAgICAgICAgICBpZiByZWxlYXNlIGFuZCB2ZXJzaW9uOgogICAgICAgICAgICAgICAgIHVzZV9zeXNjbWRfdmVyID0gMAogICAgICAgICAgICAgIyBUcnkgdG8gdXNlIHRoZSBQUk9DRVNTT1JfKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMKQEAgLTExMDQsNyArOTk0LDcgQEAKICAgICAgICAgIyBUcnkgdGhlICd2ZXInIHN5c3RlbSBjb21tYW5kIGF2YWlsYWJsZSBvbiBzb21lCiAgICAgICAgICMgcGxhdGZvcm1zCiAgICAgICAgIGlmIHVzZV9zeXNjbWRfdmVyOgotICAgICAgICAgICAgc3lzdGVtLHJlbGVhc2UsdmVyc2lvbiA9IF9zeXNjbWRfdmVyKHN5c3RlbSkKKyAgICAgICAgICAgIHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbiA9IF9zeXNjbWRfdmVyKHN5c3RlbSkKICAgICAgICAgICAgICMgTm9ybWFsaXplIHN5c3RlbSB0byB3aGF0IHdpbjMyX3ZlcigpIG5vcm1hbGx5IHJldHVybnMKICAgICAgICAgICAgICMgKF9zeXNjbWRfdmVyKCkgdGVuZHMgdG8gcmV0dXJuIHRoZSB2ZW5kb3IgbmFtZSBhcyB3ZWxsKQogICAgICAgICAgICAgaWYgc3lzdGVtID09ICdNaWNyb3NvZnQgV2luZG93cyc6CkBAIC0xMTIyLDcgKzEwMTIsNyBAQAogCiAgICAgICAgICMgSW4gY2FzZSB3ZSBzdGlsbCBkb24ndCBrbm93IGFueXRoaW5nIHVzZWZ1bCwgd2UnbGwgdHJ5IHRvCiAgICAgICAgICMgaGVscCBvdXJzZWx2ZXMKLSAgICAgICAgaWYgc3lzdGVtIGluICgnd2luMzInLCd3aW4xNicpOgorICAgICAgICBpZiBzeXN0ZW0gaW4gKCd3aW4zMicsICd3aW4xNicpOgogICAgICAgICAgICAgaWYgbm90IHZlcnNpb246CiAgICAgICAgICAgICAgICAgaWYgc3lzdGVtID09ICd3aW4zMic6CiAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24gPSAnMzJiaXQnCkBAIC0xMTMxLDcgKzEwMjEsNyBAQAogICAgICAgICAgICAgc3lzdGVtID0gJ1dpbmRvd3MnCiAKICAgICAgICAgZWxpZiBzeXN0ZW1bOjRdID09ICdqYXZhJzoKLSAgICAgICAgICAgIHJlbGVhc2UsdmVuZG9yLHZtaW5mbyxvc2luZm8gPSBqYXZhX3ZlcigpCisgICAgICAgICAgICByZWxlYXNlLCB2ZW5kb3IsIHZtaW5mbywgb3NpbmZvID0gamF2YV92ZXIoKQogICAgICAgICAgICAgc3lzdGVtID0gJ0phdmEnCiAgICAgICAgICAgICB2ZXJzaW9uID0gJywgJy5qb2luKHZtaW5mbykKICAgICAgICAgICAgIGlmIG5vdCB2ZXJzaW9uOgpAQCAtMTE0OSwxNCArMTAzOSwxNCBAQAogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjc2lkLCBjcHVfbnVtYmVyID0gdm1zX2xpYi5nZXRzeWkoJ1NZSSRfQ1BVJywwKQorICAgICAgICAgICAgY3NpZCwgY3B1X251bWJlciA9IHZtc19saWIuZ2V0c3lpKCdTWUkkX0NQVScsIDApCiAgICAgICAgICAgICBpZiAoY3B1X251bWJlciA+PSAxMjgpOgogICAgICAgICAgICAgICAgIHByb2Nlc3NvciA9ICdBbHBoYScKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcHJvY2Vzc29yID0gJ1ZBWCcKICAgICBpZiBub3QgcHJvY2Vzc29yOgogICAgICAgICAjIEdldCBwcm9jZXNzb3IgaW5mb3JtYXRpb24gZnJvbSB0aGUgdW5hbWUgc3lzdGVtIGNvbW1hbmQKLSAgICAgICAgcHJvY2Vzc29yID0gX3N5c2NtZF91bmFtZSgnLXAnLCcnKQorICAgICAgICBwcm9jZXNzb3IgPSBfc3lzY21kX3VuYW1lKCctcCcsICcnKQogCiAgICAgI0lmIGFueSB1bmtub3ducyBzdGlsbCBleGlzdCwgcmVwbGFjZSB0aGVtIHdpdGggJydzLCB3aGljaCBhcmUgbW9yZSBwb3J0YWJsZQogICAgIGlmIHN5c3RlbSA9PSAndW5rbm93bic6CkBAIC0xMTc3LDcgKzEwNjcsOCBAQAogICAgICAgICBzeXN0ZW0gPSAnV2luZG93cycKICAgICAgICAgcmVsZWFzZSA9ICdWaXN0YScKIAotICAgIF91bmFtZV9jYWNoZSA9IHVuYW1lX3Jlc3VsdChzeXN0ZW0sbm9kZSxyZWxlYXNlLHZlcnNpb24sbWFjaGluZSxwcm9jZXNzb3IpCisgICAgX3VuYW1lX2NhY2hlID0gdW5hbWVfcmVzdWx0KHN5c3RlbSwgbm9kZSwgcmVsZWFzZSwgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZSwgcHJvY2Vzc29yKQogICAgIHJldHVybiBfdW5hbWVfY2FjaGUKIAogIyMjIERpcmVjdCBpbnRlcmZhY2VzIHRvIHNvbWUgb2YgdGhlIHVuYW1lKCkgcmV0dXJuIHZhbHVlcwpAQCAtMTQ3NCw1NyArMTM2NSw1OCBAQAogCiAgICAgIyBHZXQgdW5hbWUgaW5mb3JtYXRpb24gYW5kIHRoZW4gYXBwbHkgcGxhdGZvcm0gc3BlY2lmaWMgY29zbWV0aWNzCiAgICAgIyB0byBpdC4uLgotICAgIHN5c3RlbSxub2RlLHJlbGVhc2UsdmVyc2lvbixtYWNoaW5lLHByb2Nlc3NvciA9IHVuYW1lKCkKKyAgICBzeXN0ZW0sIG5vZGUsIHJlbGVhc2UsIHZlcnNpb24sIG1hY2hpbmUsIHByb2Nlc3NvciA9IHVuYW1lKCkKICAgICBpZiBtYWNoaW5lID09IHByb2Nlc3NvcjoKICAgICAgICAgcHJvY2Vzc29yID0gJycKICAgICBpZiBhbGlhc2VkOgotICAgICAgICBzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uID0gc3lzdGVtX2FsaWFzKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24pCisgICAgICAgIHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbiA9IHN5c3RlbV9hbGlhcyhzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24pCiAKICAgICBpZiBzeXN0ZW0gPT0gJ1dpbmRvd3MnOgogICAgICAgICAjIE1TIHBsYXRmb3JtcwotICAgICAgICByZWwsdmVycyxjc2QscHR5cGUgPSB3aW4zMl92ZXIodmVyc2lvbikKKyAgICAgICAgcmVsLCB2ZXJzLCBjc2QsIHB0eXBlID0gd2luMzJfdmVyKHZlcnNpb24pCiAgICAgICAgIGlmIHRlcnNlOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSx2ZXJzaW9uLGNzZCkKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbiwgY3NkKQogCiAgICAgZWxpZiBzeXN0ZW0gaW4gKCdMaW51eCcsKToKICAgICAgICAgIyBMaW51eCBiYXNlZCBzeXN0ZW1zCi0gICAgICAgIGRpc3RuYW1lLGRpc3R2ZXJzaW9uLGRpc3RpZCA9IGRpc3QoJycpCisgICAgICAgIGRpc3RuYW1lLCBkaXN0dmVyc2lvbiwgZGlzdGlkID0gZGlzdCgnJykKICAgICAgICAgaWYgZGlzdG5hbWUgYW5kIG5vdCB0ZXJzZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLG1hY2hpbmUscHJvY2Vzc29yLAorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlLCBtYWNoaW5lLCBwcm9jZXNzb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2l0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0bmFtZSxkaXN0dmVyc2lvbixkaXN0aWQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXN0bmFtZSwgZGlzdHZlcnNpb24sIGRpc3RpZCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgSWYgdGhlIGRpc3RyaWJ1dGlvbiBuYW1lIGlzIHVua25vd24gY2hlY2sgZm9yIGxpYmMgdnMuIGdsaWJjCi0gICAgICAgICAgICBsaWJjbmFtZSxsaWJjdmVyc2lvbiA9IGxpYmNfdmVyKHN5cy5leGVjdXRhYmxlKQotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UsbWFjaGluZSxwcm9jZXNzb3IsCisgICAgICAgICAgICBsaWJjbmFtZSwgbGliY3ZlcnNpb24gPSBsaWJjX3ZlcihzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSwgbWFjaGluZSwgcHJvY2Vzc29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpdGgnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliY25hbWUrbGliY3ZlcnNpb24pCiAgICAgZWxpZiBzeXN0ZW0gPT0gJ0phdmEnOgogICAgICAgICAjIEphdmEgcGxhdGZvcm1zCi0gICAgICAgIHIsdix2bWluZm8sKG9zX25hbWUsb3NfdmVyc2lvbixvc19hcmNoKSA9IGphdmFfdmVyKCkKKyAgICAgICAgciwgdiwgdm1pbmZvLCAob3NfbmFtZSwgb3NfdmVyc2lvbiwgb3NfYXJjaCkgPSBqYXZhX3ZlcigpCiAgICAgICAgIGlmIHRlcnNlIG9yIG5vdCBvc19uYW1lOgotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UsdmVyc2lvbikKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSwgdmVyc2lvbikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLHZlcnNpb24sCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIHZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NfbmFtZSxvc192ZXJzaW9uLG9zX2FyY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvc19uYW1lLCBvc192ZXJzaW9uLCBvc19hcmNoKQogCiAgICAgZWxpZiBzeXN0ZW0gPT0gJ01hY09TJzoKICAgICAgICAgIyBNYWNPUyBwbGF0Zm9ybXMKICAgICAgICAgaWYgdGVyc2U6Ci0gICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0scmVsZWFzZSkKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlLG1hY2hpbmUpCisgICAgICAgICAgICBwbGF0Zm9ybSA9IF9wbGF0Zm9ybShzeXN0ZW0sIHJlbGVhc2UsIG1hY2hpbmUpCiAKICAgICBlbHNlOgogICAgICAgICAjIEdlbmVyaWMgaGFuZGxlcgogICAgICAgICBpZiB0ZXJzZToKLSAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSxyZWxlYXNlKQorICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLCByZWxlYXNlKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgYml0cyxsaW5rYWdlID0gYXJjaGl0ZWN0dXJlKHN5cy5leGVjdXRhYmxlKQotICAgICAgICAgICAgcGxhdGZvcm0gPSBfcGxhdGZvcm0oc3lzdGVtLHJlbGVhc2UsbWFjaGluZSxwcm9jZXNzb3IsYml0cyxsaW5rYWdlKQorICAgICAgICAgICAgYml0cywgbGlua2FnZSA9IGFyY2hpdGVjdHVyZShzeXMuZXhlY3V0YWJsZSkKKyAgICAgICAgICAgIHBsYXRmb3JtID0gX3BsYXRmb3JtKHN5c3RlbSwgcmVsZWFzZSwgbWFjaGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NvciwgYml0cywgbGlua2FnZSkKIAogICAgIF9wbGF0Zm9ybV9jYWNoZVsoYWxpYXNlZCwgdGVyc2UpXSA9IHBsYXRmb3JtCiAgICAgcmV0dXJuIHBsYXRmb3JtCkBAIC0xNTM1LDUgKzE0MjcsNSBAQAogICAgICMgRGVmYXVsdCBpcyB0byBwcmludCB0aGUgYWxpYXNlZCB2ZXJib3NlIHBsYXRmb3JtIHN0cmluZwogICAgIHRlcnNlID0gKCd0ZXJzZScgaW4gc3lzLmFyZ3Ygb3IgJy0tdGVyc2UnIGluIHN5cy5hcmd2KQogICAgIGFsaWFzZWQgPSAobm90ICdub25hbGlhc2VkJyBpbiBzeXMuYXJndiBhbmQgbm90ICctLW5vbmFsaWFzZWQnIGluIHN5cy5hcmd2KQotICAgIHByaW50KHBsYXRmb3JtKGFsaWFzZWQsdGVyc2UpKQorICAgIHByaW50KHBsYXRmb3JtKGFsaWFzZWQsIHRlcnNlKSkKICAgICBzeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEvTGliL3BsaXN0bGliLnB5IGIvTGliL3BsaXN0bGliLnB5CmluZGV4IDJiMGI2MzQuLmI5OTQ2ZmQgMTAwNjQ0Ci0tLSBhL0xpYi9wbGlzdGxpYi5weQorKysgYi9MaWIvcGxpc3RsaWIucHkKQEAgLTQsMjUgKzQsMjAgQEAKIGJhc2ljIG9iamVjdCB0eXBlcywgbGlrZSBkaWN0aW9uYXJpZXMsIGxpc3RzLCBudW1iZXJzIGFuZCBzdHJpbmdzLgogVXN1YWxseSB0aGUgdG9wIGxldmVsIG9iamVjdCBpcyBhIGRpY3Rpb25hcnkuCiAKLVRvIHdyaXRlIG91dCBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgd3JpdGVQbGlzdChyb290T2JqZWN0LCBwYXRoT3JGaWxlKQotZnVuY3Rpb24uICdyb290T2JqZWN0JyBpcyB0aGUgdG9wIGxldmVsIG9iamVjdCwgJ3BhdGhPckZpbGUnIGlzIGEKLWZpbGVuYW1lIG9yIGEgKHdyaXRhYmxlKSBmaWxlIG9iamVjdC4KK1RvIHdyaXRlIG91dCBhIHBsaXN0IGZpbGUsIHVzZSB0aGUgZHVtcCh2YWx1ZSwgZmlsZSkKK2Z1bmN0aW9uLiAndmFsdWUnIGlzIHRoZSB0b3AgbGV2ZWwgb2JqZWN0LCAnZmlsZScgaXMKK2EgKHdyaXRhYmxlKSBmaWxlIG9iamVjdC4KIAotVG8gcGFyc2UgYSBwbGlzdCBmcm9tIGEgZmlsZSwgdXNlIHRoZSByZWFkUGxpc3QocGF0aE9yRmlsZSkgZnVuY3Rpb24sCi13aXRoIGEgZmlsZSBuYW1lIG9yIGEgKHJlYWRhYmxlKSBmaWxlIG9iamVjdCBhcyB0aGUgb25seSBhcmd1bWVudC4gSXQKK1RvIHBhcnNlIGEgcGxpc3QgZnJvbSBhIGZpbGUsIHVzZSB0aGUgbG9hZChmaWxlKSBmdW5jdGlvbiwKK3dpdGggYSAocmVhZGFibGUpIGZpbGUgb2JqZWN0IGFzIHRoZSBvbmx5IGFyZ3VtZW50LiBJdAogcmV0dXJucyB0aGUgdG9wIGxldmVsIG9iamVjdCAoYWdhaW4sIHVzdWFsbHkgYSBkaWN0aW9uYXJ5KS4KIAotVG8gd29yayB3aXRoIHBsaXN0IGRhdGEgaW4gYnl0ZXMgb2JqZWN0cywgeW91IGNhbiB1c2UgcmVhZFBsaXN0RnJvbUJ5dGVzKCkKLWFuZCB3cml0ZVBsaXN0VG9CeXRlcygpLgorVG8gd29yayB3aXRoIHBsaXN0IGRhdGEgaW4gYnl0ZXMgb2JqZWN0cywgeW91IGNhbiB1c2UgbG9hZHMoKQorYW5kIGR1bXBzKCkuCiAKIFZhbHVlcyBjYW4gYmUgc3RyaW5ncywgaW50ZWdlcnMsIGZsb2F0cywgYm9vbGVhbnMsIHR1cGxlcywgbGlzdHMsCi1kaWN0aW9uYXJpZXMgKGJ1dCBvbmx5IHdpdGggc3RyaW5nIGtleXMpLCBEYXRhIG9yIGRhdGV0aW1lLmRhdGV0aW1lIG9iamVjdHMuCi1TdHJpbmcgdmFsdWVzIChpbmNsdWRpbmcgZGljdGlvbmFyeSBrZXlzKSBoYXZlIHRvIGJlIHVuaWNvZGUgc3RyaW5ncyAtLSB0aGV5Ci13aWxsIGJlIHdyaXR0ZW4gb3V0IGFzIFVURi04LgotCi1UaGUgPGRhdGE+IHBsaXN0IHR5cGUgaXMgc3VwcG9ydGVkIHRocm91Z2ggdGhlIERhdGEgY2xhc3MuIFRoaXMgaXMgYQotdGhpbiB3cmFwcGVyIGFyb3VuZCBhIFB5dGhvbiBieXRlcyBvYmplY3QuIFVzZSAnRGF0YScgaWYgeW91ciBzdHJpbmdzCi1jb250YWluIGNvbnRyb2wgY2hhcmFjdGVycy4KK2RpY3Rpb25hcmllcyAoYnV0IG9ubHkgd2l0aCBzdHJpbmcga2V5cyksIERhdGEsIGJ5dGVzLCBieXRlYXJyYXksIG9yCitkYXRldGltZS5kYXRldGltZSBvYmplY3RzLgogCiBHZW5lcmF0ZSBQbGlzdCBleGFtcGxlOgogCkBAIC0zNywyMjYgKzMyLDQ4IEBACiAgICAgICAgICAgICBhVHJ1ZVZhbHVlID0gVHJ1ZSwKICAgICAgICAgICAgIGFGYWxzZVZhbHVlID0gRmFsc2UsCiAgICAgICAgICksCi0gICAgICAgIHNvbWVEYXRhID0gRGF0YShiIjxiaW5hcnkgZ3Vuaz4iKSwKLSAgICAgICAgc29tZU1vcmVEYXRhID0gRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPiIgKiAxMCksCisgICAgICAgIHNvbWVEYXRhID0gYiI8YmluYXJ5IGd1bms+IiwKKyAgICAgICAgc29tZU1vcmVEYXRhID0gYiI8bG90cyBvZiBiaW5hcnkgZ3Vuaz4iICogMTAsCiAgICAgICAgIGFEYXRlID0gZGF0ZXRpbWUuZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcCh0aW1lLm1rdGltZSh0aW1lLmdtdGltZSgpKSksCiAgICAgKQotICAgIHdyaXRlUGxpc3QocGwsIGZpbGVOYW1lKQorICAgIHdpdGggb3BlbihmaWxlTmFtZSwgJ3diJykgYXMgZnA6CisgICAgICAgIGR1bXAocGwsIGZwKQogCiBQYXJzZSBQbGlzdCBleGFtcGxlOgogCi0gICAgcGwgPSByZWFkUGxpc3QocGF0aE9yRmlsZSkKLSAgICBwcmludCBwbFsiYUtleSJdCisgICAgd2l0aCBvcGVuKGZpbGVOYW1lLCAncmInKSBhcyBmcDoKKyAgICAgICAgcGwgPSBsb2FkKGZwKQorICAgIHByaW50KHBsWyJhS2V5Il0pCiAiIiIKLQotCiBfX2FsbF9fID0gWwogICAgICJyZWFkUGxpc3QiLCAid3JpdGVQbGlzdCIsICJyZWFkUGxpc3RGcm9tQnl0ZXMiLCAid3JpdGVQbGlzdFRvQnl0ZXMiLAotICAgICJQbGlzdCIsICJEYXRhIiwgIkRpY3QiCisgICAgIlBsaXN0IiwgIkRhdGEiLCAiRGljdCIsICJGTVRfWE1MIiwgIkZNVF9CSU5BUlkiLAorICAgICJsb2FkIiwgImR1bXAiLCAibG9hZHMiLCAiZHVtcHMiCiBdCi0jIE5vdGU6IHRoZSBQbGlzdCBhbmQgRGljdCBjbGFzc2VzIGhhdmUgYmVlbiBkZXByZWNhdGVkLgogCiBpbXBvcnQgYmluYXNjaWkKK2ltcG9ydCBjb2RlY3MKK2ltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZGF0ZXRpbWUKK2ltcG9ydCBlbnVtCiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgb3MKIGltcG9ydCByZQoraW1wb3J0IHN0cnVjdAorZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgorZnJvbSB4bWwucGFyc2Vycy5leHBhdCBpbXBvcnQgUGFyc2VyQ3JlYXRlCiAKIAotZGVmIHJlYWRQbGlzdChwYXRoT3JGaWxlKToKLSAgICAiIiJSZWFkIGEgLnBsaXN0IGZpbGUuICdwYXRoT3JGaWxlJyBtYXkgZWl0aGVyIGJlIGEgZmlsZSBuYW1lIG9yIGEKLSAgICAocmVhZGFibGUpIGZpbGUgb2JqZWN0LiBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaAotICAgIHVzdWFsbHkgaXMgYSBkaWN0aW9uYXJ5KS4KLSAgICAiIiIKLSAgICBkaWRPcGVuID0gRmFsc2UKLSAgICB0cnk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UocGF0aE9yRmlsZSwgc3RyKToKLSAgICAgICAgICAgIHBhdGhPckZpbGUgPSBvcGVuKHBhdGhPckZpbGUsICdyYicpCi0gICAgICAgICAgICBkaWRPcGVuID0gVHJ1ZQotICAgICAgICBwID0gUGxpc3RQYXJzZXIoKQotICAgICAgICByb290T2JqZWN0ID0gcC5wYXJzZShwYXRoT3JGaWxlKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGlmIGRpZE9wZW46Ci0gICAgICAgICAgICBwYXRoT3JGaWxlLmNsb3NlKCkKLSAgICByZXR1cm4gcm9vdE9iamVjdAorUGxpc3RGb3JtYXQgPSBlbnVtLkVudW0oJ1BsaXN0Rm9ybWF0JywgJ0ZNVF9YTUwgRk1UX0JJTkFSWScsIG1vZHVsZT1fX25hbWVfXykKK2dsb2JhbHMoKS51cGRhdGUoUGxpc3RGb3JtYXQuX19tZW1iZXJzX18pCiAKIAotZGVmIHdyaXRlUGxpc3Qocm9vdE9iamVjdCwgcGF0aE9yRmlsZSk6Ci0gICAgIiIiV3JpdGUgJ3Jvb3RPYmplY3QnIHRvIGEgLnBsaXN0IGZpbGUuICdwYXRoT3JGaWxlJyBtYXkgZWl0aGVyIGJlIGEKLSAgICBmaWxlIG5hbWUgb3IgYSAod3JpdGFibGUpIGZpbGUgb2JqZWN0LgotICAgICIiIgotICAgIGRpZE9wZW4gPSBGYWxzZQotICAgIHRyeToKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoT3JGaWxlLCBzdHIpOgotICAgICAgICAgICAgcGF0aE9yRmlsZSA9IG9wZW4ocGF0aE9yRmlsZSwgJ3diJykKLSAgICAgICAgICAgIGRpZE9wZW4gPSBUcnVlCi0gICAgICAgIHdyaXRlciA9IFBsaXN0V3JpdGVyKHBhdGhPckZpbGUpCi0gICAgICAgIHdyaXRlci53cml0ZWxuKCI8cGxpc3QgdmVyc2lvbj1cIjEuMFwiPiIpCi0gICAgICAgIHdyaXRlci53cml0ZVZhbHVlKHJvb3RPYmplY3QpCi0gICAgICAgIHdyaXRlci53cml0ZWxuKCI8L3BsaXN0PiIpCi0gICAgZmluYWxseToKLSAgICAgICAgaWYgZGlkT3BlbjoKLSAgICAgICAgICAgIHBhdGhPckZpbGUuY2xvc2UoKQotCi0KLWRlZiByZWFkUGxpc3RGcm9tQnl0ZXMoZGF0YSk6Ci0gICAgIiIiUmVhZCBhIHBsaXN0IGRhdGEgZnJvbSBhIGJ5dGVzIG9iamVjdC4gUmV0dXJuIHRoZSByb290IG9iamVjdC4KLSAgICAiIiIKLSAgICByZXR1cm4gcmVhZFBsaXN0KEJ5dGVzSU8oZGF0YSkpCi0KLQotZGVmIHdyaXRlUGxpc3RUb0J5dGVzKHJvb3RPYmplY3QpOgotICAgICIiIlJldHVybiAncm9vdE9iamVjdCcgYXMgYSBwbGlzdC1mb3JtYXR0ZWQgYnl0ZXMgb2JqZWN0LgotICAgICIiIgotICAgIGYgPSBCeXRlc0lPKCkKLSAgICB3cml0ZVBsaXN0KHJvb3RPYmplY3QsIGYpCi0gICAgcmV0dXJuIGYuZ2V0dmFsdWUoKQotCi0KLWNsYXNzIER1bWJYTUxXcml0ZXI6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudExldmVsPTAsIGluZGVudD0iXHQiKToKLSAgICAgICAgc2VsZi5maWxlID0gZmlsZQotICAgICAgICBzZWxmLnN0YWNrID0gW10KLSAgICAgICAgc2VsZi5pbmRlbnRMZXZlbCA9IGluZGVudExldmVsCi0gICAgICAgIHNlbGYuaW5kZW50ID0gaW5kZW50Ci0KLSAgICBkZWYgYmVnaW5FbGVtZW50KHNlbGYsIGVsZW1lbnQpOgotICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZChlbGVtZW50KQotICAgICAgICBzZWxmLndyaXRlbG4oIjwlcz4iICUgZWxlbWVudCkKLSAgICAgICAgc2VsZi5pbmRlbnRMZXZlbCArPSAxCi0KLSAgICBkZWYgZW5kRWxlbWVudChzZWxmLCBlbGVtZW50KToKLSAgICAgICAgYXNzZXJ0IHNlbGYuaW5kZW50TGV2ZWwgPiAwCi0gICAgICAgIGFzc2VydCBzZWxmLnN0YWNrLnBvcCgpID09IGVsZW1lbnQKLSAgICAgICAgc2VsZi5pbmRlbnRMZXZlbCAtPSAxCi0gICAgICAgIHNlbGYud3JpdGVsbigiPC8lcz4iICUgZWxlbWVudCkKLQotICAgIGRlZiBzaW1wbGVFbGVtZW50KHNlbGYsIGVsZW1lbnQsIHZhbHVlPU5vbmUpOgotICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHZhbHVlID0gX2VzY2FwZSh2YWx1ZSkKLSAgICAgICAgICAgIHNlbGYud3JpdGVsbigiPCVzPiVzPC8lcz4iICUgKGVsZW1lbnQsIHZhbHVlLCBlbGVtZW50KSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYud3JpdGVsbigiPCVzLz4iICUgZWxlbWVudCkKLQotICAgIGRlZiB3cml0ZWxuKHNlbGYsIGxpbmUpOgotICAgICAgICBpZiBsaW5lOgotICAgICAgICAgICAgIyBwbGlzdCBoYXMgZml4ZWQgZW5jb2Rpbmcgb2YgdXRmLTgKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobGluZSwgc3RyKToKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgICAgIHNlbGYuZmlsZS53cml0ZShzZWxmLmluZGVudExldmVsICogc2VsZi5pbmRlbnQpCi0gICAgICAgICAgICBzZWxmLmZpbGUud3JpdGUobGluZSkKLSAgICAgICAgc2VsZi5maWxlLndyaXRlKGInXG4nKQotCi0KLSMgQ29udGVudHMgc2hvdWxkIGNvbmZvcm0gdG8gYSBzdWJzZXQgb2YgSVNPIDg2MDEKLSMgKGluIHBhcnRpY3VsYXIsIFlZWVkgJy0nIE1NICctJyBERCAnVCcgSEggJzonIE1NICc6JyBTUyAnWicuICBTbWFsbGVyIHVuaXRzIG1heSBiZSBvbWl0dGVkIHdpdGgKLSMgIGEgbG9zcyBvZiBwcmVjaXNpb24pCi1fZGF0ZVBhcnNlciA9IHJlLmNvbXBpbGUociIoP1A8eWVhcj5cZFxkXGRcZCkoPzotKD9QPG1vbnRoPlxkXGQpKD86LSg/UDxkYXk+XGRcZCkoPzpUKD9QPGhvdXI+XGRcZCkoPzo6KD9QPG1pbnV0ZT5cZFxkKSg/OjooP1A8c2Vjb25kPlxkXGQpKT8pPyk/KT8pP1oiLCByZS5BU0NJSSkKLQotZGVmIF9kYXRlRnJvbVN0cmluZyhzKToKLSAgICBvcmRlciA9ICgneWVhcicsICdtb250aCcsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJykKLSAgICBnZCA9IF9kYXRlUGFyc2VyLm1hdGNoKHMpLmdyb3VwZGljdCgpCi0gICAgbHN0ID0gW10KLSAgICBmb3Iga2V5IGluIG9yZGVyOgotICAgICAgICB2YWwgPSBnZFtrZXldCi0gICAgICAgIGlmIHZhbCBpcyBOb25lOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgbHN0LmFwcGVuZChpbnQodmFsKSkKLSAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUoKmxzdCkKLQotZGVmIF9kYXRlVG9TdHJpbmcoZCk6Ci0gICAgcmV0dXJuICclMDRkLSUwMmQtJTAyZFQlMDJkOiUwMmQ6JTAyZFonICUgKAotICAgICAgICBkLnllYXIsIGQubW9udGgsIGQuZGF5LAotICAgICAgICBkLmhvdXIsIGQubWludXRlLCBkLnNlY29uZAotICAgICkKLQotCi0jIFJlZ2V4IHRvIGZpbmQgYW55IGNvbnRyb2wgY2hhcnMsIGV4Y2VwdCBmb3IgXHQgXG4gYW5kIFxyCi1fY29udHJvbENoYXJQYXQgPSByZS5jb21waWxlKAotICAgIHIiW1x4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MGJceDBjXHgwZVx4MGYiCi0gICAgciJceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5XHgxYVx4MWJceDFjXHgxZFx4MWVceDFmXSIpCi0KLWRlZiBfZXNjYXBlKHRleHQpOgotICAgIG0gPSBfY29udHJvbENoYXJQYXQuc2VhcmNoKHRleHQpCi0gICAgaWYgbSBpcyBub3QgTm9uZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic3RyaW5ncyBjYW4ndCBjb250YWlucyBjb250cm9sIGNoYXJhY3RlcnM7ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIHBsaXN0bGliLkRhdGEgaW5zdGVhZCIpCi0gICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXHJcbiIsICJcbiIpICAgICAgICMgY29udmVydCBET1MgbGluZSBlbmRpbmdzCi0gICAgdGV4dCA9IHRleHQucmVwbGFjZSgiXHIiLCAiXG4iKSAgICAgICAgICMgY29udmVydCBNYWMgbGluZSBlbmRpbmdzCi0gICAgdGV4dCA9IHRleHQucmVwbGFjZSgiJiIsICImYW1wOyIpICAgICAgICMgZXNjYXBlICcmJwotICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIjwiLCAiJmx0OyIpICAgICAgICAjIGVzY2FwZSAnPCcKLSAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI+IiwgIiZndDsiKSAgICAgICAgIyBlc2NhcGUgJz4nCi0gICAgcmV0dXJuIHRleHQKLQotCi1QTElTVEhFQURFUiA9IGIiIiJcCi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci0iIiIKLQotY2xhc3MgUGxpc3RXcml0ZXIoRHVtYlhNTFdyaXRlcik6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50TGV2ZWw9MCwgaW5kZW50PWIiXHQiLCB3cml0ZUhlYWRlcj0xKToKLSAgICAgICAgaWYgd3JpdGVIZWFkZXI6Ci0gICAgICAgICAgICBmaWxlLndyaXRlKFBMSVNUSEVBREVSKQotICAgICAgICBEdW1iWE1MV3JpdGVyLl9faW5pdF9fKHNlbGYsIGZpbGUsIGluZGVudExldmVsLCBpbmRlbnQpCi0KLSAgICBkZWYgd3JpdGVWYWx1ZShzZWxmLCB2YWx1ZSk6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoInN0cmluZyIsIHZhbHVlKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGJvb2wpOgotICAgICAgICAgICAgIyBtdXN0IHN3aXRjaCBmb3IgYm9vbCBiZWZvcmUgaW50LCBhcyBib29sIGlzIGEKLSAgICAgICAgICAgICMgc3ViY2xhc3Mgb2YgaW50Li4uCi0gICAgICAgICAgICBpZiB2YWx1ZToKLSAgICAgICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoInRydWUiKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoImZhbHNlIikKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBpbnQpOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJpbnRlZ2VyIiwgIiVkIiAlIHZhbHVlKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKLSAgICAgICAgICAgIHNlbGYuc2ltcGxlRWxlbWVudCgicmVhbCIsIHJlcHIodmFsdWUpKQotICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgotICAgICAgICAgICAgc2VsZi53cml0ZURpY3QodmFsdWUpCi0gICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6Ci0gICAgICAgICAgICBzZWxmLndyaXRlRGF0YSh2YWx1ZSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkYXRldGltZS5kYXRldGltZSk6Ci0gICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoImRhdGUiLCBfZGF0ZVRvU3RyaW5nKHZhbHVlKSkKLSAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAodHVwbGUsIGxpc3QpKToKLSAgICAgICAgICAgIHNlbGYud3JpdGVBcnJheSh2YWx1ZSkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigidW5zdXBwb3J0ZWQgdHlwZTogJXMiICUgdHlwZSh2YWx1ZSkpCi0KLSAgICBkZWYgd3JpdGVEYXRhKHNlbGYsIGRhdGEpOgotICAgICAgICBzZWxmLmJlZ2luRWxlbWVudCgiZGF0YSIpCi0gICAgICAgIHNlbGYuaW5kZW50TGV2ZWwgLT0gMQotICAgICAgICBtYXhsaW5lbGVuZ3RoID0gbWF4KDE2LCA3NiAtIGxlbihzZWxmLmluZGVudC5yZXBsYWNlKGIiXHQiLCBiIiAiICogOCkgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRlbnRMZXZlbCkpCi0gICAgICAgIGZvciBsaW5lIGluIGRhdGEuYXNCYXNlNjQobWF4bGluZWxlbmd0aCkuc3BsaXQoYiJcbiIpOgotICAgICAgICAgICAgaWYgbGluZToKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlbG4obGluZSkKLSAgICAgICAgc2VsZi5pbmRlbnRMZXZlbCArPSAxCi0gICAgICAgIHNlbGYuZW5kRWxlbWVudCgiZGF0YSIpCi0KLSAgICBkZWYgd3JpdGVEaWN0KHNlbGYsIGQpOgotICAgICAgICBpZiBkOgotICAgICAgICAgICAgc2VsZi5iZWdpbkVsZW1lbnQoImRpY3QiKQotICAgICAgICAgICAgaXRlbXMgPSBzb3J0ZWQoZC5pdGVtcygpKQotICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlbXM6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleXMgbXVzdCBiZSBzdHJpbmdzIikKLSAgICAgICAgICAgICAgICBzZWxmLnNpbXBsZUVsZW1lbnQoImtleSIsIGtleSkKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlVmFsdWUodmFsdWUpCi0gICAgICAgICAgICBzZWxmLmVuZEVsZW1lbnQoImRpY3QiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJkaWN0IikKLQotICAgIGRlZiB3cml0ZUFycmF5KHNlbGYsIGFycmF5KToKLSAgICAgICAgaWYgYXJyYXk6Ci0gICAgICAgICAgICBzZWxmLmJlZ2luRWxlbWVudCgiYXJyYXkiKQotICAgICAgICAgICAgZm9yIHZhbHVlIGluIGFycmF5OgotICAgICAgICAgICAgICAgIHNlbGYud3JpdGVWYWx1ZSh2YWx1ZSkKLSAgICAgICAgICAgIHNlbGYuZW5kRWxlbWVudCgiYXJyYXkiKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5zaW1wbGVFbGVtZW50KCJhcnJheSIpCisjCisjCisjIERlcHJlY2F0ZWQgZnVuY3Rpb25hbGl0eQorIworIwogCiAKIGNsYXNzIF9JbnRlcm5hbERpY3QoZGljdCk6CkBAIC0yNjQsMTkgKzgxLDE4IEBACiAgICAgIyBUaGlzIGNsYXNzIGlzIG5lZWRlZCB3aGlsZSBEaWN0IGlzIHNjaGVkdWxlZCBmb3IgZGVwcmVjYXRpb246CiAgICAgIyB3ZSBvbmx5IG5lZWQgdG8gd2FybiB3aGVuIGEgKnVzZXIqIGluc3RhbnRpYXRlcyBEaWN0IG9yIHdoZW4KICAgICAjIHRoZSAiYXR0cmlidXRlIG5vdGF0aW9uIGZvciBkaWN0IGtleXMiIGlzIHVzZWQuCisgICAgX19zbG90c19fID0gKCkKIAogICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBhdHRyKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdmFsdWUgPSBzZWxmW2F0dHJdCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKGF0dHIpCi0gICAgICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KICAgICAgICAgd2FybigiQXR0cmlidXRlIGFjY2VzcyBmcm9tIHBsaXN0IGRpY3RzIGlzIGRlcHJlY2F0ZWQsIHVzZSBkW2tleV0gIgogICAgICAgICAgICAgICJub3RhdGlvbiBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICByZXR1cm4gdmFsdWUKIAogICAgIGRlZiBfX3NldGF0dHJfXyhzZWxmLCBhdHRyLCB2YWx1ZSk6Ci0gICAgICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KICAgICAgICAgd2FybigiQXR0cmlidXRlIGFjY2VzcyBmcm9tIHBsaXN0IGRpY3RzIGlzIGRlcHJlY2F0ZWQsIHVzZSBkW2tleV0gIgogICAgICAgICAgICAgICJub3RhdGlvbiBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzZWxmW2F0dHJdID0gdmFsdWUKQEAgLTI4Niw1NiArMTAyLDExMSBAQAogICAgICAgICAgICAgZGVsIHNlbGZbYXR0cl0KICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoYXR0cikKLSAgICAgICAgZnJvbSB3YXJuaW5ncyBpbXBvcnQgd2FybgogICAgICAgICB3YXJuKCJBdHRyaWJ1dGUgYWNjZXNzIGZyb20gcGxpc3QgZGljdHMgaXMgZGVwcmVjYXRlZCwgdXNlIGRba2V5XSAiCiAgICAgICAgICAgICAgIm5vdGF0aW9uIGluc3RlYWQiLCBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAKKwogY2xhc3MgRGljdChfSW50ZXJuYWxEaWN0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6Ci0gICAgICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KICAgICAgICAgd2FybigiVGhlIHBsaXN0bGliLkRpY3QgY2xhc3MgaXMgZGVwcmVjYXRlZCwgdXNlIGJ1aWx0aW4gZGljdCBpbnN0ZWFkIiwKICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKiprd2FyZ3MpCiAKIAotY2xhc3MgUGxpc3QoX0ludGVybmFsRGljdCk6CitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIF9tYXliZV9vcGVuKHBhdGhPckZpbGUsIG1vZGUpOgorICAgIGlmIGlzaW5zdGFuY2UocGF0aE9yRmlsZSwgc3RyKToKKyAgICAgICAgd2l0aCBvcGVuKHBhdGhPckZpbGUsIG1vZGUpIGFzIGZwOgorICAgICAgICAgICAgeWllbGQgZnAKIAotICAgICIiIlRoaXMgY2xhc3MgaGFzIGJlZW4gZGVwcmVjYXRlZC4gVXNlIHJlYWRQbGlzdCgpIGFuZCB3cml0ZVBsaXN0KCkKKyAgICBlbHNlOgorICAgICAgICB5aWVsZCBwYXRoT3JGaWxlCisKKworY2xhc3MgUGxpc3QoX0ludGVybmFsRGljdCk6CisgICAgIiIiVGhpcyBjbGFzcyBoYXMgYmVlbiBkZXByZWNhdGVkLiBVc2UgZHVtcCgpIGFuZCBsb2FkKCkKICAgICBmdW5jdGlvbnMgaW5zdGVhZCwgdG9nZXRoZXIgd2l0aCByZWd1bGFyIGRpY3Qgb2JqZWN0cy4KICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6Ci0gICAgICAgIGZyb20gd2FybmluZ3MgaW1wb3J0IHdhcm4KLSAgICAgICAgd2FybigiVGhlIFBsaXN0IGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSB0aGUgcmVhZFBsaXN0KCkgYW5kICIKLSAgICAgICAgICAgICAid3JpdGVQbGlzdCgpIGZ1bmN0aW9ucyBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorICAgICAgICB3YXJuKCJUaGUgUGxpc3QgY2xhc3MgaXMgZGVwcmVjYXRlZCwgdXNlIHRoZSBsb2FkKCkgYW5kICIKKyAgICAgICAgICAgICAiZHVtcCgpIGZ1bmN0aW9ucyBpbnN0ZWFkIiwgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCoqa3dhcmdzKQogCisgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIGZyb21GaWxlKGNscywgcGF0aE9yRmlsZSk6Ci0gICAgICAgICIiIkRlcHJlY2F0ZWQuIFVzZSB0aGUgcmVhZFBsaXN0KCkgZnVuY3Rpb24gaW5zdGVhZC4iIiIKLSAgICAgICAgcm9vdE9iamVjdCA9IHJlYWRQbGlzdChwYXRoT3JGaWxlKQorICAgICAgICAiIiJEZXByZWNhdGVkLiBVc2UgdGhlIGxvYWQoKSBmdW5jdGlvbiBpbnN0ZWFkLiIiIgorICAgICAgICB3aXRoIF9tYXliZV9vcGVuKHBhdGhPckZpbGUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgdmFsdWUgPSBsb2FkKGZwKQogICAgICAgICBwbGlzdCA9IGNscygpCi0gICAgICAgIHBsaXN0LnVwZGF0ZShyb290T2JqZWN0KQorICAgICAgICBwbGlzdC51cGRhdGUodmFsdWUpCiAgICAgICAgIHJldHVybiBwbGlzdAotICAgIGZyb21GaWxlID0gY2xhc3NtZXRob2QoZnJvbUZpbGUpCiAKICAgICBkZWYgd3JpdGUoc2VsZiwgcGF0aE9yRmlsZSk6Ci0gICAgICAgICIiIkRlcHJlY2F0ZWQuIFVzZSB0aGUgd3JpdGVQbGlzdCgpIGZ1bmN0aW9uIGluc3RlYWQuIiIiCi0gICAgICAgIHdyaXRlUGxpc3Qoc2VsZiwgcGF0aE9yRmlsZSkKKyAgICAgICAgIiIiRGVwcmVjYXRlZC4gVXNlIHRoZSBkdW1wKCkgZnVuY3Rpb24gaW5zdGVhZC4iIiIKKyAgICAgICAgd2l0aCBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGR1bXAoc2VsZiwgZnApCiAKIAotZGVmIF9lbmNvZGVCYXNlNjQocywgbWF4bGluZWxlbmd0aD03Nik6Ci0gICAgIyBjb3BpZWQgZnJvbSBiYXNlNjQuZW5jb2RlYnl0ZXMoKSwgd2l0aCBhZGRlZCBtYXhsaW5lbGVuZ3RoIGFyZ3VtZW50Ci0gICAgbWF4Ymluc2l6ZSA9IChtYXhsaW5lbGVuZ3RoLy80KSozCi0gICAgcGllY2VzID0gW10KLSAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocyksIG1heGJpbnNpemUpOgotICAgICAgICBjaHVuayA9IHNbaSA6IGkgKyBtYXhiaW5zaXplXQotICAgICAgICBwaWVjZXMuYXBwZW5kKGJpbmFzY2lpLmIyYV9iYXNlNjQoY2h1bmspKQotICAgIHJldHVybiBiJycuam9pbihwaWVjZXMpCitkZWYgcmVhZFBsaXN0KHBhdGhPckZpbGUpOgorICAgICIiIgorICAgIFJlYWQgYSAucGxpc3QgZnJvbSBhIHBhdGggb3IgZmlsZS4gcGF0aE9yRmlsZSBzaG91bGQgZWl0aGVyCisgICAgYmUgYSBmaWxlIG5hbWUsIG9yIGEgcmVhZGFibGUgYmluYXJ5IGZpbGUgb2JqZWN0LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgbG9hZCBpbnN0ZWFkLgorICAgICIiIgorICAgIHdhcm4oIlRoZSByZWFkUGxpc3QgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGxvYWQoKSBpbnN0ZWFkIiwKKyAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCAyKQorCisgICAgd2l0aCBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgcmV0dXJuIGxvYWQoZnAsIGZtdD1Ob25lLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSwKKyAgICAgICAgICAgIGRpY3RfdHlwZT1fSW50ZXJuYWxEaWN0KQorCitkZWYgd3JpdGVQbGlzdCh2YWx1ZSwgcGF0aE9yRmlsZSk6CisgICAgIiIiCisgICAgV3JpdGUgJ3ZhbHVlJyB0byBhIC5wbGlzdCBmaWxlLiAncGF0aE9yRmlsZScgbWF5IGVpdGhlciBiZSBhCisgICAgZmlsZSBuYW1lIG9yIGEgKHdyaXRhYmxlKSBmaWxlIG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGR1bXAgaW5zdGVhZC4KKyAgICAiIiIKKyAgICB3YXJuKCJUaGUgd3JpdGVQbGlzdCBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgZHVtcCgpIGluc3RlYWQiLAorICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgd2l0aCBfbWF5YmVfb3BlbihwYXRoT3JGaWxlLCAnd2InKSBhcyBmcDoKKyAgICAgICAgZHVtcCh2YWx1ZSwgZnAsIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisKKworZGVmIHJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKToKKyAgICAiIiIKKyAgICBSZWFkIGEgcGxpc3QgZGF0YSBmcm9tIGEgYnl0ZXMgb2JqZWN0LiBSZXR1cm4gdGhlIHJvb3Qgb2JqZWN0LgorCisgICAgVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgbG9hZHMgaW5zdGVhZC4KKyAgICAiIiIKKyAgICB3YXJuKCJUaGUgcmVhZFBsaXN0RnJvbUJ5dGVzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBsb2FkcygpIGluc3RlYWQiLAorICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgcmV0dXJuIGxvYWQoQnl0ZXNJTyhkYXRhKSwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPUZhbHNlLAorICAgICAgICBkaWN0X3R5cGU9X0ludGVybmFsRGljdCkKKworCitkZWYgd3JpdGVQbGlzdFRvQnl0ZXModmFsdWUpOgorICAgICIiIgorICAgIFJldHVybiAndmFsdWUnIGFzIGEgcGxpc3QtZm9ybWF0dGVkIGJ5dGVzIG9iamVjdC4KKworICAgIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGR1bXBzIGluc3RlYWQuCisgICAgIiIiCisgICAgd2FybigiVGhlIHdyaXRlUGxpc3RUb0J5dGVzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSBkdW1wcygpIGluc3RlYWQiLAorICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCisgICAgZiA9IEJ5dGVzSU8oKQorICAgIGR1bXAodmFsdWUsIGYsIGZtdD1GTVRfWE1MLCBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpCisgICAgcmV0dXJuIGYuZ2V0dmFsdWUoKQorCiAKIGNsYXNzIERhdGE6CisgICAgIiIiCisgICAgV3JhcHBlciBmb3IgYmluYXJ5IGRhdGEuCiAKLSAgICAiIiJXcmFwcGVyIGZvciBiaW5hcnkgZGF0YS4iIiIKKyAgICBUaGlzIGNsYXNzIGlzIGRlcHJlY2F0ZWQsIHVzZSBhIGJ5dGVzIG9iamVjdCBpbnN0ZWFkLgorICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGEpOgogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCBieXRlcyk6CkBAIC0zNDYsMTAgKzIxNywxMCBAQAogICAgIGRlZiBmcm9tQmFzZTY0KGNscywgZGF0YSk6CiAgICAgICAgICMgYmFzZTY0LmRlY29kZWJ5dGVzIGp1c3QgY2FsbHMgYmluYXNjaWkuYTJiX2Jhc2U2NDsKICAgICAgICAgIyBpdCBzZWVtcyBvdmVya2lsbCB0byB1c2UgYm90aCBiYXNlNjQgYW5kIGJpbmFzY2lpLgotICAgICAgICByZXR1cm4gY2xzKGJpbmFzY2lpLmEyYl9iYXNlNjQoZGF0YSkpCisgICAgICAgIHJldHVybiBjbHMoX2RlY29kZV9iYXNlNjQoZGF0YSkpCiAKICAgICBkZWYgYXNCYXNlNjQoc2VsZiwgbWF4bGluZWxlbmd0aD03Nik6Ci0gICAgICAgIHJldHVybiBfZW5jb2RlQmFzZTY0KHNlbGYuZGF0YSwgbWF4bGluZWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIF9lbmNvZGVfYmFzZTY0KHNlbGYuZGF0YSwgbWF4bGluZWxlbmd0aCkKIAogICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgogICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBzZWxmLl9fY2xhc3NfXyk6CkBAIC0zNjIsNDMgKzIzMywxMTkgQEAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiAiJXMoJXMpIiAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgcmVwcihzZWxmLmRhdGEpKQogCi1jbGFzcyBQbGlzdFBhcnNlcjoKKyMKKyMKKyMgRW5kIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25hbGl0eQorIworIwogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgorCisjCisjIFhNTCBzdXBwb3J0CisjCisKKworIyBYTUwgJ2hlYWRlcicKK1BMSVNUSEVBREVSID0gYiIiIlwKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Cis8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KKyIiIgorCisKKyMgUmVnZXggdG8gZmluZCBhbnkgY29udHJvbCBjaGFycywgZXhjZXB0IGZvciBcdCBcbiBhbmQgXHIKK19jb250cm9sQ2hhclBhdCA9IHJlLmNvbXBpbGUoCisgICAgciJbXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDA4XHgwYlx4MGNceDBlXHgwZiIKKyAgICByIlx4MTBceDExXHgxMlx4MTNceDE0XHgxNVx4MTZceDE3XHgxOFx4MTlceDFhXHgxYlx4MWNceDFkXHgxZVx4MWZdIikKKworZGVmIF9lbmNvZGVfYmFzZTY0KHMsIG1heGxpbmVsZW5ndGg9NzYpOgorICAgICMgY29waWVkIGZyb20gYmFzZTY0LmVuY29kZWJ5dGVzKCksIHdpdGggYWRkZWQgbWF4bGluZWxlbmd0aCBhcmd1bWVudAorICAgIG1heGJpbnNpemUgPSAobWF4bGluZWxlbmd0aC8vNCkqMworICAgIHBpZWNlcyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBtYXhiaW5zaXplKToKKyAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgbWF4Ymluc2l6ZV0KKyAgICAgICAgcGllY2VzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KGNodW5rKSkKKyAgICByZXR1cm4gYicnLmpvaW4ocGllY2VzKQorCitkZWYgX2RlY29kZV9iYXNlNjQocyk6CisgICAgaWYgaXNpbnN0YW5jZShzLCBzdHIpOgorICAgICAgICByZXR1cm4gYmluYXNjaWkuYTJiX2Jhc2U2NChzLmVuY29kZSgidXRmLTgiKSkKKworICAgIGVsc2U6CisgICAgICAgIHJldHVybiBiaW5hc2NpaS5hMmJfYmFzZTY0KHMpCisKKyMgQ29udGVudHMgc2hvdWxkIGNvbmZvcm0gdG8gYSBzdWJzZXQgb2YgSVNPIDg2MDEKKyMgKGluIHBhcnRpY3VsYXIsIFlZWVkgJy0nIE1NICctJyBERCAnVCcgSEggJzonIE1NICc6JyBTUyAnWicuICBTbWFsbGVyIHVuaXRzCisjIG1heSBiZSBvbWl0dGVkIHdpdGggIyAgYSBsb3NzIG9mIHByZWNpc2lvbikKK19kYXRlUGFyc2VyID0gcmUuY29tcGlsZShyIig/UDx5ZWFyPlxkXGRcZFxkKSg/Oi0oP1A8bW9udGg+XGRcZCkoPzotKD9QPGRheT5cZFxkKSg/OlQoP1A8aG91cj5cZFxkKSg/OjooP1A8bWludXRlPlxkXGQpKD86Oig/UDxzZWNvbmQ+XGRcZCkpPyk/KT8pPyk/WiIsIHJlLkFTQ0lJKQorCisKK2RlZiBfZGF0ZV9mcm9tX3N0cmluZyhzKToKKyAgICBvcmRlciA9ICgneWVhcicsICdtb250aCcsICdkYXknLCAnaG91cicsICdtaW51dGUnLCAnc2Vjb25kJykKKyAgICBnZCA9IF9kYXRlUGFyc2VyLm1hdGNoKHMpLmdyb3VwZGljdCgpCisgICAgbHN0ID0gW10KKyAgICBmb3Iga2V5IGluIG9yZGVyOgorICAgICAgICB2YWwgPSBnZFtrZXldCisgICAgICAgIGlmIHZhbCBpcyBOb25lOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgbHN0LmFwcGVuZChpbnQodmFsKSkKKyAgICByZXR1cm4gZGF0ZXRpbWUuZGF0ZXRpbWUoKmxzdCkKKworCitkZWYgX2RhdGVfdG9fc3RyaW5nKGQpOgorICAgIHJldHVybiAnJTA0ZC0lMDJkLSUwMmRUJTAyZDolMDJkOiUwMmRaJyAlICgKKyAgICAgICAgZC55ZWFyLCBkLm1vbnRoLCBkLmRheSwKKyAgICAgICAgZC5ob3VyLCBkLm1pbnV0ZSwgZC5zZWNvbmQKKyAgICApCisKK2RlZiBfZXNjYXBlKHRleHQpOgorICAgIG0gPSBfY29udHJvbENoYXJQYXQuc2VhcmNoKHRleHQpCisgICAgaWYgbSBpcyBub3QgTm9uZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic3RyaW5ncyBjYW4ndCBjb250YWlucyBjb250cm9sIGNoYXJhY3RlcnM7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAidXNlIGJ5dGVzIGluc3RlYWQiKQorICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyXG4iLCAiXG4iKSAgICAgICAjIGNvbnZlcnQgRE9TIGxpbmUgZW5kaW5ncworICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIlxyIiwgIlxuIikgICAgICAgICAjIGNvbnZlcnQgTWFjIGxpbmUgZW5kaW5ncworICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoIiYiLCAiJmFtcDsiKSAgICAgICAjIGVzY2FwZSAnJicKKyAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCI8IiwgIiZsdDsiKSAgICAgICAgIyBlc2NhcGUgJzwnCisgICAgdGV4dCA9IHRleHQucmVwbGFjZSgiPiIsICImZ3Q7IikgICAgICAgICMgZXNjYXBlICc+JworICAgIHJldHVybiB0ZXh0CisKK2NsYXNzIF9QbGlzdFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlX2J1aWx0aW5fdHlwZXMsIGRpY3RfdHlwZSk6CiAgICAgICAgIHNlbGYuc3RhY2sgPSBbXQotICAgICAgICBzZWxmLmN1cnJlbnRLZXkgPSBOb25lCisgICAgICAgIHNlbGYuY3VycmVudF9rZXkgPSBOb25lCiAgICAgICAgIHNlbGYucm9vdCA9IE5vbmUKKyAgICAgICAgc2VsZi5fdXNlX2J1aWx0aW5fdHlwZXMgPSB1c2VfYnVpbHRpbl90eXBlcworICAgICAgICBzZWxmLl9kaWN0X3R5cGUgPSBkaWN0X3R5cGUKIAogICAgIGRlZiBwYXJzZShzZWxmLCBmaWxlb2JqKToKLSAgICAgICAgZnJvbSB4bWwucGFyc2Vycy5leHBhdCBpbXBvcnQgUGFyc2VyQ3JlYXRlCiAgICAgICAgIHNlbGYucGFyc2VyID0gUGFyc2VyQ3JlYXRlKCkKLSAgICAgICAgc2VsZi5wYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuaGFuZGxlQmVnaW5FbGVtZW50Ci0gICAgICAgIHNlbGYucGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gc2VsZi5oYW5kbGVFbmRFbGVtZW50Ci0gICAgICAgIHNlbGYucGFyc2VyLkNoYXJhY3RlckRhdGFIYW5kbGVyID0gc2VsZi5oYW5kbGVEYXRhCisgICAgICAgIHNlbGYucGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBzZWxmLmhhbmRsZV9iZWdpbl9lbGVtZW50CisgICAgICAgIHNlbGYucGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gc2VsZi5oYW5kbGVfZW5kX2VsZW1lbnQKKyAgICAgICAgc2VsZi5wYXJzZXIuQ2hhcmFjdGVyRGF0YUhhbmRsZXIgPSBzZWxmLmhhbmRsZV9kYXRhCiAgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlRmlsZShmaWxlb2JqKQogICAgICAgICByZXR1cm4gc2VsZi5yb290CiAKLSAgICBkZWYgaGFuZGxlQmVnaW5FbGVtZW50KHNlbGYsIGVsZW1lbnQsIGF0dHJzKToKKyAgICBkZWYgaGFuZGxlX2JlZ2luX2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgYXR0cnMpOgogICAgICAgICBzZWxmLmRhdGEgPSBbXQogICAgICAgICBoYW5kbGVyID0gZ2V0YXR0cihzZWxmLCAiYmVnaW5fIiArIGVsZW1lbnQsIE5vbmUpCiAgICAgICAgIGlmIGhhbmRsZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBoYW5kbGVyKGF0dHJzKQogCi0gICAgZGVmIGhhbmRsZUVuZEVsZW1lbnQoc2VsZiwgZWxlbWVudCk6CisgICAgZGVmIGhhbmRsZV9lbmRfZWxlbWVudChzZWxmLCBlbGVtZW50KToKICAgICAgICAgaGFuZGxlciA9IGdldGF0dHIoc2VsZiwgImVuZF8iICsgZWxlbWVudCwgTm9uZSkKICAgICAgICAgaWYgaGFuZGxlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGhhbmRsZXIoKQogCi0gICAgZGVmIGhhbmRsZURhdGEoc2VsZiwgZGF0YSk6CisgICAgZGVmIGhhbmRsZV9kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmRhdGEuYXBwZW5kKGRhdGEpCiAKLSAgICBkZWYgYWRkT2JqZWN0KHNlbGYsIHZhbHVlKToKLSAgICAgICAgaWYgc2VsZi5jdXJyZW50S2V5IGlzIG5vdCBOb25lOgorICAgIGRlZiBhZGRfb2JqZWN0KHNlbGYsIHZhbHVlKToKKyAgICAgICAgaWYgc2VsZi5jdXJyZW50X2tleSBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHNlbGYuc3RhY2tbLTFdLCB0eXBlKHt9KSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5leHBlY3RlZCBlbGVtZW50IGF0IGxpbmUgJWQiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKQotICAgICAgICAgICAgc2VsZi5zdGFja1stMV1bc2VsZi5jdXJyZW50S2V5XSA9IHZhbHVlCi0gICAgICAgICAgICBzZWxmLmN1cnJlbnRLZXkgPSBOb25lCisgICAgICAgICAgICBzZWxmLnN0YWNrWy0xXVtzZWxmLmN1cnJlbnRfa2V5XSA9IHZhbHVlCisgICAgICAgICAgICBzZWxmLmN1cnJlbnRfa2V5ID0gTm9uZQogICAgICAgICBlbGlmIG5vdCBzZWxmLnN0YWNrOgogICAgICAgICAgICAgIyB0aGlzIGlzIHRoZSByb290IG9iamVjdAogICAgICAgICAgICAgc2VsZi5yb290ID0gdmFsdWUKQEAgLTQwOCw3ICszNTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuQ3VycmVudExpbmVOdW1iZXIpCiAgICAgICAgICAgICBzZWxmLnN0YWNrWy0xXS5hcHBlbmQodmFsdWUpCiAKLSAgICBkZWYgZ2V0RGF0YShzZWxmKToKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZik6CiAgICAgICAgIGRhdGEgPSAnJy5qb2luKHNlbGYuZGF0YSkKICAgICAgICAgc2VsZi5kYXRhID0gW10KICAgICAgICAgcmV0dXJuIGRhdGEKQEAgLTQxNiwzOSArMzYzLDY2MyBAQAogICAgICMgZWxlbWVudCBoYW5kbGVycwogCiAgICAgZGVmIGJlZ2luX2RpY3Qoc2VsZiwgYXR0cnMpOgotICAgICAgICBkID0gX0ludGVybmFsRGljdCgpCi0gICAgICAgIHNlbGYuYWRkT2JqZWN0KGQpCisgICAgICAgIGQgPSBzZWxmLl9kaWN0X3R5cGUoKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoZCkKICAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoZCkKKwogICAgIGRlZiBlbmRfZGljdChzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jdXJyZW50S2V5OgorICAgICAgICBpZiBzZWxmLmN1cnJlbnRfa2V5OgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibWlzc2luZyB2YWx1ZSBmb3Iga2V5ICclcycgYXQgbGluZSAlZCIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5jdXJyZW50S2V5LHNlbGYucGFyc2VyLkN1cnJlbnRMaW5lTnVtYmVyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuY3VycmVudF9rZXksc2VsZi5wYXJzZXIuQ3VycmVudExpbmVOdW1iZXIpKQogICAgICAgICBzZWxmLnN0YWNrLnBvcCgpCiAKICAgICBkZWYgZW5kX2tleShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5jdXJyZW50S2V5IG9yIG5vdCBpc2luc3RhbmNlKHNlbGYuc3RhY2tbLTFdLCB0eXBlKHt9KSk6CisgICAgICAgIGlmIHNlbGYuY3VycmVudF9rZXkgb3Igbm90IGlzaW5zdGFuY2Uoc2VsZi5zdGFja1stMV0sIHR5cGUoe30pKToKICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVuZXhwZWN0ZWQga2V5IGF0IGxpbmUgJWQiICUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXIuQ3VycmVudExpbmVOdW1iZXIpCi0gICAgICAgIHNlbGYuY3VycmVudEtleSA9IHNlbGYuZ2V0RGF0YSgpCisgICAgICAgIHNlbGYuY3VycmVudF9rZXkgPSBzZWxmLmdldF9kYXRhKCkKIAogICAgIGRlZiBiZWdpbl9hcnJheShzZWxmLCBhdHRycyk6CiAgICAgICAgIGEgPSBbXQotICAgICAgICBzZWxmLmFkZE9iamVjdChhKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoYSkKICAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoYSkKKwogICAgIGRlZiBlbmRfYXJyYXkoc2VsZik6CiAgICAgICAgIHNlbGYuc3RhY2sucG9wKCkKIAogICAgIGRlZiBlbmRfdHJ1ZShzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3QoVHJ1ZSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KFRydWUpCisKICAgICBkZWYgZW5kX2ZhbHNlKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChGYWxzZSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KEZhbHNlKQorCiAgICAgZGVmIGVuZF9pbnRlZ2VyKHNlbGYpOgotICAgICAgICBzZWxmLmFkZE9iamVjdChpbnQoc2VsZi5nZXREYXRhKCkpKQorICAgICAgICBzZWxmLmFkZF9vYmplY3QoaW50KHNlbGYuZ2V0X2RhdGEoKSkpCisKICAgICBkZWYgZW5kX3JlYWwoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KGZsb2F0KHNlbGYuZ2V0RGF0YSgpKSkKKyAgICAgICAgc2VsZi5hZGRfb2JqZWN0KGZsb2F0KHNlbGYuZ2V0X2RhdGEoKSkpCisKICAgICBkZWYgZW5kX3N0cmluZyhzZWxmKToKLSAgICAgICAgc2VsZi5hZGRPYmplY3Qoc2VsZi5nZXREYXRhKCkpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChzZWxmLmdldF9kYXRhKCkpCisKICAgICBkZWYgZW5kX2RhdGEoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KERhdGEuZnJvbUJhc2U2NChzZWxmLmdldERhdGEoKS5lbmNvZGUoInV0Zi04IikpKQorICAgICAgICBpZiBzZWxmLl91c2VfYnVpbHRpbl90eXBlczoKKyAgICAgICAgICAgIHNlbGYuYWRkX29iamVjdChfZGVjb2RlX2Jhc2U2NChzZWxmLmdldF9kYXRhKCkpKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFkZF9vYmplY3QoRGF0YS5mcm9tQmFzZTY0KHNlbGYuZ2V0X2RhdGEoKSkpCisKICAgICBkZWYgZW5kX2RhdGUoc2VsZik6Ci0gICAgICAgIHNlbGYuYWRkT2JqZWN0KF9kYXRlRnJvbVN0cmluZyhzZWxmLmdldERhdGEoKSkpCisgICAgICAgIHNlbGYuYWRkX29iamVjdChfZGF0ZV9mcm9tX3N0cmluZyhzZWxmLmdldF9kYXRhKCkpKQorCisKK2NsYXNzIF9EdW1iWE1MV3JpdGVyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBpbmRlbnRfbGV2ZWw9MCwgaW5kZW50PSJcdCIpOgorICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCisgICAgICAgIHNlbGYuc3RhY2sgPSBbXQorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgPSBpbmRlbnRfbGV2ZWwKKyAgICAgICAgc2VsZi5pbmRlbnQgPSBpbmRlbnQKKworICAgIGRlZiBiZWdpbl9lbGVtZW50KHNlbGYsIGVsZW1lbnQpOgorICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZChlbGVtZW50KQorICAgICAgICBzZWxmLndyaXRlbG4oIjwlcz4iICUgZWxlbWVudCkKKyAgICAgICAgc2VsZi5faW5kZW50X2xldmVsICs9IDEKKworICAgIGRlZiBlbmRfZWxlbWVudChzZWxmLCBlbGVtZW50KToKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2luZGVudF9sZXZlbCA+IDAKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhY2sucG9wKCkgPT0gZWxlbWVudAorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgLT0gMQorICAgICAgICBzZWxmLndyaXRlbG4oIjwvJXM+IiAlIGVsZW1lbnQpCisKKyAgICBkZWYgc2ltcGxlX2VsZW1lbnQoc2VsZiwgZWxlbWVudCwgdmFsdWU9Tm9uZSk6CisgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgdmFsdWUgPSBfZXNjYXBlKHZhbHVlKQorICAgICAgICAgICAgc2VsZi53cml0ZWxuKCI8JXM+JXM8LyVzPiIgJSAoZWxlbWVudCwgdmFsdWUsIGVsZW1lbnQpKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLndyaXRlbG4oIjwlcy8+IiAlIGVsZW1lbnQpCisKKyAgICBkZWYgd3JpdGVsbihzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgbGluZToKKyAgICAgICAgICAgICMgcGxpc3QgaGFzIGZpeGVkIGVuY29kaW5nIG9mIHV0Zi04CisKKyAgICAgICAgICAgICMgWFhYOiBpcyB0aGlzIHRlc3QgbmVlZGVkPworICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShsaW5lLCBzdHIpOgorICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLmVuY29kZSgndXRmLTgnKQorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKHNlbGYuX2luZGVudF9sZXZlbCAqIHNlbGYuaW5kZW50KQorICAgICAgICAgICAgc2VsZi5maWxlLndyaXRlKGxpbmUpCisgICAgICAgIHNlbGYuZmlsZS53cml0ZShiJ1xuJykKKworCitjbGFzcyBfUGxpc3RXcml0ZXIoX0R1bWJYTUxXcml0ZXIpOgorICAgIGRlZiBfX2luaXRfXygKKyAgICAgICAgICAgIHNlbGYsIGZpbGUsIGluZGVudF9sZXZlbD0wLCBpbmRlbnQ9YiJcdCIsIHdyaXRlSGVhZGVyPTEsCisgICAgICAgICAgICBzb3J0X2tleXM9VHJ1ZSwgc2tpcGtleXM9RmFsc2UpOgorCisgICAgICAgIGlmIHdyaXRlSGVhZGVyOgorICAgICAgICAgICAgZmlsZS53cml0ZShQTElTVEhFQURFUikKKyAgICAgICAgX0R1bWJYTUxXcml0ZXIuX19pbml0X18oc2VsZiwgZmlsZSwgaW5kZW50X2xldmVsLCBpbmRlbnQpCisgICAgICAgIHNlbGYuX3NvcnRfa2V5cyA9IHNvcnRfa2V5cworICAgICAgICBzZWxmLl9za2lwa2V5cyA9IHNraXBrZXlzCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLndyaXRlbG4oIjxwbGlzdCB2ZXJzaW9uPVwiMS4wXCI+IikKKyAgICAgICAgc2VsZi53cml0ZV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgc2VsZi53cml0ZWxuKCI8L3BsaXN0PiIpCisKKyAgICBkZWYgd3JpdGVfdmFsdWUoc2VsZiwgdmFsdWUpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgic3RyaW5nIiwgdmFsdWUpCisKKyAgICAgICAgZWxpZiB2YWx1ZSBpcyBUcnVlOgorICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgidHJ1ZSIpCisKKyAgICAgICAgZWxpZiB2YWx1ZSBpcyBGYWxzZToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImZhbHNlIikKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGludCk6CisgICAgICAgICAgICBpZiAtMSA8PCA2MyA8PSB2YWx1ZSA8IDEgPDwgNjQ6CisgICAgICAgICAgICAgICAgc2VsZi5zaW1wbGVfZWxlbWVudCgiaW50ZWdlciIsICIlZCIgJSB2YWx1ZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcih2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGZsb2F0KToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoInJlYWwiLCByZXByKHZhbHVlKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRpY3QpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9kaWN0KHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICBzZWxmLndyaXRlX2RhdGEodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgc2VsZi53cml0ZV9ieXRlcyh2YWx1ZSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIGRhdGV0aW1lLmRhdGV0aW1lKToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImRhdGUiLCBfZGF0ZV90b19zdHJpbmcodmFsdWUpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKHR1cGxlLCBsaXN0KSk6CisgICAgICAgICAgICBzZWxmLndyaXRlX2FycmF5KHZhbHVlKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInVuc3VwcG9ydGVkIHR5cGU6ICVzIiAlIHR5cGUodmFsdWUpKQorCisgICAgZGVmIHdyaXRlX2RhdGEoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYud3JpdGVfYnl0ZXMoZGF0YS5kYXRhKQorCisgICAgZGVmIHdyaXRlX2J5dGVzKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmJlZ2luX2VsZW1lbnQoImRhdGEiKQorICAgICAgICBzZWxmLl9pbmRlbnRfbGV2ZWwgLT0gMQorICAgICAgICBtYXhsaW5lbGVuZ3RoID0gbWF4KAorICAgICAgICAgICAgMTYsCisgICAgICAgICAgICA3NiAtIGxlbihzZWxmLmluZGVudC5yZXBsYWNlKGIiXHQiLCBiIiAiICogOCkgKiBzZWxmLl9pbmRlbnRfbGV2ZWwpKQorCisgICAgICAgIGZvciBsaW5lIGluIF9lbmNvZGVfYmFzZTY0KGRhdGEsIG1heGxpbmVsZW5ndGgpLnNwbGl0KGIiXG4iKToKKyAgICAgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZWxuKGxpbmUpCisgICAgICAgIHNlbGYuX2luZGVudF9sZXZlbCArPSAxCisgICAgICAgIHNlbGYuZW5kX2VsZW1lbnQoImRhdGEiKQorCisgICAgZGVmIHdyaXRlX2RpY3Qoc2VsZiwgZCk6CisgICAgICAgIGlmIGQ6CisgICAgICAgICAgICBzZWxmLmJlZ2luX2VsZW1lbnQoImRpY3QiKQorICAgICAgICAgICAgaWYgc2VsZi5fc29ydF9rZXlzOgorICAgICAgICAgICAgICAgIGl0ZW1zID0gc29ydGVkKGQuaXRlbXMoKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaXRlbXMgPSBkLml0ZW1zKCkKKworICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoa2V5LCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9za2lwa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5cyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImtleSIsIGtleSkKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICAgICAgc2VsZi5lbmRfZWxlbWVudCgiZGljdCIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2ltcGxlX2VsZW1lbnQoImRpY3QiKQorCisgICAgZGVmIHdyaXRlX2FycmF5KHNlbGYsIGFycmF5KToKKyAgICAgICAgaWYgYXJyYXk6CisgICAgICAgICAgICBzZWxmLmJlZ2luX2VsZW1lbnQoImFycmF5IikKKyAgICAgICAgICAgIGZvciB2YWx1ZSBpbiBhcnJheToKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlX3ZhbHVlKHZhbHVlKQorICAgICAgICAgICAgc2VsZi5lbmRfZWxlbWVudCgiYXJyYXkiKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNpbXBsZV9lbGVtZW50KCJhcnJheSIpCisKKworZGVmIF9pc19mbXRfeG1sKGhlYWRlcik6CisgICAgcHJlZml4ZXMgPSAoYic8P3htbCcsIGInPHBsaXN0JykKKworICAgIGZvciBwZnggaW4gcHJlZml4ZXM6CisgICAgICAgIGlmIGhlYWRlci5zdGFydHN3aXRoKHBmeCk6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBBbHNvIGNoZWNrIGZvciBhbHRlcm5hdGl2ZSBYTUwgZW5jb2RpbmdzLCB0aGlzIGlzIHNsaWdodGx5CisgICAgIyBvdmVya2lsbCBiZWNhdXNlIHRoZSBBcHBsZSB0b29scyAoYW5kIHBsaXN0bGliKSB3aWxsIG5vdAorICAgICMgZ2VuZXJhdGUgZmlsZXMgd2l0aCB0aGVzZSBlbmNvZGluZ3MuCisgICAgZm9yIGJvbSwgZW5jb2RpbmcgaW4gKAorICAgICAgICAgICAgICAgIChjb2RlY3MuQk9NX1VURjgsICJ1dGYtOCIpLAorICAgICAgICAgICAgICAgIChjb2RlY3MuQk9NX1VURjE2X0JFLCAidXRmLTE2LWJlIiksCisgICAgICAgICAgICAgICAgKGNvZGVjcy5CT01fVVRGMTZfTEUsICJ1dGYtMTYtbGUiKSwKKyAgICAgICAgICAgICAgICAjIGV4cGF0IGRvZXMgbm90IHN1cHBvcnQgdXRmLTMyCisgICAgICAgICAgICAgICAgIyhjb2RlY3MuQk9NX1VURjMyX0JFLCAidXRmLTMyLWJlIiksCisgICAgICAgICAgICAgICAgIyhjb2RlY3MuQk9NX1VURjMyX0xFLCAidXRmLTMyLWxlIiksCisgICAgICAgICAgICApOgorICAgICAgICBpZiBub3QgaGVhZGVyLnN0YXJ0c3dpdGgoYm9tKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgZm9yIHN0YXJ0IGluIHByZWZpeGVzOgorICAgICAgICAgICAgcHJlZml4ID0gYm9tICsgc3RhcnQuZGVjb2RlKCdhc2NpaScpLmVuY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIGlmIGhlYWRlcls6bGVuKHByZWZpeCldID09IHByZWZpeDoKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgcmV0dXJuIEZhbHNlCisKKyMKKyMgQmluYXJ5IFBsaXN0CisjCisKKworY2xhc3MgSW52YWxpZEZpbGVFeGNlcHRpb24gKFZhbHVlRXJyb3IpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlPSJJbnZhbGlkIGZpbGUiKToKKyAgICAgICAgVmFsdWVFcnJvci5fX2luaXRfXyhzZWxmLCBtZXNzYWdlKQorCitfQklOQVJZX0ZPUk1BVCA9IHsxOiAnQicsIDI6ICdIJywgNDogJ0wnLCA4OiAnUSd9CisKK2NsYXNzIF9CaW5hcnlQbGlzdFBhcnNlcjoKKyAgICAiIiIKKyAgICBSZWFkIG9yIHdyaXRlIGEgYmluYXJ5IHBsaXN0IGZpbGUsIGZvbGxvd2luZyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJpbmFyeQorICAgIGZvcm1hdC4gIFJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uIGluIGNhc2Ugb2YgZXJyb3IsIG90aGVyd2lzZSByZXR1cm4gdGhlCisgICAgcm9vdCBvYmplY3QuCisKKyAgICBzZWUgYWxzbzogaHR0cDovL29wZW5zb3VyY2UuYXBwbGUuY29tL3NvdXJjZS9DRi9DRi03NDQuMTgvQ0ZCaW5hcnlQTGlzdC5jCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGUpOgorICAgICAgICBzZWxmLl91c2VfYnVpbHRpbl90eXBlcyA9IHVzZV9idWlsdGluX3R5cGVzCisgICAgICAgIHNlbGYuX2RpY3RfdHlwZSA9IGRpY3RfdHlwZQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGZwKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBUaGUgYmFzaWMgZmlsZSBmb3JtYXQ6CisgICAgICAgICAgICAjIEhFQURFUgorICAgICAgICAgICAgIyBvYmplY3QuLi4KKyAgICAgICAgICAgICMgcmVmaWQtPm9mZnNldC4uLgorICAgICAgICAgICAgIyBUUkFJTEVSCisgICAgICAgICAgICBzZWxmLl9mcCA9IGZwCisgICAgICAgICAgICBzZWxmLl9mcC5zZWVrKC0zMiwgb3MuU0VFS19FTkQpCisgICAgICAgICAgICB0cmFpbGVyID0gc2VsZi5fZnAucmVhZCgzMikKKyAgICAgICAgICAgIGlmIGxlbih0cmFpbGVyKSAhPSAzMjoKKyAgICAgICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisgICAgICAgICAgICAoCisgICAgICAgICAgICAgICAgb2Zmc2V0X3NpemUsIHNlbGYuX3JlZl9zaXplLCBudW1fb2JqZWN0cywgdG9wX29iamVjdCwKKyAgICAgICAgICAgICAgICBvZmZzZXRfdGFibGVfb2Zmc2V0CisgICAgICAgICAgICApID0gc3RydWN0LnVucGFjaygnPjZ4QkJRUVEnLCB0cmFpbGVyKQorICAgICAgICAgICAgc2VsZi5fZnAuc2VlayhvZmZzZXRfdGFibGVfb2Zmc2V0KQorICAgICAgICAgICAgc2VsZi5fb2JqZWN0X29mZnNldHMgPSBzZWxmLl9yZWFkX2ludHMobnVtX29iamVjdHMsIG9mZnNldF9zaXplKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfb2JqZWN0KHNlbGYuX29iamVjdF9vZmZzZXRzW3RvcF9vYmplY3RdKQorCisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSW5kZXhFcnJvciwgc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHJhaXNlIEludmFsaWRGaWxlRXhjZXB0aW9uKCkKKworICAgIGRlZiBfZ2V0X3NpemUoc2VsZiwgdG9rZW5MKToKKyAgICAgICAgIiIiIHJldHVybiB0aGUgc2l6ZSBvZiB0aGUgbmV4dCBvYmplY3QuIiIiCisgICAgICAgIGlmIHRva2VuTCA9PSAweEY6CisgICAgICAgICAgICBtID0gc2VsZi5fZnAucmVhZCgxKVswXSAmIDB4MworICAgICAgICAgICAgcyA9IDEgPDwgbQorICAgICAgICAgICAgZiA9ICc+JyArIF9CSU5BUllfRk9STUFUW3NdCisgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjayhmLCBzZWxmLl9mcC5yZWFkKHMpKVswXQorCisgICAgICAgIHJldHVybiB0b2tlbkwKKworICAgIGRlZiBfcmVhZF9pbnRzKHNlbGYsIG4sIHNpemUpOgorICAgICAgICBkYXRhID0gc2VsZi5fZnAucmVhZChzaXplICogbikKKyAgICAgICAgaWYgc2l6ZSBpbiBfQklOQVJZX0ZPUk1BVDoKKyAgICAgICAgICAgIHJldHVybiBzdHJ1Y3QudW5wYWNrKCc+JyArIF9CSU5BUllfRk9STUFUW3NpemVdICogbiwgZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShpbnQuZnJvbV9ieXRlcyhkYXRhW2k6IGkgKyBzaXplXSwgJ2JpZycpCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgc2l6ZSAqIG4sIHNpemUpKQorCisgICAgZGVmIF9yZWFkX3JlZnMoc2VsZiwgbik6CisgICAgICAgIHJldHVybiBzZWxmLl9yZWFkX2ludHMobiwgc2VsZi5fcmVmX3NpemUpCisKKyAgICBkZWYgX3JlYWRfb2JqZWN0KHNlbGYsIG9mZnNldCk6CisgICAgICAgICIiIgorICAgICAgICByZWFkIHRoZSBvYmplY3QgYXQgb2Zmc2V0LgorCisgICAgICAgIE1heSByZWN1cnNpdmVseSByZWFkIHN1Yi1vYmplY3RzIChjb250ZW50IG9mIGFuIGFycmF5L2RpY3Qvc2V0KQorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fZnAuc2VlayhvZmZzZXQpCisgICAgICAgIHRva2VuID0gc2VsZi5fZnAucmVhZCgxKVswXQorICAgICAgICB0b2tlbkgsIHRva2VuTCA9IHRva2VuICYgMHhGMCwgdG9rZW4gJiAweDBGCisKKyAgICAgICAgaWYgdG9rZW4gPT0gMHgwMDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDA4OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZWxpZiB0b2tlbiA9PSAweDA5OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIFRoZSByZWZlcmVuY2VkIHNvdXJjZSBjb2RlIGFsc28gbWVudGlvbnMgVVJMICgweDBjLCAweDBkKSBhbmQKKyAgICAgICAgIyBVVUlEICgweDBlKSwgYnV0IG5laXRoZXIgY2FuIGJlIGdlbmVyYXRlZCB1c2luZyB0aGUgQ29jb2EgbGlicmFyaWVzLgorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgwZjoKKyAgICAgICAgICAgIHJldHVybiBiJycKKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweDEwOiAgIyBpbnQKKyAgICAgICAgICAgIHJldHVybiBpbnQuZnJvbV9ieXRlcyhzZWxmLl9mcC5yZWFkKDEgPDwgdG9rZW5MKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmlnJywgc2lnbmVkPXRva2VuTCA+PSAzKQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgyMjogIyByZWFsCisgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPmYnLCBzZWxmLl9mcC5yZWFkKDQpKVswXQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgyMzogIyByZWFsCisgICAgICAgICAgICByZXR1cm4gc3RydWN0LnVucGFjaygnPmQnLCBzZWxmLl9mcC5yZWFkKDgpKVswXQorCisgICAgICAgIGVsaWYgdG9rZW4gPT0gMHgzMzogICMgZGF0ZQorICAgICAgICAgICAgZiA9IHN0cnVjdC51bnBhY2soJz5kJywgc2VsZi5fZnAucmVhZCg4KSlbMF0KKyAgICAgICAgICAgICMgdGltZXN0YW1wIDAgb2YgYmluYXJ5IHBsaXN0cyBjb3JyZXNwb25kcyB0byAxLzEvMjAwMQorICAgICAgICAgICAgIyAoeWVhciBvZiBNYWMgT1MgWCAxMC4wKSwgaW5zdGVhZCBvZiAxLzEvMTk3MC4KKyAgICAgICAgICAgIHJldHVybiBkYXRldGltZS5kYXRldGltZS51dGNmcm9tdGltZXN0YW1wKGYgKyAoMzEgKiAzNjUgKyA4KSAqIDg2NDAwKQorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NDA6ICAjIGRhdGEKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICBpZiBzZWxmLl91c2VfYnVpbHRpbl90eXBlczoKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZnAucmVhZChzKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gRGF0YShzZWxmLl9mcC5yZWFkKHMpKQorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NTA6ICAjIGFzY2lpIHN0cmluZworICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIHJlc3VsdCA9ICBzZWxmLl9mcC5yZWFkKHMpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4NjA6ICAjIHVuaWNvZGUgc3RyaW5nCisgICAgICAgICAgICBzID0gc2VsZi5fZ2V0X3NpemUodG9rZW5MKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ZwLnJlYWQocyAqIDIpLmRlY29kZSgndXRmLTE2YmUnKQorCisgICAgICAgICMgdG9rZW5IID09IDB4ODAgaXMgZG9jdW1lbnRlZCBhcyAnVUlEJyBhbmQgYXBwZWFycyB0byBiZSB1c2VkIGZvcgorICAgICAgICAjIGtleWVkLWFyY2hpdmluZywgbm90IGluIHBsaXN0cy4KKworICAgICAgICBlbGlmIHRva2VuSCA9PSAweEEwOiAgIyBhcnJheQorICAgICAgICAgICAgcyA9IHNlbGYuX2dldF9zaXplKHRva2VuTCkKKyAgICAgICAgICAgIG9ial9yZWZzID0gc2VsZi5fcmVhZF9yZWZzKHMpCisgICAgICAgICAgICByZXR1cm4gW3NlbGYuX3JlYWRfb2JqZWN0KHNlbGYuX29iamVjdF9vZmZzZXRzW3hdKQorICAgICAgICAgICAgICAgIGZvciB4IGluIG9ial9yZWZzXQorCisgICAgICAgICMgdG9rZW5IID09IDB4QjAgaXMgZG9jdW1lbnRlZCBhcyAnb3Jkc2V0JywgYnV0IGlzIG5vdCBhY3R1YWxseQorICAgICAgICAjIGltcGxlbWVudGVkIGluIHRoZSBBcHBsZSByZWZlcmVuY2UgY29kZS4KKworICAgICAgICAjIHRva2VuSCA9PSAweEMwIGlzIGRvY3VtZW50ZWQgYXMgJ3NldCcsIGJ1dCBzZXRzIGNhbm5vdCBiZSB1c2VkIGluCisgICAgICAgICMgcGxpc3RzLgorCisgICAgICAgIGVsaWYgdG9rZW5IID09IDB4RDA6ICAjIGRpY3QKKyAgICAgICAgICAgIHMgPSBzZWxmLl9nZXRfc2l6ZSh0b2tlbkwpCisgICAgICAgICAgICBrZXlfcmVmcyA9IHNlbGYuX3JlYWRfcmVmcyhzKQorICAgICAgICAgICAgb2JqX3JlZnMgPSBzZWxmLl9yZWFkX3JlZnMocykKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2RpY3RfdHlwZSgpCisgICAgICAgICAgICBmb3IgaywgbyBpbiB6aXAoa2V5X3JlZnMsIG9ial9yZWZzKToKKyAgICAgICAgICAgICAgICByZXN1bHRbc2VsZi5fcmVhZF9vYmplY3Qoc2VsZi5fb2JqZWN0X29mZnNldHNba10pCisgICAgICAgICAgICAgICAgICAgIF0gPSBzZWxmLl9yZWFkX29iamVjdChzZWxmLl9vYmplY3Rfb2Zmc2V0c1tvXSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQKKworICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisKK2RlZiBfY291bnRfdG9fc2l6ZShjb3VudCk6CisgICAgaWYgY291bnQgPCAxIDw8IDg6CisgICAgICAgIHJldHVybiAxCisKKyAgICBlbGlmIGNvdW50IDwgMSA8PCAxNjoKKyAgICAgICAgcmV0dXJuIDIKKworICAgIGVsaWYgY291bnQgPDwgMSA8PCAzMjoKKyAgICAgICAgcmV0dXJuIDQKKworICAgIGVsc2U6CisgICAgICAgIHJldHVybiA4CisKK2NsYXNzIF9CaW5hcnlQbGlzdFdyaXRlciAob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnAsIHNvcnRfa2V5cywgc2tpcGtleXMpOgorICAgICAgICBzZWxmLl9mcCA9IGZwCisgICAgICAgIHNlbGYuX3NvcnRfa2V5cyA9IHNvcnRfa2V5cworICAgICAgICBzZWxmLl9za2lwa2V5cyA9IHNraXBrZXlzCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgdmFsdWUpOgorCisgICAgICAgICMgRmxhdHRlbmVkIG9iamVjdCBsaXN0OgorICAgICAgICBzZWxmLl9vYmpsaXN0ID0gW10KKworICAgICAgICAjIE1hcHBpbmdzIGZyb20gb2JqZWN0LT5vYmplY3RpZAorICAgICAgICAjIEZpcnN0IGRpY3QgaGFzICh0eXBlKG9iamVjdCksIG9iamVjdCkgYXMgdGhlIGtleSwKKyAgICAgICAgIyBzZWNvbmQgZGljdCBpcyB1c2VkIHdoZW4gb2JqZWN0IGlzIG5vdCBoYXNoYWJsZSBhbmQKKyAgICAgICAgIyBoYXMgaWQob2JqZWN0KSBhcyB0aGUga2V5LgorICAgICAgICBzZWxmLl9vYmp0YWJsZSA9IHt9CisgICAgICAgIHNlbGYuX29iamlkdGFibGUgPSB7fQorCisgICAgICAgICMgQ3JlYXRlIGxpc3Qgb2YgYWxsIG9iamVjdHMgaW4gdGhlIHBsaXN0CisgICAgICAgIHNlbGYuX2ZsYXR0ZW4odmFsdWUpCisKKyAgICAgICAgIyBTaXplIG9mIG9iamVjdCByZWZlcmVuY2VzIGluIHNlcmlhbGl6ZWQgY29udGFpbmVycworICAgICAgICAjIGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBwbGlzdC4KKyAgICAgICAgbnVtX29iamVjdHMgPSBsZW4oc2VsZi5fb2JqbGlzdCkKKyAgICAgICAgc2VsZi5fb2JqZWN0X29mZnNldHMgPSBbMF0qbnVtX29iamVjdHMKKyAgICAgICAgc2VsZi5fcmVmX3NpemUgPSBfY291bnRfdG9fc2l6ZShudW1fb2JqZWN0cykKKworICAgICAgICBzZWxmLl9yZWZfZm9ybWF0ID0gX0JJTkFSWV9GT1JNQVRbc2VsZi5fcmVmX3NpemVdCisKKyAgICAgICAgIyBXcml0ZSBmaWxlIGhlYWRlcgorICAgICAgICBzZWxmLl9mcC53cml0ZShiJ2JwbGlzdDAwJykKKworICAgICAgICAjIFdyaXRlIG9iamVjdCBsaXN0CisgICAgICAgIGZvciBvYmogaW4gc2VsZi5fb2JqbGlzdDoKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX29iamVjdChvYmopCisKKyAgICAgICAgIyBXcml0ZSByZWZudW0tPm9iamVjdCBvZmZzZXQgdGFibGUKKyAgICAgICAgdG9wX29iamVjdCA9IHNlbGYuX2dldHJlZm51bSh2YWx1ZSkKKyAgICAgICAgb2Zmc2V0X3RhYmxlX29mZnNldCA9IHNlbGYuX2ZwLnRlbGwoKQorICAgICAgICBvZmZzZXRfc2l6ZSA9IF9jb3VudF90b19zaXplKG9mZnNldF90YWJsZV9vZmZzZXQpCisgICAgICAgIG9mZnNldF9mb3JtYXQgPSAnPicgKyBfQklOQVJZX0ZPUk1BVFtvZmZzZXRfc2l6ZV0gKiBudW1fb2JqZWN0cworICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjayhvZmZzZXRfZm9ybWF0LCAqc2VsZi5fb2JqZWN0X29mZnNldHMpKQorCisgICAgICAgICMgV3JpdGUgdHJhaWxlcgorICAgICAgICBzb3J0X3ZlcnNpb24gPSAwCisgICAgICAgIHRyYWlsZXIgPSAoCisgICAgICAgICAgICBzb3J0X3ZlcnNpb24sIG9mZnNldF9zaXplLCBzZWxmLl9yZWZfc2l6ZSwgbnVtX29iamVjdHMsCisgICAgICAgICAgICB0b3Bfb2JqZWN0LCBvZmZzZXRfdGFibGVfb2Zmc2V0CisgICAgICAgICkKKyAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz41eEJCQlFRUScsICp0cmFpbGVyKSkKKworICAgIGRlZiBfZmxhdHRlbihzZWxmLCB2YWx1ZSk6CisgICAgICAgICMgRmlyc3QgY2hlY2sgaWYgdGhlIG9iamVjdCBpcyBpbiB0aGUgb2JqZWN0IHRhYmxlLCBub3QgdXNlZCBmb3IKKyAgICAgICAgIyBjb250YWluZXJzIHRvIGVuc3VyZSB0aGF0IHR3byBzdWJjb250YWluZXJzIHdpdGggdGhlIHNhbWUgY29udGVudHMKKyAgICAgICAgIyB3aWxsIGJlIHNlcmlhbGl6ZWQgYXMgZGlzdGluY3QgdmFsdWVzLgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCAoCisgICAgICAgICAgICAgICAgc3RyLCBpbnQsIGZsb2F0LCBkYXRldGltZS5kYXRldGltZSwgYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgaWYgKHR5cGUodmFsdWUpLCB2YWx1ZSkgaW4gc2VsZi5fb2JqdGFibGU6CisgICAgICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBEYXRhKToKKyAgICAgICAgICAgIGlmICh0eXBlKHZhbHVlLmRhdGEpLCB2YWx1ZS5kYXRhKSBpbiBzZWxmLl9vYmp0YWJsZToKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIEFkZCB0byBvYmplY3RyZWZlcmVuY2UgbWFwCisgICAgICAgIHJlZm51bSA9IGxlbihzZWxmLl9vYmpsaXN0KQorICAgICAgICBzZWxmLl9vYmpsaXN0LmFwcGVuZCh2YWx1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgRGF0YSk6CisgICAgICAgICAgICAgICAgc2VsZi5fb2JqdGFibGVbKHR5cGUodmFsdWUuZGF0YSksIHZhbHVlLmRhdGEpXSA9IHJlZm51bQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZSksIHZhbHVlKV0gPSByZWZudW0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuX29iamlkdGFibGVbaWQodmFsdWUpXSA9IHJlZm51bQorCisgICAgICAgICMgQW5kIGZpbmFsbHkgcmVjdXJzZSBpbnRvIGNvbnRhaW5lcnMKKyAgICAgICAgaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGljdCk6CisgICAgICAgICAgICBrZXlzID0gW10KKyAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICBpdGVtcyA9IHZhbHVlLml0ZW1zKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX3NvcnRfa2V5czoKKyAgICAgICAgICAgICAgICBpdGVtcyA9IHNvcnRlZChpdGVtcykKKworICAgICAgICAgICAgZm9yIGssIHYgaW4gaXRlbXM6CisgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2Uoaywgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5fc2tpcGtleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImtleXMgbXVzdCBiZSBzdHJpbmdzIikKKyAgICAgICAgICAgICAgICBrZXlzLmFwcGVuZChrKQorICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQodikKKworICAgICAgICAgICAgZm9yIG8gaW4gaXRlcnRvb2xzLmNoYWluKGtleXMsIHZhbHVlcyk6CisgICAgICAgICAgICAgICAgc2VsZi5fZmxhdHRlbihvKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICBmb3IgbyBpbiB2YWx1ZToKKyAgICAgICAgICAgICAgICBzZWxmLl9mbGF0dGVuKG8pCisKKyAgICBkZWYgX2dldHJlZm51bShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZS5kYXRhKSwgdmFsdWUuZGF0YSldCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmp0YWJsZVsodHlwZSh2YWx1ZSksIHZhbHVlKV0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9vYmppZHRhYmxlW2lkKHZhbHVlKV0KKworICAgIGRlZiBfd3JpdGVfc2l6ZShzZWxmLCB0b2tlbiwgc2l6ZSk6CisgICAgICAgIGlmIHNpemUgPCAxNToKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QicsIHRva2VuIHwgc2l6ZSkpCisKKyAgICAgICAgZWxpZiBzaXplIDwgMSA8PCA4OgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQkInLCB0b2tlbiB8IDB4RiwgMHgxMCwgc2l6ZSkpCisKKyAgICAgICAgZWxpZiBzaXplIDwgMSA8PCAxNjoKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkJIJywgdG9rZW4gfCAweEYsIDB4MTEsIHNpemUpKQorCisgICAgICAgIGVsaWYgc2l6ZSA8IDEgPDwgMzI6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJCTCcsIHRva2VuIHwgMHhGLCAweDEyLCBzaXplKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CQlEnLCB0b2tlbiB8IDB4RiwgMHgxMywgc2l6ZSkpCisKKyAgICBkZWYgX3dyaXRlX29iamVjdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJlZiA9IHNlbGYuX2dldHJlZm51bSh2YWx1ZSkKKyAgICAgICAgc2VsZi5fb2JqZWN0X29mZnNldHNbcmVmXSA9IHNlbGYuX2ZwLnRlbGwoKQorICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoYidceDAwJykKKworICAgICAgICBlbGlmIHZhbHVlIGlzIEZhbHNlOgorICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoYidceDA4JykKKworICAgICAgICBlbGlmIHZhbHVlIGlzIFRydWU6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShiJ1x4MDknKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgaW50KToKKyAgICAgICAgICAgIGlmIHZhbHVlIDwgMDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QnEnLCAweDEzLCB2YWx1ZSkpCisgICAgICAgICAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT3ZlcmZsb3dFcnJvcih2YWx1ZSkgZnJvbSBOb25lCisgICAgICAgICAgICBlbGlmIHZhbHVlIDwgMSA8PCA4OgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QkInLCAweDEwLCB2YWx1ZSkpCisgICAgICAgICAgICBlbGlmIHZhbHVlIDwgMSA8PCAxNjoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJIJywgMHgxMSwgdmFsdWUpKQorICAgICAgICAgICAgZWxpZiB2YWx1ZSA8IDEgPDwgMzI6CisgICAgICAgICAgICAgICAgc2VsZi5fZnAud3JpdGUoc3RydWN0LnBhY2soJz5CTCcsIDB4MTIsIHZhbHVlKSkKKyAgICAgICAgICAgIGVsaWYgdmFsdWUgPCAxIDw8IDYzOgorICAgICAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QlEnLCAweDEzLCB2YWx1ZSkpCisgICAgICAgICAgICBlbGlmIHZhbHVlIDwgMSA8PCA2NDoKKyAgICAgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShiJ1x4MTQnICsgdmFsdWUudG9fYnl0ZXMoMTYsICdiaWcnLCBzaWduZWQ9VHJ1ZSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIE92ZXJmbG93RXJyb3IodmFsdWUpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBmbG9hdCk6CisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPkJkJywgMHgyMywgdmFsdWUpKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgZGF0ZXRpbWUuZGF0ZXRpbWUpOgorICAgICAgICAgICAgZiA9ICh2YWx1ZSAtIGRhdGV0aW1lLmRhdGV0aW1lKDIwMDEsIDEsIDEpKS50b3RhbF9zZWNvbmRzKCkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+QmQnLCAweDMzLCBmKSkKKworICAgICAgICBlbGlmIGlzaW5zdGFuY2UodmFsdWUsIERhdGEpOgorICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDQwLCBsZW4odmFsdWUuZGF0YSkpCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZSh2YWx1ZS5kYXRhKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NpemUoMHg0MCwgbGVuKHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHZhbHVlKQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0ID0gdmFsdWUuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDUwLCBsZW4odmFsdWUpKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICB0ID0gdmFsdWUuZW5jb2RlKCd1dGYtMTZiZScpCisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2l6ZSgweDYwLCBsZW4odmFsdWUpKQorCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZSh0KQorCisgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgKGxpc3QsIHR1cGxlKSk6CisgICAgICAgICAgICByZWZzID0gW3NlbGYuX2dldHJlZm51bShvKSBmb3IgbyBpbiB2YWx1ZV0KKyAgICAgICAgICAgIHMgPSBsZW4ocmVmcykKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NpemUoMHhBMCwgcykKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+JyArIHNlbGYuX3JlZl9mb3JtYXQgKiBzLCAqcmVmcykpCisKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHZhbHVlLCBkaWN0KToKKyAgICAgICAgICAgIGtleVJlZnMsIHZhbFJlZnMgPSBbXSwgW10KKworICAgICAgICAgICAgaWYgc2VsZi5fc29ydF9rZXlzOgorICAgICAgICAgICAgICAgIHJvb3RJdGVtcyA9IHNvcnRlZCh2YWx1ZS5pdGVtcygpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByb290SXRlbXMgPSB2YWx1ZS5pdGVtcygpCisKKyAgICAgICAgICAgIGZvciBrLCB2IGluIHJvb3RJdGVtczoKKyAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShrLCBzdHIpOgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9za2lwa2V5czoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigia2V5cyBtdXN0IGJlIHN0cmluZ3MiKQorICAgICAgICAgICAgICAgIGtleVJlZnMuYXBwZW5kKHNlbGYuX2dldHJlZm51bShrKSkKKyAgICAgICAgICAgICAgICB2YWxSZWZzLmFwcGVuZChzZWxmLl9nZXRyZWZudW0odikpCisKKyAgICAgICAgICAgIHMgPSBsZW4oa2V5UmVmcykKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NpemUoMHhEMCwgcykKKyAgICAgICAgICAgIHNlbGYuX2ZwLndyaXRlKHN0cnVjdC5wYWNrKCc+JyArIHNlbGYuX3JlZl9mb3JtYXQgKiBzLCAqa2V5UmVmcykpCisgICAgICAgICAgICBzZWxmLl9mcC53cml0ZShzdHJ1Y3QucGFjaygnPicgKyBzZWxmLl9yZWZfZm9ybWF0ICogcywgKnZhbFJlZnMpKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IodmFsdWUpCisKKworZGVmIF9pc19mbXRfYmluYXJ5KGhlYWRlcik6CisgICAgcmV0dXJuIGhlYWRlcls6OF0gPT0gYidicGxpc3QwMCcKKworCisjCisjIEdlbmVyaWMgYml0cworIworCitfRk9STUFUUz17CisgICAgRk1UX1hNTDogZGljdCgKKyAgICAgICAgZGV0ZWN0PV9pc19mbXRfeG1sLAorICAgICAgICBwYXJzZXI9X1BsaXN0UGFyc2VyLAorICAgICAgICB3cml0ZXI9X1BsaXN0V3JpdGVyLAorICAgICksCisgICAgRk1UX0JJTkFSWTogZGljdCgKKyAgICAgICAgZGV0ZWN0PV9pc19mbXRfYmluYXJ5LAorICAgICAgICBwYXJzZXI9X0JpbmFyeVBsaXN0UGFyc2VyLAorICAgICAgICB3cml0ZXI9X0JpbmFyeVBsaXN0V3JpdGVyLAorICAgICkKK30KKworCitkZWYgbG9hZChmcCwgKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KToKKyAgICAiIiJSZWFkIGEgLnBsaXN0IGZpbGUuICdmcCcgc2hvdWxkIGJlIChyZWFkYWJsZSkgZmlsZSBvYmplY3QuCisgICAgUmV0dXJuIHRoZSB1bnBhY2tlZCByb290IG9iamVjdCAod2hpY2ggdXN1YWxseSBpcyBhIGRpY3Rpb25hcnkpLgorICAgICIiIgorICAgIGlmIGZtdCBpcyBOb25lOgorICAgICAgICBoZWFkZXIgPSBmcC5yZWFkKDMyKQorICAgICAgICBmcC5zZWVrKDApCisgICAgICAgIGZvciBpbmZvIGluIF9GT1JNQVRTLnZhbHVlcygpOgorICAgICAgICAgICAgaWYgaW5mb1snZGV0ZWN0J10oaGVhZGVyKToKKyAgICAgICAgICAgICAgICBQID0gaW5mb1sncGFyc2VyJ10KKyAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBJbnZhbGlkRmlsZUV4Y2VwdGlvbigpCisKKyAgICBlbHNlOgorICAgICAgICBQID0gX0ZPUk1BVFNbZm10XVsncGFyc2VyJ10KKworICAgIHAgPSBQKHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzLCBkaWN0X3R5cGU9ZGljdF90eXBlKQorICAgIHJldHVybiBwLnBhcnNlKGZwKQorCisKK2RlZiBsb2Fkcyh2YWx1ZSwgKiwgZm10PU5vbmUsIHVzZV9idWlsdGluX3R5cGVzPVRydWUsIGRpY3RfdHlwZT1kaWN0KToKKyAgICAiIiJSZWFkIGEgLnBsaXN0IGZpbGUgZnJvbSBhIGJ5dGVzIG9iamVjdC4KKyAgICBSZXR1cm4gdGhlIHVucGFja2VkIHJvb3Qgb2JqZWN0ICh3aGljaCB1c3VhbGx5IGlzIGEgZGljdGlvbmFyeSkuCisgICAgIiIiCisgICAgZnAgPSBCeXRlc0lPKHZhbHVlKQorICAgIHJldHVybiBsb2FkKAorICAgICAgICBmcCwgZm10PWZtdCwgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMsIGRpY3RfdHlwZT1kaWN0X3R5cGUpCisKKworZGVmIGR1bXAodmFsdWUsIGZwLCAqLCBmbXQ9Rk1UX1hNTCwgc29ydF9rZXlzPVRydWUsIHNraXBrZXlzPUZhbHNlKToKKyAgICAiIiJXcml0ZSAndmFsdWUnIHRvIGEgLnBsaXN0IGZpbGUuICdmcCcgc2hvdWxkIGJlIGEgKHdyaXRhYmxlKQorICAgIGZpbGUgb2JqZWN0LgorICAgICIiIgorICAgIGlmIGZtdCBub3QgaW4gX0ZPUk1BVFM6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlVuc3VwcG9ydGVkIGZvcm1hdDogJXIiJShmbXQsKSkKKworICAgIHdyaXRlciA9IF9GT1JNQVRTW2ZtdF1bIndyaXRlciJdKGZwLCBzb3J0X2tleXM9c29ydF9rZXlzLCBza2lwa2V5cz1za2lwa2V5cykKKyAgICB3cml0ZXIud3JpdGUodmFsdWUpCisKKworZGVmIGR1bXBzKHZhbHVlLCAqLCBmbXQ9Rk1UX1hNTCwgc2tpcGtleXM9RmFsc2UsIHNvcnRfa2V5cz1UcnVlKToKKyAgICAiIiJSZXR1cm4gYSBieXRlcyBvYmplY3Qgd2l0aCB0aGUgY29udGVudHMgZm9yIGEgLnBsaXN0IGZpbGUuCisgICAgIiIiCisgICAgZnAgPSBCeXRlc0lPKCkKKyAgICBkdW1wKHZhbHVlLCBmcCwgZm10PWZtdCwgc2tpcGtleXM9c2tpcGtleXMsIHNvcnRfa2V5cz1zb3J0X2tleXMpCisgICAgcmV0dXJuIGZwLmdldHZhbHVlKCkKZGlmZiAtLWdpdCBhL0xpYi9wb3BsaWIucHkgYi9MaWIvcG9wbGliLnB5CmluZGV4IDQzZjgzMDUuLjQ5MTU2MjggMTAwNjQ0Ci0tLSBhL0xpYi9wb3BsaWIucHkKKysrIGIvTGliL3BvcGxpYi5weQpAQCAtMTMsNyArMTMsMTUgQEAKIAogIyBJbXBvcnRzCiAKLWltcG9ydCByZSwgc29ja2V0CitpbXBvcnQgZXJybm8KK2ltcG9ydCByZQoraW1wb3J0IHNvY2tldAorCit0cnk6CisgICAgaW1wb3J0IHNzbAorICAgIEhBVkVfU1NMID0gVHJ1ZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIEhBVkVfU1NMID0gRmFsc2UKIAogX19hbGxfXyA9IFsiUE9QMyIsImVycm9yX3Byb3RvIl0KIApAQCAtMzMsNyArNDEsNyBAQAogQ1JMRiA9IENSK0xGCiAKICMgbWF4aW1hbCBsaW5lIGxlbmd0aCB3aGVuIGNhbGxpbmcgcmVhZGxpbmUoKS4gVGhpcyBpcyB0byBwcmV2ZW50Ci0jIHJlYWRpbmcgYXJiaXRyYXJ5IGxlbmdodCBsaW5lcy4gUkZDIDE5MzkgbGltaXRzIFBPUDMgbGluZSBsZW5ndGggdG8KKyMgcmVhZGluZyBhcmJpdHJhcnkgbGVuZ3RoIGxpbmVzLiBSRkMgMTkzOSBsaW1pdHMgUE9QMyBsaW5lIGxlbmd0aCB0bwogIyA1MTIgY2hhcmFjdGVycywgaW5jbHVkaW5nIENSTEYuIFdlIGhhdmUgc2VsZWN0ZWQgMjA0OCBqdXN0IHRvIGJlIG9uCiAjIHRoZSBzYWZlIHNpZGUuCiBfTUFYTElORSA9IDIwNDgKQEAgLTYxLDYgKzY5LDggQEAKICAgICAgICAgICAgIEFQT1AgbmFtZSBkaWdlc3QgICAgICAgIGFwb3AobmFtZSwgZGlnZXN0KQogICAgICAgICAgICAgVE9QIG1zZyBuICAgICAgICAgICAgICAgdG9wKG1zZywgbikKICAgICAgICAgICAgIFVJREwgW21zZ10gICAgICAgICAgICAgIHVpZGwobXNnID0gTm9uZSkKKyAgICAgICAgICAgIENBUEEgICAgICAgICAgICAgICAgICAgIGNhcGEoKQorICAgICAgICAgICAgU1RMUyAgICAgICAgICAgICAgICAgICAgc3RscygpCiAKICAgICBSYWlzZXMgb25lIGV4Y2VwdGlvbjogJ2Vycm9yX3Byb3RvJy4KIApAQCAtODcsNiArOTcsNyBAQAogICAgICAgICAgICAgICAgICB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCk6CiAgICAgICAgIHNlbGYuaG9zdCA9IGhvc3QKICAgICAgICAgc2VsZi5wb3J0ID0gcG9ydAorICAgICAgICBzZWxmLl90bHNfZXN0YWJsaXNoZWQgPSBGYWxzZQogICAgICAgICBzZWxmLnNvY2sgPSBzZWxmLl9jcmVhdGVfc29ja2V0KHRpbWVvdXQpCiAgICAgICAgIHNlbGYuZmlsZSA9IHNlbGYuc29jay5tYWtlZmlsZSgncmInKQogICAgICAgICBzZWxmLl9kZWJ1Z2dpbmcgPSAwCkBAIC0xMjUsNyArMTM2LDcgQEAKICAgICAgICAgIyBzbyBvbmx5IHBvc3NpYmlsaXRpZXMgYXJlIC4uLkxGLCAuLi5DUkxGLCBDUi4uLkxGCiAgICAgICAgIGlmIGxpbmVbLTI6XSA9PSBDUkxGOgogICAgICAgICAgICAgcmV0dXJuIGxpbmVbOi0yXSwgb2N0ZXRzCi0gICAgICAgIGlmIGxpbmVbMF0gPT0gQ1I6CisgICAgICAgIGlmIGxpbmVbOjFdID09IENSOgogICAgICAgICAgICAgcmV0dXJuIGxpbmVbMTotMV0sIG9jdGV0cwogICAgICAgICByZXR1cm4gbGluZVs6LTFdLCBvY3RldHMKIApAQCAtMjY1LDExICsyNzYsMjMgQEAKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIiIiQ2xvc2UgdGhlIGNvbm5lY3Rpb24gd2l0aG91dCBhc3N1bWluZyBhbnl0aGluZyBhYm91dCBpdC4iIiIKLSAgICAgICAgaWYgc2VsZi5maWxlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgaWYgc2VsZi5zb2NrIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKLSAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmaWxlID0gc2VsZi5maWxlCisgICAgICAgICAgICBzZWxmLmZpbGUgPSBOb25lCisgICAgICAgICAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc29jayA9IHNlbGYuc29jaworICAgICAgICAgICAgc2VsZi5zb2NrID0gTm9uZQorICAgICAgICAgICAgaWYgc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNvY2suc2h1dGRvd24oc29ja2V0LlNIVVRfUkRXUikKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAjIFRoZSBzZXJ2ZXIgbWlnaHQgYWxyZWFkeSBoYXZlIGNsb3NlZCB0aGUgY29ubmVjdGlvbgorICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKIAogICAgICNfX2RlbF9fID0gcXVpdAogCkBAIC0zMjQsMjEgKzM0Nyw3MSBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3J0Y21kKCdVSURMICVzJyAlIHdoaWNoKQogICAgICAgICByZXR1cm4gc2VsZi5fbG9uZ2NtZCgnVUlETCcpCiAKLXRyeToKLSAgICBpbXBvcnQgc3NsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcGFzcwotZWxzZToKKworICAgIGRlZiBjYXBhKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gc2VydmVyIGNhcGFiaWxpdGllcyAoUkZDIDI0NDkpIGFzIGEgZGljdGlvbmFyeQorICAgICAgICA+Pj4gYz1wb3BsaWIuUE9QMygnbG9jYWxob3N0JykKKyAgICAgICAgPj4+IGMuY2FwYSgpCisgICAgICAgIHsnSU1QTEVNRU5UQVRJT04nOiBbJ0N5cnVzJywgJ1BPUDMnLCAnc2VydmVyJywgJ3YyLjIuMTInXSwKKyAgICAgICAgICdUT1AnOiBbXSwgJ0xPR0lOLURFTEFZJzogWycwJ10sICdBVVRILVJFU1AtQ09ERSc6IFtdLAorICAgICAgICAgJ0VYUElSRSc6IFsnTkVWRVInXSwgJ1VTRVInOiBbXSwgJ1NUTFMnOiBbXSwgJ1BJUEVMSU5JTkcnOiBbXSwKKyAgICAgICAgICdVSURMJzogW10sICdSRVNQLUNPREVTJzogW119CisgICAgICAgID4+PgorCisgICAgICAgIFJlYWxseSwgYWNjb3JkaW5nIHRvIFJGQyAyNDQ5LCB0aGUgY3lydXMgZm9sa3Mgc2hvdWxkIGF2b2lkCisgICAgICAgIGhhdmluZyB0aGUgaW1wbGVtZW50YXRpb24gc3BsaXQgaW50byBtdWx0aXBsZSBhcmd1bWVudHMuLi4KKyAgICAgICAgIiIiCisgICAgICAgIGRlZiBfcGFyc2VjYXAobGluZSk6CisgICAgICAgICAgICBsc3QgPSBsaW5lLmRlY29kZSgnYXNjaWknKS5zcGxpdCgpCisgICAgICAgICAgICByZXR1cm4gbHN0WzBdLCBsc3RbMTpdCisKKyAgICAgICAgY2FwcyA9IHt9CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3AgPSBzZWxmLl9sb25nY21kKCdDQVBBJykKKyAgICAgICAgICAgIHJhd2NhcHMgPSByZXNwWzFdCisgICAgICAgICAgICBmb3IgY2FwbGluZSBpbiByYXdjYXBzOgorICAgICAgICAgICAgICAgIGNhcG5tLCBjYXBhcmdzID0gX3BhcnNlY2FwKGNhcGxpbmUpCisgICAgICAgICAgICAgICAgY2Fwc1tjYXBubV0gPSBjYXBhcmdzCisgICAgICAgIGV4Y2VwdCBlcnJvcl9wcm90byBhcyBfZXJyOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgQ0FQQSBub3Qgc3VwcG9ydGVkIGJ5IHNlcnZlcicpCisgICAgICAgIHJldHVybiBjYXBzCisKKworICAgIGRlZiBzdGxzKHNlbGYsIGNvbnRleHQ9Tm9uZSk6CisgICAgICAgICIiIlN0YXJ0IGEgVExTIHNlc3Npb24gb24gdGhlIGFjdGl2ZSBjb25uZWN0aW9uIGFzIHNwZWNpZmllZCBpbiBSRkMgMjU5NS4KKworICAgICAgICAgICAgICAgIGNvbnRleHQgLSBhIHNzbC5TU0xDb250ZXh0CisgICAgICAgICIiIgorICAgICAgICBpZiBub3QgSEFWRV9TU0w6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBUTFMgc3VwcG9ydCBtaXNzaW5nJykKKyAgICAgICAgaWYgc2VsZi5fdGxzX2VzdGFibGlzaGVkOgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgVExTIHNlc3Npb24gYWxyZWFkeSBlc3RhYmxpc2hlZCcpCisgICAgICAgIGNhcHMgPSBzZWxmLmNhcGEoKQorICAgICAgICBpZiBub3QgJ1NUTFMnIGluIGNhcHM6CisgICAgICAgICAgICByYWlzZSBlcnJvcl9wcm90bygnLUVSUiBTVExTIG5vdCBzdXBwb3J0ZWQgYnkgc2VydmVyJykKKyAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkKKyAgICAgICAgcmVzcCA9IHNlbGYuX3Nob3J0Y21kKCdTVExTJykKKyAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlbGYuaG9zdCkKKyAgICAgICAgc2VsZi5maWxlID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCisgICAgICAgIHNlbGYuX3Rsc19lc3RhYmxpc2hlZCA9IFRydWUKKyAgICAgICAgcmV0dXJuIHJlc3AKKworCitpZiBIQVZFX1NTTDoKIAogICAgIGNsYXNzIFBPUDNfU1NMKFBPUDMpOgogICAgICAgICAiIiJQT1AzIGNsaWVudCBjbGFzcyBvdmVyIFNTTCBjb25uZWN0aW9uCiAKLSAgICAgICAgSW5zdGFudGlhdGUgd2l0aDogUE9QM19TU0woaG9zdG5hbWUsIHBvcnQ9OTk1LCBrZXlmaWxlPU5vbmUsIGNlcnRmaWxlPU5vbmUpCisgICAgICAgIEluc3RhbnRpYXRlIHdpdGg6IFBPUDNfU1NMKGhvc3RuYW1lLCBwb3J0PTk5NSwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PU5vbmUpCiAKICAgICAgICAgICAgICAgIGhvc3RuYW1lIC0gdGhlIGhvc3RuYW1lIG9mIHRoZSBwb3AzIG92ZXIgc3NsIHNlcnZlcgogICAgICAgICAgICAgICAgcG9ydCAtIHBvcnQgbnVtYmVyCiAgICAgICAgICAgICAgICBrZXlmaWxlIC0gUEVNIGZvcm1hdHRlZCBmaWxlIHRoYXQgY29udGFpbnMgeW91ciBwcml2YXRlIGtleQogICAgICAgICAgICAgICAgY2VydGZpbGUgLSBQRU0gZm9ybWF0dGVkIGNlcnRpZmljYXRlIGNoYWluIGZpbGUKKyAgICAgICAgICAgICAgIGNvbnRleHQgLSBhIHNzbC5TU0xDb250ZXh0CiAKICAgICAgICAgU2VlIHRoZSBtZXRob2RzIG9mIHRoZSBwYXJlbnQgY2xhc3MgUE9QMyBmb3IgbW9yZSBkb2N1bWVudGF0aW9uLgogICAgICAgICAiIiIKQEAgLTM1MywxNyArNDI2LDI1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQogICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAogICAgICAgICAgICAgUE9QMy5fX2luaXRfXyhzZWxmLCBob3N0LCBwb3J0LCB0aW1lb3V0KQogCiAgICAgICAgIGRlZiBfY3JlYXRlX3NvY2tldChzZWxmLCB0aW1lb3V0KToKICAgICAgICAgICAgIHNvY2sgPSBQT1AzLl9jcmVhdGVfc29ja2V0KHNlbGYsIHRpbWVvdXQpCi0gICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc29jayA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChzb2NrKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzb2NrID0gc3NsLndyYXBfc29ja2V0KHNvY2ssIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKKyAgICAgICAgICAgIHNvY2sgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQoc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlbGYuaG9zdCkKICAgICAgICAgICAgIHJldHVybiBzb2NrCiAKKyAgICAgICAgZGVmIHN0bHMoc2VsZiwga2V5ZmlsZT1Ob25lLCBjZXJ0ZmlsZT1Ob25lLCBjb250ZXh0PU5vbmUpOgorICAgICAgICAgICAgIiIiVGhlIG1ldGhvZCB1bmNvbmRpdGlvbmFsbHkgcmFpc2VzIGFuIGV4Y2VwdGlvbiBzaW5jZSB0aGUKKyAgICAgICAgICAgIFNUTFMgY29tbWFuZCBkb2Vzbid0IG1ha2UgYW55IHNlbnNlIG9uIGFuIGFscmVhZHkgZXN0YWJsaXNoZWQKKyAgICAgICAgICAgIFNTTC9UTFMgc2Vzc2lvbi4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgcmFpc2UgZXJyb3JfcHJvdG8oJy1FUlIgVExTIHNlc3Npb24gYWxyZWFkeSBlc3RhYmxpc2hlZCcpCisKICAgICBfX2FsbF9fLmFwcGVuZCgiUE9QM19TU0wiKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3Bvc2l4cGF0aC5weSBiL0xpYi9wb3NpeHBhdGgucHkKaW5kZXggZmQ2M2Y5Ny4uMGFhNTNmZSAxMDA2NDQKLS0tIGEvTGliL3Bvc2l4cGF0aC5weQorKysgYi9MaWIvcG9zaXhwYXRoLnB5CkBAIC00OCw3ICs0OCw2IEBACiAKIGRlZiBub3JtY2FzZShzKToKICAgICAiIiJOb3JtYWxpemUgY2FzZSBvZiBwYXRobmFtZS4gIEhhcyBubyBlZmZlY3QgdW5kZXIgUG9zaXgiIiIKLSAgICAjIFRPRE86IG9uIE1hYyBPUyBYLCB0aGlzIHNob3VsZCByZWFsbHkgcmV0dXJuIHMubG93ZXIoKS4KICAgICBpZiBub3QgaXNpbnN0YW5jZShzLCAoYnl0ZXMsIHN0cikpOgogICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5vcm1jYXNlKCkgYXJndW1lbnQgbXVzdCBiZSBzdHIgb3IgYnl0ZXMsICIKICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJ3t9JyIuZm9ybWF0KHMuX19jbGFzc19fLl9fbmFtZV9fKSkKQEAgLTg0LDEyICs4MywxMCBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBwYXRoICs9IHNlcCArIGIKICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICB2YWxpZF90eXBlcyA9IGFsbChpc2luc3RhbmNlKHMsIChzdHIsIGJ5dGVzLCBieXRlYXJyYXkpKQotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcyBpbiAoYSwgKSArIHApCi0gICAgICAgIGlmIHZhbGlkX3R5cGVzOgorICAgICAgICBpZiBhbGwoaXNpbnN0YW5jZShzLCAoc3RyLCBieXRlcykpIGZvciBzIGluIChhLCkgKyBwKToKICAgICAgICAgICAgICMgTXVzdCBoYXZlIGEgbWl4dHVyZSBvZiB0ZXh0IGFuZCBiaW5hcnkgZGF0YQogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJDYW4ndCBtaXggc3RyaW5ncyBhbmQgYnl0ZXMgaW4gcGF0aCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBvbmVudHMuIikgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbXBvbmVudHMiKSBmcm9tIE5vbmUKICAgICAgICAgcmFpc2UKICAgICByZXR1cm4gcGF0aAogCkBAIC0xNjIsNyArMTU5LDcgQEAKICAgICAiIiJUZXN0IHdoZXRoZXIgYSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayIiIgogICAgIHRyeToKICAgICAgICAgc3QgPSBvcy5sc3RhdChwYXRoKQotICAgIGV4Y2VwdCAob3MuZXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICBleGNlcHQgKE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgcmV0dXJuIHN0YXQuU19JU0xOSyhzdC5zdF9tb2RlKQogCkBAIC0xNzIsNTYgKzE2OSwzNSBAQAogICAgICIiIlRlc3Qgd2hldGhlciBhIHBhdGggZXhpc3RzLiAgUmV0dXJucyBUcnVlIGZvciBicm9rZW4gc3ltYm9saWMgbGlua3MiIiIKICAgICB0cnk6CiAgICAgICAgIG9zLmxzdGF0KHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKICAgICByZXR1cm4gVHJ1ZQogCiAKLSMgQXJlIHR3byBmaWxlbmFtZXMgcmVhbGx5IHBvaW50aW5nIHRvIHRoZSBzYW1lIGZpbGU/Ci0KLWRlZiBzYW1lZmlsZShmMSwgZjIpOgotICAgICIiIlRlc3Qgd2hldGhlciB0d28gcGF0aG5hbWVzIHJlZmVyZW5jZSB0aGUgc2FtZSBhY3R1YWwgZmlsZSIiIgotICAgIHMxID0gb3Muc3RhdChmMSkKLSAgICBzMiA9IG9zLnN0YXQoZjIpCi0gICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKLQotCi0jIEFyZSB0d28gb3BlbiBmaWxlcyByZWFsbHkgcmVmZXJlbmNpbmcgdGhlIHNhbWUgZmlsZT8KLSMgKE5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBmaWxlIGRlc2NyaXB0b3IhKQotCi1kZWYgc2FtZW9wZW5maWxlKGZwMSwgZnAyKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgdHdvIG9wZW4gZmlsZSBvYmplY3RzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCi0gICAgczEgPSBvcy5mc3RhdChmcDEpCi0gICAgczIgPSBvcy5mc3RhdChmcDIpCi0gICAgcmV0dXJuIHNhbWVzdGF0KHMxLCBzMikKLQotCi0jIEFyZSB0d28gc3RhdCBidWZmZXJzIChvYnRhaW5lZCBmcm9tIHN0YXQsIGZzdGF0IG9yIGxzdGF0KQotIyBkZXNjcmliaW5nIHRoZSBzYW1lIGZpbGU/Ci0KLWRlZiBzYW1lc3RhdChzMSwgczIpOgotICAgICIiIlRlc3Qgd2hldGhlciB0d28gc3RhdCBidWZmZXJzIHJlZmVyZW5jZSB0aGUgc2FtZSBmaWxlIiIiCi0gICAgcmV0dXJuIHMxLnN0X2lubyA9PSBzMi5zdF9pbm8gYW5kIFwKLSAgICAgICAgICAgczEuc3RfZGV2ID09IHMyLnN0X2RldgotCi0KICMgSXMgYSBwYXRoIGEgbW91bnQgcG9pbnQ/CiAjIChEb2VzIHRoaXMgd29yayBmb3IgYWxsIFVOSVhlcz8gIElzIGl0IGV2ZW4gZ3VhcmFudGVlZCB0byB3b3JrIGJ5IFBvc2l4PykKIAogZGVmIGlzbW91bnQocGF0aCk6CiAgICAgIiIiVGVzdCB3aGV0aGVyIGEgcGF0aCBpcyBhIG1vdW50IHBvaW50IiIiCi0gICAgaWYgaXNsaW5rKHBhdGgpOgotICAgICAgICAjIEEgc3ltbGluayBjYW4gbmV2ZXIgYmUgYSBtb3VudCBwb2ludAotICAgICAgICByZXR1cm4gRmFsc2UKICAgICB0cnk6CiAgICAgICAgIHMxID0gb3MubHN0YXQocGF0aCkKLSAgICAgICAgaWYgaXNpbnN0YW5jZShwYXRoLCBieXRlcyk6Ci0gICAgICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsIGInLi4nKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFyZW50ID0gam9pbihwYXRoLCAnLi4nKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAjIEl0IGRvZXNuJ3QgZXhpc3QgLS0gc28gbm90IGEgbW91bnQgcG9pbnQuIDotKQorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBlbHNlOgorICAgICAgICAjIEEgc3ltbGluayBjYW4gbmV2ZXIgYmUgYSBtb3VudCBwb2ludAorICAgICAgICBpZiBzdGF0LlNfSVNMTksoczEuc3RfbW9kZSk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIGlmIGlzaW5zdGFuY2UocGF0aCwgYnl0ZXMpOgorICAgICAgICBwYXJlbnQgPSBqb2luKHBhdGgsIGInLi4nKQorICAgIGVsc2U6CisgICAgICAgIHBhcmVudCA9IGpvaW4ocGF0aCwgJy4uJykKKyAgICB0cnk6CiAgICAgICAgIHMyID0gb3MubHN0YXQocGFyZW50KQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgcmV0dXJuIEZhbHNlICMgSXQgZG9lc24ndCBleGlzdCAtLSBzbyBub3QgYSBtb3VudCBwb2ludCA6LSkKKyAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKICAgICBkZXYxID0gczEuc3RfZGV2CiAgICAgZGV2MiA9IHMyLnN0X2RldgogICAgIGlmIGRldjEgIT0gZGV2MjoKZGlmZiAtLWdpdCBhL0xpYi9wcHJpbnQucHkgYi9MaWIvcHByaW50LnB5CmluZGV4IDIyYmUwYjRiLi4yY2JmZmVkIDEwMDY0NAotLS0gYS9MaWIvcHByaW50LnB5CisrKyBiL0xpYi9wcHJpbnQucHkKQEAgLTM0LDYgKzM0LDcgQEAKIAogIiIiCiAKK2ltcG9ydCByZQogaW1wb3J0IHN5cyBhcyBfc3lzCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdCBhcyBfT3JkZXJlZERpY3QKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPIGFzIF9TdHJpbmdJTwpAQCAtNDEsMjIgKzQyLDE5IEBACiBfX2FsbF9fID0gWyJwcHJpbnQiLCJwZm9ybWF0IiwiaXNyZWFkYWJsZSIsImlzcmVjdXJzaXZlIiwic2FmZXJlcHIiLAogICAgICAgICAgICAiUHJldHR5UHJpbnRlciJdCiAKLSMgY2FjaGUgdGhlc2UgZm9yIGZhc3RlciBhY2Nlc3M6Ci1fY29tbWFqb2luID0gIiwgIi5qb2luCi1faWQgPSBpZAotX2xlbiA9IGxlbgotX3R5cGUgPSB0eXBlCiAKLQotZGVmIHBwcmludChvYmplY3QsIHN0cmVhbT1Ob25lLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUpOgorZGVmIHBwcmludChvYmplY3QsIHN0cmVhbT1Ob25lLCBpbmRlbnQ9MSwgd2lkdGg9ODAsIGRlcHRoPU5vbmUsICosCisgICAgICAgICAgIGNvbXBhY3Q9RmFsc2UpOgogICAgICIiIlByZXR0eS1wcmludCBhIFB5dGhvbiBvYmplY3QgdG8gYSBzdHJlYW0gW2RlZmF1bHQgaXMgc3lzLnN0ZG91dF0uIiIiCiAgICAgcHJpbnRlciA9IFByZXR0eVByaW50ZXIoCi0gICAgICAgIHN0cmVhbT1zdHJlYW0sIGluZGVudD1pbmRlbnQsIHdpZHRoPXdpZHRoLCBkZXB0aD1kZXB0aCkKKyAgICAgICAgc3RyZWFtPXN0cmVhbSwgaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoLAorICAgICAgICBjb21wYWN0PWNvbXBhY3QpCiAgICAgcHJpbnRlci5wcHJpbnQob2JqZWN0KQogCi1kZWYgcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSk6CitkZWYgcGZvcm1hdChvYmplY3QsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgKiwgY29tcGFjdD1GYWxzZSk6CiAgICAgIiIiRm9ybWF0IGEgUHl0aG9uIG9iamVjdCBpbnRvIGEgcHJldHR5LXByaW50ZWQgcmVwcmVzZW50YXRpb24uIiIiCi0gICAgcmV0dXJuIFByZXR0eVByaW50ZXIoaW5kZW50PWluZGVudCwgd2lkdGg9d2lkdGgsIGRlcHRoPWRlcHRoKS5wZm9ybWF0KG9iamVjdCkKKyAgICByZXR1cm4gUHJldHR5UHJpbnRlcihpbmRlbnQ9aW5kZW50LCB3aWR0aD13aWR0aCwgZGVwdGg9ZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFjdD1jb21wYWN0KS5wZm9ybWF0KG9iamVjdCkKIAogZGVmIHNhZmVyZXByKG9iamVjdCk6CiAgICAgIiIiVmVyc2lvbiBvZiByZXByKCkgd2hpY2ggY2FuIGhhbmRsZSByZWN1cnNpdmUgZGF0YSBzdHJ1Y3R1cmVzLiIiIgpAQCAtMTAxLDcgKzk5LDggQEAKICAgICByZXR1cm4gX3NhZmVfa2V5KHRbMF0pLCBfc2FmZV9rZXkodFsxXSkKIAogY2xhc3MgUHJldHR5UHJpbnRlcjoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgaW5kZW50PTEsIHdpZHRoPTgwLCBkZXB0aD1Ob25lLCBzdHJlYW09Tm9uZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGVudD0xLCB3aWR0aD04MCwgZGVwdGg9Tm9uZSwgc3RyZWFtPU5vbmUsICosCisgICAgICAgICAgICAgICAgIGNvbXBhY3Q9RmFsc2UpOgogICAgICAgICAiIiJIYW5kbGUgcHJldHR5IHByaW50aW5nIG9wZXJhdGlvbnMgb250byBhIHN0cmVhbSB1c2luZyBhIHNldCBvZgogICAgICAgICBjb25maWd1cmVkIHBhcmFtZXRlcnMuCiAKQEAgLTExOCw2ICsxMTcsOSBAQAogICAgICAgICAgICAgVGhlIGRlc2lyZWQgb3V0cHV0IHN0cmVhbS4gIElmIG9taXR0ZWQgKG9yIGZhbHNlKSwgdGhlIHN0YW5kYXJkCiAgICAgICAgICAgICBvdXRwdXQgc3RyZWFtIGF2YWlsYWJsZSBhdCBjb25zdHJ1Y3Rpb24gd2lsbCBiZSB1c2VkLgogCisgICAgICAgIGNvbXBhY3QKKyAgICAgICAgICAgIElmIHRydWUsIHNldmVyYWwgaXRlbXMgd2lsbCBiZSBjb21iaW5lZCBpbiBvbmUgbGluZS4KKwogICAgICAgICAiIiIKICAgICAgICAgaW5kZW50ID0gaW50KGluZGVudCkKICAgICAgICAgd2lkdGggPSBpbnQod2lkdGgpCkBAIC0xMzEsNiArMTMzLDcgQEAKICAgICAgICAgICAgIHNlbGYuX3N0cmVhbSA9IHN0cmVhbQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5fc3RyZWFtID0gX3N5cy5zdGRvdXQKKyAgICAgICAgc2VsZi5fY29tcGFjdCA9IGJvb2woY29tcGFjdCkKIAogICAgIGRlZiBwcHJpbnQoc2VsZiwgb2JqZWN0KToKICAgICAgICAgc2VsZi5fZm9ybWF0KG9iamVjdCwgc2VsZi5fc3RyZWFtLCAwLCAwLCB7fSwgMCkKQEAgLTE1MCwyOCArMTUzLDI1IEBACiAKICAgICBkZWYgX2Zvcm1hdChzZWxmLCBvYmplY3QsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKToKICAgICAgICAgbGV2ZWwgPSBsZXZlbCArIDEKLSAgICAgICAgb2JqaWQgPSBfaWQob2JqZWN0KQorICAgICAgICBvYmppZCA9IGlkKG9iamVjdCkKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKICAgICAgICAgICAgIHN0cmVhbS53cml0ZShfcmVjdXJzaW9uKG9iamVjdCkpCiAgICAgICAgICAgICBzZWxmLl9yZWN1cnNpdmUgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9yZWFkYWJsZSA9IEZhbHNlCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgcmVwID0gc2VsZi5fcmVwcihvYmplY3QsIGNvbnRleHQsIGxldmVsIC0gMSkKLSAgICAgICAgdHlwID0gX3R5cGUob2JqZWN0KQotICAgICAgICBzZXBMaW5lcyA9IF9sZW4ocmVwKSA+IChzZWxmLl93aWR0aCAtIDEgLSBpbmRlbnQgLSBhbGxvd2FuY2UpCisgICAgICAgIHR5cCA9IHR5cGUob2JqZWN0KQorICAgICAgICBtYXhfd2lkdGggPSBzZWxmLl93aWR0aCAtIDEgLSBpbmRlbnQgLSBhbGxvd2FuY2UKKyAgICAgICAgc2VwTGluZXMgPSBsZW4ocmVwKSA+IG1heF93aWR0aAogICAgICAgICB3cml0ZSA9IHN0cmVhbS53cml0ZQogCi0gICAgICAgIGlmIHNlbGYuX2RlcHRoIGFuZCBsZXZlbCA+IHNlbGYuX2RlcHRoOgotICAgICAgICAgICAgd3JpdGUocmVwKQotICAgICAgICAgICAgcmV0dXJuCi0KICAgICAgICAgaWYgc2VwTGluZXM6CiAgICAgICAgICAgICByID0gZ2V0YXR0cih0eXAsICJfX3JlcHJfXyIsIE5vbmUpCiAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKHR5cCwgZGljdCk6CiAgICAgICAgICAgICAgICAgd3JpdGUoJ3snKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwgPiAxOgogICAgICAgICAgICAgICAgICAgICB3cml0ZSgoc2VsZi5faW5kZW50X3Blcl9sZXZlbCAtIDEpICogJyAnKQotICAgICAgICAgICAgICAgIGxlbmd0aCA9IF9sZW4ob2JqZWN0KQorICAgICAgICAgICAgICAgIGxlbmd0aCA9IGxlbihvYmplY3QpCiAgICAgICAgICAgICAgICAgaWYgbGVuZ3RoOgogICAgICAgICAgICAgICAgICAgICBjb250ZXh0W29iamlkXSA9IDEKICAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50ICsgc2VsZi5faW5kZW50X3Blcl9sZXZlbApAQCAtMTgzLDEzICsxODMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgcmVwID0gc2VsZi5fcmVwcihrZXksIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCiAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCc6ICcpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgX2xlbihyZXApICsgMiwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQgKyBsZW4ocmVwKSArIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGlmIGxlbmd0aCA+IDE6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCBlbnQgaW4gaXRlbXNbMTpdOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcCA9IHNlbGYuX3JlcHIoa2V5LCBjb250ZXh0LCBsZXZlbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLFxuJXMlczogJyAlICgnICcqaW5kZW50LCByZXApKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50ICsgX2xlbihyZXApICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXQoZW50LCBzdHJlYW0sIGluZGVudCArIGxlbihyZXApICsgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93YW5jZSArIDEsIGNvbnRleHQsIGxldmVsKQogICAgICAgICAgICAgICAgICAgICBpbmRlbnQgPSBpbmRlbnQgLSBzZWxmLl9pbmRlbnRfcGVyX2xldmVsCiAgICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQpAQCAtMjAxLDcgKzIwMSw3IEBACiAgICAgICAgICAgICAgICAgKGlzc3ViY2xhc3ModHlwLCBzZXQpIGFuZCByIGlzIHNldC5fX3JlcHJfXykgb3IKICAgICAgICAgICAgICAgICAoaXNzdWJjbGFzcyh0eXAsIGZyb3plbnNldCkgYW5kIHIgaXMgZnJvemVuc2V0Ll9fcmVwcl9fKQogICAgICAgICAgICAgICAgKToKLSAgICAgICAgICAgICAgICBsZW5ndGggPSBfbGVuKG9iamVjdCkKKyAgICAgICAgICAgICAgICBsZW5ndGggPSBsZW4ob2JqZWN0KQogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCBsaXN0KToKICAgICAgICAgICAgICAgICAgICAgd3JpdGUoJ1snKQogICAgICAgICAgICAgICAgICAgICBlbmRjaGFyID0gJ10nCkBAIC0yMjUsMjMgKzIyNSw3NyBAQAogICAgICAgICAgICAgICAgICAgICB3cml0ZSgoc2VsZi5faW5kZW50X3Blcl9sZXZlbCAtIDEpICogJyAnKQogICAgICAgICAgICAgICAgIGlmIGxlbmd0aDoKICAgICAgICAgICAgICAgICAgICAgY29udGV4dFtvYmppZF0gPSAxCi0gICAgICAgICAgICAgICAgICAgIGluZGVudCA9IGluZGVudCArIHNlbGYuX2luZGVudF9wZXJfbGV2ZWwKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KG9iamVjdFswXSwgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSArIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgaWYgbGVuZ3RoID4gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBlbnQgaW4gb2JqZWN0WzE6XToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLFxuJyArICcgJyppbmRlbnQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZm9ybWF0KGVudCwgc3RyZWFtLCBpbmRlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd2FuY2UgKyAxLCBjb250ZXh0LCBsZXZlbCkKLSAgICAgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50IC0gc2VsZi5faW5kZW50X3Blcl9sZXZlbAorICAgICAgICAgICAgICAgICAgICBzZWxmLl9mb3JtYXRfaXRlbXMob2JqZWN0LCBzdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKyBzZWxmLl9pbmRlbnRfcGVyX2xldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dhbmNlICsgMSwgY29udGV4dCwgbGV2ZWwpCiAgICAgICAgICAgICAgICAgICAgIGRlbCBjb250ZXh0W29iamlkXQogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIGxlbmd0aCA9PSAxOgogICAgICAgICAgICAgICAgICAgICB3cml0ZSgnLCcpCiAgICAgICAgICAgICAgICAgd3JpdGUoZW5kY2hhcikKICAgICAgICAgICAgICAgICByZXR1cm4KIAorICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyh0eXAsIHN0cikgYW5kIGxlbihvYmplY3QpID4gMCBhbmQgciBpcyBzdHIuX19yZXByX186CisgICAgICAgICAgICAgICAgY2h1bmtzID0gW10KKyAgICAgICAgICAgICAgICBsaW5lcyA9IG9iamVjdC5zcGxpdGxpbmVzKFRydWUpCisgICAgICAgICAgICAgICAgaWYgbGV2ZWwgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgbWF4X3dpZHRoIC09IDIKKyAgICAgICAgICAgICAgICBmb3IgaSwgbGluZSBpbiBlbnVtZXJhdGUobGluZXMpOgorICAgICAgICAgICAgICAgICAgICByZXAgPSByZXByKGxpbmUpCisgICAgICAgICAgICAgICAgICAgIGlmIGxlbihyZXApIDw9IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQocmVwKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBBIGxpc3Qgb2YgYWx0ZXJuYXRpbmcgKG5vbi1zcGFjZSwgc3BhY2UpIHN0cmluZ3MKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRzID0gcmUuc3BsaXQocicoXHMrKScsIGxpbmUpICsgWycnXQorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9ICcnCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4ocGFydHMpLCAyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydHNbaV0gKyBwYXJ0c1tpKzFdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlID0gY3VycmVudCArIHBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBsZW4ocmVwcihjYW5kaWRhdGUpKSA+IG1heF93aWR0aDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQocmVwcihjdXJyZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IHBhcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY2FuZGlkYXRlCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rcy5hcHBlbmQocmVwcihjdXJyZW50KSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oY2h1bmtzKSA9PSAxOgorICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCisgICAgICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgIGlmIGxldmVsID09IDE6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKCcoJykKKyAgICAgICAgICAgICAgICBmb3IgaSwgcmVwIGluIGVudW1lcmF0ZShjaHVua3MpOgorICAgICAgICAgICAgICAgICAgICBpZiBpID4gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCdcbicgKyAnICcqaW5kZW50KQorICAgICAgICAgICAgICAgICAgICB3cml0ZShyZXApCisgICAgICAgICAgICAgICAgaWYgbGV2ZWwgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUoJyknKQorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICB3cml0ZShyZXApCiAKKyAgICBkZWYgX2Zvcm1hdF9pdGVtcyhzZWxmLCBpdGVtcywgc3RyZWFtLCBpbmRlbnQsIGFsbG93YW5jZSwgY29udGV4dCwgbGV2ZWwpOgorICAgICAgICB3cml0ZSA9IHN0cmVhbS53cml0ZQorICAgICAgICBkZWxpbW5sID0gJyxcbicgKyAnICcgKiBpbmRlbnQKKyAgICAgICAgZGVsaW0gPSAnJworICAgICAgICB3aWR0aCA9IG1heF93aWR0aCA9IHNlbGYuX3dpZHRoIC0gaW5kZW50IC0gYWxsb3dhbmNlICsgMgorICAgICAgICBmb3IgZW50IGluIGl0ZW1zOgorICAgICAgICAgICAgaWYgc2VsZi5fY29tcGFjdDoKKyAgICAgICAgICAgICAgICByZXAgPSBzZWxmLl9yZXByKGVudCwgY29udGV4dCwgbGV2ZWwpCisgICAgICAgICAgICAgICAgdyA9IGxlbihyZXApICsgMgorICAgICAgICAgICAgICAgIGlmIHdpZHRoIDwgdzoKKyAgICAgICAgICAgICAgICAgICAgd2lkdGggPSBtYXhfd2lkdGgKKyAgICAgICAgICAgICAgICAgICAgaWYgZGVsaW06CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgICAgICBpZiB3aWR0aCA+PSB3OgorICAgICAgICAgICAgICAgICAgICB3aWR0aCAtPSB3CisgICAgICAgICAgICAgICAgICAgIHdyaXRlKGRlbGltKQorICAgICAgICAgICAgICAgICAgICBkZWxpbSA9ICcsICcKKyAgICAgICAgICAgICAgICAgICAgd3JpdGUocmVwKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgd3JpdGUoZGVsaW0pCisgICAgICAgICAgICBkZWxpbSA9IGRlbGltbmwKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1hdChlbnQsIHN0cmVhbSwgaW5kZW50LCBhbGxvd2FuY2UsIGNvbnRleHQsIGxldmVsKQorCiAgICAgZGVmIF9yZXByKHNlbGYsIG9iamVjdCwgY29udGV4dCwgbGV2ZWwpOgogICAgICAgICByZXByLCByZWFkYWJsZSwgcmVjdXJzaXZlID0gc2VsZi5mb3JtYXQob2JqZWN0LCBjb250ZXh0LmNvcHkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2RlcHRoLCBsZXZlbCkKQEAgLTI2Miw3ICszMTYsNyBAQAogIyBSZXR1cm4gdHJpcGxlIChyZXByX3N0cmluZywgaXNyZWFkYWJsZSwgaXNyZWN1cnNpdmUpLgogCiBkZWYgX3NhZmVfcmVwcihvYmplY3QsIGNvbnRleHQsIG1heGxldmVscywgbGV2ZWwpOgotICAgIHR5cCA9IF90eXBlKG9iamVjdCkKKyAgICB0eXAgPSB0eXBlKG9iamVjdCkKICAgICBpZiB0eXAgaXMgc3RyOgogICAgICAgICBpZiAnbG9jYWxlJyBub3QgaW4gX3N5cy5tb2R1bGVzOgogICAgICAgICAgICAgcmV0dXJuIHJlcHIob2JqZWN0KSwgVHJ1ZSwgRmFsc2UKQEAgLTI4Niw3ICszNDAsNyBAQAogICAgIGlmIGlzc3ViY2xhc3ModHlwLCBkaWN0KSBhbmQgciBpcyBkaWN0Ll9fcmVwcl9fOgogICAgICAgICBpZiBub3Qgb2JqZWN0OgogICAgICAgICAgICAgcmV0dXJuICJ7fSIsIFRydWUsIEZhbHNlCi0gICAgICAgIG9iamlkID0gX2lkKG9iamVjdCkKKyAgICAgICAgb2JqaWQgPSBpZChvYmplY3QpCiAgICAgICAgIGlmIG1heGxldmVscyBhbmQgbGV2ZWwgPj0gbWF4bGV2ZWxzOgogICAgICAgICAgICAgcmV0dXJuICJ7Li4ufSIsIEZhbHNlLCBvYmppZCBpbiBjb250ZXh0CiAgICAgICAgIGlmIG9iamlkIGluIGNvbnRleHQ6CkBAIC0zMDcsNyArMzYxLDcgQEAKICAgICAgICAgICAgIGlmIGtyZWN1ciBvciB2cmVjdXI6CiAgICAgICAgICAgICAgICAgcmVjdXJzaXZlID0gVHJ1ZQogICAgICAgICBkZWwgY29udGV4dFtvYmppZF0KLSAgICAgICAgcmV0dXJuICJ7JXN9IiAlIF9jb21tYWpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKKyAgICAgICAgcmV0dXJuICJ7JXN9IiAlICIsICIuam9pbihjb21wb25lbnRzKSwgcmVhZGFibGUsIHJlY3Vyc2l2ZQogCiAgICAgaWYgKGlzc3ViY2xhc3ModHlwLCBsaXN0KSBhbmQgciBpcyBsaXN0Ll9fcmVwcl9fKSBvciBcCiAgICAgICAgKGlzc3ViY2xhc3ModHlwLCB0dXBsZSkgYW5kIHIgaXMgdHVwbGUuX19yZXByX18pOgpAQCAtMzE1LDEzICszNjksMTMgQEAKICAgICAgICAgICAgIGlmIG5vdCBvYmplY3Q6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJbXSIsIFRydWUsIEZhbHNlCiAgICAgICAgICAgICBmb3JtYXQgPSAiWyVzXSIKLSAgICAgICAgZWxpZiBfbGVuKG9iamVjdCkgPT0gMToKKyAgICAgICAgZWxpZiBsZW4ob2JqZWN0KSA9PSAxOgogICAgICAgICAgICAgZm9ybWF0ID0gIiglcywpIgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgbm90IG9iamVjdDoKICAgICAgICAgICAgICAgICByZXR1cm4gIigpIiwgVHJ1ZSwgRmFsc2UKICAgICAgICAgICAgIGZvcm1hdCA9ICIoJXMpIgotICAgICAgICBvYmppZCA9IF9pZChvYmplY3QpCisgICAgICAgIG9iamlkID0gaWQob2JqZWN0KQogICAgICAgICBpZiBtYXhsZXZlbHMgYW5kIGxldmVsID49IG1heGxldmVsczoKICAgICAgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLi4uIiwgRmFsc2UsIG9iamlkIGluIGNvbnRleHQKICAgICAgICAgaWYgb2JqaWQgaW4gY29udGV4dDoKQEAgLTM0MCw3ICszOTQsNyBAQAogICAgICAgICAgICAgaWYgb3JlY3VyOgogICAgICAgICAgICAgICAgIHJlY3Vyc2l2ZSA9IFRydWUKICAgICAgICAgZGVsIGNvbnRleHRbb2JqaWRdCi0gICAgICAgIHJldHVybiBmb3JtYXQgJSBfY29tbWFqb2luKGNvbXBvbmVudHMpLCByZWFkYWJsZSwgcmVjdXJzaXZlCisgICAgICAgIHJldHVybiBmb3JtYXQgJSAiLCAiLmpvaW4oY29tcG9uZW50cyksIHJlYWRhYmxlLCByZWN1cnNpdmUKIAogICAgIHJlcCA9IHJlcHIob2JqZWN0KQogICAgIHJldHVybiByZXAsIChyZXAgYW5kIG5vdCByZXAuc3RhcnRzd2l0aCgnPCcpKSwgRmFsc2UKQEAgLTM0OCw3ICs0MDIsNyBAQAogCiBkZWYgX3JlY3Vyc2lvbihvYmplY3QpOgogICAgIHJldHVybiAoIjxSZWN1cnNpb24gb24gJXMgd2l0aCBpZD0lcz4iCi0gICAgICAgICAgICAlIChfdHlwZShvYmplY3QpLl9fbmFtZV9fLCBfaWQob2JqZWN0KSkpCisgICAgICAgICAgICAlICh0eXBlKG9iamVjdCkuX19uYW1lX18sIGlkKG9iamVjdCkpKQogCiAKIGRlZiBfcGVyZmNoZWNrKG9iamVjdD1Ob25lKToKZGlmZiAtLWdpdCBhL0xpYi9wcm9maWxlLnB5IGIvTGliL3Byb2ZpbGUucHkKaW5kZXggNzQzZTc3ZC4uNWQwZTk2OCAxMDA3NTUKLS0tIGEvTGliL3Byb2ZpbGUucHkKKysrIGIvTGliL3Byb2ZpbGUucHkKQEAgLTQwLDYgKzQwLDQwIEBACiAjICAgICAgIHJldHVybiBpX2NvdW50CiAjaXRpbWVzID0gaW50ZWdlcl90aW1lciAjIHJlcGxhY2Ugd2l0aCBDIGNvZGVkIHRpbWVyIHJldHVybmluZyBpbnRlZ2VycwogCitjbGFzcyBfVXRpbHM6CisgICAgIiIiU3VwcG9ydCBjbGFzcyBmb3IgdXRpbGl0eSBmdW5jdGlvbnMgd2hpY2ggYXJlIHNoYXJlZCBieQorICAgIHByb2ZpbGUucHkgYW5kIGNQcm9maWxlLnB5IG1vZHVsZXMuCisgICAgTm90IHN1cHBvc2VkIHRvIGJlIHVzZWQgZGlyZWN0bHkuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvZmlsZXIpOgorICAgICAgICBzZWxmLnByb2ZpbGVyID0gcHJvZmlsZXIKKworICAgIGRlZiBydW4oc2VsZiwgc3RhdGVtZW50LCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW4oc3RhdGVtZW50KQorICAgICAgICBleGNlcHQgU3lzdGVtRXhpdDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3Nob3cocHJvZiwgZmlsZW5hbWUsIHNvcnQpCisKKyAgICBkZWYgcnVuY3R4KHNlbGYsIHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIHByb2YgPSBzZWxmLnByb2ZpbGVyKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCisgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fc2hvdyhwcm9mLCBmaWxlbmFtZSwgc29ydCkKKworICAgIGRlZiBfc2hvdyhzZWxmLCBwcm9mLCBmaWxlbmFtZSwgc29ydCk6CisgICAgICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJvZi5wcmludF9zdGF0cyhzb3J0KQorCisKICMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIyBUaGUgZm9sbG93aW5nIGFyZSB0aGUgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgZm9yIHRoZSBwcm9maWxlciBjbGFzcwogIyBOb3RlIHRoYXQgYW4gaW5zdGFuY2Ugb2YgUHJvZmlsZSgpIGlzICpub3QqIG5lZWRlZCB0byBjYWxsIHRoZW0uCkBAIC01NiwxNSArOTAsNyBAQAogICAgIHN0YW5kYXJkIG5hbWUgc3RyaW5nIChmaWxlL2xpbmUvZnVuY3Rpb24tbmFtZSkgdGhhdCBpcyBwcmVzZW50ZWQgaW4KICAgICBlYWNoIGxpbmUuCiAgICAgIiIiCi0gICAgcHJvZiA9IFByb2ZpbGUoKQotICAgIHRyeToKLSAgICAgICAgcHJvZiA9IHByb2YucnVuKHN0YXRlbWVudCkKLSAgICBleGNlcHQgU3lzdGVtRXhpdDoKLSAgICAgICAgcGFzcwotICAgIGlmIGZpbGVuYW1lIGlzIG5vdCBOb25lOgotICAgICAgICBwcm9mLmR1bXBfc3RhdHMoZmlsZW5hbWUpCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIHByb2YucHJpbnRfc3RhdHMoc29ydCkKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bihzdGF0ZW1lbnQsIGZpbGVuYW1lLCBzb3J0KQogCiBkZWYgcnVuY3R4KHN0YXRlbWVudCwgZ2xvYmFscywgbG9jYWxzLCBmaWxlbmFtZT1Ob25lLCBzb3J0PS0xKToKICAgICAiIiJSdW4gc3RhdGVtZW50IHVuZGVyIHByb2ZpbGVyLCBzdXBwbHlpbmcgeW91ciBvd24gZ2xvYmFscyBhbmQgbG9jYWxzLApAQCAtNzIsMTYgKzk4LDggQEAKIAogICAgIHN0YXRlbWVudCBhbmQgZmlsZW5hbWUgaGF2ZSB0aGUgc2FtZSBzZW1hbnRpY3MgYXMgcHJvZmlsZS5ydW4KICAgICAiIiIKLSAgICBwcm9mID0gUHJvZmlsZSgpCi0gICAgdHJ5OgotICAgICAgICBwcm9mID0gcHJvZi5ydW5jdHgoc3RhdGVtZW50LCBnbG9iYWxzLCBsb2NhbHMpCi0gICAgZXhjZXB0IFN5c3RlbUV4aXQ6Ci0gICAgICAgIHBhc3MKKyAgICByZXR1cm4gX1V0aWxzKFByb2ZpbGUpLnJ1bmN0eChzdGF0ZW1lbnQsIGdsb2JhbHMsIGxvY2FscywgZmlsZW5hbWUsIHNvcnQpCiAKLSAgICBpZiBmaWxlbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJvZi5kdW1wX3N0YXRzKGZpbGVuYW1lKQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBwcm9mLnByaW50X3N0YXRzKHNvcnQpCiAKIGNsYXNzIFByb2ZpbGU6CiAgICAgIiIiUHJvZmlsZXIgY2xhc3MuCkBAIC0zNzMsMTAgKzM5MSw5IEBACiAgICAgICAgICAgICAgICAgICBwcmludF9zdGF0cygpCiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlKToKLSAgICAgICAgZiA9IG9wZW4oZmlsZSwgJ3diJykKLSAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQotICAgICAgICBtYXJzaGFsLmR1bXAoc2VsZi5zdGF0cywgZikKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggb3BlbihmaWxlLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jcmVhdGVfc3RhdHMoKQorICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCiAKICAgICBkZWYgY3JlYXRlX3N0YXRzKHNlbGYpOgogICAgICAgICBzZWxmLnNpbXVsYXRlX2NtZF9jb21wbGV0ZSgpCmRpZmYgLS1naXQgYS9MaWIvcHN0YXRzLnB5IGIvTGliL3BzdGF0cy5weQppbmRleCA2YTc3NjA1Li5lMWVjMzU1IDEwMDY0NAotLS0gYS9MaWIvcHN0YXRzLnB5CisrKyBiL0xpYi9wc3RhdHMucHkKQEAgLTkzLDkgKzkzLDggQEAKICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSB7fQogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShhcmcsIHN0cik6Ci0gICAgICAgICAgICBmID0gb3BlbihhcmcsICdyYicpCi0gICAgICAgICAgICBzZWxmLnN0YXRzID0gbWFyc2hhbC5sb2FkKGYpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3BlbihhcmcsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5zdGF0cyA9IG1hcnNoYWwubG9hZChmKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZpbGVfc3RhdHMgPSBvcy5zdGF0KGFyZykKICAgICAgICAgICAgICAgICBhcmcgPSB0aW1lLmN0aW1lKGZpbGVfc3RhdHMuc3RfbXRpbWUpICsgIiAgICAiICsgYXJnCkBAIC0xNDksMTEgKzE0OCw4IEBACiAKICAgICBkZWYgZHVtcF9zdGF0cyhzZWxmLCBmaWxlbmFtZSk6CiAgICAgICAgICIiIldyaXRlIHRoZSBwcm9maWxlIGRhdGEgdG8gYSBmaWxlIHdlIGtub3cgaG93IHRvIGxvYWQgYmFjay4iIiIKLSAgICAgICAgZiA9IG9wZW4oZmlsZW5hbWUsICd3YicpCi0gICAgICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgbWFyc2hhbC5kdW1wKHNlbGYuc3RhdHMsIGYpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKIAogICAgICMgbGlzdCB0aGUgdHVwbGUgaW5kaWNlcyBhbmQgZGlyZWN0aW9ucyBmb3Igc29ydGluZywKICAgICAjIGFsb25nIHdpdGggc29tZSBwcmludGFibGUgZGVzY3JpcHRpb24KQEAgLTYxMiw3ICs2MDgsNyBAQAogICAgICAgICAgICAgaWYgbGluZToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdHMgPSBTdGF0cyhsaW5lKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KGVyci5hcmdzWzFdLCBmaWxlPXNlbGYuc3RyZWFtKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKZGlmZiAtLWdpdCBhL0xpYi9wdHkucHkgYi9MaWIvcHR5LnB5CmluZGV4IDNjY2Y2MTkuLmU4NDFmMTIgMTAwNjQ0Ci0tLSBhL0xpYi9wdHkucHkKKysrIGIvTGliL3B0eS5weQpAQCAtNDcsMjcgKzQ3LDE2IEBACiAgICAgcmV0dXJuIF9vcGVuX3Rlcm1pbmFsKCkKIAogZGVmIF9vcGVuX3Rlcm1pbmFsKCk6Ci0gICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLgotICAgIFNHSSBhbmQgZ2VuZXJpYyBCU0QgdmVyc2lvbiwgZm9yIHdoZW4gb3BlbnB0eSgpIGZhaWxzLiIiIgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IHNnaQotICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgcGFzcwotICAgIGVsc2U6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHR0eV9uYW1lLCBtYXN0ZXJfZmQgPSBzZ2kuX2dldHB0eShvcy5PX1JEV1IsIDBvNjY2LCAwKQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByYWlzZSBvcy5lcnJvcihtc2cpCi0gICAgICAgIHJldHVybiBtYXN0ZXJfZmQsIHR0eV9uYW1lCisgICAgIiIiT3BlbiBwdHkgbWFzdGVyIGFuZCByZXR1cm4gKG1hc3Rlcl9mZCwgdHR5X25hbWUpLiIiIgogICAgIGZvciB4IGluICdwcXJzdHV2d3h5elBRUlNUJzoKICAgICAgICAgZm9yIHkgaW4gJzAxMjM0NTY3ODlhYmNkZWYnOgogICAgICAgICAgICAgcHR5X25hbWUgPSAnL2Rldi9wdHknICsgeCArIHkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9zLm9wZW4ocHR5X25hbWUsIG9zLk9fUkRXUikKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByZXR1cm4gKGZkLCAnL2Rldi90dHknICsgeCArIHkpCi0gICAgcmFpc2Ugb3MuZXJyb3IoJ291dCBvZiBwdHkgZGV2aWNlcycpCisgICAgcmFpc2UgT1NFcnJvcignb3V0IG9mIHB0eSBkZXZpY2VzJykKIAogZGVmIHNsYXZlX29wZW4odHR5X25hbWUpOgogICAgICIiInNsYXZlX29wZW4odHR5X25hbWUpIC0+IHNsYXZlX2ZkCkBAIC04Myw3ICs3Miw3IEBACiAgICAgdHJ5OgogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgInB0ZW0iKQogICAgICAgICBpb2N0bChyZXN1bHQsIElfUFVTSCwgImxkdGVybSIpCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTE3Myw4ICsxNjIsOSBAQAogICAgICAgICByZXN0b3JlID0gMAogICAgIHRyeToKICAgICAgICAgX2NvcHkobWFzdGVyX2ZkLCBtYXN0ZXJfcmVhZCwgc3RkaW5fcmVhZCkKLSAgICBleGNlcHQgKElPRXJyb3IsIE9TRXJyb3IpOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBpZiByZXN0b3JlOgogICAgICAgICAgICAgdHR5LnRjc2V0YXR0cihTVERJTl9GSUxFTk8sIHR0eS5UQ1NBRkxVU0gsIG1vZGUpCiAKICAgICBvcy5jbG9zZShtYXN0ZXJfZmQpCisgICAgcmV0dXJuIG9zLndhaXRwaWQocGlkLCAwKVsxXQpkaWZmIC0tZ2l0IGEvTGliL3B5X2NvbXBpbGUucHkgYi9MaWIvcHlfY29tcGlsZS5weQppbmRleCA2MmQ2OWFkLi5mNjVlZWFmIDEwMDY0NAotLS0gYS9MaWIvcHlfY29tcGlsZS5weQorKysgYi9MaWIvcHlfY29tcGlsZS5weQpAQCAtMywxNyArMywxNCBAQAogVGhpcyBtb2R1bGUgaGFzIGludGltYXRlIGtub3dsZWRnZSBvZiB0aGUgZm9ybWF0IG9mIC5weWMgZmlsZXMuCiAiIiIKIAotaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKLWltcG9ydCBtYXJzaGFsCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKK2ltcG9ydCBpbXBvcnRsaWIubWFjaGluZXJ5CitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCBvcworaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKLWltcG9ydCB0b2tlbml6ZQogaW1wb3J0IHRyYWNlYmFjawogCi1NQUdJQyA9IGltcC5nZXRfbWFnaWMoKQotCiBfX2FsbF9fID0gWyJjb21waWxlIiwgIm1haW4iLCAiUHlDb21waWxlRXJyb3IiXQogCiAKQEAgLTY1LDEzICs2Miw2IEBACiAgICAgICAgIHJldHVybiBzZWxmLm1zZwogCiAKLWRlZiB3cl9sb25nKGYsIHgpOgotICAgICIiIkludGVybmFsOyB3cml0ZSBhIDMyLWJpdCBpbnQgdG8gYSBmaWxlIGluIGxpdHRsZS1lbmRpYW4gb3JkZXIuIiIiCi0gICAgZi53cml0ZShieXRlcyhbeCAgICAgICAgICYgMHhmZiwKLSAgICAgICAgICAgICAgICAgICAoeCA+PiA4KSAgJiAweGZmLAotICAgICAgICAgICAgICAgICAgICh4ID4+IDE2KSAmIDB4ZmYsCi0gICAgICAgICAgICAgICAgICAgKHggPj4gMjQpICYgMHhmZl0pKQotCiBkZWYgY29tcGlsZShmaWxlLCBjZmlsZT1Ob25lLCBkZmlsZT1Ob25lLCBkb3JhaXNlPUZhbHNlLCBvcHRpbWl6ZT0tMSk6CiAgICAgIiIiQnl0ZS1jb21waWxlIG9uZSBQeXRob24gc291cmNlIGZpbGUgdG8gUHl0aG9uIGJ5dGVjb2RlLgogCkBAIC0xMDcsMTggKzk3LDMxIEBACiAgICAgU2VlIGNvbXBpbGVhbGwucHkgZm9yIGEgc2NyaXB0L21vZHVsZSB0aGF0IHVzZXMgdGhpcyBtb2R1bGUgdG8KICAgICBieXRlLWNvbXBpbGUgYWxsIGluc3RhbGxlZCBmaWxlcyAob3IgYWxsIGZpbGVzIGluIHNlbGVjdGVkCiAgICAgZGlyZWN0b3JpZXMpLgorCisgICAgRG8gbm90ZSB0aGF0IEZpbGVFeGlzdHNFcnJvciBpcyByYWlzZWQgaWYgY2ZpbGUgZW5kcyB1cCBwb2ludGluZyBhdCBhCisgICAgbm9uLXJlZ3VsYXIgZmlsZSBvciBzeW1saW5rLiBCZWNhdXNlIHRoZSBjb21waWxhdGlvbiB1c2VzIGEgZmlsZSByZW5hbWluZywKKyAgICB0aGUgcmVzdWx0aW5nIGZpbGUgd291bGQgYmUgcmVndWxhciBhbmQgdGh1cyBub3QgdGhlIHNhbWUgdHlwZSBvZiBmaWxlIGFzCisgICAgaXQgd2FzIHByZXZpb3VzbHkuCiAgICAgIiIiCi0gICAgd2l0aCB0b2tlbml6ZS5vcGVuKGZpbGUpIGFzIGY6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN0ID0gb3MuZnN0YXQoZi5maWxlbm8oKSkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGUpCi0gICAgICAgIHRpbWVzdGFtcCA9IGludChzdC5zdF9tdGltZSkKLSAgICAgICAgc2l6ZSA9IHN0LnN0X3NpemUgJiAweEZGRkZGRkZGCi0gICAgICAgIGNvZGVzdHJpbmcgPSBmLnJlYWQoKQorICAgIGlmIGNmaWxlIGlzIE5vbmU6CisgICAgICAgIGlmIG9wdGltaXplID49IDA6CisgICAgICAgICAgICBjZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNmaWxlID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZSkKKyAgICBpZiBvcy5wYXRoLmlzbGluayhjZmlsZSk6CisgICAgICAgIG1zZyA9ICgne30gaXMgYSBzeW1saW5rIGFuZCB3aWxsIGJlIGNoYW5nZWQgaW50byBhIHJlZ3VsYXIgZmlsZSBpZiAnCisgICAgICAgICAgICAgICAnaW1wb3J0IHdyaXRlcyBhIGJ5dGUtY29tcGlsZWQgZmlsZSB0byBpdCcpCisgICAgICAgIHJhaXNlIEZpbGVFeGlzdHNFcnJvcihtc2cuZm9ybWF0KGNmaWxlKSkKKyAgICBlbGlmIG9zLnBhdGguZXhpc3RzKGNmaWxlKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKGNmaWxlKToKKyAgICAgICAgbXNnID0gKCd7fSBpcyBhIG5vbi1yZWd1bGFyIGZpbGUgYW5kIHdpbGwgYmUgY2hhbmdlZCBpbnRvIGEgcmVndWxhciAnCisgICAgICAgICAgICAgICAnb25lIGlmIGltcG9ydCB3cml0ZXMgYSBieXRlLWNvbXBpbGVkIGZpbGUgdG8gaXQnKQorICAgICAgICByYWlzZSBGaWxlRXhpc3RzRXJyb3IobXNnLmZvcm1hdChjZmlsZSkpCisgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCc8cHlfY29tcGlsZT4nLCBmaWxlKQorICAgIHNvdXJjZV9ieXRlcyA9IGxvYWRlci5nZXRfZGF0YShmaWxlKQogICAgIHRyeToKLSAgICAgICAgY29kZW9iamVjdCA9IGJ1aWx0aW5zLmNvbXBpbGUoY29kZXN0cmluZywgZGZpbGUgb3IgZmlsZSwgJ2V4ZWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZT1vcHRpbWl6ZSkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZShzb3VyY2VfYnl0ZXMsIGRmaWxlIG9yIGZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX29wdGltaXplPW9wdGltaXplKQogICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgogICAgICAgICBweV9leGMgPSBQeUNvbXBpbGVFcnJvcihlcnIuX19jbGFzc19fLCBlcnIsIGRmaWxlIG9yIGZpbGUpCiAgICAgICAgIGlmIGRvcmFpc2U6CkBAIC0xMjYsMjggKzEyOSwyMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShweV9leGMubXNnICsgJ1xuJykKICAgICAgICAgICAgIHJldHVybgotICAgIGlmIGNmaWxlIGlzIE5vbmU6Ci0gICAgICAgIGlmIG9wdGltaXplID49IDA6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlLCBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlKQogICAgIHRyeToKICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShjZmlsZSkKICAgICAgICAgaWYgZGlybmFtZToKICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCi0gICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyb3I6Ci0gICAgICAgIGlmIGVycm9yLmVycm5vICE9IGVycm5vLkVFWElTVDoKLSAgICAgICAgICAgIHJhaXNlCi0gICAgd2l0aCBvcGVuKGNmaWxlLCAnd2InKSBhcyBmYzoKLSAgICAgICAgZmMud3JpdGUoYidcMFwwXDBcMCcpCi0gICAgICAgIHdyX2xvbmcoZmMsIHRpbWVzdGFtcCkKLSAgICAgICAgd3JfbG9uZyhmYywgc2l6ZSkKLSAgICAgICAgbWFyc2hhbC5kdW1wKGNvZGVvYmplY3QsIGZjKQotICAgICAgICBmYy5mbHVzaCgpCi0gICAgICAgIGZjLnNlZWsoMCwgMCkKLSAgICAgICAgZmMud3JpdGUoTUFHSUMpCisgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKKyAgICAgICAgcGFzcworICAgIHNvdXJjZV9zdGF0cyA9IGxvYWRlci5wYXRoX3N0YXRzKGZpbGUpCisgICAgYnl0ZWNvZGUgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fY29kZV90b19ieXRlY29kZSgKKyAgICAgICAgICAgIGNvZGUsIHNvdXJjZV9zdGF0c1snbXRpbWUnXSwgc291cmNlX3N0YXRzWydzaXplJ10pCisgICAgbW9kZSA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9jYWxjX21vZGUoZmlsZSkKKyAgICBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fd3JpdGVfYXRvbWljKGNmaWxlLCBieXRlY29kZSwgbW9kZSkKICAgICByZXR1cm4gY2ZpbGUKIAorCiBkZWYgbWFpbihhcmdzPU5vbmUpOgogICAgICIiIkNvbXBpbGUgc2V2ZXJhbCBzb3VyY2UgZmlsZXMuCiAKQEAgLTE3Myw3ICsxNjgsNyBAQAogICAgICAgICAgICAgZXhjZXB0IFB5Q29tcGlsZUVycm9yIGFzIGVycm9yOgogICAgICAgICAgICAgICAgIHJ2ID0gMQogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IubXNnKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKICAgICAgICAgICAgICAgICBydiA9IDEKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCIlc1xuIiAlIGVycm9yKQogICAgIGVsc2U6CkBAIC0xODMsNyArMTc4LDcgQEAKICAgICAgICAgICAgIGV4Y2VwdCBQeUNvbXBpbGVFcnJvciBhcyBlcnJvcjoKICAgICAgICAgICAgICAgICAjIHJldHVybiB2YWx1ZSB0byBpbmRpY2F0ZSBhdCBsZWFzdCBvbmUgZmFpbHVyZQogICAgICAgICAgICAgICAgIHJ2ID0gMQotICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZXJyb3IubXNnKQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIiVzXG4iICUgZXJyb3IubXNnKQogICAgIHJldHVybiBydgogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3B5Y2xici5weSBiL0xpYi9weWNsYnIucHkKaW5kZXggOWVjMDVlZS4uZGQ1OGFkYSAxMDA2NDQKLS0tIGEvTGliL3B5Y2xici5weQorKysgYi9MaWIvcHljbGJyLnB5CkBAIC00Miw3ICs0Miw3IEBACiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdG9rZW5pemUKIGZyb20gdG9rZW4gaW1wb3J0IE5BTUUsIERFREVOVCwgT1AKIGZyb20gb3BlcmF0b3IgaW1wb3J0IGl0ZW1nZXR0ZXIKQEAgLTE0MCwxMyArMTQwLDE0IEBACiAgICAgICAgIHNlYXJjaF9wYXRoID0gcGF0aAogICAgIGVsc2U6CiAgICAgICAgIHNlYXJjaF9wYXRoID0gcGF0aCArIHN5cy5wYXRoCi0gICAgbG9hZGVyID0gaW1wb3J0bGliLmZpbmRfbG9hZGVyKGZ1bGxtb2R1bGUsIHNlYXJjaF9wYXRoKQotICAgIGZuYW1lID0gbG9hZGVyLmdldF9maWxlbmFtZShmdWxsbW9kdWxlKQorICAgICMgWFhYIFRoaXMgd2lsbCBjaGFuZ2Ugb25jZSBpc3N1ZTE5OTQ0IGxhbmRzLgorICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5fZmluZF9zcGVjX2Zyb21fcGF0aChmdWxsbW9kdWxlLCBzZWFyY2hfcGF0aCkKKyAgICBmbmFtZSA9IHNwZWMubG9hZGVyLmdldF9maWxlbmFtZShmdWxsbW9kdWxlKQogICAgIF9tb2R1bGVzW2Z1bGxtb2R1bGVdID0gZGljdAotICAgIGlmIGxvYWRlci5pc19wYWNrYWdlKGZ1bGxtb2R1bGUpOgorICAgIGlmIHNwZWMubG9hZGVyLmlzX3BhY2thZ2UoZnVsbG1vZHVsZSk6CiAgICAgICAgIGRpY3RbJ19fcGF0aF9fJ10gPSBbb3MucGF0aC5kaXJuYW1lKGZuYW1lKV0KICAgICB0cnk6Ci0gICAgICAgIHNvdXJjZSA9IGxvYWRlci5nZXRfc291cmNlKGZ1bGxtb2R1bGUpCisgICAgICAgIHNvdXJjZSA9IHNwZWMubG9hZGVyLmdldF9zb3VyY2UoZnVsbG1vZHVsZSkKICAgICAgICAgaWYgc291cmNlIGlzIE5vbmU6CiAgICAgICAgICAgICByZXR1cm4gZGljdAogICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIEltcG9ydEVycm9yKToKZGlmZiAtLWdpdCBhL0xpYi9weWRvYy5weSBiL0xpYi9weWRvYy5weQppbmRleCBjOWQ4NDM2Li5mNDIyOTlmIDEwMDc1NQotLS0gYS9MaWIvcHlkb2MucHkKKysrIGIvTGliL3B5ZG9jLnB5CkBAIC0xLDggKzEsOSBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwogIiIiR2VuZXJhdGUgUHl0aG9uIGRvY3VtZW50YXRpb24gaW4gSFRNTCBvciB0ZXh0IGZvciBpbnRlcmFjdGl2ZSB1c2UuCiAKLUluIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIsIGRvICJmcm9tIHB5ZG9jIGltcG9ydCBoZWxwIiB0byBwcm92aWRlCi1oZWxwLiAgQ2FsbGluZyBoZWxwKHRoaW5nKSBvbiBhIFB5dGhvbiBvYmplY3QgZG9jdW1lbnRzIHRoZSBvYmplY3QuCitBdCB0aGUgUHl0aG9uIGludGVyYWN0aXZlIHByb21wdCwgY2FsbGluZyBoZWxwKHRoaW5nKSBvbiBhIFB5dGhvbiBvYmplY3QKK2RvY3VtZW50cyB0aGUgb2JqZWN0LCBhbmQgY2FsbGluZyBoZWxwKCkgc3RhcnRzIHVwIGFuIGludGVyYWN0aXZlCitoZWxwIHNlc3Npb24uCiAKIE9yLCBhdCB0aGUgc2hlbGwgY29tbWFuZCBsaW5lIG91dHNpZGUgb2YgUHl0aG9uOgogCkBAIC00NCwxNiArNDUsMTYgQEAKICIiIgogCiAjIEtub3duIGJ1Z3MgdGhhdCBjYW4ndCBiZSBmaXhlZCBoZXJlOgotIyAgIC0gaW1wLmxvYWRfbW9kdWxlKCkgY2Fubm90IGJlIHByZXZlbnRlZCBmcm9tIGNsb2JiZXJpbmcgZXhpc3RpbmcKLSMgICAgIGxvYWRlZCBtb2R1bGVzLCBzbyBjYWxsaW5nIHN5bm9wc2lzKCkgb24gYSBiaW5hcnkgbW9kdWxlIGZpbGUKLSMgICAgIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGFueSBleGlzdGluZyBtb2R1bGUgd2l0aCB0aGUgc2FtZSBuYW1lLgorIyAgIC0gc3lub3BzaXMoKSBjYW5ub3QgYmUgcHJldmVudGVkIGZyb20gY2xvYmJlcmluZyBleGlzdGluZworIyAgICAgbG9hZGVkIG1vZHVsZXMuCiAjICAgLSBJZiB0aGUgX19maWxlX18gYXR0cmlidXRlIG9uIGEgbW9kdWxlIGlzIGEgcmVsYXRpdmUgcGF0aCBhbmQKICMgICAgIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpcyBjaGFuZ2VkIHdpdGggb3MuY2hkaXIoKSwgYW4gaW5jb3JyZWN0CiAjICAgICBwYXRoIHdpbGwgYmUgZGlzcGxheWVkLgogCiBpbXBvcnQgYnVpbHRpbnMKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIuX2Jvb3RzdHJhcAogaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBpbwogaW1wb3J0IG9zCkBAIC02MywxMCArNjQsMTEgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB0aW1lCiBpbXBvcnQgdG9rZW5pemUKK2ltcG9ydCB1cmxsaWIucGFyc2UKIGltcG9ydCB3YXJuaW5ncwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKIGZyb20gcmVwcmxpYiBpbXBvcnQgUmVwcgotZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGV4dHJhY3RfdGIsIGZvcm1hdF9leGNlcHRpb25fb25seQorZnJvbSB0cmFjZWJhY2sgaW1wb3J0IGZvcm1hdF9leGNlcHRpb25fb25seQogCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbW1vbiByb3V0aW5lcwpAQCAtMTM3LDYgKzEzOSwxOSBAQAogICAgICAgICAgICAgaW5zcGVjdC5pc2J1aWx0aW4ob2JqKSBvcgogICAgICAgICAgICAgaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3Iob2JqKSkKIAorZGVmIF9pc19ib3VuZF9tZXRob2QoZm4pOgorICAgICIiIgorICAgIFJldHVybnMgVHJ1ZSBpZiBmbiBpcyBhIGJvdW5kIG1ldGhvZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyCisgICAgZm4gd2FzIGltcGxlbWVudGVkIGluIFB5dGhvbiBvciBpbiBDLgorICAgICIiIgorICAgIGlmIGluc3BlY3QuaXNtZXRob2QoZm4pOgorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGlmIGluc3BlY3QuaXNidWlsdGluKGZuKToKKyAgICAgICAgc2VsZiA9IGdldGF0dHIoZm4sICdfX3NlbGZfXycsIE5vbmUpCisgICAgICAgIHJldHVybiBub3QgKGluc3BlY3QuaXNtb2R1bGUoc2VsZikgb3IgKHNlbGYgaXMgTm9uZSkpCisgICAgcmV0dXJuIEZhbHNlCisKKwogZGVmIGFsbG1ldGhvZHMoY2wpOgogICAgIG1ldGhvZHMgPSB7fQogICAgIGZvciBrZXksIHZhbHVlIGluIGluc3BlY3QuZ2V0bWVtYmVycyhjbCwgX2lzX3NvbWVfbWV0aG9kKToKQEAgLTE2Nyw4ICsxODIsOSBAQAogZGVmIHZpc2libGVuYW1lKG5hbWUsIGFsbD1Ob25lLCBvYmo9Tm9uZSk6CiAgICAgIiIiRGVjaWRlIHdoZXRoZXIgdG8gc2hvdyBkb2N1bWVudGF0aW9uIG9uIGEgdmFyaWFibGUuIiIiCiAgICAgIyBDZXJ0YWluIHNwZWNpYWwgbmFtZXMgYXJlIHJlZHVuZGFudCBvciBpbnRlcm5hbC4KKyAgICAjIFhYWCBSZW1vdmUgX19pbml0aWFsaXppbmdfXz8KICAgICBpZiBuYW1lIGluIHsnX19hdXRob3JfXycsICdfX2J1aWx0aW5zX18nLCAnX19jYWNoZWRfXycsICdfX2NyZWRpdHNfXycsCi0gICAgICAgICAgICAgICAgJ19fZGF0ZV9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19pbml0aWFsaXppbmdfXycsCisgICAgICAgICAgICAgICAgJ19fZGF0ZV9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19zcGVjX18nLAogICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLAogICAgICAgICAgICAgICAgICdfX3BhdGhfXycsICdfX3F1YWxuYW1lX18nLCAnX19zbG90c19fJywgJ19fdmVyc2lvbl9fJ306CiAgICAgICAgIHJldHVybiAwCkBAIC0yMjQsMzQgKzI0MCwzOCBAQAogICAgIG10aW1lID0gb3Muc3RhdChmaWxlbmFtZSkuc3RfbXRpbWUKICAgICBsYXN0dXBkYXRlLCByZXN1bHQgPSBjYWNoZS5nZXQoZmlsZW5hbWUsIChOb25lLCBOb25lKSkKICAgICBpZiBsYXN0dXBkYXRlIGlzIE5vbmUgb3IgbGFzdHVwZGF0ZSA8IG10aW1lOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmaWxlID0gdG9rZW5pemUub3BlbihmaWxlbmFtZSkKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6Ci0gICAgICAgICAgICAjIG1vZHVsZSBjYW4ndCBiZSBvcGVuZWQsIHNvIHNraXAgaXQKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGJpbmFyeV9zdWZmaXhlcyA9IGltcG9ydGxpYi5tYWNoaW5lcnkuQllURUNPREVfU1VGRklYRVNbOl0KLSAgICAgICAgYmluYXJ5X3N1ZmZpeGVzICs9IGltcG9ydGxpYi5tYWNoaW5lcnkuRVhURU5TSU9OX1NVRkZJWEVTWzpdCi0gICAgICAgIGlmIGFueShmaWxlbmFtZS5lbmRzd2l0aCh4KSBmb3IgeCBpbiBiaW5hcnlfc3VmZml4ZXMpOgotICAgICAgICAgICAgIyBiaW5hcnkgbW9kdWxlcyBoYXZlIHRvIGJlIGltcG9ydGVkCi0gICAgICAgICAgICBmaWxlLmNsb3NlKCkKLSAgICAgICAgICAgIGlmIGFueShmaWxlbmFtZS5lbmRzd2l0aCh4KSBmb3IgeCBpbgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTKToKLSAgICAgICAgICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyKCdfX3RlbXBfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKCdfX3RlbXBfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKQorICAgICAgICAjIExvb2sgZm9yIGJpbmFyeSBzdWZmaXhlcyBmaXJzdCwgZmFsbGluZyBiYWNrIHRvIHNvdXJjZS4KKyAgICAgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgodHVwbGUoaW1wb3J0bGliLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUykpOgorICAgICAgICAgICAgbG9hZGVyX2NscyA9IGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIKKyAgICAgICAgZWxpZiBmaWxlbmFtZS5lbmRzd2l0aCh0dXBsZShpbXBvcnRsaWIubWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpOgorICAgICAgICAgICAgbG9hZGVyX2NscyA9IGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9hZGVyX2NscyA9IE5vbmUKKyAgICAgICAgIyBOb3cgaGFuZGxlIHRoZSBjaG9pY2UuCisgICAgICAgIGlmIGxvYWRlcl9jbHMgaXMgTm9uZToKKyAgICAgICAgICAgICMgTXVzdCBiZSBhIHNvdXJjZSBmaWxlLgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX190ZW1wX18nKQorICAgICAgICAgICAgICAgIGZpbGUgPSB0b2tlbml6ZS5vcGVuKGZpbGVuYW1lKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBtb2R1bGUgY2FuJ3QgYmUgb3BlbmVkLCBzbyBza2lwIGl0CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgICAgICMgdGV4dCBtb2R1bGVzIGNhbiBiZSBkaXJlY3RseSBleGFtaW5lZAorICAgICAgICAgICAgd2l0aCBmaWxlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNvdXJjZV9zeW5vcHNpcyhmaWxlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBNdXN0IGJlIGEgYmluYXJ5IG1vZHVsZSwgd2hpY2ggaGFzIHRvIGJlIGltcG9ydGVkLgorICAgICAgICAgICAgbG9hZGVyID0gbG9hZGVyX2NscygnX190ZW1wX18nLCBmaWxlbmFtZSkKKyAgICAgICAgICAgICMgWFhYIFdlIHByb2JhYmx5IGRvbid0IG5lZWQgdG8gcGFzcyBpbiB0aGUgbG9hZGVyIGhlcmUuCisgICAgICAgICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oJ19fdGVtcF9fJywgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKKyAgICAgICAgICAgIF9zcGVjID0gaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbW9kdWxlID0gX3NwZWMubG9hZCgpCiAgICAgICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIHJlc3VsdCA9IChtb2R1bGUuX19kb2NfXyBvciAnJykuc3BsaXRsaW5lcygpWzBdCiAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fdGVtcF9fJ10KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgdGV4dCBtb2R1bGVzIGNhbiBiZSBkaXJlY3RseSBleGFtaW5lZAotICAgICAgICAgICAgcmVzdWx0ID0gc291cmNlX3N5bm9wc2lzKGZpbGUpCi0gICAgICAgICAgICBmaWxlLmNsb3NlKCkKLQorICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLl9fZG9jX18uc3BsaXRsaW5lcygpWzBdIGlmIG1vZHVsZS5fX2RvY19fIGVsc2UgTm9uZQorICAgICAgICAjIENhY2hlIHRoZSByZXN1bHQuCiAgICAgICAgIGNhY2hlW2ZpbGVuYW1lXSA9IChtdGltZSwgcmVzdWx0KQogICAgIHJldHVybiByZXN1bHQKIApAQCAtMjY3LDIwICsyODcsMjIgQEAKIAogZGVmIGltcG9ydGZpbGUocGF0aCk6CiAgICAgIiIiSW1wb3J0IGEgUHl0aG9uIHNvdXJjZSBmaWxlIG9yIGNvbXBpbGVkIGZpbGUgZ2l2ZW4gaXRzIHBhdGguIiIiCi0gICAgbWFnaWMgPSBpbXAuZ2V0X21hZ2ljKCkKKyAgICBtYWdpYyA9IGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUgogICAgIHdpdGggb3BlbihwYXRoLCAncmInKSBhcyBmaWxlOgotICAgICAgICBpZiBmaWxlLnJlYWQobGVuKG1hZ2ljKSkgPT0gbWFnaWM6Ci0gICAgICAgICAgICBraW5kID0gaW1wLlBZX0NPTVBJTEVECi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBraW5kID0gaW1wLlBZX1NPVVJDRQotICAgICAgICBmaWxlLnNlZWsoMCkKLSAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCi0gICAgICAgIG5hbWUsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5sb2FkX21vZHVsZShuYW1lLCBmaWxlLCBwYXRoLCAoZXh0LCAncicsIGtpbmQpKQotICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICByYWlzZSBFcnJvckR1cmluZ0ltcG9ydChwYXRoLCBzeXMuZXhjX2luZm8oKSkKLSAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIGlzX2J5dGVjb2RlID0gbWFnaWMgPT0gZmlsZS5yZWFkKGxlbihtYWdpYykpCisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpCisgICAgbmFtZSwgZXh0ID0gb3MucGF0aC5zcGxpdGV4dChmaWxlbmFtZSkKKyAgICBpZiBpc19ieXRlY29kZToKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLl9ib290c3RyYXAuU291cmNlbGVzc0ZpbGVMb2FkZXIobmFtZSwgcGF0aCkKKyAgICBlbHNlOgorICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKG5hbWUsIHBhdGgpCisgICAgIyBYWFggV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0byBwYXNzIGluIHRoZSBsb2FkZXIgaGVyZS4KKyAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obmFtZSwgcGF0aCwgbG9hZGVyPWxvYWRlcikKKyAgICBfc3BlYyA9IGltcG9ydGxpYi5fYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIF9zcGVjLmxvYWQoKQorICAgIGV4Y2VwdDoKKyAgICAgICAgcmFpc2UgRXJyb3JEdXJpbmdJbXBvcnQocGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAKIGRlZiBzYWZlaW1wb3J0KHBhdGgsIGZvcmNlbG9hZD0wLCBjYWNoZT17fSk6CiAgICAgIiIiSW1wb3J0IGEgbW9kdWxlOyBoYW5kbGUgZXJyb3JzOyByZXR1cm4gTm9uZSBpZiB0aGUgbW9kdWxlIGlzbid0IGZvdW5kLgpAQCAtNTc0LDEwICs1OTYsMTUgQEAKICAgICAgICAgICAgIGVsaWYgcGVwOgogICAgICAgICAgICAgICAgIHVybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvZGV2L3BlcHMvcGVwLSUwNGQvJyAlIGludChwZXApCiAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJzxhIGhyZWY9IiVzIj4lczwvYT4nICUgKHVybCwgZXNjYXBlKGFsbCkpKQorICAgICAgICAgICAgZWxpZiBzZWxmZG90OgorICAgICAgICAgICAgICAgICMgQ3JlYXRlIGEgbGluayBmb3IgbWV0aG9kcyBsaWtlICdzZWxmLm1ldGhvZCguLi4pJworICAgICAgICAgICAgICAgICMgYW5kIHVzZSA8c3Ryb25nPiBmb3IgYXR0cmlidXRlcyBsaWtlICdzZWxmLmF0dHInCisgICAgICAgICAgICAgICAgaWYgdGV4dFtlbmQ6ZW5kKzFdID09ICcoJzoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3NlbGYuJyArIHNlbGYubmFtZWxpbmsobmFtZSwgbWV0aG9kcykpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoJ3NlbGYuPHN0cm9uZz4lczwvc3Ryb25nPicgJSBuYW1lKQogICAgICAgICAgICAgZWxpZiB0ZXh0W2VuZDplbmQrMV0gPT0gJygnOgogICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKHNlbGYubmFtZWxpbmsobmFtZSwgbWV0aG9kcywgZnVuY3MsIGNsYXNzZXMpKQotICAgICAgICAgICAgZWxpZiBzZWxmZG90OgotICAgICAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKCdzZWxmLjxzdHJvbmc+JXM8L3N0cm9uZz4nICUgbmFtZSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoc2VsZi5uYW1lbGluayhuYW1lLCBjbGFzc2VzKSkKICAgICAgICAgICAgIGhlcmUgPSBlbmQKQEAgLTYyMiwxMCArNjQ5LDcgQEAKICAgICAgICAgaGVhZCA9ICc8YmlnPjxiaWc+PHN0cm9uZz4lczwvc3Ryb25nPjwvYmlnPjwvYmlnPicgJSBsaW5rZWRuYW1lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHBhdGggPSBpbnNwZWN0LmdldGFic2ZpbGUob2JqZWN0KQotICAgICAgICAgICAgdXJsID0gcGF0aAotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICAgICAgaW1wb3J0IG50dXJsMnBhdGgKLSAgICAgICAgICAgICAgICB1cmwgPSBudHVybDJwYXRoLnBhdGhuYW1lMnVybChwYXRoKQorICAgICAgICAgICAgdXJsID0gdXJsbGliLnBhcnNlLnF1b3RlKHBhdGgpCiAgICAgICAgICAgICBmaWxlbGluayA9IHNlbGYuZmlsZWxpbmsodXJsLCBwYXRoKQogICAgICAgICBleGNlcHQgVHlwZUVycm9yOgogICAgICAgICAgICAgZmlsZWxpbmsgPSAnKGJ1aWx0LWluKScKQEAgLTg5MSw3ICs5MTUsNyBAQAogICAgICAgICBhbmNob3IgPSAoY2wgYW5kIGNsLl9fbmFtZV9fIG9yICcnKSArICctJyArIG5hbWUKICAgICAgICAgbm90ZSA9ICcnCiAgICAgICAgIHNraXBkb2NzID0gMAotICAgICAgICBpZiBpbnNwZWN0LmlzbWV0aG9kKG9iamVjdCk6CisgICAgICAgIGlmIF9pc19ib3VuZF9tZXRob2Qob2JqZWN0KToKICAgICAgICAgICAgIGltY2xhc3MgPSBvYmplY3QuX19zZWxmX18uX19jbGFzc19fCiAgICAgICAgICAgICBpZiBjbDoKICAgICAgICAgICAgICAgICBpZiBpbWNsYXNzIGlzIG5vdCBjbDoKQEAgLTkwMiw3ICs5MjYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ll9fc2VsZl9fLl9fY2xhc3NfXywgbW9kKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIG5vdGUgPSAnIHVuYm91bmQgJXMgbWV0aG9kJyAlIHNlbGYuY2xhc3NsaW5rKGltY2xhc3MsbW9kKQotICAgICAgICAgICAgb2JqZWN0ID0gb2JqZWN0Ll9fZnVuY19fCiAKICAgICAgICAgaWYgbmFtZSA9PSByZWFsbmFtZToKICAgICAgICAgICAgIHRpdGxlID0gJzxhIG5hbWU9IiVzIj48c3Ryb25nPiVzPC9zdHJvbmc+PC9hPicgJSAoYW5jaG9yLCByZWFsbmFtZSkKQEAgLTkxNiwyMyArOTM5LDI0IEBACiAgICAgICAgICAgICAgICAgcmVhbGxpbmsgPSByZWFsbmFtZQogICAgICAgICAgICAgdGl0bGUgPSAnPGEgbmFtZT0iJXMiPjxzdHJvbmc+JXM8L3N0cm9uZz48L2E+ID0gJXMnICUgKAogICAgICAgICAgICAgICAgIGFuY2hvciwgbmFtZSwgcmVhbGxpbmspCi0gICAgICAgIGlmIGluc3BlY3QuaXNmdW5jdGlvbihvYmplY3QpOgotICAgICAgICAgICAgYXJncywgdmFyYXJncywga3dvbmx5YXJncywga3dkZWZhdWx0cywgdmFya3csIGRlZmF1bHRzLCBhbm4gPSBcCi0gICAgICAgICAgICAgICAgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhvYmplY3QpCi0gICAgICAgICAgICBhcmdzcGVjID0gaW5zcGVjdC5mb3JtYXRhcmdzcGVjKAotICAgICAgICAgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIGt3b25seWFyZ3MsIGt3ZGVmYXVsdHMsIHZhcmt3LCBkZWZhdWx0cywgYW5uLAotICAgICAgICAgICAgICAgIGZvcm1hdHZhbHVlPXNlbGYuZm9ybWF0dmFsdWUsCi0gICAgICAgICAgICAgICAgZm9ybWF0YW5ub3RhdGlvbj1pbnNwZWN0LmZvcm1hdGFubm90YXRpb25yZWxhdGl2ZXRvKG9iamVjdCkpCi0gICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgotICAgICAgICAgICAgICAgIHRpdGxlID0gJzxzdHJvbmc+JXM8L3N0cm9uZz4gPGVtPmxhbWJkYTwvZW0+ICcgJSBuYW1lCi0gICAgICAgICAgICAgICAgIyBYWFggbGFtYmRhJ3Mgd29uJ3QgdXN1YWxseSBoYXZlIGZ1bmNfYW5ub3RhdGlvbnNbJ3JldHVybiddCi0gICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgc3ludGF4IGRvZXNuJ3Qgc3VwcG9ydCBidXQgaXQgaXMgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgIyBTbyByZW1vdmluZyBwYXJlbnRoZXNlcyBpc24ndCB0cnVseSBzYWZlLgotICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBhcmdzcGVjWzE6LTFdICMgcmVtb3ZlIHBhcmVudGhlc2VzCi0gICAgICAgIGVsc2U6CisgICAgICAgIGFyZ3NwZWMgPSBOb25lCisgICAgICAgIGlmIGluc3BlY3QuaXNyb3V0aW5lKG9iamVjdCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUob2JqZWN0KQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNpZ25hdHVyZToKKyAgICAgICAgICAgICAgICBhcmdzcGVjID0gc3RyKHNpZ25hdHVyZSkKKyAgICAgICAgICAgICAgICBpZiByZWFsbmFtZSA9PSAnPGxhbWJkYT4nOgorICAgICAgICAgICAgICAgICAgICB0aXRsZSA9ICc8c3Ryb25nPiVzPC9zdHJvbmc+IDxlbT5sYW1iZGE8L2VtPiAnICUgbmFtZQorICAgICAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KKyAgICAgICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgc3ludGF4IGRvZXNuJ3Qgc3VwcG9ydCBidXQgaXQgaXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKKyAgICAgICAgaWYgbm90IGFyZ3NwZWM6CiAgICAgICAgICAgICBhcmdzcGVjID0gJyguLi4pJwogCi0gICAgICAgIGRlY2wgPSB0aXRsZSArIGFyZ3NwZWMgKyAobm90ZSBhbmQgc2VsZi5ncmV5KAorICAgICAgICBkZWNsID0gdGl0bGUgKyBzZWxmLmVzY2FwZShhcmdzcGVjKSArIChub3RlIGFuZCBzZWxmLmdyZXkoCiAgICAgICAgICAgICAgICAnPGZvbnQgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+JXM8L2ZvbnQ+JyAlIG5vdGUpKQogCiAgICAgICAgIGlmIHNraXBkb2NzOgpAQCAtMTIzNiw4ICsxMjYwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSBnZXRkb2ModmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBkb2MgPSBOb25lCi0gICAgICAgICAgICAgICAgICAgIHB1c2goc2VsZi5kb2NvdGhlcihnZXRhdHRyKG9iamVjdCwgbmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBtb2QsIG1heGxlbj03MCwgZG9jPWRvYykgKyAnXG4nKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSBnZXRhdHRyKG9iamVjdCwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gaG9tZWNscy5fX2RpY3RfX1tuYW1lXQorICAgICAgICAgICAgICAgICAgICBwdXNoKHNlbGYuZG9jb3RoZXIob2JqLCBuYW1lLCBtb2QsIG1heGxlbj03MCwgZG9jPWRvYykgKworICAgICAgICAgICAgICAgICAgICAgICAgICdcbicpCiAgICAgICAgICAgICByZXR1cm4gYXR0cnMKIAogICAgICAgICBhdHRycyA9IFsobmFtZSwga2luZCwgY2xzLCB2YWx1ZSkKQEAgLTEyNTksNyArMTI4Nyw2IEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRhZyA9ICJpbmhlcml0ZWQgZnJvbSAlcyIgJSBjbGFzc25hbWUodGhpc2NsYXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ll9fbW9kdWxlX18pCi0KICAgICAgICAgICAgICMgU29ydCBhdHRycyBieSBuYW1lLgogICAgICAgICAgICAgYXR0cnMuc29ydCgpCiAKQEAgLTEyNzQsNiArMTMwMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHQ6IHRbMV0gPT0gJ2RhdGEgZGVzY3JpcHRvcicpCiAgICAgICAgICAgICBhdHRycyA9IHNwaWxsZGF0YSgiRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyAlczpcbiIgJSB0YWcsIGF0dHJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhIHQ6IHRbMV0gPT0gJ2RhdGEnKQorCiAgICAgICAgICAgICBhc3NlcnQgYXR0cnMgPT0gW10KICAgICAgICAgICAgIGF0dHJzID0gaW5oZXJpdGVkCiAKQEAgLTEyOTIsNyArMTMyMCw3IEBACiAgICAgICAgIG5hbWUgPSBuYW1lIG9yIHJlYWxuYW1lCiAgICAgICAgIG5vdGUgPSAnJwogICAgICAgICBza2lwZG9jcyA9IDAKLSAgICAgICAgaWYgaW5zcGVjdC5pc21ldGhvZChvYmplY3QpOgorICAgICAgICBpZiBfaXNfYm91bmRfbWV0aG9kKG9iamVjdCk6CiAgICAgICAgICAgICBpbWNsYXNzID0gb2JqZWN0Ll9fc2VsZl9fLl9fY2xhc3NfXwogICAgICAgICAgICAgaWYgY2w6CiAgICAgICAgICAgICAgICAgaWYgaW1jbGFzcyBpcyBub3QgY2w6CkBAIC0xMzAzLDcgKzEzMzEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0Ll9fc2VsZl9fLl9fY2xhc3NfXywgbW9kKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIG5vdGUgPSAnIHVuYm91bmQgJXMgbWV0aG9kJyAlIGNsYXNzbmFtZShpbWNsYXNzLG1vZCkKLSAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdC5fX2Z1bmNfXwogCiAgICAgICAgIGlmIG5hbWUgPT0gcmVhbG5hbWU6CiAgICAgICAgICAgICB0aXRsZSA9IHNlbGYuYm9sZChyZWFsbmFtZSkKQEAgLTEzMTIsMjAgKzEzMzksMjIgQEAKICAgICAgICAgICAgICAgICBjbC5fX2RpY3RfX1tyZWFsbmFtZV0gaXMgb2JqZWN0KToKICAgICAgICAgICAgICAgICBza2lwZG9jcyA9IDEKICAgICAgICAgICAgIHRpdGxlID0gc2VsZi5ib2xkKG5hbWUpICsgJyA9ICcgKyByZWFsbmFtZQotICAgICAgICBpZiBpbnNwZWN0LmlzZnVuY3Rpb24ob2JqZWN0KToKLSAgICAgICAgICAgIGFyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywga3dvbmx5YXJncywga3dkZWZhdWx0cywgYW5uID0gXAotICAgICAgICAgICAgICBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG9iamVjdCkKLSAgICAgICAgICAgIGFyZ3NwZWMgPSBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoCi0gICAgICAgICAgICAgICAgYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCBhbm4sCi0gICAgICAgICAgICAgICAgZm9ybWF0dmFsdWU9c2VsZi5mb3JtYXR2YWx1ZSwKLSAgICAgICAgICAgICAgICBmb3JtYXRhbm5vdGF0aW9uPWluc3BlY3QuZm9ybWF0YW5ub3RhdGlvbnJlbGF0aXZldG8ob2JqZWN0KSkKLSAgICAgICAgICAgIGlmIHJlYWxuYW1lID09ICc8bGFtYmRhPic6Ci0gICAgICAgICAgICAgICAgdGl0bGUgPSBzZWxmLmJvbGQobmFtZSkgKyAnIGxhbWJkYSAnCi0gICAgICAgICAgICAgICAgIyBYWFggbGFtYmRhJ3Mgd29uJ3QgdXN1YWxseSBoYXZlIGZ1bmNfYW5ub3RhdGlvbnNbJ3JldHVybiddCi0gICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgc3ludGF4IGRvZXNuJ3Qgc3VwcG9ydCBidXQgaXQgaXMgcG9zc2libGUuCi0gICAgICAgICAgICAgICAgIyBTbyByZW1vdmluZyBwYXJlbnRoZXNlcyBpc24ndCB0cnVseSBzYWZlLgotICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBhcmdzcGVjWzE6LTFdICMgcmVtb3ZlIHBhcmVudGhlc2VzCi0gICAgICAgIGVsc2U6CisgICAgICAgIGFyZ3NwZWMgPSBOb25lCisKKyAgICAgICAgaWYgaW5zcGVjdC5pc3JvdXRpbmUob2JqZWN0KToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBpbnNwZWN0LnNpZ25hdHVyZShvYmplY3QpCisgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gTm9uZQorICAgICAgICAgICAgaWYgc2lnbmF0dXJlOgorICAgICAgICAgICAgICAgIGFyZ3NwZWMgPSBzdHIoc2lnbmF0dXJlKQorICAgICAgICAgICAgICAgIGlmIHJlYWxuYW1lID09ICc8bGFtYmRhPic6CisgICAgICAgICAgICAgICAgICAgIHRpdGxlID0gc2VsZi5ib2xkKG5hbWUpICsgJyBsYW1iZGEgJworICAgICAgICAgICAgICAgICAgICAjIFhYWCBsYW1iZGEncyB3b24ndCB1c3VhbGx5IGhhdmUgZnVuY19hbm5vdGF0aW9uc1sncmV0dXJuJ10KKyAgICAgICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgc3ludGF4IGRvZXNuJ3Qgc3VwcG9ydCBidXQgaXQgaXMgcG9zc2libGUuCisgICAgICAgICAgICAgICAgICAgICMgU28gcmVtb3ZpbmcgcGFyZW50aGVzZXMgaXNuJ3QgdHJ1bHkgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgYXJnc3BlYyA9IGFyZ3NwZWNbMTotMV0gIyByZW1vdmUgcGFyZW50aGVzZXMKKyAgICAgICAgaWYgbm90IGFyZ3NwZWM6CiAgICAgICAgICAgICBhcmdzcGVjID0gJyguLi4pJwogICAgICAgICBkZWNsID0gdGl0bGUgKyBhcmdzcGVjICsgbm90ZQogCkBAIC0xMzgzLDYgKzE0MTIsOCBAQAogCiBkZWYgZ2V0cGFnZXIoKToKICAgICAiIiJEZWNpZGUgd2hhdCBtZXRob2QgdG8gdXNlIGZvciBwYWdpbmcgdGhyb3VnaCB0ZXh0LiIiIgorICAgIGlmIG5vdCBoYXNhdHRyKHN5cy5zdGRpbiwgImlzYXR0eSIpOgorICAgICAgICByZXR1cm4gcGxhaW5wYWdlcgogICAgIGlmIG5vdCBoYXNhdHRyKHN5cy5zdGRvdXQsICJpc2F0dHkiKToKICAgICAgICAgcmV0dXJuIHBsYWlucGFnZXIKICAgICBpZiBub3Qgc3lzLnN0ZGluLmlzYXR0eSgpIG9yIG5vdCBzeXMuc3Rkb3V0LmlzYXR0eSgpOgpAQCAtMTM5Niw3ICsxNDI3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogcGlwZXBhZ2VyKHRleHQsIG9zLmVudmlyb25bJ1BBR0VSJ10pCiAgICAgaWYgb3MuZW52aXJvbi5nZXQoJ1RFUk0nKSBpbiAoJ2R1bWInLCAnZW1hY3MnKToKICAgICAgICAgcmV0dXJuIHBsYWlucGFnZXIKLSAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJyBvciBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnb3MyJyk6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogdGVtcGZpbGVwYWdlcihwbGFpbih0ZXh0KSwgJ21vcmUgPCcpCiAgICAgaWYgaGFzYXR0cihvcywgJ3N5c3RlbScpIGFuZCBvcy5zeXN0ZW0oJyhsZXNzKSAyPi9kZXYvbnVsbCcpID09IDA6CiAgICAgICAgIHJldHVybiBsYW1iZGEgdGV4dDogcGlwZXBhZ2VyKHRleHQsICdsZXNzJykKQEAgLTE0MTgsNDAgKzE0NDksNjQgQEAKIAogZGVmIHBpcGVwYWdlcih0ZXh0LCBjbWQpOgogICAgICIiIlBhZ2UgdGhyb3VnaCB0ZXh0IGJ5IGZlZWRpbmcgaXQgdG8gYW5vdGhlciBwcm9ncmFtLiIiIgotICAgIHBpcGUgPSBvcy5wb3BlbihjbWQsICd3JykKKyAgICBpbXBvcnQgc3VicHJvY2VzcworICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3RkaW49c3VicHJvY2Vzcy5QSVBFKQogICAgIHRyeToKLSAgICAgICAgcGlwZS53cml0ZSh0ZXh0KQotICAgICAgICBwaXBlLmNsb3NlKCkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgd2l0aCBpby5UZXh0SU9XcmFwcGVyKHByb2Muc3RkaW4sIGVycm9ycz0nYmFja3NsYXNocmVwbGFjZScpIGFzIHBpcGU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGlwZS53cml0ZSh0ZXh0KQorICAgICAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgICAgICMgV2UndmUgaGVyZWJ5IGFiYW5kb25lZCB3aGF0ZXZlciB0ZXh0IGhhc24ndCBiZWVuIHdyaXR0ZW4sCisgICAgICAgICAgICAgICAgIyBidXQgdGhlIHBhZ2VyIGlzIHN0aWxsIGluIGNvbnRyb2wgb2YgdGhlIHRlcm1pbmFsLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcyAjIElnbm9yZSBicm9rZW4gcGlwZXMgY2F1c2VkIGJ5IHF1aXR0aW5nIHRoZSBwYWdlciBwcm9ncmFtLgorICAgIHdoaWxlIFRydWU6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHByb2Mud2FpdCgpCisgICAgICAgICAgICBicmVhaworICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICAjIElnbm9yZSBjdGwtYyBsaWtlIHRoZSBwYWdlciBpdHNlbGYgZG9lcy4gIE90aGVyd2lzZSB0aGUgcGFnZXIgaXMKKyAgICAgICAgICAgICMgbGVmdCBydW5uaW5nIGFuZCB0aGUgdGVybWluYWwgaXMgaW4gcmF3IG1vZGUgYW5kIHVudXNhYmxlLgorICAgICAgICAgICAgcGFzcwogCiBkZWYgdGVtcGZpbGVwYWdlcih0ZXh0LCBjbWQpOgogICAgICIiIlBhZ2UgdGhyb3VnaCB0ZXh0IGJ5IGludm9raW5nIGEgcHJvZ3JhbSBvbiBhIHRlbXBvcmFyeSBmaWxlLiIiIgogICAgIGltcG9ydCB0ZW1wZmlsZQogICAgIGZpbGVuYW1lID0gdGVtcGZpbGUubWt0ZW1wKCkKLSAgICBmaWxlID0gb3BlbihmaWxlbmFtZSwgJ3cnKQotICAgIGZpbGUud3JpdGUodGV4dCkKLSAgICBmaWxlLmNsb3NlKCkKKyAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JywgZXJyb3JzPSdiYWNrc2xhc2hyZXBsYWNlJykgYXMgZmlsZToKKyAgICAgICAgZmlsZS53cml0ZSh0ZXh0KQogICAgIHRyeToKICAgICAgICAgb3Muc3lzdGVtKGNtZCArICcgIicgKyBmaWxlbmFtZSArICciJykKICAgICBmaW5hbGx5OgogICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCiAKK2RlZiBfZXNjYXBlX3N0ZG91dCh0ZXh0KToKKyAgICAjIEVzY2FwZSBub24tZW5jb2RhYmxlIGNoYXJhY3RlcnMgdG8gYXZvaWQgZW5jb2RpbmcgZXJyb3JzIGxhdGVyCisgICAgZW5jb2RpbmcgPSBnZXRhdHRyKHN5cy5zdGRvdXQsICdlbmNvZGluZycsIE5vbmUpIG9yICd1dGYtOCcKKyAgICByZXR1cm4gdGV4dC5lbmNvZGUoZW5jb2RpbmcsICdiYWNrc2xhc2hyZXBsYWNlJykuZGVjb2RlKGVuY29kaW5nKQorCiBkZWYgdHR5cGFnZXIodGV4dCk6CiAgICAgIiIiUGFnZSB0aHJvdWdoIHRleHQgb24gYSB0ZXh0IHRlcm1pbmFsLiIiIgotICAgIGxpbmVzID0gcGxhaW4odGV4dCkuc3BsaXQoJ1xuJykKKyAgICBsaW5lcyA9IHBsYWluKF9lc2NhcGVfc3Rkb3V0KHRleHQpKS5zcGxpdCgnXG4nKQogICAgIHRyeToKICAgICAgICAgaW1wb3J0IHR0eQogICAgICAgICBmZCA9IHN5cy5zdGRpbi5maWxlbm8oKQogICAgICAgICBvbGQgPSB0dHkudGNnZXRhdHRyKGZkKQogICAgICAgICB0dHkuc2V0Y2JyZWFrKGZkKQogICAgICAgICBnZXRjaGFyID0gbGFtYmRhOiBzeXMuc3RkaW4ucmVhZCgxKQotICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yKToKKyAgICBleGNlcHQgKEltcG9ydEVycm9yLCBBdHRyaWJ1dGVFcnJvciwgaW8uVW5zdXBwb3J0ZWRPcGVyYXRpb24pOgogICAgICAgICB0dHkgPSBOb25lCiAgICAgICAgIGdldGNoYXIgPSBsYW1iZGE6IHN5cy5zdGRpbi5yZWFkbGluZSgpWzotMV1bOjFdCiAKICAgICB0cnk6Ci0gICAgICAgIHIgPSBpbmMgPSBvcy5lbnZpcm9uLmdldCgnTElORVMnLCAyNSkgLSAxCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBpbnQob3MuZW52aXJvbi5nZXQoJ0xJTkVTJywgMCkpCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgaCA9IDAKKyAgICAgICAgaWYgaCA8PSAxOgorICAgICAgICAgICAgaCA9IDI1CisgICAgICAgIHIgPSBpbmMgPSBoIC0gMQogICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCdcbicuam9pbihsaW5lc1s6aW5jXSkgKyAnXG4nKQogICAgICAgICB3aGlsZSBsaW5lc1tyOl06CiAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCctLSBtb3JlIC0tJykKQEAgLTE0NzcsNyArMTUzMiw3IEBACiAKIGRlZiBwbGFpbnBhZ2VyKHRleHQpOgogICAgICIiIlNpbXBseSBwcmludCB1bmZvcm1hdHRlZCB0ZXh0LiAgVGhpcyBpcyB0aGUgdWx0aW1hdGUgZmFsbGJhY2suIiIiCi0gICAgc3lzLnN0ZG91dC53cml0ZShwbGFpbih0ZXh0KSkKKyAgICBzeXMuc3Rkb3V0LndyaXRlKHBsYWluKF9lc2NhcGVfc3Rkb3V0KHRleHQpKSkKIAogZGVmIGRlc2NyaWJlKHRoaW5nKToKICAgICAiIiJQcm9kdWNlIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIGdpdmVuIHRoaW5nLiIiIgpAQCAtMTUzNSw3ICsxNTkwLDcgQEAKICAgICAiIiJHaXZlbiBhbiBvYmplY3Qgb3IgYSBwYXRoIHRvIGFuIG9iamVjdCwgZ2V0IHRoZSBvYmplY3QgYW5kIGl0cyBuYW1lLiIiIgogICAgIGlmIGlzaW5zdGFuY2UodGhpbmcsIHN0cik6CiAgICAgICAgIG9iamVjdCA9IGxvY2F0ZSh0aGluZywgZm9yY2Vsb2FkKQotICAgICAgICBpZiBub3Qgb2JqZWN0OgorICAgICAgICBpZiBvYmplY3QgaXMgTm9uZToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKCdubyBQeXRob24gZG9jdW1lbnRhdGlvbiBmb3VuZCBmb3IgJXInICUgdGhpbmcpCiAgICAgICAgIHJldHVybiBvYmplY3QsIHRoaW5nCiAgICAgZWxzZToKQEAgLTE2MDUsNyArMTY2MCw3IEBACiAgICAgIyBpbiBweWRvY19kYXRhL3RvcGljcy5weS4KICAgICAjCiAgICAgIyBDQVVUSU9OOiBpZiB5b3UgY2hhbmdlIG9uZSBvZiB0aGVzZSBkaWN0aW9uYXJpZXMsIGJlIHN1cmUgdG8gYWRhcHQgdGhlCi0gICAgIyAgICAgICAgICBsaXN0IG9mIG5lZWRlZCBsYWJlbHMgaW4gRG9jL3Rvb2xzL3NwaGlueGV4dC9weXNwZWNpZmljLnB5IGFuZAorICAgICMgICAgICAgICAgbGlzdCBvZiBuZWVkZWQgbGFiZWxzIGluIERvYy90b29scy9weXNwZWNpZmljLnB5IGFuZAogICAgICMgICAgICAgICAgcmVnZW5lcmF0ZSB0aGUgcHlkb2NfZGF0YS90b3BpY3MucHkgZmlsZSBieSBydW5uaW5nCiAgICAgIyAgICAgICAgICAgICAgbWFrZSBweWRvYy10b3BpY3MKICAgICAjICAgICAgICAgIGluIERvYy8gYW5kIGNvcHlpbmcgdGhlIG91dHB1dCBmaWxlIGludG8gdGhlIExpYi8gZGlyZWN0b3J5LgpAQCAtMTcwNSw3ICsxNzYwLDYgQEAKICAgICAgICAgJ1RSQUNFQkFDS1MnOiAnVFlQRVMnLAogICAgICAgICAnTk9ORSc6ICgnYmx0aW4tbnVsbC1vYmplY3QnLCAnJyksCiAgICAgICAgICdFTExJUFNJUyc6ICgnYmx0aW4tZWxsaXBzaXMtb2JqZWN0JywgJ1NMSUNJTkdTJyksCi0gICAgICAgICdGSUxFUyc6ICgnYmx0aW4tZmlsZS1vYmplY3RzJywgJycpLAogICAgICAgICAnU1BFQ0lBTEFUVFJJQlVURVMnOiAoJ3NwZWNpYWxhdHRycycsICcnKSwKICAgICAgICAgJ0NMQVNTRVMnOiAoJ3R5cGVzJywgJ2NsYXNzIFNQRUNJQUxNRVRIT0RTIFBSSVZBVEVOQU1FUycpLAogICAgICAgICAnTU9EVUxFUyc6ICgndHlwZXNtb2R1bGVzJywgJ2ltcG9ydCcpLApAQCAtMTg0MSw3ICsxODk1LDcgQEAKIAogICAgIGRlZiBpbnRybyhzZWxmKToKICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCi1XZWxjb21lIHRvIFB5dGhvbiAlcyEgIFRoaXMgaXMgdGhlIGludGVyYWN0aXZlIGhlbHAgdXRpbGl0eS4KK1dlbGNvbWUgdG8gUHl0aG9uICVzJ3MgaGVscCB1dGlsaXR5IQogCiBJZiB0aGlzIGlzIHlvdXIgZmlyc3QgdGltZSB1c2luZyBQeXRob24sIHlvdSBzaG91bGQgZGVmaW5pdGVseSBjaGVjayBvdXQKIHRoZSB0dXRvcmlhbCBvbiB0aGUgSW50ZXJuZXQgYXQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8lcy90dXRvcmlhbC8uCkBAIC0xODUwLDEwICsxOTA0LDEwIEBACiBQeXRob24gcHJvZ3JhbXMgYW5kIHVzaW5nIFB5dGhvbiBtb2R1bGVzLiAgVG8gcXVpdCB0aGlzIGhlbHAgdXRpbGl0eSBhbmQKIHJldHVybiB0byB0aGUgaW50ZXJwcmV0ZXIsIGp1c3QgdHlwZSAicXVpdCIuCiAKLVRvIGdldCBhIGxpc3Qgb2YgYXZhaWxhYmxlIG1vZHVsZXMsIGtleXdvcmRzLCBvciB0b3BpY3MsIHR5cGUgIm1vZHVsZXMiLAotImtleXdvcmRzIiwgb3IgInRvcGljcyIuICBFYWNoIG1vZHVsZSBhbHNvIGNvbWVzIHdpdGggYSBvbmUtbGluZSBzdW1tYXJ5Ci1vZiB3aGF0IGl0IGRvZXM7IHRvIGxpc3QgdGhlIG1vZHVsZXMgd2hvc2Ugc3VtbWFyaWVzIGNvbnRhaW4gYSBnaXZlbiB3b3JkCi1zdWNoIGFzICJzcGFtIiwgdHlwZSAibW9kdWxlcyBzcGFtIi4KK1RvIGdldCBhIGxpc3Qgb2YgYXZhaWxhYmxlIG1vZHVsZXMsIGtleXdvcmRzLCBzeW1ib2xzLCBvciB0b3BpY3MsIHR5cGUKKyJtb2R1bGVzIiwgImtleXdvcmRzIiwgInN5bWJvbHMiLCBvciAidG9waWNzIi4gIEVhY2ggbW9kdWxlIGFsc28gY29tZXMKK3dpdGggYSBvbmUtbGluZSBzdW1tYXJ5IG9mIHdoYXQgaXQgZG9lczsgdG8gbGlzdCB0aGUgbW9kdWxlcyB3aG9zZSBuYW1lCitvciBzdW1tYXJ5IGNvbnRhaW4gYSBnaXZlbiBzdHJpbmcgc3VjaCBhcyAic3BhbSIsIHR5cGUgIm1vZHVsZXMgc3BhbSIuCiAnJycgJSB0dXBsZShbc3lzLnZlcnNpb25bOjNdXSoyKSkKIAogICAgIGRlZiBsaXN0KHNlbGYsIGl0ZW1zLCBjb2x1bW5zPTQsIHdpZHRoPTgwKToKQEAgLTE5MTcsMTEgKzE5NzEsMTAgQEAKICAgICAgICAgaWYgbW9yZV94cmVmczoKICAgICAgICAgICAgIHhyZWZzID0gKHhyZWZzIG9yICcnKSArICcgJyArIG1vcmVfeHJlZnMKICAgICAgICAgaWYgeHJlZnM6Ci0gICAgICAgICAgICBpbXBvcnQgZm9ybWF0dGVyCi0gICAgICAgICAgICBidWZmZXIgPSBpby5TdHJpbmdJTygpCi0gICAgICAgICAgICBmb3JtYXR0ZXIuRHVtYldyaXRlcihidWZmZXIpLnNlbmRfZmxvd2luZ19kYXRhKAotICAgICAgICAgICAgICAgICdSZWxhdGVkIGhlbHAgdG9waWNzOiAnICsgJywgJy5qb2luKHhyZWZzLnNwbGl0KCkpICsgJ1xuJykKLSAgICAgICAgICAgIHNlbGYub3V0cHV0LndyaXRlKCdcbiVzXG4nICUgYnVmZmVyLmdldHZhbHVlKCkpCisgICAgICAgICAgICBpbXBvcnQgdGV4dHdyYXAKKyAgICAgICAgICAgIHRleHQgPSAnUmVsYXRlZCBoZWxwIHRvcGljczogJyArICcsICcuam9pbih4cmVmcy5zcGxpdCgpKSArICdcbicKKyAgICAgICAgICAgIHdyYXBwZWRfdGV4dCA9IHRleHR3cmFwLndyYXAodGV4dCwgNzIpCisgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnXG4lc1xuJyAlICcnLmpvaW4od3JhcHBlZF90ZXh0KSkKIAogICAgIGRlZiBfZ2V0dG9waWMoc2VsZiwgdG9waWMsIG1vcmVfeHJlZnM9JycpOgogICAgICAgICAiIiJSZXR1cm4gdW5idWZmZXJlZCB0dXBsZSBvZiAodG9waWMsIHhyZWZzKS4KQEAgLTE5NTgsOSArMjAxMSwxMCBAQAogICAgIGRlZiBsaXN0bW9kdWxlcyhzZWxmLCBrZXk9JycpOgogICAgICAgICBpZiBrZXk6CiAgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnJycKLUhlcmUgaXMgYSBsaXN0IG9mIG1hdGNoaW5nIG1vZHVsZXMuICBFbnRlciBhbnkgbW9kdWxlIG5hbWUgdG8gZ2V0IG1vcmUgaGVscC4KK0hlcmUgaXMgYSBsaXN0IG9mIG1vZHVsZXMgd2hvc2UgbmFtZSBvciBzdW1tYXJ5IGNvbnRhaW5zICd7fScuCitJZiB0aGVyZSBhcmUgYW55LCBlbnRlciBhIG1vZHVsZSBuYW1lIHRvIGdldCBtb3JlIGhlbHAuCiAKLScnJykKKycnJy5mb3JtYXQoa2V5KSkKICAgICAgICAgICAgIGFwcm9wb3Moa2V5KQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5vdXRwdXQud3JpdGUoJycnCkBAIC0xOTc5LDM1ICsyMDMzLDExIEBACiAgICAgICAgICAgICBzZWxmLmxpc3QobW9kdWxlcy5rZXlzKCkpCiAgICAgICAgICAgICBzZWxmLm91dHB1dC53cml0ZSgnJycKIEVudGVyIGFueSBtb2R1bGUgbmFtZSB0byBnZXQgbW9yZSBoZWxwLiAgT3IsIHR5cGUgIm1vZHVsZXMgc3BhbSIgdG8gc2VhcmNoCi1mb3IgbW9kdWxlcyB3aG9zZSBkZXNjcmlwdGlvbnMgY29udGFpbiB0aGUgd29yZCAic3BhbSIuCitmb3IgbW9kdWxlcyB3aG9zZSBuYW1lIG9yIHN1bW1hcnkgY29udGFpbiB0aGUgc3RyaW5nICJzcGFtIi4KICcnJykKIAogaGVscCA9IEhlbHBlcigpCiAKLWNsYXNzIFNjYW5uZXI6Ci0gICAgIiIiQSBnZW5lcmljIHRyZWUgaXRlcmF0b3IuIiIiCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHJvb3RzLCBjaGlsZHJlbiwgZGVzY2VuZHApOgotICAgICAgICBzZWxmLnJvb3RzID0gcm9vdHNbOl0KLSAgICAgICAgc2VsZi5zdGF0ZSA9IFtdCi0gICAgICAgIHNlbGYuY2hpbGRyZW4gPSBjaGlsZHJlbgotICAgICAgICBzZWxmLmRlc2NlbmRwID0gZGVzY2VuZHAKLQotICAgIGRlZiBuZXh0KHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5zdGF0ZToKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLnJvb3RzOgotICAgICAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgICAgICByb290ID0gc2VsZi5yb290cy5wb3AoMCkKLSAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBbKHJvb3QsIHNlbGYuY2hpbGRyZW4ocm9vdCkpXQotICAgICAgICBub2RlLCBjaGlsZHJlbiA9IHNlbGYuc3RhdGVbLTFdCi0gICAgICAgIGlmIG5vdCBjaGlsZHJlbjoKLSAgICAgICAgICAgIHNlbGYuc3RhdGUucG9wKCkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoKQotICAgICAgICBjaGlsZCA9IGNoaWxkcmVuLnBvcCgwKQotICAgICAgICBpZiBzZWxmLmRlc2NlbmRwKGNoaWxkKToKLSAgICAgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKChjaGlsZCwgc2VsZi5jaGlsZHJlbihjaGlsZCkpKQotICAgICAgICByZXR1cm4gY2hpbGQKLQotCiBjbGFzcyBNb2R1bGVTY2FubmVyOgogICAgICIiIkFuIGludGVycnVwdGlibGUgc2Nhbm5lciB0aGF0IHNlYXJjaGVzIG1vZHVsZSBzeW5vcHNlcy4iIiIKIApAQCAtMjAzNiwxMCArMjA2NiwxMSBAQAogICAgICAgICAgICAgICAgIGNhbGxiYWNrKE5vbmUsIG1vZG5hbWUsICcnKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IGltcG9ydGVyLmZpbmRfbW9kdWxlKG1vZG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBwa2d1dGlsLl9nZXRfc3BlYyhpbXBvcnRlciwgbW9kbmFtZSkKICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICMgcmFpc2VkIGJ5IHRlc3RzIGZvciBiYWQgY29kaW5nIGNvb2tpZXMgb3IgQk9NCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgbG9hZGVyID0gc3BlYy5sb2FkZXIKICAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGxvYWRlciwgJ2dldF9zb3VyY2UnKToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlID0gbG9hZGVyLmdldF9zb3VyY2UobW9kbmFtZSkKQEAgLTIwNTMsMTMgKzIwODQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBOb25lCiAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgX3NwZWMgPSBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKG1vZG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBfc3BlYy5sb2FkKCkKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgb25lcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVycm9yKG1vZG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICBkZXNjID0gKG1vZHVsZS5fX2RvY19fIG9yICcnKS5zcGxpdGxpbmVzKClbMF0KKyAgICAgICAgICAgICAgICAgICAgZGVzYyA9IG1vZHVsZS5fX2RvY19fLnNwbGl0bGluZXMoKVswXSBpZiBtb2R1bGUuX19kb2NfXyBlbHNlICcnCiAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBnZXRhdHRyKG1vZHVsZSwnX19maWxlX18nLE5vbmUpCiAgICAgICAgICAgICAgICAgbmFtZSA9IG1vZG5hbWUgKyAnIC0gJyArIGRlc2MKICAgICAgICAgICAgICAgICBpZiBuYW1lLmxvd2VyKCkuZmluZChrZXkpID49IDA6CkBAIC0yMzIzLDcgKzIzNTUsOSBAQAogCiAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCdpZ25vcmUnKSAjIGlnbm9yZSBwcm9ibGVtcyBkdXJpbmcgaW1wb3J0Ci0gICAgICAgICAgICBNb2R1bGVTY2FubmVyKCkucnVuKGNhbGxiYWNrLCBrZXkpCisgICAgICAgICAgICBkZWYgb25lcnJvcihtb2RuYW1lKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBNb2R1bGVTY2FubmVyKCkucnVuKGNhbGxiYWNrLCBrZXksIG9uZXJyb3I9b25lcnJvcikKIAogICAgICAgICAjIGZvcm1hdCBwYWdlCiAgICAgICAgIGRlZiBibHRpbmxpbmsobmFtZSk6CkBAIC0yMzQxLDcgKzIzNzUsNyBAQAogCiAgICAgZGVmIGh0bWxfZ2V0ZmlsZShwYXRoKToKICAgICAgICAgIiIiR2V0IGFuZCBkaXNwbGF5IGEgc291cmNlIGZpbGUgbGlzdGluZyBzYWZlbHkuIiIiCi0gICAgICAgIHBhdGggPSBwYXRoLnJlcGxhY2UoJyUyMCcsICcgJykKKyAgICAgICAgcGF0aCA9IHVybGxpYi5wYXJzZS51bnF1b3RlKHBhdGgpCiAgICAgICAgIHdpdGggdG9rZW5pemUub3BlbihwYXRoKSBhcyBmcDoKICAgICAgICAgICAgIGxpbmVzID0gaHRtbC5lc2NhcGUoZnAucmVhZCgpKQogICAgICAgICBib2R5ID0gJzxwcmU+JXM8L3ByZT4nICUgbGluZXMKZGlmZiAtLWdpdCBhL0xpYi9weWRvY19kYXRhL3RvcGljcy5weSBiL0xpYi9weWRvY19kYXRhL3RvcGljcy5weQppbmRleCBlMmZkMzgwLi4wYzQzYzI1IDEwMDY0NAotLS0gYS9MaWIvcHlkb2NfZGF0YS90b3BpY3MucHkKKysrIGIvTGliL3B5ZG9jX2RhdGEvdG9waWNzLnB5CkBAIC0xLDc5ICsxLDc5IEBACiAjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQotIyBBdXRvZ2VuZXJhdGVkIGJ5IFNwaGlueCBvbiBTdW4gRmViIDIzIDA4OjEzOjI1IDIwMTQKLXRvcGljcyA9IHsnYXNzZXJ0JzogJ1xuVGhlICJhc3NlcnQiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NlcnQgc3RhdGVtZW50cyBhcmUgYSBjb252ZW5pZW50IHdheSB0byBpbnNlcnQgZGVidWdnaW5nIGFzc2VydGlvbnNcbmludG8gYSBwcm9ncmFtOlxuXG4gICBhc3NlcnRfc3RtdCA6Oj0gImFzc2VydCIgZXhwcmVzc2lvbiBbIiwiIGV4cHJlc3Npb25dXG5cblRoZSBzaW1wbGUgZm9ybSwgImFzc2VydCBleHByZXNzaW9uIiwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjogcmFpc2UgQXNzZXJ0aW9uRXJyb3JcblxuVGhlIGV4dGVuZGVkIGZvcm0sICJhc3NlcnQgZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yIiwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjE6IHJhaXNlIEFzc2VydGlvbkVycm9yKGV4cHJlc3Npb24yKVxuXG5UaGVzZSBlcXVpdmFsZW5jZXMgYXNzdW1lIHRoYXQgIl9fZGVidWdfXyIgYW5kICJBc3NlcnRpb25FcnJvciIgcmVmZXJcbnRvIHRoZSBidWlsdC1pbiB2YXJpYWJsZXMgd2l0aCB0aG9zZSBuYW1lcy4gIEluIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIHZhcmlhYmxlICJfX2RlYnVnX18iIGlzICJUcnVlIiB1bmRlclxubm9ybWFsIGNpcmN1bXN0YW5jZXMsICJGYWxzZSIgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIChjb21tYW5kXG5saW5lIG9wdGlvbiAtTykuICBUaGUgY3VycmVudCBjb2RlIGdlbmVyYXRvciBlbWl0cyBubyBjb2RlIGZvciBhblxuYXNzZXJ0IHN0YXRlbWVudCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgYXQgY29tcGlsZSB0aW1lLiAgTm90ZVxudGhhdCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGV4cHJlc3Npb25cbnRoYXQgZmFpbGVkIGluIHRoZSBlcnJvciBtZXNzYWdlOyBpdCB3aWxsIGJlIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZVxuc3RhY2sgdHJhY2UuXG5cbkFzc2lnbm1lbnRzIHRvICJfX2RlYnVnX18iIGFyZSBpbGxlZ2FsLiAgVGhlIHZhbHVlIGZvciB0aGUgYnVpbHQtaW5cbnZhcmlhYmxlIGlzIGRldGVybWluZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc3RhcnRzLlxuJywKLSAnYXNzaWdubWVudCc6ICdcbkFzc2lnbm1lbnQgc3RhdGVtZW50c1xuKioqKioqKioqKioqKioqKioqKioqXG5cbkFzc2lnbm1lbnQgc3RhdGVtZW50cyBhcmUgdXNlZCB0byAocmUpYmluZCBuYW1lcyB0byB2YWx1ZXMgYW5kIHRvXG5tb2RpZnkgYXR0cmlidXRlcyBvciBpdGVtcyBvZiBtdXRhYmxlIG9iamVjdHM6XG5cbiAgIGFzc2lnbm1lbnRfc3RtdCA6Oj0gKHRhcmdldF9saXN0ICI9IikrIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgdGFyZ2V0X2xpc3QgICAgIDo6PSB0YXJnZXQgKCIsIiB0YXJnZXQpKiBbIiwiXVxuICAgdGFyZ2V0ICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG4gICAgICAgICAgICAgIHwgIigiIHRhcmdldF9saXN0ICIpIlxuICAgICAgICAgICAgICB8ICJbIiB0YXJnZXRfbGlzdCAiXSJcbiAgICAgICAgICAgICAgfCBhdHRyaWJ1dGVyZWZcbiAgICAgICAgICAgICAgfCBzdWJzY3JpcHRpb25cbiAgICAgICAgICAgICAgfCBzbGljaW5nXG4gICAgICAgICAgICAgIHwgIioiIHRhcmdldFxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGxpc3QgKHJlbWVtYmVyIHRoYXRcbnRoaXMgY2FuIGJlIGEgc2luZ2xlIGV4cHJlc3Npb24gb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgdGhlIGxhdHRlclxueWllbGRpbmcgYSB0dXBsZSkgYW5kIGFzc2lnbnMgdGhlIHNpbmdsZSByZXN1bHRpbmcgb2JqZWN0IHRvIGVhY2ggb2ZcbnRoZSB0YXJnZXQgbGlzdHMsIGZyb20gbGVmdCB0byByaWdodC5cblxuQXNzaWdubWVudCBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGRlcGVuZGluZyBvbiB0aGUgZm9ybSBvZiB0aGUgdGFyZ2V0XG4obGlzdCkuIFdoZW4gYSB0YXJnZXQgaXMgcGFydCBvZiBhIG11dGFibGUgb2JqZWN0IChhbiBhdHRyaWJ1dGVcbnJlZmVyZW5jZSwgc3Vic2NyaXB0aW9uIG9yIHNsaWNpbmcpLCB0aGUgbXV0YWJsZSBvYmplY3QgbXVzdFxudWx0aW1hdGVseSBwZXJmb3JtIHRoZSBhc3NpZ25tZW50IGFuZCBkZWNpZGUgYWJvdXQgaXRzIHZhbGlkaXR5LCBhbmRcbm1heSByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGFzc2lnbm1lbnQgaXMgdW5hY2NlcHRhYmxlLiAgVGhlIHJ1bGVzXG5vYnNlcnZlZCBieSB2YXJpb3VzIHR5cGVzIGFuZCB0aGUgZXhjZXB0aW9ucyByYWlzZWQgYXJlIGdpdmVuIHdpdGggdGhlXG5kZWZpbml0aW9uIG9mIHRoZSBvYmplY3QgdHlwZXMgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZVxuaGllcmFyY2h5KikuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgdGFyZ2V0IGxpc3QsIG9wdGlvbmFsbHkgZW5jbG9zZWQgaW5cbnBhcmVudGhlc2VzIG9yIHNxdWFyZSBicmFja2V0cywgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhcyBmb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIHNpbmdsZSB0YXJnZXQ6IFRoZSBvYmplY3QgaXMgYXNzaWduZWQgdG9cbiAgdGhhdCB0YXJnZXQuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGFyZ2V0czogVGhlXG4gIG9iamVjdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zIGFzIHRoZXJlXG4gIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmUgYXNzaWduZWQsIGZyb21cbiAgbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuICAqIElmIHRoZSB0YXJnZXQgbGlzdCBjb250YWlucyBvbmUgdGFyZ2V0IHByZWZpeGVkIHdpdGggYW5cbiAgICBhc3RlcmlzaywgY2FsbGVkIGEgInN0YXJyZWQiIHRhcmdldDogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2VcbiAgICB3aXRoIGF0IGxlYXN0IGFzIG1hbnkgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldFxuICAgIGxpc3QsIG1pbnVzIG9uZS4gIFRoZSBmaXJzdCBpdGVtcyBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkLFxuICAgIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIHRhcmdldHMgYmVmb3JlIHRoZSBzdGFycmVkIHRhcmdldC4gIFRoZVxuICAgIGZpbmFsIGl0ZW1zIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQgdG8gdGhlIHRhcmdldHMgYWZ0ZXIgdGhlXG4gICAgc3RhcnJlZCB0YXJnZXQuICBBIGxpc3Qgb2YgdGhlIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgc2VxdWVuY2UgaXNcbiAgICB0aGVuIGFzc2lnbmVkIHRvIHRoZSBzdGFycmVkIHRhcmdldCAodGhlIGxpc3QgY2FuIGJlIGVtcHR5KS5cblxuICAqIEVsc2U6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mXG4gICAgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZVxuICAgIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgc2luZ2xlIHRhcmdldCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzXG5mb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gaWRlbnRpZmllciAobmFtZSk6XG5cbiAgKiBJZiB0aGUgbmFtZSBkb2VzIG5vdCBvY2N1ciBpbiBhICJnbG9iYWwiIG9yICJub25sb2NhbCIgc3RhdGVtZW50XG4gICAgaW4gdGhlIGN1cnJlbnQgY29kZSBibG9jazogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGVcbiAgICBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZS5cblxuICAqIE90aGVyd2lzZTogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGUgZ2xvYmFsXG4gICAgbmFtZXNwYWNlIG9yIHRoZSBvdXRlciBuYW1lc3BhY2UgZGV0ZXJtaW5lZCBieSAibm9ubG9jYWwiLFxuICAgIHJlc3BlY3RpdmVseS5cblxuICBUaGUgbmFtZSBpcyByZWJvdW5kIGlmIGl0IHdhcyBhbHJlYWR5IGJvdW5kLiAgVGhpcyBtYXkgY2F1c2UgdGhlXG4gIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIG9iamVjdCBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSBuYW1lIHRvIHJlYWNoXG4gIHplcm8sIGNhdXNpbmcgdGhlIG9iamVjdCB0byBiZSBkZWFsbG9jYXRlZCBhbmQgaXRzIGRlc3RydWN0b3IgKGlmIGl0XG4gIGhhcyBvbmUpIHRvIGJlIGNhbGxlZC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgdGFyZ2V0IGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgb3IgaW5cbiAgc3F1YXJlIGJyYWNrZXRzOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXJcbiAgb2YgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgaXRzIGl0ZW1zIGFyZVxuICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gYXR0cmlidXRlIHJlZmVyZW5jZTogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpblxuICB0aGUgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhbiBvYmplY3Qgd2l0aFxuICBhc3NpZ25hYmxlIGF0dHJpYnV0ZXM7IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCAiVHlwZUVycm9yIiBpc1xuICByYWlzZWQuICBUaGF0IG9iamVjdCBpcyB0aGVuIGFza2VkIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvXG4gIHRoZSBnaXZlbiBhdHRyaWJ1dGU7IGlmIGl0IGNhbm5vdCBwZXJmb3JtIHRoZSBhc3NpZ25tZW50LCBpdCByYWlzZXNcbiAgYW4gZXhjZXB0aW9uICh1c3VhbGx5IGJ1dCBub3QgbmVjZXNzYXJpbHkgIkF0dHJpYnV0ZUVycm9yIikuXG5cbiAgTm90ZTogSWYgdGhlIG9iamVjdCBpcyBhIGNsYXNzIGluc3RhbmNlIGFuZCB0aGUgYXR0cmlidXRlIHJlZmVyZW5jZVxuICBvY2N1cnMgb24gYm90aCBzaWRlcyBvZiB0aGUgYXNzaWdubWVudCBvcGVyYXRvciwgdGhlIFJIUyBleHByZXNzaW9uLFxuICAiYS54IiBjYW4gYWNjZXNzIGVpdGhlciBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb3IgKGlmIG5vIGluc3RhbmNlXG4gIGF0dHJpYnV0ZSBleGlzdHMpIGEgY2xhc3MgYXR0cmlidXRlLiAgVGhlIExIUyB0YXJnZXQgImEueCIgaXMgYWx3YXlzXG4gIHNldCBhcyBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS4gIFRodXMsIHRoZVxuICB0d28gb2NjdXJyZW5jZXMgb2YgImEueCIgZG8gbm90IG5lY2Vzc2FyaWx5IHJlZmVyIHRvIHRoZSBzYW1lXG4gIGF0dHJpYnV0ZTogaWYgdGhlIFJIUyBleHByZXNzaW9uIHJlZmVycyB0byBhIGNsYXNzIGF0dHJpYnV0ZSwgdGhlXG4gIExIUyBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGF0dHJpYnV0ZSBhcyB0aGUgdGFyZ2V0IG9mIHRoZVxuICBhc3NpZ25tZW50OlxuXG4gICAgIGNsYXNzIENsczpcbiAgICAgICAgIHggPSAzICAgICAgICAgICAgICMgY2xhc3MgdmFyaWFibGVcbiAgICAgaW5zdCA9IENscygpXG4gICAgIGluc3QueCA9IGluc3QueCArIDEgICAjIHdyaXRlcyBpbnN0LnggYXMgNCBsZWF2aW5nIENscy54IGFzIDNcblxuICBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGRlc2NyaXB0b3JcbiAgYXR0cmlidXRlcywgc3VjaCBhcyBwcm9wZXJ0aWVzIGNyZWF0ZWQgd2l0aCAicHJvcGVydHkoKSIuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHN1YnNjcmlwdGlvbjogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBlaXRoZXIgYSBtdXRhYmxlIHNlcXVlbmNlXG4gIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpIG9yIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KS5cbiAgTmV4dCwgdGhlIHN1YnNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGEgbGlzdCksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCB5aWVsZCBhbiBpbnRlZ2VyLiAgSWYgaXQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZVxuICBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLCBhbmQgdGhlIHNlcXVlbmNlIGlzIGFza2VkXG4gIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvIGl0cyBpdGVtIHdpdGggdGhhdCBpbmRleC4gIElmIHRoZVxuICBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsICJJbmRleEVycm9yIiBpcyByYWlzZWQgKGFzc2lnbm1lbnQgdG8gYVxuICBzdWJzY3JpcHRlZCBzZXF1ZW5jZSBjYW5ub3QgYWRkIG5ldyBpdGVtcyB0byBhIGxpc3QpLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IGhhdmUgYSB0eXBlIGNvbXBhdGlibGUgd2l0aCB0aGUgbWFwcGluZ1wncyBrZXkgdHlwZSxcbiAgYW5kIHRoZSBtYXBwaW5nIGlzIHRoZW4gYXNrZWQgdG8gY3JlYXRlIGEga2V5L2RhdHVtIHBhaXIgd2hpY2ggbWFwc1xuICB0aGUgc3Vic2NyaXB0IHRvIHRoZSBhc3NpZ25lZCBvYmplY3QuICBUaGlzIGNhbiBlaXRoZXIgcmVwbGFjZSBhblxuICBleGlzdGluZyBrZXkvdmFsdWUgcGFpciB3aXRoIHRoZSBzYW1lIGtleSB2YWx1ZSwgb3IgaW5zZXJ0IGEgbmV3XG4gIGtleS92YWx1ZSBwYWlyIChpZiBubyBrZXkgd2l0aCB0aGUgc2FtZSB2YWx1ZSBleGlzdGVkKS5cblxuICBGb3IgdXNlci1kZWZpbmVkIG9iamVjdHMsIHRoZSAiX19zZXRpdGVtX18oKSIgbWV0aG9kIGlzIGNhbGxlZCB3aXRoXG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2xpY2luZzogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0XG4gIChzdWNoIGFzIGEgbGlzdCkuICBUaGUgYXNzaWduZWQgb2JqZWN0IHNob3VsZCBiZSBhIHNlcXVlbmNlIG9iamVjdFxuICBvZiB0aGUgc2FtZSB0eXBlLiAgTmV4dCwgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZCBleHByZXNzaW9ucyBhcmVcbiAgZXZhbHVhdGVkLCBpbnNvZmFyIHRoZXkgYXJlIHByZXNlbnQ7IGRlZmF1bHRzIGFyZSB6ZXJvIGFuZCB0aGVcbiAgc2VxdWVuY2VcJ3MgbGVuZ3RoLiAgVGhlIGJvdW5kcyBzaG91bGQgZXZhbHVhdGUgdG8gaW50ZWdlcnMuIElmXG4gIGVpdGhlciBib3VuZCBpcyBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZVxuICByZXN1bHRpbmcgYm91bmRzIGFyZSBjbGlwcGVkIHRvIGxpZSBiZXR3ZWVuIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGgsIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZVxuICB0aGUgc2xpY2Ugd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZlxuICB0aGUgc2xpY2UgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLFxuICB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIG9iamVjdFxuICBhbGxvd3MgaXQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZVxuc3ludGF4IGZvciB0YXJnZXRzIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBleHByZXNzaW9ucywgYW5kXG5pbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSwgY2F1c2luZ1xubGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy5cblxuV0FSTklORzogQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHNcbmJldHdlZW4gdGhlIGxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSBcJ3NhZmVcJyAoZm9yXG5leGFtcGxlICJhLCBiID0gYiwgYSIgc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZVxuY29sbGVjdGlvbiBvZiBhc3NpZ25lZC10byB2YXJpYWJsZXMgYXJlIG5vdCBzYWZlISAgRm9yIGluc3RhbmNlLCB0aGVcbmZvbGxvd2luZyBwcm9ncmFtIHByaW50cyAiWzAsIDJdIjpcblxuICAgeCA9IFswLCAxXVxuICAgaSA9IDBcbiAgIGksIHhbaV0gPSAxLCAyXG4gICBwcmludCh4KVxuXG5TZWUgYWxzbzogKipQRVAgMzEzMioqIC0gRXh0ZW5kZWQgSXRlcmFibGUgVW5wYWNraW5nXG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSAiKnRhcmdldCIgZmVhdHVyZS5cblxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRoZSB0YXJnZXQgKHdoaWNoLCB1bmxpa2Ugbm9ybWFsXG5hc3NpZ25tZW50IHN0YXRlbWVudHMsIGNhbm5vdCBiZSBhbiB1bnBhY2tpbmcpIGFuZCB0aGUgZXhwcmVzc2lvblxubGlzdCwgcGVyZm9ybXMgdGhlIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgYXNzaWdubWVudFxub24gdGhlIHR3byBvcGVyYW5kcywgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuVGhlIHRhcmdldCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLlxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBleHByZXNzaW9uIGxpa2UgInggKz0gMSIgY2FuIGJlIHJld3JpdHRlbiBhc1xuInggPSB4ICsgMSIgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluIHRoZVxuYXVnbWVudGVkIHZlcnNpb24sICJ4IiBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiBBbHNvLCB3aGVuIHBvc3NpYmxlLFxudGhlIGFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdCByYXRoZXIgdGhhblxuY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LCB0aGUgb2xkIG9iamVjdFxuaXMgbW9kaWZpZWQgaW5zdGVhZC5cblxuV2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFzc2lnbmluZyB0byB0dXBsZXMgYW5kIG11bHRpcGxlIHRhcmdldHMgaW4gYVxuc2luZ2xlIHN0YXRlbWVudCwgdGhlIGFzc2lnbm1lbnQgZG9uZSBieSBhdWdtZW50ZWQgYXNzaWdubWVudFxuc3RhdGVtZW50cyBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBub3JtYWwgYXNzaWdubWVudHMuIFNpbWlsYXJseSxcbndpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcG9zc2libGUgKmluLXBsYWNlKiBiZWhhdmlvciwgdGhlIGJpbmFyeVxub3BlcmF0aW9uIHBlcmZvcm1lZCBieSBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsXG5iaW5hcnkgb3BlcmF0aW9ucy5cblxuRm9yIHRhcmdldHMgd2hpY2ggYXJlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCB0aGUgc2FtZSAqY2F2ZWF0IGFib3V0XG5jbGFzcyBhbmQgaW5zdGFuY2UgYXR0cmlidXRlcyogYXBwbGllcyBhcyBmb3IgcmVndWxhciBhc3NpZ25tZW50cy5cbicsCi0gJ2F0b20taWRlbnRpZmllcnMnOiAnXG5JZGVudGlmaWVycyAoTmFtZXMpXG4qKioqKioqKioqKioqKioqKioqXG5cbkFuIGlkZW50aWZpZXIgb2NjdXJyaW5nIGFzIGFuIGF0b20gaXMgYSBuYW1lLiAgU2VlIHNlY3Rpb25cbipJZGVudGlmaWVycyBhbmQga2V5d29yZHMqIGZvciBsZXhpY2FsIGRlZmluaXRpb24gYW5kIHNlY3Rpb24gKk5hbWluZ1xuYW5kIGJpbmRpbmcqIGZvciBkb2N1bWVudGF0aW9uIG9mIG5hbWluZyBhbmQgYmluZGluZy5cblxuV2hlbiB0aGUgbmFtZSBpcyBib3VuZCB0byBhbiBvYmplY3QsIGV2YWx1YXRpb24gb2YgdGhlIGF0b20geWllbGRzXG50aGF0IG9iamVjdC4gV2hlbiBhIG5hbWUgaXMgbm90IGJvdW5kLCBhbiBhdHRlbXB0IHRvIGV2YWx1YXRlIGl0XG5yYWlzZXMgYSAiTmFtZUVycm9yIiBleGNlcHRpb24uXG5cbioqUHJpdmF0ZSBuYW1lIG1hbmdsaW5nOioqIFdoZW4gYW4gaWRlbnRpZmllciB0aGF0IHRleHR1YWxseSBvY2N1cnMgaW5cbmEgY2xhc3MgZGVmaW5pdGlvbiBiZWdpbnMgd2l0aCB0d28gb3IgbW9yZSB1bmRlcnNjb3JlIGNoYXJhY3RlcnMgYW5kXG5kb2VzIG5vdCBlbmQgaW4gdHdvIG9yIG1vcmUgdW5kZXJzY29yZXMsIGl0IGlzIGNvbnNpZGVyZWQgYSAqcHJpdmF0ZVxubmFtZSogb2YgdGhhdCBjbGFzcy4gUHJpdmF0ZSBuYW1lcyBhcmUgdHJhbnNmb3JtZWQgdG8gYSBsb25nZXIgZm9ybVxuYmVmb3JlIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGVtLiAgVGhlIHRyYW5zZm9ybWF0aW9uIGluc2VydHMgdGhlXG5jbGFzcyBuYW1lLCB3aXRoIGxlYWRpbmcgdW5kZXJzY29yZXMgcmVtb3ZlZCBhbmQgYSBzaW5nbGUgdW5kZXJzY29yZVxuaW5zZXJ0ZWQsIGluIGZyb250IG9mIHRoZSBuYW1lLiAgRm9yIGV4YW1wbGUsIHRoZSBpZGVudGlmaWVyICJfX3NwYW0iXG5vY2N1cnJpbmcgaW4gYSBjbGFzcyBuYW1lZCAiSGFtIiB3aWxsIGJlIHRyYW5zZm9ybWVkIHRvICJfSGFtX19zcGFtIi5cblRoaXMgdHJhbnNmb3JtYXRpb24gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN5bnRhY3RpY2FsIGNvbnRleHQgaW4gd2hpY2hcbnRoZSBpZGVudGlmaWVyIGlzIHVzZWQuICBJZiB0aGUgdHJhbnNmb3JtZWQgbmFtZSBpcyBleHRyZW1lbHkgbG9uZ1xuKGxvbmdlciB0aGFuIDI1NSBjaGFyYWN0ZXJzKSwgaW1wbGVtZW50YXRpb24gZGVmaW5lZCB0cnVuY2F0aW9uIG1heVxuaGFwcGVuLiBJZiB0aGUgY2xhc3MgbmFtZSBjb25zaXN0cyBvbmx5IG9mIHVuZGVyc2NvcmVzLCBub1xudHJhbnNmb3JtYXRpb24gaXMgZG9uZS5cbicsCi0gJ2F0b20tbGl0ZXJhbHMnOiAiXG5MaXRlcmFsc1xuKioqKioqKipcblxuUHl0aG9uIHN1cHBvcnRzIHN0cmluZyBhbmQgYnl0ZXMgbGl0ZXJhbHMgYW5kIHZhcmlvdXMgbnVtZXJpY1xubGl0ZXJhbHM6XG5cbiAgIGxpdGVyYWwgOjo9IHN0cmluZ2xpdGVyYWwgfCBieXRlc2xpdGVyYWxcbiAgICAgICAgICAgICAgIHwgaW50ZWdlciB8IGZsb2F0bnVtYmVyIHwgaW1hZ251bWJlclxuXG5FdmFsdWF0aW9uIG9mIGEgbGl0ZXJhbCB5aWVsZHMgYW4gb2JqZWN0IG9mIHRoZSBnaXZlbiB0eXBlIChzdHJpbmcsXG5ieXRlcywgaW50ZWdlciwgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBjb21wbGV4IG51bWJlcikgd2l0aCB0aGUgZ2l2ZW5cbnZhbHVlLiAgVGhlIHZhbHVlIG1heSBiZSBhcHByb3hpbWF0ZWQgaW4gdGhlIGNhc2Ugb2YgZmxvYXRpbmcgcG9pbnRcbmFuZCBpbWFnaW5hcnkgKGNvbXBsZXgpIGxpdGVyYWxzLiAgU2VlIHNlY3Rpb24gKkxpdGVyYWxzKiBmb3IgZGV0YWlscy5cblxuQWxsIGxpdGVyYWxzIGNvcnJlc3BvbmQgdG8gaW1tdXRhYmxlIGRhdGEgdHlwZXMsIGFuZCBoZW5jZSB0aGVcbm9iamVjdCdzIGlkZW50aXR5IGlzIGxlc3MgaW1wb3J0YW50IHRoYW4gaXRzIHZhbHVlLiAgTXVsdGlwbGVcbmV2YWx1YXRpb25zIG9mIGxpdGVyYWxzIHdpdGggdGhlIHNhbWUgdmFsdWUgKGVpdGhlciB0aGUgc2FtZVxub2NjdXJyZW5jZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IG9yIGEgZGlmZmVyZW50IG9jY3VycmVuY2UpIG1heSBvYnRhaW5cbnRoZSBzYW1lIG9iamVjdCBvciBhIGRpZmZlcmVudCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZS5cbiIsCi0gJ2F0dHJpYnV0ZS1hY2Nlc3MnOiAnXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgIngubmFtZSIpIGZvclxuY2xhc3MgaW5zdGFuY2VzLlxuXG5vYmplY3QuX19nZXRhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGxvb2t1cCBoYXMgbm90IGZvdW5kIHRoZSBhdHRyaWJ1dGUgaW4gdGhlXG4gICB1c3VhbCBwbGFjZXMgKGkuZS4gaXQgaXMgbm90IGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBub3IgaXMgaXQgZm91bmRcbiAgIGluIHRoZSBjbGFzcyB0cmVlIGZvciAic2VsZiIpLiAgIm5hbWUiIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS4gVGhpc1xuICAgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgZm91bmQgdGhyb3VnaCB0aGUgbm9ybWFsIG1lY2hhbmlzbSxcbiAgICJfX2dldGF0dHJfXygpIiBpcyBub3QgY2FsbGVkLiAgKFRoaXMgaXMgYW4gaW50ZW50aW9uYWwgYXN5bW1ldHJ5XG4gICBiZXR3ZWVuICJfX2dldGF0dHJfXygpIiBhbmQgIl9fc2V0YXR0cl9fKCkiLikgVGhpcyBpcyBkb25lIGJvdGggZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMgYW5kIGJlY2F1c2Ugb3RoZXJ3aXNlICJfX2dldGF0dHJfXygpIiB3b3VsZCBoYXZlXG4gICBubyB3YXkgdG8gYWNjZXNzIG90aGVyIGF0dHJpYnV0ZXMgb2YgdGhlIGluc3RhbmNlLiAgTm90ZSB0aGF0IGF0XG4gICBsZWFzdCBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCB5b3UgY2FuIGZha2UgdG90YWwgY29udHJvbCBieSBub3RcbiAgIGluc2VydGluZyBhbnkgdmFsdWVzIGluIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSAoYnV0XG4gICBpbnN0ZWFkIGluc2VydGluZyB0aGVtIGluIGFub3RoZXIgb2JqZWN0KS4gIFNlZSB0aGVcbiAgICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIG92ZXIgYXR0cmlidXRlIGFjY2Vzcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lcyAiX19nZXRhdHRyX18oKSIsXG4gICB0aGUgbGF0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3MgIl9fZ2V0YXR0cmlidXRlX18oKSIgZWl0aGVyXG4gICBjYWxscyBpdCBleHBsaWNpdGx5IG9yIHJhaXNlcyBhbiAiQXR0cmlidXRlRXJyb3IiLiBUaGlzIG1ldGhvZFxuICAgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgICJBdHRyaWJ1dGVFcnJvciIgZXhjZXB0aW9uLiBJbiBvcmRlciB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW5cbiAgIHRoaXMgbWV0aG9kLCBpdHMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzXG4gICBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIHRvIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yXG4gICBleGFtcGxlLCAib2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkiLlxuXG4gICBOb3RlOiBUaGlzIG1ldGhvZCBtYXkgc3RpbGwgYmUgYnlwYXNzZWQgd2hlbiBsb29raW5nIHVwIHNwZWNpYWxcbiAgICAgbWV0aG9kcyBhcyB0aGUgcmVzdWx0IG9mIGltcGxpY2l0IGludm9jYXRpb24gdmlhIGxhbmd1YWdlIHN5bnRheFxuICAgICBvciBidWlsdC1pbiBmdW5jdGlvbnMuIFNlZSAqU3BlY2lhbCBtZXRob2QgbG9va3VwKi5cblxub2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgYXNzaWdubWVudCBpcyBhdHRlbXB0ZWQuICBUaGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1lY2hhbmlzbSAoaS5lLiBzdG9yZSB0aGUgdmFsdWUgaW4gdGhlXG4gICBpbnN0YW5jZSBkaWN0aW9uYXJ5KS4gKm5hbWUqIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZSwgKnZhbHVlKiBpcyB0aGVcbiAgIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBJZiAiX19zZXRhdHRyX18oKSIgd2FudHMgdG8gYXNzaWduIHRvIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgaXRcbiAgIHNob3VsZCBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUsIGZvciBleGFtcGxlLFxuICAgIm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSkiLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSAiX19zZXRhdHRyX18oKSIgYnV0IGZvciBhdHRyaWJ1dGUgZGVsZXRpb24gaW5zdGVhZCBvZlxuICAgYXNzaWdubWVudC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgImRlbCBvYmoubmFtZSIgaXNcbiAgIG1lYW5pbmdmdWwgZm9yIHRoZSBvYmplY3QuXG5cbm9iamVjdC5fX2Rpcl9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuICJkaXIoKSIgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QuIEEgc2VxdWVuY2UgbXVzdCBiZVxuICAgcmV0dXJuZWQuICJkaXIoKSIgY29udmVydHMgdGhlIHJldHVybmVkIHNlcXVlbmNlIHRvIGEgbGlzdCBhbmRcbiAgIHNvcnRzIGl0LlxuXG5cbkltcGxlbWVudGluZyBEZXNjcmlwdG9yc1xuPT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbmx5IGFwcGx5IHdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG5jb250YWluaW5nIHRoZSBtZXRob2QgKGEgc28tY2FsbGVkICpkZXNjcmlwdG9yKiBjbGFzcykgYXBwZWFycyBpbiBhblxuKm93bmVyKiBjbGFzcyAodGhlIGRlc2NyaXB0b3IgbXVzdCBiZSBpbiBlaXRoZXIgdGhlIG93bmVyXCdzIGNsYXNzXG5kaWN0aW9uYXJ5IG9yIGluIHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGZvciBvbmUgb2YgaXRzIHBhcmVudHMpLiAgSW4gdGhlXG5leGFtcGxlcyBiZWxvdywgInRoZSBhdHRyaWJ1dGUiIHJlZmVycyB0byB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXNcbnRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBvd25lciBjbGFzc1wnICJfX2RpY3RfXyIuXG5cbm9iamVjdC5fX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcilcblxuICAgQ2FsbGVkIHRvIGdldCB0aGUgYXR0cmlidXRlIG9mIHRoZSBvd25lciBjbGFzcyAoY2xhc3MgYXR0cmlidXRlXG4gICBhY2Nlc3MpIG9yIG9mIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgKGluc3RhbmNlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKS4gKm93bmVyKiBpcyBhbHdheXMgdGhlIG93bmVyIGNsYXNzLCB3aGlsZSAqaW5zdGFuY2UqIGlzIHRoZVxuICAgaW5zdGFuY2UgdGhhdCB0aGUgYXR0cmlidXRlIHdhcyBhY2Nlc3NlZCB0aHJvdWdoLCBvciAiTm9uZSIgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuICJBdHRyaWJ1dGVFcnJvciJcbiAgIGV4Y2VwdGlvbi5cblxub2JqZWN0Ll9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGUgb3duZXJcbiAgIGNsYXNzIHRvIGEgbmV3IHZhbHVlLCAqdmFsdWUqLlxuXG5vYmplY3QuX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgQ2FsbGVkIHRvIGRlbGV0ZSB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlXG4gICBvd25lciBjbGFzcy5cblxuXG5JbnZva2luZyBEZXNjcmlwdG9yc1xuPT09PT09PT09PT09PT09PT09PT1cblxuSW4gZ2VuZXJhbCwgYSBkZXNjcmlwdG9yIGlzIGFuIG9iamVjdCBhdHRyaWJ1dGUgd2l0aCAiYmluZGluZ1xuYmVoYXZpb3IiLCBvbmUgd2hvc2UgYXR0cmlidXRlIGFjY2VzcyBoYXMgYmVlbiBvdmVycmlkZGVuIGJ5IG1ldGhvZHNcbmluIHRoZSBkZXNjcmlwdG9yIHByb3RvY29sOiAgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiLCBhbmRcbiJfX2RlbGV0ZV9fKCkiLiBJZiBhbnkgb2YgdGhvc2UgbWV0aG9kcyBhcmUgZGVmaW5lZCBmb3IgYW4gb2JqZWN0LCBpdFxuaXMgc2FpZCB0byBiZSBhIGRlc2NyaXB0b3IuXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBhdHRyaWJ1dGUgYWNjZXNzIGlzIHRvIGdldCwgc2V0LCBvciBkZWxldGVcbnRoZSBhdHRyaWJ1dGUgZnJvbSBhbiBvYmplY3RcJ3MgZGljdGlvbmFyeS4gRm9yIGluc3RhbmNlLCAiYS54IiBoYXMgYVxubG9va3VwIGNoYWluIHN0YXJ0aW5nIHdpdGggImEuX19kaWN0X19bXCd4XCddIiwgdGhlblxuInR5cGUoYSkuX19kaWN0X19bXCd4XCddIiwgYW5kIGNvbnRpbnVpbmcgdGhyb3VnaCB0aGUgYmFzZSBjbGFzc2VzIG9mXG4idHlwZShhKSIgZXhjbHVkaW5nIG1ldGFjbGFzc2VzLlxuXG5Ib3dldmVyLCBpZiB0aGUgbG9va2VkLXVwIHZhbHVlIGlzIGFuIG9iamVjdCBkZWZpbmluZyBvbmUgb2YgdGhlXG5kZXNjcmlwdG9yIG1ldGhvZHMsIHRoZW4gUHl0aG9uIG1heSBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBhbmRcbmludm9rZSB0aGUgZGVzY3JpcHRvciBtZXRob2QgaW5zdGVhZC4gIFdoZXJlIHRoaXMgb2NjdXJzIGluIHRoZVxucHJlY2VkZW5jZSBjaGFpbiBkZXBlbmRzIG9uIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyB3ZXJlIGRlZmluZWQgYW5kXG5ob3cgdGhleSB3ZXJlIGNhbGxlZC5cblxuVGhlIHN0YXJ0aW5nIHBvaW50IGZvciBkZXNjcmlwdG9yIGludm9jYXRpb24gaXMgYSBiaW5kaW5nLCAiYS54Ii4gSG93XG50aGUgYXJndW1lbnRzIGFyZSBhc3NlbWJsZWQgZGVwZW5kcyBvbiAiYSI6XG5cbkRpcmVjdCBDYWxsXG4gICBUaGUgc2ltcGxlc3QgYW5kIGxlYXN0IGNvbW1vbiBjYWxsIGlzIHdoZW4gdXNlciBjb2RlIGRpcmVjdGx5XG4gICBpbnZva2VzIGEgZGVzY3JpcHRvciBtZXRob2Q6ICAgICJ4Ll9fZ2V0X18oYSkiLlxuXG5JbnN0YW5jZSBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGFuIG9iamVjdCBpbnN0YW5jZSwgImEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGVcbiAgIGNhbGw6ICJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKGEsIHR5cGUoYSkpIi5cblxuQ2xhc3MgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhIGNsYXNzLCAiQS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZSBjYWxsOlxuICAgIkEuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oTm9uZSwgQSkiLlxuXG5TdXBlciBCaW5kaW5nXG4gICBJZiAiYSIgaXMgYW4gaW5zdGFuY2Ugb2YgInN1cGVyIiwgdGhlbiB0aGUgYmluZGluZyAic3VwZXIoQixcbiAgIG9iaikubSgpIiBzZWFyY2hlcyAib2JqLl9fY2xhc3NfXy5fX21yb19fIiBmb3IgdGhlIGJhc2UgY2xhc3MgIkEiXG4gICBpbW1lZGlhdGVseSBwcmVjZWRpbmcgIkIiIGFuZCB0aGVuIGludm9rZXMgdGhlIGRlc2NyaXB0b3Igd2l0aCB0aGVcbiAgIGNhbGw6ICJBLl9fZGljdF9fW1wnbVwnXS5fX2dldF9fKG9iaiwgb2JqLl9fY2xhc3NfXykiLlxuXG5Gb3IgaW5zdGFuY2UgYmluZGluZ3MsIHRoZSBwcmVjZWRlbmNlIG9mIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBkZXBlbmRzXG5vbiB0aGUgd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIGFyZSBkZWZpbmVkLiAgQSBkZXNjcmlwdG9yIGNhbiBkZWZpbmVcbmFueSBjb21iaW5hdGlvbiBvZiAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIgYW5kICJfX2RlbGV0ZV9fKCkiLiAgSWYgaXRcbmRvZXMgbm90IGRlZmluZSAiX19nZXRfXygpIiwgdGhlbiBhY2Nlc3NpbmcgdGhlIGF0dHJpYnV0ZSB3aWxsIHJldHVyblxudGhlIGRlc2NyaXB0b3Igb2JqZWN0IGl0c2VsZiB1bmxlc3MgdGhlcmUgaXMgYSB2YWx1ZSBpbiB0aGUgb2JqZWN0XCdzXG5pbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIGRlc2NyaXB0b3IgZGVmaW5lcyAiX19zZXRfXygpIiBhbmQvb3JcbiJfX2RlbGV0ZV9fKCkiLCBpdCBpcyBhIGRhdGEgZGVzY3JpcHRvcjsgaWYgaXQgZGVmaW5lcyBuZWl0aGVyLCBpdCBpc1xuYSBub24tZGF0YSBkZXNjcmlwdG9yLiAgTm9ybWFsbHksIGRhdGEgZGVzY3JpcHRvcnMgZGVmaW5lIGJvdGhcbiJfX2dldF9fKCkiIGFuZCAiX19zZXRfXygpIiwgd2hpbGUgbm9uLWRhdGEgZGVzY3JpcHRvcnMgaGF2ZSBqdXN0IHRoZVxuIl9fZ2V0X18oKSIgbWV0aG9kLiAgRGF0YSBkZXNjcmlwdG9ycyB3aXRoICJfX3NldF9fKCkiIGFuZCAiX19nZXRfXygpIlxuZGVmaW5lZCBhbHdheXMgb3ZlcnJpZGUgYSByZWRlZmluaXRpb24gaW4gYW4gaW5zdGFuY2UgZGljdGlvbmFyeS4gIEluXG5jb250cmFzdCwgbm9uLWRhdGEgZGVzY3JpcHRvcnMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgaW5zdGFuY2VzLlxuXG5QeXRob24gbWV0aG9kcyAoaW5jbHVkaW5nICJzdGF0aWNtZXRob2QoKSIgYW5kICJjbGFzc21ldGhvZCgpIikgYXJlXG5pbXBsZW1lbnRlZCBhcyBub24tZGF0YSBkZXNjcmlwdG9ycy4gIEFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2FuXG5yZWRlZmluZSBhbmQgb3ZlcnJpZGUgbWV0aG9kcy4gIFRoaXMgYWxsb3dzIGluZGl2aWR1YWwgaW5zdGFuY2VzIHRvXG5hY3F1aXJlIGJlaGF2aW9ycyB0aGF0IGRpZmZlciBmcm9tIG90aGVyIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBjbGFzcy5cblxuVGhlICJwcm9wZXJ0eSgpIiBmdW5jdGlvbiBpcyBpbXBsZW1lbnRlZCBhcyBhIGRhdGEgZGVzY3JpcHRvci5cbkFjY29yZGluZ2x5LCBpbnN0YW5jZXMgY2Fubm90IG92ZXJyaWRlIHRoZSBiZWhhdmlvciBvZiBhIHByb3BlcnR5LlxuXG5cbl9fc2xvdHNfX1xuPT09PT09PT09XG5cbkJ5IGRlZmF1bHQsIGluc3RhbmNlcyBvZiBjbGFzc2VzIGhhdmUgYSBkaWN0aW9uYXJ5IGZvciBhdHRyaWJ1dGVcbnN0b3JhZ2UuICBUaGlzIHdhc3RlcyBzcGFjZSBmb3Igb2JqZWN0cyBoYXZpbmcgdmVyeSBmZXcgaW5zdGFuY2VcbnZhcmlhYmxlcy4gIFRoZSBzcGFjZSBjb25zdW1wdGlvbiBjYW4gYmVjb21lIGFjdXRlIHdoZW4gY3JlYXRpbmcgbGFyZ2Vcbm51bWJlcnMgb2YgaW5zdGFuY2VzLlxuXG5UaGUgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyAqX19zbG90c19fKiBpbiBhIGNsYXNzXG5kZWZpbml0aW9uLiBUaGUgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gdGFrZXMgYSBzZXF1ZW5jZSBvZiBpbnN0YW5jZVxudmFyaWFibGVzIGFuZCByZXNlcnZlcyBqdXN0IGVub3VnaCBzcGFjZSBpbiBlYWNoIGluc3RhbmNlIHRvIGhvbGQgYVxudmFsdWUgZm9yIGVhY2ggdmFyaWFibGUuICBTcGFjZSBpcyBzYXZlZCBiZWNhdXNlICpfX2RpY3RfXyogaXMgbm90XG5jcmVhdGVkIGZvciBlYWNoIGluc3RhbmNlLlxuXG5vYmplY3QuX19zbG90c19fXG5cbiAgIFRoaXMgY2xhc3MgdmFyaWFibGUgY2FuIGJlIGFzc2lnbmVkIGEgc3RyaW5nLCBpdGVyYWJsZSwgb3Igc2VxdWVuY2VcbiAgIG9mIHN0cmluZ3Mgd2l0aCB2YXJpYWJsZSBuYW1lcyB1c2VkIGJ5IGluc3RhbmNlcy4gIElmIGRlZmluZWQgaW4gYVxuICAgY2xhc3MsICpfX3Nsb3RzX18qIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZFxuICAgcHJldmVudHMgdGhlIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvclxuICAgZWFjaCBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzICJBdHRyaWJ1dGVFcnJvciIuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gICJcJ19fZGljdF9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3Nlc1xuICBkZWZpbmluZyAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzXG4gIGluc3RhbmNlcy4gSWYgd2VhayByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkXG4gICJcJ19fd2Vha3JlZl9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlXG4gIGluc3RhbmNlIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGVcbiAgKGV4Y2VwdCBieSByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLlxuICBUaGlzIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgImludCIsICJieXRlcyIgYW5kICJ0dXBsZSIuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5nc1xuICBtYXkgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG4nLAotICdhdHRyaWJ1dGUtcmVmZXJlbmNlcyc6ICdcbkF0dHJpYnV0ZSByZWZlcmVuY2VzXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BbiBhdHRyaWJ1dGUgcmVmZXJlbmNlIGlzIGEgcHJpbWFyeSBmb2xsb3dlZCBieSBhIHBlcmlvZCBhbmQgYSBuYW1lOlxuXG4gICBhdHRyaWJ1dGVyZWYgOjo9IHByaW1hcnkgIi4iIGlkZW50aWZpZXJcblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3Qgb2YgYSB0eXBlIHRoYXQgc3VwcG9ydHNcbmF0dHJpYnV0ZSByZWZlcmVuY2VzLCB3aGljaCBtb3N0IG9iamVjdHMgZG8uICBUaGlzIG9iamVjdCBpcyB0aGVuXG5hc2tlZCB0byBwcm9kdWNlIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpcyB0aGUgaWRlbnRpZmllciAod2hpY2ggY2FuXG5iZSBjdXN0b21pemVkIGJ5IG92ZXJyaWRpbmcgdGhlICJfX2dldGF0dHJfXygpIiBtZXRob2QpLiAgSWYgdGhpc1xuYXR0cmlidXRlIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBleGNlcHRpb24gIkF0dHJpYnV0ZUVycm9yIiBpcyByYWlzZWQuXG5PdGhlcndpc2UsIHRoZSB0eXBlIGFuZCB2YWx1ZSBvZiB0aGUgb2JqZWN0IHByb2R1Y2VkIGlzIGRldGVybWluZWQgYnlcbnRoZSBvYmplY3QuICBNdWx0aXBsZSBldmFsdWF0aW9ucyBvZiB0aGUgc2FtZSBhdHRyaWJ1dGUgcmVmZXJlbmNlIG1heVxueWllbGQgZGlmZmVyZW50IG9iamVjdHMuXG4nLAotICdhdWdhc3NpZ24nOiAnXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgZm9yIHRoZSBsYXN0IHRocmVlXG5zeW1ib2xzLilcblxuQW4gYXVnbWVudGVkIGFzc2lnbm1lbnQgZXZhbHVhdGVzIHRoZSB0YXJnZXQgKHdoaWNoLCB1bmxpa2Ugbm9ybWFsXG5hc3NpZ25tZW50IHN0YXRlbWVudHMsIGNhbm5vdCBiZSBhbiB1bnBhY2tpbmcpIGFuZCB0aGUgZXhwcmVzc2lvblxubGlzdCwgcGVyZm9ybXMgdGhlIGJpbmFyeSBvcGVyYXRpb24gc3BlY2lmaWMgdG8gdGhlIHR5cGUgb2YgYXNzaWdubWVudFxub24gdGhlIHR3byBvcGVyYW5kcywgYW5kIGFzc2lnbnMgdGhlIHJlc3VsdCB0byB0aGUgb3JpZ2luYWwgdGFyZ2V0LlxuVGhlIHRhcmdldCBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLlxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBleHByZXNzaW9uIGxpa2UgInggKz0gMSIgY2FuIGJlIHJld3JpdHRlbiBhc1xuInggPSB4ICsgMSIgdG8gYWNoaWV2ZSBhIHNpbWlsYXIsIGJ1dCBub3QgZXhhY3RseSBlcXVhbCBlZmZlY3QuIEluIHRoZVxuYXVnbWVudGVkIHZlcnNpb24sICJ4IiBpcyBvbmx5IGV2YWx1YXRlZCBvbmNlLiBBbHNvLCB3aGVuIHBvc3NpYmxlLFxudGhlIGFjdHVhbCBvcGVyYXRpb24gaXMgcGVyZm9ybWVkICppbi1wbGFjZSosIG1lYW5pbmcgdGhhdCByYXRoZXIgdGhhblxuY3JlYXRpbmcgYSBuZXcgb2JqZWN0IGFuZCBhc3NpZ25pbmcgdGhhdCB0byB0aGUgdGFyZ2V0LCB0aGUgb2xkIG9iamVjdFxuaXMgbW9kaWZpZWQgaW5zdGVhZC5cblxuV2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFzc2lnbmluZyB0byB0dXBsZXMgYW5kIG11bHRpcGxlIHRhcmdldHMgaW4gYVxuc2luZ2xlIHN0YXRlbWVudCwgdGhlIGFzc2lnbm1lbnQgZG9uZSBieSBhdWdtZW50ZWQgYXNzaWdubWVudFxuc3RhdGVtZW50cyBpcyBoYW5kbGVkIHRoZSBzYW1lIHdheSBhcyBub3JtYWwgYXNzaWdubWVudHMuIFNpbWlsYXJseSxcbndpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgcG9zc2libGUgKmluLXBsYWNlKiBiZWhhdmlvciwgdGhlIGJpbmFyeVxub3BlcmF0aW9uIHBlcmZvcm1lZCBieSBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyB0aGUgc2FtZSBhcyB0aGUgbm9ybWFsXG5iaW5hcnkgb3BlcmF0aW9ucy5cblxuRm9yIHRhcmdldHMgd2hpY2ggYXJlIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCB0aGUgc2FtZSAqY2F2ZWF0IGFib3V0XG5jbGFzcyBhbmQgaW5zdGFuY2UgYXR0cmlidXRlcyogYXBwbGllcyBhcyBmb3IgcmVndWxhciBhc3NpZ25tZW50cy5cbicsCi0gJ2JpbmFyeSc6ICdcbkJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGJpbmFyeSBhcml0aG1ldGljIG9wZXJhdGlvbnMgaGF2ZSB0aGUgY29udmVudGlvbmFsIHByaW9yaXR5XG5sZXZlbHMuICBOb3RlIHRoYXQgc29tZSBvZiB0aGVzZSBvcGVyYXRpb25zIGFsc28gYXBwbHkgdG8gY2VydGFpbiBub24tXG5udW1lcmljIHR5cGVzLiAgQXBhcnQgZnJvbSB0aGUgcG93ZXIgb3BlcmF0b3IsIHRoZXJlIGFyZSBvbmx5IHR3b1xubGV2ZWxzLCBvbmUgZm9yIG11bHRpcGxpY2F0aXZlIG9wZXJhdG9ycyBhbmQgb25lIGZvciBhZGRpdGl2ZVxub3BlcmF0b3JzOlxuXG4gICBtX2V4cHIgOjo9IHVfZXhwciB8IG1fZXhwciAiKiIgdV9leHByIHwgbV9leHByICIvLyIgdV9leHByIHwgbV9leHByICIvIiB1X2V4cHJcbiAgICAgICAgICAgICAgfCBtX2V4cHIgIiUiIHVfZXhwclxuICAgYV9leHByIDo6PSBtX2V4cHIgfCBhX2V4cHIgIisiIG1fZXhwciB8IGFfZXhwciAiLSIgbV9leHByXG5cblRoZSAiKiIgKG11bHRpcGxpY2F0aW9uKSBvcGVyYXRvciB5aWVsZHMgdGhlIHByb2R1Y3Qgb2YgaXRzIGFyZ3VtZW50cy5cblRoZSBhcmd1bWVudHMgbXVzdCBlaXRoZXIgYm90aCBiZSBudW1iZXJzLCBvciBvbmUgYXJndW1lbnQgbXVzdCBiZSBhblxuaW50ZWdlciBhbmQgdGhlIG90aGVyIG11c3QgYmUgYSBzZXF1ZW5jZS4gSW4gdGhlIGZvcm1lciBjYXNlLCB0aGVcbm51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlIGFuZCB0aGVuIG11bHRpcGxpZWQgdG9nZXRoZXIuXG5JbiB0aGUgbGF0dGVyIGNhc2UsIHNlcXVlbmNlIHJlcGV0aXRpb24gaXMgcGVyZm9ybWVkOyBhIG5lZ2F0aXZlXG5yZXBldGl0aW9uIGZhY3RvciB5aWVsZHMgYW4gZW1wdHkgc2VxdWVuY2UuXG5cblRoZSAiLyIgKGRpdmlzaW9uKSBhbmQgIi8vIiAoZmxvb3IgZGl2aXNpb24pIG9wZXJhdG9ycyB5aWVsZCB0aGVcbnF1b3RpZW50IG9mIHRoZWlyIGFyZ3VtZW50cy4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgZmlyc3RcbmNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiBEaXZpc2lvbiBvZiBpbnRlZ2VycyB5aWVsZHMgYSBmbG9hdCwgd2hpbGVcbmZsb29yIGRpdmlzaW9uIG9mIGludGVnZXJzIHJlc3VsdHMgaW4gYW4gaW50ZWdlcjsgdGhlIHJlc3VsdCBpcyB0aGF0XG5vZiBtYXRoZW1hdGljYWwgZGl2aXNpb24gd2l0aCB0aGUgXCdmbG9vclwnIGZ1bmN0aW9uIGFwcGxpZWQgdG8gdGhlXG5yZXN1bHQuICBEaXZpc2lvbiBieSB6ZXJvIHJhaXNlcyB0aGUgIlplcm9EaXZpc2lvbkVycm9yIiBleGNlcHRpb24uXG5cblRoZSAiJSIgKG1vZHVsbykgb3BlcmF0b3IgeWllbGRzIHRoZSByZW1haW5kZXIgZnJvbSB0aGUgZGl2aXNpb24gb2ZcbnRoZSBmaXJzdCBhcmd1bWVudCBieSB0aGUgc2Vjb25kLiAgVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBmaXJzdFxuY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBBIHplcm8gcmlnaHQgYXJndW1lbnQgcmFpc2VzIHRoZVxuIlplcm9EaXZpc2lvbkVycm9yIiBleGNlcHRpb24uICBUaGUgYXJndW1lbnRzIG1heSBiZSBmbG9hdGluZyBwb2ludFxubnVtYmVycywgZS5nLiwgIjMuMTQlMC43IiBlcXVhbHMgIjAuMzQiIChzaW5jZSAiMy4xNCIgZXF1YWxzICI0KjAuNyArXG4wLjM0Ii4pICBUaGUgbW9kdWxvIG9wZXJhdG9yIGFsd2F5cyB5aWVsZHMgYSByZXN1bHQgd2l0aCB0aGUgc2FtZSBzaWduXG5hcyBpdHMgc2Vjb25kIG9wZXJhbmQgKG9yIHplcm8pOyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIHJlc3VsdCBpc1xuc3RyaWN0bHkgc21hbGxlciB0aGFuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgc2Vjb25kIG9wZXJhbmQgWzFdLlxuXG5UaGUgZmxvb3IgZGl2aXNpb24gYW5kIG1vZHVsbyBvcGVyYXRvcnMgYXJlIGNvbm5lY3RlZCBieSB0aGUgZm9sbG93aW5nXG5pZGVudGl0eTogInggPT0gKHgvL3kpKnkgKyAoeCV5KSIuICBGbG9vciBkaXZpc2lvbiBhbmQgbW9kdWxvIGFyZSBhbHNvXG5jb25uZWN0ZWQgd2l0aCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImRpdm1vZCgpIjogImRpdm1vZCh4LCB5KSA9PVxuKHgvL3ksIHgleSkiLiBbMl0uXG5cbkluIGFkZGl0aW9uIHRvIHBlcmZvcm1pbmcgdGhlIG1vZHVsbyBvcGVyYXRpb24gb24gbnVtYmVycywgdGhlICIlIlxub3BlcmF0b3IgaXMgYWxzbyBvdmVybG9hZGVkIGJ5IHN0cmluZyBvYmplY3RzIHRvIHBlcmZvcm0gb2xkLXN0eWxlXG5zdHJpbmcgZm9ybWF0dGluZyAoYWxzbyBrbm93biBhcyBpbnRlcnBvbGF0aW9uKS4gIFRoZSBzeW50YXggZm9yXG5zdHJpbmcgZm9ybWF0dGluZyBpcyBkZXNjcmliZWQgaW4gdGhlIFB5dGhvbiBMaWJyYXJ5IFJlZmVyZW5jZSxcbnNlY3Rpb24gKnByaW50Zi1zdHlsZSBTdHJpbmcgRm9ybWF0dGluZyouXG5cblRoZSBmbG9vciBkaXZpc2lvbiBvcGVyYXRvciwgdGhlIG1vZHVsbyBvcGVyYXRvciwgYW5kIHRoZSAiZGl2bW9kKCkiXG5mdW5jdGlvbiBhcmUgbm90IGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycy4gIEluc3RlYWQsIGNvbnZlcnQgdG8gYVxuZmxvYXRpbmcgcG9pbnQgbnVtYmVyIHVzaW5nIHRoZSAiYWJzKCkiIGZ1bmN0aW9uIGlmIGFwcHJvcHJpYXRlLlxuXG5UaGUgIisiIChhZGRpdGlvbikgb3BlcmF0b3IgeWllbGRzIHRoZSBzdW0gb2YgaXRzIGFyZ3VtZW50cy4gIFRoZVxuYXJndW1lbnRzIG11c3QgZWl0aGVyIGJvdGggYmUgbnVtYmVycyBvciBib3RoIHNlcXVlbmNlcyBvZiB0aGUgc2FtZVxudHlwZS4gIEluIHRoZSBmb3JtZXIgY2FzZSwgdGhlIG51bWJlcnMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlXG5hbmQgdGhlbiBhZGRlZCB0b2dldGhlci4gIEluIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHNlcXVlbmNlcyBhcmVcbmNvbmNhdGVuYXRlZC5cblxuVGhlICItIiAoc3VidHJhY3Rpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgZGlmZmVyZW5jZSBvZiBpdHMgYXJndW1lbnRzLlxuVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBmaXJzdCBjb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS5cbicsCi0gJ2JpdHdpc2UnOiAnXG5CaW5hcnkgYml0d2lzZSBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkVhY2ggb2YgdGhlIHRocmVlIGJpdHdpc2Ugb3BlcmF0aW9ucyBoYXMgYSBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWw6XG5cbiAgIGFuZF9leHByIDo6PSBzaGlmdF9leHByIHwgYW5kX2V4cHIgIiYiIHNoaWZ0X2V4cHJcbiAgIHhvcl9leHByIDo6PSBhbmRfZXhwciB8IHhvcl9leHByICJeIiBhbmRfZXhwclxuICAgb3JfZXhwciAgOjo9IHhvcl9leHByIHwgb3JfZXhwciAifCIgeG9yX2V4cHJcblxuVGhlICImIiBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgQU5EIG9mIGl0cyBhcmd1bWVudHMsIHdoaWNoIG11c3RcbmJlIGludGVnZXJzLlxuXG5UaGUgIl4iIG9wZXJhdG9yIHlpZWxkcyB0aGUgYml0d2lzZSBYT1IgKGV4Y2x1c2l2ZSBPUikgb2YgaXRzXG5hcmd1bWVudHMsIHdoaWNoIG11c3QgYmUgaW50ZWdlcnMuXG5cblRoZSAifCIgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIChpbmNsdXNpdmUpIE9SIG9mIGl0cyBhcmd1bWVudHMsXG53aGljaCBtdXN0IGJlIGludGVnZXJzLlxuJywKLSAnYmx0aW4tY29kZS1vYmplY3RzJzogJ1xuQ29kZSBPYmplY3RzXG4qKioqKioqKioqKipcblxuQ29kZSBvYmplY3RzIGFyZSB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0byByZXByZXNlbnQgInBzZXVkby1cbmNvbXBpbGVkIiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlIHN1Y2ggYXMgYSBmdW5jdGlvbiBib2R5LiBUaGV5IGRpZmZlclxuZnJvbSBmdW5jdGlvbiBvYmplY3RzIGJlY2F1c2UgdGhleSBkb25cJ3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGVpclxuZ2xvYmFsIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gIENvZGUgb2JqZWN0cyBhcmUgcmV0dXJuZWQgYnkgdGhlIGJ1aWx0LVxuaW4gImNvbXBpbGUoKSIgZnVuY3Rpb24gYW5kIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSBmdW5jdGlvbiBvYmplY3RzXG50aHJvdWdoIHRoZWlyICJfX2NvZGVfXyIgYXR0cmlidXRlLiBTZWUgYWxzbyB0aGUgImNvZGUiIG1vZHVsZS5cblxuQSBjb2RlIG9iamVjdCBjYW4gYmUgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkIGJ5IHBhc3NpbmcgaXQgKGluc3RlYWQgb2YgYVxuc291cmNlIHN0cmluZykgdG8gdGhlICJleGVjKCkiIG9yICJldmFsKCkiICBidWlsdC1pbiBmdW5jdGlvbnMuXG5cblNlZSAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCi0gJ2JsdGluLWVsbGlwc2lzLW9iamVjdCc6ICdcblRoZSBFbGxpcHNpcyBPYmplY3RcbioqKioqKioqKioqKioqKioqKipcblxuVGhpcyBvYmplY3QgaXMgY29tbW9ubHkgdXNlZCBieSBzbGljaW5nIChzZWUgKlNsaWNpbmdzKikuICBJdCBzdXBwb3J0c1xubm8gc3BlY2lhbCBvcGVyYXRpb25zLiAgVGhlcmUgaXMgZXhhY3RseSBvbmUgZWxsaXBzaXMgb2JqZWN0LCBuYW1lZFxuIkVsbGlwc2lzIiAoYSBidWlsdC1pbiBuYW1lKS4gICJ0eXBlKEVsbGlwc2lzKSgpIiBwcm9kdWNlcyB0aGVcbiJFbGxpcHNpcyIgc2luZ2xldG9uLlxuXG5JdCBpcyB3cml0dGVuIGFzICJFbGxpcHNpcyIgb3IgIi4uLiIuXG4nLAotICdibHRpbi1udWxsLW9iamVjdCc6ICdcblRoZSBOdWxsIE9iamVjdFxuKioqKioqKioqKioqKioqXG5cblRoaXMgb2JqZWN0IGlzIHJldHVybmVkIGJ5IGZ1bmN0aW9ucyB0aGF0IGRvblwndCBleHBsaWNpdGx5IHJldHVybiBhXG52YWx1ZS4gIEl0IHN1cHBvcnRzIG5vIHNwZWNpYWwgb3BlcmF0aW9ucy4gIFRoZXJlIGlzIGV4YWN0bHkgb25lIG51bGxcbm9iamVjdCwgbmFtZWQgIk5vbmUiIChhIGJ1aWx0LWluIG5hbWUpLiAgInR5cGUoTm9uZSkoKSIgcHJvZHVjZXMgdGhlXG5zYW1lIHNpbmdsZXRvbi5cblxuSXQgaXMgd3JpdHRlbiBhcyAiTm9uZSIuXG4nLAotICdibHRpbi10eXBlLW9iamVjdHMnOiAnXG5UeXBlIE9iamVjdHNcbioqKioqKioqKioqKlxuXG5UeXBlIG9iamVjdHMgcmVwcmVzZW50IHRoZSB2YXJpb3VzIG9iamVjdCB0eXBlcy4gIEFuIG9iamVjdFwncyB0eXBlIGlzXG5hY2Nlc3NlZCBieSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gInR5cGUoKSIuICBUaGVyZSBhcmUgbm8gc3BlY2lhbFxub3BlcmF0aW9ucyBvbiB0eXBlcy4gIFRoZSBzdGFuZGFyZCBtb2R1bGUgInR5cGVzIiBkZWZpbmVzIG5hbWVzIGZvclxuYWxsIHN0YW5kYXJkIGJ1aWx0LWluIHR5cGVzLlxuXG5UeXBlcyBhcmUgd3JpdHRlbiBsaWtlIHRoaXM6ICI8Y2xhc3MgXCdpbnRcJz4iLlxuJywKLSAnYm9vbGVhbnMnOiAnXG5Cb29sZWFuIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKlxuXG4gICBvcl90ZXN0ICA6Oj0gYW5kX3Rlc3QgfCBvcl90ZXN0ICJvciIgYW5kX3Rlc3RcbiAgIGFuZF90ZXN0IDo6PSBub3RfdGVzdCB8IGFuZF90ZXN0ICJhbmQiIG5vdF90ZXN0XG4gICBub3RfdGVzdCA6Oj0gY29tcGFyaXNvbiB8ICJub3QiIG5vdF90ZXN0XG5cbkluIHRoZSBjb250ZXh0IG9mIEJvb2xlYW4gb3BlcmF0aW9ucywgYW5kIGFsc28gd2hlbiBleHByZXNzaW9ucyBhcmVcbnVzZWQgYnkgY29udHJvbCBmbG93IHN0YXRlbWVudHMsIHRoZSBmb2xsb3dpbmcgdmFsdWVzIGFyZSBpbnRlcnByZXRlZFxuYXMgZmFsc2U6ICJGYWxzZSIsICJOb25lIiwgbnVtZXJpYyB6ZXJvIG9mIGFsbCB0eXBlcywgYW5kIGVtcHR5XG5zdHJpbmdzIGFuZCBjb250YWluZXJzIChpbmNsdWRpbmcgc3RyaW5ncywgdHVwbGVzLCBsaXN0cyxcbmRpY3Rpb25hcmllcywgc2V0cyBhbmQgZnJvemVuc2V0cykuICBBbGwgb3RoZXIgdmFsdWVzIGFyZSBpbnRlcnByZXRlZFxuYXMgdHJ1ZS4gIFVzZXItZGVmaW5lZCBvYmplY3RzIGNhbiBjdXN0b21pemUgdGhlaXIgdHJ1dGggdmFsdWUgYnlcbnByb3ZpZGluZyBhICJfX2Jvb2xfXygpIiBtZXRob2QuXG5cblRoZSBvcGVyYXRvciAibm90IiB5aWVsZHMgIlRydWUiIGlmIGl0cyBhcmd1bWVudCBpcyBmYWxzZSwgIkZhbHNlIlxub3RoZXJ3aXNlLlxuXG5UaGUgZXhwcmVzc2lvbiAieCBhbmQgeSIgZmlyc3QgZXZhbHVhdGVzICp4KjsgaWYgKngqIGlzIGZhbHNlLCBpdHNcbnZhbHVlIGlzIHJldHVybmVkOyBvdGhlcndpc2UsICp5KiBpcyBldmFsdWF0ZWQgYW5kIHRoZSByZXN1bHRpbmcgdmFsdWVcbmlzIHJldHVybmVkLlxuXG5UaGUgZXhwcmVzc2lvbiAieCBvciB5IiBmaXJzdCBldmFsdWF0ZXMgKngqOyBpZiAqeCogaXMgdHJ1ZSwgaXRzIHZhbHVlXG5pcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCAqeSogaXMgZXZhbHVhdGVkIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlIGlzXG5yZXR1cm5lZC5cblxuKE5vdGUgdGhhdCBuZWl0aGVyICJhbmQiIG5vciAib3IiIHJlc3RyaWN0IHRoZSB2YWx1ZSBhbmQgdHlwZSB0aGV5XG5yZXR1cm4gdG8gIkZhbHNlIiBhbmQgIlRydWUiLCBidXQgcmF0aGVyIHJldHVybiB0aGUgbGFzdCBldmFsdWF0ZWRcbmFyZ3VtZW50LiAgVGhpcyBpcyBzb21ldGltZXMgdXNlZnVsLCBlLmcuLCBpZiAicyIgaXMgYSBzdHJpbmcgdGhhdFxuc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGEgZGVmYXVsdCB2YWx1ZSBpZiBpdCBpcyBlbXB0eSwgdGhlIGV4cHJlc3Npb25cbiJzIG9yIFwnZm9vXCciIHlpZWxkcyB0aGUgZGVzaXJlZCB2YWx1ZS4gIEJlY2F1c2UgIm5vdCIgaGFzIHRvIGludmVudCBhXG52YWx1ZSBhbnl3YXksIGl0IGRvZXMgbm90IGJvdGhlciB0byByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgc2FtZSB0eXBlIGFzXG5pdHMgYXJndW1lbnQsIHNvIGUuZy4sICJub3QgXCdmb29cJyIgeWllbGRzICJGYWxzZSIsIG5vdCAiXCdcJyIuKVxuJywKLSAnYnJlYWsnOiAnXG5UaGUgImJyZWFrIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBicmVha19zdG10IDo6PSAiYnJlYWsiXG5cbiJicmVhayIgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSAiZm9yIiBvciAid2hpbGUiXG5sb29wLCBidXQgbm90IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIG9yIGNsYXNzIGRlZmluaXRpb24gd2l0aGluIHRoYXRcbmxvb3AuXG5cbkl0IHRlcm1pbmF0ZXMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxvb3AsIHNraXBwaW5nIHRoZSBvcHRpb25hbCAiZWxzZSJcbmNsYXVzZSBpZiB0aGUgbG9vcCBoYXMgb25lLlxuXG5JZiBhICJmb3IiIGxvb3AgaXMgdGVybWluYXRlZCBieSAiYnJlYWsiLCB0aGUgbG9vcCBjb250cm9sIHRhcmdldFxua2VlcHMgaXRzIGN1cnJlbnQgdmFsdWUuXG5cbldoZW4gImJyZWFrIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhICJmaW5hbGx5IlxuY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseSBsZWF2aW5nIHRoZVxubG9vcC5cbicsCi0gJ2NhbGxhYmxlLXR5cGVzJzogJ1xuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgIngoYXJnMSwgYXJnMiwgLi4uKSIgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICAieC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pIi5cbicsCi0gJ2NhbGxzJzogJ1xuQ2FsbHNcbioqKioqXG5cbkEgY2FsbCBjYWxscyBhIGNhbGxhYmxlIG9iamVjdCAoZS5nLiwgYSAqZnVuY3Rpb24qKSB3aXRoIGEgcG9zc2libHlcbmVtcHR5IHNlcmllcyBvZiAqYXJndW1lbnRzKjpcblxuICAgY2FsbCAgICAgICAgICAgICAgICAgOjo9IHByaW1hcnkgIigiIFthcmd1bWVudF9saXN0IFsiLCJdIHwgY29tcHJlaGVuc2lvbl0gIikiXG4gICBhcmd1bWVudF9saXN0ICAgICAgICA6Oj0gcG9zaXRpb25hbF9hcmd1bWVudHMgWyIsIiBrZXl3b3JkX2FyZ3VtZW50c11cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiAiKiIgZXhwcmVzc2lvbl0gWyIsIiBrZXl3b3JkX2FyZ3VtZW50c11cbiAgICAgICAgICAgICAgICAgICAgICAgWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8IGtleXdvcmRfYXJndW1lbnRzIFsiLCIgIioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIga2V5d29yZF9hcmd1bWVudHNdIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCAiKiIgZXhwcmVzc2lvbiBbIiwiIGtleXdvcmRfYXJndW1lbnRzXSBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBleHByZXNzaW9uXG4gICBwb3NpdGlvbmFsX2FyZ3VtZW50cyA6Oj0gZXhwcmVzc2lvbiAoIiwiIGV4cHJlc3Npb24pKlxuICAga2V5d29yZF9hcmd1bWVudHMgICAgOjo9IGtleXdvcmRfaXRlbSAoIiwiIGtleXdvcmRfaXRlbSkqXG4gICBrZXl3b3JkX2l0ZW0gICAgICAgICA6Oj0gaWRlbnRpZmllciAiPSIgZXhwcmVzc2lvblxuXG5BIHRyYWlsaW5nIGNvbW1hIG1heSBiZSBwcmVzZW50IGFmdGVyIHRoZSBwb3NpdGlvbmFsIGFuZCBrZXl3b3JkXG5hcmd1bWVudHMgYnV0IGRvZXMgbm90IGFmZmVjdCB0aGUgc2VtYW50aWNzLlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGEgY2FsbGFibGUgb2JqZWN0ICh1c2VyLWRlZmluZWRcbmZ1bmN0aW9ucywgYnVpbHQtaW4gZnVuY3Rpb25zLCBtZXRob2RzIG9mIGJ1aWx0LWluIG9iamVjdHMsIGNsYXNzXG5vYmplY3RzLCBtZXRob2RzIG9mIGNsYXNzIGluc3RhbmNlcywgYW5kIGFsbCBvYmplY3RzIGhhdmluZyBhXG4iX19jYWxsX18oKSIgbWV0aG9kIGFyZSBjYWxsYWJsZSkuICBBbGwgYXJndW1lbnQgZXhwcmVzc2lvbnMgYXJlXG5ldmFsdWF0ZWQgYmVmb3JlIHRoZSBjYWxsIGlzIGF0dGVtcHRlZC4gIFBsZWFzZSByZWZlciB0byBzZWN0aW9uXG4qRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIGZvcm1hbCAqcGFyYW1ldGVyKiBsaXN0cy5cblxuSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIHByZXNlbnQsIHRoZXkgYXJlIGZpcnN0IGNvbnZlcnRlZCB0b1xucG9zaXRpb25hbCBhcmd1bWVudHMsIGFzIGZvbGxvd3MuICBGaXJzdCwgYSBsaXN0IG9mIHVuZmlsbGVkIHNsb3RzIGlzXG5jcmVhdGVkIGZvciB0aGUgZm9ybWFsIHBhcmFtZXRlcnMuICBJZiB0aGVyZSBhcmUgTiBwb3NpdGlvbmFsXG5hcmd1bWVudHMsIHRoZXkgYXJlIHBsYWNlZCBpbiB0aGUgZmlyc3QgTiBzbG90cy4gIE5leHQsIGZvciBlYWNoXG5rZXl3b3JkIGFyZ3VtZW50LCB0aGUgaWRlbnRpZmllciBpcyB1c2VkIHRvIGRldGVybWluZSB0aGVcbmNvcnJlc3BvbmRpbmcgc2xvdCAoaWYgdGhlIGlkZW50aWZpZXIgaXMgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IGZvcm1hbFxucGFyYW1ldGVyIG5hbWUsIHRoZSBmaXJzdCBzbG90IGlzIHVzZWQsIGFuZCBzbyBvbikuICBJZiB0aGUgc2xvdCBpc1xuYWxyZWFkeSBmaWxsZWQsIGEgIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC4gT3RoZXJ3aXNlLCB0aGVcbnZhbHVlIG9mIHRoZSBhcmd1bWVudCBpcyBwbGFjZWQgaW4gdGhlIHNsb3QsIGZpbGxpbmcgaXQgKGV2ZW4gaWYgdGhlXG5leHByZXNzaW9uIGlzICJOb25lIiwgaXQgZmlsbHMgdGhlIHNsb3QpLiAgV2hlbiBhbGwgYXJndW1lbnRzIGhhdmVcbmJlZW4gcHJvY2Vzc2VkLCB0aGUgc2xvdHMgdGhhdCBhcmUgc3RpbGwgdW5maWxsZWQgYXJlIGZpbGxlZCB3aXRoIHRoZVxuY29ycmVzcG9uZGluZyBkZWZhdWx0IHZhbHVlIGZyb20gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICAoRGVmYXVsdFxudmFsdWVzIGFyZSBjYWxjdWxhdGVkLCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkOyB0aHVzLCBhXG5tdXRhYmxlIG9iamVjdCBzdWNoIGFzIGEgbGlzdCBvciBkaWN0aW9uYXJ5IHVzZWQgYXMgZGVmYXVsdCB2YWx1ZSB3aWxsXG5iZSBzaGFyZWQgYnkgYWxsIGNhbGxzIHRoYXQgZG9uXCd0IHNwZWNpZnkgYW4gYXJndW1lbnQgdmFsdWUgZm9yIHRoZVxuY29ycmVzcG9uZGluZyBzbG90OyB0aGlzIHNob3VsZCB1c3VhbGx5IGJlIGF2b2lkZWQuKSAgSWYgdGhlcmUgYXJlIGFueVxudW5maWxsZWQgc2xvdHMgZm9yIHdoaWNoIG5vIGRlZmF1bHQgdmFsdWUgaXMgc3BlY2lmaWVkLCBhICJUeXBlRXJyb3IiXG5leGNlcHRpb24gaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCB0aGUgbGlzdCBvZiBmaWxsZWQgc2xvdHMgaXMgdXNlZCBhc1xudGhlIGFyZ3VtZW50IGxpc3QgZm9yIHRoZSBjYWxsLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIEFuIGltcGxlbWVudGF0aW9uIG1heSBwcm92aWRlXG5idWlsdC1pbiBmdW5jdGlvbnMgd2hvc2UgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGRvIG5vdCBoYXZlIG5hbWVzLCBldmVuXG5pZiB0aGV5IGFyZSBcJ25hbWVkXCcgZm9yIHRoZSBwdXJwb3NlIG9mIGRvY3VtZW50YXRpb24sIGFuZCB3aGljaFxudGhlcmVmb3JlIGNhbm5vdCBiZSBzdXBwbGllZCBieSBrZXl3b3JkLiAgSW4gQ1B5dGhvbiwgdGhpcyBpcyB0aGUgY2FzZVxuZm9yIGZ1bmN0aW9ucyBpbXBsZW1lbnRlZCBpbiBDIHRoYXQgdXNlICJQeUFyZ19QYXJzZVR1cGxlKCkiIHRvIHBhcnNlXG50aGVpciBhcmd1bWVudHMuXG5cbklmIHRoZXJlIGFyZSBtb3JlIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhlcmUgYXJlIGZvcm1hbCBwYXJhbWV0ZXJcbnNsb3RzLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIippZGVudGlmaWVyIiBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXQgZm9ybWFsXG5wYXJhbWV0ZXIgcmVjZWl2ZXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBleGNlc3MgcG9zaXRpb25hbCBhcmd1bWVudHNcbihvciBhbiBlbXB0eSB0dXBsZSBpZiB0aGVyZSB3ZXJlIG5vIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50cykuXG5cbklmIGFueSBrZXl3b3JkIGFyZ3VtZW50IGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYSBmb3JtYWwgcGFyYW1ldGVyXG5uYW1lLCBhICJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQsIHVubGVzcyBhIGZvcm1hbCBwYXJhbWV0ZXJcbnVzaW5nIHRoZSBzeW50YXggIioqaWRlbnRpZmllciIgaXMgcHJlc2VudDsgaW4gdGhpcyBjYXNlLCB0aGF0IGZvcm1hbFxucGFyYW1ldGVyIHJlY2VpdmVzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBleGNlc3Mga2V5d29yZFxuYXJndW1lbnRzICh1c2luZyB0aGUga2V5d29yZHMgYXMga2V5cyBhbmQgdGhlIGFyZ3VtZW50IHZhbHVlcyBhc1xuY29ycmVzcG9uZGluZyB2YWx1ZXMpLCBvciBhIChuZXcpIGVtcHR5IGRpY3Rpb25hcnkgaWYgdGhlcmUgd2VyZSBub1xuZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLlxuXG5JZiB0aGUgc3ludGF4ICIqZXhwcmVzc2lvbiIgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCwgImV4cHJlc3Npb24iXG5tdXN0IGV2YWx1YXRlIHRvIGFuIGl0ZXJhYmxlLiAgRWxlbWVudHMgZnJvbSB0aGlzIGl0ZXJhYmxlIGFyZSB0cmVhdGVkXG5hcyBpZiB0aGV5IHdlcmUgYWRkaXRpb25hbCBwb3NpdGlvbmFsIGFyZ3VtZW50czsgaWYgdGhlcmUgYXJlXG5wb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosIGFuZCAiZXhwcmVzc2lvbiIgZXZhbHVhdGVzIHRvIGFcbnNlcXVlbmNlICp5MSosIC4uLiwgKnlNKiwgdGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgY2FsbCB3aXRoIE0rTlxucG9zaXRpb25hbCBhcmd1bWVudHMgKngxKiwgLi4uLCAqeE4qLCAqeTEqLCAuLi4sICp5TSouXG5cbkEgY29uc2VxdWVuY2Ugb2YgdGhpcyBpcyB0aGF0IGFsdGhvdWdoIHRoZSAiKmV4cHJlc3Npb24iIHN5bnRheCBtYXlcbmFwcGVhciAqYWZ0ZXIqIHNvbWUga2V5d29yZCBhcmd1bWVudHMsIGl0IGlzIHByb2Nlc3NlZCAqYmVmb3JlKiB0aGVcbmtleXdvcmQgYXJndW1lbnRzIChhbmQgdGhlICIqKmV4cHJlc3Npb24iIGFyZ3VtZW50LCBpZiBhbnkgLS0gc2VlXG5iZWxvdykuICBTbzpcblxuICAgPj4+IGRlZiBmKGEsIGIpOlxuICAgLi4uICBwcmludChhLCBiKVxuICAgLi4uXG4gICA+Pj4gZihiPTEsICooMiwpKVxuICAgMiAxXG4gICA+Pj4gZihhPTEsICooMiwpKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICBUeXBlRXJyb3I6IGYoKSBnb3QgbXVsdGlwbGUgdmFsdWVzIGZvciBrZXl3b3JkIGFyZ3VtZW50IFwnYVwnXG4gICA+Pj4gZigxLCAqKDIsKSlcbiAgIDEgMlxuXG5JdCBpcyB1bnVzdWFsIGZvciBib3RoIGtleXdvcmQgYXJndW1lbnRzIGFuZCB0aGUgIipleHByZXNzaW9uIiBzeW50YXhcbnRvIGJlIHVzZWQgaW4gdGhlIHNhbWUgY2FsbCwgc28gaW4gcHJhY3RpY2UgdGhpcyBjb25mdXNpb24gZG9lcyBub3RcbmFyaXNlLlxuXG5JZiB0aGUgc3ludGF4ICIqKmV4cHJlc3Npb24iIGFwcGVhcnMgaW4gdGhlIGZ1bmN0aW9uIGNhbGwsXG4iZXhwcmVzc2lvbiIgbXVzdCBldmFsdWF0ZSB0byBhIG1hcHBpbmcsIHRoZSBjb250ZW50cyBvZiB3aGljaCBhcmVcbnRyZWF0ZWQgYXMgYWRkaXRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cy4gIEluIHRoZSBjYXNlIG9mIGEga2V5d29yZFxuYXBwZWFyaW5nIGluIGJvdGggImV4cHJlc3Npb24iIGFuZCBhcyBhbiBleHBsaWNpdCBrZXl3b3JkIGFyZ3VtZW50LCBhXG4iVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuXG5Gb3JtYWwgcGFyYW1ldGVycyB1c2luZyB0aGUgc3ludGF4ICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciJcbmNhbm5vdCBiZSB1c2VkIGFzIHBvc2l0aW9uYWwgYXJndW1lbnQgc2xvdHMgb3IgYXMga2V5d29yZCBhcmd1bWVudFxubmFtZXMuXG5cbkEgY2FsbCBhbHdheXMgcmV0dXJucyBzb21lIHZhbHVlLCBwb3NzaWJseSAiTm9uZSIsIHVubGVzcyBpdCByYWlzZXMgYW5cbmV4Y2VwdGlvbi4gIEhvdyB0aGlzIHZhbHVlIGlzIGNvbXB1dGVkIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgdGhlXG5jYWxsYWJsZSBvYmplY3QuXG5cbklmIGl0IGlzLS0tXG5cbmEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uOlxuICAgVGhlIGNvZGUgYmxvY2sgZm9yIHRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCwgcGFzc2luZyBpdCB0aGVcbiAgIGFyZ3VtZW50IGxpc3QuICBUaGUgZmlyc3QgdGhpbmcgdGhlIGNvZGUgYmxvY2sgd2lsbCBkbyBpcyBiaW5kIHRoZVxuICAgZm9ybWFsIHBhcmFtZXRlcnMgdG8gdGhlIGFyZ3VtZW50czsgdGhpcyBpcyBkZXNjcmliZWQgaW4gc2VjdGlvblxuICAgKkZ1bmN0aW9uIGRlZmluaXRpb25zKi4gIFdoZW4gdGhlIGNvZGUgYmxvY2sgZXhlY3V0ZXMgYSAicmV0dXJuIlxuICAgc3RhdGVtZW50LCB0aGlzIHNwZWNpZmllcyB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBjYWxsLlxuXG5hIGJ1aWx0LWluIGZ1bmN0aW9uIG9yIG1ldGhvZDpcbiAgIFRoZSByZXN1bHQgaXMgdXAgdG8gdGhlIGludGVycHJldGVyOyBzZWUgKkJ1aWx0LWluIEZ1bmN0aW9ucyogZm9yXG4gICB0aGUgZGVzY3JpcHRpb25zIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhbmQgbWV0aG9kcy5cblxuYSBjbGFzcyBvYmplY3Q6XG4gICBBIG5ldyBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIGlzIHJldHVybmVkLlxuXG5hIGNsYXNzIGluc3RhbmNlIG1ldGhvZDpcbiAgIFRoZSBjb3JyZXNwb25kaW5nIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBpcyBjYWxsZWQsIHdpdGggYW4gYXJndW1lbnRcbiAgIGxpc3QgdGhhdCBpcyBvbmUgbG9uZ2VyIHRoYW4gdGhlIGFyZ3VtZW50IGxpc3Qgb2YgdGhlIGNhbGw6IHRoZVxuICAgaW5zdGFuY2UgYmVjb21lcyB0aGUgZmlyc3QgYXJndW1lbnQuXG5cbmEgY2xhc3MgaW5zdGFuY2U6XG4gICBUaGUgY2xhc3MgbXVzdCBkZWZpbmUgYSAiX19jYWxsX18oKSIgbWV0aG9kOyB0aGUgZWZmZWN0IGlzIHRoZW4gdGhlXG4gICBzYW1lIGFzIGlmIHRoYXQgbWV0aG9kIHdhcyBjYWxsZWQuXG4nLAotICdjbGFzcyc6ICdcbkNsYXNzIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLVxuICBDbGFzcyBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzc1xuICAgIHRoZXJlIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXJcbiAgICBleGNlcHRpb24uIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZlxuICAgIGFuIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yXG4gICAgImJyZWFrIiBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZVxuICAgIGZ1bmN0aW9uIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iXG4gICAgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKLSAnY29tcGFyaXNvbnMnOiAnXG5Db21wYXJpc29uc1xuKioqKioqKioqKipcblxuVW5saWtlIEMsIGFsbCBjb21wYXJpc29uIG9wZXJhdGlvbnMgaW4gUHl0aG9uIGhhdmUgdGhlIHNhbWUgcHJpb3JpdHksXG53aGljaCBpcyBsb3dlciB0aGFuIHRoYXQgb2YgYW55IGFyaXRobWV0aWMsIHNoaWZ0aW5nIG9yIGJpdHdpc2Vcbm9wZXJhdGlvbi4gIEFsc28gdW5saWtlIEMsIGV4cHJlc3Npb25zIGxpa2UgImEgPCBiIDwgYyIgaGF2ZSB0aGVcbmludGVycHJldGF0aW9uIHRoYXQgaXMgY29udmVudGlvbmFsIGluIG1hdGhlbWF0aWNzOlxuXG4gICBjb21wYXJpc29uICAgIDo6PSBvcl9leHByICggY29tcF9vcGVyYXRvciBvcl9leHByICkqXG4gICBjb21wX29wZXJhdG9yIDo6PSAiPCIgfCAiPiIgfCAiPT0iIHwgIj49IiB8ICI8PSIgfCAiIT0iXG4gICAgICAgICAgICAgICAgICAgICB8ICJpcyIgWyJub3QiXSB8IFsibm90Il0gImluIlxuXG5Db21wYXJpc29ucyB5aWVsZCBib29sZWFuIHZhbHVlczogIlRydWUiIG9yICJGYWxzZSIuXG5cbkNvbXBhcmlzb25zIGNhbiBiZSBjaGFpbmVkIGFyYml0cmFyaWx5LCBlLmcuLCAieCA8IHkgPD0geiIgaXNcbmVxdWl2YWxlbnQgdG8gInggPCB5IGFuZCB5IDw9IHoiLCBleGNlcHQgdGhhdCAieSIgaXMgZXZhbHVhdGVkIG9ubHlcbm9uY2UgKGJ1dCBpbiBib3RoIGNhc2VzICJ6IiBpcyBub3QgZXZhbHVhdGVkIGF0IGFsbCB3aGVuICJ4IDwgeSIgaXNcbmZvdW5kIHRvIGJlIGZhbHNlKS5cblxuRm9ybWFsbHksIGlmICphKiwgKmIqLCAqYyosIC4uLiwgKnkqLCAqeiogYXJlIGV4cHJlc3Npb25zIGFuZCAqb3AxKixcbipvcDIqLCAuLi4sICpvcE4qIGFyZSBjb21wYXJpc29uIG9wZXJhdG9ycywgdGhlbiAiYSBvcDEgYiBvcDIgYyAuLi4geVxub3BOIHoiIGlzIGVxdWl2YWxlbnQgdG8gImEgb3AxIGIgYW5kIGIgb3AyIGMgYW5kIC4uLiB5IG9wTiB6IiwgZXhjZXB0XG50aGF0IGVhY2ggZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgYXQgbW9zdCBvbmNlLlxuXG5Ob3RlIHRoYXQgImEgb3AxIGIgb3AyIGMiIGRvZXNuXCd0IGltcGx5IGFueSBraW5kIG9mIGNvbXBhcmlzb24gYmV0d2VlblxuKmEqIGFuZCAqYyosIHNvIHRoYXQsIGUuZy4sICJ4IDwgeSA+IHoiIGlzIHBlcmZlY3RseSBsZWdhbCAodGhvdWdoXG5wZXJoYXBzIG5vdCBwcmV0dHkpLlxuXG5UaGUgb3BlcmF0b3JzICI8IiwgIj4iLCAiPT0iLCAiPj0iLCAiPD0iLCBhbmQgIiE9IiBjb21wYXJlIHRoZSB2YWx1ZXNcbm9mIHR3byBvYmplY3RzLiAgVGhlIG9iamVjdHMgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlLiBJZiBib3RoIGFyZVxubnVtYmVycywgdGhleSBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuICBPdGhlcndpc2UsIHRoZSAiPT0iIGFuZFxuIiE9IiBvcGVyYXRvcnMgKmFsd2F5cyogY29uc2lkZXIgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdG8gYmVcbnVuZXF1YWwsIHdoaWxlIHRoZSAiPCIsICI+IiwgIj49IiBhbmQgIjw9IiBvcGVyYXRvcnMgcmFpc2UgYVxuIlR5cGVFcnJvciIgd2hlbiBjb21wYXJpbmcgb2JqZWN0cyBvZiBkaWZmZXJlbnQgdHlwZXMgdGhhdCBkbyBub3RcbmltcGxlbWVudCB0aGVzZSBvcGVyYXRvcnMgZm9yIHRoZSBnaXZlbiBwYWlyIG9mIHR5cGVzLiAgWW91IGNhblxuY29udHJvbCBjb21wYXJpc29uIGJlaGF2aW9yIG9mIG9iamVjdHMgb2Ygbm9uLWJ1aWx0LWluIHR5cGVzIGJ5XG5kZWZpbmluZyByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBsaWtlICJfX2d0X18oKSIsIGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4qQmFzaWMgY3VzdG9taXphdGlvbiouXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgc2FtZSB0eXBlIGRlcGVuZHMgb24gdGhlIHR5cGU6XG5cbiogTnVtYmVycyBhcmUgY29tcGFyZWQgYXJpdGhtZXRpY2FsbHkuXG5cbiogVGhlIHZhbHVlcyAiZmxvYXQoXCdOYU5cJykiIGFuZCAiRGVjaW1hbChcJ05hTlwnKSIgYXJlIHNwZWNpYWwuIFRoZVxuICBhcmUgaWRlbnRpY2FsIHRvIHRoZW1zZWx2ZXMsICJ4IGlzIHgiIGJ1dCBhcmUgbm90IGVxdWFsIHRvXG4gIHRoZW1zZWx2ZXMsICJ4ICE9IHgiLiAgQWRkaXRpb25hbGx5LCBjb21wYXJpbmcgYW55IHZhbHVlIHRvIGFcbiAgbm90LWEtbnVtYmVyIHZhbHVlIHdpbGwgcmV0dXJuICJGYWxzZSIuICBGb3IgZXhhbXBsZSwgYm90aCAiMyA8XG4gIGZsb2F0KFwnTmFOXCcpIiBhbmQgImZsb2F0KFwnTmFOXCcpIDwgMyIgd2lsbCByZXR1cm4gIkZhbHNlIi5cblxuKiBCeXRlcyBvYmplY3RzIGFyZSBjb21wYXJlZCBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGUgbnVtZXJpY1xuICB2YWx1ZXMgb2YgdGhlaXIgZWxlbWVudHMuXG5cbiogU3RyaW5ncyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgZXF1aXZhbGVudHMgKHRoZSByZXN1bHQgb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJvcmQoKSIpIG9mIHRoZWlyXG4gIGNoYXJhY3RlcnMuIFszXSBTdHJpbmcgYW5kIGJ5dGVzIG9iamVjdCBjYW5cJ3QgYmUgY29tcGFyZWQhXG5cbiogVHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvblxuICBvZiBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLiAgVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGVhY2hcbiAgZWxlbWVudCBtdXN0IGNvbXBhcmUgZXF1YWwgYW5kIHRoZSB0d28gc2VxdWVuY2VzIG11c3QgYmUgb2YgdGhlIHNhbWVcbiAgdHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguXG5cbiAgSWYgbm90IGVxdWFsLCB0aGUgc2VxdWVuY2VzIGFyZSBvcmRlcmVkIHRoZSBzYW1lIGFzIHRoZWlyIGZpcnN0XG4gIGRpZmZlcmluZyBlbGVtZW50cy4gIEZvciBleGFtcGxlLCAiWzEsMix4XSA8PSBbMSwyLHldIiBoYXMgdGhlIHNhbWVcbiAgdmFsdWUgYXMgInggPD0geSIuICBJZiB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IGRvZXMgbm90IGV4aXN0LCB0aGVcbiAgc2hvcnRlciBzZXF1ZW5jZSBpcyBvcmRlcmVkIGZpcnN0IChmb3IgZXhhbXBsZSwgIlsxLDJdIDwgWzEsMiwzXSIpLlxuXG4qIE1hcHBpbmdzIChkaWN0aW9uYXJpZXMpIGNvbXBhcmUgZXF1YWwgaWYgYW5kIG9ubHkgaWYgdGhleSBoYXZlIHRoZVxuICBzYW1lICIoa2V5LCB2YWx1ZSkiIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyAiKFwnPFwnLCBcJzw9XCcsIFwnPj1cJyxcbiAgXCc+XCcpIiByYWlzZSAiVHlwZUVycm9yIi5cblxuKiBTZXRzIGFuZCBmcm96ZW5zZXRzIGRlZmluZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0byBtZWFuIHN1YnNldCBhbmRcbiAgc3VwZXJzZXQgdGVzdHMuICBUaG9zZSByZWxhdGlvbnMgZG8gbm90IGRlZmluZSB0b3RhbCBvcmRlcmluZ3MgKHRoZVxuICB0d28gc2V0cyAiezEsMn0iIGFuZCB7MiwzfSBhcmUgbm90IGVxdWFsLCBub3Igc3Vic2V0cyBvZiBvbmVcbiAgYW5vdGhlciwgbm9yIHN1cGVyc2V0cyBvZiBvbmUgYW5vdGhlcikuICBBY2NvcmRpbmdseSwgc2V0cyBhcmUgbm90XG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb25zIHdoaWNoIGRlcGVuZCBvbiB0b3RhbCBvcmRlcmluZy5cbiAgRm9yIGV4YW1wbGUsICJtaW4oKSIsICJtYXgoKSIsIGFuZCAic29ydGVkKCkiIHByb2R1Y2UgdW5kZWZpbmVkXG4gIHJlc3VsdHMgZ2l2ZW4gYSBsaXN0IG9mIHNldHMgYXMgaW5wdXRzLlxuXG4qIE1vc3Qgb3RoZXIgb2JqZWN0cyBvZiBidWlsdC1pbiB0eXBlcyBjb21wYXJlIHVuZXF1YWwgdW5sZXNzIHRoZXlcbiAgYXJlIHRoZSBzYW1lIG9iamVjdDsgdGhlIGNob2ljZSB3aGV0aGVyIG9uZSBvYmplY3QgaXMgY29uc2lkZXJlZFxuICBzbWFsbGVyIG9yIGxhcmdlciB0aGFuIGFub3RoZXIgb25lIGlzIG1hZGUgYXJiaXRyYXJpbHkgYnV0XG4gIGNvbnNpc3RlbnRseSB3aXRoaW4gb25lIGV4ZWN1dGlvbiBvZiBhIHByb2dyYW0uXG5cbkNvbXBhcmlzb24gb2Ygb2JqZWN0cyBvZiB0aGUgZGlmZmVyaW5nIHR5cGVzIGRlcGVuZHMgb24gd2hldGhlciBlaXRoZXJcbm9mIHRoZSB0eXBlcyBwcm92aWRlIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHRoZSBjb21wYXJpc29uLiAgTW9zdFxubnVtZXJpYyB0eXBlcyBjYW4gYmUgY29tcGFyZWQgd2l0aCBvbmUgYW5vdGhlci4gIFdoZW4gY3Jvc3MtdHlwZVxuY29tcGFyaXNvbiBpcyBub3Qgc3VwcG9ydGVkLCB0aGUgY29tcGFyaXNvbiBtZXRob2QgcmV0dXJuc1xuIk5vdEltcGxlbWVudGVkIi5cblxuVGhlIG9wZXJhdG9ycyAiaW4iIGFuZCAibm90IGluIiB0ZXN0IGZvciBtZW1iZXJzaGlwLiAgInggaW4gcyJcbmV2YWx1YXRlcyB0byB0cnVlIGlmICp4KiBpcyBhIG1lbWJlciBvZiAqcyosIGFuZCBmYWxzZSBvdGhlcndpc2UuICAieFxubm90IGluIHMiIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mICJ4IGluIHMiLiAgQWxsIGJ1aWx0LWluIHNlcXVlbmNlc1xuYW5kIHNldCB0eXBlcyBzdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggImluIiB0ZXN0c1xud2hldGhlciBhIHRoZSBkaWN0aW9uYXJ5IGhhcyBhIGdpdmVuIGtleS4gRm9yIGNvbnRhaW5lciB0eXBlcyBzdWNoIGFzXG5saXN0LCB0dXBsZSwgc2V0LCBmcm96ZW5zZXQsIGRpY3QsIG9yIGNvbGxlY3Rpb25zLmRlcXVlLCB0aGVcbmV4cHJlc3Npb24gInggaW4geSIgaXMgZXF1aXZhbGVudCB0byAiYW55KHggaXMgZSBvciB4ID09IGUgZm9yIGUgaW5cbnkpIi5cblxuRm9yIHRoZSBzdHJpbmcgYW5kIGJ5dGVzIHR5cGVzLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBpc1xuYSBzdWJzdHJpbmcgb2YgKnkqLiAgQW4gZXF1aXZhbGVudCB0ZXN0IGlzICJ5LmZpbmQoeCkgIT0gLTEiLiAgRW1wdHlcbnN0cmluZ3MgYXJlIGFsd2F5cyBjb25zaWRlcmVkIHRvIGJlIGEgc3Vic3RyaW5nIG9mIGFueSBvdGhlciBzdHJpbmcsXG5zbyAiIiIgaW4gImFiYyIiIHdpbGwgcmV0dXJuICJUcnVlIi5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRlZmluZSB0aGUgIl9fY29udGFpbnNfXygpIiBtZXRob2QsICJ4XG5pbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmICJ5Ll9fY29udGFpbnNfXyh4KSIgaXMgdHJ1ZS5cblxuRm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzIHdoaWNoIGRvIG5vdCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiBidXQgZG9cbmRlZmluZSAiX19pdGVyX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgc29tZSB2YWx1ZSAieiIgd2l0aCAieCA9PSB6IlxuaXMgcHJvZHVjZWQgd2hpbGUgaXRlcmF0aW5nIG92ZXIgInkiLiAgSWYgYW4gZXhjZXB0aW9uIGlzIHJhaXNlZFxuZHVyaW5nIHRoZSBpdGVyYXRpb24sIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uLlxuXG5MYXN0bHksIHRoZSBvbGQtc3R5bGUgaXRlcmF0aW9uIHByb3RvY29sIGlzIHRyaWVkOiBpZiBhIGNsYXNzIGRlZmluZXNcbiJfX2dldGl0ZW1fXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBhIG5vbi1cbm5lZ2F0aXZlIGludGVnZXIgaW5kZXggKmkqIHN1Y2ggdGhhdCAieCA9PSB5W2ldIiwgYW5kIGFsbCBsb3dlclxuaW50ZWdlciBpbmRpY2VzIGRvIG5vdCByYWlzZSAiSW5kZXhFcnJvciIgZXhjZXB0aW9uLiAgKElmIGFueSBvdGhlclxuZXhjZXB0aW9uIGlzIHJhaXNlZCwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24pLlxuXG5UaGUgb3BlcmF0b3IgIm5vdCBpbiIgaXMgZGVmaW5lZCB0byBoYXZlIHRoZSBpbnZlcnNlIHRydWUgdmFsdWUgb2ZcbiJpbiIuXG5cblRoZSBvcGVyYXRvcnMgImlzIiBhbmQgImlzIG5vdCIgdGVzdCBmb3Igb2JqZWN0IGlkZW50aXR5OiAieCBpcyB5IiBpc1xudHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogYW5kICp5KiBhcmUgdGhlIHNhbWUgb2JqZWN0LiAgInggaXMgbm90IHkiXG55aWVsZHMgdGhlIGludmVyc2UgdHJ1dGggdmFsdWUuIFs0XVxuJywKLSAnY29tcG91bmQnOiAnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgImlmIiwgIndoaWxlIiBhbmQgImZvciIgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWwgY29udHJvbFxuZmxvdyBjb25zdHJ1Y3RzLiAgInRyeSIgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cFxuY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgIndpdGgiIHN0YXRlbWVudCBhbGxvd3MgdGhlXG5leGVjdXRpb24gb2YgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBjb2RlIGFyb3VuZCBhIGJsb2NrIG9mXG5jb2RlLiAgRnVuY3Rpb24gYW5kIGNsYXNzIGRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHkgY29tcG91bmRcbnN0YXRlbWVudHMuXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29uc2lzdCBvZiBvbmUgb3IgbW9yZSBcJ2NsYXVzZXMuXCcgIEEgY2xhdXNlXG5jb25zaXN0cyBvZiBhIGhlYWRlciBhbmQgYSBcJ3N1aXRlLlwnICBUaGUgY2xhdXNlIGhlYWRlcnMgb2YgYVxucGFydGljdWxhciBjb21wb3VuZCBzdGF0ZW1lbnQgYXJlIGFsbCBhdCB0aGUgc2FtZSBpbmRlbnRhdGlvbiBsZXZlbC5cbkVhY2ggY2xhdXNlIGhlYWRlciBiZWdpbnMgd2l0aCBhIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGtleXdvcmQgYW5kIGVuZHNcbndpdGggYSBjb2xvbi4gIEEgc3VpdGUgaXMgYSBncm91cCBvZiBzdGF0ZW1lbnRzIGNvbnRyb2xsZWQgYnkgYVxuY2xhdXNlLiAgQSBzdWl0ZSBjYW4gYmUgb25lIG9yIG1vcmUgc2VtaWNvbG9uLXNlcGFyYXRlZCBzaW1wbGVcbnN0YXRlbWVudHMgb24gdGhlIHNhbWUgbGluZSBhcyB0aGUgaGVhZGVyLCBmb2xsb3dpbmcgdGhlIGhlYWRlclwnc1xuY29sb24sIG9yIGl0IGNhbiBiZSBvbmUgb3IgbW9yZSBpbmRlbnRlZCBzdGF0ZW1lbnRzIG9uIHN1YnNlcXVlbnRcbmxpbmVzLiAgT25seSB0aGUgbGF0dGVyIGZvcm0gb2Ygc3VpdGUgY2FuIGNvbnRhaW4gbmVzdGVkIGNvbXBvdW5kXG5zdGF0ZW1lbnRzOyB0aGUgZm9sbG93aW5nIGlzIGlsbGVnYWwsIG1vc3RseSBiZWNhdXNlIGl0IHdvdWxkblwndCBiZVxuY2xlYXIgdG8gd2hpY2ggImlmIiBjbGF1c2UgYSBmb2xsb3dpbmcgImVsc2UiIGNsYXVzZSB3b3VsZCBiZWxvbmc6XG5cbiAgIGlmIHRlc3QxOiBpZiB0ZXN0MjogcHJpbnQoeClcblxuQWxzbyBub3RlIHRoYXQgdGhlIHNlbWljb2xvbiBiaW5kcyB0aWdodGVyIHRoYW4gdGhlIGNvbG9uIGluIHRoaXNcbmNvbnRleHQsIHNvIHRoYXQgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBlaXRoZXIgYWxsIG9yIG5vbmUgb2YgdGhlXG4icHJpbnQoKSIgY2FsbHMgYXJlIGV4ZWN1dGVkOlxuXG4gICBpZiB4IDwgeSA8IHo6IHByaW50KHgpOyBwcmludCh5KTsgcHJpbnQoeilcblxuU3VtbWFyaXppbmc6XG5cbiAgIGNvbXBvdW5kX3N0bXQgOjo9IGlmX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2hpbGVfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCBmb3Jfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB0cnlfc3RtdFxuICAgICAgICAgICAgICAgICAgICAgfCB3aXRoX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZnVuY2RlZlxuICAgICAgICAgICAgICAgICAgICAgfCBjbGFzc2RlZlxuICAgc3VpdGUgICAgICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBORVdMSU5FIElOREVOVCBzdGF0ZW1lbnQrIERFREVOVFxuICAgc3RhdGVtZW50ICAgICA6Oj0gc3RtdF9saXN0IE5FV0xJTkUgfCBjb21wb3VuZF9zdG10XG4gICBzdG10X2xpc3QgICAgIDo6PSBzaW1wbGVfc3RtdCAoIjsiIHNpbXBsZV9zdG10KSogWyI7Il1cblxuTm90ZSB0aGF0IHN0YXRlbWVudHMgYWx3YXlzIGVuZCBpbiBhICJORVdMSU5FIiBwb3NzaWJseSBmb2xsb3dlZCBieSBhXG4iREVERU5UIi4gIEFsc28gbm90ZSB0aGF0IG9wdGlvbmFsIGNvbnRpbnVhdGlvbiBjbGF1c2VzIGFsd2F5cyBiZWdpblxud2l0aCBhIGtleXdvcmQgdGhhdCBjYW5ub3Qgc3RhcnQgYSBzdGF0ZW1lbnQsIHRodXMgdGhlcmUgYXJlIG5vXG5hbWJpZ3VpdGllcyAodGhlIFwnZGFuZ2xpbmcgImVsc2UiXCcgcHJvYmxlbSBpcyBzb2x2ZWQgaW4gUHl0aG9uIGJ5XG5yZXF1aXJpbmcgbmVzdGVkICJpZiIgc3RhdGVtZW50cyB0byBiZSBpbmRlbnRlZCkuXG5cblRoZSBmb3JtYXR0aW5nIG9mIHRoZSBncmFtbWFyIHJ1bGVzIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMgcGxhY2VzXG5lYWNoIGNsYXVzZSBvbiBhIHNlcGFyYXRlIGxpbmUgZm9yIGNsYXJpdHkuXG5cblxuVGhlICJpZiIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT1cblxuVGhlICJpZiIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgImlmIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuXG5cblRoZSAid2hpbGUiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2hpbGUiIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBnb2VzIGJhY2tcbnRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG5cblxuVGhlICJmb3IiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgImZvciIgc3RhdGVtZW50IGlzIHVzZWQgdG8gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhIHNlcXVlbmNlXG4oc3VjaCBhcyBhIHN0cmluZywgdHVwbGUgb3IgbGlzdCkgb3Igb3RoZXIgaXRlcmFibGUgb2JqZWN0OlxuXG4gICBmb3Jfc3RtdCA6Oj0gImZvciIgdGFyZ2V0X2xpc3QgImluIiBleHByZXNzaW9uX2xpc3QgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoZSBleHByZXNzaW9uIGxpc3QgaXMgZXZhbHVhdGVkIG9uY2U7IGl0IHNob3VsZCB5aWVsZCBhbiBpdGVyYWJsZVxub2JqZWN0LiAgQW4gaXRlcmF0b3IgaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3VsdCBvZiB0aGVcbiJleHByZXNzaW9uX2xpc3QiLiAgVGhlIHN1aXRlIGlzIHRoZW4gZXhlY3V0ZWQgb25jZSBmb3IgZWFjaCBpdGVtXG5wcm92aWRlZCBieSB0aGUgaXRlcmF0b3IsIGluIHRoZSBvcmRlciBvZiBhc2NlbmRpbmcgaW5kaWNlcy4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgd2FzIG5vIG5leHRcbml0ZW0uXG5cblRoZSBzdWl0ZSBtYXkgYXNzaWduIHRvIHRoZSB2YXJpYWJsZShzKSBpbiB0aGUgdGFyZ2V0IGxpc3Q7IHRoaXMgZG9lc1xubm90IGFmZmVjdCB0aGUgbmV4dCBpdGVtIGFzc2lnbmVkIHRvIGl0LlxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCBpdCB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXQgYWxsXG5ieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGVcbiAgbG9vcCAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG5cblxuVGhlICJ0cnkiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09PVxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiB0YXJnZXRdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSAiZXhjZXB0IiBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW4gbm9cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIHN1aXRlLCBhIHNlYXJjaCBmb3IgYW5cbmV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0IGNsYXVzZXNcbmluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW4gZXhwcmVzc2lvbi1cbmxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzIGFueVxuZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0IGV4cHJlc3Npb25cbmlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzIGNvbXBhdGlibGVcbndpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlIGV4Y2VwdGlvblxub2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlICJ0cnkiIHN0YXRlbWVudCByYWlzZWRcbnRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlICJhcyIga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmXG5wcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nICJhcyB0YXJnZXQiLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSAic3lzIiBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3MgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgZGVmIGYoKTpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIDEvMFxuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIHJldHVybiA0MlxuXG4gICA+Pj4gZigpXG4gICA0MlxuXG5UaGUgZXhjZXB0aW9uIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUgdG8gdGhlIHByb2dyYW0gZHVyaW5nXG5leGVjdXRpb24gb2YgdGhlICJmaW5hbGx5IiBjbGF1c2UuXG5cbldoZW4gYSAicmV0dXJuIiwgImJyZWFrIiBvciAiY29udGludWUiIHN0YXRlbWVudCBpcyBleGVjdXRlZCBpbiB0aGVcbiJ0cnkiIHN1aXRlIG9mIGEgInRyeSIuLi4iZmluYWxseSIgc3RhdGVtZW50LCB0aGUgImZpbmFsbHkiIGNsYXVzZSBpc1xuYWxzbyBleGVjdXRlZCBcJ29uIHRoZSB3YXkgb3V0LlwnIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgaWxsZWdhbCBpblxudGhlICJmaW5hbGx5IiBjbGF1c2UuIChUaGUgcmVhc29uIGlzIGEgcHJvYmxlbSB3aXRoIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiAtLS0gdGhpcyByZXN0cmljdGlvbiBtYXkgYmUgbGlmdGVkIGluIHRoZSBmdXR1cmUpLlxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSAicmFpc2UiIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cblxuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cbkZ1bmN0aW9uIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PT09PVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgKCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiAiPSJcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICIiKiIiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS0gdGhpc1xuaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb25cbmlzIGV4ZWN1dGVkLioqIFRoaXMgbWVhbnMgdGhhdCB0aGUgZXhwcmVzc2lvbiBpcyBldmFsdWF0ZWQgb25jZSwgd2hlblxudGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQsIGFuZCB0aGF0IHRoZSBzYW1lICJwcmUtY29tcHV0ZWQiIHZhbHVlIGlzXG51c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgd2hlbiBhXG5kZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGEgbGlzdCBvciBhIGRpY3Rpb25hcnk6XG5pZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieSBhcHBlbmRpbmcgYW4gaXRlbSB0byBhXG5saXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLiBUaGlzIGlzIGdlbmVyYWxseSBub3RcbndoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlICJOb25lIiBhcyB0aGUgZGVmYXVsdCxcbmFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iIippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmcgYW55XG5leGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmIHRoZVxuZm9ybSAiIioqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICIiKiIiIG9yICIiKmlkZW50aWZpZXIiIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiIjogZXhwcmVzc2lvbiIiIGZvbGxvd2luZ1xudGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uIGV2ZW4gdGhvc2Vcbm9mIHRoZSBmb3JtICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciIuICBGdW5jdGlvbnMgbWF5IGhhdmVcbiJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gIiItPiBleHByZXNzaW9uIiIgYWZ0ZXIgdGhlIHBhcmFtZXRlclxubGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gYW5kIGFyZVxuZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuICBBbm5vdGF0aW9ucyBtYXlcbmJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cblRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiBhXG5mdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzIHZhbHVlcyBvZiBhXG5kaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlICJfX2Fubm90YXRpb25zX18iXG5hdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICIiZGVmIiIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiImRlZiIiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgIiJkZWYiIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286ICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG5cbiAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLVxuICBDbGFzcyBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzc1xuICAgIHRoZXJlIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXJcbiAgICBleGNlcHRpb24uIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZlxuICAgIGFuIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yXG4gICAgImJyZWFrIiBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZVxuICAgIGZ1bmN0aW9uIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iXG4gICAgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKLSAnY29udGV4dC1tYW5hZ2Vycyc6ICdcbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgIndpdGgiIHN0YXRlbWVudC4gVGhlIGNvbnRleHQgbWFuYWdlclxuaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWUgY29udGV4dFxuZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZSBub3JtYWxseVxuaW52b2tlZCB1c2luZyB0aGUgIndpdGgiIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb24gKlRoZSB3aXRoXG5zdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXIgbWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgIndpdGgiXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlICJhcyIgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgIk5vbmUiLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCAiX19leGl0X18oKSIgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cbicsCi0gJ2NvbnRpbnVlJzogJ1xuVGhlICJjb250aW51ZSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgY29udGludWVfc3RtdCA6Oj0gImNvbnRpbnVlIlxuXG4iY29udGludWUiIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgImZvciIgb3IgIndoaWxlIlxubG9vcCwgYnV0IG5vdCBuZXN0ZWQgaW4gYSBmdW5jdGlvbiBvciBjbGFzcyBkZWZpbml0aW9uIG9yICJmaW5hbGx5IlxuY2xhdXNlIHdpdGhpbiB0aGF0IGxvb3AuICBJdCBjb250aW51ZXMgd2l0aCB0aGUgbmV4dCBjeWNsZSBvZiB0aGVcbm5lYXJlc3QgZW5jbG9zaW5nIGxvb3AuXG5cbldoZW4gImNvbnRpbnVlIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhXG4iZmluYWxseSIgY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseVxuc3RhcnRpbmcgdGhlIG5leHQgbG9vcCBjeWNsZS5cbicsCi0gJ2NvbnZlcnNpb25zJzogJ1xuQXJpdGhtZXRpYyBjb252ZXJzaW9uc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5XaGVuIGEgZGVzY3JpcHRpb24gb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRvciBiZWxvdyB1c2VzIHRoZSBwaHJhc2VcbiJ0aGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCIgdGhpcyBtZWFuc1xudGhhdCB0aGUgb3BlcmF0b3IgaW1wbGVtZW50YXRpb24gZm9yIGJ1aWx0LWluIHR5cGVzIHdvcmtzIHRoYXQgd2F5OlxuXG4qIElmIGVpdGhlciBhcmd1bWVudCBpcyBhIGNvbXBsZXggbnVtYmVyLCB0aGUgb3RoZXIgaXMgY29udmVydGVkIHRvXG4gIGNvbXBsZXg7XG5cbiogb3RoZXJ3aXNlLCBpZiBlaXRoZXIgYXJndW1lbnQgaXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXIsIHRoZVxuICBvdGhlciBpcyBjb252ZXJ0ZWQgdG8gZmxvYXRpbmcgcG9pbnQ7XG5cbiogb3RoZXJ3aXNlLCBib3RoIG11c3QgYmUgaW50ZWdlcnMgYW5kIG5vIGNvbnZlcnNpb24gaXMgbmVjZXNzYXJ5LlxuXG5Tb21lIGFkZGl0aW9uYWwgcnVsZXMgYXBwbHkgZm9yIGNlcnRhaW4gb3BlcmF0b3JzIChlLmcuLCBhIHN0cmluZyBsZWZ0XG5hcmd1bWVudCB0byB0aGUgXCclXCcgb3BlcmF0b3IpLiAgRXh0ZW5zaW9ucyBtdXN0IGRlZmluZSB0aGVpciBvd25cbmNvbnZlcnNpb24gYmVoYXZpb3IuXG4nLAotICdjdXN0b21pemF0aW9uJzogJ1xuQmFzaWMgY3VzdG9taXphdGlvblxuKioqKioqKioqKioqKioqKioqKlxuXG5vYmplY3QuX19uZXdfXyhjbHNbLCAuLi5dKVxuXG4gICBDYWxsZWQgdG8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIGNsYXNzICpjbHMqLiAgIl9fbmV3X18oKSIgaXMgYVxuICAgc3RhdGljIG1ldGhvZCAoc3BlY2lhbC1jYXNlZCBzbyB5b3UgbmVlZCBub3QgZGVjbGFyZSBpdCBhcyBzdWNoKVxuICAgdGhhdCB0YWtlcyB0aGUgY2xhc3Mgb2Ygd2hpY2ggYW4gaW5zdGFuY2Ugd2FzIHJlcXVlc3RlZCBhcyBpdHNcbiAgIGZpcnN0IGFyZ3VtZW50LiAgVGhlIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRob3NlIHBhc3NlZCB0byB0aGVcbiAgIG9iamVjdCBjb25zdHJ1Y3RvciBleHByZXNzaW9uICh0aGUgY2FsbCB0byB0aGUgY2xhc3MpLiAgVGhlIHJldHVyblxuICAgdmFsdWUgb2YgIl9fbmV3X18oKSIgc2hvdWxkIGJlIHRoZSBuZXcgb2JqZWN0IGluc3RhbmNlICh1c3VhbGx5IGFuXG4gICBpbnN0YW5jZSBvZiAqY2xzKikuXG5cbiAgIFR5cGljYWwgaW1wbGVtZW50YXRpb25zIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgY2xhc3MgYnlcbiAgIGludm9raW5nIHRoZSBzdXBlcmNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCB1c2luZ1xuICAgInN1cGVyKGN1cnJlbnRjbGFzcywgY2xzKS5fX25ld19fKGNsc1ssIC4uLl0pIiB3aXRoIGFwcHJvcHJpYXRlXG4gICBhcmd1bWVudHMgYW5kIHRoZW4gbW9kaWZ5aW5nIHRoZSBuZXdseS1jcmVhdGVkIGluc3RhbmNlIGFzXG4gICBuZWNlc3NhcnkgYmVmb3JlIHJldHVybmluZyBpdC5cblxuICAgSWYgIl9fbmV3X18oKSIgcmV0dXJucyBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgYmUgaW52b2tlZCBsaWtlXG4gICAiX19pbml0X18oc2VsZlssIC4uLl0pIiwgd2hlcmUgKnNlbGYqIGlzIHRoZSBuZXcgaW5zdGFuY2UgYW5kIHRoZVxuICAgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgd2VyZSBwYXNzZWQgdG8gIl9fbmV3X18oKSIuXG5cbiAgIElmICJfX25ld19fKCkiIGRvZXMgbm90IHJldHVybiBhbiBpbnN0YW5jZSBvZiAqY2xzKiwgdGhlbiB0aGUgbmV3XG4gICBpbnN0YW5jZVwncyAiX19pbml0X18oKSIgbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQuXG5cbiAgICJfX25ld19fKCkiIGlzIGludGVuZGVkIG1haW5seSB0byBhbGxvdyBzdWJjbGFzc2VzIG9mIGltbXV0YWJsZVxuICAgdHlwZXMgKGxpa2UgaW50LCBzdHIsIG9yIHR1cGxlKSB0byBjdXN0b21pemUgaW5zdGFuY2UgY3JlYXRpb24uICBJdFxuICAgaXMgYWxzbyBjb21tb25seSBvdmVycmlkZGVuIGluIGN1c3RvbSBtZXRhY2xhc3NlcyBpbiBvcmRlciB0b1xuICAgY3VzdG9taXplIGNsYXNzIGNyZWF0aW9uLlxuXG5vYmplY3QuX19pbml0X18oc2VsZlssIC4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBjcmVhdGVkLiAgVGhlIGFyZ3VtZW50cyBhcmUgdGhvc2VcbiAgIHBhc3NlZCB0byB0aGUgY2xhc3MgY29uc3RydWN0b3IgZXhwcmVzc2lvbi4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYW5cbiAgICJfX2luaXRfXygpIiBtZXRob2QsIHRoZSBkZXJpdmVkIGNsYXNzXCdzICJfX2luaXRfXygpIiBtZXRob2QsIGlmXG4gICBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0IHRvIGVuc3VyZSBwcm9wZXIgaW5pdGlhbGl6YXRpb24gb2YgdGhlXG4gICBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlOyBmb3IgZXhhbXBsZTpcbiAgICJCYXNlQ2xhc3MuX19pbml0X18oc2VsZiwgW2FyZ3MuLi5dKSIuICBBcyBhIHNwZWNpYWwgY29uc3RyYWludCBvblxuICAgY29uc3RydWN0b3JzLCBubyB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQ7IGRvaW5nIHNvIHdpbGwgY2F1c2UgYVxuICAgIlR5cGVFcnJvciIgdG8gYmUgcmFpc2VkIGF0IHJ1bnRpbWUuXG5cbm9iamVjdC5fX2RlbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyBhYm91dCB0byBiZSBkZXN0cm95ZWQuICBUaGlzIGlzIGFsc29cbiAgIGNhbGxlZCBhIGRlc3RydWN0b3IuICBJZiBhIGJhc2UgY2xhc3MgaGFzIGEgIl9fZGVsX18oKSIgbWV0aG9kLCB0aGVcbiAgIGRlcml2ZWQgY2xhc3NcJ3MgIl9fZGVsX18oKSIgbWV0aG9kLCBpZiBhbnksIG11c3QgZXhwbGljaXRseSBjYWxsIGl0XG4gICB0byBlbnN1cmUgcHJvcGVyIGRlbGV0aW9uIG9mIHRoZSBiYXNlIGNsYXNzIHBhcnQgb2YgdGhlIGluc3RhbmNlLlxuICAgTm90ZSB0aGF0IGl0IGlzIHBvc3NpYmxlICh0aG91Z2ggbm90IHJlY29tbWVuZGVkISkgZm9yIHRoZVxuICAgIl9fZGVsX18oKSIgbWV0aG9kIHRvIHBvc3Rwb25lIGRlc3RydWN0aW9uIG9mIHRoZSBpbnN0YW5jZSBieVxuICAgY3JlYXRpbmcgYSBuZXcgcmVmZXJlbmNlIHRvIGl0LiAgSXQgbWF5IHRoZW4gYmUgY2FsbGVkIGF0IGEgbGF0ZXJcbiAgIHRpbWUgd2hlbiB0aGlzIG5ldyByZWZlcmVuY2UgaXMgZGVsZXRlZC4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRoYXRcbiAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGNhbGxlZCBmb3Igb2JqZWN0cyB0aGF0IHN0aWxsIGV4aXN0IHdoZW5cbiAgIHRoZSBpbnRlcnByZXRlciBleGl0cy5cblxuICAgTm90ZTogImRlbCB4IiBkb2VzblwndCBkaXJlY3RseSBjYWxsICJ4Ll9fZGVsX18oKSIgLS0tIHRoZSBmb3JtZXJcbiAgICAgZGVjcmVtZW50cyB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciAieCIgYnkgb25lLCBhbmQgdGhlIGxhdHRlciBpc1xuICAgICBvbmx5IGNhbGxlZCB3aGVuICJ4IlwncyByZWZlcmVuY2UgY291bnQgcmVhY2hlcyB6ZXJvLiAgU29tZSBjb21tb25cbiAgICAgc2l0dWF0aW9ucyB0aGF0IG1heSBwcmV2ZW50IHRoZSByZWZlcmVuY2UgY291bnQgb2YgYW4gb2JqZWN0IGZyb21cbiAgICAgZ29pbmcgdG8gemVybyBpbmNsdWRlOiBjaXJjdWxhciByZWZlcmVuY2VzIGJldHdlZW4gb2JqZWN0cyAoZS5nLixcbiAgICAgYSBkb3VibHktbGlua2VkIGxpc3Qgb3IgYSB0cmVlIGRhdGEgc3RydWN0dXJlIHdpdGggcGFyZW50IGFuZFxuICAgICBjaGlsZCBwb2ludGVycyk7IGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIG9mXG4gICAgIGEgZnVuY3Rpb24gdGhhdCBjYXVnaHQgYW4gZXhjZXB0aW9uICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmV4Y19pbmZvKClbMl0iIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSk7IG9yIGEgcmVmZXJlbmNlXG4gICAgIHRvIHRoZSBvYmplY3Qgb24gdGhlIHN0YWNrIGZyYW1lIHRoYXQgcmFpc2VkIGFuIHVuaGFuZGxlZFxuICAgICBleGNlcHRpb24gaW4gaW50ZXJhY3RpdmUgbW9kZSAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5sYXN0X3RyYWNlYmFjayIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKS4gIFRoZSBmaXJzdFxuICAgICBzaXR1YXRpb24gY2FuIG9ubHkgYmUgcmVtZWRpZWQgYnkgZXhwbGljaXRseSBicmVha2luZyB0aGUgY3ljbGVzO1xuICAgICB0aGUgbGF0dGVyIHR3byBzaXR1YXRpb25zIGNhbiBiZSByZXNvbHZlZCBieSBzdG9yaW5nICJOb25lIiBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIi4gQ2lyY3VsYXIgcmVmZXJlbmNlcyB3aGljaCBhcmUgZ2FyYmFnZSBhcmVcbiAgICAgZGV0ZWN0ZWQgd2hlbiB0aGUgb3B0aW9uIGN5Y2xlIGRldGVjdG9yIGlzIGVuYWJsZWQgKGl0XCdzIG9uIGJ5XG4gICAgIGRlZmF1bHQpLCBidXQgY2FuIG9ubHkgYmUgY2xlYW5lZCB1cCBpZiB0aGVyZSBhcmUgbm8gUHl0aG9uLVxuICAgICBsZXZlbCAiX19kZWxfXygpIiBtZXRob2RzIGludm9sdmVkLiBSZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvblxuICAgICBmb3IgdGhlICJnYyIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyAiX19kZWxfXygpIlxuICAgICBtZXRob2RzIGFyZSBoYW5kbGVkIGJ5IHRoZSBjeWNsZSBkZXRlY3RvciwgcGFydGljdWxhcmx5IHRoZVxuICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgImdhcmJhZ2UiIHZhbHVlLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaFxuICAgICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nXG4gICAgIHRoZWlyIGV4ZWN1dGlvbiBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvXG4gICAgICJzeXMuc3RkZXJyIiBpbnN0ZWFkLiBBbHNvLCB3aGVuICJfX2RlbF9fKCkiIGlzIGludm9rZWQgaW5cbiAgICAgcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmcgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlXG4gICAgIHByb2dyYW0gaXMgZG9uZSksIG90aGVyIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgIl9fZGVsX18oKSJcbiAgICAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nXG4gICAgIHRvcm4gZG93biAoZS5nLiB0aGUgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzXG4gICAgIHJlYXNvbiwgIl9fZGVsX18oKSIgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkXG4gICAgIHRvIG1haW50YWluIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LFxuICAgICBQeXRob24gZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSAiX19kZWxfXygpIiBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSAicmVwcigpIiBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSAib2ZmaWNpYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLCB0aGlzXG4gICBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkIHRvXG4gICByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgIjwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj4iIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyAiX19yZXByX18oKSIgYnV0XG4gICBub3QgIl9fc3RyX18oKSIsIHRoZW4gIl9fcmVwcl9fKCkiIGlzIGFsc28gdXNlZCB3aGVuIGFuICJpbmZvcm1hbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpcyByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgInN0cihvYmplY3QpIiBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZm9ybWF0KCkiIGFuZFxuICAgInByaW50KCkiIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZSBzdHJpbmdcbiAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhICpzdHJpbmcqXG4gICBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSAib2JqZWN0Ll9fcmVwcl9fKCkiIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgIl9fc3RyX18oKSIgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlICJvYmplY3QiXG4gICBjYWxscyAib2JqZWN0Ll9fcmVwcl9fKCkiLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAiYnl0ZXMoKSIgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhICJieXRlcyIgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSAiZm9ybWF0KCkiIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgICJzdHIuZm9ybWF0KCkiIG1ldGhvZCBvZiBjbGFzcyAic3RyIikgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyBhXG4gICBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyB1cCB0b1xuICAgdGhlIHR5cGUgaW1wbGVtZW50aW5nICJfX2Zvcm1hdF9fKCkiLCBob3dldmVyIG1vc3QgY2xhc3NlcyB3aWxsXG4gICBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvciB1c2UgYVxuICAgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiAieDx5IiBjYWxscyAieC5fX2x0X18oeSkiLCAieDw9eSIgY2FsbHMgInguX19sZV9fKHkpIixcbiAgICJ4PT15IiBjYWxscyAieC5fX2VxX18oeSkiLCAieCE9eSIgY2FsbHMgInguX19uZV9fKHkpIiwgIng+eSIgY2FsbHNcbiAgICJ4Ll9fZ3RfXyh5KSIsIGFuZCAieD49eSIgY2FsbHMgInguX19nZV9fKHkpIi5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvbiAiTm90SW1wbGVtZW50ZWQiXG4gICBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYSBnaXZlbiBwYWlyIG9mXG4gICBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgcmV0dXJuZWQgZm9yIGFcbiAgIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW4gcmV0dXJuIGFueSB2YWx1ZSxcbiAgIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYSBCb29sZWFuIGNvbnRleHQgKGUuZy4sXG4gICBpbiB0aGUgY29uZGl0aW9uIG9mIGFuICJpZiIgc3RhdGVtZW50KSwgUHl0aG9uIHdpbGwgY2FsbCAiYm9vbCgpIlxuICAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0IGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIFRoZXJlIGFyZSBubyBpbXBsaWVkIHJlbGF0aW9uc2hpcHMgYW1vbmcgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3JzLlxuICAgVGhlIHRydXRoIG9mICJ4PT15IiBkb2VzIG5vdCBpbXBseSB0aGF0ICJ4IT15IiBpcyBmYWxzZS5cbiAgIEFjY29yZGluZ2x5LCB3aGVuIGRlZmluaW5nICJfX2VxX18oKSIsIG9uZSBzaG91bGQgYWxzbyBkZWZpbmVcbiAgICJfX25lX18oKSIgc28gdGhhdCB0aGUgb3BlcmF0b3JzIHdpbGwgYmVoYXZlIGFzIGV4cGVjdGVkLiAgU2VlIHRoZVxuICAgcGFyYWdyYXBoIG9uICJfX2hhc2hfXygpIiBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb24gY3JlYXRpbmdcbiAgICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uIG9wZXJhdGlvbnMgYW5kXG4gICBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgIl9fbHRfXygpIiBhbmQgIl9fZ3RfXygpIiBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgIl9fbGVfXygpIiBhbmQgIl9fZ2VfXygpIiBhcmUgZWFjaCBvdGhlclwncyByZWZsZWN0aW9uLFxuICAgYW5kICJfX2VxX18oKSIgYW5kICJfX25lX18oKSIgYXJlIHRoZWlyIG93biByZWZsZWN0aW9uLlxuXG4gICBBcmd1bWVudHMgdG8gcmljaCBjb21wYXJpc29uIG1ldGhvZHMgYXJlIG5ldmVyIGNvZXJjZWQuXG5cbiAgIFRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3RcbiAgIG9wZXJhdGlvbiwgc2VlICJmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKSIuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gImhhc2goKSIgYW5kIGZvciBvcGVyYXRpb25zIG9uIG1lbWJlcnNcbiAgIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgInNldCIsICJmcm96ZW5zZXQiLCBhbmQgImRpY3QiLlxuICAgIl9faGFzaF9fKCkiIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5IHJlcXVpcmVkIHByb3BlcnR5XG4gICBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lIGhhc2ggdmFsdWU7IGl0IGlzXG4gICBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2hcbiAgIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0IGFsc28gcGxheSBhIHBhcnQgaW5cbiAgIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogImhhc2goKSIgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwnc1xuICAgICBjdXN0b20gIl9faGFzaF9fKCkiIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhICJQeV9zc2l6ZV90Ii4gIFRoaXNcbiAgICAgaXMgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXRcbiAgICAgYnVpbGRzLiBJZiBhbiBvYmplY3RcJ3MgICAiX19oYXNoX18oKSIgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzXG4gICAgIG9mIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbFxuICAgICBzdXBwb3J0ZWQgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoICJweXRob24gLWNcbiAgICAgImltcG9ydCBzeXM7IHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpIiJcblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gIl9fZXFfXygpIiBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgIl9faGFzaF9fKCkiIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0IGRlZmluZXMgIl9fZXFfXygpIlxuICAgYnV0IG5vdCAiX19oYXNoX18oKSIsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmUgdXNhYmxlIGFzIGl0ZW1zIGluXG4gICBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lcyBtdXRhYmxlIG9iamVjdHMgYW5kXG4gICBpbXBsZW1lbnRzIGFuICJfX2VxX18oKSIgbWV0aG9kLCBpdCBzaG91bGQgbm90IGltcGxlbWVudFxuICAgIl9faGFzaF9fKCkiLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGUgY29sbGVjdGlvbnNcbiAgIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZSBvYmplY3RcJ3MgaGFzaFxuICAgdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlICJfX2VxX18oKSIgYW5kICJfX2hhc2hfXygpIiBtZXRob2RzIGJ5XG4gICBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCAieC5fX2hhc2hfXygpIiByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHN1Y2hcbiAgIHRoYXQgInggPT0geSIgaW1wbGllcyBib3RoIHRoYXQgInggaXMgeSIgYW5kICJoYXNoKHgpID09IGhhc2goeSkiLlxuXG4gICBBIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgYW5kIGRvZXMgbm90IGRlZmluZSAiX19oYXNoX18oKSJcbiAgIHdpbGwgaGF2ZSBpdHMgIl9faGFzaF9fKCkiIGltcGxpY2l0bHkgc2V0IHRvICJOb25lIi4gIFdoZW4gdGhlXG4gICAiX19oYXNoX18oKSIgbWV0aG9kIG9mIGEgY2xhc3MgaXMgIk5vbmUiLCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzXG4gICB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlICJUeXBlRXJyb3IiIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvXG4gICByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSIpLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgIl9faGFzaF9fKCkiIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZSBpbnRlcnByZXRlclxuICAgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nICJfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fIi5cblxuICAgSWYgYSBjbGFzcyB0aGF0IGRvZXMgbm90IG92ZXJyaWRlICJfX2VxX18oKSIgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlICJfX2hhc2hfXyA9IE5vbmUiIGluIHRoZSBjbGFzc1xuICAgZGVmaW5pdGlvbi4gQSBjbGFzcyB3aGljaCBkZWZpbmVzIGl0cyBvd24gIl9faGFzaF9fKCkiIHRoYXRcbiAgIGV4cGxpY2l0bHkgcmFpc2VzIGEgIlR5cGVFcnJvciIgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgaGFzaGFibGUgYnkgYW4gImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSkiIGNhbGwuXG5cbiAgIE5vdGU6IEJ5IGRlZmF1bHQsIHRoZSAiX19oYXNoX18oKSIgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kXG4gICAgIGRhdGV0aW1lIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSByYW5kb20gdmFsdWUuXG4gICAgIEFsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvblxuICAgICBwcm9jZXNzLCB0aGV5IGFyZSBub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZlxuICAgICBQeXRob24uVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBhIGRlbmlhbC1cbiAgICAgb2Ytc2VydmljZSBjYXVzZWQgYnkgY2FyZWZ1bGx5LWNob3NlbiBpbnB1dHMgdGhhdCBleHBsb2l0IHRoZVxuICAgICB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIG9mIGEgZGljdCBpbnNlcnRpb24sIE8obl4yKSBjb21wbGV4aXR5LlxuICAgICBTZWUgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sIGZvclxuICAgICBkZXRhaWxzLkNoYW5naW5nIGhhc2ggdmFsdWVzIGFmZmVjdHMgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZlxuICAgICBkaWN0cywgc2V0cyBhbmQgb3RoZXIgbWFwcGluZ3MuICBQeXRob24gaGFzIG5ldmVyIG1hZGUgZ3VhcmFudGVlc1xuICAgICBhYm91dCB0aGlzIG9yZGVyaW5nIChhbmQgaXQgdHlwaWNhbGx5IHZhcmllcyBiZXR3ZWVuIDMyLWJpdCBhbmRcbiAgICAgNjQtYml0IGJ1aWxkcykuU2VlIGFsc28gIlBZVEhPTkhBU0hTRUVEIi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgImJvb2woKSI7IHNob3VsZCByZXR1cm4gIkZhbHNlIiBvciAiVHJ1ZSIuICBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdFxuICAgZGVmaW5lZCwgIl9fbGVuX18oKSIgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlIG9iamVjdCBpc1xuICAgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbmVpdGhlciAiX19sZW5fXygpIiBub3IgIl9fYm9vbF9fKCkiLCBhbGwgaXRzIGluc3RhbmNlcyBhcmVcbiAgIGNvbnNpZGVyZWQgdHJ1ZS5cbicsCi0gJ2RlYnVnZ2VyJzogJ1xuInBkYiIgLS0tIFRoZSBQeXRob24gRGVidWdnZXJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBtb2R1bGUgInBkYiIgZGVmaW5lcyBhbiBpbnRlcmFjdGl2ZSBzb3VyY2UgY29kZSBkZWJ1Z2dlciBmb3JcblB5dGhvbiBwcm9ncmFtcy4gIEl0IHN1cHBvcnRzIHNldHRpbmcgKGNvbmRpdGlvbmFsKSBicmVha3BvaW50cyBhbmRcbnNpbmdsZSBzdGVwcGluZyBhdCB0aGUgc291cmNlIGxpbmUgbGV2ZWwsIGluc3BlY3Rpb24gb2Ygc3RhY2sgZnJhbWVzLFxuc291cmNlIGNvZGUgbGlzdGluZywgYW5kIGV2YWx1YXRpb24gb2YgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGluIHRoZVxuY29udGV4dCBvZiBhbnkgc3RhY2sgZnJhbWUuICBJdCBhbHNvIHN1cHBvcnRzIHBvc3QtbW9ydGVtIGRlYnVnZ2luZ1xuYW5kIGNhbiBiZSBjYWxsZWQgdW5kZXIgcHJvZ3JhbSBjb250cm9sLlxuXG5UaGUgZGVidWdnZXIgaXMgZXh0ZW5zaWJsZSAtLSBpdCBpcyBhY3R1YWxseSBkZWZpbmVkIGFzIHRoZSBjbGFzc1xuIlBkYiIuIFRoaXMgaXMgY3VycmVudGx5IHVuZG9jdW1lbnRlZCBidXQgZWFzaWx5IHVuZGVyc3Rvb2QgYnkgcmVhZGluZ1xudGhlIHNvdXJjZS4gIFRoZSBleHRlbnNpb24gaW50ZXJmYWNlIHVzZXMgdGhlIG1vZHVsZXMgImJkYiIgYW5kICJjbWQiLlxuXG5UaGUgZGVidWdnZXJcJ3MgcHJvbXB0IGlzICIoUGRiKSIuIFR5cGljYWwgdXNhZ2UgdG8gcnVuIGEgcHJvZ3JhbSB1bmRlclxuY29udHJvbCBvZiB0aGUgZGVidWdnZXIgaXM6XG5cbiAgID4+PiBpbXBvcnQgcGRiXG4gICA+Pj4gaW1wb3J0IG15bW9kdWxlXG4gICA+Pj4gcGRiLnJ1bihcJ215bW9kdWxlLnRlc3QoKVwnKVxuICAgPiA8c3RyaW5nPigwKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpIGNvbnRpbnVlXG4gICBOYW1lRXJyb3I6IFwnc3BhbVwnXG4gICA+IDxzdHJpbmc+KDEpPygpXG4gICAoUGRiKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBUYWItY29tcGxldGlvbiB2aWEgdGhlICJyZWFkbGluZSIgbW9kdWxlIGlzXG5hdmFpbGFibGUgZm9yIGNvbW1hbmRzIGFuZCBjb21tYW5kIGFyZ3VtZW50cywgZS5nLiB0aGUgY3VycmVudCBnbG9iYWxcbmFuZCBsb2NhbCBuYW1lcyBhcmUgb2ZmZXJlZCBhcyBhcmd1bWVudHMgb2YgdGhlICJwcmludCIgY29tbWFuZC5cblxuInBkYi5weSIgY2FuIGFsc28gYmUgaW52b2tlZCBhcyBhIHNjcmlwdCB0byBkZWJ1ZyBvdGhlciBzY3JpcHRzLiAgRm9yXG5leGFtcGxlOlxuXG4gICBweXRob24zIC1tIHBkYiBteXNjcmlwdC5weVxuXG5XaGVuIGludm9rZWQgYXMgYSBzY3JpcHQsIHBkYiB3aWxsIGF1dG9tYXRpY2FsbHkgZW50ZXIgcG9zdC1tb3J0ZW1cbmRlYnVnZ2luZyBpZiB0aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCBleGl0cyBhYm5vcm1hbGx5LiAgQWZ0ZXIgcG9zdC1cbm1vcnRlbSBkZWJ1Z2dpbmcgKG9yIGFmdGVyIG5vcm1hbCBleGl0IG9mIHRoZSBwcm9ncmFtKSwgcGRiIHdpbGxcbnJlc3RhcnQgdGhlIHByb2dyYW0uICBBdXRvbWF0aWMgcmVzdGFydGluZyBwcmVzZXJ2ZXMgcGRiXCdzIHN0YXRlIChzdWNoXG5hcyBicmVha3BvaW50cykgYW5kIGluIG1vc3QgY2FzZXMgaXMgbW9yZSB1c2VmdWwgdGhhbiBxdWl0dGluZyB0aGVcbmRlYnVnZ2VyIHVwb24gcHJvZ3JhbVwncyBleGl0LlxuXG5OZXcgaW4gdmVyc2lvbiAzLjI6ICJwZGIucHkiIG5vdyBhY2NlcHRzIGEgIi1jIiBvcHRpb24gdGhhdCBleGVjdXRlc1xuY29tbWFuZHMgYXMgaWYgZ2l2ZW4gaW4gYSAiLnBkYnJjIiBmaWxlLCBzZWUgKkRlYnVnZ2VyIENvbW1hbmRzKi5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIgZnJvbSBhIHJ1bm5pbmcgcHJvZ3JhbSBpc1xudG8gaW5zZXJ0XG5cbiAgIGltcG9ydCBwZGI7IHBkYi5zZXRfdHJhY2UoKVxuXG5hdCB0aGUgbG9jYXRpb24geW91IHdhbnQgdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIuICBZb3UgY2FuIHRoZW5cbnN0ZXAgdGhyb3VnaCB0aGUgY29kZSBmb2xsb3dpbmcgdGhpcyBzdGF0ZW1lbnQsIGFuZCBjb250aW51ZSBydW5uaW5nXG53aXRob3V0IHRoZSBkZWJ1Z2dlciB1c2luZyB0aGUgImNvbnRpbnVlIiBjb21tYW5kLlxuXG5UaGUgdHlwaWNhbCB1c2FnZSB0byBpbnNwZWN0IGEgY3Jhc2hlZCBwcm9ncmFtIGlzOlxuXG4gICA+Pj4gaW1wb3J0IHBkYlxuICAgPj4+IGltcG9ydCBteW1vZHVsZVxuICAgPj4+IG15bW9kdWxlLnRlc3QoKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA/XG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDQsIGluIHRlc3RcbiAgICAgICB0ZXN0MigpXG4gICAgIEZpbGUgIi4vbXltb2R1bGUucHkiLCBsaW5lIDMsIGluIHRlc3QyXG4gICAgICAgcHJpbnQoc3BhbSlcbiAgIE5hbWVFcnJvcjogc3BhbVxuICAgPj4+IHBkYi5wbSgpXG4gICA+IC4vbXltb2R1bGUucHkoMyl0ZXN0MigpXG4gICAtPiBwcmludChzcGFtKVxuICAgKFBkYilcblxuVGhlIG1vZHVsZSBkZWZpbmVzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zOyBlYWNoIGVudGVycyB0aGUgZGVidWdnZXJcbmluIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHdheTpcblxucGRiLnJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV4ZWN1dGUgdGhlICpzdGF0ZW1lbnQqIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KSB1bmRlclxuICAgZGVidWdnZXIgY29udHJvbC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFycyBiZWZvcmUgYW55IGNvZGUgaXNcbiAgIGV4ZWN1dGVkOyB5b3UgY2FuIHNldCBicmVha3BvaW50cyBhbmQgdHlwZSAiY29udGludWUiLCBvciB5b3UgY2FuXG4gICBzdGVwIHRocm91Z2ggdGhlIHN0YXRlbWVudCB1c2luZyAic3RlcCIgb3IgIm5leHQiIChhbGwgdGhlc2VcbiAgIGNvbW1hbmRzIGFyZSBleHBsYWluZWQgYmVsb3cpLiAgVGhlIG9wdGlvbmFsICpnbG9iYWxzKiBhbmQgKmxvY2FscypcbiAgIGFyZ3VtZW50cyBzcGVjaWZ5IHRoZSBlbnZpcm9ubWVudCBpbiB3aGljaCB0aGUgY29kZSBpcyBleGVjdXRlZDsgYnlcbiAgIGRlZmF1bHQgdGhlIGRpY3Rpb25hcnkgb2YgdGhlIG1vZHVsZSAiX19tYWluX18iIGlzIHVzZWQuICAoU2VlIHRoZVxuICAgZXhwbGFuYXRpb24gb2YgdGhlIGJ1aWx0LWluICJleGVjKCkiIG9yICJldmFsKCkiIGZ1bmN0aW9ucy4pXG5cbnBkYi5ydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogKGdpdmVuIGFzIGEgc3RyaW5nIG9yIGEgY29kZSBvYmplY3QpXG4gICB1bmRlciBkZWJ1Z2dlciBjb250cm9sLiAgV2hlbiAicnVuZXZhbCgpIiByZXR1cm5zLCBpdCByZXR1cm5zIHRoZVxuICAgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24uICBPdGhlcndpc2UgdGhpcyBmdW5jdGlvbiBpcyBzaW1pbGFyIHRvXG4gICAicnVuKCkiLlxuXG5wZGIucnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcblxuICAgQ2FsbCB0aGUgKmZ1bmN0aW9uKiAoYSBmdW5jdGlvbiBvciBtZXRob2Qgb2JqZWN0LCBub3QgYSBzdHJpbmcpXG4gICB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuICBXaGVuICJydW5jYWxsKCkiIHJldHVybnMsIGl0IHJldHVybnNcbiAgIHdoYXRldmVyIHRoZSBmdW5jdGlvbiBjYWxsIHJldHVybmVkLiAgVGhlIGRlYnVnZ2VyIHByb21wdCBhcHBlYXJzXG4gICBhcyBzb29uIGFzIHRoZSBmdW5jdGlvbiBpcyBlbnRlcmVkLlxuXG5wZGIuc2V0X3RyYWNlKClcblxuICAgRW50ZXIgdGhlIGRlYnVnZ2VyIGF0IHRoZSBjYWxsaW5nIHN0YWNrIGZyYW1lLiAgVGhpcyBpcyB1c2VmdWwgdG9cbiAgIGhhcmQtY29kZSBhIGJyZWFrcG9pbnQgYXQgYSBnaXZlbiBwb2ludCBpbiBhIHByb2dyYW0sIGV2ZW4gaWYgdGhlXG4gICBjb2RlIGlzIG5vdCBvdGhlcndpc2UgYmVpbmcgZGVidWdnZWQgKGUuZy4gd2hlbiBhbiBhc3NlcnRpb25cbiAgIGZhaWxzKS5cblxucGRiLnBvc3RfbW9ydGVtKHRyYWNlYmFjaz1Ob25lKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIGdpdmVuICp0cmFjZWJhY2sqIG9iamVjdC4gIElmIG5vXG4gICAqdHJhY2ViYWNrKiBpcyBnaXZlbiwgaXQgdXNlcyB0aGUgb25lIG9mIHRoZSBleGNlcHRpb24gdGhhdCBpc1xuICAgY3VycmVudGx5IGJlaW5nIGhhbmRsZWQgKGFuIGV4Y2VwdGlvbiBtdXN0IGJlIGJlaW5nIGhhbmRsZWQgaWYgdGhlXG4gICBkZWZhdWx0IGlzIHRvIGJlIHVzZWQpLlxuXG5wZGIucG0oKVxuXG4gICBFbnRlciBwb3N0LW1vcnRlbSBkZWJ1Z2dpbmcgb2YgdGhlIHRyYWNlYmFjayBmb3VuZCBpblxuICAgInN5cy5sYXN0X3RyYWNlYmFjayIuXG5cblRoZSAicnVuKiIgZnVuY3Rpb25zIGFuZCAic2V0X3RyYWNlKCkiIGFyZSBhbGlhc2VzIGZvciBpbnN0YW50aWF0aW5nXG50aGUgIlBkYiIgY2xhc3MgYW5kIGNhbGxpbmcgdGhlIG1ldGhvZCBvZiB0aGUgc2FtZSBuYW1lLiAgSWYgeW91IHdhbnRcbnRvIGFjY2VzcyBmdXJ0aGVyIGZlYXR1cmVzLCB5b3UgaGF2ZSB0byBkbyB0aGlzIHlvdXJzZWxmOlxuXG5jbGFzcyBjbGFzcyBwZGIuUGRiKGNvbXBsZXRla2V5PVwndGFiXCcsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBza2lwPU5vbmUsIG5vc2lnaW50PUZhbHNlKVxuXG4gICAiUGRiIiBpcyB0aGUgZGVidWdnZXIgY2xhc3MuXG5cbiAgIFRoZSAqY29tcGxldGVrZXkqLCAqc3RkaW4qIGFuZCAqc3Rkb3V0KiBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGVcbiAgIHVuZGVybHlpbmcgImNtZC5DbWQiIGNsYXNzOyBzZWUgdGhlIGRlc2NyaXB0aW9uIHRoZXJlLlxuXG4gICBUaGUgKnNraXAqIGFyZ3VtZW50LCBpZiBnaXZlbiwgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBnbG9iLXN0eWxlXG4gICBtb2R1bGUgbmFtZSBwYXR0ZXJucy4gIFRoZSBkZWJ1Z2dlciB3aWxsIG5vdCBzdGVwIGludG8gZnJhbWVzIHRoYXRcbiAgIG9yaWdpbmF0ZSBpbiBhIG1vZHVsZSB0aGF0IG1hdGNoZXMgb25lIG9mIHRoZXNlIHBhdHRlcm5zLiBbMV1cblxuICAgQnkgZGVmYXVsdCwgUGRiIHNldHMgYSBoYW5kbGVyIGZvciB0aGUgU0lHSU5UIHNpZ25hbCAod2hpY2ggaXMgc2VudFxuICAgd2hlbiB0aGUgdXNlciBwcmVzc2VzIEN0cmwtQyBvbiB0aGUgY29uc29sZSkgd2hlbiB5b3UgZ2l2ZSBhXG4gICAiY29udGludWUiIGNvbW1hbmQuIFRoaXMgYWxsb3dzIHlvdSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlclxuICAgYWdhaW4gYnkgcHJlc3NpbmcgQ3RybC1DLiAgSWYgeW91IHdhbnQgUGRiIG5vdCB0byB0b3VjaCB0aGUgU0lHSU5UXG4gICBoYW5kbGVyLCBzZXQgKm5vc2lnaW50KiB0b3QgdHJ1ZS5cblxuICAgRXhhbXBsZSBjYWxsIHRvIGVuYWJsZSB0cmFjaW5nIHdpdGggKnNraXAqOlxuXG4gICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKHNraXA9W1wnZGphbmdvLipcJ10pLnNldF90cmFjZSgpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMTogVGhlICpza2lwKiBhcmd1bWVudC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgKm5vc2lnaW50KiBhcmd1bWVudC4gIFByZXZpb3VzbHksIGEgU0lHSU5UXG4gICBoYW5kbGVyIHdhcyBuZXZlciBzZXQgYnkgUGRiLlxuXG4gICBydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuICAgcnVuY2FsbChmdW5jdGlvbiwgKmFyZ3MsICoqa3dkcylcbiAgIHNldF90cmFjZSgpXG5cbiAgICAgIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGZ1bmN0aW9ucyBleHBsYWluZWQgYWJvdmUuXG5cblxuRGVidWdnZXIgQ29tbWFuZHNcbj09PT09PT09PT09PT09PT09XG5cblRoZSBjb21tYW5kcyByZWNvZ25pemVkIGJ5IHRoZSBkZWJ1Z2dlciBhcmUgbGlzdGVkIGJlbG93LiAgTW9zdFxuY29tbWFuZHMgY2FuIGJlIGFiYnJldmlhdGVkIHRvIG9uZSBvciB0d28gbGV0dGVycyBhcyBpbmRpY2F0ZWQ7IGUuZy5cbiJoKGVscCkiIG1lYW5zIHRoYXQgZWl0aGVyICJoIiBvciAiaGVscCIgY2FuIGJlIHVzZWQgdG8gZW50ZXIgdGhlIGhlbHBcbmNvbW1hbmQgKGJ1dCBub3QgImhlIiBvciAiaGVsIiwgbm9yICJIIiBvciAiSGVscCIgb3IgIkhFTFAiKS5cbkFyZ3VtZW50cyB0byBjb21tYW5kcyBtdXN0IGJlIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIChzcGFjZXMgb3JcbnRhYnMpLiAgT3B0aW9uYWwgYXJndW1lbnRzIGFyZSBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgKCJbXSIpIGluXG50aGUgY29tbWFuZCBzeW50YXg7IHRoZSBzcXVhcmUgYnJhY2tldHMgbXVzdCBub3QgYmUgdHlwZWQuXG5BbHRlcm5hdGl2ZXMgaW4gdGhlIGNvbW1hbmQgc3ludGF4IGFyZSBzZXBhcmF0ZWQgYnkgYSB2ZXJ0aWNhbCBiYXJcbigifCIpLlxuXG5FbnRlcmluZyBhIGJsYW5rIGxpbmUgcmVwZWF0cyB0aGUgbGFzdCBjb21tYW5kIGVudGVyZWQuICBFeGNlcHRpb246IGlmXG50aGUgbGFzdCBjb21tYW5kIHdhcyBhICJsaXN0IiBjb21tYW5kLCB0aGUgbmV4dCAxMSBsaW5lcyBhcmUgbGlzdGVkLlxuXG5Db21tYW5kcyB0aGF0IHRoZSBkZWJ1Z2dlciBkb2VzblwndCByZWNvZ25pemUgYXJlIGFzc3VtZWQgdG8gYmUgUHl0aG9uXG5zdGF0ZW1lbnRzIGFuZCBhcmUgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkLiAgUHl0aG9uIHN0YXRlbWVudHMgY2FuIGFsc28gYmUgcHJlZml4ZWQgd2l0aCBhbiBleGNsYW1hdGlvblxucG9pbnQgKCIhIikuICBUaGlzIGlzIGEgcG93ZXJmdWwgd2F5IHRvIGluc3BlY3QgdGhlIHByb2dyYW0gYmVpbmdcbmRlYnVnZ2VkOyBpdCBpcyBldmVuIHBvc3NpYmxlIHRvIGNoYW5nZSBhIHZhcmlhYmxlIG9yIGNhbGwgYSBmdW5jdGlvbi5cbldoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiBzdWNoIGEgc3RhdGVtZW50LCB0aGUgZXhjZXB0aW9uIG5hbWUgaXNcbnByaW50ZWQgYnV0IHRoZSBkZWJ1Z2dlclwncyBzdGF0ZSBpcyBub3QgY2hhbmdlZC5cblxuVGhlIGRlYnVnZ2VyIHN1cHBvcnRzICphbGlhc2VzKi4gIEFsaWFzZXMgY2FuIGhhdmUgcGFyYW1ldGVycyB3aGljaFxuYWxsb3dzIG9uZSBhIGNlcnRhaW4gbGV2ZWwgb2YgYWRhcHRhYmlsaXR5IHRvIHRoZSBjb250ZXh0IHVuZGVyXG5leGFtaW5hdGlvbi5cblxuTXVsdGlwbGUgY29tbWFuZHMgbWF5IGJlIGVudGVyZWQgb24gYSBzaW5nbGUgbGluZSwgc2VwYXJhdGVkIGJ5ICI7OyIuXG4oQSBzaW5nbGUgIjsiIGlzIG5vdCB1c2VkIGFzIGl0IGlzIHRoZSBzZXBhcmF0b3IgZm9yIG11bHRpcGxlIGNvbW1hbmRzXG5pbiBhIGxpbmUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIFB5dGhvbiBwYXJzZXIuKSAgTm8gaW50ZWxsaWdlbmNlIGlzXG5hcHBsaWVkIHRvIHNlcGFyYXRpbmcgdGhlIGNvbW1hbmRzOyB0aGUgaW5wdXQgaXMgc3BsaXQgYXQgdGhlIGZpcnN0XG4iOzsiIHBhaXIsIGV2ZW4gaWYgaXQgaXMgaW4gdGhlIG1pZGRsZSBvZiBhIHF1b3RlZCBzdHJpbmcuXG5cbklmIGEgZmlsZSAiLnBkYnJjIiBleGlzdHMgaW4gdGhlIHVzZXJcJ3MgaG9tZSBkaXJlY3Rvcnkgb3IgaW4gdGhlXG5jdXJyZW50IGRpcmVjdG9yeSwgaXQgaXMgcmVhZCBpbiBhbmQgZXhlY3V0ZWQgYXMgaWYgaXQgaGFkIGJlZW4gdHlwZWRcbmF0IHRoZSBkZWJ1Z2dlciBwcm9tcHQuICBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIGFsaWFzZXMuICBJZlxuYm90aCBmaWxlcyBleGlzdCwgdGhlIG9uZSBpbiB0aGUgaG9tZSBkaXJlY3RvcnkgaXMgcmVhZCBmaXJzdCBhbmRcbmFsaWFzZXMgZGVmaW5lZCB0aGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgbG9jYWwgZmlsZS5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogIi5wZGJyYyIgY2FuIG5vdyBjb250YWluIGNvbW1hbmRzIHRoYXRcbmNvbnRpbnVlIGRlYnVnZ2luZywgc3VjaCBhcyAiY29udGludWUiIG9yICJuZXh0Ii4gIFByZXZpb3VzbHksIHRoZXNlXG5jb21tYW5kcyBoYWQgbm8gZWZmZWN0LlxuXG5oKGVscCkgW2NvbW1hbmRdXG5cbiAgIFdpdGhvdXQgYXJndW1lbnQsIHByaW50IHRoZSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4gIFdpdGggYVxuICAgKmNvbW1hbmQqIGFzIGFyZ3VtZW50LCBwcmludCBoZWxwIGFib3V0IHRoYXQgY29tbWFuZC4gICJoZWxwIHBkYiJcbiAgIGRpc3BsYXlzIHRoZSBmdWxsIGRvY3VtZW50YXRpb24gKHRoZSBkb2NzdHJpbmcgb2YgdGhlICJwZGIiXG4gICBtb2R1bGUpLiAgU2luY2UgdGhlICpjb21tYW5kKiBhcmd1bWVudCBtdXN0IGJlIGFuIGlkZW50aWZpZXIsICJoZWxwXG4gICBleGVjIiBtdXN0IGJlIGVudGVyZWQgdG8gZ2V0IGhlbHAgb24gdGhlICIhIiBjb21tYW5kLlxuXG53KGhlcmUpXG5cbiAgIFByaW50IGEgc3RhY2sgdHJhY2UsIHdpdGggdGhlIG1vc3QgcmVjZW50IGZyYW1lIGF0IHRoZSBib3R0b20uICBBblxuICAgYXJyb3cgaW5kaWNhdGVzIHRoZSBjdXJyZW50IGZyYW1lLCB3aGljaCBkZXRlcm1pbmVzIHRoZSBjb250ZXh0IG9mXG4gICBtb3N0IGNvbW1hbmRzLlxuXG5kKG93bikgW2NvdW50XVxuXG4gICBNb3ZlIHRoZSBjdXJyZW50IGZyYW1lICpjb3VudCogKGRlZmF1bHQgb25lKSBsZXZlbHMgZG93biBpbiB0aGVcbiAgIHN0YWNrIHRyYWNlICh0byBhIG5ld2VyIGZyYW1lKS5cblxudShwKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyB1cCBpbiB0aGUgc3RhY2tcbiAgIHRyYWNlICh0byBhbiBvbGRlciBmcmFtZSkuXG5cbmIocmVhaykgWyhbZmlsZW5hbWU6XWxpbmVubyB8IGZ1bmN0aW9uKSBbLCBjb25kaXRpb25dXVxuXG4gICBXaXRoIGEgKmxpbmVubyogYXJndW1lbnQsIHNldCBhIGJyZWFrIHRoZXJlIGluIHRoZSBjdXJyZW50IGZpbGUuXG4gICBXaXRoIGEgKmZ1bmN0aW9uKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgYXQgdGhlIGZpcnN0IGV4ZWN1dGFibGVcbiAgIHN0YXRlbWVudCB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gIFRoZSBsaW5lIG51bWJlciBtYXkgYmUgcHJlZml4ZWRcbiAgIHdpdGggYSBmaWxlbmFtZSBhbmQgYSBjb2xvbiwgdG8gc3BlY2lmeSBhIGJyZWFrcG9pbnQgaW4gYW5vdGhlclxuICAgZmlsZSAocHJvYmFibHkgb25lIHRoYXQgaGFzblwndCBiZWVuIGxvYWRlZCB5ZXQpLiAgVGhlIGZpbGUgaXNcbiAgIHNlYXJjaGVkIG9uICJzeXMucGF0aCIuICBOb3RlIHRoYXQgZWFjaCBicmVha3BvaW50IGlzIGFzc2lnbmVkIGFcbiAgIG51bWJlciB0byB3aGljaCBhbGwgdGhlIG90aGVyIGJyZWFrcG9pbnQgY29tbWFuZHMgcmVmZXIuXG5cbiAgIElmIGEgc2Vjb25kIGFyZ3VtZW50IGlzIHByZXNlbnQsIGl0IGlzIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC5cblxuICAgV2l0aG91dCBhcmd1bWVudCwgbGlzdCBhbGwgYnJlYWtzLCBpbmNsdWRpbmcgZm9yIGVhY2ggYnJlYWtwb2ludCxcbiAgIHRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBicmVha3BvaW50IGhhcyBiZWVuIGhpdCwgdGhlIGN1cnJlbnRcbiAgIGlnbm9yZSBjb3VudCwgYW5kIHRoZSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBpZiBhbnkuXG5cbnRicmVhayBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFRlbXBvcmFyeSBicmVha3BvaW50LCB3aGljaCBpcyByZW1vdmVkIGF1dG9tYXRpY2FsbHkgd2hlbiBpdCBpc1xuICAgZmlyc3QgaGl0LiBUaGUgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyBmb3IgImJyZWFrIi5cblxuY2woZWFyKSBbZmlsZW5hbWU6bGluZW5vIHwgYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIFdpdGggYSAqZmlsZW5hbWU6bGluZW5vKiBhcmd1bWVudCwgY2xlYXIgYWxsIHRoZSBicmVha3BvaW50cyBhdFxuICAgdGhpcyBsaW5lLiBXaXRoIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgYnJlYWtwb2ludCBudW1iZXJzLCBjbGVhclxuICAgdGhvc2UgYnJlYWtwb2ludHMuIFdpdGhvdXQgYXJndW1lbnQsIGNsZWFyIGFsbCBicmVha3MgKGJ1dCBmaXJzdFxuICAgYXNrIGNvbmZpcm1hdGlvbikuXG5cbmRpc2FibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBEaXNhYmxlIHRoZSBicmVha3BvaW50cyBnaXZlbiBhcyBhIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mXG4gICBicmVha3BvaW50IG51bWJlcnMuICBEaXNhYmxpbmcgYSBicmVha3BvaW50IG1lYW5zIGl0IGNhbm5vdCBjYXVzZVxuICAgdGhlIHByb2dyYW0gdG8gc3RvcCBleGVjdXRpb24sIGJ1dCB1bmxpa2UgY2xlYXJpbmcgYSBicmVha3BvaW50LCBpdFxuICAgcmVtYWlucyBpbiB0aGUgbGlzdCBvZiBicmVha3BvaW50cyBhbmQgY2FuIGJlIChyZS0pZW5hYmxlZC5cblxuZW5hYmxlIFticG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgRW5hYmxlIHRoZSBicmVha3BvaW50cyBzcGVjaWZpZWQuXG5cbmlnbm9yZSBicG51bWJlciBbY291bnRdXG5cbiAgIFNldCB0aGUgaWdub3JlIGNvdW50IGZvciB0aGUgZ2l2ZW4gYnJlYWtwb2ludCBudW1iZXIuICBJZiBjb3VudCBpc1xuICAgb21pdHRlZCwgdGhlIGlnbm9yZSBjb3VudCBpcyBzZXQgdG8gMC4gIEEgYnJlYWtwb2ludCBiZWNvbWVzIGFjdGl2ZVxuICAgd2hlbiB0aGUgaWdub3JlIGNvdW50IGlzIHplcm8uICBXaGVuIG5vbi16ZXJvLCB0aGUgY291bnQgaXNcbiAgIGRlY3JlbWVudGVkIGVhY2ggdGltZSB0aGUgYnJlYWtwb2ludCBpcyByZWFjaGVkIGFuZCB0aGUgYnJlYWtwb2ludFxuICAgaXMgbm90IGRpc2FibGVkIGFuZCBhbnkgYXNzb2NpYXRlZCBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUuXG5cbmNvbmRpdGlvbiBicG51bWJlciBbY29uZGl0aW9uXVxuXG4gICBTZXQgYSBuZXcgKmNvbmRpdGlvbiogZm9yIHRoZSBicmVha3BvaW50LCBhbiBleHByZXNzaW9uIHdoaWNoIG11c3RcbiAgIGV2YWx1YXRlIHRvIHRydWUgYmVmb3JlIHRoZSBicmVha3BvaW50IGlzIGhvbm9yZWQuICBJZiAqY29uZGl0aW9uKlxuICAgaXMgYWJzZW50LCBhbnkgZXhpc3RpbmcgY29uZGl0aW9uIGlzIHJlbW92ZWQ7IGkuZS4sIHRoZSBicmVha3BvaW50XG4gICBpcyBtYWRlIHVuY29uZGl0aW9uYWwuXG5cbmNvbW1hbmRzIFticG51bWJlcl1cblxuICAgU3BlY2lmeSBhIGxpc3Qgb2YgY29tbWFuZHMgZm9yIGJyZWFrcG9pbnQgbnVtYmVyICpicG51bWJlciouICBUaGVcbiAgIGNvbW1hbmRzIHRoZW1zZWx2ZXMgYXBwZWFyIG9uIHRoZSBmb2xsb3dpbmcgbGluZXMuICBUeXBlIGEgbGluZVxuICAgY29udGFpbmluZyBqdXN0ICJlbmQiIHRvIHRlcm1pbmF0ZSB0aGUgY29tbWFuZHMuIEFuIGV4YW1wbGU6XG5cbiAgICAgIChQZGIpIGNvbW1hbmRzIDFcbiAgICAgIChjb20pIHByaW50IHNvbWVfdmFyaWFibGVcbiAgICAgIChjb20pIGVuZFxuICAgICAgKFBkYilcblxuICAgVG8gcmVtb3ZlIGFsbCBjb21tYW5kcyBmcm9tIGEgYnJlYWtwb2ludCwgdHlwZSBjb21tYW5kcyBhbmQgZm9sbG93XG4gICBpdCBpbW1lZGlhdGVseSB3aXRoICJlbmQiOyB0aGF0IGlzLCBnaXZlIG5vIGNvbW1hbmRzLlxuXG4gICBXaXRoIG5vICpicG51bWJlciogYXJndW1lbnQsIGNvbW1hbmRzIHJlZmVycyB0byB0aGUgbGFzdCBicmVha3BvaW50XG4gICBzZXQuXG5cbiAgIFlvdSBjYW4gdXNlIGJyZWFrcG9pbnQgY29tbWFuZHMgdG8gc3RhcnQgeW91ciBwcm9ncmFtIHVwIGFnYWluLlxuICAgU2ltcGx5IHVzZSB0aGUgY29udGludWUgY29tbWFuZCwgb3Igc3RlcCwgb3IgYW55IG90aGVyIGNvbW1hbmQgdGhhdFxuICAgcmVzdW1lcyBleGVjdXRpb24uXG5cbiAgIFNwZWNpZnlpbmcgYW55IGNvbW1hbmQgcmVzdW1pbmcgZXhlY3V0aW9uIChjdXJyZW50bHkgY29udGludWUsXG4gICBzdGVwLCBuZXh0LCByZXR1cm4sIGp1bXAsIHF1aXQgYW5kIHRoZWlyIGFiYnJldmlhdGlvbnMpIHRlcm1pbmF0ZXNcbiAgIHRoZSBjb21tYW5kIGxpc3QgKGFzIGlmIHRoYXQgY29tbWFuZCB3YXMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnlcbiAgIGVuZCkuIFRoaXMgaXMgYmVjYXVzZSBhbnkgdGltZSB5b3UgcmVzdW1lIGV4ZWN1dGlvbiAoZXZlbiB3aXRoIGFcbiAgIHNpbXBsZSBuZXh0IG9yIHN0ZXApLCB5b3UgbWF5IGVuY291bnRlciBhbm90aGVyIGJyZWFrcG9pbnQtLXdoaWNoXG4gICBjb3VsZCBoYXZlIGl0cyBvd24gY29tbWFuZCBsaXN0LCBsZWFkaW5nIHRvIGFtYmlndWl0aWVzIGFib3V0IHdoaWNoXG4gICBsaXN0IHRvIGV4ZWN1dGUuXG5cbiAgIElmIHlvdSB1c2UgdGhlIFwnc2lsZW50XCcgY29tbWFuZCBpbiB0aGUgY29tbWFuZCBsaXN0LCB0aGUgdXN1YWxcbiAgIG1lc3NhZ2UgYWJvdXQgc3RvcHBpbmcgYXQgYSBicmVha3BvaW50IGlzIG5vdCBwcmludGVkLiAgVGhpcyBtYXkgYmVcbiAgIGRlc2lyYWJsZSBmb3IgYnJlYWtwb2ludHMgdGhhdCBhcmUgdG8gcHJpbnQgYSBzcGVjaWZpYyBtZXNzYWdlIGFuZFxuICAgdGhlbiBjb250aW51ZS4gIElmIG5vbmUgb2YgdGhlIG90aGVyIGNvbW1hbmRzIHByaW50IGFueXRoaW5nLCB5b3VcbiAgIHNlZSBubyBzaWduIHRoYXQgdGhlIGJyZWFrcG9pbnQgd2FzIHJlYWNoZWQuXG5cbnModGVwKVxuXG4gICBFeGVjdXRlIHRoZSBjdXJyZW50IGxpbmUsIHN0b3AgYXQgdGhlIGZpcnN0IHBvc3NpYmxlIG9jY2FzaW9uXG4gICAoZWl0aGVyIGluIGEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb3Igb24gdGhlIG5leHQgbGluZSBpbiB0aGVcbiAgIGN1cnJlbnQgZnVuY3Rpb24pLlxuXG5uKGV4dClcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBuZXh0IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaXNcbiAgIHJlYWNoZWQgb3IgaXQgcmV0dXJucy4gIChUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuICJuZXh0IiBhbmQgInN0ZXAiXG4gICBpcyB0aGF0ICJzdGVwIiBzdG9wcyBpbnNpZGUgYSBjYWxsZWQgZnVuY3Rpb24sIHdoaWxlICJuZXh0IlxuICAgZXhlY3V0ZXMgY2FsbGVkIGZ1bmN0aW9ucyBhdCAobmVhcmx5KSBmdWxsIHNwZWVkLCBvbmx5IHN0b3BwaW5nIGF0XG4gICB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uLilcblxudW50KGlsKSBbbGluZW5vXVxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IG9uZSBpcyByZWFjaGVkLlxuXG4gICBXaXRoIGEgbGluZSBudW1iZXIsIGNvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCBhIGxpbmUgd2l0aCBhIG51bWJlclxuICAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGF0IGlzIHJlYWNoZWQuICBJbiBib3RoIGNhc2VzLCBhbHNvIHN0b3Agd2hlblxuICAgdGhlIGN1cnJlbnQgZnJhbWUgcmV0dXJucy5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogQWxsb3cgZ2l2aW5nIGFuIGV4cGxpY2l0IGxpbmUgbnVtYmVyLlxuXG5yKGV0dXJuKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24gdW50aWwgdGhlIGN1cnJlbnQgZnVuY3Rpb24gcmV0dXJucy5cblxuYyhvbnQoaW51ZSkpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiwgb25seSBzdG9wIHdoZW4gYSBicmVha3BvaW50IGlzIGVuY291bnRlcmVkLlxuXG5qKHVtcCkgbGluZW5vXG5cbiAgIFNldCB0aGUgbmV4dCBsaW5lIHRoYXQgd2lsbCBiZSBleGVjdXRlZC4gIE9ubHkgYXZhaWxhYmxlIGluIHRoZVxuICAgYm90dG9tLW1vc3QgZnJhbWUuICBUaGlzIGxldHMgeW91IGp1bXAgYmFjayBhbmQgZXhlY3V0ZSBjb2RlIGFnYWluLFxuICAgb3IganVtcCBmb3J3YXJkIHRvIHNraXAgY29kZSB0aGF0IHlvdSBkb25cJ3Qgd2FudCB0byBydW4uXG5cbiAgIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IG5vdCBhbGwganVtcHMgYXJlIGFsbG93ZWQgLS0gZm9yIGluc3RhbmNlXG4gICBpdCBpcyBub3QgcG9zc2libGUgdG8ganVtcCBpbnRvIHRoZSBtaWRkbGUgb2YgYSAiZm9yIiBsb29wIG9yIG91dFxuICAgb2YgYSAiZmluYWxseSIgY2xhdXNlLlxuXG5sKGlzdCkgW2ZpcnN0WywgbGFzdF1dXG5cbiAgIExpc3Qgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZpbGUuICBXaXRob3V0IGFyZ3VtZW50cywgbGlzdCAxMVxuICAgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUgb3IgY29udGludWUgdGhlIHByZXZpb3VzIGxpc3RpbmcuXG4gICBXaXRoICIuIiBhcyBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgdGhlIGN1cnJlbnQgbGluZS4gIFdpdGhcbiAgIG9uZSBhcmd1bWVudCwgbGlzdCAxMSBsaW5lcyBhcm91bmQgYXQgdGhhdCBsaW5lLiAgV2l0aCB0d29cbiAgIGFyZ3VtZW50cywgbGlzdCB0aGUgZ2l2ZW4gcmFuZ2U7IGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgbGVzc1xuICAgdGhhbiB0aGUgZmlyc3QsIGl0IGlzIGludGVycHJldGVkIGFzIGEgY291bnQuXG5cbiAgIFRoZSBjdXJyZW50IGxpbmUgaW4gdGhlIGN1cnJlbnQgZnJhbWUgaXMgaW5kaWNhdGVkIGJ5ICItPiIuICBJZiBhblxuICAgZXhjZXB0aW9uIGlzIGJlaW5nIGRlYnVnZ2VkLCB0aGUgbGluZSB3aGVyZSB0aGUgZXhjZXB0aW9uIHdhc1xuICAgb3JpZ2luYWxseSByYWlzZWQgb3IgcHJvcGFnYXRlZCBpcyBpbmRpY2F0ZWQgYnkgIj4+IiwgaWYgaXQgZGlmZmVyc1xuICAgZnJvbSB0aGUgY3VycmVudCBsaW5lLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSAiPj4iIG1hcmtlci5cblxubGwgfCBsb25nbGlzdFxuXG4gICBMaXN0IGFsbCBzb3VyY2UgY29kZSBmb3IgdGhlIGN1cnJlbnQgZnVuY3Rpb24gb3IgZnJhbWUuXG4gICBJbnRlcmVzdGluZyBsaW5lcyBhcmUgbWFya2VkIGFzIGZvciAibGlzdCIuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxuYShyZ3MpXG5cbiAgIFByaW50IHRoZSBhcmd1bWVudCBsaXN0IG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uLlxuXG5wKHJpbnQpIGV4cHJlc3Npb25cblxuICAgRXZhbHVhdGUgdGhlICpleHByZXNzaW9uKiBpbiB0aGUgY3VycmVudCBjb250ZXh0IGFuZCBwcmludCBpdHNcbiAgIHZhbHVlLlxuXG5wcCBleHByZXNzaW9uXG5cbiAgIExpa2UgdGhlICJwcmludCIgY29tbWFuZCwgZXhjZXB0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpc1xuICAgcHJldHR5LXByaW50ZWQgdXNpbmcgdGhlICJwcHJpbnQiIG1vZHVsZS5cblxud2hhdGlzIGV4cHJlc3Npb25cblxuICAgUHJpbnQgdGhlIHR5cGUgb2YgdGhlICpleHByZXNzaW9uKi5cblxuc291cmNlIGV4cHJlc3Npb25cblxuICAgVHJ5IHRvIGdldCBzb3VyY2UgY29kZSBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgZGlzcGxheSBpdC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEaXNwbGF5IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpZiBpdCBjaGFuZ2VkLCBlYWNoIHRpbWVcbiAgIGV4ZWN1dGlvbiBzdG9wcyBpbiB0aGUgY3VycmVudCBmcmFtZS5cblxuICAgV2l0aG91dCBleHByZXNzaW9uLCBsaXN0IGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxudW5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEbyBub3QgZGlzcGxheSB0aGUgZXhwcmVzc2lvbiBhbnkgbW9yZSBpbiB0aGUgY3VycmVudCBmcmFtZS5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgY2xlYXIgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5pbnRlcmFjdFxuXG4gICBTdGFydCBhbiBpbnRlcmF0aXZlIGludGVycHJldGVyICh1c2luZyB0aGUgImNvZGUiIG1vZHVsZSkgd2hvc2VcbiAgIGdsb2JhbCBuYW1lc3BhY2UgY29udGFpbnMgYWxsIHRoZSAoZ2xvYmFsIGFuZCBsb2NhbCkgbmFtZXMgZm91bmQgaW5cbiAgIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmFsaWFzIFtuYW1lIFtjb21tYW5kXV1cblxuICAgQ3JlYXRlIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZFxuICAgbXVzdCAqbm90KiBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZVxuICAgaW5kaWNhdGVkIGJ5ICIlMSIsICIlMiIsIGFuZCBzbyBvbiwgd2hpbGUgIiUqIiBpcyByZXBsYWNlZCBieSBhbGxcbiAgIHRoZSBwYXJhbWV0ZXJzLiBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUgY3VycmVudCBhbGlhcyBmb3JcbiAgICpuYW1lKiBpcyBzaG93bi4gSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC5cblxuICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5XG4gICB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmVcbiAgIG92ZXJyaWRkZW4gYnkgYWxpYXNlcy4gIFN1Y2ggYSBjb21tYW5kIGlzIHRoZW4gaGlkZGVuIHVudGlsIHRoZVxuICAgYWxpYXMgaXMgcmVtb3ZlZC4gIEFsaWFzaW5nIGlzIHJlY3Vyc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdFxuICAgYWxvbmUuXG5cbiAgIEFzIGFuIGV4YW1wbGUsIGhlcmUgYXJlIHR3byB1c2VmdWwgYWxpYXNlcyAoZXNwZWNpYWxseSB3aGVuIHBsYWNlZFxuICAgaW4gdGhlICIucGRicmMiIGZpbGUpOlxuXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpXG4gICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKVxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZlxuICAgICAgYWxpYXMgcHMgcGkgc2VsZlxuXG51bmFsaWFzIG5hbWVcblxuICAgRGVsZXRlIHRoZSBzcGVjaWZpZWQgYWxpYXMuXG5cbiEgc3RhdGVtZW50XG5cbiAgIEV4ZWN1dGUgdGhlIChvbmUtbGluZSkgKnN0YXRlbWVudCogaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnRcbiAgIHN0YWNrIGZyYW1lLiBUaGUgZXhjbGFtYXRpb24gcG9pbnQgY2FuIGJlIG9taXR0ZWQgdW5sZXNzIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgc3RhdGVtZW50IHJlc2VtYmxlcyBhIGRlYnVnZ2VyIGNvbW1hbmQuICBUbyBzZXQgYVxuICAgZ2xvYmFsIHZhcmlhYmxlLCB5b3UgY2FuIHByZWZpeCB0aGUgYXNzaWdubWVudCBjb21tYW5kIHdpdGggYVxuICAgImdsb2JhbCIgc3RhdGVtZW50IG9uIHRoZSBzYW1lIGxpbmUsIGUuZy46XG5cbiAgICAgIChQZGIpIGdsb2JhbCBsaXN0X29wdGlvbnM7IGxpc3Rfb3B0aW9ucyA9IFtcJy1sXCddXG4gICAgICAoUGRiKVxuXG5ydW4gW2FyZ3MgLi4uXVxucmVzdGFydCBbYXJncyAuLi5dXG5cbiAgIFJlc3RhcnQgdGhlIGRlYnVnZ2VkIFB5dGhvbiBwcm9ncmFtLiAgSWYgYW4gYXJndW1lbnQgaXMgc3VwcGxpZWQsXG4gICBpdCBpcyBzcGxpdCB3aXRoICJzaGxleCIgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3XG4gICAic3lzLmFyZ3YiLiBIaXN0b3J5LCBicmVha3BvaW50cywgYWN0aW9ucyBhbmQgZGVidWdnZXIgb3B0aW9ucyBhcmVcbiAgIHByZXNlcnZlZC4gInJlc3RhcnQiIGlzIGFuIGFsaWFzIGZvciAicnVuIi5cblxucSh1aXQpXG5cbiAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuICBUaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoZXRoZXIgYSBmcmFtZSBpcyBjb25zaWRlcmVkIHRvIG9yaWdpbmF0ZSBpbiBhIGNlcnRhaW4gbW9kdWxlXG4gICAgaXMgZGV0ZXJtaW5lZCBieSB0aGUgIl9fbmFtZV9fIiBpbiB0aGUgZnJhbWUgZ2xvYmFscy5cbicsCi0gJ2RlbCc6ICdcblRoZSAiZGVsIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKipcblxuICAgZGVsX3N0bXQgOjo9ICJkZWwiIHRhcmdldF9saXN0XG5cbkRlbGV0aW9uIGlzIHJlY3Vyc2l2ZWx5IGRlZmluZWQgdmVyeSBzaW1pbGFyIHRvIHRoZSB3YXkgYXNzaWdubWVudCBpc1xuZGVmaW5lZC4gUmF0aGVyIHRoYW4gc3BlbGxpbmcgaXQgb3V0IGluIGZ1bGwgZGV0YWlscywgaGVyZSBhcmUgc29tZVxuaGludHMuXG5cbkRlbGV0aW9uIG9mIGEgdGFyZ2V0IGxpc3QgcmVjdXJzaXZlbHkgZGVsZXRlcyBlYWNoIHRhcmdldCwgZnJvbSBsZWZ0XG50byByaWdodC5cblxuRGVsZXRpb24gb2YgYSBuYW1lIHJlbW92ZXMgdGhlIGJpbmRpbmcgb2YgdGhhdCBuYW1lIGZyb20gdGhlIGxvY2FsIG9yXG5nbG9iYWwgbmFtZXNwYWNlLCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgbmFtZSBvY2N1cnMgaW4gYSAiZ2xvYmFsIlxuc3RhdGVtZW50IGluIHRoZSBzYW1lIGNvZGUgYmxvY2suICBJZiB0aGUgbmFtZSBpcyB1bmJvdW5kLCBhXG4iTmFtZUVycm9yIiBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQuXG5cbkRlbGV0aW9uIG9mIGF0dHJpYnV0ZSByZWZlcmVuY2VzLCBzdWJzY3JpcHRpb25zIGFuZCBzbGljaW5ncyBpcyBwYXNzZWRcbnRvIHRoZSBwcmltYXJ5IG9iamVjdCBpbnZvbHZlZDsgZGVsZXRpb24gb2YgYSBzbGljaW5nIGlzIGluIGdlbmVyYWxcbmVxdWl2YWxlbnQgdG8gYXNzaWdubWVudCBvZiBhbiBlbXB0eSBzbGljZSBvZiB0aGUgcmlnaHQgdHlwZSAoYnV0IGV2ZW5cbnRoaXMgaXMgZGV0ZXJtaW5lZCBieSB0aGUgc2xpY2VkIG9iamVjdCkuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IFByZXZpb3VzbHkgaXQgd2FzIGlsbGVnYWwgdG8gZGVsZXRlIGEgbmFtZVxuZnJvbSB0aGUgbG9jYWwgbmFtZXNwYWNlIGlmIGl0IG9jY3VycyBhcyBhIGZyZWUgdmFyaWFibGUgaW4gYSBuZXN0ZWRcbmJsb2NrLlxuJywKLSAnZGljdCc6ICdcbkRpY3Rpb25hcnkgZGlzcGxheXNcbioqKioqKioqKioqKioqKioqKipcblxuQSBkaWN0aW9uYXJ5IGRpc3BsYXkgaXMgYSBwb3NzaWJseSBlbXB0eSBzZXJpZXMgb2Yga2V5L2RhdHVtIHBhaXJzXG5lbmNsb3NlZCBpbiBjdXJseSBicmFjZXM6XG5cbiAgIGRpY3RfZGlzcGxheSAgICAgICA6Oj0gInsiIFtrZXlfZGF0dW1fbGlzdCB8IGRpY3RfY29tcHJlaGVuc2lvbl0gIn0iXG4gICBrZXlfZGF0dW1fbGlzdCAgICAgOjo9IGtleV9kYXR1bSAoIiwiIGtleV9kYXR1bSkqIFsiLCJdXG4gICBrZXlfZGF0dW0gICAgICAgICAgOjo9IGV4cHJlc3Npb24gIjoiIGV4cHJlc3Npb25cbiAgIGRpY3RfY29tcHJlaGVuc2lvbiA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvbiBjb21wX2ZvclxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSB5aWVsZHMgYSBuZXcgZGljdGlvbmFyeSBvYmplY3QuXG5cbklmIGEgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIG9mIGtleS9kYXR1bSBwYWlycyBpcyBnaXZlbiwgdGhleSBhcmVcbmV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgdG8gZGVmaW5lIHRoZSBlbnRyaWVzIG9mIHRoZSBkaWN0aW9uYXJ5OlxuZWFjaCBrZXkgb2JqZWN0IGlzIHVzZWQgYXMgYSBrZXkgaW50byB0aGUgZGljdGlvbmFyeSB0byBzdG9yZSB0aGVcbmNvcnJlc3BvbmRpbmcgZGF0dW0uICBUaGlzIG1lYW5zIHRoYXQgeW91IGNhbiBzcGVjaWZ5IHRoZSBzYW1lIGtleVxubXVsdGlwbGUgdGltZXMgaW4gdGhlIGtleS9kYXR1bSBsaXN0LCBhbmQgdGhlIGZpbmFsIGRpY3Rpb25hcnlcJ3MgdmFsdWVcbmZvciB0aGF0IGtleSB3aWxsIGJlIHRoZSBsYXN0IG9uZSBnaXZlbi5cblxuQSBkaWN0IGNvbXByZWhlbnNpb24sIGluIGNvbnRyYXN0IHRvIGxpc3QgYW5kIHNldCBjb21wcmVoZW5zaW9ucyxcbm5lZWRzIHR3byBleHByZXNzaW9ucyBzZXBhcmF0ZWQgd2l0aCBhIGNvbG9uIGZvbGxvd2VkIGJ5IHRoZSB1c3VhbFxuImZvciIgYW5kICJpZiIgY2xhdXNlcy4gV2hlbiB0aGUgY29tcHJlaGVuc2lvbiBpcyBydW4sIHRoZSByZXN1bHRpbmdcbmtleSBhbmQgdmFsdWUgZWxlbWVudHMgYXJlIGluc2VydGVkIGluIHRoZSBuZXcgZGljdGlvbmFyeSBpbiB0aGUgb3JkZXJcbnRoZXkgYXJlIHByb2R1Y2VkLlxuXG5SZXN0cmljdGlvbnMgb24gdGhlIHR5cGVzIG9mIHRoZSBrZXkgdmFsdWVzIGFyZSBsaXN0ZWQgZWFybGllciBpblxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Ki4gIChUbyBzdW1tYXJpemUsIHRoZSBrZXkgdHlwZVxuc2hvdWxkIGJlICpoYXNoYWJsZSosIHdoaWNoIGV4Y2x1ZGVzIGFsbCBtdXRhYmxlIG9iamVjdHMuKSAgQ2xhc2hlc1xuYmV0d2VlbiBkdXBsaWNhdGUga2V5cyBhcmUgbm90IGRldGVjdGVkOyB0aGUgbGFzdCBkYXR1bSAodGV4dHVhbGx5XG5yaWdodG1vc3QgaW4gdGhlIGRpc3BsYXkpIHN0b3JlZCBmb3IgYSBnaXZlbiBrZXkgdmFsdWUgcHJldmFpbHMuXG4nLAotICdkeW5hbWljLWZlYXR1cmVzJzogJ1xuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlcmUgUHl0aG9uIHN0YXRlbWVudHMgYXJlIGlsbGVnYWwgd2hlbiB1c2VkXG5pbiBjb25qdW5jdGlvbiB3aXRoIG5lc3RlZCBzY29wZXMgdGhhdCBjb250YWluIGZyZWUgdmFyaWFibGVzLlxuXG5JZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgaW4gYW4gZW5jbG9zaW5nIHNjb3BlLCBpdCBpcyBpbGxlZ2FsIHRvXG5kZWxldGUgdGhlIG5hbWUuICBBbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGF0IGNvbXBpbGUgdGltZS5cblxuSWYgdGhlIHdpbGQgY2FyZCBmb3JtIG9mIGltcG9ydCAtLS0gImltcG9ydCAqIiAtLS0gaXMgdXNlZCBpbiBhXG5mdW5jdGlvbiBhbmQgdGhlIGZ1bmN0aW9uIGNvbnRhaW5zIG9yIGlzIGEgbmVzdGVkIGJsb2NrIHdpdGggZnJlZVxudmFyaWFibGVzLCB0aGUgY29tcGlsZXIgd2lsbCByYWlzZSBhICJTeW50YXhFcnJvciIuXG5cblRoZSAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgImV4ZWMoKSIgYW5kICJldmFsKCkiIGZ1bmN0aW9ucyBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xub3ZlcnJpZGUgdGhlIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlLiAgSWYgb25seSBvbmUgbmFtZXNwYWNlIGlzXG5zcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG4nLAotICdlbHNlJzogJ1xuVGhlICJpZiIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKipcblxuVGhlICJpZiIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgImlmIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuJywKLSAnZXhjZXB0aW9ucyc6ICdcbkV4Y2VwdGlvbnNcbioqKioqKioqKipcblxuRXhjZXB0aW9ucyBhcmUgYSBtZWFucyBvZiBicmVha2luZyBvdXQgb2YgdGhlIG5vcm1hbCBmbG93IG9mIGNvbnRyb2xcbm9mIGEgY29kZSBibG9jayBpbiBvcmRlciB0byBoYW5kbGUgZXJyb3JzIG9yIG90aGVyIGV4Y2VwdGlvbmFsXG5jb25kaXRpb25zLiAgQW4gZXhjZXB0aW9uIGlzICpyYWlzZWQqIGF0IHRoZSBwb2ludCB3aGVyZSB0aGUgZXJyb3IgaXNcbmRldGVjdGVkOyBpdCBtYXkgYmUgKmhhbmRsZWQqIGJ5IHRoZSBzdXJyb3VuZGluZyBjb2RlIGJsb2NrIG9yIGJ5IGFueVxuY29kZSBibG9jayB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW52b2tlZCB0aGUgY29kZSBibG9jayB3aGVyZVxudGhlIGVycm9yIG9jY3VycmVkLlxuXG5UaGUgUHl0aG9uIGludGVycHJldGVyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBpdCBkZXRlY3RzIGEgcnVuLXRpbWVcbmVycm9yIChzdWNoIGFzIGRpdmlzaW9uIGJ5IHplcm8pLiAgQSBQeXRob24gcHJvZ3JhbSBjYW4gYWxzb1xuZXhwbGljaXRseSByYWlzZSBhbiBleGNlcHRpb24gd2l0aCB0aGUgInJhaXNlIiBzdGF0ZW1lbnQuIEV4Y2VwdGlvblxuaGFuZGxlcnMgYXJlIHNwZWNpZmllZCB3aXRoIHRoZSAidHJ5IiAuLi4gImV4Y2VwdCIgc3RhdGVtZW50LiAgVGhlXG4iZmluYWxseSIgY2xhdXNlIG9mIHN1Y2ggYSBzdGF0ZW1lbnQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSBjbGVhbnVwXG5jb2RlIHdoaWNoIGRvZXMgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLCBidXQgaXMgZXhlY3V0ZWQgd2hldGhlciBhblxuZXhjZXB0aW9uIG9jY3VycmVkIG9yIG5vdCBpbiB0aGUgcHJlY2VkaW5nIGNvZGUuXG5cblB5dGhvbiB1c2VzIHRoZSAidGVybWluYXRpb24iIG1vZGVsIG9mIGVycm9yIGhhbmRsaW5nOiBhbiBleGNlcHRpb25cbmhhbmRsZXIgY2FuIGZpbmQgb3V0IHdoYXQgaGFwcGVuZWQgYW5kIGNvbnRpbnVlIGV4ZWN1dGlvbiBhdCBhbiBvdXRlclxubGV2ZWwsIGJ1dCBpdCBjYW5ub3QgcmVwYWlyIHRoZSBjYXVzZSBvZiB0aGUgZXJyb3IgYW5kIHJldHJ5IHRoZVxuZmFpbGluZyBvcGVyYXRpb24gKGV4Y2VwdCBieSByZS1lbnRlcmluZyB0aGUgb2ZmZW5kaW5nIHBpZWNlIG9mIGNvZGVcbmZyb20gdGhlIHRvcCkuXG5cbldoZW4gYW4gZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkIGF0IGFsbCwgdGhlIGludGVycHJldGVyIHRlcm1pbmF0ZXNcbmV4ZWN1dGlvbiBvZiB0aGUgcHJvZ3JhbSwgb3IgcmV0dXJucyB0byBpdHMgaW50ZXJhY3RpdmUgbWFpbiBsb29wLiAgSW5cbmVpdGhlciBjYXNlLCBpdCBwcmludHMgYSBzdGFjayBiYWNrdHJhY2UsIGV4Y2VwdCB3aGVuIHRoZSBleGNlcHRpb24gaXNcbiJTeXN0ZW1FeGl0Ii5cblxuRXhjZXB0aW9ucyBhcmUgaWRlbnRpZmllZCBieSBjbGFzcyBpbnN0YW5jZXMuICBUaGUgImV4Y2VwdCIgY2xhdXNlIGlzXG5zZWxlY3RlZCBkZXBlbmRpbmcgb24gdGhlIGNsYXNzIG9mIHRoZSBpbnN0YW5jZTogaXQgbXVzdCByZWZlcmVuY2UgdGhlXG5jbGFzcyBvZiB0aGUgaW5zdGFuY2Ugb3IgYSBiYXNlIGNsYXNzIHRoZXJlb2YuICBUaGUgaW5zdGFuY2UgY2FuIGJlXG5yZWNlaXZlZCBieSB0aGUgaGFuZGxlciBhbmQgY2FuIGNhcnJ5IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlXG5leGNlcHRpb25hbCBjb25kaXRpb24uXG5cbk5vdGU6IEV4Y2VwdGlvbiBtZXNzYWdlcyBhcmUgbm90IHBhcnQgb2YgdGhlIFB5dGhvbiBBUEkuICBUaGVpclxuICBjb250ZW50cyBtYXkgY2hhbmdlIGZyb20gb25lIHZlcnNpb24gb2YgUHl0aG9uIHRvIHRoZSBuZXh0IHdpdGhvdXRcbiAgd2FybmluZyBhbmQgc2hvdWxkIG5vdCBiZSByZWxpZWQgb24gYnkgY29kZSB3aGljaCB3aWxsIHJ1biB1bmRlclxuICBtdWx0aXBsZSB2ZXJzaW9ucyBvZiB0aGUgaW50ZXJwcmV0ZXIuXG5cblNlZSBhbHNvIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgInRyeSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSB0cnlcbnN0YXRlbWVudCogYW5kICJyYWlzZSIgc3RhdGVtZW50IGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFRoaXMgbGltaXRhdGlvbiBvY2N1cnMgYmVjYXVzZSB0aGUgY29kZSB0aGF0IGlzIGV4ZWN1dGVkIGJ5XG4gICAgdGhlc2Ugb3BlcmF0aW9ucyBpcyBub3QgYXZhaWxhYmxlIGF0IHRoZSB0aW1lIHRoZSBtb2R1bGUgaXNcbiAgICBjb21waWxlZC5cbicsCi0gJ2V4ZWNtb2RlbCc6ICdcbkV4ZWN1dGlvbiBtb2RlbFxuKioqKioqKioqKioqKioqXG5cblxuTmFtaW5nIGFuZCBiaW5kaW5nXG49PT09PT09PT09PT09PT09PT1cblxuKk5hbWVzKiByZWZlciB0byBvYmplY3RzLiAgTmFtZXMgYXJlIGludHJvZHVjZWQgYnkgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLiBFYWNoIG9jY3VycmVuY2Ugb2YgYSBuYW1lIGluIHRoZSBwcm9ncmFtIHRleHQgcmVmZXJzIHRvXG50aGUgKmJpbmRpbmcqIG9mIHRoYXQgbmFtZSBlc3RhYmxpc2hlZCBpbiB0aGUgaW5uZXJtb3N0IGZ1bmN0aW9uIGJsb2NrXG5jb250YWluaW5nIHRoZSB1c2UuXG5cbkEgKmJsb2NrKiBpcyBhIHBpZWNlIG9mIFB5dGhvbiBwcm9ncmFtIHRleHQgdGhhdCBpcyBleGVjdXRlZCBhcyBhXG51bml0LiBUaGUgZm9sbG93aW5nIGFyZSBibG9ja3M6IGEgbW9kdWxlLCBhIGZ1bmN0aW9uIGJvZHksIGFuZCBhIGNsYXNzXG5kZWZpbml0aW9uLiBFYWNoIGNvbW1hbmQgdHlwZWQgaW50ZXJhY3RpdmVseSBpcyBhIGJsb2NrLiAgQSBzY3JpcHRcbmZpbGUgKGEgZmlsZSBnaXZlbiBhcyBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW50ZXJwcmV0ZXIgb3Igc3BlY2lmaWVkXG5vbiB0aGUgaW50ZXJwcmV0ZXIgY29tbWFuZCBsaW5lIHRoZSBmaXJzdCBhcmd1bWVudCkgaXMgYSBjb2RlIGJsb2NrLlxuQSBzY3JpcHQgY29tbWFuZCAoYSBjb21tYW5kIHNwZWNpZmllZCBvbiB0aGUgaW50ZXJwcmV0ZXIgY29tbWFuZCBsaW5lXG53aXRoIHRoZSBcJyoqLWMqKlwnIG9wdGlvbikgaXMgYSBjb2RlIGJsb2NrLiAgVGhlIHN0cmluZyBhcmd1bWVudCBwYXNzZWRcbnRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImV2YWwoKSIgYW5kICJleGVjKCkiIGlzIGEgY29kZSBibG9jay5cblxuQSBjb2RlIGJsb2NrIGlzIGV4ZWN1dGVkIGluIGFuICpleGVjdXRpb24gZnJhbWUqLiAgQSBmcmFtZSBjb250YWluc1xuc29tZSBhZG1pbmlzdHJhdGl2ZSBpbmZvcm1hdGlvbiAodXNlZCBmb3IgZGVidWdnaW5nKSBhbmQgZGV0ZXJtaW5lc1xud2hlcmUgYW5kIGhvdyBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSBjb2RlIGJsb2NrXCdzIGV4ZWN1dGlvbiBoYXNcbmNvbXBsZXRlZC5cblxuQSAqc2NvcGUqIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbFxudmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZVxuZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2Nrc1xuY29udGFpbmVkIHdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlc1xuYSBkaWZmZXJlbnQgYmluZGluZyBmb3IgdGhlIG5hbWUuICBUaGUgc2NvcGUgb2YgbmFtZXMgZGVmaW5lZCBpbiBhXG5jbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzcyBibG9jazsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvIHRoZVxuY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLSB0aGlzIGluY2x1ZGVzIGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3JcbmV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgZnVuY3Rpb24gc2NvcGUuICBUaGlzXG5tZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgd2lsbCBmYWlsOlxuXG4gICBjbGFzcyBBOlxuICAgICAgIGEgPSA0MlxuICAgICAgIGIgPSBsaXN0KGEgKyBpIGZvciBpIGluIHJhbmdlKDEwKSlcblxuV2hlbiBhIG5hbWUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2ssIGl0IGlzIHJlc29sdmVkIHVzaW5nIHRoZSBuZWFyZXN0XG5lbmNsb3Npbmcgc2NvcGUuICBUaGUgc2V0IG9mIGFsbCBzdWNoIHNjb3BlcyB2aXNpYmxlIHRvIGEgY29kZSBibG9ja1xuaXMgY2FsbGVkIHRoZSBibG9ja1wncyAqZW52aXJvbm1lbnQqLlxuXG5JZiBhIG5hbWUgaXMgYm91bmQgaW4gYSBibG9jaywgaXQgaXMgYSBsb2NhbCB2YXJpYWJsZSBvZiB0aGF0IGJsb2NrLFxudW5sZXNzIGRlY2xhcmVkIGFzICJub25sb2NhbCIuICBJZiBhIG5hbWUgaXMgYm91bmQgYXQgdGhlIG1vZHVsZVxubGV2ZWwsIGl0IGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiAgKFRoZSB2YXJpYWJsZXMgb2YgdGhlIG1vZHVsZSBjb2RlXG5ibG9jayBhcmUgbG9jYWwgYW5kIGdsb2JhbC4pICBJZiBhIHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrXG5idXQgbm90IGRlZmluZWQgdGhlcmUsIGl0IGlzIGEgKmZyZWUgdmFyaWFibGUqLlxuXG5XaGVuIGEgbmFtZSBpcyBub3QgZm91bmQgYXQgYWxsLCBhICJOYW1lRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG5JZiB0aGUgbmFtZSByZWZlcnMgdG8gYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGhhcyBub3QgYmVlbiBib3VuZCwgYVxuIlVuYm91bmRMb2NhbEVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLiAgIlVuYm91bmRMb2NhbEVycm9yIiBpcyBhXG5zdWJjbGFzcyBvZiAiTmFtZUVycm9yIi5cblxuVGhlIGZvbGxvd2luZyBjb25zdHJ1Y3RzIGJpbmQgbmFtZXM6IGZvcm1hbCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9ucyxcbiJpbXBvcnQiIHN0YXRlbWVudHMsIGNsYXNzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyAodGhlc2UgYmluZCB0aGVcbmNsYXNzIG9yIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGRlZmluaW5nIGJsb2NrKSwgYW5kIHRhcmdldHMgdGhhdCBhcmVcbmlkZW50aWZpZXJzIGlmIG9jY3VycmluZyBpbiBhbiBhc3NpZ25tZW50LCAiZm9yIiBsb29wIGhlYWRlciwgb3IgYWZ0ZXJcbiJhcyIgaW4gYSAid2l0aCIgc3RhdGVtZW50IG9yICJleGNlcHQiIGNsYXVzZS4gVGhlICJpbXBvcnQiIHN0YXRlbWVudFxub2YgdGhlIGZvcm0gImZyb20gLi4uIGltcG9ydCAqIiBiaW5kcyBhbGwgbmFtZXMgZGVmaW5lZCBpbiB0aGVcbmltcG9ydGVkIG1vZHVsZSwgZXhjZXB0IHRob3NlIGJlZ2lubmluZyB3aXRoIGFuIHVuZGVyc2NvcmUuICBUaGlzIGZvcm1cbm1heSBvbmx5IGJlIHVzZWQgYXQgdGhlIG1vZHVsZSBsZXZlbC5cblxuQSB0YXJnZXQgb2NjdXJyaW5nIGluIGEgImRlbCIgc3RhdGVtZW50IGlzIGFsc28gY29uc2lkZXJlZCBib3VuZCBmb3JcbnRoaXMgcHVycG9zZSAodGhvdWdoIHRoZSBhY3R1YWwgc2VtYW50aWNzIGFyZSB0byB1bmJpbmQgdGhlIG5hbWUpLlxuXG5FYWNoIGFzc2lnbm1lbnQgb3IgaW1wb3J0IHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2sgZGVmaW5lZCBieSBhXG5jbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGF0IHRoZSBtb2R1bGUgbGV2ZWwgKHRoZSB0b3AtbGV2ZWxcbmNvZGUgYmxvY2spLlxuXG5JZiBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24gb2NjdXJzIGFueXdoZXJlIHdpdGhpbiBhIGNvZGUgYmxvY2ssIGFsbFxudXNlcyBvZiB0aGUgbmFtZSB3aXRoaW4gdGhlIGJsb2NrIGFyZSB0cmVhdGVkIGFzIHJlZmVyZW5jZXMgdG8gdGhlXG5jdXJyZW50IGJsb2NrLiAgVGhpcyBjYW4gbGVhZCB0byBlcnJvcnMgd2hlbiBhIG5hbWUgaXMgdXNlZCB3aXRoaW4gYVxuYmxvY2sgYmVmb3JlIGl0IGlzIGJvdW5kLiAgVGhpcyBydWxlIGlzIHN1YnRsZS4gIFB5dGhvbiBsYWNrc1xuZGVjbGFyYXRpb25zIGFuZCBhbGxvd3MgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbnMgdG8gb2NjdXIgYW55d2hlcmVcbndpdGhpbiBhIGNvZGUgYmxvY2suICBUaGUgbG9jYWwgdmFyaWFibGVzIG9mIGEgY29kZSBibG9jayBjYW4gYmVcbmRldGVybWluZWQgYnkgc2Nhbm5pbmcgdGhlIGVudGlyZSB0ZXh0IG9mIHRoZSBibG9jayBmb3IgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLlxuXG5JZiB0aGUgImdsb2JhbCIgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jaywgYWxsIHVzZXMgb2YgdGhlIG5hbWVcbnNwZWNpZmllZCBpbiB0aGUgc3RhdGVtZW50IHJlZmVyIHRvIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBpbiB0aGVcbnRvcC1sZXZlbCBuYW1lc3BhY2UuICBOYW1lcyBhcmUgcmVzb2x2ZWQgaW4gdGhlIHRvcC1sZXZlbCBuYW1lc3BhY2UgYnlcbnNlYXJjaGluZyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgaS5lLiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGVcbmNvbnRhaW5pbmcgdGhlIGNvZGUgYmxvY2ssIGFuZCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlLCB0aGUgbmFtZXNwYWNlXG5vZiB0aGUgbW9kdWxlICJidWlsdGlucyIuICBUaGUgZ2xvYmFsIG5hbWVzcGFjZSBpcyBzZWFyY2hlZCBmaXJzdC4gIElmXG50aGUgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBidWlsdGlucyBuYW1lc3BhY2UgaXMgc2VhcmNoZWQuICBUaGVcbmdsb2JhbCBzdGF0ZW1lbnQgbXVzdCBwcmVjZWRlIGFsbCB1c2VzIG9mIHRoZSBuYW1lLlxuXG5UaGUgYnVpbHRpbnMgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhlY3V0aW9uIG9mIGEgY29kZSBibG9ja1xuaXMgYWN0dWFsbHkgZm91bmQgYnkgbG9va2luZyB1cCB0aGUgbmFtZSAiX19idWlsdGluc19fIiBpbiBpdHMgZ2xvYmFsXG5uYW1lc3BhY2U7IHRoaXMgc2hvdWxkIGJlIGEgZGljdGlvbmFyeSBvciBhIG1vZHVsZSAoaW4gdGhlIGxhdHRlciBjYXNlXG50aGUgbW9kdWxlXCdzIGRpY3Rpb25hcnkgaXMgdXNlZCkuICBCeSBkZWZhdWx0LCB3aGVuIGluIHRoZSAiX19tYWluX18iXG5tb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIHRoZSBidWlsdC1pbiBtb2R1bGUgImJ1aWx0aW5zIjsgd2hlbiBpbiBhbnlcbm90aGVyIG1vZHVsZSwgIl9fYnVpbHRpbnNfXyIgaXMgYW4gYWxpYXMgZm9yIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZVxuImJ1aWx0aW5zIiBtb2R1bGUgaXRzZWxmLiAgIl9fYnVpbHRpbnNfXyIgY2FuIGJlIHNldCB0byBhIHVzZXItY3JlYXRlZFxuZGljdGlvbmFyeSB0byBjcmVhdGUgYSB3ZWFrIGZvcm0gb2YgcmVzdHJpY3RlZCBleGVjdXRpb24uXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVXNlcnMgc2hvdWxkIG5vdCB0b3VjaFxuIl9fYnVpbHRpbnNfXyI7IGl0IGlzIHN0cmljdGx5IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gIFVzZXJzXG53YW50aW5nIHRvIG92ZXJyaWRlIHZhbHVlcyBpbiB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIHNob3VsZCAiaW1wb3J0IlxudGhlICJidWlsdGlucyIgbW9kdWxlIGFuZCBtb2RpZnkgaXRzIGF0dHJpYnV0ZXMgYXBwcm9wcmlhdGVseS5cblxuVGhlIG5hbWVzcGFjZSBmb3IgYSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHRoZSBmaXJzdCB0aW1lIGFcbm1vZHVsZSBpcyBpbXBvcnRlZC4gIFRoZSBtYWluIG1vZHVsZSBmb3IgYSBzY3JpcHQgaXMgYWx3YXlzIGNhbGxlZFxuIl9fbWFpbl9fIi5cblxuVGhlICJnbG9iYWwiIHN0YXRlbWVudCBoYXMgdGhlIHNhbWUgc2NvcGUgYXMgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uXG5pbiB0aGUgc2FtZSBibG9jay4gIElmIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZSBmb3IgYSBmcmVlIHZhcmlhYmxlXG5jb250YWlucyBhIGdsb2JhbCBzdGF0ZW1lbnQsIHRoZSBmcmVlIHZhcmlhYmxlIGlzIHRyZWF0ZWQgYXMgYSBnbG9iYWwuXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudCB0aGF0IG1heSB1c2UgYW5kIGRlZmluZVxubmFtZXMuIFRoZXNlIHJlZmVyZW5jZXMgZm9sbG93IHRoZSBub3JtYWwgcnVsZXMgZm9yIG5hbWUgcmVzb2x1dGlvbi5cblRoZSBuYW1lc3BhY2Ugb2YgdGhlIGNsYXNzIGRlZmluaXRpb24gYmVjb21lcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnlcbm9mIHRoZSBjbGFzcy4gIE5hbWVzIGRlZmluZWQgYXQgdGhlIGNsYXNzIHNjb3BlIGFyZSBub3QgdmlzaWJsZSBpblxubWV0aG9kcy5cblxuXG5JbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVyZSBQeXRob24gc3RhdGVtZW50cyBhcmUgaWxsZWdhbCB3aGVuIHVzZWRcbmluIGNvbmp1bmN0aW9uIHdpdGggbmVzdGVkIHNjb3BlcyB0aGF0IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMuXG5cbklmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBpbiBhbiBlbmNsb3Npbmcgc2NvcGUsIGl0IGlzIGlsbGVnYWwgdG9cbmRlbGV0ZSB0aGUgbmFtZS4gIEFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXQgY29tcGlsZSB0aW1lLlxuXG5JZiB0aGUgd2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSAiaW1wb3J0ICoiIC0tLSBpcyB1c2VkIGluIGFcbmZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY29udGFpbnMgb3IgaXMgYSBuZXN0ZWQgYmxvY2sgd2l0aCBmcmVlXG52YXJpYWJsZXMsIHRoZSBjb21waWxlciB3aWxsIHJhaXNlIGEgIlN5bnRheEVycm9yIi5cblxuVGhlICJldmFsKCkiIGFuZCAiZXhlYygpIiBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsXG5lbnZpcm9ubWVudCBmb3IgcmVzb2x2aW5nIG5hbWVzLiAgTmFtZXMgbWF5IGJlIHJlc29sdmVkIGluIHRoZSBsb2NhbFxuYW5kIGdsb2JhbCBuYW1lc3BhY2VzIG9mIHRoZSBjYWxsZXIuICBGcmVlIHZhcmlhYmxlcyBhcmUgbm90IHJlc29sdmVkXG5pbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbmFtZXNwYWNlLCBidXQgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBbMV1cblRoZSAiZXhlYygpIiBhbmQgImV2YWwoKSIgZnVuY3Rpb25zIGhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG5vdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuICBJZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXNcbnNwZWNpZmllZCwgaXQgaXMgdXNlZCBmb3IgYm90aC5cblxuXG5FeGNlcHRpb25zXG49PT09PT09PT09XG5cbkV4Y2VwdGlvbnMgYXJlIGEgbWVhbnMgb2YgYnJlYWtpbmcgb3V0IG9mIHRoZSBub3JtYWwgZmxvdyBvZiBjb250cm9sXG5vZiBhIGNvZGUgYmxvY2sgaW4gb3JkZXIgdG8gaGFuZGxlIGVycm9ycyBvciBvdGhlciBleGNlcHRpb25hbFxuY29uZGl0aW9ucy4gIEFuIGV4Y2VwdGlvbiBpcyAqcmFpc2VkKiBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGVycm9yIGlzXG5kZXRlY3RlZDsgaXQgbWF5IGJlICpoYW5kbGVkKiBieSB0aGUgc3Vycm91bmRpbmcgY29kZSBibG9jayBvciBieSBhbnlcbmNvZGUgYmxvY2sgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGludm9rZWQgdGhlIGNvZGUgYmxvY2sgd2hlcmVcbnRoZSBlcnJvciBvY2N1cnJlZC5cblxuVGhlIFB5dGhvbiBpbnRlcnByZXRlciByYWlzZXMgYW4gZXhjZXB0aW9uIHdoZW4gaXQgZGV0ZWN0cyBhIHJ1bi10aW1lXG5lcnJvciAoc3VjaCBhcyBkaXZpc2lvbiBieSB6ZXJvKS4gIEEgUHl0aG9uIHByb2dyYW0gY2FuIGFsc29cbmV4cGxpY2l0bHkgcmFpc2UgYW4gZXhjZXB0aW9uIHdpdGggdGhlICJyYWlzZSIgc3RhdGVtZW50LiBFeGNlcHRpb25cbmhhbmRsZXJzIGFyZSBzcGVjaWZpZWQgd2l0aCB0aGUgInRyeSIgLi4uICJleGNlcHQiIHN0YXRlbWVudC4gIFRoZVxuImZpbmFsbHkiIGNsYXVzZSBvZiBzdWNoIGEgc3RhdGVtZW50IGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgY2xlYW51cFxuY29kZSB3aGljaCBkb2VzIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbiwgYnV0IGlzIGV4ZWN1dGVkIHdoZXRoZXIgYW5cbmV4Y2VwdGlvbiBvY2N1cnJlZCBvciBub3QgaW4gdGhlIHByZWNlZGluZyBjb2RlLlxuXG5QeXRob24gdXNlcyB0aGUgInRlcm1pbmF0aW9uIiBtb2RlbCBvZiBlcnJvciBoYW5kbGluZzogYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNhbiBmaW5kIG91dCB3aGF0IGhhcHBlbmVkIGFuZCBjb250aW51ZSBleGVjdXRpb24gYXQgYW4gb3V0ZXJcbmxldmVsLCBidXQgaXQgY2Fubm90IHJlcGFpciB0aGUgY2F1c2Ugb2YgdGhlIGVycm9yIGFuZCByZXRyeSB0aGVcbmZhaWxpbmcgb3BlcmF0aW9uIChleGNlcHQgYnkgcmUtZW50ZXJpbmcgdGhlIG9mZmVuZGluZyBwaWVjZSBvZiBjb2RlXG5mcm9tIHRoZSB0b3ApLlxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCBhdCBhbGwsIHRoZSBpbnRlcnByZXRlciB0ZXJtaW5hdGVzXG5leGVjdXRpb24gb2YgdGhlIHByb2dyYW0sIG9yIHJldHVybnMgdG8gaXRzIGludGVyYWN0aXZlIG1haW4gbG9vcC4gIEluXG5laXRoZXIgY2FzZSwgaXQgcHJpbnRzIGEgc3RhY2sgYmFja3RyYWNlLCBleGNlcHQgd2hlbiB0aGUgZXhjZXB0aW9uIGlzXG4iU3lzdGVtRXhpdCIuXG5cbkV4Y2VwdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgY2xhc3MgaW5zdGFuY2VzLiAgVGhlICJleGNlcHQiIGNsYXVzZSBpc1xuc2VsZWN0ZWQgZGVwZW5kaW5nIG9uIHRoZSBjbGFzcyBvZiB0aGUgaW5zdGFuY2U6IGl0IG11c3QgcmVmZXJlbmNlIHRoZVxuY2xhc3Mgb2YgdGhlIGluc3RhbmNlIG9yIGEgYmFzZSBjbGFzcyB0aGVyZW9mLiAgVGhlIGluc3RhbmNlIGNhbiBiZVxucmVjZWl2ZWQgYnkgdGhlIGhhbmRsZXIgYW5kIGNhbiBjYXJyeSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZVxuZXhjZXB0aW9uYWwgY29uZGl0aW9uLlxuXG5Ob3RlOiBFeGNlcHRpb24gbWVzc2FnZXMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBQeXRob24gQVBJLiAgVGhlaXJcbiAgY29udGVudHMgbWF5IGNoYW5nZSBmcm9tIG9uZSB2ZXJzaW9uIG9mIFB5dGhvbiB0byB0aGUgbmV4dCB3aXRob3V0XG4gIHdhcm5pbmcgYW5kIHNob3VsZCBub3QgYmUgcmVsaWVkIG9uIGJ5IGNvZGUgd2hpY2ggd2lsbCBydW4gdW5kZXJcbiAgbXVsdGlwbGUgdmVyc2lvbnMgb2YgdGhlIGludGVycHJldGVyLlxuXG5TZWUgYWxzbyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlICJ0cnkiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgdHJ5XG5zdGF0ZW1lbnQqIGFuZCAicmFpc2UiIHN0YXRlbWVudCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBUaGlzIGxpbWl0YXRpb24gb2NjdXJzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBpcyBleGVjdXRlZCBieVxuICAgIHRoZXNlIG9wZXJhdGlvbnMgaXMgbm90IGF2YWlsYWJsZSBhdCB0aGUgdGltZSB0aGUgbW9kdWxlIGlzXG4gICAgY29tcGlsZWQuXG4nLAotICdleHBybGlzdHMnOiAnXG5FeHByZXNzaW9uIGxpc3RzXG4qKioqKioqKioqKioqKioqXG5cbiAgIGV4cHJlc3Npb25fbGlzdCA6Oj0gZXhwcmVzc2lvbiAoICIsIiBleHByZXNzaW9uICkqIFsiLCJdXG5cbkFuIGV4cHJlc3Npb24gbGlzdCBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBjb21tYSB5aWVsZHMgYSB0dXBsZS4gIFRoZVxubGVuZ3RoIG9mIHRoZSB0dXBsZSBpcyB0aGUgbnVtYmVyIG9mIGV4cHJlc3Npb25zIGluIHRoZSBsaXN0LiAgVGhlXG5leHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodC5cblxuVGhlIHRyYWlsaW5nIGNvbW1hIGlzIHJlcXVpcmVkIG9ubHkgdG8gY3JlYXRlIGEgc2luZ2xlIHR1cGxlIChhLmsuYS4gYVxuKnNpbmdsZXRvbiopOyBpdCBpcyBvcHRpb25hbCBpbiBhbGwgb3RoZXIgY2FzZXMuICBBIHNpbmdsZSBleHByZXNzaW9uXG53aXRob3V0IGEgdHJhaWxpbmcgY29tbWEgZG9lc25cJ3QgY3JlYXRlIGEgdHVwbGUsIGJ1dCByYXRoZXIgeWllbGRzIHRoZVxudmFsdWUgb2YgdGhhdCBleHByZXNzaW9uLiAoVG8gY3JlYXRlIGFuIGVtcHR5IHR1cGxlLCB1c2UgYW4gZW1wdHkgcGFpclxub2YgcGFyZW50aGVzZXM6ICIoKSIuKVxuJywKLSAnZmxvYXRpbmcnOiAnXG5GbG9hdGluZyBwb2ludCBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWxcbmRlZmluaXRpb25zOlxuXG4gICBmbG9hdG51bWJlciAgIDo6PSBwb2ludGZsb2F0IHwgZXhwb25lbnRmbG9hdFxuICAgcG9pbnRmbG9hdCAgICA6Oj0gW2ludHBhcnRdIGZyYWN0aW9uIHwgaW50cGFydCAiLiJcbiAgIGV4cG9uZW50ZmxvYXQgOjo9IChpbnRwYXJ0IHwgcG9pbnRmbG9hdCkgZXhwb25lbnRcbiAgIGludHBhcnQgICAgICAgOjo9IGRpZ2l0K1xuICAgZnJhY3Rpb24gICAgICA6Oj0gIi4iIGRpZ2l0K1xuICAgZXhwb25lbnQgICAgICA6Oj0gKCJlIiB8ICJFIikgWyIrIiB8ICItIl0gZGlnaXQrXG5cbk5vdGUgdGhhdCB0aGUgaW50ZWdlciBhbmQgZXhwb25lbnQgcGFydHMgYXJlIGFsd2F5cyBpbnRlcnByZXRlZCB1c2luZ1xucmFkaXggMTAuIEZvciBleGFtcGxlLCAiMDc3ZTAxMCIgaXMgbGVnYWwsIGFuZCBkZW5vdGVzIHRoZSBzYW1lIG51bWJlclxuYXMgIjc3ZTEwIi4gVGhlIGFsbG93ZWQgcmFuZ2Ugb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgaXNcbmltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4gU29tZSBleGFtcGxlcyBvZiBmbG9hdGluZyBwb2ludCBsaXRlcmFsczpcblxuICAgMy4xNCAgICAxMC4gICAgLjAwMSAgICAxZTEwMCAgICAzLjE0ZS0xMCAgICAwZTBcblxuTm90ZSB0aGF0IG51bWVyaWMgbGl0ZXJhbHMgZG8gbm90IGluY2x1ZGUgYSBzaWduOyBhIHBocmFzZSBsaWtlICItMSJcbmlzIGFjdHVhbGx5IGFuIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yICItIiBhbmQgdGhlXG5saXRlcmFsICIxIi5cbicsCi0gJ2Zvcic6ICdcblRoZSAiZm9yIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKipcblxuVGhlICJmb3IiIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZVxuKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG4iZXhwcmVzc2lvbl9saXN0Ii4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgb2YgYXNjZW5kaW5nIGluZGljZXMuICBFYWNoXG5pdGVtIGluIHR1cm4gaXMgYXNzaWduZWQgdG8gdGhlIHRhcmdldCBsaXN0IHVzaW5nIHRoZSBzdGFuZGFyZCBydWxlc1xuZm9yIGFzc2lnbm1lbnRzIChzZWUgKkFzc2lnbm1lbnQgc3RhdGVtZW50cyopLCBhbmQgdGhlbiB0aGUgc3VpdGUgaXNcbmV4ZWN1dGVkLiAgV2hlbiB0aGUgaXRlbXMgYXJlIGV4aGF1c3RlZCAod2hpY2ggaXMgaW1tZWRpYXRlbHkgd2hlbiB0aGVcbnNlcXVlbmNlIGlzIGVtcHR5IG9yIGFuIGl0ZXJhdG9yIHJhaXNlcyBhICJTdG9wSXRlcmF0aW9uIiBleGNlcHRpb24pLFxudGhlIHN1aXRlIGluIHRoZSAiZWxzZSIgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZCwgYW5kIHRoZSBsb29wXG50ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGNvbnRpbnVlc1xud2l0aCB0aGUgbmV4dCBpdGVtLCBvciB3aXRoIHRoZSAiZWxzZSIgY2xhdXNlIGlmIHRoZXJlIHdhcyBubyBuZXh0XG5pdGVtLlxuXG5UaGUgc3VpdGUgbWF5IGFzc2lnbiB0byB0aGUgdmFyaWFibGUocykgaW4gdGhlIHRhcmdldCBsaXN0OyB0aGlzIGRvZXNcbm5vdCBhZmZlY3QgdGhlIG5leHQgaXRlbSBhc3NpZ25lZCB0byBpdC5cblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgaXQgd2lsbCBub3QgaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGF0IGFsbFxuYnkgdGhlIGxvb3AuICBIaW50OiB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gInJhbmdlKCkiIHJldHVybnMgYW5cbml0ZXJhdG9yIG9mIGludGVnZXJzIHN1aXRhYmxlIHRvIGVtdWxhdGUgdGhlIGVmZmVjdCBvZiBQYXNjYWxcJ3MgImZvciBpXG46PSBhIHRvIGIgZG8iOyBlLmcuLCAibGlzdChyYW5nZSgzKSkiIHJldHVybnMgdGhlIGxpc3QgIlswLCAxLCAyXSIuXG5cbk5vdGU6IFRoZXJlIGlzIGEgc3VidGxldHkgd2hlbiB0aGUgc2VxdWVuY2UgaXMgYmVpbmcgbW9kaWZpZWQgYnkgdGhlXG4gIGxvb3AgKHRoaXMgY2FuIG9ubHkgb2NjdXIgZm9yIG11dGFibGUgc2VxdWVuY2VzLCBpLmUuIGxpc3RzKS4gIEFuXG4gIGludGVybmFsIGNvdW50ZXIgaXMgdXNlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGl0ZW0gaXMgdXNlZCBuZXh0LFxuICBhbmQgdGhpcyBpcyBpbmNyZW1lbnRlZCBvbiBlYWNoIGl0ZXJhdGlvbi4gIFdoZW4gdGhpcyBjb3VudGVyIGhhc1xuICByZWFjaGVkIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlIHRoZSBsb29wIHRlcm1pbmF0ZXMuICBUaGlzIG1lYW5zXG4gIHRoYXQgaWYgdGhlIHN1aXRlIGRlbGV0ZXMgdGhlIGN1cnJlbnQgKG9yIGEgcHJldmlvdXMpIGl0ZW0gZnJvbSB0aGVcbiAgc2VxdWVuY2UsIHRoZSBuZXh0IGl0ZW0gd2lsbCBiZSBza2lwcGVkIChzaW5jZSBpdCBnZXRzIHRoZSBpbmRleCBvZlxuICB0aGUgY3VycmVudCBpdGVtIHdoaWNoIGhhcyBhbHJlYWR5IGJlZW4gdHJlYXRlZCkuICBMaWtld2lzZSwgaWYgdGhlXG4gIHN1aXRlIGluc2VydHMgYW4gaXRlbSBpbiB0aGUgc2VxdWVuY2UgYmVmb3JlIHRoZSBjdXJyZW50IGl0ZW0sIHRoZVxuICBjdXJyZW50IGl0ZW0gd2lsbCBiZSB0cmVhdGVkIGFnYWluIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB0aGUgbG9vcC5cbiAgVGhpcyBjYW4gbGVhZCB0byBuYXN0eSBidWdzIHRoYXQgY2FuIGJlIGF2b2lkZWQgYnkgbWFraW5nIGFcbiAgdGVtcG9yYXJ5IGNvcHkgdXNpbmcgYSBzbGljZSBvZiB0aGUgd2hvbGUgc2VxdWVuY2UsIGUuZy4sXG5cbiAgICAgZm9yIHggaW4gYVs6XTpcbiAgICAgICAgIGlmIHggPCAwOiBhLnJlbW92ZSh4KVxuJywKLSAnZm9ybWF0c3RyaW5ncyc6ICdcbkZvcm1hdCBTdHJpbmcgU3ludGF4XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgInN0ci5mb3JtYXQoKSIgbWV0aG9kIGFuZCB0aGUgIkZvcm1hdHRlciIgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mICJGb3JtYXR0ZXIiLFxuc3ViY2xhc3NlcyBjYW4gZGVmaW5lIHRoZWlyIG93biBmb3JtYXQgc3RyaW5nIHN5bnRheCkuXG5cbkZvcm1hdCBzdHJpbmdzIGNvbnRhaW4gInJlcGxhY2VtZW50IGZpZWxkcyIgc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXNcbiJ7fSIuIEFueXRoaW5nIHRoYXQgaXMgbm90IGNvbnRhaW5lZCBpbiBicmFjZXMgaXMgY29uc2lkZXJlZCBsaXRlcmFsXG50ZXh0LCB3aGljaCBpcyBjb3BpZWQgdW5jaGFuZ2VkIHRvIHRoZSBvdXRwdXQuICBJZiB5b3UgbmVlZCB0byBpbmNsdWRlXG5hIGJyYWNlIGNoYXJhY3RlciBpbiB0aGUgbGl0ZXJhbCB0ZXh0LCBpdCBjYW4gYmUgZXNjYXBlZCBieSBkb3VibGluZzpcbiJ7eyIgYW5kICJ9fSIuXG5cblRoZSBncmFtbWFyIGZvciBhIHJlcGxhY2VtZW50IGZpZWxkIGlzIGFzIGZvbGxvd3M6XG5cbiAgICAgIHJlcGxhY2VtZW50X2ZpZWxkIDo6PSAieyIgW2ZpZWxkX25hbWVdIFsiISIgY29udmVyc2lvbl0gWyI6IiBmb3JtYXRfc3BlY10gIn0iXG4gICAgICBmaWVsZF9uYW1lICAgICAgICA6Oj0gYXJnX25hbWUgKCIuIiBhdHRyaWJ1dGVfbmFtZSB8ICJbIiBlbGVtZW50X2luZGV4ICJdIikqXG4gICAgICBhcmdfbmFtZSAgICAgICAgICA6Oj0gW2lkZW50aWZpZXIgfCBpbnRlZ2VyXVxuICAgICAgYXR0cmlidXRlX25hbWUgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgIGVsZW1lbnRfaW5kZXggICAgIDo6PSBpbnRlZ2VyIHwgaW5kZXhfc3RyaW5nXG4gICAgICBpbmRleF9zdHJpbmcgICAgICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICtcbiAgICAgIGNvbnZlcnNpb24gICAgICAgIDo6PSAiciIgfCAicyIgfCAiYSJcbiAgICAgIGZvcm1hdF9zcGVjICAgICAgIDo6PSA8ZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24+XG5cbkluIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgY2FuIHN0YXJ0IHdpdGggYVxuKmZpZWxkX25hbWUqIHRoYXQgc3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZm9ybWF0dGVkXG5hbmQgaW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VtZW50IGZpZWxkLiBUaGVcbipmaWVsZF9uYW1lKiBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIHBvaW50ICJcJyFcJyIsIGFuZCBhICpmb3JtYXRfc3BlYyosIHdoaWNoIGlzXG5wcmVjZWRlZCBieSBhIGNvbG9uICJcJzpcJyIuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0IGZvciB0aGVcbnJlcGxhY2VtZW50IHZhbHVlLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXIgYVxubnVtYmVyIG9yIGEga2V5d29yZC4gIElmIGl0XCdzIGEgbnVtYmVyLCBpdCByZWZlcnMgdG8gYSBwb3NpdGlvbmFsXG5hcmd1bWVudCwgYW5kIGlmIGl0XCdzIGEga2V5d29yZCwgaXQgcmVmZXJzIHRvIGEgbmFtZWQga2V5d29yZFxuYXJndW1lbnQuICBJZiB0aGUgbnVtZXJpY2FsIGFyZ19uYW1lcyBpbiBhIGZvcm1hdCBzdHJpbmcgYXJlIDAsIDEsIDIsXG4uLi4gaW4gc2VxdWVuY2UsIHRoZXkgY2FuIGFsbCBiZSBvbWl0dGVkIChub3QganVzdCBzb21lKSBhbmQgdGhlXG5udW1iZXJzIDAsIDEsIDIsIC4uLiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhhdCBvcmRlci5cbkJlY2F1c2UgKmFyZ19uYW1lKiBpcyBub3QgcXVvdGUtZGVsaW1pdGVkLCBpdCBpcyBub3QgcG9zc2libGUgdG9cbnNwZWNpZnkgYXJiaXRyYXJ5IGRpY3Rpb25hcnkga2V5cyAoZS5nLiwgdGhlIHN0cmluZ3MgIlwnMTBcJyIgb3JcbiJcJzotXVwnIikgd2l0aGluIGEgZm9ybWF0IHN0cmluZy4gVGhlICphcmdfbmFtZSogY2FuIGJlIGZvbGxvd2VkIGJ5IGFueVxubnVtYmVyIG9mIGluZGV4IG9yIGF0dHJpYnV0ZSBleHByZXNzaW9ucy4gQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybVxuIlwnLm5hbWVcJyIgc2VsZWN0cyB0aGUgbmFtZWQgYXR0cmlidXRlIHVzaW5nICJnZXRhdHRyKCkiLCB3aGlsZSBhblxuZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSAiXCdbaW5kZXhdXCciIGRvZXMgYW4gaW5kZXggbG9va3VwIHVzaW5nXG4iX19nZXRpdGVtX18oKSIuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlXG5vbWl0dGVkLCBzbyAiXCd7fSB7fVwnIiBpcyBlcXVpdmFsZW50IHRvICJcJ3swfSB7MX1cJyIuXG5cblNvbWUgc2ltcGxlIGZvcm1hdCBzdHJpbmcgZXhhbXBsZXM6XG5cbiAgICJGaXJzdCwgdGhvdSBzaGFsdCBjb3VudCB0byB7MH0iICMgUmVmZXJlbmNlcyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiQnJpbmcgbWUgYSB7fSIgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0bHkgcmVmZXJlbmNlcyB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkZyb20ge30gdG8ge30iICAgICAgICAgICAgICAgICAgIyBTYW1lIGFzICJGcm9tIHswfSB0byB7MX0iXG4gICAiTXkgcXVlc3QgaXMge25hbWV9IiAgICAgICAgICAgICAjIFJlZmVyZW5jZXMga2V5d29yZCBhcmd1bWVudCBcJ25hbWVcJ1xuICAgIldlaWdodCBpbiB0b25zIHswLndlaWdodH0iICAgICAgIyBcJ3dlaWdodFwnIGF0dHJpYnV0ZSBvZiBmaXJzdCBwb3NpdGlvbmFsIGFyZ1xuICAgIlVuaXRzIGRlc3Ryb3llZDoge3BsYXllcnNbMF19IiAgIyBGaXJzdCBlbGVtZW50IG9mIGtleXdvcmQgYXJndW1lbnQgXCdwbGF5ZXJzXCcuXG5cblRoZSAqY29udmVyc2lvbiogZmllbGQgY2F1c2VzIGEgdHlwZSBjb2VyY2lvbiBiZWZvcmUgZm9ybWF0dGluZy5cbk5vcm1hbGx5LCB0aGUgam9iIG9mIGZvcm1hdHRpbmcgYSB2YWx1ZSBpcyBkb25lIGJ5IHRoZSAiX19mb3JtYXRfXygpIlxubWV0aG9kIG9mIHRoZSB2YWx1ZSBpdHNlbGYuICBIb3dldmVyLCBpbiBzb21lIGNhc2VzIGl0IGlzIGRlc2lyYWJsZSB0b1xuZm9yY2UgYSB0eXBlIHRvIGJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZywgb3ZlcnJpZGluZyBpdHMgb3duXG5kZWZpbml0aW9uIG9mIGZvcm1hdHRpbmcuICBCeSBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmVcbmNhbGxpbmcgIl9fZm9ybWF0X18oKSIsIHRoZSBub3JtYWwgZm9ybWF0dGluZyBsb2dpYyBpcyBieXBhc3NlZC5cblxuVGhyZWUgY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogIlwnIXNcJyIgd2hpY2ggY2FsbHNcbiJzdHIoKSIgb24gdGhlIHZhbHVlLCAiXCchclwnIiB3aGljaCBjYWxscyAicmVwcigpIiBhbmQgIlwnIWFcJyIgd2hpY2hcbmNhbGxzICJhc2NpaSgpIi5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJNb3JlIHshYX0iICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbHMgYXNjaWkoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluICJmb3JtYXQoKSIgZnVuY3Rpb24uICBFYWNoIGZvcm1hdHRhYmxlIHR5cGUgbWF5IGRlZmluZSBob3dcbnRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBpcyB0byBiZSBpbnRlcnByZXRlZC5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBmb3JtYXRcbnNwZWNpZmljYXRpb25zLCBhbHRob3VnaCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXJlIG9ubHlcbnN1cHBvcnRlZCBieSB0aGUgbnVtZXJpYyB0eXBlcy5cblxuQSBnZW5lcmFsIGNvbnZlbnRpb24gaXMgdGhhdCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nICgiIiIiKSBwcm9kdWNlc1xudGhlIHNhbWUgcmVzdWx0IGFzIGlmIHlvdSBoYWQgY2FsbGVkICJzdHIoKSIgb24gdGhlIHZhbHVlLiBBIG5vbi1lbXB0eVxuZm9ybWF0IHN0cmluZyB0eXBpY2FsbHkgbW9kaWZpZXMgdGhlIHJlc3VsdC5cblxuVGhlIGdlbmVyYWwgZm9ybSBvZiBhICpzdGFuZGFyZCBmb3JtYXQgc3BlY2lmaWVyKiBpczpcblxuICAgZm9ybWF0X3NwZWMgOjo9IFtbZmlsbF1hbGlnbl1bc2lnbl1bI11bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW3R5cGVdXG4gICBmaWxsICAgICAgICA6Oj0gPGFueSBjaGFyYWN0ZXI+XG4gICBhbGlnbiAgICAgICA6Oj0gIjwiIHwgIj4iIHwgIj0iIHwgIl4iXG4gICBzaWduICAgICAgICA6Oj0gIisiIHwgIi0iIHwgIiAiXG4gICB3aWR0aCAgICAgICA6Oj0gaW50ZWdlclxuICAgcHJlY2lzaW9uICAgOjo9IGludGVnZXJcbiAgIHR5cGUgICAgICAgIDo6PSAiYiIgfCAiYyIgfCAiZCIgfCAiZSIgfCAiRSIgfCAiZiIgfCAiRiIgfCAiZyIgfCAiRyIgfCAibiIgfCAibyIgfCAicyIgfCAieCIgfCAiWCIgfCAiJSJcblxuSWYgYSB2YWxpZCAqYWxpZ24qIHZhbHVlIGlzIHNwZWNpZmllZCwgaXQgY2FuIGJlIHByZWNlZGVkIGJ5IGEgKmZpbGwqXG5jaGFyYWN0ZXIgdGhhdCBjYW4gYmUgYW55IGNoYXJhY3RlciBhbmQgZGVmYXVsdHMgdG8gYSBzcGFjZSBpZlxub21pdHRlZC4gTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgInsiIGFuZCAifSIgYXMgKmZpbGwqXG5jaGFyIHdoaWxlIHVzaW5nIHRoZSAic3RyLmZvcm1hdCgpIiBtZXRob2Q7IHRoaXMgbGltaXRhdGlvbiBob3dldmVyXG5kb2VzblwndCBhZmZlY3QgdGhlICJmb3JtYXQoKSIgZnVuY3Rpb24uXG5cblRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGFsaWdubWVudCBvcHRpb25zIGlzIGFzIGZvbGxvd3M6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnPFwnIiAgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGxlZnQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJz5cJyIgICAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSByaWdodC1hbGlnbmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCc9XCciICAgICB8IEZvcmNlcyB0aGUgcGFkZGluZyB0byBiZSBwbGFjZWQgYWZ0ZXIgdGhlIHNpZ24gKGlmIGFueSkgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnXlwnIiAgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGNlbnRlcmVkIHdpdGhpbiB0aGUgYXZhaWxhYmxlICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGUgdGhhdCB1bmxlc3MgYSBtaW5pbXVtIGZpZWxkIHdpZHRoIGlzIGRlZmluZWQsIHRoZSBmaWVsZCB3aWR0aFxud2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgZGF0YSB0byBmaWxsIGl0LCBzbyB0aGF0IHRoZVxuYWxpZ25tZW50IG9wdGlvbiBoYXMgbm8gbWVhbmluZyBpbiB0aGlzIGNhc2UuXG5cblRoZSAqc2lnbiogb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIG51bWJlciB0eXBlcywgYW5kIGNhbiBiZSBvbmUgb2ZcbnRoZSBmb2xsb3dpbmc6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnK1wnIiAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIHNpZ24gc2hvdWxkIGJlIHVzZWQgZm9yIGJvdGggcG9zaXRpdmUgYXMgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJy1cJyIgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIG5lZ2F0aXZlICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBzcGFjZSAgICAgfCBpbmRpY2F0ZXMgdGhhdCBhIGxlYWRpbmcgc3BhY2Ugc2hvdWxkIGJlIHVzZWQgb24gcG9zaXRpdmUgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblRoZSAiXCcjXCciIG9wdGlvbiBjYXVzZXMgdGhlICJhbHRlcm5hdGUgZm9ybSIgdG8gYmUgdXNlZCBmb3IgdGhlXG5jb252ZXJzaW9uLiAgVGhlIGFsdGVybmF0ZSBmb3JtIGlzIGRlZmluZWQgZGlmZmVyZW50bHkgZm9yIGRpZmZlcmVudFxudHlwZXMuICBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGZvciBpbnRlZ2VyLCBmbG9hdCwgY29tcGxleCBhbmRcbkRlY2ltYWwgdHlwZXMuIEZvciBpbnRlZ2Vycywgd2hlbiBiaW5hcnksIG9jdGFsLCBvciBoZXhhZGVjaW1hbCBvdXRwdXRcbmlzIHVzZWQsIHRoaXMgb3B0aW9uIGFkZHMgdGhlIHByZWZpeCByZXNwZWN0aXZlICJcJzBiXCciLCAiXCcwb1wnIiwgb3JcbiJcJzB4XCciIHRvIHRoZSBvdXRwdXQgdmFsdWUuIEZvciBmbG9hdHMsIGNvbXBsZXggYW5kIERlY2ltYWwgdGhlXG5hbHRlcm5hdGUgZm9ybSBjYXVzZXMgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiB0byBhbHdheXMgY29udGFpbiBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciwgZXZlbiBpZiBubyBkaWdpdHMgZm9sbG93IGl0LiBOb3JtYWxseSwgYVxuZGVjaW1hbC1wb2ludCBjaGFyYWN0ZXIgYXBwZWFycyBpbiB0aGUgcmVzdWx0IG9mIHRoZXNlIGNvbnZlcnNpb25zXG5vbmx5IGlmIGEgZGlnaXQgZm9sbG93cyBpdC4gSW4gYWRkaXRpb24sIGZvciAiXCdnXCciIGFuZCAiXCdHXCciXG5jb252ZXJzaW9ucywgdHJhaWxpbmcgemVyb3MgYXJlIG5vdCByZW1vdmVkIGZyb20gdGhlIHJlc3VsdC5cblxuVGhlICJcJyxcJyIgb3B0aW9uIHNpZ25hbHMgdGhlIHVzZSBvZiBhIGNvbW1hIGZvciBhIHRob3VzYW5kcyBzZXBhcmF0b3IuXG5Gb3IgYSBsb2NhbGUgYXdhcmUgc2VwYXJhdG9yLCB1c2UgdGhlICJcJ25cJyIgaW50ZWdlciBwcmVzZW50YXRpb24gdHlwZVxuaW5zdGVhZC5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogQWRkZWQgdGhlICJcJyxcJyIgb3B0aW9uIChzZWUgYWxzbyAqKlBFUCAzNzgqKikuXG5cbip3aWR0aCogaXMgYSBkZWNpbWFsIGludGVnZXIgZGVmaW5pbmcgdGhlIG1pbmltdW0gZmllbGQgd2lkdGguICBJZiBub3RcbnNwZWNpZmllZCwgdGhlbiB0aGUgZmllbGQgd2lkdGggd2lsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBjb250ZW50LlxuXG5QcmVjZWRpbmcgdGhlICp3aWR0aCogZmllbGQgYnkgYSB6ZXJvICgiXCcwXCciKSBjaGFyYWN0ZXIgZW5hYmxlcyBzaWduLVxuYXdhcmUgemVyby1wYWRkaW5nIGZvciBudW1lcmljIHR5cGVzLiAgVGhpcyBpcyBlcXVpdmFsZW50IHRvIGEgKmZpbGwqXG5jaGFyYWN0ZXIgb2YgIlwnMFwnIiB3aXRoIGFuICphbGlnbm1lbnQqIHR5cGUgb2YgIlwnPVwnIi5cblxuVGhlICpwcmVjaXNpb24qIGlzIGEgZGVjaW1hbCBudW1iZXIgaW5kaWNhdGluZyBob3cgbWFueSBkaWdpdHMgc2hvdWxkXG5iZSBkaXNwbGF5ZWQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWVcbmZvcm1hdHRlZCB3aXRoICJcJ2ZcJyIgYW5kICJcJ0ZcJyIsIG9yIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcbmZvciBhIGZsb2F0aW5nIHBvaW50IHZhbHVlIGZvcm1hdHRlZCB3aXRoICJcJ2dcJyIgb3IgIlwnR1wnIi4gIEZvciBub24tXG5udW1iZXIgdHlwZXMgdGhlIGZpZWxkIGluZGljYXRlcyB0aGUgbWF4aW11bSBmaWVsZCBzaXplIC0gaW4gb3RoZXJcbndvcmRzLCBob3cgbWFueSBjaGFyYWN0ZXJzIHdpbGwgYmUgdXNlZCBmcm9tIHRoZSBmaWVsZCBjb250ZW50LiBUaGVcbipwcmVjaXNpb24qIGlzIG5vdCBhbGxvd2VkIGZvciBpbnRlZ2VyIHZhbHVlcy5cblxuRmluYWxseSwgdGhlICp0eXBlKiBkZXRlcm1pbmVzIGhvdyB0aGUgZGF0YSBzaG91bGQgYmUgcHJlc2VudGVkLlxuXG5UaGUgYXZhaWxhYmxlIHN0cmluZyBwcmVzZW50YXRpb24gdHlwZXMgYXJlOlxuXG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBUeXBlICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICs9PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rXG4gICB8ICJcJ3NcJyIgICAgIHwgU3RyaW5nIGZvcm1hdC4gVGhpcyBpcyB0aGUgZGVmYXVsdCB0eXBlIGZvciBzdHJpbmdzIGFuZCAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyAiXCdzXCciLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGF2YWlsYWJsZSBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnYlwnIiAgICAgfCBCaW5hcnkgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAyLiAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2NcJyIgICAgIHwgQ2hhcmFjdGVyLiBDb252ZXJ0cyB0aGUgaW50ZWdlciB0byB0aGUgY29ycmVzcG9uZGluZyAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdkXCciICAgICB8IERlY2ltYWwgSW50ZWdlci4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTAuICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnb1wnIiAgICAgfCBPY3RhbCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDguICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ3hcJyIgICAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIGxvd2VyLSAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdYXCciICAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyB1cHBlci0gICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnblwnIiAgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgIlwnZFwnIiwgZXhjZXB0IHRoYXQgaXQgdXNlcyB0aGUgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgVGhlIHNhbWUgYXMgIlwnZFwnIi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbkluIGFkZGl0aW9uIHRvIHRoZSBhYm92ZSBwcmVzZW50YXRpb24gdHlwZXMsIGludGVnZXJzIGNhbiBiZSBmb3JtYXR0ZWRcbndpdGggdGhlIGZsb2F0aW5nIHBvaW50IHByZXNlbnRhdGlvbiB0eXBlcyBsaXN0ZWQgYmVsb3cgKGV4Y2VwdCAiXCduXCciXG5hbmQgTm9uZSkuIFdoZW4gZG9pbmcgc28sICJmbG9hdCgpIiBpcyB1c2VkIHRvIGNvbnZlcnQgdGhlIGludGVnZXIgdG9cbmEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGJlZm9yZSBmb3JtYXR0aW5nLlxuXG5UaGUgYXZhaWxhYmxlIHByZXNlbnRhdGlvbiB0eXBlcyBmb3IgZmxvYXRpbmcgcG9pbnQgYW5kIGRlY2ltYWwgdmFsdWVzXG5hcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnZVwnIiAgICAgfCBFeHBvbmVudCBub3RhdGlvbi4gUHJpbnRzIHRoZSBudW1iZXIgaW4gc2NpZW50aWZpYyAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ0VcJyIgICAgIHwgRXhwb25lbnQgbm90YXRpb24uIFNhbWUgYXMgIlwnZVwnIiBleGNlcHQgaXQgdXNlcyBhbiB1cHBlciAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2ZcJyIgICAgIHwgRml4ZWQgcG9pbnQuIERpc3BsYXlzIHRoZSBudW1iZXIgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIuICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdGXCciICAgICB8IEZpeGVkIHBvaW50LiBTYW1lIGFzICJcJ2ZcJyIsIGJ1dCBjb252ZXJ0cyAibmFuIiB0byAiTkFOIiAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCdnXCciICAgICB8IEdlbmVyYWwgZm9ybWF0LiAgRm9yIGEgZ2l2ZW4gcHJlY2lzaW9uICJwID49IDEiLCB0aGlzICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnR1wnIiAgICAgfCBHZW5lcmFsIGZvcm1hdC4gU2FtZSBhcyAiXCdnXCciIGV4Y2VwdCBzd2l0Y2hlcyB0byAiXCdFXCciIGlmICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCduXCciICAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyAiXCdnXCciLCBleGNlcHQgdGhhdCBpdCB1c2VzIHRoZSB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCclXCciICAgICB8IFBlcmNlbnRhZ2UuIE11bHRpcGxpZXMgdGhlIG51bWJlciBieSAxMDAgYW5kIGRpc3BsYXlzIGluICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgTm9uZSAgICAgIHwgU2ltaWxhciB0byAiXCdnXCciLCBleGNlcHQgd2l0aCBhdCBsZWFzdCBvbmUgZGlnaXQgcGFzdCB0aGUgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cblxuRm9ybWF0IGV4YW1wbGVzXG49PT09PT09PT09PT09PT1cblxuVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGV4YW1wbGVzIG9mIHRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbmQgY29tcGFyaXNvblxud2l0aCB0aGUgb2xkICIlIi1mb3JtYXR0aW5nLlxuXG5JbiBtb3N0IG9mIHRoZSBjYXNlcyB0aGUgc3ludGF4IGlzIHNpbWlsYXIgdG8gdGhlIG9sZCAiJSItZm9ybWF0dGluZyxcbndpdGggdGhlIGFkZGl0aW9uIG9mIHRoZSAie30iIGFuZCB3aXRoICI6IiB1c2VkIGluc3RlYWQgb2YgIiUiLiBGb3JcbmV4YW1wbGUsICJcJyUwMy4yZlwnIiBjYW4gYmUgdHJhbnNsYXRlZCB0byAiXCd7OjAzLjJmfVwnIi5cblxuVGhlIG5ldyBmb3JtYXQgc3ludGF4IGFsc28gc3VwcG9ydHMgbmV3IGFuZCBkaWZmZXJlbnQgb3B0aW9ucywgc2hvd25cbmluIHRoZSBmb2xsb3cgZXhhbXBsZXMuXG5cbkFjY2Vzc2luZyBhcmd1bWVudHMgYnkgcG9zaXRpb246XG5cbiAgID4+PiBcJ3swfSwgezF9LCB7Mn1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7fSwge30sIHt9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpICAjIDMuMSsgb25seVxuICAgXCdhLCBiLCBjXCdcbiAgID4+PiBcJ3syfSwgezF9LCB7MH1cJy5mb3JtYXQoXCdhXCcsIFwnYlwnLCBcJ2NcJylcbiAgIFwnYywgYiwgYVwnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KCpcJ2FiY1wnKSAgICAgICMgdW5wYWNraW5nIGFyZ3VtZW50IHNlcXVlbmNlXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezB9ezF9ezB9XCcuZm9ybWF0KFwnYWJyYVwnLCBcJ2NhZFwnKSAgICMgYXJndW1lbnRzXCcgaW5kaWNlcyBjYW4gYmUgcmVwZWF0ZWRcbiAgIFwnYWJyYWNhZGFicmFcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IG5hbWU6XG5cbiAgID4+PiBcJ0Nvb3JkaW5hdGVzOiB7bGF0aXR1ZGV9LCB7bG9uZ2l0dWRlfVwnLmZvcm1hdChsYXRpdHVkZT1cJzM3LjI0TlwnLCBsb25naXR1ZGU9XCctMTE1LjgxV1wnKVxuICAgXCdDb29yZGluYXRlczogMzcuMjROLCAtMTE1LjgxV1wnXG4gICA+Pj4gY29vcmQgPSB7XCdsYXRpdHVkZVwnOiBcJzM3LjI0TlwnLCBcJ2xvbmdpdHVkZVwnOiBcJy0xMTUuODFXXCd9XG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQoKipjb29yZClcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgYXR0cmlidXRlczpcblxuICAgPj4+IGMgPSAzLTVqXG4gICA+Pj4gKFwnVGhlIGNvbXBsZXggbnVtYmVyIHswfSBpcyBmb3JtZWQgZnJvbSB0aGUgcmVhbCBwYXJ0IHswLnJlYWx9IFwnXG4gICAuLi4gIFwnYW5kIHRoZSBpbWFnaW5hcnkgcGFydCB7MC5pbWFnfS5cJykuZm9ybWF0KGMpXG4gICBcJ1RoZSBjb21wbGV4IG51bWJlciAoMy01aikgaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCAzLjAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCAtNS4wLlwnXG4gICA+Pj4gY2xhc3MgUG9pbnQ6XG4gICAuLi4gICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KTpcbiAgIC4uLiAgICAgICAgIHNlbGYueCwgc2VsZi55ID0geCwgeVxuICAgLi4uICAgICBkZWYgX19zdHJfXyhzZWxmKTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ1BvaW50KHtzZWxmLnh9LCB7c2VsZi55fSlcJy5mb3JtYXQoc2VsZj1zZWxmKVxuICAgLi4uXG4gICA+Pj4gc3RyKFBvaW50KDQsIDIpKVxuICAgXCdQb2ludCg0LCAyKVwnXG5cbkFjY2Vzc2luZyBhcmd1bWVudHNcJyBpdGVtczpcblxuICAgPj4+IGNvb3JkID0gKDMsIDUpXG4gICA+Pj4gXCdYOiB7MFswXX07ICBZOiB7MFsxXX1cJy5mb3JtYXQoY29vcmQpXG4gICBcJ1g6IDM7ICBZOiA1XCdcblxuUmVwbGFjaW5nICIlcyIgYW5kICIlciI6XG5cbiAgID4+PiAicmVwcigpIHNob3dzIHF1b3RlczogeyFyfTsgc3RyKCkgZG9lc25cJ3Q6IHshc30iLmZvcm1hdChcJ3Rlc3QxXCcsIFwndGVzdDJcJylcbiAgICJyZXByKCkgc2hvd3MgcXVvdGVzOiBcJ3Rlc3QxXCc7IHN0cigpIGRvZXNuXCd0OiB0ZXN0MiJcblxuQWxpZ25pbmcgdGhlIHRleHQgYW5kIHNwZWNpZnlpbmcgYSB3aWR0aDpcblxuICAgPj4+IFwnezo8MzB9XCcuZm9ybWF0KFwnbGVmdCBhbGlnbmVkXCcpXG4gICBcJ2xlZnQgYWxpZ25lZCAgICAgICAgICAgICAgICAgIFwnXG4gICA+Pj4gXCd7Oj4zMH1cJy5mb3JtYXQoXCdyaWdodCBhbGlnbmVkXCcpXG4gICBcJyAgICAgICAgICAgICAgICAgcmlnaHQgYWxpZ25lZFwnXG4gICA+Pj4gXCd7Ol4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKVxuICAgXCcgICAgICAgICAgIGNlbnRlcmVkICAgICAgICAgICBcJ1xuICAgPj4+IFwnezoqXjMwfVwnLmZvcm1hdChcJ2NlbnRlcmVkXCcpICAjIHVzZSBcJypcJyBhcyBhIGZpbGwgY2hhclxuICAgXCcqKioqKioqKioqKmNlbnRlcmVkKioqKioqKioqKipcJ1xuXG5SZXBsYWNpbmcgIiUrZiIsICIlLWYiLCBhbmQgIiUgZiIgYW5kIHNwZWNpZnlpbmcgYSBzaWduOlxuXG4gICA+Pj4gXCd7OitmfTsgezorZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgaXQgYWx3YXlzXG4gICBcJyszLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6IGZ9OyB7OiBmfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBhIHNwYWNlIGZvciBwb3NpdGl2ZSBudW1iZXJzXG4gICBcJyAzLjE0MDAwMDsgLTMuMTQwMDAwXCdcbiAgID4+PiBcJ3s6LWZ9OyB7Oi1mfVwnLmZvcm1hdCgzLjE0LCAtMy4xNCkgICMgc2hvdyBvbmx5IHRoZSBtaW51cyAtLSBzYW1lIGFzIFwnezpmfTsgezpmfVwnXG4gICBcJzMuMTQwMDAwOyAtMy4xNDAwMDBcJ1xuXG5SZXBsYWNpbmcgIiV4IiBhbmQgIiVvIiBhbmQgY29udmVydGluZyB0aGUgdmFsdWUgdG8gZGlmZmVyZW50IGJhc2VzOlxuXG4gICA+Pj4gIyBmb3JtYXQgYWxzbyBzdXBwb3J0cyBiaW5hcnkgbnVtYmVyc1xuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDp4fTsgIG9jdDogezA6b307ICBiaW46IHswOmJ9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDJhOyAgb2N0OiA1MjsgIGJpbjogMTAxMDEwXCdcbiAgID4+PiAjIHdpdGggMHgsIDBvLCBvciAwYiBhcyBwcmVmaXg6XG4gICA+Pj4gImludDogezA6ZH07ICBoZXg6IHswOiN4fTsgIG9jdDogezA6I299OyAgYmluOiB7MDojYn0iLmZvcm1hdCg0MilcbiAgIFwnaW50OiA0MjsgIGhleDogMHgyYTsgIG9jdDogMG81MjsgIGJpbjogMGIxMDEwMTBcJ1xuXG5Vc2luZyB0aGUgY29tbWEgYXMgYSB0aG91c2FuZHMgc2VwYXJhdG9yOlxuXG4gICA+Pj4gXCd7Oix9XCcuZm9ybWF0KDEyMzQ1Njc4OTApXG4gICBcJzEsMjM0LDU2Nyw4OTBcJ1xuXG5FeHByZXNzaW5nIGEgcGVyY2VudGFnZTpcblxuICAgPj4+IHBvaW50cyA9IDE5XG4gICA+Pj4gdG90YWwgPSAyMlxuICAgPj4+IFwnQ29ycmVjdCBhbnN3ZXJzOiB7Oi4yJX1cJy5mb3JtYXQocG9pbnRzL3RvdGFsKVxuICAgXCdDb3JyZWN0IGFuc3dlcnM6IDg2LjM2JVwnXG5cblVzaW5nIHR5cGUtc3BlY2lmaWMgZm9ybWF0dGluZzpcblxuICAgPj4+IGltcG9ydCBkYXRldGltZVxuICAgPj4+IGQgPSBkYXRldGltZS5kYXRldGltZSgyMDEwLCA3LCA0LCAxMiwgMTUsIDU4KVxuICAgPj4+IFwnezolWS0lbS0lZCAlSDolTTolU31cJy5mb3JtYXQoZClcbiAgIFwnMjAxMC0wNy0wNCAxMjoxNTo1OFwnXG5cbk5lc3RpbmcgYXJndW1lbnRzIGFuZCBtb3JlIGNvbXBsZXggZXhhbXBsZXM6XG5cbiAgID4+PiBmb3IgYWxpZ24sIHRleHQgaW4gemlwKFwnPF4+XCcsIFtcJ2xlZnRcJywgXCdjZW50ZXJcJywgXCdyaWdodFwnXSk6XG4gICAuLi4gICAgIFwnezA6e2ZpbGx9e2FsaWdufTE2fVwnLmZvcm1hdCh0ZXh0LCBmaWxsPWFsaWduLCBhbGlnbj1hbGlnbilcbiAgIC4uLlxuICAgXCdsZWZ0PDw8PDw8PDw8PDw8XCdcbiAgIFwnXl5eXl5jZW50ZXJeXl5eXlwnXG4gICBcJz4+Pj4+Pj4+Pj4+cmlnaHRcJ1xuICAgPj4+XG4gICA+Pj4gb2N0ZXRzID0gWzE5MiwgMTY4LCAwLCAxXVxuICAgPj4+IFwnezowMlh9ezowMlh9ezowMlh9ezowMlh9XCcuZm9ybWF0KCpvY3RldHMpXG4gICBcJ0MwQTgwMDAxXCdcbiAgID4+PiBpbnQoXywgMTYpXG4gICAzMjMyMjM1NTIxXG4gICA+Pj5cbiAgID4+PiB3aWR0aCA9IDVcbiAgID4+PiBmb3IgbnVtIGluIHJhbmdlKDUsMTIpOiAjZG9jdGVzdDogK05PUk1BTElaRV9XSElURVNQQUNFXG4gICAuLi4gICAgIGZvciBiYXNlIGluIFwnZFhvYlwnOlxuICAgLi4uICAgICAgICAgcHJpbnQoXCd7MDp7d2lkdGh9e2Jhc2V9fVwnLmZvcm1hdChudW0sIGJhc2U9YmFzZSwgd2lkdGg9d2lkdGgpLCBlbmQ9XCcgXCcpXG4gICAuLi4gICAgIHByaW50KClcbiAgIC4uLlxuICAgICAgIDUgICAgIDUgICAgIDUgICAxMDFcbiAgICAgICA2ICAgICA2ICAgICA2ICAgMTEwXG4gICAgICAgNyAgICAgNyAgICAgNyAgIDExMVxuICAgICAgIDggICAgIDggICAgMTAgIDEwMDBcbiAgICAgICA5ICAgICA5ICAgIDExICAxMDAxXG4gICAgICAxMCAgICAgQSAgICAxMiAgMTAxMFxuICAgICAgMTEgICAgIEIgICAgMTMgIDEwMTFcbicsCi0gJ2Z1bmN0aW9uJzogJ1xuRnVuY3Rpb24gZGVmaW5pdGlvbnNcbioqKioqKioqKioqKioqKioqKioqXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKTpcblxuICAgZnVuY2RlZiAgICAgICAgOjo9IFtkZWNvcmF0b3JzXSAiZGVmIiBmdW5jbmFtZSAiKCIgW3BhcmFtZXRlcl9saXN0XSAiKSIgWyItPiIgZXhwcmVzc2lvbl0gIjoiIHN1aXRlXG4gICBkZWNvcmF0b3JzICAgICA6Oj0gZGVjb3JhdG9yK1xuICAgZGVjb3JhdG9yICAgICAgOjo9ICJAIiBkb3R0ZWRfbmFtZSBbIigiIFtwYXJhbWV0ZXJfbGlzdCBbIiwiXV0gIikiXSBORVdMSU5FXG4gICBkb3R0ZWRfbmFtZSAgICA6Oj0gaWRlbnRpZmllciAoIi4iIGlkZW50aWZpZXIpKlxuICAgcGFyYW1ldGVyX2xpc3QgOjo9IChkZWZwYXJhbWV0ZXIgIiwiKSpcbiAgICAgICAgICAgICAgICAgICAgICAoICIqIiBbcGFyYW1ldGVyXSAoIiwiIGRlZnBhcmFtZXRlcikqIFsiLCIgIioqIiBwYXJhbWV0ZXJdXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKioiIHBhcmFtZXRlclxuICAgICAgICAgICAgICAgICAgICAgIHwgZGVmcGFyYW1ldGVyIFsiLCJdIClcbiAgIHBhcmFtZXRlciAgICAgIDo6PSBpZGVudGlmaWVyIFsiOiIgZXhwcmVzc2lvbl1cbiAgIGRlZnBhcmFtZXRlciAgIDo6PSBwYXJhbWV0ZXIgWyI9IiBleHByZXNzaW9uXVxuICAgZnVuY25hbWUgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgSXRzIGV4ZWN1dGlvbiBiaW5kc1xudGhlIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGN1cnJlbnQgbG9jYWwgbmFtZXNwYWNlIHRvIGEgZnVuY3Rpb24gb2JqZWN0XG4oYSB3cmFwcGVyIGFyb3VuZCB0aGUgZXhlY3V0YWJsZSBjb2RlIGZvciB0aGUgZnVuY3Rpb24pLiAgVGhpc1xuZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGdsb2JhbCBuYW1lc3BhY2VcbmFzIHRoZSBnbG9iYWwgbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLlxuXG5UaGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBkb2VzIG5vdCBleGVjdXRlIHRoZSBmdW5jdGlvbiBib2R5OyB0aGlzIGdldHNcbmV4ZWN1dGVkIG9ubHkgd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLiBbM11cblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIG1heSBiZSB3cmFwcGVkIGJ5IG9uZSBvciBtb3JlICpkZWNvcmF0b3IqXG5leHByZXNzaW9ucy4gRGVjb3JhdG9yIGV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gaXNcbmRlZmluZWQsIGluIHRoZSBzY29wZSB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiAgVGhlXG5yZXN1bHQgbXVzdCBiZSBhIGNhbGxhYmxlLCB3aGljaCBpcyBpbnZva2VkIHdpdGggdGhlIGZ1bmN0aW9uIG9iamVjdFxuYXMgdGhlIG9ubHkgYXJndW1lbnQuIFRoZSByZXR1cm5lZCB2YWx1ZSBpcyBib3VuZCB0byB0aGUgZnVuY3Rpb24gbmFtZVxuaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LiAgTXVsdGlwbGUgZGVjb3JhdG9ycyBhcmUgYXBwbGllZCBpblxubmVzdGVkIGZhc2hpb24uIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGVcblxuICAgQGYxKGFyZylcbiAgIEBmMlxuICAgZGVmIGZ1bmMoKTogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGRlZiBmdW5jKCk6IHBhc3NcbiAgIGZ1bmMgPSBmMShhcmcpKGYyKGZ1bmMpKVxuXG5XaGVuIG9uZSBvciBtb3JlICpwYXJhbWV0ZXJzKiBoYXZlIHRoZSBmb3JtICpwYXJhbWV0ZXIqICI9IlxuKmV4cHJlc3Npb24qLCB0aGUgZnVuY3Rpb24gaXMgc2FpZCB0byBoYXZlICJkZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMuIlxuRm9yIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IHZhbHVlLCB0aGUgY29ycmVzcG9uZGluZyAqYXJndW1lbnQqIG1heVxuYmUgb21pdHRlZCBmcm9tIGEgY2FsbCwgaW4gd2hpY2ggY2FzZSB0aGUgcGFyYW1ldGVyXCdzIGRlZmF1bHQgdmFsdWUgaXNcbnN1YnN0aXR1dGVkLiAgSWYgYSBwYXJhbWV0ZXIgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYWxsIGZvbGxvd2luZ1xucGFyYW1ldGVycyB1cCB1bnRpbCB0aGUgIiIqIiIgbXVzdCBhbHNvIGhhdmUgYSBkZWZhdWx0IHZhbHVlIC0tLSB0aGlzXG5pcyBhIHN5bnRhY3RpYyByZXN0cmljdGlvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgYnkgdGhlIGdyYW1tYXIuXG5cbioqRGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzIGFyZSBldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvblxuaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzIGV2YWx1YXRlZCBvbmNlLCB3aGVuXG50aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1jb21wdXRlZCIgdmFsdWUgaXNcbnVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB3aGVuIGFcbmRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYSBsaXN0IG9yIGEgZGljdGlvbmFyeTpcbmlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5IGFwcGVuZGluZyBhbiBpdGVtIHRvIGFcbmxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG5vdFxud2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2UgIk5vbmUiIGFzIHRoZSBkZWZhdWx0LFxuYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uLCBlLmcuOlxuXG4gICBkZWYgd2hhdHNfb25fdGhlX3RlbGx5KHBlbmd1aW49Tm9uZSk6XG4gICAgICAgaWYgcGVuZ3VpbiBpcyBOb25lOlxuICAgICAgICAgICBwZW5ndWluID0gW11cbiAgICAgICBwZW5ndWluLmFwcGVuZCgicHJvcGVydHkgb2YgdGhlIHpvbyIpXG4gICAgICAgcmV0dXJuIHBlbmd1aW5cblxuRnVuY3Rpb24gY2FsbCBzZW1hbnRpY3MgYXJlIGRlc2NyaWJlZCBpbiBtb3JlIGRldGFpbCBpbiBzZWN0aW9uXG4qQ2FsbHMqLiBBIGZ1bmN0aW9uIGNhbGwgYWx3YXlzIGFzc2lnbnMgdmFsdWVzIHRvIGFsbCBwYXJhbWV0ZXJzXG5tZW50aW9uZWQgaW4gdGhlIHBhcmFtZXRlciBsaXN0LCBlaXRoZXIgZnJvbSBwb3NpdGlvbiBhcmd1bWVudHMsIGZyb21cbmtleXdvcmQgYXJndW1lbnRzLCBvciBmcm9tIGRlZmF1bHQgdmFsdWVzLiAgSWYgdGhlIGZvcm1cbiIiKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIHR1cGxlIHJlY2VpdmluZyBhbnlcbmV4Y2VzcyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIGRlZmF1bHRpbmcgdG8gdGhlIGVtcHR5IHR1cGxlLiAgSWYgdGhlXG5mb3JtICIiKippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbmRpY3Rpb25hcnkgcmVjZWl2aW5nIGFueSBleGNlc3Mga2V5d29yZCBhcmd1bWVudHMsIGRlZmF1bHRpbmcgdG8gYSBuZXdcbmVtcHR5IGRpY3Rpb25hcnkuIFBhcmFtZXRlcnMgYWZ0ZXIgIiIqIiIgb3IgIiIqaWRlbnRpZmllciIiIGFyZVxua2V5d29yZC1vbmx5IHBhcmFtZXRlcnMgYW5kIG1heSBvbmx5IGJlIHBhc3NlZCB1c2VkIGtleXdvcmQgYXJndW1lbnRzLlxuXG5QYXJhbWV0ZXJzIG1heSBoYXZlIGFubm90YXRpb25zIG9mIHRoZSBmb3JtICIiOiBleHByZXNzaW9uIiIgZm9sbG93aW5nXG50aGUgcGFyYW1ldGVyIG5hbWUuICBBbnkgcGFyYW1ldGVyIG1heSBoYXZlIGFuIGFubm90YXRpb24gZXZlbiB0aG9zZVxub2YgdGhlIGZvcm0gIippZGVudGlmaWVyIiBvciAiKippZGVudGlmaWVyIi4gIEZ1bmN0aW9ucyBtYXkgaGF2ZVxuInJldHVybiIgYW5ub3RhdGlvbiBvZiB0aGUgZm9ybSAiIi0+IGV4cHJlc3Npb24iIiBhZnRlciB0aGUgcGFyYW1ldGVyXG5saXN0LiAgVGhlc2UgYW5ub3RhdGlvbnMgY2FuIGJlIGFueSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiBhbmQgYXJlXG5ldmFsdWF0ZWQgd2hlbiB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4gIEFubm90YXRpb25zIG1heVxuYmUgZXZhbHVhdGVkIGluIGEgZGlmZmVyZW50IG9yZGVyIHRoYW4gdGhleSBhcHBlYXIgaW4gdGhlIHNvdXJjZSBjb2RlLlxuVGhlIHByZXNlbmNlIG9mIGFubm90YXRpb25zIGRvZXMgbm90IGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFcbmZ1bmN0aW9uLiAgVGhlIGFubm90YXRpb24gdmFsdWVzIGFyZSBhdmFpbGFibGUgYXMgdmFsdWVzIG9mIGFcbmRpY3Rpb25hcnkga2V5ZWQgYnkgdGhlIHBhcmFtZXRlcnNcJyBuYW1lcyBpbiB0aGUgIl9fYW5ub3RhdGlvbnNfXyJcbmF0dHJpYnV0ZSBvZiB0aGUgZnVuY3Rpb24gb2JqZWN0LlxuXG5JdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbm9ueW1vdXMgZnVuY3Rpb25zIChmdW5jdGlvbnMgbm90IGJvdW5kXG50byBhIG5hbWUpLCBmb3IgaW1tZWRpYXRlIHVzZSBpbiBleHByZXNzaW9ucy4gIFRoaXMgdXNlcyBsYW1iZGFcbmV4cHJlc3Npb25zLCBkZXNjcmliZWQgaW4gc2VjdGlvbiAqTGFtYmRhcyouICBOb3RlIHRoYXQgdGhlIGxhbWJkYVxuZXhwcmVzc2lvbiBpcyBtZXJlbHkgYSBzaG9ydGhhbmQgZm9yIGEgc2ltcGxpZmllZCBmdW5jdGlvbiBkZWZpbml0aW9uO1xuYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgIiJkZWYiIiBzdGF0ZW1lbnQgY2FuIGJlIHBhc3NlZCBhcm91bmQgb3JcbmFzc2lnbmVkIHRvIGFub3RoZXIgbmFtZSBqdXN0IGxpa2UgYSBmdW5jdGlvbiBkZWZpbmVkIGJ5IGEgbGFtYmRhXG5leHByZXNzaW9uLiAgVGhlICIiZGVmIiIgZm9ybSBpcyBhY3R1YWxseSBtb3JlIHBvd2VyZnVsIHNpbmNlIGl0XG5hbGxvd3MgdGhlIGV4ZWN1dGlvbiBvZiBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFuZCBhbm5vdGF0aW9ucy5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogRnVuY3Rpb25zIGFyZSBmaXJzdC1jbGFzcyBvYmplY3RzLiAgQSAiImRlZiIiXG5zdGF0ZW1lbnQgZXhlY3V0ZWQgaW5zaWRlIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVzIGEgbG9jYWxcbmZ1bmN0aW9uIHRoYXQgY2FuIGJlIHJldHVybmVkIG9yIHBhc3NlZCBhcm91bmQuICBGcmVlIHZhcmlhYmxlcyB1c2VkXG5pbiB0aGUgbmVzdGVkIGZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiB0aGUgZnVuY3Rpb25cbmNvbnRhaW5pbmcgdGhlIGRlZi4gIFNlZSBzZWN0aW9uICpOYW1pbmcgYW5kIGJpbmRpbmcqIGZvciBkZXRhaWxzLlxuXG5TZWUgYWxzbzogKipQRVAgMzEwNyoqIC0gRnVuY3Rpb24gQW5ub3RhdGlvbnNcblxuICAgICBUaGUgb3JpZ2luYWwgc3BlY2lmaWNhdGlvbiBmb3IgZnVuY3Rpb24gYW5ub3RhdGlvbnMuXG4nLAotICdnbG9iYWwnOiAnXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGdsb2JhbF9zdG10IDo6PSAiZ2xvYmFsIiBpZGVudGlmaWVyICgiLCIgaWRlbnRpZmllcikqXG5cblRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgaXMgYSBkZWNsYXJhdGlvbiB3aGljaCBob2xkcyBmb3IgdGhlIGVudGlyZVxuY3VycmVudCBjb2RlIGJsb2NrLiAgSXQgbWVhbnMgdGhhdCB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIGFyZSB0byBiZVxuaW50ZXJwcmV0ZWQgYXMgZ2xvYmFscy4gIEl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gYXNzaWduIHRvIGEgZ2xvYmFsXG52YXJpYWJsZSB3aXRob3V0ICJnbG9iYWwiLCBhbHRob3VnaCBmcmVlIHZhcmlhYmxlcyBtYXkgcmVmZXIgdG9cbmdsb2JhbHMgd2l0aG91dCBiZWluZyBkZWNsYXJlZCBnbG9iYWwuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJnbG9iYWwiIHN0YXRlbWVudCBtdXN0IG5vdCBiZSB1c2VkIGluIHRoZSBzYW1lIGNvZGVcbmJsb2NrIHRleHR1YWxseSBwcmVjZWRpbmcgdGhhdCAiZ2xvYmFsIiBzdGF0ZW1lbnQuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJnbG9iYWwiIHN0YXRlbWVudCBtdXN0IG5vdCBiZSBkZWZpbmVkIGFzIGZvcm1hbFxucGFyYW1ldGVycyBvciBpbiBhICJmb3IiIGxvb3AgY29udHJvbCB0YXJnZXQsICJjbGFzcyIgZGVmaW5pdGlvbixcbmZ1bmN0aW9uIGRlZmluaXRpb24sIG9yICJpbXBvcnQiIHN0YXRlbWVudC5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdFxuZW5mb3JjZSB0aGUgbGF0dGVyIHR3byByZXN0cmljdGlvbnMsIGJ1dCBwcm9ncmFtcyBzaG91bGQgbm90IGFidXNlXG50aGlzIGZyZWVkb20sIGFzIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGVuZm9yY2UgdGhlbSBvciBzaWxlbnRseVxuY2hhbmdlIHRoZSBtZWFuaW5nIG9mIHRoZSBwcm9ncmFtLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiB0aGUgImdsb2JhbCIgaXMgYSBkaXJlY3RpdmUgdG8gdGhlIHBhcnNlci4gIEl0XG5hcHBsaWVzIG9ubHkgdG8gY29kZSBwYXJzZWQgYXQgdGhlIHNhbWUgdGltZSBhcyB0aGUgImdsb2JhbCJcbnN0YXRlbWVudC4gSW4gcGFydGljdWxhciwgYSAiZ2xvYmFsIiBzdGF0ZW1lbnQgY29udGFpbmVkIGluIGEgc3RyaW5nXG5vciBjb2RlIG9iamVjdCBzdXBwbGllZCB0byB0aGUgYnVpbHQtaW4gImV4ZWMoKSIgZnVuY3Rpb24gZG9lcyBub3RcbmFmZmVjdCB0aGUgY29kZSBibG9jayAqY29udGFpbmluZyogdGhlIGZ1bmN0aW9uIGNhbGwsIGFuZCBjb2RlXG5jb250YWluZWQgaW4gc3VjaCBhIHN0cmluZyBpcyB1bmFmZmVjdGVkIGJ5ICJnbG9iYWwiIHN0YXRlbWVudHMgaW4gdGhlXG5jb2RlIGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uIGNhbGwuICBUaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSAiZXZhbCgpIlxuYW5kICJjb21waWxlKCkiIGZ1bmN0aW9ucy5cbicsCi0gJ2lkLWNsYXNzZXMnOiAnXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbiJfKiJcbiAgIE5vdCBpbXBvcnRlZCBieSAiZnJvbSBtb2R1bGUgaW1wb3J0ICoiLiAgVGhlIHNwZWNpYWwgaWRlbnRpZmllciAiXyJcbiAgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgdGhlXG4gICBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgImJ1aWx0aW5zIiBtb2R1bGUuICBXaGVuIG5vdFxuICAgaW4gaW50ZXJhY3RpdmUgbW9kZSwgIl8iIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYW5kIGlzIG5vdCBkZWZpbmVkLlxuICAgU2VlIHNlY3Rpb24gKlRoZSBpbXBvcnQgc3RhdGVtZW50Ki5cblxuICAgTm90ZTogVGhlIG5hbWUgIl8iIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICAiZ2V0dGV4dCIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuIl9fKl9fIlxuICAgU3lzdGVtLWRlZmluZWQgbmFtZXMuIFRoZXNlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnByZXRlclxuICAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KS4gIEN1cnJlbnRcbiAgIHN5c3RlbSBuYW1lcyBhcmUgZGlzY3Vzc2VkIGluIHRoZSAqU3BlY2lhbCBtZXRob2QgbmFtZXMqIHNlY3Rpb25cbiAgIGFuZCBlbHNld2hlcmUuICBNb3JlIHdpbGwgbGlrZWx5IGJlIGRlZmluZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mXG4gICBQeXRob24uICAqQW55KiB1c2Ugb2YgIl9fKl9fIiBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lcyBub3RcbiAgIGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlIHdpdGhvdXRcbiAgIHdhcm5pbmcuXG5cbiJfXyoiXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKLSAnaWRlbnRpZmllcnMnOiAnXG5JZGVudGlmaWVycyBhbmQga2V5d29yZHNcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5JZGVudGlmaWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyAqbmFtZXMqKSBhcmUgZGVzY3JpYmVkIGJ5IHRoZVxuZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnMuXG5cblRoZSBzeW50YXggb2YgaWRlbnRpZmllcnMgaW4gUHl0aG9uIGlzIGJhc2VkIG9uIHRoZSBVbmljb2RlIHN0YW5kYXJkXG5hbm5leCBVQVgtMzEsIHdpdGggZWxhYm9yYXRpb24gYW5kIGNoYW5nZXMgYXMgZGVmaW5lZCBiZWxvdzsgc2VlIGFsc29cbioqUEVQIDMxMzEqKiBmb3IgZnVydGhlciBkZXRhaWxzLlxuXG5XaXRoaW4gdGhlIEFTQ0lJIHJhbmdlIChVKzAwMDEuLlUrMDA3RiksIHRoZSB2YWxpZCBjaGFyYWN0ZXJzIGZvclxuaWRlbnRpZmllcnMgYXJlIHRoZSBzYW1lIGFzIGluIFB5dGhvbiAyLng6IHRoZSB1cHBlcmNhc2UgYW5kIGxvd2VyY2FzZVxubGV0dGVycyAiQSIgdGhyb3VnaCAiWiIsIHRoZSB1bmRlcnNjb3JlICJfIiBhbmQsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0XG5jaGFyYWN0ZXIsIHRoZSBkaWdpdHMgIjAiIHRocm91Z2ggIjkiLlxuXG5QeXRob24gMy4wIGludHJvZHVjZXMgYWRkaXRpb25hbCBjaGFyYWN0ZXJzIGZyb20gb3V0c2lkZSB0aGUgQVNDSUlcbnJhbmdlIChzZWUgKipQRVAgMzEzMSoqKS4gIEZvciB0aGVzZSBjaGFyYWN0ZXJzLCB0aGUgY2xhc3NpZmljYXRpb25cbnVzZXMgdGhlIHZlcnNpb24gb2YgdGhlIFVuaWNvZGUgQ2hhcmFjdGVyIERhdGFiYXNlIGFzIGluY2x1ZGVkIGluIHRoZVxuInVuaWNvZGVkYXRhIiBtb2R1bGUuXG5cbklkZW50aWZpZXJzIGFyZSB1bmxpbWl0ZWQgaW4gbGVuZ3RoLiAgQ2FzZSBpcyBzaWduaWZpY2FudC5cblxuICAgaWRlbnRpZmllciAgIDo6PSB4aWRfc3RhcnQgeGlkX2NvbnRpbnVlKlxuICAgaWRfc3RhcnQgICAgIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gZ2VuZXJhbCBjYXRlZ29yaWVzIEx1LCBMbCwgTHQsIExtLCBMbywgTmwsIHRoZSB1bmRlcnNjb3JlLCBhbmQgY2hhcmFjdGVycyB3aXRoIHRoZSBPdGhlcl9JRF9TdGFydCBwcm9wZXJ0eT5cbiAgIGlkX2NvbnRpbnVlICA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX3N0YXJ0LCBwbHVzIGNoYXJhY3RlcnMgaW4gdGhlIGNhdGVnb3JpZXMgTW4sIE1jLCBOZCwgUGMgYW5kIG90aGVycyB3aXRoIHRoZSBPdGhlcl9JRF9Db250aW51ZSBwcm9wZXJ0eT5cbiAgIHhpZF9zdGFydCAgICA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGlkX3N0YXJ0IHdob3NlIE5GS0Mgbm9ybWFsaXphdGlvbiBpcyBpbiAiaWRfc3RhcnQgeGlkX2NvbnRpbnVlKiI+XG4gICB4aWRfY29udGludWUgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBpZF9jb250aW51ZSB3aG9zZSBORktDIG5vcm1hbGl6YXRpb24gaXMgaW4gImlkX2NvbnRpbnVlKiI+XG5cblRoZSBVbmljb2RlIGNhdGVnb3J5IGNvZGVzIG1lbnRpb25lZCBhYm92ZSBzdGFuZCBmb3I6XG5cbiogKkx1KiAtIHVwcGVyY2FzZSBsZXR0ZXJzXG5cbiogKkxsKiAtIGxvd2VyY2FzZSBsZXR0ZXJzXG5cbiogKkx0KiAtIHRpdGxlY2FzZSBsZXR0ZXJzXG5cbiogKkxtKiAtIG1vZGlmaWVyIGxldHRlcnNcblxuKiAqTG8qIC0gb3RoZXIgbGV0dGVyc1xuXG4qICpObCogLSBsZXR0ZXIgbnVtYmVyc1xuXG4qICpNbiogLSBub25zcGFjaW5nIG1hcmtzXG5cbiogKk1jKiAtIHNwYWNpbmcgY29tYmluaW5nIG1hcmtzXG5cbiogKk5kKiAtIGRlY2ltYWwgbnVtYmVyc1xuXG4qICpQYyogLSBjb25uZWN0b3IgcHVuY3R1YXRpb25zXG5cbiogKk90aGVyX0lEX1N0YXJ0KiAtIGV4cGxpY2l0IGxpc3Qgb2YgY2hhcmFjdGVycyBpbiBQcm9wTGlzdC50eHQgdG9cbiAgc3VwcG9ydCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXG4qICpPdGhlcl9JRF9Db250aW51ZSogLSBsaWtld2lzZVxuXG5BbGwgaWRlbnRpZmllcnMgYXJlIGNvbnZlcnRlZCBpbnRvIHRoZSBub3JtYWwgZm9ybSBORktDIHdoaWxlIHBhcnNpbmc7XG5jb21wYXJpc29uIG9mIGlkZW50aWZpZXJzIGlzIGJhc2VkIG9uIE5GS0MuXG5cbkEgbm9uLW5vcm1hdGl2ZSBIVE1MIGZpbGUgbGlzdGluZyBhbGwgdmFsaWQgaWRlbnRpZmllciBjaGFyYWN0ZXJzIGZvclxuVW5pY29kZSA0LjEgY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cuZGNsLmhwaS51bmktXG5wb3RzZGFtLmRlL2hvbWUvbG9ld2lzL3RhYmxlLTMxMzEuaHRtbC5cblxuXG5LZXl3b3Jkc1xuPT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBpZGVudGlmaWVycyBhcmUgdXNlZCBhcyByZXNlcnZlZCB3b3Jkcywgb3IgKmtleXdvcmRzKiBvZlxudGhlIGxhbmd1YWdlLCBhbmQgY2Fubm90IGJlIHVzZWQgYXMgb3JkaW5hcnkgaWRlbnRpZmllcnMuICBUaGV5IG11c3RcbmJlIHNwZWxsZWQgZXhhY3RseSBhcyB3cml0dGVuIGhlcmU6XG5cbiAgIEZhbHNlICAgICAgY2xhc3MgICAgICBmaW5hbGx5ICAgIGlzICAgICAgICAgcmV0dXJuXG4gICBOb25lICAgICAgIGNvbnRpbnVlICAgZm9yICAgICAgICBsYW1iZGEgICAgIHRyeVxuICAgVHJ1ZSAgICAgICBkZWYgICAgICAgIGZyb20gICAgICAgbm9ubG9jYWwgICB3aGlsZVxuICAgYW5kICAgICAgICBkZWwgICAgICAgIGdsb2JhbCAgICAgbm90ICAgICAgICB3aXRoXG4gICBhcyAgICAgICAgIGVsaWYgICAgICAgaWYgICAgICAgICBvciAgICAgICAgIHlpZWxkXG4gICBhc3NlcnQgICAgIGVsc2UgICAgICAgaW1wb3J0ICAgICBwYXNzXG4gICBicmVhayAgICAgIGV4Y2VwdCAgICAgaW4gICAgICAgICByYWlzZVxuXG5cblJlc2VydmVkIGNsYXNzZXMgb2YgaWRlbnRpZmllcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQ2VydGFpbiBjbGFzc2VzIG9mIGlkZW50aWZpZXJzIChiZXNpZGVzIGtleXdvcmRzKSBoYXZlIHNwZWNpYWxcbm1lYW5pbmdzLiAgVGhlc2UgY2xhc3NlcyBhcmUgaWRlbnRpZmllZCBieSB0aGUgcGF0dGVybnMgb2YgbGVhZGluZyBhbmRcbnRyYWlsaW5nIHVuZGVyc2NvcmUgY2hhcmFjdGVyczpcblxuIl8qIlxuICAgTm90IGltcG9ydGVkIGJ5ICJmcm9tIG1vZHVsZSBpbXBvcnQgKiIuICBUaGUgc3BlY2lhbCBpZGVudGlmaWVyICJfIlxuICAgaXMgdXNlZCBpbiB0aGUgaW50ZXJhY3RpdmUgaW50ZXJwcmV0ZXIgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiB0aGVcbiAgIGxhc3QgZXZhbHVhdGlvbjsgaXQgaXMgc3RvcmVkIGluIHRoZSAiYnVpbHRpbnMiIG1vZHVsZS4gIFdoZW4gbm90XG4gICBpbiBpbnRlcmFjdGl2ZSBtb2RlLCAiXyIgaGFzIG5vIHNwZWNpYWwgbWVhbmluZyBhbmQgaXMgbm90IGRlZmluZWQuXG4gICBTZWUgc2VjdGlvbiAqVGhlIGltcG9ydCBzdGF0ZW1lbnQqLlxuXG4gICBOb3RlOiBUaGUgbmFtZSAiXyIgaXMgb2Z0ZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoXG4gICAgIGludGVybmF0aW9uYWxpemF0aW9uOyByZWZlciB0byB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlXG4gICAgICJnZXR0ZXh0IiBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyBjb252ZW50aW9uLlxuXG4iX18qX18iXG4gICBTeXN0ZW0tZGVmaW5lZCBuYW1lcy4gVGhlc2UgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIGludGVycHJldGVyXG4gICBhbmQgaXRzIGltcGxlbWVudGF0aW9uIChpbmNsdWRpbmcgdGhlIHN0YW5kYXJkIGxpYnJhcnkpLiAgQ3VycmVudFxuICAgc3lzdGVtIG5hbWVzIGFyZSBkaXNjdXNzZWQgaW4gdGhlICpTcGVjaWFsIG1ldGhvZCBuYW1lcyogc2VjdGlvblxuICAgYW5kIGVsc2V3aGVyZS4gIE1vcmUgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZCBpbiBmdXR1cmUgdmVyc2lvbnMgb2ZcbiAgIFB5dGhvbi4gICpBbnkqIHVzZSBvZiAiX18qX18iIG5hbWVzLCBpbiBhbnkgY29udGV4dCwgdGhhdCBkb2VzIG5vdFxuICAgZm9sbG93IGV4cGxpY2l0bHkgZG9jdW1lbnRlZCB1c2UsIGlzIHN1YmplY3QgdG8gYnJlYWthZ2Ugd2l0aG91dFxuICAgd2FybmluZy5cblxuIl9fKiJcbiAgIENsYXNzLXByaXZhdGUgbmFtZXMuICBOYW1lcyBpbiB0aGlzIGNhdGVnb3J5LCB3aGVuIHVzZWQgd2l0aGluIHRoZVxuICAgY29udGV4dCBvZiBhIGNsYXNzIGRlZmluaXRpb24sIGFyZSByZS13cml0dGVuIHRvIHVzZSBhIG1hbmdsZWQgZm9ybVxuICAgdG8gaGVscCBhdm9pZCBuYW1lIGNsYXNoZXMgYmV0d2VlbiAicHJpdmF0ZSIgYXR0cmlidXRlcyBvZiBiYXNlIGFuZFxuICAgZGVyaXZlZCBjbGFzc2VzLiBTZWUgc2VjdGlvbiAqSWRlbnRpZmllcnMgKE5hbWVzKSouXG4nLAotICdpZic6ICdcblRoZSAiaWYiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqXG5cblRoZSAiaWYiIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlICJpZiIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cbicsCi0gJ2ltYWdpbmFyeSc6ICdcbkltYWdpbmFyeSBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqXG5cbkltYWdpbmFyeSBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgaW1hZ251bWJlciA6Oj0gKGZsb2F0bnVtYmVyIHwgaW50cGFydCkgKCJqIiB8ICJKIilcblxuQW4gaW1hZ2luYXJ5IGxpdGVyYWwgeWllbGRzIGEgY29tcGxleCBudW1iZXIgd2l0aCBhIHJlYWwgcGFydCBvZiAwLjAuXG5Db21wbGV4IG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGFzIGEgcGFpciBvZiBmbG9hdGluZyBwb2ludCBudW1iZXJzXG5hbmQgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgb24gdGhlaXIgcmFuZ2UuICBUbyBjcmVhdGUgYSBjb21wbGV4XG5udW1iZXIgd2l0aCBhIG5vbnplcm8gcmVhbCBwYXJ0LCBhZGQgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgdG8gaXQsXG5lLmcuLCAiKDMrNGopIi4gIFNvbWUgZXhhbXBsZXMgb2YgaW1hZ2luYXJ5IGxpdGVyYWxzOlxuXG4gICAzLjE0aiAgIDEwLmogICAgMTBqICAgICAuMDAxaiAgIDFlMTAwaiAgMy4xNGUtMTBqXG4nLAotICdpbXBvcnQnOiAnXG5UaGUgImltcG9ydCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGltcG9ydF9zdG10ICAgICA6Oj0gImltcG9ydCIgbW9kdWxlIFsiYXMiIG5hbWVdICggIiwiIG1vZHVsZSBbImFzIiBuYW1lXSApKlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIHJlbGF0aXZlX21vZHVsZSAiaW1wb3J0IiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgKCAiLCIgaWRlbnRpZmllciBbImFzIiBuYW1lXSApKlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIHJlbGF0aXZlX21vZHVsZSAiaW1wb3J0IiAiKCIgaWRlbnRpZmllciBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICggIiwiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV0gKSogWyIsIl0gIikiXG4gICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgbW9kdWxlICJpbXBvcnQiICIqIlxuICAgbW9kdWxlICAgICAgICAgIDo6PSAoaWRlbnRpZmllciAiLiIpKiBpZGVudGlmaWVyXG4gICByZWxhdGl2ZV9tb2R1bGUgOjo9ICIuIiogbW9kdWxlIHwgIi4iK1xuICAgbmFtZSAgICAgICAgICAgIDo6PSBpZGVudGlmaWVyXG5cblRoZSBiYXNpYyBpbXBvcnQgc3RhdGVtZW50IChubyAiZnJvbSIgY2xhdXNlKSBpcyBleGVjdXRlZCBpbiB0d29cbnN0ZXBzOlxuXG4xLiBmaW5kIGEgbW9kdWxlLCBsb2FkaW5nIGFuZCBpbml0aWFsaXppbmcgaXQgaWYgbmVjZXNzYXJ5XG5cbjIuIGRlZmluZSBhIG5hbWUgb3IgbmFtZXMgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBmb3IgdGhlIHNjb3BlXG4gICB3aGVyZSB0aGUgImltcG9ydCIgc3RhdGVtZW50IG9jY3Vycy5cblxuV2hlbiB0aGUgc3RhdGVtZW50IGNvbnRhaW5zIG11bHRpcGxlIGNsYXVzZXMgKHNlcGFyYXRlZCBieSBjb21tYXMpIHRoZVxudHdvIHN0ZXBzIGFyZSBjYXJyaWVkIG91dCBzZXBhcmF0ZWx5IGZvciBlYWNoIGNsYXVzZSwganVzdCBhcyB0aG91Z2hcbnRoZSBjbGF1c2VzIGhhZCBiZWVuIHNlcGFyYXRlZCBvdXQgaW50byBpbmRpdmlkaXVhbCBpbXBvcnQgc3RhdGVtZW50cy5cblxuVGhlIGRldGFpbHMgb2YgdGhlIGZpcnN0IHN0ZXAsIGZpbmRpbmcgYW5kIGxvYWRpbmcgbW9kdWxlcyBpc1xuZGVzY3JpYmVkIGluIGdyZWF0ZXIgZGV0YWlsIGluIHRoZSBzZWN0aW9uIG9uIHRoZSAqaW1wb3J0IHN5c3RlbSosXG53aGljaCBhbHNvIGRlc2NyaWJlcyB0aGUgdmFyaW91cyB0eXBlcyBvZiBwYWNrYWdlcyBhbmQgbW9kdWxlcyB0aGF0XG5jYW4gYmUgaW1wb3J0ZWQsIGFzIHdlbGwgYXMgYWxsIHRoZSBob29rcyB0aGF0IGNhbiBiZSB1c2VkIHRvXG5jdXN0b21pemUgdGhlIGltcG9ydCBzeXN0ZW0uIE5vdGUgdGhhdCBmYWlsdXJlcyBpbiB0aGlzIHN0ZXAgbWF5XG5pbmRpY2F0ZSBlaXRoZXIgdGhhdCB0aGUgbW9kdWxlIGNvdWxkIG5vdCBiZSBsb2NhdGVkLCAqb3IqIHRoYXQgYW5cbmVycm9yIG9jY3VycmVkIHdoaWxlIGluaXRpYWxpemluZyB0aGUgbW9kdWxlLCB3aGljaCBpbmNsdWRlcyBleGVjdXRpb25cbm9mIHRoZSBtb2R1bGVcJ3MgY29kZS5cblxuSWYgdGhlIHJlcXVlc3RlZCBtb2R1bGUgaXMgcmV0cmlldmVkIHN1Y2Nlc3NmdWxseSwgaXQgd2lsbCBiZSBtYWRlXG5hdmFpbGFibGUgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBpbiBvbmUgb2YgdGhyZWUgd2F5czpcblxuKiBJZiB0aGUgbW9kdWxlIG5hbWUgaXMgZm9sbG93ZWQgYnkgImFzIiwgdGhlbiB0aGUgbmFtZSBmb2xsb3dpbmdcbiAgImFzIiBpcyBib3VuZCBkaXJlY3RseSB0byB0aGUgaW1wb3J0ZWQgbW9kdWxlLlxuXG4qIElmIG5vIG90aGVyIG5hbWUgaXMgc3BlY2lmaWVkLCBhbmQgdGhlIG1vZHVsZSBiZWluZyBpbXBvcnRlZCBpcyBhXG4gIHRvcCBsZXZlbCBtb2R1bGUsIHRoZSBtb2R1bGVcJ3MgbmFtZSBpcyBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlXG4gIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbXBvcnRlZCBtb2R1bGVcblxuKiBJZiB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkIGlzICpub3QqIGEgdG9wIGxldmVsIG1vZHVsZSwgdGhlbiB0aGVcbiAgbmFtZSBvZiB0aGUgdG9wIGxldmVsIHBhY2thZ2UgdGhhdCBjb250YWlucyB0aGUgbW9kdWxlIGlzIGJvdW5kIGluXG4gIHRoZSBsb2NhbCBuYW1lc3BhY2UgYXMgYSByZWZlcmVuY2UgdG8gdGhlIHRvcCBsZXZlbCBwYWNrYWdlLiBUaGVcbiAgaW1wb3J0ZWQgbW9kdWxlIG11c3QgYmUgYWNjZXNzZWQgdXNpbmcgaXRzIGZ1bGwgcXVhbGlmaWVkIG5hbWVcbiAgcmF0aGVyIHRoYW4gZGlyZWN0bHlcblxuVGhlICJmcm9tIiBmb3JtIHVzZXMgYSBzbGlnaHRseSBtb3JlIGNvbXBsZXggcHJvY2VzczpcblxuMS4gZmluZCB0aGUgbW9kdWxlIHNwZWNpZmllZCBpbiB0aGUgImZyb20iIGNsYXVzZSBsb2FkaW5nIGFuZFxuICAgaW5pdGlhbGl6aW5nIGl0IGlmIG5lY2Vzc2FyeTtcblxuMi4gZm9yIGVhY2ggb2YgdGhlIGlkZW50aWZpZXJzIHNwZWNpZmllZCBpbiB0aGUgImltcG9ydCIgY2xhdXNlczpcblxuICAgMS4gY2hlY2sgaWYgdGhlIGltcG9ydGVkIG1vZHVsZSBoYXMgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZVxuXG4gICAyLiBpZiBub3QsIGF0dGVtcHQgdG8gaW1wb3J0IGEgc3VibW9kdWxlIHdpdGggdGhhdCBuYW1lIGFuZCB0aGVuXG4gICAgICBjaGVjayB0aGUgaW1wb3J0ZWQgbW9kdWxlIGFnYWluIGZvciB0aGF0IGF0dHJpYnV0ZVxuXG4gICAzLiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBmb3VuZCwgIkltcG9ydEVycm9yIiBpcyByYWlzZWQuXG5cbiAgIDQuIG90aGVyd2lzZSwgYSByZWZlcmVuY2UgdG8gdGhhdCB2YWx1ZSBpcyBib3VuZCBpbiB0aGUgbG9jYWxcbiAgICAgIG5hbWVzcGFjZSwgdXNpbmcgdGhlIG5hbWUgaW4gdGhlICJhcyIgY2xhdXNlIGlmIGl0IGlzIHByZXNlbnQsXG4gICAgICBvdGhlcndpc2UgdXNpbmcgdGhlIGF0dHJpYnV0ZSBuYW1lXG5cbkV4YW1wbGVzOlxuXG4gICBpbXBvcnQgZm9vICAgICAgICAgICAgICAgICAjIGZvbyBpbXBvcnRlZCBhbmQgYm91bmQgbG9jYWxseVxuICAgaW1wb3J0IGZvby5iYXIuYmF6ICAgICAgICAgIyBmb28uYmFyLmJheiBpbXBvcnRlZCwgZm9vIGJvdW5kIGxvY2FsbHlcbiAgIGltcG9ydCBmb28uYmFyLmJheiBhcyBmYmIgICMgZm9vLmJhci5iYXogaW1wb3J0ZWQgYW5kIGJvdW5kIGFzIGZiYlxuICAgZnJvbSBmb28uYmFyIGltcG9ydCBiYXogICAgIyBmb28uYmFyLmJheiBpbXBvcnRlZCBhbmQgYm91bmQgYXMgYmF6XG4gICBmcm9tIGZvbyBpbXBvcnQgYXR0ciAgICAgICAjIGZvbyBpbXBvcnRlZCBhbmQgZm9vLmF0dHIgYm91bmQgYXMgYXR0clxuXG5JZiB0aGUgbGlzdCBvZiBpZGVudGlmaWVycyBpcyByZXBsYWNlZCBieSBhIHN0YXIgKCJcJypcJyIpLCBhbGwgcHVibGljXG5uYW1lcyBkZWZpbmVkIGluIHRoZSBtb2R1bGUgYXJlIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZVxuc2NvcGUgd2hlcmUgdGhlICJpbXBvcnQiIHN0YXRlbWVudCBvY2N1cnMuXG5cblRoZSAqcHVibGljIG5hbWVzKiBkZWZpbmVkIGJ5IGEgbW9kdWxlIGFyZSBkZXRlcm1pbmVkIGJ5IGNoZWNraW5nIHRoZVxubW9kdWxlXCdzIG5hbWVzcGFjZSBmb3IgYSB2YXJpYWJsZSBuYW1lZCAiX19hbGxfXyI7IGlmIGRlZmluZWQsIGl0IG11c3RcbmJlIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyB3aGljaCBhcmUgbmFtZXMgZGVmaW5lZCBvciBpbXBvcnRlZCBieSB0aGF0XG5tb2R1bGUuICBUaGUgbmFtZXMgZ2l2ZW4gaW4gIl9fYWxsX18iIGFyZSBhbGwgY29uc2lkZXJlZCBwdWJsaWMgYW5kXG5hcmUgcmVxdWlyZWQgdG8gZXhpc3QuICBJZiAiX19hbGxfXyIgaXMgbm90IGRlZmluZWQsIHRoZSBzZXQgb2YgcHVibGljXG5uYW1lcyBpbmNsdWRlcyBhbGwgbmFtZXMgZm91bmQgaW4gdGhlIG1vZHVsZVwncyBuYW1lc3BhY2Ugd2hpY2ggZG8gbm90XG5iZWdpbiB3aXRoIGFuIHVuZGVyc2NvcmUgY2hhcmFjdGVyICgiXCdfXCciKS4gICJfX2FsbF9fIiBzaG91bGQgY29udGFpblxudGhlIGVudGlyZSBwdWJsaWMgQVBJLiBJdCBpcyBpbnRlbmRlZCB0byBhdm9pZCBhY2NpZGVudGFsbHkgZXhwb3J0aW5nXG5pdGVtcyB0aGF0IGFyZSBub3QgcGFydCBvZiB0aGUgQVBJIChzdWNoIGFzIGxpYnJhcnkgbW9kdWxlcyB3aGljaCB3ZXJlXG5pbXBvcnRlZCBhbmQgdXNlZCB3aXRoaW4gdGhlIG1vZHVsZSkuXG5cblRoZSAiZnJvbSIgZm9ybSB3aXRoICIqIiBtYXkgb25seSBvY2N1ciBpbiBhIG1vZHVsZSBzY29wZS4gIFRoZSB3aWxkXG5jYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSAiaW1wb3J0ICoiIC0tLSBpcyBvbmx5IGFsbG93ZWQgYXQgdGhlIG1vZHVsZVxubGV2ZWwuIEF0dGVtcHRpbmcgdG8gdXNlIGl0IGluIGNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb25zIHdpbGxcbnJhaXNlIGEgIlN5bnRheEVycm9yIi5cblxuV2hlbiBzcGVjaWZ5aW5nIHdoYXQgbW9kdWxlIHRvIGltcG9ydCB5b3UgZG8gbm90IGhhdmUgdG8gc3BlY2lmeSB0aGVcbmFic29sdXRlIG5hbWUgb2YgdGhlIG1vZHVsZS4gV2hlbiBhIG1vZHVsZSBvciBwYWNrYWdlIGlzIGNvbnRhaW5lZFxud2l0aGluIGFub3RoZXIgcGFja2FnZSBpdCBpcyBwb3NzaWJsZSB0byBtYWtlIGEgcmVsYXRpdmUgaW1wb3J0IHdpdGhpblxudGhlIHNhbWUgdG9wIHBhY2thZ2Ugd2l0aG91dCBoYXZpbmcgdG8gbWVudGlvbiB0aGUgcGFja2FnZSBuYW1lLiBCeVxudXNpbmcgbGVhZGluZyBkb3RzIGluIHRoZSBzcGVjaWZpZWQgbW9kdWxlIG9yIHBhY2thZ2UgYWZ0ZXIgImZyb20iIHlvdVxuY2FuIHNwZWNpZnkgaG93IGhpZ2ggdG8gdHJhdmVyc2UgdXAgdGhlIGN1cnJlbnQgcGFja2FnZSBoaWVyYXJjaHlcbndpdGhvdXQgc3BlY2lmeWluZyBleGFjdCBuYW1lcy4gT25lIGxlYWRpbmcgZG90IG1lYW5zIHRoZSBjdXJyZW50XG5wYWNrYWdlIHdoZXJlIHRoZSBtb2R1bGUgbWFraW5nIHRoZSBpbXBvcnQgZXhpc3RzLiBUd28gZG90cyBtZWFucyB1cFxub25lIHBhY2thZ2UgbGV2ZWwuIFRocmVlIGRvdHMgaXMgdXAgdHdvIGxldmVscywgZXRjLiBTbyBpZiB5b3UgZXhlY3V0ZVxuImZyb20gLiBpbXBvcnQgbW9kIiBmcm9tIGEgbW9kdWxlIGluIHRoZSAicGtnIiBwYWNrYWdlIHRoZW4geW91IHdpbGxcbmVuZCB1cCBpbXBvcnRpbmcgInBrZy5tb2QiLiBJZiB5b3UgZXhlY3V0ZSAiZnJvbSAuLnN1YnBrZzIgaW1wb3J0IG1vZCJcbmZyb20gd2l0aGluICJwa2cuc3VicGtnMSIgeW91IHdpbGwgaW1wb3J0ICJwa2cuc3VicGtnMi5tb2QiLiBUaGVcbnNwZWNpZmljYXRpb24gZm9yIHJlbGF0aXZlIGltcG9ydHMgaXMgY29udGFpbmVkIHdpdGhpbiAqKlBFUCAzMjgqKi5cblxuImltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkiIGlzIHByb3ZpZGVkIHRvIHN1cHBvcnQgYXBwbGljYXRpb25zIHRoYXRcbmRldGVybWluZSB3aGljaCBtb2R1bGVzIG5lZWQgdG8gYmUgbG9hZGVkIGR5bmFtaWNhbGx5LlxuXG5cbkZ1dHVyZSBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PVxuXG5BICpmdXR1cmUgc3RhdGVtZW50KiBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIgdGhhdCBhIHBhcnRpY3VsYXJcbm1vZHVsZSBzaG91bGQgYmUgY29tcGlsZWQgdXNpbmcgc3ludGF4IG9yIHNlbWFudGljcyB0aGF0IHdpbGwgYmVcbmF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBmdXR1cmUgcmVsZWFzZSBvZiBQeXRob24uICBUaGUgZnV0dXJlXG5zdGF0ZW1lbnQgaXMgaW50ZW5kZWQgdG8gZWFzZSBtaWdyYXRpb24gdG8gZnV0dXJlIHZlcnNpb25zIG9mIFB5dGhvblxudGhhdCBpbnRyb2R1Y2UgaW5jb21wYXRpYmxlIGNoYW5nZXMgdG8gdGhlIGxhbmd1YWdlLiAgSXQgYWxsb3dzIHVzZSBvZlxudGhlIG5ldyBmZWF0dXJlcyBvbiBhIHBlci1tb2R1bGUgYmFzaXMgYmVmb3JlIHRoZSByZWxlYXNlIGluIHdoaWNoIHRoZVxuZmVhdHVyZSBiZWNvbWVzIHN0YW5kYXJkLlxuXG4gICBmdXR1cmVfc3RhdGVtZW50IDo6PSAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqXG4gICAgICAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiAiX19mdXR1cmVfXyIgImltcG9ydCIgIigiIGZlYXR1cmUgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICgiLCIgZmVhdHVyZSBbImFzIiBuYW1lXSkqIFsiLCJdICIpIlxuICAgZmVhdHVyZSAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgbmFtZSAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgbXVzdCBhcHBlYXIgbmVhciB0aGUgdG9wIG9mIHRoZSBtb2R1bGUuICBUaGUgb25seVxubGluZXMgdGhhdCBjYW4gYXBwZWFyIGJlZm9yZSBhIGZ1dHVyZSBzdGF0ZW1lbnQgYXJlOlxuXG4qIHRoZSBtb2R1bGUgZG9jc3RyaW5nIChpZiBhbnkpLFxuXG4qIGNvbW1lbnRzLFxuXG4qIGJsYW5rIGxpbmVzLCBhbmRcblxuKiBvdGhlciBmdXR1cmUgc3RhdGVtZW50cy5cblxuVGhlIGZlYXR1cmVzIHJlY29nbml6ZWQgYnkgUHl0aG9uIDMuMCBhcmUgImFic29sdXRlX2ltcG9ydCIsXG4iZGl2aXNpb24iLCAiZ2VuZXJhdG9ycyIsICJ1bmljb2RlX2xpdGVyYWxzIiwgInByaW50X2Z1bmN0aW9uIixcbiJuZXN0ZWRfc2NvcGVzIiBhbmQgIndpdGhfc3RhdGVtZW50Ii4gIFRoZXkgYXJlIGFsbCByZWR1bmRhbnQgYmVjYXVzZVxudGhleSBhcmUgYWx3YXlzIGVuYWJsZWQsIGFuZCBvbmx5IGtlcHQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuXG5BIGZ1dHVyZSBzdGF0ZW1lbnQgaXMgcmVjb2duaXplZCBhbmQgdHJlYXRlZCBzcGVjaWFsbHkgYXQgY29tcGlsZVxudGltZTogQ2hhbmdlcyB0byB0aGUgc2VtYW50aWNzIG9mIGNvcmUgY29uc3RydWN0cyBhcmUgb2Z0ZW5cbmltcGxlbWVudGVkIGJ5IGdlbmVyYXRpbmcgZGlmZmVyZW50IGNvZGUuICBJdCBtYXkgZXZlbiBiZSB0aGUgY2FzZVxudGhhdCBhIG5ldyBmZWF0dXJlIGludHJvZHVjZXMgbmV3IGluY29tcGF0aWJsZSBzeW50YXggKHN1Y2ggYXMgYSBuZXdcbnJlc2VydmVkIHdvcmQpLCBpbiB3aGljaCBjYXNlIHRoZSBjb21waWxlciBtYXkgbmVlZCB0byBwYXJzZSB0aGVcbm1vZHVsZSBkaWZmZXJlbnRseS4gIFN1Y2ggZGVjaXNpb25zIGNhbm5vdCBiZSBwdXNoZWQgb2ZmIHVudGlsXG5ydW50aW1lLlxuXG5Gb3IgYW55IGdpdmVuIHJlbGVhc2UsIHRoZSBjb21waWxlciBrbm93cyB3aGljaCBmZWF0dXJlIG5hbWVzIGhhdmVcbmJlZW4gZGVmaW5lZCwgYW5kIHJhaXNlcyBhIGNvbXBpbGUtdGltZSBlcnJvciBpZiBhIGZ1dHVyZSBzdGF0ZW1lbnRcbmNvbnRhaW5zIGEgZmVhdHVyZSBub3Qga25vd24gdG8gaXQuXG5cblRoZSBkaXJlY3QgcnVudGltZSBzZW1hbnRpY3MgYXJlIHRoZSBzYW1lIGFzIGZvciBhbnkgaW1wb3J0IHN0YXRlbWVudDpcbnRoZXJlIGlzIGEgc3RhbmRhcmQgbW9kdWxlICJfX2Z1dHVyZV9fIiwgZGVzY3JpYmVkIGxhdGVyLCBhbmQgaXQgd2lsbFxuYmUgaW1wb3J0ZWQgaW4gdGhlIHVzdWFsIHdheSBhdCB0aGUgdGltZSB0aGUgZnV0dXJlIHN0YXRlbWVudCBpc1xuZXhlY3V0ZWQuXG5cblRoZSBpbnRlcmVzdGluZyBydW50aW1lIHNlbWFudGljcyBkZXBlbmQgb24gdGhlIHNwZWNpZmljIGZlYXR1cmVcbmVuYWJsZWQgYnkgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQuXG5cbk5vdGUgdGhhdCB0aGVyZSBpcyBub3RoaW5nIHNwZWNpYWwgYWJvdXQgdGhlIHN0YXRlbWVudDpcblxuICAgaW1wb3J0IF9fZnV0dXJlX18gW2FzIG5hbWVdXG5cblRoYXQgaXMgbm90IGEgZnV0dXJlIHN0YXRlbWVudDsgaXRcJ3MgYW4gb3JkaW5hcnkgaW1wb3J0IHN0YXRlbWVudCB3aXRoXG5ubyBzcGVjaWFsIHNlbWFudGljcyBvciBzeW50YXggcmVzdHJpY3Rpb25zLlxuXG5Db2RlIGNvbXBpbGVkIGJ5IGNhbGxzIHRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImV4ZWMoKSIgYW5kXG4iY29tcGlsZSgpIiB0aGF0IG9jY3VyIGluIGEgbW9kdWxlICJNIiBjb250YWluaW5nIGEgZnV0dXJlIHN0YXRlbWVudFxud2lsbCwgYnkgZGVmYXVsdCwgdXNlIHRoZSBuZXcgc3ludGF4IG9yIHNlbWFudGljcyBhc3NvY2lhdGVkIHdpdGggdGhlXG5mdXR1cmUgc3RhdGVtZW50LiAgVGhpcyBjYW4gYmUgY29udHJvbGxlZCBieSBvcHRpb25hbCBhcmd1bWVudHMgdG9cbiJjb21waWxlKCkiIC0tLSBzZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhhdCBmdW5jdGlvbiBmb3IgZGV0YWlscy5cblxuQSBmdXR1cmUgc3RhdGVtZW50IHR5cGVkIGF0IGFuIGludGVyYWN0aXZlIGludGVycHJldGVyIHByb21wdCB3aWxsXG50YWtlIGVmZmVjdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGludGVycHJldGVyIHNlc3Npb24uICBJZiBhblxuaW50ZXJwcmV0ZXIgaXMgc3RhcnRlZCB3aXRoIHRoZSAqLWkqIG9wdGlvbiwgaXMgcGFzc2VkIGEgc2NyaXB0IG5hbWVcbnRvIGV4ZWN1dGUsIGFuZCB0aGUgc2NyaXB0IGluY2x1ZGVzIGEgZnV0dXJlIHN0YXRlbWVudCwgaXQgd2lsbCBiZSBpblxuZWZmZWN0IGluIHRoZSBpbnRlcmFjdGl2ZSBzZXNzaW9uIHN0YXJ0ZWQgYWZ0ZXIgdGhlIHNjcmlwdCBpc1xuZXhlY3V0ZWQuXG5cblNlZSBhbHNvOiAqKlBFUCAyMzYqKiAtIEJhY2sgdG8gdGhlIF9fZnV0dXJlX19cblxuICAgICBUaGUgb3JpZ2luYWwgcHJvcG9zYWwgZm9yIHRoZSBfX2Z1dHVyZV9fIG1lY2hhbmlzbS5cbicsCi0gJ2luJzogJ1xuQ29tcGFyaXNvbnNcbioqKioqKioqKioqXG5cblVubGlrZSBDLCBhbGwgY29tcGFyaXNvbiBvcGVyYXRpb25zIGluIFB5dGhvbiBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LFxud2hpY2ggaXMgbG93ZXIgdGhhbiB0aGF0IG9mIGFueSBhcml0aG1ldGljLCBzaGlmdGluZyBvciBiaXR3aXNlXG5vcGVyYXRpb24uICBBbHNvIHVubGlrZSBDLCBleHByZXNzaW9ucyBsaWtlICJhIDwgYiA8IGMiIGhhdmUgdGhlXG5pbnRlcnByZXRhdGlvbiB0aGF0IGlzIGNvbnZlbnRpb25hbCBpbiBtYXRoZW1hdGljczpcblxuICAgY29tcGFyaXNvbiAgICA6Oj0gb3JfZXhwciAoIGNvbXBfb3BlcmF0b3Igb3JfZXhwciApKlxuICAgY29tcF9vcGVyYXRvciA6Oj0gIjwiIHwgIj4iIHwgIj09IiB8ICI+PSIgfCAiPD0iIHwgIiE9IlxuICAgICAgICAgICAgICAgICAgICAgfCAiaXMiIFsibm90Il0gfCBbIm5vdCJdICJpbiJcblxuQ29tcGFyaXNvbnMgeWllbGQgYm9vbGVhbiB2YWx1ZXM6ICJUcnVlIiBvciAiRmFsc2UiLlxuXG5Db21wYXJpc29ucyBjYW4gYmUgY2hhaW5lZCBhcmJpdHJhcmlseSwgZS5nLiwgInggPCB5IDw9IHoiIGlzXG5lcXVpdmFsZW50IHRvICJ4IDwgeSBhbmQgeSA8PSB6IiwgZXhjZXB0IHRoYXQgInkiIGlzIGV2YWx1YXRlZCBvbmx5XG5vbmNlIChidXQgaW4gYm90aCBjYXNlcyAieiIgaXMgbm90IGV2YWx1YXRlZCBhdCBhbGwgd2hlbiAieCA8IHkiIGlzXG5mb3VuZCB0byBiZSBmYWxzZSkuXG5cbkZvcm1hbGx5LCBpZiAqYSosICpiKiwgKmMqLCAuLi4sICp5KiwgKnoqIGFyZSBleHByZXNzaW9ucyBhbmQgKm9wMSosXG4qb3AyKiwgLi4uLCAqb3BOKiBhcmUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIHRoZW4gImEgb3AxIGIgb3AyIGMgLi4uIHlcbm9wTiB6IiBpcyBlcXVpdmFsZW50IHRvICJhIG9wMSBiIGFuZCBiIG9wMiBjIGFuZCAuLi4geSBvcE4geiIsIGV4Y2VwdFxudGhhdCBlYWNoIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGF0IG1vc3Qgb25jZS5cblxuTm90ZSB0aGF0ICJhIG9wMSBiIG9wMiBjIiBkb2VzblwndCBpbXBseSBhbnkga2luZCBvZiBjb21wYXJpc29uIGJldHdlZW5cbiphKiBhbmQgKmMqLCBzbyB0aGF0LCBlLmcuLCAieCA8IHkgPiB6IiBpcyBwZXJmZWN0bHkgbGVnYWwgKHRob3VnaFxucGVyaGFwcyBub3QgcHJldHR5KS5cblxuVGhlIG9wZXJhdG9ycyAiPCIsICI+IiwgIj09IiwgIj49IiwgIjw9IiwgYW5kICIhPSIgY29tcGFyZSB0aGUgdmFsdWVzXG5vZiB0d28gb2JqZWN0cy4gIFRoZSBvYmplY3RzIG5lZWQgbm90IGhhdmUgdGhlIHNhbWUgdHlwZS4gSWYgYm90aCBhcmVcbm51bWJlcnMsIHRoZXkgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLiAgT3RoZXJ3aXNlLCB0aGUgIj09IiBhbmRcbiIhPSIgb3BlcmF0b3JzICphbHdheXMqIGNvbnNpZGVyIG9iamVjdHMgb2YgZGlmZmVyZW50IHR5cGVzIHRvIGJlXG51bmVxdWFsLCB3aGlsZSB0aGUgIjwiLCAiPiIsICI+PSIgYW5kICI8PSIgb3BlcmF0b3JzIHJhaXNlIGFcbiJUeXBlRXJyb3IiIHdoZW4gY29tcGFyaW5nIG9iamVjdHMgb2YgZGlmZmVyZW50IHR5cGVzIHRoYXQgZG8gbm90XG5pbXBsZW1lbnQgdGhlc2Ugb3BlcmF0b3JzIGZvciB0aGUgZ2l2ZW4gcGFpciBvZiB0eXBlcy4gIFlvdSBjYW5cbmNvbnRyb2wgY29tcGFyaXNvbiBiZWhhdmlvciBvZiBvYmplY3RzIG9mIG5vbi1idWlsdC1pbiB0eXBlcyBieVxuZGVmaW5pbmcgcmljaCBjb21wYXJpc29uIG1ldGhvZHMgbGlrZSAiX19ndF9fKCkiLCBkZXNjcmliZWQgaW4gc2VjdGlvblxuKkJhc2ljIGN1c3RvbWl6YXRpb24qLlxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZSBkZXBlbmRzIG9uIHRoZSB0eXBlOlxuXG4qIE51bWJlcnMgYXJlIGNvbXBhcmVkIGFyaXRobWV0aWNhbGx5LlxuXG4qIFRoZSB2YWx1ZXMgImZsb2F0KFwnTmFOXCcpIiBhbmQgIkRlY2ltYWwoXCdOYU5cJykiIGFyZSBzcGVjaWFsLiBUaGVcbiAgYXJlIGlkZW50aWNhbCB0byB0aGVtc2VsdmVzLCAieCBpcyB4IiBidXQgYXJlIG5vdCBlcXVhbCB0b1xuICB0aGVtc2VsdmVzLCAieCAhPSB4Ii4gIEFkZGl0aW9uYWxseSwgY29tcGFyaW5nIGFueSB2YWx1ZSB0byBhXG4gIG5vdC1hLW51bWJlciB2YWx1ZSB3aWxsIHJldHVybiAiRmFsc2UiLiAgRm9yIGV4YW1wbGUsIGJvdGggIjMgPFxuICBmbG9hdChcJ05hTlwnKSIgYW5kICJmbG9hdChcJ05hTlwnKSA8IDMiIHdpbGwgcmV0dXJuICJGYWxzZSIuXG5cbiogQnl0ZXMgb2JqZWN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWNcbiAgdmFsdWVzIG9mIHRoZWlyIGVsZW1lbnRzLlxuXG4qIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIHRoZSBudW1lcmljXG4gIGVxdWl2YWxlbnRzICh0aGUgcmVzdWx0IG9mIHRoZSBidWlsdC1pbiBmdW5jdGlvbiAib3JkKCkiKSBvZiB0aGVpclxuICBjaGFyYWN0ZXJzLiBbM10gU3RyaW5nIGFuZCBieXRlcyBvYmplY3QgY2FuXCd0IGJlIGNvbXBhcmVkIVxuXG4qIFR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IHVzaW5nIGNvbXBhcmlzb25cbiAgb2YgY29ycmVzcG9uZGluZyBlbGVtZW50cy4gIFRoaXMgbWVhbnMgdGhhdCB0byBjb21wYXJlIGVxdWFsLCBlYWNoXG4gIGVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG4gIHR5cGUgYW5kIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLlxuXG4gIElmIG5vdCBlcXVhbCwgdGhlIHNlcXVlbmNlcyBhcmUgb3JkZXJlZCB0aGUgc2FtZSBhcyB0aGVpciBmaXJzdFxuICBkaWZmZXJpbmcgZWxlbWVudHMuICBGb3IgZXhhbXBsZSwgIlsxLDIseF0gPD0gWzEsMix5XSIgaGFzIHRoZSBzYW1lXG4gIHZhbHVlIGFzICJ4IDw9IHkiLiAgSWYgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBkb2VzIG5vdCBleGlzdCwgdGhlXG4gIHNob3J0ZXIgc2VxdWVuY2UgaXMgb3JkZXJlZCBmaXJzdCAoZm9yIGV4YW1wbGUsICJbMSwyXSA8IFsxLDIsM10iKS5cblxuKiBNYXBwaW5ncyAoZGljdGlvbmFyaWVzKSBjb21wYXJlIGVxdWFsIGlmIGFuZCBvbmx5IGlmIHRoZXkgaGF2ZSB0aGVcbiAgc2FtZSAiKGtleSwgdmFsdWUpIiBwYWlycy4gT3JkZXIgY29tcGFyaXNvbnMgIihcJzxcJywgXCc8PVwnLCBcJz49XCcsXG4gIFwnPlwnKSIgcmFpc2UgIlR5cGVFcnJvciIuXG5cbiogU2V0cyBhbmQgZnJvemVuc2V0cyBkZWZpbmUgY29tcGFyaXNvbiBvcGVyYXRvcnMgdG8gbWVhbiBzdWJzZXQgYW5kXG4gIHN1cGVyc2V0IHRlc3RzLiAgVGhvc2UgcmVsYXRpb25zIGRvIG5vdCBkZWZpbmUgdG90YWwgb3JkZXJpbmdzICh0aGVcbiAgdHdvIHNldHMgInsxLDJ9IiBhbmQgezIsM30gYXJlIG5vdCBlcXVhbCwgbm9yIHN1YnNldHMgb2Ygb25lXG4gIGFub3RoZXIsIG5vciBzdXBlcnNldHMgb2Ygb25lIGFub3RoZXIpLiAgQWNjb3JkaW5nbHksIHNldHMgYXJlIG5vdFxuICBhcHByb3ByaWF0ZSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9ucyB3aGljaCBkZXBlbmQgb24gdG90YWwgb3JkZXJpbmcuXG4gIEZvciBleGFtcGxlLCAibWluKCkiLCAibWF4KCkiLCBhbmQgInNvcnRlZCgpIiBwcm9kdWNlIHVuZGVmaW5lZFxuICByZXN1bHRzIGdpdmVuIGEgbGlzdCBvZiBzZXRzIGFzIGlucHV0cy5cblxuKiBNb3N0IG90aGVyIG9iamVjdHMgb2YgYnVpbHQtaW4gdHlwZXMgY29tcGFyZSB1bmVxdWFsIHVubGVzcyB0aGV5XG4gIGFyZSB0aGUgc2FtZSBvYmplY3Q7IHRoZSBjaG9pY2Ugd2hldGhlciBvbmUgb2JqZWN0IGlzIGNvbnNpZGVyZWRcbiAgc21hbGxlciBvciBsYXJnZXIgdGhhbiBhbm90aGVyIG9uZSBpcyBtYWRlIGFyYml0cmFyaWx5IGJ1dFxuICBjb25zaXN0ZW50bHkgd2l0aGluIG9uZSBleGVjdXRpb24gb2YgYSBwcm9ncmFtLlxuXG5Db21wYXJpc29uIG9mIG9iamVjdHMgb2YgdGhlIGRpZmZlcmluZyB0eXBlcyBkZXBlbmRzIG9uIHdoZXRoZXIgZWl0aGVyXG5vZiB0aGUgdHlwZXMgcHJvdmlkZSBleHBsaWNpdCBzdXBwb3J0IGZvciB0aGUgY29tcGFyaXNvbi4gIE1vc3Rcbm51bWVyaWMgdHlwZXMgY2FuIGJlIGNvbXBhcmVkIHdpdGggb25lIGFub3RoZXIuICBXaGVuIGNyb3NzLXR5cGVcbmNvbXBhcmlzb24gaXMgbm90IHN1cHBvcnRlZCwgdGhlIGNvbXBhcmlzb24gbWV0aG9kIHJldHVybnNcbiJOb3RJbXBsZW1lbnRlZCIuXG5cblRoZSBvcGVyYXRvcnMgImluIiBhbmQgIm5vdCBpbiIgdGVzdCBmb3IgbWVtYmVyc2hpcC4gICJ4IGluIHMiXG5ldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgInhcbm5vdCBpbiBzIiByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiAieCBpbiBzIi4gIEFsbCBidWlsdC1pbiBzZXF1ZW5jZXNcbmFuZCBzZXQgdHlwZXMgc3VwcG9ydCB0aGlzIGFzIHdlbGwgYXMgZGljdGlvbmFyeSwgZm9yIHdoaWNoICJpbiIgdGVzdHNcbndoZXRoZXIgYSB0aGUgZGljdGlvbmFyeSBoYXMgYSBnaXZlbiBrZXkuIEZvciBjb250YWluZXIgdHlwZXMgc3VjaCBhc1xubGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0LCBkaWN0LCBvciBjb2xsZWN0aW9ucy5kZXF1ZSwgdGhlXG5leHByZXNzaW9uICJ4IGluIHkiIGlzIGVxdWl2YWxlbnQgdG8gImFueSh4IGlzIGUgb3IgeCA9PSBlIGZvciBlIGluXG55KSIuXG5cbkZvciB0aGUgc3RyaW5nIGFuZCBieXRlcyB0eXBlcywgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogaXNcbmEgc3Vic3RyaW5nIG9mICp5Ki4gIEFuIGVxdWl2YWxlbnQgdGVzdCBpcyAieS5maW5kKHgpICE9IC0xIi4gIEVtcHR5XG5zdHJpbmdzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBiZSBhIHN1YnN0cmluZyBvZiBhbnkgb3RoZXIgc3RyaW5nLFxuc28gIiIiIGluICJhYmMiIiB3aWxsIHJldHVybiAiVHJ1ZSIuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlICJfX2NvbnRhaW5zX18oKSIgbWV0aG9kLCAieFxuaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAieS5fX2NvbnRhaW5zX18oeCkiIGlzIHRydWUuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkbyBub3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIgYnV0IGRvXG5kZWZpbmUgIl9faXRlcl9fKCkiLCAieCBpbiB5IiBpcyB0cnVlIGlmIHNvbWUgdmFsdWUgInoiIHdpdGggInggPT0geiJcbmlzIHByb2R1Y2VkIHdoaWxlIGl0ZXJhdGluZyBvdmVyICJ5Ii4gIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWRcbmR1cmluZyB0aGUgaXRlcmF0aW9uLCBpdCBpcyBhcyBpZiAiaW4iIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbi5cblxuTGFzdGx5LCB0aGUgb2xkLXN0eWxlIGl0ZXJhdGlvbiBwcm90b2NvbCBpcyB0cmllZDogaWYgYSBjbGFzcyBkZWZpbmVzXG4iX19nZXRpdGVtX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgYSBub24tXG5uZWdhdGl2ZSBpbnRlZ2VyIGluZGV4ICppKiBzdWNoIHRoYXQgInggPT0geVtpXSIsIGFuZCBhbGwgbG93ZXJcbmludGVnZXIgaW5kaWNlcyBkbyBub3QgcmFpc2UgIkluZGV4RXJyb3IiIGV4Y2VwdGlvbi4gIChJZiBhbnkgb3RoZXJcbmV4Y2VwdGlvbiBpcyByYWlzZWQsIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uKS5cblxuVGhlIG9wZXJhdG9yICJub3QgaW4iIGlzIGRlZmluZWQgdG8gaGF2ZSB0aGUgaW52ZXJzZSB0cnVlIHZhbHVlIG9mXG4iaW4iLlxuXG5UaGUgb3BlcmF0b3JzICJpcyIgYW5kICJpcyBub3QiIHRlc3QgZm9yIG9iamVjdCBpZGVudGl0eTogInggaXMgeSIgaXNcbnRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGFuZCAqeSogYXJlIHRoZSBzYW1lIG9iamVjdC4gICJ4IGlzIG5vdCB5IlxueWllbGRzIHRoZSBpbnZlcnNlIHRydXRoIHZhbHVlLiBbNF1cbicsCi0gJ2ludGVnZXJzJzogJ1xuSW50ZWdlciBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKlxuXG5JbnRlZ2VyIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBpbnRlZ2VyICAgICAgICA6Oj0gZGVjaW1hbGludGVnZXIgfCBvY3RpbnRlZ2VyIHwgaGV4aW50ZWdlciB8IGJpbmludGVnZXJcbiAgIGRlY2ltYWxpbnRlZ2VyIDo6PSBub256ZXJvZGlnaXQgZGlnaXQqIHwgIjAiK1xuICAgbm9uemVyb2RpZ2l0ICAgOjo9ICIxIi4uLiI5IlxuICAgZGlnaXQgICAgICAgICAgOjo9ICIwIi4uLiI5IlxuICAgb2N0aW50ZWdlciAgICAgOjo9ICIwIiAoIm8iIHwgIk8iKSBvY3RkaWdpdCtcbiAgIGhleGludGVnZXIgICAgIDo6PSAiMCIgKCJ4IiB8ICJYIikgaGV4ZGlnaXQrXG4gICBiaW5pbnRlZ2VyICAgICA6Oj0gIjAiICgiYiIgfCAiQiIpIGJpbmRpZ2l0K1xuICAgb2N0ZGlnaXQgICAgICAgOjo9ICIwIi4uLiI3IlxuICAgaGV4ZGlnaXQgICAgICAgOjo9IGRpZ2l0IHwgImEiLi4uImYiIHwgIkEiLi4uIkYiXG4gICBiaW5kaWdpdCAgICAgICA6Oj0gIjAiIHwgIjEiXG5cblRoZXJlIGlzIG5vIGxpbWl0IGZvciB0aGUgbGVuZ3RoIG9mIGludGVnZXIgbGl0ZXJhbHMgYXBhcnQgZnJvbSB3aGF0XG5jYW4gYmUgc3RvcmVkIGluIGF2YWlsYWJsZSBtZW1vcnkuXG5cbk5vdGUgdGhhdCBsZWFkaW5nIHplcm9zIGluIGEgbm9uLXplcm8gZGVjaW1hbCBudW1iZXIgYXJlIG5vdCBhbGxvd2VkLlxuVGhpcyBpcyBmb3IgZGlzYW1iaWd1YXRpb24gd2l0aCBDLXN0eWxlIG9jdGFsIGxpdGVyYWxzLCB3aGljaCBQeXRob25cbnVzZWQgYmVmb3JlIHZlcnNpb24gMy4wLlxuXG5Tb21lIGV4YW1wbGVzIG9mIGludGVnZXIgbGl0ZXJhbHM6XG5cbiAgIDcgICAgIDIxNDc0ODM2NDcgICAgICAgICAgICAgICAgICAgICAgICAwbzE3NyAgICAwYjEwMDExMDExMVxuICAgMyAgICAgNzkyMjgxNjI1MTQyNjQzMzc1OTM1NDM5NTAzMzYgICAgIDBvMzc3ICAgIDB4MTAwMDAwMDAwXG4gICAgICAgICA3OTIyODE2MjUxNDI2NDMzNzU5MzU0Mzk1MDMzNiAgICAgICAgICAgICAgMHhkZWFkYmVlZlxuJywKLSAnbGFtYmRhJzogJ1xuTGFtYmRhc1xuKioqKioqKlxuXG4gICBsYW1iZGFfZXhwciAgICAgICAgOjo9ICJsYW1iZGEiIFtwYXJhbWV0ZXJfbGlzdF06IGV4cHJlc3Npb25cbiAgIGxhbWJkYV9leHByX25vY29uZCA6Oj0gImxhbWJkYSIgW3BhcmFtZXRlcl9saXN0XTogZXhwcmVzc2lvbl9ub2NvbmRcblxuTGFtYmRhIGV4cHJlc3Npb25zIChzb21ldGltZXMgY2FsbGVkIGxhbWJkYSBmb3JtcykgaGF2ZSB0aGUgc2FtZVxuc3ludGFjdGljIHBvc2l0aW9uIGFzIGV4cHJlc3Npb25zLiAgVGhleSBhcmUgYSBzaG9ydGhhbmQgdG8gY3JlYXRlXG5hbm9ueW1vdXMgZnVuY3Rpb25zOyB0aGUgZXhwcmVzc2lvbiAibGFtYmRhIGFyZ3VtZW50czogZXhwcmVzc2lvbiJcbnlpZWxkcyBhIGZ1bmN0aW9uIG9iamVjdC4gIFRoZSB1bm5hbWVkIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBmdW5jdGlvblxub2JqZWN0IGRlZmluZWQgd2l0aFxuXG4gICBkZWYgPGxhbWJkYT4oYXJndW1lbnRzKTpcbiAgICAgICByZXR1cm4gZXhwcmVzc2lvblxuXG5TZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciB0aGUgc3ludGF4IG9mIHBhcmFtZXRlciBsaXN0cy5cbk5vdGUgdGhhdCBmdW5jdGlvbnMgY3JlYXRlZCB3aXRoIGxhbWJkYSBleHByZXNzaW9ucyBjYW5ub3QgY29udGFpblxuc3RhdGVtZW50cyBvciBhbm5vdGF0aW9ucy5cbicsCi0gJ2xpc3RzJzogJ1xuTGlzdCBkaXNwbGF5c1xuKioqKioqKioqKioqKlxuXG5BIGxpc3QgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBleHByZXNzaW9ucyBlbmNsb3NlZCBpblxuc3F1YXJlIGJyYWNrZXRzOlxuXG4gICBsaXN0X2Rpc3BsYXkgOjo9ICJbIiBbZXhwcmVzc2lvbl9saXN0IHwgY29tcHJlaGVuc2lvbl0gIl0iXG5cbkEgbGlzdCBkaXNwbGF5IHlpZWxkcyBhIG5ldyBsaXN0IG9iamVjdCwgdGhlIGNvbnRlbnRzIGJlaW5nIHNwZWNpZmllZFxuYnkgZWl0aGVyIGEgbGlzdCBvZiBleHByZXNzaW9ucyBvciBhIGNvbXByZWhlbnNpb24uICBXaGVuIGEgY29tbWEtXG5zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucyBpcyBzdXBwbGllZCwgaXRzIGVsZW1lbnRzIGFyZSBldmFsdWF0ZWRcbmZyb20gbGVmdCB0byByaWdodCBhbmQgcGxhY2VkIGludG8gdGhlIGxpc3Qgb2JqZWN0IGluIHRoYXQgb3JkZXIuXG5XaGVuIGEgY29tcHJlaGVuc2lvbiBpcyBzdXBwbGllZCwgdGhlIGxpc3QgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGVcbmVsZW1lbnRzIHJlc3VsdGluZyBmcm9tIHRoZSBjb21wcmVoZW5zaW9uLlxuJywKLSAnbmFtaW5nJzogJ1xuTmFtaW5nIGFuZCBiaW5kaW5nXG4qKioqKioqKioqKioqKioqKipcblxuKk5hbWVzKiByZWZlciB0byBvYmplY3RzLiAgTmFtZXMgYXJlIGludHJvZHVjZWQgYnkgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLiBFYWNoIG9jY3VycmVuY2Ugb2YgYSBuYW1lIGluIHRoZSBwcm9ncmFtIHRleHQgcmVmZXJzIHRvXG50aGUgKmJpbmRpbmcqIG9mIHRoYXQgbmFtZSBlc3RhYmxpc2hlZCBpbiB0aGUgaW5uZXJtb3N0IGZ1bmN0aW9uIGJsb2NrXG5jb250YWluaW5nIHRoZSB1c2UuXG5cbkEgKmJsb2NrKiBpcyBhIHBpZWNlIG9mIFB5dGhvbiBwcm9ncmFtIHRleHQgdGhhdCBpcyBleGVjdXRlZCBhcyBhXG51bml0LiBUaGUgZm9sbG93aW5nIGFyZSBibG9ja3M6IGEgbW9kdWxlLCBhIGZ1bmN0aW9uIGJvZHksIGFuZCBhIGNsYXNzXG5kZWZpbml0aW9uLiBFYWNoIGNvbW1hbmQgdHlwZWQgaW50ZXJhY3RpdmVseSBpcyBhIGJsb2NrLiAgQSBzY3JpcHRcbmZpbGUgKGEgZmlsZSBnaXZlbiBhcyBzdGFuZGFyZCBpbnB1dCB0byB0aGUgaW50ZXJwcmV0ZXIgb3Igc3BlY2lmaWVkXG5vbiB0aGUgaW50ZXJwcmV0ZXIgY29tbWFuZCBsaW5lIHRoZSBmaXJzdCBhcmd1bWVudCkgaXMgYSBjb2RlIGJsb2NrLlxuQSBzY3JpcHQgY29tbWFuZCAoYSBjb21tYW5kIHNwZWNpZmllZCBvbiB0aGUgaW50ZXJwcmV0ZXIgY29tbWFuZCBsaW5lXG53aXRoIHRoZSBcJyoqLWMqKlwnIG9wdGlvbikgaXMgYSBjb2RlIGJsb2NrLiAgVGhlIHN0cmluZyBhcmd1bWVudCBwYXNzZWRcbnRvIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImV2YWwoKSIgYW5kICJleGVjKCkiIGlzIGEgY29kZSBibG9jay5cblxuQSBjb2RlIGJsb2NrIGlzIGV4ZWN1dGVkIGluIGFuICpleGVjdXRpb24gZnJhbWUqLiAgQSBmcmFtZSBjb250YWluc1xuc29tZSBhZG1pbmlzdHJhdGl2ZSBpbmZvcm1hdGlvbiAodXNlZCBmb3IgZGVidWdnaW5nKSBhbmQgZGV0ZXJtaW5lc1xud2hlcmUgYW5kIGhvdyBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSBjb2RlIGJsb2NrXCdzIGV4ZWN1dGlvbiBoYXNcbmNvbXBsZXRlZC5cblxuQSAqc2NvcGUqIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbFxudmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZVxuZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2Nrc1xuY29udGFpbmVkIHdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlc1xuYSBkaWZmZXJlbnQgYmluZGluZyBmb3IgdGhlIG5hbWUuICBUaGUgc2NvcGUgb2YgbmFtZXMgZGVmaW5lZCBpbiBhXG5jbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzcyBibG9jazsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvIHRoZVxuY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLSB0aGlzIGluY2x1ZGVzIGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3JcbmV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIHVzaW5nIGEgZnVuY3Rpb24gc2NvcGUuICBUaGlzXG5tZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgd2lsbCBmYWlsOlxuXG4gICBjbGFzcyBBOlxuICAgICAgIGEgPSA0MlxuICAgICAgIGIgPSBsaXN0KGEgKyBpIGZvciBpIGluIHJhbmdlKDEwKSlcblxuV2hlbiBhIG5hbWUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2ssIGl0IGlzIHJlc29sdmVkIHVzaW5nIHRoZSBuZWFyZXN0XG5lbmNsb3Npbmcgc2NvcGUuICBUaGUgc2V0IG9mIGFsbCBzdWNoIHNjb3BlcyB2aXNpYmxlIHRvIGEgY29kZSBibG9ja1xuaXMgY2FsbGVkIHRoZSBibG9ja1wncyAqZW52aXJvbm1lbnQqLlxuXG5JZiBhIG5hbWUgaXMgYm91bmQgaW4gYSBibG9jaywgaXQgaXMgYSBsb2NhbCB2YXJpYWJsZSBvZiB0aGF0IGJsb2NrLFxudW5sZXNzIGRlY2xhcmVkIGFzICJub25sb2NhbCIuICBJZiBhIG5hbWUgaXMgYm91bmQgYXQgdGhlIG1vZHVsZVxubGV2ZWwsIGl0IGlzIGEgZ2xvYmFsIHZhcmlhYmxlLiAgKFRoZSB2YXJpYWJsZXMgb2YgdGhlIG1vZHVsZSBjb2RlXG5ibG9jayBhcmUgbG9jYWwgYW5kIGdsb2JhbC4pICBJZiBhIHZhcmlhYmxlIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrXG5idXQgbm90IGRlZmluZWQgdGhlcmUsIGl0IGlzIGEgKmZyZWUgdmFyaWFibGUqLlxuXG5XaGVuIGEgbmFtZSBpcyBub3QgZm91bmQgYXQgYWxsLCBhICJOYW1lRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG5JZiB0aGUgbmFtZSByZWZlcnMgdG8gYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGhhcyBub3QgYmVlbiBib3VuZCwgYVxuIlVuYm91bmRMb2NhbEVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLiAgIlVuYm91bmRMb2NhbEVycm9yIiBpcyBhXG5zdWJjbGFzcyBvZiAiTmFtZUVycm9yIi5cblxuVGhlIGZvbGxvd2luZyBjb25zdHJ1Y3RzIGJpbmQgbmFtZXM6IGZvcm1hbCBwYXJhbWV0ZXJzIHRvIGZ1bmN0aW9ucyxcbiJpbXBvcnQiIHN0YXRlbWVudHMsIGNsYXNzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucyAodGhlc2UgYmluZCB0aGVcbmNsYXNzIG9yIGZ1bmN0aW9uIG5hbWUgaW4gdGhlIGRlZmluaW5nIGJsb2NrKSwgYW5kIHRhcmdldHMgdGhhdCBhcmVcbmlkZW50aWZpZXJzIGlmIG9jY3VycmluZyBpbiBhbiBhc3NpZ25tZW50LCAiZm9yIiBsb29wIGhlYWRlciwgb3IgYWZ0ZXJcbiJhcyIgaW4gYSAid2l0aCIgc3RhdGVtZW50IG9yICJleGNlcHQiIGNsYXVzZS4gVGhlICJpbXBvcnQiIHN0YXRlbWVudFxub2YgdGhlIGZvcm0gImZyb20gLi4uIGltcG9ydCAqIiBiaW5kcyBhbGwgbmFtZXMgZGVmaW5lZCBpbiB0aGVcbmltcG9ydGVkIG1vZHVsZSwgZXhjZXB0IHRob3NlIGJlZ2lubmluZyB3aXRoIGFuIHVuZGVyc2NvcmUuICBUaGlzIGZvcm1cbm1heSBvbmx5IGJlIHVzZWQgYXQgdGhlIG1vZHVsZSBsZXZlbC5cblxuQSB0YXJnZXQgb2NjdXJyaW5nIGluIGEgImRlbCIgc3RhdGVtZW50IGlzIGFsc28gY29uc2lkZXJlZCBib3VuZCBmb3JcbnRoaXMgcHVycG9zZSAodGhvdWdoIHRoZSBhY3R1YWwgc2VtYW50aWNzIGFyZSB0byB1bmJpbmQgdGhlIG5hbWUpLlxuXG5FYWNoIGFzc2lnbm1lbnQgb3IgaW1wb3J0IHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2sgZGVmaW5lZCBieSBhXG5jbGFzcyBvciBmdW5jdGlvbiBkZWZpbml0aW9uIG9yIGF0IHRoZSBtb2R1bGUgbGV2ZWwgKHRoZSB0b3AtbGV2ZWxcbmNvZGUgYmxvY2spLlxuXG5JZiBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24gb2NjdXJzIGFueXdoZXJlIHdpdGhpbiBhIGNvZGUgYmxvY2ssIGFsbFxudXNlcyBvZiB0aGUgbmFtZSB3aXRoaW4gdGhlIGJsb2NrIGFyZSB0cmVhdGVkIGFzIHJlZmVyZW5jZXMgdG8gdGhlXG5jdXJyZW50IGJsb2NrLiAgVGhpcyBjYW4gbGVhZCB0byBlcnJvcnMgd2hlbiBhIG5hbWUgaXMgdXNlZCB3aXRoaW4gYVxuYmxvY2sgYmVmb3JlIGl0IGlzIGJvdW5kLiAgVGhpcyBydWxlIGlzIHN1YnRsZS4gIFB5dGhvbiBsYWNrc1xuZGVjbGFyYXRpb25zIGFuZCBhbGxvd3MgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbnMgdG8gb2NjdXIgYW55d2hlcmVcbndpdGhpbiBhIGNvZGUgYmxvY2suICBUaGUgbG9jYWwgdmFyaWFibGVzIG9mIGEgY29kZSBibG9jayBjYW4gYmVcbmRldGVybWluZWQgYnkgc2Nhbm5pbmcgdGhlIGVudGlyZSB0ZXh0IG9mIHRoZSBibG9jayBmb3IgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLlxuXG5JZiB0aGUgImdsb2JhbCIgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jaywgYWxsIHVzZXMgb2YgdGhlIG5hbWVcbnNwZWNpZmllZCBpbiB0aGUgc3RhdGVtZW50IHJlZmVyIHRvIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBpbiB0aGVcbnRvcC1sZXZlbCBuYW1lc3BhY2UuICBOYW1lcyBhcmUgcmVzb2x2ZWQgaW4gdGhlIHRvcC1sZXZlbCBuYW1lc3BhY2UgYnlcbnNlYXJjaGluZyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgaS5lLiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGVcbmNvbnRhaW5pbmcgdGhlIGNvZGUgYmxvY2ssIGFuZCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlLCB0aGUgbmFtZXNwYWNlXG5vZiB0aGUgbW9kdWxlICJidWlsdGlucyIuICBUaGUgZ2xvYmFsIG5hbWVzcGFjZSBpcyBzZWFyY2hlZCBmaXJzdC4gIElmXG50aGUgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBidWlsdGlucyBuYW1lc3BhY2UgaXMgc2VhcmNoZWQuICBUaGVcbmdsb2JhbCBzdGF0ZW1lbnQgbXVzdCBwcmVjZWRlIGFsbCB1c2VzIG9mIHRoZSBuYW1lLlxuXG5UaGUgYnVpbHRpbnMgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhlY3V0aW9uIG9mIGEgY29kZSBibG9ja1xuaXMgYWN0dWFsbHkgZm91bmQgYnkgbG9va2luZyB1cCB0aGUgbmFtZSAiX19idWlsdGluc19fIiBpbiBpdHMgZ2xvYmFsXG5uYW1lc3BhY2U7IHRoaXMgc2hvdWxkIGJlIGEgZGljdGlvbmFyeSBvciBhIG1vZHVsZSAoaW4gdGhlIGxhdHRlciBjYXNlXG50aGUgbW9kdWxlXCdzIGRpY3Rpb25hcnkgaXMgdXNlZCkuICBCeSBkZWZhdWx0LCB3aGVuIGluIHRoZSAiX19tYWluX18iXG5tb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIHRoZSBidWlsdC1pbiBtb2R1bGUgImJ1aWx0aW5zIjsgd2hlbiBpbiBhbnlcbm90aGVyIG1vZHVsZSwgIl9fYnVpbHRpbnNfXyIgaXMgYW4gYWxpYXMgZm9yIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZVxuImJ1aWx0aW5zIiBtb2R1bGUgaXRzZWxmLiAgIl9fYnVpbHRpbnNfXyIgY2FuIGJlIHNldCB0byBhIHVzZXItY3JlYXRlZFxuZGljdGlvbmFyeSB0byBjcmVhdGUgYSB3ZWFrIGZvcm0gb2YgcmVzdHJpY3RlZCBleGVjdXRpb24uXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVXNlcnMgc2hvdWxkIG5vdCB0b3VjaFxuIl9fYnVpbHRpbnNfXyI7IGl0IGlzIHN0cmljdGx5IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gIFVzZXJzXG53YW50aW5nIHRvIG92ZXJyaWRlIHZhbHVlcyBpbiB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIHNob3VsZCAiaW1wb3J0IlxudGhlICJidWlsdGlucyIgbW9kdWxlIGFuZCBtb2RpZnkgaXRzIGF0dHJpYnV0ZXMgYXBwcm9wcmlhdGVseS5cblxuVGhlIG5hbWVzcGFjZSBmb3IgYSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHRoZSBmaXJzdCB0aW1lIGFcbm1vZHVsZSBpcyBpbXBvcnRlZC4gIFRoZSBtYWluIG1vZHVsZSBmb3IgYSBzY3JpcHQgaXMgYWx3YXlzIGNhbGxlZFxuIl9fbWFpbl9fIi5cblxuVGhlICJnbG9iYWwiIHN0YXRlbWVudCBoYXMgdGhlIHNhbWUgc2NvcGUgYXMgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uXG5pbiB0aGUgc2FtZSBibG9jay4gIElmIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZSBmb3IgYSBmcmVlIHZhcmlhYmxlXG5jb250YWlucyBhIGdsb2JhbCBzdGF0ZW1lbnQsIHRoZSBmcmVlIHZhcmlhYmxlIGlzIHRyZWF0ZWQgYXMgYSBnbG9iYWwuXG5cbkEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudCB0aGF0IG1heSB1c2UgYW5kIGRlZmluZVxubmFtZXMuIFRoZXNlIHJlZmVyZW5jZXMgZm9sbG93IHRoZSBub3JtYWwgcnVsZXMgZm9yIG5hbWUgcmVzb2x1dGlvbi5cblRoZSBuYW1lc3BhY2Ugb2YgdGhlIGNsYXNzIGRlZmluaXRpb24gYmVjb21lcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnlcbm9mIHRoZSBjbGFzcy4gIE5hbWVzIGRlZmluZWQgYXQgdGhlIGNsYXNzIHNjb3BlIGFyZSBub3QgdmlzaWJsZSBpblxubWV0aG9kcy5cblxuXG5JbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGVyZSBhcmUgc2V2ZXJhbCBjYXNlcyB3aGVyZSBQeXRob24gc3RhdGVtZW50cyBhcmUgaWxsZWdhbCB3aGVuIHVzZWRcbmluIGNvbmp1bmN0aW9uIHdpdGggbmVzdGVkIHNjb3BlcyB0aGF0IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMuXG5cbklmIGEgdmFyaWFibGUgaXMgcmVmZXJlbmNlZCBpbiBhbiBlbmNsb3Npbmcgc2NvcGUsIGl0IGlzIGlsbGVnYWwgdG9cbmRlbGV0ZSB0aGUgbmFtZS4gIEFuIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXQgY29tcGlsZSB0aW1lLlxuXG5JZiB0aGUgd2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSAiaW1wb3J0ICoiIC0tLSBpcyB1c2VkIGluIGFcbmZ1bmN0aW9uIGFuZCB0aGUgZnVuY3Rpb24gY29udGFpbnMgb3IgaXMgYSBuZXN0ZWQgYmxvY2sgd2l0aCBmcmVlXG52YXJpYWJsZXMsIHRoZSBjb21waWxlciB3aWxsIHJhaXNlIGEgIlN5bnRheEVycm9yIi5cblxuVGhlICJldmFsKCkiIGFuZCAiZXhlYygpIiBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsXG5lbnZpcm9ubWVudCBmb3IgcmVzb2x2aW5nIG5hbWVzLiAgTmFtZXMgbWF5IGJlIHJlc29sdmVkIGluIHRoZSBsb2NhbFxuYW5kIGdsb2JhbCBuYW1lc3BhY2VzIG9mIHRoZSBjYWxsZXIuICBGcmVlIHZhcmlhYmxlcyBhcmUgbm90IHJlc29sdmVkXG5pbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbmFtZXNwYWNlLCBidXQgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBbMV1cblRoZSAiZXhlYygpIiBhbmQgImV2YWwoKSIgZnVuY3Rpb25zIGhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG5vdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuICBJZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXNcbnNwZWNpZmllZCwgaXQgaXMgdXNlZCBmb3IgYm90aC5cbicsCi0gJ25vbmxvY2FsJzogJ1xuVGhlICJub25sb2NhbCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuICAgbm9ubG9jYWxfc3RtdCA6Oj0gIm5vbmxvY2FsIiBpZGVudGlmaWVyICgiLCIgaWRlbnRpZmllcikqXG5cblRoZSAibm9ubG9jYWwiIHN0YXRlbWVudCBjYXVzZXMgdGhlIGxpc3RlZCBpZGVudGlmaWVycyB0byByZWZlciB0b1xucHJldmlvdXNseSBib3VuZCB2YXJpYWJsZXMgaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlLiAgVGhpcyBpc1xuaW1wb3J0YW50IGJlY2F1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGJpbmRpbmcgaXMgdG8gc2VhcmNoIHRoZVxubG9jYWwgbmFtZXNwYWNlIGZpcnN0LiAgVGhlIHN0YXRlbWVudCBhbGxvd3MgZW5jYXBzdWxhdGVkIGNvZGUgdG9cbnJlYmluZCB2YXJpYWJsZXMgb3V0c2lkZSBvZiB0aGUgbG9jYWwgc2NvcGUgYmVzaWRlcyB0aGUgZ2xvYmFsXG4obW9kdWxlKSBzY29wZS5cblxuTmFtZXMgbGlzdGVkIGluIGEgIm5vbmxvY2FsIiBzdGF0ZW1lbnQsIHVubGlrZSB0byB0aG9zZSBsaXN0ZWQgaW4gYVxuImdsb2JhbCIgc3RhdGVtZW50LCBtdXN0IHJlZmVyIHRvIHByZS1leGlzdGluZyBiaW5kaW5ncyBpbiBhblxuZW5jbG9zaW5nIHNjb3BlICh0aGUgc2NvcGUgaW4gd2hpY2ggYSBuZXcgYmluZGluZyBzaG91bGQgYmUgY3JlYXRlZFxuY2Fubm90IGJlIGRldGVybWluZWQgdW5hbWJpZ3VvdXNseSkuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJub25sb2NhbCIgc3RhdGVtZW50IG11c3Qgbm90IGNvbGxpZGUgd2l0aCBwcmUtXG5leGlzdGluZyBiaW5kaW5ncyBpbiB0aGUgbG9jYWwgc2NvcGUuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTA0KiogLSBBY2Nlc3MgdG8gTmFtZXMgaW4gT3V0ZXIgU2NvcGVzXG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSAibm9ubG9jYWwiIHN0YXRlbWVudC5cbicsCi0gJ251bWJlcnMnOiAnXG5OdW1lcmljIGxpdGVyYWxzXG4qKioqKioqKioqKioqKioqXG5cblRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBudW1lcmljIGxpdGVyYWxzOiBpbnRlZ2VycywgZmxvYXRpbmcgcG9pbnRcbm51bWJlcnMsIGFuZCBpbWFnaW5hcnkgbnVtYmVycy4gIFRoZXJlIGFyZSBubyBjb21wbGV4IGxpdGVyYWxzXG4oY29tcGxleCBudW1iZXJzIGNhbiBiZSBmb3JtZWQgYnkgYWRkaW5nIGEgcmVhbCBudW1iZXIgYW5kIGFuXG5pbWFnaW5hcnkgbnVtYmVyKS5cblxuTm90ZSB0aGF0IG51bWVyaWMgbGl0ZXJhbHMgZG8gbm90IGluY2x1ZGUgYSBzaWduOyBhIHBocmFzZSBsaWtlICItMSJcbmlzIGFjdHVhbGx5IGFuIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yIFwnIi0iXCcgYW5kIHRoZVxubGl0ZXJhbCAiMSIuXG4nLAotICdudW1lcmljLXR5cGVzJzogJ1xuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8IikuICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZVxuICAgZXhwcmVzc2lvbiAieCArIHkiLCB3aGVyZSAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhblxuICAgIl9fYWRkX18oKSIgbWV0aG9kLCAieC5fX2FkZF9fKHkpIiBpcyBjYWxsZWQuICBUaGUgIl9fZGl2bW9kX18oKSJcbiAgIG1ldGhvZCBzaG91bGQgYmUgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgIl9fZmxvb3JkaXZfXygpIiBhbmRcbiAgICJfX21vZF9fKCkiOyBpdCBzaG91bGQgbm90IGJlIHJlbGF0ZWQgdG8gIl9fdHJ1ZWRpdl9fKCkiLiAgTm90ZVxuICAgdGhhdCAiX19wb3dfXygpIiBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluICJwb3coKSIgZnVuY3Rpb24gaXNcbiAgIHRvIGJlIHN1cHBvcnRlZC5cblxuICAgSWYgb25lIG9mIHRob3NlIG1ldGhvZHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIHdpdGggdGhlXG4gICBzdXBwbGllZCBhcmd1bWVudHMsIGl0IHNob3VsZCByZXR1cm4gIk5vdEltcGxlbWVudGVkIi5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIiwgInBvdygpIixcbiAgICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdFxuICAgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2ZcbiAgIGRpZmZlcmVudCB0eXBlcy4gWzJdICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uICJ4IC1cbiAgIHkiLCB3aGVyZSAqeSogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiAiX19yc3ViX18oKSJcbiAgIG1ldGhvZCwgInkuX19yc3ViX18oeCkiIGlzIGNhbGxlZCBpZiAieC5fX3N1Yl9fKHkpIiByZXR1cm5zXG4gICAqTm90SW1wbGVtZW50ZWQqLlxuXG4gICBOb3RlIHRoYXQgdGVybmFyeSAicG93KCkiIHdpbGwgbm90IHRyeSBjYWxsaW5nICJfX3Jwb3dfXygpIiAodGhlXG4gICBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3MgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZFxuICAgICBmb3IgdGhlIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3Mgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzXG4gICAgIHRvIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzICgiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiLy89IiwgIiU9IiwgIioqPSIsICI8PD0iLFxuICAgIj4+PSIsICImPSIsICJePSIsICJ8PSIpLiAgVGhlc2UgbWV0aG9kcyBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGVcbiAgIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaFxuICAgY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLCAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2RcbiAgIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsXG4gICBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCB0byBleGVjdXRlIHRoZSBzdGF0ZW1lbnQgInggKz0geSIsIHdoZXJlXG4gICAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiAiX19pYWRkX18oKSIgbWV0aG9kLFxuICAgInguX19pYWRkX18oeSkiIGlzIGNhbGxlZC4gIElmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXRcbiAgIGRvZXMgbm90IGRlZmluZSBhICJfX2lhZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGFuZFxuICAgInkuX19yYWRkX18oeCkiIGFyZSBjb25zaWRlcmVkLCBhcyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mICJ4ICsgeSIuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoIi0iLCAiKyIsXG4gICAiYWJzKCkiIGFuZCAifiIpLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19mbG9hdF9fKHNlbGYpXG5vYmplY3QuX19yb3VuZF9fKHNlbGZbLCBuXSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJjb21wbGV4KCkiLCAiaW50KCkiLFxuICAgImZsb2F0KCkiIGFuZCAicm91bmQoKSIuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlXG4gICB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmluZGV4KCkiLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXJcbiAgIFB5dGhvbiBuZWVkcyBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGVcbiAgIGJ1aWx0LWluICJiaW4oKSIsICJoZXgoKSIgYW5kICJvY3QoKSIgZnVuY3Rpb25zKS4gTXVzdCByZXR1cm4gYW5cbiAgIGludGVnZXIuXG4nLAotICdvYmplY3RzJzogJ1xuT2JqZWN0cywgdmFsdWVzIGFuZCB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4qT2JqZWN0cyogYXJlIFB5dGhvblwncyBhYnN0cmFjdGlvbiBmb3IgZGF0YS4gIEFsbCBkYXRhIGluIGEgUHl0aG9uXG5wcm9ncmFtIGlzIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMgb3IgYnkgcmVsYXRpb25zIGJldHdlZW4gb2JqZWN0cy4gKEluXG5hIHNlbnNlLCBhbmQgaW4gY29uZm9ybWFuY2UgdG8gVm9uIE5ldW1hbm5cJ3MgbW9kZWwgb2YgYSAic3RvcmVkXG5wcm9ncmFtIGNvbXB1dGVyLCIgY29kZSBpcyBhbHNvIHJlcHJlc2VudGVkIGJ5IG9iamVjdHMuKVxuXG5FdmVyeSBvYmplY3QgaGFzIGFuIGlkZW50aXR5LCBhIHR5cGUgYW5kIGEgdmFsdWUuICBBbiBvYmplY3RcJ3NcbippZGVudGl0eSogbmV2ZXIgY2hhbmdlcyBvbmNlIGl0IGhhcyBiZWVuIGNyZWF0ZWQ7IHlvdSBtYXkgdGhpbmsgb2YgaXRcbmFzIHRoZSBvYmplY3RcJ3MgYWRkcmVzcyBpbiBtZW1vcnkuICBUaGUgXCciaXMiXCcgb3BlcmF0b3IgY29tcGFyZXMgdGhlXG5pZGVudGl0eSBvZiB0d28gb2JqZWN0czsgdGhlICJpZCgpIiBmdW5jdGlvbiByZXR1cm5zIGFuIGludGVnZXJcbnJlcHJlc2VudGluZyBpdHMgaWRlbnRpdHkuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogRm9yIENQeXRob24sICJpZCh4KSIgaXMgdGhlIG1lbW9yeVxuYWRkcmVzcyB3aGVyZSAieCIgaXMgc3RvcmVkLlxuXG5BbiBvYmplY3RcJ3MgdHlwZSBkZXRlcm1pbmVzIHRoZSBvcGVyYXRpb25zIHRoYXQgdGhlIG9iamVjdCBzdXBwb3J0c1xuKGUuZy4sICJkb2VzIGl0IGhhdmUgYSBsZW5ndGg/IikgYW5kIGFsc28gZGVmaW5lcyB0aGUgcG9zc2libGUgdmFsdWVzXG5mb3Igb2JqZWN0cyBvZiB0aGF0IHR5cGUuICBUaGUgInR5cGUoKSIgZnVuY3Rpb24gcmV0dXJucyBhbiBvYmplY3RcJ3NcbnR5cGUgKHdoaWNoIGlzIGFuIG9iamVjdCBpdHNlbGYpLiAgTGlrZSBpdHMgaWRlbnRpdHksIGFuIG9iamVjdFwnc1xuKnR5cGUqIGlzIGFsc28gdW5jaGFuZ2VhYmxlLiBbMV1cblxuVGhlICp2YWx1ZSogb2Ygc29tZSBvYmplY3RzIGNhbiBjaGFuZ2UuICBPYmplY3RzIHdob3NlIHZhbHVlIGNhblxuY2hhbmdlIGFyZSBzYWlkIHRvIGJlICptdXRhYmxlKjsgb2JqZWN0cyB3aG9zZSB2YWx1ZSBpcyB1bmNoYW5nZWFibGVcbm9uY2UgdGhleSBhcmUgY3JlYXRlZCBhcmUgY2FsbGVkICppbW11dGFibGUqLiAoVGhlIHZhbHVlIG9mIGFuXG5pbW11dGFibGUgY29udGFpbmVyIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGEgbXV0YWJsZVxub2JqZWN0IGNhbiBjaGFuZ2Ugd2hlbiB0aGUgbGF0dGVyXCdzIHZhbHVlIGlzIGNoYW5nZWQ7IGhvd2V2ZXIgdGhlXG5jb250YWluZXIgaXMgc3RpbGwgY29uc2lkZXJlZCBpbW11dGFibGUsIGJlY2F1c2UgdGhlIGNvbGxlY3Rpb24gb2Zcbm9iamVjdHMgaXQgY29udGFpbnMgY2Fubm90IGJlIGNoYW5nZWQuICBTbywgaW1tdXRhYmlsaXR5IGlzIG5vdFxuc3RyaWN0bHkgdGhlIHNhbWUgYXMgaGF2aW5nIGFuIHVuY2hhbmdlYWJsZSB2YWx1ZSwgaXQgaXMgbW9yZSBzdWJ0bGUuKVxuQW4gb2JqZWN0XCdzIG11dGFiaWxpdHkgaXMgZGV0ZXJtaW5lZCBieSBpdHMgdHlwZTsgZm9yIGluc3RhbmNlLFxubnVtYmVycywgc3RyaW5ncyBhbmQgdHVwbGVzIGFyZSBpbW11dGFibGUsIHdoaWxlIGRpY3Rpb25hcmllcyBhbmRcbmxpc3RzIGFyZSBtdXRhYmxlLlxuXG5PYmplY3RzIGFyZSBuZXZlciBleHBsaWNpdGx5IGRlc3Ryb3llZDsgaG93ZXZlciwgd2hlbiB0aGV5IGJlY29tZVxudW5yZWFjaGFibGUgdGhleSBtYXkgYmUgZ2FyYmFnZS1jb2xsZWN0ZWQuICBBbiBpbXBsZW1lbnRhdGlvbiBpc1xuYWxsb3dlZCB0byBwb3N0cG9uZSBnYXJiYWdlIGNvbGxlY3Rpb24gb3Igb21pdCBpdCBhbHRvZ2V0aGVyIC0tLSBpdCBpc1xuYSBtYXR0ZXIgb2YgaW1wbGVtZW50YXRpb24gcXVhbGl0eSBob3cgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzXG5pbXBsZW1lbnRlZCwgYXMgbG9uZyBhcyBubyBvYmplY3RzIGFyZSBjb2xsZWN0ZWQgdGhhdCBhcmUgc3RpbGxcbnJlYWNoYWJsZS5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBDUHl0aG9uIGN1cnJlbnRseSB1c2VzIGEgcmVmZXJlbmNlLVxuY291bnRpbmcgc2NoZW1lIHdpdGggKG9wdGlvbmFsKSBkZWxheWVkIGRldGVjdGlvbiBvZiBjeWNsaWNhbGx5IGxpbmtlZFxuZ2FyYmFnZSwgd2hpY2ggY29sbGVjdHMgbW9zdCBvYmplY3RzIGFzIHNvb24gYXMgdGhleSBiZWNvbWVcbnVucmVhY2hhYmxlLCBidXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gY29sbGVjdCBnYXJiYWdlIGNvbnRhaW5pbmdcbmNpcmN1bGFyIHJlZmVyZW5jZXMuICBTZWUgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlICJnYyIgbW9kdWxlIGZvclxuaW5mb3JtYXRpb24gb24gY29udHJvbGxpbmcgdGhlIGNvbGxlY3Rpb24gb2YgY3ljbGljIGdhcmJhZ2UuIE90aGVyXG5pbXBsZW1lbnRhdGlvbnMgYWN0IGRpZmZlcmVudGx5IGFuZCBDUHl0aG9uIG1heSBjaGFuZ2UuIERvIG5vdCBkZXBlbmRcbm9uIGltbWVkaWF0ZSBmaW5hbGl6YXRpb24gb2Ygb2JqZWN0cyB3aGVuIHRoZXkgYmVjb21lIHVucmVhY2hhYmxlIChleDpcbmFsd2F5cyBjbG9zZSBmaWxlcykuXG5cbk5vdGUgdGhhdCB0aGUgdXNlIG9mIHRoZSBpbXBsZW1lbnRhdGlvblwncyB0cmFjaW5nIG9yIGRlYnVnZ2luZ1xuZmFjaWxpdGllcyBtYXkga2VlcCBvYmplY3RzIGFsaXZlIHRoYXQgd291bGQgbm9ybWFsbHkgYmUgY29sbGVjdGFibGUuXG5BbHNvIG5vdGUgdGhhdCBjYXRjaGluZyBhbiBleGNlcHRpb24gd2l0aCBhIFwnInRyeSIuLi4iZXhjZXB0IlwnXG5zdGF0ZW1lbnQgbWF5IGtlZXAgb2JqZWN0cyBhbGl2ZS5cblxuU29tZSBvYmplY3RzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byAiZXh0ZXJuYWwiIHJlc291cmNlcyBzdWNoIGFzIG9wZW5cbmZpbGVzIG9yIHdpbmRvd3MuICBJdCBpcyB1bmRlcnN0b29kIHRoYXQgdGhlc2UgcmVzb3VyY2VzIGFyZSBmcmVlZFxud2hlbiB0aGUgb2JqZWN0IGlzIGdhcmJhZ2UtY29sbGVjdGVkLCBidXQgc2luY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIGlzXG5ub3QgZ3VhcmFudGVlZCB0byBoYXBwZW4sIHN1Y2ggb2JqZWN0cyBhbHNvIHByb3ZpZGUgYW4gZXhwbGljaXQgd2F5IHRvXG5yZWxlYXNlIHRoZSBleHRlcm5hbCByZXNvdXJjZSwgdXN1YWxseSBhICJjbG9zZSgpIiBtZXRob2QuIFByb2dyYW1zXG5hcmUgc3Ryb25nbHkgcmVjb21tZW5kZWQgdG8gZXhwbGljaXRseSBjbG9zZSBzdWNoIG9iamVjdHMuICBUaGVcblwnInRyeSIuLi4iZmluYWxseSJcJyBzdGF0ZW1lbnQgYW5kIHRoZSBcJyJ3aXRoIlwnIHN0YXRlbWVudCBwcm92aWRlXG5jb252ZW5pZW50IHdheXMgdG8gZG8gdGhpcy5cblxuU29tZSBvYmplY3RzIGNvbnRhaW4gcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzOyB0aGVzZSBhcmUgY2FsbGVkXG4qY29udGFpbmVycyouIEV4YW1wbGVzIG9mIGNvbnRhaW5lcnMgYXJlIHR1cGxlcywgbGlzdHMgYW5kXG5kaWN0aW9uYXJpZXMuICBUaGUgcmVmZXJlbmNlcyBhcmUgcGFydCBvZiBhIGNvbnRhaW5lclwncyB2YWx1ZS4gIEluXG5tb3N0IGNhc2VzLCB3aGVuIHdlIHRhbGsgYWJvdXQgdGhlIHZhbHVlIG9mIGEgY29udGFpbmVyLCB3ZSBpbXBseSB0aGVcbnZhbHVlcywgbm90IHRoZSBpZGVudGl0aWVzIG9mIHRoZSBjb250YWluZWQgb2JqZWN0czsgaG93ZXZlciwgd2hlbiB3ZVxudGFsayBhYm91dCB0aGUgbXV0YWJpbGl0eSBvZiBhIGNvbnRhaW5lciwgb25seSB0aGUgaWRlbnRpdGllcyBvZiB0aGVcbmltbWVkaWF0ZWx5IGNvbnRhaW5lZCBvYmplY3RzIGFyZSBpbXBsaWVkLiAgU28sIGlmIGFuIGltbXV0YWJsZVxuY29udGFpbmVyIChsaWtlIGEgdHVwbGUpIGNvbnRhaW5zIGEgcmVmZXJlbmNlIHRvIGEgbXV0YWJsZSBvYmplY3QsIGl0c1xudmFsdWUgY2hhbmdlcyBpZiB0aGF0IG11dGFibGUgb2JqZWN0IGlzIGNoYW5nZWQuXG5cblR5cGVzIGFmZmVjdCBhbG1vc3QgYWxsIGFzcGVjdHMgb2Ygb2JqZWN0IGJlaGF2aW9yLiAgRXZlbiB0aGVcbmltcG9ydGFuY2Ugb2Ygb2JqZWN0IGlkZW50aXR5IGlzIGFmZmVjdGVkIGluIHNvbWUgc2Vuc2U6IGZvciBpbW11dGFibGVcbnR5cGVzLCBvcGVyYXRpb25zIHRoYXQgY29tcHV0ZSBuZXcgdmFsdWVzIG1heSBhY3R1YWxseSByZXR1cm4gYVxucmVmZXJlbmNlIHRvIGFueSBleGlzdGluZyBvYmplY3Qgd2l0aCB0aGUgc2FtZSB0eXBlIGFuZCB2YWx1ZSwgd2hpbGVcbmZvciBtdXRhYmxlIG9iamVjdHMgdGhpcyBpcyBub3QgYWxsb3dlZC4gIEUuZy4sIGFmdGVyICJhID0gMTsgYiA9IDEiLFxuImEiIGFuZCAiYiIgbWF5IG9yIG1heSBub3QgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0IHdpdGggdGhlIHZhbHVlXG5vbmUsIGRlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIGJ1dCBhZnRlciAiYyA9IFtdOyBkID0gW10iLCAiYyJcbmFuZCAiZCIgYXJlIGd1YXJhbnRlZWQgdG8gcmVmZXIgdG8gdHdvIGRpZmZlcmVudCwgdW5pcXVlLCBuZXdseVxuY3JlYXRlZCBlbXB0eSBsaXN0cy4gKE5vdGUgdGhhdCAiYyA9IGQgPSBbXSIgYXNzaWducyB0aGUgc2FtZSBvYmplY3RcbnRvIGJvdGggImMiIGFuZCAiZCIuKVxuJywKLSAnb3BlcmF0b3Itc3VtbWFyeSc6ICdcbk9wZXJhdG9yIHByZWNlZGVuY2VcbioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlcyBpbiBQeXRob24sXG5mcm9tIGxvd2VzdCBwcmVjZWRlbmNlIChsZWFzdCBiaW5kaW5nKSB0byBoaWdoZXN0IHByZWNlZGVuY2UgKG1vc3RcbmJpbmRpbmcpLiAgT3BlcmF0b3JzIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByZWNlZGVuY2UuICBVbmxlc3NcbnRoZSBzeW50YXggaXMgZXhwbGljaXRseSBnaXZlbiwgb3BlcmF0b3JzIGFyZSBiaW5hcnkuICBPcGVyYXRvcnMgaW5cbnRoZSBzYW1lIGJveCBncm91cCBsZWZ0IHRvIHJpZ2h0IChleGNlcHQgZm9yIGNvbXBhcmlzb25zLCBpbmNsdWRpbmdcbnRlc3RzLCB3aGljaCBhbGwgaGF2ZSB0aGUgc2FtZSBwcmVjZWRlbmNlIGFuZCBjaGFpbiBmcm9tIGxlZnQgdG8gcmlnaHRcbi0tLSBzZWUgc2VjdGlvbiAqQ29tcGFyaXNvbnMqIC0tLSBhbmQgZXhwb25lbnRpYXRpb24sIHdoaWNoIGdyb3Vwc1xuZnJvbSByaWdodCB0byBsZWZ0KS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xufCAibGFtYmRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExhbWJkYSBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiaWYiIC0tICJlbHNlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbmRpdGlvbmFsIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAib3IiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAibm90IiAieCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gTk9UICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiaW4iLCAibm90IGluIiwgImlzIiwgImlzIG5vdCIsICI8IiwgIjw9IiwgIj4iLCB8IENvbXBhcmlzb25zLCBpbmNsdWRpbmcgbWVtYmVyc2hpcCAgICAgfFxufCAiPj0iLCAiIT0iLCAiPT0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RzIGFuZCBpZGVudGl0eSB0ZXN0cyAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAifCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiXiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgWE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiJiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiPDwiLCAiPj4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNoaWZ0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKyIsICItIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKiIsICIvIiwgIi8vIiwgIiUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aW9uLCBkaXZpc2lvbiwgcmVtYWluZGVyICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiK3giLCAiLXgiLCAifngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBvc2l0aXZlLCBuZWdhdGl2ZSwgYml0d2lzZSBOT1QgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKioiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEV4cG9uZW50aWF0aW9uIFs2XSAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAieFtpbmRleF0iLCAieFtpbmRleDppbmRleF0iLCAgICAgICAgICAgICAgICAgICB8IFN1YnNjcmlwdGlvbiwgc2xpY2luZywgY2FsbCwgICAgICAgICAgfFxufCAieChhcmd1bWVudHMuLi4pIiwgInguYXR0cmlidXRlIiAgICAgICAgICAgICAgICB8IGF0dHJpYnV0ZSByZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKGV4cHJlc3Npb25zLi4uKSIsICJbZXhwcmVzc2lvbnMuLi5dIiwgIntrZXk6ICB8IEJpbmRpbmcgb3IgdHVwbGUgZGlzcGxheSwgbGlzdCAgICAgICAgfFxufCB2YWx1ZS4uLn0iLCAie2V4cHJlc3Npb25zLi4ufSIgICAgICAgICAgICAgICAgICB8IGRpc3BsYXksIGRpY3Rpb25hcnkgZGlzcGxheSwgc2V0ICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoaWxlICJhYnMoeCV5KSA8IGFicyh5KSIgaXMgdHJ1ZSBtYXRoZW1hdGljYWxseSwgZm9yIGZsb2F0c1xuICAgIGl0IG1heSBub3QgYmUgdHJ1ZSBudW1lcmljYWxseSBkdWUgdG8gcm91bmRvZmYuICBGb3IgZXhhbXBsZSwgYW5kXG4gICAgYXNzdW1pbmcgYSBwbGF0Zm9ybSBvbiB3aGljaCBhIFB5dGhvbiBmbG9hdCBpcyBhbiBJRUVFIDc1NCBkb3VibGUtXG4gICAgcHJlY2lzaW9uIG51bWJlciwgaW4gb3JkZXIgdGhhdCAiLTFlLTEwMCAlIDFlMTAwIiBoYXZlIHRoZSBzYW1lXG4gICAgc2lnbiBhcyAiMWUxMDAiLCB0aGUgY29tcHV0ZWQgcmVzdWx0IGlzICItMWUtMTAwICsgMWUxMDAiLCB3aGljaFxuICAgIGlzIG51bWVyaWNhbGx5IGV4YWN0bHkgZXF1YWwgdG8gIjFlMTAwIi4gIFRoZSBmdW5jdGlvblxuICAgICJtYXRoLmZtb2QoKSIgcmV0dXJucyBhIHJlc3VsdCB3aG9zZSBzaWduIG1hdGNoZXMgdGhlIHNpZ24gb2YgdGhlXG4gICAgZmlyc3QgYXJndW1lbnQgaW5zdGVhZCwgYW5kIHNvIHJldHVybnMgIi0xZS0xMDAiIGluIHRoaXMgY2FzZS5cbiAgICBXaGljaCBhcHByb2FjaCBpcyBtb3JlIGFwcHJvcHJpYXRlIGRlcGVuZHMgb24gdGhlIGFwcGxpY2F0aW9uLlxuXG5bMl0gSWYgeCBpcyB2ZXJ5IGNsb3NlIHRvIGFuIGV4YWN0IGludGVnZXIgbXVsdGlwbGUgb2YgeSwgaXRcJ3NcbiAgICBwb3NzaWJsZSBmb3IgIngvL3kiIHRvIGJlIG9uZSBsYXJnZXIgdGhhbiAiKHgteCV5KS8veSIgZHVlIHRvXG4gICAgcm91bmRpbmcuICBJbiBzdWNoIGNhc2VzLCBQeXRob24gcmV0dXJucyB0aGUgbGF0dGVyIHJlc3VsdCwgaW5cbiAgICBvcmRlciB0byBwcmVzZXJ2ZSB0aGF0ICJkaXZtb2QoeCx5KVswXSAqIHkgKyB4ICUgeSIgYmUgdmVyeSBjbG9zZVxuICAgIHRvICJ4Ii5cblxuWzNdIFdoaWxlIGNvbXBhcmlzb25zIGJldHdlZW4gc3RyaW5ncyBtYWtlIHNlbnNlIGF0IHRoZSBieXRlXG4gICAgbGV2ZWwsIHRoZXkgbWF5IGJlIGNvdW50ZXItaW50dWl0aXZlIHRvIHVzZXJzLiAgRm9yIGV4YW1wbGUsIHRoZVxuICAgIHN0cmluZ3MgIiJcXHUwMEM3IiIgYW5kICIiXFx1MDMyN1xcdTAwNDMiIiBjb21wYXJlIGRpZmZlcmVudGx5LCBldmVuXG4gICAgdGhvdWdoIHRoZXkgYm90aCByZXByZXNlbnQgdGhlIHNhbWUgdW5pY29kZSBjaGFyYWN0ZXIgKExBVElOXG4gICAgQ0FQSVRBTCBMRVRURVIgQyBXSVRIIENFRElMTEEpLiAgVG8gY29tcGFyZSBzdHJpbmdzIGluIGEgaHVtYW5cbiAgICByZWNvZ25pemFibGUgd2F5LCBjb21wYXJlIHVzaW5nICJ1bmljb2RlZGF0YS5ub3JtYWxpemUoKSIuXG5cbls0XSBEdWUgdG8gYXV0b21hdGljIGdhcmJhZ2UtY29sbGVjdGlvbiwgZnJlZSBsaXN0cywgYW5kIHRoZVxuICAgIGR5bmFtaWMgbmF0dXJlIG9mIGRlc2NyaXB0b3JzLCB5b3UgbWF5IG5vdGljZSBzZWVtaW5nbHkgdW51c3VhbFxuICAgIGJlaGF2aW91ciBpbiBjZXJ0YWluIHVzZXMgb2YgdGhlICJpcyIgb3BlcmF0b3IsIGxpa2UgdGhvc2VcbiAgICBpbnZvbHZpbmcgY29tcGFyaXNvbnMgYmV0d2VlbiBpbnN0YW5jZSBtZXRob2RzLCBvciBjb25zdGFudHMuXG4gICAgQ2hlY2sgdGhlaXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvLlxuXG5bNV0gVGhlICIlIiBvcGVyYXRvciBpcyBhbHNvIHVzZWQgZm9yIHN0cmluZyBmb3JtYXR0aW5nOyB0aGUgc2FtZVxuICAgIHByZWNlZGVuY2UgYXBwbGllcy5cblxuWzZdIFRoZSBwb3dlciBvcGVyYXRvciAiKioiIGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIGFuIGFyaXRobWV0aWNcbiAgICBvciBiaXR3aXNlIHVuYXJ5IG9wZXJhdG9yIG9uIGl0cyByaWdodCwgdGhhdCBpcywgIjIqKi0xIiBpcyAiMC41Ii5cbicsCi0gJ3Bhc3MnOiAnXG5UaGUgInBhc3MiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKipcblxuICAgcGFzc19zdG10IDo6PSAicGFzcyJcblxuInBhc3MiIGlzIGEgbnVsbCBvcGVyYXRpb24gLS0tIHdoZW4gaXQgaXMgZXhlY3V0ZWQsIG5vdGhpbmcgaGFwcGVucy5cbkl0IGlzIHVzZWZ1bCBhcyBhIHBsYWNlaG9sZGVyIHdoZW4gYSBzdGF0ZW1lbnQgaXMgcmVxdWlyZWRcbnN5bnRhY3RpY2FsbHksIGJ1dCBubyBjb2RlIG5lZWRzIHRvIGJlIGV4ZWN1dGVkLCBmb3IgZXhhbXBsZTpcblxuICAgZGVmIGYoYXJnKTogcGFzcyAgICAjIGEgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdGhpbmcgKHlldClcblxuICAgY2xhc3MgQzogcGFzcyAgICAgICAjIGEgY2xhc3Mgd2l0aCBubyBtZXRob2RzICh5ZXQpXG4nLAotICdwb3dlcic6ICdcblRoZSBwb3dlciBvcGVyYXRvclxuKioqKioqKioqKioqKioqKioqXG5cblRoZSBwb3dlciBvcGVyYXRvciBiaW5kcyBtb3JlIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzXG5sZWZ0OyBpdCBiaW5kcyBsZXNzIHRpZ2h0bHkgdGhhbiB1bmFyeSBvcGVyYXRvcnMgb24gaXRzIHJpZ2h0LiAgVGhlXG5zeW50YXggaXM6XG5cbiAgIHBvd2VyIDo6PSBwcmltYXJ5IFsiKioiIHVfZXhwcl1cblxuVGh1cywgaW4gYW4gdW5wYXJlbnRoZXNpemVkIHNlcXVlbmNlIG9mIHBvd2VyIGFuZCB1bmFyeSBvcGVyYXRvcnMsIHRoZVxub3BlcmF0b3JzIGFyZSBldmFsdWF0ZWQgZnJvbSByaWdodCB0byBsZWZ0ICh0aGlzIGRvZXMgbm90IGNvbnN0cmFpblxudGhlIGV2YWx1YXRpb24gb3JkZXIgZm9yIHRoZSBvcGVyYW5kcyk6ICItMSoqMiIgcmVzdWx0cyBpbiAiLTEiLlxuXG5UaGUgcG93ZXIgb3BlcmF0b3IgaGFzIHRoZSBzYW1lIHNlbWFudGljcyBhcyB0aGUgYnVpbHQtaW4gInBvdygpIlxuZnVuY3Rpb24sIHdoZW4gY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50czogaXQgeWllbGRzIGl0cyBsZWZ0IGFyZ3VtZW50XG5yYWlzZWQgdG8gdGhlIHBvd2VyIG9mIGl0cyByaWdodCBhcmd1bWVudC4gIFRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmVcbmZpcnN0IGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCBhbmQgdGhlIHJlc3VsdCBpcyBvZiB0aGF0IHR5cGUuXG5cbkZvciBpbnQgb3BlcmFuZHMsIHRoZSByZXN1bHQgaGFzIHRoZSBzYW1lIHR5cGUgYXMgdGhlIG9wZXJhbmRzIHVubGVzc1xudGhlIHNlY29uZCBhcmd1bWVudCBpcyBuZWdhdGl2ZTsgaW4gdGhhdCBjYXNlLCBhbGwgYXJndW1lbnRzIGFyZVxuY29udmVydGVkIHRvIGZsb2F0IGFuZCBhIGZsb2F0IHJlc3VsdCBpcyBkZWxpdmVyZWQuIEZvciBleGFtcGxlLFxuIjEwKioyIiByZXR1cm5zICIxMDAiLCBidXQgIjEwKiotMiIgcmV0dXJucyAiMC4wMSIuXG5cblJhaXNpbmcgIjAuMCIgdG8gYSBuZWdhdGl2ZSBwb3dlciByZXN1bHRzIGluIGEgIlplcm9EaXZpc2lvbkVycm9yIi5cblJhaXNpbmcgYSBuZWdhdGl2ZSBudW1iZXIgdG8gYSBmcmFjdGlvbmFsIHBvd2VyIHJlc3VsdHMgaW4gYSAiY29tcGxleCJcbm51bWJlci4gKEluIGVhcmxpZXIgdmVyc2lvbnMgaXQgcmFpc2VkIGEgIlZhbHVlRXJyb3IiLilcbicsCi0gJ3JhaXNlJzogJ1xuVGhlICJyYWlzZSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgcmFpc2Vfc3RtdCA6Oj0gInJhaXNlIiBbZXhwcmVzc2lvbiBbImZyb20iIGV4cHJlc3Npb25dXVxuXG5JZiBubyBleHByZXNzaW9ucyBhcmUgcHJlc2VudCwgInJhaXNlIiByZS1yYWlzZXMgdGhlIGxhc3QgZXhjZXB0aW9uXG50aGF0IHdhcyBhY3RpdmUgaW4gdGhlIGN1cnJlbnQgc2NvcGUuICBJZiBubyBleGNlcHRpb24gaXMgYWN0aXZlIGluXG50aGUgY3VycmVudCBzY29wZSwgYSAiUnVudGltZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkIGluZGljYXRpbmdcbnRoYXQgdGhpcyBpcyBhbiBlcnJvci5cblxuT3RoZXJ3aXNlLCAicmFpc2UiIGV2YWx1YXRlcyB0aGUgZmlyc3QgZXhwcmVzc2lvbiBhcyB0aGUgZXhjZXB0aW9uXG5vYmplY3QuICBJdCBtdXN0IGJlIGVpdGhlciBhIHN1YmNsYXNzIG9yIGFuIGluc3RhbmNlIG9mXG4iQmFzZUV4Y2VwdGlvbiIuIElmIGl0IGlzIGEgY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2Ugd2lsbCBiZVxub2J0YWluZWQgd2hlbiBuZWVkZWQgYnkgaW5zdGFudGlhdGluZyB0aGUgY2xhc3Mgd2l0aCBubyBhcmd1bWVudHMuXG5cblRoZSAqdHlwZSogb2YgdGhlIGV4Y2VwdGlvbiBpcyB0aGUgZXhjZXB0aW9uIGluc3RhbmNlXCdzIGNsYXNzLCB0aGVcbip2YWx1ZSogaXMgdGhlIGluc3RhbmNlIGl0c2VsZi5cblxuQSB0cmFjZWJhY2sgb2JqZWN0IGlzIG5vcm1hbGx5IGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFuIGV4Y2VwdGlvblxuaXMgcmFpc2VkIGFuZCBhdHRhY2hlZCB0byBpdCBhcyB0aGUgIl9fdHJhY2ViYWNrX18iIGF0dHJpYnV0ZSwgd2hpY2hcbmlzIHdyaXRhYmxlLiBZb3UgY2FuIGNyZWF0ZSBhbiBleGNlcHRpb24gYW5kIHNldCB5b3VyIG93biB0cmFjZWJhY2sgaW5cbm9uZSBzdGVwIHVzaW5nIHRoZSAid2l0aF90cmFjZWJhY2soKSIgZXhjZXB0aW9uIG1ldGhvZCAod2hpY2ggcmV0dXJuc1xudGhlIHNhbWUgZXhjZXB0aW9uIGluc3RhbmNlLCB3aXRoIGl0cyB0cmFjZWJhY2sgc2V0IHRvIGl0cyBhcmd1bWVudCksXG5saWtlIHNvOlxuXG4gICByYWlzZSBFeGNlcHRpb24oImZvbyBvY2N1cnJlZCIpLndpdGhfdHJhY2ViYWNrKHRyYWNlYmFja29iailcblxuVGhlICJmcm9tIiBjbGF1c2UgaXMgdXNlZCBmb3IgZXhjZXB0aW9uIGNoYWluaW5nOiBpZiBnaXZlbiwgdGhlIHNlY29uZFxuKmV4cHJlc3Npb24qIG11c3QgYmUgYW5vdGhlciBleGNlcHRpb24gY2xhc3Mgb3IgaW5zdGFuY2UsIHdoaWNoIHdpbGxcbnRoZW4gYmUgYXR0YWNoZWQgdG8gdGhlIHJhaXNlZCBleGNlcHRpb24gYXMgdGhlICJfX2NhdXNlX18iIGF0dHJpYnV0ZVxuKHdoaWNoIGlzIHdyaXRhYmxlKS4gIElmIHRoZSByYWlzZWQgZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkLCBib3RoXG5leGNlcHRpb25zIHdpbGwgYmUgcHJpbnRlZDpcblxuICAgPj4+IHRyeTpcbiAgIC4uLiAgICAgcHJpbnQoMSAvIDApXG4gICAuLi4gZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6XG4gICAuLi4gICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29tZXRoaW5nIGJhZCBoYXBwZW5lZCIpIGZyb20gZXhjXG4gICAuLi5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gPG1vZHVsZT5cbiAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnQgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm9cblxuICAgVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcblxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSA0LCBpbiA8bW9kdWxlPlxuICAgUnVudGltZUVycm9yOiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkXG5cbkEgc2ltaWxhciBtZWNoYW5pc20gd29ya3MgaW1wbGljaXRseSBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluc2lkZVxuYW4gZXhjZXB0aW9uIGhhbmRsZXI6IHRoZSBwcmV2aW91cyBleGNlcHRpb24gaXMgdGhlbiBhdHRhY2hlZCBhcyB0aGVcbm5ldyBleGNlcHRpb25cJ3MgIl9fY29udGV4dF9fIiBhdHRyaWJ1dGU6XG5cbiAgID4+PiB0cnk6XG4gICAuLi4gICAgIHByaW50KDEgLyAwKVxuICAgLi4uIGV4Y2VwdDpcbiAgIC4uLiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJTb21ldGhpbmcgYmFkIGhhcHBlbmVkIilcbiAgIC4uLlxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAyLCBpbiA8bW9kdWxlPlxuICAgWmVyb0RpdmlzaW9uRXJyb3I6IGludCBkaXZpc2lvbiBvciBtb2R1bG8gYnkgemVyb1xuXG4gICBEdXJpbmcgaGFuZGxpbmcgb2YgdGhlIGFib3ZlIGV4Y2VwdGlvbiwgYW5vdGhlciBleGNlcHRpb24gb2NjdXJyZWQ6XG5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgNCwgaW4gPG1vZHVsZT5cbiAgIFJ1bnRpbWVFcnJvcjogU29tZXRoaW5nIGJhZCBoYXBwZW5lZFxuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIGFib3V0IGhhbmRsaW5nIGV4Y2VwdGlvbnMgaXMgaW4gc2VjdGlvblxuKlRoZSB0cnkgc3RhdGVtZW50Ki5cbicsCi0gJ3JldHVybic6ICdcblRoZSAicmV0dXJuIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKipcblxuICAgcmV0dXJuX3N0bXQgOjo9ICJyZXR1cm4iIFtleHByZXNzaW9uX2xpc3RdXG5cbiJyZXR1cm4iIG1heSBvbmx5IG9jY3VyIHN5bnRhY3RpY2FsbHkgbmVzdGVkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbixcbm5vdCB3aXRoaW4gYSBuZXN0ZWQgY2xhc3MgZGVmaW5pdGlvbi5cblxuSWYgYW4gZXhwcmVzc2lvbiBsaXN0IGlzIHByZXNlbnQsIGl0IGlzIGV2YWx1YXRlZCwgZWxzZSAiTm9uZSIgaXNcbnN1YnN0aXR1dGVkLlxuXG4icmV0dXJuIiBsZWF2ZXMgdGhlIGN1cnJlbnQgZnVuY3Rpb24gY2FsbCB3aXRoIHRoZSBleHByZXNzaW9uIGxpc3QgKG9yXG4iTm9uZSIpIGFzIHJldHVybiB2YWx1ZS5cblxuV2hlbiAicmV0dXJuIiBwYXNzZXMgY29udHJvbCBvdXQgb2YgYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBhICJmaW5hbGx5IlxuY2xhdXNlLCB0aGF0ICJmaW5hbGx5IiBjbGF1c2UgaXMgZXhlY3V0ZWQgYmVmb3JlIHJlYWxseSBsZWF2aW5nIHRoZVxuZnVuY3Rpb24uXG5cbkluIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uLCB0aGUgInJldHVybiIgc3RhdGVtZW50IGluZGljYXRlcyB0aGF0IHRoZVxuZ2VuZXJhdG9yIGlzIGRvbmUgYW5kIHdpbGwgY2F1c2UgIlN0b3BJdGVyYXRpb24iIHRvIGJlIHJhaXNlZC4gVGhlXG5yZXR1cm5lZCB2YWx1ZSAoaWYgYW55KSBpcyB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIGNvbnN0cnVjdFxuIlN0b3BJdGVyYXRpb24iIGFuZCBiZWNvbWVzIHRoZSAiU3RvcEl0ZXJhdGlvbi52YWx1ZSIgYXR0cmlidXRlLlxuJywKLSAnc2VxdWVuY2UtdHlwZXMnOiAnXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoICIwIDw9IGsgPCBOIiB3aGVyZVxuKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaCBkZWZpbmUgYVxucmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZSB0aGVcbm1ldGhvZHMgImtleXMoKSIsICJ2YWx1ZXMoKSIsICJpdGVtcygpIiwgImdldCgpIiwgImNsZWFyKCkiLFxuInNldGRlZmF1bHQoKSIsICJwb3AoKSIsICJwb3BpdGVtKCkiLCAiY29weSgpIiwgYW5kICJ1cGRhdGUoKSJcbmJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuXG5UaGUgImNvbGxlY3Rpb25zIiBtb2R1bGUgcHJvdmlkZXMgYSAiTXV0YWJsZU1hcHBpbmciIGFic3RyYWN0IGJhc2VcbmNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mICJfX2dldGl0ZW1fXygpIixcbiJfX3NldGl0ZW1fXygpIiwgIl9fZGVsaXRlbV9fKCkiLCBhbmQgImtleXMoKSIuIE11dGFibGUgc2VxdWVuY2VzXG5zaG91bGQgcHJvdmlkZSBtZXRob2RzICJhcHBlbmQoKSIsICJjb3VudCgpIiwgImluZGV4KCkiLCAiZXh0ZW5kKCkiLFxuImluc2VydCgpIiwgInBvcCgpIiwgInJlbW92ZSgpIiwgInJldmVyc2UoKSIgYW5kICJzb3J0KCkiLCBsaWtlIFB5dGhvblxuc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudFxuYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyAiX19hZGRfXygpIiwgIl9fcmFkZF9fKCkiLFxuIl9faWFkZF9fKCkiLCAiX19tdWxfXygpIiwgIl9fcm11bF9fKCkiIGFuZCAiX19pbXVsX18oKSIgZGVzY3JpYmVkXG5iZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXQgaXNcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbiJfX2NvbnRhaW5zX18oKSIgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlICJpbiIgb3BlcmF0b3I7XG5mb3IgbWFwcGluZ3MsICJpbiIgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZ1wncyBrZXlzOyBmb3Igc2VxdWVuY2VzLCBpdFxuc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyIHJlY29tbWVuZGVkIHRoYXQgYm90aFxubWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlICJfX2l0ZXJfXygpIiBtZXRob2QgdG8gYWxsb3dcbmVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsICJfX2l0ZXJfXygpIlxuc2hvdWxkIGJlIHRoZSBzYW1lIGFzICJrZXlzKCkiOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZVxudGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyICI+PSIgMC4gIEFsc28sIGFuIG9iamVjdCB0aGF0XG4gICBkb2VzblwndCBkZWZpbmUgYSAiX19ib29sX18oKSIgbWV0aG9kIGFuZCB3aG9zZSAiX19sZW5fXygpIiBtZXRob2RcbiAgIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuXG4gIEEgY2FsbCBsaWtlXG5cbiAgICAgYVsxOjJdID0gYlxuXG4gIGlzIHRyYW5zbGF0ZWQgdG9cblxuICAgICBhW3NsaWNlKDEsIDIsIE5vbmUpXSA9IGJcblxuICBhbmQgc28gZm9ydGguICBNaXNzaW5nIHNsaWNlIGl0ZW1zIGFyZSBhbHdheXMgZmlsbGVkIGluIHdpdGggIk5vbmUiLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgInNlbGZba2V5XSIuIEZvciBzZXF1ZW5jZSB0eXBlcyxcbiAgIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy4gIE5vdGUgdGhhdFxuICAgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlIGNsYXNzIHdpc2hlc1xuICAgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLiBJZlxuICAgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLCAiVHlwZUVycm9yIiBtYXkgYmUgcmFpc2VkOyBpZiBvZlxuICAgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2YgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnlcbiAgIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgdmFsdWVzKSwgIkluZGV4RXJyb3IiIHNob3VsZCBiZVxuICAgcmFpc2VkLiBGb3IgbWFwcGluZyB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZVxuICAgY29udGFpbmVyKSwgIktleUVycm9yIiBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiAiZm9yIiBsb29wcyBleHBlY3QgdGhhdCBhbiAiSW5kZXhFcnJvciIgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgImtleXMoKSIuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlICJyZXZlcnNlZCgpIiBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgIl9fcmV2ZXJzZWRfXygpIiBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGUgInJldmVyc2VkKCkiXG4gICBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgKCJfX2xlbl9fKCkiXG4gICBhbmQgIl9fZ2V0aXRlbV9fKCkiKS4gIE9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbFxuICAgc2hvdWxkIG9ubHkgcHJvdmlkZSAiX19yZXZlcnNlZF9fKCkiIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW5cbiAgIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5XG4gICAicmV2ZXJzZWQoKSIuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzICgiaW4iIGFuZCAibm90IGluIikgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIsIHRoZSBtZW1iZXJzaGlwIHRlc3RcbiAgIGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgIl9faXRlcl9fKCkiLCB0aGVuIHRoZSBvbGQgc2VxdWVuY2VcbiAgIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgIl9fZ2V0aXRlbV9fKCkiLCBzZWUgKnRoaXMgc2VjdGlvbiBpbiB0aGVcbiAgIGxhbmd1YWdlIHJlZmVyZW5jZSouXG4nLAotICdzaGlmdGluZyc6ICdcblNoaWZ0aW5nIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKipcblxuVGhlIHNoaWZ0aW5nIG9wZXJhdGlvbnMgaGF2ZSBsb3dlciBwcmlvcml0eSB0aGFuIHRoZSBhcml0aG1ldGljXG5vcGVyYXRpb25zOlxuXG4gICBzaGlmdF9leHByIDo6PSBhX2V4cHIgfCBzaGlmdF9leHByICggIjw8IiB8ICI+PiIgKSBhX2V4cHJcblxuVGhlc2Ugb3BlcmF0b3JzIGFjY2VwdCBpbnRlZ2VycyBhcyBhcmd1bWVudHMuICBUaGV5IHNoaWZ0IHRoZSBmaXJzdFxuYXJndW1lbnQgdG8gdGhlIGxlZnQgb3IgcmlnaHQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGdpdmVuIGJ5IHRoZVxuc2Vjb25kIGFyZ3VtZW50LlxuXG5BIHJpZ2h0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgZmxvb3IgZGl2aXNpb24gYnkgInBvdygyLG4pIi5cbkEgbGVmdCBzaGlmdCBieSAqbiogYml0cyBpcyBkZWZpbmVkIGFzIG11bHRpcGxpY2F0aW9uIHdpdGggInBvdygyLG4pIi5cblxuTm90ZTogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgaXNcbiAgcmVxdWlyZWQgdG8gYmUgYXQgbW9zdCAic3lzLm1heHNpemUiLiAgSWYgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpc1xuICBsYXJnZXIgdGhhbiAic3lzLm1heHNpemUiIGFuICJPdmVyZmxvd0Vycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKLSAnc2xpY2luZ3MnOiAnXG5TbGljaW5nc1xuKioqKioqKipcblxuQSBzbGljaW5nIHNlbGVjdHMgYSByYW5nZSBvZiBpdGVtcyBpbiBhIHNlcXVlbmNlIG9iamVjdCAoZS5nLiwgYVxuc3RyaW5nLCB0dXBsZSBvciBsaXN0KS4gIFNsaWNpbmdzIG1heSBiZSB1c2VkIGFzIGV4cHJlc3Npb25zIG9yIGFzXG50YXJnZXRzIGluIGFzc2lnbm1lbnQgb3IgImRlbCIgc3RhdGVtZW50cy4gIFRoZSBzeW50YXggZm9yIGEgc2xpY2luZzpcblxuICAgc2xpY2luZyAgICAgIDo6PSBwcmltYXJ5ICJbIiBzbGljZV9saXN0ICJdIlxuICAgc2xpY2VfbGlzdCAgIDo6PSBzbGljZV9pdGVtICgiLCIgc2xpY2VfaXRlbSkqIFsiLCJdXG4gICBzbGljZV9pdGVtICAgOjo9IGV4cHJlc3Npb24gfCBwcm9wZXJfc2xpY2VcbiAgIHByb3Blcl9zbGljZSA6Oj0gW2xvd2VyX2JvdW5kXSAiOiIgW3VwcGVyX2JvdW5kXSBbICI6IiBbc3RyaWRlXSBdXG4gICBsb3dlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHVwcGVyX2JvdW5kICA6Oj0gZXhwcmVzc2lvblxuICAgc3RyaWRlICAgICAgIDo6PSBleHByZXNzaW9uXG5cblRoZXJlIGlzIGFtYmlndWl0eSBpbiB0aGUgZm9ybWFsIHN5bnRheCBoZXJlOiBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2VcbmFuIGV4cHJlc3Npb24gbGlzdCBhbHNvIGxvb2tzIGxpa2UgYSBzbGljZSBsaXN0LCBzbyBhbnkgc3Vic2NyaXB0aW9uXG5jYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzbGljaW5nLiAgUmF0aGVyIHRoYW4gZnVydGhlciBjb21wbGljYXRpbmcgdGhlXG5zeW50YXgsIHRoaXMgaXMgZGlzYW1iaWd1YXRlZCBieSBkZWZpbmluZyB0aGF0IGluIHRoaXMgY2FzZSB0aGVcbmludGVycHJldGF0aW9uIGFzIGEgc3Vic2NyaXB0aW9uIHRha2VzIHByaW9yaXR5IG92ZXIgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHNsaWNpbmcgKHRoaXMgaXMgdGhlIGNhc2UgaWYgdGhlIHNsaWNlIGxpc3RcbmNvbnRhaW5zIG5vIHByb3BlciBzbGljZSkuXG5cblRoZSBzZW1hbnRpY3MgZm9yIGEgc2xpY2luZyBhcmUgYXMgZm9sbG93cy4gIFRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGVcbnRvIGEgbWFwcGluZyBvYmplY3QsIGFuZCBpdCBpcyBpbmRleGVkICh1c2luZyB0aGUgc2FtZSAiX19nZXRpdGVtX18oKSJcbm1ldGhvZCBhcyBub3JtYWwgc3Vic2NyaXB0aW9uKSB3aXRoIGEga2V5IHRoYXQgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGVcbnNsaWNlIGxpc3QsIGFzIGZvbGxvd3MuICBJZiB0aGUgc2xpY2UgbGlzdCBjb250YWlucyBhdCBsZWFzdCBvbmVcbmNvbW1hLCB0aGUga2V5IGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgY29udmVyc2lvbiBvZiB0aGUgc2xpY2Vcbml0ZW1zOyBvdGhlcndpc2UsIHRoZSBjb252ZXJzaW9uIG9mIHRoZSBsb25lIHNsaWNlIGl0ZW0gaXMgdGhlIGtleS5cblRoZSBjb252ZXJzaW9uIG9mIGEgc2xpY2UgaXRlbSB0aGF0IGlzIGFuIGV4cHJlc3Npb24gaXMgdGhhdFxuZXhwcmVzc2lvbi4gIFRoZSBjb252ZXJzaW9uIG9mIGEgcHJvcGVyIHNsaWNlIGlzIGEgc2xpY2Ugb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIHdob3NlICJzdGFydCIsICJzdG9wIiBhbmRcbiJzdGVwIiBhdHRyaWJ1dGVzIGFyZSB0aGUgdmFsdWVzIG9mIHRoZSBleHByZXNzaW9ucyBnaXZlbiBhcyBsb3dlclxuYm91bmQsIHVwcGVyIGJvdW5kIGFuZCBzdHJpZGUsIHJlc3BlY3RpdmVseSwgc3Vic3RpdHV0aW5nICJOb25lIiBmb3Jcbm1pc3NpbmcgZXhwcmVzc2lvbnMuXG4nLAotICdzcGVjaWFsYXR0cnMnOiAnXG5TcGVjaWFsIEF0dHJpYnV0ZXNcbioqKioqKioqKioqKioqKioqKlxuXG5UaGUgaW1wbGVtZW50YXRpb24gYWRkcyBhIGZldyBzcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzIHRvIHNldmVyYWxcbm9iamVjdCB0eXBlcywgd2hlcmUgdGhleSBhcmUgcmVsZXZhbnQuICBTb21lIG9mIHRoZXNlIGFyZSBub3QgcmVwb3J0ZWRcbmJ5IHRoZSAiZGlyKCkiIGJ1aWx0LWluIGZ1bmN0aW9uLlxuXG5vYmplY3QuX19kaWN0X19cblxuICAgQSBkaWN0aW9uYXJ5IG9yIG90aGVyIG1hcHBpbmcgb2JqZWN0IHVzZWQgdG8gc3RvcmUgYW4gb2JqZWN0XCdzXG4gICAod3JpdGFibGUpIGF0dHJpYnV0ZXMuXG5cbmluc3RhbmNlLl9fY2xhc3NfX1xuXG4gICBUaGUgY2xhc3MgdG8gd2hpY2ggYSBjbGFzcyBpbnN0YW5jZSBiZWxvbmdzLlxuXG5jbGFzcy5fX2Jhc2VzX19cblxuICAgVGhlIHR1cGxlIG9mIGJhc2UgY2xhc3NlcyBvZiBhIGNsYXNzIG9iamVjdC5cblxuY2xhc3MuX19uYW1lX19cblxuICAgVGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9yIHR5cGUuXG5cbmNsYXNzLl9fcXVhbG5hbWVfX1xuXG4gICBUaGUgKnF1YWxpZmllZCBuYW1lKiBvZiB0aGUgY2xhc3Mgb3IgdHlwZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zLlxuXG5jbGFzcy5fX21yb19fXG5cbiAgIFRoaXMgYXR0cmlidXRlIGlzIGEgdHVwbGUgb2YgY2xhc3NlcyB0aGF0IGFyZSBjb25zaWRlcmVkIHdoZW5cbiAgIGxvb2tpbmcgZm9yIGJhc2UgY2xhc3NlcyBkdXJpbmcgbWV0aG9kIHJlc29sdXRpb24uXG5cbmNsYXNzLm1ybygpXG5cbiAgIFRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGEgbWV0YWNsYXNzIHRvIGN1c3RvbWl6ZSB0aGVcbiAgIG1ldGhvZCByZXNvbHV0aW9uIG9yZGVyIGZvciBpdHMgaW5zdGFuY2VzLiAgSXQgaXMgY2FsbGVkIGF0IGNsYXNzXG4gICBpbnN0YW50aWF0aW9uLCBhbmQgaXRzIHJlc3VsdCBpcyBzdG9yZWQgaW4gIl9fbXJvX18iLlxuXG5jbGFzcy5fX3N1YmNsYXNzZXNfXygpXG5cbiAgIEVhY2ggY2xhc3Mga2VlcHMgYSBsaXN0IG9mIHdlYWsgcmVmZXJlbmNlcyB0byBpdHMgaW1tZWRpYXRlXG4gICBzdWJjbGFzc2VzLiAgVGhpcyBtZXRob2QgcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRob3NlIHJlZmVyZW5jZXNcbiAgIHN0aWxsIGFsaXZlLiBFeGFtcGxlOlxuXG4gICAgICA+Pj4gaW50Ll9fc3ViY2xhc3Nlc19fKClcbiAgICAgIFs8Y2xhc3MgXCdib29sXCc+XVxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gdGhlc2Ugc3BlY2lhbCBtZXRob2RzIG1heSBiZSBmb3VuZFxuICAgIGluIHRoZSBQeXRob24gUmVmZXJlbmNlIE1hbnVhbCAoKkJhc2ljIGN1c3RvbWl6YXRpb24qKS5cblxuWzJdIEFzIGEgY29uc2VxdWVuY2UsIHRoZSBsaXN0ICJbMSwgMl0iIGlzIGNvbnNpZGVyZWQgZXF1YWwgdG9cbiAgICAiWzEuMCwgMi4wXSIsIGFuZCBzaW1pbGFybHkgZm9yIHR1cGxlcy5cblxuWzNdIFRoZXkgbXVzdCBoYXZlIHNpbmNlIHRoZSBwYXJzZXIgY2FuXCd0IHRlbGwgdGhlIHR5cGUgb2YgdGhlXG4gICAgb3BlcmFuZHMuXG5cbls0XSBDYXNlZCBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHlcbiAgICBiZWluZyBvbmUgb2YgIkx1IiAoTGV0dGVyLCB1cHBlcmNhc2UpLCAiTGwiIChMZXR0ZXIsIGxvd2VyY2FzZSksXG4gICAgb3IgIkx0IiAoTGV0dGVyLCB0aXRsZWNhc2UpLlxuXG5bNV0gVG8gZm9ybWF0IG9ubHkgYSB0dXBsZSB5b3Ugc2hvdWxkIHRoZXJlZm9yZSBwcm92aWRlIGFcbiAgICBzaW5nbGV0b24gdHVwbGUgd2hvc2Ugb25seSBlbGVtZW50IGlzIHRoZSB0dXBsZSB0byBiZSBmb3JtYXR0ZWQuXG4nLAotICdzcGVjaWFsbmFtZXMnOiAnXG5TcGVjaWFsIG1ldGhvZCBuYW1lc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBjbGFzcyBjYW4gaW1wbGVtZW50IGNlcnRhaW4gb3BlcmF0aW9ucyB0aGF0IGFyZSBpbnZva2VkIGJ5IHNwZWNpYWxcbnN5bnRheCAoc3VjaCBhcyBhcml0aG1ldGljIG9wZXJhdGlvbnMgb3Igc3Vic2NyaXB0aW5nIGFuZCBzbGljaW5nKSBieVxuZGVmaW5pbmcgbWV0aG9kcyB3aXRoIHNwZWNpYWwgbmFtZXMuIFRoaXMgaXMgUHl0aG9uXCdzIGFwcHJvYWNoIHRvXG4qb3BlcmF0b3Igb3ZlcmxvYWRpbmcqLCBhbGxvd2luZyBjbGFzc2VzIHRvIGRlZmluZSB0aGVpciBvd24gYmVoYXZpb3JcbndpdGggcmVzcGVjdCB0byBsYW5ndWFnZSBvcGVyYXRvcnMuICBGb3IgaW5zdGFuY2UsIGlmIGEgY2xhc3MgZGVmaW5lc1xuYSBtZXRob2QgbmFtZWQgIl9fZ2V0aXRlbV9fKCkiLCBhbmQgIngiIGlzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MsXG50aGVuICJ4W2ldIiBpcyByb3VnaGx5IGVxdWl2YWxlbnQgdG8gInR5cGUoeCkuX19nZXRpdGVtX18oeCwgaSkiLlxuRXhjZXB0IHdoZXJlIG1lbnRpb25lZCwgYXR0ZW1wdHMgdG8gZXhlY3V0ZSBhbiBvcGVyYXRpb24gcmFpc2UgYW5cbmV4Y2VwdGlvbiB3aGVuIG5vIGFwcHJvcHJpYXRlIG1ldGhvZCBpcyBkZWZpbmVkICh0eXBpY2FsbHlcbiJBdHRyaWJ1dGVFcnJvciIgb3IgIlR5cGVFcnJvciIpLlxuXG5XaGVuIGltcGxlbWVudGluZyBhIGNsYXNzIHRoYXQgZW11bGF0ZXMgYW55IGJ1aWx0LWluIHR5cGUsIGl0IGlzXG5pbXBvcnRhbnQgdGhhdCB0aGUgZW11bGF0aW9uIG9ubHkgYmUgaW1wbGVtZW50ZWQgdG8gdGhlIGRlZ3JlZSB0aGF0IGl0XG5tYWtlcyBzZW5zZSBmb3IgdGhlIG9iamVjdCBiZWluZyBtb2RlbGxlZC4gIEZvciBleGFtcGxlLCBzb21lXG5zZXF1ZW5jZXMgbWF5IHdvcmsgd2VsbCB3aXRoIHJldHJpZXZhbCBvZiBpbmRpdmlkdWFsIGVsZW1lbnRzLCBidXRcbmV4dHJhY3RpbmcgYSBzbGljZSBtYXkgbm90IG1ha2Ugc2Vuc2UuICAoT25lIGV4YW1wbGUgb2YgdGhpcyBpcyB0aGVcbiJOb2RlTGlzdCIgaW50ZXJmYWNlIGluIHRoZSBXM0NcJ3MgRG9jdW1lbnQgT2JqZWN0IE1vZGVsLilcblxuXG5CYXNpYyBjdXN0b21pemF0aW9uXG49PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICAiX19uZXdfXygpIiBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiAiX19uZXdfXygpIiBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHkgYW5cbiAgIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgIl9fbmV3X18oKSIgbWV0aG9kIHVzaW5nXG4gICAic3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSkiIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiAiX19uZXdfXygpIiByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgICJfX2luaXRfXyhzZWxmWywgLi4uXSkiLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byAiX19uZXdfXygpIi5cblxuICAgSWYgIl9fbmV3X18oKSIgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgIl9fbmV3X18oKSIgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGNyZWF0ZWQuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgIl9faW5pdF9fKCkiIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCwgaWZcbiAgIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZiB0aGVcbiAgIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgIkJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pIi4gIEFzIGEgc3BlY2lhbCBjb25zdHJhaW50IG9uXG4gICBjb25zdHJ1Y3RvcnMsIG5vIHZhbHVlIG1heSBiZSByZXR1cm5lZDsgZG9pbmcgc28gd2lsbCBjYXVzZSBhXG4gICAiVHlwZUVycm9yIiB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSAiX19kZWxfXygpIiBtZXRob2QsIHRoZVxuICAgZGVyaXZlZCBjbGFzc1wncyAiX19kZWxfXygpIiBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXRcbiAgIHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2UuXG4gICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3IgdGhlXG4gICAiX19kZWxfXygpIiBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiAiZGVsIHgiIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgInguX19kZWxfXygpIiAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yICJ4IiBieSBvbmUsIGFuZCB0aGUgbGF0dGVyIGlzXG4gICAgIG9ubHkgY2FsbGVkIHdoZW4gIngiXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lIGNvbW1vblxuICAgICBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhbiBvYmplY3QgZnJvbVxuICAgICBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlbiBvYmplY3RzIChlLmcuLFxuICAgICBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBwYXJlbnQgYW5kXG4gICAgIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgb2ZcbiAgICAgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMuZXhjX2luZm8oKVsyXSIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3IgYSByZWZlcmVuY2VcbiAgICAgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW4gdW5oYW5kbGVkXG4gICAgIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBsYXR0ZXIgdHdvIHNpdHVhdGlvbnMgY2FuIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgIk5vbmUiIGluXG4gICAgICJzeXMubGFzdF90cmFjZWJhY2siLiBDaXJjdWxhciByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZVxuICAgICBkZXRlY3RlZCB3aGVuIHRoZSBvcHRpb24gY3ljbGUgZGV0ZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnlcbiAgICAgZGVmYXVsdCksIGJ1dCBjYW4gb25seSBiZSBjbGVhbmVkIHVwIGlmIHRoZXJlIGFyZSBubyBQeXRob24tXG4gICAgIGxldmVsICJfX2RlbF9fKCkiIG1ldGhvZHMgaW52b2x2ZWQuIFJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uXG4gICAgIGZvciB0aGUgImdjIiBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93ICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZHMgYXJlIGhhbmRsZWQgYnkgdGhlIGN5Y2xlIGRldGVjdG9yLCBwYXJ0aWN1bGFybHkgdGhlXG4gICAgIGRlc2NyaXB0aW9uIG9mIHRoZSAiZ2FyYmFnZSIgdmFsdWUuXG5cbiAgIFdhcm5pbmc6IER1ZSB0byB0aGUgcHJlY2FyaW91cyBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoXG4gICAgICJfX2RlbF9fKCkiIG1ldGhvZHMgYXJlIGludm9rZWQsIGV4Y2VwdGlvbnMgdGhhdCBvY2N1ciBkdXJpbmdcbiAgICAgdGhlaXIgZXhlY3V0aW9uIGFyZSBpZ25vcmVkLCBhbmQgYSB3YXJuaW5nIGlzIHByaW50ZWQgdG9cbiAgICAgInN5cy5zdGRlcnIiIGluc3RlYWQuIEFsc28sIHdoZW4gIl9fZGVsX18oKSIgaXMgaW52b2tlZCBpblxuICAgICByZXNwb25zZSB0byBhIG1vZHVsZSBiZWluZyBkZWxldGVkIChlLmcuLCB3aGVuIGV4ZWN1dGlvbiBvZiB0aGVcbiAgICAgcHJvZ3JhbSBpcyBkb25lKSwgb3RoZXIgZ2xvYmFscyByZWZlcmVuY2VkIGJ5IHRoZSAiX19kZWxfXygpIlxuICAgICBtZXRob2QgbWF5IGFscmVhZHkgaGF2ZSBiZWVuIGRlbGV0ZWQgb3IgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmdcbiAgICAgdG9ybiBkb3duIChlLmcuIHRoZSBpbXBvcnQgbWFjaGluZXJ5IHNodXR0aW5nIGRvd24pLiAgRm9yIHRoaXNcbiAgICAgcmVhc29uLCAiX19kZWxfXygpIiBtZXRob2RzIHNob3VsZCBkbyB0aGUgYWJzb2x1dGUgbWluaW11bSBuZWVkZWRcbiAgICAgdG8gbWFpbnRhaW4gZXh0ZXJuYWwgaW52YXJpYW50cy4gIFN0YXJ0aW5nIHdpdGggdmVyc2lvbiAxLjUsXG4gICAgIFB5dGhvbiBndWFyYW50ZWVzIHRoYXQgZ2xvYmFscyB3aG9zZSBuYW1lIGJlZ2lucyB3aXRoIGEgc2luZ2xlXG4gICAgIHVuZGVyc2NvcmUgYXJlIGRlbGV0ZWQgZnJvbSB0aGVpciBtb2R1bGUgYmVmb3JlIG90aGVyIGdsb2JhbHMgYXJlXG4gICAgIGRlbGV0ZWQ7IGlmIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gc3VjaCBnbG9iYWxzIGV4aXN0LCB0aGlzIG1heVxuICAgICBoZWxwIGluIGFzc3VyaW5nIHRoYXQgaW1wb3J0ZWQgbW9kdWxlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHRoZVxuICAgICB0aW1lIHdoZW4gdGhlICJfX2RlbF9fKCkiIG1ldGhvZCBpcyBjYWxsZWQuXG5cbm9iamVjdC5fX3JlcHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgdGhlICJyZXByKCkiIGJ1aWx0LWluIGZ1bmN0aW9uIHRvIGNvbXB1dGUgdGhlICJvZmZpY2lhbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBJZiBhdCBhbGwgcG9zc2libGUsIHRoaXNcbiAgIHNob3VsZCBsb29rIGxpa2UgYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbiB0aGF0IGNvdWxkIGJlIHVzZWQgdG9cbiAgIHJlY3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBzYW1lIHZhbHVlIChnaXZlbiBhbiBhcHByb3ByaWF0ZVxuICAgZW52aXJvbm1lbnQpLiAgSWYgdGhpcyBpcyBub3QgcG9zc2libGUsIGEgc3RyaW5nIG9mIHRoZSBmb3JtXG4gICAiPC4uLnNvbWUgdXNlZnVsIGRlc2NyaXB0aW9uLi4uPiIgc2hvdWxkIGJlIHJldHVybmVkLiBUaGUgcmV0dXJuXG4gICB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC4gSWYgYSBjbGFzcyBkZWZpbmVzICJfX3JlcHJfXygpIiBidXRcbiAgIG5vdCAiX19zdHJfXygpIiwgdGhlbiAiX19yZXByX18oKSIgaXMgYWxzbyB1c2VkIHdoZW4gYW4gImluZm9ybWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGluc3RhbmNlcyBvZiB0aGF0IGNsYXNzIGlzIHJlcXVpcmVkLlxuXG4gICBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciBkZWJ1Z2dpbmcsIHNvIGl0IGlzIGltcG9ydGFudCB0aGF0IHRoZVxuICAgcmVwcmVzZW50YXRpb24gaXMgaW5mb3JtYXRpb24tcmljaCBhbmQgdW5hbWJpZ3VvdXMuXG5cbm9iamVjdC5fX3N0cl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAic3RyKG9iamVjdCkiIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJmb3JtYXQoKSIgYW5kXG4gICAicHJpbnQoKSIgdG8gY29tcHV0ZSB0aGUgImluZm9ybWFsIiBvciBuaWNlbHkgcHJpbnRhYmxlIHN0cmluZ1xuICAgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgKnN0cmluZypcbiAgIG9iamVjdC5cblxuICAgVGhpcyBtZXRob2QgZGlmZmVycyBmcm9tICJvYmplY3QuX19yZXByX18oKSIgaW4gdGhhdCB0aGVyZSBpcyBub1xuICAgZXhwZWN0YXRpb24gdGhhdCAiX19zdHJfXygpIiByZXR1cm4gYSB2YWxpZCBQeXRob24gZXhwcmVzc2lvbjogYVxuICAgbW9yZSBjb252ZW5pZW50IG9yIGNvbmNpc2UgcmVwcmVzZW50YXRpb24gY2FuIGJlIHVzZWQuXG5cbiAgIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGRlZmluZWQgYnkgdGhlIGJ1aWx0LWluIHR5cGUgIm9iamVjdCJcbiAgIGNhbGxzICJvYmplY3QuX19yZXByX18oKSIuXG5cbm9iamVjdC5fX2J5dGVzX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJieXRlcygpIiB0byBjb21wdXRlIGEgYnl0ZS1zdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW5cbiAgIG9iamVjdC4gVGhpcyBzaG91bGQgcmV0dXJuIGEgImJ5dGVzIiBvYmplY3QuXG5cbm9iamVjdC5fX2Zvcm1hdF9fKHNlbGYsIGZvcm1hdF9zcGVjKVxuXG4gICBDYWxsZWQgYnkgdGhlICJmb3JtYXQoKSIgYnVpbHQtaW4gZnVuY3Rpb24gKGFuZCBieSBleHRlbnNpb24sIHRoZVxuICAgInN0ci5mb3JtYXQoKSIgbWV0aG9kIG9mIGNsYXNzICJzdHIiKSB0byBwcm9kdWNlIGEgImZvcm1hdHRlZCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuIFRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIGFcbiAgIHN0cmluZyB0aGF0IGNvbnRhaW5zIGEgZGVzY3JpcHRpb24gb2YgdGhlIGZvcm1hdHRpbmcgb3B0aW9uc1xuICAgZGVzaXJlZC4gVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSAiZm9ybWF0X3NwZWMiIGFyZ3VtZW50IGlzIHVwIHRvXG4gICB0aGUgdHlwZSBpbXBsZW1lbnRpbmcgIl9fZm9ybWF0X18oKSIsIGhvd2V2ZXIgbW9zdCBjbGFzc2VzIHdpbGxcbiAgIGVpdGhlciBkZWxlZ2F0ZSBmb3JtYXR0aW5nIHRvIG9uZSBvZiB0aGUgYnVpbHQtaW4gdHlwZXMsIG9yIHVzZSBhXG4gICBzaW1pbGFyIGZvcm1hdHRpbmcgb3B0aW9uIHN5bnRheC5cblxuICAgU2VlICpGb3JtYXQgU3BlY2lmaWNhdGlvbiBNaW5pLUxhbmd1YWdlKiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGVcbiAgIHN0YW5kYXJkIGZvcm1hdHRpbmcgc3ludGF4LlxuXG4gICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6ICJ4PHkiIGNhbGxzICJ4Ll9fbHRfXyh5KSIsICJ4PD15IiBjYWxscyAieC5fX2xlX18oeSkiLFxuICAgIng9PXkiIGNhbGxzICJ4Ll9fZXFfXyh5KSIsICJ4IT15IiBjYWxscyAieC5fX25lX18oeSkiLCAieD55IiBjYWxsc1xuICAgInguX19ndF9fKHkpIiwgYW5kICJ4Pj15IiBjYWxscyAieC5fX2dlX18oeSkiLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uICJOb3RJbXBsZW1lbnRlZCJcbiAgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhIGdpdmVuIHBhaXIgb2ZcbiAgIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgIkZhbHNlIiBhbmQgIlRydWUiIGFyZSByZXR1cm5lZCBmb3IgYVxuICAgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhbiByZXR1cm4gYW55IHZhbHVlLFxuICAgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhIEJvb2xlYW4gY29udGV4dCAoZS5nLixcbiAgIGluIHRoZSBjb25kaXRpb24gb2YgYW4gImlmIiBzdGF0ZW1lbnQpLCBQeXRob24gd2lsbCBjYWxsICJib29sKCkiXG4gICBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHQgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgVGhlcmUgYXJlIG5vIGltcGxpZWQgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMuXG4gICBUaGUgdHJ1dGggb2YgIng9PXkiIGRvZXMgbm90IGltcGx5IHRoYXQgInghPXkiIGlzIGZhbHNlLlxuICAgQWNjb3JkaW5nbHksIHdoZW4gZGVmaW5pbmcgIl9fZXFfXygpIiwgb25lIHNob3VsZCBhbHNvIGRlZmluZVxuICAgIl9fbmVfXygpIiBzbyB0aGF0IHRoZSBvcGVyYXRvcnMgd2lsbCBiZWhhdmUgYXMgZXhwZWN0ZWQuICBTZWUgdGhlXG4gICBwYXJhZ3JhcGggb24gIl9faGFzaF9fKCkiIGZvciBzb21lIGltcG9ydGFudCBub3RlcyBvbiBjcmVhdGluZ1xuICAgKmhhc2hhYmxlKiBvYmplY3RzIHdoaWNoIHN1cHBvcnQgY3VzdG9tIGNvbXBhcmlzb24gb3BlcmF0aW9ucyBhbmRcbiAgIGFyZSB1c2FibGUgYXMgZGljdGlvbmFyeSBrZXlzLlxuXG4gICBUaGVyZSBhcmUgbm8gc3dhcHBlZC1hcmd1bWVudCB2ZXJzaW9ucyBvZiB0aGVzZSBtZXRob2RzICh0byBiZSB1c2VkXG4gICB3aGVuIHRoZSBsZWZ0IGFyZ3VtZW50IGRvZXMgbm90IHN1cHBvcnQgdGhlIG9wZXJhdGlvbiBidXQgdGhlIHJpZ2h0XG4gICBhcmd1bWVudCBkb2VzKTsgcmF0aGVyLCAiX19sdF9fKCkiIGFuZCAiX19ndF9fKCkiIGFyZSBlYWNoIG90aGVyXCdzXG4gICByZWZsZWN0aW9uLCAiX19sZV9fKCkiIGFuZCAiX19nZV9fKCkiIGFyZSBlYWNoIG90aGVyXCdzIHJlZmxlY3Rpb24sXG4gICBhbmQgIl9fZXFfXygpIiBhbmQgIl9fbmVfXygpIiBhcmUgdGhlaXIgb3duIHJlZmxlY3Rpb24uXG5cbiAgIEFyZ3VtZW50cyB0byByaWNoIGNvbXBhcmlzb24gbWV0aG9kcyBhcmUgbmV2ZXIgY29lcmNlZC5cblxuICAgVG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBvcmRlcmluZyBvcGVyYXRpb25zIGZyb20gYSBzaW5nbGUgcm9vdFxuICAgb3BlcmF0aW9uLCBzZWUgImZ1bmN0b29scy50b3RhbF9vcmRlcmluZygpIi5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiAiaGFzaCgpIiBhbmQgZm9yIG9wZXJhdGlvbnMgb24gbWVtYmVyc1xuICAgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyAic2V0IiwgImZyb3plbnNldCIsIGFuZCAiZGljdCIuXG4gICAiX19oYXNoX18oKSIgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHkgcmVxdWlyZWQgcHJvcGVydHlcbiAgIGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZTsgaXQgaXNcbiAgIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmcgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaFxuICAgdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXQgYWxzbyBwbGF5IGEgcGFydCBpblxuICAgY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBOb3RlOiAiaGFzaCgpIiB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzXG4gICAgIGN1c3RvbSAiX19oYXNoX18oKSIgbWV0aG9kIHRvIHRoZSBzaXplIG9mIGEgIlB5X3NzaXplX3QiLiAgVGhpc1xuICAgICBpcyB0eXBpY2FsbHkgOCBieXRlcyBvbiA2NC1iaXQgYnVpbGRzIGFuZCA0IGJ5dGVzIG9uIDMyLWJpdFxuICAgICBidWlsZHMuIElmIGFuIG9iamVjdFwncyAgICJfX2hhc2hfXygpIiBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHNcbiAgICAgb2YgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsXG4gICAgIHN1cHBvcnRlZCBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggInB5dGhvbiAtY1xuICAgICAiaW1wb3J0IHN5czsgcHJpbnQoc3lzLmhhc2hfaW5mby53aWR0aCkiIlxuXG4gICBJZiBhIGNsYXNzIGRvZXMgbm90IGRlZmluZSBhbiAiX19lcV9fKCkiIG1ldGhvZCBpdCBzaG91bGQgbm90XG4gICBkZWZpbmUgYSAiX19oYXNoX18oKSIgb3BlcmF0aW9uIGVpdGhlcjsgaWYgaXQgZGVmaW5lcyAiX19lcV9fKCkiXG4gICBidXQgbm90ICJfX2hhc2hfXygpIiwgaXRzIGluc3RhbmNlcyB3aWxsIG5vdCBiZSB1c2FibGUgYXMgaXRlbXMgaW5cbiAgIGhhc2hhYmxlIGNvbGxlY3Rpb25zLiAgSWYgYSBjbGFzcyBkZWZpbmVzIG11dGFibGUgb2JqZWN0cyBhbmRcbiAgIGltcGxlbWVudHMgYW4gIl9fZXFfXygpIiBtZXRob2QsIGl0IHNob3VsZCBub3QgaW1wbGVtZW50XG4gICAiX19oYXNoX18oKSIsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBoYXNoYWJsZSBjb2xsZWN0aW9uc1xuICAgcmVxdWlyZXMgdGhhdCBhIGtleVwncyBoYXNoIHZhbHVlIGlzIGltbXV0YWJsZSAoaWYgdGhlIG9iamVjdFwncyBoYXNoXG4gICB2YWx1ZSBjaGFuZ2VzLCBpdCB3aWxsIGJlIGluIHRoZSB3cm9uZyBoYXNoIGJ1Y2tldCkuXG5cbiAgIFVzZXItZGVmaW5lZCBjbGFzc2VzIGhhdmUgIl9fZXFfXygpIiBhbmQgIl9faGFzaF9fKCkiIG1ldGhvZHMgYnlcbiAgIGRlZmF1bHQ7IHdpdGggdGhlbSwgYWxsIG9iamVjdHMgY29tcGFyZSB1bmVxdWFsIChleGNlcHQgd2l0aFxuICAgdGhlbXNlbHZlcykgYW5kICJ4Ll9faGFzaF9fKCkiIHJldHVybnMgYW4gYXBwcm9wcmlhdGUgdmFsdWUgc3VjaFxuICAgdGhhdCAieCA9PSB5IiBpbXBsaWVzIGJvdGggdGhhdCAieCBpcyB5IiBhbmQgImhhc2goeCkgPT0gaGFzaCh5KSIuXG5cbiAgIEEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBhbmQgZG9lcyBub3QgZGVmaW5lICJfX2hhc2hfXygpIlxuICAgd2lsbCBoYXZlIGl0cyAiX19oYXNoX18oKSIgaW1wbGljaXRseSBzZXQgdG8gIk5vbmUiLiAgV2hlbiB0aGVcbiAgICJfX2hhc2hfXygpIiBtZXRob2Qgb2YgYSBjbGFzcyBpcyAiTm9uZSIsIGluc3RhbmNlcyBvZiB0aGUgY2xhc3NcbiAgIHdpbGwgcmFpc2UgYW4gYXBwcm9wcmlhdGUgIlR5cGVFcnJvciIgd2hlbiBhIHByb2dyYW0gYXR0ZW1wdHMgdG9cbiAgIHJldHJpZXZlIHRoZWlyIGhhc2ggdmFsdWUsIGFuZCB3aWxsIGFsc28gYmUgY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIHVuaGFzaGFibGUgd2hlbiBjaGVja2luZyAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlIikuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBvdmVycmlkZXMgIl9fZXFfXygpIiBuZWVkcyB0byByZXRhaW4gdGhlXG4gICBpbXBsZW1lbnRhdGlvbiBvZiAiX19oYXNoX18oKSIgZnJvbSBhIHBhcmVudCBjbGFzcywgdGhlIGludGVycHJldGVyXG4gICBtdXN0IGJlIHRvbGQgdGhpcyBleHBsaWNpdGx5IGJ5IHNldHRpbmcgIl9faGFzaF9fID1cbiAgIDxQYXJlbnRDbGFzcz4uX19oYXNoX18iLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgZG9lcyBub3Qgb3ZlcnJpZGUgIl9fZXFfXygpIiB3aXNoZXMgdG8gc3VwcHJlc3NcbiAgIGhhc2ggc3VwcG9ydCwgaXQgc2hvdWxkIGluY2x1ZGUgIl9faGFzaF9fID0gTm9uZSIgaW4gdGhlIGNsYXNzXG4gICBkZWZpbml0aW9uLiBBIGNsYXNzIHdoaWNoIGRlZmluZXMgaXRzIG93biAiX19oYXNoX18oKSIgdGhhdFxuICAgZXhwbGljaXRseSByYWlzZXMgYSAiVHlwZUVycm9yIiB3b3VsZCBiZSBpbmNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICBoYXNoYWJsZSBieSBhbiAiaXNpbnN0YW5jZShvYmosIGNvbGxlY3Rpb25zLkhhc2hhYmxlKSIgY2FsbC5cblxuICAgTm90ZTogQnkgZGVmYXVsdCwgdGhlICJfX2hhc2hfXygpIiB2YWx1ZXMgb2Ygc3RyLCBieXRlcyBhbmRcbiAgICAgZGF0ZXRpbWUgb2JqZWN0cyBhcmUgInNhbHRlZCIgd2l0aCBhbiB1bnByZWRpY3RhYmxlIHJhbmRvbSB2YWx1ZS5cbiAgICAgQWx0aG91Z2ggdGhleSByZW1haW4gY29uc3RhbnQgd2l0aGluIGFuIGluZGl2aWR1YWwgUHl0aG9uXG4gICAgIHByb2Nlc3MsIHRoZXkgYXJlIG5vdCBwcmVkaWN0YWJsZSBiZXR3ZWVuIHJlcGVhdGVkIGludm9jYXRpb25zIG9mXG4gICAgIFB5dGhvbi5UaGlzIGlzIGludGVuZGVkIHRvIHByb3ZpZGUgcHJvdGVjdGlvbiBhZ2FpbnN0IGEgZGVuaWFsLVxuICAgICBvZi1zZXJ2aWNlIGNhdXNlZCBieSBjYXJlZnVsbHktY2hvc2VuIGlucHV0cyB0aGF0IGV4cGxvaXQgdGhlXG4gICAgIHdvcnN0IGNhc2UgcGVyZm9ybWFuY2Ugb2YgYSBkaWN0IGluc2VydGlvbiwgTyhuXjIpIGNvbXBsZXhpdHkuXG4gICAgIFNlZSBodHRwOi8vd3d3Lm9jZXJ0Lm9yZy9hZHZpc29yaWVzL29jZXJ0LTIwMTEtMDAzLmh0bWwgZm9yXG4gICAgIGRldGFpbHMuQ2hhbmdpbmcgaGFzaCB2YWx1ZXMgYWZmZWN0cyB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mXG4gICAgIGRpY3RzLCBzZXRzIGFuZCBvdGhlciBtYXBwaW5ncy4gIFB5dGhvbiBoYXMgbmV2ZXIgbWFkZSBndWFyYW50ZWVzXG4gICAgIGFib3V0IHRoaXMgb3JkZXJpbmcgKGFuZCBpdCB0eXBpY2FsbHkgdmFyaWVzIGJldHdlZW4gMzItYml0IGFuZFxuICAgICA2NC1iaXQgYnVpbGRzKS5TZWUgYWxzbyAiUFlUSE9OSEFTSFNFRUQiLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBIYXNoIHJhbmRvbWl6YXRpb24gaXMgZW5hYmxlZCBieSBkZWZhdWx0LlxuXG5vYmplY3QuX19ib29sX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0cnV0aCB2YWx1ZSB0ZXN0aW5nIGFuZCB0aGUgYnVpbHQtaW4gb3BlcmF0aW9uXG4gICAiYm9vbCgpIjsgc2hvdWxkIHJldHVybiAiRmFsc2UiIG9yICJUcnVlIi4gIFdoZW4gdGhpcyBtZXRob2QgaXMgbm90XG4gICBkZWZpbmVkLCAiX19sZW5fXygpIiBpcyBjYWxsZWQsIGlmIGl0IGlzIGRlZmluZWQsIGFuZCB0aGUgb2JqZWN0IGlzXG4gICBjb25zaWRlcmVkIHRydWUgaWYgaXRzIHJlc3VsdCBpcyBub256ZXJvLiAgSWYgYSBjbGFzcyBkZWZpbmVzXG4gICBuZWl0aGVyICJfX2xlbl9fKCkiIG5vciAiX19ib29sX18oKSIsIGFsbCBpdHMgaW5zdGFuY2VzIGFyZVxuICAgY29uc2lkZXJlZCB0cnVlLlxuXG5cbkN1c3RvbWl6aW5nIGF0dHJpYnV0ZSBhY2Nlc3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGN1c3RvbWl6ZSB0aGUgbWVhbmluZyBvZlxuYXR0cmlidXRlIGFjY2VzcyAodXNlIG9mLCBhc3NpZ25tZW50IHRvLCBvciBkZWxldGlvbiBvZiAieC5uYW1lIikgZm9yXG5jbGFzcyBpbnN0YW5jZXMuXG5cbm9iamVjdC5fX2dldGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgbG9va3VwIGhhcyBub3QgZm91bmQgdGhlIGF0dHJpYnV0ZSBpbiB0aGVcbiAgIHVzdWFsIHBsYWNlcyAoaS5lLiBpdCBpcyBub3QgYW4gaW5zdGFuY2UgYXR0cmlidXRlIG5vciBpcyBpdCBmb3VuZFxuICAgaW4gdGhlIGNsYXNzIHRyZWUgZm9yICJzZWxmIikuICAibmFtZSIgaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLiBUaGlzXG4gICBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgICJBdHRyaWJ1dGVFcnJvciIgZXhjZXB0aW9uLlxuXG4gICBOb3RlIHRoYXQgaWYgdGhlIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aHJvdWdoIHRoZSBub3JtYWwgbWVjaGFuaXNtLFxuICAgIl9fZ2V0YXR0cl9fKCkiIGlzIG5vdCBjYWxsZWQuICAoVGhpcyBpcyBhbiBpbnRlbnRpb25hbCBhc3ltbWV0cnlcbiAgIGJldHdlZW4gIl9fZ2V0YXR0cl9fKCkiIGFuZCAiX19zZXRhdHRyX18oKSIuKSBUaGlzIGlzIGRvbmUgYm90aCBmb3JcbiAgIGVmZmljaWVuY3kgcmVhc29ucyBhbmQgYmVjYXVzZSBvdGhlcndpc2UgIl9fZ2V0YXR0cl9fKCkiIHdvdWxkIGhhdmVcbiAgIG5vIHdheSB0byBhY2Nlc3Mgb3RoZXIgYXR0cmlidXRlcyBvZiB0aGUgaW5zdGFuY2UuICBOb3RlIHRoYXQgYXRcbiAgIGxlYXN0IGZvciBpbnN0YW5jZSB2YXJpYWJsZXMsIHlvdSBjYW4gZmFrZSB0b3RhbCBjb250cm9sIGJ5IG5vdFxuICAgaW5zZXJ0aW5nIGFueSB2YWx1ZXMgaW4gdGhlIGluc3RhbmNlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5IChidXRcbiAgIGluc3RlYWQgaW5zZXJ0aW5nIHRoZW0gaW4gYW5vdGhlciBvYmplY3QpLiAgU2VlIHRoZVxuICAgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWV0aG9kIGJlbG93IGZvciBhIHdheSB0byBhY3R1YWxseSBnZXQgdG90YWxcbiAgIGNvbnRyb2wgb3ZlciBhdHRyaWJ1dGUgYWNjZXNzLlxuXG5vYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKVxuXG4gICBDYWxsZWQgdW5jb25kaXRpb25hbGx5IHRvIGltcGxlbWVudCBhdHRyaWJ1dGUgYWNjZXNzZXMgZm9yXG4gICBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzLiBJZiB0aGUgY2xhc3MgYWxzbyBkZWZpbmVzICJfX2dldGF0dHJfXygpIixcbiAgIHRoZSBsYXR0ZXIgd2lsbCBub3QgYmUgY2FsbGVkIHVubGVzcyAiX19nZXRhdHRyaWJ1dGVfXygpIiBlaXRoZXJcbiAgIGNhbGxzIGl0IGV4cGxpY2l0bHkgb3IgcmFpc2VzIGFuICJBdHRyaWJ1dGVFcnJvciIuIFRoaXMgbWV0aG9kXG4gICBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uIEluIG9yZGVyIHRvIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBpblxuICAgdGhpcyBtZXRob2QsIGl0cyBpbXBsZW1lbnRhdGlvbiBzaG91bGQgYWx3YXlzIGNhbGwgdGhlIGJhc2UgY2xhc3NcbiAgIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUgdG8gYWNjZXNzIGFueSBhdHRyaWJ1dGVzIGl0IG5lZWRzLCBmb3JcbiAgIGV4YW1wbGUsICJvYmplY3QuX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKSIuXG5cbiAgIE5vdGU6IFRoaXMgbWV0aG9kIG1heSBzdGlsbCBiZSBieXBhc3NlZCB3aGVuIGxvb2tpbmcgdXAgc3BlY2lhbFxuICAgICBtZXRob2RzIGFzIHRoZSByZXN1bHQgb2YgaW1wbGljaXQgaW52b2NhdGlvbiB2aWEgbGFuZ3VhZ2Ugc3ludGF4XG4gICAgIG9yIGJ1aWx0LWluIGZ1bmN0aW9ucy4gU2VlICpTcGVjaWFsIG1ldGhvZCBsb29rdXAqLlxuXG5vYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBhc3NpZ25tZW50IGlzIGF0dGVtcHRlZC4gIFRoaXMgaXMgY2FsbGVkXG4gICBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgbWVjaGFuaXNtIChpLmUuIHN0b3JlIHRoZSB2YWx1ZSBpbiB0aGVcbiAgIGluc3RhbmNlIGRpY3Rpb25hcnkpLiAqbmFtZSogaXMgdGhlIGF0dHJpYnV0ZSBuYW1lLCAqdmFsdWUqIGlzIHRoZVxuICAgdmFsdWUgdG8gYmUgYXNzaWduZWQgdG8gaXQuXG5cbiAgIElmICJfX3NldGF0dHJfXygpIiB3YW50cyB0byBhc3NpZ24gdG8gYW4gaW5zdGFuY2UgYXR0cmlidXRlLCBpdFxuICAgc2hvdWxkIGNhbGwgdGhlIGJhc2UgY2xhc3MgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSwgZm9yIGV4YW1wbGUsXG4gICAib2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKSIuXG5cbm9iamVjdC5fX2RlbGF0dHJfXyhzZWxmLCBuYW1lKVxuXG4gICBMaWtlICJfX3NldGF0dHJfXygpIiBidXQgZm9yIGF0dHJpYnV0ZSBkZWxldGlvbiBpbnN0ZWFkIG9mXG4gICBhc3NpZ25tZW50LiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBpZiAiZGVsIG9iai5uYW1lIiBpc1xuICAgbWVhbmluZ2Z1bCBmb3IgdGhlIG9iamVjdC5cblxub2JqZWN0Ll9fZGlyX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gImRpcigpIiBpcyBjYWxsZWQgb24gdGhlIG9iamVjdC4gQSBzZXF1ZW5jZSBtdXN0IGJlXG4gICByZXR1cm5lZC4gImRpcigpIiBjb252ZXJ0cyB0aGUgcmV0dXJuZWQgc2VxdWVuY2UgdG8gYSBsaXN0IGFuZFxuICAgc29ydHMgaXQuXG5cblxuSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIG9ubHkgYXBwbHkgd2hlbiBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3NcbmNvbnRhaW5pbmcgdGhlIG1ldGhvZCAoYSBzby1jYWxsZWQgKmRlc2NyaXB0b3IqIGNsYXNzKSBhcHBlYXJzIGluIGFuXG4qb3duZXIqIGNsYXNzICh0aGUgZGVzY3JpcHRvciBtdXN0IGJlIGluIGVpdGhlciB0aGUgb3duZXJcJ3MgY2xhc3NcbmRpY3Rpb25hcnkgb3IgaW4gdGhlIGNsYXNzIGRpY3Rpb25hcnkgZm9yIG9uZSBvZiBpdHMgcGFyZW50cykuICBJbiB0aGVcbmV4YW1wbGVzIGJlbG93LCAidGhlIGF0dHJpYnV0ZSIgcmVmZXJzIHRvIHRoZSBhdHRyaWJ1dGUgd2hvc2UgbmFtZSBpc1xudGhlIGtleSBvZiB0aGUgcHJvcGVydHkgaW4gdGhlIG93bmVyIGNsYXNzXCcgIl9fZGljdF9fIi5cblxub2JqZWN0Ll9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyKVxuXG4gICBDYWxsZWQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YgdGhlIG93bmVyIGNsYXNzIChjbGFzcyBhdHRyaWJ1dGVcbiAgIGFjY2Vzcykgb3Igb2YgYW4gaW5zdGFuY2Ugb2YgdGhhdCBjbGFzcyAoaW5zdGFuY2UgYXR0cmlidXRlXG4gICBhY2Nlc3MpLiAqb3duZXIqIGlzIGFsd2F5cyB0aGUgb3duZXIgY2xhc3MsIHdoaWxlICppbnN0YW5jZSogaXMgdGhlXG4gICBpbnN0YW5jZSB0aGF0IHRoZSBhdHRyaWJ1dGUgd2FzIGFjY2Vzc2VkIHRocm91Z2gsIG9yICJOb25lIiB3aGVuXG4gICB0aGUgYXR0cmlidXRlIGlzIGFjY2Vzc2VkIHRocm91Z2ggdGhlICpvd25lciouICBUaGlzIG1ldGhvZCBzaG91bGRcbiAgIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW4gIkF0dHJpYnV0ZUVycm9yIlxuICAgZXhjZXB0aW9uLlxuXG5vYmplY3QuX19zZXRfXyhzZWxmLCBpbnN0YW5jZSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBzZXQgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZSBvd25lclxuICAgY2xhc3MgdG8gYSBuZXcgdmFsdWUsICp2YWx1ZSouXG5cbm9iamVjdC5fX2RlbGV0ZV9fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBDYWxsZWQgdG8gZGVsZXRlIHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGVcbiAgIG93bmVyIGNsYXNzLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIsIGFuZFxuIl9fZGVsZXRlX18oKSIuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsIGl0XG5pcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsICJhLngiIGhhcyBhXG5sb29rdXAgY2hhaW4gc3RhcnRpbmcgd2l0aCAiYS5fX2RpY3RfX1tcJ3hcJ10iLCB0aGVuXG4idHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10iLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbiJ0eXBlKGEpIiBleGNsdWRpbmcgbWV0YWNsYXNzZXMuXG5cbkhvd2V2ZXIsIGlmIHRoZSBsb29rZWQtdXAgdmFsdWUgaXMgYW4gb2JqZWN0IGRlZmluaW5nIG9uZSBvZiB0aGVcbmRlc2NyaXB0b3IgbWV0aG9kcywgdGhlbiBQeXRob24gbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZFxuaW52b2tlIHRoZSBkZXNjcmlwdG9yIG1ldGhvZCBpbnN0ZWFkLiAgV2hlcmUgdGhpcyBvY2N1cnMgaW4gdGhlXG5wcmVjZWRlbmNlIGNoYWluIGRlcGVuZHMgb24gd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIHdlcmUgZGVmaW5lZCBhbmRcbmhvdyB0aGV5IHdlcmUgY2FsbGVkLlxuXG5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBpcyBhIGJpbmRpbmcsICJhLngiLiBIb3dcbnRoZSBhcmd1bWVudHMgYXJlIGFzc2VtYmxlZCBkZXBlbmRzIG9uICJhIjpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgInguX19nZXRfXyhhKSIuXG5cbkluc3RhbmNlIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYW4gb2JqZWN0IGluc3RhbmNlLCAiYS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZVxuICAgY2FsbDogInR5cGUoYSkuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oYSwgdHlwZShhKSkiLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsICJBLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGNhbGw6XG4gICAiQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKSIuXG5cblN1cGVyIEJpbmRpbmdcbiAgIElmICJhIiBpcyBhbiBpbnN0YW5jZSBvZiAic3VwZXIiLCB0aGVuIHRoZSBiaW5kaW5nICJzdXBlcihCLFxuICAgb2JqKS5tKCkiIHNlYXJjaGVzICJvYmouX19jbGFzc19fLl9fbXJvX18iIGZvciB0aGUgYmFzZSBjbGFzcyAiQSJcbiAgIGltbWVkaWF0ZWx5IHByZWNlZGluZyAiQiIgYW5kIHRoZW4gaW52b2tlcyB0aGUgZGVzY3JpcHRvciB3aXRoIHRoZVxuICAgY2FsbDogIkEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBvYmouX19jbGFzc19fKSIuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiBhbmQgIl9fZGVsZXRlX18oKSIuICBJZiBpdFxuZG9lcyBub3QgZGVmaW5lICJfX2dldF9fKCkiLCB0aGVuIGFjY2Vzc2luZyB0aGUgYXR0cmlidXRlIHdpbGwgcmV0dXJuXG50aGUgZGVzY3JpcHRvciBvYmplY3QgaXRzZWxmIHVubGVzcyB0aGVyZSBpcyBhIHZhbHVlIGluIHRoZSBvYmplY3RcJ3Ncbmluc3RhbmNlIGRpY3Rpb25hcnkuICBJZiB0aGUgZGVzY3JpcHRvciBkZWZpbmVzICJfX3NldF9fKCkiIGFuZC9vclxuIl9fZGVsZXRlX18oKSIsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzIG5laXRoZXIsIGl0IGlzXG5hIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9ycyBkZWZpbmUgYm90aFxuIl9fZ2V0X18oKSIgYW5kICJfX3NldF9fKCkiLCB3aGlsZSBub24tZGF0YSBkZXNjcmlwdG9ycyBoYXZlIGp1c3QgdGhlXG4iX19nZXRfXygpIiBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGggIl9fc2V0X18oKSIgYW5kICJfX2dldF9fKCkiXG5kZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvbiBpbiBhbiBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSW5cbmNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBpbnN0YW5jZXMuXG5cblB5dGhvbiBtZXRob2RzIChpbmNsdWRpbmcgInN0YXRpY21ldGhvZCgpIiBhbmQgImNsYXNzbWV0aG9kKCkiKSBhcmVcbmltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgInByb3BlcnR5KCkiIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgZGF0YSBkZXNjcmlwdG9yLlxuQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5ub3Qgb3ZlcnJpZGUgdGhlIGJlaGF2aW9yIG9mIGEgcHJvcGVydHkuXG5cblxuX19zbG90c19fXG4tLS0tLS0tLS1cblxuQnkgZGVmYXVsdCwgaW5zdGFuY2VzIG9mIGNsYXNzZXMgaGF2ZSBhIGRpY3Rpb25hcnkgZm9yIGF0dHJpYnV0ZVxuc3RvcmFnZS4gIFRoaXMgd2FzdGVzIHNwYWNlIGZvciBvYmplY3RzIGhhdmluZyB2ZXJ5IGZldyBpbnN0YW5jZVxudmFyaWFibGVzLiAgVGhlIHNwYWNlIGNvbnN1bXB0aW9uIGNhbiBiZWNvbWUgYWN1dGUgd2hlbiBjcmVhdGluZyBsYXJnZVxubnVtYmVycyBvZiBpbnN0YW5jZXMuXG5cblRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nICpfX3Nsb3RzX18qIGluIGEgY2xhc3NcbmRlZmluaXRpb24uIFRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB0YWtlcyBhIHNlcXVlbmNlIG9mIGluc3RhbmNlXG52YXJpYWJsZXMgYW5kIHJlc2VydmVzIGp1c3QgZW5vdWdoIHNwYWNlIGluIGVhY2ggaW5zdGFuY2UgdG8gaG9sZCBhXG52YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gIFNwYWNlIGlzIHNhdmVkIGJlY2F1c2UgKl9fZGljdF9fKiBpcyBub3RcbmNyZWF0ZWQgZm9yIGVhY2ggaW5zdGFuY2UuXG5cbm9iamVjdC5fX3Nsb3RzX19cblxuICAgVGhpcyBjbGFzcyB2YXJpYWJsZSBjYW4gYmUgYXNzaWduZWQgYSBzdHJpbmcsIGl0ZXJhYmxlLCBvciBzZXF1ZW5jZVxuICAgb2Ygc3RyaW5ncyB3aXRoIHZhcmlhYmxlIG5hbWVzIHVzZWQgYnkgaW5zdGFuY2VzLiAgSWYgZGVmaW5lZCBpbiBhXG4gICBjbGFzcywgKl9fc2xvdHNfXyogcmVzZXJ2ZXMgc3BhY2UgZm9yIHRoZSBkZWNsYXJlZCB2YXJpYWJsZXMgYW5kXG4gICBwcmV2ZW50cyB0aGUgYXV0b21hdGljIGNyZWF0aW9uIG9mICpfX2RpY3RfXyogYW5kICpfX3dlYWtyZWZfXyogZm9yXG4gICBlYWNoIGluc3RhbmNlLlxuXG5cbk5vdGVzIG9uIHVzaW5nICpfX3Nsb3RzX18qXG5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuXG4qIFdoZW4gaW5oZXJpdGluZyBmcm9tIGEgY2xhc3Mgd2l0aG91dCAqX19zbG90c19fKiwgdGhlICpfX2RpY3RfXypcbiAgYXR0cmlidXRlIG9mIHRoYXQgY2xhc3Mgd2lsbCBhbHdheXMgYmUgYWNjZXNzaWJsZSwgc28gYSAqX19zbG90c19fKlxuICBkZWZpbml0aW9uIGluIHRoZSBzdWJjbGFzcyBpcyBtZWFuaW5nbGVzcy5cblxuKiBXaXRob3V0IGEgKl9fZGljdF9fKiB2YXJpYWJsZSwgaW5zdGFuY2VzIGNhbm5vdCBiZSBhc3NpZ25lZCBuZXdcbiAgdmFyaWFibGVzIG5vdCBsaXN0ZWQgaW4gdGhlICpfX3Nsb3RzX18qIGRlZmluaXRpb24uICBBdHRlbXB0cyB0b1xuICBhc3NpZ24gdG8gYW4gdW5saXN0ZWQgdmFyaWFibGUgbmFtZSByYWlzZXMgIkF0dHJpYnV0ZUVycm9yIi4gSWZcbiAgZHluYW1pYyBhc3NpZ25tZW50IG9mIG5ldyB2YXJpYWJsZXMgaXMgZGVzaXJlZCwgdGhlbiBhZGRcbiAgIlwnX19kaWN0X19cJyIgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4qIFdpdGhvdXQgYSAqX193ZWFrcmVmX18qIHZhcmlhYmxlIGZvciBlYWNoIGluc3RhbmNlLCBjbGFzc2VzXG4gIGRlZmluaW5nICpfX3Nsb3RzX18qIGRvIG5vdCBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlcyB0byBpdHNcbiAgaW5zdGFuY2VzLiBJZiB3ZWFrIHJlZmVyZW5jZSBzdXBwb3J0IGlzIG5lZWRlZCwgdGhlbiBhZGRcbiAgIlwnX193ZWFrcmVmX19cJyIgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4qICpfX3Nsb3RzX18qIGFyZSBpbXBsZW1lbnRlZCBhdCB0aGUgY2xhc3MgbGV2ZWwgYnkgY3JlYXRpbmdcbiAgZGVzY3JpcHRvcnMgKCpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqKSBmb3IgZWFjaCB2YXJpYWJsZSBuYW1lLiAgQXNcbiAgYSByZXN1bHQsIGNsYXNzIGF0dHJpYnV0ZXMgY2Fubm90IGJlIHVzZWQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvclxuICBpbnN0YW5jZSB2YXJpYWJsZXMgZGVmaW5lZCBieSAqX19zbG90c19fKjsgb3RoZXJ3aXNlLCB0aGUgY2xhc3NcbiAgYXR0cmlidXRlIHdvdWxkIG92ZXJ3cml0ZSB0aGUgZGVzY3JpcHRvciBhc3NpZ25tZW50LlxuXG4qIFRoZSBhY3Rpb24gb2YgYSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzc1xuICB3aGVyZSBpdCBpcyBkZWZpbmVkLiAgQXMgYSByZXN1bHQsIHN1YmNsYXNzZXMgd2lsbCBoYXZlIGEgKl9fZGljdF9fKlxuICB1bmxlc3MgdGhleSBhbHNvIGRlZmluZSAqX19zbG90c19fKiAod2hpY2ggbXVzdCBvbmx5IGNvbnRhaW4gbmFtZXNcbiAgb2YgYW55ICphZGRpdGlvbmFsKiBzbG90cykuXG5cbiogSWYgYSBjbGFzcyBkZWZpbmVzIGEgc2xvdCBhbHNvIGRlZmluZWQgaW4gYSBiYXNlIGNsYXNzLCB0aGVcbiAgaW5zdGFuY2UgdmFyaWFibGUgZGVmaW5lZCBieSB0aGUgYmFzZSBjbGFzcyBzbG90IGlzIGluYWNjZXNzaWJsZVxuICAoZXhjZXB0IGJ5IHJldHJpZXZpbmcgaXRzIGRlc2NyaXB0b3IgZGlyZWN0bHkgZnJvbSB0aGUgYmFzZSBjbGFzcykuXG4gIFRoaXMgcmVuZGVycyB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbSB1bmRlZmluZWQuICBJbiB0aGUgZnV0dXJlLCBhXG4gIGNoZWNrIG1heSBiZSBhZGRlZCB0byBwcmV2ZW50IHRoaXMuXG5cbiogTm9uZW1wdHkgKl9fc2xvdHNfXyogZG9lcyBub3Qgd29yayBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb21cbiAgInZhcmlhYmxlLWxlbmd0aCIgYnVpbHQtaW4gdHlwZXMgc3VjaCBhcyAiaW50IiwgImJ5dGVzIiBhbmQgInR1cGxlIi5cblxuKiBBbnkgbm9uLXN0cmluZyBpdGVyYWJsZSBtYXkgYmUgYXNzaWduZWQgdG8gKl9fc2xvdHNfXyouIE1hcHBpbmdzXG4gIG1heSBhbHNvIGJlIHVzZWQ7IGhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIHNwZWNpYWwgbWVhbmluZyBtYXkgYmVcbiAgYXNzaWduZWQgdG8gdGhlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gga2V5LlxuXG4qICpfX2NsYXNzX18qIGFzc2lnbm1lbnQgd29ya3Mgb25seSBpZiBib3RoIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZVxuICAqX19zbG90c19fKi5cblxuXG5DdXN0b21pemluZyBjbGFzcyBjcmVhdGlvblxuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQnkgZGVmYXVsdCwgY2xhc3NlcyBhcmUgY29uc3RydWN0ZWQgdXNpbmcgInR5cGUoKSIuIFRoZSBjbGFzcyBib2R5IGlzXG5leGVjdXRlZCBpbiBhIG5ldyBuYW1lc3BhY2UgYW5kIHRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIGxvY2FsbHkgdG8gdGhlXG5yZXN1bHQgb2YgInR5cGUobmFtZSwgYmFzZXMsIG5hbWVzcGFjZSkiLlxuXG5UaGUgY2xhc3MgY3JlYXRpb24gcHJvY2VzcyBjYW4gYmUgY3VzdG9taXNlZCBieSBwYXNzaW5nIHRoZVxuIm1ldGFjbGFzcyIga2V5d29yZCBhcmd1bWVudCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBsaW5lLCBvciBieVxuaW5oZXJpdGluZyBmcm9tIGFuIGV4aXN0aW5nIGNsYXNzIHRoYXQgaW5jbHVkZWQgc3VjaCBhbiBhcmd1bWVudC4gSW5cbnRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgYm90aCAiTXlDbGFzcyIgYW5kICJNeVN1YmNsYXNzIiBhcmUgaW5zdGFuY2VzXG5vZiAiTWV0YSI6XG5cbiAgIGNsYXNzIE1ldGEodHlwZSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeUNsYXNzKG1ldGFjbGFzcz1NZXRhKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15U3ViY2xhc3MoTXlDbGFzcyk6XG4gICAgICAgcGFzc1xuXG5Bbnkgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgc3BlY2lmaWVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uXG5hcmUgcGFzc2VkIHRocm91Z2ggdG8gYWxsIG1ldGFjbGFzcyBvcGVyYXRpb25zIGRlc2NyaWJlZCBiZWxvdy5cblxuV2hlbiBhIGNsYXNzIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQsIHRoZSBmb2xsb3dpbmcgc3RlcHMgb2NjdXI6XG5cbiogdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBpcyBkZXRlcm1pbmVkXG5cbiogdGhlIGNsYXNzIG5hbWVzcGFjZSBpcyBwcmVwYXJlZFxuXG4qIHRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkXG5cbiogdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkXG5cblxuRGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGZvciBhIGNsYXNzIGRlZmluaXRpb24gaXMgZGV0ZXJtaW5lZCBhc1xuZm9sbG93czpcblxuKiBpZiBubyBiYXNlcyBhbmQgbm8gZXhwbGljaXQgbWV0YWNsYXNzIGFyZSBnaXZlbiwgdGhlbiAidHlwZSgpIiBpc1xuICB1c2VkXG5cbiogaWYgYW4gZXhwbGljaXQgbWV0YWNsYXNzIGlzIGdpdmVuIGFuZCBpdCBpcyAqbm90KiBhbiBpbnN0YW5jZSBvZlxuICAidHlwZSgpIiwgdGhlbiBpdCBpcyB1c2VkIGRpcmVjdGx5IGFzIHRoZSBtZXRhY2xhc3NcblxuKiBpZiBhbiBpbnN0YW5jZSBvZiAidHlwZSgpIiBpcyBnaXZlbiBhcyB0aGUgZXhwbGljaXQgbWV0YWNsYXNzLCBvclxuICBiYXNlcyBhcmUgZGVmaW5lZCwgdGhlbiB0aGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyB1c2VkXG5cblRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHNlbGVjdGVkIGZyb20gdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkXG5tZXRhY2xhc3MgKGlmIGFueSkgYW5kIHRoZSBtZXRhY2xhc3NlcyAoaS5lLiAidHlwZShjbHMpIikgb2YgYWxsXG5zcGVjaWZpZWQgYmFzZSBjbGFzc2VzLiBUaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBvbmUgd2hpY2ggaXMgYVxuc3VidHlwZSBvZiAqYWxsKiBvZiB0aGVzZSBjYW5kaWRhdGUgbWV0YWNsYXNzZXMuIElmIG5vbmUgb2YgdGhlXG5jYW5kaWRhdGUgbWV0YWNsYXNzZXMgbWVldHMgdGhhdCBjcml0ZXJpb24sIHRoZW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbndpbGwgZmFpbCB3aXRoICJUeXBlRXJyb3IiLlxuXG5cblByZXBhcmluZyB0aGUgY2xhc3MgbmFtZXNwYWNlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaGFzIGJlZW4gaWRlbnRpZmllZCwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBwcmVwYXJlZC4gSWYgdGhlIG1ldGFjbGFzcyBoYXMgYSAiX19wcmVwYXJlX18iIGF0dHJpYnV0ZSxcbml0IGlzIGNhbGxlZCBhcyAibmFtZXNwYWNlID0gbWV0YWNsYXNzLl9fcHJlcGFyZV9fKG5hbWUsIGJhc2VzLFxuKiprd2RzKSIgKHdoZXJlIHRoZSBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLCBpZiBhbnksIGNvbWUgZnJvbVxudGhlIGNsYXNzIGRlZmluaXRpb24pLlxuXG5JZiB0aGUgbWV0YWNsYXNzIGhhcyBubyAiX19wcmVwYXJlX18iIGF0dHJpYnV0ZSwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBpbml0aWFsaXNlZCBhcyBhbiBlbXB0eSAiZGljdCgpIiBpbnN0YW5jZS5cblxuU2VlIGFsc286ICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzMDAwXG5cbiAgICAgSW50cm9kdWNlZCB0aGUgIl9fcHJlcGFyZV9fIiBuYW1lc3BhY2UgaG9va1xuXG5cbkV4ZWN1dGluZyB0aGUgY2xhc3MgYm9keVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkIChhcHByb3hpbWF0ZWx5KSBhcyAiZXhlYyhib2R5LCBnbG9iYWxzKCksXG5uYW1lc3BhY2UpIi4gVGhlIGtleSBkaWZmZXJlbmNlIGZyb20gYSBub3JtYWwgY2FsbCB0byAiZXhlYygpIiBpcyB0aGF0XG5sZXhpY2FsIHNjb3BpbmcgYWxsb3dzIHRoZSBjbGFzcyBib2R5IChpbmNsdWRpbmcgYW55IG1ldGhvZHMpIHRvXG5yZWZlcmVuY2UgbmFtZXMgZnJvbSB0aGUgY3VycmVudCBhbmQgb3V0ZXIgc2NvcGVzIHdoZW4gdGhlIGNsYXNzXG5kZWZpbml0aW9uIG9jY3VycyBpbnNpZGUgYSBmdW5jdGlvbi5cblxuSG93ZXZlciwgZXZlbiB3aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIG9jY3VycyBpbnNpZGUgdGhlIGZ1bmN0aW9uLFxubWV0aG9kcyBkZWZpbmVkIGluc2lkZSB0aGUgY2xhc3Mgc3RpbGwgY2Fubm90IHNlZSBuYW1lcyBkZWZpbmVkIGF0IHRoZVxuY2xhc3Mgc2NvcGUuIENsYXNzIHZhcmlhYmxlcyBtdXN0IGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGZpcnN0XG5wYXJhbWV0ZXIgb2YgaW5zdGFuY2Ugb3IgY2xhc3MgbWV0aG9kcywgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCBhdCBhbGxcbmZyb20gc3RhdGljIG1ldGhvZHMuXG5cblxuQ3JlYXRpbmcgdGhlIGNsYXNzIG9iamVjdFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBjbGFzcyBuYW1lc3BhY2UgaGFzIGJlZW4gcG9wdWxhdGVkIGJ5IGV4ZWN1dGluZyB0aGUgY2xhc3NcbmJvZHksIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZCBieSBjYWxsaW5nICJtZXRhY2xhc3MobmFtZSwgYmFzZXMsXG5uYW1lc3BhY2UsICoqa3dkcykiICh0aGUgYWRkaXRpb25hbCBrZXl3b3JkcyBwYXNzZWQgaGVyZSBhcmUgdGhlIHNhbWVcbmFzIHRob3NlIHBhc3NlZCB0byAiX19wcmVwYXJlX18iKS5cblxuVGhpcyBjbGFzcyBvYmplY3QgaXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgcmVmZXJlbmNlZCBieSB0aGUgemVyby1cbmFyZ3VtZW50IGZvcm0gb2YgInN1cGVyKCkiLiAiX19jbGFzc19fIiBpcyBhbiBpbXBsaWNpdCBjbG9zdXJlXG5yZWZlcmVuY2UgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaWYgYW55IG1ldGhvZHMgaW4gYSBjbGFzcyBib2R5IHJlZmVyXG50byBlaXRoZXIgIl9fY2xhc3NfXyIgb3IgInN1cGVyIi4gVGhpcyBhbGxvd3MgdGhlIHplcm8gYXJndW1lbnQgZm9ybVxub2YgInN1cGVyKCkiIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgY2xhc3MgYmVpbmcgZGVmaW5lZCBiYXNlZCBvblxubGV4aWNhbCBzY29waW5nLCB3aGlsZSB0aGUgY2xhc3Mgb3IgaW5zdGFuY2UgdGhhdCB3YXMgdXNlZCB0byBtYWtlIHRoZVxuY3VycmVudCBjYWxsIGlzIGlkZW50aWZpZWQgYmFzZWQgb24gdGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGVcbm1ldGhvZC5cblxuQWZ0ZXIgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNsYXNzXG5kZWNvcmF0b3JzIGluY2x1ZGVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIChpZiBhbnkpIGFuZCB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBhcyB0aGUgZGVmaW5lZCBjbGFzcy5cblxuU2VlIGFsc286ICoqUEVQIDMxMzUqKiAtIE5ldyBzdXBlclxuXG4gICAgIERlc2NyaWJlcyB0aGUgaW1wbGljaXQgIl9fY2xhc3NfXyIgY2xvc3VyZSByZWZlcmVuY2VcblxuXG5NZXRhY2xhc3MgZXhhbXBsZVxuLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIHBvdGVudGlhbCB1c2VzIGZvciBtZXRhY2xhc3NlcyBhcmUgYm91bmRsZXNzLiBTb21lIGlkZWFzIHRoYXQgaGF2ZVxuYmVlbiBleHBsb3JlZCBpbmNsdWRlIGxvZ2dpbmcsIGludGVyZmFjZSBjaGVja2luZywgYXV0b21hdGljXG5kZWxlZ2F0aW9uLCBhdXRvbWF0aWMgcHJvcGVydHkgY3JlYXRpb24sIHByb3hpZXMsIGZyYW1ld29ya3MsIGFuZFxuYXV0b21hdGljIHJlc291cmNlIGxvY2tpbmcvc3luY2hyb25pemF0aW9uLlxuXG5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXRhY2xhc3MgdGhhdCB1c2VzIGFuXG4iY29sbGVjdGlvbnMuT3JkZXJlZERpY3QiIHRvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIG1lbWJlcnNcbndlcmUgZGVmaW5lZDpcblxuICAgY2xhc3MgT3JkZXJlZENsYXNzKHR5cGUpOlxuXG4gICAgICAgIEBjbGFzc21ldGhvZFxuICAgICAgICBkZWYgX19wcmVwYXJlX18obWV0YWNscywgbmFtZSwgYmFzZXMsICoqa3dkcyk6XG4gICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpXG5cbiAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgbmFtZXNwYWNlLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXN1bHQgPSB0eXBlLl9fbmV3X18oY2xzLCBuYW1lLCBiYXNlcywgZGljdChuYW1lc3BhY2UpKVxuICAgICAgICAgICByZXN1bHQubWVtYmVycyA9IHR1cGxlKG5hbWVzcGFjZSlcbiAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuXG4gICBjbGFzcyBBKG1ldGFjbGFzcz1PcmRlcmVkQ2xhc3MpOlxuICAgICAgIGRlZiBvbmUoc2VsZik6IHBhc3NcbiAgICAgICBkZWYgdHdvKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHRocmVlKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIGZvdXIoc2VsZik6IHBhc3NcblxuICAgPj4+IEEubWVtYmVyc1xuICAgKFwnX19tb2R1bGVfX1wnLCBcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCcsIFwnZm91clwnKVxuXG5XaGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIGZvciAqQSogZ2V0cyBleGVjdXRlZCwgdGhlIHByb2Nlc3MgYmVnaW5zXG53aXRoIGNhbGxpbmcgdGhlIG1ldGFjbGFzc1wncyAiX19wcmVwYXJlX18oKSIgbWV0aG9kIHdoaWNoIHJldHVybnMgYW5cbmVtcHR5ICJjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCIuICBUaGF0IG1hcHBpbmcgcmVjb3JkcyB0aGUgbWV0aG9kcyBhbmRcbmF0dHJpYnV0ZXMgb2YgKkEqIGFzIHRoZXkgYXJlIGRlZmluZWQgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBjbGFzc1xuc3RhdGVtZW50LiBPbmNlIHRob3NlIGRlZmluaXRpb25zIGFyZSBleGVjdXRlZCwgdGhlIG9yZGVyZWQgZGljdGlvbmFyeVxuaXMgZnVsbHkgcG9wdWxhdGVkIGFuZCB0aGUgbWV0YWNsYXNzXCdzICJfX25ld19fKCkiIG1ldGhvZCBnZXRzXG5pbnZva2VkLiAgVGhhdCBtZXRob2QgYnVpbGRzIHRoZSBuZXcgdHlwZSBhbmQgaXQgc2F2ZXMgdGhlIG9yZGVyZWRcbmRpY3Rpb25hcnkga2V5cyBpbiBhbiBhdHRyaWJ1dGUgY2FsbGVkICJtZW1iZXJzIi5cblxuXG5DdXN0b21pemluZyBpbnN0YW5jZSBhbmQgc3ViY2xhc3MgY2hlY2tzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGVcbiJpc2luc3RhbmNlKCkiIGFuZCAiaXNzdWJjbGFzcygpIiBidWlsdC1pbiBmdW5jdGlvbnMuXG5cbkluIHBhcnRpY3VsYXIsIHRoZSBtZXRhY2xhc3MgImFiYy5BQkNNZXRhIiBpbXBsZW1lbnRzIHRoZXNlIG1ldGhvZHMgaW5cbm9yZGVyIHRvIGFsbG93IHRoZSBhZGRpdGlvbiBvZiBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKEFCQ3MpIGFzXG4idmlydHVhbCBiYXNlIGNsYXNzZXMiIHRvIGFueSBjbGFzcyBvciB0eXBlIChpbmNsdWRpbmcgYnVpbHQtaW5cbnR5cGVzKSwgaW5jbHVkaW5nIG90aGVyIEFCQ3MuXG5cbmNsYXNzLl9faW5zdGFuY2VjaGVja19fKHNlbGYsIGluc3RhbmNlKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiAqaW5zdGFuY2UqIHNob3VsZCBiZSBjb25zaWRlcmVkIGEgKGRpcmVjdCBvclxuICAgaW5kaXJlY3QpIGluc3RhbmNlIG9mICpjbGFzcyouIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgICJpc2luc3RhbmNlKGluc3RhbmNlLCBjbGFzcykiLlxuXG5jbGFzcy5fX3N1YmNsYXNzY2hlY2tfXyhzZWxmLCBzdWJjbGFzcylcblxuICAgUmV0dXJuIHRydWUgaWYgKnN1YmNsYXNzKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBzdWJjbGFzcyBvZiAqY2xhc3MqLiAgSWYgZGVmaW5lZCwgY2FsbGVkIHRvIGltcGxlbWVudFxuICAgImlzc3ViY2xhc3Moc3ViY2xhc3MsIGNsYXNzKSIuXG5cbk5vdGUgdGhhdCB0aGVzZSBtZXRob2RzIGFyZSBsb29rZWQgdXAgb24gdGhlIHR5cGUgKG1ldGFjbGFzcykgb2YgYVxuY2xhc3MuICBUaGV5IGNhbm5vdCBiZSBkZWZpbmVkIGFzIGNsYXNzIG1ldGhvZHMgaW4gdGhlIGFjdHVhbCBjbGFzcy5cblRoaXMgaXMgY29uc2lzdGVudCB3aXRoIHRoZSBsb29rdXAgb2Ygc3BlY2lhbCBtZXRob2RzIHRoYXQgYXJlIGNhbGxlZFxub24gaW5zdGFuY2VzLCBvbmx5IGluIHRoaXMgY2FzZSB0aGUgaW5zdGFuY2UgaXMgaXRzZWxmIGEgY2xhc3MuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE5KiogLSBJbnRyb2R1Y2luZyBBYnN0cmFjdCBCYXNlIENsYXNzZXNcblxuICAgICBJbmNsdWRlcyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgY3VzdG9taXppbmcgImlzaW5zdGFuY2UoKSIgYW5kXG4gICAgICJpc3N1YmNsYXNzKCkiIGJlaGF2aW9yIHRocm91Z2ggIl9faW5zdGFuY2VjaGVja19fKCkiIGFuZFxuICAgICAiX19zdWJjbGFzc2NoZWNrX18oKSIsIHdpdGggbW90aXZhdGlvbiBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGluXG4gICAgIHRoZSBjb250ZXh0IG9mIGFkZGluZyBBYnN0cmFjdCBCYXNlIENsYXNzZXMgKHNlZSB0aGUgImFiYyJcbiAgICAgbW9kdWxlKSB0byB0aGUgbGFuZ3VhZ2UuXG5cblxuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgIngoYXJnMSwgYXJnMiwgLi4uKSIgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICAieC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pIi5cblxuXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG49PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoICIwIDw9IGsgPCBOIiB3aGVyZVxuKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaCBkZWZpbmUgYVxucmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZSB0aGVcbm1ldGhvZHMgImtleXMoKSIsICJ2YWx1ZXMoKSIsICJpdGVtcygpIiwgImdldCgpIiwgImNsZWFyKCkiLFxuInNldGRlZmF1bHQoKSIsICJwb3AoKSIsICJwb3BpdGVtKCkiLCAiY29weSgpIiwgYW5kICJ1cGRhdGUoKSJcbmJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuXG5UaGUgImNvbGxlY3Rpb25zIiBtb2R1bGUgcHJvdmlkZXMgYSAiTXV0YWJsZU1hcHBpbmciIGFic3RyYWN0IGJhc2VcbmNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mICJfX2dldGl0ZW1fXygpIixcbiJfX3NldGl0ZW1fXygpIiwgIl9fZGVsaXRlbV9fKCkiLCBhbmQgImtleXMoKSIuIE11dGFibGUgc2VxdWVuY2VzXG5zaG91bGQgcHJvdmlkZSBtZXRob2RzICJhcHBlbmQoKSIsICJjb3VudCgpIiwgImluZGV4KCkiLCAiZXh0ZW5kKCkiLFxuImluc2VydCgpIiwgInBvcCgpIiwgInJlbW92ZSgpIiwgInJldmVyc2UoKSIgYW5kICJzb3J0KCkiLCBsaWtlIFB5dGhvblxuc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudFxuYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyAiX19hZGRfXygpIiwgIl9fcmFkZF9fKCkiLFxuIl9faWFkZF9fKCkiLCAiX19tdWxfXygpIiwgIl9fcm11bF9fKCkiIGFuZCAiX19pbXVsX18oKSIgZGVzY3JpYmVkXG5iZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXQgaXNcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbiJfX2NvbnRhaW5zX18oKSIgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlICJpbiIgb3BlcmF0b3I7XG5mb3IgbWFwcGluZ3MsICJpbiIgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZ1wncyBrZXlzOyBmb3Igc2VxdWVuY2VzLCBpdFxuc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyIHJlY29tbWVuZGVkIHRoYXQgYm90aFxubWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlICJfX2l0ZXJfXygpIiBtZXRob2QgdG8gYWxsb3dcbmVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsICJfX2l0ZXJfXygpIlxuc2hvdWxkIGJlIHRoZSBzYW1lIGFzICJrZXlzKCkiOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZVxudGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyICI+PSIgMC4gIEFsc28sIGFuIG9iamVjdCB0aGF0XG4gICBkb2VzblwndCBkZWZpbmUgYSAiX19ib29sX18oKSIgbWV0aG9kIGFuZCB3aG9zZSAiX19sZW5fXygpIiBtZXRob2RcbiAgIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuXG4gIEEgY2FsbCBsaWtlXG5cbiAgICAgYVsxOjJdID0gYlxuXG4gIGlzIHRyYW5zbGF0ZWQgdG9cblxuICAgICBhW3NsaWNlKDEsIDIsIE5vbmUpXSA9IGJcblxuICBhbmQgc28gZm9ydGguICBNaXNzaW5nIHNsaWNlIGl0ZW1zIGFyZSBhbHdheXMgZmlsbGVkIGluIHdpdGggIk5vbmUiLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgInNlbGZba2V5XSIuIEZvciBzZXF1ZW5jZSB0eXBlcyxcbiAgIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy4gIE5vdGUgdGhhdFxuICAgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlIGNsYXNzIHdpc2hlc1xuICAgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLiBJZlxuICAgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLCAiVHlwZUVycm9yIiBtYXkgYmUgcmFpc2VkOyBpZiBvZlxuICAgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2YgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnlcbiAgIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgdmFsdWVzKSwgIkluZGV4RXJyb3IiIHNob3VsZCBiZVxuICAgcmFpc2VkLiBGb3IgbWFwcGluZyB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZVxuICAgY29udGFpbmVyKSwgIktleUVycm9yIiBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiAiZm9yIiBsb29wcyBleHBlY3QgdGhhdCBhbiAiSW5kZXhFcnJvciIgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLCBhbmQgc2hvdWxkIGFsc28gYmUgbWFkZVxuICAgYXZhaWxhYmxlIGFzIHRoZSBtZXRob2QgImtleXMoKSIuXG5cbiAgIEl0ZXJhdG9yIG9iamVjdHMgYWxzbyBuZWVkIHRvIGltcGxlbWVudCB0aGlzIG1ldGhvZDsgdGhleSBhcmVcbiAgIHJlcXVpcmVkIHRvIHJldHVybiB0aGVtc2VsdmVzLiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXRlcmF0b3JcbiAgIG9iamVjdHMsIHNlZSAqSXRlcmF0b3IgVHlwZXMqLlxuXG5vYmplY3QuX19yZXZlcnNlZF9fKHNlbGYpXG5cbiAgIENhbGxlZCAoaWYgcHJlc2VudCkgYnkgdGhlICJyZXZlcnNlZCgpIiBidWlsdC1pbiB0byBpbXBsZW1lbnRcbiAgIHJldmVyc2UgaXRlcmF0aW9uLiAgSXQgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdFxuICAgaXRlcmF0ZXMgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lciBpbiByZXZlcnNlIG9yZGVyLlxuXG4gICBJZiB0aGUgIl9fcmV2ZXJzZWRfXygpIiBtZXRob2QgaXMgbm90IHByb3ZpZGVkLCB0aGUgInJldmVyc2VkKCkiXG4gICBidWlsdC1pbiB3aWxsIGZhbGwgYmFjayB0byB1c2luZyB0aGUgc2VxdWVuY2UgcHJvdG9jb2wgKCJfX2xlbl9fKCkiXG4gICBhbmQgIl9fZ2V0aXRlbV9fKCkiKS4gIE9iamVjdHMgdGhhdCBzdXBwb3J0IHRoZSBzZXF1ZW5jZSBwcm90b2NvbFxuICAgc2hvdWxkIG9ubHkgcHJvdmlkZSAiX19yZXZlcnNlZF9fKCkiIGlmIHRoZXkgY2FuIHByb3ZpZGUgYW5cbiAgIGltcGxlbWVudGF0aW9uIHRoYXQgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiB0aGUgb25lIHByb3ZpZGVkIGJ5XG4gICAicmV2ZXJzZWQoKSIuXG5cblRoZSBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzICgiaW4iIGFuZCAibm90IGluIikgYXJlIG5vcm1hbGx5XG5pbXBsZW1lbnRlZCBhcyBhbiBpdGVyYXRpb24gdGhyb3VnaCBhIHNlcXVlbmNlLiAgSG93ZXZlciwgY29udGFpbmVyXG5vYmplY3RzIGNhbiBzdXBwbHkgdGhlIGZvbGxvd2luZyBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgbW9yZSBlZmZpY2llbnRcbmltcGxlbWVudGF0aW9uLCB3aGljaCBhbHNvIGRvZXMgbm90IHJlcXVpcmUgdGhlIG9iamVjdCBiZSBhIHNlcXVlbmNlLlxuXG5vYmplY3QuX19jb250YWluc19fKHNlbGYsIGl0ZW0pXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycy4gIFNob3VsZCByZXR1cm4gdHJ1ZVxuICAgaWYgKml0ZW0qIGlzIGluICpzZWxmKiwgZmFsc2Ugb3RoZXJ3aXNlLiAgRm9yIG1hcHBpbmcgb2JqZWN0cywgdGhpc1xuICAgc2hvdWxkIGNvbnNpZGVyIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nIHJhdGhlciB0aGFuIHRoZSB2YWx1ZXMgb3JcbiAgIHRoZSBrZXktaXRlbSBwYWlycy5cblxuICAgRm9yIG9iamVjdHMgdGhhdCBkb25cJ3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIsIHRoZSBtZW1iZXJzaGlwIHRlc3RcbiAgIGZpcnN0IHRyaWVzIGl0ZXJhdGlvbiB2aWEgIl9faXRlcl9fKCkiLCB0aGVuIHRoZSBvbGQgc2VxdWVuY2VcbiAgIGl0ZXJhdGlvbiBwcm90b2NvbCB2aWEgIl9fZ2V0aXRlbV9fKCkiLCBzZWUgKnRoaXMgc2VjdGlvbiBpbiB0aGVcbiAgIGxhbmd1YWdlIHJlZmVyZW5jZSouXG5cblxuRW11bGF0aW5nIG51bWVyaWMgdHlwZXNcbj09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBlbXVsYXRlIG51bWVyaWMgb2JqZWN0cy5cbk1ldGhvZHMgY29ycmVzcG9uZGluZyB0byBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlXG5wYXJ0aWN1bGFyIGtpbmQgb2YgbnVtYmVyIGltcGxlbWVudGVkIChlLmcuLCBiaXR3aXNlIG9wZXJhdGlvbnMgZm9yXG5ub24taW50ZWdyYWwgbnVtYmVycykgc2hvdWxkIGJlIGxlZnQgdW5kZWZpbmVkLlxuXG5vYmplY3QuX19hZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3N1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX190cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19mbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19kaXZtb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3Bvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2xzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19hbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3hvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8IikuICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZVxuICAgZXhwcmVzc2lvbiAieCArIHkiLCB3aGVyZSAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhblxuICAgIl9fYWRkX18oKSIgbWV0aG9kLCAieC5fX2FkZF9fKHkpIiBpcyBjYWxsZWQuICBUaGUgIl9fZGl2bW9kX18oKSJcbiAgIG1ldGhvZCBzaG91bGQgYmUgdGhlIGVxdWl2YWxlbnQgdG8gdXNpbmcgIl9fZmxvb3JkaXZfXygpIiBhbmRcbiAgICJfX21vZF9fKCkiOyBpdCBzaG91bGQgbm90IGJlIHJlbGF0ZWQgdG8gIl9fdHJ1ZWRpdl9fKCkiLiAgTm90ZVxuICAgdGhhdCAiX19wb3dfXygpIiBzaG91bGQgYmUgZGVmaW5lZCB0byBhY2NlcHQgYW4gb3B0aW9uYWwgdGhpcmRcbiAgIGFyZ3VtZW50IGlmIHRoZSB0ZXJuYXJ5IHZlcnNpb24gb2YgdGhlIGJ1aWx0LWluICJwb3coKSIgZnVuY3Rpb24gaXNcbiAgIHRvIGJlIHN1cHBvcnRlZC5cblxuICAgSWYgb25lIG9mIHRob3NlIG1ldGhvZHMgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIHdpdGggdGhlXG4gICBzdXBwbGllZCBhcmd1bWVudHMsIGl0IHNob3VsZCByZXR1cm4gIk5vdEltcGxlbWVudGVkIi5cblxub2JqZWN0Ll9fcmFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3JmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmRpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnBvd19fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmxzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnJzaGlmdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmFuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcnhvcl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcm9yX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIG1ldGhvZHMgYXJlIGNhbGxlZCB0byBpbXBsZW1lbnQgdGhlIGJpbmFyeSBhcml0aG1ldGljXG4gICBvcGVyYXRpb25zICgiKyIsICItIiwgIioiLCAiLyIsICIvLyIsICIlIiwgImRpdm1vZCgpIiwgInBvdygpIixcbiAgICIqKiIsICI8PCIsICI+PiIsICImIiwgIl4iLCAifCIpIHdpdGggcmVmbGVjdGVkIChzd2FwcGVkKSBvcGVyYW5kcy5cbiAgIFRoZXNlIGZ1bmN0aW9ucyBhcmUgb25seSBjYWxsZWQgaWYgdGhlIGxlZnQgb3BlcmFuZCBkb2VzIG5vdFxuICAgc3VwcG9ydCB0aGUgY29ycmVzcG9uZGluZyBvcGVyYXRpb24gYW5kIHRoZSBvcGVyYW5kcyBhcmUgb2ZcbiAgIGRpZmZlcmVudCB0eXBlcy4gWzJdICBGb3IgaW5zdGFuY2UsIHRvIGV2YWx1YXRlIHRoZSBleHByZXNzaW9uICJ4IC1cbiAgIHkiLCB3aGVyZSAqeSogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiAiX19yc3ViX18oKSJcbiAgIG1ldGhvZCwgInkuX19yc3ViX18oeCkiIGlzIGNhbGxlZCBpZiAieC5fX3N1Yl9fKHkpIiByZXR1cm5zXG4gICAqTm90SW1wbGVtZW50ZWQqLlxuXG4gICBOb3RlIHRoYXQgdGVybmFyeSAicG93KCkiIHdpbGwgbm90IHRyeSBjYWxsaW5nICJfX3Jwb3dfXygpIiAodGhlXG4gICBjb2VyY2lvbiBydWxlcyB3b3VsZCBiZWNvbWUgdG9vIGNvbXBsaWNhdGVkKS5cblxuICAgTm90ZTogSWYgdGhlIHJpZ2h0IG9wZXJhbmRcJ3MgdHlwZSBpcyBhIHN1YmNsYXNzIG9mIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3MgdHlwZSBhbmQgdGhhdCBzdWJjbGFzcyBwcm92aWRlcyB0aGUgcmVmbGVjdGVkIG1ldGhvZFxuICAgICBmb3IgdGhlIG9wZXJhdGlvbiwgdGhpcyBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBsZWZ0XG4gICAgIG9wZXJhbmRcJ3Mgbm9uLXJlZmxlY3RlZCBtZXRob2QuICBUaGlzIGJlaGF2aW9yIGFsbG93cyBzdWJjbGFzc2VzXG4gICAgIHRvIG92ZXJyaWRlIHRoZWlyIGFuY2VzdG9yc1wnIG9wZXJhdGlvbnMuXG5cbm9iamVjdC5fX2lhZGRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lzdWJfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l0cnVlZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pZmxvb3JkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2ltb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lwb3dfXyhzZWxmLCBvdGhlclssIG1vZHVsb10pXG5vYmplY3QuX19pbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pcnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19peG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19pb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYXVnbWVudGVkIGFyaXRobWV0aWNcbiAgIGFzc2lnbm1lbnRzICgiKz0iLCAiLT0iLCAiKj0iLCAiLz0iLCAiLy89IiwgIiU9IiwgIioqPSIsICI8PD0iLFxuICAgIj4+PSIsICImPSIsICJePSIsICJ8PSIpLiAgVGhlc2UgbWV0aG9kcyBzaG91bGQgYXR0ZW1wdCB0byBkbyB0aGVcbiAgIG9wZXJhdGlvbiBpbi1wbGFjZSAobW9kaWZ5aW5nICpzZWxmKikgYW5kIHJldHVybiB0aGUgcmVzdWx0ICh3aGljaFxuICAgY291bGQgYmUsIGJ1dCBkb2VzIG5vdCBoYXZlIHRvIGJlLCAqc2VsZiopLiAgSWYgYSBzcGVjaWZpYyBtZXRob2RcbiAgIGlzIG5vdCBkZWZpbmVkLCB0aGUgYXVnbWVudGVkIGFzc2lnbm1lbnQgZmFsbHMgYmFjayB0byB0aGUgbm9ybWFsXG4gICBtZXRob2RzLiAgRm9yIGluc3RhbmNlLCB0byBleGVjdXRlIHRoZSBzdGF0ZW1lbnQgInggKz0geSIsIHdoZXJlXG4gICAqeCogaXMgYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhbiAiX19pYWRkX18oKSIgbWV0aG9kLFxuICAgInguX19pYWRkX18oeSkiIGlzIGNhbGxlZC4gIElmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXRcbiAgIGRvZXMgbm90IGRlZmluZSBhICJfX2lhZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGFuZFxuICAgInkuX19yYWRkX18oeCkiIGFyZSBjb25zaWRlcmVkLCBhcyB3aXRoIHRoZSBldmFsdWF0aW9uIG9mICJ4ICsgeSIuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoIi0iLCAiKyIsXG4gICAiYWJzKCkiIGFuZCAifiIpLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19mbG9hdF9fKHNlbGYpXG5vYmplY3QuX19yb3VuZF9fKHNlbGZbLCBuXSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJjb21wbGV4KCkiLCAiaW50KCkiLFxuICAgImZsb2F0KCkiIGFuZCAicm91bmQoKSIuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlXG4gICB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmluZGV4KCkiLiAgQWxzbyBjYWxsZWQgd2hlbmV2ZXJcbiAgIFB5dGhvbiBuZWVkcyBhbiBpbnRlZ2VyIG9iamVjdCAoc3VjaCBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGVcbiAgIGJ1aWx0LWluICJiaW4oKSIsICJoZXgoKSIgYW5kICJvY3QoKSIgZnVuY3Rpb25zKS4gTXVzdCByZXR1cm4gYW5cbiAgIGludGVnZXIuXG5cblxuV2l0aCBTdGF0ZW1lbnQgQ29udGV4dCBNYW5hZ2Vyc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5BICpjb250ZXh0IG1hbmFnZXIqIGlzIGFuIG9iamVjdCB0aGF0IGRlZmluZXMgdGhlIHJ1bnRpbWUgY29udGV4dCB0b1xuYmUgZXN0YWJsaXNoZWQgd2hlbiBleGVjdXRpbmcgYSAid2l0aCIgc3RhdGVtZW50LiBUaGUgY29udGV4dCBtYW5hZ2VyXG5oYW5kbGVzIHRoZSBlbnRyeSBpbnRvLCBhbmQgdGhlIGV4aXQgZnJvbSwgdGhlIGRlc2lyZWQgcnVudGltZSBjb250ZXh0XG5mb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2sgb2YgY29kZS4gIENvbnRleHQgbWFuYWdlcnMgYXJlIG5vcm1hbGx5XG5pbnZva2VkIHVzaW5nIHRoZSAid2l0aCIgc3RhdGVtZW50IChkZXNjcmliZWQgaW4gc2VjdGlvbiAqVGhlIHdpdGhcbnN0YXRlbWVudCopLCBidXQgY2FuIGFsc28gYmUgdXNlZCBieSBkaXJlY3RseSBpbnZva2luZyB0aGVpciBtZXRob2RzLlxuXG5UeXBpY2FsIHVzZXMgb2YgY29udGV4dCBtYW5hZ2VycyBpbmNsdWRlIHNhdmluZyBhbmQgcmVzdG9yaW5nIHZhcmlvdXNcbmtpbmRzIG9mIGdsb2JhbCBzdGF0ZSwgbG9ja2luZyBhbmQgdW5sb2NraW5nIHJlc291cmNlcywgY2xvc2luZyBvcGVuZWRcbmZpbGVzLCBldGMuXG5cbkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGNvbnRleHQgbWFuYWdlcnMsIHNlZSAqQ29udGV4dCBNYW5hZ2VyIFR5cGVzKi5cblxub2JqZWN0Ll9fZW50ZXJfXyhzZWxmKVxuXG4gICBFbnRlciB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSAid2l0aCJcbiAgIHN0YXRlbWVudCB3aWxsIGJpbmQgdGhpcyBtZXRob2RcJ3MgcmV0dXJuIHZhbHVlIHRvIHRoZSB0YXJnZXQocylcbiAgIHNwZWNpZmllZCBpbiB0aGUgImFzIiBjbGF1c2Ugb2YgdGhlIHN0YXRlbWVudCwgaWYgYW55LlxuXG5vYmplY3QuX19leGl0X18oc2VsZiwgZXhjX3R5cGUsIGV4Y192YWx1ZSwgdHJhY2ViYWNrKVxuXG4gICBFeGl0IHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlIHBhcmFtZXRlcnNcbiAgIGRlc2NyaWJlIHRoZSBleGNlcHRpb24gdGhhdCBjYXVzZWQgdGhlIGNvbnRleHQgdG8gYmUgZXhpdGVkLiBJZiB0aGVcbiAgIGNvbnRleHQgd2FzIGV4aXRlZCB3aXRob3V0IGFuIGV4Y2VwdGlvbiwgYWxsIHRocmVlIGFyZ3VtZW50cyB3aWxsXG4gICBiZSAiTm9uZSIuXG5cbiAgIElmIGFuIGV4Y2VwdGlvbiBpcyBzdXBwbGllZCwgYW5kIHRoZSBtZXRob2Qgd2lzaGVzIHRvIHN1cHByZXNzIHRoZVxuICAgZXhjZXB0aW9uIChpLmUuLCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgcHJvcGFnYXRlZCksIGl0IHNob3VsZFxuICAgcmV0dXJuIGEgdHJ1ZSB2YWx1ZS4gT3RoZXJ3aXNlLCB0aGUgZXhjZXB0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkXG4gICBub3JtYWxseSB1cG9uIGV4aXQgZnJvbSB0aGlzIG1ldGhvZC5cblxuICAgTm90ZSB0aGF0ICJfX2V4aXRfXygpIiBtZXRob2RzIHNob3VsZCBub3QgcmVyYWlzZSB0aGUgcGFzc2VkLWluXG4gICBleGNlcHRpb247IHRoaXMgaXMgdGhlIGNhbGxlclwncyByZXNwb25zaWJpbGl0eS5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cblNwZWNpYWwgbWV0aG9kIGxvb2t1cFxuPT09PT09PT09PT09PT09PT09PT09XG5cbkZvciBjdXN0b20gY2xhc3NlcywgaW1wbGljaXQgaW52b2NhdGlvbnMgb2Ygc3BlY2lhbCBtZXRob2RzIGFyZSBvbmx5XG5ndWFyYW50ZWVkIHRvIHdvcmsgY29ycmVjdGx5IGlmIGRlZmluZWQgb24gYW4gb2JqZWN0XCdzIHR5cGUsIG5vdCBpblxudGhlIG9iamVjdFwncyBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgVGhhdCBiZWhhdmlvdXIgaXMgdGhlIHJlYXNvbiB3aHlcbnRoZSBmb2xsb3dpbmcgY29kZSByYWlzZXMgYW4gZXhjZXB0aW9uOlxuXG4gICA+Pj4gY2xhc3MgQzpcbiAgIC4uLiAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMuX19sZW5fXyA9IGxhbWJkYTogNVxuICAgPj4+IGxlbihjKVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBvYmplY3Qgb2YgdHlwZSBcJ0NcJyBoYXMgbm8gbGVuKClcblxuVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBiZWhhdmlvdXIgbGllcyB3aXRoIGEgbnVtYmVyIG9mIHNwZWNpYWxcbm1ldGhvZHMgc3VjaCBhcyAiX19oYXNoX18oKSIgYW5kICJfX3JlcHJfXygpIiB0aGF0IGFyZSBpbXBsZW1lbnRlZCBieVxuYWxsIG9iamVjdHMsIGluY2x1ZGluZyB0eXBlIG9iamVjdHMuIElmIHRoZSBpbXBsaWNpdCBsb29rdXAgb2YgdGhlc2Vcbm1ldGhvZHMgdXNlZCB0aGUgY29udmVudGlvbmFsIGxvb2t1cCBwcm9jZXNzLCB0aGV5IHdvdWxkIGZhaWwgd2hlblxuaW52b2tlZCBvbiB0aGUgdHlwZSBvYmplY3QgaXRzZWxmOlxuXG4gICA+Pj4gMSAuX19oYXNoX18oKSA9PSBoYXNoKDEpXG4gICBUcnVlXG4gICA+Pj4gaW50Ll9faGFzaF9fKCkgPT0gaGFzaChpbnQpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluIDxtb2R1bGU+XG4gICBUeXBlRXJyb3I6IGRlc2NyaXB0b3IgXCdfX2hhc2hfX1wnIG9mIFwnaW50XCcgb2JqZWN0IG5lZWRzIGFuIGFyZ3VtZW50XG5cbkluY29ycmVjdGx5IGF0dGVtcHRpbmcgdG8gaW52b2tlIGFuIHVuYm91bmQgbWV0aG9kIG9mIGEgY2xhc3MgaW4gdGhpc1xud2F5IGlzIHNvbWV0aW1lcyByZWZlcnJlZCB0byBhcyBcJ21ldGFjbGFzcyBjb25mdXNpb25cJywgYW5kIGlzIGF2b2lkZWRcbmJ5IGJ5cGFzc2luZyB0aGUgaW5zdGFuY2Ugd2hlbiBsb29raW5nIHVwIHNwZWNpYWwgbWV0aG9kczpcblxuICAgPj4+IHR5cGUoMSkuX19oYXNoX18oMSkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IHR5cGUoaW50KS5fX2hhc2hfXyhpbnQpID09IGhhc2goaW50KVxuICAgVHJ1ZVxuXG5JbiBhZGRpdGlvbiB0byBieXBhc3NpbmcgYW55IGluc3RhbmNlIGF0dHJpYnV0ZXMgaW4gdGhlIGludGVyZXN0IG9mXG5jb3JyZWN0bmVzcywgaW1wbGljaXQgc3BlY2lhbCBtZXRob2QgbG9va3VwIGdlbmVyYWxseSBhbHNvIGJ5cGFzc2VzXG50aGUgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWV0aG9kIGV2ZW4gb2YgdGhlIG9iamVjdFwncyBtZXRhY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBNZXRhKHR5cGUpOlxuICAgLi4uICAgIGRlZiBfX2dldGF0dHJpYnV0ZV9fKCphcmdzKTpcbiAgIC4uLiAgICAgICBwcmludCgiTWV0YWNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QsIG1ldGFjbGFzcz1NZXRhKTpcbiAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gMTBcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQoIkNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18oKSAgICAgICAgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIGluc3RhbmNlXG4gICBDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiB0eXBlKGMpLl9fbGVuX18oYykgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIHR5cGVcbiAgIE1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiBsZW4oYykgICAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCBsb29rdXBcbiAgIDEwXG5cbkJ5cGFzc2luZyB0aGUgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWFjaGluZXJ5IGluIHRoaXMgZmFzaGlvbiBwcm92aWRlc1xuc2lnbmlmaWNhbnQgc2NvcGUgZm9yIHNwZWVkIG9wdGltaXNhdGlvbnMgd2l0aGluIHRoZSBpbnRlcnByZXRlciwgYXRcbnRoZSBjb3N0IG9mIHNvbWUgZmxleGliaWxpdHkgaW4gdGhlIGhhbmRsaW5nIG9mIHNwZWNpYWwgbWV0aG9kcyAodGhlXG5zcGVjaWFsIG1ldGhvZCAqbXVzdCogYmUgc2V0IG9uIHRoZSBjbGFzcyBvYmplY3QgaXRzZWxmIGluIG9yZGVyIHRvIGJlXG5jb25zaXN0ZW50bHkgaW52b2tlZCBieSB0aGUgaW50ZXJwcmV0ZXIpLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIEl0ICppcyogcG9zc2libGUgaW4gc29tZSBjYXNlcyB0byBjaGFuZ2UgYW4gb2JqZWN0XCdzIHR5cGUsXG4gICAgdW5kZXIgY2VydGFpbiBjb250cm9sbGVkIGNvbmRpdGlvbnMuIEl0IGdlbmVyYWxseSBpc25cJ3QgYSBnb29kXG4gICAgaWRlYSB0aG91Z2gsIHNpbmNlIGl0IGNhbiBsZWFkIHRvIHNvbWUgdmVyeSBzdHJhbmdlIGJlaGF2aW91ciBpZlxuICAgIGl0IGlzIGhhbmRsZWQgaW5jb3JyZWN0bHkuXG5cblsyXSBGb3Igb3BlcmFuZHMgb2YgdGhlIHNhbWUgdHlwZSwgaXQgaXMgYXNzdW1lZCB0aGF0IGlmIHRoZSBub24tXG4gICAgcmVmbGVjdGVkIG1ldGhvZCAoc3VjaCBhcyAiX19hZGRfXygpIikgZmFpbHMgdGhlIG9wZXJhdGlvbiBpcyBub3RcbiAgICBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKLSAnc3RyaW5nLW1ldGhvZHMnOiAnXG5TdHJpbmcgTWV0aG9kc1xuKioqKioqKioqKioqKipcblxuU3RyaW5ncyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLCBhbG9uZyB3aXRoXG50aGUgYWRkaXRpb25hbCBtZXRob2RzIGRlc2NyaWJlZCBiZWxvdy5cblxuU3RyaW5ncyBhbHNvIHN1cHBvcnQgdHdvIHN0eWxlcyBvZiBzdHJpbmcgZm9ybWF0dGluZywgb25lIHByb3ZpZGluZyBhXG5sYXJnZSBkZWdyZWUgb2YgZmxleGliaWxpdHkgYW5kIGN1c3RvbWl6YXRpb24gKHNlZSAic3RyLmZvcm1hdCgpIixcbipGb3JtYXQgU3RyaW5nIFN5bnRheCogYW5kICpTdHJpbmcgRm9ybWF0dGluZyopIGFuZCB0aGUgb3RoZXIgYmFzZWQgb25cbkMgInByaW50ZiIgc3R5bGUgZm9ybWF0dGluZyB0aGF0IGhhbmRsZXMgYSBuYXJyb3dlciByYW5nZSBvZiB0eXBlcyBhbmRcbmlzIHNsaWdodGx5IGhhcmRlciB0byB1c2UgY29ycmVjdGx5LCBidXQgaXMgb2Z0ZW4gZmFzdGVyIGZvciB0aGUgY2FzZXNcbml0IGNhbiBoYW5kbGUgKCpwcmludGYtc3R5bGUgU3RyaW5nIEZvcm1hdHRpbmcqKS5cblxuVGhlICpUZXh0IFByb2Nlc3NpbmcgU2VydmljZXMqIHNlY3Rpb24gb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkgY292ZXJzXG5hIG51bWJlciBvZiBvdGhlciBtb2R1bGVzIHRoYXQgcHJvdmlkZSB2YXJpb3VzIHRleHQgcmVsYXRlZCB1dGlsaXRpZXNcbihpbmNsdWRpbmcgcmVndWxhciBleHByZXNzaW9uIHN1cHBvcnQgaW4gdGhlICJyZSIgbW9kdWxlKS5cblxuc3RyLmNhcGl0YWxpemUoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBpdHMgZmlyc3QgY2hhcmFjdGVyIGNhcGl0YWxpemVkXG4gICBhbmQgdGhlIHJlc3QgbG93ZXJjYXNlZC5cblxuc3RyLmNhc2Vmb2xkKClcblxuICAgUmV0dXJuIGEgY2FzZWZvbGRlZCBjb3B5IG9mIHRoZSBzdHJpbmcuIENhc2Vmb2xkZWQgc3RyaW5ncyBtYXkgYmVcbiAgIHVzZWQgZm9yIGNhc2VsZXNzIG1hdGNoaW5nLlxuXG4gICBDYXNlZm9sZGluZyBpcyBzaW1pbGFyIHRvIGxvd2VyY2FzaW5nIGJ1dCBtb3JlIGFnZ3Jlc3NpdmUgYmVjYXVzZVxuICAgaXQgaXMgaW50ZW5kZWQgdG8gcmVtb3ZlIGFsbCBjYXNlIGRpc3RpbmN0aW9ucyBpbiBhIHN0cmluZy4gRm9yXG4gICBleGFtcGxlLCB0aGUgR2VybWFuIGxvd2VyY2FzZSBsZXR0ZXIgIlwnXHhjM1x4OWZcJyIgaXMgZXF1aXZhbGVudCB0byAiInNzIiIuXG4gICBTaW5jZSBpdCBpcyBhbHJlYWR5IGxvd2VyY2FzZSwgImxvd2VyKCkiIHdvdWxkIGRvIG5vdGhpbmcgdG8gIlwnXHhjM1x4OWZcJyI7XG4gICAiY2FzZWZvbGQoKSIgY29udmVydHMgaXQgdG8gIiJzcyIiLlxuXG4gICBUaGUgY2FzZWZvbGRpbmcgYWxnb3JpdGhtIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjMuXG5cbnN0ci5jZW50ZXIod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiBjZW50ZXJlZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi4gUGFkZGluZyBpcyBkb25lXG4gICB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYSBzcGFjZSkuXG5cbnN0ci5jb3VudChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gdGhlIG51bWJlciBvZiBub24tb3ZlcmxhcHBpbmcgb2NjdXJyZW5jZXMgb2Ygc3Vic3RyaW5nICpzdWIqXG4gICBpbiB0aGUgcmFuZ2UgWypzdGFydCosICplbmQqXS4gIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZFxuICAgKmVuZCogYXJlIGludGVycHJldGVkIGFzIGluIHNsaWNlIG5vdGF0aW9uLlxuXG5zdHIuZW5jb2RlKGVuY29kaW5nPSJ1dGYtOCIsIGVycm9ycz0ic3RyaWN0IilcblxuICAgUmV0dXJuIGFuIGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgc3RyaW5nIGFzIGEgYnl0ZXMgb2JqZWN0LiBEZWZhdWx0XG4gICBlbmNvZGluZyBpcyAiXCd1dGYtOFwnIi4gKmVycm9ycyogbWF5IGJlIGdpdmVuIHRvIHNldCBhIGRpZmZlcmVudFxuICAgZXJyb3IgaGFuZGxpbmcgc2NoZW1lLiBUaGUgZGVmYXVsdCBmb3IgKmVycm9ycyogaXMgIlwnc3RyaWN0XCciLFxuICAgbWVhbmluZyB0aGF0IGVuY29kaW5nIGVycm9ycyByYWlzZSBhICJVbmljb2RlRXJyb3IiLiBPdGhlciBwb3NzaWJsZVxuICAgdmFsdWVzIGFyZSAiXCdpZ25vcmVcJyIsICJcJ3JlcGxhY2VcJyIsICJcJ3htbGNoYXJyZWZyZXBsYWNlXCciLFxuICAgIlwnYmFja3NsYXNocmVwbGFjZVwnIiBhbmQgYW55IG90aGVyIG5hbWUgcmVnaXN0ZXJlZCB2aWFcbiAgICJjb2RlY3MucmVnaXN0ZXJfZXJyb3IoKSIsIHNlZSBzZWN0aW9uICpDb2RlYyBCYXNlIENsYXNzZXMqLiBGb3IgYVxuICAgbGlzdCBvZiBwb3NzaWJsZSBlbmNvZGluZ3MsIHNlZSBzZWN0aW9uICpTdGFuZGFyZCBFbmNvZGluZ3MqLlxuXG4gICBDaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBTdXBwb3J0IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhZGRlZC5cblxuc3RyLmVuZHN3aXRoKHN1ZmZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiAiVHJ1ZSIgaWYgdGhlIHN0cmluZyBlbmRzIHdpdGggdGhlIHNwZWNpZmllZCAqc3VmZml4KixcbiAgIG90aGVyd2lzZSByZXR1cm4gIkZhbHNlIi4gICpzdWZmaXgqIGNhbiBhbHNvIGJlIGEgdHVwbGUgb2Ygc3VmZml4ZXNcbiAgIHRvIGxvb2sgZm9yLiAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IGJlZ2lubmluZyBhdCB0aGF0XG4gICBwb3NpdGlvbi4gIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIGF0IHRoYXQgcG9zaXRpb24uXG5cbnN0ci5leHBhbmR0YWJzKFt0YWJzaXplXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWRcbiAgIGJ5IG9uZSBvciBtb3JlIHNwYWNlcywgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGNvbHVtbiBhbmQgdGhlXG4gICBnaXZlbiB0YWIgc2l6ZS4gIFRhYiBwb3NpdGlvbnMgb2NjdXIgZXZlcnkgKnRhYnNpemUqIGNoYXJhY3RlcnNcbiAgIChkZWZhdWx0IGlzIDgsIGdpdmluZyB0YWIgcG9zaXRpb25zIGF0IGNvbHVtbnMgMCwgOCwgMTYgYW5kIHNvIG9uKS5cbiAgIFRvIGV4cGFuZCB0aGUgc3RyaW5nLCB0aGUgY3VycmVudCBjb2x1bW4gaXMgc2V0IHRvIHplcm8gYW5kIHRoZVxuICAgc3RyaW5nIGlzIGV4YW1pbmVkIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIuICBJZiB0aGUgY2hhcmFjdGVyIGlzIGFcbiAgIHRhYiAoIlxcdCIpLCBvbmUgb3IgbW9yZSBzcGFjZSBjaGFyYWN0ZXJzIGFyZSBpbnNlcnRlZCBpbiB0aGUgcmVzdWx0XG4gICB1bnRpbCB0aGUgY3VycmVudCBjb2x1bW4gaXMgZXF1YWwgdG8gdGhlIG5leHQgdGFiIHBvc2l0aW9uLiAoVGhlXG4gICB0YWIgY2hhcmFjdGVyIGl0c2VsZiBpcyBub3QgY29waWVkLikgIElmIHRoZSBjaGFyYWN0ZXIgaXMgYSBuZXdsaW5lXG4gICAoIlxcbiIpIG9yIHJldHVybiAoIlxcciIpLCBpdCBpcyBjb3BpZWQgYW5kIHRoZSBjdXJyZW50IGNvbHVtbiBpc1xuICAgcmVzZXQgdG8gemVyby4gIEFueSBvdGhlciBjaGFyYWN0ZXIgaXMgY29waWVkIHVuY2hhbmdlZCBhbmQgdGhlXG4gICBjdXJyZW50IGNvbHVtbiBpcyBpbmNyZW1lbnRlZCBieSBvbmUgcmVnYXJkbGVzcyBvZiBob3cgdGhlXG4gICBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgd2hlbiBwcmludGVkLlxuXG4gICA+Pj4gXCcwMVxcdDAxMlxcdDAxMjNcXHQwMTIzNFwnLmV4cGFuZHRhYnMoKVxuICAgXCcwMSAgICAgIDAxMiAgICAgMDEyMyAgICAwMTIzNFwnXG4gICA+Pj4gXCcwMVxcdDAxMlxcdDAxMjNcXHQwMTIzNFwnLmV4cGFuZHRhYnMoNClcbiAgIFwnMDEgIDAxMiAwMTIzICAgIDAxMjM0XCdcblxuc3RyLmZpbmQoc3ViWywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuIHRoZSBsb3dlc3QgaW5kZXggaW4gdGhlIHN0cmluZyB3aGVyZSBzdWJzdHJpbmcgKnN1YiogaXNcbiAgIGZvdW5kLCBzdWNoIHRoYXQgKnN1YiogaXMgY29udGFpbmVkIGluIHRoZSBzbGljZSAic1tzdGFydDplbmRdIi5cbiAgIE9wdGlvbmFsIGFyZ3VtZW50cyAqc3RhcnQqIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2VcbiAgIG5vdGF0aW9uLiAgUmV0dXJuICItMSIgaWYgKnN1YiogaXMgbm90IGZvdW5kLlxuXG4gICBOb3RlOiBUaGUgImZpbmQoKSIgbWV0aG9kIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgeW91IG5lZWQgdG8ga25vd1xuICAgICB0aGUgcG9zaXRpb24gb2YgKnN1YiouICBUbyBjaGVjayBpZiAqc3ViKiBpcyBhIHN1YnN0cmluZyBvciBub3QsXG4gICAgIHVzZSB0aGUgImluIiBvcGVyYXRvcjpcblxuICAgICAgICA+Pj4gXCdQeVwnIGluIFwnUHl0aG9uXCdcbiAgICAgICAgVHJ1ZVxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzICJ7fSIuICBFYWNoIHJlcGxhY2VtZW50IGZpZWxkIGNvbnRhaW5zIGVpdGhlclxuICAgdGhlIG51bWVyaWMgaW5kZXggb2YgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciB0aGUgbmFtZSBvZiBhXG4gICBrZXl3b3JkIGFyZ3VtZW50LiAgUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBlYWNoXG4gICByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlXG4gICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmZvcm1hdF9tYXAobWFwcGluZylcblxuICAgU2ltaWxhciB0byAic3RyLmZvcm1hdCgqKm1hcHBpbmcpIiwgZXhjZXB0IHRoYXQgIm1hcHBpbmciIGlzIHVzZWRcbiAgIGRpcmVjdGx5IGFuZCBub3QgY29waWVkIHRvIGEgImRpY3QiLiAgVGhpcyBpcyB1c2VmdWwgaWYgZm9yIGV4YW1wbGVcbiAgICJtYXBwaW5nIiBpcyBhIGRpY3Qgc3ViY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBEZWZhdWx0KGRpY3QpOlxuICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBrZXlcbiAgIC4uLlxuICAgPj4+IFwne25hbWV9IHdhcyBib3JuIGluIHtjb3VudHJ5fVwnLmZvcm1hdF9tYXAoRGVmYXVsdChuYW1lPVwnR3VpZG9cJykpXG4gICBcJ0d1aWRvIHdhcyBib3JuIGluIGNvdW50cnlcJ1xuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlICJmaW5kKCkiLCBidXQgcmFpc2UgIlZhbHVlRXJyb3IiIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyICJjIlxuICAgaXMgYWxwaGFudW1lcmljIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnMgIlRydWUiOlxuICAgImMuaXNhbHBoYSgpIiwgImMuaXNkZWNpbWFsKCkiLCAiYy5pc2RpZ2l0KCkiLCBvciAiYy5pc251bWVyaWMoKSIuXG5cbnN0ci5pc2FscGhhKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFiZXRpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEFscGhhYmV0aWNcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJMZXR0ZXIiLCBpLmUuLCB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHlcbiAgIGJlaW5nIG9uZSBvZiAiTG0iLCAiTHQiLCAiTHUiLCAiTGwiLCBvciAiTG8iLiAgTm90ZSB0aGF0IHRoaXMgaXNcbiAgIGRpZmZlcmVudCBmcm9tIHRoZSAiQWxwaGFiZXRpYyIgcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgVW5pY29kZVxuICAgU3RhbmRhcmQuXG5cbnN0ci5pc2RlY2ltYWwoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkZWNpbWFsIGNoYXJhY3RlcnNcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIERlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGZyb20gZ2VuZXJhbCBjYXRlZ29yeSAiTmQiLiBUaGlzIGNhdGVnb3J5XG4gICBpbmNsdWRlcyBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdXNlZCB0b1xuICAgZm9ybSBkZWNpbWFsLXJhZGl4IG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTy5cblxuc3RyLmlzZGlnaXQoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkaWdpdHMgYW5kIHRoZXJlIGlzXG4gICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBEaWdpdHMgaW5jbHVkZSBkZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFuZCBkaWdpdHMgdGhhdCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcsIHN1Y2ggYXMgdGhlXG4gICBjb21wYXRpYmlsaXR5IHN1cGVyc2NyaXB0IGRpZ2l0cy4gIEZvcm1hbGx5LCBhIGRpZ2l0IGlzIGEgY2hhcmFjdGVyXG4gICB0aGF0IGhhcyB0aGUgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0IG9yXG4gICBOdW1lcmljX1R5cGU9RGVjaW1hbC5cblxuc3RyLmlzaWRlbnRpZmllcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFjY29yZGluZyB0byB0aGVcbiAgIGxhbmd1YWdlIGRlZmluaXRpb24sIHNlY3Rpb24gKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyouXG5cbiAgIFVzZSAia2V5d29yZC5pc2tleXdvcmQoKSIgdG8gdGVzdCBmb3IgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgc3VjaCBhc1xuICAgImRlZiIgYW5kICJjbGFzcyIuXG5cbnN0ci5pc2xvd2VyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzbnVtZXJpYygpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIG51bWVyaWMgY2hhcmFjdGVycyxcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIE51bWVyaWNcbiAgIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlXG4gICB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LCBlLmcuIFUrMjE1NSwgVlVMR0FSIEZSQUNUSU9OXG4gICBPTkUgRklGVEguICBGb3JtYWxseSwgbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIHRoZVxuICAgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0LCBOdW1lcmljX1R5cGU9RGVjaW1hbCBvclxuICAgTnVtZXJpY19UeXBlPU51bWVyaWMuXG5cbnN0ci5pc3ByaW50YWJsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHByaW50YWJsZSBvciB0aGVcbiAgIHN0cmluZyBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiAgTm9ucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlXG4gICB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlIGFzXG4gICAiT3RoZXIiIG9yICJTZXBhcmF0b3IiLCBleGNlcHRpbmcgdGhlIEFTQ0lJIHNwYWNlICgweDIwKSB3aGljaCBpc1xuICAgY29uc2lkZXJlZCBwcmludGFibGUuICAoTm90ZSB0aGF0IHByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHRoaXNcbiAgIGNvbnRleHQgYXJlIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgZXNjYXBlZCB3aGVuICJyZXByKCkiIGlzXG4gICBpbnZva2VkIG9uIGEgc3RyaW5nLiAgSXQgaGFzIG5vIGJlYXJpbmcgb24gdGhlIGhhbmRsaW5nIG9mIHN0cmluZ3NcbiAgIHdyaXR0ZW4gdG8gInN5cy5zdGRvdXQiIG9yICJzeXMuc3RkZXJyIi4pXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBXaGl0ZXNwYWNlXG4gICBjaGFyYWN0ZXJzICBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIk90aGVyIiBvciAiU2VwYXJhdG9yIiBhbmQgdGhvc2Ugd2l0aCBiaWRpcmVjdGlvbmFsXG4gICBwcm9wZXJ0eSBiZWluZyBvbmUgb2YgIldTIiwgIkIiLCBvciAiUyIuXG5cbnN0ci5pc3RpdGxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHRpdGxlY2FzZWQgc3RyaW5nIGFuZCB0aGVyZSBpcyBhdFxuICAgbGVhc3Qgb25lIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgbWF5IG9ubHlcbiAgIGZvbGxvdyB1bmNhc2VkIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9ubHkgY2FzZWQgb25lcy5cbiAgIFJldHVybiBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc3VwcGVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIHVwcGVyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmpvaW4oaXRlcmFibGUpXG5cbiAgIFJldHVybiBhIHN0cmluZyB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5ncyBpbiB0aGVcbiAgICppdGVyYWJsZSogKml0ZXJhYmxlKi4gIEEgIlR5cGVFcnJvciIgd2lsbCBiZSByYWlzZWQgaWYgdGhlcmUgYXJlXG4gICBhbnkgbm9uLXN0cmluZyB2YWx1ZXMgaW4gKml0ZXJhYmxlKiwgaW5jbHVkaW5nICJieXRlcyIgb2JqZWN0cy5cbiAgIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGUgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiAgVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gImxlbihzKSIuXG5cbnN0ci5sb3dlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCB0aGUgY2FzZWQgY2hhcmFjdGVycyBbNF1cbiAgIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuXG5cbiAgIFRoZSBsb3dlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5sc3RyaXAoKVxuICAgXCdzcGFjaW91cyAgIFwnXG4gICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5sc3RyaXAoXCdjbW93ei5cJylcbiAgIFwnZXhhbXBsZS5jb21cJ1xuXG5zdGF0aWMgc3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSlcblxuICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yXG4gICAic3RyLnRyYW5zbGF0ZSgpIi5cblxuICAgSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmdcbiAgIFVuaWNvZGUgb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIChzdHJpbmdzIG9mIGxlbmd0aCAxKSB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyAob2YgYXJiaXRyYXJ5IGxlbmd0aHMpIG9yIE5vbmUuXG4gICBDaGFyYWN0ZXIga2V5cyB3aWxsIHRoZW4gYmUgY29udmVydGVkIHRvIG9yZGluYWxzLlxuXG4gICBJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLFxuICAgYW5kIGluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZFxuICAgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiAgSWYgdGhlcmUgaXMgYSB0aGlyZFxuICAgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG9cbiAgIE5vbmUgaW4gdGhlIHJlc3VsdC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluICJzW3N0YXJ0OmVuZF0iLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gIi0xIiBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgInJmaW5kKCkiIGJ1dCByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gdGhlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgbm90IGZvdW5kLlxuXG5zdHIucmp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYVxuICAgc3BhY2UpLiBUaGUgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yXG4gICBlcXVhbCB0byAibGVuKHMpIi5cblxuc3RyLnJwYXJ0aXRpb24oc2VwKVxuXG4gICBTcGxpdCB0aGUgc3RyaW5nIGF0IHRoZSBsYXN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdHdvIGVtcHR5IHN0cmluZ3MsIGZvbGxvd2VkIGJ5XG4gICB0aGUgc3RyaW5nIGl0c2VsZi5cblxuc3RyLnJzcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gSWYgKm1heHNwbGl0KiBpcyBnaXZlbiwgYXQgbW9zdCAqbWF4c3BsaXQqIHNwbGl0c1xuICAgYXJlIGRvbmUsIHRoZSAqcmlnaHRtb3N0KiBvbmVzLiAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvclxuICAgIk5vbmUiLCBhbnkgd2hpdGVzcGFjZSBzdHJpbmcgaXMgYSBzZXBhcmF0b3IuICBFeGNlcHQgZm9yIHNwbGl0dGluZ1xuICAgZnJvbSB0aGUgcmlnaHQsICJyc3BsaXQoKSIgYmVoYXZlcyBsaWtlICJzcGxpdCgpIiB3aGljaCBpc1xuICAgZGVzY3JpYmVkIGluIGRldGFpbCBiZWxvdy5cblxuc3RyLnJzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB0cmFpbGluZyBjaGFyYWN0ZXJzIHJlbW92ZWQuICBUaGVcbiAgICpjaGFycyogYXJndW1lbnQgaXMgYSBzdHJpbmcgc3BlY2lmeWluZyB0aGUgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmVcbiAgIHJlbW92ZWQuICBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycyogYXJndW1lbnQgZGVmYXVsdHMgdG9cbiAgIHJlbW92aW5nIHdoaXRlc3BhY2UuICBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBub3QgYSBzdWZmaXg7IHJhdGhlcixcbiAgIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmUgc3RyaXBwZWQ6XG5cbiAgID4+PiBcJyAgIHNwYWNpb3VzICAgXCcucnN0cmlwKClcbiAgIFwnICAgc3BhY2lvdXNcJ1xuICAgPj4+IFwnbWlzc2lzc2lwcGlcJy5yc3RyaXAoXCdpcHpcJylcbiAgIFwnbWlzc2lzc1wnXG5cbnN0ci5zcGxpdChzZXA9Tm9uZSwgbWF4c3BsaXQ9LTEpXG5cbiAgIFJldHVybiBhIGxpc3Qgb2YgdGhlIHdvcmRzIGluIHRoZSBzdHJpbmcsIHVzaW5nICpzZXAqIGFzIHRoZVxuICAgZGVsaW1pdGVyIHN0cmluZy4gIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KlxuICAgc3BsaXRzIGFyZSBkb25lICh0aHVzLCB0aGUgbGlzdCB3aWxsIGhhdmUgYXQgbW9zdCAibWF4c3BsaXQrMSJcbiAgIGVsZW1lbnRzKS4gIElmICptYXhzcGxpdCogaXMgbm90IHNwZWNpZmllZCBvciAiLTEiLCB0aGVuIHRoZXJlIGlzXG4gICBubyBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHNwbGl0cyAoYWxsIHBvc3NpYmxlIHNwbGl0cyBhcmUgbWFkZSkuXG5cbiAgIElmICpzZXAqIGlzIGdpdmVuLCBjb25zZWN1dGl2ZSBkZWxpbWl0ZXJzIGFyZSBub3QgZ3JvdXBlZCB0b2dldGhlclxuICAgYW5kIGFyZSBkZWVtZWQgdG8gZGVsaW1pdCBlbXB0eSBzdHJpbmdzIChmb3IgZXhhbXBsZSxcbiAgICJcJzEsLDJcJy5zcGxpdChcJyxcJykiIHJldHVybnMgIltcJzFcJywgXCdcJywgXCcyXCddIikuICBUaGUgKnNlcCogYXJndW1lbnRcbiAgIG1heSBjb25zaXN0IG9mIG11bHRpcGxlIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLFxuICAgIlwnMTw+Mjw+M1wnLnNwbGl0KFwnPD5cJykiIHJldHVybnMgIltcJzFcJywgXCcyXCcsIFwnM1wnXSIpLiBTcGxpdHRpbmcgYW5cbiAgIGVtcHR5IHN0cmluZyB3aXRoIGEgc3BlY2lmaWVkIHNlcGFyYXRvciByZXR1cm5zICJbXCdcJ10iLlxuXG4gICBJZiAqc2VwKiBpcyBub3Qgc3BlY2lmaWVkIG9yIGlzICJOb25lIiwgYSBkaWZmZXJlbnQgc3BsaXR0aW5nXG4gICBhbGdvcml0aG0gaXMgYXBwbGllZDogcnVucyBvZiBjb25zZWN1dGl2ZSB3aGl0ZXNwYWNlIGFyZSByZWdhcmRlZFxuICAgYXMgYSBzaW5nbGUgc2VwYXJhdG9yLCBhbmQgdGhlIHJlc3VsdCB3aWxsIGNvbnRhaW4gbm8gZW1wdHkgc3RyaW5nc1xuICAgYXQgdGhlIHN0YXJ0IG9yIGVuZCBpZiB0aGUgc3RyaW5nIGhhcyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gICB3aGl0ZXNwYWNlLiAgQ29uc2VxdWVudGx5LCBzcGxpdHRpbmcgYW4gZW1wdHkgc3RyaW5nIG9yIGEgc3RyaW5nXG4gICBjb25zaXN0aW5nIG9mIGp1c3Qgd2hpdGVzcGFjZSB3aXRoIGEgIk5vbmUiIHNlcGFyYXRvciByZXR1cm5zICJbXSIuXG5cbiAgIEZvciBleGFtcGxlLCAiXCcgMSAgMiAgIDMgIFwnLnNwbGl0KCkiIHJldHVybnMgIltcJzFcJywgXCcyXCcsIFwnM1wnXSIsIGFuZFxuICAgIlwnICAxICAyICAgMyAgXCcuc3BsaXQoTm9uZSwgMSkiIHJldHVybnMgIltcJzFcJywgXCcyICAgMyAgXCddIi5cblxuc3RyLnNwbGl0bGluZXMoW2tlZXBlbmRzXSlcblxuICAgUmV0dXJuIGEgbGlzdCBvZiB0aGUgbGluZXMgaW4gdGhlIHN0cmluZywgYnJlYWtpbmcgYXQgbGluZVxuICAgYm91bmRhcmllcy4gVGhpcyBtZXRob2QgdXNlcyB0aGUgKnVuaXZlcnNhbCBuZXdsaW5lcyogYXBwcm9hY2ggdG9cbiAgIHNwbGl0dGluZyBsaW5lcy4gTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3RcbiAgIHVubGVzcyAqa2VlcGVuZHMqIGlzIGdpdmVuIGFuZCB0cnVlLlxuXG4gICBGb3IgZXhhbXBsZSwgIlwnYWIgY1xcblxcbmRlIGZnXFxya2xcXHJcXG5cJy5zcGxpdGxpbmVzKCkiIHJldHVybnMgIltcJ2FiXG4gICBjXCcsIFwnXCcsIFwnZGUgZmdcJywgXCdrbFwnXSIsIHdoaWxlIHRoZSBzYW1lIGNhbGwgd2l0aFxuICAgInNwbGl0bGluZXMoVHJ1ZSkiIHJldHVybnMgIltcJ2FiIGNcXG5cJywgXCdcXG5cJywgXCdkZSBmZ1xcclwnLCBcJ2tsXFxyXFxuXCddIi5cblxuICAgVW5saWtlICJzcGxpdCgpIiB3aGVuIGEgZGVsaW1pdGVyIHN0cmluZyAqc2VwKiBpcyBnaXZlbiwgdGhpc1xuICAgbWV0aG9kIHJldHVybnMgYW4gZW1wdHkgbGlzdCBmb3IgdGhlIGVtcHR5IHN0cmluZywgYW5kIGEgdGVybWluYWxcbiAgIGxpbmUgYnJlYWsgZG9lcyBub3QgcmVzdWx0IGluIGFuIGV4dHJhIGxpbmUuXG5cbnN0ci5zdGFydHN3aXRoKHByZWZpeFssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiAiVHJ1ZSIgaWYgc3RyaW5nIHN0YXJ0cyB3aXRoIHRoZSAqcHJlZml4Kiwgb3RoZXJ3aXNlIHJldHVyblxuICAgIkZhbHNlIi4gKnByZWZpeCogY2FuIGFsc28gYmUgYSB0dXBsZSBvZiBwcmVmaXhlcyB0byBsb29rIGZvci5cbiAgIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBzdHJpbmcgYmVnaW5uaW5nIGF0IHRoYXQgcG9zaXRpb24uXG4gICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBzdHJpbmcgYXQgdGhhdCBwb3NpdGlvbi5cblxuc3RyLnN0cmlwKFtjaGFyc10pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHRoZSBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuICAgY2hhcmFjdGVycyByZW1vdmVkLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZVxuICAgc2V0IG9mIGNoYXJhY3RlcnMgdG8gYmUgcmVtb3ZlZC4gSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqXG4gICBhcmd1bWVudCBkZWZhdWx0cyB0byByZW1vdmluZyB3aGl0ZXNwYWNlLiBUaGUgKmNoYXJzKiBhcmd1bWVudCBpc1xuICAgbm90IGEgcHJlZml4IG9yIHN1ZmZpeDsgcmF0aGVyLCBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlXG4gICBzdHJpcHBlZDpcblxuICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5zdHJpcCgpXG4gICBcJ3NwYWNpb3VzXCdcbiAgID4+PiBcJ3d3dy5leGFtcGxlLmNvbVwnLnN0cmlwKFwnY21vd3ouXCcpXG4gICBcJ2V4YW1wbGVcJ1xuXG5zdHIuc3dhcGNhc2UoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCB1cHBlcmNhc2UgY2hhcmFjdGVycyBjb252ZXJ0ZWQgdG9cbiAgIGxvd2VyY2FzZSBhbmQgdmljZSB2ZXJzYS4gTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3NhcmlseSB0cnVlIHRoYXRcbiAgICJzLnN3YXBjYXNlKCkuc3dhcGNhc2UoKSA9PSBzIi5cblxuc3RyLnRpdGxlKClcblxuICAgUmV0dXJuIGEgdGl0bGVjYXNlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2hlcmUgd29yZHMgc3RhcnQgd2l0aCBhblxuICAgdXBwZXJjYXNlIGNoYXJhY3RlciBhbmQgdGhlIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBsb3dlcmNhc2UuXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgLi4uICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBzKVxuICAgICAgLi4uXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG5zdHIudHJhbnNsYXRlKG1hcClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgKnMqIHdoZXJlIGFsbCBjaGFyYWN0ZXJzIGhhdmUgYmVlbiBtYXBwZWRcbiAgIHRocm91Z2ggdGhlICptYXAqIHdoaWNoIG11c3QgYmUgYSBkaWN0aW9uYXJ5IG9mIFVuaWNvZGUgb3JkaW5hbHNcbiAgIChpbnRlZ2VycykgdG8gVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyBvciAiTm9uZSIuICBVbm1hcHBlZFxuICAgY2hhcmFjdGVycyBhcmUgbGVmdCB1bnRvdWNoZWQuIENoYXJhY3RlcnMgbWFwcGVkIHRvICJOb25lIiBhcmVcbiAgIGRlbGV0ZWQuXG5cbiAgIFlvdSBjYW4gdXNlICJzdHIubWFrZXRyYW5zKCkiIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIG1hcCBmcm9tXG4gICBjaGFyYWN0ZXItdG8tY2hhcmFjdGVyIG1hcHBpbmdzIGluIGRpZmZlcmVudCBmb3JtYXRzLlxuXG4gICBOb3RlOiBBbiBldmVuIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggaXMgdG8gY3JlYXRlIGEgY3VzdG9tXG4gICAgIGNoYXJhY3RlciBtYXBwaW5nIGNvZGVjIHVzaW5nIHRoZSAiY29kZWNzIiBtb2R1bGUgKHNlZVxuICAgICAiZW5jb2RpbmdzLmNwMTI1MSIgZm9yIGFuIGV4YW1wbGUpLlxuXG5zdHIudXBwZXIoKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgdGhlIGNhc2VkIGNoYXJhY3RlcnMgWzRdXG4gICBjb252ZXJ0ZWQgdG8gdXBwZXJjYXNlLiAgTm90ZSB0aGF0ICJzdHIudXBwZXIoKS5pc3VwcGVyKCkiIG1pZ2h0IGJlXG4gICAiRmFsc2UiIGlmICJzIiBjb250YWlucyB1bmNhc2VkIGNoYXJhY3RlcnMgb3IgaWYgdGhlIFVuaWNvZGVcbiAgIGNhdGVnb3J5IG9mIHRoZSByZXN1bHRpbmcgY2hhcmFjdGVyKHMpIGlzIG5vdCAiTHUiIChMZXR0ZXIsXG4gICB1cHBlcmNhc2UpLCBidXQgZS5nLiAiTHQiIChMZXR0ZXIsIHRpdGxlY2FzZSkuXG5cbiAgIFRoZSB1cHBlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLnpmaWxsKHdpZHRoKVxuXG4gICBSZXR1cm4gdGhlIG51bWVyaWMgc3RyaW5nIGxlZnQgZmlsbGVkIHdpdGggemVyb3MgaW4gYSBzdHJpbmcgb2ZcbiAgIGxlbmd0aCAqd2lkdGgqLiAgQSBzaWduIHByZWZpeCBpcyBoYW5kbGVkIGNvcnJlY3RseS4gIFRoZSBvcmlnaW5hbFxuICAgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICJsZW4ocykiLlxuJywKLSAnc3RyaW5ncyc6ICdcblN0cmluZyBhbmQgQnl0ZXMgbGl0ZXJhbHNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuU3RyaW5nIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBzdHJpbmdsaXRlcmFsICAgOjo9IFtzdHJpbmdwcmVmaXhdKHNob3J0c3RyaW5nIHwgbG9uZ3N0cmluZylcbiAgIHN0cmluZ3ByZWZpeCAgICA6Oj0gInIiIHwgInUiIHwgIlIiIHwgIlUiXG4gICBzaG9ydHN0cmluZyAgICAgOjo9ICJcJyIgc2hvcnRzdHJpbmdpdGVtKiAiXCciIHwgXCciXCcgc2hvcnRzdHJpbmdpdGVtKiBcJyJcJ1xuICAgbG9uZ3N0cmluZyAgICAgIDo6PSAiXCdcJ1wnIiBsb25nc3RyaW5naXRlbSogIlwnXCdcJyIgfCBcJyIiIlwnIGxvbmdzdHJpbmdpdGVtKiBcJyIiIlwnXG4gICBzaG9ydHN0cmluZ2l0ZW0gOjo9IHNob3J0c3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgbG9uZ3N0cmluZ2l0ZW0gIDo6PSBsb25nc3RyaW5nY2hhciB8IHN0cmluZ2VzY2FwZXNlcVxuICAgc2hvcnRzdHJpbmdjaGFyIDo6PSA8YW55IHNvdXJjZSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nc3RyaW5nY2hhciAgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIj5cbiAgIHN0cmluZ2VzY2FwZXNlcSA6Oj0gIlxcIiA8YW55IHNvdXJjZSBjaGFyYWN0ZXI+XG5cbiAgIGJ5dGVzbGl0ZXJhbCAgIDo6PSBieXRlc3ByZWZpeChzaG9ydGJ5dGVzIHwgbG9uZ2J5dGVzKVxuICAgYnl0ZXNwcmVmaXggICAgOjo9ICJiIiB8ICJCIiB8ICJiciIgfCAiQnIiIHwgImJSIiB8ICJCUiIgfCAicmIiIHwgInJCIiB8ICJSYiIgfCAiUkIiXG4gICBzaG9ydGJ5dGVzICAgICA6Oj0gIlwnIiBzaG9ydGJ5dGVzaXRlbSogIlwnIiB8IFwnIlwnIHNob3J0Ynl0ZXNpdGVtKiBcJyJcJ1xuICAgbG9uZ2J5dGVzICAgICAgOjo9ICJcJ1wnXCciIGxvbmdieXRlc2l0ZW0qICJcJ1wnXCciIHwgXCciIiJcJyBsb25nYnl0ZXNpdGVtKiBcJyIiIlwnXG4gICBzaG9ydGJ5dGVzaXRlbSA6Oj0gc2hvcnRieXRlc2NoYXIgfCBieXRlc2VzY2FwZXNlcVxuICAgbG9uZ2J5dGVzaXRlbSAgOjo9IGxvbmdieXRlc2NoYXIgfCBieXRlc2VzY2FwZXNlcVxuICAgc2hvcnRieXRlc2NoYXIgOjo9IDxhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiIG9yIG5ld2xpbmUgb3IgdGhlIHF1b3RlPlxuICAgbG9uZ2J5dGVzY2hhciAgOjo9IDxhbnkgQVNDSUkgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiPlxuICAgYnl0ZXNlc2NhcGVzZXEgOjo9ICJcXCIgPGFueSBBU0NJSSBjaGFyYWN0ZXI+XG5cbk9uZSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gbm90IGluZGljYXRlZCBieSB0aGVzZSBwcm9kdWN0aW9ucyBpcyB0aGF0XG53aGl0ZXNwYWNlIGlzIG5vdCBhbGxvd2VkIGJldHdlZW4gdGhlICJzdHJpbmdwcmVmaXgiIG9yICJieXRlc3ByZWZpeCJcbmFuZCB0aGUgcmVzdCBvZiB0aGUgbGl0ZXJhbC4gVGhlIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IGlzIGRlZmluZWQgYnlcbnRoZSBlbmNvZGluZyBkZWNsYXJhdGlvbjsgaXQgaXMgVVRGLTggaWYgbm8gZW5jb2RpbmcgZGVjbGFyYXRpb24gaXNcbmdpdmVuIGluIHRoZSBzb3VyY2UgZmlsZTsgc2VlIHNlY3Rpb24gKkVuY29kaW5nIGRlY2xhcmF0aW9ucyouXG5cbkluIHBsYWluIEVuZ2xpc2g6IEJvdGggdHlwZXMgb2YgbGl0ZXJhbHMgY2FuIGJlIGVuY2xvc2VkIGluIG1hdGNoaW5nXG5zaW5nbGUgcXVvdGVzICgiXCciKSBvciBkb3VibGUgcXVvdGVzICgiIiIpLiAgVGhleSBjYW4gYWxzbyBiZSBlbmNsb3NlZFxuaW4gbWF0Y2hpbmcgZ3JvdXBzIG9mIHRocmVlIHNpbmdsZSBvciBkb3VibGUgcXVvdGVzICh0aGVzZSBhcmVcbmdlbmVyYWxseSByZWZlcnJlZCB0byBhcyAqdHJpcGxlLXF1b3RlZCBzdHJpbmdzKikuICBUaGUgYmFja3NsYXNoXG4oIlxcIikgY2hhcmFjdGVyIGlzIHVzZWQgdG8gZXNjYXBlIGNoYXJhY3RlcnMgdGhhdCBvdGhlcndpc2UgaGF2ZSBhXG5zcGVjaWFsIG1lYW5pbmcsIHN1Y2ggYXMgbmV3bGluZSwgYmFja3NsYXNoIGl0c2VsZiwgb3IgdGhlIHF1b3RlXG5jaGFyYWN0ZXIuXG5cbkJ5dGVzIGxpdGVyYWxzIGFyZSBhbHdheXMgcHJlZml4ZWQgd2l0aCAiXCdiXCciIG9yICJcJ0JcJyI7IHRoZXkgcHJvZHVjZVxuYW4gaW5zdGFuY2Ugb2YgdGhlICJieXRlcyIgdHlwZSBpbnN0ZWFkIG9mIHRoZSAic3RyIiB0eXBlLiAgVGhleSBtYXlcbm9ubHkgY29udGFpbiBBU0NJSSBjaGFyYWN0ZXJzOyBieXRlcyB3aXRoIGEgbnVtZXJpYyB2YWx1ZSBvZiAxMjggb3JcbmdyZWF0ZXIgbXVzdCBiZSBleHByZXNzZWQgd2l0aCBlc2NhcGVzLlxuXG5BcyBvZiBQeXRob24gMy4zIGl0IGlzIHBvc3NpYmxlIGFnYWluIHRvIHByZWZpeCB1bmljb2RlIHN0cmluZ3Mgd2l0aCBhXG4idSIgcHJlZml4IHRvIHNpbXBsaWZ5IG1haW50ZW5hbmNlIG9mIGR1YWwgMi54IGFuZCAzLnggY29kZWJhc2VzLlxuXG5Cb3RoIHN0cmluZyBhbmQgYnl0ZXMgbGl0ZXJhbHMgbWF5IG9wdGlvbmFsbHkgYmUgcHJlZml4ZWQgd2l0aCBhXG5sZXR0ZXIgIlwnclwnIiBvciAiXCdSXCciOyBzdWNoIHN0cmluZ3MgYXJlIGNhbGxlZCAqcmF3IHN0cmluZ3MqIGFuZCB0cmVhdFxuYmFja3NsYXNoZXMgYXMgbGl0ZXJhbCBjaGFyYWN0ZXJzLiAgQXMgYSByZXN1bHQsIGluIHN0cmluZyBsaXRlcmFscyxcbiJcJ1xcVVwnIiBhbmQgIlwnXFx1XCciIGVzY2FwZXMgaW4gcmF3IHN0cmluZ3MgYXJlIG5vdCB0cmVhdGVkIHNwZWNpYWxseS5cbkdpdmVuIHRoYXQgUHl0aG9uIDIueFwncyByYXcgdW5pY29kZSBsaXRlcmFscyBiZWhhdmUgZGlmZmVyZW50bHkgdGhhblxuUHl0aG9uIDMueFwncyB0aGUgIlwndXJcJyIgc3ludGF4IGlzIG5vdCBzdXBwb3J0ZWQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogVGhlICJcJ3JiXCciIHByZWZpeCBvZiByYXcgYnl0ZXMgbGl0ZXJhbHMgaGFzXG4gICBiZWVuIGFkZGVkIGFzIGEgc3lub255bSBvZiAiXCdiclwnIi5cblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiBTdXBwb3J0IGZvciB0aGUgdW5pY29kZSBsZWdhY3kgbGl0ZXJhbFxuICAgKCJ1XCd2YWx1ZVwnIikgd2FzIHJlaW50cm9kdWNlZCB0byBzaW1wbGlmeSB0aGUgbWFpbnRlbmFuY2Ugb2YgZHVhbFxuICAgUHl0aG9uIDIueCBhbmQgMy54IGNvZGViYXNlcy4gU2VlICoqUEVQIDQxNCoqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuXG5JbiB0cmlwbGUtcXVvdGVkIHN0cmluZ3MsIHVuZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGVzIGFyZSBhbGxvd2VkXG4oYW5kIGFyZSByZXRhaW5lZCksIGV4Y2VwdCB0aGF0IHRocmVlIHVuZXNjYXBlZCBxdW90ZXMgaW4gYSByb3dcbnRlcm1pbmF0ZSB0aGUgc3RyaW5nLiAgKEEgInF1b3RlIiBpcyB0aGUgY2hhcmFjdGVyIHVzZWQgdG8gb3BlbiB0aGVcbnN0cmluZywgaS5lLiBlaXRoZXIgIlwnIiBvciAiIiIuKVxuXG5Vbmxlc3MgYW4gIlwnclwnIiBvciAiXCdSXCciIHByZWZpeCBpcyBwcmVzZW50LCBlc2NhcGUgc2VxdWVuY2VzIGluXG5zdHJpbmdzIGFyZSBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gcnVsZXMgc2ltaWxhciB0byB0aG9zZSB1c2VkIGJ5XG5TdGFuZGFyZCBDLiAgVGhlIHJlY29nbml6ZWQgZXNjYXBlIHNlcXVlbmNlcyBhcmU6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgRXNjYXBlIFNlcXVlbmNlICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHxcbis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcb29vIiAgICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggb2N0YWwgdmFsdWUgKm9vbyogIHwgKDEsMykgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXHhoaCIgICAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIGhleCB2YWx1ZSAqaGgqICAgICB8ICgyLDMpICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xuXG5Fc2NhcGUgc2VxdWVuY2VzIG9ubHkgcmVjb2duaXplZCBpbiBzdHJpbmcgbGl0ZXJhbHMgYXJlOlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58IEVzY2FwZSBTZXF1ZW5jZSAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICB8XG4rPT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT0rXG58ICJcXE57bmFtZX0iICAgICAgICB8IENoYXJhY3RlciBuYW1lZCAqbmFtZSogaW4gdGhlICAgICB8ICg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFx1eHh4eCIgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCAxNi1iaXQgaGV4IHZhbHVlICAgfCAoNSkgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcVXh4eHh4eHh4IiAgICAgIHwgQ2hhcmFjdGVyIHdpdGggMzItYml0IGhleCB2YWx1ZSAgIHwgKDYpICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiBBcyBpbiBTdGFuZGFyZCBDLCB1cCB0byB0aHJlZSBvY3RhbCBkaWdpdHMgYXJlIGFjY2VwdGVkLlxuXG4yLiBVbmxpa2UgaW4gU3RhbmRhcmQgQywgZXhhY3RseSB0d28gaGV4IGRpZ2l0cyBhcmUgcmVxdWlyZWQuXG5cbjMuIEluIGEgYnl0ZXMgbGl0ZXJhbCwgaGV4YWRlY2ltYWwgYW5kIG9jdGFsIGVzY2FwZXMgZGVub3RlIHRoZVxuICAgYnl0ZSB3aXRoIHRoZSBnaXZlbiB2YWx1ZS4gSW4gYSBzdHJpbmcgbGl0ZXJhbCwgdGhlc2UgZXNjYXBlc1xuICAgZGVub3RlIGEgVW5pY29kZSBjaGFyYWN0ZXIgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuXG5cbjQuIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IFN1cHBvcnQgZm9yIG5hbWUgYWxpYXNlcyBbMV0gaGFzIGJlZW5cbiAgIGFkZGVkLlxuXG41LiBJbmRpdmlkdWFsIGNvZGUgdW5pdHMgd2hpY2ggZm9ybSBwYXJ0cyBvZiBhIHN1cnJvZ2F0ZSBwYWlyIGNhblxuICAgYmUgZW5jb2RlZCB1c2luZyB0aGlzIGVzY2FwZSBzZXF1ZW5jZS4gIEV4YWN0bHkgZm91ciBoZXggZGlnaXRzIGFyZVxuICAgcmVxdWlyZWQuXG5cbjYuIEFueSBVbmljb2RlIGNoYXJhY3RlciBjYW4gYmUgZW5jb2RlZCB0aGlzIHdheS4gIEV4YWN0bHkgZWlnaHRcbiAgIGhleCBkaWdpdHMgYXJlIHJlcXVpcmVkLlxuXG5Vbmxpa2UgU3RhbmRhcmQgQywgYWxsIHVucmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZSBsZWZ0IGluIHRoZVxuc3RyaW5nIHVuY2hhbmdlZCwgaS5lLiwgKnRoZSBiYWNrc2xhc2ggaXMgbGVmdCBpbiB0aGUgc3RyaW5nKi4gIChUaGlzXG5iZWhhdmlvciBpcyB1c2VmdWwgd2hlbiBkZWJ1Z2dpbmc6IGlmIGFuIGVzY2FwZSBzZXF1ZW5jZSBpcyBtaXN0eXBlZCxcbnRoZSByZXN1bHRpbmcgb3V0cHV0IGlzIG1vcmUgZWFzaWx5IHJlY29nbml6ZWQgYXMgYnJva2VuLikgIEl0IGlzIGFsc29cbmltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIGVzY2FwZSBzZXF1ZW5jZXMgb25seSByZWNvZ25pemVkIGluIHN0cmluZ1xubGl0ZXJhbHMgZmFsbCBpbnRvIHRoZSBjYXRlZ29yeSBvZiB1bnJlY29nbml6ZWQgZXNjYXBlcyBmb3IgYnl0ZXNcbmxpdGVyYWxzLlxuXG5FdmVuIGluIGEgcmF3IHN0cmluZywgc3RyaW5nIHF1b3RlcyBjYW4gYmUgZXNjYXBlZCB3aXRoIGEgYmFja3NsYXNoLFxuYnV0IHRoZSBiYWNrc2xhc2ggcmVtYWlucyBpbiB0aGUgc3RyaW5nOyBmb3IgZXhhbXBsZSwgInIiXFwiIiIgaXMgYVxudmFsaWQgc3RyaW5nIGxpdGVyYWwgY29uc2lzdGluZyBvZiB0d28gY2hhcmFjdGVyczogYSBiYWNrc2xhc2ggYW5kIGFcbmRvdWJsZSBxdW90ZTsgInIiXFwiIiBpcyBub3QgYSB2YWxpZCBzdHJpbmcgbGl0ZXJhbCAoZXZlbiBhIHJhdyBzdHJpbmdcbmNhbm5vdCBlbmQgaW4gYW4gb2RkIG51bWJlciBvZiBiYWNrc2xhc2hlcykuICBTcGVjaWZpY2FsbHksICphIHJhd1xuc3RyaW5nIGNhbm5vdCBlbmQgaW4gYSBzaW5nbGUgYmFja3NsYXNoKiAoc2luY2UgdGhlIGJhY2tzbGFzaCB3b3VsZFxuZXNjYXBlIHRoZSBmb2xsb3dpbmcgcXVvdGUgY2hhcmFjdGVyKS4gIE5vdGUgYWxzbyB0aGF0IGEgc2luZ2xlXG5iYWNrc2xhc2ggZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGlzIGludGVycHJldGVkIGFzIHRob3NlIHR3byBjaGFyYWN0ZXJzXG5hcyBwYXJ0IG9mIHRoZSBzdHJpbmcsICpub3QqIGFzIGEgbGluZSBjb250aW51YXRpb24uXG4nLAotICdzdWJzY3JpcHRpb25zJzogJ1xuU3Vic2NyaXB0aW9uc1xuKioqKioqKioqKioqKlxuXG5BIHN1YnNjcmlwdGlvbiBzZWxlY3RzIGFuIGl0ZW0gb2YgYSBzZXF1ZW5jZSAoc3RyaW5nLCB0dXBsZSBvciBsaXN0KVxub3IgbWFwcGluZyAoZGljdGlvbmFyeSkgb2JqZWN0OlxuXG4gICBzdWJzY3JpcHRpb24gOjo9IHByaW1hcnkgIlsiIGV4cHJlc3Npb25fbGlzdCAiXSJcblxuVGhlIHByaW1hcnkgbXVzdCBldmFsdWF0ZSB0byBhbiBvYmplY3QgdGhhdCBzdXBwb3J0cyBzdWJzY3JpcHRpb24sXG5lLmcuIGEgbGlzdCBvciBkaWN0aW9uYXJ5LiAgVXNlci1kZWZpbmVkIG9iamVjdHMgY2FuIHN1cHBvcnRcbnN1YnNjcmlwdGlvbiBieSBkZWZpbmluZyBhICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbkZvciBidWlsdC1pbiBvYmplY3RzLCB0aGVyZSBhcmUgdHdvIHR5cGVzIG9mIG9iamVjdHMgdGhhdCBzdXBwb3J0XG5zdWJzY3JpcHRpb246XG5cbklmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZywgdGhlIGV4cHJlc3Npb24gbGlzdCBtdXN0IGV2YWx1YXRlIHRvIGFuXG5vYmplY3Qgd2hvc2UgdmFsdWUgaXMgb25lIG9mIHRoZSBrZXlzIG9mIHRoZSBtYXBwaW5nLCBhbmQgdGhlXG5zdWJzY3JpcHRpb24gc2VsZWN0cyB0aGUgdmFsdWUgaW4gdGhlIG1hcHBpbmcgdGhhdCBjb3JyZXNwb25kcyB0byB0aGF0XG5rZXkuICAoVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBhIHR1cGxlIGV4Y2VwdCBpZiBpdCBoYXMgZXhhY3RseSBvbmVcbml0ZW0uKVxuXG5JZiB0aGUgcHJpbWFyeSBpcyBhIHNlcXVlbmNlLCB0aGUgZXhwcmVzc2lvbiAobGlzdCkgbXVzdCBldmFsdWF0ZSB0b1xuYW4gaW50ZWdlciBvciBhIHNsaWNlIChhcyBkaXNjdXNzZWQgaW4gdGhlIGZvbGxvd2luZyBzZWN0aW9uKS5cblxuVGhlIGZvcm1hbCBzeW50YXggbWFrZXMgbm8gc3BlY2lhbCBwcm92aXNpb24gZm9yIG5lZ2F0aXZlIGluZGljZXMgaW5cbnNlcXVlbmNlczsgaG93ZXZlciwgYnVpbHQtaW4gc2VxdWVuY2VzIGFsbCBwcm92aWRlIGEgIl9fZ2V0aXRlbV9fKCkiXG5tZXRob2QgdGhhdCBpbnRlcnByZXRzIG5lZ2F0aXZlIGluZGljZXMgYnkgYWRkaW5nIHRoZSBsZW5ndGggb2YgdGhlXG5zZXF1ZW5jZSB0byB0aGUgaW5kZXggKHNvIHRoYXQgInhbLTFdIiBzZWxlY3RzIHRoZSBsYXN0IGl0ZW0gb2YgIngiKS5cblRoZSByZXN1bHRpbmcgdmFsdWUgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIgbGVzcyB0aGFuIHRoZSBudW1iZXJcbm9mIGl0ZW1zIGluIHRoZSBzZXF1ZW5jZSwgYW5kIHRoZSBzdWJzY3JpcHRpb24gc2VsZWN0cyB0aGUgaXRlbSB3aG9zZVxuaW5kZXggaXMgdGhhdCB2YWx1ZSAoY291bnRpbmcgZnJvbSB6ZXJvKS4gU2luY2UgdGhlIHN1cHBvcnQgZm9yXG5uZWdhdGl2ZSBpbmRpY2VzIGFuZCBzbGljaW5nIG9jY3VycyBpbiB0aGUgb2JqZWN0XCdzICJfX2dldGl0ZW1fXygpIlxubWV0aG9kLCBzdWJjbGFzc2VzIG92ZXJyaWRpbmcgdGhpcyBtZXRob2Qgd2lsbCBuZWVkIHRvIGV4cGxpY2l0bHkgYWRkXG50aGF0IHN1cHBvcnQuXG5cbkEgc3RyaW5nXCdzIGl0ZW1zIGFyZSBjaGFyYWN0ZXJzLiAgQSBjaGFyYWN0ZXIgaXMgbm90IGEgc2VwYXJhdGUgZGF0YVxudHlwZSBidXQgYSBzdHJpbmcgb2YgZXhhY3RseSBvbmUgY2hhcmFjdGVyLlxuJywKLSAndHJ1dGgnOiAnXG5UcnV0aCBWYWx1ZSBUZXN0aW5nXG4qKioqKioqKioqKioqKioqKioqXG5cbkFueSBvYmplY3QgY2FuIGJlIHRlc3RlZCBmb3IgdHJ1dGggdmFsdWUsIGZvciB1c2UgaW4gYW4gImlmIiBvclxuIndoaWxlIiBjb25kaXRpb24gb3IgYXMgb3BlcmFuZCBvZiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zIGJlbG93LiBUaGVcbmZvbGxvd2luZyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgZmFsc2U6XG5cbiogIk5vbmUiXG5cbiogIkZhbHNlIlxuXG4qIHplcm8gb2YgYW55IG51bWVyaWMgdHlwZSwgZm9yIGV4YW1wbGUsICIwIiwgIjAuMCIsICIwaiIuXG5cbiogYW55IGVtcHR5IHNlcXVlbmNlLCBmb3IgZXhhbXBsZSwgIlwnXCciLCAiKCkiLCAiW10iLlxuXG4qIGFueSBlbXB0eSBtYXBwaW5nLCBmb3IgZXhhbXBsZSwgInt9Ii5cblxuKiBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMsIGlmIHRoZSBjbGFzcyBkZWZpbmVzIGFcbiAgIl9fYm9vbF9fKCkiIG9yICJfX2xlbl9fKCkiIG1ldGhvZCwgd2hlbiB0aGF0IG1ldGhvZCByZXR1cm5zIHRoZVxuICBpbnRlZ2VyIHplcm8gb3IgImJvb2wiIHZhbHVlICJGYWxzZSIuIFsxXVxuXG5BbGwgb3RoZXIgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHRydWUgLS0tIHNvIG9iamVjdHMgb2YgbWFueSB0eXBlcyBhcmVcbmFsd2F5cyB0cnVlLlxuXG5PcGVyYXRpb25zIGFuZCBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgQm9vbGVhbiByZXN1bHQgYWx3YXlzXG5yZXR1cm4gIjAiIG9yICJGYWxzZSIgZm9yIGZhbHNlIGFuZCAiMSIgb3IgIlRydWUiIGZvciB0cnVlLCB1bmxlc3Ncbm90aGVyd2lzZSBzdGF0ZWQuIChJbXBvcnRhbnQgZXhjZXB0aW9uOiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zICJvciJcbmFuZCAiYW5kIiBhbHdheXMgcmV0dXJuIG9uZSBvZiB0aGVpciBvcGVyYW5kcy4pXG4nLAotICd0cnknOiAnXG5UaGUgInRyeSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSAidHJ5IiBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIHRhcmdldF1dICI6IiBzdWl0ZSkrXG4gICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuICAgICAgICAgICAgICAgICBbImZpbmFsbHkiICI6IiBzdWl0ZV1cbiAgIHRyeTJfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICJmaW5hbGx5IiAiOiIgc3VpdGVcblxuVGhlICJleGNlcHQiIGNsYXVzZShzKSBzcGVjaWZ5IG9uZSBvciBtb3JlIGV4Y2VwdGlvbiBoYW5kbGVycy4gV2hlbiBub1xuZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgInRyeSIgY2xhdXNlLCBubyBleGNlcHRpb24gaGFuZGxlciBpc1xuZXhlY3V0ZWQuIFdoZW4gYW4gZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgInRyeSIgc3VpdGUsIGEgc2VhcmNoIGZvciBhblxuZXhjZXB0aW9uIGhhbmRsZXIgaXMgc3RhcnRlZC4gIFRoaXMgc2VhcmNoIGluc3BlY3RzIHRoZSBleGNlcHQgY2xhdXNlc1xuaW4gdHVybiB1bnRpbCBvbmUgaXMgZm91bmQgdGhhdCBtYXRjaGVzIHRoZSBleGNlcHRpb24uICBBbiBleHByZXNzaW9uLVxubGVzcyBleGNlcHQgY2xhdXNlLCBpZiBwcmVzZW50LCBtdXN0IGJlIGxhc3Q7IGl0IG1hdGNoZXMgYW55XG5leGNlcHRpb24uICBGb3IgYW4gZXhjZXB0IGNsYXVzZSB3aXRoIGFuIGV4cHJlc3Npb24sIHRoYXQgZXhwcmVzc2lvblxuaXMgZXZhbHVhdGVkLCBhbmQgdGhlIGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24gaWYgdGhlIHJlc3VsdGluZ1xub2JqZWN0IGlzICJjb21wYXRpYmxlIiB3aXRoIHRoZSBleGNlcHRpb24uICBBbiBvYmplY3QgaXMgY29tcGF0aWJsZVxud2l0aCBhbiBleGNlcHRpb24gaWYgaXQgaXMgdGhlIGNsYXNzIG9yIGEgYmFzZSBjbGFzcyBvZiB0aGUgZXhjZXB0aW9uXG5vYmplY3Qgb3IgYSB0dXBsZSBjb250YWluaW5nIGFuIGl0ZW0gY29tcGF0aWJsZSB3aXRoIHRoZSBleGNlcHRpb24uXG5cbklmIG5vIGV4Y2VwdCBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLCB0aGUgc2VhcmNoIGZvciBhbiBleGNlcHRpb25cbmhhbmRsZXIgY29udGludWVzIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvbiB0aGUgaW52b2NhdGlvbiBzdGFjay5cblsxXVxuXG5JZiB0aGUgZXZhbHVhdGlvbiBvZiBhbiBleHByZXNzaW9uIGluIHRoZSBoZWFkZXIgb2YgYW4gZXhjZXB0IGNsYXVzZVxucmFpc2VzIGFuIGV4Y2VwdGlvbiwgdGhlIG9yaWdpbmFsIHNlYXJjaCBmb3IgYSBoYW5kbGVyIGlzIGNhbmNlbGVkIGFuZFxuYSBzZWFyY2ggc3RhcnRzIGZvciB0aGUgbmV3IGV4Y2VwdGlvbiBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb25cbnRoZSBjYWxsIHN0YWNrIChpdCBpcyB0cmVhdGVkIGFzIGlmIHRoZSBlbnRpcmUgInRyeSIgc3RhdGVtZW50IHJhaXNlZFxudGhlIGV4Y2VwdGlvbikuXG5cbldoZW4gYSBtYXRjaGluZyBleGNlcHQgY2xhdXNlIGlzIGZvdW5kLCB0aGUgZXhjZXB0aW9uIGlzIGFzc2lnbmVkIHRvXG50aGUgdGFyZ2V0IHNwZWNpZmllZCBhZnRlciB0aGUgImFzIiBrZXl3b3JkIGluIHRoYXQgZXhjZXB0IGNsYXVzZSwgaWZcbnByZXNlbnQsIGFuZCB0aGUgZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZC4gIEFsbCBleGNlcHRcbmNsYXVzZXMgbXVzdCBoYXZlIGFuIGV4ZWN1dGFibGUgYmxvY2suICBXaGVuIHRoZSBlbmQgb2YgdGhpcyBibG9jayBpc1xucmVhY2hlZCwgZXhlY3V0aW9uIGNvbnRpbnVlcyBub3JtYWxseSBhZnRlciB0aGUgZW50aXJlIHRyeSBzdGF0ZW1lbnQuXG4oVGhpcyBtZWFucyB0aGF0IGlmIHR3byBuZXN0ZWQgaGFuZGxlcnMgZXhpc3QgZm9yIHRoZSBzYW1lIGV4Y2VwdGlvbixcbmFuZCB0aGUgZXhjZXB0aW9uIG9jY3VycyBpbiB0aGUgdHJ5IGNsYXVzZSBvZiB0aGUgaW5uZXIgaGFuZGxlciwgdGhlXG5vdXRlciBoYW5kbGVyIHdpbGwgbm90IGhhbmRsZSB0aGUgZXhjZXB0aW9uLilcblxuV2hlbiBhbiBleGNlcHRpb24gaGFzIGJlZW4gYXNzaWduZWQgdXNpbmcgImFzIHRhcmdldCIsIGl0IGlzIGNsZWFyZWRcbmF0IHRoZSBlbmQgb2YgdGhlIGV4Y2VwdCBjbGF1c2UuICBUaGlzIGlzIGFzIGlmXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgZm9vXG5cbndhcyB0cmFuc2xhdGVkIHRvXG5cbiAgIGV4Y2VwdCBFIGFzIE46XG4gICAgICAgdHJ5OlxuICAgICAgICAgICBmb29cbiAgICAgICBmaW5hbGx5OlxuICAgICAgICAgICBkZWwgTlxuXG5UaGlzIG1lYW5zIHRoZSBleGNlcHRpb24gbXVzdCBiZSBhc3NpZ25lZCB0byBhIGRpZmZlcmVudCBuYW1lIHRvIGJlXG5hYmxlIHRvIHJlZmVyIHRvIGl0IGFmdGVyIHRoZSBleGNlcHQgY2xhdXNlLiAgRXhjZXB0aW9ucyBhcmUgY2xlYXJlZFxuYmVjYXVzZSB3aXRoIHRoZSB0cmFjZWJhY2sgYXR0YWNoZWQgdG8gdGhlbSwgdGhleSBmb3JtIGEgcmVmZXJlbmNlXG5jeWNsZSB3aXRoIHRoZSBzdGFjayBmcmFtZSwga2VlcGluZyBhbGwgbG9jYWxzIGluIHRoYXQgZnJhbWUgYWxpdmVcbnVudGlsIHRoZSBuZXh0IGdhcmJhZ2UgY29sbGVjdGlvbiBvY2N1cnMuXG5cbkJlZm9yZSBhbiBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLCBkZXRhaWxzIGFib3V0IHRoZVxuZXhjZXB0aW9uIGFyZSBzdG9yZWQgaW4gdGhlICJzeXMiIG1vZHVsZSBhbmQgY2FuIGJlIGFjY2VzcyB2aWFcbiJzeXMuZXhjX2luZm8oKSIuICJzeXMuZXhjX2luZm8oKSIgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZiB0aGVcbmV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpbiB0aGVcbnByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gICJzeXMuZXhjX2luZm8oKSIgdmFsdWVzIGFyZVxucmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsICJlbHNlIiBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlICJ0cnkiIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlICJlbHNlIiBjbGF1c2UgYXJlXG5ub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nICJleGNlcHQiIGNsYXVzZXMuXG5cbklmICJmaW5hbGx5IiBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlICJ0cnkiXG5jbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgImV4Y2VwdCIgYW5kICJlbHNlIiBjbGF1c2VzLiAgSWYgYW5cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3QgaGFuZGxlZCwgdGhlXG5leGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkLiAgSWZcbnRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mIHRoZSAiZmluYWxseSJcbmNsYXVzZS4gIElmIHRoZSAiZmluYWxseSIgY2xhdXNlIHJhaXNlcyBhbm90aGVyIGV4Y2VwdGlvbiwgdGhlIHNhdmVkXG5leGNlcHRpb24gaXMgc2V0IGFzIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgZXhjZXB0aW9uLiBJZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UgZXhlY3V0ZXMgYSAicmV0dXJuIiBvciAiYnJlYWsiIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvblxuaXMgZGlzY2FyZGVkOlxuXG4gICBkZWYgZigpOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgMS8wXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgcmV0dXJuIDQyXG5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgImZpbmFsbHkiIGNsYXVzZS5cblxuV2hlbiBhICJyZXR1cm4iLCAiYnJlYWsiIG9yICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluIHRoZVxuInRyeSIgc3VpdGUgb2YgYSAidHJ5Ii4uLiJmaW5hbGx5IiBzdGF0ZW1lbnQsIHRoZSAiZmluYWxseSIgY2xhdXNlIGlzXG5hbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSAiY29udGludWUiIHN0YXRlbWVudCBpcyBpbGxlZ2FsIGluXG50aGUgImZpbmFsbHkiIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYSBwcm9ibGVtIHdpdGggdGhlIGN1cnJlbnRcbmltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cbkFkZGl0aW9uYWwgaW5mb3JtYXRpb24gb24gZXhjZXB0aW9ucyBjYW4gYmUgZm91bmQgaW4gc2VjdGlvblxuKkV4Y2VwdGlvbnMqLCBhbmQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlICJyYWlzZSIgc3RhdGVtZW50IHRvXG5nZW5lcmF0ZSBleGNlcHRpb25zIG1heSBiZSBmb3VuZCBpbiBzZWN0aW9uICpUaGUgcmFpc2Ugc3RhdGVtZW50Ki5cbicsCi0gJ3R5cGVzJzogJ1xuVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5XG4qKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSB0eXBlcyB0aGF0IGFyZSBidWlsdCBpbnRvIFB5dGhvbi4gIEV4dGVuc2lvblxubW9kdWxlcyAod3JpdHRlbiBpbiBDLCBKYXZhLCBvciBvdGhlciBsYW5ndWFnZXMsIGRlcGVuZGluZyBvbiB0aGVcbmltcGxlbWVudGF0aW9uKSBjYW4gZGVmaW5lIGFkZGl0aW9uYWwgdHlwZXMuICBGdXR1cmUgdmVyc2lvbnMgb2ZcblB5dGhvbiBtYXkgYWRkIHR5cGVzIHRvIHRoZSB0eXBlIGhpZXJhcmNoeSAoZS5nLiwgcmF0aW9uYWwgbnVtYmVycyxcbmVmZmljaWVudGx5IHN0b3JlZCBhcnJheXMgb2YgaW50ZWdlcnMsIGV0Yy4pLCBhbHRob3VnaCBzdWNoIGFkZGl0aW9uc1xud2lsbCBvZnRlbiBiZSBwcm92aWRlZCB2aWEgdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW5zdGVhZC5cblxuU29tZSBvZiB0aGUgdHlwZSBkZXNjcmlwdGlvbnMgYmVsb3cgY29udGFpbiBhIHBhcmFncmFwaCBsaXN0aW5nXG5cJ3NwZWNpYWwgYXR0cmlidXRlcy5cJyAgVGhlc2UgYXJlIGF0dHJpYnV0ZXMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGVcbmltcGxlbWVudGF0aW9uIGFuZCBhcmUgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZS4gIFRoZWlyIGRlZmluaXRpb25cbm1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuTm9uZVxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lICJOb25lIi4gSXRcbiAgIGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucywgZS5nLixcbiAgIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICAiTm90SW1wbGVtZW50ZWQiLiBOdW1lcmljIG1ldGhvZHMgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzIG1heVxuICAgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yIHRoZVxuICAgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlIHJlZmxlY3RlZFxuICAgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlIG9wZXJhdG9yLikgIEl0c1xuICAgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuRWxsaXBzaXNcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbGl0ZXJhbCAiLi4uIiBvciB0aGVcbiAgIGJ1aWx0LWluIG5hbWUgIkVsbGlwc2lzIi4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG4ibnVtYmVycy5OdW1iZXIiXG4gICBUaGVzZSBhcmUgY3JlYXRlZCBieSBudW1lcmljIGxpdGVyYWxzIGFuZCByZXR1cm5lZCBhcyByZXN1bHRzIGJ5XG4gICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgYXJpdGhtZXRpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBOdW1lcmljXG4gICBvYmplY3RzIGFyZSBpbW11dGFibGU7IG9uY2UgY3JlYXRlZCB0aGVpciB2YWx1ZSBuZXZlciBjaGFuZ2VzLlxuICAgUHl0aG9uIG51bWJlcnMgYXJlIG9mIGNvdXJzZSBzdHJvbmdseSByZWxhdGVkIHRvIG1hdGhlbWF0aWNhbFxuICAgbnVtYmVycywgYnV0IHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9mIG51bWVyaWNhbCByZXByZXNlbnRhdGlvblxuICAgaW4gY29tcHV0ZXJzLlxuXG4gICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGludGVnZXJzLCBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhbmRcbiAgIGNvbXBsZXggbnVtYmVyczpcblxuICAgIm51bWJlcnMuSW50ZWdyYWwiXG4gICAgICBUaGVzZSByZXByZXNlbnQgZWxlbWVudHMgZnJvbSB0aGUgbWF0aGVtYXRpY2FsIHNldCBvZiBpbnRlZ2Vyc1xuICAgICAgKHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSkuXG5cbiAgICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW50ZWdlcnM6XG5cbiAgICAgIEludGVnZXJzICgiaW50IilcblxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gYW4gdW5saW1pdGVkIHJhbmdlLCBzdWJqZWN0IHRvXG4gICAgICAgICBhdmFpbGFibGUgKHZpcnR1YWwpIG1lbW9yeSBvbmx5LiAgRm9yIHRoZSBwdXJwb3NlIG9mIHNoaWZ0XG4gICAgICAgICBhbmQgbWFzayBvcGVyYXRpb25zLCBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLCBhbmRcbiAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGluIGEgdmFyaWFudCBvZiAyXCdzXG4gICAgICAgICBjb21wbGVtZW50IHdoaWNoIGdpdmVzIHRoZSBpbGx1c2lvbiBvZiBhbiBpbmZpbml0ZSBzdHJpbmcgb2ZcbiAgICAgICAgIHNpZ24gYml0cyBleHRlbmRpbmcgdG8gdGhlIGxlZnQuXG5cbiAgICAgIEJvb2xlYW5zICgiYm9vbCIpXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgdGhlIHRydXRoIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZS4gIFRoZSB0d29cbiAgICAgICAgIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZXMgIkZhbHNlIiBhbmQgIlRydWUiIGFyZSB0aGVcbiAgICAgICAgIG9ubHkgQm9vbGVhbiBvYmplY3RzLiBUaGUgQm9vbGVhbiB0eXBlIGlzIGEgc3VidHlwZSBvZiB0aGVcbiAgICAgICAgIGludGVnZXIgdHlwZSwgYW5kIEJvb2xlYW4gdmFsdWVzIGJlaGF2ZSBsaWtlIHRoZSB2YWx1ZXMgMCBhbmRcbiAgICAgICAgIDEsIHJlc3BlY3RpdmVseSwgaW4gYWxtb3N0IGFsbCBjb250ZXh0cywgdGhlIGV4Y2VwdGlvbiBiZWluZ1xuICAgICAgICAgdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZywgdGhlIHN0cmluZ3MgIiJGYWxzZSIiIG9yXG4gICAgICAgICAiIlRydWUiIiBhcmUgcmV0dXJuZWQsIHJlc3BlY3RpdmVseS5cblxuICAgICAgVGhlIHJ1bGVzIGZvciBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIGFyZSBpbnRlbmRlZCB0byBnaXZlIHRoZVxuICAgICAgbW9zdCBtZWFuaW5nZnVsIGludGVycHJldGF0aW9uIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnNcbiAgICAgIGludm9sdmluZyBuZWdhdGl2ZSBpbnRlZ2Vycy5cblxuICAgIm51bWJlcnMuUmVhbCIgKCJmbG9hdCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGlzXG4gICAgICBkd2FyZmVkIGJ5IHRoZSBvdmVyaGVhZCBvZiB1c2luZyBvYmplY3RzIGluIFB5dGhvbiwgc28gdGhlcmUgaXNcbiAgICAgIG5vIHJlYXNvbiB0byBjb21wbGljYXRlIHRoZSBsYW5ndWFnZSB3aXRoIHR3byBraW5kcyBvZiBmbG9hdGluZ1xuICAgICAgcG9pbnQgbnVtYmVycy5cblxuICAgIm51bWJlcnMuQ29tcGxleCIgKCJjb21wbGV4IilcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBjb21wbGV4IG51bWJlcnMgYXMgYSBwYWlyIG9mIG1hY2hpbmUtbGV2ZWxcbiAgICAgIGRvdWJsZSBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gIFRoZSBzYW1lIGNhdmVhdHMgYXBwbHlcbiAgICAgIGFzIGZvciBmbG9hdGluZyBwb2ludCBudW1iZXJzLiBUaGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIGFcbiAgICAgIGNvbXBsZXggbnVtYmVyICJ6IiBjYW4gYmUgcmV0cmlldmVkIHRocm91Z2ggdGhlIHJlYWQtb25seVxuICAgICAgYXR0cmlidXRlcyAiei5yZWFsIiBhbmQgInouaW1hZyIuXG5cblNlcXVlbmNlc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBvcmRlcmVkIHNldHMgaW5kZXhlZCBieSBub24tbmVnYXRpdmVcbiAgIG51bWJlcnMuIFRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiIHJldHVybnMgdGhlIG51bWJlciBvZiBpdGVtc1xuICAgb2YgYSBzZXF1ZW5jZS4gV2hlbiB0aGUgbGVuZ3RoIG9mIGEgc2VxdWVuY2UgaXMgKm4qLCB0aGUgaW5kZXggc2V0XG4gICBjb250YWlucyB0aGUgbnVtYmVycyAwLCAxLCAuLi4sICpuKi0xLiAgSXRlbSAqaSogb2Ygc2VxdWVuY2UgKmEqIGlzXG4gICBzZWxlY3RlZCBieSAiYVtpXSIuXG5cbiAgIFNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgc2xpY2luZzogImFbaTpqXSIgc2VsZWN0cyBhbGwgaXRlbXMgd2l0aFxuICAgaW5kZXggKmsqIHN1Y2ggdGhhdCAqaSogIjw9IiAqayogIjwiICpqKi4gIFdoZW4gdXNlZCBhcyBhblxuICAgZXhwcmVzc2lvbiwgYSBzbGljZSBpcyBhIHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUuICBUaGlzIGltcGxpZXNcbiAgIHRoYXQgdGhlIGluZGV4IHNldCBpcyByZW51bWJlcmVkIHNvIHRoYXQgaXQgc3RhcnRzIGF0IDAuXG5cbiAgIFNvbWUgc2VxdWVuY2VzIGFsc28gc3VwcG9ydCAiZXh0ZW5kZWQgc2xpY2luZyIgd2l0aCBhIHRoaXJkICJzdGVwIlxuICAgcGFyYW1ldGVyOiAiYVtpOmo6a10iIHNlbGVjdHMgYWxsIGl0ZW1zIG9mICphKiB3aXRoIGluZGV4ICp4KiB3aGVyZVxuICAgInggPSBpICsgbiprIiwgKm4qICI+PSIgIjAiIGFuZCAqaSogIjw9IiAqeCogIjwiICpqKi5cblxuICAgU2VxdWVuY2VzIGFyZSBkaXN0aW5ndWlzaGVkIGFjY29yZGluZyB0byB0aGVpciBtdXRhYmlsaXR5OlxuXG4gICBJbW11dGFibGUgc2VxdWVuY2VzXG4gICAgICBBbiBvYmplY3Qgb2YgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIHR5cGUgY2Fubm90IGNoYW5nZSBvbmNlIGl0IGlzXG4gICAgICBjcmVhdGVkLiAgKElmIHRoZSBvYmplY3QgY29udGFpbnMgcmVmZXJlbmNlcyB0byBvdGhlciBvYmplY3RzLFxuICAgICAgdGhlc2Ugb3RoZXIgb2JqZWN0cyBtYXkgYmUgbXV0YWJsZSBhbmQgbWF5IGJlIGNoYW5nZWQ7IGhvd2V2ZXIsXG4gICAgICB0aGUgY29sbGVjdGlvbiBvZiBvYmplY3RzIGRpcmVjdGx5IHJlZmVyZW5jZWQgYnkgYW4gaW1tdXRhYmxlXG4gICAgICBvYmplY3QgY2Fubm90IGNoYW5nZS4pXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgdHlwZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXM6XG5cbiAgICAgIFN0cmluZ3NcbiAgICAgICAgIEEgc3RyaW5nIGlzIGEgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoYXQgcmVwcmVzZW50IFVuaWNvZGVcbiAgICAgICAgIGNvZGVwb2ludHMuIEFsbCB0aGUgY29kZXBvaW50cyBpbiByYW5nZSAiVSswMDAwIC0gVSsxMEZGRkYiXG4gICAgICAgICBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gYSBzdHJpbmcuICBQeXRob24gZG9lc25cJ3QgaGF2ZSBhICJjaHIiXG4gICAgICAgICB0eXBlLCBhbmQgZXZlcnkgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgYXMgYVxuICAgICAgICAgc3RyaW5nIG9iamVjdCB3aXRoIGxlbmd0aCAiMSIuICBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gIm9yZCgpIlxuICAgICAgICAgY29udmVydHMgYSBjaGFyYWN0ZXIgdG8gaXRzIGNvZGVwb2ludCAoYXMgYW4gaW50ZWdlcik7XG4gICAgICAgICAiY2hyKCkiIGNvbnZlcnRzIGFuIGludGVnZXIgaW4gcmFuZ2UgIjAgLSAxMEZGRkYiIHRvIHRoZVxuICAgICAgICAgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXIuICJzdHIuZW5jb2RlKCkiIGNhbiBiZSB1c2VkIHRvXG4gICAgICAgICBjb252ZXJ0IGEgInN0ciIgdG8gImJ5dGVzIiB1c2luZyB0aGUgZ2l2ZW4gZW5jb2RpbmcsIGFuZFxuICAgICAgICAgImJ5dGVzLmRlY29kZSgpIiBjYW4gYmUgdXNlZCB0byBhY2hpZXZlIHRoZSBvcHBvc2l0ZS5cblxuICAgICAgVHVwbGVzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSB0dXBsZSBhcmUgYXJiaXRyYXJ5IFB5dGhvbiBvYmplY3RzLiBUdXBsZXMgb2ZcbiAgICAgICAgIHR3byBvciBtb3JlIGl0ZW1zIGFyZSBmb3JtZWQgYnkgY29tbWEtc2VwYXJhdGVkIGxpc3RzIG9mXG4gICAgICAgICBleHByZXNzaW9ucy4gIEEgdHVwbGUgb2Ygb25lIGl0ZW0gKGEgXCdzaW5nbGV0b25cJykgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYWZmaXhpbmcgYSBjb21tYSB0byBhbiBleHByZXNzaW9uIChhbiBleHByZXNzaW9uIGJ5XG4gICAgICAgICBpdHNlbGYgZG9lcyBub3QgY3JlYXRlIGEgdHVwbGUsIHNpbmNlIHBhcmVudGhlc2VzIG11c3QgYmVcbiAgICAgICAgIHVzYWJsZSBmb3IgZ3JvdXBpbmcgb2YgZXhwcmVzc2lvbnMpLiAgQW4gZW1wdHkgdHVwbGUgY2FuIGJlXG4gICAgICAgICBmb3JtZWQgYnkgYW4gZW1wdHkgcGFpciBvZiBwYXJlbnRoZXNlcy5cblxuICAgICAgQnl0ZXNcbiAgICAgICAgIEEgYnl0ZXMgb2JqZWN0IGlzIGFuIGltbXV0YWJsZSBhcnJheS4gIFRoZSBpdGVtcyBhcmUgOC1iaXRcbiAgICAgICAgIGJ5dGVzLCByZXByZXNlbnRlZCBieSBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgMjU2LlxuICAgICAgICAgQnl0ZXMgbGl0ZXJhbHMgKGxpa2UgImJcJ2FiY1wnIikgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgImJ5dGVzKCkiIGNhbiBiZSB1c2VkIHRvIGNvbnN0cnVjdCBieXRlcyBvYmplY3RzLiAgQWxzbyxcbiAgICAgICAgIGJ5dGVzIG9iamVjdHMgY2FuIGJlIGRlY29kZWQgdG8gc3RyaW5ncyB2aWEgdGhlICJkZWNvZGUoKSJcbiAgICAgICAgIG1ldGhvZC5cblxuICAgTXV0YWJsZSBzZXF1ZW5jZXNcbiAgICAgIE11dGFibGUgc2VxdWVuY2VzIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZXkgYXJlIGNyZWF0ZWQuICBUaGVcbiAgICAgIHN1YnNjcmlwdGlvbiBhbmQgc2xpY2luZyBub3RhdGlvbnMgY2FuIGJlIHVzZWQgYXMgdGhlIHRhcmdldCBvZlxuICAgICAgYXNzaWdubWVudCBhbmQgImRlbCIgKGRlbGV0ZSkgc3RhdGVtZW50cy5cblxuICAgICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIG11dGFibGUgc2VxdWVuY2UgdHlwZXM6XG5cbiAgICAgIExpc3RzXG4gICAgICAgICBUaGUgaXRlbXMgb2YgYSBsaXN0IGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuICBMaXN0cyBhcmVcbiAgICAgICAgIGZvcm1lZCBieSBwbGFjaW5nIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgZXhwcmVzc2lvbnMgaW5cbiAgICAgICAgIHNxdWFyZSBicmFja2V0cy4gKE5vdGUgdGhhdCB0aGVyZSBhcmUgbm8gc3BlY2lhbCBjYXNlcyBuZWVkZWRcbiAgICAgICAgIHRvIGZvcm0gbGlzdHMgb2YgbGVuZ3RoIDAgb3IgMS4pXG5cbiAgICAgIEJ5dGUgQXJyYXlzXG4gICAgICAgICBBIGJ5dGVhcnJheSBvYmplY3QgaXMgYSBtdXRhYmxlIGFycmF5LiBUaGV5IGFyZSBjcmVhdGVkIGJ5XG4gICAgICAgICB0aGUgYnVpbHQtaW4gImJ5dGVhcnJheSgpIiBjb25zdHJ1Y3Rvci4gIEFzaWRlIGZyb20gYmVpbmdcbiAgICAgICAgIG11dGFibGUgKGFuZCBoZW5jZSB1bmhhc2hhYmxlKSwgYnl0ZSBhcnJheXMgb3RoZXJ3aXNlIHByb3ZpZGVcbiAgICAgICAgIHRoZSBzYW1lIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbGl0eSBhcyBpbW11dGFibGUgYnl0ZXNcbiAgICAgICAgIG9iamVjdHMuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlICJhcnJheSIgcHJvdmlkZXMgYW4gYWRkaXRpb25hbCBleGFtcGxlIG9mIGFcbiAgICAgIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgYXMgZG9lcyB0aGUgImNvbGxlY3Rpb25zIiBtb2R1bGUuXG5cblNldCB0eXBlc1xuICAgVGhlc2UgcmVwcmVzZW50IHVub3JkZXJlZCwgZmluaXRlIHNldHMgb2YgdW5pcXVlLCBpbW11dGFibGVcbiAgIG9iamVjdHMuIEFzIHN1Y2gsIHRoZXkgY2Fubm90IGJlIGluZGV4ZWQgYnkgYW55IHN1YnNjcmlwdC4gSG93ZXZlcixcbiAgIHRoZXkgY2FuIGJlIGl0ZXJhdGVkIG92ZXIsIGFuZCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIlxuICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgc2V0LiBDb21tb24gdXNlcyBmb3Igc2V0cyBhcmUgZmFzdFxuICAgbWVtYmVyc2hpcCB0ZXN0aW5nLCByZW1vdmluZyBkdXBsaWNhdGVzIGZyb20gYSBzZXF1ZW5jZSwgYW5kXG4gICBjb21wdXRpbmcgbWF0aGVtYXRpY2FsIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnRlcnNlY3Rpb24sIHVuaW9uLFxuICAgZGlmZmVyZW5jZSwgYW5kIHN5bW1ldHJpYyBkaWZmZXJlbmNlLlxuXG4gICBGb3Igc2V0IGVsZW1lbnRzLCB0aGUgc2FtZSBpbW11dGFiaWxpdHkgcnVsZXMgYXBwbHkgYXMgZm9yXG4gICBkaWN0aW9uYXJ5IGtleXMuIE5vdGUgdGhhdCBudW1lcmljIHR5cGVzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3JcbiAgIG51bWVyaWMgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgIjEiIGFuZFxuICAgIjEuMCIpLCBvbmx5IG9uZSBvZiB0aGVtIGNhbiBiZSBjb250YWluZWQgaW4gYSBzZXQuXG5cbiAgIFRoZXJlIGFyZSBjdXJyZW50bHkgdHdvIGludHJpbnNpYyBzZXQgdHlwZXM6XG5cbiAgIFNldHNcbiAgICAgIFRoZXNlIHJlcHJlc2VudCBhIG11dGFibGUgc2V0LiBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgInNldCgpIiBjb25zdHJ1Y3RvciBhbmQgY2FuIGJlIG1vZGlmaWVkIGFmdGVyd2FyZHMgYnkgc2V2ZXJhbFxuICAgICAgbWV0aG9kcywgc3VjaCBhcyAiYWRkKCkiLlxuXG4gICBGcm96ZW4gc2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGFuIGltbXV0YWJsZSBzZXQuICBUaGV5IGFyZSBjcmVhdGVkIGJ5IHRoZVxuICAgICAgYnVpbHQtaW4gImZyb3plbnNldCgpIiBjb25zdHJ1Y3Rvci4gIEFzIGEgZnJvemVuc2V0IGlzIGltbXV0YWJsZVxuICAgICAgYW5kICpoYXNoYWJsZSosIGl0IGNhbiBiZSB1c2VkIGFnYWluIGFzIGFuIGVsZW1lbnQgb2YgYW5vdGhlclxuICAgICAgc2V0LCBvciBhcyBhIGRpY3Rpb25hcnkga2V5LlxuXG5NYXBwaW5nc1xuICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBhcmJpdHJhcnkgaW5kZXhcbiAgIHNldHMuIFRoZSBzdWJzY3JpcHQgbm90YXRpb24gImFba10iIHNlbGVjdHMgdGhlIGl0ZW0gaW5kZXhlZCBieSAiayJcbiAgIGZyb20gdGhlIG1hcHBpbmcgImEiOyB0aGlzIGNhbiBiZSB1c2VkIGluIGV4cHJlc3Npb25zIGFuZCBhcyB0aGVcbiAgIHRhcmdldCBvZiBhc3NpZ25tZW50cyBvciAiZGVsIiBzdGF0ZW1lbnRzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb25cbiAgICJsZW4oKSIgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIGEgbWFwcGluZy5cblxuICAgVGhlcmUgaXMgY3VycmVudGx5IGEgc2luZ2xlIGludHJpbnNpYyBtYXBwaW5nIHR5cGU6XG5cbiAgIERpY3Rpb25hcmllc1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGZpbml0ZSBzZXRzIG9mIG9iamVjdHMgaW5kZXhlZCBieSBuZWFybHlcbiAgICAgIGFyYml0cmFyeSB2YWx1ZXMuICBUaGUgb25seSB0eXBlcyBvZiB2YWx1ZXMgbm90IGFjY2VwdGFibGUgYXNcbiAgICAgIGtleXMgYXJlIHZhbHVlcyBjb250YWluaW5nIGxpc3RzIG9yIGRpY3Rpb25hcmllcyBvciBvdGhlclxuICAgICAgbXV0YWJsZSB0eXBlcyB0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbiAgICAgIGlkZW50aXR5LCB0aGUgcmVhc29uIGJlaW5nIHRoYXQgdGhlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZlxuICAgICAgZGljdGlvbmFyaWVzIHJlcXVpcmVzIGEga2V5XCdzIGhhc2ggdmFsdWUgdG8gcmVtYWluIGNvbnN0YW50LlxuICAgICAgTnVtZXJpYyB0eXBlcyB1c2VkIGZvciBrZXlzIG9iZXkgdGhlIG5vcm1hbCBydWxlcyBmb3IgbnVtZXJpY1xuICAgICAgY29tcGFyaXNvbjogaWYgdHdvIG51bWJlcnMgY29tcGFyZSBlcXVhbCAoZS5nLiwgIjEiIGFuZCAiMS4wIilcbiAgICAgIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXggdGhlIHNhbWVcbiAgICAgIGRpY3Rpb25hcnkgZW50cnkuXG5cbiAgICAgIERpY3Rpb25hcmllcyBhcmUgbXV0YWJsZTsgdGhleSBjYW4gYmUgY3JlYXRlZCBieSB0aGUgInsuLi59IlxuICAgICAgbm90YXRpb24gKHNlZSBzZWN0aW9uICpEaWN0aW9uYXJ5IGRpc3BsYXlzKikuXG5cbiAgICAgIFRoZSBleHRlbnNpb24gbW9kdWxlcyAiZGJtLm5kYm0iIGFuZCAiZGJtLmdudSIgcHJvdmlkZVxuICAgICAgYWRkaXRpb25hbCBleGFtcGxlcyBvZiBtYXBwaW5nIHR5cGVzLCBhcyBkb2VzIHRoZSAiY29sbGVjdGlvbnMiXG4gICAgICBtb2R1bGUuXG5cbkNhbGxhYmxlIHR5cGVzXG4gICBUaGVzZSBhcmUgdGhlIHR5cGVzIHRvIHdoaWNoIHRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdGlvbiAoc2VlXG4gICBzZWN0aW9uICpDYWxscyopIGNhbiBiZSBhcHBsaWVkOlxuXG4gICBVc2VyLWRlZmluZWQgZnVuY3Rpb25zXG4gICAgICBBIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgaXMgY3JlYXRlZCBieSBhIGZ1bmN0aW9uXG4gICAgICBkZWZpbml0aW9uIChzZWUgc2VjdGlvbiAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqKS4gIEl0IHNob3VsZCBiZVxuICAgICAgY2FsbGVkIHdpdGggYW4gYXJndW1lbnQgbGlzdCBjb250YWluaW5nIHRoZSBzYW1lIG51bWJlciBvZiBpdGVtc1xuICAgICAgYXMgdGhlIGZ1bmN0aW9uXCdzIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdC5cblxuICAgICAgU3BlY2lhbCBhdHRyaWJ1dGVzOlxuXG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PStcbiAgICAgIHwgIl9fZG9jX18iICAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fbmFtZV9fIiAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBuYW1lICAgICAgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fcXVhbG5hbWVfXyIgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyAqcXVhbGlmaWVkIG5hbWUqIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fbW9kdWxlX18iICAgICAgICAgICAgICB8IFRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19kZWZhdWx0c19fIiAgICAgICAgICAgIHwgQSB0dXBsZSBjb250YWluaW5nIGRlZmF1bHQgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2NvZGVfXyIgICAgICAgICAgICAgICAgfCBUaGUgY29kZSBvYmplY3QgcmVwcmVzZW50aW5nICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZ2xvYmFsc19fIiAgICAgICAgICAgICB8IEEgcmVmZXJlbmNlIHRvIHRoZSBkaWN0aW9uYXJ5ICAgfCBSZWFkLW9ubHkgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19kaWN0X18iICAgICAgICAgICAgICAgIHwgVGhlIG5hbWVzcGFjZSBzdXBwb3J0aW5nICAgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2Nsb3N1cmVfXyIgICAgICAgICAgICAgfCAiTm9uZSIgb3IgYSB0dXBsZSBvZiBjZWxscyB0aGF0IHwgUmVhZC1vbmx5ICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fYW5ub3RhdGlvbnNfXyIgICAgICAgICB8IEEgZGljdCBjb250YWluaW5nIGFubm90YXRpb25zICAgfCBXcml0YWJsZSAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19rd2RlZmF1bHRzX18iICAgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgZGVmYXVsdHMgZm9yICB8IFdyaXRhYmxlICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG5cbiAgICAgIE1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgbGFiZWxsZWQgIldyaXRhYmxlIiBjaGVjayB0aGUgdHlwZSBvZiB0aGVcbiAgICAgIGFzc2lnbmVkIHZhbHVlLlxuXG4gICAgICBGdW5jdGlvbiBvYmplY3RzIGFsc28gc3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIGFyYml0cmFyeVxuICAgICAgYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhdHRhY2ggbWV0YWRhdGFcbiAgICAgIHRvIGZ1bmN0aW9ucy4gIFJlZ3VsYXIgYXR0cmlidXRlIGRvdC1ub3RhdGlvbiBpcyB1c2VkIHRvIGdldCBhbmRcbiAgICAgIHNldCBzdWNoIGF0dHJpYnV0ZXMuICpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seVxuICAgICAgc3VwcG9ydHMgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiBGdW5jdGlvblxuICAgICAgYXR0cmlidXRlcyBvbiBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGJlIHN1cHBvcnRlZCBpbiB0aGVcbiAgICAgIGZ1dHVyZS4qXG5cbiAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvblwncyBkZWZpbml0aW9uIGNhbiBiZVxuICAgICAgcmV0cmlldmVkIGZyb20gaXRzIGNvZGUgb2JqZWN0OyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVybmFsXG4gICAgICB0eXBlcyBiZWxvdy5cblxuICAgSW5zdGFuY2UgbWV0aG9kc1xuICAgICAgQW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBjb21iaW5lcyBhIGNsYXNzLCBhIGNsYXNzIGluc3RhbmNlIGFuZFxuICAgICAgYW55IGNhbGxhYmxlIG9iamVjdCAobm9ybWFsbHkgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24pLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiX19zZWxmX18iIGlzIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgb2JqZWN0LCAiX19mdW5jX18iIGlzIHRoZSBmdW5jdGlvbiBvYmplY3Q7ICJfX2RvY19fIiBpcyB0aGVcbiAgICAgIG1ldGhvZFwncyBkb2N1bWVudGF0aW9uIChzYW1lIGFzICJfX2Z1bmNfXy5fX2RvY19fIik7ICJfX25hbWVfXyJcbiAgICAgIGlzIHRoZSBtZXRob2QgbmFtZSAoc2FtZSBhcyAiX19mdW5jX18uX19uYW1lX18iKTsgIl9fbW9kdWxlX18iXG4gICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBtZXRob2Qgd2FzIGRlZmluZWQgaW4sIG9yICJOb25lIlxuICAgICAgaWYgdW5hdmFpbGFibGUuXG5cbiAgICAgIE1ldGhvZHMgYWxzbyBzdXBwb3J0IGFjY2Vzc2luZyAoYnV0IG5vdCBzZXR0aW5nKSB0aGUgYXJiaXRyYXJ5XG4gICAgICBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgVXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3RzIG1heSBiZSBjcmVhdGVkIHdoZW4gZ2V0dGluZyBhblxuICAgICAgYXR0cmlidXRlIG9mIGEgY2xhc3MgKHBlcmhhcHMgdmlhIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MpLCBpZlxuICAgICAgdGhhdCBhdHRyaWJ1dGUgaXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IG9yIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSB1c2VyLVxuICAgICAgZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgZnJvbSBhIGNsYXNzIHZpYSBvbmUgb2YgaXRzIGluc3RhbmNlcyxcbiAgICAgIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgbWV0aG9kIG9iamVjdFxuICAgICAgaXMgc2FpZCB0byBiZSBib3VuZC4gIFRoZSBuZXcgbWV0aG9kXCdzICJfX2Z1bmNfXyIgYXR0cmlidXRlIGlzXG4gICAgICB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nXG4gICAgICBhbm90aGVyIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCB0aGUgYmVoYXZpb3VyIGlzXG4gICAgICB0aGUgc2FtZSBhcyBmb3IgYSBmdW5jdGlvbiBvYmplY3QsIGV4Y2VwdCB0aGF0IHRoZSAiX19mdW5jX18iXG4gICAgICBhdHRyaWJ1dGUgb2YgdGhlIG5ldyBpbnN0YW5jZSBpcyBub3QgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3RcbiAgICAgIGJ1dCBpdHMgIl9fZnVuY19fIiBhdHRyaWJ1dGUuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZVxuICAgICAgaXMgdGhlIGNsYXNzIGl0c2VsZiwgYW5kIGl0cyAiX19mdW5jX18iIGF0dHJpYnV0ZSBpcyB0aGVcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCB1bmRlcmx5aW5nIHRoZSBjbGFzcyBtZXRob2QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICBmdW5jdGlvbiAoIl9fZnVuY19fIikgaXMgY2FsbGVkLCBpbnNlcnRpbmcgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICAoIl9fc2VsZl9fIikgaW4gZnJvbnQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuICBGb3IgaW5zdGFuY2UsIHdoZW5cbiAgICAgICJDIiBpcyBhIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiAiZigpIixcbiAgICAgIGFuZCAieCIgaXMgYW4gaW5zdGFuY2Ugb2YgIkMiLCBjYWxsaW5nICJ4LmYoMSkiIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgIGNhbGxpbmcgIkMuZih4LCAxKSIuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBkZXJpdmVkIGZyb20gYSBjbGFzcyBtZXRob2RcbiAgICAgIG9iamVjdCwgdGhlICJjbGFzcyBpbnN0YW5jZSIgc3RvcmVkIGluICJfX3NlbGZfXyIgd2lsbCBhY3R1YWxseVxuICAgICAgYmUgdGhlIGNsYXNzIGl0c2VsZiwgc28gdGhhdCBjYWxsaW5nIGVpdGhlciAieC5mKDEpIiBvciAiQy5mKDEpIlxuICAgICAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nICJmKEMsMSkiIHdoZXJlICJmIiBpcyB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIE5vdGUgdGhhdCB0aGUgdHJhbnNmb3JtYXRpb24gZnJvbSBmdW5jdGlvbiBvYmplY3QgdG8gaW5zdGFuY2VcbiAgICAgIG1ldGhvZCBvYmplY3QgaGFwcGVucyBlYWNoIHRpbWUgdGhlIGF0dHJpYnV0ZSBpcyByZXRyaWV2ZWQgZnJvbVxuICAgICAgdGhlIGluc3RhbmNlLiAgSW4gc29tZSBjYXNlcywgYSBmcnVpdGZ1bCBvcHRpbWl6YXRpb24gaXMgdG9cbiAgICAgIGFzc2lnbiB0aGUgYXR0cmlidXRlIHRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIGNhbGwgdGhhdCBsb2NhbFxuICAgICAgdmFyaWFibGUuIEFsc28gbm90aWNlIHRoYXQgdGhpcyB0cmFuc2Zvcm1hdGlvbiBvbmx5IGhhcHBlbnMgZm9yXG4gICAgICB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOyBvdGhlciBjYWxsYWJsZSBvYmplY3RzIChhbmQgYWxsIG5vbi1cbiAgICAgIGNhbGxhYmxlIG9iamVjdHMpIGFyZSByZXRyaWV2ZWQgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbi4gIEl0IGlzXG4gICAgICBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB3aGljaCBhcmVcbiAgICAgIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyBpbnN0YW5jZSBhcmUgbm90IGNvbnZlcnRlZCB0byBib3VuZFxuICAgICAgbWV0aG9kczsgdGhpcyAqb25seSogaGFwcGVucyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbiBhdHRyaWJ1dGVcbiAgICAgIG9mIHRoZSBjbGFzcy5cblxuICAgR2VuZXJhdG9yIGZ1bmN0aW9uc1xuICAgICAgQSBmdW5jdGlvbiBvciBtZXRob2Qgd2hpY2ggdXNlcyB0aGUgInlpZWxkIiBzdGF0ZW1lbnQgKHNlZVxuICAgICAgc2VjdGlvbiAqVGhlIHlpZWxkIHN0YXRlbWVudCopIGlzIGNhbGxlZCBhICpnZW5lcmF0b3IgZnVuY3Rpb24qLlxuICAgICAgU3VjaCBhIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgYWx3YXlzIHJldHVybnMgYW4gaXRlcmF0b3Igb2JqZWN0XG4gICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbjogIGNhbGxpbmdcbiAgICAgIHRoZSBpdGVyYXRvclwncyAiaXRlcmF0b3IuX19uZXh0X18oKSIgbWV0aG9kIHdpbGwgY2F1c2UgdGhlXG4gICAgICBmdW5jdGlvbiB0byBleGVjdXRlIHVudGlsIGl0IHByb3ZpZGVzIGEgdmFsdWUgdXNpbmcgdGhlICJ5aWVsZCJcbiAgICAgIHN0YXRlbWVudC4gIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgInJldHVybiIgc3RhdGVtZW50IG9yXG4gICAgICBmYWxscyBvZmYgdGhlIGVuZCwgYSAiU3RvcEl0ZXJhdGlvbiIgZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlXG4gICAgICBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2YgdmFsdWVzIHRvIGJlXG4gICAgICByZXR1cm5lZC5cblxuICAgQnVpbHQtaW4gZnVuY3Rpb25zXG4gICAgICBBIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgQyBmdW5jdGlvbi5cbiAgICAgIEV4YW1wbGVzIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgImxlbigpIiBhbmQgIm1hdGguc2luKCkiXG4gICAgICAoIm1hdGgiIGlzIGEgc3RhbmRhcmQgYnVpbHQtaW4gbW9kdWxlKS4gVGhlIG51bWJlciBhbmQgdHlwZSBvZlxuICAgICAgdGhlIGFyZ3VtZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQyBmdW5jdGlvbi4gU3BlY2lhbCByZWFkLVxuICAgICAgb25seSBhdHRyaWJ1dGVzOiAiX19kb2NfXyIgaXMgdGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb25cbiAgICAgIHN0cmluZywgb3IgIk5vbmUiIGlmIHVuYXZhaWxhYmxlOyAiX19uYW1lX18iIGlzIHRoZSBmdW5jdGlvblwnc1xuICAgICAgbmFtZTsgIl9fc2VsZl9fIiBpcyBzZXQgdG8gIk5vbmUiIChidXQgc2VlIHRoZSBuZXh0IGl0ZW0pO1xuICAgICAgIl9fbW9kdWxlX18iIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGZ1bmN0aW9uIHdhcyBkZWZpbmVkXG4gICAgICBpbiBvciAiTm9uZSIgaWYgdW5hdmFpbGFibGUuXG5cbiAgIEJ1aWx0LWluIG1ldGhvZHNcbiAgICAgIFRoaXMgaXMgcmVhbGx5IGEgZGlmZmVyZW50IGRpc2d1aXNlIG9mIGEgYnVpbHQtaW4gZnVuY3Rpb24sIHRoaXNcbiAgICAgIHRpbWUgY29udGFpbmluZyBhbiBvYmplY3QgcGFzc2VkIHRvIHRoZSBDIGZ1bmN0aW9uIGFzIGFuXG4gICAgICBpbXBsaWNpdCBleHRyYSBhcmd1bWVudC4gIEFuIGV4YW1wbGUgb2YgYSBidWlsdC1pbiBtZXRob2QgaXNcbiAgICAgICJhbGlzdC5hcHBlbmQoKSIsIGFzc3VtaW5nICphbGlzdCogaXMgYSBsaXN0IG9iamVjdC4gSW4gdGhpc1xuICAgICAgY2FzZSwgdGhlIHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZSAiX19zZWxmX18iIGlzIHNldCB0byB0aGVcbiAgICAgIG9iamVjdCBkZW5vdGVkIGJ5ICphbGlzdCouXG5cbiAgIENsYXNzZXNcbiAgICAgIENsYXNzZXMgYXJlIGNhbGxhYmxlLiAgVGhlc2Ugb2JqZWN0cyBub3JtYWxseSBhY3QgYXMgZmFjdG9yaWVzXG4gICAgICBmb3IgbmV3IGluc3RhbmNlcyBvZiB0aGVtc2VsdmVzLCBidXQgdmFyaWF0aW9ucyBhcmUgcG9zc2libGUgZm9yXG4gICAgICBjbGFzcyB0eXBlcyB0aGF0IG92ZXJyaWRlICJfX25ld19fKCkiLiAgVGhlIGFyZ3VtZW50cyBvZiB0aGVcbiAgICAgIGNhbGwgYXJlIHBhc3NlZCB0byAiX19uZXdfXygpIiBhbmQsIGluIHRoZSB0eXBpY2FsIGNhc2UsIHRvXG4gICAgICAiX19pbml0X18oKSIgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IGluc3RhbmNlLlxuXG4gICBDbGFzcyBJbnN0YW5jZXNcbiAgICAgIEluc3RhbmNlcyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBjYW4gYmUgbWFkZSBjYWxsYWJsZSBieSBkZWZpbmluZ1xuICAgICAgYSAiX19jYWxsX18oKSIgbWV0aG9kIGluIHRoZWlyIGNsYXNzLlxuXG5Nb2R1bGVzXG4gICBNb2R1bGVzIGFyZSBhIGJhc2ljIG9yZ2FuaXphdGlvbmFsIHVuaXQgb2YgUHl0aG9uIGNvZGUsIGFuZCBhcmVcbiAgIGNyZWF0ZWQgYnkgdGhlICppbXBvcnQgc3lzdGVtKiBhcyBpbnZva2VkIGVpdGhlciBieSB0aGUgImltcG9ydCJcbiAgIHN0YXRlbWVudCAoc2VlICJpbXBvcnQiKSwgb3IgYnkgY2FsbGluZyBmdW5jdGlvbnMgc3VjaCBhc1xuICAgImltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkiIGFuZCBidWlsdC1pbiAiX19pbXBvcnRfXygpIi4gIEEgbW9kdWxlXG4gICBvYmplY3QgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QgKHRoaXMgaXNcbiAgIHRoZSBkaWN0aW9uYXJ5IHJlZmVyZW5jZWQgYnkgdGhlICJfX2dsb2JhbHNfXyIgYXR0cmlidXRlIG9mXG4gICBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlKS4gIEF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZVxuICAgdHJhbnNsYXRlZCB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgIm0ueCIgaXMgZXF1aXZhbGVudFxuICAgdG8gIm0uX19kaWN0X19bIngiXSIuIEEgbW9kdWxlIG9iamVjdCBkb2VzIG5vdCBjb250YWluIHRoZSBjb2RlXG4gICBvYmplY3QgdXNlZCB0byBpbml0aWFsaXplIHRoZSBtb2R1bGUgKHNpbmNlIGl0IGlzblwndCBuZWVkZWQgb25jZVxuICAgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUpLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudCB1cGRhdGVzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIGRpY3Rpb25hcnksXG4gICBlLmcuLCAibS54ID0gMSIgaXMgZXF1aXZhbGVudCB0byAibS5fX2RpY3RfX1sieCJdID0gMSIuXG5cbiAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogIl9fZGljdF9fIiBpcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZVxuICAgYXMgYSBkaWN0aW9uYXJ5IG9iamVjdC5cblxuICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBCZWNhdXNlIG9mIHRoZSB3YXkgQ1B5dGhvblxuICAgY2xlYXJzIG1vZHVsZSBkaWN0aW9uYXJpZXMsIHRoZSBtb2R1bGUgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWRcbiAgIHdoZW4gdGhlIG1vZHVsZSBmYWxscyBvdXQgb2Ygc2NvcGUgZXZlbiBpZiB0aGUgZGljdGlvbmFyeSBzdGlsbCBoYXNcbiAgIGxpdmUgcmVmZXJlbmNlcy4gIFRvIGF2b2lkIHRoaXMsIGNvcHkgdGhlIGRpY3Rpb25hcnkgb3Iga2VlcCB0aGVcbiAgIG1vZHVsZSBhcm91bmQgd2hpbGUgdXNpbmcgaXRzIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIFByZWRlZmluZWQgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzOiAiX19uYW1lX18iIGlzIHRoZSBtb2R1bGVcJ3MgbmFtZTtcbiAgICJfX2RvY19fIiBpcyB0aGUgbW9kdWxlXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciAiTm9uZSIgaWZcbiAgIHVuYXZhaWxhYmxlOyAiX19maWxlX18iIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoIHRoZVxuICAgbW9kdWxlIHdhcyBsb2FkZWQsIGlmIGl0IHdhcyBsb2FkZWQgZnJvbSBhIGZpbGUuIFRoZSAiX19maWxlX18iXG4gICBhdHRyaWJ1dGUgbWF5IGJlIG1pc3NpbmcgZm9yIGNlcnRhaW4gdHlwZXMgb2YgbW9kdWxlcywgc3VjaCBhcyBDXG4gICBtb2R1bGVzIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGludGVycHJldGVyOyBmb3JcbiAgIGV4dGVuc2lvbiBtb2R1bGVzIGxvYWRlZCBkeW5hbWljYWxseSBmcm9tIGEgc2hhcmVkIGxpYnJhcnksIGl0IGlzXG4gICB0aGUgcGF0aG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuXG5cbkN1c3RvbSBjbGFzc2VzXG4gICBDdXN0b20gY2xhc3MgdHlwZXMgYXJlIHR5cGljYWxseSBjcmVhdGVkIGJ5IGNsYXNzIGRlZmluaXRpb25zIChzZWVcbiAgIHNlY3Rpb24gKkNsYXNzIGRlZmluaXRpb25zKikuICBBIGNsYXNzIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZFxuICAgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdC4gQ2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHRyYW5zbGF0ZWRcbiAgIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCAiQy54IiBpcyB0cmFuc2xhdGVkIHRvXG4gICAiQy5fX2RpY3RfX1sieCJdIiAoYWx0aG91Z2ggdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhvb2tzIHdoaWNoIGFsbG93XG4gICBmb3Igb3RoZXIgbWVhbnMgb2YgbG9jYXRpbmcgYXR0cmlidXRlcykuIFdoZW4gdGhlIGF0dHJpYnV0ZSBuYW1lIGlzXG4gICBub3QgZm91bmQgdGhlcmUsIHRoZSBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRpbnVlcyBpbiB0aGUgYmFzZVxuICAgY2xhc3Nlcy4gVGhpcyBzZWFyY2ggb2YgdGhlIGJhc2UgY2xhc3NlcyB1c2VzIHRoZSBDMyBtZXRob2RcbiAgIHJlc29sdXRpb24gb3JkZXIgd2hpY2ggYmVoYXZlcyBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2ZcbiAgIFwnZGlhbW9uZFwnIGluaGVyaXRhbmNlIHN0cnVjdHVyZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlXG4gICBpbmhlcml0YW5jZSBwYXRocyBsZWFkaW5nIGJhY2sgdG8gYSBjb21tb24gYW5jZXN0b3IuIEFkZGl0aW9uYWxcbiAgIGRldGFpbHMgb24gdGhlIEMzIE1STyB1c2VkIGJ5IFB5dGhvbiBjYW4gYmUgZm91bmQgaW4gdGhlXG4gICBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgMi4zIHJlbGVhc2UgYXRcbiAgIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9yZWxlYXNlcy8yLjMvbXJvLy5cblxuICAgV2hlbiBhIGNsYXNzIGF0dHJpYnV0ZSByZWZlcmVuY2UgKGZvciBjbGFzcyAiQyIsIHNheSkgd291bGQgeWllbGQgYVxuICAgY2xhc3MgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byBhbiBpbnN0YW5jZSBtZXRob2RcbiAgIG9iamVjdCB3aG9zZSAiX19zZWxmX18iIGF0dHJpYnV0ZXMgaXMgIkMiLiAgV2hlbiBpdCB3b3VsZCB5aWVsZCBhXG4gICBzdGF0aWMgbWV0aG9kIG9iamVjdCwgaXQgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgb2JqZWN0IHdyYXBwZWQgYnlcbiAgIHRoZSBzdGF0aWMgbWV0aG9kIG9iamVjdC4gU2VlIHNlY3Rpb24gKkltcGxlbWVudGluZyBEZXNjcmlwdG9ycypcbiAgIGZvciBhbm90aGVyIHdheSBpbiB3aGljaCBhdHRyaWJ1dGVzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3MgbWF5XG4gICBkaWZmZXIgZnJvbSB0aG9zZSBhY3R1YWxseSBjb250YWluZWQgaW4gaXRzICJfX2RpY3RfXyIuXG5cbiAgIENsYXNzIGF0dHJpYnV0ZSBhc3NpZ25tZW50cyB1cGRhdGUgdGhlIGNsYXNzXCdzIGRpY3Rpb25hcnksIG5ldmVyXG4gICB0aGUgZGljdGlvbmFyeSBvZiBhIGJhc2UgY2xhc3MuXG5cbiAgIEEgY2xhc3Mgb2JqZWN0IGNhbiBiZSBjYWxsZWQgKHNlZSBhYm92ZSkgdG8geWllbGQgYSBjbGFzcyBpbnN0YW5jZVxuICAgKHNlZSBiZWxvdykuXG5cbiAgIFNwZWNpYWwgYXR0cmlidXRlczogIl9fbmFtZV9fIiBpcyB0aGUgY2xhc3MgbmFtZTsgIl9fbW9kdWxlX18iIGlzXG4gICB0aGUgbW9kdWxlIG5hbWUgaW4gd2hpY2ggdGhlIGNsYXNzIHdhcyBkZWZpbmVkOyAiX19kaWN0X18iIGlzIHRoZVxuICAgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBjbGFzc1wncyBuYW1lc3BhY2U7ICJfX2Jhc2VzX18iIGlzIGEgdHVwbGVcbiAgIChwb3NzaWJseSBlbXB0eSBvciBhIHNpbmdsZXRvbikgY29udGFpbmluZyB0aGUgYmFzZSBjbGFzc2VzLCBpbiB0aGVcbiAgIG9yZGVyIG9mIHRoZWlyIG9jY3VycmVuY2UgaW4gdGhlIGJhc2UgY2xhc3MgbGlzdDsgIl9fZG9jX18iIGlzIHRoZVxuICAgY2xhc3NcJ3MgZG9jdW1lbnRhdGlvbiBzdHJpbmcsIG9yIE5vbmUgaWYgdW5kZWZpbmVkLlxuXG5DbGFzcyBpbnN0YW5jZXNcbiAgIEEgY2xhc3MgaW5zdGFuY2UgaXMgY3JlYXRlZCBieSBjYWxsaW5nIGEgY2xhc3Mgb2JqZWN0IChzZWUgYWJvdmUpLlxuICAgQSBjbGFzcyBpbnN0YW5jZSBoYXMgYSBuYW1lc3BhY2UgaW1wbGVtZW50ZWQgYXMgYSBkaWN0aW9uYXJ5IHdoaWNoXG4gICBpcyB0aGUgZmlyc3QgcGxhY2UgaW4gd2hpY2ggYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHNlYXJjaGVkLlxuICAgV2hlbiBhbiBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kIHRoZXJlLCBhbmQgdGhlIGluc3RhbmNlXCdzIGNsYXNzIGhhc1xuICAgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZSwgdGhlIHNlYXJjaCBjb250aW51ZXMgd2l0aCB0aGUgY2xhc3NcbiAgIGF0dHJpYnV0ZXMuICBJZiBhIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCB0aGF0IGlzIGEgdXNlci1kZWZpbmVkXG4gICBmdW5jdGlvbiBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdFxuICAgd2hvc2UgIl9fc2VsZl9fIiBhdHRyaWJ1dGUgaXMgdGhlIGluc3RhbmNlLiAgU3RhdGljIG1ldGhvZCBhbmRcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIGFyZSBhbHNvIHRyYW5zZm9ybWVkOyBzZWUgYWJvdmUgdW5kZXJcbiAgICJDbGFzc2VzIi4gIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqIGZvciBhbm90aGVyIHdheVxuICAgaW4gd2hpY2ggYXR0cmlidXRlcyBvZiBhIGNsYXNzIHJldHJpZXZlZCB2aWEgaXRzIGluc3RhbmNlcyBtYXlcbiAgIGRpZmZlciBmcm9tIHRoZSBvYmplY3RzIGFjdHVhbGx5IHN0b3JlZCBpbiB0aGUgY2xhc3NcJ3MgIl9fZGljdF9fIi5cbiAgIElmIG5vIGNsYXNzIGF0dHJpYnV0ZSBpcyBmb3VuZCwgYW5kIHRoZSBvYmplY3RcJ3MgY2xhc3MgaGFzIGFcbiAgICJfX2dldGF0dHJfXygpIiBtZXRob2QsIHRoYXQgaXMgY2FsbGVkIHRvIHNhdGlzZnkgdGhlIGxvb2t1cC5cblxuICAgQXR0cmlidXRlIGFzc2lnbm1lbnRzIGFuZCBkZWxldGlvbnMgdXBkYXRlIHRoZSBpbnN0YW5jZVwnc1xuICAgZGljdGlvbmFyeSwgbmV2ZXIgYSBjbGFzc1wncyBkaWN0aW9uYXJ5LiAgSWYgdGhlIGNsYXNzIGhhcyBhXG4gICAiX19zZXRhdHRyX18oKSIgb3IgIl9fZGVsYXR0cl9fKCkiIG1ldGhvZCwgdGhpcyBpcyBjYWxsZWQgaW5zdGVhZFxuICAgb2YgdXBkYXRpbmcgdGhlIGluc3RhbmNlIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIENsYXNzIGluc3RhbmNlcyBjYW4gcHJldGVuZCB0byBiZSBudW1iZXJzLCBzZXF1ZW5jZXMsIG9yIG1hcHBpbmdzXG4gICBpZiB0aGV5IGhhdmUgbWV0aG9kcyB3aXRoIGNlcnRhaW4gc3BlY2lhbCBuYW1lcy4gIFNlZSBzZWN0aW9uXG4gICAqU3BlY2lhbCBtZXRob2QgbmFtZXMqLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6ICJfX2RpY3RfXyIgaXMgdGhlIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5O1xuICAgIl9fY2xhc3NfXyIgaXMgdGhlIGluc3RhbmNlXCdzIGNsYXNzLlxuXG5JL08gb2JqZWN0cyAoYWxzbyBrbm93biBhcyBmaWxlIG9iamVjdHMpXG4gICBBICpmaWxlIG9iamVjdCogcmVwcmVzZW50cyBhbiBvcGVuIGZpbGUuICBWYXJpb3VzIHNob3J0Y3V0cyBhcmVcbiAgIGF2YWlsYWJsZSB0byBjcmVhdGUgZmlsZSBvYmplY3RzOiB0aGUgIm9wZW4oKSIgYnVpbHQtaW4gZnVuY3Rpb24sXG4gICBhbmQgYWxzbyAib3MucG9wZW4oKSIsICJvcy5mZG9wZW4oKSIsIGFuZCB0aGUgIm1ha2VmaWxlKCkiIG1ldGhvZFxuICAgb2Ygc29ja2V0IG9iamVjdHMgKGFuZCBwZXJoYXBzIGJ5IG90aGVyIGZ1bmN0aW9ucyBvciBtZXRob2RzXG4gICBwcm92aWRlZCBieSBleHRlbnNpb24gbW9kdWxlcykuXG5cbiAgIFRoZSBvYmplY3RzICJzeXMuc3RkaW4iLCAic3lzLnN0ZG91dCIgYW5kICJzeXMuc3RkZXJyIiBhcmVcbiAgIGluaXRpYWxpemVkIHRvIGZpbGUgb2JqZWN0cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBpbnRlcnByZXRlclwnc1xuICAgc3RhbmRhcmQgaW5wdXQsIG91dHB1dCBhbmQgZXJyb3Igc3RyZWFtczsgdGhleSBhcmUgYWxsIG9wZW4gaW4gdGV4dFxuICAgbW9kZSBhbmQgdGhlcmVmb3JlIGZvbGxvdyB0aGUgaW50ZXJmYWNlIGRlZmluZWQgYnkgdGhlXG4gICAiaW8uVGV4dElPQmFzZSIgYWJzdHJhY3QgY2xhc3MuXG5cbkludGVybmFsIHR5cGVzXG4gICBBIGZldyB0eXBlcyB1c2VkIGludGVybmFsbHkgYnkgdGhlIGludGVycHJldGVyIGFyZSBleHBvc2VkIHRvIHRoZVxuICAgdXNlci4gVGhlaXIgZGVmaW5pdGlvbnMgbWF5IGNoYW5nZSB3aXRoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGVcbiAgIGludGVycHJldGVyLCBidXQgdGhleSBhcmUgbWVudGlvbmVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy5cblxuICAgQ29kZSBvYmplY3RzXG4gICAgICBDb2RlIG9iamVjdHMgcmVwcmVzZW50ICpieXRlLWNvbXBpbGVkKiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlLFxuICAgICAgb3IgKmJ5dGVjb2RlKi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGNvZGUgb2JqZWN0IGFuZCBhXG4gICAgICBmdW5jdGlvbiBvYmplY3QgaXMgdGhhdCB0aGUgZnVuY3Rpb24gb2JqZWN0IGNvbnRhaW5zIGFuIGV4cGxpY2l0XG4gICAgICByZWZlcmVuY2UgdG8gdGhlIGZ1bmN0aW9uXCdzIGdsb2JhbHMgKHRoZSBtb2R1bGUgaW4gd2hpY2ggaXQgd2FzXG4gICAgICBkZWZpbmVkKSwgd2hpbGUgYSBjb2RlIG9iamVjdCBjb250YWlucyBubyBjb250ZXh0OyBhbHNvIHRoZVxuICAgICAgZGVmYXVsdCBhcmd1bWVudCB2YWx1ZXMgYXJlIHN0b3JlZCBpbiB0aGUgZnVuY3Rpb24gb2JqZWN0LCBub3RcbiAgICAgIGluIHRoZSBjb2RlIG9iamVjdCAoYmVjYXVzZSB0aGV5IHJlcHJlc2VudCB2YWx1ZXMgY2FsY3VsYXRlZCBhdFxuICAgICAgcnVuLXRpbWUpLiAgVW5saWtlIGZ1bmN0aW9uIG9iamVjdHMsIGNvZGUgb2JqZWN0cyBhcmUgaW1tdXRhYmxlXG4gICAgICBhbmQgY29udGFpbiBubyByZWZlcmVuY2VzIChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSB0byBtdXRhYmxlXG4gICAgICBvYmplY3RzLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiY29fbmFtZSIgZ2l2ZXMgdGhlIGZ1bmN0aW9uIG5hbWU7XG4gICAgICAiY29fYXJnY291bnQiIGlzIHRoZSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgKGluY2x1ZGluZ1xuICAgICAgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMpOyAiY29fbmxvY2FscyIgaXMgdGhlIG51bWJlciBvZlxuICAgICAgbG9jYWwgdmFyaWFibGVzIHVzZWQgYnkgdGhlIGZ1bmN0aW9uIChpbmNsdWRpbmcgYXJndW1lbnRzKTtcbiAgICAgICJjb192YXJuYW1lcyIgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiB0aGUgbG9jYWxcbiAgICAgIHZhcmlhYmxlcyAoc3RhcnRpbmcgd2l0aCB0aGUgYXJndW1lbnQgbmFtZXMpOyAiY29fY2VsbHZhcnMiIGlzIGFcbiAgICAgIHR1cGxlIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGxvY2FsIHZhcmlhYmxlcyB0aGF0IGFyZVxuICAgICAgcmVmZXJlbmNlZCBieSBuZXN0ZWQgZnVuY3Rpb25zOyAiY29fZnJlZXZhcnMiIGlzIGEgdHVwbGVcbiAgICAgIGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGZyZWUgdmFyaWFibGVzOyAiY29fY29kZSIgaXMgYSBzdHJpbmdcbiAgICAgIHJlcHJlc2VudGluZyB0aGUgc2VxdWVuY2Ugb2YgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb25zOyAiY29fY29uc3RzIlxuICAgICAgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBsaXRlcmFscyB1c2VkIGJ5IHRoZSBieXRlY29kZTtcbiAgICAgICJjb19uYW1lcyIgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyB1c2VkIGJ5IHRoZSBieXRlY29kZTtcbiAgICAgICJjb19maWxlbmFtZSIgaXMgdGhlIGZpbGVuYW1lIGZyb20gd2hpY2ggdGhlIGNvZGUgd2FzIGNvbXBpbGVkO1xuICAgICAgImNvX2ZpcnN0bGluZW5vIiBpcyB0aGUgZmlyc3QgbGluZSBudW1iZXIgb2YgdGhlIGZ1bmN0aW9uO1xuICAgICAgImNvX2xub3RhYiIgaXMgYSBzdHJpbmcgZW5jb2RpbmcgdGhlIG1hcHBpbmcgZnJvbSBieXRlY29kZVxuICAgICAgb2Zmc2V0cyB0byBsaW5lIG51bWJlcnMgKGZvciBkZXRhaWxzIHNlZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlXG4gICAgICBpbnRlcnByZXRlcik7ICJjb19zdGFja3NpemUiIGlzIHRoZSByZXF1aXJlZCBzdGFjayBzaXplXG4gICAgICAoaW5jbHVkaW5nIGxvY2FsIHZhcmlhYmxlcyk7ICJjb19mbGFncyIgaXMgYW4gaW50ZWdlciBlbmNvZGluZyBhXG4gICAgICBudW1iZXIgb2YgZmxhZ3MgZm9yIHRoZSBpbnRlcnByZXRlci5cblxuICAgICAgVGhlIGZvbGxvd2luZyBmbGFnIGJpdHMgYXJlIGRlZmluZWQgZm9yICJjb19mbGFncyI6IGJpdCAiMHgwNCJcbiAgICAgIGlzIHNldCBpZiB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgIiphcmd1bWVudHMiIHN5bnRheCB0byBhY2NlcHQgYW5cbiAgICAgIGFyYml0cmFyeSBudW1iZXIgb2YgcG9zaXRpb25hbCBhcmd1bWVudHM7IGJpdCAiMHgwOCIgaXMgc2V0IGlmXG4gICAgICB0aGUgZnVuY3Rpb24gdXNlcyB0aGUgIioqa2V5d29yZHMiIHN5bnRheCB0byBhY2NlcHQgYXJiaXRyYXJ5XG4gICAgICBrZXl3b3JkIGFyZ3VtZW50czsgYml0ICIweDIwIiBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIGlzIGFcbiAgICAgIGdlbmVyYXRvci5cblxuICAgICAgRnV0dXJlIGZlYXR1cmUgZGVjbGFyYXRpb25zICgiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBkaXZpc2lvbiIpXG4gICAgICBhbHNvIHVzZSBiaXRzIGluICJjb19mbGFncyIgdG8gaW5kaWNhdGUgd2hldGhlciBhIGNvZGUgb2JqZWN0XG4gICAgICB3YXMgY29tcGlsZWQgd2l0aCBhIHBhcnRpY3VsYXIgZmVhdHVyZSBlbmFibGVkOiBiaXQgIjB4MjAwMCIgaXNcbiAgICAgIHNldCBpZiB0aGUgZnVuY3Rpb24gd2FzIGNvbXBpbGVkIHdpdGggZnV0dXJlIGRpdmlzaW9uIGVuYWJsZWQ7XG4gICAgICBiaXRzICIweDEwIiBhbmQgIjB4MTAwMCIgd2VyZSB1c2VkIGluIGVhcmxpZXIgdmVyc2lvbnMgb2ZcbiAgICAgIFB5dGhvbi5cblxuICAgICAgT3RoZXIgYml0cyBpbiAiY29fZmxhZ3MiIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNlLlxuXG4gICAgICBJZiBhIGNvZGUgb2JqZWN0IHJlcHJlc2VudHMgYSBmdW5jdGlvbiwgdGhlIGZpcnN0IGl0ZW0gaW5cbiAgICAgICJjb19jb25zdHMiIGlzIHRoZSBkb2N1bWVudGF0aW9uIHN0cmluZyBvZiB0aGUgZnVuY3Rpb24sIG9yXG4gICAgICAiTm9uZSIgaWYgdW5kZWZpbmVkLlxuXG4gICBGcmFtZSBvYmplY3RzXG4gICAgICBGcmFtZSBvYmplY3RzIHJlcHJlc2VudCBleGVjdXRpb24gZnJhbWVzLiAgVGhleSBtYXkgb2NjdXIgaW5cbiAgICAgIHRyYWNlYmFjayBvYmplY3RzIChzZWUgYmVsb3cpLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiZl9iYWNrIiBpcyB0byB0aGUgcHJldmlvdXMgc3RhY2tcbiAgICAgIGZyYW1lICh0b3dhcmRzIHRoZSBjYWxsZXIpLCBvciAiTm9uZSIgaWYgdGhpcyBpcyB0aGUgYm90dG9tXG4gICAgICBzdGFjayBmcmFtZTsgImZfY29kZSIgaXMgdGhlIGNvZGUgb2JqZWN0IGJlaW5nIGV4ZWN1dGVkIGluIHRoaXNcbiAgICAgIGZyYW1lOyAiZl9sb2NhbHMiIGlzIHRoZSBkaWN0aW9uYXJ5IHVzZWQgdG8gbG9vayB1cCBsb2NhbFxuICAgICAgdmFyaWFibGVzOyAiZl9nbG9iYWxzIiBpcyB1c2VkIGZvciBnbG9iYWwgdmFyaWFibGVzO1xuICAgICAgImZfYnVpbHRpbnMiIGlzIHVzZWQgZm9yIGJ1aWx0LWluIChpbnRyaW5zaWMpIG5hbWVzOyAiZl9sYXN0aSJcbiAgICAgIGdpdmVzIHRoZSBwcmVjaXNlIGluc3RydWN0aW9uICh0aGlzIGlzIGFuIGluZGV4IGludG8gdGhlXG4gICAgICBieXRlY29kZSBzdHJpbmcgb2YgdGhlIGNvZGUgb2JqZWN0KS5cblxuICAgICAgU3BlY2lhbCB3cml0YWJsZSBhdHRyaWJ1dGVzOiAiZl90cmFjZSIsIGlmIG5vdCAiTm9uZSIsIGlzIGFcbiAgICAgIGZ1bmN0aW9uIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgY29kZSBsaW5lICh0aGlzIGlzXG4gICAgICB1c2VkIGJ5IHRoZSBkZWJ1Z2dlcik7ICJmX2xpbmVubyIgaXMgdGhlIGN1cnJlbnQgbGluZSBudW1iZXIgb2ZcbiAgICAgIHRoZSBmcmFtZSAtLS0gd3JpdGluZyB0byB0aGlzIGZyb20gd2l0aGluIGEgdHJhY2UgZnVuY3Rpb24ganVtcHNcbiAgICAgIHRvIHRoZSBnaXZlbiBsaW5lIChvbmx5IGZvciB0aGUgYm90dG9tLW1vc3QgZnJhbWUpLiAgQSBkZWJ1Z2dlclxuICAgICAgY2FuIGltcGxlbWVudCBhIEp1bXAgY29tbWFuZCAoYWthIFNldCBOZXh0IFN0YXRlbWVudCkgYnkgd3JpdGluZ1xuICAgICAgdG8gZl9saW5lbm8uXG5cbiAgIFRyYWNlYmFjayBvYmplY3RzXG4gICAgICBUcmFjZWJhY2sgb2JqZWN0cyByZXByZXNlbnQgYSBzdGFjayB0cmFjZSBvZiBhbiBleGNlcHRpb24uICBBXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0IGlzIGNyZWF0ZWQgd2hlbiBhbiBleGNlcHRpb24gb2NjdXJzLiAgV2hlbiB0aGVcbiAgICAgIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uIGhhbmRsZXIgdW53aW5kcyB0aGUgZXhlY3V0aW9uIHN0YWNrLCBhdFxuICAgICAgZWFjaCB1bndvdW5kIGxldmVsIGEgdHJhY2ViYWNrIG9iamVjdCBpcyBpbnNlcnRlZCBpbiBmcm9udCBvZlxuICAgICAgdGhlIGN1cnJlbnQgdHJhY2ViYWNrLiAgV2hlbiBhbiBleGNlcHRpb24gaGFuZGxlciBpcyBlbnRlcmVkLFxuICAgICAgdGhlIHN0YWNrIHRyYWNlIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtLiAoU2VlIHNlY3Rpb25cbiAgICAgICpUaGUgdHJ5IHN0YXRlbWVudCouKSBJdCBpcyBhY2Nlc3NpYmxlIGFzIHRoZSB0aGlyZCBpdGVtIG9mIHRoZVxuICAgICAgdHVwbGUgcmV0dXJuZWQgYnkgInN5cy5leGNfaW5mbygpIi4gV2hlbiB0aGUgcHJvZ3JhbSBjb250YWlucyBub1xuICAgICAgc3VpdGFibGUgaGFuZGxlciwgdGhlIHN0YWNrIHRyYWNlIGlzIHdyaXR0ZW4gKG5pY2VseSBmb3JtYXR0ZWQpXG4gICAgICB0byB0aGUgc3RhbmRhcmQgZXJyb3Igc3RyZWFtOyBpZiB0aGUgaW50ZXJwcmV0ZXIgaXMgaW50ZXJhY3RpdmUsXG4gICAgICBpdCBpcyBhbHNvIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGFzICJzeXMubGFzdF90cmFjZWJhY2siLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAidGJfbmV4dCIgaXMgdGhlIG5leHQgbGV2ZWwgaW4gdGhlXG4gICAgICBzdGFjayB0cmFjZSAodG93YXJkcyB0aGUgZnJhbWUgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCksIG9yXG4gICAgICAiTm9uZSIgaWYgdGhlcmUgaXMgbm8gbmV4dCBsZXZlbDsgInRiX2ZyYW1lIiBwb2ludHMgdG8gdGhlXG4gICAgICBleGVjdXRpb24gZnJhbWUgb2YgdGhlIGN1cnJlbnQgbGV2ZWw7ICJ0Yl9saW5lbm8iIGdpdmVzIHRoZSBsaW5lXG4gICAgICBudW1iZXIgd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZDsgInRiX2xhc3RpIiBpbmRpY2F0ZXMgdGhlXG4gICAgICBwcmVjaXNlIGluc3RydWN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIGFuZCBsYXN0IGluc3RydWN0aW9uIGluXG4gICAgICB0aGUgdHJhY2ViYWNrIG1heSBkaWZmZXIgZnJvbSB0aGUgbGluZSBudW1iZXIgb2YgaXRzIGZyYW1lXG4gICAgICBvYmplY3QgaWYgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZCBpbiBhICJ0cnkiIHN0YXRlbWVudCB3aXRoIG5vXG4gICAgICBtYXRjaGluZyBleGNlcHQgY2xhdXNlIG9yIHdpdGggYSBmaW5hbGx5IGNsYXVzZS5cblxuICAgU2xpY2Ugb2JqZWN0c1xuICAgICAgU2xpY2Ugb2JqZWN0cyBhcmUgdXNlZCB0byByZXByZXNlbnQgc2xpY2VzIGZvciAiX19nZXRpdGVtX18oKSJcbiAgICAgIG1ldGhvZHMuICBUaGV5IGFyZSBhbHNvIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluICJzbGljZSgpIlxuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZXM6ICJzdGFydCIgaXMgdGhlIGxvd2VyIGJvdW5kOyAic3RvcCJcbiAgICAgIGlzIHRoZSB1cHBlciBib3VuZDsgInN0ZXAiIGlzIHRoZSBzdGVwIHZhbHVlOyBlYWNoIGlzICJOb25lIiBpZlxuICAgICAgb21pdHRlZC4gIFRoZXNlIGF0dHJpYnV0ZXMgY2FuIGhhdmUgYW55IHR5cGUuXG5cbiAgICAgIFNsaWNlIG9iamVjdHMgc3VwcG9ydCBvbmUgbWV0aG9kOlxuXG4gICAgICBzbGljZS5pbmRpY2VzKHNlbGYsIGxlbmd0aClcblxuICAgICAgICAgVGhpcyBtZXRob2QgdGFrZXMgYSBzaW5nbGUgaW50ZWdlciBhcmd1bWVudCAqbGVuZ3RoKiBhbmRcbiAgICAgICAgIGNvbXB1dGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzbGljZSB0aGF0IHRoZSBzbGljZSBvYmplY3RcbiAgICAgICAgIHdvdWxkIGRlc2NyaWJlIGlmIGFwcGxpZWQgdG8gYSBzZXF1ZW5jZSBvZiAqbGVuZ3RoKiBpdGVtcy5cbiAgICAgICAgIEl0IHJldHVybnMgYSB0dXBsZSBvZiB0aHJlZSBpbnRlZ2VyczsgcmVzcGVjdGl2ZWx5IHRoZXNlIGFyZVxuICAgICAgICAgdGhlICpzdGFydCogYW5kICpzdG9wKiBpbmRpY2VzIGFuZCB0aGUgKnN0ZXAqIG9yIHN0cmlkZVxuICAgICAgICAgbGVuZ3RoIG9mIHRoZSBzbGljZS4gTWlzc2luZyBvciBvdXQtb2YtYm91bmRzIGluZGljZXMgYXJlXG4gICAgICAgICBoYW5kbGVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCByZWd1bGFyIHNsaWNlcy5cblxuICAgU3RhdGljIG1ldGhvZCBvYmplY3RzXG4gICAgICBTdGF0aWMgbWV0aG9kIG9iamVjdHMgcHJvdmlkZSBhIHdheSBvZiBkZWZlYXRpbmcgdGhlXG4gICAgICB0cmFuc2Zvcm1hdGlvbiBvZiBmdW5jdGlvbiBvYmplY3RzIHRvIG1ldGhvZCBvYmplY3RzIGRlc2NyaWJlZFxuICAgICAgYWJvdmUuIEEgc3RhdGljIG1ldGhvZCBvYmplY3QgaXMgYSB3cmFwcGVyIGFyb3VuZCBhbnkgb3RoZXJcbiAgICAgIG9iamVjdCwgdXN1YWxseSBhIHVzZXItZGVmaW5lZCBtZXRob2Qgb2JqZWN0LiBXaGVuIGEgc3RhdGljXG4gICAgICBtZXRob2Qgb2JqZWN0IGlzIHJldHJpZXZlZCBmcm9tIGEgY2xhc3Mgb3IgYSBjbGFzcyBpbnN0YW5jZSwgdGhlXG4gICAgICBvYmplY3QgYWN0dWFsbHkgcmV0dXJuZWQgaXMgdGhlIHdyYXBwZWQgb2JqZWN0LCB3aGljaCBpcyBub3RcbiAgICAgIHN1YmplY3QgdG8gYW55IGZ1cnRoZXIgdHJhbnNmb3JtYXRpb24uIFN0YXRpYyBtZXRob2Qgb2JqZWN0cyBhcmVcbiAgICAgIG5vdCB0aGVtc2VsdmVzIGNhbGxhYmxlLCBhbHRob3VnaCB0aGUgb2JqZWN0cyB0aGV5IHdyYXAgdXN1YWxseVxuICAgICAgYXJlLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICAic3RhdGljbWV0aG9kKCkiIGNvbnN0cnVjdG9yLlxuXG4gICBDbGFzcyBtZXRob2Qgb2JqZWN0c1xuICAgICAgQSBjbGFzcyBtZXRob2Qgb2JqZWN0LCBsaWtlIGEgc3RhdGljIG1ldGhvZCBvYmplY3QsIGlzIGEgd3JhcHBlclxuICAgICAgYXJvdW5kIGFub3RoZXIgb2JqZWN0IHRoYXQgYWx0ZXJzIHRoZSB3YXkgaW4gd2hpY2ggdGhhdCBvYmplY3RcbiAgICAgIGlzIHJldHJpZXZlZCBmcm9tIGNsYXNzZXMgYW5kIGNsYXNzIGluc3RhbmNlcy4gVGhlIGJlaGF2aW91ciBvZlxuICAgICAgY2xhc3MgbWV0aG9kIG9iamVjdHMgdXBvbiBzdWNoIHJldHJpZXZhbCBpcyBkZXNjcmliZWQgYWJvdmUsXG4gICAgICB1bmRlciAiVXNlci1kZWZpbmVkIG1ldGhvZHMiLiBDbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgY3JlYXRlZFxuICAgICAgYnkgdGhlIGJ1aWx0LWluICJjbGFzc21ldGhvZCgpIiBjb25zdHJ1Y3Rvci5cbicsCi0gJ3R5cGVzZnVuY3Rpb25zJzogJ1xuRnVuY3Rpb25zXG4qKioqKioqKipcblxuRnVuY3Rpb24gb2JqZWN0cyBhcmUgY3JlYXRlZCBieSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gIFRoZSBvbmx5XG5vcGVyYXRpb24gb24gYSBmdW5jdGlvbiBvYmplY3QgaXMgdG8gY2FsbCBpdDogImZ1bmMoYXJndW1lbnQtbGlzdCkiLlxuXG5UaGVyZSBhcmUgcmVhbGx5IHR3byBmbGF2b3JzIG9mIGZ1bmN0aW9uIG9iamVjdHM6IGJ1aWx0LWluIGZ1bmN0aW9uc1xuYW5kIHVzZXItZGVmaW5lZCBmdW5jdGlvbnMuICBCb3RoIHN1cHBvcnQgdGhlIHNhbWUgb3BlcmF0aW9uICh0byBjYWxsXG50aGUgZnVuY3Rpb24pLCBidXQgdGhlIGltcGxlbWVudGF0aW9uIGlzIGRpZmZlcmVudCwgaGVuY2UgdGhlXG5kaWZmZXJlbnQgb2JqZWN0IHR5cGVzLlxuXG5TZWUgKkZ1bmN0aW9uIGRlZmluaXRpb25zKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCi0gJ3R5cGVzbWFwcGluZyc6ICdcbk1hcHBpbmcgVHlwZXMgLS0tICJkaWN0IlxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKm1hcHBpbmcqIG9iamVjdCBtYXBzICpoYXNoYWJsZSogdmFsdWVzIHRvIGFyYml0cmFyeSBvYmplY3RzLlxuTWFwcGluZ3MgYXJlIG11dGFibGUgb2JqZWN0cy4gIFRoZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBzdGFuZGFyZFxubWFwcGluZyB0eXBlLCB0aGUgKmRpY3Rpb25hcnkqLiAgKEZvciBvdGhlciBjb250YWluZXJzIHNlZSB0aGUgYnVpbHQtXG5pbiAibGlzdCIsICJzZXQiLCBhbmQgInR1cGxlIiBjbGFzc2VzLCBhbmQgdGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlLilcblxuQSBkaWN0aW9uYXJ5XCdzIGtleXMgYXJlICphbG1vc3QqIGFyYml0cmFyeSB2YWx1ZXMuICBWYWx1ZXMgdGhhdCBhcmVcbm5vdCAqaGFzaGFibGUqLCB0aGF0IGlzLCB2YWx1ZXMgY29udGFpbmluZyBsaXN0cywgZGljdGlvbmFyaWVzIG9yXG5vdGhlciBtdXRhYmxlIHR5cGVzICh0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbmlkZW50aXR5KSBtYXkgbm90IGJlIHVzZWQgYXMga2V5cy4gIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5XG50aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWxcbihzdWNoIGFzICIxIiBhbmQgIjEuMCIpIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXhcbnRoZSBzYW1lIGRpY3Rpb25hcnkgZW50cnkuICAoTm90ZSBob3dldmVyLCB0aGF0IHNpbmNlIGNvbXB1dGVycyBzdG9yZVxuZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcyBhcHByb3hpbWF0aW9ucyBpdCBpcyB1c3VhbGx5IHVud2lzZSB0byB1c2VcbnRoZW0gYXMgZGljdGlvbmFyeSBrZXlzLilcblxuRGljdGlvbmFyaWVzIGNhbiBiZSBjcmVhdGVkIGJ5IHBsYWNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiAia2V5OlxudmFsdWUiIHBhaXJzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiAie1wnamFja1wnOiA0MDk4LCBcJ3Nqb2VyZFwnOlxuNDEyN30iIG9yICJ7NDA5ODogXCdqYWNrXCcsIDQxMjc6IFwnc2pvZXJkXCd9Iiwgb3IgYnkgdGhlICJkaWN0IlxuY29uc3RydWN0b3IuXG5cbmNsYXNzIGNsYXNzIGRpY3QoKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QobWFwcGluZywgKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QoaXRlcmFibGUsICoqa3dhcmcpXG5cbiAgIFJldHVybiBhIG5ldyBkaWN0aW9uYXJ5IGluaXRpYWxpemVkIGZyb20gYW4gb3B0aW9uYWwgcG9zaXRpb25hbFxuICAgYXJndW1lbnQgYW5kIGEgcG9zc2libHkgZW1wdHkgc2V0IG9mIGtleXdvcmQgYXJndW1lbnRzLlxuXG4gICBJZiBubyBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuLCBhbiBlbXB0eSBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQuXG4gICBJZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4gYW5kIGl0IGlzIGEgbWFwcGluZyBvYmplY3QsIGFcbiAgIGRpY3Rpb25hcnkgaXMgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIGtleS12YWx1ZSBwYWlycyBhcyB0aGUgbWFwcGluZ1xuICAgb2JqZWN0LiAgT3RoZXJ3aXNlLCB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGFuICppdGVyYXRvcipcbiAgIG9iamVjdC4gIEVhY2ggaXRlbSBpbiB0aGUgaXRlcmFibGUgbXVzdCBpdHNlbGYgYmUgYW4gaXRlcmF0b3Igd2l0aFxuICAgZXhhY3RseSB0d28gb2JqZWN0cy4gIFRoZSBmaXJzdCBvYmplY3Qgb2YgZWFjaCBpdGVtIGJlY29tZXMgYSBrZXlcbiAgIGluIHRoZSBuZXcgZGljdGlvbmFyeSwgYW5kIHRoZSBzZWNvbmQgb2JqZWN0IHRoZSBjb3JyZXNwb25kaW5nXG4gICB2YWx1ZS4gIElmIGEga2V5IG9jY3VycyBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3QgdmFsdWUgZm9yIHRoYXQga2V5XG4gICBiZWNvbWVzIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBuZXcgZGljdGlvbmFyeS5cblxuICAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGUga2V5d29yZCBhcmd1bWVudHMgYW5kIHRoZWlyXG4gICB2YWx1ZXMgYXJlIGFkZGVkIHRvIHRoZSBkaWN0aW9uYXJ5IGNyZWF0ZWQgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuICBJZiBhIGtleSBiZWluZyBhZGRlZCBpcyBhbHJlYWR5IHByZXNlbnQsIHRoZSB2YWx1ZSBmcm9tXG4gICB0aGUga2V5d29yZCBhcmd1bWVudCByZXBsYWNlcyB0aGUgdmFsdWUgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuXG5cbiAgIFRvIGlsbHVzdHJhdGUsIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgYWxsIHJldHVybiBhIGRpY3Rpb25hcnkgZXF1YWxcbiAgIHRvICJ7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfSI6XG5cbiAgICAgID4+PiBhID0gZGljdChvbmU9MSwgdHdvPTIsIHRocmVlPTMpXG4gICAgICA+Pj4gYiA9IHtcJ29uZVwnOiAxLCBcJ3R3b1wnOiAyLCBcJ3RocmVlXCc6IDN9XG4gICAgICA+Pj4gYyA9IGRpY3QoemlwKFtcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCddLCBbMSwgMiwgM10pKVxuICAgICAgPj4+IGQgPSBkaWN0KFsoXCd0d29cJywgMiksIChcJ29uZVwnLCAxKSwgKFwndGhyZWVcJywgMyldKVxuICAgICAgPj4+IGUgPSBkaWN0KHtcJ3RocmVlXCc6IDMsIFwnb25lXCc6IDEsIFwndHdvXCc6IDJ9KVxuICAgICAgPj4+IGEgPT0gYiA9PSBjID09IGQgPT0gZVxuICAgICAgVHJ1ZVxuXG4gICBQcm92aWRpbmcga2V5d29yZCBhcmd1bWVudHMgYXMgaW4gdGhlIGZpcnN0IGV4YW1wbGUgb25seSB3b3JrcyBmb3JcbiAgIGtleXMgdGhhdCBhcmUgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzLiAgT3RoZXJ3aXNlLCBhbnkgdmFsaWQga2V5c1xuICAgY2FuIGJlIHVzZWQuXG5cbiAgIFRoZXNlIGFyZSB0aGUgb3BlcmF0aW9ucyB0aGF0IGRpY3Rpb25hcmllcyBzdXBwb3J0IChhbmQgdGhlcmVmb3JlLFxuICAgY3VzdG9tIG1hcHBpbmcgdHlwZXMgc2hvdWxkIHN1cHBvcnQgdG9vKTpcblxuICAgbGVuKGQpXG5cbiAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBkaWN0aW9uYXJ5ICpkKi5cblxuICAgZFtrZXldXG5cbiAgICAgIFJldHVybiB0aGUgaXRlbSBvZiAqZCogd2l0aCBrZXkgKmtleSouICBSYWlzZXMgYSAiS2V5RXJyb3IiIGlmXG4gICAgICAqa2V5KiBpcyBub3QgaW4gdGhlIG1hcC5cblxuICAgICAgSWYgYSBzdWJjbGFzcyBvZiBkaWN0IGRlZmluZXMgYSBtZXRob2QgIl9fbWlzc2luZ19fKCkiLCBpZiB0aGVcbiAgICAgIGtleSAqa2V5KiBpcyBub3QgcHJlc2VudCwgdGhlICJkW2tleV0iIG9wZXJhdGlvbiBjYWxscyB0aGF0XG4gICAgICBtZXRob2Qgd2l0aCB0aGUga2V5ICprZXkqIGFzIGFyZ3VtZW50LiAgVGhlICJkW2tleV0iIG9wZXJhdGlvblxuICAgICAgdGhlbiByZXR1cm5zIG9yIHJhaXNlcyB3aGF0ZXZlciBpcyByZXR1cm5lZCBvciByYWlzZWQgYnkgdGhlXG4gICAgICAiX19taXNzaW5nX18oa2V5KSIgY2FsbCBpZiB0aGUga2V5IGlzIG5vdCBwcmVzZW50LiBObyBvdGhlclxuICAgICAgb3BlcmF0aW9ucyBvciBtZXRob2RzIGludm9rZSAiX19taXNzaW5nX18oKSIuIElmICJfX21pc3NpbmdfXygpIlxuICAgICAgaXMgbm90IGRlZmluZWQsICJLZXlFcnJvciIgaXMgcmFpc2VkLiAiX19taXNzaW5nX18oKSIgbXVzdCBiZSBhXG4gICAgICBtZXRob2Q7IGl0IGNhbm5vdCBiZSBhbiBpbnN0YW5jZSB2YXJpYWJsZTpcblxuICAgICAgICAgPj4+IGNsYXNzIENvdW50ZXIoZGljdCk6XG4gICAgICAgICAuLi4gICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOlxuICAgICAgICAgLi4uICAgICAgICAgcmV0dXJuIDBcbiAgICAgICAgID4+PiBjID0gQ291bnRlcigpXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXVxuICAgICAgICAgMFxuICAgICAgICAgPj4+IGNbXCdyZWRcJ10gKz0gMVxuICAgICAgICAgPj4+IGNbXCdyZWRcJ11cbiAgICAgICAgIDFcblxuICAgICAgU2VlICJjb2xsZWN0aW9ucy5Db3VudGVyIiBmb3IgYSBjb21wbGV0ZSBpbXBsZW1lbnRhdGlvblxuICAgICAgaW5jbHVkaW5nIG90aGVyIG1ldGhvZHMgaGVscGZ1bCBmb3IgYWNjdW11bGF0aW5nIGFuZCBtYW5hZ2luZ1xuICAgICAgdGFsbGllcy5cblxuICAgZFtrZXldID0gdmFsdWVcblxuICAgICAgU2V0ICJkW2tleV0iIHRvICp2YWx1ZSouXG5cbiAgIGRlbCBkW2tleV1cblxuICAgICAgUmVtb3ZlICJkW2tleV0iIGZyb20gKmQqLiAgUmFpc2VzIGEgIktleUVycm9yIiBpZiAqa2V5KiBpcyBub3RcbiAgICAgIGluIHRoZSBtYXAuXG5cbiAgIGtleSBpbiBkXG5cbiAgICAgIFJldHVybiAiVHJ1ZSIgaWYgKmQqIGhhcyBhIGtleSAqa2V5KiwgZWxzZSAiRmFsc2UiLlxuXG4gICBrZXkgbm90IGluIGRcblxuICAgICAgRXF1aXZhbGVudCB0byAibm90IGtleSBpbiBkIi5cblxuICAgaXRlcihkKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cyBvZiB0aGUgZGljdGlvbmFyeS4gIFRoaXMgaXMgYVxuICAgICAgc2hvcnRjdXQgZm9yICJpdGVyKGQua2V5cygpKSIuXG5cbiAgIGNsZWFyKClcblxuICAgICAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjb3B5KClcblxuICAgICAgUmV0dXJuIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjbGFzc21ldGhvZCBmcm9ta2V5cyhzZXFbLCB2YWx1ZV0pXG5cbiAgICAgIENyZWF0ZSBhIG5ldyBkaWN0aW9uYXJ5IHdpdGgga2V5cyBmcm9tICpzZXEqIGFuZCB2YWx1ZXMgc2V0IHRvXG4gICAgICAqdmFsdWUqLlxuXG4gICAgICAiZnJvbWtleXMoKSIgaXMgYSBjbGFzcyBtZXRob2QgdGhhdCByZXR1cm5zIGEgbmV3IGRpY3Rpb25hcnkuXG4gICAgICAqdmFsdWUqIGRlZmF1bHRzIHRvICJOb25lIi5cblxuICAgZ2V0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBSZXR1cm4gdGhlIHZhbHVlIGZvciAqa2V5KiBpZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgZWxzZVxuICAgICAgKmRlZmF1bHQqLiBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byAiTm9uZSIsIHNvXG4gICAgICB0aGF0IHRoaXMgbWV0aG9kIG5ldmVyIHJhaXNlcyBhICJLZXlFcnJvciIuXG5cbiAgIGl0ZW1zKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgaXRlbXMgKCIoa2V5LCB2YWx1ZSkiXG4gICAgICBwYWlycykuIFNlZSB0aGUgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAga2V5cygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGtleXMuICBTZWUgdGhlXG4gICAgICAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG4gICBwb3Aoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZW1vdmUgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUsXG4gICAgICBlbHNlIHJldHVybiAqZGVmYXVsdCouICBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuIGFuZCAqa2V5KiBpc1xuICAgICAgbm90IGluIHRoZSBkaWN0aW9uYXJ5LCBhICJLZXlFcnJvciIgaXMgcmFpc2VkLlxuXG4gICBwb3BpdGVtKClcblxuICAgICAgUmVtb3ZlIGFuZCByZXR1cm4gYW4gYXJiaXRyYXJ5ICIoa2V5LCB2YWx1ZSkiIHBhaXIgZnJvbSB0aGVcbiAgICAgIGRpY3Rpb25hcnkuXG5cbiAgICAgICJwb3BpdGVtKCkiIGlzIHVzZWZ1bCB0byBkZXN0cnVjdGl2ZWx5IGl0ZXJhdGUgb3ZlciBhXG4gICAgICBkaWN0aW9uYXJ5LCBhcyBvZnRlbiB1c2VkIGluIHNldCBhbGdvcml0aG1zLiAgSWYgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIGVtcHR5LCBjYWxsaW5nICJwb3BpdGVtKCkiIHJhaXNlcyBhICJLZXlFcnJvciIuXG5cbiAgIHNldGRlZmF1bHQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZXR1cm4gaXRzIHZhbHVlLiAgSWYgbm90LCBpbnNlcnRcbiAgICAgICprZXkqIHdpdGggYSB2YWx1ZSBvZiAqZGVmYXVsdCogYW5kIHJldHVybiAqZGVmYXVsdCouICAqZGVmYXVsdCpcbiAgICAgIGRlZmF1bHRzIHRvICJOb25lIi5cblxuICAgdXBkYXRlKFtvdGhlcl0pXG5cbiAgICAgIFVwZGF0ZSB0aGUgZGljdGlvbmFyeSB3aXRoIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSAqb3RoZXIqLFxuICAgICAgb3ZlcndyaXRpbmcgZXhpc3Rpbmcga2V5cy4gIFJldHVybiAiTm9uZSIuXG5cbiAgICAgICJ1cGRhdGUoKSIgYWNjZXB0cyBlaXRoZXIgYW5vdGhlciBkaWN0aW9uYXJ5IG9iamVjdCBvciBhblxuICAgICAgaXRlcmFibGUgb2Yga2V5L3ZhbHVlIHBhaXJzIChhcyB0dXBsZXMgb3Igb3RoZXIgaXRlcmFibGVzIG9mXG4gICAgICBsZW5ndGggdHdvKS4gIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyB0aGVuIHVwZGF0ZWQgd2l0aCB0aG9zZSBrZXkvdmFsdWUgcGFpcnM6ICJkLnVwZGF0ZShyZWQ9MSxcbiAgICAgIGJsdWU9MikiLlxuXG4gICB2YWx1ZXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyB2YWx1ZXMuICBTZWUgdGhlXG4gICAgICAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG5TZWUgYWxzbzogInR5cGVzLk1hcHBpbmdQcm94eVR5cGUiIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHJlYWQtb25seVxuICB2aWV3IG9mIGEgImRpY3QiLlxuXG5cbkRpY3Rpb25hcnkgdmlldyBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb2JqZWN0cyByZXR1cm5lZCBieSAiZGljdC5rZXlzKCkiLCAiZGljdC52YWx1ZXMoKSIgYW5kXG4iZGljdC5pdGVtcygpIiBhcmUgKnZpZXcgb2JqZWN0cyouICBUaGV5IHByb3ZpZGUgYSBkeW5hbWljIHZpZXcgb24gdGhlXG5kaWN0aW9uYXJ5XCdzIGVudHJpZXMsIHdoaWNoIG1lYW5zIHRoYXQgd2hlbiB0aGUgZGljdGlvbmFyeSBjaGFuZ2VzLFxudGhlIHZpZXcgcmVmbGVjdHMgdGhlc2UgY2hhbmdlcy5cblxuRGljdGlvbmFyeSB2aWV3cyBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB0byB5aWVsZCB0aGVpciByZXNwZWN0aXZlIGRhdGEsXG5hbmQgc3VwcG9ydCBtZW1iZXJzaGlwIHRlc3RzOlxuXG5sZW4oZGljdHZpZXcpXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbml0ZXIoZGljdHZpZXcpXG5cbiAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzLCB2YWx1ZXMgb3IgaXRlbXMgKHJlcHJlc2VudGVkIGFzXG4gICB0dXBsZXMgb2YgIihrZXksIHZhbHVlKSIpIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBLZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyIHdoaWNoIGlzXG4gICBub24tcmFuZG9tLCB2YXJpZXMgYWNyb3NzIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBkZXBlbmRzIG9uXG4gICB0aGUgZGljdGlvbmFyeVwncyBoaXN0b3J5IG9mIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gSWYga2V5cyxcbiAgIHZhbHVlcyBhbmQgaXRlbXMgdmlld3MgYXJlIGl0ZXJhdGVkIG92ZXIgd2l0aCBubyBpbnRlcnZlbmluZ1xuICAgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGljdGlvbmFyeSwgdGhlIG9yZGVyIG9mIGl0ZW1zIHdpbGwgZGlyZWN0bHlcbiAgIGNvcnJlc3BvbmQuICBUaGlzIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgIih2YWx1ZSwga2V5KSIgcGFpcnMgdXNpbmdcbiAgICJ6aXAoKSI6ICJwYWlycyA9IHppcChkLnZhbHVlcygpLCBkLmtleXMoKSkiLiAgQW5vdGhlciB3YXkgdG9cbiAgIGNyZWF0ZSB0aGUgc2FtZSBsaXN0IGlzICJwYWlycyA9IFsodiwgaykgZm9yIChrLCB2KSBpbiBkLml0ZW1zKCldIi5cblxuICAgSXRlcmF0aW5nIHZpZXdzIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5XG4gICBtYXkgcmFpc2UgYSAiUnVudGltZUVycm9yIiBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcy5cblxueCBpbiBkaWN0dmlld1xuXG4gICBSZXR1cm4gIlRydWUiIGlmICp4KiBpcyBpbiB0aGUgdW5kZXJseWluZyBkaWN0aW9uYXJ5XCdzIGtleXMsIHZhbHVlc1xuICAgb3IgaXRlbXMgKGluIHRoZSBsYXR0ZXIgY2FzZSwgKngqIHNob3VsZCBiZSBhICIoa2V5LCB2YWx1ZSkiXG4gICB0dXBsZSkuXG5cbktleXMgdmlld3MgYXJlIHNldC1saWtlIHNpbmNlIHRoZWlyIGVudHJpZXMgYXJlIHVuaXF1ZSBhbmQgaGFzaGFibGUuXG5JZiBhbGwgdmFsdWVzIGFyZSBoYXNoYWJsZSwgc28gdGhhdCAiKGtleSwgdmFsdWUpIiBwYWlycyBhcmUgdW5pcXVlXG5hbmQgaGFzaGFibGUsIHRoZW4gdGhlIGl0ZW1zIHZpZXcgaXMgYWxzbyBzZXQtbGlrZS4gIChWYWx1ZXMgdmlld3MgYXJlXG5ub3QgdHJlYXRlZCBhcyBzZXQtbGlrZSBzaW5jZSB0aGUgZW50cmllcyBhcmUgZ2VuZXJhbGx5IG5vdCB1bmlxdWUuKVxuRm9yIHNldC1saWtlIHZpZXdzLCBhbGwgb2YgdGhlIG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIGFic3RyYWN0XG5iYXNlIGNsYXNzICJjb2xsZWN0aW9ucy5hYmMuU2V0IiBhcmUgYXZhaWxhYmxlIChmb3IgZXhhbXBsZSwgIj09IixcbiI8Iiwgb3IgIl4iKS5cblxuQW4gZXhhbXBsZSBvZiBkaWN0aW9uYXJ5IHZpZXcgdXNhZ2U6XG5cbiAgID4+PiBkaXNoZXMgPSB7XCdlZ2dzXCc6IDIsIFwnc2F1c2FnZVwnOiAxLCBcJ2JhY29uXCc6IDEsIFwnc3BhbVwnOiA1MDB9XG4gICA+Pj4ga2V5cyA9IGRpc2hlcy5rZXlzKClcbiAgID4+PiB2YWx1ZXMgPSBkaXNoZXMudmFsdWVzKClcblxuICAgPj4+ICMgaXRlcmF0aW9uXG4gICA+Pj4gbiA9IDBcbiAgID4+PiBmb3IgdmFsIGluIHZhbHVlczpcbiAgIC4uLiAgICAgbiArPSB2YWxcbiAgID4+PiBwcmludChuKVxuICAgNTA0XG5cbiAgID4+PiAjIGtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiB0aGUgc2FtZSBvcmRlclxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NhdXNhZ2VcJywgXCdzcGFtXCddXG4gICA+Pj4gbGlzdCh2YWx1ZXMpXG4gICBbMiwgMSwgMSwgNTAwXVxuXG4gICA+Pj4gIyB2aWV3IG9iamVjdHMgYXJlIGR5bmFtaWMgYW5kIHJlZmxlY3QgZGljdCBjaGFuZ2VzXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ2VnZ3NcJ11cbiAgID4+PiBkZWwgZGlzaGVzW1wnc2F1c2FnZVwnXVxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ3NwYW1cJywgXCdiYWNvblwnXVxuXG4gICA+Pj4gIyBzZXQgb3BlcmF0aW9uc1xuICAgPj4+IGtleXMgJiB7XCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYWxhZFwnfVxuICAge1wnYmFjb25cJ31cbiAgID4+PiBrZXlzIF4ge1wnc2F1c2FnZVwnLCBcJ2p1aWNlXCd9XG4gICB7XCdqdWljZVwnLCBcJ3NhdXNhZ2VcJywgXCdiYWNvblwnLCBcJ3NwYW1cJ31cbicsCi0gJ3R5cGVzbWV0aG9kcyc6ICdcbk1ldGhvZHNcbioqKioqKipcblxuTWV0aG9kcyBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNhbGxlZCB1c2luZyB0aGUgYXR0cmlidXRlIG5vdGF0aW9uLlxuVGhlcmUgYXJlIHR3byBmbGF2b3JzOiBidWlsdC1pbiBtZXRob2RzIChzdWNoIGFzICJhcHBlbmQoKSIgb24gbGlzdHMpXG5hbmQgY2xhc3MgaW5zdGFuY2UgbWV0aG9kcy4gIEJ1aWx0LWluIG1ldGhvZHMgYXJlIGRlc2NyaWJlZCB3aXRoIHRoZVxudHlwZXMgdGhhdCBzdXBwb3J0IHRoZW0uXG5cbklmIHlvdSBhY2Nlc3MgYSBtZXRob2QgKGEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhIGNsYXNzIG5hbWVzcGFjZSlcbnRocm91Z2ggYW4gaW5zdGFuY2UsIHlvdSBnZXQgYSBzcGVjaWFsIG9iamVjdDogYSAqYm91bmQgbWV0aG9kKiAoYWxzb1xuY2FsbGVkICppbnN0YW5jZSBtZXRob2QqKSBvYmplY3QuIFdoZW4gY2FsbGVkLCBpdCB3aWxsIGFkZCB0aGUgInNlbGYiXG5hcmd1bWVudCB0byB0aGUgYXJndW1lbnQgbGlzdC4gIEJvdW5kIG1ldGhvZHMgaGF2ZSB0d28gc3BlY2lhbCByZWFkLVxub25seSBhdHRyaWJ1dGVzOiAibS5fX3NlbGZfXyIgaXMgdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kXG5vcGVyYXRlcywgYW5kICJtLl9fZnVuY19fIiBpcyB0aGUgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHRoZSBtZXRob2QuXG5DYWxsaW5nICJtKGFyZy0xLCBhcmctMiwgLi4uLCBhcmctbikiIGlzIGNvbXBsZXRlbHkgZXF1aXZhbGVudCB0b1xuY2FsbGluZyAibS5fX2Z1bmNfXyhtLl9fc2VsZl9fLCBhcmctMSwgYXJnLTIsIC4uLiwgYXJnLW4pIi5cblxuTGlrZSBmdW5jdGlvbiBvYmplY3RzLCBib3VuZCBtZXRob2Qgb2JqZWN0cyBzdXBwb3J0IGdldHRpbmcgYXJiaXRyYXJ5XG5hdHRyaWJ1dGVzLiAgSG93ZXZlciwgc2luY2UgbWV0aG9kIGF0dHJpYnV0ZXMgYXJlIGFjdHVhbGx5IHN0b3JlZCBvblxudGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gb2JqZWN0ICgibWV0aC5fX2Z1bmNfXyIpLCBzZXR0aW5nIG1ldGhvZFxuYXR0cmlidXRlcyBvbiBib3VuZCBtZXRob2RzIGlzIGRpc2FsbG93ZWQuICBBdHRlbXB0aW5nIHRvIHNldCBhblxuYXR0cmlidXRlIG9uIGEgbWV0aG9kIHJlc3VsdHMgaW4gYW4gIkF0dHJpYnV0ZUVycm9yIiBiZWluZyByYWlzZWQuICBJblxub3JkZXIgdG8gc2V0IGEgbWV0aG9kIGF0dHJpYnV0ZSwgeW91IG5lZWQgdG8gZXhwbGljaXRseSBzZXQgaXQgb24gdGhlXG51bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdDpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIGRlZiBtZXRob2Qoc2VsZik6XG4gICAuLi4gICAgICAgICBwYXNzXG4gICAuLi5cbiAgID4+PiBjID0gQygpXG4gICA+Pj4gYy5tZXRob2Qud2hvYW1pID0gXCdteSBuYW1lIGlzIG1ldGhvZFwnICAjIGNhblwndCBzZXQgb24gdGhlIG1ldGhvZFxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgQXR0cmlidXRlRXJyb3I6IFwnbWV0aG9kXCcgb2JqZWN0IGhhcyBubyBhdHRyaWJ1dGUgXCd3aG9hbWlcJ1xuICAgPj4+IGMubWV0aG9kLl9fZnVuY19fLndob2FtaSA9IFwnbXkgbmFtZSBpcyBtZXRob2RcJ1xuICAgPj4+IGMubWV0aG9kLndob2FtaVxuICAgXCdteSBuYW1lIGlzIG1ldGhvZFwnXG5cblNlZSAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCi0gJ3R5cGVzbW9kdWxlcyc6ICdcbk1vZHVsZXNcbioqKioqKipcblxuVGhlIG9ubHkgc3BlY2lhbCBvcGVyYXRpb24gb24gYSBtb2R1bGUgaXMgYXR0cmlidXRlIGFjY2VzczogIm0ubmFtZSIsXG53aGVyZSAqbSogaXMgYSBtb2R1bGUgYW5kICpuYW1lKiBhY2Nlc3NlcyBhIG5hbWUgZGVmaW5lZCBpbiAqbSpcJ3NcbnN5bWJvbCB0YWJsZS4gTW9kdWxlIGF0dHJpYnV0ZXMgY2FuIGJlIGFzc2lnbmVkIHRvLiAgKE5vdGUgdGhhdCB0aGVcbiJpbXBvcnQiIHN0YXRlbWVudCBpcyBub3QsIHN0cmljdGx5IHNwZWFraW5nLCBhbiBvcGVyYXRpb24gb24gYSBtb2R1bGVcbm9iamVjdDsgImltcG9ydCBmb28iIGRvZXMgbm90IHJlcXVpcmUgYSBtb2R1bGUgb2JqZWN0IG5hbWVkICpmb28qIHRvXG5leGlzdCwgcmF0aGVyIGl0IHJlcXVpcmVzIGFuIChleHRlcm5hbCkgKmRlZmluaXRpb24qIGZvciBhIG1vZHVsZVxubmFtZWQgKmZvbyogc29tZXdoZXJlLilcblxuQSBzcGVjaWFsIGF0dHJpYnV0ZSBvZiBldmVyeSBtb2R1bGUgaXMgIl9fZGljdF9fIi4gVGhpcyBpcyB0aGVcbmRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgbW9kdWxlXCdzIHN5bWJvbCB0YWJsZS4gTW9kaWZ5aW5nIHRoaXNcbmRpY3Rpb25hcnkgd2lsbCBhY3R1YWxseSBjaGFuZ2UgdGhlIG1vZHVsZVwncyBzeW1ib2wgdGFibGUsIGJ1dCBkaXJlY3RcbmFzc2lnbm1lbnQgdG8gdGhlICJfX2RpY3RfXyIgYXR0cmlidXRlIGlzIG5vdCBwb3NzaWJsZSAoeW91IGNhbiB3cml0ZVxuIm0uX19kaWN0X19bXCdhXCddID0gMSIsIHdoaWNoIGRlZmluZXMgIm0uYSIgdG8gYmUgIjEiLCBidXQgeW91IGNhblwndFxud3JpdGUgIm0uX19kaWN0X18gPSB7fSIpLiAgTW9kaWZ5aW5nICJfX2RpY3RfXyIgZGlyZWN0bHkgaXMgbm90XG5yZWNvbW1lbmRlZC5cblxuTW9kdWxlcyBidWlsdCBpbnRvIHRoZSBpbnRlcnByZXRlciBhcmUgd3JpdHRlbiBsaWtlIHRoaXM6ICI8bW9kdWxlXG5cJ3N5c1wnIChidWlsdC1pbik+Ii4gIElmIGxvYWRlZCBmcm9tIGEgZmlsZSwgdGhleSBhcmUgd3JpdHRlbiBhc1xuIjxtb2R1bGUgXCdvc1wnIGZyb20gXCcvdXNyL2xvY2FsL2xpYi9weXRob25YLlkvb3MucHljXCc+Ii5cbicsCi0gJ3R5cGVzc2VxJzogJ1xuU2VxdWVuY2UgVHlwZXMgLS0tICJsaXN0IiwgInR1cGxlIiwgInJhbmdlIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGVyZSBhcmUgdGhyZWUgYmFzaWMgc2VxdWVuY2UgdHlwZXM6IGxpc3RzLCB0dXBsZXMsIGFuZCByYW5nZVxub2JqZWN0cy4gQWRkaXRpb25hbCBzZXF1ZW5jZSB0eXBlcyB0YWlsb3JlZCBmb3IgcHJvY2Vzc2luZyBvZiAqYmluYXJ5XG5kYXRhKiBhbmQgKnRleHQgc3RyaW5ncyogYXJlIGRlc2NyaWJlZCBpbiBkZWRpY2F0ZWQgc2VjdGlvbnMuXG5cblxuQ29tbW9uIFNlcXVlbmNlIE9wZXJhdGlvbnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIHN1cHBvcnRlZCBieSBtb3N0IHNlcXVlbmNlXG50eXBlcywgYm90aCBtdXRhYmxlIGFuZCBpbW11dGFibGUuIFRoZSAiY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlIiBBQkNcbmlzIHByb3ZpZGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9uc1xub24gY3VzdG9tIHNlcXVlbmNlIHR5cGVzLlxuXG5UaGlzIHRhYmxlIGxpc3RzIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHlcbihvcGVyYXRpb25zIGluIHRoZSBzYW1lIGJveCBoYXZlIHRoZSBzYW1lIHByaW9yaXR5KS4gIEluIHRoZSB0YWJsZSxcbipzKiBhbmQgKnQqIGFyZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSwgKm4qLCAqaSosICpqKiBhbmQgKmsqIGFyZVxuaW50ZWdlcnMgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kIHZhbHVlXG5yZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyouXG5cblRoZSAiaW4iIGFuZCAibm90IGluIiBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdGllcyBhcyB0aGVcbmNvbXBhcmlzb24gb3BlcmF0aW9ucy4gVGhlICIrIiAoY29uY2F0ZW5hdGlvbikgYW5kICIqIiAocmVwZXRpdGlvbilcbm9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgY29ycmVzcG9uZGluZyBudW1lcmljXG5vcGVyYXRpb25zLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58ICJ4IGluIHMiICAgICAgICAgICAgICAgICAgIHwgIlRydWUiIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgICAgfCAoMSkgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAieCBub3QgaW4gcyIgICAgICAgICAgICAgICB8ICJGYWxzZSIgaWYgYW4gaXRlbSBvZiAqcyogaXMgICAgIHwgKDEpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInMgKyB0IiAgICAgICAgICAgICAgICAgICAgfCB0aGUgY29uY2F0ZW5hdGlvbiBvZiAqcyogYW5kICp0KiB8ICg2KSg3KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzICogbiIgb3IgIm4gKiBzIiAgICAgICAgIHwgKm4qIHNoYWxsb3cgY29waWVzIG9mICpzKiAgICAgICAgfCAoMikoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAic1tpXSIgICAgICAgICAgICAgICAgICAgICB8ICppKnRoIGl0ZW0gb2YgKnMqLCBvcmlnaW4gMCAgICAgIHwgKDMpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInNbaTpqXSIgICAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzW2k6ajprXSIgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNSkgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAicy5pbmRleCh4WywgaVssIGpdXSkiICAgICB8IGluZGV4IG9mIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIHwgKDgpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xuXG5TZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSBhbHNvIHN1cHBvcnQgY29tcGFyaXNvbnMuICBJbiBwYXJ0aWN1bGFyLFxudHVwbGVzIGFuZCBsaXN0cyBhcmUgY29tcGFyZWQgbGV4aWNvZ3JhcGhpY2FsbHkgYnkgY29tcGFyaW5nXG5jb3JyZXNwb25kaW5nIGVsZW1lbnRzLiBUaGlzIG1lYW5zIHRoYXQgdG8gY29tcGFyZSBlcXVhbCwgZXZlcnlcbmVsZW1lbnQgbXVzdCBjb21wYXJlIGVxdWFsIGFuZCB0aGUgdHdvIHNlcXVlbmNlcyBtdXN0IGJlIG9mIHRoZSBzYW1lXG50eXBlIGFuZCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gIChGb3IgZnVsbCBkZXRhaWxzIHNlZSAqQ29tcGFyaXNvbnMqIGluXG50aGUgbGFuZ3VhZ2UgcmVmZXJlbmNlLilcblxuTm90ZXM6XG5cbjEuIFdoaWxlIHRoZSAiaW4iIGFuZCAibm90IGluIiBvcGVyYXRpb25zIGFyZSB1c2VkIG9ubHkgZm9yIHNpbXBsZVxuICAgY29udGFpbm1lbnQgdGVzdGluZyBpbiB0aGUgZ2VuZXJhbCBjYXNlLCBzb21lIHNwZWNpYWxpc2VkIHNlcXVlbmNlc1xuICAgKHN1Y2ggYXMgInN0ciIsICJieXRlcyIgYW5kICJieXRlYXJyYXkiKSBhbHNvIHVzZSB0aGVtIGZvclxuICAgc3Vic2VxdWVuY2UgdGVzdGluZzpcblxuICAgICAgPj4+ICJnZyIgaW4gImVnZ3MiXG4gICAgICBUcnVlXG5cbjIuIFZhbHVlcyBvZiAqbiogbGVzcyB0aGFuICIwIiBhcmUgdHJlYXRlZCBhcyAiMCIgKHdoaWNoIHlpZWxkcyBhblxuICAgZW1wdHkgc2VxdWVuY2Ugb2YgdGhlIHNhbWUgdHlwZSBhcyAqcyopLiAgTm90ZSBhbHNvIHRoYXQgdGhlIGNvcGllc1xuICAgYXJlIHNoYWxsb3c7IG5lc3RlZCBzdHJ1Y3R1cmVzIGFyZSBub3QgY29waWVkLiAgVGhpcyBvZnRlbiBoYXVudHNcbiAgIG5ldyBQeXRob24gcHJvZ3JhbW1lcnM7IGNvbnNpZGVyOlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW11dICogM1xuICAgICAgPj4+IGxpc3RzXG4gICAgICBbW10sIFtdLCBbXV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzNdLCBbM11dXG5cbiAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgIltbXV0iIGlzIGEgb25lLWVsZW1lbnQgbGlzdCBjb250YWluaW5nXG4gICBhbiBlbXB0eSBsaXN0LCBzbyBhbGwgdGhyZWUgZWxlbWVudHMgb2YgIltbXV0gKiAzIiBhcmUgKHBvaW50ZXJzXG4gICB0bykgdGhpcyBzaW5nbGUgZW1wdHkgbGlzdC4gIE1vZGlmeWluZyBhbnkgb2YgdGhlIGVsZW1lbnRzIG9mXG4gICAibGlzdHMiIG1vZGlmaWVzIHRoaXMgc2luZ2xlIGxpc3QuIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZlxuICAgZGlmZmVyZW50IGxpc3RzIHRoaXMgd2F5OlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW10gZm9yIGkgaW4gcmFuZ2UoMyldXG4gICAgICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICAgICA+Pj4gbGlzdHNbMV0uYXBwZW5kKDUpXG4gICAgICA+Pj4gbGlzdHNbMl0uYXBwZW5kKDcpXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbM10sIFs1XSwgWzddXVxuXG4zLiBJZiAqaSogb3IgKmoqIGlzIG5lZ2F0aXZlLCB0aGUgaW5kZXggaXMgcmVsYXRpdmUgdG8gdGhlIGVuZCBvZlxuICAgdGhlIHN0cmluZzogImxlbihzKSArIGkiIG9yICJsZW4ocykgKyBqIiBpcyBzdWJzdGl0dXRlZC4gIEJ1dCBub3RlXG4gICB0aGF0ICItMCIgaXMgc3RpbGwgIjAiLlxuXG40LiBUaGUgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiBpcyBkZWZpbmVkIGFzIHRoZSBzZXF1ZW5jZSBvZlxuICAgaXRlbXMgd2l0aCBpbmRleCAqayogc3VjaCB0aGF0ICJpIDw9IGsgPCBqIi4gIElmICppKiBvciAqaiogaXNcbiAgIGdyZWF0ZXIgdGhhbiAibGVuKHMpIiwgdXNlICJsZW4ocykiLiAgSWYgKmkqIGlzIG9taXR0ZWQgb3IgIk5vbmUiLFxuICAgdXNlICIwIi4gIElmICpqKiBpcyBvbWl0dGVkIG9yICJOb25lIiwgdXNlICJsZW4ocykiLiAgSWYgKmkqIGlzXG4gICBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gKmoqLCB0aGUgc2xpY2UgaXMgZW1wdHkuXG5cbjUuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIHdpdGggc3RlcCAqayogaXMgZGVmaW5lZCBhcyB0aGVcbiAgIHNlcXVlbmNlIG9mIGl0ZW1zIHdpdGggaW5kZXggICJ4ID0gaSArIG4qayIgc3VjaCB0aGF0ICIwIDw9IG4gPFxuICAgKGotaSkvayIuICBJbiBvdGhlciB3b3JkcywgdGhlIGluZGljZXMgYXJlICJpIiwgImkrayIsICJpKzIqayIsXG4gICAiaSszKmsiIGFuZCBzbyBvbiwgc3RvcHBpbmcgd2hlbiAqaiogaXMgcmVhY2hlZCAoYnV0IG5ldmVyXG4gICBpbmNsdWRpbmcgKmoqKS4gIElmICppKiBvciAqaiogaXMgZ3JlYXRlciB0aGFuICJsZW4ocykiLCB1c2VcbiAgICJsZW4ocykiLiAgSWYgKmkqIG9yICpqKiBhcmUgb21pdHRlZCBvciAiTm9uZSIsIHRoZXkgYmVjb21lICJlbmQiXG4gICB2YWx1ZXMgKHdoaWNoIGVuZCBkZXBlbmRzIG9uIHRoZSBzaWduIG9mICprKikuICBOb3RlLCAqayogY2Fubm90IGJlXG4gICB6ZXJvLiBJZiAqayogaXMgIk5vbmUiLCBpdCBpcyB0cmVhdGVkIGxpa2UgIjEiLlxuXG42LiBDb25jYXRlbmF0aW5nIGltbXV0YWJsZSBzZXF1ZW5jZXMgYWx3YXlzIHJlc3VsdHMgaW4gYSBuZXdcbiAgIG9iamVjdC4gVGhpcyBtZWFucyB0aGF0IGJ1aWxkaW5nIHVwIGEgc2VxdWVuY2UgYnkgcmVwZWF0ZWRcbiAgIGNvbmNhdGVuYXRpb24gd2lsbCBoYXZlIGEgcXVhZHJhdGljIHJ1bnRpbWUgY29zdCBpbiB0aGUgdG90YWxcbiAgIHNlcXVlbmNlIGxlbmd0aC4gVG8gZ2V0IGEgbGluZWFyIHJ1bnRpbWUgY29zdCwgeW91IG11c3Qgc3dpdGNoIHRvXG4gICBvbmUgb2YgdGhlIGFsdGVybmF0aXZlcyBiZWxvdzpcblxuICAgKiBpZiBjb25jYXRlbmF0aW5nICJzdHIiIG9iamVjdHMsIHlvdSBjYW4gYnVpbGQgYSBsaXN0IGFuZCB1c2VcbiAgICAgInN0ci5qb2luKCkiIGF0IHRoZSBlbmQgb3IgZWxzZSB3cml0ZSB0byBhICJpby5TdHJpbmdJTyIgaW5zdGFuY2VcbiAgICAgYW5kIHJldHJpZXZlIGl0cyB2YWx1ZSB3aGVuIGNvbXBsZXRlXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyAiYnl0ZXMiIG9iamVjdHMsIHlvdSBjYW4gc2ltaWxhcmx5IHVzZVxuICAgICAiYnl0ZXMuam9pbigpIiBvciAiaW8uQnl0ZXNJTyIsIG9yIHlvdSBjYW4gZG8gaW4tcGxhY2VcbiAgICAgY29uY2F0ZW5hdGlvbiB3aXRoIGEgImJ5dGVhcnJheSIgb2JqZWN0LiAgImJ5dGVhcnJheSIgb2JqZWN0cyBhcmVcbiAgICAgbXV0YWJsZSBhbmQgaGF2ZSBhbiBlZmZpY2llbnQgb3ZlcmFsbG9jYXRpb24gbWVjaGFuaXNtXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyAidHVwbGUiIG9iamVjdHMsIGV4dGVuZCBhICJsaXN0IiBpbnN0ZWFkXG5cbiAgICogZm9yIG90aGVyIHR5cGVzLCBpbnZlc3RpZ2F0ZSB0aGUgcmVsZXZhbnQgY2xhc3MgZG9jdW1lbnRhdGlvblxuXG43LiBTb21lIHNlcXVlbmNlIHR5cGVzIChzdWNoIGFzICJyYW5nZSIpIG9ubHkgc3VwcG9ydCBpdGVtXG4gICBzZXF1ZW5jZXMgdGhhdCBmb2xsb3cgc3BlY2lmaWMgcGF0dGVybnMsIGFuZCBoZW5jZSBkb25cJ3Qgc3VwcG9ydFxuICAgc2VxdWVuY2UgY29uY2F0ZW5hdGlvbiBvciByZXBldGl0aW9uLlxuXG44LiAiaW5kZXgiIHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi4gV2hlblxuICAgc3VwcG9ydGVkLCB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGluZGV4IG1ldGhvZCBhbGxvd1xuICAgZWZmaWNpZW50IHNlYXJjaGluZyBvZiBzdWJzZWN0aW9ucyBvZiB0aGUgc2VxdWVuY2UuIFBhc3NpbmcgdGhlXG4gICBleHRyYSBhcmd1bWVudHMgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIHVzaW5nICJzW2k6al0uaW5kZXgoeCkiLFxuICAgb25seSB3aXRob3V0IGNvcHlpbmcgYW55IGRhdGEgYW5kIHdpdGggdGhlIHJldHVybmVkIGluZGV4IGJlaW5nXG4gICByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlcXVlbmNlIHJhdGhlciB0aGFuIHRoZSBzdGFydCBvZiB0aGVcbiAgIHNsaWNlLlxuXG5cbkltbXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvbmx5IG9wZXJhdGlvbiB0aGF0IGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyBnZW5lcmFsbHkgaW1wbGVtZW50XG50aGF0IGlzIG5vdCBhbHNvIGltcGxlbWVudGVkIGJ5IG11dGFibGUgc2VxdWVuY2UgdHlwZXMgaXMgc3VwcG9ydCBmb3JcbnRoZSAiaGFzaCgpIiBidWlsdC1pbi5cblxuVGhpcyBzdXBwb3J0IGFsbG93cyBpbW11dGFibGUgc2VxdWVuY2VzLCBzdWNoIGFzICJ0dXBsZSIgaW5zdGFuY2VzLCB0b1xuYmUgdXNlZCBhcyAiZGljdCIga2V5cyBhbmQgc3RvcmVkIGluICJzZXQiIGFuZCAiZnJvemVuc2V0IiBpbnN0YW5jZXMuXG5cbkF0dGVtcHRpbmcgdG8gaGFzaCBhbiBpbW11dGFibGUgc2VxdWVuY2UgdGhhdCBjb250YWlucyB1bmhhc2hhYmxlXG52YWx1ZXMgd2lsbCByZXN1bHQgaW4gIlR5cGVFcnJvciIuXG5cblxuTXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBkZWZpbmVkIG9uIG11dGFibGUgc2VxdWVuY2VcbnR5cGVzLiBUaGUgImNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2UiIEFCQyBpcyBwcm92aWRlZCB0byBtYWtlXG5pdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZVxudHlwZXMuXG5cbkluIHRoZSB0YWJsZSAqcyogaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsICp0KiBpcyBhbnlcbml0ZXJhYmxlIG9iamVjdCBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmRcbnZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKiAoZm9yIGV4YW1wbGUsICJieXRlYXJyYXkiIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiAiMCA8PSB4IDw9IDI1NSIpLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzW2k6ajprXSA9IHQiICAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiAic1tpOmo6a10iIGFyZSAgIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY2xlYXIoKSIgICAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSAicyIgKHNhbWUgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNvcHkoKSIgICAgICAgICAgICAgICAgICAgICB8IGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgInMiICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucG9wKFtpXSkiICAgICAgICAgICAgICAgICAgIHwgcmV0cmlldmVzIHRoZSBpdGVtIGF0ICppKiBhbmQgICAgfCAoMikgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJlbW92ZSh4KSIgICAgICAgICAgICAgICAgICB8IHJlbW92ZSB0aGUgZmlyc3QgaXRlbSBmcm9tICpzKiAgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZXZlcnNlKCkiICAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuICp0KiBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoZSBzbGljZSBpdCBpcyByZXBsYWNpbmcuXG5cbjIuIFRoZSBvcHRpb25hbCBhcmd1bWVudCAqaSogZGVmYXVsdHMgdG8gIi0xIiwgc28gdGhhdCBieSBkZWZhdWx0XG4gICB0aGUgbGFzdCBpdGVtIGlzIHJlbW92ZWQgYW5kIHJldHVybmVkLlxuXG4zLiAicmVtb3ZlIiByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gKngqIGlzIG5vdCBmb3VuZCBpbiAqcyouXG5cbjQuIFRoZSAicmV2ZXJzZSgpIiBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvclxuICAgZWNvbm9teSBvZiBzcGFjZSB3aGVuIHJldmVyc2luZyBhIGxhcmdlIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHVzZXJzXG4gICB0aGF0IGl0IG9wZXJhdGVzIGJ5IHNpZGUgZWZmZWN0LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIHJldmVyc2VkXG4gICBzZXF1ZW5jZS5cblxuNS4gImNsZWFyKCkiIGFuZCAiY29weSgpIiBhcmUgaW5jbHVkZWQgZm9yIGNvbnNpc3RlbmN5IHdpdGggdGhlXG4gICBpbnRlcmZhY2VzIG9mIG11dGFibGUgY29udGFpbmVycyB0aGF0IGRvblwndCBzdXBwb3J0IHNsaWNpbmdcbiAgIG9wZXJhdGlvbnMgKHN1Y2ggYXMgImRpY3QiIGFuZCAic2V0IilcblxuICAgTmV3IGluIHZlcnNpb24gMy4zOiAiY2xlYXIoKSIgYW5kICJjb3B5KCkiIG1ldGhvZHMuXG5cblxuTGlzdHNcbj09PT09XG5cbkxpc3RzIGFyZSBtdXRhYmxlIHNlcXVlbmNlcywgdHlwaWNhbGx5IHVzZWQgdG8gc3RvcmUgY29sbGVjdGlvbnMgb2ZcbmhvbW9nZW5lb3VzIGl0ZW1zICh3aGVyZSB0aGUgcHJlY2lzZSBkZWdyZWUgb2Ygc2ltaWxhcml0eSB3aWxsIHZhcnkgYnlcbmFwcGxpY2F0aW9uKS5cblxuY2xhc3MgY2xhc3MgbGlzdChbaXRlcmFibGVdKVxuXG4gICBMaXN0cyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gc2V2ZXJhbCB3YXlzOlxuXG4gICAqIFVzaW5nIGEgcGFpciBvZiBzcXVhcmUgYnJhY2tldHMgdG8gZGVub3RlIHRoZSBlbXB0eSBsaXN0OiAiW10iXG5cbiAgICogVXNpbmcgc3F1YXJlIGJyYWNrZXRzLCBzZXBhcmF0aW5nIGl0ZW1zIHdpdGggY29tbWFzOiAiW2FdIixcbiAgICAgIlthLCBiLCBjXSJcblxuICAgKiBVc2luZyBhIGxpc3QgY29tcHJlaGVuc2lvbjogIlt4IGZvciB4IGluIGl0ZXJhYmxlXSJcblxuICAgKiBVc2luZyB0aGUgdHlwZSBjb25zdHJ1Y3RvcjogImxpc3QoKSIgb3IgImxpc3QoaXRlcmFibGUpIlxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgbGlzdCB3aG9zZSBpdGVtcyBhcmUgdGhlIHNhbWUgYW5kIGluIHRoZVxuICAgc2FtZSBvcmRlciBhcyAqaXRlcmFibGUqXCdzIGl0ZW1zLiAgKml0ZXJhYmxlKiBtYXkgYmUgZWl0aGVyIGFcbiAgIHNlcXVlbmNlLCBhIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3JcbiAgIG9iamVjdC4gIElmICppdGVyYWJsZSogaXMgYWxyZWFkeSBhIGxpc3QsIGEgY29weSBpcyBtYWRlIGFuZFxuICAgcmV0dXJuZWQsIHNpbWlsYXIgdG8gIml0ZXJhYmxlWzpdIi4gRm9yIGV4YW1wbGUsICJsaXN0KFwnYWJjXCcpIlxuICAgcmV0dXJucyAiW1wnYVwnLCBcJ2JcJywgXCdjXCddIiBhbmQgImxpc3QoICgxLCAyLCAzKSApIiByZXR1cm5zICJbMSwgMixcbiAgIDNdIi4gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHRoZSBjb25zdHJ1Y3RvciBjcmVhdGVzIGEgbmV3IGVtcHR5XG4gICBsaXN0LCAiW10iLlxuXG4gICBNYW55IG90aGVyIG9wZXJhdGlvbnMgYWxzbyBwcm9kdWNlIGxpc3RzLCBpbmNsdWRpbmcgdGhlICJzb3J0ZWQoKSJcbiAgIGJ1aWx0LWluLlxuXG4gICBMaXN0cyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBhbmQgKm11dGFibGUqIHNlcXVlbmNlXG4gICBvcGVyYXRpb25zLiBMaXN0cyBhbHNvIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG1ldGhvZDpcblxuICAgc29ydCgqLCBrZXk9Tm9uZSwgcmV2ZXJzZT1Ob25lKVxuXG4gICAgICBUaGlzIG1ldGhvZCBzb3J0cyB0aGUgbGlzdCBpbiBwbGFjZSwgdXNpbmcgb25seSAiPCIgY29tcGFyaXNvbnNcbiAgICAgIGJldHdlZW4gaXRlbXMuIEV4Y2VwdGlvbnMgYXJlIG5vdCBzdXBwcmVzc2VkIC0gaWYgYW55IGNvbXBhcmlzb25cbiAgICAgIG9wZXJhdGlvbnMgZmFpbCwgdGhlIGVudGlyZSBzb3J0IG9wZXJhdGlvbiB3aWxsIGZhaWwgKGFuZCB0aGVcbiAgICAgIGxpc3Qgd2lsbCBsaWtlbHkgYmUgbGVmdCBpbiBhIHBhcnRpYWxseSBtb2RpZmllZCBzdGF0ZSkuXG5cbiAgICAgICJzb3J0KCkiIGFjY2VwdHMgdHdvIGFyZ3VtZW50cyB0aGF0IGNhbiBvbmx5IGJlIHBhc3NlZCBieVxuICAgICAga2V5d29yZCAoKmtleXdvcmQtb25seSBhcmd1bWVudHMqKTpcblxuICAgICAgKmtleSogc3BlY2lmaWVzIGEgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50IHRoYXQgaXMgdXNlZCB0b1xuICAgICAgZXh0cmFjdCBhIGNvbXBhcmlzb24ga2V5IGZyb20gZWFjaCBsaXN0IGVsZW1lbnQgKGZvciBleGFtcGxlLFxuICAgICAgImtleT1zdHIubG93ZXIiKS4gVGhlIGtleSBjb3JyZXNwb25kaW5nIHRvIGVhY2ggaXRlbSBpbiB0aGUgbGlzdFxuICAgICAgaXMgY2FsY3VsYXRlZCBvbmNlIGFuZCB0aGVuIHVzZWQgZm9yIHRoZSBlbnRpcmUgc29ydGluZyBwcm9jZXNzLlxuICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgb2YgIk5vbmUiIG1lYW5zIHRoYXQgbGlzdCBpdGVtcyBhcmUgc29ydGVkXG4gICAgICBkaXJlY3RseSB3aXRob3V0IGNhbGN1bGF0aW5nIGEgc2VwYXJhdGUga2V5IHZhbHVlLlxuXG4gICAgICBUaGUgImZ1bmN0b29scy5jbXBfdG9fa2V5KCkiIHV0aWxpdHkgaXMgYXZhaWxhYmxlIHRvIGNvbnZlcnQgYVxuICAgICAgMi54IHN0eWxlICpjbXAqIGZ1bmN0aW9uIHRvIGEgKmtleSogZnVuY3Rpb24uXG5cbiAgICAgICpyZXZlcnNlKiBpcyBhIGJvb2xlYW4gdmFsdWUuICBJZiBzZXQgdG8gIlRydWUiLCB0aGVuIHRoZSBsaXN0XG4gICAgICBlbGVtZW50cyBhcmUgc29ydGVkIGFzIGlmIGVhY2ggY29tcGFyaXNvbiB3ZXJlIHJldmVyc2VkLlxuXG4gICAgICBUaGlzIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yIGVjb25vbXkgb2Ygc3BhY2VcbiAgICAgIHdoZW4gc29ydGluZyBhIGxhcmdlIHNlcXVlbmNlLiAgVG8gcmVtaW5kIHVzZXJzIHRoYXQgaXQgb3BlcmF0ZXNcbiAgICAgIGJ5IHNpZGUgZWZmZWN0LCBpdCBkb2VzIG5vdCByZXR1cm4gdGhlIHNvcnRlZCBzZXF1ZW5jZSAodXNlXG4gICAgICAic29ydGVkKCkiIHRvIGV4cGxpY2l0bHkgcmVxdWVzdCBhIG5ldyBzb3J0ZWQgbGlzdCBpbnN0YW5jZSkuXG5cbiAgICAgIFRoZSAic29ydCgpIiBtZXRob2QgaXMgZ3VhcmFudGVlZCB0byBiZSBzdGFibGUuICBBIHNvcnQgaXNcbiAgICAgIHN0YWJsZSBpZiBpdCBndWFyYW50ZWVzIG5vdCB0byBjaGFuZ2UgdGhlIHJlbGF0aXZlIG9yZGVyIG9mXG4gICAgICBlbGVtZW50cyB0aGF0IGNvbXBhcmUgZXF1YWwgLS0tIHRoaXMgaXMgaGVscGZ1bCBmb3Igc29ydGluZyBpblxuICAgICAgbXVsdGlwbGUgcGFzc2VzIChmb3IgZXhhbXBsZSwgc29ydCBieSBkZXBhcnRtZW50LCB0aGVuIGJ5IHNhbGFyeVxuICAgICAgZ3JhZGUpLlxuXG4gICAgICAqKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFdoaWxlIGEgbGlzdCBpcyBiZWluZyBzb3J0ZWQsXG4gICAgICB0aGUgZWZmZWN0IG9mIGF0dGVtcHRpbmcgdG8gbXV0YXRlLCBvciBldmVuIGluc3BlY3QsIHRoZSBsaXN0IGlzXG4gICAgICB1bmRlZmluZWQuICBUaGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBQeXRob24gbWFrZXMgdGhlIGxpc3QgYXBwZWFyXG4gICAgICBlbXB0eSBmb3IgdGhlIGR1cmF0aW9uLCBhbmQgcmFpc2VzICJWYWx1ZUVycm9yIiBpZiBpdCBjYW4gZGV0ZWN0XG4gICAgICB0aGF0IHRoZSBsaXN0IGhhcyBiZWVuIG11dGF0ZWQgZHVyaW5nIGEgc29ydC5cblxuXG5UdXBsZXNcbj09PT09PVxuXG5UdXBsZXMgYXJlIGltbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5oZXRlcm9nZW5lb3VzIGRhdGEgKHN1Y2ggYXMgdGhlIDItdHVwbGVzIHByb2R1Y2VkIGJ5IHRoZSAiZW51bWVyYXRlKCkiXG5idWlsdC1pbikuIFR1cGxlcyBhcmUgYWxzbyB1c2VkIGZvciBjYXNlcyB3aGVyZSBhbiBpbW11dGFibGUgc2VxdWVuY2Vcbm9mIGhvbW9nZW5lb3VzIGRhdGEgaXMgbmVlZGVkIChzdWNoIGFzIGFsbG93aW5nIHN0b3JhZ2UgaW4gYSAic2V0IiBvclxuImRpY3QiIGluc3RhbmNlKS5cblxuY2xhc3MgY2xhc3MgdHVwbGUoW2l0ZXJhYmxlXSlcblxuICAgVHVwbGVzIG1heSBiZSBjb25zdHJ1Y3RlZCBpbiBhIG51bWJlciBvZiB3YXlzOlxuXG4gICAqIFVzaW5nIGEgcGFpciBvZiBwYXJlbnRoZXNlcyB0byBkZW5vdGUgdGhlIGVtcHR5IHR1cGxlOiAiKCkiXG5cbiAgICogVXNpbmcgYSB0cmFpbGluZyBjb21tYSBmb3IgYSBzaW5nbGV0b24gdHVwbGU6ICJhLCIgb3IgIihhLCkiXG5cbiAgICogU2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogImEsIGIsIGMiIG9yICIoYSwgYiwgYykiXG5cbiAgICogVXNpbmcgdGhlICJ0dXBsZSgpIiBidWlsdC1pbjogInR1cGxlKCkiIG9yICJ0dXBsZShpdGVyYWJsZSkiXG5cbiAgIFRoZSBjb25zdHJ1Y3RvciBidWlsZHMgYSB0dXBsZSB3aG9zZSBpdGVtcyBhcmUgdGhlIHNhbWUgYW5kIGluIHRoZVxuICAgc2FtZSBvcmRlciBhcyAqaXRlcmFibGUqXCdzIGl0ZW1zLiAgKml0ZXJhYmxlKiBtYXkgYmUgZWl0aGVyIGFcbiAgIHNlcXVlbmNlLCBhIGNvbnRhaW5lciB0aGF0IHN1cHBvcnRzIGl0ZXJhdGlvbiwgb3IgYW4gaXRlcmF0b3JcbiAgIG9iamVjdC4gIElmICppdGVyYWJsZSogaXMgYWxyZWFkeSBhIHR1cGxlLCBpdCBpcyByZXR1cm5lZFxuICAgdW5jaGFuZ2VkLiBGb3IgZXhhbXBsZSwgInR1cGxlKFwnYWJjXCcpIiByZXR1cm5zICIoXCdhXCcsIFwnYlwnLCBcJ2NcJykiXG4gICBhbmQgInR1cGxlKCBbMSwgMiwgM10gKSIgcmV0dXJucyAiKDEsIDIsIDMpIi4gSWYgbm8gYXJndW1lbnQgaXNcbiAgIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ldyBlbXB0eSB0dXBsZSwgIigpIi5cblxuICAgTm90ZSB0aGF0IGl0IGlzIGFjdHVhbGx5IHRoZSBjb21tYSB3aGljaCBtYWtlcyBhIHR1cGxlLCBub3QgdGhlXG4gICBwYXJlbnRoZXNlcy4gVGhlIHBhcmVudGhlc2VzIGFyZSBvcHRpb25hbCwgZXhjZXB0IGluIHRoZSBlbXB0eVxuICAgdHVwbGUgY2FzZSwgb3Igd2hlbiB0aGV5IGFyZSBuZWVkZWQgdG8gYXZvaWQgc3ludGFjdGljIGFtYmlndWl0eS5cbiAgIEZvciBleGFtcGxlLCAiZihhLCBiLCBjKSIgaXMgYSBmdW5jdGlvbiBjYWxsIHdpdGggdGhyZWUgYXJndW1lbnRzLFxuICAgd2hpbGUgImYoKGEsIGIsIGMpKSIgaXMgYSBmdW5jdGlvbiBjYWxsIHdpdGggYSAzLXR1cGxlIGFzIHRoZSBzb2xlXG4gICBhcmd1bWVudC5cblxuICAgVHVwbGVzIGltcGxlbWVudCBhbGwgb2YgdGhlICpjb21tb24qIHNlcXVlbmNlIG9wZXJhdGlvbnMuXG5cbkZvciBoZXRlcm9nZW5lb3VzIGNvbGxlY3Rpb25zIG9mIGRhdGEgd2hlcmUgYWNjZXNzIGJ5IG5hbWUgaXMgY2xlYXJlclxudGhhbiBhY2Nlc3MgYnkgaW5kZXgsICJjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkiIG1heSBiZSBhIG1vcmVcbmFwcHJvcHJpYXRlIGNob2ljZSB0aGFuIGEgc2ltcGxlIHR1cGxlIG9iamVjdC5cblxuXG5SYW5nZXNcbj09PT09PVxuXG5UaGUgInJhbmdlIiB0eXBlIHJlcHJlc2VudHMgYW4gaW1tdXRhYmxlIHNlcXVlbmNlIG9mIG51bWJlcnMgYW5kIGlzXG5jb21tb25seSB1c2VkIGZvciBsb29waW5nIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHRpbWVzIGluICJmb3IiIGxvb3BzLlxuXG5jbGFzcyBjbGFzcyByYW5nZShzdG9wKVxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RhcnQsIHN0b3BbLCBzdGVwXSlcblxuICAgVGhlIGFyZ3VtZW50cyB0byB0aGUgcmFuZ2UgY29uc3RydWN0b3IgbXVzdCBiZSBpbnRlZ2VycyAoZWl0aGVyXG4gICBidWlsdC1pbiAiaW50IiBvciBhbnkgb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgIl9faW5kZXhfXyJcbiAgIHNwZWNpYWwgbWV0aG9kKS4gIElmIHRoZSAqc3RlcCogYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG9cbiAgICIxIi4gSWYgdGhlICpzdGFydCogYXJndW1lbnQgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gIjAiLiBJZlxuICAgKnN0ZXAqIGlzIHplcm8sICJWYWx1ZUVycm9yIiBpcyByYWlzZWQuXG5cbiAgIEZvciBhIHBvc2l0aXZlICpzdGVwKiwgdGhlIGNvbnRlbnRzIG9mIGEgcmFuZ2UgInIiIGFyZSBkZXRlcm1pbmVkXG4gICBieSB0aGUgZm9ybXVsYSAicltpXSA9IHN0YXJ0ICsgc3RlcCppIiB3aGVyZSAiaSA+PSAwIiBhbmQgInJbaV0gPFxuICAgc3RvcCIuXG5cbiAgIEZvciBhIG5lZ2F0aXZlICpzdGVwKiwgdGhlIGNvbnRlbnRzIG9mIHRoZSByYW5nZSBhcmUgc3RpbGxcbiAgIGRldGVybWluZWQgYnkgdGhlIGZvcm11bGEgInJbaV0gPSBzdGFydCArIHN0ZXAqaSIsIGJ1dCB0aGVcbiAgIGNvbnN0cmFpbnRzIGFyZSAiaSA+PSAwIiBhbmQgInJbaV0gPiBzdG9wIi5cblxuICAgQSByYW5nZSBvYmplY3Qgd2lsbCBiZSBlbXB0eSBpZiAiclswXSIgZG9lcyBub3QgbWVldCB0aGUgdmFsdWVcbiAgIGNvbnN0cmFpbnQuIFJhbmdlcyBkbyBzdXBwb3J0IG5lZ2F0aXZlIGluZGljZXMsIGJ1dCB0aGVzZSBhcmVcbiAgIGludGVycHJldGVkIGFzIGluZGV4aW5nIGZyb20gdGhlIGVuZCBvZiB0aGUgc2VxdWVuY2UgZGV0ZXJtaW5lZCBieVxuICAgdGhlIHBvc2l0aXZlIGluZGljZXMuXG5cbiAgIFJhbmdlcyBjb250YWluaW5nIGFic29sdXRlIHZhbHVlcyBsYXJnZXIgdGhhbiAic3lzLm1heHNpemUiIGFyZVxuICAgcGVybWl0dGVkIGJ1dCBzb21lIGZlYXR1cmVzIChzdWNoIGFzICJsZW4oKSIpIG1heSByYWlzZVxuICAgIk92ZXJmbG93RXJyb3IiLlxuXG4gICBSYW5nZSBleGFtcGxlczpcblxuICAgICAgPj4+IGxpc3QocmFuZ2UoMTApKVxuICAgICAgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAxMSkpXG4gICAgICBbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAzMCwgNSkpXG4gICAgICBbMCwgNSwgMTAsIDE1LCAyMCwgMjVdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAxMCwgMykpXG4gICAgICBbMCwgMywgNiwgOV1cbiAgICAgID4+PiBsaXN0KHJhbmdlKDAsIC0xMCwgLTEpKVxuICAgICAgWzAsIC0xLCAtMiwgLTMsIC00LCAtNSwgLTYsIC03LCAtOCwgLTldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwKSlcbiAgICAgIFtdXG4gICAgICA+Pj4gbGlzdChyYW5nZSgxLCAwKSlcbiAgICAgIFtdXG5cbiAgIFJhbmdlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zIGV4Y2VwdFxuICAgY29uY2F0ZW5hdGlvbiBhbmQgcmVwZXRpdGlvbiAoZHVlIHRvIHRoZSBmYWN0IHRoYXQgcmFuZ2Ugb2JqZWN0c1xuICAgY2FuIG9ubHkgcmVwcmVzZW50IHNlcXVlbmNlcyB0aGF0IGZvbGxvdyBhIHN0cmljdCBwYXR0ZXJuIGFuZFxuICAgcmVwZXRpdGlvbiBhbmQgY29uY2F0ZW5hdGlvbiB3aWxsIHVzdWFsbHkgdmlvbGF0ZSB0aGF0IHBhdHRlcm4pLlxuXG5UaGUgYWR2YW50YWdlIG9mIHRoZSAicmFuZ2UiIHR5cGUgb3ZlciBhIHJlZ3VsYXIgImxpc3QiIG9yICJ0dXBsZSIgaXNcbnRoYXQgYSAicmFuZ2UiIG9iamVjdCB3aWxsIGFsd2F5cyB0YWtlIHRoZSBzYW1lIChzbWFsbCkgYW1vdW50IG9mXG5tZW1vcnksIG5vIG1hdHRlciB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UgaXQgcmVwcmVzZW50cyAoYXMgaXQgb25seVxuc3RvcmVzIHRoZSAic3RhcnQiLCAic3RvcCIgYW5kICJzdGVwIiB2YWx1ZXMsIGNhbGN1bGF0aW5nIGluZGl2aWR1YWxcbml0ZW1zIGFuZCBzdWJyYW5nZXMgYXMgbmVlZGVkKS5cblxuUmFuZ2Ugb2JqZWN0cyBpbXBsZW1lbnQgdGhlICJjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2UiIEFCQywgYW5kXG5wcm92aWRlIGZlYXR1cmVzIHN1Y2ggYXMgY29udGFpbm1lbnQgdGVzdHMsIGVsZW1lbnQgaW5kZXggbG9va3VwLFxuc2xpY2luZyBhbmQgc3VwcG9ydCBmb3IgbmVnYXRpdmUgaW5kaWNlcyAoc2VlICpTZXF1ZW5jZSBUeXBlcyAtLS1cbmxpc3QsIHR1cGxlLCByYW5nZSopOlxuXG4+Pj4gciA9IHJhbmdlKDAsIDIwLCAyKVxuPj4+IHJcbnJhbmdlKDAsIDIwLCAyKVxuPj4+IDExIGluIHJcbkZhbHNlXG4+Pj4gMTAgaW4gclxuVHJ1ZVxuPj4+IHIuaW5kZXgoMTApXG41XG4+Pj4gcls1XVxuMTBcbj4+PiByWzo1XVxucmFuZ2UoMCwgMTAsIDIpXG4+Pj4gclstMV1cbjE4XG5cblRlc3RpbmcgcmFuZ2Ugb2JqZWN0cyBmb3IgZXF1YWxpdHkgd2l0aCAiPT0iIGFuZCAiIT0iIGNvbXBhcmVzIHRoZW0gYXNcbnNlcXVlbmNlcy4gIFRoYXQgaXMsIHR3byByYW5nZSBvYmplY3RzIGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmIHRoZXlcbnJlcHJlc2VudCB0aGUgc2FtZSBzZXF1ZW5jZSBvZiB2YWx1ZXMuICAoTm90ZSB0aGF0IHR3byByYW5nZSBvYmplY3RzXG50aGF0IGNvbXBhcmUgZXF1YWwgbWlnaHQgaGF2ZSBkaWZmZXJlbnQgInN0YXJ0IiwgInN0b3AiIGFuZCAic3RlcCJcbmF0dHJpYnV0ZXMsIGZvciBleGFtcGxlICJyYW5nZSgwKSA9PSByYW5nZSgyLCAxLCAzKSIgb3IgInJhbmdlKDAsIDMsXG4yKSA9PSByYW5nZSgwLCA0LCAyKSIuKVxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBJbXBsZW1lbnQgdGhlIFNlcXVlbmNlIEFCQy4gU3VwcG9ydCBzbGljaW5nXG5hbmQgbmVnYXRpdmUgaW5kaWNlcy4gVGVzdCAiaW50IiBvYmplY3RzIGZvciBtZW1iZXJzaGlwIGluIGNvbnN0YW50XG50aW1lIGluc3RlYWQgb2YgaXRlcmF0aW5nIHRocm91Z2ggYWxsIGl0ZW1zLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4zOiBEZWZpbmUgXCc9PVwnIGFuZCBcJyE9XCcgdG8gY29tcGFyZSByYW5nZSBvYmplY3RzXG5iYXNlZCBvbiB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIHRoZXkgZGVmaW5lIChpbnN0ZWFkIG9mIGNvbXBhcmluZ1xuYmFzZWQgb24gb2JqZWN0IGlkZW50aXR5KS5cblxuTmV3IGluIHZlcnNpb24gMy4zOiBUaGUgInN0YXJ0IiwgInN0b3AiIGFuZCAic3RlcCIgYXR0cmlidXRlcy5cbicsCi0gJ3R5cGVzc2VxLW11dGFibGUnOiAnXG5NdXRhYmxlIFNlcXVlbmNlIFR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIGRlZmluZWQgb24gbXV0YWJsZSBzZXF1ZW5jZVxudHlwZXMuIFRoZSAiY29sbGVjdGlvbnMuYWJjLk11dGFibGVTZXF1ZW5jZSIgQUJDIGlzIHByb3ZpZGVkIHRvIG1ha2Vcbml0IGVhc2llciB0byBjb3JyZWN0bHkgaW1wbGVtZW50IHRoZXNlIG9wZXJhdGlvbnMgb24gY3VzdG9tIHNlcXVlbmNlXG50eXBlcy5cblxuSW4gdGhlIHRhYmxlICpzKiBpcyBhbiBpbnN0YW5jZSBvZiBhIG11dGFibGUgc2VxdWVuY2UgdHlwZSwgKnQqIGlzIGFueVxuaXRlcmFibGUgb2JqZWN0IGFuZCAqeCogaXMgYW4gYXJiaXRyYXJ5IG9iamVjdCB0aGF0IG1lZXRzIGFueSB0eXBlIGFuZFxudmFsdWUgcmVzdHJpY3Rpb25zIGltcG9zZWQgYnkgKnMqIChmb3IgZXhhbXBsZSwgImJ5dGVhcnJheSIgb25seVxuYWNjZXB0cyBpbnRlZ2VycyB0aGF0IG1lZXQgdGhlIHZhbHVlIHJlc3RyaWN0aW9uICIwIDw9IHggPD0gMjU1IikuXG5cbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgICAgICAgICAgICB8XG4rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInNbaTpqOmtdID0gdCIgICAgICAgICAgICAgICAgIHwgdGhlIGVsZW1lbnRzIG9mICJzW2k6ajprXSIgYXJlICAgfCAoMSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5jbGVhcigpIiAgICAgICAgICAgICAgICAgICAgfCByZW1vdmVzIGFsbCBpdGVtcyBmcm9tICJzIiAoc2FtZSB8ICg1KSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY29weSgpIiAgICAgICAgICAgICAgICAgICAgIHwgY3JlYXRlcyBhIHNoYWxsb3cgY29weSBvZiAicyIgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5wb3AoW2ldKSIgICAgICAgICAgICAgICAgICAgfCByZXRyaWV2ZXMgdGhlIGl0ZW0gYXQgKmkqIGFuZCAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMucmVtb3ZlKHgpIiAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gKnMqICAgfCAoMykgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJldmVyc2UoKSIgICAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byAiLTEiLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuICJyZW1vdmUiIHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi5cblxuNC4gVGhlICJyZXZlcnNlKCkiIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yXG4gICBlY29ub215IG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnNcbiAgIHRoYXQgaXQgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWRcbiAgIHNlcXVlbmNlLlxuXG41LiAiY2xlYXIoKSIgYW5kICJjb3B5KCkiIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyAiZGljdCIgYW5kICJzZXQiKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6ICJjbGVhcigpIiBhbmQgImNvcHkoKSIgbWV0aG9kcy5cbicsCi0gJ3VuYXJ5JzogJ1xuVW5hcnkgYXJpdGhtZXRpYyBhbmQgYml0d2lzZSBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQWxsIHVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9ucyBoYXZlIHRoZSBzYW1lIHByaW9yaXR5OlxuXG4gICB1X2V4cHIgOjo9IHBvd2VyIHwgIi0iIHVfZXhwciB8ICIrIiB1X2V4cHIgfCAifiIgdV9leHByXG5cblRoZSB1bmFyeSAiLSIgKG1pbnVzKSBvcGVyYXRvciB5aWVsZHMgdGhlIG5lZ2F0aW9uIG9mIGl0cyBudW1lcmljXG5hcmd1bWVudC5cblxuVGhlIHVuYXJ5ICIrIiAocGx1cykgb3BlcmF0b3IgeWllbGRzIGl0cyBudW1lcmljIGFyZ3VtZW50IHVuY2hhbmdlZC5cblxuVGhlIHVuYXJ5ICJ+IiAoaW52ZXJ0KSBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgaW52ZXJzaW9uIG9mIGl0c1xuaW50ZWdlciBhcmd1bWVudC4gIFRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiAieCIgaXMgZGVmaW5lZCBhc1xuIi0oeCsxKSIuICBJdCBvbmx5IGFwcGxpZXMgdG8gaW50ZWdyYWwgbnVtYmVycy5cblxuSW4gYWxsIHRocmVlIGNhc2VzLCBpZiB0aGUgYXJndW1lbnQgZG9lcyBub3QgaGF2ZSB0aGUgcHJvcGVyIHR5cGUsIGFcbiJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4nLAotICd3aGlsZSc6ICdcblRoZSAid2hpbGUiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAid2hpbGUiIHN0YXRlbWVudCBpcyB1c2VkIGZvciByZXBlYXRlZCBleGVjdXRpb24gYXMgbG9uZyBhcyBhblxuZXhwcmVzc2lvbiBpcyB0cnVlOlxuXG4gICB3aGlsZV9zdG10IDo6PSAid2hpbGUiIGV4cHJlc3Npb24gIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhpcyByZXBlYXRlZGx5IHRlc3RzIHRoZSBleHByZXNzaW9uIGFuZCwgaWYgaXQgaXMgdHJ1ZSwgZXhlY3V0ZXMgdGhlXG5maXJzdCBzdWl0ZTsgaWYgdGhlIGV4cHJlc3Npb24gaXMgZmFsc2UgKHdoaWNoIG1heSBiZSB0aGUgZmlyc3QgdGltZVxuaXQgaXMgdGVzdGVkKSB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkXG5hbmQgdGhlIGxvb3AgdGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBnb2VzIGJhY2tcbnRvIHRlc3RpbmcgdGhlIGV4cHJlc3Npb24uXG4nLAotICd3aXRoJzogJ1xuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuJywKLSAneWllbGQnOiAnXG5UaGUgInlpZWxkIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKlxuXG4gICB5aWVsZF9zdG10IDo6PSB5aWVsZF9leHByZXNzaW9uXG5cbkEgInlpZWxkIiBzdGF0ZW1lbnQgaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG8gYSAqeWllbGRcbmV4cHJlc3Npb24qLiBUaGUgeWllbGQgc3RhdGVtZW50IGNhbiBiZSB1c2VkIHRvIG9taXQgdGhlIHBhcmVudGhlc2VzXG50aGF0IHdvdWxkIG90aGVyd2lzZSBiZSByZXF1aXJlZCBpbiB0aGUgZXF1aXZhbGVudCB5aWVsZCBleHByZXNzaW9uXG5zdGF0ZW1lbnQuIEZvciBleGFtcGxlLCB0aGUgeWllbGQgc3RhdGVtZW50c1xuXG4gICB5aWVsZCA8ZXhwcj5cbiAgIHlpZWxkIGZyb20gPGV4cHI+XG5cbmFyZSBlcXVpdmFsZW50IHRvIHRoZSB5aWVsZCBleHByZXNzaW9uIHN0YXRlbWVudHNcblxuICAgKHlpZWxkIDxleHByPilcbiAgICh5aWVsZCBmcm9tIDxleHByPilcblxuWWllbGQgZXhwcmVzc2lvbnMgYW5kIHN0YXRlbWVudHMgYXJlIG9ubHkgdXNlZCB3aGVuIGRlZmluaW5nIGFcbipnZW5lcmF0b3IqIGZ1bmN0aW9uLCBhbmQgYXJlIG9ubHkgdXNlZCBpbiB0aGUgYm9keSBvZiB0aGUgZ2VuZXJhdG9yXG5mdW5jdGlvbi4gIFVzaW5nIHlpZWxkIGluIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBzdWZmaWNpZW50IHRvIGNhdXNlXG50aGF0IGRlZmluaXRpb24gdG8gY3JlYXRlIGEgZ2VuZXJhdG9yIGZ1bmN0aW9uIGluc3RlYWQgb2YgYSBub3JtYWxcbmZ1bmN0aW9uLlxuXG5Gb3IgZnVsbCBkZXRhaWxzIG9mICJ5aWVsZCIgc2VtYW50aWNzLCByZWZlciB0byB0aGUgKllpZWxkXG5leHByZXNzaW9ucyogc2VjdGlvbi5cbid9CisjIEF1dG9nZW5lcmF0ZWQgYnkgU3BoaW54IG9uIFNhdCBKdW4gMjUgMTQ6NDA6NTcgMjAxNgordG9waWNzID0geydhc3NlcnQnOiB1J1xuVGhlICJhc3NlcnQiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NlcnQgc3RhdGVtZW50cyBhcmUgYSBjb252ZW5pZW50IHdheSB0byBpbnNlcnQgZGVidWdnaW5nIGFzc2VydGlvbnNcbmludG8gYSBwcm9ncmFtOlxuXG4gICBhc3NlcnRfc3RtdCA6Oj0gImFzc2VydCIgZXhwcmVzc2lvbiBbIiwiIGV4cHJlc3Npb25dXG5cblRoZSBzaW1wbGUgZm9ybSwgImFzc2VydCBleHByZXNzaW9uIiwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjogcmFpc2UgQXNzZXJ0aW9uRXJyb3JcblxuVGhlIGV4dGVuZGVkIGZvcm0sICJhc3NlcnQgZXhwcmVzc2lvbjEsIGV4cHJlc3Npb24yIiwgaXMgZXF1aXZhbGVudCB0b1xuXG4gICBpZiBfX2RlYnVnX186XG4gICAgICBpZiBub3QgZXhwcmVzc2lvbjE6IHJhaXNlIEFzc2VydGlvbkVycm9yKGV4cHJlc3Npb24yKVxuXG5UaGVzZSBlcXVpdmFsZW5jZXMgYXNzdW1lIHRoYXQgIl9fZGVidWdfXyIgYW5kICJBc3NlcnRpb25FcnJvciIgcmVmZXJcbnRvIHRoZSBidWlsdC1pbiB2YXJpYWJsZXMgd2l0aCB0aG9zZSBuYW1lcy4gIEluIHRoZSBjdXJyZW50XG5pbXBsZW1lbnRhdGlvbiwgdGhlIGJ1aWx0LWluIHZhcmlhYmxlICJfX2RlYnVnX18iIGlzICJUcnVlIiB1bmRlclxubm9ybWFsIGNpcmN1bXN0YW5jZXMsICJGYWxzZSIgd2hlbiBvcHRpbWl6YXRpb24gaXMgcmVxdWVzdGVkIChjb21tYW5kXG5saW5lIG9wdGlvbiAtTykuICBUaGUgY3VycmVudCBjb2RlIGdlbmVyYXRvciBlbWl0cyBubyBjb2RlIGZvciBhblxuYXNzZXJ0IHN0YXRlbWVudCB3aGVuIG9wdGltaXphdGlvbiBpcyByZXF1ZXN0ZWQgYXQgY29tcGlsZSB0aW1lLiAgTm90ZVxudGhhdCBpdCBpcyB1bm5lY2Vzc2FyeSB0byBpbmNsdWRlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGV4cHJlc3Npb25cbnRoYXQgZmFpbGVkIGluIHRoZSBlcnJvciBtZXNzYWdlOyBpdCB3aWxsIGJlIGRpc3BsYXllZCBhcyBwYXJ0IG9mIHRoZVxuc3RhY2sgdHJhY2UuXG5cbkFzc2lnbm1lbnRzIHRvICJfX2RlYnVnX18iIGFyZSBpbGxlZ2FsLiAgVGhlIHZhbHVlIGZvciB0aGUgYnVpbHQtaW5cbnZhcmlhYmxlIGlzIGRldGVybWluZWQgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc3RhcnRzLlxuJywKKyAnYXNzaWdubWVudCc6IHUnXG5Bc3NpZ25tZW50IHN0YXRlbWVudHNcbioqKioqKioqKioqKioqKioqKioqKlxuXG5Bc3NpZ25tZW50IHN0YXRlbWVudHMgYXJlIHVzZWQgdG8gKHJlKWJpbmQgbmFtZXMgdG8gdmFsdWVzIGFuZCB0b1xubW9kaWZ5IGF0dHJpYnV0ZXMgb3IgaXRlbXMgb2YgbXV0YWJsZSBvYmplY3RzOlxuXG4gICBhc3NpZ25tZW50X3N0bXQgOjo9ICh0YXJnZXRfbGlzdCAiPSIpKyAoZXhwcmVzc2lvbl9saXN0IHwgeWllbGRfZXhwcmVzc2lvbilcbiAgIHRhcmdldF9saXN0ICAgICA6Oj0gdGFyZ2V0ICgiLCIgdGFyZ2V0KSogWyIsIl1cbiAgIHRhcmdldCAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuICAgICAgICAgICAgICB8ICIoIiB0YXJnZXRfbGlzdCAiKSJcbiAgICAgICAgICAgICAgfCAiWyIgdGFyZ2V0X2xpc3QgIl0iXG4gICAgICAgICAgICAgIHwgYXR0cmlidXRlcmVmXG4gICAgICAgICAgICAgIHwgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgIHwgc2xpY2luZ1xuICAgICAgICAgICAgICB8ICIqIiB0YXJnZXRcblxuKFNlZSBzZWN0aW9uICpQcmltYXJpZXMqIGZvciB0aGUgc3ludGF4IGRlZmluaXRpb25zIGZvclxuKmF0dHJpYnV0ZXJlZiosICpzdWJzY3JpcHRpb24qLCBhbmQgKnNsaWNpbmcqLilcblxuQW4gYXNzaWdubWVudCBzdGF0ZW1lbnQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uIGxpc3QgKHJlbWVtYmVyIHRoYXRcbnRoaXMgY2FuIGJlIGEgc2luZ2xlIGV4cHJlc3Npb24gb3IgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgdGhlIGxhdHRlclxueWllbGRpbmcgYSB0dXBsZSkgYW5kIGFzc2lnbnMgdGhlIHNpbmdsZSByZXN1bHRpbmcgb2JqZWN0IHRvIGVhY2ggb2ZcbnRoZSB0YXJnZXQgbGlzdHMsIGZyb20gbGVmdCB0byByaWdodC5cblxuQXNzaWdubWVudCBpcyBkZWZpbmVkIHJlY3Vyc2l2ZWx5IGRlcGVuZGluZyBvbiB0aGUgZm9ybSBvZiB0aGUgdGFyZ2V0XG4obGlzdCkuIFdoZW4gYSB0YXJnZXQgaXMgcGFydCBvZiBhIG11dGFibGUgb2JqZWN0IChhbiBhdHRyaWJ1dGVcbnJlZmVyZW5jZSwgc3Vic2NyaXB0aW9uIG9yIHNsaWNpbmcpLCB0aGUgbXV0YWJsZSBvYmplY3QgbXVzdFxudWx0aW1hdGVseSBwZXJmb3JtIHRoZSBhc3NpZ25tZW50IGFuZCBkZWNpZGUgYWJvdXQgaXRzIHZhbGlkaXR5LCBhbmRcbm1heSByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIGFzc2lnbm1lbnQgaXMgdW5hY2NlcHRhYmxlLiAgVGhlIHJ1bGVzXG5vYnNlcnZlZCBieSB2YXJpb3VzIHR5cGVzIGFuZCB0aGUgZXhjZXB0aW9ucyByYWlzZWQgYXJlIGdpdmVuIHdpdGggdGhlXG5kZWZpbml0aW9uIG9mIHRoZSBvYmplY3QgdHlwZXMgKHNlZSBzZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZVxuaGllcmFyY2h5KikuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgdGFyZ2V0IGxpc3QsIG9wdGlvbmFsbHkgZW5jbG9zZWQgaW5cbnBhcmVudGhlc2VzIG9yIHNxdWFyZSBicmFja2V0cywgaXMgcmVjdXJzaXZlbHkgZGVmaW5lZCBhcyBmb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgbGlzdCBpcyBhIHNpbmdsZSB0YXJnZXQ6IFRoZSBvYmplY3QgaXMgYXNzaWduZWQgdG9cbiAgdGhhdCB0YXJnZXQuXG5cbiogSWYgdGhlIHRhcmdldCBsaXN0IGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGFyZ2V0czogVGhlXG4gIG9iamVjdCBtdXN0IGJlIGFuIGl0ZXJhYmxlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zIGFzIHRoZXJlXG4gIGFyZSB0YXJnZXRzIGluIHRoZSB0YXJnZXQgbGlzdCwgYW5kIHRoZSBpdGVtcyBhcmUgYXNzaWduZWQsIGZyb21cbiAgbGVmdCB0byByaWdodCwgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0cy5cblxuICAqIElmIHRoZSB0YXJnZXQgbGlzdCBjb250YWlucyBvbmUgdGFyZ2V0IHByZWZpeGVkIHdpdGggYW5cbiAgICBhc3RlcmlzaywgY2FsbGVkIGEgInN0YXJyZWQiIHRhcmdldDogVGhlIG9iamVjdCBtdXN0IGJlIGEgc2VxdWVuY2VcbiAgICB3aXRoIGF0IGxlYXN0IGFzIG1hbnkgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldFxuICAgIGxpc3QsIG1pbnVzIG9uZS4gIFRoZSBmaXJzdCBpdGVtcyBvZiB0aGUgc2VxdWVuY2UgYXJlIGFzc2lnbmVkLFxuICAgIGZyb20gbGVmdCB0byByaWdodCwgdG8gdGhlIHRhcmdldHMgYmVmb3JlIHRoZSBzdGFycmVkIHRhcmdldC4gIFRoZVxuICAgIGZpbmFsIGl0ZW1zIG9mIHRoZSBzZXF1ZW5jZSBhcmUgYXNzaWduZWQgdG8gdGhlIHRhcmdldHMgYWZ0ZXIgdGhlXG4gICAgc3RhcnJlZCB0YXJnZXQuICBBIGxpc3Qgb2YgdGhlIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgc2VxdWVuY2UgaXNcbiAgICB0aGVuIGFzc2lnbmVkIHRvIHRoZSBzdGFycmVkIHRhcmdldCAodGhlIGxpc3QgY2FuIGJlIGVtcHR5KS5cblxuICAqIEVsc2U6IFRoZSBvYmplY3QgbXVzdCBiZSBhIHNlcXVlbmNlIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mXG4gICAgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgdGhlIGl0ZW1zIGFyZVxuICAgIGFzc2lnbmVkLCBmcm9tIGxlZnQgdG8gcmlnaHQsIHRvIHRoZSBjb3JyZXNwb25kaW5nIHRhcmdldHMuXG5cbkFzc2lnbm1lbnQgb2YgYW4gb2JqZWN0IHRvIGEgc2luZ2xlIHRhcmdldCBpcyByZWN1cnNpdmVseSBkZWZpbmVkIGFzXG5mb2xsb3dzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gaWRlbnRpZmllciAobmFtZSk6XG5cbiAgKiBJZiB0aGUgbmFtZSBkb2VzIG5vdCBvY2N1ciBpbiBhICJnbG9iYWwiIG9yICJub25sb2NhbCIgc3RhdGVtZW50XG4gICAgaW4gdGhlIGN1cnJlbnQgY29kZSBibG9jazogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGVcbiAgICBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZS5cblxuICAqIE90aGVyd2lzZTogdGhlIG5hbWUgaXMgYm91bmQgdG8gdGhlIG9iamVjdCBpbiB0aGUgZ2xvYmFsXG4gICAgbmFtZXNwYWNlIG9yIHRoZSBvdXRlciBuYW1lc3BhY2UgZGV0ZXJtaW5lZCBieSAibm9ubG9jYWwiLFxuICAgIHJlc3BlY3RpdmVseS5cblxuICBUaGUgbmFtZSBpcyByZWJvdW5kIGlmIGl0IHdhcyBhbHJlYWR5IGJvdW5kLiAgVGhpcyBtYXkgY2F1c2UgdGhlXG4gIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlIG9iamVjdCBwcmV2aW91c2x5IGJvdW5kIHRvIHRoZSBuYW1lIHRvIHJlYWNoXG4gIHplcm8sIGNhdXNpbmcgdGhlIG9iamVjdCB0byBiZSBkZWFsbG9jYXRlZCBhbmQgaXRzIGRlc3RydWN0b3IgKGlmIGl0XG4gIGhhcyBvbmUpIHRvIGJlIGNhbGxlZC5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgdGFyZ2V0IGxpc3QgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgb3IgaW5cbiAgc3F1YXJlIGJyYWNrZXRzOiBUaGUgb2JqZWN0IG11c3QgYmUgYW4gaXRlcmFibGUgd2l0aCB0aGUgc2FtZSBudW1iZXJcbiAgb2YgaXRlbXMgYXMgdGhlcmUgYXJlIHRhcmdldHMgaW4gdGhlIHRhcmdldCBsaXN0LCBhbmQgaXRzIGl0ZW1zIGFyZVxuICBhc3NpZ25lZCwgZnJvbSBsZWZ0IHRvIHJpZ2h0LCB0byB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzLlxuXG4qIElmIHRoZSB0YXJnZXQgaXMgYW4gYXR0cmlidXRlIHJlZmVyZW5jZTogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpblxuICB0aGUgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhbiBvYmplY3Qgd2l0aFxuICBhc3NpZ25hYmxlIGF0dHJpYnV0ZXM7IGlmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCAiVHlwZUVycm9yIiBpc1xuICByYWlzZWQuICBUaGF0IG9iamVjdCBpcyB0aGVuIGFza2VkIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvXG4gIHRoZSBnaXZlbiBhdHRyaWJ1dGU7IGlmIGl0IGNhbm5vdCBwZXJmb3JtIHRoZSBhc3NpZ25tZW50LCBpdCByYWlzZXNcbiAgYW4gZXhjZXB0aW9uICh1c3VhbGx5IGJ1dCBub3QgbmVjZXNzYXJpbHkgIkF0dHJpYnV0ZUVycm9yIikuXG5cbiAgTm90ZTogSWYgdGhlIG9iamVjdCBpcyBhIGNsYXNzIGluc3RhbmNlIGFuZCB0aGUgYXR0cmlidXRlIHJlZmVyZW5jZVxuICBvY2N1cnMgb24gYm90aCBzaWRlcyBvZiB0aGUgYXNzaWdubWVudCBvcGVyYXRvciwgdGhlIFJIUyBleHByZXNzaW9uLFxuICAiYS54IiBjYW4gYWNjZXNzIGVpdGhlciBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgb3IgKGlmIG5vIGluc3RhbmNlXG4gIGF0dHJpYnV0ZSBleGlzdHMpIGEgY2xhc3MgYXR0cmlidXRlLiAgVGhlIExIUyB0YXJnZXQgImEueCIgaXMgYWx3YXlzXG4gIHNldCBhcyBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGNyZWF0aW5nIGl0IGlmIG5lY2Vzc2FyeS4gIFRodXMsIHRoZVxuICB0d28gb2NjdXJyZW5jZXMgb2YgImEueCIgZG8gbm90IG5lY2Vzc2FyaWx5IHJlZmVyIHRvIHRoZSBzYW1lXG4gIGF0dHJpYnV0ZTogaWYgdGhlIFJIUyBleHByZXNzaW9uIHJlZmVycyB0byBhIGNsYXNzIGF0dHJpYnV0ZSwgdGhlXG4gIExIUyBjcmVhdGVzIGEgbmV3IGluc3RhbmNlIGF0dHJpYnV0ZSBhcyB0aGUgdGFyZ2V0IG9mIHRoZVxuICBhc3NpZ25tZW50OlxuXG4gICAgIGNsYXNzIENsczpcbiAgICAgICAgIHggPSAzICAgICAgICAgICAgICMgY2xhc3MgdmFyaWFibGVcbiAgICAgaW5zdCA9IENscygpXG4gICAgIGluc3QueCA9IGluc3QueCArIDEgICAjIHdyaXRlcyBpbnN0LnggYXMgNCBsZWF2aW5nIENscy54IGFzIDNcblxuICBUaGlzIGRlc2NyaXB0aW9uIGRvZXMgbm90IG5lY2Vzc2FyaWx5IGFwcGx5IHRvIGRlc2NyaXB0b3JcbiAgYXR0cmlidXRlcywgc3VjaCBhcyBwcm9wZXJ0aWVzIGNyZWF0ZWQgd2l0aCAicHJvcGVydHkoKSIuXG5cbiogSWYgdGhlIHRhcmdldCBpcyBhIHN1YnNjcmlwdGlvbjogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBlaXRoZXIgYSBtdXRhYmxlIHNlcXVlbmNlXG4gIG9iamVjdCAoc3VjaCBhcyBhIGxpc3QpIG9yIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KS5cbiAgTmV4dCwgdGhlIHN1YnNjcmlwdCBleHByZXNzaW9uIGlzIGV2YWx1YXRlZC5cblxuICBJZiB0aGUgcHJpbWFyeSBpcyBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0IChzdWNoIGFzIGEgbGlzdCksIHRoZVxuICBzdWJzY3JpcHQgbXVzdCB5aWVsZCBhbiBpbnRlZ2VyLiAgSWYgaXQgaXMgbmVnYXRpdmUsIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGggaXMgYWRkZWQgdG8gaXQuICBUaGUgcmVzdWx0aW5nIHZhbHVlIG11c3QgYmUgYSBub25uZWdhdGl2ZVxuICBpbnRlZ2VyIGxlc3MgdGhhbiB0aGUgc2VxdWVuY2VcJ3MgbGVuZ3RoLCBhbmQgdGhlIHNlcXVlbmNlIGlzIGFza2VkXG4gIHRvIGFzc2lnbiB0aGUgYXNzaWduZWQgb2JqZWN0IHRvIGl0cyBpdGVtIHdpdGggdGhhdCBpbmRleC4gIElmIHRoZVxuICBpbmRleCBpcyBvdXQgb2YgcmFuZ2UsICJJbmRleEVycm9yIiBpcyByYWlzZWQgKGFzc2lnbm1lbnQgdG8gYVxuICBzdWJzY3JpcHRlZCBzZXF1ZW5jZSBjYW5ub3QgYWRkIG5ldyBpdGVtcyB0byBhIGxpc3QpLlxuXG4gIElmIHRoZSBwcmltYXJ5IGlzIGEgbWFwcGluZyBvYmplY3QgKHN1Y2ggYXMgYSBkaWN0aW9uYXJ5KSwgdGhlXG4gIHN1YnNjcmlwdCBtdXN0IGhhdmUgYSB0eXBlIGNvbXBhdGlibGUgd2l0aCB0aGUgbWFwcGluZ1wncyBrZXkgdHlwZSxcbiAgYW5kIHRoZSBtYXBwaW5nIGlzIHRoZW4gYXNrZWQgdG8gY3JlYXRlIGEga2V5L2RhdHVtIHBhaXIgd2hpY2ggbWFwc1xuICB0aGUgc3Vic2NyaXB0IHRvIHRoZSBhc3NpZ25lZCBvYmplY3QuICBUaGlzIGNhbiBlaXRoZXIgcmVwbGFjZSBhblxuICBleGlzdGluZyBrZXkvdmFsdWUgcGFpciB3aXRoIHRoZSBzYW1lIGtleSB2YWx1ZSwgb3IgaW5zZXJ0IGEgbmV3XG4gIGtleS92YWx1ZSBwYWlyIChpZiBubyBrZXkgd2l0aCB0aGUgc2FtZSB2YWx1ZSBleGlzdGVkKS5cblxuICBGb3IgdXNlci1kZWZpbmVkIG9iamVjdHMsIHRoZSAiX19zZXRpdGVtX18oKSIgbWV0aG9kIGlzIGNhbGxlZCB3aXRoXG4gIGFwcHJvcHJpYXRlIGFyZ3VtZW50cy5cblxuKiBJZiB0aGUgdGFyZ2V0IGlzIGEgc2xpY2luZzogVGhlIHByaW1hcnkgZXhwcmVzc2lvbiBpbiB0aGVcbiAgcmVmZXJlbmNlIGlzIGV2YWx1YXRlZC4gIEl0IHNob3VsZCB5aWVsZCBhIG11dGFibGUgc2VxdWVuY2Ugb2JqZWN0XG4gIChzdWNoIGFzIGEgbGlzdCkuICBUaGUgYXNzaWduZWQgb2JqZWN0IHNob3VsZCBiZSBhIHNlcXVlbmNlIG9iamVjdFxuICBvZiB0aGUgc2FtZSB0eXBlLiAgTmV4dCwgdGhlIGxvd2VyIGFuZCB1cHBlciBib3VuZCBleHByZXNzaW9ucyBhcmVcbiAgZXZhbHVhdGVkLCBpbnNvZmFyIHRoZXkgYXJlIHByZXNlbnQ7IGRlZmF1bHRzIGFyZSB6ZXJvIGFuZCB0aGVcbiAgc2VxdWVuY2VcJ3MgbGVuZ3RoLiAgVGhlIGJvdW5kcyBzaG91bGQgZXZhbHVhdGUgdG8gaW50ZWdlcnMuIElmXG4gIGVpdGhlciBib3VuZCBpcyBuZWdhdGl2ZSwgdGhlIHNlcXVlbmNlXCdzIGxlbmd0aCBpcyBhZGRlZCB0byBpdC4gIFRoZVxuICByZXN1bHRpbmcgYm91bmRzIGFyZSBjbGlwcGVkIHRvIGxpZSBiZXR3ZWVuIHplcm8gYW5kIHRoZSBzZXF1ZW5jZVwnc1xuICBsZW5ndGgsIGluY2x1c2l2ZS4gIEZpbmFsbHksIHRoZSBzZXF1ZW5jZSBvYmplY3QgaXMgYXNrZWQgdG8gcmVwbGFjZVxuICB0aGUgc2xpY2Ugd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLiAgVGhlIGxlbmd0aCBvZlxuICB0aGUgc2xpY2UgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHRoZSBsZW5ndGggb2YgdGhlIGFzc2lnbmVkIHNlcXVlbmNlLFxuICB0aHVzIGNoYW5naW5nIHRoZSBsZW5ndGggb2YgdGhlIHRhcmdldCBzZXF1ZW5jZSwgaWYgdGhlIHRhcmdldFxuICBzZXF1ZW5jZSBhbGxvd3MgaXQuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIHRoZVxuc3ludGF4IGZvciB0YXJnZXRzIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIGZvciBleHByZXNzaW9ucywgYW5kXG5pbnZhbGlkIHN5bnRheCBpcyByZWplY3RlZCBkdXJpbmcgdGhlIGNvZGUgZ2VuZXJhdGlvbiBwaGFzZSwgY2F1c2luZ1xubGVzcyBkZXRhaWxlZCBlcnJvciBtZXNzYWdlcy5cblxuQWx0aG91Z2ggdGhlIGRlZmluaXRpb24gb2YgYXNzaWdubWVudCBpbXBsaWVzIHRoYXQgb3ZlcmxhcHMgYmV0d2VlblxudGhlIGxlZnQtaGFuZCBzaWRlIGFuZCB0aGUgcmlnaHQtaGFuZCBzaWRlIGFyZSBcJ3NpbXVsdGFuZW5vdXNcJyAoZm9yXG5leGFtcGxlICJhLCBiID0gYiwgYSIgc3dhcHMgdHdvIHZhcmlhYmxlcyksIG92ZXJsYXBzICp3aXRoaW4qIHRoZVxuY29sbGVjdGlvbiBvZiBhc3NpZ25lZC10byB2YXJpYWJsZXMgb2NjdXIgbGVmdC10by1yaWdodCwgc29tZXRpbWVzXG5yZXN1bHRpbmcgaW4gY29uZnVzaW9uLiAgRm9yIGluc3RhbmNlLCB0aGUgZm9sbG93aW5nIHByb2dyYW0gcHJpbnRzXG4iWzAsIDJdIjpcblxuICAgeCA9IFswLCAxXVxuICAgaSA9IDBcbiAgIGksIHhbaV0gPSAxLCAyICAgICAgICAgIyBpIGlzIHVwZGF0ZWQsIHRoZW4geFtpXSBpcyB1cGRhdGVkXG4gICBwcmludCh4KVxuXG5TZWUgYWxzbzogKipQRVAgMzEzMioqIC0gRXh0ZW5kZWQgSXRlcmFibGUgVW5wYWNraW5nXG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSAiKnRhcmdldCIgZmVhdHVyZS5cblxuXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgb2YgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWxcbmFzc2lnbm1lbnQgc3RhdGVtZW50cywgY2Fubm90IGJlIGFuIHVucGFja2luZykgYW5kIHRoZSBleHByZXNzaW9uXG5saXN0LCBwZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiBhc3NpZ25tZW50XG5vbiB0aGUgdHdvIG9wZXJhbmRzLCBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5UaGUgdGFyZ2V0IGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV4cHJlc3Npb24gbGlrZSAieCArPSAxIiBjYW4gYmUgcmV3cml0dGVuIGFzXG4ieCA9IHggKyAxIiB0byBhY2hpZXZlIGEgc2ltaWxhciwgYnV0IG5vdCBleGFjdGx5IGVxdWFsIGVmZmVjdC4gSW4gdGhlXG5hdWdtZW50ZWQgdmVyc2lvbiwgIngiIGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuIEFsc28sIHdoZW4gcG9zc2libGUsXG50aGUgYWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0IHJhdGhlciB0aGFuXG5jcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsIHRoZSBvbGQgb2JqZWN0XG5pcyBtb2RpZmllZCBpbnN0ZWFkLlxuXG5Vbmxpa2Ugbm9ybWFsIGFzc2lnbm1lbnRzLCBhdWdtZW50ZWQgYXNzaWdubWVudHMgZXZhbHVhdGUgdGhlIGxlZnQtXG5oYW5kIHNpZGUgKmJlZm9yZSogZXZhbHVhdGluZyB0aGUgcmlnaHQtaGFuZCBzaWRlLiAgRm9yIGV4YW1wbGUsICJhW2ldXG4rPSBmKHgpIiBmaXJzdCBsb29rcy11cCAiYVtpXSIsIHRoZW4gaXQgZXZhbHVhdGVzICJmKHgpIiBhbmQgcGVyZm9ybXNcbnRoZSBhZGRpdGlvbiwgYW5kIGxhc3RseSwgaXQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byAiYVtpXSIuXG5cbldpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGFcbnNpbmdsZSBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnRcbnN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksXG53aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlICppbi1wbGFjZSogYmVoYXZpb3IsIHRoZSBiaW5hcnlcbm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbFxuYmluYXJ5IG9wZXJhdGlvbnMuXG5cbkZvciB0YXJnZXRzIHdoaWNoIGFyZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgdGhlIHNhbWUgKmNhdmVhdCBhYm91dFxuY2xhc3MgYW5kIGluc3RhbmNlIGF0dHJpYnV0ZXMqIGFwcGxpZXMgYXMgZm9yIHJlZ3VsYXIgYXNzaWdubWVudHMuXG4nLAorICdhdG9tLWlkZW50aWZpZXJzJzogdSdcbklkZW50aWZpZXJzIChOYW1lcylcbioqKioqKioqKioqKioqKioqKipcblxuQW4gaWRlbnRpZmllciBvY2N1cnJpbmcgYXMgYW4gYXRvbSBpcyBhIG5hbWUuICBTZWUgc2VjdGlvblxuKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyogZm9yIGxleGljYWwgZGVmaW5pdGlvbiBhbmQgc2VjdGlvbiAqTmFtaW5nXG5hbmQgYmluZGluZyogZm9yIGRvY3VtZW50YXRpb24gb2YgbmFtaW5nIGFuZCBiaW5kaW5nLlxuXG5XaGVuIHRoZSBuYW1lIGlzIGJvdW5kIHRvIGFuIG9iamVjdCwgZXZhbHVhdGlvbiBvZiB0aGUgYXRvbSB5aWVsZHNcbnRoYXQgb2JqZWN0LiBXaGVuIGEgbmFtZSBpcyBub3QgYm91bmQsIGFuIGF0dGVtcHQgdG8gZXZhbHVhdGUgaXRcbnJhaXNlcyBhICJOYW1lRXJyb3IiIGV4Y2VwdGlvbi5cblxuKipQcml2YXRlIG5hbWUgbWFuZ2xpbmc6KiogV2hlbiBhbiBpZGVudGlmaWVyIHRoYXQgdGV4dHVhbGx5IG9jY3VycyBpblxuYSBjbGFzcyBkZWZpbml0aW9uIGJlZ2lucyB3aXRoIHR3byBvciBtb3JlIHVuZGVyc2NvcmUgY2hhcmFjdGVycyBhbmRcbmRvZXMgbm90IGVuZCBpbiB0d28gb3IgbW9yZSB1bmRlcnNjb3JlcywgaXQgaXMgY29uc2lkZXJlZCBhICpwcml2YXRlXG5uYW1lKiBvZiB0aGF0IGNsYXNzLiBQcml2YXRlIG5hbWVzIGFyZSB0cmFuc2Zvcm1lZCB0byBhIGxvbmdlciBmb3JtXG5iZWZvcmUgY29kZSBpcyBnZW5lcmF0ZWQgZm9yIHRoZW0uICBUaGUgdHJhbnNmb3JtYXRpb24gaW5zZXJ0cyB0aGVcbmNsYXNzIG5hbWUsIHdpdGggbGVhZGluZyB1bmRlcnNjb3JlcyByZW1vdmVkIGFuZCBhIHNpbmdsZSB1bmRlcnNjb3JlXG5pbnNlcnRlZCwgaW4gZnJvbnQgb2YgdGhlIG5hbWUuICBGb3IgZXhhbXBsZSwgdGhlIGlkZW50aWZpZXIgIl9fc3BhbSJcbm9jY3VycmluZyBpbiBhIGNsYXNzIG5hbWVkICJIYW0iIHdpbGwgYmUgdHJhbnNmb3JtZWQgdG8gIl9IYW1fX3NwYW0iLlxuVGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3ludGFjdGljYWwgY29udGV4dCBpbiB3aGljaFxudGhlIGlkZW50aWZpZXIgaXMgdXNlZC4gIElmIHRoZSB0cmFuc2Zvcm1lZCBuYW1lIGlzIGV4dHJlbWVseSBsb25nXG4obG9uZ2VyIHRoYW4gMjU1IGNoYXJhY3RlcnMpLCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIHRydW5jYXRpb24gbWF5XG5oYXBwZW4uIElmIHRoZSBjbGFzcyBuYW1lIGNvbnNpc3RzIG9ubHkgb2YgdW5kZXJzY29yZXMsIG5vXG50cmFuc2Zvcm1hdGlvbiBpcyBkb25lLlxuJywKKyAnYXRvbS1saXRlcmFscyc6IHUiXG5MaXRlcmFsc1xuKioqKioqKipcblxuUHl0aG9uIHN1cHBvcnRzIHN0cmluZyBhbmQgYnl0ZXMgbGl0ZXJhbHMgYW5kIHZhcmlvdXMgbnVtZXJpY1xubGl0ZXJhbHM6XG5cbiAgIGxpdGVyYWwgOjo9IHN0cmluZ2xpdGVyYWwgfCBieXRlc2xpdGVyYWxcbiAgICAgICAgICAgICAgIHwgaW50ZWdlciB8IGZsb2F0bnVtYmVyIHwgaW1hZ251bWJlclxuXG5FdmFsdWF0aW9uIG9mIGEgbGl0ZXJhbCB5aWVsZHMgYW4gb2JqZWN0IG9mIHRoZSBnaXZlbiB0eXBlIChzdHJpbmcsXG5ieXRlcywgaW50ZWdlciwgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBjb21wbGV4IG51bWJlcikgd2l0aCB0aGUgZ2l2ZW5cbnZhbHVlLiAgVGhlIHZhbHVlIG1heSBiZSBhcHByb3hpbWF0ZWQgaW4gdGhlIGNhc2Ugb2YgZmxvYXRpbmcgcG9pbnRcbmFuZCBpbWFnaW5hcnkgKGNvbXBsZXgpIGxpdGVyYWxzLiAgU2VlIHNlY3Rpb24gKkxpdGVyYWxzKiBmb3IgZGV0YWlscy5cblxuQWxsIGxpdGVyYWxzIGNvcnJlc3BvbmQgdG8gaW1tdXRhYmxlIGRhdGEgdHlwZXMsIGFuZCBoZW5jZSB0aGVcbm9iamVjdCdzIGlkZW50aXR5IGlzIGxlc3MgaW1wb3J0YW50IHRoYW4gaXRzIHZhbHVlLiAgTXVsdGlwbGVcbmV2YWx1YXRpb25zIG9mIGxpdGVyYWxzIHdpdGggdGhlIHNhbWUgdmFsdWUgKGVpdGhlciB0aGUgc2FtZVxub2NjdXJyZW5jZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IG9yIGEgZGlmZmVyZW50IG9jY3VycmVuY2UpIG1heSBvYnRhaW5cbnRoZSBzYW1lIG9iamVjdCBvciBhIGRpZmZlcmVudCBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZS5cbiIsCisgJ2F0dHJpYnV0ZS1hY2Nlc3MnOiB1J1xuQ3VzdG9taXppbmcgYXR0cmlidXRlIGFjY2Vzc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gY3VzdG9taXplIHRoZSBtZWFuaW5nIG9mXG5hdHRyaWJ1dGUgYWNjZXNzICh1c2Ugb2YsIGFzc2lnbm1lbnQgdG8sIG9yIGRlbGV0aW9uIG9mICJ4Lm5hbWUiKSBmb3JcbmNsYXNzIGluc3RhbmNlcy5cblxub2JqZWN0Ll9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB3aGVuIGFuIGF0dHJpYnV0ZSBsb29rdXAgaGFzIG5vdCBmb3VuZCB0aGUgYXR0cmlidXRlIGluIHRoZVxuICAgdXN1YWwgcGxhY2VzIChpLmUuIGl0IGlzIG5vdCBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUgbm9yIGlzIGl0IGZvdW5kXG4gICBpbiB0aGUgY2xhc3MgdHJlZSBmb3IgInNlbGYiKS4gICJuYW1lIiBpcyB0aGUgYXR0cmlidXRlIG5hbWUuIFRoaXNcbiAgIG1ldGhvZCBzaG91bGQgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhblxuICAgIkF0dHJpYnV0ZUVycm9yIiBleGNlcHRpb24uXG5cbiAgIE5vdGUgdGhhdCBpZiB0aGUgYXR0cmlidXRlIGlzIGZvdW5kIHRocm91Z2ggdGhlIG5vcm1hbCBtZWNoYW5pc20sXG4gICAiX19nZXRhdHRyX18oKSIgaXMgbm90IGNhbGxlZC4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGFzeW1tZXRyeVxuICAgYmV0d2VlbiAiX19nZXRhdHRyX18oKSIgYW5kICJfX3NldGF0dHJfXygpIi4pIFRoaXMgaXMgZG9uZSBib3RoIGZvclxuICAgZWZmaWNpZW5jeSByZWFzb25zIGFuZCBiZWNhdXNlIG90aGVyd2lzZSAiX19nZXRhdHRyX18oKSIgd291bGQgaGF2ZVxuICAgbm8gd2F5IHRvIGFjY2VzcyBvdGhlciBhdHRyaWJ1dGVzIG9mIHRoZSBpbnN0YW5jZS4gIE5vdGUgdGhhdCBhdFxuICAgbGVhc3QgZm9yIGluc3RhbmNlIHZhcmlhYmxlcywgeW91IGNhbiBmYWtlIHRvdGFsIGNvbnRyb2wgYnkgbm90XG4gICBpbnNlcnRpbmcgYW55IHZhbHVlcyBpbiB0aGUgaW5zdGFuY2UgYXR0cmlidXRlIGRpY3Rpb25hcnkgKGJ1dFxuICAgaW5zdGVhZCBpbnNlcnRpbmcgdGhlbSBpbiBhbm90aGVyIG9iamVjdCkuICBTZWUgdGhlXG4gICAiX19nZXRhdHRyaWJ1dGVfXygpIiBtZXRob2QgYmVsb3cgZm9yIGEgd2F5IHRvIGFjdHVhbGx5IGdldCB0b3RhbFxuICAgY29udHJvbCBvdmVyIGF0dHJpYnV0ZSBhY2Nlc3MuXG5cbm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpXG5cbiAgIENhbGxlZCB1bmNvbmRpdGlvbmFsbHkgdG8gaW1wbGVtZW50IGF0dHJpYnV0ZSBhY2Nlc3NlcyBmb3JcbiAgIGluc3RhbmNlcyBvZiB0aGUgY2xhc3MuIElmIHRoZSBjbGFzcyBhbHNvIGRlZmluZXMgIl9fZ2V0YXR0cl9fKCkiLFxuICAgdGhlIGxhdHRlciB3aWxsIG5vdCBiZSBjYWxsZWQgdW5sZXNzICJfX2dldGF0dHJpYnV0ZV9fKCkiIGVpdGhlclxuICAgY2FsbHMgaXQgZXhwbGljaXRseSBvciByYWlzZXMgYW4gIkF0dHJpYnV0ZUVycm9yIi4gVGhpcyBtZXRob2RcbiAgIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi4gSW4gb3JkZXIgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGluXG4gICB0aGlzIG1ldGhvZCwgaXRzIGltcGxlbWVudGF0aW9uIHNob3VsZCBhbHdheXMgY2FsbCB0aGUgYmFzZSBjbGFzc1xuICAgbWV0aG9kIHdpdGggdGhlIHNhbWUgbmFtZSB0byBhY2Nlc3MgYW55IGF0dHJpYnV0ZXMgaXQgbmVlZHMsIGZvclxuICAgZXhhbXBsZSwgIm9iamVjdC5fX2dldGF0dHJpYnV0ZV9fKHNlbGYsIG5hbWUpIi5cblxuICAgTm90ZTogVGhpcyBtZXRob2QgbWF5IHN0aWxsIGJlIGJ5cGFzc2VkIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsXG4gICAgIG1ldGhvZHMgYXMgdGhlIHJlc3VsdCBvZiBpbXBsaWNpdCBpbnZvY2F0aW9uIHZpYSBsYW5ndWFnZSBzeW50YXhcbiAgICAgb3IgYnVpbHQtaW4gZnVuY3Rpb25zLiBTZWUgKlNwZWNpYWwgbWV0aG9kIGxvb2t1cCouXG5cbm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGFzc2lnbm1lbnQgaXMgYXR0ZW1wdGVkLiAgVGhpcyBpcyBjYWxsZWRcbiAgIGluc3RlYWQgb2YgdGhlIG5vcm1hbCBtZWNoYW5pc20gKGkuZS4gc3RvcmUgdGhlIHZhbHVlIGluIHRoZVxuICAgaW5zdGFuY2UgZGljdGlvbmFyeSkuICpuYW1lKiBpcyB0aGUgYXR0cmlidXRlIG5hbWUsICp2YWx1ZSogaXMgdGhlXG4gICB2YWx1ZSB0byBiZSBhc3NpZ25lZCB0byBpdC5cblxuICAgSWYgIl9fc2V0YXR0cl9fKCkiIHdhbnRzIHRvIGFzc2lnbiB0byBhbiBpbnN0YW5jZSBhdHRyaWJ1dGUsIGl0XG4gICBzaG91bGQgY2FsbCB0aGUgYmFzZSBjbGFzcyBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lLCBmb3IgZXhhbXBsZSxcbiAgICJvYmplY3QuX19zZXRhdHRyX18oc2VsZiwgbmFtZSwgdmFsdWUpIi5cblxub2JqZWN0Ll9fZGVsYXR0cl9fKHNlbGYsIG5hbWUpXG5cbiAgIExpa2UgIl9fc2V0YXR0cl9fKCkiIGJ1dCBmb3IgYXR0cmlidXRlIGRlbGV0aW9uIGluc3RlYWQgb2ZcbiAgIGFzc2lnbm1lbnQuICBUaGlzIHNob3VsZCBvbmx5IGJlIGltcGxlbWVudGVkIGlmICJkZWwgb2JqLm5hbWUiIGlzXG4gICBtZWFuaW5nZnVsIGZvciB0aGUgb2JqZWN0LlxuXG5vYmplY3QuX19kaXJfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiAiZGlyKCkiIGlzIGNhbGxlZCBvbiB0aGUgb2JqZWN0LiBBIHNlcXVlbmNlIG11c3QgYmVcbiAgIHJldHVybmVkLiAiZGlyKCkiIGNvbnZlcnRzIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSB0byBhIGxpc3QgYW5kXG4gICBzb3J0cyBpdC5cblxuXG5JbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnNcbj09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgb25seSBhcHBseSB3aGVuIGFuIGluc3RhbmNlIG9mIHRoZSBjbGFzc1xuY29udGFpbmluZyB0aGUgbWV0aG9kIChhIHNvLWNhbGxlZCAqZGVzY3JpcHRvciogY2xhc3MpIGFwcGVhcnMgaW4gYW5cbipvd25lciogY2xhc3MgKHRoZSBkZXNjcmlwdG9yIG11c3QgYmUgaW4gZWl0aGVyIHRoZSBvd25lclwncyBjbGFzc1xuZGljdGlvbmFyeSBvciBpbiB0aGUgY2xhc3MgZGljdGlvbmFyeSBmb3Igb25lIG9mIGl0cyBwYXJlbnRzKS4gIEluIHRoZVxuZXhhbXBsZXMgYmVsb3csICJ0aGUgYXR0cmlidXRlIiByZWZlcnMgdG8gdGhlIGF0dHJpYnV0ZSB3aG9zZSBuYW1lIGlzXG50aGUga2V5IG9mIHRoZSBwcm9wZXJ0eSBpbiB0aGUgb3duZXIgY2xhc3NcJyAiX19kaWN0X18iLlxuXG5vYmplY3QuX19nZXRfXyhzZWxmLCBpbnN0YW5jZSwgb3duZXIpXG5cbiAgIENhbGxlZCB0byBnZXQgdGhlIGF0dHJpYnV0ZSBvZiB0aGUgb3duZXIgY2xhc3MgKGNsYXNzIGF0dHJpYnV0ZVxuICAgYWNjZXNzKSBvciBvZiBhbiBpbnN0YW5jZSBvZiB0aGF0IGNsYXNzIChpbnN0YW5jZSBhdHRyaWJ1dGVcbiAgIGFjY2VzcykuICpvd25lciogaXMgYWx3YXlzIHRoZSBvd25lciBjbGFzcywgd2hpbGUgKmluc3RhbmNlKiBpcyB0aGVcbiAgIGluc3RhbmNlIHRoYXQgdGhlIGF0dHJpYnV0ZSB3YXMgYWNjZXNzZWQgdGhyb3VnaCwgb3IgIk5vbmUiIHdoZW5cbiAgIHRoZSBhdHRyaWJ1dGUgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgKm93bmVyKi4gIFRoaXMgbWV0aG9kIHNob3VsZFxuICAgcmV0dXJuIHRoZSAoY29tcHV0ZWQpIGF0dHJpYnV0ZSB2YWx1ZSBvciByYWlzZSBhbiAiQXR0cmlidXRlRXJyb3IiXG4gICBleGNlcHRpb24uXG5cbm9iamVjdC5fX3NldF9fKHNlbGYsIGluc3RhbmNlLCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIHNldCB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlIG93bmVyXG4gICBjbGFzcyB0byBhIG5ldyB2YWx1ZSwgKnZhbHVlKi5cblxub2JqZWN0Ll9fZGVsZXRlX18oc2VsZiwgaW5zdGFuY2UpXG5cbiAgIENhbGxlZCB0byBkZWxldGUgdGhlIGF0dHJpYnV0ZSBvbiBhbiBpbnN0YW5jZSAqaW5zdGFuY2UqIG9mIHRoZVxuICAgb3duZXIgY2xhc3MuXG5cblRoZSBhdHRyaWJ1dGUgIl9fb2JqY2xhc3NfXyIgaXMgaW50ZXJwcmV0ZWQgYnkgdGhlICJpbnNwZWN0IiBtb2R1bGUgYXNcbnNwZWNpZnlpbmcgdGhlIGNsYXNzIHdoZXJlIHRoaXMgb2JqZWN0IHdhcyBkZWZpbmVkIChzZXR0aW5nIHRoaXNcbmFwcHJvcHJpYXRlbHkgY2FuIGFzc2lzdCBpbiBydW50aW1lIGludHJvc3BlY3Rpb24gb2YgZHluYW1pYyBjbGFzc1xuYXR0cmlidXRlcykuIEZvciBjYWxsYWJsZXMsIGl0IG1heSBpbmRpY2F0ZSB0aGF0IGFuIGluc3RhbmNlIG9mIHRoZVxuZ2l2ZW4gdHlwZSAob3IgYSBzdWJjbGFzcykgaXMgZXhwZWN0ZWQgb3IgcmVxdWlyZWQgYXMgdGhlIGZpcnN0XG5wb3NpdGlvbmFsIGFyZ3VtZW50IChmb3IgZXhhbXBsZSwgQ1B5dGhvbiBzZXRzIHRoaXMgYXR0cmlidXRlIGZvclxudW5ib3VuZCBtZXRob2RzIHRoYXQgYXJlIGltcGxlbWVudGVkIGluIEMpLlxuXG5cbkludm9raW5nIERlc2NyaXB0b3JzXG49PT09PT09PT09PT09PT09PT09PVxuXG5JbiBnZW5lcmFsLCBhIGRlc2NyaXB0b3IgaXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSB3aXRoICJiaW5kaW5nXG5iZWhhdmlvciIsIG9uZSB3aG9zZSBhdHRyaWJ1dGUgYWNjZXNzIGhhcyBiZWVuIG92ZXJyaWRkZW4gYnkgbWV0aG9kc1xuaW4gdGhlIGRlc2NyaXB0b3IgcHJvdG9jb2w6ICAiX19nZXRfXygpIiwgIl9fc2V0X18oKSIsIGFuZFxuIl9fZGVsZXRlX18oKSIuIElmIGFueSBvZiB0aG9zZSBtZXRob2RzIGFyZSBkZWZpbmVkIGZvciBhbiBvYmplY3QsIGl0XG5pcyBzYWlkIHRvIGJlIGEgZGVzY3JpcHRvci5cblxuVGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGF0dHJpYnV0ZSBhY2Nlc3MgaXMgdG8gZ2V0LCBzZXQsIG9yIGRlbGV0ZVxudGhlIGF0dHJpYnV0ZSBmcm9tIGFuIG9iamVjdFwncyBkaWN0aW9uYXJ5LiBGb3IgaW5zdGFuY2UsICJhLngiIGhhcyBhXG5sb29rdXAgY2hhaW4gc3RhcnRpbmcgd2l0aCAiYS5fX2RpY3RfX1tcJ3hcJ10iLCB0aGVuXG4idHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10iLCBhbmQgY29udGludWluZyB0aHJvdWdoIHRoZSBiYXNlIGNsYXNzZXMgb2ZcbiJ0eXBlKGEpIiBleGNsdWRpbmcgbWV0YWNsYXNzZXMuXG5cbkhvd2V2ZXIsIGlmIHRoZSBsb29rZWQtdXAgdmFsdWUgaXMgYW4gb2JqZWN0IGRlZmluaW5nIG9uZSBvZiB0aGVcbmRlc2NyaXB0b3IgbWV0aG9kcywgdGhlbiBQeXRob24gbWF5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIGFuZFxuaW52b2tlIHRoZSBkZXNjcmlwdG9yIG1ldGhvZCBpbnN0ZWFkLiAgV2hlcmUgdGhpcyBvY2N1cnMgaW4gdGhlXG5wcmVjZWRlbmNlIGNoYWluIGRlcGVuZHMgb24gd2hpY2ggZGVzY3JpcHRvciBtZXRob2RzIHdlcmUgZGVmaW5lZCBhbmRcbmhvdyB0aGV5IHdlcmUgY2FsbGVkLlxuXG5UaGUgc3RhcnRpbmcgcG9pbnQgZm9yIGRlc2NyaXB0b3IgaW52b2NhdGlvbiBpcyBhIGJpbmRpbmcsICJhLngiLiBIb3dcbnRoZSBhcmd1bWVudHMgYXJlIGFzc2VtYmxlZCBkZXBlbmRzIG9uICJhIjpcblxuRGlyZWN0IENhbGxcbiAgIFRoZSBzaW1wbGVzdCBhbmQgbGVhc3QgY29tbW9uIGNhbGwgaXMgd2hlbiB1c2VyIGNvZGUgZGlyZWN0bHlcbiAgIGludm9rZXMgYSBkZXNjcmlwdG9yIG1ldGhvZDogICAgInguX19nZXRfXyhhKSIuXG5cbkluc3RhbmNlIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYW4gb2JqZWN0IGluc3RhbmNlLCAiYS54IiBpcyB0cmFuc2Zvcm1lZCBpbnRvIHRoZVxuICAgY2FsbDogInR5cGUoYSkuX19kaWN0X19bXCd4XCddLl9fZ2V0X18oYSwgdHlwZShhKSkiLlxuXG5DbGFzcyBCaW5kaW5nXG4gICBJZiBiaW5kaW5nIHRvIGEgY2xhc3MsICJBLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIGNhbGw6XG4gICAiQS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhOb25lLCBBKSIuXG5cblN1cGVyIEJpbmRpbmdcbiAgIElmICJhIiBpcyBhbiBpbnN0YW5jZSBvZiAic3VwZXIiLCB0aGVuIHRoZSBiaW5kaW5nICJzdXBlcihCLFxuICAgb2JqKS5tKCkiIHNlYXJjaGVzICJvYmouX19jbGFzc19fLl9fbXJvX18iIGZvciB0aGUgYmFzZSBjbGFzcyAiQSJcbiAgIGltbWVkaWF0ZWx5IHByZWNlZGluZyAiQiIgYW5kIHRoZW4gaW52b2tlcyB0aGUgZGVzY3JpcHRvciB3aXRoIHRoZVxuICAgY2FsbDogIkEuX19kaWN0X19bXCdtXCddLl9fZ2V0X18ob2JqLCBvYmouX19jbGFzc19fKSIuXG5cbkZvciBpbnN0YW5jZSBiaW5kaW5ncywgdGhlIHByZWNlZGVuY2Ugb2YgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGRlcGVuZHNcbm9uIHRoZSB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgYXJlIGRlZmluZWQuICBBIGRlc2NyaXB0b3IgY2FuIGRlZmluZVxuYW55IGNvbWJpbmF0aW9uIG9mICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiBhbmQgIl9fZGVsZXRlX18oKSIuICBJZiBpdFxuZG9lcyBub3QgZGVmaW5lICJfX2dldF9fKCkiLCB0aGVuIGFjY2Vzc2luZyB0aGUgYXR0cmlidXRlIHdpbGwgcmV0dXJuXG50aGUgZGVzY3JpcHRvciBvYmplY3QgaXRzZWxmIHVubGVzcyB0aGVyZSBpcyBhIHZhbHVlIGluIHRoZSBvYmplY3RcJ3Ncbmluc3RhbmNlIGRpY3Rpb25hcnkuICBJZiB0aGUgZGVzY3JpcHRvciBkZWZpbmVzICJfX3NldF9fKCkiIGFuZC9vclxuIl9fZGVsZXRlX18oKSIsIGl0IGlzIGEgZGF0YSBkZXNjcmlwdG9yOyBpZiBpdCBkZWZpbmVzIG5laXRoZXIsIGl0IGlzXG5hIG5vbi1kYXRhIGRlc2NyaXB0b3IuICBOb3JtYWxseSwgZGF0YSBkZXNjcmlwdG9ycyBkZWZpbmUgYm90aFxuIl9fZ2V0X18oKSIgYW5kICJfX3NldF9fKCkiLCB3aGlsZSBub24tZGF0YSBkZXNjcmlwdG9ycyBoYXZlIGp1c3QgdGhlXG4iX19nZXRfXygpIiBtZXRob2QuICBEYXRhIGRlc2NyaXB0b3JzIHdpdGggIl9fc2V0X18oKSIgYW5kICJfX2dldF9fKCkiXG5kZWZpbmVkIGFsd2F5cyBvdmVycmlkZSBhIHJlZGVmaW5pdGlvbiBpbiBhbiBpbnN0YW5jZSBkaWN0aW9uYXJ5LiAgSW5cbmNvbnRyYXN0LCBub24tZGF0YSBkZXNjcmlwdG9ycyBjYW4gYmUgb3ZlcnJpZGRlbiBieSBpbnN0YW5jZXMuXG5cblB5dGhvbiBtZXRob2RzIChpbmNsdWRpbmcgInN0YXRpY21ldGhvZCgpIiBhbmQgImNsYXNzbWV0aG9kKCkiKSBhcmVcbmltcGxlbWVudGVkIGFzIG5vbi1kYXRhIGRlc2NyaXB0b3JzLiAgQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5cbnJlZGVmaW5lIGFuZCBvdmVycmlkZSBtZXRob2RzLiAgVGhpcyBhbGxvd3MgaW5kaXZpZHVhbCBpbnN0YW5jZXMgdG9cbmFjcXVpcmUgYmVoYXZpb3JzIHRoYXQgZGlmZmVyIGZyb20gb3RoZXIgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzLlxuXG5UaGUgInByb3BlcnR5KCkiIGZ1bmN0aW9uIGlzIGltcGxlbWVudGVkIGFzIGEgZGF0YSBkZXNjcmlwdG9yLlxuQWNjb3JkaW5nbHksIGluc3RhbmNlcyBjYW5ub3Qgb3ZlcnJpZGUgdGhlIGJlaGF2aW9yIG9mIGEgcHJvcGVydHkuXG5cblxuX19zbG90c19fXG49PT09PT09PT1cblxuQnkgZGVmYXVsdCwgaW5zdGFuY2VzIG9mIGNsYXNzZXMgaGF2ZSBhIGRpY3Rpb25hcnkgZm9yIGF0dHJpYnV0ZVxuc3RvcmFnZS4gIFRoaXMgd2FzdGVzIHNwYWNlIGZvciBvYmplY3RzIGhhdmluZyB2ZXJ5IGZldyBpbnN0YW5jZVxudmFyaWFibGVzLiAgVGhlIHNwYWNlIGNvbnN1bXB0aW9uIGNhbiBiZWNvbWUgYWN1dGUgd2hlbiBjcmVhdGluZyBsYXJnZVxubnVtYmVycyBvZiBpbnN0YW5jZXMuXG5cblRoZSBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGJ5IGRlZmluaW5nICpfX3Nsb3RzX18qIGluIGEgY2xhc3NcbmRlZmluaXRpb24uIFRoZSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiB0YWtlcyBhIHNlcXVlbmNlIG9mIGluc3RhbmNlXG52YXJpYWJsZXMgYW5kIHJlc2VydmVzIGp1c3QgZW5vdWdoIHNwYWNlIGluIGVhY2ggaW5zdGFuY2UgdG8gaG9sZCBhXG52YWx1ZSBmb3IgZWFjaCB2YXJpYWJsZS4gIFNwYWNlIGlzIHNhdmVkIGJlY2F1c2UgKl9fZGljdF9fKiBpcyBub3RcbmNyZWF0ZWQgZm9yIGVhY2ggaW5zdGFuY2UuXG5cbm9iamVjdC5fX3Nsb3RzX19cblxuICAgVGhpcyBjbGFzcyB2YXJpYWJsZSBjYW4gYmUgYXNzaWduZWQgYSBzdHJpbmcsIGl0ZXJhYmxlLCBvciBzZXF1ZW5jZVxuICAgb2Ygc3RyaW5ncyB3aXRoIHZhcmlhYmxlIG5hbWVzIHVzZWQgYnkgaW5zdGFuY2VzLiAgKl9fc2xvdHNfXypcbiAgIHJlc2VydmVzIHNwYWNlIGZvciB0aGUgZGVjbGFyZWQgdmFyaWFibGVzIGFuZCBwcmV2ZW50cyB0aGVcbiAgIGF1dG9tYXRpYyBjcmVhdGlvbiBvZiAqX19kaWN0X18qIGFuZCAqX193ZWFrcmVmX18qIGZvciBlYWNoXG4gICBpbnN0YW5jZS5cblxuXG5Ob3RlcyBvbiB1c2luZyAqX19zbG90c19fKlxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuKiBXaGVuIGluaGVyaXRpbmcgZnJvbSBhIGNsYXNzIHdpdGhvdXQgKl9fc2xvdHNfXyosIHRoZSAqX19kaWN0X18qXG4gIGF0dHJpYnV0ZSBvZiB0aGF0IGNsYXNzIHdpbGwgYWx3YXlzIGJlIGFjY2Vzc2libGUsIHNvIGEgKl9fc2xvdHNfXypcbiAgZGVmaW5pdGlvbiBpbiB0aGUgc3ViY2xhc3MgaXMgbWVhbmluZ2xlc3MuXG5cbiogV2l0aG91dCBhICpfX2RpY3RfXyogdmFyaWFibGUsIGluc3RhbmNlcyBjYW5ub3QgYmUgYXNzaWduZWQgbmV3XG4gIHZhcmlhYmxlcyBub3QgbGlzdGVkIGluIHRoZSAqX19zbG90c19fKiBkZWZpbml0aW9uLiAgQXR0ZW1wdHMgdG9cbiAgYXNzaWduIHRvIGFuIHVubGlzdGVkIHZhcmlhYmxlIG5hbWUgcmFpc2VzICJBdHRyaWJ1dGVFcnJvciIuIElmXG4gIGR5bmFtaWMgYXNzaWdubWVudCBvZiBuZXcgdmFyaWFibGVzIGlzIGRlc2lyZWQsIHRoZW4gYWRkXG4gICJcJ19fZGljdF9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiBXaXRob3V0IGEgKl9fd2Vha3JlZl9fKiB2YXJpYWJsZSBmb3IgZWFjaCBpbnN0YW5jZSwgY2xhc3Nlc1xuICBkZWZpbmluZyAqX19zbG90c19fKiBkbyBub3Qgc3VwcG9ydCB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzXG4gIGluc3RhbmNlcy4gSWYgd2VhayByZWZlcmVuY2Ugc3VwcG9ydCBpcyBuZWVkZWQsIHRoZW4gYWRkXG4gICJcJ19fd2Vha3JlZl9fXCciIHRvIHRoZSBzZXF1ZW5jZSBvZiBzdHJpbmdzIGluIHRoZSAqX19zbG90c19fKlxuICBkZWNsYXJhdGlvbi5cblxuKiAqX19zbG90c19fKiBhcmUgaW1wbGVtZW50ZWQgYXQgdGhlIGNsYXNzIGxldmVsIGJ5IGNyZWF0aW5nXG4gIGRlc2NyaXB0b3JzICgqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKikgZm9yIGVhY2ggdmFyaWFibGUgbmFtZS4gIEFzXG4gIGEgcmVzdWx0LCBjbGFzcyBhdHRyaWJ1dGVzIGNhbm5vdCBiZSB1c2VkIHRvIHNldCBkZWZhdWx0IHZhbHVlcyBmb3JcbiAgaW5zdGFuY2UgdmFyaWFibGVzIGRlZmluZWQgYnkgKl9fc2xvdHNfXyo7IG90aGVyd2lzZSwgdGhlIGNsYXNzXG4gIGF0dHJpYnV0ZSB3b3VsZCBvdmVyd3JpdGUgdGhlIGRlc2NyaXB0b3IgYXNzaWdubWVudC5cblxuKiBUaGUgYWN0aW9uIG9mIGEgKl9fc2xvdHNfXyogZGVjbGFyYXRpb24gaXMgbGltaXRlZCB0byB0aGUgY2xhc3NcbiAgd2hlcmUgaXQgaXMgZGVmaW5lZC4gIEFzIGEgcmVzdWx0LCBzdWJjbGFzc2VzIHdpbGwgaGF2ZSBhICpfX2RpY3RfXypcbiAgdW5sZXNzIHRoZXkgYWxzbyBkZWZpbmUgKl9fc2xvdHNfXyogKHdoaWNoIG11c3Qgb25seSBjb250YWluIG5hbWVzXG4gIG9mIGFueSAqYWRkaXRpb25hbCogc2xvdHMpLlxuXG4qIElmIGEgY2xhc3MgZGVmaW5lcyBhIHNsb3QgYWxzbyBkZWZpbmVkIGluIGEgYmFzZSBjbGFzcywgdGhlXG4gIGluc3RhbmNlIHZhcmlhYmxlIGRlZmluZWQgYnkgdGhlIGJhc2UgY2xhc3Mgc2xvdCBpcyBpbmFjY2Vzc2libGVcbiAgKGV4Y2VwdCBieSByZXRyaWV2aW5nIGl0cyBkZXNjcmlwdG9yIGRpcmVjdGx5IGZyb20gdGhlIGJhc2UgY2xhc3MpLlxuICBUaGlzIHJlbmRlcnMgdGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0gdW5kZWZpbmVkLiAgSW4gdGhlIGZ1dHVyZSwgYVxuICBjaGVjayBtYXkgYmUgYWRkZWQgdG8gcHJldmVudCB0aGlzLlxuXG4qIE5vbmVtcHR5ICpfX3Nsb3RzX18qIGRvZXMgbm90IHdvcmsgZm9yIGNsYXNzZXMgZGVyaXZlZCBmcm9tXG4gICJ2YXJpYWJsZS1sZW5ndGgiIGJ1aWx0LWluIHR5cGVzIHN1Y2ggYXMgImludCIsICJieXRlcyIgYW5kICJ0dXBsZSIuXG5cbiogQW55IG5vbi1zdHJpbmcgaXRlcmFibGUgbWF5IGJlIGFzc2lnbmVkIHRvICpfX3Nsb3RzX18qLiBNYXBwaW5nc1xuICBtYXkgYWxzbyBiZSB1c2VkOyBob3dldmVyLCBpbiB0aGUgZnV0dXJlLCBzcGVjaWFsIG1lYW5pbmcgbWF5IGJlXG4gIGFzc2lnbmVkIHRvIHRoZSB2YWx1ZXMgY29ycmVzcG9uZGluZyB0byBlYWNoIGtleS5cblxuKiAqX19jbGFzc19fKiBhc3NpZ25tZW50IHdvcmtzIG9ubHkgaWYgYm90aCBjbGFzc2VzIGhhdmUgdGhlIHNhbWVcbiAgKl9fc2xvdHNfXyouXG4nLAorICdhdHRyaWJ1dGUtcmVmZXJlbmNlcyc6IHUnXG5BdHRyaWJ1dGUgcmVmZXJlbmNlc1xuKioqKioqKioqKioqKioqKioqKipcblxuQW4gYXR0cmlidXRlIHJlZmVyZW5jZSBpcyBhIHByaW1hcnkgZm9sbG93ZWQgYnkgYSBwZXJpb2QgYW5kIGEgbmFtZTpcblxuICAgYXR0cmlidXRlcmVmIDo6PSBwcmltYXJ5ICIuIiBpZGVudGlmaWVyXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYW4gb2JqZWN0IG9mIGEgdHlwZSB0aGF0IHN1cHBvcnRzXG5hdHRyaWJ1dGUgcmVmZXJlbmNlcywgd2hpY2ggbW9zdCBvYmplY3RzIGRvLiAgVGhpcyBvYmplY3QgaXMgdGhlblxuYXNrZWQgdG8gcHJvZHVjZSB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXMgdGhlIGlkZW50aWZpZXIuICBUaGlzXG5wcm9kdWN0aW9uIGNhbiBiZSBjdXN0b21pemVkIGJ5IG92ZXJyaWRpbmcgdGhlICJfX2dldGF0dHJfXygpIiBtZXRob2QuXG5JZiB0aGlzIGF0dHJpYnV0ZSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgZXhjZXB0aW9uICJBdHRyaWJ1dGVFcnJvciIgaXNcbnJhaXNlZC4gIE90aGVyd2lzZSwgdGhlIHR5cGUgYW5kIHZhbHVlIG9mIHRoZSBvYmplY3QgcHJvZHVjZWQgaXNcbmRldGVybWluZWQgYnkgdGhlIG9iamVjdC4gIE11bHRpcGxlIGV2YWx1YXRpb25zIG9mIHRoZSBzYW1lIGF0dHJpYnV0ZVxucmVmZXJlbmNlIG1heSB5aWVsZCBkaWZmZXJlbnQgb2JqZWN0cy5cbicsCisgJ2F1Z2Fzc2lnbic6IHUnXG5BdWdtZW50ZWQgYXNzaWdubWVudCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkF1Z21lbnRlZCBhc3NpZ25tZW50IGlzIHRoZSBjb21iaW5hdGlvbiwgaW4gYSBzaW5nbGUgc3RhdGVtZW50LCBvZiBhXG5iaW5hcnkgb3BlcmF0aW9uIGFuZCBhbiBhc3NpZ25tZW50IHN0YXRlbWVudDpcblxuICAgYXVnbWVudGVkX2Fzc2lnbm1lbnRfc3RtdCA6Oj0gYXVndGFyZ2V0IGF1Z29wIChleHByZXNzaW9uX2xpc3QgfCB5aWVsZF9leHByZXNzaW9uKVxuICAgYXVndGFyZ2V0ICAgICAgICAgICAgICAgICA6Oj0gaWRlbnRpZmllciB8IGF0dHJpYnV0ZXJlZiB8IHN1YnNjcmlwdGlvbiB8IHNsaWNpbmdcbiAgIGF1Z29wICAgICAgICAgICAgICAgICAgICAgOjo9ICIrPSIgfCAiLT0iIHwgIio9IiB8ICIvPSIgfCAiLy89IiB8ICIlPSIgfCAiKio9IlxuICAgICAgICAgICAgIHwgIj4+PSIgfCAiPDw9IiB8ICImPSIgfCAiXj0iIHwgInw9IlxuXG4oU2VlIHNlY3Rpb24gKlByaW1hcmllcyogZm9yIHRoZSBzeW50YXggZGVmaW5pdGlvbnMgb2YgdGhlIGxhc3QgdGhyZWVcbnN5bWJvbHMuKVxuXG5BbiBhdWdtZW50ZWQgYXNzaWdubWVudCBldmFsdWF0ZXMgdGhlIHRhcmdldCAod2hpY2gsIHVubGlrZSBub3JtYWxcbmFzc2lnbm1lbnQgc3RhdGVtZW50cywgY2Fubm90IGJlIGFuIHVucGFja2luZykgYW5kIHRoZSBleHByZXNzaW9uXG5saXN0LCBwZXJmb3JtcyB0aGUgYmluYXJ5IG9wZXJhdGlvbiBzcGVjaWZpYyB0byB0aGUgdHlwZSBvZiBhc3NpZ25tZW50XG5vbiB0aGUgdHdvIG9wZXJhbmRzLCBhbmQgYXNzaWducyB0aGUgcmVzdWx0IHRvIHRoZSBvcmlnaW5hbCB0YXJnZXQuXG5UaGUgdGFyZ2V0IGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuXG5cbkFuIGF1Z21lbnRlZCBhc3NpZ25tZW50IGV4cHJlc3Npb24gbGlrZSAieCArPSAxIiBjYW4gYmUgcmV3cml0dGVuIGFzXG4ieCA9IHggKyAxIiB0byBhY2hpZXZlIGEgc2ltaWxhciwgYnV0IG5vdCBleGFjdGx5IGVxdWFsIGVmZmVjdC4gSW4gdGhlXG5hdWdtZW50ZWQgdmVyc2lvbiwgIngiIGlzIG9ubHkgZXZhbHVhdGVkIG9uY2UuIEFsc28sIHdoZW4gcG9zc2libGUsXG50aGUgYWN0dWFsIG9wZXJhdGlvbiBpcyBwZXJmb3JtZWQgKmluLXBsYWNlKiwgbWVhbmluZyB0aGF0IHJhdGhlciB0aGFuXG5jcmVhdGluZyBhIG5ldyBvYmplY3QgYW5kIGFzc2lnbmluZyB0aGF0IHRvIHRoZSB0YXJnZXQsIHRoZSBvbGQgb2JqZWN0XG5pcyBtb2RpZmllZCBpbnN0ZWFkLlxuXG5Vbmxpa2Ugbm9ybWFsIGFzc2lnbm1lbnRzLCBhdWdtZW50ZWQgYXNzaWdubWVudHMgZXZhbHVhdGUgdGhlIGxlZnQtXG5oYW5kIHNpZGUgKmJlZm9yZSogZXZhbHVhdGluZyB0aGUgcmlnaHQtaGFuZCBzaWRlLiAgRm9yIGV4YW1wbGUsICJhW2ldXG4rPSBmKHgpIiBmaXJzdCBsb29rcy11cCAiYVtpXSIsIHRoZW4gaXQgZXZhbHVhdGVzICJmKHgpIiBhbmQgcGVyZm9ybXNcbnRoZSBhZGRpdGlvbiwgYW5kIGxhc3RseSwgaXQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byAiYVtpXSIuXG5cbldpdGggdGhlIGV4Y2VwdGlvbiBvZiBhc3NpZ25pbmcgdG8gdHVwbGVzIGFuZCBtdWx0aXBsZSB0YXJnZXRzIGluIGFcbnNpbmdsZSBzdGF0ZW1lbnQsIHRoZSBhc3NpZ25tZW50IGRvbmUgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnRcbnN0YXRlbWVudHMgaXMgaGFuZGxlZCB0aGUgc2FtZSB3YXkgYXMgbm9ybWFsIGFzc2lnbm1lbnRzLiBTaW1pbGFybHksXG53aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIHBvc3NpYmxlICppbi1wbGFjZSogYmVoYXZpb3IsIHRoZSBiaW5hcnlcbm9wZXJhdGlvbiBwZXJmb3JtZWQgYnkgYXVnbWVudGVkIGFzc2lnbm1lbnQgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbFxuYmluYXJ5IG9wZXJhdGlvbnMuXG5cbkZvciB0YXJnZXRzIHdoaWNoIGFyZSBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgdGhlIHNhbWUgKmNhdmVhdCBhYm91dFxuY2xhc3MgYW5kIGluc3RhbmNlIGF0dHJpYnV0ZXMqIGFwcGxpZXMgYXMgZm9yIHJlZ3VsYXIgYXNzaWdubWVudHMuXG4nLAorICdiaW5hcnknOiB1J1xuQmluYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgYmluYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyBoYXZlIHRoZSBjb252ZW50aW9uYWwgcHJpb3JpdHlcbmxldmVscy4gIE5vdGUgdGhhdCBzb21lIG9mIHRoZXNlIG9wZXJhdGlvbnMgYWxzbyBhcHBseSB0byBjZXJ0YWluIG5vbi1cbm51bWVyaWMgdHlwZXMuICBBcGFydCBmcm9tIHRoZSBwb3dlciBvcGVyYXRvciwgdGhlcmUgYXJlIG9ubHkgdHdvXG5sZXZlbHMsIG9uZSBmb3IgbXVsdGlwbGljYXRpdmUgb3BlcmF0b3JzIGFuZCBvbmUgZm9yIGFkZGl0aXZlXG5vcGVyYXRvcnM6XG5cbiAgIG1fZXhwciA6Oj0gdV9leHByIHwgbV9leHByICIqIiB1X2V4cHIgfCBtX2V4cHIgIi8vIiB1X2V4cHIgfCBtX2V4cHIgIi8iIHVfZXhwclxuICAgICAgICAgICAgICB8IG1fZXhwciAiJSIgdV9leHByXG4gICBhX2V4cHIgOjo9IG1fZXhwciB8IGFfZXhwciAiKyIgbV9leHByIHwgYV9leHByICItIiBtX2V4cHJcblxuVGhlICIqIiAobXVsdGlwbGljYXRpb24pIG9wZXJhdG9yIHlpZWxkcyB0aGUgcHJvZHVjdCBvZiBpdHMgYXJndW1lbnRzLlxuVGhlIGFyZ3VtZW50cyBtdXN0IGVpdGhlciBib3RoIGJlIG51bWJlcnMsIG9yIG9uZSBhcmd1bWVudCBtdXN0IGJlIGFuXG5pbnRlZ2VyIGFuZCB0aGUgb3RoZXIgbXVzdCBiZSBhIHNlcXVlbmNlLiBJbiB0aGUgZm9ybWVyIGNhc2UsIHRoZVxubnVtYmVycyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUgYW5kIHRoZW4gbXVsdGlwbGllZCB0b2dldGhlci5cbkluIHRoZSBsYXR0ZXIgY2FzZSwgc2VxdWVuY2UgcmVwZXRpdGlvbiBpcyBwZXJmb3JtZWQ7IGEgbmVnYXRpdmVcbnJlcGV0aXRpb24gZmFjdG9yIHlpZWxkcyBhbiBlbXB0eSBzZXF1ZW5jZS5cblxuVGhlICIvIiAoZGl2aXNpb24pIGFuZCAiLy8iIChmbG9vciBkaXZpc2lvbikgb3BlcmF0b3JzIHlpZWxkIHRoZVxucXVvdGllbnQgb2YgdGhlaXIgYXJndW1lbnRzLiAgVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZSBmaXJzdFxuY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuIERpdmlzaW9uIG9mIGludGVnZXJzIHlpZWxkcyBhIGZsb2F0LCB3aGlsZVxuZmxvb3IgZGl2aXNpb24gb2YgaW50ZWdlcnMgcmVzdWx0cyBpbiBhbiBpbnRlZ2VyOyB0aGUgcmVzdWx0IGlzIHRoYXRcbm9mIG1hdGhlbWF0aWNhbCBkaXZpc2lvbiB3aXRoIHRoZSBcJ2Zsb29yXCcgZnVuY3Rpb24gYXBwbGllZCB0byB0aGVcbnJlc3VsdC4gIERpdmlzaW9uIGJ5IHplcm8gcmFpc2VzIHRoZSAiWmVyb0RpdmlzaW9uRXJyb3IiIGV4Y2VwdGlvbi5cblxuVGhlICIlIiAobW9kdWxvKSBvcGVyYXRvciB5aWVsZHMgdGhlIHJlbWFpbmRlciBmcm9tIHRoZSBkaXZpc2lvbiBvZlxudGhlIGZpcnN0IGFyZ3VtZW50IGJ5IHRoZSBzZWNvbmQuICBUaGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGZpcnN0XG5jb252ZXJ0ZWQgdG8gYSBjb21tb24gdHlwZS4gIEEgemVybyByaWdodCBhcmd1bWVudCByYWlzZXMgdGhlXG4iWmVyb0RpdmlzaW9uRXJyb3IiIGV4Y2VwdGlvbi4gIFRoZSBhcmd1bWVudHMgbWF5IGJlIGZsb2F0aW5nIHBvaW50XG5udW1iZXJzLCBlLmcuLCAiMy4xNCUwLjciIGVxdWFscyAiMC4zNCIgKHNpbmNlICIzLjE0IiBlcXVhbHMgIjQqMC43ICtcbjAuMzQiLikgIFRoZSBtb2R1bG8gb3BlcmF0b3IgYWx3YXlzIHlpZWxkcyBhIHJlc3VsdCB3aXRoIHRoZSBzYW1lIHNpZ25cbmFzIGl0cyBzZWNvbmQgb3BlcmFuZCAob3IgemVybyk7IHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgcmVzdWx0IGlzXG5zdHJpY3RseSBzbWFsbGVyIHRoYW4gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBzZWNvbmQgb3BlcmFuZCBbMV0uXG5cblRoZSBmbG9vciBkaXZpc2lvbiBhbmQgbW9kdWxvIG9wZXJhdG9ycyBhcmUgY29ubmVjdGVkIGJ5IHRoZSBmb2xsb3dpbmdcbmlkZW50aXR5OiAieCA9PSAoeC8veSkqeSArICh4JXkpIi4gIEZsb29yIGRpdmlzaW9uIGFuZCBtb2R1bG8gYXJlIGFsc29cbmNvbm5lY3RlZCB3aXRoIHRoZSBidWlsdC1pbiBmdW5jdGlvbiAiZGl2bW9kKCkiOiAiZGl2bW9kKHgsIHkpID09XG4oeC8veSwgeCV5KSIuIFsyXS5cblxuSW4gYWRkaXRpb24gdG8gcGVyZm9ybWluZyB0aGUgbW9kdWxvIG9wZXJhdGlvbiBvbiBudW1iZXJzLCB0aGUgIiUiXG5vcGVyYXRvciBpcyBhbHNvIG92ZXJsb2FkZWQgYnkgc3RyaW5nIG9iamVjdHMgdG8gcGVyZm9ybSBvbGQtc3R5bGVcbnN0cmluZyBmb3JtYXR0aW5nIChhbHNvIGtub3duIGFzIGludGVycG9sYXRpb24pLiAgVGhlIHN5bnRheCBmb3JcbnN0cmluZyBmb3JtYXR0aW5nIGlzIGRlc2NyaWJlZCBpbiB0aGUgUHl0aG9uIExpYnJhcnkgUmVmZXJlbmNlLFxuc2VjdGlvbiAqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKi5cblxuVGhlIGZsb29yIGRpdmlzaW9uIG9wZXJhdG9yLCB0aGUgbW9kdWxvIG9wZXJhdG9yLCBhbmQgdGhlICJkaXZtb2QoKSJcbmZ1bmN0aW9uIGFyZSBub3QgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzLiAgSW5zdGVhZCwgY29udmVydCB0byBhXG5mbG9hdGluZyBwb2ludCBudW1iZXIgdXNpbmcgdGhlICJhYnMoKSIgZnVuY3Rpb24gaWYgYXBwcm9wcmlhdGUuXG5cblRoZSAiKyIgKGFkZGl0aW9uKSBvcGVyYXRvciB5aWVsZHMgdGhlIHN1bSBvZiBpdHMgYXJndW1lbnRzLiAgVGhlXG5hcmd1bWVudHMgbXVzdCBlaXRoZXIgYm90aCBiZSBudW1iZXJzIG9yIGJvdGggYmUgc2VxdWVuY2VzIG9mIHRoZSBzYW1lXG50eXBlLiAgSW4gdGhlIGZvcm1lciBjYXNlLCB0aGUgbnVtYmVycyBhcmUgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGVcbmFuZCB0aGVuIGFkZGVkIHRvZ2V0aGVyLiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoZSBzZXF1ZW5jZXMgYXJlXG5jb25jYXRlbmF0ZWQuXG5cblRoZSAiLSIgKHN1YnRyYWN0aW9uKSBvcGVyYXRvciB5aWVsZHMgdGhlIGRpZmZlcmVuY2Ugb2YgaXRzIGFyZ3VtZW50cy5cblRoZSBudW1lcmljIGFyZ3VtZW50cyBhcmUgZmlyc3QgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUuXG4nLAorICdiaXR3aXNlJzogdSdcbkJpbmFyeSBiaXR3aXNlIG9wZXJhdGlvbnNcbioqKioqKioqKioqKioqKioqKioqKioqKipcblxuRWFjaCBvZiB0aGUgdGhyZWUgYml0d2lzZSBvcGVyYXRpb25zIGhhcyBhIGRpZmZlcmVudCBwcmlvcml0eSBsZXZlbDpcblxuICAgYW5kX2V4cHIgOjo9IHNoaWZ0X2V4cHIgfCBhbmRfZXhwciAiJiIgc2hpZnRfZXhwclxuICAgeG9yX2V4cHIgOjo9IGFuZF9leHByIHwgeG9yX2V4cHIgIl4iIGFuZF9leHByXG4gICBvcl9leHByICA6Oj0geG9yX2V4cHIgfCBvcl9leHByICJ8IiB4b3JfZXhwclxuXG5UaGUgIiYiIG9wZXJhdG9yIHlpZWxkcyB0aGUgYml0d2lzZSBBTkQgb2YgaXRzIGFyZ3VtZW50cywgd2hpY2ggbXVzdFxuYmUgaW50ZWdlcnMuXG5cblRoZSAiXiIgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIFhPUiAoZXhjbHVzaXZlIE9SKSBvZiBpdHNcbmFyZ3VtZW50cywgd2hpY2ggbXVzdCBiZSBpbnRlZ2Vycy5cblxuVGhlICJ8IiBvcGVyYXRvciB5aWVsZHMgdGhlIGJpdHdpc2UgKGluY2x1c2l2ZSkgT1Igb2YgaXRzIGFyZ3VtZW50cyxcbndoaWNoIG11c3QgYmUgaW50ZWdlcnMuXG4nLAorICdibHRpbi1jb2RlLW9iamVjdHMnOiB1J1xuQ29kZSBPYmplY3RzXG4qKioqKioqKioqKipcblxuQ29kZSBvYmplY3RzIGFyZSB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiB0byByZXByZXNlbnQgInBzZXVkby1cbmNvbXBpbGVkIiBleGVjdXRhYmxlIFB5dGhvbiBjb2RlIHN1Y2ggYXMgYSBmdW5jdGlvbiBib2R5LiBUaGV5IGRpZmZlclxuZnJvbSBmdW5jdGlvbiBvYmplY3RzIGJlY2F1c2UgdGhleSBkb25cJ3QgY29udGFpbiBhIHJlZmVyZW5jZSB0byB0aGVpclxuZ2xvYmFsIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC4gIENvZGUgb2JqZWN0cyBhcmUgcmV0dXJuZWQgYnkgdGhlIGJ1aWx0LVxuaW4gImNvbXBpbGUoKSIgZnVuY3Rpb24gYW5kIGNhbiBiZSBleHRyYWN0ZWQgZnJvbSBmdW5jdGlvbiBvYmplY3RzXG50aHJvdWdoIHRoZWlyICJfX2NvZGVfXyIgYXR0cmlidXRlLiBTZWUgYWxzbyB0aGUgImNvZGUiIG1vZHVsZS5cblxuQSBjb2RlIG9iamVjdCBjYW4gYmUgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkIGJ5IHBhc3NpbmcgaXQgKGluc3RlYWQgb2YgYVxuc291cmNlIHN0cmluZykgdG8gdGhlICJleGVjKCkiIG9yICJldmFsKCkiICBidWlsdC1pbiBmdW5jdGlvbnMuXG5cblNlZSAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5KiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbicsCisgJ2JsdGluLWVsbGlwc2lzLW9iamVjdCc6IHUnXG5UaGUgRWxsaXBzaXMgT2JqZWN0XG4qKioqKioqKioqKioqKioqKioqXG5cblRoaXMgb2JqZWN0IGlzIGNvbW1vbmx5IHVzZWQgYnkgc2xpY2luZyAoc2VlICpTbGljaW5ncyopLiAgSXQgc3VwcG9ydHNcbm5vIHNwZWNpYWwgb3BlcmF0aW9ucy4gIFRoZXJlIGlzIGV4YWN0bHkgb25lIGVsbGlwc2lzIG9iamVjdCwgbmFtZWRcbiJFbGxpcHNpcyIgKGEgYnVpbHQtaW4gbmFtZSkuICAidHlwZShFbGxpcHNpcykoKSIgcHJvZHVjZXMgdGhlXG4iRWxsaXBzaXMiIHNpbmdsZXRvbi5cblxuSXQgaXMgd3JpdHRlbiBhcyAiRWxsaXBzaXMiIG9yICIuLi4iLlxuJywKKyAnYmx0aW4tbnVsbC1vYmplY3QnOiB1J1xuVGhlIE51bGwgT2JqZWN0XG4qKioqKioqKioqKioqKipcblxuVGhpcyBvYmplY3QgaXMgcmV0dXJuZWQgYnkgZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuIGFcbnZhbHVlLiAgSXQgc3VwcG9ydHMgbm8gc3BlY2lhbCBvcGVyYXRpb25zLiAgVGhlcmUgaXMgZXhhY3RseSBvbmUgbnVsbFxub2JqZWN0LCBuYW1lZCAiTm9uZSIgKGEgYnVpbHQtaW4gbmFtZSkuICAidHlwZShOb25lKSgpIiBwcm9kdWNlcyB0aGVcbnNhbWUgc2luZ2xldG9uLlxuXG5JdCBpcyB3cml0dGVuIGFzICJOb25lIi5cbicsCisgJ2JsdGluLXR5cGUtb2JqZWN0cyc6IHUnXG5UeXBlIE9iamVjdHNcbioqKioqKioqKioqKlxuXG5UeXBlIG9iamVjdHMgcmVwcmVzZW50IHRoZSB2YXJpb3VzIG9iamVjdCB0eXBlcy4gIEFuIG9iamVjdFwncyB0eXBlIGlzXG5hY2Nlc3NlZCBieSB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gInR5cGUoKSIuICBUaGVyZSBhcmUgbm8gc3BlY2lhbFxub3BlcmF0aW9ucyBvbiB0eXBlcy4gIFRoZSBzdGFuZGFyZCBtb2R1bGUgInR5cGVzIiBkZWZpbmVzIG5hbWVzIGZvclxuYWxsIHN0YW5kYXJkIGJ1aWx0LWluIHR5cGVzLlxuXG5UeXBlcyBhcmUgd3JpdHRlbiBsaWtlIHRoaXM6ICI8Y2xhc3MgXCdpbnRcJz4iLlxuJywKKyAnYm9vbGVhbnMnOiB1J1xuQm9vbGVhbiBvcGVyYXRpb25zXG4qKioqKioqKioqKioqKioqKipcblxuICAgb3JfdGVzdCAgOjo9IGFuZF90ZXN0IHwgb3JfdGVzdCAib3IiIGFuZF90ZXN0XG4gICBhbmRfdGVzdCA6Oj0gbm90X3Rlc3QgfCBhbmRfdGVzdCAiYW5kIiBub3RfdGVzdFxuICAgbm90X3Rlc3QgOjo9IGNvbXBhcmlzb24gfCAibm90IiBub3RfdGVzdFxuXG5JbiB0aGUgY29udGV4dCBvZiBCb29sZWFuIG9wZXJhdGlvbnMsIGFuZCBhbHNvIHdoZW4gZXhwcmVzc2lvbnMgYXJlXG51c2VkIGJ5IGNvbnRyb2wgZmxvdyBzdGF0ZW1lbnRzLCB0aGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWRcbmFzIGZhbHNlOiAiRmFsc2UiLCAiTm9uZSIsIG51bWVyaWMgemVybyBvZiBhbGwgdHlwZXMsIGFuZCBlbXB0eVxuc3RyaW5ncyBhbmQgY29udGFpbmVycyAoaW5jbHVkaW5nIHN0cmluZ3MsIHR1cGxlcywgbGlzdHMsXG5kaWN0aW9uYXJpZXMsIHNldHMgYW5kIGZyb3plbnNldHMpLiAgQWxsIG90aGVyIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWRcbmFzIHRydWUuICBVc2VyLWRlZmluZWQgb2JqZWN0cyBjYW4gY3VzdG9taXplIHRoZWlyIHRydXRoIHZhbHVlIGJ5XG5wcm92aWRpbmcgYSAiX19ib29sX18oKSIgbWV0aG9kLlxuXG5UaGUgb3BlcmF0b3IgIm5vdCIgeWllbGRzICJUcnVlIiBpZiBpdHMgYXJndW1lbnQgaXMgZmFsc2UsICJGYWxzZSJcbm90aGVyd2lzZS5cblxuVGhlIGV4cHJlc3Npb24gInggYW5kIHkiIGZpcnN0IGV2YWx1YXRlcyAqeCo7IGlmICp4KiBpcyBmYWxzZSwgaXRzXG52YWx1ZSBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlLCAqeSogaXMgZXZhbHVhdGVkIGFuZCB0aGUgcmVzdWx0aW5nIHZhbHVlXG5pcyByZXR1cm5lZC5cblxuVGhlIGV4cHJlc3Npb24gInggb3IgeSIgZmlyc3QgZXZhbHVhdGVzICp4KjsgaWYgKngqIGlzIHRydWUsIGl0cyB2YWx1ZVxuaXMgcmV0dXJuZWQ7IG90aGVyd2lzZSwgKnkqIGlzIGV2YWx1YXRlZCBhbmQgdGhlIHJlc3VsdGluZyB2YWx1ZSBpc1xucmV0dXJuZWQuXG5cbihOb3RlIHRoYXQgbmVpdGhlciAiYW5kIiBub3IgIm9yIiByZXN0cmljdCB0aGUgdmFsdWUgYW5kIHR5cGUgdGhleVxucmV0dXJuIHRvICJGYWxzZSIgYW5kICJUcnVlIiwgYnV0IHJhdGhlciByZXR1cm4gdGhlIGxhc3QgZXZhbHVhdGVkXG5hcmd1bWVudC4gIFRoaXMgaXMgc29tZXRpbWVzIHVzZWZ1bCwgZS5nLiwgaWYgInMiIGlzIGEgc3RyaW5nIHRoYXRcbnNob3VsZCBiZSByZXBsYWNlZCBieSBhIGRlZmF1bHQgdmFsdWUgaWYgaXQgaXMgZW1wdHksIHRoZSBleHByZXNzaW9uXG4icyBvciBcJ2Zvb1wnIiB5aWVsZHMgdGhlIGRlc2lyZWQgdmFsdWUuICBCZWNhdXNlICJub3QiIGhhcyB0byBjcmVhdGUgYVxubmV3IHZhbHVlLCBpdCByZXR1cm5zIGEgYm9vbGVhbiB2YWx1ZSByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIG9mIGl0c1xuYXJndW1lbnQgKGZvciBleGFtcGxlLCAibm90IFwnZm9vXCciIHByb2R1Y2VzICJGYWxzZSIgcmF0aGVyIHRoYW4gIlwnXCciLilcbicsCisgJ2JyZWFrJzogdSdcblRoZSAiYnJlYWsiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGJyZWFrX3N0bXQgOjo9ICJicmVhayJcblxuImJyZWFrIiBtYXkgb25seSBvY2N1ciBzeW50YWN0aWNhbGx5IG5lc3RlZCBpbiBhICJmb3IiIG9yICJ3aGlsZSJcbmxvb3AsIGJ1dCBub3QgbmVzdGVkIGluIGEgZnVuY3Rpb24gb3IgY2xhc3MgZGVmaW5pdGlvbiB3aXRoaW4gdGhhdFxubG9vcC5cblxuSXQgdGVybWluYXRlcyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbG9vcCwgc2tpcHBpbmcgdGhlIG9wdGlvbmFsICJlbHNlIlxuY2xhdXNlIGlmIHRoZSBsb29wIGhhcyBvbmUuXG5cbklmIGEgImZvciIgbG9vcCBpcyB0ZXJtaW5hdGVkIGJ5ICJicmVhayIsIHRoZSBsb29wIGNvbnRyb2wgdGFyZ2V0XG5rZWVwcyBpdHMgY3VycmVudCB2YWx1ZS5cblxuV2hlbiAiYnJlYWsiIHBhc3NlcyBjb250cm9sIG91dCBvZiBhICJ0cnkiIHN0YXRlbWVudCB3aXRoIGEgImZpbmFsbHkiXG5jbGF1c2UsIHRoYXQgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5IGxlYXZpbmcgdGhlXG5sb29wLlxuJywKKyAnY2FsbGFibGUtdHlwZXMnOiB1J1xuRW11bGF0aW5nIGNhbGxhYmxlIG9iamVjdHNcbioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX2NhbGxfXyhzZWxmWywgYXJncy4uLl0pXG5cbiAgIENhbGxlZCB3aGVuIHRoZSBpbnN0YW5jZSBpcyAiY2FsbGVkIiBhcyBhIGZ1bmN0aW9uOyBpZiB0aGlzIG1ldGhvZFxuICAgaXMgZGVmaW5lZCwgIngoYXJnMSwgYXJnMiwgLi4uKSIgaXMgYSBzaG9ydGhhbmQgZm9yXG4gICAieC5fX2NhbGxfXyhhcmcxLCBhcmcyLCAuLi4pIi5cbicsCisgJ2NhbGxzJzogdSdcbkNhbGxzXG4qKioqKlxuXG5BIGNhbGwgY2FsbHMgYSBjYWxsYWJsZSBvYmplY3QgKGUuZy4sIGEgKmZ1bmN0aW9uKikgd2l0aCBhIHBvc3NpYmx5XG5lbXB0eSBzZXJpZXMgb2YgKmFyZ3VtZW50cyo6XG5cbiAgIGNhbGwgICAgICAgICAgICAgICAgIDo6PSBwcmltYXJ5ICIoIiBbYXJndW1lbnRfbGlzdCBbIiwiXSB8IGNvbXByZWhlbnNpb25dICIpIlxuICAgYXJndW1lbnRfbGlzdCAgICAgICAgOjo9IHBvc2l0aW9uYWxfYXJndW1lbnRzIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioiIGV4cHJlc3Npb25dIFsiLCIga2V5d29yZF9hcmd1bWVudHNdXG4gICAgICAgICAgICAgICAgICAgICAgIFsiLCIgIioqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgfCBrZXl3b3JkX2FyZ3VtZW50cyBbIiwiICIqIiBleHByZXNzaW9uXVxuICAgICAgICAgICAgICAgICAgICAgICBbIiwiIGtleXdvcmRfYXJndW1lbnRzXSBbIiwiICIqKiIgZXhwcmVzc2lvbl1cbiAgICAgICAgICAgICAgICAgICAgIHwgIioiIGV4cHJlc3Npb24gWyIsIiBrZXl3b3JkX2FyZ3VtZW50c10gWyIsIiAiKioiIGV4cHJlc3Npb25dXG4gICAgICAgICAgICAgICAgICAgICB8ICIqKiIgZXhwcmVzc2lvblxuICAgcG9zaXRpb25hbF9hcmd1bWVudHMgOjo9IGV4cHJlc3Npb24gKCIsIiBleHByZXNzaW9uKSpcbiAgIGtleXdvcmRfYXJndW1lbnRzICAgIDo6PSBrZXl3b3JkX2l0ZW0gKCIsIiBrZXl3b3JkX2l0ZW0pKlxuICAga2V5d29yZF9pdGVtICAgICAgICAgOjo9IGlkZW50aWZpZXIgIj0iIGV4cHJlc3Npb25cblxuQW4gb3B0aW9uYWwgdHJhaWxpbmcgY29tbWEgbWF5IGJlIHByZXNlbnQgYWZ0ZXIgdGhlIHBvc2l0aW9uYWwgYW5kXG5rZXl3b3JkIGFyZ3VtZW50cyBidXQgZG9lcyBub3QgYWZmZWN0IHRoZSBzZW1hbnRpY3MuXG5cblRoZSBwcmltYXJ5IG11c3QgZXZhbHVhdGUgdG8gYSBjYWxsYWJsZSBvYmplY3QgKHVzZXItZGVmaW5lZFxuZnVuY3Rpb25zLCBidWlsdC1pbiBmdW5jdGlvbnMsIG1ldGhvZHMgb2YgYnVpbHQtaW4gb2JqZWN0cywgY2xhc3Ncbm9iamVjdHMsIG1ldGhvZHMgb2YgY2xhc3MgaW5zdGFuY2VzLCBhbmQgYWxsIG9iamVjdHMgaGF2aW5nIGFcbiJfX2NhbGxfXygpIiBtZXRob2QgYXJlIGNhbGxhYmxlKS4gIEFsbCBhcmd1bWVudCBleHByZXNzaW9ucyBhcmVcbmV2YWx1YXRlZCBiZWZvcmUgdGhlIGNhbGwgaXMgYXR0ZW1wdGVkLiAgUGxlYXNlIHJlZmVyIHRvIHNlY3Rpb25cbipGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIHRoZSBzeW50YXggb2YgZm9ybWFsICpwYXJhbWV0ZXIqIGxpc3RzLlxuXG5JZiBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgcHJlc2VudCwgdGhleSBhcmUgZmlyc3QgY29udmVydGVkIHRvXG5wb3NpdGlvbmFsIGFyZ3VtZW50cywgYXMgZm9sbG93cy4gIEZpcnN0LCBhIGxpc3Qgb2YgdW5maWxsZWQgc2xvdHMgaXNcbmNyZWF0ZWQgZm9yIHRoZSBmb3JtYWwgcGFyYW1ldGVycy4gIElmIHRoZXJlIGFyZSBOIHBvc2l0aW9uYWxcbmFyZ3VtZW50cywgdGhleSBhcmUgcGxhY2VkIGluIHRoZSBmaXJzdCBOIHNsb3RzLiAgTmV4dCwgZm9yIGVhY2hcbmtleXdvcmQgYXJndW1lbnQsIHRoZSBpZGVudGlmaWVyIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZVxuY29ycmVzcG9uZGluZyBzbG90IChpZiB0aGUgaWRlbnRpZmllciBpcyB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgZm9ybWFsXG5wYXJhbWV0ZXIgbmFtZSwgdGhlIGZpcnN0IHNsb3QgaXMgdXNlZCwgYW5kIHNvIG9uKS4gIElmIHRoZSBzbG90IGlzXG5hbHJlYWR5IGZpbGxlZCwgYSAiVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLiBPdGhlcndpc2UsIHRoZVxudmFsdWUgb2YgdGhlIGFyZ3VtZW50IGlzIHBsYWNlZCBpbiB0aGUgc2xvdCwgZmlsbGluZyBpdCAoZXZlbiBpZiB0aGVcbmV4cHJlc3Npb24gaXMgIk5vbmUiLCBpdCBmaWxscyB0aGUgc2xvdCkuICBXaGVuIGFsbCBhcmd1bWVudHMgaGF2ZVxuYmVlbiBwcm9jZXNzZWQsIHRoZSBzbG90cyB0aGF0IGFyZSBzdGlsbCB1bmZpbGxlZCBhcmUgZmlsbGVkIHdpdGggdGhlXG5jb3JyZXNwb25kaW5nIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIChEZWZhdWx0XG52YWx1ZXMgYXJlIGNhbGN1bGF0ZWQsIG9uY2UsIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGRlZmluZWQ7IHRodXMsIGFcbm11dGFibGUgb2JqZWN0IHN1Y2ggYXMgYSBsaXN0IG9yIGRpY3Rpb25hcnkgdXNlZCBhcyBkZWZhdWx0IHZhbHVlIHdpbGxcbmJlIHNoYXJlZCBieSBhbGwgY2FsbHMgdGhhdCBkb25cJ3Qgc3BlY2lmeSBhbiBhcmd1bWVudCB2YWx1ZSBmb3IgdGhlXG5jb3JyZXNwb25kaW5nIHNsb3Q7IHRoaXMgc2hvdWxkIHVzdWFsbHkgYmUgYXZvaWRlZC4pICBJZiB0aGVyZSBhcmUgYW55XG51bmZpbGxlZCBzbG90cyBmb3Igd2hpY2ggbm8gZGVmYXVsdCB2YWx1ZSBpcyBzcGVjaWZpZWQsIGEgIlR5cGVFcnJvciJcbmV4Y2VwdGlvbiBpcyByYWlzZWQuICBPdGhlcndpc2UsIHRoZSBsaXN0IG9mIGZpbGxlZCBzbG90cyBpcyB1c2VkIGFzXG50aGUgYXJndW1lbnQgbGlzdCBmb3IgdGhlIGNhbGwuXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogQW4gaW1wbGVtZW50YXRpb24gbWF5IHByb3ZpZGVcbmJ1aWx0LWluIGZ1bmN0aW9ucyB3aG9zZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZG8gbm90IGhhdmUgbmFtZXMsIGV2ZW5cbmlmIHRoZXkgYXJlIFwnbmFtZWRcJyBmb3IgdGhlIHB1cnBvc2Ugb2YgZG9jdW1lbnRhdGlvbiwgYW5kIHdoaWNoXG50aGVyZWZvcmUgY2Fubm90IGJlIHN1cHBsaWVkIGJ5IGtleXdvcmQuICBJbiBDUHl0aG9uLCB0aGlzIGlzIHRoZSBjYXNlXG5mb3IgZnVuY3Rpb25zIGltcGxlbWVudGVkIGluIEMgdGhhdCB1c2UgIlB5QXJnX1BhcnNlVHVwbGUoKSIgdG8gcGFyc2VcbnRoZWlyIGFyZ3VtZW50cy5cblxuSWYgdGhlcmUgYXJlIG1vcmUgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhbiB0aGVyZSBhcmUgZm9ybWFsIHBhcmFtZXRlclxuc2xvdHMsIGEgIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCAiKmlkZW50aWZpZXIiIGlzIHByZXNlbnQ7IGluIHRoaXMgY2FzZSwgdGhhdCBmb3JtYWxcbnBhcmFtZXRlciByZWNlaXZlcyBhIHR1cGxlIGNvbnRhaW5pbmcgdGhlIGV4Y2VzcyBwb3NpdGlvbmFsIGFyZ3VtZW50c1xuKG9yIGFuIGVtcHR5IHR1cGxlIGlmIHRoZXJlIHdlcmUgbm8gZXhjZXNzIHBvc2l0aW9uYWwgYXJndW1lbnRzKS5cblxuSWYgYW55IGtleXdvcmQgYXJndW1lbnQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIGZvcm1hbCBwYXJhbWV0ZXJcbm5hbWUsIGEgIlR5cGVFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZCwgdW5sZXNzIGEgZm9ybWFsIHBhcmFtZXRlclxudXNpbmcgdGhlIHN5bnRheCAiKippZGVudGlmaWVyIiBpcyBwcmVzZW50OyBpbiB0aGlzIGNhc2UsIHRoYXQgZm9ybWFsXG5wYXJhbWV0ZXIgcmVjZWl2ZXMgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGV4Y2VzcyBrZXl3b3JkXG5hcmd1bWVudHMgKHVzaW5nIHRoZSBrZXl3b3JkcyBhcyBrZXlzIGFuZCB0aGUgYXJndW1lbnQgdmFsdWVzIGFzXG5jb3JyZXNwb25kaW5nIHZhbHVlcyksIG9yIGEgKG5ldykgZW1wdHkgZGljdGlvbmFyeSBpZiB0aGVyZSB3ZXJlIG5vXG5leGNlc3Mga2V5d29yZCBhcmd1bWVudHMuXG5cbklmIHRoZSBzeW50YXggIipleHByZXNzaW9uIiBhcHBlYXJzIGluIHRoZSBmdW5jdGlvbiBjYWxsLCAiZXhwcmVzc2lvbiJcbm11c3QgZXZhbHVhdGUgdG8gYW4gaXRlcmFibGUuICBFbGVtZW50cyBmcm9tIHRoaXMgaXRlcmFibGUgYXJlIHRyZWF0ZWRcbmFzIGlmIHRoZXkgd2VyZSBhZGRpdGlvbmFsIHBvc2l0aW9uYWwgYXJndW1lbnRzOyBpZiB0aGVyZSBhcmVcbnBvc2l0aW9uYWwgYXJndW1lbnRzICp4MSosIC4uLiwgKnhOKiwgYW5kICJleHByZXNzaW9uIiBldmFsdWF0ZXMgdG8gYVxuc2VxdWVuY2UgKnkxKiwgLi4uLCAqeU0qLCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gYSBjYWxsIHdpdGggTStOXG5wb3NpdGlvbmFsIGFyZ3VtZW50cyAqeDEqLCAuLi4sICp4TiosICp5MSosIC4uLiwgKnlNKi5cblxuQSBjb25zZXF1ZW5jZSBvZiB0aGlzIGlzIHRoYXQgYWx0aG91Z2ggdGhlICIqZXhwcmVzc2lvbiIgc3ludGF4IG1heVxuYXBwZWFyICphZnRlciogc29tZSBrZXl3b3JkIGFyZ3VtZW50cywgaXQgaXMgcHJvY2Vzc2VkICpiZWZvcmUqIHRoZVxua2V5d29yZCBhcmd1bWVudHMgKGFuZCB0aGUgIioqZXhwcmVzc2lvbiIgYXJndW1lbnQsIGlmIGFueSAtLSBzZWVcbmJlbG93KS4gIFNvOlxuXG4gICA+Pj4gZGVmIGYoYSwgYik6XG4gICAuLi4gIHByaW50KGEsIGIpXG4gICAuLi5cbiAgID4+PiBmKGI9MSwgKigyLCkpXG4gICAyIDFcbiAgID4+PiBmKGE9MSwgKigyLCkpXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDEsIGluID9cbiAgIFR5cGVFcnJvcjogZigpIGdvdCBtdWx0aXBsZSB2YWx1ZXMgZm9yIGtleXdvcmQgYXJndW1lbnQgXCdhXCdcbiAgID4+PiBmKDEsICooMiwpKVxuICAgMSAyXG5cbkl0IGlzIHVudXN1YWwgZm9yIGJvdGgga2V5d29yZCBhcmd1bWVudHMgYW5kIHRoZSAiKmV4cHJlc3Npb24iIHN5bnRheFxudG8gYmUgdXNlZCBpbiB0aGUgc2FtZSBjYWxsLCBzbyBpbiBwcmFjdGljZSB0aGlzIGNvbmZ1c2lvbiBkb2VzIG5vdFxuYXJpc2UuXG5cbklmIHRoZSBzeW50YXggIioqZXhwcmVzc2lvbiIgYXBwZWFycyBpbiB0aGUgZnVuY3Rpb24gY2FsbCxcbiJleHByZXNzaW9uIiBtdXN0IGV2YWx1YXRlIHRvIGEgbWFwcGluZywgdGhlIGNvbnRlbnRzIG9mIHdoaWNoIGFyZVxudHJlYXRlZCBhcyBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLiAgSW4gdGhlIGNhc2Ugb2YgYSBrZXl3b3JkXG5hcHBlYXJpbmcgaW4gYm90aCAiZXhwcmVzc2lvbiIgYW5kIGFzIGFuIGV4cGxpY2l0IGtleXdvcmQgYXJndW1lbnQsIGFcbiJUeXBlRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG5cbkZvcm1hbCBwYXJhbWV0ZXJzIHVzaW5nIHRoZSBzeW50YXggIippZGVudGlmaWVyIiBvciAiKippZGVudGlmaWVyIlxuY2Fubm90IGJlIHVzZWQgYXMgcG9zaXRpb25hbCBhcmd1bWVudCBzbG90cyBvciBhcyBrZXl3b3JkIGFyZ3VtZW50XG5uYW1lcy5cblxuQSBjYWxsIGFsd2F5cyByZXR1cm5zIHNvbWUgdmFsdWUsIHBvc3NpYmx5ICJOb25lIiwgdW5sZXNzIGl0IHJhaXNlcyBhblxuZXhjZXB0aW9uLiAgSG93IHRoaXMgdmFsdWUgaXMgY29tcHV0ZWQgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiB0aGVcbmNhbGxhYmxlIG9iamVjdC5cblxuSWYgaXQgaXMtLS1cblxuYSB1c2VyLWRlZmluZWQgZnVuY3Rpb246XG4gICBUaGUgY29kZSBibG9jayBmb3IgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkLCBwYXNzaW5nIGl0IHRoZVxuICAgYXJndW1lbnQgbGlzdC4gIFRoZSBmaXJzdCB0aGluZyB0aGUgY29kZSBibG9jayB3aWxsIGRvIGlzIGJpbmQgdGhlXG4gICBmb3JtYWwgcGFyYW1ldGVycyB0byB0aGUgYXJndW1lbnRzOyB0aGlzIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uXG4gICAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqLiAgV2hlbiB0aGUgY29kZSBibG9jayBleGVjdXRlcyBhICJyZXR1cm4iXG4gICBzdGF0ZW1lbnQsIHRoaXMgc3BlY2lmaWVzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwuXG5cbmEgYnVpbHQtaW4gZnVuY3Rpb24gb3IgbWV0aG9kOlxuICAgVGhlIHJlc3VsdCBpcyB1cCB0byB0aGUgaW50ZXJwcmV0ZXI7IHNlZSAqQnVpbHQtaW4gRnVuY3Rpb25zKiBmb3JcbiAgIHRoZSBkZXNjcmlwdGlvbnMgb2YgYnVpbHQtaW4gZnVuY3Rpb25zIGFuZCBtZXRob2RzLlxuXG5hIGNsYXNzIG9iamVjdDpcbiAgIEEgbmV3IGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgaXMgcmV0dXJuZWQuXG5cbmEgY2xhc3MgaW5zdGFuY2UgbWV0aG9kOlxuICAgVGhlIGNvcnJlc3BvbmRpbmcgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2l0aCBhbiBhcmd1bWVudFxuICAgbGlzdCB0aGF0IGlzIG9uZSBsb25nZXIgdGhhbiB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY2FsbDogdGhlXG4gICBpbnN0YW5jZSBiZWNvbWVzIHRoZSBmaXJzdCBhcmd1bWVudC5cblxuYSBjbGFzcyBpbnN0YW5jZTpcbiAgIFRoZSBjbGFzcyBtdXN0IGRlZmluZSBhICJfX2NhbGxfXygpIiBtZXRob2Q7IHRoZSBlZmZlY3QgaXMgdGhlbiB0aGVcbiAgIHNhbWUgYXMgaWYgdGhhdCBtZXRob2Qgd2FzIGNhbGxlZC5cbicsCisgJ2NsYXNzJzogdSdcbkNsYXNzIGRlZmluaXRpb25zXG4qKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLVxuICBDbGFzcyBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzc1xuICAgIHRoZXJlIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXJcbiAgICBleGNlcHRpb24uIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZlxuICAgIGFuIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yXG4gICAgImJyZWFrIiBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZVxuICAgIGZ1bmN0aW9uIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iXG4gICAgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKKyAnY29tcGFyaXNvbnMnOiB1J1xuQ29tcGFyaXNvbnNcbioqKioqKioqKioqXG5cblVubGlrZSBDLCBhbGwgY29tcGFyaXNvbiBvcGVyYXRpb25zIGluIFB5dGhvbiBoYXZlIHRoZSBzYW1lIHByaW9yaXR5LFxud2hpY2ggaXMgbG93ZXIgdGhhbiB0aGF0IG9mIGFueSBhcml0aG1ldGljLCBzaGlmdGluZyBvciBiaXR3aXNlXG5vcGVyYXRpb24uICBBbHNvIHVubGlrZSBDLCBleHByZXNzaW9ucyBsaWtlICJhIDwgYiA8IGMiIGhhdmUgdGhlXG5pbnRlcnByZXRhdGlvbiB0aGF0IGlzIGNvbnZlbnRpb25hbCBpbiBtYXRoZW1hdGljczpcblxuICAgY29tcGFyaXNvbiAgICA6Oj0gb3JfZXhwciAoIGNvbXBfb3BlcmF0b3Igb3JfZXhwciApKlxuICAgY29tcF9vcGVyYXRvciA6Oj0gIjwiIHwgIj4iIHwgIj09IiB8ICI+PSIgfCAiPD0iIHwgIiE9IlxuICAgICAgICAgICAgICAgICAgICAgfCAiaXMiIFsibm90Il0gfCBbIm5vdCJdICJpbiJcblxuQ29tcGFyaXNvbnMgeWllbGQgYm9vbGVhbiB2YWx1ZXM6ICJUcnVlIiBvciAiRmFsc2UiLlxuXG5Db21wYXJpc29ucyBjYW4gYmUgY2hhaW5lZCBhcmJpdHJhcmlseSwgZS5nLiwgInggPCB5IDw9IHoiIGlzXG5lcXVpdmFsZW50IHRvICJ4IDwgeSBhbmQgeSA8PSB6IiwgZXhjZXB0IHRoYXQgInkiIGlzIGV2YWx1YXRlZCBvbmx5XG5vbmNlIChidXQgaW4gYm90aCBjYXNlcyAieiIgaXMgbm90IGV2YWx1YXRlZCBhdCBhbGwgd2hlbiAieCA8IHkiIGlzXG5mb3VuZCB0byBiZSBmYWxzZSkuXG5cbkZvcm1hbGx5LCBpZiAqYSosICpiKiwgKmMqLCAuLi4sICp5KiwgKnoqIGFyZSBleHByZXNzaW9ucyBhbmQgKm9wMSosXG4qb3AyKiwgLi4uLCAqb3BOKiBhcmUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIHRoZW4gImEgb3AxIGIgb3AyIGMgLi4uIHlcbm9wTiB6IiBpcyBlcXVpdmFsZW50IHRvICJhIG9wMSBiIGFuZCBiIG9wMiBjIGFuZCAuLi4geSBvcE4geiIsIGV4Y2VwdFxudGhhdCBlYWNoIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkIGF0IG1vc3Qgb25jZS5cblxuTm90ZSB0aGF0ICJhIG9wMSBiIG9wMiBjIiBkb2VzblwndCBpbXBseSBhbnkga2luZCBvZiBjb21wYXJpc29uIGJldHdlZW5cbiphKiBhbmQgKmMqLCBzbyB0aGF0LCBlLmcuLCAieCA8IHkgPiB6IiBpcyBwZXJmZWN0bHkgbGVnYWwgKHRob3VnaFxucGVyaGFwcyBub3QgcHJldHR5KS5cblxuXG5WYWx1ZSBjb21wYXJpc29uc1xuPT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdG9ycyAiPCIsICI+IiwgIj09IiwgIj49IiwgIjw9IiwgYW5kICIhPSIgY29tcGFyZSB0aGUgdmFsdWVzXG5vZiB0d28gb2JqZWN0cy4gIFRoZSBvYmplY3RzIGRvIG5vdCBuZWVkIHRvIGhhdmUgdGhlIHNhbWUgdHlwZS5cblxuQ2hhcHRlciAqT2JqZWN0cywgdmFsdWVzIGFuZCB0eXBlcyogc3RhdGVzIHRoYXQgb2JqZWN0cyBoYXZlIGEgdmFsdWVcbihpbiBhZGRpdGlvbiB0byB0eXBlIGFuZCBpZGVudGl0eSkuICBUaGUgdmFsdWUgb2YgYW4gb2JqZWN0IGlzIGFcbnJhdGhlciBhYnN0cmFjdCBub3Rpb24gaW4gUHl0aG9uOiBGb3IgZXhhbXBsZSwgdGhlcmUgaXMgbm8gY2Fub25pY2FsXG5hY2Nlc3MgbWV0aG9kIGZvciBhbiBvYmplY3RcJ3MgdmFsdWUuICBBbHNvLCB0aGVyZSBpcyBubyByZXF1aXJlbWVudFxudGhhdCB0aGUgdmFsdWUgb2YgYW4gb2JqZWN0IHNob3VsZCBiZSBjb25zdHJ1Y3RlZCBpbiBhIHBhcnRpY3VsYXIgd2F5LFxuZS5nLiBjb21wcmlzZWQgb2YgYWxsIGl0cyBkYXRhIGF0dHJpYnV0ZXMuIENvbXBhcmlzb24gb3BlcmF0b3JzXG5pbXBsZW1lbnQgYSBwYXJ0aWN1bGFyIG5vdGlvbiBvZiB3aGF0IHRoZSB2YWx1ZSBvZiBhbiBvYmplY3QgaXMuICBPbmVcbmNhbiB0aGluayBvZiB0aGVtIGFzIGRlZmluaW5nIHRoZSB2YWx1ZSBvZiBhbiBvYmplY3QgaW5kaXJlY3RseSwgYnlcbm1lYW5zIG9mIHRoZWlyIGNvbXBhcmlzb24gaW1wbGVtZW50YXRpb24uXG5cbkJlY2F1c2UgYWxsIHR5cGVzIGFyZSAoZGlyZWN0IG9yIGluZGlyZWN0KSBzdWJ0eXBlcyBvZiAib2JqZWN0IiwgdGhleVxuaW5oZXJpdCB0aGUgZGVmYXVsdCBjb21wYXJpc29uIGJlaGF2aW9yIGZyb20gIm9iamVjdCIuICBUeXBlcyBjYW5cbmN1c3RvbWl6ZSB0aGVpciBjb21wYXJpc29uIGJlaGF2aW9yIGJ5IGltcGxlbWVudGluZyAqcmljaCBjb21wYXJpc29uXG5tZXRob2RzKiBsaWtlICJfX2x0X18oKSIsIGRlc2NyaWJlZCBpbiAqQmFzaWMgY3VzdG9taXphdGlvbiouXG5cblRoZSBkZWZhdWx0IGJlaGF2aW9yIGZvciBlcXVhbGl0eSBjb21wYXJpc29uICgiPT0iIGFuZCAiIT0iKSBpcyBiYXNlZFxub24gdGhlIGlkZW50aXR5IG9mIHRoZSBvYmplY3RzLiAgSGVuY2UsIGVxdWFsaXR5IGNvbXBhcmlzb24gb2Zcbmluc3RhbmNlcyB3aXRoIHRoZSBzYW1lIGlkZW50aXR5IHJlc3VsdHMgaW4gZXF1YWxpdHksIGFuZCBlcXVhbGl0eVxuY29tcGFyaXNvbiBvZiBpbnN0YW5jZXMgd2l0aCBkaWZmZXJlbnQgaWRlbnRpdGllcyByZXN1bHRzIGluXG5pbmVxdWFsaXR5LiAgQSBtb3RpdmF0aW9uIGZvciB0aGlzIGRlZmF1bHQgYmVoYXZpb3IgaXMgdGhlIGRlc2lyZSB0aGF0XG5hbGwgb2JqZWN0cyBzaG91bGQgYmUgcmVmbGV4aXZlIChpLmUuICJ4IGlzIHkiIGltcGxpZXMgInggPT0geSIpLlxuXG5BIGRlZmF1bHQgb3JkZXIgY29tcGFyaXNvbiAoIjwiLCAiPiIsICI8PSIsIGFuZCAiPj0iKSBpcyBub3QgcHJvdmlkZWQ7XG5hbiBhdHRlbXB0IHJhaXNlcyAiVHlwZUVycm9yIi4gIEEgbW90aXZhdGlvbiBmb3IgdGhpcyBkZWZhdWx0IGJlaGF2aW9yXG5pcyB0aGUgbGFjayBvZiBhIHNpbWlsYXIgaW52YXJpYW50IGFzIGZvciBlcXVhbGl0eS5cblxuVGhlIGJlaGF2aW9yIG9mIHRoZSBkZWZhdWx0IGVxdWFsaXR5IGNvbXBhcmlzb24sIHRoYXQgaW5zdGFuY2VzIHdpdGhcbmRpZmZlcmVudCBpZGVudGl0aWVzIGFyZSBhbHdheXMgdW5lcXVhbCwgbWF5IGJlIGluIGNvbnRyYXN0IHRvIHdoYXRcbnR5cGVzIHdpbGwgbmVlZCB0aGF0IGhhdmUgYSBzZW5zaWJsZSBkZWZpbml0aW9uIG9mIG9iamVjdCB2YWx1ZSBhbmRcbnZhbHVlLWJhc2VkIGVxdWFsaXR5LiAgU3VjaCB0eXBlcyB3aWxsIG5lZWQgdG8gY3VzdG9taXplIHRoZWlyXG5jb21wYXJpc29uIGJlaGF2aW9yLCBhbmQgaW4gZmFjdCwgYSBudW1iZXIgb2YgYnVpbHQtaW4gdHlwZXMgaGF2ZSBkb25lXG50aGF0LlxuXG5UaGUgZm9sbG93aW5nIGxpc3QgZGVzY3JpYmVzIHRoZSBjb21wYXJpc29uIGJlaGF2aW9yIG9mIHRoZSBtb3N0XG5pbXBvcnRhbnQgYnVpbHQtaW4gdHlwZXMuXG5cbiogTnVtYmVycyBvZiBidWlsdC1pbiBudW1lcmljIHR5cGVzICgqTnVtZXJpYyBUeXBlcyAtLS0gaW50LCBmbG9hdCxcbiAgY29tcGxleCopIGFuZCBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeSB0eXBlcyAiZnJhY3Rpb25zLkZyYWN0aW9uIiBhbmRcbiAgImRlY2ltYWwuRGVjaW1hbCIgY2FuIGJlIGNvbXBhcmVkIHdpdGhpbiBhbmQgYWNyb3NzIHRoZWlyIHR5cGVzLFxuICB3aXRoIHRoZSByZXN0cmljdGlvbiB0aGF0IGNvbXBsZXggbnVtYmVycyBkbyBub3Qgc3VwcG9ydCBvcmRlclxuICBjb21wYXJpc29uLiAgV2l0aGluIHRoZSBsaW1pdHMgb2YgdGhlIHR5cGVzIGludm9sdmVkLCB0aGV5IGNvbXBhcmVcbiAgbWF0aGVtYXRpY2FsbHkgKGFsZ29yaXRobWljYWxseSkgY29ycmVjdCB3aXRob3V0IGxvc3Mgb2YgcHJlY2lzaW9uLlxuXG4gIFRoZSBub3QtYS1udW1iZXIgdmFsdWVzICJmbG9hdChcJ05hTlwnKSIgYW5kICJEZWNpbWFsKFwnTmFOXCcpIiBhcmVcbiAgc3BlY2lhbC4gIFRoZXkgYXJlIGlkZW50aWNhbCB0byB0aGVtc2VsdmVzICgieCBpcyB4IiBpcyB0cnVlKSBidXRcbiAgYXJlIG5vdCBlcXVhbCB0byB0aGVtc2VsdmVzICgieCA9PSB4IiBpcyBmYWxzZSkuICBBZGRpdGlvbmFsbHksXG4gIGNvbXBhcmluZyBhbnkgbnVtYmVyIHRvIGEgbm90LWEtbnVtYmVyIHZhbHVlIHdpbGwgcmV0dXJuICJGYWxzZSIuXG4gIEZvciBleGFtcGxlLCBib3RoICIzIDwgZmxvYXQoXCdOYU5cJykiIGFuZCAiZmxvYXQoXCdOYU5cJykgPCAzIiB3aWxsXG4gIHJldHVybiAiRmFsc2UiLlxuXG4qIEJpbmFyeSBzZXF1ZW5jZXMgKGluc3RhbmNlcyBvZiAiYnl0ZXMiIG9yICJieXRlYXJyYXkiKSBjYW4gYmVcbiAgY29tcGFyZWQgd2l0aGluIGFuZCBhY3Jvc3MgdGhlaXIgdHlwZXMuICBUaGV5IGNvbXBhcmVcbiAgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgdGhlIG51bWVyaWMgdmFsdWVzIG9mIHRoZWlyIGVsZW1lbnRzLlxuXG4qIFN0cmluZ3MgKGluc3RhbmNlcyBvZiAic3RyIikgY29tcGFyZSBsZXhpY29ncmFwaGljYWxseSB1c2luZyB0aGVcbiAgbnVtZXJpY2FsIFVuaWNvZGUgY29kZSBwb2ludHMgKHRoZSByZXN1bHQgb2YgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICJvcmQoKSIpIG9mIHRoZWlyIGNoYXJhY3RlcnMuIFszXVxuXG4gIFN0cmluZ3MgYW5kIGJpbmFyeSBzZXF1ZW5jZXMgY2Fubm90IGJlIGRpcmVjdGx5IGNvbXBhcmVkLlxuXG4qIFNlcXVlbmNlcyAoaW5zdGFuY2VzIG9mICJ0dXBsZSIsICJsaXN0Iiwgb3IgInJhbmdlIikgY2FuIGJlXG4gIGNvbXBhcmVkIG9ubHkgd2l0aGluIGVhY2ggb2YgdGhlaXIgdHlwZXMsIHdpdGggdGhlIHJlc3RyaWN0aW9uIHRoYXRcbiAgcmFuZ2VzIGRvIG5vdCBzdXBwb3J0IG9yZGVyIGNvbXBhcmlzb24uICBFcXVhbGl0eSBjb21wYXJpc29uIGFjcm9zc1xuICB0aGVzZSB0eXBlcyByZXN1bHRzIGluIHVuZXF1YWxpdHksIGFuZCBvcmRlcmluZyBjb21wYXJpc29uIGFjcm9zc1xuICB0aGVzZSB0eXBlcyByYWlzZXMgIlR5cGVFcnJvciIuXG5cbiAgU2VxdWVuY2VzIGNvbXBhcmUgbGV4aWNvZ3JhcGhpY2FsbHkgdXNpbmcgY29tcGFyaXNvbiBvZlxuICBjb3JyZXNwb25kaW5nIGVsZW1lbnRzLCB3aGVyZWJ5IHJlZmxleGl2aXR5IG9mIHRoZSBlbGVtZW50cyBpc1xuICBlbmZvcmNlZC5cblxuICBJbiBlbmZvcmNpbmcgcmVmbGV4aXZpdHkgb2YgZWxlbWVudHMsIHRoZSBjb21wYXJpc29uIG9mIGNvbGxlY3Rpb25zXG4gIGFzc3VtZXMgdGhhdCBmb3IgYSBjb2xsZWN0aW9uIGVsZW1lbnQgIngiLCAieCA9PSB4IiBpcyBhbHdheXMgdHJ1ZS5cbiAgQmFzZWQgb24gdGhhdCBhc3N1bXB0aW9uLCBlbGVtZW50IGlkZW50aXR5IGlzIGNvbXBhcmVkIGZpcnN0LCBhbmRcbiAgZWxlbWVudCBjb21wYXJpc29uIGlzIHBlcmZvcm1lZCBvbmx5IGZvciBkaXN0aW5jdCBlbGVtZW50cy4gIFRoaXNcbiAgYXBwcm9hY2ggeWllbGRzIHRoZSBzYW1lIHJlc3VsdCBhcyBhIHN0cmljdCBlbGVtZW50IGNvbXBhcmlzb25cbiAgd291bGQsIGlmIHRoZSBjb21wYXJlZCBlbGVtZW50cyBhcmUgcmVmbGV4aXZlLiAgRm9yIG5vbi1yZWZsZXhpdmVcbiAgZWxlbWVudHMsIHRoZSByZXN1bHQgaXMgZGlmZmVyZW50IHRoYW4gZm9yIHN0cmljdCBlbGVtZW50XG4gIGNvbXBhcmlzb24sIGFuZCBtYXkgYmUgc3VycHJpc2luZzogIFRoZSBub24tcmVmbGV4aXZlIG5vdC1hLW51bWJlclxuICB2YWx1ZXMgZm9yIGV4YW1wbGUgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgY29tcGFyaXNvbiBiZWhhdmlvciB3aGVuXG4gIHVzZWQgaW4gYSBsaXN0OlxuXG4gICAgID4+PiBuYW4gPSBmbG9hdChcJ05hTlwnKVxuICAgICA+Pj4gbmFuIGlzIG5hblxuICAgICBUcnVlXG4gICAgID4+PiBuYW4gPT0gbmFuXG4gICAgIEZhbHNlICAgICAgICAgICAgICAgICA8LS0gdGhlIGRlZmluZWQgbm9uLXJlZmxleGl2ZSBiZWhhdmlvciBvZiBOYU5cbiAgICAgPj4+IFtuYW5dID09IFtuYW5dXG4gICAgIFRydWUgICAgICAgICAgICAgICAgICA8LS0gbGlzdCBlbmZvcmNlcyByZWZsZXhpdml0eSBhbmQgdGVzdHMgaWRlbnRpdHkgZmlyc3RcblxuICBMZXhpY29ncmFwaGljYWwgY29tcGFyaXNvbiBiZXR3ZWVuIGJ1aWx0LWluIGNvbGxlY3Rpb25zIHdvcmtzIGFzXG4gIGZvbGxvd3M6XG5cbiAgKiBGb3IgdHdvIGNvbGxlY3Rpb25zIHRvIGNvbXBhcmUgZXF1YWwsIHRoZXkgbXVzdCBiZSBvZiB0aGUgc2FtZVxuICAgIHR5cGUsIGhhdmUgdGhlIHNhbWUgbGVuZ3RoLCBhbmQgZWFjaCBwYWlyIG9mIGNvcnJlc3BvbmRpbmdcbiAgICBlbGVtZW50cyBtdXN0IGNvbXBhcmUgZXF1YWwgKGZvciBleGFtcGxlLCAiWzEsMl0gPT0gKDEsMikiIGlzXG4gICAgZmFsc2UgYmVjYXVzZSB0aGUgdHlwZSBpcyBub3QgdGhlIHNhbWUpLlxuXG4gICogQ29sbGVjdGlvbnMgdGhhdCBzdXBwb3J0IG9yZGVyIGNvbXBhcmlzb24gYXJlIG9yZGVyZWQgdGhlIHNhbWVcbiAgICBhcyB0aGVpciBmaXJzdCB1bmVxdWFsIGVsZW1lbnRzIChmb3IgZXhhbXBsZSwgIlsxLDIseF0gPD0gWzEsMix5XSJcbiAgICBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgInggPD0geSIpLiAgSWYgYSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgZG9lc1xuICAgIG5vdCBleGlzdCwgdGhlIHNob3J0ZXIgY29sbGVjdGlvbiBpcyBvcmRlcmVkIGZpcnN0IChmb3IgZXhhbXBsZSxcbiAgICAiWzEsMl0gPCBbMSwyLDNdIiBpcyB0cnVlKS5cblxuKiBNYXBwaW5ncyAoaW5zdGFuY2VzIG9mICJkaWN0IikgY29tcGFyZSBlcXVhbCBpZiBhbmQgb25seSBpZiB0aGV5XG4gIGhhdmUgZXF1YWwgKihrZXksIHZhbHVlKSogcGFpcnMuIEVxdWFsaXR5IGNvbXBhcmlzb24gb2YgdGhlIGtleXMgYW5kXG4gIGVsZW1lbnRzIGVuZm9yY2VzIHJlZmxleGl2aXR5LlxuXG4gIE9yZGVyIGNvbXBhcmlzb25zICgiPCIsICI+IiwgIjw9IiwgYW5kICI+PSIpIHJhaXNlICJUeXBlRXJyb3IiLlxuXG4qIFNldHMgKGluc3RhbmNlcyBvZiAic2V0IiBvciAiZnJvemVuc2V0IikgY2FuIGJlIGNvbXBhcmVkIHdpdGhpblxuICBhbmQgYWNyb3NzIHRoZWlyIHR5cGVzLlxuXG4gIFRoZXkgZGVmaW5lIG9yZGVyIGNvbXBhcmlzb24gb3BlcmF0b3JzIHRvIG1lYW4gc3Vic2V0IGFuZCBzdXBlcnNldFxuICB0ZXN0cy4gIFRob3NlIHJlbGF0aW9ucyBkbyBub3QgZGVmaW5lIHRvdGFsIG9yZGVyaW5ncyAoZm9yIGV4YW1wbGUsXG4gIHRoZSB0d28gc2V0cyAiezEsMn0iIGFuZCAiezIsM30iIGFyZSBub3QgZXF1YWwsIG5vciBzdWJzZXRzIG9mIG9uZVxuICBhbm90aGVyLCBub3Igc3VwZXJzZXRzIG9mIG9uZSBhbm90aGVyKS4gIEFjY29yZGluZ2x5LCBzZXRzIGFyZSBub3RcbiAgYXBwcm9wcmlhdGUgYXJndW1lbnRzIGZvciBmdW5jdGlvbnMgd2hpY2ggZGVwZW5kIG9uIHRvdGFsIG9yZGVyaW5nXG4gIChmb3IgZXhhbXBsZSwgIm1pbigpIiwgIm1heCgpIiwgYW5kICJzb3J0ZWQoKSIgcHJvZHVjZSB1bmRlZmluZWRcbiAgcmVzdWx0cyBnaXZlbiBhIGxpc3Qgb2Ygc2V0cyBhcyBpbnB1dHMpLlxuXG4gIENvbXBhcmlzb24gb2Ygc2V0cyBlbmZvcmNlcyByZWZsZXhpdml0eSBvZiBpdHMgZWxlbWVudHMuXG5cbiogTW9zdCBvdGhlciBidWlsdC1pbiB0eXBlcyBoYXZlIG5vIGNvbXBhcmlzb24gbWV0aG9kcyBpbXBsZW1lbnRlZCxcbiAgc28gdGhleSBpbmhlcml0IHRoZSBkZWZhdWx0IGNvbXBhcmlzb24gYmVoYXZpb3IuXG5cblVzZXItZGVmaW5lZCBjbGFzc2VzIHRoYXQgY3VzdG9taXplIHRoZWlyIGNvbXBhcmlzb24gYmVoYXZpb3Igc2hvdWxkXG5mb2xsb3cgc29tZSBjb25zaXN0ZW5jeSBydWxlcywgaWYgcG9zc2libGU6XG5cbiogRXF1YWxpdHkgY29tcGFyaXNvbiBzaG91bGQgYmUgcmVmbGV4aXZlLiBJbiBvdGhlciB3b3JkcywgaWRlbnRpY2FsXG4gIG9iamVjdHMgc2hvdWxkIGNvbXBhcmUgZXF1YWw6XG5cbiAgICAgInggaXMgeSIgaW1wbGllcyAieCA9PSB5IlxuXG4qIENvbXBhcmlzb24gc2hvdWxkIGJlIHN5bW1ldHJpYy4gSW4gb3RoZXIgd29yZHMsIHRoZSBmb2xsb3dpbmdcbiAgZXhwcmVzc2lvbnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcmVzdWx0OlxuXG4gICAgICJ4ID09IHkiIGFuZCAieSA9PSB4IlxuXG4gICAgICJ4ICE9IHkiIGFuZCAieSAhPSB4IlxuXG4gICAgICJ4IDwgeSIgYW5kICJ5ID4geCJcblxuICAgICAieCA8PSB5IiBhbmQgInkgPj0geCJcblxuKiBDb21wYXJpc29uIHNob3VsZCBiZSB0cmFuc2l0aXZlLiBUaGUgZm9sbG93aW5nIChub24tZXhoYXVzdGl2ZSlcbiAgZXhhbXBsZXMgaWxsdXN0cmF0ZSB0aGF0OlxuXG4gICAgICJ4ID4geSBhbmQgeSA+IHoiIGltcGxpZXMgInggPiB6IlxuXG4gICAgICJ4IDwgeSBhbmQgeSA8PSB6IiBpbXBsaWVzICJ4IDwgeiJcblxuKiBJbnZlcnNlIGNvbXBhcmlzb24gc2hvdWxkIHJlc3VsdCBpbiB0aGUgYm9vbGVhbiBuZWdhdGlvbi4gSW4gb3RoZXJcbiAgd29yZHMsIHRoZSBmb2xsb3dpbmcgZXhwcmVzc2lvbnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgcmVzdWx0OlxuXG4gICAgICJ4ID09IHkiIGFuZCAibm90IHggIT0geSJcblxuICAgICAieCA8IHkiIGFuZCAibm90IHggPj0geSIgKGZvciB0b3RhbCBvcmRlcmluZylcblxuICAgICAieCA+IHkiIGFuZCAibm90IHggPD0geSIgKGZvciB0b3RhbCBvcmRlcmluZylcblxuICBUaGUgbGFzdCB0d28gZXhwcmVzc2lvbnMgYXBwbHkgdG8gdG90YWxseSBvcmRlcmVkIGNvbGxlY3Rpb25zIChlLmcuXG4gIHRvIHNlcXVlbmNlcywgYnV0IG5vdCB0byBzZXRzIG9yIG1hcHBpbmdzKS4gU2VlIGFsc28gdGhlXG4gICJ0b3RhbF9vcmRlcmluZygpIiBkZWNvcmF0b3IuXG5cblB5dGhvbiBkb2VzIG5vdCBlbmZvcmNlIHRoZXNlIGNvbnNpc3RlbmN5IHJ1bGVzLiBJbiBmYWN0LCB0aGVcbm5vdC1hLW51bWJlciB2YWx1ZXMgYXJlIGFuIGV4YW1wbGUgZm9yIG5vdCBmb2xsb3dpbmcgdGhlc2UgcnVsZXMuXG5cblxuTWVtYmVyc2hpcCB0ZXN0IG9wZXJhdGlvbnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRvcnMgImluIiBhbmQgIm5vdCBpbiIgdGVzdCBmb3IgbWVtYmVyc2hpcC4gICJ4IGluIHMiXG5ldmFsdWF0ZXMgdG8gdHJ1ZSBpZiAqeCogaXMgYSBtZW1iZXIgb2YgKnMqLCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiAgInhcbm5vdCBpbiBzIiByZXR1cm5zIHRoZSBuZWdhdGlvbiBvZiAieCBpbiBzIi4gIEFsbCBidWlsdC1pbiBzZXF1ZW5jZXNcbmFuZCBzZXQgdHlwZXMgc3VwcG9ydCB0aGlzIGFzIHdlbGwgYXMgZGljdGlvbmFyeSwgZm9yIHdoaWNoICJpbiIgdGVzdHNcbndoZXRoZXIgdGhlIGRpY3Rpb25hcnkgaGFzIGEgZ2l2ZW4ga2V5LiBGb3IgY29udGFpbmVyIHR5cGVzIHN1Y2ggYXNcbmxpc3QsIHR1cGxlLCBzZXQsIGZyb3plbnNldCwgZGljdCwgb3IgY29sbGVjdGlvbnMuZGVxdWUsIHRoZVxuZXhwcmVzc2lvbiAieCBpbiB5IiBpcyBlcXVpdmFsZW50IHRvICJhbnkoeCBpcyBlIG9yIHggPT0gZSBmb3IgZSBpblxueSkiLlxuXG5Gb3IgdGhlIHN0cmluZyBhbmQgYnl0ZXMgdHlwZXMsICJ4IGluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgKngqIGlzXG5hIHN1YnN0cmluZyBvZiAqeSouICBBbiBlcXVpdmFsZW50IHRlc3QgaXMgInkuZmluZCh4KSAhPSAtMSIuICBFbXB0eVxuc3RyaW5ncyBhcmUgYWx3YXlzIGNvbnNpZGVyZWQgdG8gYmUgYSBzdWJzdHJpbmcgb2YgYW55IG90aGVyIHN0cmluZyxcbnNvICIiIiBpbiAiYWJjIiIgd2lsbCByZXR1cm4gIlRydWUiLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZGVmaW5lIHRoZSAiX19jb250YWluc19fKCkiIG1ldGhvZCwgInhcbmluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgInkuX19jb250YWluc19fKHgpIiBpcyB0cnVlLlxuXG5Gb3IgdXNlci1kZWZpbmVkIGNsYXNzZXMgd2hpY2ggZG8gbm90IGRlZmluZSAiX19jb250YWluc19fKCkiIGJ1dCBkb1xuZGVmaW5lICJfX2l0ZXJfXygpIiwgInggaW4geSIgaXMgdHJ1ZSBpZiBzb21lIHZhbHVlICJ6IiB3aXRoICJ4ID09IHoiXG5pcyBwcm9kdWNlZCB3aGlsZSBpdGVyYXRpbmcgb3ZlciAieSIuICBJZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkXG5kdXJpbmcgdGhlIGl0ZXJhdGlvbiwgaXQgaXMgYXMgaWYgImluIiByYWlzZWQgdGhhdCBleGNlcHRpb24uXG5cbkxhc3RseSwgdGhlIG9sZC1zdHlsZSBpdGVyYXRpb24gcHJvdG9jb2wgaXMgdHJpZWQ6IGlmIGEgY2xhc3MgZGVmaW5lc1xuIl9fZ2V0aXRlbV9fKCkiLCAieCBpbiB5IiBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZXJlIGlzIGEgbm9uLVxubmVnYXRpdmUgaW50ZWdlciBpbmRleCAqaSogc3VjaCB0aGF0ICJ4ID09IHlbaV0iLCBhbmQgYWxsIGxvd2VyXG5pbnRlZ2VyIGluZGljZXMgZG8gbm90IHJhaXNlICJJbmRleEVycm9yIiBleGNlcHRpb24uICAoSWYgYW55IG90aGVyXG5leGNlcHRpb24gaXMgcmFpc2VkLCBpdCBpcyBhcyBpZiAiaW4iIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbikuXG5cblRoZSBvcGVyYXRvciAibm90IGluIiBpcyBkZWZpbmVkIHRvIGhhdmUgdGhlIGludmVyc2UgdHJ1ZSB2YWx1ZSBvZlxuImluIi5cblxuXG5JZGVudGl0eSBjb21wYXJpc29uc1xuPT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG9wZXJhdG9ycyAiaXMiIGFuZCAiaXMgbm90IiB0ZXN0IGZvciBvYmplY3QgaWRlbnRpdHk6ICJ4IGlzIHkiIGlzXG50cnVlIGlmIGFuZCBvbmx5IGlmICp4KiBhbmQgKnkqIGFyZSB0aGUgc2FtZSBvYmplY3QuICAieCBpcyBub3QgeSJcbnlpZWxkcyB0aGUgaW52ZXJzZSB0cnV0aCB2YWx1ZS4gWzRdXG4nLAorICdjb21wb3VuZCc6IHUnXG5Db21wb3VuZCBzdGF0ZW1lbnRzXG4qKioqKioqKioqKioqKioqKioqXG5cbkNvbXBvdW5kIHN0YXRlbWVudHMgY29udGFpbiAoZ3JvdXBzIG9mKSBvdGhlciBzdGF0ZW1lbnRzOyB0aGV5IGFmZmVjdFxub3IgY29udHJvbCB0aGUgZXhlY3V0aW9uIG9mIHRob3NlIG90aGVyIHN0YXRlbWVudHMgaW4gc29tZSB3YXkuICBJblxuZ2VuZXJhbCwgY29tcG91bmQgc3RhdGVtZW50cyBzcGFuIG11bHRpcGxlIGxpbmVzLCBhbHRob3VnaCBpbiBzaW1wbGVcbmluY2FybmF0aW9ucyBhIHdob2xlIGNvbXBvdW5kIHN0YXRlbWVudCBtYXkgYmUgY29udGFpbmVkIGluIG9uZSBsaW5lLlxuXG5UaGUgImlmIiwgIndoaWxlIiBhbmQgImZvciIgc3RhdGVtZW50cyBpbXBsZW1lbnQgdHJhZGl0aW9uYWwgY29udHJvbFxuZmxvdyBjb25zdHJ1Y3RzLiAgInRyeSIgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cFxuY29kZSBmb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzLCB3aGlsZSB0aGUgIndpdGgiIHN0YXRlbWVudCBhbGxvd3MgdGhlXG5leGVjdXRpb24gb2YgaW5pdGlhbGl6YXRpb24gYW5kIGZpbmFsaXphdGlvbiBjb2RlIGFyb3VuZCBhIGJsb2NrIG9mXG5jb2RlLiAgRnVuY3Rpb24gYW5kIGNsYXNzIGRlZmluaXRpb25zIGFyZSBhbHNvIHN5bnRhY3RpY2FsbHkgY29tcG91bmRcbnN0YXRlbWVudHMuXG5cbkEgY29tcG91bmQgc3RhdGVtZW50IGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIFwnY2xhdXNlcy5cJyAgQSBjbGF1c2VcbmNvbnNpc3RzIG9mIGEgaGVhZGVyIGFuZCBhIFwnc3VpdGUuXCcgIFRoZSBjbGF1c2UgaGVhZGVycyBvZiBhXG5wYXJ0aWN1bGFyIGNvbXBvdW5kIHN0YXRlbWVudCBhcmUgYWxsIGF0IHRoZSBzYW1lIGluZGVudGF0aW9uIGxldmVsLlxuRWFjaCBjbGF1c2UgaGVhZGVyIGJlZ2lucyB3aXRoIGEgdW5pcXVlbHkgaWRlbnRpZnlpbmcga2V5d29yZCBhbmQgZW5kc1xud2l0aCBhIGNvbG9uLiAgQSBzdWl0ZSBpcyBhIGdyb3VwIG9mIHN0YXRlbWVudHMgY29udHJvbGxlZCBieSBhXG5jbGF1c2UuICBBIHN1aXRlIGNhbiBiZSBvbmUgb3IgbW9yZSBzZW1pY29sb24tc2VwYXJhdGVkIHNpbXBsZVxuc3RhdGVtZW50cyBvbiB0aGUgc2FtZSBsaW5lIGFzIHRoZSBoZWFkZXIsIGZvbGxvd2luZyB0aGUgaGVhZGVyXCdzXG5jb2xvbiwgb3IgaXQgY2FuIGJlIG9uZSBvciBtb3JlIGluZGVudGVkIHN0YXRlbWVudHMgb24gc3Vic2VxdWVudFxubGluZXMuICBPbmx5IHRoZSBsYXR0ZXIgZm9ybSBvZiBhIHN1aXRlIGNhbiBjb250YWluIG5lc3RlZCBjb21wb3VuZFxuc3RhdGVtZW50czsgdGhlIGZvbGxvd2luZyBpcyBpbGxlZ2FsLCBtb3N0bHkgYmVjYXVzZSBpdCB3b3VsZG5cJ3QgYmVcbmNsZWFyIHRvIHdoaWNoICJpZiIgY2xhdXNlIGEgZm9sbG93aW5nICJlbHNlIiBjbGF1c2Ugd291bGQgYmVsb25nOlxuXG4gICBpZiB0ZXN0MTogaWYgdGVzdDI6IHByaW50KHgpXG5cbkFsc28gbm90ZSB0aGF0IHRoZSBzZW1pY29sb24gYmluZHMgdGlnaHRlciB0aGFuIHRoZSBjb2xvbiBpbiB0aGlzXG5jb250ZXh0LCBzbyB0aGF0IGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgZWl0aGVyIGFsbCBvciBub25lIG9mIHRoZVxuInByaW50KCkiIGNhbGxzIGFyZSBleGVjdXRlZDpcblxuICAgaWYgeCA8IHkgPCB6OiBwcmludCh4KTsgcHJpbnQoeSk7IHByaW50KHopXG5cblN1bW1hcml6aW5nOlxuXG4gICBjb21wb3VuZF9zdG10IDo6PSBpZl9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IHdoaWxlX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgZm9yX3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgdHJ5X3N0bXRcbiAgICAgICAgICAgICAgICAgICAgIHwgd2l0aF9zdG10XG4gICAgICAgICAgICAgICAgICAgICB8IGZ1bmNkZWZcbiAgICAgICAgICAgICAgICAgICAgIHwgY2xhc3NkZWZcbiAgIHN1aXRlICAgICAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgTkVXTElORSBJTkRFTlQgc3RhdGVtZW50KyBERURFTlRcbiAgIHN0YXRlbWVudCAgICAgOjo9IHN0bXRfbGlzdCBORVdMSU5FIHwgY29tcG91bmRfc3RtdFxuICAgc3RtdF9saXN0ICAgICA6Oj0gc2ltcGxlX3N0bXQgKCI7IiBzaW1wbGVfc3RtdCkqIFsiOyJdXG5cbk5vdGUgdGhhdCBzdGF0ZW1lbnRzIGFsd2F5cyBlbmQgaW4gYSAiTkVXTElORSIgcG9zc2libHkgZm9sbG93ZWQgYnkgYVxuIkRFREVOVCIuICBBbHNvIG5vdGUgdGhhdCBvcHRpb25hbCBjb250aW51YXRpb24gY2xhdXNlcyBhbHdheXMgYmVnaW5cbndpdGggYSBrZXl3b3JkIHRoYXQgY2Fubm90IHN0YXJ0IGEgc3RhdGVtZW50LCB0aHVzIHRoZXJlIGFyZSBub1xuYW1iaWd1aXRpZXMgKHRoZSBcJ2RhbmdsaW5nICJlbHNlIlwnIHByb2JsZW0gaXMgc29sdmVkIGluIFB5dGhvbiBieVxucmVxdWlyaW5nIG5lc3RlZCAiaWYiIHN0YXRlbWVudHMgdG8gYmUgaW5kZW50ZWQpLlxuXG5UaGUgZm9ybWF0dGluZyBvZiB0aGUgZ3JhbW1hciBydWxlcyBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIHBsYWNlc1xuZWFjaCBjbGF1c2Ugb24gYSBzZXBhcmF0ZSBsaW5lIGZvciBjbGFyaXR5LlxuXG5cblRoZSAiaWYiIHN0YXRlbWVudFxuPT09PT09PT09PT09PT09PT09XG5cblRoZSAiaWYiIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlICJpZiIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cblxuXG5UaGUgIndoaWxlIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgIndoaWxlIiBzdGF0ZW1lbnQgaXMgdXNlZCBmb3IgcmVwZWF0ZWQgZXhlY3V0aW9uIGFzIGxvbmcgYXMgYW5cbmV4cHJlc3Npb24gaXMgdHJ1ZTpcblxuICAgd2hpbGVfc3RtdCA6Oj0gIndoaWxlIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG5cblRoaXMgcmVwZWF0ZWRseSB0ZXN0cyB0aGUgZXhwcmVzc2lvbiBhbmQsIGlmIGl0IGlzIHRydWUsIGV4ZWN1dGVzIHRoZVxuZmlyc3Qgc3VpdGU7IGlmIHRoZSBleHByZXNzaW9uIGlzIGZhbHNlICh3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHRpbWVcbml0IGlzIHRlc3RlZCkgdGhlIHN1aXRlIG9mIHRoZSAiZWxzZSIgY2xhdXNlLCBpZiBwcmVzZW50LCBpcyBleGVjdXRlZFxuYW5kIHRoZSBsb29wIHRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgZ29lcyBiYWNrXG50byB0ZXN0aW5nIHRoZSBleHByZXNzaW9uLlxuXG5cblRoZSAiZm9yIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT1cblxuVGhlICJmb3IiIHN0YXRlbWVudCBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgZWxlbWVudHMgb2YgYSBzZXF1ZW5jZVxuKHN1Y2ggYXMgYSBzdHJpbmcsIHR1cGxlIG9yIGxpc3QpIG9yIG90aGVyIGl0ZXJhYmxlIG9iamVjdDpcblxuICAgZm9yX3N0bXQgOjo9ICJmb3IiIHRhcmdldF9saXN0ICJpbiIgZXhwcmVzc2lvbl9saXN0ICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGV2YWx1YXRlZCBvbmNlOyBpdCBzaG91bGQgeWllbGQgYW4gaXRlcmFibGVcbm9iamVjdC4gIEFuIGl0ZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIHRoZSByZXN1bHQgb2YgdGhlXG4iZXhwcmVzc2lvbl9saXN0Ii4gIFRoZSBzdWl0ZSBpcyB0aGVuIGV4ZWN1dGVkIG9uY2UgZm9yIGVhY2ggaXRlbVxucHJvdmlkZWQgYnkgdGhlIGl0ZXJhdG9yLCBpbiB0aGUgb3JkZXIgcmV0dXJuZWQgYnkgdGhlIGl0ZXJhdG9yLiAgRWFjaFxuaXRlbSBpbiB0dXJuIGlzIGFzc2lnbmVkIHRvIHRoZSB0YXJnZXQgbGlzdCB1c2luZyB0aGUgc3RhbmRhcmQgcnVsZXNcbmZvciBhc3NpZ25tZW50cyAoc2VlICpBc3NpZ25tZW50IHN0YXRlbWVudHMqKSwgYW5kIHRoZW4gdGhlIHN1aXRlIGlzXG5leGVjdXRlZC4gIFdoZW4gdGhlIGl0ZW1zIGFyZSBleGhhdXN0ZWQgKHdoaWNoIGlzIGltbWVkaWF0ZWx5IHdoZW4gdGhlXG5zZXF1ZW5jZSBpcyBlbXB0eSBvciBhbiBpdGVyYXRvciByYWlzZXMgYSAiU3RvcEl0ZXJhdGlvbiIgZXhjZXB0aW9uKSxcbnRoZSBzdWl0ZSBpbiB0aGUgImVsc2UiIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWQsIGFuZCB0aGUgbG9vcFxudGVybWluYXRlcy5cblxuQSAiYnJlYWsiIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgdGVybWluYXRlcyB0aGUgbG9vcFxud2l0aG91dCBleGVjdXRpbmcgdGhlICJlbHNlIiBjbGF1c2VcJ3Mgc3VpdGUuICBBICJjb250aW51ZSIgc3RhdGVtZW50XG5leGVjdXRlZCBpbiB0aGUgZmlyc3Qgc3VpdGUgc2tpcHMgdGhlIHJlc3Qgb2YgdGhlIHN1aXRlIGFuZCBjb250aW51ZXNcbndpdGggdGhlIG5leHQgaXRlbSwgb3Igd2l0aCB0aGUgImVsc2UiIGNsYXVzZSBpZiB0aGVyZSBpcyBubyBuZXh0XG5pdGVtLlxuXG5UaGUgZm9yLWxvb3AgbWFrZXMgYXNzaWdubWVudHMgdG8gdGhlIHZhcmlhYmxlcyhzKSBpbiB0aGUgdGFyZ2V0IGxpc3QuXG5UaGlzIG92ZXJ3cml0ZXMgYWxsIHByZXZpb3VzIGFzc2lnbm1lbnRzIHRvIHRob3NlIHZhcmlhYmxlcyBpbmNsdWRpbmdcbnRob3NlIG1hZGUgaW4gdGhlIHN1aXRlIG9mIHRoZSBmb3ItbG9vcDpcblxuICAgZm9yIGkgaW4gcmFuZ2UoMTApOlxuICAgICAgIHByaW50KGkpXG4gICAgICAgaSA9IDUgICAgICAgICAgICAgIyB0aGlzIHdpbGwgbm90IGFmZmVjdCB0aGUgZm9yLWxvb3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaSB3aWxsIGJlIG92ZXJ3cml0dGVuIHdpdGggdGhlIG5leHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAjIGluZGV4IGluIHRoZSByYW5nZVxuXG5OYW1lcyBpbiB0aGUgdGFyZ2V0IGxpc3QgYXJlIG5vdCBkZWxldGVkIHdoZW4gdGhlIGxvb3AgaXMgZmluaXNoZWQsXG5idXQgaWYgdGhlIHNlcXVlbmNlIGlzIGVtcHR5LCB0aGV5IHdpbGwgbm90IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBhdFxuYWxsIGJ5IHRoZSBsb29wLiAgSGludDogdGhlIGJ1aWx0LWluIGZ1bmN0aW9uICJyYW5nZSgpIiByZXR1cm5zIGFuXG5pdGVyYXRvciBvZiBpbnRlZ2VycyBzdWl0YWJsZSB0byBlbXVsYXRlIHRoZSBlZmZlY3Qgb2YgUGFzY2FsXCdzICJmb3IgaVxuOj0gYSB0byBiIGRvIjsgZS5nLiwgImxpc3QocmFuZ2UoMykpIiByZXR1cm5zIHRoZSBsaXN0ICJbMCwgMSwgMl0iLlxuXG5Ob3RlOiBUaGVyZSBpcyBhIHN1YnRsZXR5IHdoZW4gdGhlIHNlcXVlbmNlIGlzIGJlaW5nIG1vZGlmaWVkIGJ5IHRoZVxuICBsb29wICh0aGlzIGNhbiBvbmx5IG9jY3VyIGZvciBtdXRhYmxlIHNlcXVlbmNlcywgaS5lLiBsaXN0cykuICBBblxuICBpbnRlcm5hbCBjb3VudGVyIGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBpdGVtIGlzIHVzZWQgbmV4dCxcbiAgYW5kIHRoaXMgaXMgaW5jcmVtZW50ZWQgb24gZWFjaCBpdGVyYXRpb24uICBXaGVuIHRoaXMgY291bnRlciBoYXNcbiAgcmVhY2hlZCB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSB0aGUgbG9vcCB0ZXJtaW5hdGVzLiAgVGhpcyBtZWFuc1xuICB0aGF0IGlmIHRoZSBzdWl0ZSBkZWxldGVzIHRoZSBjdXJyZW50IChvciBhIHByZXZpb3VzKSBpdGVtIGZyb20gdGhlXG4gIHNlcXVlbmNlLCB0aGUgbmV4dCBpdGVtIHdpbGwgYmUgc2tpcHBlZCAoc2luY2UgaXQgZ2V0cyB0aGUgaW5kZXggb2ZcbiAgdGhlIGN1cnJlbnQgaXRlbSB3aGljaCBoYXMgYWxyZWFkeSBiZWVuIHRyZWF0ZWQpLiAgTGlrZXdpc2UsIGlmIHRoZVxuICBzdWl0ZSBpbnNlcnRzIGFuIGl0ZW0gaW4gdGhlIHNlcXVlbmNlIGJlZm9yZSB0aGUgY3VycmVudCBpdGVtLCB0aGVcbiAgY3VycmVudCBpdGVtIHdpbGwgYmUgdHJlYXRlZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRocm91Z2ggdGhlIGxvb3AuXG4gIFRoaXMgY2FuIGxlYWQgdG8gbmFzdHkgYnVncyB0aGF0IGNhbiBiZSBhdm9pZGVkIGJ5IG1ha2luZyBhXG4gIHRlbXBvcmFyeSBjb3B5IHVzaW5nIGEgc2xpY2Ugb2YgdGhlIHdob2xlIHNlcXVlbmNlLCBlLmcuLFxuXG4gICAgIGZvciB4IGluIGFbOl06XG4gICAgICAgICBpZiB4IDwgMDogYS5yZW1vdmUoeClcblxuXG5UaGUgInRyeSIgc3RhdGVtZW50XG49PT09PT09PT09PT09PT09PT09XG5cblRoZSAidHJ5IiBzdGF0ZW1lbnQgc3BlY2lmaWVzIGV4Y2VwdGlvbiBoYW5kbGVycyBhbmQvb3IgY2xlYW51cCBjb2RlXG5mb3IgYSBncm91cCBvZiBzdGF0ZW1lbnRzOlxuXG4gICB0cnlfc3RtdCAgOjo9IHRyeTFfc3RtdCB8IHRyeTJfc3RtdFxuICAgdHJ5MV9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgKCJleGNlcHQiIFtleHByZXNzaW9uIFsiYXMiIGlkZW50aWZpZXJdXSAiOiIgc3VpdGUpK1xuICAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cbiAgICAgICAgICAgICAgICAgWyJmaW5hbGx5IiAiOiIgc3VpdGVdXG4gICB0cnkyX3N0bXQgOjo9ICJ0cnkiICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgICAiZmluYWxseSIgIjoiIHN1aXRlXG5cblRoZSAiZXhjZXB0IiBjbGF1c2Uocykgc3BlY2lmeSBvbmUgb3IgbW9yZSBleGNlcHRpb24gaGFuZGxlcnMuIFdoZW4gbm9cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIGNsYXVzZSwgbm8gZXhjZXB0aW9uIGhhbmRsZXIgaXNcbmV4ZWN1dGVkLiBXaGVuIGFuIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlICJ0cnkiIHN1aXRlLCBhIHNlYXJjaCBmb3IgYW5cbmV4Y2VwdGlvbiBoYW5kbGVyIGlzIHN0YXJ0ZWQuICBUaGlzIHNlYXJjaCBpbnNwZWN0cyB0aGUgZXhjZXB0IGNsYXVzZXNcbmluIHR1cm4gdW50aWwgb25lIGlzIGZvdW5kIHRoYXQgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uLiAgQW4gZXhwcmVzc2lvbi1cbmxlc3MgZXhjZXB0IGNsYXVzZSwgaWYgcHJlc2VudCwgbXVzdCBiZSBsYXN0OyBpdCBtYXRjaGVzIGFueVxuZXhjZXB0aW9uLiAgRm9yIGFuIGV4Y2VwdCBjbGF1c2Ugd2l0aCBhbiBleHByZXNzaW9uLCB0aGF0IGV4cHJlc3Npb25cbmlzIGV2YWx1YXRlZCwgYW5kIHRoZSBjbGF1c2UgbWF0Y2hlcyB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXN1bHRpbmdcbm9iamVjdCBpcyAiY29tcGF0aWJsZSIgd2l0aCB0aGUgZXhjZXB0aW9uLiAgQW4gb2JqZWN0IGlzIGNvbXBhdGlibGVcbndpdGggYW4gZXhjZXB0aW9uIGlmIGl0IGlzIHRoZSBjbGFzcyBvciBhIGJhc2UgY2xhc3Mgb2YgdGhlIGV4Y2VwdGlvblxub2JqZWN0IG9yIGEgdHVwbGUgY29udGFpbmluZyBhbiBpdGVtIGNvbXBhdGlibGUgd2l0aCB0aGUgZXhjZXB0aW9uLlxuXG5JZiBubyBleGNlcHQgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiwgdGhlIHNlYXJjaCBmb3IgYW4gZXhjZXB0aW9uXG5oYW5kbGVyIGNvbnRpbnVlcyBpbiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgb24gdGhlIGludm9jYXRpb24gc3RhY2suXG5bMV1cblxuSWYgdGhlIGV2YWx1YXRpb24gb2YgYW4gZXhwcmVzc2lvbiBpbiB0aGUgaGVhZGVyIG9mIGFuIGV4Y2VwdCBjbGF1c2VcbnJhaXNlcyBhbiBleGNlcHRpb24sIHRoZSBvcmlnaW5hbCBzZWFyY2ggZm9yIGEgaGFuZGxlciBpcyBjYW5jZWxlZCBhbmRcbmEgc2VhcmNoIHN0YXJ0cyBmb3IgdGhlIG5ldyBleGNlcHRpb24gaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uXG50aGUgY2FsbCBzdGFjayAoaXQgaXMgdHJlYXRlZCBhcyBpZiB0aGUgZW50aXJlICJ0cnkiIHN0YXRlbWVudCByYWlzZWRcbnRoZSBleGNlcHRpb24pLlxuXG5XaGVuIGEgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBpcyBmb3VuZCwgdGhlIGV4Y2VwdGlvbiBpcyBhc3NpZ25lZCB0b1xudGhlIHRhcmdldCBzcGVjaWZpZWQgYWZ0ZXIgdGhlICJhcyIga2V5d29yZCBpbiB0aGF0IGV4Y2VwdCBjbGF1c2UsIGlmXG5wcmVzZW50LCBhbmQgdGhlIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQuICBBbGwgZXhjZXB0XG5jbGF1c2VzIG11c3QgaGF2ZSBhbiBleGVjdXRhYmxlIGJsb2NrLiAgV2hlbiB0aGUgZW5kIG9mIHRoaXMgYmxvY2sgaXNcbnJlYWNoZWQsIGV4ZWN1dGlvbiBjb250aW51ZXMgbm9ybWFsbHkgYWZ0ZXIgdGhlIGVudGlyZSB0cnkgc3RhdGVtZW50LlxuKFRoaXMgbWVhbnMgdGhhdCBpZiB0d28gbmVzdGVkIGhhbmRsZXJzIGV4aXN0IGZvciB0aGUgc2FtZSBleGNlcHRpb24sXG5hbmQgdGhlIGV4Y2VwdGlvbiBvY2N1cnMgaW4gdGhlIHRyeSBjbGF1c2Ugb2YgdGhlIGlubmVyIGhhbmRsZXIsIHRoZVxub3V0ZXIgaGFuZGxlciB3aWxsIG5vdCBoYW5kbGUgdGhlIGV4Y2VwdGlvbi4pXG5cbldoZW4gYW4gZXhjZXB0aW9uIGhhcyBiZWVuIGFzc2lnbmVkIHVzaW5nICJhcyB0YXJnZXQiLCBpdCBpcyBjbGVhcmVkXG5hdCB0aGUgZW5kIG9mIHRoZSBleGNlcHQgY2xhdXNlLiAgVGhpcyBpcyBhcyBpZlxuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIGZvb1xuXG53YXMgdHJhbnNsYXRlZCB0b1xuXG4gICBleGNlcHQgRSBhcyBOOlxuICAgICAgIHRyeTpcbiAgICAgICAgICAgZm9vXG4gICAgICAgZmluYWxseTpcbiAgICAgICAgICAgZGVsIE5cblxuVGhpcyBtZWFucyB0aGUgZXhjZXB0aW9uIG11c3QgYmUgYXNzaWduZWQgdG8gYSBkaWZmZXJlbnQgbmFtZSB0byBiZVxuYWJsZSB0byByZWZlciB0byBpdCBhZnRlciB0aGUgZXhjZXB0IGNsYXVzZS4gIEV4Y2VwdGlvbnMgYXJlIGNsZWFyZWRcbmJlY2F1c2Ugd2l0aCB0aGUgdHJhY2ViYWNrIGF0dGFjaGVkIHRvIHRoZW0sIHRoZXkgZm9ybSBhIHJlZmVyZW5jZVxuY3ljbGUgd2l0aCB0aGUgc3RhY2sgZnJhbWUsIGtlZXBpbmcgYWxsIGxvY2FscyBpbiB0aGF0IGZyYW1lIGFsaXZlXG51bnRpbCB0aGUgbmV4dCBnYXJiYWdlIGNvbGxlY3Rpb24gb2NjdXJzLlxuXG5CZWZvcmUgYW4gZXhjZXB0IGNsYXVzZVwncyBzdWl0ZSBpcyBleGVjdXRlZCwgZGV0YWlscyBhYm91dCB0aGVcbmV4Y2VwdGlvbiBhcmUgc3RvcmVkIGluIHRoZSAic3lzIiBtb2R1bGUgYW5kIGNhbiBiZSBhY2Nlc3NlZCB2aWFcbiJzeXMuZXhjX2luZm8oKSIuICJzeXMuZXhjX2luZm8oKSIgcmV0dXJucyBhIDMtdHVwbGUgY29uc2lzdGluZyBvZiB0aGVcbmV4Y2VwdGlvbiBjbGFzcywgdGhlIGV4Y2VwdGlvbiBpbnN0YW5jZSBhbmQgYSB0cmFjZWJhY2sgb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIGlkZW50aWZ5aW5nIHRoZSBwb2ludCBpbiB0aGVcbnByb2dyYW0gd2hlcmUgdGhlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gICJzeXMuZXhjX2luZm8oKSIgdmFsdWVzIGFyZVxucmVzdG9yZWQgdG8gdGhlaXIgcHJldmlvdXMgdmFsdWVzIChiZWZvcmUgdGhlIGNhbGwpIHdoZW4gcmV0dXJuaW5nXG5mcm9tIGEgZnVuY3Rpb24gdGhhdCBoYW5kbGVkIGFuIGV4Y2VwdGlvbi5cblxuVGhlIG9wdGlvbmFsICJlbHNlIiBjbGF1c2UgaXMgZXhlY3V0ZWQgaWYgYW5kIHdoZW4gY29udHJvbCBmbG93cyBvZmZcbnRoZSBlbmQgb2YgdGhlICJ0cnkiIGNsYXVzZS4gWzJdIEV4Y2VwdGlvbnMgaW4gdGhlICJlbHNlIiBjbGF1c2UgYXJlXG5ub3QgaGFuZGxlZCBieSB0aGUgcHJlY2VkaW5nICJleGNlcHQiIGNsYXVzZXMuXG5cbklmICJmaW5hbGx5IiBpcyBwcmVzZW50LCBpdCBzcGVjaWZpZXMgYSBcJ2NsZWFudXBcJyBoYW5kbGVyLiAgVGhlICJ0cnkiXG5jbGF1c2UgaXMgZXhlY3V0ZWQsIGluY2x1ZGluZyBhbnkgImV4Y2VwdCIgYW5kICJlbHNlIiBjbGF1c2VzLiAgSWYgYW5cbmV4Y2VwdGlvbiBvY2N1cnMgaW4gYW55IG9mIHRoZSBjbGF1c2VzIGFuZCBpcyBub3QgaGFuZGxlZCwgdGhlXG5leGNlcHRpb24gaXMgdGVtcG9yYXJpbHkgc2F2ZWQuIFRoZSAiZmluYWxseSIgY2xhdXNlIGlzIGV4ZWN1dGVkLiAgSWZcbnRoZXJlIGlzIGEgc2F2ZWQgZXhjZXB0aW9uIGl0IGlzIHJlLXJhaXNlZCBhdCB0aGUgZW5kIG9mIHRoZSAiZmluYWxseSJcbmNsYXVzZS4gIElmIHRoZSAiZmluYWxseSIgY2xhdXNlIHJhaXNlcyBhbm90aGVyIGV4Y2VwdGlvbiwgdGhlIHNhdmVkXG5leGNlcHRpb24gaXMgc2V0IGFzIHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgZXhjZXB0aW9uLiBJZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UgZXhlY3V0ZXMgYSAicmV0dXJuIiBvciAiYnJlYWsiIHN0YXRlbWVudCwgdGhlIHNhdmVkIGV4Y2VwdGlvblxuaXMgZGlzY2FyZGVkOlxuXG4gICA+Pj4gZGVmIGYoKTpcbiAgIC4uLiAgICAgdHJ5OlxuICAgLi4uICAgICAgICAgMS8wXG4gICAuLi4gICAgIGZpbmFsbHk6XG4gICAuLi4gICAgICAgICByZXR1cm4gNDJcbiAgIC4uLlxuICAgPj4+IGYoKVxuICAgNDJcblxuVGhlIGV4Y2VwdGlvbiBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlIHRvIHRoZSBwcm9ncmFtIGR1cmluZ1xuZXhlY3V0aW9uIG9mIHRoZSAiZmluYWxseSIgY2xhdXNlLlxuXG5XaGVuIGEgInJldHVybiIsICJicmVhayIgb3IgImNvbnRpbnVlIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgaW4gdGhlXG4idHJ5IiBzdWl0ZSBvZiBhICJ0cnkiLi4uImZpbmFsbHkiIHN0YXRlbWVudCwgdGhlICJmaW5hbGx5IiBjbGF1c2UgaXNcbmFsc28gZXhlY3V0ZWQgXCdvbiB0aGUgd2F5IG91dC5cJyBBICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGlsbGVnYWwgaW5cbnRoZSAiZmluYWxseSIgY2xhdXNlLiAoVGhlIHJlYXNvbiBpcyBhIHByb2JsZW0gd2l0aCB0aGUgY3VycmVudFxuaW1wbGVtZW50YXRpb24gLS0tIHRoaXMgcmVzdHJpY3Rpb24gbWF5IGJlIGxpZnRlZCBpbiB0aGUgZnV0dXJlKS5cblxuVGhlIHJldHVybiB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGlzIGRldGVybWluZWQgYnkgdGhlIGxhc3QgInJldHVybiJcbnN0YXRlbWVudCBleGVjdXRlZC4gIFNpbmNlIHRoZSAiZmluYWxseSIgY2xhdXNlIGFsd2F5cyBleGVjdXRlcywgYVxuInJldHVybiIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSAiZmluYWxseSIgY2xhdXNlIHdpbGwgYWx3YXlzIGJlIHRoZVxubGFzdCBvbmUgZXhlY3V0ZWQ6XG5cbiAgID4+PiBkZWYgZm9vKCk6XG4gICAuLi4gICAgIHRyeTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBcJ3RyeVwnXG4gICAuLi4gICAgIGZpbmFsbHk6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdmaW5hbGx5XCdcbiAgIC4uLlxuICAgPj4+IGZvbygpXG4gICBcJ2ZpbmFsbHlcJ1xuXG5BZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGV4Y2VwdGlvbnMgY2FuIGJlIGZvdW5kIGluIHNlY3Rpb25cbipFeGNlcHRpb25zKiwgYW5kIGluZm9ybWF0aW9uIG9uIHVzaW5nIHRoZSAicmFpc2UiIHN0YXRlbWVudCB0b1xuZ2VuZXJhdGUgZXhjZXB0aW9ucyBtYXkgYmUgZm91bmQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cblxuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbj09PT09PT09PT09PT09PT09PT09XG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuXG5cbkZ1bmN0aW9uIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PT09PVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIHVzZXItZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgKHNlZVxuc2VjdGlvbiAqVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5Kik6XG5cbiAgIGZ1bmNkZWYgICAgICAgIDo6PSBbZGVjb3JhdG9yc10gImRlZiIgZnVuY25hbWUgIigiIFtwYXJhbWV0ZXJfbGlzdF0gIikiIFsiLT4iIGV4cHJlc3Npb25dICI6IiBzdWl0ZVxuICAgZGVjb3JhdG9ycyAgICAgOjo9IGRlY29yYXRvcitcbiAgIGRlY29yYXRvciAgICAgIDo6PSAiQCIgZG90dGVkX25hbWUgWyIoIiBbcGFyYW1ldGVyX2xpc3QgWyIsIl1dICIpIl0gTkVXTElORVxuICAgZG90dGVkX25hbWUgICAgOjo9IGlkZW50aWZpZXIgKCIuIiBpZGVudGlmaWVyKSpcbiAgIHBhcmFtZXRlcl9saXN0IDo6PSAoZGVmcGFyYW1ldGVyICIsIikqXG4gICAgICAgICAgICAgICAgICAgICAgfCAiKiIgW3BhcmFtZXRlcl0gKCIsIiBkZWZwYXJhbWV0ZXIpKiBbIiwiICIqKiIgcGFyYW1ldGVyXVxuICAgICAgICAgICAgICAgICAgICAgIHwgIioqIiBwYXJhbWV0ZXJcbiAgICAgICAgICAgICAgICAgICAgICB8IGRlZnBhcmFtZXRlciBbIiwiXSApXG4gICBwYXJhbWV0ZXIgICAgICA6Oj0gaWRlbnRpZmllciBbIjoiIGV4cHJlc3Npb25dXG4gICBkZWZwYXJhbWV0ZXIgICA6Oj0gcGFyYW1ldGVyIFsiPSIgZXhwcmVzc2lvbl1cbiAgIGZ1bmNuYW1lICAgICAgIDo6PSBpZGVudGlmaWVyXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBhbiBleGVjdXRhYmxlIHN0YXRlbWVudC4gIEl0cyBleGVjdXRpb24gYmluZHNcbnRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjdXJyZW50IGxvY2FsIG5hbWVzcGFjZSB0byBhIGZ1bmN0aW9uIG9iamVjdFxuKGEgd3JhcHBlciBhcm91bmQgdGhlIGV4ZWN1dGFibGUgY29kZSBmb3IgdGhlIGZ1bmN0aW9uKS4gIFRoaXNcbmZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBnbG9iYWwgbmFtZXNwYWNlXG5hcyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC5cblxuVGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhlY3V0ZSB0aGUgZnVuY3Rpb24gYm9keTsgdGhpcyBnZXRzXG5leGVjdXRlZCBvbmx5IHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZC4gWzNdXG5cbkEgZnVuY3Rpb24gZGVmaW5pdGlvbiBtYXkgYmUgd3JhcHBlZCBieSBvbmUgb3IgbW9yZSAqZGVjb3JhdG9yKlxuZXhwcmVzc2lvbnMuIERlY29yYXRvciBleHByZXNzaW9ucyBhcmUgZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzXG5kZWZpbmVkLCBpbiB0aGUgc2NvcGUgdGhhdCBjb250YWlucyB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbi4gIFRoZVxucmVzdWx0IG11c3QgYmUgYSBjYWxsYWJsZSwgd2hpY2ggaXMgaW52b2tlZCB3aXRoIHRoZSBmdW5jdGlvbiBvYmplY3RcbmFzIHRoZSBvbmx5IGFyZ3VtZW50LiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYm91bmQgdG8gdGhlIGZ1bmN0aW9uIG5hbWVcbmluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC4gIE11bHRpcGxlIGRlY29yYXRvcnMgYXJlIGFwcGxpZWQgaW5cbm5lc3RlZCBmYXNoaW9uLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGRlZiBmdW5jKCk6IHBhc3NcblxuaXMgZXF1aXZhbGVudCB0b1xuXG4gICBkZWYgZnVuYygpOiBwYXNzXG4gICBmdW5jID0gZjEoYXJnKShmMihmdW5jKSlcblxuV2hlbiBvbmUgb3IgbW9yZSAqcGFyYW1ldGVycyogaGF2ZSB0aGUgZm9ybSAqcGFyYW1ldGVyKiAiPSJcbipleHByZXNzaW9uKiwgdGhlIGZ1bmN0aW9uIGlzIHNhaWQgdG8gaGF2ZSAiZGVmYXVsdCBwYXJhbWV0ZXIgdmFsdWVzLiJcbkZvciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCB2YWx1ZSwgdGhlIGNvcnJlc3BvbmRpbmcgKmFyZ3VtZW50KiBtYXlcbmJlIG9taXR0ZWQgZnJvbSBhIGNhbGwsIGluIHdoaWNoIGNhc2UgdGhlIHBhcmFtZXRlclwncyBkZWZhdWx0IHZhbHVlIGlzXG5zdWJzdGl0dXRlZC4gIElmIGEgcGFyYW1ldGVyIGhhcyBhIGRlZmF1bHQgdmFsdWUsIGFsbCBmb2xsb3dpbmdcbnBhcmFtZXRlcnMgdXAgdW50aWwgdGhlICIiKiIiIG11c3QgYWxzbyBoYXZlIGEgZGVmYXVsdCB2YWx1ZSAtLS0gdGhpc1xuaXMgYSBzeW50YWN0aWMgcmVzdHJpY3Rpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGJ5IHRoZSBncmFtbWFyLlxuXG4qKkRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcyBhcmUgZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB3aGVuIHRoZVxuZnVuY3Rpb24gZGVmaW5pdGlvbiBpcyBleGVjdXRlZC4qKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGV4cHJlc3Npb24gaXNcbmV2YWx1YXRlZCBvbmNlLCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLCBhbmQgdGhhdCB0aGUgc2FtZSAicHJlLVxuY29tcHV0ZWQiIHZhbHVlIGlzIHVzZWQgZm9yIGVhY2ggY2FsbC4gIFRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnRcbnRvIHVuZGVyc3RhbmQgd2hlbiBhIGRlZmF1bHQgcGFyYW1ldGVyIGlzIGEgbXV0YWJsZSBvYmplY3QsIHN1Y2ggYXMgYVxubGlzdCBvciBhIGRpY3Rpb25hcnk6IGlmIHRoZSBmdW5jdGlvbiBtb2RpZmllcyB0aGUgb2JqZWN0IChlLmcuIGJ5XG5hcHBlbmRpbmcgYW4gaXRlbSB0byBhIGxpc3QpLCB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbiBlZmZlY3QgbW9kaWZpZWQuXG5UaGlzIGlzIGdlbmVyYWxseSBub3Qgd2hhdCB3YXMgaW50ZW5kZWQuICBBIHdheSBhcm91bmQgdGhpcyBpcyB0byB1c2VcbiJOb25lIiBhcyB0aGUgZGVmYXVsdCwgYW5kIGV4cGxpY2l0bHkgdGVzdCBmb3IgaXQgaW4gdGhlIGJvZHkgb2YgdGhlXG5mdW5jdGlvbiwgZS5nLjpcblxuICAgZGVmIHdoYXRzX29uX3RoZV90ZWxseShwZW5ndWluPU5vbmUpOlxuICAgICAgIGlmIHBlbmd1aW4gaXMgTm9uZTpcbiAgICAgICAgICAgcGVuZ3VpbiA9IFtdXG4gICAgICAgcGVuZ3Vpbi5hcHBlbmQoInByb3BlcnR5IG9mIHRoZSB6b28iKVxuICAgICAgIHJldHVybiBwZW5ndWluXG5cbkZ1bmN0aW9uIGNhbGwgc2VtYW50aWNzIGFyZSBkZXNjcmliZWQgaW4gbW9yZSBkZXRhaWwgaW4gc2VjdGlvblxuKkNhbGxzKi4gQSBmdW5jdGlvbiBjYWxsIGFsd2F5cyBhc3NpZ25zIHZhbHVlcyB0byBhbGwgcGFyYW1ldGVyc1xubWVudGlvbmVkIGluIHRoZSBwYXJhbWV0ZXIgbGlzdCwgZWl0aGVyIGZyb20gcG9zaXRpb24gYXJndW1lbnRzLCBmcm9tXG5rZXl3b3JkIGFyZ3VtZW50cywgb3IgZnJvbSBkZWZhdWx0IHZhbHVlcy4gIElmIHRoZSBmb3JtXG4iIippZGVudGlmaWVyIiIgaXMgcHJlc2VudCwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSB0dXBsZSByZWNlaXZpbmcgYW55XG5leGNlc3MgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBkZWZhdWx0aW5nIHRvIHRoZSBlbXB0eSB0dXBsZS4gIElmIHRoZVxuZm9ybSAiIioqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG5kaWN0aW9uYXJ5IHJlY2VpdmluZyBhbnkgZXhjZXNzIGtleXdvcmQgYXJndW1lbnRzLCBkZWZhdWx0aW5nIHRvIGEgbmV3XG5lbXB0eSBkaWN0aW9uYXJ5LiBQYXJhbWV0ZXJzIGFmdGVyICIiKiIiIG9yICIiKmlkZW50aWZpZXIiIiBhcmVcbmtleXdvcmQtb25seSBwYXJhbWV0ZXJzIGFuZCBtYXkgb25seSBiZSBwYXNzZWQgdXNlZCBrZXl3b3JkIGFyZ3VtZW50cy5cblxuUGFyYW1ldGVycyBtYXkgaGF2ZSBhbm5vdGF0aW9ucyBvZiB0aGUgZm9ybSAiIjogZXhwcmVzc2lvbiIiIGZvbGxvd2luZ1xudGhlIHBhcmFtZXRlciBuYW1lLiAgQW55IHBhcmFtZXRlciBtYXkgaGF2ZSBhbiBhbm5vdGF0aW9uIGV2ZW4gdGhvc2Vcbm9mIHRoZSBmb3JtICIqaWRlbnRpZmllciIgb3IgIioqaWRlbnRpZmllciIuICBGdW5jdGlvbnMgbWF5IGhhdmVcbiJyZXR1cm4iIGFubm90YXRpb24gb2YgdGhlIGZvcm0gIiItPiBleHByZXNzaW9uIiIgYWZ0ZXIgdGhlIHBhcmFtZXRlclxubGlzdC4gIFRoZXNlIGFubm90YXRpb25zIGNhbiBiZSBhbnkgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gYW5kIGFyZVxuZXZhbHVhdGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuICBBbm5vdGF0aW9ucyBtYXlcbmJlIGV2YWx1YXRlZCBpbiBhIGRpZmZlcmVudCBvcmRlciB0aGFuIHRoZXkgYXBwZWFyIGluIHRoZSBzb3VyY2UgY29kZS5cblRoZSBwcmVzZW5jZSBvZiBhbm5vdGF0aW9ucyBkb2VzIG5vdCBjaGFuZ2UgdGhlIHNlbWFudGljcyBvZiBhXG5mdW5jdGlvbi4gIFRoZSBhbm5vdGF0aW9uIHZhbHVlcyBhcmUgYXZhaWxhYmxlIGFzIHZhbHVlcyBvZiBhXG5kaWN0aW9uYXJ5IGtleWVkIGJ5IHRoZSBwYXJhbWV0ZXJzXCcgbmFtZXMgaW4gdGhlICJfX2Fubm90YXRpb25zX18iXG5hdHRyaWJ1dGUgb2YgdGhlIGZ1bmN0aW9uIG9iamVjdC5cblxuSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBjcmVhdGUgYW5vbnltb3VzIGZ1bmN0aW9ucyAoZnVuY3Rpb25zIG5vdCBib3VuZFxudG8gYSBuYW1lKSwgZm9yIGltbWVkaWF0ZSB1c2UgaW4gZXhwcmVzc2lvbnMuICBUaGlzIHVzZXMgbGFtYmRhXG5leHByZXNzaW9ucywgZGVzY3JpYmVkIGluIHNlY3Rpb24gKkxhbWJkYXMqLiAgTm90ZSB0aGF0IHRoZSBsYW1iZGFcbmV4cHJlc3Npb24gaXMgbWVyZWx5IGEgc2hvcnRoYW5kIGZvciBhIHNpbXBsaWZpZWQgZnVuY3Rpb24gZGVmaW5pdGlvbjtcbmEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhICIiZGVmIiIgc3RhdGVtZW50IGNhbiBiZSBwYXNzZWQgYXJvdW5kIG9yXG5hc3NpZ25lZCB0byBhbm90aGVyIG5hbWUganVzdCBsaWtlIGEgZnVuY3Rpb24gZGVmaW5lZCBieSBhIGxhbWJkYVxuZXhwcmVzc2lvbi4gIFRoZSAiImRlZiIiIGZvcm0gaXMgYWN0dWFsbHkgbW9yZSBwb3dlcmZ1bCBzaW5jZSBpdFxuYWxsb3dzIHRoZSBleGVjdXRpb24gb2YgbXVsdGlwbGUgc3RhdGVtZW50cyBhbmQgYW5ub3RhdGlvbnMuXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIEZ1bmN0aW9ucyBhcmUgZmlyc3QtY2xhc3Mgb2JqZWN0cy4gIEEgIiJkZWYiIlxuc3RhdGVtZW50IGV4ZWN1dGVkIGluc2lkZSBhIGZ1bmN0aW9uIGRlZmluaXRpb24gZGVmaW5lcyBhIGxvY2FsXG5mdW5jdGlvbiB0aGF0IGNhbiBiZSByZXR1cm5lZCBvciBwYXNzZWQgYXJvdW5kLiAgRnJlZSB2YXJpYWJsZXMgdXNlZFxuaW4gdGhlIG5lc3RlZCBmdW5jdGlvbiBjYW4gYWNjZXNzIHRoZSBsb2NhbCB2YXJpYWJsZXMgb2YgdGhlIGZ1bmN0aW9uXG5jb250YWluaW5nIHRoZSBkZWYuICBTZWUgc2VjdGlvbiAqTmFtaW5nIGFuZCBiaW5kaW5nKiBmb3IgZGV0YWlscy5cblxuU2VlIGFsc286ICoqUEVQIDMxMDcqKiAtIEZ1bmN0aW9uIEFubm90YXRpb25zXG5cbiAgICAgVGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb24gZm9yIGZ1bmN0aW9uIGFubm90YXRpb25zLlxuXG5cbkNsYXNzIGRlZmluaXRpb25zXG49PT09PT09PT09PT09PT09PVxuXG5BIGNsYXNzIGRlZmluaXRpb24gZGVmaW5lcyBhIGNsYXNzIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZFxudHlwZSBoaWVyYXJjaHkqKTpcblxuICAgY2xhc3NkZWYgICAgOjo9IFtkZWNvcmF0b3JzXSAiY2xhc3MiIGNsYXNzbmFtZSBbaW5oZXJpdGFuY2VdICI6IiBzdWl0ZVxuICAgaW5oZXJpdGFuY2UgOjo9ICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIlxuICAgY2xhc3NuYW1lICAgOjo9IGlkZW50aWZpZXJcblxuQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuIGV4ZWN1dGFibGUgc3RhdGVtZW50LiAgVGhlIGluaGVyaXRhbmNlIGxpc3RcbnVzdWFsbHkgZ2l2ZXMgYSBsaXN0IG9mIGJhc2UgY2xhc3NlcyAoc2VlICpDdXN0b21pemluZyBjbGFzcyBjcmVhdGlvbipcbmZvciBtb3JlIGFkdmFuY2VkIHVzZXMpLCBzbyBlYWNoIGl0ZW0gaW4gdGhlIGxpc3Qgc2hvdWxkIGV2YWx1YXRlIHRvIGFcbmNsYXNzIG9iamVjdCB3aGljaCBhbGxvd3Mgc3ViY2xhc3NpbmcuICBDbGFzc2VzIHdpdGhvdXQgYW4gaW5oZXJpdGFuY2Vcbmxpc3QgaW5oZXJpdCwgYnkgZGVmYXVsdCwgZnJvbSB0aGUgYmFzZSBjbGFzcyAib2JqZWN0IjsgaGVuY2UsXG5cbiAgIGNsYXNzIEZvbzpcbiAgICAgICBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgY2xhc3MgRm9vKG9iamVjdCk6XG4gICAgICAgcGFzc1xuXG5UaGUgY2xhc3NcJ3Mgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBpbiBhIG5ldyBleGVjdXRpb24gZnJhbWUgKHNlZVxuKk5hbWluZyBhbmQgYmluZGluZyopLCB1c2luZyBhIG5ld2x5IGNyZWF0ZWQgbG9jYWwgbmFtZXNwYWNlIGFuZCB0aGVcbm9yaWdpbmFsIGdsb2JhbCBuYW1lc3BhY2UuIChVc3VhbGx5LCB0aGUgc3VpdGUgY29udGFpbnMgbW9zdGx5XG5mdW5jdGlvbiBkZWZpbml0aW9ucy4pICBXaGVuIHRoZSBjbGFzc1wncyBzdWl0ZSBmaW5pc2hlcyBleGVjdXRpb24sIGl0c1xuZXhlY3V0aW9uIGZyYW1lIGlzIGRpc2NhcmRlZCBidXQgaXRzIGxvY2FsIG5hbWVzcGFjZSBpcyBzYXZlZC4gWzRdIEFcbmNsYXNzIG9iamVjdCBpcyB0aGVuIGNyZWF0ZWQgdXNpbmcgdGhlIGluaGVyaXRhbmNlIGxpc3QgZm9yIHRoZSBiYXNlXG5jbGFzc2VzIGFuZCB0aGUgc2F2ZWQgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkuXG5UaGUgY2xhc3MgbmFtZSBpcyBib3VuZCB0byB0aGlzIGNsYXNzIG9iamVjdCBpbiB0aGUgb3JpZ2luYWwgbG9jYWxcbm5hbWVzcGFjZS5cblxuQ2xhc3MgY3JlYXRpb24gY2FuIGJlIGN1c3RvbWl6ZWQgaGVhdmlseSB1c2luZyAqbWV0YWNsYXNzZXMqLlxuXG5DbGFzc2VzIGNhbiBhbHNvIGJlIGRlY29yYXRlZDoganVzdCBsaWtlIHdoZW4gZGVjb3JhdGluZyBmdW5jdGlvbnMsXG5cbiAgIEBmMShhcmcpXG4gICBAZjJcbiAgIGNsYXNzIEZvbzogcGFzc1xuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIGNsYXNzIEZvbzogcGFzc1xuICAgRm9vID0gZjEoYXJnKShmMihGb28pKVxuXG5UaGUgZXZhbHVhdGlvbiBydWxlcyBmb3IgdGhlIGRlY29yYXRvciBleHByZXNzaW9ucyBhcmUgdGhlIHNhbWUgYXMgZm9yXG5mdW5jdGlvbiBkZWNvcmF0b3JzLiAgVGhlIHJlc3VsdCBtdXN0IGJlIGEgY2xhc3Mgb2JqZWN0LCB3aGljaCBpcyB0aGVuXG5ib3VuZCB0byB0aGUgY2xhc3MgbmFtZS5cblxuKipQcm9ncmFtbWVyXCdzIG5vdGU6KiogVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIGNsYXNzIGRlZmluaXRpb24gYXJlXG5jbGFzcyBhdHRyaWJ1dGVzOyB0aGV5IGFyZSBzaGFyZWQgYnkgaW5zdGFuY2VzLiAgSW5zdGFuY2UgYXR0cmlidXRlc1xuY2FuIGJlIHNldCBpbiBhIG1ldGhvZCB3aXRoICJzZWxmLm5hbWUgPSB2YWx1ZSIuICBCb3RoIGNsYXNzIGFuZFxuaW5zdGFuY2UgYXR0cmlidXRlcyBhcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBub3RhdGlvbiAiInNlbGYubmFtZSIiLFxuYW5kIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBoaWRlcyBhIGNsYXNzIGF0dHJpYnV0ZSB3aXRoIHRoZSBzYW1lIG5hbWVcbndoZW4gYWNjZXNzZWQgaW4gdGhpcyB3YXkuICBDbGFzcyBhdHRyaWJ1dGVzIGNhbiBiZSB1c2VkIGFzIGRlZmF1bHRzXG5mb3IgaW5zdGFuY2UgYXR0cmlidXRlcywgYnV0IHVzaW5nIG11dGFibGUgdmFsdWVzIHRoZXJlIGNhbiBsZWFkIHRvXG51bmV4cGVjdGVkIHJlc3VsdHMuICAqRGVzY3JpcHRvcnMqIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBpbnN0YW5jZVxudmFyaWFibGVzIHdpdGggZGlmZmVyZW50IGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTE1KiogLSBNZXRhY2xhc3NlcyBpbiBQeXRob24gMyAqKlBFUCAzMTI5KiogLVxuICBDbGFzcyBEZWNvcmF0b3JzXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhlIGV4Y2VwdGlvbiBpcyBwcm9wYWdhdGVkIHRvIHRoZSBpbnZvY2F0aW9uIHN0YWNrIHVubGVzc1xuICAgIHRoZXJlIGlzIGEgImZpbmFsbHkiIGNsYXVzZSB3aGljaCBoYXBwZW5zIHRvIHJhaXNlIGFub3RoZXJcbiAgICBleGNlcHRpb24uIFRoYXQgbmV3IGV4Y2VwdGlvbiBjYXVzZXMgdGhlIG9sZCBvbmUgdG8gYmUgbG9zdC5cblxuWzJdIEN1cnJlbnRseSwgY29udHJvbCAiZmxvd3Mgb2ZmIHRoZSBlbmQiIGV4Y2VwdCBpbiB0aGUgY2FzZSBvZlxuICAgIGFuIGV4Y2VwdGlvbiBvciB0aGUgZXhlY3V0aW9uIG9mIGEgInJldHVybiIsICJjb250aW51ZSIsIG9yXG4gICAgImJyZWFrIiBzdGF0ZW1lbnQuXG5cblszXSBBIHN0cmluZyBsaXRlcmFsIGFwcGVhcmluZyBhcyB0aGUgZmlyc3Qgc3RhdGVtZW50IGluIHRoZVxuICAgIGZ1bmN0aW9uIGJvZHkgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgZnVuY3Rpb25cJ3MgIl9fZG9jX18iXG4gICAgYXR0cmlidXRlIGFuZCB0aGVyZWZvcmUgdGhlIGZ1bmN0aW9uXCdzICpkb2NzdHJpbmcqLlxuXG5bNF0gQSBzdHJpbmcgbGl0ZXJhbCBhcHBlYXJpbmcgYXMgdGhlIGZpcnN0IHN0YXRlbWVudCBpbiB0aGUgY2xhc3NcbiAgICBib2R5IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG5hbWVzcGFjZVwncyAiX19kb2NfXyIgaXRlbSBhbmRcbiAgICB0aGVyZWZvcmUgdGhlIGNsYXNzXCdzICpkb2NzdHJpbmcqLlxuJywKKyAnY29udGV4dC1tYW5hZ2Vycyc6IHUnXG5XaXRoIFN0YXRlbWVudCBDb250ZXh0IE1hbmFnZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKmNvbnRleHQgbWFuYWdlciogaXMgYW4gb2JqZWN0IHRoYXQgZGVmaW5lcyB0aGUgcnVudGltZSBjb250ZXh0IHRvXG5iZSBlc3RhYmxpc2hlZCB3aGVuIGV4ZWN1dGluZyBhICJ3aXRoIiBzdGF0ZW1lbnQuIFRoZSBjb250ZXh0IG1hbmFnZXJcbmhhbmRsZXMgdGhlIGVudHJ5IGludG8sIGFuZCB0aGUgZXhpdCBmcm9tLCB0aGUgZGVzaXJlZCBydW50aW1lIGNvbnRleHRcbmZvciB0aGUgZXhlY3V0aW9uIG9mIHRoZSBibG9jayBvZiBjb2RlLiAgQ29udGV4dCBtYW5hZ2VycyBhcmUgbm9ybWFsbHlcbmludm9rZWQgdXNpbmcgdGhlICJ3aXRoIiBzdGF0ZW1lbnQgKGRlc2NyaWJlZCBpbiBzZWN0aW9uICpUaGUgd2l0aFxuc3RhdGVtZW50KiksIGJ1dCBjYW4gYWxzbyBiZSB1c2VkIGJ5IGRpcmVjdGx5IGludm9raW5nIHRoZWlyIG1ldGhvZHMuXG5cblR5cGljYWwgdXNlcyBvZiBjb250ZXh0IG1hbmFnZXJzIGluY2x1ZGUgc2F2aW5nIGFuZCByZXN0b3JpbmcgdmFyaW91c1xua2luZHMgb2YgZ2xvYmFsIHN0YXRlLCBsb2NraW5nIGFuZCB1bmxvY2tpbmcgcmVzb3VyY2VzLCBjbG9zaW5nIG9wZW5lZFxuZmlsZXMsIGV0Yy5cblxuRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY29udGV4dCBtYW5hZ2Vycywgc2VlICpDb250ZXh0IE1hbmFnZXIgVHlwZXMqLlxuXG5vYmplY3QuX19lbnRlcl9fKHNlbGYpXG5cbiAgIEVudGVyIHRoZSBydW50aW1lIGNvbnRleHQgcmVsYXRlZCB0byB0aGlzIG9iamVjdC4gVGhlICJ3aXRoIlxuICAgc3RhdGVtZW50IHdpbGwgYmluZCB0aGlzIG1ldGhvZFwncyByZXR1cm4gdmFsdWUgdG8gdGhlIHRhcmdldChzKVxuICAgc3BlY2lmaWVkIGluIHRoZSAiYXMiIGNsYXVzZSBvZiB0aGUgc3RhdGVtZW50LCBpZiBhbnkuXG5cbm9iamVjdC5fX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0cmFjZWJhY2spXG5cbiAgIEV4aXQgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgcGFyYW1ldGVyc1xuICAgZGVzY3JpYmUgdGhlIGV4Y2VwdGlvbiB0aGF0IGNhdXNlZCB0aGUgY29udGV4dCB0byBiZSBleGl0ZWQuIElmIHRoZVxuICAgY29udGV4dCB3YXMgZXhpdGVkIHdpdGhvdXQgYW4gZXhjZXB0aW9uLCBhbGwgdGhyZWUgYXJndW1lbnRzIHdpbGxcbiAgIGJlICJOb25lIi5cblxuICAgSWYgYW4gZXhjZXB0aW9uIGlzIHN1cHBsaWVkLCBhbmQgdGhlIG1ldGhvZCB3aXNoZXMgdG8gc3VwcHJlc3MgdGhlXG4gICBleGNlcHRpb24gKGkuZS4sIHByZXZlbnQgaXQgZnJvbSBiZWluZyBwcm9wYWdhdGVkKSwgaXQgc2hvdWxkXG4gICByZXR1cm4gYSB0cnVlIHZhbHVlLiBPdGhlcndpc2UsIHRoZSBleGNlcHRpb24gd2lsbCBiZSBwcm9jZXNzZWRcbiAgIG5vcm1hbGx5IHVwb24gZXhpdCBmcm9tIHRoaXMgbWV0aG9kLlxuXG4gICBOb3RlIHRoYXQgIl9fZXhpdF9fKCkiIG1ldGhvZHMgc2hvdWxkIG5vdCByZXJhaXNlIHRoZSBwYXNzZWQtaW5cbiAgIGV4Y2VwdGlvbjsgdGhpcyBpcyB0aGUgY2FsbGVyXCdzIHJlc3BvbnNpYmlsaXR5LlxuXG5TZWUgYWxzbzogKipQRVAgMDM0MyoqIC0gVGhlICJ3aXRoIiBzdGF0ZW1lbnRcblxuICAgICBUaGUgc3BlY2lmaWNhdGlvbiwgYmFja2dyb3VuZCwgYW5kIGV4YW1wbGVzIGZvciB0aGUgUHl0aG9uICJ3aXRoIlxuICAgICBzdGF0ZW1lbnQuXG4nLAorICdjb250aW51ZSc6IHUnXG5UaGUgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBjb250aW51ZV9zdG10IDo6PSAiY29udGludWUiXG5cbiJjb250aW51ZSIgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSAiZm9yIiBvciAid2hpbGUiXG5sb29wLCBidXQgbm90IG5lc3RlZCBpbiBhIGZ1bmN0aW9uIG9yIGNsYXNzIGRlZmluaXRpb24gb3IgImZpbmFsbHkiXG5jbGF1c2Ugd2l0aGluIHRoYXQgbG9vcC4gIEl0IGNvbnRpbnVlcyB3aXRoIHRoZSBuZXh0IGN5Y2xlIG9mIHRoZVxubmVhcmVzdCBlbmNsb3NpbmcgbG9vcC5cblxuV2hlbiAiY29udGludWUiIHBhc3NlcyBjb250cm9sIG91dCBvZiBhICJ0cnkiIHN0YXRlbWVudCB3aXRoIGFcbiJmaW5hbGx5IiBjbGF1c2UsIHRoYXQgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5XG5zdGFydGluZyB0aGUgbmV4dCBsb29wIGN5Y2xlLlxuJywKKyAnY29udmVyc2lvbnMnOiB1J1xuQXJpdGhtZXRpYyBjb252ZXJzaW9uc1xuKioqKioqKioqKioqKioqKioqKioqKlxuXG5XaGVuIGEgZGVzY3JpcHRpb24gb2YgYW4gYXJpdGhtZXRpYyBvcGVyYXRvciBiZWxvdyB1c2VzIHRoZSBwaHJhc2VcbiJ0aGUgbnVtZXJpYyBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBhIGNvbW1vbiB0eXBlLCIgdGhpcyBtZWFuc1xudGhhdCB0aGUgb3BlcmF0b3IgaW1wbGVtZW50YXRpb24gZm9yIGJ1aWx0LWluIHR5cGVzIHdvcmtzIGFzIGZvbGxvd3M6XG5cbiogSWYgZWl0aGVyIGFyZ3VtZW50IGlzIGEgY29tcGxleCBudW1iZXIsIHRoZSBvdGhlciBpcyBjb252ZXJ0ZWQgdG9cbiAgY29tcGxleDtcblxuKiBvdGhlcndpc2UsIGlmIGVpdGhlciBhcmd1bWVudCBpcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgdGhlXG4gIG90aGVyIGlzIGNvbnZlcnRlZCB0byBmbG9hdGluZyBwb2ludDtcblxuKiBvdGhlcndpc2UsIGJvdGggbXVzdCBiZSBpbnRlZ2VycyBhbmQgbm8gY29udmVyc2lvbiBpcyBuZWNlc3NhcnkuXG5cblNvbWUgYWRkaXRpb25hbCBydWxlcyBhcHBseSBmb3IgY2VydGFpbiBvcGVyYXRvcnMgKGUuZy4sIGEgc3RyaW5nIGFzIGFcbmxlZnQgYXJndW1lbnQgdG8gdGhlIFwnJVwnIG9wZXJhdG9yKS4gIEV4dGVuc2lvbnMgbXVzdCBkZWZpbmUgdGhlaXIgb3duXG5jb252ZXJzaW9uIGJlaGF2aW9yLlxuJywKKyAnY3VzdG9taXphdGlvbic6IHUnXG5CYXNpYyBjdXN0b21pemF0aW9uXG4qKioqKioqKioqKioqKioqKioqXG5cbm9iamVjdC5fX25ld19fKGNsc1ssIC4uLl0pXG5cbiAgIENhbGxlZCB0byBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgY2xhc3MgKmNscyouICAiX19uZXdfXygpIiBpcyBhXG4gICBzdGF0aWMgbWV0aG9kIChzcGVjaWFsLWNhc2VkIHNvIHlvdSBuZWVkIG5vdCBkZWNsYXJlIGl0IGFzIHN1Y2gpXG4gICB0aGF0IHRha2VzIHRoZSBjbGFzcyBvZiB3aGljaCBhbiBpbnN0YW5jZSB3YXMgcmVxdWVzdGVkIGFzIGl0c1xuICAgZmlyc3QgYXJndW1lbnQuICBUaGUgcmVtYWluaW5nIGFyZ3VtZW50cyBhcmUgdGhvc2UgcGFzc2VkIHRvIHRoZVxuICAgb2JqZWN0IGNvbnN0cnVjdG9yIGV4cHJlc3Npb24gKHRoZSBjYWxsIHRvIHRoZSBjbGFzcykuICBUaGUgcmV0dXJuXG4gICB2YWx1ZSBvZiAiX19uZXdfXygpIiBzaG91bGQgYmUgdGhlIG5ldyBvYmplY3QgaW5zdGFuY2UgKHVzdWFsbHkgYW5cbiAgIGluc3RhbmNlIG9mICpjbHMqKS5cblxuICAgVHlwaWNhbCBpbXBsZW1lbnRhdGlvbnMgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBjbGFzcyBieVxuICAgaW52b2tpbmcgdGhlIHN1cGVyY2xhc3NcJ3MgIl9fbmV3X18oKSIgbWV0aG9kIHVzaW5nXG4gICAic3VwZXIoY3VycmVudGNsYXNzLCBjbHMpLl9fbmV3X18oY2xzWywgLi4uXSkiIHdpdGggYXBwcm9wcmlhdGVcbiAgIGFyZ3VtZW50cyBhbmQgdGhlbiBtb2RpZnlpbmcgdGhlIG5ld2x5LWNyZWF0ZWQgaW5zdGFuY2UgYXNcbiAgIG5lY2Vzc2FyeSBiZWZvcmUgcmV0dXJuaW5nIGl0LlxuXG4gICBJZiAiX19uZXdfXygpIiByZXR1cm5zIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBiZSBpbnZva2VkIGxpa2VcbiAgICJfX2luaXRfXyhzZWxmWywgLi4uXSkiLCB3aGVyZSAqc2VsZiogaXMgdGhlIG5ldyBpbnN0YW5jZSBhbmQgdGhlXG4gICByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aGUgc2FtZSBhcyB3ZXJlIHBhc3NlZCB0byAiX19uZXdfXygpIi5cblxuICAgSWYgIl9fbmV3X18oKSIgZG9lcyBub3QgcmV0dXJuIGFuIGluc3RhbmNlIG9mICpjbHMqLCB0aGVuIHRoZSBuZXdcbiAgIGluc3RhbmNlXCdzICJfX2luaXRfXygpIiBtZXRob2Qgd2lsbCBub3QgYmUgaW52b2tlZC5cblxuICAgIl9fbmV3X18oKSIgaXMgaW50ZW5kZWQgbWFpbmx5IHRvIGFsbG93IHN1YmNsYXNzZXMgb2YgaW1tdXRhYmxlXG4gICB0eXBlcyAobGlrZSBpbnQsIHN0ciwgb3IgdHVwbGUpIHRvIGN1c3RvbWl6ZSBpbnN0YW5jZSBjcmVhdGlvbi4gIEl0XG4gICBpcyBhbHNvIGNvbW1vbmx5IG92ZXJyaWRkZW4gaW4gY3VzdG9tIG1ldGFjbGFzc2VzIGluIG9yZGVyIHRvXG4gICBjdXN0b21pemUgY2xhc3MgY3JlYXRpb24uXG5cbm9iamVjdC5fX2luaXRfXyhzZWxmWywgLi4uXSlcblxuICAgQ2FsbGVkIGFmdGVyIHRoZSBpbnN0YW5jZSBoYXMgYmVlbiBjcmVhdGVkIChieSAiX19uZXdfXygpIiksIGJ1dFxuICAgYmVmb3JlIGl0IGlzIHJldHVybmVkIHRvIHRoZSBjYWxsZXIuICBUaGUgYXJndW1lbnRzIGFyZSB0aG9zZVxuICAgcGFzc2VkIHRvIHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBleHByZXNzaW9uLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhblxuICAgIl9faW5pdF9fKCkiIG1ldGhvZCwgdGhlIGRlcml2ZWQgY2xhc3NcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCwgaWZcbiAgIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXQgdG8gZW5zdXJlIHByb3BlciBpbml0aWFsaXphdGlvbiBvZiB0aGVcbiAgIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2U7IGZvciBleGFtcGxlOlxuICAgIkJhc2VDbGFzcy5fX2luaXRfXyhzZWxmLCBbYXJncy4uLl0pIi5cblxuICAgQmVjYXVzZSAiX19uZXdfXygpIiBhbmQgIl9faW5pdF9fKCkiIHdvcmsgdG9nZXRoZXIgaW4gY29uc3RydWN0aW5nXG4gICBvYmplY3RzICgiX19uZXdfXygpIiB0byBjcmVhdGUgaXQsIGFuZCAiX19pbml0X18oKSIgdG8gY3VzdG9taXNlXG4gICBpdCksIG5vIG5vbi0iTm9uZSIgdmFsdWUgbWF5IGJlIHJldHVybmVkIGJ5ICJfX2luaXRfXygpIjsgZG9pbmcgc29cbiAgIHdpbGwgY2F1c2UgYSAiVHlwZUVycm9yIiB0byBiZSByYWlzZWQgYXQgcnVudGltZS5cblxub2JqZWN0Ll9fZGVsX18oc2VsZilcblxuICAgQ2FsbGVkIHdoZW4gdGhlIGluc3RhbmNlIGlzIGFib3V0IHRvIGJlIGRlc3Ryb3llZC4gIFRoaXMgaXMgYWxzb1xuICAgY2FsbGVkIGEgZGVzdHJ1Y3Rvci4gIElmIGEgYmFzZSBjbGFzcyBoYXMgYSAiX19kZWxfXygpIiBtZXRob2QsIHRoZVxuICAgZGVyaXZlZCBjbGFzc1wncyAiX19kZWxfXygpIiBtZXRob2QsIGlmIGFueSwgbXVzdCBleHBsaWNpdGx5IGNhbGwgaXRcbiAgIHRvIGVuc3VyZSBwcm9wZXIgZGVsZXRpb24gb2YgdGhlIGJhc2UgY2xhc3MgcGFydCBvZiB0aGUgaW5zdGFuY2UuXG4gICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgKHRob3VnaCBub3QgcmVjb21tZW5kZWQhKSBmb3IgdGhlXG4gICAiX19kZWxfXygpIiBtZXRob2QgdG8gcG9zdHBvbmUgZGVzdHJ1Y3Rpb24gb2YgdGhlIGluc3RhbmNlIGJ5XG4gICBjcmVhdGluZyBhIG5ldyByZWZlcmVuY2UgdG8gaXQuICBJdCBtYXkgdGhlbiBiZSBjYWxsZWQgYXQgYSBsYXRlclxuICAgdGltZSB3aGVuIHRoaXMgbmV3IHJlZmVyZW5jZSBpcyBkZWxldGVkLiAgSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdFxuICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgY2FsbGVkIGZvciBvYmplY3RzIHRoYXQgc3RpbGwgZXhpc3Qgd2hlblxuICAgdGhlIGludGVycHJldGVyIGV4aXRzLlxuXG4gICBOb3RlOiAiZGVsIHgiIGRvZXNuXCd0IGRpcmVjdGx5IGNhbGwgInguX19kZWxfXygpIiAtLS0gdGhlIGZvcm1lclxuICAgICBkZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yICJ4IiBieSBvbmUsIGFuZCB0aGUgbGF0dGVyIGlzXG4gICAgIG9ubHkgY2FsbGVkIHdoZW4gIngiXCdzIHJlZmVyZW5jZSBjb3VudCByZWFjaGVzIHplcm8uICBTb21lIGNvbW1vblxuICAgICBzaXR1YXRpb25zIHRoYXQgbWF5IHByZXZlbnQgdGhlIHJlZmVyZW5jZSBjb3VudCBvZiBhbiBvYmplY3QgZnJvbVxuICAgICBnb2luZyB0byB6ZXJvIGluY2x1ZGU6IGNpcmN1bGFyIHJlZmVyZW5jZXMgYmV0d2VlbiBvYmplY3RzIChlLmcuLFxuICAgICBhIGRvdWJseS1saW5rZWQgbGlzdCBvciBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUgd2l0aCBwYXJlbnQgYW5kXG4gICAgIGNoaWxkIHBvaW50ZXJzKTsgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgb2ZcbiAgICAgYSBmdW5jdGlvbiB0aGF0IGNhdWdodCBhbiBleGNlcHRpb24gKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMuZXhjX2luZm8oKVsyXSIga2VlcHMgdGhlIHN0YWNrIGZyYW1lIGFsaXZlKTsgb3IgYSByZWZlcmVuY2VcbiAgICAgdG8gdGhlIG9iamVjdCBvbiB0aGUgc3RhY2sgZnJhbWUgdGhhdCByYWlzZWQgYW4gdW5oYW5kbGVkXG4gICAgIGV4Y2VwdGlvbiBpbiBpbnRlcmFjdGl2ZSBtb2RlICh0aGUgdHJhY2ViYWNrIHN0b3JlZCBpblxuICAgICAic3lzLmxhc3RfdHJhY2ViYWNrIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpLiAgVGhlIGZpcnN0XG4gICAgIHNpdHVhdGlvbiBjYW4gb25seSBiZSByZW1lZGllZCBieSBleHBsaWNpdGx5IGJyZWFraW5nIHRoZSBjeWNsZXM7XG4gICAgIHRoZSBzZWNvbmQgY2FuIGJlIHJlc29sdmVkIGJ5IGZyZWVpbmcgdGhlIHJlZmVyZW5jZSB0byB0aGVcbiAgICAgdHJhY2ViYWNrIG9iamVjdCB3aGVuIGl0IGlzIG5vIGxvbmdlciB1c2VmdWwsIGFuZCB0aGUgdGhpcmQgY2FuXG4gICAgIGJlIHJlc29sdmVkIGJ5IHN0b3JpbmcgIk5vbmUiIGluICJzeXMubGFzdF90cmFjZWJhY2siLiBDaXJjdWxhclxuICAgICByZWZlcmVuY2VzIHdoaWNoIGFyZSBnYXJiYWdlIGFyZSBkZXRlY3RlZCBhbmQgY2xlYW5lZCB1cCB3aGVuIHRoZVxuICAgICBjeWNsaWMgZ2FyYmFnZSBjb2xsZWN0b3IgaXMgZW5hYmxlZCAoaXRcJ3Mgb24gYnkgZGVmYXVsdCkuIFJlZmVyXG4gICAgIHRvIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgImdjIiBtb2R1bGUgZm9yIG1vcmUgaW5mb3JtYXRpb25cbiAgICAgYWJvdXQgdGhpcyB0b3BpYy5cblxuICAgV2FybmluZzogRHVlIHRvIHRoZSBwcmVjYXJpb3VzIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2hcbiAgICAgIl9fZGVsX18oKSIgbWV0aG9kcyBhcmUgaW52b2tlZCwgZXhjZXB0aW9ucyB0aGF0IG9jY3VyIGR1cmluZ1xuICAgICB0aGVpciBleGVjdXRpb24gYXJlIGlnbm9yZWQsIGFuZCBhIHdhcm5pbmcgaXMgcHJpbnRlZCB0b1xuICAgICAic3lzLnN0ZGVyciIgaW5zdGVhZC4gQWxzbywgd2hlbiAiX19kZWxfXygpIiBpcyBpbnZva2VkIGluXG4gICAgIHJlc3BvbnNlIHRvIGEgbW9kdWxlIGJlaW5nIGRlbGV0ZWQgKGUuZy4sIHdoZW4gZXhlY3V0aW9uIG9mIHRoZVxuICAgICBwcm9ncmFtIGlzIGRvbmUpLCBvdGhlciBnbG9iYWxzIHJlZmVyZW5jZWQgYnkgdGhlICJfX2RlbF9fKCkiXG4gICAgIG1ldGhvZCBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gZGVsZXRlZCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZ1xuICAgICB0b3JuIGRvd24gKGUuZy4gdGhlIGltcG9ydCBtYWNoaW5lcnkgc2h1dHRpbmcgZG93bikuICBGb3IgdGhpc1xuICAgICByZWFzb24sICJfX2RlbF9fKCkiIG1ldGhvZHMgc2hvdWxkIGRvIHRoZSBhYnNvbHV0ZSBtaW5pbXVtIG5lZWRlZFxuICAgICB0byBtYWludGFpbiBleHRlcm5hbCBpbnZhcmlhbnRzLiAgU3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDEuNSxcbiAgICAgUHl0aG9uIGd1YXJhbnRlZXMgdGhhdCBnbG9iYWxzIHdob3NlIG5hbWUgYmVnaW5zIHdpdGggYSBzaW5nbGVcbiAgICAgdW5kZXJzY29yZSBhcmUgZGVsZXRlZCBmcm9tIHRoZWlyIG1vZHVsZSBiZWZvcmUgb3RoZXIgZ2xvYmFscyBhcmVcbiAgICAgZGVsZXRlZDsgaWYgbm8gb3RoZXIgcmVmZXJlbmNlcyB0byBzdWNoIGdsb2JhbHMgZXhpc3QsIHRoaXMgbWF5XG4gICAgIGhlbHAgaW4gYXNzdXJpbmcgdGhhdCBpbXBvcnRlZCBtb2R1bGVzIGFyZSBzdGlsbCBhdmFpbGFibGUgYXQgdGhlXG4gICAgIHRpbWUgd2hlbiB0aGUgIl9fZGVsX18oKSIgbWV0aG9kIGlzIGNhbGxlZC5cblxub2JqZWN0Ll9fcmVwcl9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSB0aGUgInJlcHIoKSIgYnVpbHQtaW4gZnVuY3Rpb24gdG8gY29tcHV0ZSB0aGUgIm9mZmljaWFsIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhpc1xuICAgc2hvdWxkIGxvb2sgbGlrZSBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIHRoYXQgY291bGQgYmUgdXNlZCB0b1xuICAgcmVjcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgdmFsdWUgKGdpdmVuIGFuIGFwcHJvcHJpYXRlXG4gICBlbnZpcm9ubWVudCkuICBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwgYSBzdHJpbmcgb2YgdGhlIGZvcm1cbiAgICI8Li4uc29tZSB1c2VmdWwgZGVzY3JpcHRpb24uLi4+IiBzaG91bGQgYmUgcmV0dXJuZWQuIFRoZSByZXR1cm5cbiAgIHZhbHVlIG11c3QgYmUgYSBzdHJpbmcgb2JqZWN0LiBJZiBhIGNsYXNzIGRlZmluZXMgIl9fcmVwcl9fKCkiIGJ1dFxuICAgbm90ICJfX3N0cl9fKCkiLCB0aGVuICJfX3JlcHJfXygpIiBpcyBhbHNvIHVzZWQgd2hlbiBhbiAiaW5mb3JtYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgaW5zdGFuY2VzIG9mIHRoYXQgY2xhc3MgaXMgcmVxdWlyZWQuXG5cbiAgIFRoaXMgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGRlYnVnZ2luZywgc28gaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlXG4gICByZXByZXNlbnRhdGlvbiBpcyBpbmZvcm1hdGlvbi1yaWNoIGFuZCB1bmFtYmlndW91cy5cblxub2JqZWN0Ll9fc3RyX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5ICJzdHIob2JqZWN0KSIgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgImZvcm1hdCgpIiBhbmRcbiAgICJwcmludCgpIiB0byBjb21wdXRlIHRoZSAiaW5mb3JtYWwiIG9yIG5pY2VseSBwcmludGFibGUgc3RyaW5nXG4gICByZXByZXNlbnRhdGlvbiBvZiBhbiBvYmplY3QuICBUaGUgcmV0dXJuIHZhbHVlIG11c3QgYmUgYSAqc3RyaW5nKlxuICAgb2JqZWN0LlxuXG4gICBUaGlzIG1ldGhvZCBkaWZmZXJzIGZyb20gIm9iamVjdC5fX3JlcHJfXygpIiBpbiB0aGF0IHRoZXJlIGlzIG5vXG4gICBleHBlY3RhdGlvbiB0aGF0ICJfX3N0cl9fKCkiIHJldHVybiBhIHZhbGlkIFB5dGhvbiBleHByZXNzaW9uOiBhXG4gICBtb3JlIGNvbnZlbmllbnQgb3IgY29uY2lzZSByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZC5cblxuICAgVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZGVmaW5lZCBieSB0aGUgYnVpbHQtaW4gdHlwZSAib2JqZWN0IlxuICAgY2FsbHMgIm9iamVjdC5fX3JlcHJfXygpIi5cblxub2JqZWN0Ll9fYnl0ZXNfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgImJ5dGVzKCkiIHRvIGNvbXB1dGUgYSBieXRlLXN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhblxuICAgb2JqZWN0LiBUaGlzIHNob3VsZCByZXR1cm4gYSAiYnl0ZXMiIG9iamVjdC5cblxub2JqZWN0Ll9fZm9ybWF0X18oc2VsZiwgZm9ybWF0X3NwZWMpXG5cbiAgIENhbGxlZCBieSB0aGUgImZvcm1hdCgpIiBidWlsdC1pbiBmdW5jdGlvbiAoYW5kIGJ5IGV4dGVuc2lvbiwgdGhlXG4gICAic3RyLmZvcm1hdCgpIiBtZXRob2Qgb2YgY2xhc3MgInN0ciIpIHRvIHByb2R1Y2UgYSAiZm9ybWF0dGVkIlxuICAgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gVGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgYVxuICAgc3RyaW5nIHRoYXQgY29udGFpbnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0dGluZyBvcHRpb25zXG4gICBkZXNpcmVkLiBUaGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlICJmb3JtYXRfc3BlYyIgYXJndW1lbnQgaXMgdXAgdG9cbiAgIHRoZSB0eXBlIGltcGxlbWVudGluZyAiX19mb3JtYXRfXygpIiwgaG93ZXZlciBtb3N0IGNsYXNzZXMgd2lsbFxuICAgZWl0aGVyIGRlbGVnYXRlIGZvcm1hdHRpbmcgdG8gb25lIG9mIHRoZSBidWlsdC1pbiB0eXBlcywgb3IgdXNlIGFcbiAgIHNpbWlsYXIgZm9ybWF0dGluZyBvcHRpb24gc3ludGF4LlxuXG4gICBTZWUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZVxuICAgc3RhbmRhcmQgZm9ybWF0dGluZyBzeW50YXguXG5cbiAgIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjQ6IFRoZSBfX2Zvcm1hdF9fIG1ldGhvZCBvZiAib2JqZWN0IiBpdHNlbGZcbiAgIHJhaXNlcyBhICJUeXBlRXJyb3IiIGlmIHBhc3NlZCBhbnkgbm9uLWVtcHR5IHN0cmluZy5cblxub2JqZWN0Ll9fbHRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2xlX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19lcV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbmVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2d0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19nZV9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBhcmUgdGhlIHNvLWNhbGxlZCAicmljaCBjb21wYXJpc29uIiBtZXRob2RzLiBUaGVcbiAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gb3BlcmF0b3Igc3ltYm9scyBhbmQgbWV0aG9kIG5hbWVzIGlzIGFzXG4gICBmb2xsb3dzOiAieDx5IiBjYWxscyAieC5fX2x0X18oeSkiLCAieDw9eSIgY2FsbHMgInguX19sZV9fKHkpIixcbiAgICJ4PT15IiBjYWxscyAieC5fX2VxX18oeSkiLCAieCE9eSIgY2FsbHMgInguX19uZV9fKHkpIiwgIng+eSIgY2FsbHNcbiAgICJ4Ll9fZ3RfXyh5KSIsIGFuZCAieD49eSIgY2FsbHMgInguX19nZV9fKHkpIi5cblxuICAgQSByaWNoIGNvbXBhcmlzb24gbWV0aG9kIG1heSByZXR1cm4gdGhlIHNpbmdsZXRvbiAiTm90SW1wbGVtZW50ZWQiXG4gICBpZiBpdCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbiBmb3IgYSBnaXZlbiBwYWlyIG9mXG4gICBhcmd1bWVudHMuIEJ5IGNvbnZlbnRpb24sICJGYWxzZSIgYW5kICJUcnVlIiBhcmUgcmV0dXJuZWQgZm9yIGFcbiAgIHN1Y2Nlc3NmdWwgY29tcGFyaXNvbi4gSG93ZXZlciwgdGhlc2UgbWV0aG9kcyBjYW4gcmV0dXJuIGFueSB2YWx1ZSxcbiAgIHNvIGlmIHRoZSBjb21wYXJpc29uIG9wZXJhdG9yIGlzIHVzZWQgaW4gYSBCb29sZWFuIGNvbnRleHQgKGUuZy4sXG4gICBpbiB0aGUgY29uZGl0aW9uIG9mIGFuICJpZiIgc3RhdGVtZW50KSwgUHl0aG9uIHdpbGwgY2FsbCAiYm9vbCgpIlxuICAgb24gdGhlIHZhbHVlIHRvIGRldGVybWluZSBpZiB0aGUgcmVzdWx0IGlzIHRydWUgb3IgZmFsc2UuXG5cbiAgIEJ5IGRlZmF1bHQsICJfX25lX18oKSIgZGVsZWdhdGVzIHRvICJfX2VxX18oKSIgYW5kIGludmVydHMgdGhlXG4gICByZXN1bHQgdW5sZXNzIGl0IGlzICJOb3RJbXBsZW1lbnRlZCIuICBUaGVyZSBhcmUgbm8gb3RoZXIgaW1wbGllZFxuICAgcmVsYXRpb25zaGlwcyBhbW9uZyB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMsIGZvciBleGFtcGxlLCB0aGVcbiAgIHRydXRoIG9mICIoeDx5IG9yIHg9PXkpIiBkb2VzIG5vdCBpbXBseSAieDw9eSIuIFRvIGF1dG9tYXRpY2FsbHlcbiAgIGdlbmVyYXRlIG9yZGVyaW5nIG9wZXJhdGlvbnMgZnJvbSBhIHNpbmdsZSByb290IG9wZXJhdGlvbiwgc2VlXG4gICAiZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nKCkiLlxuXG4gICBTZWUgdGhlIHBhcmFncmFwaCBvbiAiX19oYXNoX18oKSIgZm9yIHNvbWUgaW1wb3J0YW50IG5vdGVzIG9uXG4gICBjcmVhdGluZyAqaGFzaGFibGUqIG9iamVjdHMgd2hpY2ggc3VwcG9ydCBjdXN0b20gY29tcGFyaXNvblxuICAgb3BlcmF0aW9ucyBhbmQgYXJlIHVzYWJsZSBhcyBkaWN0aW9uYXJ5IGtleXMuXG5cbiAgIFRoZXJlIGFyZSBubyBzd2FwcGVkLWFyZ3VtZW50IHZlcnNpb25zIG9mIHRoZXNlIG1ldGhvZHMgKHRvIGJlIHVzZWRcbiAgIHdoZW4gdGhlIGxlZnQgYXJndW1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgb3BlcmF0aW9uIGJ1dCB0aGUgcmlnaHRcbiAgIGFyZ3VtZW50IGRvZXMpOyByYXRoZXIsICJfX2x0X18oKSIgYW5kICJfX2d0X18oKSIgYXJlIGVhY2ggb3RoZXJcJ3NcbiAgIHJlZmxlY3Rpb24sICJfX2xlX18oKSIgYW5kICJfX2dlX18oKSIgYXJlIGVhY2ggb3RoZXJcJ3MgcmVmbGVjdGlvbixcbiAgIGFuZCAiX19lcV9fKCkiIGFuZCAiX19uZV9fKCkiIGFyZSB0aGVpciBvd24gcmVmbGVjdGlvbi4gSWYgdGhlXG4gICBvcGVyYW5kcyBhcmUgb2YgZGlmZmVyZW50IHR5cGVzLCBhbmQgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGFcbiAgIGRpcmVjdCBvciBpbmRpcmVjdCBzdWJjbGFzcyBvZiB0aGUgbGVmdCBvcGVyYW5kXCdzIHR5cGUsIHRoZVxuICAgcmVmbGVjdGVkIG1ldGhvZCBvZiB0aGUgcmlnaHQgb3BlcmFuZCBoYXMgcHJpb3JpdHksIG90aGVyd2lzZSB0aGVcbiAgIGxlZnQgb3BlcmFuZFwncyBtZXRob2QgaGFzIHByaW9yaXR5LiAgVmlydHVhbCBzdWJjbGFzc2luZyBpcyBub3RcbiAgIGNvbnNpZGVyZWQuXG5cbm9iamVjdC5fX2hhc2hfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgYnVpbHQtaW4gZnVuY3Rpb24gImhhc2goKSIgYW5kIGZvciBvcGVyYXRpb25zIG9uIG1lbWJlcnNcbiAgIG9mIGhhc2hlZCBjb2xsZWN0aW9ucyBpbmNsdWRpbmcgInNldCIsICJmcm96ZW5zZXQiLCBhbmQgImRpY3QiLlxuICAgIl9faGFzaF9fKCkiIHNob3VsZCByZXR1cm4gYW4gaW50ZWdlci4gIFRoZSBvbmx5IHJlcXVpcmVkIHByb3BlcnR5XG4gICBpcyB0aGF0IG9iamVjdHMgd2hpY2ggY29tcGFyZSBlcXVhbCBoYXZlIHRoZSBzYW1lIGhhc2ggdmFsdWU7IGl0IGlzXG4gICBhZHZpc2VkIHRvIHNvbWVob3cgbWl4IHRvZ2V0aGVyIChlLmcuIHVzaW5nIGV4Y2x1c2l2ZSBvcikgdGhlIGhhc2hcbiAgIHZhbHVlcyBmb3IgdGhlIGNvbXBvbmVudHMgb2YgdGhlIG9iamVjdCB0aGF0IGFsc28gcGxheSBhIHBhcnQgaW5cbiAgIGNvbXBhcmlzb24gb2Ygb2JqZWN0cy5cblxuICAgTm90ZTogImhhc2goKSIgdHJ1bmNhdGVzIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuIG9iamVjdFwnc1xuICAgICBjdXN0b20gIl9faGFzaF9fKCkiIG1ldGhvZCB0byB0aGUgc2l6ZSBvZiBhICJQeV9zc2l6ZV90Ii4gIFRoaXNcbiAgICAgaXMgdHlwaWNhbGx5IDggYnl0ZXMgb24gNjQtYml0IGJ1aWxkcyBhbmQgNCBieXRlcyBvbiAzMi1iaXRcbiAgICAgYnVpbGRzLiBJZiBhbiBvYmplY3RcJ3MgICAiX19oYXNoX18oKSIgbXVzdCBpbnRlcm9wZXJhdGUgb24gYnVpbGRzXG4gICAgIG9mIGRpZmZlcmVudCBiaXQgc2l6ZXMsIGJlIHN1cmUgdG8gY2hlY2sgdGhlIHdpZHRoIG9uIGFsbFxuICAgICBzdXBwb3J0ZWQgYnVpbGRzLiAgQW4gZWFzeSB3YXkgdG8gZG8gdGhpcyBpcyB3aXRoICJweXRob24gLWNcbiAgICAgImltcG9ydCBzeXM7IHByaW50KHN5cy5oYXNoX2luZm8ud2lkdGgpIiIuXG5cbiAgIElmIGEgY2xhc3MgZG9lcyBub3QgZGVmaW5lIGFuICJfX2VxX18oKSIgbWV0aG9kIGl0IHNob3VsZCBub3RcbiAgIGRlZmluZSBhICJfX2hhc2hfXygpIiBvcGVyYXRpb24gZWl0aGVyOyBpZiBpdCBkZWZpbmVzICJfX2VxX18oKSJcbiAgIGJ1dCBub3QgIl9faGFzaF9fKCkiLCBpdHMgaW5zdGFuY2VzIHdpbGwgbm90IGJlIHVzYWJsZSBhcyBpdGVtcyBpblxuICAgaGFzaGFibGUgY29sbGVjdGlvbnMuICBJZiBhIGNsYXNzIGRlZmluZXMgbXV0YWJsZSBvYmplY3RzIGFuZFxuICAgaW1wbGVtZW50cyBhbiAiX19lcV9fKCkiIG1ldGhvZCwgaXQgc2hvdWxkIG5vdCBpbXBsZW1lbnRcbiAgICJfX2hhc2hfXygpIiwgc2luY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIGhhc2hhYmxlIGNvbGxlY3Rpb25zXG4gICByZXF1aXJlcyB0aGF0IGEga2V5XCdzIGhhc2ggdmFsdWUgaXMgaW1tdXRhYmxlIChpZiB0aGUgb2JqZWN0XCdzIGhhc2hcbiAgIHZhbHVlIGNoYW5nZXMsIGl0IHdpbGwgYmUgaW4gdGhlIHdyb25nIGhhc2ggYnVja2V0KS5cblxuICAgVXNlci1kZWZpbmVkIGNsYXNzZXMgaGF2ZSAiX19lcV9fKCkiIGFuZCAiX19oYXNoX18oKSIgbWV0aG9kcyBieVxuICAgZGVmYXVsdDsgd2l0aCB0aGVtLCBhbGwgb2JqZWN0cyBjb21wYXJlIHVuZXF1YWwgKGV4Y2VwdCB3aXRoXG4gICB0aGVtc2VsdmVzKSBhbmQgInguX19oYXNoX18oKSIgcmV0dXJucyBhbiBhcHByb3ByaWF0ZSB2YWx1ZSBzdWNoXG4gICB0aGF0ICJ4ID09IHkiIGltcGxpZXMgYm90aCB0aGF0ICJ4IGlzIHkiIGFuZCAiaGFzaCh4KSA9PSBoYXNoKHkpIi5cblxuICAgQSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIGFuZCBkb2VzIG5vdCBkZWZpbmUgIl9faGFzaF9fKCkiXG4gICB3aWxsIGhhdmUgaXRzICJfX2hhc2hfXygpIiBpbXBsaWNpdGx5IHNldCB0byAiTm9uZSIuICBXaGVuIHRoZVxuICAgIl9faGFzaF9fKCkiIG1ldGhvZCBvZiBhIGNsYXNzIGlzICJOb25lIiwgaW5zdGFuY2VzIG9mIHRoZSBjbGFzc1xuICAgd2lsbCByYWlzZSBhbiBhcHByb3ByaWF0ZSAiVHlwZUVycm9yIiB3aGVuIGEgcHJvZ3JhbSBhdHRlbXB0cyB0b1xuICAgcmV0cmlldmUgdGhlaXIgaGFzaCB2YWx1ZSwgYW5kIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgdW5oYXNoYWJsZSB3aGVuIGNoZWNraW5nICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIi5cblxuICAgSWYgYSBjbGFzcyB0aGF0IG92ZXJyaWRlcyAiX19lcV9fKCkiIG5lZWRzIHRvIHJldGFpbiB0aGVcbiAgIGltcGxlbWVudGF0aW9uIG9mICJfX2hhc2hfXygpIiBmcm9tIGEgcGFyZW50IGNsYXNzLCB0aGUgaW50ZXJwcmV0ZXJcbiAgIG11c3QgYmUgdG9sZCB0aGlzIGV4cGxpY2l0bHkgYnkgc2V0dGluZyAiX19oYXNoX18gPVxuICAgPFBhcmVudENsYXNzPi5fX2hhc2hfXyIuXG5cbiAgIElmIGEgY2xhc3MgdGhhdCBkb2VzIG5vdCBvdmVycmlkZSAiX19lcV9fKCkiIHdpc2hlcyB0byBzdXBwcmVzc1xuICAgaGFzaCBzdXBwb3J0LCBpdCBzaG91bGQgaW5jbHVkZSAiX19oYXNoX18gPSBOb25lIiBpbiB0aGUgY2xhc3NcbiAgIGRlZmluaXRpb24uIEEgY2xhc3Mgd2hpY2ggZGVmaW5lcyBpdHMgb3duICJfX2hhc2hfXygpIiB0aGF0XG4gICBleHBsaWNpdGx5IHJhaXNlcyBhICJUeXBlRXJyb3IiIHdvdWxkIGJlIGluY29ycmVjdGx5IGlkZW50aWZpZWQgYXNcbiAgIGhhc2hhYmxlIGJ5IGFuICJpc2luc3RhbmNlKG9iaiwgY29sbGVjdGlvbnMuSGFzaGFibGUpIiBjYWxsLlxuXG4gICBOb3RlOiBCeSBkZWZhdWx0LCB0aGUgIl9faGFzaF9fKCkiIHZhbHVlcyBvZiBzdHIsIGJ5dGVzIGFuZFxuICAgICBkYXRldGltZSBvYmplY3RzIGFyZSAic2FsdGVkIiB3aXRoIGFuIHVucHJlZGljdGFibGUgcmFuZG9tIHZhbHVlLlxuICAgICBBbHRob3VnaCB0aGV5IHJlbWFpbiBjb25zdGFudCB3aXRoaW4gYW4gaW5kaXZpZHVhbCBQeXRob25cbiAgICAgcHJvY2VzcywgdGhleSBhcmUgbm90IHByZWRpY3RhYmxlIGJldHdlZW4gcmVwZWF0ZWQgaW52b2NhdGlvbnMgb2ZcbiAgICAgUHl0aG9uLlRoaXMgaXMgaW50ZW5kZWQgdG8gcHJvdmlkZSBwcm90ZWN0aW9uIGFnYWluc3QgYSBkZW5pYWwtXG4gICAgIG9mLXNlcnZpY2UgY2F1c2VkIGJ5IGNhcmVmdWxseS1jaG9zZW4gaW5wdXRzIHRoYXQgZXhwbG9pdCB0aGVcbiAgICAgd29yc3QgY2FzZSBwZXJmb3JtYW5jZSBvZiBhIGRpY3QgaW5zZXJ0aW9uLCBPKG5eMikgY29tcGxleGl0eS5cbiAgICAgU2VlIGh0dHA6Ly93d3cub2NlcnQub3JnL2Fkdmlzb3JpZXMvb2NlcnQtMjAxMS0wMDMuaHRtbCBmb3JcbiAgICAgZGV0YWlscy5DaGFuZ2luZyBoYXNoIHZhbHVlcyBhZmZlY3RzIHRoZSBpdGVyYXRpb24gb3JkZXIgb2ZcbiAgICAgZGljdHMsIHNldHMgYW5kIG90aGVyIG1hcHBpbmdzLiAgUHl0aG9uIGhhcyBuZXZlciBtYWRlIGd1YXJhbnRlZXNcbiAgICAgYWJvdXQgdGhpcyBvcmRlcmluZyAoYW5kIGl0IHR5cGljYWxseSB2YXJpZXMgYmV0d2VlbiAzMi1iaXQgYW5kXG4gICAgIDY0LWJpdCBidWlsZHMpLlNlZSBhbHNvICJQWVRIT05IQVNIU0VFRCIuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IEhhc2ggcmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuXG5cbm9iamVjdC5fX2Jvb2xfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRydXRoIHZhbHVlIHRlc3RpbmcgYW5kIHRoZSBidWlsdC1pbiBvcGVyYXRpb25cbiAgICJib29sKCkiOyBzaG91bGQgcmV0dXJuICJGYWxzZSIgb3IgIlRydWUiLiAgV2hlbiB0aGlzIG1ldGhvZCBpcyBub3RcbiAgIGRlZmluZWQsICJfX2xlbl9fKCkiIGlzIGNhbGxlZCwgaWYgaXQgaXMgZGVmaW5lZCwgYW5kIHRoZSBvYmplY3QgaXNcbiAgIGNvbnNpZGVyZWQgdHJ1ZSBpZiBpdHMgcmVzdWx0IGlzIG5vbnplcm8uICBJZiBhIGNsYXNzIGRlZmluZXNcbiAgIG5laXRoZXIgIl9fbGVuX18oKSIgbm9yICJfX2Jvb2xfXygpIiwgYWxsIGl0cyBpbnN0YW5jZXMgYXJlXG4gICBjb25zaWRlcmVkIHRydWUuXG4nLAorICdkZWJ1Z2dlcic6IHUnXG4icGRiIiAtLS0gVGhlIFB5dGhvbiBEZWJ1Z2dlclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuKipTb3VyY2UgY29kZToqKiBMaWIvcGRiLnB5XG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIG1vZHVsZSAicGRiIiBkZWZpbmVzIGFuIGludGVyYWN0aXZlIHNvdXJjZSBjb2RlIGRlYnVnZ2VyIGZvclxuUHl0aG9uIHByb2dyYW1zLiAgSXQgc3VwcG9ydHMgc2V0dGluZyAoY29uZGl0aW9uYWwpIGJyZWFrcG9pbnRzIGFuZFxuc2luZ2xlIHN0ZXBwaW5nIGF0IHRoZSBzb3VyY2UgbGluZSBsZXZlbCwgaW5zcGVjdGlvbiBvZiBzdGFjayBmcmFtZXMsXG5zb3VyY2UgY29kZSBsaXN0aW5nLCBhbmQgZXZhbHVhdGlvbiBvZiBhcmJpdHJhcnkgUHl0aG9uIGNvZGUgaW4gdGhlXG5jb250ZXh0IG9mIGFueSBzdGFjayBmcmFtZS4gIEl0IGFsc28gc3VwcG9ydHMgcG9zdC1tb3J0ZW0gZGVidWdnaW5nXG5hbmQgY2FuIGJlIGNhbGxlZCB1bmRlciBwcm9ncmFtIGNvbnRyb2wuXG5cblRoZSBkZWJ1Z2dlciBpcyBleHRlbnNpYmxlIC0tIGl0IGlzIGFjdHVhbGx5IGRlZmluZWQgYXMgdGhlIGNsYXNzXG4iUGRiIi4gVGhpcyBpcyBjdXJyZW50bHkgdW5kb2N1bWVudGVkIGJ1dCBlYXNpbHkgdW5kZXJzdG9vZCBieSByZWFkaW5nXG50aGUgc291cmNlLiAgVGhlIGV4dGVuc2lvbiBpbnRlcmZhY2UgdXNlcyB0aGUgbW9kdWxlcyAiYmRiIiBhbmQgImNtZCIuXG5cblRoZSBkZWJ1Z2dlclwncyBwcm9tcHQgaXMgIihQZGIpIi4gVHlwaWNhbCB1c2FnZSB0byBydW4gYSBwcm9ncmFtIHVuZGVyXG5jb250cm9sIG9mIHRoZSBkZWJ1Z2dlciBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBwZGIucnVuKFwnbXltb2R1bGUudGVzdCgpXCcpXG4gICA+IDxzdHJpbmc+KDApPygpXG4gICAoUGRiKSBjb250aW51ZVxuICAgPiA8c3RyaW5nPigxKT8oKVxuICAgKFBkYikgY29udGludWVcbiAgIE5hbWVFcnJvcjogXCdzcGFtXCdcbiAgID4gPHN0cmluZz4oMSk/KClcbiAgIChQZGIpXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjM6IFRhYi1jb21wbGV0aW9uIHZpYSB0aGUgInJlYWRsaW5lIiBtb2R1bGUgaXNcbmF2YWlsYWJsZSBmb3IgY29tbWFuZHMgYW5kIGNvbW1hbmQgYXJndW1lbnRzLCBlLmcuIHRoZSBjdXJyZW50IGdsb2JhbFxuYW5kIGxvY2FsIG5hbWVzIGFyZSBvZmZlcmVkIGFzIGFyZ3VtZW50cyBvZiB0aGUgInAiIGNvbW1hbmQuXG5cbiJwZGIucHkiIGNhbiBhbHNvIGJlIGludm9rZWQgYXMgYSBzY3JpcHQgdG8gZGVidWcgb3RoZXIgc2NyaXB0cy4gIEZvclxuZXhhbXBsZTpcblxuICAgcHl0aG9uMyAtbSBwZGIgbXlzY3JpcHQucHlcblxuV2hlbiBpbnZva2VkIGFzIGEgc2NyaXB0LCBwZGIgd2lsbCBhdXRvbWF0aWNhbGx5IGVudGVyIHBvc3QtbW9ydGVtXG5kZWJ1Z2dpbmcgaWYgdGhlIHByb2dyYW0gYmVpbmcgZGVidWdnZWQgZXhpdHMgYWJub3JtYWxseS4gIEFmdGVyIHBvc3QtXG5tb3J0ZW0gZGVidWdnaW5nIChvciBhZnRlciBub3JtYWwgZXhpdCBvZiB0aGUgcHJvZ3JhbSksIHBkYiB3aWxsXG5yZXN0YXJ0IHRoZSBwcm9ncmFtLiAgQXV0b21hdGljIHJlc3RhcnRpbmcgcHJlc2VydmVzIHBkYlwncyBzdGF0ZSAoc3VjaFxuYXMgYnJlYWtwb2ludHMpIGFuZCBpbiBtb3N0IGNhc2VzIGlzIG1vcmUgdXNlZnVsIHRoYW4gcXVpdHRpbmcgdGhlXG5kZWJ1Z2dlciB1cG9uIHByb2dyYW1cJ3MgZXhpdC5cblxuTmV3IGluIHZlcnNpb24gMy4yOiAicGRiLnB5IiBub3cgYWNjZXB0cyBhICItYyIgb3B0aW9uIHRoYXQgZXhlY3V0ZXNcbmNvbW1hbmRzIGFzIGlmIGdpdmVuIGluIGEgIi5wZGJyYyIgZmlsZSwgc2VlICpEZWJ1Z2dlciBDb21tYW5kcyouXG5cblRoZSB0eXBpY2FsIHVzYWdlIHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGZyb20gYSBydW5uaW5nIHByb2dyYW0gaXNcbnRvIGluc2VydFxuXG4gICBpbXBvcnQgcGRiOyBwZGIuc2V0X3RyYWNlKClcblxuYXQgdGhlIGxvY2F0aW9uIHlvdSB3YW50IHRvIGJyZWFrIGludG8gdGhlIGRlYnVnZ2VyLiAgWW91IGNhbiB0aGVuXG5zdGVwIHRocm91Z2ggdGhlIGNvZGUgZm9sbG93aW5nIHRoaXMgc3RhdGVtZW50LCBhbmQgY29udGludWUgcnVubmluZ1xud2l0aG91dCB0aGUgZGVidWdnZXIgdXNpbmcgdGhlICJjb250aW51ZSIgY29tbWFuZC5cblxuVGhlIHR5cGljYWwgdXNhZ2UgdG8gaW5zcGVjdCBhIGNyYXNoZWQgcHJvZ3JhbSBpczpcblxuICAgPj4+IGltcG9ydCBwZGJcbiAgID4+PiBpbXBvcnQgbXltb2R1bGVcbiAgID4+PiBteW1vZHVsZS50ZXN0KClcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gP1xuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSA0LCBpbiB0ZXN0XG4gICAgICAgdGVzdDIoKVxuICAgICBGaWxlICIuL215bW9kdWxlLnB5IiwgbGluZSAzLCBpbiB0ZXN0MlxuICAgICAgIHByaW50KHNwYW0pXG4gICBOYW1lRXJyb3I6IHNwYW1cbiAgID4+PiBwZGIucG0oKVxuICAgPiAuL215bW9kdWxlLnB5KDMpdGVzdDIoKVxuICAgLT4gcHJpbnQoc3BhbSlcbiAgIChQZGIpXG5cblRoZSBtb2R1bGUgZGVmaW5lcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczsgZWFjaCBlbnRlcnMgdGhlIGRlYnVnZ2VyXG5pbiBhIHNsaWdodGx5IGRpZmZlcmVudCB3YXk6XG5cbnBkYi5ydW4oc3RhdGVtZW50LCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFeGVjdXRlIHRoZSAqc3RhdGVtZW50KiAoZ2l2ZW4gYXMgYSBzdHJpbmcgb3IgYSBjb2RlIG9iamVjdCkgdW5kZXJcbiAgIGRlYnVnZ2VyIGNvbnRyb2wuICBUaGUgZGVidWdnZXIgcHJvbXB0IGFwcGVhcnMgYmVmb3JlIGFueSBjb2RlIGlzXG4gICBleGVjdXRlZDsgeW91IGNhbiBzZXQgYnJlYWtwb2ludHMgYW5kIHR5cGUgImNvbnRpbnVlIiwgb3IgeW91IGNhblxuICAgc3RlcCB0aHJvdWdoIHRoZSBzdGF0ZW1lbnQgdXNpbmcgInN0ZXAiIG9yICJuZXh0IiAoYWxsIHRoZXNlXG4gICBjb21tYW5kcyBhcmUgZXhwbGFpbmVkIGJlbG93KS4gIFRoZSBvcHRpb25hbCAqZ2xvYmFscyogYW5kICpsb2NhbHMqXG4gICBhcmd1bWVudHMgc3BlY2lmeSB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGNvZGUgaXMgZXhlY3V0ZWQ7IGJ5XG4gICBkZWZhdWx0IHRoZSBkaWN0aW9uYXJ5IG9mIHRoZSBtb2R1bGUgIl9fbWFpbl9fIiBpcyB1c2VkLiAgKFNlZSB0aGVcbiAgIGV4cGxhbmF0aW9uIG9mIHRoZSBidWlsdC1pbiAiZXhlYygpIiBvciAiZXZhbCgpIiBmdW5jdGlvbnMuKVxuXG5wZGIucnVuZXZhbChleHByZXNzaW9uLCBnbG9iYWxzPU5vbmUsIGxvY2Fscz1Ob25lKVxuXG4gICBFdmFsdWF0ZSB0aGUgKmV4cHJlc3Npb24qIChnaXZlbiBhcyBhIHN0cmluZyBvciBhIGNvZGUgb2JqZWN0KVxuICAgdW5kZXIgZGVidWdnZXIgY29udHJvbC4gIFdoZW4gInJ1bmV2YWwoKSIgcmV0dXJucywgaXQgcmV0dXJucyB0aGVcbiAgIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uLiAgT3RoZXJ3aXNlIHRoaXMgZnVuY3Rpb24gaXMgc2ltaWxhciB0b1xuICAgInJ1bigpIi5cblxucGRiLnJ1bmNhbGwoZnVuY3Rpb24sICphcmdzLCAqKmt3ZHMpXG5cbiAgIENhbGwgdGhlICpmdW5jdGlvbiogKGEgZnVuY3Rpb24gb3IgbWV0aG9kIG9iamVjdCwgbm90IGEgc3RyaW5nKVxuICAgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLiAgV2hlbiAicnVuY2FsbCgpIiByZXR1cm5zLCBpdCByZXR1cm5zXG4gICB3aGF0ZXZlciB0aGUgZnVuY3Rpb24gY2FsbCByZXR1cm5lZC4gIFRoZSBkZWJ1Z2dlciBwcm9tcHQgYXBwZWFyc1xuICAgYXMgc29vbiBhcyB0aGUgZnVuY3Rpb24gaXMgZW50ZXJlZC5cblxucGRiLnNldF90cmFjZSgpXG5cbiAgIEVudGVyIHRoZSBkZWJ1Z2dlciBhdCB0aGUgY2FsbGluZyBzdGFjayBmcmFtZS4gIFRoaXMgaXMgdXNlZnVsIHRvXG4gICBoYXJkLWNvZGUgYSBicmVha3BvaW50IGF0IGEgZ2l2ZW4gcG9pbnQgaW4gYSBwcm9ncmFtLCBldmVuIGlmIHRoZVxuICAgY29kZSBpcyBub3Qgb3RoZXJ3aXNlIGJlaW5nIGRlYnVnZ2VkIChlLmcuIHdoZW4gYW4gYXNzZXJ0aW9uXG4gICBmYWlscykuXG5cbnBkYi5wb3N0X21vcnRlbSh0cmFjZWJhY2s9Tm9uZSlcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSBnaXZlbiAqdHJhY2ViYWNrKiBvYmplY3QuICBJZiBub1xuICAgKnRyYWNlYmFjayogaXMgZ2l2ZW4sIGl0IHVzZXMgdGhlIG9uZSBvZiB0aGUgZXhjZXB0aW9uIHRoYXQgaXNcbiAgIGN1cnJlbnRseSBiZWluZyBoYW5kbGVkIChhbiBleGNlcHRpb24gbXVzdCBiZSBiZWluZyBoYW5kbGVkIGlmIHRoZVxuICAgZGVmYXVsdCBpcyB0byBiZSB1c2VkKS5cblxucGRiLnBtKClcblxuICAgRW50ZXIgcG9zdC1tb3J0ZW0gZGVidWdnaW5nIG9mIHRoZSB0cmFjZWJhY2sgZm91bmQgaW5cbiAgICJzeXMubGFzdF90cmFjZWJhY2siLlxuXG5UaGUgInJ1bioiIGZ1bmN0aW9ucyBhbmQgInNldF90cmFjZSgpIiBhcmUgYWxpYXNlcyBmb3IgaW5zdGFudGlhdGluZ1xudGhlICJQZGIiIGNsYXNzIGFuZCBjYWxsaW5nIHRoZSBtZXRob2Qgb2YgdGhlIHNhbWUgbmFtZS4gIElmIHlvdSB3YW50XG50byBhY2Nlc3MgZnVydGhlciBmZWF0dXJlcywgeW91IGhhdmUgdG8gZG8gdGhpcyB5b3Vyc2VsZjpcblxuY2xhc3MgY2xhc3MgcGRiLlBkYihjb21wbGV0ZWtleT1cJ3RhYlwnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc2tpcD1Ob25lLCBub3NpZ2ludD1GYWxzZSlcblxuICAgIlBkYiIgaXMgdGhlIGRlYnVnZ2VyIGNsYXNzLlxuXG4gICBUaGUgKmNvbXBsZXRla2V5KiwgKnN0ZGluKiBhbmQgKnN0ZG91dCogYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8gdGhlXG4gICB1bmRlcmx5aW5nICJjbWQuQ21kIiBjbGFzczsgc2VlIHRoZSBkZXNjcmlwdGlvbiB0aGVyZS5cblxuICAgVGhlICpza2lwKiBhcmd1bWVudCwgaWYgZ2l2ZW4sIG11c3QgYmUgYW4gaXRlcmFibGUgb2YgZ2xvYi1zdHlsZVxuICAgbW9kdWxlIG5hbWUgcGF0dGVybnMuICBUaGUgZGVidWdnZXIgd2lsbCBub3Qgc3RlcCBpbnRvIGZyYW1lcyB0aGF0XG4gICBvcmlnaW5hdGUgaW4gYSBtb2R1bGUgdGhhdCBtYXRjaGVzIG9uZSBvZiB0aGVzZSBwYXR0ZXJucy4gWzFdXG5cbiAgIEJ5IGRlZmF1bHQsIFBkYiBzZXRzIGEgaGFuZGxlciBmb3IgdGhlIFNJR0lOVCBzaWduYWwgKHdoaWNoIGlzIHNlbnRcbiAgIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyAiQ3RybC1DIiBvbiB0aGUgY29uc29sZSkgd2hlbiB5b3UgZ2l2ZSBhXG4gICAiY29udGludWUiIGNvbW1hbmQuIFRoaXMgYWxsb3dzIHlvdSB0byBicmVhayBpbnRvIHRoZSBkZWJ1Z2dlclxuICAgYWdhaW4gYnkgcHJlc3NpbmcgIkN0cmwtQyIuICBJZiB5b3Ugd2FudCBQZGIgbm90IHRvIHRvdWNoIHRoZVxuICAgU0lHSU5UIGhhbmRsZXIsIHNldCAqbm9zaWdpbnQqIHRvdCB0cnVlLlxuXG4gICBFeGFtcGxlIGNhbGwgdG8gZW5hYmxlIHRyYWNpbmcgd2l0aCAqc2tpcCo6XG5cbiAgICAgIGltcG9ydCBwZGI7IHBkYi5QZGIoc2tpcD1bXCdkamFuZ28uKlwnXSkuc2V0X3RyYWNlKClcblxuICAgTmV3IGluIHZlcnNpb24gMy4xOiBUaGUgKnNraXAqIGFyZ3VtZW50LlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjI6IFRoZSAqbm9zaWdpbnQqIGFyZ3VtZW50LiAgUHJldmlvdXNseSwgYSBTSUdJTlRcbiAgIGhhbmRsZXIgd2FzIG5ldmVyIHNldCBieSBQZGIuXG5cbiAgIHJ1bihzdGF0ZW1lbnQsIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5ldmFsKGV4cHJlc3Npb24sIGdsb2JhbHM9Tm9uZSwgbG9jYWxzPU5vbmUpXG4gICBydW5jYWxsKGZ1bmN0aW9uLCAqYXJncywgKiprd2RzKVxuICAgc2V0X3RyYWNlKClcblxuICAgICAgU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgZnVuY3Rpb25zIGV4cGxhaW5lZCBhYm92ZS5cblxuXG5EZWJ1Z2dlciBDb21tYW5kc1xuPT09PT09PT09PT09PT09PT1cblxuVGhlIGNvbW1hbmRzIHJlY29nbml6ZWQgYnkgdGhlIGRlYnVnZ2VyIGFyZSBsaXN0ZWQgYmVsb3cuICBNb3N0XG5jb21tYW5kcyBjYW4gYmUgYWJicmV2aWF0ZWQgdG8gb25lIG9yIHR3byBsZXR0ZXJzIGFzIGluZGljYXRlZDsgZS5nLlxuImgoZWxwKSIgbWVhbnMgdGhhdCBlaXRoZXIgImgiIG9yICJoZWxwIiBjYW4gYmUgdXNlZCB0byBlbnRlciB0aGUgaGVscFxuY29tbWFuZCAoYnV0IG5vdCAiaGUiIG9yICJoZWwiLCBub3IgIkgiIG9yICJIZWxwIiBvciAiSEVMUCIpLlxuQXJndW1lbnRzIHRvIGNvbW1hbmRzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UgKHNwYWNlcyBvclxudGFicykuICBPcHRpb25hbCBhcmd1bWVudHMgYXJlIGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cyAoIltdIikgaW5cbnRoZSBjb21tYW5kIHN5bnRheDsgdGhlIHNxdWFyZSBicmFja2V0cyBtdXN0IG5vdCBiZSB0eXBlZC5cbkFsdGVybmF0aXZlcyBpbiB0aGUgY29tbWFuZCBzeW50YXggYXJlIHNlcGFyYXRlZCBieSBhIHZlcnRpY2FsIGJhclxuKCJ8IikuXG5cbkVudGVyaW5nIGEgYmxhbmsgbGluZSByZXBlYXRzIHRoZSBsYXN0IGNvbW1hbmQgZW50ZXJlZC4gIEV4Y2VwdGlvbjogaWZcbnRoZSBsYXN0IGNvbW1hbmQgd2FzIGEgImxpc3QiIGNvbW1hbmQsIHRoZSBuZXh0IDExIGxpbmVzIGFyZSBsaXN0ZWQuXG5cbkNvbW1hbmRzIHRoYXQgdGhlIGRlYnVnZ2VyIGRvZXNuXCd0IHJlY29nbml6ZSBhcmUgYXNzdW1lZCB0byBiZSBQeXRob25cbnN0YXRlbWVudHMgYW5kIGFyZSBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQuICBQeXRob24gc3RhdGVtZW50cyBjYW4gYWxzbyBiZSBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uXG5wb2ludCAoIiEiKS4gIFRoaXMgaXMgYSBwb3dlcmZ1bCB3YXkgdG8gaW5zcGVjdCB0aGUgcHJvZ3JhbSBiZWluZ1xuZGVidWdnZWQ7IGl0IGlzIGV2ZW4gcG9zc2libGUgdG8gY2hhbmdlIGEgdmFyaWFibGUgb3IgY2FsbCBhIGZ1bmN0aW9uLlxuV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHN1Y2ggYSBzdGF0ZW1lbnQsIHRoZSBleGNlcHRpb24gbmFtZSBpc1xucHJpbnRlZCBidXQgdGhlIGRlYnVnZ2VyXCdzIHN0YXRlIGlzIG5vdCBjaGFuZ2VkLlxuXG5UaGUgZGVidWdnZXIgc3VwcG9ydHMgKmFsaWFzZXMqLiAgQWxpYXNlcyBjYW4gaGF2ZSBwYXJhbWV0ZXJzIHdoaWNoXG5hbGxvd3Mgb25lIGEgY2VydGFpbiBsZXZlbCBvZiBhZGFwdGFiaWxpdHkgdG8gdGhlIGNvbnRleHQgdW5kZXJcbmV4YW1pbmF0aW9uLlxuXG5NdWx0aXBsZSBjb21tYW5kcyBtYXkgYmUgZW50ZXJlZCBvbiBhIHNpbmdsZSBsaW5lLCBzZXBhcmF0ZWQgYnkgIjs7Ii5cbihBIHNpbmdsZSAiOyIgaXMgbm90IHVzZWQgYXMgaXQgaXMgdGhlIHNlcGFyYXRvciBmb3IgbXVsdGlwbGUgY29tbWFuZHNcbmluIGEgbGluZSB0aGF0IGlzIHBhc3NlZCB0byB0aGUgUHl0aG9uIHBhcnNlci4pICBObyBpbnRlbGxpZ2VuY2UgaXNcbmFwcGxpZWQgdG8gc2VwYXJhdGluZyB0aGUgY29tbWFuZHM7IHRoZSBpbnB1dCBpcyBzcGxpdCBhdCB0aGUgZmlyc3RcbiI7OyIgcGFpciwgZXZlbiBpZiBpdCBpcyBpbiB0aGUgbWlkZGxlIG9mIGEgcXVvdGVkIHN0cmluZy5cblxuSWYgYSBmaWxlICIucGRicmMiIGV4aXN0cyBpbiB0aGUgdXNlclwncyBob21lIGRpcmVjdG9yeSBvciBpbiB0aGVcbmN1cnJlbnQgZGlyZWN0b3J5LCBpdCBpcyByZWFkIGluIGFuZCBleGVjdXRlZCBhcyBpZiBpdCBoYWQgYmVlbiB0eXBlZFxuYXQgdGhlIGRlYnVnZ2VyIHByb21wdC4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgYWxpYXNlcy4gIElmXG5ib3RoIGZpbGVzIGV4aXN0LCB0aGUgb25lIGluIHRoZSBob21lIGRpcmVjdG9yeSBpcyByZWFkIGZpcnN0IGFuZFxuYWxpYXNlcyBkZWZpbmVkIHRoZXJlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBsb2NhbCBmaWxlLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiAiLnBkYnJjIiBjYW4gbm93IGNvbnRhaW4gY29tbWFuZHMgdGhhdFxuY29udGludWUgZGVidWdnaW5nLCBzdWNoIGFzICJjb250aW51ZSIgb3IgIm5leHQiLiAgUHJldmlvdXNseSwgdGhlc2VcbmNvbW1hbmRzIGhhZCBubyBlZmZlY3QuXG5cbmgoZWxwKSBbY29tbWFuZF1cblxuICAgV2l0aG91dCBhcmd1bWVudCwgcHJpbnQgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLiAgV2l0aCBhXG4gICAqY29tbWFuZCogYXMgYXJndW1lbnQsIHByaW50IGhlbHAgYWJvdXQgdGhhdCBjb21tYW5kLiAgImhlbHAgcGRiIlxuICAgZGlzcGxheXMgdGhlIGZ1bGwgZG9jdW1lbnRhdGlvbiAodGhlIGRvY3N0cmluZyBvZiB0aGUgInBkYiJcbiAgIG1vZHVsZSkuICBTaW5jZSB0aGUgKmNvbW1hbmQqIGFyZ3VtZW50IG11c3QgYmUgYW4gaWRlbnRpZmllciwgImhlbHBcbiAgIGV4ZWMiIG11c3QgYmUgZW50ZXJlZCB0byBnZXQgaGVscCBvbiB0aGUgIiEiIGNvbW1hbmQuXG5cbncoaGVyZSlcblxuICAgUHJpbnQgYSBzdGFjayB0cmFjZSwgd2l0aCB0aGUgbW9zdCByZWNlbnQgZnJhbWUgYXQgdGhlIGJvdHRvbS4gIEFuXG4gICBhcnJvdyBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgZnJhbWUsIHdoaWNoIGRldGVybWluZXMgdGhlIGNvbnRleHQgb2ZcbiAgIG1vc3QgY29tbWFuZHMuXG5cbmQob3duKSBbY291bnRdXG5cbiAgIE1vdmUgdGhlIGN1cnJlbnQgZnJhbWUgKmNvdW50KiAoZGVmYXVsdCBvbmUpIGxldmVscyBkb3duIGluIHRoZVxuICAgc3RhY2sgdHJhY2UgKHRvIGEgbmV3ZXIgZnJhbWUpLlxuXG51KHApIFtjb3VudF1cblxuICAgTW92ZSB0aGUgY3VycmVudCBmcmFtZSAqY291bnQqIChkZWZhdWx0IG9uZSkgbGV2ZWxzIHVwIGluIHRoZSBzdGFja1xuICAgdHJhY2UgKHRvIGFuIG9sZGVyIGZyYW1lKS5cblxuYihyZWFrKSBbKFtmaWxlbmFtZTpdbGluZW5vIHwgZnVuY3Rpb24pIFssIGNvbmRpdGlvbl1dXG5cbiAgIFdpdGggYSAqbGluZW5vKiBhcmd1bWVudCwgc2V0IGEgYnJlYWsgdGhlcmUgaW4gdGhlIGN1cnJlbnQgZmlsZS5cbiAgIFdpdGggYSAqZnVuY3Rpb24qIGFyZ3VtZW50LCBzZXQgYSBicmVhayBhdCB0aGUgZmlyc3QgZXhlY3V0YWJsZVxuICAgc3RhdGVtZW50IHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiAgVGhlIGxpbmUgbnVtYmVyIG1heSBiZSBwcmVmaXhlZFxuICAgd2l0aCBhIGZpbGVuYW1lIGFuZCBhIGNvbG9uLCB0byBzcGVjaWZ5IGEgYnJlYWtwb2ludCBpbiBhbm90aGVyXG4gICBmaWxlIChwcm9iYWJseSBvbmUgdGhhdCBoYXNuXCd0IGJlZW4gbG9hZGVkIHlldCkuICBUaGUgZmlsZSBpc1xuICAgc2VhcmNoZWQgb24gInN5cy5wYXRoIi4gIE5vdGUgdGhhdCBlYWNoIGJyZWFrcG9pbnQgaXMgYXNzaWduZWQgYVxuICAgbnVtYmVyIHRvIHdoaWNoIGFsbCB0aGUgb3RoZXIgYnJlYWtwb2ludCBjb21tYW5kcyByZWZlci5cblxuICAgSWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJlc2VudCwgaXQgaXMgYW4gZXhwcmVzc2lvbiB3aGljaCBtdXN0XG4gICBldmFsdWF0ZSB0byB0cnVlIGJlZm9yZSB0aGUgYnJlYWtwb2ludCBpcyBob25vcmVkLlxuXG4gICBXaXRob3V0IGFyZ3VtZW50LCBsaXN0IGFsbCBicmVha3MsIGluY2x1ZGluZyBmb3IgZWFjaCBicmVha3BvaW50LFxuICAgdGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IGJyZWFrcG9pbnQgaGFzIGJlZW4gaGl0LCB0aGUgY3VycmVudFxuICAgaWdub3JlIGNvdW50LCBhbmQgdGhlIGFzc29jaWF0ZWQgY29uZGl0aW9uIGlmIGFueS5cblxudGJyZWFrIFsoW2ZpbGVuYW1lOl1saW5lbm8gfCBmdW5jdGlvbikgWywgY29uZGl0aW9uXV1cblxuICAgVGVtcG9yYXJ5IGJyZWFrcG9pbnQsIHdoaWNoIGlzIHJlbW92ZWQgYXV0b21hdGljYWxseSB3aGVuIGl0IGlzXG4gICBmaXJzdCBoaXQuIFRoZSBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIGZvciAiYnJlYWsiLlxuXG5jbChlYXIpIFtmaWxlbmFtZTpsaW5lbm8gfCBicG51bWJlciBbYnBudW1iZXIgLi4uXV1cblxuICAgV2l0aCBhICpmaWxlbmFtZTpsaW5lbm8qIGFyZ3VtZW50LCBjbGVhciBhbGwgdGhlIGJyZWFrcG9pbnRzIGF0XG4gICB0aGlzIGxpbmUuIFdpdGggYSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBicmVha3BvaW50IG51bWJlcnMsIGNsZWFyXG4gICB0aG9zZSBicmVha3BvaW50cy4gV2l0aG91dCBhcmd1bWVudCwgY2xlYXIgYWxsIGJyZWFrcyAoYnV0IGZpcnN0XG4gICBhc2sgY29uZmlybWF0aW9uKS5cblxuZGlzYWJsZSBbYnBudW1iZXIgW2JwbnVtYmVyIC4uLl1dXG5cbiAgIERpc2FibGUgdGhlIGJyZWFrcG9pbnRzIGdpdmVuIGFzIGEgc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2ZcbiAgIGJyZWFrcG9pbnQgbnVtYmVycy4gIERpc2FibGluZyBhIGJyZWFrcG9pbnQgbWVhbnMgaXQgY2Fubm90IGNhdXNlXG4gICB0aGUgcHJvZ3JhbSB0byBzdG9wIGV4ZWN1dGlvbiwgYnV0IHVubGlrZSBjbGVhcmluZyBhIGJyZWFrcG9pbnQsIGl0XG4gICByZW1haW5zIGluIHRoZSBsaXN0IG9mIGJyZWFrcG9pbnRzIGFuZCBjYW4gYmUgKHJlLSllbmFibGVkLlxuXG5lbmFibGUgW2JwbnVtYmVyIFticG51bWJlciAuLi5dXVxuXG4gICBFbmFibGUgdGhlIGJyZWFrcG9pbnRzIHNwZWNpZmllZC5cblxuaWdub3JlIGJwbnVtYmVyIFtjb3VudF1cblxuICAgU2V0IHRoZSBpZ25vcmUgY291bnQgZm9yIHRoZSBnaXZlbiBicmVha3BvaW50IG51bWJlci4gIElmIGNvdW50IGlzXG4gICBvbWl0dGVkLCB0aGUgaWdub3JlIGNvdW50IGlzIHNldCB0byAwLiAgQSBicmVha3BvaW50IGJlY29tZXMgYWN0aXZlXG4gICB3aGVuIHRoZSBpZ25vcmUgY291bnQgaXMgemVyby4gIFdoZW4gbm9uLXplcm8sIHRoZSBjb3VudCBpc1xuICAgZGVjcmVtZW50ZWQgZWFjaCB0aW1lIHRoZSBicmVha3BvaW50IGlzIHJlYWNoZWQgYW5kIHRoZSBicmVha3BvaW50XG4gICBpcyBub3QgZGlzYWJsZWQgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbiBldmFsdWF0ZXMgdG8gdHJ1ZS5cblxuY29uZGl0aW9uIGJwbnVtYmVyIFtjb25kaXRpb25dXG5cbiAgIFNldCBhIG5ldyAqY29uZGl0aW9uKiBmb3IgdGhlIGJyZWFrcG9pbnQsIGFuIGV4cHJlc3Npb24gd2hpY2ggbXVzdFxuICAgZXZhbHVhdGUgdG8gdHJ1ZSBiZWZvcmUgdGhlIGJyZWFrcG9pbnQgaXMgaG9ub3JlZC4gIElmICpjb25kaXRpb24qXG4gICBpcyBhYnNlbnQsIGFueSBleGlzdGluZyBjb25kaXRpb24gaXMgcmVtb3ZlZDsgaS5lLiwgdGhlIGJyZWFrcG9pbnRcbiAgIGlzIG1hZGUgdW5jb25kaXRpb25hbC5cblxuY29tbWFuZHMgW2JwbnVtYmVyXVxuXG4gICBTcGVjaWZ5IGEgbGlzdCBvZiBjb21tYW5kcyBmb3IgYnJlYWtwb2ludCBudW1iZXIgKmJwbnVtYmVyKi4gIFRoZVxuICAgY29tbWFuZHMgdGhlbXNlbHZlcyBhcHBlYXIgb24gdGhlIGZvbGxvd2luZyBsaW5lcy4gIFR5cGUgYSBsaW5lXG4gICBjb250YWluaW5nIGp1c3QgImVuZCIgdG8gdGVybWluYXRlIHRoZSBjb21tYW5kcy4gQW4gZXhhbXBsZTpcblxuICAgICAgKFBkYikgY29tbWFuZHMgMVxuICAgICAgKGNvbSkgcCBzb21lX3ZhcmlhYmxlXG4gICAgICAoY29tKSBlbmRcbiAgICAgIChQZGIpXG5cbiAgIFRvIHJlbW92ZSBhbGwgY29tbWFuZHMgZnJvbSBhIGJyZWFrcG9pbnQsIHR5cGUgY29tbWFuZHMgYW5kIGZvbGxvd1xuICAgaXQgaW1tZWRpYXRlbHkgd2l0aCAiZW5kIjsgdGhhdCBpcywgZ2l2ZSBubyBjb21tYW5kcy5cblxuICAgV2l0aCBubyAqYnBudW1iZXIqIGFyZ3VtZW50LCBjb21tYW5kcyByZWZlcnMgdG8gdGhlIGxhc3QgYnJlYWtwb2ludFxuICAgc2V0LlxuXG4gICBZb3UgY2FuIHVzZSBicmVha3BvaW50IGNvbW1hbmRzIHRvIHN0YXJ0IHlvdXIgcHJvZ3JhbSB1cCBhZ2Fpbi5cbiAgIFNpbXBseSB1c2UgdGhlIGNvbnRpbnVlIGNvbW1hbmQsIG9yIHN0ZXAsIG9yIGFueSBvdGhlciBjb21tYW5kIHRoYXRcbiAgIHJlc3VtZXMgZXhlY3V0aW9uLlxuXG4gICBTcGVjaWZ5aW5nIGFueSBjb21tYW5kIHJlc3VtaW5nIGV4ZWN1dGlvbiAoY3VycmVudGx5IGNvbnRpbnVlLFxuICAgc3RlcCwgbmV4dCwgcmV0dXJuLCBqdW1wLCBxdWl0IGFuZCB0aGVpciBhYmJyZXZpYXRpb25zKSB0ZXJtaW5hdGVzXG4gICB0aGUgY29tbWFuZCBsaXN0IChhcyBpZiB0aGF0IGNvbW1hbmQgd2FzIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5XG4gICBlbmQpLiBUaGlzIGlzIGJlY2F1c2UgYW55IHRpbWUgeW91IHJlc3VtZSBleGVjdXRpb24gKGV2ZW4gd2l0aCBhXG4gICBzaW1wbGUgbmV4dCBvciBzdGVwKSwgeW91IG1heSBlbmNvdW50ZXIgYW5vdGhlciBicmVha3BvaW50LS13aGljaFxuICAgY291bGQgaGF2ZSBpdHMgb3duIGNvbW1hbmQgbGlzdCwgbGVhZGluZyB0byBhbWJpZ3VpdGllcyBhYm91dCB3aGljaFxuICAgbGlzdCB0byBleGVjdXRlLlxuXG4gICBJZiB5b3UgdXNlIHRoZSBcJ3NpbGVudFwnIGNvbW1hbmQgaW4gdGhlIGNvbW1hbmQgbGlzdCwgdGhlIHVzdWFsXG4gICBtZXNzYWdlIGFib3V0IHN0b3BwaW5nIGF0IGEgYnJlYWtwb2ludCBpcyBub3QgcHJpbnRlZC4gIFRoaXMgbWF5IGJlXG4gICBkZXNpcmFibGUgZm9yIGJyZWFrcG9pbnRzIHRoYXQgYXJlIHRvIHByaW50IGEgc3BlY2lmaWMgbWVzc2FnZSBhbmRcbiAgIHRoZW4gY29udGludWUuICBJZiBub25lIG9mIHRoZSBvdGhlciBjb21tYW5kcyBwcmludCBhbnl0aGluZywgeW91XG4gICBzZWUgbm8gc2lnbiB0aGF0IHRoZSBicmVha3BvaW50IHdhcyByZWFjaGVkLlxuXG5zKHRlcClcblxuICAgRXhlY3V0ZSB0aGUgY3VycmVudCBsaW5lLCBzdG9wIGF0IHRoZSBmaXJzdCBwb3NzaWJsZSBvY2Nhc2lvblxuICAgKGVpdGhlciBpbiBhIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9yIG9uIHRoZSBuZXh0IGxpbmUgaW4gdGhlXG4gICBjdXJyZW50IGZ1bmN0aW9uKS5cblxubihleHQpXG5cbiAgIENvbnRpbnVlIGV4ZWN1dGlvbiB1bnRpbCB0aGUgbmV4dCBsaW5lIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGlzXG4gICByZWFjaGVkIG9yIGl0IHJldHVybnMuICAoVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiAibmV4dCIgYW5kICJzdGVwIlxuICAgaXMgdGhhdCAic3RlcCIgc3RvcHMgaW5zaWRlIGEgY2FsbGVkIGZ1bmN0aW9uLCB3aGlsZSAibmV4dCJcbiAgIGV4ZWN1dGVzIGNhbGxlZCBmdW5jdGlvbnMgYXQgKG5lYXJseSkgZnVsbCBzcGVlZCwgb25seSBzdG9wcGluZyBhdFxuICAgdGhlIG5leHQgbGluZSBpbiB0aGUgY3VycmVudCBmdW5jdGlvbi4pXG5cbnVudChpbCkgW2xpbmVub11cblxuICAgV2l0aG91dCBhcmd1bWVudCwgY29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBvbmUgaXMgcmVhY2hlZC5cblxuICAgV2l0aCBhIGxpbmUgbnVtYmVyLCBjb250aW51ZSBleGVjdXRpb24gdW50aWwgYSBsaW5lIHdpdGggYSBudW1iZXJcbiAgIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhhdCBpcyByZWFjaGVkLiAgSW4gYm90aCBjYXNlcywgYWxzbyBzdG9wIHdoZW5cbiAgIHRoZSBjdXJyZW50IGZyYW1lIHJldHVybnMuXG5cbiAgIENoYW5nZWQgaW4gdmVyc2lvbiAzLjI6IEFsbG93IGdpdmluZyBhbiBleHBsaWNpdCBsaW5lIG51bWJlci5cblxucihldHVybilcblxuICAgQ29udGludWUgZXhlY3V0aW9uIHVudGlsIHRoZSBjdXJyZW50IGZ1bmN0aW9uIHJldHVybnMuXG5cbmMob250KGludWUpKVxuXG4gICBDb250aW51ZSBleGVjdXRpb24sIG9ubHkgc3RvcCB3aGVuIGEgYnJlYWtwb2ludCBpcyBlbmNvdW50ZXJlZC5cblxuaih1bXApIGxpbmVub1xuXG4gICBTZXQgdGhlIG5leHQgbGluZSB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQuICBPbmx5IGF2YWlsYWJsZSBpbiB0aGVcbiAgIGJvdHRvbS1tb3N0IGZyYW1lLiAgVGhpcyBsZXRzIHlvdSBqdW1wIGJhY2sgYW5kIGV4ZWN1dGUgY29kZSBhZ2FpbixcbiAgIG9yIGp1bXAgZm9yd2FyZCB0byBza2lwIGNvZGUgdGhhdCB5b3UgZG9uXCd0IHdhbnQgdG8gcnVuLlxuXG4gICBJdCBzaG91bGQgYmUgbm90ZWQgdGhhdCBub3QgYWxsIGp1bXBzIGFyZSBhbGxvd2VkIC0tIGZvciBpbnN0YW5jZVxuICAgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGp1bXAgaW50byB0aGUgbWlkZGxlIG9mIGEgImZvciIgbG9vcCBvciBvdXRcbiAgIG9mIGEgImZpbmFsbHkiIGNsYXVzZS5cblxubChpc3QpIFtmaXJzdFssIGxhc3RdXVxuXG4gICBMaXN0IHNvdXJjZSBjb2RlIGZvciB0aGUgY3VycmVudCBmaWxlLiAgV2l0aG91dCBhcmd1bWVudHMsIGxpc3QgMTFcbiAgIGxpbmVzIGFyb3VuZCB0aGUgY3VycmVudCBsaW5lIG9yIGNvbnRpbnVlIHRoZSBwcmV2aW91cyBsaXN0aW5nLlxuICAgV2l0aCAiLiIgYXMgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIHRoZSBjdXJyZW50IGxpbmUuICBXaXRoXG4gICBvbmUgYXJndW1lbnQsIGxpc3QgMTEgbGluZXMgYXJvdW5kIGF0IHRoYXQgbGluZS4gIFdpdGggdHdvXG4gICBhcmd1bWVudHMsIGxpc3QgdGhlIGdpdmVuIHJhbmdlOyBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGxlc3NcbiAgIHRoYW4gdGhlIGZpcnN0LCBpdCBpcyBpbnRlcnByZXRlZCBhcyBhIGNvdW50LlxuXG4gICBUaGUgY3VycmVudCBsaW5lIGluIHRoZSBjdXJyZW50IGZyYW1lIGlzIGluZGljYXRlZCBieSAiLT4iLiAgSWYgYW5cbiAgIGV4Y2VwdGlvbiBpcyBiZWluZyBkZWJ1Z2dlZCwgdGhlIGxpbmUgd2hlcmUgdGhlIGV4Y2VwdGlvbiB3YXNcbiAgIG9yaWdpbmFsbHkgcmFpc2VkIG9yIHByb3BhZ2F0ZWQgaXMgaW5kaWNhdGVkIGJ5ICI+PiIsIGlmIGl0IGRpZmZlcnNcbiAgIGZyb20gdGhlIGN1cnJlbnQgbGluZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yOiBUaGUgIj4+IiBtYXJrZXIuXG5cbmxsIHwgbG9uZ2xpc3RcblxuICAgTGlzdCBhbGwgc291cmNlIGNvZGUgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9uIG9yIGZyYW1lLlxuICAgSW50ZXJlc3RpbmcgbGluZXMgYXJlIG1hcmtlZCBhcyBmb3IgImxpc3QiLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmEocmdzKVxuXG4gICBQcmludCB0aGUgYXJndW1lbnQgbGlzdCBvZiB0aGUgY3VycmVudCBmdW5jdGlvbi5cblxucCBleHByZXNzaW9uXG5cbiAgIEV2YWx1YXRlIHRoZSAqZXhwcmVzc2lvbiogaW4gdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgcHJpbnQgaXRzXG4gICB2YWx1ZS5cblxuICAgTm90ZTogInByaW50KCkiIGNhbiBhbHNvIGJlIHVzZWQsIGJ1dCBpcyBub3QgYSBkZWJ1Z2dlciBjb21tYW5kXG4gICAgIC0tLSB0aGlzIGV4ZWN1dGVzIHRoZSBQeXRob24gInByaW50KCkiIGZ1bmN0aW9uLlxuXG5wcCBleHByZXNzaW9uXG5cbiAgIExpa2UgdGhlICJwIiBjb21tYW5kLCBleGNlcHQgdGhlIHZhbHVlIG9mIHRoZSBleHByZXNzaW9uIGlzIHByZXR0eS1cbiAgIHByaW50ZWQgdXNpbmcgdGhlICJwcHJpbnQiIG1vZHVsZS5cblxud2hhdGlzIGV4cHJlc3Npb25cblxuICAgUHJpbnQgdGhlIHR5cGUgb2YgdGhlICpleHByZXNzaW9uKi5cblxuc291cmNlIGV4cHJlc3Npb25cblxuICAgVHJ5IHRvIGdldCBzb3VyY2UgY29kZSBmb3IgdGhlIGdpdmVuIG9iamVjdCBhbmQgZGlzcGxheSBpdC5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEaXNwbGF5IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiBpZiBpdCBjaGFuZ2VkLCBlYWNoIHRpbWVcbiAgIGV4ZWN1dGlvbiBzdG9wcyBpbiB0aGUgY3VycmVudCBmcmFtZS5cblxuICAgV2l0aG91dCBleHByZXNzaW9uLCBsaXN0IGFsbCBkaXNwbGF5IGV4cHJlc3Npb25zIGZvciB0aGUgY3VycmVudFxuICAgZnJhbWUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMi5cblxudW5kaXNwbGF5IFtleHByZXNzaW9uXVxuXG4gICBEbyBub3QgZGlzcGxheSB0aGUgZXhwcmVzc2lvbiBhbnkgbW9yZSBpbiB0aGUgY3VycmVudCBmcmFtZS5cbiAgIFdpdGhvdXQgZXhwcmVzc2lvbiwgY2xlYXIgYWxsIGRpc3BsYXkgZXhwcmVzc2lvbnMgZm9yIHRoZSBjdXJyZW50XG4gICBmcmFtZS5cblxuICAgTmV3IGluIHZlcnNpb24gMy4yLlxuXG5pbnRlcmFjdFxuXG4gICBTdGFydCBhbiBpbnRlcmF0aXZlIGludGVycHJldGVyICh1c2luZyB0aGUgImNvZGUiIG1vZHVsZSkgd2hvc2VcbiAgIGdsb2JhbCBuYW1lc3BhY2UgY29udGFpbnMgYWxsIHRoZSAoZ2xvYmFsIGFuZCBsb2NhbCkgbmFtZXMgZm91bmQgaW5cbiAgIHRoZSBjdXJyZW50IHNjb3BlLlxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbmFsaWFzIFtuYW1lIFtjb21tYW5kXV1cblxuICAgQ3JlYXRlIGFuIGFsaWFzIGNhbGxlZCAqbmFtZSogdGhhdCBleGVjdXRlcyAqY29tbWFuZCouICBUaGUgY29tbWFuZFxuICAgbXVzdCAqbm90KiBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuICBSZXBsYWNlYWJsZSBwYXJhbWV0ZXJzIGNhbiBiZVxuICAgaW5kaWNhdGVkIGJ5ICIlMSIsICIlMiIsIGFuZCBzbyBvbiwgd2hpbGUgIiUqIiBpcyByZXBsYWNlZCBieSBhbGxcbiAgIHRoZSBwYXJhbWV0ZXJzLiBJZiBubyBjb21tYW5kIGlzIGdpdmVuLCB0aGUgY3VycmVudCBhbGlhcyBmb3JcbiAgICpuYW1lKiBpcyBzaG93bi4gSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgYWxsIGFsaWFzZXMgYXJlIGxpc3RlZC5cblxuICAgQWxpYXNlcyBtYXkgYmUgbmVzdGVkIGFuZCBjYW4gY29udGFpbiBhbnl0aGluZyB0aGF0IGNhbiBiZSBsZWdhbGx5XG4gICB0eXBlZCBhdCB0aGUgcGRiIHByb21wdC4gIE5vdGUgdGhhdCBpbnRlcm5hbCBwZGIgY29tbWFuZHMgKmNhbiogYmVcbiAgIG92ZXJyaWRkZW4gYnkgYWxpYXNlcy4gIFN1Y2ggYSBjb21tYW5kIGlzIHRoZW4gaGlkZGVuIHVudGlsIHRoZVxuICAgYWxpYXMgaXMgcmVtb3ZlZC4gIEFsaWFzaW5nIGlzIHJlY3Vyc2l2ZWx5IGFwcGxpZWQgdG8gdGhlIGZpcnN0XG4gICB3b3JkIG9mIHRoZSBjb21tYW5kIGxpbmU7IGFsbCBvdGhlciB3b3JkcyBpbiB0aGUgbGluZSBhcmUgbGVmdFxuICAgYWxvbmUuXG5cbiAgIEFzIGFuIGV4YW1wbGUsIGhlcmUgYXJlIHR3byB1c2VmdWwgYWxpYXNlcyAoZXNwZWNpYWxseSB3aGVuIHBsYWNlZFxuICAgaW4gdGhlICIucGRicmMiIGZpbGUpOlxuXG4gICAgICAjIFByaW50IGluc3RhbmNlIHZhcmlhYmxlcyAodXNhZ2UgInBpIGNsYXNzSW5zdCIpXG4gICAgICBhbGlhcyBwaSBmb3IgayBpbiAlMS5fX2RpY3RfXy5rZXlzKCk6IHByaW50KCIlMS4iLGssIj0iLCUxLl9fZGljdF9fW2tdKVxuICAgICAgIyBQcmludCBpbnN0YW5jZSB2YXJpYWJsZXMgaW4gc2VsZlxuICAgICAgYWxpYXMgcHMgcGkgc2VsZlxuXG51bmFsaWFzIG5hbWVcblxuICAgRGVsZXRlIHRoZSBzcGVjaWZpZWQgYWxpYXMuXG5cbiEgc3RhdGVtZW50XG5cbiAgIEV4ZWN1dGUgdGhlIChvbmUtbGluZSkgKnN0YXRlbWVudCogaW4gdGhlIGNvbnRleHQgb2YgdGhlIGN1cnJlbnRcbiAgIHN0YWNrIGZyYW1lLiBUaGUgZXhjbGFtYXRpb24gcG9pbnQgY2FuIGJlIG9taXR0ZWQgdW5sZXNzIHRoZSBmaXJzdFxuICAgd29yZCBvZiB0aGUgc3RhdGVtZW50IHJlc2VtYmxlcyBhIGRlYnVnZ2VyIGNvbW1hbmQuICBUbyBzZXQgYVxuICAgZ2xvYmFsIHZhcmlhYmxlLCB5b3UgY2FuIHByZWZpeCB0aGUgYXNzaWdubWVudCBjb21tYW5kIHdpdGggYVxuICAgImdsb2JhbCIgc3RhdGVtZW50IG9uIHRoZSBzYW1lIGxpbmUsIGUuZy46XG5cbiAgICAgIChQZGIpIGdsb2JhbCBsaXN0X29wdGlvbnM7IGxpc3Rfb3B0aW9ucyA9IFtcJy1sXCddXG4gICAgICAoUGRiKVxuXG5ydW4gW2FyZ3MgLi4uXVxucmVzdGFydCBbYXJncyAuLi5dXG5cbiAgIFJlc3RhcnQgdGhlIGRlYnVnZ2VkIFB5dGhvbiBwcm9ncmFtLiAgSWYgYW4gYXJndW1lbnQgaXMgc3VwcGxpZWQsXG4gICBpdCBpcyBzcGxpdCB3aXRoICJzaGxleCIgYW5kIHRoZSByZXN1bHQgaXMgdXNlZCBhcyB0aGUgbmV3XG4gICAic3lzLmFyZ3YiLiBIaXN0b3J5LCBicmVha3BvaW50cywgYWN0aW9ucyBhbmQgZGVidWdnZXIgb3B0aW9ucyBhcmVcbiAgIHByZXNlcnZlZC4gInJlc3RhcnQiIGlzIGFuIGFsaWFzIGZvciAicnVuIi5cblxucSh1aXQpXG5cbiAgIFF1aXQgZnJvbSB0aGUgZGVidWdnZXIuICBUaGUgcHJvZ3JhbSBiZWluZyBleGVjdXRlZCBpcyBhYm9ydGVkLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoZXRoZXIgYSBmcmFtZSBpcyBjb25zaWRlcmVkIHRvIG9yaWdpbmF0ZSBpbiBhIGNlcnRhaW4gbW9kdWxlXG4gICAgaXMgZGV0ZXJtaW5lZCBieSB0aGUgIl9fbmFtZV9fIiBpbiB0aGUgZnJhbWUgZ2xvYmFscy5cbicsCisgJ2RlbCc6IHUnXG5UaGUgImRlbCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cbiAgIGRlbF9zdG10IDo6PSAiZGVsIiB0YXJnZXRfbGlzdFxuXG5EZWxldGlvbiBpcyByZWN1cnNpdmVseSBkZWZpbmVkIHZlcnkgc2ltaWxhciB0byB0aGUgd2F5IGFzc2lnbm1lbnQgaXNcbmRlZmluZWQuIFJhdGhlciB0aGFuIHNwZWxsaW5nIGl0IG91dCBpbiBmdWxsIGRldGFpbHMsIGhlcmUgYXJlIHNvbWVcbmhpbnRzLlxuXG5EZWxldGlvbiBvZiBhIHRhcmdldCBsaXN0IHJlY3Vyc2l2ZWx5IGRlbGV0ZXMgZWFjaCB0YXJnZXQsIGZyb20gbGVmdFxudG8gcmlnaHQuXG5cbkRlbGV0aW9uIG9mIGEgbmFtZSByZW1vdmVzIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBmcm9tIHRoZSBsb2NhbCBvclxuZ2xvYmFsIG5hbWVzcGFjZSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIG5hbWUgb2NjdXJzIGluIGEgImdsb2JhbCJcbnN0YXRlbWVudCBpbiB0aGUgc2FtZSBjb2RlIGJsb2NrLiAgSWYgdGhlIG5hbWUgaXMgdW5ib3VuZCwgYVxuIk5hbWVFcnJvciIgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLlxuXG5EZWxldGlvbiBvZiBhdHRyaWJ1dGUgcmVmZXJlbmNlcywgc3Vic2NyaXB0aW9ucyBhbmQgc2xpY2luZ3MgaXMgcGFzc2VkXG50byB0aGUgcHJpbWFyeSBvYmplY3QgaW52b2x2ZWQ7IGRlbGV0aW9uIG9mIGEgc2xpY2luZyBpcyBpbiBnZW5lcmFsXG5lcXVpdmFsZW50IHRvIGFzc2lnbm1lbnQgb2YgYW4gZW1wdHkgc2xpY2Ugb2YgdGhlIHJpZ2h0IHR5cGUgKGJ1dCBldmVuXG50aGlzIGlzIGRldGVybWluZWQgYnkgdGhlIHNsaWNlZCBvYmplY3QpLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4yOiBQcmV2aW91c2x5IGl0IHdhcyBpbGxlZ2FsIHRvIGRlbGV0ZSBhIG5hbWVcbmZyb20gdGhlIGxvY2FsIG5hbWVzcGFjZSBpZiBpdCBvY2N1cnMgYXMgYSBmcmVlIHZhcmlhYmxlIGluIGEgbmVzdGVkXG5ibG9jay5cbicsCisgJ2RpY3QnOiB1J1xuRGljdGlvbmFyeSBkaXNwbGF5c1xuKioqKioqKioqKioqKioqKioqKlxuXG5BIGRpY3Rpb25hcnkgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBrZXkvZGF0dW0gcGFpcnNcbmVuY2xvc2VkIGluIGN1cmx5IGJyYWNlczpcblxuICAgZGljdF9kaXNwbGF5ICAgICAgIDo6PSAieyIgW2tleV9kYXR1bV9saXN0IHwgZGljdF9jb21wcmVoZW5zaW9uXSAifSJcbiAgIGtleV9kYXR1bV9saXN0ICAgICA6Oj0ga2V5X2RhdHVtICgiLCIga2V5X2RhdHVtKSogWyIsIl1cbiAgIGtleV9kYXR1bSAgICAgICAgICA6Oj0gZXhwcmVzc2lvbiAiOiIgZXhwcmVzc2lvblxuICAgZGljdF9jb21wcmVoZW5zaW9uIDo6PSBleHByZXNzaW9uICI6IiBleHByZXNzaW9uIGNvbXBfZm9yXG5cbkEgZGljdGlvbmFyeSBkaXNwbGF5IHlpZWxkcyBhIG5ldyBkaWN0aW9uYXJ5IG9iamVjdC5cblxuSWYgYSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2Ugb2Yga2V5L2RhdHVtIHBhaXJzIGlzIGdpdmVuLCB0aGV5IGFyZVxuZXZhbHVhdGVkIGZyb20gbGVmdCB0byByaWdodCB0byBkZWZpbmUgdGhlIGVudHJpZXMgb2YgdGhlIGRpY3Rpb25hcnk6XG5lYWNoIGtleSBvYmplY3QgaXMgdXNlZCBhcyBhIGtleSBpbnRvIHRoZSBkaWN0aW9uYXJ5IHRvIHN0b3JlIHRoZVxuY29ycmVzcG9uZGluZyBkYXR1bS4gIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIHNwZWNpZnkgdGhlIHNhbWUga2V5XG5tdWx0aXBsZSB0aW1lcyBpbiB0aGUga2V5L2RhdHVtIGxpc3QsIGFuZCB0aGUgZmluYWwgZGljdGlvbmFyeVwncyB2YWx1ZVxuZm9yIHRoYXQga2V5IHdpbGwgYmUgdGhlIGxhc3Qgb25lIGdpdmVuLlxuXG5BIGRpY3QgY29tcHJlaGVuc2lvbiwgaW4gY29udHJhc3QgdG8gbGlzdCBhbmQgc2V0IGNvbXByZWhlbnNpb25zLFxubmVlZHMgdHdvIGV4cHJlc3Npb25zIHNlcGFyYXRlZCB3aXRoIGEgY29sb24gZm9sbG93ZWQgYnkgdGhlIHVzdWFsXG4iZm9yIiBhbmQgImlmIiBjbGF1c2VzLiBXaGVuIHRoZSBjb21wcmVoZW5zaW9uIGlzIHJ1biwgdGhlIHJlc3VsdGluZ1xua2V5IGFuZCB2YWx1ZSBlbGVtZW50cyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIG5ldyBkaWN0aW9uYXJ5IGluIHRoZSBvcmRlclxudGhleSBhcmUgcHJvZHVjZWQuXG5cblJlc3RyaWN0aW9ucyBvbiB0aGUgdHlwZXMgb2YgdGhlIGtleSB2YWx1ZXMgYXJlIGxpc3RlZCBlYXJsaWVyIGluXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqLiAgKFRvIHN1bW1hcml6ZSwgdGhlIGtleSB0eXBlXG5zaG91bGQgYmUgKmhhc2hhYmxlKiwgd2hpY2ggZXhjbHVkZXMgYWxsIG11dGFibGUgb2JqZWN0cy4pICBDbGFzaGVzXG5iZXR3ZWVuIGR1cGxpY2F0ZSBrZXlzIGFyZSBub3QgZGV0ZWN0ZWQ7IHRoZSBsYXN0IGRhdHVtICh0ZXh0dWFsbHlcbnJpZ2h0bW9zdCBpbiB0aGUgZGlzcGxheSkgc3RvcmVkIGZvciBhIGdpdmVuIGtleSB2YWx1ZSBwcmV2YWlscy5cbicsCisgJ2R5bmFtaWMtZmVhdHVyZXMnOiB1J1xuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuTmFtZSByZXNvbHV0aW9uIG9mIGZyZWUgdmFyaWFibGVzIG9jY3VycyBhdCBydW50aW1lLCBub3QgYXQgY29tcGlsZVxudGltZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSB3aWxsIHByaW50IDQyOlxuXG4gICBpID0gMTBcbiAgIGRlZiBmKCk6XG4gICAgICAgcHJpbnQoaSlcbiAgIGkgPSA0MlxuICAgZigpXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cblRoZSAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgImV4ZWMoKSIgYW5kICJldmFsKCkiIGZ1bmN0aW9ucyBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xub3ZlcnJpZGUgdGhlIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlLiAgSWYgb25seSBvbmUgbmFtZXNwYWNlIGlzXG5zcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG4nLAorICdlbHNlJzogdSdcblRoZSAiaWYiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqXG5cblRoZSAiaWYiIHN0YXRlbWVudCBpcyB1c2VkIGZvciBjb25kaXRpb25hbCBleGVjdXRpb246XG5cbiAgIGlmX3N0bXQgOjo9ICJpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICggImVsaWYiIGV4cHJlc3Npb24gIjoiIHN1aXRlICkqXG4gICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuSXQgc2VsZWN0cyBleGFjdGx5IG9uZSBvZiB0aGUgc3VpdGVzIGJ5IGV2YWx1YXRpbmcgdGhlIGV4cHJlc3Npb25zIG9uZVxuYnkgb25lIHVudGlsIG9uZSBpcyBmb3VuZCB0byBiZSB0cnVlIChzZWUgc2VjdGlvbiAqQm9vbGVhbiBvcGVyYXRpb25zKlxuZm9yIHRoZSBkZWZpbml0aW9uIG9mIHRydWUgYW5kIGZhbHNlKTsgdGhlbiB0aGF0IHN1aXRlIGlzIGV4ZWN1dGVkXG4oYW5kIG5vIG90aGVyIHBhcnQgb2YgdGhlICJpZiIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIG9yIGV2YWx1YXRlZCkuXG5JZiBhbGwgZXhwcmVzc2lvbnMgYXJlIGZhbHNlLCB0aGUgc3VpdGUgb2YgdGhlICJlbHNlIiBjbGF1c2UsIGlmXG5wcmVzZW50LCBpcyBleGVjdXRlZC5cbicsCisgJ2V4Y2VwdGlvbnMnOiB1J1xuRXhjZXB0aW9uc1xuKioqKioqKioqKlxuXG5FeGNlcHRpb25zIGFyZSBhIG1lYW5zIG9mIGJyZWFraW5nIG91dCBvZiB0aGUgbm9ybWFsIGZsb3cgb2YgY29udHJvbFxub2YgYSBjb2RlIGJsb2NrIGluIG9yZGVyIHRvIGhhbmRsZSBlcnJvcnMgb3Igb3RoZXIgZXhjZXB0aW9uYWxcbmNvbmRpdGlvbnMuICBBbiBleGNlcHRpb24gaXMgKnJhaXNlZCogYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBlcnJvciBpc1xuZGV0ZWN0ZWQ7IGl0IG1heSBiZSAqaGFuZGxlZCogYnkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYmxvY2sgb3IgYnkgYW55XG5jb2RlIGJsb2NrIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnZva2VkIHRoZSBjb2RlIGJsb2NrIHdoZXJlXG50aGUgZXJyb3Igb2NjdXJyZWQuXG5cblRoZSBQeXRob24gaW50ZXJwcmV0ZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiB3aGVuIGl0IGRldGVjdHMgYSBydW4tdGltZVxuZXJyb3IgKHN1Y2ggYXMgZGl2aXNpb24gYnkgemVybykuICBBIFB5dGhvbiBwcm9ncmFtIGNhbiBhbHNvXG5leHBsaWNpdGx5IHJhaXNlIGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSAicmFpc2UiIHN0YXRlbWVudC4gRXhjZXB0aW9uXG5oYW5kbGVycyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlICJ0cnkiIC4uLiAiZXhjZXB0IiBzdGF0ZW1lbnQuICBUaGVcbiJmaW5hbGx5IiBjbGF1c2Ugb2Ygc3VjaCBhIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNsZWFudXBcbmNvZGUgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24sIGJ1dCBpcyBleGVjdXRlZCB3aGV0aGVyIGFuXG5leGNlcHRpb24gb2NjdXJyZWQgb3Igbm90IGluIHRoZSBwcmVjZWRpbmcgY29kZS5cblxuUHl0aG9uIHVzZXMgdGhlICJ0ZXJtaW5hdGlvbiIgbW9kZWwgb2YgZXJyb3IgaGFuZGxpbmc6IGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjYW4gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCBhbmQgY29udGludWUgZXhlY3V0aW9uIGF0IGFuIG91dGVyXG5sZXZlbCwgYnV0IGl0IGNhbm5vdCByZXBhaXIgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBhbmQgcmV0cnkgdGhlXG5mYWlsaW5nIG9wZXJhdGlvbiAoZXhjZXB0IGJ5IHJlLWVudGVyaW5nIHRoZSBvZmZlbmRpbmcgcGllY2Ugb2YgY29kZVxuZnJvbSB0aGUgdG9wKS5cblxuV2hlbiBhbiBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQgYXQgYWxsLCB0aGUgaW50ZXJwcmV0ZXIgdGVybWluYXRlc1xuZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciByZXR1cm5zIHRvIGl0cyBpbnRlcmFjdGl2ZSBtYWluIGxvb3AuICBJblxuZWl0aGVyIGNhc2UsIGl0IHByaW50cyBhIHN0YWNrIGJhY2t0cmFjZSwgZXhjZXB0IHdoZW4gdGhlIGV4Y2VwdGlvbiBpc1xuIlN5c3RlbUV4aXQiLlxuXG5FeGNlcHRpb25zIGFyZSBpZGVudGlmaWVkIGJ5IGNsYXNzIGluc3RhbmNlcy4gIFRoZSAiZXhjZXB0IiBjbGF1c2UgaXNcbnNlbGVjdGVkIGRlcGVuZGluZyBvbiB0aGUgY2xhc3Mgb2YgdGhlIGluc3RhbmNlOiBpdCBtdXN0IHJlZmVyZW5jZSB0aGVcbmNsYXNzIG9mIHRoZSBpbnN0YW5jZSBvciBhIGJhc2UgY2xhc3MgdGhlcmVvZi4gIFRoZSBpbnN0YW5jZSBjYW4gYmVcbnJlY2VpdmVkIGJ5IHRoZSBoYW5kbGVyIGFuZCBjYW4gY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGVcbmV4Y2VwdGlvbmFsIGNvbmRpdGlvbi5cblxuTm90ZTogRXhjZXB0aW9uIG1lc3NhZ2VzIGFyZSBub3QgcGFydCBvZiB0aGUgUHl0aG9uIEFQSS4gIFRoZWlyXG4gIGNvbnRlbnRzIG1heSBjaGFuZ2UgZnJvbSBvbmUgdmVyc2lvbiBvZiBQeXRob24gdG8gdGhlIG5leHQgd2l0aG91dFxuICB3YXJuaW5nIGFuZCBzaG91bGQgbm90IGJlIHJlbGllZCBvbiBieSBjb2RlIHdoaWNoIHdpbGwgcnVuIHVuZGVyXG4gIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBpbnRlcnByZXRlci5cblxuU2VlIGFsc28gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSAidHJ5IiBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHRyeVxuc3RhdGVtZW50KiBhbmQgInJhaXNlIiBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhpcyBsaW1pdGF0aW9uIG9jY3VycyBiZWNhdXNlIHRoZSBjb2RlIHRoYXQgaXMgZXhlY3V0ZWQgYnlcbiAgICB0aGVzZSBvcGVyYXRpb25zIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIHRpbWUgdGhlIG1vZHVsZSBpc1xuICAgIGNvbXBpbGVkLlxuJywKKyAnZXhlY21vZGVsJzogdSdcbkV4ZWN1dGlvbiBtb2RlbFxuKioqKioqKioqKioqKioqXG5cblxuU3RydWN0dXJlIG9mIGEgcHJvZ3JhbVxuPT09PT09PT09PT09PT09PT09PT09PVxuXG5BIFB5dGhvbiBwcm9ncmFtIGlzIGNvbnN0cnVjdGVkIGZyb20gY29kZSBibG9ja3MuIEEgKmJsb2NrKiBpcyBhIHBpZWNlXG5vZiBQeXRob24gcHJvZ3JhbSB0ZXh0IHRoYXQgaXMgZXhlY3V0ZWQgYXMgYSB1bml0LiBUaGUgZm9sbG93aW5nIGFyZVxuYmxvY2tzOiBhIG1vZHVsZSwgYSBmdW5jdGlvbiBib2R5LCBhbmQgYSBjbGFzcyBkZWZpbml0aW9uLiBFYWNoXG5jb21tYW5kIHR5cGVkIGludGVyYWN0aXZlbHkgaXMgYSBibG9jay4gIEEgc2NyaXB0IGZpbGUgKGEgZmlsZSBnaXZlblxuYXMgc3RhbmRhcmQgaW5wdXQgdG8gdGhlIGludGVycHJldGVyIG9yIHNwZWNpZmllZCBhcyBhIGNvbW1hbmQgbGluZVxuYXJndW1lbnQgdG8gdGhlIGludGVycHJldGVyKSBpcyBhIGNvZGUgYmxvY2suICBBIHNjcmlwdCBjb21tYW5kIChhXG5jb21tYW5kIHNwZWNpZmllZCBvbiB0aGUgaW50ZXJwcmV0ZXIgY29tbWFuZCBsaW5lIHdpdGggdGhlIFwnKiotYyoqXCdcbm9wdGlvbikgaXMgYSBjb2RlIGJsb2NrLiAgVGhlIHN0cmluZyBhcmd1bWVudCBwYXNzZWQgdG8gdGhlIGJ1aWx0LWluXG5mdW5jdGlvbnMgImV2YWwoKSIgYW5kICJleGVjKCkiIGlzIGEgY29kZSBibG9jay5cblxuQSBjb2RlIGJsb2NrIGlzIGV4ZWN1dGVkIGluIGFuICpleGVjdXRpb24gZnJhbWUqLiAgQSBmcmFtZSBjb250YWluc1xuc29tZSBhZG1pbmlzdHJhdGl2ZSBpbmZvcm1hdGlvbiAodXNlZCBmb3IgZGVidWdnaW5nKSBhbmQgZGV0ZXJtaW5lc1xud2hlcmUgYW5kIGhvdyBleGVjdXRpb24gY29udGludWVzIGFmdGVyIHRoZSBjb2RlIGJsb2NrXCdzIGV4ZWN1dGlvbiBoYXNcbmNvbXBsZXRlZC5cblxuXG5OYW1pbmcgYW5kIGJpbmRpbmdcbj09PT09PT09PT09PT09PT09PVxuXG5cbkJpbmRpbmcgb2YgbmFtZXNcbi0tLS0tLS0tLS0tLS0tLS1cblxuKk5hbWVzKiByZWZlciB0byBvYmplY3RzLiAgTmFtZXMgYXJlIGludHJvZHVjZWQgYnkgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLlxuXG5UaGUgZm9sbG93aW5nIGNvbnN0cnVjdHMgYmluZCBuYW1lczogZm9ybWFsIHBhcmFtZXRlcnMgdG8gZnVuY3Rpb25zLFxuImltcG9ydCIgc3RhdGVtZW50cywgY2xhc3MgYW5kIGZ1bmN0aW9uIGRlZmluaXRpb25zICh0aGVzZSBiaW5kIHRoZVxuY2xhc3Mgb3IgZnVuY3Rpb24gbmFtZSBpbiB0aGUgZGVmaW5pbmcgYmxvY2spLCBhbmQgdGFyZ2V0cyB0aGF0IGFyZVxuaWRlbnRpZmllcnMgaWYgb2NjdXJyaW5nIGluIGFuIGFzc2lnbm1lbnQsICJmb3IiIGxvb3AgaGVhZGVyLCBvciBhZnRlclxuImFzIiBpbiBhICJ3aXRoIiBzdGF0ZW1lbnQgb3IgImV4Y2VwdCIgY2xhdXNlLiBUaGUgImltcG9ydCIgc3RhdGVtZW50XG5vZiB0aGUgZm9ybSAiZnJvbSAuLi4gaW1wb3J0ICoiIGJpbmRzIGFsbCBuYW1lcyBkZWZpbmVkIGluIHRoZVxuaW1wb3J0ZWQgbW9kdWxlLCBleGNlcHQgdGhvc2UgYmVnaW5uaW5nIHdpdGggYW4gdW5kZXJzY29yZS4gIFRoaXMgZm9ybVxubWF5IG9ubHkgYmUgdXNlZCBhdCB0aGUgbW9kdWxlIGxldmVsLlxuXG5BIHRhcmdldCBvY2N1cnJpbmcgaW4gYSAiZGVsIiBzdGF0ZW1lbnQgaXMgYWxzbyBjb25zaWRlcmVkIGJvdW5kIGZvclxudGhpcyBwdXJwb3NlICh0aG91Z2ggdGhlIGFjdHVhbCBzZW1hbnRpY3MgYXJlIHRvIHVuYmluZCB0aGUgbmFtZSkuXG5cbkVhY2ggYXNzaWdubWVudCBvciBpbXBvcnQgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jayBkZWZpbmVkIGJ5IGFcbmNsYXNzIG9yIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgYXQgdGhlIG1vZHVsZSBsZXZlbCAodGhlIHRvcC1sZXZlbFxuY29kZSBibG9jaykuXG5cbklmIGEgbmFtZSBpcyBib3VuZCBpbiBhIGJsb2NrLCBpdCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9mIHRoYXQgYmxvY2ssXG51bmxlc3MgZGVjbGFyZWQgYXMgIm5vbmxvY2FsIiBvciAiZ2xvYmFsIi4gIElmIGEgbmFtZSBpcyBib3VuZCBhdCB0aGVcbm1vZHVsZSBsZXZlbCwgaXQgaXMgYSBnbG9iYWwgdmFyaWFibGUuICAoVGhlIHZhcmlhYmxlcyBvZiB0aGUgbW9kdWxlXG5jb2RlIGJsb2NrIGFyZSBsb2NhbCBhbmQgZ2xvYmFsLikgIElmIGEgdmFyaWFibGUgaXMgdXNlZCBpbiBhIGNvZGVcbmJsb2NrIGJ1dCBub3QgZGVmaW5lZCB0aGVyZSwgaXQgaXMgYSAqZnJlZSB2YXJpYWJsZSouXG5cbkVhY2ggb2NjdXJyZW5jZSBvZiBhIG5hbWUgaW4gdGhlIHByb2dyYW0gdGV4dCByZWZlcnMgdG8gdGhlICpiaW5kaW5nKlxub2YgdGhhdCBuYW1lIGVzdGFibGlzaGVkIGJ5IHRoZSBmb2xsb3dpbmcgbmFtZSByZXNvbHV0aW9uIHJ1bGVzLlxuXG5cblJlc29sdXRpb24gb2YgbmFtZXNcbi0tLS0tLS0tLS0tLS0tLS0tLS1cblxuQSAqc2NvcGUqIGRlZmluZXMgdGhlIHZpc2liaWxpdHkgb2YgYSBuYW1lIHdpdGhpbiBhIGJsb2NrLiAgSWYgYSBsb2NhbFxudmFyaWFibGUgaXMgZGVmaW5lZCBpbiBhIGJsb2NrLCBpdHMgc2NvcGUgaW5jbHVkZXMgdGhhdCBibG9jay4gIElmIHRoZVxuZGVmaW5pdGlvbiBvY2N1cnMgaW4gYSBmdW5jdGlvbiBibG9jaywgdGhlIHNjb3BlIGV4dGVuZHMgdG8gYW55IGJsb2Nrc1xuY29udGFpbmVkIHdpdGhpbiB0aGUgZGVmaW5pbmcgb25lLCB1bmxlc3MgYSBjb250YWluZWQgYmxvY2sgaW50cm9kdWNlc1xuYSBkaWZmZXJlbnQgYmluZGluZyBmb3IgdGhlIG5hbWUuXG5cbldoZW4gYSBuYW1lIGlzIHVzZWQgaW4gYSBjb2RlIGJsb2NrLCBpdCBpcyByZXNvbHZlZCB1c2luZyB0aGUgbmVhcmVzdFxuZW5jbG9zaW5nIHNjb3BlLiAgVGhlIHNldCBvZiBhbGwgc3VjaCBzY29wZXMgdmlzaWJsZSB0byBhIGNvZGUgYmxvY2tcbmlzIGNhbGxlZCB0aGUgYmxvY2tcJ3MgKmVudmlyb25tZW50Ki5cblxuV2hlbiBhIG5hbWUgaXMgbm90IGZvdW5kIGF0IGFsbCwgYSAiTmFtZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLiBJZlxudGhlIGN1cnJlbnQgc2NvcGUgaXMgYSBmdW5jdGlvbiBzY29wZSwgYW5kIHRoZSBuYW1lIHJlZmVycyB0byBhIGxvY2FsXG52YXJpYWJsZSB0aGF0IGhhcyBub3QgeWV0IGJlZW4gYm91bmQgdG8gYSB2YWx1ZSBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlXG5uYW1lIGlzIHVzZWQsIGFuICJVbmJvdW5kTG9jYWxFcnJvciIgZXhjZXB0aW9uIGlzIHJhaXNlZC5cbiJVbmJvdW5kTG9jYWxFcnJvciIgaXMgYSBzdWJjbGFzcyBvZiAiTmFtZUVycm9yIi5cblxuSWYgYSBuYW1lIGJpbmRpbmcgb3BlcmF0aW9uIG9jY3VycyBhbnl3aGVyZSB3aXRoaW4gYSBjb2RlIGJsb2NrLCBhbGxcbnVzZXMgb2YgdGhlIG5hbWUgd2l0aGluIHRoZSBibG9jayBhcmUgdHJlYXRlZCBhcyByZWZlcmVuY2VzIHRvIHRoZVxuY3VycmVudCBibG9jay4gIFRoaXMgY2FuIGxlYWQgdG8gZXJyb3JzIHdoZW4gYSBuYW1lIGlzIHVzZWQgd2l0aGluIGFcbmJsb2NrIGJlZm9yZSBpdCBpcyBib3VuZC4gIFRoaXMgcnVsZSBpcyBzdWJ0bGUuICBQeXRob24gbGFja3NcbmRlY2xhcmF0aW9ucyBhbmQgYWxsb3dzIG5hbWUgYmluZGluZyBvcGVyYXRpb25zIHRvIG9jY3VyIGFueXdoZXJlXG53aXRoaW4gYSBjb2RlIGJsb2NrLiAgVGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhIGNvZGUgYmxvY2sgY2FuIGJlXG5kZXRlcm1pbmVkIGJ5IHNjYW5uaW5nIHRoZSBlbnRpcmUgdGV4dCBvZiB0aGUgYmxvY2sgZm9yIG5hbWUgYmluZGluZ1xub3BlcmF0aW9ucy5cblxuSWYgdGhlICJnbG9iYWwiIHN0YXRlbWVudCBvY2N1cnMgd2l0aGluIGEgYmxvY2ssIGFsbCB1c2VzIG9mIHRoZSBuYW1lXG5zcGVjaWZpZWQgaW4gdGhlIHN0YXRlbWVudCByZWZlciB0byB0aGUgYmluZGluZyBvZiB0aGF0IG5hbWUgaW4gdGhlXG50b3AtbGV2ZWwgbmFtZXNwYWNlLiAgTmFtZXMgYXJlIHJlc29sdmVkIGluIHRoZSB0b3AtbGV2ZWwgbmFtZXNwYWNlIGJ5XG5zZWFyY2hpbmcgdGhlIGdsb2JhbCBuYW1lc3BhY2UsIGkuZS4gdGhlIG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlXG5jb250YWluaW5nIHRoZSBjb2RlIGJsb2NrLCBhbmQgdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSwgdGhlIG5hbWVzcGFjZVxub2YgdGhlIG1vZHVsZSAiYnVpbHRpbnMiLiAgVGhlIGdsb2JhbCBuYW1lc3BhY2UgaXMgc2VhcmNoZWQgZmlyc3QuICBJZlxudGhlIG5hbWUgaXMgbm90IGZvdW5kIHRoZXJlLCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIGlzIHNlYXJjaGVkLiAgVGhlXG4iZ2xvYmFsIiBzdGF0ZW1lbnQgbXVzdCBwcmVjZWRlIGFsbCB1c2VzIG9mIHRoZSBuYW1lLlxuXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50IGhhcyB0aGUgc2FtZSBzY29wZSBhcyBhIG5hbWUgYmluZGluZyBvcGVyYXRpb25cbmluIHRoZSBzYW1lIGJsb2NrLiAgSWYgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIHNjb3BlIGZvciBhIGZyZWUgdmFyaWFibGVcbmNvbnRhaW5zIGEgZ2xvYmFsIHN0YXRlbWVudCwgdGhlIGZyZWUgdmFyaWFibGUgaXMgdHJlYXRlZCBhcyBhIGdsb2JhbC5cblxuVGhlICJub25sb2NhbCIgc3RhdGVtZW50IGNhdXNlcyBjb3JyZXNwb25kaW5nIG5hbWVzIHRvIHJlZmVyIHRvXG5wcmV2aW91c2x5IGJvdW5kIHZhcmlhYmxlcyBpbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgZnVuY3Rpb24gc2NvcGUuXG4iU3ludGF4RXJyb3IiIGlzIHJhaXNlZCBhdCBjb21waWxlIHRpbWUgaWYgdGhlIGdpdmVuIG5hbWUgZG9lcyBub3RcbmV4aXN0IGluIGFueSBlbmNsb3NpbmcgZnVuY3Rpb24gc2NvcGUuXG5cblRoZSBuYW1lc3BhY2UgZm9yIGEgbW9kdWxlIGlzIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCB0aGUgZmlyc3QgdGltZSBhXG5tb2R1bGUgaXMgaW1wb3J0ZWQuICBUaGUgbWFpbiBtb2R1bGUgZm9yIGEgc2NyaXB0IGlzIGFsd2F5cyBjYWxsZWRcbiJfX21haW5fXyIuXG5cbkNsYXNzIGRlZmluaXRpb24gYmxvY2tzIGFuZCBhcmd1bWVudHMgdG8gImV4ZWMoKSIgYW5kICJldmFsKCkiIGFyZVxuc3BlY2lhbCBpbiB0aGUgY29udGV4dCBvZiBuYW1lIHJlc29sdXRpb24uIEEgY2xhc3MgZGVmaW5pdGlvbiBpcyBhblxuZXhlY3V0YWJsZSBzdGF0ZW1lbnQgdGhhdCBtYXkgdXNlIGFuZCBkZWZpbmUgbmFtZXMuIFRoZXNlIHJlZmVyZW5jZXNcbmZvbGxvdyB0aGUgbm9ybWFsIHJ1bGVzIGZvciBuYW1lIHJlc29sdXRpb24gd2l0aCBhbiBleGNlcHRpb24gdGhhdFxudW5ib3VuZCBsb2NhbCB2YXJpYWJsZXMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgZ2xvYmFsIG5hbWVzcGFjZS4gVGhlXG5uYW1lc3BhY2Ugb2YgdGhlIGNsYXNzIGRlZmluaXRpb24gYmVjb21lcyB0aGUgYXR0cmlidXRlIGRpY3Rpb25hcnkgb2ZcbnRoZSBjbGFzcy4gVGhlIHNjb3BlIG9mIG5hbWVzIGRlZmluZWQgaW4gYSBjbGFzcyBibG9jayBpcyBsaW1pdGVkIHRvXG50aGUgY2xhc3MgYmxvY2s7IGl0IGRvZXMgbm90IGV4dGVuZCB0byB0aGUgY29kZSBibG9ja3Mgb2YgbWV0aG9kcyAtLVxudGhpcyBpbmNsdWRlcyBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zIHNpbmNlIHRoZXkgYXJlXG5pbXBsZW1lbnRlZCB1c2luZyBhIGZ1bmN0aW9uIHNjb3BlLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmdcbndpbGwgZmFpbDpcblxuICAgY2xhc3MgQTpcbiAgICAgICBhID0gNDJcbiAgICAgICBiID0gbGlzdChhICsgaSBmb3IgaSBpbiByYW5nZSgxMCkpXG5cblxuQnVpbHRpbnMgYW5kIHJlc3RyaWN0ZWQgZXhlY3V0aW9uXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBhc3NvY2lhdGVkIHdpdGggdGhlIGV4ZWN1dGlvbiBvZiBhIGNvZGUgYmxvY2tcbmlzIGFjdHVhbGx5IGZvdW5kIGJ5IGxvb2tpbmcgdXAgdGhlIG5hbWUgIl9fYnVpbHRpbnNfXyIgaW4gaXRzIGdsb2JhbFxubmFtZXNwYWNlOyB0aGlzIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkgb3IgYSBtb2R1bGUgKGluIHRoZSBsYXR0ZXIgY2FzZVxudGhlIG1vZHVsZVwncyBkaWN0aW9uYXJ5IGlzIHVzZWQpLiAgQnkgZGVmYXVsdCwgd2hlbiBpbiB0aGUgIl9fbWFpbl9fIlxubW9kdWxlLCAiX19idWlsdGluc19fIiBpcyB0aGUgYnVpbHQtaW4gbW9kdWxlICJidWlsdGlucyI7IHdoZW4gaW4gYW55XG5vdGhlciBtb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIGFuIGFsaWFzIGZvciB0aGUgZGljdGlvbmFyeSBvZiB0aGVcbiJidWlsdGlucyIgbW9kdWxlIGl0c2VsZi4gICJfX2J1aWx0aW5zX18iIGNhbiBiZSBzZXQgdG8gYSB1c2VyLWNyZWF0ZWRcbmRpY3Rpb25hcnkgdG8gY3JlYXRlIGEgd2VhayBmb3JtIG9mIHJlc3RyaWN0ZWQgZXhlY3V0aW9uLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIFVzZXJzIHNob3VsZCBub3QgdG91Y2hcbiJfX2J1aWx0aW5zX18iOyBpdCBpcyBzdHJpY3RseSBhbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuICBVc2Vyc1xud2FudGluZyB0byBvdmVycmlkZSB2YWx1ZXMgaW4gdGhlIGJ1aWx0aW5zIG5hbWVzcGFjZSBzaG91bGQgImltcG9ydCJcbnRoZSAiYnVpbHRpbnMiIG1vZHVsZSBhbmQgbW9kaWZ5IGl0cyBhdHRyaWJ1dGVzIGFwcHJvcHJpYXRlbHkuXG5cblxuSW50ZXJhY3Rpb24gd2l0aCBkeW5hbWljIGZlYXR1cmVzXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuTmFtZSByZXNvbHV0aW9uIG9mIGZyZWUgdmFyaWFibGVzIG9jY3VycyBhdCBydW50aW1lLCBub3QgYXQgY29tcGlsZVxudGltZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBmb2xsb3dpbmcgY29kZSB3aWxsIHByaW50IDQyOlxuXG4gICBpID0gMTBcbiAgIGRlZiBmKCk6XG4gICAgICAgcHJpbnQoaSlcbiAgIGkgPSA0MlxuICAgZigpXG5cblRoZXJlIGFyZSBzZXZlcmFsIGNhc2VzIHdoZXJlIFB5dGhvbiBzdGF0ZW1lbnRzIGFyZSBpbGxlZ2FsIHdoZW4gdXNlZFxuaW4gY29uanVuY3Rpb24gd2l0aCBuZXN0ZWQgc2NvcGVzIHRoYXQgY29udGFpbiBmcmVlIHZhcmlhYmxlcy5cblxuSWYgYSB2YXJpYWJsZSBpcyByZWZlcmVuY2VkIGluIGFuIGVuY2xvc2luZyBzY29wZSwgaXQgaXMgaWxsZWdhbCB0b1xuZGVsZXRlIHRoZSBuYW1lLiAgQW4gZXJyb3Igd2lsbCBiZSByZXBvcnRlZCBhdCBjb21waWxlIHRpbWUuXG5cblRoZSAiZXZhbCgpIiBhbmQgImV4ZWMoKSIgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGUgZnVsbFxuZW52aXJvbm1lbnQgZm9yIHJlc29sdmluZyBuYW1lcy4gIE5hbWVzIG1heSBiZSByZXNvbHZlZCBpbiB0aGUgbG9jYWxcbmFuZCBnbG9iYWwgbmFtZXNwYWNlcyBvZiB0aGUgY2FsbGVyLiAgRnJlZSB2YXJpYWJsZXMgYXJlIG5vdCByZXNvbHZlZFxuaW4gdGhlIG5lYXJlc3QgZW5jbG9zaW5nIG5hbWVzcGFjZSwgYnV0IGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiAgWzFdXG5UaGUgImV4ZWMoKSIgYW5kICJldmFsKCkiIGZ1bmN0aW9ucyBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cyB0b1xub3ZlcnJpZGUgdGhlIGdsb2JhbCBhbmQgbG9jYWwgbmFtZXNwYWNlLiAgSWYgb25seSBvbmUgbmFtZXNwYWNlIGlzXG5zcGVjaWZpZWQsIGl0IGlzIHVzZWQgZm9yIGJvdGguXG5cblxuRXhjZXB0aW9uc1xuPT09PT09PT09PVxuXG5FeGNlcHRpb25zIGFyZSBhIG1lYW5zIG9mIGJyZWFraW5nIG91dCBvZiB0aGUgbm9ybWFsIGZsb3cgb2YgY29udHJvbFxub2YgYSBjb2RlIGJsb2NrIGluIG9yZGVyIHRvIGhhbmRsZSBlcnJvcnMgb3Igb3RoZXIgZXhjZXB0aW9uYWxcbmNvbmRpdGlvbnMuICBBbiBleGNlcHRpb24gaXMgKnJhaXNlZCogYXQgdGhlIHBvaW50IHdoZXJlIHRoZSBlcnJvciBpc1xuZGV0ZWN0ZWQ7IGl0IG1heSBiZSAqaGFuZGxlZCogYnkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgYmxvY2sgb3IgYnkgYW55XG5jb2RlIGJsb2NrIHRoYXQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnZva2VkIHRoZSBjb2RlIGJsb2NrIHdoZXJlXG50aGUgZXJyb3Igb2NjdXJyZWQuXG5cblRoZSBQeXRob24gaW50ZXJwcmV0ZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiB3aGVuIGl0IGRldGVjdHMgYSBydW4tdGltZVxuZXJyb3IgKHN1Y2ggYXMgZGl2aXNpb24gYnkgemVybykuICBBIFB5dGhvbiBwcm9ncmFtIGNhbiBhbHNvXG5leHBsaWNpdGx5IHJhaXNlIGFuIGV4Y2VwdGlvbiB3aXRoIHRoZSAicmFpc2UiIHN0YXRlbWVudC4gRXhjZXB0aW9uXG5oYW5kbGVycyBhcmUgc3BlY2lmaWVkIHdpdGggdGhlICJ0cnkiIC4uLiAiZXhjZXB0IiBzdGF0ZW1lbnQuICBUaGVcbiJmaW5hbGx5IiBjbGF1c2Ugb2Ygc3VjaCBhIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGNsZWFudXBcbmNvZGUgd2hpY2ggZG9lcyBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24sIGJ1dCBpcyBleGVjdXRlZCB3aGV0aGVyIGFuXG5leGNlcHRpb24gb2NjdXJyZWQgb3Igbm90IGluIHRoZSBwcmVjZWRpbmcgY29kZS5cblxuUHl0aG9uIHVzZXMgdGhlICJ0ZXJtaW5hdGlvbiIgbW9kZWwgb2YgZXJyb3IgaGFuZGxpbmc6IGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjYW4gZmluZCBvdXQgd2hhdCBoYXBwZW5lZCBhbmQgY29udGludWUgZXhlY3V0aW9uIGF0IGFuIG91dGVyXG5sZXZlbCwgYnV0IGl0IGNhbm5vdCByZXBhaXIgdGhlIGNhdXNlIG9mIHRoZSBlcnJvciBhbmQgcmV0cnkgdGhlXG5mYWlsaW5nIG9wZXJhdGlvbiAoZXhjZXB0IGJ5IHJlLWVudGVyaW5nIHRoZSBvZmZlbmRpbmcgcGllY2Ugb2YgY29kZVxuZnJvbSB0aGUgdG9wKS5cblxuV2hlbiBhbiBleGNlcHRpb24gaXMgbm90IGhhbmRsZWQgYXQgYWxsLCB0aGUgaW50ZXJwcmV0ZXIgdGVybWluYXRlc1xuZXhlY3V0aW9uIG9mIHRoZSBwcm9ncmFtLCBvciByZXR1cm5zIHRvIGl0cyBpbnRlcmFjdGl2ZSBtYWluIGxvb3AuICBJblxuZWl0aGVyIGNhc2UsIGl0IHByaW50cyBhIHN0YWNrIGJhY2t0cmFjZSwgZXhjZXB0IHdoZW4gdGhlIGV4Y2VwdGlvbiBpc1xuIlN5c3RlbUV4aXQiLlxuXG5FeGNlcHRpb25zIGFyZSBpZGVudGlmaWVkIGJ5IGNsYXNzIGluc3RhbmNlcy4gIFRoZSAiZXhjZXB0IiBjbGF1c2UgaXNcbnNlbGVjdGVkIGRlcGVuZGluZyBvbiB0aGUgY2xhc3Mgb2YgdGhlIGluc3RhbmNlOiBpdCBtdXN0IHJlZmVyZW5jZSB0aGVcbmNsYXNzIG9mIHRoZSBpbnN0YW5jZSBvciBhIGJhc2UgY2xhc3MgdGhlcmVvZi4gIFRoZSBpbnN0YW5jZSBjYW4gYmVcbnJlY2VpdmVkIGJ5IHRoZSBoYW5kbGVyIGFuZCBjYW4gY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGVcbmV4Y2VwdGlvbmFsIGNvbmRpdGlvbi5cblxuTm90ZTogRXhjZXB0aW9uIG1lc3NhZ2VzIGFyZSBub3QgcGFydCBvZiB0aGUgUHl0aG9uIEFQSS4gIFRoZWlyXG4gIGNvbnRlbnRzIG1heSBjaGFuZ2UgZnJvbSBvbmUgdmVyc2lvbiBvZiBQeXRob24gdG8gdGhlIG5leHQgd2l0aG91dFxuICB3YXJuaW5nIGFuZCBzaG91bGQgbm90IGJlIHJlbGllZCBvbiBieSBjb2RlIHdoaWNoIHdpbGwgcnVuIHVuZGVyXG4gIG11bHRpcGxlIHZlcnNpb25zIG9mIHRoZSBpbnRlcnByZXRlci5cblxuU2VlIGFsc28gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSAidHJ5IiBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHRyeVxuc3RhdGVtZW50KiBhbmQgInJhaXNlIiBzdGF0ZW1lbnQgaW4gc2VjdGlvbiAqVGhlIHJhaXNlIHN0YXRlbWVudCouXG5cbi1bIEZvb3Rub3RlcyBdLVxuXG5bMV0gVGhpcyBsaW1pdGF0aW9uIG9jY3VycyBiZWNhdXNlIHRoZSBjb2RlIHRoYXQgaXMgZXhlY3V0ZWQgYnlcbiAgICB0aGVzZSBvcGVyYXRpb25zIGlzIG5vdCBhdmFpbGFibGUgYXQgdGhlIHRpbWUgdGhlIG1vZHVsZSBpc1xuICAgIGNvbXBpbGVkLlxuJywKKyAnZXhwcmxpc3RzJzogdSdcbkV4cHJlc3Npb24gbGlzdHNcbioqKioqKioqKioqKioqKipcblxuICAgZXhwcmVzc2lvbl9saXN0IDo6PSBleHByZXNzaW9uICggIiwiIGV4cHJlc3Npb24gKSogWyIsIl1cblxuQW4gZXhwcmVzc2lvbiBsaXN0IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIGNvbW1hIHlpZWxkcyBhIHR1cGxlLiAgVGhlXG5sZW5ndGggb2YgdGhlIHR1cGxlIGlzIHRoZSBudW1iZXIgb2YgZXhwcmVzc2lvbnMgaW4gdGhlIGxpc3QuICBUaGVcbmV4cHJlc3Npb25zIGFyZSBldmFsdWF0ZWQgZnJvbSBsZWZ0IHRvIHJpZ2h0LlxuXG5UaGUgdHJhaWxpbmcgY29tbWEgaXMgcmVxdWlyZWQgb25seSB0byBjcmVhdGUgYSBzaW5nbGUgdHVwbGUgKGEuay5hLiBhXG4qc2luZ2xldG9uKik7IGl0IGlzIG9wdGlvbmFsIGluIGFsbCBvdGhlciBjYXNlcy4gIEEgc2luZ2xlIGV4cHJlc3Npb25cbndpdGhvdXQgYSB0cmFpbGluZyBjb21tYSBkb2VzblwndCBjcmVhdGUgYSB0dXBsZSwgYnV0IHJhdGhlciB5aWVsZHMgdGhlXG52YWx1ZSBvZiB0aGF0IGV4cHJlc3Npb24uIChUbyBjcmVhdGUgYW4gZW1wdHkgdHVwbGUsIHVzZSBhbiBlbXB0eSBwYWlyXG5vZiBwYXJlbnRoZXNlczogIigpIi4pXG4nLAorICdmbG9hdGluZyc6IHUnXG5GbG9hdGluZyBwb2ludCBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuRmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWxcbmRlZmluaXRpb25zOlxuXG4gICBmbG9hdG51bWJlciAgIDo6PSBwb2ludGZsb2F0IHwgZXhwb25lbnRmbG9hdFxuICAgcG9pbnRmbG9hdCAgICA6Oj0gW2ludHBhcnRdIGZyYWN0aW9uIHwgaW50cGFydCAiLiJcbiAgIGV4cG9uZW50ZmxvYXQgOjo9IChpbnRwYXJ0IHwgcG9pbnRmbG9hdCkgZXhwb25lbnRcbiAgIGludHBhcnQgICAgICAgOjo9IGRpZ2l0K1xuICAgZnJhY3Rpb24gICAgICA6Oj0gIi4iIGRpZ2l0K1xuICAgZXhwb25lbnQgICAgICA6Oj0gKCJlIiB8ICJFIikgWyIrIiB8ICItIl0gZGlnaXQrXG5cbk5vdGUgdGhhdCB0aGUgaW50ZWdlciBhbmQgZXhwb25lbnQgcGFydHMgYXJlIGFsd2F5cyBpbnRlcnByZXRlZCB1c2luZ1xucmFkaXggMTAuIEZvciBleGFtcGxlLCAiMDc3ZTAxMCIgaXMgbGVnYWwsIGFuZCBkZW5vdGVzIHRoZSBzYW1lIG51bWJlclxuYXMgIjc3ZTEwIi4gVGhlIGFsbG93ZWQgcmFuZ2Ugb2YgZmxvYXRpbmcgcG9pbnQgbGl0ZXJhbHMgaXNcbmltcGxlbWVudGF0aW9uLWRlcGVuZGVudC4gU29tZSBleGFtcGxlcyBvZiBmbG9hdGluZyBwb2ludCBsaXRlcmFsczpcblxuICAgMy4xNCAgICAxMC4gICAgLjAwMSAgICAxZTEwMCAgICAzLjE0ZS0xMCAgICAwZTBcblxuTm90ZSB0aGF0IG51bWVyaWMgbGl0ZXJhbHMgZG8gbm90IGluY2x1ZGUgYSBzaWduOyBhIHBocmFzZSBsaWtlICItMSJcbmlzIGFjdHVhbGx5IGFuIGV4cHJlc3Npb24gY29tcG9zZWQgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yICItIiBhbmQgdGhlXG5saXRlcmFsICIxIi5cbicsCisgJ2Zvcic6IHUnXG5UaGUgImZvciIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqXG5cblRoZSAiZm9yIiBzdGF0ZW1lbnQgaXMgdXNlZCB0byBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGEgc2VxdWVuY2VcbihzdWNoIGFzIGEgc3RyaW5nLCB0dXBsZSBvciBsaXN0KSBvciBvdGhlciBpdGVyYWJsZSBvYmplY3Q6XG5cbiAgIGZvcl9zdG10IDo6PSAiZm9yIiB0YXJnZXRfbGlzdCAiaW4iIGV4cHJlc3Npb25fbGlzdCAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICBbImVsc2UiICI6IiBzdWl0ZV1cblxuVGhlIGV4cHJlc3Npb24gbGlzdCBpcyBldmFsdWF0ZWQgb25jZTsgaXQgc2hvdWxkIHlpZWxkIGFuIGl0ZXJhYmxlXG5vYmplY3QuICBBbiBpdGVyYXRvciBpcyBjcmVhdGVkIGZvciB0aGUgcmVzdWx0IG9mIHRoZVxuImV4cHJlc3Npb25fbGlzdCIuICBUaGUgc3VpdGUgaXMgdGhlbiBleGVjdXRlZCBvbmNlIGZvciBlYWNoIGl0ZW1cbnByb3ZpZGVkIGJ5IHRoZSBpdGVyYXRvciwgaW4gdGhlIG9yZGVyIHJldHVybmVkIGJ5IHRoZSBpdGVyYXRvci4gIEVhY2hcbml0ZW0gaW4gdHVybiBpcyBhc3NpZ25lZCB0byB0aGUgdGFyZ2V0IGxpc3QgdXNpbmcgdGhlIHN0YW5kYXJkIHJ1bGVzXG5mb3IgYXNzaWdubWVudHMgKHNlZSAqQXNzaWdubWVudCBzdGF0ZW1lbnRzKiksIGFuZCB0aGVuIHRoZSBzdWl0ZSBpc1xuZXhlY3V0ZWQuICBXaGVuIHRoZSBpdGVtcyBhcmUgZXhoYXVzdGVkICh3aGljaCBpcyBpbW1lZGlhdGVseSB3aGVuIHRoZVxuc2VxdWVuY2UgaXMgZW1wdHkgb3IgYW4gaXRlcmF0b3IgcmFpc2VzIGEgIlN0b3BJdGVyYXRpb24iIGV4Y2VwdGlvbiksXG50aGUgc3VpdGUgaW4gdGhlICJlbHNlIiBjbGF1c2UsIGlmIHByZXNlbnQsIGlzIGV4ZWN1dGVkLCBhbmQgdGhlIGxvb3BcbnRlcm1pbmF0ZXMuXG5cbkEgImJyZWFrIiBzdGF0ZW1lbnQgZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHRlcm1pbmF0ZXMgdGhlIGxvb3BcbndpdGhvdXQgZXhlY3V0aW5nIHRoZSAiZWxzZSIgY2xhdXNlXCdzIHN1aXRlLiAgQSAiY29udGludWUiIHN0YXRlbWVudFxuZXhlY3V0ZWQgaW4gdGhlIGZpcnN0IHN1aXRlIHNraXBzIHRoZSByZXN0IG9mIHRoZSBzdWl0ZSBhbmQgY29udGludWVzXG53aXRoIHRoZSBuZXh0IGl0ZW0sIG9yIHdpdGggdGhlICJlbHNlIiBjbGF1c2UgaWYgdGhlcmUgaXMgbm8gbmV4dFxuaXRlbS5cblxuVGhlIGZvci1sb29wIG1ha2VzIGFzc2lnbm1lbnRzIHRvIHRoZSB2YXJpYWJsZXMocykgaW4gdGhlIHRhcmdldCBsaXN0LlxuVGhpcyBvdmVyd3JpdGVzIGFsbCBwcmV2aW91cyBhc3NpZ25tZW50cyB0byB0aG9zZSB2YXJpYWJsZXMgaW5jbHVkaW5nXG50aG9zZSBtYWRlIGluIHRoZSBzdWl0ZSBvZiB0aGUgZm9yLWxvb3A6XG5cbiAgIGZvciBpIGluIHJhbmdlKDEwKTpcbiAgICAgICBwcmludChpKVxuICAgICAgIGkgPSA1ICAgICAgICAgICAgICMgdGhpcyB3aWxsIG5vdCBhZmZlY3QgdGhlIGZvci1sb29wXG4gICAgICAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGkgd2lsbCBiZSBvdmVyd3JpdHRlbiB3aXRoIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgIyBpbmRleCBpbiB0aGUgcmFuZ2VcblxuTmFtZXMgaW4gdGhlIHRhcmdldCBsaXN0IGFyZSBub3QgZGVsZXRlZCB3aGVuIHRoZSBsb29wIGlzIGZpbmlzaGVkLFxuYnV0IGlmIHRoZSBzZXF1ZW5jZSBpcyBlbXB0eSwgdGhleSB3aWxsIG5vdCBoYXZlIGJlZW4gYXNzaWduZWQgdG8gYXRcbmFsbCBieSB0aGUgbG9vcC4gIEhpbnQ6IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAicmFuZ2UoKSIgcmV0dXJucyBhblxuaXRlcmF0b3Igb2YgaW50ZWdlcnMgc3VpdGFibGUgdG8gZW11bGF0ZSB0aGUgZWZmZWN0IG9mIFBhc2NhbFwncyAiZm9yIGlcbjo9IGEgdG8gYiBkbyI7IGUuZy4sICJsaXN0KHJhbmdlKDMpKSIgcmV0dXJucyB0aGUgbGlzdCAiWzAsIDEsIDJdIi5cblxuTm90ZTogVGhlcmUgaXMgYSBzdWJ0bGV0eSB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBiZWluZyBtb2RpZmllZCBieSB0aGVcbiAgbG9vcCAodGhpcyBjYW4gb25seSBvY2N1ciBmb3IgbXV0YWJsZSBzZXF1ZW5jZXMsIGkuZS4gbGlzdHMpLiAgQW5cbiAgaW50ZXJuYWwgY291bnRlciBpcyB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggaXRlbSBpcyB1c2VkIG5leHQsXG4gIGFuZCB0aGlzIGlzIGluY3JlbWVudGVkIG9uIGVhY2ggaXRlcmF0aW9uLiAgV2hlbiB0aGlzIGNvdW50ZXIgaGFzXG4gIHJlYWNoZWQgdGhlIGxlbmd0aCBvZiB0aGUgc2VxdWVuY2UgdGhlIGxvb3AgdGVybWluYXRlcy4gIFRoaXMgbWVhbnNcbiAgdGhhdCBpZiB0aGUgc3VpdGUgZGVsZXRlcyB0aGUgY3VycmVudCAob3IgYSBwcmV2aW91cykgaXRlbSBmcm9tIHRoZVxuICBzZXF1ZW5jZSwgdGhlIG5leHQgaXRlbSB3aWxsIGJlIHNraXBwZWQgKHNpbmNlIGl0IGdldHMgdGhlIGluZGV4IG9mXG4gIHRoZSBjdXJyZW50IGl0ZW0gd2hpY2ggaGFzIGFscmVhZHkgYmVlbiB0cmVhdGVkKS4gIExpa2V3aXNlLCBpZiB0aGVcbiAgc3VpdGUgaW5zZXJ0cyBhbiBpdGVtIGluIHRoZSBzZXF1ZW5jZSBiZWZvcmUgdGhlIGN1cnJlbnQgaXRlbSwgdGhlXG4gIGN1cnJlbnQgaXRlbSB3aWxsIGJlIHRyZWF0ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aHJvdWdoIHRoZSBsb29wLlxuICBUaGlzIGNhbiBsZWFkIHRvIG5hc3R5IGJ1Z3MgdGhhdCBjYW4gYmUgYXZvaWRlZCBieSBtYWtpbmcgYVxuICB0ZW1wb3JhcnkgY29weSB1c2luZyBhIHNsaWNlIG9mIHRoZSB3aG9sZSBzZXF1ZW5jZSwgZS5nLixcblxuICAgICBmb3IgeCBpbiBhWzpdOlxuICAgICAgICAgaWYgeCA8IDA6IGEucmVtb3ZlKHgpXG4nLAorICdmb3JtYXRzdHJpbmdzJzogdSdcbkZvcm1hdCBTdHJpbmcgU3ludGF4XG4qKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgInN0ci5mb3JtYXQoKSIgbWV0aG9kIGFuZCB0aGUgIkZvcm1hdHRlciIgY2xhc3Mgc2hhcmUgdGhlIHNhbWVcbnN5bnRheCBmb3IgZm9ybWF0IHN0cmluZ3MgKGFsdGhvdWdoIGluIHRoZSBjYXNlIG9mICJGb3JtYXR0ZXIiLFxuc3ViY2xhc3NlcyBjYW4gZGVmaW5lIHRoZWlyIG93biBmb3JtYXQgc3RyaW5nIHN5bnRheCkuXG5cbkZvcm1hdCBzdHJpbmdzIGNvbnRhaW4gInJlcGxhY2VtZW50IGZpZWxkcyIgc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXNcbiJ7fSIuIEFueXRoaW5nIHRoYXQgaXMgbm90IGNvbnRhaW5lZCBpbiBicmFjZXMgaXMgY29uc2lkZXJlZCBsaXRlcmFsXG50ZXh0LCB3aGljaCBpcyBjb3BpZWQgdW5jaGFuZ2VkIHRvIHRoZSBvdXRwdXQuICBJZiB5b3UgbmVlZCB0byBpbmNsdWRlXG5hIGJyYWNlIGNoYXJhY3RlciBpbiB0aGUgbGl0ZXJhbCB0ZXh0LCBpdCBjYW4gYmUgZXNjYXBlZCBieSBkb3VibGluZzpcbiJ7eyIgYW5kICJ9fSIuXG5cblRoZSBncmFtbWFyIGZvciBhIHJlcGxhY2VtZW50IGZpZWxkIGlzIGFzIGZvbGxvd3M6XG5cbiAgICAgIHJlcGxhY2VtZW50X2ZpZWxkIDo6PSAieyIgW2ZpZWxkX25hbWVdIFsiISIgY29udmVyc2lvbl0gWyI6IiBmb3JtYXRfc3BlY10gIn0iXG4gICAgICBmaWVsZF9uYW1lICAgICAgICA6Oj0gYXJnX25hbWUgKCIuIiBhdHRyaWJ1dGVfbmFtZSB8ICJbIiBlbGVtZW50X2luZGV4ICJdIikqXG4gICAgICBhcmdfbmFtZSAgICAgICAgICA6Oj0gW2lkZW50aWZpZXIgfCBpbnRlZ2VyXVxuICAgICAgYXR0cmlidXRlX25hbWUgICAgOjo9IGlkZW50aWZpZXJcbiAgICAgIGVsZW1lbnRfaW5kZXggICAgIDo6PSBpbnRlZ2VyIHwgaW5kZXhfc3RyaW5nXG4gICAgICBpbmRleF9zdHJpbmcgICAgICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXSI+ICtcbiAgICAgIGNvbnZlcnNpb24gICAgICAgIDo6PSAiciIgfCAicyIgfCAiYSJcbiAgICAgIGZvcm1hdF9zcGVjICAgICAgIDo6PSA8ZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24+XG5cbkluIGxlc3MgZm9ybWFsIHRlcm1zLCB0aGUgcmVwbGFjZW1lbnQgZmllbGQgY2FuIHN0YXJ0IHdpdGggYVxuKmZpZWxkX25hbWUqIHRoYXQgc3BlY2lmaWVzIHRoZSBvYmplY3Qgd2hvc2UgdmFsdWUgaXMgdG8gYmUgZm9ybWF0dGVkXG5hbmQgaW5zZXJ0ZWQgaW50byB0aGUgb3V0cHV0IGluc3RlYWQgb2YgdGhlIHJlcGxhY2VtZW50IGZpZWxkLiBUaGVcbipmaWVsZF9uYW1lKiBpcyBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgICpjb252ZXJzaW9uKiBmaWVsZCwgd2hpY2ggaXNcbnByZWNlZGVkIGJ5IGFuIGV4Y2xhbWF0aW9uIHBvaW50ICJcJyFcJyIsIGFuZCBhICpmb3JtYXRfc3BlYyosIHdoaWNoIGlzXG5wcmVjZWRlZCBieSBhIGNvbG9uICJcJzpcJyIuICBUaGVzZSBzcGVjaWZ5IGEgbm9uLWRlZmF1bHQgZm9ybWF0IGZvciB0aGVcbnJlcGxhY2VtZW50IHZhbHVlLlxuXG5TZWUgYWxzbyB0aGUgKkZvcm1hdCBTcGVjaWZpY2F0aW9uIE1pbmktTGFuZ3VhZ2UqIHNlY3Rpb24uXG5cblRoZSAqZmllbGRfbmFtZSogaXRzZWxmIGJlZ2lucyB3aXRoIGFuICphcmdfbmFtZSogdGhhdCBpcyBlaXRoZXIgYVxubnVtYmVyIG9yIGEga2V5d29yZC4gIElmIGl0XCdzIGEgbnVtYmVyLCBpdCByZWZlcnMgdG8gYSBwb3NpdGlvbmFsXG5hcmd1bWVudCwgYW5kIGlmIGl0XCdzIGEga2V5d29yZCwgaXQgcmVmZXJzIHRvIGEgbmFtZWQga2V5d29yZFxuYXJndW1lbnQuICBJZiB0aGUgbnVtZXJpY2FsIGFyZ19uYW1lcyBpbiBhIGZvcm1hdCBzdHJpbmcgYXJlIDAsIDEsIDIsXG4uLi4gaW4gc2VxdWVuY2UsIHRoZXkgY2FuIGFsbCBiZSBvbWl0dGVkIChub3QganVzdCBzb21lKSBhbmQgdGhlXG5udW1iZXJzIDAsIDEsIDIsIC4uLiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgaW4gdGhhdCBvcmRlci5cbkJlY2F1c2UgKmFyZ19uYW1lKiBpcyBub3QgcXVvdGUtZGVsaW1pdGVkLCBpdCBpcyBub3QgcG9zc2libGUgdG9cbnNwZWNpZnkgYXJiaXRyYXJ5IGRpY3Rpb25hcnkga2V5cyAoZS5nLiwgdGhlIHN0cmluZ3MgIlwnMTBcJyIgb3JcbiJcJzotXVwnIikgd2l0aGluIGEgZm9ybWF0IHN0cmluZy4gVGhlICphcmdfbmFtZSogY2FuIGJlIGZvbGxvd2VkIGJ5IGFueVxubnVtYmVyIG9mIGluZGV4IG9yIGF0dHJpYnV0ZSBleHByZXNzaW9ucy4gQW4gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybVxuIlwnLm5hbWVcJyIgc2VsZWN0cyB0aGUgbmFtZWQgYXR0cmlidXRlIHVzaW5nICJnZXRhdHRyKCkiLCB3aGlsZSBhblxuZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSAiXCdbaW5kZXhdXCciIGRvZXMgYW4gaW5kZXggbG9va3VwIHVzaW5nXG4iX19nZXRpdGVtX18oKSIuXG5cbkNoYW5nZWQgaW4gdmVyc2lvbiAzLjE6IFRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IHNwZWNpZmllcnMgY2FuIGJlXG5vbWl0dGVkLCBzbyAiXCd7fSB7fVwnIiBpcyBlcXVpdmFsZW50IHRvICJcJ3swfSB7MX1cJyIuXG5cblNvbWUgc2ltcGxlIGZvcm1hdCBzdHJpbmcgZXhhbXBsZXM6XG5cbiAgICJGaXJzdCwgdGhvdSBzaGFsdCBjb3VudCB0byB7MH0iICMgUmVmZXJlbmNlcyBmaXJzdCBwb3NpdGlvbmFsIGFyZ3VtZW50XG4gICAiQnJpbmcgbWUgYSB7fSIgICAgICAgICAgICAgICAgICAjIEltcGxpY2l0bHkgcmVmZXJlbmNlcyB0aGUgZmlyc3QgcG9zaXRpb25hbCBhcmd1bWVudFxuICAgIkZyb20ge30gdG8ge30iICAgICAgICAgICAgICAgICAgIyBTYW1lIGFzICJGcm9tIHswfSB0byB7MX0iXG4gICAiTXkgcXVlc3QgaXMge25hbWV9IiAgICAgICAgICAgICAjIFJlZmVyZW5jZXMga2V5d29yZCBhcmd1bWVudCBcJ25hbWVcJ1xuICAgIldlaWdodCBpbiB0b25zIHswLndlaWdodH0iICAgICAgIyBcJ3dlaWdodFwnIGF0dHJpYnV0ZSBvZiBmaXJzdCBwb3NpdGlvbmFsIGFyZ1xuICAgIlVuaXRzIGRlc3Ryb3llZDoge3BsYXllcnNbMF19IiAgIyBGaXJzdCBlbGVtZW50IG9mIGtleXdvcmQgYXJndW1lbnQgXCdwbGF5ZXJzXCcuXG5cblRoZSAqY29udmVyc2lvbiogZmllbGQgY2F1c2VzIGEgdHlwZSBjb2VyY2lvbiBiZWZvcmUgZm9ybWF0dGluZy5cbk5vcm1hbGx5LCB0aGUgam9iIG9mIGZvcm1hdHRpbmcgYSB2YWx1ZSBpcyBkb25lIGJ5IHRoZSAiX19mb3JtYXRfXygpIlxubWV0aG9kIG9mIHRoZSB2YWx1ZSBpdHNlbGYuICBIb3dldmVyLCBpbiBzb21lIGNhc2VzIGl0IGlzIGRlc2lyYWJsZSB0b1xuZm9yY2UgYSB0eXBlIHRvIGJlIGZvcm1hdHRlZCBhcyBhIHN0cmluZywgb3ZlcnJpZGluZyBpdHMgb3duXG5kZWZpbml0aW9uIG9mIGZvcm1hdHRpbmcuICBCeSBjb252ZXJ0aW5nIHRoZSB2YWx1ZSB0byBhIHN0cmluZyBiZWZvcmVcbmNhbGxpbmcgIl9fZm9ybWF0X18oKSIsIHRoZSBub3JtYWwgZm9ybWF0dGluZyBsb2dpYyBpcyBieXBhc3NlZC5cblxuVGhyZWUgY29udmVyc2lvbiBmbGFncyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZDogIlwnIXNcJyIgd2hpY2ggY2FsbHNcbiJzdHIoKSIgb24gdGhlIHZhbHVlLCAiXCchclwnIiB3aGljaCBjYWxscyAicmVwcigpIiBhbmQgIlwnIWFcJyIgd2hpY2hcbmNhbGxzICJhc2NpaSgpIi5cblxuU29tZSBleGFtcGxlczpcblxuICAgIkhhcm9sZFwncyBhIGNsZXZlciB7MCFzfSIgICAgICAgICMgQ2FsbHMgc3RyKCkgb24gdGhlIGFyZ3VtZW50IGZpcnN0XG4gICAiQnJpbmcgb3V0IHRoZSBob2x5IHtuYW1lIXJ9IiAgICAjIENhbGxzIHJlcHIoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcbiAgICJNb3JlIHshYX0iICAgICAgICAgICAgICAgICAgICAgICMgQ2FsbHMgYXNjaWkoKSBvbiB0aGUgYXJndW1lbnQgZmlyc3RcblxuVGhlICpmb3JtYXRfc3BlYyogZmllbGQgY29udGFpbnMgYSBzcGVjaWZpY2F0aW9uIG9mIGhvdyB0aGUgdmFsdWVcbnNob3VsZCBiZSBwcmVzZW50ZWQsIGluY2x1ZGluZyBzdWNoIGRldGFpbHMgYXMgZmllbGQgd2lkdGgsIGFsaWdubWVudCxcbnBhZGRpbmcsIGRlY2ltYWwgcHJlY2lzaW9uIGFuZCBzbyBvbi4gIEVhY2ggdmFsdWUgdHlwZSBjYW4gZGVmaW5lIGl0c1xub3duICJmb3JtYXR0aW5nIG1pbmktbGFuZ3VhZ2UiIG9yIGludGVycHJldGF0aW9uIG9mIHRoZSAqZm9ybWF0X3NwZWMqLlxuXG5Nb3N0IGJ1aWx0LWluIHR5cGVzIHN1cHBvcnQgYSBjb21tb24gZm9ybWF0dGluZyBtaW5pLWxhbmd1YWdlLCB3aGljaFxuaXMgZGVzY3JpYmVkIGluIHRoZSBuZXh0IHNlY3Rpb24uXG5cbkEgKmZvcm1hdF9zcGVjKiBmaWVsZCBjYW4gYWxzbyBpbmNsdWRlIG5lc3RlZCByZXBsYWNlbWVudCBmaWVsZHNcbndpdGhpbiBpdC4gVGhlc2UgbmVzdGVkIHJlcGxhY2VtZW50IGZpZWxkcyBjYW4gY29udGFpbiBvbmx5IGEgZmllbGRcbm5hbWU7IGNvbnZlcnNpb24gZmxhZ3MgYW5kIGZvcm1hdCBzcGVjaWZpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQuICBUaGVcbnJlcGxhY2VtZW50IGZpZWxkcyB3aXRoaW4gdGhlIGZvcm1hdF9zcGVjIGFyZSBzdWJzdGl0dXRlZCBiZWZvcmUgdGhlXG4qZm9ybWF0X3NwZWMqIHN0cmluZyBpcyBpbnRlcnByZXRlZC4gVGhpcyBhbGxvd3MgdGhlIGZvcm1hdHRpbmcgb2YgYVxudmFsdWUgdG8gYmUgZHluYW1pY2FsbHkgc3BlY2lmaWVkLlxuXG5TZWUgdGhlICpGb3JtYXQgZXhhbXBsZXMqIHNlY3Rpb24gZm9yIHNvbWUgZXhhbXBsZXMuXG5cblxuRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iRm9ybWF0IHNwZWNpZmljYXRpb25zIiBhcmUgdXNlZCB3aXRoaW4gcmVwbGFjZW1lbnQgZmllbGRzIGNvbnRhaW5lZFxud2l0aGluIGEgZm9ybWF0IHN0cmluZyB0byBkZWZpbmUgaG93IGluZGl2aWR1YWwgdmFsdWVzIGFyZSBwcmVzZW50ZWRcbihzZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KikuICBUaGV5IGNhbiBhbHNvIGJlIHBhc3NlZCBkaXJlY3RseSB0byB0aGVcbmJ1aWx0LWluICJmb3JtYXQoKSIgZnVuY3Rpb24uICBFYWNoIGZvcm1hdHRhYmxlIHR5cGUgbWF5IGRlZmluZSBob3dcbnRoZSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBpcyB0byBiZSBpbnRlcnByZXRlZC5cblxuTW9zdCBidWlsdC1pbiB0eXBlcyBpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBvcHRpb25zIGZvciBmb3JtYXRcbnNwZWNpZmljYXRpb25zLCBhbHRob3VnaCBzb21lIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnMgYXJlIG9ubHlcbnN1cHBvcnRlZCBieSB0aGUgbnVtZXJpYyB0eXBlcy5cblxuQSBnZW5lcmFsIGNvbnZlbnRpb24gaXMgdGhhdCBhbiBlbXB0eSBmb3JtYXQgc3RyaW5nICgiIiIiKSBwcm9kdWNlc1xudGhlIHNhbWUgcmVzdWx0IGFzIGlmIHlvdSBoYWQgY2FsbGVkICJzdHIoKSIgb24gdGhlIHZhbHVlLiBBIG5vbi1lbXB0eVxuZm9ybWF0IHN0cmluZyB0eXBpY2FsbHkgbW9kaWZpZXMgdGhlIHJlc3VsdC5cblxuVGhlIGdlbmVyYWwgZm9ybSBvZiBhICpzdGFuZGFyZCBmb3JtYXQgc3BlY2lmaWVyKiBpczpcblxuICAgZm9ybWF0X3NwZWMgOjo9IFtbZmlsbF1hbGlnbl1bc2lnbl1bI11bMF1bd2lkdGhdWyxdWy5wcmVjaXNpb25dW3R5cGVdXG4gICBmaWxsICAgICAgICA6Oj0gPGFueSBjaGFyYWN0ZXI+XG4gICBhbGlnbiAgICAgICA6Oj0gIjwiIHwgIj4iIHwgIj0iIHwgIl4iXG4gICBzaWduICAgICAgICA6Oj0gIisiIHwgIi0iIHwgIiAiXG4gICB3aWR0aCAgICAgICA6Oj0gaW50ZWdlclxuICAgcHJlY2lzaW9uICAgOjo9IGludGVnZXJcbiAgIHR5cGUgICAgICAgIDo6PSAiYiIgfCAiYyIgfCAiZCIgfCAiZSIgfCAiRSIgfCAiZiIgfCAiRiIgfCAiZyIgfCAiRyIgfCAibiIgfCAibyIgfCAicyIgfCAieCIgfCAiWCIgfCAiJSJcblxuSWYgYSB2YWxpZCAqYWxpZ24qIHZhbHVlIGlzIHNwZWNpZmllZCwgaXQgY2FuIGJlIHByZWNlZGVkIGJ5IGEgKmZpbGwqXG5jaGFyYWN0ZXIgdGhhdCBjYW4gYmUgYW55IGNoYXJhY3RlciBhbmQgZGVmYXVsdHMgdG8gYSBzcGFjZSBpZlxub21pdHRlZC4gTm90ZSB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2UgInsiIGFuZCAifSIgYXMgKmZpbGwqXG5jaGFyIHdoaWxlIHVzaW5nIHRoZSAic3RyLmZvcm1hdCgpIiBtZXRob2Q7IHRoaXMgbGltaXRhdGlvbiBob3dldmVyXG5kb2VzblwndCBhZmZlY3QgdGhlICJmb3JtYXQoKSIgZnVuY3Rpb24uXG5cblRoZSBtZWFuaW5nIG9mIHRoZSB2YXJpb3VzIGFsaWdubWVudCBvcHRpb25zIGlzIGFzIGZvbGxvd3M6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IE9wdGlvbiAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnPFwnIiAgICAgfCBGb3JjZXMgdGhlIGZpZWxkIHRvIGJlIGxlZnQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgIHxcbiAgIHwgICAgICAgICAgIHwgc3BhY2UgKHRoaXMgaXMgdGhlIGRlZmF1bHQgZm9yIG1vc3Qgb2JqZWN0cykuICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCc+XCciICAgICB8IEZvcmNlcyB0aGUgZmllbGQgdG8gYmUgcmlnaHQtYWxpZ25lZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgfFxuICAgfCAgICAgICAgICAgfCBzcGFjZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBmb3IgbnVtYmVycykuICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJz1cJyIgICAgIHwgRm9yY2VzIHRoZSBwYWRkaW5nIHRvIGJlIHBsYWNlZCBhZnRlciB0aGUgc2lnbiAoaWYgYW55KSAgICB8XG4gICB8ICAgICAgICAgICB8IGJ1dCBiZWZvcmUgdGhlIGRpZ2l0cy4gIFRoaXMgaXMgdXNlZCBmb3IgcHJpbnRpbmcgZmllbGRzICAgfFxuICAgfCAgICAgICAgICAgfCBpbiB0aGUgZm9ybSBcJyswMDAwMDAxMjBcJy4gVGhpcyBhbGlnbm1lbnQgb3B0aW9uIGlzIG9ubHkgICAgfFxuICAgfCAgICAgICAgICAgfCB2YWxpZCBmb3IgbnVtZXJpYyB0eXBlcy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ15cJyIgICAgIHwgRm9yY2VzIHRoZSBmaWVsZCB0byBiZSBjZW50ZXJlZCB3aXRoaW4gdGhlIGF2YWlsYWJsZSAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHNwYWNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuTm90ZSB0aGF0IHVubGVzcyBhIG1pbmltdW0gZmllbGQgd2lkdGggaXMgZGVmaW5lZCwgdGhlIGZpZWxkIHdpZHRoXG53aWxsIGFsd2F5cyBiZSB0aGUgc2FtZSBzaXplIGFzIHRoZSBkYXRhIHRvIGZpbGwgaXQsIHNvIHRoYXQgdGhlXG5hbGlnbm1lbnQgb3B0aW9uIGhhcyBubyBtZWFuaW5nIGluIHRoaXMgY2FzZS5cblxuVGhlICpzaWduKiBvcHRpb24gaXMgb25seSB2YWxpZCBmb3IgbnVtYmVyIHR5cGVzLCBhbmQgY2FuIGJlIG9uZSBvZlxudGhlIGZvbGxvd2luZzpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgT3B0aW9uICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCcrXCciICAgICB8IGluZGljYXRlcyB0aGF0IGEgc2lnbiBzaG91bGQgYmUgdXNlZCBmb3IgYm90aCBwb3NpdGl2ZSBhcyAgfFxuICAgfCAgICAgICAgICAgfCB3ZWxsIGFzIG5lZ2F0aXZlIG51bWJlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJy1cJyIgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBzaWduIHNob3VsZCBiZSB1c2VkIG9ubHkgZm9yIG5lZ2F0aXZlICAgICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMgKHRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IpLiAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgc3BhY2UgICAgIHwgaW5kaWNhdGVzIHRoYXQgYSBsZWFkaW5nIHNwYWNlIHNob3VsZCBiZSB1c2VkIG9uIHBvc2l0aXZlICB8XG4gICB8ICAgICAgICAgICB8IG51bWJlcnMsIGFuZCBhIG1pbnVzIHNpZ24gb24gbmVnYXRpdmUgbnVtYmVycy4gICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlICJcJyNcJyIgb3B0aW9uIGNhdXNlcyB0aGUgImFsdGVybmF0ZSBmb3JtIiB0byBiZSB1c2VkIGZvciB0aGVcbmNvbnZlcnNpb24uICBUaGUgYWx0ZXJuYXRlIGZvcm0gaXMgZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgZGlmZmVyZW50XG50eXBlcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdmFsaWQgZm9yIGludGVnZXIsIGZsb2F0LCBjb21wbGV4IGFuZFxuRGVjaW1hbCB0eXBlcy4gRm9yIGludGVnZXJzLCB3aGVuIGJpbmFyeSwgb2N0YWwsIG9yIGhleGFkZWNpbWFsIG91dHB1dFxuaXMgdXNlZCwgdGhpcyBvcHRpb24gYWRkcyB0aGUgcHJlZml4IHJlc3BlY3RpdmUgIlwnMGJcJyIsICJcJzBvXCciLCBvclxuIlwnMHhcJyIgdG8gdGhlIG91dHB1dCB2YWx1ZS4gRm9yIGZsb2F0cywgY29tcGxleCBhbmQgRGVjaW1hbCB0aGVcbmFsdGVybmF0ZSBmb3JtIGNhdXNlcyB0aGUgcmVzdWx0IG9mIHRoZSBjb252ZXJzaW9uIHRvIGFsd2F5cyBjb250YWluIGFcbmRlY2ltYWwtcG9pbnQgY2hhcmFjdGVyLCBldmVuIGlmIG5vIGRpZ2l0cyBmb2xsb3cgaXQuIE5vcm1hbGx5LCBhXG5kZWNpbWFsLXBvaW50IGNoYXJhY3RlciBhcHBlYXJzIGluIHRoZSByZXN1bHQgb2YgdGhlc2UgY29udmVyc2lvbnNcbm9ubHkgaWYgYSBkaWdpdCBmb2xsb3dzIGl0LiBJbiBhZGRpdGlvbiwgZm9yICJcJ2dcJyIgYW5kICJcJ0dcJyJcbmNvbnZlcnNpb25zLCB0cmFpbGluZyB6ZXJvcyBhcmUgbm90IHJlbW92ZWQgZnJvbSB0aGUgcmVzdWx0LlxuXG5UaGUgIlwnLFwnIiBvcHRpb24gc2lnbmFscyB0aGUgdXNlIG9mIGEgY29tbWEgZm9yIGEgdGhvdXNhbmRzIHNlcGFyYXRvci5cbkZvciBhIGxvY2FsZSBhd2FyZSBzZXBhcmF0b3IsIHVzZSB0aGUgIlwnblwnIiBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlXG5pbnN0ZWFkLlxuXG5DaGFuZ2VkIGluIHZlcnNpb24gMy4xOiBBZGRlZCB0aGUgIlwnLFwnIiBvcHRpb24gKHNlZSBhbHNvICoqUEVQIDM3OCoqKS5cblxuKndpZHRoKiBpcyBhIGRlY2ltYWwgaW50ZWdlciBkZWZpbmluZyB0aGUgbWluaW11bSBmaWVsZCB3aWR0aC4gIElmIG5vdFxuc3BlY2lmaWVkLCB0aGVuIHRoZSBmaWVsZCB3aWR0aCB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIGNvbnRlbnQuXG5cblByZWNlZGluZyB0aGUgKndpZHRoKiBmaWVsZCBieSBhIHplcm8gKCJcJzBcJyIpIGNoYXJhY3RlciBlbmFibGVzIHNpZ24tXG5hd2FyZSB6ZXJvLXBhZGRpbmcgZm9yIG51bWVyaWMgdHlwZXMuICBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYSAqZmlsbCpcbmNoYXJhY3RlciBvZiAiXCcwXCciIHdpdGggYW4gKmFsaWdubWVudCogdHlwZSBvZiAiXCc9XCciLlxuXG5UaGUgKnByZWNpc2lvbiogaXMgYSBkZWNpbWFsIG51bWJlciBpbmRpY2F0aW5nIGhvdyBtYW55IGRpZ2l0cyBzaG91bGRcbmJlIGRpc3BsYXllZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBmb3IgYSBmbG9hdGluZyBwb2ludCB2YWx1ZVxuZm9ybWF0dGVkIHdpdGggIlwnZlwnIiBhbmQgIlwnRlwnIiwgb3IgYmVmb3JlIGFuZCBhZnRlciB0aGUgZGVjaW1hbCBwb2ludFxuZm9yIGEgZmxvYXRpbmcgcG9pbnQgdmFsdWUgZm9ybWF0dGVkIHdpdGggIlwnZ1wnIiBvciAiXCdHXCciLiAgRm9yIG5vbi1cbm51bWJlciB0eXBlcyB0aGUgZmllbGQgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIGZpZWxkIHNpemUgLSBpbiBvdGhlclxud29yZHMsIGhvdyBtYW55IGNoYXJhY3RlcnMgd2lsbCBiZSB1c2VkIGZyb20gdGhlIGZpZWxkIGNvbnRlbnQuIFRoZVxuKnByZWNpc2lvbiogaXMgbm90IGFsbG93ZWQgZm9yIGludGVnZXIgdmFsdWVzLlxuXG5GaW5hbGx5LCB0aGUgKnR5cGUqIGRldGVybWluZXMgaG93IHRoZSBkYXRhIHNob3VsZCBiZSBwcmVzZW50ZWQuXG5cblRoZSBhdmFpbGFibGUgc3RyaW5nIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnc1wnIiAgICAgfCBTdHJpbmcgZm9ybWF0LiBUaGlzIGlzIHRoZSBkZWZhdWx0IHR5cGUgZm9yIHN0cmluZ3MgYW5kICAgIHxcbiAgIHwgICAgICAgICAgIHwgbWF5IGJlIG9taXR0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyAiXCdzXCciLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuVGhlIGF2YWlsYWJsZSBpbnRlZ2VyIHByZXNlbnRhdGlvbiB0eXBlcyBhcmU6XG5cbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFR5cGUgICAgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlwnYlwnIiAgICAgfCBCaW5hcnkgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSAyLiAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2NcJyIgICAgIHwgQ2hhcmFjdGVyLiBDb252ZXJ0cyB0aGUgaW50ZWdlciB0byB0aGUgY29ycmVzcG9uZGluZyAgICAgICB8XG4gICB8ICAgICAgICAgICB8IHVuaWNvZGUgY2hhcmFjdGVyIGJlZm9yZSBwcmludGluZy4gICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnZFwnIiAgICAgfCBEZWNpbWFsIEludGVnZXIuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDEwLiAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ29cJyIgICAgIHwgT2N0YWwgZm9ybWF0LiBPdXRwdXRzIHRoZSBudW1iZXIgaW4gYmFzZSA4LiAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCd4XCciICAgICB8IEhleCBmb3JtYXQuIE91dHB1dHMgdGhlIG51bWJlciBpbiBiYXNlIDE2LCB1c2luZyBsb3dlci0gICAgfFxuICAgfCAgICAgICAgICAgfCBjYXNlIGxldHRlcnMgZm9yIHRoZSBkaWdpdHMgYWJvdmUgOS4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ1hcJyIgICAgIHwgSGV4IGZvcm1hdC4gT3V0cHV0cyB0aGUgbnVtYmVyIGluIGJhc2UgMTYsIHVzaW5nIHVwcGVyLSAgICB8XG4gICB8ICAgICAgICAgICB8IGNhc2UgbGV0dGVycyBmb3IgdGhlIGRpZ2l0cyBhYm92ZSA5LiAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnblwnIiAgICAgfCBOdW1iZXIuIFRoaXMgaXMgdGhlIHNhbWUgYXMgIlwnZFwnIiwgZXhjZXB0IHRoYXQgaXQgdXNlcyB0aGUgfFxuICAgfCAgICAgICAgICAgfCBjdXJyZW50IGxvY2FsZSBzZXR0aW5nIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgbnVtYmVyICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2VwYXJhdG9yIGNoYXJhY3RlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBUaGUgc2FtZSBhcyAiXCdkXCciLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuSW4gYWRkaXRpb24gdG8gdGhlIGFib3ZlIHByZXNlbnRhdGlvbiB0eXBlcywgaW50ZWdlcnMgY2FuIGJlIGZvcm1hdHRlZFxud2l0aCB0aGUgZmxvYXRpbmcgcG9pbnQgcHJlc2VudGF0aW9uIHR5cGVzIGxpc3RlZCBiZWxvdyAoZXhjZXB0ICJcJ25cJyJcbmFuZCBOb25lKS4gV2hlbiBkb2luZyBzbywgImZsb2F0KCkiIGlzIHVzZWQgdG8gY29udmVydCB0aGUgaW50ZWdlciB0b1xuYSBmbG9hdGluZyBwb2ludCBudW1iZXIgYmVmb3JlIGZvcm1hdHRpbmcuXG5cblRoZSBhdmFpbGFibGUgcHJlc2VudGF0aW9uIHR5cGVzIGZvciBmbG9hdGluZyBwb2ludCBhbmQgZGVjaW1hbCB2YWx1ZXNcbmFyZTpcblxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgVHlwZSAgICAgIHwgTWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArPT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xuICAgfCAiXCdlXCciICAgICB8IEV4cG9uZW50IG5vdGF0aW9uLiBQcmludHMgdGhlIG51bWJlciBpbiBzY2llbnRpZmljICAgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBub3RhdGlvbiB1c2luZyB0aGUgbGV0dGVyIFwnZVwnIHRvIGluZGljYXRlIHRoZSBleHBvbmVudC4gICAgfFxuICAgfCAgICAgICAgICAgfCBUaGUgZGVmYXVsdCBwcmVjaXNpb24gaXMgIjYiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ0VcJyIgICAgIHwgRXhwb25lbnQgbm90YXRpb24uIFNhbWUgYXMgIlwnZVwnIiBleGNlcHQgaXQgdXNlcyBhbiB1cHBlciAgIHxcbiAgIHwgICAgICAgICAgIHwgY2FzZSBcJ0VcJyBhcyB0aGUgc2VwYXJhdG9yIGNoYXJhY3Rlci4gICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2ZcJyIgICAgIHwgRml4ZWQgcG9pbnQuIERpc3BsYXlzIHRoZSBudW1iZXIgYXMgYSBmaXhlZC1wb2ludCBudW1iZXIuICB8XG4gICB8ICAgICAgICAgICB8IFRoZSBkZWZhdWx0IHByZWNpc2lvbiBpcyAiNiIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlwnRlwnIiAgICAgfCBGaXhlZCBwb2ludC4gU2FtZSBhcyAiXCdmXCciLCBidXQgY29udmVydHMgIm5hbiIgdG8gIk5BTiIgICAgfFxuICAgfCAgICAgICAgICAgfCBhbmQgImluZiIgdG8gIklORiIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ2dcJyIgICAgIHwgR2VuZXJhbCBmb3JtYXQuICBGb3IgYSBnaXZlbiBwcmVjaXNpb24gInAgPj0gMSIsIHRoaXMgICAgICB8XG4gICB8ICAgICAgICAgICB8IHJvdW5kcyB0aGUgbnVtYmVyIHRvICJwIiBzaWduaWZpY2FudCBkaWdpdHMgYW5kIHRoZW4gICAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXRzIHRoZSByZXN1bHQgaW4gZWl0aGVyIGZpeGVkLXBvaW50IGZvcm1hdCBvciBpbiAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgc2NpZW50aWZpYyBub3RhdGlvbiwgZGVwZW5kaW5nIG9uIGl0cyBtYWduaXR1ZGUuICBUaGUgICAgICB8XG4gICB8ICAgICAgICAgICB8IHByZWNpc2UgcnVsZXMgYXJlIGFzIGZvbGxvd3M6IHN1cHBvc2UgdGhhdCB0aGUgcmVzdWx0ICAgICAgfFxuICAgfCAgICAgICAgICAgfCBmb3JtYXR0ZWQgd2l0aCBwcmVzZW50YXRpb24gdHlwZSAiXCdlXCciIGFuZCBwcmVjaXNpb24gInAtMSIgfFxuICAgfCAgICAgICAgICAgfCB3b3VsZCBoYXZlIGV4cG9uZW50ICJleHAiLiAgVGhlbiBpZiAiLTQgPD0gZXhwIDwgcCIsIHRoZSAgIHxcbiAgIHwgICAgICAgICAgIHwgbnVtYmVyIGlzIGZvcm1hdHRlZCB3aXRoIHByZXNlbnRhdGlvbiB0eXBlICJcJ2ZcJyIgYW5kICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcHJlY2lzaW9uICJwLTEtZXhwIi4gIE90aGVyd2lzZSwgdGhlIG51bWJlciBpcyBmb3JtYXR0ZWQgICB8XG4gICB8ICAgICAgICAgICB8IHdpdGggcHJlc2VudGF0aW9uIHR5cGUgIlwnZVwnIiBhbmQgcHJlY2lzaW9uICJwLTEiLiBJbiBib3RoICB8XG4gICB8ICAgICAgICAgICB8IGNhc2VzIGluc2lnbmlmaWNhbnQgdHJhaWxpbmcgemVyb3MgYXJlIHJlbW92ZWQgZnJvbSB0aGUgICAgfFxuICAgfCAgICAgICAgICAgfCBzaWduaWZpY2FuZCwgYW5kIHRoZSBkZWNpbWFsIHBvaW50IGlzIGFsc28gcmVtb3ZlZCBpZiAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgdGhlcmUgYXJlIG5vIHJlbWFpbmluZyBkaWdpdHMgZm9sbG93aW5nIGl0LiAgUG9zaXRpdmUgYW5kICB8XG4gICB8ICAgICAgICAgICB8IG5lZ2F0aXZlIGluZmluaXR5LCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgemVybywgYW5kIG5hbnMsICAgfFxuICAgfCAgICAgICAgICAgfCBhcmUgZm9ybWF0dGVkIGFzICJpbmYiLCAiLWluZiIsICIwIiwgIi0wIiBhbmQgIm5hbiIgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgcmVzcGVjdGl2ZWx5LCByZWdhcmRsZXNzIG9mIHRoZSBwcmVjaXNpb24uICBBIHByZWNpc2lvbiBvZiB8XG4gICB8ICAgICAgICAgICB8ICIwIiBpcyB0cmVhdGVkIGFzIGVxdWl2YWxlbnQgdG8gYSBwcmVjaXNpb24gb2YgIjEiLiBUaGUgICAgfFxuICAgfCAgICAgICAgICAgfCBkZWZhdWx0IHByZWNpc2lvbiBpcyAiNiIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJ0dcJyIgICAgIHwgR2VuZXJhbCBmb3JtYXQuIFNhbWUgYXMgIlwnZ1wnIiBleGNlcHQgc3dpdGNoZXMgdG8gIlwnRVwnIiBpZiAgfFxuICAgfCAgICAgICAgICAgfCB0aGUgbnVtYmVyIGdldHMgdG9vIGxhcmdlLiBUaGUgcmVwcmVzZW50YXRpb25zIG9mIGluZmluaXR5IHxcbiAgIHwgICAgICAgICAgIHwgYW5kIE5hTiBhcmUgdXBwZXJjYXNlZCwgdG9vLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXCduXCciICAgICB8IE51bWJlci4gVGhpcyBpcyB0aGUgc2FtZSBhcyAiXCdnXCciLCBleGNlcHQgdGhhdCBpdCB1c2VzIHRoZSB8XG4gICB8ICAgICAgICAgICB8IGN1cnJlbnQgbG9jYWxlIHNldHRpbmcgdG8gaW5zZXJ0IHRoZSBhcHByb3ByaWF0ZSBudW1iZXIgICAgfFxuICAgfCAgICAgICAgICAgfCBzZXBhcmF0b3IgY2hhcmFjdGVycy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbiAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcJyVcJyIgICAgIHwgUGVyY2VudGFnZS4gTXVsdGlwbGllcyB0aGUgbnVtYmVyIGJ5IDEwMCBhbmQgZGlzcGxheXMgaW4gICB8XG4gICB8ICAgICAgICAgICB8IGZpeGVkICgiXCdmXCciKSBmb3JtYXQsIGZvbGxvd2VkIGJ5IGEgcGVyY2VudCBzaWduLiAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCBOb25lICAgICAgfCBTaW1pbGFyIHRvICJcJ2dcJyIsIGV4Y2VwdCB0aGF0IGZpeGVkLXBvaW50IG5vdGF0aW9uLCB3aGVuICAgfFxuICAgfCAgICAgICAgICAgfCB1c2VkLCBoYXMgYXQgbGVhc3Qgb25lIGRpZ2l0IHBhc3QgdGhlIGRlY2ltYWwgcG9pbnQuIFRoZSAgIHxcbiAgIHwgICAgICAgICAgIHwgZGVmYXVsdCBwcmVjaXNpb24gaXMgYXMgaGlnaCBhcyBuZWVkZWQgdG8gcmVwcmVzZW50IHRoZSAgICB8XG4gICB8ICAgICAgICAgICB8IHBhcnRpY3VsYXIgdmFsdWUuIFRoZSBvdmVyYWxsIGVmZmVjdCBpcyB0byBtYXRjaCB0aGUgICAgICAgfFxuICAgfCAgICAgICAgICAgfCBvdXRwdXQgb2YgInN0cigpIiBhcyBhbHRlcmVkIGJ5IHRoZSBvdGhlciBmb3JtYXQgICAgICAgICAgIHxcbiAgIHwgICAgICAgICAgIHwgbW9kaWZpZXJzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5cbkZvcm1hdCBleGFtcGxlc1xuPT09PT09PT09PT09PT09XG5cblRoaXMgc2VjdGlvbiBjb250YWlucyBleGFtcGxlcyBvZiB0aGUgbmV3IGZvcm1hdCBzeW50YXggYW5kIGNvbXBhcmlzb25cbndpdGggdGhlIG9sZCAiJSItZm9ybWF0dGluZy5cblxuSW4gbW9zdCBvZiB0aGUgY2FzZXMgdGhlIHN5bnRheCBpcyBzaW1pbGFyIHRvIHRoZSBvbGQgIiUiLWZvcm1hdHRpbmcsXG53aXRoIHRoZSBhZGRpdGlvbiBvZiB0aGUgInt9IiBhbmQgd2l0aCAiOiIgdXNlZCBpbnN0ZWFkIG9mICIlIi4gRm9yXG5leGFtcGxlLCAiXCclMDMuMmZcJyIgY2FuIGJlIHRyYW5zbGF0ZWQgdG8gIlwnezowMy4yZn1cJyIuXG5cblRoZSBuZXcgZm9ybWF0IHN5bnRheCBhbHNvIHN1cHBvcnRzIG5ldyBhbmQgZGlmZmVyZW50IG9wdGlvbnMsIHNob3duXG5pbiB0aGUgZm9sbG93IGV4YW1wbGVzLlxuXG5BY2Nlc3NpbmcgYXJndW1lbnRzIGJ5IHBvc2l0aW9uOlxuXG4gICA+Pj4gXCd7MH0sIHsxfSwgezJ9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2EsIGIsIGNcJ1xuICAgPj4+IFwne30sIHt9LCB7fVwnLmZvcm1hdChcJ2FcJywgXCdiXCcsIFwnY1wnKSAgIyAzLjErIG9ubHlcbiAgIFwnYSwgYiwgY1wnXG4gICA+Pj4gXCd7Mn0sIHsxfSwgezB9XCcuZm9ybWF0KFwnYVwnLCBcJ2JcJywgXCdjXCcpXG4gICBcJ2MsIGIsIGFcJ1xuICAgPj4+IFwnezJ9LCB7MX0sIHswfVwnLmZvcm1hdCgqXCdhYmNcJykgICAgICAjIHVucGFja2luZyBhcmd1bWVudCBzZXF1ZW5jZVxuICAgXCdjLCBiLCBhXCdcbiAgID4+PiBcJ3swfXsxfXswfVwnLmZvcm1hdChcJ2FicmFcJywgXCdjYWRcJykgICAjIGFyZ3VtZW50c1wnIGluZGljZXMgY2FuIGJlIHJlcGVhdGVkXG4gICBcJ2FicmFjYWRhYnJhXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50cyBieSBuYW1lOlxuXG4gICA+Pj4gXCdDb29yZGluYXRlczoge2xhdGl0dWRlfSwge2xvbmdpdHVkZX1cJy5mb3JtYXQobGF0aXR1ZGU9XCczNy4yNE5cJywgbG9uZ2l0dWRlPVwnLTExNS44MVdcJylcbiAgIFwnQ29vcmRpbmF0ZXM6IDM3LjI0TiwgLTExNS44MVdcJ1xuICAgPj4+IGNvb3JkID0ge1wnbGF0aXR1ZGVcJzogXCczNy4yNE5cJywgXCdsb25naXR1ZGVcJzogXCctMTE1LjgxV1wnfVxuICAgPj4+IFwnQ29vcmRpbmF0ZXM6IHtsYXRpdHVkZX0sIHtsb25naXR1ZGV9XCcuZm9ybWF0KCoqY29vcmQpXG4gICBcJ0Nvb3JkaW5hdGVzOiAzNy4yNE4sIC0xMTUuODFXXCdcblxuQWNjZXNzaW5nIGFyZ3VtZW50c1wnIGF0dHJpYnV0ZXM6XG5cbiAgID4+PiBjID0gMy01alxuICAgPj4+IChcJ1RoZSBjb21wbGV4IG51bWJlciB7MH0gaXMgZm9ybWVkIGZyb20gdGhlIHJlYWwgcGFydCB7MC5yZWFsfSBcJ1xuICAgLi4uICBcJ2FuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgezAuaW1hZ30uXCcpLmZvcm1hdChjKVxuICAgXCdUaGUgY29tcGxleCBudW1iZXIgKDMtNWopIGlzIGZvcm1lZCBmcm9tIHRoZSByZWFsIHBhcnQgMy4wIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgLTUuMC5cJ1xuICAgPj4+IGNsYXNzIFBvaW50OlxuICAgLi4uICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6XG4gICAuLi4gICAgICAgICBzZWxmLngsIHNlbGYueSA9IHgsIHlcbiAgIC4uLiAgICAgZGVmIF9fc3RyX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCdQb2ludCh7c2VsZi54fSwge3NlbGYueX0pXCcuZm9ybWF0KHNlbGY9c2VsZilcbiAgIC4uLlxuICAgPj4+IHN0cihQb2ludCg0LCAyKSlcbiAgIFwnUG9pbnQoNCwgMilcJ1xuXG5BY2Nlc3NpbmcgYXJndW1lbnRzXCcgaXRlbXM6XG5cbiAgID4+PiBjb29yZCA9ICgzLCA1KVxuICAgPj4+IFwnWDogezBbMF19OyAgWTogezBbMV19XCcuZm9ybWF0KGNvb3JkKVxuICAgXCdYOiAzOyAgWTogNVwnXG5cblJlcGxhY2luZyAiJXMiIGFuZCAiJXIiOlxuXG4gICA+Pj4gInJlcHIoKSBzaG93cyBxdW90ZXM6IHshcn07IHN0cigpIGRvZXNuXCd0OiB7IXN9Ii5mb3JtYXQoXCd0ZXN0MVwnLCBcJ3Rlc3QyXCcpXG4gICAicmVwcigpIHNob3dzIHF1b3RlczogXCd0ZXN0MVwnOyBzdHIoKSBkb2VzblwndDogdGVzdDIiXG5cbkFsaWduaW5nIHRoZSB0ZXh0IGFuZCBzcGVjaWZ5aW5nIGEgd2lkdGg6XG5cbiAgID4+PiBcJ3s6PDMwfVwnLmZvcm1hdChcJ2xlZnQgYWxpZ25lZFwnKVxuICAgXCdsZWZ0IGFsaWduZWQgICAgICAgICAgICAgICAgICBcJ1xuICAgPj4+IFwnezo+MzB9XCcuZm9ybWF0KFwncmlnaHQgYWxpZ25lZFwnKVxuICAgXCcgICAgICAgICAgICAgICAgIHJpZ2h0IGFsaWduZWRcJ1xuICAgPj4+IFwnezpeMzB9XCcuZm9ybWF0KFwnY2VudGVyZWRcJylcbiAgIFwnICAgICAgICAgICBjZW50ZXJlZCAgICAgICAgICAgXCdcbiAgID4+PiBcJ3s6Kl4zMH1cJy5mb3JtYXQoXCdjZW50ZXJlZFwnKSAgIyB1c2UgXCcqXCcgYXMgYSBmaWxsIGNoYXJcbiAgIFwnKioqKioqKioqKipjZW50ZXJlZCoqKioqKioqKioqXCdcblxuUmVwbGFjaW5nICIlK2YiLCAiJS1mIiwgYW5kICIlIGYiIGFuZCBzcGVjaWZ5aW5nIGEgc2lnbjpcblxuICAgPj4+IFwnezorZn07IHs6K2Z9XCcuZm9ybWF0KDMuMTQsIC0zLjE0KSAgIyBzaG93IGl0IGFsd2F5c1xuICAgXCcrMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG4gICA+Pj4gXCd7OiBmfTsgezogZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgYSBzcGFjZSBmb3IgcG9zaXRpdmUgbnVtYmVyc1xuICAgXCcgMy4xNDAwMDA7IC0zLjE0MDAwMFwnXG4gICA+Pj4gXCd7Oi1mfTsgezotZn1cJy5mb3JtYXQoMy4xNCwgLTMuMTQpICAjIHNob3cgb25seSB0aGUgbWludXMgLS0gc2FtZSBhcyBcJ3s6Zn07IHs6Zn1cJ1xuICAgXCczLjE0MDAwMDsgLTMuMTQwMDAwXCdcblxuUmVwbGFjaW5nICIleCIgYW5kICIlbyIgYW5kIGNvbnZlcnRpbmcgdGhlIHZhbHVlIHRvIGRpZmZlcmVudCBiYXNlczpcblxuICAgPj4+ICMgZm9ybWF0IGFsc28gc3VwcG9ydHMgYmluYXJ5IG51bWJlcnNcbiAgID4+PiAiaW50OiB7MDpkfTsgIGhleDogezA6eH07ICBvY3Q6IHswOm99OyAgYmluOiB7MDpifSIuZm9ybWF0KDQyKVxuICAgXCdpbnQ6IDQyOyAgaGV4OiAyYTsgIG9jdDogNTI7ICBiaW46IDEwMTAxMFwnXG4gICA+Pj4gIyB3aXRoIDB4LCAwbywgb3IgMGIgYXMgcHJlZml4OlxuICAgPj4+ICJpbnQ6IHswOmR9OyAgaGV4OiB7MDojeH07ICBvY3Q6IHswOiNvfTsgIGJpbjogezA6I2J9Ii5mb3JtYXQoNDIpXG4gICBcJ2ludDogNDI7ICBoZXg6IDB4MmE7ICBvY3Q6IDBvNTI7ICBiaW46IDBiMTAxMDEwXCdcblxuVXNpbmcgdGhlIGNvbW1hIGFzIGEgdGhvdXNhbmRzIHNlcGFyYXRvcjpcblxuICAgPj4+IFwnezosfVwnLmZvcm1hdCgxMjM0NTY3ODkwKVxuICAgXCcxLDIzNCw1NjcsODkwXCdcblxuRXhwcmVzc2luZyBhIHBlcmNlbnRhZ2U6XG5cbiAgID4+PiBwb2ludHMgPSAxOVxuICAgPj4+IHRvdGFsID0gMjJcbiAgID4+PiBcJ0NvcnJlY3QgYW5zd2VyczogezouMiV9XCcuZm9ybWF0KHBvaW50cy90b3RhbClcbiAgIFwnQ29ycmVjdCBhbnN3ZXJzOiA4Ni4zNiVcJ1xuXG5Vc2luZyB0eXBlLXNwZWNpZmljIGZvcm1hdHRpbmc6XG5cbiAgID4+PiBpbXBvcnQgZGF0ZXRpbWVcbiAgID4+PiBkID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAxMCwgNywgNCwgMTIsIDE1LCA1OClcbiAgID4+PiBcJ3s6JVktJW0tJWQgJUg6JU06JVN9XCcuZm9ybWF0KGQpXG4gICBcJzIwMTAtMDctMDQgMTI6MTU6NThcJ1xuXG5OZXN0aW5nIGFyZ3VtZW50cyBhbmQgbW9yZSBjb21wbGV4IGV4YW1wbGVzOlxuXG4gICA+Pj4gZm9yIGFsaWduLCB0ZXh0IGluIHppcChcJzxePlwnLCBbXCdsZWZ0XCcsIFwnY2VudGVyXCcsIFwncmlnaHRcJ10pOlxuICAgLi4uICAgICBcJ3swOntmaWxsfXthbGlnbn0xNn1cJy5mb3JtYXQodGV4dCwgZmlsbD1hbGlnbiwgYWxpZ249YWxpZ24pXG4gICAuLi5cbiAgIFwnbGVmdDw8PDw8PDw8PDw8PFwnXG4gICBcJ15eXl5eY2VudGVyXl5eXl5cJ1xuICAgXCc+Pj4+Pj4+Pj4+PnJpZ2h0XCdcbiAgID4+PlxuICAgPj4+IG9jdGV0cyA9IFsxOTIsIDE2OCwgMCwgMV1cbiAgID4+PiBcJ3s6MDJYfXs6MDJYfXs6MDJYfXs6MDJYfVwnLmZvcm1hdCgqb2N0ZXRzKVxuICAgXCdDMEE4MDAwMVwnXG4gICA+Pj4gaW50KF8sIDE2KVxuICAgMzIzMjIzNTUyMVxuICAgPj4+XG4gICA+Pj4gd2lkdGggPSA1XG4gICA+Pj4gZm9yIG51bSBpbiByYW5nZSg1LDEyKTogI2RvY3Rlc3Q6ICtOT1JNQUxJWkVfV0hJVEVTUEFDRVxuICAgLi4uICAgICBmb3IgYmFzZSBpbiBcJ2RYb2JcJzpcbiAgIC4uLiAgICAgICAgIHByaW50KFwnezA6e3dpZHRofXtiYXNlfX1cJy5mb3JtYXQobnVtLCBiYXNlPWJhc2UsIHdpZHRoPXdpZHRoKSwgZW5kPVwnIFwnKVxuICAgLi4uICAgICBwcmludCgpXG4gICAuLi5cbiAgICAgICA1ICAgICA1ICAgICA1ICAgMTAxXG4gICAgICAgNiAgICAgNiAgICAgNiAgIDExMFxuICAgICAgIDcgICAgIDcgICAgIDcgICAxMTFcbiAgICAgICA4ICAgICA4ICAgIDEwICAxMDAwXG4gICAgICAgOSAgICAgOSAgICAxMSAgMTAwMVxuICAgICAgMTAgICAgIEEgICAgMTIgIDEwMTBcbiAgICAgIDExICAgICBCICAgIDEzICAxMDExXG4nLAorICdmdW5jdGlvbic6IHUnXG5GdW5jdGlvbiBkZWZpbml0aW9uc1xuKioqKioqKioqKioqKioqKioqKipcblxuQSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IChzZWVcbnNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopOlxuXG4gICBmdW5jZGVmICAgICAgICA6Oj0gW2RlY29yYXRvcnNdICJkZWYiIGZ1bmNuYW1lICIoIiBbcGFyYW1ldGVyX2xpc3RdICIpIiBbIi0+IiBleHByZXNzaW9uXSAiOiIgc3VpdGVcbiAgIGRlY29yYXRvcnMgICAgIDo6PSBkZWNvcmF0b3IrXG4gICBkZWNvcmF0b3IgICAgICA6Oj0gIkAiIGRvdHRlZF9uYW1lIFsiKCIgW3BhcmFtZXRlcl9saXN0IFsiLCJdXSAiKSJdIE5FV0xJTkVcbiAgIGRvdHRlZF9uYW1lICAgIDo6PSBpZGVudGlmaWVyICgiLiIgaWRlbnRpZmllcikqXG4gICBwYXJhbWV0ZXJfbGlzdCA6Oj0gKGRlZnBhcmFtZXRlciAiLCIpKlxuICAgICAgICAgICAgICAgICAgICAgIHwgIioiIFtwYXJhbWV0ZXJdICgiLCIgZGVmcGFyYW1ldGVyKSogWyIsIiAiKioiIHBhcmFtZXRlcl1cbiAgICAgICAgICAgICAgICAgICAgICB8ICIqKiIgcGFyYW1ldGVyXG4gICAgICAgICAgICAgICAgICAgICAgfCBkZWZwYXJhbWV0ZXIgWyIsIl0gKVxuICAgcGFyYW1ldGVyICAgICAgOjo9IGlkZW50aWZpZXIgWyI6IiBleHByZXNzaW9uXVxuICAgZGVmcGFyYW1ldGVyICAgOjo9IHBhcmFtZXRlciBbIj0iIGV4cHJlc3Npb25dXG4gICBmdW5jbmFtZSAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgYW4gZXhlY3V0YWJsZSBzdGF0ZW1lbnQuICBJdHMgZXhlY3V0aW9uIGJpbmRzXG50aGUgZnVuY3Rpb24gbmFtZSBpbiB0aGUgY3VycmVudCBsb2NhbCBuYW1lc3BhY2UgdG8gYSBmdW5jdGlvbiBvYmplY3RcbihhIHdyYXBwZXIgYXJvdW5kIHRoZSBleGVjdXRhYmxlIGNvZGUgZm9yIHRoZSBmdW5jdGlvbikuICBUaGlzXG5mdW5jdGlvbiBvYmplY3QgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZ2xvYmFsIG5hbWVzcGFjZVxuYXMgdGhlIGdsb2JhbCBuYW1lc3BhY2UgdG8gYmUgdXNlZCB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuXG5cblRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGRvZXMgbm90IGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIGJvZHk7IHRoaXMgZ2V0c1xuZXhlY3V0ZWQgb25seSB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuIFszXVxuXG5BIGZ1bmN0aW9uIGRlZmluaXRpb24gbWF5IGJlIHdyYXBwZWQgYnkgb25lIG9yIG1vcmUgKmRlY29yYXRvcipcbmV4cHJlc3Npb25zLiBEZWNvcmF0b3IgZXhwcmVzc2lvbnMgYXJlIGV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBpc1xuZGVmaW5lZCwgaW4gdGhlIHNjb3BlIHRoYXQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIGRlZmluaXRpb24uICBUaGVcbnJlc3VsdCBtdXN0IGJlIGEgY2FsbGFibGUsIHdoaWNoIGlzIGludm9rZWQgd2l0aCB0aGUgZnVuY3Rpb24gb2JqZWN0XG5hcyB0aGUgb25seSBhcmd1bWVudC4gVGhlIHJldHVybmVkIHZhbHVlIGlzIGJvdW5kIHRvIHRoZSBmdW5jdGlvbiBuYW1lXG5pbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBNdWx0aXBsZSBkZWNvcmF0b3JzIGFyZSBhcHBsaWVkIGluXG5uZXN0ZWQgZmFzaGlvbi4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZVxuXG4gICBAZjEoYXJnKVxuICAgQGYyXG4gICBkZWYgZnVuYygpOiBwYXNzXG5cbmlzIGVxdWl2YWxlbnQgdG9cblxuICAgZGVmIGZ1bmMoKTogcGFzc1xuICAgZnVuYyA9IGYxKGFyZykoZjIoZnVuYykpXG5cbldoZW4gb25lIG9yIG1vcmUgKnBhcmFtZXRlcnMqIGhhdmUgdGhlIGZvcm0gKnBhcmFtZXRlciogIj0iXG4qZXhwcmVzc2lvbiosIHRoZSBmdW5jdGlvbiBpcyBzYWlkIHRvIGhhdmUgImRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcy4iXG5Gb3IgYSBwYXJhbWV0ZXIgd2l0aCBhIGRlZmF1bHQgdmFsdWUsIHRoZSBjb3JyZXNwb25kaW5nICphcmd1bWVudCogbWF5XG5iZSBvbWl0dGVkIGZyb20gYSBjYWxsLCBpbiB3aGljaCBjYXNlIHRoZSBwYXJhbWV0ZXJcJ3MgZGVmYXVsdCB2YWx1ZSBpc1xuc3Vic3RpdHV0ZWQuICBJZiBhIHBhcmFtZXRlciBoYXMgYSBkZWZhdWx0IHZhbHVlLCBhbGwgZm9sbG93aW5nXG5wYXJhbWV0ZXJzIHVwIHVudGlsIHRoZSAiIioiIiBtdXN0IGFsc28gaGF2ZSBhIGRlZmF1bHQgdmFsdWUgLS0tIHRoaXNcbmlzIGEgc3ludGFjdGljIHJlc3RyaWN0aW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBieSB0aGUgZ3JhbW1hci5cblxuKipEZWZhdWx0IHBhcmFtZXRlciB2YWx1ZXMgYXJlIGV2YWx1YXRlZCBmcm9tIGxlZnQgdG8gcmlnaHQgd2hlbiB0aGVcbmZ1bmN0aW9uIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQuKiogVGhpcyBtZWFucyB0aGF0IHRoZSBleHByZXNzaW9uIGlzXG5ldmFsdWF0ZWQgb25jZSwgd2hlbiB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZCwgYW5kIHRoYXQgdGhlIHNhbWUgInByZS1cbmNvbXB1dGVkIiB2YWx1ZSBpcyB1c2VkIGZvciBlYWNoIGNhbGwuICBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50XG50byB1bmRlcnN0YW5kIHdoZW4gYSBkZWZhdWx0IHBhcmFtZXRlciBpcyBhIG11dGFibGUgb2JqZWN0LCBzdWNoIGFzIGFcbmxpc3Qgb3IgYSBkaWN0aW9uYXJ5OiBpZiB0aGUgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIG9iamVjdCAoZS5nLiBieVxuYXBwZW5kaW5nIGFuIGl0ZW0gdG8gYSBsaXN0KSwgdGhlIGRlZmF1bHQgdmFsdWUgaXMgaW4gZWZmZWN0IG1vZGlmaWVkLlxuVGhpcyBpcyBnZW5lcmFsbHkgbm90IHdoYXQgd2FzIGludGVuZGVkLiAgQSB3YXkgYXJvdW5kIHRoaXMgaXMgdG8gdXNlXG4iTm9uZSIgYXMgdGhlIGRlZmF1bHQsIGFuZCBleHBsaWNpdGx5IHRlc3QgZm9yIGl0IGluIHRoZSBib2R5IG9mIHRoZVxuZnVuY3Rpb24sIGUuZy46XG5cbiAgIGRlZiB3aGF0c19vbl90aGVfdGVsbHkocGVuZ3Vpbj1Ob25lKTpcbiAgICAgICBpZiBwZW5ndWluIGlzIE5vbmU6XG4gICAgICAgICAgIHBlbmd1aW4gPSBbXVxuICAgICAgIHBlbmd1aW4uYXBwZW5kKCJwcm9wZXJ0eSBvZiB0aGUgem9vIilcbiAgICAgICByZXR1cm4gcGVuZ3VpblxuXG5GdW5jdGlvbiBjYWxsIHNlbWFudGljcyBhcmUgZGVzY3JpYmVkIGluIG1vcmUgZGV0YWlsIGluIHNlY3Rpb25cbipDYWxscyouIEEgZnVuY3Rpb24gY2FsbCBhbHdheXMgYXNzaWducyB2YWx1ZXMgdG8gYWxsIHBhcmFtZXRlcnNcbm1lbnRpb25lZCBpbiB0aGUgcGFyYW1ldGVyIGxpc3QsIGVpdGhlciBmcm9tIHBvc2l0aW9uIGFyZ3VtZW50cywgZnJvbVxua2V5d29yZCBhcmd1bWVudHMsIG9yIGZyb20gZGVmYXVsdCB2YWx1ZXMuICBJZiB0aGUgZm9ybVxuIiIqaWRlbnRpZmllciIiIGlzIHByZXNlbnQsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgdHVwbGUgcmVjZWl2aW5nIGFueVxuZXhjZXNzIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgZGVmYXVsdGluZyB0byB0aGUgZW1wdHkgdHVwbGUuICBJZiB0aGVcbmZvcm0gIiIqKmlkZW50aWZpZXIiIiBpcyBwcmVzZW50LCBpdCBpcyBpbml0aWFsaXplZCB0byBhIG5ld1xuZGljdGlvbmFyeSByZWNlaXZpbmcgYW55IGV4Y2VzcyBrZXl3b3JkIGFyZ3VtZW50cywgZGVmYXVsdGluZyB0byBhIG5ld1xuZW1wdHkgZGljdGlvbmFyeS4gUGFyYW1ldGVycyBhZnRlciAiIioiIiBvciAiIippZGVudGlmaWVyIiIgYXJlXG5rZXl3b3JkLW9ubHkgcGFyYW1ldGVycyBhbmQgbWF5IG9ubHkgYmUgcGFzc2VkIHVzZWQga2V5d29yZCBhcmd1bWVudHMuXG5cblBhcmFtZXRlcnMgbWF5IGhhdmUgYW5ub3RhdGlvbnMgb2YgdGhlIGZvcm0gIiI6IGV4cHJlc3Npb24iIiBmb2xsb3dpbmdcbnRoZSBwYXJhbWV0ZXIgbmFtZS4gIEFueSBwYXJhbWV0ZXIgbWF5IGhhdmUgYW4gYW5ub3RhdGlvbiBldmVuIHRob3NlXG5vZiB0aGUgZm9ybSAiKmlkZW50aWZpZXIiIG9yICIqKmlkZW50aWZpZXIiLiAgRnVuY3Rpb25zIG1heSBoYXZlXG4icmV0dXJuIiBhbm5vdGF0aW9uIG9mIHRoZSBmb3JtICIiLT4gZXhwcmVzc2lvbiIiIGFmdGVyIHRoZSBwYXJhbWV0ZXJcbmxpc3QuICBUaGVzZSBhbm5vdGF0aW9ucyBjYW4gYmUgYW55IHZhbGlkIFB5dGhvbiBleHByZXNzaW9uIGFuZCBhcmVcbmV2YWx1YXRlZCB3aGVuIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIGlzIGV4ZWN1dGVkLiAgQW5ub3RhdGlvbnMgbWF5XG5iZSBldmFsdWF0ZWQgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGV5IGFwcGVhciBpbiB0aGUgc291cmNlIGNvZGUuXG5UaGUgcHJlc2VuY2Ugb2YgYW5ub3RhdGlvbnMgZG9lcyBub3QgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgYVxuZnVuY3Rpb24uICBUaGUgYW5ub3RhdGlvbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSBhcyB2YWx1ZXMgb2YgYVxuZGljdGlvbmFyeSBrZXllZCBieSB0aGUgcGFyYW1ldGVyc1wnIG5hbWVzIGluIHRoZSAiX19hbm5vdGF0aW9uc19fIlxuYXR0cmlidXRlIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXG5cbkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIGFub255bW91cyBmdW5jdGlvbnMgKGZ1bmN0aW9ucyBub3QgYm91bmRcbnRvIGEgbmFtZSksIGZvciBpbW1lZGlhdGUgdXNlIGluIGV4cHJlc3Npb25zLiAgVGhpcyB1c2VzIGxhbWJkYVxuZXhwcmVzc2lvbnMsIGRlc2NyaWJlZCBpbiBzZWN0aW9uICpMYW1iZGFzKi4gIE5vdGUgdGhhdCB0aGUgbGFtYmRhXG5leHByZXNzaW9uIGlzIG1lcmVseSBhIHNob3J0aGFuZCBmb3IgYSBzaW1wbGlmaWVkIGZ1bmN0aW9uIGRlZmluaXRpb247XG5hIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSAiImRlZiIiIHN0YXRlbWVudCBjYW4gYmUgcGFzc2VkIGFyb3VuZCBvclxuYXNzaWduZWQgdG8gYW5vdGhlciBuYW1lIGp1c3QgbGlrZSBhIGZ1bmN0aW9uIGRlZmluZWQgYnkgYSBsYW1iZGFcbmV4cHJlc3Npb24uICBUaGUgIiJkZWYiIiBmb3JtIGlzIGFjdHVhbGx5IG1vcmUgcG93ZXJmdWwgc2luY2UgaXRcbmFsbG93cyB0aGUgZXhlY3V0aW9uIG9mIG11bHRpcGxlIHN0YXRlbWVudHMgYW5kIGFubm90YXRpb25zLlxuXG4qKlByb2dyYW1tZXJcJ3Mgbm90ZToqKiBGdW5jdGlvbnMgYXJlIGZpcnN0LWNsYXNzIG9iamVjdHMuICBBICIiZGVmIiJcbnN0YXRlbWVudCBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZXMgYSBsb2NhbFxuZnVuY3Rpb24gdGhhdCBjYW4gYmUgcmV0dXJuZWQgb3IgcGFzc2VkIGFyb3VuZC4gIEZyZWUgdmFyaWFibGVzIHVzZWRcbmluIHRoZSBuZXN0ZWQgZnVuY3Rpb24gY2FuIGFjY2VzcyB0aGUgbG9jYWwgdmFyaWFibGVzIG9mIHRoZSBmdW5jdGlvblxuY29udGFpbmluZyB0aGUgZGVmLiAgU2VlIHNlY3Rpb24gKk5hbWluZyBhbmQgYmluZGluZyogZm9yIGRldGFpbHMuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTA3KiogLSBGdW5jdGlvbiBBbm5vdGF0aW9uc1xuXG4gICAgIFRoZSBvcmlnaW5hbCBzcGVjaWZpY2F0aW9uIGZvciBmdW5jdGlvbiBhbm5vdGF0aW9ucy5cbicsCisgJ2dsb2JhbCc6IHUnXG5UaGUgImdsb2JhbCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIGdsb2JhbF9zdG10IDo6PSAiZ2xvYmFsIiBpZGVudGlmaWVyICgiLCIgaWRlbnRpZmllcikqXG5cblRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgaXMgYSBkZWNsYXJhdGlvbiB3aGljaCBob2xkcyBmb3IgdGhlIGVudGlyZVxuY3VycmVudCBjb2RlIGJsb2NrLiAgSXQgbWVhbnMgdGhhdCB0aGUgbGlzdGVkIGlkZW50aWZpZXJzIGFyZSB0byBiZVxuaW50ZXJwcmV0ZWQgYXMgZ2xvYmFscy4gIEl0IHdvdWxkIGJlIGltcG9zc2libGUgdG8gYXNzaWduIHRvIGEgZ2xvYmFsXG52YXJpYWJsZSB3aXRob3V0ICJnbG9iYWwiLCBhbHRob3VnaCBmcmVlIHZhcmlhYmxlcyBtYXkgcmVmZXIgdG9cbmdsb2JhbHMgd2l0aG91dCBiZWluZyBkZWNsYXJlZCBnbG9iYWwuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJnbG9iYWwiIHN0YXRlbWVudCBtdXN0IG5vdCBiZSB1c2VkIGluIHRoZSBzYW1lIGNvZGVcbmJsb2NrIHRleHR1YWxseSBwcmVjZWRpbmcgdGhhdCAiZ2xvYmFsIiBzdGF0ZW1lbnQuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJnbG9iYWwiIHN0YXRlbWVudCBtdXN0IG5vdCBiZSBkZWZpbmVkIGFzIGZvcm1hbFxucGFyYW1ldGVycyBvciBpbiBhICJmb3IiIGxvb3AgY29udHJvbCB0YXJnZXQsICJjbGFzcyIgZGVmaW5pdGlvbixcbmZ1bmN0aW9uIGRlZmluaXRpb24sIG9yICJpbXBvcnQiIHN0YXRlbWVudC5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdFxuZW5mb3JjZSB0aGUgdHdvIHJlc3RyaWN0aW9ucywgYnV0IHByb2dyYW1zIHNob3VsZCBub3QgYWJ1c2UgdGhpc1xuZnJlZWRvbSwgYXMgZnV0dXJlIGltcGxlbWVudGF0aW9ucyBtYXkgZW5mb3JjZSB0aGVtIG9yIHNpbGVudGx5IGNoYW5nZVxudGhlIG1lYW5pbmcgb2YgdGhlIHByb2dyYW0uXG5cbioqUHJvZ3JhbW1lclwncyBub3RlOioqIHRoZSAiZ2xvYmFsIiBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgcGFyc2VyLiAgSXRcbmFwcGxpZXMgb25seSB0byBjb2RlIHBhcnNlZCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZSAiZ2xvYmFsIlxuc3RhdGVtZW50LiBJbiBwYXJ0aWN1bGFyLCBhICJnbG9iYWwiIHN0YXRlbWVudCBjb250YWluZWQgaW4gYSBzdHJpbmdcbm9yIGNvZGUgb2JqZWN0IHN1cHBsaWVkIHRvIHRoZSBidWlsdC1pbiAiZXhlYygpIiBmdW5jdGlvbiBkb2VzIG5vdFxuYWZmZWN0IHRoZSBjb2RlIGJsb2NrICpjb250YWluaW5nKiB0aGUgZnVuY3Rpb24gY2FsbCwgYW5kIGNvZGVcbmNvbnRhaW5lZCBpbiBzdWNoIGEgc3RyaW5nIGlzIHVuYWZmZWN0ZWQgYnkgImdsb2JhbCIgc3RhdGVtZW50cyBpbiB0aGVcbmNvZGUgY29udGFpbmluZyB0aGUgZnVuY3Rpb24gY2FsbC4gIFRoZSBzYW1lIGFwcGxpZXMgdG8gdGhlICJldmFsKCkiXG5hbmQgImNvbXBpbGUoKSIgZnVuY3Rpb25zLlxuJywKKyAnaWQtY2xhc3Nlcyc6IHUnXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbiJfKiJcbiAgIE5vdCBpbXBvcnRlZCBieSAiZnJvbSBtb2R1bGUgaW1wb3J0ICoiLiAgVGhlIHNwZWNpYWwgaWRlbnRpZmllciAiXyJcbiAgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgdGhlXG4gICBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgImJ1aWx0aW5zIiBtb2R1bGUuICBXaGVuIG5vdFxuICAgaW4gaW50ZXJhY3RpdmUgbW9kZSwgIl8iIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYW5kIGlzIG5vdCBkZWZpbmVkLlxuICAgU2VlIHNlY3Rpb24gKlRoZSBpbXBvcnQgc3RhdGVtZW50Ki5cblxuICAgTm90ZTogVGhlIG5hbWUgIl8iIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICAiZ2V0dGV4dCIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuIl9fKl9fIlxuICAgU3lzdGVtLWRlZmluZWQgbmFtZXMuIFRoZXNlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnByZXRlclxuICAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KS4gIEN1cnJlbnRcbiAgIHN5c3RlbSBuYW1lcyBhcmUgZGlzY3Vzc2VkIGluIHRoZSAqU3BlY2lhbCBtZXRob2QgbmFtZXMqIHNlY3Rpb25cbiAgIGFuZCBlbHNld2hlcmUuICBNb3JlIHdpbGwgbGlrZWx5IGJlIGRlZmluZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mXG4gICBQeXRob24uICAqQW55KiB1c2Ugb2YgIl9fKl9fIiBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lcyBub3RcbiAgIGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlIHdpdGhvdXRcbiAgIHdhcm5pbmcuXG5cbiJfXyoiXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKKyAnaWRlbnRpZmllcnMnOiB1J1xuSWRlbnRpZmllcnMgYW5kIGtleXdvcmRzXG4qKioqKioqKioqKioqKioqKioqKioqKipcblxuSWRlbnRpZmllcnMgKGFsc28gcmVmZXJyZWQgdG8gYXMgKm5hbWVzKikgYXJlIGRlc2NyaWJlZCBieSB0aGVcbmZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zLlxuXG5UaGUgc3ludGF4IG9mIGlkZW50aWZpZXJzIGluIFB5dGhvbiBpcyBiYXNlZCBvbiB0aGUgVW5pY29kZSBzdGFuZGFyZFxuYW5uZXggVUFYLTMxLCB3aXRoIGVsYWJvcmF0aW9uIGFuZCBjaGFuZ2VzIGFzIGRlZmluZWQgYmVsb3c7IHNlZSBhbHNvXG4qKlBFUCAzMTMxKiogZm9yIGZ1cnRoZXIgZGV0YWlscy5cblxuV2l0aGluIHRoZSBBU0NJSSByYW5nZSAoVSswMDAxLi5VKzAwN0YpLCB0aGUgdmFsaWQgY2hhcmFjdGVycyBmb3JcbmlkZW50aWZpZXJzIGFyZSB0aGUgc2FtZSBhcyBpbiBQeXRob24gMi54OiB0aGUgdXBwZXJjYXNlIGFuZCBsb3dlcmNhc2VcbmxldHRlcnMgIkEiIHRocm91Z2ggIloiLCB0aGUgdW5kZXJzY29yZSAiXyIgYW5kLCBleGNlcHQgZm9yIHRoZSBmaXJzdFxuY2hhcmFjdGVyLCB0aGUgZGlnaXRzICIwIiB0aHJvdWdoICI5Ii5cblxuUHl0aG9uIDMuMCBpbnRyb2R1Y2VzIGFkZGl0aW9uYWwgY2hhcmFjdGVycyBmcm9tIG91dHNpZGUgdGhlIEFTQ0lJXG5yYW5nZSAoc2VlICoqUEVQIDMxMzEqKikuICBGb3IgdGhlc2UgY2hhcmFjdGVycywgdGhlIGNsYXNzaWZpY2F0aW9uXG51c2VzIHRoZSB2ZXJzaW9uIG9mIHRoZSBVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSBhcyBpbmNsdWRlZCBpbiB0aGVcbiJ1bmljb2RlZGF0YSIgbW9kdWxlLlxuXG5JZGVudGlmaWVycyBhcmUgdW5saW1pdGVkIGluIGxlbmd0aC4gIENhc2UgaXMgc2lnbmlmaWNhbnQuXG5cbiAgIGlkZW50aWZpZXIgICA6Oj0geGlkX3N0YXJ0IHhpZF9jb250aW51ZSpcbiAgIGlkX3N0YXJ0ICAgICA6Oj0gPGFsbCBjaGFyYWN0ZXJzIGluIGdlbmVyYWwgY2F0ZWdvcmllcyBMdSwgTGwsIEx0LCBMbSwgTG8sIE5sLCB0aGUgdW5kZXJzY29yZSwgYW5kIGNoYXJhY3RlcnMgd2l0aCB0aGUgT3RoZXJfSURfU3RhcnQgcHJvcGVydHk+XG4gICBpZF9jb250aW51ZSAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBpZF9zdGFydCwgcGx1cyBjaGFyYWN0ZXJzIGluIHRoZSBjYXRlZ29yaWVzIE1uLCBNYywgTmQsIFBjIGFuZCBvdGhlcnMgd2l0aCB0aGUgT3RoZXJfSURfQ29udGludWUgcHJvcGVydHk+XG4gICB4aWRfc3RhcnQgICAgOjo9IDxhbGwgY2hhcmFjdGVycyBpbiBpZF9zdGFydCB3aG9zZSBORktDIG5vcm1hbGl6YXRpb24gaXMgaW4gImlkX3N0YXJ0IHhpZF9jb250aW51ZSoiPlxuICAgeGlkX2NvbnRpbnVlIDo6PSA8YWxsIGNoYXJhY3RlcnMgaW4gaWRfY29udGludWUgd2hvc2UgTkZLQyBub3JtYWxpemF0aW9uIGlzIGluICJpZF9jb250aW51ZSoiPlxuXG5UaGUgVW5pY29kZSBjYXRlZ29yeSBjb2RlcyBtZW50aW9uZWQgYWJvdmUgc3RhbmQgZm9yOlxuXG4qICpMdSogLSB1cHBlcmNhc2UgbGV0dGVyc1xuXG4qICpMbCogLSBsb3dlcmNhc2UgbGV0dGVyc1xuXG4qICpMdCogLSB0aXRsZWNhc2UgbGV0dGVyc1xuXG4qICpMbSogLSBtb2RpZmllciBsZXR0ZXJzXG5cbiogKkxvKiAtIG90aGVyIGxldHRlcnNcblxuKiAqTmwqIC0gbGV0dGVyIG51bWJlcnNcblxuKiAqTW4qIC0gbm9uc3BhY2luZyBtYXJrc1xuXG4qICpNYyogLSBzcGFjaW5nIGNvbWJpbmluZyBtYXJrc1xuXG4qICpOZCogLSBkZWNpbWFsIG51bWJlcnNcblxuKiAqUGMqIC0gY29ubmVjdG9yIHB1bmN0dWF0aW9uc1xuXG4qICpPdGhlcl9JRF9TdGFydCogLSBleHBsaWNpdCBsaXN0IG9mIGNoYXJhY3RlcnMgaW4gUHJvcExpc3QudHh0IHRvXG4gIHN1cHBvcnQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuKiAqT3RoZXJfSURfQ29udGludWUqIC0gbGlrZXdpc2VcblxuQWxsIGlkZW50aWZpZXJzIGFyZSBjb252ZXJ0ZWQgaW50byB0aGUgbm9ybWFsIGZvcm0gTkZLQyB3aGlsZSBwYXJzaW5nO1xuY29tcGFyaXNvbiBvZiBpZGVudGlmaWVycyBpcyBiYXNlZCBvbiBORktDLlxuXG5BIG5vbi1ub3JtYXRpdmUgSFRNTCBmaWxlIGxpc3RpbmcgYWxsIHZhbGlkIGlkZW50aWZpZXIgY2hhcmFjdGVycyBmb3JcblVuaWNvZGUgNC4xIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmRjbC5ocGkudW5pLVxucG90c2RhbS5kZS9ob21lL2xvZXdpcy90YWJsZS0zMTMxLmh0bWwuXG5cblxuS2V5d29yZHNcbj09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgaWRlbnRpZmllcnMgYXJlIHVzZWQgYXMgcmVzZXJ2ZWQgd29yZHMsIG9yICprZXl3b3Jkcyogb2ZcbnRoZSBsYW5ndWFnZSwgYW5kIGNhbm5vdCBiZSB1c2VkIGFzIG9yZGluYXJ5IGlkZW50aWZpZXJzLiAgVGhleSBtdXN0XG5iZSBzcGVsbGVkIGV4YWN0bHkgYXMgd3JpdHRlbiBoZXJlOlxuXG4gICBGYWxzZSAgICAgIGNsYXNzICAgICAgZmluYWxseSAgICBpcyAgICAgICAgIHJldHVyblxuICAgTm9uZSAgICAgICBjb250aW51ZSAgIGZvciAgICAgICAgbGFtYmRhICAgICB0cnlcbiAgIFRydWUgICAgICAgZGVmICAgICAgICBmcm9tICAgICAgIG5vbmxvY2FsICAgd2hpbGVcbiAgIGFuZCAgICAgICAgZGVsICAgICAgICBnbG9iYWwgICAgIG5vdCAgICAgICAgd2l0aFxuICAgYXMgICAgICAgICBlbGlmICAgICAgIGlmICAgICAgICAgb3IgICAgICAgICB5aWVsZFxuICAgYXNzZXJ0ICAgICBlbHNlICAgICAgIGltcG9ydCAgICAgcGFzc1xuICAgYnJlYWsgICAgICBleGNlcHQgICAgIGluICAgICAgICAgcmFpc2VcblxuXG5SZXNlcnZlZCBjbGFzc2VzIG9mIGlkZW50aWZpZXJzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbkNlcnRhaW4gY2xhc3NlcyBvZiBpZGVudGlmaWVycyAoYmVzaWRlcyBrZXl3b3JkcykgaGF2ZSBzcGVjaWFsXG5tZWFuaW5ncy4gIFRoZXNlIGNsYXNzZXMgYXJlIGlkZW50aWZpZWQgYnkgdGhlIHBhdHRlcm5zIG9mIGxlYWRpbmcgYW5kXG50cmFpbGluZyB1bmRlcnNjb3JlIGNoYXJhY3RlcnM6XG5cbiJfKiJcbiAgIE5vdCBpbXBvcnRlZCBieSAiZnJvbSBtb2R1bGUgaW1wb3J0ICoiLiAgVGhlIHNwZWNpYWwgaWRlbnRpZmllciAiXyJcbiAgIGlzIHVzZWQgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIHRvIHN0b3JlIHRoZSByZXN1bHQgb2YgdGhlXG4gICBsYXN0IGV2YWx1YXRpb247IGl0IGlzIHN0b3JlZCBpbiB0aGUgImJ1aWx0aW5zIiBtb2R1bGUuICBXaGVuIG5vdFxuICAgaW4gaW50ZXJhY3RpdmUgbW9kZSwgIl8iIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcgYW5kIGlzIG5vdCBkZWZpbmVkLlxuICAgU2VlIHNlY3Rpb24gKlRoZSBpbXBvcnQgc3RhdGVtZW50Ki5cblxuICAgTm90ZTogVGhlIG5hbWUgIl8iIGlzIG9mdGVuIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgICBpbnRlcm5hdGlvbmFsaXphdGlvbjsgcmVmZXIgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZVxuICAgICAiZ2V0dGV4dCIgbW9kdWxlIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgY29udmVudGlvbi5cblxuIl9fKl9fIlxuICAgU3lzdGVtLWRlZmluZWQgbmFtZXMuIFRoZXNlIG5hbWVzIGFyZSBkZWZpbmVkIGJ5IHRoZSBpbnRlcnByZXRlclxuICAgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoZSBzdGFuZGFyZCBsaWJyYXJ5KS4gIEN1cnJlbnRcbiAgIHN5c3RlbSBuYW1lcyBhcmUgZGlzY3Vzc2VkIGluIHRoZSAqU3BlY2lhbCBtZXRob2QgbmFtZXMqIHNlY3Rpb25cbiAgIGFuZCBlbHNld2hlcmUuICBNb3JlIHdpbGwgbGlrZWx5IGJlIGRlZmluZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mXG4gICBQeXRob24uICAqQW55KiB1c2Ugb2YgIl9fKl9fIiBuYW1lcywgaW4gYW55IGNvbnRleHQsIHRoYXQgZG9lcyBub3RcbiAgIGZvbGxvdyBleHBsaWNpdGx5IGRvY3VtZW50ZWQgdXNlLCBpcyBzdWJqZWN0IHRvIGJyZWFrYWdlIHdpdGhvdXRcbiAgIHdhcm5pbmcuXG5cbiJfXyoiXG4gICBDbGFzcy1wcml2YXRlIG5hbWVzLiAgTmFtZXMgaW4gdGhpcyBjYXRlZ29yeSwgd2hlbiB1c2VkIHdpdGhpbiB0aGVcbiAgIGNvbnRleHQgb2YgYSBjbGFzcyBkZWZpbml0aW9uLCBhcmUgcmUtd3JpdHRlbiB0byB1c2UgYSBtYW5nbGVkIGZvcm1cbiAgIHRvIGhlbHAgYXZvaWQgbmFtZSBjbGFzaGVzIGJldHdlZW4gInByaXZhdGUiIGF0dHJpYnV0ZXMgb2YgYmFzZSBhbmRcbiAgIGRlcml2ZWQgY2xhc3Nlcy4gU2VlIHNlY3Rpb24gKklkZW50aWZpZXJzIChOYW1lcykqLlxuJywKKyAnaWYnOiB1J1xuVGhlICJpZiIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKipcblxuVGhlICJpZiIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIGNvbmRpdGlvbmFsIGV4ZWN1dGlvbjpcblxuICAgaWZfc3RtdCA6Oj0gImlmIiBleHByZXNzaW9uICI6IiBzdWl0ZVxuICAgICAgICAgICAgICAgKCAiZWxpZiIgZXhwcmVzc2lvbiAiOiIgc3VpdGUgKSpcbiAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5JdCBzZWxlY3RzIGV4YWN0bHkgb25lIG9mIHRoZSBzdWl0ZXMgYnkgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbnMgb25lXG5ieSBvbmUgdW50aWwgb25lIGlzIGZvdW5kIHRvIGJlIHRydWUgKHNlZSBzZWN0aW9uICpCb29sZWFuIG9wZXJhdGlvbnMqXG5mb3IgdGhlIGRlZmluaXRpb24gb2YgdHJ1ZSBhbmQgZmFsc2UpOyB0aGVuIHRoYXQgc3VpdGUgaXMgZXhlY3V0ZWRcbihhbmQgbm8gb3RoZXIgcGFydCBvZiB0aGUgImlmIiBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQgb3IgZXZhbHVhdGVkKS5cbklmIGFsbCBleHByZXNzaW9ucyBhcmUgZmFsc2UsIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWZcbnByZXNlbnQsIGlzIGV4ZWN1dGVkLlxuJywKKyAnaW1hZ2luYXJ5JzogdSdcbkltYWdpbmFyeSBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqXG5cbkltYWdpbmFyeSBsaXRlcmFscyBhcmUgZGVzY3JpYmVkIGJ5IHRoZSBmb2xsb3dpbmcgbGV4aWNhbCBkZWZpbml0aW9uczpcblxuICAgaW1hZ251bWJlciA6Oj0gKGZsb2F0bnVtYmVyIHwgaW50cGFydCkgKCJqIiB8ICJKIilcblxuQW4gaW1hZ2luYXJ5IGxpdGVyYWwgeWllbGRzIGEgY29tcGxleCBudW1iZXIgd2l0aCBhIHJlYWwgcGFydCBvZiAwLjAuXG5Db21wbGV4IG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGFzIGEgcGFpciBvZiBmbG9hdGluZyBwb2ludCBudW1iZXJzXG5hbmQgaGF2ZSB0aGUgc2FtZSByZXN0cmljdGlvbnMgb24gdGhlaXIgcmFuZ2UuICBUbyBjcmVhdGUgYSBjb21wbGV4XG5udW1iZXIgd2l0aCBhIG5vbnplcm8gcmVhbCBwYXJ0LCBhZGQgYSBmbG9hdGluZyBwb2ludCBudW1iZXIgdG8gaXQsXG5lLmcuLCAiKDMrNGopIi4gIFNvbWUgZXhhbXBsZXMgb2YgaW1hZ2luYXJ5IGxpdGVyYWxzOlxuXG4gICAzLjE0aiAgIDEwLmogICAgMTBqICAgICAuMDAxaiAgIDFlMTAwaiAgMy4xNGUtMTBqXG4nLAorICdpbXBvcnQnOiB1J1xuVGhlICJpbXBvcnQiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICBpbXBvcnRfc3RtdCAgICAgOjo9ICJpbXBvcnQiIG1vZHVsZSBbImFzIiBuYW1lXSAoICIsIiBtb2R1bGUgWyJhcyIgbmFtZV0gKSpcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiByZWxhdGl2ZV9tb2R1bGUgImltcG9ydCIgaWRlbnRpZmllciBbImFzIiBuYW1lXVxuICAgICAgICAgICAgICAgICAgICggIiwiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV0gKSpcbiAgICAgICAgICAgICAgICAgICB8ICJmcm9tIiByZWxhdGl2ZV9tb2R1bGUgImltcG9ydCIgIigiIGlkZW50aWZpZXIgWyJhcyIgbmFtZV1cbiAgICAgICAgICAgICAgICAgICAoICIsIiBpZGVudGlmaWVyIFsiYXMiIG5hbWVdICkqIFsiLCJdICIpIlxuICAgICAgICAgICAgICAgICAgIHwgImZyb20iIG1vZHVsZSAiaW1wb3J0IiAiKiJcbiAgIG1vZHVsZSAgICAgICAgICA6Oj0gKGlkZW50aWZpZXIgIi4iKSogaWRlbnRpZmllclxuICAgcmVsYXRpdmVfbW9kdWxlIDo6PSAiLiIqIG1vZHVsZSB8ICIuIitcbiAgIG5hbWUgICAgICAgICAgICA6Oj0gaWRlbnRpZmllclxuXG5UaGUgYmFzaWMgaW1wb3J0IHN0YXRlbWVudCAobm8gImZyb20iIGNsYXVzZSkgaXMgZXhlY3V0ZWQgaW4gdHdvXG5zdGVwczpcblxuMS4gZmluZCBhIG1vZHVsZSwgbG9hZGluZyBhbmQgaW5pdGlhbGl6aW5nIGl0IGlmIG5lY2Vzc2FyeVxuXG4yLiBkZWZpbmUgYSBuYW1lIG9yIG5hbWVzIGluIHRoZSBsb2NhbCBuYW1lc3BhY2UgZm9yIHRoZSBzY29wZVxuICAgd2hlcmUgdGhlICJpbXBvcnQiIHN0YXRlbWVudCBvY2N1cnMuXG5cbldoZW4gdGhlIHN0YXRlbWVudCBjb250YWlucyBtdWx0aXBsZSBjbGF1c2VzIChzZXBhcmF0ZWQgYnkgY29tbWFzKSB0aGVcbnR3byBzdGVwcyBhcmUgY2FycmllZCBvdXQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGF1c2UsIGp1c3QgYXMgdGhvdWdoXG50aGUgY2xhdXNlcyBoYWQgYmVlbiBzZXBhcmF0ZWQgb3V0IGludG8gaW5kaXZpZGl1YWwgaW1wb3J0IHN0YXRlbWVudHMuXG5cblRoZSBkZXRhaWxzIG9mIHRoZSBmaXJzdCBzdGVwLCBmaW5kaW5nIGFuZCBsb2FkaW5nIG1vZHVsZXMgYXJlXG5kZXNjcmliZWQgaW4gZ3JlYXRlciBkZXRhaWwgaW4gdGhlIHNlY3Rpb24gb24gdGhlICppbXBvcnQgc3lzdGVtKixcbndoaWNoIGFsc28gZGVzY3JpYmVzIHRoZSB2YXJpb3VzIHR5cGVzIG9mIHBhY2thZ2VzIGFuZCBtb2R1bGVzIHRoYXRcbmNhbiBiZSBpbXBvcnRlZCwgYXMgd2VsbCBhcyBhbGwgdGhlIGhvb2tzIHRoYXQgY2FuIGJlIHVzZWQgdG9cbmN1c3RvbWl6ZSB0aGUgaW1wb3J0IHN5c3RlbS4gTm90ZSB0aGF0IGZhaWx1cmVzIGluIHRoaXMgc3RlcCBtYXlcbmluZGljYXRlIGVpdGhlciB0aGF0IHRoZSBtb2R1bGUgY291bGQgbm90IGJlIGxvY2F0ZWQsICpvciogdGhhdCBhblxuZXJyb3Igb2NjdXJyZWQgd2hpbGUgaW5pdGlhbGl6aW5nIHRoZSBtb2R1bGUsIHdoaWNoIGluY2x1ZGVzIGV4ZWN1dGlvblxub2YgdGhlIG1vZHVsZVwncyBjb2RlLlxuXG5JZiB0aGUgcmVxdWVzdGVkIG1vZHVsZSBpcyByZXRyaWV2ZWQgc3VjY2Vzc2Z1bGx5LCBpdCB3aWxsIGJlIG1hZGVcbmF2YWlsYWJsZSBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGluIG9uZSBvZiB0aHJlZSB3YXlzOlxuXG4qIElmIHRoZSBtb2R1bGUgbmFtZSBpcyBmb2xsb3dlZCBieSAiYXMiLCB0aGVuIHRoZSBuYW1lIGZvbGxvd2luZ1xuICAiYXMiIGlzIGJvdW5kIGRpcmVjdGx5IHRvIHRoZSBpbXBvcnRlZCBtb2R1bGUuXG5cbiogSWYgbm8gb3RoZXIgbmFtZSBpcyBzcGVjaWZpZWQsIGFuZCB0aGUgbW9kdWxlIGJlaW5nIGltcG9ydGVkIGlzIGFcbiAgdG9wIGxldmVsIG1vZHVsZSwgdGhlIG1vZHVsZVwncyBuYW1lIGlzIGJvdW5kIGluIHRoZSBsb2NhbCBuYW1lc3BhY2VcbiAgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGltcG9ydGVkIG1vZHVsZVxuXG4qIElmIHRoZSBtb2R1bGUgYmVpbmcgaW1wb3J0ZWQgaXMgKm5vdCogYSB0b3AgbGV2ZWwgbW9kdWxlLCB0aGVuIHRoZVxuICBuYW1lIG9mIHRoZSB0b3AgbGV2ZWwgcGFja2FnZSB0aGF0IGNvbnRhaW5zIHRoZSBtb2R1bGUgaXMgYm91bmQgaW5cbiAgdGhlIGxvY2FsIG5hbWVzcGFjZSBhcyBhIHJlZmVyZW5jZSB0byB0aGUgdG9wIGxldmVsIHBhY2thZ2UuIFRoZVxuICBpbXBvcnRlZCBtb2R1bGUgbXVzdCBiZSBhY2Nlc3NlZCB1c2luZyBpdHMgZnVsbCBxdWFsaWZpZWQgbmFtZVxuICByYXRoZXIgdGhhbiBkaXJlY3RseVxuXG5UaGUgImZyb20iIGZvcm0gdXNlcyBhIHNsaWdodGx5IG1vcmUgY29tcGxleCBwcm9jZXNzOlxuXG4xLiBmaW5kIHRoZSBtb2R1bGUgc3BlY2lmaWVkIGluIHRoZSAiZnJvbSIgY2xhdXNlLCBsb2FkaW5nIGFuZFxuICAgaW5pdGlhbGl6aW5nIGl0IGlmIG5lY2Vzc2FyeTtcblxuMi4gZm9yIGVhY2ggb2YgdGhlIGlkZW50aWZpZXJzIHNwZWNpZmllZCBpbiB0aGUgImltcG9ydCIgY2xhdXNlczpcblxuICAgMS4gY2hlY2sgaWYgdGhlIGltcG9ydGVkIG1vZHVsZSBoYXMgYW4gYXR0cmlidXRlIGJ5IHRoYXQgbmFtZVxuXG4gICAyLiBpZiBub3QsIGF0dGVtcHQgdG8gaW1wb3J0IGEgc3VibW9kdWxlIHdpdGggdGhhdCBuYW1lIGFuZCB0aGVuXG4gICAgICBjaGVjayB0aGUgaW1wb3J0ZWQgbW9kdWxlIGFnYWluIGZvciB0aGF0IGF0dHJpYnV0ZVxuXG4gICAzLiBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBmb3VuZCwgIkltcG9ydEVycm9yIiBpcyByYWlzZWQuXG5cbiAgIDQuIG90aGVyd2lzZSwgYSByZWZlcmVuY2UgdG8gdGhhdCB2YWx1ZSBpcyBzdG9yZWQgaW4gdGhlIGxvY2FsXG4gICAgICBuYW1lc3BhY2UsIHVzaW5nIHRoZSBuYW1lIGluIHRoZSAiYXMiIGNsYXVzZSBpZiBpdCBpcyBwcmVzZW50LFxuICAgICAgb3RoZXJ3aXNlIHVzaW5nIHRoZSBhdHRyaWJ1dGUgbmFtZVxuXG5FeGFtcGxlczpcblxuICAgaW1wb3J0IGZvbyAgICAgICAgICAgICAgICAgIyBmb28gaW1wb3J0ZWQgYW5kIGJvdW5kIGxvY2FsbHlcbiAgIGltcG9ydCBmb28uYmFyLmJheiAgICAgICAgICMgZm9vLmJhci5iYXogaW1wb3J0ZWQsIGZvbyBib3VuZCBsb2NhbGx5XG4gICBpbXBvcnQgZm9vLmJhci5iYXogYXMgZmJiICAjIGZvby5iYXIuYmF6IGltcG9ydGVkIGFuZCBib3VuZCBhcyBmYmJcbiAgIGZyb20gZm9vLmJhciBpbXBvcnQgYmF6ICAgICMgZm9vLmJhci5iYXogaW1wb3J0ZWQgYW5kIGJvdW5kIGFzIGJhelxuICAgZnJvbSBmb28gaW1wb3J0IGF0dHIgICAgICAgIyBmb28gaW1wb3J0ZWQgYW5kIGZvby5hdHRyIGJvdW5kIGFzIGF0dHJcblxuSWYgdGhlIGxpc3Qgb2YgaWRlbnRpZmllcnMgaXMgcmVwbGFjZWQgYnkgYSBzdGFyICgiXCcqXCciKSwgYWxsIHB1YmxpY1xubmFtZXMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlIGFyZSBib3VuZCBpbiB0aGUgbG9jYWwgbmFtZXNwYWNlIGZvciB0aGVcbnNjb3BlIHdoZXJlIHRoZSAiaW1wb3J0IiBzdGF0ZW1lbnQgb2NjdXJzLlxuXG5UaGUgKnB1YmxpYyBuYW1lcyogZGVmaW5lZCBieSBhIG1vZHVsZSBhcmUgZGV0ZXJtaW5lZCBieSBjaGVja2luZyB0aGVcbm1vZHVsZVwncyBuYW1lc3BhY2UgZm9yIGEgdmFyaWFibGUgbmFtZWQgIl9fYWxsX18iOyBpZiBkZWZpbmVkLCBpdCBtdXN0XG5iZSBhIHNlcXVlbmNlIG9mIHN0cmluZ3Mgd2hpY2ggYXJlIG5hbWVzIGRlZmluZWQgb3IgaW1wb3J0ZWQgYnkgdGhhdFxubW9kdWxlLiAgVGhlIG5hbWVzIGdpdmVuIGluICJfX2FsbF9fIiBhcmUgYWxsIGNvbnNpZGVyZWQgcHVibGljIGFuZFxuYXJlIHJlcXVpcmVkIHRvIGV4aXN0LiAgSWYgIl9fYWxsX18iIGlzIG5vdCBkZWZpbmVkLCB0aGUgc2V0IG9mIHB1YmxpY1xubmFtZXMgaW5jbHVkZXMgYWxsIG5hbWVzIGZvdW5kIGluIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIHdoaWNoIGRvIG5vdFxuYmVnaW4gd2l0aCBhbiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoIlwnX1wnIikuICAiX19hbGxfXyIgc2hvdWxkIGNvbnRhaW5cbnRoZSBlbnRpcmUgcHVibGljIEFQSS4gSXQgaXMgaW50ZW5kZWQgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IGV4cG9ydGluZ1xuaXRlbXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIEFQSSAoc3VjaCBhcyBsaWJyYXJ5IG1vZHVsZXMgd2hpY2ggd2VyZVxuaW1wb3J0ZWQgYW5kIHVzZWQgd2l0aGluIHRoZSBtb2R1bGUpLlxuXG5UaGUgd2lsZCBjYXJkIGZvcm0gb2YgaW1wb3J0IC0tLSAiZnJvbSBtb2R1bGUgaW1wb3J0ICoiIC0tLSBpcyBvbmx5XG5hbGxvd2VkIGF0IHRoZSBtb2R1bGUgbGV2ZWwuICBBdHRlbXB0aW5nIHRvIHVzZSBpdCBpbiBjbGFzcyBvclxuZnVuY3Rpb24gZGVmaW5pdGlvbnMgd2lsbCByYWlzZSBhICJTeW50YXhFcnJvciIuXG5cbldoZW4gc3BlY2lmeWluZyB3aGF0IG1vZHVsZSB0byBpbXBvcnQgeW91IGRvIG5vdCBoYXZlIHRvIHNwZWNpZnkgdGhlXG5hYnNvbHV0ZSBuYW1lIG9mIHRoZSBtb2R1bGUuIFdoZW4gYSBtb2R1bGUgb3IgcGFja2FnZSBpcyBjb250YWluZWRcbndpdGhpbiBhbm90aGVyIHBhY2thZ2UgaXQgaXMgcG9zc2libGUgdG8gbWFrZSBhIHJlbGF0aXZlIGltcG9ydCB3aXRoaW5cbnRoZSBzYW1lIHRvcCBwYWNrYWdlIHdpdGhvdXQgaGF2aW5nIHRvIG1lbnRpb24gdGhlIHBhY2thZ2UgbmFtZS4gQnlcbnVzaW5nIGxlYWRpbmcgZG90cyBpbiB0aGUgc3BlY2lmaWVkIG1vZHVsZSBvciBwYWNrYWdlIGFmdGVyICJmcm9tIiB5b3VcbmNhbiBzcGVjaWZ5IGhvdyBoaWdoIHRvIHRyYXZlcnNlIHVwIHRoZSBjdXJyZW50IHBhY2thZ2UgaGllcmFyY2h5XG53aXRob3V0IHNwZWNpZnlpbmcgZXhhY3QgbmFtZXMuIE9uZSBsZWFkaW5nIGRvdCBtZWFucyB0aGUgY3VycmVudFxucGFja2FnZSB3aGVyZSB0aGUgbW9kdWxlIG1ha2luZyB0aGUgaW1wb3J0IGV4aXN0cy4gVHdvIGRvdHMgbWVhbnMgdXBcbm9uZSBwYWNrYWdlIGxldmVsLiBUaHJlZSBkb3RzIGlzIHVwIHR3byBsZXZlbHMsIGV0Yy4gU28gaWYgeW91IGV4ZWN1dGVcbiJmcm9tIC4gaW1wb3J0IG1vZCIgZnJvbSBhIG1vZHVsZSBpbiB0aGUgInBrZyIgcGFja2FnZSB0aGVuIHlvdSB3aWxsXG5lbmQgdXAgaW1wb3J0aW5nICJwa2cubW9kIi4gSWYgeW91IGV4ZWN1dGUgImZyb20gLi5zdWJwa2cyIGltcG9ydCBtb2QiXG5mcm9tIHdpdGhpbiAicGtnLnN1YnBrZzEiIHlvdSB3aWxsIGltcG9ydCAicGtnLnN1YnBrZzIubW9kIi4gVGhlXG5zcGVjaWZpY2F0aW9uIGZvciByZWxhdGl2ZSBpbXBvcnRzIGlzIGNvbnRhaW5lZCB3aXRoaW4gKipQRVAgMzI4KiouXG5cbiJpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgpIiBpcyBwcm92aWRlZCB0byBzdXBwb3J0IGFwcGxpY2F0aW9ucyB0aGF0XG5kZXRlcm1pbmUgZHluYW1pY2FsbHkgdGhlIG1vZHVsZXMgdG8gYmUgbG9hZGVkLlxuXG5cbkZ1dHVyZSBzdGF0ZW1lbnRzXG49PT09PT09PT09PT09PT09PVxuXG5BICpmdXR1cmUgc3RhdGVtZW50KiBpcyBhIGRpcmVjdGl2ZSB0byB0aGUgY29tcGlsZXIgdGhhdCBhIHBhcnRpY3VsYXJcbm1vZHVsZSBzaG91bGQgYmUgY29tcGlsZWQgdXNpbmcgc3ludGF4IG9yIHNlbWFudGljcyB0aGF0IHdpbGwgYmVcbmF2YWlsYWJsZSBpbiBhIHNwZWNpZmllZCBmdXR1cmUgcmVsZWFzZSBvZiBQeXRob24gd2hlcmUgdGhlIGZlYXR1cmVcbmJlY29tZXMgc3RhbmRhcmQuXG5cblRoZSBmdXR1cmUgc3RhdGVtZW50IGlzIGludGVuZGVkIHRvIGVhc2UgbWlncmF0aW9uIHRvIGZ1dHVyZSB2ZXJzaW9uc1xub2YgUHl0aG9uIHRoYXQgaW50cm9kdWNlIGluY29tcGF0aWJsZSBjaGFuZ2VzIHRvIHRoZSBsYW5ndWFnZS4gIEl0XG5hbGxvd3MgdXNlIG9mIHRoZSBuZXcgZmVhdHVyZXMgb24gYSBwZXItbW9kdWxlIGJhc2lzIGJlZm9yZSB0aGVcbnJlbGVhc2UgaW4gd2hpY2ggdGhlIGZlYXR1cmUgYmVjb21lcyBzdGFuZGFyZC5cblxuICAgZnV0dXJlX3N0YXRlbWVudCA6Oj0gImZyb20iICJfX2Z1dHVyZV9fIiAiaW1wb3J0IiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKlxuICAgICAgICAgICAgICAgICAgICAgICAgfCAiZnJvbSIgIl9fZnV0dXJlX18iICJpbXBvcnQiICIoIiBmZWF0dXJlIFsiYXMiIG5hbWVdXG4gICAgICAgICAgICAgICAgICAgICAgICAoIiwiIGZlYXR1cmUgWyJhcyIgbmFtZV0pKiBbIiwiXSAiKSJcbiAgIGZlYXR1cmUgICAgICAgICAgOjo9IGlkZW50aWZpZXJcbiAgIG5hbWUgICAgICAgICAgICAgOjo9IGlkZW50aWZpZXJcblxuQSBmdXR1cmUgc3RhdGVtZW50IG11c3QgYXBwZWFyIG5lYXIgdGhlIHRvcCBvZiB0aGUgbW9kdWxlLiAgVGhlIG9ubHlcbmxpbmVzIHRoYXQgY2FuIGFwcGVhciBiZWZvcmUgYSBmdXR1cmUgc3RhdGVtZW50IGFyZTpcblxuKiB0aGUgbW9kdWxlIGRvY3N0cmluZyAoaWYgYW55KSxcblxuKiBjb21tZW50cyxcblxuKiBibGFuayBsaW5lcywgYW5kXG5cbiogb3RoZXIgZnV0dXJlIHN0YXRlbWVudHMuXG5cblRoZSBmZWF0dXJlcyByZWNvZ25pemVkIGJ5IFB5dGhvbiAzLjAgYXJlICJhYnNvbHV0ZV9pbXBvcnQiLFxuImRpdmlzaW9uIiwgImdlbmVyYXRvcnMiLCAidW5pY29kZV9saXRlcmFscyIsICJwcmludF9mdW5jdGlvbiIsXG4ibmVzdGVkX3Njb3BlcyIgYW5kICJ3aXRoX3N0YXRlbWVudCIuICBUaGV5IGFyZSBhbGwgcmVkdW5kYW50IGJlY2F1c2VcbnRoZXkgYXJlIGFsd2F5cyBlbmFibGVkLCBhbmQgb25seSBrZXB0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblxuQSBmdXR1cmUgc3RhdGVtZW50IGlzIHJlY29nbml6ZWQgYW5kIHRyZWF0ZWQgc3BlY2lhbGx5IGF0IGNvbXBpbGVcbnRpbWU6IENoYW5nZXMgdG8gdGhlIHNlbWFudGljcyBvZiBjb3JlIGNvbnN0cnVjdHMgYXJlIG9mdGVuXG5pbXBsZW1lbnRlZCBieSBnZW5lcmF0aW5nIGRpZmZlcmVudCBjb2RlLiAgSXQgbWF5IGV2ZW4gYmUgdGhlIGNhc2VcbnRoYXQgYSBuZXcgZmVhdHVyZSBpbnRyb2R1Y2VzIG5ldyBpbmNvbXBhdGlibGUgc3ludGF4IChzdWNoIGFzIGEgbmV3XG5yZXNlcnZlZCB3b3JkKSwgaW4gd2hpY2ggY2FzZSB0aGUgY29tcGlsZXIgbWF5IG5lZWQgdG8gcGFyc2UgdGhlXG5tb2R1bGUgZGlmZmVyZW50bHkuICBTdWNoIGRlY2lzaW9ucyBjYW5ub3QgYmUgcHVzaGVkIG9mZiB1bnRpbFxucnVudGltZS5cblxuRm9yIGFueSBnaXZlbiByZWxlYXNlLCB0aGUgY29tcGlsZXIga25vd3Mgd2hpY2ggZmVhdHVyZSBuYW1lcyBoYXZlXG5iZWVuIGRlZmluZWQsIGFuZCByYWlzZXMgYSBjb21waWxlLXRpbWUgZXJyb3IgaWYgYSBmdXR1cmUgc3RhdGVtZW50XG5jb250YWlucyBhIGZlYXR1cmUgbm90IGtub3duIHRvIGl0LlxuXG5UaGUgZGlyZWN0IHJ1bnRpbWUgc2VtYW50aWNzIGFyZSB0aGUgc2FtZSBhcyBmb3IgYW55IGltcG9ydCBzdGF0ZW1lbnQ6XG50aGVyZSBpcyBhIHN0YW5kYXJkIG1vZHVsZSAiX19mdXR1cmVfXyIsIGRlc2NyaWJlZCBsYXRlciwgYW5kIGl0IHdpbGxcbmJlIGltcG9ydGVkIGluIHRoZSB1c3VhbCB3YXkgYXQgdGhlIHRpbWUgdGhlIGZ1dHVyZSBzdGF0ZW1lbnQgaXNcbmV4ZWN1dGVkLlxuXG5UaGUgaW50ZXJlc3RpbmcgcnVudGltZSBzZW1hbnRpY3MgZGVwZW5kIG9uIHRoZSBzcGVjaWZpYyBmZWF0dXJlXG5lbmFibGVkIGJ5IHRoZSBmdXR1cmUgc3RhdGVtZW50LlxuXG5Ob3RlIHRoYXQgdGhlcmUgaXMgbm90aGluZyBzcGVjaWFsIGFib3V0IHRoZSBzdGF0ZW1lbnQ6XG5cbiAgIGltcG9ydCBfX2Z1dHVyZV9fIFthcyBuYW1lXVxuXG5UaGF0IGlzIG5vdCBhIGZ1dHVyZSBzdGF0ZW1lbnQ7IGl0XCdzIGFuIG9yZGluYXJ5IGltcG9ydCBzdGF0ZW1lbnQgd2l0aFxubm8gc3BlY2lhbCBzZW1hbnRpY3Mgb3Igc3ludGF4IHJlc3RyaWN0aW9ucy5cblxuQ29kZSBjb21waWxlZCBieSBjYWxscyB0byB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJleGVjKCkiIGFuZFxuImNvbXBpbGUoKSIgdGhhdCBvY2N1ciBpbiBhIG1vZHVsZSAiTSIgY29udGFpbmluZyBhIGZ1dHVyZSBzdGF0ZW1lbnRcbndpbGwsIGJ5IGRlZmF1bHQsIHVzZSB0aGUgbmV3IHN5bnRheCBvciBzZW1hbnRpY3MgYXNzb2NpYXRlZCB3aXRoIHRoZVxuZnV0dXJlIHN0YXRlbWVudC4gIFRoaXMgY2FuIGJlIGNvbnRyb2xsZWQgYnkgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG4iY29tcGlsZSgpIiAtLS0gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoYXQgZnVuY3Rpb24gZm9yIGRldGFpbHMuXG5cbkEgZnV0dXJlIHN0YXRlbWVudCB0eXBlZCBhdCBhbiBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBwcm9tcHQgd2lsbFxudGFrZSBlZmZlY3QgZm9yIHRoZSByZXN0IG9mIHRoZSBpbnRlcnByZXRlciBzZXNzaW9uLiAgSWYgYW5cbmludGVycHJldGVyIGlzIHN0YXJ0ZWQgd2l0aCB0aGUgKi1pKiBvcHRpb24sIGlzIHBhc3NlZCBhIHNjcmlwdCBuYW1lXG50byBleGVjdXRlLCBhbmQgdGhlIHNjcmlwdCBpbmNsdWRlcyBhIGZ1dHVyZSBzdGF0ZW1lbnQsIGl0IHdpbGwgYmUgaW5cbmVmZmVjdCBpbiB0aGUgaW50ZXJhY3RpdmUgc2Vzc2lvbiBzdGFydGVkIGFmdGVyIHRoZSBzY3JpcHQgaXNcbmV4ZWN1dGVkLlxuXG5TZWUgYWxzbzogKipQRVAgMjM2KiogLSBCYWNrIHRvIHRoZSBfX2Z1dHVyZV9fXG5cbiAgICAgVGhlIG9yaWdpbmFsIHByb3Bvc2FsIGZvciB0aGUgX19mdXR1cmVfXyBtZWNoYW5pc20uXG4nLAorICdpbic6IHUnXG5NZW1iZXJzaGlwIHRlc3Qgb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG9wZXJhdG9ycyAiaW4iIGFuZCAibm90IGluIiB0ZXN0IGZvciBtZW1iZXJzaGlwLiAgInggaW4gcyJcbmV2YWx1YXRlcyB0byB0cnVlIGlmICp4KiBpcyBhIG1lbWJlciBvZiAqcyosIGFuZCBmYWxzZSBvdGhlcndpc2UuICAieFxubm90IGluIHMiIHJldHVybnMgdGhlIG5lZ2F0aW9uIG9mICJ4IGluIHMiLiAgQWxsIGJ1aWx0LWluIHNlcXVlbmNlc1xuYW5kIHNldCB0eXBlcyBzdXBwb3J0IHRoaXMgYXMgd2VsbCBhcyBkaWN0aW9uYXJ5LCBmb3Igd2hpY2ggImluIiB0ZXN0c1xud2hldGhlciB0aGUgZGljdGlvbmFyeSBoYXMgYSBnaXZlbiBrZXkuIEZvciBjb250YWluZXIgdHlwZXMgc3VjaCBhc1xubGlzdCwgdHVwbGUsIHNldCwgZnJvemVuc2V0LCBkaWN0LCBvciBjb2xsZWN0aW9ucy5kZXF1ZSwgdGhlXG5leHByZXNzaW9uICJ4IGluIHkiIGlzIGVxdWl2YWxlbnQgdG8gImFueSh4IGlzIGUgb3IgeCA9PSBlIGZvciBlIGluXG55KSIuXG5cbkZvciB0aGUgc3RyaW5nIGFuZCBieXRlcyB0eXBlcywgInggaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAqeCogaXNcbmEgc3Vic3RyaW5nIG9mICp5Ki4gIEFuIGVxdWl2YWxlbnQgdGVzdCBpcyAieS5maW5kKHgpICE9IC0xIi4gIEVtcHR5XG5zdHJpbmdzIGFyZSBhbHdheXMgY29uc2lkZXJlZCB0byBiZSBhIHN1YnN0cmluZyBvZiBhbnkgb3RoZXIgc3RyaW5nLFxuc28gIiIiIGluICJhYmMiIiB3aWxsIHJldHVybiAiVHJ1ZSIuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkZWZpbmUgdGhlICJfX2NvbnRhaW5zX18oKSIgbWV0aG9kLCAieFxuaW4geSIgaXMgdHJ1ZSBpZiBhbmQgb25seSBpZiAieS5fX2NvbnRhaW5zX18oeCkiIGlzIHRydWUuXG5cbkZvciB1c2VyLWRlZmluZWQgY2xhc3NlcyB3aGljaCBkbyBub3QgZGVmaW5lICJfX2NvbnRhaW5zX18oKSIgYnV0IGRvXG5kZWZpbmUgIl9faXRlcl9fKCkiLCAieCBpbiB5IiBpcyB0cnVlIGlmIHNvbWUgdmFsdWUgInoiIHdpdGggInggPT0geiJcbmlzIHByb2R1Y2VkIHdoaWxlIGl0ZXJhdGluZyBvdmVyICJ5Ii4gIElmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWRcbmR1cmluZyB0aGUgaXRlcmF0aW9uLCBpdCBpcyBhcyBpZiAiaW4iIHJhaXNlZCB0aGF0IGV4Y2VwdGlvbi5cblxuTGFzdGx5LCB0aGUgb2xkLXN0eWxlIGl0ZXJhdGlvbiBwcm90b2NvbCBpcyB0cmllZDogaWYgYSBjbGFzcyBkZWZpbmVzXG4iX19nZXRpdGVtX18oKSIsICJ4IGluIHkiIGlzIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgYSBub24tXG5uZWdhdGl2ZSBpbnRlZ2VyIGluZGV4ICppKiBzdWNoIHRoYXQgInggPT0geVtpXSIsIGFuZCBhbGwgbG93ZXJcbmludGVnZXIgaW5kaWNlcyBkbyBub3QgcmFpc2UgIkluZGV4RXJyb3IiIGV4Y2VwdGlvbi4gIChJZiBhbnkgb3RoZXJcbmV4Y2VwdGlvbiBpcyByYWlzZWQsIGl0IGlzIGFzIGlmICJpbiIgcmFpc2VkIHRoYXQgZXhjZXB0aW9uKS5cblxuVGhlIG9wZXJhdG9yICJub3QgaW4iIGlzIGRlZmluZWQgdG8gaGF2ZSB0aGUgaW52ZXJzZSB0cnVlIHZhbHVlIG9mXG4iaW4iLlxuJywKKyAnaW50ZWdlcnMnOiB1J1xuSW50ZWdlciBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKlxuXG5JbnRlZ2VyIGxpdGVyYWxzIGFyZSBkZXNjcmliZWQgYnkgdGhlIGZvbGxvd2luZyBsZXhpY2FsIGRlZmluaXRpb25zOlxuXG4gICBpbnRlZ2VyICAgICAgICA6Oj0gZGVjaW1hbGludGVnZXIgfCBvY3RpbnRlZ2VyIHwgaGV4aW50ZWdlciB8IGJpbmludGVnZXJcbiAgIGRlY2ltYWxpbnRlZ2VyIDo6PSBub256ZXJvZGlnaXQgZGlnaXQqIHwgIjAiK1xuICAgbm9uemVyb2RpZ2l0ICAgOjo9ICIxIi4uLiI5IlxuICAgZGlnaXQgICAgICAgICAgOjo9ICIwIi4uLiI5IlxuICAgb2N0aW50ZWdlciAgICAgOjo9ICIwIiAoIm8iIHwgIk8iKSBvY3RkaWdpdCtcbiAgIGhleGludGVnZXIgICAgIDo6PSAiMCIgKCJ4IiB8ICJYIikgaGV4ZGlnaXQrXG4gICBiaW5pbnRlZ2VyICAgICA6Oj0gIjAiICgiYiIgfCAiQiIpIGJpbmRpZ2l0K1xuICAgb2N0ZGlnaXQgICAgICAgOjo9ICIwIi4uLiI3IlxuICAgaGV4ZGlnaXQgICAgICAgOjo9IGRpZ2l0IHwgImEiLi4uImYiIHwgIkEiLi4uIkYiXG4gICBiaW5kaWdpdCAgICAgICA6Oj0gIjAiIHwgIjEiXG5cblRoZXJlIGlzIG5vIGxpbWl0IGZvciB0aGUgbGVuZ3RoIG9mIGludGVnZXIgbGl0ZXJhbHMgYXBhcnQgZnJvbSB3aGF0XG5jYW4gYmUgc3RvcmVkIGluIGF2YWlsYWJsZSBtZW1vcnkuXG5cbk5vdGUgdGhhdCBsZWFkaW5nIHplcm9zIGluIGEgbm9uLXplcm8gZGVjaW1hbCBudW1iZXIgYXJlIG5vdCBhbGxvd2VkLlxuVGhpcyBpcyBmb3IgZGlzYW1iaWd1YXRpb24gd2l0aCBDLXN0eWxlIG9jdGFsIGxpdGVyYWxzLCB3aGljaCBQeXRob25cbnVzZWQgYmVmb3JlIHZlcnNpb24gMy4wLlxuXG5Tb21lIGV4YW1wbGVzIG9mIGludGVnZXIgbGl0ZXJhbHM6XG5cbiAgIDcgICAgIDIxNDc0ODM2NDcgICAgICAgICAgICAgICAgICAgICAgICAwbzE3NyAgICAwYjEwMDExMDExMVxuICAgMyAgICAgNzkyMjgxNjI1MTQyNjQzMzc1OTM1NDM5NTAzMzYgICAgIDBvMzc3ICAgIDB4ZGVhZGJlZWZcbicsCisgJ2xhbWJkYSc6IHUnXG5MYW1iZGFzXG4qKioqKioqXG5cbiAgIGxhbWJkYV9leHByICAgICAgICA6Oj0gImxhbWJkYSIgW3BhcmFtZXRlcl9saXN0XTogZXhwcmVzc2lvblxuICAgbGFtYmRhX2V4cHJfbm9jb25kIDo6PSAibGFtYmRhIiBbcGFyYW1ldGVyX2xpc3RdOiBleHByZXNzaW9uX25vY29uZFxuXG5MYW1iZGEgZXhwcmVzc2lvbnMgKHNvbWV0aW1lcyBjYWxsZWQgbGFtYmRhIGZvcm1zKSBhcmUgdXNlZCB0byBjcmVhdGVcbmFub255bW91cyBmdW5jdGlvbnMuIFRoZSBleHByZXNzaW9uICJsYW1iZGEgYXJndW1lbnRzOiBleHByZXNzaW9uIlxueWllbGRzIGEgZnVuY3Rpb24gb2JqZWN0LiAgVGhlIHVubmFtZWQgb2JqZWN0IGJlaGF2ZXMgbGlrZSBhIGZ1bmN0aW9uXG5vYmplY3QgZGVmaW5lZCB3aXRoXG5cbiAgIGRlZiA8bGFtYmRhPihhcmd1bWVudHMpOlxuICAgICAgIHJldHVybiBleHByZXNzaW9uXG5cblNlZSBzZWN0aW9uICpGdW5jdGlvbiBkZWZpbml0aW9ucyogZm9yIHRoZSBzeW50YXggb2YgcGFyYW1ldGVyIGxpc3RzLlxuTm90ZSB0aGF0IGZ1bmN0aW9ucyBjcmVhdGVkIHdpdGggbGFtYmRhIGV4cHJlc3Npb25zIGNhbm5vdCBjb250YWluXG5zdGF0ZW1lbnRzIG9yIGFubm90YXRpb25zLlxuJywKKyAnbGlzdHMnOiB1J1xuTGlzdCBkaXNwbGF5c1xuKioqKioqKioqKioqKlxuXG5BIGxpc3QgZGlzcGxheSBpcyBhIHBvc3NpYmx5IGVtcHR5IHNlcmllcyBvZiBleHByZXNzaW9ucyBlbmNsb3NlZCBpblxuc3F1YXJlIGJyYWNrZXRzOlxuXG4gICBsaXN0X2Rpc3BsYXkgOjo9ICJbIiBbZXhwcmVzc2lvbl9saXN0IHwgY29tcHJlaGVuc2lvbl0gIl0iXG5cbkEgbGlzdCBkaXNwbGF5IHlpZWxkcyBhIG5ldyBsaXN0IG9iamVjdCwgdGhlIGNvbnRlbnRzIGJlaW5nIHNwZWNpZmllZFxuYnkgZWl0aGVyIGEgbGlzdCBvZiBleHByZXNzaW9ucyBvciBhIGNvbXByZWhlbnNpb24uICBXaGVuIGEgY29tbWEtXG5zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucyBpcyBzdXBwbGllZCwgaXRzIGVsZW1lbnRzIGFyZSBldmFsdWF0ZWRcbmZyb20gbGVmdCB0byByaWdodCBhbmQgcGxhY2VkIGludG8gdGhlIGxpc3Qgb2JqZWN0IGluIHRoYXQgb3JkZXIuXG5XaGVuIGEgY29tcHJlaGVuc2lvbiBpcyBzdXBwbGllZCwgdGhlIGxpc3QgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGVcbmVsZW1lbnRzIHJlc3VsdGluZyBmcm9tIHRoZSBjb21wcmVoZW5zaW9uLlxuJywKKyAnbmFtaW5nJzogdSdcbk5hbWluZyBhbmQgYmluZGluZ1xuKioqKioqKioqKioqKioqKioqXG5cblxuQmluZGluZyBvZiBuYW1lc1xuPT09PT09PT09PT09PT09PVxuXG4qTmFtZXMqIHJlZmVyIHRvIG9iamVjdHMuICBOYW1lcyBhcmUgaW50cm9kdWNlZCBieSBuYW1lIGJpbmRpbmdcbm9wZXJhdGlvbnMuXG5cblRoZSBmb2xsb3dpbmcgY29uc3RydWN0cyBiaW5kIG5hbWVzOiBmb3JtYWwgcGFyYW1ldGVycyB0byBmdW5jdGlvbnMsXG4iaW1wb3J0IiBzdGF0ZW1lbnRzLCBjbGFzcyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMgKHRoZXNlIGJpbmQgdGhlXG5jbGFzcyBvciBmdW5jdGlvbiBuYW1lIGluIHRoZSBkZWZpbmluZyBibG9jayksIGFuZCB0YXJnZXRzIHRoYXQgYXJlXG5pZGVudGlmaWVycyBpZiBvY2N1cnJpbmcgaW4gYW4gYXNzaWdubWVudCwgImZvciIgbG9vcCBoZWFkZXIsIG9yIGFmdGVyXG4iYXMiIGluIGEgIndpdGgiIHN0YXRlbWVudCBvciAiZXhjZXB0IiBjbGF1c2UuIFRoZSAiaW1wb3J0IiBzdGF0ZW1lbnRcbm9mIHRoZSBmb3JtICJmcm9tIC4uLiBpbXBvcnQgKiIgYmluZHMgYWxsIG5hbWVzIGRlZmluZWQgaW4gdGhlXG5pbXBvcnRlZCBtb2R1bGUsIGV4Y2VwdCB0aG9zZSBiZWdpbm5pbmcgd2l0aCBhbiB1bmRlcnNjb3JlLiAgVGhpcyBmb3JtXG5tYXkgb25seSBiZSB1c2VkIGF0IHRoZSBtb2R1bGUgbGV2ZWwuXG5cbkEgdGFyZ2V0IG9jY3VycmluZyBpbiBhICJkZWwiIHN0YXRlbWVudCBpcyBhbHNvIGNvbnNpZGVyZWQgYm91bmQgZm9yXG50aGlzIHB1cnBvc2UgKHRob3VnaCB0aGUgYWN0dWFsIHNlbWFudGljcyBhcmUgdG8gdW5iaW5kIHRoZSBuYW1lKS5cblxuRWFjaCBhc3NpZ25tZW50IG9yIGltcG9ydCBzdGF0ZW1lbnQgb2NjdXJzIHdpdGhpbiBhIGJsb2NrIGRlZmluZWQgYnkgYVxuY2xhc3Mgb3IgZnVuY3Rpb24gZGVmaW5pdGlvbiBvciBhdCB0aGUgbW9kdWxlIGxldmVsICh0aGUgdG9wLWxldmVsXG5jb2RlIGJsb2NrKS5cblxuSWYgYSBuYW1lIGlzIGJvdW5kIGluIGEgYmxvY2ssIGl0IGlzIGEgbG9jYWwgdmFyaWFibGUgb2YgdGhhdCBibG9jayxcbnVubGVzcyBkZWNsYXJlZCBhcyAibm9ubG9jYWwiIG9yICJnbG9iYWwiLiAgSWYgYSBuYW1lIGlzIGJvdW5kIGF0IHRoZVxubW9kdWxlIGxldmVsLCBpdCBpcyBhIGdsb2JhbCB2YXJpYWJsZS4gIChUaGUgdmFyaWFibGVzIG9mIHRoZSBtb2R1bGVcbmNvZGUgYmxvY2sgYXJlIGxvY2FsIGFuZCBnbG9iYWwuKSAgSWYgYSB2YXJpYWJsZSBpcyB1c2VkIGluIGEgY29kZVxuYmxvY2sgYnV0IG5vdCBkZWZpbmVkIHRoZXJlLCBpdCBpcyBhICpmcmVlIHZhcmlhYmxlKi5cblxuRWFjaCBvY2N1cnJlbmNlIG9mIGEgbmFtZSBpbiB0aGUgcHJvZ3JhbSB0ZXh0IHJlZmVycyB0byB0aGUgKmJpbmRpbmcqXG5vZiB0aGF0IG5hbWUgZXN0YWJsaXNoZWQgYnkgdGhlIGZvbGxvd2luZyBuYW1lIHJlc29sdXRpb24gcnVsZXMuXG5cblxuUmVzb2x1dGlvbiBvZiBuYW1lc1xuPT09PT09PT09PT09PT09PT09PVxuXG5BICpzY29wZSogZGVmaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiBhIG5hbWUgd2l0aGluIGEgYmxvY2suICBJZiBhIGxvY2FsXG52YXJpYWJsZSBpcyBkZWZpbmVkIGluIGEgYmxvY2ssIGl0cyBzY29wZSBpbmNsdWRlcyB0aGF0IGJsb2NrLiAgSWYgdGhlXG5kZWZpbml0aW9uIG9jY3VycyBpbiBhIGZ1bmN0aW9uIGJsb2NrLCB0aGUgc2NvcGUgZXh0ZW5kcyB0byBhbnkgYmxvY2tzXG5jb250YWluZWQgd2l0aGluIHRoZSBkZWZpbmluZyBvbmUsIHVubGVzcyBhIGNvbnRhaW5lZCBibG9jayBpbnRyb2R1Y2VzXG5hIGRpZmZlcmVudCBiaW5kaW5nIGZvciB0aGUgbmFtZS5cblxuV2hlbiBhIG5hbWUgaXMgdXNlZCBpbiBhIGNvZGUgYmxvY2ssIGl0IGlzIHJlc29sdmVkIHVzaW5nIHRoZSBuZWFyZXN0XG5lbmNsb3Npbmcgc2NvcGUuICBUaGUgc2V0IG9mIGFsbCBzdWNoIHNjb3BlcyB2aXNpYmxlIHRvIGEgY29kZSBibG9ja1xuaXMgY2FsbGVkIHRoZSBibG9ja1wncyAqZW52aXJvbm1lbnQqLlxuXG5XaGVuIGEgbmFtZSBpcyBub3QgZm91bmQgYXQgYWxsLCBhICJOYW1lRXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuIElmXG50aGUgY3VycmVudCBzY29wZSBpcyBhIGZ1bmN0aW9uIHNjb3BlLCBhbmQgdGhlIG5hbWUgcmVmZXJzIHRvIGEgbG9jYWxcbnZhcmlhYmxlIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBib3VuZCB0byBhIHZhbHVlIGF0IHRoZSBwb2ludCB3aGVyZSB0aGVcbm5hbWUgaXMgdXNlZCwgYW4gIlVuYm91bmRMb2NhbEVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuIlVuYm91bmRMb2NhbEVycm9yIiBpcyBhIHN1YmNsYXNzIG9mICJOYW1lRXJyb3IiLlxuXG5JZiBhIG5hbWUgYmluZGluZyBvcGVyYXRpb24gb2NjdXJzIGFueXdoZXJlIHdpdGhpbiBhIGNvZGUgYmxvY2ssIGFsbFxudXNlcyBvZiB0aGUgbmFtZSB3aXRoaW4gdGhlIGJsb2NrIGFyZSB0cmVhdGVkIGFzIHJlZmVyZW5jZXMgdG8gdGhlXG5jdXJyZW50IGJsb2NrLiAgVGhpcyBjYW4gbGVhZCB0byBlcnJvcnMgd2hlbiBhIG5hbWUgaXMgdXNlZCB3aXRoaW4gYVxuYmxvY2sgYmVmb3JlIGl0IGlzIGJvdW5kLiAgVGhpcyBydWxlIGlzIHN1YnRsZS4gIFB5dGhvbiBsYWNrc1xuZGVjbGFyYXRpb25zIGFuZCBhbGxvd3MgbmFtZSBiaW5kaW5nIG9wZXJhdGlvbnMgdG8gb2NjdXIgYW55d2hlcmVcbndpdGhpbiBhIGNvZGUgYmxvY2suICBUaGUgbG9jYWwgdmFyaWFibGVzIG9mIGEgY29kZSBibG9jayBjYW4gYmVcbmRldGVybWluZWQgYnkgc2Nhbm5pbmcgdGhlIGVudGlyZSB0ZXh0IG9mIHRoZSBibG9jayBmb3IgbmFtZSBiaW5kaW5nXG5vcGVyYXRpb25zLlxuXG5JZiB0aGUgImdsb2JhbCIgc3RhdGVtZW50IG9jY3VycyB3aXRoaW4gYSBibG9jaywgYWxsIHVzZXMgb2YgdGhlIG5hbWVcbnNwZWNpZmllZCBpbiB0aGUgc3RhdGVtZW50IHJlZmVyIHRvIHRoZSBiaW5kaW5nIG9mIHRoYXQgbmFtZSBpbiB0aGVcbnRvcC1sZXZlbCBuYW1lc3BhY2UuICBOYW1lcyBhcmUgcmVzb2x2ZWQgaW4gdGhlIHRvcC1sZXZlbCBuYW1lc3BhY2UgYnlcbnNlYXJjaGluZyB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgaS5lLiB0aGUgbmFtZXNwYWNlIG9mIHRoZSBtb2R1bGVcbmNvbnRhaW5pbmcgdGhlIGNvZGUgYmxvY2ssIGFuZCB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlLCB0aGUgbmFtZXNwYWNlXG5vZiB0aGUgbW9kdWxlICJidWlsdGlucyIuICBUaGUgZ2xvYmFsIG5hbWVzcGFjZSBpcyBzZWFyY2hlZCBmaXJzdC4gIElmXG50aGUgbmFtZSBpcyBub3QgZm91bmQgdGhlcmUsIHRoZSBidWlsdGlucyBuYW1lc3BhY2UgaXMgc2VhcmNoZWQuICBUaGVcbiJnbG9iYWwiIHN0YXRlbWVudCBtdXN0IHByZWNlZGUgYWxsIHVzZXMgb2YgdGhlIG5hbWUuXG5cblRoZSAiZ2xvYmFsIiBzdGF0ZW1lbnQgaGFzIHRoZSBzYW1lIHNjb3BlIGFzIGEgbmFtZSBiaW5kaW5nIG9wZXJhdGlvblxuaW4gdGhlIHNhbWUgYmxvY2suICBJZiB0aGUgbmVhcmVzdCBlbmNsb3Npbmcgc2NvcGUgZm9yIGEgZnJlZSB2YXJpYWJsZVxuY29udGFpbnMgYSBnbG9iYWwgc3RhdGVtZW50LCB0aGUgZnJlZSB2YXJpYWJsZSBpcyB0cmVhdGVkIGFzIGEgZ2xvYmFsLlxuXG5UaGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnQgY2F1c2VzIGNvcnJlc3BvbmRpbmcgbmFtZXMgdG8gcmVmZXIgdG9cbnByZXZpb3VzbHkgYm91bmQgdmFyaWFibGVzIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBmdW5jdGlvbiBzY29wZS5cbiJTeW50YXhFcnJvciIgaXMgcmFpc2VkIGF0IGNvbXBpbGUgdGltZSBpZiB0aGUgZ2l2ZW4gbmFtZSBkb2VzIG5vdFxuZXhpc3QgaW4gYW55IGVuY2xvc2luZyBmdW5jdGlvbiBzY29wZS5cblxuVGhlIG5hbWVzcGFjZSBmb3IgYSBtb2R1bGUgaXMgYXV0b21hdGljYWxseSBjcmVhdGVkIHRoZSBmaXJzdCB0aW1lIGFcbm1vZHVsZSBpcyBpbXBvcnRlZC4gIFRoZSBtYWluIG1vZHVsZSBmb3IgYSBzY3JpcHQgaXMgYWx3YXlzIGNhbGxlZFxuIl9fbWFpbl9fIi5cblxuQ2xhc3MgZGVmaW5pdGlvbiBibG9ja3MgYW5kIGFyZ3VtZW50cyB0byAiZXhlYygpIiBhbmQgImV2YWwoKSIgYXJlXG5zcGVjaWFsIGluIHRoZSBjb250ZXh0IG9mIG5hbWUgcmVzb2x1dGlvbi4gQSBjbGFzcyBkZWZpbml0aW9uIGlzIGFuXG5leGVjdXRhYmxlIHN0YXRlbWVudCB0aGF0IG1heSB1c2UgYW5kIGRlZmluZSBuYW1lcy4gVGhlc2UgcmVmZXJlbmNlc1xuZm9sbG93IHRoZSBub3JtYWwgcnVsZXMgZm9yIG5hbWUgcmVzb2x1dGlvbiB3aXRoIGFuIGV4Y2VwdGlvbiB0aGF0XG51bmJvdW5kIGxvY2FsIHZhcmlhYmxlcyBhcmUgbG9va2VkIHVwIGluIHRoZSBnbG9iYWwgbmFtZXNwYWNlLiBUaGVcbm5hbWVzcGFjZSBvZiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBiZWNvbWVzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSBvZlxudGhlIGNsYXNzLiBUaGUgc2NvcGUgb2YgbmFtZXMgZGVmaW5lZCBpbiBhIGNsYXNzIGJsb2NrIGlzIGxpbWl0ZWQgdG9cbnRoZSBjbGFzcyBibG9jazsgaXQgZG9lcyBub3QgZXh0ZW5kIHRvIHRoZSBjb2RlIGJsb2NrcyBvZiBtZXRob2RzIC0tXG50aGlzIGluY2x1ZGVzIGNvbXByZWhlbnNpb25zIGFuZCBnZW5lcmF0b3IgZXhwcmVzc2lvbnMgc2luY2UgdGhleSBhcmVcbmltcGxlbWVudGVkIHVzaW5nIGEgZnVuY3Rpb24gc2NvcGUuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZ1xud2lsbCBmYWlsOlxuXG4gICBjbGFzcyBBOlxuICAgICAgIGEgPSA0MlxuICAgICAgIGIgPSBsaXN0KGEgKyBpIGZvciBpIGluIHJhbmdlKDEwKSlcblxuXG5CdWlsdGlucyBhbmQgcmVzdHJpY3RlZCBleGVjdXRpb25cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgYnVpbHRpbnMgbmFtZXNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXhlY3V0aW9uIG9mIGEgY29kZSBibG9ja1xuaXMgYWN0dWFsbHkgZm91bmQgYnkgbG9va2luZyB1cCB0aGUgbmFtZSAiX19idWlsdGluc19fIiBpbiBpdHMgZ2xvYmFsXG5uYW1lc3BhY2U7IHRoaXMgc2hvdWxkIGJlIGEgZGljdGlvbmFyeSBvciBhIG1vZHVsZSAoaW4gdGhlIGxhdHRlciBjYXNlXG50aGUgbW9kdWxlXCdzIGRpY3Rpb25hcnkgaXMgdXNlZCkuICBCeSBkZWZhdWx0LCB3aGVuIGluIHRoZSAiX19tYWluX18iXG5tb2R1bGUsICJfX2J1aWx0aW5zX18iIGlzIHRoZSBidWlsdC1pbiBtb2R1bGUgImJ1aWx0aW5zIjsgd2hlbiBpbiBhbnlcbm90aGVyIG1vZHVsZSwgIl9fYnVpbHRpbnNfXyIgaXMgYW4gYWxpYXMgZm9yIHRoZSBkaWN0aW9uYXJ5IG9mIHRoZVxuImJ1aWx0aW5zIiBtb2R1bGUgaXRzZWxmLiAgIl9fYnVpbHRpbnNfXyIgY2FuIGJlIHNldCB0byBhIHVzZXItY3JlYXRlZFxuZGljdGlvbmFyeSB0byBjcmVhdGUgYSB3ZWFrIGZvcm0gb2YgcmVzdHJpY3RlZCBleGVjdXRpb24uXG5cbioqQ1B5dGhvbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWw6KiogVXNlcnMgc2hvdWxkIG5vdCB0b3VjaFxuIl9fYnVpbHRpbnNfXyI7IGl0IGlzIHN0cmljdGx5IGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4gIFVzZXJzXG53YW50aW5nIHRvIG92ZXJyaWRlIHZhbHVlcyBpbiB0aGUgYnVpbHRpbnMgbmFtZXNwYWNlIHNob3VsZCAiaW1wb3J0IlxudGhlICJidWlsdGlucyIgbW9kdWxlIGFuZCBtb2RpZnkgaXRzIGF0dHJpYnV0ZXMgYXBwcm9wcmlhdGVseS5cblxuXG5JbnRlcmFjdGlvbiB3aXRoIGR5bmFtaWMgZmVhdHVyZXNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5OYW1lIHJlc29sdXRpb24gb2YgZnJlZSB2YXJpYWJsZXMgb2NjdXJzIGF0IHJ1bnRpbWUsIG5vdCBhdCBjb21waWxlXG50aW1lLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGZvbGxvd2luZyBjb2RlIHdpbGwgcHJpbnQgNDI6XG5cbiAgIGkgPSAxMFxuICAgZGVmIGYoKTpcbiAgICAgICBwcmludChpKVxuICAgaSA9IDQyXG4gICBmKClcblxuVGhlcmUgYXJlIHNldmVyYWwgY2FzZXMgd2hlcmUgUHl0aG9uIHN0YXRlbWVudHMgYXJlIGlsbGVnYWwgd2hlbiB1c2VkXG5pbiBjb25qdW5jdGlvbiB3aXRoIG5lc3RlZCBzY29wZXMgdGhhdCBjb250YWluIGZyZWUgdmFyaWFibGVzLlxuXG5JZiBhIHZhcmlhYmxlIGlzIHJlZmVyZW5jZWQgaW4gYW4gZW5jbG9zaW5nIHNjb3BlLCBpdCBpcyBpbGxlZ2FsIHRvXG5kZWxldGUgdGhlIG5hbWUuICBBbiBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGF0IGNvbXBpbGUgdGltZS5cblxuVGhlICJldmFsKCkiIGFuZCAiZXhlYygpIiBmdW5jdGlvbnMgZG8gbm90IGhhdmUgYWNjZXNzIHRvIHRoZSBmdWxsXG5lbnZpcm9ubWVudCBmb3IgcmVzb2x2aW5nIG5hbWVzLiAgTmFtZXMgbWF5IGJlIHJlc29sdmVkIGluIHRoZSBsb2NhbFxuYW5kIGdsb2JhbCBuYW1lc3BhY2VzIG9mIHRoZSBjYWxsZXIuICBGcmVlIHZhcmlhYmxlcyBhcmUgbm90IHJlc29sdmVkXG5pbiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbmFtZXNwYWNlLCBidXQgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuICBbMV1cblRoZSAiZXhlYygpIiBhbmQgImV2YWwoKSIgZnVuY3Rpb25zIGhhdmUgb3B0aW9uYWwgYXJndW1lbnRzIHRvXG5vdmVycmlkZSB0aGUgZ2xvYmFsIGFuZCBsb2NhbCBuYW1lc3BhY2UuICBJZiBvbmx5IG9uZSBuYW1lc3BhY2UgaXNcbnNwZWNpZmllZCwgaXQgaXMgdXNlZCBmb3IgYm90aC5cbicsCisgJ25vbmxvY2FsJzogdSdcblRoZSAibm9ubG9jYWwiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbiAgIG5vbmxvY2FsX3N0bXQgOjo9ICJub25sb2NhbCIgaWRlbnRpZmllciAoIiwiIGlkZW50aWZpZXIpKlxuXG5UaGUgIm5vbmxvY2FsIiBzdGF0ZW1lbnQgY2F1c2VzIHRoZSBsaXN0ZWQgaWRlbnRpZmllcnMgdG8gcmVmZXIgdG9cbnByZXZpb3VzbHkgYm91bmQgdmFyaWFibGVzIGluIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBzY29wZSBleGNsdWRpbmdcbmdsb2JhbHMuIFRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2UgdGhlIGRlZmF1bHQgYmVoYXZpb3IgZm9yIGJpbmRpbmcgaXNcbnRvIHNlYXJjaCB0aGUgbG9jYWwgbmFtZXNwYWNlIGZpcnN0LiAgVGhlIHN0YXRlbWVudCBhbGxvd3NcbmVuY2Fwc3VsYXRlZCBjb2RlIHRvIHJlYmluZCB2YXJpYWJsZXMgb3V0c2lkZSBvZiB0aGUgbG9jYWwgc2NvcGVcbmJlc2lkZXMgdGhlIGdsb2JhbCAobW9kdWxlKSBzY29wZS5cblxuTmFtZXMgbGlzdGVkIGluIGEgIm5vbmxvY2FsIiBzdGF0ZW1lbnQsIHVubGlrZSB0aG9zZSBsaXN0ZWQgaW4gYVxuImdsb2JhbCIgc3RhdGVtZW50LCBtdXN0IHJlZmVyIHRvIHByZS1leGlzdGluZyBiaW5kaW5ncyBpbiBhblxuZW5jbG9zaW5nIHNjb3BlICh0aGUgc2NvcGUgaW4gd2hpY2ggYSBuZXcgYmluZGluZyBzaG91bGQgYmUgY3JlYXRlZFxuY2Fubm90IGJlIGRldGVybWluZWQgdW5hbWJpZ3VvdXNseSkuXG5cbk5hbWVzIGxpc3RlZCBpbiBhICJub25sb2NhbCIgc3RhdGVtZW50IG11c3Qgbm90IGNvbGxpZGUgd2l0aCBwcmUtXG5leGlzdGluZyBiaW5kaW5ncyBpbiB0aGUgbG9jYWwgc2NvcGUuXG5cblNlZSBhbHNvOiAqKlBFUCAzMTA0KiogLSBBY2Nlc3MgdG8gTmFtZXMgaW4gT3V0ZXIgU2NvcGVzXG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSAibm9ubG9jYWwiIHN0YXRlbWVudC5cbicsCisgJ251bWJlcnMnOiB1J1xuTnVtZXJpYyBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKlxuXG5UaGVyZSBhcmUgdGhyZWUgdHlwZXMgb2YgbnVtZXJpYyBsaXRlcmFsczogaW50ZWdlcnMsIGZsb2F0aW5nIHBvaW50XG5udW1iZXJzLCBhbmQgaW1hZ2luYXJ5IG51bWJlcnMuICBUaGVyZSBhcmUgbm8gY29tcGxleCBsaXRlcmFsc1xuKGNvbXBsZXggbnVtYmVycyBjYW4gYmUgZm9ybWVkIGJ5IGFkZGluZyBhIHJlYWwgbnVtYmVyIGFuZCBhblxuaW1hZ2luYXJ5IG51bWJlcikuXG5cbk5vdGUgdGhhdCBudW1lcmljIGxpdGVyYWxzIGRvIG5vdCBpbmNsdWRlIGEgc2lnbjsgYSBwaHJhc2UgbGlrZSAiLTEiXG5pcyBhY3R1YWxseSBhbiBleHByZXNzaW9uIGNvbXBvc2VkIG9mIHRoZSB1bmFyeSBvcGVyYXRvciBcJyItIlwnIGFuZCB0aGVcbmxpdGVyYWwgIjEiLlxuJywKKyAnbnVtZXJpYy10eXBlcyc6IHUnXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuKioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlXG4gICBleHByZXNzaW9uICJ4ICsgeSIsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuXG4gICAiX19hZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGlzIGNhbGxlZC4gIFRoZSAiX19kaXZtb2RfXygpIlxuICAgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZyAiX19mbG9vcmRpdl9fKCkiIGFuZFxuICAgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byAiX190cnVlZGl2X18oKSIuICBOb3RlXG4gICB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gInBvdygpIiBmdW5jdGlvbiBpc1xuICAgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLlxuICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90XG4gICBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kXG4gICAgIGZvciB0aGUgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXNcbiAgICAgdG8gb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IiwgIjw8PSIsXG4gICAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZVxuICAgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoXG4gICBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWxcbiAgIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIGlmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHdpdGggYW5cbiAgICJfX2lhZGRfXygpIiBtZXRob2QsICJ4ICs9IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPSB4Ll9faWFkZF9fKHkpIlxuICAgLiBPdGhlcndpc2UsICJ4Ll9fYWRkX18oeSkiIGFuZCAieS5fX3JhZGRfXyh4KSIgYXJlIGNvbnNpZGVyZWQsIGFzXG4gICB3aXRoIHRoZSBldmFsdWF0aW9uIG9mICJ4ICsgeSIuIEluIGNlcnRhaW4gc2l0dWF0aW9ucywgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBlcnJvcnMgKHNlZSAqV2h5IGRvZXNcbiAgIGFfdHVwbGVbaV0gKz0gW1wnaXRlbVwnXSByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgYWRkaXRpb25cbiAgIHdvcmtzPyopLCBidXQgdGhpcyBiZWhhdmlvciBpcyBpbiBmYWN0IHBhcnQgb2YgdGhlIGRhdGEgbW9kZWwuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoIi0iLCAiKyIsXG4gICAiYWJzKCkiIGFuZCAifiIpLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19mbG9hdF9fKHNlbGYpXG5vYmplY3QuX19yb3VuZF9fKHNlbGZbLCBuXSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJjb21wbGV4KCkiLCAiaW50KCkiLFxuICAgImZsb2F0KCkiIGFuZCAicm91bmQoKSIuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlXG4gICB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmluZGV4KCkiLCBhbmQgd2hlbmV2ZXIgUHl0aG9uIG5lZWRzXG4gICB0byBsb3NzbGVzc2x5IGNvbnZlcnQgdGhlIG51bWVyaWMgb2JqZWN0IHRvIGFuIGludGVnZXIgb2JqZWN0IChzdWNoXG4gICBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGUgYnVpbHQtaW4gImJpbigpIiwgImhleCgpIiBhbmQgIm9jdCgpIlxuICAgZnVuY3Rpb25zKS4gUHJlc2VuY2Ugb2YgdGhpcyBtZXRob2QgaW5kaWNhdGVzIHRoYXQgdGhlIG51bWVyaWNcbiAgIG9iamVjdCBpcyBhbiBpbnRlZ2VyIHR5cGUuICBNdXN0IHJldHVybiBhbiBpbnRlZ2VyLlxuXG4gICBOb3RlOiBJbiBvcmRlciB0byBoYXZlIGEgY29oZXJlbnQgaW50ZWdlciB0eXBlIGNsYXNzLCB3aGVuXG4gICAgICJfX2luZGV4X18oKSIgaXMgZGVmaW5lZCAiX19pbnRfXygpIiBzaG91bGQgYWxzbyBiZSBkZWZpbmVkLCBhbmRcbiAgICAgYm90aCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlLlxuJywKKyAnb2JqZWN0cyc6IHUnXG5PYmplY3RzLCB2YWx1ZXMgYW5kIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cbipPYmplY3RzKiBhcmUgUHl0aG9uXCdzIGFic3RyYWN0aW9uIGZvciBkYXRhLiAgQWxsIGRhdGEgaW4gYSBQeXRob25cbnByb2dyYW0gaXMgcmVwcmVzZW50ZWQgYnkgb2JqZWN0cyBvciBieSByZWxhdGlvbnMgYmV0d2VlbiBvYmplY3RzLiAoSW5cbmEgc2Vuc2UsIGFuZCBpbiBjb25mb3JtYW5jZSB0byBWb24gTmV1bWFublwncyBtb2RlbCBvZiBhICJzdG9yZWRcbnByb2dyYW0gY29tcHV0ZXIsIiBjb2RlIGlzIGFsc28gcmVwcmVzZW50ZWQgYnkgb2JqZWN0cy4pXG5cbkV2ZXJ5IG9iamVjdCBoYXMgYW4gaWRlbnRpdHksIGEgdHlwZSBhbmQgYSB2YWx1ZS4gIEFuIG9iamVjdFwnc1xuKmlkZW50aXR5KiBuZXZlciBjaGFuZ2VzIG9uY2UgaXQgaGFzIGJlZW4gY3JlYXRlZDsgeW91IG1heSB0aGluayBvZiBpdFxuYXMgdGhlIG9iamVjdFwncyBhZGRyZXNzIGluIG1lbW9yeS4gIFRoZSBcJyJpcyJcJyBvcGVyYXRvciBjb21wYXJlcyB0aGVcbmlkZW50aXR5IG9mIHR3byBvYmplY3RzOyB0aGUgImlkKCkiIGZ1bmN0aW9uIHJldHVybnMgYW4gaW50ZWdlclxucmVwcmVzZW50aW5nIGl0cyBpZGVudGl0eS5cblxuKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBGb3IgQ1B5dGhvbiwgImlkKHgpIiBpcyB0aGUgbWVtb3J5XG5hZGRyZXNzIHdoZXJlICJ4IiBpcyBzdG9yZWQuXG5cbkFuIG9iamVjdFwncyB0eXBlIGRldGVybWluZXMgdGhlIG9wZXJhdGlvbnMgdGhhdCB0aGUgb2JqZWN0IHN1cHBvcnRzXG4oZS5nLiwgImRvZXMgaXQgaGF2ZSBhIGxlbmd0aD8iKSBhbmQgYWxzbyBkZWZpbmVzIHRoZSBwb3NzaWJsZSB2YWx1ZXNcbmZvciBvYmplY3RzIG9mIHRoYXQgdHlwZS4gIFRoZSAidHlwZSgpIiBmdW5jdGlvbiByZXR1cm5zIGFuIG9iamVjdFwnc1xudHlwZSAod2hpY2ggaXMgYW4gb2JqZWN0IGl0c2VsZikuICBMaWtlIGl0cyBpZGVudGl0eSwgYW4gb2JqZWN0XCdzXG4qdHlwZSogaXMgYWxzbyB1bmNoYW5nZWFibGUuIFsxXVxuXG5UaGUgKnZhbHVlKiBvZiBzb21lIG9iamVjdHMgY2FuIGNoYW5nZS4gIE9iamVjdHMgd2hvc2UgdmFsdWUgY2FuXG5jaGFuZ2UgYXJlIHNhaWQgdG8gYmUgKm11dGFibGUqOyBvYmplY3RzIHdob3NlIHZhbHVlIGlzIHVuY2hhbmdlYWJsZVxub25jZSB0aGV5IGFyZSBjcmVhdGVkIGFyZSBjYWxsZWQgKmltbXV0YWJsZSouIChUaGUgdmFsdWUgb2YgYW5cbmltbXV0YWJsZSBjb250YWluZXIgb2JqZWN0IHRoYXQgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYSBtdXRhYmxlXG5vYmplY3QgY2FuIGNoYW5nZSB3aGVuIHRoZSBsYXR0ZXJcJ3MgdmFsdWUgaXMgY2hhbmdlZDsgaG93ZXZlciB0aGVcbmNvbnRhaW5lciBpcyBzdGlsbCBjb25zaWRlcmVkIGltbXV0YWJsZSwgYmVjYXVzZSB0aGUgY29sbGVjdGlvbiBvZlxub2JqZWN0cyBpdCBjb250YWlucyBjYW5ub3QgYmUgY2hhbmdlZC4gIFNvLCBpbW11dGFiaWxpdHkgaXMgbm90XG5zdHJpY3RseSB0aGUgc2FtZSBhcyBoYXZpbmcgYW4gdW5jaGFuZ2VhYmxlIHZhbHVlLCBpdCBpcyBtb3JlIHN1YnRsZS4pXG5BbiBvYmplY3RcJ3MgbXV0YWJpbGl0eSBpcyBkZXRlcm1pbmVkIGJ5IGl0cyB0eXBlOyBmb3IgaW5zdGFuY2UsXG5udW1iZXJzLCBzdHJpbmdzIGFuZCB0dXBsZXMgYXJlIGltbXV0YWJsZSwgd2hpbGUgZGljdGlvbmFyaWVzIGFuZFxubGlzdHMgYXJlIG11dGFibGUuXG5cbk9iamVjdHMgYXJlIG5ldmVyIGV4cGxpY2l0bHkgZGVzdHJveWVkOyBob3dldmVyLCB3aGVuIHRoZXkgYmVjb21lXG51bnJlYWNoYWJsZSB0aGV5IG1heSBiZSBnYXJiYWdlLWNvbGxlY3RlZC4gIEFuIGltcGxlbWVudGF0aW9uIGlzXG5hbGxvd2VkIHRvIHBvc3Rwb25lIGdhcmJhZ2UgY29sbGVjdGlvbiBvciBvbWl0IGl0IGFsdG9nZXRoZXIgLS0tIGl0IGlzXG5hIG1hdHRlciBvZiBpbXBsZW1lbnRhdGlvbiBxdWFsaXR5IGhvdyBnYXJiYWdlIGNvbGxlY3Rpb24gaXNcbmltcGxlbWVudGVkLCBhcyBsb25nIGFzIG5vIG9iamVjdHMgYXJlIGNvbGxlY3RlZCB0aGF0IGFyZSBzdGlsbFxucmVhY2hhYmxlLlxuXG4qKkNQeXRob24gaW1wbGVtZW50YXRpb24gZGV0YWlsOioqIENQeXRob24gY3VycmVudGx5IHVzZXMgYSByZWZlcmVuY2UtXG5jb3VudGluZyBzY2hlbWUgd2l0aCAob3B0aW9uYWwpIGRlbGF5ZWQgZGV0ZWN0aW9uIG9mIGN5Y2xpY2FsbHkgbGlua2VkXG5nYXJiYWdlLCB3aGljaCBjb2xsZWN0cyBtb3N0IG9iamVjdHMgYXMgc29vbiBhcyB0aGV5IGJlY29tZVxudW5yZWFjaGFibGUsIGJ1dCBpcyBub3QgZ3VhcmFudGVlZCB0byBjb2xsZWN0IGdhcmJhZ2UgY29udGFpbmluZ1xuY2lyY3VsYXIgcmVmZXJlbmNlcy4gIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgImdjIiBtb2R1bGUgZm9yXG5pbmZvcm1hdGlvbiBvbiBjb250cm9sbGluZyB0aGUgY29sbGVjdGlvbiBvZiBjeWNsaWMgZ2FyYmFnZS4gT3RoZXJcbmltcGxlbWVudGF0aW9ucyBhY3QgZGlmZmVyZW50bHkgYW5kIENQeXRob24gbWF5IGNoYW5nZS4gRG8gbm90IGRlcGVuZFxub24gaW1tZWRpYXRlIGZpbmFsaXphdGlvbiBvZiBvYmplY3RzIHdoZW4gdGhleSBiZWNvbWUgdW5yZWFjaGFibGUgKHNvXG55b3Ugc2hvdWxkIGFsd2F5cyBjbG9zZSBmaWxlcyBleHBsaWNpdGx5KS5cblxuTm90ZSB0aGF0IHRoZSB1c2Ugb2YgdGhlIGltcGxlbWVudGF0aW9uXCdzIHRyYWNpbmcgb3IgZGVidWdnaW5nXG5mYWNpbGl0aWVzIG1heSBrZWVwIG9iamVjdHMgYWxpdmUgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBjb2xsZWN0YWJsZS5cbkFsc28gbm90ZSB0aGF0IGNhdGNoaW5nIGFuIGV4Y2VwdGlvbiB3aXRoIGEgXCcidHJ5Ii4uLiJleGNlcHQiXCdcbnN0YXRlbWVudCBtYXkga2VlcCBvYmplY3RzIGFsaXZlLlxuXG5Tb21lIG9iamVjdHMgY29udGFpbiByZWZlcmVuY2VzIHRvICJleHRlcm5hbCIgcmVzb3VyY2VzIHN1Y2ggYXMgb3BlblxuZmlsZXMgb3Igd2luZG93cy4gIEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCB0aGVzZSByZXNvdXJjZXMgYXJlIGZyZWVkXG53aGVuIHRoZSBvYmplY3QgaXMgZ2FyYmFnZS1jb2xsZWN0ZWQsIGJ1dCBzaW5jZSBnYXJiYWdlIGNvbGxlY3Rpb24gaXNcbm5vdCBndWFyYW50ZWVkIHRvIGhhcHBlbiwgc3VjaCBvYmplY3RzIGFsc28gcHJvdmlkZSBhbiBleHBsaWNpdCB3YXkgdG9cbnJlbGVhc2UgdGhlIGV4dGVybmFsIHJlc291cmNlLCB1c3VhbGx5IGEgImNsb3NlKCkiIG1ldGhvZC4gUHJvZ3JhbXNcbmFyZSBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBleHBsaWNpdGx5IGNsb3NlIHN1Y2ggb2JqZWN0cy4gIFRoZVxuXCcidHJ5Ii4uLiJmaW5hbGx5IlwnIHN0YXRlbWVudCBhbmQgdGhlIFwnIndpdGgiXCcgc3RhdGVtZW50IHByb3ZpZGVcbmNvbnZlbmllbnQgd2F5cyB0byBkbyB0aGlzLlxuXG5Tb21lIG9iamVjdHMgY29udGFpbiByZWZlcmVuY2VzIHRvIG90aGVyIG9iamVjdHM7IHRoZXNlIGFyZSBjYWxsZWRcbipjb250YWluZXJzKi4gRXhhbXBsZXMgb2YgY29udGFpbmVycyBhcmUgdHVwbGVzLCBsaXN0cyBhbmRcbmRpY3Rpb25hcmllcy4gIFRoZSByZWZlcmVuY2VzIGFyZSBwYXJ0IG9mIGEgY29udGFpbmVyXCdzIHZhbHVlLiAgSW5cbm1vc3QgY2FzZXMsIHdoZW4gd2UgdGFsayBhYm91dCB0aGUgdmFsdWUgb2YgYSBjb250YWluZXIsIHdlIGltcGx5IHRoZVxudmFsdWVzLCBub3QgdGhlIGlkZW50aXRpZXMgb2YgdGhlIGNvbnRhaW5lZCBvYmplY3RzOyBob3dldmVyLCB3aGVuIHdlXG50YWxrIGFib3V0IHRoZSBtdXRhYmlsaXR5IG9mIGEgY29udGFpbmVyLCBvbmx5IHRoZSBpZGVudGl0aWVzIG9mIHRoZVxuaW1tZWRpYXRlbHkgY29udGFpbmVkIG9iamVjdHMgYXJlIGltcGxpZWQuICBTbywgaWYgYW4gaW1tdXRhYmxlXG5jb250YWluZXIgKGxpa2UgYSB0dXBsZSkgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gYSBtdXRhYmxlIG9iamVjdCwgaXRzXG52YWx1ZSBjaGFuZ2VzIGlmIHRoYXQgbXV0YWJsZSBvYmplY3QgaXMgY2hhbmdlZC5cblxuVHlwZXMgYWZmZWN0IGFsbW9zdCBhbGwgYXNwZWN0cyBvZiBvYmplY3QgYmVoYXZpb3IuICBFdmVuIHRoZVxuaW1wb3J0YW5jZSBvZiBvYmplY3QgaWRlbnRpdHkgaXMgYWZmZWN0ZWQgaW4gc29tZSBzZW5zZTogZm9yIGltbXV0YWJsZVxudHlwZXMsIG9wZXJhdGlvbnMgdGhhdCBjb21wdXRlIG5ldyB2YWx1ZXMgbWF5IGFjdHVhbGx5IHJldHVybiBhXG5yZWZlcmVuY2UgdG8gYW55IGV4aXN0aW5nIG9iamVjdCB3aXRoIHRoZSBzYW1lIHR5cGUgYW5kIHZhbHVlLCB3aGlsZVxuZm9yIG11dGFibGUgb2JqZWN0cyB0aGlzIGlzIG5vdCBhbGxvd2VkLiAgRS5nLiwgYWZ0ZXIgImEgPSAxOyBiID0gMSIsXG4iYSIgYW5kICJiIiBtYXkgb3IgbWF5IG5vdCByZWZlciB0byB0aGUgc2FtZSBvYmplY3Qgd2l0aCB0aGUgdmFsdWVcbm9uZSwgZGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGFmdGVyICJjID0gW107IGQgPSBbXSIsICJjIlxuYW5kICJkIiBhcmUgZ3VhcmFudGVlZCB0byByZWZlciB0byB0d28gZGlmZmVyZW50LCB1bmlxdWUsIG5ld2x5XG5jcmVhdGVkIGVtcHR5IGxpc3RzLiAoTm90ZSB0aGF0ICJjID0gZCA9IFtdIiBhc3NpZ25zIHRoZSBzYW1lIG9iamVjdFxudG8gYm90aCAiYyIgYW5kICJkIi4pXG4nLAorICdvcGVyYXRvci1zdW1tYXJ5JzogdSdcbk9wZXJhdG9yIHByZWNlZGVuY2VcbioqKioqKioqKioqKioqKioqKipcblxuVGhlIGZvbGxvd2luZyB0YWJsZSBzdW1tYXJpemVzIHRoZSBvcGVyYXRvciBwcmVjZWRlbmNlIGluIFB5dGhvbiwgZnJvbVxubG93ZXN0IHByZWNlZGVuY2UgKGxlYXN0IGJpbmRpbmcpIHRvIGhpZ2hlc3QgcHJlY2VkZW5jZSAobW9zdFxuYmluZGluZykuICBPcGVyYXRvcnMgaW4gdGhlIHNhbWUgYm94IGhhdmUgdGhlIHNhbWUgcHJlY2VkZW5jZS4gIFVubGVzc1xudGhlIHN5bnRheCBpcyBleHBsaWNpdGx5IGdpdmVuLCBvcGVyYXRvcnMgYXJlIGJpbmFyeS4gIE9wZXJhdG9ycyBpblxudGhlIHNhbWUgYm94IGdyb3VwIGxlZnQgdG8gcmlnaHQgKGV4Y2VwdCBmb3IgZXhwb25lbnRpYXRpb24sIHdoaWNoXG5ncm91cHMgZnJvbSByaWdodCB0byBsZWZ0KS5cblxuTm90ZSB0aGF0IGNvbXBhcmlzb25zLCBtZW1iZXJzaGlwIHRlc3RzLCBhbmQgaWRlbnRpdHkgdGVzdHMsIGFsbCBoYXZlXG50aGUgc2FtZSBwcmVjZWRlbmNlIGFuZCBoYXZlIGEgbGVmdC10by1yaWdodCBjaGFpbmluZyBmZWF0dXJlIGFzXG5kZXNjcmliZWQgaW4gdGhlICpDb21wYXJpc29ucyogc2VjdGlvbi5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCBPcGVyYXRvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09K1xufCAibGFtYmRhIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExhbWJkYSBleHByZXNzaW9uICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiaWYiIC0tICJlbHNlIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IENvbmRpdGlvbmFsIGV4cHJlc3Npb24gICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAib3IiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiYW5kIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAibm90IiAieCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJvb2xlYW4gTk9UICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiaW4iLCAibm90IGluIiwgImlzIiwgImlzIG5vdCIsICI8IiwgIjw9IiwgIj4iLCB8IENvbXBhcmlzb25zLCBpbmNsdWRpbmcgbWVtYmVyc2hpcCAgICAgfFxufCAiPj0iLCAiIT0iLCAiPT0iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRlc3RzIGFuZCBpZGVudGl0eSB0ZXN0cyAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAifCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiXiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgWE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiJiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEJpdHdpc2UgQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiPDwiLCAiPj4iICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNoaWZ0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKyIsICItIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKiIsICIvIiwgIi8vIiwgIiUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE11bHRpcGxpY2F0aW9uLCBkaXZpc2lvbiwgcmVtYWluZGVyICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFs1XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiK3giLCAiLXgiLCAifngiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFBvc2l0aXZlLCBuZWdhdGl2ZSwgYml0d2lzZSBOT1QgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKioiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEV4cG9uZW50aWF0aW9uIFs2XSAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAieFtpbmRleF0iLCAieFtpbmRleDppbmRleF0iLCAgICAgICAgICAgICAgICAgICB8IFN1YnNjcmlwdGlvbiwgc2xpY2luZywgY2FsbCwgICAgICAgICAgfFxufCAieChhcmd1bWVudHMuLi4pIiwgInguYXR0cmlidXRlIiAgICAgICAgICAgICAgICB8IGF0dHJpYnV0ZSByZWZlcmVuY2UgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiKGV4cHJlc3Npb25zLi4uKSIsICJbZXhwcmVzc2lvbnMuLi5dIiwgIntrZXk6ICB8IEJpbmRpbmcgb3IgdHVwbGUgZGlzcGxheSwgbGlzdCAgICAgICAgfFxufCB2YWx1ZS4uLn0iLCAie2V4cHJlc3Npb25zLi4ufSIgICAgICAgICAgICAgICAgICB8IGRpc3BsYXksIGRpY3Rpb25hcnkgZGlzcGxheSwgc2V0ICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGRpc3BsYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIFdoaWxlICJhYnMoeCV5KSA8IGFicyh5KSIgaXMgdHJ1ZSBtYXRoZW1hdGljYWxseSwgZm9yIGZsb2F0c1xuICAgIGl0IG1heSBub3QgYmUgdHJ1ZSBudW1lcmljYWxseSBkdWUgdG8gcm91bmRvZmYuICBGb3IgZXhhbXBsZSwgYW5kXG4gICAgYXNzdW1pbmcgYSBwbGF0Zm9ybSBvbiB3aGljaCBhIFB5dGhvbiBmbG9hdCBpcyBhbiBJRUVFIDc1NCBkb3VibGUtXG4gICAgcHJlY2lzaW9uIG51bWJlciwgaW4gb3JkZXIgdGhhdCAiLTFlLTEwMCAlIDFlMTAwIiBoYXZlIHRoZSBzYW1lXG4gICAgc2lnbiBhcyAiMWUxMDAiLCB0aGUgY29tcHV0ZWQgcmVzdWx0IGlzICItMWUtMTAwICsgMWUxMDAiLCB3aGljaFxuICAgIGlzIG51bWVyaWNhbGx5IGV4YWN0bHkgZXF1YWwgdG8gIjFlMTAwIi4gIFRoZSBmdW5jdGlvblxuICAgICJtYXRoLmZtb2QoKSIgcmV0dXJucyBhIHJlc3VsdCB3aG9zZSBzaWduIG1hdGNoZXMgdGhlIHNpZ24gb2YgdGhlXG4gICAgZmlyc3QgYXJndW1lbnQgaW5zdGVhZCwgYW5kIHNvIHJldHVybnMgIi0xZS0xMDAiIGluIHRoaXMgY2FzZS5cbiAgICBXaGljaCBhcHByb2FjaCBpcyBtb3JlIGFwcHJvcHJpYXRlIGRlcGVuZHMgb24gdGhlIGFwcGxpY2F0aW9uLlxuXG5bMl0gSWYgeCBpcyB2ZXJ5IGNsb3NlIHRvIGFuIGV4YWN0IGludGVnZXIgbXVsdGlwbGUgb2YgeSwgaXRcJ3NcbiAgICBwb3NzaWJsZSBmb3IgIngvL3kiIHRvIGJlIG9uZSBsYXJnZXIgdGhhbiAiKHgteCV5KS8veSIgZHVlIHRvXG4gICAgcm91bmRpbmcuICBJbiBzdWNoIGNhc2VzLCBQeXRob24gcmV0dXJucyB0aGUgbGF0dGVyIHJlc3VsdCwgaW5cbiAgICBvcmRlciB0byBwcmVzZXJ2ZSB0aGF0ICJkaXZtb2QoeCx5KVswXSAqIHkgKyB4ICUgeSIgYmUgdmVyeSBjbG9zZVxuICAgIHRvICJ4Ii5cblxuWzNdIFRoZSBVbmljb2RlIHN0YW5kYXJkIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiAqY29kZSBwb2ludHMqIChlLmcuXG4gICAgVSswMDQxKSBhbmQgKmFic3RyYWN0IGNoYXJhY3RlcnMqIChlLmcuICJMQVRJTiBDQVBJVEFMIExFVFRFUiBBIikuXG4gICAgV2hpbGUgbW9zdCBhYnN0cmFjdCBjaGFyYWN0ZXJzIGluIFVuaWNvZGUgYXJlIG9ubHkgcmVwcmVzZW50ZWRcbiAgICB1c2luZyBvbmUgY29kZSBwb2ludCwgdGhlcmUgaXMgYSBudW1iZXIgb2YgYWJzdHJhY3QgY2hhcmFjdGVyc1xuICAgIHRoYXQgY2FuIGluIGFkZGl0aW9uIGJlIHJlcHJlc2VudGVkIHVzaW5nIGEgc2VxdWVuY2Ugb2YgbW9yZSB0aGFuXG4gICAgb25lIGNvZGUgcG9pbnQuICBGb3IgZXhhbXBsZSwgdGhlIGFic3RyYWN0IGNoYXJhY3RlciAiTEFUSU5cbiAgICBDQVBJVEFMIExFVFRFUiBDIFdJVEggQ0VESUxMQSIgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGEgc2luZ2xlXG4gICAgKnByZWNvbXBvc2VkIGNoYXJhY3RlciogYXQgY29kZSBwb3NpdGlvbiBVKzAwQzcsIG9yIGFzIGEgc2VxdWVuY2VcbiAgICBvZiBhICpiYXNlIGNoYXJhY3RlciogYXQgY29kZSBwb3NpdGlvbiBVKzAwNDMgKExBVElOIENBUElUQUxcbiAgICBMRVRURVIgQyksIGZvbGxvd2VkIGJ5IGEgKmNvbWJpbmluZyBjaGFyYWN0ZXIqIGF0IGNvZGUgcG9zaXRpb25cbiAgICBVKzAzMjcgKENPTUJJTklORyBDRURJTExBKS5cblxuICAgIFRoZSBjb21wYXJpc29uIG9wZXJhdG9ycyBvbiBzdHJpbmdzIGNvbXBhcmUgYXQgdGhlIGxldmVsIG9mXG4gICAgVW5pY29kZSBjb2RlIHBvaW50cy4gVGhpcyBtYXkgYmUgY291bnRlci1pbnR1aXRpdmUgdG8gaHVtYW5zLiAgRm9yXG4gICAgZXhhbXBsZSwgIiJcXHUwMEM3IiA9PSAiXFx1MDA0M1xcdTAzMjciIiBpcyAiRmFsc2UiLCBldmVuIHRob3VnaCBib3RoXG4gICAgc3RyaW5ncyByZXByZXNlbnQgdGhlIHNhbWUgYWJzdHJhY3QgY2hhcmFjdGVyICJMQVRJTiBDQVBJVEFMXG4gICAgTEVUVEVSIEMgV0lUSCBDRURJTExBIi5cblxuICAgIFRvIGNvbXBhcmUgc3RyaW5ncyBhdCB0aGUgbGV2ZWwgb2YgYWJzdHJhY3QgY2hhcmFjdGVycyAodGhhdCBpcyxcbiAgICBpbiBhIHdheSBpbnR1aXRpdmUgdG8gaHVtYW5zKSwgdXNlICJ1bmljb2RlZGF0YS5ub3JtYWxpemUoKSIuXG5cbls0XSBEdWUgdG8gYXV0b21hdGljIGdhcmJhZ2UtY29sbGVjdGlvbiwgZnJlZSBsaXN0cywgYW5kIHRoZVxuICAgIGR5bmFtaWMgbmF0dXJlIG9mIGRlc2NyaXB0b3JzLCB5b3UgbWF5IG5vdGljZSBzZWVtaW5nbHkgdW51c3VhbFxuICAgIGJlaGF2aW91ciBpbiBjZXJ0YWluIHVzZXMgb2YgdGhlICJpcyIgb3BlcmF0b3IsIGxpa2UgdGhvc2VcbiAgICBpbnZvbHZpbmcgY29tcGFyaXNvbnMgYmV0d2VlbiBpbnN0YW5jZSBtZXRob2RzLCBvciBjb25zdGFudHMuXG4gICAgQ2hlY2sgdGhlaXIgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvLlxuXG5bNV0gVGhlICIlIiBvcGVyYXRvciBpcyBhbHNvIHVzZWQgZm9yIHN0cmluZyBmb3JtYXR0aW5nOyB0aGUgc2FtZVxuICAgIHByZWNlZGVuY2UgYXBwbGllcy5cblxuWzZdIFRoZSBwb3dlciBvcGVyYXRvciAiKioiIGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIGFuIGFyaXRobWV0aWNcbiAgICBvciBiaXR3aXNlIHVuYXJ5IG9wZXJhdG9yIG9uIGl0cyByaWdodCwgdGhhdCBpcywgIjIqKi0xIiBpcyAiMC41Ii5cbicsCisgJ3Bhc3MnOiB1J1xuVGhlICJwYXNzIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqXG5cbiAgIHBhc3Nfc3RtdCA6Oj0gInBhc3MiXG5cbiJwYXNzIiBpcyBhIG51bGwgb3BlcmF0aW9uIC0tLSB3aGVuIGl0IGlzIGV4ZWN1dGVkLCBub3RoaW5nIGhhcHBlbnMuXG5JdCBpcyB1c2VmdWwgYXMgYSBwbGFjZWhvbGRlciB3aGVuIGEgc3RhdGVtZW50IGlzIHJlcXVpcmVkXG5zeW50YWN0aWNhbGx5LCBidXQgbm8gY29kZSBuZWVkcyB0byBiZSBleGVjdXRlZCwgZm9yIGV4YW1wbGU6XG5cbiAgIGRlZiBmKGFyZyk6IHBhc3MgICAgIyBhIGZ1bmN0aW9uIHRoYXQgZG9lcyBub3RoaW5nICh5ZXQpXG5cbiAgIGNsYXNzIEM6IHBhc3MgICAgICAgIyBhIGNsYXNzIHdpdGggbm8gbWV0aG9kcyAoeWV0KVxuJywKKyAncG93ZXInOiB1J1xuVGhlIHBvd2VyIG9wZXJhdG9yXG4qKioqKioqKioqKioqKioqKipcblxuVGhlIHBvd2VyIG9wZXJhdG9yIGJpbmRzIG1vcmUgdGlnaHRseSB0aGFuIHVuYXJ5IG9wZXJhdG9ycyBvbiBpdHNcbmxlZnQ7IGl0IGJpbmRzIGxlc3MgdGlnaHRseSB0aGFuIHVuYXJ5IG9wZXJhdG9ycyBvbiBpdHMgcmlnaHQuICBUaGVcbnN5bnRheCBpczpcblxuICAgcG93ZXIgOjo9IHByaW1hcnkgWyIqKiIgdV9leHByXVxuXG5UaHVzLCBpbiBhbiB1bnBhcmVudGhlc2l6ZWQgc2VxdWVuY2Ugb2YgcG93ZXIgYW5kIHVuYXJ5IG9wZXJhdG9ycywgdGhlXG5vcGVyYXRvcnMgYXJlIGV2YWx1YXRlZCBmcm9tIHJpZ2h0IHRvIGxlZnQgKHRoaXMgZG9lcyBub3QgY29uc3RyYWluXG50aGUgZXZhbHVhdGlvbiBvcmRlciBmb3IgdGhlIG9wZXJhbmRzKTogIi0xKioyIiByZXN1bHRzIGluICItMSIuXG5cblRoZSBwb3dlciBvcGVyYXRvciBoYXMgdGhlIHNhbWUgc2VtYW50aWNzIGFzIHRoZSBidWlsdC1pbiAicG93KCkiXG5mdW5jdGlvbiwgd2hlbiBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOiBpdCB5aWVsZHMgaXRzIGxlZnQgYXJndW1lbnRcbnJhaXNlZCB0byB0aGUgcG93ZXIgb2YgaXRzIHJpZ2h0IGFyZ3VtZW50LiAgVGhlIG51bWVyaWMgYXJndW1lbnRzIGFyZVxuZmlyc3QgY29udmVydGVkIHRvIGEgY29tbW9uIHR5cGUsIGFuZCB0aGUgcmVzdWx0IGlzIG9mIHRoYXQgdHlwZS5cblxuRm9yIGludCBvcGVyYW5kcywgdGhlIHJlc3VsdCBoYXMgdGhlIHNhbWUgdHlwZSBhcyB0aGUgb3BlcmFuZHMgdW5sZXNzXG50aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5lZ2F0aXZlOyBpbiB0aGF0IGNhc2UsIGFsbCBhcmd1bWVudHMgYXJlXG5jb252ZXJ0ZWQgdG8gZmxvYXQgYW5kIGEgZmxvYXQgcmVzdWx0IGlzIGRlbGl2ZXJlZC4gRm9yIGV4YW1wbGUsXG4iMTAqKjIiIHJldHVybnMgIjEwMCIsIGJ1dCAiMTAqKi0yIiByZXR1cm5zICIwLjAxIi5cblxuUmFpc2luZyAiMC4wIiB0byBhIG5lZ2F0aXZlIHBvd2VyIHJlc3VsdHMgaW4gYSAiWmVyb0RpdmlzaW9uRXJyb3IiLlxuUmFpc2luZyBhIG5lZ2F0aXZlIG51bWJlciB0byBhIGZyYWN0aW9uYWwgcG93ZXIgcmVzdWx0cyBpbiBhICJjb21wbGV4IlxubnVtYmVyLiAoSW4gZWFybGllciB2ZXJzaW9ucyBpdCByYWlzZWQgYSAiVmFsdWVFcnJvciIuKVxuJywKKyAncmFpc2UnOiB1J1xuVGhlICJyYWlzZSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgcmFpc2Vfc3RtdCA6Oj0gInJhaXNlIiBbZXhwcmVzc2lvbiBbImZyb20iIGV4cHJlc3Npb25dXVxuXG5JZiBubyBleHByZXNzaW9ucyBhcmUgcHJlc2VudCwgInJhaXNlIiByZS1yYWlzZXMgdGhlIGxhc3QgZXhjZXB0aW9uXG50aGF0IHdhcyBhY3RpdmUgaW4gdGhlIGN1cnJlbnQgc2NvcGUuICBJZiBubyBleGNlcHRpb24gaXMgYWN0aXZlIGluXG50aGUgY3VycmVudCBzY29wZSwgYSAiUnVudGltZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkIGluZGljYXRpbmdcbnRoYXQgdGhpcyBpcyBhbiBlcnJvci5cblxuT3RoZXJ3aXNlLCAicmFpc2UiIGV2YWx1YXRlcyB0aGUgZmlyc3QgZXhwcmVzc2lvbiBhcyB0aGUgZXhjZXB0aW9uXG5vYmplY3QuICBJdCBtdXN0IGJlIGVpdGhlciBhIHN1YmNsYXNzIG9yIGFuIGluc3RhbmNlIG9mXG4iQmFzZUV4Y2VwdGlvbiIuIElmIGl0IGlzIGEgY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2Ugd2lsbCBiZVxub2J0YWluZWQgd2hlbiBuZWVkZWQgYnkgaW5zdGFudGlhdGluZyB0aGUgY2xhc3Mgd2l0aCBubyBhcmd1bWVudHMuXG5cblRoZSAqdHlwZSogb2YgdGhlIGV4Y2VwdGlvbiBpcyB0aGUgZXhjZXB0aW9uIGluc3RhbmNlXCdzIGNsYXNzLCB0aGVcbip2YWx1ZSogaXMgdGhlIGluc3RhbmNlIGl0c2VsZi5cblxuQSB0cmFjZWJhY2sgb2JqZWN0IGlzIG5vcm1hbGx5IGNyZWF0ZWQgYXV0b21hdGljYWxseSB3aGVuIGFuIGV4Y2VwdGlvblxuaXMgcmFpc2VkIGFuZCBhdHRhY2hlZCB0byBpdCBhcyB0aGUgIl9fdHJhY2ViYWNrX18iIGF0dHJpYnV0ZSwgd2hpY2hcbmlzIHdyaXRhYmxlLiBZb3UgY2FuIGNyZWF0ZSBhbiBleGNlcHRpb24gYW5kIHNldCB5b3VyIG93biB0cmFjZWJhY2sgaW5cbm9uZSBzdGVwIHVzaW5nIHRoZSAid2l0aF90cmFjZWJhY2soKSIgZXhjZXB0aW9uIG1ldGhvZCAod2hpY2ggcmV0dXJuc1xudGhlIHNhbWUgZXhjZXB0aW9uIGluc3RhbmNlLCB3aXRoIGl0cyB0cmFjZWJhY2sgc2V0IHRvIGl0cyBhcmd1bWVudCksXG5saWtlIHNvOlxuXG4gICByYWlzZSBFeGNlcHRpb24oImZvbyBvY2N1cnJlZCIpLndpdGhfdHJhY2ViYWNrKHRyYWNlYmFja29iailcblxuVGhlICJmcm9tIiBjbGF1c2UgaXMgdXNlZCBmb3IgZXhjZXB0aW9uIGNoYWluaW5nOiBpZiBnaXZlbiwgdGhlIHNlY29uZFxuKmV4cHJlc3Npb24qIG11c3QgYmUgYW5vdGhlciBleGNlcHRpb24gY2xhc3Mgb3IgaW5zdGFuY2UsIHdoaWNoIHdpbGxcbnRoZW4gYmUgYXR0YWNoZWQgdG8gdGhlIHJhaXNlZCBleGNlcHRpb24gYXMgdGhlICJfX2NhdXNlX18iIGF0dHJpYnV0ZVxuKHdoaWNoIGlzIHdyaXRhYmxlKS4gIElmIHRoZSByYWlzZWQgZXhjZXB0aW9uIGlzIG5vdCBoYW5kbGVkLCBib3RoXG5leGNlcHRpb25zIHdpbGwgYmUgcHJpbnRlZDpcblxuICAgPj4+IHRyeTpcbiAgIC4uLiAgICAgcHJpbnQoMSAvIDApXG4gICAuLi4gZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6XG4gICAuLi4gICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29tZXRoaW5nIGJhZCBoYXBwZW5lZCIpIGZyb20gZXhjXG4gICAuLi5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gPG1vZHVsZT5cbiAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnQgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm9cblxuICAgVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjpcblxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSA0LCBpbiA8bW9kdWxlPlxuICAgUnVudGltZUVycm9yOiBTb21ldGhpbmcgYmFkIGhhcHBlbmVkXG5cbkEgc2ltaWxhciBtZWNoYW5pc20gd29ya3MgaW1wbGljaXRseSBpZiBhbiBleGNlcHRpb24gaXMgcmFpc2VkIGluc2lkZVxuYW4gZXhjZXB0aW9uIGhhbmRsZXIgb3IgYSAiZmluYWxseSIgY2xhdXNlOiB0aGUgcHJldmlvdXMgZXhjZXB0aW9uIGlzXG50aGVuIGF0dGFjaGVkIGFzIHRoZSBuZXcgZXhjZXB0aW9uXCdzICJfX2NvbnRleHRfXyIgYXR0cmlidXRlOlxuXG4gICA+Pj4gdHJ5OlxuICAgLi4uICAgICBwcmludCgxIC8gMClcbiAgIC4uLiBleGNlcHQ6XG4gICAuLi4gICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiU29tZXRoaW5nIGJhZCBoYXBwZW5lZCIpXG4gICAuLi5cbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMiwgaW4gPG1vZHVsZT5cbiAgIFplcm9EaXZpc2lvbkVycm9yOiBpbnQgZGl2aXNpb24gb3IgbW9kdWxvIGJ5IHplcm9cblxuICAgRHVyaW5nIGhhbmRsaW5nIG9mIHRoZSBhYm92ZSBleGNlcHRpb24sIGFub3RoZXIgZXhjZXB0aW9uIG9jY3VycmVkOlxuXG4gICBUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4gICAgIEZpbGUgIjxzdGRpbj4iLCBsaW5lIDQsIGluIDxtb2R1bGU+XG4gICBSdW50aW1lRXJyb3I6IFNvbWV0aGluZyBiYWQgaGFwcGVuZWRcblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBoYW5kbGluZyBleGNlcHRpb25zIGlzIGluIHNlY3Rpb25cbipUaGUgdHJ5IHN0YXRlbWVudCouXG4nLAorICdyZXR1cm4nOiB1J1xuVGhlICJyZXR1cm4iIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKioqKlxuXG4gICByZXR1cm5fc3RtdCA6Oj0gInJldHVybiIgW2V4cHJlc3Npb25fbGlzdF1cblxuInJldHVybiIgbWF5IG9ubHkgb2NjdXIgc3ludGFjdGljYWxseSBuZXN0ZWQgaW4gYSBmdW5jdGlvbiBkZWZpbml0aW9uLFxubm90IHdpdGhpbiBhIG5lc3RlZCBjbGFzcyBkZWZpbml0aW9uLlxuXG5JZiBhbiBleHByZXNzaW9uIGxpc3QgaXMgcHJlc2VudCwgaXQgaXMgZXZhbHVhdGVkLCBlbHNlICJOb25lIiBpc1xuc3Vic3RpdHV0ZWQuXG5cbiJyZXR1cm4iIGxlYXZlcyB0aGUgY3VycmVudCBmdW5jdGlvbiBjYWxsIHdpdGggdGhlIGV4cHJlc3Npb24gbGlzdCAob3JcbiJOb25lIikgYXMgcmV0dXJuIHZhbHVlLlxuXG5XaGVuICJyZXR1cm4iIHBhc3NlcyBjb250cm9sIG91dCBvZiBhICJ0cnkiIHN0YXRlbWVudCB3aXRoIGEgImZpbmFsbHkiXG5jbGF1c2UsIHRoYXQgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZCBiZWZvcmUgcmVhbGx5IGxlYXZpbmcgdGhlXG5mdW5jdGlvbi5cblxuSW4gYSBnZW5lcmF0b3IgZnVuY3Rpb24sIHRoZSAicmV0dXJuIiBzdGF0ZW1lbnQgaW5kaWNhdGVzIHRoYXQgdGhlXG5nZW5lcmF0b3IgaXMgZG9uZSBhbmQgd2lsbCBjYXVzZSAiU3RvcEl0ZXJhdGlvbiIgdG8gYmUgcmFpc2VkLiBUaGVcbnJldHVybmVkIHZhbHVlIChpZiBhbnkpIGlzIHVzZWQgYXMgYW4gYXJndW1lbnQgdG8gY29uc3RydWN0XG4iU3RvcEl0ZXJhdGlvbiIgYW5kIGJlY29tZXMgdGhlICJTdG9wSXRlcmF0aW9uLnZhbHVlIiBhdHRyaWJ1dGUuXG4nLAorICdzZXF1ZW5jZS10eXBlcyc6IHUnXG5FbXVsYXRpbmcgY29udGFpbmVyIHR5cGVzXG4qKioqKioqKioqKioqKioqKioqKioqKioqXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBpbXBsZW1lbnQgY29udGFpbmVyIG9iamVjdHMuXG5Db250YWluZXJzIHVzdWFsbHkgYXJlIHNlcXVlbmNlcyAoc3VjaCBhcyBsaXN0cyBvciB0dXBsZXMpIG9yIG1hcHBpbmdzXG4obGlrZSBkaWN0aW9uYXJpZXMpLCBidXQgY2FuIHJlcHJlc2VudCBvdGhlciBjb250YWluZXJzIGFzIHdlbGwuICBUaGVcbmZpcnN0IHNldCBvZiBtZXRob2RzIGlzIHVzZWQgZWl0aGVyIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSBvciB0b1xuZW11bGF0ZSBhIG1hcHBpbmc7IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgZm9yIGEgc2VxdWVuY2UsIHRoZVxuYWxsb3dhYmxlIGtleXMgc2hvdWxkIGJlIHRoZSBpbnRlZ2VycyAqayogZm9yIHdoaWNoICIwIDw9IGsgPCBOIiB3aGVyZVxuKk4qIGlzIHRoZSBsZW5ndGggb2YgdGhlIHNlcXVlbmNlLCBvciBzbGljZSBvYmplY3RzLCB3aGljaCBkZWZpbmUgYVxucmFuZ2Ugb2YgaXRlbXMuICBJdCBpcyBhbHNvIHJlY29tbWVuZGVkIHRoYXQgbWFwcGluZ3MgcHJvdmlkZSB0aGVcbm1ldGhvZHMgImtleXMoKSIsICJ2YWx1ZXMoKSIsICJpdGVtcygpIiwgImdldCgpIiwgImNsZWFyKCkiLFxuInNldGRlZmF1bHQoKSIsICJwb3AoKSIsICJwb3BpdGVtKCkiLCAiY29weSgpIiwgYW5kICJ1cGRhdGUoKSJcbmJlaGF2aW5nIHNpbWlsYXIgdG8gdGhvc2UgZm9yIFB5dGhvblwncyBzdGFuZGFyZCBkaWN0aW9uYXJ5IG9iamVjdHMuXG5UaGUgImNvbGxlY3Rpb25zIiBtb2R1bGUgcHJvdmlkZXMgYSAiTXV0YWJsZU1hcHBpbmciIGFic3RyYWN0IGJhc2VcbmNsYXNzIHRvIGhlbHAgY3JlYXRlIHRob3NlIG1ldGhvZHMgZnJvbSBhIGJhc2Ugc2V0IG9mICJfX2dldGl0ZW1fXygpIixcbiJfX3NldGl0ZW1fXygpIiwgIl9fZGVsaXRlbV9fKCkiLCBhbmQgImtleXMoKSIuIE11dGFibGUgc2VxdWVuY2VzXG5zaG91bGQgcHJvdmlkZSBtZXRob2RzICJhcHBlbmQoKSIsICJjb3VudCgpIiwgImluZGV4KCkiLCAiZXh0ZW5kKCkiLFxuImluc2VydCgpIiwgInBvcCgpIiwgInJlbW92ZSgpIiwgInJldmVyc2UoKSIgYW5kICJzb3J0KCkiLCBsaWtlIFB5dGhvblxuc3RhbmRhcmQgbGlzdCBvYmplY3RzLiAgRmluYWxseSwgc2VxdWVuY2UgdHlwZXMgc2hvdWxkIGltcGxlbWVudFxuYWRkaXRpb24gKG1lYW5pbmcgY29uY2F0ZW5hdGlvbikgYW5kIG11bHRpcGxpY2F0aW9uIChtZWFuaW5nXG5yZXBldGl0aW9uKSBieSBkZWZpbmluZyB0aGUgbWV0aG9kcyAiX19hZGRfXygpIiwgIl9fcmFkZF9fKCkiLFxuIl9faWFkZF9fKCkiLCAiX19tdWxfXygpIiwgIl9fcm11bF9fKCkiIGFuZCAiX19pbXVsX18oKSIgZGVzY3JpYmVkXG5iZWxvdzsgdGhleSBzaG91bGQgbm90IGRlZmluZSBvdGhlciBudW1lcmljYWwgb3BlcmF0b3JzLiAgSXQgaXNcbnJlY29tbWVuZGVkIHRoYXQgYm90aCBtYXBwaW5ncyBhbmQgc2VxdWVuY2VzIGltcGxlbWVudCB0aGVcbiJfX2NvbnRhaW5zX18oKSIgbWV0aG9kIHRvIGFsbG93IGVmZmljaWVudCB1c2Ugb2YgdGhlICJpbiIgb3BlcmF0b3I7XG5mb3IgbWFwcGluZ3MsICJpbiIgc2hvdWxkIHNlYXJjaCB0aGUgbWFwcGluZ1wncyBrZXlzOyBmb3Igc2VxdWVuY2VzLCBpdFxuc2hvdWxkIHNlYXJjaCB0aHJvdWdoIHRoZSB2YWx1ZXMuICBJdCBpcyBmdXJ0aGVyIHJlY29tbWVuZGVkIHRoYXQgYm90aFxubWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlICJfX2l0ZXJfXygpIiBtZXRob2QgdG8gYWxsb3dcbmVmZmljaWVudCBpdGVyYXRpb24gdGhyb3VnaCB0aGUgY29udGFpbmVyOyBmb3IgbWFwcGluZ3MsICJfX2l0ZXJfXygpIlxuc2hvdWxkIGJlIHRoZSBzYW1lIGFzICJrZXlzKCkiOyBmb3Igc2VxdWVuY2VzLCBpdCBzaG91bGQgaXRlcmF0ZVxudGhyb3VnaCB0aGUgdmFsdWVzLlxuXG5vYmplY3QuX19sZW5fXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiLiAgU2hvdWxkIHJldHVyblxuICAgdGhlIGxlbmd0aCBvZiB0aGUgb2JqZWN0LCBhbiBpbnRlZ2VyICI+PSIgMC4gIEFsc28sIGFuIG9iamVjdCB0aGF0XG4gICBkb2VzblwndCBkZWZpbmUgYSAiX19ib29sX18oKSIgbWV0aG9kIGFuZCB3aG9zZSAiX19sZW5fXygpIiBtZXRob2RcbiAgIHJldHVybnMgemVybyBpcyBjb25zaWRlcmVkIHRvIGJlIGZhbHNlIGluIGEgQm9vbGVhbiBjb250ZXh0LlxuXG5vYmplY3QuX19sZW5ndGhfaGludF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmxlbmd0aF9oaW50KCkiLiBTaG91bGQgcmV0dXJuIGFuXG4gICBlc3RpbWF0ZWQgbGVuZ3RoIGZvciB0aGUgb2JqZWN0ICh3aGljaCBtYXkgYmUgZ3JlYXRlciBvciBsZXNzIHRoYW5cbiAgIHRoZSBhY3R1YWwgbGVuZ3RoKS4gVGhlIGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXIgIj49IiAwLiBUaGlzXG4gICBtZXRob2QgaXMgcHVyZWx5IGFuIG9wdGltaXphdGlvbiBhbmQgaXMgbmV2ZXIgcmVxdWlyZWQgZm9yXG4gICBjb3JyZWN0bmVzcy5cblxuICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG5Ob3RlOiBTbGljaW5nIGlzIGRvbmUgZXhjbHVzaXZlbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRocmVlIG1ldGhvZHMuXG4gIEEgY2FsbCBsaWtlXG5cbiAgICAgYVsxOjJdID0gYlxuXG4gIGlzIHRyYW5zbGF0ZWQgdG9cblxuICAgICBhW3NsaWNlKDEsIDIsIE5vbmUpXSA9IGJcblxuICBhbmQgc28gZm9ydGguICBNaXNzaW5nIHNsaWNlIGl0ZW1zIGFyZSBhbHdheXMgZmlsbGVkIGluIHdpdGggIk5vbmUiLlxuXG5vYmplY3QuX19nZXRpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGV2YWx1YXRpb24gb2YgInNlbGZba2V5XSIuIEZvciBzZXF1ZW5jZSB0eXBlcyxcbiAgIHRoZSBhY2NlcHRlZCBrZXlzIHNob3VsZCBiZSBpbnRlZ2VycyBhbmQgc2xpY2Ugb2JqZWN0cy4gIE5vdGUgdGhhdFxuICAgdGhlIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgaW5kZXhlcyAoaWYgdGhlIGNsYXNzIHdpc2hlc1xuICAgdG8gZW11bGF0ZSBhIHNlcXVlbmNlIHR5cGUpIGlzIHVwIHRvIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLiBJZlxuICAgKmtleSogaXMgb2YgYW4gaW5hcHByb3ByaWF0ZSB0eXBlLCAiVHlwZUVycm9yIiBtYXkgYmUgcmFpc2VkOyBpZiBvZlxuICAgYSB2YWx1ZSBvdXRzaWRlIHRoZSBzZXQgb2YgaW5kZXhlcyBmb3IgdGhlIHNlcXVlbmNlIChhZnRlciBhbnlcbiAgIHNwZWNpYWwgaW50ZXJwcmV0YXRpb24gb2YgbmVnYXRpdmUgdmFsdWVzKSwgIkluZGV4RXJyb3IiIHNob3VsZCBiZVxuICAgcmFpc2VkLiBGb3IgbWFwcGluZyB0eXBlcywgaWYgKmtleSogaXMgbWlzc2luZyAobm90IGluIHRoZVxuICAgY29udGFpbmVyKSwgIktleUVycm9yIiBzaG91bGQgYmUgcmFpc2VkLlxuXG4gICBOb3RlOiAiZm9yIiBsb29wcyBleHBlY3QgdGhhdCBhbiAiSW5kZXhFcnJvciIgd2lsbCBiZSByYWlzZWQgZm9yXG4gICAgIGlsbGVnYWwgaW5kZXhlcyB0byBhbGxvdyBwcm9wZXIgZGV0ZWN0aW9uIG9mIHRoZSBlbmQgb2YgdGhlXG4gICAgIHNlcXVlbmNlLlxuXG5vYmplY3QuX19taXNzaW5nX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgYnkgImRpY3QiLiJfX2dldGl0ZW1fXygpIiB0byBpbXBsZW1lbnQgInNlbGZba2V5XSIgZm9yIGRpY3RcbiAgIHN1YmNsYXNzZXMgd2hlbiBrZXkgaXMgbm90IGluIHRoZSBkaWN0aW9uYXJ5LlxuXG5vYmplY3QuX19zZXRpdGVtX18oc2VsZiwga2V5LCB2YWx1ZSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBhc3NpZ25tZW50IHRvICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgY2hhbmdlcyB0byB0aGUgdmFsdWVzIGZvciBrZXlzLCBvciBpZiBuZXcga2V5c1xuICAgY2FuIGJlIGFkZGVkLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzIGNhbiBiZSByZXBsYWNlZC4gIFRoZVxuICAgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZSByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3JcbiAgIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19kZWxpdGVtX18oc2VsZiwga2V5KVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IGRlbGV0aW9uIG9mICJzZWxmW2tleV0iLiAgU2FtZSBub3RlIGFzIGZvclxuICAgIl9fZ2V0aXRlbV9fKCkiLiAgVGhpcyBzaG91bGQgb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgbWFwcGluZ3MgaWZcbiAgIHRoZSBvYmplY3RzIHN1cHBvcnQgcmVtb3ZhbCBvZiBrZXlzLCBvciBmb3Igc2VxdWVuY2VzIGlmIGVsZW1lbnRzXG4gICBjYW4gYmUgcmVtb3ZlZCBmcm9tIHRoZSBzZXF1ZW5jZS4gIFRoZSBzYW1lIGV4Y2VwdGlvbnMgc2hvdWxkIGJlXG4gICByYWlzZWQgZm9yIGltcHJvcGVyICprZXkqIHZhbHVlcyBhcyBmb3IgdGhlICJfX2dldGl0ZW1fXygpIiBtZXRob2QuXG5cbm9iamVjdC5fX2l0ZXJfXyhzZWxmKVxuXG4gICBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBhbiBpdGVyYXRvciBpcyByZXF1aXJlZCBmb3IgYSBjb250YWluZXIuXG4gICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0IGNhbiBpdGVyYXRlXG4gICBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyLiAgRm9yIG1hcHBpbmdzLCBpdCBzaG91bGRcbiAgIGl0ZXJhdGUgb3ZlciB0aGUga2V5cyBvZiB0aGUgY29udGFpbmVyLlxuXG4gICBJdGVyYXRvciBvYmplY3RzIGFsc28gbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBtZXRob2Q7IHRoZXkgYXJlXG4gICByZXF1aXJlZCB0byByZXR1cm4gdGhlbXNlbHZlcy4gIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGl0ZXJhdG9yXG4gICBvYmplY3RzLCBzZWUgKkl0ZXJhdG9yIFR5cGVzKi5cblxub2JqZWN0Ll9fcmV2ZXJzZWRfXyhzZWxmKVxuXG4gICBDYWxsZWQgKGlmIHByZXNlbnQpIGJ5IHRoZSAicmV2ZXJzZWQoKSIgYnVpbHQtaW4gdG8gaW1wbGVtZW50XG4gICByZXZlcnNlIGl0ZXJhdGlvbi4gIEl0IHNob3VsZCByZXR1cm4gYSBuZXcgaXRlcmF0b3Igb2JqZWN0IHRoYXRcbiAgIGl0ZXJhdGVzIG92ZXIgYWxsIHRoZSBvYmplY3RzIGluIHRoZSBjb250YWluZXIgaW4gcmV2ZXJzZSBvcmRlci5cblxuICAgSWYgdGhlICJfX3JldmVyc2VkX18oKSIgbWV0aG9kIGlzIG5vdCBwcm92aWRlZCwgdGhlICJyZXZlcnNlZCgpIlxuICAgYnVpbHQtaW4gd2lsbCBmYWxsIGJhY2sgdG8gdXNpbmcgdGhlIHNlcXVlbmNlIHByb3RvY29sICgiX19sZW5fXygpIlxuICAgYW5kICJfX2dldGl0ZW1fXygpIikuICBPYmplY3RzIHRoYXQgc3VwcG9ydCB0aGUgc2VxdWVuY2UgcHJvdG9jb2xcbiAgIHNob3VsZCBvbmx5IHByb3ZpZGUgIl9fcmV2ZXJzZWRfXygpIiBpZiB0aGV5IGNhbiBwcm92aWRlIGFuXG4gICBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlIG9uZSBwcm92aWRlZCBieVxuICAgInJldmVyc2VkKCkiLlxuXG5UaGUgbWVtYmVyc2hpcCB0ZXN0IG9wZXJhdG9ycyAoImluIiBhbmQgIm5vdCBpbiIpIGFyZSBub3JtYWxseVxuaW1wbGVtZW50ZWQgYXMgYW4gaXRlcmF0aW9uIHRocm91Z2ggYSBzZXF1ZW5jZS4gIEhvd2V2ZXIsIGNvbnRhaW5lclxub2JqZWN0cyBjYW4gc3VwcGx5IHRoZSBmb2xsb3dpbmcgc3BlY2lhbCBtZXRob2Qgd2l0aCBhIG1vcmUgZWZmaWNpZW50XG5pbXBsZW1lbnRhdGlvbiwgd2hpY2ggYWxzbyBkb2VzIG5vdCByZXF1aXJlIHRoZSBvYmplY3QgYmUgYSBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fY29udGFpbnNfXyhzZWxmLCBpdGVtKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50IG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMuICBTaG91bGQgcmV0dXJuIHRydWVcbiAgIGlmICppdGVtKiBpcyBpbiAqc2VsZiosIGZhbHNlIG90aGVyd2lzZS4gIEZvciBtYXBwaW5nIG9iamVjdHMsIHRoaXNcbiAgIHNob3VsZCBjb25zaWRlciB0aGUga2V5cyBvZiB0aGUgbWFwcGluZyByYXRoZXIgdGhhbiB0aGUgdmFsdWVzIG9yXG4gICB0aGUga2V5LWl0ZW0gcGFpcnMuXG5cbiAgIEZvciBvYmplY3RzIHRoYXQgZG9uXCd0IGRlZmluZSAiX19jb250YWluc19fKCkiLCB0aGUgbWVtYmVyc2hpcCB0ZXN0XG4gICBmaXJzdCB0cmllcyBpdGVyYXRpb24gdmlhICJfX2l0ZXJfXygpIiwgdGhlbiB0aGUgb2xkIHNlcXVlbmNlXG4gICBpdGVyYXRpb24gcHJvdG9jb2wgdmlhICJfX2dldGl0ZW1fXygpIiwgc2VlICp0aGlzIHNlY3Rpb24gaW4gdGhlXG4gICBsYW5ndWFnZSByZWZlcmVuY2UqLlxuJywKKyAnc2hpZnRpbmcnOiB1J1xuU2hpZnRpbmcgb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgc2hpZnRpbmcgb3BlcmF0aW9ucyBoYXZlIGxvd2VyIHByaW9yaXR5IHRoYW4gdGhlIGFyaXRobWV0aWNcbm9wZXJhdGlvbnM6XG5cbiAgIHNoaWZ0X2V4cHIgOjo9IGFfZXhwciB8IHNoaWZ0X2V4cHIgKCAiPDwiIHwgIj4+IiApIGFfZXhwclxuXG5UaGVzZSBvcGVyYXRvcnMgYWNjZXB0IGludGVnZXJzIGFzIGFyZ3VtZW50cy4gIFRoZXkgc2hpZnQgdGhlIGZpcnN0XG5hcmd1bWVudCB0byB0aGUgbGVmdCBvciByaWdodCBieSB0aGUgbnVtYmVyIG9mIGJpdHMgZ2l2ZW4gYnkgdGhlXG5zZWNvbmQgYXJndW1lbnQuXG5cbkEgcmlnaHQgc2hpZnQgYnkgKm4qIGJpdHMgaXMgZGVmaW5lZCBhcyBmbG9vciBkaXZpc2lvbiBieSAicG93KDIsbikiLlxuQSBsZWZ0IHNoaWZ0IGJ5ICpuKiBiaXRzIGlzIGRlZmluZWQgYXMgbXVsdGlwbGljYXRpb24gd2l0aCAicG93KDIsbikiLlxuXG5Ob3RlOiBJbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiwgdGhlIHJpZ2h0LWhhbmQgb3BlcmFuZCBpc1xuICByZXF1aXJlZCB0byBiZSBhdCBtb3N0ICJzeXMubWF4c2l6ZSIuICBJZiB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kIGlzXG4gIGxhcmdlciB0aGFuICJzeXMubWF4c2l6ZSIgYW4gIk92ZXJmbG93RXJyb3IiIGV4Y2VwdGlvbiBpcyByYWlzZWQuXG4nLAorICdzbGljaW5ncyc6IHUnXG5TbGljaW5nc1xuKioqKioqKipcblxuQSBzbGljaW5nIHNlbGVjdHMgYSByYW5nZSBvZiBpdGVtcyBpbiBhIHNlcXVlbmNlIG9iamVjdCAoZS5nLiwgYVxuc3RyaW5nLCB0dXBsZSBvciBsaXN0KS4gIFNsaWNpbmdzIG1heSBiZSB1c2VkIGFzIGV4cHJlc3Npb25zIG9yIGFzXG50YXJnZXRzIGluIGFzc2lnbm1lbnQgb3IgImRlbCIgc3RhdGVtZW50cy4gIFRoZSBzeW50YXggZm9yIGEgc2xpY2luZzpcblxuICAgc2xpY2luZyAgICAgIDo6PSBwcmltYXJ5ICJbIiBzbGljZV9saXN0ICJdIlxuICAgc2xpY2VfbGlzdCAgIDo6PSBzbGljZV9pdGVtICgiLCIgc2xpY2VfaXRlbSkqIFsiLCJdXG4gICBzbGljZV9pdGVtICAgOjo9IGV4cHJlc3Npb24gfCBwcm9wZXJfc2xpY2VcbiAgIHByb3Blcl9zbGljZSA6Oj0gW2xvd2VyX2JvdW5kXSAiOiIgW3VwcGVyX2JvdW5kXSBbICI6IiBbc3RyaWRlXSBdXG4gICBsb3dlcl9ib3VuZCAgOjo9IGV4cHJlc3Npb25cbiAgIHVwcGVyX2JvdW5kICA6Oj0gZXhwcmVzc2lvblxuICAgc3RyaWRlICAgICAgIDo6PSBleHByZXNzaW9uXG5cblRoZXJlIGlzIGFtYmlndWl0eSBpbiB0aGUgZm9ybWFsIHN5bnRheCBoZXJlOiBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2VcbmFuIGV4cHJlc3Npb24gbGlzdCBhbHNvIGxvb2tzIGxpa2UgYSBzbGljZSBsaXN0LCBzbyBhbnkgc3Vic2NyaXB0aW9uXG5jYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzbGljaW5nLiAgUmF0aGVyIHRoYW4gZnVydGhlciBjb21wbGljYXRpbmcgdGhlXG5zeW50YXgsIHRoaXMgaXMgZGlzYW1iaWd1YXRlZCBieSBkZWZpbmluZyB0aGF0IGluIHRoaXMgY2FzZSB0aGVcbmludGVycHJldGF0aW9uIGFzIGEgc3Vic2NyaXB0aW9uIHRha2VzIHByaW9yaXR5IG92ZXIgdGhlXG5pbnRlcnByZXRhdGlvbiBhcyBhIHNsaWNpbmcgKHRoaXMgaXMgdGhlIGNhc2UgaWYgdGhlIHNsaWNlIGxpc3RcbmNvbnRhaW5zIG5vIHByb3BlciBzbGljZSkuXG5cblRoZSBzZW1hbnRpY3MgZm9yIGEgc2xpY2luZyBhcmUgYXMgZm9sbG93cy4gIFRoZSBwcmltYXJ5IGlzIGluZGV4ZWRcbih1c2luZyB0aGUgc2FtZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kIGFzIG5vcm1hbCBzdWJzY3JpcHRpb24pIHdpdGggYVxua2V5IHRoYXQgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgc2xpY2UgbGlzdCwgYXMgZm9sbG93cy4gIElmIHRoZSBzbGljZVxubGlzdCBjb250YWlucyBhdCBsZWFzdCBvbmUgY29tbWEsIHRoZSBrZXkgaXMgYSB0dXBsZSBjb250YWluaW5nIHRoZVxuY29udmVyc2lvbiBvZiB0aGUgc2xpY2UgaXRlbXM7IG90aGVyd2lzZSwgdGhlIGNvbnZlcnNpb24gb2YgdGhlIGxvbmVcbnNsaWNlIGl0ZW0gaXMgdGhlIGtleS4gIFRoZSBjb252ZXJzaW9uIG9mIGEgc2xpY2UgaXRlbSB0aGF0IGlzIGFuXG5leHByZXNzaW9uIGlzIHRoYXQgZXhwcmVzc2lvbi4gIFRoZSBjb252ZXJzaW9uIG9mIGEgcHJvcGVyIHNsaWNlIGlzIGFcbnNsaWNlIG9iamVjdCAoc2VlIHNlY3Rpb24gKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSopIHdob3NlXG4ic3RhcnQiLCAic3RvcCIgYW5kICJzdGVwIiBhdHRyaWJ1dGVzIGFyZSB0aGUgdmFsdWVzIG9mIHRoZVxuZXhwcmVzc2lvbnMgZ2l2ZW4gYXMgbG93ZXIgYm91bmQsIHVwcGVyIGJvdW5kIGFuZCBzdHJpZGUsXG5yZXNwZWN0aXZlbHksIHN1YnN0aXR1dGluZyAiTm9uZSIgZm9yIG1pc3NpbmcgZXhwcmVzc2lvbnMuXG4nLAorICdzcGVjaWFsYXR0cnMnOiB1J1xuU3BlY2lhbCBBdHRyaWJ1dGVzXG4qKioqKioqKioqKioqKioqKipcblxuVGhlIGltcGxlbWVudGF0aW9uIGFkZHMgYSBmZXcgc3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlcyB0byBzZXZlcmFsXG5vYmplY3QgdHlwZXMsIHdoZXJlIHRoZXkgYXJlIHJlbGV2YW50LiAgU29tZSBvZiB0aGVzZSBhcmUgbm90IHJlcG9ydGVkXG5ieSB0aGUgImRpcigpIiBidWlsdC1pbiBmdW5jdGlvbi5cblxub2JqZWN0Ll9fZGljdF9fXG5cbiAgIEEgZGljdGlvbmFyeSBvciBvdGhlciBtYXBwaW5nIG9iamVjdCB1c2VkIHRvIHN0b3JlIGFuIG9iamVjdFwnc1xuICAgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzLlxuXG5pbnN0YW5jZS5fX2NsYXNzX19cblxuICAgVGhlIGNsYXNzIHRvIHdoaWNoIGEgY2xhc3MgaW5zdGFuY2UgYmVsb25ncy5cblxuY2xhc3MuX19iYXNlc19fXG5cbiAgIFRoZSB0dXBsZSBvZiBiYXNlIGNsYXNzZXMgb2YgYSBjbGFzcyBvYmplY3QuXG5cbmNsYXNzLl9fbmFtZV9fXG5cbiAgIFRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvciB0eXBlLlxuXG5jbGFzcy5fX3F1YWxuYW1lX19cblxuICAgVGhlICpxdWFsaWZpZWQgbmFtZSogb2YgdGhlIGNsYXNzIG9yIHR5cGUuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMy5cblxuY2xhc3MuX19tcm9fX1xuXG4gICBUaGlzIGF0dHJpYnV0ZSBpcyBhIHR1cGxlIG9mIGNsYXNzZXMgdGhhdCBhcmUgY29uc2lkZXJlZCB3aGVuXG4gICBsb29raW5nIGZvciBiYXNlIGNsYXNzZXMgZHVyaW5nIG1ldGhvZCByZXNvbHV0aW9uLlxuXG5jbGFzcy5tcm8oKVxuXG4gICBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhIG1ldGFjbGFzcyB0byBjdXN0b21pemUgdGhlXG4gICBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciBmb3IgaXRzIGluc3RhbmNlcy4gIEl0IGlzIGNhbGxlZCBhdCBjbGFzc1xuICAgaW5zdGFudGlhdGlvbiwgYW5kIGl0cyByZXN1bHQgaXMgc3RvcmVkIGluICJfX21yb19fIi5cblxuY2xhc3MuX19zdWJjbGFzc2VzX18oKVxuXG4gICBFYWNoIGNsYXNzIGtlZXBzIGEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gaXRzIGltbWVkaWF0ZVxuICAgc3ViY2xhc3Nlcy4gIFRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IG9mIGFsbCB0aG9zZSByZWZlcmVuY2VzXG4gICBzdGlsbCBhbGl2ZS4gRXhhbXBsZTpcblxuICAgICAgPj4+IGludC5fX3N1YmNsYXNzZXNfXygpXG4gICAgICBbPGNsYXNzIFwnYm9vbFwnPl1cblxuLVsgRm9vdG5vdGVzIF0tXG5cblsxXSBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIHRoZXNlIHNwZWNpYWwgbWV0aG9kcyBtYXkgYmUgZm91bmRcbiAgICBpbiB0aGUgUHl0aG9uIFJlZmVyZW5jZSBNYW51YWwgKCpCYXNpYyBjdXN0b21pemF0aW9uKikuXG5cblsyXSBBcyBhIGNvbnNlcXVlbmNlLCB0aGUgbGlzdCAiWzEsIDJdIiBpcyBjb25zaWRlcmVkIGVxdWFsIHRvXG4gICAgIlsxLjAsIDIuMF0iLCBhbmQgc2ltaWxhcmx5IGZvciB0dXBsZXMuXG5cblszXSBUaGV5IG11c3QgaGF2ZSBzaW5jZSB0aGUgcGFyc2VyIGNhblwndCB0ZWxsIHRoZSB0eXBlIG9mIHRoZVxuICAgIG9wZXJhbmRzLlxuXG5bNF0gQ2FzZWQgY2hhcmFjdGVycyBhcmUgdGhvc2Ugd2l0aCBnZW5lcmFsIGNhdGVnb3J5IHByb3BlcnR5XG4gICAgYmVpbmcgb25lIG9mICJMdSIgKExldHRlciwgdXBwZXJjYXNlKSwgIkxsIiAoTGV0dGVyLCBsb3dlcmNhc2UpLFxuICAgIG9yICJMdCIgKExldHRlciwgdGl0bGVjYXNlKS5cblxuWzVdIFRvIGZvcm1hdCBvbmx5IGEgdHVwbGUgeW91IHNob3VsZCB0aGVyZWZvcmUgcHJvdmlkZSBhXG4gICAgc2luZ2xldG9uIHR1cGxlIHdob3NlIG9ubHkgZWxlbWVudCBpcyB0aGUgdHVwbGUgdG8gYmUgZm9ybWF0dGVkLlxuJywKKyAnc3BlY2lhbG5hbWVzJzogdSdcblNwZWNpYWwgbWV0aG9kIG5hbWVzXG4qKioqKioqKioqKioqKioqKioqKlxuXG5BIGNsYXNzIGNhbiBpbXBsZW1lbnQgY2VydGFpbiBvcGVyYXRpb25zIHRoYXQgYXJlIGludm9rZWQgYnkgc3BlY2lhbFxuc3ludGF4IChzdWNoIGFzIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBvciBzdWJzY3JpcHRpbmcgYW5kIHNsaWNpbmcpIGJ5XG5kZWZpbmluZyBtZXRob2RzIHdpdGggc3BlY2lhbCBuYW1lcy4gVGhpcyBpcyBQeXRob25cJ3MgYXBwcm9hY2ggdG9cbipvcGVyYXRvciBvdmVybG9hZGluZyosIGFsbG93aW5nIGNsYXNzZXMgdG8gZGVmaW5lIHRoZWlyIG93biBiZWhhdmlvclxud2l0aCByZXNwZWN0IHRvIGxhbmd1YWdlIG9wZXJhdG9ycy4gIEZvciBpbnN0YW5jZSwgaWYgYSBjbGFzcyBkZWZpbmVzXG5hIG1ldGhvZCBuYW1lZCAiX19nZXRpdGVtX18oKSIsIGFuZCAieCIgaXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyxcbnRoZW4gInhbaV0iIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byAidHlwZSh4KS5fX2dldGl0ZW1fXyh4LCBpKSIuXG5FeGNlcHQgd2hlcmUgbWVudGlvbmVkLCBhdHRlbXB0cyB0byBleGVjdXRlIGFuIG9wZXJhdGlvbiByYWlzZSBhblxuZXhjZXB0aW9uIHdoZW4gbm8gYXBwcm9wcmlhdGUgbWV0aG9kIGlzIGRlZmluZWQgKHR5cGljYWxseVxuIkF0dHJpYnV0ZUVycm9yIiBvciAiVHlwZUVycm9yIikuXG5cbldoZW4gaW1wbGVtZW50aW5nIGEgY2xhc3MgdGhhdCBlbXVsYXRlcyBhbnkgYnVpbHQtaW4gdHlwZSwgaXQgaXNcbmltcG9ydGFudCB0aGF0IHRoZSBlbXVsYXRpb24gb25seSBiZSBpbXBsZW1lbnRlZCB0byB0aGUgZGVncmVlIHRoYXQgaXRcbm1ha2VzIHNlbnNlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1vZGVsbGVkLiAgRm9yIGV4YW1wbGUsIHNvbWVcbnNlcXVlbmNlcyBtYXkgd29yayB3ZWxsIHdpdGggcmV0cmlldmFsIG9mIGluZGl2aWR1YWwgZWxlbWVudHMsIGJ1dFxuZXh0cmFjdGluZyBhIHNsaWNlIG1heSBub3QgbWFrZSBzZW5zZS4gIChPbmUgZXhhbXBsZSBvZiB0aGlzIGlzIHRoZVxuIk5vZGVMaXN0IiBpbnRlcmZhY2UgaW4gdGhlIFczQ1wncyBEb2N1bWVudCBPYmplY3QgTW9kZWwuKVxuXG5cbkJhc2ljIGN1c3RvbWl6YXRpb25cbj09PT09PT09PT09PT09PT09PT1cblxub2JqZWN0Ll9fbmV3X18oY2xzWywgLi4uXSlcblxuICAgQ2FsbGVkIHRvIGNyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBjbGFzcyAqY2xzKi4gICJfX25ld19fKCkiIGlzIGFcbiAgIHN0YXRpYyBtZXRob2QgKHNwZWNpYWwtY2FzZWQgc28geW91IG5lZWQgbm90IGRlY2xhcmUgaXQgYXMgc3VjaClcbiAgIHRoYXQgdGFrZXMgdGhlIGNsYXNzIG9mIHdoaWNoIGFuIGluc3RhbmNlIHdhcyByZXF1ZXN0ZWQgYXMgaXRzXG4gICBmaXJzdCBhcmd1bWVudC4gIFRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSB0aG9zZSBwYXNzZWQgdG8gdGhlXG4gICBvYmplY3QgY29uc3RydWN0b3IgZXhwcmVzc2lvbiAodGhlIGNhbGwgdG8gdGhlIGNsYXNzKS4gIFRoZSByZXR1cm5cbiAgIHZhbHVlIG9mICJfX25ld19fKCkiIHNob3VsZCBiZSB0aGUgbmV3IG9iamVjdCBpbnN0YW5jZSAodXN1YWxseSBhblxuICAgaW5zdGFuY2Ugb2YgKmNscyopLlxuXG4gICBUeXBpY2FsIGltcGxlbWVudGF0aW9ucyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIGNsYXNzIGJ5XG4gICBpbnZva2luZyB0aGUgc3VwZXJjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgdXNpbmdcbiAgICJzdXBlcihjdXJyZW50Y2xhc3MsIGNscykuX19uZXdfXyhjbHNbLCAuLi5dKSIgd2l0aCBhcHByb3ByaWF0ZVxuICAgYXJndW1lbnRzIGFuZCB0aGVuIG1vZGlmeWluZyB0aGUgbmV3bHktY3JlYXRlZCBpbnN0YW5jZSBhc1xuICAgbmVjZXNzYXJ5IGJlZm9yZSByZXR1cm5pbmcgaXQuXG5cbiAgIElmICJfX25ld19fKCkiIHJldHVybnMgYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIGJlIGludm9rZWQgbGlrZVxuICAgIl9faW5pdF9fKHNlbGZbLCAuLi5dKSIsIHdoZXJlICpzZWxmKiBpcyB0aGUgbmV3IGluc3RhbmNlIGFuZCB0aGVcbiAgIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGFzIHdlcmUgcGFzc2VkIHRvICJfX25ld19fKCkiLlxuXG4gICBJZiAiX19uZXdfXygpIiBkb2VzIG5vdCByZXR1cm4gYW4gaW5zdGFuY2Ugb2YgKmNscyosIHRoZW4gdGhlIG5ld1xuICAgaW5zdGFuY2VcJ3MgIl9faW5pdF9fKCkiIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkLlxuXG4gICAiX19uZXdfXygpIiBpcyBpbnRlbmRlZCBtYWlubHkgdG8gYWxsb3cgc3ViY2xhc3NlcyBvZiBpbW11dGFibGVcbiAgIHR5cGVzIChsaWtlIGludCwgc3RyLCBvciB0dXBsZSkgdG8gY3VzdG9taXplIGluc3RhbmNlIGNyZWF0aW9uLiAgSXRcbiAgIGlzIGFsc28gY29tbW9ubHkgb3ZlcnJpZGRlbiBpbiBjdXN0b20gbWV0YWNsYXNzZXMgaW4gb3JkZXIgdG9cbiAgIGN1c3RvbWl6ZSBjbGFzcyBjcmVhdGlvbi5cblxub2JqZWN0Ll9faW5pdF9fKHNlbGZbLCAuLi5dKVxuXG4gICBDYWxsZWQgYWZ0ZXIgdGhlIGluc3RhbmNlIGhhcyBiZWVuIGNyZWF0ZWQgKGJ5ICJfX25ld19fKCkiKSwgYnV0XG4gICBiZWZvcmUgaXQgaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4gIFRoZSBhcmd1bWVudHMgYXJlIHRob3NlXG4gICBwYXNzZWQgdG8gdGhlIGNsYXNzIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24uICBJZiBhIGJhc2UgY2xhc3MgaGFzIGFuXG4gICAiX19pbml0X18oKSIgbWV0aG9kLCB0aGUgZGVyaXZlZCBjbGFzc1wncyAiX19pbml0X18oKSIgbWV0aG9kLCBpZlxuICAgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdCB0byBlbnN1cmUgcHJvcGVyIGluaXRpYWxpemF0aW9uIG9mIHRoZVxuICAgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZTsgZm9yIGV4YW1wbGU6XG4gICAiQmFzZUNsYXNzLl9faW5pdF9fKHNlbGYsIFthcmdzLi4uXSkiLlxuXG4gICBCZWNhdXNlICJfX25ld19fKCkiIGFuZCAiX19pbml0X18oKSIgd29yayB0b2dldGhlciBpbiBjb25zdHJ1Y3RpbmdcbiAgIG9iamVjdHMgKCJfX25ld19fKCkiIHRvIGNyZWF0ZSBpdCwgYW5kICJfX2luaXRfXygpIiB0byBjdXN0b21pc2VcbiAgIGl0KSwgbm8gbm9uLSJOb25lIiB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQgYnkgIl9faW5pdF9fKCkiOyBkb2luZyBzb1xuICAgd2lsbCBjYXVzZSBhICJUeXBlRXJyb3IiIHRvIGJlIHJhaXNlZCBhdCBydW50aW1lLlxuXG5vYmplY3QuX19kZWxfXyhzZWxmKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgYWJvdXQgdG8gYmUgZGVzdHJveWVkLiAgVGhpcyBpcyBhbHNvXG4gICBjYWxsZWQgYSBkZXN0cnVjdG9yLiAgSWYgYSBiYXNlIGNsYXNzIGhhcyBhICJfX2RlbF9fKCkiIG1ldGhvZCwgdGhlXG4gICBkZXJpdmVkIGNsYXNzXCdzICJfX2RlbF9fKCkiIG1ldGhvZCwgaWYgYW55LCBtdXN0IGV4cGxpY2l0bHkgY2FsbCBpdFxuICAgdG8gZW5zdXJlIHByb3BlciBkZWxldGlvbiBvZiB0aGUgYmFzZSBjbGFzcyBwYXJ0IG9mIHRoZSBpbnN0YW5jZS5cbiAgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSAodGhvdWdoIG5vdCByZWNvbW1lbmRlZCEpIGZvciB0aGVcbiAgICJfX2RlbF9fKCkiIG1ldGhvZCB0byBwb3N0cG9uZSBkZXN0cnVjdGlvbiBvZiB0aGUgaW5zdGFuY2UgYnlcbiAgIGNyZWF0aW5nIGEgbmV3IHJlZmVyZW5jZSB0byBpdC4gIEl0IG1heSB0aGVuIGJlIGNhbGxlZCBhdCBhIGxhdGVyXG4gICB0aW1lIHdoZW4gdGhpcyBuZXcgcmVmZXJlbmNlIGlzIGRlbGV0ZWQuICBJdCBpcyBub3QgZ3VhcmFudGVlZCB0aGF0XG4gICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBjYWxsZWQgZm9yIG9iamVjdHMgdGhhdCBzdGlsbCBleGlzdCB3aGVuXG4gICB0aGUgaW50ZXJwcmV0ZXIgZXhpdHMuXG5cbiAgIE5vdGU6ICJkZWwgeCIgZG9lc25cJ3QgZGlyZWN0bHkgY2FsbCAieC5fX2RlbF9fKCkiIC0tLSB0aGUgZm9ybWVyXG4gICAgIGRlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgIngiIGJ5IG9uZSwgYW5kIHRoZSBsYXR0ZXIgaXNcbiAgICAgb25seSBjYWxsZWQgd2hlbiAieCJcJ3MgcmVmZXJlbmNlIGNvdW50IHJlYWNoZXMgemVyby4gIFNvbWUgY29tbW9uXG4gICAgIHNpdHVhdGlvbnMgdGhhdCBtYXkgcHJldmVudCB0aGUgcmVmZXJlbmNlIGNvdW50IG9mIGFuIG9iamVjdCBmcm9tXG4gICAgIGdvaW5nIHRvIHplcm8gaW5jbHVkZTogY2lyY3VsYXIgcmVmZXJlbmNlcyBiZXR3ZWVuIG9iamVjdHMgKGUuZy4sXG4gICAgIGEgZG91Ymx5LWxpbmtlZCBsaXN0IG9yIGEgdHJlZSBkYXRhIHN0cnVjdHVyZSB3aXRoIHBhcmVudCBhbmRcbiAgICAgY2hpbGQgcG9pbnRlcnMpOyBhIHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSBvZlxuICAgICBhIGZ1bmN0aW9uIHRoYXQgY2F1Z2h0IGFuIGV4Y2VwdGlvbiAodGhlIHRyYWNlYmFjayBzdG9yZWQgaW5cbiAgICAgInN5cy5leGNfaW5mbygpWzJdIiBrZWVwcyB0aGUgc3RhY2sgZnJhbWUgYWxpdmUpOyBvciBhIHJlZmVyZW5jZVxuICAgICB0byB0aGUgb2JqZWN0IG9uIHRoZSBzdGFjayBmcmFtZSB0aGF0IHJhaXNlZCBhbiB1bmhhbmRsZWRcbiAgICAgZXhjZXB0aW9uIGluIGludGVyYWN0aXZlIG1vZGUgKHRoZSB0cmFjZWJhY2sgc3RvcmVkIGluXG4gICAgICJzeXMubGFzdF90cmFjZWJhY2siIGtlZXBzIHRoZSBzdGFjayBmcmFtZSBhbGl2ZSkuICBUaGUgZmlyc3RcbiAgICAgc2l0dWF0aW9uIGNhbiBvbmx5IGJlIHJlbWVkaWVkIGJ5IGV4cGxpY2l0bHkgYnJlYWtpbmcgdGhlIGN5Y2xlcztcbiAgICAgdGhlIHNlY29uZCBjYW4gYmUgcmVzb2x2ZWQgYnkgZnJlZWluZyB0aGUgcmVmZXJlbmNlIHRvIHRoZVxuICAgICB0cmFjZWJhY2sgb2JqZWN0IHdoZW4gaXQgaXMgbm8gbG9uZ2VyIHVzZWZ1bCwgYW5kIHRoZSB0aGlyZCBjYW5cbiAgICAgYmUgcmVzb2x2ZWQgYnkgc3RvcmluZyAiTm9uZSIgaW4gInN5cy5sYXN0X3RyYWNlYmFjayIuIENpcmN1bGFyXG4gICAgIHJlZmVyZW5jZXMgd2hpY2ggYXJlIGdhcmJhZ2UgYXJlIGRldGVjdGVkIGFuZCBjbGVhbmVkIHVwIHdoZW4gdGhlXG4gICAgIGN5Y2xpYyBnYXJiYWdlIGNvbGxlY3RvciBpcyBlbmFibGVkIChpdFwncyBvbiBieSBkZWZhdWx0KS4gUmVmZXJcbiAgICAgdG8gdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSAiZ2MiIG1vZHVsZSBmb3IgbW9yZSBpbmZvcm1hdGlvblxuICAgICBhYm91dCB0aGlzIHRvcGljLlxuXG4gICBXYXJuaW5nOiBEdWUgdG8gdGhlIHByZWNhcmlvdXMgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaFxuICAgICAiX19kZWxfXygpIiBtZXRob2RzIGFyZSBpbnZva2VkLCBleGNlcHRpb25zIHRoYXQgb2NjdXIgZHVyaW5nXG4gICAgIHRoZWlyIGV4ZWN1dGlvbiBhcmUgaWdub3JlZCwgYW5kIGEgd2FybmluZyBpcyBwcmludGVkIHRvXG4gICAgICJzeXMuc3RkZXJyIiBpbnN0ZWFkLiBBbHNvLCB3aGVuICJfX2RlbF9fKCkiIGlzIGludm9rZWQgaW5cbiAgICAgcmVzcG9uc2UgdG8gYSBtb2R1bGUgYmVpbmcgZGVsZXRlZCAoZS5nLiwgd2hlbiBleGVjdXRpb24gb2YgdGhlXG4gICAgIHByb2dyYW0gaXMgZG9uZSksIG90aGVyIGdsb2JhbHMgcmVmZXJlbmNlZCBieSB0aGUgIl9fZGVsX18oKSJcbiAgICAgbWV0aG9kIG1heSBhbHJlYWR5IGhhdmUgYmVlbiBkZWxldGVkIG9yIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nXG4gICAgIHRvcm4gZG93biAoZS5nLiB0aGUgaW1wb3J0IG1hY2hpbmVyeSBzaHV0dGluZyBkb3duKS4gIEZvciB0aGlzXG4gICAgIHJlYXNvbiwgIl9fZGVsX18oKSIgbWV0aG9kcyBzaG91bGQgZG8gdGhlIGFic29sdXRlIG1pbmltdW0gbmVlZGVkXG4gICAgIHRvIG1haW50YWluIGV4dGVybmFsIGludmFyaWFudHMuICBTdGFydGluZyB3aXRoIHZlcnNpb24gMS41LFxuICAgICBQeXRob24gZ3VhcmFudGVlcyB0aGF0IGdsb2JhbHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCBhIHNpbmdsZVxuICAgICB1bmRlcnNjb3JlIGFyZSBkZWxldGVkIGZyb20gdGhlaXIgbW9kdWxlIGJlZm9yZSBvdGhlciBnbG9iYWxzIGFyZVxuICAgICBkZWxldGVkOyBpZiBubyBvdGhlciByZWZlcmVuY2VzIHRvIHN1Y2ggZ2xvYmFscyBleGlzdCwgdGhpcyBtYXlcbiAgICAgaGVscCBpbiBhc3N1cmluZyB0aGF0IGltcG9ydGVkIG1vZHVsZXMgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdCB0aGVcbiAgICAgdGltZSB3aGVuIHRoZSAiX19kZWxfXygpIiBtZXRob2QgaXMgY2FsbGVkLlxuXG5vYmplY3QuX19yZXByX18oc2VsZilcblxuICAgQ2FsbGVkIGJ5IHRoZSAicmVwcigpIiBidWlsdC1pbiBmdW5jdGlvbiB0byBjb21wdXRlIHRoZSAib2ZmaWNpYWwiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiAgSWYgYXQgYWxsIHBvc3NpYmxlLCB0aGlzXG4gICBzaG91bGQgbG9vayBsaWtlIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb24gdGhhdCBjb3VsZCBiZSB1c2VkIHRvXG4gICByZWNyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSAoZ2l2ZW4gYW4gYXBwcm9wcmlhdGVcbiAgIGVudmlyb25tZW50KS4gIElmIHRoaXMgaXMgbm90IHBvc3NpYmxlLCBhIHN0cmluZyBvZiB0aGUgZm9ybVxuICAgIjwuLi5zb21lIHVzZWZ1bCBkZXNjcmlwdGlvbi4uLj4iIHNob3VsZCBiZSByZXR1cm5lZC4gVGhlIHJldHVyblxuICAgdmFsdWUgbXVzdCBiZSBhIHN0cmluZyBvYmplY3QuIElmIGEgY2xhc3MgZGVmaW5lcyAiX19yZXByX18oKSIgYnV0XG4gICBub3QgIl9fc3RyX18oKSIsIHRoZW4gIl9fcmVwcl9fKCkiIGlzIGFsc28gdXNlZCB3aGVuIGFuICJpbmZvcm1hbCJcbiAgIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBpbnN0YW5jZXMgb2YgdGhhdCBjbGFzcyBpcyByZXF1aXJlZC5cblxuICAgVGhpcyBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgZGVidWdnaW5nLCBzbyBpdCBpcyBpbXBvcnRhbnQgdGhhdCB0aGVcbiAgIHJlcHJlc2VudGF0aW9uIGlzIGluZm9ybWF0aW9uLXJpY2ggYW5kIHVuYW1iaWd1b3VzLlxuXG5vYmplY3QuX19zdHJfXyhzZWxmKVxuXG4gICBDYWxsZWQgYnkgInN0cihvYmplY3QpIiBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9ucyAiZm9ybWF0KCkiIGFuZFxuICAgInByaW50KCkiIHRvIGNvbXB1dGUgdGhlICJpbmZvcm1hbCIgb3IgbmljZWx5IHByaW50YWJsZSBzdHJpbmdcbiAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIG9iamVjdC4gIFRoZSByZXR1cm4gdmFsdWUgbXVzdCBiZSBhICpzdHJpbmcqXG4gICBvYmplY3QuXG5cbiAgIFRoaXMgbWV0aG9kIGRpZmZlcnMgZnJvbSAib2JqZWN0Ll9fcmVwcl9fKCkiIGluIHRoYXQgdGhlcmUgaXMgbm9cbiAgIGV4cGVjdGF0aW9uIHRoYXQgIl9fc3RyX18oKSIgcmV0dXJuIGEgdmFsaWQgUHl0aG9uIGV4cHJlc3Npb246IGFcbiAgIG1vcmUgY29udmVuaWVudCBvciBjb25jaXNlIHJlcHJlc2VudGF0aW9uIGNhbiBiZSB1c2VkLlxuXG4gICBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGJ5IHRoZSBidWlsdC1pbiB0eXBlICJvYmplY3QiXG4gICBjYWxscyAib2JqZWN0Ll9fcmVwcl9fKCkiLlxuXG5vYmplY3QuX19ieXRlc19fKHNlbGYpXG5cbiAgIENhbGxlZCBieSAiYnl0ZXMoKSIgdG8gY29tcHV0ZSBhIGJ5dGUtc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuXG4gICBvYmplY3QuIFRoaXMgc2hvdWxkIHJldHVybiBhICJieXRlcyIgb2JqZWN0LlxuXG5vYmplY3QuX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYylcblxuICAgQ2FsbGVkIGJ5IHRoZSAiZm9ybWF0KCkiIGJ1aWx0LWluIGZ1bmN0aW9uIChhbmQgYnkgZXh0ZW5zaW9uLCB0aGVcbiAgICJzdHIuZm9ybWF0KCkiIG1ldGhvZCBvZiBjbGFzcyAic3RyIikgdG8gcHJvZHVjZSBhICJmb3JtYXR0ZWQiXG4gICBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gb2JqZWN0LiBUaGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyBhXG4gICBzdHJpbmcgdGhhdCBjb250YWlucyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBmb3JtYXR0aW5nIG9wdGlvbnNcbiAgIGRlc2lyZWQuIFRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgImZvcm1hdF9zcGVjIiBhcmd1bWVudCBpcyB1cCB0b1xuICAgdGhlIHR5cGUgaW1wbGVtZW50aW5nICJfX2Zvcm1hdF9fKCkiLCBob3dldmVyIG1vc3QgY2xhc3NlcyB3aWxsXG4gICBlaXRoZXIgZGVsZWdhdGUgZm9ybWF0dGluZyB0byBvbmUgb2YgdGhlIGJ1aWx0LWluIHR5cGVzLCBvciB1c2UgYVxuICAgc2ltaWxhciBmb3JtYXR0aW5nIG9wdGlvbiBzeW50YXguXG5cbiAgIFNlZSAqRm9ybWF0IFNwZWNpZmljYXRpb24gTWluaS1MYW5ndWFnZSogZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlXG4gICBzdGFuZGFyZCBmb3JtYXR0aW5nIHN5bnRheC5cblxuICAgVGhlIHJldHVybiB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nIG9iamVjdC5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuNDogVGhlIF9fZm9ybWF0X18gbWV0aG9kIG9mICJvYmplY3QiIGl0c2VsZlxuICAgcmFpc2VzIGEgIlR5cGVFcnJvciIgaWYgcGFzc2VkIGFueSBub24tZW1wdHkgc3RyaW5nLlxuXG5vYmplY3QuX19sdF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fbGVfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2VxX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19uZV9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fZ3RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2dlX18oc2VsZiwgb3RoZXIpXG5cbiAgIFRoZXNlIGFyZSB0aGUgc28tY2FsbGVkICJyaWNoIGNvbXBhcmlzb24iIG1ldGhvZHMuIFRoZVxuICAgY29ycmVzcG9uZGVuY2UgYmV0d2VlbiBvcGVyYXRvciBzeW1ib2xzIGFuZCBtZXRob2QgbmFtZXMgaXMgYXNcbiAgIGZvbGxvd3M6ICJ4PHkiIGNhbGxzICJ4Ll9fbHRfXyh5KSIsICJ4PD15IiBjYWxscyAieC5fX2xlX18oeSkiLFxuICAgIng9PXkiIGNhbGxzICJ4Ll9fZXFfXyh5KSIsICJ4IT15IiBjYWxscyAieC5fX25lX18oeSkiLCAieD55IiBjYWxsc1xuICAgInguX19ndF9fKHkpIiwgYW5kICJ4Pj15IiBjYWxscyAieC5fX2dlX18oeSkiLlxuXG4gICBBIHJpY2ggY29tcGFyaXNvbiBtZXRob2QgbWF5IHJldHVybiB0aGUgc2luZ2xldG9uICJOb3RJbXBsZW1lbnRlZCJcbiAgIGlmIGl0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgb3BlcmF0aW9uIGZvciBhIGdpdmVuIHBhaXIgb2ZcbiAgIGFyZ3VtZW50cy4gQnkgY29udmVudGlvbiwgIkZhbHNlIiBhbmQgIlRydWUiIGFyZSByZXR1cm5lZCBmb3IgYVxuICAgc3VjY2Vzc2Z1bCBjb21wYXJpc29uLiBIb3dldmVyLCB0aGVzZSBtZXRob2RzIGNhbiByZXR1cm4gYW55IHZhbHVlLFxuICAgc28gaWYgdGhlIGNvbXBhcmlzb24gb3BlcmF0b3IgaXMgdXNlZCBpbiBhIEJvb2xlYW4gY29udGV4dCAoZS5nLixcbiAgIGluIHRoZSBjb25kaXRpb24gb2YgYW4gImlmIiBzdGF0ZW1lbnQpLCBQeXRob24gd2lsbCBjYWxsICJib29sKCkiXG4gICBvbiB0aGUgdmFsdWUgdG8gZGV0ZXJtaW5lIGlmIHRoZSByZXN1bHQgaXMgdHJ1ZSBvciBmYWxzZS5cblxuICAgQnkgZGVmYXVsdCwgIl9fbmVfXygpIiBkZWxlZ2F0ZXMgdG8gIl9fZXFfXygpIiBhbmQgaW52ZXJ0cyB0aGVcbiAgIHJlc3VsdCB1bmxlc3MgaXQgaXMgIk5vdEltcGxlbWVudGVkIi4gIFRoZXJlIGFyZSBubyBvdGhlciBpbXBsaWVkXG4gICByZWxhdGlvbnNoaXBzIGFtb25nIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycywgZm9yIGV4YW1wbGUsIHRoZVxuICAgdHJ1dGggb2YgIih4PHkgb3IgeD09eSkiIGRvZXMgbm90IGltcGx5ICJ4PD15Ii4gVG8gYXV0b21hdGljYWxseVxuICAgZ2VuZXJhdGUgb3JkZXJpbmcgb3BlcmF0aW9ucyBmcm9tIGEgc2luZ2xlIHJvb3Qgb3BlcmF0aW9uLCBzZWVcbiAgICJmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcoKSIuXG5cbiAgIFNlZSB0aGUgcGFyYWdyYXBoIG9uICJfX2hhc2hfXygpIiBmb3Igc29tZSBpbXBvcnRhbnQgbm90ZXMgb25cbiAgIGNyZWF0aW5nICpoYXNoYWJsZSogb2JqZWN0cyB3aGljaCBzdXBwb3J0IGN1c3RvbSBjb21wYXJpc29uXG4gICBvcGVyYXRpb25zIGFuZCBhcmUgdXNhYmxlIGFzIGRpY3Rpb25hcnkga2V5cy5cblxuICAgVGhlcmUgYXJlIG5vIHN3YXBwZWQtYXJndW1lbnQgdmVyc2lvbnMgb2YgdGhlc2UgbWV0aG9kcyAodG8gYmUgdXNlZFxuICAgd2hlbiB0aGUgbGVmdCBhcmd1bWVudCBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gYnV0IHRoZSByaWdodFxuICAgYXJndW1lbnQgZG9lcyk7IHJhdGhlciwgIl9fbHRfXygpIiBhbmQgIl9fZ3RfXygpIiBhcmUgZWFjaCBvdGhlclwnc1xuICAgcmVmbGVjdGlvbiwgIl9fbGVfXygpIiBhbmQgIl9fZ2VfXygpIiBhcmUgZWFjaCBvdGhlclwncyByZWZsZWN0aW9uLFxuICAgYW5kICJfX2VxX18oKSIgYW5kICJfX25lX18oKSIgYXJlIHRoZWlyIG93biByZWZsZWN0aW9uLiBJZiB0aGVcbiAgIG9wZXJhbmRzIGFyZSBvZiBkaWZmZXJlbnQgdHlwZXMsIGFuZCByaWdodCBvcGVyYW5kXCdzIHR5cGUgaXMgYVxuICAgZGlyZWN0IG9yIGluZGlyZWN0IHN1YmNsYXNzIG9mIHRoZSBsZWZ0IG9wZXJhbmRcJ3MgdHlwZSwgdGhlXG4gICByZWZsZWN0ZWQgbWV0aG9kIG9mIHRoZSByaWdodCBvcGVyYW5kIGhhcyBwcmlvcml0eSwgb3RoZXJ3aXNlIHRoZVxuICAgbGVmdCBvcGVyYW5kXCdzIG1ldGhvZCBoYXMgcHJpb3JpdHkuICBWaXJ0dWFsIHN1YmNsYXNzaW5nIGlzIG5vdFxuICAgY29uc2lkZXJlZC5cblxub2JqZWN0Ll9faGFzaF9fKHNlbGYpXG5cbiAgIENhbGxlZCBieSBidWlsdC1pbiBmdW5jdGlvbiAiaGFzaCgpIiBhbmQgZm9yIG9wZXJhdGlvbnMgb24gbWVtYmVyc1xuICAgb2YgaGFzaGVkIGNvbGxlY3Rpb25zIGluY2x1ZGluZyAic2V0IiwgImZyb3plbnNldCIsIGFuZCAiZGljdCIuXG4gICAiX19oYXNoX18oKSIgc2hvdWxkIHJldHVybiBhbiBpbnRlZ2VyLiAgVGhlIG9ubHkgcmVxdWlyZWQgcHJvcGVydHlcbiAgIGlzIHRoYXQgb2JqZWN0cyB3aGljaCBjb21wYXJlIGVxdWFsIGhhdmUgdGhlIHNhbWUgaGFzaCB2YWx1ZTsgaXQgaXNcbiAgIGFkdmlzZWQgdG8gc29tZWhvdyBtaXggdG9nZXRoZXIgKGUuZy4gdXNpbmcgZXhjbHVzaXZlIG9yKSB0aGUgaGFzaFxuICAgdmFsdWVzIGZvciB0aGUgY29tcG9uZW50cyBvZiB0aGUgb2JqZWN0IHRoYXQgYWxzbyBwbGF5IGEgcGFydCBpblxuICAgY29tcGFyaXNvbiBvZiBvYmplY3RzLlxuXG4gICBOb3RlOiAiaGFzaCgpIiB0cnVuY2F0ZXMgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4gb2JqZWN0XCdzXG4gICAgIGN1c3RvbSAiX19oYXNoX18oKSIgbWV0aG9kIHRvIHRoZSBzaXplIG9mIGEgIlB5X3NzaXplX3QiLiAgVGhpc1xuICAgICBpcyB0eXBpY2FsbHkgOCBieXRlcyBvbiA2NC1iaXQgYnVpbGRzIGFuZCA0IGJ5dGVzIG9uIDMyLWJpdFxuICAgICBidWlsZHMuIElmIGFuIG9iamVjdFwncyAgICJfX2hhc2hfXygpIiBtdXN0IGludGVyb3BlcmF0ZSBvbiBidWlsZHNcbiAgICAgb2YgZGlmZmVyZW50IGJpdCBzaXplcywgYmUgc3VyZSB0byBjaGVjayB0aGUgd2lkdGggb24gYWxsXG4gICAgIHN1cHBvcnRlZCBidWlsZHMuICBBbiBlYXN5IHdheSB0byBkbyB0aGlzIGlzIHdpdGggInB5dGhvbiAtY1xuICAgICAiaW1wb3J0IHN5czsgcHJpbnQoc3lzLmhhc2hfaW5mby53aWR0aCkiIi5cblxuICAgSWYgYSBjbGFzcyBkb2VzIG5vdCBkZWZpbmUgYW4gIl9fZXFfXygpIiBtZXRob2QgaXQgc2hvdWxkIG5vdFxuICAgZGVmaW5lIGEgIl9faGFzaF9fKCkiIG9wZXJhdGlvbiBlaXRoZXI7IGlmIGl0IGRlZmluZXMgIl9fZXFfXygpIlxuICAgYnV0IG5vdCAiX19oYXNoX18oKSIsIGl0cyBpbnN0YW5jZXMgd2lsbCBub3QgYmUgdXNhYmxlIGFzIGl0ZW1zIGluXG4gICBoYXNoYWJsZSBjb2xsZWN0aW9ucy4gIElmIGEgY2xhc3MgZGVmaW5lcyBtdXRhYmxlIG9iamVjdHMgYW5kXG4gICBpbXBsZW1lbnRzIGFuICJfX2VxX18oKSIgbWV0aG9kLCBpdCBzaG91bGQgbm90IGltcGxlbWVudFxuICAgIl9faGFzaF9fKCkiLCBzaW5jZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaGFzaGFibGUgY29sbGVjdGlvbnNcbiAgIHJlcXVpcmVzIHRoYXQgYSBrZXlcJ3MgaGFzaCB2YWx1ZSBpcyBpbW11dGFibGUgKGlmIHRoZSBvYmplY3RcJ3MgaGFzaFxuICAgdmFsdWUgY2hhbmdlcywgaXQgd2lsbCBiZSBpbiB0aGUgd3JvbmcgaGFzaCBidWNrZXQpLlxuXG4gICBVc2VyLWRlZmluZWQgY2xhc3NlcyBoYXZlICJfX2VxX18oKSIgYW5kICJfX2hhc2hfXygpIiBtZXRob2RzIGJ5XG4gICBkZWZhdWx0OyB3aXRoIHRoZW0sIGFsbCBvYmplY3RzIGNvbXBhcmUgdW5lcXVhbCAoZXhjZXB0IHdpdGhcbiAgIHRoZW1zZWx2ZXMpIGFuZCAieC5fX2hhc2hfXygpIiByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHN1Y2hcbiAgIHRoYXQgInggPT0geSIgaW1wbGllcyBib3RoIHRoYXQgInggaXMgeSIgYW5kICJoYXNoKHgpID09IGhhc2goeSkiLlxuXG4gICBBIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgYW5kIGRvZXMgbm90IGRlZmluZSAiX19oYXNoX18oKSJcbiAgIHdpbGwgaGF2ZSBpdHMgIl9faGFzaF9fKCkiIGltcGxpY2l0bHkgc2V0IHRvICJOb25lIi4gIFdoZW4gdGhlXG4gICAiX19oYXNoX18oKSIgbWV0aG9kIG9mIGEgY2xhc3MgaXMgIk5vbmUiLCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzXG4gICB3aWxsIHJhaXNlIGFuIGFwcHJvcHJpYXRlICJUeXBlRXJyb3IiIHdoZW4gYSBwcm9ncmFtIGF0dGVtcHRzIHRvXG4gICByZXRyaWV2ZSB0aGVpciBoYXNoIHZhbHVlLCBhbmQgd2lsbCBhbHNvIGJlIGNvcnJlY3RseSBpZGVudGlmaWVkIGFzXG4gICB1bmhhc2hhYmxlIHdoZW4gY2hlY2tpbmcgImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSkiLlxuXG4gICBJZiBhIGNsYXNzIHRoYXQgb3ZlcnJpZGVzICJfX2VxX18oKSIgbmVlZHMgdG8gcmV0YWluIHRoZVxuICAgaW1wbGVtZW50YXRpb24gb2YgIl9faGFzaF9fKCkiIGZyb20gYSBwYXJlbnQgY2xhc3MsIHRoZSBpbnRlcnByZXRlclxuICAgbXVzdCBiZSB0b2xkIHRoaXMgZXhwbGljaXRseSBieSBzZXR0aW5nICJfX2hhc2hfXyA9XG4gICA8UGFyZW50Q2xhc3M+Ll9faGFzaF9fIi5cblxuICAgSWYgYSBjbGFzcyB0aGF0IGRvZXMgbm90IG92ZXJyaWRlICJfX2VxX18oKSIgd2lzaGVzIHRvIHN1cHByZXNzXG4gICBoYXNoIHN1cHBvcnQsIGl0IHNob3VsZCBpbmNsdWRlICJfX2hhc2hfXyA9IE5vbmUiIGluIHRoZSBjbGFzc1xuICAgZGVmaW5pdGlvbi4gQSBjbGFzcyB3aGljaCBkZWZpbmVzIGl0cyBvd24gIl9faGFzaF9fKCkiIHRoYXRcbiAgIGV4cGxpY2l0bHkgcmFpc2VzIGEgIlR5cGVFcnJvciIgd291bGQgYmUgaW5jb3JyZWN0bHkgaWRlbnRpZmllZCBhc1xuICAgaGFzaGFibGUgYnkgYW4gImlzaW5zdGFuY2Uob2JqLCBjb2xsZWN0aW9ucy5IYXNoYWJsZSkiIGNhbGwuXG5cbiAgIE5vdGU6IEJ5IGRlZmF1bHQsIHRoZSAiX19oYXNoX18oKSIgdmFsdWVzIG9mIHN0ciwgYnl0ZXMgYW5kXG4gICAgIGRhdGV0aW1lIG9iamVjdHMgYXJlICJzYWx0ZWQiIHdpdGggYW4gdW5wcmVkaWN0YWJsZSByYW5kb20gdmFsdWUuXG4gICAgIEFsdGhvdWdoIHRoZXkgcmVtYWluIGNvbnN0YW50IHdpdGhpbiBhbiBpbmRpdmlkdWFsIFB5dGhvblxuICAgICBwcm9jZXNzLCB0aGV5IGFyZSBub3QgcHJlZGljdGFibGUgYmV0d2VlbiByZXBlYXRlZCBpbnZvY2F0aW9ucyBvZlxuICAgICBQeXRob24uVGhpcyBpcyBpbnRlbmRlZCB0byBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBhIGRlbmlhbC1cbiAgICAgb2Ytc2VydmljZSBjYXVzZWQgYnkgY2FyZWZ1bGx5LWNob3NlbiBpbnB1dHMgdGhhdCBleHBsb2l0IHRoZVxuICAgICB3b3JzdCBjYXNlIHBlcmZvcm1hbmNlIG9mIGEgZGljdCBpbnNlcnRpb24sIE8obl4yKSBjb21wbGV4aXR5LlxuICAgICBTZWUgaHR0cDovL3d3dy5vY2VydC5vcmcvYWR2aXNvcmllcy9vY2VydC0yMDExLTAwMy5odG1sIGZvclxuICAgICBkZXRhaWxzLkNoYW5naW5nIGhhc2ggdmFsdWVzIGFmZmVjdHMgdGhlIGl0ZXJhdGlvbiBvcmRlciBvZlxuICAgICBkaWN0cywgc2V0cyBhbmQgb3RoZXIgbWFwcGluZ3MuICBQeXRob24gaGFzIG5ldmVyIG1hZGUgZ3VhcmFudGVlc1xuICAgICBhYm91dCB0aGlzIG9yZGVyaW5nIChhbmQgaXQgdHlwaWNhbGx5IHZhcmllcyBiZXR3ZWVuIDMyLWJpdCBhbmRcbiAgICAgNjQtYml0IGJ1aWxkcykuU2VlIGFsc28gIlBZVEhPTkhBU0hTRUVEIi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogSGFzaCByYW5kb21pemF0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdC5cblxub2JqZWN0Ll9fYm9vbF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdHJ1dGggdmFsdWUgdGVzdGluZyBhbmQgdGhlIGJ1aWx0LWluIG9wZXJhdGlvblxuICAgImJvb2woKSI7IHNob3VsZCByZXR1cm4gIkZhbHNlIiBvciAiVHJ1ZSIuICBXaGVuIHRoaXMgbWV0aG9kIGlzIG5vdFxuICAgZGVmaW5lZCwgIl9fbGVuX18oKSIgaXMgY2FsbGVkLCBpZiBpdCBpcyBkZWZpbmVkLCBhbmQgdGhlIG9iamVjdCBpc1xuICAgY29uc2lkZXJlZCB0cnVlIGlmIGl0cyByZXN1bHQgaXMgbm9uemVyby4gIElmIGEgY2xhc3MgZGVmaW5lc1xuICAgbmVpdGhlciAiX19sZW5fXygpIiBub3IgIl9fYm9vbF9fKCkiLCBhbGwgaXRzIGluc3RhbmNlcyBhcmVcbiAgIGNvbnNpZGVyZWQgdHJ1ZS5cblxuXG5DdXN0b21pemluZyBhdHRyaWJ1dGUgYWNjZXNzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBjYW4gYmUgZGVmaW5lZCB0byBjdXN0b21pemUgdGhlIG1lYW5pbmcgb2ZcbmF0dHJpYnV0ZSBhY2Nlc3MgKHVzZSBvZiwgYXNzaWdubWVudCB0bywgb3IgZGVsZXRpb24gb2YgIngubmFtZSIpIGZvclxuY2xhc3MgaW5zdGFuY2VzLlxuXG5vYmplY3QuX19nZXRhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHdoZW4gYW4gYXR0cmlidXRlIGxvb2t1cCBoYXMgbm90IGZvdW5kIHRoZSBhdHRyaWJ1dGUgaW4gdGhlXG4gICB1c3VhbCBwbGFjZXMgKGkuZS4gaXQgaXMgbm90IGFuIGluc3RhbmNlIGF0dHJpYnV0ZSBub3IgaXMgaXQgZm91bmRcbiAgIGluIHRoZSBjbGFzcyB0cmVlIGZvciAic2VsZiIpLiAgIm5hbWUiIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZS4gVGhpc1xuICAgbWV0aG9kIHNob3VsZCByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuXG4gICAiQXR0cmlidXRlRXJyb3IiIGV4Y2VwdGlvbi5cblxuICAgTm90ZSB0aGF0IGlmIHRoZSBhdHRyaWJ1dGUgaXMgZm91bmQgdGhyb3VnaCB0aGUgbm9ybWFsIG1lY2hhbmlzbSxcbiAgICJfX2dldGF0dHJfXygpIiBpcyBub3QgY2FsbGVkLiAgKFRoaXMgaXMgYW4gaW50ZW50aW9uYWwgYXN5bW1ldHJ5XG4gICBiZXR3ZWVuICJfX2dldGF0dHJfXygpIiBhbmQgIl9fc2V0YXR0cl9fKCkiLikgVGhpcyBpcyBkb25lIGJvdGggZm9yXG4gICBlZmZpY2llbmN5IHJlYXNvbnMgYW5kIGJlY2F1c2Ugb3RoZXJ3aXNlICJfX2dldGF0dHJfXygpIiB3b3VsZCBoYXZlXG4gICBubyB3YXkgdG8gYWNjZXNzIG90aGVyIGF0dHJpYnV0ZXMgb2YgdGhlIGluc3RhbmNlLiAgTm90ZSB0aGF0IGF0XG4gICBsZWFzdCBmb3IgaW5zdGFuY2UgdmFyaWFibGVzLCB5b3UgY2FuIGZha2UgdG90YWwgY29udHJvbCBieSBub3RcbiAgIGluc2VydGluZyBhbnkgdmFsdWVzIGluIHRoZSBpbnN0YW5jZSBhdHRyaWJ1dGUgZGljdGlvbmFyeSAoYnV0XG4gICBpbnN0ZWFkIGluc2VydGluZyB0aGVtIGluIGFub3RoZXIgb2JqZWN0KS4gIFNlZSB0aGVcbiAgICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1ldGhvZCBiZWxvdyBmb3IgYSB3YXkgdG8gYWN0dWFsbHkgZ2V0IHRvdGFsXG4gICBjb250cm9sIG92ZXIgYXR0cmlidXRlIGFjY2Vzcy5cblxub2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSlcblxuICAgQ2FsbGVkIHVuY29uZGl0aW9uYWxseSB0byBpbXBsZW1lbnQgYXR0cmlidXRlIGFjY2Vzc2VzIGZvclxuICAgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4gSWYgdGhlIGNsYXNzIGFsc28gZGVmaW5lcyAiX19nZXRhdHRyX18oKSIsXG4gICB0aGUgbGF0dGVyIHdpbGwgbm90IGJlIGNhbGxlZCB1bmxlc3MgIl9fZ2V0YXR0cmlidXRlX18oKSIgZWl0aGVyXG4gICBjYWxscyBpdCBleHBsaWNpdGx5IG9yIHJhaXNlcyBhbiAiQXR0cmlidXRlRXJyb3IiLiBUaGlzIG1ldGhvZFxuICAgc2hvdWxkIHJldHVybiB0aGUgKGNvbXB1dGVkKSBhdHRyaWJ1dGUgdmFsdWUgb3IgcmFpc2UgYW5cbiAgICJBdHRyaWJ1dGVFcnJvciIgZXhjZXB0aW9uLiBJbiBvcmRlciB0byBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gaW5cbiAgIHRoaXMgbWV0aG9kLCBpdHMgaW1wbGVtZW50YXRpb24gc2hvdWxkIGFsd2F5cyBjYWxsIHRoZSBiYXNlIGNsYXNzXG4gICBtZXRob2Qgd2l0aCB0aGUgc2FtZSBuYW1lIHRvIGFjY2VzcyBhbnkgYXR0cmlidXRlcyBpdCBuZWVkcywgZm9yXG4gICBleGFtcGxlLCAib2JqZWN0Ll9fZ2V0YXR0cmlidXRlX18oc2VsZiwgbmFtZSkiLlxuXG4gICBOb3RlOiBUaGlzIG1ldGhvZCBtYXkgc3RpbGwgYmUgYnlwYXNzZWQgd2hlbiBsb29raW5nIHVwIHNwZWNpYWxcbiAgICAgbWV0aG9kcyBhcyB0aGUgcmVzdWx0IG9mIGltcGxpY2l0IGludm9jYXRpb24gdmlhIGxhbmd1YWdlIHN5bnRheFxuICAgICBvciBidWlsdC1pbiBmdW5jdGlvbnMuIFNlZSAqU3BlY2lhbCBtZXRob2QgbG9va3VwKi5cblxub2JqZWN0Ll9fc2V0YXR0cl9fKHNlbGYsIG5hbWUsIHZhbHVlKVxuXG4gICBDYWxsZWQgd2hlbiBhbiBhdHRyaWJ1dGUgYXNzaWdubWVudCBpcyBhdHRlbXB0ZWQuICBUaGlzIGlzIGNhbGxlZFxuICAgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIG1lY2hhbmlzbSAoaS5lLiBzdG9yZSB0aGUgdmFsdWUgaW4gdGhlXG4gICBpbnN0YW5jZSBkaWN0aW9uYXJ5KS4gKm5hbWUqIGlzIHRoZSBhdHRyaWJ1dGUgbmFtZSwgKnZhbHVlKiBpcyB0aGVcbiAgIHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGl0LlxuXG4gICBJZiAiX19zZXRhdHRyX18oKSIgd2FudHMgdG8gYXNzaWduIHRvIGFuIGluc3RhbmNlIGF0dHJpYnV0ZSwgaXRcbiAgIHNob3VsZCBjYWxsIHRoZSBiYXNlIGNsYXNzIG1ldGhvZCB3aXRoIHRoZSBzYW1lIG5hbWUsIGZvciBleGFtcGxlLFxuICAgIm9iamVjdC5fX3NldGF0dHJfXyhzZWxmLCBuYW1lLCB2YWx1ZSkiLlxuXG5vYmplY3QuX19kZWxhdHRyX18oc2VsZiwgbmFtZSlcblxuICAgTGlrZSAiX19zZXRhdHRyX18oKSIgYnV0IGZvciBhdHRyaWJ1dGUgZGVsZXRpb24gaW5zdGVhZCBvZlxuICAgYXNzaWdubWVudC4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgImRlbCBvYmoubmFtZSIgaXNcbiAgIG1lYW5pbmdmdWwgZm9yIHRoZSBvYmplY3QuXG5cbm9iamVjdC5fX2Rpcl9fKHNlbGYpXG5cbiAgIENhbGxlZCB3aGVuICJkaXIoKSIgaXMgY2FsbGVkIG9uIHRoZSBvYmplY3QuIEEgc2VxdWVuY2UgbXVzdCBiZVxuICAgcmV0dXJuZWQuICJkaXIoKSIgY29udmVydHMgdGhlIHJldHVybmVkIHNlcXVlbmNlIHRvIGEgbGlzdCBhbmRcbiAgIHNvcnRzIGl0LlxuXG5cbkltcGxlbWVudGluZyBEZXNjcmlwdG9yc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvbmx5IGFwcGx5IHdoZW4gYW4gaW5zdGFuY2Ugb2YgdGhlIGNsYXNzXG5jb250YWluaW5nIHRoZSBtZXRob2QgKGEgc28tY2FsbGVkICpkZXNjcmlwdG9yKiBjbGFzcykgYXBwZWFycyBpbiBhblxuKm93bmVyKiBjbGFzcyAodGhlIGRlc2NyaXB0b3IgbXVzdCBiZSBpbiBlaXRoZXIgdGhlIG93bmVyXCdzIGNsYXNzXG5kaWN0aW9uYXJ5IG9yIGluIHRoZSBjbGFzcyBkaWN0aW9uYXJ5IGZvciBvbmUgb2YgaXRzIHBhcmVudHMpLiAgSW4gdGhlXG5leGFtcGxlcyBiZWxvdywgInRoZSBhdHRyaWJ1dGUiIHJlZmVycyB0byB0aGUgYXR0cmlidXRlIHdob3NlIG5hbWUgaXNcbnRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IGluIHRoZSBvd25lciBjbGFzc1wnICJfX2RpY3RfXyIuXG5cbm9iamVjdC5fX2dldF9fKHNlbGYsIGluc3RhbmNlLCBvd25lcilcblxuICAgQ2FsbGVkIHRvIGdldCB0aGUgYXR0cmlidXRlIG9mIHRoZSBvd25lciBjbGFzcyAoY2xhc3MgYXR0cmlidXRlXG4gICBhY2Nlc3MpIG9yIG9mIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MgKGluc3RhbmNlIGF0dHJpYnV0ZVxuICAgYWNjZXNzKS4gKm93bmVyKiBpcyBhbHdheXMgdGhlIG93bmVyIGNsYXNzLCB3aGlsZSAqaW5zdGFuY2UqIGlzIHRoZVxuICAgaW5zdGFuY2UgdGhhdCB0aGUgYXR0cmlidXRlIHdhcyBhY2Nlc3NlZCB0aHJvdWdoLCBvciAiTm9uZSIgd2hlblxuICAgdGhlIGF0dHJpYnV0ZSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSAqb3duZXIqLiAgVGhpcyBtZXRob2Qgc2hvdWxkXG4gICByZXR1cm4gdGhlIChjb21wdXRlZCkgYXR0cmlidXRlIHZhbHVlIG9yIHJhaXNlIGFuICJBdHRyaWJ1dGVFcnJvciJcbiAgIGV4Y2VwdGlvbi5cblxub2JqZWN0Ll9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKVxuXG4gICBDYWxsZWQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24gYW4gaW5zdGFuY2UgKmluc3RhbmNlKiBvZiB0aGUgb3duZXJcbiAgIGNsYXNzIHRvIGEgbmV3IHZhbHVlLCAqdmFsdWUqLlxuXG5vYmplY3QuX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgQ2FsbGVkIHRvIGRlbGV0ZSB0aGUgYXR0cmlidXRlIG9uIGFuIGluc3RhbmNlICppbnN0YW5jZSogb2YgdGhlXG4gICBvd25lciBjbGFzcy5cblxuVGhlIGF0dHJpYnV0ZSAiX19vYmpjbGFzc19fIiBpcyBpbnRlcnByZXRlZCBieSB0aGUgImluc3BlY3QiIG1vZHVsZSBhc1xuc3BlY2lmeWluZyB0aGUgY2xhc3Mgd2hlcmUgdGhpcyBvYmplY3Qgd2FzIGRlZmluZWQgKHNldHRpbmcgdGhpc1xuYXBwcm9wcmlhdGVseSBjYW4gYXNzaXN0IGluIHJ1bnRpbWUgaW50cm9zcGVjdGlvbiBvZiBkeW5hbWljIGNsYXNzXG5hdHRyaWJ1dGVzKS4gRm9yIGNhbGxhYmxlcywgaXQgbWF5IGluZGljYXRlIHRoYXQgYW4gaW5zdGFuY2Ugb2YgdGhlXG5naXZlbiB0eXBlIChvciBhIHN1YmNsYXNzKSBpcyBleHBlY3RlZCBvciByZXF1aXJlZCBhcyB0aGUgZmlyc3RcbnBvc2l0aW9uYWwgYXJndW1lbnQgKGZvciBleGFtcGxlLCBDUHl0aG9uIHNldHMgdGhpcyBhdHRyaWJ1dGUgZm9yXG51bmJvdW5kIG1ldGhvZHMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gQykuXG5cblxuSW52b2tpbmcgRGVzY3JpcHRvcnNcbi0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbkluIGdlbmVyYWwsIGEgZGVzY3JpcHRvciBpcyBhbiBvYmplY3QgYXR0cmlidXRlIHdpdGggImJpbmRpbmdcbmJlaGF2aW9yIiwgb25lIHdob3NlIGF0dHJpYnV0ZSBhY2Nlc3MgaGFzIGJlZW4gb3ZlcnJpZGRlbiBieSBtZXRob2RzXG5pbiB0aGUgZGVzY3JpcHRvciBwcm90b2NvbDogICJfX2dldF9fKCkiLCAiX19zZXRfXygpIiwgYW5kXG4iX19kZWxldGVfXygpIi4gSWYgYW55IG9mIHRob3NlIG1ldGhvZHMgYXJlIGRlZmluZWQgZm9yIGFuIG9iamVjdCwgaXRcbmlzIHNhaWQgdG8gYmUgYSBkZXNjcmlwdG9yLlxuXG5UaGUgZGVmYXVsdCBiZWhhdmlvciBmb3IgYXR0cmlidXRlIGFjY2VzcyBpcyB0byBnZXQsIHNldCwgb3IgZGVsZXRlXG50aGUgYXR0cmlidXRlIGZyb20gYW4gb2JqZWN0XCdzIGRpY3Rpb25hcnkuIEZvciBpbnN0YW5jZSwgImEueCIgaGFzIGFcbmxvb2t1cCBjaGFpbiBzdGFydGluZyB3aXRoICJhLl9fZGljdF9fW1wneFwnXSIsIHRoZW5cbiJ0eXBlKGEpLl9fZGljdF9fW1wneFwnXSIsIGFuZCBjb250aW51aW5nIHRocm91Z2ggdGhlIGJhc2UgY2xhc3NlcyBvZlxuInR5cGUoYSkiIGV4Y2x1ZGluZyBtZXRhY2xhc3Nlcy5cblxuSG93ZXZlciwgaWYgdGhlIGxvb2tlZC11cCB2YWx1ZSBpcyBhbiBvYmplY3QgZGVmaW5pbmcgb25lIG9mIHRoZVxuZGVzY3JpcHRvciBtZXRob2RzLCB0aGVuIFB5dGhvbiBtYXkgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgYW5kXG5pbnZva2UgdGhlIGRlc2NyaXB0b3IgbWV0aG9kIGluc3RlYWQuICBXaGVyZSB0aGlzIG9jY3VycyBpbiB0aGVcbnByZWNlZGVuY2UgY2hhaW4gZGVwZW5kcyBvbiB3aGljaCBkZXNjcmlwdG9yIG1ldGhvZHMgd2VyZSBkZWZpbmVkIGFuZFxuaG93IHRoZXkgd2VyZSBjYWxsZWQuXG5cblRoZSBzdGFydGluZyBwb2ludCBmb3IgZGVzY3JpcHRvciBpbnZvY2F0aW9uIGlzIGEgYmluZGluZywgImEueCIuIEhvd1xudGhlIGFyZ3VtZW50cyBhcmUgYXNzZW1ibGVkIGRlcGVuZHMgb24gImEiOlxuXG5EaXJlY3QgQ2FsbFxuICAgVGhlIHNpbXBsZXN0IGFuZCBsZWFzdCBjb21tb24gY2FsbCBpcyB3aGVuIHVzZXIgY29kZSBkaXJlY3RseVxuICAgaW52b2tlcyBhIGRlc2NyaXB0b3IgbWV0aG9kOiAgICAieC5fX2dldF9fKGEpIi5cblxuSW5zdGFuY2UgQmluZGluZ1xuICAgSWYgYmluZGluZyB0byBhbiBvYmplY3QgaW5zdGFuY2UsICJhLngiIGlzIHRyYW5zZm9ybWVkIGludG8gdGhlXG4gICBjYWxsOiAidHlwZShhKS5fX2RpY3RfX1tcJ3hcJ10uX19nZXRfXyhhLCB0eXBlKGEpKSIuXG5cbkNsYXNzIEJpbmRpbmdcbiAgIElmIGJpbmRpbmcgdG8gYSBjbGFzcywgIkEueCIgaXMgdHJhbnNmb3JtZWQgaW50byB0aGUgY2FsbDpcbiAgICJBLl9fZGljdF9fW1wneFwnXS5fX2dldF9fKE5vbmUsIEEpIi5cblxuU3VwZXIgQmluZGluZ1xuICAgSWYgImEiIGlzIGFuIGluc3RhbmNlIG9mICJzdXBlciIsIHRoZW4gdGhlIGJpbmRpbmcgInN1cGVyKEIsXG4gICBvYmopLm0oKSIgc2VhcmNoZXMgIm9iai5fX2NsYXNzX18uX19tcm9fXyIgZm9yIHRoZSBiYXNlIGNsYXNzICJBIlxuICAgaW1tZWRpYXRlbHkgcHJlY2VkaW5nICJCIiBhbmQgdGhlbiBpbnZva2VzIHRoZSBkZXNjcmlwdG9yIHdpdGggdGhlXG4gICBjYWxsOiAiQS5fX2RpY3RfX1tcJ21cJ10uX19nZXRfXyhvYmosIG9iai5fX2NsYXNzX18pIi5cblxuRm9yIGluc3RhbmNlIGJpbmRpbmdzLCB0aGUgcHJlY2VkZW5jZSBvZiBkZXNjcmlwdG9yIGludm9jYXRpb24gZGVwZW5kc1xub24gdGhlIHdoaWNoIGRlc2NyaXB0b3IgbWV0aG9kcyBhcmUgZGVmaW5lZC4gIEEgZGVzY3JpcHRvciBjYW4gZGVmaW5lXG5hbnkgY29tYmluYXRpb24gb2YgIl9fZ2V0X18oKSIsICJfX3NldF9fKCkiIGFuZCAiX19kZWxldGVfXygpIi4gIElmIGl0XG5kb2VzIG5vdCBkZWZpbmUgIl9fZ2V0X18oKSIsIHRoZW4gYWNjZXNzaW5nIHRoZSBhdHRyaWJ1dGUgd2lsbCByZXR1cm5cbnRoZSBkZXNjcmlwdG9yIG9iamVjdCBpdHNlbGYgdW5sZXNzIHRoZXJlIGlzIGEgdmFsdWUgaW4gdGhlIG9iamVjdFwnc1xuaW5zdGFuY2UgZGljdGlvbmFyeS4gIElmIHRoZSBkZXNjcmlwdG9yIGRlZmluZXMgIl9fc2V0X18oKSIgYW5kL29yXG4iX19kZWxldGVfXygpIiwgaXQgaXMgYSBkYXRhIGRlc2NyaXB0b3I7IGlmIGl0IGRlZmluZXMgbmVpdGhlciwgaXQgaXNcbmEgbm9uLWRhdGEgZGVzY3JpcHRvci4gIE5vcm1hbGx5LCBkYXRhIGRlc2NyaXB0b3JzIGRlZmluZSBib3RoXG4iX19nZXRfXygpIiBhbmQgIl9fc2V0X18oKSIsIHdoaWxlIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGhhdmUganVzdCB0aGVcbiJfX2dldF9fKCkiIG1ldGhvZC4gIERhdGEgZGVzY3JpcHRvcnMgd2l0aCAiX19zZXRfXygpIiBhbmQgIl9fZ2V0X18oKSJcbmRlZmluZWQgYWx3YXlzIG92ZXJyaWRlIGEgcmVkZWZpbml0aW9uIGluIGFuIGluc3RhbmNlIGRpY3Rpb25hcnkuICBJblxuY29udHJhc3QsIG5vbi1kYXRhIGRlc2NyaXB0b3JzIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGluc3RhbmNlcy5cblxuUHl0aG9uIG1ldGhvZHMgKGluY2x1ZGluZyAic3RhdGljbWV0aG9kKCkiIGFuZCAiY2xhc3NtZXRob2QoKSIpIGFyZVxuaW1wbGVtZW50ZWQgYXMgbm9uLWRhdGEgZGVzY3JpcHRvcnMuICBBY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhblxucmVkZWZpbmUgYW5kIG92ZXJyaWRlIG1ldGhvZHMuICBUaGlzIGFsbG93cyBpbmRpdmlkdWFsIGluc3RhbmNlcyB0b1xuYWNxdWlyZSBiZWhhdmlvcnMgdGhhdCBkaWZmZXIgZnJvbSBvdGhlciBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgY2xhc3MuXG5cblRoZSAicHJvcGVydHkoKSIgZnVuY3Rpb24gaXMgaW1wbGVtZW50ZWQgYXMgYSBkYXRhIGRlc2NyaXB0b3IuXG5BY2NvcmRpbmdseSwgaW5zdGFuY2VzIGNhbm5vdCBvdmVycmlkZSB0aGUgYmVoYXZpb3Igb2YgYSBwcm9wZXJ0eS5cblxuXG5fX3Nsb3RzX19cbi0tLS0tLS0tLVxuXG5CeSBkZWZhdWx0LCBpbnN0YW5jZXMgb2YgY2xhc3NlcyBoYXZlIGEgZGljdGlvbmFyeSBmb3IgYXR0cmlidXRlXG5zdG9yYWdlLiAgVGhpcyB3YXN0ZXMgc3BhY2UgZm9yIG9iamVjdHMgaGF2aW5nIHZlcnkgZmV3IGluc3RhbmNlXG52YXJpYWJsZXMuICBUaGUgc3BhY2UgY29uc3VtcHRpb24gY2FuIGJlY29tZSBhY3V0ZSB3aGVuIGNyZWF0aW5nIGxhcmdlXG5udW1iZXJzIG9mIGluc3RhbmNlcy5cblxuVGhlIGRlZmF1bHQgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgKl9fc2xvdHNfXyogaW4gYSBjbGFzc1xuZGVmaW5pdGlvbi4gVGhlICpfX3Nsb3RzX18qIGRlY2xhcmF0aW9uIHRha2VzIGEgc2VxdWVuY2Ugb2YgaW5zdGFuY2VcbnZhcmlhYmxlcyBhbmQgcmVzZXJ2ZXMganVzdCBlbm91Z2ggc3BhY2UgaW4gZWFjaCBpbnN0YW5jZSB0byBob2xkIGFcbnZhbHVlIGZvciBlYWNoIHZhcmlhYmxlLiAgU3BhY2UgaXMgc2F2ZWQgYmVjYXVzZSAqX19kaWN0X18qIGlzIG5vdFxuY3JlYXRlZCBmb3IgZWFjaCBpbnN0YW5jZS5cblxub2JqZWN0Ll9fc2xvdHNfX1xuXG4gICBUaGlzIGNsYXNzIHZhcmlhYmxlIGNhbiBiZSBhc3NpZ25lZCBhIHN0cmluZywgaXRlcmFibGUsIG9yIHNlcXVlbmNlXG4gICBvZiBzdHJpbmdzIHdpdGggdmFyaWFibGUgbmFtZXMgdXNlZCBieSBpbnN0YW5jZXMuICAqX19zbG90c19fKlxuICAgcmVzZXJ2ZXMgc3BhY2UgZm9yIHRoZSBkZWNsYXJlZCB2YXJpYWJsZXMgYW5kIHByZXZlbnRzIHRoZVxuICAgYXV0b21hdGljIGNyZWF0aW9uIG9mICpfX2RpY3RfXyogYW5kICpfX3dlYWtyZWZfXyogZm9yIGVhY2hcbiAgIGluc3RhbmNlLlxuXG5cbk5vdGVzIG9uIHVzaW5nICpfX3Nsb3RzX18qXG5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+flxuXG4qIFdoZW4gaW5oZXJpdGluZyBmcm9tIGEgY2xhc3Mgd2l0aG91dCAqX19zbG90c19fKiwgdGhlICpfX2RpY3RfXypcbiAgYXR0cmlidXRlIG9mIHRoYXQgY2xhc3Mgd2lsbCBhbHdheXMgYmUgYWNjZXNzaWJsZSwgc28gYSAqX19zbG90c19fKlxuICBkZWZpbml0aW9uIGluIHRoZSBzdWJjbGFzcyBpcyBtZWFuaW5nbGVzcy5cblxuKiBXaXRob3V0IGEgKl9fZGljdF9fKiB2YXJpYWJsZSwgaW5zdGFuY2VzIGNhbm5vdCBiZSBhc3NpZ25lZCBuZXdcbiAgdmFyaWFibGVzIG5vdCBsaXN0ZWQgaW4gdGhlICpfX3Nsb3RzX18qIGRlZmluaXRpb24uICBBdHRlbXB0cyB0b1xuICBhc3NpZ24gdG8gYW4gdW5saXN0ZWQgdmFyaWFibGUgbmFtZSByYWlzZXMgIkF0dHJpYnV0ZUVycm9yIi4gSWZcbiAgZHluYW1pYyBhc3NpZ25tZW50IG9mIG5ldyB2YXJpYWJsZXMgaXMgZGVzaXJlZCwgdGhlbiBhZGRcbiAgIlwnX19kaWN0X19cJyIgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4qIFdpdGhvdXQgYSAqX193ZWFrcmVmX18qIHZhcmlhYmxlIGZvciBlYWNoIGluc3RhbmNlLCBjbGFzc2VzXG4gIGRlZmluaW5nICpfX3Nsb3RzX18qIGRvIG5vdCBzdXBwb3J0IHdlYWsgcmVmZXJlbmNlcyB0byBpdHNcbiAgaW5zdGFuY2VzLiBJZiB3ZWFrIHJlZmVyZW5jZSBzdXBwb3J0IGlzIG5lZWRlZCwgdGhlbiBhZGRcbiAgIlwnX193ZWFrcmVmX19cJyIgdG8gdGhlIHNlcXVlbmNlIG9mIHN0cmluZ3MgaW4gdGhlICpfX3Nsb3RzX18qXG4gIGRlY2xhcmF0aW9uLlxuXG4qICpfX3Nsb3RzX18qIGFyZSBpbXBsZW1lbnRlZCBhdCB0aGUgY2xhc3MgbGV2ZWwgYnkgY3JlYXRpbmdcbiAgZGVzY3JpcHRvcnMgKCpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqKSBmb3IgZWFjaCB2YXJpYWJsZSBuYW1lLiAgQXNcbiAgYSByZXN1bHQsIGNsYXNzIGF0dHJpYnV0ZXMgY2Fubm90IGJlIHVzZWQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvclxuICBpbnN0YW5jZSB2YXJpYWJsZXMgZGVmaW5lZCBieSAqX19zbG90c19fKjsgb3RoZXJ3aXNlLCB0aGUgY2xhc3NcbiAgYXR0cmlidXRlIHdvdWxkIG92ZXJ3cml0ZSB0aGUgZGVzY3JpcHRvciBhc3NpZ25tZW50LlxuXG4qIFRoZSBhY3Rpb24gb2YgYSAqX19zbG90c19fKiBkZWNsYXJhdGlvbiBpcyBsaW1pdGVkIHRvIHRoZSBjbGFzc1xuICB3aGVyZSBpdCBpcyBkZWZpbmVkLiAgQXMgYSByZXN1bHQsIHN1YmNsYXNzZXMgd2lsbCBoYXZlIGEgKl9fZGljdF9fKlxuICB1bmxlc3MgdGhleSBhbHNvIGRlZmluZSAqX19zbG90c19fKiAod2hpY2ggbXVzdCBvbmx5IGNvbnRhaW4gbmFtZXNcbiAgb2YgYW55ICphZGRpdGlvbmFsKiBzbG90cykuXG5cbiogSWYgYSBjbGFzcyBkZWZpbmVzIGEgc2xvdCBhbHNvIGRlZmluZWQgaW4gYSBiYXNlIGNsYXNzLCB0aGVcbiAgaW5zdGFuY2UgdmFyaWFibGUgZGVmaW5lZCBieSB0aGUgYmFzZSBjbGFzcyBzbG90IGlzIGluYWNjZXNzaWJsZVxuICAoZXhjZXB0IGJ5IHJldHJpZXZpbmcgaXRzIGRlc2NyaXB0b3IgZGlyZWN0bHkgZnJvbSB0aGUgYmFzZSBjbGFzcykuXG4gIFRoaXMgcmVuZGVycyB0aGUgbWVhbmluZyBvZiB0aGUgcHJvZ3JhbSB1bmRlZmluZWQuICBJbiB0aGUgZnV0dXJlLCBhXG4gIGNoZWNrIG1heSBiZSBhZGRlZCB0byBwcmV2ZW50IHRoaXMuXG5cbiogTm9uZW1wdHkgKl9fc2xvdHNfXyogZG9lcyBub3Qgd29yayBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb21cbiAgInZhcmlhYmxlLWxlbmd0aCIgYnVpbHQtaW4gdHlwZXMgc3VjaCBhcyAiaW50IiwgImJ5dGVzIiBhbmQgInR1cGxlIi5cblxuKiBBbnkgbm9uLXN0cmluZyBpdGVyYWJsZSBtYXkgYmUgYXNzaWduZWQgdG8gKl9fc2xvdHNfXyouIE1hcHBpbmdzXG4gIG1heSBhbHNvIGJlIHVzZWQ7IGhvd2V2ZXIsIGluIHRoZSBmdXR1cmUsIHNwZWNpYWwgbWVhbmluZyBtYXkgYmVcbiAgYXNzaWduZWQgdG8gdGhlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIGVhY2gga2V5LlxuXG4qICpfX2NsYXNzX18qIGFzc2lnbm1lbnQgd29ya3Mgb25seSBpZiBib3RoIGNsYXNzZXMgaGF2ZSB0aGUgc2FtZVxuICAqX19zbG90c19fKi5cblxuXG5DdXN0b21pemluZyBjbGFzcyBjcmVhdGlvblxuPT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQnkgZGVmYXVsdCwgY2xhc3NlcyBhcmUgY29uc3RydWN0ZWQgdXNpbmcgInR5cGUoKSIuIFRoZSBjbGFzcyBib2R5IGlzXG5leGVjdXRlZCBpbiBhIG5ldyBuYW1lc3BhY2UgYW5kIHRoZSBjbGFzcyBuYW1lIGlzIGJvdW5kIGxvY2FsbHkgdG8gdGhlXG5yZXN1bHQgb2YgInR5cGUobmFtZSwgYmFzZXMsIG5hbWVzcGFjZSkiLlxuXG5UaGUgY2xhc3MgY3JlYXRpb24gcHJvY2VzcyBjYW4gYmUgY3VzdG9taXNlZCBieSBwYXNzaW5nIHRoZVxuIm1ldGFjbGFzcyIga2V5d29yZCBhcmd1bWVudCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBsaW5lLCBvciBieVxuaW5oZXJpdGluZyBmcm9tIGFuIGV4aXN0aW5nIGNsYXNzIHRoYXQgaW5jbHVkZWQgc3VjaCBhbiBhcmd1bWVudC4gSW5cbnRoZSBmb2xsb3dpbmcgZXhhbXBsZSwgYm90aCAiTXlDbGFzcyIgYW5kICJNeVN1YmNsYXNzIiBhcmUgaW5zdGFuY2VzXG5vZiAiTWV0YSI6XG5cbiAgIGNsYXNzIE1ldGEodHlwZSk6XG4gICAgICAgcGFzc1xuXG4gICBjbGFzcyBNeUNsYXNzKG1ldGFjbGFzcz1NZXRhKTpcbiAgICAgICBwYXNzXG5cbiAgIGNsYXNzIE15U3ViY2xhc3MoTXlDbGFzcyk6XG4gICAgICAgcGFzc1xuXG5Bbnkgb3RoZXIga2V5d29yZCBhcmd1bWVudHMgdGhhdCBhcmUgc3BlY2lmaWVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uXG5hcmUgcGFzc2VkIHRocm91Z2ggdG8gYWxsIG1ldGFjbGFzcyBvcGVyYXRpb25zIGRlc2NyaWJlZCBiZWxvdy5cblxuV2hlbiBhIGNsYXNzIGRlZmluaXRpb24gaXMgZXhlY3V0ZWQsIHRoZSBmb2xsb3dpbmcgc3RlcHMgb2NjdXI6XG5cbiogdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzcyBpcyBkZXRlcm1pbmVkXG5cbiogdGhlIGNsYXNzIG5hbWVzcGFjZSBpcyBwcmVwYXJlZFxuXG4qIHRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkXG5cbiogdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkXG5cblxuRGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlIG1ldGFjbGFzc1xuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5UaGUgYXBwcm9wcmlhdGUgbWV0YWNsYXNzIGZvciBhIGNsYXNzIGRlZmluaXRpb24gaXMgZGV0ZXJtaW5lZCBhc1xuZm9sbG93czpcblxuKiBpZiBubyBiYXNlcyBhbmQgbm8gZXhwbGljaXQgbWV0YWNsYXNzIGFyZSBnaXZlbiwgdGhlbiAidHlwZSgpIiBpc1xuICB1c2VkXG5cbiogaWYgYW4gZXhwbGljaXQgbWV0YWNsYXNzIGlzIGdpdmVuIGFuZCBpdCBpcyAqbm90KiBhbiBpbnN0YW5jZSBvZlxuICAidHlwZSgpIiwgdGhlbiBpdCBpcyB1c2VkIGRpcmVjdGx5IGFzIHRoZSBtZXRhY2xhc3NcblxuKiBpZiBhbiBpbnN0YW5jZSBvZiAidHlwZSgpIiBpcyBnaXZlbiBhcyB0aGUgZXhwbGljaXQgbWV0YWNsYXNzLCBvclxuICBiYXNlcyBhcmUgZGVmaW5lZCwgdGhlbiB0aGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyB1c2VkXG5cblRoZSBtb3N0IGRlcml2ZWQgbWV0YWNsYXNzIGlzIHNlbGVjdGVkIGZyb20gdGhlIGV4cGxpY2l0bHkgc3BlY2lmaWVkXG5tZXRhY2xhc3MgKGlmIGFueSkgYW5kIHRoZSBtZXRhY2xhc3NlcyAoaS5lLiAidHlwZShjbHMpIikgb2YgYWxsXG5zcGVjaWZpZWQgYmFzZSBjbGFzc2VzLiBUaGUgbW9zdCBkZXJpdmVkIG1ldGFjbGFzcyBpcyBvbmUgd2hpY2ggaXMgYVxuc3VidHlwZSBvZiAqYWxsKiBvZiB0aGVzZSBjYW5kaWRhdGUgbWV0YWNsYXNzZXMuIElmIG5vbmUgb2YgdGhlXG5jYW5kaWRhdGUgbWV0YWNsYXNzZXMgbWVldHMgdGhhdCBjcml0ZXJpb24sIHRoZW4gdGhlIGNsYXNzIGRlZmluaXRpb25cbndpbGwgZmFpbCB3aXRoICJUeXBlRXJyb3IiLlxuXG5cblByZXBhcmluZyB0aGUgY2xhc3MgbmFtZXNwYWNlXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBhcHByb3ByaWF0ZSBtZXRhY2xhc3MgaGFzIGJlZW4gaWRlbnRpZmllZCwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBwcmVwYXJlZC4gSWYgdGhlIG1ldGFjbGFzcyBoYXMgYSAiX19wcmVwYXJlX18iIGF0dHJpYnV0ZSxcbml0IGlzIGNhbGxlZCBhcyAibmFtZXNwYWNlID0gbWV0YWNsYXNzLl9fcHJlcGFyZV9fKG5hbWUsIGJhc2VzLFxuKiprd2RzKSIgKHdoZXJlIHRoZSBhZGRpdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzLCBpZiBhbnksIGNvbWUgZnJvbVxudGhlIGNsYXNzIGRlZmluaXRpb24pLlxuXG5JZiB0aGUgbWV0YWNsYXNzIGhhcyBubyAiX19wcmVwYXJlX18iIGF0dHJpYnV0ZSwgdGhlbiB0aGUgY2xhc3Ncbm5hbWVzcGFjZSBpcyBpbml0aWFsaXNlZCBhcyBhbiBlbXB0eSAiZGljdCgpIiBpbnN0YW5jZS5cblxuU2VlIGFsc286ICoqUEVQIDMxMTUqKiAtIE1ldGFjbGFzc2VzIGluIFB5dGhvbiAzMDAwXG5cbiAgICAgSW50cm9kdWNlZCB0aGUgIl9fcHJlcGFyZV9fIiBuYW1lc3BhY2UgaG9va1xuXG5cbkV4ZWN1dGluZyB0aGUgY2xhc3MgYm9keVxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblRoZSBjbGFzcyBib2R5IGlzIGV4ZWN1dGVkIChhcHByb3hpbWF0ZWx5KSBhcyAiZXhlYyhib2R5LCBnbG9iYWxzKCksXG5uYW1lc3BhY2UpIi4gVGhlIGtleSBkaWZmZXJlbmNlIGZyb20gYSBub3JtYWwgY2FsbCB0byAiZXhlYygpIiBpcyB0aGF0XG5sZXhpY2FsIHNjb3BpbmcgYWxsb3dzIHRoZSBjbGFzcyBib2R5IChpbmNsdWRpbmcgYW55IG1ldGhvZHMpIHRvXG5yZWZlcmVuY2UgbmFtZXMgZnJvbSB0aGUgY3VycmVudCBhbmQgb3V0ZXIgc2NvcGVzIHdoZW4gdGhlIGNsYXNzXG5kZWZpbml0aW9uIG9jY3VycyBpbnNpZGUgYSBmdW5jdGlvbi5cblxuSG93ZXZlciwgZXZlbiB3aGVuIHRoZSBjbGFzcyBkZWZpbml0aW9uIG9jY3VycyBpbnNpZGUgdGhlIGZ1bmN0aW9uLFxubWV0aG9kcyBkZWZpbmVkIGluc2lkZSB0aGUgY2xhc3Mgc3RpbGwgY2Fubm90IHNlZSBuYW1lcyBkZWZpbmVkIGF0IHRoZVxuY2xhc3Mgc2NvcGUuIENsYXNzIHZhcmlhYmxlcyBtdXN0IGJlIGFjY2Vzc2VkIHRocm91Z2ggdGhlIGZpcnN0XG5wYXJhbWV0ZXIgb2YgaW5zdGFuY2Ugb3IgY2xhc3MgbWV0aG9kcywgYW5kIGNhbm5vdCBiZSBhY2Nlc3NlZCBhdCBhbGxcbmZyb20gc3RhdGljIG1ldGhvZHMuXG5cblxuQ3JlYXRpbmcgdGhlIGNsYXNzIG9iamVjdFxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5PbmNlIHRoZSBjbGFzcyBuYW1lc3BhY2UgaGFzIGJlZW4gcG9wdWxhdGVkIGJ5IGV4ZWN1dGluZyB0aGUgY2xhc3NcbmJvZHksIHRoZSBjbGFzcyBvYmplY3QgaXMgY3JlYXRlZCBieSBjYWxsaW5nICJtZXRhY2xhc3MobmFtZSwgYmFzZXMsXG5uYW1lc3BhY2UsICoqa3dkcykiICh0aGUgYWRkaXRpb25hbCBrZXl3b3JkcyBwYXNzZWQgaGVyZSBhcmUgdGhlIHNhbWVcbmFzIHRob3NlIHBhc3NlZCB0byAiX19wcmVwYXJlX18iKS5cblxuVGhpcyBjbGFzcyBvYmplY3QgaXMgdGhlIG9uZSB0aGF0IHdpbGwgYmUgcmVmZXJlbmNlZCBieSB0aGUgemVyby1cbmFyZ3VtZW50IGZvcm0gb2YgInN1cGVyKCkiLiAiX19jbGFzc19fIiBpcyBhbiBpbXBsaWNpdCBjbG9zdXJlXG5yZWZlcmVuY2UgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaWYgYW55IG1ldGhvZHMgaW4gYSBjbGFzcyBib2R5IHJlZmVyXG50byBlaXRoZXIgIl9fY2xhc3NfXyIgb3IgInN1cGVyIi4gVGhpcyBhbGxvd3MgdGhlIHplcm8gYXJndW1lbnQgZm9ybVxub2YgInN1cGVyKCkiIHRvIGNvcnJlY3RseSBpZGVudGlmeSB0aGUgY2xhc3MgYmVpbmcgZGVmaW5lZCBiYXNlZCBvblxubGV4aWNhbCBzY29waW5nLCB3aGlsZSB0aGUgY2xhc3Mgb3IgaW5zdGFuY2UgdGhhdCB3YXMgdXNlZCB0byBtYWtlIHRoZVxuY3VycmVudCBjYWxsIGlzIGlkZW50aWZpZWQgYmFzZWQgb24gdGhlIGZpcnN0IGFyZ3VtZW50IHBhc3NlZCB0byB0aGVcbm1ldGhvZC5cblxuQWZ0ZXIgdGhlIGNsYXNzIG9iamVjdCBpcyBjcmVhdGVkLCBpdCBpcyBwYXNzZWQgdG8gdGhlIGNsYXNzXG5kZWNvcmF0b3JzIGluY2x1ZGVkIGluIHRoZSBjbGFzcyBkZWZpbml0aW9uIChpZiBhbnkpIGFuZCB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgYm91bmQgaW4gdGhlIGxvY2FsIG5hbWVzcGFjZSBhcyB0aGUgZGVmaW5lZCBjbGFzcy5cblxuU2VlIGFsc286ICoqUEVQIDMxMzUqKiAtIE5ldyBzdXBlclxuXG4gICAgIERlc2NyaWJlcyB0aGUgaW1wbGljaXQgIl9fY2xhc3NfXyIgY2xvc3VyZSByZWZlcmVuY2VcblxuXG5NZXRhY2xhc3MgZXhhbXBsZVxuLS0tLS0tLS0tLS0tLS0tLS1cblxuVGhlIHBvdGVudGlhbCB1c2VzIGZvciBtZXRhY2xhc3NlcyBhcmUgYm91bmRsZXNzLiBTb21lIGlkZWFzIHRoYXQgaGF2ZVxuYmVlbiBleHBsb3JlZCBpbmNsdWRlIGxvZ2dpbmcsIGludGVyZmFjZSBjaGVja2luZywgYXV0b21hdGljXG5kZWxlZ2F0aW9uLCBhdXRvbWF0aWMgcHJvcGVydHkgY3JlYXRpb24sIHByb3hpZXMsIGZyYW1ld29ya3MsIGFuZFxuYXV0b21hdGljIHJlc291cmNlIGxvY2tpbmcvc3luY2hyb25pemF0aW9uLlxuXG5IZXJlIGlzIGFuIGV4YW1wbGUgb2YgYSBtZXRhY2xhc3MgdGhhdCB1c2VzIGFuXG4iY29sbGVjdGlvbnMuT3JkZXJlZERpY3QiIHRvIHJlbWVtYmVyIHRoZSBvcmRlciB0aGF0IGNsYXNzIHZhcmlhYmxlc1xuYXJlIGRlZmluZWQ6XG5cbiAgIGNsYXNzIE9yZGVyZWRDbGFzcyh0eXBlKTpcblxuICAgICAgICBAY2xhc3NtZXRob2RcbiAgICAgICAgZGVmIF9fcHJlcGFyZV9fKG1ldGFjbHMsIG5hbWUsIGJhc2VzLCAqKmt3ZHMpOlxuICAgICAgICAgICByZXR1cm4gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKVxuXG4gICAgICAgIGRlZiBfX25ld19fKGNscywgbmFtZSwgYmFzZXMsIG5hbWVzcGFjZSwgKiprd2RzKTpcbiAgICAgICAgICAgcmVzdWx0ID0gdHlwZS5fX25ld19fKGNscywgbmFtZSwgYmFzZXMsIGRpY3QobmFtZXNwYWNlKSlcbiAgICAgICAgICAgcmVzdWx0Lm1lbWJlcnMgPSB0dXBsZShuYW1lc3BhY2UpXG4gICAgICAgICAgIHJldHVybiByZXN1bHRcblxuICAgY2xhc3MgQShtZXRhY2xhc3M9T3JkZXJlZENsYXNzKTpcbiAgICAgICBkZWYgb25lKHNlbGYpOiBwYXNzXG4gICAgICAgZGVmIHR3byhzZWxmKTogcGFzc1xuICAgICAgIGRlZiB0aHJlZShzZWxmKTogcGFzc1xuICAgICAgIGRlZiBmb3VyKHNlbGYpOiBwYXNzXG5cbiAgID4+PiBBLm1lbWJlcnNcbiAgIChcJ19fbW9kdWxlX19cJywgXCdvbmVcJywgXCd0d29cJywgXCd0aHJlZVwnLCBcJ2ZvdXJcJylcblxuV2hlbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBmb3IgKkEqIGdldHMgZXhlY3V0ZWQsIHRoZSBwcm9jZXNzIGJlZ2luc1xud2l0aCBjYWxsaW5nIHRoZSBtZXRhY2xhc3NcJ3MgIl9fcHJlcGFyZV9fKCkiIG1ldGhvZCB3aGljaCByZXR1cm5zIGFuXG5lbXB0eSAiY29sbGVjdGlvbnMuT3JkZXJlZERpY3QiLiAgVGhhdCBtYXBwaW5nIHJlY29yZHMgdGhlIG1ldGhvZHMgYW5kXG5hdHRyaWJ1dGVzIG9mICpBKiBhcyB0aGV5IGFyZSBkZWZpbmVkIHdpdGhpbiB0aGUgYm9keSBvZiB0aGUgY2xhc3NcbnN0YXRlbWVudC4gT25jZSB0aG9zZSBkZWZpbml0aW9ucyBhcmUgZXhlY3V0ZWQsIHRoZSBvcmRlcmVkIGRpY3Rpb25hcnlcbmlzIGZ1bGx5IHBvcHVsYXRlZCBhbmQgdGhlIG1ldGFjbGFzc1wncyAiX19uZXdfXygpIiBtZXRob2QgZ2V0c1xuaW52b2tlZC4gIFRoYXQgbWV0aG9kIGJ1aWxkcyB0aGUgbmV3IHR5cGUgYW5kIGl0IHNhdmVzIHRoZSBvcmRlcmVkXG5kaWN0aW9uYXJ5IGtleXMgaW4gYW4gYXR0cmlidXRlIGNhbGxlZCAibWVtYmVycyIuXG5cblxuQ3VzdG9taXppbmcgaW5zdGFuY2UgYW5kIHN1YmNsYXNzIGNoZWNrc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgdGhlXG4iaXNpbnN0YW5jZSgpIiBhbmQgImlzc3ViY2xhc3MoKSIgYnVpbHQtaW4gZnVuY3Rpb25zLlxuXG5JbiBwYXJ0aWN1bGFyLCB0aGUgbWV0YWNsYXNzICJhYmMuQUJDTWV0YSIgaW1wbGVtZW50cyB0aGVzZSBtZXRob2RzIGluXG5vcmRlciB0byBhbGxvdyB0aGUgYWRkaXRpb24gb2YgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChBQkNzKSBhc1xuInZpcnR1YWwgYmFzZSBjbGFzc2VzIiB0byBhbnkgY2xhc3Mgb3IgdHlwZSAoaW5jbHVkaW5nIGJ1aWx0LWluXG50eXBlcyksIGluY2x1ZGluZyBvdGhlciBBQkNzLlxuXG5jbGFzcy5fX2luc3RhbmNlY2hlY2tfXyhzZWxmLCBpbnN0YW5jZSlcblxuICAgUmV0dXJuIHRydWUgaWYgKmluc3RhbmNlKiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIChkaXJlY3Qgb3JcbiAgIGluZGlyZWN0KSBpbnN0YW5jZSBvZiAqY2xhc3MqLiBJZiBkZWZpbmVkLCBjYWxsZWQgdG8gaW1wbGVtZW50XG4gICAiaXNpbnN0YW5jZShpbnN0YW5jZSwgY2xhc3MpIi5cblxuY2xhc3MuX19zdWJjbGFzc2NoZWNrX18oc2VsZiwgc3ViY2xhc3MpXG5cbiAgIFJldHVybiB0cnVlIGlmICpzdWJjbGFzcyogc2hvdWxkIGJlIGNvbnNpZGVyZWQgYSAoZGlyZWN0IG9yXG4gICBpbmRpcmVjdCkgc3ViY2xhc3Mgb2YgKmNsYXNzKi4gIElmIGRlZmluZWQsIGNhbGxlZCB0byBpbXBsZW1lbnRcbiAgICJpc3N1YmNsYXNzKHN1YmNsYXNzLCBjbGFzcykiLlxuXG5Ob3RlIHRoYXQgdGhlc2UgbWV0aG9kcyBhcmUgbG9va2VkIHVwIG9uIHRoZSB0eXBlIChtZXRhY2xhc3MpIG9mIGFcbmNsYXNzLiAgVGhleSBjYW5ub3QgYmUgZGVmaW5lZCBhcyBjbGFzcyBtZXRob2RzIGluIHRoZSBhY3R1YWwgY2xhc3MuXG5UaGlzIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgbG9va3VwIG9mIHNwZWNpYWwgbWV0aG9kcyB0aGF0IGFyZSBjYWxsZWRcbm9uIGluc3RhbmNlcywgb25seSBpbiB0aGlzIGNhc2UgdGhlIGluc3RhbmNlIGlzIGl0c2VsZiBhIGNsYXNzLlxuXG5TZWUgYWxzbzogKipQRVAgMzExOSoqIC0gSW50cm9kdWNpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzXG5cbiAgICAgSW5jbHVkZXMgdGhlIHNwZWNpZmljYXRpb24gZm9yIGN1c3RvbWl6aW5nICJpc2luc3RhbmNlKCkiIGFuZFxuICAgICAiaXNzdWJjbGFzcygpIiBiZWhhdmlvciB0aHJvdWdoICJfX2luc3RhbmNlY2hlY2tfXygpIiBhbmRcbiAgICAgIl9fc3ViY2xhc3NjaGVja19fKCkiLCB3aXRoIG1vdGl2YXRpb24gZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBpblxuICAgICB0aGUgY29udGV4dCBvZiBhZGRpbmcgQWJzdHJhY3QgQmFzZSBDbGFzc2VzIChzZWUgdGhlICJhYmMiXG4gICAgIG1vZHVsZSkgdG8gdGhlIGxhbmd1YWdlLlxuXG5cbkVtdWxhdGluZyBjYWxsYWJsZSBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5vYmplY3QuX19jYWxsX18oc2VsZlssIGFyZ3MuLi5dKVxuXG4gICBDYWxsZWQgd2hlbiB0aGUgaW5zdGFuY2UgaXMgImNhbGxlZCIgYXMgYSBmdW5jdGlvbjsgaWYgdGhpcyBtZXRob2RcbiAgIGlzIGRlZmluZWQsICJ4KGFyZzEsIGFyZzIsIC4uLikiIGlzIGEgc2hvcnRoYW5kIGZvclxuICAgInguX19jYWxsX18oYXJnMSwgYXJnMiwgLi4uKSIuXG5cblxuRW11bGF0aW5nIGNvbnRhaW5lciB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIGRlZmluZWQgdG8gaW1wbGVtZW50IGNvbnRhaW5lciBvYmplY3RzLlxuQ29udGFpbmVycyB1c3VhbGx5IGFyZSBzZXF1ZW5jZXMgKHN1Y2ggYXMgbGlzdHMgb3IgdHVwbGVzKSBvciBtYXBwaW5nc1xuKGxpa2UgZGljdGlvbmFyaWVzKSwgYnV0IGNhbiByZXByZXNlbnQgb3RoZXIgY29udGFpbmVycyBhcyB3ZWxsLiAgVGhlXG5maXJzdCBzZXQgb2YgbWV0aG9kcyBpcyB1c2VkIGVpdGhlciB0byBlbXVsYXRlIGEgc2VxdWVuY2Ugb3IgdG9cbmVtdWxhdGUgYSBtYXBwaW5nOyB0aGUgZGlmZmVyZW5jZSBpcyB0aGF0IGZvciBhIHNlcXVlbmNlLCB0aGVcbmFsbG93YWJsZSBrZXlzIHNob3VsZCBiZSB0aGUgaW50ZWdlcnMgKmsqIGZvciB3aGljaCAiMCA8PSBrIDwgTiIgd2hlcmVcbipOKiBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBzZXF1ZW5jZSwgb3Igc2xpY2Ugb2JqZWN0cywgd2hpY2ggZGVmaW5lIGFcbnJhbmdlIG9mIGl0ZW1zLiAgSXQgaXMgYWxzbyByZWNvbW1lbmRlZCB0aGF0IG1hcHBpbmdzIHByb3ZpZGUgdGhlXG5tZXRob2RzICJrZXlzKCkiLCAidmFsdWVzKCkiLCAiaXRlbXMoKSIsICJnZXQoKSIsICJjbGVhcigpIixcbiJzZXRkZWZhdWx0KCkiLCAicG9wKCkiLCAicG9waXRlbSgpIiwgImNvcHkoKSIsIGFuZCAidXBkYXRlKCkiXG5iZWhhdmluZyBzaW1pbGFyIHRvIHRob3NlIGZvciBQeXRob25cJ3Mgc3RhbmRhcmQgZGljdGlvbmFyeSBvYmplY3RzLlxuVGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlIHByb3ZpZGVzIGEgIk11dGFibGVNYXBwaW5nIiBhYnN0cmFjdCBiYXNlXG5jbGFzcyB0byBoZWxwIGNyZWF0ZSB0aG9zZSBtZXRob2RzIGZyb20gYSBiYXNlIHNldCBvZiAiX19nZXRpdGVtX18oKSIsXG4iX19zZXRpdGVtX18oKSIsICJfX2RlbGl0ZW1fXygpIiwgYW5kICJrZXlzKCkiLiBNdXRhYmxlIHNlcXVlbmNlc1xuc2hvdWxkIHByb3ZpZGUgbWV0aG9kcyAiYXBwZW5kKCkiLCAiY291bnQoKSIsICJpbmRleCgpIiwgImV4dGVuZCgpIixcbiJpbnNlcnQoKSIsICJwb3AoKSIsICJyZW1vdmUoKSIsICJyZXZlcnNlKCkiIGFuZCAic29ydCgpIiwgbGlrZSBQeXRob25cbnN0YW5kYXJkIGxpc3Qgb2JqZWN0cy4gIEZpbmFsbHksIHNlcXVlbmNlIHR5cGVzIHNob3VsZCBpbXBsZW1lbnRcbmFkZGl0aW9uIChtZWFuaW5nIGNvbmNhdGVuYXRpb24pIGFuZCBtdWx0aXBsaWNhdGlvbiAobWVhbmluZ1xucmVwZXRpdGlvbikgYnkgZGVmaW5pbmcgdGhlIG1ldGhvZHMgIl9fYWRkX18oKSIsICJfX3JhZGRfXygpIixcbiJfX2lhZGRfXygpIiwgIl9fbXVsX18oKSIsICJfX3JtdWxfXygpIiBhbmQgIl9faW11bF9fKCkiIGRlc2NyaWJlZFxuYmVsb3c7IHRoZXkgc2hvdWxkIG5vdCBkZWZpbmUgb3RoZXIgbnVtZXJpY2FsIG9wZXJhdG9ycy4gIEl0IGlzXG5yZWNvbW1lbmRlZCB0aGF0IGJvdGggbWFwcGluZ3MgYW5kIHNlcXVlbmNlcyBpbXBsZW1lbnQgdGhlXG4iX19jb250YWluc19fKCkiIG1ldGhvZCB0byBhbGxvdyBlZmZpY2llbnQgdXNlIG9mIHRoZSAiaW4iIG9wZXJhdG9yO1xuZm9yIG1hcHBpbmdzLCAiaW4iIHNob3VsZCBzZWFyY2ggdGhlIG1hcHBpbmdcJ3Mga2V5czsgZm9yIHNlcXVlbmNlcywgaXRcbnNob3VsZCBzZWFyY2ggdGhyb3VnaCB0aGUgdmFsdWVzLiAgSXQgaXMgZnVydGhlciByZWNvbW1lbmRlZCB0aGF0IGJvdGhcbm1hcHBpbmdzIGFuZCBzZXF1ZW5jZXMgaW1wbGVtZW50IHRoZSAiX19pdGVyX18oKSIgbWV0aG9kIHRvIGFsbG93XG5lZmZpY2llbnQgaXRlcmF0aW9uIHRocm91Z2ggdGhlIGNvbnRhaW5lcjsgZm9yIG1hcHBpbmdzLCAiX19pdGVyX18oKSJcbnNob3VsZCBiZSB0aGUgc2FtZSBhcyAia2V5cygpIjsgZm9yIHNlcXVlbmNlcywgaXQgc2hvdWxkIGl0ZXJhdGVcbnRocm91Z2ggdGhlIHZhbHVlcy5cblxub2JqZWN0Ll9fbGVuX18oc2VsZilcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIi4gIFNob3VsZCByZXR1cm5cbiAgIHRoZSBsZW5ndGggb2YgdGhlIG9iamVjdCwgYW4gaW50ZWdlciAiPj0iIDAuICBBbHNvLCBhbiBvYmplY3QgdGhhdFxuICAgZG9lc25cJ3QgZGVmaW5lIGEgIl9fYm9vbF9fKCkiIG1ldGhvZCBhbmQgd2hvc2UgIl9fbGVuX18oKSIgbWV0aG9kXG4gICByZXR1cm5zIHplcm8gaXMgY29uc2lkZXJlZCB0byBiZSBmYWxzZSBpbiBhIEJvb2xlYW4gY29udGV4dC5cblxub2JqZWN0Ll9fbGVuZ3RoX2hpbnRfXyhzZWxmKVxuXG4gICBDYWxsZWQgdG8gaW1wbGVtZW50ICJvcGVyYXRvci5sZW5ndGhfaGludCgpIi4gU2hvdWxkIHJldHVybiBhblxuICAgZXN0aW1hdGVkIGxlbmd0aCBmb3IgdGhlIG9iamVjdCAod2hpY2ggbWF5IGJlIGdyZWF0ZXIgb3IgbGVzcyB0aGFuXG4gICB0aGUgYWN0dWFsIGxlbmd0aCkuIFRoZSBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyICI+PSIgMC4gVGhpc1xuICAgbWV0aG9kIGlzIHB1cmVseSBhbiBvcHRpbWl6YXRpb24gYW5kIGlzIG5ldmVyIHJlcXVpcmVkIGZvclxuICAgY29ycmVjdG5lc3MuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuNC5cblxuTm90ZTogU2xpY2luZyBpcyBkb25lIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIGZvbGxvd2luZyB0aHJlZSBtZXRob2RzLlxuICBBIGNhbGwgbGlrZVxuXG4gICAgIGFbMToyXSA9IGJcblxuICBpcyB0cmFuc2xhdGVkIHRvXG5cbiAgICAgYVtzbGljZSgxLCAyLCBOb25lKV0gPSBiXG5cbiAgYW5kIHNvIGZvcnRoLiAgTWlzc2luZyBzbGljZSBpdGVtcyBhcmUgYWx3YXlzIGZpbGxlZCBpbiB3aXRoICJOb25lIi5cblxub2JqZWN0Ll9fZ2V0aXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBldmFsdWF0aW9uIG9mICJzZWxmW2tleV0iLiBGb3Igc2VxdWVuY2UgdHlwZXMsXG4gICB0aGUgYWNjZXB0ZWQga2V5cyBzaG91bGQgYmUgaW50ZWdlcnMgYW5kIHNsaWNlIG9iamVjdHMuICBOb3RlIHRoYXRcbiAgIHRoZSBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIGluZGV4ZXMgKGlmIHRoZSBjbGFzcyB3aXNoZXNcbiAgIHRvIGVtdWxhdGUgYSBzZXF1ZW5jZSB0eXBlKSBpcyB1cCB0byB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC4gSWZcbiAgICprZXkqIGlzIG9mIGFuIGluYXBwcm9wcmlhdGUgdHlwZSwgIlR5cGVFcnJvciIgbWF5IGJlIHJhaXNlZDsgaWYgb2ZcbiAgIGEgdmFsdWUgb3V0c2lkZSB0aGUgc2V0IG9mIGluZGV4ZXMgZm9yIHRoZSBzZXF1ZW5jZSAoYWZ0ZXIgYW55XG4gICBzcGVjaWFsIGludGVycHJldGF0aW9uIG9mIG5lZ2F0aXZlIHZhbHVlcyksICJJbmRleEVycm9yIiBzaG91bGQgYmVcbiAgIHJhaXNlZC4gRm9yIG1hcHBpbmcgdHlwZXMsIGlmICprZXkqIGlzIG1pc3NpbmcgKG5vdCBpbiB0aGVcbiAgIGNvbnRhaW5lciksICJLZXlFcnJvciIgc2hvdWxkIGJlIHJhaXNlZC5cblxuICAgTm90ZTogImZvciIgbG9vcHMgZXhwZWN0IHRoYXQgYW4gIkluZGV4RXJyb3IiIHdpbGwgYmUgcmFpc2VkIGZvclxuICAgICBpbGxlZ2FsIGluZGV4ZXMgdG8gYWxsb3cgcHJvcGVyIGRldGVjdGlvbiBvZiB0aGUgZW5kIG9mIHRoZVxuICAgICBzZXF1ZW5jZS5cblxub2JqZWN0Ll9fbWlzc2luZ19fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIGJ5ICJkaWN0Ii4iX19nZXRpdGVtX18oKSIgdG8gaW1wbGVtZW50ICJzZWxmW2tleV0iIGZvciBkaWN0XG4gICBzdWJjbGFzc2VzIHdoZW4ga2V5IGlzIG5vdCBpbiB0aGUgZGljdGlvbmFyeS5cblxub2JqZWN0Ll9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgYXNzaWdubWVudCB0byAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IGNoYW5nZXMgdG8gdGhlIHZhbHVlcyBmb3Iga2V5cywgb3IgaWYgbmV3IGtleXNcbiAgIGNhbiBiZSBhZGRlZCwgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50cyBjYW4gYmUgcmVwbGFjZWQuICBUaGVcbiAgIHNhbWUgZXhjZXB0aW9ucyBzaG91bGQgYmUgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yXG4gICB0aGUgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxub2JqZWN0Ll9fZGVsaXRlbV9fKHNlbGYsIGtleSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBkZWxldGlvbiBvZiAic2VsZltrZXldIi4gIFNhbWUgbm90ZSBhcyBmb3JcbiAgICJfX2dldGl0ZW1fXygpIi4gIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIG1hcHBpbmdzIGlmXG4gICB0aGUgb2JqZWN0cyBzdXBwb3J0IHJlbW92YWwgb2Yga2V5cywgb3IgZm9yIHNlcXVlbmNlcyBpZiBlbGVtZW50c1xuICAgY2FuIGJlIHJlbW92ZWQgZnJvbSB0aGUgc2VxdWVuY2UuICBUaGUgc2FtZSBleGNlcHRpb25zIHNob3VsZCBiZVxuICAgcmFpc2VkIGZvciBpbXByb3BlciAqa2V5KiB2YWx1ZXMgYXMgZm9yIHRoZSAiX19nZXRpdGVtX18oKSIgbWV0aG9kLlxuXG5vYmplY3QuX19pdGVyX18oc2VsZilcblxuICAgVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4gYW4gaXRlcmF0b3IgaXMgcmVxdWlyZWQgZm9yIGEgY29udGFpbmVyLlxuICAgVGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiBhIG5ldyBpdGVyYXRvciBvYmplY3QgdGhhdCBjYW4gaXRlcmF0ZVxuICAgb3ZlciBhbGwgdGhlIG9iamVjdHMgaW4gdGhlIGNvbnRhaW5lci4gIEZvciBtYXBwaW5ncywgaXQgc2hvdWxkXG4gICBpdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRhaW5lci5cblxuICAgSXRlcmF0b3Igb2JqZWN0cyBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgbWV0aG9kOyB0aGV5IGFyZVxuICAgcmVxdWlyZWQgdG8gcmV0dXJuIHRoZW1zZWx2ZXMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBpdGVyYXRvclxuICAgb2JqZWN0cywgc2VlICpJdGVyYXRvciBUeXBlcyouXG5cbm9iamVjdC5fX3JldmVyc2VkX18oc2VsZilcblxuICAgQ2FsbGVkIChpZiBwcmVzZW50KSBieSB0aGUgInJldmVyc2VkKCkiIGJ1aWx0LWluIHRvIGltcGxlbWVudFxuICAgcmV2ZXJzZSBpdGVyYXRpb24uICBJdCBzaG91bGQgcmV0dXJuIGEgbmV3IGl0ZXJhdG9yIG9iamVjdCB0aGF0XG4gICBpdGVyYXRlcyBvdmVyIGFsbCB0aGUgb2JqZWN0cyBpbiB0aGUgY29udGFpbmVyIGluIHJldmVyc2Ugb3JkZXIuXG5cbiAgIElmIHRoZSAiX19yZXZlcnNlZF9fKCkiIG1ldGhvZCBpcyBub3QgcHJvdmlkZWQsIHRoZSAicmV2ZXJzZWQoKSJcbiAgIGJ1aWx0LWluIHdpbGwgZmFsbCBiYWNrIHRvIHVzaW5nIHRoZSBzZXF1ZW5jZSBwcm90b2NvbCAoIl9fbGVuX18oKSJcbiAgIGFuZCAiX19nZXRpdGVtX18oKSIpLiAgT2JqZWN0cyB0aGF0IHN1cHBvcnQgdGhlIHNlcXVlbmNlIHByb3RvY29sXG4gICBzaG91bGQgb25seSBwcm92aWRlICJfX3JldmVyc2VkX18oKSIgaWYgdGhleSBjYW4gcHJvdmlkZSBhblxuICAgaW1wbGVtZW50YXRpb24gdGhhdCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHRoZSBvbmUgcHJvdmlkZWQgYnlcbiAgICJyZXZlcnNlZCgpIi5cblxuVGhlIG1lbWJlcnNoaXAgdGVzdCBvcGVyYXRvcnMgKCJpbiIgYW5kICJub3QgaW4iKSBhcmUgbm9ybWFsbHlcbmltcGxlbWVudGVkIGFzIGFuIGl0ZXJhdGlvbiB0aHJvdWdoIGEgc2VxdWVuY2UuICBIb3dldmVyLCBjb250YWluZXJcbm9iamVjdHMgY2FuIHN1cHBseSB0aGUgZm9sbG93aW5nIHNwZWNpYWwgbWV0aG9kIHdpdGggYSBtb3JlIGVmZmljaWVudFxuaW1wbGVtZW50YXRpb24sIHdoaWNoIGFsc28gZG9lcyBub3QgcmVxdWlyZSB0aGUgb2JqZWN0IGJlIGEgc2VxdWVuY2UuXG5cbm9iamVjdC5fX2NvbnRhaW5zX18oc2VsZiwgaXRlbSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCBtZW1iZXJzaGlwIHRlc3Qgb3BlcmF0b3JzLiAgU2hvdWxkIHJldHVybiB0cnVlXG4gICBpZiAqaXRlbSogaXMgaW4gKnNlbGYqLCBmYWxzZSBvdGhlcndpc2UuICBGb3IgbWFwcGluZyBvYmplY3RzLCB0aGlzXG4gICBzaG91bGQgY29uc2lkZXIgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcgcmF0aGVyIHRoYW4gdGhlIHZhbHVlcyBvclxuICAgdGhlIGtleS1pdGVtIHBhaXJzLlxuXG4gICBGb3Igb2JqZWN0cyB0aGF0IGRvblwndCBkZWZpbmUgIl9fY29udGFpbnNfXygpIiwgdGhlIG1lbWJlcnNoaXAgdGVzdFxuICAgZmlyc3QgdHJpZXMgaXRlcmF0aW9uIHZpYSAiX19pdGVyX18oKSIsIHRoZW4gdGhlIG9sZCBzZXF1ZW5jZVxuICAgaXRlcmF0aW9uIHByb3RvY29sIHZpYSAiX19nZXRpdGVtX18oKSIsIHNlZSAqdGhpcyBzZWN0aW9uIGluIHRoZVxuICAgbGFuZ3VhZ2UgcmVmZXJlbmNlKi5cblxuXG5FbXVsYXRpbmcgbnVtZXJpYyB0eXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT1cblxuVGhlIGZvbGxvd2luZyBtZXRob2RzIGNhbiBiZSBkZWZpbmVkIHRvIGVtdWxhdGUgbnVtZXJpYyBvYmplY3RzLlxuTWV0aG9kcyBjb3JyZXNwb25kaW5nIHRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGVcbnBhcnRpY3VsYXIga2luZCBvZiBudW1iZXIgaW1wbGVtZW50ZWQgKGUuZy4sIGJpdHdpc2Ugb3BlcmF0aW9ucyBmb3Jcbm5vbi1pbnRlZ3JhbCBudW1iZXJzKSBzaG91bGQgYmUgbGVmdCB1bmRlZmluZWQuXG5cbm9iamVjdC5fX2FkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tdWxfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX3RydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Zsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19tb2RfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2Rpdm1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcG93X18oc2VsZiwgb3RoZXJbLCBtb2R1bG9dKVxub2JqZWN0Ll9fbHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2FuZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9feG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19vcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBiaW5hcnkgYXJpdGhtZXRpY1xuICAgb3BlcmF0aW9ucyAoIisiLCAiLSIsICIqIiwgIi8iLCAiLy8iLCAiJSIsICJkaXZtb2QoKSIsICJwb3coKSIsXG4gICAiKioiLCAiPDwiLCAiPj4iLCAiJiIsICJeIiwgInwiKS4gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlXG4gICBleHByZXNzaW9uICJ4ICsgeSIsIHdoZXJlICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuXG4gICAiX19hZGRfXygpIiBtZXRob2QsICJ4Ll9fYWRkX18oeSkiIGlzIGNhbGxlZC4gIFRoZSAiX19kaXZtb2RfXygpIlxuICAgbWV0aG9kIHNob3VsZCBiZSB0aGUgZXF1aXZhbGVudCB0byB1c2luZyAiX19mbG9vcmRpdl9fKCkiIGFuZFxuICAgIl9fbW9kX18oKSI7IGl0IHNob3VsZCBub3QgYmUgcmVsYXRlZCB0byAiX190cnVlZGl2X18oKSIuICBOb3RlXG4gICB0aGF0ICJfX3Bvd19fKCkiIHNob3VsZCBiZSBkZWZpbmVkIHRvIGFjY2VwdCBhbiBvcHRpb25hbCB0aGlyZFxuICAgYXJndW1lbnQgaWYgdGhlIHRlcm5hcnkgdmVyc2lvbiBvZiB0aGUgYnVpbHQtaW4gInBvdygpIiBmdW5jdGlvbiBpc1xuICAgdG8gYmUgc3VwcG9ydGVkLlxuXG4gICBJZiBvbmUgb2YgdGhvc2UgbWV0aG9kcyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBvcGVyYXRpb24gd2l0aCB0aGVcbiAgIHN1cHBsaWVkIGFyZ3VtZW50cywgaXQgc2hvdWxkIHJldHVybiAiTm90SW1wbGVtZW50ZWQiLlxuXG5vYmplY3QuX19yYWRkX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yc3ViX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybXVsX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ydHJ1ZWRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9fcmZsb29yZGl2X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yZGl2bW9kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycG93X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ybHNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19ycnNoaWZ0X18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yYW5kX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yeG9yX18oc2VsZiwgb3RoZXIpXG5vYmplY3QuX19yb3JfXyhzZWxmLCBvdGhlcilcblxuICAgVGhlc2UgbWV0aG9kcyBhcmUgY2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYmluYXJ5IGFyaXRobWV0aWNcbiAgIG9wZXJhdGlvbnMgKCIrIiwgIi0iLCAiKiIsICIvIiwgIi8vIiwgIiUiLCAiZGl2bW9kKCkiLCAicG93KCkiLFxuICAgIioqIiwgIjw8IiwgIj4+IiwgIiYiLCAiXiIsICJ8Iikgd2l0aCByZWZsZWN0ZWQgKHN3YXBwZWQpIG9wZXJhbmRzLlxuICAgVGhlc2UgZnVuY3Rpb25zIGFyZSBvbmx5IGNhbGxlZCBpZiB0aGUgbGVmdCBvcGVyYW5kIGRvZXMgbm90XG4gICBzdXBwb3J0IHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbiBhbmQgdGhlIG9wZXJhbmRzIGFyZSBvZlxuICAgZGlmZmVyZW50IHR5cGVzLiBbMl0gIEZvciBpbnN0YW5jZSwgdG8gZXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gInggLVxuICAgeSIsIHdoZXJlICp5KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGFuICJfX3JzdWJfXygpIlxuICAgbWV0aG9kLCAieS5fX3JzdWJfXyh4KSIgaXMgY2FsbGVkIGlmICJ4Ll9fc3ViX18oeSkiIHJldHVybnNcbiAgICpOb3RJbXBsZW1lbnRlZCouXG5cbiAgIE5vdGUgdGhhdCB0ZXJuYXJ5ICJwb3coKSIgd2lsbCBub3QgdHJ5IGNhbGxpbmcgIl9fcnBvd19fKCkiICh0aGVcbiAgIGNvZXJjaW9uIHJ1bGVzIHdvdWxkIGJlY29tZSB0b28gY29tcGxpY2F0ZWQpLlxuXG4gICBOb3RlOiBJZiB0aGUgcmlnaHQgb3BlcmFuZFwncyB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyB0eXBlIGFuZCB0aGF0IHN1YmNsYXNzIHByb3ZpZGVzIHRoZSByZWZsZWN0ZWQgbWV0aG9kXG4gICAgIGZvciB0aGUgb3BlcmF0aW9uLCB0aGlzIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxlZnRcbiAgICAgb3BlcmFuZFwncyBub24tcmVmbGVjdGVkIG1ldGhvZC4gIFRoaXMgYmVoYXZpb3IgYWxsb3dzIHN1YmNsYXNzZXNcbiAgICAgdG8gb3ZlcnJpZGUgdGhlaXIgYW5jZXN0b3JzXCcgb3BlcmF0aW9ucy5cblxub2JqZWN0Ll9faWFkZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXN1Yl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW11bF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXRydWVkaXZfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lmbG9vcmRpdl9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faW1vZF9fKHNlbGYsIG90aGVyKVxub2JqZWN0Ll9faXBvd19fKHNlbGYsIG90aGVyWywgbW9kdWxvXSlcbm9iamVjdC5fX2lsc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lyc2hpZnRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lhbmRfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2l4b3JfXyhzZWxmLCBvdGhlcilcbm9iamVjdC5fX2lvcl9fKHNlbGYsIG90aGVyKVxuXG4gICBUaGVzZSBtZXRob2RzIGFyZSBjYWxsZWQgdG8gaW1wbGVtZW50IHRoZSBhdWdtZW50ZWQgYXJpdGhtZXRpY1xuICAgYXNzaWdubWVudHMgKCIrPSIsICItPSIsICIqPSIsICIvPSIsICIvLz0iLCAiJT0iLCAiKio9IiwgIjw8PSIsXG4gICAiPj49IiwgIiY9IiwgIl49IiwgInw9IikuICBUaGVzZSBtZXRob2RzIHNob3VsZCBhdHRlbXB0IHRvIGRvIHRoZVxuICAgb3BlcmF0aW9uIGluLXBsYWNlIChtb2RpZnlpbmcgKnNlbGYqKSBhbmQgcmV0dXJuIHRoZSByZXN1bHQgKHdoaWNoXG4gICBjb3VsZCBiZSwgYnV0IGRvZXMgbm90IGhhdmUgdG8gYmUsICpzZWxmKikuICBJZiBhIHNwZWNpZmljIG1ldGhvZFxuICAgaXMgbm90IGRlZmluZWQsIHRoZSBhdWdtZW50ZWQgYXNzaWdubWVudCBmYWxscyBiYWNrIHRvIHRoZSBub3JtYWxcbiAgIG1ldGhvZHMuICBGb3IgaW5zdGFuY2UsIGlmICp4KiBpcyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHdpdGggYW5cbiAgICJfX2lhZGRfXygpIiBtZXRob2QsICJ4ICs9IHkiIGlzIGVxdWl2YWxlbnQgdG8gInggPSB4Ll9faWFkZF9fKHkpIlxuICAgLiBPdGhlcndpc2UsICJ4Ll9fYWRkX18oeSkiIGFuZCAieS5fX3JhZGRfXyh4KSIgYXJlIGNvbnNpZGVyZWQsIGFzXG4gICB3aXRoIHRoZSBldmFsdWF0aW9uIG9mICJ4ICsgeSIuIEluIGNlcnRhaW4gc2l0dWF0aW9ucywgYXVnbWVudGVkXG4gICBhc3NpZ25tZW50IGNhbiByZXN1bHQgaW4gdW5leHBlY3RlZCBlcnJvcnMgKHNlZSAqV2h5IGRvZXNcbiAgIGFfdHVwbGVbaV0gKz0gW1wnaXRlbVwnXSByYWlzZSBhbiBleGNlcHRpb24gd2hlbiB0aGUgYWRkaXRpb25cbiAgIHdvcmtzPyopLCBidXQgdGhpcyBiZWhhdmlvciBpcyBpbiBmYWN0IHBhcnQgb2YgdGhlIGRhdGEgbW9kZWwuXG5cbm9iamVjdC5fX25lZ19fKHNlbGYpXG5vYmplY3QuX19wb3NfXyhzZWxmKVxub2JqZWN0Ll9fYWJzX18oc2VsZilcbm9iamVjdC5fX2ludmVydF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgdGhlIHVuYXJ5IGFyaXRobWV0aWMgb3BlcmF0aW9ucyAoIi0iLCAiKyIsXG4gICAiYWJzKCkiIGFuZCAifiIpLlxuXG5vYmplY3QuX19jb21wbGV4X18oc2VsZilcbm9iamVjdC5fX2ludF9fKHNlbGYpXG5vYmplY3QuX19mbG9hdF9fKHNlbGYpXG5vYmplY3QuX19yb3VuZF9fKHNlbGZbLCBuXSlcblxuICAgQ2FsbGVkIHRvIGltcGxlbWVudCB0aGUgYnVpbHQtaW4gZnVuY3Rpb25zICJjb21wbGV4KCkiLCAiaW50KCkiLFxuICAgImZsb2F0KCkiIGFuZCAicm91bmQoKSIuICBTaG91bGQgcmV0dXJuIGEgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlXG4gICB0eXBlLlxuXG5vYmplY3QuX19pbmRleF9fKHNlbGYpXG5cbiAgIENhbGxlZCB0byBpbXBsZW1lbnQgIm9wZXJhdG9yLmluZGV4KCkiLCBhbmQgd2hlbmV2ZXIgUHl0aG9uIG5lZWRzXG4gICB0byBsb3NzbGVzc2x5IGNvbnZlcnQgdGhlIG51bWVyaWMgb2JqZWN0IHRvIGFuIGludGVnZXIgb2JqZWN0IChzdWNoXG4gICBhcyBpbiBzbGljaW5nLCBvciBpbiB0aGUgYnVpbHQtaW4gImJpbigpIiwgImhleCgpIiBhbmQgIm9jdCgpIlxuICAgZnVuY3Rpb25zKS4gUHJlc2VuY2Ugb2YgdGhpcyBtZXRob2QgaW5kaWNhdGVzIHRoYXQgdGhlIG51bWVyaWNcbiAgIG9iamVjdCBpcyBhbiBpbnRlZ2VyIHR5cGUuICBNdXN0IHJldHVybiBhbiBpbnRlZ2VyLlxuXG4gICBOb3RlOiBJbiBvcmRlciB0byBoYXZlIGEgY29oZXJlbnQgaW50ZWdlciB0eXBlIGNsYXNzLCB3aGVuXG4gICAgICJfX2luZGV4X18oKSIgaXMgZGVmaW5lZCAiX19pbnRfXygpIiBzaG91bGQgYWxzbyBiZSBkZWZpbmVkLCBhbmRcbiAgICAgYm90aCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlLlxuXG5cbldpdGggU3RhdGVtZW50IENvbnRleHQgTWFuYWdlcnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuQSAqY29udGV4dCBtYW5hZ2VyKiBpcyBhbiBvYmplY3QgdGhhdCBkZWZpbmVzIHRoZSBydW50aW1lIGNvbnRleHQgdG9cbmJlIGVzdGFibGlzaGVkIHdoZW4gZXhlY3V0aW5nIGEgIndpdGgiIHN0YXRlbWVudC4gVGhlIGNvbnRleHQgbWFuYWdlclxuaGFuZGxlcyB0aGUgZW50cnkgaW50bywgYW5kIHRoZSBleGl0IGZyb20sIHRoZSBkZXNpcmVkIHJ1bnRpbWUgY29udGV4dFxuZm9yIHRoZSBleGVjdXRpb24gb2YgdGhlIGJsb2NrIG9mIGNvZGUuICBDb250ZXh0IG1hbmFnZXJzIGFyZSBub3JtYWxseVxuaW52b2tlZCB1c2luZyB0aGUgIndpdGgiIHN0YXRlbWVudCAoZGVzY3JpYmVkIGluIHNlY3Rpb24gKlRoZSB3aXRoXG5zdGF0ZW1lbnQqKSwgYnV0IGNhbiBhbHNvIGJlIHVzZWQgYnkgZGlyZWN0bHkgaW52b2tpbmcgdGhlaXIgbWV0aG9kcy5cblxuVHlwaWNhbCB1c2VzIG9mIGNvbnRleHQgbWFuYWdlcnMgaW5jbHVkZSBzYXZpbmcgYW5kIHJlc3RvcmluZyB2YXJpb3VzXG5raW5kcyBvZiBnbG9iYWwgc3RhdGUsIGxvY2tpbmcgYW5kIHVubG9ja2luZyByZXNvdXJjZXMsIGNsb3Npbmcgb3BlbmVkXG5maWxlcywgZXRjLlxuXG5Gb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBjb250ZXh0IG1hbmFnZXJzLCBzZWUgKkNvbnRleHQgTWFuYWdlciBUeXBlcyouXG5cbm9iamVjdC5fX2VudGVyX18oc2VsZilcblxuICAgRW50ZXIgdGhlIHJ1bnRpbWUgY29udGV4dCByZWxhdGVkIHRvIHRoaXMgb2JqZWN0LiBUaGUgIndpdGgiXG4gICBzdGF0ZW1lbnQgd2lsbCBiaW5kIHRoaXMgbWV0aG9kXCdzIHJldHVybiB2YWx1ZSB0byB0aGUgdGFyZ2V0KHMpXG4gICBzcGVjaWZpZWQgaW4gdGhlICJhcyIgY2xhdXNlIG9mIHRoZSBzdGF0ZW1lbnQsIGlmIGFueS5cblxub2JqZWN0Ll9fZXhpdF9fKHNlbGYsIGV4Y190eXBlLCBleGNfdmFsdWUsIHRyYWNlYmFjaylcblxuICAgRXhpdCB0aGUgcnVudGltZSBjb250ZXh0IHJlbGF0ZWQgdG8gdGhpcyBvYmplY3QuIFRoZSBwYXJhbWV0ZXJzXG4gICBkZXNjcmliZSB0aGUgZXhjZXB0aW9uIHRoYXQgY2F1c2VkIHRoZSBjb250ZXh0IHRvIGJlIGV4aXRlZC4gSWYgdGhlXG4gICBjb250ZXh0IHdhcyBleGl0ZWQgd2l0aG91dCBhbiBleGNlcHRpb24sIGFsbCB0aHJlZSBhcmd1bWVudHMgd2lsbFxuICAgYmUgIk5vbmUiLlxuXG4gICBJZiBhbiBleGNlcHRpb24gaXMgc3VwcGxpZWQsIGFuZCB0aGUgbWV0aG9kIHdpc2hlcyB0byBzdXBwcmVzcyB0aGVcbiAgIGV4Y2VwdGlvbiAoaS5lLiwgcHJldmVudCBpdCBmcm9tIGJlaW5nIHByb3BhZ2F0ZWQpLCBpdCBzaG91bGRcbiAgIHJldHVybiBhIHRydWUgdmFsdWUuIE90aGVyd2lzZSwgdGhlIGV4Y2VwdGlvbiB3aWxsIGJlIHByb2Nlc3NlZFxuICAgbm9ybWFsbHkgdXBvbiBleGl0IGZyb20gdGhpcyBtZXRob2QuXG5cbiAgIE5vdGUgdGhhdCAiX19leGl0X18oKSIgbWV0aG9kcyBzaG91bGQgbm90IHJlcmFpc2UgdGhlIHBhc3NlZC1pblxuICAgZXhjZXB0aW9uOyB0aGlzIGlzIHRoZSBjYWxsZXJcJ3MgcmVzcG9uc2liaWxpdHkuXG5cblNlZSBhbHNvOiAqKlBFUCAwMzQzKiogLSBUaGUgIndpdGgiIHN0YXRlbWVudFxuXG4gICAgIFRoZSBzcGVjaWZpY2F0aW9uLCBiYWNrZ3JvdW5kLCBhbmQgZXhhbXBsZXMgZm9yIHRoZSBQeXRob24gIndpdGgiXG4gICAgIHN0YXRlbWVudC5cblxuXG5TcGVjaWFsIG1ldGhvZCBsb29rdXBcbj09PT09PT09PT09PT09PT09PT09PVxuXG5Gb3IgY3VzdG9tIGNsYXNzZXMsIGltcGxpY2l0IGludm9jYXRpb25zIG9mIHNwZWNpYWwgbWV0aG9kcyBhcmUgb25seVxuZ3VhcmFudGVlZCB0byB3b3JrIGNvcnJlY3RseSBpZiBkZWZpbmVkIG9uIGFuIG9iamVjdFwncyB0eXBlLCBub3QgaW5cbnRoZSBvYmplY3RcJ3MgaW5zdGFuY2UgZGljdGlvbmFyeS4gIFRoYXQgYmVoYXZpb3VyIGlzIHRoZSByZWFzb24gd2h5XG50aGUgZm9sbG93aW5nIGNvZGUgcmFpc2VzIGFuIGV4Y2VwdGlvbjpcblxuICAgPj4+IGNsYXNzIEM6XG4gICAuLi4gICAgIHBhc3NcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18gPSBsYW1iZGE6IDVcbiAgID4+PiBsZW4oYylcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIFR5cGVFcnJvcjogb2JqZWN0IG9mIHR5cGUgXCdDXCcgaGFzIG5vIGxlbigpXG5cblRoZSByYXRpb25hbGUgYmVoaW5kIHRoaXMgYmVoYXZpb3VyIGxpZXMgd2l0aCBhIG51bWJlciBvZiBzcGVjaWFsXG5tZXRob2RzIHN1Y2ggYXMgIl9faGFzaF9fKCkiIGFuZCAiX19yZXByX18oKSIgdGhhdCBhcmUgaW1wbGVtZW50ZWQgYnlcbmFsbCBvYmplY3RzLCBpbmNsdWRpbmcgdHlwZSBvYmplY3RzLiBJZiB0aGUgaW1wbGljaXQgbG9va3VwIG9mIHRoZXNlXG5tZXRob2RzIHVzZWQgdGhlIGNvbnZlbnRpb25hbCBsb29rdXAgcHJvY2VzcywgdGhleSB3b3VsZCBmYWlsIHdoZW5cbmludm9rZWQgb24gdGhlIHR5cGUgb2JqZWN0IGl0c2VsZjpcblxuICAgPj4+IDEgLl9faGFzaF9fKCkgPT0gaGFzaCgxKVxuICAgVHJ1ZVxuICAgPj4+IGludC5fX2hhc2hfXygpID09IGhhc2goaW50KVxuICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuICAgICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPlxuICAgVHlwZUVycm9yOiBkZXNjcmlwdG9yIFwnX19oYXNoX19cJyBvZiBcJ2ludFwnIG9iamVjdCBuZWVkcyBhbiBhcmd1bWVudFxuXG5JbmNvcnJlY3RseSBhdHRlbXB0aW5nIHRvIGludm9rZSBhbiB1bmJvdW5kIG1ldGhvZCBvZiBhIGNsYXNzIGluIHRoaXNcbndheSBpcyBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgXCdtZXRhY2xhc3MgY29uZnVzaW9uXCcsIGFuZCBpcyBhdm9pZGVkXG5ieSBieXBhc3NpbmcgdGhlIGluc3RhbmNlIHdoZW4gbG9va2luZyB1cCBzcGVjaWFsIG1ldGhvZHM6XG5cbiAgID4+PiB0eXBlKDEpLl9faGFzaF9fKDEpID09IGhhc2goMSlcbiAgIFRydWVcbiAgID4+PiB0eXBlKGludCkuX19oYXNoX18oaW50KSA9PSBoYXNoKGludClcbiAgIFRydWVcblxuSW4gYWRkaXRpb24gdG8gYnlwYXNzaW5nIGFueSBpbnN0YW5jZSBhdHRyaWJ1dGVzIGluIHRoZSBpbnRlcmVzdCBvZlxuY29ycmVjdG5lc3MsIGltcGxpY2l0IHNwZWNpYWwgbWV0aG9kIGxvb2t1cCBnZW5lcmFsbHkgYWxzbyBieXBhc3Nlc1xudGhlICJfX2dldGF0dHJpYnV0ZV9fKCkiIG1ldGhvZCBldmVuIG9mIHRoZSBvYmplY3RcJ3MgbWV0YWNsYXNzOlxuXG4gICA+Pj4gY2xhc3MgTWV0YSh0eXBlKTpcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQoIk1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZCIpXG4gICAuLi4gICAgICAgICByZXR1cm4gdHlwZS5fX2dldGF0dHJpYnV0ZV9fKCphcmdzKVxuICAgLi4uXG4gICA+Pj4gY2xhc3MgQyhvYmplY3QsIG1ldGFjbGFzcz1NZXRhKTpcbiAgIC4uLiAgICAgZGVmIF9fbGVuX18oc2VsZik6XG4gICAuLi4gICAgICAgICByZXR1cm4gMTBcbiAgIC4uLiAgICAgZGVmIF9fZ2V0YXR0cmlidXRlX18oKmFyZ3MpOlxuICAgLi4uICAgICAgICAgcHJpbnQoIkNsYXNzIGdldGF0dHJpYnV0ZSBpbnZva2VkIilcbiAgIC4uLiAgICAgICAgIHJldHVybiBvYmplY3QuX19nZXRhdHRyaWJ1dGVfXygqYXJncylcbiAgIC4uLlxuICAgPj4+IGMgPSBDKClcbiAgID4+PiBjLl9fbGVuX18oKSAgICAgICAgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIGluc3RhbmNlXG4gICBDbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiB0eXBlKGMpLl9fbGVuX18oYykgICAgICAgICAgIyBFeHBsaWNpdCBsb29rdXAgdmlhIHR5cGVcbiAgIE1ldGFjbGFzcyBnZXRhdHRyaWJ1dGUgaW52b2tlZFxuICAgMTBcbiAgID4+PiBsZW4oYykgICAgICAgICAgICAgICAgICAgICAgIyBJbXBsaWNpdCBsb29rdXBcbiAgIDEwXG5cbkJ5cGFzc2luZyB0aGUgIl9fZ2V0YXR0cmlidXRlX18oKSIgbWFjaGluZXJ5IGluIHRoaXMgZmFzaGlvbiBwcm92aWRlc1xuc2lnbmlmaWNhbnQgc2NvcGUgZm9yIHNwZWVkIG9wdGltaXNhdGlvbnMgd2l0aGluIHRoZSBpbnRlcnByZXRlciwgYXRcbnRoZSBjb3N0IG9mIHNvbWUgZmxleGliaWxpdHkgaW4gdGhlIGhhbmRsaW5nIG9mIHNwZWNpYWwgbWV0aG9kcyAodGhlXG5zcGVjaWFsIG1ldGhvZCAqbXVzdCogYmUgc2V0IG9uIHRoZSBjbGFzcyBvYmplY3QgaXRzZWxmIGluIG9yZGVyIHRvIGJlXG5jb25zaXN0ZW50bHkgaW52b2tlZCBieSB0aGUgaW50ZXJwcmV0ZXIpLlxuXG4tWyBGb290bm90ZXMgXS1cblxuWzFdIEl0ICppcyogcG9zc2libGUgaW4gc29tZSBjYXNlcyB0byBjaGFuZ2UgYW4gb2JqZWN0XCdzIHR5cGUsXG4gICAgdW5kZXIgY2VydGFpbiBjb250cm9sbGVkIGNvbmRpdGlvbnMuIEl0IGdlbmVyYWxseSBpc25cJ3QgYSBnb29kXG4gICAgaWRlYSB0aG91Z2gsIHNpbmNlIGl0IGNhbiBsZWFkIHRvIHNvbWUgdmVyeSBzdHJhbmdlIGJlaGF2aW91ciBpZlxuICAgIGl0IGlzIGhhbmRsZWQgaW5jb3JyZWN0bHkuXG5cblsyXSBGb3Igb3BlcmFuZHMgb2YgdGhlIHNhbWUgdHlwZSwgaXQgaXMgYXNzdW1lZCB0aGF0IGlmIHRoZSBub24tXG4gICAgcmVmbGVjdGVkIG1ldGhvZCAoc3VjaCBhcyAiX19hZGRfXygpIikgZmFpbHMgdGhlIG9wZXJhdGlvbiBpcyBub3RcbiAgICBzdXBwb3J0ZWQsIHdoaWNoIGlzIHdoeSB0aGUgcmVmbGVjdGVkIG1ldGhvZCBpcyBub3QgY2FsbGVkLlxuJywKKyAnc3RyaW5nLW1ldGhvZHMnOiB1J1xuU3RyaW5nIE1ldGhvZHNcbioqKioqKioqKioqKioqXG5cblN0cmluZ3MgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucywgYWxvbmcgd2l0aFxudGhlIGFkZGl0aW9uYWwgbWV0aG9kcyBkZXNjcmliZWQgYmVsb3cuXG5cblN0cmluZ3MgYWxzbyBzdXBwb3J0IHR3byBzdHlsZXMgb2Ygc3RyaW5nIGZvcm1hdHRpbmcsIG9uZSBwcm92aWRpbmcgYVxubGFyZ2UgZGVncmVlIG9mIGZsZXhpYmlsaXR5IGFuZCBjdXN0b21pemF0aW9uIChzZWUgInN0ci5mb3JtYXQoKSIsXG4qRm9ybWF0IFN0cmluZyBTeW50YXgqIGFuZCAqU3RyaW5nIEZvcm1hdHRpbmcqKSBhbmQgdGhlIG90aGVyIGJhc2VkIG9uXG5DICJwcmludGYiIHN0eWxlIGZvcm1hdHRpbmcgdGhhdCBoYW5kbGVzIGEgbmFycm93ZXIgcmFuZ2Ugb2YgdHlwZXMgYW5kXG5pcyBzbGlnaHRseSBoYXJkZXIgdG8gdXNlIGNvcnJlY3RseSwgYnV0IGlzIG9mdGVuIGZhc3RlciBmb3IgdGhlIGNhc2VzXG5pdCBjYW4gaGFuZGxlICgqcHJpbnRmLXN0eWxlIFN0cmluZyBGb3JtYXR0aW5nKikuXG5cblRoZSAqVGV4dCBQcm9jZXNzaW5nIFNlcnZpY2VzKiBzZWN0aW9uIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGNvdmVyc1xuYSBudW1iZXIgb2Ygb3RoZXIgbW9kdWxlcyB0aGF0IHByb3ZpZGUgdmFyaW91cyB0ZXh0IHJlbGF0ZWQgdXRpbGl0aWVzXG4oaW5jbHVkaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbiBzdXBwb3J0IGluIHRoZSAicmUiIG1vZHVsZSkuXG5cbnN0ci5jYXBpdGFsaXplKClcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggaXRzIGZpcnN0IGNoYXJhY3RlciBjYXBpdGFsaXplZFxuICAgYW5kIHRoZSByZXN0IGxvd2VyY2FzZWQuXG5cbnN0ci5jYXNlZm9sZCgpXG5cbiAgIFJldHVybiBhIGNhc2Vmb2xkZWQgY29weSBvZiB0aGUgc3RyaW5nLiBDYXNlZm9sZGVkIHN0cmluZ3MgbWF5IGJlXG4gICB1c2VkIGZvciBjYXNlbGVzcyBtYXRjaGluZy5cblxuICAgQ2FzZWZvbGRpbmcgaXMgc2ltaWxhciB0byBsb3dlcmNhc2luZyBidXQgbW9yZSBhZ2dyZXNzaXZlIGJlY2F1c2VcbiAgIGl0IGlzIGludGVuZGVkIHRvIHJlbW92ZSBhbGwgY2FzZSBkaXN0aW5jdGlvbnMgaW4gYSBzdHJpbmcuIEZvclxuICAgZXhhbXBsZSwgdGhlIEdlcm1hbiBsb3dlcmNhc2UgbGV0dGVyICJcJ1x4ZGZcJyIgaXMgZXF1aXZhbGVudCB0byAiInNzIiIuXG4gICBTaW5jZSBpdCBpcyBhbHJlYWR5IGxvd2VyY2FzZSwgImxvd2VyKCkiIHdvdWxkIGRvIG5vdGhpbmcgdG8gIlwnXHhkZlwnIjtcbiAgICJjYXNlZm9sZCgpIiBjb252ZXJ0cyBpdCB0byAiInNzIiIuXG5cbiAgIFRoZSBjYXNlZm9sZGluZyBhbGdvcml0aG0gaXMgZGVzY3JpYmVkIGluIHNlY3Rpb24gMy4xMyBvZiB0aGVcbiAgIFVuaWNvZGUgU3RhbmRhcmQuXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMy5cblxuc3RyLmNlbnRlcih3aWR0aFssIGZpbGxjaGFyXSlcblxuICAgUmV0dXJuIGNlbnRlcmVkIGluIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBQYWRkaW5nIGlzIGRvbmVcbiAgIHVzaW5nIHRoZSBzcGVjaWZpZWQgKmZpbGxjaGFyKiAoZGVmYXVsdCBpcyBhbiBBU0NJSSBzcGFjZSkuIFRoZVxuICAgb3JpZ2luYWwgc3RyaW5nIGlzIHJldHVybmVkIGlmICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvXG4gICAibGVuKHMpIi5cblxuc3RyLmNvdW50KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIG5vbi1vdmVybGFwcGluZyBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKnN1YipcbiAgIGluIHRoZSByYW5nZSBbKnN0YXJ0KiwgKmVuZCpdLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kXG4gICAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uXG5cbnN0ci5lbmNvZGUoZW5jb2Rpbmc9InV0Zi04IiwgZXJyb3JzPSJzdHJpY3QiKVxuXG4gICBSZXR1cm4gYW4gZW5jb2RlZCB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgYXMgYSBieXRlcyBvYmplY3QuIERlZmF1bHRcbiAgIGVuY29kaW5nIGlzICJcJ3V0Zi04XCciLiAqZXJyb3JzKiBtYXkgYmUgZ2l2ZW4gdG8gc2V0IGEgZGlmZmVyZW50XG4gICBlcnJvciBoYW5kbGluZyBzY2hlbWUuIFRoZSBkZWZhdWx0IGZvciAqZXJyb3JzKiBpcyAiXCdzdHJpY3RcJyIsXG4gICBtZWFuaW5nIHRoYXQgZW5jb2RpbmcgZXJyb3JzIHJhaXNlIGEgIlVuaWNvZGVFcnJvciIuIE90aGVyIHBvc3NpYmxlXG4gICB2YWx1ZXMgYXJlICJcJ2lnbm9yZVwnIiwgIlwncmVwbGFjZVwnIiwgIlwneG1sY2hhcnJlZnJlcGxhY2VcJyIsXG4gICAiXCdiYWNrc2xhc2hyZXBsYWNlXCciIGFuZCBhbnkgb3RoZXIgbmFtZSByZWdpc3RlcmVkIHZpYVxuICAgImNvZGVjcy5yZWdpc3Rlcl9lcnJvcigpIiwgc2VlIHNlY3Rpb24gKkVycm9yIEhhbmRsZXJzKi4gRm9yIGEgbGlzdFxuICAgb2YgcG9zc2libGUgZW5jb2RpbmdzLCBzZWUgc2VjdGlvbiAqU3RhbmRhcmQgRW5jb2RpbmdzKi5cblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3Iga2V5d29yZCBhcmd1bWVudHMgYWRkZWQuXG5cbnN0ci5lbmRzd2l0aChzdWZmaXhbLCBzdGFydFssIGVuZF1dKVxuXG4gICBSZXR1cm4gIlRydWUiIGlmIHRoZSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgKnN1ZmZpeCosXG4gICBvdGhlcndpc2UgcmV0dXJuICJGYWxzZSIuICAqc3VmZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHN1ZmZpeGVzXG4gICB0byBsb29rIGZvci4gIFdpdGggb3B0aW9uYWwgKnN0YXJ0KiwgdGVzdCBiZWdpbm5pbmcgYXQgdGhhdFxuICAgcG9zaXRpb24uICBXaXRoIG9wdGlvbmFsICplbmQqLCBzdG9wIGNvbXBhcmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuXG5zdHIuZXhwYW5kdGFicyh0YWJzaXplPTgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBhbGwgdGFiIGNoYXJhY3RlcnMgYXJlIHJlcGxhY2VkXG4gICBieSBvbmUgb3IgbW9yZSBzcGFjZXMsIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBjb2x1bW4gYW5kIHRoZVxuICAgZ2l2ZW4gdGFiIHNpemUuICBUYWIgcG9zaXRpb25zIG9jY3VyIGV2ZXJ5ICp0YWJzaXplKiBjaGFyYWN0ZXJzXG4gICAoZGVmYXVsdCBpcyA4LCBnaXZpbmcgdGFiIHBvc2l0aW9ucyBhdCBjb2x1bW5zIDAsIDgsIDE2IGFuZCBzbyBvbikuXG4gICBUbyBleHBhbmQgdGhlIHN0cmluZywgdGhlIGN1cnJlbnQgY29sdW1uIGlzIHNldCB0byB6ZXJvIGFuZCB0aGVcbiAgIHN0cmluZyBpcyBleGFtaW5lZCBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLiAgSWYgdGhlIGNoYXJhY3RlciBpcyBhXG4gICB0YWIgKCJcXHQiKSwgb25lIG9yIG1vcmUgc3BhY2UgY2hhcmFjdGVycyBhcmUgaW5zZXJ0ZWQgaW4gdGhlIHJlc3VsdFxuICAgdW50aWwgdGhlIGN1cnJlbnQgY29sdW1uIGlzIGVxdWFsIHRvIHRoZSBuZXh0IHRhYiBwb3NpdGlvbi4gKFRoZVxuICAgdGFiIGNoYXJhY3RlciBpdHNlbGYgaXMgbm90IGNvcGllZC4pICBJZiB0aGUgY2hhcmFjdGVyIGlzIGEgbmV3bGluZVxuICAgKCJcXG4iKSBvciByZXR1cm4gKCJcXHIiKSwgaXQgaXMgY29waWVkIGFuZCB0aGUgY3VycmVudCBjb2x1bW4gaXNcbiAgIHJlc2V0IHRvIHplcm8uICBBbnkgb3RoZXIgY2hhcmFjdGVyIGlzIGNvcGllZCB1bmNoYW5nZWQgYW5kIHRoZVxuICAgY3VycmVudCBjb2x1bW4gaXMgaW5jcmVtZW50ZWQgYnkgb25lIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZVxuICAgY2hhcmFjdGVyIGlzIHJlcHJlc2VudGVkIHdoZW4gcHJpbnRlZC5cblxuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKClcbiAgIFwnMDEgICAgICAwMTIgICAgIDAxMjMgICAgMDEyMzRcJ1xuICAgPj4+IFwnMDFcXHQwMTJcXHQwMTIzXFx0MDEyMzRcJy5leHBhbmR0YWJzKDQpXG4gICBcJzAxICAwMTIgMDEyMyAgICAwMTIzNFwnXG5cbnN0ci5maW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgbG93ZXN0IGluZGV4IGluIHRoZSBzdHJpbmcgd2hlcmUgc3Vic3RyaW5nICpzdWIqIGlzXG4gICBmb3VuZCB3aXRoaW4gdGhlIHNsaWNlICJzW3N0YXJ0OmVuZF0iLiAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCpcbiAgIGFuZCAqZW5kKiBhcmUgaW50ZXJwcmV0ZWQgYXMgaW4gc2xpY2Ugbm90YXRpb24uICBSZXR1cm4gIi0xIiBpZlxuICAgKnN1YiogaXMgbm90IGZvdW5kLlxuXG4gICBOb3RlOiBUaGUgImZpbmQoKSIgbWV0aG9kIHNob3VsZCBiZSB1c2VkIG9ubHkgaWYgeW91IG5lZWQgdG8ga25vd1xuICAgICB0aGUgcG9zaXRpb24gb2YgKnN1YiouICBUbyBjaGVjayBpZiAqc3ViKiBpcyBhIHN1YnN0cmluZyBvciBub3QsXG4gICAgIHVzZSB0aGUgImluIiBvcGVyYXRvcjpcblxuICAgICAgICA+Pj4gXCdQeVwnIGluIFwnUHl0aG9uXCdcbiAgICAgICAgVHJ1ZVxuXG5zdHIuZm9ybWF0KCphcmdzLCAqKmt3YXJncylcblxuICAgUGVyZm9ybSBhIHN0cmluZyBmb3JtYXR0aW5nIG9wZXJhdGlvbi4gIFRoZSBzdHJpbmcgb24gd2hpY2ggdGhpc1xuICAgbWV0aG9kIGlzIGNhbGxlZCBjYW4gY29udGFpbiBsaXRlcmFsIHRleHQgb3IgcmVwbGFjZW1lbnQgZmllbGRzXG4gICBkZWxpbWl0ZWQgYnkgYnJhY2VzICJ7fSIuICBFYWNoIHJlcGxhY2VtZW50IGZpZWxkIGNvbnRhaW5zIGVpdGhlclxuICAgdGhlIG51bWVyaWMgaW5kZXggb2YgYSBwb3NpdGlvbmFsIGFyZ3VtZW50LCBvciB0aGUgbmFtZSBvZiBhXG4gICBrZXl3b3JkIGFyZ3VtZW50LiAgUmV0dXJucyBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aGVyZSBlYWNoXG4gICByZXBsYWNlbWVudCBmaWVsZCBpcyByZXBsYWNlZCB3aXRoIHRoZSBzdHJpbmcgdmFsdWUgb2YgdGhlXG4gICBjb3JyZXNwb25kaW5nIGFyZ3VtZW50LlxuXG4gICA+Pj4gIlRoZSBzdW0gb2YgMSArIDIgaXMgezB9Ii5mb3JtYXQoMSsyKVxuICAgXCdUaGUgc3VtIG9mIDEgKyAyIGlzIDNcJ1xuXG4gICBTZWUgKkZvcm1hdCBTdHJpbmcgU3ludGF4KiBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91c1xuICAgZm9ybWF0dGluZyBvcHRpb25zIHRoYXQgY2FuIGJlIHNwZWNpZmllZCBpbiBmb3JtYXQgc3RyaW5ncy5cblxuc3RyLmZvcm1hdF9tYXAobWFwcGluZylcblxuICAgU2ltaWxhciB0byAic3RyLmZvcm1hdCgqKm1hcHBpbmcpIiwgZXhjZXB0IHRoYXQgIm1hcHBpbmciIGlzIHVzZWRcbiAgIGRpcmVjdGx5IGFuZCBub3QgY29waWVkIHRvIGEgImRpY3QiLiAgVGhpcyBpcyB1c2VmdWwgaWYgZm9yIGV4YW1wbGVcbiAgICJtYXBwaW5nIiBpcyBhIGRpY3Qgc3ViY2xhc3M6XG5cbiAgID4+PiBjbGFzcyBEZWZhdWx0KGRpY3QpOlxuICAgLi4uICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KTpcbiAgIC4uLiAgICAgICAgIHJldHVybiBrZXlcbiAgIC4uLlxuICAgPj4+IFwne25hbWV9IHdhcyBib3JuIGluIHtjb3VudHJ5fVwnLmZvcm1hdF9tYXAoRGVmYXVsdChuYW1lPVwnR3VpZG9cJykpXG4gICBcJ0d1aWRvIHdhcyBib3JuIGluIGNvdW50cnlcJ1xuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjIuXG5cbnN0ci5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKVxuXG4gICBMaWtlICJmaW5kKCkiLCBidXQgcmFpc2UgIlZhbHVlRXJyb3IiIHdoZW4gdGhlIHN1YnN0cmluZyBpcyBub3RcbiAgIGZvdW5kLlxuXG5zdHIuaXNhbG51bSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIGFscGhhbnVtZXJpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEEgY2hhcmFjdGVyICJjIlxuICAgaXMgYWxwaGFudW1lcmljIGlmIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnMgIlRydWUiOlxuICAgImMuaXNhbHBoYSgpIiwgImMuaXNkZWNpbWFsKCkiLCAiYy5pc2RpZ2l0KCkiLCBvciAiYy5pc251bWVyaWMoKSIuXG5cbnN0ci5pc2FscGhhKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIHN0cmluZyBhcmUgYWxwaGFiZXRpYyBhbmRcbiAgIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS4gIEFscGhhYmV0aWNcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGNoYXJhY3RlcnMgZGVmaW5lZCBpbiB0aGUgVW5pY29kZSBjaGFyYWN0ZXJcbiAgIGRhdGFiYXNlIGFzICJMZXR0ZXIiLCBpLmUuLCB0aG9zZSB3aXRoIGdlbmVyYWwgY2F0ZWdvcnkgcHJvcGVydHlcbiAgIGJlaW5nIG9uZSBvZiAiTG0iLCAiTHQiLCAiTHUiLCAiTGwiLCBvciAiTG8iLiAgTm90ZSB0aGF0IHRoaXMgaXNcbiAgIGRpZmZlcmVudCBmcm9tIHRoZSAiQWxwaGFiZXRpYyIgcHJvcGVydHkgZGVmaW5lZCBpbiB0aGUgVW5pY29kZVxuICAgU3RhbmRhcmQuXG5cbnN0ci5pc2RlY2ltYWwoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkZWNpbWFsIGNoYXJhY3RlcnNcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIERlY2ltYWxcbiAgIGNoYXJhY3RlcnMgYXJlIHRob3NlIGZyb20gZ2VuZXJhbCBjYXRlZ29yeSAiTmQiLiBUaGlzIGNhdGVnb3J5XG4gICBpbmNsdWRlcyBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBjYW4gYmUgdXNlZCB0b1xuICAgZm9ybSBkZWNpbWFsLXJhZGl4IG51bWJlcnMsIGUuZy4gVSswNjYwLCBBUkFCSUMtSU5ESUMgRElHSVQgWkVSTy5cblxuc3RyLmlzZGlnaXQoKVxuXG4gICBSZXR1cm4gdHJ1ZSBpZiBhbGwgY2hhcmFjdGVycyBpbiB0aGUgc3RyaW5nIGFyZSBkaWdpdHMgYW5kIHRoZXJlIGlzXG4gICBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBEaWdpdHMgaW5jbHVkZSBkZWNpbWFsXG4gICBjaGFyYWN0ZXJzIGFuZCBkaWdpdHMgdGhhdCBuZWVkIHNwZWNpYWwgaGFuZGxpbmcsIHN1Y2ggYXMgdGhlXG4gICBjb21wYXRpYmlsaXR5IHN1cGVyc2NyaXB0IGRpZ2l0cy4gIEZvcm1hbGx5LCBhIGRpZ2l0IGlzIGEgY2hhcmFjdGVyXG4gICB0aGF0IGhhcyB0aGUgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0IG9yXG4gICBOdW1lcmljX1R5cGU9RGVjaW1hbC5cblxuc3RyLmlzaWRlbnRpZmllcigpXG5cbiAgIFJldHVybiB0cnVlIGlmIHRoZSBzdHJpbmcgaXMgYSB2YWxpZCBpZGVudGlmaWVyIGFjY29yZGluZyB0byB0aGVcbiAgIGxhbmd1YWdlIGRlZmluaXRpb24sIHNlY3Rpb24gKklkZW50aWZpZXJzIGFuZCBrZXl3b3JkcyouXG5cbiAgIFVzZSAia2V5d29yZC5pc2tleXdvcmQoKSIgdG8gdGVzdCBmb3IgcmVzZXJ2ZWQgaWRlbnRpZmllcnMgc3VjaCBhc1xuICAgImRlZiIgYW5kICJjbGFzcyIuXG5cbnN0ci5pc2xvd2VyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIGxvd2VyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmlzbnVtZXJpYygpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIG51bWVyaWMgY2hhcmFjdGVycyxcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuIE51bWVyaWNcbiAgIGNoYXJhY3RlcnMgaW5jbHVkZSBkaWdpdCBjaGFyYWN0ZXJzLCBhbmQgYWxsIGNoYXJhY3RlcnMgdGhhdCBoYXZlXG4gICB0aGUgVW5pY29kZSBudW1lcmljIHZhbHVlIHByb3BlcnR5LCBlLmcuIFUrMjE1NSwgVlVMR0FSIEZSQUNUSU9OXG4gICBPTkUgRklGVEguICBGb3JtYWxseSwgbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSB0aG9zZSB3aXRoIHRoZVxuICAgcHJvcGVydHkgdmFsdWUgTnVtZXJpY19UeXBlPURpZ2l0LCBOdW1lcmljX1R5cGU9RGVjaW1hbCBvclxuICAgTnVtZXJpY19UeXBlPU51bWVyaWMuXG5cbnN0ci5pc3ByaW50YWJsZSgpXG5cbiAgIFJldHVybiB0cnVlIGlmIGFsbCBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmcgYXJlIHByaW50YWJsZSBvciB0aGVcbiAgIHN0cmluZyBpcyBlbXB0eSwgZmFsc2Ugb3RoZXJ3aXNlLiAgTm9ucHJpbnRhYmxlIGNoYXJhY3RlcnMgYXJlXG4gICB0aG9zZSBjaGFyYWN0ZXJzIGRlZmluZWQgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlIGFzXG4gICAiT3RoZXIiIG9yICJTZXBhcmF0b3IiLCBleGNlcHRpbmcgdGhlIEFTQ0lJIHNwYWNlICgweDIwKSB3aGljaCBpc1xuICAgY29uc2lkZXJlZCBwcmludGFibGUuICAoTm90ZSB0aGF0IHByaW50YWJsZSBjaGFyYWN0ZXJzIGluIHRoaXNcbiAgIGNvbnRleHQgYXJlIHRob3NlIHdoaWNoIHNob3VsZCBub3QgYmUgZXNjYXBlZCB3aGVuICJyZXByKCkiIGlzXG4gICBpbnZva2VkIG9uIGEgc3RyaW5nLiAgSXQgaGFzIG5vIGJlYXJpbmcgb24gdGhlIGhhbmRsaW5nIG9mIHN0cmluZ3NcbiAgIHdyaXR0ZW4gdG8gInN5cy5zdGRvdXQiIG9yICJzeXMuc3RkZXJyIi4pXG5cbnN0ci5pc3NwYWNlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlcmUgYXJlIG9ubHkgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGluIHRoZSBzdHJpbmdcbiAgIGFuZCB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyLCBmYWxzZSBvdGhlcndpc2UuICBXaGl0ZXNwYWNlXG4gICBjaGFyYWN0ZXJzICBhcmUgdGhvc2UgY2hhcmFjdGVycyBkZWZpbmVkIGluIHRoZSBVbmljb2RlIGNoYXJhY3RlclxuICAgZGF0YWJhc2UgYXMgIk90aGVyIiBvciAiU2VwYXJhdG9yIiBhbmQgdGhvc2Ugd2l0aCBiaWRpcmVjdGlvbmFsXG4gICBwcm9wZXJ0eSBiZWluZyBvbmUgb2YgIldTIiwgIkIiLCBvciAiUyIuXG5cbnN0ci5pc3RpdGxlKClcblxuICAgUmV0dXJuIHRydWUgaWYgdGhlIHN0cmluZyBpcyBhIHRpdGxlY2FzZWQgc3RyaW5nIGFuZCB0aGVyZSBpcyBhdFxuICAgbGVhc3Qgb25lIGNoYXJhY3RlciwgZm9yIGV4YW1wbGUgdXBwZXJjYXNlIGNoYXJhY3RlcnMgbWF5IG9ubHlcbiAgIGZvbGxvdyB1bmNhc2VkIGNoYXJhY3RlcnMgYW5kIGxvd2VyY2FzZSBjaGFyYWN0ZXJzIG9ubHkgY2FzZWQgb25lcy5cbiAgIFJldHVybiBmYWxzZSBvdGhlcndpc2UuXG5cbnN0ci5pc3VwcGVyKClcblxuICAgUmV0dXJuIHRydWUgaWYgYWxsIGNhc2VkIGNoYXJhY3RlcnMgWzRdIGluIHRoZSBzdHJpbmcgYXJlIHVwcGVyY2FzZVxuICAgYW5kIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjYXNlZCBjaGFyYWN0ZXIsIGZhbHNlIG90aGVyd2lzZS5cblxuc3RyLmpvaW4oaXRlcmFibGUpXG5cbiAgIFJldHVybiBhIHN0cmluZyB3aGljaCBpcyB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgc3RyaW5ncyBpbiB0aGVcbiAgICppdGVyYWJsZSogKml0ZXJhYmxlKi4gIEEgIlR5cGVFcnJvciIgd2lsbCBiZSByYWlzZWQgaWYgdGhlcmUgYXJlXG4gICBhbnkgbm9uLXN0cmluZyB2YWx1ZXMgaW4gKml0ZXJhYmxlKiwgaW5jbHVkaW5nICJieXRlcyIgb2JqZWN0cy5cbiAgIFRoZSBzZXBhcmF0b3IgYmV0d2VlbiBlbGVtZW50cyBpcyB0aGUgc3RyaW5nIHByb3ZpZGluZyB0aGlzIG1ldGhvZC5cblxuc3RyLmxqdXN0KHdpZHRoWywgZmlsbGNoYXJdKVxuXG4gICBSZXR1cm4gdGhlIHN0cmluZyBsZWZ0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUlcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gImxlbihzKSIuXG5cbnN0ci5sb3dlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCB0aGUgY2FzZWQgY2hhcmFjdGVycyBbNF1cbiAgIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UuXG5cbiAgIFRoZSBsb3dlcmNhc2luZyBhbGdvcml0aG0gdXNlZCBpcyBkZXNjcmliZWQgaW4gc2VjdGlvbiAzLjEzIG9mIHRoZVxuICAgVW5pY29kZSBTdGFuZGFyZC5cblxuc3RyLmxzdHJpcChbY2hhcnNdKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgd2l0aCBsZWFkaW5nIGNoYXJhY3RlcnMgcmVtb3ZlZC4gIFRoZVxuICAgKmNoYXJzKiBhcmd1bWVudCBpcyBhIHN0cmluZyBzcGVjaWZ5aW5nIHRoZSBzZXQgb2YgY2hhcmFjdGVycyB0byBiZVxuICAgcmVtb3ZlZC4gIElmIG9taXR0ZWQgb3IgIk5vbmUiLCB0aGUgKmNoYXJzKiBhcmd1bWVudCBkZWZhdWx0cyB0b1xuICAgcmVtb3Zpbmcgd2hpdGVzcGFjZS4gIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIG5vdCBhIHByZWZpeDsgcmF0aGVyLFxuICAgYWxsIGNvbWJpbmF0aW9ucyBvZiBpdHMgdmFsdWVzIGFyZSBzdHJpcHBlZDpcblxuICAgICAgPj4+IFwnICAgc3BhY2lvdXMgICBcJy5sc3RyaXAoKVxuICAgICAgXCdzcGFjaW91cyAgIFwnXG4gICAgICA+Pj4gXCd3d3cuZXhhbXBsZS5jb21cJy5sc3RyaXAoXCdjbW93ei5cJylcbiAgICAgIFwnZXhhbXBsZS5jb21cJ1xuXG5zdGF0aWMgc3RyLm1ha2V0cmFucyh4WywgeVssIHpdXSlcblxuICAgVGhpcyBzdGF0aWMgbWV0aG9kIHJldHVybnMgYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yXG4gICAic3RyLnRyYW5zbGF0ZSgpIi5cblxuICAgSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmdcbiAgIFVuaWNvZGUgb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIChzdHJpbmdzIG9mIGxlbmd0aCAxKSB0b1xuICAgVW5pY29kZSBvcmRpbmFscywgc3RyaW5ncyAob2YgYXJiaXRyYXJ5IGxlbmd0aHMpIG9yIE5vbmUuXG4gICBDaGFyYWN0ZXIga2V5cyB3aWxsIHRoZW4gYmUgY29udmVydGVkIHRvIG9yZGluYWxzLlxuXG4gICBJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLFxuICAgYW5kIGluIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZFxuICAgdG8gdGhlIGNoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiAgSWYgdGhlcmUgaXMgYSB0aGlyZFxuICAgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG9cbiAgIE5vbmUgaW4gdGhlIHJlc3VsdC5cblxuc3RyLnBhcnRpdGlvbihzZXApXG5cbiAgIFNwbGl0IHRoZSBzdHJpbmcgYXQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgKnNlcCosIGFuZCByZXR1cm4gYVxuICAgMy10dXBsZSBjb250YWluaW5nIHRoZSBwYXJ0IGJlZm9yZSB0aGUgc2VwYXJhdG9yLCB0aGUgc2VwYXJhdG9yXG4gICBpdHNlbGYsIGFuZCB0aGUgcGFydCBhZnRlciB0aGUgc2VwYXJhdG9yLiAgSWYgdGhlIHNlcGFyYXRvciBpcyBub3RcbiAgIGZvdW5kLCByZXR1cm4gYSAzLXR1cGxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBpdHNlbGYsIGZvbGxvd2VkIGJ5XG4gICB0d28gZW1wdHkgc3RyaW5ncy5cblxuc3RyLnJlcGxhY2Uob2xkLCBuZXdbLCBjb3VudF0pXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCBvY2N1cnJlbmNlcyBvZiBzdWJzdHJpbmcgKm9sZCpcbiAgIHJlcGxhY2VkIGJ5ICpuZXcqLiAgSWYgdGhlIG9wdGlvbmFsIGFyZ3VtZW50ICpjb3VudCogaXMgZ2l2ZW4sIG9ubHlcbiAgIHRoZSBmaXJzdCAqY291bnQqIG9jY3VycmVuY2VzIGFyZSByZXBsYWNlZC5cblxuc3RyLnJmaW5kKHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIFJldHVybiB0aGUgaGlnaGVzdCBpbmRleCBpbiB0aGUgc3RyaW5nIHdoZXJlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgZm91bmQsIHN1Y2ggdGhhdCAqc3ViKiBpcyBjb250YWluZWQgd2l0aGluICJzW3N0YXJ0OmVuZF0iLlxuICAgT3B0aW9uYWwgYXJndW1lbnRzICpzdGFydCogYW5kICplbmQqIGFyZSBpbnRlcnByZXRlZCBhcyBpbiBzbGljZVxuICAgbm90YXRpb24uICBSZXR1cm4gIi0xIiBvbiBmYWlsdXJlLlxuXG5zdHIucmluZGV4KHN1YlssIHN0YXJ0WywgZW5kXV0pXG5cbiAgIExpa2UgInJmaW5kKCkiIGJ1dCByYWlzZXMgIlZhbHVlRXJyb3IiIHdoZW4gdGhlIHN1YnN0cmluZyAqc3ViKiBpc1xuICAgbm90IGZvdW5kLlxuXG5zdHIucmp1c3Qod2lkdGhbLCBmaWxsY2hhcl0pXG5cbiAgIFJldHVybiB0aGUgc3RyaW5nIHJpZ2h0IGp1c3RpZmllZCBpbiBhIHN0cmluZyBvZiBsZW5ndGggKndpZHRoKi5cbiAgIFBhZGRpbmcgaXMgZG9uZSB1c2luZyB0aGUgc3BlY2lmaWVkICpmaWxsY2hhciogKGRlZmF1bHQgaXMgYW4gQVNDSUlcbiAgIHNwYWNlKS4gVGhlIG9yaWdpbmFsIHN0cmluZyBpcyByZXR1cm5lZCBpZiAqd2lkdGgqIGlzIGxlc3MgdGhhbiBvclxuICAgZXF1YWwgdG8gImxlbihzKSIuXG5cbnN0ci5ycGFydGl0aW9uKHNlcClcblxuICAgU3BsaXQgdGhlIHN0cmluZyBhdCB0aGUgbGFzdCBvY2N1cnJlbmNlIG9mICpzZXAqLCBhbmQgcmV0dXJuIGFcbiAgIDMtdHVwbGUgY29udGFpbmluZyB0aGUgcGFydCBiZWZvcmUgdGhlIHNlcGFyYXRvciwgdGhlIHNlcGFyYXRvclxuICAgaXRzZWxmLCBhbmQgdGhlIHBhcnQgYWZ0ZXIgdGhlIHNlcGFyYXRvci4gIElmIHRoZSBzZXBhcmF0b3IgaXMgbm90XG4gICBmb3VuZCwgcmV0dXJuIGEgMy10dXBsZSBjb250YWluaW5nIHR3byBlbXB0eSBzdHJpbmdzLCBmb2xsb3dlZCBieVxuICAgdGhlIHN0cmluZyBpdHNlbGYuXG5cbnN0ci5yc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuIElmICptYXhzcGxpdCogaXMgZ2l2ZW4sIGF0IG1vc3QgKm1heHNwbGl0KiBzcGxpdHNcbiAgIGFyZSBkb25lLCB0aGUgKnJpZ2h0bW9zdCogb25lcy4gIElmICpzZXAqIGlzIG5vdCBzcGVjaWZpZWQgb3JcbiAgICJOb25lIiwgYW55IHdoaXRlc3BhY2Ugc3RyaW5nIGlzIGEgc2VwYXJhdG9yLiAgRXhjZXB0IGZvciBzcGxpdHRpbmdcbiAgIGZyb20gdGhlIHJpZ2h0LCAicnNwbGl0KCkiIGJlaGF2ZXMgbGlrZSAic3BsaXQoKSIgd2hpY2ggaXNcbiAgIGRlc2NyaWJlZCBpbiBkZXRhaWwgYmVsb3cuXG5cbnN0ci5yc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdHJhaWxpbmcgY2hhcmFjdGVycyByZW1vdmVkLiAgVGhlXG4gICAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRvIGJlXG4gICByZW1vdmVkLiAgSWYgb21pdHRlZCBvciAiTm9uZSIsIHRoZSAqY2hhcnMqIGFyZ3VtZW50IGRlZmF1bHRzIHRvXG4gICByZW1vdmluZyB3aGl0ZXNwYWNlLiAgVGhlICpjaGFycyogYXJndW1lbnQgaXMgbm90IGEgc3VmZml4OyByYXRoZXIsXG4gICBhbGwgY29tYmluYXRpb25zIG9mIGl0cyB2YWx1ZXMgYXJlIHN0cmlwcGVkOlxuXG4gICAgICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnJzdHJpcCgpXG4gICAgICBcJyAgIHNwYWNpb3VzXCdcbiAgICAgID4+PiBcJ21pc3Npc3NpcHBpXCcucnN0cmlwKFwnaXB6XCcpXG4gICAgICBcJ21pc3Npc3NcJ1xuXG5zdHIuc3BsaXQoc2VwPU5vbmUsIG1heHNwbGl0PS0xKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSB3b3JkcyBpbiB0aGUgc3RyaW5nLCB1c2luZyAqc2VwKiBhcyB0aGVcbiAgIGRlbGltaXRlciBzdHJpbmcuICBJZiAqbWF4c3BsaXQqIGlzIGdpdmVuLCBhdCBtb3N0ICptYXhzcGxpdCpcbiAgIHNwbGl0cyBhcmUgZG9uZSAodGh1cywgdGhlIGxpc3Qgd2lsbCBoYXZlIGF0IG1vc3QgIm1heHNwbGl0KzEiXG4gICBlbGVtZW50cykuICBJZiAqbWF4c3BsaXQqIGlzIG5vdCBzcGVjaWZpZWQgb3IgIi0xIiwgdGhlbiB0aGVyZSBpc1xuICAgbm8gbGltaXQgb24gdGhlIG51bWJlciBvZiBzcGxpdHMgKGFsbCBwb3NzaWJsZSBzcGxpdHMgYXJlIG1hZGUpLlxuXG4gICBJZiAqc2VwKiBpcyBnaXZlbiwgY29uc2VjdXRpdmUgZGVsaW1pdGVycyBhcmUgbm90IGdyb3VwZWQgdG9nZXRoZXJcbiAgIGFuZCBhcmUgZGVlbWVkIHRvIGRlbGltaXQgZW1wdHkgc3RyaW5ncyAoZm9yIGV4YW1wbGUsXG4gICAiXCcxLCwyXCcuc3BsaXQoXCcsXCcpIiByZXR1cm5zICJbXCcxXCcsIFwnXCcsIFwnMlwnXSIpLiAgVGhlICpzZXAqIGFyZ3VtZW50XG4gICBtYXkgY29uc2lzdCBvZiBtdWx0aXBsZSBjaGFyYWN0ZXJzIChmb3IgZXhhbXBsZSxcbiAgICJcJzE8PjI8PjNcJy5zcGxpdChcJzw+XCcpIiByZXR1cm5zICJbXCcxXCcsIFwnMlwnLCBcJzNcJ10iKS4gU3BsaXR0aW5nIGFuXG4gICBlbXB0eSBzdHJpbmcgd2l0aCBhIHNwZWNpZmllZCBzZXBhcmF0b3IgcmV0dXJucyAiW1wnXCddIi5cblxuICAgRm9yIGV4YW1wbGU6XG5cbiAgICAgID4+PiBcJzEsMiwzXCcuc3BsaXQoXCcsXCcpXG4gICAgICBbXCcxXCcsIFwnMlwnLCBcJzNcJ11cbiAgICAgID4+PiBcJzEsMiwzXCcuc3BsaXQoXCcsXCcsIG1heHNwbGl0PTEpXG4gICAgICBbXCcxXCcsIFwnMiwzXCddXG4gICAgICA+Pj4gXCcxLDIsLDMsXCcuc3BsaXQoXCcsXCcpXG4gICAgICBbXCcxXCcsIFwnMlwnLCBcJ1wnLCBcJzNcJywgXCdcJ11cblxuICAgSWYgKnNlcCogaXMgbm90IHNwZWNpZmllZCBvciBpcyAiTm9uZSIsIGEgZGlmZmVyZW50IHNwbGl0dGluZ1xuICAgYWxnb3JpdGhtIGlzIGFwcGxpZWQ6IHJ1bnMgb2YgY29uc2VjdXRpdmUgd2hpdGVzcGFjZSBhcmUgcmVnYXJkZWRcbiAgIGFzIGEgc2luZ2xlIHNlcGFyYXRvciwgYW5kIHRoZSByZXN1bHQgd2lsbCBjb250YWluIG5vIGVtcHR5IHN0cmluZ3NcbiAgIGF0IHRoZSBzdGFydCBvciBlbmQgaWYgdGhlIHN0cmluZyBoYXMgbGVhZGluZyBvciB0cmFpbGluZ1xuICAgd2hpdGVzcGFjZS4gIENvbnNlcXVlbnRseSwgc3BsaXR0aW5nIGFuIGVtcHR5IHN0cmluZyBvciBhIHN0cmluZ1xuICAgY29uc2lzdGluZyBvZiBqdXN0IHdoaXRlc3BhY2Ugd2l0aCBhICJOb25lIiBzZXBhcmF0b3IgcmV0dXJucyAiW10iLlxuXG4gICBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+IFwnMSAyIDNcJy5zcGxpdCgpXG4gICAgICBbXCcxXCcsIFwnMlwnLCBcJzNcJ11cbiAgICAgID4+PiBcJzEgMiAzXCcuc3BsaXQobWF4c3BsaXQ9MSlcbiAgICAgIFtcJzFcJywgXCcyIDNcJ11cbiAgICAgID4+PiBcJyAgIDEgICAyICAgMyAgIFwnLnNwbGl0KClcbiAgICAgIFtcJzFcJywgXCcyXCcsIFwnM1wnXVxuXG5zdHIuc3BsaXRsaW5lcyhba2VlcGVuZHNdKVxuXG4gICBSZXR1cm4gYSBsaXN0IG9mIHRoZSBsaW5lcyBpbiB0aGUgc3RyaW5nLCBicmVha2luZyBhdCBsaW5lXG4gICBib3VuZGFyaWVzLiAgTGluZSBicmVha3MgYXJlIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0aW5nIGxpc3RcbiAgIHVubGVzcyAqa2VlcGVuZHMqIGlzIGdpdmVuIGFuZCB0cnVlLlxuXG4gICBUaGlzIG1ldGhvZCBzcGxpdHMgb24gdGhlIGZvbGxvd2luZyBsaW5lIGJvdW5kYXJpZXMuICBJblxuICAgcGFydGljdWxhciwgdGhlIGJvdW5kYXJpZXMgYXJlIGEgc3VwZXJzZXQgb2YgKnVuaXZlcnNhbCBuZXdsaW5lcyouXG5cbiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8IFJlcHJlc2VudGF0aW9uICAgICAgICAgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAgICAgfFxuICAgKz09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PStcbiAgIHwgIlxcbiIgICAgICAgICAgICAgICAgICAgIHwgTGluZSBGZWVkICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcciIgICAgICAgICAgICAgICAgICAgIHwgQ2FycmlhZ2UgUmV0dXJuICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcclxcbiIgICAgICAgICAgICAgICAgICB8IENhcnJpYWdlIFJldHVybiArIExpbmUgRmVlZCAgIHxcbiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG4gICB8ICJcXHYiIG9yICJcXHgwYiIgICAgICAgICAgfCBMaW5lIFRhYnVsYXRpb24gICAgICAgICAgICAgICB8XG4gICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuICAgfCAiXFxmIiBvciAiXFx4MGMiICAgICAgICAgIHwgRm9ybSBGZWVkICAgICAgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxceDFjIiAgICAgICAgICAgICAgICAgIHwgRmlsZSBTZXBhcmF0b3IgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxceDFkIiAgICAgICAgICAgICAgICAgIHwgR3JvdXAgU2VwYXJhdG9yICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxceDFlIiAgICAgICAgICAgICAgICAgIHwgUmVjb3JkIFNlcGFyYXRvciAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxceDg1IiAgICAgICAgICAgICAgICAgIHwgTmV4dCBMaW5lIChDMSBDb250cm9sIENvZGUpICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcdTIwMjgiICAgICAgICAgICAgICAgIHwgTGluZSBTZXBhcmF0b3IgICAgICAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbiAgIHwgIlxcdTIwMjkiICAgICAgICAgICAgICAgIHwgUGFyYWdyYXBoIFNlcGFyYXRvciAgICAgICAgICAgfFxuICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcblxuICAgQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogIlxcdiIgYW5kICJcXGYiIGFkZGVkIHRvIGxpc3Qgb2YgbGluZVxuICAgYm91bmRhcmllcy5cblxuICAgRm9yIGV4YW1wbGU6XG5cbiAgICAgID4+PiBcJ2FiIGNcXG5cXG5kZSBmZ1xccmtsXFxyXFxuXCcuc3BsaXRsaW5lcygpXG4gICAgICBbXCdhYiBjXCcsIFwnXCcsIFwnZGUgZmdcJywgXCdrbFwnXVxuICAgICAgPj4+IFwnYWIgY1xcblxcbmRlIGZnXFxya2xcXHJcXG5cJy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpXG4gICAgICBbXCdhYiBjXFxuXCcsIFwnXFxuXCcsIFwnZGUgZmdcXHJcJywgXCdrbFxcclxcblwnXVxuXG4gICBVbmxpa2UgInNwbGl0KCkiIHdoZW4gYSBkZWxpbWl0ZXIgc3RyaW5nICpzZXAqIGlzIGdpdmVuLCB0aGlzXG4gICBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBsaXN0IGZvciB0aGUgZW1wdHkgc3RyaW5nLCBhbmQgYSB0ZXJtaW5hbFxuICAgbGluZSBicmVhayBkb2VzIG5vdCByZXN1bHQgaW4gYW4gZXh0cmEgbGluZTpcblxuICAgICAgPj4+ICIiLnNwbGl0bGluZXMoKVxuICAgICAgW11cbiAgICAgID4+PiAiT25lIGxpbmVcXG4iLnNwbGl0bGluZXMoKVxuICAgICAgW1wnT25lIGxpbmVcJ11cblxuICAgRm9yIGNvbXBhcmlzb24sICJzcGxpdChcJ1xcblwnKSIgZ2l2ZXM6XG5cbiAgICAgID4+PiBcJ1wnLnNwbGl0KFwnXFxuXCcpXG4gICAgICBbXCdcJ11cbiAgICAgID4+PiBcJ1R3byBsaW5lc1xcblwnLnNwbGl0KFwnXFxuXCcpXG4gICAgICBbXCdUd28gbGluZXNcJywgXCdcJ11cblxuc3RyLnN0YXJ0c3dpdGgocHJlZml4Wywgc3RhcnRbLCBlbmRdXSlcblxuICAgUmV0dXJuICJUcnVlIiBpZiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlICpwcmVmaXgqLCBvdGhlcndpc2UgcmV0dXJuXG4gICAiRmFsc2UiLiAqcHJlZml4KiBjYW4gYWxzbyBiZSBhIHR1cGxlIG9mIHByZWZpeGVzIHRvIGxvb2sgZm9yLlxuICAgV2l0aCBvcHRpb25hbCAqc3RhcnQqLCB0ZXN0IHN0cmluZyBiZWdpbm5pbmcgYXQgdGhhdCBwb3NpdGlvbi5cbiAgIFdpdGggb3B0aW9uYWwgKmVuZCosIHN0b3AgY29tcGFyaW5nIHN0cmluZyBhdCB0aGF0IHBvc2l0aW9uLlxuXG5zdHIuc3RyaXAoW2NoYXJzXSlcblxuICAgUmV0dXJuIGEgY29weSBvZiB0aGUgc3RyaW5nIHdpdGggdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG4gICBjaGFyYWN0ZXJzIHJlbW92ZWQuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgdGhlXG4gICBzZXQgb2YgY2hhcmFjdGVycyB0byBiZSByZW1vdmVkLiBJZiBvbWl0dGVkIG9yICJOb25lIiwgdGhlICpjaGFycypcbiAgIGFyZ3VtZW50IGRlZmF1bHRzIHRvIHJlbW92aW5nIHdoaXRlc3BhY2UuIFRoZSAqY2hhcnMqIGFyZ3VtZW50IGlzXG4gICBub3QgYSBwcmVmaXggb3Igc3VmZml4OyByYXRoZXIsIGFsbCBjb21iaW5hdGlvbnMgb2YgaXRzIHZhbHVlcyBhcmVcbiAgIHN0cmlwcGVkOlxuXG4gICAgICA+Pj4gXCcgICBzcGFjaW91cyAgIFwnLnN0cmlwKClcbiAgICAgIFwnc3BhY2lvdXNcJ1xuICAgICAgPj4+IFwnd3d3LmV4YW1wbGUuY29tXCcuc3RyaXAoXCdjbW93ei5cJylcbiAgICAgIFwnZXhhbXBsZVwnXG5cbnN0ci5zd2FwY2FzZSgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIHVwcGVyY2FzZSBjaGFyYWN0ZXJzIGNvbnZlcnRlZCB0b1xuICAgbG93ZXJjYXNlIGFuZCB2aWNlIHZlcnNhLiBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgdGhhdFxuICAgInMuc3dhcGNhc2UoKS5zd2FwY2FzZSgpID09IHMiLlxuXG5zdHIudGl0bGUoKVxuXG4gICBSZXR1cm4gYSB0aXRsZWNhc2VkIHZlcnNpb24gb2YgdGhlIHN0cmluZyB3aGVyZSB3b3JkcyBzdGFydCB3aXRoIGFuXG4gICB1cHBlcmNhc2UgY2hhcmFjdGVyIGFuZCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIGxvd2VyY2FzZS5cblxuICAgRm9yIGV4YW1wbGU6XG5cbiAgICAgID4+PiBcJ0hlbGxvIHdvcmxkXCcudGl0bGUoKVxuICAgICAgXCdIZWxsbyBXb3JsZFwnXG5cbiAgIFRoZSBhbGdvcml0aG0gdXNlcyBhIHNpbXBsZSBsYW5ndWFnZS1pbmRlcGVuZGVudCBkZWZpbml0aW9uIG9mIGFcbiAgIHdvcmQgYXMgZ3JvdXBzIG9mIGNvbnNlY3V0aXZlIGxldHRlcnMuICBUaGUgZGVmaW5pdGlvbiB3b3JrcyBpblxuICAgbWFueSBjb250ZXh0cyBidXQgaXQgbWVhbnMgdGhhdCBhcG9zdHJvcGhlcyBpbiBjb250cmFjdGlvbnMgYW5kXG4gICBwb3NzZXNzaXZlcyBmb3JtIHdvcmQgYm91bmRhcmllcywgd2hpY2ggbWF5IG5vdCBiZSB0aGUgZGVzaXJlZFxuICAgcmVzdWx0OlxuXG4gICAgICA+Pj4gInRoZXlcJ3JlIGJpbGxcJ3MgZnJpZW5kcyBmcm9tIHRoZSBVSyIudGl0bGUoKVxuICAgICAgIlRoZXlcJ1JlIEJpbGxcJ1MgRnJpZW5kcyBGcm9tIFRoZSBVayJcblxuICAgQSB3b3JrYXJvdW5kIGZvciBhcG9zdHJvcGhlcyBjYW4gYmUgY29uc3RydWN0ZWQgdXNpbmcgcmVndWxhclxuICAgZXhwcmVzc2lvbnM6XG5cbiAgICAgID4+PiBpbXBvcnQgcmVcbiAgICAgID4+PiBkZWYgdGl0bGVjYXNlKHMpOlxuICAgICAgLi4uICAgICByZXR1cm4gcmUuc3ViKHIiW0EtWmEtel0rKFwnW0EtWmEtel0rKT8iLFxuICAgICAgLi4uICAgICAgICAgICAgICAgICAgIGxhbWJkYSBtbzogbW8uZ3JvdXAoMClbMF0udXBwZXIoKSArXG4gICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtby5ncm91cCgwKVsxOl0ubG93ZXIoKSxcbiAgICAgIC4uLiAgICAgICAgICAgICAgICAgICBzKVxuICAgICAgLi4uXG4gICAgICA+Pj4gdGl0bGVjYXNlKCJ0aGV5XCdyZSBiaWxsXCdzIGZyaWVuZHMuIilcbiAgICAgICJUaGV5XCdyZSBCaWxsXCdzIEZyaWVuZHMuIlxuXG5zdHIudHJhbnNsYXRlKHRhYmxlKVxuXG4gICBSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgaW4gd2hpY2ggZWFjaCBjaGFyYWN0ZXIgaGFzIGJlZW4gbWFwcGVkXG4gICB0aHJvdWdoIHRoZSBnaXZlbiB0cmFuc2xhdGlvbiB0YWJsZS4gIFRoZSB0YWJsZSBtdXN0IGJlIGFuIG9iamVjdFxuICAgdGhhdCBpbXBsZW1lbnRzIGluZGV4aW5nIHZpYSAiX19nZXRpdGVtX18oKSIsIHR5cGljYWxseSBhICptYXBwaW5nKlxuICAgb3IgKnNlcXVlbmNlKi4gIFdoZW4gaW5kZXhlZCBieSBhIFVuaWNvZGUgb3JkaW5hbCAoYW4gaW50ZWdlciksIHRoZVxuICAgdGFibGUgb2JqZWN0IGNhbiBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZzogcmV0dXJuIGEgVW5pY29kZSBvcmRpbmFsXG4gICBvciBhIHN0cmluZywgdG8gbWFwIHRoZSBjaGFyYWN0ZXIgdG8gb25lIG9yIG1vcmUgb3RoZXIgY2hhcmFjdGVycztcbiAgIHJldHVybiAiTm9uZSIsIHRvIGRlbGV0ZSB0aGUgY2hhcmFjdGVyIGZyb20gdGhlIHJldHVybiBzdHJpbmc7IG9yXG4gICByYWlzZSBhICJMb29rdXBFcnJvciIgZXhjZXB0aW9uLCB0byBtYXAgdGhlIGNoYXJhY3RlciB0byBpdHNlbGYuXG5cbiAgIFlvdSBjYW4gdXNlICJzdHIubWFrZXRyYW5zKCkiIHRvIGNyZWF0ZSBhIHRyYW5zbGF0aW9uIG1hcCBmcm9tXG4gICBjaGFyYWN0ZXItdG8tY2hhcmFjdGVyIG1hcHBpbmdzIGluIGRpZmZlcmVudCBmb3JtYXRzLlxuXG4gICBTZWUgYWxzbyB0aGUgImNvZGVjcyIgbW9kdWxlIGZvciBhIG1vcmUgZmxleGlibGUgYXBwcm9hY2ggdG8gY3VzdG9tXG4gICBjaGFyYWN0ZXIgbWFwcGluZ3MuXG5cbnN0ci51cHBlcigpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyB3aXRoIGFsbCB0aGUgY2FzZWQgY2hhcmFjdGVycyBbNF1cbiAgIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuICBOb3RlIHRoYXQgInN0ci51cHBlcigpLmlzdXBwZXIoKSIgbWlnaHQgYmVcbiAgICJGYWxzZSIgaWYgInMiIGNvbnRhaW5zIHVuY2FzZWQgY2hhcmFjdGVycyBvciBpZiB0aGUgVW5pY29kZVxuICAgY2F0ZWdvcnkgb2YgdGhlIHJlc3VsdGluZyBjaGFyYWN0ZXIocykgaXMgbm90ICJMdSIgKExldHRlcixcbiAgIHVwcGVyY2FzZSksIGJ1dCBlLmcuICJMdCIgKExldHRlciwgdGl0bGVjYXNlKS5cblxuICAgVGhlIHVwcGVyY2FzaW5nIGFsZ29yaXRobSB1c2VkIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMTMgb2YgdGhlXG4gICBVbmljb2RlIFN0YW5kYXJkLlxuXG5zdHIuemZpbGwod2lkdGgpXG5cbiAgIFJldHVybiBhIGNvcHkgb2YgdGhlIHN0cmluZyBsZWZ0IGZpbGxlZCB3aXRoIEFTQ0lJICJcJzBcJyIgZGlnaXRzIHRvXG4gICBtYWtlIGEgc3RyaW5nIG9mIGxlbmd0aCAqd2lkdGgqLiBBIGxlYWRpbmcgc2lnbiBwcmVmaXhcbiAgICgiXCcrXCciLyJcJy1cJyIpIGlzIGhhbmRsZWQgYnkgaW5zZXJ0aW5nIHRoZSBwYWRkaW5nICphZnRlciogdGhlIHNpZ25cbiAgIGNoYXJhY3RlciByYXRoZXIgdGhhbiBiZWZvcmUuIFRoZSBvcmlnaW5hbCBzdHJpbmcgaXMgcmV0dXJuZWQgaWZcbiAgICp3aWR0aCogaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICJsZW4ocykiLlxuXG4gICBGb3IgZXhhbXBsZTpcblxuICAgICAgPj4+ICI0MiIuemZpbGwoNSlcbiAgICAgIFwnMDAwNDJcJ1xuICAgICAgPj4+ICItNDIiLnpmaWxsKDUpXG4gICAgICBcJy0wMDQyXCdcbicsCisgJ3N0cmluZ3MnOiB1J1xuU3RyaW5nIGFuZCBCeXRlcyBsaXRlcmFsc1xuKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5TdHJpbmcgbGl0ZXJhbHMgYXJlIGRlc2NyaWJlZCBieSB0aGUgZm9sbG93aW5nIGxleGljYWwgZGVmaW5pdGlvbnM6XG5cbiAgIHN0cmluZ2xpdGVyYWwgICA6Oj0gW3N0cmluZ3ByZWZpeF0oc2hvcnRzdHJpbmcgfCBsb25nc3RyaW5nKVxuICAgc3RyaW5ncHJlZml4ICAgIDo6PSAiciIgfCAidSIgfCAiUiIgfCAiVSJcbiAgIHNob3J0c3RyaW5nICAgICA6Oj0gIlwnIiBzaG9ydHN0cmluZ2l0ZW0qICJcJyIgfCBcJyJcJyBzaG9ydHN0cmluZ2l0ZW0qIFwnIlwnXG4gICBsb25nc3RyaW5nICAgICAgOjo9ICJcJ1wnXCciIGxvbmdzdHJpbmdpdGVtKiAiXCdcJ1wnIiB8IFwnIiIiXCcgbG9uZ3N0cmluZ2l0ZW0qIFwnIiIiXCdcbiAgIHNob3J0c3RyaW5naXRlbSA6Oj0gc2hvcnRzdHJpbmdjaGFyIHwgc3RyaW5nZXNjYXBlc2VxXG4gICBsb25nc3RyaW5naXRlbSAgOjo9IGxvbmdzdHJpbmdjaGFyIHwgc3RyaW5nZXNjYXBlc2VxXG4gICBzaG9ydHN0cmluZ2NoYXIgOjo9IDxhbnkgc291cmNlIGNoYXJhY3RlciBleGNlcHQgIlxcIiBvciBuZXdsaW5lIG9yIHRoZSBxdW90ZT5cbiAgIGxvbmdzdHJpbmdjaGFyICA6Oj0gPGFueSBzb3VyY2UgY2hhcmFjdGVyIGV4Y2VwdCAiXFwiPlxuICAgc3RyaW5nZXNjYXBlc2VxIDo6PSAiXFwiIDxhbnkgc291cmNlIGNoYXJhY3Rlcj5cblxuICAgYnl0ZXNsaXRlcmFsICAgOjo9IGJ5dGVzcHJlZml4KHNob3J0Ynl0ZXMgfCBsb25nYnl0ZXMpXG4gICBieXRlc3ByZWZpeCAgICA6Oj0gImIiIHwgIkIiIHwgImJyIiB8ICJCciIgfCAiYlIiIHwgIkJSIiB8ICJyYiIgfCAickIiIHwgIlJiIiB8ICJSQiJcbiAgIHNob3J0Ynl0ZXMgICAgIDo6PSAiXCciIHNob3J0Ynl0ZXNpdGVtKiAiXCciIHwgXCciXCcgc2hvcnRieXRlc2l0ZW0qIFwnIlwnXG4gICBsb25nYnl0ZXMgICAgICA6Oj0gIlwnXCdcJyIgbG9uZ2J5dGVzaXRlbSogIlwnXCdcJyIgfCBcJyIiIlwnIGxvbmdieXRlc2l0ZW0qIFwnIiIiXCdcbiAgIHNob3J0Ynl0ZXNpdGVtIDo6PSBzaG9ydGJ5dGVzY2hhciB8IGJ5dGVzZXNjYXBlc2VxXG4gICBsb25nYnl0ZXNpdGVtICA6Oj0gbG9uZ2J5dGVzY2hhciB8IGJ5dGVzZXNjYXBlc2VxXG4gICBzaG9ydGJ5dGVzY2hhciA6Oj0gPGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCIgb3IgbmV3bGluZSBvciB0aGUgcXVvdGU+XG4gICBsb25nYnl0ZXNjaGFyICA6Oj0gPGFueSBBU0NJSSBjaGFyYWN0ZXIgZXhjZXB0ICJcXCI+XG4gICBieXRlc2VzY2FwZXNlcSA6Oj0gIlxcIiA8YW55IEFTQ0lJIGNoYXJhY3Rlcj5cblxuT25lIHN5bnRhY3RpYyByZXN0cmljdGlvbiBub3QgaW5kaWNhdGVkIGJ5IHRoZXNlIHByb2R1Y3Rpb25zIGlzIHRoYXRcbndoaXRlc3BhY2UgaXMgbm90IGFsbG93ZWQgYmV0d2VlbiB0aGUgInN0cmluZ3ByZWZpeCIgb3IgImJ5dGVzcHJlZml4IlxuYW5kIHRoZSByZXN0IG9mIHRoZSBsaXRlcmFsLiBUaGUgc291cmNlIGNoYXJhY3RlciBzZXQgaXMgZGVmaW5lZCBieVxudGhlIGVuY29kaW5nIGRlY2xhcmF0aW9uOyBpdCBpcyBVVEYtOCBpZiBubyBlbmNvZGluZyBkZWNsYXJhdGlvbiBpc1xuZ2l2ZW4gaW4gdGhlIHNvdXJjZSBmaWxlOyBzZWUgc2VjdGlvbiAqRW5jb2RpbmcgZGVjbGFyYXRpb25zKi5cblxuSW4gcGxhaW4gRW5nbGlzaDogQm90aCB0eXBlcyBvZiBsaXRlcmFscyBjYW4gYmUgZW5jbG9zZWQgaW4gbWF0Y2hpbmdcbnNpbmdsZSBxdW90ZXMgKCJcJyIpIG9yIGRvdWJsZSBxdW90ZXMgKCIiIikuICBUaGV5IGNhbiBhbHNvIGJlIGVuY2xvc2VkXG5pbiBtYXRjaGluZyBncm91cHMgb2YgdGhyZWUgc2luZ2xlIG9yIGRvdWJsZSBxdW90ZXMgKHRoZXNlIGFyZVxuZ2VuZXJhbGx5IHJlZmVycmVkIHRvIGFzICp0cmlwbGUtcXVvdGVkIHN0cmluZ3MqKS4gIFRoZSBiYWNrc2xhc2hcbigiXFwiKSBjaGFyYWN0ZXIgaXMgdXNlZCB0byBlc2NhcGUgY2hhcmFjdGVycyB0aGF0IG90aGVyd2lzZSBoYXZlIGFcbnNwZWNpYWwgbWVhbmluZywgc3VjaCBhcyBuZXdsaW5lLCBiYWNrc2xhc2ggaXRzZWxmLCBvciB0aGUgcXVvdGVcbmNoYXJhY3Rlci5cblxuQnl0ZXMgbGl0ZXJhbHMgYXJlIGFsd2F5cyBwcmVmaXhlZCB3aXRoICJcJ2JcJyIgb3IgIlwnQlwnIjsgdGhleSBwcm9kdWNlXG5hbiBpbnN0YW5jZSBvZiB0aGUgImJ5dGVzIiB0eXBlIGluc3RlYWQgb2YgdGhlICJzdHIiIHR5cGUuICBUaGV5IG1heVxub25seSBjb250YWluIEFTQ0lJIGNoYXJhY3RlcnM7IGJ5dGVzIHdpdGggYSBudW1lcmljIHZhbHVlIG9mIDEyOCBvclxuZ3JlYXRlciBtdXN0IGJlIGV4cHJlc3NlZCB3aXRoIGVzY2FwZXMuXG5cbkFzIG9mIFB5dGhvbiAzLjMgaXQgaXMgcG9zc2libGUgYWdhaW4gdG8gcHJlZml4IHN0cmluZyBsaXRlcmFscyB3aXRoIGFcbiJ1IiBwcmVmaXggdG8gc2ltcGxpZnkgbWFpbnRlbmFuY2Ugb2YgZHVhbCAyLnggYW5kIDMueCBjb2RlYmFzZXMuXG5cbkJvdGggc3RyaW5nIGFuZCBieXRlcyBsaXRlcmFscyBtYXkgb3B0aW9uYWxseSBiZSBwcmVmaXhlZCB3aXRoIGFcbmxldHRlciAiXCdyXCciIG9yICJcJ1JcJyI7IHN1Y2ggc3RyaW5ncyBhcmUgY2FsbGVkICpyYXcgc3RyaW5ncyogYW5kIHRyZWF0XG5iYWNrc2xhc2hlcyBhcyBsaXRlcmFsIGNoYXJhY3RlcnMuICBBcyBhIHJlc3VsdCwgaW4gc3RyaW5nIGxpdGVyYWxzLFxuIlwnXFxVXCciIGFuZCAiXCdcXHVcJyIgZXNjYXBlcyBpbiByYXcgc3RyaW5ncyBhcmUgbm90IHRyZWF0ZWQgc3BlY2lhbGx5LlxuR2l2ZW4gdGhhdCBQeXRob24gMi54XCdzIHJhdyB1bmljb2RlIGxpdGVyYWxzIGJlaGF2ZSBkaWZmZXJlbnRseSB0aGFuXG5QeXRob24gMy54XCdzIHRoZSAiXCd1clwnIiBzeW50YXggaXMgbm90IHN1cHBvcnRlZC5cblxuTmV3IGluIHZlcnNpb24gMy4zOiBUaGUgIlwncmJcJyIgcHJlZml4IG9mIHJhdyBieXRlcyBsaXRlcmFscyBoYXMgYmVlblxuYWRkZWQgYXMgYSBzeW5vbnltIG9mICJcJ2JyXCciLlxuXG5OZXcgaW4gdmVyc2lvbiAzLjM6IFN1cHBvcnQgZm9yIHRoZSB1bmljb2RlIGxlZ2FjeSBsaXRlcmFsXG4oInVcJ3ZhbHVlXCciKSB3YXMgcmVpbnRyb2R1Y2VkIHRvIHNpbXBsaWZ5IHRoZSBtYWludGVuYW5jZSBvZiBkdWFsXG5QeXRob24gMi54IGFuZCAzLnggY29kZWJhc2VzLiBTZWUgKipQRVAgNDE0KiogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG5cbkluIHRyaXBsZS1xdW90ZWQgbGl0ZXJhbHMsIHVuZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGVzIGFyZSBhbGxvd2VkXG4oYW5kIGFyZSByZXRhaW5lZCksIGV4Y2VwdCB0aGF0IHRocmVlIHVuZXNjYXBlZCBxdW90ZXMgaW4gYSByb3dcbnRlcm1pbmF0ZSB0aGUgbGl0ZXJhbC4gIChBICJxdW90ZSIgaXMgdGhlIGNoYXJhY3RlciB1c2VkIHRvIG9wZW4gdGhlXG5saXRlcmFsLCBpLmUuIGVpdGhlciAiXCciIG9yICIiIi4pXG5cblVubGVzcyBhbiAiXCdyXCciIG9yICJcJ1JcJyIgcHJlZml4IGlzIHByZXNlbnQsIGVzY2FwZSBzZXF1ZW5jZXMgaW4gc3RyaW5nXG5hbmQgYnl0ZXMgbGl0ZXJhbHMgYXJlIGludGVycHJldGVkIGFjY29yZGluZyB0byBydWxlcyBzaW1pbGFyIHRvIHRob3NlXG51c2VkIGJ5IFN0YW5kYXJkIEMuICBUaGUgcmVjb2duaXplZCBlc2NhcGUgc2VxdWVuY2VzIGFyZTpcblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCBFc2NhcGUgU2VxdWVuY2UgICB8IE1lYW5pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgfFxuKz09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09K1xufCAiXFxuZXdsaW5lIiAgICAgICAgfCBCYWNrc2xhc2ggYW5kIG5ld2xpbmUgaWdub3JlZCAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcXFwiICAgICAgICAgICAgICB8IEJhY2tzbGFzaCAoIlxcIikgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcXCciICAgICAgICAgICAgICB8IFNpbmdsZSBxdW90ZSAoIlwnIikgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcIiIgICAgICAgICAgICAgIHwgRG91YmxlIHF1b3RlICgiIiIpICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXGEiICAgICAgICAgICAgICB8IEFTQ0lJIEJlbGwgKEJFTCkgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxiIiAgICAgICAgICAgICAgfCBBU0NJSSBCYWNrc3BhY2UgKEJTKSAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcZiIgICAgICAgICAgICAgIHwgQVNDSUkgRm9ybWZlZWQgKEZGKSAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXG4iICAgICAgICAgICAgICB8IEFTQ0lJIExpbmVmZWVkIChMRikgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxyIiAgICAgICAgICAgICAgfCBBU0NJSSBDYXJyaWFnZSBSZXR1cm4gKENSKSAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxcdCIgICAgICAgICAgICAgIHwgQVNDSUkgSG9yaXpvbnRhbCBUYWIgKFRBQikgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXHYiICAgICAgICAgICAgICB8IEFTQ0lJIFZlcnRpY2FsIFRhYiAoVlQpICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxvb28iICAgICAgICAgICAgfCBDaGFyYWN0ZXIgd2l0aCBvY3RhbCB2YWx1ZSAqb29vKiAgfCAoMSwzKSAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgIlxceGhoIiAgICAgICAgICAgIHwgQ2hhcmFjdGVyIHdpdGggaGV4IHZhbHVlICpoaCogICAgIHwgKDIsMykgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG5cbkVzY2FwZSBzZXF1ZW5jZXMgb25seSByZWNvZ25pemVkIGluIHN0cmluZyBsaXRlcmFscyBhcmU6XG5cbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcbnwgRXNjYXBlIFNlcXVlbmNlICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgIHxcbis9PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PStcbnwgIlxcTntuYW1lfSIgICAgICAgIHwgQ2hhcmFjdGVyIG5hbWVkICpuYW1lKiBpbiB0aGUgICAgIHwgKDQpICAgICB8XG58ICAgICAgICAgICAgICAgICAgIHwgVW5pY29kZSBkYXRhYmFzZSAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rXG58ICJcXHV4eHh4IiAgICAgICAgICB8IENoYXJhY3RlciB3aXRoIDE2LWJpdCBoZXggdmFsdWUgICB8ICg1KSAgICAgfFxufCAgICAgICAgICAgICAgICAgICB8ICp4eHh4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tK1xufCAiXFxVeHh4eHh4eHgiICAgICAgfCBDaGFyYWN0ZXIgd2l0aCAzMi1iaXQgaGV4IHZhbHVlICAgfCAoNikgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgfCAqeHh4eHh4eHgqICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLStcblxuTm90ZXM6XG5cbjEuIEFzIGluIFN0YW5kYXJkIEMsIHVwIHRvIHRocmVlIG9jdGFsIGRpZ2l0cyBhcmUgYWNjZXB0ZWQuXG5cbjIuIFVubGlrZSBpbiBTdGFuZGFyZCBDLCBleGFjdGx5IHR3byBoZXggZGlnaXRzIGFyZSByZXF1aXJlZC5cblxuMy4gSW4gYSBieXRlcyBsaXRlcmFsLCBoZXhhZGVjaW1hbCBhbmQgb2N0YWwgZXNjYXBlcyBkZW5vdGUgdGhlXG4gICBieXRlIHdpdGggdGhlIGdpdmVuIHZhbHVlLiBJbiBhIHN0cmluZyBsaXRlcmFsLCB0aGVzZSBlc2NhcGVzXG4gICBkZW5vdGUgYSBVbmljb2RlIGNoYXJhY3RlciB3aXRoIHRoZSBnaXZlbiB2YWx1ZS5cblxuNC4gQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogU3VwcG9ydCBmb3IgbmFtZSBhbGlhc2VzIFsxXSBoYXMgYmVlblxuICAgYWRkZWQuXG5cbjUuIEluZGl2aWR1YWwgY29kZSB1bml0cyB3aGljaCBmb3JtIHBhcnRzIG9mIGEgc3Vycm9nYXRlIHBhaXIgY2FuXG4gICBiZSBlbmNvZGVkIHVzaW5nIHRoaXMgZXNjYXBlIHNlcXVlbmNlLiAgRXhhY3RseSBmb3VyIGhleCBkaWdpdHMgYXJlXG4gICByZXF1aXJlZC5cblxuNi4gQW55IFVuaWNvZGUgY2hhcmFjdGVyIGNhbiBiZSBlbmNvZGVkIHRoaXMgd2F5LiAgRXhhY3RseSBlaWdodFxuICAgaGV4IGRpZ2l0cyBhcmUgcmVxdWlyZWQuXG5cblVubGlrZSBTdGFuZGFyZCBDLCBhbGwgdW5yZWNvZ25pemVkIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIGxlZnQgaW4gdGhlXG5zdHJpbmcgdW5jaGFuZ2VkLCBpLmUuLCAqdGhlIGJhY2tzbGFzaCBpcyBsZWZ0IGluIHRoZSByZXN1bHQqLiAgKFRoaXNcbmJlaGF2aW9yIGlzIHVzZWZ1bCB3aGVuIGRlYnVnZ2luZzogaWYgYW4gZXNjYXBlIHNlcXVlbmNlIGlzIG1pc3R5cGVkLFxudGhlIHJlc3VsdGluZyBvdXRwdXQgaXMgbW9yZSBlYXNpbHkgcmVjb2duaXplZCBhcyBicm9rZW4uKSAgSXQgaXMgYWxzb1xuaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgZXNjYXBlIHNlcXVlbmNlcyBvbmx5IHJlY29nbml6ZWQgaW4gc3RyaW5nXG5saXRlcmFscyBmYWxsIGludG8gdGhlIGNhdGVnb3J5IG9mIHVucmVjb2duaXplZCBlc2NhcGVzIGZvciBieXRlc1xubGl0ZXJhbHMuXG5cbkV2ZW4gaW4gYSByYXcgbGl0ZXJhbCwgcXVvdGVzIGNhbiBiZSBlc2NhcGVkIHdpdGggYSBiYWNrc2xhc2gsIGJ1dCB0aGVcbmJhY2tzbGFzaCByZW1haW5zIGluIHRoZSByZXN1bHQ7IGZvciBleGFtcGxlLCAiciJcXCIiIiBpcyBhIHZhbGlkXG5zdHJpbmcgbGl0ZXJhbCBjb25zaXN0aW5nIG9mIHR3byBjaGFyYWN0ZXJzOiBhIGJhY2tzbGFzaCBhbmQgYSBkb3VibGVcbnF1b3RlOyAiciJcXCIiIGlzIG5vdCBhIHZhbGlkIHN0cmluZyBsaXRlcmFsIChldmVuIGEgcmF3IHN0cmluZyBjYW5ub3RcbmVuZCBpbiBhbiBvZGQgbnVtYmVyIG9mIGJhY2tzbGFzaGVzKS4gIFNwZWNpZmljYWxseSwgKmEgcmF3IGxpdGVyYWxcbmNhbm5vdCBlbmQgaW4gYSBzaW5nbGUgYmFja3NsYXNoKiAoc2luY2UgdGhlIGJhY2tzbGFzaCB3b3VsZCBlc2NhcGVcbnRoZSBmb2xsb3dpbmcgcXVvdGUgY2hhcmFjdGVyKS4gIE5vdGUgYWxzbyB0aGF0IGEgc2luZ2xlIGJhY2tzbGFzaFxuZm9sbG93ZWQgYnkgYSBuZXdsaW5lIGlzIGludGVycHJldGVkIGFzIHRob3NlIHR3byBjaGFyYWN0ZXJzIGFzIHBhcnRcbm9mIHRoZSBsaXRlcmFsLCAqbm90KiBhcyBhIGxpbmUgY29udGludWF0aW9uLlxuJywKKyAnc3Vic2NyaXB0aW9ucyc6IHUnXG5TdWJzY3JpcHRpb25zXG4qKioqKioqKioqKioqXG5cbkEgc3Vic2NyaXB0aW9uIHNlbGVjdHMgYW4gaXRlbSBvZiBhIHNlcXVlbmNlIChzdHJpbmcsIHR1cGxlIG9yIGxpc3QpXG5vciBtYXBwaW5nIChkaWN0aW9uYXJ5KSBvYmplY3Q6XG5cbiAgIHN1YnNjcmlwdGlvbiA6Oj0gcHJpbWFyeSAiWyIgZXhwcmVzc2lvbl9saXN0ICJdIlxuXG5UaGUgcHJpbWFyeSBtdXN0IGV2YWx1YXRlIHRvIGFuIG9iamVjdCB0aGF0IHN1cHBvcnRzIHN1YnNjcmlwdGlvblxuKGxpc3RzIG9yIGRpY3Rpb25hcmllcyBmb3IgZXhhbXBsZSkuICBVc2VyLWRlZmluZWQgb2JqZWN0cyBjYW4gc3VwcG9ydFxuc3Vic2NyaXB0aW9uIGJ5IGRlZmluaW5nIGEgIl9fZ2V0aXRlbV9fKCkiIG1ldGhvZC5cblxuRm9yIGJ1aWx0LWluIG9iamVjdHMsIHRoZXJlIGFyZSB0d28gdHlwZXMgb2Ygb2JqZWN0cyB0aGF0IHN1cHBvcnRcbnN1YnNjcmlwdGlvbjpcblxuSWYgdGhlIHByaW1hcnkgaXMgYSBtYXBwaW5nLCB0aGUgZXhwcmVzc2lvbiBsaXN0IG11c3QgZXZhbHVhdGUgdG8gYW5cbm9iamVjdCB3aG9zZSB2YWx1ZSBpcyBvbmUgb2YgdGhlIGtleXMgb2YgdGhlIG1hcHBpbmcsIGFuZCB0aGVcbnN1YnNjcmlwdGlvbiBzZWxlY3RzIHRoZSB2YWx1ZSBpbiB0aGUgbWFwcGluZyB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoYXRcbmtleS4gIChUaGUgZXhwcmVzc2lvbiBsaXN0IGlzIGEgdHVwbGUgZXhjZXB0IGlmIGl0IGhhcyBleGFjdGx5IG9uZVxuaXRlbS4pXG5cbklmIHRoZSBwcmltYXJ5IGlzIGEgc2VxdWVuY2UsIHRoZSBleHByZXNzaW9uIChsaXN0KSBtdXN0IGV2YWx1YXRlIHRvXG5hbiBpbnRlZ2VyIG9yIGEgc2xpY2UgKGFzIGRpc2N1c3NlZCBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24pLlxuXG5UaGUgZm9ybWFsIHN5bnRheCBtYWtlcyBubyBzcGVjaWFsIHByb3Zpc2lvbiBmb3IgbmVnYXRpdmUgaW5kaWNlcyBpblxuc2VxdWVuY2VzOyBob3dldmVyLCBidWlsdC1pbiBzZXF1ZW5jZXMgYWxsIHByb3ZpZGUgYSAiX19nZXRpdGVtX18oKSJcbm1ldGhvZCB0aGF0IGludGVycHJldHMgbmVnYXRpdmUgaW5kaWNlcyBieSBhZGRpbmcgdGhlIGxlbmd0aCBvZiB0aGVcbnNlcXVlbmNlIHRvIHRoZSBpbmRleCAoc28gdGhhdCAieFstMV0iIHNlbGVjdHMgdGhlIGxhc3QgaXRlbSBvZiAieCIpLlxuVGhlIHJlc3VsdGluZyB2YWx1ZSBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciBsZXNzIHRoYW4gdGhlIG51bWJlclxub2YgaXRlbXMgaW4gdGhlIHNlcXVlbmNlLCBhbmQgdGhlIHN1YnNjcmlwdGlvbiBzZWxlY3RzIHRoZSBpdGVtIHdob3NlXG5pbmRleCBpcyB0aGF0IHZhbHVlIChjb3VudGluZyBmcm9tIHplcm8pLiBTaW5jZSB0aGUgc3VwcG9ydCBmb3Jcbm5lZ2F0aXZlIGluZGljZXMgYW5kIHNsaWNpbmcgb2NjdXJzIGluIHRoZSBvYmplY3RcJ3MgIl9fZ2V0aXRlbV9fKCkiXG5tZXRob2QsIHN1YmNsYXNzZXMgb3ZlcnJpZGluZyB0aGlzIG1ldGhvZCB3aWxsIG5lZWQgdG8gZXhwbGljaXRseSBhZGRcbnRoYXQgc3VwcG9ydC5cblxuQSBzdHJpbmdcJ3MgaXRlbXMgYXJlIGNoYXJhY3RlcnMuICBBIGNoYXJhY3RlciBpcyBub3QgYSBzZXBhcmF0ZSBkYXRhXG50eXBlIGJ1dCBhIHN0cmluZyBvZiBleGFjdGx5IG9uZSBjaGFyYWN0ZXIuXG4nLAorICd0cnV0aCc6IHUnXG5UcnV0aCBWYWx1ZSBUZXN0aW5nXG4qKioqKioqKioqKioqKioqKioqXG5cbkFueSBvYmplY3QgY2FuIGJlIHRlc3RlZCBmb3IgdHJ1dGggdmFsdWUsIGZvciB1c2UgaW4gYW4gImlmIiBvclxuIndoaWxlIiBjb25kaXRpb24gb3IgYXMgb3BlcmFuZCBvZiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zIGJlbG93LiBUaGVcbmZvbGxvd2luZyB2YWx1ZXMgYXJlIGNvbnNpZGVyZWQgZmFsc2U6XG5cbiogIk5vbmUiXG5cbiogIkZhbHNlIlxuXG4qIHplcm8gb2YgYW55IG51bWVyaWMgdHlwZSwgZm9yIGV4YW1wbGUsICIwIiwgIjAuMCIsICIwaiIuXG5cbiogYW55IGVtcHR5IHNlcXVlbmNlLCBmb3IgZXhhbXBsZSwgIlwnXCciLCAiKCkiLCAiW10iLlxuXG4qIGFueSBlbXB0eSBtYXBwaW5nLCBmb3IgZXhhbXBsZSwgInt9Ii5cblxuKiBpbnN0YW5jZXMgb2YgdXNlci1kZWZpbmVkIGNsYXNzZXMsIGlmIHRoZSBjbGFzcyBkZWZpbmVzIGFcbiAgIl9fYm9vbF9fKCkiIG9yICJfX2xlbl9fKCkiIG1ldGhvZCwgd2hlbiB0aGF0IG1ldGhvZCByZXR1cm5zIHRoZVxuICBpbnRlZ2VyIHplcm8gb3IgImJvb2wiIHZhbHVlICJGYWxzZSIuIFsxXVxuXG5BbGwgb3RoZXIgdmFsdWVzIGFyZSBjb25zaWRlcmVkIHRydWUgLS0tIHNvIG9iamVjdHMgb2YgbWFueSB0eXBlcyBhcmVcbmFsd2F5cyB0cnVlLlxuXG5PcGVyYXRpb25zIGFuZCBidWlsdC1pbiBmdW5jdGlvbnMgdGhhdCBoYXZlIGEgQm9vbGVhbiByZXN1bHQgYWx3YXlzXG5yZXR1cm4gIjAiIG9yICJGYWxzZSIgZm9yIGZhbHNlIGFuZCAiMSIgb3IgIlRydWUiIGZvciB0cnVlLCB1bmxlc3Ncbm90aGVyd2lzZSBzdGF0ZWQuIChJbXBvcnRhbnQgZXhjZXB0aW9uOiB0aGUgQm9vbGVhbiBvcGVyYXRpb25zICJvciJcbmFuZCAiYW5kIiBhbHdheXMgcmV0dXJuIG9uZSBvZiB0aGVpciBvcGVyYW5kcy4pXG4nLAorICd0cnknOiB1J1xuVGhlICJ0cnkiIHN0YXRlbWVudFxuKioqKioqKioqKioqKioqKioqKlxuXG5UaGUgInRyeSIgc3RhdGVtZW50IHNwZWNpZmllcyBleGNlcHRpb24gaGFuZGxlcnMgYW5kL29yIGNsZWFudXAgY29kZVxuZm9yIGEgZ3JvdXAgb2Ygc3RhdGVtZW50czpcblxuICAgdHJ5X3N0bXQgIDo6PSB0cnkxX3N0bXQgfCB0cnkyX3N0bXRcbiAgIHRyeTFfc3RtdCA6Oj0gInRyeSIgIjoiIHN1aXRlXG4gICAgICAgICAgICAgICAgICgiZXhjZXB0IiBbZXhwcmVzc2lvbiBbImFzIiBpZGVudGlmaWVyXV0gIjoiIHN1aXRlKStcbiAgICAgICAgICAgICAgICAgWyJlbHNlIiAiOiIgc3VpdGVdXG4gICAgICAgICAgICAgICAgIFsiZmluYWxseSIgIjoiIHN1aXRlXVxuICAgdHJ5Ml9zdG10IDo6PSAidHJ5IiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgImZpbmFsbHkiICI6IiBzdWl0ZVxuXG5UaGUgImV4Y2VwdCIgY2xhdXNlKHMpIHNwZWNpZnkgb25lIG9yIG1vcmUgZXhjZXB0aW9uIGhhbmRsZXJzLiBXaGVuIG5vXG5leGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBjbGF1c2UsIG5vIGV4Y2VwdGlvbiBoYW5kbGVyIGlzXG5leGVjdXRlZC4gV2hlbiBhbiBleGNlcHRpb24gb2NjdXJzIGluIHRoZSAidHJ5IiBzdWl0ZSwgYSBzZWFyY2ggZm9yIGFuXG5leGNlcHRpb24gaGFuZGxlciBpcyBzdGFydGVkLiAgVGhpcyBzZWFyY2ggaW5zcGVjdHMgdGhlIGV4Y2VwdCBjbGF1c2VzXG5pbiB0dXJuIHVudGlsIG9uZSBpcyBmb3VuZCB0aGF0IG1hdGNoZXMgdGhlIGV4Y2VwdGlvbi4gIEFuIGV4cHJlc3Npb24tXG5sZXNzIGV4Y2VwdCBjbGF1c2UsIGlmIHByZXNlbnQsIG11c3QgYmUgbGFzdDsgaXQgbWF0Y2hlcyBhbnlcbmV4Y2VwdGlvbi4gIEZvciBhbiBleGNlcHQgY2xhdXNlIHdpdGggYW4gZXhwcmVzc2lvbiwgdGhhdCBleHByZXNzaW9uXG5pcyBldmFsdWF0ZWQsIGFuZCB0aGUgY2xhdXNlIG1hdGNoZXMgdGhlIGV4Y2VwdGlvbiBpZiB0aGUgcmVzdWx0aW5nXG5vYmplY3QgaXMgImNvbXBhdGlibGUiIHdpdGggdGhlIGV4Y2VwdGlvbi4gIEFuIG9iamVjdCBpcyBjb21wYXRpYmxlXG53aXRoIGFuIGV4Y2VwdGlvbiBpZiBpdCBpcyB0aGUgY2xhc3Mgb3IgYSBiYXNlIGNsYXNzIG9mIHRoZSBleGNlcHRpb25cbm9iamVjdCBvciBhIHR1cGxlIGNvbnRhaW5pbmcgYW4gaXRlbSBjb21wYXRpYmxlIHdpdGggdGhlIGV4Y2VwdGlvbi5cblxuSWYgbm8gZXhjZXB0IGNsYXVzZSBtYXRjaGVzIHRoZSBleGNlcHRpb24sIHRoZSBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvblxuaGFuZGxlciBjb250aW51ZXMgaW4gdGhlIHN1cnJvdW5kaW5nIGNvZGUgYW5kIG9uIHRoZSBpbnZvY2F0aW9uIHN0YWNrLlxuWzFdXG5cbklmIHRoZSBldmFsdWF0aW9uIG9mIGFuIGV4cHJlc3Npb24gaW4gdGhlIGhlYWRlciBvZiBhbiBleGNlcHQgY2xhdXNlXG5yYWlzZXMgYW4gZXhjZXB0aW9uLCB0aGUgb3JpZ2luYWwgc2VhcmNoIGZvciBhIGhhbmRsZXIgaXMgY2FuY2VsZWQgYW5kXG5hIHNlYXJjaCBzdGFydHMgZm9yIHRoZSBuZXcgZXhjZXB0aW9uIGluIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBvblxudGhlIGNhbGwgc3RhY2sgKGl0IGlzIHRyZWF0ZWQgYXMgaWYgdGhlIGVudGlyZSAidHJ5IiBzdGF0ZW1lbnQgcmFpc2VkXG50aGUgZXhjZXB0aW9uKS5cblxuV2hlbiBhIG1hdGNoaW5nIGV4Y2VwdCBjbGF1c2UgaXMgZm91bmQsIHRoZSBleGNlcHRpb24gaXMgYXNzaWduZWQgdG9cbnRoZSB0YXJnZXQgc3BlY2lmaWVkIGFmdGVyIHRoZSAiYXMiIGtleXdvcmQgaW4gdGhhdCBleGNlcHQgY2xhdXNlLCBpZlxucHJlc2VudCwgYW5kIHRoZSBleGNlcHQgY2xhdXNlXCdzIHN1aXRlIGlzIGV4ZWN1dGVkLiAgQWxsIGV4Y2VwdFxuY2xhdXNlcyBtdXN0IGhhdmUgYW4gZXhlY3V0YWJsZSBibG9jay4gIFdoZW4gdGhlIGVuZCBvZiB0aGlzIGJsb2NrIGlzXG5yZWFjaGVkLCBleGVjdXRpb24gY29udGludWVzIG5vcm1hbGx5IGFmdGVyIHRoZSBlbnRpcmUgdHJ5IHN0YXRlbWVudC5cbihUaGlzIG1lYW5zIHRoYXQgaWYgdHdvIG5lc3RlZCBoYW5kbGVycyBleGlzdCBmb3IgdGhlIHNhbWUgZXhjZXB0aW9uLFxuYW5kIHRoZSBleGNlcHRpb24gb2NjdXJzIGluIHRoZSB0cnkgY2xhdXNlIG9mIHRoZSBpbm5lciBoYW5kbGVyLCB0aGVcbm91dGVyIGhhbmRsZXIgd2lsbCBub3QgaGFuZGxlIHRoZSBleGNlcHRpb24uKVxuXG5XaGVuIGFuIGV4Y2VwdGlvbiBoYXMgYmVlbiBhc3NpZ25lZCB1c2luZyAiYXMgdGFyZ2V0IiwgaXQgaXMgY2xlYXJlZFxuYXQgdGhlIGVuZCBvZiB0aGUgZXhjZXB0IGNsYXVzZS4gIFRoaXMgaXMgYXMgaWZcblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICBmb29cblxud2FzIHRyYW5zbGF0ZWQgdG9cblxuICAgZXhjZXB0IEUgYXMgTjpcbiAgICAgICB0cnk6XG4gICAgICAgICAgIGZvb1xuICAgICAgIGZpbmFsbHk6XG4gICAgICAgICAgIGRlbCBOXG5cblRoaXMgbWVhbnMgdGhlIGV4Y2VwdGlvbiBtdXN0IGJlIGFzc2lnbmVkIHRvIGEgZGlmZmVyZW50IG5hbWUgdG8gYmVcbmFibGUgdG8gcmVmZXIgdG8gaXQgYWZ0ZXIgdGhlIGV4Y2VwdCBjbGF1c2UuICBFeGNlcHRpb25zIGFyZSBjbGVhcmVkXG5iZWNhdXNlIHdpdGggdGhlIHRyYWNlYmFjayBhdHRhY2hlZCB0byB0aGVtLCB0aGV5IGZvcm0gYSByZWZlcmVuY2VcbmN5Y2xlIHdpdGggdGhlIHN0YWNrIGZyYW1lLCBrZWVwaW5nIGFsbCBsb2NhbHMgaW4gdGhhdCBmcmFtZSBhbGl2ZVxudW50aWwgdGhlIG5leHQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9jY3Vycy5cblxuQmVmb3JlIGFuIGV4Y2VwdCBjbGF1c2VcJ3Mgc3VpdGUgaXMgZXhlY3V0ZWQsIGRldGFpbHMgYWJvdXQgdGhlXG5leGNlcHRpb24gYXJlIHN0b3JlZCBpbiB0aGUgInN5cyIgbW9kdWxlIGFuZCBjYW4gYmUgYWNjZXNzZWQgdmlhXG4ic3lzLmV4Y19pbmZvKCkiLiAic3lzLmV4Y19pbmZvKCkiIHJldHVybnMgYSAzLXR1cGxlIGNvbnNpc3Rpbmcgb2YgdGhlXG5leGNlcHRpb24gY2xhc3MsIHRoZSBleGNlcHRpb24gaW5zdGFuY2UgYW5kIGEgdHJhY2ViYWNrIG9iamVjdCAoc2VlXG5zZWN0aW9uICpUaGUgc3RhbmRhcmQgdHlwZSBoaWVyYXJjaHkqKSBpZGVudGlmeWluZyB0aGUgcG9pbnQgaW4gdGhlXG5wcm9ncmFtIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQuICAic3lzLmV4Y19pbmZvKCkiIHZhbHVlcyBhcmVcbnJlc3RvcmVkIHRvIHRoZWlyIHByZXZpb3VzIHZhbHVlcyAoYmVmb3JlIHRoZSBjYWxsKSB3aGVuIHJldHVybmluZ1xuZnJvbSBhIGZ1bmN0aW9uIHRoYXQgaGFuZGxlZCBhbiBleGNlcHRpb24uXG5cblRoZSBvcHRpb25hbCAiZWxzZSIgY2xhdXNlIGlzIGV4ZWN1dGVkIGlmIGFuZCB3aGVuIGNvbnRyb2wgZmxvd3Mgb2ZmXG50aGUgZW5kIG9mIHRoZSAidHJ5IiBjbGF1c2UuIFsyXSBFeGNlcHRpb25zIGluIHRoZSAiZWxzZSIgY2xhdXNlIGFyZVxubm90IGhhbmRsZWQgYnkgdGhlIHByZWNlZGluZyAiZXhjZXB0IiBjbGF1c2VzLlxuXG5JZiAiZmluYWxseSIgaXMgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgXCdjbGVhbnVwXCcgaGFuZGxlci4gIFRoZSAidHJ5IlxuY2xhdXNlIGlzIGV4ZWN1dGVkLCBpbmNsdWRpbmcgYW55ICJleGNlcHQiIGFuZCAiZWxzZSIgY2xhdXNlcy4gIElmIGFuXG5leGNlcHRpb24gb2NjdXJzIGluIGFueSBvZiB0aGUgY2xhdXNlcyBhbmQgaXMgbm90IGhhbmRsZWQsIHRoZVxuZXhjZXB0aW9uIGlzIHRlbXBvcmFyaWx5IHNhdmVkLiBUaGUgImZpbmFsbHkiIGNsYXVzZSBpcyBleGVjdXRlZC4gIElmXG50aGVyZSBpcyBhIHNhdmVkIGV4Y2VwdGlvbiBpdCBpcyByZS1yYWlzZWQgYXQgdGhlIGVuZCBvZiB0aGUgImZpbmFsbHkiXG5jbGF1c2UuICBJZiB0aGUgImZpbmFsbHkiIGNsYXVzZSByYWlzZXMgYW5vdGhlciBleGNlcHRpb24sIHRoZSBzYXZlZFxuZXhjZXB0aW9uIGlzIHNldCBhcyB0aGUgY29udGV4dCBvZiB0aGUgbmV3IGV4Y2VwdGlvbi4gSWYgdGhlICJmaW5hbGx5IlxuY2xhdXNlIGV4ZWN1dGVzIGEgInJldHVybiIgb3IgImJyZWFrIiBzdGF0ZW1lbnQsIHRoZSBzYXZlZCBleGNlcHRpb25cbmlzIGRpc2NhcmRlZDpcblxuICAgPj4+IGRlZiBmKCk6XG4gICAuLi4gICAgIHRyeTpcbiAgIC4uLiAgICAgICAgIDEvMFxuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIDQyXG4gICAuLi5cbiAgID4+PiBmKClcbiAgIDQyXG5cblRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbSBkdXJpbmdcbmV4ZWN1dGlvbiBvZiB0aGUgImZpbmFsbHkiIGNsYXVzZS5cblxuV2hlbiBhICJyZXR1cm4iLCAiYnJlYWsiIG9yICJjb250aW51ZSIgc3RhdGVtZW50IGlzIGV4ZWN1dGVkIGluIHRoZVxuInRyeSIgc3VpdGUgb2YgYSAidHJ5Ii4uLiJmaW5hbGx5IiBzdGF0ZW1lbnQsIHRoZSAiZmluYWxseSIgY2xhdXNlIGlzXG5hbHNvIGV4ZWN1dGVkIFwnb24gdGhlIHdheSBvdXQuXCcgQSAiY29udGludWUiIHN0YXRlbWVudCBpcyBpbGxlZ2FsIGluXG50aGUgImZpbmFsbHkiIGNsYXVzZS4gKFRoZSByZWFzb24gaXMgYSBwcm9ibGVtIHdpdGggdGhlIGN1cnJlbnRcbmltcGxlbWVudGF0aW9uIC0tLSB0aGlzIHJlc3RyaWN0aW9uIG1heSBiZSBsaWZ0ZWQgaW4gdGhlIGZ1dHVyZSkuXG5cblRoZSByZXR1cm4gdmFsdWUgb2YgYSBmdW5jdGlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsYXN0ICJyZXR1cm4iXG5zdGF0ZW1lbnQgZXhlY3V0ZWQuICBTaW5jZSB0aGUgImZpbmFsbHkiIGNsYXVzZSBhbHdheXMgZXhlY3V0ZXMsIGFcbiJyZXR1cm4iIHN0YXRlbWVudCBleGVjdXRlZCBpbiB0aGUgImZpbmFsbHkiIGNsYXVzZSB3aWxsIGFsd2F5cyBiZSB0aGVcbmxhc3Qgb25lIGV4ZWN1dGVkOlxuXG4gICA+Pj4gZGVmIGZvbygpOlxuICAgLi4uICAgICB0cnk6XG4gICAuLi4gICAgICAgICByZXR1cm4gXCd0cnlcJ1xuICAgLi4uICAgICBmaW5hbGx5OlxuICAgLi4uICAgICAgICAgcmV0dXJuIFwnZmluYWxseVwnXG4gICAuLi5cbiAgID4+PiBmb28oKVxuICAgXCdmaW5hbGx5XCdcblxuQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiBleGNlcHRpb25zIGNhbiBiZSBmb3VuZCBpbiBzZWN0aW9uXG4qRXhjZXB0aW9ucyosIGFuZCBpbmZvcm1hdGlvbiBvbiB1c2luZyB0aGUgInJhaXNlIiBzdGF0ZW1lbnQgdG9cbmdlbmVyYXRlIGV4Y2VwdGlvbnMgbWF5IGJlIGZvdW5kIGluIHNlY3Rpb24gKlRoZSByYWlzZSBzdGF0ZW1lbnQqLlxuJywKKyAndHlwZXMnOiB1J1xuVGhlIHN0YW5kYXJkIHR5cGUgaGllcmFyY2h5XG4qKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuQmVsb3cgaXMgYSBsaXN0IG9mIHRoZSB0eXBlcyB0aGF0IGFyZSBidWlsdCBpbnRvIFB5dGhvbi4gIEV4dGVuc2lvblxubW9kdWxlcyAod3JpdHRlbiBpbiBDLCBKYXZhLCBvciBvdGhlciBsYW5ndWFnZXMsIGRlcGVuZGluZyBvbiB0aGVcbmltcGxlbWVudGF0aW9uKSBjYW4gZGVmaW5lIGFkZGl0aW9uYWwgdHlwZXMuICBGdXR1cmUgdmVyc2lvbnMgb2ZcblB5dGhvbiBtYXkgYWRkIHR5cGVzIHRvIHRoZSB0eXBlIGhpZXJhcmNoeSAoZS5nLiwgcmF0aW9uYWwgbnVtYmVycyxcbmVmZmljaWVudGx5IHN0b3JlZCBhcnJheXMgb2YgaW50ZWdlcnMsIGV0Yy4pLCBhbHRob3VnaCBzdWNoIGFkZGl0aW9uc1xud2lsbCBvZnRlbiBiZSBwcm92aWRlZCB2aWEgdGhlIHN0YW5kYXJkIGxpYnJhcnkgaW5zdGVhZC5cblxuU29tZSBvZiB0aGUgdHlwZSBkZXNjcmlwdGlvbnMgYmVsb3cgY29udGFpbiBhIHBhcmFncmFwaCBsaXN0aW5nXG5cJ3NwZWNpYWwgYXR0cmlidXRlcy5cJyAgVGhlc2UgYXJlIGF0dHJpYnV0ZXMgdGhhdCBwcm92aWRlIGFjY2VzcyB0byB0aGVcbmltcGxlbWVudGF0aW9uIGFuZCBhcmUgbm90IGludGVuZGVkIGZvciBnZW5lcmFsIHVzZS4gIFRoZWlyIGRlZmluaXRpb25cbm1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuTm9uZVxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lICJOb25lIi4gSXRcbiAgIGlzIHVzZWQgdG8gc2lnbmlmeSB0aGUgYWJzZW5jZSBvZiBhIHZhbHVlIGluIG1hbnkgc2l0dWF0aW9ucywgZS5nLixcbiAgIGl0IGlzIHJldHVybmVkIGZyb20gZnVuY3Rpb25zIHRoYXQgZG9uXCd0IGV4cGxpY2l0bHkgcmV0dXJuXG4gICBhbnl0aGluZy4gSXRzIHRydXRoIHZhbHVlIGlzIGZhbHNlLlxuXG5Ob3RJbXBsZW1lbnRlZFxuICAgVGhpcyB0eXBlIGhhcyBhIHNpbmdsZSB2YWx1ZS4gIFRoZXJlIGlzIGEgc2luZ2xlIG9iamVjdCB3aXRoIHRoaXNcbiAgIHZhbHVlLiBUaGlzIG9iamVjdCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBidWlsdC1pbiBuYW1lXG4gICAiTm90SW1wbGVtZW50ZWQiLiBOdW1lcmljIG1ldGhvZHMgYW5kIHJpY2ggY29tcGFyaXNvbiBtZXRob2RzXG4gICBzaG91bGQgcmV0dXJuIHRoaXMgdmFsdWUgaWYgdGhleSBkbyBub3QgaW1wbGVtZW50IHRoZSBvcGVyYXRpb24gZm9yXG4gICB0aGUgb3BlcmFuZHMgcHJvdmlkZWQuICAoVGhlIGludGVycHJldGVyIHdpbGwgdGhlbiB0cnkgdGhlXG4gICByZWZsZWN0ZWQgb3BlcmF0aW9uLCBvciBzb21lIG90aGVyIGZhbGxiYWNrLCBkZXBlbmRpbmcgb24gdGhlXG4gICBvcGVyYXRvci4pICBJdHMgdHJ1dGggdmFsdWUgaXMgdHJ1ZS5cblxuICAgU2VlICpJbXBsZW1lbnRpbmcgdGhlIGFyaXRobWV0aWMgb3BlcmF0aW9ucyogZm9yIG1vcmUgZGV0YWlscy5cblxuRWxsaXBzaXNcbiAgIFRoaXMgdHlwZSBoYXMgYSBzaW5nbGUgdmFsdWUuICBUaGVyZSBpcyBhIHNpbmdsZSBvYmplY3Qgd2l0aCB0aGlzXG4gICB2YWx1ZS4gVGhpcyBvYmplY3QgaXMgYWNjZXNzZWQgdGhyb3VnaCB0aGUgbGl0ZXJhbCAiLi4uIiBvciB0aGVcbiAgIGJ1aWx0LWluIG5hbWUgIkVsbGlwc2lzIi4gIEl0cyB0cnV0aCB2YWx1ZSBpcyB0cnVlLlxuXG4ibnVtYmVycy5OdW1iZXIiXG4gICBUaGVzZSBhcmUgY3JlYXRlZCBieSBudW1lcmljIGxpdGVyYWxzIGFuZCByZXR1cm5lZCBhcyByZXN1bHRzIGJ5XG4gICBhcml0aG1ldGljIG9wZXJhdG9ycyBhbmQgYXJpdGhtZXRpYyBidWlsdC1pbiBmdW5jdGlvbnMuICBOdW1lcmljXG4gICBvYmplY3RzIGFyZSBpbW11dGFibGU7IG9uY2UgY3JlYXRlZCB0aGVpciB2YWx1ZSBuZXZlciBjaGFuZ2VzLlxuICAgUHl0aG9uIG51bWJlcnMgYXJlIG9mIGNvdXJzZSBzdHJvbmdseSByZWxhdGVkIHRvIG1hdGhlbWF0aWNhbFxuICAgbnVtYmVycywgYnV0IHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIG9mIG51bWVyaWNhbCByZXByZXNlbnRhdGlvblxuICAgaW4gY29tcHV0ZXJzLlxuXG4gICBQeXRob24gZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIGludGVnZXJzLCBmbG9hdGluZyBwb2ludCBudW1iZXJzLCBhbmRcbiAgIGNvbXBsZXggbnVtYmVyczpcblxuICAgIm51bWJlcnMuSW50ZWdyYWwiXG4gICAgICBUaGVzZSByZXByZXNlbnQgZWxlbWVudHMgZnJvbSB0aGUgbWF0aGVtYXRpY2FsIHNldCBvZiBpbnRlZ2Vyc1xuICAgICAgKHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSkuXG5cbiAgICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgaW50ZWdlcnM6XG5cbiAgICAgIEludGVnZXJzICgiaW50IilcblxuICAgICAgICAgVGhlc2UgcmVwcmVzZW50IG51bWJlcnMgaW4gYW4gdW5saW1pdGVkIHJhbmdlLCBzdWJqZWN0IHRvXG4gICAgICAgICBhdmFpbGFibGUgKHZpcnR1YWwpIG1lbW9yeSBvbmx5LiAgRm9yIHRoZSBwdXJwb3NlIG9mIHNoaWZ0XG4gICAgICAgICBhbmQgbWFzayBvcGVyYXRpb25zLCBhIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyBhc3N1bWVkLCBhbmRcbiAgICAgICAgIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHJlcHJlc2VudGVkIGluIGEgdmFyaWFudCBvZiAyXCdzXG4gICAgICAgICBjb21wbGVtZW50IHdoaWNoIGdpdmVzIHRoZSBpbGx1c2lvbiBvZiBhbiBpbmZpbml0ZSBzdHJpbmcgb2ZcbiAgICAgICAgIHNpZ24gYml0cyBleHRlbmRpbmcgdG8gdGhlIGxlZnQuXG5cbiAgICAgIEJvb2xlYW5zICgiYm9vbCIpXG4gICAgICAgICBUaGVzZSByZXByZXNlbnQgdGhlIHRydXRoIHZhbHVlcyBGYWxzZSBhbmQgVHJ1ZS4gIFRoZSB0d29cbiAgICAgICAgIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZXMgIkZhbHNlIiBhbmQgIlRydWUiIGFyZSB0aGVcbiAgICAgICAgIG9ubHkgQm9vbGVhbiBvYmplY3RzLiBUaGUgQm9vbGVhbiB0eXBlIGlzIGEgc3VidHlwZSBvZiB0aGVcbiAgICAgICAgIGludGVnZXIgdHlwZSwgYW5kIEJvb2xlYW4gdmFsdWVzIGJlaGF2ZSBsaWtlIHRoZSB2YWx1ZXMgMCBhbmRcbiAgICAgICAgIDEsIHJlc3BlY3RpdmVseSwgaW4gYWxtb3N0IGFsbCBjb250ZXh0cywgdGhlIGV4Y2VwdGlvbiBiZWluZ1xuICAgICAgICAgdGhhdCB3aGVuIGNvbnZlcnRlZCB0byBhIHN0cmluZywgdGhlIHN0cmluZ3MgIiJGYWxzZSIiIG9yXG4gICAgICAgICAiIlRydWUiIiBhcmUgcmV0dXJuZWQsIHJlc3BlY3RpdmVseS5cblxuICAgICAgVGhlIHJ1bGVzIGZvciBpbnRlZ2VyIHJlcHJlc2VudGF0aW9uIGFyZSBpbnRlbmRlZCB0byBnaXZlIHRoZVxuICAgICAgbW9zdCBtZWFuaW5nZnVsIGludGVycHJldGF0aW9uIG9mIHNoaWZ0IGFuZCBtYXNrIG9wZXJhdGlvbnNcbiAgICAgIGludm9sdmluZyBuZWdhdGl2ZSBpbnRlZ2Vycy5cblxuICAgIm51bWJlcnMuUmVhbCIgKCJmbG9hdCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgbWFjaGluZS1sZXZlbCBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50XG4gICAgICBudW1iZXJzLiBZb3UgYXJlIGF0IHRoZSBtZXJjeSBvZiB0aGUgdW5kZXJseWluZyBtYWNoaW5lXG4gICAgICBhcmNoaXRlY3R1cmUgKGFuZCBDIG9yIEphdmEgaW1wbGVtZW50YXRpb24pIGZvciB0aGUgYWNjZXB0ZWRcbiAgICAgIHJhbmdlIGFuZCBoYW5kbGluZyBvZiBvdmVyZmxvdy4gUHl0aG9uIGRvZXMgbm90IHN1cHBvcnQgc2luZ2xlLVxuICAgICAgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnM7IHRoZSBzYXZpbmdzIGluIHByb2Nlc3NvciBhbmRcbiAgICAgIG1lbW9yeSB1c2FnZSB0aGF0IGFyZSB1c3VhbGx5IHRoZSByZWFzb24gZm9yIHVzaW5nIHRoZXNlIGFyZVxuICAgICAgZHdhcmZlZCBieSB0aGUgb3ZlcmhlYWQgb2YgdXNpbmcgb2JqZWN0cyBpbiBQeXRob24sIHNvIHRoZXJlIGlzXG4gICAgICBubyByZWFzb24gdG8gY29tcGxpY2F0ZSB0aGUgbGFuZ3VhZ2Ugd2l0aCB0d28ga2luZHMgb2YgZmxvYXRpbmdcbiAgICAgIHBvaW50IG51bWJlcnMuXG5cbiAgICJudW1iZXJzLkNvbXBsZXgiICgiY29tcGxleCIpXG4gICAgICBUaGVzZSByZXByZXNlbnQgY29tcGxleCBudW1iZXJzIGFzIGEgcGFpciBvZiBtYWNoaW5lLWxldmVsXG4gICAgICBkb3VibGUgcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuICBUaGUgc2FtZSBjYXZlYXRzIGFwcGx5XG4gICAgICBhcyBmb3IgZmxvYXRpbmcgcG9pbnQgbnVtYmVycy4gVGhlIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBvZiBhXG4gICAgICBjb21wbGV4IG51bWJlciAieiIgY2FuIGJlIHJldHJpZXZlZCB0aHJvdWdoIHRoZSByZWFkLW9ubHlcbiAgICAgIGF0dHJpYnV0ZXMgInoucmVhbCIgYW5kICJ6LmltYWciLlxuXG5TZXF1ZW5jZXNcbiAgIFRoZXNlIHJlcHJlc2VudCBmaW5pdGUgb3JkZXJlZCBzZXRzIGluZGV4ZWQgYnkgbm9uLW5lZ2F0aXZlXG4gICBudW1iZXJzLiBUaGUgYnVpbHQtaW4gZnVuY3Rpb24gImxlbigpIiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXNcbiAgIG9mIGEgc2VxdWVuY2UuIFdoZW4gdGhlIGxlbmd0aCBvZiBhIHNlcXVlbmNlIGlzICpuKiwgdGhlIGluZGV4IHNldFxuICAgY29udGFpbnMgdGhlIG51bWJlcnMgMCwgMSwgLi4uLCAqbiotMS4gIEl0ZW0gKmkqIG9mIHNlcXVlbmNlICphKiBpc1xuICAgc2VsZWN0ZWQgYnkgImFbaV0iLlxuXG4gICBTZXF1ZW5jZXMgYWxzbyBzdXBwb3J0IHNsaWNpbmc6ICJhW2k6al0iIHNlbGVjdHMgYWxsIGl0ZW1zIHdpdGhcbiAgIGluZGV4ICprKiBzdWNoIHRoYXQgKmkqICI8PSIgKmsqICI8IiAqaiouICBXaGVuIHVzZWQgYXMgYW5cbiAgIGV4cHJlc3Npb24sIGEgc2xpY2UgaXMgYSBzZXF1ZW5jZSBvZiB0aGUgc2FtZSB0eXBlLiAgVGhpcyBpbXBsaWVzXG4gICB0aGF0IHRoZSBpbmRleCBzZXQgaXMgcmVudW1iZXJlZCBzbyB0aGF0IGl0IHN0YXJ0cyBhdCAwLlxuXG4gICBTb21lIHNlcXVlbmNlcyBhbHNvIHN1cHBvcnQgImV4dGVuZGVkIHNsaWNpbmciIHdpdGggYSB0aGlyZCAic3RlcCJcbiAgIHBhcmFtZXRlcjogImFbaTpqOmtdIiBzZWxlY3RzIGFsbCBpdGVtcyBvZiAqYSogd2l0aCBpbmRleCAqeCogd2hlcmVcbiAgICJ4ID0gaSArIG4qayIsICpuKiAiPj0iICIwIiBhbmQgKmkqICI8PSIgKngqICI8IiAqaiouXG5cbiAgIFNlcXVlbmNlcyBhcmUgZGlzdGluZ3Vpc2hlZCBhY2NvcmRpbmcgdG8gdGhlaXIgbXV0YWJpbGl0eTpcblxuICAgSW1tdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgQW4gb2JqZWN0IG9mIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlIGNhbm5vdCBjaGFuZ2Ugb25jZSBpdCBpc1xuICAgICAgY3JlYXRlZC4gIChJZiB0aGUgb2JqZWN0IGNvbnRhaW5zIHJlZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cyxcbiAgICAgIHRoZXNlIG90aGVyIG9iamVjdHMgbWF5IGJlIG11dGFibGUgYW5kIG1heSBiZSBjaGFuZ2VkOyBob3dldmVyLFxuICAgICAgdGhlIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBkaXJlY3RseSByZWZlcmVuY2VkIGJ5IGFuIGltbXV0YWJsZVxuICAgICAgb2JqZWN0IGNhbm5vdCBjaGFuZ2UuKVxuXG4gICAgICBUaGUgZm9sbG93aW5nIHR5cGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzOlxuXG4gICAgICBTdHJpbmdzXG4gICAgICAgICBBIHN0cmluZyBpcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGF0IHJlcHJlc2VudCBVbmljb2RlIGNvZGVcbiAgICAgICAgIHBvaW50cy4gQWxsIHRoZSBjb2RlIHBvaW50cyBpbiB0aGUgcmFuZ2UgIlUrMDAwMCAtIFUrMTBGRkZGIlxuICAgICAgICAgY2FuIGJlIHJlcHJlc2VudGVkIGluIGEgc3RyaW5nLiAgUHl0aG9uIGRvZXNuXCd0IGhhdmUgYSAiY2hhciJcbiAgICAgICAgIHR5cGU7IGluc3RlYWQsIGV2ZXJ5IGNvZGUgcG9pbnQgaW4gdGhlIHN0cmluZyBpcyByZXByZXNlbnRlZFxuICAgICAgICAgYXMgYSBzdHJpbmcgb2JqZWN0IHdpdGggbGVuZ3RoICIxIi4gIFRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgICAgICAgIm9yZCgpIiBjb252ZXJ0cyBhIGNvZGUgcG9pbnQgZnJvbSBpdHMgc3RyaW5nIGZvcm0gdG8gYW5cbiAgICAgICAgIGludGVnZXIgaW4gdGhlIHJhbmdlICIwIC0gMTBGRkZGIjsgImNocigpIiBjb252ZXJ0cyBhblxuICAgICAgICAgaW50ZWdlciBpbiB0aGUgcmFuZ2UgIjAgLSAxMEZGRkYiIHRvIHRoZSBjb3JyZXNwb25kaW5nIGxlbmd0aFxuICAgICAgICAgIjEiIHN0cmluZyBvYmplY3QuICJzdHIuZW5jb2RlKCkiIGNhbiBiZSB1c2VkIHRvIGNvbnZlcnQgYVxuICAgICAgICAgInN0ciIgdG8gImJ5dGVzIiB1c2luZyB0aGUgZ2l2ZW4gdGV4dCBlbmNvZGluZywgYW5kXG4gICAgICAgICAiYnl0ZXMuZGVjb2RlKCkiIGNhbiBiZSB1c2VkIHRvIGFjaGlldmUgdGhlIG9wcG9zaXRlLlxuXG4gICAgICBUdXBsZXNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIHR1cGxlIGFyZSBhcmJpdHJhcnkgUHl0aG9uIG9iamVjdHMuIFR1cGxlcyBvZlxuICAgICAgICAgdHdvIG9yIG1vcmUgaXRlbXMgYXJlIGZvcm1lZCBieSBjb21tYS1zZXBhcmF0ZWQgbGlzdHMgb2ZcbiAgICAgICAgIGV4cHJlc3Npb25zLiAgQSB0dXBsZSBvZiBvbmUgaXRlbSAoYSBcJ3NpbmdsZXRvblwnKSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhZmZpeGluZyBhIGNvbW1hIHRvIGFuIGV4cHJlc3Npb24gKGFuIGV4cHJlc3Npb24gYnlcbiAgICAgICAgIGl0c2VsZiBkb2VzIG5vdCBjcmVhdGUgYSB0dXBsZSwgc2luY2UgcGFyZW50aGVzZXMgbXVzdCBiZVxuICAgICAgICAgdXNhYmxlIGZvciBncm91cGluZyBvZiBleHByZXNzaW9ucykuICBBbiBlbXB0eSB0dXBsZSBjYW4gYmVcbiAgICAgICAgIGZvcm1lZCBieSBhbiBlbXB0eSBwYWlyIG9mIHBhcmVudGhlc2VzLlxuXG4gICAgICBCeXRlc1xuICAgICAgICAgQSBieXRlcyBvYmplY3QgaXMgYW4gaW1tdXRhYmxlIGFycmF5LiAgVGhlIGl0ZW1zIGFyZSA4LWJpdFxuICAgICAgICAgYnl0ZXMsIHJlcHJlc2VudGVkIGJ5IGludGVnZXJzIGluIHRoZSByYW5nZSAwIDw9IHggPCAyNTYuXG4gICAgICAgICBCeXRlcyBsaXRlcmFscyAobGlrZSAiYlwnYWJjXCciKSBhbmQgdGhlIGJ1aWx0LWluIGZ1bmN0aW9uXG4gICAgICAgICAiYnl0ZXMoKSIgY2FuIGJlIHVzZWQgdG8gY29uc3RydWN0IGJ5dGVzIG9iamVjdHMuICBBbHNvLFxuICAgICAgICAgYnl0ZXMgb2JqZWN0cyBjYW4gYmUgZGVjb2RlZCB0byBzdHJpbmdzIHZpYSB0aGUgImRlY29kZSgpIlxuICAgICAgICAgbWV0aG9kLlxuXG4gICBNdXRhYmxlIHNlcXVlbmNlc1xuICAgICAgTXV0YWJsZSBzZXF1ZW5jZXMgY2FuIGJlIGNoYW5nZWQgYWZ0ZXIgdGhleSBhcmUgY3JlYXRlZC4gIFRoZVxuICAgICAgc3Vic2NyaXB0aW9uIGFuZCBzbGljaW5nIG5vdGF0aW9ucyBjYW4gYmUgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mXG4gICAgICBhc3NpZ25tZW50IGFuZCAiZGVsIiAoZGVsZXRlKSBzdGF0ZW1lbnRzLlxuXG4gICAgICBUaGVyZSBhcmUgY3VycmVudGx5IHR3byBpbnRyaW5zaWMgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlczpcblxuICAgICAgTGlzdHNcbiAgICAgICAgIFRoZSBpdGVtcyBvZiBhIGxpc3QgYXJlIGFyYml0cmFyeSBQeXRob24gb2JqZWN0cy4gIExpc3RzIGFyZVxuICAgICAgICAgZm9ybWVkIGJ5IHBsYWNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBleHByZXNzaW9ucyBpblxuICAgICAgICAgc3F1YXJlIGJyYWNrZXRzLiAoTm90ZSB0aGF0IHRoZXJlIGFyZSBubyBzcGVjaWFsIGNhc2VzIG5lZWRlZFxuICAgICAgICAgdG8gZm9ybSBsaXN0cyBvZiBsZW5ndGggMCBvciAxLilcblxuICAgICAgQnl0ZSBBcnJheXNcbiAgICAgICAgIEEgYnl0ZWFycmF5IG9iamVjdCBpcyBhIG11dGFibGUgYXJyYXkuIFRoZXkgYXJlIGNyZWF0ZWQgYnlcbiAgICAgICAgIHRoZSBidWlsdC1pbiAiYnl0ZWFycmF5KCkiIGNvbnN0cnVjdG9yLiAgQXNpZGUgZnJvbSBiZWluZ1xuICAgICAgICAgbXV0YWJsZSAoYW5kIGhlbmNlIHVuaGFzaGFibGUpLCBieXRlIGFycmF5cyBvdGhlcndpc2UgcHJvdmlkZVxuICAgICAgICAgdGhlIHNhbWUgaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsaXR5IGFzIGltbXV0YWJsZSBieXRlc1xuICAgICAgICAgb2JqZWN0cy5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGUgImFycmF5IiBwcm92aWRlcyBhbiBhZGRpdGlvbmFsIGV4YW1wbGUgb2YgYVxuICAgICAgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCBhcyBkb2VzIHRoZSAiY29sbGVjdGlvbnMiIG1vZHVsZS5cblxuU2V0IHR5cGVzXG4gICBUaGVzZSByZXByZXNlbnQgdW5vcmRlcmVkLCBmaW5pdGUgc2V0cyBvZiB1bmlxdWUsIGltbXV0YWJsZVxuICAgb2JqZWN0cy4gQXMgc3VjaCwgdGhleSBjYW5ub3QgYmUgaW5kZXhlZCBieSBhbnkgc3Vic2NyaXB0LiBIb3dldmVyLFxuICAgdGhleSBjYW4gYmUgaXRlcmF0ZWQgb3ZlciwgYW5kIHRoZSBidWlsdC1pbiBmdW5jdGlvbiAibGVuKCkiXG4gICByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBzZXQuIENvbW1vbiB1c2VzIGZvciBzZXRzIGFyZSBmYXN0XG4gICBtZW1iZXJzaGlwIHRlc3RpbmcsIHJlbW92aW5nIGR1cGxpY2F0ZXMgZnJvbSBhIHNlcXVlbmNlLCBhbmRcbiAgIGNvbXB1dGluZyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucyBzdWNoIGFzIGludGVyc2VjdGlvbiwgdW5pb24sXG4gICBkaWZmZXJlbmNlLCBhbmQgc3ltbWV0cmljIGRpZmZlcmVuY2UuXG5cbiAgIEZvciBzZXQgZWxlbWVudHMsIHRoZSBzYW1lIGltbXV0YWJpbGl0eSBydWxlcyBhcHBseSBhcyBmb3JcbiAgIGRpY3Rpb25hcnkga2V5cy4gTm90ZSB0aGF0IG51bWVyaWMgdHlwZXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvclxuICAgbnVtZXJpYyBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCAiMSIgYW5kXG4gICAiMS4wIiksIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIGNvbnRhaW5lZCBpbiBhIHNldC5cblxuICAgVGhlcmUgYXJlIGN1cnJlbnRseSB0d28gaW50cmluc2ljIHNldCB0eXBlczpcblxuICAgU2V0c1xuICAgICAgVGhlc2UgcmVwcmVzZW50IGEgbXV0YWJsZSBzZXQuIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlIGJ1aWx0LWluXG4gICAgICAic2V0KCkiIGNvbnN0cnVjdG9yIGFuZCBjYW4gYmUgbW9kaWZpZWQgYWZ0ZXJ3YXJkcyBieSBzZXZlcmFsXG4gICAgICBtZXRob2RzLCBzdWNoIGFzICJhZGQoKSIuXG5cbiAgIEZyb3plbiBzZXRzXG4gICAgICBUaGVzZSByZXByZXNlbnQgYW4gaW1tdXRhYmxlIHNldC4gIFRoZXkgYXJlIGNyZWF0ZWQgYnkgdGhlXG4gICAgICBidWlsdC1pbiAiZnJvemVuc2V0KCkiIGNvbnN0cnVjdG9yLiAgQXMgYSBmcm96ZW5zZXQgaXMgaW1tdXRhYmxlXG4gICAgICBhbmQgKmhhc2hhYmxlKiwgaXQgY2FuIGJlIHVzZWQgYWdhaW4gYXMgYW4gZWxlbWVudCBvZiBhbm90aGVyXG4gICAgICBzZXQsIG9yIGFzIGEgZGljdGlvbmFyeSBrZXkuXG5cbk1hcHBpbmdzXG4gICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IGFyYml0cmFyeSBpbmRleFxuICAgc2V0cy4gVGhlIHN1YnNjcmlwdCBub3RhdGlvbiAiYVtrXSIgc2VsZWN0cyB0aGUgaXRlbSBpbmRleGVkIGJ5ICJrIlxuICAgZnJvbSB0aGUgbWFwcGluZyAiYSI7IHRoaXMgY2FuIGJlIHVzZWQgaW4gZXhwcmVzc2lvbnMgYW5kIGFzIHRoZVxuICAgdGFyZ2V0IG9mIGFzc2lnbm1lbnRzIG9yICJkZWwiIHN0YXRlbWVudHMuIFRoZSBidWlsdC1pbiBmdW5jdGlvblxuICAgImxlbigpIiByZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgaW4gYSBtYXBwaW5nLlxuXG4gICBUaGVyZSBpcyBjdXJyZW50bHkgYSBzaW5nbGUgaW50cmluc2ljIG1hcHBpbmcgdHlwZTpcblxuICAgRGljdGlvbmFyaWVzXG4gICAgICBUaGVzZSByZXByZXNlbnQgZmluaXRlIHNldHMgb2Ygb2JqZWN0cyBpbmRleGVkIGJ5IG5lYXJseVxuICAgICAgYXJiaXRyYXJ5IHZhbHVlcy4gIFRoZSBvbmx5IHR5cGVzIG9mIHZhbHVlcyBub3QgYWNjZXB0YWJsZSBhc1xuICAgICAga2V5cyBhcmUgdmFsdWVzIGNvbnRhaW5pbmcgbGlzdHMgb3IgZGljdGlvbmFyaWVzIG9yIG90aGVyXG4gICAgICBtdXRhYmxlIHR5cGVzIHRoYXQgYXJlIGNvbXBhcmVkIGJ5IHZhbHVlIHJhdGhlciB0aGFuIGJ5IG9iamVjdFxuICAgICAgaWRlbnRpdHksIHRoZSByZWFzb24gYmVpbmcgdGhhdCB0aGUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIG9mXG4gICAgICBkaWN0aW9uYXJpZXMgcmVxdWlyZXMgYSBrZXlcJ3MgaGFzaCB2YWx1ZSB0byByZW1haW4gY29uc3RhbnQuXG4gICAgICBOdW1lcmljIHR5cGVzIHVzZWQgZm9yIGtleXMgb2JleSB0aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljXG4gICAgICBjb21wYXJpc29uOiBpZiB0d28gbnVtYmVycyBjb21wYXJlIGVxdWFsIChlLmcuLCAiMSIgYW5kICIxLjAiKVxuICAgICAgdGhlbiB0aGV5IGNhbiBiZSB1c2VkIGludGVyY2hhbmdlYWJseSB0byBpbmRleCB0aGUgc2FtZVxuICAgICAgZGljdGlvbmFyeSBlbnRyeS5cblxuICAgICAgRGljdGlvbmFyaWVzIGFyZSBtdXRhYmxlOyB0aGV5IGNhbiBiZSBjcmVhdGVkIGJ5IHRoZSAiey4uLn0iXG4gICAgICBub3RhdGlvbiAoc2VlIHNlY3Rpb24gKkRpY3Rpb25hcnkgZGlzcGxheXMqKS5cblxuICAgICAgVGhlIGV4dGVuc2lvbiBtb2R1bGVzICJkYm0ubmRibSIgYW5kICJkYm0uZ251IiBwcm92aWRlXG4gICAgICBhZGRpdGlvbmFsIGV4YW1wbGVzIG9mIG1hcHBpbmcgdHlwZXMsIGFzIGRvZXMgdGhlICJjb2xsZWN0aW9ucyJcbiAgICAgIG1vZHVsZS5cblxuQ2FsbGFibGUgdHlwZXNcbiAgIFRoZXNlIGFyZSB0aGUgdHlwZXMgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uIGNhbGwgb3BlcmF0aW9uIChzZWVcbiAgIHNlY3Rpb24gKkNhbGxzKikgY2FuIGJlIGFwcGxpZWQ6XG5cbiAgIFVzZXItZGVmaW5lZCBmdW5jdGlvbnNcbiAgICAgIEEgdXNlci1kZWZpbmVkIGZ1bmN0aW9uIG9iamVjdCBpcyBjcmVhdGVkIGJ5IGEgZnVuY3Rpb25cbiAgICAgIGRlZmluaXRpb24gKHNlZSBzZWN0aW9uICpGdW5jdGlvbiBkZWZpbml0aW9ucyopLiAgSXQgc2hvdWxkIGJlXG4gICAgICBjYWxsZWQgd2l0aCBhbiBhcmd1bWVudCBsaXN0IGNvbnRhaW5pbmcgdGhlIHNhbWUgbnVtYmVyIG9mIGl0ZW1zXG4gICAgICBhcyB0aGUgZnVuY3Rpb25cJ3MgZm9ybWFsIHBhcmFtZXRlciBsaXN0LlxuXG4gICAgICBTcGVjaWFsIGF0dHJpYnV0ZXM6XG5cbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8IEF0dHJpYnV0ZSAgICAgICAgICAgICAgICAgfCBNZWFuaW5nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKz09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PStcbiAgICAgIHwgIl9fZG9jX18iICAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBkb2N1bWVudGF0aW9uICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc3RyaW5nLCBvciAiTm9uZSIgaWYgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHVuYXZhaWxhYmxlOyBub3QgaW5oZXJpdGVkIGJ5ICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBzdWJjbGFzc2VzICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fbmFtZV9fIiAgICAgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyBuYW1lICAgICAgICAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fcXVhbG5hbWVfXyIgICAgICAgICAgICB8IFRoZSBmdW5jdGlvblwncyAqcXVhbGlmaWVkIG5hbWUqIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTmV3IGluIHZlcnNpb24gMy4zLiAgICAgICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX21vZHVsZV9fIiAgICAgICAgICAgICAgfCBUaGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSAgICAgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb24gd2FzIGRlZmluZWQgaW4sIG9yICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICJOb25lIiBpZiB1bmF2YWlsYWJsZS4gICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19kZWZhdWx0c19fIiAgICAgICAgICAgIHwgQSB0dXBsZSBjb250YWluaW5nIGRlZmF1bHQgICAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFyZ3VtZW50IHZhbHVlcyBmb3IgdGhvc2UgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmd1bWVudHMgdGhhdCBoYXZlIGRlZmF1bHRzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3IgIk5vbmUiIGlmIG5vIGFyZ3VtZW50cyBoYXZlICB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGEgZGVmYXVsdCB2YWx1ZSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19jb2RlX18iICAgICAgICAgICAgICAgIHwgVGhlIGNvZGUgb2JqZWN0IHJlcHJlc2VudGluZyAgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoZSBjb21waWxlZCBmdW5jdGlvbiBib2R5LiAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19nbG9iYWxzX18iICAgICAgICAgICAgIHwgQSByZWZlcmVuY2UgdG8gdGhlIGRpY3Rpb25hcnkgICB8IFJlYWQtb25seSAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uXCdzICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ2xvYmFsIHZhcmlhYmxlcyAtLS0gdGhlIGdsb2JhbCB8ICAgICAgICAgICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG5hbWVzcGFjZSBvZiB0aGUgbW9kdWxlIGluICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aGljaCB0aGUgZnVuY3Rpb24gd2FzIGRlZmluZWQuIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fZGljdF9fIiAgICAgICAgICAgICAgICB8IFRoZSBuYW1lc3BhY2Ugc3VwcG9ydGluZyAgICAgICAgfCBXcml0YWJsZSAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcmJpdHJhcnkgZnVuY3Rpb24gYXR0cmlidXRlcy4gIHwgICAgICAgICAgICAgfFxuICAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLStcbiAgICAgIHwgIl9fY2xvc3VyZV9fIiAgICAgICAgICAgICB8ICJOb25lIiBvciBhIHR1cGxlIG9mIGNlbGxzIHRoYXQgfCBSZWFkLW9ubHkgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb250YWluIGJpbmRpbmdzIGZvciB0aGUgICAgICAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZnVuY3Rpb25cJ3MgZnJlZSB2YXJpYWJsZXMuICAgICAgfCAgICAgICAgICAgICB8XG4gICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tK1xuICAgICAgfCAiX19hbm5vdGF0aW9uc19fIiAgICAgICAgIHwgQSBkaWN0IGNvbnRhaW5pbmcgYW5ub3RhdGlvbnMgICB8IFdyaXRhYmxlICAgIHxcbiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG9mIHBhcmFtZXRlcnMuICBUaGUga2V5cyBvZiB0aGUgfCAgICAgICAgICAgICB8XG4gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBkaWN0IGFyZSB0aGUgcGFyYW1ldGVyIG5hbWVzLCAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5kICJcJ3JldHVyblwnIiBmb3IgdGhlIHJldHVybiAgIHwgICAgICAgICAgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYW5ub3RhdGlvbiwgaWYgcHJvdmlkZWQuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG4gICAgICB8ICJfX2t3ZGVmYXVsdHNfXyIgICAgICAgICAgfCBBIGRpY3QgY29udGFpbmluZyBkZWZhdWx0cyBmb3IgIHwgV3JpdGFibGUgICAgfFxuICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2V5d29yZC1vbmx5IHBhcmFtZXRlcnMuICAgICAgICB8ICAgICAgICAgICAgIHxcbiAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0rXG5cbiAgICAgIE1vc3Qgb2YgdGhlIGF0dHJpYnV0ZXMgbGFiZWxsZWQgIldyaXRhYmxlIiBjaGVjayB0aGUgdHlwZSBvZiB0aGVcbiAgICAgIGFzc2lnbmVkIHZhbHVlLlxuXG4gICAgICBGdW5jdGlvbiBvYmplY3RzIGFsc28gc3VwcG9ydCBnZXR0aW5nIGFuZCBzZXR0aW5nIGFyYml0cmFyeVxuICAgICAgYXR0cmlidXRlcywgd2hpY2ggY2FuIGJlIHVzZWQsIGZvciBleGFtcGxlLCB0byBhdHRhY2ggbWV0YWRhdGFcbiAgICAgIHRvIGZ1bmN0aW9ucy4gIFJlZ3VsYXIgYXR0cmlidXRlIGRvdC1ub3RhdGlvbiBpcyB1c2VkIHRvIGdldCBhbmRcbiAgICAgIHNldCBzdWNoIGF0dHJpYnV0ZXMuICpOb3RlIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb25seVxuICAgICAgc3VwcG9ydHMgZnVuY3Rpb24gYXR0cmlidXRlcyBvbiB1c2VyLWRlZmluZWQgZnVuY3Rpb25zLiBGdW5jdGlvblxuICAgICAgYXR0cmlidXRlcyBvbiBidWlsdC1pbiBmdW5jdGlvbnMgbWF5IGJlIHN1cHBvcnRlZCBpbiB0aGVcbiAgICAgIGZ1dHVyZS4qXG5cbiAgICAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgYSBmdW5jdGlvblwncyBkZWZpbml0aW9uIGNhbiBiZVxuICAgICAgcmV0cmlldmVkIGZyb20gaXRzIGNvZGUgb2JqZWN0OyBzZWUgdGhlIGRlc2NyaXB0aW9uIG9mIGludGVybmFsXG4gICAgICB0eXBlcyBiZWxvdy5cblxuICAgSW5zdGFuY2UgbWV0aG9kc1xuICAgICAgQW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBjb21iaW5lcyBhIGNsYXNzLCBhIGNsYXNzIGluc3RhbmNlIGFuZFxuICAgICAgYW55IGNhbGxhYmxlIG9iamVjdCAobm9ybWFsbHkgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24pLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAiX19zZWxmX18iIGlzIHRoZSBjbGFzcyBpbnN0YW5jZVxuICAgICAgb2JqZWN0LCAiX19mdW5jX18iIGlzIHRoZSBmdW5jdGlvbiBvYmplY3Q7ICJfX2RvY19fIiBpcyB0aGVcbiAgICAgIG1ldGhvZFwncyBkb2N1bWVudGF0aW9uIChzYW1lIGFzICJfX2Z1bmNfXy5fX2RvY19fIik7ICJfX25hbWVfXyJcbiAgICAgIGlzIHRoZSBtZXRob2QgbmFtZSAoc2FtZSBhcyAiX19mdW5jX18uX19uYW1lX18iKTsgIl9fbW9kdWxlX18iXG4gICAgICBpcyB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlIHRoZSBtZXRob2Qgd2FzIGRlZmluZWQgaW4sIG9yICJOb25lIlxuICAgICAgaWYgdW5hdmFpbGFibGUuXG5cbiAgICAgIE1ldGhvZHMgYWxzbyBzdXBwb3J0IGFjY2Vzc2luZyAoYnV0IG5vdCBzZXR0aW5nKSB0aGUgYXJiaXRyYXJ5XG4gICAgICBmdW5jdGlvbiBhdHRyaWJ1dGVzIG9uIHRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdC5cblxuICAgICAgVXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3RzIG1heSBiZSBjcmVhdGVkIHdoZW4gZ2V0dGluZyBhblxuICAgICAgYXR0cmlidXRlIG9mIGEgY2xhc3MgKHBlcmhhcHMgdmlhIGFuIGluc3RhbmNlIG9mIHRoYXQgY2xhc3MpLCBpZlxuICAgICAgdGhhdCBhdHRyaWJ1dGUgaXMgYSB1c2VyLWRlZmluZWQgZnVuY3Rpb24gb2JqZWN0IG9yIGEgY2xhc3NcbiAgICAgIG1ldGhvZCBvYmplY3QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSB1c2VyLVxuICAgICAgZGVmaW5lZCBmdW5jdGlvbiBvYmplY3QgZnJvbSBhIGNsYXNzIHZpYSBvbmUgb2YgaXRzIGluc3RhbmNlcyxcbiAgICAgIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZSBpcyB0aGUgaW5zdGFuY2UsIGFuZCB0aGUgbWV0aG9kIG9iamVjdFxuICAgICAgaXMgc2FpZCB0byBiZSBib3VuZC4gIFRoZSBuZXcgbWV0aG9kXCdzICJfX2Z1bmNfXyIgYXR0cmlidXRlIGlzXG4gICAgICB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0LlxuXG4gICAgICBXaGVuIGEgdXNlci1kZWZpbmVkIG1ldGhvZCBvYmplY3QgaXMgY3JlYXRlZCBieSByZXRyaWV2aW5nXG4gICAgICBhbm90aGVyIG1ldGhvZCBvYmplY3QgZnJvbSBhIGNsYXNzIG9yIGluc3RhbmNlLCB0aGUgYmVoYXZpb3VyIGlzXG4gICAgICB0aGUgc2FtZSBhcyBmb3IgYSBmdW5jdGlvbiBvYmplY3QsIGV4Y2VwdCB0aGF0IHRoZSAiX19mdW5jX18iXG4gICAgICBhdHRyaWJ1dGUgb2YgdGhlIG5ldyBpbnN0YW5jZSBpcyBub3QgdGhlIG9yaWdpbmFsIG1ldGhvZCBvYmplY3RcbiAgICAgIGJ1dCBpdHMgIl9fZnVuY19fIiBhdHRyaWJ1dGUuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgYSBjbGFzc1xuICAgICAgbWV0aG9kIG9iamVjdCBmcm9tIGEgY2xhc3Mgb3IgaW5zdGFuY2UsIGl0cyAiX19zZWxmX18iIGF0dHJpYnV0ZVxuICAgICAgaXMgdGhlIGNsYXNzIGl0c2VsZiwgYW5kIGl0cyAiX19mdW5jX18iIGF0dHJpYnV0ZSBpcyB0aGVcbiAgICAgIGZ1bmN0aW9uIG9iamVjdCB1bmRlcmx5aW5nIHRoZSBjbGFzcyBtZXRob2QuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBjYWxsZWQsIHRoZSB1bmRlcmx5aW5nXG4gICAgICBmdW5jdGlvbiAoIl9fZnVuY19fIikgaXMgY2FsbGVkLCBpbnNlcnRpbmcgdGhlIGNsYXNzIGluc3RhbmNlXG4gICAgICAoIl9fc2VsZl9fIikgaW4gZnJvbnQgb2YgdGhlIGFyZ3VtZW50IGxpc3QuICBGb3IgaW5zdGFuY2UsIHdoZW5cbiAgICAgICJDIiBpcyBhIGNsYXNzIHdoaWNoIGNvbnRhaW5zIGEgZGVmaW5pdGlvbiBmb3IgYSBmdW5jdGlvbiAiZigpIixcbiAgICAgIGFuZCAieCIgaXMgYW4gaW5zdGFuY2Ugb2YgIkMiLCBjYWxsaW5nICJ4LmYoMSkiIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgIGNhbGxpbmcgIkMuZih4LCAxKSIuXG5cbiAgICAgIFdoZW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9iamVjdCBpcyBkZXJpdmVkIGZyb20gYSBjbGFzcyBtZXRob2RcbiAgICAgIG9iamVjdCwgdGhlICJjbGFzcyBpbnN0YW5jZSIgc3RvcmVkIGluICJfX3NlbGZfXyIgd2lsbCBhY3R1YWxseVxuICAgICAgYmUgdGhlIGNsYXNzIGl0c2VsZiwgc28gdGhhdCBjYWxsaW5nIGVpdGhlciAieC5mKDEpIiBvciAiQy5mKDEpIlxuICAgICAgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nICJmKEMsMSkiIHdoZXJlICJmIiBpcyB0aGUgdW5kZXJseWluZ1xuICAgICAgZnVuY3Rpb24uXG5cbiAgICAgIE5vdGUgdGhhdCB0aGUgdHJhbnNmb3JtYXRpb24gZnJvbSBmdW5jdGlvbiBvYmplY3QgdG8gaW5zdGFuY2VcbiAgICAgIG1ldGhvZCBvYmplY3QgaGFwcGVucyBlYWNoIHRpbWUgdGhlIGF0dHJpYnV0ZSBpcyByZXRyaWV2ZWQgZnJvbVxuICAgICAgdGhlIGluc3RhbmNlLiAgSW4gc29tZSBjYXNlcywgYSBmcnVpdGZ1bCBvcHRpbWl6YXRpb24gaXMgdG9cbiAgICAgIGFzc2lnbiB0aGUgYXR0cmlidXRlIHRvIGEgbG9jYWwgdmFyaWFibGUgYW5kIGNhbGwgdGhhdCBsb2NhbFxuICAgICAgdmFyaWFibGUuIEFsc28gbm90aWNlIHRoYXQgdGhpcyB0cmFuc2Zvcm1hdGlvbiBvbmx5IGhhcHBlbnMgZm9yXG4gICAgICB1c2VyLWRlZmluZWQgZnVuY3Rpb25zOyBvdGhlciBjYWxsYWJsZSBvYmplY3RzIChhbmQgYWxsIG5vbi1cbiAgICAgIGNhbGxhYmxlIG9iamVjdHMpIGFyZSByZXRyaWV2ZWQgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbi4gIEl0IGlzXG4gICAgICBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucyB3aGljaCBhcmVcbiAgICAgIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyBpbnN0YW5jZSBhcmUgbm90IGNvbnZlcnRlZCB0byBib3VuZFxuICAgICAgbWV0aG9kczsgdGhpcyAqb25seSogaGFwcGVucyB3aGVuIHRoZSBmdW5jdGlvbiBpcyBhbiBhdHRyaWJ1dGVcbiAgICAgIG9mIHRoZSBjbGFzcy5cblxuICAgR2VuZXJhdG9yIGZ1bmN0aW9uc1xuICAgICAgQSBmdW5jdGlvbiBvciBtZXRob2Qgd2hpY2ggdXNlcyB0aGUgInlpZWxkIiBzdGF0ZW1lbnQgKHNlZVxuICAgICAgc2VjdGlvbiAqVGhlIHlpZWxkIHN0YXRlbWVudCopIGlzIGNhbGxlZCBhICpnZW5lcmF0b3IgZnVuY3Rpb24qLlxuICAgICAgU3VjaCBhIGZ1bmN0aW9uLCB3aGVuIGNhbGxlZCwgYWx3YXlzIHJldHVybnMgYW4gaXRlcmF0b3Igb2JqZWN0XG4gICAgICB3aGljaCBjYW4gYmUgdXNlZCB0byBleGVjdXRlIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbjogIGNhbGxpbmdcbiAgICAgIHRoZSBpdGVyYXRvclwncyAiaXRlcmF0b3IuX19uZXh0X18oKSIgbWV0aG9kIHdpbGwgY2F1c2UgdGhlXG4gICAgICBmdW5jdGlvbiB0byBleGVjdXRlIHVudGlsIGl0IHByb3ZpZGVzIGEgdmFsdWUgdXNpbmcgdGhlICJ5aWVsZCJcbiAgICAgIHN0YXRlbWVudC4gIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzIGEgInJldHVybiIgc3RhdGVtZW50IG9yXG4gICAgICBmYWxscyBvZmYgdGhlIGVuZCwgYSAiU3RvcEl0ZXJhdGlvbiIgZXhjZXB0aW9uIGlzIHJhaXNlZCBhbmQgdGhlXG4gICAgICBpdGVyYXRvciB3aWxsIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzZXQgb2YgdmFsdWVzIHRvIGJlXG4gICAgICByZXR1cm5lZC5cblxuICAgQnVpbHQtaW4gZnVuY3Rpb25zXG4gICAgICBBIGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBpcyBhIHdyYXBwZXIgYXJvdW5kIGEgQyBmdW5jdGlvbi5cbiAgICAgIEV4YW1wbGVzIG9mIGJ1aWx0LWluIGZ1bmN0aW9ucyBhcmUgImxlbigpIiBhbmQgIm1hdGguc2luKCkiXG4gICAgICAoIm1hdGgiIGlzIGEgc3RhbmRhcmQgYnVpbHQtaW4gbW9kdWxlKS4gVGhlIG51bWJlciBhbmQgdHlwZSBvZlxuICAgICAgdGhlIGFyZ3VtZW50cyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgQyBmdW5jdGlvbi4gU3BlY2lhbCByZWFkLVxuICAgICAgb25seSBhdHRyaWJ1dGVzOiAiX19kb2NfXyIgaXMgdGhlIGZ1bmN0aW9uXCdzIGRvY3VtZW50YXRpb25cbiAgICAgIHN0cmluZywgb3IgIk5vbmUiIGlmIHVuYXZhaWxhYmxlOyAiX19uYW1lX18iIGlzIHRoZSBmdW5jdGlvblwnc1xuICAgICAgbmFtZTsgIl9fc2VsZl9fIiBpcyBzZXQgdG8gIk5vbmUiIChidXQgc2VlIHRoZSBuZXh0IGl0ZW0pO1xuICAgICAgIl9fbW9kdWxlX18iIGlzIHRoZSBuYW1lIG9mIHRoZSBtb2R1bGUgdGhlIGZ1bmN0aW9uIHdhcyBkZWZpbmVkXG4gICAgICBpbiBvciAiTm9uZSIgaWYgdW5hdmFpbGFibGUuXG5cbiAgIEJ1aWx0LWluIG1ldGhvZHNcbiAgICAgIFRoaXMgaXMgcmVhbGx5IGEgZGlmZmVyZW50IGRpc2d1aXNlIG9mIGEgYnVpbHQtaW4gZnVuY3Rpb24sIHRoaXNcbiAgICAgIHRpbWUgY29udGFpbmluZyBhbiBvYmplY3QgcGFzc2VkIHRvIHRoZSBDIGZ1bmN0aW9uIGFzIGFuXG4gICAgICBpbXBsaWNpdCBleHRyYSBhcmd1bWVudC4gIEFuIGV4YW1wbGUgb2YgYSBidWlsdC1pbiBtZXRob2QgaXNcbiAgICAgICJhbGlzdC5hcHBlbmQoKSIsIGFzc3VtaW5nICphbGlzdCogaXMgYSBsaXN0IG9iamVjdC4gSW4gdGhpc1xuICAgICAgY2FzZSwgdGhlIHNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZSAiX19zZWxmX18iIGlzIHNldCB0byB0aGVcbiAgICAgIG9iamVjdCBkZW5vdGVkIGJ5ICphbGlzdCouXG5cbiAgIENsYXNzZXNcbiAgICAgIENsYXNzZXMgYXJlIGNhbGxhYmxlLiAgVGhlc2Ugb2JqZWN0cyBub3JtYWxseSBhY3QgYXMgZmFjdG9yaWVzXG4gICAgICBmb3IgbmV3IGluc3RhbmNlcyBvZiB0aGVtc2VsdmVzLCBidXQgdmFyaWF0aW9ucyBhcmUgcG9zc2libGUgZm9yXG4gICAgICBjbGFzcyB0eXBlcyB0aGF0IG92ZXJyaWRlICJfX25ld19fKCkiLiAgVGhlIGFyZ3VtZW50cyBvZiB0aGVcbiAgICAgIGNhbGwgYXJlIHBhc3NlZCB0byAiX19uZXdfXygpIiBhbmQsIGluIHRoZSB0eXBpY2FsIGNhc2UsIHRvXG4gICAgICAiX19pbml0X18oKSIgdG8gaW5pdGlhbGl6ZSB0aGUgbmV3IGluc3RhbmNlLlxuXG4gICBDbGFzcyBJbnN0YW5jZXNcbiAgICAgIEluc3RhbmNlcyBvZiBhcmJpdHJhcnkgY2xhc3NlcyBjYW4gYmUgbWFkZSBjYWxsYWJsZSBieSBkZWZpbmluZ1xuICAgICAgYSAiX19jYWxsX18oKSIgbWV0aG9kIGluIHRoZWlyIGNsYXNzLlxuXG5Nb2R1bGVzXG4gICBNb2R1bGVzIGFyZSBhIGJhc2ljIG9yZ2FuaXphdGlvbmFsIHVuaXQgb2YgUHl0aG9uIGNvZGUsIGFuZCBhcmVcbiAgIGNyZWF0ZWQgYnkgdGhlICppbXBvcnQgc3lzdGVtKiBhcyBpbnZva2VkIGVpdGhlciBieSB0aGUgImltcG9ydCJcbiAgIHN0YXRlbWVudCAoc2VlICJpbXBvcnQiKSwgb3IgYnkgY2FsbGluZyBmdW5jdGlvbnMgc3VjaCBhc1xuICAgImltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCkiIGFuZCBidWlsdC1pbiAiX19pbXBvcnRfXygpIi4gIEEgbW9kdWxlXG4gICBvYmplY3QgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGJ5IGEgZGljdGlvbmFyeSBvYmplY3QgKHRoaXMgaXNcbiAgIHRoZSBkaWN0aW9uYXJ5IHJlZmVyZW5jZWQgYnkgdGhlICJfX2dsb2JhbHNfXyIgYXR0cmlidXRlIG9mXG4gICBmdW5jdGlvbnMgZGVmaW5lZCBpbiB0aGUgbW9kdWxlKS4gIEF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZVxuICAgdHJhbnNsYXRlZCB0byBsb29rdXBzIGluIHRoaXMgZGljdGlvbmFyeSwgZS5nLiwgIm0ueCIgaXMgZXF1aXZhbGVudFxuICAgdG8gIm0uX19kaWN0X19bIngiXSIuIEEgbW9kdWxlIG9iamVjdCBkb2VzIG5vdCBjb250YWluIHRoZSBjb2RlXG4gICBvYmplY3QgdXNlZCB0byBpbml0aWFsaXplIHRoZSBtb2R1bGUgKHNpbmNlIGl0IGlzblwndCBuZWVkZWQgb25jZVxuICAgdGhlIGluaXRpYWxpemF0aW9uIGlzIGRvbmUpLlxuXG4gICBBdHRyaWJ1dGUgYXNzaWdubWVudCB1cGRhdGVzIHRoZSBtb2R1bGVcJ3MgbmFtZXNwYWNlIGRpY3Rpb25hcnksXG4gICBlLmcuLCAibS54ID0gMSIgaXMgZXF1aXZhbGVudCB0byAibS5fX2RpY3RfX1sieCJdID0gMSIuXG5cbiAgIFNwZWNpYWwgcmVhZC1vbmx5IGF0dHJpYnV0ZTogIl9fZGljdF9fIiBpcyB0aGUgbW9kdWxlXCdzIG5hbWVzcGFjZVxuICAgYXMgYSBkaWN0aW9uYXJ5IG9iamVjdC5cblxuICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBCZWNhdXNlIG9mIHRoZSB3YXkgQ1B5dGhvblxuICAgY2xlYXJzIG1vZHVsZSBkaWN0aW9uYXJpZXMsIHRoZSBtb2R1bGUgZGljdGlvbmFyeSB3aWxsIGJlIGNsZWFyZWRcbiAgIHdoZW4gdGhlIG1vZHVsZSBmYWxscyBvdXQgb2Ygc2NvcGUgZXZlbiBpZiB0aGUgZGljdGlvbmFyeSBzdGlsbCBoYXNcbiAgIGxpdmUgcmVmZXJlbmNlcy4gIFRvIGF2b2lkIHRoaXMsIGNvcHkgdGhlIGRpY3Rpb25hcnkgb3Iga2VlcCB0aGVcbiAgIG1vZHVsZSBhcm91bmQgd2hpbGUgdXNpbmcgaXRzIGRpY3Rpb25hcnkgZGlyZWN0bHkuXG5cbiAgIFByZWRlZmluZWQgKHdyaXRhYmxlKSBhdHRyaWJ1dGVzOiAiX19uYW1lX18iIGlzIHRoZSBtb2R1bGVcJ3MgbmFtZTtcbiAgICJfX2RvY19fIiBpcyB0aGUgbW9kdWxlXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciAiTm9uZSIgaWZcbiAgIHVuYXZhaWxhYmxlOyAiX19maWxlX18iIGlzIHRoZSBwYXRobmFtZSBvZiB0aGUgZmlsZSBmcm9tIHdoaWNoIHRoZVxuICAgbW9kdWxlIHdhcyBsb2FkZWQsIGlmIGl0IHdhcyBsb2FkZWQgZnJvbSBhIGZpbGUuIFRoZSAiX19maWxlX18iXG4gICBhdHRyaWJ1dGUgbWF5IGJlIG1pc3NpbmcgZm9yIGNlcnRhaW4gdHlwZXMgb2YgbW9kdWxlcywgc3VjaCBhcyBDXG4gICBtb2R1bGVzIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIGludG8gdGhlIGludGVycHJldGVyOyBmb3JcbiAgIGV4dGVuc2lvbiBtb2R1bGVzIGxvYWRlZCBkeW5hbWljYWxseSBmcm9tIGEgc2hhcmVkIGxpYnJhcnksIGl0IGlzXG4gICB0aGUgcGF0aG5hbWUgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5IGZpbGUuXG5cbkN1c3RvbSBjbGFzc2VzXG4gICBDdXN0b20gY2xhc3MgdHlwZXMgYXJlIHR5cGljYWxseSBjcmVhdGVkIGJ5IGNsYXNzIGRlZmluaXRpb25zIChzZWVcbiAgIHNlY3Rpb24gKkNsYXNzIGRlZmluaXRpb25zKikuICBBIGNsYXNzIGhhcyBhIG5hbWVzcGFjZSBpbXBsZW1lbnRlZFxuICAgYnkgYSBkaWN0aW9uYXJ5IG9iamVjdC4gQ2xhc3MgYXR0cmlidXRlIHJlZmVyZW5jZXMgYXJlIHRyYW5zbGF0ZWRcbiAgIHRvIGxvb2t1cHMgaW4gdGhpcyBkaWN0aW9uYXJ5LCBlLmcuLCAiQy54IiBpcyB0cmFuc2xhdGVkIHRvXG4gICAiQy5fX2RpY3RfX1sieCJdIiAoYWx0aG91Z2ggdGhlcmUgYXJlIGEgbnVtYmVyIG9mIGhvb2tzIHdoaWNoIGFsbG93XG4gICBmb3Igb3RoZXIgbWVhbnMgb2YgbG9jYXRpbmcgYXR0cmlidXRlcykuIFdoZW4gdGhlIGF0dHJpYnV0ZSBuYW1lIGlzXG4gICBub3QgZm91bmQgdGhlcmUsIHRoZSBhdHRyaWJ1dGUgc2VhcmNoIGNvbnRpbnVlcyBpbiB0aGUgYmFzZVxuICAgY2xhc3Nlcy4gVGhpcyBzZWFyY2ggb2YgdGhlIGJhc2UgY2xhc3NlcyB1c2VzIHRoZSBDMyBtZXRob2RcbiAgIHJlc29sdXRpb24gb3JkZXIgd2hpY2ggYmVoYXZlcyBjb3JyZWN0bHkgZXZlbiBpbiB0aGUgcHJlc2VuY2Ugb2ZcbiAgIFwnZGlhbW9uZFwnIGluaGVyaXRhbmNlIHN0cnVjdHVyZXMgd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlXG4gICBpbmhlcml0YW5jZSBwYXRocyBsZWFkaW5nIGJhY2sgdG8gYSBjb21tb24gYW5jZXN0b3IuIEFkZGl0aW9uYWxcbiAgIGRldGFpbHMgb24gdGhlIEMzIE1STyB1c2VkIGJ5IFB5dGhvbiBjYW4gYmUgZm91bmQgaW4gdGhlXG4gICBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgMi4zIHJlbGVhc2UgYXRcbiAgIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi4zL21yby8uXG5cbiAgIFdoZW4gYSBjbGFzcyBhdHRyaWJ1dGUgcmVmZXJlbmNlIChmb3IgY2xhc3MgIkMiLCBzYXkpIHdvdWxkIHlpZWxkIGFcbiAgIGNsYXNzIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gYW4gaW5zdGFuY2UgbWV0aG9kXG4gICBvYmplY3Qgd2hvc2UgIl9fc2VsZl9fIiBhdHRyaWJ1dGVzIGlzICJDIi4gIFdoZW4gaXQgd291bGQgeWllbGQgYVxuICAgc3RhdGljIG1ldGhvZCBvYmplY3QsIGl0IGlzIHRyYW5zZm9ybWVkIGludG8gdGhlIG9iamVjdCB3cmFwcGVkIGJ5XG4gICB0aGUgc3RhdGljIG1ldGhvZCBvYmplY3QuIFNlZSBzZWN0aW9uICpJbXBsZW1lbnRpbmcgRGVzY3JpcHRvcnMqXG4gICBmb3IgYW5vdGhlciB3YXkgaW4gd2hpY2ggYXR0cmlidXRlcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG1heVxuICAgZGlmZmVyIGZyb20gdGhvc2UgYWN0dWFsbHkgY29udGFpbmVkIGluIGl0cyAiX19kaWN0X18iLlxuXG4gICBDbGFzcyBhdHRyaWJ1dGUgYXNzaWdubWVudHMgdXBkYXRlIHRoZSBjbGFzc1wncyBkaWN0aW9uYXJ5LCBuZXZlclxuICAgdGhlIGRpY3Rpb25hcnkgb2YgYSBiYXNlIGNsYXNzLlxuXG4gICBBIGNsYXNzIG9iamVjdCBjYW4gYmUgY2FsbGVkIChzZWUgYWJvdmUpIHRvIHlpZWxkIGEgY2xhc3MgaW5zdGFuY2VcbiAgIChzZWUgYmVsb3cpLlxuXG4gICBTcGVjaWFsIGF0dHJpYnV0ZXM6ICJfX25hbWVfXyIgaXMgdGhlIGNsYXNzIG5hbWU7ICJfX21vZHVsZV9fIiBpc1xuICAgdGhlIG1vZHVsZSBuYW1lIGluIHdoaWNoIHRoZSBjbGFzcyB3YXMgZGVmaW5lZDsgIl9fZGljdF9fIiBpcyB0aGVcbiAgIGRpY3Rpb25hcnkgY29udGFpbmluZyB0aGUgY2xhc3NcJ3MgbmFtZXNwYWNlOyAiX19iYXNlc19fIiBpcyBhIHR1cGxlXG4gICAocG9zc2libHkgZW1wdHkgb3IgYSBzaW5nbGV0b24pIGNvbnRhaW5pbmcgdGhlIGJhc2UgY2xhc3NlcywgaW4gdGhlXG4gICBvcmRlciBvZiB0aGVpciBvY2N1cnJlbmNlIGluIHRoZSBiYXNlIGNsYXNzIGxpc3Q7ICJfX2RvY19fIiBpcyB0aGVcbiAgIGNsYXNzXCdzIGRvY3VtZW50YXRpb24gc3RyaW5nLCBvciBOb25lIGlmIHVuZGVmaW5lZC5cblxuQ2xhc3MgaW5zdGFuY2VzXG4gICBBIGNsYXNzIGluc3RhbmNlIGlzIGNyZWF0ZWQgYnkgY2FsbGluZyBhIGNsYXNzIG9iamVjdCAoc2VlIGFib3ZlKS5cbiAgIEEgY2xhc3MgaW5zdGFuY2UgaGFzIGEgbmFtZXNwYWNlIGltcGxlbWVudGVkIGFzIGEgZGljdGlvbmFyeSB3aGljaFxuICAgaXMgdGhlIGZpcnN0IHBsYWNlIGluIHdoaWNoIGF0dHJpYnV0ZSByZWZlcmVuY2VzIGFyZSBzZWFyY2hlZC5cbiAgIFdoZW4gYW4gYXR0cmlidXRlIGlzIG5vdCBmb3VuZCB0aGVyZSwgYW5kIHRoZSBpbnN0YW5jZVwncyBjbGFzcyBoYXNcbiAgIGFuIGF0dHJpYnV0ZSBieSB0aGF0IG5hbWUsIHRoZSBzZWFyY2ggY29udGludWVzIHdpdGggdGhlIGNsYXNzXG4gICBhdHRyaWJ1dGVzLiAgSWYgYSBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQgdGhhdCBpcyBhIHVzZXItZGVmaW5lZFxuICAgZnVuY3Rpb24gb2JqZWN0LCBpdCBpcyB0cmFuc2Zvcm1lZCBpbnRvIGFuIGluc3RhbmNlIG1ldGhvZCBvYmplY3RcbiAgIHdob3NlICJfX3NlbGZfXyIgYXR0cmlidXRlIGlzIHRoZSBpbnN0YW5jZS4gIFN0YXRpYyBtZXRob2QgYW5kXG4gICBjbGFzcyBtZXRob2Qgb2JqZWN0cyBhcmUgYWxzbyB0cmFuc2Zvcm1lZDsgc2VlIGFib3ZlIHVuZGVyXG4gICAiQ2xhc3NlcyIuICBTZWUgc2VjdGlvbiAqSW1wbGVtZW50aW5nIERlc2NyaXB0b3JzKiBmb3IgYW5vdGhlciB3YXlcbiAgIGluIHdoaWNoIGF0dHJpYnV0ZXMgb2YgYSBjbGFzcyByZXRyaWV2ZWQgdmlhIGl0cyBpbnN0YW5jZXMgbWF5XG4gICBkaWZmZXIgZnJvbSB0aGUgb2JqZWN0cyBhY3R1YWxseSBzdG9yZWQgaW4gdGhlIGNsYXNzXCdzICJfX2RpY3RfXyIuXG4gICBJZiBubyBjbGFzcyBhdHRyaWJ1dGUgaXMgZm91bmQsIGFuZCB0aGUgb2JqZWN0XCdzIGNsYXNzIGhhcyBhXG4gICAiX19nZXRhdHRyX18oKSIgbWV0aG9kLCB0aGF0IGlzIGNhbGxlZCB0byBzYXRpc2Z5IHRoZSBsb29rdXAuXG5cbiAgIEF0dHJpYnV0ZSBhc3NpZ25tZW50cyBhbmQgZGVsZXRpb25zIHVwZGF0ZSB0aGUgaW5zdGFuY2VcJ3NcbiAgIGRpY3Rpb25hcnksIG5ldmVyIGEgY2xhc3NcJ3MgZGljdGlvbmFyeS4gIElmIHRoZSBjbGFzcyBoYXMgYVxuICAgIl9fc2V0YXR0cl9fKCkiIG9yICJfX2RlbGF0dHJfXygpIiBtZXRob2QsIHRoaXMgaXMgY2FsbGVkIGluc3RlYWRcbiAgIG9mIHVwZGF0aW5nIHRoZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGRpcmVjdGx5LlxuXG4gICBDbGFzcyBpbnN0YW5jZXMgY2FuIHByZXRlbmQgdG8gYmUgbnVtYmVycywgc2VxdWVuY2VzLCBvciBtYXBwaW5nc1xuICAgaWYgdGhleSBoYXZlIG1ldGhvZHMgd2l0aCBjZXJ0YWluIHNwZWNpYWwgbmFtZXMuICBTZWUgc2VjdGlvblxuICAgKlNwZWNpYWwgbWV0aG9kIG5hbWVzKi5cblxuICAgU3BlY2lhbCBhdHRyaWJ1dGVzOiAiX19kaWN0X18iIGlzIHRoZSBhdHRyaWJ1dGUgZGljdGlvbmFyeTtcbiAgICJfX2NsYXNzX18iIGlzIHRoZSBpbnN0YW5jZVwncyBjbGFzcy5cblxuSS9PIG9iamVjdHMgKGFsc28ga25vd24gYXMgZmlsZSBvYmplY3RzKVxuICAgQSAqZmlsZSBvYmplY3QqIHJlcHJlc2VudHMgYW4gb3BlbiBmaWxlLiAgVmFyaW91cyBzaG9ydGN1dHMgYXJlXG4gICBhdmFpbGFibGUgdG8gY3JlYXRlIGZpbGUgb2JqZWN0czogdGhlICJvcGVuKCkiIGJ1aWx0LWluIGZ1bmN0aW9uLFxuICAgYW5kIGFsc28gIm9zLnBvcGVuKCkiLCAib3MuZmRvcGVuKCkiLCBhbmQgdGhlICJtYWtlZmlsZSgpIiBtZXRob2RcbiAgIG9mIHNvY2tldCBvYmplY3RzIChhbmQgcGVyaGFwcyBieSBvdGhlciBmdW5jdGlvbnMgb3IgbWV0aG9kc1xuICAgcHJvdmlkZWQgYnkgZXh0ZW5zaW9uIG1vZHVsZXMpLlxuXG4gICBUaGUgb2JqZWN0cyAic3lzLnN0ZGluIiwgInN5cy5zdGRvdXQiIGFuZCAic3lzLnN0ZGVyciIgYXJlXG4gICBpbml0aWFsaXplZCB0byBmaWxlIG9iamVjdHMgY29ycmVzcG9uZGluZyB0byB0aGUgaW50ZXJwcmV0ZXJcJ3NcbiAgIHN0YW5kYXJkIGlucHV0LCBvdXRwdXQgYW5kIGVycm9yIHN0cmVhbXM7IHRoZXkgYXJlIGFsbCBvcGVuIGluIHRleHRcbiAgIG1vZGUgYW5kIHRoZXJlZm9yZSBmb2xsb3cgdGhlIGludGVyZmFjZSBkZWZpbmVkIGJ5IHRoZVxuICAgImlvLlRleHRJT0Jhc2UiIGFic3RyYWN0IGNsYXNzLlxuXG5JbnRlcm5hbCB0eXBlc1xuICAgQSBmZXcgdHlwZXMgdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBpbnRlcnByZXRlciBhcmUgZXhwb3NlZCB0byB0aGVcbiAgIHVzZXIuIFRoZWlyIGRlZmluaXRpb25zIG1heSBjaGFuZ2Ugd2l0aCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlXG4gICBpbnRlcnByZXRlciwgYnV0IHRoZXkgYXJlIG1lbnRpb25lZCBoZXJlIGZvciBjb21wbGV0ZW5lc3MuXG5cbiAgIENvZGUgb2JqZWN0c1xuICAgICAgQ29kZSBvYmplY3RzIHJlcHJlc2VudCAqYnl0ZS1jb21waWxlZCogZXhlY3V0YWJsZSBQeXRob24gY29kZSxcbiAgICAgIG9yICpieXRlY29kZSouIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBjb2RlIG9iamVjdCBhbmQgYVxuICAgICAgZnVuY3Rpb24gb2JqZWN0IGlzIHRoYXQgdGhlIGZ1bmN0aW9uIG9iamVjdCBjb250YWlucyBhbiBleHBsaWNpdFxuICAgICAgcmVmZXJlbmNlIHRvIHRoZSBmdW5jdGlvblwncyBnbG9iYWxzICh0aGUgbW9kdWxlIGluIHdoaWNoIGl0IHdhc1xuICAgICAgZGVmaW5lZCksIHdoaWxlIGEgY29kZSBvYmplY3QgY29udGFpbnMgbm8gY29udGV4dDsgYWxzbyB0aGVcbiAgICAgIGRlZmF1bHQgYXJndW1lbnQgdmFsdWVzIGFyZSBzdG9yZWQgaW4gdGhlIGZ1bmN0aW9uIG9iamVjdCwgbm90XG4gICAgICBpbiB0aGUgY29kZSBvYmplY3QgKGJlY2F1c2UgdGhleSByZXByZXNlbnQgdmFsdWVzIGNhbGN1bGF0ZWQgYXRcbiAgICAgIHJ1bi10aW1lKS4gIFVubGlrZSBmdW5jdGlvbiBvYmplY3RzLCBjb2RlIG9iamVjdHMgYXJlIGltbXV0YWJsZVxuICAgICAgYW5kIGNvbnRhaW4gbm8gcmVmZXJlbmNlcyAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgdG8gbXV0YWJsZVxuICAgICAgb2JqZWN0cy5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogImNvX25hbWUiIGdpdmVzIHRoZSBmdW5jdGlvbiBuYW1lO1xuICAgICAgImNvX2FyZ2NvdW50IiBpcyB0aGUgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzIChpbmNsdWRpbmdcbiAgICAgIGFyZ3VtZW50cyB3aXRoIGRlZmF1bHQgdmFsdWVzKTsgImNvX25sb2NhbHMiIGlzIHRoZSBudW1iZXIgb2ZcbiAgICAgIGxvY2FsIHZhcmlhYmxlcyB1c2VkIGJ5IHRoZSBmdW5jdGlvbiAoaW5jbHVkaW5nIGFyZ3VtZW50cyk7XG4gICAgICAiY29fdmFybmFtZXMiIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgdGhlIGxvY2FsXG4gICAgICB2YXJpYWJsZXMgKHN0YXJ0aW5nIHdpdGggdGhlIGFyZ3VtZW50IG5hbWVzKTsgImNvX2NlbGx2YXJzIiBpcyBhXG4gICAgICB0dXBsZSBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBsb2NhbCB2YXJpYWJsZXMgdGhhdCBhcmVcbiAgICAgIHJlZmVyZW5jZWQgYnkgbmVzdGVkIGZ1bmN0aW9uczsgImNvX2ZyZWV2YXJzIiBpcyBhIHR1cGxlXG4gICAgICBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBmcmVlIHZhcmlhYmxlczsgImNvX2NvZGUiIGlzIGEgc3RyaW5nXG4gICAgICByZXByZXNlbnRpbmcgdGhlIHNlcXVlbmNlIG9mIGJ5dGVjb2RlIGluc3RydWN0aW9uczsgImNvX2NvbnN0cyJcbiAgICAgIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbGl0ZXJhbHMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7XG4gICAgICAiY29fbmFtZXMiIGlzIGEgdHVwbGUgY29udGFpbmluZyB0aGUgbmFtZXMgdXNlZCBieSB0aGUgYnl0ZWNvZGU7XG4gICAgICAiY29fZmlsZW5hbWUiIGlzIHRoZSBmaWxlbmFtZSBmcm9tIHdoaWNoIHRoZSBjb2RlIHdhcyBjb21waWxlZDtcbiAgICAgICJjb19maXJzdGxpbmVubyIgaXMgdGhlIGZpcnN0IGxpbmUgbnVtYmVyIG9mIHRoZSBmdW5jdGlvbjtcbiAgICAgICJjb19sbm90YWIiIGlzIGEgc3RyaW5nIGVuY29kaW5nIHRoZSBtYXBwaW5nIGZyb20gYnl0ZWNvZGVcbiAgICAgIG9mZnNldHMgdG8gbGluZSBudW1iZXJzIChmb3IgZGV0YWlscyBzZWUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZVxuICAgICAgaW50ZXJwcmV0ZXIpOyAiY29fc3RhY2tzaXplIiBpcyB0aGUgcmVxdWlyZWQgc3RhY2sgc2l6ZVxuICAgICAgKGluY2x1ZGluZyBsb2NhbCB2YXJpYWJsZXMpOyAiY29fZmxhZ3MiIGlzIGFuIGludGVnZXIgZW5jb2RpbmcgYVxuICAgICAgbnVtYmVyIG9mIGZsYWdzIGZvciB0aGUgaW50ZXJwcmV0ZXIuXG5cbiAgICAgIFRoZSBmb2xsb3dpbmcgZmxhZyBiaXRzIGFyZSBkZWZpbmVkIGZvciAiY29fZmxhZ3MiOiBiaXQgIjB4MDQiXG4gICAgICBpcyBzZXQgaWYgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlICIqYXJndW1lbnRzIiBzeW50YXggdG8gYWNjZXB0IGFuXG4gICAgICBhcmJpdHJhcnkgbnVtYmVyIG9mIHBvc2l0aW9uYWwgYXJndW1lbnRzOyBiaXQgIjB4MDgiIGlzIHNldCBpZlxuICAgICAgdGhlIGZ1bmN0aW9uIHVzZXMgdGhlICIqKmtleXdvcmRzIiBzeW50YXggdG8gYWNjZXB0IGFyYml0cmFyeVxuICAgICAga2V5d29yZCBhcmd1bWVudHM7IGJpdCAiMHgyMCIgaXMgc2V0IGlmIHRoZSBmdW5jdGlvbiBpcyBhXG4gICAgICBnZW5lcmF0b3IuXG5cbiAgICAgIEZ1dHVyZSBmZWF0dXJlIGRlY2xhcmF0aW9ucyAoImZyb20gX19mdXR1cmVfXyBpbXBvcnQgZGl2aXNpb24iKVxuICAgICAgYWxzbyB1c2UgYml0cyBpbiAiY29fZmxhZ3MiIHRvIGluZGljYXRlIHdoZXRoZXIgYSBjb2RlIG9iamVjdFxuICAgICAgd2FzIGNvbXBpbGVkIHdpdGggYSBwYXJ0aWN1bGFyIGZlYXR1cmUgZW5hYmxlZDogYml0ICIweDIwMDAiIGlzXG4gICAgICBzZXQgaWYgdGhlIGZ1bmN0aW9uIHdhcyBjb21waWxlZCB3aXRoIGZ1dHVyZSBkaXZpc2lvbiBlbmFibGVkO1xuICAgICAgYml0cyAiMHgxMCIgYW5kICIweDEwMDAiIHdlcmUgdXNlZCBpbiBlYXJsaWVyIHZlcnNpb25zIG9mXG4gICAgICBQeXRob24uXG5cbiAgICAgIE90aGVyIGJpdHMgaW4gImNvX2ZsYWdzIiBhcmUgcmVzZXJ2ZWQgZm9yIGludGVybmFsIHVzZS5cblxuICAgICAgSWYgYSBjb2RlIG9iamVjdCByZXByZXNlbnRzIGEgZnVuY3Rpb24sIHRoZSBmaXJzdCBpdGVtIGluXG4gICAgICAiY29fY29uc3RzIiBpcyB0aGUgZG9jdW1lbnRhdGlvbiBzdHJpbmcgb2YgdGhlIGZ1bmN0aW9uLCBvclxuICAgICAgIk5vbmUiIGlmIHVuZGVmaW5lZC5cblxuICAgRnJhbWUgb2JqZWN0c1xuICAgICAgRnJhbWUgb2JqZWN0cyByZXByZXNlbnQgZXhlY3V0aW9uIGZyYW1lcy4gIFRoZXkgbWF5IG9jY3VyIGluXG4gICAgICB0cmFjZWJhY2sgb2JqZWN0cyAoc2VlIGJlbG93KS5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogImZfYmFjayIgaXMgdG8gdGhlIHByZXZpb3VzIHN0YWNrXG4gICAgICBmcmFtZSAodG93YXJkcyB0aGUgY2FsbGVyKSwgb3IgIk5vbmUiIGlmIHRoaXMgaXMgdGhlIGJvdHRvbVxuICAgICAgc3RhY2sgZnJhbWU7ICJmX2NvZGUiIGlzIHRoZSBjb2RlIG9iamVjdCBiZWluZyBleGVjdXRlZCBpbiB0aGlzXG4gICAgICBmcmFtZTsgImZfbG9jYWxzIiBpcyB0aGUgZGljdGlvbmFyeSB1c2VkIHRvIGxvb2sgdXAgbG9jYWxcbiAgICAgIHZhcmlhYmxlczsgImZfZ2xvYmFscyIgaXMgdXNlZCBmb3IgZ2xvYmFsIHZhcmlhYmxlcztcbiAgICAgICJmX2J1aWx0aW5zIiBpcyB1c2VkIGZvciBidWlsdC1pbiAoaW50cmluc2ljKSBuYW1lczsgImZfbGFzdGkiXG4gICAgICBnaXZlcyB0aGUgcHJlY2lzZSBpbnN0cnVjdGlvbiAodGhpcyBpcyBhbiBpbmRleCBpbnRvIHRoZVxuICAgICAgYnl0ZWNvZGUgc3RyaW5nIG9mIHRoZSBjb2RlIG9iamVjdCkuXG5cbiAgICAgIFNwZWNpYWwgd3JpdGFibGUgYXR0cmlidXRlczogImZfdHJhY2UiLCBpZiBub3QgIk5vbmUiLCBpcyBhXG4gICAgICBmdW5jdGlvbiBjYWxsZWQgYXQgdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGNvZGUgbGluZSAodGhpcyBpc1xuICAgICAgdXNlZCBieSB0aGUgZGVidWdnZXIpOyAiZl9saW5lbm8iIGlzIHRoZSBjdXJyZW50IGxpbmUgbnVtYmVyIG9mXG4gICAgICB0aGUgZnJhbWUgLS0tIHdyaXRpbmcgdG8gdGhpcyBmcm9tIHdpdGhpbiBhIHRyYWNlIGZ1bmN0aW9uIGp1bXBzXG4gICAgICB0byB0aGUgZ2l2ZW4gbGluZSAob25seSBmb3IgdGhlIGJvdHRvbS1tb3N0IGZyYW1lKS4gIEEgZGVidWdnZXJcbiAgICAgIGNhbiBpbXBsZW1lbnQgYSBKdW1wIGNvbW1hbmQgKGFrYSBTZXQgTmV4dCBTdGF0ZW1lbnQpIGJ5IHdyaXRpbmdcbiAgICAgIHRvIGZfbGluZW5vLlxuXG4gICAgICBGcmFtZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgZnJhbWUuY2xlYXIoKVxuXG4gICAgICAgICBUaGlzIG1ldGhvZCBjbGVhcnMgYWxsIHJlZmVyZW5jZXMgdG8gbG9jYWwgdmFyaWFibGVzIGhlbGQgYnlcbiAgICAgICAgIHRoZSBmcmFtZS4gIEFsc28sIGlmIHRoZSBmcmFtZSBiZWxvbmdlZCB0byBhIGdlbmVyYXRvciwgdGhlXG4gICAgICAgICBnZW5lcmF0b3IgaXMgZmluYWxpemVkLiAgVGhpcyBoZWxwcyBicmVhayByZWZlcmVuY2UgY3ljbGVzXG4gICAgICAgICBpbnZvbHZpbmcgZnJhbWUgb2JqZWN0cyAoZm9yIGV4YW1wbGUgd2hlbiBjYXRjaGluZyBhblxuICAgICAgICAgZXhjZXB0aW9uIGFuZCBzdG9yaW5nIGl0cyB0cmFjZWJhY2sgZm9yIGxhdGVyIHVzZSkuXG5cbiAgICAgICAgICJSdW50aW1lRXJyb3IiIGlzIHJhaXNlZCBpZiB0aGUgZnJhbWUgaXMgY3VycmVudGx5IGV4ZWN1dGluZy5cblxuICAgICAgICAgTmV3IGluIHZlcnNpb24gMy40LlxuXG4gICBUcmFjZWJhY2sgb2JqZWN0c1xuICAgICAgVHJhY2ViYWNrIG9iamVjdHMgcmVwcmVzZW50IGEgc3RhY2sgdHJhY2Ugb2YgYW4gZXhjZXB0aW9uLiAgQVxuICAgICAgdHJhY2ViYWNrIG9iamVjdCBpcyBjcmVhdGVkIHdoZW4gYW4gZXhjZXB0aW9uIG9jY3Vycy4gIFdoZW4gdGhlXG4gICAgICBzZWFyY2ggZm9yIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHVud2luZHMgdGhlIGV4ZWN1dGlvbiBzdGFjaywgYXRcbiAgICAgIGVhY2ggdW53b3VuZCBsZXZlbCBhIHRyYWNlYmFjayBvYmplY3QgaXMgaW5zZXJ0ZWQgaW4gZnJvbnQgb2ZcbiAgICAgIHRoZSBjdXJyZW50IHRyYWNlYmFjay4gIFdoZW4gYW4gZXhjZXB0aW9uIGhhbmRsZXIgaXMgZW50ZXJlZCxcbiAgICAgIHRoZSBzdGFjayB0cmFjZSBpcyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgcHJvZ3JhbS4gKFNlZSBzZWN0aW9uXG4gICAgICAqVGhlIHRyeSBzdGF0ZW1lbnQqLikgSXQgaXMgYWNjZXNzaWJsZSBhcyB0aGUgdGhpcmQgaXRlbSBvZiB0aGVcbiAgICAgIHR1cGxlIHJldHVybmVkIGJ5ICJzeXMuZXhjX2luZm8oKSIuIFdoZW4gdGhlIHByb2dyYW0gY29udGFpbnMgbm9cbiAgICAgIHN1aXRhYmxlIGhhbmRsZXIsIHRoZSBzdGFjayB0cmFjZSBpcyB3cml0dGVuIChuaWNlbHkgZm9ybWF0dGVkKVxuICAgICAgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbTsgaWYgdGhlIGludGVycHJldGVyIGlzIGludGVyYWN0aXZlLFxuICAgICAgaXQgaXMgYWxzbyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgdXNlciBhcyAic3lzLmxhc3RfdHJhY2ViYWNrIi5cblxuICAgICAgU3BlY2lhbCByZWFkLW9ubHkgYXR0cmlidXRlczogInRiX25leHQiIGlzIHRoZSBuZXh0IGxldmVsIGluIHRoZVxuICAgICAgc3RhY2sgdHJhY2UgKHRvd2FyZHMgdGhlIGZyYW1lIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQpLCBvclxuICAgICAgIk5vbmUiIGlmIHRoZXJlIGlzIG5vIG5leHQgbGV2ZWw7ICJ0Yl9mcmFtZSIgcG9pbnRzIHRvIHRoZVxuICAgICAgZXhlY3V0aW9uIGZyYW1lIG9mIHRoZSBjdXJyZW50IGxldmVsOyAidGJfbGluZW5vIiBnaXZlcyB0aGUgbGluZVxuICAgICAgbnVtYmVyIHdoZXJlIHRoZSBleGNlcHRpb24gb2NjdXJyZWQ7ICJ0Yl9sYXN0aSIgaW5kaWNhdGVzIHRoZVxuICAgICAgcHJlY2lzZSBpbnN0cnVjdGlvbi4gIFRoZSBsaW5lIG51bWJlciBhbmQgbGFzdCBpbnN0cnVjdGlvbiBpblxuICAgICAgdGhlIHRyYWNlYmFjayBtYXkgZGlmZmVyIGZyb20gdGhlIGxpbmUgbnVtYmVyIG9mIGl0cyBmcmFtZVxuICAgICAgb2JqZWN0IGlmIHRoZSBleGNlcHRpb24gb2NjdXJyZWQgaW4gYSAidHJ5IiBzdGF0ZW1lbnQgd2l0aCBub1xuICAgICAgbWF0Y2hpbmcgZXhjZXB0IGNsYXVzZSBvciB3aXRoIGEgZmluYWxseSBjbGF1c2UuXG5cbiAgIFNsaWNlIG9iamVjdHNcbiAgICAgIFNsaWNlIG9iamVjdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IHNsaWNlcyBmb3IgIl9fZ2V0aXRlbV9fKCkiXG4gICAgICBtZXRob2RzLiAgVGhleSBhcmUgYWxzbyBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pbiAic2xpY2UoKSJcbiAgICAgIGZ1bmN0aW9uLlxuXG4gICAgICBTcGVjaWFsIHJlYWQtb25seSBhdHRyaWJ1dGVzOiAic3RhcnQiIGlzIHRoZSBsb3dlciBib3VuZDsgInN0b3AiXG4gICAgICBpcyB0aGUgdXBwZXIgYm91bmQ7ICJzdGVwIiBpcyB0aGUgc3RlcCB2YWx1ZTsgZWFjaCBpcyAiTm9uZSIgaWZcbiAgICAgIG9taXR0ZWQuICBUaGVzZSBhdHRyaWJ1dGVzIGNhbiBoYXZlIGFueSB0eXBlLlxuXG4gICAgICBTbGljZSBvYmplY3RzIHN1cHBvcnQgb25lIG1ldGhvZDpcblxuICAgICAgc2xpY2UuaW5kaWNlcyhzZWxmLCBsZW5ndGgpXG5cbiAgICAgICAgIFRoaXMgbWV0aG9kIHRha2VzIGEgc2luZ2xlIGludGVnZXIgYXJndW1lbnQgKmxlbmd0aCogYW5kXG4gICAgICAgICBjb21wdXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2xpY2UgdGhhdCB0aGUgc2xpY2Ugb2JqZWN0XG4gICAgICAgICB3b3VsZCBkZXNjcmliZSBpZiBhcHBsaWVkIHRvIGEgc2VxdWVuY2Ugb2YgKmxlbmd0aCogaXRlbXMuXG4gICAgICAgICBJdCByZXR1cm5zIGEgdHVwbGUgb2YgdGhyZWUgaW50ZWdlcnM7IHJlc3BlY3RpdmVseSB0aGVzZSBhcmVcbiAgICAgICAgIHRoZSAqc3RhcnQqIGFuZCAqc3RvcCogaW5kaWNlcyBhbmQgdGhlICpzdGVwKiBvciBzdHJpZGVcbiAgICAgICAgIGxlbmd0aCBvZiB0aGUgc2xpY2UuIE1pc3Npbmcgb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzIGFyZVxuICAgICAgICAgaGFuZGxlZCBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggcmVndWxhciBzbGljZXMuXG5cbiAgIFN0YXRpYyBtZXRob2Qgb2JqZWN0c1xuICAgICAgU3RhdGljIG1ldGhvZCBvYmplY3RzIHByb3ZpZGUgYSB3YXkgb2YgZGVmZWF0aW5nIHRoZVxuICAgICAgdHJhbnNmb3JtYXRpb24gb2YgZnVuY3Rpb24gb2JqZWN0cyB0byBtZXRob2Qgb2JqZWN0cyBkZXNjcmliZWRcbiAgICAgIGFib3ZlLiBBIHN0YXRpYyBtZXRob2Qgb2JqZWN0IGlzIGEgd3JhcHBlciBhcm91bmQgYW55IG90aGVyXG4gICAgICBvYmplY3QsIHVzdWFsbHkgYSB1c2VyLWRlZmluZWQgbWV0aG9kIG9iamVjdC4gV2hlbiBhIHN0YXRpY1xuICAgICAgbWV0aG9kIG9iamVjdCBpcyByZXRyaWV2ZWQgZnJvbSBhIGNsYXNzIG9yIGEgY2xhc3MgaW5zdGFuY2UsIHRoZVxuICAgICAgb2JqZWN0IGFjdHVhbGx5IHJldHVybmVkIGlzIHRoZSB3cmFwcGVkIG9iamVjdCwgd2hpY2ggaXMgbm90XG4gICAgICBzdWJqZWN0IHRvIGFueSBmdXJ0aGVyIHRyYW5zZm9ybWF0aW9uLiBTdGF0aWMgbWV0aG9kIG9iamVjdHMgYXJlXG4gICAgICBub3QgdGhlbXNlbHZlcyBjYWxsYWJsZSwgYWx0aG91Z2ggdGhlIG9iamVjdHMgdGhleSB3cmFwIHVzdWFsbHlcbiAgICAgIGFyZS4gU3RhdGljIG1ldGhvZCBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IHRoZSBidWlsdC1pblxuICAgICAgInN0YXRpY21ldGhvZCgpIiBjb25zdHJ1Y3Rvci5cblxuICAgQ2xhc3MgbWV0aG9kIG9iamVjdHNcbiAgICAgIEEgY2xhc3MgbWV0aG9kIG9iamVjdCwgbGlrZSBhIHN0YXRpYyBtZXRob2Qgb2JqZWN0LCBpcyBhIHdyYXBwZXJcbiAgICAgIGFyb3VuZCBhbm90aGVyIG9iamVjdCB0aGF0IGFsdGVycyB0aGUgd2F5IGluIHdoaWNoIHRoYXQgb2JqZWN0XG4gICAgICBpcyByZXRyaWV2ZWQgZnJvbSBjbGFzc2VzIGFuZCBjbGFzcyBpbnN0YW5jZXMuIFRoZSBiZWhhdmlvdXIgb2ZcbiAgICAgIGNsYXNzIG1ldGhvZCBvYmplY3RzIHVwb24gc3VjaCByZXRyaWV2YWwgaXMgZGVzY3JpYmVkIGFib3ZlLFxuICAgICAgdW5kZXIgIlVzZXItZGVmaW5lZCBtZXRob2RzIi4gQ2xhc3MgbWV0aG9kIG9iamVjdHMgYXJlIGNyZWF0ZWRcbiAgICAgIGJ5IHRoZSBidWlsdC1pbiAiY2xhc3NtZXRob2QoKSIgY29uc3RydWN0b3IuXG4nLAorICd0eXBlc2Z1bmN0aW9ucyc6IHUnXG5GdW5jdGlvbnNcbioqKioqKioqKlxuXG5GdW5jdGlvbiBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IGZ1bmN0aW9uIGRlZmluaXRpb25zLiAgVGhlIG9ubHlcbm9wZXJhdGlvbiBvbiBhIGZ1bmN0aW9uIG9iamVjdCBpcyB0byBjYWxsIGl0OiAiZnVuYyhhcmd1bWVudC1saXN0KSIuXG5cblRoZXJlIGFyZSByZWFsbHkgdHdvIGZsYXZvcnMgb2YgZnVuY3Rpb24gb2JqZWN0czogYnVpbHQtaW4gZnVuY3Rpb25zXG5hbmQgdXNlci1kZWZpbmVkIGZ1bmN0aW9ucy4gIEJvdGggc3VwcG9ydCB0aGUgc2FtZSBvcGVyYXRpb24gKHRvIGNhbGxcbnRoZSBmdW5jdGlvbiksIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgZGlmZmVyZW50LCBoZW5jZSB0aGVcbmRpZmZlcmVudCBvYmplY3QgdHlwZXMuXG5cblNlZSAqRnVuY3Rpb24gZGVmaW5pdGlvbnMqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuJywKKyAndHlwZXNtYXBwaW5nJzogdSdcbk1hcHBpbmcgVHlwZXMgLS0tICJkaWN0IlxuKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkEgKm1hcHBpbmcqIG9iamVjdCBtYXBzICpoYXNoYWJsZSogdmFsdWVzIHRvIGFyYml0cmFyeSBvYmplY3RzLlxuTWFwcGluZ3MgYXJlIG11dGFibGUgb2JqZWN0cy4gIFRoZXJlIGlzIGN1cnJlbnRseSBvbmx5IG9uZSBzdGFuZGFyZFxubWFwcGluZyB0eXBlLCB0aGUgKmRpY3Rpb25hcnkqLiAgKEZvciBvdGhlciBjb250YWluZXJzIHNlZSB0aGUgYnVpbHQtXG5pbiAibGlzdCIsICJzZXQiLCBhbmQgInR1cGxlIiBjbGFzc2VzLCBhbmQgdGhlICJjb2xsZWN0aW9ucyIgbW9kdWxlLilcblxuQSBkaWN0aW9uYXJ5XCdzIGtleXMgYXJlICphbG1vc3QqIGFyYml0cmFyeSB2YWx1ZXMuICBWYWx1ZXMgdGhhdCBhcmVcbm5vdCAqaGFzaGFibGUqLCB0aGF0IGlzLCB2YWx1ZXMgY29udGFpbmluZyBsaXN0cywgZGljdGlvbmFyaWVzIG9yXG5vdGhlciBtdXRhYmxlIHR5cGVzICh0aGF0IGFyZSBjb21wYXJlZCBieSB2YWx1ZSByYXRoZXIgdGhhbiBieSBvYmplY3RcbmlkZW50aXR5KSBtYXkgbm90IGJlIHVzZWQgYXMga2V5cy4gIE51bWVyaWMgdHlwZXMgdXNlZCBmb3Iga2V5cyBvYmV5XG50aGUgbm9ybWFsIHJ1bGVzIGZvciBudW1lcmljIGNvbXBhcmlzb246IGlmIHR3byBudW1iZXJzIGNvbXBhcmUgZXF1YWxcbihzdWNoIGFzICIxIiBhbmQgIjEuMCIpIHRoZW4gdGhleSBjYW4gYmUgdXNlZCBpbnRlcmNoYW5nZWFibHkgdG8gaW5kZXhcbnRoZSBzYW1lIGRpY3Rpb25hcnkgZW50cnkuICAoTm90ZSBob3dldmVyLCB0aGF0IHNpbmNlIGNvbXB1dGVycyBzdG9yZVxuZmxvYXRpbmctcG9pbnQgbnVtYmVycyBhcyBhcHByb3hpbWF0aW9ucyBpdCBpcyB1c3VhbGx5IHVud2lzZSB0byB1c2VcbnRoZW0gYXMgZGljdGlvbmFyeSBrZXlzLilcblxuRGljdGlvbmFyaWVzIGNhbiBiZSBjcmVhdGVkIGJ5IHBsYWNpbmcgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiAia2V5OlxudmFsdWUiIHBhaXJzIHdpdGhpbiBicmFjZXMsIGZvciBleGFtcGxlOiAie1wnamFja1wnOiA0MDk4LCBcJ3Nqb2VyZFwnOlxuNDEyN30iIG9yICJ7NDA5ODogXCdqYWNrXCcsIDQxMjc6IFwnc2pvZXJkXCd9Iiwgb3IgYnkgdGhlICJkaWN0IlxuY29uc3RydWN0b3IuXG5cbmNsYXNzIGNsYXNzIGRpY3QoKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QobWFwcGluZywgKiprd2FyZylcbmNsYXNzIGNsYXNzIGRpY3QoaXRlcmFibGUsICoqa3dhcmcpXG5cbiAgIFJldHVybiBhIG5ldyBkaWN0aW9uYXJ5IGluaXRpYWxpemVkIGZyb20gYW4gb3B0aW9uYWwgcG9zaXRpb25hbFxuICAgYXJndW1lbnQgYW5kIGEgcG9zc2libHkgZW1wdHkgc2V0IG9mIGtleXdvcmQgYXJndW1lbnRzLlxuXG4gICBJZiBubyBwb3NpdGlvbmFsIGFyZ3VtZW50IGlzIGdpdmVuLCBhbiBlbXB0eSBkaWN0aW9uYXJ5IGlzIGNyZWF0ZWQuXG4gICBJZiBhIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgZ2l2ZW4gYW5kIGl0IGlzIGEgbWFwcGluZyBvYmplY3QsIGFcbiAgIGRpY3Rpb25hcnkgaXMgY3JlYXRlZCB3aXRoIHRoZSBzYW1lIGtleS12YWx1ZSBwYWlycyBhcyB0aGUgbWFwcGluZ1xuICAgb2JqZWN0LiAgT3RoZXJ3aXNlLCB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBtdXN0IGJlIGFuICppdGVyYWJsZSpcbiAgIG9iamVjdC4gIEVhY2ggaXRlbSBpbiB0aGUgaXRlcmFibGUgbXVzdCBpdHNlbGYgYmUgYW4gaXRlcmFibGUgd2l0aFxuICAgZXhhY3RseSB0d28gb2JqZWN0cy4gIFRoZSBmaXJzdCBvYmplY3Qgb2YgZWFjaCBpdGVtIGJlY29tZXMgYSBrZXlcbiAgIGluIHRoZSBuZXcgZGljdGlvbmFyeSwgYW5kIHRoZSBzZWNvbmQgb2JqZWN0IHRoZSBjb3JyZXNwb25kaW5nXG4gICB2YWx1ZS4gIElmIGEga2V5IG9jY3VycyBtb3JlIHRoYW4gb25jZSwgdGhlIGxhc3QgdmFsdWUgZm9yIHRoYXQga2V5XG4gICBiZWNvbWVzIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIGluIHRoZSBuZXcgZGljdGlvbmFyeS5cblxuICAgSWYga2V5d29yZCBhcmd1bWVudHMgYXJlIGdpdmVuLCB0aGUga2V5d29yZCBhcmd1bWVudHMgYW5kIHRoZWlyXG4gICB2YWx1ZXMgYXJlIGFkZGVkIHRvIHRoZSBkaWN0aW9uYXJ5IGNyZWF0ZWQgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuICBJZiBhIGtleSBiZWluZyBhZGRlZCBpcyBhbHJlYWR5IHByZXNlbnQsIHRoZSB2YWx1ZSBmcm9tXG4gICB0aGUga2V5d29yZCBhcmd1bWVudCByZXBsYWNlcyB0aGUgdmFsdWUgZnJvbSB0aGUgcG9zaXRpb25hbFxuICAgYXJndW1lbnQuXG5cbiAgIFRvIGlsbHVzdHJhdGUsIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgYWxsIHJldHVybiBhIGRpY3Rpb25hcnkgZXF1YWxcbiAgIHRvICJ7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfSI6XG5cbiAgICAgID4+PiBhID0gZGljdChvbmU9MSwgdHdvPTIsIHRocmVlPTMpXG4gICAgICA+Pj4gYiA9IHtcJ29uZVwnOiAxLCBcJ3R3b1wnOiAyLCBcJ3RocmVlXCc6IDN9XG4gICAgICA+Pj4gYyA9IGRpY3QoemlwKFtcJ29uZVwnLCBcJ3R3b1wnLCBcJ3RocmVlXCddLCBbMSwgMiwgM10pKVxuICAgICAgPj4+IGQgPSBkaWN0KFsoXCd0d29cJywgMiksIChcJ29uZVwnLCAxKSwgKFwndGhyZWVcJywgMyldKVxuICAgICAgPj4+IGUgPSBkaWN0KHtcJ3RocmVlXCc6IDMsIFwnb25lXCc6IDEsIFwndHdvXCc6IDJ9KVxuICAgICAgPj4+IGEgPT0gYiA9PSBjID09IGQgPT0gZVxuICAgICAgVHJ1ZVxuXG4gICBQcm92aWRpbmcga2V5d29yZCBhcmd1bWVudHMgYXMgaW4gdGhlIGZpcnN0IGV4YW1wbGUgb25seSB3b3JrcyBmb3JcbiAgIGtleXMgdGhhdCBhcmUgdmFsaWQgUHl0aG9uIGlkZW50aWZpZXJzLiAgT3RoZXJ3aXNlLCBhbnkgdmFsaWQga2V5c1xuICAgY2FuIGJlIHVzZWQuXG5cbiAgIFRoZXNlIGFyZSB0aGUgb3BlcmF0aW9ucyB0aGF0IGRpY3Rpb25hcmllcyBzdXBwb3J0IChhbmQgdGhlcmVmb3JlLFxuICAgY3VzdG9tIG1hcHBpbmcgdHlwZXMgc2hvdWxkIHN1cHBvcnQgdG9vKTpcblxuICAgbGVuKGQpXG5cbiAgICAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBkaWN0aW9uYXJ5ICpkKi5cblxuICAgZFtrZXldXG5cbiAgICAgIFJldHVybiB0aGUgaXRlbSBvZiAqZCogd2l0aCBrZXkgKmtleSouICBSYWlzZXMgYSAiS2V5RXJyb3IiIGlmXG4gICAgICAqa2V5KiBpcyBub3QgaW4gdGhlIG1hcC5cblxuICAgICAgSWYgYSBzdWJjbGFzcyBvZiBkaWN0IGRlZmluZXMgYSBtZXRob2QgIl9fbWlzc2luZ19fKCkiIGFuZCAqa2V5KlxuICAgICAgaXMgbm90IHByZXNlbnQsIHRoZSAiZFtrZXldIiBvcGVyYXRpb24gY2FsbHMgdGhhdCBtZXRob2Qgd2l0aFxuICAgICAgdGhlIGtleSAqa2V5KiBhcyBhcmd1bWVudC4gIFRoZSAiZFtrZXldIiBvcGVyYXRpb24gdGhlbiByZXR1cm5zXG4gICAgICBvciByYWlzZXMgd2hhdGV2ZXIgaXMgcmV0dXJuZWQgb3IgcmFpc2VkIGJ5IHRoZVxuICAgICAgIl9fbWlzc2luZ19fKGtleSkiIGNhbGwuIE5vIG90aGVyIG9wZXJhdGlvbnMgb3IgbWV0aG9kcyBpbnZva2VcbiAgICAgICJfX21pc3NpbmdfXygpIi4gSWYgIl9fbWlzc2luZ19fKCkiIGlzIG5vdCBkZWZpbmVkLCAiS2V5RXJyb3IiXG4gICAgICBpcyByYWlzZWQuICJfX21pc3NpbmdfXygpIiBtdXN0IGJlIGEgbWV0aG9kOyBpdCBjYW5ub3QgYmUgYW5cbiAgICAgIGluc3RhbmNlIHZhcmlhYmxlOlxuXG4gICAgICAgICA+Pj4gY2xhc3MgQ291bnRlcihkaWN0KTpcbiAgICAgICAgIC4uLiAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6XG4gICAgICAgICAuLi4gICAgICAgICByZXR1cm4gMFxuICAgICAgICAgPj4+IGMgPSBDb3VudGVyKClcbiAgICAgICAgID4+PiBjW1wncmVkXCddXG4gICAgICAgICAwXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXSArPSAxXG4gICAgICAgICA+Pj4gY1tcJ3JlZFwnXVxuICAgICAgICAgMVxuXG4gICAgICBUaGUgZXhhbXBsZSBhYm92ZSBzaG93cyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZlxuICAgICAgImNvbGxlY3Rpb25zLkNvdW50ZXIiLiAgQSBkaWZmZXJlbnQgIl9fbWlzc2luZ19fIiBtZXRob2QgaXMgdXNlZFxuICAgICAgYnkgImNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0Ii5cblxuICAgZFtrZXldID0gdmFsdWVcblxuICAgICAgU2V0ICJkW2tleV0iIHRvICp2YWx1ZSouXG5cbiAgIGRlbCBkW2tleV1cblxuICAgICAgUmVtb3ZlICJkW2tleV0iIGZyb20gKmQqLiAgUmFpc2VzIGEgIktleUVycm9yIiBpZiAqa2V5KiBpcyBub3RcbiAgICAgIGluIHRoZSBtYXAuXG5cbiAgIGtleSBpbiBkXG5cbiAgICAgIFJldHVybiAiVHJ1ZSIgaWYgKmQqIGhhcyBhIGtleSAqa2V5KiwgZWxzZSAiRmFsc2UiLlxuXG4gICBrZXkgbm90IGluIGRcblxuICAgICAgRXF1aXZhbGVudCB0byAibm90IGtleSBpbiBkIi5cblxuICAgaXRlcihkKVxuXG4gICAgICBSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciB0aGUga2V5cyBvZiB0aGUgZGljdGlvbmFyeS4gIFRoaXMgaXMgYVxuICAgICAgc2hvcnRjdXQgZm9yICJpdGVyKGQua2V5cygpKSIuXG5cbiAgIGNsZWFyKClcblxuICAgICAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjb3B5KClcblxuICAgICAgUmV0dXJuIGEgc2hhbGxvdyBjb3B5IG9mIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBjbGFzc21ldGhvZCBmcm9ta2V5cyhzZXFbLCB2YWx1ZV0pXG5cbiAgICAgIENyZWF0ZSBhIG5ldyBkaWN0aW9uYXJ5IHdpdGgga2V5cyBmcm9tICpzZXEqIGFuZCB2YWx1ZXMgc2V0IHRvXG4gICAgICAqdmFsdWUqLlxuXG4gICAgICAiZnJvbWtleXMoKSIgaXMgYSBjbGFzcyBtZXRob2QgdGhhdCByZXR1cm5zIGEgbmV3IGRpY3Rpb25hcnkuXG4gICAgICAqdmFsdWUqIGRlZmF1bHRzIHRvICJOb25lIi5cblxuICAgZ2V0KGtleVssIGRlZmF1bHRdKVxuXG4gICAgICBSZXR1cm4gdGhlIHZhbHVlIGZvciAqa2V5KiBpZiAqa2V5KiBpcyBpbiB0aGUgZGljdGlvbmFyeSwgZWxzZVxuICAgICAgKmRlZmF1bHQqLiBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuLCBpdCBkZWZhdWx0cyB0byAiTm9uZSIsIHNvXG4gICAgICB0aGF0IHRoaXMgbWV0aG9kIG5ldmVyIHJhaXNlcyBhICJLZXlFcnJvciIuXG5cbiAgIGl0ZW1zKClcblxuICAgICAgUmV0dXJuIGEgbmV3IHZpZXcgb2YgdGhlIGRpY3Rpb25hcnlcJ3MgaXRlbXMgKCIoa2V5LCB2YWx1ZSkiXG4gICAgICBwYWlycykuIFNlZSB0aGUgKmRvY3VtZW50YXRpb24gb2YgdmlldyBvYmplY3RzKi5cblxuICAga2V5cygpXG5cbiAgICAgIFJldHVybiBhIG5ldyB2aWV3IG9mIHRoZSBkaWN0aW9uYXJ5XCdzIGtleXMuICBTZWUgdGhlXG4gICAgICAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG4gICBwb3Aoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZW1vdmUgaXQgYW5kIHJldHVybiBpdHMgdmFsdWUsXG4gICAgICBlbHNlIHJldHVybiAqZGVmYXVsdCouICBJZiAqZGVmYXVsdCogaXMgbm90IGdpdmVuIGFuZCAqa2V5KiBpc1xuICAgICAgbm90IGluIHRoZSBkaWN0aW9uYXJ5LCBhICJLZXlFcnJvciIgaXMgcmFpc2VkLlxuXG4gICBwb3BpdGVtKClcblxuICAgICAgUmVtb3ZlIGFuZCByZXR1cm4gYW4gYXJiaXRyYXJ5ICIoa2V5LCB2YWx1ZSkiIHBhaXIgZnJvbSB0aGVcbiAgICAgIGRpY3Rpb25hcnkuXG5cbiAgICAgICJwb3BpdGVtKCkiIGlzIHVzZWZ1bCB0byBkZXN0cnVjdGl2ZWx5IGl0ZXJhdGUgb3ZlciBhXG4gICAgICBkaWN0aW9uYXJ5LCBhcyBvZnRlbiB1c2VkIGluIHNldCBhbGdvcml0aG1zLiAgSWYgdGhlIGRpY3Rpb25hcnlcbiAgICAgIGlzIGVtcHR5LCBjYWxsaW5nICJwb3BpdGVtKCkiIHJhaXNlcyBhICJLZXlFcnJvciIuXG5cbiAgIHNldGRlZmF1bHQoa2V5WywgZGVmYXVsdF0pXG5cbiAgICAgIElmICprZXkqIGlzIGluIHRoZSBkaWN0aW9uYXJ5LCByZXR1cm4gaXRzIHZhbHVlLiAgSWYgbm90LCBpbnNlcnRcbiAgICAgICprZXkqIHdpdGggYSB2YWx1ZSBvZiAqZGVmYXVsdCogYW5kIHJldHVybiAqZGVmYXVsdCouICAqZGVmYXVsdCpcbiAgICAgIGRlZmF1bHRzIHRvICJOb25lIi5cblxuICAgdXBkYXRlKFtvdGhlcl0pXG5cbiAgICAgIFVwZGF0ZSB0aGUgZGljdGlvbmFyeSB3aXRoIHRoZSBrZXkvdmFsdWUgcGFpcnMgZnJvbSAqb3RoZXIqLFxuICAgICAgb3ZlcndyaXRpbmcgZXhpc3Rpbmcga2V5cy4gIFJldHVybiAiTm9uZSIuXG5cbiAgICAgICJ1cGRhdGUoKSIgYWNjZXB0cyBlaXRoZXIgYW5vdGhlciBkaWN0aW9uYXJ5IG9iamVjdCBvciBhblxuICAgICAgaXRlcmFibGUgb2Yga2V5L3ZhbHVlIHBhaXJzIChhcyB0dXBsZXMgb3Igb3RoZXIgaXRlcmFibGVzIG9mXG4gICAgICBsZW5ndGggdHdvKS4gIElmIGtleXdvcmQgYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQsIHRoZSBkaWN0aW9uYXJ5XG4gICAgICBpcyB0aGVuIHVwZGF0ZWQgd2l0aCB0aG9zZSBrZXkvdmFsdWUgcGFpcnM6ICJkLnVwZGF0ZShyZWQ9MSxcbiAgICAgIGJsdWU9MikiLlxuXG4gICB2YWx1ZXMoKVxuXG4gICAgICBSZXR1cm4gYSBuZXcgdmlldyBvZiB0aGUgZGljdGlvbmFyeVwncyB2YWx1ZXMuICBTZWUgdGhlXG4gICAgICAqZG9jdW1lbnRhdGlvbiBvZiB2aWV3IG9iamVjdHMqLlxuXG4gICBEaWN0aW9uYXJpZXMgY29tcGFyZSBlcXVhbCBpZiBhbmQgb25seSBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgIihrZXksXG4gICB2YWx1ZSkiIHBhaXJzLiBPcmRlciBjb21wYXJpc29ucyAoXCc8XCcsIFwnPD1cJywgXCc+PVwnLCBcJz5cJykgcmFpc2VcbiAgICJUeXBlRXJyb3IiLlxuXG5TZWUgYWxzbzogInR5cGVzLk1hcHBpbmdQcm94eVR5cGUiIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBhIHJlYWQtb25seVxuICB2aWV3IG9mIGEgImRpY3QiLlxuXG5cbkRpY3Rpb25hcnkgdmlldyBvYmplY3RzXG49PT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb2JqZWN0cyByZXR1cm5lZCBieSAiZGljdC5rZXlzKCkiLCAiZGljdC52YWx1ZXMoKSIgYW5kXG4iZGljdC5pdGVtcygpIiBhcmUgKnZpZXcgb2JqZWN0cyouICBUaGV5IHByb3ZpZGUgYSBkeW5hbWljIHZpZXcgb24gdGhlXG5kaWN0aW9uYXJ5XCdzIGVudHJpZXMsIHdoaWNoIG1lYW5zIHRoYXQgd2hlbiB0aGUgZGljdGlvbmFyeSBjaGFuZ2VzLFxudGhlIHZpZXcgcmVmbGVjdHMgdGhlc2UgY2hhbmdlcy5cblxuRGljdGlvbmFyeSB2aWV3cyBjYW4gYmUgaXRlcmF0ZWQgb3ZlciB0byB5aWVsZCB0aGVpciByZXNwZWN0aXZlIGRhdGEsXG5hbmQgc3VwcG9ydCBtZW1iZXJzaGlwIHRlc3RzOlxuXG5sZW4oZGljdHZpZXcpXG5cbiAgIFJldHVybiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRpY3Rpb25hcnkuXG5cbml0ZXIoZGljdHZpZXcpXG5cbiAgIFJldHVybiBhbiBpdGVyYXRvciBvdmVyIHRoZSBrZXlzLCB2YWx1ZXMgb3IgaXRlbXMgKHJlcHJlc2VudGVkIGFzXG4gICB0dXBsZXMgb2YgIihrZXksIHZhbHVlKSIpIGluIHRoZSBkaWN0aW9uYXJ5LlxuXG4gICBLZXlzIGFuZCB2YWx1ZXMgYXJlIGl0ZXJhdGVkIG92ZXIgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyIHdoaWNoIGlzXG4gICBub24tcmFuZG9tLCB2YXJpZXMgYWNyb3NzIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMsIGFuZCBkZXBlbmRzIG9uXG4gICB0aGUgZGljdGlvbmFyeVwncyBoaXN0b3J5IG9mIGluc2VydGlvbnMgYW5kIGRlbGV0aW9ucy4gSWYga2V5cyxcbiAgIHZhbHVlcyBhbmQgaXRlbXMgdmlld3MgYXJlIGl0ZXJhdGVkIG92ZXIgd2l0aCBubyBpbnRlcnZlbmluZ1xuICAgbW9kaWZpY2F0aW9ucyB0byB0aGUgZGljdGlvbmFyeSwgdGhlIG9yZGVyIG9mIGl0ZW1zIHdpbGwgZGlyZWN0bHlcbiAgIGNvcnJlc3BvbmQuICBUaGlzIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgIih2YWx1ZSwga2V5KSIgcGFpcnMgdXNpbmdcbiAgICJ6aXAoKSI6ICJwYWlycyA9IHppcChkLnZhbHVlcygpLCBkLmtleXMoKSkiLiAgQW5vdGhlciB3YXkgdG9cbiAgIGNyZWF0ZSB0aGUgc2FtZSBsaXN0IGlzICJwYWlycyA9IFsodiwgaykgZm9yIChrLCB2KSBpbiBkLml0ZW1zKCldIi5cblxuICAgSXRlcmF0aW5nIHZpZXdzIHdoaWxlIGFkZGluZyBvciBkZWxldGluZyBlbnRyaWVzIGluIHRoZSBkaWN0aW9uYXJ5XG4gICBtYXkgcmFpc2UgYSAiUnVudGltZUVycm9yIiBvciBmYWlsIHRvIGl0ZXJhdGUgb3ZlciBhbGwgZW50cmllcy5cblxueCBpbiBkaWN0dmlld1xuXG4gICBSZXR1cm4gIlRydWUiIGlmICp4KiBpcyBpbiB0aGUgdW5kZXJseWluZyBkaWN0aW9uYXJ5XCdzIGtleXMsIHZhbHVlc1xuICAgb3IgaXRlbXMgKGluIHRoZSBsYXR0ZXIgY2FzZSwgKngqIHNob3VsZCBiZSBhICIoa2V5LCB2YWx1ZSkiXG4gICB0dXBsZSkuXG5cbktleXMgdmlld3MgYXJlIHNldC1saWtlIHNpbmNlIHRoZWlyIGVudHJpZXMgYXJlIHVuaXF1ZSBhbmQgaGFzaGFibGUuXG5JZiBhbGwgdmFsdWVzIGFyZSBoYXNoYWJsZSwgc28gdGhhdCAiKGtleSwgdmFsdWUpIiBwYWlycyBhcmUgdW5pcXVlXG5hbmQgaGFzaGFibGUsIHRoZW4gdGhlIGl0ZW1zIHZpZXcgaXMgYWxzbyBzZXQtbGlrZS4gIChWYWx1ZXMgdmlld3MgYXJlXG5ub3QgdHJlYXRlZCBhcyBzZXQtbGlrZSBzaW5jZSB0aGUgZW50cmllcyBhcmUgZ2VuZXJhbGx5IG5vdCB1bmlxdWUuKVxuRm9yIHNldC1saWtlIHZpZXdzLCBhbGwgb2YgdGhlIG9wZXJhdGlvbnMgZGVmaW5lZCBmb3IgdGhlIGFic3RyYWN0XG5iYXNlIGNsYXNzICJjb2xsZWN0aW9ucy5hYmMuU2V0IiBhcmUgYXZhaWxhYmxlIChmb3IgZXhhbXBsZSwgIj09IixcbiI8Iiwgb3IgIl4iKS5cblxuQW4gZXhhbXBsZSBvZiBkaWN0aW9uYXJ5IHZpZXcgdXNhZ2U6XG5cbiAgID4+PiBkaXNoZXMgPSB7XCdlZ2dzXCc6IDIsIFwnc2F1c2FnZVwnOiAxLCBcJ2JhY29uXCc6IDEsIFwnc3BhbVwnOiA1MDB9XG4gICA+Pj4ga2V5cyA9IGRpc2hlcy5rZXlzKClcbiAgID4+PiB2YWx1ZXMgPSBkaXNoZXMudmFsdWVzKClcblxuICAgPj4+ICMgaXRlcmF0aW9uXG4gICA+Pj4gbiA9IDBcbiAgID4+PiBmb3IgdmFsIGluIHZhbHVlczpcbiAgIC4uLiAgICAgbiArPSB2YWxcbiAgID4+PiBwcmludChuKVxuICAgNTA0XG5cbiAgID4+PiAjIGtleXMgYW5kIHZhbHVlcyBhcmUgaXRlcmF0ZWQgb3ZlciBpbiB0aGUgc2FtZSBvcmRlclxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ2VnZ3NcJywgXCdiYWNvblwnLCBcJ3NhdXNhZ2VcJywgXCdzcGFtXCddXG4gICA+Pj4gbGlzdCh2YWx1ZXMpXG4gICBbMiwgMSwgMSwgNTAwXVxuXG4gICA+Pj4gIyB2aWV3IG9iamVjdHMgYXJlIGR5bmFtaWMgYW5kIHJlZmxlY3QgZGljdCBjaGFuZ2VzXG4gICA+Pj4gZGVsIGRpc2hlc1tcJ2VnZ3NcJ11cbiAgID4+PiBkZWwgZGlzaGVzW1wnc2F1c2FnZVwnXVxuICAgPj4+IGxpc3Qoa2V5cylcbiAgIFtcJ3NwYW1cJywgXCdiYWNvblwnXVxuXG4gICA+Pj4gIyBzZXQgb3BlcmF0aW9uc1xuICAgPj4+IGtleXMgJiB7XCdlZ2dzXCcsIFwnYmFjb25cJywgXCdzYWxhZFwnfVxuICAge1wnYmFjb25cJ31cbiAgID4+PiBrZXlzIF4ge1wnc2F1c2FnZVwnLCBcJ2p1aWNlXCd9XG4gICB7XCdqdWljZVwnLCBcJ3NhdXNhZ2VcJywgXCdiYWNvblwnLCBcJ3NwYW1cJ31cbicsCisgJ3R5cGVzbWV0aG9kcyc6IHUnXG5NZXRob2RzXG4qKioqKioqXG5cbk1ldGhvZHMgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjYWxsZWQgdXNpbmcgdGhlIGF0dHJpYnV0ZSBub3RhdGlvbi5cblRoZXJlIGFyZSB0d28gZmxhdm9yczogYnVpbHQtaW4gbWV0aG9kcyAoc3VjaCBhcyAiYXBwZW5kKCkiIG9uIGxpc3RzKVxuYW5kIGNsYXNzIGluc3RhbmNlIG1ldGhvZHMuICBCdWlsdC1pbiBtZXRob2RzIGFyZSBkZXNjcmliZWQgd2l0aCB0aGVcbnR5cGVzIHRoYXQgc3VwcG9ydCB0aGVtLlxuXG5JZiB5b3UgYWNjZXNzIGEgbWV0aG9kIChhIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBjbGFzcyBuYW1lc3BhY2UpXG50aHJvdWdoIGFuIGluc3RhbmNlLCB5b3UgZ2V0IGEgc3BlY2lhbCBvYmplY3Q6IGEgKmJvdW5kIG1ldGhvZCogKGFsc29cbmNhbGxlZCAqaW5zdGFuY2UgbWV0aG9kKikgb2JqZWN0LiBXaGVuIGNhbGxlZCwgaXQgd2lsbCBhZGQgdGhlICJzZWxmIlxuYXJndW1lbnQgdG8gdGhlIGFyZ3VtZW50IGxpc3QuICBCb3VuZCBtZXRob2RzIGhhdmUgdHdvIHNwZWNpYWwgcmVhZC1cbm9ubHkgYXR0cmlidXRlczogIm0uX19zZWxmX18iIGlzIHRoZSBvYmplY3Qgb24gd2hpY2ggdGhlIG1ldGhvZFxub3BlcmF0ZXMsIGFuZCAibS5fX2Z1bmNfXyIgaXMgdGhlIGZ1bmN0aW9uIGltcGxlbWVudGluZyB0aGUgbWV0aG9kLlxuQ2FsbGluZyAibShhcmctMSwgYXJnLTIsIC4uLiwgYXJnLW4pIiBpcyBjb21wbGV0ZWx5IGVxdWl2YWxlbnQgdG9cbmNhbGxpbmcgIm0uX19mdW5jX18obS5fX3NlbGZfXywgYXJnLTEsIGFyZy0yLCAuLi4sIGFyZy1uKSIuXG5cbkxpa2UgZnVuY3Rpb24gb2JqZWN0cywgYm91bmQgbWV0aG9kIG9iamVjdHMgc3VwcG9ydCBnZXR0aW5nIGFyYml0cmFyeVxuYXR0cmlidXRlcy4gIEhvd2V2ZXIsIHNpbmNlIG1ldGhvZCBhdHRyaWJ1dGVzIGFyZSBhY3R1YWxseSBzdG9yZWQgb25cbnRoZSB1bmRlcmx5aW5nIGZ1bmN0aW9uIG9iamVjdCAoIm1ldGguX19mdW5jX18iKSwgc2V0dGluZyBtZXRob2RcbmF0dHJpYnV0ZXMgb24gYm91bmQgbWV0aG9kcyBpcyBkaXNhbGxvd2VkLiAgQXR0ZW1wdGluZyB0byBzZXQgYW5cbmF0dHJpYnV0ZSBvbiBhIG1ldGhvZCByZXN1bHRzIGluIGFuICJBdHRyaWJ1dGVFcnJvciIgYmVpbmcgcmFpc2VkLiAgSW5cbm9yZGVyIHRvIHNldCBhIG1ldGhvZCBhdHRyaWJ1dGUsIHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgc2V0IGl0IG9uIHRoZVxudW5kZXJseWluZyBmdW5jdGlvbiBvYmplY3Q6XG5cbiAgID4+PiBjbGFzcyBDOlxuICAgLi4uICAgICBkZWYgbWV0aG9kKHNlbGYpOlxuICAgLi4uICAgICAgICAgcGFzc1xuICAgLi4uXG4gICA+Pj4gYyA9IEMoKVxuICAgPj4+IGMubWV0aG9kLndob2FtaSA9IFwnbXkgbmFtZSBpcyBtZXRob2RcJyAgIyBjYW5cJ3Qgc2V0IG9uIHRoZSBtZXRob2RcbiAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KTpcbiAgICAgRmlsZSAiPHN0ZGluPiIsIGxpbmUgMSwgaW4gPG1vZHVsZT5cbiAgIEF0dHJpYnV0ZUVycm9yOiBcJ21ldGhvZFwnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlIFwnd2hvYW1pXCdcbiAgID4+PiBjLm1ldGhvZC5fX2Z1bmNfXy53aG9hbWkgPSBcJ215IG5hbWUgaXMgbWV0aG9kXCdcbiAgID4+PiBjLm1ldGhvZC53aG9hbWlcbiAgIFwnbXkgbmFtZSBpcyBtZXRob2RcJ1xuXG5TZWUgKlRoZSBzdGFuZGFyZCB0eXBlIGhpZXJhcmNoeSogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4nLAorICd0eXBlc21vZHVsZXMnOiB1J1xuTW9kdWxlc1xuKioqKioqKlxuXG5UaGUgb25seSBzcGVjaWFsIG9wZXJhdGlvbiBvbiBhIG1vZHVsZSBpcyBhdHRyaWJ1dGUgYWNjZXNzOiAibS5uYW1lIixcbndoZXJlICptKiBpcyBhIG1vZHVsZSBhbmQgKm5hbWUqIGFjY2Vzc2VzIGEgbmFtZSBkZWZpbmVkIGluICptKlwnc1xuc3ltYm9sIHRhYmxlLiBNb2R1bGUgYXR0cmlidXRlcyBjYW4gYmUgYXNzaWduZWQgdG8uICAoTm90ZSB0aGF0IHRoZVxuImltcG9ydCIgc3RhdGVtZW50IGlzIG5vdCwgc3RyaWN0bHkgc3BlYWtpbmcsIGFuIG9wZXJhdGlvbiBvbiBhIG1vZHVsZVxub2JqZWN0OyAiaW1wb3J0IGZvbyIgZG9lcyBub3QgcmVxdWlyZSBhIG1vZHVsZSBvYmplY3QgbmFtZWQgKmZvbyogdG9cbmV4aXN0LCByYXRoZXIgaXQgcmVxdWlyZXMgYW4gKGV4dGVybmFsKSAqZGVmaW5pdGlvbiogZm9yIGEgbW9kdWxlXG5uYW1lZCAqZm9vKiBzb21ld2hlcmUuKVxuXG5BIHNwZWNpYWwgYXR0cmlidXRlIG9mIGV2ZXJ5IG1vZHVsZSBpcyAiX19kaWN0X18iLiBUaGlzIGlzIHRoZVxuZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBtb2R1bGVcJ3Mgc3ltYm9sIHRhYmxlLiBNb2RpZnlpbmcgdGhpc1xuZGljdGlvbmFyeSB3aWxsIGFjdHVhbGx5IGNoYW5nZSB0aGUgbW9kdWxlXCdzIHN5bWJvbCB0YWJsZSwgYnV0IGRpcmVjdFxuYXNzaWdubWVudCB0byB0aGUgIl9fZGljdF9fIiBhdHRyaWJ1dGUgaXMgbm90IHBvc3NpYmxlICh5b3UgY2FuIHdyaXRlXG4ibS5fX2RpY3RfX1tcJ2FcJ10gPSAxIiwgd2hpY2ggZGVmaW5lcyAibS5hIiB0byBiZSAiMSIsIGJ1dCB5b3UgY2FuXCd0XG53cml0ZSAibS5fX2RpY3RfXyA9IHt9IikuICBNb2RpZnlpbmcgIl9fZGljdF9fIiBkaXJlY3RseSBpcyBub3RcbnJlY29tbWVuZGVkLlxuXG5Nb2R1bGVzIGJ1aWx0IGludG8gdGhlIGludGVycHJldGVyIGFyZSB3cml0dGVuIGxpa2UgdGhpczogIjxtb2R1bGVcblwnc3lzXCcgKGJ1aWx0LWluKT4iLiAgSWYgbG9hZGVkIGZyb20gYSBmaWxlLCB0aGV5IGFyZSB3cml0dGVuIGFzXG4iPG1vZHVsZSBcJ29zXCcgZnJvbSBcJy91c3IvbG9jYWwvbGliL3B5dGhvblguWS9vcy5weWNcJz4iLlxuJywKKyAndHlwZXNzZXEnOiB1J1xuU2VxdWVuY2UgVHlwZXMgLS0tICJsaXN0IiwgInR1cGxlIiwgInJhbmdlIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXG5UaGVyZSBhcmUgdGhyZWUgYmFzaWMgc2VxdWVuY2UgdHlwZXM6IGxpc3RzLCB0dXBsZXMsIGFuZCByYW5nZVxub2JqZWN0cy4gQWRkaXRpb25hbCBzZXF1ZW5jZSB0eXBlcyB0YWlsb3JlZCBmb3IgcHJvY2Vzc2luZyBvZiAqYmluYXJ5XG5kYXRhKiBhbmQgKnRleHQgc3RyaW5ncyogYXJlIGRlc2NyaWJlZCBpbiBkZWRpY2F0ZWQgc2VjdGlvbnMuXG5cblxuQ29tbW9uIFNlcXVlbmNlIE9wZXJhdGlvbnNcbj09PT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvcGVyYXRpb25zIGluIHRoZSBmb2xsb3dpbmcgdGFibGUgYXJlIHN1cHBvcnRlZCBieSBtb3N0IHNlcXVlbmNlXG50eXBlcywgYm90aCBtdXRhYmxlIGFuZCBpbW11dGFibGUuIFRoZSAiY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlIiBBQkNcbmlzIHByb3ZpZGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9uc1xub24gY3VzdG9tIHNlcXVlbmNlIHR5cGVzLlxuXG5UaGlzIHRhYmxlIGxpc3RzIHRoZSBzZXF1ZW5jZSBvcGVyYXRpb25zIHNvcnRlZCBpbiBhc2NlbmRpbmcgcHJpb3JpdHkuXG5JbiB0aGUgdGFibGUsICpzKiBhbmQgKnQqIGFyZSBzZXF1ZW5jZXMgb2YgdGhlIHNhbWUgdHlwZSwgKm4qLCAqaSosXG4qaiogYW5kICprKiBhcmUgaW50ZWdlcnMgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55XG50eXBlIGFuZCB2YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyouXG5cblRoZSAiaW4iIGFuZCAibm90IGluIiBvcGVyYXRpb25zIGhhdmUgdGhlIHNhbWUgcHJpb3JpdGllcyBhcyB0aGVcbmNvbXBhcmlzb24gb3BlcmF0aW9ucy4gVGhlICIrIiAoY29uY2F0ZW5hdGlvbikgYW5kICIqIiAocmVwZXRpdGlvbilcbm9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGUgY29ycmVzcG9uZGluZyBudW1lcmljXG5vcGVyYXRpb25zLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgfCBSZXN1bHQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IE5vdGVzICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT0rXG58ICJ4IGluIHMiICAgICAgICAgICAgICAgICAgIHwgIlRydWUiIGlmIGFuIGl0ZW0gb2YgKnMqIGlzICAgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgIkZhbHNlIiAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJ4IG5vdCBpbiBzIiAgICAgICAgICAgICAgIHwgIkZhbHNlIiBpZiBhbiBpdGVtIG9mICpzKiBpcyAgICAgfCAoMSkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBlcXVhbCB0byAqeCosIGVsc2UgIlRydWUiICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzICsgdCIgICAgICAgICAgICAgICAgICAgIHwgdGhlIGNvbmNhdGVuYXRpb24gb2YgKnMqIGFuZCAqdCogfCAoNikoNykgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAicyAqIG4iIG9yICJuICogcyIgICAgICAgICB8IGVxdWl2YWxlbnQgdG8gYWRkaW5nICpzKiB0byAgICAgIHwgKDIpKDcpICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRzZWxmICpuKiB0aW1lcyAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAic1tpXSIgICAgICAgICAgICAgICAgICAgICB8ICppKnRoIGl0ZW0gb2YgKnMqLCBvcmlnaW4gMCAgICAgIHwgKDMpICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInNbaTpqXSIgICAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqICAgICB8ICgzKSg0KSAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzW2k6ajprXSIgICAgICAgICAgICAgICAgIHwgc2xpY2Ugb2YgKnMqIGZyb20gKmkqIHRvICpqKiAgICAgfCAoMykoNSkgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB3aXRoIHN0ZXAgKmsqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJsZW4ocykiICAgICAgICAgICAgICAgICAgIHwgbGVuZ3RoIG9mICpzKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tK1xufCAibWluKHMpIiAgICAgICAgICAgICAgICAgICB8IHNtYWxsZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgIm1heChzKSIgICAgICAgICAgICAgICAgICAgfCBsYXJnZXN0IGl0ZW0gb2YgKnMqICAgICAgICAgICAgICB8ICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rXG58ICJzLmluZGV4KHhbLCBpWywgal1dKSIgICAgIHwgaW5kZXggb2YgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgfCAoOCkgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqeCogaW4gKnMqIChhdCBvciBhZnRlciBpbmRleCAgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICppKiBhbmQgYmVmb3JlIGluZGV4ICpqKikgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcbnwgInMuY291bnQoeCkiICAgICAgICAgICAgICAgfCB0b3RhbCBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgICB8ICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiBpbiAqcyogICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLStcblxuU2VxdWVuY2VzIG9mIHRoZSBzYW1lIHR5cGUgYWxzbyBzdXBwb3J0IGNvbXBhcmlzb25zLiAgSW4gcGFydGljdWxhcixcbnR1cGxlcyBhbmQgbGlzdHMgYXJlIGNvbXBhcmVkIGxleGljb2dyYXBoaWNhbGx5IGJ5IGNvbXBhcmluZ1xuY29ycmVzcG9uZGluZyBlbGVtZW50cy4gVGhpcyBtZWFucyB0aGF0IHRvIGNvbXBhcmUgZXF1YWwsIGV2ZXJ5XG5lbGVtZW50IG11c3QgY29tcGFyZSBlcXVhbCBhbmQgdGhlIHR3byBzZXF1ZW5jZXMgbXVzdCBiZSBvZiB0aGUgc2FtZVxudHlwZSBhbmQgaGF2ZSB0aGUgc2FtZSBsZW5ndGguICAoRm9yIGZ1bGwgZGV0YWlscyBzZWUgKkNvbXBhcmlzb25zKiBpblxudGhlIGxhbmd1YWdlIHJlZmVyZW5jZS4pXG5cbk5vdGVzOlxuXG4xLiBXaGlsZSB0aGUgImluIiBhbmQgIm5vdCBpbiIgb3BlcmF0aW9ucyBhcmUgdXNlZCBvbmx5IGZvciBzaW1wbGVcbiAgIGNvbnRhaW5tZW50IHRlc3RpbmcgaW4gdGhlIGdlbmVyYWwgY2FzZSwgc29tZSBzcGVjaWFsaXNlZCBzZXF1ZW5jZXNcbiAgIChzdWNoIGFzICJzdHIiLCAiYnl0ZXMiIGFuZCAiYnl0ZWFycmF5IikgYWxzbyB1c2UgdGhlbSBmb3JcbiAgIHN1YnNlcXVlbmNlIHRlc3Rpbmc6XG5cbiAgICAgID4+PiAiZ2ciIGluICJlZ2dzIlxuICAgICAgVHJ1ZVxuXG4yLiBWYWx1ZXMgb2YgKm4qIGxlc3MgdGhhbiAiMCIgYXJlIHRyZWF0ZWQgYXMgIjAiICh3aGljaCB5aWVsZHMgYW5cbiAgIGVtcHR5IHNlcXVlbmNlIG9mIHRoZSBzYW1lIHR5cGUgYXMgKnMqKS4gIE5vdGUgdGhhdCBpdGVtcyBpbiB0aGVcbiAgIHNlcXVlbmNlICpzKiBhcmUgbm90IGNvcGllZDsgdGhleSBhcmUgcmVmZXJlbmNlZCBtdWx0aXBsZSB0aW1lcy5cbiAgIFRoaXMgb2Z0ZW4gaGF1bnRzIG5ldyBQeXRob24gcHJvZ3JhbW1lcnM7IGNvbnNpZGVyOlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW11dICogM1xuICAgICAgPj4+IGxpc3RzXG4gICAgICBbW10sIFtdLCBbXV1cbiAgICAgID4+PiBsaXN0c1swXS5hcHBlbmQoMylcbiAgICAgID4+PiBsaXN0c1xuICAgICAgW1szXSwgWzNdLCBbM11dXG5cbiAgIFdoYXQgaGFzIGhhcHBlbmVkIGlzIHRoYXQgIltbXV0iIGlzIGEgb25lLWVsZW1lbnQgbGlzdCBjb250YWluaW5nXG4gICBhbiBlbXB0eSBsaXN0LCBzbyBhbGwgdGhyZWUgZWxlbWVudHMgb2YgIltbXV0gKiAzIiBhcmUgcmVmZXJlbmNlc1xuICAgdG8gdGhpcyBzaW5nbGUgZW1wdHkgbGlzdC4gIE1vZGlmeWluZyBhbnkgb2YgdGhlIGVsZW1lbnRzIG9mXG4gICAibGlzdHMiIG1vZGlmaWVzIHRoaXMgc2luZ2xlIGxpc3QuIFlvdSBjYW4gY3JlYXRlIGEgbGlzdCBvZlxuICAgZGlmZmVyZW50IGxpc3RzIHRoaXMgd2F5OlxuXG4gICAgICA+Pj4gbGlzdHMgPSBbW10gZm9yIGkgaW4gcmFuZ2UoMyldXG4gICAgICA+Pj4gbGlzdHNbMF0uYXBwZW5kKDMpXG4gICAgICA+Pj4gbGlzdHNbMV0uYXBwZW5kKDUpXG4gICAgICA+Pj4gbGlzdHNbMl0uYXBwZW5kKDcpXG4gICAgICA+Pj4gbGlzdHNcbiAgICAgIFtbM10sIFs1XSwgWzddXVxuXG4gICBGdXJ0aGVyIGV4cGxhbmF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgRkFRIGVudHJ5ICpIb3cgZG8gSSBjcmVhdGVcbiAgIGEgbXVsdGlkaW1lbnNpb25hbCBsaXN0PyouXG5cbjMuIElmICppKiBvciAqaiogaXMgbmVnYXRpdmUsIHRoZSBpbmRleCBpcyByZWxhdGl2ZSB0byB0aGUgZW5kIG9mXG4gICB0aGUgc3RyaW5nOiAibGVuKHMpICsgaSIgb3IgImxlbihzKSArIGoiIGlzIHN1YnN0aXR1dGVkLiAgQnV0IG5vdGVcbiAgIHRoYXQgIi0wIiBpcyBzdGlsbCAiMCIuXG5cbjQuIFRoZSBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzIGRlZmluZWQgYXMgdGhlIHNlcXVlbmNlIG9mXG4gICBpdGVtcyB3aXRoIGluZGV4ICprKiBzdWNoIHRoYXQgImkgPD0gayA8IGoiLiAgSWYgKmkqIG9yICpqKiBpc1xuICAgZ3JlYXRlciB0aGFuICJsZW4ocykiLCB1c2UgImxlbihzKSIuICBJZiAqaSogaXMgb21pdHRlZCBvciAiTm9uZSIsXG4gICB1c2UgIjAiLiAgSWYgKmoqIGlzIG9taXR0ZWQgb3IgIk5vbmUiLCB1c2UgImxlbihzKSIuICBJZiAqaSogaXNcbiAgIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAqaiosIHRoZSBzbGljZSBpcyBlbXB0eS5cblxuNS4gVGhlIHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogd2l0aCBzdGVwICprKiBpcyBkZWZpbmVkIGFzIHRoZVxuICAgc2VxdWVuY2Ugb2YgaXRlbXMgd2l0aCBpbmRleCAgInggPSBpICsgbiprIiBzdWNoIHRoYXQgIjAgPD0gbiA8XG4gICAoai1pKS9rIi4gIEluIG90aGVyIHdvcmRzLCB0aGUgaW5kaWNlcyBhcmUgImkiLCAiaStrIiwgImkrMiprIixcbiAgICJpKzMqayIgYW5kIHNvIG9uLCBzdG9wcGluZyB3aGVuICpqKiBpcyByZWFjaGVkIChidXQgbmV2ZXJcbiAgIGluY2x1ZGluZyAqaiopLiAgSWYgKmkqIG9yICpqKiBpcyBncmVhdGVyIHRoYW4gImxlbihzKSIsIHVzZVxuICAgImxlbihzKSIuICBJZiAqaSogb3IgKmoqIGFyZSBvbWl0dGVkIG9yICJOb25lIiwgdGhleSBiZWNvbWUgImVuZCJcbiAgIHZhbHVlcyAod2hpY2ggZW5kIGRlcGVuZHMgb24gdGhlIHNpZ24gb2YgKmsqKS4gIE5vdGUsICprKiBjYW5ub3QgYmVcbiAgIHplcm8uIElmICprKiBpcyAiTm9uZSIsIGl0IGlzIHRyZWF0ZWQgbGlrZSAiMSIuXG5cbjYuIENvbmNhdGVuYXRpbmcgaW1tdXRhYmxlIHNlcXVlbmNlcyBhbHdheXMgcmVzdWx0cyBpbiBhIG5ld1xuICAgb2JqZWN0LiBUaGlzIG1lYW5zIHRoYXQgYnVpbGRpbmcgdXAgYSBzZXF1ZW5jZSBieSByZXBlYXRlZFxuICAgY29uY2F0ZW5hdGlvbiB3aWxsIGhhdmUgYSBxdWFkcmF0aWMgcnVudGltZSBjb3N0IGluIHRoZSB0b3RhbFxuICAgc2VxdWVuY2UgbGVuZ3RoLiBUbyBnZXQgYSBsaW5lYXIgcnVudGltZSBjb3N0LCB5b3UgbXVzdCBzd2l0Y2ggdG9cbiAgIG9uZSBvZiB0aGUgYWx0ZXJuYXRpdmVzIGJlbG93OlxuXG4gICAqIGlmIGNvbmNhdGVuYXRpbmcgInN0ciIgb2JqZWN0cywgeW91IGNhbiBidWlsZCBhIGxpc3QgYW5kIHVzZVxuICAgICAic3RyLmpvaW4oKSIgYXQgdGhlIGVuZCBvciBlbHNlIHdyaXRlIHRvIGFuICJpby5TdHJpbmdJTyJcbiAgICAgaW5zdGFuY2UgYW5kIHJldHJpZXZlIGl0cyB2YWx1ZSB3aGVuIGNvbXBsZXRlXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyAiYnl0ZXMiIG9iamVjdHMsIHlvdSBjYW4gc2ltaWxhcmx5IHVzZVxuICAgICAiYnl0ZXMuam9pbigpIiBvciAiaW8uQnl0ZXNJTyIsIG9yIHlvdSBjYW4gZG8gaW4tcGxhY2VcbiAgICAgY29uY2F0ZW5hdGlvbiB3aXRoIGEgImJ5dGVhcnJheSIgb2JqZWN0LiAgImJ5dGVhcnJheSIgb2JqZWN0cyBhcmVcbiAgICAgbXV0YWJsZSBhbmQgaGF2ZSBhbiBlZmZpY2llbnQgb3ZlcmFsbG9jYXRpb24gbWVjaGFuaXNtXG5cbiAgICogaWYgY29uY2F0ZW5hdGluZyAidHVwbGUiIG9iamVjdHMsIGV4dGVuZCBhICJsaXN0IiBpbnN0ZWFkXG5cbiAgICogZm9yIG90aGVyIHR5cGVzLCBpbnZlc3RpZ2F0ZSB0aGUgcmVsZXZhbnQgY2xhc3MgZG9jdW1lbnRhdGlvblxuXG43LiBTb21lIHNlcXVlbmNlIHR5cGVzIChzdWNoIGFzICJyYW5nZSIpIG9ubHkgc3VwcG9ydCBpdGVtXG4gICBzZXF1ZW5jZXMgdGhhdCBmb2xsb3cgc3BlY2lmaWMgcGF0dGVybnMsIGFuZCBoZW5jZSBkb25cJ3Qgc3VwcG9ydFxuICAgc2VxdWVuY2UgY29uY2F0ZW5hdGlvbiBvciByZXBldGl0aW9uLlxuXG44LiAiaW5kZXgiIHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi4gV2hlblxuICAgc3VwcG9ydGVkLCB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgdG8gdGhlIGluZGV4IG1ldGhvZCBhbGxvd1xuICAgZWZmaWNpZW50IHNlYXJjaGluZyBvZiBzdWJzZWN0aW9ucyBvZiB0aGUgc2VxdWVuY2UuIFBhc3NpbmcgdGhlXG4gICBleHRyYSBhcmd1bWVudHMgaXMgcm91Z2hseSBlcXVpdmFsZW50IHRvIHVzaW5nICJzW2k6al0uaW5kZXgoeCkiLFxuICAgb25seSB3aXRob3V0IGNvcHlpbmcgYW55IGRhdGEgYW5kIHdpdGggdGhlIHJldHVybmVkIGluZGV4IGJlaW5nXG4gICByZWxhdGl2ZSB0byB0aGUgc3RhcnQgb2YgdGhlIHNlcXVlbmNlIHJhdGhlciB0aGFuIHRoZSBzdGFydCBvZiB0aGVcbiAgIHNsaWNlLlxuXG5cbkltbXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PT09XG5cblRoZSBvbmx5IG9wZXJhdGlvbiB0aGF0IGltbXV0YWJsZSBzZXF1ZW5jZSB0eXBlcyBnZW5lcmFsbHkgaW1wbGVtZW50XG50aGF0IGlzIG5vdCBhbHNvIGltcGxlbWVudGVkIGJ5IG11dGFibGUgc2VxdWVuY2UgdHlwZXMgaXMgc3VwcG9ydCBmb3JcbnRoZSAiaGFzaCgpIiBidWlsdC1pbi5cblxuVGhpcyBzdXBwb3J0IGFsbG93cyBpbW11dGFibGUgc2VxdWVuY2VzLCBzdWNoIGFzICJ0dXBsZSIgaW5zdGFuY2VzLCB0b1xuYmUgdXNlZCBhcyAiZGljdCIga2V5cyBhbmQgc3RvcmVkIGluICJzZXQiIGFuZCAiZnJvemVuc2V0IiBpbnN0YW5jZXMuXG5cbkF0dGVtcHRpbmcgdG8gaGFzaCBhbiBpbW11dGFibGUgc2VxdWVuY2UgdGhhdCBjb250YWlucyB1bmhhc2hhYmxlXG52YWx1ZXMgd2lsbCByZXN1bHQgaW4gIlR5cGVFcnJvciIuXG5cblxuTXV0YWJsZSBTZXF1ZW5jZSBUeXBlc1xuPT09PT09PT09PT09PT09PT09PT09PVxuXG5UaGUgb3BlcmF0aW9ucyBpbiB0aGUgZm9sbG93aW5nIHRhYmxlIGFyZSBkZWZpbmVkIG9uIG11dGFibGUgc2VxdWVuY2VcbnR5cGVzLiBUaGUgImNvbGxlY3Rpb25zLmFiYy5NdXRhYmxlU2VxdWVuY2UiIEFCQyBpcyBwcm92aWRlZCB0byBtYWtlXG5pdCBlYXNpZXIgdG8gY29ycmVjdGx5IGltcGxlbWVudCB0aGVzZSBvcGVyYXRpb25zIG9uIGN1c3RvbSBzZXF1ZW5jZVxudHlwZXMuXG5cbkluIHRoZSB0YWJsZSAqcyogaXMgYW4gaW5zdGFuY2Ugb2YgYSBtdXRhYmxlIHNlcXVlbmNlIHR5cGUsICp0KiBpcyBhbnlcbml0ZXJhYmxlIG9iamVjdCBhbmQgKngqIGlzIGFuIGFyYml0cmFyeSBvYmplY3QgdGhhdCBtZWV0cyBhbnkgdHlwZSBhbmRcbnZhbHVlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGJ5ICpzKiAoZm9yIGV4YW1wbGUsICJieXRlYXJyYXkiIG9ubHlcbmFjY2VwdHMgaW50ZWdlcnMgdGhhdCBtZWV0IHRoZSB2YWx1ZSByZXN0cmljdGlvbiAiMCA8PSB4IDw9IDI1NSIpLlxuXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgT3BlcmF0aW9uICAgICAgICAgICAgICAgICAgICAgIHwgUmVzdWx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBOb3RlcyAgICAgICAgICAgICAgICAgfFxuKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rPT09PT09PT09PT09PT09PT09PT09PT0rXG58ICJzW2ldID0geCIgICAgICAgICAgICAgICAgICAgICB8IGl0ZW0gKmkqIG9mICpzKiBpcyByZXBsYWNlZCBieSAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKngqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzW2k6al0gPSB0IiAgICAgICAgICAgICAgICAgICB8IHNsaWNlIG9mICpzKiBmcm9tICppKiB0byAqaiogaXMgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhlIGNvbnRlbnRzIG9mIHRoZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpdGVyYWJsZSAqdCogICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgImRlbCBzW2k6al0iICAgICAgICAgICAgICAgICAgIHwgc2FtZSBhcyAic1tpOmpdID0gW10iICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzW2k6ajprXSA9IHQiICAgICAgICAgICAgICAgICB8IHRoZSBlbGVtZW50cyBvZiAic1tpOmo6a10iIGFyZSAgIHwgKDEpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcmVwbGFjZWQgYnkgdGhvc2Ugb2YgKnQqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJkZWwgc1tpOmo6a10iICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgdGhlIGVsZW1lbnRzIG9mICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgInNbaTpqOmtdIiBmcm9tIHRoZSBsaXN0ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmFwcGVuZCh4KSIgICAgICAgICAgICAgICAgICB8IGFwcGVuZHMgKngqIHRvIHRoZSBlbmQgb2YgdGhlICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VxdWVuY2UgKHNhbWUgYXMgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAic1tsZW4ocyk6bGVuKHMpXSA9IFt4XSIpICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY2xlYXIoKSIgICAgICAgICAgICAgICAgICAgIHwgcmVtb3ZlcyBhbGwgaXRlbXMgZnJvbSAicyIgKHNhbWUgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcyAiZGVsIHNbOl0iKSAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuY29weSgpIiAgICAgICAgICAgICAgICAgICAgIHwgY3JlYXRlcyBhIHNoYWxsb3cgY29weSBvZiAicyIgICAgfCAoNSkgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoc2FtZSBhcyAic1s6XSIpICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuZXh0ZW5kKHQpIiBvciAicyArPSB0IiAgICAgIHwgZXh0ZW5kcyAqcyogd2l0aCB0aGUgY29udGVudHMgb2YgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqdCogKGZvciB0aGUgbW9zdCBwYXJ0IHRoZSBzYW1lICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFzICJzW2xlbihzKTpsZW4ocyldID0gdCIpICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicyAqPSBuIiAgICAgICAgICAgICAgICAgICAgICAgfCB1cGRhdGVzICpzKiB3aXRoIGl0cyBjb250ZW50cyAgICB8ICg2KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGVhdGVkICpuKiB0aW1lcyAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5pbnNlcnQoaSwgeCkiICAgICAgICAgICAgICAgfCBpbnNlcnRzICp4KiBpbnRvICpzKiBhdCB0aGUgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4IGdpdmVuIGJ5ICppKiAoc2FtZSBhcyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgInNbaTppXSA9IFt4XSIpICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnBvcChbaV0pIiAgICAgICAgICAgICAgICAgICB8IHJldHJpZXZlcyB0aGUgaXRlbSBhdCAqaSogYW5kICAgIHwgKDIpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYWxzbyByZW1vdmVzIGl0IGZyb20gKnMqICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJlbW92ZSh4KSIgICAgICAgICAgICAgICAgICB8IHJlbW92ZSB0aGUgZmlyc3QgaXRlbSBmcm9tICpzKiAgIHwgKDMpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgd2hlcmUgInNbaV0gPT0geCIgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLnJldmVyc2UoKSIgICAgICAgICAgICAgICAgICB8IHJldmVyc2VzIHRoZSBpdGVtcyBvZiAqcyogaW4gICAgIHwgKDQpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG5cbk5vdGVzOlxuXG4xLiAqdCogbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyB0aGUgc2xpY2UgaXQgaXMgcmVwbGFjaW5nLlxuXG4yLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgKmkqIGRlZmF1bHRzIHRvICItMSIsIHNvIHRoYXQgYnkgZGVmYXVsdFxuICAgdGhlIGxhc3QgaXRlbSBpcyByZW1vdmVkIGFuZCByZXR1cm5lZC5cblxuMy4gInJlbW92ZSIgcmFpc2VzICJWYWx1ZUVycm9yIiB3aGVuICp4KiBpcyBub3QgZm91bmQgaW4gKnMqLlxuXG40LiBUaGUgInJldmVyc2UoKSIgbWV0aG9kIG1vZGlmaWVzIHRoZSBzZXF1ZW5jZSBpbiBwbGFjZSBmb3JcbiAgIGVjb25vbXkgb2Ygc3BhY2Ugd2hlbiByZXZlcnNpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2Vyc1xuICAgdGhhdCBpdCBvcGVyYXRlcyBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSByZXZlcnNlZFxuICAgc2VxdWVuY2UuXG5cbjUuICJjbGVhcigpIiBhbmQgImNvcHkoKSIgYXJlIGluY2x1ZGVkIGZvciBjb25zaXN0ZW5jeSB3aXRoIHRoZVxuICAgaW50ZXJmYWNlcyBvZiBtdXRhYmxlIGNvbnRhaW5lcnMgdGhhdCBkb25cJ3Qgc3VwcG9ydCBzbGljaW5nXG4gICBvcGVyYXRpb25zIChzdWNoIGFzICJkaWN0IiBhbmQgInNldCIpXG5cbiAgIE5ldyBpbiB2ZXJzaW9uIDMuMzogImNsZWFyKCkiIGFuZCAiY29weSgpIiBtZXRob2RzLlxuXG42LiBUaGUgdmFsdWUgKm4qIGlzIGFuIGludGVnZXIsIG9yIGFuIG9iamVjdCBpbXBsZW1lbnRpbmdcbiAgICJfX2luZGV4X18oKSIuICBaZXJvIGFuZCBuZWdhdGl2ZSB2YWx1ZXMgb2YgKm4qIGNsZWFyIHRoZSBzZXF1ZW5jZS5cbiAgIEl0ZW1zIGluIHRoZSBzZXF1ZW5jZSBhcmUgbm90IGNvcGllZDsgdGhleSBhcmUgcmVmZXJlbmNlZCBtdWx0aXBsZVxuICAgdGltZXMsIGFzIGV4cGxhaW5lZCBmb3IgInMgKiBuIiB1bmRlciAqQ29tbW9uIFNlcXVlbmNlIE9wZXJhdGlvbnMqLlxuXG5cbkxpc3RzXG49PT09PVxuXG5MaXN0cyBhcmUgbXV0YWJsZSBzZXF1ZW5jZXMsIHR5cGljYWxseSB1c2VkIHRvIHN0b3JlIGNvbGxlY3Rpb25zIG9mXG5ob21vZ2VuZW91cyBpdGVtcyAod2hlcmUgdGhlIHByZWNpc2UgZGVncmVlIG9mIHNpbWlsYXJpdHkgd2lsbCB2YXJ5IGJ5XG5hcHBsaWNhdGlvbikuXG5cbmNsYXNzIGNsYXNzIGxpc3QoW2l0ZXJhYmxlXSlcblxuICAgTGlzdHMgbWF5IGJlIGNvbnN0cnVjdGVkIGluIHNldmVyYWwgd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2Ygc3F1YXJlIGJyYWNrZXRzIHRvIGRlbm90ZSB0aGUgZW1wdHkgbGlzdDogIltdIlxuXG4gICAqIFVzaW5nIHNxdWFyZSBicmFja2V0cywgc2VwYXJhdGluZyBpdGVtcyB3aXRoIGNvbW1hczogIlthXSIsXG4gICAgICJbYSwgYiwgY10iXG5cbiAgICogVXNpbmcgYSBsaXN0IGNvbXByZWhlbnNpb246ICJbeCBmb3IgeCBpbiBpdGVyYWJsZV0iXG5cbiAgICogVXNpbmcgdGhlIHR5cGUgY29uc3RydWN0b3I6ICJsaXN0KCkiIG9yICJsaXN0KGl0ZXJhYmxlKSJcblxuICAgVGhlIGNvbnN0cnVjdG9yIGJ1aWxkcyBhIGxpc3Qgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSBsaXN0LCBhIGNvcHkgaXMgbWFkZSBhbmRcbiAgIHJldHVybmVkLCBzaW1pbGFyIHRvICJpdGVyYWJsZVs6XSIuIEZvciBleGFtcGxlLCAibGlzdChcJ2FiY1wnKSJcbiAgIHJldHVybnMgIltcJ2FcJywgXCdiXCcsIFwnY1wnXSIgYW5kICJsaXN0KCAoMSwgMiwgMykgKSIgcmV0dXJucyAiWzEsIDIsXG4gICAzXSIuIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgY29uc3RydWN0b3IgY3JlYXRlcyBhIG5ldyBlbXB0eVxuICAgbGlzdCwgIltdIi5cblxuICAgTWFueSBvdGhlciBvcGVyYXRpb25zIGFsc28gcHJvZHVjZSBsaXN0cywgaW5jbHVkaW5nIHRoZSAic29ydGVkKCkiXG4gICBidWlsdC1pbi5cblxuICAgTGlzdHMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogYW5kICptdXRhYmxlKiBzZXF1ZW5jZVxuICAgb3BlcmF0aW9ucy4gTGlzdHMgYWxzbyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBtZXRob2Q6XG5cbiAgIHNvcnQoKiwga2V5PU5vbmUsIHJldmVyc2U9Tm9uZSlcblxuICAgICAgVGhpcyBtZXRob2Qgc29ydHMgdGhlIGxpc3QgaW4gcGxhY2UsIHVzaW5nIG9ubHkgIjwiIGNvbXBhcmlzb25zXG4gICAgICBiZXR3ZWVuIGl0ZW1zLiBFeGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCAtIGlmIGFueSBjb21wYXJpc29uXG4gICAgICBvcGVyYXRpb25zIGZhaWwsIHRoZSBlbnRpcmUgc29ydCBvcGVyYXRpb24gd2lsbCBmYWlsIChhbmQgdGhlXG4gICAgICBsaXN0IHdpbGwgbGlrZWx5IGJlIGxlZnQgaW4gYSBwYXJ0aWFsbHkgbW9kaWZpZWQgc3RhdGUpLlxuXG4gICAgICAic29ydCgpIiBhY2NlcHRzIHR3byBhcmd1bWVudHMgdGhhdCBjYW4gb25seSBiZSBwYXNzZWQgYnlcbiAgICAgIGtleXdvcmQgKCprZXl3b3JkLW9ubHkgYXJndW1lbnRzKik6XG5cbiAgICAgICprZXkqIHNwZWNpZmllcyBhIGZ1bmN0aW9uIG9mIG9uZSBhcmd1bWVudCB0aGF0IGlzIHVzZWQgdG9cbiAgICAgIGV4dHJhY3QgYSBjb21wYXJpc29uIGtleSBmcm9tIGVhY2ggbGlzdCBlbGVtZW50IChmb3IgZXhhbXBsZSxcbiAgICAgICJrZXk9c3RyLmxvd2VyIikuIFRoZSBrZXkgY29ycmVzcG9uZGluZyB0byBlYWNoIGl0ZW0gaW4gdGhlIGxpc3RcbiAgICAgIGlzIGNhbGN1bGF0ZWQgb25jZSBhbmQgdGhlbiB1c2VkIGZvciB0aGUgZW50aXJlIHNvcnRpbmcgcHJvY2Vzcy5cbiAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIG9mICJOb25lIiBtZWFucyB0aGF0IGxpc3QgaXRlbXMgYXJlIHNvcnRlZFxuICAgICAgZGlyZWN0bHkgd2l0aG91dCBjYWxjdWxhdGluZyBhIHNlcGFyYXRlIGtleSB2YWx1ZS5cblxuICAgICAgVGhlICJmdW5jdG9vbHMuY21wX3RvX2tleSgpIiB1dGlsaXR5IGlzIGF2YWlsYWJsZSB0byBjb252ZXJ0IGFcbiAgICAgIDIueCBzdHlsZSAqY21wKiBmdW5jdGlvbiB0byBhICprZXkqIGZ1bmN0aW9uLlxuXG4gICAgICAqcmV2ZXJzZSogaXMgYSBib29sZWFuIHZhbHVlLiAgSWYgc2V0IHRvICJUcnVlIiwgdGhlbiB0aGUgbGlzdFxuICAgICAgZWxlbWVudHMgYXJlIHNvcnRlZCBhcyBpZiBlYWNoIGNvbXBhcmlzb24gd2VyZSByZXZlcnNlZC5cblxuICAgICAgVGhpcyBtZXRob2QgbW9kaWZpZXMgdGhlIHNlcXVlbmNlIGluIHBsYWNlIGZvciBlY29ub215IG9mIHNwYWNlXG4gICAgICB3aGVuIHNvcnRpbmcgYSBsYXJnZSBzZXF1ZW5jZS4gIFRvIHJlbWluZCB1c2VycyB0aGF0IGl0IG9wZXJhdGVzXG4gICAgICBieSBzaWRlIGVmZmVjdCwgaXQgZG9lcyBub3QgcmV0dXJuIHRoZSBzb3J0ZWQgc2VxdWVuY2UgKHVzZVxuICAgICAgInNvcnRlZCgpIiB0byBleHBsaWNpdGx5IHJlcXVlc3QgYSBuZXcgc29ydGVkIGxpc3QgaW5zdGFuY2UpLlxuXG4gICAgICBUaGUgInNvcnQoKSIgbWV0aG9kIGlzIGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLiAgQSBzb3J0IGlzXG4gICAgICBzdGFibGUgaWYgaXQgZ3VhcmFudGVlcyBub3QgdG8gY2hhbmdlIHRoZSByZWxhdGl2ZSBvcmRlciBvZlxuICAgICAgZWxlbWVudHMgdGhhdCBjb21wYXJlIGVxdWFsIC0tLSB0aGlzIGlzIGhlbHBmdWwgZm9yIHNvcnRpbmcgaW5cbiAgICAgIG11bHRpcGxlIHBhc3NlcyAoZm9yIGV4YW1wbGUsIHNvcnQgYnkgZGVwYXJ0bWVudCwgdGhlbiBieSBzYWxhcnlcbiAgICAgIGdyYWRlKS5cblxuICAgICAgKipDUHl0aG9uIGltcGxlbWVudGF0aW9uIGRldGFpbDoqKiBXaGlsZSBhIGxpc3QgaXMgYmVpbmcgc29ydGVkLFxuICAgICAgdGhlIGVmZmVjdCBvZiBhdHRlbXB0aW5nIHRvIG11dGF0ZSwgb3IgZXZlbiBpbnNwZWN0LCB0aGUgbGlzdCBpc1xuICAgICAgdW5kZWZpbmVkLiAgVGhlIEMgaW1wbGVtZW50YXRpb24gb2YgUHl0aG9uIG1ha2VzIHRoZSBsaXN0IGFwcGVhclxuICAgICAgZW1wdHkgZm9yIHRoZSBkdXJhdGlvbiwgYW5kIHJhaXNlcyAiVmFsdWVFcnJvciIgaWYgaXQgY2FuIGRldGVjdFxuICAgICAgdGhhdCB0aGUgbGlzdCBoYXMgYmVlbiBtdXRhdGVkIGR1cmluZyBhIHNvcnQuXG5cblxuVHVwbGVzXG49PT09PT1cblxuVHVwbGVzIGFyZSBpbW11dGFibGUgc2VxdWVuY2VzLCB0eXBpY2FsbHkgdXNlZCB0byBzdG9yZSBjb2xsZWN0aW9ucyBvZlxuaGV0ZXJvZ2VuZW91cyBkYXRhIChzdWNoIGFzIHRoZSAyLXR1cGxlcyBwcm9kdWNlZCBieSB0aGUgImVudW1lcmF0ZSgpIlxuYnVpbHQtaW4pLiBUdXBsZXMgYXJlIGFsc28gdXNlZCBmb3IgY2FzZXMgd2hlcmUgYW4gaW1tdXRhYmxlIHNlcXVlbmNlXG5vZiBob21vZ2VuZW91cyBkYXRhIGlzIG5lZWRlZCAoc3VjaCBhcyBhbGxvd2luZyBzdG9yYWdlIGluIGEgInNldCIgb3JcbiJkaWN0IiBpbnN0YW5jZSkuXG5cbmNsYXNzIGNsYXNzIHR1cGxlKFtpdGVyYWJsZV0pXG5cbiAgIFR1cGxlcyBtYXkgYmUgY29uc3RydWN0ZWQgaW4gYSBudW1iZXIgb2Ygd2F5czpcblxuICAgKiBVc2luZyBhIHBhaXIgb2YgcGFyZW50aGVzZXMgdG8gZGVub3RlIHRoZSBlbXB0eSB0dXBsZTogIigpIlxuXG4gICAqIFVzaW5nIGEgdHJhaWxpbmcgY29tbWEgZm9yIGEgc2luZ2xldG9uIHR1cGxlOiAiYSwiIG9yICIoYSwpIlxuXG4gICAqIFNlcGFyYXRpbmcgaXRlbXMgd2l0aCBjb21tYXM6ICJhLCBiLCBjIiBvciAiKGEsIGIsIGMpIlxuXG4gICAqIFVzaW5nIHRoZSAidHVwbGUoKSIgYnVpbHQtaW46ICJ0dXBsZSgpIiBvciAidHVwbGUoaXRlcmFibGUpIlxuXG4gICBUaGUgY29uc3RydWN0b3IgYnVpbGRzIGEgdHVwbGUgd2hvc2UgaXRlbXMgYXJlIHRoZSBzYW1lIGFuZCBpbiB0aGVcbiAgIHNhbWUgb3JkZXIgYXMgKml0ZXJhYmxlKlwncyBpdGVtcy4gICppdGVyYWJsZSogbWF5IGJlIGVpdGhlciBhXG4gICBzZXF1ZW5jZSwgYSBjb250YWluZXIgdGhhdCBzdXBwb3J0cyBpdGVyYXRpb24sIG9yIGFuIGl0ZXJhdG9yXG4gICBvYmplY3QuICBJZiAqaXRlcmFibGUqIGlzIGFscmVhZHkgYSB0dXBsZSwgaXQgaXMgcmV0dXJuZWRcbiAgIHVuY2hhbmdlZC4gRm9yIGV4YW1wbGUsICJ0dXBsZShcJ2FiY1wnKSIgcmV0dXJucyAiKFwnYVwnLCBcJ2JcJywgXCdjXCcpIlxuICAgYW5kICJ0dXBsZSggWzEsIDIsIDNdICkiIHJldHVybnMgIigxLCAyLCAzKSIuIElmIG5vIGFyZ3VtZW50IGlzXG4gICBnaXZlbiwgdGhlIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBuZXcgZW1wdHkgdHVwbGUsICIoKSIuXG5cbiAgIE5vdGUgdGhhdCBpdCBpcyBhY3R1YWxseSB0aGUgY29tbWEgd2hpY2ggbWFrZXMgYSB0dXBsZSwgbm90IHRoZVxuICAgcGFyZW50aGVzZXMuIFRoZSBwYXJlbnRoZXNlcyBhcmUgb3B0aW9uYWwsIGV4Y2VwdCBpbiB0aGUgZW1wdHlcbiAgIHR1cGxlIGNhc2UsIG9yIHdoZW4gdGhleSBhcmUgbmVlZGVkIHRvIGF2b2lkIHN5bnRhY3RpYyBhbWJpZ3VpdHkuXG4gICBGb3IgZXhhbXBsZSwgImYoYSwgYiwgYykiIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIHRocmVlIGFyZ3VtZW50cyxcbiAgIHdoaWxlICJmKChhLCBiLCBjKSkiIGlzIGEgZnVuY3Rpb24gY2FsbCB3aXRoIGEgMy10dXBsZSBhcyB0aGUgc29sZVxuICAgYXJndW1lbnQuXG5cbiAgIFR1cGxlcyBpbXBsZW1lbnQgYWxsIG9mIHRoZSAqY29tbW9uKiBzZXF1ZW5jZSBvcGVyYXRpb25zLlxuXG5Gb3IgaGV0ZXJvZ2VuZW91cyBjb2xsZWN0aW9ucyBvZiBkYXRhIHdoZXJlIGFjY2VzcyBieSBuYW1lIGlzIGNsZWFyZXJcbnRoYW4gYWNjZXNzIGJ5IGluZGV4LCAiY29sbGVjdGlvbnMubmFtZWR0dXBsZSgpIiBtYXkgYmUgYSBtb3JlXG5hcHByb3ByaWF0ZSBjaG9pY2UgdGhhbiBhIHNpbXBsZSB0dXBsZSBvYmplY3QuXG5cblxuUmFuZ2VzXG49PT09PT1cblxuVGhlICJyYW5nZSIgdHlwZSByZXByZXNlbnRzIGFuIGltbXV0YWJsZSBzZXF1ZW5jZSBvZiBudW1iZXJzIGFuZCBpc1xuY29tbW9ubHkgdXNlZCBmb3IgbG9vcGluZyBhIHNwZWNpZmljIG51bWJlciBvZiB0aW1lcyBpbiAiZm9yIiBsb29wcy5cblxuY2xhc3MgY2xhc3MgcmFuZ2Uoc3RvcClcbmNsYXNzIGNsYXNzIHJhbmdlKHN0YXJ0LCBzdG9wWywgc3RlcF0pXG5cbiAgIFRoZSBhcmd1bWVudHMgdG8gdGhlIHJhbmdlIGNvbnN0cnVjdG9yIG11c3QgYmUgaW50ZWdlcnMgKGVpdGhlclxuICAgYnVpbHQtaW4gImludCIgb3IgYW55IG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlICJfX2luZGV4X18iXG4gICBzcGVjaWFsIG1ldGhvZCkuICBJZiB0aGUgKnN0ZXAqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvXG4gICAiMSIuIElmIHRoZSAqc3RhcnQqIGFyZ3VtZW50IGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICIwIi4gSWZcbiAgICpzdGVwKiBpcyB6ZXJvLCAiVmFsdWVFcnJvciIgaXMgcmFpc2VkLlxuXG4gICBGb3IgYSBwb3NpdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiBhIHJhbmdlICJyIiBhcmUgZGV0ZXJtaW5lZFxuICAgYnkgdGhlIGZvcm11bGEgInJbaV0gPSBzdGFydCArIHN0ZXAqaSIgd2hlcmUgImkgPj0gMCIgYW5kICJyW2ldIDxcbiAgIHN0b3AiLlxuXG4gICBGb3IgYSBuZWdhdGl2ZSAqc3RlcCosIHRoZSBjb250ZW50cyBvZiB0aGUgcmFuZ2UgYXJlIHN0aWxsXG4gICBkZXRlcm1pbmVkIGJ5IHRoZSBmb3JtdWxhICJyW2ldID0gc3RhcnQgKyBzdGVwKmkiLCBidXQgdGhlXG4gICBjb25zdHJhaW50cyBhcmUgImkgPj0gMCIgYW5kICJyW2ldID4gc3RvcCIuXG5cbiAgIEEgcmFuZ2Ugb2JqZWN0IHdpbGwgYmUgZW1wdHkgaWYgInJbMF0iIGRvZXMgbm90IG1lZXQgdGhlIHZhbHVlXG4gICBjb25zdHJhaW50LiBSYW5nZXMgZG8gc3VwcG9ydCBuZWdhdGl2ZSBpbmRpY2VzLCBidXQgdGhlc2UgYXJlXG4gICBpbnRlcnByZXRlZCBhcyBpbmRleGluZyBmcm9tIHRoZSBlbmQgb2YgdGhlIHNlcXVlbmNlIGRldGVybWluZWQgYnlcbiAgIHRoZSBwb3NpdGl2ZSBpbmRpY2VzLlxuXG4gICBSYW5nZXMgY29udGFpbmluZyBhYnNvbHV0ZSB2YWx1ZXMgbGFyZ2VyIHRoYW4gInN5cy5tYXhzaXplIiBhcmVcbiAgIHBlcm1pdHRlZCBidXQgc29tZSBmZWF0dXJlcyAoc3VjaCBhcyAibGVuKCkiKSBtYXkgcmFpc2VcbiAgICJPdmVyZmxvd0Vycm9yIi5cblxuICAgUmFuZ2UgZXhhbXBsZXM6XG5cbiAgICAgID4+PiBsaXN0KHJhbmdlKDEwKSlcbiAgICAgIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMTEpKVxuICAgICAgWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMzAsIDUpKVxuICAgICAgWzAsIDUsIDEwLCAxNSwgMjAsIDI1XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCwgMTAsIDMpKVxuICAgICAgWzAsIDMsIDYsIDldXG4gICAgICA+Pj4gbGlzdChyYW5nZSgwLCAtMTAsIC0xKSlcbiAgICAgIFswLCAtMSwgLTIsIC0zLCAtNCwgLTUsIC02LCAtNywgLTgsIC05XVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMCkpXG4gICAgICBbXVxuICAgICAgPj4+IGxpc3QocmFuZ2UoMSwgMCkpXG4gICAgICBbXVxuXG4gICBSYW5nZXMgaW1wbGVtZW50IGFsbCBvZiB0aGUgKmNvbW1vbiogc2VxdWVuY2Ugb3BlcmF0aW9ucyBleGNlcHRcbiAgIGNvbmNhdGVuYXRpb24gYW5kIHJlcGV0aXRpb24gKGR1ZSB0byB0aGUgZmFjdCB0aGF0IHJhbmdlIG9iamVjdHNcbiAgIGNhbiBvbmx5IHJlcHJlc2VudCBzZXF1ZW5jZXMgdGhhdCBmb2xsb3cgYSBzdHJpY3QgcGF0dGVybiBhbmRcbiAgIHJlcGV0aXRpb24gYW5kIGNvbmNhdGVuYXRpb24gd2lsbCB1c3VhbGx5IHZpb2xhdGUgdGhhdCBwYXR0ZXJuKS5cblxuVGhlIGFkdmFudGFnZSBvZiB0aGUgInJhbmdlIiB0eXBlIG92ZXIgYSByZWd1bGFyICJsaXN0IiBvciAidHVwbGUiIGlzXG50aGF0IGEgInJhbmdlIiBvYmplY3Qgd2lsbCBhbHdheXMgdGFrZSB0aGUgc2FtZSAoc21hbGwpIGFtb3VudCBvZlxubWVtb3J5LCBubyBtYXR0ZXIgdGhlIHNpemUgb2YgdGhlIHJhbmdlIGl0IHJlcHJlc2VudHMgKGFzIGl0IG9ubHlcbnN0b3JlcyB0aGUgInN0YXJ0IiwgInN0b3AiIGFuZCAic3RlcCIgdmFsdWVzLCBjYWxjdWxhdGluZyBpbmRpdmlkdWFsXG5pdGVtcyBhbmQgc3VicmFuZ2VzIGFzIG5lZWRlZCkuXG5cblJhbmdlIG9iamVjdHMgaW1wbGVtZW50IHRoZSAiY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlIiBBQkMsIGFuZFxucHJvdmlkZSBmZWF0dXJlcyBzdWNoIGFzIGNvbnRhaW5tZW50IHRlc3RzLCBlbGVtZW50IGluZGV4IGxvb2t1cCxcbnNsaWNpbmcgYW5kIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIGluZGljZXMgKHNlZSAqU2VxdWVuY2UgVHlwZXMgLS0tXG5saXN0LCB0dXBsZSwgcmFuZ2UqKTpcblxuPj4+IHIgPSByYW5nZSgwLCAyMCwgMilcbj4+PiByXG5yYW5nZSgwLCAyMCwgMilcbj4+PiAxMSBpbiByXG5GYWxzZVxuPj4+IDEwIGluIHJcblRydWVcbj4+PiByLmluZGV4KDEwKVxuNVxuPj4+IHJbNV1cbjEwXG4+Pj4gcls6NV1cbnJhbmdlKDAsIDEwLCAyKVxuPj4+IHJbLTFdXG4xOFxuXG5UZXN0aW5nIHJhbmdlIG9iamVjdHMgZm9yIGVxdWFsaXR5IHdpdGggIj09IiBhbmQgIiE9IiBjb21wYXJlcyB0aGVtIGFzXG5zZXF1ZW5jZXMuICBUaGF0IGlzLCB0d28gcmFuZ2Ugb2JqZWN0cyBhcmUgY29uc2lkZXJlZCBlcXVhbCBpZiB0aGV5XG5yZXByZXNlbnQgdGhlIHNhbWUgc2VxdWVuY2Ugb2YgdmFsdWVzLiAgKE5vdGUgdGhhdCB0d28gcmFuZ2Ugb2JqZWN0c1xudGhhdCBjb21wYXJlIGVxdWFsIG1pZ2h0IGhhdmUgZGlmZmVyZW50ICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiXG5hdHRyaWJ1dGVzLCBmb3IgZXhhbXBsZSAicmFuZ2UoMCkgPT0gcmFuZ2UoMiwgMSwgMykiIG9yICJyYW5nZSgwLCAzLFxuMikgPT0gcmFuZ2UoMCwgNCwgMikiLilcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMjogSW1wbGVtZW50IHRoZSBTZXF1ZW5jZSBBQkMuIFN1cHBvcnQgc2xpY2luZ1xuYW5kIG5lZ2F0aXZlIGluZGljZXMuIFRlc3QgImludCIgb2JqZWN0cyBmb3IgbWVtYmVyc2hpcCBpbiBjb25zdGFudFxudGltZSBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBpdGVtcy5cblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMzogRGVmaW5lIFwnPT1cJyBhbmQgXCchPVwnIHRvIGNvbXBhcmUgcmFuZ2Ugb2JqZWN0c1xuYmFzZWQgb24gdGhlIHNlcXVlbmNlIG9mIHZhbHVlcyB0aGV5IGRlZmluZSAoaW5zdGVhZCBvZiBjb21wYXJpbmdcbmJhc2VkIG9uIG9iamVjdCBpZGVudGl0eSkuXG5cbk5ldyBpbiB2ZXJzaW9uIDMuMzogVGhlICJzdGFydCIsICJzdG9wIiBhbmQgInN0ZXAiIGF0dHJpYnV0ZXMuXG4nLAorICd0eXBlc3NlcS1tdXRhYmxlJzogdSdcbk11dGFibGUgU2VxdWVuY2UgVHlwZXNcbioqKioqKioqKioqKioqKioqKioqKipcblxuVGhlIG9wZXJhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB0YWJsZSBhcmUgZGVmaW5lZCBvbiBtdXRhYmxlIHNlcXVlbmNlXG50eXBlcy4gVGhlICJjb2xsZWN0aW9ucy5hYmMuTXV0YWJsZVNlcXVlbmNlIiBBQkMgaXMgcHJvdmlkZWQgdG8gbWFrZVxuaXQgZWFzaWVyIHRvIGNvcnJlY3RseSBpbXBsZW1lbnQgdGhlc2Ugb3BlcmF0aW9ucyBvbiBjdXN0b20gc2VxdWVuY2VcbnR5cGVzLlxuXG5JbiB0aGUgdGFibGUgKnMqIGlzIGFuIGluc3RhbmNlIG9mIGEgbXV0YWJsZSBzZXF1ZW5jZSB0eXBlLCAqdCogaXMgYW55XG5pdGVyYWJsZSBvYmplY3QgYW5kICp4KiBpcyBhbiBhcmJpdHJhcnkgb2JqZWN0IHRoYXQgbWVldHMgYW55IHR5cGUgYW5kXG52YWx1ZSByZXN0cmljdGlvbnMgaW1wb3NlZCBieSAqcyogKGZvciBleGFtcGxlLCAiYnl0ZWFycmF5IiBvbmx5XG5hY2NlcHRzIGludGVnZXJzIHRoYXQgbWVldCB0aGUgdmFsdWUgcmVzdHJpY3Rpb24gIjAgPD0geCA8PSAyNTUiKS5cblxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICB8IFJlc3VsdCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm90ZXMgICAgICAgICAgICAgICAgIHxcbis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09K1xufCAic1tpXSA9IHgiICAgICAgICAgICAgICAgICAgICAgfCBpdGVtICppKiBvZiAqcyogaXMgcmVwbGFjZWQgYnkgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICp4KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAic1tpOmpdID0gdCIgICAgICAgICAgICAgICAgICAgfCBzbGljZSBvZiAqcyogZnJvbSAqaSogdG8gKmoqIGlzICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRoZSBjb250ZW50cyBvZiB0aGUgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaXRlcmFibGUgKnQqICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJkZWwgc1tpOmpdIiAgICAgICAgICAgICAgICAgICB8IHNhbWUgYXMgInNbaTpqXSA9IFtdIiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAic1tpOmo6a10gPSB0IiAgICAgICAgICAgICAgICAgfCB0aGUgZWxlbWVudHMgb2YgInNbaTpqOmtdIiBhcmUgICB8ICgxKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHJlcGxhY2VkIGJ5IHRob3NlIG9mICp0KiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAiZGVsIHNbaTpqOmtdIiAgICAgICAgICAgICAgICAgfCByZW1vdmVzIHRoZSBlbGVtZW50cyBvZiAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICJzW2k6ajprXSIgZnJvbSB0aGUgbGlzdCAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5hcHBlbmQoeCkiICAgICAgICAgICAgICAgICAgfCBhcHBlbmRzICp4KiB0byB0aGUgZW5kIG9mIHRoZSAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcXVlbmNlIChzYW1lIGFzICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgInNbbGVuKHMpOmxlbihzKV0gPSBbeF0iKSAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNsZWFyKCkiICAgICAgICAgICAgICAgICAgICB8IHJlbW92ZXMgYWxsIGl0ZW1zIGZyb20gInMiIChzYW1lIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgYXMgImRlbCBzWzpdIikgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmNvcHkoKSIgICAgICAgICAgICAgICAgICAgICB8IGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkgb2YgInMiICAgIHwgKDUpICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKHNhbWUgYXMgInNbOl0iKSAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxuKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rXG58ICJzLmV4dGVuZCh0KSIgb3IgInMgKz0gdCIgICAgICB8IGV4dGVuZHMgKnMqIHdpdGggdGhlIGNvbnRlbnRzIG9mIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKnQqIChmb3IgdGhlIG1vc3QgcGFydCB0aGUgc2FtZSAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBhcyAic1tsZW4ocyk6bGVuKHMpXSA9IHQiKSAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMgKj0gbiIgICAgICAgICAgICAgICAgICAgICAgIHwgdXBkYXRlcyAqcyogd2l0aCBpdHMgY29udGVudHMgICAgfCAoNikgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCByZXBlYXRlZCAqbiogdGltZXMgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLStcbnwgInMuaW5zZXJ0KGksIHgpIiAgICAgICAgICAgICAgIHwgaW5zZXJ0cyAqeCogaW50byAqcyogYXQgdGhlICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgfFxufCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleCBnaXZlbiBieSAqaSogKHNhbWUgYXMgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICJzW2k6aV0gPSBbeF0iKSAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5wb3AoW2ldKSIgICAgICAgICAgICAgICAgICAgfCByZXRyaWV2ZXMgdGhlIGl0ZW0gYXQgKmkqIGFuZCAgICB8ICgyKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGFsc28gcmVtb3ZlcyBpdCBmcm9tICpzKiAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZW1vdmUoeCkiICAgICAgICAgICAgICAgICAgfCByZW1vdmUgdGhlIGZpcnN0IGl0ZW0gZnJvbSAqcyogICB8ICgzKSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHdoZXJlICJzW2ldID09IHgiICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xufCAicy5yZXZlcnNlKCkiICAgICAgICAgICAgICAgICAgfCByZXZlcnNlcyB0aGUgaXRlbXMgb2YgKnMqIGluICAgICB8ICg0KSAgICAgICAgICAgICAgICAgICB8XG58ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHxcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tK1xuXG5Ob3RlczpcblxuMS4gKnQqIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgdGhlIHNsaWNlIGl0IGlzIHJlcGxhY2luZy5cblxuMi4gVGhlIG9wdGlvbmFsIGFyZ3VtZW50ICppKiBkZWZhdWx0cyB0byAiLTEiLCBzbyB0aGF0IGJ5IGRlZmF1bHRcbiAgIHRoZSBsYXN0IGl0ZW0gaXMgcmVtb3ZlZCBhbmQgcmV0dXJuZWQuXG5cbjMuICJyZW1vdmUiIHJhaXNlcyAiVmFsdWVFcnJvciIgd2hlbiAqeCogaXMgbm90IGZvdW5kIGluICpzKi5cblxuNC4gVGhlICJyZXZlcnNlKCkiIG1ldGhvZCBtb2RpZmllcyB0aGUgc2VxdWVuY2UgaW4gcGxhY2UgZm9yXG4gICBlY29ub215IG9mIHNwYWNlIHdoZW4gcmV2ZXJzaW5nIGEgbGFyZ2Ugc2VxdWVuY2UuICBUbyByZW1pbmQgdXNlcnNcbiAgIHRoYXQgaXQgb3BlcmF0ZXMgYnkgc2lkZSBlZmZlY3QsIGl0IGRvZXMgbm90IHJldHVybiB0aGUgcmV2ZXJzZWRcbiAgIHNlcXVlbmNlLlxuXG41LiAiY2xlYXIoKSIgYW5kICJjb3B5KCkiIGFyZSBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGVcbiAgIGludGVyZmFjZXMgb2YgbXV0YWJsZSBjb250YWluZXJzIHRoYXQgZG9uXCd0IHN1cHBvcnQgc2xpY2luZ1xuICAgb3BlcmF0aW9ucyAoc3VjaCBhcyAiZGljdCIgYW5kICJzZXQiKVxuXG4gICBOZXcgaW4gdmVyc2lvbiAzLjM6ICJjbGVhcigpIiBhbmQgImNvcHkoKSIgbWV0aG9kcy5cblxuNi4gVGhlIHZhbHVlICpuKiBpcyBhbiBpbnRlZ2VyLCBvciBhbiBvYmplY3QgaW1wbGVtZW50aW5nXG4gICAiX19pbmRleF9fKCkiLiAgWmVybyBhbmQgbmVnYXRpdmUgdmFsdWVzIG9mICpuKiBjbGVhciB0aGUgc2VxdWVuY2UuXG4gICBJdGVtcyBpbiB0aGUgc2VxdWVuY2UgYXJlIG5vdCBjb3BpZWQ7IHRoZXkgYXJlIHJlZmVyZW5jZWQgbXVsdGlwbGVcbiAgIHRpbWVzLCBhcyBleHBsYWluZWQgZm9yICJzICogbiIgdW5kZXIgKkNvbW1vbiBTZXF1ZW5jZSBPcGVyYXRpb25zKi5cbicsCisgJ3VuYXJ5JzogdSdcblVuYXJ5IGFyaXRobWV0aWMgYW5kIGJpdHdpc2Ugb3BlcmF0aW9uc1xuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbkFsbCB1bmFyeSBhcml0aG1ldGljIGFuZCBiaXR3aXNlIG9wZXJhdGlvbnMgaGF2ZSB0aGUgc2FtZSBwcmlvcml0eTpcblxuICAgdV9leHByIDo6PSBwb3dlciB8ICItIiB1X2V4cHIgfCAiKyIgdV9leHByIHwgIn4iIHVfZXhwclxuXG5UaGUgdW5hcnkgIi0iIChtaW51cykgb3BlcmF0b3IgeWllbGRzIHRoZSBuZWdhdGlvbiBvZiBpdHMgbnVtZXJpY1xuYXJndW1lbnQuXG5cblRoZSB1bmFyeSAiKyIgKHBsdXMpIG9wZXJhdG9yIHlpZWxkcyBpdHMgbnVtZXJpYyBhcmd1bWVudCB1bmNoYW5nZWQuXG5cblRoZSB1bmFyeSAifiIgKGludmVydCkgb3BlcmF0b3IgeWllbGRzIHRoZSBiaXR3aXNlIGludmVyc2lvbiBvZiBpdHNcbmludGVnZXIgYXJndW1lbnQuICBUaGUgYml0d2lzZSBpbnZlcnNpb24gb2YgIngiIGlzIGRlZmluZWQgYXNcbiItKHgrMSkiLiAgSXQgb25seSBhcHBsaWVzIHRvIGludGVncmFsIG51bWJlcnMuXG5cbkluIGFsbCB0aHJlZSBjYXNlcywgaWYgdGhlIGFyZ3VtZW50IGRvZXMgbm90IGhhdmUgdGhlIHByb3BlciB0eXBlLCBhXG4iVHlwZUVycm9yIiBleGNlcHRpb24gaXMgcmFpc2VkLlxuJywKKyAnd2hpbGUnOiB1J1xuVGhlICJ3aGlsZSIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuVGhlICJ3aGlsZSIgc3RhdGVtZW50IGlzIHVzZWQgZm9yIHJlcGVhdGVkIGV4ZWN1dGlvbiBhcyBsb25nIGFzIGFuXG5leHByZXNzaW9uIGlzIHRydWU6XG5cbiAgIHdoaWxlX3N0bXQgOjo9ICJ3aGlsZSIgZXhwcmVzc2lvbiAiOiIgc3VpdGVcbiAgICAgICAgICAgICAgICAgIFsiZWxzZSIgIjoiIHN1aXRlXVxuXG5UaGlzIHJlcGVhdGVkbHkgdGVzdHMgdGhlIGV4cHJlc3Npb24gYW5kLCBpZiBpdCBpcyB0cnVlLCBleGVjdXRlcyB0aGVcbmZpcnN0IHN1aXRlOyBpZiB0aGUgZXhwcmVzc2lvbiBpcyBmYWxzZSAod2hpY2ggbWF5IGJlIHRoZSBmaXJzdCB0aW1lXG5pdCBpcyB0ZXN0ZWQpIHRoZSBzdWl0ZSBvZiB0aGUgImVsc2UiIGNsYXVzZSwgaWYgcHJlc2VudCwgaXMgZXhlY3V0ZWRcbmFuZCB0aGUgbG9vcCB0ZXJtaW5hdGVzLlxuXG5BICJicmVhayIgc3RhdGVtZW50IGV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSB0ZXJtaW5hdGVzIHRoZSBsb29wXG53aXRob3V0IGV4ZWN1dGluZyB0aGUgImVsc2UiIGNsYXVzZVwncyBzdWl0ZS4gIEEgImNvbnRpbnVlIiBzdGF0ZW1lbnRcbmV4ZWN1dGVkIGluIHRoZSBmaXJzdCBzdWl0ZSBza2lwcyB0aGUgcmVzdCBvZiB0aGUgc3VpdGUgYW5kIGdvZXMgYmFja1xudG8gdGVzdGluZyB0aGUgZXhwcmVzc2lvbi5cbicsCisgJ3dpdGgnOiB1J1xuVGhlICJ3aXRoIiBzdGF0ZW1lbnRcbioqKioqKioqKioqKioqKioqKioqXG5cblRoZSAid2l0aCIgc3RhdGVtZW50IGlzIHVzZWQgdG8gd3JhcCB0aGUgZXhlY3V0aW9uIG9mIGEgYmxvY2sgd2l0aFxubWV0aG9kcyBkZWZpbmVkIGJ5IGEgY29udGV4dCBtYW5hZ2VyIChzZWUgc2VjdGlvbiAqV2l0aCBTdGF0ZW1lbnRcbkNvbnRleHQgTWFuYWdlcnMqKS4gVGhpcyBhbGxvd3MgY29tbW9uICJ0cnkiLi4uImV4Y2VwdCIuLi4iZmluYWxseSJcbnVzYWdlIHBhdHRlcm5zIHRvIGJlIGVuY2Fwc3VsYXRlZCBmb3IgY29udmVuaWVudCByZXVzZS5cblxuICAgd2l0aF9zdG10IDo6PSAid2l0aCIgd2l0aF9pdGVtICgiLCIgd2l0aF9pdGVtKSogIjoiIHN1aXRlXG4gICB3aXRoX2l0ZW0gOjo9IGV4cHJlc3Npb24gWyJhcyIgdGFyZ2V0XVxuXG5UaGUgZXhlY3V0aW9uIG9mIHRoZSAid2l0aCIgc3RhdGVtZW50IHdpdGggb25lICJpdGVtIiBwcm9jZWVkcyBhc1xuZm9sbG93czpcblxuMS4gVGhlIGNvbnRleHQgZXhwcmVzc2lvbiAodGhlIGV4cHJlc3Npb24gZ2l2ZW4gaW4gdGhlICJ3aXRoX2l0ZW0iKVxuICAgaXMgZXZhbHVhdGVkIHRvIG9idGFpbiBhIGNvbnRleHQgbWFuYWdlci5cblxuMi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgaXMgbG9hZGVkIGZvciBsYXRlciB1c2UuXG5cbjMuIFRoZSBjb250ZXh0IG1hbmFnZXJcJ3MgIl9fZW50ZXJfXygpIiBtZXRob2QgaXMgaW52b2tlZC5cblxuNC4gSWYgYSB0YXJnZXQgd2FzIGluY2x1ZGVkIGluIHRoZSAid2l0aCIgc3RhdGVtZW50LCB0aGUgcmV0dXJuXG4gICB2YWx1ZSBmcm9tICJfX2VudGVyX18oKSIgaXMgYXNzaWduZWQgdG8gaXQuXG5cbiAgIE5vdGU6IFRoZSAid2l0aCIgc3RhdGVtZW50IGd1YXJhbnRlZXMgdGhhdCBpZiB0aGUgIl9fZW50ZXJfXygpIlxuICAgICBtZXRob2QgcmV0dXJucyB3aXRob3V0IGFuIGVycm9yLCB0aGVuICJfX2V4aXRfXygpIiB3aWxsIGFsd2F5cyBiZVxuICAgICBjYWxsZWQuIFRodXMsIGlmIGFuIGVycm9yIG9jY3VycyBkdXJpbmcgdGhlIGFzc2lnbm1lbnQgdG8gdGhlXG4gICAgIHRhcmdldCBsaXN0LCBpdCB3aWxsIGJlIHRyZWF0ZWQgdGhlIHNhbWUgYXMgYW4gZXJyb3Igb2NjdXJyaW5nXG4gICAgIHdpdGhpbiB0aGUgc3VpdGUgd291bGQgYmUuIFNlZSBzdGVwIDYgYmVsb3cuXG5cbjUuIFRoZSBzdWl0ZSBpcyBleGVjdXRlZC5cblxuNi4gVGhlIGNvbnRleHQgbWFuYWdlclwncyAiX19leGl0X18oKSIgbWV0aG9kIGlzIGludm9rZWQuICBJZiBhblxuICAgZXhjZXB0aW9uIGNhdXNlZCB0aGUgc3VpdGUgdG8gYmUgZXhpdGVkLCBpdHMgdHlwZSwgdmFsdWUsIGFuZFxuICAgdHJhY2ViYWNrIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzIHRvICJfX2V4aXRfXygpIi4gT3RoZXJ3aXNlLCB0aHJlZVxuICAgIk5vbmUiIGFyZ3VtZW50cyBhcmUgc3VwcGxpZWQuXG5cbiAgIElmIHRoZSBzdWl0ZSB3YXMgZXhpdGVkIGR1ZSB0byBhbiBleGNlcHRpb24sIGFuZCB0aGUgcmV0dXJuIHZhbHVlXG4gICBmcm9tIHRoZSAiX19leGl0X18oKSIgbWV0aG9kIHdhcyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyByZXJhaXNlZC5cbiAgIElmIHRoZSByZXR1cm4gdmFsdWUgd2FzIHRydWUsIHRoZSBleGNlcHRpb24gaXMgc3VwcHJlc3NlZCwgYW5kXG4gICBleGVjdXRpb24gY29udGludWVzIHdpdGggdGhlIHN0YXRlbWVudCBmb2xsb3dpbmcgdGhlICJ3aXRoIlxuICAgc3RhdGVtZW50LlxuXG4gICBJZiB0aGUgc3VpdGUgd2FzIGV4aXRlZCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIGFuIGV4Y2VwdGlvbiwgdGhlXG4gICByZXR1cm4gdmFsdWUgZnJvbSAiX19leGl0X18oKSIgaXMgaWdub3JlZCwgYW5kIGV4ZWN1dGlvbiBwcm9jZWVkc1xuICAgYXQgdGhlIG5vcm1hbCBsb2NhdGlvbiBmb3IgdGhlIGtpbmQgb2YgZXhpdCB0aGF0IHdhcyB0YWtlbi5cblxuV2l0aCBtb3JlIHRoYW4gb25lIGl0ZW0sIHRoZSBjb250ZXh0IG1hbmFnZXJzIGFyZSBwcm9jZXNzZWQgYXMgaWZcbm11bHRpcGxlICJ3aXRoIiBzdGF0ZW1lbnRzIHdlcmUgbmVzdGVkOlxuXG4gICB3aXRoIEEoKSBhcyBhLCBCKCkgYXMgYjpcbiAgICAgICBzdWl0ZVxuXG5pcyBlcXVpdmFsZW50IHRvXG5cbiAgIHdpdGggQSgpIGFzIGE6XG4gICAgICAgd2l0aCBCKCkgYXMgYjpcbiAgICAgICAgICAgc3VpdGVcblxuQ2hhbmdlZCBpbiB2ZXJzaW9uIDMuMTogU3VwcG9ydCBmb3IgbXVsdGlwbGUgY29udGV4dCBleHByZXNzaW9ucy5cblxuU2VlIGFsc286ICoqUEVQIDAzNDMqKiAtIFRoZSAid2l0aCIgc3RhdGVtZW50XG5cbiAgICAgVGhlIHNwZWNpZmljYXRpb24sIGJhY2tncm91bmQsIGFuZCBleGFtcGxlcyBmb3IgdGhlIFB5dGhvbiAid2l0aCJcbiAgICAgc3RhdGVtZW50LlxuJywKKyAneWllbGQnOiB1J1xuVGhlICJ5aWVsZCIgc3RhdGVtZW50XG4qKioqKioqKioqKioqKioqKioqKipcblxuICAgeWllbGRfc3RtdCA6Oj0geWllbGRfZXhwcmVzc2lvblxuXG5BICJ5aWVsZCIgc3RhdGVtZW50IGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvIGEgKnlpZWxkXG5leHByZXNzaW9uKi4gVGhlIHlpZWxkIHN0YXRlbWVudCBjYW4gYmUgdXNlZCB0byBvbWl0IHRoZSBwYXJlbnRoZXNlc1xudGhhdCB3b3VsZCBvdGhlcndpc2UgYmUgcmVxdWlyZWQgaW4gdGhlIGVxdWl2YWxlbnQgeWllbGQgZXhwcmVzc2lvblxuc3RhdGVtZW50LiBGb3IgZXhhbXBsZSwgdGhlIHlpZWxkIHN0YXRlbWVudHNcblxuICAgeWllbGQgPGV4cHI+XG4gICB5aWVsZCBmcm9tIDxleHByPlxuXG5hcmUgZXF1aXZhbGVudCB0byB0aGUgeWllbGQgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzXG5cbiAgICh5aWVsZCA8ZXhwcj4pXG4gICAoeWllbGQgZnJvbSA8ZXhwcj4pXG5cbllpZWxkIGV4cHJlc3Npb25zIGFuZCBzdGF0ZW1lbnRzIGFyZSBvbmx5IHVzZWQgd2hlbiBkZWZpbmluZyBhXG4qZ2VuZXJhdG9yKiBmdW5jdGlvbiwgYW5kIGFyZSBvbmx5IHVzZWQgaW4gdGhlIGJvZHkgb2YgdGhlIGdlbmVyYXRvclxuZnVuY3Rpb24uICBVc2luZyB5aWVsZCBpbiBhIGZ1bmN0aW9uIGRlZmluaXRpb24gaXMgc3VmZmljaWVudCB0byBjYXVzZVxudGhhdCBkZWZpbml0aW9uIHRvIGNyZWF0ZSBhIGdlbmVyYXRvciBmdW5jdGlvbiBpbnN0ZWFkIG9mIGEgbm9ybWFsXG5mdW5jdGlvbi5cblxuRm9yIGZ1bGwgZGV0YWlscyBvZiAieWllbGQiIHNlbWFudGljcywgcmVmZXIgdG8gdGhlICpZaWVsZFxuZXhwcmVzc2lvbnMqIHNlY3Rpb24uXG4nfQpkaWZmIC0tZ2l0IGEvTGliL3F1b3ByaS5weSBiL0xpYi9xdW9wcmkucHkKaW5kZXggM2QwZjBhYy4uY2JkOTc5YSAxMDA3NTUKLS0tIGEvTGliL3F1b3ByaS5weQorKysgYi9MaWIvcXVvcHJpLnB5CkBAIC00NCwxMyArNDQsMTEgQEAKIGRlZiBlbmNvZGUoaW5wdXQsIG91dHB1dCwgcXVvdGV0YWJzLCBoZWFkZXI9RmFsc2UpOgogICAgICIiIlJlYWQgJ2lucHV0JywgYXBwbHkgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZywgYW5kIHdyaXRlIHRvICdvdXRwdXQnLgogCi0gICAgJ2lucHV0JyBhbmQgJ291dHB1dCcgYXJlIGZpbGVzIHdpdGggcmVhZGxpbmUoKSBhbmQgd3JpdGUoKSBtZXRob2RzLgotICAgIFRoZSAncXVvdGV0YWJzJyBmbGFnIGluZGljYXRlcyB3aGV0aGVyIGVtYmVkZGVkIHRhYnMgYW5kIHNwYWNlcyBzaG91bGQgYmUKLSAgICBxdW90ZWQuICBOb3RlIHRoYXQgbGluZS1lbmRpbmcgdGFicyBhbmQgc3BhY2VzIGFyZSBhbHdheXMgZW5jb2RlZCwgYXMgcGVyCi0gICAgUkZDIDE1MjEuCi0gICAgVGhlICdoZWFkZXInIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgYXJlIGVuY29kaW5nIHNwYWNlcyBhcyBfIGFzIHBlcgotICAgIFJGQyAxNTIyLgotICAgICIiIgorICAgICdpbnB1dCcgYW5kICdvdXRwdXQnIGFyZSBiaW5hcnkgZmlsZSBvYmplY3RzLiBUaGUgJ3F1b3RldGFicycgZmxhZworICAgIGluZGljYXRlcyB3aGV0aGVyIGVtYmVkZGVkIHRhYnMgYW5kIHNwYWNlcyBzaG91bGQgYmUgcXVvdGVkLiBOb3RlIHRoYXQKKyAgICBsaW5lLWVuZGluZyB0YWJzIGFuZCBzcGFjZXMgYXJlIGFsd2F5cyBlbmNvZGVkLCBhcyBwZXIgUkZDIDE1MjEuCisgICAgVGhlICdoZWFkZXInIGZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgd2UgYXJlIGVuY29kaW5nIHNwYWNlcyBhcyBfIGFzIHBlciBSRkMKKyAgICAxNTIyLiIiIgogCiAgICAgaWYgYjJhX3FwIGlzIG5vdCBOb25lOgogICAgICAgICBkYXRhID0gaW5wdXQucmVhZCgpCkBAIC0xMTgsNyArMTE2LDcgQEAKIAogZGVmIGRlY29kZShpbnB1dCwgb3V0cHV0LCBoZWFkZXI9RmFsc2UpOgogICAgICIiIlJlYWQgJ2lucHV0JywgYXBwbHkgcXVvdGVkLXByaW50YWJsZSBkZWNvZGluZywgYW5kIHdyaXRlIHRvICdvdXRwdXQnLgotICAgICdpbnB1dCcgYW5kICdvdXRwdXQnIGFyZSBmaWxlcyB3aXRoIHJlYWRsaW5lKCkgYW5kIHdyaXRlKCkgbWV0aG9kcy4KKyAgICAnaW5wdXQnIGFuZCAnb3V0cHV0JyBhcmUgYmluYXJ5IGZpbGUgb2JqZWN0cy4KICAgICBJZiAnaGVhZGVyJyBpcyB0cnVlLCBkZWNvZGUgdW5kZXJzY29yZSBhcyBzcGFjZSAocGVyIFJGQyAxNTIyKS4iIiIKIAogICAgIGlmIGEyYl9xcCBpcyBub3QgTm9uZToKQEAgLTE0Nyw3ICsxNDUsNyBAQAogICAgICAgICAgICAgICAgIG5ldyA9IG5ldyArIGM7IGkgPSBpKzEKICAgICAgICAgICAgIGVsaWYgaSsxID09IG4gYW5kIG5vdCBwYXJ0aWFsOgogICAgICAgICAgICAgICAgIHBhcnRpYWwgPSAxOyBicmVhawotICAgICAgICAgICAgZWxpZiBpKzEgPCBuIGFuZCBsaW5lW2krMV0gPT0gRVNDQVBFOgorICAgICAgICAgICAgZWxpZiBpKzEgPCBuIGFuZCBsaW5lW2krMTppKzJdID09IEVTQ0FQRToKICAgICAgICAgICAgICAgICBuZXcgPSBuZXcgKyBFU0NBUEU7IGkgPSBpKzIKICAgICAgICAgICAgIGVsaWYgaSsyIDwgbiBhbmQgaXNoZXgobGluZVtpKzE6aSsyXSkgYW5kIGlzaGV4KGxpbmVbaSsyOmkrM10pOgogICAgICAgICAgICAgICAgIG5ldyA9IG5ldyArIGJ5dGVzKCh1bmhleChsaW5lW2krMTppKzNdKSwpKTsgaSA9IGkrMwpAQCAtMjIzLDcgKzIyMSw3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgZnAgPSBvcGVuKGZpbGUsICJyYiIpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiJXM6IGNhbid0IG9wZW4gKCVzKVxuIiAlIChmaWxlLCBtc2cpKQogICAgICAgICAgICAgICAgIHN0cyA9IDEKICAgICAgICAgICAgICAgICBjb250aW51ZQpkaWZmIC0tZ2l0IGEvTGliL3JhbmRvbS5weSBiL0xpYi9yYW5kb20ucHkKaW5kZXggMTRhYzVlNS4uNDY0MjkyOCAxMDA2NDQKLS0tIGEvTGliL3JhbmRvbS5weQorKysgYi9MaWIvcmFuZG9tLnB5CkBAIC00MSw3ICs0MSw3IEBACiBmcm9tIG1hdGggaW1wb3J0IGxvZyBhcyBfbG9nLCBleHAgYXMgX2V4cCwgcGkgYXMgX3BpLCBlIGFzIF9lLCBjZWlsIGFzIF9jZWlsCiBmcm9tIG1hdGggaW1wb3J0IHNxcnQgYXMgX3NxcnQsIGFjb3MgYXMgX2Fjb3MsIGNvcyBhcyBfY29zLCBzaW4gYXMgX3NpbgogZnJvbSBvcyBpbXBvcnQgdXJhbmRvbSBhcyBfdXJhbmRvbQotZnJvbSBjb2xsZWN0aW9ucy5hYmMgaW1wb3J0IFNldCBhcyBfU2V0LCBTZXF1ZW5jZSBhcyBfU2VxdWVuY2UKK2Zyb20gX2NvbGxlY3Rpb25zX2FiYyBpbXBvcnQgU2V0IGFzIF9TZXQsIFNlcXVlbmNlIGFzIF9TZXF1ZW5jZQogZnJvbSBoYXNobGliIGltcG9ydCBzaGE1MTIgYXMgX3NoYTUxMgogCiBfX2FsbF9fID0gWyJSYW5kb20iLCJzZWVkIiwicmFuZG9tIiwidW5pZm9ybSIsInJhbmRpbnQiLCJjaG9pY2UiLCJzYW1wbGUiLApAQCAtMTA1LDcgKzEwNSw5IEBACiAKICAgICAgICAgaWYgYSBpcyBOb25lOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGEgPSBpbnQuZnJvbV9ieXRlcyhfdXJhbmRvbSgzMiksICdiaWcnKQorICAgICAgICAgICAgICAgICMgU2VlZCB3aXRoIGVub3VnaCBieXRlcyB0byBzcGFuIHRoZSAxOTkzNyBiaXQKKyAgICAgICAgICAgICAgICAjIHN0YXRlIHNwYWNlIGZvciB0aGUgTWVyc2VubmUgVHdpc3RlcgorICAgICAgICAgICAgICAgIGEgPSBpbnQuZnJvbV9ieXRlcyhfdXJhbmRvbSgyNTAwKSwgJ2JpZycpCiAgICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKICAgICAgICAgICAgICAgICBpbXBvcnQgdGltZQogICAgICAgICAgICAgICAgIGEgPSBpbnQodGltZS50aW1lKCkgKiAyNTYpICMgdXNlIGZyYWN0aW9uYWwgc2Vjb25kcwpAQCAtMTUxLDYgKzE1Myw5IEBACiAKICMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tIHBpY2tsZSBzdXBwb3J0ICAtLS0tLS0tLS0tLS0tLS0tLS0tCiAKKyAgICAjIElzc3VlIDE3NDg5OiBTaW5jZSBfX3JlZHVjZV9fIHdhcyBkZWZpbmVkIHRvIGZpeCAjNzU5ODg5IHRoaXMgaXMgbm8KKyAgICAjIGxvbmdlciBjYWxsZWQ7IHdlIGxlYXZlIGl0IGhlcmUgYmVjYXVzZSBpdCBoYXMgYmVlbiBoZXJlIHNpbmNlIHJhbmRvbSB3YXMKKyAgICAjIHJld3JpdHRlbiBiYWNrIGluIDIwMDEgYW5kIHdoeSByaXNrIGJyZWFraW5nIHNvbWV0aGluZy4KICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOiAjIGZvciBwaWNrbGUKICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0c3RhdGUoKQogCkBAIC0yMTYsMTAgKzIyMSwxMSBAQAogICAgICAgICAgICAgICAgICAgIE1ldGhvZD1fTWV0aG9kVHlwZSwgQnVpbHRpbk1ldGhvZD1fQnVpbHRpbk1ldGhvZFR5cGUpOgogICAgICAgICAiUmV0dXJuIGEgcmFuZG9tIGludCBpbiB0aGUgcmFuZ2UgWzAsbikuICBSYWlzZXMgVmFsdWVFcnJvciBpZiBuPT0wLiIKIAorICAgICAgICByYW5kb20gPSBzZWxmLnJhbmRvbQogICAgICAgICBnZXRyYW5kYml0cyA9IHNlbGYuZ2V0cmFuZGJpdHMKICAgICAgICAgIyBPbmx5IGNhbGwgc2VsZi5nZXRyYW5kYml0cyBpZiB0aGUgb3JpZ2luYWwgcmFuZG9tKCkgYnVpbHRpbiBtZXRob2QKICAgICAgICAgIyBoYXMgbm90IGJlZW4gb3ZlcnJpZGRlbiBvciBpZiBhIG5ldyBnZXRyYW5kYml0cygpIHdhcyBzdXBwbGllZC4KLSAgICAgICAgaWYgdHlwZShzZWxmLnJhbmRvbSkgaXMgQnVpbHRpbk1ldGhvZCBvciB0eXBlKGdldHJhbmRiaXRzKSBpcyBNZXRob2Q6CisgICAgICAgIGlmIHR5cGUocmFuZG9tKSBpcyBCdWlsdGluTWV0aG9kIG9yIHR5cGUoZ2V0cmFuZGJpdHMpIGlzIE1ldGhvZDoKICAgICAgICAgICAgIGsgPSBuLmJpdF9sZW5ndGgoKSAgIyBkb24ndCB1c2UgKG4tMSkgaGVyZSBiZWNhdXNlIG4gY2FuIGJlIDEKICAgICAgICAgICAgIHIgPSBnZXRyYW5kYml0cyhrKSAgICAgICAgICAjIDAgPD0gciA8IDIqKmsKICAgICAgICAgICAgIHdoaWxlIHIgPj0gbjoKQEAgLTIyNyw3ICsyMzMsNiBAQAogICAgICAgICAgICAgcmV0dXJuIHIKICAgICAgICAgIyBUaGVyZSdzIGFuIG92ZXJyaWRlbiByYW5kb20oKSBtZXRob2QgYnV0IG5vIG5ldyBnZXRyYW5kYml0cygpIG1ldGhvZCwKICAgICAgICAgIyBzbyB3ZSBjYW4gb25seSB1c2UgcmFuZG9tKCkgZnJvbSBoZXJlLgotICAgICAgICByYW5kb20gPSBzZWxmLnJhbmRvbQogICAgICAgICBpZiBuID49IG1heHNpemU6CiAgICAgICAgICAgICBfd2FybigiVW5kZXJseWluZyByYW5kb20oKSBnZW5lcmF0b3IgZG9lcyBub3Qgc3VwcGx5IFxuIgogICAgICAgICAgICAgICAgICJlbm91Z2ggYml0cyB0byBjaG9vc2UgZnJvbSBhIHBvcHVsYXRpb24gcmFuZ2UgdGhpcyBsYXJnZS5cbiIKQEAgLTI1MSwxMCArMjU2LDExIEBACiAgICAgICAgIHJldHVybiBzZXFbaV0KIAogICAgIGRlZiBzaHVmZmxlKHNlbGYsIHgsIHJhbmRvbT1Ob25lKToKLSAgICAgICAgIiIieCwgcmFuZG9tPXJhbmRvbS5yYW5kb20gLT4gc2h1ZmZsZSBsaXN0IHggaW4gcGxhY2U7IHJldHVybiBOb25lLgorICAgICAgICAiIiJTaHVmZmxlIGxpc3QgeCBpbiBwbGFjZSwgYW5kIHJldHVybiBOb25lLgogCi0gICAgICAgIE9wdGlvbmFsIGFyZyByYW5kb20gaXMgYSAwLWFyZ3VtZW50IGZ1bmN0aW9uIHJldHVybmluZyBhIHJhbmRvbQotICAgICAgICBmbG9hdCBpbiBbMC4wLCAxLjApOyBieSBkZWZhdWx0LCB0aGUgc3RhbmRhcmQgcmFuZG9tLnJhbmRvbS4KKyAgICAgICAgT3B0aW9uYWwgYXJndW1lbnQgcmFuZG9tIGlzIGEgMC1hcmd1bWVudCBmdW5jdGlvbiByZXR1cm5pbmcgYQorICAgICAgICByYW5kb20gZmxvYXQgaW4gWzAuMCwgMS4wKTsgaWYgaXQgaXMgdGhlIGRlZmF1bHQgTm9uZSwgdGhlCisgICAgICAgIHN0YW5kYXJkIHJhbmRvbS5yYW5kb20gd2lsbCBiZSB1c2VkLgogCiAgICAgICAgICIiIgogCkBAIC0zNDksNyArMzU1LDEwIEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHUgPSBzZWxmLnJhbmRvbSgpCi0gICAgICAgIGMgPSAwLjUgaWYgbW9kZSBpcyBOb25lIGVsc2UgKG1vZGUgLSBsb3cpIC8gKGhpZ2ggLSBsb3cpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGMgPSAwLjUgaWYgbW9kZSBpcyBOb25lIGVsc2UgKG1vZGUgLSBsb3cpIC8gKGhpZ2ggLSBsb3cpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBsb3cKICAgICAgICAgaWYgdSA+IGM6CiAgICAgICAgICAgICB1ID0gMS4wIC0gdQogICAgICAgICAgICAgYyA9IDEuMCAtIGMKZGlmZiAtLWdpdCBhL0xpYi9yZS5weSBiL0xpYi9yZS5weQppbmRleCBhNDZlY2M4Li4xOTlhZmVlIDEwMDY0NAotLS0gYS9MaWIvcmUucHkKKysrIGIvTGliL3JlLnB5CkBAIC04NSwxNiArODUsMTcgQEAKICAgICBcXCAgICAgICBNYXRjaGVzIGEgbGl0ZXJhbCBiYWNrc2xhc2guCiAKIFRoaXMgbW9kdWxlIGV4cG9ydHMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6Ci0gICAgbWF0Y2ggICAgTWF0Y2ggYSByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byB0aGUgYmVnaW5uaW5nIG9mIGEgc3RyaW5nLgotICAgIHNlYXJjaCAgIFNlYXJjaCBhIHN0cmluZyBmb3IgdGhlIHByZXNlbmNlIG9mIGEgcGF0dGVybi4KLSAgICBzdWIgICAgICBTdWJzdGl0dXRlIG9jY3VycmVuY2VzIG9mIGEgcGF0dGVybiBmb3VuZCBpbiBhIHN0cmluZy4KLSAgICBzdWJuICAgICBTYW1lIGFzIHN1YiwgYnV0IGFsc28gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyBtYWRlLgotICAgIHNwbGl0ICAgIFNwbGl0IGEgc3RyaW5nIGJ5IHRoZSBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4uCi0gICAgZmluZGFsbCAgRmluZCBhbGwgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGluIGEgc3RyaW5nLgotICAgIGZpbmRpdGVyIFJldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyBhIG1hdGNoIG9iamVjdCBmb3IgZWFjaCBtYXRjaC4KLSAgICBjb21waWxlICBDb21waWxlIGEgcGF0dGVybiBpbnRvIGEgUmVnZXhPYmplY3QuCi0gICAgcHVyZ2UgICAgQ2xlYXIgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBjYWNoZS4KLSAgICBlc2NhcGUgICBCYWNrc2xhc2ggYWxsIG5vbi1hbHBoYW51bWVyaWNzIGluIGEgc3RyaW5nLgorICAgIG1hdGNoICAgICBNYXRjaCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIHRoZSBiZWdpbm5pbmcgb2YgYSBzdHJpbmcuCisgICAgZnVsbG1hdGNoIE1hdGNoIGEgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gYWxsIG9mIGEgc3RyaW5nLgorICAgIHNlYXJjaCAgICBTZWFyY2ggYSBzdHJpbmcgZm9yIHRoZSBwcmVzZW5jZSBvZiBhIHBhdHRlcm4uCisgICAgc3ViICAgICAgIFN1YnN0aXR1dGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuIGZvdW5kIGluIGEgc3RyaW5nLgorICAgIHN1Ym4gICAgICBTYW1lIGFzIHN1YiwgYnV0IGFsc28gcmV0dXJuIHRoZSBudW1iZXIgb2Ygc3Vic3RpdHV0aW9ucyBtYWRlLgorICAgIHNwbGl0ICAgICBTcGxpdCBhIHN0cmluZyBieSB0aGUgb2NjdXJyZW5jZXMgb2YgYSBwYXR0ZXJuLgorICAgIGZpbmRhbGwgICBGaW5kIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHBhdHRlcm4gaW4gYSBzdHJpbmcuCisgICAgZmluZGl0ZXIgIFJldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyBhIG1hdGNoIG9iamVjdCBmb3IgZWFjaCBtYXRjaC4KKyAgICBjb21waWxlICAgQ29tcGlsZSBhIHBhdHRlcm4gaW50byBhIFJlZ2V4T2JqZWN0LgorICAgIHB1cmdlICAgICBDbGVhciB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlLgorICAgIGVzY2FwZSAgICBCYWNrc2xhc2ggYWxsIG5vbi1hbHBoYW51bWVyaWNzIGluIGEgc3RyaW5nLgogCiBTb21lIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUgdGFrZXMgZmxhZ3MgYXMgb3B0aW9uYWwgcGFyYW1ldGVyczoKICAgICBBICBBU0NJSSAgICAgICBGb3Igc3RyaW5nIHBhdHRlcm5zLCBtYWtlIFx3LCBcVywgXGIsIFxCLCBcZCwgXEQKQEAgLTEyMSwxMCArMTIyLDEzIEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgc3JlX2NvbXBpbGUKIGltcG9ydCBzcmVfcGFyc2UKLWltcG9ydCBmdW5jdG9vbHMKK3RyeToKKyAgICBpbXBvcnQgX2xvY2FsZQorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIF9sb2NhbGUgPSBOb25lCiAKICMgcHVibGljIHN5bWJvbHMKLV9fYWxsX18gPSBbICJtYXRjaCIsICJzZWFyY2giLCAic3ViIiwgInN1Ym4iLCAic3BsaXQiLCAiZmluZGFsbCIsCitfX2FsbF9fID0gWyAibWF0Y2giLCAiZnVsbG1hdGNoIiwgInNlYXJjaCIsICJzdWIiLCAic3VibiIsICJzcGxpdCIsICJmaW5kYWxsIiwKICAgICAiY29tcGlsZSIsICJwdXJnZSIsICJ0ZW1wbGF0ZSIsICJlc2NhcGUiLCAiQSIsICJJIiwgIkwiLCAiTSIsICJTIiwgIlgiLAogICAgICJVIiwgIkFTQ0lJIiwgIklHTk9SRUNBU0UiLCAiTE9DQUxFIiwgIk1VTFRJTElORSIsICJET1RBTEwiLCAiVkVSQk9TRSIsCiAgICAgIlVOSUNPREUiLCAiZXJyb3IiIF0KQEAgLTE1NSw2ICsxNTksMTEgQEAKICAgICBhIG1hdGNoIG9iamVjdCwgb3IgTm9uZSBpZiBubyBtYXRjaCB3YXMgZm91bmQuIiIiCiAgICAgcmV0dXJuIF9jb21waWxlKHBhdHRlcm4sIGZsYWdzKS5tYXRjaChzdHJpbmcpCiAKK2RlZiBmdWxsbWF0Y2gocGF0dGVybiwgc3RyaW5nLCBmbGFncz0wKToKKyAgICAiIiJUcnkgdG8gYXBwbHkgdGhlIHBhdHRlcm4gdG8gYWxsIG9mIHRoZSBzdHJpbmcsIHJldHVybmluZworICAgIGEgbWF0Y2ggb2JqZWN0LCBvciBOb25lIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4iIiIKKyAgICByZXR1cm4gX2NvbXBpbGUocGF0dGVybiwgZmxhZ3MpLmZ1bGxtYXRjaChzdHJpbmcpCisKIGRlZiBzZWFyY2gocGF0dGVybiwgc3RyaW5nLCBmbGFncz0wKToKICAgICAiIiJTY2FuIHRocm91Z2ggc3RyaW5nIGxvb2tpbmcgZm9yIGEgbWF0Y2ggdG8gdGhlIHBhdHRlcm4sIHJldHVybmluZwogICAgIGEgbWF0Y2ggb2JqZWN0LCBvciBOb25lIGlmIG5vIG1hdGNoIHdhcyBmb3VuZC4iIiIKQEAgLTI3MCw3ICsyNzksOSBAQAogICAgIGJ5cGFzc19jYWNoZSA9IGZsYWdzICYgREVCVUcKICAgICBpZiBub3QgYnlwYXNzX2NhY2hlOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gX2NhY2hlW3R5cGUocGF0dGVybiksIHBhdHRlcm4sIGZsYWdzXQorICAgICAgICAgICAgcCwgbG9jID0gX2NhY2hlW3R5cGUocGF0dGVybiksIHBhdHRlcm4sIGZsYWdzXQorICAgICAgICAgICAgaWYgbG9jIGlzIE5vbmUgb3IgbG9jID09IF9sb2NhbGUuc2V0bG9jYWxlKF9sb2NhbGUuTENfQ1RZUEUpOgorICAgICAgICAgICAgICAgIHJldHVybiBwCiAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICBpZiBpc2luc3RhbmNlKHBhdHRlcm4sIF9wYXR0ZXJuX3R5cGUpOgpAQCAtMjg0LDcgKzI5NSwxMyBAQAogICAgIGlmIG5vdCBieXBhc3NfY2FjaGU6CiAgICAgICAgIGlmIGxlbihfY2FjaGUpID49IF9NQVhDQUNIRToKICAgICAgICAgICAgIF9jYWNoZS5jbGVhcigpCi0gICAgICAgIF9jYWNoZVt0eXBlKHBhdHRlcm4pLCBwYXR0ZXJuLCBmbGFnc10gPSBwCisgICAgICAgIGlmIHAuZmxhZ3MgJiBMT0NBTEU6CisgICAgICAgICAgICBpZiBub3QgX2xvY2FsZToKKyAgICAgICAgICAgICAgICByZXR1cm4gcAorICAgICAgICAgICAgbG9jID0gX2xvY2FsZS5zZXRsb2NhbGUoX2xvY2FsZS5MQ19DVFlQRSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvYyA9IE5vbmUKKyAgICAgICAgX2NhY2hlW3R5cGUocGF0dGVybiksIHBhdHRlcm4sIGZsYWdzXSA9IHAsIGxvYwogICAgIHJldHVybiBwCiAKIGRlZiBfY29tcGlsZV9yZXBsKHJlcGwsIHBhdHRlcm4pOgpkaWZmIC0tZ2l0IGEvTGliL3JsY29tcGxldGVyLnB5IGIvTGliL3JsY29tcGxldGVyLnB5CmluZGV4IDNmOTcwNTMuLjM3OGY1YWEgMTAwNjQ0Ci0tLSBhL0xpYi9ybGNvbXBsZXRlci5weQorKysgYi9MaWIvcmxjb21wbGV0ZXIucHkKQEAgLTI5LDYgKzI5LDcgQEAKIAogIiIiCiAKK2ltcG9ydCBhdGV4aXQKIGltcG9ydCBidWlsdGlucwogaW1wb3J0IF9fbWFpbl9fCiAKQEAgLTcyLDYgKzczLDEyIEBACiAgICAgICAgIGlmIHNlbGYudXNlX21haW5fbnM6CiAgICAgICAgICAgICBzZWxmLm5hbWVzcGFjZSA9IF9fbWFpbl9fLl9fZGljdF9fCiAKKyAgICAgICAgaWYgbm90IHRleHQuc3RyaXAoKToKKyAgICAgICAgICAgIGlmIHN0YXRlID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuICdcdCcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKwogICAgICAgICBpZiBzdGF0ZSA9PSAwOgogICAgICAgICAgICAgaWYgIi4iIGluIHRleHQ6CiAgICAgICAgICAgICAgICAgc2VsZi5tYXRjaGVzID0gc2VsZi5hdHRyX21hdGNoZXModGV4dCkKQEAgLTk2LDEzICsxMDMsMTYgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGltcG9ydCBrZXl3b3JkCiAgICAgICAgIG1hdGNoZXMgPSBbXQorICAgICAgICBzZWVuID0geyJfX2J1aWx0aW5zX18ifQogICAgICAgICBuID0gbGVuKHRleHQpCiAgICAgICAgIGZvciB3b3JkIGluIGtleXdvcmQua3dsaXN0OgogICAgICAgICAgICAgaWYgd29yZFs6bl0gPT0gdGV4dDoKKyAgICAgICAgICAgICAgICBzZWVuLmFkZCh3b3JkKQogICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKHdvcmQpCi0gICAgICAgIGZvciBuc3BhY2UgaW4gW2J1aWx0aW5zLl9fZGljdF9fLCBzZWxmLm5hbWVzcGFjZV06CisgICAgICAgIGZvciBuc3BhY2UgaW4gW3NlbGYubmFtZXNwYWNlLCBidWlsdGlucy5fX2RpY3RfX106CiAgICAgICAgICAgICBmb3Igd29yZCwgdmFsIGluIG5zcGFjZS5pdGVtcygpOgotICAgICAgICAgICAgICAgIGlmIHdvcmRbOm5dID09IHRleHQgYW5kIHdvcmQgIT0gIl9fYnVpbHRpbnNfXyI6CisgICAgICAgICAgICAgICAgaWYgd29yZFs6bl0gPT0gdGV4dCBhbmQgd29yZCBub3QgaW4gc2VlbjoKKyAgICAgICAgICAgICAgICAgICAgc2Vlbi5hZGQod29yZCkKICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlcy5hcHBlbmQoc2VsZi5fY2FsbGFibGVfcG9zdGZpeCh2YWwsIHdvcmQpKQogICAgICAgICByZXR1cm4gbWF0Y2hlcwogCkBAIC0xMjksMjAgKzEzOSwyMyBAQAogICAgICAgICAgICAgcmV0dXJuIFtdCiAKICAgICAgICAgIyBnZXQgdGhlIGNvbnRlbnQgb2YgdGhlIG9iamVjdCwgZXhjZXB0IF9fYnVpbHRpbnNfXwotICAgICAgICB3b3JkcyA9IGRpcih0aGlzb2JqZWN0KQotICAgICAgICBpZiAiX19idWlsdGluc19fIiBpbiB3b3JkczoKLSAgICAgICAgICAgIHdvcmRzLnJlbW92ZSgiX19idWlsdGluc19fIikKKyAgICAgICAgd29yZHMgPSBzZXQoZGlyKHRoaXNvYmplY3QpKQorICAgICAgICB3b3Jkcy5kaXNjYXJkKCJfX2J1aWx0aW5zX18iKQogCiAgICAgICAgIGlmIGhhc2F0dHIodGhpc29iamVjdCwgJ19fY2xhc3NfXycpOgotICAgICAgICAgICAgd29yZHMuYXBwZW5kKCdfX2NsYXNzX18nKQotICAgICAgICAgICAgd29yZHMuZXh0ZW5kKGdldF9jbGFzc19tZW1iZXJzKHRoaXNvYmplY3QuX19jbGFzc19fKSkKKyAgICAgICAgICAgIHdvcmRzLmFkZCgnX19jbGFzc19fJykKKyAgICAgICAgICAgIHdvcmRzLnVwZGF0ZShnZXRfY2xhc3NfbWVtYmVycyh0aGlzb2JqZWN0Ll9fY2xhc3NfXykpCiAgICAgICAgIG1hdGNoZXMgPSBbXQogICAgICAgICBuID0gbGVuKGF0dHIpCiAgICAgICAgIGZvciB3b3JkIGluIHdvcmRzOgotICAgICAgICAgICAgaWYgd29yZFs6bl0gPT0gYXR0ciBhbmQgaGFzYXR0cih0aGlzb2JqZWN0LCB3b3JkKToKLSAgICAgICAgICAgICAgICB2YWwgPSBnZXRhdHRyKHRoaXNvYmplY3QsIHdvcmQpCisgICAgICAgICAgICBpZiB3b3JkWzpuXSA9PSBhdHRyOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgdmFsID0gZ2V0YXR0cih0aGlzb2JqZWN0LCB3b3JkKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlICAjIEV4Y2x1ZGUgcHJvcGVydGllcyB0aGF0IGFyZSBub3Qgc2V0CiAgICAgICAgICAgICAgICAgd29yZCA9IHNlbGYuX2NhbGxhYmxlX3Bvc3RmaXgodmFsLCAiJXMuJXMiICUgKGV4cHIsIHdvcmQpKQogICAgICAgICAgICAgICAgIG1hdGNoZXMuYXBwZW5kKHdvcmQpCisgICAgICAgIG1hdGNoZXMuc29ydCgpCiAgICAgICAgIHJldHVybiBtYXRjaGVzCiAKIGRlZiBnZXRfY2xhc3NfbWVtYmVycyhrbGFzcyk6CkBAIC0xNTgsMyArMTcxLDcgQEAKICAgICBwYXNzCiBlbHNlOgogICAgIHJlYWRsaW5lLnNldF9jb21wbGV0ZXIoQ29tcGxldGVyKCkuY29tcGxldGUpCisgICAgIyBSZWxlYXNlIHJlZmVyZW5jZXMgZWFybHkgYXQgc2h1dGRvd24gKHRoZSByZWFkbGluZSBtb2R1bGUncworICAgICMgY29udGVudHMgYXJlIHF1YXNpLWltbW9ydGFsLCBhbmQgdGhlIGNvbXBsZXRlciBmdW5jdGlvbiBob2xkcyBhCisgICAgIyByZWZlcmVuY2UgdG8gZ2xvYmFscykuCisgICAgYXRleGl0LnJlZ2lzdGVyKGxhbWJkYTogcmVhZGxpbmUuc2V0X2NvbXBsZXRlcihOb25lKSkKZGlmZiAtLWdpdCBhL0xpYi9ydW5weS5weSBiL0xpYi9ydW5weS5weQppbmRleCAzOWMwZTlmLi4wYmI1N2Q3IDEwMDY0NAotLS0gYS9MaWIvcnVucHkucHkKKysrIGIvTGliL3J1bnB5LnB5CkBAIC0xMCwxMSArMTAsMTEgQEAKICMgICAgdG8gaW1wbGVtZW50IFBFUCAzMzggKEV4ZWN1dGluZyBNb2R1bGVzIGFzIFNjcmlwdHMpCiAKIAotaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeSAjIGltcG9ydGxpYiBmaXJzdCBzbyB3ZSBjYW4gdGVzdCAjMTUzODYgdmlhIC1tCi1pbXBvcnQgaW1wCi1mcm9tIHBrZ3V0aWwgaW1wb3J0IHJlYWRfY29kZSwgZ2V0X2xvYWRlciwgZ2V0X2ltcG9ydGVyCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKK2ltcG9ydCB0eXBlcworZnJvbSBwa2d1dGlsIGltcG9ydCByZWFkX2NvZGUsIGdldF9pbXBvcnRlcgogCiBfX2FsbF9fID0gWwogICAgICJydW5fbW9kdWxlIiwgInJ1bl9wYXRoIiwKQEAgLTI0LDcgKzI0LDcgQEAKICAgICAiIiJUZW1wb3JhcmlseSByZXBsYWNlIGEgbW9kdWxlIGluIHN5cy5tb2R1bGVzIHdpdGggYW4gZW1wdHkgbmFtZXNwYWNlIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG1vZF9uYW1lKToKICAgICAgICAgc2VsZi5tb2RfbmFtZSA9IG1vZF9uYW1lCi0gICAgICAgIHNlbGYubW9kdWxlID0gaW1wLm5ld19tb2R1bGUobW9kX25hbWUpCisgICAgICAgIHNlbGYubW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2RfbmFtZSkKICAgICAgICAgc2VsZi5fc2F2ZWRfbW9kdWxlID0gW10KIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CkBAIC01OCw1MSArNTgsNTkgQEAKICAgICAgICAgc2VsZi52YWx1ZSA9IHNlbGYuX3NlbnRpbmVsCiAgICAgICAgIHN5cy5hcmd2WzBdID0gc2VsZi5fc2F2ZWRfdmFsdWUKIAorIyBUT0RPOiBSZXBsYWNlIHRoZXNlIGhlbHBlcnMgd2l0aCBpbXBvcnRsaWIuX2Jvb3RzdHJhcC5fU3BlY01ldGhvZHMKIGRlZiBfcnVuX2NvZGUoY29kZSwgcnVuX2dsb2JhbHMsIGluaXRfZ2xvYmFscz1Ob25lLAotICAgICAgICAgICAgICBtb2RfbmFtZT1Ob25lLCBtb2RfZm5hbWU9Tm9uZSwKLSAgICAgICAgICAgICAgbW9kX2xvYWRlcj1Ob25lLCBwa2dfbmFtZT1Ob25lKToKKyAgICAgICAgICAgICAgbW9kX25hbWU9Tm9uZSwgbW9kX3NwZWM9Tm9uZSwKKyAgICAgICAgICAgICAgcGtnX25hbWU9Tm9uZSwgc2NyaXB0X25hbWU9Tm9uZSk6CiAgICAgIiIiSGVscGVyIHRvIHJ1biBjb2RlIGluIG5vbWluYXRlZCBuYW1lc3BhY2UiIiIKICAgICBpZiBpbml0X2dsb2JhbHMgaXMgbm90IE5vbmU6CiAgICAgICAgIHJ1bl9nbG9iYWxzLnVwZGF0ZShpbml0X2dsb2JhbHMpCisgICAgaWYgbW9kX3NwZWMgaXMgTm9uZToKKyAgICAgICAgbG9hZGVyID0gTm9uZQorICAgICAgICBmbmFtZSA9IHNjcmlwdF9uYW1lCisgICAgICAgIGNhY2hlZCA9IE5vbmUKKyAgICBlbHNlOgorICAgICAgICBsb2FkZXIgPSBtb2Rfc3BlYy5sb2FkZXIKKyAgICAgICAgZm5hbWUgPSBtb2Rfc3BlYy5vcmlnaW4KKyAgICAgICAgY2FjaGVkID0gbW9kX3NwZWMuY2FjaGVkCisgICAgICAgIGlmIHBrZ19uYW1lIGlzIE5vbmU6CisgICAgICAgICAgICBwa2dfbmFtZSA9IG1vZF9zcGVjLnBhcmVudAogICAgIHJ1bl9nbG9iYWxzLnVwZGF0ZShfX25hbWVfXyA9IG1vZF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBfX2ZpbGVfXyA9IG1vZF9mbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgX19jYWNoZWRfXyA9IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgIF9fZmlsZV9fID0gZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIF9fY2FjaGVkX18gPSBjYWNoZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fZG9jX18gPSBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fID0gbW9kX2xvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgX19wYWNrYWdlX18gPSBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgX19sb2FkZXJfXyA9IGxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgX19wYWNrYWdlX18gPSBwa2dfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX19zcGVjX18gPSBtb2Rfc3BlYykKICAgICBleGVjKGNvZGUsIHJ1bl9nbG9iYWxzKQogICAgIHJldHVybiBydW5fZ2xvYmFscwogCiBkZWYgX3J1bl9tb2R1bGVfY29kZShjb2RlLCBpbml0X2dsb2JhbHM9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgbW9kX25hbWU9Tm9uZSwgbW9kX2ZuYW1lPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgIG1vZF9sb2FkZXI9Tm9uZSwgcGtnX25hbWU9Tm9uZSk6CisgICAgICAgICAgICAgICAgICAgIG1vZF9uYW1lPU5vbmUsIG1vZF9zcGVjPU5vbmUsCisgICAgICAgICAgICAgICAgICAgIHBrZ19uYW1lPU5vbmUsIHNjcmlwdF9uYW1lPU5vbmUpOgogICAgICIiIkhlbHBlciB0byBydW4gY29kZSBpbiBuZXcgbmFtZXNwYWNlIHdpdGggc3lzIG1vZGlmaWVkIiIiCi0gICAgd2l0aCBfVGVtcE1vZHVsZShtb2RfbmFtZSkgYXMgdGVtcF9tb2R1bGUsIF9Nb2RpZmllZEFyZ3YwKG1vZF9mbmFtZSk6CisgICAgZm5hbWUgPSBzY3JpcHRfbmFtZSBpZiBtb2Rfc3BlYyBpcyBOb25lIGVsc2UgbW9kX3NwZWMub3JpZ2luCisgICAgd2l0aCBfVGVtcE1vZHVsZShtb2RfbmFtZSkgYXMgdGVtcF9tb2R1bGUsIF9Nb2RpZmllZEFyZ3YwKGZuYW1lKToKICAgICAgICAgbW9kX2dsb2JhbHMgPSB0ZW1wX21vZHVsZS5tb2R1bGUuX19kaWN0X18KICAgICAgICAgX3J1bl9jb2RlKGNvZGUsIG1vZF9nbG9iYWxzLCBpbml0X2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICBtb2RfbmFtZSwgbW9kX2ZuYW1lLCBtb2RfbG9hZGVyLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICAgIG1vZF9uYW1lLCBtb2Rfc3BlYywgcGtnX25hbWUsIHNjcmlwdF9uYW1lKQogICAgICMgQ29weSB0aGUgZ2xvYmFscyBvZiB0aGUgdGVtcG9yYXJ5IG1vZHVsZSwgYXMgdGhleQogICAgICMgbWF5IGJlIGNsZWFyZWQgd2hlbiB0aGUgdGVtcG9yYXJ5IG1vZHVsZSBnb2VzIGF3YXkKICAgICByZXR1cm4gbW9kX2dsb2JhbHMuY29weSgpCiAKLQotIyBUaGlzIGhlbHBlciBpcyBuZWVkZWQgZHVlIHRvIGEgbWlzc2luZyBjb21wb25lbnQgaW4gdGhlIFBFUCAzMDIKLSMgbG9hZGVyIHByb3RvY29sIChzcGVjaWZpY2FsbHksICJnZXRfZmlsZW5hbWUiIGlzIG5vbi1zdGFuZGFyZCkKLSMgU2luY2Ugd2UgY2FuJ3QgaW50cm9kdWNlIG5ldyBmZWF0dXJlcyBpbiBtYWludGVuYW5jZSByZWxlYXNlcywKLSMgc3VwcG9ydCB3YXMgYWRkZWQgdG8gemlwaW1wb3J0ZXIgdW5kZXIgdGhlIG5hbWUgJ19nZXRfZmlsZW5hbWUnCi1kZWYgX2dldF9maWxlbmFtZShsb2FkZXIsIG1vZF9uYW1lKToKLSAgICBmb3IgYXR0ciBpbiAoImdldF9maWxlbmFtZSIsICJfZ2V0X2ZpbGVuYW1lIik6Ci0gICAgICAgIG1ldGggPSBnZXRhdHRyKGxvYWRlciwgYXR0ciwgTm9uZSkKLSAgICAgICAgaWYgbWV0aCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgobWV0aChtb2RfbmFtZSkpCi0gICAgcmV0dXJuIE5vbmUKLQogIyBIZWxwZXIgdG8gZ2V0IHRoZSBsb2FkZXIsIGNvZGUgYW5kIGZpbGVuYW1lIGZvciBhIG1vZHVsZQogZGVmIF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpOgotICAgIGxvYWRlciA9IGdldF9sb2FkZXIobW9kX25hbWUpCi0gICAgaWYgbG9hZGVyIGlzIE5vbmU6CisgICAgdHJ5OgorICAgICAgICBzcGVjID0gaW1wb3J0bGliLnV0aWwuZmluZF9zcGVjKG1vZF9uYW1lKQorICAgIGV4Y2VwdCAoSW1wb3J0RXJyb3IsIEF0dHJpYnV0ZUVycm9yLCBUeXBlRXJyb3IsIFZhbHVlRXJyb3IpIGFzIGV4OgorICAgICAgICAjIFRoaXMgaGFjayBmaXhlcyBhbiBpbXBlZGFuY2UgbWlzbWF0Y2ggYmV0d2VlbiBwa2d1dGlsIGFuZAorICAgICAgICAjIGltcG9ydGxpYiwgd2hlcmUgdGhlIGxhdHRlciByYWlzZXMgb3RoZXIgZXJyb3JzIGZvciBjYXNlcyB3aGVyZQorICAgICAgICAjIHBrZ3V0aWwgcHJldmlvdXNseSByYWlzZWQgSW1wb3J0RXJyb3IKKyAgICAgICAgbXNnID0gIkVycm9yIHdoaWxlIGZpbmRpbmcgc3BlYyBmb3IgeyFyfSAoe306IHt9KSIKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IobXNnLmZvcm1hdChtb2RfbmFtZSwgdHlwZShleCksIGV4KSkgZnJvbSBleAorICAgIGlmIHNwZWMgaXMgTm9uZToKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIk5vIG1vZHVsZSBuYW1lZCAlcyIgJSBtb2RfbmFtZSkKLSAgICBpZiBsb2FkZXIuaXNfcGFja2FnZShtb2RfbmFtZSk6CisgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKICAgICAgICAgaWYgbW9kX25hbWUgPT0gIl9fbWFpbl9fIiBvciBtb2RfbmFtZS5lbmRzd2l0aCgiLl9fbWFpbl9fIik6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcigiQ2Fubm90IHVzZSBwYWNrYWdlIGFzIF9fbWFpbl9fIG1vZHVsZSIpCiAgICAgICAgIHRyeToKQEAgLTExMSwxMSArMTE5LDE0IEBACiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBlOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoKCIlczsgJXIgaXMgYSBwYWNrYWdlIGFuZCBjYW5ub3QgIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGRpcmVjdGx5IGV4ZWN1dGVkIikgJShlLCBtb2RfbmFtZSkpCisgICAgbG9hZGVyID0gc3BlYy5sb2FkZXIKKyAgICBpZiBsb2FkZXIgaXMgTm9uZToKKyAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIiVyIGlzIGEgbmFtZXNwYWNlIHBhY2thZ2UgYW5kIGNhbm5vdCBiZSBleGVjdXRlZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBtb2RfbmFtZSkKICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKG1vZF9uYW1lKQogICAgIGlmIGNvZGUgaXMgTm9uZToKICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIk5vIGNvZGUgb2JqZWN0IGF2YWlsYWJsZSBmb3IgJXMiICUgbW9kX25hbWUpCi0gICAgZmlsZW5hbWUgPSBfZ2V0X2ZpbGVuYW1lKGxvYWRlciwgbW9kX25hbWUpCi0gICAgcmV0dXJuIG1vZF9uYW1lLCBsb2FkZXIsIGNvZGUsIGZpbGVuYW1lCisgICAgcmV0dXJuIG1vZF9uYW1lLCBzcGVjLCBjb2RlCiAKICMgWFhYIG5jb2dobGFuOiBTaG91bGQgdGhpcyBiZSBkb2N1bWVudGVkIGFuZCBtYWRlIHB1YmxpYz8KICMgKEN1cnJlbnQgdGhvdWdodHM6IGRvbid0IHJlcGVhdCB0aGUgbWlzdGFrZSB0aGF0IGxlYWQgdG8gaXRzCkBAIC0xMzcsOSArMTQ4LDkgQEAKICAgICAiIiIKICAgICB0cnk6CiAgICAgICAgIGlmIGFsdGVyX2FyZ3Ygb3IgbW9kX25hbWUgIT0gIl9fbWFpbl9fIjogIyBpLmUuIC1tIHN3aXRjaAotICAgICAgICAgICAgbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lKQorICAgICAgICAgICAgbW9kX25hbWUsIG1vZF9zcGVjLCBjb2RlID0gX2dldF9tb2R1bGVfZGV0YWlscyhtb2RfbmFtZSkKICAgICAgICAgZWxzZTogICAgICAgICAgIyBpLmUuIGRpcmVjdG9yeSBvciB6aXBmaWxlIGV4ZWN1dGlvbgotICAgICAgICAgICAgbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQorICAgICAgICAgICAgbW9kX25hbWUsIG1vZF9zcGVjLCBjb2RlID0gX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKCkKICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgogICAgICAgICAjIFRyeSB0byBwcm92aWRlIGEgZ29vZCBlcnJvciBtZXNzYWdlCiAgICAgICAgICMgZm9yIGRpcmVjdG9yaWVzLCB6aXAgZmlsZXMgYW5kIHRoZSAtbSBzd2l0Y2gKQEAgLTE1MiwxMiArMTYzLDExIEBACiAgICAgICAgICAgICBpbmZvID0gImNhbid0IGZpbmQgJ19fbWFpbl9fJyBtb2R1bGUgaW4gJXIiICUgc3lzLmFyZ3ZbMF0KICAgICAgICAgbXNnID0gIiVzOiAlcyIgJSAoc3lzLmV4ZWN1dGFibGUsIGluZm8pCiAgICAgICAgIHN5cy5leGl0KG1zZykKLSAgICBwa2dfbmFtZSA9IG1vZF9uYW1lLnJwYXJ0aXRpb24oJy4nKVswXQogICAgIG1haW5fZ2xvYmFscyA9IHN5cy5tb2R1bGVzWyJfX21haW5fXyJdLl9fZGljdF9fCiAgICAgaWYgYWx0ZXJfYXJndjoKLSAgICAgICAgc3lzLmFyZ3ZbMF0gPSBmbmFtZQorICAgICAgICBzeXMuYXJndlswXSA9IG1vZF9zcGVjLm9yaWdpbgogICAgIHJldHVybiBfcnVuX2NvZGUoY29kZSwgbWFpbl9nbG9iYWxzLCBOb25lLAotICAgICAgICAgICAgICAgICAgICAgIl9fbWFpbl9fIiwgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgICAgICAiX19tYWluX18iLCBtb2Rfc3BlYykKIAogZGVmIHJ1bl9tb2R1bGUobW9kX25hbWUsIGluaXRfZ2xvYmFscz1Ob25lLAogICAgICAgICAgICAgICAgcnVuX25hbWU9Tm9uZSwgYWx0ZXJfc3lzPUZhbHNlKToKQEAgLTE2NSwxNyArMTc1LDE0IEBACiAKICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHRpbmcgdG9wIGxldmVsIG5hbWVzcGFjZSBkaWN0aW9uYXJ5CiAgICAgIiIiCi0gICAgbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21vZHVsZV9kZXRhaWxzKG1vZF9uYW1lKQorICAgIG1vZF9uYW1lLCBtb2Rfc3BlYywgY29kZSA9IF9nZXRfbW9kdWxlX2RldGFpbHMobW9kX25hbWUpCiAgICAgaWYgcnVuX25hbWUgaXMgTm9uZToKICAgICAgICAgcnVuX25hbWUgPSBtb2RfbmFtZQotICAgIHBrZ19uYW1lID0gbW9kX25hbWUucnBhcnRpdGlvbignLicpWzBdCiAgICAgaWYgYWx0ZXJfc3lzOgotICAgICAgICByZXR1cm4gX3J1bl9tb2R1bGVfY29kZShjb2RlLCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSwgbG9hZGVyLCBwa2dfbmFtZSkKKyAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoY29kZSwgaW5pdF9nbG9iYWxzLCBydW5fbmFtZSwgbW9kX3NwZWMpCiAgICAgZWxzZToKICAgICAgICAgIyBMZWF2ZSB0aGUgc3lzIG1vZHVsZSBhbG9uZQotICAgICAgICByZXR1cm4gX3J1bl9jb2RlKGNvZGUsIHt9LCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBsb2FkZXIsIHBrZ19uYW1lKQorICAgICAgICByZXR1cm4gX3J1bl9jb2RlKGNvZGUsIHt9LCBpbml0X2dsb2JhbHMsIHJ1bl9uYW1lLCBtb2Rfc3BlYykKIAogZGVmIF9nZXRfbWFpbl9tb2R1bGVfZGV0YWlscygpOgogICAgICMgSGVscGVyIHRoYXQgZ2l2ZXMgYSBuaWNlciBlcnJvciBtZXNzYWdlIHdoZW4gYXR0ZW1wdGluZyB0bwpAQCAtMjA0LDEwICsyMTEsNyBAQAogICAgICAgICAjIFRoYXQgZGlkbid0IHdvcmssIHNvIHRyeSBpdCBhcyBub3JtYWwgc291cmNlIGNvZGUKICAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoZi5yZWFkKCksIGZuYW1lLCAnZXhlYycpCi0gICAgICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIocnVuX25hbWUsIGZuYW1lKQotICAgIGVsc2U6Ci0gICAgICAgIGxvYWRlciA9IGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlbGVzc0ZpbGVMb2FkZXIocnVuX25hbWUsIGZuYW1lKQotICAgIHJldHVybiBjb2RlLCBsb2FkZXIKKyAgICByZXR1cm4gY29kZSwgZm5hbWUKIAogZGVmIHJ1bl9wYXRoKHBhdGhfbmFtZSwgaW5pdF9nbG9iYWxzPU5vbmUsIHJ1bl9uYW1lPU5vbmUpOgogICAgICIiIkV4ZWN1dGUgY29kZSBsb2NhdGVkIGF0IHRoZSBzcGVjaWZpZWQgZmlsZXN5c3RlbSBsb2NhdGlvbgpAQCAtMjIzLDEyICsyMjcsMTcgQEAKICAgICAgICAgcnVuX25hbWUgPSAiPHJ1bl9wYXRoPiIKICAgICBwa2dfbmFtZSA9IHJ1bl9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXQogICAgIGltcG9ydGVyID0gZ2V0X2ltcG9ydGVyKHBhdGhfbmFtZSkKLSAgICBpZiBpc2luc3RhbmNlKGltcG9ydGVyLCAodHlwZShOb25lKSwgaW1wLk51bGxJbXBvcnRlcikpOgorICAgICMgVHJ5aW5nIHRvIGF2b2lkIGltcG9ydGluZyBpbXAgc28gYXMgdG8gbm90IGNvbnN1bWUgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmcuCisgICAgaXNfTnVsbEltcG9ydGVyID0gRmFsc2UKKyAgICBpZiB0eXBlKGltcG9ydGVyKS5fX21vZHVsZV9fID09ICdpbXAnOgorICAgICAgICBpZiB0eXBlKGltcG9ydGVyKS5fX25hbWVfXyA9PSAnTnVsbEltcG9ydGVyJzoKKyAgICAgICAgICAgIGlzX051bGxJbXBvcnRlciA9IFRydWUKKyAgICBpZiBpc2luc3RhbmNlKGltcG9ydGVyLCB0eXBlKE5vbmUpKSBvciBpc19OdWxsSW1wb3J0ZXI6CiAgICAgICAgICMgTm90IGEgdmFsaWQgc3lzLnBhdGggZW50cnksIHNvIHJ1biB0aGUgY29kZSBkaXJlY3RseQogICAgICAgICAjIGV4ZWNmaWxlKCkgZG9lc24ndCBoZWxwIGFzIHdlIHdhbnQgdG8gYWxsb3cgY29tcGlsZWQgZmlsZXMKLSAgICAgICAgY29kZSwgbW9kX2xvYWRlciA9IF9nZXRfY29kZV9mcm9tX2ZpbGUocnVuX25hbWUsIHBhdGhfbmFtZSkKLSAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoY29kZSwgaW5pdF9nbG9iYWxzLCBydW5fbmFtZSwgcGF0aF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbG9hZGVyLCBwa2dfbmFtZSkKKyAgICAgICAgY29kZSwgZm5hbWUgPSBfZ2V0X2NvZGVfZnJvbV9maWxlKHJ1bl9uYW1lLCBwYXRoX25hbWUpCisgICAgICAgIHJldHVybiBfcnVuX21vZHVsZV9jb2RlKGNvZGUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBrZ19uYW1lPXBrZ19uYW1lLCBzY3JpcHRfbmFtZT1mbmFtZSkKICAgICBlbHNlOgogICAgICAgICAjIEltcG9ydGVyIGlzIGRlZmluZWQgZm9yIHBhdGgsIHNvIGFkZCBpdCB0bwogICAgICAgICAjIHRoZSBzdGFydCBvZiBzeXMucGF0aApAQCAtMjQwLDEyICsyNDksMTIgQEAKICAgICAgICAgICAgICMgaGF2ZSBubyBjaG9pY2UgYW5kIHdlIGhhdmUgdG8gcmVtb3ZlIGl0IGV2ZW4gd2hpbGUgd2UgcmVhZCB0aGUKICAgICAgICAgICAgICMgY29kZS4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgYSBfX2xvYWRlcl9fIGF0dHJpYnV0ZSBpbiB0aGUKICAgICAgICAgICAgICMgZXhpc3RpbmcgX19tYWluX18gbW9kdWxlIG1heSBwcmV2ZW50IGxvY2F0aW9uIG9mIHRoZSBuZXcgbW9kdWxlLgotICAgICAgICAgICAgbW9kX25hbWUsIGxvYWRlciwgY29kZSwgZm5hbWUgPSBfZ2V0X21haW5fbW9kdWxlX2RldGFpbHMoKQorICAgICAgICAgICAgbW9kX25hbWUsIG1vZF9zcGVjLCBjb2RlID0gX2dldF9tYWluX21vZHVsZV9kZXRhaWxzKCkKICAgICAgICAgICAgIHdpdGggX1RlbXBNb2R1bGUocnVuX25hbWUpIGFzIHRlbXBfbW9kdWxlLCBcCiAgICAgICAgICAgICAgICAgIF9Nb2RpZmllZEFyZ3YwKHBhdGhfbmFtZSk6CiAgICAgICAgICAgICAgICAgbW9kX2dsb2JhbHMgPSB0ZW1wX21vZHVsZS5tb2R1bGUuX19kaWN0X18KICAgICAgICAgICAgICAgICByZXR1cm4gX3J1bl9jb2RlKGNvZGUsIG1vZF9nbG9iYWxzLCBpbml0X2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5fbmFtZSwgZm5hbWUsIGxvYWRlciwgcGtnX25hbWUpLmNvcHkoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuX25hbWUsIG1vZF9zcGVjLCBwa2dfbmFtZSkuY29weSgpCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHBhdGhfbmFtZSkKZGlmZiAtLWdpdCBhL0xpYi9zY2hlZC5weSBiL0xpYi9zY2hlZC5weQppbmRleCBiOWE3YWQxLi4yZTZiMDBhIDEwMDY0NAotLS0gYS9MaWIvc2NoZWQucHkKKysrIGIvTGliL3NjaGVkLnB5CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIGt3YXJncyBpcyBfc2VudGluZWw6CiAgICAgICAgICAgICBrd2FyZ3MgPSB7fQorICAgICAgICBldmVudCA9IEV2ZW50KHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCiAgICAgICAgIHdpdGggc2VsZi5fbG9jazoKLSAgICAgICAgICAgIGV2ZW50ID0gRXZlbnQodGltZSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQsIGt3YXJncykKICAgICAgICAgICAgIGhlYXBxLmhlYXBwdXNoKHNlbGYuX3F1ZXVlLCBldmVudCkKLSAgICAgICAgICAgIHJldHVybiBldmVudCAjIFRoZSBJRAorICAgICAgICByZXR1cm4gZXZlbnQgIyBUaGUgSUQKIAogICAgIGRlZiBlbnRlcihzZWxmLCBkZWxheSwgcHJpb3JpdHksIGFjdGlvbiwgYXJndW1lbnQ9KCksIGt3YXJncz1fc2VudGluZWwpOgogICAgICAgICAiIiJBIHZhcmlhbnQgdGhhdCBzcGVjaWZpZXMgdGhlIHRpbWUgYXMgYSByZWxhdGl2ZSB0aW1lLgpAQCAtODIsOSArODIsOCBAQAogICAgICAgICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBtb3JlIGNvbW1vbmx5IHVzZWQgaW50ZXJmYWNlLgogCiAgICAgICAgICIiIgotICAgICAgICB3aXRoIHNlbGYuX2xvY2s6Ci0gICAgICAgICAgICB0aW1lID0gc2VsZi50aW1lZnVuYygpICsgZGVsYXkKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmVudGVyYWJzKHRpbWUsIHByaW9yaXR5LCBhY3Rpb24sIGFyZ3VtZW50LCBrd2FyZ3MpCisgICAgICAgIHRpbWUgPSBzZWxmLnRpbWVmdW5jKCkgKyBkZWxheQorICAgICAgICByZXR1cm4gc2VsZi5lbnRlcmFicyh0aW1lLCBwcmlvcml0eSwgYWN0aW9uLCBhcmd1bWVudCwga3dhcmdzKQogCiAgICAgZGVmIGNhbmNlbChzZWxmLCBldmVudCk6CiAgICAgICAgICIiIlJlbW92ZSBhbiBldmVudCBmcm9tIHRoZSBxdWV1ZS4KQEAgLTE2NSw0ICsxNjQsNCBAQAogICAgICAgICAjIHRoZSBhY3R1YWwgb3JkZXIgdGhleSB3b3VsZCBiZSByZXRyaWV2ZWQuCiAgICAgICAgIHdpdGggc2VsZi5fbG9jazoKICAgICAgICAgICAgIGV2ZW50cyA9IHNlbGYuX3F1ZXVlWzpdCi0gICAgICAgICAgICByZXR1cm4gbGlzdChtYXAoaGVhcHEuaGVhcHBvcCwgW2V2ZW50c10qbGVuKGV2ZW50cykpKQorICAgICAgICByZXR1cm4gbGlzdChtYXAoaGVhcHEuaGVhcHBvcCwgW2V2ZW50c10qbGVuKGV2ZW50cykpKQpkaWZmIC0tZ2l0IGEvTGliL3NlbGVjdG9ycy5weSBiL0xpYi9zZWxlY3RvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkzNmFiNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi9zZWxlY3RvcnMucHkKQEAgLTAsMCArMSw1NDUgQEAKKyIiIlNlbGVjdG9ycyBtb2R1bGUuCisKK1RoaXMgbW9kdWxlIGFsbG93cyBoaWdoLWxldmVsIGFuZCBlZmZpY2llbnQgSS9PIG11bHRpcGxleGluZywgYnVpbHQgdXBvbiB0aGUKK2BzZWxlY3RgIG1vZHVsZSBwcmltaXRpdmVzLgorIiIiCisKKworZnJvbSBhYmMgaW1wb3J0IEFCQ01ldGEsIGFic3RyYWN0bWV0aG9kCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlLCBNYXBwaW5nCitpbXBvcnQgbWF0aAoraW1wb3J0IHNlbGVjdAoraW1wb3J0IHN5cworCisKKyMgZ2VuZXJpYyBldmVudHMsIHRoYXQgbXVzdCBiZSBtYXBwZWQgdG8gaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgb25lcworRVZFTlRfUkVBRCA9ICgxIDw8IDApCitFVkVOVF9XUklURSA9ICgxIDw8IDEpCisKKworZGVmIF9maWxlb2JqX3RvX2ZkKGZpbGVvYmopOgorICAgICIiIlJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBmcm9tIGEgZmlsZSBvYmplY3QuCisKKyAgICBQYXJhbWV0ZXJzOgorICAgIGZpbGVvYmogLS0gZmlsZSBvYmplY3Qgb3IgZmlsZSBkZXNjcmlwdG9yCisKKyAgICBSZXR1cm5zOgorICAgIGNvcnJlc3BvbmRpbmcgZmlsZSBkZXNjcmlwdG9yCisKKyAgICBSYWlzZXM6CisgICAgVmFsdWVFcnJvciBpZiB0aGUgb2JqZWN0IGlzIGludmFsaWQKKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZpbGVvYmosIGludCk6CisgICAgICAgIGZkID0gZmlsZW9iagorICAgIGVsc2U6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkID0gaW50KGZpbGVvYmouZmlsZW5vKCkpCisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGZpbGUgb2JqZWN0OiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7IXJ9Ii5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorICAgIGlmIGZkIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiSW52YWxpZCBmaWxlIGRlc2NyaXB0b3I6IHt9Ii5mb3JtYXQoZmQpKQorICAgIHJldHVybiBmZAorCisKK1NlbGVjdG9yS2V5ID0gbmFtZWR0dXBsZSgnU2VsZWN0b3JLZXknLCBbJ2ZpbGVvYmonLCAnZmQnLCAnZXZlbnRzJywgJ2RhdGEnXSkKKyIiIk9iamVjdCB1c2VkIHRvIGFzc29jaWF0ZSBhIGZpbGUgb2JqZWN0IHRvIGl0cyBiYWNraW5nIGZpbGUgZGVzY3JpcHRvciwKK3NlbGVjdGVkIGV2ZW50IG1hc2sgYW5kIGF0dGFjaGVkIGRhdGEuIiIiCisKKworY2xhc3MgX1NlbGVjdG9yTWFwcGluZyhNYXBwaW5nKToKKyAgICAiIiJNYXBwaW5nIG9mIGZpbGUgb2JqZWN0cyB0byBzZWxlY3RvciBrZXlzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlbGVjdG9yKToKKyAgICAgICAgc2VsZi5fc2VsZWN0b3IgPSBzZWxlY3RvcgorCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fc2VsZWN0b3IuX2ZkX3RvX2tleSkKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmQgPSBzZWxmLl9zZWxlY3Rvci5fZmlsZW9ial9sb29rdXAoZmlsZW9iaikKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zZWxlY3Rvci5fZmRfdG9fa2V5W2ZkXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIoc2VsZi5fc2VsZWN0b3IuX2ZkX3RvX2tleSkKKworCitjbGFzcyBCYXNlU2VsZWN0b3IobWV0YWNsYXNzPUFCQ01ldGEpOgorICAgICIiIlNlbGVjdG9yIGFic3RyYWN0IGJhc2UgY2xhc3MuCisKKyAgICBBIHNlbGVjdG9yIHN1cHBvcnRzIHJlZ2lzdGVyaW5nIGZpbGUgb2JqZWN0cyB0byBiZSBtb25pdG9yZWQgZm9yIHNwZWNpZmljCisgICAgSS9PIGV2ZW50cy4KKworICAgIEEgZmlsZSBvYmplY3QgaXMgYSBmaWxlIGRlc2NyaXB0b3Igb3IgYW55IG9iamVjdCB3aXRoIGEgYGZpbGVubygpYCBtZXRob2QuCisgICAgQW4gYXJiaXRyYXJ5IG9iamVjdCBjYW4gYmUgYXR0YWNoZWQgdG8gdGhlIGZpbGUgb2JqZWN0LCB3aGljaCBjYW4gYmUgdXNlZAorICAgIGZvciBleGFtcGxlIHRvIHN0b3JlIGNvbnRleHQgaW5mb3JtYXRpb24sIGEgY2FsbGJhY2ssIGV0Yy4KKworICAgIEEgc2VsZWN0b3IgY2FuIHVzZSB2YXJpb3VzIGltcGxlbWVudGF0aW9ucyAoc2VsZWN0KCksIHBvbGwoKSwgZXBvbGwoKS4uLikKKyAgICBkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtLiBUaGUgZGVmYXVsdCBgU2VsZWN0b3JgIGNsYXNzIHVzZXMgdGhlIG1vc3QKKyAgICBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uCisgICAgIiIiCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAiIiJSZWdpc3RlciBhIGZpbGUgb2JqZWN0LgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIGZpbGVvYmogLS0gZmlsZSBvYmplY3Qgb3IgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgIGV2ZW50cyAgLS0gZXZlbnRzIHRvIG1vbml0b3IgKGJpdHdpc2UgbWFzayBvZiBFVkVOVF9SRUFEfEVWRU5UX1dSSVRFKQorICAgICAgICBkYXRhICAgIC0tIGF0dGFjaGVkIGRhdGEKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBTZWxlY3RvcktleSBpbnN0YW5jZQorCisgICAgICAgIFJhaXNlczoKKyAgICAgICAgVmFsdWVFcnJvciBpZiBldmVudHMgaXMgaW52YWxpZAorICAgICAgICBLZXlFcnJvciBpZiBmaWxlb2JqIGlzIGFscmVhZHkgcmVnaXN0ZXJlZAorICAgICAgICBPU0Vycm9yIGlmIGZpbGVvYmogaXMgY2xvc2VkIG9yIG90aGVyd2lzZSBpcyB1bmFjY2VwdGFibGUgdG8KKyAgICAgICAgICAgICAgICB0aGUgdW5kZXJseWluZyBzeXN0ZW0gY2FsbCAoaWYgYSBzeXN0ZW0gY2FsbCBpcyBtYWRlKQorCisgICAgICAgIE5vdGU6CisgICAgICAgIE9TRXJyb3IgbWF5IG9yIG1heSBub3QgYmUgcmFpc2VkCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBAYWJzdHJhY3RtZXRob2QKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgIiIiVW5yZWdpc3RlciBhIGZpbGUgb2JqZWN0LgorCisgICAgICAgIFBhcmFtZXRlcnM6CisgICAgICAgIGZpbGVvYmogLS0gZmlsZSBvYmplY3Qgb3IgZmlsZSBkZXNjcmlwdG9yCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgaW5zdGFuY2UKKworICAgICAgICBSYWlzZXM6CisgICAgICAgIEtleUVycm9yIGlmIGZpbGVvYmogaXMgbm90IHJlZ2lzdGVyZWQKKworICAgICAgICBOb3RlOgorICAgICAgICBJZiBmaWxlb2JqIGlzIHJlZ2lzdGVyZWQgYnV0IGhhcyBzaW5jZSBiZWVuIGNsb3NlZCB0aGlzIGRvZXMKKyAgICAgICAgKm5vdCogcmFpc2UgT1NFcnJvciAoZXZlbiBpZiB0aGUgd3JhcHBlZCBzeXNjYWxsIGRvZXMpCisgICAgICAgICIiIgorICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yCisKKyAgICBkZWYgbW9kaWZ5KHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgIiIiQ2hhbmdlIGEgcmVnaXN0ZXJlZCBmaWxlIG9iamVjdCBtb25pdG9yZWQgZXZlbnRzIG9yIGF0dGFjaGVkIGRhdGEuCisKKyAgICAgICAgUGFyYW1ldGVyczoKKyAgICAgICAgZmlsZW9iaiAtLSBmaWxlIG9iamVjdCBvciBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgZXZlbnRzICAtLSBldmVudHMgdG8gbW9uaXRvciAoYml0d2lzZSBtYXNrIG9mIEVWRU5UX1JFQUR8RVZFTlRfV1JJVEUpCisgICAgICAgIGRhdGEgICAgLS0gYXR0YWNoZWQgZGF0YQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIFNlbGVjdG9yS2V5IGluc3RhbmNlCisKKyAgICAgICAgUmFpc2VzOgorICAgICAgICBBbnl0aGluZyB0aGF0IHVucmVnaXN0ZXIoKSBvciByZWdpc3RlcigpIHJhaXNlcworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgIHJldHVybiBzZWxmLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgIiIiUGVyZm9ybSB0aGUgYWN0dWFsIHNlbGVjdGlvbiwgdW50aWwgc29tZSBtb25pdG9yZWQgZmlsZSBvYmplY3RzIGFyZQorICAgICAgICByZWFkeSBvciBhIHRpbWVvdXQgZXhwaXJlcy4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICB0aW1lb3V0IC0tIGlmIHRpbWVvdXQgPiAwLCB0aGlzIHNwZWNpZmllcyB0aGUgbWF4aW11bSB3YWl0IHRpbWUsIGluCisgICAgICAgICAgICAgICAgICAgc2Vjb25kcworICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPD0gMCwgdGhlIHNlbGVjdCgpIGNhbGwgd29uJ3QgYmxvY2ssIGFuZCB3aWxsCisgICAgICAgICAgICAgICAgICAgcmVwb3J0IHRoZSBjdXJyZW50bHkgcmVhZHkgZmlsZSBvYmplY3RzCisgICAgICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lLCBzZWxlY3QoKSB3aWxsIGJsb2NrIHVudGlsIGEgbW9uaXRvcmVkCisgICAgICAgICAgICAgICAgICAgZmlsZSBvYmplY3QgYmVjb21lcyByZWFkeQorCisgICAgICAgIFJldHVybnM6CisgICAgICAgIGxpc3Qgb2YgKGtleSwgZXZlbnRzKSBmb3IgcmVhZHkgZmlsZSBvYmplY3RzCisgICAgICAgIGBldmVudHNgIGlzIGEgYml0d2lzZSBtYXNrIG9mIEVWRU5UX1JFQUR8RVZFTlRfV1JJVEUKKyAgICAgICAgIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiQ2xvc2UgdGhlIHNlbGVjdG9yLgorCisgICAgICAgIFRoaXMgbXVzdCBiZSBjYWxsZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IHVuZGVybHlpbmcgcmVzb3VyY2UgaXMgZnJlZWQuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKyAgICBkZWYgZ2V0X2tleShzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBrZXkgYXNzb2NpYXRlZCB0byBhIHJlZ2lzdGVyZWQgZmlsZSBvYmplY3QuCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgU2VsZWN0b3JLZXkgZm9yIHRoaXMgZmlsZSBvYmplY3QKKyAgICAgICAgIiIiCisgICAgICAgIG1hcHBpbmcgPSBzZWxmLmdldF9tYXAoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBtYXBwaW5nIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IKKyAgICAgICAgICAgIHJldHVybiBtYXBwaW5nW2ZpbGVvYmpdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorCisgICAgQGFic3RyYWN0bWV0aG9kCisgICAgZGVmIGdldF9tYXAoc2VsZik6CisgICAgICAgICIiIlJldHVybiBhIG1hcHBpbmcgb2YgZmlsZSBvYmplY3RzIHRvIHNlbGVjdG9yIGtleXMuIiIiCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKworCitjbGFzcyBfQmFzZVNlbGVjdG9ySW1wbChCYXNlU2VsZWN0b3IpOgorICAgICIiIkJhc2Ugc2VsZWN0b3IgaW1wbGVtZW50YXRpb24uIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICMgdGhpcyBtYXBzIGZpbGUgZGVzY3JpcHRvcnMgdG8ga2V5cworICAgICAgICBzZWxmLl9mZF90b19rZXkgPSB7fQorICAgICAgICAjIHJlYWQtb25seSBtYXBwaW5nIHJldHVybmVkIGJ5IGdldF9tYXAoKQorICAgICAgICBzZWxmLl9tYXAgPSBfU2VsZWN0b3JNYXBwaW5nKHNlbGYpCisKKyAgICBkZWYgX2ZpbGVvYmpfbG9va3VwKHNlbGYsIGZpbGVvYmopOgorICAgICAgICAiIiJSZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IgZnJvbSBhIGZpbGUgb2JqZWN0LgorCisgICAgICAgIFRoaXMgd3JhcHMgX2ZpbGVvYmpfdG9fZmQoKSB0byBkbyBhbiBleGhhdXN0aXZlIHNlYXJjaCBpbiBjYXNlCisgICAgICAgIHRoZSBvYmplY3QgaXMgaW52YWxpZCBidXQgd2Ugc3RpbGwgaGF2ZSBpdCBpbiBvdXIgbWFwLiAgVGhpcworICAgICAgICBpcyB1c2VkIGJ5IHVucmVnaXN0ZXIoKSBzbyB3ZSBjYW4gdW5yZWdpc3RlciBhbiBvYmplY3QgdGhhdAorICAgICAgICB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkIGV2ZW4gaWYgaXQgaXMgY2xvc2VkLiAgSXQgaXMgYWxzbworICAgICAgICB1c2VkIGJ5IF9TZWxlY3Rvck1hcHBpbmcuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gX2ZpbGVvYmpfdG9fZmQoZmlsZW9iaikKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAjIERvIGFuIGV4aGF1c3RpdmUgc2VhcmNoLgorICAgICAgICAgICAgZm9yIGtleSBpbiBzZWxmLl9mZF90b19rZXkudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYga2V5LmZpbGVvYmogaXMgZmlsZW9iajoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGtleS5mZAorICAgICAgICAgICAgIyBSYWlzZSBWYWx1ZUVycm9yIGFmdGVyIGFsbC4KKyAgICAgICAgICAgIHJhaXNlCisKKyAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICBpZiAobm90IGV2ZW50cykgb3IgKGV2ZW50cyAmIH4oRVZFTlRfUkVBRCB8IEVWRU5UX1dSSVRFKSk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJbnZhbGlkIGV2ZW50czogeyFyfSIuZm9ybWF0KGV2ZW50cykpCisKKyAgICAgICAga2V5ID0gU2VsZWN0b3JLZXkoZmlsZW9iaiwgc2VsZi5fZmlsZW9ial9sb29rdXAoZmlsZW9iaiksIGV2ZW50cywgZGF0YSkKKworICAgICAgICBpZiBrZXkuZmQgaW4gc2VsZi5fZmRfdG9fa2V5OgorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3IoInshcn0gKEZEIHt9KSBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGZpbGVvYmosIGtleS5mZCkpCisKKyAgICAgICAgc2VsZi5fZmRfdG9fa2V5W2tleS5mZF0gPSBrZXkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2ZkX3RvX2tleS5wb3Aoc2VsZi5fZmlsZW9ial9sb29rdXAoZmlsZW9iaikpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCJ7IXJ9IGlzIG5vdCByZWdpc3RlcmVkIi5mb3JtYXQoZmlsZW9iaikpIGZyb20gTm9uZQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgbW9kaWZ5KHNlbGYsIGZpbGVvYmosIGV2ZW50cywgZGF0YT1Ob25lKToKKyAgICAgICAgIyBUT0RPOiBTdWJjbGFzc2VzIGNhbiBwcm9iYWJseSBvcHRpbWl6ZSB0aGlzIGV2ZW4gZnVydGhlci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAga2V5ID0gc2VsZi5fZmRfdG9fa2V5W3NlbGYuX2ZpbGVvYmpfbG9va3VwKGZpbGVvYmopXQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICByYWlzZSBLZXlFcnJvcigieyFyfSBpcyBub3QgcmVnaXN0ZXJlZCIuZm9ybWF0KGZpbGVvYmopKSBmcm9tIE5vbmUKKyAgICAgICAgaWYgZXZlbnRzICE9IGtleS5ldmVudHM6CisgICAgICAgICAgICBzZWxmLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIGtleSA9IHNlbGYucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICBlbGlmIGRhdGEgIT0ga2V5LmRhdGE6CisgICAgICAgICAgICAjIFVzZSBhIHNob3J0Y3V0IHRvIHVwZGF0ZSB0aGUgZGF0YS4KKyAgICAgICAgICAgIGtleSA9IGtleS5fcmVwbGFjZShkYXRhPWRhdGEpCisgICAgICAgICAgICBzZWxmLl9mZF90b19rZXlba2V5LmZkXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuX2ZkX3RvX2tleS5jbGVhcigpCisgICAgICAgIHNlbGYuX21hcCA9IE5vbmUKKworICAgIGRlZiBnZXRfbWFwKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbWFwCisKKyAgICBkZWYgX2tleV9mcm9tX2ZkKHNlbGYsIGZkKToKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBrZXkgYXNzb2NpYXRlZCB0byBhIGdpdmVuIGZpbGUgZGVzY3JpcHRvci4KKworICAgICAgICBQYXJhbWV0ZXJzOgorICAgICAgICBmZCAtLSBmaWxlIGRlc2NyaXB0b3IKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICBjb3JyZXNwb25kaW5nIGtleSwgb3IgTm9uZSBpZiBub3QgZm91bmQKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9mZF90b19rZXlbZmRdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgU2VsZWN0U2VsZWN0b3IoX0Jhc2VTZWxlY3RvckltcGwpOgorICAgICIiIlNlbGVjdC1iYXNlZCBzZWxlY3Rvci4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX3JlYWRlcnMgPSBzZXQoKQorICAgICAgICBzZWxmLl93cml0ZXJzID0gc2V0KCkKKworICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGtleSA9IHN1cGVyKCkucmVnaXN0ZXIoZmlsZW9iaiwgZXZlbnRzLCBkYXRhKQorICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgc2VsZi5fcmVhZGVycy5hZGQoa2V5LmZkKQorICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlcnMuYWRkKGtleS5mZCkKKyAgICAgICAgcmV0dXJuIGtleQorCisgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICBzZWxmLl9yZWFkZXJzLmRpc2NhcmQoa2V5LmZkKQorICAgICAgICBzZWxmLl93cml0ZXJzLmRpc2NhcmQoa2V5LmZkKQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgZGVmIF9zZWxlY3Qoc2VsZiwgciwgdywgXywgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHIsIHcsIHggPSBzZWxlY3Quc2VsZWN0KHIsIHcsIHcsIHRpbWVvdXQpCisgICAgICAgICAgICByZXR1cm4gciwgdyArIHgsIFtdCisgICAgZWxzZToKKyAgICAgICAgX3NlbGVjdCA9IHNlbGVjdC5zZWxlY3QKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgdGltZW91dCA9IE5vbmUgaWYgdGltZW91dCBpcyBOb25lIGVsc2UgbWF4KHRpbWVvdXQsIDApCisgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgciwgdywgXyA9IHNlbGYuX3NlbGVjdChzZWxmLl9yZWFkZXJzLCBzZWxmLl93cml0ZXJzLCBbXSwgdGltZW91dCkKKyAgICAgICAgZXhjZXB0IEludGVycnVwdGVkRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKyAgICAgICAgciA9IHNldChyKQorICAgICAgICB3ID0gc2V0KHcpCisgICAgICAgIGZvciBmZCBpbiByIHwgdzoKKyAgICAgICAgICAgIGV2ZW50cyA9IDAKKyAgICAgICAgICAgIGlmIGZkIGluIHI6CisgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1JFQUQKKyAgICAgICAgICAgIGlmIGZkIGluIHc6CisgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisKKyAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgcmV0dXJuIHJlYWR5CisKKworaWYgaGFzYXR0cihzZWxlY3QsICdwb2xsJyk6CisKKyAgICBjbGFzcyBQb2xsU2VsZWN0b3IoX0Jhc2VTZWxlY3RvckltcGwpOgorICAgICAgICAiIiJQb2xsLWJhc2VkIHNlbGVjdG9yLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgc2VsZi5fcG9sbCA9IHNlbGVjdC5wb2xsKCkKKworICAgICAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgICAgICBwb2xsX2V2ZW50cyA9IDAKKyAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgcG9sbF9ldmVudHMgfD0gc2VsZWN0LlBPTExJTgorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgcG9sbF9ldmVudHMgfD0gc2VsZWN0LlBPTExPVVQKKyAgICAgICAgICAgIHNlbGYuX3BvbGwucmVnaXN0ZXIoa2V5LmZkLCBwb2xsX2V2ZW50cykKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgc2VsZi5fcG9sbC51bnJlZ2lzdGVyKGtleS5mZCkKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKKyAgICAgICAgICAgIGVsaWYgdGltZW91dCA8PSAwOgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgcG9sbCgpIGhhcyBhIHJlc29sdXRpb24gb2YgMSBtaWxsaXNlY29uZCwgcm91bmQgYXdheSBmcm9tCisgICAgICAgICAgICAgICAgIyB6ZXJvIHRvIHdhaXQgKmF0IGxlYXN0KiB0aW1lb3V0IHNlY29uZHMuCisgICAgICAgICAgICAgICAgdGltZW91dCA9IG1hdGguY2VpbCh0aW1lb3V0ICogMWUzKQorICAgICAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkX2V2ZW50X2xpc3QgPSBzZWxmLl9wb2xsLnBvbGwodGltZW91dCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICAgICAgZm9yIGZkLCBldmVudCBpbiBmZF9ldmVudF9saXN0OgorICAgICAgICAgICAgICAgIGV2ZW50cyA9IDAKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuUE9MTElOOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfV1JJVEUKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuUE9MTE9VVDoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1JFQUQKKworICAgICAgICAgICAgICAgIGtleSA9IHNlbGYuX2tleV9mcm9tX2ZkKGZkKQorICAgICAgICAgICAgICAgIGlmIGtleToKKyAgICAgICAgICAgICAgICAgICAgcmVhZHkuYXBwZW5kKChrZXksIGV2ZW50cyAmIGtleS5ldmVudHMpKQorICAgICAgICAgICAgcmV0dXJuIHJlYWR5CisKKworaWYgaGFzYXR0cihzZWxlY3QsICdlcG9sbCcpOgorCisgICAgY2xhc3MgRXBvbGxTZWxlY3RvcihfQmFzZVNlbGVjdG9ySW1wbCk6CisgICAgICAgICIiIkVwb2xsLWJhc2VkIHNlbGVjdG9yLiIiIgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgc2VsZi5fZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorCisgICAgICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZXBvbGwuZmlsZW5vKCkKKworICAgICAgICBkZWYgcmVnaXN0ZXIoc2VsZiwgZmlsZW9iaiwgZXZlbnRzLCBkYXRhPU5vbmUpOgorICAgICAgICAgICAga2V5ID0gc3VwZXIoKS5yZWdpc3RlcihmaWxlb2JqLCBldmVudHMsIGRhdGEpCisgICAgICAgICAgICBlcG9sbF9ldmVudHMgPSAwCisgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIGVwb2xsX2V2ZW50cyB8PSBzZWxlY3QuRVBPTExJTgorICAgICAgICAgICAgaWYgZXZlbnRzICYgRVZFTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgZXBvbGxfZXZlbnRzIHw9IHNlbGVjdC5FUE9MTE9VVAorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2Vwb2xsLnJlZ2lzdGVyKGtleS5mZCwgZXBvbGxfZXZlbnRzKQorICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICAgICAgc3VwZXIoKS51bnJlZ2lzdGVyKGZpbGVvYmopCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgICAgIGtleSA9IHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX2Vwb2xsLnVucmVnaXN0ZXIoa2V5LmZkKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIEZEIHdhcyBjbG9zZWQgc2luY2UgaXQKKyAgICAgICAgICAgICAgICAjIHdhcyByZWdpc3RlcmVkLgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHJldHVybiBrZXkKKworICAgICAgICBkZWYgc2VsZWN0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CisgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgdGltZW91dCA9IC0xCisgICAgICAgICAgICBlbGlmIHRpbWVvdXQgPD0gMDoKKyAgICAgICAgICAgICAgICB0aW1lb3V0ID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGVwb2xsX3dhaXQoKSBoYXMgYSByZXNvbHV0aW9uIG9mIDEgbWlsbGlzZWNvbmQsIHJvdW5kIGF3YXkKKyAgICAgICAgICAgICAgICAjIGZyb20gemVybyB0byB3YWl0ICphdCBsZWFzdCogdGltZW91dCBzZWNvbmRzLgorICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBtYXRoLmNlaWwodGltZW91dCAqIDFlMykgKiAxZS0zCisKKyAgICAgICAgICAgICMgZXBvbGxfd2FpdCgpIGV4cGVjdHMgYG1heGV2ZW50c2AgdG8gYmUgZ3JlYXRlciB0aGFuIHplcm87CisgICAgICAgICAgICAjIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHRoYXQgYHNlbGVjdCgpYCBjYW4gYmUgY2FsbGVkIHdoZW4gbm8KKyAgICAgICAgICAgICMgRkQgaXMgcmVnaXN0ZXJlZC4KKyAgICAgICAgICAgIG1heF9ldiA9IG1heChsZW4oc2VsZi5fZmRfdG9fa2V5KSwgMSkKKworICAgICAgICAgICAgcmVhZHkgPSBbXQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGZkX2V2ZW50X2xpc3QgPSBzZWxmLl9lcG9sbC5wb2xsKHRpbWVvdXQsIG1heF9ldikKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICAgICAgZm9yIGZkLCBldmVudCBpbiBmZF9ldmVudF9saXN0OgorICAgICAgICAgICAgICAgIGV2ZW50cyA9IDAKKyAgICAgICAgICAgICAgICBpZiBldmVudCAmIH5zZWxlY3QuRVBPTExJTjoKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisgICAgICAgICAgICAgICAgaWYgZXZlbnQgJiB+c2VsZWN0LkVQT0xMT1VUOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorCisgICAgICAgICAgICAgICAga2V5ID0gc2VsZi5fa2V5X2Zyb21fZmQoZmQpCisgICAgICAgICAgICAgICAgaWYga2V5OgorICAgICAgICAgICAgICAgICAgICByZWFkeS5hcHBlbmQoKGtleSwgZXZlbnRzICYga2V5LmV2ZW50cykpCisgICAgICAgICAgICByZXR1cm4gcmVhZHkKKworICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5fZXBvbGwuY2xvc2UoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworCitpZiBoYXNhdHRyKHNlbGVjdCwgJ2txdWV1ZScpOgorCisgICAgY2xhc3MgS3F1ZXVlU2VsZWN0b3IoX0Jhc2VTZWxlY3RvckltcGwpOgorICAgICAgICAiIiJLcXVldWUtYmFzZWQgc2VsZWN0b3IuIiIiCisKKyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgICAgICBzZWxmLl9rcXVldWUgPSBzZWxlY3Qua3F1ZXVlKCkKKworICAgICAgICBkZWYgZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2txdWV1ZS5maWxlbm8oKQorCisgICAgICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnJlZ2lzdGVyKGZpbGVvYmosIGV2ZW50cywgZGF0YSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9SRUFELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9BREQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2txdWV1ZS5jb250cm9sKFtrZXZdLCAwLCAwKQorICAgICAgICAgICAgICAgIGlmIGV2ZW50cyAmIEVWRU5UX1dSSVRFOgorICAgICAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfQUREKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHN1cGVyKCkudW5yZWdpc3RlcihmaWxlb2JqKQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICByZXR1cm4ga2V5CisKKyAgICAgICAgZGVmIHVucmVnaXN0ZXIoc2VsZiwgZmlsZW9iaik6CisgICAgICAgICAgICBrZXkgPSBzdXBlcigpLnVucmVnaXN0ZXIoZmlsZW9iaikKKyAgICAgICAgICAgIGlmIGtleS5ldmVudHMgJiBFVkVOVF9SRUFEOgorICAgICAgICAgICAgICAgIGtldiA9IHNlbGVjdC5rZXZlbnQoa2V5LmZkLCBzZWxlY3QuS1FfRklMVEVSX1JFQUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QuS1FfRVZfREVMRVRFKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fa3F1ZXVlLmNvbnRyb2woW2tldl0sIDAsIDApCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBjYW4gaGFwcGVuIGlmIHRoZSBGRCB3YXMgY2xvc2VkIHNpbmNlIGl0CisgICAgICAgICAgICAgICAgICAgICMgd2FzIHJlZ2lzdGVyZWQuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIGtleS5ldmVudHMgJiBFVkVOVF9XUklURToKKyAgICAgICAgICAgICAgICBrZXYgPSBzZWxlY3Qua2V2ZW50KGtleS5mZCwgc2VsZWN0LktRX0ZJTFRFUl9XUklURSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdC5LUV9FVl9ERUxFVEUpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY29udHJvbChba2V2XSwgMCwgMCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBTZWUgY29tbWVudCBhYm92ZS4KKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGtleQorCisgICAgICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKKyAgICAgICAgICAgIHRpbWVvdXQgPSBOb25lIGlmIHRpbWVvdXQgaXMgTm9uZSBlbHNlIG1heCh0aW1lb3V0LCAwKQorICAgICAgICAgICAgbWF4X2V2ID0gbGVuKHNlbGYuX2ZkX3RvX2tleSkKKyAgICAgICAgICAgIHJlYWR5ID0gW10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBrZXZfbGlzdCA9IHNlbGYuX2txdWV1ZS5jb250cm9sKE5vbmUsIG1heF9ldiwgdGltZW91dCkKKyAgICAgICAgICAgIGV4Y2VwdCBJbnRlcnJ1cHRlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiByZWFkeQorICAgICAgICAgICAgZm9yIGtldiBpbiBrZXZfbGlzdDoKKyAgICAgICAgICAgICAgICBmZCA9IGtldi5pZGVudAorICAgICAgICAgICAgICAgIGZsYWcgPSBrZXYuZmlsdGVyCisgICAgICAgICAgICAgICAgZXZlbnRzID0gMAorICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gc2VsZWN0LktRX0ZJTFRFUl9SRUFEOgorICAgICAgICAgICAgICAgICAgICBldmVudHMgfD0gRVZFTlRfUkVBRAorICAgICAgICAgICAgICAgIGlmIGZsYWcgPT0gc2VsZWN0LktRX0ZJTFRFUl9XUklURToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzIHw9IEVWRU5UX1dSSVRFCisKKyAgICAgICAgICAgICAgICBrZXkgPSBzZWxmLl9rZXlfZnJvbV9mZChmZCkKKyAgICAgICAgICAgICAgICBpZiBrZXk6CisgICAgICAgICAgICAgICAgICAgIHJlYWR5LmFwcGVuZCgoa2V5LCBldmVudHMgJiBrZXkuZXZlbnRzKSkKKyAgICAgICAgICAgIHJldHVybiByZWFkeQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLl9rcXVldWUuY2xvc2UoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNsb3NlKCkKKworCisjIENob29zZSB0aGUgYmVzdCBpbXBsZW1lbnRhdGlvbjogcm91Z2hseSwgZXBvbGx8a3F1ZXVlID4gcG9sbCA+IHNlbGVjdC4KKyMgc2VsZWN0KCkgYWxzbyBjYW4ndCBhY2NlcHQgYSBGRCA+IEZEX1NFVFNJWkUgKHVzdWFsbHkgYXJvdW5kIDEwMjQpCitpZiAnS3F1ZXVlU2VsZWN0b3InIGluIGdsb2JhbHMoKToKKyAgICBEZWZhdWx0U2VsZWN0b3IgPSBLcXVldWVTZWxlY3RvcgorZWxpZiAnRXBvbGxTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IEVwb2xsU2VsZWN0b3IKK2VsaWYgJ1BvbGxTZWxlY3RvcicgaW4gZ2xvYmFscygpOgorICAgIERlZmF1bHRTZWxlY3RvciA9IFBvbGxTZWxlY3RvcgorZWxzZToKKyAgICBEZWZhdWx0U2VsZWN0b3IgPSBTZWxlY3RTZWxlY3RvcgpkaWZmIC0tZ2l0IGEvTGliL3NoZWx2ZS5weSBiL0xpYi9zaGVsdmUucHkKaW5kZXggY2MxODE1ZS4uNTgxYmFmMSAxMDA2NDQKLS0tIGEvTGliL3NoZWx2ZS5weQorKysgYi9MaWIvc2hlbHZlLnB5CkBAIC02MSw3ICs2MSw3IEBACiAKIGltcG9ydCBjb2xsZWN0aW9ucwogCi1fX2FsbF9fID0gWyJTaGVsZiIsIkJzZERiU2hlbGYiLCJEYmZpbGVuYW1lU2hlbGYiLCJvcGVuIl0KK19fYWxsX18gPSBbIlNoZWxmIiwgIkJzZERiU2hlbGYiLCAiRGJmaWxlbmFtZVNoZWxmIiwgIm9wZW4iXQogCiBjbGFzcyBfQ2xvc2VkRGljdChjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CiAgICAgJ01hcmtlciBmb3IgYSBjbG9zZWQgZGljdC4gIEFjY2VzcyBhdHRlbXB0cyByYWlzZSBhIFZhbHVlRXJyb3IuJwpAQCAtMTMxLDIyICsxMzEsMzMgQEAKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuc3luYygpCisgICAgICAgIGlmIHNlbGYuZGljdCBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuZGljdC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgIyBDYXRjaCBlcnJvcnMgdGhhdCBtYXkgaGFwcGVuIHdoZW4gY2xvc2UgaXMgY2FsbGVkIGZyb20gX19kZWxfXwotICAgICAgICAjIGJlY2F1c2UgQ1B5dGhvbiBpcyBpbiBpbnRlcnByZXRlciBzaHV0ZG93bi4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5kaWN0ID0gX0Nsb3NlZERpY3QoKQotICAgICAgICBleGNlcHQgKE5hbWVFcnJvciwgVHlwZUVycm9yKToKLSAgICAgICAgICAgIHNlbGYuZGljdCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuc3luYygpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5kaWN0LmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAjIENhdGNoIGVycm9ycyB0aGF0IG1heSBoYXBwZW4gd2hlbiBjbG9zZSBpcyBjYWxsZWQgZnJvbSBfX2RlbF9fCisgICAgICAgICAgICAjIGJlY2F1c2UgQ1B5dGhvbiBpcyBpbiBpbnRlcnByZXRlciBzaHV0ZG93bi4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmRpY3QgPSBfQ2xvc2VkRGljdCgpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgc2VsZi5kaWN0ID0gTm9uZQogCiAgICAgZGVmIF9fZGVsX18oc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNlbGYsICd3cml0ZWJhY2snKToKICAgICAgICAgICAgICMgX19pbml0X18gZGlkbid0IHN1Y2NlZWQsIHNvIGRvbid0IGJvdGhlciBjbG9zaW5nCisgICAgICAgICAgICAjIHNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTMzOTAwNyBmb3IgZGV0YWlscwogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9MaWIvc2hsZXgucHkgYi9MaWIvc2hsZXgucHkKaW5kZXggNjlmM2I0NS4uNDY3MjU1MyAxMDA2NDQKLS0tIGEvTGliL3NobGV4LnB5CisrKyBiL0xpYi9zaGxleC5weQpAQCAtMjkwLDE1ICsyOTAsMTcgQEAKICAgICByZXR1cm4gIiciICsgcy5yZXBsYWNlKCInIiwgIidcIidcIiciKSArICInIgogCiAKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgotICAgICAgICBsZXhlciA9IHNobGV4KCkKLSAgICBlbHNlOgotICAgICAgICBmaWxlID0gc3lzLmFyZ3ZbMV0KLSAgICAgICAgbGV4ZXIgPSBzaGxleChvcGVuKGZpbGUpLCBmaWxlKQorZGVmIF9wcmludF90b2tlbnMobGV4ZXIpOgogICAgIHdoaWxlIDE6CiAgICAgICAgIHR0ID0gbGV4ZXIuZ2V0X3Rva2VuKCkKLSAgICAgICAgaWYgdHQ6Ci0gICAgICAgICAgICBwcmludCgiVG9rZW46ICIgKyByZXByKHR0KSkKLSAgICAgICAgZWxzZToKKyAgICAgICAgaWYgbm90IHR0OgogICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHJpbnQoIlRva2VuOiAiICsgcmVwcih0dCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgorICAgICAgICBfcHJpbnRfdG9rZW5zKHNobGV4KCkpCisgICAgZWxzZToKKyAgICAgICAgZm4gPSBzeXMuYXJndlsxXQorICAgICAgICB3aXRoIG9wZW4oZm4pIGFzIGY6CisgICAgICAgICAgICBfcHJpbnRfdG9rZW5zKHNobGV4KGYsIGZuKSkKZGlmZiAtLWdpdCBhL0xpYi9zaHV0aWwucHkgYi9MaWIvc2h1dGlsLnB5CmluZGV4IDVhNGQ0ZjYuLmQ3NjdhMGMgMTAwNjQ0Ci0tLSBhL0xpYi9zaHV0aWwucHkKKysrIGIvTGliL3NodXRpbC5weQpAQCAtMzYsMjAgKzM2LDI0IEBACiAgICAgICAgICAgICJyZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCIsICJ1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0IiwKICAgICAgICAgICAgImdldF91bnBhY2tfZm9ybWF0cyIsICJyZWdpc3Rlcl91bnBhY2tfZm9ybWF0IiwKICAgICAgICAgICAgInVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCIsICJ1bnBhY2tfYXJjaGl2ZSIsCi0gICAgICAgICAgICJpZ25vcmVfcGF0dGVybnMiLCAiY2hvd24iLCAid2hpY2giXQorICAgICAgICAgICAiaWdub3JlX3BhdHRlcm5zIiwgImNob3duIiwgIndoaWNoIiwgImdldF90ZXJtaW5hbF9zaXplIiwKKyAgICAgICAgICAgIlNhbWVGaWxlRXJyb3IiXQogICAgICAgICAgICAjIGRpc2tfdXNhZ2UgaXMgYWRkZWQgbGF0ZXIsIGlmIGF2YWlsYWJsZSBvbiB0aGUgcGxhdGZvcm0KIAotY2xhc3MgRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBFcnJvcihPU0Vycm9yKToKICAgICBwYXNzCiAKLWNsYXNzIFNwZWNpYWxGaWxlRXJyb3IoRW52aXJvbm1lbnRFcnJvcik6CitjbGFzcyBTYW1lRmlsZUVycm9yKEVycm9yKToKKyAgICAiIiJSYWlzZWQgd2hlbiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSBmaWxlLiIiIgorCitjbGFzcyBTcGVjaWFsRmlsZUVycm9yKE9TRXJyb3IpOgogICAgICIiIlJhaXNlZCB3aGVuIHRyeWluZyB0byBkbyBhIGtpbmQgb2Ygb3BlcmF0aW9uIChlLmcuIGNvcHlpbmcpIHdoaWNoIGlzCiAgICAgbm90IHN1cHBvcnRlZCBvbiBhIHNwZWNpYWwgZmlsZSAoZS5nLiBhIG5hbWVkIHBpcGUpIiIiCiAKLWNsYXNzIEV4ZWNFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIEV4ZWNFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhIGNvbW1hbmQgY291bGQgbm90IGJlIGV4ZWN1dGVkIiIiCiAKLWNsYXNzIFJlYWRFcnJvcihFbnZpcm9ubWVudEVycm9yKToKK2NsYXNzIFJlYWRFcnJvcihPU0Vycm9yKToKICAgICAiIiJSYWlzZWQgd2hlbiBhbiBhcmNoaXZlIGNhbm5vdCBiZSByZWFkIiIiCiAKIGNsYXNzIFJlZ2lzdHJ5RXJyb3IoRXhjZXB0aW9uKToKQEAgLTU3LDExICs2MSw2IEBACiAgICAgYW5kIHVucGFja2luZyByZWdpc3RlcmllcyBmYWlscyIiIgogCiAKLXRyeToKLSAgICBXaW5kb3dzRXJyb3IKLWV4Y2VwdCBOYW1lRXJyb3I6Ci0gICAgV2luZG93c0Vycm9yID0gTm9uZQotCiBkZWYgY29weWZpbGVvYmooZnNyYywgZmRzdCwgbGVuZ3RoPTE2KjEwMjQpOgogICAgICIiImNvcHkgZGF0YSBmcm9tIGZpbGUtbGlrZSBvYmplY3QgZnNyYyB0byBmaWxlLWxpa2Ugb2JqZWN0IGZkc3QiIiIKICAgICB3aGlsZSAxOgpAQCAtOTAsNyArODksNyBAQAogCiAgICAgIiIiCiAgICAgaWYgX3NhbWVmaWxlKHNyYywgZHN0KToKLSAgICAgICAgcmFpc2UgRXJyb3IoImAlc2AgYW5kIGAlc2AgYXJlIHRoZSBzYW1lIGZpbGUiICUgKHNyYywgZHN0KSkKKyAgICAgICAgcmFpc2UgU2FtZUZpbGVFcnJvcigieyFyfSBhbmQgeyFyfSBhcmUgdGhlIHNhbWUgZmlsZSIuZm9ybWF0KHNyYywgZHN0KSkKIAogICAgIGZvciBmbiBpbiBbc3JjLCBkc3RdOgogICAgICAgICB0cnk6CkBAIC0yMjEsNiArMjIwLDkgQEAKICAgICBJZiBmb2xsb3dfc3ltbGlua3MgaXMgZmFsc2UsIHN5bWxpbmtzIHdvbid0IGJlIGZvbGxvd2VkLiBUaGlzCiAgICAgcmVzZW1ibGVzIEdOVSdzICJjcCAtUCBzcmMgZHN0Ii4KIAorICAgIElmIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUsIGEgU2FtZUZpbGVFcnJvciB3aWxsIGJlCisgICAgcmFpc2VkLgorCiAgICAgIiIiCiAgICAgaWYgb3MucGF0aC5pc2Rpcihkc3QpOgogICAgICAgICBkc3QgPSBvcy5wYXRoLmpvaW4oZHN0LCBvcy5wYXRoLmJhc2VuYW1lKHNyYykpCkBAIC0zMTksNyArMzIxLDExIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsaW5rdG8pIGFuZCBpZ25vcmVfZGFuZ2xpbmdfc3ltbGlua3M6CiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICAjIG90aGVyd2lzZSBsZXQgdGhlIGNvcHkgb2NjdXJzLiBjb3B5MiB3aWxsIHJhaXNlIGFuIGVycm9yCi0gICAgICAgICAgICAgICAgICAgIGNvcHlfZnVuY3Rpb24oc3JjbmFtZSwgZHN0bmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihzcmNuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHl0cmVlKHNyY25hbWUsIGRzdG5hbWUsIHN5bWxpbmtzLCBpZ25vcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X2Z1bmN0aW9uKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY29weV9mdW5jdGlvbihzcmNuYW1lLCBkc3RuYW1lKQogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHNyY25hbWUpOgogICAgICAgICAgICAgICAgIGNvcHl0cmVlKHNyY25hbWUsIGRzdG5hbWUsIHN5bWxpbmtzLCBpZ25vcmUsIGNvcHlfZnVuY3Rpb24pCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzI5LDE1ICszMzUsMTMgQEAKICAgICAgICAgIyBjb250aW51ZSB3aXRoIG90aGVyIGZpbGVzCiAgICAgICAgIGV4Y2VwdCBFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBlcnJvcnMuZXh0ZW5kKGVyci5hcmdzWzBdKQotICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyB3aHk6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoKHNyY25hbWUsIGRzdG5hbWUsIHN0cih3aHkpKSkKICAgICB0cnk6CiAgICAgICAgIGNvcHlzdGF0KHNyYywgZHN0KQogICAgIGV4Y2VwdCBPU0Vycm9yIGFzIHdoeToKLSAgICAgICAgaWYgV2luZG93c0Vycm9yIGlzIG5vdCBOb25lIGFuZCBpc2luc3RhbmNlKHdoeSwgV2luZG93c0Vycm9yKToKLSAgICAgICAgICAgICMgQ29weWluZyBmaWxlIGFjY2VzcyB0aW1lcyBtYXkgZmFpbCBvbiBXaW5kb3dzCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6CisgICAgICAgICMgQ29weWluZyBmaWxlIGFjY2VzcyB0aW1lcyBtYXkgZmFpbCBvbiBXaW5kb3dzCisgICAgICAgIGlmIGdldGF0dHIod2h5LCAnd2luZXJyb3InLCBOb25lKSBpcyBOb25lOgogICAgICAgICAgICAgZXJyb3JzLmFwcGVuZCgoc3JjLCBkc3QsIHN0cih3aHkpKSkKICAgICBpZiBlcnJvcnM6CiAgICAgICAgIHJhaXNlIEVycm9yKGVycm9ycykKQEAgLTM1NiwyNCArMzYwLDI0IEBACiAgICAgbmFtZXMgPSBbXQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHBhdGgpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBvbmVycm9yKG9zLmxpc3RkaXIsIHBhdGgsIHN5cy5leGNfaW5mbygpKQogICAgIGZvciBuYW1lIGluIG5hbWVzOgogICAgICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBuYW1lKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtb2RlID0gb3MubHN0YXQoZnVsbG5hbWUpLnN0X21vZGUKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG1vZGUgPSAwCiAgICAgICAgIGlmIHN0YXQuU19JU0RJUihtb2RlKToKICAgICAgICAgICAgIF9ybXRyZWVfdW5zYWZlKGZ1bGxuYW1lLCBvbmVycm9yKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnVubGluayhmdWxsbmFtZSkKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIG9uZXJyb3Iob3MudW5saW5rLCBmdWxsbmFtZSwgc3lzLmV4Y19pbmZvKCkpCiAgICAgdHJ5OgogICAgICAgICBvcy5ybWRpcihwYXRoKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgb25lcnJvcihvcy5ybWRpciwgcGF0aCwgc3lzLmV4Y19pbmZvKCkpCiAKICMgVmVyc2lvbiB1c2luZyBmZC1iYXNlZCBBUElzIHRvIHByb3RlY3QgYWdhaW5zdCByYWNlcwpAQCAtNDY0LDcgKzQ2OCw3IEBACiAgICAgICAgICAgICAgICAgX3JtdHJlZV9zYWZlX2ZkKGZkLCBwYXRoLCBvbmVycm9yKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIocGF0aCkKLSAgICAgICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIG9uZXJyb3Iob3Mucm1kaXIsIHBhdGgsIHN5cy5leGNfaW5mbygpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0cnk6CkBAIC02MDAsNyArNjA0LDcgQEAKICAgICBhcmNoaXZlX25hbWUgPSBiYXNlX25hbWUgKyAnLnRhcicgKyBjb21wcmVzc19leHQuZ2V0KGNvbXByZXNzLCAnJykKICAgICBhcmNoaXZlX2RpciA9IG9zLnBhdGguZGlybmFtZShhcmNoaXZlX25hbWUpCiAKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgorICAgIGlmIGFyY2hpdmVfZGlyIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgogICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiY3JlYXRpbmcgJXMiLCBhcmNoaXZlX2RpcikKICAgICAgICAgaWYgbm90IGRyeV9ydW46CkBAIC02NjAsNyArNjY0LDcgQEAKICAgICB6aXBfZmlsZW5hbWUgPSBiYXNlX25hbWUgKyAiLnppcCIKICAgICBhcmNoaXZlX2RpciA9IG9zLnBhdGguZGlybmFtZShiYXNlX25hbWUpCiAKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgorICAgIGlmIGFyY2hpdmVfZGlyIGFuZCBub3Qgb3MucGF0aC5leGlzdHMoYXJjaGl2ZV9kaXIpOgogICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBsb2dnZXIuaW5mbygiY3JlYXRpbmcgJXMiLCBhcmNoaXZlX2RpcikKICAgICAgICAgaWYgbm90IGRyeV9ydW46CkBAIC02ODMsNyArNjg3LDE2IEBACiAgICAgICAgIGlmIG5vdCBkcnlfcnVuOgogICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoemlwX2ZpbGVuYW1lLCAidyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbj16aXBmaWxlLlpJUF9ERUZMQVRFRCkgYXMgemY6CisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGgubm9ybXBhdGgoYmFzZV9kaXIpCisgICAgICAgICAgICAgICAgemYud3JpdGUocGF0aCwgcGF0aCkKKyAgICAgICAgICAgICAgICBpZiBsb2dnZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJhZGRpbmcgJyVzJyIsIHBhdGgpCiAgICAgICAgICAgICAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2FsayhiYXNlX2Rpcik6CisgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChkaXJuYW1lcyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5ub3JtcGF0aChvcy5wYXRoLmpvaW4oZGlycGF0aCwgbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICB6Zi53cml0ZShwYXRoLCBwYXRoKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbG9nZ2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2dlci5pbmZvKCJhZGRpbmcgJyVzJyIsIHBhdGgpCiAgICAgICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIGZpbGVuYW1lczoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLm5vcm1wYXRoKG9zLnBhdGguam9pbihkaXJwYXRoLCBuYW1lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHBhdGgpOgpkaWZmIC0tZ2l0IGEvTGliL3NpdGUucHkgYi9MaWIvc2l0ZS5weQppbmRleCA3ZTA5NzAxLi4zYzg1ODRiIDEwMDY0NAotLS0gYS9MaWIvc2l0ZS5weQorKysgYi9MaWIvc2l0ZS5weQpAQCAtNTgsMTcgKzU4LDIwIEBACiBiZWNhdXNlIGJhci5wdGggY29tZXMgYWxwaGFiZXRpY2FsbHkgYmVmb3JlIGZvby5wdGg7IGFuZCBzcGFtIGlzCiBvbWl0dGVkIGJlY2F1c2UgaXQgaXMgbm90IG1lbnRpb25lZCBpbiBlaXRoZXIgcGF0aCBjb25maWd1cmF0aW9uIGZpbGUuCiAKLUFmdGVyIHRoZXNlIHBhdGggbWFuaXB1bGF0aW9ucywgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGltcG9ydCBhIG1vZHVsZQorVGhlIHJlYWRsaW5lIG1vZHVsZSBpcyBhbHNvIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlZCB0byBlbmFibGUKK2NvbXBsZXRpb24gZm9yIHN5c3RlbXMgdGhhdCBzdXBwb3J0IGl0LiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluCitzaXRlY3VzdG9taXplLCB1c2VyY3VzdG9taXplIG9yIFBZVEhPTlNUQVJUVVAuCisKK0FmdGVyIHRoZXNlIG9wZXJhdGlvbnMsIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBpbXBvcnQgYSBtb2R1bGUKIG5hbWVkIHNpdGVjdXN0b21pemUsIHdoaWNoIGNhbiBwZXJmb3JtIGFyYml0cmFyeSBhZGRpdGlvbmFsCiBzaXRlLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zLiAgSWYgdGhpcyBpbXBvcnQgZmFpbHMgd2l0aCBhbgogSW1wb3J0RXJyb3IgZXhjZXB0aW9uLCBpdCBpcyBzaWxlbnRseSBpZ25vcmVkLgotCiAiIiIKIAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCi1pbXBvcnQgcmUKIGltcG9ydCBidWlsdGlucworaW1wb3J0IF9zaXRlYnVpbHRpbnMKIAogIyBQcmVmaXhlcyBmb3Igc2l0ZS1wYWNrYWdlczsgYWRkIGFkZGl0aW9uYWwgcHJlZml4ZXMgbGlrZSAvdXNyL2xvY2FsIGhlcmUKIFBSRUZJWEVTID0gW3N5cy5wcmVmaXgsIHN5cy5leGVjX3ByZWZpeF0KQEAgLTE0NiwxNCArMTQ5LDE0IEBACiAgICAgICAgYW5kIGFkZCB0aGF0IHRvIGtub3duX3BhdGhzLCBvciBleGVjdXRlIGl0IGlmIGl0IHN0YXJ0cyB3aXRoICdpbXBvcnQgJy4KICAgICAiIiIKICAgICBpZiBrbm93bl9wYXRocyBpcyBOb25lOgotICAgICAgICBfaW5pdF9wYXRoaW5mbygpCisgICAgICAgIGtub3duX3BhdGhzID0gX2luaXRfcGF0aGluZm8oKQogICAgICAgICByZXNldCA9IDEKICAgICBlbHNlOgogICAgICAgICByZXNldCA9IDAKICAgICBmdWxsbmFtZSA9IG9zLnBhdGguam9pbihzaXRlZGlyLCBuYW1lKQogICAgIHRyeToKICAgICAgICAgZiA9IG9wZW4oZnVsbG5hbWUsICJyIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuCiAgICAgd2l0aCBmOgogICAgICAgICBmb3IgbiwgbGluZSBpbiBlbnVtZXJhdGUoZik6CkBAIC0xOTYsNyArMTk5LDcgQEAKICAgICAgICAga25vd25fcGF0aHMuYWRkKHNpdGVkaXJjYXNlKQogICAgIHRyeToKICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKHNpdGVkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4KICAgICBuYW1lcyA9IFtuYW1lIGZvciBuYW1lIGluIG5hbWVzIGlmIG5hbWUuZW5kc3dpdGgoIi5wdGgiKV0KICAgICBmb3IgbmFtZSBpbiBzb3J0ZWQobmFtZXMpOgpAQCAtMzAwLDkgKzMwMyw3IEBACiAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICBzZWVuLmFkZChwcmVmaXgpCiAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAiTGliIiwgInNpdGUtcGFja2FnZXMiKSkKLSAgICAgICAgZWxpZiBvcy5zZXAgPT0gJy8nOgorICAgICAgICBpZiBvcy5zZXAgPT0gJy8nOgogICAgICAgICAgICAgc2l0ZXBhY2thZ2VzLmFwcGVuZChvcy5wYXRoLmpvaW4ocHJlZml4LCAibGliIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIiArIHN5cy52ZXJzaW9uWzozXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2l0ZS1wYWNrYWdlcyIpKQpAQCAtMzI1LDI3ICszMjYsMTUgQEAKICAgICAiIiJBZGQgc2l0ZS1wYWNrYWdlcyAoYW5kIHBvc3NpYmx5IHNpdGUtcHl0aG9uKSB0byBzeXMucGF0aCIiIgogICAgIGZvciBzaXRlZGlyIGluIGdldHNpdGVwYWNrYWdlcyhwcmVmaXhlcyk6CiAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoc2l0ZWRpcik6CisgICAgICAgICAgICBpZiAic2l0ZS1weXRob24iIGluIHNpdGVkaXI6CisgICAgICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybignInNpdGUtcHl0aG9uIiBkaXJlY3RvcmllcyB3aWxsIG5vdCBiZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3VwcG9ydGVkIGluIDMuNSBhbnltb3JlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIGFkZHNpdGVkaXIoc2l0ZWRpciwga25vd25fcGF0aHMpCiAKICAgICByZXR1cm4ga25vd25fcGF0aHMKIAotZGVmIHNldEJFR0lOTElCUEFUSCgpOgotICAgICIiIlRoZSBPUy8yIEVNWCBwb3J0IGhhcyBvcHRpb25hbCBleHRlbnNpb24gbW9kdWxlcyB0aGF0IGRvIGRvdWJsZSBkdXR5Ci0gICAgYXMgRExMcyAoYW5kIG11c3QgdXNlIHRoZSAuRExMIGZpbGUgZXh0ZW5zaW9uKSBmb3Igb3RoZXIgZXh0ZW5zaW9ucy4KLSAgICBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCBuZWVkcyB0byBiZSBhbWVuZGVkIHNvIHRoZXNlIHdpbGwgYmUgZm91bmQKLSAgICBkdXJpbmcgbW9kdWxlIGltcG9ydC4gIFVzZSBCRUdJTkxJQlBBVEggc28gdGhhdCB0aGVzZSBhcmUgYXQgdGhlIHN0YXJ0Ci0gICAgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIHBhdGguCi0KLSAgICAiIiIKLSAgICBkbGxwYXRoID0gb3MucGF0aC5qb2luKHN5cy5wcmVmaXgsICJMaWIiLCAibGliLWR5bmxvYWQiKQotICAgIGxpYnBhdGggPSBvcy5lbnZpcm9uWydCRUdJTkxJQlBBVEgnXS5zcGxpdCgnOycpCi0gICAgaWYgbGlicGF0aFstMV06Ci0gICAgICAgIGxpYnBhdGguYXBwZW5kKGRsbHBhdGgpCi0gICAgZWxzZToKLSAgICAgICAgbGlicGF0aFstMV0gPSBkbGxwYXRoCi0gICAgb3MuZW52aXJvblsnQkVHSU5MSUJQQVRIJ10gPSAnOycuam9pbihsaWJwYXRoKQotCi0KIGRlZiBzZXRxdWl0KCk6CiAgICAgIiIiRGVmaW5lIG5ldyBidWlsdGlucyAncXVpdCcgYW5kICdleGl0Jy4KIApAQCAtMzYwLDEyNiArMzQ5LDk0IEBACiAgICAgZWxzZToKICAgICAgICAgZW9mID0gJ0N0cmwtRCAoaS5lLiBFT0YpJwogCi0gICAgY2xhc3MgUXVpdHRlcihvYmplY3QpOgotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6Ci0gICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCi0gICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiAnVXNlICVzKCkgb3IgJXMgdG8gZXhpdCcgJSAoc2VsZi5uYW1lLCBlb2YpCi0gICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjb2RlPU5vbmUpOgotICAgICAgICAgICAgIyBTaGVsbHMgbGlrZSBJRExFIGNhdGNoIHRoZSBTeXN0ZW1FeGl0LCBidXQgbGlzdGVuIHdoZW4gdGhlaXIKLSAgICAgICAgICAgICMgc3RkaW4gd3JhcHBlciBpcyBjbG9zZWQuCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc3lzLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICByYWlzZSBTeXN0ZW1FeGl0KGNvZGUpCi0gICAgYnVpbHRpbnMucXVpdCA9IFF1aXR0ZXIoJ3F1aXQnKQotICAgIGJ1aWx0aW5zLmV4aXQgPSBRdWl0dGVyKCdleGl0JykKKyAgICBidWlsdGlucy5xdWl0ID0gX3NpdGVidWlsdGlucy5RdWl0dGVyKCdxdWl0JywgZW9mKQorICAgIGJ1aWx0aW5zLmV4aXQgPSBfc2l0ZWJ1aWx0aW5zLlF1aXR0ZXIoJ2V4aXQnLCBlb2YpCiAKIAotY2xhc3MgX1ByaW50ZXIob2JqZWN0KToKLSAgICAiIiJpbnRlcmFjdGl2ZSBwcm9tcHQgb2JqZWN0cyBmb3IgcHJpbnRpbmcgdGhlIGxpY2Vuc2UgdGV4dCwgYSBsaXN0IG9mCi0gICAgY29udHJpYnV0b3JzIGFuZCB0aGUgY29weXJpZ2h0IG5vdGljZS4iIiIKLQotICAgIE1BWExJTkVTID0gMjMKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBkYXRhLCBmaWxlcz0oKSwgZGlycz0oKSk6Ci0gICAgICAgIHNlbGYuX19uYW1lID0gbmFtZQotICAgICAgICBzZWxmLl9fZGF0YSA9IGRhdGEKLSAgICAgICAgc2VsZi5fX2ZpbGVzID0gZmlsZXMKLSAgICAgICAgc2VsZi5fX2RpcnMgPSBkaXJzCi0gICAgICAgIHNlbGYuX19saW5lcyA9IE5vbmUKLQotICAgIGRlZiBfX3NldHVwKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9fbGluZXM6Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZGF0YSA9IE5vbmUKLSAgICAgICAgZm9yIGRpciBpbiBzZWxmLl9fZGlyczoKLSAgICAgICAgICAgIGZvciBmaWxlbmFtZSBpbiBzZWxmLl9fZmlsZXM6Ci0gICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oZGlyLCBmaWxlbmFtZSkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIGZwID0gb3BlbihmaWxlbmFtZSwgInIiKQotICAgICAgICAgICAgICAgICAgICBkYXRhID0gZnAucmVhZCgpCi0gICAgICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgaWYgZGF0YToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9fZGF0YQotICAgICAgICBzZWxmLl9fbGluZXMgPSBkYXRhLnNwbGl0KCdcbicpCi0gICAgICAgIHNlbGYuX19saW5lY250ID0gbGVuKHNlbGYuX19saW5lcykKLQotICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fX3NldHVwKCkKLSAgICAgICAgaWYgbGVuKHNlbGYuX19saW5lcykgPD0gc2VsZi5NQVhMSU5FUzoKLSAgICAgICAgICAgIHJldHVybiAiXG4iLmpvaW4oc2VsZi5fX2xpbmVzKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuICJUeXBlICVzKCkgdG8gc2VlIHRoZSBmdWxsICVzIHRleHQiICUgKChzZWxmLl9fbmFtZSwpKjIpCi0KLSAgICBkZWYgX19jYWxsX18oc2VsZik6Ci0gICAgICAgIHNlbGYuX19zZXR1cCgpCi0gICAgICAgIHByb21wdCA9ICdIaXQgUmV0dXJuIGZvciBtb3JlLCBvciBxIChhbmQgUmV0dXJuKSB0byBxdWl0OiAnCi0gICAgICAgIGxpbmVubyA9IDAKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsaW5lbm8sIGxpbmVubyArIHNlbGYuTUFYTElORVMpOgotICAgICAgICAgICAgICAgICAgICBwcmludChzZWxmLl9fbGluZXNbaV0pCi0gICAgICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBsaW5lbm8gKz0gc2VsZi5NQVhMSU5FUwotICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKLSAgICAgICAgICAgICAgICB3aGlsZSBrZXkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAga2V5ID0gaW5wdXQocHJvbXB0KQotICAgICAgICAgICAgICAgICAgICBpZiBrZXkgbm90IGluICgnJywgJ3EnKToKLSAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBrZXkgPT0gJ3EnOgotICAgICAgICAgICAgICAgICAgICBicmVhawotCiBkZWYgc2V0Y29weXJpZ2h0KCk6CiAgICAgIiIiU2V0ICdjb3B5cmlnaHQnIGFuZCAnY3JlZGl0cycgaW4gYnVpbHRpbnMiIiIKLSAgICBidWlsdGlucy5jb3B5cmlnaHQgPSBfUHJpbnRlcigiY29weXJpZ2h0Iiwgc3lzLmNvcHlyaWdodCkKKyAgICBidWlsdGlucy5jb3B5cmlnaHQgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKCJjb3B5cmlnaHQiLCBzeXMuY29weXJpZ2h0KQogICAgIGlmIHN5cy5wbGF0Zm9ybVs6NF0gPT0gJ2phdmEnOgotICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX1ByaW50ZXIoCisgICAgICAgIGJ1aWx0aW5zLmNyZWRpdHMgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKAogICAgICAgICAgICAgImNyZWRpdHMiLAogICAgICAgICAgICAgIkp5dGhvbiBpcyBtYWludGFpbmVkIGJ5IHRoZSBKeXRob24gZGV2ZWxvcGVycyAod3d3Lmp5dGhvbi5vcmcpLiIpCiAgICAgZWxzZToKLSAgICAgICAgYnVpbHRpbnMuY3JlZGl0cyA9IF9QcmludGVyKCJjcmVkaXRzIiwgIiIiXAorICAgICAgICBidWlsdGlucy5jcmVkaXRzID0gX3NpdGVidWlsdGlucy5fUHJpbnRlcigiY3JlZGl0cyIsICIiIlwKICAgICBUaGFua3MgdG8gQ1dJLCBDTlJJLCBCZU9wZW4uY29tLCBab3BlIENvcnBvcmF0aW9uIGFuZCBhIGNhc3Qgb2YgdGhvdXNhbmRzCiAgICAgZm9yIHN1cHBvcnRpbmcgUHl0aG9uIGRldmVsb3BtZW50LiAgU2VlIHd3dy5weXRob24ub3JnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIiIikKLSAgICBoZXJlID0gb3MucGF0aC5kaXJuYW1lKG9zLl9fZmlsZV9fKQotICAgIGJ1aWx0aW5zLmxpY2Vuc2UgPSBfUHJpbnRlcigKKyAgICBmaWxlcywgZGlycyA9IFtdLCBbXQorICAgICMgTm90IGFsbCBtb2R1bGVzIGFyZSByZXF1aXJlZCB0byBoYXZlIGEgX19maWxlX18gYXR0cmlidXRlLiAgU2VlCisgICAgIyBQRVAgNDIwIGZvciBtb3JlIGRldGFpbHMuCisgICAgaWYgaGFzYXR0cihvcywgJ19fZmlsZV9fJyk6CisgICAgICAgIGhlcmUgPSBvcy5wYXRoLmRpcm5hbWUob3MuX19maWxlX18pCisgICAgICAgIGZpbGVzLmV4dGVuZChbIkxJQ0VOU0UudHh0IiwgIkxJQ0VOU0UiXSkKKyAgICAgICAgZGlycy5leHRlbmQoW29zLnBhdGguam9pbihoZXJlLCBvcy5wYXJkaXIpLCBoZXJlLCBvcy5jdXJkaXJdKQorICAgIGJ1aWx0aW5zLmxpY2Vuc2UgPSBfc2l0ZWJ1aWx0aW5zLl9QcmludGVyKAogICAgICAgICAibGljZW5zZSIsCi0gICAgICAgICJTZWUgaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL3JlbGVhc2VzLyUuNXMvbGljZW5zZS8iICUgc3lzLnZlcnNpb24sCi0gICAgICAgIFsiTElDRU5TRS50eHQiLCAiTElDRU5TRSJdLAotICAgICAgICBbb3MucGF0aC5qb2luKGhlcmUsIG9zLnBhcmRpciksIGhlcmUsIG9zLmN1cmRpcl0pCisgICAgICAgICJTZWUgaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZS8iLAorICAgICAgICBmaWxlcywgZGlycykKIAogCi1jbGFzcyBfSGVscGVyKG9iamVjdCk6Ci0gICAgIiIiRGVmaW5lIHRoZSBidWlsdGluICdoZWxwJy4KLSAgICBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgcHlkb2MuaGVscCAod2l0aCBhIHR3aXN0KS4KLQotICAgICIiIgotCi0gICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlR5cGUgaGVscCgpIGZvciBpbnRlcmFjdGl2ZSBoZWxwLCAiIFwKLSAgICAgICAgICAgICAgICJvciBoZWxwKG9iamVjdCkgZm9yIGhlbHAgYWJvdXQgb2JqZWN0LiIKLSAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIGltcG9ydCBweWRvYwotICAgICAgICByZXR1cm4gcHlkb2MuaGVscCgqYXJncywgKiprd2RzKQotCiBkZWYgc2V0aGVscGVyKCk6Ci0gICAgYnVpbHRpbnMuaGVscCA9IF9IZWxwZXIoKQorICAgIGJ1aWx0aW5zLmhlbHAgPSBfc2l0ZWJ1aWx0aW5zLl9IZWxwZXIoKQorCitkZWYgZW5hYmxlcmxjb21wbGV0ZXIoKToKKyAgICAiIiJFbmFibGUgZGVmYXVsdCByZWFkbGluZSBjb25maWd1cmF0aW9uIG9uIGludGVyYWN0aXZlIHByb21wdHMsIGJ5CisgICAgcmVnaXN0ZXJpbmcgYSBzeXMuX19pbnRlcmFjdGl2ZWhvb2tfXy4KKworICAgIElmIHRoZSByZWFkbGluZSBtb2R1bGUgY2FuIGJlIGltcG9ydGVkLCB0aGUgaG9vayB3aWxsIHNldCB0aGUgVGFiIGtleQorICAgIGFzIGNvbXBsZXRpb24ga2V5IGFuZCByZWdpc3RlciB+Ly5weXRob25faGlzdG9yeSBhcyBoaXN0b3J5IGZpbGUuCisgICAgVGhpcyBjYW4gYmUgb3ZlcnJpZGVuIGluIHRoZSBzaXRlY3VzdG9taXplIG9yIHVzZXJjdXN0b21pemUgbW9kdWxlLAorICAgIG9yIGluIGEgUFlUSE9OU1RBUlRVUCBmaWxlLgorICAgICIiIgorICAgIGRlZiByZWdpc3Rlcl9yZWFkbGluZSgpOgorICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGltcG9ydCByZWFkbGluZQorICAgICAgICAgICAgaW1wb3J0IHJsY29tcGxldGVyCisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgUmVhZGluZyB0aGUgaW5pdGlhbGl6YXRpb24gKGNvbmZpZykgZmlsZSBtYXkgbm90IGJlIGVub3VnaCB0byBzZXQgYQorICAgICAgICAjIGNvbXBsZXRpb24ga2V5LCBzbyB3ZSBzZXQgb25lIGZpcnN0IGFuZCB0aGVuIHJlYWQgdGhlIGZpbGUuCisgICAgICAgIHJlYWRsaW5lX2RvYyA9IGdldGF0dHIocmVhZGxpbmUsICdfX2RvY19fJywgJycpCisgICAgICAgIGlmIHJlYWRsaW5lX2RvYyBpcyBub3QgTm9uZSBhbmQgJ2xpYmVkaXQnIGluIHJlYWRsaW5lX2RvYzoKKyAgICAgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCdiaW5kIF5JIHJsX2NvbXBsZXRlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlYWRsaW5lLnBhcnNlX2FuZF9iaW5kKCd0YWI6IGNvbXBsZXRlJykKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByZWFkbGluZS5yZWFkX2luaXRfZmlsZSgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgIyBBbiBPU0Vycm9yIGhlcmUgY291bGQgaGF2ZSBtYW55IGNhdXNlcywgYnV0IHRoZSBtb3N0IGxpa2VseSBvbmUKKyAgICAgICAgICAgICMgaXMgdGhhdCB0aGVyZSdzIG5vIC5pbnB1dHJjIGZpbGUgKG9yIC5lZGl0cmMgZmlsZSBpbiB0aGUgY2FzZSBvZgorICAgICAgICAgICAgIyBNYWMgT1MgWCArIGxpYmVkaXQpIGluIHRoZSBleHBlY3RlZCBsb2NhdGlvbi4gIEluIHRoYXQgY2FzZSwgd2UKKyAgICAgICAgICAgICMgd2FudCB0byBpZ25vcmUgdGhlIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBpZiByZWFkbGluZS5nZXRfY3VycmVudF9oaXN0b3J5X2xlbmd0aCgpID09IDA6CisgICAgICAgICAgICAjIElmIG5vIGhpc3Rvcnkgd2FzIGxvYWRlZCwgZGVmYXVsdCB0byAucHl0aG9uX2hpc3RvcnkuCisgICAgICAgICAgICAjIFRoZSBndWFyZCBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgZG91YmxpbmcgaGlzdG9yeSBzaXplIGF0CisgICAgICAgICAgICAjIGVhY2ggaW50ZXJwcmV0ZXIgZXhpdCB3aGVuIHJlYWRsaW5lIHdhcyBhbHJlYWR5IGNvbmZpZ3VyZWQKKyAgICAgICAgICAgICMgdGhyb3VnaCBhIFBZVEhPTlNUQVJUVVAgaG9vaywgc2VlOgorICAgICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNTg0NSNtc2cxOTg2MzYKKyAgICAgICAgICAgIGhpc3RvcnkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5leHBhbmR1c2VyKCd+JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcucHl0aG9uX2hpc3RvcnknKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJlYWRsaW5lLnJlYWRfaGlzdG9yeV9maWxlKGhpc3RvcnkpCisgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIocmVhZGxpbmUud3JpdGVfaGlzdG9yeV9maWxlLCBoaXN0b3J5KQorCisgICAgc3lzLl9faW50ZXJhY3RpdmVob29rX18gPSByZWdpc3Rlcl9yZWFkbGluZQogCiBkZWYgYWxpYXNtYmNzKCk6CiAgICAgIiIiT24gV2luZG93cywgc29tZSBkZWZhdWx0IGVuY29kaW5ncyBhcmUgbm90IHByb3ZpZGVkIGJ5IFB5dGhvbiwKICAgICB3aGlsZSB0aGV5IGFyZSBhbHdheXMgYXZhaWxhYmxlIGFzICJtYmNzIiBpbiBlYWNoIGxvY2FsZS4gTWFrZQogICAgIHRoZW0gdXNhYmxlIGJ5IGFsaWFzaW5nIHRvICJtYmNzIiBpbiBzdWNoIGEgY2FzZS4iIiIKICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgaW1wb3J0IGxvY2FsZSwgY29kZWNzCi0gICAgICAgIGVuYyA9IGxvY2FsZS5nZXRkZWZhdWx0bG9jYWxlKClbMV0KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlLCBjb2RlY3MKKyAgICAgICAgZW5jID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCiAgICAgICAgIGlmIGVuYy5zdGFydHN3aXRoKCdjcCcpOiAgICAgICAgICAgICMgImNwKioqIiA/CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgY29kZWNzLmxvb2t1cChlbmMpCkBAIC00ODgsOCArNDQ1LDcgQEAKICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuX2NhY2hlW2VuY10gPSBlbmNvZGluZ3MuX3Vua25vd24KICAgICAgICAgICAgICAgICBlbmNvZGluZ3MuYWxpYXNlcy5hbGlhc2VzW2VuY10gPSAnbWJjcycKIAotCi1DT05GSUdfTElORSA9IHJlLmNvbXBpbGUocideKD9QPGtleT4oXHd8Wy1fXSkrKVxzKj1ccyooP1A8dmFsdWU+LiopXHMqJCcpCitDT05GSUdfTElORSA9IHInXig/UDxrZXk+KFx3fFstX10pKylccyo9XHMqKD9QPHZhbHVlPi4qKVxzKiQnCiAKIGRlZiB2ZW52KGtub3duX3BhdGhzKToKICAgICBnbG9iYWwgUFJFRklYRVMsIEVOQUJMRV9VU0VSX1NJVEUKQEAgLTUxMiwxMiArNDY4LDE2IEBACiAgICAgICAgIF0KIAogICAgIGlmIGNhbmRpZGF0ZV9jb25mczoKKyAgICAgICAgaW1wb3J0IHJlCisgICAgICAgIGNvbmZpZ19saW5lID0gcmUuY29tcGlsZShDT05GSUdfTElORSkKICAgICAgICAgdmlydHVhbF9jb25mID0gY2FuZGlkYXRlX2NvbmZzWzBdCiAgICAgICAgIHN5c3RlbV9zaXRlID0gInRydWUiCi0gICAgICAgIHdpdGggb3Blbih2aXJ0dWFsX2NvbmYpIGFzIGY6CisgICAgICAgICMgSXNzdWUgMjUxODU6IFVzZSBVVEYtOCwgYXMgdGhhdCdzIHdoYXQgdGhlIHZlbnYgbW9kdWxlIHVzZXMgd2hlbgorICAgICAgICAjIHdyaXRpbmcgdGhlIGZpbGUuCisgICAgICAgIHdpdGggb3Blbih2aXJ0dWFsX2NvbmYsIGVuY29kaW5nPSd1dGYtOCcpIGFzIGY6CiAgICAgICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKLSAgICAgICAgICAgICAgICBtID0gQ09ORklHX0xJTkUubWF0Y2gobGluZSkKKyAgICAgICAgICAgICAgICBtID0gY29uZmlnX2xpbmUubWF0Y2gobGluZSkKICAgICAgICAgICAgICAgICBpZiBtOgogICAgICAgICAgICAgICAgICAgICBkID0gbS5ncm91cGRpY3QoKQogICAgICAgICAgICAgICAgICAgICBrZXksIHZhbHVlID0gZFsna2V5J10ubG93ZXIoKSwgZFsndmFsdWUnXQpAQCAtNTg5LDExICs1NDksMTAgQEAKICAgICAgICAgRU5BQkxFX1VTRVJfU0lURSA9IGNoZWNrX2VuYWJsZXVzZXJzaXRlKCkKICAgICBrbm93bl9wYXRocyA9IGFkZHVzZXJzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpCiAgICAga25vd25fcGF0aHMgPSBhZGRzaXRlcGFja2FnZXMoa25vd25fcGF0aHMpCi0gICAgaWYgc3lzLnBsYXRmb3JtID09ICdvczJlbXgnOgotICAgICAgICBzZXRCRUdJTkxJQlBBVEgoKQogICAgIHNldHF1aXQoKQogICAgIHNldGNvcHlyaWdodCgpCiAgICAgc2V0aGVscGVyKCkKKyAgICBlbmFibGVybGNvbXBsZXRlcigpCiAgICAgYWxpYXNtYmNzKCkKICAgICBleGVjc2l0ZWN1c3RvbWl6ZSgpCiAgICAgaWYgRU5BQkxFX1VTRVJfU0lURToKZGlmZiAtLWdpdCBhL0xpYi9zbXRwZC5weSBiL0xpYi9zbXRwZC5weQppbmRleCA3NzhkNmQ2Li5kYjdjODY3IDEwMDc1NQotLS0gYS9MaWIvc210cGQucHkKKysrIGIvTGliL3NtdHBkLnB5CkBAIC0xMjEsOCArMTIxLDkgQEAKICAgICAgICAgfSkKICAgICBtYXhfY29tbWFuZF9zaXplX2xpbWl0ID0gbWF4KGNvbW1hbmRfc2l6ZV9saW1pdHMudmFsdWVzKCkpCiAKLSAgICBkZWYgX19pbml0X18oc2VsZiwgc2VydmVyLCBjb25uLCBhZGRyLCBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQpOgotICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNlcnZlciwgY29ubiwgYWRkciwgZGF0YV9zaXplX2xpbWl0PURBVEFfU0laRV9ERUZBVUxULAorICAgICAgICAgICAgICAgICBtYXA9Tm9uZSk6CisgICAgICAgIGFzeW5jaGF0LmFzeW5jX2NoYXQuX19pbml0X18oc2VsZiwgY29ubiwgbWFwPW1hcCkKICAgICAgICAgc2VsZi5zbXRwX3NlcnZlciA9IHNlcnZlcgogICAgICAgICBzZWxmLmNvbm4gPSBjb25uCiAgICAgICAgIHNlbGYuYWRkciA9IGFkZHIKQEAgLTEzNyw3ICsxMzgsNyBAQAogICAgICAgICBzZWxmLm51bV9ieXRlcyA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wZWVyID0gY29ubi5nZXRwZWVybmFtZSgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAjIGEgcmFjZSBjb25kaXRpb24gIG1heSBvY2N1ciBpZiB0aGUgb3RoZXIgZW5kIGlzIGNsb3NpbmcKICAgICAgICAgICAgICMgYmVmb3JlIHdlIGNhbiBnZXQgdGhlIHBlZXJuYW1lCiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKQEAgLTQxMiw3ICs0MTMsNyBAQAogCiAgICAgZGVmIHNtdHBfSEVMUChzZWxmLCBhcmcpOgogICAgICAgICBpZiBhcmc6Ci0gICAgICAgICAgICBleHRlbmRlZCA9ICcgW1NQIDxtYWlsIHBhcmFtZXRlcnNdJworICAgICAgICAgICAgZXh0ZW5kZWQgPSAnIFtTUCA8bWFpbC1wYXJhbWV0ZXJzPl0nCiAgICAgICAgICAgICBsY19hcmcgPSBhcmcudXBwZXIoKQogICAgICAgICAgICAgaWYgbGNfYXJnID09ICdFSExPJzoKICAgICAgICAgICAgICAgICBzZWxmLnB1c2goJzI1MCBTeW50YXg6IEVITE8gaG9zdG5hbWUnKQpAQCAtNDc1LDkgKzQ3Niw2IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLmV4dGVuZGVkX3NtdHAgYW5kIHBhcmFtczoKICAgICAgICAgICAgIHNlbGYucHVzaChzeW50YXhlcnIpCiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IGFkZHJlc3M6Ci0gICAgICAgICAgICBzZWxmLnB1c2goc3ludGF4ZXJyKQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYubWFpbGZyb206CiAgICAgICAgICAgICBzZWxmLnB1c2goJzUwMyBFcnJvcjogbmVzdGVkIE1BSUwgY29tbWFuZCcpCiAgICAgICAgICAgICByZXR1cm4KQEAgLTUyOCwxNSArNTI2LDkgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5wdXNoKHN5bnRheGVycikKICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgaWYgbm90IGFkZHJlc3M6Ci0gICAgICAgICAgICBzZWxmLnB1c2goc3ludGF4ZXJyKQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHBhcmFtcyBhbmQgbGVuKHBhcmFtcy5rZXlzKCkpID4gMDoKICAgICAgICAgICAgIHNlbGYucHVzaCgnNTU1IFJDUFQgVE8gcGFyYW1ldGVycyBub3QgcmVjb2duaXplZCBvciBub3QgaW1wbGVtZW50ZWQnKQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIG5vdCBhZGRyZXNzOgotICAgICAgICAgICAgc2VsZi5wdXNoKCc1MDEgU3ludGF4OiBSQ1BUIFRPOiA8YWRkcmVzcz4nKQotICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHNlbGYucmNwdHRvcy5hcHBlbmQoYWRkcmVzcykKICAgICAgICAgcHJpbnQoJ3JlY2lwczonLCBzZWxmLnJjcHR0b3MsIGZpbGU9REVCVUdTVFJFQU0pCiAgICAgICAgIHNlbGYucHVzaCgnMjUwIE9LJykKQEAgLTU3NiwxMSArNTY4LDExIEBACiAgICAgY2hhbm5lbF9jbGFzcyA9IFNNVFBDaGFubmVsCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9jYWxhZGRyLCByZW1vdGVhZGRyLAotICAgICAgICAgICAgICAgICBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQpOgorICAgICAgICAgICAgICAgICBkYXRhX3NpemVfbGltaXQ9REFUQV9TSVpFX0RFRkFVTFQsIG1hcD1Ob25lKToKICAgICAgICAgc2VsZi5fbG9jYWxhZGRyID0gbG9jYWxhZGRyCiAgICAgICAgIHNlbGYuX3JlbW90ZWFkZHIgPSByZW1vdGVhZGRyCiAgICAgICAgIHNlbGYuZGF0YV9zaXplX2xpbWl0ID0gZGF0YV9zaXplX2xpbWl0Ci0gICAgICAgIGFzeW5jb3JlLmRpc3BhdGNoZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgYXN5bmNvcmUuZGlzcGF0Y2hlci5fX2luaXRfXyhzZWxmLCBtYXA9bWFwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmNyZWF0ZV9zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgICAgICMgdHJ5IHRvIHJlLXVzZSBhIHNlcnZlciBwb3J0IGlmIHBvc3NpYmxlCkBAIC01OTcsNyArNTg5LDggQEAKIAogICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6CiAgICAgICAgIHByaW50KCdJbmNvbWluZyBjb25uZWN0aW9uIGZyb20gJXMnICUgcmVwcihhZGRyKSwgZmlsZT1ERUJVR1NUUkVBTSkKLSAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLmRhdGFfc2l6ZV9saW1pdCkKKyAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLmRhdGFfc2l6ZV9saW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9tYXApCiAKICAgICAjIEFQSSBmb3IgImRvaW5nIHNvbWV0aGluZyB1c2VmdWwgd2l0aCB0aGUgbWVzc2FnZSIKICAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsIHBlZXIsIG1haWxmcm9tLCByY3B0dG9zLCBkYXRhKToKQEAgLTY2OCw3ICs2NjEsNyBAQAogICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQUmVjaXBpZW50c1JlZnVzZWQgYXMgZToKICAgICAgICAgICAgIHByaW50KCdnb3QgU01UUFJlY2lwaWVudHNSZWZ1c2VkJywgZmlsZT1ERUJVR1NUUkVBTSkKICAgICAgICAgICAgIHJlZnVzZWQgPSBlLnJlY2lwaWVudHMKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIHNtdHBsaWIuU01UUEV4Y2VwdGlvbikgYXMgZToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBzbXRwbGliLlNNVFBFeGNlcHRpb24pIGFzIGU6CiAgICAgICAgICAgICBwcmludCgnZ290JywgZS5fX2NsYXNzX18sIGZpbGU9REVCVUdTVFJFQU0pCiAgICAgICAgICAgICAjIEFsbCByZWNpcGllbnRzIHdlcmUgcmVmdXNlZC4gIElmIHRoZSBleGNlcHRpb24gaGFkIGFuIGFzc29jaWF0ZWQKICAgICAgICAgICAgICMgZXJyb3IgY29kZSwgdXNlIGl0LiAgT3RoZXJ3aXNlLGZha2UgaXQgd2l0aCBhIG5vbi10cmlnZ2VyaW5nCkBAIC03NzgsNyArNzcxLDcgQEAKICAgICAgICAgaWYgb3B0IGluICgnLWgnLCAnLS1oZWxwJyk6CiAgICAgICAgICAgICB1c2FnZSgwKQogICAgICAgICBlbGlmIG9wdCBpbiAoJy1WJywgJy0tdmVyc2lvbicpOgotICAgICAgICAgICAgcHJpbnQoX192ZXJzaW9uX18sIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHByaW50KF9fdmVyc2lvbl9fKQogICAgICAgICAgICAgc3lzLmV4aXQoMCkKICAgICAgICAgZWxpZiBvcHQgaW4gKCctbicsICctLW5vc2V0dWlkJyk6CiAgICAgICAgICAgICBvcHRpb25zLnNldHVpZCA9IDAKQEAgLTg1MCw4ICs4NDMsNyBAQAogICAgICAgICBub2JvZHkgPSBwd2QuZ2V0cHduYW0oJ25vYm9keScpWzJdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnNldHVpZChub2JvZHkpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVQRVJNOiByYWlzZQorICAgICAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yOgogICAgICAgICAgICAgcHJpbnQoJ0Nhbm5vdCBzZXR1aWQgIm5vYm9keSI7IHRyeSBydW5uaW5nIHdpdGggLW4gb3B0aW9uLicsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3NtdHBsaWIucHkgYi9MaWIvc210cGxpYi5weQppbmRleCA1N2YxODFiLi5hYzFmNTkzIDEwMDc1NQotLS0gYS9MaWIvc210cGxpYi5weQorKysgYi9MaWIvc210cGxpYi5weQpAQCAtNjcsNyArNjcsNyBAQAogT0xEU1RZTEVfQVVUSCA9IHJlLmNvbXBpbGUociJhdXRoPSguKikiLCByZS5JKQogCiAjIEV4Y2VwdGlvbiBjbGFzc2VzIHVzZWQgYnkgdGhpcyBtb2R1bGUuCi1jbGFzcyBTTVRQRXhjZXB0aW9uKEV4Y2VwdGlvbik6CitjbGFzcyBTTVRQRXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIGFsbCBleGNlcHRpb25zIHJhaXNlZCBieSB0aGlzIG1vZHVsZS4iIiIKIAogY2xhc3MgU01UUFNlcnZlckRpc2Nvbm5lY3RlZChTTVRQRXhjZXB0aW9uKToKQEAgLTIzMyw2ICsyMzMsNyBAQAogICAgICAgICB3aWxsIGJlIHVzZWQuCiAKICAgICAgICAgIiIiCisgICAgICAgIHNlbGYuX2hvc3QgPSBob3N0CiAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgICAgICAgc2VsZi5lc210cF9mZWF0dXJlcyA9IHt9CiAgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MgPSBzb3VyY2VfYWRkcmVzcwpAQCAtMzEyLDcgKzMxMyw3IEBACiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBwb3J0ID0gaW50KHBvcnQpCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcigibm9ubnVtZXJpYyBwb3J0IikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigibm9ubnVtZXJpYyBwb3J0IikKICAgICAgICAgaWYgbm90IHBvcnQ6CiAgICAgICAgICAgICBwb3J0ID0gc2VsZi5kZWZhdWx0X3BvcnQKICAgICAgICAgaWYgc2VsZi5kZWJ1Z2xldmVsID4gMDoKQEAgLTMzMyw3ICszMzQsNyBAQAogICAgICAgICAgICAgICAgIHMgPSBzLmVuY29kZSgiYXNjaWkiKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuc29jay5zZW5kYWxsKHMpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCgnU2VydmVyIG5vdCBjb25uZWN0ZWQnKQogICAgICAgICBlbHNlOgpAQCAtMzY2LDcgKzM2Nyw3IEBACiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgbGluZSA9IHNlbGYuZmlsZS5yZWFkbGluZShfTUFYTElORSArIDEpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQoIkNvbm5lY3Rpb24gdW5leHBlY3RlZGx5IGNsb3NlZDogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBzdHIoZSkpCkBAIC0zNzYsNiArMzc3LDcgQEAKICAgICAgICAgICAgIGlmIHNlbGYuZGVidWdsZXZlbCA+IDA6CiAgICAgICAgICAgICAgICAgcHJpbnQoJ3JlcGx5OicsIHJlcHIobGluZSksIGZpbGU9c3RkZXJyKQogICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gX01BWExJTkU6CisgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFJlc3BvbnNlRXhjZXB0aW9uKDUwMCwgIkxpbmUgdG9vIGxvbmcuIikKICAgICAgICAgICAgIHJlc3AuYXBwZW5kKGxpbmVbNDpdLnN0cmlwKGInIFx0XHJcbicpKQogICAgICAgICAgICAgY29kZSA9IGxpbmVbOjNdCkBAIC00NzcsNiArNDc5LDE4IEBACiAgICAgICAgICIiIlNNVFAgJ3JzZXQnIGNvbW1hbmQgLS0gcmVzZXRzIHNlc3Npb24uIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmRvY21kKCJyc2V0IikKIAorICAgIGRlZiBfcnNldChzZWxmKToKKyAgICAgICAgIiIiSW50ZXJuYWwgJ3JzZXQnIGNvbW1hbmQgd2hpY2ggaWdub3JlcyBhbnkgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCBlcnJvci4KKworICAgICAgICBVc2VkIGludGVybmFsbHkgaW4gdGhlIGxpYnJhcnksIHNpbmNlIHRoZSBzZXJ2ZXIgZGlzY29ubmVjdGVkIGVycm9yCisgICAgICAgIHNob3VsZCBhcHBlYXIgdG8gdGhlIGFwcGxpY2F0aW9uIHdoZW4gdGhlICpuZXh0KiBjb21tYW5kIGlzIGlzc3VlZCwgaWYKKyAgICAgICAgd2UgYXJlIGRvaW5nIGFuIGludGVybmFsICJzYWZldHkiIHJlc2V0LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5yc2V0KCkKKyAgICAgICAgZXhjZXB0IFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQ6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgbm9vcChzZWxmKToKICAgICAgICAgIiIiU01UUCAnbm9vcCcgY29tbWFuZCAtLSBkb2Vzbid0IGRvIGFueXRoaW5nIDo+IiIiCiAgICAgICAgIHJldHVybiBzZWxmLmRvY21kKCJub29wIikKQEAgLTUwNCw4ICs1MTgsOCBAQAogICAgICAgICBSYWlzZXMgU01UUERhdGFFcnJvciBpZiB0aGVyZSBpcyBhbiB1bmV4cGVjdGVkIHJlcGx5IHRvIHRoZQogICAgICAgICBEQVRBIGNvbW1hbmQ7IHRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIG1ldGhvZCBpcyB0aGUgZmluYWwKICAgICAgICAgcmVzcG9uc2UgY29kZSByZWNlaXZlZCB3aGVuIHRoZSBhbGwgZGF0YSBpcyBzZW50LiAgSWYgbXNnCi0gICAgICAgIGlzIGEgc3RyaW5nLCBsb25lICdccicgYW5kICdcbicgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIHRvCi0gICAgICAgICdcclxuJyBjaGFyYWN0ZXJzLiAgSWYgbXNnIGlzIGJ5dGVzLCBpdCBpcyB0cmFuc21pdHRlZCBhcyBpcy4KKyAgICAgICAgaXMgYSBzdHJpbmcsIGxvbmUgJ1xccicgYW5kICdcXG4nIGNoYXJhY3RlcnMgYXJlIGNvbnZlcnRlZCB0bworICAgICAgICAnXFxyXFxuJyBjaGFyYWN0ZXJzLiAgSWYgbXNnIGlzIGJ5dGVzLCBpdCBpcyB0cmFuc21pdHRlZCBhcyBpcy4KICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYucHV0Y21kKCJkYXRhIikKICAgICAgICAgKGNvZGUsIHJlcGwpID0gc2VsZi5nZXRyZXBseSgpCkBAIC01ODIsNyArNTk2LDcgQEAKICAgICAgICAgZGVmIGVuY29kZV9jcmFtX21kNShjaGFsbGVuZ2UsIHVzZXIsIHBhc3N3b3JkKToKICAgICAgICAgICAgIGNoYWxsZW5nZSA9IGJhc2U2NC5kZWNvZGVieXRlcyhjaGFsbGVuZ2UpCiAgICAgICAgICAgICByZXNwb25zZSA9IHVzZXIgKyAiICIgKyBobWFjLkhNQUMocGFzc3dvcmQuZW5jb2RlKCdhc2NpaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZSkuaGV4ZGlnZXN0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2UsICdtZDUnKS5oZXhkaWdlc3QoKQogICAgICAgICAgICAgcmV0dXJuIGVuY29kZV9iYXNlNjQocmVzcG9uc2UuZW5jb2RlKCdhc2NpaScpLCBlb2w9JycpCiAKICAgICAgICAgZGVmIGVuY29kZV9wbGFpbih1c2VyLCBwYXNzd29yZCk6CkBAIC02NjcsMTAgKzY4MSwxMSBAQAogICAgICAgICAgICAgaWYgY29udGV4dCBpcyBub3QgTm9uZSBhbmQgY2VydGZpbGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY29udGV4dCBhbmQgY2VydGZpbGUgYXJndW1lbnRzIGFyZSBtdXR1YWxseSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjbHVzaXZlIikKLSAgICAgICAgICAgIGlmIGNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2spCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IHNzbC53cmFwX3NvY2tldChzZWxmLnNvY2ssIGtleWZpbGUsIGNlcnRmaWxlKQorICAgICAgICAgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChjZXJ0ZmlsZT1jZXJ0ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5ZmlsZT1rZXlmaWxlKQorICAgICAgICAgICAgc2VsZi5zb2NrID0gY29udGV4dC53cmFwX3NvY2tldChzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zZWxmLl9ob3N0KQogICAgICAgICAgICAgc2VsZi5maWxlID0gTm9uZQogICAgICAgICAgICAgIyBSRkMgMzIwNzoKICAgICAgICAgICAgICMgVGhlIGNsaWVudCBNVVNUIGRpc2NhcmQgYW55IGtub3dsZWRnZSBvYnRhaW5lZCBmcm9tCkBAIC02ODAsNiArNjk1LDExIEBACiAgICAgICAgICAgICBzZWxmLmVobG9fcmVzcCA9IE5vbmUKICAgICAgICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXMgPSB7fQogICAgICAgICAgICAgc2VsZi5kb2VzX2VzbXRwID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBSRkMgMzIwNzoKKyAgICAgICAgICAgICMgNTAxIFN5bnRheCBlcnJvciAobm8gcGFyYW1ldGVycyBhbGxvd2VkKQorICAgICAgICAgICAgIyA0NTQgVExTIG5vdCBhdmFpbGFibGUgZHVlIHRvIHRlbXBvcmFyeSByZWFzb24KKyAgICAgICAgICAgIHJhaXNlIFNNVFBSZXNwb25zZUV4Y2VwdGlvbihyZXNwLCByZXBseSkKICAgICAgICAgcmV0dXJuIChyZXNwLCByZXBseSkKIAogICAgIGRlZiBzZW5kbWFpbChzZWxmLCBmcm9tX2FkZHIsIHRvX2FkZHJzLCBtc2csIG1haWxfb3B0aW9ucz1bXSwKQEAgLTc1OSw3ICs3NzksNyBAQAogICAgICAgICAgICAgaWYgY29kZSA9PSA0MjE6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYucnNldCgpCisgICAgICAgICAgICAgICAgc2VsZi5fcnNldCgpCiAgICAgICAgICAgICByYWlzZSBTTVRQU2VuZGVyUmVmdXNlZChjb2RlLCByZXNwLCBmcm9tX2FkZHIpCiAgICAgICAgIHNlbmRlcnJzID0ge30KICAgICAgICAgaWYgaXNpbnN0YW5jZSh0b19hZGRycywgc3RyKToKQEAgLTc3MywxNCArNzkzLDE0IEBACiAgICAgICAgICAgICAgICAgcmFpc2UgU01UUFJlY2lwaWVudHNSZWZ1c2VkKHNlbmRlcnJzKQogICAgICAgICBpZiBsZW4oc2VuZGVycnMpID09IGxlbih0b19hZGRycyk6CiAgICAgICAgICAgICAjIHRoZSBzZXJ2ZXIgcmVmdXNlZCBhbGwgb3VyIHJlY2lwaWVudHMKLSAgICAgICAgICAgIHNlbGYucnNldCgpCisgICAgICAgICAgICBzZWxmLl9yc2V0KCkKICAgICAgICAgICAgIHJhaXNlIFNNVFBSZWNpcGllbnRzUmVmdXNlZChzZW5kZXJycykKICAgICAgICAgKGNvZGUsIHJlc3ApID0gc2VsZi5kYXRhKG1zZykKICAgICAgICAgaWYgY29kZSAhPSAyNTA6CiAgICAgICAgICAgICBpZiBjb2RlID09IDQyMToKICAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5yc2V0KCkKKyAgICAgICAgICAgICAgICBzZWxmLl9yc2V0KCkKICAgICAgICAgICAgIHJhaXNlIFNNVFBEYXRhRXJyb3IoY29kZSwgcmVzcCkKICAgICAgICAgI2lmIHdlIGdvdCBoZXJlIHRoZW4gc29tZWJvZHkgZ290IG91ciBtYWlsCiAgICAgICAgIHJldHVybiBzZW5kZXJycwpAQCAtODQwLDE2ICs4NjAsMjQgQEAKIAogICAgIGRlZiBjbG9zZShzZWxmKToKICAgICAgICAgIiIiQ2xvc2UgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIFNNVFAgc2VydmVyLiIiIgotICAgICAgICBpZiBzZWxmLmZpbGU6Ci0gICAgICAgICAgICBzZWxmLmZpbGUuY2xvc2UoKQotICAgICAgICBzZWxmLmZpbGUgPSBOb25lCi0gICAgICAgIGlmIHNlbGYuc29jazoKLSAgICAgICAgICAgIHNlbGYuc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuc29jayA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZmlsZSA9IHNlbGYuZmlsZQorICAgICAgICAgICAgc2VsZi5maWxlID0gTm9uZQorICAgICAgICAgICAgaWYgZmlsZToKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNvY2sgPSBzZWxmLnNvY2sKKyAgICAgICAgICAgIHNlbGYuc29jayA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNvY2s6CisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCiAKICAgICBkZWYgcXVpdChzZWxmKToKICAgICAgICAgIiIiVGVybWluYXRlIHRoZSBTTVRQIHNlc3Npb24uIiIiCiAgICAgICAgIHJlcyA9IHNlbGYuZG9jbWQoInF1aXQiKQorICAgICAgICAjIEEgbmV3IEVITE8gaXMgcmVxdWlyZWQgYWZ0ZXIgcmVjb25uZWN0aW5nIHdpdGggY29ubmVjdCgpCisgICAgICAgIHNlbGYuZWhsb19yZXNwID0gc2VsZi5oZWxvX3Jlc3AgPSBOb25lCisgICAgICAgIHNlbGYuZXNtdHBfZmVhdHVyZXMgPSB7fQorICAgICAgICBzZWxmLmRvZXNfZXNtdHAgPSBGYWxzZQogICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgcmV0dXJuIHJlcwogCkBAIC04ODMsNiArOTExLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleGNsdXNpdmUiKQogICAgICAgICAgICAgc2VsZi5rZXlmaWxlID0ga2V5ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0ZmlsZSA9IGNlcnRmaWxlCisgICAgICAgICAgICBpZiBjb250ZXh0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgY29udGV4dCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KGNlcnRmaWxlPWNlcnRmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPWtleWZpbGUpCiAgICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBjb250ZXh0CiAgICAgICAgICAgICBTTVRQLl9faW5pdF9fKHNlbGYsIGhvc3QsIHBvcnQsIGxvY2FsX2hvc3RuYW1lLCB0aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzcykKQEAgLTg5MiwxMCArOTIzLDggQEAKICAgICAgICAgICAgICAgICBwcmludCgnY29ubmVjdDonLCAoaG9zdCwgcG9ydCksIGZpbGU9c3RkZXJyKQogICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc291cmNlX2FkZHJlc3MpCi0gICAgICAgICAgICBpZiBzZWxmLmNvbnRleHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgbmV3X3NvY2tldCA9IHNlbGYuY29udGV4dC53cmFwX3NvY2tldChuZXdfc29ja2V0KQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBuZXdfc29ja2V0ID0gc3NsLndyYXBfc29ja2V0KG5ld19zb2NrZXQsIHNlbGYua2V5ZmlsZSwgc2VsZi5jZXJ0ZmlsZSkKKyAgICAgICAgICAgIG5ld19zb2NrZXQgPSBzZWxmLmNvbnRleHQud3JhcF9zb2NrZXQobmV3X3NvY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPXNlbGYuX2hvc3QpCiAgICAgICAgICAgICByZXR1cm4gbmV3X3NvY2tldAogCiAgICAgX19hbGxfXy5hcHBlbmQoIlNNVFBfU1NMIikKQEAgLTkzNyw3ICs5NjYsNyBAQAogICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgc2VsZi5maWxlID0gTm9uZQogICAgICAgICAgICAgc2VsZi5zb2NrLmNvbm5lY3QoaG9zdCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnbGV2ZWwgPiAwOgogICAgICAgICAgICAgICAgIHByaW50KCdjb25uZWN0IGZhaWw6JywgaG9zdCwgZmlsZT1zdGRlcnIpCiAgICAgICAgICAgICBpZiBzZWxmLnNvY2s6CmRpZmYgLS1naXQgYS9MaWIvc25kaGRyLnB5IGIvTGliL3NuZGhkci5weQppbmRleCA5ZjVkY2M5Li4yNDBlNTA3IDEwMDY0NAotLS0gYS9MaWIvc25kaGRyLnB5CisrKyBiL0xpYi9zbmRoZHIucHkKQEAgLTExLDcgKzExLDcgQEAKIC0gbnVtYmVyIG9mIGJpdHMvc2FtcGxlLCBvciAnVScgZm9yIFUtTEFXLCBvciAnQScgZm9yIEEtTEFXCiAKIElmIHRoZSBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHJlY29nbml6YWJsZSB0eXBlLCBpdCByZXR1cm5zIE5vbmUuCi1JZiB0aGUgZmlsZSBjYW4ndCBiZSBvcGVuZWQsIElPRXJyb3IgaXMgcmFpc2VkLgorSWYgdGhlIGZpbGUgY2FuJ3QgYmUgb3BlbmVkLCBPU0Vycm9yIGlzIHJhaXNlZC4KIAogVG8gY29tcHV0ZSB0aGUgdG90YWwgdGltZSwgZGl2aWRlIHRoZSBudW1iZXIgb2YgZnJhbWVzIGJ5IHRoZQogc2FtcGxpbmcgcmF0ZSAoYSBmcmFtZSBjb250YWlucyBhIHNhbXBsZSBmb3IgZWFjaCBjaGFubmVsKS4KQEAgLTEzNywxNCArMTM3LDE3IEBACiAKIAogZGVmIHRlc3Rfd2F2KGgsIGYpOgorICAgIGltcG9ydCB3YXZlCiAgICAgIyAnUklGRicgPGxlbj4gJ1dBVkUnICdmbXQgJyA8bGVuPgogICAgIGlmIG5vdCBoLnN0YXJ0c3dpdGgoYidSSUZGJykgb3IgaFs4OjEyXSAhPSBiJ1dBVkUnIG9yIGhbMTI6MTZdICE9IGInZm10ICc6CiAgICAgICAgIHJldHVybiBOb25lCi0gICAgc3R5bGUgPSBnZXRfc2hvcnRfbGUoaFsyMDoyMl0pCi0gICAgbmNoYW5uZWxzID0gZ2V0X3Nob3J0X2xlKGhbMjI6MjRdKQotICAgIHJhdGUgPSBnZXRfbG9uZ19sZShoWzI0OjI4XSkKLSAgICBzYW1wbGVfYml0cyA9IGdldF9zaG9ydF9sZShoWzM0OjM2XSkKLSAgICByZXR1cm4gJ3dhdicsIHJhdGUsIG5jaGFubmVscywgLTEsIHNhbXBsZV9iaXRzCisgICAgZi5zZWVrKDApCisgICAgdHJ5OgorICAgICAgICB3ID0gd2F2ZS5vcGVuZnAoZiwgJ3InKQorICAgIGV4Y2VwdCAoRU9GRXJyb3IsIHdhdmUuRXJyb3IpOgorICAgICAgICByZXR1cm4gTm9uZQorICAgIHJldHVybiAoJ3dhdicsIHcuZ2V0ZnJhbWVyYXRlKCksIHcuZ2V0bmNoYW5uZWxzKCksCisgICAgICAgICAgICAgICAgICAgdy5nZXRuZnJhbWVzKCksIDgqdy5nZXRzYW1wd2lkdGgoKSkKIAogdGVzdHMuYXBwZW5kKHRlc3Rfd2F2KQogCkBAIC0yMzAsNyArMjMzLDcgQEAKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHByaW50KHdoYXQoZmlsZW5hbWUpKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwcmludCgnKioqIG5vdCBmb3VuZCAqKionKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3NvY2tldC5weSBiL0xpYi9zb2NrZXQucHkKaW5kZXggZDRmMWI2NS4uZmYyZjA4NyAxMDA2NDQKLS0tIGEvTGliL3NvY2tldC5weQorKysgYi9MaWIvc29ja2V0LnB5CkBAIC0zNSwxMSArMzUsMTMgQEAKIGVycm9yIC0tIGV4Y2VwdGlvbiByYWlzZWQgZm9yIEkvTyBlcnJvcnMKIGhhc19pcHY2IC0tIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiBJUHY2IGlzIHN1cHBvcnRlZAogCi1JbnRlZ2VyIGNvbnN0YW50czoKK0ludEVudW0gY29uc3RhbnRzOgogCiBBRl9JTkVULCBBRl9VTklYIC0tIHNvY2tldCBkb21haW5zIChmaXJzdCBhcmd1bWVudCB0byBzb2NrZXQoKSBjYWxsKQogU09DS19TVFJFQU0sIFNPQ0tfREdSQU0sIFNPQ0tfUkFXIC0tIHNvY2tldCB0eXBlcyAoc2Vjb25kIGFyZ3VtZW50KQogCitJbnRlZ2VyIGNvbnN0YW50czoKKwogTWFueSBvdGhlciBjb25zdGFudHMgbWF5IGJlIGRlZmluZWQ7IHRoZXNlIG1heSBiZSB1c2VkIGluIGNhbGxzIHRvCiB0aGUgc2V0c29ja29wdCgpIGFuZCBnZXRzb2Nrb3B0KCkgbWV0aG9kcy4KICIiIgpAQCAtNDgsNiArNTAsNyBAQAogZnJvbSBfc29ja2V0IGltcG9ydCAqCiAKIGltcG9ydCBvcywgc3lzLCBpbworZnJvbSBlbnVtIGltcG9ydCBJbnRFbnVtCiAKIHRyeToKICAgICBpbXBvcnQgZXJybm8KQEAgLTU3LDkgKzYwLDM0IEBACiBFQUdBSU4gPSBnZXRhdHRyKGVycm5vLCAnRUFHQUlOJywgMTEpCiBFV09VTERCTE9DSyA9IGdldGF0dHIoZXJybm8sICdFV09VTERCTE9DSycsIDExKQogCi1fX2FsbF9fID0gWyJnZXRmcWRuIiwgImNyZWF0ZV9jb25uZWN0aW9uIl0KK19fYWxsX18gPSBbImZyb21mZCIsICJnZXRmcWRuIiwgImNyZWF0ZV9jb25uZWN0aW9uIiwKKyAgICAgICAgIkFkZHJlc3NGYW1pbHkiLCAiU29ja2V0S2luZCJdCiBfX2FsbF9fLmV4dGVuZChvcy5fZ2V0X2V4cG9ydHNfbGlzdChfc29ja2V0KSkKIAorIyBTZXQgdXAgdGhlIHNvY2tldC5BRl8qIHNvY2tldC5TT0NLXyogY29uc3RhbnRzIGFzIG1lbWJlcnMgb2YgSW50RW51bXMgZm9yCisjIG5pY2VyIHN0cmluZyByZXByZXNlbnRhdGlvbnMuCisjIE5vdGUgdGhhdCBfc29ja2V0IG9ubHkga25vd3MgYWJvdXQgdGhlIGludGVnZXIgdmFsdWVzLiBUaGUgcHVibGljIGludGVyZmFjZQorIyBpbiB0aGlzIG1vZHVsZSB1bmRlcnN0YW5kcyB0aGUgZW51bXMgYW5kIHRyYW5zbGF0ZXMgdGhlbSBiYWNrIGZyb20gaW50ZWdlcnMKKyMgd2hlcmUgbmVlZGVkIChlLmcuIC5mYW1pbHkgcHJvcGVydHkgb2YgYSBzb2NrZXQgb2JqZWN0KS4KK0ludEVudW0uX2NvbnZlcnQoCisgICAgICAgICdBZGRyZXNzRmFtaWx5JywKKyAgICAgICAgX19uYW1lX18sCisgICAgICAgIGxhbWJkYSBDOiBDLmlzdXBwZXIoKSBhbmQgQy5zdGFydHN3aXRoKCdBRl8nKSkKKworSW50RW51bS5fY29udmVydCgKKyAgICAgICAgJ1NvY2tldEtpbmQnLAorICAgICAgICBfX25hbWVfXywKKyAgICAgICAgbGFtYmRhIEM6IEMuaXN1cHBlcigpIGFuZCBDLnN0YXJ0c3dpdGgoJ1NPQ0tfJykpCisKK2RlZiBfaW50ZW51bV9jb252ZXJ0ZXIodmFsdWUsIGVudW1fa2xhc3MpOgorICAgICIiIkNvbnZlcnQgYSBudW1lcmljIGZhbWlseSB2YWx1ZSB0byBhbiBJbnRFbnVtIG1lbWJlci4KKworICAgIElmIGl0J3Mgbm90IGEga25vd24gbWVtYmVyLCByZXR1cm4gdGhlIG51bWVyaWMgdmFsdWUgaXRzZWxmLgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGVudW1fa2xhc3ModmFsdWUpCisgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgIHJldHVybiB2YWx1ZQogCiBfcmVhbHNvY2tldCA9IHNvY2tldAogCkBAIC05MSw2ICsxMTksMTAgQEAKICAgICBfX3Nsb3RzX18gPSBbIl9fd2Vha3JlZl9fIiwgIl9pb19yZWZzIiwgIl9jbG9zZWQiXQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZhbWlseT1BRl9JTkVULCB0eXBlPVNPQ0tfU1RSRUFNLCBwcm90bz0wLCBmaWxlbm89Tm9uZSk6CisgICAgICAgICMgRm9yIHVzZXIgY29kZSBhZGRyZXNzIGZhbWlseSBhbmQgdHlwZSB2YWx1ZXMgYXJlIEludEVudW0gbWVtYmVycywgYnV0CisgICAgICAgICMgZm9yIHRoZSB1bmRlcmx5aW5nIF9zb2NrZXQuc29ja2V0IHRoZXkncmUganVzdCBpbnRlZ2Vycy4gVGhlCisgICAgICAgICMgY29uc3RydWN0b3Igb2YgX3NvY2tldC5zb2NrZXQgY29udmVydHMgdGhlIGdpdmVuIGFyZ3VtZW50IHRvIGFuCisgICAgICAgICMgaW50ZWdlciBhdXRvbWF0aWNhbGx5LgogICAgICAgICBfc29ja2V0LnNvY2tldC5fX2luaXRfXyhzZWxmLCBmYW1pbHksIHR5cGUsIHByb3RvLCBmaWxlbm8pCiAgICAgICAgIHNlbGYuX2lvX3JlZnMgPSAwCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCkBAIC0xMDMsMTMgKzEzNSwzMiBAQAogICAgICAgICAgICAgc2VsZi5jbG9zZSgpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6Ci0gICAgICAgICIiIldyYXAgX19yZXByX18oKSB0byByZXZlYWwgdGhlIHJlYWwgY2xhc3MgbmFtZS4iIiIKLSAgICAgICAgcyA9IF9zb2NrZXQuc29ja2V0Ll9fcmVwcl9fKHNlbGYpCi0gICAgICAgIGlmIHMuc3RhcnRzd2l0aCgiPHNvY2tldCBvYmplY3QiKToKLSAgICAgICAgICAgIHMgPSAiPCVzLiVzJXMlcyIgJSAoc2VsZi5fX2NsYXNzX18uX19tb2R1bGVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGF0dHIoc2VsZiwgJ19jbG9zZWQnLCBGYWxzZSkgYW5kICIgW2Nsb3NlZF0gIiBvciAiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc1s3Ol0pCisgICAgICAgICIiIldyYXAgX19yZXByX18oKSB0byByZXZlYWwgdGhlIHJlYWwgY2xhc3MgbmFtZSBhbmQgc29ja2V0CisgICAgICAgIGFkZHJlc3MoZXMpLgorICAgICAgICAiIiIKKyAgICAgICAgY2xvc2VkID0gZ2V0YXR0cihzZWxmLCAnX2Nsb3NlZCcsIEZhbHNlKQorICAgICAgICBzID0gIjwlcy4lcyVzIGZkPSVpLCBmYW1pbHk9JXMsIHR5cGU9JXMsIHByb3RvPSVpIiBcCisgICAgICAgICAgICAlIChzZWxmLl9fY2xhc3NfXy5fX21vZHVsZV9fLAorICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18uX19uYW1lX18sCisgICAgICAgICAgICAgICAiIFtjbG9zZWRdIiBpZiBjbG9zZWQgZWxzZSAiIiwKKyAgICAgICAgICAgICAgIHNlbGYuZmlsZW5vKCksCisgICAgICAgICAgICAgICBzZWxmLmZhbWlseSwKKyAgICAgICAgICAgICAgIHNlbGYudHlwZSwKKyAgICAgICAgICAgICAgIHNlbGYucHJvdG8pCisgICAgICAgIGlmIG5vdCBjbG9zZWQ6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbGFkZHIgPSBzZWxmLmdldHNvY2tuYW1lKCkKKyAgICAgICAgICAgICAgICBpZiBsYWRkcjoKKyAgICAgICAgICAgICAgICAgICAgcyArPSAiLCBsYWRkcj0lcyIgJSBzdHIobGFkZHIpCisgICAgICAgICAgICBleGNlcHQgZXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhZGRyID0gc2VsZi5nZXRwZWVybmFtZSgpCisgICAgICAgICAgICAgICAgaWYgcmFkZHI6CisgICAgICAgICAgICAgICAgICAgIHMgKz0gIiwgcmFkZHI9JXMiICUgc3RyKHJhZGRyKQorICAgICAgICAgICAgZXhjZXB0IGVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgcyArPSAnPicKICAgICAgICAgcmV0dXJuIHMKIAogICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CkBAIC0xMTgsNyArMTY5LDggQEAKICAgICBkZWYgZHVwKHNlbGYpOgogICAgICAgICAiIiJkdXAoKSAtPiBzb2NrZXQgb2JqZWN0CiAKLSAgICAgICAgUmV0dXJuIGEgbmV3IHNvY2tldCBvYmplY3QgY29ubmVjdGVkIHRvIHRoZSBzYW1lIHN5c3RlbSByZXNvdXJjZS4KKyAgICAgICAgRHVwbGljYXRlIHRoZSBzb2NrZXQuIFJldHVybiBhIG5ldyBzb2NrZXQgb2JqZWN0IGNvbm5lY3RlZCB0byB0aGUgc2FtZQorICAgICAgICBzeXN0ZW0gcmVzb3VyY2UuIFRoZSBuZXcgc29ja2V0IGlzIG5vbi1pbmhlcml0YWJsZS4KICAgICAgICAgIiIiCiAgICAgICAgIGZkID0gZHVwKHNlbGYuZmlsZW5vKCkpCiAgICAgICAgIHNvY2sgPSBzZWxmLl9fY2xhc3NfXyhzZWxmLmZhbWlseSwgc2VsZi50eXBlLCBzZWxmLnByb3RvLCBmaWxlbm89ZmQpCkBAIC0xMzMsNyArMTg1LDExIEBACiAgICAgICAgIEZvciBJUCBzb2NrZXRzLCB0aGUgYWRkcmVzcyBpbmZvIGlzIGEgcGFpciAoaG9zdGFkZHIsIHBvcnQpLgogICAgICAgICAiIiIKICAgICAgICAgZmQsIGFkZHIgPSBzZWxmLl9hY2NlcHQoKQotICAgICAgICBzb2NrID0gc29ja2V0KHNlbGYuZmFtaWx5LCBzZWxmLnR5cGUsIHNlbGYucHJvdG8sIGZpbGVubz1mZCkKKyAgICAgICAgIyBJZiBvdXIgdHlwZSBoYXMgdGhlIFNPQ0tfTk9OQkxPQ0sgZmxhZywgd2Ugc2hvdWxkbid0IHBhc3MgaXQgb250byB0aGUKKyAgICAgICAgIyBuZXcgc29ja2V0LiBXZSBkbyBub3QgY3VycmVudGx5IGFsbG93IHBhc3NpbmcgU09DS19OT05CTE9DSyB0bworICAgICAgICAjIGFjY2VwdDQsIHNvIHRoZSByZXR1cm5lZCBzb2NrZXQgaXMgYWx3YXlzIGJsb2NraW5nLgorICAgICAgICB0eXBlID0gc2VsZi50eXBlICYgfmdsb2JhbHMoKS5nZXQoIlNPQ0tfTk9OQkxPQ0siLCAwKQorICAgICAgICBzb2NrID0gc29ja2V0KHNlbGYuZmFtaWx5LCB0eXBlLCBzZWxmLnByb3RvLCBmaWxlbm89ZmQpCiAgICAgICAgICMgSXNzdWUgIzc5OTU6IGlmIG5vIGRlZmF1bHQgdGltZW91dCBpcyBzZXQgYW5kIHRoZSBsaXN0ZW5pbmcKICAgICAgICAgIyBzb2NrZXQgaGFkIGEgKG5vbi16ZXJvKSB0aW1lb3V0LCBmb3JjZSB0aGUgbmV3IHNvY2tldCBpbiBibG9ja2luZwogICAgICAgICAjIG1vZGUgdG8gb3ZlcnJpZGUgcGxhdGZvcm0tc3BlY2lmaWMgc29ja2V0IGZsYWdzIGluaGVyaXRhbmNlLgpAQCAtMTQ5LDkgKzIwNSw4IEBACiAgICAgICAgIGV4Y2VwdCB0aGUgb25seSBtb2RlIGNoYXJhY3RlcnMgc3VwcG9ydGVkIGFyZSAncicsICd3JyBhbmQgJ2InLgogICAgICAgICBUaGUgc2VtYW50aWNzIGFyZSBzaW1pbGFyIHRvby4gIChYWFggcmVmYWN0b3IgdG8gc2hhcmUgY29kZT8pCiAgICAgICAgICIiIgotICAgICAgICBmb3IgYyBpbiBtb2RlOgotICAgICAgICAgICAgaWYgYyBub3QgaW4geyJyIiwgInciLCAiYiJ9OgotICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImludmFsaWQgbW9kZSAlciAob25seSByLCB3LCBiIGFsbG93ZWQpIikKKyAgICAgICAgaWYgbm90IHNldChtb2RlKSA8PSB7InIiLCAidyIsICJiIn06CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJpbnZhbGlkIG1vZGUgJXIgKG9ubHkgciwgdywgYiBhbGxvd2VkKSIgJSAobW9kZSwpKQogICAgICAgICB3cml0aW5nID0gInciIGluIG1vZGUKICAgICAgICAgcmVhZGluZyA9ICJyIiBpbiBtb2RlIG9yIG5vdCB3cml0aW5nCiAgICAgICAgIGFzc2VydCByZWFkaW5nIG9yIHdyaXRpbmcKQEAgLTIxMCw2ICsyNjUsMzEgQEAKICAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQogICAgICAgICByZXR1cm4gc3VwZXIoKS5kZXRhY2goKQogCisgICAgQHByb3BlcnR5CisgICAgZGVmIGZhbWlseShzZWxmKToKKyAgICAgICAgIiIiUmVhZC1vbmx5IGFjY2VzcyB0byB0aGUgYWRkcmVzcyBmYW1pbHkgZm9yIHRoaXMgc29ja2V0LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIF9pbnRlbnVtX2NvbnZlcnRlcihzdXBlcigpLmZhbWlseSwgQWRkcmVzc0ZhbWlseSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0eXBlKHNlbGYpOgorICAgICAgICAiIiJSZWFkLW9ubHkgYWNjZXNzIHRvIHRoZSBzb2NrZXQgdHlwZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBfaW50ZW51bV9jb252ZXJ0ZXIoc3VwZXIoKS50eXBlLCBTb2NrZXRLaW5kKQorCisgICAgaWYgb3MubmFtZSA9PSAnbnQnOgorICAgICAgICBkZWYgZ2V0X2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIG9zLmdldF9oYW5kbGVfaW5oZXJpdGFibGUoc2VsZi5maWxlbm8oKSkKKyAgICAgICAgZGVmIHNldF9pbmhlcml0YWJsZShzZWxmLCBpbmhlcml0YWJsZSk6CisgICAgICAgICAgICBvcy5zZXRfaGFuZGxlX2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBnZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gb3MuZ2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCkpCisgICAgICAgIGRlZiBzZXRfaW5oZXJpdGFibGUoc2VsZiwgaW5oZXJpdGFibGUpOgorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKHNlbGYuZmlsZW5vKCksIGluaGVyaXRhYmxlKQorICAgIGdldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIkdldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorICAgIHNldF9pbmhlcml0YWJsZS5fX2RvY19fID0gIlNldCB0aGUgaW5oZXJpdGFibGUgZmxhZyBvZiB0aGUgc29ja2V0IgorCiBkZWYgZnJvbWZkKGZkLCBmYW1pbHksIHR5cGUsIHByb3RvPTApOgogICAgICIiIiBmcm9tZmQoZmQsIGZhbWlseSwgdHlwZVssIHByb3RvXSkgLT4gc29ja2V0IG9iamVjdAogCkBAIC0yMjMsMTAgKzMwMywxMSBAQAogICAgIGRlZiBmcm9tc2hhcmUoaW5mbyk6CiAgICAgICAgICIiIiBmcm9tc2hhcmUoaW5mbykgLT4gc29ja2V0IG9iamVjdAogCi0gICAgICAgIENyZWF0ZSBhIHNvY2tldCBvYmplY3QgZnJvbSBhIHRoZSBieXRlcyBvYmplY3QgcmV0dXJuZWQgYnkKKyAgICAgICAgQ3JlYXRlIGEgc29ja2V0IG9iamVjdCBmcm9tIHRoZSBieXRlcyBvYmplY3QgcmV0dXJuZWQgYnkKICAgICAgICAgc29ja2V0LnNoYXJlKHBpZCkuCiAgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc29ja2V0KDAsIDAsIDAsIGluZm8pCisgICAgX19hbGxfXy5hcHBlbmQoImZyb21zaGFyZSIpCiAKIGlmIGhhc2F0dHIoX3NvY2tldCwgInNvY2tldHBhaXIiKToKIApAQCAtMjkxLDcgKzM3Miw3IEBACiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKICAgICAgICAgc2VsZi5fY2hlY2tSZWFkYWJsZSgpCiAgICAgICAgIGlmIHNlbGYuX3RpbWVvdXRfb2NjdXJyZWQ6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJjYW5ub3QgcmVhZCBmcm9tIHRpbWVkIG91dCBvYmplY3QiKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigiY2Fubm90IHJlYWQgZnJvbSB0aW1lZCBvdXQgb2JqZWN0IikKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc29jay5yZWN2X2ludG8oYikKQEAgLTQzNSwzICs1MTYsMjcgQEAKICAgICAgICAgcmFpc2UgZXJyCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgZXJyb3IoImdldGFkZHJpbmZvIHJldHVybnMgYW4gZW1wdHkgbGlzdCIpCisKK2RlZiBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHk9MCwgdHlwZT0wLCBwcm90bz0wLCBmbGFncz0wKToKKyAgICAiIiJSZXNvbHZlIGhvc3QgYW5kIHBvcnQgaW50byBsaXN0IG9mIGFkZHJlc3MgaW5mbyBlbnRyaWVzLgorCisgICAgVHJhbnNsYXRlIHRoZSBob3N0L3BvcnQgYXJndW1lbnQgaW50byBhIHNlcXVlbmNlIG9mIDUtdHVwbGVzIHRoYXQgY29udGFpbgorICAgIGFsbCB0aGUgbmVjZXNzYXJ5IGFyZ3VtZW50cyBmb3IgY3JlYXRpbmcgYSBzb2NrZXQgY29ubmVjdGVkIHRvIHRoYXQgc2VydmljZS4KKyAgICBob3N0IGlzIGEgZG9tYWluIG5hbWUsIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIElQdjQvdjYgYWRkcmVzcyBvcgorICAgIE5vbmUuIHBvcnQgaXMgYSBzdHJpbmcgc2VydmljZSBuYW1lIHN1Y2ggYXMgJ2h0dHAnLCBhIG51bWVyaWMgcG9ydCBudW1iZXIgb3IKKyAgICBOb25lLiBCeSBwYXNzaW5nIE5vbmUgYXMgdGhlIHZhbHVlIG9mIGhvc3QgYW5kIHBvcnQsIHlvdSBjYW4gcGFzcyBOVUxMIHRvCisgICAgdGhlIHVuZGVybHlpbmcgQyBBUEkuCisKKyAgICBUaGUgZmFtaWx5LCB0eXBlIGFuZCBwcm90byBhcmd1bWVudHMgY2FuIGJlIG9wdGlvbmFsbHkgc3BlY2lmaWVkIGluIG9yZGVyIHRvCisgICAgbmFycm93IHRoZSBsaXN0IG9mIGFkZHJlc3NlcyByZXR1cm5lZC4gUGFzc2luZyB6ZXJvIGFzIGEgdmFsdWUgZm9yIGVhY2ggb2YKKyAgICB0aGVzZSBhcmd1bWVudHMgc2VsZWN0cyB0aGUgZnVsbCByYW5nZSBvZiByZXN1bHRzLgorICAgICIiIgorICAgICMgV2Ugb3ZlcnJpZGUgdGhpcyBmdW5jdGlvbiBzaW5jZSB3ZSB3YW50IHRvIHRyYW5zbGF0ZSB0aGUgbnVtZXJpYyBmYW1pbHkKKyAgICAjIGFuZCBzb2NrZXQgdHlwZSB2YWx1ZXMgdG8gZW51bSBjb25zdGFudHMuCisgICAgYWRkcmxpc3QgPSBbXQorICAgIGZvciByZXMgaW4gX3NvY2tldC5nZXRhZGRyaW5mbyhob3N0LCBwb3J0LCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFncyk6CisgICAgICAgIGFmLCBzb2NrdHlwZSwgcHJvdG8sIGNhbm9ubmFtZSwgc2EgPSByZXMKKyAgICAgICAgYWRkcmxpc3QuYXBwZW5kKChfaW50ZW51bV9jb252ZXJ0ZXIoYWYsIEFkZHJlc3NGYW1pbHkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIF9pbnRlbnVtX2NvbnZlcnRlcihzb2NrdHlwZSwgU29ja2V0S2luZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8sIGNhbm9ubmFtZSwgc2EpKQorICAgIHJldHVybiBhZGRybGlzdApkaWZmIC0tZ2l0IGEvTGliL3NvY2tldHNlcnZlci5weSBiL0xpYi9zb2NrZXRzZXJ2ZXIucHkKaW5kZXggODMzMmZkZi4uNWNiODliZSAxMDA2NDQKLS0tIGEvTGliL3NvY2tldHNlcnZlci5weQorKysgYi9MaWIvc29ja2V0c2VydmVyLnB5CkBAIC0xMzEsNyArMTMxLDYgQEAKIAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHNlbGVjdAotaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgZXJybm8KIHRyeToKQEAgLTEzOSwxMCArMTM4LDEwIEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgaW1wb3J0IGR1bW15X3RocmVhZGluZyBhcyB0aHJlYWRpbmcKIAotX19hbGxfXyA9IFsiVENQU2VydmVyIiwiVURQU2VydmVyIiwiRm9ya2luZ1VEUFNlcnZlciIsIkZvcmtpbmdUQ1BTZXJ2ZXIiLAotICAgICAgICAgICAiVGhyZWFkaW5nVURQU2VydmVyIiwiVGhyZWFkaW5nVENQU2VydmVyIiwiQmFzZVJlcXVlc3RIYW5kbGVyIiwKLSAgICAgICAgICAgIlN0cmVhbVJlcXVlc3RIYW5kbGVyIiwiRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciIsCi0gICAgICAgICAgICJUaHJlYWRpbmdNaXhJbiIsICJGb3JraW5nTWl4SW4iXQorX19hbGxfXyA9IFsiQmFzZVNlcnZlciIsICJUQ1BTZXJ2ZXIiLCAiVURQU2VydmVyIiwgIkZvcmtpbmdVRFBTZXJ2ZXIiLAorICAgICAgICAgICAiRm9ya2luZ1RDUFNlcnZlciIsICJUaHJlYWRpbmdVRFBTZXJ2ZXIiLCAiVGhyZWFkaW5nVENQU2VydmVyIiwKKyAgICAgICAgICAgIkJhc2VSZXF1ZXN0SGFuZGxlciIsICJTdHJlYW1SZXF1ZXN0SGFuZGxlciIsCisgICAgICAgICAgICJEYXRhZ3JhbVJlcXVlc3RIYW5kbGVyIiwgIlRocmVhZGluZ01peEluIiwgIkZvcmtpbmdNaXhJbiJdCiBpZiBoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKToKICAgICBfX2FsbF9fLmV4dGVuZChbIlVuaXhTdHJlYW1TZXJ2ZXIiLCJVbml4RGF0YWdyYW1TZXJ2ZXIiLAogICAgICAgICAgICAgICAgICAgICAiVGhyZWFkaW5nVW5peFN0cmVhbVNlcnZlciIsCkBAIC0yOTksNyArMjk4LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlcXVlc3QsIGNsaWVudF9hZGRyZXNzID0gc2VsZi5nZXRfcmVxdWVzdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIGlmIHNlbGYudmVyaWZ5X3JlcXVlc3QocmVxdWVzdCwgY2xpZW50X2FkZHJlc3MpOgogICAgICAgICAgICAgdHJ5OgpAQCAtNDI3LDggKzQyNiwxMiBAQAogICAgICAgICBzZWxmLnNvY2tldCA9IHNvY2tldC5zb2NrZXQoc2VsZi5hZGRyZXNzX2ZhbWlseSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ja2V0X3R5cGUpCiAgICAgICAgIGlmIGJpbmRfYW5kX2FjdGl2YXRlOgotICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfYmluZCgpCi0gICAgICAgICAgICBzZWxmLnNlcnZlcl9hY3RpdmF0ZSgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfYmluZCgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJfYWN0aXZhdGUoKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIHNlcnZlcl9iaW5kKHNlbGYpOgogICAgICAgICAiIiJDYWxsZWQgYnkgY29uc3RydWN0b3IgdG8gYmluZCB0aGUgc29ja2V0LgpAQCAtNDc5LDcgKzQ4Miw3IEBACiAgICAgICAgICAgICAjZXhwbGljaXRseSBzaHV0ZG93bi4gIHNvY2tldC5jbG9zZSgpIG1lcmVseSByZWxlYXNlcwogICAgICAgICAgICAgI3RoZSBzb2NrZXQgYW5kIHdhaXRzIGZvciBHQyB0byBwZXJmb3JtIHRoZSBhY3R1YWwgY2xvc2UuCiAgICAgICAgICAgICByZXF1ZXN0LnNodXRkb3duKHNvY2tldC5TSFVUX1dSKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MgI3NvbWUgcGxhdGZvcm1zIG1heSByYWlzZSBFTk9UQ09OTiBoZXJlCiAgICAgICAgIHNlbGYuY2xvc2VfcmVxdWVzdChyZXF1ZXN0KQogCkBAIC01MjQsMzUgKzUyNywzOSBAQAogCiAgICAgZGVmIGNvbGxlY3RfY2hpbGRyZW4oc2VsZik6CiAgICAgICAgICIiIkludGVybmFsIHJvdXRpbmUgdG8gd2FpdCBmb3IgY2hpbGRyZW4gdGhhdCBoYXZlIGV4aXRlZC4iIiIKLSAgICAgICAgaWYgc2VsZi5hY3RpdmVfY2hpbGRyZW4gaXMgTm9uZTogcmV0dXJuCi0gICAgICAgIHdoaWxlIGxlbihzZWxmLmFjdGl2ZV9jaGlsZHJlbikgPj0gc2VsZi5tYXhfY2hpbGRyZW46Ci0gICAgICAgICAgICAjIFhYWDogVGhpcyB3aWxsIHdhaXQgZm9yIGFueSBjaGlsZCBwcm9jZXNzLCBub3QganVzdCBvbmVzCi0gICAgICAgICAgICAjIHNwYXduZWQgYnkgdGhpcyBsaWJyYXJ5LiBUaGlzIGNvdWxkIGNvbmZ1c2Ugb3RoZXIKLSAgICAgICAgICAgICMgbGlicmFyaWVzIHRoYXQgZXhwZWN0IHRvIGJlIGFibGUgdG8gd2FpdCBmb3IgdGhlaXIgb3duCi0gICAgICAgICAgICAjIGNoaWxkcmVuLgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZCgwLCAwKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgICAgIHBpZCA9IE5vbmUKLSAgICAgICAgICAgIGlmIHBpZCBub3QgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW46IGNvbnRpbnVlCi0gICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5yZW1vdmUocGlkKQorICAgICAgICBpZiBzZWxmLmFjdGl2ZV9jaGlsZHJlbiBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgIyBYWFg6IFRoaXMgbG9vcCBydW5zIG1vcmUgc3lzdGVtIGNhbGxzIHRoYW4gaXQgb3VnaHQKLSAgICAgICAgIyB0by4gVGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIHB1dCB0aGUgYWN0aXZlX2NoaWxkcmVuIGludG8gYQotICAgICAgICAjIHByb2Nlc3MgZ3JvdXAgYW5kIHRoZW4gdXNlIG9zLndhaXRwaWQoLXBnaWQpIHRvIHdhaXQgZm9yIGFueQotICAgICAgICAjIG9mIHRoYXQgc2V0LCBidXQgSSBjb3VsZG4ndCBmaW5kIGEgd2F5IHRvIGFsbG9jYXRlIHBnaWRzCi0gICAgICAgICMgdGhhdCBjb3VsZG4ndCBjb2xsaWRlLgotICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5hY3RpdmVfY2hpbGRyZW46CisgICAgICAgICMgSWYgd2UncmUgYWJvdmUgdGhlIG1heCBudW1iZXIgb2YgY2hpbGRyZW4sIHdhaXQgYW5kIHJlYXAgdGhlbSB1bnRpbAorICAgICAgICAjIHdlIGdvIGJhY2sgYmVsb3cgdGhyZXNob2xkLiBOb3RlIHRoYXQgd2UgdXNlIHdhaXRwaWQoLTEpIGJlbG93IHRvIGJlCisgICAgICAgICMgYWJsZSB0byBjb2xsZWN0IGNoaWxkcmVuIGluIHNpemUoPGRlZnVuY3QgY2hpbGRyZW4+KSBzeXNjYWxscyBpbnN0ZWFkCisgICAgICAgICMgb2Ygc2l6ZSg8Y2hpbGRyZW4+KTogdGhlIGRvd25zaWRlIGlzIHRoYXQgdGhpcyBtaWdodCByZWFwIGNoaWxkcmVuCisgICAgICAgICMgd2hpY2ggd2UgZGlkbid0IHNwYXduLCB3aGljaCBpcyB3aHkgd2Ugb25seSByZXNvcnQgdG8gdGhpcyB3aGVuIHdlJ3JlCisgICAgICAgICMgYWJvdmUgbWF4X2NoaWxkcmVuLgorICAgICAgICB3aGlsZSBsZW4oc2VsZi5hY3RpdmVfY2hpbGRyZW4pID49IHNlbGYubWF4X2NoaWxkcmVuOgogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBpZCwgc3RhdHVzID0gb3Mud2FpdHBpZChjaGlsZCwgb3MuV05PSEFORykKLSAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgICAgICBwaWQgPSBOb25lCi0gICAgICAgICAgICBpZiBub3QgcGlkOiBjb250aW51ZQorICAgICAgICAgICAgICAgIHBpZCwgXyA9IG9zLndhaXRwaWQoLTEsIDApCisgICAgICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4uZGlzY2FyZChwaWQpCisgICAgICAgICAgICBleGNlcHQgSW50ZXJydXB0ZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgQ2hpbGRQcm9jZXNzRXJyb3I6CisgICAgICAgICAgICAgICAgIyB3ZSBkb24ndCBoYXZlIGFueSBjaGlsZHJlbiwgd2UncmUgZG9uZQorICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLmNsZWFyKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgIyBOb3cgcmVhcCBhbGwgZGVmdW5jdCBjaGlsZHJlbi4KKyAgICAgICAgZm9yIHBpZCBpbiBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5jb3B5KCk6CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hY3RpdmVfY2hpbGRyZW4ucmVtb3ZlKHBpZCkKLSAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignJXMuIHg9JWQgYW5kIGxpc3Q9JXInICUgKGUubWVzc2FnZSwgcGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbikpCisgICAgICAgICAgICAgICAgcGlkLCBfID0gb3Mud2FpdHBpZChwaWQsIG9zLldOT0hBTkcpCisgICAgICAgICAgICAgICAgIyBpZiB0aGUgY2hpbGQgaGFzbid0IGV4aXRlZCB5ZXQsIHBpZCB3aWxsIGJlIDAgYW5kIGlnbm9yZWQgYnkKKyAgICAgICAgICAgICAgICAjIGRpc2NhcmQoKSBiZWxvdworICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLmRpc2NhcmQocGlkKQorICAgICAgICAgICAgZXhjZXB0IENoaWxkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgICAgICMgc29tZW9uZSBlbHNlIHJlYXBlZCBpdAorICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLmRpc2NhcmQocGlkKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIGhhbmRsZV90aW1lb3V0KHNlbGYpOgogICAgICAgICAiIiJXYWl0IGZvciB6b21iaWVzIGFmdGVyIHNlbGYudGltZW91dCBzZWNvbmRzIG9mIGluYWN0aXZpdHkuCkBAIC01NzQsOCArNTgxLDggQEAKICAgICAgICAgaWYgcGlkOgogICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcwogICAgICAgICAgICAgaWYgc2VsZi5hY3RpdmVfY2hpbGRyZW4gaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbiA9IFtdCi0gICAgICAgICAgICBzZWxmLmFjdGl2ZV9jaGlsZHJlbi5hcHBlbmQocGlkKQorICAgICAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuID0gc2V0KCkKKyAgICAgICAgICAgIHNlbGYuYWN0aXZlX2NoaWxkcmVuLmFkZChwaWQpCiAgICAgICAgICAgICBzZWxmLmNsb3NlX3JlcXVlc3QocmVxdWVzdCkKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvZGJhcGkyLnB5IGIvTGliL3NxbGl0ZTMvZGJhcGkyLnB5CmluZGV4IDlhMGI3NjYuLjk5MTY4MmMgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL2RiYXBpMi5weQorKysgYi9MaWIvc3FsaXRlMy9kYmFwaTIucHkKQEAgLTIyLDYgKzIyLDcgQEAKIAogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgdGltZQoraW1wb3J0IGNvbGxlY3Rpb25zLmFiYwogCiBmcm9tIF9zcWxpdGUzIGltcG9ydCAqCiAKQEAgLTUwLDYgKzUxLDcgQEAKIHNxbGl0ZV92ZXJzaW9uX2luZm8gPSB0dXBsZShbaW50KHgpIGZvciB4IGluIHNxbGl0ZV92ZXJzaW9uLnNwbGl0KCIuIildKQogCiBCaW5hcnkgPSBtZW1vcnl2aWV3Citjb2xsZWN0aW9ucy5hYmMuU2VxdWVuY2UucmVnaXN0ZXIoUm93KQogCiBkZWYgcmVnaXN0ZXJfYWRhcHRlcnNfYW5kX2NvbnZlcnRlcnMoKToKICAgICBkZWYgYWRhcHRfZGF0ZSh2YWwpOgpkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvZGJhcGkucHkKaW5kZXggYjdlYzFhZC4uMDQ2NDlmYyAxMDA2NDQKLS0tIGEvTGliL3NxbGl0ZTMvdGVzdC9kYmFwaS5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L2RiYXBpLnB5CkBAIC0yOCw2ICsyOCw5IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmsKKworCiBjbGFzcyBNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIENoZWNrQVBJTGV2ZWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3FsaXRlLmFwaWxldmVsLCAiMi4wIiwKQEAgLTE2Myw2ICsxNjYsMjEgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmN4LmluX3RyYW5zYWN0aW9uID0gVHJ1ZQogCisgICAgZGVmIENoZWNrT3BlblVyaShzZWxmKToKKyAgICAgICAgaWYgc3FsaXRlLnNxbGl0ZV92ZXJzaW9uX2luZm8gPCAoMywgNywgNyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNxbGl0ZS5Ob3RTdXBwb3J0ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc3FsaXRlLmNvbm5lY3QoJzptZW1vcnk6JywgdXJpPVRydWUpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgVEVTVEZOKQorICAgICAgICB3aXRoIHNxbGl0ZS5jb25uZWN0KFRFU1RGTikgYXMgY3g6CisgICAgICAgICAgICBjeC5leGVjdXRlKCdjcmVhdGUgdGFibGUgdGVzdChpZCBpbnRlZ2VyKScpCisgICAgICAgIHdpdGggc3FsaXRlLmNvbm5lY3QoJ2ZpbGU6JyArIFRFU1RGTiwgdXJpPVRydWUpIGFzIGN4OgorICAgICAgICAgICAgY3guZXhlY3V0ZSgnaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzKDApJykKKyAgICAgICAgd2l0aCBzcWxpdGUuY29ubmVjdCgnZmlsZTonICsgVEVTVEZOICsgJz9tb2RlPXJvJywgdXJpPVRydWUpIGFzIGN4OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzcWxpdGUuT3BlcmF0aW9uYWxFcnJvcik6CisgICAgICAgICAgICAgICAgY3guZXhlY3V0ZSgnaW5zZXJ0IGludG8gdGVzdChpZCkgdmFsdWVzKDEpJykKKworCiBjbGFzcyBDdXJzb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLmN4ID0gc3FsaXRlLmNvbm5lY3QoIjptZW1vcnk6IikKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weSBiL0xpYi9zcWxpdGUzL3Rlc3QvZmFjdG9yeS5weQppbmRleCAxMDEzNzU1Li5hODM0OGI0IDEwMDY0NAotLS0gYS9MaWIvc3FsaXRlMy90ZXN0L2ZhY3RvcnkucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC9mYWN0b3J5LnB5CkBAIC0yMyw2ICsyMyw3IEBACiAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHNxbGl0ZTMgYXMgc3FsaXRlCitmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgU2VxdWVuY2UKIAogY2xhc3MgTXlDb25uZWN0aW9uKHNxbGl0ZS5Db25uZWN0aW9uKToKICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTk2LDkgKzk3LDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sMSwgMSwgImJ5IG5hbWU6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uICdBJyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sMiwgMiwgImJ5IG5hbWU6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uICdCJyIpCiAKLSAgICAgICAgY29sMSwgY29sMiA9IHJvd1swXSwgcm93WzFdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sMSwgMSwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAwIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2wyLCAyLCAiYnkgaW5kZXg6IHdyb25nIHJlc3VsdCBmb3IgY29sdW1uIDEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvd1swXSwgMSwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAwIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyb3dbMV0sIDIsICJieSBpbmRleDogd3JvbmcgcmVzdWx0IGZvciBjb2x1bW4gMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93Wy0xXSwgMiwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAtMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocm93Wy0yXSwgMSwgImJ5IGluZGV4OiB3cm9uZyByZXN1bHQgZm9yIGNvbHVtbiAtMiIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJvd1snYyddCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICByb3dbMl0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJvd1stM10KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHJvd1syKioxMDAwXQogCiAgICAgZGVmIENoZWNrU3FsaXRlUm93SXRlcihzZWxmKToKICAgICAgICAgIiIiQ2hlY2tzIGlmIHRoZSByb3cgb2JqZWN0IGlzIGl0ZXJhYmxlIiIiCkBAIC0xNDIsNiArMTUzLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocm93XzEsIHJvd18zKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGhhc2gocm93XzEpLCBoYXNoKHJvd18zKSkKIAorICAgIGRlZiBDaGVja1NxbGl0ZVJvd0FzU2VxdWVuY2Uoc2VsZik6CisgICAgICAgICIiIiBDaGVja3MgaWYgdGhlIHJvdyBvYmplY3QgY2FuIGFjdCBsaWtlIGEgc2VxdWVuY2UgIiIiCisgICAgICAgIHNlbGYuY29uLnJvd19mYWN0b3J5ID0gc3FsaXRlLlJvdworICAgICAgICByb3cgPSBzZWxmLmNvbi5leGVjdXRlKCJzZWxlY3QgMSBhcyBhLCAyIGFzIGIiKS5mZXRjaG9uZSgpCisKKyAgICAgICAgYXNfdHVwbGUgPSB0dXBsZShyb3cpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChyb3cpKSwgbGlzdChyZXZlcnNlZChhc190dXBsZSkpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uocm93LCBTZXF1ZW5jZSkKKworICAgIGRlZiBDaGVja0Zha2VDdXJzb3JDbGFzcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjQyNTc6IEluY29ycmVjdCB1c2Ugb2YgUHlPYmplY3RfSXNJbnN0YW5jZSgpIGNhdXNlZAorICAgICAgICAjIHNlZ21lbnRhdGlvbiBmYXVsdC4KKyAgICAgICAgY2xhc3MgRmFrZUN1cnNvcihzdHIpOgorICAgICAgICAgICAgX19jbGFzc19fID0gc3FsaXRlLkN1cnNvcgorICAgICAgICBjdXIgPSBzZWxmLmNvbi5jdXJzb3IoZmFjdG9yeT1GYWtlQ3Vyc29yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNxbGl0ZS5Sb3csIGN1ciwgKCkpCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHNlbGYuY29uLmNsb3NlKCkKIApkaWZmIC0tZ2l0IGEvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5IGIvTGliL3NxbGl0ZTMvdGVzdC9yZWdyZXNzaW9uLnB5CmluZGV4IGM1NTdhYjYuLmVhYWFhMmMgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvcmVncmVzc2lvbi5weQorKysgYi9MaWIvc3FsaXRlMy90ZXN0L3JlZ3Jlc3Npb24ucHkKQEAgLTMzNiw2ICszMzYsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsaXRlLmNvbm5lY3QsICI6bWVtb3J5OiIsIGlzb2xhdGlvbl9sZXZlbD0xMjMpCiAKIAorICAgIGRlZiBDaGVja051bGxDaGFyYWN0ZXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxMTQ3CisgICAgICAgIGNvbiA9IHNxbGl0ZS5jb25uZWN0KCI6bWVtb3J5OiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbiwgIlwwc2VsZWN0IDEiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb24sICJzZWxlY3QgMVwwIikKKyAgICAgICAgY3VyID0gY29uLmN1cnNvcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN1ci5leGVjdXRlLCAiIFwwc2VsZWN0IDIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdXIuZXhlY3V0ZSwgInNlbGVjdCAyXDAiKQorCisKIGRlZiBzdWl0ZSgpOgogICAgIHJlZ3Jlc3Npb25fc3VpdGUgPSB1bml0dGVzdC5tYWtlU3VpdGUoUmVncmVzc2lvblRlc3RzLCAiQ2hlY2siKQogICAgIHJldHVybiB1bml0dGVzdC5UZXN0U3VpdGUoKHJlZ3Jlc3Npb25fc3VpdGUsKSkKZGlmZiAtLWdpdCBhL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkgYi9MaWIvc3FsaXRlMy90ZXN0L3R5cGVzLnB5CmluZGV4IGE4ZmRhZDkuLmFkYWQ1NzEgMTAwNjQ0Ci0tLSBhL0xpYi9zcWxpdGUzL3Rlc3QvdHlwZXMucHkKKysrIGIvTGliL3NxbGl0ZTMvdGVzdC90eXBlcy5weQpAQCAtODgsMTkgKzg4LDEwIEBACiAgICAgICAgICAgICAgICAgX3ZhbCA9IF92YWwuZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgICAgICBzZWxmLnZhbCA9IF92YWwKIAotICAgICAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgRGVjbFR5cGVzVGVzdHMuRm9vKToKLSAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCi0gICAgICAgICAgICBpZiBzZWxmLnZhbCA9PSBvdGhlci52YWw6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDEKLQogICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgIGMgPSBzZWxmLl9fY21wX18ob3RoZXIpCi0gICAgICAgICAgICBpZiBjIGlzIE5vdEltcGxlbWVudGVkOgotICAgICAgICAgICAgICAgIHJldHVybiBjCi0gICAgICAgICAgICByZXR1cm4gYyA9PSAwCisgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShvdGhlciwgRGVjbFR5cGVzVGVzdHMuRm9vKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbCA9PSBvdGhlci52YWwKIAogICAgICAgICBkZWYgX19jb25mb3JtX18oc2VsZiwgcHJvdG9jb2wpOgogICAgICAgICAgICAgaWYgcHJvdG9jb2wgaXMgc3FsaXRlLlByZXBhcmVQcm90b2NvbDoKZGlmZiAtLWdpdCBhL0xpYi9zcmVfY29tcGlsZS5weSBiL0xpYi9zcmVfY29tcGlsZS5weQppbmRleCBiOTg0YTU0Li41NTBlYTE1IDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbXBpbGUucHkKKysrIGIvTGliL3NyZV9jb21waWxlLnB5CkBAIC0xMCw5ICsxMCwxMCBAQAogCiAiIiJJbnRlcm5hbCBzdXBwb3J0IG1vZHVsZSBmb3Igc3JlIiIiCiAKLWltcG9ydCBfc3JlLCBzeXMKK2ltcG9ydCBfc3JlCiBpbXBvcnQgc3JlX3BhcnNlCiBmcm9tIHNyZV9jb25zdGFudHMgaW1wb3J0ICoKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKIGFzc2VydCBfc3JlLk1BR0lDID09IE1BR0lDLCAiU1JFIG1vZHVsZSBtaXNtYXRjaCIKIApAQCAtMjEsMTQgKzIyLDUxIEBACiBlbHNlOgogICAgIE1BWENPREUgPSAweEZGRkZGRkZGCiAKLWRlZiBfaWRlbnRpdHlmdW5jdGlvbih4KToKLSAgICByZXR1cm4geAotCiBfTElURVJBTF9DT0RFUyA9IHNldChbTElURVJBTCwgTk9UX0xJVEVSQUxdKQogX1JFUEVBVElOR19DT0RFUyA9IHNldChbUkVQRUFULCBNSU5fUkVQRUFULCBNQVhfUkVQRUFUXSkKIF9TVUNDRVNTX0NPREVTID0gc2V0KFtTVUNDRVNTLCBGQUlMVVJFXSkKIF9BU1NFUlRfQ09ERVMgPSBzZXQoW0FTU0VSVCwgQVNTRVJUX05PVF0pCiAKKyMgU2V0cyBvZiBsb3dlcmNhc2UgY2hhcmFjdGVycyB3aGljaCBoYXZlIHRoZSBzYW1lIHVwcGVyY2FzZS4KK19lcXVpdmFsZW5jZXMgPSAoCisgICAgIyBMQVRJTiBTTUFMTCBMRVRURVIgSSwgTEFUSU4gU01BTEwgTEVUVEVSIERPVExFU1MgSQorICAgICgweDY5LCAweDEzMSksICMgacSxCisgICAgIyBMQVRJTiBTTUFMTCBMRVRURVIgUywgTEFUSU4gU01BTEwgTEVUVEVSIExPTkcgUworICAgICgweDczLCAweDE3ZiksICMgc8W/CisgICAgIyBNSUNSTyBTSUdOLCBHUkVFSyBTTUFMTCBMRVRURVIgTVUKKyAgICAoMHhiNSwgMHgzYmMpLCAjIMK1zrwKKyAgICAjIENPTUJJTklORyBHUkVFSyBZUE9HRUdSQU1NRU5JLCBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSwgR1JFRUsgUFJPU0dFR1JBTU1FTkkKKyAgICAoMHgzNDUsIDB4M2I5LCAweDFmYmUpLCAjIFx1MDM0Nc654b6+CisgICAgIyBHUkVFSyBTTUFMTCBMRVRURVIgSU9UQSBXSVRIIERJQUxZVElLQSBBTkQgVE9OT1MsIEdSRUVLIFNNQUxMIExFVFRFUiBJT1RBIFdJVEggRElBTFlUSUtBIEFORCBPWElBCisgICAgKDB4MzkwLCAweDFmZDMpLCAjIM6Q4b+TCisgICAgIyBHUkVFSyBTTUFMTCBMRVRURVIgVVBTSUxPTiBXSVRIIERJQUxZVElLQSBBTkQgVE9OT1MsIEdSRUVLIFNNQUxMIExFVFRFUiBVUFNJTE9OIFdJVEggRElBTFlUSUtBIEFORCBPWElBCisgICAgKDB4M2IwLCAweDFmZTMpLCAjIM6w4b+jCisgICAgIyBHUkVFSyBTTUFMTCBMRVRURVIgQkVUQSwgR1JFRUsgQkVUQSBTWU1CT0wKKyAgICAoMHgzYjIsIDB4M2QwKSwgIyDOss+QCisgICAgIyBHUkVFSyBTTUFMTCBMRVRURVIgRVBTSUxPTiwgR1JFRUsgTFVOQVRFIEVQU0lMT04gU1lNQk9MCisgICAgKDB4M2I1LCAweDNmNSksICMgzrXPtQorICAgICMgR1JFRUsgU01BTEwgTEVUVEVSIFRIRVRBLCBHUkVFSyBUSEVUQSBTWU1CT0wKKyAgICAoMHgzYjgsIDB4M2QxKSwgIyDOuM+RCisgICAgIyBHUkVFSyBTTUFMTCBMRVRURVIgS0FQUEEsIEdSRUVLIEtBUFBBIFNZTUJPTAorICAgICgweDNiYSwgMHgzZjApLCAjIM66z7AKKyAgICAjIEdSRUVLIFNNQUxMIExFVFRFUiBQSSwgR1JFRUsgUEkgU1lNQk9MCisgICAgKDB4M2MwLCAweDNkNiksICMgz4DPlgorICAgICMgR1JFRUsgU01BTEwgTEVUVEVSIFJITywgR1JFRUsgUkhPIFNZTUJPTAorICAgICgweDNjMSwgMHgzZjEpLCAjIM+Bz7EKKyAgICAjIEdSRUVLIFNNQUxMIExFVFRFUiBGSU5BTCBTSUdNQSwgR1JFRUsgU01BTEwgTEVUVEVSIFNJR01BCisgICAgKDB4M2MyLCAweDNjMyksICMgz4LPgworICAgICMgR1JFRUsgU01BTEwgTEVUVEVSIFBISSwgR1JFRUsgUEhJIFNZTUJPTAorICAgICgweDNjNiwgMHgzZDUpLCAjIM+Gz5UKKyAgICAjIExBVElOIFNNQUxMIExFVFRFUiBTIFdJVEggRE9UIEFCT1ZFLCBMQVRJTiBTTUFMTCBMRVRURVIgTE9ORyBTIFdJVEggRE9UIEFCT1ZFCisgICAgKDB4MWU2MSwgMHgxZTliKSwgIyDhuaHhupsKKyAgICAjIExBVElOIFNNQUxMIExJR0FUVVJFIExPTkcgUyBULCBMQVRJTiBTTUFMTCBMSUdBVFVSRSBTVAorICAgICgweGZiMDUsIDB4ZmIwNiksICMg76yF76yGCispCisKKyMgTWFwcyB0aGUgbG93ZXJjYXNlIGNvZGUgdG8gbG93ZXJjYXNlIGNvZGVzIHdoaWNoIGhhdmUgdGhlIHNhbWUgdXBwZXJjYXNlLgorX2lnbm9yZWNhc2VfZml4ZXMgPSB7aTogdHVwbGUoaiBmb3IgaiBpbiB0IGlmIGkgIT0gaikKKyAgICAgICAgICAgICAgICAgICAgIGZvciB0IGluIF9lcXVpdmFsZW5jZXMgZm9yIGkgaW4gdH0KKwogZGVmIF9jb21waWxlKGNvZGUsIHBhdHRlcm4sIGZsYWdzKToKICAgICAjIGludGVybmFsOiBjb21waWxlIGEgKHN1YilwYXR0ZXJuCiAgICAgZW1pdCA9IGNvZGUuYXBwZW5kCkBAIC0zNywxMSArNzUsMjkgQEAKICAgICBSRVBFQVRJTkdfQ09ERVMgPSBfUkVQRUFUSU5HX0NPREVTCiAgICAgU1VDQ0VTU19DT0RFUyA9IF9TVUNDRVNTX0NPREVTCiAgICAgQVNTRVJUX0NPREVTID0gX0FTU0VSVF9DT0RFUworICAgIGlmIChmbGFncyAmIFNSRV9GTEFHX0lHTk9SRUNBU0UgYW5kCisgICAgICAgICAgICBub3QgKGZsYWdzICYgU1JFX0ZMQUdfTE9DQUxFKSBhbmQKKyAgICAgICAgICAgIGZsYWdzICYgU1JFX0ZMQUdfVU5JQ09ERSk6CisgICAgICAgIGZpeGVzID0gX2lnbm9yZWNhc2VfZml4ZXMKKyAgICBlbHNlOgorICAgICAgICBmaXhlcyA9IE5vbmUKICAgICBmb3Igb3AsIGF2IGluIHBhdHRlcm46CiAgICAgICAgIGlmIG9wIGluIExJVEVSQUxfQ09ERVM6CiAgICAgICAgICAgICBpZiBmbGFncyAmIFNSRV9GTEFHX0lHTk9SRUNBU0U6Ci0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW09QX0lHTk9SRVtvcF1dKQotICAgICAgICAgICAgICAgIGVtaXQoX3NyZS5nZXRsb3dlcihhdiwgZmxhZ3MpKQorICAgICAgICAgICAgICAgIGxvID0gX3NyZS5nZXRsb3dlcihhdiwgZmxhZ3MpCisgICAgICAgICAgICAgICAgaWYgZml4ZXMgYW5kIGxvIGluIGZpeGVzOgorICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbSU5fSUdOT1JFXSkKKyAgICAgICAgICAgICAgICAgICAgc2tpcCA9IF9sZW4oY29kZSk7IGVtaXQoMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgb3AgaXMgTk9UX0xJVEVSQUw6CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbTkVHQVRFXSkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gKGxvLCkgKyBmaXhlc1tsb106CisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbTElURVJBTF0pCisgICAgICAgICAgICAgICAgICAgICAgICBlbWl0KGspCisgICAgICAgICAgICAgICAgICAgIGVtaXQoT1BDT0RFU1tGQUlMVVJFXSkKKyAgICAgICAgICAgICAgICAgICAgY29kZVtza2lwXSA9IF9sZW4oY29kZSkgLSBza2lwCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW09QX0lHTk9SRVtvcF1dKQorICAgICAgICAgICAgICAgICAgICBlbWl0KGxvKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbb3BdKQogICAgICAgICAgICAgICAgIGVtaXQoYXYpCkBAIC01Miw5ICsxMDgsOSBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3NyZS5nZXRsb3dlcihsaXRlcmFsLCBmbGFncykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZW1pdChPUENPREVTW29wXSkKLSAgICAgICAgICAgICAgICBmaXh1cCA9IF9pZGVudGl0eWZ1bmN0aW9uCisgICAgICAgICAgICAgICAgZml4dXAgPSBOb25lCiAgICAgICAgICAgICBza2lwID0gX2xlbihjb2RlKTsgZW1pdCgwKQotICAgICAgICAgICAgX2NvbXBpbGVfY2hhcnNldChhdiwgZmxhZ3MsIGNvZGUsIGZpeHVwKQorICAgICAgICAgICAgX2NvbXBpbGVfY2hhcnNldChhdiwgZmxhZ3MsIGNvZGUsIGZpeHVwLCBmaXhlcykKICAgICAgICAgICAgIGNvZGVbc2tpcF0gPSBfbGVuKGNvZGUpIC0gc2tpcAogICAgICAgICBlbGlmIG9wIGlzIEFOWToKICAgICAgICAgICAgIGlmIGZsYWdzICYgU1JFX0ZMQUdfRE9UQUxMOgpAQCAtNjQsMTMgKzEyMCw2IEBACiAgICAgICAgIGVsaWYgb3AgaW4gUkVQRUFUSU5HX0NPREVTOgogICAgICAgICAgICAgaWYgZmxhZ3MgJiBTUkVfRkxBR19URU1QTEFURToKICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigiaW50ZXJuYWw6IHVuc3VwcG9ydGVkIHRlbXBsYXRlIG9wZXJhdG9yIikKLSAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbUkVQRUFUXSkKLSAgICAgICAgICAgICAgICBza2lwID0gX2xlbihjb2RlKTsgZW1pdCgwKQotICAgICAgICAgICAgICAgIGVtaXQoYXZbMF0pCi0gICAgICAgICAgICAgICAgZW1pdChhdlsxXSkKLSAgICAgICAgICAgICAgICBfY29tcGlsZShjb2RlLCBhdlsyXSwgZmxhZ3MpCi0gICAgICAgICAgICAgICAgZW1pdChPUENPREVTW1NVQ0NFU1NdKQotICAgICAgICAgICAgICAgIGNvZGVbc2tpcF0gPSBfbGVuKGNvZGUpIC0gc2tpcAogICAgICAgICAgICAgZWxpZiBfc2ltcGxlKGF2KSBhbmQgb3AgaXMgbm90IFJFUEVBVDoKICAgICAgICAgICAgICAgICBpZiBvcCBpcyBNQVhfUkVQRUFUOgogICAgICAgICAgICAgICAgICAgICBlbWl0KE9QQ09ERVNbUkVQRUFUX09ORV0pCkBAIC0xNzUsMjAgKzIyNCwxOSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5zdXBwb3J0ZWQgb3BlcmFuZCB0eXBlIiwgb3ApCiAKLWRlZiBfY29tcGlsZV9jaGFyc2V0KGNoYXJzZXQsIGZsYWdzLCBjb2RlLCBmaXh1cD1Ob25lKToKK2RlZiBfY29tcGlsZV9jaGFyc2V0KGNoYXJzZXQsIGZsYWdzLCBjb2RlLCBmaXh1cD1Ob25lLCBmaXhlcz1Ob25lKToKICAgICAjIGNvbXBpbGUgY2hhcnNldCBzdWJwcm9ncmFtCiAgICAgZW1pdCA9IGNvZGUuYXBwZW5kCi0gICAgaWYgZml4dXAgaXMgTm9uZToKLSAgICAgICAgZml4dXAgPSBfaWRlbnRpdHlmdW5jdGlvbgotICAgIGZvciBvcCwgYXYgaW4gX29wdGltaXplX2NoYXJzZXQoY2hhcnNldCwgZml4dXApOgorICAgIGZvciBvcCwgYXYgaW4gX29wdGltaXplX2NoYXJzZXQoY2hhcnNldCwgZml4dXAsIGZpeGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MgJiBTUkVfRkxBR19VTklDT0RFKToKICAgICAgICAgZW1pdChPUENPREVTW29wXSkKICAgICAgICAgaWYgb3AgaXMgTkVHQVRFOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbGlmIG9wIGlzIExJVEVSQUw6Ci0gICAgICAgICAgICBlbWl0KGZpeHVwKGF2KSkKKyAgICAgICAgICAgIGVtaXQoYXYpCiAgICAgICAgIGVsaWYgb3AgaXMgUkFOR0U6Ci0gICAgICAgICAgICBlbWl0KGZpeHVwKGF2WzBdKSkKLSAgICAgICAgICAgIGVtaXQoZml4dXAoYXZbMV0pKQorICAgICAgICAgICAgZW1pdChhdlswXSkKKyAgICAgICAgICAgIGVtaXQoYXZbMV0pCiAgICAgICAgIGVsaWYgb3AgaXMgQ0hBUlNFVDoKICAgICAgICAgICAgIGNvZGUuZXh0ZW5kKGF2KQogICAgICAgICBlbGlmIG9wIGlzIEJJR0NIQVJTRVQ6CkBAIC0yMDQsMTYxICsyNTIsMTk1IEBACiAgICAgICAgICAgICByYWlzZSBlcnJvcigiaW50ZXJuYWw6IHVuc3VwcG9ydGVkIHNldCBvcGVyYXRvciIpCiAgICAgZW1pdChPUENPREVTW0ZBSUxVUkVdKQogCi1kZWYgX29wdGltaXplX2NoYXJzZXQoY2hhcnNldCwgZml4dXApOgorZGVmIF9vcHRpbWl6ZV9jaGFyc2V0KGNoYXJzZXQsIGZpeHVwLCBmaXhlcywgaXN1bmljb2RlKToKICAgICAjIGludGVybmFsOiBvcHRpbWl6ZSBjaGFyYWN0ZXIgc2V0CiAgICAgb3V0ID0gW10KLSAgICBvdXRhcHBlbmQgPSBvdXQuYXBwZW5kCi0gICAgY2hhcm1hcCA9IFswXSoyNTYKLSAgICB0cnk6Ci0gICAgICAgIGZvciBvcCwgYXYgaW4gY2hhcnNldDoKLSAgICAgICAgICAgIGlmIG9wIGlzIE5FR0FURToKLSAgICAgICAgICAgICAgICBvdXRhcHBlbmQoKG9wLCBhdikpCi0gICAgICAgICAgICBlbGlmIG9wIGlzIExJVEVSQUw6Ci0gICAgICAgICAgICAgICAgY2hhcm1hcFtmaXh1cChhdildID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBSQU5HRToKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShmaXh1cChhdlswXSksIGZpeHVwKGF2WzFdKSsxKToKLSAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgQ0FURUdPUlk6Ci0gICAgICAgICAgICAgICAgIyBYWFg6IGNvdWxkIGFwcGVuZCB0byBjaGFybWFwIHRhaWwKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnNldCAjIGNhbm5vdCBjb21wcmVzcwotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAjIGNoYXJhY3RlciBzZXQgY29udGFpbnMgdW5pY29kZSBjaGFyYWN0ZXJzCi0gICAgICAgIHJldHVybiBfb3B0aW1pemVfdW5pY29kZShjaGFyc2V0LCBmaXh1cCkKKyAgICB0YWlsID0gW10KKyAgICBjaGFybWFwID0gYnl0ZWFycmF5KDI1NikKKyAgICBmb3Igb3AsIGF2IGluIGNoYXJzZXQ6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgb3AgaXMgTElURVJBTDoKKyAgICAgICAgICAgICAgICAgICAgaWYgZml4dXA6CisgICAgICAgICAgICAgICAgICAgICAgICBpID0gZml4dXAoYXYpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ldID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZml4ZXMgYW5kIGkgaW4gZml4ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGsgaW4gZml4ZXNbaV06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJtYXBba10gPSAxCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2F2XSA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIFJBTkdFOgorICAgICAgICAgICAgICAgICAgICByID0gcmFuZ2UoYXZbMF0sIGF2WzFdKzEpCisgICAgICAgICAgICAgICAgICAgIGlmIGZpeHVwOgorICAgICAgICAgICAgICAgICAgICAgICAgciA9IG1hcChmaXh1cCwgcikKKyAgICAgICAgICAgICAgICAgICAgaWYgZml4dXAgYW5kIGZpeGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFybWFwW2ldID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgaW4gZml4ZXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBrIGluIGZpeGVzW2ldOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtrXSA9IDEKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcm1hcFtpXSA9IDEKKyAgICAgICAgICAgICAgICBlbGlmIG9wIGlzIE5FR0FURToKKyAgICAgICAgICAgICAgICAgICAgb3V0LmFwcGVuZCgob3AsIGF2KSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0YWlsLmFwcGVuZCgob3AsIGF2KSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGlmIGxlbihjaGFybWFwKSA9PSAyNTY6CisgICAgICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHNldCBjb250YWlucyBub24tVUNTMSBjaGFyYWN0ZXIgY29kZXMKKyAgICAgICAgICAgICAgICAgICAgY2hhcm1hcCArPSBiJ1wwJyAqIDB4ZmYwMAorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHNldCBjb250YWlucyBub24tQk1QIGNoYXJhY3RlciBjb2RlcworICAgICAgICAgICAgICAgIGlmIGZpeHVwIGFuZCBpc3VuaWNvZGUgYW5kIG9wIGlzIFJBTkdFOgorICAgICAgICAgICAgICAgICAgICBsbywgaGkgPSBhdgorICAgICAgICAgICAgICAgICAgICByYW5nZXMgPSBbYXZdCisgICAgICAgICAgICAgICAgICAgICMgVGhlcmUgYXJlIG9ubHkgdHdvIHJhbmdlcyBvZiBjYXNlZCBhc3RyYWwgY2hhcmFjdGVyczoKKyAgICAgICAgICAgICAgICAgICAgIyAxMDQwMC0xMDQ0RiAoRGVzZXJldCkgYW5kIDExOEEwLTExOERGIChXYXJhbmcgQ2l0aSkuCisgICAgICAgICAgICAgICAgICAgIF9maXh1cF9yYW5nZShtYXgoMHgxMDAwMCwgbG8pLCBtaW4oMHgxMWZmZiwgaGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzLCBmaXh1cCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIGxvLCBoaSBpbiByYW5nZXM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBsbyA9PSBoaToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsLmFwcGVuZCgoTElURVJBTCwgaGkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsLmFwcGVuZCgoUkFOR0UsIChsbywgaGkpKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB0YWlsLmFwcGVuZCgob3AsIGF2KSkKKyAgICAgICAgICAgIGJyZWFrCisKICAgICAjIGNvbXByZXNzIGNoYXJhY3RlciBtYXAKLSAgICBpID0gcCA9IG4gPSAwCiAgICAgcnVucyA9IFtdCi0gICAgcnVuc2FwcGVuZCA9IHJ1bnMuYXBwZW5kCi0gICAgZm9yIGMgaW4gY2hhcm1hcDoKLSAgICAgICAgaWYgYzoKLSAgICAgICAgICAgIGlmIG4gPT0gMDoKLSAgICAgICAgICAgICAgICBwID0gaQotICAgICAgICAgICAgbiA9IG4gKyAxCi0gICAgICAgIGVsaWYgbjoKLSAgICAgICAgICAgIHJ1bnNhcHBlbmQoKHAsIG4pKQotICAgICAgICAgICAgbiA9IDAKLSAgICAgICAgaSA9IGkgKyAxCi0gICAgaWYgbjoKLSAgICAgICAgcnVuc2FwcGVuZCgocCwgbikpCi0gICAgaWYgbGVuKHJ1bnMpIDw9IDI6CisgICAgcSA9IDAKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBwID0gY2hhcm1hcC5maW5kKDEsIHEpCisgICAgICAgIGlmIHAgPCAwOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgaWYgbGVuKHJ1bnMpID49IDI6CisgICAgICAgICAgICBydW5zID0gTm9uZQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcSA9IGNoYXJtYXAuZmluZCgwLCBwKQorICAgICAgICBpZiBxIDwgMDoKKyAgICAgICAgICAgIHJ1bnMuYXBwZW5kKChwLCBsZW4oY2hhcm1hcCkpKQorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcnVucy5hcHBlbmQoKHAsIHEpKQorICAgIGlmIHJ1bnMgaXMgbm90IE5vbmU6CiAgICAgICAgICMgdXNlIGxpdGVyYWwvcmFuZ2UKLSAgICAgICAgZm9yIHAsIG4gaW4gcnVuczoKLSAgICAgICAgICAgIGlmIG4gPT0gMToKLSAgICAgICAgICAgICAgICBvdXRhcHBlbmQoKExJVEVSQUwsIHApKQorICAgICAgICBmb3IgcCwgcSBpbiBydW5zOgorICAgICAgICAgICAgaWYgcSAtIHAgPT0gMToKKyAgICAgICAgICAgICAgICBvdXQuYXBwZW5kKChMSVRFUkFMLCBwKSkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgb3V0YXBwZW5kKChSQU5HRSwgKHAsIHArbi0xKSkpCi0gICAgICAgIGlmIGxlbihvdXQpIDwgbGVuKGNoYXJzZXQpOgorICAgICAgICAgICAgICAgIG91dC5hcHBlbmQoKFJBTkdFLCAocCwgcSAtIDEpKSkKKyAgICAgICAgb3V0ICs9IHRhaWwKKyAgICAgICAgIyBpZiB0aGUgY2FzZSB3YXMgY2hhbmdlZCBvciBuZXcgcmVwcmVzZW50YXRpb24gaXMgbW9yZSBjb21wYWN0CisgICAgICAgIGlmIGZpeHVwIG9yIGxlbihvdXQpIDwgbGVuKGNoYXJzZXQpOgogICAgICAgICAgICAgcmV0dXJuIG91dAotICAgIGVsc2U6Ci0gICAgICAgICMgdXNlIGJpdG1hcAorICAgICAgICAjIGVsc2Ugb3JpZ2luYWwgY2hhcmFjdGVyIHNldCBpcyBnb29kIGVub3VnaAorICAgICAgICByZXR1cm4gY2hhcnNldAorCisgICAgIyB1c2UgYml0bWFwCisgICAgaWYgbGVuKGNoYXJtYXApID09IDI1NjoKICAgICAgICAgZGF0YSA9IF9ta19iaXRtYXAoY2hhcm1hcCkKLSAgICAgICAgb3V0YXBwZW5kKChDSEFSU0VULCBkYXRhKSkKKyAgICAgICAgb3V0LmFwcGVuZCgoQ0hBUlNFVCwgZGF0YSkpCisgICAgICAgIG91dCArPSB0YWlsCiAgICAgICAgIHJldHVybiBvdXQKLSAgICByZXR1cm4gY2hhcnNldAogCi1kZWYgX21rX2JpdG1hcChiaXRzKToKLSAgICBkYXRhID0gW10KLSAgICBkYXRhYXBwZW5kID0gZGF0YS5hcHBlbmQKLSAgICBpZiBfc3JlLkNPREVTSVpFID09IDI6Ci0gICAgICAgIHN0YXJ0ID0gKDEsIDApCi0gICAgZWxzZToKLSAgICAgICAgc3RhcnQgPSAoMSwgMCkKLSAgICBtLCB2ID0gc3RhcnQKLSAgICBmb3IgYyBpbiBiaXRzOgotICAgICAgICBpZiBjOgotICAgICAgICAgICAgdiA9IHYgKyBtCi0gICAgICAgIG0gPSBtICsgbQotICAgICAgICBpZiBtID4gTUFYQ09ERToKLSAgICAgICAgICAgIGRhdGFhcHBlbmQodikKLSAgICAgICAgICAgIG0sIHYgPSBzdGFydAotICAgIHJldHVybiBkYXRhCisgICAgIyBUbyByZXByZXNlbnQgYSBiaWcgY2hhcnNldCwgZmlyc3QgYSBiaXRtYXAgb2YgYWxsIGNoYXJhY3RlcnMgaW4gdGhlCisgICAgIyBzZXQgaXMgY29uc3RydWN0ZWQuIFRoZW4sIHRoaXMgYml0bWFwIGlzIHNsaWNlZCBpbnRvIGNodW5rcyBvZiAyNTYKKyAgICAjIGNoYXJhY3RlcnMsIGR1cGxpY2F0ZSBjaHVua3MgYXJlIGVsaW1pbmF0ZWQsIGFuZCBlYWNoIGNodW5rIGlzCisgICAgIyBnaXZlbiBhIG51bWJlci4gSW4gdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24sIHRoZSBjaGFyc2V0IGlzCisgICAgIyByZXByZXNlbnRlZCBieSBhIDMyLWJpdCB3b3JkIHNlcXVlbmNlLCBjb25zaXN0aW5nIG9mIG9uZSB3b3JkIGZvcgorICAgICMgdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgY2h1bmtzLCBhIHNlcXVlbmNlIG9mIDI1NiBieXRlcyAoNjQgd29yZHMpCisgICAgIyBvZiBjaHVuayBudW1iZXJzIGluZGV4ZWQgYnkgdGhlaXIgb3JpZ2luYWwgY2h1bmsgcG9zaXRpb24sIGFuZCBhCisgICAgIyBzZXF1ZW5jZSBvZiAyNTYtYml0IGNodW5rcyAoOCB3b3JkcyBlYWNoKS4KIAotIyBUbyByZXByZXNlbnQgYSBiaWcgY2hhcnNldCwgZmlyc3QgYSBiaXRtYXAgb2YgYWxsIGNoYXJhY3RlcnMgaW4gdGhlCi0jIHNldCBpcyBjb25zdHJ1Y3RlZC4gVGhlbiwgdGhpcyBiaXRtYXAgaXMgc2xpY2VkIGludG8gY2h1bmtzIG9mIDI1NgotIyBjaGFyYWN0ZXJzLCBkdXBsaWNhdGUgY2h1bmtzIGFyZSBlbGltaW5hdGVkLCBhbmQgZWFjaCBjaHVuayBpcwotIyBnaXZlbiBhIG51bWJlci4gSW4gdGhlIGNvbXBpbGVkIGV4cHJlc3Npb24sIHRoZSBjaGFyc2V0IGlzCi0jIHJlcHJlc2VudGVkIGJ5IGEgMzItYml0IHdvcmQgc2VxdWVuY2UsIGNvbnNpc3Rpbmcgb2Ygb25lIHdvcmQgZm9yCi0jIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IGNodW5rcywgYSBzZXF1ZW5jZSBvZiAyNTYgYnl0ZXMgKDY0IHdvcmRzKQotIyBvZiBjaHVuayBudW1iZXJzIGluZGV4ZWQgYnkgdGhlaXIgb3JpZ2luYWwgY2h1bmsgcG9zaXRpb24sIGFuZCBhCi0jIHNlcXVlbmNlIG9mIDI1Ni1iaXQgY2h1bmtzICg4IHdvcmRzIGVhY2gpLgorICAgICMgQ29tcHJlc3Npb24gaXMgbm9ybWFsbHkgZ29vZDogaW4gYSB0eXBpY2FsIGNoYXJzZXQsIGxhcmdlIHJhbmdlcyBvZgorICAgICMgVW5pY29kZSB3aWxsIGJlIGVpdGhlciBjb21wbGV0ZWx5IGV4Y2x1ZGVkIChlLmcuIGlmIG9ubHkgY3lyaWxsaWMKKyAgICAjIGxldHRlcnMgYXJlIHRvIGJlIG1hdGNoZWQpLCBvciBjb21wbGV0ZWx5IGluY2x1ZGVkIChlLmcuIGlmIGxhcmdlCisgICAgIyBzdWJyYW5nZXMgb2YgS2FuamkgbWF0Y2gpLiBUaGVzZSByYW5nZXMgd2lsbCBiZSByZXByZXNlbnRlZCBieQorICAgICMgY2h1bmtzIG9mIGFsbCBvbmUtYml0cyBvciBhbGwgemVyby1iaXRzLgogCi0jIENvbXByZXNzaW9uIGlzIG5vcm1hbGx5IGdvb2Q6IGluIGEgdHlwaWNhbCBjaGFyc2V0LCBsYXJnZSByYW5nZXMgb2YKLSMgVW5pY29kZSB3aWxsIGJlIGVpdGhlciBjb21wbGV0ZWx5IGV4Y2x1ZGVkIChlLmcuIGlmIG9ubHkgY3lyaWxsaWMKLSMgbGV0dGVycyBhcmUgdG8gYmUgbWF0Y2hlZCksIG9yIGNvbXBsZXRlbHkgaW5jbHVkZWQgKGUuZy4gaWYgbGFyZ2UKLSMgc3VicmFuZ2VzIG9mIEthbmppIG1hdGNoKS4gVGhlc2UgcmFuZ2VzIHdpbGwgYmUgcmVwcmVzZW50ZWQgYnkKLSMgY2h1bmtzIG9mIGFsbCBvbmUtYml0cyBvciBhbGwgemVyby1iaXRzLgorICAgICMgTWF0Y2hpbmcgY2FuIGJlIGFsc28gZG9uZSBlZmZpY2llbnRseTogdGhlIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZSBvZgorICAgICMgdGhlIFVuaWNvZGUgY2hhcmFjdGVyIGlzIGFuIGluZGV4IGludG8gdGhlIGNodW5rIG51bWJlciwgYW5kIHRoZQorICAgICMgbGVzcyBzaWduaWZpY2FudCBieXRlIGlzIGEgYml0IGluZGV4IGluIHRoZSBjaHVuayAoanVzdCBsaWtlIHRoZQorICAgICMgQ0hBUlNFVCBtYXRjaGluZykuCiAKLSMgTWF0Y2hpbmcgY2FuIGJlIGFsc28gZG9uZSBlZmZpY2llbnRseTogdGhlIG1vcmUgc2lnbmlmaWNhbnQgYnl0ZSBvZgotIyB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgaXMgYW4gaW5kZXggaW50byB0aGUgY2h1bmsgbnVtYmVyLCBhbmQgdGhlCi0jIGxlc3Mgc2lnbmlmaWNhbnQgYnl0ZSBpcyBhIGJpdCBpbmRleCBpbiB0aGUgY2h1bmsgKGp1c3QgbGlrZSB0aGUKLSMgQ0hBUlNFVCBtYXRjaGluZykuCi0KLSMgVGhlIEJJR0NIQVJTRVQgb3Bjb2RlIHN0aWxsIHN1cHBvcnRzIG9ubHkgc3Vic2V0cwotIyBvZiB0aGUgYmFzaWMgbXVsdGlsaW5ndWFsIHBsYW5lOyBhbiBlZmZpY2llbnQgcmVwcmVzZW50YXRpb24KLSMgZm9yIGFsbCBvZiBVbmljb2RlIGhhcyBub3QgeWV0IGJlZW4gZGV2ZWxvcGVkLiBUaGlzIG1lYW5zLAotIyBpbiBwYXJ0aWN1bGFyLCB0aGF0IG5lZ2F0ZWQgY2hhcnNldHMgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzCi0jIGJpZ2NoYXJzZXRzLgotCi1kZWYgX29wdGltaXplX3VuaWNvZGUoY2hhcnNldCwgZml4dXApOgotICAgIHRyeToKLSAgICAgICAgaW1wb3J0IGFycmF5Ci0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICByZXR1cm4gY2hhcnNldAotICAgIGNoYXJtYXAgPSBbMF0qNjU1MzYKLSAgICBuZWdhdGUgPSAwCi0gICAgdHJ5OgotICAgICAgICBmb3Igb3AsIGF2IGluIGNoYXJzZXQ6Ci0gICAgICAgICAgICBpZiBvcCBpcyBORUdBVEU6Ci0gICAgICAgICAgICAgICAgbmVnYXRlID0gMQotICAgICAgICAgICAgZWxpZiBvcCBpcyBMSVRFUkFMOgotICAgICAgICAgICAgICAgIGNoYXJtYXBbZml4dXAoYXYpXSA9IDEKLSAgICAgICAgICAgIGVsaWYgb3AgaXMgUkFOR0U6Ci0gICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoZml4dXAoYXZbMF0pLCBmaXh1cChhdlsxXSkrMSk6Ci0gICAgICAgICAgICAgICAgICAgIGNoYXJtYXBbaV0gPSAxCi0gICAgICAgICAgICBlbGlmIG9wIGlzIENBVEVHT1JZOgotICAgICAgICAgICAgICAgICMgWFhYOiBjb3VsZCBleHBhbmQgY2F0ZWdvcnkKLSAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnNldCAjIGNhbm5vdCBjb21wcmVzcwotICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAjIG5vbi1CTVAgY2hhcmFjdGVyczsgWFhYIG5vdyB0aGV5IHNob3VsZCB3b3JrCi0gICAgICAgIHJldHVybiBjaGFyc2V0Ci0gICAgaWYgbmVnYXRlOgotICAgICAgICBpZiBzeXMubWF4dW5pY29kZSAhPSA2NTUzNToKLSAgICAgICAgICAgICMgWFhYOiBuZWdhdGlvbiBkb2VzIG5vdCB3b3JrIHdpdGggYmlnIGNoYXJzZXRzCi0gICAgICAgICAgICAjIFhYWDI6IG5vdyB0aGV5IHNob3VsZCB3b3JrLCBidXQgcmVtb3ZpbmcgdGhpcyB3aWxsIG1ha2UgdGhlCi0gICAgICAgICAgICAjIGNoYXJtYXAgMTcgdGltZXMgYmlnZ2VyCi0gICAgICAgICAgICByZXR1cm4gY2hhcnNldAotICAgICAgICBmb3IgaSBpbiByYW5nZSg2NTUzNik6Ci0gICAgICAgICAgICBjaGFybWFwW2ldID0gbm90IGNoYXJtYXBbaV0KKyAgICBjaGFybWFwID0gYnl0ZXMoY2hhcm1hcCkgIyBzaG91bGQgYmUgaGFzaGFibGUKICAgICBjb21wcyA9IHt9Ci0gICAgbWFwcGluZyA9IFswXSoyNTYKKyAgICBtYXBwaW5nID0gYnl0ZWFycmF5KDI1NikKICAgICBibG9jayA9IDAKLSAgICBkYXRhID0gW10KLSAgICBmb3IgaSBpbiByYW5nZSgyNTYpOgotICAgICAgICBjaHVuayA9IHR1cGxlKGNoYXJtYXBbaSoyNTY6KGkrMSkqMjU2XSkKLSAgICAgICAgbmV3ID0gY29tcHMuc2V0ZGVmYXVsdChjaHVuaywgYmxvY2spCi0gICAgICAgIG1hcHBpbmdbaV0gPSBuZXcKLSAgICAgICAgaWYgbmV3ID09IGJsb2NrOgotICAgICAgICAgICAgYmxvY2sgPSBibG9jayArIDEKLSAgICAgICAgICAgIGRhdGEgPSBkYXRhICsgX21rX2JpdG1hcChjaHVuaykKLSAgICBoZWFkZXIgPSBbYmxvY2tdCi0gICAgaWYgX3NyZS5DT0RFU0laRSA9PSAyOgotICAgICAgICBjb2RlID0gJ0gnCi0gICAgZWxzZToKLSAgICAgICAgY29kZSA9ICdJJwotICAgICMgQ29udmVydCBibG9jayBpbmRpY2VzIHRvIGJ5dGUgYXJyYXkgb2YgMjU2IGJ5dGVzCi0gICAgbWFwcGluZyA9IGFycmF5LmFycmF5KCdCJywgbWFwcGluZykudG9ieXRlcygpCi0gICAgIyBDb252ZXJ0IGJ5dGUgYXJyYXkgdG8gd29yZCBhcnJheQotICAgIG1hcHBpbmcgPSBhcnJheS5hcnJheShjb2RlLCBtYXBwaW5nKQotICAgIGFzc2VydCBtYXBwaW5nLml0ZW1zaXplID09IF9zcmUuQ09ERVNJWkUKLSAgICBhc3NlcnQgbGVuKG1hcHBpbmcpICogbWFwcGluZy5pdGVtc2l6ZSA9PSAyNTYKLSAgICBoZWFkZXIgPSBoZWFkZXIgKyBtYXBwaW5nLnRvbGlzdCgpCi0gICAgZGF0YVswOjBdID0gaGVhZGVyCi0gICAgcmV0dXJuIFsoQklHQ0hBUlNFVCwgZGF0YSldCisgICAgZGF0YSA9IGJ5dGVhcnJheSgpCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgNjU1MzYsIDI1Nik6CisgICAgICAgIGNodW5rID0gY2hhcm1hcFtpOiBpICsgMjU2XQorICAgICAgICBpZiBjaHVuayBpbiBjb21wczoKKyAgICAgICAgICAgIG1hcHBpbmdbaSAvLyAyNTZdID0gY29tcHNbY2h1bmtdCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtYXBwaW5nW2kgLy8gMjU2XSA9IGNvbXBzW2NodW5rXSA9IGJsb2NrCisgICAgICAgICAgICBibG9jayArPSAxCisgICAgICAgICAgICBkYXRhICs9IGNodW5rCisgICAgZGF0YSA9IF9ta19iaXRtYXAoZGF0YSkKKyAgICBkYXRhWzA6MF0gPSBbYmxvY2tdICsgX2J5dGVzX3RvX2NvZGVzKG1hcHBpbmcpCisgICAgb3V0LmFwcGVuZCgoQklHQ0hBUlNFVCwgZGF0YSkpCisgICAgb3V0ICs9IHRhaWwKKyAgICByZXR1cm4gb3V0CisKK2RlZiBfZml4dXBfcmFuZ2UobG8sIGhpLCByYW5nZXMsIGZpeHVwKToKKyAgICBmb3IgaSBpbiBtYXAoZml4dXAsIHJhbmdlKGxvLCBoaSsxKSk6CisgICAgICAgIGZvciBrLCAobG8sIGhpKSBpbiBlbnVtZXJhdGUocmFuZ2VzKToKKyAgICAgICAgICAgIGlmIGkgPCBsbzoKKyAgICAgICAgICAgICAgICBpZiBsID09IGxvIC0gMToKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzW2tdID0gKGksIGhpKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJhbmdlcy5pbnNlcnQoaywgKGksIGkpKQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBlbGlmIGkgPiBoaToKKyAgICAgICAgICAgICAgICBpZiBpID09IGhpICsgMToKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VzW2tdID0gKGxvLCBpKQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFuZ2VzLmFwcGVuZCgoaSwgaSkpCisKK19DT0RFQklUUyA9IF9zcmUuQ09ERVNJWkUgKiA4CitfQklUU19UUkFOUyA9IGInMCcgKyBiJzEnICogMjU1CitkZWYgX21rX2JpdG1hcChiaXRzLCBfQ09ERUJJVFM9X0NPREVCSVRTLCBfaW50PWludCk6CisgICAgcyA9IGJpdHMudHJhbnNsYXRlKF9CSVRTX1RSQU5TKVs6Oi0xXQorICAgIHJldHVybiBbX2ludChzW2kgLSBfQ09ERUJJVFM6IGldLCAyKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHMpLCAwLCAtX0NPREVCSVRTKV0KKworZGVmIF9ieXRlc190b19jb2RlcyhiKToKKyAgICAjIENvbnZlcnQgYmxvY2sgaW5kaWNlcyB0byB3b3JkIGFycmF5CisgICAgYSA9IG1lbW9yeXZpZXcoYikuY2FzdCgnSScpCisgICAgYXNzZXJ0IGEuaXRlbXNpemUgPT0gX3NyZS5DT0RFU0laRQorICAgIGFzc2VydCBsZW4oYSkgKiBhLml0ZW1zaXplID09IGxlbihiKQorICAgIHJldHVybiBhLnRvbGlzdCgpCiAKIGRlZiBfc2ltcGxlKGF2KToKICAgICAjIGNoZWNrIGlmIGF2IGlzIGEgInNpbXBsZSIgb3BlcmF0b3IKICAgICBsbywgaGkgPSBhdlsyXS5nZXR3aWR0aCgpCiAgICAgcmV0dXJuIGxvID09IGhpID09IDEgYW5kIGF2WzJdWzBdWzBdICE9IFNVQlBBVFRFUk4KIAorZGVmIF9nZW5lcmF0ZV9vdmVybGFwX3RhYmxlKHByZWZpeCk6CisgICAgIiIiCisgICAgR2VuZXJhdGUgYW4gb3ZlcmxhcCB0YWJsZSBmb3IgdGhlIGZvbGxvd2luZyBwcmVmaXguCisgICAgQW4gb3ZlcmxhcCB0YWJsZSBpcyBhIHRhYmxlIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIHByZWZpeCB3aGljaAorICAgIGluZm9ybXMgYWJvdXQgdGhlIHBvdGVudGlhbCBzZWxmLW92ZXJsYXAgZm9yIGVhY2ggaW5kZXggaW4gdGhlIHByZWZpeDoKKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gMCwgcHJlZml4W2k6XSBjYW4ndCBvdmVybGFwIHByZWZpeFswOi4uLl0KKyAgICAtIGlmIG92ZXJsYXBbaV0gPT0gayB3aXRoIDAgPCBrIDw9IGksIHByZWZpeFtpLWsrMTppKzFdIG92ZXJsYXBzIHdpdGgKKyAgICAgIHByZWZpeFswOmtdCisgICAgIiIiCisgICAgdGFibGUgPSBbMF0gKiBsZW4ocHJlZml4KQorICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihwcmVmaXgpKToKKyAgICAgICAgaWR4ID0gdGFibGVbaSAtIDFdCisgICAgICAgIHdoaWxlIHByZWZpeFtpXSAhPSBwcmVmaXhbaWR4XToKKyAgICAgICAgICAgIGlmIGlkeCA9PSAwOgorICAgICAgICAgICAgICAgIHRhYmxlW2ldID0gMAorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZHggPSB0YWJsZVtpZHggLSAxXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFibGVbaV0gPSBpZHggKyAxCisgICAgcmV0dXJuIHRhYmxlCisKIGRlZiBfY29tcGlsZV9pbmZvKGNvZGUsIHBhdHRlcm4sIGZsYWdzKToKICAgICAjIGludGVybmFsOiBjb21waWxlIGFuIGluZm8gYmxvY2suICBpbiB0aGUgY3VycmVudCB2ZXJzaW9uLAogICAgICMgdGhpcyBjb250YWlucyBtaW4vbWF4IHBhdHRlcm4gd2lkdGgsIGFuZCBhbiBvcHRpb25hbCBsaXRlcmFsCkBAIC00NTUsMTIgKzUzNyw3IEBACiAgICAgICAgIGVtaXQocHJlZml4X3NraXApICMgc2tpcAogICAgICAgICBjb2RlLmV4dGVuZChwcmVmaXgpCiAgICAgICAgICMgZ2VuZXJhdGUgb3ZlcmxhcCB0YWJsZQotICAgICAgICB0YWJsZSA9IFstMV0gKyAoWzBdKmxlbihwcmVmaXgpKQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4ocHJlZml4KSk6Ci0gICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbaV0rMQotICAgICAgICAgICAgd2hpbGUgdGFibGVbaSsxXSA+IDAgYW5kIHByZWZpeFtpXSAhPSBwcmVmaXhbdGFibGVbaSsxXS0xXToKLSAgICAgICAgICAgICAgICB0YWJsZVtpKzFdID0gdGFibGVbdGFibGVbaSsxXS0xXSsxCi0gICAgICAgIGNvZGUuZXh0ZW5kKHRhYmxlWzE6XSkgIyBkb24ndCBzdG9yZSBmaXJzdCBlbnRyeQorICAgICAgICBjb2RlLmV4dGVuZChfZ2VuZXJhdGVfb3ZlcmxhcF90YWJsZShwcmVmaXgpKQogICAgIGVsaWYgY2hhcnNldDoKICAgICAgICAgX2NvbXBpbGVfY2hhcnNldChjaGFyc2V0LCBmbGFncywgY29kZSkKICAgICBjb2RlW3NraXBdID0gbGVuKGNvZGUpIC0gc2tpcApkaWZmIC0tZ2l0IGEvTGliL3NyZV9jb25zdGFudHMucHkgYi9MaWIvc3JlX2NvbnN0YW50cy5weQppbmRleCAzZmI1ZWFjLi4yM2UzNTE2IDEwMDY0NAotLS0gYS9MaWIvc3JlX2NvbnN0YW50cy5weQorKysgYi9MaWIvc3JlX2NvbnN0YW50cy5weQpAQCAtMTUsMTEgKzE1LDcgQEAKIAogTUFHSUMgPSAyMDAzMTAxNwogCi10cnk6Ci0gICAgZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgX3NyZQotICAgIE1BWFJFUEVBVCA9IF9zcmUuTUFYUkVQRUFUID0gNjU1MzUKK2Zyb20gX3NyZSBpbXBvcnQgTUFYUkVQRUFUCiAKICMgU1JFIHN0YW5kYXJkIGV4Y2VwdGlvbiAoYWNjZXNzIGFzIHNyZS5lcnJvcikKICMgc2hvdWxkIHRoaXMgcmVhbGx5IGJlIGhlcmU/CkBAIC0yNTQsNiArMjUwLDggQEAKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX0RPVEFMTCAlZFxuIiAlIFNSRV9GTEFHX0RPVEFMTCkKICAgICBmLndyaXRlKCIjZGVmaW5lIFNSRV9GTEFHX1VOSUNPREUgJWRcbiIgJSBTUkVfRkxBR19VTklDT0RFKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfVkVSQk9TRSAlZFxuIiAlIFNSRV9GTEFHX1ZFUkJPU0UpCisgICAgZi53cml0ZSgiI2RlZmluZSBTUkVfRkxBR19ERUJVRyAlZFxuIiAlIFNSRV9GTEFHX0RFQlVHKQorICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0ZMQUdfQVNDSUkgJWRcbiIgJSBTUkVfRkxBR19BU0NJSSkKIAogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fUFJFRklYICVkXG4iICUgU1JFX0lORk9fUFJFRklYKQogICAgIGYud3JpdGUoIiNkZWZpbmUgU1JFX0lORk9fTElURVJBTCAlZFxuIiAlIFNSRV9JTkZPX0xJVEVSQUwpCmRpZmYgLS1naXQgYS9MaWIvc3JlX3BhcnNlLnB5IGIvTGliL3NyZV9wYXJzZS5weQppbmRleCA4YTc3NzkwLi5kZjFlNjQzIDEwMDY0NAotLS0gYS9MaWIvc3JlX3BhcnNlLnB5CisrKyBiL0xpYi9zcmVfcGFyc2UucHkKQEAgLTEyLDkgKzEyLDggQEAKIAogIyBYWFg6IHNob3cgc3RyaW5nIG9mZnNldCBhbmQgb2ZmZW5kaW5nIGNoYXJhY3RlciBmb3IgYWxsIGVycm9ycwogCi1pbXBvcnQgc3lzCi0KIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgorZnJvbSBfc3JlIGltcG9ydCBNQVhSRVBFQVQKIAogU1BFQ0lBTF9DSEFSUyA9ICIuXFxbeygpKis/XiR8IgogUkVQRUFUX0NIQVJTID0gIiorP3siCkBAIC03MCw2ICs2OSw4IEBACiAgICAgICAgIHNlbGYub3BlbiA9IFtdCiAgICAgICAgIHNlbGYuZ3JvdXBzID0gMQogICAgICAgICBzZWxmLmdyb3VwZGljdCA9IHt9CisgICAgICAgIHNlbGYubG9va2JlaGluZCA9IDAKKwogICAgIGRlZiBvcGVuZ3JvdXAoc2VsZiwgbmFtZT1Ob25lKToKICAgICAgICAgZ2lkID0gc2VsZi5ncm91cHMKICAgICAgICAgc2VsZi5ncm91cHMgPSBnaWQgKyAxCkBAIC05NSwzMyArOTYsNDUgQEAKICAgICAgICAgc2VsZi5kYXRhID0gZGF0YQogICAgICAgICBzZWxmLndpZHRoID0gTm9uZQogICAgIGRlZiBkdW1wKHNlbGYsIGxldmVsPTApOgotICAgICAgICBubCA9IDEKKyAgICAgICAgbmwgPSBUcnVlCiAgICAgICAgIHNlcXR5cGVzID0gKHR1cGxlLCBsaXN0KQogICAgICAgICBmb3Igb3AsIGF2IGluIHNlbGYuZGF0YToKLSAgICAgICAgICAgIHByaW50KGxldmVsKiIgICIgKyBvcCwgZW5kPScgJyk7IG5sID0gMAotICAgICAgICAgICAgaWYgb3AgPT0gImluIjoKKyAgICAgICAgICAgIHByaW50KGxldmVsKiIgICIgKyBvcCwgZW5kPScnKQorICAgICAgICAgICAgaWYgb3AgPT0gSU46CiAgICAgICAgICAgICAgICAgIyBtZW1iZXIgc3VibGFuZ3VhZ2UKLSAgICAgICAgICAgICAgICBwcmludCgpOyBubCA9IDEKKyAgICAgICAgICAgICAgICBwcmludCgpCiAgICAgICAgICAgICAgICAgZm9yIG9wLCBhIGluIGF2OgogICAgICAgICAgICAgICAgICAgICBwcmludCgobGV2ZWwrMSkqIiAgIiArIG9wLCBhKQotICAgICAgICAgICAgZWxpZiBvcCA9PSAiYnJhbmNoIjoKLSAgICAgICAgICAgICAgICBwcmludCgpOyBubCA9IDEKLSAgICAgICAgICAgICAgICBpID0gMAotICAgICAgICAgICAgICAgIGZvciBhIGluIGF2WzFdOgotICAgICAgICAgICAgICAgICAgICBpZiBpID4gMDoKKyAgICAgICAgICAgIGVsaWYgb3AgPT0gQlJBTkNIOgorICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICBmb3IgaSwgYSBpbiBlbnVtZXJhdGUoYXZbMV0pOgorICAgICAgICAgICAgICAgICAgICBpZiBpOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQobGV2ZWwqIiAgIiArICJvciIpCi0gICAgICAgICAgICAgICAgICAgIGEuZHVtcChsZXZlbCsxKTsgbmwgPSAxCi0gICAgICAgICAgICAgICAgICAgIGkgPSBpICsgMQorICAgICAgICAgICAgICAgICAgICBhLmR1bXAobGV2ZWwrMSkKKyAgICAgICAgICAgIGVsaWYgb3AgPT0gR1JPVVBSRUZfRVhJU1RTOgorICAgICAgICAgICAgICAgIGNvbmRncm91cCwgaXRlbV95ZXMsIGl0ZW1fbm8gPSBhdgorICAgICAgICAgICAgICAgIHByaW50KCcnLCBjb25kZ3JvdXApCisgICAgICAgICAgICAgICAgaXRlbV95ZXMuZHVtcChsZXZlbCsxKQorICAgICAgICAgICAgICAgIGlmIGl0ZW1fbm86CisgICAgICAgICAgICAgICAgICAgIHByaW50KGxldmVsKiIgICIgKyAiZWxzZSIpCisgICAgICAgICAgICAgICAgICAgIGl0ZW1fbm8uZHVtcChsZXZlbCsxKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGF2LCBzZXF0eXBlcyk6CisgICAgICAgICAgICAgICAgbmwgPSBGYWxzZQogICAgICAgICAgICAgICAgIGZvciBhIGluIGF2OgogICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGEsIFN1YlBhdHRlcm4pOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5sOiBwcmludCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBhLmR1bXAobGV2ZWwrMSk7IG5sID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5sOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGEuZHVtcChsZXZlbCsxKQorICAgICAgICAgICAgICAgICAgICAgICAgbmwgPSBUcnVlCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludChhLCBlbmQ9JyAnKSA7IG5sID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IG5sOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCcgJywgZW5kPScnKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoYSwgZW5kPScnKQorICAgICAgICAgICAgICAgICAgICAgICAgbmwgPSBGYWxzZQorICAgICAgICAgICAgICAgIGlmIG5vdCBubDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBwcmludChhdiwgZW5kPScgJykgOyBubCA9IDAKLSAgICAgICAgICAgIGlmIG5vdCBubDogcHJpbnQoKQorICAgICAgICAgICAgICAgIHByaW50KCcnLCBhdikKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiByZXByKHNlbGYuZGF0YSkKICAgICBkZWYgX19sZW5fXyhzZWxmKToKQEAgLTM0MSw2ICszNTQsMTEgQEAKICAgICAgICAgICAgIGlmIGdyb3VwIDwgc3RhdGUuZ3JvdXBzOgogICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0ZS5jaGVja2dyb3VwKGdyb3VwKToKICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoImNhbm5vdCByZWZlciB0byBvcGVuIGdyb3VwIikKKyAgICAgICAgICAgICAgICBpZiBzdGF0ZS5sb29rYmVoaW5kOgorICAgICAgICAgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybignZ3JvdXAgcmVmZXJlbmNlcyBpbiBsb29rYmVoaW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNzZXJ0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZVdhcm5pbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIEdST1VQUkVGLCBncm91cAogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgogICAgICAgICBpZiBsZW4oZXNjYXBlKSA9PSAyOgpAQCAtNjE3LDcgKzYzNSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlciIgJSBuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgZ2lkID0gc3RhdGUuZ3JvdXBkaWN0LmdldChuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZ2lkIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVua25vd24gZ3JvdXAgbmFtZSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gInVua25vd24gZ3JvdXAgbmFtZTogezAhcn0iLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKG1zZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN0YXRlLmxvb2tiZWhpbmQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybignZ3JvdXAgcmVmZXJlbmNlcyBpbiBsb29rYmVoaW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhc3NlcnRpb25zIGFyZSBub3Qgc3VwcG9ydGVkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQogICAgICAgICAgICAgICAgICAgICAgICAgc3VicGF0dGVybmFwcGVuZCgoR1JPVVBSRUYsIGdpZCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtNjQ2LDcgKzY3MCwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJzeW50YXggZXJyb3IiKQogICAgICAgICAgICAgICAgICAgICAgICAgZGlyID0gLTEgIyBsb29rYmVoaW5kCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyID0gc291cmNlZ2V0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmxvb2tiZWhpbmQgKz0gMQogICAgICAgICAgICAgICAgICAgICBwID0gX3BhcnNlX3N1Yihzb3VyY2UsIHN0YXRlKQorICAgICAgICAgICAgICAgICAgICBpZiBkaXIgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUubG9va2JlaGluZCAtPSAxCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzb3VyY2VtYXRjaCgiKSIpOgogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IoInVuYmFsYW5jZWQgcGFyZW50aGVzaXMiKQogICAgICAgICAgICAgICAgICAgICBpZiBjaGFyID09ICI9IjoKQEAgLTY3MCwxMiArNjk3LDE4IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIGNvbmRuYW1lLmlzaWRlbnRpZmllcigpOgogICAgICAgICAgICAgICAgICAgICAgICAgY29uZGdyb3VwID0gc3RhdGUuZ3JvdXBkaWN0LmdldChjb25kbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbmRncm91cCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJ1bmtub3duIGdyb3VwIG5hbWUiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJ1bmtub3duIGdyb3VwIG5hbWU6IHswIXJ9Ii5mb3JtYXQoY29uZG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgZXJyb3IobXNnKQogICAgICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRncm91cCA9IGludChjb25kbmFtZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJiYWQgY2hhcmFjdGVyIGluIGdyb3VwIG5hbWUiKQorICAgICAgICAgICAgICAgICAgICBpZiBzdGF0ZS5sb29rYmVoaW5kOgorICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCdncm91cCByZWZlcmVuY2VzIGluIGxvb2tiZWhpbmQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYXNzZXJ0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICMgZmxhZ3MKICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNvdXJjZS5uZXh0IGluIEZMQUdTOgpAQCAtNzY4LDM1ICs4MDEsMzMgQEAKICAgICAjIGdyb3VwIHJlZmVyZW5jZXMKICAgICBzID0gVG9rZW5pemVyKHNvdXJjZSkKICAgICBzZ2V0ID0gcy5nZXQKLSAgICBwID0gW10KLSAgICBhID0gcC5hcHBlbmQKLSAgICBkZWYgbGl0ZXJhbChsaXRlcmFsLCBwPXAsIHBhcHBlbmQ9YSk6Ci0gICAgICAgIGlmIHAgYW5kIHBbLTFdWzBdIGlzIExJVEVSQUw6Ci0gICAgICAgICAgICBwWy0xXSA9IExJVEVSQUwsIHBbLTFdWzFdICsgbGl0ZXJhbAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcGFwcGVuZCgoTElURVJBTCwgbGl0ZXJhbCkpCi0gICAgc2VwID0gc291cmNlWzowXQotICAgIGlmIGlzaW5zdGFuY2Uoc2VwLCBzdHIpOgotICAgICAgICBtYWtlY2hhciA9IGNocgotICAgIGVsc2U6Ci0gICAgICAgIG1ha2VjaGFyID0gY2hyCi0gICAgd2hpbGUgMToKKyAgICBncm91cHMgPSBbXQorICAgIGxpdGVyYWxzID0gW10KKyAgICBsaXRlcmFsID0gW10KKyAgICBsYXBwZW5kID0gbGl0ZXJhbC5hcHBlbmQKKyAgICBkZWYgYWRkZ3JvdXAoaW5kZXgpOgorICAgICAgICBpZiBsaXRlcmFsOgorICAgICAgICAgICAgbGl0ZXJhbHMuYXBwZW5kKCcnLmpvaW4obGl0ZXJhbCkpCisgICAgICAgICAgICBkZWwgbGl0ZXJhbFs6XQorICAgICAgICBncm91cHMuYXBwZW5kKChsZW4obGl0ZXJhbHMpLCBpbmRleCkpCisgICAgICAgIGxpdGVyYWxzLmFwcGVuZChOb25lKQorICAgIHdoaWxlIFRydWU6CiAgICAgICAgIHRoaXMgPSBzZ2V0KCkKICAgICAgICAgaWYgdGhpcyBpcyBOb25lOgogICAgICAgICAgICAgYnJlYWsgIyBlbmQgb2YgcmVwbGFjZW1lbnQgc3RyaW5nCi0gICAgICAgIGlmIHRoaXMgYW5kIHRoaXNbMF0gPT0gIlxcIjoKKyAgICAgICAgaWYgdGhpc1swXSA9PSAiXFwiOgogICAgICAgICAgICAgIyBncm91cAotICAgICAgICAgICAgYyA9IHRoaXNbMToyXQorICAgICAgICAgICAgYyA9IHRoaXNbMV0KICAgICAgICAgICAgIGlmIGMgPT0gImciOgogICAgICAgICAgICAgICAgIG5hbWUgPSAiIgogICAgICAgICAgICAgICAgIGlmIHMubWF0Y2goIjwiKToKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgPSBzZ2V0KCkKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoYXIgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBlcnJvcigidW50ZXJtaW5hdGVkIGdyb3VwIG5hbWUiKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hhciA9PSAiPiI6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBuYW1lICsgY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArPSBjaGFyCiAgICAgICAgICAgICAgICAgaWYgbm90IG5hbWU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIGVycm9yKCJtaXNzaW5nIGdyb3VwIG5hbWUiKQogICAgICAgICAgICAgICAgIHRyeToKQEAgLTgwOSw1MSArODQwLDQwIEBACiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gcGF0dGVybi5ncm91cGluZGV4W25hbWVdCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEluZGV4RXJyb3IoInVua25vd24gZ3JvdXAgbmFtZSIpCi0gICAgICAgICAgICAgICAgYSgoTUFSSywgaW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gInVua25vd24gZ3JvdXAgbmFtZTogezAhcn0iLmZvcm1hdChuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcihtc2cpCisgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW5kZXgpCiAgICAgICAgICAgICBlbGlmIGMgPT0gIjAiOgogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBPQ1RESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aGlzID0gdGhpcyArIHNnZXQoKQotICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyArPSBzZ2V0KCkKKyAgICAgICAgICAgICAgICBsYXBwZW5kKGNocihpbnQodGhpc1sxOl0sIDgpICYgMHhmZikpCiAgICAgICAgICAgICBlbGlmIGMgaW4gRElHSVRTOgogICAgICAgICAgICAgICAgIGlzb2N0YWwgPSBGYWxzZQogICAgICAgICAgICAgICAgIGlmIHMubmV4dCBpbiBESUdJVFM6Ci0gICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgIHRoaXMgKz0gc2dldCgpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjIGluIE9DVERJR0lUUyBhbmQgdGhpc1syXSBpbiBPQ1RESUdJVFMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICBzLm5leHQgaW4gT0NURElHSVRTKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgPSB0aGlzICsgc2dldCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0aGlzICs9IHNnZXQoKQogICAgICAgICAgICAgICAgICAgICAgICAgaXNvY3RhbCA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpdGVyYWwobWFrZWNoYXIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGFwcGVuZChjaHIoaW50KHRoaXNbMTpdLCA4KSAmIDB4ZmYpKQogICAgICAgICAgICAgICAgIGlmIG5vdCBpc29jdGFsOgotICAgICAgICAgICAgICAgICAgICBhKChNQVJLLCBpbnQodGhpc1sxOl0pKSkKKyAgICAgICAgICAgICAgICAgICAgYWRkZ3JvdXAoaW50KHRoaXNbMTpdKSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICB0aGlzID0gbWFrZWNoYXIoRVNDQVBFU1t0aGlzXVsxXSkKKyAgICAgICAgICAgICAgICAgICAgdGhpcyA9IGNocihFU0NBUEVTW3RoaXNdWzFdKQogICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgICAgIGxpdGVyYWwodGhpcykKKyAgICAgICAgICAgICAgICBsYXBwZW5kKHRoaXMpCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsaXRlcmFsKHRoaXMpCi0gICAgIyBjb252ZXJ0IHRlbXBsYXRlIHRvIGdyb3VwcyBhbmQgbGl0ZXJhbHMgbGlzdHMKLSAgICBpID0gMAotICAgIGdyb3VwcyA9IFtdCi0gICAgZ3JvdXBzYXBwZW5kID0gZ3JvdXBzLmFwcGVuZAotICAgIGxpdGVyYWxzID0gW05vbmVdICogbGVuKHApCi0gICAgaWYgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6Ci0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4Ci0gICAgZWxzZToKKyAgICAgICAgICAgIGxhcHBlbmQodGhpcykKKyAgICBpZiBsaXRlcmFsOgorICAgICAgICBsaXRlcmFscy5hcHBlbmQoJycuam9pbihsaXRlcmFsKSkKKyAgICBpZiBub3QgaXNpbnN0YW5jZShzb3VyY2UsIHN0cik6CiAgICAgICAgICMgVGhlIHRva2VuaXplciBpbXBsaWNpdGx5IGRlY29kZXMgYnl0ZXMgb2JqZWN0cyBhcyBsYXRpbi0xLCB3ZSBtdXN0CiAgICAgICAgICMgdGhlcmVmb3JlIHJlLWVuY29kZSB0aGUgZmluYWwgcmVwcmVzZW50YXRpb24uCi0gICAgICAgIGVuY29kZSA9IGxhbWJkYSB4OiB4LmVuY29kZSgnbGF0aW4tMScpCi0gICAgZm9yIGMsIHMgaW4gcDoKLSAgICAgICAgaWYgYyBpcyBNQVJLOgotICAgICAgICAgICAgZ3JvdXBzYXBwZW5kKChpLCBzKSkKLSAgICAgICAgICAgICMgbGl0ZXJhbFtpXSBpcyBhbHJlYWR5IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpdGVyYWxzW2ldID0gZW5jb2RlKHMpCi0gICAgICAgIGkgPSBpICsgMQorICAgICAgICBsaXRlcmFscyA9IFtOb25lIGlmIHMgaXMgTm9uZSBlbHNlIHMuZW5jb2RlKCdsYXRpbi0xJykgZm9yIHMgaW4gbGl0ZXJhbHNdCiAgICAgcmV0dXJuIGdyb3VwcywgbGl0ZXJhbHMKIAogZGVmIGV4cGFuZF90ZW1wbGF0ZSh0ZW1wbGF0ZSwgbWF0Y2gpOgpkaWZmIC0tZ2l0IGEvTGliL3NzbC5weSBiL0xpYi9zc2wucHkKaW5kZXggY2Q4ZDZiNC4uZWM0MmUzOCAxMDA2NDQKLS0tIGEvTGliL3NzbC5weQorKysgYi9MaWIvc3NsLnB5CkBAIC01MiwxMCArNTIsNDcgQEAKIFBST1RPQ09MX1NTTHYzCiBQUk9UT0NPTF9TU0x2MjMKIFBST1RPQ09MX1RMU3YxCitQUk9UT0NPTF9UTFN2MV8xCitQUk9UT0NPTF9UTFN2MV8yCisKK1RoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGlkZW50aWZ5IHZhcmlvdXMgU1NMIGFsZXJ0IG1lc3NhZ2UgZGVzY3JpcHRpb25zIGFzIHBlcgoraHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy90bHMtcGFyYW1ldGVycy90bHMtcGFyYW1ldGVycy54bWwjdGxzLXBhcmFtZXRlcnMtNgorCitBTEVSVF9ERVNDUklQVElPTl9DTE9TRV9OT1RJRlkKK0FMRVJUX0RFU0NSSVBUSU9OX1VORVhQRUNURURfTUVTU0FHRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX1JFQ09SRF9NQUMKK0FMRVJUX0RFU0NSSVBUSU9OX1JFQ09SRF9PVkVSRkxPVworQUxFUlRfREVTQ1JJUFRJT05fREVDT01QUkVTU0lPTl9GQUlMVVJFCitBTEVSVF9ERVNDUklQVElPTl9IQU5EU0hBS0VfRkFJTFVSRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFCitBTEVSVF9ERVNDUklQVElPTl9VTlNVUFBPUlRFRF9DRVJUSUZJQ0FURQorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfUkVWT0tFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfRVhQSVJFRAorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5LTk9XTgorQUxFUlRfREVTQ1JJUFRJT05fSUxMRUdBTF9QQVJBTUVURVIKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fQ0EKK0FMRVJUX0RFU0NSSVBUSU9OX0FDQ0VTU19ERU5JRUQKK0FMRVJUX0RFU0NSSVBUSU9OX0RFQ09ERV9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fREVDUllQVF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fUFJPVE9DT0xfVkVSU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fSU5TVUZGSUNJRU5UX1NFQ1VSSVRZCitBTEVSVF9ERVNDUklQVElPTl9JTlRFUk5BTF9FUlJPUgorQUxFUlRfREVTQ1JJUFRJT05fVVNFUl9DQU5DRUxMRUQKK0FMRVJUX0RFU0NSSVBUSU9OX05PX1JFTkVHT1RJQVRJT04KK0FMRVJUX0RFU0NSSVBUSU9OX1VOU1VQUE9SVEVEX0VYVEVOU0lPTgorQUxFUlRfREVTQ1JJUFRJT05fQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFCitBTEVSVF9ERVNDUklQVElPTl9VTlJFQ09HTklaRURfTkFNRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRQorQUxFUlRfREVTQ1JJUFRJT05fQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUKK0FMRVJUX0RFU0NSSVBUSU9OX1VOS05PV05fUFNLX0lERU5USVRZCiAiIiIKIAogaW1wb3J0IHRleHR3cmFwCiBpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCBvcworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQorZnJvbSBlbnVtIGltcG9ydCBFbnVtIGFzIF9FbnVtCiAKIGltcG9ydCBfc3NsICAgICAgICAgICAgICMgaWYgd2UgY2FuJ3QgaW1wb3J0IGl0LCBsZXQgdGhlIGVycm9yIHByb3BhZ2F0ZQogCkBAIC02Niw0MCArMTAzLDMxIEBACiAgICAgU1NMU3lzY2FsbEVycm9yLCBTU0xFT0ZFcnJvciwKICAgICApCiBmcm9tIF9zc2wgaW1wb3J0IENFUlRfTk9ORSwgQ0VSVF9PUFRJT05BTCwgQ0VSVF9SRVFVSVJFRAotZnJvbSBfc3NsIGltcG9ydCAoCi0gICAgT1BfQUxMLCBPUF9OT19TU0x2MiwgT1BfTk9fU1NMdjMsIE9QX05PX1RMU3YxLAotICAgIE9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSwgT1BfU0lOR0xFX0RIX1VTRQotICAgICkKK2Zyb20gX3NzbCBpbXBvcnQgdHh0Mm9iaiBhcyBfdHh0Mm9iaiwgbmlkMm9iaiBhcyBfbmlkMm9iagorZnJvbSBfc3NsIGltcG9ydCBSQU5EX3N0YXR1cywgUkFORF9hZGQsIFJBTkRfYnl0ZXMsIFJBTkRfcHNldWRvX2J5dGVzCiB0cnk6Ci0gICAgZnJvbSBfc3NsIGltcG9ydCBPUF9OT19DT01QUkVTU0lPTgorICAgIGZyb20gX3NzbCBpbXBvcnQgUkFORF9lZ2QKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAjIExpYnJlU1NMIGRvZXMgbm90IHByb3ZpZGUgUkFORF9lZ2QKICAgICBwYXNzCi10cnk6Ci0gICAgZnJvbSBfc3NsIGltcG9ydCBPUF9TSU5HTEVfRUNESF9VU0UKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCi1mcm9tIF9zc2wgaW1wb3J0IFJBTkRfc3RhdHVzLCBSQU5EX2VnZCwgUkFORF9hZGQsIFJBTkRfYnl0ZXMsIFJBTkRfcHNldWRvX2J5dGVzCi1mcm9tIF9zc2wgaW1wb3J0ICgKLSAgICBTU0xfRVJST1JfWkVST19SRVRVUk4sCi0gICAgU1NMX0VSUk9SX1dBTlRfUkVBRCwKLSAgICBTU0xfRVJST1JfV0FOVF9XUklURSwKLSAgICBTU0xfRVJST1JfV0FOVF9YNTA5X0xPT0tVUCwKLSAgICBTU0xfRVJST1JfU1lTQ0FMTCwKLSAgICBTU0xfRVJST1JfU1NMLAotICAgIFNTTF9FUlJPUl9XQU5UX0NPTk5FQ1QsCi0gICAgU1NMX0VSUk9SX0VPRiwKLSAgICBTU0xfRVJST1JfSU5WQUxJRF9FUlJPUl9DT0RFLAotICAgICkKKworZGVmIF9pbXBvcnRfc3ltYm9scyhwcmVmaXgpOgorICAgIGZvciBuIGluIGRpcihfc3NsKToKKyAgICAgICAgaWYgbi5zdGFydHN3aXRoKHByZWZpeCk6CisgICAgICAgICAgICBnbG9iYWxzKClbbl0gPSBnZXRhdHRyKF9zc2wsIG4pCisKK19pbXBvcnRfc3ltYm9scygnT1BfJykKK19pbXBvcnRfc3ltYm9scygnQUxFUlRfREVTQ1JJUFRJT05fJykKK19pbXBvcnRfc3ltYm9scygnU1NMX0VSUk9SXycpCitfaW1wb3J0X3N5bWJvbHMoJ1BST1RPQ09MXycpCitfaW1wb3J0X3N5bWJvbHMoJ1ZFUklGWV8nKQorCiBmcm9tIF9zc2wgaW1wb3J0IEhBU19TTkksIEhBU19FQ0RILCBIQVNfTlBOCi1mcm9tIF9zc2wgaW1wb3J0IChQUk9UT0NPTF9TU0x2MywgUFJPVE9DT0xfU1NMdjIzLAotICAgICAgICAgICAgICAgICAgUFJPVE9DT0xfVExTdjEpCisKIGZyb20gX3NzbCBpbXBvcnQgX09QRU5TU0xfQVBJX1ZFUlNJT04KIAotX1BST1RPQ09MX05BTUVTID0gewotICAgIFBST1RPQ09MX1RMU3YxOiAiVExTdjEiLAotICAgIFBST1RPQ09MX1NTTHYyMzogIlNTTHYyMyIsCi0gICAgUFJPVE9DT0xfU1NMdjM6ICJTU0x2MyIsCi19CisKK19QUk9UT0NPTF9OQU1FUyA9IHt2YWx1ZTogbmFtZSBmb3IgbmFtZSwgdmFsdWUgaW4gZ2xvYmFscygpLml0ZW1zKCkgaWYgbmFtZS5zdGFydHN3aXRoKCdQUk9UT0NPTF8nKX0KIHRyeToKICAgICBmcm9tIF9zc2wgaW1wb3J0IFBST1RPQ09MX1NTTHYyCiAgICAgX1NTTHYyX0lGX0VYSVNUUyA9IFBST1RPQ09MX1NTTHYyCkBAIC0xMDgsMTQgKzEzNiwyNSBAQAogZWxzZToKICAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfU1NMdjJdID0gIlNTTHYyIgogCi1mcm9tIHNvY2tldCBpbXBvcnQgZ2V0bmFtZWluZm8gYXMgX2dldG5hbWVpbmZvCi1mcm9tIHNvY2tldCBpbXBvcnQgZXJyb3IgYXMgc29ja2V0X2Vycm9yCit0cnk6CisgICAgZnJvbSBfc3NsIGltcG9ydCBQUk9UT0NPTF9UTFN2MV8xLCBQUk9UT0NPTF9UTFN2MV8yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcworZWxzZToKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMV0gPSAiVExTdjEuMSIKKyAgICBfUFJPVE9DT0xfTkFNRVNbUFJPVE9DT0xfVExTdjFfMl0gPSAiVExTdjEuMiIKKworaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgZnJvbSBfc3NsIGltcG9ydCBlbnVtX2NlcnRpZmljYXRlcywgZW51bV9jcmxzCisKIGZyb20gc29ja2V0IGltcG9ydCBzb2NrZXQsIEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBjcmVhdGVfY29ubmVjdGlvbgogZnJvbSBzb2NrZXQgaW1wb3J0IFNPTF9TT0NLRVQsIFNPX1RZUEUKIGltcG9ydCBiYXNlNjQgICAgICAgICMgZm9yIERFUi10by1QRU0gdHJhbnNsYXRpb24KLWltcG9ydCB0cmFjZWJhY2sKIGltcG9ydCBlcnJubwogCisKK3NvY2tldF9lcnJvciA9IE9TRXJyb3IgICMga2VlcCB0aGF0IHB1YmxpYyBuYW1lIGluIG1vZHVsZSBuYW1lc3BhY2UKKwogaWYgX3NzbC5IQVNfVExTX1VOSVFVRToKICAgICBDSEFOTkVMX0JJTkRJTkdfVFlQRVMgPSBbJ3Rscy11bmlxdWUnXQogZWxzZToKQEAgLTEyMyw3ICsxNjIsMzUgQEAKIAogIyBEaXNhYmxlIHdlYWsgb3IgaW5zZWN1cmUgY2lwaGVycyBieSBkZWZhdWx0CiAjIChPcGVuU1NMJ3MgZGVmYXVsdCBzZXR0aW5nIGlzICdERUZBVUxUOiFhTlVMTDohZU5VTEwnKQotX0RFRkFVTFRfQ0lQSEVSUyA9ICdERUZBVUxUOiFhTlVMTDohZU5VTEw6IUxPVzohRVhQT1JUOiFTU0x2MicKKyMgRW5hYmxlIGEgYmV0dGVyIHNldCBvZiBjaXBoZXJzIGJ5IGRlZmF1bHQKKyMgVGhpcyBsaXN0IGhhcyBiZWVuIGV4cGxpY2l0bHkgY2hvc2VuIHRvOgorIyAgICogUHJlZmVyIGNpcGhlciBzdWl0ZXMgdGhhdCBvZmZlciBwZXJmZWN0IGZvcndhcmQgc2VjcmVjeSAoREhFL0VDREhFKQorIyAgICogUHJlZmVyIEVDREhFIG92ZXIgREhFIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKKyMgICAqIFByZWZlciBhbnkgQUVTLUdDTSBvdmVyIGFueSBBRVMtQ0JDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5CisjICAgKiBUaGVuIFVzZSBISUdIIGNpcGhlciBzdWl0ZXMgYXMgYSBmYWxsYmFjaworIyAgICogVGhlbiBVc2UgM0RFUyBhcyBmYWxsYmFjayB3aGljaCBpcyBzZWN1cmUgYnV0IHNsb3cKKyMgICAqIERpc2FibGUgTlVMTCBhdXRoZW50aWNhdGlvbiwgTlVMTCBlbmNyeXB0aW9uLCBhbmQgTUQ1IE1BQ3MgZm9yIHNlY3VyaXR5CisjICAgICByZWFzb25zCitfREVGQVVMVF9DSVBIRVJTID0gKAorICAgICdFQ0RIK0FFU0dDTTpESCtBRVNHQ006RUNESCtBRVMyNTY6REgrQUVTMjU2OkVDREgrQUVTMTI4OkRIK0FFUzpFQ0RIK0hJR0g6JworICAgICdESCtISUdIOkVDREgrM0RFUzpESCszREVTOlJTQStBRVNHQ006UlNBK0FFUzpSU0ErSElHSDpSU0ErM0RFUzohYU5VTEw6JworICAgICchZU5VTEw6IU1ENScKKykKKworIyBSZXN0cmljdGVkIGFuZCBtb3JlIHNlY3VyZSBjaXBoZXJzIGZvciB0aGUgc2VydmVyIHNpZGUKKyMgVGhpcyBsaXN0IGhhcyBiZWVuIGV4cGxpY2l0bHkgY2hvc2VuIHRvOgorIyAgICogUHJlZmVyIGNpcGhlciBzdWl0ZXMgdGhhdCBvZmZlciBwZXJmZWN0IGZvcndhcmQgc2VjcmVjeSAoREhFL0VDREhFKQorIyAgICogUHJlZmVyIEVDREhFIG92ZXIgREhFIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UKKyMgICAqIFByZWZlciBhbnkgQUVTLUdDTSBvdmVyIGFueSBBRVMtQ0JDIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UgYW5kIHNlY3VyaXR5CisjICAgKiBUaGVuIFVzZSBISUdIIGNpcGhlciBzdWl0ZXMgYXMgYSBmYWxsYmFjaworIyAgICogVGhlbiBVc2UgM0RFUyBhcyBmYWxsYmFjayB3aGljaCBpcyBzZWN1cmUgYnV0IHNsb3cKKyMgICAqIERpc2FibGUgTlVMTCBhdXRoZW50aWNhdGlvbiwgTlVMTCBlbmNyeXB0aW9uLCBNRDUgTUFDcywgRFNTLCBhbmQgUkM0IGZvcgorIyAgICAgc2VjdXJpdHkgcmVhc29ucworX1JFU1RSSUNURURfU0VSVkVSX0NJUEhFUlMgPSAoCisgICAgJ0VDREgrQUVTR0NNOkRIK0FFU0dDTTpFQ0RIK0FFUzI1NjpESCtBRVMyNTY6RUNESCtBRVMxMjg6REgrQUVTOkVDREgrSElHSDonCisgICAgJ0RIK0hJR0g6RUNESCszREVTOkRIKzNERVM6UlNBK0FFU0dDTTpSU0ErQUVTOlJTQStISUdIOlJTQSszREVTOiFhTlVMTDonCisgICAgJyFlTlVMTDohTUQ1OiFEU1M6IVJDNCcKKykKIAogCiBjbGFzcyBDZXJ0aWZpY2F0ZUVycm9yKFZhbHVlRXJyb3IpOgpAQCAtMTQ0LDcgKzIxMSw3IEBACiAgICAgd2lsZGNhcmRzID0gbGVmdG1vc3QuY291bnQoJyonKQogICAgIGlmIHdpbGRjYXJkcyA+IG1heF93aWxkY2FyZHM6CiAgICAgICAgICMgSXNzdWUgIzE3OTgwOiBhdm9pZCBkZW5pYWxzIG9mIHNlcnZpY2UgYnkgcmVmdXNpbmcgbW9yZQotICAgICAgICAjIHRoYW4gb25lIHdpbGRjYXJkIHBlciBmcmFnbWVudC4gIEEgc3VydmVyeSBvZiBlc3RhYmxpc2hlZAorICAgICAgICAjIHRoYW4gb25lIHdpbGRjYXJkIHBlciBmcmFnbWVudC4gIEEgc3VydmV5IG9mIGVzdGFibGlzaGVkCiAgICAgICAgICMgcG9saWN5IGFtb25nIFNTTCBpbXBsZW1lbnRhdGlvbnMgc2hvd2VkIGl0IHRvIGJlIGEKICAgICAgICAgIyByZWFzb25hYmxlIGNob2ljZS4KICAgICAgICAgcmFpc2UgQ2VydGlmaWNhdGVFcnJvcigKQEAgLTE4OCw3ICsyNTUsOSBAQAogICAgIHJldHVybnMgbm90aGluZy4KICAgICAiIiIKICAgICBpZiBub3QgY2VydDoKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiZW1wdHkgb3Igbm8gY2VydGlmaWNhdGUiKQorICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJlbXB0eSBvciBubyBjZXJ0aWZpY2F0ZSwgbWF0Y2hfaG9zdG5hbWUgbmVlZHMgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIlNTTCBzb2NrZXQgb3IgU1NMIGNvbnRleHQgd2l0aCBlaXRoZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJDRVJUX09QVElPTkFMIG9yIENFUlRfUkVRVUlSRUQiKQogICAgIGRuc25hbWVzID0gW10KICAgICBzYW4gPSBjZXJ0LmdldCgnc3ViamVjdEFsdE5hbWUnLCAoKSkKICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzYW46CkBAIC0yMjAsMTEgKzI4OSw1OCBAQAogICAgICAgICAgICAgInN1YmplY3RBbHROYW1lIGZpZWxkcyB3ZXJlIGZvdW5kIikKIAogCitEZWZhdWx0VmVyaWZ5UGF0aHMgPSBuYW1lZHR1cGxlKCJEZWZhdWx0VmVyaWZ5UGF0aHMiLAorICAgICJjYWZpbGUgY2FwYXRoIG9wZW5zc2xfY2FmaWxlX2VudiBvcGVuc3NsX2NhZmlsZSBvcGVuc3NsX2NhcGF0aF9lbnYgIgorICAgICJvcGVuc3NsX2NhcGF0aCIpCisKK2RlZiBnZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKToKKyAgICAiIiJSZXR1cm4gcGF0aHMgdG8gZGVmYXVsdCBjYWZpbGUgYW5kIGNhcGF0aC4KKyAgICAiIiIKKyAgICBwYXJ0cyA9IF9zc2wuZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkKKworICAgICMgZW52aXJvbm1lbnQgdmFycyBzaGFkb3cgcGF0aHMKKyAgICBjYWZpbGUgPSBvcy5lbnZpcm9uLmdldChwYXJ0c1swXSwgcGFydHNbMV0pCisgICAgY2FwYXRoID0gb3MuZW52aXJvbi5nZXQocGFydHNbMl0sIHBhcnRzWzNdKQorCisgICAgcmV0dXJuIERlZmF1bHRWZXJpZnlQYXRocyhjYWZpbGUgaWYgb3MucGF0aC5pc2ZpbGUoY2FmaWxlKSBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhdGggaWYgb3MucGF0aC5pc2RpcihjYXBhdGgpIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpwYXJ0cykKKworCitjbGFzcyBfQVNOMU9iamVjdChuYW1lZHR1cGxlKCJfQVNOMU9iamVjdCIsICJuaWQgc2hvcnRuYW1lIGxvbmduYW1lIG9pZCIpKToKKyAgICAiIiJBU04uMSBvYmplY3QgaWRlbnRpZmllciBsb29rdXAKKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIF9fbmV3X18oY2xzLCBvaWQpOgorICAgICAgICByZXR1cm4gc3VwZXIoKS5fX25ld19fKGNscywgKl90eHQyb2JqKG9pZCwgbmFtZT1GYWxzZSkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZnJvbW5pZChjbHMsIG5pZCk6CisgICAgICAgICIiIkNyZWF0ZSBfQVNOMU9iamVjdCBmcm9tIE9wZW5TU0wgbnVtZXJpYyBJRAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMsICpfbmlkMm9iaihuaWQpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGZyb21uYW1lKGNscywgbmFtZSk6CisgICAgICAgICIiIkNyZWF0ZSBfQVNOMU9iamVjdCBmcm9tIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBvciBPSUQKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBzdXBlcigpLl9fbmV3X18oY2xzLCAqX3R4dDJvYmoobmFtZSwgbmFtZT1UcnVlKSkKKworCitjbGFzcyBQdXJwb3NlKF9BU04xT2JqZWN0LCBfRW51bSk6CisgICAgIiIiU1NMQ29udGV4dCBwdXJwb3NlIGZsYWdzIHdpdGggWDUwOXYzIEV4dGVuZGVkIEtleSBVc2FnZSBvYmplY3RzCisgICAgIiIiCisgICAgU0VSVkVSX0FVVEggPSAnMS4zLjYuMS41LjUuNy4zLjEnCisgICAgQ0xJRU5UX0FVVEggPSAnMS4zLjYuMS41LjUuNy4zLjInCisKKwogY2xhc3MgU1NMQ29udGV4dChfU1NMQ29udGV4dCk6CiAgICAgIiIiQW4gU1NMQ29udGV4dCBob2xkcyB2YXJpb3VzIFNTTC1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQKICAgICBkYXRhLCBzdWNoIGFzIGNlcnRpZmljYXRlcyBhbmQgcG9zc2libHkgYSBwcml2YXRlIGtleS4iIiIKIAotICAgIF9fc2xvdHNfXyA9ICgncHJvdG9jb2wnLCkKKyAgICBfX3Nsb3RzX18gPSAoJ3Byb3RvY29sJywgJ19fd2Vha3JlZl9fJykKKyAgICBfd2luZG93c19jZXJ0X3N0b3JlcyA9ICgiQ0EiLCAiUk9PVCIpCiAKICAgICBkZWYgX19uZXdfXyhjbHMsIHByb3RvY29sLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzZWxmID0gX1NTTENvbnRleHQuX19uZXdfXyhjbHMsIHByb3RvY29sKQpAQCAtMjU2LDYgKzM3MiwxMjEgQEAKIAogICAgICAgICBzZWxmLl9zZXRfbnBuX3Byb3RvY29scyhwcm90b3MpCiAKKyAgICBkZWYgX2xvYWRfd2luZG93c19zdG9yZV9jZXJ0cyhzZWxmLCBzdG9yZW5hbWUsIHB1cnBvc2UpOgorICAgICAgICBjZXJ0cyA9IGJ5dGVhcnJheSgpCisgICAgICAgIGZvciBjZXJ0LCBlbmNvZGluZywgdHJ1c3QgaW4gZW51bV9jZXJ0aWZpY2F0ZXMoc3RvcmVuYW1lKToKKyAgICAgICAgICAgICMgQ0EgY2VydHMgYXJlIG5ldmVyIFBLQ1MjNyBlbmNvZGVkCisgICAgICAgICAgICBpZiBlbmNvZGluZyA9PSAieDUwOV9hc24iOgorICAgICAgICAgICAgICAgIGlmIHRydXN0IGlzIFRydWUgb3IgcHVycG9zZS5vaWQgaW4gdHJ1c3Q6CisgICAgICAgICAgICAgICAgICAgIGNlcnRzLmV4dGVuZChjZXJ0KQorICAgICAgICBzZWxmLmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y2VydHMpCisgICAgICAgIHJldHVybiBjZXJ0cworCisgICAgZGVmIGxvYWRfZGVmYXVsdF9jZXJ0cyhzZWxmLCBwdXJwb3NlPVB1cnBvc2UuU0VSVkVSX0FVVEgpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwdXJwb3NlLCBfQVNOMU9iamVjdCk6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IocHVycG9zZSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICBmb3Igc3RvcmVuYW1lIGluIHNlbGYuX3dpbmRvd3NfY2VydF9zdG9yZXM6CisgICAgICAgICAgICAgICAgc2VsZi5fbG9hZF93aW5kb3dzX3N0b3JlX2NlcnRzKHN0b3JlbmFtZSwgcHVycG9zZSkKKyAgICAgICAgc2VsZi5zZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorCisKK2RlZiBjcmVhdGVfZGVmYXVsdF9jb250ZXh0KHB1cnBvc2U9UHVycG9zZS5TRVJWRVJfQVVUSCwgKiwgY2FmaWxlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBhdGg9Tm9uZSwgY2FkYXRhPU5vbmUpOgorICAgICIiIkNyZWF0ZSBhIFNTTENvbnRleHQgb2JqZWN0IHdpdGggZGVmYXVsdCBzZXR0aW5ncy4KKworICAgIE5PVEU6IFRoZSBwcm90b2NvbCBhbmQgc2V0dGluZ3MgbWF5IGNoYW5nZSBhbnl0aW1lIHdpdGhvdXQgcHJpb3IKKyAgICAgICAgICBkZXByZWNhdGlvbi4gVGhlIHZhbHVlcyByZXByZXNlbnQgYSBmYWlyIGJhbGFuY2UgYmV0d2VlbiBtYXhpbXVtCisgICAgICAgICAgY29tcGF0aWJpbGl0eSBhbmQgc2VjdXJpdHkuCisgICAgIiIiCisgICAgaWYgbm90IGlzaW5zdGFuY2UocHVycG9zZSwgX0FTTjFPYmplY3QpOgorICAgICAgICByYWlzZSBUeXBlRXJyb3IocHVycG9zZSkKKworICAgIGNvbnRleHQgPSBTU0xDb250ZXh0KFBST1RPQ09MX1NTTHYyMykKKworICAgICMgU1NMdjIgY29uc2lkZXJlZCBoYXJtZnVsLgorICAgIGNvbnRleHQub3B0aW9ucyB8PSBPUF9OT19TU0x2MgorCisgICAgIyBTU0x2MyBoYXMgcHJvYmxlbWF0aWMgc2VjdXJpdHkgYW5kIGlzIG9ubHkgcmVxdWlyZWQgZm9yIHJlYWxseSBvbGQKKyAgICAjIGNsaWVudHMgc3VjaCBhcyBJRTYgb24gV2luZG93cyBYUAorICAgIGNvbnRleHQub3B0aW9ucyB8PSBPUF9OT19TU0x2MworCisgICAgIyBkaXNhYmxlIGNvbXByZXNzaW9uIHRvIHByZXZlbnQgQ1JJTUUgYXR0YWNrcyAoT3BlblNTTCAxLjArKQorICAgIGNvbnRleHQub3B0aW9ucyB8PSBnZXRhdHRyKF9zc2wsICJPUF9OT19DT01QUkVTU0lPTiIsIDApCisKKyAgICBpZiBwdXJwb3NlID09IFB1cnBvc2UuU0VSVkVSX0FVVEg6CisgICAgICAgICMgdmVyaWZ5IGNlcnRzIGFuZCBob3N0IG5hbWUgaW4gY2xpZW50IG1vZGUKKyAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IENFUlRfUkVRVUlSRUQKKyAgICAgICAgY29udGV4dC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICBlbGlmIHB1cnBvc2UgPT0gUHVycG9zZS5DTElFTlRfQVVUSDoKKyAgICAgICAgIyBQcmVmZXIgdGhlIHNlcnZlcidzIGNpcGhlcnMgYnkgZGVmYXVsdCBzbyB0aGF0IHdlIGdldCBzdHJvbmdlcgorICAgICAgICAjIGVuY3J5cHRpb24KKyAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IGdldGF0dHIoX3NzbCwgIk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSIsIDApCisKKyAgICAgICAgIyBVc2Ugc2luZ2xlIHVzZSBrZXlzIGluIG9yZGVyIHRvIGltcHJvdmUgZm9yd2FyZCBzZWNyZWN5CisgICAgICAgIGNvbnRleHQub3B0aW9ucyB8PSBnZXRhdHRyKF9zc2wsICJPUF9TSU5HTEVfREhfVVNFIiwgMCkKKyAgICAgICAgY29udGV4dC5vcHRpb25zIHw9IGdldGF0dHIoX3NzbCwgIk9QX1NJTkdMRV9FQ0RIX1VTRSIsIDApCisKKyAgICAgICAgIyBkaXNhbGxvdyBjaXBoZXJzIHdpdGgga25vd24gdnVsbmVyYWJpbGl0aWVzCisgICAgICAgIGNvbnRleHQuc2V0X2NpcGhlcnMoX1JFU1RSSUNURURfU0VSVkVSX0NJUEhFUlMpCisKKyAgICBpZiBjYWZpbGUgb3IgY2FwYXRoIG9yIGNhZGF0YToKKyAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlLCBjYXBhdGgsIGNhZGF0YSkKKyAgICBlbGlmIGNvbnRleHQudmVyaWZ5X21vZGUgIT0gQ0VSVF9OT05FOgorICAgICAgICAjIG5vIGV4cGxpY2l0IGNhZmlsZSwgY2FwYXRoIG9yIGNhZGF0YSBidXQgdGhlIHZlcmlmeSBtb2RlIGlzCisgICAgICAgICMgQ0VSVF9PUFRJT05BTCBvciBDRVJUX1JFUVVJUkVELiBMZXQncyB0cnkgdG8gbG9hZCBkZWZhdWx0IHN5c3RlbQorICAgICAgICAjIHJvb3QgQ0EgY2VydGlmaWNhdGVzIGZvciB0aGUgZ2l2ZW4gcHVycG9zZS4gVGhpcyBtYXkgZmFpbCBzaWxlbnRseS4KKyAgICAgICAgY29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMocHVycG9zZSkKKyAgICByZXR1cm4gY29udGV4dAorCitkZWYgX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQocHJvdG9jb2w9UFJPVE9DT0xfU1NMdjIzLCAqLCBjZXJ0X3JlcXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPUZhbHNlLCBwdXJwb3NlPVB1cnBvc2UuU0VSVkVSX0FVVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ZmlsZT1Ob25lLCBrZXlmaWxlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Tm9uZSwgY2FwYXRoPU5vbmUsIGNhZGF0YT1Ob25lKToKKyAgICAiIiJDcmVhdGUgYSBTU0xDb250ZXh0IG9iamVjdCBmb3IgUHl0aG9uIHN0ZGxpYiBtb2R1bGVzCisKKyAgICBBbGwgUHl0aG9uIHN0ZGxpYiBtb2R1bGVzIHNoYWxsIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNyZWF0ZSBTU0xDb250ZXh0CisgICAgb2JqZWN0cyBpbiBvcmRlciB0byBrZWVwIGNvbW1vbiBzZXR0aW5ncyBpbiBvbmUgcGxhY2UuIFRoZSBjb25maWd1cmF0aW9uCisgICAgaXMgbGVzcyByZXN0cmljdCB0aGFuIGNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSdzIHRvIGluY3JlYXNlIGJhY2t3YXJkCisgICAgY29tcGF0aWJpbGl0eS4KKyAgICAiIiIKKyAgICBpZiBub3QgaXNpbnN0YW5jZShwdXJwb3NlLCBfQVNOMU9iamVjdCk6CisgICAgICAgIHJhaXNlIFR5cGVFcnJvcihwdXJwb3NlKQorCisgICAgY29udGV4dCA9IFNTTENvbnRleHQocHJvdG9jb2wpCisgICAgIyBTU0x2MiBjb25zaWRlcmVkIGhhcm1mdWwuCisgICAgY29udGV4dC5vcHRpb25zIHw9IE9QX05PX1NTTHYyCisgICAgIyBTU0x2MyBoYXMgcHJvYmxlbWF0aWMgc2VjdXJpdHkgYW5kIGlzIG9ubHkgcmVxdWlyZWQgZm9yIHJlYWxseSBvbGQKKyAgICAjIGNsaWVudHMgc3VjaCBhcyBJRTYgb24gV2luZG93cyBYUAorICAgIGNvbnRleHQub3B0aW9ucyB8PSBPUF9OT19TU0x2MworCisgICAgaWYgY2VydF9yZXFzIGlzIG5vdCBOb25lOgorICAgICAgICBjb250ZXh0LnZlcmlmeV9tb2RlID0gY2VydF9yZXFzCisgICAgY29udGV4dC5jaGVja19ob3N0bmFtZSA9IGNoZWNrX2hvc3RuYW1lCisKKyAgICBpZiBrZXlmaWxlIGFuZCBub3QgY2VydGZpbGU6CisgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNlcnRmaWxlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICBpZiBjZXJ0ZmlsZSBvciBrZXlmaWxlOgorICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSwga2V5ZmlsZSkKKworICAgICMgbG9hZCBDQSByb290IGNlcnRzCisgICAgaWYgY2FmaWxlIG9yIGNhcGF0aCBvciBjYWRhdGE6CisgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZSwgY2FwYXRoLCBjYWRhdGEpCisgICAgZWxpZiBjb250ZXh0LnZlcmlmeV9tb2RlICE9IENFUlRfTk9ORToKKyAgICAgICAgIyBubyBleHBsaWNpdCBjYWZpbGUsIGNhcGF0aCBvciBjYWRhdGEgYnV0IHRoZSB2ZXJpZnkgbW9kZSBpcworICAgICAgICAjIENFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRC4gTGV0J3MgdHJ5IHRvIGxvYWQgZGVmYXVsdCBzeXN0ZW0KKyAgICAgICAgIyByb290IENBIGNlcnRpZmljYXRlcyBmb3IgdGhlIGdpdmVuIHB1cnBvc2UuIFRoaXMgbWF5IGZhaWwgc2lsZW50bHkuCisgICAgICAgIGNvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKHB1cnBvc2UpCisKKyAgICByZXR1cm4gY29udGV4dAorCisjIFVzZWQgYnkgaHR0cC5jbGllbnQgaWYgbm8gY29udGV4dCBpcyBleHBsaWNpdGx5IHBhc3NlZC4KK19jcmVhdGVfZGVmYXVsdF9odHRwc19jb250ZXh0ID0gY3JlYXRlX2RlZmF1bHRfY29udGV4dAorCisKKyMgQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgYWxpYXMsIGV2ZW4gdGhvdWdoIGl0J3Mgbm90IGEgcHVibGljIG5hbWUuCitfY3JlYXRlX3N0ZGxpYl9jb250ZXh0ID0gX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQKKwogCiBjbGFzcyBTU0xTb2NrZXQoc29ja2V0KToKICAgICAiIiJUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBzdWJ0eXBlIG9mIHNvY2tldC5zb2NrZXQgdGhhdCB3cmFwcwpAQCAtMjcyLDcgKzUwMyw3IEBACiAgICAgICAgICAgICAgICAgIF9jb250ZXh0PU5vbmUpOgogCiAgICAgICAgIGlmIF9jb250ZXh0OgotICAgICAgICAgICAgc2VsZi5jb250ZXh0ID0gX2NvbnRleHQKKyAgICAgICAgICAgIHNlbGYuX2NvbnRleHQgPSBfY29udGV4dAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgc2VydmVyX3NpZGUgYW5kIG5vdCBjZXJ0ZmlsZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjZXJ0ZmlsZSBtdXN0IGJlIHNwZWNpZmllZCBmb3Igc2VydmVyLXNpZGUgIgpAQCAtMjgxLDE2ICs1MTIsMTYgQEAKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjZXJ0ZmlsZSBtdXN0IGJlIHNwZWNpZmllZCIpCiAgICAgICAgICAgICBpZiBjZXJ0ZmlsZSBhbmQgbm90IGtleWZpbGU6CiAgICAgICAgICAgICAgICAga2V5ZmlsZSA9IGNlcnRmaWxlCi0gICAgICAgICAgICBzZWxmLmNvbnRleHQgPSBTU0xDb250ZXh0KHNzbF92ZXJzaW9uKQotICAgICAgICAgICAgc2VsZi5jb250ZXh0LnZlcmlmeV9tb2RlID0gY2VydF9yZXFzCisgICAgICAgICAgICBzZWxmLl9jb250ZXh0ID0gU1NMQ29udGV4dChzc2xfdmVyc2lvbikKKyAgICAgICAgICAgIHNlbGYuX2NvbnRleHQudmVyaWZ5X21vZGUgPSBjZXJ0X3JlcXMKICAgICAgICAgICAgIGlmIGNhX2NlcnRzOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FfY2VydHMpCisgICAgICAgICAgICAgICAgc2VsZi5fY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FfY2VydHMpCiAgICAgICAgICAgICBpZiBjZXJ0ZmlsZToKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKGNlcnRmaWxlLCBrZXlmaWxlKQogICAgICAgICAgICAgaWYgbnBuX3Byb3RvY29sczoKLSAgICAgICAgICAgICAgICBzZWxmLmNvbnRleHQuc2V0X25wbl9wcm90b2NvbHMobnBuX3Byb3RvY29scykKKyAgICAgICAgICAgICAgICBzZWxmLl9jb250ZXh0LnNldF9ucG5fcHJvdG9jb2xzKG5wbl9wcm90b2NvbHMpCiAgICAgICAgICAgICBpZiBjaXBoZXJzOgotICAgICAgICAgICAgICAgIHNlbGYuY29udGV4dC5zZXRfY2lwaGVycyhjaXBoZXJzKQorICAgICAgICAgICAgICAgIHNlbGYuX2NvbnRleHQuc2V0X2NpcGhlcnMoY2lwaGVycykKICAgICAgICAgICAgIHNlbGYua2V5ZmlsZSA9IGtleWZpbGUKICAgICAgICAgICAgIHNlbGYuY2VydGZpbGUgPSBjZXJ0ZmlsZQogICAgICAgICAgICAgc2VsZi5jZXJ0X3JlcXMgPSBjZXJ0X3JlcXMKQEAgLTMwNCwxMSArNTM1LDEyIEBACiAgICAgICAgIGlmIHNlcnZlcl9zaWRlIGFuZCBzZXJ2ZXJfaG9zdG5hbWU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzZXJ2ZXJfaG9zdG5hbWUgY2FuIG9ubHkgYmUgc3BlY2lmaWVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluIGNsaWVudCBtb2RlIikKKyAgICAgICAgaWYgc2VsZi5fY29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgbm90IHNlcnZlcl9ob3N0bmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImNoZWNrX2hvc3RuYW1lIHJlcXVpcmVzIHNlcnZlcl9ob3N0bmFtZSIpCiAgICAgICAgIHNlbGYuc2VydmVyX3NpZGUgPSBzZXJ2ZXJfc2lkZQogICAgICAgICBzZWxmLnNlcnZlcl9ob3N0bmFtZSA9IHNlcnZlcl9ob3N0bmFtZQogICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0ID0gZG9faGFuZHNoYWtlX29uX2Nvbm5lY3QKICAgICAgICAgc2VsZi5zdXBwcmVzc19yYWdnZWRfZW9mcyA9IHN1cHByZXNzX3JhZ2dlZF9lb2ZzCi0gICAgICAgIGNvbm5lY3RlZCA9IEZhbHNlCiAgICAgICAgIGlmIHNvY2sgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHk9c29jay5mYW1pbHksCkBAIC0zMTYsMjcgKzU0OCwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvPXNvY2sucHJvdG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5vPXNvY2suZmlsZW5vKCkpCiAgICAgICAgICAgICBzZWxmLnNldHRpbWVvdXQoc29jay5nZXR0aW1lb3V0KCkpCi0gICAgICAgICAgICAjIHNlZSBpZiBpdCdzIGNvbm5lY3RlZAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvY2suZ2V0cGVlcm5hbWUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldF9lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRU5PVENPTk46Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgIHNvY2suZGV0YWNoKCkKICAgICAgICAgZWxpZiBmaWxlbm8gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzb2NrZXQuX19pbml0X18oc2VsZiwgZmlsZW5vPWZpbGVubykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNvY2tldC5fX2luaXRfXyhzZWxmLCBmYW1pbHk9ZmFtaWx5LCB0eXBlPXR5cGUsIHByb3RvPXByb3RvKQogCisgICAgICAgICMgU2VlIGlmIHdlIGFyZSBjb25uZWN0ZWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5nZXRwZWVybmFtZSgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiBlLmVycm5vICE9IGVycm5vLkVOT1RDT05OOgorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICBjb25uZWN0ZWQgPSBGYWxzZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY29ubmVjdGVkID0gVHJ1ZQorCiAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuX3NzbG9iaiA9IE5vbmUKICAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gY29ubmVjdGVkCiAgICAgICAgIGlmIGNvbm5lY3RlZDoKICAgICAgICAgICAgICMgY3JlYXRlIHRoZSBTU0wgb2JqZWN0CiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5fc3Nsb2JqID0gc2VsZi5jb250ZXh0Ll93cmFwX3NvY2tldChzZWxmLCBzZXJ2ZXJfc2lkZSwKKyAgICAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBzZWxmLl9jb250ZXh0Ll93cmFwX3NvY2tldChzZWxmLCBzZXJ2ZXJfc2lkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZSkKICAgICAgICAgICAgICAgICBpZiBkb19oYW5kc2hha2Vfb25fY29ubmVjdDoKICAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuZ2V0dGltZW91dCgpCkBAIC0zNDUsOSArNTc5LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJkb19oYW5kc2hha2Vfb25fY29ubmVjdCBzaG91bGQgbm90IGJlIHNwZWNpZmllZCBmb3Igbm9uLWJsb2NraW5nIHNvY2tldHMiKQogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCiAKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3IgYXMgeDoKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UgeAorICAgICAgICAgICAgICAgIHJhaXNlCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY29udGV4dChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2NvbnRleHQKKworICAgIEBjb250ZXh0LnNldHRlcgorICAgIGRlZiBjb250ZXh0KHNlbGYsIGN0eCk6CisgICAgICAgIHNlbGYuX2NvbnRleHQgPSBjdHgKKyAgICAgICAgc2VsZi5fc3Nsb2JqLmNvbnRleHQgPSBjdHgKIAogICAgIGRlZiBkdXAoc2VsZik6CiAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkKCJDYW4ndCBkdXAoKSAlcyBpbnN0YW5jZXMiICUKQEAgLTM1NywxMSArNjAwLDIxIEBACiAgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uIGhlcmUgaWYgeW91IHdpc2ggdG8gY2hlY2sgZm9yIHNwdXJpb3VzIGNsb3NlcwogICAgICAgICBwYXNzCiAKKyAgICBkZWYgX2NoZWNrX2Nvbm5lY3RlZChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuX2Nvbm5lY3RlZDoKKyAgICAgICAgICAgICMgZ2V0cGVlcm5hbWUoKSB3aWxsIHJhaXNlIEVOT1RDT05OIGlmIHRoZSBzb2NrZXQgaXMgcmVhbGx5CisgICAgICAgICAgICAjIG5vdCBjb25uZWN0ZWQ7IG5vdGUgdGhhdCB3ZSBjYW4gYmUgY29ubmVjdGVkIGV2ZW4gd2l0aG91dAorICAgICAgICAgICAgIyBfY29ubmVjdGVkIGJlaW5nIHNldCwgZS5nLiBpZiBjb25uZWN0KCkgZmlyc3QgcmV0dXJuZWQKKyAgICAgICAgICAgICMgRUFHQUlOLgorICAgICAgICAgICAgc2VsZi5nZXRwZWVybmFtZSgpCisKICAgICBkZWYgcmVhZChzZWxmLCBsZW49MCwgYnVmZmVyPU5vbmUpOgogICAgICAgICAiIiJSZWFkIHVwIHRvIExFTiBieXRlcyBhbmQgcmV0dXJuIHRoZW0uCiAgICAgICAgIFJldHVybiB6ZXJvLWxlbmd0aCBzdHJpbmcgb24gRU9GLiIiIgogCiAgICAgICAgIHNlbGYuX2NoZWNrQ2xvc2VkKCkKKyAgICAgICAgaWYgbm90IHNlbGYuX3NzbG9iajoKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlJlYWQgb24gY2xvc2VkIG9yIHVud3JhcHBlZCBTU0wgc29ja2V0LiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIGJ1ZmZlciBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICB2ID0gc2VsZi5fc3Nsb2JqLnJlYWQobGVuLCBidWZmZXIpCkBAIC0zODIsNiArNjM1LDggQEAKICAgICAgICAgbnVtYmVyIG9mIGJ5dGVzIG9mIERBVEEgYWN0dWFsbHkgdHJhbnNtaXR0ZWQuIiIiCiAKICAgICAgICAgc2VsZi5fY2hlY2tDbG9zZWQoKQorICAgICAgICBpZiBub3Qgc2VsZi5fc3Nsb2JqOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiV3JpdGUgb24gY2xvc2VkIG9yIHVud3JhcHBlZCBTU0wgc29ja2V0LiIpCiAgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmoud3JpdGUoZGF0YSkKIAogICAgIGRlZiBnZXRwZWVyY2VydChzZWxmLCBiaW5hcnlfZm9ybT1GYWxzZSk6CkBAIC0zOTEsNiArNjQ2LDcgQEAKICAgICAgICAgY2VydGlmaWNhdGUgd2FzIHByb3ZpZGVkLCBidXQgbm90IHZhbGlkYXRlZC4iIiIKIAogICAgICAgICBzZWxmLl9jaGVja0Nsb3NlZCgpCisgICAgICAgIHNlbGYuX2NoZWNrX2Nvbm5lY3RlZCgpCiAgICAgICAgIHJldHVybiBzZWxmLl9zc2xvYmoucGVlcl9jZXJ0aWZpY2F0ZShiaW5hcnlfZm9ybSkKIAogICAgIGRlZiBzZWxlY3RlZF9ucG5fcHJvdG9jb2woc2VsZik6CkBAIC00MjEsMTggKzY3NywxNyBAQAogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICJub24temVybyBmbGFncyBub3QgYWxsb3dlZCBpbiBjYWxscyB0byBzZW5kKCkgb24gJXMiICUKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2NsYXNzX18pCi0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NzbG9iai53cml0ZShkYXRhKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBTU0xFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgICAgICBpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfUkVBRDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgICAgICAgICAgICAgIGVsaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgdiA9IHNlbGYuX3NzbG9iai53cml0ZShkYXRhKQorICAgICAgICAgICAgZXhjZXB0IFNTTEVycm9yIGFzIHg6CisgICAgICAgICAgICAgICAgaWYgeC5hcmdzWzBdID09IFNTTF9FUlJPUl9XQU5UX1JFQUQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgICAgICAgICAgZWxpZiB4LmFyZ3NbMF0gPT0gU1NMX0VSUk9SX1dBTlRfV1JJVEU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHYKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBzb2NrZXQuc2VuZChzZWxmLCBkYXRhLCBmbGFncykKIApAQCAtNTQwLDEyICs3OTUsMTEgQEAKIAogICAgIGRlZiBfcmVhbF9jbG9zZShzZWxmKToKICAgICAgICAgc2VsZi5fc3Nsb2JqID0gTm9uZQotICAgICAgICAjIHNlbGYuX2Nsb3NlZCA9IFRydWUKICAgICAgICAgc29ja2V0Ll9yZWFsX2Nsb3NlKHNlbGYpCiAKICAgICBkZWYgZG9faGFuZHNoYWtlKHNlbGYsIGJsb2NrPUZhbHNlKToKICAgICAgICAgIiIiUGVyZm9ybSBhIFRMUy9TU0wgaGFuZHNoYWtlLiIiIgotCisgICAgICAgIHNlbGYuX2NoZWNrX2Nvbm5lY3RlZCgpCiAgICAgICAgIHRpbWVvdXQgPSBzZWxmLmdldHRpbWVvdXQoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiB0aW1lb3V0ID09IDAuMCBhbmQgYmxvY2s6CkBAIC01NTQsNiArODA4LDEyIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzZWxmLnNldHRpbWVvdXQodGltZW91dCkKIAorICAgICAgICBpZiBzZWxmLmNvbnRleHQuY2hlY2tfaG9zdG5hbWU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXJfaG9zdG5hbWU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiY2hlY2tfaG9zdG5hbWUgbmVlZHMgc2VydmVyX2hvc3RuYW1lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCIpCisgICAgICAgICAgICBtYXRjaF9ob3N0bmFtZShzZWxmLmdldHBlZXJjZXJ0KCksIHNlbGYuc2VydmVyX2hvc3RuYW1lKQorCiAgICAgZGVmIF9yZWFsX2Nvbm5lY3Qoc2VsZiwgYWRkciwgY29ubmVjdF9leCk6CiAgICAgICAgIGlmIHNlbGYuc2VydmVyX3NpZGU6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJjYW4ndCBjb25uZWN0IGluIHNlcnZlci1zaWRlIG1vZGUiKQpAQCAtNTY5LDExICs4MjksMTEgQEAKICAgICAgICAgICAgICAgICByYyA9IE5vbmUKICAgICAgICAgICAgICAgICBzb2NrZXQuY29ubmVjdChzZWxmLCBhZGRyKQogICAgICAgICAgICAgaWYgbm90IHJjOgorICAgICAgICAgICAgICAgIHNlbGYuX2Nvbm5lY3RlZCA9IFRydWUKICAgICAgICAgICAgICAgICBpZiBzZWxmLmRvX2hhbmRzaGFrZV9vbl9jb25uZWN0OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRvX2hhbmRzaGFrZSgpCi0gICAgICAgICAgICAgICAgc2VsZi5fY29ubmVjdGVkID0gVHJ1ZQogICAgICAgICAgICAgcmV0dXJuIHJjCi0gICAgICAgIGV4Y2VwdCBzb2NrZXRfZXJyb3I6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBzZWxmLl9zc2xvYmogPSBOb25lCiAgICAgICAgICAgICByYWlzZQogCkBAIC02NjQsMjIgKzkyNCwyMyBAQAogICAgIGQgPSBwZW1fY2VydF9zdHJpbmcuc3RyaXAoKVtsZW4oUEVNX0hFQURFUik6LWxlbihQRU1fRk9PVEVSKV0KICAgICByZXR1cm4gYmFzZTY0LmRlY29kZWJ5dGVzKGQuZW5jb2RlKCdBU0NJSScsICdzdHJpY3QnKSkKIAotZGVmIGdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoYWRkciwgc3NsX3ZlcnNpb249UFJPVE9DT0xfU1NMdjMsIGNhX2NlcnRzPU5vbmUpOgorZGVmIGdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoYWRkciwgc3NsX3ZlcnNpb249UFJPVE9DT0xfU1NMdjIzLCBjYV9jZXJ0cz1Ob25lKToKICAgICAiIiJSZXRyaWV2ZSB0aGUgY2VydGlmaWNhdGUgZnJvbSB0aGUgc2VydmVyIGF0IHRoZSBzcGVjaWZpZWQgYWRkcmVzcywKICAgICBhbmQgcmV0dXJuIGl0IGFzIGEgUEVNLWVuY29kZWQgc3RyaW5nLgogICAgIElmICdjYV9jZXJ0cycgaXMgc3BlY2lmaWVkLCB2YWxpZGF0ZSB0aGUgc2VydmVyIGNlcnQgYWdhaW5zdCBpdC4KICAgICBJZiAnc3NsX3ZlcnNpb24nIGlzIHNwZWNpZmllZCwgdXNlIGl0IGluIHRoZSBjb25uZWN0aW9uIGF0dGVtcHQuIiIiCiAKICAgICBob3N0LCBwb3J0ID0gYWRkcgotICAgIGlmIChjYV9jZXJ0cyBpcyBub3QgTm9uZSk6CisgICAgaWYgY2FfY2VydHMgaXMgbm90IE5vbmU6CiAgICAgICAgIGNlcnRfcmVxcyA9IENFUlRfUkVRVUlSRUQKICAgICBlbHNlOgogICAgICAgICBjZXJ0X3JlcXMgPSBDRVJUX05PTkUKLSAgICBzID0gY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcikKLSAgICBzID0gd3JhcF9zb2NrZXQocywgc3NsX3ZlcnNpb249c3NsX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgIGNlcnRfcmVxcz1jZXJ0X3JlcXMsIGNhX2NlcnRzPWNhX2NlcnRzKQotICAgIGRlcmNlcnQgPSBzLmdldHBlZXJjZXJ0KFRydWUpCi0gICAgcy5jbG9zZSgpCisgICAgY29udGV4dCA9IF9jcmVhdGVfc3RkbGliX2NvbnRleHQoc3NsX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9yZXFzPWNlcnRfcmVxcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Y2FfY2VydHMpCisgICAgd2l0aCAgY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcikgYXMgc29jazoKKyAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2spIGFzIHNzbHNvY2s6CisgICAgICAgICAgICBkZXJjZXJ0ID0gc3Nsc29jay5nZXRwZWVyY2VydChUcnVlKQogICAgIHJldHVybiBERVJfY2VydF90b19QRU1fY2VydChkZXJjZXJ0KQogCiBkZWYgZ2V0X3Byb3RvY29sX25hbWUocHJvdG9jb2xfY29kZSk6CmRpZmYgLS1naXQgYS9MaWIvc3RhdC5weSBiL0xpYi9zdGF0LnB5CmluZGV4IDcwNGFkZmUuLjNlZWNjM2UgMTAwNjQ0Ci0tLSBhL0xpYi9zdGF0LnB5CisrKyBiL0xpYi9zdGF0LnB5CkBAIC0xNDcsMyArMTQ3LDkgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHBlcm0uYXBwZW5kKCItIikKICAgICByZXR1cm4gIiIuam9pbihwZXJtKQorCisjIElmIGF2YWlsYWJsZSwgdXNlIEMgaW1wbGVtZW50YXRpb24KK3RyeToKKyAgICBmcm9tIF9zdGF0IGltcG9ydCAqCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3N0YXRpc3RpY3MucHkgYi9MaWIvc3RhdGlzdGljcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MThmNTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3N0YXRpc3RpY3MucHkKQEAgLTAsMCArMSw2MzggQEAKKyMjICBNb2R1bGUgc3RhdGlzdGljcy5weQorIyMKKyMjICBDb3B5cmlnaHQgKGMpIDIwMTMgU3RldmVuIEQnQXByYW5vIDxzdGV2ZStweXRob25AcGVhcndvb2QuaW5mbz4uCisjIworIyMgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyMgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMjICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMjCisjIyAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjIworIyMgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMjICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyMgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyMgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMjICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisiIiIKK0Jhc2ljIHN0YXRpc3RpY3MgbW9kdWxlLgorCitUaGlzIG1vZHVsZSBwcm92aWRlcyBmdW5jdGlvbnMgZm9yIGNhbGN1bGF0aW5nIHN0YXRpc3RpY3Mgb2YgZGF0YSwgaW5jbHVkaW5nCithdmVyYWdlcywgdmFyaWFuY2UsIGFuZCBzdGFuZGFyZCBkZXZpYXRpb24uCisKK0NhbGN1bGF0aW5nIGF2ZXJhZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorRnVuY3Rpb24gICAgICAgICAgICBEZXNjcmlwdGlvbgorPT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK21lYW4gICAgICAgICAgICAgICAgQXJpdGhtZXRpYyBtZWFuIChhdmVyYWdlKSBvZiBkYXRhLgorbWVkaWFuICAgICAgICAgICAgICBNZWRpYW4gKG1pZGRsZSB2YWx1ZSkgb2YgZGF0YS4KK21lZGlhbl9sb3cgICAgICAgICAgTG93IG1lZGlhbiBvZiBkYXRhLgorbWVkaWFuX2hpZ2ggICAgICAgICBIaWdoIG1lZGlhbiBvZiBkYXRhLgorbWVkaWFuX2dyb3VwZWQgICAgICBNZWRpYW4sIG9yIDUwdGggcGVyY2VudGlsZSwgb2YgZ3JvdXBlZCBkYXRhLgorbW9kZSAgICAgICAgICAgICAgICBNb2RlIChtb3N0IGNvbW1vbiB2YWx1ZSkgb2YgZGF0YS4KKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NhbGN1bGF0ZSB0aGUgYXJpdGhtZXRpYyBtZWFuICgidGhlIGF2ZXJhZ2UiKSBvZiBkYXRhOgorCis+Pj4gbWVhbihbLTEuMCwgMi41LCAzLjI1LCA1Ljc1XSkKKzIuNjI1CisKKworQ2FsY3VsYXRlIHRoZSBzdGFuZGFyZCBtZWRpYW4gb2YgZGlzY3JldGUgZGF0YToKKworPj4+IG1lZGlhbihbMiwgMywgNCwgNV0pCiszLjUKKworCitDYWxjdWxhdGUgdGhlIG1lZGlhbiwgb3IgNTB0aCBwZXJjZW50aWxlLCBvZiBkYXRhIGdyb3VwZWQgaW50byBjbGFzcyBpbnRlcnZhbHMKK2NlbnRyZWQgb24gdGhlIGRhdGEgdmFsdWVzIHByb3ZpZGVkLiBFLmcuIGlmIHlvdXIgZGF0YSBwb2ludHMgYXJlIHJvdW5kZWQgdG8KK3RoZSBuZWFyZXN0IHdob2xlIG51bWJlcjoKKworPj4+IG1lZGlhbl9ncm91cGVkKFsyLCAyLCAzLCAzLCAzLCA0XSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKKzIuODMzMzMzMzMzMy4uLgorCitUaGlzIHNob3VsZCBiZSBpbnRlcnByZXRlZCBpbiB0aGlzIHdheTogeW91IGhhdmUgdHdvIGRhdGEgcG9pbnRzIGluIHRoZSBjbGFzcworaW50ZXJ2YWwgMS41LTIuNSwgdGhyZWUgZGF0YSBwb2ludHMgaW4gdGhlIGNsYXNzIGludGVydmFsIDIuNS0zLjUsIGFuZCBvbmUgaW4KK3RoZSBjbGFzcyBpbnRlcnZhbCAzLjUtNC41LiBUaGUgbWVkaWFuIG9mIHRoZXNlIGRhdGEgcG9pbnRzIGlzIDIuODMzMy4uLgorCisKK0NhbGN1bGF0aW5nIHZhcmlhYmlsaXR5IG9yIHNwcmVhZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKz09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitGdW5jdGlvbiAgICAgICAgICAgIERlc2NyaXB0aW9uCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorcHZhcmlhbmNlICAgICAgICAgICBQb3B1bGF0aW9uIHZhcmlhbmNlIG9mIGRhdGEuCit2YXJpYW5jZSAgICAgICAgICAgIFNhbXBsZSB2YXJpYW5jZSBvZiBkYXRhLgorcHN0ZGV2ICAgICAgICAgICAgICBQb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBkYXRhLgorc3RkZXYgICAgICAgICAgICAgICBTYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGRhdGEuCis9PT09PT09PT09PT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDYWxjdWxhdGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBzYW1wbGUgZGF0YToKKworPj4+IHN0ZGV2KFsyLjUsIDMuMjUsIDUuNSwgMTEuMjUsIDExLjc1XSkgICNkb2N0ZXN0OiArRUxMSVBTSVMKKzQuMzg5NjE4NDM0NDQuLi4KKworSWYgeW91IGhhdmUgcHJldmlvdXNseSBjYWxjdWxhdGVkIHRoZSBtZWFuLCB5b3UgY2FuIHBhc3MgaXQgYXMgdGhlIG9wdGlvbmFsCitzZWNvbmQgYXJndW1lbnQgdG8gdGhlIGZvdXIgInNwcmVhZCIgZnVuY3Rpb25zIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQ6CisKKz4+PiBkYXRhID0gWzEsIDIsIDIsIDQsIDQsIDQsIDUsIDZdCis+Pj4gbXUgPSBtZWFuKGRhdGEpCis+Pj4gcHZhcmlhbmNlKGRhdGEsIG11KQorMi41CisKKworRXhjZXB0aW9ucworLS0tLS0tLS0tLQorCitBIHNpbmdsZSBleGNlcHRpb24gaXMgZGVmaW5lZDogU3RhdGlzdGljc0Vycm9yIGlzIGEgc3ViY2xhc3Mgb2YgVmFsdWVFcnJvci4KKworIiIiCisKK19fYWxsX18gPSBbICdTdGF0aXN0aWNzRXJyb3InLAorICAgICAgICAgICAgJ3BzdGRldicsICdwdmFyaWFuY2UnLCAnc3RkZXYnLCAndmFyaWFuY2UnLAorICAgICAgICAgICAgJ21lZGlhbicsICAnbWVkaWFuX2xvdycsICdtZWRpYW5faGlnaCcsICdtZWRpYW5fZ3JvdXBlZCcsCisgICAgICAgICAgICAnbWVhbicsICdtb2RlJywKKyAgICAgICAgICBdCisKKworaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgbWF0aAorCitmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24KK2Zyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGdyb3VwYnkKKworCisKKyMgPT09IEV4Y2VwdGlvbnMgPT09CisKK2NsYXNzIFN0YXRpc3RpY3NFcnJvcihWYWx1ZUVycm9yKToKKyAgICBwYXNzCisKKworIyA9PT0gUHJpdmF0ZSB1dGlsaXRpZXMgPT09CisKK2RlZiBfc3VtKGRhdGEsIHN0YXJ0PTApOgorICAgICIiIl9zdW0oZGF0YSBbLCBzdGFydF0pIC0+ICh0eXBlLCBzdW0sIGNvdW50KQorCisgICAgUmV0dXJuIGEgaGlnaC1wcmVjaXNpb24gc3VtIG9mIHRoZSBnaXZlbiBudW1lcmljIGRhdGEgYXMgYSBmcmFjdGlvbiwKKyAgICB0b2dldGhlciB3aXRoIHRoZSB0eXBlIHRvIGJlIGNvbnZlcnRlZCB0byBhbmQgdGhlIGNvdW50IG9mIGl0ZW1zLgorCisgICAgSWYgb3B0aW9uYWwgYXJndW1lbnQgYGBzdGFydGBgIGlzIGdpdmVuLCBpdCBpcyBhZGRlZCB0byB0aGUgdG90YWwuCisgICAgSWYgYGBkYXRhYGAgaXMgZW1wdHksIGBgc3RhcnRgYCAoZGVmYXVsdGluZyB0byAwKSBpcyByZXR1cm5lZC4KKworCisgICAgRXhhbXBsZXMKKyAgICAtLS0tLS0tLQorCisgICAgPj4+IF9zdW0oWzMsIDIuMjUsIDQuNSwgLTAuNSwgMS4wXSwgMC43NSkKKyAgICAoPGNsYXNzICdmbG9hdCc+LCBGcmFjdGlvbigxMSwgMSksIDUpCisKKyAgICBTb21lIHNvdXJjZXMgb2Ygcm91bmQtb2ZmIGVycm9yIHdpbGwgYmUgYXZvaWRlZDoKKworICAgID4+PiBfc3VtKFsxZTUwLCAxLCAtMWU1MF0gKiAxMDAwKSAgIyBCdWlsdC1pbiBzdW0gcmV0dXJucyB6ZXJvLgorICAgICg8Y2xhc3MgJ2Zsb2F0Jz4sIEZyYWN0aW9uKDEwMDAsIDEpLCAzMDAwKQorCisgICAgRnJhY3Rpb25zIGFuZCBEZWNpbWFscyBhcmUgYWxzbyBzdXBwb3J0ZWQ6CisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gX3N1bShbRigyLCAzKSwgRig3LCA1KSwgRigxLCA0KSwgRig1LCA2KV0pCisgICAgKDxjbGFzcyAnZnJhY3Rpb25zLkZyYWN0aW9uJz4sIEZyYWN0aW9uKDYzLCAyMCksIDQpCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gZGF0YSA9IFtEKCIwLjEzNzUiKSwgRCgiMC4yMTA4IiksIEQoIjAuMzA2MSIpLCBEKCIwLjA0MTkiKV0KKyAgICA+Pj4gX3N1bShkYXRhKQorICAgICg8Y2xhc3MgJ2RlY2ltYWwuRGVjaW1hbCc+LCBGcmFjdGlvbig2OTYzLCAxMDAwMCksIDQpCisKKyAgICBNaXhlZCB0eXBlcyBhcmUgY3VycmVudGx5IHRyZWF0ZWQgYXMgYW4gZXJyb3IsIGV4Y2VwdCB0aGF0IGludCBpcworICAgIGFsbG93ZWQuCisgICAgIiIiCisgICAgY291bnQgPSAwCisgICAgbiwgZCA9IF9leGFjdF9yYXRpbyhzdGFydCkKKyAgICBwYXJ0aWFscyA9IHtkOiBufQorICAgIHBhcnRpYWxzX2dldCA9IHBhcnRpYWxzLmdldAorICAgIFQgPSBfY29lcmNlKGludCwgdHlwZShzdGFydCkpCisgICAgZm9yIHR5cCwgdmFsdWVzIGluIGdyb3VwYnkoZGF0YSwgdHlwZSk6CisgICAgICAgIFQgPSBfY29lcmNlKFQsIHR5cCkgICMgb3IgcmFpc2UgVHlwZUVycm9yCisgICAgICAgIGZvciBuLGQgaW4gbWFwKF9leGFjdF9yYXRpbywgdmFsdWVzKToKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKyAgICAgICAgICAgIHBhcnRpYWxzW2RdID0gcGFydGlhbHNfZ2V0KGQsIDApICsgbgorICAgIGlmIE5vbmUgaW4gcGFydGlhbHM6CisgICAgICAgICMgVGhlIHN1bSB3aWxsIGJlIGEgTkFOIG9yIElORi4gV2UgY2FuIGlnbm9yZSBhbGwgdGhlIGZpbml0ZQorICAgICAgICAjIHBhcnRpYWxzLCBhbmQganVzdCBsb29rIGF0IHRoaXMgc3BlY2lhbCBvbmUuCisgICAgICAgIHRvdGFsID0gcGFydGlhbHNbTm9uZV0KKyAgICAgICAgYXNzZXJ0IG5vdCBfaXNmaW5pdGUodG90YWwpCisgICAgZWxzZToKKyAgICAgICAgIyBTdW0gYWxsIHRoZSBwYXJ0aWFsIHN1bXMgdXNpbmcgYnVpbHRpbiBzdW0uCisgICAgICAgICMgRklYTUUgaXMgdGhpcyBmYXN0ZXIgaWYgd2Ugc3VtIHRoZW0gaW4gb3JkZXIgb2YgdGhlIGRlbm9taW5hdG9yPworICAgICAgICB0b3RhbCA9IHN1bShGcmFjdGlvbihuLCBkKSBmb3IgZCwgbiBpbiBzb3J0ZWQocGFydGlhbHMuaXRlbXMoKSkpCisgICAgcmV0dXJuIChULCB0b3RhbCwgY291bnQpCisKKworZGVmIF9pc2Zpbml0ZSh4KToKKyAgICB0cnk6CisgICAgICAgIHJldHVybiB4LmlzX2Zpbml0ZSgpICAjIExpa2VseSBhIERlY2ltYWwuCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICByZXR1cm4gbWF0aC5pc2Zpbml0ZSh4KSAgIyBDb2VyY2VzIHRvIGZsb2F0IGZpcnN0LgorCisKK2RlZiBfY29lcmNlKFQsIFMpOgorICAgICIiIkNvZXJjZSB0eXBlcyBUIGFuZCBTIHRvIGEgY29tbW9uIHR5cGUsIG9yIHJhaXNlIFR5cGVFcnJvci4KKworICAgIENvZXJjaW9uIHJ1bGVzIGFyZSBjdXJyZW50bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiBTZWUgdGhlIENvZXJjZVRlc3QKKyAgICB0ZXN0IGNsYXNzIGluIHRlc3Rfc3RhdGlzdGljcyBmb3IgZGV0YWlscy4KKyAgICAiIiIKKyAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjQwNjguCisgICAgYXNzZXJ0IFQgaXMgbm90IGJvb2wsICJpbml0aWFsIHR5cGUgVCBpcyBib29sIgorICAgICMgSWYgdGhlIHR5cGVzIGFyZSB0aGUgc2FtZSwgbm8gbmVlZCB0byBjb2VyY2UgYW55dGhpbmcuIFB1dCB0aGlzCisgICAgIyBmaXJzdCwgc28gdGhhdCB0aGUgdXN1YWwgY2FzZSAobm8gY29lcmNpb24gbmVlZGVkKSBoYXBwZW5zIGFzIHNvb24KKyAgICAjIGFzIHBvc3NpYmxlLgorICAgIGlmIFQgaXMgUzogIHJldHVybiBUCisgICAgIyBNaXhlZCBpbnQgJiBvdGhlciBjb2VyY2UgdG8gdGhlIG90aGVyIHR5cGUuCisgICAgaWYgUyBpcyBpbnQgb3IgUyBpcyBib29sOiAgcmV0dXJuIFQKKyAgICBpZiBUIGlzIGludDogIHJldHVybiBTCisgICAgIyBJZiBvbmUgaXMgYSAoc3RyaWN0KSBzdWJjbGFzcyBvZiB0aGUgb3RoZXIsIGNvZXJjZSB0byB0aGUgc3ViY2xhc3MuCisgICAgaWYgaXNzdWJjbGFzcyhTLCBUKTogIHJldHVybiBTCisgICAgaWYgaXNzdWJjbGFzcyhULCBTKTogIHJldHVybiBUCisgICAgIyBJbnRzIGNvZXJjZSB0byB0aGUgb3RoZXIgdHlwZS4KKyAgICBpZiBpc3N1YmNsYXNzKFQsIGludCk6ICByZXR1cm4gUworICAgIGlmIGlzc3ViY2xhc3MoUywgaW50KTogIHJldHVybiBUCisgICAgIyBNaXhlZCBmcmFjdGlvbiAmIGZsb2F0IGNvZXJjZXMgdG8gZmxvYXQgKG9yIGZsb2F0IHN1YmNsYXNzKS4KKyAgICBpZiBpc3N1YmNsYXNzKFQsIEZyYWN0aW9uKSBhbmQgaXNzdWJjbGFzcyhTLCBmbG9hdCk6CisgICAgICAgIHJldHVybiBTCisgICAgaWYgaXNzdWJjbGFzcyhULCBmbG9hdCkgYW5kIGlzc3ViY2xhc3MoUywgRnJhY3Rpb24pOgorICAgICAgICByZXR1cm4gVAorICAgICMgQW55IG90aGVyIGNvbWJpbmF0aW9uIGlzIGRpc2FsbG93ZWQuCisgICAgbXNnID0gImRvbid0IGtub3cgaG93IHRvIGNvZXJjZSAlcyBhbmQgJXMiCisgICAgcmFpc2UgVHlwZUVycm9yKG1zZyAlIChULl9fbmFtZV9fLCBTLl9fbmFtZV9fKSkKKworCitkZWYgX2V4YWN0X3JhdGlvKHgpOgorICAgICIiIlJldHVybiBSZWFsIG51bWJlciB4IHRvIGV4YWN0IChudW1lcmF0b3IsIGRlbm9taW5hdG9yKSBwYWlyLgorCisgICAgPj4+IF9leGFjdF9yYXRpbygwLjI1KQorICAgICgxLCA0KQorCisgICAgeCBpcyBleHBlY3RlZCB0byBiZSBhbiBpbnQsIEZyYWN0aW9uLCBEZWNpbWFsIG9yIGZsb2F0LgorICAgICIiIgorICAgIHRyeToKKyAgICAgICAgIyBPcHRpbWlzZSB0aGUgY29tbW9uIGNhc2Ugb2YgZmxvYXRzLiBXZSBleHBlY3QgdGhhdCB0aGUgbW9zdCBvZnRlbgorICAgICAgICAjIHVzZWQgbnVtZXJpYyB0eXBlIHdpbGwgYmUgYnVpbHRpbiBmbG9hdHMsIHNvIHRyeSB0byBtYWtlIHRoaXMgYXMKKyAgICAgICAgIyBmYXN0IGFzIHBvc3NpYmxlLgorICAgICAgICBpZiB0eXBlKHgpIGlzIGZsb2F0OgorICAgICAgICAgICAgcmV0dXJuIHguYXNfaW50ZWdlcl9yYXRpbygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgeCBtYXkgYmUgYW4gaW50LCBGcmFjdGlvbiwgb3IgSW50ZWdyYWwgQUJDLgorICAgICAgICAgICAgcmV0dXJuICh4Lm51bWVyYXRvciwgeC5kZW5vbWluYXRvcikKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgeCBtYXkgYmUgYSBmbG9hdCBzdWJjbGFzcy4KKyAgICAgICAgICAgICAgICByZXR1cm4geC5hc19pbnRlZ2VyX3JhdGlvKCkKKyAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICMgeCBtYXkgYmUgYSBEZWNpbWFsLgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2RlY2ltYWxfdG9fcmF0aW8oeCkKKyAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICMgSnVzdCBnaXZlIHVwPworICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgZXhjZXB0IChPdmVyZmxvd0Vycm9yLCBWYWx1ZUVycm9yKToKKyAgICAgICAgIyBmbG9hdCBOQU4gb3IgSU5GLgorICAgICAgICBhc3NlcnQgbm90IG1hdGguaXNmaW5pdGUoeCkKKyAgICAgICAgcmV0dXJuICh4LCBOb25lKQorICAgIG1zZyA9ICJjYW4ndCBjb252ZXJ0IHR5cGUgJ3t9JyB0byBudW1lcmF0b3IvZGVub21pbmF0b3IiCisgICAgcmFpc2UgVHlwZUVycm9yKG1zZy5mb3JtYXQodHlwZSh4KS5fX25hbWVfXykpCisKKworIyBGSVhNRSBUaGlzIGlzIGZhc3RlciB0aGFuIEZyYWN0aW9uLmZyb21fZGVjaW1hbCwgYnV0IHN0aWxsIHRvbyBzbG93LgorZGVmIF9kZWNpbWFsX3RvX3JhdGlvKGQpOgorICAgICIiIkNvbnZlcnQgRGVjaW1hbCBkIHRvIGV4YWN0IGludGVnZXIgcmF0aW8gKG51bWVyYXRvciwgZGVub21pbmF0b3IpLgorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbAorICAgID4+PiBfZGVjaW1hbF90b19yYXRpbyhEZWNpbWFsKCIyLjYiKSkKKyAgICAoMjYsIDEwKQorCisgICAgIiIiCisgICAgc2lnbiwgZGlnaXRzLCBleHAgPSBkLmFzX3R1cGxlKCkKKyAgICBpZiBleHAgaW4gKCdGJywgJ24nLCAnTicpOiAgIyBJTkYsIE5BTiwgc05BTgorICAgICAgICBhc3NlcnQgbm90IGQuaXNfZmluaXRlKCkKKyAgICAgICAgcmV0dXJuIChkLCBOb25lKQorICAgIG51bSA9IDAKKyAgICBmb3IgZGlnaXQgaW4gZGlnaXRzOgorICAgICAgICBudW0gPSBudW0qMTAgKyBkaWdpdAorICAgIGlmIGV4cCA8IDA6CisgICAgICAgIGRlbiA9IDEwKiotZXhwCisgICAgZWxzZToKKyAgICAgICAgbnVtICo9IDEwKipleHAKKyAgICAgICAgZGVuID0gMQorICAgIGlmIHNpZ246CisgICAgICAgIG51bSA9IC1udW0KKyAgICByZXR1cm4gKG51bSwgZGVuKQorCisKK2RlZiBfY29udmVydCh2YWx1ZSwgVCk6CisgICAgIiIiQ29udmVydCB2YWx1ZSB0byBnaXZlbiBudW1lcmljIHR5cGUgVC4iIiIKKyAgICBpZiB0eXBlKHZhbHVlKSBpcyBUOgorICAgICAgICAjIFRoaXMgY292ZXJzIHRoZSBjYXNlcyB3aGVyZSBUIGlzIEZyYWN0aW9uLCBvciB3aGVyZSB2YWx1ZSBpcworICAgICAgICAjIGEgTkFOIG9yIElORiAoRGVjaW1hbCBvciBmbG9hdCkuCisgICAgICAgIHJldHVybiB2YWx1ZQorICAgIGlmIGlzc3ViY2xhc3MoVCwgaW50KSBhbmQgdmFsdWUuZGVub21pbmF0b3IgIT0gMToKKyAgICAgICAgVCA9IGZsb2F0CisgICAgdHJ5OgorICAgICAgICAjIEZJWE1FOiB3aGF0IGRvIHdlIGRvIGlmIHRoaXMgb3ZlcmZsb3dzPworICAgICAgICByZXR1cm4gVCh2YWx1ZSkKKyAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICBpZiBpc3N1YmNsYXNzKFQsIERlY2ltYWwpOgorICAgICAgICAgICAgcmV0dXJuIFQodmFsdWUubnVtZXJhdG9yKS9UKHZhbHVlLmRlbm9taW5hdG9yKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmFpc2UKKworCitkZWYgX2NvdW50cyhkYXRhKToKKyAgICAjIEdlbmVyYXRlIGEgdGFibGUgb2Ygc29ydGVkICh2YWx1ZSwgZnJlcXVlbmN5KSBwYWlycy4KKyAgICB0YWJsZSA9IGNvbGxlY3Rpb25zLkNvdW50ZXIoaXRlcihkYXRhKSkubW9zdF9jb21tb24oKQorICAgIGlmIG5vdCB0YWJsZToKKyAgICAgICAgcmV0dXJuIHRhYmxlCisgICAgIyBFeHRyYWN0IHRoZSB2YWx1ZXMgd2l0aCB0aGUgaGlnaGVzdCBmcmVxdWVuY3kuCisgICAgbWF4ZnJlcSA9IHRhYmxlWzBdWzFdCisgICAgZm9yIGkgaW4gcmFuZ2UoMSwgbGVuKHRhYmxlKSk6CisgICAgICAgIGlmIHRhYmxlW2ldWzFdICE9IG1heGZyZXE6CisgICAgICAgICAgICB0YWJsZSA9IHRhYmxlWzppXQorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gdGFibGUKKworCisjID09PSBNZWFzdXJlcyBvZiBjZW50cmFsIHRlbmRlbmN5IChhdmVyYWdlcykgPT09CisKK2RlZiBtZWFuKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgc2FtcGxlIGFyaXRobWV0aWMgbWVhbiBvZiBkYXRhLgorCisgICAgPj4+IG1lYW4oWzEsIDIsIDMsIDQsIDRdKQorICAgIDIuOAorCisgICAgPj4+IGZyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbiBhcyBGCisgICAgPj4+IG1lYW4oW0YoMywgNyksIEYoMSwgMjEpLCBGKDUsIDMpLCBGKDEsIDMpXSkKKyAgICBGcmFjdGlvbigxMywgMjEpCisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gbWVhbihbRCgiMC41IiksIEQoIjAuNzUiKSwgRCgiMC42MjUiKSwgRCgiMC4zNzUiKV0pCisgICAgRGVjaW1hbCgnMC41NjI1JykKKworICAgIElmIGBgZGF0YWBgIGlzIGVtcHR5LCBTdGF0aXN0aWNzRXJyb3Igd2lsbCBiZSByYWlzZWQuCisgICAgIiIiCisgICAgaWYgaXRlcihkYXRhKSBpcyBkYXRhOgorICAgICAgICBkYXRhID0gbGlzdChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuIDwgMToKKyAgICAgICAgcmFpc2UgU3RhdGlzdGljc0Vycm9yKCdtZWFuIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBkYXRhIHBvaW50JykKKyAgICBULCB0b3RhbCwgY291bnQgPSBfc3VtKGRhdGEpCisgICAgYXNzZXJ0IGNvdW50ID09IG4KKyAgICByZXR1cm4gX2NvbnZlcnQodG90YWwvbiwgVCkKKworCisjIEZJWE1FOiBpbnZlc3RpZ2F0ZSB3YXlzIHRvIGNhbGN1bGF0ZSBtZWRpYW5zIHdpdGhvdXQgc29ydGluZz8gUXVpY2tzZWxlY3Q/CitkZWYgbWVkaWFuKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgbWVkaWFuIChtaWRkbGUgdmFsdWUpIG9mIG51bWVyaWMgZGF0YS4KKworICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBvZGQsIHJldHVybiB0aGUgbWlkZGxlIGRhdGEgcG9pbnQuCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIGV2ZW4sIHRoZSBtZWRpYW4gaXMgaW50ZXJwb2xhdGVkIGJ5CisgICAgdGFraW5nIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlczoKKworICAgID4+PiBtZWRpYW4oWzEsIDMsIDVdKQorICAgIDMKKyAgICA+Pj4gbWVkaWFuKFsxLCAzLCA1LCA3XSkKKyAgICA0LjAKKworICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgaWYgbiUyID09IDE6CisgICAgICAgIHJldHVybiBkYXRhW24vLzJdCisgICAgZWxzZToKKyAgICAgICAgaSA9IG4vLzIKKyAgICAgICAgcmV0dXJuIChkYXRhW2kgLSAxXSArIGRhdGFbaV0pLzIKKworCitkZWYgbWVkaWFuX2xvdyhkYXRhKToKKyAgICAiIiJSZXR1cm4gdGhlIGxvdyBtZWRpYW4gb2YgbnVtZXJpYyBkYXRhLgorCisgICAgV2hlbiB0aGUgbnVtYmVyIG9mIGRhdGEgcG9pbnRzIGlzIG9kZCwgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4KKyAgICBXaGVuIGl0IGlzIGV2ZW4sIHRoZSBzbWFsbGVyIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgID4+PiBtZWRpYW5fbG93KFsxLCAzLCA1XSkKKyAgICAzCisgICAgPj4+IG1lZGlhbl9sb3coWzEsIDMsIDUsIDddKQorICAgIDMKKworICAgICIiIgorICAgIGRhdGEgPSBzb3J0ZWQoZGF0YSkKKyAgICBuID0gbGVuKGRhdGEpCisgICAgaWYgbiA9PSAwOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoIm5vIG1lZGlhbiBmb3IgZW1wdHkgZGF0YSIpCisgICAgaWYgbiUyID09IDE6CisgICAgICAgIHJldHVybiBkYXRhW24vLzJdCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIGRhdGFbbi8vMiAtIDFdCisKKworZGVmIG1lZGlhbl9oaWdoKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgaGlnaCBtZWRpYW4gb2YgZGF0YS4KKworICAgIFdoZW4gdGhlIG51bWJlciBvZiBkYXRhIHBvaW50cyBpcyBvZGQsIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuCisgICAgV2hlbiBpdCBpcyBldmVuLCB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4KKworICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNV0pCisgICAgMworICAgID4+PiBtZWRpYW5faGlnaChbMSwgMywgNSwgN10pCisgICAgNQorCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICByZXR1cm4gZGF0YVtuLy8yXQorCisKK2RlZiBtZWRpYW5fZ3JvdXBlZChkYXRhLCBpbnRlcnZhbD0xKToKKyAgICAiIiJSZXR1cm4gdGhlIDUwdGggcGVyY2VudGlsZSAobWVkaWFuKSBvZiBncm91cGVkIGNvbnRpbnVvdXMgZGF0YS4KKworICAgID4+PiBtZWRpYW5fZ3JvdXBlZChbMSwgMiwgMiwgMywgNCwgNCwgNCwgNCwgNCwgNV0pCisgICAgMy43CisgICAgPj4+IG1lZGlhbl9ncm91cGVkKFs1MiwgNTIsIDUzLCA1NF0pCisgICAgNTIuNQorCisgICAgVGhpcyBjYWxjdWxhdGVzIHRoZSBtZWRpYW4gYXMgdGhlIDUwdGggcGVyY2VudGlsZSwgYW5kIHNob3VsZCBiZQorICAgIHVzZWQgd2hlbiB5b3VyIGRhdGEgaXMgY29udGludW91cyBhbmQgZ3JvdXBlZC4gSW4gdGhlIGFib3ZlIGV4YW1wbGUsCisgICAgdGhlIHZhbHVlcyAxLCAyLCAzLCBldGMuIGFjdHVhbGx5IHJlcHJlc2VudCB0aGUgbWlkcG9pbnQgb2YgY2xhc3NlcworICAgIDAuNS0xLjUsIDEuNS0yLjUsIDIuNS0zLjUsIGV0Yy4gVGhlIG1pZGRsZSB2YWx1ZSBmYWxscyBzb21ld2hlcmUgaW4KKyAgICBjbGFzcyAzLjUtNC41LCBhbmQgaW50ZXJwb2xhdGlvbiBpcyB1c2VkIHRvIGVzdGltYXRlIGl0LgorCisgICAgT3B0aW9uYWwgYXJndW1lbnQgYGBpbnRlcnZhbGBgIHJlcHJlc2VudHMgdGhlIGNsYXNzIGludGVydmFsLCBhbmQKKyAgICBkZWZhdWx0cyB0byAxLiBDaGFuZ2luZyB0aGUgY2xhc3MgaW50ZXJ2YWwgbmF0dXJhbGx5IHdpbGwgY2hhbmdlIHRoZQorICAgIGludGVycG9sYXRlZCA1MHRoIHBlcmNlbnRpbGUgdmFsdWU6CisKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0xKQorICAgIDMuMjUKKyAgICA+Pj4gbWVkaWFuX2dyb3VwZWQoWzEsIDMsIDMsIDUsIDddLCBpbnRlcnZhbD0yKQorICAgIDMuNQorCisgICAgVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRoZSBkYXRhIHBvaW50cyBhcmUgYXQgbGVhc3QKKyAgICBgYGludGVydmFsYGAgYXBhcnQuCisgICAgIiIiCisgICAgZGF0YSA9IHNvcnRlZChkYXRhKQorICAgIG4gPSBsZW4oZGF0YSkKKyAgICBpZiBuID09IDA6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigibm8gbWVkaWFuIGZvciBlbXB0eSBkYXRhIikKKyAgICBlbGlmIG4gPT0gMToKKyAgICAgICAgcmV0dXJuIGRhdGFbMF0KKyAgICAjIEZpbmQgdGhlIHZhbHVlIGF0IHRoZSBtaWRwb2ludC4gUmVtZW1iZXIgdGhpcyBjb3JyZXNwb25kcyB0byB0aGUKKyAgICAjIGNlbnRyZSBvZiB0aGUgY2xhc3MgaW50ZXJ2YWwuCisgICAgeCA9IGRhdGFbbi8vMl0KKyAgICBmb3Igb2JqIGluICh4LCBpbnRlcnZhbCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCAoc3RyLCBieXRlcykpOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBudW1iZXIgYnV0IGdvdCAlcicgJSBvYmopCisgICAgdHJ5OgorICAgICAgICBMID0geCAtIGludGVydmFsLzIgICMgVGhlIGxvd2VyIGxpbWl0IG9mIHRoZSBtZWRpYW4gaW50ZXJ2YWwuCisgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgIyBNaXhlZCB0eXBlLiBGb3Igbm93IHdlIGp1c3QgY29lcmNlIHRvIGZsb2F0LgorICAgICAgICBMID0gZmxvYXQoeCkgLSBmbG9hdChpbnRlcnZhbCkvMgorICAgIGNmID0gZGF0YS5pbmRleCh4KSAgIyBOdW1iZXIgb2YgdmFsdWVzIGJlbG93IHRoZSBtZWRpYW4gaW50ZXJ2YWwuCisgICAgIyBGSVhNRSBUaGUgZm9sbG93aW5nIGxpbmUgY291bGQgYmUgbW9yZSBlZmZpY2llbnQgZm9yIGJpZyBsaXN0cy4KKyAgICBmID0gZGF0YS5jb3VudCh4KSAgIyBOdW1iZXIgb2YgZGF0YSBwb2ludHMgaW4gdGhlIG1lZGlhbiBpbnRlcnZhbC4KKyAgICByZXR1cm4gTCArIGludGVydmFsKihuLzIgLSBjZikvZgorCisKK2RlZiBtb2RlKGRhdGEpOgorICAgICIiIlJldHVybiB0aGUgbW9zdCBjb21tb24gZGF0YSBwb2ludCBmcm9tIGRpc2NyZXRlIG9yIG5vbWluYWwgZGF0YS4KKworICAgIGBgbW9kZWBgIGFzc3VtZXMgZGlzY3JldGUgZGF0YSwgYW5kIHJldHVybnMgYSBzaW5nbGUgdmFsdWUuIFRoaXMgaXMgdGhlCisgICAgc3RhbmRhcmQgdHJlYXRtZW50IG9mIHRoZSBtb2RlIGFzIGNvbW1vbmx5IHRhdWdodCBpbiBzY2hvb2xzOgorCisgICAgPj4+IG1vZGUoWzEsIDEsIDIsIDMsIDMsIDMsIDMsIDRdKQorICAgIDMKKworICAgIFRoaXMgYWxzbyB3b3JrcyB3aXRoIG5vbWluYWwgKG5vbi1udW1lcmljKSBkYXRhOgorCisgICAgPj4+IG1vZGUoWyJyZWQiLCAiYmx1ZSIsICJibHVlIiwgInJlZCIsICJncmVlbiIsICJyZWQiLCAicmVkIl0pCisgICAgJ3JlZCcKKworICAgIElmIHRoZXJlIGlzIG5vdCBleGFjdGx5IG9uZSBtb3N0IGNvbW1vbiB2YWx1ZSwgYGBtb2RlYGAgd2lsbCByYWlzZQorICAgIFN0YXRpc3RpY3NFcnJvci4KKyAgICAiIiIKKyAgICAjIEdlbmVyYXRlIGEgdGFibGUgb2Ygc29ydGVkICh2YWx1ZSwgZnJlcXVlbmN5KSBwYWlycy4KKyAgICB0YWJsZSA9IF9jb3VudHMoZGF0YSkKKyAgICBpZiBsZW4odGFibGUpID09IDE6CisgICAgICAgIHJldHVybiB0YWJsZVswXVswXQorICAgIGVsaWYgdGFibGU6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcigKKyAgICAgICAgICAgICAgICAnbm8gdW5pcXVlIG1vZGU7IGZvdW5kICVkIGVxdWFsbHkgY29tbW9uIHZhbHVlcycgJSBsZW4odGFibGUpCisgICAgICAgICAgICAgICAgKQorICAgIGVsc2U6CisgICAgICAgIHJhaXNlIFN0YXRpc3RpY3NFcnJvcignbm8gbW9kZSBmb3IgZW1wdHkgZGF0YScpCisKKworIyA9PT0gTWVhc3VyZXMgb2Ygc3ByZWFkID09PQorCisjIFNlZSBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL1ZhcmlhbmNlLmh0bWwKKyMgICAgIGh0dHA6Ly9tYXRod29ybGQud29sZnJhbS5jb20vU2FtcGxlVmFyaWFuY2UuaHRtbAorIyAgICAgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BbGdvcml0aG1zX2Zvcl9jYWxjdWxhdGluZ192YXJpYW5jZQorIworIyBVbmRlciBubyBjaXJjdW1zdGFuY2VzIHVzZSB0aGUgc28tY2FsbGVkICJjb21wdXRhdGlvbmFsIGZvcm11bGEgZm9yCisjIHZhcmlhbmNlIiwgYXMgdGhhdCBpcyBvbmx5IHN1aXRhYmxlIGZvciBoYW5kIGNhbGN1bGF0aW9ucyB3aXRoIGEgc21hbGwKKyMgYW1vdW50IG9mIGxvdy1wcmVjaXNpb24gZGF0YS4gSXQgaGFzIHRlcnJpYmxlIG51bWVyaWMgcHJvcGVydGllcy4KKyMKKyMgU2VlIGEgY29tcGFyaXNvbiBvZiB0aHJlZSBjb21wdXRhdGlvbmFsIG1ldGhvZHMgaGVyZToKKyMgaHR0cDovL3d3dy5qb2huZGNvb2suY29tL2Jsb2cvMjAwOC8wOS8yNi9jb21wYXJpbmctdGhyZWUtbWV0aG9kcy1vZi1jb21wdXRpbmctc3RhbmRhcmQtZGV2aWF0aW9uLworCitkZWYgX3NzKGRhdGEsIGM9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHN1bSBvZiBzcXVhcmUgZGV2aWF0aW9ucyBvZiBzZXF1ZW5jZSBkYXRhLgorCisgICAgSWYgYGBjYGAgaXMgTm9uZSwgdGhlIG1lYW4gaXMgY2FsY3VsYXRlZCBpbiBvbmUgcGFzcywgYW5kIHRoZSBkZXZpYXRpb25zCisgICAgZnJvbSB0aGUgbWVhbiBhcmUgY2FsY3VsYXRlZCBpbiBhIHNlY29uZCBwYXNzLiBPdGhlcndpc2UsIGRldmlhdGlvbnMgYXJlCisgICAgY2FsY3VsYXRlZCBmcm9tIGBgY2BgIGFzIGdpdmVuLiBVc2UgdGhlIHNlY29uZCBjYXNlIHdpdGggY2FyZSwgYXMgaXQgY2FuCisgICAgbGVhZCB0byBnYXJiYWdlIHJlc3VsdHMuCisgICAgIiIiCisgICAgaWYgYyBpcyBOb25lOgorICAgICAgICBjID0gbWVhbihkYXRhKQorICAgIFQsIHRvdGFsLCBjb3VudCA9IF9zdW0oKHgtYykqKjIgZm9yIHggaW4gZGF0YSkKKyAgICAjIFRoZSBmb2xsb3dpbmcgc3VtIHNob3VsZCBtYXRoZW1hdGljYWxseSBlcXVhbCB6ZXJvLCBidXQgZHVlIHRvIHJvdW5kaW5nCisgICAgIyBlcnJvciBtYXkgbm90LgorICAgIFUsIHRvdGFsMiwgY291bnQyID0gX3N1bSgoeC1jKSBmb3IgeCBpbiBkYXRhKQorICAgIGFzc2VydCBUID09IFUgYW5kIGNvdW50ID09IGNvdW50MgorICAgIHRvdGFsIC09ICB0b3RhbDIqKjIvbGVuKGRhdGEpCisgICAgYXNzZXJ0IG5vdCB0b3RhbCA8IDAsICduZWdhdGl2ZSBzdW0gb2Ygc3F1YXJlIGRldmlhdGlvbnM6ICVmJyAlIHRvdGFsCisgICAgcmV0dXJuIChULCB0b3RhbCkKKworCitkZWYgdmFyaWFuY2UoZGF0YSwgeGJhcj1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNhbXBsZSB2YXJpYW5jZSBvZiBkYXRhLgorCisgICAgZGF0YSBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgUmVhbC12YWx1ZWQgbnVtYmVycywgd2l0aCBhdCBsZWFzdCB0d28KKyAgICB2YWx1ZXMuIFRoZSBvcHRpb25hbCBhcmd1bWVudCB4YmFyLCBpZiBnaXZlbiwgc2hvdWxkIGJlIHRoZSBtZWFuIG9mCisgICAgdGhlIGRhdGEuIElmIGl0IGlzIG1pc3Npbmcgb3IgTm9uZSwgdGhlIG1lYW4gaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgorCisgICAgVXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB5b3VyIGRhdGEgaXMgYSBzYW1wbGUgZnJvbSBhIHBvcHVsYXRpb24uIFRvCisgICAgY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBmcm9tIHRoZSBlbnRpcmUgcG9wdWxhdGlvbiwgc2VlIGBgcHZhcmlhbmNlYGAuCisKKyAgICBFeGFtcGxlczoKKworICAgID4+PiBkYXRhID0gWzIuNzUsIDEuNzUsIDEuMjUsIDAuMjUsIDAuNSwgMS4yNSwgMy41XQorICAgID4+PiB2YXJpYW5jZShkYXRhKQorICAgIDEuMzcyMDIzODA5NTIzODA5NQorCisgICAgSWYgeW91IGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBtZWFuIG9mIHlvdXIgZGF0YSwgeW91IGNhbiBwYXNzIGl0IGFzCisgICAgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBgYHhiYXJgYCB0byBhdm9pZCByZWNhbGN1bGF0aW5nIGl0OgorCisgICAgPj4+IG0gPSBtZWFuKGRhdGEpCisgICAgPj4+IHZhcmlhbmNlKGRhdGEsIG0pCisgICAgMS4zNzIwMjM4MDk1MjM4MDk1CisKKyAgICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoYXQgYGB4YmFyYGAgaXMgYWN0dWFsbHkgdGhlIG1lYW4gb2YKKyAgICBgYGRhdGFgYC4gR2l2aW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBgeGJhcmBgIG1heSBsZWFkIHRvIGludmFsaWQgb3IKKyAgICBpbXBvc3NpYmxlIHJlc3VsdHMuCisKKyAgICBEZWNpbWFscyBhbmQgRnJhY3Rpb25zIGFyZSBzdXBwb3J0ZWQ6CisKKyAgICA+Pj4gZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsIGFzIEQKKyAgICA+Pj4gdmFyaWFuY2UoW0QoIjI3LjUiKSwgRCgiMzAuMjUiKSwgRCgiMzAuMjUiKSwgRCgiMzQuNSIpLCBEKCI0MS43NSIpXSkKKyAgICBEZWNpbWFsKCczMS4wMTg3NScpCisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gdmFyaWFuY2UoW0YoMSwgNiksIEYoMSwgMiksIEYoNSwgMyldKQorICAgIEZyYWN0aW9uKDY3LCAxMDgpCisKKyAgICAiIiIKKyAgICBpZiBpdGVyKGRhdGEpIGlzIGRhdGE6CisgICAgICAgIGRhdGEgPSBsaXN0KGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPCAyOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ3ZhcmlhbmNlIHJlcXVpcmVzIGF0IGxlYXN0IHR3byBkYXRhIHBvaW50cycpCisgICAgVCwgc3MgPSBfc3MoZGF0YSwgeGJhcikKKyAgICByZXR1cm4gX2NvbnZlcnQoc3MvKG4tMSksIFQpCisKKworZGVmIHB2YXJpYW5jZShkYXRhLCBtdT1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHBvcHVsYXRpb24gdmFyaWFuY2Ugb2YgYGBkYXRhYGAuCisKKyAgICBkYXRhIHNob3VsZCBiZSBhbiBpdGVyYWJsZSBvZiBSZWFsLXZhbHVlZCBudW1iZXJzLCB3aXRoIGF0IGxlYXN0IG9uZQorICAgIHZhbHVlLiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgbXUsIGlmIGdpdmVuLCBzaG91bGQgYmUgdGhlIG1lYW4gb2YKKyAgICB0aGUgZGF0YS4gSWYgaXQgaXMgbWlzc2luZyBvciBOb25lLCB0aGUgbWVhbiBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuCisKKyAgICBVc2UgdGhpcyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIGZyb20gdGhlIGVudGlyZSBwb3B1bGF0aW9uLgorICAgIFRvIGVzdGltYXRlIHRoZSB2YXJpYW5jZSBmcm9tIGEgc2FtcGxlLCB0aGUgYGB2YXJpYW5jZWBgIGZ1bmN0aW9uIGlzCisgICAgdXN1YWxseSBhIGJldHRlciBjaG9pY2UuCisKKyAgICBFeGFtcGxlczoKKworICAgID4+PiBkYXRhID0gWzAuMCwgMC4yNSwgMC4yNSwgMS4yNSwgMS41LCAxLjc1LCAyLjc1LCAzLjI1XQorICAgID4+PiBwdmFyaWFuY2UoZGF0YSkKKyAgICAxLjI1CisKKyAgICBJZiB5b3UgaGF2ZSBhbHJlYWR5IGNhbGN1bGF0ZWQgdGhlIG1lYW4gb2YgdGhlIGRhdGEsIHlvdSBjYW4gcGFzcyBpdCBhcworICAgIHRoZSBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdDoKKworICAgID4+PiBtdSA9IG1lYW4oZGF0YSkKKyAgICA+Pj4gcHZhcmlhbmNlKGRhdGEsIG11KQorICAgIDEuMjUKKworICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgdGhhdCBgYG11YGAgaXMgYWN0dWFsbHkgdGhlIG1lYW4gb2YgYGBkYXRhYGAuCisgICAgR2l2aW5nIGFyYml0cmFyeSB2YWx1ZXMgZm9yIGBgbXVgYCBtYXkgbGVhZCB0byBpbnZhbGlkIG9yIGltcG9zc2libGUKKyAgICByZXN1bHRzLgorCisgICAgRGVjaW1hbHMgYW5kIEZyYWN0aW9ucyBhcmUgc3VwcG9ydGVkOgorCisgICAgPj4+IGZyb20gZGVjaW1hbCBpbXBvcnQgRGVjaW1hbCBhcyBECisgICAgPj4+IHB2YXJpYW5jZShbRCgiMjcuNSIpLCBEKCIzMC4yNSIpLCBEKCIzMC4yNSIpLCBEKCIzNC41IiksIEQoIjQxLjc1IildKQorICAgIERlY2ltYWwoJzI0LjgxNScpCisKKyAgICA+Pj4gZnJvbSBmcmFjdGlvbnMgaW1wb3J0IEZyYWN0aW9uIGFzIEYKKyAgICA+Pj4gcHZhcmlhbmNlKFtGKDEsIDQpLCBGKDUsIDQpLCBGKDEsIDIpXSkKKyAgICBGcmFjdGlvbigxMywgNzIpCisKKyAgICAiIiIKKyAgICBpZiBpdGVyKGRhdGEpIGlzIGRhdGE6CisgICAgICAgIGRhdGEgPSBsaXN0KGRhdGEpCisgICAgbiA9IGxlbihkYXRhKQorICAgIGlmIG4gPCAxOgorICAgICAgICByYWlzZSBTdGF0aXN0aWNzRXJyb3IoJ3B2YXJpYW5jZSByZXF1aXJlcyBhdCBsZWFzdCBvbmUgZGF0YSBwb2ludCcpCisgICAgc3MgPSBfc3MoZGF0YSwgbXUpCisgICAgVCwgc3MgPSBfc3MoZGF0YSwgbXUpCisgICAgcmV0dXJuIF9jb252ZXJ0KHNzL24sIFQpCisKKworZGVmIHN0ZGV2KGRhdGEsIHhiYXI9Tm9uZSk6CisgICAgIiIiUmV0dXJuIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgc2FtcGxlIHZhcmlhbmNlLgorCisgICAgU2VlIGBgdmFyaWFuY2VgYCBmb3IgYXJndW1lbnRzIGFuZCBvdGhlciBkZXRhaWxzLgorCisgICAgPj4+IHN0ZGV2KFsxLjUsIDIuNSwgMi41LCAyLjc1LCAzLjI1LCA0Ljc1XSkKKyAgICAxLjA4MTA4NzQxNTUyMTk4MjcKKworICAgICIiIgorICAgIHZhciA9IHZhcmlhbmNlKGRhdGEsIHhiYXIpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdmFyLnNxcnQoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIG1hdGguc3FydCh2YXIpCisKKworZGVmIHBzdGRldihkYXRhLCBtdT1Ob25lKToKKyAgICAiIiJSZXR1cm4gdGhlIHNxdWFyZSByb290IG9mIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlLgorCisgICAgU2VlIGBgcHZhcmlhbmNlYGAgZm9yIGFyZ3VtZW50cyBhbmQgb3RoZXIgZGV0YWlscy4KKworICAgID4+PiBwc3RkZXYoWzEuNSwgMi41LCAyLjUsIDIuNzUsIDMuMjUsIDQuNzVdKQorICAgIDAuOTg2ODkzMjczNTI3MjUxCisKKyAgICAiIiIKKyAgICB2YXIgPSBwdmFyaWFuY2UoZGF0YSwgbXUpCisgICAgdHJ5OgorICAgICAgICByZXR1cm4gdmFyLnNxcnQoKQorICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcmV0dXJuIG1hdGguc3FydCh2YXIpCmRpZmYgLS1naXQgYS9MaWIvc3RyaW5nLnB5IGIvTGliL3N0cmluZy5weQppbmRleCBiNTdjNzliLi5lZjA3ODdmIDEwMDY0NAotLS0gYS9MaWIvc3RyaW5nLnB5CisrKyBiL0xpYi9zdHJpbmcucHkKQEAgLTk0LDcgKzk0LDExIEBACiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgcGxhY2Vob2xkZXIgaW4gc3RyaW5nOiBsaW5lICVkLCBjb2wgJWQnICUKICAgICAgICAgICAgICAgICAgICAgICAgICAobGluZW5vLCBjb2xubykpCiAKLSAgICBkZWYgc3Vic3RpdHV0ZShzZWxmLCAqYXJncywgKiprd3MpOgorICAgIGRlZiBzdWJzdGl0dXRlKCphcmdzLCAqKmt3cyk6CisgICAgICAgIGlmIG5vdCBhcmdzOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkZXNjcmlwdG9yICdzdWJzdGl0dXRlJyBvZiAnVGVtcGxhdGUnIG9iamVjdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRzIGFuIGFyZ3VtZW50IikKKyAgICAgICAgc2VsZiwgKmFyZ3MgPSBhcmdzICAjIGFsbG93IHRoZSAic2VsZiIga2V5d29yZCBiZSBwYXNzZWQKICAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignVG9vIG1hbnkgcG9zaXRpb25hbCBhcmd1bWVudHMnKQogICAgICAgICBpZiBub3QgYXJnczoKQEAgLTEyMCw3ICsxMjQsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXR0ZXJuKQogICAgICAgICByZXR1cm4gc2VsZi5wYXR0ZXJuLnN1Yihjb252ZXJ0LCBzZWxmLnRlbXBsYXRlKQogCi0gICAgZGVmIHNhZmVfc3Vic3RpdHV0ZShzZWxmLCAqYXJncywgKiprd3MpOgorICAgIGRlZiBzYWZlX3N1YnN0aXR1dGUoKmFyZ3MsICoqa3dzKToKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRlc2NyaXB0b3IgJ3NhZmVfc3Vic3RpdHV0ZScgb2YgJ1RlbXBsYXRlJyBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncyAgIyBhbGxvdyB0aGUgInNlbGYiIGtleXdvcmQgYmUgcGFzc2VkCiAgICAgICAgIGlmIGxlbihhcmdzKSA+IDE6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ1RvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzJykKICAgICAgICAgaWYgbm90IGFyZ3M6CkBAIC0xNjAsMTYgKzE2OCwyOSBAQAogIyBUaGUgZmllbGQgbmFtZSBwYXJzZXIgaXMgaW1wbGVtZW50ZWQgaW4gX3N0cmluZy5mb3JtYXR0ZXJfZmllbGRfbmFtZV9zcGxpdAogCiBjbGFzcyBGb3JtYXR0ZXI6Ci0gICAgZGVmIGZvcm1hdChzZWxmLCBmb3JtYXRfc3RyaW5nLCAqYXJncywgKiprd2FyZ3MpOgorICAgIGRlZiBmb3JtYXQoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IGFyZ3M6CisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRlc2NyaXB0b3IgJ2Zvcm1hdCcgb2YgJ0Zvcm1hdHRlcicgb2JqZWN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmVlZHMgYW4gYXJndW1lbnQiKQorICAgICAgICBzZWxmLCAqYXJncyA9IGFyZ3MgICMgYWxsb3cgdGhlICJzZWxmIiBrZXl3b3JkIGJlIHBhc3NlZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBmb3JtYXRfc3RyaW5nLCAqYXJncyA9IGFyZ3MgIyBhbGxvdyB0aGUgImZvcm1hdF9zdHJpbmciIGtleXdvcmQgYmUgcGFzc2VkCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgaWYgJ2Zvcm1hdF9zdHJpbmcnIGluIGt3YXJnczoKKyAgICAgICAgICAgICAgICBmb3JtYXRfc3RyaW5nID0ga3dhcmdzLnBvcCgnZm9ybWF0X3N0cmluZycpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZm9ybWF0KCkgbWlzc2luZyAxIHJlcXVpcmVkIHBvc2l0aW9uYWwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQ6ICdmb3JtYXRfc3RyaW5nJyIpIGZyb20gTm9uZQogICAgICAgICByZXR1cm4gc2VsZi52Zm9ybWF0KGZvcm1hdF9zdHJpbmcsIGFyZ3MsIGt3YXJncykKIAogICAgIGRlZiB2Zm9ybWF0KHNlbGYsIGZvcm1hdF9zdHJpbmcsIGFyZ3MsIGt3YXJncyk6CiAgICAgICAgIHVzZWRfYXJncyA9IHNldCgpCi0gICAgICAgIHJlc3VsdCA9IHNlbGYuX3Zmb3JtYXQoZm9ybWF0X3N0cmluZywgYXJncywga3dhcmdzLCB1c2VkX2FyZ3MsIDIpCisgICAgICAgIHJlc3VsdCwgXyA9IHNlbGYuX3Zmb3JtYXQoZm9ybWF0X3N0cmluZywgYXJncywga3dhcmdzLCB1c2VkX2FyZ3MsIDIpCiAgICAgICAgIHNlbGYuY2hlY2tfdW51c2VkX2FyZ3ModXNlZF9hcmdzLCBhcmdzLCBrd2FyZ3MpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAotICAgIGRlZiBfdmZvcm1hdChzZWxmLCBmb3JtYXRfc3RyaW5nLCBhcmdzLCBrd2FyZ3MsIHVzZWRfYXJncywgcmVjdXJzaW9uX2RlcHRoKToKKyAgICBkZWYgX3Zmb3JtYXQoc2VsZiwgZm9ybWF0X3N0cmluZywgYXJncywga3dhcmdzLCB1c2VkX2FyZ3MsIHJlY3Vyc2lvbl9kZXB0aCwKKyAgICAgICAgICAgICAgICAgYXV0b19hcmdfaW5kZXg9MCk6CiAgICAgICAgIGlmIHJlY3Vyc2lvbl9kZXB0aCA8IDA6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdNYXggc3RyaW5nIHJlY3Vyc2lvbiBleGNlZWRlZCcpCiAgICAgICAgIHJlc3VsdCA9IFtdCkBAIC0xODUsNiArMjA2LDIzIEBACiAgICAgICAgICAgICAgICAgIyB0aGlzIGlzIHNvbWUgbWFya3VwLCBmaW5kIHRoZSBvYmplY3QgYW5kIGRvCiAgICAgICAgICAgICAgICAgIyAgdGhlIGZvcm1hdHRpbmcKIAorICAgICAgICAgICAgICAgICMgaGFuZGxlIGFyZyBpbmRleGluZyB3aGVuIGVtcHR5IGZpZWxkX25hbWVzIGFyZSBnaXZlbi4KKyAgICAgICAgICAgICAgICBpZiBmaWVsZF9uYW1lID09ICcnOgorICAgICAgICAgICAgICAgICAgICBpZiBhdXRvX2FyZ19pbmRleCBpcyBGYWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2Nhbm5vdCBzd2l0Y2ggZnJvbSBtYW51YWwgZmllbGQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3BlY2lmaWNhdGlvbiB0byBhdXRvbWF0aWMgZmllbGQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtYmVyaW5nJykKKyAgICAgICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9IHN0cihhdXRvX2FyZ19pbmRleCkKKyAgICAgICAgICAgICAgICAgICAgYXV0b19hcmdfaW5kZXggKz0gMQorICAgICAgICAgICAgICAgIGVsaWYgZmllbGRfbmFtZS5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGF1dG9fYXJnX2luZGV4OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignY2Fubm90IHN3aXRjaCBmcm9tIG1hbnVhbCBmaWVsZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGVjaWZpY2F0aW9uIHRvIGF1dG9tYXRpYyBmaWVsZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdudW1iZXJpbmcnKQorICAgICAgICAgICAgICAgICAgICAjIGRpc2FibGUgYXV0byBhcmcgaW5jcmVtZW50aW5nLCBpZiBpdCBnZXRzCisgICAgICAgICAgICAgICAgICAgICMgdXNlZCBsYXRlciBvbiwgdGhlbiBhbiBleGNlcHRpb24gd2lsbCBiZSByYWlzZWQKKyAgICAgICAgICAgICAgICAgICAgYXV0b19hcmdfaW5kZXggPSBGYWxzZQorCiAgICAgICAgICAgICAgICAgIyBnaXZlbiB0aGUgZmllbGRfbmFtZSwgZmluZCB0aGUgb2JqZWN0IGl0IHJlZmVyZW5jZXMKICAgICAgICAgICAgICAgICAjICBhbmQgdGhlIGFyZ3VtZW50IGl0IGNhbWUgZnJvbQogICAgICAgICAgICAgICAgIG9iaiwgYXJnX3VzZWQgPSBzZWxmLmdldF9maWVsZChmaWVsZF9uYW1lLCBhcmdzLCBrd2FyZ3MpCkBAIC0xOTQsMTMgKzIzMiwxNSBAQAogICAgICAgICAgICAgICAgIG9iaiA9IHNlbGYuY29udmVydF9maWVsZChvYmosIGNvbnZlcnNpb24pCiAKICAgICAgICAgICAgICAgICAjIGV4cGFuZCB0aGUgZm9ybWF0IHNwZWMsIGlmIG5lZWRlZAotICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjID0gc2VsZi5fdmZvcm1hdChmb3JtYXRfc3BlYywgYXJncywga3dhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VkX2FyZ3MsIHJlY3Vyc2lvbl9kZXB0aC0xKQorICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjLCBhdXRvX2FyZ19pbmRleCA9IHNlbGYuX3Zmb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjLCBhcmdzLCBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgIHVzZWRfYXJncywgcmVjdXJzaW9uX2RlcHRoLTEsCisgICAgICAgICAgICAgICAgICAgIGF1dG9fYXJnX2luZGV4PWF1dG9fYXJnX2luZGV4KQogCiAgICAgICAgICAgICAgICAgIyBmb3JtYXQgdGhlIG9iamVjdCBhbmQgYXBwZW5kIHRvIHRoZSByZXN1bHQKICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHNlbGYuZm9ybWF0X2ZpZWxkKG9iaiwgZm9ybWF0X3NwZWMpKQogCi0gICAgICAgIHJldHVybiAnJy5qb2luKHJlc3VsdCkKKyAgICAgICAgcmV0dXJuICcnLmpvaW4ocmVzdWx0KSwgYXV0b19hcmdfaW5kZXgKIAogCiAgICAgZGVmIGdldF92YWx1ZShzZWxmLCBrZXksIGFyZ3MsIGt3YXJncyk6CmRpZmYgLS1naXQgYS9MaWIvc3RydWN0LnB5IGIvTGliL3N0cnVjdC5weQppbmRleCA5YmZjMjNmLi5kNmJiYTU4IDEwMDY0NAotLS0gYS9MaWIvc3RydWN0LnB5CisrKyBiL0xpYi9zdHJ1Y3QucHkKQEAgLTEsNiArMSw3IEBACiBfX2FsbF9fID0gWwogICAgICMgRnVuY3Rpb25zCiAgICAgJ2NhbGNzaXplJywgJ3BhY2snLCAncGFja19pbnRvJywgJ3VucGFjaycsICd1bnBhY2tfZnJvbScsCisgICAgJ2l0ZXJfdW5wYWNrJywKIAogICAgICMgQ2xhc3NlcwogICAgICdTdHJ1Y3QnLApkaWZmIC0tZ2l0IGEvTGliL3N1YnByb2Nlc3MucHkgYi9MaWIvc3VicHJvY2Vzcy5weQppbmRleCAwMTc4YjA4Li4wNGNmYjQ0IDEwMDY0NAotLS0gYS9MaWIvc3VicHJvY2Vzcy5weQorKysgYi9MaWIvc3VicHJvY2Vzcy5weQpAQCAtMTQ1LDExICsxNDUsMTMgQEAKIGdldHN0YXR1c291dHB1dChjbWQpOgogICAgIFJldHVybiAoc3RhdHVzLCBvdXRwdXQpIG9mIGV4ZWN1dGluZyBjbWQgaW4gYSBzaGVsbC4KIAotICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggb3MucG9wZW4oKSBhbmQgcmV0dXJuIGEgMi10dXBsZQotICAgIChzdGF0dXMsIG91dHB1dCkuICBjbWQgaXMgYWN0dWFsbHkgcnVuIGFzICd7IGNtZCA7IH0gMj4mMScsIHNvIHRoYXQgdGhlCi0gICAgcmV0dXJuZWQgb3V0cHV0IHdpbGwgY29udGFpbiBvdXRwdXQgb3IgZXJyb3IgbWVzc2FnZXMuIEEgdHJhaWxpbmcgbmV3bGluZQotICAgIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4gVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUKLSAgICBpbnRlcnByZXRlZCBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgQyBmdW5jdGlvbiB3YWl0KCkuICBFeGFtcGxlOgorICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggJ2NoZWNrX291dHB1dCcgYW5kCisgICAgcmV0dXJuIGEgMi10dXBsZSAoc3RhdHVzLCBvdXRwdXQpLiBVbml2ZXJzYWwgbmV3bGluZXMgbW9kZSBpcyB1c2VkLAorICAgIG1lYW5pbmcgdGhhdCB0aGUgcmVzdWx0IHdpdGggYmUgZGVjb2RlZCB0byBhIHN0cmluZy4KKworICAgIEEgdHJhaWxpbmcgbmV3bGluZSBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuCisgICAgVGhlIGV4aXQgc3RhdHVzIGZvciB0aGUgY29tbWFuZCBjYW4gYmUgaW50ZXJwcmV0ZWQKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGZvciB0aGUgZnVuY3Rpb24gJ3dhaXQnLiAgRXhhbXBsZToKIAogICAgID4+PiBzdWJwcm9jZXNzLmdldHN0YXR1c291dHB1dCgnbHMgL2Jpbi9scycpCiAgICAgKDAsICcvYmluL2xzJykKQEAgLTE3OCw2ICsxODAsOSBAQAogCiAgICAgPj4+IG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsibHMiLCAiLWwiLCAiL2Rldi9udWxsIl0pCiAKKyAgICBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50LCAiaW5wdXQiLCBhbGxvd2luZyB5b3UgdG8KKyAgICBwYXNzIGEgc3RyaW5nIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB5b3UgdXNlIHRoaXMgYXJndW1lbnQKKyAgICB5b3UgbWF5IG5vdCBhbHNvIHVzZSB0aGUgUG9wZW4gY29uc3RydWN0b3IncyAic3RkaW4iIGFyZ3VtZW50LgogCiBFeGNlcHRpb25zCiAtLS0tLS0tLS0tCkBAIC0zNDUsOCArMzUwLDYgQEAKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgdGltZQotaW1wb3J0IHRyYWNlYmFjawotaW1wb3J0IGdjCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCB3YXJuaW5ncwpAQCAtMzk4LDE5ICs0MDEsMjggQEAKICAgICAgICAgaFN0ZE91dHB1dCA9IE5vbmUKICAgICAgICAgaFN0ZEVycm9yID0gTm9uZQogICAgICAgICB3U2hvd1dpbmRvdyA9IDAKLSAgICBjbGFzcyBweXdpbnR5cGVzOgotICAgICAgICBlcnJvciA9IElPRXJyb3IKIGVsc2U6Ci0gICAgaW1wb3J0IHNlbGVjdAotICAgIF9oYXNfcG9sbCA9IGhhc2F0dHIoc2VsZWN0LCAncG9sbCcpCiAgICAgaW1wb3J0IF9wb3NpeHN1YnByb2Nlc3MKLSAgICBfY3JlYXRlX3BpcGUgPSBfcG9zaXhzdWJwcm9jZXNzLmNsb2V4ZWNfcGlwZQorICAgIGltcG9ydCBzZWxlY3QKKyAgICBpbXBvcnQgc2VsZWN0b3JzCisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICBpbXBvcnQgZHVtbXlfdGhyZWFkaW5nIGFzIHRocmVhZGluZwogCiAgICAgIyBXaGVuIHNlbGVjdCBvciBwb2xsIGhhcyBpbmRpY2F0ZWQgdGhhdCB0aGUgZmlsZSBpcyB3cml0YWJsZSwKICAgICAjIHdlIGNhbiB3cml0ZSB1cCB0byBfUElQRV9CVUYgYnl0ZXMgd2l0aG91dCByaXNrIG9mIGJsb2NraW5nLgogICAgICMgUE9TSVggZGVmaW5lcyBQSVBFX0JVRiBhcyA+PSA1MTIuCiAgICAgX1BJUEVfQlVGID0gZ2V0YXR0cihzZWxlY3QsICdQSVBFX0JVRicsIDUxMikKIAorICAgICMgcG9sbC9zZWxlY3QgaGF2ZSB0aGUgYWR2YW50YWdlIG9mIG5vdCByZXF1aXJpbmcgYW55IGV4dHJhIGZpbGUKKyAgICAjIGRlc2NyaXB0b3IsIGNvbnRyYXJpbHkgdG8gZXBvbGwva3F1ZXVlIChhbHNvLCB0aGV5IHJlcXVpcmUgYSBzaW5nbGUKKyAgICAjIHN5c2NhbGwpLgorICAgIGlmIGhhc2F0dHIoc2VsZWN0b3JzLCAnUG9sbFNlbGVjdG9yJyk6CisgICAgICAgIF9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlBvbGxTZWxlY3RvcgorICAgIGVsc2U6CisgICAgICAgIF9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCisKIAogX19hbGxfXyA9IFsiUG9wZW4iLCAiUElQRSIsICJTVERPVVQiLCAiY2FsbCIsICJjaGVja19jYWxsIiwgImdldHN0YXR1c291dHB1dCIsCiAgICAgICAgICAgICJnZXRvdXRwdXQiLCAiY2hlY2tfb3V0cHV0IiwgIkNhbGxlZFByb2Nlc3NFcnJvciIsICJERVZOVUxMIl0KQEAgLTUwMCw3ICs1MTIsNiBAQAogICAgICAgICAndmVyYm9zZSc6ICd2JywKICAgICAgICAgJ2J5dGVzX3dhcm5pbmcnOiAnYicsCiAgICAgICAgICdxdWlldCc6ICdxJywKLSAgICAgICAgJ2hhc2hfcmFuZG9taXphdGlvbic6ICdSJywKICAgICB9CiAgICAgYXJncyA9IFtdCiAgICAgZm9yIGZsYWcsIG9wdCBpbiBmbGFnX29wdF9tYXAuaXRlbXMoKToKQEAgLTU2OCwxNCArNTc5LDMxIEBACiAgICAgLi4uICAgICAgICAgICAgICBzdGRlcnI9U1RET1VUKQogICAgIGInbHM6IG5vbl9leGlzdGVudF9maWxlOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XG4nCiAKKyAgICBUaGVyZSBpcyBhbiBhZGRpdGlvbmFsIG9wdGlvbmFsIGFyZ3VtZW50LCAiaW5wdXQiLCBhbGxvd2luZyB5b3UgdG8KKyAgICBwYXNzIGEgc3RyaW5nIHRvIHRoZSBzdWJwcm9jZXNzJ3Mgc3RkaW4uICBJZiB5b3UgdXNlIHRoaXMgYXJndW1lbnQKKyAgICB5b3UgbWF5IG5vdCBhbHNvIHVzZSB0aGUgUG9wZW4gY29uc3RydWN0b3IncyAic3RkaW4iIGFyZ3VtZW50LCBhcworICAgIGl0IHRvbyB3aWxsIGJlIHVzZWQgaW50ZXJuYWxseS4gIEV4YW1wbGU6CisKKyAgICA+Pj4gY2hlY2tfb3V0cHV0KFsic2VkIiwgIi1lIiwgInMvZm9vL2Jhci8iXSwKKyAgICAuLi4gICAgICAgICAgICAgIGlucHV0PWIid2hlbiBpbiB0aGUgY291cnNlIG9mIGZvb21hbiBldmVudHNcbiIpCisgICAgYid3aGVuIGluIHRoZSBjb3Vyc2Ugb2YgYmFybWFuIGV2ZW50c1xuJworCiAgICAgSWYgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUgaXMgcGFzc2VkLCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYQogICAgIHN0cmluZyByYXRoZXIgdGhhbiBieXRlcy4KICAgICAiIiIKICAgICBpZiAnc3Rkb3V0JyBpbiBrd2FyZ3M6CiAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3N0ZG91dCBhcmd1bWVudCBub3QgYWxsb3dlZCwgaXQgd2lsbCBiZSBvdmVycmlkZGVuLicpCisgICAgaWYgJ2lucHV0JyBpbiBrd2FyZ3M6CisgICAgICAgIGlmICdzdGRpbicgaW4ga3dhcmdzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3RkaW4gYW5kIGlucHV0IGFyZ3VtZW50cyBtYXkgbm90IGJvdGggYmUgdXNlZC4nKQorICAgICAgICBpbnB1dGRhdGEgPSBrd2FyZ3NbJ2lucHV0J10KKyAgICAgICAgZGVsIGt3YXJnc1snaW5wdXQnXQorICAgICAgICBrd2FyZ3NbJ3N0ZGluJ10gPSBQSVBFCisgICAgZWxzZToKKyAgICAgICAgaW5wdXRkYXRhID0gTm9uZQogICAgIHdpdGggUG9wZW4oKnBvcGVuYXJncywgc3Rkb3V0PVBJUEUsICoqa3dhcmdzKSBhcyBwcm9jZXNzOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKHRpbWVvdXQ9dGltZW91dCkKKyAgICAgICAgICAgIG91dHB1dCwgdW51c2VkX2VyciA9IHByb2Nlc3MuY29tbXVuaWNhdGUoaW5wdXRkYXRhLCB0aW1lb3V0PXRpbWVvdXQpCiAgICAgICAgIGV4Y2VwdCBUaW1lb3V0RXhwaXJlZDoKICAgICAgICAgICAgIHByb2Nlc3Mua2lsbCgpCiAgICAgICAgICAgICBvdXRwdXQsIHVudXNlZF9lcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKQEAgLTY2NCwxMyArNjkyLDE1IEBACiAjCiAKIGRlZiBnZXRzdGF0dXNvdXRwdXQoY21kKToKLSAgICAiIiJSZXR1cm4gKHN0YXR1cywgb3V0cHV0KSBvZiBleGVjdXRpbmcgY21kIGluIGEgc2hlbGwuCisgICAgIiIiICAgIFJldHVybiAoc3RhdHVzLCBvdXRwdXQpIG9mIGV4ZWN1dGluZyBjbWQgaW4gYSBzaGVsbC4KIAotICAgIEV4ZWN1dGUgdGhlIHN0cmluZyAnY21kJyBpbiBhIHNoZWxsIHdpdGggb3MucG9wZW4oKSBhbmQgcmV0dXJuIGEgMi10dXBsZQotICAgIChzdGF0dXMsIG91dHB1dCkuICBjbWQgaXMgYWN0dWFsbHkgcnVuIGFzICd7IGNtZCA7IH0gMj4mMScsIHNvIHRoYXQgdGhlCi0gICAgcmV0dXJuZWQgb3V0cHV0IHdpbGwgY29udGFpbiBvdXRwdXQgb3IgZXJyb3IgbWVzc2FnZXMuICBBIHRyYWlsaW5nIG5ld2xpbmUKLSAgICBpcyBzdHJpcHBlZCBmcm9tIHRoZSBvdXRwdXQuICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZQotICAgIGludGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIHRoZSBDIGZ1bmN0aW9uIHdhaXQoKS4gIEV4YW1wbGU6CisgICAgRXhlY3V0ZSB0aGUgc3RyaW5nICdjbWQnIGluIGEgc2hlbGwgd2l0aCAnY2hlY2tfb3V0cHV0JyBhbmQKKyAgICByZXR1cm4gYSAyLXR1cGxlIChzdGF0dXMsIG91dHB1dCkuIFVuaXZlcnNhbCBuZXdsaW5lcyBtb2RlIGlzIHVzZWQsCisgICAgbWVhbmluZyB0aGF0IHRoZSByZXN1bHQgd2l0aCBiZSBkZWNvZGVkIHRvIGEgc3RyaW5nLgorCisgICAgQSB0cmFpbGluZyBuZXdsaW5lIGlzIHN0cmlwcGVkIGZyb20gdGhlIG91dHB1dC4KKyAgICBUaGUgZXhpdCBzdGF0dXMgZm9yIHRoZSBjb21tYW5kIGNhbiBiZSBpbnRlcnByZXRlZAorICAgIGFjY29yZGluZyB0byB0aGUgcnVsZXMgZm9yIHRoZSBmdW5jdGlvbiAnd2FpdCcuIEV4YW1wbGU6CiAKICAgICA+Pj4gaW1wb3J0IHN1YnByb2Nlc3MKICAgICA+Pj4gc3VicHJvY2Vzcy5nZXRzdGF0dXNvdXRwdXQoJ2xzIC9iaW4vbHMnKQpAQCAtNzE5LDYgKzc0OSwxMiBAQAogICAgICAgICAgICAgICAgICBwYXNzX2Zkcz0oKSk6CiAgICAgICAgICIiIkNyZWF0ZSBuZXcgUG9wZW4gaW5zdGFuY2UuIiIiCiAgICAgICAgIF9jbGVhbnVwKCkKKyAgICAgICAgIyBIZWxkIHdoaWxlIGFueXRoaW5nIGlzIGNhbGxpbmcgd2FpdHBpZCBiZWZvcmUgcmV0dXJuY29kZSBoYXMgYmVlbgorICAgICAgICAjIHVwZGF0ZWQgdG8gcHJldmVudCBjbG9iYmVyaW5nIHJldHVybmNvZGUgaWYgd2FpdCgpIG9yIHBvbGwoKSBhcmUKKyAgICAgICAgIyBjYWxsZWQgZnJvbSBtdWx0aXBsZSB0aHJlYWRzIGF0IG9uY2UuICBBZnRlciBhY3F1aXJpbmcgdGhlIGxvY2ssCisgICAgICAgICMgY29kZSBtdXN0IHJlLWNoZWNrIHNlbGYucmV0dXJuY29kZSB0byBzZWUgaWYgYW5vdGhlciB0aHJlYWQganVzdAorICAgICAgICAjIGZpbmlzaGVkIGEgd2FpdHBpZCgpIGNhbGwuCisgICAgICAgIHNlbGYuX3dhaXRwaWRfbG9jayA9IHRocmVhZGluZy5Mb2NrKCkKIAogICAgICAgICBzZWxmLl9pbnB1dCA9IE5vbmUKICAgICAgICAgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkID0gRmFsc2UKQEAgLTc5OCw3ICs4MzQsOCBAQAogICAgICAgICBpZiBwMmN3cml0ZSAhPSAtMToKICAgICAgICAgICAgIHNlbGYuc3RkaW4gPSBpby5vcGVuKHAyY3dyaXRlLCAnd2InLCBidWZzaXplKQogICAgICAgICAgICAgaWYgdW5pdmVyc2FsX25ld2xpbmVzOgotICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4gPSBpby5UZXh0SU9XcmFwcGVyKHNlbGYuc3RkaW4sIHdyaXRlX3Rocm91Z2g9VHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZGluID0gaW8uVGV4dElPV3JhcHBlcihzZWxmLnN0ZGluLCB3cml0ZV90aHJvdWdoPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZV9idWZmZXJpbmc9KGJ1ZnNpemUgPT0gMSkpCiAgICAgICAgIGlmIGMycHJlYWQgIT0gLTE6CiAgICAgICAgICAgICBzZWxmLnN0ZG91dCA9IGlvLm9wZW4oYzJwcmVhZCwgJ3JiJywgYnVmc2l6ZSkKICAgICAgICAgICAgIGlmIHVuaXZlcnNhbF9uZXdsaW5lczoKQEAgLTgyMiw3ICs4NTksNyBAQAogICAgICAgICAgICAgZm9yIGYgaW4gZmlsdGVyKE5vbmUsIChzZWxmLnN0ZGluLCBzZWxmLnN0ZG91dCwgc2VsZi5zdGRlcnIpKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzICAjIElnbm9yZSBFQkFERiBvciBvdGhlciBlcnJvcnMuCiAKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jbG9zZWRfY2hpbGRfcGlwZV9mZHM6CkBAIC04MzgsNyArODc1LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgZmQgaW4gdG9fY2xvc2U6CiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgICAgIHJhaXNlCkBAIC04NTYsMTAgKzg5MywxMiBAQAogICAgICAgICAgICAgc2VsZi5zdGRvdXQuY2xvc2UoKQogICAgICAgICBpZiBzZWxmLnN0ZGVycjoKICAgICAgICAgICAgIHNlbGYuc3RkZXJyLmNsb3NlKCkKLSAgICAgICAgaWYgc2VsZi5zdGRpbjoKLSAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQotICAgICAgICAjIFdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIHRlcm1pbmF0ZSwgdG8gYXZvaWQgem9tYmllcy4KLSAgICAgICAgc2VsZi53YWl0KCkKKyAgICAgICAgdHJ5OiAgIyBGbHVzaGluZyBhIEJ1ZmZlcmVkV3JpdGVyIG1heSByYWlzZSBhbiBlcnJvcgorICAgICAgICAgICAgaWYgc2VsZi5zdGRpbjoKKyAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICMgV2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gdGVybWluYXRlLCB0byBhdm9pZCB6b21iaWVzLgorICAgICAgICAgICAgc2VsZi53YWl0KCkKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYsIF9tYXhzaXplPXN5cy5tYXhzaXplKToKICAgICAgICAgaWYgbm90IHNlbGYuX2NoaWxkX2NyZWF0ZWQ6CkBAIC04OTksNyArOTM4LDcgQEAKICAgICAgICAgICAgICAgICBpZiBpbnB1dDoKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi53cml0ZShpbnB1dCkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRVBJUEUgYW5kIGUuZXJybm8gIT0gZXJybm8uRUlOVkFMOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgc2VsZi5zdGRpbi5jbG9zZSgpCkBAIC0xMDMxLDIzICsxMDcwLDYgQEAKICAgICAgICAgICAgIHJldHVybiBIYW5kbGUoaCkKIAogCi0gICAgICAgIGRlZiBfZmluZF93OXhwb3BlbihzZWxmKToKLSAgICAgICAgICAgICIiIkZpbmQgYW5kIHJldHVybiBhYnNvbHV0IHBhdGggdG8gdzl4cG9wZW4uZXhlIiIiCi0gICAgICAgICAgICB3OXhwb3BlbiA9IG9zLnBhdGguam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoX3dpbmFwaS5HZXRNb2R1bGVGaWxlTmFtZSgwKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidzl4cG9wZW4uZXhlIikKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh3OXhwb3Blbik6Ci0gICAgICAgICAgICAgICAgIyBFZWVrIC0gZmlsZS1ub3QtZm91bmQgLSBwb3NzaWJseSBhbiBlbWJlZGRpbmcKLSAgICAgICAgICAgICAgICAjIHNpdHVhdGlvbiAtIHNlZSBpZiB3ZSBjYW4gbG9jYXRlIGl0IGluIHN5cy5leGVjX3ByZWZpeAotICAgICAgICAgICAgICAgIHc5eHBvcGVuID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuYmFzZV9leGVjX3ByZWZpeCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInc5eHBvcGVuLmV4ZSIpCi0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHc5eHBvcGVuKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgbG9jYXRlIHc5eHBvcGVuLmV4ZSwgd2hpY2ggaXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWRlZCBmb3IgUG9wZW4gdG8gd29yayB3aXRoIHlvdXIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNoZWxsIG9yIHBsYXRmb3JtLiIpCi0gICAgICAgICAgICByZXR1cm4gdzl4cG9wZW4KLQotCiAgICAgICAgIGRlZiBfZXhlY3V0ZV9jaGlsZChzZWxmLCBhcmdzLCBleGVjdXRhYmxlLCBwcmVleGVjX2ZuLCBjbG9zZV9mZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzX2ZkcywgY3dkLCBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydHVwaW5mbywgY3JlYXRpb25mbGFncywgc2hlbGwsCkBAIC0xMDc2LDIxICsxMDk4LDYgQEAKICAgICAgICAgICAgICAgICBzdGFydHVwaW5mby53U2hvd1dpbmRvdyA9IF93aW5hcGkuU1dfSElERQogICAgICAgICAgICAgICAgIGNvbXNwZWMgPSBvcy5lbnZpcm9uLmdldCgiQ09NU1BFQyIsICJjbWQuZXhlIikKICAgICAgICAgICAgICAgICBhcmdzID0gJ3t9IC9jICJ7fSInLmZvcm1hdCAoY29tc3BlYywgYXJncykKLSAgICAgICAgICAgICAgICBpZiAoX3dpbmFwaS5HZXRWZXJzaW9uKCkgPj0gMHg4MDAwMDAwMCBvcgotICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShjb21zcGVjKS5sb3dlcigpID09ICJjb21tYW5kLmNvbSIpOgotICAgICAgICAgICAgICAgICAgICAjIFdpbjl4LCBvciB1c2luZyBjb21tYW5kLmNvbSBvbiBOVC4gV2UgbmVlZCB0bwotICAgICAgICAgICAgICAgICAgICAjIHVzZSB0aGUgdzl4cG9wZW4gaW50ZXJtZWRpYXRlIHByb2dyYW0uIEZvciBtb3JlCi0gICAgICAgICAgICAgICAgICAgICMgaW5mb3JtYXRpb24sIHNlZSBLQiBRMTUwOTU2Ci0gICAgICAgICAgICAgICAgICAgICMgKGh0dHA6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMDExMTA1MDg0MDAyL2h0dHA6Ly9zdXBwb3J0Lm1pY3Jvc29mdC5jb20vc3VwcG9ydC9rYi9hcnRpY2xlcy9RMTUwLzkvNTYuYXNwKQotICAgICAgICAgICAgICAgICAgICB3OXhwb3BlbiA9IHNlbGYuX2ZpbmRfdzl4cG9wZW4oKQotICAgICAgICAgICAgICAgICAgICBhcmdzID0gJyIlcyIgJXMnICUgKHc5eHBvcGVuLCBhcmdzKQotICAgICAgICAgICAgICAgICAgICAjIE5vdCBwYXNzaW5nIENSRUFURV9ORVdfQ09OU09MRSBoYXMgYmVlbiBrbm93biB0bwotICAgICAgICAgICAgICAgICAgICAjIGNhdXNlIHJhbmRvbSBmYWlsdXJlcyBvbiB3aW45eC4gIFNwZWNpZmljYWxseSBhCi0gICAgICAgICAgICAgICAgICAgICMgZGlhbG9nOiAiWW91ciBwcm9ncmFtIGFjY2Vzc2VkIG1lbSBjdXJyZW50bHkgaW4KLSAgICAgICAgICAgICAgICAgICAgIyB1c2UgYXQgeHh4IiBhbmQgYSBob3BlZnVsIHdhcm5pbmcgYWJvdXQgdGhlCi0gICAgICAgICAgICAgICAgICAgICMgc3RhYmlsaXR5IG9mIHlvdXIgc3lzdGVtLiAgQ29zdCBpcyBDdHJsK0Mgd29uJ3QKLSAgICAgICAgICAgICAgICAgICAgIyBraWxsIGNoaWxkcmVuLgotICAgICAgICAgICAgICAgICAgICBjcmVhdGlvbmZsYWdzIHw9IF93aW5hcGkuQ1JFQVRFX05FV19DT05TT0xFCiAKICAgICAgICAgICAgICMgU3RhcnQgdGhlIHByb2Nlc3MKICAgICAgICAgICAgIHRyeToKQEAgLTExMDIsMTIgKzExMDksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnR1cGluZm8pCi0gICAgICAgICAgICBleGNlcHQgcHl3aW50eXBlcy5lcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICMgVHJhbnNsYXRlIHB5d2ludHlwZXMuZXJyb3IgdG8gV2luZG93c0Vycm9yLCB3aGljaCBpcwotICAgICAgICAgICAgICAgICMgYSBzdWJjbGFzcyBvZiBPU0Vycm9yLiAgRklYTUU6IFdlIHNob3VsZCByZWFsbHkKLSAgICAgICAgICAgICAgICAjIHRyYW5zbGF0ZSBlcnJubyB1c2luZyBfc3lzX2Vycmxpc3QgKG9yIHNpbWlsYXIpLCBidXQKLSAgICAgICAgICAgICAgICAjIGhvdyBjYW4gdGhpcyBiZSBkb25lIGZyb20gUHl0aG9uPwotICAgICAgICAgICAgICAgIHJhaXNlIFdpbmRvd3NFcnJvcigqZS5hcmdzKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAjIENoaWxkIGlzIGxhdW5jaGVkLiBDbG9zZSB0aGUgcGFyZW50J3MgY29weSBvZiB0aG9zZSBwaXBlCiAgICAgICAgICAgICAgICAgIyBoYW5kbGVzIHRoYXQgb25seSB0aGUgY2hpbGQgc2hvdWxkIGhhdmUgb3Blbi4gIFlvdSBuZWVkCkBAIC0xMTkyLDkgKzExOTMsOSBAQAogICAgICAgICAgICAgICAgIGlmIGlucHV0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLndyaXRlKGlucHV0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FUElQRToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGlnbm9yZSBwaXBlIGZ1bGwgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbW11bmljYXRlKCkgc2hvdWxkIGlnbm9yZSBwaXBlIGZ1bGwgZXJyb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIChlLmVycm5vID09IGVycm5vLkVJTlZBTAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNlbGYucG9sbCgpIGlzIG5vdCBOb25lKToKQEAgLTEyMzcsOCArMTIzOCwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZGVycikKIAogICAgICAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnKToKLSAgICAgICAgICAgICIiIlNlbmQgYSBzaWduYWwgdG8gdGhlIHByb2Nlc3MKLSAgICAgICAgICAgICIiIgorICAgICAgICAgICAgIiIiU2VuZCBhIHNpZ25hbCB0byB0aGUgcHJvY2Vzcy4iIiIKKyAgICAgICAgICAgICMgRG9uJ3Qgc2lnbmFsIGEgcHJvY2VzcyB0aGF0IHdlIGtub3cgaGFzIGFscmVhZHkgZGllZC4KKyAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIGlmIHNpZyA9PSBzaWduYWwuU0lHVEVSTToKICAgICAgICAgICAgICAgICBzZWxmLnRlcm1pbmF0ZSgpCiAgICAgICAgICAgICBlbGlmIHNpZyA9PSBzaWduYWwuQ1RSTF9DX0VWRU5UOgpAQCAtMTI0OSw4ICsxMjUyLDEwIEBACiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgc2lnbmFsOiB7fSIuZm9ybWF0KHNpZykpCiAKICAgICAgICAgZGVmIHRlcm1pbmF0ZShzZWxmKToKLSAgICAgICAgICAgICIiIlRlcm1pbmF0ZXMgdGhlIHByb2Nlc3MKLSAgICAgICAgICAgICIiIgorICAgICAgICAgICAgIiIiVGVybWluYXRlcyB0aGUgcHJvY2Vzcy4iIiIKKyAgICAgICAgICAgICMgRG9uJ3QgdGVybWluYXRlIGEgcHJvY2VzcyB0aGF0IHdlIGtub3cgaGFzIGFscmVhZHkgZGllZC4KKyAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBfd2luYXBpLlRlcm1pbmF0ZVByb2Nlc3Moc2VsZi5faGFuZGxlLCAxKQogICAgICAgICAgICAgZXhjZXB0IFBlcm1pc3Npb25FcnJvcjoKQEAgLTEyNzgsNyArMTI4Myw3IEBACiAgICAgICAgICAgICBpZiBzdGRpbiBpcyBOb25lOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgc3RkaW4gPT0gUElQRToKLSAgICAgICAgICAgICAgICBwMmNyZWFkLCBwMmN3cml0ZSA9IF9jcmVhdGVfcGlwZSgpCisgICAgICAgICAgICAgICAgcDJjcmVhZCwgcDJjd3JpdGUgPSBvcy5waXBlKCkKICAgICAgICAgICAgIGVsaWYgc3RkaW4gPT0gREVWTlVMTDoKICAgICAgICAgICAgICAgICBwMmNyZWFkID0gc2VsZi5fZ2V0X2Rldm51bGwoKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHN0ZGluLCBpbnQpOgpAQCAtMTI5MCw3ICsxMjk1LDcgQEAKICAgICAgICAgICAgIGlmIHN0ZG91dCBpcyBOb25lOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsaWYgc3Rkb3V0ID09IFBJUEU6Ci0gICAgICAgICAgICAgICAgYzJwcmVhZCwgYzJwd3JpdGUgPSBfY3JlYXRlX3BpcGUoKQorICAgICAgICAgICAgICAgIGMycHJlYWQsIGMycHdyaXRlID0gb3MucGlwZSgpCiAgICAgICAgICAgICBlbGlmIHN0ZG91dCA9PSBERVZOVUxMOgogICAgICAgICAgICAgICAgIGMycHdyaXRlID0gc2VsZi5fZ2V0X2Rldm51bGwoKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKHN0ZG91dCwgaW50KToKQEAgLTEzMDIsNyArMTMwNyw3IEBACiAgICAgICAgICAgICBpZiBzdGRlcnIgaXMgTm9uZToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBlbGlmIHN0ZGVyciA9PSBQSVBFOgotICAgICAgICAgICAgICAgIGVycnJlYWQsIGVycndyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgICAgICBlcnJyZWFkLCBlcnJ3cml0ZSA9IG9zLnBpcGUoKQogICAgICAgICAgICAgZWxpZiBzdGRlcnIgPT0gU1RET1VUOgogICAgICAgICAgICAgICAgIGVycndyaXRlID0gYzJwd3JpdGUKICAgICAgICAgICAgIGVsaWYgc3RkZXJyID09IERFVk5VTEw6CkBAIC0xMzU0LDcgKzEzNTksMTQgQEAKICAgICAgICAgICAgICMgRm9yIHRyYW5zZmVycmluZyBwb3NzaWJsZSBleGVjIGZhaWx1cmUgZnJvbSBjaGlsZCB0byBwYXJlbnQuCiAgICAgICAgICAgICAjIERhdGEgZm9ybWF0OiAiZXhjZXB0aW9uIG5hbWU6aGV4IGVycm5vOmRlc2NyaXB0aW9uIgogICAgICAgICAgICAgIyBQaWNrbGUgaXMgbm90IHVzZWQ7IGl0IGlzIGNvbXBsZXggYW5kIGludm9sdmVzIG1lbW9yeSBhbGxvY2F0aW9uLgotICAgICAgICAgICAgZXJycGlwZV9yZWFkLCBlcnJwaXBlX3dyaXRlID0gX2NyZWF0ZV9waXBlKCkKKyAgICAgICAgICAgIGVycnBpcGVfcmVhZCwgZXJycGlwZV93cml0ZSA9IG9zLnBpcGUoKQorICAgICAgICAgICAgIyBlcnJwaXBlX3dyaXRlIG11c3Qgbm90IGJlIGluIHRoZSBzdGFuZGFyZCBpbyAwLCAxLCBvciAyIGZkIHJhbmdlLgorICAgICAgICAgICAgbG93X2Zkc190b19jbG9zZSA9IFtdCisgICAgICAgICAgICB3aGlsZSBlcnJwaXBlX3dyaXRlIDwgMzoKKyAgICAgICAgICAgICAgICBsb3dfZmRzX3RvX2Nsb3NlLmFwcGVuZChlcnJwaXBlX3dyaXRlKQorICAgICAgICAgICAgICAgIGVycnBpcGVfd3JpdGUgPSBvcy5kdXAoZXJycGlwZV93cml0ZSkKKyAgICAgICAgICAgIGZvciBsb3dfZmQgaW4gbG93X2Zkc190b19jbG9zZToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShsb3dfZmQpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAjIFdlIG11c3QgYXZvaWQgY29tcGxleCB3b3JrIHRoYXQgY291bGQgaW52b2x2ZQpAQCAtMTQyNCwxMyArMTQzNiwxMyBAQAogICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fbmFtZSwgaGV4X2Vycm5vLCBlcnJfbXNnID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycnBpcGVfZGF0YS5zcGxpdChiJzonLCAyKSkKICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUgPSBiJ1J1bnRpbWVFcnJvcicKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWUgPSBiJ1N1YnByb2Nlc3NFcnJvcicKICAgICAgICAgICAgICAgICAgICAgaGV4X2Vycm5vID0gYicwJwogICAgICAgICAgICAgICAgICAgICBlcnJfbXNnID0gKGInQmFkIGV4Y2VwdGlvbiBkYXRhIGZyb20gY2hpbGQ6ICcgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZXJycGlwZV9kYXRhKSkKICAgICAgICAgICAgICAgICBjaGlsZF9leGNlcHRpb25fdHlwZSA9IGdldGF0dHIoCiAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGlucywgZXhjZXB0aW9uX25hbWUuZGVjb2RlKCdhc2NpaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgUnVudGltZUVycm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc0Vycm9yKQogICAgICAgICAgICAgICAgIGVycl9tc2cgPSBlcnJfbXNnLmRlY29kZShlcnJvcnM9InN1cnJvZ2F0ZXBhc3MiKQogICAgICAgICAgICAgICAgIGlmIGlzc3ViY2xhc3MoY2hpbGRfZXhjZXB0aW9uX3R5cGUsIE9TRXJyb3IpIGFuZCBoZXhfZXJybm86CiAgICAgICAgICAgICAgICAgICAgIGVycm5vX251bSA9IGludChoZXhfZXJybm8sIDE2KQpAQCAtMTQ1Miw2ICsxNDY0LDcgQEAKICAgICAgICAgZGVmIF9oYW5kbGVfZXhpdHN0YXR1cyhzZWxmLCBzdHMsIF9XSUZTSUdOQUxFRD1vcy5XSUZTSUdOQUxFRCwKICAgICAgICAgICAgICAgICBfV1RFUk1TSUc9b3MuV1RFUk1TSUcsIF9XSUZFWElURUQ9b3MuV0lGRVhJVEVELAogICAgICAgICAgICAgICAgIF9XRVhJVFNUQVRVUz1vcy5XRVhJVFNUQVRVUyk6CisgICAgICAgICAgICAiIiJBbGwgY2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIE1VU1QgaG9sZCBzZWxmLl93YWl0cGlkX2xvY2suIiIiCiAgICAgICAgICAgICAjIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCAoaW5kaXJlY3RseSkgYnkgX19kZWxfXywgc28gaXQgY2Fubm90CiAgICAgICAgICAgICAjIHJlZmVyIHRvIGFueXRoaW5nIG91dHNpZGUgb2YgaXRzIGxvY2FsIHNjb3BlLgogICAgICAgICAgICAgaWYgX1dJRlNJR05BTEVEKHN0cyk6CkBAIC0xNDYwLDExICsxNDczLDExIEBACiAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gX1dFWElUU1RBVFVTKHN0cykKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgIyBTaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJVbmtub3duIGNoaWxkIGV4aXQgc3RhdHVzISIpCisgICAgICAgICAgICAgICAgcmFpc2UgU3VicHJvY2Vzc0Vycm9yKCJVbmtub3duIGNoaWxkIGV4aXQgc3RhdHVzISIpCiAKIAogICAgICAgICBkZWYgX2ludGVybmFsX3BvbGwoc2VsZiwgX2RlYWRzdGF0ZT1Ob25lLCBfd2FpdHBpZD1vcy53YWl0cGlkLAotICAgICAgICAgICAgICAgIF9XTk9IQU5HPW9zLldOT0hBTkcsIF9vc19lcnJvcj1vcy5lcnJvciwgX0VDSElMRD1lcnJuby5FQ0hJTEQpOgorICAgICAgICAgICAgICAgIF9XTk9IQU5HPW9zLldOT0hBTkcsIF9FQ0hJTEQ9ZXJybm8uRUNISUxEKToKICAgICAgICAgICAgICIiIkNoZWNrIGlmIGNoaWxkIHByb2Nlc3MgaGFzIHRlcm1pbmF0ZWQuICBSZXR1cm5zIHJldHVybmNvZGUKICAgICAgICAgICAgIGF0dHJpYnV0ZS4KIApAQCAtMTQ3MywxMSArMTQ4NiwxNyBAQAogCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl93YWl0cGlkX2xvY2suYWNxdWlyZShGYWxzZSk6CisgICAgICAgICAgICAgICAgICAgICMgU29tZXRoaW5nIGVsc2UgaXMgYnVzeSBjYWxsaW5nIHdhaXRwaWQuICBEb24ndCBhbGxvdyB0d28KKyAgICAgICAgICAgICAgICAgICAgIyBhdCBvbmNlLiAgV2Uga25vdyBub3RoaW5nIHlldC4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUgICMgQW5vdGhlciB0aHJlYWQgd2FpdGVkLgogICAgICAgICAgICAgICAgICAgICBwaWQsIHN0cyA9IF93YWl0cGlkKHNlbGYucGlkLCBfV05PSEFORykKICAgICAgICAgICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faGFuZGxlX2V4aXRzdGF0dXMoc3RzKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBfb3NfZXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgICAgICBpZiBfZGVhZHN0YXRlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gX2RlYWRzdGF0ZQogICAgICAgICAgICAgICAgICAgICBlbGlmIGUuZXJybm8gPT0gX0VDSElMRDoKQEAgLTE0ODcsMTAgKzE1MDYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICMgY2FuJ3QgZ2V0IHRoZSBzdGF0dXMuCiAgICAgICAgICAgICAgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTc1NgogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gMAorICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRwaWRfbG9jay5yZWxlYXNlKCkKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKIAogCiAgICAgICAgIGRlZiBfdHJ5X3dhaXQoc2VsZiwgd2FpdF9mbGFncyk6CisgICAgICAgICAgICAiIiJBbGwgY2FsbGVycyB0byB0aGlzIGZ1bmN0aW9uIE1VU1QgaG9sZCBzZWxmLl93YWl0cGlkX2xvY2suIiIiCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgKHBpZCwgc3RzKSA9IF9laW50cl9yZXRyeV9jYWxsKG9zLndhaXRwaWQsIHNlbGYucGlkLCB3YWl0X2ZsYWdzKQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKQEAgLTE1MjMsMTEgKzE1NDUsMTcgQEAKICAgICAgICAgICAgICAgICAjIGNyaWJiZWQgZnJvbSBMaWIvdGhyZWFkaW5nLnB5IGluIFRocmVhZC53YWl0KCkgYXQgcjcxMDY1LgogICAgICAgICAgICAgICAgIGRlbGF5ID0gMC4wMDA1ICMgNTAwIHVzIC0+IGluaXRpYWwgZGVsYXkgb2YgMSBtcwogICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICAgICAgICAgIChwaWQsIHN0cykgPSBzZWxmLl90cnlfd2FpdChvcy5XTk9IQU5HKQotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcGlkID09IHNlbGYucGlkIG9yIHBpZCA9PSAwCi0gICAgICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGl0c3RhdHVzKHN0cykKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX3dhaXRwaWRfbG9jay5hY3F1aXJlKEZhbHNlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrICAjIEFub3RoZXIgdGhyZWFkIHdhaXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGlkLCBzdHMpID0gc2VsZi5fdHJ5X3dhaXQob3MuV05PSEFORykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcGlkID09IHNlbGYucGlkIG9yIHBpZCA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9oYW5kbGVfZXhpdHN0YXR1cyhzdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dhaXRwaWRfbG9jay5yZWxlYXNlKCkKICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nID0gc2VsZi5fcmVtYWluaW5nX3RpbWUoZW5kdGltZSkKICAgICAgICAgICAgICAgICAgICAgaWYgcmVtYWluaW5nIDw9IDA6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIHRpbWVvdXQpCkBAIC0xNTM1LDExICsxNTYzLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoZGVsYXkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHdoaWxlIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICAocGlkLCBzdHMpID0gc2VsZi5fdHJ5X3dhaXQoMCkKLSAgICAgICAgICAgICAgICAgICAgIyBDaGVjayB0aGUgcGlkIGFuZCBsb29wIGFzIHdhaXRwaWQgaGFzIGJlZW4ga25vd24gdG8gcmV0dXJuCi0gICAgICAgICAgICAgICAgICAgICMgMCBldmVuIHdpdGhvdXQgV05PSEFORyBpbiBvZGQgc2l0dWF0aW9ucy4gIGlzc3VlMTQzOTYuCi0gICAgICAgICAgICAgICAgICAgIGlmIHBpZCA9PSBzZWxmLnBpZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGl0c3RhdHVzKHN0cykKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLl93YWl0cGlkX2xvY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnJldHVybmNvZGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgICMgQW5vdGhlciB0aHJlYWQgd2FpdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgKHBpZCwgc3RzKSA9IHNlbGYuX3RyeV93YWl0KDApCisgICAgICAgICAgICAgICAgICAgICAgICAjIENoZWNrIHRoZSBwaWQgYW5kIGxvb3AgYXMgd2FpdHBpZCBoYXMgYmVlbiBrbm93biB0bworICAgICAgICAgICAgICAgICAgICAgICAgIyByZXR1cm4gMCBldmVuIHdpdGhvdXQgV05PSEFORyBpbiBvZGQgc2l0dWF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE0Mzk2LgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgcGlkID09IHNlbGYucGlkOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9leGl0c3RhdHVzKHN0cykKICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHVybmNvZGUKIAogCkBAIC0xNTUxLDEyICsxNTgzLDY4IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IGlucHV0OgogICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKIAotICAgICAgICAgICAgaWYgX2hhc19wb2xsOgotICAgICAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gc2VsZi5fY29tbXVuaWNhdGVfd2l0aF9wb2xsKGlucHV0LCBlbmR0aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLl9jb21tdW5pY2F0ZV93aXRoX3NlbGVjdChpbnB1dCwgZW5kdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdfdGltZW91dCkKKyAgICAgICAgICAgIHN0ZG91dCA9IE5vbmUKKyAgICAgICAgICAgIHN0ZGVyciA9IE5vbmUKKworICAgICAgICAgICAgIyBPbmx5IGNyZWF0ZSB0aGlzIG1hcHBpbmcgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlb2JqMm91dHB1dCA9IHt9CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3Rkb3V0XSA9IFtdCisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3RkZXJyXSA9IFtdCisKKyAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgorICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX2ZpbGVvYmoyb3V0cHV0W3NlbGYuc3Rkb3V0XQorICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6CisgICAgICAgICAgICAgICAgc3RkZXJyID0gc2VsZi5fZmlsZW9iajJvdXRwdXRbc2VsZi5zdGRlcnJdCisKKyAgICAgICAgICAgIHNlbGYuX3NhdmVfaW5wdXQoaW5wdXQpCisKKyAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0OgorICAgICAgICAgICAgICAgIGlucHV0X3ZpZXcgPSBtZW1vcnl2aWV3KHNlbGYuX2lucHV0KQorCisgICAgICAgICAgICB3aXRoIF9Qb3BlblNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgaW5wdXQ6CisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYuc3RkaW4sIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKKyAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZi5zdGRvdXQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLnN0ZGVyciwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgICAgICAgICB3aGlsZSBzZWxlY3Rvci5nZXRfbWFwKCk6CisgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKQorICAgICAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lIGFuZCB0aW1lb3V0IDwgMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQorCisgICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3RpbWVvdXQoZW5kdGltZSwgb3JpZ190aW1lb3V0KQorCisgICAgICAgICAgICAgICAgICAgICMgWFhYIFJld3JpdGUgdGhlc2UgdG8gdXNlIG5vbi1ibG9ja2luZyBJL08gb24gdGhlIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgIyBvYmplY3RzOyB0aGV5IGFyZSBubyBsb25nZXIgdXNpbmcgQyBzdGRpbyEKKworICAgICAgICAgICAgICAgICAgICBmb3Iga2V5LCBldmVudHMgaW4gcmVhZHk6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrZXkuZmlsZW9iaiBpcyBzZWxmLnN0ZGluOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rID0gaW5wdXRfdmlld1tzZWxmLl9pbnB1dF9vZmZzZXQgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKyBfUElQRV9CVUZdCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dF9vZmZzZXQgKz0gb3Mud3JpdGUoa2V5LmZkLCBjaHVuaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3IudW5yZWdpc3RlcihrZXkuZmlsZW9iaikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS5maWxlb2JqLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5faW5wdXRfb2Zmc2V0ID49IGxlbihzZWxmLl9pbnB1dCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci51bnJlZ2lzdGVyKGtleS5maWxlb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5LmZpbGVvYmouY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkuZmlsZW9iaiBpbiAoc2VsZi5zdGRvdXQsIHNlbGYuc3RkZXJyKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChrZXkuZmQsIDMyNzY4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci51bnJlZ2lzdGVyKGtleS5maWxlb2JqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkuZmlsZW9iai5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZW9iajJvdXRwdXRba2V5LmZpbGVvYmpdLmFwcGVuZChkYXRhKQogCiAgICAgICAgICAgICBzZWxmLndhaXQodGltZW91dD1zZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKSkKIApAQCAtMTU5MCwxNzQgKzE2NzgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXQgPSBzZWxmLl9pbnB1dC5lbmNvZGUoc2VsZi5zdGRpbi5lbmNvZGluZykKIAogCi0gICAgICAgIGRlZiBfY29tbXVuaWNhdGVfd2l0aF9wb2xsKHNlbGYsIGlucHV0LCBlbmR0aW1lLCBvcmlnX3RpbWVvdXQpOgotICAgICAgICAgICAgc3Rkb3V0ID0gTm9uZSAjIFJldHVybgotICAgICAgICAgICAgc3RkZXJyID0gTm9uZSAjIFJldHVybgotCi0gICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGUgPSB7fQotCi0gICAgICAgICAgICBwb2xsZXIgPSBzZWxlY3QucG9sbCgpCi0gICAgICAgICAgICBkZWYgcmVnaXN0ZXJfYW5kX2FwcGVuZChmaWxlX29iaiwgZXZlbnRtYXNrKToKLSAgICAgICAgICAgICAgICBwb2xsZXIucmVnaXN0ZXIoZmlsZV9vYmouZmlsZW5vKCksIGV2ZW50bWFzaykKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJmaWxlW2ZpbGVfb2JqLmZpbGVubygpXSA9IGZpbGVfb2JqCi0KLSAgICAgICAgICAgIGRlZiBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpOgotICAgICAgICAgICAgICAgIHBvbGxlci51bnJlZ2lzdGVyKGZkKQotICAgICAgICAgICAgICAgIHNlbGYuX2ZkMmZpbGVbZmRdLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJmaWxlLnBvcChmZCkKLQotICAgICAgICAgICAgaWYgc2VsZi5zdGRpbiBhbmQgaW5wdXQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJfYW5kX2FwcGVuZChzZWxmLnN0ZGluLCBzZWxlY3QuUE9MTE9VVCkKLQotICAgICAgICAgICAgIyBPbmx5IGNyZWF0ZSB0aGlzIG1hcHBpbmcgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5LgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICBzZWxmLl9mZDJvdXRwdXQgPSB7fQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9mZDJvdXRwdXRbc2VsZi5zdGRvdXQuZmlsZW5vKCldID0gW10KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVycjoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmQyb3V0cHV0W3NlbGYuc3RkZXJyLmZpbGVubygpXSA9IFtdCi0KLSAgICAgICAgICAgIHNlbGVjdF9QT0xMSU5fUE9MTFBSSSA9IHNlbGVjdC5QT0xMSU4gfCBzZWxlY3QuUE9MTFBSSQotICAgICAgICAgICAgaWYgc2VsZi5zdGRvdXQ6Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXJfYW5kX2FwcGVuZChzZWxmLnN0ZG91dCwgc2VsZWN0X1BPTExJTl9QT0xMUFJJKQotICAgICAgICAgICAgICAgIHN0ZG91dCA9IHNlbGYuX2ZkMm91dHB1dFtzZWxmLnN0ZG91dC5maWxlbm8oKV0KLSAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgotICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FuZF9hcHBlbmQoc2VsZi5zdGRlcnIsIHNlbGVjdF9QT0xMSU5fUE9MTFBSSSkKLSAgICAgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl9mZDJvdXRwdXRbc2VsZi5zdGRlcnIuZmlsZW5vKCldCi0KLSAgICAgICAgICAgIHNlbGYuX3NhdmVfaW5wdXQoaW5wdXQpCi0KLSAgICAgICAgICAgIGlmIHNlbGYuX2lucHV0OgotICAgICAgICAgICAgICAgIGlucHV0X3ZpZXcgPSBtZW1vcnl2aWV3KHNlbGYuX2lucHV0KQotCi0gICAgICAgICAgICB3aGlsZSBzZWxmLl9mZDJmaWxlOgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBzZWxmLl9yZW1haW5pbmdfdGltZShlbmR0aW1lKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmUgYW5kIHRpbWVvdXQgPCAwOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHJlYWR5ID0gcG9sbGVyLnBvbGwodGltZW91dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfdGltZW91dChlbmR0aW1lLCBvcmlnX3RpbWVvdXQpCi0KLSAgICAgICAgICAgICAgICAjIFhYWCBSZXdyaXRlIHRoZXNlIHRvIHVzZSBub24tYmxvY2tpbmcgSS9PIG9uIHRoZQotICAgICAgICAgICAgICAgICMgZmlsZSBvYmplY3RzOyB0aGV5IGFyZSBubyBsb25nZXIgdXNpbmcgQyBzdGRpbyEKLQotICAgICAgICAgICAgICAgIGZvciBmZCwgbW9kZSBpbiByZWFkeToKLSAgICAgICAgICAgICAgICAgICAgaWYgbW9kZSAmIHNlbGVjdC5QT0xMT1VUOgotICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmsgPSBpbnB1dF92aWV3W3NlbGYuX2lucHV0X29mZnNldCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICsgX1BJUEVfQlVGXQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArPSBvcy53cml0ZShmZCwgY2h1bmspCi0gICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBJUEU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX3VucmVnaXN0ZXJfYW5kX3JlbW92ZShmZCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnB1dF9vZmZzZXQgPj0gbGVuKHNlbGYuX2lucHV0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfdW5yZWdpc3Rlcl9hbmRfcmVtb3ZlKGZkKQotICAgICAgICAgICAgICAgICAgICBlbGlmIG1vZGUgJiBzZWxlY3RfUE9MTElOX1BPTExQUkk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gb3MucmVhZChmZCwgMzI3NjgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgZGF0YToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9mZDJvdXRwdXRbZmRdLmFwcGVuZChkYXRhKQotICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgIyBJZ25vcmUgaGFuZyB1cCBvciBlcnJvcnMuCi0gICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV91bnJlZ2lzdGVyX2FuZF9yZW1vdmUoZmQpCi0KLSAgICAgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCi0KLQotICAgICAgICBkZWYgX2NvbW11bmljYXRlX3dpdGhfc2VsZWN0KHNlbGYsIGlucHV0LCBlbmR0aW1lLCBvcmlnX3RpbWVvdXQpOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NvbW11bmljYXRpb25fc3RhcnRlZDoKLSAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldCA9IFtdCi0gICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2V0ID0gW10KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGFuZCBpbnB1dDoKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfc2V0LmFwcGVuZChzZWxmLnN0ZGluKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuc3Rkb3V0OgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yZWFkX3NldC5hcHBlbmQoc2VsZi5zdGRvdXQpCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5zdGRlcnI6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWRfc2V0LmFwcGVuZChzZWxmLnN0ZGVycikKLQotICAgICAgICAgICAgc2VsZi5fc2F2ZV9pbnB1dChpbnB1dCkKLQotICAgICAgICAgICAgc3Rkb3V0ID0gTm9uZSAjIFJldHVybgotICAgICAgICAgICAgc3RkZXJyID0gTm9uZSAjIFJldHVybgotCi0gICAgICAgICAgICBpZiBzZWxmLnN0ZG91dDoKLSAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY29tbXVuaWNhdGlvbl9zdGFydGVkOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdGRvdXRfYnVmZiA9IFtdCi0gICAgICAgICAgICAgICAgc3Rkb3V0ID0gc2VsZi5fc3Rkb3V0X2J1ZmYKLSAgICAgICAgICAgIGlmIHNlbGYuc3RkZXJyOgotICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9jb21tdW5pY2F0aW9uX3N0YXJ0ZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0ZGVycl9idWZmID0gW10KLSAgICAgICAgICAgICAgICBzdGRlcnIgPSBzZWxmLl9zdGRlcnJfYnVmZgotCi0gICAgICAgICAgICB3aGlsZSBzZWxmLl9yZWFkX3NldCBvciBzZWxmLl93cml0ZV9zZXQ6Ci0gICAgICAgICAgICAgICAgdGltZW91dCA9IHNlbGYuX3JlbWFpbmluZ190aW1lKGVuZHRpbWUpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZSBhbmQgdGltZW91dCA8IDA6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFeHBpcmVkKHNlbGYuYXJncywgb3JpZ190aW1lb3V0KQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgKHJsaXN0LCB3bGlzdCwgeGxpc3QpID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0LnNlbGVjdChzZWxmLl9yZWFkX3NldCwgc2VsZi5fd3JpdGVfc2V0LCBbXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dCkKLSAgICAgICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGUuYXJnc1swXSA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIHJhaXNlCi0KLSAgICAgICAgICAgICAgICAjIEFjY29yZGluZyB0byB0aGUgZG9jcywgcmV0dXJuaW5nIHRocmVlIGVtcHR5IGxpc3RzIGluZGljYXRlcwotICAgICAgICAgICAgICAgICMgdGhhdCB0aGUgdGltZW91dCBleHBpcmVkLgotICAgICAgICAgICAgICAgIGlmIG5vdCAocmxpc3Qgb3Igd2xpc3Qgb3IgeGxpc3QpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUaW1lb3V0RXhwaXJlZChzZWxmLmFyZ3MsIG9yaWdfdGltZW91dCkKLSAgICAgICAgICAgICAgICAjIFdlIGFsc28gY2hlY2sgd2hhdCB0aW1lIGl0IGlzIG91cnNlbHZlcyBmb3IgZ29vZCBtZWFzdXJlLgotICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3RpbWVvdXQoZW5kdGltZSwgb3JpZ190aW1lb3V0KQotCi0gICAgICAgICAgICAgICAgIyBYWFggUmV3cml0ZSB0aGVzZSB0byB1c2Ugbm9uLWJsb2NraW5nIEkvTyBvbiB0aGUKLSAgICAgICAgICAgICAgICAjIGZpbGUgb2JqZWN0czsgdGhleSBhcmUgbm8gbG9uZ2VyIHVzaW5nIEMgc3RkaW8hCi0KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGluIGluIHdsaXN0OgotICAgICAgICAgICAgICAgICAgICBjaHVuayA9IHNlbGYuX2lucHV0W3NlbGYuX2lucHV0X29mZnNldCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5wdXRfb2Zmc2V0ICsgX1BJUEVfQlVGXQotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBieXRlc193cml0dGVuID0gb3Mud3JpdGUoc2VsZi5zdGRpbi5maWxlbm8oKSwgY2h1bmspCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVQSVBFOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RkaW4uY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3NldC5yZW1vdmUoc2VsZi5zdGRpbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0X29mZnNldCArPSBieXRlc193cml0dGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbnB1dF9vZmZzZXQgPj0gbGVuKHNlbGYuX2lucHV0KToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0ZGluLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl93cml0ZV9zZXQucmVtb3ZlKHNlbGYuc3RkaW4pCi0KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZG91dCBpbiBybGlzdDoKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoc2VsZi5zdGRvdXQuZmlsZW5vKCksIDEwMjQpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRvdXQuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQucmVtb3ZlKHNlbGYuc3Rkb3V0KQotICAgICAgICAgICAgICAgICAgICBzdGRvdXQuYXBwZW5kKGRhdGEpCi0KLSAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZGVyciBpbiBybGlzdDoKLSAgICAgICAgICAgICAgICAgICAgZGF0YSA9IG9zLnJlYWQoc2VsZi5zdGRlcnIuZmlsZW5vKCksIDEwMjQpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGRlcnIuY2xvc2UoKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcmVhZF9zZXQucmVtb3ZlKHNlbGYuc3RkZXJyKQotICAgICAgICAgICAgICAgICAgICBzdGRlcnIuYXBwZW5kKGRhdGEpCi0KLSAgICAgICAgICAgIHJldHVybiAoc3Rkb3V0LCBzdGRlcnIpCi0KLQogICAgICAgICBkZWYgc2VuZF9zaWduYWwoc2VsZiwgc2lnKToKLSAgICAgICAgICAgICIiIlNlbmQgYSBzaWduYWwgdG8gdGhlIHByb2Nlc3MKLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgb3Mua2lsbChzZWxmLnBpZCwgc2lnKQorICAgICAgICAgICAgIiIiU2VuZCBhIHNpZ25hbCB0byB0aGUgcHJvY2Vzcy4iIiIKKyAgICAgICAgICAgICMgU2tpcCBzaWduYWxsaW5nIGEgcHJvY2VzcyB0aGF0IHdlIGtub3cgaGFzIGFscmVhZHkgZGllZC4KKyAgICAgICAgICAgIGlmIHNlbGYucmV0dXJuY29kZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIG9zLmtpbGwoc2VsZi5waWQsIHNpZykKIAogICAgICAgICBkZWYgdGVybWluYXRlKHNlbGYpOgogICAgICAgICAgICAgIiIiVGVybWluYXRlIHRoZSBwcm9jZXNzIHdpdGggU0lHVEVSTQpkaWZmIC0tZ2l0IGEvTGliL3N1bmF1LnB5IGIvTGliL3N1bmF1LnB5CmluZGV4IDE1ZjdiMDMuLjA0NzNlOWUgMTAwNjQ0Ci0tLSBhL0xpYi9zdW5hdS5weQorKysgYi9MaWIvc3VuYXUucHkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICAgICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIG9yICdVTEFXJykKICAgICAgICAgZ2V0Y29tcG5hbWUoKSAgIC0tIHJldHVybnMgaHVtYW4tcmVhZGFibGUgdmVyc2lvbiBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Npb24gdHlwZSAoJ25vdCBjb21wcmVzc2VkJyBtYXRjaGVzICdOT05FJykKLSAgICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKKyAgICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSBuYW1lZHR1cGxlIGNvbnNpc3Rpbmcgb2YgYWxsIG9mIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJvdmUgaW4gdGhlIGFib3ZlIG9yZGVyCiAgICAgICAgIGdldG1hcmtlcnMoKSAgICAtLSByZXR1cm5zIE5vbmUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWZjIG1vZHVsZSkKQEAgLTk3LDEyICs5NywxNyBAQAogYmUgcGF0Y2hlZCB1cC4KIEl0IGlzIGJlc3QgdG8gZmlyc3Qgc2V0IGFsbCBwYXJhbWV0ZXJzLCBwZXJoYXBzIHBvc3NpYmx5IHRoZQogY29tcHJlc3Npb24gdHlwZSwgYW5kIHRoZW4gd3JpdGUgYXVkaW8gZnJhbWVzIHVzaW5nIHdyaXRlZnJhbWVzcmF3LgotV2hlbiBhbGwgZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuLCBlaXRoZXIgY2FsbCB3cml0ZWZyYW1lcygnJykgb3IKK1doZW4gYWxsIGZyYW1lcyBoYXZlIGJlZW4gd3JpdHRlbiwgZWl0aGVyIGNhbGwgd3JpdGVmcmFtZXMoYicnKSBvcgogY2xvc2UoKSB0byBwYXRjaCB1cCB0aGUgc2l6ZXMgaW4gdGhlIGhlYWRlci4KIFRoZSBjbG9zZSgpIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuIHRoZSBjbGFzcyBpbnN0YW5jZQogaXMgZGVzdHJveWVkLgogIiIiCiAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5hbWVkdHVwbGUKKworX3N1bmF1X3BhcmFtcyA9IG5hbWVkdHVwbGUoJ19zdW5hdV9wYXJhbXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQorCiAjIGZyb20gPG11bHRpbWVkaWEvYXVkaW9fZmlsZWhkci5oPgogQVVESU9fRklMRV9NQUdJQyA9IDB4MmU3MzZlNjQKIEFVRElPX0ZJTEVfRU5DT0RJTkdfTVVMQVdfOCA9IDEKQEAgLTE2Myw2ICsxNjgsMTIgQEAKICAgICAgICAgaWYgc2VsZi5fZmlsZToKICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuY2xvc2UoKQorCiAgICAgZGVmIGluaXRmcChzZWxmLCBmaWxlKToKICAgICAgICAgc2VsZi5fZmlsZSA9IGZpbGUKICAgICAgICAgc2VsZi5fc291bmRwb3MgPSAwCkBAIC0xOTksMTIgKzIxMCw5IEBACiAgICAgICAgIHNlbGYuX2ZyYW1lc2l6ZSA9IHNlbGYuX2ZyYW1lc2l6ZSAqIHNlbGYuX25jaGFubmVscwogICAgICAgICBpZiBzZWxmLl9oZHJfc2l6ZSA+IDI0OgogICAgICAgICAgICAgc2VsZi5faW5mbyA9IGZpbGUucmVhZChzZWxmLl9oZHJfc2l6ZSAtIDI0KQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKHNlbGYuX2luZm8pKToKLSAgICAgICAgICAgICAgICBpZiBzZWxmLl9pbmZvW2ldID09IGInXDAnOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbmZvID0gc2VsZi5faW5mb1s6aV0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHNlbGYuX2luZm8sIF8sIF8gPSBzZWxmLl9pbmZvLnBhcnRpdGlvbihiJ1wwJykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuX2luZm8gPSAnJworICAgICAgICAgICAgc2VsZi5faW5mbyA9IGInJwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9kYXRhX3BvcyA9IGZpbGUudGVsbCgpCiAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgpAQCAtMjQ2LDkgKzI1NCw5IEBACiAgICAgICAgICAgICByZXR1cm4gJ25vdCBjb21wcmVzc2VkJwogCiAgICAgZGVmIGdldHBhcmFtcyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZ2V0bmZyYW1lcygpLCBcCi0gICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKQorICAgICAgICByZXR1cm4gX3N1bmF1X3BhcmFtcyhzZWxmLmdldG5jaGFubmVscygpLCBzZWxmLmdldHNhbXB3aWR0aCgpLAorICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGNvbXB0eXBlKCksIHNlbGYuZ2V0Y29tcG5hbWUoKSkKIAogICAgIGRlZiBnZXRtYXJrZXJzKHNlbGYpOgogICAgICAgICByZXR1cm4gTm9uZQpAQCAtMjg3LDkgKzI5NSwxMSBAQAogICAgICAgICBzZWxmLl9zb3VuZHBvcyA9IHBvcwogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9vcGVuZWQgYW5kIHNlbGYuX2ZpbGU6Ci0gICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKLSAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKKyAgICAgICAgZmlsZSA9IHNlbGYuX2ZpbGUKKyAgICAgICAgaWYgZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBOb25lCisgICAgICAgICAgICBpZiBzZWxmLl9vcGVuZWQ6CisgICAgICAgICAgICAgICAgZmlsZS5jbG9zZSgpCiAKIGNsYXNzIEF1X3dyaXRlOgogCkBAIC0zMDcsNiArMzE3LDEyIEBACiAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKIAorICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgIGRlZiBpbml0ZnAoc2VsZiwgZmlsZSk6CiAgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCiAgICAgICAgIHNlbGYuX2ZyYW1lcmF0ZSA9IDAKQEAgLTMzNSw3ICszNTEsNyBAQAogICAgIGRlZiBzZXRzYW1wd2lkdGgoc2VsZiwgc2FtcHdpZHRoKToKICAgICAgICAgaWYgc2VsZi5fbmZyYW1lc3dyaXR0ZW46CiAgICAgICAgICAgICByYWlzZSBFcnJvcignY2Fubm90IGNoYW5nZSBwYXJhbWV0ZXJzIGFmdGVyIHN0YXJ0aW5nIHRvIHdyaXRlJykKLSAgICAgICAgaWYgc2FtcHdpZHRoIG5vdCBpbiAoMSwgMiwgNCk6CisgICAgICAgIGlmIHNhbXB3aWR0aCBub3QgaW4gKDEsIDIsIDMsIDQpOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoJ2JhZCBzYW1wbGUgd2lkdGgnKQogICAgICAgICBzZWxmLl9zYW1wd2lkdGggPSBzYW1wd2lkdGgKIApAQCAtMzkwLDE0ICs0MDYsMTYgQEAKICAgICAgICAgc2VsZi5zZXRjb21wdHlwZShjb21wdHlwZSwgY29tcG5hbWUpCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpCisgICAgICAgIHJldHVybiBfc3VuYXVfcGFyYW1zKHNlbGYuZ2V0bmNoYW5uZWxzKCksIHNlbGYuZ2V0c2FtcHdpZHRoKCksCisgICAgICAgICAgICAgICAgICBzZWxmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmdldG5mcmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIHRlbGwoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9uZnJhbWVzd3JpdHRlbgogCiAgICAgZGVmIHdyaXRlZnJhbWVzcmF3KHNlbGYsIGRhdGEpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkYXRhLCAoYnl0ZXMsIGJ5dGVhcnJheSkpOgorICAgICAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoZGF0YSkuY2FzdCgnQicpCiAgICAgICAgIHNlbGYuX2Vuc3VyZV9oZWFkZXJfd3JpdHRlbigpCiAgICAgICAgIGlmIHNlbGYuX2NvbXB0eXBlID09ICdVTEFXJzoKICAgICAgICAgICAgIGltcG9ydCBhdWRpb29wCkBAIC00MjEsMTAgKzQzOSwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGF0YWxlbmd0aCAhPSBzZWxmLl9kYXRhd3JpdHRlbjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGF0Y2hoZWFkZXIoKQogICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuZmx1c2goKQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX29wZW5lZCBhbmQgc2VsZi5fZmlsZToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZS5jbG9zZSgpCiAgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9maWxlCiAgICAgICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9vcGVuZWQ6CisgICAgICAgICAgICAgICAgICAgIGZpbGUuY2xvc2UoKQogCiAgICAgIwogICAgICMgcHJpdmF0ZSBtZXRob2RzCkBAIC00NDgsNiArNDY3LDkgQEAKICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2FtcHdpZHRoID09IDI6CiAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBBVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8xNgogICAgICAgICAgICAgICAgIHNlbGYuX2ZyYW1lc2l6ZSA9IDIKKyAgICAgICAgICAgIGVsaWYgc2VsZi5fc2FtcHdpZHRoID09IDM6CisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBBVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8yNAorICAgICAgICAgICAgICAgIHNlbGYuX2ZyYW1lc2l6ZSA9IDMKICAgICAgICAgICAgIGVsaWYgc2VsZi5fc2FtcHdpZHRoID09IDQ6CiAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBBVURJT19GSUxFX0VOQ09ESU5HX0xJTkVBUl8zMgogICAgICAgICAgICAgICAgIHNlbGYuX2ZyYW1lc2l6ZSA9IDQKZGlmZiAtLWdpdCBhL0xpYi9zeW1ib2wucHkgYi9MaWIvc3ltYm9sLnB5CmluZGV4IDM0MTQzYjUuLjVjZjRhNjUgMTAwNzU1Ci0tLSBhL0xpYi9zeW1ib2wucHkKKysrIGIvTGliL3N5bWJvbC5weQpAQCAtMTAwLDcgKzEwMCw3IEBACiAgICAgICAgIHN5bV9uYW1lW192YWx1ZV0gPSBfbmFtZQogCiAKLWRlZiBtYWluKCk6CitkZWYgX21haW4oKToKICAgICBpbXBvcnQgc3lzCiAgICAgaW1wb3J0IHRva2VuCiAgICAgaWYgbGVuKHN5cy5hcmd2KSA9PSAxOgpAQCAtMTA4LDQgKzEwOCw0IEBACiAgICAgdG9rZW4uX21haW4oKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIG1haW4oKQorICAgIF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi9zeW10YWJsZS5weSBiL0xpYi9zeW10YWJsZS5weQppbmRleCBiYjI3MTk2Li5lMjMzMTNiIDEwMDY0NAotLS0gYS9MaWIvc3ltdGFibGUucHkKKysrIGIvTGliL3N5bXRhYmxlLnB5CkBAIC0yMzIsNyArMjMyLDggQEAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBpbXBvcnQgb3MsIHN5cwotICAgIHNyYyA9IG9wZW4oc3lzLmFyZ3ZbMF0pLnJlYWQoKQorICAgIHdpdGggb3BlbihzeXMuYXJndlswXSkgYXMgZjoKKyAgICAgICAgc3JjID0gZi5yZWFkKCkKICAgICBtb2QgPSBzeW10YWJsZShzcmMsIG9zLnBhdGguc3BsaXQoc3lzLmFyZ3ZbMF0pWzFdLCAiZXhlYyIpCiAgICAgZm9yIGlkZW50IGluIG1vZC5nZXRfaWRlbnRpZmllcnMoKToKICAgICAgICAgaW5mbyA9IG1vZC5sb29rdXAoaWRlbnQpCmRpZmYgLS1naXQgYS9MaWIvc3lzY29uZmlnLnB5IGIvTGliL3N5c2NvbmZpZy5weQppbmRleCAyYTIxNjBjLi5kYmY3NzY3IDEwMDY0NAotLS0gYS9MaWIvc3lzY29uZmlnLnB5CisrKyBiL0xpYi9zeXNjb25maWcucHkKQEAgLTEsNyArMSw2IEBACiAiIiJBY2Nlc3MgdG8gUHl0aG9uJ3MgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbi4iIiIKIAogaW1wb3J0IG9zCi1pbXBvcnQgcmUKIGltcG9ydCBzeXMKIGZyb20gb3MucGF0aCBpbXBvcnQgcGFyZGlyLCByZWFscGF0aAogCkBAIC01MiwyNSArNTEsNiBAQAogICAgICAgICAnc2NyaXB0cyc6ICd7YmFzZX0vU2NyaXB0cycsCiAgICAgICAgICdkYXRhJzogJ3tiYXNlfScsCiAgICAgICAgIH0sCi0gICAgJ29zMic6IHsKLSAgICAgICAgJ3N0ZGxpYic6ICd7aW5zdGFsbGVkX2Jhc2V9L0xpYicsCi0gICAgICAgICdwbGF0c3RkbGliJzogJ3tiYXNlfS9MaWInLAotICAgICAgICAncHVyZWxpYic6ICd7YmFzZX0vTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAncGxhdGxpYic6ICd7YmFzZX0vTGliL3NpdGUtcGFja2FnZXMnLAotICAgICAgICAnaW5jbHVkZSc6ICd7aW5zdGFsbGVkX2Jhc2V9L0luY2x1ZGUnLAotICAgICAgICAncGxhdGluY2x1ZGUnOiAne2luc3RhbGxlZF9iYXNlfS9JbmNsdWRlJywKLSAgICAgICAgJ3NjcmlwdHMnOiAne2Jhc2V9L1NjcmlwdHMnLAotICAgICAgICAnZGF0YSc6ICd7YmFzZX0nLAotICAgICAgICB9LAotICAgICdvczJfaG9tZSc6IHsKLSAgICAgICAgJ3N0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAotICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0nLAotICAgICAgICAncHVyZWxpYic6ICd7dXNlcmJhc2V9L2xpYi9weXRob257cHlfdmVyc2lvbl9zaG9ydH0vc2l0ZS1wYWNrYWdlcycsCi0gICAgICAgICdwbGF0bGliJzogJ3t1c2VyYmFzZX0vbGliL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fS9zaXRlLXBhY2thZ2VzJywKLSAgICAgICAgJ2luY2x1ZGUnOiAne3VzZXJiYXNlfS9pbmNsdWRlL3B5dGhvbntweV92ZXJzaW9uX3Nob3J0fScsCi0gICAgICAgICdzY3JpcHRzJzogJ3t1c2VyYmFzZX0vYmluJywKLSAgICAgICAgJ2RhdGEnOiAne3VzZXJiYXNlfScsCi0gICAgICAgIH0sCiAgICAgJ250X3VzZXInOiB7CiAgICAgICAgICdzdGRsaWInOiAne3VzZXJiYXNlfS9QeXRob257cHlfdmVyc2lvbl9ub2RvdH0nLAogICAgICAgICAncGxhdHN0ZGxpYic6ICd7dXNlcmJhc2V9L1B5dGhvbntweV92ZXJzaW9uX25vZG90fScsCkBAIC0yMTAsNyArMTkwLDYgQEAKICAgICBkZWYgam9pbnVzZXIoKmFyZ3MpOgogICAgICAgICByZXR1cm4gb3MucGF0aC5leHBhbmR1c2VyKG9zLnBhdGguam9pbigqYXJncykpCiAKLSAgICAjIHdoYXQgYWJvdXQgJ29zMmVteCcsICdyaXNjb3MnID8KICAgICBpZiBvcy5uYW1lID09ICJudCI6CiAgICAgICAgIGJhc2UgPSBvcy5lbnZpcm9uLmdldCgiQVBQREFUQSIpIG9yICJ+IgogICAgICAgICBpZiBlbnZfYmFzZToKQEAgLTI0Miw2ICsyMjEsNyBAQAogICAgICIiIgogICAgICMgUmVnZXhlcyBuZWVkZWQgZm9yIHBhcnNpbmcgTWFrZWZpbGUgKGFuZCBzaW1pbGFyIHN5bnRheGVzLAogICAgICMgbGlrZSBvbGQtc3R5bGUgU2V0dXAgZmlsZXMpLgorICAgIGltcG9ydCByZQogICAgIF92YXJpYWJsZV9yeCA9IHJlLmNvbXBpbGUoIihbYS16QS1aXVthLXpBLVowLTlfXSspXHMqPVxzKiguKikiKQogICAgIF9maW5kdmFyMV9yeCA9IHJlLmNvbXBpbGUociJcJFwoKFtBLVphLXpdW0EtWmEtejAtOV9dKilcKSIpCiAgICAgX2ZpbmR2YXIyX3J4ID0gcmUuY29tcGlsZShyIlwkeyhbQS1aYS16XVtBLVphLXowLTlfXSopfSIpCkBAIC0zNjksMjEgKzM0OSwyMSBAQAogICAgIG1ha2VmaWxlID0gZ2V0X21ha2VmaWxlX2ZpbGVuYW1lKCkKICAgICB0cnk6CiAgICAgICAgIF9wYXJzZV9tYWtlZmlsZShtYWtlZmlsZSwgdmFycykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgIG1zZyA9ICJpbnZhbGlkIFB5dGhvbiBpbnN0YWxsYXRpb246IHVuYWJsZSB0byBvcGVuICVzIiAlIG1ha2VmaWxlCiAgICAgICAgIGlmIGhhc2F0dHIoZSwgInN0cmVycm9yIik6CiAgICAgICAgICAgICBtc2cgPSBtc2cgKyAiICglcykiICUgZS5zdHJlcnJvcgotICAgICAgICByYWlzZSBJT0Vycm9yKG1zZykKKyAgICAgICAgcmFpc2UgT1NFcnJvcihtc2cpCiAgICAgIyBsb2FkIHRoZSBpbnN0YWxsZWQgcHljb25maWcuaDoKICAgICBjb25maWdfaCA9IGdldF9jb25maWdfaF9maWxlbmFtZSgpCiAgICAgdHJ5OgogICAgICAgICB3aXRoIG9wZW4oY29uZmlnX2gpIGFzIGY6CiAgICAgICAgICAgICBwYXJzZV9jb25maWdfaChmLCB2YXJzKQotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgbXNnID0gImludmFsaWQgUHl0aG9uIGluc3RhbGxhdGlvbjogdW5hYmxlIHRvIG9wZW4gJXMiICUgY29uZmlnX2gKICAgICAgICAgaWYgaGFzYXR0cihlLCAic3RyZXJyb3IiKToKICAgICAgICAgICAgIG1zZyA9IG1zZyArICIgKCVzKSIgJSBlLnN0cmVycm9yCi0gICAgICAgIHJhaXNlIElPRXJyb3IobXNnKQorICAgICAgICByYWlzZSBPU0Vycm9yKG1zZykKICAgICAjIE9uIEFJWCwgdGhlcmUgYXJlIHdyb25nIHBhdGhzIHRvIHRoZSBsaW5rZXIgc2NyaXB0cyBpbiB0aGUgTWFrZWZpbGUKICAgICAjIC0tIHRoZXNlIHBhdGhzIGFyZSByZWxhdGl2ZSB0byB0aGUgUHl0aG9uIHNvdXJjZSwgYnV0IHdoZW4gaW5zdGFsbGVkCiAgICAgIyB0aGUgc2NyaXB0cyBhcmUgaW4gYW5vdGhlciBkaXJlY3RvcnkuCkBAIC00MDMsOCArMzgzLDggQEAKICAgICAjIGdldF9wbGF0Zm9ybSgpIHN1Y2NlZWRzLgogICAgIG5hbWUgPSAnX3N5c2NvbmZpZ2RhdGEnCiAgICAgaWYgJ2RhcndpbicgaW4gc3lzLnBsYXRmb3JtOgotICAgICAgICBpbXBvcnQgaW1wCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKG5hbWUpCisgICAgICAgIGltcG9ydCB0eXBlcworICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgIG1vZHVsZS5idWlsZF90aW1lX3ZhcnMgPSB2YXJzCiAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCiAKQEAgLTQzNiw3ICs0MTYsNiBAQAogICAgIHZhcnNbJ0xJQkRFU1QnXSA9IGdldF9wYXRoKCdzdGRsaWInKQogICAgIHZhcnNbJ0JJTkxJQkRFU1QnXSA9IGdldF9wYXRoKCdwbGF0c3RkbGliJykKICAgICB2YXJzWydJTkNMVURFUFknXSA9IGdldF9wYXRoKCdpbmNsdWRlJykKLSAgICB2YXJzWydTTyddID0gJy5weWQnCiAgICAgdmFyc1snRVhUX1NVRkZJWCddID0gJy5weWQnCiAgICAgdmFyc1snRVhFJ10gPSAnLmV4ZScKICAgICB2YXJzWydWRVJTSU9OJ10gPSBfUFlfVkVSU0lPTl9TSE9SVF9OT19ET1QKQEAgLTQ1Niw2ICs0MzUsNyBAQAogICAgICIiIgogICAgIGlmIHZhcnMgaXMgTm9uZToKICAgICAgICAgdmFycyA9IHt9CisgICAgaW1wb3J0IHJlCiAgICAgZGVmaW5lX3J4ID0gcmUuY29tcGlsZSgiI2RlZmluZSAoW0EtWl1bQS1aYS16MC05X10rKSAoLiopXG4iKQogICAgIHVuZGVmX3J4ID0gcmUuY29tcGlsZSgiL1sqXSAjdW5kZWYgKFtBLVpdW0EtWmEtejAtOV9dKykgWypdL1xuIikKIApAQCAtNTUyLDEwICs1MzIsMTQgQEAKICAgICAgICAgICAgICMgc3lzLmFiaWZsYWdzIG1heSBub3QgYmUgZGVmaW5lZCBvbiBhbGwgcGxhdGZvcm1zLgogICAgICAgICAgICAgX0NPTkZJR19WQVJTWydhYmlmbGFncyddID0gJycKIAotICAgICAgICBpZiBvcy5uYW1lIGluICgnbnQnLCAnb3MyJyk6CisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKICAgICAgICAgICAgIF9pbml0X25vbl9wb3NpeChfQ09ORklHX1ZBUlMpCiAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ3Bvc2l4JzoKICAgICAgICAgICAgIF9pbml0X3Bvc2l4KF9DT05GSUdfVkFSUykKKyAgICAgICAgIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgc2VlIGlzc3VlMTk1NTUKKyAgICAgICAgU08gPSBfQ09ORklHX1ZBUlMuZ2V0KCdFWFRfU1VGRklYJykKKyAgICAgICAgaWYgU08gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBfQ09ORklHX1ZBUlNbJ1NPJ10gPSBTTwogICAgICAgICAjIFNldHRpbmcgJ3VzZXJiYXNlJyBpcyBkb25lIGJlbG93IHRoZSBjYWxsIHRvIHRoZQogICAgICAgICAjIGluaXQgZnVuY3Rpb24gdG8gZW5hYmxlIHVzaW5nICdnZXRfY29uZmlnX3ZhcicgaW4KICAgICAgICAgIyB0aGUgaW5pdC1mdW5jdGlvbi4KQEAgLTU5OSw2ICs1ODMsOSBAQAogCiAgICAgRXF1aXZhbGVudCB0byBnZXRfY29uZmlnX3ZhcnMoKS5nZXQobmFtZSkKICAgICAiIiIKKyAgICBpZiBuYW1lID09ICdTTyc6CisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKCdTTyBpcyBkZXByZWNhdGVkLCB1c2UgRVhUX1NVRkZJWCcsIERlcHJlY2F0aW9uV2FybmluZywgMikKICAgICByZXR1cm4gZ2V0X2NvbmZpZ192YXJzKCkuZ2V0KG5hbWUpCiAKIApAQCAtNjc5LDYgKzY2Niw3IEBACiAgICAgICAgIHJldHVybiAiJXMtJXMuJXMiICUgKG9zbmFtZSwgdmVyc2lvbiwgcmVsZWFzZSkKICAgICBlbGlmIG9zbmFtZVs6Nl0gPT0gImN5Z3dpbiI6CiAgICAgICAgIG9zbmFtZSA9ICJjeWd3aW4iCisgICAgICAgIGltcG9ydCByZQogICAgICAgICByZWxfcmUgPSByZS5jb21waWxlKHInW1xkLl0rJykKICAgICAgICAgbSA9IHJlbF9yZS5tYXRjaChyZWxlYXNlKQogICAgICAgICBpZiBtOgpkaWZmIC0tZ2l0IGEvTGliL3RhYm5hbm55LnB5IGIvTGliL3RhYm5hbm55LnB5CmluZGV4IDViOWI0NDQuLjQ2ZTBmNTYgMTAwNzU1Ci0tLSBhL0xpYi90YWJuYW5ueS5weQorKysgYi9MaWIvdGFibmFubnkucHkKQEAgLTk1LDcgKzk1LDcgQEAKIAogICAgIHRyeToKICAgICAgICAgZiA9IHRva2VuaXplLm9wZW4oZmlsZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnJwcmludCgiJXI6IEkvTyBFcnJvcjogJXMiICUgKGZpbGUsIG1zZykpCiAgICAgICAgIHJldHVybgogCmRpZmYgLS1naXQgYS9MaWIvdGFyZmlsZS5weSBiL0xpYi90YXJmaWxlLnB5CmluZGV4IGY2ZDdmNzkuLjVmMWE5NzkgMTAwNzU1Ci0tLSBhL0xpYi90YXJmaWxlLnB5CisrKyBiL0xpYi90YXJmaWxlLnB5CkBAIC0zOCw2ICszOCw3IEBACiAjLS0tLS0tLS0tCiAjIEltcG9ydHMKICMtLS0tLS0tLS0KK2Zyb20gYnVpbHRpbnMgaW1wb3J0IG9wZW4gYXMgYmx0bl9vcGVuCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIGltcG9ydCBpbwpAQCAtNTYsMTcgKzU3LDE1IEBACiAjIG9zLnN5bWxpbmsgb24gV2luZG93cyBwcmlvciB0byA2LjAgcmFpc2VzIE5vdEltcGxlbWVudGVkRXJyb3IKIHN5bWxpbmtfZXhjZXB0aW9uID0gKEF0dHJpYnV0ZUVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKQogdHJ5OgotICAgICMgV2luZG93c0Vycm9yICgxMzE0KSB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgdGhlCisgICAgIyBPU0Vycm9yICh3aW5lcnJvcj0xMzE0KSB3aWxsIGJlIHJhaXNlZCBpZiB0aGUgY2FsbGVyIGRvZXMgbm90IGhvbGQgdGhlCiAgICAgIyBTZUNyZWF0ZVN5bWJvbGljTGlua1ByaXZpbGVnZSBwcml2aWxlZ2UKLSAgICBzeW1saW5rX2V4Y2VwdGlvbiArPSAoV2luZG93c0Vycm9yLCkKKyAgICBzeW1saW5rX2V4Y2VwdGlvbiArPSAoT1NFcnJvciwpCiBleGNlcHQgTmFtZUVycm9yOgogICAgIHBhc3MKIAogIyBmcm9tIHRhcmZpbGUgaW1wb3J0ICoKIF9fYWxsX18gPSBbIlRhckZpbGUiLCAiVGFySW5mbyIsICJpc190YXJmaWxlIiwgIlRhckVycm9yIl0KIAotZnJvbSBidWlsdGlucyBpbXBvcnQgb3BlbiBhcyBfb3BlbiAjIFNpbmNlICdvcGVuJyBpcyBUYXJGaWxlLm9wZW4KLQogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyB0YXIgY29uc3RhbnRzCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDAsMzAgKzEzOSw2IEBACiB9CiAKICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQml0cyB1c2VkIGluIHRoZSBtb2RlIGZpZWxkLCB2YWx1ZXMgaW4gb2N0YWwuCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1TX0lGTE5LID0gMG8xMjAwMDAgICAgICAgICMgc3ltYm9saWMgbGluawotU19JRlJFRyA9IDBvMTAwMDAwICAgICAgICAjIHJlZ3VsYXIgZmlsZQotU19JRkJMSyA9IDBvMDYwMDAwICAgICAgICAjIGJsb2NrIGRldmljZQotU19JRkRJUiA9IDBvMDQwMDAwICAgICAgICAjIGRpcmVjdG9yeQotU19JRkNIUiA9IDBvMDIwMDAwICAgICAgICAjIGNoYXJhY3RlciBkZXZpY2UKLVNfSUZJRk8gPSAwbzAxMDAwMCAgICAgICAgIyBmaWZvCi0KLVRTVUlEICAgPSAwbzQwMDAgICAgICAgICAgIyBzZXQgVUlEIG9uIGV4ZWN1dGlvbgotVFNHSUQgICA9IDBvMjAwMCAgICAgICAgICAjIHNldCBHSUQgb24gZXhlY3V0aW9uCi1UU1ZUWCAgID0gMG8xMDAwICAgICAgICAgICMgcmVzZXJ2ZWQKLQotVFVSRUFEICA9IDBvNDAwICAgICAgICAgICAjIHJlYWQgYnkgb3duZXIKLVRVV1JJVEUgPSAwbzIwMCAgICAgICAgICAgIyB3cml0ZSBieSBvd25lcgotVFVFWEVDICA9IDBvMTAwICAgICAgICAgICAjIGV4ZWN1dGUvc2VhcmNoIGJ5IG93bmVyCi1UR1JFQUQgID0gMG8wNDAgICAgICAgICAgICMgcmVhZCBieSBncm91cAotVEdXUklURSA9IDBvMDIwICAgICAgICAgICAjIHdyaXRlIGJ5IGdyb3VwCi1UR0VYRUMgID0gMG8wMTAgICAgICAgICAgICMgZXhlY3V0ZS9zZWFyY2ggYnkgZ3JvdXAKLVRPUkVBRCAgPSAwbzAwNCAgICAgICAgICAgIyByZWFkIGJ5IG90aGVyCi1UT1dSSVRFID0gMG8wMDIgICAgICAgICAgICMgd3JpdGUgYnkgb3RoZXIKLVRPRVhFQyAgPSAwbzAwMSAgICAgICAgICAgIyBleGVjdXRlL3NlYXJjaCBieSBvdGhlcgotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIGluaXRpYWxpemF0aW9uCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpZiBvcy5uYW1lIGluICgibnQiLCAiY2UiKToKQEAgLTIwMyw3ICsxNzgsOCBAQAogICAgICAgICAgICAgbiA9IC0oMjU2ICoqIChsZW4ocykgLSAxKSAtIG4pCiAgICAgZWxzZToKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbiA9IGludChudHMocywgImFzY2lpIiwgInN0cmljdCIpIG9yICIwIiwgOCkKKyAgICAgICAgICAgIHMgPSBudHMocywgImFzY2lpIiwgInN0cmljdCIpCisgICAgICAgICAgICBuID0gaW50KHMuc3RyaXAoKSBvciAiMCIsIDgpCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgcmFpc2UgSW52YWxpZEhlYWRlckVycm9yKCJpbnZhbGlkIGhlYWRlciIpCiAgICAgcmV0dXJuIG4KQEAgLTIyMCw3ICsxOTYsNyBAQAogICAgICMgQSAwbzIwMCBieXRlIGluZGljYXRlcyBhIHBvc2l0aXZlIG51bWJlciwgYSAwbzM3NyBieXRlIGEgbmVnYXRpdmUKICAgICAjIG51bWJlci4KICAgICBpZiAwIDw9IG4gPCA4ICoqIChkaWdpdHMgLSAxKToKLSAgICAgICAgcyA9IGJ5dGVzKCIlMCpvIiAlIChkaWdpdHMgLSAxLCBuKSwgImFzY2lpIikgKyBOVUwKKyAgICAgICAgcyA9IGJ5dGVzKCIlMCpvIiAlIChkaWdpdHMgLSAxLCBpbnQobikpLCAiYXNjaWkiKSArIE5VTAogICAgIGVsaWYgZm9ybWF0ID09IEdOVV9GT1JNQVQgYW5kIC0yNTYgKiogKGRpZ2l0cyAtIDEpIDw9IG4gPCAyNTYgKiogKGRpZ2l0cyAtIDEpOgogICAgICAgICBpZiBuID49IDA6CiAgICAgICAgICAgICBzID0gYnl0ZWFycmF5KFswbzIwMF0pCkBAIC0yNDksNyArMjI1LDcgQEAKICAgICBzaWduZWRfY2hrc3VtID0gMjU2ICsgc3VtKHN0cnVjdC51bnBhY2tfZnJvbSgiMTQ4Yjh4MzU2YiIsIGJ1ZikpCiAgICAgcmV0dXJuIHVuc2lnbmVkX2Noa3N1bSwgc2lnbmVkX2Noa3N1bQogCi1kZWYgY29weWZpbGVvYmooc3JjLCBkc3QsIGxlbmd0aD1Ob25lKToKK2RlZiBjb3B5ZmlsZW9iaihzcmMsIGRzdCwgbGVuZ3RoPU5vbmUsIGV4Y2VwdGlvbj1PU0Vycm9yKToKICAgICAiIiJDb3B5IGxlbmd0aCBieXRlcyBmcm9tIGZpbGVvYmogc3JjIHRvIGZpbGVvYmogZHN0LgogICAgICAgIElmIGxlbmd0aCBpcyBOb25lLCBjb3B5IHRoZSBlbnRpcmUgY29udGVudC4KICAgICAiIiIKQEAgLTI2NCwxMyArMjQwLDEzIEBACiAgICAgZm9yIGIgaW4gcmFuZ2UoYmxvY2tzKToKICAgICAgICAgYnVmID0gc3JjLnJlYWQoQlVGU0laRSkKICAgICAgICAgaWYgbGVuKGJ1ZikgPCBCVUZTSVpFOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiZW5kIG9mIGZpbGUgcmVhY2hlZCIpCisgICAgICAgICAgICByYWlzZSBleGNlcHRpb24oInVuZXhwZWN0ZWQgZW5kIG9mIGRhdGEiKQogICAgICAgICBkc3Qud3JpdGUoYnVmKQogCiAgICAgaWYgcmVtYWluZGVyICE9IDA6CiAgICAgICAgIGJ1ZiA9IHNyYy5yZWFkKHJlbWFpbmRlcikKICAgICAgICAgaWYgbGVuKGJ1ZikgPCByZW1haW5kZXI6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJlbmQgb2YgZmlsZSByZWFjaGVkIikKKyAgICAgICAgICAgIHJhaXNlIGV4Y2VwdGlvbigidW5leHBlY3RlZCBlbmQgb2YgZGF0YSIpCiAgICAgICAgIGRzdC53cml0ZShidWYpCiAgICAgcmV0dXJuCiAKQEAgLTQwNSw3ICszODEsNyBAQAogICAgICAgICAgICAgICAgIGlmIG1vZGUgPT0gInIiOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmRidWYgPSBiIiIKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jbXAgPSBiejIuQloyRGVjb21wcmVzc29yKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5leGNlcHRpb24gPSBJT0Vycm9yCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjZXB0aW9uID0gT1NFcnJvcgogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuY21wID0gYnoyLkJaMkNvbXByZXNzb3IoKQogCkBAIC00NzQsMjYgKzQ1MCwyNiBAQAogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgIGlmIHNlbGYubW9kZSA9PSAidyIgYW5kIHNlbGYuY29tcHR5cGUgIT0gInRhciI6Ci0gICAgICAgICAgICBzZWxmLmJ1ZiArPSBzZWxmLmNtcC5mbHVzaCgpCi0KLSAgICAgICAgaWYgc2VsZi5tb2RlID09ICJ3IiBhbmQgc2VsZi5idWY6Ci0gICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoc2VsZi5idWYpCi0gICAgICAgICAgICBzZWxmLmJ1ZiA9IGIiIgotICAgICAgICAgICAgaWYgc2VsZi5jb21wdHlwZSA9PSAiZ3oiOgotICAgICAgICAgICAgICAgICMgVGhlIG5hdGl2ZSB6bGliIGNyYyBpcyBhbiB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlciwgYnV0Ci0gICAgICAgICAgICAgICAgIyB0aGUgUHl0aG9uIHdyYXBwZXIgaW1wbGljaXRseSBjYXN0cyB0aGF0IHRvIGEgc2lnbmVkIEMKLSAgICAgICAgICAgICAgICAjIGxvbmcuICBTbywgb24gYSAzMi1iaXQgYm94IHNlbGYuY3JjIG1heSAibG9vayBuZWdhdGl2ZSIsCi0gICAgICAgICAgICAgICAgIyB3aGlsZSB0aGUgc2FtZSBjcmMgb24gYSA2NC1iaXQgYm94IG1heSAibG9vayBwb3NpdGl2ZSIuCi0gICAgICAgICAgICAgICAgIyBUbyBhdm9pZCBpcmtzb21lIHdhcm5pbmdzIGZyb20gdGhlIGBzdHJ1Y3RgIG1vZHVsZSwgZm9yY2UKLSAgICAgICAgICAgICAgICAjIGl0IHRvIGxvb2sgcG9zaXRpdmUgb24gYWxsIGJveGVzLgotICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCBzZWxmLmNyYyAmIDB4ZmZmZmZmZmYpKQotICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCBzZWxmLnBvcyAmIDB4ZmZmZkZGRkYpKQotCi0gICAgICAgIGlmIG5vdCBzZWxmLl9leHRmaWxlb2JqOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLmNsb3NlKCkKLQogICAgICAgICBzZWxmLmNsb3NlZCA9IFRydWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgc2VsZi5tb2RlID09ICJ3IiBhbmQgc2VsZi5jb21wdHlwZSAhPSAidGFyIjoKKyAgICAgICAgICAgICAgICBzZWxmLmJ1ZiArPSBzZWxmLmNtcC5mbHVzaCgpCisKKyAgICAgICAgICAgIGlmIHNlbGYubW9kZSA9PSAidyIgYW5kIHNlbGYuYnVmOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzZWxmLmJ1ZikKKyAgICAgICAgICAgICAgICBzZWxmLmJ1ZiA9IGIiIgorICAgICAgICAgICAgICAgIGlmIHNlbGYuY29tcHR5cGUgPT0gImd6IjoKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgbmF0aXZlIHpsaWIgY3JjIGlzIGFuIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VyLCBidXQKKyAgICAgICAgICAgICAgICAgICAgIyB0aGUgUHl0aG9uIHdyYXBwZXIgaW1wbGljaXRseSBjYXN0cyB0aGF0IHRvIGEgc2lnbmVkIEMKKyAgICAgICAgICAgICAgICAgICAgIyBsb25nLiAgU28sIG9uIGEgMzItYml0IGJveCBzZWxmLmNyYyBtYXkgImxvb2sgbmVnYXRpdmUiLAorICAgICAgICAgICAgICAgICAgICAjIHdoaWxlIHRoZSBzYW1lIGNyYyBvbiBhIDY0LWJpdCBib3ggbWF5ICJsb29rIHBvc2l0aXZlIi4KKyAgICAgICAgICAgICAgICAgICAgIyBUbyBhdm9pZCBpcmtzb21lIHdhcm5pbmdzIGZyb20gdGhlIGBzdHJ1Y3RgIG1vZHVsZSwgZm9yY2UKKyAgICAgICAgICAgICAgICAgICAgIyBpdCB0byBsb29rIHBvc2l0aXZlIG9uIGFsbCBib3hlcy4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlb2JqLndyaXRlKHN0cnVjdC5wYWNrKCI8TCIsIHNlbGYuY3JjICYgMHhmZmZmZmZmZikpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShzdHJ1Y3QucGFjaygiPEwiLCBzZWxmLnBvcyAmIDB4ZmZmZkZGRkYpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2V4dGZpbGVvYmo6CisgICAgICAgICAgICAgICAgc2VsZi5maWxlb2JqLmNsb3NlKCkKIAogICAgIGRlZiBfaW5pdF9yZWFkX2d6KHNlbGYpOgogICAgICAgICAiIiJJbml0aWFsaXplIGZvciByZWFkaW5nIGEgZ3ppcCBjb21wcmVzc2VkIGZpbGVvYmouCkBAIC03MTQsNyArNjkwLDEwIEBACiAgICAgICAgICAgICBsZW5ndGggPSBtaW4oc2l6ZSwgc3RvcCAtIHNlbGYucG9zaXRpb24pCiAgICAgICAgICAgICBpZiBkYXRhOgogICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKG9mZnNldCArIChzZWxmLnBvc2l0aW9uIC0gc3RhcnQpKQotICAgICAgICAgICAgICAgIGJ1ZiArPSBzZWxmLmZpbGVvYmoucmVhZChsZW5ndGgpCisgICAgICAgICAgICAgICAgYiA9IHNlbGYuZmlsZW9iai5yZWFkKGxlbmd0aCkKKyAgICAgICAgICAgICAgICBpZiBsZW4oYikgIT0gbGVuZ3RoOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBSZWFkRXJyb3IoInVuZXhwZWN0ZWQgZW5kIG9mIGRhdGEiKQorICAgICAgICAgICAgICAgIGJ1ZiArPSBiCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJ1ZiArPSBOVUwgKiBsZW5ndGgKICAgICAgICAgICAgIHNpemUgLT0gbGVuZ3RoCkBAIC0xNDQ5LDcgKzE0MjgsOCBAQAogICAgICAgICAgICAgZmlsZW9iaiA9IGJsdG5fb3BlbihuYW1lLCBzZWxmLl9tb2RlKQogICAgICAgICAgICAgc2VsZi5fZXh0ZmlsZW9iaiA9IEZhbHNlCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBuYW1lIGlzIE5vbmUgYW5kIGhhc2F0dHIoZmlsZW9iaiwgIm5hbWUiKToKKyAgICAgICAgICAgIGlmIChuYW1lIGlzIE5vbmUgYW5kIGhhc2F0dHIoZmlsZW9iaiwgIm5hbWUiKSBhbmQKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGZpbGVvYmoubmFtZSwgKHN0ciwgYnl0ZXMpKSk6CiAgICAgICAgICAgICAgICAgbmFtZSA9IGZpbGVvYmoubmFtZQogICAgICAgICAgICAgaWYgaGFzYXR0cihmaWxlb2JqLCAibW9kZSIpOgogICAgICAgICAgICAgICAgIHNlbGYuX21vZGUgPSBmaWxlb2JqLm1vZGUKQEAgLTE2NzIsNyArMTY1Miw3IEBACiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdCA9IGNscy50YXJvcGVuKG5hbWUsIG1vZGUsIGZpbGVvYmosICoqa3dhcmdzKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEVPRkVycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICBmaWxlb2JqLmNsb3NlKCkKICAgICAgICAgICAgIGlmIG1vZGUgPT0gJ3InOgogICAgICAgICAgICAgICAgIHJhaXNlIFJlYWRFcnJvcigibm90IGEgYnppcDIgZmlsZSIpCkBAIC0xNzI5LDE4ICsxNzA5LDE5IEBACiAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgaWYgc2VsZi5tb2RlIGluICJhdyI6Ci0gICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoTlVMICogKEJMT0NLU0laRSAqIDIpKQotICAgICAgICAgICAgc2VsZi5vZmZzZXQgKz0gKEJMT0NLU0laRSAqIDIpCi0gICAgICAgICAgICAjIGZpbGwgdXAgdGhlIGVuZCB3aXRoIHplcm8tYmxvY2tzCi0gICAgICAgICAgICAjIChsaWtlIG9wdGlvbiAtYjIwIGZvciB0YXIgZG9lcykKLSAgICAgICAgICAgIGJsb2NrcywgcmVtYWluZGVyID0gZGl2bW9kKHNlbGYub2Zmc2V0LCBSRUNPUkRTSVpFKQotICAgICAgICAgICAgaWYgcmVtYWluZGVyID4gMDoKLSAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmoud3JpdGUoTlVMICogKFJFQ09SRFNJWkUgLSByZW1haW5kZXIpKQotCi0gICAgICAgIGlmIG5vdCBzZWxmLl9leHRmaWxlb2JqOgotICAgICAgICAgICAgc2VsZi5maWxlb2JqLmNsb3NlKCkKICAgICAgICAgc2VsZi5jbG9zZWQgPSBUcnVlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYubW9kZSBpbiAiYXciOgorICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShOVUwgKiAoQkxPQ0tTSVpFICogMikpCisgICAgICAgICAgICAgICAgc2VsZi5vZmZzZXQgKz0gKEJMT0NLU0laRSAqIDIpCisgICAgICAgICAgICAgICAgIyBmaWxsIHVwIHRoZSBlbmQgd2l0aCB6ZXJvLWJsb2NrcworICAgICAgICAgICAgICAgICMgKGxpa2Ugb3B0aW9uIC1iMjAgZm9yIHRhciBkb2VzKQorICAgICAgICAgICAgICAgIGJsb2NrcywgcmVtYWluZGVyID0gZGl2bW9kKHNlbGYub2Zmc2V0LCBSRUNPUkRTSVpFKQorICAgICAgICAgICAgICAgIGlmIHJlbWFpbmRlciA+IDA6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZW9iai53cml0ZShOVUwgKiAoUkVDT1JEU0laRSAtIHJlbWFpbmRlcikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fZXh0ZmlsZW9iajoKKyAgICAgICAgICAgICAgICBzZWxmLmZpbGVvYmouY2xvc2UoKQogCiAgICAgZGVmIGdldG1lbWJlcihzZWxmLCBuYW1lKToKICAgICAgICAgIiIiUmV0dXJuIGEgVGFySW5mbyBvYmplY3QgZm9yIG1lbWJlciBgbmFtZScuIElmIGBuYW1lJyBjYW4gbm90IGJlCkBAIC0yMDQyLDcgKzIwMjMsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9leHRyYWN0X21lbWJlcih0YXJpbmZvLCBvcy5wYXRoLmpvaW4ocGF0aCwgdGFyaW5mby5uYW1lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldF9hdHRycz1zZXRfYXR0cnMpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBzZWxmLmVycm9ybGV2ZWwgPiAwOgogICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBlbHNlOgpAQCAtMjE1NCw5ICsyMTM1LDkgQEAKICAgICAgICAgICAgIGlmIHRhcmluZm8uc3BhcnNlIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIGZvciBvZmZzZXQsIHNpemUgaW4gdGFyaW5mby5zcGFyc2U6CiAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5zZWVrKG9mZnNldCkKLSAgICAgICAgICAgICAgICAgICAgY29weWZpbGVvYmooc291cmNlLCB0YXJnZXQsIHNpemUpCisgICAgICAgICAgICAgICAgICAgIGNvcHlmaWxlb2JqKHNvdXJjZSwgdGFyZ2V0LCBzaXplLCBSZWFkRXJyb3IpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNvcHlmaWxlb2JqKHNvdXJjZSwgdGFyZ2V0LCB0YXJpbmZvLnNpemUpCisgICAgICAgICAgICAgICAgY29weWZpbGVvYmooc291cmNlLCB0YXJnZXQsIHRhcmluZm8uc2l6ZSwgUmVhZEVycm9yKQogICAgICAgICAgICAgdGFyZ2V0LnNlZWsodGFyaW5mby5zaXplKQogICAgICAgICAgICAgdGFyZ2V0LnRydW5jYXRlKCkKIApAQCAtMjIzMSw5ICsyMjEyLDggQEAKICAgICAgICAgICAgICAgICBpZiB0YXJpbmZvLmlzc3ltKCkgYW5kIGhhc2F0dHIob3MsICJsY2hvd24iKToKICAgICAgICAgICAgICAgICAgICAgb3MubGNob3duKHRhcmdldHBhdGgsIHUsIGcpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICJvczJlbXgiOgotICAgICAgICAgICAgICAgICAgICAgICAgb3MuY2hvd24odGFyZ2V0cGF0aCwgdSwgZykKLSAgICAgICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIG9zLmNob3duKHRhcmdldHBhdGgsIHUsIGcpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4dHJhY3RFcnJvcigiY291bGQgbm90IGNoYW5nZSBvd25lciIpCiAKICAgICBkZWYgY2htb2Qoc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCk6CkBAIC0yMjQyLDcgKzIyMjIsNyBAQAogICAgICAgICBpZiBoYXNhdHRyKG9zLCAnY2htb2QnKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5jaG1vZCh0YXJnZXRwYXRoLCB0YXJpbmZvLm1vZGUpCi0gICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICByYWlzZSBFeHRyYWN0RXJyb3IoImNvdWxkIG5vdCBjaGFuZ2UgbW9kZSIpCiAKICAgICBkZWYgdXRpbWUoc2VsZiwgdGFyaW5mbywgdGFyZ2V0cGF0aCk6CkBAIC0yMjUyLDcgKzIyMzIsNyBAQAogICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnV0aW1lKHRhcmdldHBhdGgsICh0YXJpbmZvLm10aW1lLCB0YXJpbmZvLm10aW1lKSkKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHJhaXNlIEV4dHJhY3RFcnJvcigiY291bGQgbm90IGNoYW5nZSBtb2RpZmljYXRpb24gdGltZSIpCiAKICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTIyNjcsOCArMjI0NywxMyBAQAogICAgICAgICAgICAgc2VsZi5maXJzdG1lbWJlciA9IE5vbmUKICAgICAgICAgICAgIHJldHVybiBtCiAKKyAgICAgICAgIyBBZHZhbmNlIHRoZSBmaWxlIHBvaW50ZXIuCisgICAgICAgIGlmIHNlbGYub2Zmc2V0ICE9IHNlbGYuZmlsZW9iai50ZWxsKCk6CisgICAgICAgICAgICBzZWxmLmZpbGVvYmouc2VlayhzZWxmLm9mZnNldCAtIDEpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5maWxlb2JqLnJlYWQoMSk6CisgICAgICAgICAgICAgICAgcmFpc2UgUmVhZEVycm9yKCJ1bmV4cGVjdGVkIGVuZCBvZiBkYXRhIikKKwogICAgICAgICAjIFJlYWQgdGhlIG5leHQgYmxvY2suCi0gICAgICAgIHNlbGYuZmlsZW9iai5zZWVrKHNlbGYub2Zmc2V0KQogICAgICAgICB0YXJpbmZvID0gTm9uZQogICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgdHJ5OgpAQCAtMjM0Myw5ICsyMzI4LDkgQEAKICAgICAgICAgICAgY29ycmVzcG9uZHMgdG8gVGFyRmlsZSdzIG1vZGUuCiAgICAgICAgICIiIgogICAgICAgICBpZiBzZWxmLmNsb3NlZDoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoIiVzIGlzIGNsb3NlZCIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIiVzIGlzIGNsb3NlZCIgJSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXykKICAgICAgICAgaWYgbW9kZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5tb2RlIG5vdCBpbiBtb2RlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigiYmFkIG9wZXJhdGlvbiBmb3IgbW9kZSAlciIgJSBzZWxmLm1vZGUpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCJiYWQgb3BlcmF0aW9uIGZvciBtb2RlICVyIiAlIHNlbGYubW9kZSkKIAogICAgIGRlZiBfZmluZF9saW5rX3RhcmdldChzZWxmLCB0YXJpbmZvKToKICAgICAgICAgIiIiRmluZCB0aGUgdGFyZ2V0IG1lbWJlciBvZiBhIHN5bWxpbmsgb3IgaGFyZGxpbmsgbWVtYmVyIGluIHRoZQpAQCAtMjQ0Nyw1ICsyNDMyLDk4IEBACiAgICAgZXhjZXB0IFRhckVycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKIAotYmx0bl9vcGVuID0gb3Blbgogb3BlbiA9IFRhckZpbGUub3BlbgorCisKK2RlZiBtYWluKCk6CisgICAgaW1wb3J0IGFyZ3BhcnNlCisKKyAgICBkZXNjcmlwdGlvbiA9ICdBIHNpbXBsZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlIGZvciB0YXJmaWxlIG1vZHVsZS4nCisgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoZGVzY3JpcHRpb249ZGVzY3JpcHRpb24pCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1ZlcmJvc2Ugb3V0cHV0JykKKyAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1sJywgJy0tbGlzdCcsIG1ldGF2YXI9Jzx0YXJmaWxlPicsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1Nob3cgbGlzdGluZyBvZiBhIHRhcmZpbGUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWUnLCAnLS1leHRyYWN0JywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSgnPHRhcmZpbGU+JywgJzxvdXRwdXRfZGlyPicpLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdFeHRyYWN0IHRhcmZpbGUgaW50byB0YXJnZXQgZGlyJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1jJywgJy0tY3JlYXRlJywgbmFyZ3M9JysnLAorICAgICAgICAgICAgICAgICAgICAgICBtZXRhdmFyPSgnPG5hbWU+JywgJzxmaWxlPicpLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdDcmVhdGUgdGFyZmlsZSBmcm9tIHNvdXJjZXMnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10ZXN0JywgbWV0YXZhcj0nPHRhcmZpbGU+JywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVGVzdCBpZiBhIHRhcmZpbGUgaXMgdmFsaWQnKQorICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCisKKyAgICBpZiBhcmdzLnRlc3Q6CisgICAgICAgIHNyYyA9IGFyZ3MudGVzdAorICAgICAgICBpZiBpc190YXJmaWxlKHNyYyk6CisgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICAgICAgcHJpbnQodGFyLmdldG1lbWJlcnMoKSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgaWYgYXJncy52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KCd7IXJ9IGlzIGEgdGFyIGFyY2hpdmUuJy5mb3JtYXQoc3JjKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5saXN0OgorICAgICAgICBzcmMgPSBhcmdzLmxpc3QKKyAgICAgICAgaWYgaXNfdGFyZmlsZShzcmMpOgorICAgICAgICAgICAgd2l0aCBUYXJGaWxlLm9wZW4oc3JjLCAncjoqJykgYXMgdGY6CisgICAgICAgICAgICAgICAgdGYubGlzdCh2ZXJib3NlPWFyZ3MudmVyYm9zZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsICd7IXJ9IGlzIG5vdCBhIHRhciBhcmNoaXZlLlxuJy5mb3JtYXQoc3JjKSkKKworICAgIGVsaWYgYXJncy5leHRyYWN0OgorICAgICAgICBpZiBsZW4oYXJncy5leHRyYWN0KSA9PSAxOgorICAgICAgICAgICAgc3JjID0gYXJncy5leHRyYWN0WzBdCisgICAgICAgICAgICBjdXJkaXIgPSBvcy5jdXJkaXIKKyAgICAgICAgZWxpZiBsZW4oYXJncy5leHRyYWN0KSA9PSAyOgorICAgICAgICAgICAgc3JjLCBjdXJkaXIgPSBhcmdzLmV4dHJhY3QKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcnNlci5leGl0KDEsIHBhcnNlci5mb3JtYXRfaGVscCgpKQorCisgICAgICAgIGlmIGlzX3RhcmZpbGUoc3JjKToKKyAgICAgICAgICAgIHdpdGggVGFyRmlsZS5vcGVuKHNyYywgJ3I6KicpIGFzIHRmOgorICAgICAgICAgICAgICAgIHRmLmV4dHJhY3RhbGwocGF0aD1jdXJkaXIpCisgICAgICAgICAgICBpZiBhcmdzLnZlcmJvc2U6CisgICAgICAgICAgICAgICAgaWYgY3VyZGlyID09ICcuJzoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJ3shcn0gZmlsZSBpcyBleHRyYWN0ZWQuJy5mb3JtYXQoc3JjKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgneyFyfSBmaWxlIGlzIGV4dHJhY3RlZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50byB7IXJ9IGRpcmVjdG9yeS4nKS5mb3JtYXQoc3JjLCBjdXJkaXIpCisgICAgICAgICAgICAgICAgcHJpbnQobXNnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGFyc2VyLmV4aXQoMSwgJ3shcn0gaXMgbm90IGEgdGFyIGFyY2hpdmUuXG4nLmZvcm1hdChzcmMpKQorCisgICAgZWxpZiBhcmdzLmNyZWF0ZToKKyAgICAgICAgdGFyX25hbWUgPSBhcmdzLmNyZWF0ZS5wb3AoMCkKKyAgICAgICAgXywgZXh0ID0gb3MucGF0aC5zcGxpdGV4dCh0YXJfbmFtZSkKKyAgICAgICAgY29tcHJlc3Npb25zID0geworICAgICAgICAgICAgIyBnegorICAgICAgICAgICAgJy5neic6ICdneicsCisgICAgICAgICAgICAnLnRneic6ICdneicsCisgICAgICAgICAgICAjIHh6CisgICAgICAgICAgICAnLnh6JzogJ3h6JywKKyAgICAgICAgICAgICcudHh6JzogJ3h6JywKKyAgICAgICAgICAgICMgYnoyCisgICAgICAgICAgICAnLmJ6Mic6ICdiejInLAorICAgICAgICAgICAgJy50YnonOiAnYnoyJywKKyAgICAgICAgICAgICcudGJ6Mic6ICdiejInLAorICAgICAgICAgICAgJy50YjInOiAnYnoyJywKKyAgICAgICAgfQorICAgICAgICB0YXJfbW9kZSA9ICd3OicgKyBjb21wcmVzc2lvbnNbZXh0XSBpZiBleHQgaW4gY29tcHJlc3Npb25zIGVsc2UgJ3cnCisgICAgICAgIHRhcl9maWxlcyA9IGFyZ3MuY3JlYXRlCisKKyAgICAgICAgd2l0aCBUYXJGaWxlLm9wZW4odGFyX25hbWUsIHRhcl9tb2RlKSBhcyB0ZjoKKyAgICAgICAgICAgIGZvciBmaWxlX25hbWUgaW4gdGFyX2ZpbGVzOgorICAgICAgICAgICAgICAgIHRmLmFkZChmaWxlX25hbWUpCisKKyAgICAgICAgaWYgYXJncy52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoJ3shcn0gZmlsZSBjcmVhdGVkLicuZm9ybWF0KHRhcl9uYW1lKSkKKworICAgIGVsc2U6CisgICAgICAgIHBhcnNlci5leGl0KDEsIHBhcnNlci5mb3JtYXRfaGVscCgpKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3RlbG5ldGxpYi5weSBiL0xpYi90ZWxuZXRsaWIucHkKaW5kZXggZDQ5ZDRmNC4uNTE3MzhmMCAxMDA2NDQKLS0tIGEvTGliL3RlbG5ldGxpYi5weQorKysgYi9MaWIvdGVsbmV0bGliLnB5CkBAIC0xNywxMyArMTcsMTIgQEAKIE5vdGUgdGhhdCByZWFkX2FsbCgpIHdvbid0IHJlYWQgdW50aWwgZW9mIC0tIGl0IGp1c3QgcmVhZHMgc29tZSBkYXRhCiAtLSBidXQgaXQgZ3VhcmFudGVlcyB0byByZWFkIGF0IGxlYXN0IG9uZSBieXRlIHVubGVzcyBFT0YgaXMgaGl0LgogCi1JdCBpcyBwb3NzaWJsZSB0byBwYXNzIGEgVGVsbmV0IG9iamVjdCB0byBzZWxlY3Quc2VsZWN0KCkgaW4gb3JkZXIgdG8KLXdhaXQgdW50aWwgbW9yZSBkYXRhIGlzIGF2YWlsYWJsZS4gIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsCi1yZWFkX2VhZ2VyKCkgbWF5IHJldHVybiBiJycgZXZlbiBpZiB0aGVyZSB3YXMgZGF0YSBvbiB0aGUgc29ja2V0LAotYmVjYXVzZSB0aGUgcHJvdG9jb2wgbmVnb3RpYXRpb24gbWF5IGhhdmUgZWF0ZW4gdGhlIGRhdGEuICBUaGlzIGlzIHdoeQotRU9GRXJyb3IgaXMgbmVlZGVkIGluIHNvbWUgY2FzZXMgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiAibm8gZGF0YSIgYW5kCi0iY29ubmVjdGlvbiBjbG9zZWQiIChzaW5jZSB0aGUgc29ja2V0IGFsc28gYXBwZWFycyByZWFkeSBmb3IgcmVhZGluZwotd2hlbiBpdCBpcyBjbG9zZWQpLgorSXQgaXMgcG9zc2libGUgdG8gcGFzcyBhIFRlbG5ldCBvYmplY3QgdG8gYSBzZWxlY3RvciBpbiBvcmRlciB0byB3YWl0IHVudGlsCittb3JlIGRhdGEgaXMgYXZhaWxhYmxlLiAgTm90ZSB0aGF0IGluIHRoaXMgY2FzZSwgcmVhZF9lYWdlcigpIG1heSByZXR1cm4gYicnCitldmVuIGlmIHRoZXJlIHdhcyBkYXRhIG9uIHRoZSBzb2NrZXQsIGJlY2F1c2UgdGhlIHByb3RvY29sIG5lZ290aWF0aW9uIG1heSBoYXZlCitlYXRlbiB0aGUgZGF0YS4gIFRoaXMgaXMgd2h5IEVPRkVycm9yIGlzIG5lZWRlZCBpbiBzb21lIGNhc2VzIHRvIGRpc3Rpbmd1aXNoCitiZXR3ZWVuICJubyBkYXRhIiBhbmQgImNvbm5lY3Rpb24gY2xvc2VkIiAoc2luY2UgdGhlIHNvY2tldCBhbHNvIGFwcGVhcnMgcmVhZHkKK2ZvciByZWFkaW5nIHdoZW4gaXQgaXMgY2xvc2VkKS4KIAogVG8gZG86CiAtIG9wdGlvbiBuZWdvdGlhdGlvbgpAQCAtMzQsMTAgKzMzLDkgQEAKIAogCiAjIEltcG9ydGVkIG1vZHVsZXMKLWltcG9ydCBlcnJubwogaW1wb3J0IHN5cwogaW1wb3J0IHNvY2tldAotaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNlbGVjdG9ycwogdHJ5OgogICAgIGZyb20gdGltZSBpbXBvcnQgbW9ub3RvbmljIGFzIF90aW1lCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0xMzQsNiArMTMyLDE1IEBACiBFWE9QTCA9IGJ5dGVzKFsyNTVdKSAjIEV4dGVuZGVkLU9wdGlvbnMtTGlzdAogTk9PUFQgPSBieXRlcyhbMF0pCiAKKworIyBwb2xsL3NlbGVjdCBoYXZlIHRoZSBhZHZhbnRhZ2Ugb2Ygbm90IHJlcXVpcmluZyBhbnkgZXh0cmEgZmlsZSBkZXNjcmlwdG9yLAorIyBjb250cmFyaWx5IHRvIGVwb2xsL2txdWV1ZSAoYWxzbywgdGhleSByZXF1aXJlIGEgc2luZ2xlIHN5c2NhbGwpLgoraWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICBfVGVsbmV0U2VsZWN0b3IgPSBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yCitlbHNlOgorICAgIF9UZWxuZXRTZWxlY3RvciA9IHNlbGVjdG9ycy5TZWxlY3RTZWxlY3RvcgorCisKIGNsYXNzIFRlbG5ldDoKIAogICAgICIiIlRlbG5ldCBpbnRlcmZhY2UgY2xhc3MuCkBAIC0yMTAsNyArMjE3LDYgQEAKICAgICAgICAgc2VsZi5zYiA9IDAgIyBmbGFnIGZvciBTQiBhbmQgU0Ugc2VxdWVuY2UuCiAgICAgICAgIHNlbGYuc2JkYXRhcSA9IGInJwogICAgICAgICBzZWxmLm9wdGlvbl9jYWxsYmFjayA9IE5vbmUKLSAgICAgICAgc2VsZi5faGFzX3BvbGwgPSBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKQogICAgICAgICBpZiBob3N0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi5vcGVuKGhvc3QsIHBvcnQsIHRpbWVvdXQpCiAKQEAgLTI1OCwxMiArMjY0LDEzIEBACiAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgICIiIkNsb3NlIHRoZSBjb25uZWN0aW9uLiIiIgotICAgICAgICBpZiBzZWxmLnNvY2s6Ci0gICAgICAgICAgICBzZWxmLnNvY2suY2xvc2UoKQorICAgICAgICBzb2NrID0gc2VsZi5zb2NrCiAgICAgICAgIHNlbGYuc29jayA9IDAKICAgICAgICAgc2VsZi5lb2YgPSAxCiAgICAgICAgIHNlbGYuaWFjc2VxID0gYicnCiAgICAgICAgIHNlbGYuc2IgPSAwCisgICAgICAgIGlmIHNvY2s6CisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKIAogICAgIGRlZiBnZXRfc29ja2V0KHNlbGYpOgogICAgICAgICAiIiJSZXR1cm4gdGhlIHNvY2tldCBvYmplY3QgdXNlZCBpbnRlcm5hbGx5LiIiIgpAQCAtMjc3LDcgKzI4NCw3IEBACiAgICAgICAgICIiIldyaXRlIGEgc3RyaW5nIHRvIHRoZSBzb2NrZXQsIGRvdWJsaW5nIGFueSBJQUMgY2hhcmFjdGVycy4KIAogICAgICAgICBDYW4gYmxvY2sgaWYgdGhlIGNvbm5lY3Rpb24gaXMgYmxvY2tlZC4gIE1heSByYWlzZQotICAgICAgICBzb2NrZXQuZXJyb3IgaWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgorICAgICAgICBPU0Vycm9yIGlmIHRoZSBjb25uZWN0aW9uIGlzIGNsb3NlZC4KIAogICAgICAgICAiIiIKICAgICAgICAgaWYgSUFDIGluIGJ1ZmZlcjoKQEAgLTI5Myw2MSArMzAwLDYgQEAKICAgICAgICAgaXMgY2xvc2VkIGFuZCBubyBjb29rZWQgZGF0YSBpcyBhdmFpbGFibGUuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuX2hhc19wb2xsOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW50aWxfd2l0aF9wb2xsKG1hdGNoLCB0aW1lb3V0KQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWRfdW50aWxfd2l0aF9zZWxlY3QobWF0Y2gsIHRpbWVvdXQpCi0KLSAgICBkZWYgX3JlYWRfdW50aWxfd2l0aF9wb2xsKHNlbGYsIG1hdGNoLCB0aW1lb3V0KToKLSAgICAgICAgIiIiUmVhZCB1bnRpbCBhIGdpdmVuIHN0cmluZyBpcyBlbmNvdW50ZXJlZCBvciB1bnRpbCB0aW1lb3V0LgotCi0gICAgICAgIFRoaXMgbWV0aG9kIHVzZXMgc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGhlIHRpbWVvdXQuCi0gICAgICAgICIiIgotICAgICAgICBuID0gbGVuKG1hdGNoKQotICAgICAgICBjYWxsX3RpbWVvdXQgPSB0aW1lb3V0Ci0gICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0aW1lX3N0YXJ0ID0gX3RpbWUoKQotICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgIGkgPSBzZWxmLmNvb2tlZHEuZmluZChtYXRjaCkKLSAgICAgICAgaWYgaSA8IDA6Ci0gICAgICAgICAgICBwb2xsZXIgPSBzZWxlY3QucG9sbCgpCi0gICAgICAgICAgICBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzID0gc2VsZWN0LlBPTExJTiB8IHNlbGVjdC5QT0xMUFJJCi0gICAgICAgICAgICBwb2xsZXIucmVnaXN0ZXIoc2VsZiwgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFncykKLSAgICAgICAgICAgIHdoaWxlIGkgPCAwIGFuZCBub3Qgc2VsZi5lb2Y6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHBvbGxlci5wb2xsKE5vbmUgaWYgdGltZW91dCBpcyBOb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAxMDAwICogY2FsbF90aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIGZvciBmZCwgbW9kZSBpbiByZWFkeToKLSAgICAgICAgICAgICAgICAgICAgaWYgbW9kZSAmIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpID0gbWF4KDAsIGxlbihzZWxmLmNvb2tlZHEpLW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gsIGkpCi0gICAgICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgICAgIGNhbGxfdGltZW91dCA9IHRpbWVvdXQtZWxhcHNlZAotICAgICAgICAgICAgcG9sbGVyLnVucmVnaXN0ZXIoc2VsZikKLSAgICAgICAgaWYgaSA+PSAwOgotICAgICAgICAgICAgaSA9IGkgKyBuCi0gICAgICAgICAgICBidWYgPSBzZWxmLmNvb2tlZHFbOmldCi0gICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbaTpdCi0gICAgICAgICAgICByZXR1cm4gYnVmCi0gICAgICAgIHJldHVybiBzZWxmLnJlYWRfdmVyeV9sYXp5KCkKLQotICAgIGRlZiBfcmVhZF91bnRpbF93aXRoX3NlbGVjdChzZWxmLCBtYXRjaCwgdGltZW91dD1Ob25lKToKLSAgICAgICAgIiIiUmVhZCB1bnRpbCBhIGdpdmVuIHN0cmluZyBpcyBlbmNvdW50ZXJlZCBvciB1bnRpbCB0aW1lb3V0LgotCi0gICAgICAgIFRoZSB0aW1lb3V0IGlzIGltcGxlbWVudGVkIHVzaW5nIHNlbGVjdC5zZWxlY3QoKS4KLSAgICAgICAgIiIiCiAgICAgICAgIG4gPSBsZW4obWF0Y2gpCiAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKICAgICAgICAgaSA9IHNlbGYuY29va2VkcS5maW5kKG1hdGNoKQpAQCAtMzU2LDI2ICszMDgsMjUgQEAKICAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KICAgICAgICAgICAgIHJldHVybiBidWYKLSAgICAgICAgc19yZXBseSA9IChbc2VsZl0sIFtdLCBbXSkKLSAgICAgICAgc19hcmdzID0gc19yZXBseQogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc19hcmdzID0gc19hcmdzICsgKHRpbWVvdXQsKQotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgd2hpbGUgbm90IHNlbGYuZW9mIGFuZCBzZWxlY3Quc2VsZWN0KCpzX2FyZ3MpID09IHNfcmVwbHk6Ci0gICAgICAgICAgICBpID0gbWF4KDAsIGxlbihzZWxmLmNvb2tlZHEpLW4pCi0gICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCi0gICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gsIGkpCi0gICAgICAgICAgICBpZiBpID49IDA6Ci0gICAgICAgICAgICAgICAgaSA9IGkrbgotICAgICAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KLSAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbaTpdCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1ZgotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICBpZiBlbGFwc2VkID49IHRpbWVvdXQ6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgc19hcmdzID0gc19yZXBseSArICh0aW1lb3V0LWVsYXBzZWQsKQorICAgICAgICAgICAgZGVhZGxpbmUgPSBfdGltZSgpICsgdGltZW91dAorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5lb2Y6CisgICAgICAgICAgICAgICAgaWYgc2VsZWN0b3Iuc2VsZWN0KHRpbWVvdXQpOgorICAgICAgICAgICAgICAgICAgICBpID0gbWF4KDAsIGxlbihzZWxmLmNvb2tlZHEpLW4pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsbF9yYXdxKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQorICAgICAgICAgICAgICAgICAgICBpID0gc2VsZi5jb29rZWRxLmZpbmQobWF0Y2gsIGkpCisgICAgICAgICAgICAgICAgICAgIGlmIGkgPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBpK24KKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IHNlbGYuY29va2VkcVs6aV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtpOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBidWYKKyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfdGltZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgcmV0dXJuIHNlbGYucmVhZF92ZXJ5X2xhenkoKQogCiAgICAgZGVmIHJlYWRfYWxsKHNlbGYpOgpAQCAtNTgwLDI5ICs1MzEsMzUgQEAKIAogICAgIGRlZiBzb2NrX2F2YWlsKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHdoZXRoZXIgZGF0YSBpcyBhdmFpbGFibGUgb24gdGhlIHNvY2tldC4iIiIKLSAgICAgICAgcmV0dXJuIHNlbGVjdC5zZWxlY3QoW3NlbGZdLCBbXSwgW10sIDApID09IChbc2VsZl0sIFtdLCBbXSkKKyAgICAgICAgd2l0aCBfVGVsbmV0U2VsZWN0b3IoKSBhcyBzZWxlY3RvcjoKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHNlbGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgcmV0dXJuIGJvb2woc2VsZWN0b3Iuc2VsZWN0KDApKQogCiAgICAgZGVmIGludGVyYWN0KHNlbGYpOgogICAgICAgICAiIiJJbnRlcmFjdGlvbiBmdW5jdGlvbiwgZW11bGF0ZXMgYSB2ZXJ5IGR1bWIgdGVsbmV0IGNsaWVudC4iIiIKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CiAgICAgICAgICAgICBzZWxmLm10X2ludGVyYWN0KCkKICAgICAgICAgICAgIHJldHVybgotICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgcmZkLCB3ZmQsIHhmZCA9IHNlbGVjdC5zZWxlY3QoW3NlbGYsIHN5cy5zdGRpbl0sIFtdLCBbXSkKLSAgICAgICAgICAgIGlmIHNlbGYgaW4gcmZkOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYucmVhZF9lYWdlcigpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnKioqIENvbm5lY3Rpb24gY2xvc2VkIGJ5IHJlbW90ZSBob3N0ICoqKicpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICAgICAgaWYgdGV4dDoKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSh0ZXh0LmRlY29kZSgnYXNjaWknKSkKLSAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICBpZiBzeXMuc3RkaW4gaW4gcmZkOgotICAgICAgICAgICAgICAgIGxpbmUgPSBzeXMuc3RkaW4ucmVhZGxpbmUoKS5lbmNvZGUoJ2FzY2lpJykKLSAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUpCisgICAgICAgIHdpdGggX1RlbG5ldFNlbGVjdG9yKCkgYXMgc2VsZWN0b3I6CisgICAgICAgICAgICBzZWxlY3Rvci5yZWdpc3RlcihzZWxmLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHNlbGVjdG9yLnJlZ2lzdGVyKHN5cy5zdGRpbiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgZm9yIGtleSwgZXZlbnRzIGluIHNlbGVjdG9yLnNlbGVjdCgpOgorICAgICAgICAgICAgICAgICAgICBpZiBrZXkuZmlsZW9iaiBpcyBzZWxmOgorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLnJlYWRfZWFnZXIoKQorICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEVPRkVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCcqKiogQ29ubmVjdGlvbiBjbG9zZWQgYnkgcmVtb3RlIGhvc3QgKioqJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRleHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSh0ZXh0LmRlY29kZSgnYXNjaWknKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXkuZmlsZW9iaiBpcyBzeXMuc3RkaW46CisgICAgICAgICAgICAgICAgICAgICAgICBsaW5lID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3QgbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGUobGluZSkKIAogICAgIGRlZiBtdF9pbnRlcmFjdChzZWxmKToKICAgICAgICAgIiIiTXVsdGl0aHJlYWRlZCB2ZXJzaW9uIG9mIGludGVyYWN0KCkuIiIiCkBAIC02NDksNzkgKzYwNiw2IEBACiAgICAgICAgIHJlc3VsdHMgYXJlIHVuZGV0ZXJtaW5pc3RpYywgYW5kIG1heSBkZXBlbmQgb24gdGhlIEkvTyB0aW1pbmcuCiAKICAgICAgICAgIiIiCi0gICAgICAgIGlmIHNlbGYuX2hhc19wb2xsOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2V4cGVjdF93aXRoX3BvbGwobGlzdCwgdGltZW91dCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLl9leHBlY3Rfd2l0aF9zZWxlY3QobGlzdCwgdGltZW91dCkKLQotICAgIGRlZiBfZXhwZWN0X3dpdGhfcG9sbChzZWxmLCBleHBlY3RfbGlzdCwgdGltZW91dD1Ob25lKToKLSAgICAgICAgIiIiUmVhZCB1bnRpbCBvbmUgZnJvbSBhIGxpc3Qgb2YgYSByZWd1bGFyIGV4cHJlc3Npb25zIG1hdGNoZXMuCi0KLSAgICAgICAgVGhpcyBtZXRob2QgdXNlcyBzZWxlY3QucG9sbCgpIHRvIGltcGxlbWVudCB0aGUgdGltZW91dC4KLSAgICAgICAgIiIiCi0gICAgICAgIHJlID0gTm9uZQotICAgICAgICBleHBlY3RfbGlzdCA9IGV4cGVjdF9saXN0WzpdCi0gICAgICAgIGluZGljZXMgPSByYW5nZShsZW4oZXhwZWN0X2xpc3QpKQotICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZXhwZWN0X2xpc3RbaV0sICJzZWFyY2giKToKLSAgICAgICAgICAgICAgICBpZiBub3QgcmU6IGltcG9ydCByZQotICAgICAgICAgICAgICAgIGV4cGVjdF9saXN0W2ldID0gcmUuY29tcGlsZShleHBlY3RfbGlzdFtpXSkKLSAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dAotICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQotICAgICAgICBtID0gTm9uZQotICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgotICAgICAgICAgICAgbSA9IGV4cGVjdF9saXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCi0gICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCi0gICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KLSAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbZTpdCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgaWYgbm90IG06Ci0gICAgICAgICAgICBwb2xsZXIgPSBzZWxlY3QucG9sbCgpCi0gICAgICAgICAgICBwb2xsX2luX29yX3ByaW9yaXR5X2ZsYWdzID0gc2VsZWN0LlBPTExJTiB8IHNlbGVjdC5QT0xMUFJJCi0gICAgICAgICAgICBwb2xsZXIucmVnaXN0ZXIoc2VsZiwgcG9sbF9pbl9vcl9wcmlvcml0eV9mbGFncykKLSAgICAgICAgICAgIHdoaWxlIG5vdCBtIGFuZCBub3Qgc2VsZi5lb2Y6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHBvbGxlci5wb2xsKE5vbmUgaWYgdGltZW91dCBpcyBOb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAxMDAwICogY2FsbF90aW1lb3V0KQotICAgICAgICAgICAgICAgIGV4Y2VwdCBzZWxlY3QuZXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxhcHNlZCA9IF90aW1lKCkgLSB0aW1lX3N0YXJ0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgIGZvciBmZCwgbW9kZSBpbiByZWFkeToKLSAgICAgICAgICAgICAgICAgICAgaWYgbW9kZSAmIHBvbGxfaW5fb3JfcHJpb3JpdHlfZmxhZ3M6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZpbGxfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByb2Nlc3NfcmF3cSgpCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiBpbmRpY2VzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBleHBlY3RfbGlzdFtpXS5zZWFyY2goc2VsZi5jb29rZWRxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG06Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUgPSBtLmVuZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNvb2tlZHFbOmVdCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBlbGFwc2VkID0gX3RpbWUoKSAtIHRpbWVfc3RhcnQKLSAgICAgICAgICAgICAgICAgICAgaWYgZWxhcHNlZCA+PSB0aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgY2FsbF90aW1lb3V0ID0gdGltZW91dC1lbGFwc2VkCi0gICAgICAgICAgICBwb2xsZXIudW5yZWdpc3RlcihzZWxmKQotICAgICAgICBpZiBtOgotICAgICAgICAgICAgcmV0dXJuIChpLCBtLCB0ZXh0KQotICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCi0gICAgICAgIGlmIG5vdCB0ZXh0IGFuZCBzZWxmLmVvZjoKLSAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCi0gICAgICAgIHJldHVybiAoLTEsIE5vbmUsIHRleHQpCi0KLSAgICBkZWYgX2V4cGVjdF93aXRoX3NlbGVjdChzZWxmLCBsaXN0LCB0aW1lb3V0PU5vbmUpOgotICAgICAgICAiIiJSZWFkIHVudGlsIG9uZSBmcm9tIGEgbGlzdCBvZiBhIHJlZ3VsYXIgZXhwcmVzc2lvbnMgbWF0Y2hlcy4KLQotICAgICAgICBUaGUgdGltZW91dCBpcyBpbXBsZW1lbnRlZCB1c2luZyBzZWxlY3Quc2VsZWN0KCkuCi0gICAgICAgICIiIgogICAgICAgICByZSA9IE5vbmUKICAgICAgICAgbGlzdCA9IGxpc3RbOl0KICAgICAgICAgaW5kaWNlcyA9IHJhbmdlKGxlbihsaXN0KSkKQEAgLTczMCwyNyArNjE0LDI3IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHJlOiBpbXBvcnQgcmUKICAgICAgICAgICAgICAgICBsaXN0W2ldID0gcmUuY29tcGlsZShsaXN0W2ldKQogICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdGltZV9zdGFydCA9IF90aW1lKCkKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHNlbGYucHJvY2Vzc19yYXdxKCkKLSAgICAgICAgICAgIGZvciBpIGluIGluZGljZXM6Ci0gICAgICAgICAgICAgICAgbSA9IGxpc3RbaV0uc2VhcmNoKHNlbGYuY29va2VkcSkKLSAgICAgICAgICAgICAgICBpZiBtOgotICAgICAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQotICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gc2VsZi5jb29rZWRxWzplXQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvb2tlZHEgPSBzZWxmLmNvb2tlZHFbZTpdCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSwgbSwgdGV4dCkKLSAgICAgICAgICAgIGlmIHNlbGYuZW9mOgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIGVsYXBzZWQgPSBfdGltZSgpIC0gdGltZV9zdGFydAotICAgICAgICAgICAgICAgIGlmIGVsYXBzZWQgPj0gdGltZW91dDoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICBzX2FyZ3MgPSAoW3NlbGYuZmlsZW5vKCldLCBbXSwgW10sIHRpbWVvdXQtZWxhcHNlZCkKLSAgICAgICAgICAgICAgICByLCB3LCB4ID0gc2VsZWN0LnNlbGVjdCgqc19hcmdzKQotICAgICAgICAgICAgICAgIGlmIG5vdCByOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQorICAgICAgICAgICAgZGVhZGxpbmUgPSBfdGltZSgpICsgdGltZW91dAorICAgICAgICB3aXRoIF9UZWxuZXRTZWxlY3RvcigpIGFzIHNlbGVjdG9yOgorICAgICAgICAgICAgc2VsZWN0b3IucmVnaXN0ZXIoc2VsZiwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICB3aGlsZSBub3Qgc2VsZi5lb2Y6CisgICAgICAgICAgICAgICAgc2VsZi5wcm9jZXNzX3Jhd3EoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIGluZGljZXM6CisgICAgICAgICAgICAgICAgICAgIG0gPSBsaXN0W2ldLnNlYXJjaChzZWxmLmNvb2tlZHEpCisgICAgICAgICAgICAgICAgICAgIGlmIG06CisgICAgICAgICAgICAgICAgICAgICAgICBlID0gbS5lbmQoKQorICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHNlbGYuY29va2VkcVs6ZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29va2VkcSA9IHNlbGYuY29va2VkcVtlOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaSwgbSwgdGV4dCkKKyAgICAgICAgICAgICAgICBpZiB0aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICByZWFkeSA9IHNlbGVjdG9yLnNlbGVjdCh0aW1lb3V0KQorICAgICAgICAgICAgICAgICAgICB0aW1lb3V0ID0gZGVhZGxpbmUgLSBfdGltZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCByZWFkeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPCAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5maWxsX3Jhd3EoKQogICAgICAgICB0ZXh0ID0gc2VsZi5yZWFkX3ZlcnlfbGF6eSgpCiAgICAgICAgIGlmIG5vdCB0ZXh0IGFuZCBzZWxmLmVvZjoKICAgICAgICAgICAgIHJhaXNlIEVPRkVycm9yCmRpZmYgLS1naXQgYS9MaWIvdGVtcGZpbGUucHkgYi9MaWIvdGVtcGZpbGUucHkKaW5kZXggNmJjODQyZi4uMDUzNzIyOCAxMDA2NDQKLS0tIGEvTGliL3RlbXBmaWxlLnB5CisrKyBiL0xpYi90ZW1wZmlsZS5weQpAQCAtMSwxMCArMSwxMCBAQAogIiIiVGVtcG9yYXJ5IGZpbGVzLgogCiBUaGlzIG1vZHVsZSBwcm92aWRlcyBnZW5lcmljLCBsb3ctIGFuZCBoaWdoLWxldmVsIGludGVyZmFjZXMgZm9yCi1jcmVhdGluZyB0ZW1wb3JhcnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLiAgVGhlIGludGVyZmFjZXMgbGlzdGVkCi1hcyAic2FmZSIganVzdCBiZWxvdyBjYW4gYmUgdXNlZCB3aXRob3V0IGZlYXIgb2YgcmFjZSBjb25kaXRpb25zLgotVGhvc2UgbGlzdGVkIGFzICJ1bnNhZmUiIGNhbm5vdCwgYW5kIGFyZSBwcm92aWRlZCBmb3IgYmFja3dhcmQKLWNvbXBhdGliaWxpdHkgb25seS4KK2NyZWF0aW5nIHRlbXBvcmFyeSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuICBBbGwgb2YgdGhlIGludGVyZmFjZXMKK3Byb3ZpZGVkIGJ5IHRoaXMgbW9kdWxlIGNhbiBiZSB1c2VkIHdpdGhvdXQgZmVhciBvZiByYWNlIGNvbmRpdGlvbnMKK2V4Y2VwdCBmb3IgJ21rdGVtcCcuICAnbWt0ZW1wJyBpcyBzdWJqZWN0IHRvIHJhY2UgY29uZGl0aW9ucyBhbmQKK3Nob3VsZCBub3QgYmUgdXNlZDsgaXQgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb25seS4KIAogVGhpcyBtb2R1bGUgYWxzbyBwcm92aWRlcyBzb21lIGRhdGEgaXRlbXMgdG8gdGhlIHVzZXI6CiAKQEAgLTI3LDcgKzI3LDYgQEAKIAogIyBJbXBvcnRzLgogCi1pbXBvcnQgYXRleGl0IGFzIF9hdGV4aXQKIGltcG9ydCBmdW5jdG9vbHMgYXMgX2Z1bmN0b29scwogaW1wb3J0IHdhcm5pbmdzIGFzIF93YXJuaW5ncwogaW1wb3J0IGlvIGFzIF9pbwpAQCAtMzUsMjMgKzM0LDcgQEAKIGltcG9ydCBzaHV0aWwgYXMgX3NodXRpbAogaW1wb3J0IGVycm5vIGFzIF9lcnJubwogZnJvbSByYW5kb20gaW1wb3J0IFJhbmRvbSBhcyBfUmFuZG9tCi0KLXRyeToKLSAgICBpbXBvcnQgZmNudGwgYXMgX2ZjbnRsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgZGVmIF9zZXRfY2xvZXhlYyhmZCk6Ci0gICAgICAgIHBhc3MKLWVsc2U6Ci0gICAgZGVmIF9zZXRfY2xvZXhlYyhmZCk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZsYWdzID0gX2ZjbnRsLmZjbnRsKGZkLCBfZmNudGwuRl9HRVRGRCwgMCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAjIGZsYWdzIHJlYWQgc3VjY2Vzc2Z1bGx5LCBtb2RpZnkKLSAgICAgICAgICAgIGZsYWdzIHw9IF9mY250bC5GRF9DTE9FWEVDCi0gICAgICAgICAgICBfZmNudGwuZmNudGwoZmQsIF9mY250bC5GX1NFVEZELCBmbGFncykKLQoraW1wb3J0IHdlYWtyZWYgYXMgX3dlYWtyZWYKIAogdHJ5OgogICAgIGltcG9ydCBfdGhyZWFkCkBAIC02MCw4ICs0Myw2IEBACiBfYWxsb2NhdGVfbG9jayA9IF90aHJlYWQuYWxsb2NhdGVfbG9jawogCiBfdGV4dF9vcGVuZmxhZ3MgPSBfb3MuT19SRFdSIHwgX29zLk9fQ1JFQVQgfCBfb3MuT19FWENMCi1pZiBoYXNhdHRyKF9vcywgJ09fTk9JTkhFUklUJyk6Ci0gICAgX3RleHRfb3BlbmZsYWdzIHw9IF9vcy5PX05PSU5IRVJJVAogaWYgaGFzYXR0cihfb3MsICdPX05PRk9MTE9XJyk6CiAgICAgX3RleHRfb3BlbmZsYWdzIHw9IF9vcy5PX05PRk9MTE9XCiAKQEAgLTkwLDggKzcxLDggQEAKICAgICAjIEZhbGxiYWNrLiAgQWxsIHdlIG5lZWQgaXMgc29tZXRoaW5nIHRoYXQgcmFpc2VzIE9TRXJyb3IgaWYgdGhlCiAgICAgIyBmaWxlIGRvZXNuJ3QgZXhpc3QuCiAgICAgZGVmIF9zdGF0KGZuKToKLSAgICAgICAgZiA9IG9wZW4oZm4pCi0gICAgICAgIGYuY2xvc2UoKQorICAgICAgICBmZCA9IF9vcy5vcGVuKGZuLCBfb3MuT19SRE9OTFkpCisgICAgICAgIF9vcy5jbG9zZShmZCkKIAogZGVmIF9leGlzdHMoZm4pOgogICAgIHRyeToKQEAgLTEyNSw3ICsxMDYsNyBAQAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKICAgICAgICAgYyA9IHNlbGYuY2hhcmFjdGVycwogICAgICAgICBjaG9vc2UgPSBzZWxmLnJuZy5jaG9pY2UKLSAgICAgICAgbGV0dGVycyA9IFtjaG9vc2UoYykgZm9yIGR1bW15IGluICIxMjM0NTYiXQorICAgICAgICBsZXR0ZXJzID0gW2Nob29zZShjKSBmb3IgZHVtbXkgaW4gcmFuZ2UoOCldCiAgICAgICAgIHJldHVybiAnJy5qb2luKGxldHRlcnMpCiAKIGRlZiBfY2FuZGlkYXRlX3RlbXBkaXJfbGlzdCgpOgpAQCAtMTY3LDcgKzE0OCw3IEBACiAKICAgICBmb3IgZGlyIGluIGRpcmxpc3Q6CiAgICAgICAgIGlmIGRpciAhPSBfb3MuY3VyZGlyOgotICAgICAgICAgICAgZGlyID0gX29zLnBhdGgubm9ybWNhc2UoX29zLnBhdGguYWJzcGF0aChkaXIpKQorICAgICAgICAgICAgZGlyID0gX29zLnBhdGguYWJzcGF0aChkaXIpCiAgICAgICAgICMgVHJ5IG9ubHkgYSBmZXcgbmFtZXMgcGVyIGRpcmVjdG9yeS4KICAgICAgICAgZm9yIHNlcSBpbiByYW5nZSgxMDApOgogICAgICAgICAgICAgbmFtZSA9IG5leHQobmFtZXIpCkBAIC0xODUsNiArMTY2LDEzIEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGRpcgogICAgICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBleGNlcHQgUGVybWlzc2lvbkVycm9yOgorICAgICAgICAgICAgICAgICMgVGhpcyBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gYSBkaXJlY3Rvcnkgd2l0aCB0aGUgY2hvc2VuIG5hbWUKKyAgICAgICAgICAgICAgICAjIGFscmVhZHkgZXhpc3RzIG9uIHdpbmRvd3MuCisgICAgICAgICAgICAgICAgaWYgKF9vcy5uYW1lID09ICdudCcgYW5kIF9vcy5wYXRoLmlzZGlyKGRpcikgYW5kCisgICAgICAgICAgICAgICAgICAgIF9vcy5hY2Nlc3MoZGlyLCBfb3MuV19PSykpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGJyZWFrICAgIyBubyBwb2ludCB0cnlpbmcgbW9yZSBuYW1lcyBpbiB0aGlzIGRpcmVjdG9yeQogICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgYnJlYWsgICAjIG5vIHBvaW50IHRyeWluZyBtb3JlIG5hbWVzIGluIHRoaXMgZGlyZWN0b3J5CiAgICAgcmFpc2UgRmlsZU5vdEZvdW5kRXJyb3IoX2Vycm5vLkVOT0VOVCwKQEAgLTIxNywxNCArMjA1LDE0IEBACiAgICAgICAgIGZpbGUgPSBfb3MucGF0aC5qb2luKGRpciwgcHJlICsgbmFtZSArIHN1ZikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZmQgPSBfb3Mub3BlbihmaWxlLCBmbGFncywgMG82MDApCi0gICAgICAgICAgICBfc2V0X2Nsb2V4ZWMoZmQpCiAgICAgICAgICAgICByZXR1cm4gKGZkLCBfb3MucGF0aC5hYnNwYXRoKGZpbGUpKQogICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgogICAgICAgICAgICAgY29udGludWUgICAgIyB0cnkgYWdhaW4KICAgICAgICAgZXhjZXB0IFBlcm1pc3Npb25FcnJvcjoKICAgICAgICAgICAgICMgVGhpcyBleGNlcHRpb24gaXMgdGhyb3duIHdoZW4gYSBkaXJlY3Rvcnkgd2l0aCB0aGUgY2hvc2VuIG5hbWUKICAgICAgICAgICAgICMgYWxyZWFkeSBleGlzdHMgb24gd2luZG93cy4KLSAgICAgICAgICAgIGlmIF9vcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICBpZiAoX29zLm5hbWUgPT0gJ250JyBhbmQgX29zLnBhdGguaXNkaXIoZGlyKSBhbmQKKyAgICAgICAgICAgICAgICBfb3MuYWNjZXNzKGRpciwgX29zLldfT0spKToKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQpAQCAtMzE2LDYgKzMwNCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIGZpbGUKICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgICAgIGNvbnRpbnVlICAgICMgdHJ5IGFnYWluCisgICAgICAgIGV4Y2VwdCBQZXJtaXNzaW9uRXJyb3I6CisgICAgICAgICAgICAjIFRoaXMgZXhjZXB0aW9uIGlzIHRocm93biB3aGVuIGEgZGlyZWN0b3J5IHdpdGggdGhlIGNob3NlbiBuYW1lCisgICAgICAgICAgICAjIGFscmVhZHkgZXhpc3RzIG9uIHdpbmRvd3MuCisgICAgICAgICAgICBpZiAoX29zLm5hbWUgPT0gJ250JyBhbmQgX29zLnBhdGguaXNkaXIoZGlyKSBhbmQKKyAgICAgICAgICAgICAgICBfb3MuYWNjZXNzKGRpciwgX29zLldfT0spKToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByYWlzZQogCiAgICAgcmFpc2UgRmlsZUV4aXN0c0Vycm9yKF9lcnJuby5FRVhJU1QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJObyB1c2FibGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBuYW1lIGZvdW5kIikKQEAgLTM1Niw4ICszNTIsNyBAQAogICAgIHVuZGVybHlpbmcgZmlsZSBvYmplY3QsIHdpdGhvdXQgYWRkaW5nIGEgX19kZWxfXyBtZXRob2QgdG8gdGhlCiAgICAgdGVtcG9yYXJ5IGZpbGUuIiIiCiAKLSAgICAjIFNldCBoZXJlIHNpbmNlIF9fZGVsX18gY2hlY2tzIGl0Ci0gICAgZmlsZSA9IE5vbmUKKyAgICBmaWxlID0gTm9uZSAgIyBTZXQgaGVyZSBzaW5jZSBfX2RlbF9fIGNoZWNrcyBpdAogICAgIGNsb3NlX2NhbGxlZCA9IEZhbHNlCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgbmFtZSwgZGVsZXRlPVRydWUpOgpAQCAtMzc4LDkgKzM3MywxMSBAQAogICAgICAgICBkZWYgY2xvc2Uoc2VsZiwgdW5saW5rPV9vcy51bmxpbmspOgogICAgICAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VfY2FsbGVkIGFuZCBzZWxmLmZpbGUgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgc2VsZi5jbG9zZV9jYWxsZWQgPSBUcnVlCi0gICAgICAgICAgICAgICAgc2VsZi5maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBpZiBzZWxmLmRlbGV0ZToKLSAgICAgICAgICAgICAgICAgICAgdW5saW5rKHNlbGYubmFtZSkKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5kZWxldGU6CisgICAgICAgICAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5uYW1lKQogCiAgICAgICAgICMgTmVlZCB0byBlbnN1cmUgdGhlIGZpbGUgaXMgZGVsZXRlZCBvbiBfX2RlbF9fCiAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgpAQCAtNDQ3LDcgKzQ0NCwxMyBAQAogCiAgICAgIyBpdGVyKCkgZG9lc24ndCB1c2UgX19nZXRhdHRyX18gdG8gZmluZCB0aGUgX19pdGVyX18gbWV0aG9kCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gaXRlcihzZWxmLmZpbGUpCisgICAgICAgICMgRG9uJ3QgcmV0dXJuIGl0ZXIoc2VsZi5maWxlKSwgYnV0IHlpZWxkIGZyb20gaXQgdG8gYXZvaWQgY2xvc2luZworICAgICAgICAjIGZpbGUgYXMgbG9uZyBhcyBpdCdzIGJlaW5nIHVzZWQgYXMgaXRlcmF0b3IgKHNlZSBpc3N1ZSAjMjM3MDApLiAgV2UKKyAgICAgICAgIyBjYW4ndCB1c2UgJ3lpZWxkIGZyb20nIGhlcmUgYmVjYXVzZSBpdGVyKGZpbGUpIHJldHVybnMgdGhlIGZpbGUKKyAgICAgICAgIyBvYmplY3QgaXRzZWxmLCB3aGljaCBoYXMgYSBjbG9zZSBtZXRob2QsIGFuZCB0aHVzIHRoZSBmaWxlIHdvdWxkIGdldAorICAgICAgICAjIGNsb3NlZCB3aGVuIHRoZSBnZW5lcmF0b3IgaXMgZmluYWxpemVkLCBkdWUgdG8gUEVQMzgwIHNlbWFudGljcy4KKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5maWxlOgorICAgICAgICAgICAgeWllbGQgbGluZQogCiAKIGRlZiBOYW1lZFRlbXBvcmFyeUZpbGUobW9kZT0ndytiJywgYnVmZmVyaW5nPS0xLCBlbmNvZGluZz1Ob25lLApAQCAtNDc5LDEwICs0ODIsMTQgQEAKICAgICAgICAgZmxhZ3MgfD0gX29zLk9fVEVNUE9SQVJZCiAKICAgICAoZmQsIG5hbWUpID0gX21rc3RlbXBfaW5uZXIoZGlyLCBwcmVmaXgsIHN1ZmZpeCwgZmxhZ3MpCi0gICAgZmlsZSA9IF9pby5vcGVuKGZkLCBtb2RlLCBidWZmZXJpbmc9YnVmZmVyaW5nLAotICAgICAgICAgICAgICAgICAgICBuZXdsaW5lPW5ld2xpbmUsIGVuY29kaW5nPWVuY29kaW5nKQorICAgIHRyeToKKyAgICAgICAgZmlsZSA9IF9pby5vcGVuKGZkLCBtb2RlLCBidWZmZXJpbmc9YnVmZmVyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZT1uZXdsaW5lLCBlbmNvZGluZz1lbmNvZGluZykKIAotICAgIHJldHVybiBfVGVtcG9yYXJ5RmlsZVdyYXBwZXIoZmlsZSwgbmFtZSwgZGVsZXRlKQorICAgICAgICByZXR1cm4gX1RlbXBvcmFyeUZpbGVXcmFwcGVyKGZpbGUsIG5hbWUsIGRlbGV0ZSkKKyAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICBfb3MuY2xvc2UoZmQpCisgICAgICAgIHJhaXNlCiAKIGlmIF9vcy5uYW1lICE9ICdwb3NpeCcgb3IgX29zLnN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKICAgICAjIE9uIG5vbi1QT1NJWCBhbmQgQ3lnd2luIHN5c3RlbXMsIGFzc3VtZSB0aGF0IHdlIGNhbm5vdCB1bmxpbmsgYSBmaWxlCkBAIC01MzUsNyArNTQyLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgICMgU2V0dGluZyBuZXdsaW5lPSJcbiIgYXZvaWRzIG5ld2xpbmUgdHJhbnNsYXRpb247CiAgICAgICAgICAgICAjIHRoaXMgaXMgaW1wb3J0YW50IGJlY2F1c2Ugb3RoZXJ3aXNlIG9uIFdpbmRvd3Mgd2UnZAotICAgICAgICAgICAgIyBoZ2V0IGRvdWJsZSBuZXdsaW5lIHRyYW5zbGF0aW9uIHVwb24gcm9sbG92ZXIoKS4KKyAgICAgICAgICAgICMgZ2V0IGRvdWJsZSBuZXdsaW5lIHRyYW5zbGF0aW9uIHVwb24gcm9sbG92ZXIoKS4KICAgICAgICAgICAgIHNlbGYuX2ZpbGUgPSBfaW8uU3RyaW5nSU8obmV3bGluZT0iXG4iKQogICAgICAgICBzZWxmLl9tYXhfc2l6ZSA9IG1heF9zaXplCiAgICAgICAgIHNlbGYuX3JvbGxlZCA9IEZhbHNlCkBAIC02ODAsMTIgKzY4NywxNyBAQAogICAgIGluIGl0IGFyZSByZW1vdmVkLgogICAgICIiIgogCi0gICAgIyBIYW5kbGUgbWtkdGVtcCByYWlzaW5nIGFuIGV4Y2VwdGlvbgotICAgIG5hbWUgPSBOb25lCi0gICAgX2Nsb3NlZCA9IEZhbHNlCi0KICAgICBkZWYgX19pbml0X18oc2VsZiwgc3VmZml4PSIiLCBwcmVmaXg9dGVtcGxhdGUsIGRpcj1Ob25lKToKICAgICAgICAgc2VsZi5uYW1lID0gbWtkdGVtcChzdWZmaXgsIHByZWZpeCwgZGlyKQorICAgICAgICBzZWxmLl9maW5hbGl6ZXIgPSBfd2Vha3JlZi5maW5hbGl6ZSgKKyAgICAgICAgICAgIHNlbGYsIHNlbGYuX2NsZWFudXAsIHNlbGYubmFtZSwKKyAgICAgICAgICAgIHdhcm5fbWVzc2FnZT0iSW1wbGljaXRseSBjbGVhbmluZyB1cCB7IXJ9Ii5mb3JtYXQoc2VsZikpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NsZWFudXAoY2xzLCBuYW1lLCB3YXJuX21lc3NhZ2UpOgorICAgICAgICBfc2h1dGlsLnJtdHJlZShuYW1lKQorICAgICAgICBfd2FybmluZ3Mud2Fybih3YXJuX21lc3NhZ2UsIFJlc291cmNlV2FybmluZykKKwogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIjx7fSB7IXJ9PiIuZm9ybWF0KHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBzZWxmLm5hbWUpCkBAIC02OTMsNTMgKzcwNSw5IEBACiAgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubmFtZQogCi0gICAgZGVmIGNsZWFudXAoc2VsZiwgX3dhcm49RmFsc2UsIF93YXJuaW5ncz1fd2FybmluZ3MpOgotICAgICAgICBpZiBzZWxmLm5hbWUgYW5kIG5vdCBzZWxmLl9jbG9zZWQ6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgX3NodXRpbC5ybXRyZWUoc2VsZi5uYW1lKQotICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSBhcyBleDoKLSAgICAgICAgICAgICAgICBpZiAiTm9uZSIgbm90IGluICclcycgJSAoZXgsKToKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICBzZWxmLl9ybXRyZWUoc2VsZi5uYW1lKQotICAgICAgICAgICAgc2VsZi5fY2xvc2VkID0gVHJ1ZQotICAgICAgICAgICAgaWYgX3dhcm4gYW5kIF93YXJuaW5ncy53YXJuOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgX3dhcm5pbmdzLndhcm4oIkltcGxpY2l0bHkgY2xlYW5pbmcgdXAgeyFyfSIuZm9ybWF0KHNlbGYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNvdXJjZVdhcm5pbmcpCi0gICAgICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgICAgICBpZiBfaXNfcnVubmluZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIG1vZHVsZXMgbmVlZGVkIGZvciBlbWl0dGluZwotICAgICAgICAgICAgICAgICAgICAjIGEgd2FybmluZyBhcmUgYWxyZWFkeSBjbGVhbmVkIGluIHNodXRkb3duIHByb2Nlc3MuCi0KICAgICBkZWYgX19leGl0X18oc2VsZiwgZXhjLCB2YWx1ZSwgdGIpOgogICAgICAgICBzZWxmLmNsZWFudXAoKQogCi0gICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgICMgSXNzdWUgYSBSZXNvdXJjZVdhcm5pbmcgaWYgaW1wbGljaXQgY2xlYW51cCBuZWVkZWQKLSAgICAgICAgc2VsZi5jbGVhbnVwKF93YXJuPVRydWUpCi0KLSAgICBkZWYgX3JtdHJlZShzZWxmLCBwYXRoLCBfT1NFcnJvcj1PU0Vycm9yLCBfc2VwPV9vcy5wYXRoLnNlcCwKLSAgICAgICAgICAgICAgICBfbGlzdGRpcj1fb3MubGlzdGRpciwgX3JlbW92ZT1fb3MucmVtb3ZlLCBfcm1kaXI9X29zLnJtZGlyKToKLSAgICAgICAgIyBFc3NlbnRpYWxseSBhIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiBzaHV0aWwucm10cmVlLiAgV2UgY2FuJ3QKLSAgICAgICAgIyB1c2UgZ2xvYmFscyBiZWNhdXNlIHRoZXkgbWF5IGJlIE5vbmUnZWQgb3V0IGF0IHNodXRkb3duLgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShwYXRoLCBzdHIpOgotICAgICAgICAgICAgX3NlcCA9IF9zZXAuZW5jb2RlKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZm9yIG5hbWUgaW4gX2xpc3RkaXIocGF0aCk6Ci0gICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBwYXRoICsgX3NlcCArIG5hbWUKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIF9yZW1vdmUoZnVsbG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IF9PU0Vycm9yOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ybXRyZWUoZnVsbG5hbWUpCi0gICAgICAgICAgICBfcm1kaXIocGF0aCkKLSAgICAgICAgZXhjZXB0IF9PU0Vycm9yOgotICAgICAgICAgICAgcGFzcwotCi1faXNfcnVubmluZyA9IFRydWUKLQotZGVmIF9vbl9zaHV0ZG93bigpOgotICAgIGdsb2JhbCBfaXNfcnVubmluZwotICAgIF9pc19ydW5uaW5nID0gRmFsc2UKLQotX2F0ZXhpdC5yZWdpc3Rlcihfb25fc2h1dGRvd24pCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX2ZpbmFsaXplci5kZXRhY2goKToKKyAgICAgICAgICAgIF9zaHV0aWwucm10cmVlKHNlbGYubmFtZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvX19tYWluX18ucHkKaW5kZXggY2U1NjE1Yi4uZDVmYmUxNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvX19tYWluX18ucHkKKysrIGIvTGliL3Rlc3QvX19tYWluX18ucHkKQEAgLTEsMTMgKzEsMyBAQAotZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdCwgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdAogCi0KLVRFTVBESVIsIFRFU1RDV0QgPSByZWdydGVzdC5fbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQocmVncnRlc3QuVEVNUERJUikKLXJlZ3J0ZXN0LlRFTVBESVIgPSBURU1QRElSCi1yZWdydGVzdC5URVNUQ1dEID0gVEVTVENXRAotCi0jIFJ1biB0aGUgdGVzdHMgaW4gYSBjb250ZXh0IG1hbmFnZXIgdGhhdCB0ZW1wb3JhcnkgY2hhbmdlcyB0aGUgQ1dEIHRvIGEKLSMgdGVtcG9yYXJ5IGFuZCB3cml0YWJsZSBkaXJlY3RvcnkuIElmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBvcgotIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKLSMgYXZhaWxhYmxlIGZyb20gc3VwcG9ydC5TQVZFRENXRC4KLXdpdGggc3VwcG9ydC50ZW1wX2N3ZChURVNUQ1dELCBxdWlldD1UcnVlKToKLSAgICByZWdydGVzdC5tYWluKCkKK3JlZ3J0ZXN0Lm1haW5faW5fdGVtcF9jd2QoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKc2ltaWxhcml0eSBpbmRleCA4NyUKcmVuYW1lIGZyb20gTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKcmVuYW1lIHRvIExpYi90ZXN0L190ZXN0X211bHRpcHJvY2Vzc2luZy5weQppbmRleCBhYTY2ZGI0Li4yMDRkODk0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZy5weQorKysgYi9MaWIvdGVzdC9fdGVzdF9tdWx0aXByb2Nlc3NpbmcucHkKQEAgLTQxLDcgKzQxLDcgQEAKIAogdHJ5OgogICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCByZWR1Y3Rpb24KLSAgICBIQVNfUkVEVUNUSU9OID0gVHJ1ZQorICAgIEhBU19SRURVQ1RJT04gPSByZWR1Y3Rpb24uSEFWRV9TRU5EX0hBTkRMRQogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIEhBU19SRURVQ1RJT04gPSBGYWxzZQogCkBAIC05Nyw2ICs5Nyw5IEBACiBleGNlcHQ6CiAgICAgTUFYRkQgPSAyNTYKIAorIyBUbyBzcGVlZCB1cCB0ZXN0cyB3aGVuIHVzaW5nIHRoZSBmb3Jrc2VydmVyLCB3ZSBjYW4gcHJlbG9hZCB0aGVzZToKK1BSRUxPQUQgPSBbJ19fbWFpbl9fJywgJ3Rlc3QudGVzdF9tdWx0aXByb2Nlc3NpbmdfZm9ya3NlcnZlciddCisKICMKICMgU29tZSB0ZXN0cyByZXF1aXJlIGN0eXBlcwogIwpAQCAtMjkyLDE3ICsyOTUsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUaW1pbmdBbG1vc3RFcXVhbChqb2luLmVsYXBzZWQsIDAuMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmlzX2FsaXZlKCksIFRydWUpCiAKKyAgICAgICAgIyBYWFggbWF5YmUgdGVybWluYXRpbmcgdG9vIHNvb24gY2F1c2VzIHRoZSBwcm9ibGVtcyBvbiBHZW50b28uLi4KKyAgICAgICAgdGltZS5zbGVlcCgxKQorCiAgICAgICAgIHAudGVybWluYXRlKCkKIAogICAgICAgICBpZiBoYXNhdHRyKHNpZ25hbCwgJ2FsYXJtJyk6CisgICAgICAgICAgICAjIE9uIHRoZSBHZW50b28gYnVpbGRib3Qgd2FpdHBpZCgpIG9mdGVuIHNlZW1zIHRvIGJsb2NrIGZvcmV2ZXIuCisgICAgICAgICAgICAjIFdlIHVzZSBhbGFybSgpIHRvIGludGVycnVwdCBpdCBpZiBpdCBibG9ja3MgZm9yIHRvbyBsb25nLgogICAgICAgICAgICAgZGVmIGhhbmRsZXIoKmFyZ3MpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignam9pbiB0b29rIHRvbyBsb25nOiAlcycgJSBwKQogICAgICAgICAgICAgb2xkX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNpZ25hbC5hbGFybSgxMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKLSAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDApCiAgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHQUxSTSwgb2xkX2hhbmRsZXIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oKSwgTm9uZSkKQEAgLTM0MCw3ICszNDgsNiBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF90ZXN0X3JlY3Vyc2lvbihjbHMsIHdjb25uLCBpZCk6Ci0gICAgICAgIGZyb20gbXVsdGlwcm9jZXNzaW5nIGltcG9ydCBmb3JraW5nCiAgICAgICAgIHdjb25uLnNlbmQoaWQpCiAgICAgICAgIGlmIGxlbihpZCkgPCAyOgogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CkBAIC0zODgsNyArMzk1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MC4wKSkKICAgICAgICAgZXZlbnQuc2V0KCkKICAgICAgICAgcC5qb2luKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRfZm9yX2hhbmRsZShzZW50aW5lbCwgdGltZW91dD1ERUxUQSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0X2Zvcl9oYW5kbGUoc2VudGluZWwsIHRpbWVvdXQ9MSkpCiAKICMKICMKQEAgLTY4OCw5ICs2OTUsNiBAQAogICAgIGRlZiB0ZXN0X3Rhc2tfZG9uZShzZWxmKToKICAgICAgICAgcXVldWUgPSBzZWxmLkpvaW5hYmxlUXVldWUoKQogCi0gICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPCAoMiwgNSkgYW5kIG5vdCBoYXNhdHRyKHF1ZXVlLCAndGFza19kb25lJyk6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJyZXF1aXJlcyAncXVldWUudGFza19kb25lKCknIG1ldGhvZCIpCi0KICAgICAgICAgd29ya2VycyA9IFtzZWxmLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfdGFza19kb25lLCBhcmdzPShxdWV1ZSwpKQogICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDQpXQogCkBAIC03MDksMTIgKzcxMywzNSBAQAogICAgICAgICBmb3IgcCBpbiB3b3JrZXJzOgogICAgICAgICAgICAgcC5qb2luKCkKIAorICAgIGRlZiB0ZXN0X25vX2ltcG9ydF9sb2NrX2NvbnRlbnRpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCk6CisgICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdpbXBvcnRlZF9ieV9hbl9pbXBvcnRlZF9tb2R1bGUnCisgICAgICAgICAgICB3aXRoIG9wZW4obW9kdWxlX25hbWUgKyAnLnB5JywgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoIiIiaWYgMToKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZworCisgICAgICAgICAgICAgICAgICAgIHEgPSBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorICAgICAgICAgICAgICAgICAgICBxLnB1dCgna25vY2sga25vY2snKQorICAgICAgICAgICAgICAgICAgICBxLmdldCh0aW1lb3V0PTMpCisgICAgICAgICAgICAgICAgICAgIHEuY2xvc2UoKQorICAgICAgICAgICAgICAgICAgICBkZWwgcQorICAgICAgICAgICAgICAgICIiIikKKworICAgICAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuRGlyc09uU3lzUGF0aChvcy5nZXRjd2QoKSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKG1vZHVsZV9uYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBweXF1ZXVlLkVtcHR5OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlByb2JhYmxlIHJlZ3Jlc3Npb24gb24gaW1wb3J0IGxvY2sgY29udGVudGlvbjsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHNlZSBJc3N1ZSAjMjI4NTMiKQorCiAgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKICAgICAgICAgcSA9IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocHlxdWV1ZS5FbXB0eSwgcS5nZXQsIFRydWUsIDAuMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocHlxdWV1ZS5FbXB0eSwgcS5nZXQsIFRydWUsIDAuMjAwKQogICAgICAgICBkZWx0YSA9IHRpbWUudGltZSgpIC0gc3RhcnQKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGVsdGEsIDAuMTgpCisgICAgICAgICMgVG9sZXJhdGUgYSBkZWx0YSBvZiAzMCBtcyBiZWNhdXNlIG9mIHRoZSBiYWQgY2xvY2sgcmVzb2x1dGlvbiBvbgorICAgICAgICAjIFdpbmRvd3MgKHVzdWFsbHkgMTUuNiBtcykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGVsdGEsIDAuMTcwKQogCiAjCiAjCkBAIC0xNjMzLDYgKzE2NjAsMTQgQEAKIGRlZiBtdWwoeCwgeSk6CiAgICAgcmV0dXJuIHgqeQogCitjbGFzcyBTYXlXaGVuRXJyb3IoVmFsdWVFcnJvcik6IHBhc3MKKworZGVmIGV4Y2VwdGlvbl90aHJvd2luZ19nZW5lcmF0b3IodG90YWwsIHdoZW4pOgorICAgIGZvciBpIGluIHJhbmdlKHRvdGFsKToKKyAgICAgICAgaWYgaSA9PSB3aGVuOgorICAgICAgICAgICAgcmFpc2UgU2F5V2hlbkVycm9yKCJTb21lYm9keSBzYWlkIHdoZW4iKQorICAgICAgICB5aWVsZCBpCisKIGNsYXNzIF9UZXN0UG9vbChCYXNlVGVzdENhc2UpOgogCiAgICAgQGNsYXNzbWV0aG9kCkBAIC0xNzMxLDYgKzE3NjYsMjUgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksIGkqaSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgaXQuX19uZXh0X18pCiAKKyAgICBkZWYgdGVzdF9pbWFwX2hhbmRsZV9pdGVyYWJsZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGlmIHNlbGYuVFlQRSA9PSAnbWFuYWdlcic6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCd0ZXN0IG5vdCBhcHByb3ByaWF0ZSBmb3Ige30nLmZvcm1hdChzZWxmLlRZUEUpKQorCisgICAgICAgIGl0ID0gc2VsZi5wb29sLmltYXAoc3FyLCBleGNlcHRpb25fdGhyb3dpbmdfZ2VuZXJhdG9yKDEwLCAzKSwgMSkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCBpKmkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFNheVdoZW5FcnJvciwgaXQuX19uZXh0X18pCisKKyAgICAgICAgIyBTYXlXaGVuRXJyb3Igc2VlbiBhdCBzdGFydCBvZiBwcm9ibGVtYXRpYyBjaHVuaydzIHJlc3VsdHMKKyAgICAgICAgaXQgPSBzZWxmLnBvb2wuaW1hcChzcXIsIGV4Y2VwdGlvbl90aHJvd2luZ19nZW5lcmF0b3IoMjAsIDcpLCAyKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksIGkqaSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2F5V2hlbkVycm9yLCBpdC5fX25leHRfXykKKyAgICAgICAgaXQgPSBzZWxmLnBvb2wuaW1hcChzcXIsIGV4Y2VwdGlvbl90aHJvd2luZ19nZW5lcmF0b3IoMjAsIDcpLCA0KQorICAgICAgICBmb3IgaSBpbiByYW5nZSg0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksIGkqaSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2F5V2hlbkVycm9yLCBpdC5fX25leHRfXykKKwogICAgIGRlZiB0ZXN0X2ltYXBfdW5vcmRlcmVkKHNlbGYpOgogICAgICAgICBpdCA9IHNlbGYucG9vbC5pbWFwX3Vub3JkZXJlZChzcXIsIGxpc3QocmFuZ2UoMTAwMCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpdCksIGxpc3QobWFwKHNxciwgbGlzdChyYW5nZSgxMDAwKSkpKSkKQEAgLTE3MzgsNiArMTc5MiwzMSBAQAogICAgICAgICBpdCA9IHNlbGYucG9vbC5pbWFwX3Vub3JkZXJlZChzcXIsIGxpc3QocmFuZ2UoMTAwMCkpLCBjaHVua3NpemU9NTMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGl0KSwgbGlzdChtYXAoc3FyLCBsaXN0KHJhbmdlKDEwMDApKSkpKQogCisgICAgZGVmIHRlc3RfaW1hcF91bm9yZGVyZWRfaGFuZGxlX2l0ZXJhYmxlX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICdtYW5hZ2VyJzoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3Rlc3Qgbm90IGFwcHJvcHJpYXRlIGZvciB7fScuZm9ybWF0KHNlbGYuVFlQRSkpCisKKyAgICAgICAgaXQgPSBzZWxmLnBvb2wuaW1hcF91bm9yZGVyZWQoc3FyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fdGhyb3dpbmdfZ2VuZXJhdG9yKDEwLCAzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkKKyAgICAgICAgZXhwZWN0ZWRfdmFsdWVzID0gbGlzdChtYXAoc3FyLCBsaXN0KHJhbmdlKDEwKSkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNheVdoZW5FcnJvcik6CisgICAgICAgICAgICAjIGltYXBfdW5vcmRlcmVkIG1ha2VzIGl0IGRpZmZpY3VsdCB0byBhbnRpY2lwYXRlIHRoZSBTYXlXaGVuRXJyb3IKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IG5leHQoaXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbih2YWx1ZSwgZXhwZWN0ZWRfdmFsdWVzKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkX3ZhbHVlcy5yZW1vdmUodmFsdWUpCisKKyAgICAgICAgaXQgPSBzZWxmLnBvb2wuaW1hcF91bm9yZGVyZWQoc3FyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHRpb25fdGhyb3dpbmdfZ2VuZXJhdG9yKDIwLCA3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMikKKyAgICAgICAgZXhwZWN0ZWRfdmFsdWVzID0gbGlzdChtYXAoc3FyLCBsaXN0KHJhbmdlKDIwKSkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNheVdoZW5FcnJvcik6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgyMCk6CisgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXh0KGl0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4odmFsdWUsIGV4cGVjdGVkX3ZhbHVlcykKKyAgICAgICAgICAgICAgICBleHBlY3RlZF92YWx1ZXMucmVtb3ZlKHZhbHVlKQorCiAgICAgZGVmIHRlc3RfbWFrZV9wb29sKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtdWx0aXByb2Nlc3NpbmcuUG9vbCwgLTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG11bHRpcHJvY2Vzc2luZy5Qb29sLCAwKQpAQCAtMTc3Nyw2ICsxODU2LDQ2IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldCgpLCBleHBlY3RlZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAubWFwX2FzeW5jLCBzcXIsIEwpCiAKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfdHJhY2ViYWNrKGNscyk6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigxMjMpICMgc29tZSBjb21tZW50CisKKyAgICBkZWYgdGVzdF90cmFjZWJhY2soc2VsZik6CisgICAgICAgICMgV2Ugd2FudCBlbnN1cmUgdGhhdCB0aGUgdHJhY2ViYWNrIGZyb20gdGhlIGNoaWxkIHByb2Nlc3MgaXMKKyAgICAgICAgIyBjb250YWluZWQgaW4gdGhlIHRyYWNlYmFjayByYWlzZWQgaW4gdGhlIG1haW4gcHJvY2Vzcy4KKyAgICAgICAgaWYgc2VsZi5UWVBFID09ICdwcm9jZXNzZXMnOgorICAgICAgICAgICAgd2l0aCBzZWxmLlBvb2woMSkgYXMgcDoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHAuYXBwbHkoc2VsZi5fdGVzdF90cmFjZWJhY2spCisgICAgICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICBleGMgPSBlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ2V4cGVjdGVkIFJ1bnRpbWVFcnJvcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZXhjKSwgUnVudGltZUVycm9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGMuYXJncywgKDEyMywpKQorICAgICAgICAgICAgY2F1c2UgPSBleGMuX19jYXVzZV9fCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoY2F1c2UpLCBtdWx0aXByb2Nlc3NpbmcucG9vbC5SZW1vdGVUcmFjZWJhY2spCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdyYWlzZSBSdW50aW1lRXJyb3IoMTIzKSAjIHNvbWUgY29tbWVudCcsIGNhdXNlLnRiKQorCisgICAgICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBmMToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIGV4YworICAgICAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHN5cy5leGNlcHRob29rKCpzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3JhaXNlIFJ1bnRpbWVFcnJvcigxMjMpICMgc29tZSBjb21tZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZjEuZ2V0dmFsdWUoKSkKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfdGVzdF93cmFwcGVkX2V4Y2VwdGlvbihjbHMpOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2ZvbycpCisKKyAgICBkZWYgdGVzdF93cmFwcGVkX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjA5ODA6IFNob3VsZCBub3Qgd3JhcCBleGNlcHRpb24gd2hlbiB1c2luZyB0aHJlYWQgcG9vbAorICAgICAgICB3aXRoIHNlbGYuUG9vbCgxKSBhcyBwOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIHAuYXBwbHkoc2VsZi5fdGVzdF93cmFwcGVkX2V4Y2VwdGlvbikKKworCiBkZWYgcmFpc2luZygpOgogICAgIHJhaXNlIEtleUVycm9yKCJrZXkiKQogCkBAIC0xOTc0LDYgKzIwOTMsMTIgQEAKIGNsYXNzIF9UZXN0UmVtb3RlTWFuYWdlcihCYXNlVGVzdENhc2UpOgogCiAgICAgQUxMT1dFRF9UWVBFUyA9ICgnbWFuYWdlcicsKQorICAgIHZhbHVlcyA9IFsnaGVsbG8gd29ybGQnLCBOb25lLCBUcnVlLCAyLjI1LAorICAgICAgICAgICAgICAnaGFsbFx4ZTUgdlx4ZTRybGRlbicsCisgICAgICAgICAgICAgICdcdTA0M2ZcdTA0NDBcdTA0MzhcdTA0MzJcdTA0NTZcdTA0NDIgXHUwNDQxXHUwNDMyXHUwNDU2XHUwNDQyJywKKyAgICAgICAgICAgICAgYidoYWxsXHhlNSB2XHhlNHJsZGVuJywKKyAgICAgICAgICAgICBdCisgICAgcmVzdWx0ID0gdmFsdWVzWzpdCiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgX3B1dHRlcihjbHMsIGFkZHJlc3MsIGF1dGhrZXkpOgpAQCAtMTk4Miw3ICsyMTA3LDggQEAKICAgICAgICAgICAgICkKICAgICAgICAgbWFuYWdlci5jb25uZWN0KCkKICAgICAgICAgcXVldWUgPSBtYW5hZ2VyLmdldF9xdWV1ZSgpCi0gICAgICAgIHF1ZXVlLnB1dCgoJ2hlbGxvIHdvcmxkJywgTm9uZSwgVHJ1ZSwgMi4yNSkpCisgICAgICAgICMgTm90ZSB0aGF0IHhtbHJwY2xpYiB3aWxsIGRlc2VyaWFsaXplIG9iamVjdCBhcyBhIGxpc3Qgbm90IGEgdHVwbGUKKyAgICAgICAgcXVldWUucHV0KHR1cGxlKGNscy52YWx1ZXMpKQogCiAgICAgZGVmIHRlc3RfcmVtb3RlKHNlbGYpOgogICAgICAgICBhdXRoa2V5ID0gb3MudXJhbmRvbSgzMikKQEAgLTIwMDIsOCArMjEyOCw3IEBACiAgICAgICAgIG1hbmFnZXIyLmNvbm5lY3QoKQogICAgICAgICBxdWV1ZSA9IG1hbmFnZXIyLmdldF9xdWV1ZSgpCiAKLSAgICAgICAgIyBOb3RlIHRoYXQgeG1scnBjbGliIHdpbGwgZGVzZXJpYWxpemUgb2JqZWN0IGFzIGEgbGlzdCBub3QgYSB0dXBsZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHF1ZXVlLmdldCgpLCBbJ2hlbGxvIHdvcmxkJywgTm9uZSwgVHJ1ZSwgMi4yNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVldWUuZ2V0KCksIHNlbGYucmVzdWx0KQogCiAgICAgICAgICMgQmVjYXVzZSB3ZSBhcmUgdXNpbmcgeG1scnBjbGliIGZvciBzZXJpYWxpemF0aW9uIGluc3RlYWQgb2YKICAgICAgICAgIyBwaWNrbGUgdGhpcyB3aWxsIGNhdXNlIGEgc2VyaWFsaXphdGlvbiBlcnJvci4KQEAgLTI0ODQsNyArMjYwOSw3IEBACiAKICAgICBAY2xhc3NtZXRob2QKICAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgotICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZy5yZWR1Y3Rpb24gaW1wb3J0IHJlc291cmNlX3NoYXJlcgorICAgICAgICBmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgcmVzb3VyY2Vfc2hhcmVyCiAgICAgICAgIHJlc291cmNlX3NoYXJlci5zdG9wKHRpbWVvdXQ9NSkKIAogICAgIEBjbGFzc21ldGhvZApAQCAtMjc5OCwzMCArMjkyMyw0MCBAQAogIyBUZXN0IHRoYXQgZnJvbSAuLi4gaW1wb3J0ICogd29ya3MgZm9yIGVhY2ggbW9kdWxlCiAjCiAKLWNsYXNzIF9UZXN0SW1wb3J0U3RhcihCYXNlVGVzdENhc2UpOgorY2xhc3MgX1Rlc3RJbXBvcnRTdGFyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIEFMTE9XRURfVFlQRVMgPSAoJ3Byb2Nlc3NlcycsKQorICAgIGRlZiBnZXRfbW9kdWxlX25hbWVzKHNlbGYpOgorICAgICAgICBpbXBvcnQgZ2xvYgorICAgICAgICBmb2xkZXIgPSBvcy5wYXRoLmRpcm5hbWUobXVsdGlwcm9jZXNzaW5nLl9fZmlsZV9fKQorICAgICAgICBwYXR0ZXJuID0gb3MucGF0aC5qb2luKGZvbGRlciwgJyoucHknKQorICAgICAgICBmaWxlcyA9IGdsb2IuZ2xvYihwYXR0ZXJuKQorICAgICAgICBtb2R1bGVzID0gW29zLnBhdGguc3BsaXRleHQob3MucGF0aC5zcGxpdChmKVsxXSlbMF0gZm9yIGYgaW4gZmlsZXNdCisgICAgICAgIG1vZHVsZXMgPSBbJ211bHRpcHJvY2Vzc2luZy4nICsgbSBmb3IgbSBpbiBtb2R1bGVzXQorICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLl9faW5pdF9fJykKKyAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZycpCisgICAgICAgIHJldHVybiBtb2R1bGVzCiAKICAgICBkZWYgdGVzdF9pbXBvcnQoc2VsZik6Ci0gICAgICAgIG1vZHVsZXMgPSBbCi0gICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nJywgJ211bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3NpbmcuaGVhcCcsICdtdWx0aXByb2Nlc3NpbmcubWFuYWdlcnMnLAotICAgICAgICAgICAgJ211bHRpcHJvY2Vzc2luZy5wb29sJywgJ211bHRpcHJvY2Vzc2luZy5wcm9jZXNzJywKLSAgICAgICAgICAgICdtdWx0aXByb2Nlc3Npbmcuc3luY2hyb25pemUnLCAnbXVsdGlwcm9jZXNzaW5nLnV0aWwnCi0gICAgICAgICAgICBdCisgICAgICAgIG1vZHVsZXMgPSBzZWxmLmdldF9tb2R1bGVfbmFtZXMoKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fZm9yaycpCisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX2ZvcmtzZXJ2ZXInKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5wb3Blbl9zcGF3bl9wb3NpeCcpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBtb2R1bGVzLnJlbW92ZSgnbXVsdGlwcm9jZXNzaW5nLnBvcGVuX3NwYXduX3dpbjMyJykKKyAgICAgICAgICAgIGlmIG5vdCBIQVNfUkVEVUNUSU9OOgorICAgICAgICAgICAgICAgIG1vZHVsZXMucmVtb3ZlKCdtdWx0aXByb2Nlc3NpbmcucG9wZW5fZm9ya3NlcnZlcicpCiAKLSAgICAgICAgaWYgSEFTX1JFRFVDVElPTjoKLSAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKCdtdWx0aXByb2Nlc3NpbmcucmVkdWN0aW9uJykKLQotICAgICAgICBpZiBjX2ludCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgY19pbnQgaXMgTm9uZToKICAgICAgICAgICAgICMgVGhpcyBtb2R1bGUgcmVxdWlyZXMgX2N0eXBlcwotICAgICAgICAgICAgbW9kdWxlcy5hcHBlbmQoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQorICAgICAgICAgICAgbW9kdWxlcy5yZW1vdmUoJ211bHRpcHJvY2Vzc2luZy5zaGFyZWRjdHlwZXMnKQogCiAgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZXM6CiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBtb2QgPSBzeXMubW9kdWxlc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kLCAnX19hbGxfXycpLCBuYW1lKQogCi0gICAgICAgICAgICBmb3IgYXR0ciBpbiBnZXRhdHRyKG1vZCwgJ19fYWxsX18nLCAoKSk6CisgICAgICAgICAgICBmb3IgYXR0ciBpbiBtb2QuX19hbGxfXzoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCiAgICAgICAgICAgICAgICAgICAgIGhhc2F0dHIobW9kLCBhdHRyKSwKICAgICAgICAgICAgICAgICAgICAgJyVyIGRvZXMgbm90IGhhdmUgYXR0cmlidXRlICVyJyAlIChtb2QsIGF0dHIpCkBAIC0yOTA0LDcgKzMwMzksNyBAQAogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIF9raWxsZXIoY2xzLCBwaWQpOgotICAgICAgICB0aW1lLnNsZWVwKDAuNSkKKyAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHVVNSMSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHVVNSMScpLCAncmVxdWlyZXMgU0lHVVNSMScpCkBAIC0yOTE3LDEyICszMDUyLDE0IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGtpbGxlciA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5fa2lsbGVyLCBhcmdzPShwaWQsKSkKICAgICAgICAgICAgIGtpbGxlci5zdGFydCgpCi0gICAgICAgICAgICBwID0gc2VsZi5Qcm9jZXNzKHRhcmdldD10aW1lLnNsZWVwLCBhcmdzPSgxLCkpCi0gICAgICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcCA9IHNlbGYuUHJvY2Vzcyh0YXJnZXQ9dGltZS5zbGVlcCwgYXJncz0oMiwpKQorICAgICAgICAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGtpbGxlci5qb2luKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnb3Rfc2lnbmFsWzBdKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmV4aXRjb2RlLCAwKQotICAgICAgICAgICAga2lsbGVyLmpvaW4oKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVVNSMSwgb2xkaGFuZGxlcikKIApAQCAtMjkzNSw4ICszMDcyLDExIEBACiAgICAgQHVuaXR0ZXN0LnNraXBJZihXSU4zMiwgInNraXBwZWQgb24gV2luZG93cyIpCiAgICAgZGVmIHRlc3RfaW52YWxpZF9oYW5kbGVzKHNlbGYpOgogICAgICAgICBjb25uID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uQ29ubmVjdGlvbig0NDk3NzYwOCkKKyAgICAgICAgIyBjaGVjayB0aGF0IHBvbGwoKSBkb2Vzbid0IGNyYXNoCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPU0Vycm9yKSwgY29ubi5wb2xsKQorICAgICAgICAgICAgY29ubi5wb2xsKCkKKyAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICMgSGFjayBwcml2YXRlIGF0dHJpYnV0ZSBfaGFuZGxlIHRvIGF2b2lkIHByaW50aW5nIGFuIGVycm9yCiAgICAgICAgICAgICAjIGluIGNvbm4uX19kZWxfXwpAQCAtMjk0NCwxMzEgKzMwODQsNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkNvbm5lY3Rpb24sIC0xKQogCi0jCi0jIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSB0ZXN0IGNhc2VzIGZyb20gdGhlIGJhc2Ugb25lcyBpbiB0aGlzIG1vZHVsZQotIwotCi1kZWYgY3JlYXRlX3Rlc3RfY2FzZXMoTWl4aW4sIHR5cGUpOgotICAgIHJlc3VsdCA9IHt9Ci0gICAgZ2xvYiA9IGdsb2JhbHMoKQotICAgIFR5cGUgPSB0eXBlLmNhcGl0YWxpemUoKQotICAgIEFMTF9UWVBFUyA9IHsncHJvY2Vzc2VzJywgJ3RocmVhZHMnLCAnbWFuYWdlcid9Ci0KLSAgICBmb3IgbmFtZSBpbiBsaXN0KGdsb2Iua2V5cygpKToKLSAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfVGVzdCcpOgotICAgICAgICAgICAgYmFzZSA9IGdsb2JbbmFtZV0KLSAgICAgICAgICAgIGFzc2VydCBzZXQoYmFzZS5BTExPV0VEX1RZUEVTKSA8PSBBTExfVFlQRVMsIHNldChiYXNlLkFMTE9XRURfVFlQRVMpCi0gICAgICAgICAgICBpZiB0eXBlIGluIGJhc2UuQUxMT1dFRF9UWVBFUzoKLSAgICAgICAgICAgICAgICBuZXduYW1lID0gJ1dpdGgnICsgVHlwZSArIG5hbWVbMTpdCi0gICAgICAgICAgICAgICAgY2xhc3MgVGVtcChiYXNlLCBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgcmVzdWx0W25ld25hbWVdID0gVGVtcAotICAgICAgICAgICAgICAgIFRlbXAuX19uYW1lX18gPSBUZW1wLl9fcXVhbG5hbWVfXyA9IG5ld25hbWUKLSAgICAgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBNaXhpbi5fX21vZHVsZV9fCi0gICAgcmV0dXJuIHJlc3VsdAotCi0jCi0jIENyZWF0ZSB0ZXN0IGNhc2VzCi0jCi0KLWNsYXNzIFByb2Nlc3Nlc01peGluKG9iamVjdCk6Ci0gICAgVFlQRSA9ICdwcm9jZXNzZXMnCi0gICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzCi0gICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uCi0gICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5jdXJyZW50X3Byb2Nlc3MpCi0gICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4pCi0gICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKLSAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5QaXBlKQotICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5RdWV1ZSkKLSAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Kb2luYWJsZVF1ZXVlKQotICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkxvY2spCi0gICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJMb2NrKQotICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuU2VtYXBob3JlKQotICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJvdW5kZWRTZW1hcGhvcmUpCi0gICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Db25kaXRpb24pCi0gICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkV2ZW50KQotICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIpCi0gICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlZhbHVlKQotICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5BcnJheSkKLSAgICBSYXdWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3VmFsdWUpCi0gICAgUmF3QXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlJhd0FycmF5KQotCi10ZXN0Y2FzZXNfcHJvY2Vzc2VzID0gY3JlYXRlX3Rlc3RfY2FzZXMoUHJvY2Vzc2VzTWl4aW4sIHR5cGU9J3Byb2Nlc3NlcycpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc19wcm9jZXNzZXMpCi0KLQotY2xhc3MgTWFuYWdlck1peGluKG9iamVjdCk6Ci0gICAgVFlQRSA9ICdtYW5hZ2VyJwotICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcwotICAgIFF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5RdWV1ZScpKQotICAgIEpvaW5hYmxlUXVldWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkpvaW5hYmxlUXVldWUnKSkKLSAgICBMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Mb2NrJykpCi0gICAgUkxvY2sgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlJMb2NrJykpCi0gICAgU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5TZW1hcGhvcmUnKSkKLSAgICBCb3VuZGVkU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlJykpCi0gICAgQ29uZGl0aW9uID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Db25kaXRpb24nKSkKLSAgICBFdmVudCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuRXZlbnQnKSkKLSAgICBCYXJyaWVyID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5CYXJyaWVyJykpCi0gICAgVmFsdWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlZhbHVlJykpCi0gICAgQXJyYXkgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkFycmF5JykpCi0gICAgbGlzdCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIubGlzdCcpKQotICAgIGRpY3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmRpY3QnKSkKLSAgICBOYW1lc3BhY2UgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLk5hbWVzcGFjZScpKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIFBvb2woY2xzLCAqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIGNscy5tYW5hZ2VyLlBvb2woKmFyZ3MsICoqa3dkcykKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBzZXRVcENsYXNzKGNscyk6Ci0gICAgICAgIGNscy5tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKLSAgICAgICAgIyBvbmx5IHRoZSBtYW5hZ2VyIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGFjdGl2ZV9jaGlsZHJlbigpCi0gICAgICAgICMgYnV0IHRoaXMgY2FuIHRha2UgYSBiaXQgb24gc2xvdyBtYWNoaW5lcywgc28gd2FpdCBhIGZldyBzZWNvbmRzCi0gICAgICAgICMgaWYgdGhlcmUgYXJlIG90aGVyIGNoaWxkcmVuIHRvbyAoc2VlICMxNzM5NSkKLSAgICAgICAgdCA9IDAuMDEKLSAgICAgICAgd2hpbGUgbGVuKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4oKSkgPiAxIGFuZCB0IDwgNToKLSAgICAgICAgICAgIHRpbWUuc2xlZXAodCkKLSAgICAgICAgICAgIHQgKj0gMgotICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICMgZG8gZ2FyYmFnZSBjb2xsZWN0aW9uCi0gICAgICAgIGlmIGNscy5tYW5hZ2VyLl9udW1iZXJfb2Zfb2JqZWN0cygpICE9IDA6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvciBzaW5jZSBzb21lIHRlc3RzIGRvIG5vdAotICAgICAgICAgICAgIyBlbnN1cmUgdGhhdCBhbGwgcHJvY2Vzc2VzIHdoaWNoIGhvbGQgYSByZWZlcmVuY2UgdG8gYQotICAgICAgICAgICAgIyBtYW5hZ2VkIG9iamVjdCBoYXZlIGJlZW4gam9pbmVkLgotICAgICAgICAgICAgcHJpbnQoJ1NoYXJlZCBvYmplY3RzIHdoaWNoIHN0aWxsIGV4aXN0IGF0IG1hbmFnZXIgc2h1dGRvd246JykKLSAgICAgICAgICAgIHByaW50KGNscy5tYW5hZ2VyLl9kZWJ1Z19pbmZvKCkpCi0gICAgICAgIGNscy5tYW5hZ2VyLnNodXRkb3duKCkKLSAgICAgICAgY2xzLm1hbmFnZXIuam9pbigpCi0gICAgICAgIGNscy5tYW5hZ2VyID0gTm9uZQotCi10ZXN0Y2FzZXNfbWFuYWdlciA9IGNyZWF0ZV90ZXN0X2Nhc2VzKE1hbmFnZXJNaXhpbiwgdHlwZT0nbWFuYWdlcicpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc19tYW5hZ2VyKQotCi0KLWNsYXNzIFRocmVhZHNNaXhpbihvYmplY3QpOgotICAgIFRZUEUgPSAndGhyZWFkcycKLSAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LlByb2Nlc3MKLSAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmR1bW15LmNvbm5lY3Rpb24KLSAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmN1cnJlbnRfcHJvY2VzcykKLSAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LmFjdGl2ZV9jaGlsZHJlbikKLSAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQotICAgIFBpcGUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlBpcGUpCi0gICAgUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlF1ZXVlKQotICAgIEpvaW5hYmxlUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkpvaW5hYmxlUXVldWUpCi0gICAgTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuTG9jaykKLSAgICBSTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuUkxvY2spCi0gICAgU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5TZW1hcGhvcmUpCi0gICAgQm91bmRlZFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQm91bmRlZFNlbWFwaG9yZSkKLSAgICBDb25kaXRpb24gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkNvbmRpdGlvbikKLSAgICBFdmVudCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuRXZlbnQpCi0gICAgQmFycmllciA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuQmFycmllcikKLSAgICBWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuVmFsdWUpCi0gICAgQXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkFycmF5KQotCi10ZXN0Y2FzZXNfdGhyZWFkcyA9IGNyZWF0ZV90ZXN0X2Nhc2VzKFRocmVhZHNNaXhpbiwgdHlwZT0ndGhyZWFkcycpCi1nbG9iYWxzKCkudXBkYXRlKHRlc3RjYXNlc190aHJlYWRzKQogCiAKIGNsYXNzIE90aGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNDE4LDcgKzM0MzMsNyBAQAogICAgIGRlZiB0ZXN0X2ZsYWdzKHNlbGYpOgogICAgICAgICBpbXBvcnQganNvbiwgc3VicHJvY2VzcwogICAgICAgICAjIHN0YXJ0IGNoaWxkIHByb2Nlc3MgdXNpbmcgdW51c3VhbCBmbGFncwotICAgICAgICBwcm9nID0gKCdmcm9tIHRlc3QudGVzdF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFRlc3RGbGFnczsgJyArCisgICAgICAgIHByb2cgPSAoJ2Zyb20gdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFRlc3RGbGFnczsgJyArCiAgICAgICAgICAgICAgICAgJ1Rlc3RGbGFncy5ydW5faW5fY2hpbGQoKScpCiAgICAgICAgIGRhdGEgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgIFtzeXMuZXhlY3V0YWJsZSwgJy1FJywgJy1TJywgJy1PJywgJy1jJywgcHJvZ10pCkBAIC0zNDY1LDE1ICszNDgwLDE2IEBACiAKIGNsYXNzIFRlc3ROb0ZvcmtCb21iKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9ub2Zvcmtib21iKHNlbGYpOgorICAgICAgICBzbSA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKCkKICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnbXBfZm9ya19ib21iLnB5JykKLSAgICAgICAgaWYgV0lOMzI6Ci0gICAgICAgICAgICByYywgb3V0LCBlcnIgPSB0ZXN0LnNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBvdXQuZGVjb2RlKCdhc2NpaScpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignUnVudGltZUVycm9yJywgZXJyLmRlY29kZSgnYXNjaWknKSkKKyAgICAgICAgaWYgc20gIT0gJ2ZvcmsnOgorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShuYW1lLCBzbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInUnVudGltZUVycm9yJywgZXJyKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sobmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEyMycsIG91dC5kZWNvZGUoJ2FzY2lpJykucnN0cmlwKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcnLCBlcnIuZGVjb2RlKCdhc2NpaScpKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gdGVzdC5zY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sobmFtZSwgc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5yc3RyaXAoKSwgYicxMjMnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKIAogIwogIyBJc3N1ZSAjMTc1NTU6IEZvcmtBd2FyZVRocmVhZExvY2sKQEAgLTM0ODksNyArMzUwNSw4IEBACiAgICAgICAgIGlmIG4gPiAxOgogICAgICAgICAgICAgcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1jbHMuY2hpbGQsIGFyZ3M9KG4tMSwgY29ubikpCiAgICAgICAgICAgICBwLnN0YXJ0KCkKLSAgICAgICAgICAgIHAuam9pbigpCisgICAgICAgICAgICBjb25uLmNsb3NlKCkKKyAgICAgICAgICAgIHAuam9pbih0aW1lb3V0PTUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb25uLnNlbmQobGVuKHV0aWwuX2FmdGVyZm9ya19yZWdpc3RyeSkpCiAgICAgICAgIGNvbm4uY2xvc2UoKQpAQCAtMzUwMCwxMSArMzUxNyw3OCBAQAogICAgICAgICBvbGRfc2l6ZSA9IGxlbih1dGlsLl9hZnRlcmZvcmtfcmVnaXN0cnkpCiAgICAgICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c2VsZi5jaGlsZCwgYXJncz0oNSwgdykpCiAgICAgICAgIHAuc3RhcnQoKQorICAgICAgICB3LmNsb3NlKCkKICAgICAgICAgbmV3X3NpemUgPSByLnJlY3YoKQotICAgICAgICBwLmpvaW4oKQorICAgICAgICBwLmpvaW4odGltZW91dD01KQogICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChuZXdfc2l6ZSwgb2xkX3NpemUpCiAKICMKKyMgQ2hlY2sgdGhhdCBub24tZm9ya2VkIGNoaWxkIHByb2Nlc3NlcyBkbyBub3QgaW5oZXJpdCB1bm5lZWRlZCBmZHMvaGFuZGxlcworIworCitjbGFzcyBUZXN0Q2xvc2VGZHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGdldF9oaWdoX3NvY2tldF9mZChzZWxmKToKKyAgICAgICAgaWYgV0lOMzI6CisgICAgICAgICAgICAjIFRoZSBjaGlsZCBwcm9jZXNzIHdpbGwgbm90IGhhdmUgYW55IHNvY2tldCBoYW5kbGVzLCBzbworICAgICAgICAgICAgIyBjYWxsaW5nIHNvY2tldC5mcm9tZmQoKSBzaG91bGQgcHJvZHVjZSBXU0FFTk9UU09DSyBldmVuCisgICAgICAgICAgICAjIGlmIHRoZXJlIGlzIGEgaGFuZGxlIG9mIHRoZSBzYW1lIG51bWJlci4KKyAgICAgICAgICAgIHJldHVybiBzb2NrZXQuc29ja2V0KCkuZGV0YWNoKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgV2Ugd2FudCB0byBwcm9kdWNlIGEgc29ja2V0IHdpdGggYW4gZmQgaGlnaCBlbm91Z2ggdGhhdCBhCisgICAgICAgICAgICAjIGZyZXNobHkgY3JlYXRlZCBjaGlsZCBwcm9jZXNzIHdpbGwgbm90IGhhdmUgYW55IGZkcyBhcyBoaWdoLgorICAgICAgICAgICAgZmQgPSBzb2NrZXQuc29ja2V0KCkuZGV0YWNoKCkKKyAgICAgICAgICAgIHRvX2Nsb3NlID0gW10KKyAgICAgICAgICAgIHdoaWxlIGZkIDwgNTA6CisgICAgICAgICAgICAgICAgdG9fY2xvc2UuYXBwZW5kKGZkKQorICAgICAgICAgICAgICAgIGZkID0gb3MuZHVwKGZkKQorICAgICAgICAgICAgZm9yIHggaW4gdG9fY2xvc2U6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoeCkKKyAgICAgICAgICAgIHJldHVybiBmZAorCisgICAgZGVmIGNsb3NlKHNlbGYsIGZkKToKKyAgICAgICAgaWYgV0lOMzI6CisgICAgICAgICAgICBzb2NrZXQuc29ja2V0KGZpbGVubz1mZCkuY2xvc2UoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3Rlc3RfY2xvc2VmZHMoY2xzLCBjb25uLCBmZCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHMgPSBzb2NrZXQuZnJvbWZkKGZkLCBzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICBjb25uLnNlbmQoZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgY29ubi5zZW5kKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZWZkKHNlbGYpOgorICAgICAgICBpZiBub3QgSEFTX1JFRFVDVElPTjoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdyZXF1aXJlcyBmZCBwaWNrbGluZycpCisKKyAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBtdWx0aXByb2Nlc3NpbmcuUGlwZSgpCisgICAgICAgIGZkID0gc2VsZi5nZXRfaGlnaF9zb2NrZXRfZmQoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBwID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3ModGFyZ2V0PXNlbGYuX3Rlc3RfY2xvc2VmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0od3JpdGVyLCBmZCkpCisgICAgICAgICAgICBwLnN0YXJ0KCkKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgICAgICBlID0gcmVhZGVyLnJlY3YoKQorICAgICAgICAgICAgcC5qb2luKHRpbWVvdXQ9NSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoZmQpCisgICAgICAgICAgICB3cml0ZXIuY2xvc2UoKQorICAgICAgICAgICAgcmVhZGVyLmNsb3NlKCkKKworICAgICAgICBpZiBtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpID09ICdmb3JrJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZSwgTm9uZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIFdTQUVOT1RTT0NLID0gMTAwMzgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBPU0Vycm9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGUuZXJybm8gPT0gZXJybm8uRUJBREYgb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLndpbmVycm9yID09IFdTQUVOT1RTT0NLLCBlKQorCisjCiAjIElzc3VlICMxNzA5NzogRUlOVFIgc2hvdWxkIGJlIGlnbm9yZWQgYnkgcmVjdigpLCBzZW5kKCksIGFjY2VwdCgpIGV0YwogIwogCkBAIC0zNTQ4LDEwICszNjMyLDEwIEBACiAgICAgICAgIGRlZiBoYW5kbGVyKHNpZ251bSwgZnJhbWUpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdVU1IxLCBoYW5kbGVyKQotICAgICAgICBsID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24uTGlzdGVuZXIoKQotICAgICAgICBjb25uLnNlbmQobC5hZGRyZXNzKQotICAgICAgICBhID0gbC5hY2NlcHQoKQotICAgICAgICBhLnNlbmQoJ3dlbGNvbWUnKQorICAgICAgICB3aXRoIG11bHRpcHJvY2Vzc2luZy5jb25uZWN0aW9uLkxpc3RlbmVyKCkgYXMgbDoKKyAgICAgICAgICAgIGNvbm4uc2VuZChsLmFkZHJlc3MpCisgICAgICAgICAgICBhID0gbC5hY2NlcHQoKQorICAgICAgICAgICAgYS5zZW5kKCd3ZWxjb21lJykKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHVVNSMScpLCAncmVxdWlyZXMgU0lHVVNSMScpCiAgICAgZGVmIHRlc3RfaWdub3JlX2xpc3RlbmVyKHNlbGYpOgpAQCAtMzU3MiwyNiArMzY1NiwyNjcgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGNvbm4uY2xvc2UoKQogCi0jCi0jCi0jCitjbGFzcyBUZXN0U3RhcnRNZXRob2QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfY2hlY2tfY29udGV4dChjbHMsIGNvbm4pOgorICAgICAgICBjb25uLnNlbmQobXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKSkKIAotZGVmIHNldFVwTW9kdWxlKCk6Ci0gICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoImxpbnV4Iik6CisgICAgZGVmIGNoZWNrX2NvbnRleHQoc2VsZiwgY3R4KToKKyAgICAgICAgciwgdyA9IGN0eC5QaXBlKGR1cGxleD1GYWxzZSkKKyAgICAgICAgcCA9IGN0eC5Qcm9jZXNzKHRhcmdldD1zZWxmLl9jaGVja19jb250ZXh0LCBhcmdzPSh3LCkpCisgICAgICAgIHAuc3RhcnQoKQorICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgY2hpbGRfbWV0aG9kID0gci5yZWN2KCkKKyAgICAgICAgci5jbG9zZSgpCisgICAgICAgIHAuam9pbigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hpbGRfbWV0aG9kLCBjdHguZ2V0X3N0YXJ0X21ldGhvZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dChzZWxmKToKKyAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlcicpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN0eCA9IG11bHRpcHJvY2Vzc2luZy5nZXRfY29udGV4dChtZXRob2QpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X3N0YXJ0X21ldGhvZCgpLCBtZXRob2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGN0eC5nZXRfY29udGV4dCgpLCBjdHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdHguc2V0X3N0YXJ0X21ldGhvZCwgJ3NwYXduJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGN0eC5zZXRfc3RhcnRfbWV0aG9kLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jaGVja19jb250ZXh0KGN0eCkKKworICAgIGRlZiB0ZXN0X3NldF9nZXQoc2VsZik6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfZm9ya3NlcnZlcl9wcmVsb2FkKFBSRUxPQUQpCisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBvbGRfbWV0aG9kID0gbXVsdGlwcm9jZXNzaW5nLmdldF9zdGFydF9tZXRob2QoKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2NrID0gbXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkKLSAgICAgICAgZXhjZXB0IE9TRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiT1NFcnJvciByYWlzZXMgb24gUkxvY2sgY3JlYXRpb24sICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWUgaXNzdWUgMzExMSEiKQotICAgIGNoZWNrX2Vub3VnaF9zZW1hcGhvcmVzKCkKLSAgICB1dGlsLmdldF90ZW1wX2RpcigpICAgICAjIGNyZWF0ZXMgdGVtcCBkaXJlY3RvcnkgZm9yIHVzZSBieSBhbGwgcHJvY2Vzc2VzCi0gICAgbXVsdGlwcm9jZXNzaW5nLmdldF9sb2dnZXIoKS5zZXRMZXZlbChMT0dfTEVWRUwpCisgICAgICAgICAgICBmb3IgbWV0aG9kIGluICgnZm9yaycsICdzcGF3bicsICdmb3Jrc2VydmVyJyk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChtZXRob2QsIGZvcmNlPVRydWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdWx0aXByb2Nlc3NpbmcuZ2V0X3N0YXJ0X21ldGhvZCgpLCBtZXRob2QpCisgICAgICAgICAgICAgICAgY3R4ID0gbXVsdGlwcm9jZXNzaW5nLmdldF9jb250ZXh0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfc3RhcnRfbWV0aG9kKCksIG1ldGhvZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodHlwZShjdHgpLl9fbmFtZV9fLmxvd2VyKCkuc3RhcnRzd2l0aChtZXRob2QpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgICAgICAgICAgY3R4LlByb2Nlc3MuX19uYW1lX18ubG93ZXIoKS5zdGFydHN3aXRoKG1ldGhvZCkpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jb250ZXh0KG11bHRpcHJvY2Vzc2luZykKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChvbGRfbWV0aG9kLCBmb3JjZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChjb3VudCwgMSkKKworICAgIGRlZiB0ZXN0X2dldF9hbGwoc2VsZik6CisgICAgICAgIG1ldGhvZHMgPSBtdWx0aXByb2Nlc3NpbmcuZ2V0X2FsbF9zdGFydF9tZXRob2RzKCkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGhvZHMsIFsnc3Bhd24nXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRob2RzID09IFsnZm9yaycsICdzcGF3biddIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kcyA9PSBbJ2ZvcmsnLCAnc3Bhd24nLCAnZm9ya3NlcnZlciddKQorCisjCisjIENoZWNrIHRoYXQga2lsbGluZyBwcm9jZXNzIGRvZXMgbm90IGxlYWsgbmFtZWQgc2VtYXBob3JlcworIworCitAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLAorICAgICAgICAgICAgICAgICAidGVzdCBzZW1hbnRpY3MgZG9uJ3QgbWFrZSBzZW5zZSBvbiBXaW5kb3dzIikKK2NsYXNzIFRlc3RTZW1hcGhvcmVUcmFja2VyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zZW1hcGhvcmVfdHJhY2tlcihzZWxmKToKKyAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgY21kID0gJycnaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcgYXMgbXAsIHRpbWUsIG9zCisgICAgICAgICAgICBtcC5zZXRfc3RhcnRfbWV0aG9kKCJzcGF3biIpCisgICAgICAgICAgICBsb2NrMSA9IG1wLkxvY2soKQorICAgICAgICAgICAgbG9jazIgPSBtcC5Mb2NrKCkKKyAgICAgICAgICAgIG9zLndyaXRlKCVkLCBsb2NrMS5fc2VtbG9jay5uYW1lLmVuY29kZSgiYXNjaWkiKSArIGIiXFxuIikKKyAgICAgICAgICAgIG9zLndyaXRlKCVkLCBsb2NrMi5fc2VtbG9jay5uYW1lLmVuY29kZSgiYXNjaWkiKSArIGIiXFxuIikKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCisgICAgICAgICcnJworICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1jJywgY21kICUgKHcsIHcpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzc19mZHM9W3ddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICB3aXRoIG9wZW4ociwgJ3JiJywgY2xvc2VmZD1UcnVlKSBhcyBmOgorICAgICAgICAgICAgbmFtZTEgPSBmLnJlYWRsaW5lKCkucnN0cmlwKCkuZGVjb2RlKCdhc2NpaScpCisgICAgICAgICAgICBuYW1lMiA9IGYucmVhZGxpbmUoKS5yc3RyaXAoKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgX211bHRpcHJvY2Vzc2luZy5zZW1fdW5saW5rKG5hbWUxKQorICAgICAgICBwLnRlcm1pbmF0ZSgpCisgICAgICAgIHAud2FpdCgpCisgICAgICAgIHRpbWUuc2xlZXAoMi4wKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGN0eDoKKyAgICAgICAgICAgIF9tdWx0aXByb2Nlc3Npbmcuc2VtX3VubGluayhuYW1lMikKKyAgICAgICAgIyBkb2NzIHNheSBpdCBzaG91bGQgYmUgRU5PRU5ULCBidXQgT1NYIHNlZW1zIHRvIGdpdmUgRUlOVkFMCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3R4LmV4Y2VwdGlvbi5lcnJubywgKGVycm5vLkVOT0VOVCwgZXJybm8uRUlOVkFMKSkKKyAgICAgICAgZXJyID0gcC5zdGRlcnIucmVhZCgpLmRlY29kZSgndXRmLTgnKQorICAgICAgICBwLnN0ZGVyci5jbG9zZSgpCisgICAgICAgIGV4cGVjdGVkID0gJ3NlbWFwaG9yZV90cmFja2VyOiBUaGVyZSBhcHBlYXIgdG8gYmUgMiBsZWFrZWQgc2VtYXBob3JlcycKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgJ3NlbWFwaG9yZV90cmFja2VyOiAlcjogXFtFcnJubycgJSBuYW1lMSkKKworIworIyBNaXhpbnMKKyMKKworY2xhc3MgUHJvY2Vzc2VzTWl4aW4ob2JqZWN0KToKKyAgICBUWVBFID0gJ3Byb2Nlc3NlcycKKyAgICBQcm9jZXNzID0gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MKKyAgICBjb25uZWN0aW9uID0gbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24KKyAgICBjdXJyZW50X3Byb2Nlc3MgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmN1cnJlbnRfcHJvY2VzcykKKyAgICBhY3RpdmVfY2hpbGRyZW4gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbikKKyAgICBQb29sID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5Qb29sKQorICAgIFBpcGUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlBpcGUpCisgICAgUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLlF1ZXVlKQorICAgIEpvaW5hYmxlUXVldWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkpvaW5hYmxlUXVldWUpCisgICAgTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuTG9jaykKKyAgICBSTG9jayA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUkxvY2spCisgICAgU2VtYXBob3JlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5TZW1hcGhvcmUpCisgICAgQm91bmRlZFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQm91bmRlZFNlbWFwaG9yZSkKKyAgICBDb25kaXRpb24gPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkNvbmRpdGlvbikKKyAgICBFdmVudCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuRXZlbnQpCisgICAgQmFycmllciA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuQmFycmllcikKKyAgICBWYWx1ZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuVmFsdWUpCisgICAgQXJyYXkgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLkFycmF5KQorICAgIFJhd1ZhbHVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5SYXdWYWx1ZSkKKyAgICBSYXdBcnJheSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUmF3QXJyYXkpCiAKIAotZGVmIHRlYXJEb3duTW9kdWxlKCk6Ci0gICAgIyBwYXVzZSBhIGJpdCBzbyB3ZSBkb24ndCBnZXQgd2FybmluZyBhYm91dCBkYW5nbGluZyB0aHJlYWRzL3Byb2Nlc3NlcwotICAgIHRpbWUuc2xlZXAoMC41KQorY2xhc3MgTWFuYWdlck1peGluKG9iamVjdCk6CisgICAgVFlQRSA9ICdtYW5hZ2VyJworICAgIFByb2Nlc3MgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2VzcworICAgIFF1ZXVlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5RdWV1ZScpKQorICAgIEpvaW5hYmxlUXVldWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkpvaW5hYmxlUXVldWUnKSkKKyAgICBMb2NrID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Mb2NrJykpCisgICAgUkxvY2sgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlJMb2NrJykpCisgICAgU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5TZW1hcGhvcmUnKSkKKyAgICBCb3VuZGVkU2VtYXBob3JlID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Cb3VuZGVkU2VtYXBob3JlJykpCisgICAgQ29uZGl0aW9uID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5Db25kaXRpb24nKSkKKyAgICBFdmVudCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIuRXZlbnQnKSkKKyAgICBCYXJyaWVyID0gcHJvcGVydHkob3BlcmF0b3IuYXR0cmdldHRlcignbWFuYWdlci5CYXJyaWVyJykpCisgICAgVmFsdWUgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLlZhbHVlJykpCisgICAgQXJyYXkgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLkFycmF5JykpCisgICAgbGlzdCA9IHByb3BlcnR5KG9wZXJhdG9yLmF0dHJnZXR0ZXIoJ21hbmFnZXIubGlzdCcpKQorICAgIGRpY3QgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLmRpY3QnKSkKKyAgICBOYW1lc3BhY2UgPSBwcm9wZXJ0eShvcGVyYXRvci5hdHRyZ2V0dGVyKCdtYW5hZ2VyLk5hbWVzcGFjZScpKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIFBvb2woY2xzLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgcmV0dXJuIGNscy5tYW5hZ2VyLlBvb2woKmFyZ3MsICoqa3dkcykKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5tYW5hZ2VyID0gbXVsdGlwcm9jZXNzaW5nLk1hbmFnZXIoKQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHRlYXJEb3duQ2xhc3MoY2xzKToKKyAgICAgICAgIyBvbmx5IHRoZSBtYW5hZ2VyIHByb2Nlc3Mgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGFjdGl2ZV9jaGlsZHJlbigpCisgICAgICAgICMgYnV0IHRoaXMgY2FuIHRha2UgYSBiaXQgb24gc2xvdyBtYWNoaW5lcywgc28gd2FpdCBhIGZldyBzZWNvbmRzCisgICAgICAgICMgaWYgdGhlcmUgYXJlIG90aGVyIGNoaWxkcmVuIHRvbyAoc2VlICMxNzM5NSkKKyAgICAgICAgdCA9IDAuMDEKKyAgICAgICAgd2hpbGUgbGVuKG11bHRpcHJvY2Vzc2luZy5hY3RpdmVfY2hpbGRyZW4oKSkgPiAxIGFuZCB0IDwgNToKKyAgICAgICAgICAgIHRpbWUuc2xlZXAodCkKKyAgICAgICAgICAgIHQgKj0gMgorICAgICAgICBnYy5jb2xsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICMgZG8gZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIGlmIGNscy5tYW5hZ2VyLl9udW1iZXJfb2Zfb2JqZWN0cygpICE9IDA6CisgICAgICAgICAgICAjIFRoaXMgaXMgbm90IHJlYWxseSBhbiBlcnJvciBzaW5jZSBzb21lIHRlc3RzIGRvIG5vdAorICAgICAgICAgICAgIyBlbnN1cmUgdGhhdCBhbGwgcHJvY2Vzc2VzIHdoaWNoIGhvbGQgYSByZWZlcmVuY2UgdG8gYQorICAgICAgICAgICAgIyBtYW5hZ2VkIG9iamVjdCBoYXZlIGJlZW4gam9pbmVkLgorICAgICAgICAgICAgcHJpbnQoJ1NoYXJlZCBvYmplY3RzIHdoaWNoIHN0aWxsIGV4aXN0IGF0IG1hbmFnZXIgc2h1dGRvd246JykKKyAgICAgICAgICAgIHByaW50KGNscy5tYW5hZ2VyLl9kZWJ1Z19pbmZvKCkpCisgICAgICAgIGNscy5tYW5hZ2VyLnNodXRkb3duKCkKKyAgICAgICAgY2xzLm1hbmFnZXIuam9pbigpCisgICAgICAgIGNscy5tYW5hZ2VyID0gTm9uZQogCiAKLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdW5pdHRlc3QubWFpbigpCitjbGFzcyBUaHJlYWRzTWl4aW4ob2JqZWN0KToKKyAgICBUWVBFID0gJ3RocmVhZHMnCisgICAgUHJvY2VzcyA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5Qcm9jZXNzCisgICAgY29ubmVjdGlvbiA9IG11bHRpcHJvY2Vzc2luZy5kdW1teS5jb25uZWN0aW9uCisgICAgY3VycmVudF9wcm9jZXNzID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5jdXJyZW50X3Byb2Nlc3MpCisgICAgYWN0aXZlX2NoaWxkcmVuID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5hY3RpdmVfY2hpbGRyZW4pCisgICAgUG9vbCA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuUG9vbCkKKyAgICBQaXBlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5QaXBlKQorICAgIFF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5RdWV1ZSkKKyAgICBKb2luYWJsZVF1ZXVlID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Kb2luYWJsZVF1ZXVlKQorICAgIExvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkxvY2spCisgICAgUkxvY2sgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlJMb2NrKQorICAgIFNlbWFwaG9yZSA9IHN0YXRpY21ldGhvZChtdWx0aXByb2Nlc3NpbmcuZHVtbXkuU2VtYXBob3JlKQorICAgIEJvdW5kZWRTZW1hcGhvcmUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJvdW5kZWRTZW1hcGhvcmUpCisgICAgQ29uZGl0aW9uID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5Db25kaXRpb24pCisgICAgRXZlbnQgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkV2ZW50KQorICAgIEJhcnJpZXIgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LkJhcnJpZXIpCisgICAgVmFsdWUgPSBzdGF0aWNtZXRob2QobXVsdGlwcm9jZXNzaW5nLmR1bW15LlZhbHVlKQorICAgIEFycmF5ID0gc3RhdGljbWV0aG9kKG11bHRpcHJvY2Vzc2luZy5kdW1teS5BcnJheSkKKworIworIyBGdW5jdGlvbnMgdXNlZCB0byBjcmVhdGUgdGVzdCBjYXNlcyBmcm9tIHRoZSBiYXNlIG9uZXMgaW4gdGhpcyBtb2R1bGUKKyMKKworZGVmIGluc3RhbGxfdGVzdHNfaW5fbW9kdWxlX2RpY3QocmVtb3RlX2dsb2JzLCBzdGFydF9tZXRob2QpOgorICAgIF9fbW9kdWxlX18gPSByZW1vdGVfZ2xvYnNbJ19fbmFtZV9fJ10KKyAgICBsb2NhbF9nbG9icyA9IGdsb2JhbHMoKQorICAgIEFMTF9UWVBFUyA9IHsncHJvY2Vzc2VzJywgJ3RocmVhZHMnLCAnbWFuYWdlcid9CisKKyAgICBmb3IgbmFtZSwgYmFzZSBpbiBsb2NhbF9nbG9icy5pdGVtcygpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShiYXNlLCB0eXBlKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGlzc3ViY2xhc3MoYmFzZSwgQmFzZVRlc3RDYXNlKToKKyAgICAgICAgICAgIGlmIGJhc2UgaXMgQmFzZVRlc3RDYXNlOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBhc3NlcnQgc2V0KGJhc2UuQUxMT1dFRF9UWVBFUykgPD0gQUxMX1RZUEVTLCBiYXNlLkFMTE9XRURfVFlQRVMKKyAgICAgICAgICAgIGZvciB0eXBlXyBpbiBiYXNlLkFMTE9XRURfVFlQRVM6CisgICAgICAgICAgICAgICAgbmV3bmFtZSA9ICdXaXRoJyArIHR5cGVfLmNhcGl0YWxpemUoKSArIG5hbWVbMTpdCisgICAgICAgICAgICAgICAgTWl4aW4gPSBsb2NhbF9nbG9ic1t0eXBlXy5jYXBpdGFsaXplKCkgKyAnTWl4aW4nXQorICAgICAgICAgICAgICAgIGNsYXNzIFRlbXAoYmFzZSwgTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIFRlbXAuX19uYW1lX18gPSBUZW1wLl9fcXVhbG5hbWVfXyA9IG5ld25hbWUKKyAgICAgICAgICAgICAgICBUZW1wLl9fbW9kdWxlX18gPSBfX21vZHVsZV9fCisgICAgICAgICAgICAgICAgcmVtb3RlX2dsb2JzW25ld25hbWVdID0gVGVtcAorICAgICAgICBlbGlmIGlzc3ViY2xhc3MoYmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgY2xhc3MgVGVtcChiYXNlLCBvYmplY3QpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIFRlbXAuX19uYW1lX18gPSBUZW1wLl9fcXVhbG5hbWVfXyA9IG5hbWUKKyAgICAgICAgICAgIFRlbXAuX19tb2R1bGVfXyA9IF9fbW9kdWxlX18KKyAgICAgICAgICAgIHJlbW90ZV9nbG9ic1tuYW1lXSA9IFRlbXAKKworICAgIGRhbmdsaW5nID0gW05vbmUsIE5vbmVdCisgICAgb2xkX3N0YXJ0X21ldGhvZCA9IFtOb25lXQorCisgICAgZGVmIHNldFVwTW9kdWxlKCk6CisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5zZXRfZm9ya3NlcnZlcl9wcmVsb2FkKFBSRUxPQUQpCisgICAgICAgIG11bHRpcHJvY2Vzc2luZy5wcm9jZXNzLl9jbGVhbnVwKCkKKyAgICAgICAgZGFuZ2xpbmdbMF0gPSBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcuY29weSgpCisgICAgICAgIGRhbmdsaW5nWzFdID0gdGhyZWFkaW5nLl9kYW5nbGluZy5jb3B5KCkKKyAgICAgICAgb2xkX3N0YXJ0X21ldGhvZFswXSA9IG11bHRpcHJvY2Vzc2luZy5nZXRfc3RhcnRfbWV0aG9kKGFsbG93X25vbmU9VHJ1ZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2Qoc3RhcnRfbWV0aG9kLCBmb3JjZT1UcnVlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KHN0YXJ0X21ldGhvZCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIHN0YXJ0IG1ldGhvZCBub3Qgc3VwcG9ydGVkJykKKworICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgibGludXgiKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NrID0gbXVsdGlwcm9jZXNzaW5nLlJMb2NrKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJPU0Vycm9yIHJhaXNlcyBvbiBSTG9jayBjcmVhdGlvbiwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZWUgaXNzdWUgMzExMSEiKQorICAgICAgICBjaGVja19lbm91Z2hfc2VtYXBob3JlcygpCisgICAgICAgIHV0aWwuZ2V0X3RlbXBfZGlyKCkgICAgICMgY3JlYXRlcyB0ZW1wIGRpcmVjdG9yeQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcuZ2V0X2xvZ2dlcigpLnNldExldmVsKExPR19MRVZFTCkKKworICAgIGRlZiB0ZWFyRG93bk1vZHVsZSgpOgorICAgICAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChvbGRfc3RhcnRfbWV0aG9kWzBdLCBmb3JjZT1UcnVlKQorICAgICAgICAjIHBhdXNlIGEgYml0IHNvIHdlIGRvbid0IGdldCB3YXJuaW5nIGFib3V0IGRhbmdsaW5nIHRocmVhZHMvcHJvY2Vzc2VzCisgICAgICAgIHRpbWUuc2xlZXAoMC41KQorICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICB0bXAgPSBzZXQobXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nKSAtIHNldChkYW5nbGluZ1swXSkKKyAgICAgICAgaWYgdG1wOgorICAgICAgICAgICAgcHJpbnQoJ0RhbmdsaW5nIHByb2Nlc3NlczonLCB0bXAsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgZGVsIHRtcAorICAgICAgICB0bXAgPSBzZXQodGhyZWFkaW5nLl9kYW5nbGluZykgLSBzZXQoZGFuZ2xpbmdbMV0pCisgICAgICAgIGlmIHRtcDoKKyAgICAgICAgICAgIHByaW50KCdEYW5nbGluZyB0aHJlYWRzOicsIHRtcCwgZmlsZT1zeXMuc3RkZXJyKQorCisgICAgcmVtb3RlX2dsb2JzWydzZXRVcE1vZHVsZSddID0gc2V0VXBNb2R1bGUKKyAgICByZW1vdGVfZ2xvYnNbJ3RlYXJEb3duTW9kdWxlJ10gPSB0ZWFyRG93bk1vZHVsZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYXVkaW9kYXRhL3BsdWNrLXBjbTI0LmF1IGIvTGliL3Rlc3QvYXVkaW9kYXRhL3BsdWNrLXBjbTI0LmF1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiYjIzMDQKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9hdWRpb2RhdGEvcGx1Y2stcGNtMjQuYXUKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYXVkaW90ZXN0cy5weSBiL0xpYi90ZXN0L2F1ZGlvdGVzdHMucHkKaW5kZXggNmZmNWJiOC4uMGFlMjI0MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvYXVkaW90ZXN0cy5weQorKysgYi9MaWIvdGVzdC9hdWRpb3Rlc3RzLnB5CkBAIC0xMiwyNCArMTIsNiBAQAogICAgIGRlZiBzZWVrKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHJhaXNlIGlvLlVuc3VwcG9ydGVkT3BlcmF0aW9uCiAKLWRlZiBieXRlc3dhcDIoZGF0YSk6Ci0gICAgYSA9IGFycmF5LmFycmF5KCdoJykKLSAgICBhLmZyb21ieXRlcyhkYXRhKQotICAgIGEuYnl0ZXN3YXAoKQotICAgIHJldHVybiBhLnRvYnl0ZXMoKQotCi1kZWYgYnl0ZXN3YXAzKGRhdGEpOgotICAgIGJhID0gYnl0ZWFycmF5KGRhdGEpCi0gICAgYmFbOjozXSA9IGRhdGFbMjo6M10KLSAgICBiYVsyOjozXSA9IGRhdGFbOjozXQotICAgIHJldHVybiBieXRlcyhiYSkKLQotZGVmIGJ5dGVzd2FwNChkYXRhKToKLSAgICBhID0gYXJyYXkuYXJyYXkoJ2knKQotICAgIGEuZnJvbWJ5dGVzKGRhdGEpCi0gICAgYS5ieXRlc3dhcCgpCi0gICAgcmV0dXJuIGEudG9ieXRlcygpCi0KIAogY2xhc3MgQXVkaW9UZXN0czoKICAgICBjbG9zZV9mZCA9IEZhbHNlCkBAIC01Niw5ICszOCwxNiBAQAogICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLAogICAgICAgICAgICAgICAgIChuY2hhbm5lbHMsIHNhbXB3aWR0aCwgZnJhbWVyYXRlLCBuZnJhbWVzLCBjb21wdHlwZSwgY29tcG5hbWUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uY2hhbm5lbHMsIG5jaGFubmVscykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBzYW1wd2lkdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgZnJhbWVyYXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5uZnJhbWVzLCBuZnJhbWVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wdHlwZSwgY29tcHR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmNvbXBuYW1lLCBjb21wbmFtZSkKIAotICAgICAgICBkdW1wID0gcGlja2xlLmR1bXBzKHBhcmFtcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUubG9hZHMoZHVtcCksIHBhcmFtcykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdW1wID0gcGlja2xlLmR1bXBzKHBhcmFtcywgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBpY2tsZS5sb2FkcyhkdW1wKSwgcGFyYW1zKQogCiAKIGNsYXNzIEF1ZGlvV3JpdGVUZXN0cyhBdWRpb1Rlc3RzKToKQEAgLTcyLDE1ICs2MSwxMiBAQAogICAgICAgICByZXR1cm4gZgogCiAgICAgZGVmIGNoZWNrX2ZpbGUoc2VsZiwgdGVzdGZpbGUsIG5mcmFtZXMsIGZyYW1lcyk6Ci0gICAgICAgIGYgPSBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlLCAncmInKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5uY2hhbm5lbHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0c2FtcHdpZHRoKCksIHNlbGYuc2FtcHdpZHRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGZyYW1lcmF0ZSgpLCBzZWxmLmZyYW1lcmF0ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuZnJhbWVzKCksIG5mcmFtZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGZyYW1lcyhuZnJhbWVzKSwgZnJhbWVzKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF93cml0ZV9wYXJhbXMoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKQEAgLTkwLDYgKzc2LDUzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubmZyYW1lcywgc2VsZi5jb21wdHlwZSwgc2VsZi5jb21wbmFtZSkKICAgICAgICAgZi5jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF93cml0ZV9jb250ZXh0X21hbmFnZXJfY2FsbHNfY2xvc2Uoc2VsZik6CisgICAgICAgICMgQ2xvc2UgY2hlY2tzIGZvciBhIG1pbmltdW0gaGVhZGVyIGFuZCB3aWxsIHJhaXNlIGFuIGVycm9yCisgICAgICAgICMgaWYgaXQgaXMgbm90IHNldCwgc28gdGhpcyBwcm92ZXMgdGhhdCBjbG9zZSBpcyBjYWxsZWQuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5tb2R1bGUuRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKFRFU1RGTiwgJ3diJyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYubW9kdWxlLkVycm9yKToKKyAgICAgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5tb2R1bGUub3Blbih0ZXN0ZmlsZSk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl93aXRoX29wZW5fZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgdGVzdGZpbGU6CisgICAgICAgICAgICB3aXRoIHNlbGYubW9kdWxlLm9wZW4odGVzdGZpbGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5zZXRuY2hhbm5lbHMoc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICAgICAgZi5zZXRzYW1wd2lkdGgoc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICAgICAgZi5zZXRmcmFtZXJhdGUoc2VsZi5mcmFtZXJhdGUpCisgICAgICAgICAgICAgICAgZi5zZXRjb21wdHlwZShzZWxmLmNvbXB0eXBlLCBzZWxmLmNvbXBuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5jbG9zZWQsIHNlbGYuY2xvc2VfZmQpCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIHRlc3RmaWxlOgorICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5nZXRmcCgpLmNsb3NlZCkKKyAgICAgICAgICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMubmNoYW5uZWxzLCBzZWxmLm5jaGFubmVscykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLmZyYW1lcmF0ZSwgc2VsZi5mcmFtZXJhdGUpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi5jbG9zZV9mZDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLmdldGZwKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RmaWxlLmNsb3NlZCwgc2VsZi5jbG9zZV9mZCkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl93aXRoX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICAjIElmIHRoZSBmaWxlIGRvZXNuJ3QgZ2V0IGNsb3NlZCwgdGhpcyB0ZXN0IHdvbid0IGZhaWwsIGJ1dCBpdCB3aWxsCisgICAgICAgICMgcHJvZHVjZSBhIHJlc291cmNlIGxlYWsgd2FybmluZy4KKyAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKFRFU1RGTiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYuc2V0bmNoYW5uZWxzKHNlbGYubmNoYW5uZWxzKQorICAgICAgICAgICAgZi5zZXRzYW1wd2lkdGgoc2VsZi5zYW1wd2lkdGgpCisgICAgICAgICAgICBmLnNldGZyYW1lcmF0ZShzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgICAgIGYuc2V0Y29tcHR5cGUoc2VsZi5jb21wdHlwZSwgc2VsZi5jb21wbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKFRFU1RGTikgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5nZXRmcCgpLmNsb3NlZCkKKyAgICAgICAgICAgIHBhcmFtcyA9IGYuZ2V0cGFyYW1zKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgc2VsZi5uY2hhbm5lbHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5zYW1wd2lkdGgsIHNlbGYuc2FtcHdpZHRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuZnJhbWVyYXRlLCBzZWxmLmZyYW1lcmF0ZSkKKyAgICAgICAgaWYgbm90IHNlbGYuY2xvc2VfZmQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLmdldGZwKCkpCisKICAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKICAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQogICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQpAQCAtOTgsNiArMTMxLDMwIEBACiAKICAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKIAorICAgIGRlZiB0ZXN0X3dyaXRlX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQorICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICBmLndyaXRlZnJhbWVzKGJ5dGVhcnJheShzZWxmLmZyYW1lcykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIHNlbGYuY2hlY2tfZmlsZShURVNURk4sIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCisKKyAgICBkZWYgdGVzdF93cml0ZV9hcnJheShzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQorICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICBmLndyaXRlZnJhbWVzKGFycmF5LmFycmF5KCdoJywgc2VsZi5mcmFtZXMpKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuY3JlYXRlX2ZpbGUoVEVTVEZOKQorICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICBmLndyaXRlZnJhbWVzKG1lbW9yeXZpZXcoc2VsZi5mcmFtZXMpKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBzZWxmLmNoZWNrX2ZpbGUoVEVTVEZOLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQorCiAgICAgZGVmIHRlc3RfaW5jb21wbGV0ZWRfd3JpdGUoc2VsZik6CiAgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3YicpIGFzIHRlc3RmaWxlOgogICAgICAgICAgICAgdGVzdGZpbGUud3JpdGUoYidhYmFiYWdhbGFtYWdhJykKQEAgLTEzNywyMCArMTk0LDE4IEBACiAgICAgICAgICAgICBzZWxmLmNoZWNrX2ZpbGUodGVzdGZpbGUsIHNlbGYubmZyYW1lcywgc2VsZi5mcmFtZXMpCiAKICAgICBkZWYgdGVzdF91bnNlZWthYmxlX3JlYWQoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKFRFU1RGTikKLSAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKLSAgICAgICAgZi53cml0ZWZyYW1lcyhzZWxmLmZyYW1lcykKLSAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfZmlsZShURVNURk4pIGFzIGY6CisgICAgICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICAgICAgZi53cml0ZWZyYW1lcyhzZWxmLmZyYW1lcykKIAogICAgICAgICB3aXRoIFVuc2Vla2FibGVJTyhURVNURk4sICdyYicpIGFzIHRlc3RmaWxlOgogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKHRlc3RmaWxlLCBzZWxmLm5mcmFtZXMsIHNlbGYuZnJhbWVzKQogCiAgICAgZGVmIHRlc3RfdW5zZWVrYWJsZV93cml0ZShzZWxmKToKICAgICAgICAgd2l0aCBVbnNlZWthYmxlSU8oVEVTVEZOLCAnd2InKSBhcyB0ZXN0ZmlsZToKLSAgICAgICAgICAgIGYgPSBzZWxmLmNyZWF0ZV9maWxlKHRlc3RmaWxlKQotICAgICAgICAgICAgZi5zZXRuZnJhbWVzKHNlbGYubmZyYW1lcykKLSAgICAgICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCi0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfZmlsZSh0ZXN0ZmlsZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLnNldG5mcmFtZXMoc2VsZi5uZnJhbWVzKQorICAgICAgICAgICAgICAgIGYud3JpdGVmcmFtZXMoc2VsZi5mcmFtZXMpCiAKICAgICAgICAgc2VsZi5jaGVja19maWxlKFRFU1RGTiwgc2VsZi5uZnJhbWVzLCBzZWxmLmZyYW1lcykKIApAQCAtMjY3LDEyICszMjIsOSBAQAogCiAgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIHRlc3RmaWxlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0ZmlsZS5yZWFkKDEzKSwgYidhYmFiYWdhbGFtYWdhJykKLSAgICAgICAgICAgIGYgPSBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlLCAncmInKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLm1vZHVsZS5vcGVuKHRlc3RmaWxlLCAncmInKSBhcyBmOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5uY2hhbm5lbHMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldHNhbXB3aWR0aCgpLCBzZWxmLnNhbXB3aWR0aCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ2V0ZnJhbWVyYXRlKCksIHNlbGYuZnJhbWVyYXRlKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5nZXRuZnJhbWVzKCksIHNlbGYuc25kZmlsZW5mcmFtZXMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRmcmFtZXMoc2VsZi5uZnJhbWVzKSwgc2VsZi5mcmFtZXMpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIGYuY2xvc2UoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTEwLnB5IGIvTGliL3Rlc3QvYmFkc3ludGF4X2Z1dHVyZTEwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNWFiNjcKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9iYWRzeW50YXhfZnV0dXJlMTAucHkKQEAgLTAsMCArMSwzIEBACitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFic29sdXRlX2ltcG9ydAorInNwYW0sIGJhciwgYmxhaCIKK2Zyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weSBiL0xpYi90ZXN0L2J1ZmZlcl90ZXN0cy5weQppbmRleCBjZjU0YzI4Li4wYTYyOTQwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9idWZmZXJfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvYnVmZmVyX3Rlc3RzLnB5CkBAIC0xNjAsMTQgKzE2MCwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgZGVmXG5nICAgaGknLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWIgICAgICBkZWZcbmcgICAgICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoOCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKDgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsCi0gICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJykuZXhwYW5kdGFicyg0KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hcnNoYWwoYidhYmNcclxuYWJcclxuZGVmXG5nXHJcbmhpJykuZXhwYW5kdGFicyg0KSkKKyAgICAgICAgIyBjaGVjayBrZXl3b3JkIGFyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFyc2hhbChiJ2FiY1xyYWJcdGRlZlxuZ1x0aGknKS5leHBhbmR0YWJzKHRhYnNpemU9OCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYmNccmFiICBkZWZcbmcgICBoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYXJzaGFsKGInYWJjXHJhYlx0ZGVmXG5nXHRoaScpLmV4cGFuZHRhYnModGFic2l6ZT00KSkKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInICBhXG4gYicsIHNlbGYubWFyc2hhbChiJyBcdGFcblx0YicpLmV4cGFuZHRhYnMoMSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLm1hcnNoYWwoYidoZWxsbycpLmV4cGFuZHRhYnMsIDQyLCA0MikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2J5dGVjb2RlX2hlbHBlci5weSBiL0xpYi90ZXN0L2J5dGVjb2RlX2hlbHBlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGI0MjA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvYnl0ZWNvZGVfaGVscGVyLnB5CkBAIC0wLDAgKzEsNDEgQEAKKyIiImJ5dGVjb2RlX2hlbHBlciAtIHN1cHBvcnQgdG9vbHMgZm9yIHRlc3RpbmcgY29ycmVjdCBieXRlY29kZSBnZW5lcmF0aW9uIiIiCisKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGRpcworaW1wb3J0IGlvCisKK19VTlNQRUNJRklFRCA9IG9iamVjdCgpCisKK2NsYXNzIEJ5dGVjb2RlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkN1c3RvbSBhc3NlcnRpb24gbWV0aG9kcyBmb3IgaW5zcGVjdGluZyBieXRlY29kZS4iIiIKKworICAgIGRlZiBnZXRfZGlzYXNzZW1ibHlfYXNfc3RyaW5nKHNlbGYsIGNvKToKKyAgICAgICAgcyA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgZGlzLmRpcyhjbywgZmlsZT1zKQorICAgICAgICByZXR1cm4gcy5nZXR2YWx1ZSgpCisKKyAgICBkZWYgYXNzZXJ0SW5CeXRlY29kZShzZWxmLCB4LCBvcG5hbWUsIGFyZ3ZhbD1fVU5TUEVDSUZJRUQpOgorICAgICAgICAiIiJSZXR1cm5zIGluc3RyIGlmIG9wIGlzIGZvdW5kLCBvdGhlcndpc2UgdGhyb3dzIEFzc2VydGlvbkVycm9yIiIiCisgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyh4KToKKyAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSBvcG5hbWU6CisgICAgICAgICAgICAgICAgaWYgYXJndmFsIGlzIF9VTlNQRUNJRklFRCBvciBpbnN0ci5hcmd2YWwgPT0gYXJndmFsOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5zdHIKKyAgICAgICAgZGlzYXNzZW1ibHkgPSBzZWxmLmdldF9kaXNhc3NlbWJseV9hc19zdHJpbmcoeCkKKyAgICAgICAgaWYgYXJndmFsIGlzIF9VTlNQRUNJRklFRDoKKyAgICAgICAgICAgIG1zZyA9ICclcyBub3QgZm91bmQgaW4gYnl0ZWNvZGU6XG4lcycgJSAob3BuYW1lLCBkaXNhc3NlbWJseSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1zZyA9ICcoJXMsJXIpIG5vdCBmb3VuZCBpbiBieXRlY29kZTpcbiVzJworICAgICAgICAgICAgbXNnID0gbXNnICUgKG9wbmFtZSwgYXJndmFsLCBkaXNhc3NlbWJseSkKKyAgICAgICAgc2VsZi5mYWlsKG1zZykKKworICAgIGRlZiBhc3NlcnROb3RJbkJ5dGVjb2RlKHNlbGYsIHgsIG9wbmFtZSwgYXJndmFsPV9VTlNQRUNJRklFRCk6CisgICAgICAgICIiIlRocm93cyBBc3NlcnRpb25FcnJvciBpZiBvcCBpcyBmb3VuZCIiIgorICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoeCk6CisgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gb3BuYW1lOgorICAgICAgICAgICAgICAgIGRpc2Fzc2VtYmx5ID0gc2VsZi5nZXRfZGlzYXNzZW1ibHlfYXNfc3RyaW5nKGNvKQorICAgICAgICAgICAgICAgIGlmIG9wYXJndmFsIGlzIF9VTlNQRUNJRklFRDoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJyVzIG9jY3VycyBpbiBieXRlY29kZTpcbiVzJyAlIChvcG5hbWUsIGRpc2Fzc2VtYmx5KQorICAgICAgICAgICAgICAgIGVsaWYgaW5zdHIuYXJndmFsID09IGFyZ3ZhbDoKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gJyglcywlcikgb2NjdXJzIGluIGJ5dGVjb2RlOlxuJXMnCisgICAgICAgICAgICAgICAgICAgIG1zZyA9IG1zZyAlIChvcG5hbWUsIGFyZ3ZhbCwgZGlzYXNzZW1ibHkpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2NvZGluZzIwNzMxLnB5IGIvTGliL3Rlc3QvY29kaW5nMjA3MzEucHkKaW5kZXggY2E0OTYyZS4uYjBlMjI3YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvY29kaW5nMjA3MzEucHkKKysrIGIvTGliL3Rlc3QvY29kaW5nMjA3MzEucHkKQEAgLTEsNCArMSw0IEBACi0jY29kaW5nOmxhdGluMQotCi0KLQorI2NvZGluZzpsYXRpbjENCisNCisNCisNCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kYXRldGltZXRlc3Rlci5weSBiL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CmluZGV4IGFiNTU0NzYuLjI4OWIwY2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CisrKyBiL0xpYi90ZXN0L2RhdGV0aW1ldGVzdGVyLnB5CkBAIC0zLDggKzMsMTAgQEAKIFNlZSBodHRwOi8vd3d3LnpvcGUub3JnL01lbWJlcnMvZmRyYWtlL0RhdGVUaW1lV2lraS9UZXN0Q2FzZXMKICIiIgogCitpbXBvcnQgY29weQogaW1wb3J0IHN5cwogaW1wb3J0IHBpY2tsZQoraW1wb3J0IHJhbmRvbQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gb3BlcmF0b3IgaW1wb3J0IGx0LCBsZSwgZ3QsIGdlLCBlcSwgbmUsIHRydWVkaXYsIGZsb29yZGl2LCBtb2QKQEAgLTQ5LDYgKzUxLDMzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0ZXRpbWUuTUlOWUVBUiwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRldGltZS5NQVhZRUFSLCA5OTk5KQogCisgICAgZGVmIHRlc3RfZGl2aWRlX2FuZF9yb3VuZChzZWxmKToKKyAgICAgICAgaWYgJ19GYXN0JyBpbiBzdHIoc2VsZik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZGFyID0gZGF0ZXRpbWVfbW9kdWxlLl9kaXZpZGVfYW5kX3JvdW5kCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXIoLTEwLCAtMyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFyKDUsIC0yKSwgLTIpCisKKyAgICAgICAgIyBmb3VyIGNhc2VzOiAoMiBzaWducyBvZiBhKSB4ICgyIHNpZ25zIG9mIGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFyKDcsIDMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcigtNywgMyksIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcig3LCAtMyksIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcigtNywgLTMpLCAyKQorCisgICAgICAgICMgdGllcyB0byBldmVuIC0gZWlnaHQgY2FzZXM6CisgICAgICAgICMgKDIgc2lnbnMgb2YgYSkgeCAoMiBzaWducyBvZiBiKSB4IChldmVuIC8gb2RkIHF1b3RpZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcigxMCwgNCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFyKC0xMCwgNCksIC0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhcigxMCwgLTQpLCAtMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXIoLTEwLCAtNCksIDIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXIoNiwgNCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFyKC02LCA0KSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFyKDYsIC00KSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGFyKC02LCAtNCksIDIpCisKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgdHppbmZvIHRlc3RzCiAKQEAgLTc2LDggKzEwNSwxOCBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvZmZzZXQ9Tm9uZSwgbmFtZT1Ob25lLCBkc3RvZmZzZXQ9Tm9uZSk6CiAgICAgICAgIEZpeGVkT2Zmc2V0Ll9faW5pdF9fKHNlbGYsIG9mZnNldCwgbmFtZSwgZHN0b2Zmc2V0KQogCitjbGFzcyBfVFpJbmZvKHR6aW5mbyk6CisgICAgZGVmIHV0Y29mZnNldChzZWxmLCBkYXRldGltZV9tb2R1bGUpOgorICAgICAgICByZXR1cm4gcmFuZG9tLnJhbmRvbSgpCisKIGNsYXNzIFRlc3RUWkluZm8odW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgZGVmIHRlc3RfcmVmY250X2NyYXNoX2J1Z18yMjA0NChzZWxmKToKKyAgICAgICAgdHoxID0gX1RaSW5mbygpCisgICAgICAgIGR0MSA9IGRhdGV0aW1lKDIwMTQsIDcsIDIxLCAxMSwgMzIsIDMsIDAsIHR6MSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZHQxLnV0Y29mZnNldCgpCisKICAgICBkZWYgdGVzdF9ub25fYWJzdHJhY3RuZXNzKHNlbGYpOgogICAgICAgICAjIEluIG9yZGVyIHRvIGFsbG93IHN1YmNsYXNzZXMgdG8gZ2V0IHBpY2tsZWQsIHRoZSBDIGltcGxlbWVudGF0aW9uCiAgICAgICAgICMgd2Fzbid0IGFibGUgdG8gZ2V0IGF3YXkgd2l0aCBoYXZpbmcgX19pbml0X18gcmFpc2UKQEAgLTE0Miw2ICsxODEsMjkgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlcml2ZWQudXRjb2Zmc2V0KE5vbmUpLCBvZmZzZXQpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZXJpdmVkLnR6bmFtZShOb25lKSwgb25hbWUpCiAKKyAgICBkZWYgdGVzdF9pc3N1ZTIzNjAwKHNlbGYpOgorICAgICAgICBEU1RESUZGID0gRFNUT0ZGU0VUID0gdGltZWRlbHRhKGhvdXJzPTEpCisKKyAgICAgICAgY2xhc3MgVUtTdW1tZXJUaW1lKHR6aW5mbyk6CisgICAgICAgICAgICAiIiJTaW1wbGUgdGltZSB6b25lIHdoaWNoIHByZXRlbmRzIHRvIGFsd2F5cyBiZSBpbiBzdW1tZXIgdGltZSwgc2luY2UKKyAgICAgICAgICAgICAgICB0aGF0J3Mgd2hhdCBzaG93cyB0aGUgZmFpbHVyZS4KKyAgICAgICAgICAgICIiIgorCisgICAgICAgICAgICBkZWYgdXRjb2Zmc2V0KHNlbGYsIGR0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gRFNUT0ZGU0VUCisKKyAgICAgICAgICAgIGRlZiBkc3Qoc2VsZiwgZHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBEU1RESUZGCisKKyAgICAgICAgICAgIGRlZiB0em5hbWUoc2VsZiwgZHQpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVUtTdW1tZXJUaW1lJworCisgICAgICAgIHR6ID0gVUtTdW1tZXJUaW1lKCkKKyAgICAgICAgdSA9IGRhdGV0aW1lKDIwMTQsIDQsIDI2LCAxMiwgMSwgdHppbmZvPXR6KQorICAgICAgICB0ID0gdHouZnJvbXV0Yyh1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQgLSB0LnV0Y29mZnNldCgpLCB1KQorCisKIGNsYXNzIFRlc3RUaW1lWm9uZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xNjIsNyArMjI0LDYgQEAKICAgICAgICAgICAgIHR6cmVwID0gcmVwcih0eikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHosIGV2YWwodHpyZXApKQogCi0KICAgICBkZWYgdGVzdF9jbGFzc19tZW1iZXJzKHNlbGYpOgogICAgICAgICBsaW1pdCA9IHRpbWVkZWx0YShob3Vycz0yMywgbWludXRlcz01OSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lem9uZS51dGMudXRjb2Zmc2V0KE5vbmUpLCBaRVJPKQpAQCAtMjQ5LDYgKzMxMCwzMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ei5kc3QodCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQucmVwbGFjZSh0emluZm89dHopLmRzdCgpKQogCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBmb3IgdHogaW4gc2VsZi5BQ0RULCBzZWxmLkVTVCwgdGltZXpvbmUubWluLCB0aW1lem9uZS5tYXg6CisgICAgICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgICAgICB0el9jb3B5ID0gdW5waWNrbGVyLmxvYWRzKHBpY2tsZXIuZHVtcHModHosIHByb3RvKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR6X2NvcHksIHR6KQorICAgICAgICB0eiA9IHRpbWV6b25lLnV0YworICAgICAgICBmb3IgcGlja2xlciwgdW5waWNrbGVyLCBwcm90byBpbiBwaWNrbGVfY2hvaWNlczoKKyAgICAgICAgICAgIHR6X2NvcHkgPSB1bnBpY2tsZXIubG9hZHMocGlja2xlci5kdW1wcyh0eiwgcHJvdG8pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0el9jb3B5LCB0eikKKworICAgIGRlZiB0ZXN0X2NvcHkoc2VsZik6CisgICAgICAgIGZvciB0eiBpbiBzZWxmLkFDRFQsIHNlbGYuRVNULCB0aW1lem9uZS5taW4sIHRpbWV6b25lLm1heDoKKyAgICAgICAgICAgIHR6X2NvcHkgPSBjb3B5LmNvcHkodHopCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR6X2NvcHksIHR6KQorICAgICAgICB0eiA9IHRpbWV6b25lLnV0YworICAgICAgICB0el9jb3B5ID0gY29weS5jb3B5KHR6KQorICAgICAgICBzZWxmLmFzc2VydElzKHR6X2NvcHksIHR6KQorCisgICAgZGVmIHRlc3RfZGVlcGNvcHkoc2VsZik6CisgICAgICAgIGZvciB0eiBpbiBzZWxmLkFDRFQsIHNlbGYuRVNULCB0aW1lem9uZS5taW4sIHRpbWV6b25lLm1heDoKKyAgICAgICAgICAgIHR6X2NvcHkgPSBjb3B5LmRlZXBjb3B5KHR6KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0el9jb3B5LCB0eikKKyAgICAgICAgdHogPSB0aW1lem9uZS51dGMKKyAgICAgICAgdHpfY29weSA9IGNvcHkuZGVlcGNvcHkodHopCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHpfY29weSwgdHopCisKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgQmFzZSBjbGFzcyBmb3IgdGVzdGluZyBhIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRpbWVkZWx0YSwgdGltZSwgZGF0ZSBhbmQKICMgZGF0ZXRpbWUgY29tcGFyaXNvbnMuCkBAIC0zNzEsNiArNDU5LDEwIEBACiAgICAgICAgIGVxKCgtMyp1cykgKiAwLjUsIC0yKnVzKQogICAgICAgICBlcSgoLTUqdXMpICogMC41LCAtMip1cykKIAorICAgICAgICAjIElzc3VlICMyMzUyMQorICAgICAgICBlcSh0ZChzZWNvbmRzPTEpICogMC4xMjM0NTYsIHRkKG1pY3Jvc2Vjb25kcz0xMjM0NTYpKQorICAgICAgICBlcSh0ZChzZWNvbmRzPTEpICogMC42MTEyMjk1LCB0ZChtaWNyb3NlY29uZHM9NjExMjI5KSkKKwogICAgICAgICAjIERpdmlzaW9uIGJ5IGludCBhbmQgZmxvYXQKICAgICAgICAgZXEoKDMqdXMpIC8gMiwgMip1cykKICAgICAgICAgZXEoKDUqdXMpIC8gMiwgMip1cykKQEAgLTM4NSw2ICs0NzcsOSBAQAogICAgICAgICBmb3IgaSBpbiByYW5nZSgtMTAsIDEwKToKICAgICAgICAgICAgIGVxKChpKnVzLy0zKS8vdXMsIHJvdW5kKGkvLTMpKQogCisgICAgICAgICMgSXNzdWUgIzIzNTIxCisgICAgICAgIGVxKHRkKHNlY29uZHM9MSkgLyAoMSAvIDAuNjExMjI5NSksIHRkKG1pY3Jvc2Vjb25kcz02MTEyMjkpKQorCiAgICAgICAgICMgSXNzdWUgIzExNTc2CiAgICAgICAgIGVxKHRkKDk5OTk5OTk5OSwgODYzOTksIDk5OTk5OSkgLSB0ZCg5OTk5OTk5OTksIDg2Mzk5LCA5OTk5OTgpLAogICAgICAgICAgICB0ZCgwLCAwLCAxKSkKQEAgLTYwNSw4ICs3MDAsMTYgQEAKICAgICAgICAgIyBTaW5nbGUtZmllbGQgcm91bmRpbmcuCiAgICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0wLjQvMTAwMCksIHRkKDApKSAgICAjIHJvdW5kcyB0byAwCiAgICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0tMC40LzEwMDApLCB0ZCgwKSkgICAgIyByb3VuZHMgdG8gMAorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MC41LzEwMDApLCB0ZChtaWNyb3NlY29uZHM9MCkpCisgICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0tMC41LzEwMDApLCB0ZChtaWNyb3NlY29uZHM9LTApKQogICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MC42LzEwMDApLCB0ZChtaWNyb3NlY29uZHM9MSkpCiAgICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0tMC42LzEwMDApLCB0ZChtaWNyb3NlY29uZHM9LTEpKQorICAgICAgICBlcSh0ZChtaWxsaXNlY29uZHM9MS41LzEwMDApLCB0ZChtaWNyb3NlY29uZHM9MikpCisgICAgICAgIGVxKHRkKG1pbGxpc2Vjb25kcz0tMS41LzEwMDApLCB0ZChtaWNyb3NlY29uZHM9LTIpKQorICAgICAgICBlcSh0ZChzZWNvbmRzPTAuNS8xMCoqNiksIHRkKG1pY3Jvc2Vjb25kcz0wKSkKKyAgICAgICAgZXEodGQoc2Vjb25kcz0tMC41LzEwKio2KSwgdGQobWljcm9zZWNvbmRzPS0wKSkKKyAgICAgICAgZXEodGQoc2Vjb25kcz0xLzIqKjcpLCB0ZChtaWNyb3NlY29uZHM9NzgxMikpCisgICAgICAgIGVxKHRkKHNlY29uZHM9LTEvMioqNyksIHRkKG1pY3Jvc2Vjb25kcz0tNzgxMikpCiAKICAgICAgICAgIyBSb3VuZGluZyBkdWUgdG8gY29udHJpYnV0aW9ucyBmcm9tIG1vcmUgdGhhbiBvbmUgZmllbGQuCiAgICAgICAgIHVzX3Blcl9ob3VyID0gMzYwMGU2CkBAIC02MTksNiArNzIyLDEwIEBACiAgICAgICAgIGVxKHRkKGhvdXJzPS0uMi91c19wZXJfaG91ciksIHRkKDApKQogICAgICAgICBlcSh0ZChkYXlzPS0uNC91c19wZXJfZGF5LCBob3Vycz0tLjIvdXNfcGVyX2hvdXIpLCB0ZChtaWNyb3NlY29uZHM9LTEpKQogCisgICAgICAgICMgVGVzdCBmb3IgYSBwYXRjaCBpbiBJc3N1ZSA4ODYwCisgICAgICAgIGVxKHRkKG1pY3Jvc2Vjb25kcz0wLjUpLCAwLjUqdGQobWljcm9zZWNvbmRzPTEuMCkpCisgICAgICAgIGVxKHRkKG1pY3Jvc2Vjb25kcz0wLjUpLy90ZC5yZXNvbHV0aW9uLCAwLjUqdGQucmVzb2x1dGlvbi8vdGQucmVzb2x1dGlvbikKKwogICAgIGRlZiB0ZXN0X21hc3NpdmVfbm9ybWFsaXphdGlvbihzZWxmKToKICAgICAgICAgdGQgPSB0aW1lZGVsdGEobWljcm9zZWNvbmRzPS0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCh0ZC5kYXlzLCB0ZC5zZWNvbmRzLCB0ZC5taWNyb3NlY29uZHMpLApAQCAtMTY2NywxMSArMTc3NCwxMiBAQAogCiAgICAgZGVmIHRlc3RfbW9yZV9waWNrbGluZyhzZWxmKToKICAgICAgICAgYSA9IHNlbGYudGhlY2xhc3MoMjAwMywgMiwgNywgMTYsIDQ4LCAzNywgNDQ0MTE2KQotICAgICAgICBzID0gcGlja2xlLmR1bXBzKGEpCi0gICAgICAgIGIgPSBwaWNrbGUubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnllYXIsIDIwMDMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5tb250aCwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmRheSwgNykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGEsIHByb3RvKQorICAgICAgICAgICAgYiA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLnllYXIsIDIwMDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIubW9udGgsIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZGF5LCA3KQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmdfc3ViY2xhc3NfZGF0ZXRpbWUoc2VsZik6CiAgICAgICAgIGFyZ3MgPSA2LCA3LCAyMywgMjAsIDU5LCAxLCA2NCoqMgpAQCAtMTc3NCwxMiArMTg4MiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICB0emluZm89dGltZXpvbmUodGltZWRlbHRhKGhvdXJzPS01KSwgJ0VTVCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQudGltZXN0YW1wKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgMTgwMDAgKyAzNjAwICsgMio2MCArIDMgKyA0KjFlLTYpCisKICAgICBkZWYgdGVzdF9taWNyb3NlY29uZF9yb3VuZGluZyhzZWxmKToKICAgICAgICAgZm9yIGZ0cyBpbiBbc2VsZi50aGVjbGFzcy5mcm9tdGltZXN0YW1wLAogICAgICAgICAgICAgICAgICAgICBzZWxmLnRoZWNsYXNzLnV0Y2Zyb210aW1lc3RhbXBdOgogICAgICAgICAgICAgemVybyA9IGZ0cygwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6ZXJvLnNlY29uZCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemVyby5taWNyb3NlY29uZCwgMCkKKyAgICAgICAgICAgIG9uZSA9IGZ0cygxZS02KQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG1pbnVzX29uZSA9IGZ0cygtMWUtNikKICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgpAQCAtMTc5MCwyMiArMTkwMCwyOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWludXNfb25lLm1pY3Jvc2Vjb25kLCA5OTk5OTkpCiAKICAgICAgICAgICAgICAgICB0ID0gZnRzKC0xZS04KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgbWludXNfb25lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgemVybykKICAgICAgICAgICAgICAgICB0ID0gZnRzKC05ZS03KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgbWludXNfb25lKQogICAgICAgICAgICAgICAgIHQgPSBmdHMoLTFlLTcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBtaW51c19vbmUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB6ZXJvKQorICAgICAgICAgICAgICAgIHQgPSBmdHMoLTEvMioqNykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCA1OSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDk5MjE4OCkKIAogICAgICAgICAgICAgdCA9IGZ0cygxZS03KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB6ZXJvKQogICAgICAgICAgICAgdCA9IGZ0cyg5ZS03KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB6ZXJvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBvbmUpCiAgICAgICAgICAgICB0ID0gZnRzKDAuOTk5OTk5NDkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuc2Vjb25kLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm1pY3Jvc2Vjb25kLCA5OTk5OTkpCiAgICAgICAgICAgICB0ID0gZnRzKDAuOTk5OTk5OSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zZWNvbmQsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDApCisgICAgICAgICAgICB0ID0gZnRzKDEvMioqNykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5zZWNvbmQsIDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubWljcm9zZWNvbmQsIDk5OTk5OSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5taWNyb3NlY29uZCwgNzgxMikKIAogICAgIGRlZiB0ZXN0X2luc2FuZV9mcm9tdGltZXN0YW1wKHNlbGYpOgogICAgICAgICAjIEl0J3MgcG9zc2libGUgdGhhdCBzb21lIHBsYXRmb3JtIG1hcHMgdGltZV90IHRvIGRvdWJsZSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHAuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9leHAuZGVjVGVzdAppbmRleCAwMjFiNDc4Li42YTdhZjIzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZXhwLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2V4cC5kZWNUZXN0CkBAIC0xOSw3ICsxOSw3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB2ZXJzaW9uOiAyLjU5DQogDQotLS0gVGVzdHMgb2YgdGhlIGV4cG9uZW50aWFsIGZ1bnRpb24uICBDdXJyZW50bHkgYWxsIHRlc3RjYXNlcyBoZXJlDQorLS0gVGVzdHMgb2YgdGhlIGV4cG9uZW50aWFsIGZ1bmN0aW9uLiAgQ3VycmVudGx5IGFsbCB0ZXN0Y2FzZXMgaGVyZQ0KIC0tIHNob3cgcmVzdWx0cyB3aGljaCBhcmUgY29ycmVjdGx5IHJvdW5kZWQgKHdpdGhpbiA8PSAwLjUgdWxwKS4NCiANCiBleHRlbmRlZDogICAgMQ0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9mbWEuZGVjVGVzdAppbmRleCBiMGE4MWNhLi4wYjE4OGZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvZm1hLmRlY1Rlc3QKKysrIGIvTGliL3Rlc3QvZGVjaW1hbHRlc3RkYXRhL2ZtYS5kZWNUZXN0CkBAIC0xNDgsNyArMTQ4LDcgQEAKIGZtYXgyMDE5IGZtYSAtOS45OTk5OTkgIDkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+IC0xMDAuMDAwIEluZXhhY3QgUm91bmRlZA0KIGZtYXgyMDIwIGZtYSAtOS45OTk5OTkgLTkuOTk5OTk5ICAwRSs5OTk5OTkgIC0+ICAxMDAuMDAwIEluZXhhY3QgUm91bmRlZA0KIA0KLS0tIDE5OTkuMTIuMjE6IG5leHQgb25lIGlzIGEgZWRnZSBjYXNlIGlmIGludGVybWVkaWF0ZSBsb25ncyBhcmUgdXNlZA0KKy0tIDE5OTkuMTIuMjE6IG5leHQgb25lIGlzIGFuIGVkZ2UgY2FzZSBpZiBpbnRlcm1lZGlhdGUgbG9uZ3MgYXJlIHVzZWQNCiBwcmVjaXNpb246IDE1DQogZm1heDIwNTkgZm1hIDk5OTk5OTk5OTk5OSA5NzY1NjI1ICAwRSs5OTk5OTkgIC0+IDkuNzY1NjI0OTk5OTkwMjNFKzE4IEluZXhhY3QgUm91bmRlZA0KIHByZWNpc2lvbjogMzANCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9kZWNpbWFsdGVzdGRhdGEvbXVsdGlwbHkuZGVjVGVzdCBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tdWx0aXBseS5kZWNUZXN0CmluZGV4IDZhMjNkNWEuLmU4YmQ3N2EgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tdWx0aXBseS5kZWNUZXN0CisrKyBiL0xpYi90ZXN0L2RlY2ltYWx0ZXN0ZGF0YS9tdWx0aXBseS5kZWNUZXN0CkBAIC00OSw3ICs0OSw3IEBACiBtdWx4MDE5IG11bHRpcGx5IC05Ljk5OTk5OTk5OSAgOS45OTk5OTk5OTkgLT4gLTEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCiBtdWx4MDIwIG11bHRpcGx5IC05Ljk5OTk5OTk5OSAtOS45OTk5OTk5OTkgLT4gIDEwMC4wMDAgSW5leGFjdCBSb3VuZGVkCiAKLS0tIDE5OTkuMTIuMjE6IG5leHQgb25lIGlzIGEgZWRnZSBjYXNlIGlmIGludGVybWVkaWF0ZSBsb25ncyBhcmUgdXNlZAorLS0gMTk5OS4xMi4yMTogbmV4dCBvbmUgaXMgYW4gZWRnZSBjYXNlIGlmIGludGVybWVkaWF0ZSBsb25ncyBhcmUgdXNlZAogcHJlY2lzaW9uOiAxNQogbXVseDA1OSBtdWx0aXBseSA5OTk5OTk5OTk5OTkgOTc2NTYyNSAtPiA5Ljc2NTYyNDk5OTk5MDIzRSsxOCBJbmV4YWN0IFJvdW5kZWQKIHByZWNpc2lvbjogMzAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RoMTAyNC5wZW0gYi9MaWIvdGVzdC9kaDEwMjQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOTExNzYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9kaDEwMjQucGVtCkBAIC0wLDAgKzEsNyBAQAorLS0tLS1CRUdJTiBESCBQQVJBTUVURVJTLS0tLS0KK01JR0hBb0dCQUliencxczlDVDhTVjV5djZMN2VzZEFkWllaalBpM3FXRnM2MUNZVEZGUW5mMnMvZDA5TllhSnQKK3JydkpoSXpXYXZxbnVlNzFxWENmODMvSjNuejNGRXdVVS9MMG1HeWhlVmJzU0hpSTY0d1VvM3U1MHdLNUlnbzAKK1JOcy9MRDBpcnM3bTBpY1ovL2hpamFmVFUrSk9CaXVBOHpNSStvWmZVN0JHdWM5WHJVcHJBZ0VDCistLS0tLUVORCBESCBQQVJBTUVURVJTLS0tLS0KKworR2VuZXJhdGVkIHdpdGg6IG9wZW5zc2wgZGhwYXJhbSAtb3V0IGRoMTAyNC5wZW0gIDEwMjQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2RoNTEyLnBlbSBiL0xpYi90ZXN0L2RoNTEyLnBlbQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjAwZDE2Yy4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC9kaDUxMi5wZW0KKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLS0tLS0tQkVHSU4gREggUEFSQU1FVEVSUy0tLS0tCi1NRVlDUVFEMUt2ODg0YkVwUUJnUmpYeUVwd3B5MW9iRUF4bklCeWw2eXBVTTJaYWZxOUFLVUpzQ1J0TUlQV2FrCi1YVUdmbkh5OWlVc2lHU2E2cTZKZXcxWHBLZ1ZmQWdFQwotLS0tLS1FTkQgREggUEFSQU1FVEVSUy0tLS0tCi0KLVRoZXNlIGFyZSB0aGUgNTEyIGJpdCBESCBwYXJhbWV0ZXJzIGZyb20gIkFzc2lnbmVkIE51bWJlciBmb3IgU0tJUCBQcm90b2NvbHMiCi0oaHR0cDovL3d3dy5za2lwLXZwbi5vcmcvc3BlYy9udW1iZXJzLmh0bWwpLgotU2VlIHRoZXJlIGZvciBob3cgdGhleSB3ZXJlIGdlbmVyYXRlZC4KLU5vdGUgdGhhdCBnIGlzIG5vdCBhIGdlbmVyYXRvciwgYnV0IHRoaXMgaXMgbm90IGEgcHJvYmxlbSBzaW5jZSBwIGlzIGEgc2FmZSBwcmltZS4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2ZpbmFsX2EucHkgYi9MaWIvdGVzdC9maW5hbF9hLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MGVlODgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9maW5hbF9hLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyIiIgorRm9kZGVyIGZvciBtb2R1bGUgZmluYWxpemF0aW9uIHRlc3RzIGluIHRlc3RfbW9kdWxlLgorIiIiCisKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZXN0LmZpbmFsX2IKKworeCA9ICdhJworCitjbGFzcyBDOgorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAjIEluc3BlY3QgbW9kdWxlIGdsb2JhbHMgYW5kIGJ1aWx0aW5zCisgICAgICAgIHByaW50KCJ4ID0iLCB4KQorICAgICAgICBwcmludCgiZmluYWxfYi54ID0iLCB0ZXN0LmZpbmFsX2IueCkKKyAgICAgICAgcHJpbnQoInNodXRpbC5ybXRyZWUgPSIsIGdldGF0dHIoc2h1dGlsLnJtdHJlZSwgJ19fbmFtZV9fJywgTm9uZSkpCisgICAgICAgIHByaW50KCJsZW4gPSIsIGdldGF0dHIobGVuLCAnX19uYW1lX18nLCBOb25lKSkKKworYyA9IEMoKQorX3VuZGVyc2NvcmVkID0gQygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9maW5hbF9iLnB5IGIvTGliL3Rlc3QvZmluYWxfYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjI4ZDgyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvZmluYWxfYi5weQpAQCAtMCwwICsxLDE5IEBACisiIiIKK0ZvZGRlciBmb3IgbW9kdWxlIGZpbmFsaXphdGlvbiB0ZXN0cyBpbiB0ZXN0X21vZHVsZS4KKyIiIgorCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgdGVzdC5maW5hbF9hCisKK3ggPSAnYicKKworY2xhc3MgQzoKKyAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgIyBJbnNwZWN0IG1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucworICAgICAgICBwcmludCgieCA9IiwgeCkKKyAgICAgICAgcHJpbnQoImZpbmFsX2EueCA9IiwgdGVzdC5maW5hbF9hLngpCisgICAgICAgIHByaW50KCJzaHV0aWwucm10cmVlID0iLCBnZXRhdHRyKHNodXRpbC5ybXRyZWUsICdfX25hbWVfXycsIE5vbmUpKQorICAgICAgICBwcmludCgibGVuID0iLCBnZXRhdHRyKGxlbiwgJ19fbmFtZV9fJywgTm9uZSkpCisKK2MgPSBDKCkKK191bmRlcnNjb3JlZCA9IEMoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvZm9ya193YWl0LnB5IGIvTGliL3Rlc3QvZm9ya193YWl0LnB5CmluZGV4IDg4NTI3ZGYuLjE5YjU0ZWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2Zvcmtfd2FpdC5weQorKysgYi9MaWIvdGVzdC9mb3JrX3dhaXQucHkKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAgICAgICAgIHNlbGYuYWxpdmVbaWRdID0gb3MuZ2V0cGlkKCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKFNIT1JUU0xFRVApCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB3YWl0X2ltcGwoc2VsZiwgY3BpZCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9rZXljZXJ0My5wZW0gYi9MaWIvdGVzdC9rZXljZXJ0My5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmYTYyYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L2tleWNlcnQzLnBlbQpAQCAtMCwwICsxLDczIEBACistLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS0KK01JSUNkZ0lCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQW1Bd2dnSmNBZ0VBQW9HQkFNTGdEMGtBS0RiNWNGeVAKK2pid05mUjVDdGV3ZFhDK2tNWEFXRDhETHhpVFR2aE1XN3FWbmx3T20zNm1abHN6SEt2c1JmMDVsVDRwZWdpRk0KKzl6MmoxT2xhTitjaS9YN05VMjJUTk42Y3JZU2lONzdGallKUDQ2NGo4NzZuZFN4eUQrcnp5czM4NlQrMXIxYVoKK2FnZ0Vka2oxVHNTc3YxeldJWUtsUElqbHZodXhBZ01CQUFFQ2dZQTBhSCtUMlZmM1dPUHY4S2RrY0pnNmdDUmUKK3lKS1hPV2dXUmNpY3gvQ1V6T0VzVHhtRklEUEx4cUFXQTNrN3YwQiszdmpHdzVZOWx5Y1YvNVhxWE5vUUkxNGoKK3kwOWlOc3VtZHMxM3U1QUtrR2RUSm5aaFE3VUtkb1ZIZnVQNDRaZE92L3JKNS9WRDZGNHpXeXdwZTkwcGNiSysKK0FXRFZ0dXNnR1FCU2llRWwxUUpCQU95VnJVRzVsMnlvVUJ0ZDJ6ci9raUdtL0RZeVhsSXRoUU8vQTMvTG5nRFcKKzUveWRHeFZzVDdsQVZPZ0Nzb1QrMEw0ZWZUaDkwUGp6VzhMUFFyUEJXVk1DUVFEUzNoL0Z0WVlkNWxmeitGTkwKKzlDRWUxRjF3OWw4UDc0OXVOVUQwZzMxN3p2MXRhdElxVkNzUVdIZlZITmRWdmZRK3ZTRnczOE9PUk8wMFhxczkKKzFHSnJBa0Jrb1hYRWt4Q1pveTRQdGVoZU8vOElXV0xHR3I2TDdkaTZNekZsMWxJcXdUNkQ4TDlvYVYydnluRlQKK0RuS29wMHBhMDlVbmhqeXc1N0tNTm1TRTJTVUpBa0VBcmxvVEV6cGdSbUNxNElLMi9OcENlR2RIUzV1cVJsYmgKKzFWSWEveEdwczdFV1FsNU1uOHN3UURlbC9ZUDNXR0hUamZ4N3BnU2VnUWZreWFSdEdwWjlPUUpBYTlWdW1qOG0KK0pBQXRJMEJuZ2E4aGdReDdCaFRRWTRDYWREeHlpUkdPR1lod1V6WVZDcWtiMnNiVlJIOUhud1VhSlQ3Y1dCWTMKK1JuSmRIT01YV2VtNy93PT0KKy0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0KK0NlcnRpZmljYXRlOgorICAgIERhdGE6CisgICAgICAgIFZlcnNpb246IDEgKDB4MCkKKyAgICAgICAgU2VyaWFsIE51bWJlcjogMTI3MjMzNDI2MTI3MjE0NDMyODEgKDB4YjA5MjY0YjFmMmRhMjFkMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgSXNzdWVyOiBDPVhZLCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIENBLCBDTj1vdXItY2Etc2VydmVyCisgICAgICAgIFZhbGlkaXR5CisgICAgICAgICAgICBOb3QgQmVmb3JlOiBKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQKKyAgICAgICAgICAgIE5vdCBBZnRlciA6IE5vdiAxMyAxOTo0NzowNyAyMDIyIEdNVAorICAgICAgICBTdWJqZWN0OiBDPVhZLCBMPUNhc3RsZSBBbnRocmF4LCBPPVB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBDTj1sb2NhbGhvc3QKKyAgICAgICAgU3ViamVjdCBQdWJsaWMgS2V5IEluZm86CisgICAgICAgICAgICBQdWJsaWMgS2V5IEFsZ29yaXRobTogcnNhRW5jcnlwdGlvbgorICAgICAgICAgICAgICAgIFB1YmxpYy1LZXk6ICgxMDI0IGJpdCkKKyAgICAgICAgICAgICAgICBNb2R1bHVzOgorICAgICAgICAgICAgICAgICAgICAwMDpjMjplMDowZjo0OTowMDoyODozNjpmOTo3MDo1Yzo4Zjo4ZDpiYzowZDoKKyAgICAgICAgICAgICAgICAgICAgN2Q6MWU6NDI6YjU6ZWM6MWQ6NWM6MmY6YTQ6MzE6NzA6MTY6MGY6YzA6Y2I6CisgICAgICAgICAgICAgICAgICAgIGM2OjI0OmQzOmJlOjEzOjE2OmVlOmE1OjY3Ojk3OjAzOmE2OmRmOmE5Ojk5OgorICAgICAgICAgICAgICAgICAgICA5NjpjYzpjNzoyYTpmYjoxMTo3Zjo0ZTo2NTo0Zjo4YTo1ZTo4MjoyMTo0YzoKKyAgICAgICAgICAgICAgICAgICAgZjc6M2Q6YTM6ZDQ6ZTk6NWE6Mzc6ZTc6MjI6ZmQ6N2U6Y2Q6NTM6NmQ6OTM6CisgICAgICAgICAgICAgICAgICAgIDM0OmRlOjljOmFkOjg0OmEyOjM3OmJlOmM1OjhkOjgyOjRmOmUzOmFlOjIzOgorICAgICAgICAgICAgICAgICAgICBmMzpiZTphNzo3NToyYzo3MjowZjplYTpmMzpjYTpjZDpmYzplOTozZjpiNToKKyAgICAgICAgICAgICAgICAgICAgYWY6NTY6OTk6NmE6MDg6MDQ6NzY6NDg6ZjU6NGU6YzQ6YWM6YmY6NWM6ZDY6CisgICAgICAgICAgICAgICAgICAgIDIxOjgyOmE1OjNjOjg4OmU1OmJlOjFiOmIxCisgICAgICAgICAgICAgICAgRXhwb25lbnQ6IDY1NTM3ICgweDEwMDAxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICAgMmY6NDI6NWY6YTM6MDk6MmM6ZmE6NTE6ODg6Yzc6Mzc6N2Y6ZWE6MGU6NjM6ZjA6YTI6OWE6CisgICAgICAgICBlNTo1YTplMjpjODoyMDpmMDozZjo2MDpiYzpjODowZjpiNjpjNjo3NjpjZTpkYjo4Mzo5MzoKKyAgICAgICAgIGY1OmEzOjMzOjY3OjAxOjhlOjA0OmNkOjAwOjlhOjczOmZkOmYzOjM1Ojg2OmZhOmQ3OjEzOgorICAgICAgICAgZTI6NDY6YzY6OWQ6YzA6Mjk6NTM6ZDQ6YTk6OTA6Yjg6Nzc6NGI6ZTY6ODM6NzY6ZTQ6OTI6CisgICAgICAgICBkNjo5Yzo1MDpjZjo0MzpkMDpjNjowMTo3Nzo2MTo5YTpkZTo5Yjo3MDpmNzo3MjpjZDo1OToKKyAgICAgICAgIDAwOjMxOjY5OmQ5OmI0OmNhOjA2OjljOjZkOmMzOmM3OjgwOjhjOjY4OmU2OmI1OmEyOmY4OgorICAgICAgICAgZWY6MWQ6YmI6MTY6OWY6Nzc6Nzc6ZWY6ODc6NjI6MjI6OWI6NGQ6Njk6YTQ6M2E6MWE6ZjE6CisgICAgICAgICAyMTo1ZTo4YzozMjphYzo5MjpmZDoxNTo2YjoxODpjMjo3ZjoxNTowZDo5ODozMDpjYTo3NToKKyAgICAgICAgIDhmOjFhOjcxOmRmOmRhOjFkOmIyOmVmOjlhOmU4OjJkOjJlOjAyOmZkOjRhOjNjOmFhOjk2OgorICAgICAgICAgMGI6MDY6NWQ6MzU6YjM6M2Q6MjQ6ODc6NGI6ZTA6YjA6NTg6NjA6MmY6NDU6YWM6MmU6NDg6CisgICAgICAgICA4YTpiMDo5OToxMDo2NToyNzpmZjpjYzpiMTpkODpmZDpiZDoyNjo2YjpiOTowYzowNToyYToKKyAgICAgICAgIGY0OjQ1OjYzOjM1OjUxOjA3OmVkOjgzOjg1OmZlOjZmOjY5OmNiOmJiOjQwOmE4OmFlOmI2OgorICAgICAgICAgM2I6NTY6NGE6MmQ6YTQ6ZWQ6NmQ6MTE6MmM6NGQ6ZWQ6MTc6MjQ6ZmQ6NDc6YmM6ZDM6NDE6CisgICAgICAgICBhMjpkMzowNjpmZTowYzo5MDpkODpkODo5NDoyNjpjNDpmZjpjYzphMTpkODo0Mjo3NzplYjoKKyAgICAgICAgIGZjOmE5Ojk0OjcxCistLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KK01JSUNwRENDQVl3Q0NRQ3drbVN4OHRvaDBUQU5CZ2txaGtpRzl3MEJBUVVGQURCTk1Rc3dDUVlEVlFRR0V3SlkKK1dURW1NQ1FHQTFVRUNnd2RVSGwwYUc5dUlGTnZablIzWVhKbElFWnZkVzVrWVhScGIyNGdRMEV4RmpBVUJnTlYKK0JBTU1EVzkxY2kxallTMXpaWEoyWlhJd0hoY05NVE13TVRBME1UazBOekEzV2hjTk1qSXhNVEV6TVRrME56QTMKK1dqQmZNUXN3Q1FZRFZRUUdFd0pZV1RFWE1CVUdBMVVFQnhNT1EyRnpkR3hsSUVGdWRHaHlZWGd4SXpBaEJnTlYKK0JBb1RHbEI1ZEdodmJpQlRiMlowZDJGeVpTQkdiM1Z1WkdGMGFXOXVNUkl3RUFZRFZRUURFd2xzYjJOaGJHaHYKK2MzUXdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBTUxnRDBrQUtEYjVjRnlQamJ3TmZSNUMKK3Rld2RYQytrTVhBV0Q4REx4aVRUdmhNVzdxVm5sd09tMzZtWmxzekhLdnNSZjA1bFQ0cGVnaUZNOXoyajFPbGEKK04rY2kvWDdOVTIyVE5ONmNyWVNpTjc3RmpZSlA0NjRqODc2bmRTeHlEK3J6eXMzODZUKzFyMWFaYWdnRWRrajEKK1RzU3N2MXpXSVlLbFBJamx2aHV4QWdNQkFBRXdEUVlKS29aSWh2Y05BUUVGQlFBRGdnRUJBQzlDWDZNSkxQcFIKK2lNYzNmK29PWS9DaW11VmE0c2dnOEQ5Z3ZNZ1B0c1oyenR1RGsvV2pNMmNCamdUTkFKcHovZk0xaHZyWEUrSkcKK3hwM0FLVlBVcVpDNGQwdm1nM2Jra3RhY1VNOUQwTVlCZDJHYTNwdHc5M0xOV1FBeGFkbTB5Z2FjYmNQSGdJeG8KKzVyV2krTzhkdXhhZmQzZnZoMklpbTAxcHBEb2E4U0ZlakRLc2t2MFZheGpDZnhVTm1EREtkWThhY2QvYUhiTHYKK211Z3RMZ0w5U2p5cWxnc0dYVFd6UFNTSFMrQ3dXR0F2UmF3dVNJcXdtUkJsSi8vTXNkajl2U1pydVF3Rkt2UkYKK1l6VlJCKzJEaGY1dmFjdTdRS2l1dGp0V1NpMms3VzBSTEUzdEZ5VDlSN3pUUWFMVEJ2NE1rTmpZbENiRS84eWgKKzJFSjM2L3lwbEhFPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qva2V5Y2VydDQucGVtIGIvTGliL3Rlc3Qva2V5Y2VydDQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzMzU1YzgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9rZXljZXJ0NC5wZW0KQEAgLTAsMCArMSw3MyBAQAorLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCitNSUlDZGdJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0FtQXdnZ0pjQWdFQUFvR0JBSzVVUWlNSTVWa05zMlF2CitMN2dVYWlEZEZldk5VWFJqVTRESEFlM1p6ellMWk5FNjloOWdPOVZDU1MxNnRKNWZUNVZFdTBFWnlHcjBlM1YyCitOa1gwWm9VMEhjL1VhWTRxeDdMSG1uNVNZWnBJeGhKbmtmN1N5SEpLMXpVYUdsVTAvTHhZcUl1R0N0RjVkcXgxCitMMk9RaEV4MUdNNlJ5ZEhkZ1g2OUc2NExYY1k1QWdNQkFBRUNnWUFoc1JNZkprYjlFUkxNbC9vRy81c0xRdTlMCitwV0RLdDYrWndkeHpsWmJnZ1E4NUNNWXNoakxLSW9kMkRMTC9zTGYyeDFQUlh5UkcxMzFNMUUzazh6a2t6NmRlCitSMXVEcklOL3g5MWl1WXpmTFFaR2g4Yk1ZN1lqZDJlb3JvYTZSLzdEanBFbEdlakx4T0FhRFdPMFNUMklGUXk5CitteVRHUzJqU005N3djWGZzU1FKQkFOUDNqZWxKb1M1WDZCUmpUU25lWTIxd2NvY3hWdVFoOHBYcEVyQUxWTnNUCitkcnJGVGVhQnVacDdLdmJ0bklNNWcyV1JOdmF4TFpsQVkvaFhQSnZpNm5jQ1FRRFNpeDFjZWJtbDZFbVBsRVpTCitNbThnd0kyRjl1ZlV1bndKbUJKY3o4MjZEbzBaTkdCeVdEQU0vSlFaSDRGWDRHZkFGTnVqOFBVYitHUWZhZGt4CitpMURQQWtFQTBsVnNOSG9qdnVEc0lvOEhHdXphck5aUVQyYmVXakoxamR4aDl0N0hyVHg3TElwczZyYi9maE9LCitaczBSNmdWQUphRWJjV0FQWjJ0RnlFQ0luQWRuc1FKQVVqYWVYWGp1eEZrak9GeW01UHZxcHZocGl2RXg3OEJ1CitKUFRyM3JBS1htZkdNeHhmdU9hMHhLMXdTeXNoUDZaUi9SQm4vK2xjWFBLdWJoSFFET2Vnd3dKQUpGMURCUW5OCisrL3RMbU9QVUx0RHdmUDRaaXhuKy84R21HT2FoRm9SY3U2VklHSG1SaWxKVG42TU9CdXR3N0dsdjJZZGVDNmwvCitlODNHcTZmZkxWZktOUT09CistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAxICgweDApCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgyICgweGIwOTI2NGIxZjJkYTIxZDIpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBOb3YgMTMgMTk6NDc6MDcgMjAyMiBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTD1DYXN0bGUgQW50aHJheCwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgQ049ZmFrZWhvc3RuYW1lCisgICAgICAgIFN1YmplY3QgUHVibGljIEtleSBJbmZvOgorICAgICAgICAgICAgUHVibGljIEtleSBBbGdvcml0aG06IHJzYUVuY3J5cHRpb24KKyAgICAgICAgICAgICAgICBQdWJsaWMtS2V5OiAoMTAyNCBiaXQpCisgICAgICAgICAgICAgICAgTW9kdWx1czoKKyAgICAgICAgICAgICAgICAgICAgMDA6YWU6NTQ6NDI6MjM6MDg6ZTU6NTk6MGQ6YjM6NjQ6MmY6MmY6Yjg6MTQ6CisgICAgICAgICAgICAgICAgICAgIDZhOjIwOmRkOjE1OmViOmNkOjUxOjc0OjYzOjUzOjgwOmM3OjAxOmVkOmQ5OgorICAgICAgICAgICAgICAgICAgICBjZjozNjowYjo2NDpkMTozYTpmNjoxZjo2MDozYjpkNTo0Mjo0OToyZDo3YToKKyAgICAgICAgICAgICAgICAgICAgYjQ6OWU6NWY6NGY6OTU6NDQ6YmI6NDE6MTk6Yzg6NmE6ZjQ6N2I6NzU6NzY6CisgICAgICAgICAgICAgICAgICAgIDM2OjQ1OmY0OjY2Ojg1OjM0OjFkOmNmOmQ0OjY5OjhlOjJhOmM3OmIyOmM3OgorICAgICAgICAgICAgICAgICAgICA5YTo3ZTo1Mjo2MTo5YTo0ODpjNjoxMjo2Nzo5MTpmZTpkMjpjODo3Mjo0YToKKyAgICAgICAgICAgICAgICAgICAgZDc6MzU6MWE6MWE6NTU6MzQ6ZmM6YmM6NTg6YTg6OGI6ODY6MGE6ZDE6Nzk6CisgICAgICAgICAgICAgICAgICAgIDc2OmFjOjc1OjJmOjYzOjkwOjg0OjRjOjc1OjE4OmNlOjkxOmM5OmQxOmRkOgorICAgICAgICAgICAgICAgICAgICA4MTo3ZTpiZDoxYjphZTowYjo1ZDpjNjozOQorICAgICAgICAgICAgICAgIEV4cG9uZW50OiA2NTUzNyAoMHgxMDAwMSkKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIGFkOjQ1OjhhOjhlOmVmOmM2OmVmOjA0OjQxOjVjOjJjOjRhOjg0OmRjOjAyOjc2OjBjOmQwOgorICAgICAgICAgNjY6MGY6ZjA6MTY6MDQ6NTg6NGQ6ZmQ6Njg6Yjc6Yjg6ZDM6YTg6NDE6YTU6NWM6M2M6NmY6CisgICAgICAgICA2NTozYzpkMTpmODpjZTo0MzozNTplNzo0MTo1Zjo1MzozZDpjOToyYzpjMzo3ZDpmYzo1NjoKKyAgICAgICAgIDRhOmZhOjQ3Ojc3OjM4OjlkOmJiOjk3OjI4OjBhOjNiOjkxOjE5OjdmOmJjOjc0OmFlOjE1OgorICAgICAgICAgNmI6YmQ6MjA6MzY6Njc6NDU6YTU6MWU6Nzk6ZDc6NzU6ZTY6ODk6NWM6NmQ6NTQ6ODQ6ZDE6CisgICAgICAgICA5NTpkNzphNzpiNDozMzozYzphZjozNzpjNDo3OTo4Zjo1ZTo3NTpkYzo3NTpjMjoxODpmYjoKKyAgICAgICAgIDYxOjZmOjJkOmRjOjM4OjY1OjViOmJhOjY3OjI4OmQwOjg4OmQ3OjhkOmI5OjIzOjVhOjhlOgorICAgICAgICAgZTg6YzY6YmI6ZGI6Y2U6ZDU6Yjg6NDE6MmE6Y2U6OTM6MDg6YjY6OTU6YWQ6MzQ6MjA6MTg6CisgICAgICAgICBkNTozYjozNzo1Mjo3NDo1MDowYjowNzoyYzpiMDo2ZDphNDo0Yzo3YjpmNDplMDpmZDpkMToKKyAgICAgICAgIGFmOjE3OmFhOjIwOmNkOjYyOmUzOmYwOjlkOjM3OjY5OmRiOjQxOmJkOmQ0OjFjOmZiOjUzOgorICAgICAgICAgMjA6ZGE6ODg6OWQ6NzY6MjY6Njc6Y2U6MDE6OTA6YTc6ODA6MWQ6YTk6NWI6Mzk6NzM6Njg6CisgICAgICAgICA1NDowYTpkMToyYTowMzoxYjo4ZjozYzo0Mzo1ZDo1ZDpjNDo1MTpmMTphNzplNzoxMTpkYToKKyAgICAgICAgIDMxOjJjOjQ5OjA2OmFmOjA0OmY0OmI4OjNjOjk5OmM0OjIwOmI5OjA2OjM2OmEyOjAwOjkyOgorICAgICAgICAgNjE6MWQ6MGM6NmQ6MjQ6MDU6ZTI6ODI6ZTE6NDc6ZGI6YTA6NWY6YmE6Yjk6ZmI6YmE6ZmE6CisgICAgICAgICA0OToxMjoxZTpjZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlDcHpDQ0FZOENDUUN3a21TeDh0b2gwakFOQmdrcWhraUc5dzBCQVFVRkFEQk5NUXN3Q1FZRFZRUUdFd0pZCitXVEVtTUNRR0ExVUVDZ3dkVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1a1lYUnBiMjRnUTBFeEZqQVVCZ05WCitCQU1NRFc5MWNpMWpZUzF6WlhKMlpYSXdIaGNOTVRNd01UQTBNVGswTnpBM1doY05Nakl4TVRFek1UazBOekEzCitXakJpTVFzd0NRWURWUVFHRXdKWVdURVhNQlVHQTFVRUJ4TU9RMkZ6ZEd4bElFRnVkR2h5WVhneEl6QWhCZ05WCitCQW9UR2xCNWRHaHZiaUJUYjJaMGQyRnlaU0JHYjNWdVpHRjBhVzl1TVJVd0V3WURWUVFERXd4bVlXdGxhRzl6CitkRzVoYldVd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFLNVVRaU1JNVZrTnMyUXZMN2dVCithaURkRmV2TlVYUmpVNERIQWUzWnp6WUxaTkU2OWg5Z085VkNTUzE2dEo1ZlQ1VkV1MEVaeUdyMGUzVjJOa1gwCitab1UwSGMvVWFZNHF4N0xIbW41U1lacEl4aEpua2Y3U3lISksxelVhR2xVMC9MeFlxSXVHQ3RGNWRxeDFMMk9RCitoRXgxR002UnlkSGRnWDY5RzY0TFhjWTVBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFLMUZpbzd2Cit4dThFUVZ3c1NvVGNBbllNMEdZUDhCWUVXRTM5YUxlNDA2aEJwVnc4YjJVODBmak9RelhuUVY5VFBja3N3MzM4CitWa3I2UjNjNG5idVhLQW83a1JsL3ZIU3VGV3U5SURablJhVWVlZGQxNW9sY2JWU0UwWlhYcDdRelBLODN4SG1QCitYblhjZGNJWSsyRnZMZHc0WlZ1Nlp5alFpTmVOdVNOYWp1akd1OXZPMWJoQktzNlRDTGFWclRRZ0dOVTdOMUowCitVQXNITExCdHBFeDc5T0Q5MGE4WHFpRE5ZdVB3blRkcDIwRzkxQno3VXlEYWlKMTJKbWZPQVpDbmdCMnBXemx6CithRlFLMFNvREc0ODhRMTFkeEZIeHArY1IyakVzU1FhdkJQUzRQSm5FSUxrR05xSUFrbUVkREcwa0JlS0M0VWZiCitvRis2dWZ1Nitra1NIczQ9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9sZWFrZXJzL3Rlc3RfZ2VzdGFsdC5weSBiL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDA4MWMxLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L2xlYWtlcnMvdGVzdF9nZXN0YWx0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotaW1wb3J0IHN5cwotCi1pZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6Ci0gICAgcmFpc2UgVmFsdWVFcnJvcigiVGhpcyB0ZXN0IG9ubHkgbGVha3Mgb24gTWFjIE9TIFgiKQotCi1kZWYgbGVhaygpOgotICAgICMgdGFrZW4gZnJvbSBwbGF0Zm9ybS5fbWFjX3Zlcl9sb29rdXAoKQotICAgIGZyb20gZ2VzdGFsdCBpbXBvcnQgZ2VzdGFsdAotICAgIGltcG9ydCBNYWNPUwotCi0gICAgdHJ5OgotICAgICAgICBnZXN0YWx0KCdzeXN1JykKLSAgICBleGNlcHQgTWFjT1MuRXJyb3I6Ci0gICAgICAgIHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkgYi9MaWIvdGVzdC9sb2NrX3Rlc3RzLnB5CmluZGV4IGJmYmY0NGUuLjQ2MmVjZWYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L2xvY2tfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvbG9ja190ZXN0cy5weQpAQCAtMzksOCArMzksMTIgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZpbmlzaGVkLmFwcGVuZCh0aWQpCiAgICAgICAgICAgICAgICAgd2hpbGUgbm90IHNlbGYuX2Nhbl9leGl0OgogICAgICAgICAgICAgICAgICAgICBfd2FpdCgpCi0gICAgICAgIGZvciBpIGluIHJhbmdlKG4pOgotICAgICAgICAgICAgc3RhcnRfbmV3X3RocmVhZCh0YXNrLCAoKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3RocmVhZCh0YXNrLCAoKSkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgc2VsZi5fY2FuX2V4aXQgPSBUcnVlCisgICAgICAgICAgICByYWlzZQogCiAgICAgZGVmIHdhaXRfZm9yX3N0YXJ0ZWQoc2VsZik6CiAgICAgICAgIHdoaWxlIGxlbihzZWxmLnN0YXJ0ZWQpIDwgc2VsZi5uOgpAQCAtODAsNiArODQsMTEgQEAKICAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQogICAgICAgICBkZWwgbG9jawogCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgbG9jayA9IHNlbGYubG9ja3R5cGUoKQorICAgICAgICByZXByKGxvY2spCisgICAgICAgIGRlbCBsb2NrCisKICAgICBkZWYgdGVzdF9hY3F1aXJlX2Rlc3Ryb3koc2VsZik6CiAgICAgICAgIGxvY2sgPSBzZWxmLmxvY2t0eXBlKCkKICAgICAgICAgbG9jay5hY3F1aXJlKCkKQEAgLTM3OSw2ICszODgsMTQgQEAKICAgICAgICAgYi53YWl0X2Zvcl9maW5pc2hlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cywgW1RydWVdICogTikKIAorICAgIGRlZiB0ZXN0X3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYpOgorICAgICAgICBldnQgPSBzZWxmLmV2ZW50dHlwZSgpCisgICAgICAgIG9sZF9sb2NrID0gZXZ0Ll9jb25kLl9sb2NrCisgICAgICAgIGV2dC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoKQorICAgICAgICBuZXdfbG9jayA9IGV2dC5fY29uZC5fbG9jaworICAgICAgICBzZWxmLmFzc2VydElzTm90KG5ld19sb2NrLCBvbGRfbG9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKG5ld19sb2NrKSwgdHlwZShvbGRfbG9jaykpCisKIAogY2xhc3MgQ29uZGl0aW9uVGVzdHMoQmFzZVRlc3RDYXNlKToKICAgICAiIiIKQEAgLTQxMyw2ICs0MzAsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBjb25kLm5vdGlmeSkKIAogICAgIGRlZiBfY2hlY2tfbm90aWZ5KHNlbGYsIGNvbmQpOgorICAgICAgICAjIE5vdGUgdGhhdCB0aGlzIHRlc3QgaXMgc2Vuc2l0aXZlIHRvIHRpbWluZy4gIElmIHRoZSB3b3JrZXIgdGhyZWFkcworICAgICAgICAjIGRvbid0IGV4ZWN1dGUgaW4gYSB0aW1lbHkgZmFzaGlvbiwgdGhlIG1haW4gdGhyZWFkIG1heSB0aGluayB0aGV5CisgICAgICAgICMgYXJlIGZ1cnRoZXIgYWxvbmcgdGhlbiB0aGV5IGFyZS4gIFRoZSBtYWluIHRocmVhZCB0aGVyZWZvcmUgaXNzdWVzCisgICAgICAgICMgX3dhaXQoKSBzdGF0ZW1lbnRzIHRvIHRyeSB0byBtYWtlIHN1cmUgdGhhdCBpdCBkb2Vzbid0IHJhY2UgYWhlYWQKKyAgICAgICAgIyBvZiB0aGUgd29ya2Vycy4KKyAgICAgICAgIyBTZWNvbmRseSwgdGhpcyB0ZXN0IGFzc3VtZXMgdGhhdCBjb25kaXRpb24gdmFyaWFibGVzIGFyZSBub3Qgc3ViamVjdAorICAgICAgICAjIHRvIHNwdXJpb3VzIHdha2V1cHMuICBUaGUgYWJzZW5jZSBvZiBzcHVyaW91cyB3YWtldXBzIGlzIGFuIGltcGxlbWVudGF0aW9uCisgICAgICAgICMgZGV0YWlsIG9mIENvbmRpdGlvbiBDYXJpYWJsZXMgaW4gY3VycmVudCBDUHl0aG9uLCBidXQgaW4gZ2VuZXJhbCwgbm90CisgICAgICAgICMgYSBndWFyYW50ZWVkIHByb3BlcnR5IG9mIGNvbmRpdGlvbiB2YXJpYWJsZXMgYXMgYSBwcm9ncmFtbWluZworICAgICAgICAjIGNvbnN0cnVjdC4gIEluIHBhcnRpY3VsYXIsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBjYW4gbm8gbG9uZ2VyCisgICAgICAgICMgYmUgY29udmVuaWVudGx5IGd1YXJhbnRlZWQgc2hvdWxkIHRoZWlyIGltcGxlbWVudGF0aW9uIGV2ZXIgY2hhbmdlLgogICAgICAgICBOID0gNQogICAgICAgICByZXN1bHRzMSA9IFtdCiAgICAgICAgIHJlc3VsdHMyID0gW10KQEAgLTQ0MCw2ICs0NjgsOSBAQAogICAgICAgICAgICAgX3dhaXQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMxLCBbKFRydWUsIDEpXSAqIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0czIsIFtdKQorICAgICAgICAjIGZpcnN0IHdhaXQsIHRvIGVuc3VyZSBhbGwgd29ya2VycyBzZXR0bGUgaW50byBjb25kLndhaXQoKSBiZWZvcmUKKyAgICAgICAgIyB3ZSBjb250aW51ZS4gU2VlIGlzc3VlICM4Nzk5CisgICAgICAgIF93YWl0KCkKICAgICAgICAgIyBOb3RpZnkgNSB0aHJlYWRzOiB0aGV5IG1pZ2h0IGJlIGluIHRoZWlyIGZpcnN0IG9yIHNlY29uZCB3YWl0CiAgICAgICAgIGNvbmQuYWNxdWlyZSgpCiAgICAgICAgIGNvbmQubm90aWZ5KDUpCkBAIC00NTAsNiArNDgxLDcgQEAKICAgICAgICAgICAgIF93YWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzMSwgWyhUcnVlLCAxKV0gKiAzICsgWyhUcnVlLCAyKV0gKiAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMyLCBbKFRydWUsIDIpXSAqIDMpCisgICAgICAgIF93YWl0KCkgIyBtYWtlIHN1cmUgYWxsIHdvcmtlcnMgc2V0dGxlIGludG8gY29uZC53YWl0KCkKICAgICAgICAgIyBOb3RpZnkgYWxsIHRocmVhZHM6IHRoZXkgYXJlIGFsbCBpbiB0aGVpciBzZWNvbmQgd2FpdAogICAgICAgICBjb25kLmFjcXVpcmUoKQogICAgICAgICBjb25kLm5vdGlmeV9hbGwoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbWFrZV9zc2xfY2VydHMucHkgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQppbmRleCA0OGQyZTU3Li44MWQwNGY4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQorKysgYi9MaWIvdGVzdC9tYWtlX3NzbF9jZXJ0cy5weQpAQCAtMiw2ICsyLDcgQEAKIGFuZCBmcmllbmRzLiIiIgogCiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSBzdWJwcm9jZXNzIGltcG9ydCAqCkBAIC0yMCwxMSArMjEsNTQgQEAKIAogICAgIFtyZXFfeDUwOV9leHRlbnNpb25zXQogICAgIHN1YmplY3RBbHROYW1lICAgICAgICAgPSBETlM6e2hvc3RuYW1lfQorCisgICAgWyBjYSBdCisgICAgZGVmYXVsdF9jYSAgICAgID0gQ0FfZGVmYXVsdAorCisgICAgWyBDQV9kZWZhdWx0IF0KKyAgICBkaXIgPSBjYWRpcgorICAgIGRhdGFiYXNlICA9ICRkaXIvaW5kZXgudHh0CisgICAgY3JsbnVtYmVyID0gJGRpci9jcmwudHh0CisgICAgZGVmYXVsdF9tZCA9IHNoYTEKKyAgICBkZWZhdWx0X2RheXMgPSAzNjAwCisgICAgZGVmYXVsdF9jcmxfZGF5cyA9IDM2MDAKKyAgICBjZXJ0aWZpY2F0ZSA9IHB5Y2FjZXJ0LnBlbQorICAgIHByaXZhdGVfa2V5ID0gcHljYWtleS5wZW0KKyAgICBzZXJpYWwgICAgPSAkZGlyL3NlcmlhbAorICAgIFJBTkRGSUxFICA9ICRkaXIvLnJhbmQKKworICAgIHBvbGljeSAgICAgICAgICA9IHBvbGljeV9tYXRjaAorCisgICAgWyBwb2xpY3lfbWF0Y2ggXQorICAgIGNvdW50cnlOYW1lICAgICAgICAgICAgID0gbWF0Y2gKKyAgICBzdGF0ZU9yUHJvdmluY2VOYW1lICAgICA9IG9wdGlvbmFsCisgICAgb3JnYW5pemF0aW9uTmFtZSAgICAgICAgPSBtYXRjaAorICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUgID0gb3B0aW9uYWwKKyAgICBjb21tb25OYW1lICAgICAgICAgICAgICA9IHN1cHBsaWVkCisgICAgZW1haWxBZGRyZXNzICAgICAgICAgICAgPSBvcHRpb25hbAorCisgICAgWyBwb2xpY3lfYW55dGhpbmcgXQorICAgIGNvdW50cnlOYW1lICAgPSBvcHRpb25hbAorICAgIHN0YXRlT3JQcm92aW5jZU5hbWUgPSBvcHRpb25hbAorICAgIGxvY2FsaXR5TmFtZSAgICA9IG9wdGlvbmFsCisgICAgb3JnYW5pemF0aW9uTmFtZSAgPSBvcHRpb25hbAorICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWUgID0gb3B0aW9uYWwKKyAgICBjb21tb25OYW1lICAgID0gc3VwcGxpZWQKKyAgICBlbWFpbEFkZHJlc3MgICAgPSBvcHRpb25hbAorCisKKyAgICBbIHYzX2NhIF0KKworICAgIHN1YmplY3RLZXlJZGVudGlmaWVyPWhhc2gKKyAgICBhdXRob3JpdHlLZXlJZGVudGlmaWVyPWtleWlkOmFsd2F5cyxpc3N1ZXIKKyAgICBiYXNpY0NvbnN0cmFpbnRzID0gQ0E6dHJ1ZQorCiAgICAgIiIiCiAKIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIAotZGVmIG1ha2VfY2VydF9rZXkoaG9zdG5hbWUpOgorZGVmIG1ha2VfY2VydF9rZXkoaG9zdG5hbWUsIHNpZ249RmFsc2UpOgorICAgIHByaW50KCJjcmVhdGluZyBjZXJ0IGZvciAiICsgaG9zdG5hbWUpCiAgICAgdGVtcG5hbWVzID0gW10KICAgICBmb3IgaSBpbiByYW5nZSgzKToKICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgpAQCAtMzMsMTAgKzc3LDI1IEBACiAgICAgdHJ5OgogICAgICAgICB3aXRoIG9wZW4ocmVxX2ZpbGUsICd3JykgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUocmVxX3RlbXBsYXRlLmZvcm1hdChob3N0bmFtZT1ob3N0bmFtZSkpCi0gICAgICAgIGFyZ3MgPSBbJ3JlcScsICctbmV3JywgJy1kYXlzJywgJzM2NTAnLCAnLW5vZGVzJywgJy14NTA5JywKKyAgICAgICAgYXJncyA9IFsncmVxJywgJy1uZXcnLCAnLWRheXMnLCAnMzY1MCcsICctbm9kZXMnLAogICAgICAgICAgICAgICAgICctbmV3a2V5JywgJ3JzYToxMDI0JywgJy1rZXlvdXQnLCBrZXlfZmlsZSwKLSAgICAgICAgICAgICAgICAnLW91dCcsIGNlcnRfZmlsZSwgJy1jb25maWcnLCByZXFfZmlsZV0KKyAgICAgICAgICAgICAgICAnLWNvbmZpZycsIHJlcV9maWxlXQorICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoZGVsZXRlPUZhbHNlKSBhcyBmOgorICAgICAgICAgICAgICAgIHRlbXBuYW1lcy5hcHBlbmQoZi5uYW1lKQorICAgICAgICAgICAgICAgIHJlcWZpbGUgPSBmLm5hbWUKKyAgICAgICAgICAgIGFyZ3MgKz0gWyctb3V0JywgcmVxZmlsZSBdCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFyZ3MgKz0gWycteDUwOScsICctb3V0JywgY2VydF9maWxlIF0KICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisKKyAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgIGFyZ3MgPSBbJ2NhJywgJy1jb25maWcnLCByZXFfZmlsZSwgJy1vdXQnLCBjZXJ0X2ZpbGUsICctb3V0ZGlyJywgJ2NhZGlyJywKKyAgICAgICAgICAgICAgICAgICAgJy1wb2xpY3knLCAncG9saWN5X2FueXRoaW5nJywgJy1iYXRjaCcsICctaW5maWxlcycsIHJlcWZpbGUgXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisKKwogICAgICAgICB3aXRoIG9wZW4oY2VydF9maWxlLCAncicpIGFzIGY6CiAgICAgICAgICAgICBjZXJ0ID0gZi5yZWFkKCkKICAgICAgICAgd2l0aCBvcGVuKGtleV9maWxlLCAncicpIGFzIGY6CkBAIC00Niw2ICsxMDUsMzYgQEAKICAgICAgICAgZm9yIG5hbWUgaW4gdGVtcG5hbWVzOgogICAgICAgICAgICAgb3MucmVtb3ZlKG5hbWUpCiAKK1RNUF9DQURJUiA9ICdjYWRpcicKKworZGVmIHVubWFrZV9jYSgpOgorICAgIHNodXRpbC5ybXRyZWUoVE1QX0NBRElSKQorCitkZWYgbWFrZV9jYSgpOgorICAgIG9zLm1rZGlyKFRNUF9DQURJUikKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdjYWRpcicsJ2luZGV4LnR4dCcpLCdhKycpIGFzIGY6CisgICAgICAgIHBhc3MgIyBlbXB0eSBmaWxlCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignY2FkaXInLCdjcmwudHh0JyksJ2ErJykgYXMgZjoKKyAgICAgICAgZi53cml0ZSgiMDAiKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oJ2NhZGlyJywnaW5kZXgudHh0LmF0dHInKSwndysnKSBhcyBmOgorICAgICAgICBmLndyaXRlKCd1bmlxdWVfc3ViamVjdCA9IG5vJykKKworICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCJ3IikgYXMgdDoKKyAgICAgICAgdC53cml0ZShyZXFfdGVtcGxhdGUuZm9ybWF0KGhvc3RuYW1lPSdvdXItY2Etc2VydmVyJykpCisgICAgICAgIHQuZmx1c2goKQorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGY6CisgICAgICAgICAgICBhcmdzID0gWydyZXEnLCAnLW5ldycsICctZGF5cycsICczNjUwJywgJy1leHRlbnNpb25zJywgJ3YzX2NhJywgJy1ub2RlcycsCisgICAgICAgICAgICAgICAgICAgICctbmV3a2V5JywgJ3JzYToyMDQ4JywgJy1rZXlvdXQnLCAncHljYWtleS5wZW0nLAorICAgICAgICAgICAgICAgICAgICAnLW91dCcsIGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJy1zdWJqJywgJy9DPVhZL0w9Q2FzdGxlIEFudGhyYXgvTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQS9DTj1vdXItY2Etc2VydmVyJ10KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQorICAgICAgICAgICAgYXJncyA9IFsnY2EnLCAnLWNvbmZpZycsIHQubmFtZSwgJy1jcmVhdGVfc2VyaWFsJywKKyAgICAgICAgICAgICAgICAgICAgJy1vdXQnLCAncHljYWNlcnQucGVtJywgJy1iYXRjaCcsICctb3V0ZGlyJywgVE1QX0NBRElSLAorICAgICAgICAgICAgICAgICAgICAnLWtleWZpbGUnLCAncHljYWtleS5wZW0nLCAnLWRheXMnLCAnMzY1MCcsCisgICAgICAgICAgICAgICAgICAgICctc2VsZnNpZ24nLCAnLWV4dGVuc2lvbnMnLCAndjNfY2EnLCAnLWluZmlsZXMnLCBmLm5hbWUgXQorICAgICAgICAgICAgY2hlY2tfY2FsbChbJ29wZW5zc2wnXSArIGFyZ3MpCisgICAgICAgICAgICBhcmdzID0gWydjYScsICctY29uZmlnJywgdC5uYW1lLCAnLWdlbmNybCcsICctb3V0JywgJ3Jldm9jYXRpb24uY3JsJ10KKyAgICAgICAgICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJ10gKyBhcmdzKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIG9zLmNoZGlyKGhlcmUpCkBAIC01NCwxMSArMTQzLDM0IEBACiAgICAgICAgIGYud3JpdGUoY2VydCkKICAgICB3aXRoIG9wZW4oJ3NzbF9rZXkucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKKyAgICBwcmludCgicGFzc3dvcmQgcHJvdGVjdGluZyBzc2xfa2V5LnBlbSBpbiBzc2xfa2V5LnBhc3N3ZC5wZW0iKQorICAgIGNoZWNrX2NhbGwoWydvcGVuc3NsJywncnNhJywnLWluJywnc3NsX2tleS5wZW0nLCctb3V0Jywnc3NsX2tleS5wYXNzd2QucGVtJywnLWRlczMnLCctcGFzc291dCcsJ3Bhc3M6c29tZXBhc3MnXSkKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3JzYScsJy1pbicsJ3NzbF9rZXkucGVtJywnLW91dCcsJ2tleWNlcnQucGFzc3dkLnBlbScsJy1kZXMzJywnLXBhc3NvdXQnLCdwYXNzOnNvbWVwYXNzJ10pCisKICAgICB3aXRoIG9wZW4oJ2tleWNlcnQucGVtJywgJ3cnKSBhcyBmOgogICAgICAgICBmLndyaXRlKGtleSkKICAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgd2l0aCBvcGVuKCdrZXljZXJ0LnBhc3N3ZC5wZW0nLCAnYSsnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGNlcnQpCisKICAgICAjIEZvciBjZXJ0aWZpY2F0ZSBtYXRjaGluZyB0ZXN0cworICAgIG1ha2VfY2EoKQogICAgIGNlcnQsIGtleSA9IG1ha2VfY2VydF9rZXkoJ2Zha2Vob3N0bmFtZScpCiAgICAgd2l0aCBvcGVuKCdrZXljZXJ0Mi5wZW0nLCAndycpIGFzIGY6CiAgICAgICAgIGYud3JpdGUoa2V5KQogICAgICAgICBmLndyaXRlKGNlcnQpCisKKyAgICBjZXJ0LCBrZXkgPSBtYWtlX2NlcnRfa2V5KCdsb2NhbGhvc3QnLCBUcnVlKQorICAgIHdpdGggb3Blbigna2V5Y2VydDMucGVtJywgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKGtleSkKKyAgICAgICAgZi53cml0ZShjZXJ0KQorCisgICAgY2VydCwga2V5ID0gbWFrZV9jZXJ0X2tleSgnZmFrZWhvc3RuYW1lJywgVHJ1ZSkKKyAgICB3aXRoIG9wZW4oJ2tleWNlcnQ0LnBlbScsICd3JykgYXMgZjoKKyAgICAgICAgZi53cml0ZShrZXkpCisgICAgICAgIGYud3JpdGUoY2VydCkKKworICAgIHVubWFrZV9jYSgpCisgICAgcHJpbnQoIlxuXG5QbGVhc2UgY2hhbmdlIHRoZSB2YWx1ZXMgaW4gdGVzdF9zc2wucHksIHRlc3RfcGFyc2VfY2VydCBmdW5jdGlvbiByZWxhdGVkIHRvIG5vdEFmdGVyLG5vdEJlZm9yZSBhbmQgc2VyaWFsTnVtYmVyIikKKyAgICBjaGVja19jYWxsKFsnb3BlbnNzbCcsJ3g1MDknLCctaW4nLCdrZXljZXJ0LnBlbScsJy1kYXRlcycsJy1zZXJpYWwnLCctbm9vdXQnXSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L21hcHBpbmdfdGVzdHMucHkgYi9MaWIvdGVzdC9tYXBwaW5nX3Rlc3RzLnB5CmluZGV4IGJjMTJjNzcuLmZmODJmNGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L21hcHBpbmdfdGVzdHMucHkKKysrIGIvTGliL3Rlc3QvbWFwcGluZ190ZXN0cy5weQpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocCwgZCkKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkLCBwKQotICAgICAgICAjX19ub25fX3plcm9fXworICAgICAgICAjYm9vbAogICAgICAgICBpZiBwOiBzZWxmLmZhaWwoIkVtcHR5IG1hcHBpbmcgbXVzdCBjb21wYXJlIHRvIEZhbHNlIikKICAgICAgICAgaWYgbm90IGQ6IHNlbGYuZmFpbCgiRnVsbCBtYXBwaW5nIG11c3QgY29tcGFyZSB0byBUcnVlIikKICAgICAgICAgIyBrZXlzKCksIGl0ZW1zKCksIGl0ZXJrZXlzKCkgLi4uCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tb2NrX3NvY2tldC5weSBiL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5CmluZGV4IDg2MWJmYjIuLmUzNjcyNGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5CisrKyBiL0xpYi90ZXN0L21vY2tfc29ja2V0LnB5CkBAIC0xNDUsMTIgKzE0NSw4IEBACiAgICAgcmV0dXJuICIiCiAKIAotY2xhc3MgZ2FpZXJyb3IoRXhjZXB0aW9uKToKLSAgICBwYXNzCi0KLQotY2xhc3MgZXJyb3IoRXhjZXB0aW9uKToKLSAgICBwYXNzCitnYWllcnJvciA9IHNvY2tldF9tb2R1bGUuZ2FpZXJyb3IKK2Vycm9yID0gc29ja2V0X21vZHVsZS5lcnJvcgogCiAKICMgQ29uc3RhbnRzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkgYi9MaWIvdGVzdC9tcF9mb3JrX2JvbWIucHkKaW5kZXggOTA4YWZlMy4uMDE3ZTAxMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvbXBfZm9ya19ib21iLnB5CisrKyBiL0xpYi90ZXN0L21wX2ZvcmtfYm9tYi5weQpAQCAtNyw2ICs3LDExIEBACiAjIGNvcnJlY3RseSBvbiBXaW5kb3dzLiAgSG93ZXZlciwgd2Ugc2hvdWxkIGdldCBhIFJ1bnRpbWVFcnJvciByYXRoZXIKICMgdGhhbiB0aGUgV2luZG93cyBlcXVpdmFsZW50IG9mIGEgZm9yayBib21iLgogCitpZiBsZW4oc3lzLmFyZ3YpID4gMToKKyAgICBtdWx0aXByb2Nlc3Npbmcuc2V0X3N0YXJ0X21ldGhvZChzeXMuYXJndlsxXSkKK2Vsc2U6CisgICAgbXVsdGlwcm9jZXNzaW5nLnNldF9zdGFydF9tZXRob2QoJ3NwYXduJykKKwogcCA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1mb28pCiBwLnN0YXJ0KCkKIHAuam9pbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5IGIvTGliL3Rlc3QvbXVsdGlieXRlY29kZWNfc3VwcG9ydC5weQppbmRleCAxNGZlYTNlLi5mOTg4NGM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC9tdWx0aWJ5dGVjb2RlY19zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L211bHRpYnl0ZWNvZGVjX3N1cHBvcnQucHkKQEAgLTIxLDcgKzIxLDcgQEAKICAgICByb3VuZHRyaXB0ZXN0ICAgPSAxICAgICMgc2V0IGlmIHJvdW5kdHJpcCBpcyBwb3NzaWJsZSB3aXRoIHVuaWNvZGUKICAgICBoYXNfaXNvMTA2NDYgICAgPSAwICAgICMgc2V0IGlmIHRoaXMgZW5jb2RpbmcgY29udGFpbnMgd2hvbGUgaXNvMTA2NDYgbWFwCiAgICAgeG1sY2hhcm5hbWV0ZXN0ID0gTm9uZSAjIHN0cmluZyB0byB0ZXN0IHhtbGNoYXJyZWZyZXBsYWNlCi0gICAgdW5tYXBwZWR1bmljb2RlID0gJ1x1ZGVlZScgIyBhIHVuaWNvZGUgY29kZXBvaW50IHRoYXQgaXMgbm90IG1hcHBlZC4KKyAgICB1bm1hcHBlZHVuaWNvZGUgPSAnXHVkZWVlJyAjIGEgdW5pY29kZSBjb2RlIHBvaW50IHRoYXQgaXMgbm90IG1hcHBlZC4KIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgaWYgc2VsZi5jb2RlYyBpcyBOb25lOgpAQCAtMjcwLDYgKzI3MCwxMyBAQAogCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvc3RyZWFtLmdldHZhbHVlKCksIHNlbGYudHN0cmluZ1swXSkKIAorICAgIGRlZiB0ZXN0X3N0cmVhbXdyaXRlcl9yZXNldF9ub19wZW5kaW5nKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMzI0NzogQ2FsbGluZyByZXNldCgpIG9uIGEgZnJlc2ggU3RyZWFtV3JpdGVyIGluc3RhbmNlCisgICAgICAgICMgKHdpdGhvdXQgcGVuZGluZyBkYXRhKSBtdXN0IG5vdCBjcmFzaAorICAgICAgICBzdHJlYW0gPSBCeXRlc0lPKCkKKyAgICAgICAgd3JpdGVyID0gc2VsZi53cml0ZXIoc3RyZWFtKQorICAgICAgICB3cml0ZXIucmVzZXQoKQorCiAKIGNsYXNzIFRlc3RCYXNlX01hcHBpbmcodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHBhc3NfZW5jdGVzdCA9IFtdCkBAIC0yNzcsMTEgKzI4NCwxMCBAQAogICAgIHN1cG1hcHMgPSBbXQogICAgIGNvZGVjdGVzdHMgPSBbXQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKLSAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3cpCisgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLm9wZW5fbWFwcGluZ19maWxlKCkuY2xvc2UoKSAjIHRlc3QgaXQgdG8gcmVwb3J0IHRoZSBlcnJvciBlYXJseQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIEhUVFBFeGNlcHRpb24pOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiQ291bGQgbm90IHJldHJpZXZlICIrc2VsZi5tYXBmaWxldXJsKQogCiAgICAgZGVmIG9wZW5fbWFwcGluZ19maWxlKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5IGIvTGliL3Rlc3QvcGlja2xldGVzdGVyLnB5CmluZGV4IDRkNTliZGUuLmI5NDhjNTUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3BpY2tsZXRlc3Rlci5weQorKysgYi9MaWIvdGVzdC9waWNrbGV0ZXN0ZXIucHkKQEAgLTEsMTIgKzEsMTcgQEAKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvcHlyZWcKK2ltcG9ydCBkYm0KIGltcG9ydCBpbwotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgcGlja2xldG9vbHMKK2ltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzeXMKLWltcG9ydCBjb3B5cmVnCitpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiBmcm9tIGh0dHAuY29va2llcyBpbXBvcnQgU2ltcGxlQ29va2llCiAKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICgKICAgICBUZXN0RmFpbGVkLCBURVNURk4sIHJ1bl93aXRoX2xvY2FsZSwgbm9fdHJhY2luZywKICAgICBfMkcsIF80RywgYmlnbWVtdGVzdCwKQEAgLTE0LDYgKzE5LDkgQEAKIAogZnJvbSBwaWNrbGUgaW1wb3J0IGJ5dGVzX3R5cGVzCiAKK3JlcXVpcmVzXzMyYiA9IHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLm1heHNpemUgPCAyKiozMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgaXMgb25seSBtZWFuaW5nZnVsIG9uIDMyLWJpdCBidWlsZHMiKQorCiAjIFRlc3RzIHRoYXQgdHJ5IGEgbnVtYmVyIG9mIHBpY2tsZSBwcm90b2NvbHMgc2hvdWxkIGhhdmUgYQogIyAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICMga2luZCBvZiBvdXRlciBsb29wLgpAQCAtOTMsNiArMTAxLDE4IEBACiAgICAgZGVmIF9fZ2V0aW5pdGFyZ3NfXyhzZWxmKToKICAgICAgICAgcmV0dXJuICgpCiAKK2NsYXNzIEgob2JqZWN0KToKKyAgICBwYXNzCisKKyMgSGFzaGFibGUgbXV0YWJsZSBrZXkKK2NsYXNzIEsob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX3JlZHVjZV9fKHNlbGYpOgorICAgICAgICAjIFNob3VsZG4ndCBzdXBwb3J0IHRoZSByZWN1cnNpb24gaXRzZWxmCisgICAgICAgIHJldHVybiBLLCAoc2VsZi52YWx1ZSwpCisKIGltcG9ydCBfX21haW5fXwogX19tYWluX18uQyA9IEMKIEMuX19tb2R1bGVfXyA9ICJfX21haW5fXyIKQEAgLTEwMCw2ICsxMjAsMTAgQEAKIEQuX19tb2R1bGVfXyA9ICJfX21haW5fXyIKIF9fbWFpbl9fLkUgPSBFCiBFLl9fbW9kdWxlX18gPSAiX19tYWluX18iCitfX21haW5fXy5IID0gSAorSC5fX21vZHVsZV9fID0gIl9fbWFpbl9fIgorX19tYWluX18uSyA9IEsKK0suX19tb2R1bGVfXyA9ICJfX21haW5fXyIKIAogY2xhc3MgbXlpbnQoaW50KToKICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CkBAIC0xMzMsMjUgKzE1NywyNiBAQAogICAgIHJlc3VsdC5yZWR1Y2VfYXJncyA9IChuYW1lLCBiYXNlcykKICAgICByZXR1cm4gcmVzdWx0CiAKLSMgREFUQTAgLi4gREFUQTIgYXJlIHRoZSBwaWNrbGVzIHdlIGV4cGVjdCB1bmRlciB0aGUgdmFyaW91cyBwcm90b2NvbHMsIGZvcgorIyBEQVRBMCAuLiBEQVRBNCBhcmUgdGhlIHBpY2tsZXMgd2UgZXhwZWN0IHVuZGVyIHRoZSB2YXJpb3VzIHByb3RvY29scywgZm9yCiAjIHRoZSBvYmplY3QgcmV0dXJuZWQgYnkgY3JlYXRlX2RhdGEoKS4KIAogREFUQTAgPSAoCi0gICAgYicobHAwXG5MMExcbmFMMUxcbmFGMi4wXG5hYycKLSAgICBiJ2J1aWx0aW5zXG5jb21wbGV4XG4nCi0gICAgYidwMVxuKEYzLjBcbkYwLjBcbnRwMlxuUnAnCi0gICAgYiczXG5hTDFMXG5hTC0xTFxuYUwyNTVMXG5hTC0nCi0gICAgYicyNTVMXG5hTC0yNTZMXG5hTDY1NTM1TFxuYScKLSAgICBiJ0wtNjU1MzVMXG5hTC02NTUzNkxcbmFMMicKLSAgICBiJzE0NzQ4MzY0N0xcbmFMLTIxNDc0ODMnCi0gICAgYic2NDdMXG5hTC0yMTQ3NDgzNjQ4TFxuYSgnCi0gICAgYidWYWJjXG5wNFxuZzRcbmNjb3B5cmVnJwotICAgIGInXG5fcmVjb25zdHJ1Y3RvclxucDVcbignCi0gICAgYidjX19tYWluX19cbkNcbnA2XG5jYnUnCi0gICAgYidpbHRpbnNcbm9iamVjdFxucDdcbk50JwotICAgIGIncDhcblJwOVxuKGRwMTBcblZmb29cbnAxJwotICAgIGInMVxuTDFMXG5zVmJhclxucDEyXG5MMkxcbnNiJwotICAgIGInZzlcbnRwMTNcbmFnMTNcbmFMNUxcbmEuJworICAgIGInKGxwMFxuTDBMXG5hTDFMXG5hRjIuMFxuJworICAgIGInYWNfX2J1aWx0aW5fX1xuY29tcGxlJworICAgIGIneFxucDFcbihGMy4wXG5GMC4wXG50cDJcbicKKyAgICBiJ1JwM1xuYUwxTFxuYUwtMUxcbmFMMjU1JworICAgIGInTFxuYUwtMjU1TFxuYUwtMjU2TFxuYUwnCisgICAgYic2NTUzNUxcbmFMLTY1NTM1TFxuYUwtJworICAgIGInNjU1MzZMXG5hTDIxNDc0ODM2NDdMJworICAgIGInXG5hTC0yMTQ3NDgzNjQ3TFxuYUwtMicKKyAgICBiJzE0NzQ4MzY0OExcbmEoVmFiY1xucDQnCisgICAgYidcbmc0XG5jY29weV9yZWdcbl9yZWNvbicKKyAgICBiJ3N0cnVjdG9yXG5wNVxuKGNfX21haW4nCisgICAgYidfX1xuQ1xucDZcbmNfX2J1aWx0aW5fXycKKyAgICBiJ1xub2JqZWN0XG5wN1xuTnRwOFxuUnA5XG4nCisgICAgYicoZHAxMFxuVmZvb1xucDExXG5MMUxcbnMnCisgICAgYidWYmFyXG5wMTJcbkwyTFxuc2JnOVxudHAnCisgICAgYicxM1xuYWcxM1xuYUw1TFxuYS4nCiApCiAKICMgRGlzYXNzZW1ibHkgb2YgREFUQTAKQEAgLTE2NSw4OCArMTkwLDg4IEBACiAgICAxNDogYSAgICBBUFBFTkQKICAgIDE1OiBGICAgIEZMT0FUICAgICAgMi4wCiAgICAyMDogYSAgICBBUFBFTkQKLSAgIDIxOiBjICAgIEdMT0JBTCAgICAgJ2J1aWx0aW5zIGNvbXBsZXgnCi0gICAzOTogcCAgICBQVVQgICAgICAgIDEKLSAgIDQyOiAoICAgIE1BUksKLSAgIDQzOiBGICAgICAgICBGTE9BVCAgICAgIDMuMAotICAgNDg6IEYgICAgICAgIEZMT0FUICAgICAgMC4wCi0gICA1MzogdCAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCA0MikKLSAgIDU0OiBwICAgIFBVVCAgICAgICAgMgotICAgNTc6IFIgICAgUkVEVUNFCi0gICA1ODogcCAgICBQVVQgICAgICAgIDMKLSAgIDYxOiBhICAgIEFQUEVORAotICAgNjI6IEwgICAgTE9ORyAgICAgICAxCi0gICA2NjogYSAgICBBUFBFTkQKLSAgIDY3OiBMICAgIExPTkcgICAgICAgLTEKLSAgIDcyOiBhICAgIEFQUEVORAotICAgNzM6IEwgICAgTE9ORyAgICAgICAyNTUKLSAgIDc5OiBhICAgIEFQUEVORAotICAgODA6IEwgICAgTE9ORyAgICAgICAtMjU1Ci0gICA4NzogYSAgICBBUFBFTkQKLSAgIDg4OiBMICAgIExPTkcgICAgICAgLTI1NgotICAgOTU6IGEgICAgQVBQRU5ECi0gICA5NjogTCAgICBMT05HICAgICAgIDY1NTM1Ci0gIDEwNDogYSAgICBBUFBFTkQKLSAgMTA1OiBMICAgIExPTkcgICAgICAgLTY1NTM1Ci0gIDExNDogYSAgICBBUFBFTkQKLSAgMTE1OiBMICAgIExPTkcgICAgICAgLTY1NTM2Ci0gIDEyNDogYSAgICBBUFBFTkQKLSAgMTI1OiBMICAgIExPTkcgICAgICAgMjE0NzQ4MzY0NwotICAxMzg6IGEgICAgQVBQRU5ECi0gIDEzOTogTCAgICBMT05HICAgICAgIC0yMTQ3NDgzNjQ3Ci0gIDE1MzogYSAgICBBUFBFTkQKLSAgMTU0OiBMICAgIExPTkcgICAgICAgLTIxNDc0ODM2NDgKLSAgMTY4OiBhICAgIEFQUEVORAotICAxNjk6ICggICAgTUFSSwotICAxNzA6IFYgICAgICAgIFVOSUNPREUgICAgJ2FiYycKLSAgMTc1OiBwICAgICAgICBQVVQgICAgICAgIDQKLSAgMTc4OiBnICAgICAgICBHRVQgICAgICAgIDQKLSAgMTgxOiBjICAgICAgICBHTE9CQUwgICAgICdjb3B5cmVnIF9yZWNvbnN0cnVjdG9yJwotICAyMDU6IHAgICAgICAgIFBVVCAgICAgICAgNQotICAyMDg6ICggICAgICAgIE1BUksKLSAgMjA5OiBjICAgICAgICAgICAgR0xPQkFMICAgICAnX19tYWluX18gQycKLSAgMjIxOiBwICAgICAgICAgICAgUFVUICAgICAgICA2Ci0gIDIyNDogYyAgICAgICAgICAgIEdMT0JBTCAgICAgJ2J1aWx0aW5zIG9iamVjdCcKLSAgMjQxOiBwICAgICAgICAgICAgUFVUICAgICAgICA3Ci0gIDI0NDogTiAgICAgICAgICAgIE5PTkUKLSAgMjQ1OiB0ICAgICAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAyMDgpCi0gIDI0NjogcCAgICAgICAgUFVUICAgICAgICA4Ci0gIDI0OTogUiAgICAgICAgUkVEVUNFCi0gIDI1MDogcCAgICAgICAgUFVUICAgICAgICA5Ci0gIDI1MzogKCAgICAgICAgTUFSSwotICAyNTQ6IGQgICAgICAgICAgICBESUNUICAgICAgIChNQVJLIGF0IDI1MykKLSAgMjU1OiBwICAgICAgICBQVVQgICAgICAgIDEwCi0gIDI1OTogViAgICAgICAgVU5JQ09ERSAgICAnZm9vJwotICAyNjQ6IHAgICAgICAgIFBVVCAgICAgICAgMTEKLSAgMjY4OiBMICAgICAgICBMT05HICAgICAgIDEKLSAgMjcyOiBzICAgICAgICBTRVRJVEVNCi0gIDI3MzogViAgICAgICAgVU5JQ09ERSAgICAnYmFyJwotICAyNzg6IHAgICAgICAgIFBVVCAgICAgICAgMTIKLSAgMjgyOiBMICAgICAgICBMT05HICAgICAgIDIKLSAgMjg2OiBzICAgICAgICBTRVRJVEVNCi0gIDI4NzogYiAgICAgICAgQlVJTEQKLSAgMjg4OiBnICAgICAgICBHRVQgICAgICAgIDkKLSAgMjkxOiB0ICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDE2OSkKLSAgMjkyOiBwICAgIFBVVCAgICAgICAgMTMKLSAgMjk2OiBhICAgIEFQUEVORAotICAyOTc6IGcgICAgR0VUICAgICAgICAxMwotICAzMDE6IGEgICAgQVBQRU5ECi0gIDMwMjogTCAgICBMT05HICAgICAgIDUKLSAgMzA2OiBhICAgIEFQUEVORAotICAzMDc6IC4gICAgU1RPUAorICAgMjE6IGMgICAgR0xPQkFMICAgICAnX19idWlsdGluX18gY29tcGxleCcKKyAgIDQyOiBwICAgIFBVVCAgICAgICAgMQorICAgNDU6ICggICAgTUFSSworICAgNDY6IEYgICAgICAgIEZMT0FUICAgICAgMy4wCisgICA1MTogRiAgICAgICAgRkxPQVQgICAgICAwLjAKKyAgIDU2OiB0ICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDQ1KQorICAgNTc6IHAgICAgUFVUICAgICAgICAyCisgICA2MDogUiAgICBSRURVQ0UKKyAgIDYxOiBwICAgIFBVVCAgICAgICAgMworICAgNjQ6IGEgICAgQVBQRU5ECisgICA2NTogTCAgICBMT05HICAgICAgIDEKKyAgIDY5OiBhICAgIEFQUEVORAorICAgNzA6IEwgICAgTE9ORyAgICAgICAtMQorICAgNzU6IGEgICAgQVBQRU5ECisgICA3NjogTCAgICBMT05HICAgICAgIDI1NQorICAgODI6IGEgICAgQVBQRU5ECisgICA4MzogTCAgICBMT05HICAgICAgIC0yNTUKKyAgIDkwOiBhICAgIEFQUEVORAorICAgOTE6IEwgICAgTE9ORyAgICAgICAtMjU2CisgICA5ODogYSAgICBBUFBFTkQKKyAgIDk5OiBMICAgIExPTkcgICAgICAgNjU1MzUKKyAgMTA3OiBhICAgIEFQUEVORAorICAxMDg6IEwgICAgTE9ORyAgICAgICAtNjU1MzUKKyAgMTE3OiBhICAgIEFQUEVORAorICAxMTg6IEwgICAgTE9ORyAgICAgICAtNjU1MzYKKyAgMTI3OiBhICAgIEFQUEVORAorICAxMjg6IEwgICAgTE9ORyAgICAgICAyMTQ3NDgzNjQ3CisgIDE0MTogYSAgICBBUFBFTkQKKyAgMTQyOiBMICAgIExPTkcgICAgICAgLTIxNDc0ODM2NDcKKyAgMTU2OiBhICAgIEFQUEVORAorICAxNTc6IEwgICAgTE9ORyAgICAgICAtMjE0NzQ4MzY0OAorICAxNzE6IGEgICAgQVBQRU5ECisgIDE3MjogKCAgICBNQVJLCisgIDE3MzogViAgICAgICAgVU5JQ09ERSAgICAnYWJjJworICAxNzg6IHAgICAgICAgIFBVVCAgICAgICAgNAorICAxODE6IGcgICAgICAgIEdFVCAgICAgICAgNAorICAxODQ6IGMgICAgICAgIEdMT0JBTCAgICAgJ2NvcHlfcmVnIF9yZWNvbnN0cnVjdG9yJworICAyMDk6IHAgICAgICAgIFBVVCAgICAgICAgNQorICAyMTI6ICggICAgICAgIE1BUksKKyAgMjEzOiBjICAgICAgICAgICAgR0xPQkFMICAgICAnX19tYWluX18gQycKKyAgMjI1OiBwICAgICAgICAgICAgUFVUICAgICAgICA2CisgIDIyODogYyAgICAgICAgICAgIEdMT0JBTCAgICAgJ19fYnVpbHRpbl9fIG9iamVjdCcKKyAgMjQ4OiBwICAgICAgICAgICAgUFVUICAgICAgICA3CisgIDI1MTogTiAgICAgICAgICAgIE5PTkUKKyAgMjUyOiB0ICAgICAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAyMTIpCisgIDI1MzogcCAgICAgICAgUFVUICAgICAgICA4CisgIDI1NjogUiAgICAgICAgUkVEVUNFCisgIDI1NzogcCAgICAgICAgUFVUICAgICAgICA5CisgIDI2MDogKCAgICAgICAgTUFSSworICAyNjE6IGQgICAgICAgICAgICBESUNUICAgICAgIChNQVJLIGF0IDI2MCkKKyAgMjYyOiBwICAgICAgICBQVVQgICAgICAgIDEwCisgIDI2NjogViAgICAgICAgVU5JQ09ERSAgICAnZm9vJworICAyNzE6IHAgICAgICAgIFBVVCAgICAgICAgMTEKKyAgMjc1OiBMICAgICAgICBMT05HICAgICAgIDEKKyAgMjc5OiBzICAgICAgICBTRVRJVEVNCisgIDI4MDogViAgICAgICAgVU5JQ09ERSAgICAnYmFyJworICAyODU6IHAgICAgICAgIFBVVCAgICAgICAgMTIKKyAgMjg5OiBMICAgICAgICBMT05HICAgICAgIDIKKyAgMjkzOiBzICAgICAgICBTRVRJVEVNCisgIDI5NDogYiAgICAgICAgQlVJTEQKKyAgMjk1OiBnICAgICAgICBHRVQgICAgICAgIDkKKyAgMjk4OiB0ICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDE3MikKKyAgMjk5OiBwICAgIFBVVCAgICAgICAgMTMKKyAgMzAzOiBhICAgIEFQUEVORAorICAzMDQ6IGcgICAgR0VUICAgICAgICAxMworICAzMDg6IGEgICAgQVBQRU5ECisgIDMwOTogTCAgICBMT05HICAgICAgIDUKKyAgMzEzOiBhICAgIEFQUEVORAorICAzMTQ6IC4gICAgU1RPUAogaGlnaGVzdCBwcm90b2NvbCBhbW9uZyBvcGNvZGVzID0gMAogIiIiCiAKIERBVEExID0gKAotICAgIGInXXFceDAwKEtceDAwS1x4MDFHQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBjJwotICAgIGInYnVpbHRpbnNcbmNvbXBsZXhcbnFceDAxJworICAgIGInXXFceDAwKEtceDAwS1x4MDFHQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBjX18nCisgICAgYididWlsdGluX19cbmNvbXBsZXhcbnFceDAxJwogICAgIGInKEdAXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMEdceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMHQnCiAgICAgYidxXHgwMlJxXHgwM0tceDAxSlx4ZmZceGZmXHhmZlx4ZmZLXHhmZkpceDAxXHhmZlx4ZmZceGZmSicKICAgICBiJ1x4MDBceGZmXHhmZlx4ZmZNXHhmZlx4ZmZKXHgwMVx4MDBceGZmXHhmZkpceDAwXHgwMFx4ZmZceGZmSlx4ZmZceGZmJwogICAgIGInXHhmZlx4N2ZKXHgwMVx4MDBceDAwXHg4MEpceDAwXHgwMFx4MDBceDgwKFhceDAzXHgwMFx4MDBceDAwYWInCi0gICAgYidjcVx4MDRoXHgwNGNjb3B5cmVnXG5fcmVjbycKKyAgICBiJ2NxXHgwNGhceDA0Y2NvcHlfcmVnXG5fcmVjbycKICAgICBiJ25zdHJ1Y3RvclxucVx4MDUoY19fbWFpbicKLSAgICBiJ19fXG5DXG5xXHgwNmNidWlsdGluc1xuJworICAgIGInX19cbkNcbnFceDA2Y19fYnVpbHRpbl9fXG4nCiAgICAgYidvYmplY3RcbnFceDA3TnRxXHgwOFJxXHR9cVxuKCcKICAgICBiJ1hceDAzXHgwMFx4MDBceDAwZm9vcVx4MGJLXHgwMVhceDAzXHgwMFx4MDBceDAwYmFyJwogICAgIGIncVx4MGNLXHgwMnViaFx0dHFccmhccktceDA1ZS4nCkBAIC0yNjAsNjYgKzI4NSw2NiBAQAogICAgIDQ6IEsgICAgICAgIEJJTklOVDEgICAgMAogICAgIDY6IEsgICAgICAgIEJJTklOVDEgICAgMQogICAgIDg6IEcgICAgICAgIEJJTkZMT0FUICAgMi4wCi0gICAxNzogYyAgICAgICAgR0xPQkFMICAgICAnYnVpbHRpbnMgY29tcGxleCcKLSAgIDM1OiBxICAgICAgICBCSU5QVVQgICAgIDEKLSAgIDM3OiAoICAgICAgICBNQVJLCi0gICAzODogRyAgICAgICAgICAgIEJJTkZMT0FUICAgMy4wCi0gICA0NzogRyAgICAgICAgICAgIEJJTkZMT0FUICAgMC4wCi0gICA1NjogdCAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgMzcpCi0gICA1NzogcSAgICAgICAgQklOUFVUICAgICAyCi0gICA1OTogUiAgICAgICAgUkVEVUNFCi0gICA2MDogcSAgICAgICAgQklOUFVUICAgICAzCi0gICA2MjogSyAgICAgICAgQklOSU5UMSAgICAxCi0gICA2NDogSiAgICAgICAgQklOSU5UICAgICAtMQotICAgNjk6IEsgICAgICAgIEJJTklOVDEgICAgMjU1Ci0gICA3MTogSiAgICAgICAgQklOSU5UICAgICAtMjU1Ci0gICA3NjogSiAgICAgICAgQklOSU5UICAgICAtMjU2Ci0gICA4MTogTSAgICAgICAgQklOSU5UMiAgICA2NTUzNQotICAgODQ6IEogICAgICAgIEJJTklOVCAgICAgLTY1NTM1Ci0gICA4OTogSiAgICAgICAgQklOSU5UICAgICAtNjU1MzYKLSAgIDk0OiBKICAgICAgICBCSU5JTlQgICAgIDIxNDc0ODM2NDcKLSAgIDk5OiBKICAgICAgICBCSU5JTlQgICAgIC0yMTQ3NDgzNjQ3Ci0gIDEwNDogSiAgICAgICAgQklOSU5UICAgICAtMjE0NzQ4MzY0OAotICAxMDk6ICggICAgICAgIE1BUksKLSAgMTEwOiBYICAgICAgICAgICAgQklOVU5JQ09ERSAnYWJjJwotICAxMTg6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDQKLSAgMTIwOiBoICAgICAgICAgICAgQklOR0VUICAgICA0Ci0gIDEyMjogYyAgICAgICAgICAgIEdMT0JBTCAgICAgJ2NvcHlyZWcgX3JlY29uc3RydWN0b3InCi0gIDE0NjogcSAgICAgICAgICAgIEJJTlBVVCAgICAgNQotICAxNDg6ICggICAgICAgICAgICBNQVJLCi0gIDE0OTogYyAgICAgICAgICAgICAgICBHTE9CQUwgICAgICdfX21haW5fXyBDJwotICAxNjE6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA2Ci0gIDE2MzogYyAgICAgICAgICAgICAgICBHTE9CQUwgICAgICdidWlsdGlucyBvYmplY3QnCi0gIDE4MDogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDcKLSAgMTgyOiBOICAgICAgICAgICAgICAgIE5PTkUKLSAgMTgzOiB0ICAgICAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgMTQ4KQotICAxODQ6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDgKLSAgMTg2OiBSICAgICAgICAgICAgUkVEVUNFCi0gIDE4NzogcSAgICAgICAgICAgIEJJTlBVVCAgICAgOQotICAxODk6IH0gICAgICAgICAgICBFTVBUWV9ESUNUCi0gIDE5MDogcSAgICAgICAgICAgIEJJTlBVVCAgICAgMTAKLSAgMTkyOiAoICAgICAgICAgICAgTUFSSwotICAxOTM6IFggICAgICAgICAgICAgICAgQklOVU5JQ09ERSAnZm9vJwotICAyMDE6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICAxMQotICAyMDM6IEsgICAgICAgICAgICAgICAgQklOSU5UMSAgICAxCi0gIDIwNTogWCAgICAgICAgICAgICAgICBCSU5VTklDT0RFICdiYXInCi0gIDIxMzogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDEyCi0gIDIxNTogSyAgICAgICAgICAgICAgICBCSU5JTlQxICAgIDIKLSAgMjE3OiB1ICAgICAgICAgICAgICAgIFNFVElURU1TICAgKE1BUksgYXQgMTkyKQotICAyMTg6IGIgICAgICAgICAgICBCVUlMRAotICAyMTk6IGggICAgICAgICAgICBCSU5HRVQgICAgIDkKLSAgMjIxOiB0ICAgICAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAxMDkpCi0gIDIyMjogcSAgICAgICAgQklOUFVUICAgICAxMwotICAyMjQ6IGggICAgICAgIEJJTkdFVCAgICAgMTMKLSAgMjI2OiBLICAgICAgICBCSU5JTlQxICAgIDUKLSAgMjI4OiBlICAgICAgICBBUFBFTkRTICAgIChNQVJLIGF0IDMpCi0gIDIyOTogLiAgICBTVE9QCisgICAxNzogYyAgICAgICAgR0xPQkFMICAgICAnX19idWlsdGluX18gY29tcGxleCcKKyAgIDM4OiBxICAgICAgICBCSU5QVVQgICAgIDEKKyAgIDQwOiAoICAgICAgICBNQVJLCisgICA0MTogRyAgICAgICAgICAgIEJJTkZMT0FUICAgMy4wCisgICA1MDogRyAgICAgICAgICAgIEJJTkZMT0FUICAgMC4wCisgICA1OTogdCAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgNDApCisgICA2MDogcSAgICAgICAgQklOUFVUICAgICAyCisgICA2MjogUiAgICAgICAgUkVEVUNFCisgICA2MzogcSAgICAgICAgQklOUFVUICAgICAzCisgICA2NTogSyAgICAgICAgQklOSU5UMSAgICAxCisgICA2NzogSiAgICAgICAgQklOSU5UICAgICAtMQorICAgNzI6IEsgICAgICAgIEJJTklOVDEgICAgMjU1CisgICA3NDogSiAgICAgICAgQklOSU5UICAgICAtMjU1CisgICA3OTogSiAgICAgICAgQklOSU5UICAgICAtMjU2CisgICA4NDogTSAgICAgICAgQklOSU5UMiAgICA2NTUzNQorICAgODc6IEogICAgICAgIEJJTklOVCAgICAgLTY1NTM1CisgICA5MjogSiAgICAgICAgQklOSU5UICAgICAtNjU1MzYKKyAgIDk3OiBKICAgICAgICBCSU5JTlQgICAgIDIxNDc0ODM2NDcKKyAgMTAyOiBKICAgICAgICBCSU5JTlQgICAgIC0yMTQ3NDgzNjQ3CisgIDEwNzogSiAgICAgICAgQklOSU5UICAgICAtMjE0NzQ4MzY0OAorICAxMTI6ICggICAgICAgIE1BUksKKyAgMTEzOiBYICAgICAgICAgICAgQklOVU5JQ09ERSAnYWJjJworICAxMjE6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDQKKyAgMTIzOiBoICAgICAgICAgICAgQklOR0VUICAgICA0CisgIDEyNTogYyAgICAgICAgICAgIEdMT0JBTCAgICAgJ2NvcHlfcmVnIF9yZWNvbnN0cnVjdG9yJworICAxNTA6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDUKKyAgMTUyOiAoICAgICAgICAgICAgTUFSSworICAxNTM6IGMgICAgICAgICAgICAgICAgR0xPQkFMICAgICAnX19tYWluX18gQycKKyAgMTY1OiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgNgorICAxNjc6IGMgICAgICAgICAgICAgICAgR0xPQkFMICAgICAnX19idWlsdGluX18gb2JqZWN0JworICAxODc6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA3CisgIDE4OTogTiAgICAgICAgICAgICAgICBOT05FCisgIDE5MDogdCAgICAgICAgICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDE1MikKKyAgMTkxOiBxICAgICAgICAgICAgQklOUFVUICAgICA4CisgIDE5MzogUiAgICAgICAgICAgIFJFRFVDRQorICAxOTQ6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDkKKyAgMTk2OiB9ICAgICAgICAgICAgRU1QVFlfRElDVAorICAxOTc6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDEwCisgIDE5OTogKCAgICAgICAgICAgIE1BUksKKyAgMjAwOiBYICAgICAgICAgICAgICAgIEJJTlVOSUNPREUgJ2ZvbycKKyAgMjA4OiBxICAgICAgICAgICAgICAgIEJJTlBVVCAgICAgMTEKKyAgMjEwOiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMQorICAyMTI6IFggICAgICAgICAgICAgICAgQklOVU5JQ09ERSAnYmFyJworICAyMjA6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICAxMgorICAyMjI6IEsgICAgICAgICAgICAgICAgQklOSU5UMSAgICAyCisgIDIyNDogdSAgICAgICAgICAgICAgICBTRVRJVEVNUyAgIChNQVJLIGF0IDE5OSkKKyAgMjI1OiBiICAgICAgICAgICAgQlVJTEQKKyAgMjI2OiBoICAgICAgICAgICAgQklOR0VUICAgICA5CisgIDIyODogdCAgICAgICAgICAgIFRVUExFICAgICAgKE1BUksgYXQgMTEyKQorICAyMjk6IHEgICAgICAgIEJJTlBVVCAgICAgMTMKKyAgMjMxOiBoICAgICAgICBCSU5HRVQgICAgIDEzCisgIDIzMzogSyAgICAgICAgQklOSU5UMSAgICA1CisgIDIzNTogZSAgICAgICAgQVBQRU5EUyAgICAoTUFSSyBhdCAzKQorICAyMzY6IC4gICAgU1RPUAogaGlnaGVzdCBwcm90b2NvbCBhbW9uZyBvcGNvZGVzID0gMQogIiIiCiAKIERBVEEyID0gKAogICAgIGInXHg4MFx4MDJdcVx4MDAoS1x4MDBLXHgwMUdAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMGMnCi0gICAgYididWlsdGluc1xuY29tcGxleFxuJworICAgIGInX19idWlsdGluX19cbmNvbXBsZXhcbicKICAgICBiJ3FceDAxR0BceDA4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwR1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwogICAgIGInXHg4NnFceDAyUnFceDAzS1x4MDFKXHhmZlx4ZmZceGZmXHhmZktceGZmSlx4MDFceGZmXHhmZlx4ZmYnCiAgICAgYidKXHgwMFx4ZmZceGZmXHhmZk1ceGZmXHhmZkpceDAxXHgwMFx4ZmZceGZmSlx4MDBceDAwXHhmZlx4ZmZKXHhmZicKQEAgLTMzOSw2ICszNjQsNzcgQEAKICAgICA2OiBLICAgICAgICBCSU5JTlQxICAgIDAKICAgICA4OiBLICAgICAgICBCSU5JTlQxICAgIDEKICAgIDEwOiBHICAgICAgICBCSU5GTE9BVCAgIDIuMAorICAgMTk6IGMgICAgICAgIEdMT0JBTCAgICAgJ19fYnVpbHRpbl9fIGNvbXBsZXgnCisgICA0MDogcSAgICAgICAgQklOUFVUICAgICAxCisgICA0MjogRyAgICAgICAgQklORkxPQVQgICAzLjAKKyAgIDUxOiBHICAgICAgICBCSU5GTE9BVCAgIDAuMAorICAgNjA6IFx4ODYgICAgIFRVUExFMgorICAgNjE6IHEgICAgICAgIEJJTlBVVCAgICAgMgorICAgNjM6IFIgICAgICAgIFJFRFVDRQorICAgNjQ6IHEgICAgICAgIEJJTlBVVCAgICAgMworICAgNjY6IEsgICAgICAgIEJJTklOVDEgICAgMQorICAgNjg6IEogICAgICAgIEJJTklOVCAgICAgLTEKKyAgIDczOiBLICAgICAgICBCSU5JTlQxICAgIDI1NQorICAgNzU6IEogICAgICAgIEJJTklOVCAgICAgLTI1NQorICAgODA6IEogICAgICAgIEJJTklOVCAgICAgLTI1NgorICAgODU6IE0gICAgICAgIEJJTklOVDIgICAgNjU1MzUKKyAgIDg4OiBKICAgICAgICBCSU5JTlQgICAgIC02NTUzNQorICAgOTM6IEogICAgICAgIEJJTklOVCAgICAgLTY1NTM2CisgICA5ODogSiAgICAgICAgQklOSU5UICAgICAyMTQ3NDgzNjQ3CisgIDEwMzogSiAgICAgICAgQklOSU5UICAgICAtMjE0NzQ4MzY0NworICAxMDg6IEogICAgICAgIEJJTklOVCAgICAgLTIxNDc0ODM2NDgKKyAgMTEzOiAoICAgICAgICBNQVJLCisgIDExNDogWCAgICAgICAgICAgIEJJTlVOSUNPREUgJ2FiYycKKyAgMTIyOiBxICAgICAgICAgICAgQklOUFVUICAgICA0CisgIDEyNDogaCAgICAgICAgICAgIEJJTkdFVCAgICAgNAorICAxMjY6IGMgICAgICAgICAgICBHTE9CQUwgICAgICdfX21haW5fXyBDJworICAxMzg6IHEgICAgICAgICAgICBCSU5QVVQgICAgIDUKKyAgMTQwOiApICAgICAgICAgICAgRU1QVFlfVFVQTEUKKyAgMTQxOiBceDgxICAgICAgICAgTkVXT0JKCisgIDE0MjogcSAgICAgICAgICAgIEJJTlBVVCAgICAgNgorICAxNDQ6IH0gICAgICAgICAgICBFTVBUWV9ESUNUCisgIDE0NTogcSAgICAgICAgICAgIEJJTlBVVCAgICAgNworICAxNDc6ICggICAgICAgICAgICBNQVJLCisgIDE0ODogWCAgICAgICAgICAgICAgICBCSU5VTklDT0RFICdmb28nCisgIDE1NjogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDgKKyAgMTU4OiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMQorICAxNjA6IFggICAgICAgICAgICAgICAgQklOVU5JQ09ERSAnYmFyJworICAxNjg6IHEgICAgICAgICAgICAgICAgQklOUFVUICAgICA5CisgIDE3MDogSyAgICAgICAgICAgICAgICBCSU5JTlQxICAgIDIKKyAgMTcyOiB1ICAgICAgICAgICAgICAgIFNFVElURU1TICAgKE1BUksgYXQgMTQ3KQorICAxNzM6IGIgICAgICAgICAgICBCVUlMRAorICAxNzQ6IGggICAgICAgICAgICBCSU5HRVQgICAgIDYKKyAgMTc2OiB0ICAgICAgICAgICAgVFVQTEUgICAgICAoTUFSSyBhdCAxMTMpCisgIDE3NzogcSAgICAgICAgQklOUFVUICAgICAxMAorICAxNzk6IGggICAgICAgIEJJTkdFVCAgICAgMTAKKyAgMTgxOiBLICAgICAgICBCSU5JTlQxICAgIDUKKyAgMTgzOiBlICAgICAgICBBUFBFTkRTICAgIChNQVJLIGF0IDUpCisgIDE4NDogLiAgICBTVE9QCitoaWdoZXN0IHByb3RvY29sIGFtb25nIG9wY29kZXMgPSAyCisiIiIKKworREFUQTMgPSAoCisgICAgYidceDgwXHgwM11xXHgwMChLXHgwMEtceDAxR0BceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwYycKKyAgICBiJ2J1aWx0aW5zXG5jb21wbGV4XG5xXHgwMUcnCisgICAgYidAXHgwOFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMEdceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODZxXHgwMicKKyAgICBiJ1JxXHgwM0tceDAxSlx4ZmZceGZmXHhmZlx4ZmZLXHhmZkpceDAxXHhmZlx4ZmZceGZmSlx4MDBceGZmJworICAgIGInXHhmZlx4ZmZNXHhmZlx4ZmZKXHgwMVx4MDBceGZmXHhmZkpceDAwXHgwMFx4ZmZceGZmSlx4ZmZceGZmXHhmZlx4N2YnCisgICAgYidKXHgwMVx4MDBceDAwXHg4MEpceDAwXHgwMFx4MDBceDgwKFhceDAzXHgwMFx4MDBceDAwYWJjcScKKyAgICBiJ1x4MDRoXHgwNGNfX21haW5fX1xuQ1xucVx4MDUpXHg4MXEnCisgICAgYidceDA2fXFceDA3KFhceDAzXHgwMFx4MDBceDAwYmFycVx4MDhLXHgwMlhceDAzXHgwMCcKKyAgICBiJ1x4MDBceDAwZm9vcVx0S1x4MDF1YmhceDA2dHFcbmhcbktceDA1JworICAgIGInZS4nCispCisKKyMgRGlzYXNzZW1ibHkgb2YgREFUQTMKK0RBVEEzX0RJUyA9ICIiIlwKKyAgICAwOiBceDgwIFBST1RPICAgICAgMworICAgIDI6IF0gICAgRU1QVFlfTElTVAorICAgIDM6IHEgICAgQklOUFVUICAgICAwCisgICAgNTogKCAgICBNQVJLCisgICAgNjogSyAgICAgICAgQklOSU5UMSAgICAwCisgICAgODogSyAgICAgICAgQklOSU5UMSAgICAxCisgICAxMDogRyAgICAgICAgQklORkxPQVQgICAyLjAKICAgIDE5OiBjICAgICAgICBHTE9CQUwgICAgICdidWlsdGlucyBjb21wbGV4JwogICAgMzc6IHEgICAgICAgIEJJTlBVVCAgICAgMQogICAgMzk6IEcgICAgICAgIEJJTkZMT0FUICAgMy4wCkBAIC0zNzAsMTIgKzQ2NiwxMiBAQAogICAxNDE6IH0gICAgICAgICAgICBFTVBUWV9ESUNUCiAgIDE0MjogcSAgICAgICAgICAgIEJJTlBVVCAgICAgNwogICAxNDQ6ICggICAgICAgICAgICBNQVJLCi0gIDE0NTogWCAgICAgICAgICAgICAgICBCSU5VTklDT0RFICdmb28nCisgIDE0NTogWCAgICAgICAgICAgICAgICBCSU5VTklDT0RFICdiYXInCiAgIDE1MzogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDgKLSAgMTU1OiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMQotICAxNTc6IFggICAgICAgICAgICAgICAgQklOVU5JQ09ERSAnYmFyJworICAxNTU6IEsgICAgICAgICAgICAgICAgQklOSU5UMSAgICAyCisgIDE1NzogWCAgICAgICAgICAgICAgICBCSU5VTklDT0RFICdmb28nCiAgIDE2NTogcSAgICAgICAgICAgICAgICBCSU5QVVQgICAgIDkKLSAgMTY3OiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMgorICAxNjc6IEsgICAgICAgICAgICAgICAgQklOSU5UMSAgICAxCiAgIDE2OTogdSAgICAgICAgICAgICAgICBTRVRJVEVNUyAgIChNQVJLIGF0IDE0NCkKICAgMTcwOiBiICAgICAgICAgICAgQlVJTEQKICAgMTcxOiBoICAgICAgICAgICAgQklOR0VUICAgICA2CkBAIC0zODgsMjIgKzQ4NCwxMDEgQEAKIGhpZ2hlc3QgcHJvdG9jb2wgYW1vbmcgb3Bjb2RlcyA9IDIKICIiIgogCitEQVRBNCA9ICgKKyAgICBiJ1x4ODBceDA0XHg5NVx4YThceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXVx4OTQoS1x4MDBLXHgwMUdAJworICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4OGNceDA4YnVpbHRpbnNceDk0XHg4Y1x4MDcnCisgICAgYidjb21wbGV4XHg5NFx4OTNceDk0R0BceDA4XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwRycKKyAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4Nlx4OTRSXHg5NEtceDAxSlx4ZmZceGZmXHhmZlx4ZmZLJworICAgIGInXHhmZkpceDAxXHhmZlx4ZmZceGZmSlx4MDBceGZmXHhmZlx4ZmZNXHhmZlx4ZmZKXHgwMVx4MDBceGZmXHhmZkonCisgICAgYidceDAwXHgwMFx4ZmZceGZmSlx4ZmZceGZmXHhmZlx4N2ZKXHgwMVx4MDBceDAwXHg4MEpceDAwXHgwMFx4MDBceDgwKCcKKyAgICBiJ1x4OGNceDAzYWJjXHg5NGhceDA2XHg4Y1x4MDhfX21haW5fX1x4OTRceDhjJworICAgIGInXHgwMUNceDk0XHg5M1x4OTQpXHg4MVx4OTR9XHg5NChceDhjXHgwM2Jhclx4OTRLXHgwMlx4OGMnCisgICAgYidceDAzZm9vXHg5NEtceDAxdWJoXG50XHg5NGhceDBlS1x4MDVlLicKKykKKworIyBEaXNhc3NlbWJseSBvZiBEQVRBNAorREFUQTRfRElTID0gIiIiXAorICAgIDA6IFx4ODAgUFJPVE8gICAgICA0CisgICAgMjogXHg5NSBGUkFNRSAgICAgIDE2OAorICAgMTE6IF0gICAgRU1QVFlfTElTVAorICAgMTI6IFx4OTQgTUVNT0laRQorICAgMTM6ICggICAgTUFSSworICAgMTQ6IEsgICAgICAgIEJJTklOVDEgICAgMAorICAgMTY6IEsgICAgICAgIEJJTklOVDEgICAgMQorICAgMTg6IEcgICAgICAgIEJJTkZMT0FUICAgMi4wCisgICAyNzogXHg4YyAgICAgU0hPUlRfQklOVU5JQ09ERSAnYnVpbHRpbnMnCisgICAzNzogXHg5NCAgICAgTUVNT0laRQorICAgMzg6IFx4OGMgICAgIFNIT1JUX0JJTlVOSUNPREUgJ2NvbXBsZXgnCisgICA0NzogXHg5NCAgICAgTUVNT0laRQorICAgNDg6IFx4OTMgICAgIFNUQUNLX0dMT0JBTAorICAgNDk6IFx4OTQgICAgIE1FTU9JWkUKKyAgIDUwOiBHICAgICAgICBCSU5GTE9BVCAgIDMuMAorICAgNTk6IEcgICAgICAgIEJJTkZMT0FUICAgMC4wCisgICA2ODogXHg4NiAgICAgVFVQTEUyCisgICA2OTogXHg5NCAgICAgTUVNT0laRQorICAgNzA6IFIgICAgICAgIFJFRFVDRQorICAgNzE6IFx4OTQgICAgIE1FTU9JWkUKKyAgIDcyOiBLICAgICAgICBCSU5JTlQxICAgIDEKKyAgIDc0OiBKICAgICAgICBCSU5JTlQgICAgIC0xCisgICA3OTogSyAgICAgICAgQklOSU5UMSAgICAyNTUKKyAgIDgxOiBKICAgICAgICBCSU5JTlQgICAgIC0yNTUKKyAgIDg2OiBKICAgICAgICBCSU5JTlQgICAgIC0yNTYKKyAgIDkxOiBNICAgICAgICBCSU5JTlQyICAgIDY1NTM1CisgICA5NDogSiAgICAgICAgQklOSU5UICAgICAtNjU1MzUKKyAgIDk5OiBKICAgICAgICBCSU5JTlQgICAgIC02NTUzNgorICAxMDQ6IEogICAgICAgIEJJTklOVCAgICAgMjE0NzQ4MzY0NworICAxMDk6IEogICAgICAgIEJJTklOVCAgICAgLTIxNDc0ODM2NDcKKyAgMTE0OiBKICAgICAgICBCSU5JTlQgICAgIC0yMTQ3NDgzNjQ4CisgIDExOTogKCAgICAgICAgTUFSSworICAxMjA6IFx4OGMgICAgICAgICBTSE9SVF9CSU5VTklDT0RFICdhYmMnCisgIDEyNTogXHg5NCAgICAgICAgIE1FTU9JWkUKKyAgMTI2OiBoICAgICAgICAgICAgQklOR0VUICAgICA2CisgIDEyODogXHg4YyAgICAgICAgIFNIT1JUX0JJTlVOSUNPREUgJ19fbWFpbl9fJworICAxMzg6IFx4OTQgICAgICAgICBNRU1PSVpFCisgIDEzOTogXHg4YyAgICAgICAgIFNIT1JUX0JJTlVOSUNPREUgJ0MnCisgIDE0MjogXHg5NCAgICAgICAgIE1FTU9JWkUKKyAgMTQzOiBceDkzICAgICAgICAgU1RBQ0tfR0xPQkFMCisgIDE0NDogXHg5NCAgICAgICAgIE1FTU9JWkUKKyAgMTQ1OiApICAgICAgICAgICAgRU1QVFlfVFVQTEUKKyAgMTQ2OiBceDgxICAgICAgICAgTkVXT0JKCisgIDE0NzogXHg5NCAgICAgICAgIE1FTU9JWkUKKyAgMTQ4OiB9ICAgICAgICAgICAgRU1QVFlfRElDVAorICAxNDk6IFx4OTQgICAgICAgICBNRU1PSVpFCisgIDE1MDogKCAgICAgICAgICAgIE1BUksKKyAgMTUxOiBceDhjICAgICAgICAgICAgIFNIT1JUX0JJTlVOSUNPREUgJ2JhcicKKyAgMTU2OiBceDk0ICAgICAgICAgICAgIE1FTU9JWkUKKyAgMTU3OiBLICAgICAgICAgICAgICAgIEJJTklOVDEgICAgMgorICAxNTk6IFx4OGMgICAgICAgICAgICAgU0hPUlRfQklOVU5JQ09ERSAnZm9vJworICAxNjQ6IFx4OTQgICAgICAgICAgICAgTUVNT0laRQorICAxNjU6IEsgICAgICAgICAgICAgICAgQklOSU5UMSAgICAxCisgIDE2NzogdSAgICAgICAgICAgICAgICBTRVRJVEVNUyAgIChNQVJLIGF0IDE1MCkKKyAgMTY4OiBiICAgICAgICAgICAgQlVJTEQKKyAgMTY5OiBoICAgICAgICAgICAgQklOR0VUICAgICAxMAorICAxNzE6IHQgICAgICAgICAgICBUVVBMRSAgICAgIChNQVJLIGF0IDExOSkKKyAgMTcyOiBceDk0ICAgICBNRU1PSVpFCisgIDE3MzogaCAgICAgICAgQklOR0VUICAgICAxNAorICAxNzU6IEsgICAgICAgIEJJTklOVDEgICAgNQorICAxNzc6IGUgICAgICAgIEFQUEVORFMgICAgKE1BUksgYXQgMTMpCisgIDE3ODogLiAgICBTVE9QCitoaWdoZXN0IHByb3RvY29sIGFtb25nIG9wY29kZXMgPSA0CisiIiIKKwogIyBzZXQoWzEsMl0pIHBpY2tsZWQgZnJvbSAyLnggd2l0aCBwcm90b2NvbCAyCi1EQVRBMyA9IGInXHg4MFx4MDJjX19idWlsdGluX19cbnNldFxucVx4MDBdcVx4MDEoS1x4MDFLXHgwMmVceDg1cVx4MDJScVx4MDMuJworREFUQV9TRVQgPSBiJ1x4ODBceDAyY19fYnVpbHRpbl9fXG5zZXRcbnFceDAwXXFceDAxKEtceDAxS1x4MDJlXHg4NXFceDAyUnFceDAzLicKIAogIyB4cmFuZ2UoNSkgcGlja2xlZCBmcm9tIDIueCB3aXRoIHByb3RvY29sIDIKLURBVEE0ID0gYidceDgwXHgwMmNfX2J1aWx0aW5fX1xueHJhbmdlXG5xXHgwMEtceDAwS1x4MDVLXHgwMVx4ODdxXHgwMVJxXHgwMi4nCitEQVRBX1hSQU5HRSA9IGInXHg4MFx4MDJjX19idWlsdGluX19cbnhyYW5nZVxucVx4MDBLXHgwMEtceDA1S1x4MDFceDg3cVx4MDFScVx4MDIuJwogCiAjIGEgU2ltcGxlQ29va2llKCkgb2JqZWN0IHBpY2tsZWQgZnJvbSAyLnggd2l0aCBwcm90b2NvbCAyCi1EQVRBNSA9IChiJ1x4ODBceDAyY0Nvb2tpZVxuU2ltcGxlQ29va2llXG5xXHgwMClceDgxcVx4MDFVXHgwM2tleScKLSAgICAgICAgIGIncVx4MDJjQ29va2llXG5Nb3JzZWxcbnFceDAzKVx4ODFxXHgwNChVXHgwN2NvbW1lbnRxXHgwNVUnCi0gICAgICAgICBiJ1x4MDBxXHgwNlVceDA2ZG9tYWlucVx4MDdoXHgwNlVceDA2c2VjdXJlcVx4MDhoXHgwNlVceDA3JwotICAgICAgICAgYidleHBpcmVzcVx0aFx4MDZVXHgwN21heC1hZ2VxXG5oXHgwNlVceDA3dmVyc2lvbnFceDBiaFx4MDZVJwotICAgICAgICAgYidceDA0cGF0aHFceDBjaFx4MDZVXHgwOGh0dHBvbmx5cVxyaFx4MDZ1fXFceDBlKFVceDBiJwotICAgICAgICAgYidjb2RlZF92YWx1ZXFceDBmVVx4MDV2YWx1ZXFceDEwaFx4MTBoXHgxMGhceDAyaFx4MDJ1YnN9cVx4MTFiLicpCitEQVRBX0NPT0tJRSA9IChiJ1x4ODBceDAyY0Nvb2tpZVxuU2ltcGxlQ29va2llXG5xXHgwMClceDgxcVx4MDFVXHgwM2tleScKKyAgICAgICAgICAgICAgIGIncVx4MDJjQ29va2llXG5Nb3JzZWxcbnFceDAzKVx4ODFxXHgwNChVXHgwN2NvbW1lbnRxXHgwNVUnCisgICAgICAgICAgICAgICBiJ1x4MDBxXHgwNlVceDA2ZG9tYWlucVx4MDdoXHgwNlVceDA2c2VjdXJlcVx4MDhoXHgwNlVceDA3JworICAgICAgICAgICAgICAgYidleHBpcmVzcVx0aFx4MDZVXHgwN21heC1hZ2VxXG5oXHgwNlVceDA3dmVyc2lvbnFceDBiaFx4MDZVJworICAgICAgICAgICAgICAgYidceDA0cGF0aHFceDBjaFx4MDZVXHgwOGh0dHBvbmx5cVxyaFx4MDZ1fXFceDBlKFVceDBiJworICAgICAgICAgICAgICAgYidjb2RlZF92YWx1ZXFceDBmVVx4MDV2YWx1ZXFceDEwaFx4MTBoXHgxMGhceDAyaFx4MDJ1YnN9cVx4MTFiLicpCiAKICMgc2V0KFszXSkgcGlja2xlZCBmcm9tIDIueCB3aXRoIHByb3RvY29sIDIKLURBVEE2ID0gYidceDgwXHgwMmNfX2J1aWx0aW5fX1xuc2V0XG5xXHgwMF1xXHgwMUtceDAzYVx4ODVxXHgwMlJxXHgwMy4nCitEQVRBX1NFVDIgPSBiJ1x4ODBceDAyY19fYnVpbHRpbl9fXG5zZXRcbnFceDAwXXFceDAxS1x4MDNhXHg4NXFceDAyUnFceDAzLicKIAogcHl0aG9uMl9leGNlcHRpb25zX3dpdGhvdXRfYXJncyA9ICgKICAgICBBcml0aG1ldGljRXJyb3IsCkBAIC00NTUsMjAgKzYzMCwxMCBAQAogCiBleGNlcHRpb25fcGlja2xlID0gYidceDgwXHgwMmNleGNlcHRpb25zXG4/XG5xXHgwMClScVx4MDEuJwogCi0jIEV4Y2VwdGlvbiBvYmplY3RzIHdpdGhvdXQgYXJndW1lbnRzIHBpY2tsZWQgZnJvbSAyLnggd2l0aCBwcm90b2NvbCAyCi1EQVRBNyA9IHsKLSAgICBleGNlcHRpb24gOgotICAgIGV4Y2VwdGlvbl9waWNrbGUucmVwbGFjZShiJz8nLCBleGNlcHRpb24uX19uYW1lX18uZW5jb2RlKCJhc2NpaSIpKQotICAgIGZvciBleGNlcHRpb24gaW4gcHl0aG9uMl9leGNlcHRpb25zX3dpdGhvdXRfYXJncwotfQotCi0jIFN0YW5kYXJkRXJyb3IgaXMgbWFwcGVkIHRvIEV4Y2VwdGlvbiwgdGVzdCB0aGF0IHNlcGFyYXRlbHkKLURBVEE4ID0gZXhjZXB0aW9uX3BpY2tsZS5yZXBsYWNlKGInPycsIGInU3RhbmRhcmRFcnJvcicpCi0KICMgVW5pY29kZUVuY29kZUVycm9yIG9iamVjdCBwaWNrbGVkIGZyb20gMi54IHdpdGggcHJvdG9jb2wgMgotREFUQTkgPSAoYidceDgwXHgwMmNleGNlcHRpb25zXG5Vbmljb2RlRW5jb2RlRXJyb3JcbicKLSAgICAgICAgIGIncVx4MDAoVVx4MDVhc2NpaXFceDAxWFx4MDNceDAwXHgwMFx4MDBmb29xXHgwMktceDAwS1x4MDEnCi0gICAgICAgICBiJ1VceDAzYmFkcVx4MDN0cVx4MDRScVx4MDUuJykKK0RBVEFfVUVFUlIgPSAoYidceDgwXHgwMmNleGNlcHRpb25zXG5Vbmljb2RlRW5jb2RlRXJyb3JcbicKKyAgICAgICAgICAgICAgYidxXHgwMChVXHgwNWFzY2lpcVx4MDFYXHgwM1x4MDBceDAwXHgwMGZvb3FceDAyS1x4MDBLXHgwMScKKyAgICAgICAgICAgICAgYidVXHgwM2JhZHFceDAzdHFceDA0UnFceDA1LicpCiAKIAogZGVmIGNyZWF0ZV9kYXRhKCk6CkBAIC00OTEsNDkgKzY1Niw1NSBAQAogICAgIHguYXBwZW5kKDUpCiAgICAgcmV0dXJuIHgKIAotY2xhc3MgQWJzdHJhY3RQaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgIyBTdWJjbGFzcyBtdXN0IGRlZmluZSBzZWxmLmR1bXBzLCBzZWxmLmxvYWRzLgorCitjbGFzcyBBYnN0cmFjdFVucGlja2xlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgU3ViY2xhc3MgbXVzdCBkZWZpbmUgc2VsZi5sb2Fkcy4KIAogICAgIF90ZXN0ZGF0YSA9IGNyZWF0ZV9kYXRhKCkKIAotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgcGFzcworICAgIGRlZiBhc3NlcnRfaXNfY29weShzZWxmLCBvYmosIG9iamNvcHksIG1zZz1Ob25lKToKKyAgICAgICAgIiIiVXRpbGl0eSBtZXRob2QgdG8gdmVyaWZ5IGlmIHR3byBvYmplY3RzIGFyZSBjb3BpZXMgb2YgZWFjaCBvdGhlcnMuCisgICAgICAgICIiIgorICAgICAgICBpZiBtc2cgaXMgTm9uZToKKyAgICAgICAgICAgIG1zZyA9ICJ7IXJ9IGlzIG5vdCBhIGNvcHkgb2YgeyFyfSIuZm9ybWF0KG9iaiwgb2JqY29weSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIG9iamNvcHksIG1zZz1tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShvYmopLCB0eXBlKG9iamNvcHkpLCBtc2c9bXNnKQorICAgICAgICBpZiBoYXNhdHRyKG9iaiwgJ19fZGljdF9fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydERpY3RFcXVhbChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG9iai5fX2RpY3RfXywgb2JqY29weS5fX2RpY3RfXywgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX3Nsb3RzX18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGlzdEVxdWFsKG9iai5fX3Nsb3RzX18sIG9iamNvcHkuX19zbG90c19fLCBtc2c9bXNnKQorICAgICAgICAgICAgZm9yIHNsb3QgaW4gb2JqLl9fc2xvdHNfXzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBoYXNhdHRyKG9iaiwgc2xvdCksIGhhc2F0dHIob2JqY29weSwgc2xvdCksIG1zZz1tc2cpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG9iaiwgc2xvdCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRhdHRyKG9iamNvcHksIHNsb3QsIE5vbmUpLCBtc2c9bXNnKQogCi0gICAgZGVmIHRlc3RfbWlzYyhzZWxmKToKLSAgICAgICAgIyB0ZXN0IHZhcmlvdXMgZGF0YXR5cGVzIG5vdCB0ZXN0ZWQgYnkgdGVzdGRhdGEKLSAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgIHggPSBteWludCg0KQotICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCi0gICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQotCi0gICAgICAgICAgICB4ID0gKDEsICgpKQotICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCi0gICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQotCi0gICAgICAgICAgICB4ID0gaW5pdGFyZygxLCB4KQotICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCi0gICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQotCi0gICAgICAgICMgWFhYIHRlc3QgX19yZWR1Y2VfXyBwcm90b2NvbD8KLQotICAgIGRlZiB0ZXN0X3JvdW5kdHJpcF9lcXVhbGl0eShzZWxmKToKLSAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLl90ZXN0ZGF0YQotICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgotICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZXhwZWN0ZWQsIHByb3RvKQotICAgICAgICAgICAgZ290ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgZ290KQorICAgIGRlZiBjaGVja191bnBpY2tsaW5nX2Vycm9yKHNlbGYsIGVycm9ycywgZGF0YSk6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGRhdGE9ZGF0YSksIFwKKyAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlcnJvcnMpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubG9hZHMoZGF0YSkKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2UgPiAxOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnJS0zMnIgLSAlczogJXMnICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGEsIGV4Yy5fX2NsYXNzX18uX19uYW1lX18sIGV4YykpCisgICAgICAgICAgICAgICAgcmFpc2UKIAogICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9kYXRhMChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTApKQogCiAgICAgZGVmIHRlc3RfbG9hZF9mcm9tX2RhdGExKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEExKSkKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMSkpCiAKICAgICBkZWYgdGVzdF9sb2FkX2Zyb21fZGF0YTIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTIpKQorICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHNlbGYuX3Rlc3RkYXRhLCBzZWxmLmxvYWRzKERBVEEyKSkKKworICAgIGRlZiB0ZXN0X2xvYWRfZnJvbV9kYXRhMyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzZWxmLl90ZXN0ZGF0YSwgc2VsZi5sb2FkcyhEQVRBMykpCisKKyAgICBkZWYgdGVzdF9sb2FkX2Zyb21fZGF0YTQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoc2VsZi5fdGVzdGRhdGEsIHNlbGYubG9hZHMoREFUQTQpKQogCiAgICAgZGVmIHRlc3RfbG9hZF9jbGFzc2ljX2luc3RhbmNlKHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZTUxODAuICBUZXN0IGxvYWRpbmcgMi54IHBpY2tsZXMgdGhhdApAQCAtNTQyLDU1ICs3MTMsNTA2IEBACiAgICAgICAgICAgICB4bmFtZSA9IFguX19uYW1lX18uZW5jb2RlKCdhc2NpaScpCiAgICAgICAgICAgICAjIFByb3RvY29sIDAgKHRleHQgbW9kZSBwaWNrbGUpOgogICAgICAgICAgICAgIiIiCi0gICAgICAgICAgICAwOiAoICAgIE1BUksKLSAgICAgICAgICAgIDE6IGkgICAgICAgIElOU1QgICAgICAgJ19fbWFpbl9fIFgnIChNQVJLIGF0IDApCi0gICAgICAgICAgICAxNTogcCAgICBQVVQgICAgICAgIDAKLSAgICAgICAgICAgIDE4OiAoICAgIE1BUksKLSAgICAgICAgICAgIDE5OiBkICAgICAgICBESUNUICAgICAgIChNQVJLIGF0IDE4KQotICAgICAgICAgICAgMjA6IHAgICAgUFVUICAgICAgICAxCi0gICAgICAgICAgICAyMzogYiAgICBCVUlMRAotICAgICAgICAgICAgMjQ6IC4gICAgU1RPUAorICAgICAgICAgICAgIDA6ICggICAgTUFSSworICAgICAgICAgICAgIDE6IGkgICAgICAgIElOU1QgICAgICAgJ19fbWFpbl9fIFgnIChNQVJLIGF0IDApCisgICAgICAgICAgICAxMzogcCAgICBQVVQgICAgICAgIDAKKyAgICAgICAgICAgIDE2OiAoICAgIE1BUksKKyAgICAgICAgICAgIDE3OiBkICAgICAgICBESUNUICAgICAgIChNQVJLIGF0IDE2KQorICAgICAgICAgICAgMTg6IHAgICAgUFVUICAgICAgICAxCisgICAgICAgICAgICAyMTogYiAgICBCVUlMRAorICAgICAgICAgICAgMjI6IC4gICAgU1RPUAogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICBwaWNrbGUwID0gKGIiKGlfX21haW5fX1xuIgogICAgICAgICAgICAgICAgICAgICAgICBiIlhcbiIKICAgICAgICAgICAgICAgICAgICAgICAgYiJwMFxuIgogICAgICAgICAgICAgICAgICAgICAgICBiIihkcDFcbmIuIikucmVwbGFjZShiJ1gnLCB4bmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWCgqYXJncyksIHNlbGYubG9hZHMocGlja2xlMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTApKQogCiAgICAgICAgICAgICAjIFByb3RvY29sIDEgKGJpbmFyeSBtb2RlIHBpY2tsZSkKICAgICAgICAgICAgICIiIgotICAgICAgICAgICAgMDogKCAgICBNQVJLCi0gICAgICAgICAgICAxOiBjICAgICAgICBHTE9CQUwgICAgICdfX21haW5fXyBYJworICAgICAgICAgICAgIDA6ICggICAgTUFSSworICAgICAgICAgICAgIDE6IGMgICAgICAgIEdMT0JBTCAgICAgJ19fbWFpbl9fIFgnCisgICAgICAgICAgICAxMzogcSAgICAgICAgQklOUFVUICAgICAwCisgICAgICAgICAgICAxNTogbyAgICAgICAgT0JKICAgICAgICAoTUFSSyBhdCAwKQorICAgICAgICAgICAgMTY6IHEgICAgQklOUFVUICAgICAxCisgICAgICAgICAgICAxODogfSAgICBFTVBUWV9ESUNUCisgICAgICAgICAgICAxOTogcSAgICBCSU5QVVQgICAgIDIKKyAgICAgICAgICAgIDIxOiBiICAgIEJVSUxECisgICAgICAgICAgICAyMjogLiAgICBTVE9QCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHBpY2tsZTEgPSAoYicoY19fbWFpbl9fXG4nCisgICAgICAgICAgICAgICAgICAgICAgIGInWFxuJworICAgICAgICAgICAgICAgICAgICAgICBiJ3FceDAwb3FceDAxfXFceDAyYi4nKS5yZXBsYWNlKGInWCcsIHhuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUxKSkKKworICAgICAgICAgICAgIyBQcm90b2NvbCAyIChwaWNrbGUyID0gYidceDgwXHgwMicgKyBwaWNrbGUxKQorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICAgMDogXHg4MCBQUk9UTyAgICAgIDIKKyAgICAgICAgICAgICAyOiAoICAgIE1BUksKKyAgICAgICAgICAgICAzOiBjICAgICAgICBHTE9CQUwgICAgICdfX21haW5fXyBYJwogICAgICAgICAgICAgMTU6IHEgICAgICAgIEJJTlBVVCAgICAgMAotICAgICAgICAgICAgMTc6IG8gICAgICAgIE9CSiAgICAgICAgKE1BUksgYXQgMCkKKyAgICAgICAgICAgIDE3OiBvICAgICAgICBPQkogICAgICAgIChNQVJLIGF0IDIpCiAgICAgICAgICAgICAxODogcSAgICBCSU5QVVQgICAgIDEKICAgICAgICAgICAgIDIwOiB9ICAgIEVNUFRZX0RJQ1QKICAgICAgICAgICAgIDIxOiBxICAgIEJJTlBVVCAgICAgMgogICAgICAgICAgICAgMjM6IGIgICAgQlVJTEQKICAgICAgICAgICAgIDI0OiAuICAgIFNUT1AKICAgICAgICAgICAgICIiIgotICAgICAgICAgICAgcGlja2xlMSA9IChiJyhjX19tYWluX19cbicKLSAgICAgICAgICAgICAgICAgICAgICAgYidYXG4nCi0gICAgICAgICAgICAgICAgICAgICAgIGIncVx4MDBvcVx4MDF9cVx4MDJiLicpLnJlcGxhY2UoYidYJywgeG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTEpKQotCi0gICAgICAgICAgICAjIFByb3RvY29sIDIgKHBpY2tsZTIgPSBiJ1x4ODBceDAyJyArIHBpY2tsZTEpCi0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIDA6IFx4ODAgUFJPVE8gICAgICAyCi0gICAgICAgICAgICAyOiAoICAgIE1BUksKLSAgICAgICAgICAgIDM6IGMgICAgICAgIEdMT0JBTCAgICAgJ19fbWFpbl9fIFgnCi0gICAgICAgICAgICAxNzogcSAgICAgICAgQklOUFVUICAgICAwCi0gICAgICAgICAgICAxOTogbyAgICAgICAgT0JKICAgICAgICAoTUFSSyBhdCAyKQotICAgICAgICAgICAgMjA6IHEgICAgQklOUFVUICAgICAxCi0gICAgICAgICAgICAyMjogfSAgICBFTVBUWV9ESUNUCi0gICAgICAgICAgICAyMzogcSAgICBCSU5QVVQgICAgIDIKLSAgICAgICAgICAgIDI1OiBiICAgIEJVSUxECi0gICAgICAgICAgICAyNjogLiAgICBTVE9QCi0gICAgICAgICAgICAiIiIKICAgICAgICAgICAgIHBpY2tsZTIgPSAoYidceDgwXHgwMihjX19tYWluX19cbicKICAgICAgICAgICAgICAgICAgICAgICAgYidYXG4nCiAgICAgICAgICAgICAgICAgICAgICAgIGIncVx4MDBvcVx4MDF9cVx4MDJiLicpLnJlcGxhY2UoYidYJywgeG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKmFyZ3MpLCBzZWxmLmxvYWRzKHBpY2tsZTIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShYKCphcmdzKSwgc2VsZi5sb2FkcyhwaWNrbGUyKSkKKworICAgIGRlZiB0ZXN0X21heGludDY0KHNlbGYpOgorICAgICAgICBtYXhpbnQ2NCA9ICgxIDw8IDYzKSAtIDEKKyAgICAgICAgZGF0YSA9IGInSScgKyBzdHIobWF4aW50NjQpLmVuY29kZSgiYXNjaWkiKSArIGInXG4uJworICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkobWF4aW50NjQsIGdvdCkKKworICAgICAgICAjIFRyeSB0b28gd2l0aCBhIGJvZ3VzIGxpdGVyYWwuCisgICAgICAgIGRhdGEgPSBiJ0knICsgc3RyKG1heGludDY0KS5lbmNvZGUoImFzY2lpIikgKyBiJ0pVTktcbi4nCisgICAgICAgIHNlbGYuY2hlY2tfdW5waWNrbGluZ19lcnJvcihWYWx1ZUVycm9yLCBkYXRhKQorCisgICAgZGVmIHRlc3RfdW5waWNrbGVfZnJvbV8yeChzZWxmKToKKyAgICAgICAgIyBVbnBpY2tsZSBub24tdHJpdmlhbCBkYXRhIGZyb20gUHl0aG9uIDIueC4KKyAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhEQVRBX1NFVCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQsIHNldChbMSwgMl0pKQorICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKERBVEFfWFJBTkdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobG9hZGVkKSwgdHlwZShyYW5nZSgwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChsb2FkZWQpLCBsaXN0KHJhbmdlKDUpKSkKKyAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhEQVRBX0NPT0tJRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGxvYWRlZCksIFNpbXBsZUNvb2tpZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlZC5rZXlzKCkpLCBbImtleSJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZFsia2V5Il0udmFsdWUsICJ2YWx1ZSIpCisKKyAgICAgICAgIyBFeGNlcHRpb24gb2JqZWN0cyB3aXRob3V0IGFyZ3VtZW50cyBwaWNrbGVkIGZyb20gMi54IHdpdGggcHJvdG9jb2wgMgorICAgICAgICBmb3IgZXhjIGluIHB5dGhvbjJfZXhjZXB0aW9uc193aXRob3V0X2FyZ3M6CisgICAgICAgICAgICBkYXRhID0gZXhjZXB0aW9uX3BpY2tsZS5yZXBsYWNlKGInPycsIGV4Yy5fX25hbWVfXy5lbmNvZGUoImFzY2lpIikpCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUobG9hZGVkKSwgZXhjKQorCisgICAgICAgICMgU3RhbmRhcmRFcnJvciBpcyBtYXBwZWQgdG8gRXhjZXB0aW9uLCB0ZXN0IHRoYXQgc2VwYXJhdGVseQorICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGV4Y2VwdGlvbl9waWNrbGUucmVwbGFjZShiJz8nLCBiJ1N0YW5kYXJkRXJyb3InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGxvYWRlZCksIEV4Y2VwdGlvbikKKworICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKERBVEFfVUVFUlIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShsb2FkZWQpLCBVbmljb2RlRW5jb2RlRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLm9iamVjdCwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVuY29kaW5nLCAiYXNjaWkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5zdGFydCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZW5kLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5yZWFzb24sICJiYWQiKQorCisgICAgZGVmIHRlc3RfbG9hZF9weXRob24yX3N0cl9hc19ieXRlcyhzZWxmKToKKyAgICAgICAgIyBGcm9tIFB5dGhvbiAyOiBwaWNrbGUuZHVtcHMoJ2FceDAwXHhhMCcsIHByb3RvY29sPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiIlMnYVxceDAwXFx4YTAnXG4uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJieXRlcyIpLCBiJ2FceDAwXHhhMCcpCisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKCdhXHgwMFx4YTAnLCBwcm90b2NvbD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYidVXHgwM2FceDAwXHhhMC4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ImJ5dGVzIiksIGInYVx4MDBceGEwJykKKyAgICAgICAgIyBGcm9tIFB5dGhvbiAyOiBwaWNrbGUuZHVtcHMoJ2FceDAwXHhhMCcsIHByb3RvY29sPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiJ1x4ODBceDAyVVx4MDNhXHgwMFx4YTAuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJieXRlcyIpLCBiJ2FceDAwXHhhMCcpCisKKyAgICBkZWYgdGVzdF9sb2FkX3B5dGhvbjJfdW5pY29kZV9hc19zdHIoc2VsZik6CisgICAgICAgICMgRnJvbSBQeXRob24gMjogcGlja2xlLmR1bXBzKHUnz4AnLCBwcm90b2NvbD0wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYidWXFx1MDNjMFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0nYnl0ZXMnKSwgJ8+AJykKKyAgICAgICAgIyBGcm9tIFB5dGhvbiAyOiBwaWNrbGUuZHVtcHModSfPgCcsIHByb3RvY29sPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiJ1hceDAyXHgwMFx4MDBceDAwXHhjZlx4ODAuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSJieXRlcyIpLCAnz4AnKQorICAgICAgICAjIEZyb20gUHl0aG9uIDI6IHBpY2tsZS5kdW1wcyh1J8+AJywgcHJvdG9jb2w9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGInXHg4MFx4MDJYXHgwMlx4MDBceDAwXHgwMFx4Y2ZceDgwLicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0iYnl0ZXMiKSwgJ8+AJykKKworICAgIGRlZiB0ZXN0X2xvYWRfbG9uZ19weXRob24yX3N0cl9hc19ieXRlcyhzZWxmKToKKyAgICAgICAgIyBGcm9tIFB5dGhvbiAyOiBwaWNrbGUuZHVtcHMoJ3gnICogMzAwLCBwcm90b2NvbD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocGlja2xlLkJJTlNUUklORyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiPEkiLCAzMDApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIneCcgKiAzMDAgKyBwaWNrbGUuU1RPUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSdieXRlcycpLCBiJ3gnICogMzAwKQorCisgICAgZGVmIHRlc3RfY29uc3RhbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvYWRzKGInTi4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmxvYWRzKGInXHg4OC4nKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmxvYWRzKGInXHg4OS4nKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5sb2FkcyhiJ0kwMVxuLicpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9hZHMoYidJMDBcbi4nKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9ieXRlc3RyaW5nKHNlbGYpOgorICAgICAgICAjIGlzc3VlIDExMjg2CisgICAgICAgIGVtcHR5ID0gc2VsZi5sb2FkcyhiJ1x4ODBceDAzVVx4MDBxXHgwMC4nLCBlbmNvZGluZz0na29pOC1yJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbXB0eSwgJycpCisKKyAgICBkZWYgdGVzdF9zaG9ydF9iaW5ieXRlcyhzZWxmKToKKyAgICAgICAgZHVtcGVkID0gYidceDgwXHgwM0NceDA0XHhlMlx4ODJceGFjXHgwMC4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhkdW1wZWQpLCBiJ1x4ZTJceDgyXHhhY1x4MDAnKQorCisgICAgZGVmIHRlc3RfYmluYnl0ZXMoc2VsZik6CisgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDNCXHgwNFx4MDBceDAwXHgwMFx4ZTJceDgyXHhhY1x4MDAuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoZHVtcGVkKSwgYidceGUyXHg4Mlx4YWNceDAwJykKKworICAgIEByZXF1aXJlc18zMmIKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV8zMmJfYmluYnl0ZXMoc2VsZik6CisgICAgICAgICMgT24gMzItYml0IGJ1aWxkcywgYSBCSU5CWVRFUyBvZiAyKiozMSBvciBtb3JlIGlzIHJlZnVzZWQKKyAgICAgICAgZHVtcGVkID0gYidceDgwXHgwM0JceGZmXHhmZlx4ZmZceGZmeHl6cVx4MDAuJworICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3IoKHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIE92ZXJmbG93RXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcGVkKQorCisgICAgQHJlcXVpcmVzXzMyYgorICAgIGRlZiB0ZXN0X25lZ2F0aXZlXzMyYl9iaW51bmljb2RlKHNlbGYpOgorICAgICAgICAjIE9uIDMyLWJpdCBidWlsZHMsIGEgQklOVU5JQ09ERSBvZiAyKiozMSBvciBtb3JlIGlzIHJlZnVzZWQKKyAgICAgICAgZHVtcGVkID0gYidceDgwXHgwM1hceGZmXHhmZlx4ZmZceGZmeHl6cVx4MDAuJworICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3IoKHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIE92ZXJmbG93RXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcGVkKQorCisgICAgZGVmIHRlc3Rfc2hvcnRfYmludW5pY29kZShzZWxmKToKKyAgICAgICAgZHVtcGVkID0gYidceDgwXHgwNFx4OGNceDA0XHhlMlx4ODJceGFjXHgwMC4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhkdW1wZWQpLCAnXHUyMGFjXHgwMCcpCisKKyAgICBkZWYgdGVzdF9taXNjX2dldChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKEtleUVycm9yLCBiJ2cwXG5wMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoWygxMDAsKSwgKDEwMCwpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRzKGInKChLZHRwMFxuaFx4MDBsLikpJykpCisKKyAgICBkZWYgdGVzdF9iaW5ieXRlczgoc2VsZik6CisgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDRceDhlXDRcMFwwXDBcMFwwXDBcMFx4ZTJceDgyXHhhY1x4MDAuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoZHVtcGVkKSwgYidceGUyXHg4Mlx4YWNceDAwJykKKworICAgIGRlZiB0ZXN0X2JpbnVuaWNvZGU4KHNlbGYpOgorICAgICAgICBkdW1wZWQgPSBiJ1x4ODBceDA0XHg4ZFw0XDBcMFwwXDBcMFwwXDBceGUyXHg4Mlx4YWNceDAwLicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKGR1bXBlZCksICdcdTIwYWNceDAwJykKKworICAgIEByZXF1aXJlc18zMmIKKyAgICBkZWYgdGVzdF9sYXJnZV8zMmJfYmluYnl0ZXM4KHNlbGYpOgorICAgICAgICBkdW1wZWQgPSBiJ1x4ODBceDA0XHg4ZVw0XDBcMFwwXDFcMFwwXDBceGUyXHg4Mlx4YWNceDAwLicKKyAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBPdmVyZmxvd0Vycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBlZCkKKworICAgIEByZXF1aXJlc18zMmIKKyAgICBkZWYgdGVzdF9sYXJnZV8zMmJfYmludW5pY29kZTgoc2VsZik6CisgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDRceDhkXDRcMFwwXDBcMVwwXDBcMFx4ZTJceDgyXHhhY1x4MDAuJworICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3IoKHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIE92ZXJmbG93RXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcGVkKQorCisgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgorICAgICAgICBwaWNrbGVkID0gYicoKGxwMTAwMDAwXG5nMTAwMDAwXG50LicKKyAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgKFtdLCkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh1bnBpY2tsZWRbMF0sIHVucGlja2xlZFsxXSkKKworICAgIGRlZiB0ZXN0X2JpbmdldChzZWxmKToKKyAgICAgICAgcGlja2xlZCA9IGInKF1xXHhmZmhceGZmdC4nCisgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIChbXSwpKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW5waWNrbGVkWzBdLCB1bnBpY2tsZWRbMV0pCisKKyAgICBkZWYgdGVzdF9sb25nX2JpbmdldChzZWxmKToKKyAgICAgICAgcGlja2xlZCA9IGInKF1yXHgwMFx4MDBceDAxXHgwMGpceDAwXHgwMFx4MDFceDAwdC4nCisgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIChbXSwpKjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW5waWNrbGVkWzBdLCB1bnBpY2tsZWRbMV0pCisKKyAgICBkZWYgdGVzdF9kdXAoc2VsZik6CisgICAgICAgIHBpY2tsZWQgPSBiJygobDJ0LicKKyAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhwaWNrbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgKFtdLCkqMikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh1bnBpY2tsZWRbMF0sIHVucGlja2xlZFsxXSkKKworICAgIGRlZiB0ZXN0X25lZ2F0aXZlX3B1dChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTI4NDcKKyAgICAgICAgZHVtcGVkID0gYidWYVxucC0xXG4uJworICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3IoVmFsdWVFcnJvciwgZHVtcGVkKQorCisgICAgQHJlcXVpcmVzXzMyYgorICAgIGRlZiB0ZXN0X25lZ2F0aXZlXzMyYl9iaW5wdXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzEyODQ3CisgICAgICAgIGR1bXBlZCA9IGInXHg4MFx4MDNYXHgwMVx4MDBceDAwXHgwMGFyXHhmZlx4ZmZceGZmXHhmZi4nCisgICAgICAgIHNlbGYuY2hlY2tfdW5waWNrbGluZ19lcnJvcihWYWx1ZUVycm9yLCBkdW1wZWQpCisKKyAgICBkZWYgdGVzdF9iYWRseV9lc2NhcGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKFZhbHVlRXJyb3IsIGIiUydcXCdcbi4iKQorCisgICAgZGVmIHRlc3RfYmFkbHlfcXVvdGVkX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTc3MTAKKyAgICAgICAgYmFkcGlja2xlcyA9IFtiIlMnXG4uIiwKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MiXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1NcJyBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUyIgXG4uJywKKyAgICAgICAgICAgICAgICAgICAgICBiJ1NcJyJcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUyJcJ1xuLicsCisgICAgICAgICAgICAgICAgICAgICAgYiJTJyAnIFxuLiIsCisgICAgICAgICAgICAgICAgICAgICAgYidTIiAiIFxuLicsCisgICAgICAgICAgICAgICAgICAgICAgYiJTICcnXG4uIiwKKyAgICAgICAgICAgICAgICAgICAgICBiJ1MgIiJcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInUyBcbi4nLAorICAgICAgICAgICAgICAgICAgICAgIGInU1xuLicsCisgICAgICAgICAgICAgICAgICAgICAgYidTLiddCisgICAgICAgIGZvciBwIGluIGJhZHBpY2tsZXM6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3IocGlja2xlLlVucGlja2xpbmdFcnJvciwgcCkKKworICAgIGRlZiB0ZXN0X2NvcnJlY3RseV9xdW90ZWRfc3RyaW5nKHNlbGYpOgorICAgICAgICBnb29kcGlja2xlcyA9IFsoYiJTJydcbi4iLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgIChiJ1MiIlxuLicsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgKGInUyJcXG4iXG4uJywgJ1xuJyksCisgICAgICAgICAgICAgICAgICAgICAgIChiIlMnXFxuJ1xuLiIsICdcbicpXQorICAgICAgICBmb3IgcCwgZXhwZWN0ZWQgaW4gZ29vZHBpY2tsZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfZnJhbWVfcmVhZGxpbmUoc2VsZik6CisgICAgICAgIHBpY2tsZWQgPSBiJ1x4ODBceDA0XHg5NVx4MDVceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwSTQyXG4uJworICAgICAgICAjICAgIDA6IFx4ODAgUFJPVE8gICAgICA0CisgICAgICAgICMgICAgMjogXHg5NSBGUkFNRSAgICAgIDUKKyAgICAgICAgIyAgIDExOiBJICAgIElOVCAgICAgICAgNDIKKyAgICAgICAgIyAgIDE1OiAuICAgIFNUT1AKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHBpY2tsZWQpLCA0MikKKworICAgIGRlZiB0ZXN0X2NvbXBhdF91bnBpY2tsZShzZWxmKToKKyAgICAgICAgIyB4cmFuZ2UoMSwgNykKKyAgICAgICAgcGlja2xlZCA9IGInXHg4MFx4MDJjX19idWlsdGluX19cbnhyYW5nZVxuS1x4MDFLXHgwN0tceDAxXHg4N1IuJworICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZSh1bnBpY2tsZWQpLCByYW5nZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIHJhbmdlKDEsIDcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodW5waWNrbGVkKSwgWzEsIDIsIDMsIDQsIDUsIDZdKQorICAgICAgICAjIHJlZHVjZQorICAgICAgICBwaWNrbGVkID0gYidceDgwXHgwMmNfX2J1aWx0aW5fX1xucmVkdWNlXG4uJworICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYubG9hZHMocGlja2xlZCksIGZ1bmN0b29scy5yZWR1Y2UpCisgICAgICAgICMgd2hpY2hkYi53aGljaGRiCisgICAgICAgIHBpY2tsZWQgPSBiJ1x4ODBceDAyY3doaWNoZGJcbndoaWNoZGJcbi4nCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5sb2FkcyhwaWNrbGVkKSwgZGJtLndoaWNoZGIpCisgICAgICAgICMgRXhjZXB0aW9uKCksIFN0YW5kYXJkRXJyb3IoKQorICAgICAgICBmb3IgbmFtZSBpbiAoYidFeGNlcHRpb24nLCBiJ1N0YW5kYXJkRXJyb3InKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSAoYidceDgwXHgwMmNleGNlcHRpb25zXG4nICsgbmFtZSArIGInXG5VXHgwM3VnaFx4ODVSLicpCisgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUodW5waWNrbGVkKSwgRXhjZXB0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodW5waWNrbGVkKSwgJ3VnaCcpCisgICAgICAgICMgVXNlckRpY3QuVXNlckRpY3QoezE6IDJ9KSwgVXNlckRpY3QuSXRlcmFibGVVc2VyRGljdCh7MTogMn0pCisgICAgICAgIGZvciBuYW1lIGluIChiJ1VzZXJEaWN0JywgYidJdGVyYWJsZVVzZXJEaWN0Jyk6CisgICAgICAgICAgICBwaWNrbGVkID0gKGInXHg4MFx4MDIoY1VzZXJEaWN0XG4nICsgbmFtZSArCisgICAgICAgICAgICAgICAgICAgICAgIGInXG5vfVVceDA0ZGF0YX1LXHgwMUtceDAyc3NiLicpCisgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUodW5waWNrbGVkKSwgY29sbGVjdGlvbnMuVXNlckRpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgY29sbGVjdGlvbnMuVXNlckRpY3QoezE6IDJ9KSkKKworICAgIGRlZiB0ZXN0X2JhZF9zdGFjayhzZWxmKToKKyAgICAgICAgYmFkcGlja2xlcyA9IFsKKyAgICAgICAgICAgIGInLicsICAgICAgICAgICAgICAgICAgICAgICAjIFNUT1AKKyAgICAgICAgICAgIGInMCcsICAgICAgICAgICAgICAgICAgICAgICAjIFBPUAorICAgICAgICAgICAgYicxJywgICAgICAgICAgICAgICAgICAgICAgICMgUE9QX01BUksKKyAgICAgICAgICAgIGInMicsICAgICAgICAgICAgICAgICAgICAgICAjIERVUAorICAgICAgICAgICAgIyBiJygyJywgICAgICAgICAgICAgICAgICAgICMgUHlVbnBpY2tsZXIgZG9lc24ndCByYWlzZQorICAgICAgICAgICAgYidSJywgICAgICAgICAgICAgICAgICAgICAgICMgUkVEVUNFCisgICAgICAgICAgICBiJylSJywKKyAgICAgICAgICAgIGInYScsICAgICAgICAgICAgICAgICAgICAgICAjIEFQUEVORAorICAgICAgICAgICAgYidOYScsCisgICAgICAgICAgICBiJ2InLCAgICAgICAgICAgICAgICAgICAgICAgIyBCVUlMRAorICAgICAgICAgICAgYidOYicsCisgICAgICAgICAgICBiJ2QnLCAgICAgICAgICAgICAgICAgICAgICAgIyBESUNUCisgICAgICAgICAgICBiJ2UnLCAgICAgICAgICAgICAgICAgICAgICAgIyBBUFBFTkRTCisgICAgICAgICAgICAjIGInKGUnLCAgICAgICAgICAgICAgICAgICAgIyBQeVVucGlja2xlciByYWlzZXMgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgICAgIGInaWJ1aWx0aW5zXG5saXN0XG4nLCAgICAgICAjIElOU1QKKyAgICAgICAgICAgIGInbCcsICAgICAgICAgICAgICAgICAgICAgICAjIExJU1QKKyAgICAgICAgICAgIGInbycsICAgICAgICAgICAgICAgICAgICAgICAjIE9CSgorICAgICAgICAgICAgYicobycsCisgICAgICAgICAgICBiJ3AxXG4nLCAgICAgICAgICAgICAgICAgICAgIyBQVVQKKyAgICAgICAgICAgIGIncVx4MDAnLCAgICAgICAgICAgICAgICAgICAjIEJJTlBVVAorICAgICAgICAgICAgYidyXHgwMFx4MDBceDAwXHgwMCcsICAgICAgICMgTE9OR19CSU5QVVQKKyAgICAgICAgICAgIGIncycsICAgICAgICAgICAgICAgICAgICAgICAjIFNFVElURU0KKyAgICAgICAgICAgIGInTnMnLAorICAgICAgICAgICAgYidOTnMnLAorICAgICAgICAgICAgYid0JywgICAgICAgICAgICAgICAgICAgICAgICMgVFVQTEUKKyAgICAgICAgICAgIGIndScsICAgICAgICAgICAgICAgICAgICAgICAjIFNFVElURU1TCisgICAgICAgICAgICAjIGInKHUnLCAgICAgICAgICAgICAgICAgICAgIyBQeVVucGlja2xlciBkb2Vzbid0IHJhaXNlCisgICAgICAgICAgICBiJ30oTnUnLAorICAgICAgICAgICAgYidceDgxJywgICAgICAgICAgICAgICAgICAgICMgTkVXT0JKCisgICAgICAgICAgICBiJylceDgxJywKKyAgICAgICAgICAgIGInXHg4NScsICAgICAgICAgICAgICAgICAgICAjIFRVUExFMQorICAgICAgICAgICAgYidceDg2JywgICAgICAgICAgICAgICAgICAgICMgVFVQTEUyCisgICAgICAgICAgICBiJ05ceDg2JywKKyAgICAgICAgICAgIGInXHg4NycsICAgICAgICAgICAgICAgICAgICAjIFRVUExFMworICAgICAgICAgICAgYidOXHg4NycsCisgICAgICAgICAgICBiJ05OXHg4NycsCisgICAgICAgICAgICBiJ1x4OTAnLCAgICAgICAgICAgICAgICAgICAgIyBBRERJVEVNUworICAgICAgICAgICAgIyBiJyhceDkwJywgICAgICAgICAgICAgICAgICMgUHlVbnBpY2tsZXIgcmFpc2VzIEF0dHJpYnV0ZUVycm9yCisgICAgICAgICAgICBiJ1x4OTEnLCAgICAgICAgICAgICAgICAgICAgIyBGUk9aRU5TRVQKKyAgICAgICAgICAgIGInXHg5MicsICAgICAgICAgICAgICAgICAgICAjIE5FV09CSl9FWAorICAgICAgICAgICAgYicpfVx4OTInLAorICAgICAgICAgICAgYidceDkzJywgICAgICAgICAgICAgICAgICAgICMgU1RBQ0tfR0xPQkFMCisgICAgICAgICAgICBiJ1ZsaXN0XG5ceDkzJywKKyAgICAgICAgICAgIGInXHg5NCcsICAgICAgICAgICAgICAgICAgICAjIE1FTU9JWkUKKyAgICAgICAgXQorICAgICAgICBmb3IgcCBpbiBiYWRwaWNrbGVzOgorICAgICAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKHNlbGYuYmFkX3N0YWNrX2Vycm9ycywgcCkKKworICAgIGRlZiB0ZXN0X2JhZF9tYXJrKHNlbGYpOgorICAgICAgICBiYWRwaWNrbGVzID0gWworICAgICAgICAgICAgIyBiJ04oLicsICAgICAgICAgICAgICAgICAgICAgIyBTVE9QCisgICAgICAgICAgICBiJ04oMicsICAgICAgICAgICAgICAgICAgICAgIyBEVVAKKyAgICAgICAgICAgIGInY2J1aWx0aW5zXG5saXN0XG4pKFInLCAgICAjIFJFRFVDRQorICAgICAgICAgICAgYidjYnVpbHRpbnNcbmxpc3RcbigpUicsCisgICAgICAgICAgICBiJ11OKGEnLCAgICAgICAgICAgICAgICAgICAgIyBBUFBFTkQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEJVSUxECisgICAgICAgICAgICBiJ2NidWlsdGluc1xuVmFsdWVFcnJvclxuKVJ9KGInLAorICAgICAgICAgICAgYidjYnVpbHRpbnNcblZhbHVlRXJyb3JcbilSKH1iJywKKyAgICAgICAgICAgIGInKE5kJywgICAgICAgICAgICAgICAgICAgICAjIERJQ1QKKyAgICAgICAgICAgIGInTihwMVxuJywgICAgICAgICAgICAgICAgICAjIFBVVAorICAgICAgICAgICAgYidOKHFceDAwJywgICAgICAgICAgICAgICAgICMgQklOUFVUCisgICAgICAgICAgICBiJ04oclx4MDBceDAwXHgwMFx4MDAnLCAgICAgIyBMT05HX0JJTlBVVAorICAgICAgICAgICAgYid9Tk4ocycsICAgICAgICAgICAgICAgICAgICMgU0VUSVRFTQorICAgICAgICAgICAgYid9TihOcycsCisgICAgICAgICAgICBiJ30oTk5zJywKKyAgICAgICAgICAgIGInfSgodScsICAgICAgICAgICAgICAgICAgICAjIFNFVElURU1TCisgICAgICAgICAgICBiJ2NidWlsdGluc1xubGlzdFxuKShceDgxJywgIyBORVdPQkoKKyAgICAgICAgICAgIGInY2J1aWx0aW5zXG5saXN0XG4oKVx4ODEnLAorICAgICAgICAgICAgYidOKFx4ODUnLCAgICAgICAgICAgICAgICAgICMgVFVQTEUxCisgICAgICAgICAgICBiJ05OKFx4ODYnLCAgICAgICAgICAgICAgICAgIyBUVVBMRTIKKyAgICAgICAgICAgIGInTihOXHg4NicsCisgICAgICAgICAgICBiJ05OTihceDg3JywgICAgICAgICAgICAgICAgIyBUVVBMRTMKKyAgICAgICAgICAgIGInTk4oTlx4ODcnLAorICAgICAgICAgICAgYidOKE5OXHg4NycsCisgICAgICAgICAgICBiJ10oKFx4OTAnLCAgICAgICAgICAgICAgICAgIyBBRERJVEVNUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTkVXT0JKX0VYCisgICAgICAgICAgICBiJ2NidWlsdGluc1xubGlzdFxuKX0oXHg5MicsCisgICAgICAgICAgICBiJ2NidWlsdGluc1xubGlzdFxuKSh9XHg5MicsCisgICAgICAgICAgICBiJ2NidWlsdGluc1xubGlzdFxuKCl9XHg5MicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTVEFDS19HTE9CQUwKKyAgICAgICAgICAgIGInVmJ1aWx0aW5zXG4oVmxpc3Rcblx4OTMnLAorICAgICAgICAgICAgYidWYnVpbHRpbnNcblZsaXN0XG4oXHg5MycsCisgICAgICAgICAgICBiJ04oXHg5NCcsICAgICAgICAgICAgICAgICAgIyBNRU1PSVpFCisgICAgICAgIF0KKyAgICAgICAgZm9yIHAgaW4gYmFkcGlja2xlczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdW5waWNrbGluZ19lcnJvcihzZWxmLmJhZF9tYXJrX2Vycm9ycywgcCkKKworICAgIGRlZiB0ZXN0X3RydW5jYXRlZF9kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3VucGlja2xpbmdfZXJyb3IoRU9GRXJyb3IsIGInJykKKyAgICAgICAgc2VsZi5jaGVja191bnBpY2tsaW5nX2Vycm9yKEVPRkVycm9yLCBiJ04nKQorICAgICAgICBiYWRwaWNrbGVzID0gWworICAgICAgICAgICAgYidCJywgICAgICAgICAgICAgICAgICAgICAgICMgQklOQllURVMKKyAgICAgICAgICAgIGInQlx4MDNceDAwXHgwMCcsCisgICAgICAgICAgICBiJ0JceDAzXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInQlx4MDNceDAwXHgwMFx4MDBhYicsCisgICAgICAgICAgICBiJ0MnLCAgICAgICAgICAgICAgICAgICAgICAgIyBTSE9SVF9CSU5CWVRFUworICAgICAgICAgICAgYidDXHgwMycsCisgICAgICAgICAgICBiJ0NceDAzYWInLAorICAgICAgICAgICAgYidGJywgICAgICAgICAgICAgICAgICAgICAgICMgRkxPQVQKKyAgICAgICAgICAgIGInRjAuMCcsCisgICAgICAgICAgICBiJ0YwLjAwJywKKyAgICAgICAgICAgIGInRycsICAgICAgICAgICAgICAgICAgICAgICAjIEJJTkZMT0FUCisgICAgICAgICAgICBiJ0dceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInSScsICAgICAgICAgICAgICAgICAgICAgICAjIElOVAorICAgICAgICAgICAgYidJMCcsCisgICAgICAgICAgICBiJ0onLCAgICAgICAgICAgICAgICAgICAgICAgIyBCSU5JTlQKKyAgICAgICAgICAgIGInSlx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ0snLCAgICAgICAgICAgICAgICAgICAgICAgIyBCSU5JTlQxCisgICAgICAgICAgICBiJ0wnLCAgICAgICAgICAgICAgICAgICAgICAgIyBMT05HCisgICAgICAgICAgICBiJ0wwJywKKyAgICAgICAgICAgIGInTDEwJywKKyAgICAgICAgICAgIGInTDBMJywKKyAgICAgICAgICAgIGInTDEwTCcsCisgICAgICAgICAgICBiJ00nLCAgICAgICAgICAgICAgICAgICAgICAgIyBCSU5JTlQyCisgICAgICAgICAgICBiJ01ceDAwJywKKyAgICAgICAgICAgICMgYidQJywgICAgICAgICAgICAgICAgICAgICAgICMgUEVSU0lECisgICAgICAgICAgICAjIGInUGFiYycsCisgICAgICAgICAgICBiJ1MnLCAgICAgICAgICAgICAgICAgICAgICAgIyBTVFJJTkcKKyAgICAgICAgICAgIGIiUydhYmMnIiwKKyAgICAgICAgICAgIGInVCcsICAgICAgICAgICAgICAgICAgICAgICAjIEJJTlNUUklORworICAgICAgICAgICAgYidUXHgwM1x4MDBceDAwJywKKyAgICAgICAgICAgIGInVFx4MDNceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidUXHgwM1x4MDBceDAwXHgwMGFiJywKKyAgICAgICAgICAgIGInVScsICAgICAgICAgICAgICAgICAgICAgICAjIFNIT1JUX0JJTlNUUklORworICAgICAgICAgICAgYidVXHgwMycsCisgICAgICAgICAgICBiJ1VceDAzYWInLAorICAgICAgICAgICAgYidWJywgICAgICAgICAgICAgICAgICAgICAgICMgVU5JQ09ERQorICAgICAgICAgICAgYidWYWJjJywKKyAgICAgICAgICAgIGInWCcsICAgICAgICAgICAgICAgICAgICAgICAjIEJJTlVOSUNPREUKKyAgICAgICAgICAgIGInWFx4MDNceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1hceDAzXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInWFx4MDNceDAwXHgwMFx4MDBhYicsCisgICAgICAgICAgICBiJyhjJywgICAgICAgICAgICAgICAgICAgICAgIyBHTE9CQUwKKyAgICAgICAgICAgIGInKGNidWlsdGlucycsCisgICAgICAgICAgICBiJyhjYnVpbHRpbnNcbicsCisgICAgICAgICAgICBiJyhjYnVpbHRpbnNcbmxpc3QnLAorICAgICAgICAgICAgYidOZycsICAgICAgICAgICAgICAgICAgICAgICMgR0VUCisgICAgICAgICAgICBiJ05nMCcsCisgICAgICAgICAgICBiJyhpJywgICAgICAgICAgICAgICAgICAgICAgIyBJTlNUCisgICAgICAgICAgICBiJyhpYnVpbHRpbnMnLAorICAgICAgICAgICAgYicoaWJ1aWx0aW5zXG4nLAorICAgICAgICAgICAgYicoaWJ1aWx0aW5zXG5saXN0JywKKyAgICAgICAgICAgIGInTmgnLCAgICAgICAgICAgICAgICAgICAgICAjIEJJTkdFVAorICAgICAgICAgICAgYidOaicsICAgICAgICAgICAgICAgICAgICAgICMgTE9OR19CSU5HRVQKKyAgICAgICAgICAgIGInTmpceDAwXHgwMFx4MDAnLAorICAgICAgICAgICAgYidOcCcsICAgICAgICAgICAgICAgICAgICAgICMgUFVUCisgICAgICAgICAgICBiJ05wMCcsCisgICAgICAgICAgICBiJ05xJywgICAgICAgICAgICAgICAgICAgICAgIyBCSU5QVVQKKyAgICAgICAgICAgIGInTnInLCAgICAgICAgICAgICAgICAgICAgICAjIExPTkdfQklOUFVUCisgICAgICAgICAgICBiJ05yXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInXHg4MCcsICAgICAgICAgICAgICAgICAgICAjIFBST1RPCisgICAgICAgICAgICBiJ1x4ODInLCAgICAgICAgICAgICAgICAgICAgIyBFWFQxCisgICAgICAgICAgICBiJ1x4ODMnLCAgICAgICAgICAgICAgICAgICAgIyBFWFQyCisgICAgICAgICAgICBiJ1x4ODRceDAxJywKKyAgICAgICAgICAgIGInXHg4NCcsICAgICAgICAgICAgICAgICAgICAjIEVYVDQKKyAgICAgICAgICAgIGInXHg4NFx4MDFceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1x4OGEnLCAgICAgICAgICAgICAgICAgICAgIyBMT05HMQorICAgICAgICAgICAgYidceDhiJywgICAgICAgICAgICAgICAgICAgICMgTE9ORzQKKyAgICAgICAgICAgIGInXHg4Ylx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1x4OGMnLCAgICAgICAgICAgICAgICAgICAgIyBTSE9SVF9CSU5VTklDT0RFCisgICAgICAgICAgICBiJ1x4OGNceDAzJywKKyAgICAgICAgICAgIGInXHg4Y1x4MDNhYicsCisgICAgICAgICAgICBiJ1x4OGQnLCAgICAgICAgICAgICAgICAgICAgIyBCSU5VTklDT0RFOAorICAgICAgICAgICAgYidceDhkXHgwM1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1x4OGRceDAzXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1x4OGRceDAzXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMGFiJywKKyAgICAgICAgICAgIGInXHg4ZScsICAgICAgICAgICAgICAgICAgICAjIEJJTkJZVEVTOAorICAgICAgICAgICAgYidceDhlXHgwM1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1x4OGVceDAzXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcsCisgICAgICAgICAgICBiJ1x4OGVceDAzXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMGFiJywKKyAgICAgICAgICAgIGInXHg5NScsICAgICAgICAgICAgICAgICAgICAjIEZSQU1FCisgICAgICAgICAgICBiJ1x4OTVceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInXHg5NVx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInXHg5NVx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwTicsCisgICAgICAgIF0KKyAgICAgICAgZm9yIHAgaW4gYmFkcGlja2xlczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdW5waWNrbGluZ19lcnJvcihzZWxmLnRydW5jYXRlZF9lcnJvcnMsIHApCisKKworY2xhc3MgQWJzdHJhY3RQaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBTdWJjbGFzcyBtdXN0IGRlZmluZSBzZWxmLmR1bXBzLCBzZWxmLmxvYWRzLgorCisgICAgb3B0aW1pemVkID0gRmFsc2UKKworICAgIF90ZXN0ZGF0YSA9IEFic3RyYWN0VW5waWNrbGVUZXN0cy5fdGVzdGRhdGEKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgYXNzZXJ0X2lzX2NvcHkgPSBBYnN0cmFjdFVucGlja2xlVGVzdHMuYXNzZXJ0X2lzX2NvcHkKKworICAgIGRlZiB0ZXN0X21pc2Moc2VsZik6CisgICAgICAgICMgdGVzdCB2YXJpb3VzIGRhdGF0eXBlcyBub3QgdGVzdGVkIGJ5IHRlc3RkYXRhCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB4ID0gbXlpbnQoNCkKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgICAgICAgICAgeCA9ICgxLCAoKSkKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgICAgICAgICAgeCA9IGluaXRhcmcoMSwgeCkKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgICAgICAjIFhYWCB0ZXN0IF9fcmVkdWNlX18gcHJvdG9jb2w/CisKKyAgICBkZWYgdGVzdF9yb3VuZHRyaXBfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fdGVzdGRhdGEKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGV4cGVjdGVkLCBwcm90bykKKyAgICAgICAgICAgIGdvdCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoZXhwZWN0ZWQsIGdvdCkKIAogICAgICMgVGhlcmUgYXJlIGdyYXR1aXRvdXMgZGlmZmVyZW5jZXMgYmV0d2VlbiBwaWNrbGVzIHByb2R1Y2VkIGJ5CiAgICAgIyBwaWNrbGUgYW5kIGNQaWNrbGUsIGxhcmdlbHkgYmVjYXVzZSBjUGlja2xlIHN0YXJ0cyBQVVQgaW5kaWNlcyBhdApAQCAtNjE1LDE4ICsxMjM3LDIxIEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhsLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgbGlzdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeFswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeFswXSwgeCkKIAotICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV90dXBsZShzZWxmKToKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfdHVwbGVfYW5kX2xpc3Qoc2VsZik6CiAgICAgICAgIHQgPSAoW10sKQogICAgICAgICB0WzBdLmFwcGVuZCh0KQogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHModCwgcHJvdG8pCiAgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIHR1cGxlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeFswXSwgbGlzdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHhbMF0pLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeFswXVswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeFswXVswXSwgeCkKIAogICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9kaWN0KHNlbGYpOgogICAgICAgICBkID0ge30KQEAgLTYzNCw4ICsxMjU5LDY1IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhkLCBwcm90bykKICAgICAgICAgICAgIHggPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoeCwgZGljdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4LmtleXMoKSksIFsxXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh4WzFdIGlzIHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHhbMV0sIHgpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfZGljdF9rZXkoc2VsZik6CisgICAgICAgIGQgPSB7fQorICAgICAgICBrID0gSyhkKQorICAgICAgICBkW2tdID0gMQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZCwgcHJvdG8pCisgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIGRpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih4LmtleXMoKSksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobGlzdCh4LmtleXMoKSlbMF0sIEspCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxpc3QoeC5rZXlzKCkpWzBdLnZhbHVlLCB4KQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3NldChzZWxmKToKKyAgICAgICAgeSA9IHNldCgpCisgICAgICAgIGsgPSBLKHkpCisgICAgICAgIHkuYWRkKGspCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeSwgcHJvdG8pCisgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIHNldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxpc3QoeClbMF0sIEspCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxpc3QoeClbMF0udmFsdWUsIHgpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfbGlzdF9zdWJjbGFzcyhzZWxmKToKKyAgICAgICAgeSA9IE15TGlzdCgpCisgICAgICAgIHkuYXBwZW5kKHkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgyLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeSwgcHJvdG8pCisgICAgICAgICAgICB4ID0gc2VsZi5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHgsIE15TGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHgpLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4WzBdLCB4KQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2RpY3Rfc3ViY2xhc3Moc2VsZik6CisgICAgICAgIGQgPSBNeURpY3QoKQorICAgICAgICBkWzFdID0gZAorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGQsIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBNeURpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeC5rZXlzKCkpLCBbMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHhbMV0sIHgpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfZGljdF9zdWJjbGFzc19rZXkoc2VsZik6CisgICAgICAgIGQgPSBNeURpY3QoKQorICAgICAgICBrID0gSyhkKQorICAgICAgICBkW2tdID0gMQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGQsIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBNeURpY3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXN0KHgua2V5cygpKSksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobGlzdCh4LmtleXMoKSlbMF0sIEspCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxpc3QoeC5rZXlzKCkpWzBdLnZhbHVlLCB4KQogCiAgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2luc3Qoc2VsZik6CiAgICAgICAgIGkgPSBDKCkKQEAgLTY0Myw2ICsxMzI1LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGksIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBDKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXIoeCksIGRpcihpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoeC5hdHRyLCB4KQogCkBAIC02NTUsMzggKzEzMzgsNTMgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKGwsIHByb3RvKQogICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCBsaXN0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcih4WzBdKSwgZGlyKGkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHhbMF0uYXR0ci5rZXlzKCkpLCBbMV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoeFswXS5hdHRyWzFdIGlzIHgpCiAKLSAgICBkZWYgdGVzdF9nZXQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzZWxmLmxvYWRzLCBiJ2cwXG5wMCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhiJygoS2R0cDBcbmhceDAwbC4pKScpLCBbKDEwMCwpLCAoMTAwLCldKQorICAgIGRlZiBjaGVja19yZWN1cnNpdmVfY29sbGVjdGlvbl9hbmRfaW5zdChzZWxmLCBmYWN0b3J5KToKKyAgICAgICAgaCA9IEgoKQorICAgICAgICB5ID0gZmFjdG9yeShbaF0pCisgICAgICAgIGguYXR0ciA9IHkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHksIHByb3RvKQorICAgICAgICAgICAgeCA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh4LCB0eXBlKHkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oeCksIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobGlzdCh4KVswXSwgSCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobGlzdCh4KVswXS5hdHRyLCB4KQogCi0gICAgZGVmIHRlc3RfaW5zZWN1cmVfc3RyaW5ncyhzZWxmKToKLSAgICAgICAgIyBYWFggU29tZSBvZiB0aGVzZSB0ZXN0cyBhcmUgdGVtcG9yYXJpbHkgZGlzYWJsZWQKLSAgICAgICAgaW5zZWN1cmUgPSBbYiJhYmMiLCBiIjIgKyAyIiwgIyBub3QgcXVvdGVkCi0gICAgICAgICAgICAgICAgICAgICMjIGIiJ2FiYycgKyAnZGVmJyIsICMgbm90IGEgc2luZ2xlIHF1b3RlZCBzdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgYiInYWJjIiwgIyBxdW90ZSBpcyBub3QgY2xvc2VkCi0gICAgICAgICAgICAgICAgICAgIGIiJ2FiY1wiIiwgIyBvcGVuIHF1b3RlIGFuZCBjbG9zZSBxdW90ZSBkb24ndCBtYXRjaAotICAgICAgICAgICAgICAgICAgICBiIidhYmMnICAgPyIsICMganVuayBhZnRlciBjbG9zZSBxdW90ZQotICAgICAgICAgICAgICAgICAgICBiIidcXCciLCAjIHRyYWlsaW5nIGJhY2tzbGFzaAotICAgICAgICAgICAgICAgICAgICAjIFZhcmlhdGlvbnMgb24gaXNzdWUgIzE3NzEwCi0gICAgICAgICAgICAgICAgICAgIGIiJyIsCi0gICAgICAgICAgICAgICAgICAgIGInIicsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAiLAotICAgICAgICAgICAgICAgICAgICBiIicgICIsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAgICIsCi0gICAgICAgICAgICAgICAgICAgIGIiJyAgICAiLAotICAgICAgICAgICAgICAgICAgICBiJyIgICAgJywKLSAgICAgICAgICAgICAgICAgICAgIyBzb21lIHRlc3RzIG9mIHRoZSBxdW90aW5nIHJ1bGVzCi0gICAgICAgICAgICAgICAgICAgICMjIGIiJ2FiY1wiXCcnIiwKLSAgICAgICAgICAgICAgICAgICAgIyMgYiInXFxcXGFcJ1wnXCdcXFwnXFxcXFwnJyIsCi0gICAgICAgICAgICAgICAgICAgIF0KLSAgICAgICAgZm9yIGIgaW4gaW5zZWN1cmU6Ci0gICAgICAgICAgICBidWYgPSBiIlMiICsgYiArIGIiXDAxMnAwXDAxMi4iCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBidWYpCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2xpc3RfYW5kX2luc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVjdXJzaXZlX2NvbGxlY3Rpb25fYW5kX2luc3QobGlzdCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV90dXBsZV9hbmRfaW5zdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWN1cnNpdmVfY29sbGVjdGlvbl9hbmRfaW5zdCh0dXBsZSkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9kaWN0X2FuZF9pbnN0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlY3Vyc2l2ZV9jb2xsZWN0aW9uX2FuZF9pbnN0KGRpY3QuZnJvbWtleXMpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfc2V0X2FuZF9pbnN0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlY3Vyc2l2ZV9jb2xsZWN0aW9uX2FuZF9pbnN0KHNldCkKKworICAgIGRlZiB0ZXN0X3JlY3Vyc2l2ZV9mcm96ZW5zZXRfYW5kX2luc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVjdXJzaXZlX2NvbGxlY3Rpb25fYW5kX2luc3QoZnJvemVuc2V0KQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2xpc3Rfc3ViY2xhc3NfYW5kX2luc3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVjdXJzaXZlX2NvbGxlY3Rpb25fYW5kX2luc3QoTXlMaXN0KQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX3R1cGxlX3N1YmNsYXNzX2FuZF9pbnN0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlY3Vyc2l2ZV9jb2xsZWN0aW9uX2FuZF9pbnN0KE15VHVwbGUpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfZGljdF9zdWJjbGFzc19hbmRfaW5zdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWN1cnNpdmVfY29sbGVjdGlvbl9hbmRfaW5zdChNeURpY3QuZnJvbWtleXMpCisKKyAgICBkZWYgdGVzdF9yZWN1cnNpdmVfc2V0X3N1YmNsYXNzX2FuZF9pbnN0KHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlY3Vyc2l2ZV9jb2xsZWN0aW9uX2FuZF9pbnN0KE15U2V0KQorCisgICAgZGVmIHRlc3RfcmVjdXJzaXZlX2Zyb3plbnNldF9zdWJjbGFzc19hbmRfaW5zdChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZWN1cnNpdmVfY29sbGVjdGlvbl9hbmRfaW5zdChNeUZyb3plblNldCkKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGUoc2VsZik6CiAgICAgICAgIGVuZGNhc2VzID0gWycnLCAnPFxcdT4nLCAnPFxcXHUxMjM0PicsICc8XG4+JywKQEAgLTY5Nyw0OCArMTM5NSwzNyBAQAogICAgICAgICAgICAgZm9yIHUgaW4gZW5kY2FzZXM6CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHModSwgcHJvdG8pCiAgICAgICAgICAgICAgICAgdTIgPSBzZWxmLmxvYWRzKHApCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1MiwgdSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHUsIHUyKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9oaWdoX3BsYW5lKHNlbGYpOgogICAgICAgICB0ID0gJ1xVMDAwMTIzNDUnCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyh0LCBwcm90bykKICAgICAgICAgICAgIHQyID0gc2VsZi5sb2FkcyhwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MiwgdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdDIpCiAKICAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIGZvciBzIGluIGInJywgYid4eXonLCBiJ3h5eicqMTAwOgogICAgICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKHMsIHByb3RvKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhwKSwgcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHMsIHNlbGYubG9hZHMocCkpCiAgICAgICAgICAgICBmb3IgcyBpbiBbYnl0ZXMoW2ldKSBmb3IgaSBpbiByYW5nZSgyNTYpXToKICAgICAgICAgICAgICAgICBwID0gc2VsZi5kdW1wcyhzLCBwcm90bykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMocCksIHMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShzLCBzZWxmLmxvYWRzKHApKQogICAgICAgICAgICAgZm9yIHMgaW4gW2J5dGVzKFtpLCBpXSkgZm9yIGkgaW4gcmFuZ2UoMjU2KV06CiAgICAgICAgICAgICAgICAgcCA9IHNlbGYuZHVtcHMocywgcHJvdG8pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHApLCBzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkocywgc2VsZi5sb2FkcyhwKSkKIAogICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6Ci0gICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIG4gPSBzeXMubWF4c2l6ZQogICAgICAgICAgICAgd2hpbGUgbjoKICAgICAgICAgICAgICAgICBmb3IgZXhwZWN0ZWQgaW4gKC1uLCBuKToKICAgICAgICAgICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoZXhwZWN0ZWQsIHByb3RvKQogICAgICAgICAgICAgICAgICAgICBuMiA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgbjIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoZXhwZWN0ZWQsIG4yKQogICAgICAgICAgICAgICAgIG4gPSBuID4+IDEKIAotICAgIGRlZiB0ZXN0X21heGludDY0KHNlbGYpOgotICAgICAgICBtYXhpbnQ2NCA9ICgxIDw8IDYzKSAtIDEKLSAgICAgICAgZGF0YSA9IGInSScgKyBzdHIobWF4aW50NjQpLmVuY29kZSgiYXNjaWkiKSArIGInXG4uJwotICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKGRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBtYXhpbnQ2NCkKLQotICAgICAgICAjIFRyeSB0b28gd2l0aCBhIGJvZ3VzIGxpdGVyYWwuCi0gICAgICAgIGRhdGEgPSBiJ0knICsgc3RyKG1heGludDY0KS5lbmNvZGUoImFzY2lpIikgKyBiJ0pVTktcbi4nCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9hZHMsIGRhdGEpCi0KICAgICBkZWYgdGVzdF9sb25nKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgIyAyNTYgYnl0ZXMgaXMgd2hlcmUgTE9ORzQgYmVnaW5zLgpAQCAtNzQ4LDcgKzE0MzUsNyBAQAogICAgICAgICAgICAgICAgICAgICBmb3IgbiBpbiBucG9zLCAtbnBvczoKICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZSA9IHNlbGYuZHVtcHMobiwgcHJvdG8pCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHBpY2tsZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgZ290KQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weShuLCBnb3QpCiAgICAgICAgICMgVHJ5IGEgbW9uc3Rlci4gIFRoaXMgaXMgcXVhZHJhdGljLXRpbWUgaW4gcHJvdG9zIDAgJiAxLCBzbyBkb24ndAogICAgICAgICAjIGJvdGhlciB3aXRoIHRob3NlLgogICAgICAgICBuYmFzZSA9IGludCgiZGVhZGJlZWZmZWVkZmFjZSIsIDE2KQpAQCAtNzU2LDYgKzE0NDMsMTAgQEAKICAgICAgICAgZm9yIG4gaW4gbmJhc2UsIC1uYmFzZToKICAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKG4sIDIpCiAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHApCisgICAgICAgICAgICAjIGFzc2VydF9pc19jb3B5IGlzIHZlcnkgZXhwZW5zaXZlIGhlcmUgYXMgaXQgcHJlY29tcHV0ZXMKKyAgICAgICAgICAgICMgYSBmYWlsdXJlIG1lc3NhZ2UgYnkgY29tcHV0aW5nIHRoZSByZXByKCkgb2YgbiBhbmQgZ290LAorICAgICAgICAgICAgIyB3ZSBqdXN0IGRvIHRoZSBjaGVjayBvdXJzZWx2ZXMuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZ290KSwgaW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCBnb3QpCiAKICAgICBkZWYgdGVzdF9mbG9hdChzZWxmKToKQEAgLTc2Niw3ICsxNDU3LDcgQEAKICAgICAgICAgICAgIGZvciB2YWx1ZSBpbiB0ZXN0X3ZhbHVlczoKICAgICAgICAgICAgICAgICBwaWNrbGUgPSBzZWxmLmR1bXBzKHZhbHVlLCBwcm90bykKICAgICAgICAgICAgICAgICBnb3QgPSBzZWxmLmxvYWRzKHBpY2tsZSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBnb3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh2YWx1ZSwgZ290KQogCiAgICAgQHJ1bl93aXRoX2xvY2FsZSgnTENfQUxMJywgJ2RlX0RFJywgJ2ZyX0ZSJykKICAgICBkZWYgdGVzdF9mbG9hdF9mb3JtYXQoc2VsZik6CkBAIC03NzQsMTUgKzE0NjUsMTggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKDEuMiwgMClbMDozXSwgYidGMS4nKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlKHNlbGYpOgotICAgICAgICBwYXNzCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpbnN0ID0gQUFBKCkKKyAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMoaW5zdCwgcHJvdG8pCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLCBSRURVQ0VfQSkKIAogICAgIGRlZiB0ZXN0X2dldGluaXRhcmdzKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgdGVzdF9wb3BfZW1wdHlfc3RhY2soc2VsZik6Ci0gICAgICAgICMgVGVzdCBpc3N1ZTc0NTUKLSAgICAgICAgcyA9IGInMCcKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIEluZGV4RXJyb3IpLCBzZWxmLmxvYWRzLCBzKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaW5zdCA9IGluaXRhcmcoMSwgMikKKyAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMoaW5zdCwgcHJvdG8pCisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoaW5zdCwgbG9hZGVkKQogCiAgICAgZGVmIHRlc3RfbWV0YWNsYXNzKHNlbGYpOgogICAgICAgICBhID0gdXNlX21ldGFjbGFzcygpCkBAIC03OTgsNiArMTQ5Miw3IEBACiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhhLCBwcm90bykKICAgICAgICAgICAgIGIgPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYSksIHR5cGUoYikpCiAKICAgICBkZWYgdGVzdF9zdHJ1Y3RzZXEoc2VsZik6CiAgICAgICAgIGltcG9ydCB0aW1lCkBAIC04MDcsMjkgKzE1MDIsMjkgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgdSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdSkKICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzdGF0Iik6CiAgICAgICAgICAgICAgICAgdCA9IG9zLnN0YXQob3MuY3VyZGlyKQogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdSkKICAgICAgICAgICAgIGlmIGhhc2F0dHIob3MsICJzdGF0dmZzIik6CiAgICAgICAgICAgICAgICAgdCA9IG9zLnN0YXR2ZnMob3MuY3VyZGlyKQogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHQsIHByb3RvKQogICAgICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCB1KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkodCwgdSkKIAogICAgIGRlZiB0ZXN0X2VsbGlwc2lzKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoLi4uLCBwcm90bykKICAgICAgICAgICAgIHUgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC4uLiwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoLi4uLCB1KQogCiAgICAgZGVmIHRlc3Rfbm90aW1wbGVtZW50ZWQoc2VsZik6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyhOb3RJbXBsZW1lbnRlZCwgcHJvdG8pCiAgICAgICAgICAgICB1ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb3RJbXBsZW1lbnRlZCwgdSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm90SW1wbGVtZW50ZWQsIHUpCiAKICAgICBkZWYgdGVzdF9zaW5nbGV0b25fdHlwZXMoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzY0Nzc6IFRlc3QgdGhhdCB0eXBlcyBvZiBidWlsdC1pbiBzaW5nbGV0b25zIGNhbiBiZSBwaWNrbGVkLgpAQCAtODQzLDIxICsxNTM4LDIxIEBACiAgICAgIyBUZXN0cyBmb3IgcHJvdG9jb2wgMgogCiAgICAgZGVmIHRlc3RfcHJvdG8oc2VsZik6Ci0gICAgICAgIGJ1aWxkX25vbmUgPSBwaWNrbGUuTk9ORSArIHBpY2tsZS5TVE9QCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBleHBlY3RlZCA9IGJ1aWxkX25vbmUKKyAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKE5vbmUsIHByb3RvKQogICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHBpY2tsZS5QUk9UTyArIGJ5dGVzKFtwcm90b10pICsgZXhwZWN0ZWQKLSAgICAgICAgICAgIHAgPSBzZWxmLmR1bXBzKE5vbmUsIHByb3RvKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBwcm90b19oZWFkZXIgPSBwaWNrbGUuUFJPVE8gKyBieXRlcyhbcHJvdG9dKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaWNrbGVkLnN0YXJ0c3dpdGgocHJvdG9faGVhZGVyKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3VudF9vcGNvZGUocGlja2xlLlBST1RPLCBwaWNrbGVkKSwgMCkKIAogICAgICAgICBvb2IgPSBwcm90b2NvbHNbLTFdICsgMSAgICAgIyBhIGZ1dHVyZSBwcm90b2NvbAorICAgICAgICBidWlsZF9ub25lID0gcGlja2xlLk5PTkUgKyBwaWNrbGUuU1RPUAogICAgICAgICBiYWRwaWNrbGUgPSBwaWNrbGUuUFJPVE8gKyBieXRlcyhbb29iXSkgKyBidWlsZF9ub25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYubG9hZHMoYmFkcGlja2xlKQotICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBkZXRhaWw6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGRldGFpbCkuc3RhcnRzd2l0aCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHBpY2tsZSBwcm90b2NvbCIpKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJ1bnN1cHBvcnRlZCBwaWNrbGUgcHJvdG9jb2wiLCBzdHIoZXJyKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiZXhwZWN0ZWQgYmFkIHByb3RvY29sIG51bWJlciB0byByYWlzZSBWYWx1ZUVycm9yIikKIApAQCAtODY2LDcgKzE1NjEsNyBAQAogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgcHJvdG8pCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5MT05HMSwgcyksIHByb3RvID49IDIpCiAKICAgICBkZWYgdGVzdF9sb25nNChzZWxmKToKQEAgLTg3NCw3ICsxNTY5LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTE9ORzQsIHMpLCBwcm90byA+PSAyKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfdHVwbGVzKHNlbGYpOgpAQCAtOTEyLDkgKzE2MDcsOSBAQAogICAgICAgICAgICAgZm9yIHggaW4gYSwgYiwgYywgZCwgZToKICAgICAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSwgKHByb3RvLCB4LCBzLCB5KSkKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVtwcm90bywgbGVuKHgpXQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcyksIFRydWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW21pbihwcm90bywgMyksIGxlbih4KV0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3Bjb2RlX2luX3BpY2tsZShleHBlY3RlZCwgcykpCiAKICAgICBkZWYgdGVzdF9zaW5nbGV0b25zKHNlbGYpOgogICAgICAgICAjIE1hcCAocHJvdG8sIHNpbmdsZXRvbikgdG8gZXhwZWN0ZWQgb3Bjb2RlLgpAQCAtOTM4LDggKzE2MzMsOCBAQAogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHggaXMgeSwgKHByb3RvLCB4LCBzLCB5KSkKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkX29wY29kZVtwcm90bywgeF0KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpLCBUcnVlKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gZXhwZWN0ZWRfb3Bjb2RlW21pbihwcm90bywgMyksIHhdCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wY29kZV9pbl9waWNrbGUoZXhwZWN0ZWQsIHMpKQogCiAgICAgZGVmIHRlc3RfbmV3b2JqX3R1cGxlKHNlbGYpOgogICAgICAgICB4ID0gTXlUdXBsZShbMSwgMiwgM10pCkBAIC05NDgsOCArMTY0Myw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR1cGxlKHgpLCB0dXBsZSh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X25ld29ial9saXN0KHNlbGYpOgogICAgICAgICB4ID0gTXlMaXN0KFsxLCAyLCAzXSkKQEAgLTk1OCw4ICsxNjUyLDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdCh4KSwgbGlzdCh5KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKIAogICAgIGRlZiB0ZXN0X25ld29ial9nZW5lcmljKHNlbGYpOgogICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgpAQCAtOTcwLDYgKzE2NjMsNyBAQAogICAgICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCiAgICAgICAgICAgICAgICAgZGV0YWlsID0gKHByb3RvLCBDLCBCLCB4LCB5LCB0eXBlKHkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkgIyBYWFggcmV2aXNpdAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQih4KSwgQih5KSwgZGV0YWlsKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXywgZGV0YWlsKQogCkBAIC05OTIsNiArMTY4NiwxOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQih4KSwgQih5KSwgZGV0YWlsKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fX2RpY3RfXywgeS5fX2RpY3RfXywgZGV0YWlsKQogCisgICAgZGVmIHRlc3RfbmV3b2JqX25vdF9jbGFzcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyNDU1MgorICAgICAgICBnbG9iYWwgU2ltcGxlTmV3T2JqCisgICAgICAgIHNhdmUgPSBTaW1wbGVOZXdPYmoKKyAgICAgICAgbyA9IFNpbXBsZU5ld09iai5fX25ld19fKFNpbXBsZU5ld09iaikKKyAgICAgICAgYiA9IHNlbGYuZHVtcHMobywgNCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgU2ltcGxlTmV3T2JqID0gNDIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IpLCBzZWxmLmxvYWRzLCBiKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgU2ltcGxlTmV3T2JqID0gc2F2ZQorCiAgICAgIyBSZWdpc3RlciBhIHR5cGUgd2l0aCBjb3B5cmVnLCB3aXRoIGV4dGVuc2lvbiBjb2RlIGV4dGNvZGUuICBQaWNrbGUKICAgICAjIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuICBDaGVjayB0aGF0IHRoZSByZXN1bHRpbmcgcGlja2xlIHVzZXMgb3Bjb2RlCiAgICAgIyAoRVhUWzEyNF0pIHVuZGVyIHByb3RvIDIsIGFuZCBub3QgaW4gcHJvdG8gMS4KQEAgLTEwMDgsMTEgKzE3MTQsMTAgQEAKICAgICAgICAgICAgIHMxID0gc2VsZi5kdW1wcyh4LCAxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihfX25hbWVfXy5lbmNvZGUoInV0Zi04IiksIHMxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIk15TGlzdCIsIHMxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczEpLCBGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Bjb2RlX2luX3BpY2tsZShvcGNvZGUsIHMxKSkKIAogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMoczEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICAgICAgICAgICMgRHVtcCB1c2luZyBwcm90b2NvbCAyIGZvciB0ZXN0LgogICAgICAgICAgICAgczIgPSBzZWxmLmR1bXBzKHgsIDIpCkBAIC0xMDIxLDkgKzE3MjYsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGNvZGVfaW5fcGlja2xlKG9wY29kZSwgczIpLCBUcnVlLCByZXByKHMyKSkKIAogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMoczIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoeCksIGxpc3QoeSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCi0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGUucmVzdG9yZSgpCiAKQEAgLTEwNDcsNyArMTc1MCw3IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fYXBwZW5kcyA9IGNvdW50X29wY29kZShwaWNrbGUuQVBQRU5EUywgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FwcGVuZHMsIHByb3RvID4gMCkKIApAQCAtMTA1Niw3ICsxNzU5LDcgQEAKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9hcHBlbmRzID0gY291bnRfb3Bjb2RlKHBpY2tsZS5BUFBFTkRTLCBzKQogICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hcHBlbmRzLCAwKQpAQCAtMTA3MCw3ICsxNzczLDcgQEAKICAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIGJ5dGVzX3R5cGVzKQogICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKICAgICAgICAgICAgIG51bV9zZXRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuU0VUSVRFTVMsIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9zZXRpdGVtcywgcHJvdG8gPiAwKQogCkBAIC0xMDc5LDIyICsxNzgyLDQ5IEBACiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKICAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAgICAgICAgICAgICBudW1fc2V0aXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLlNFVElURU1TLCBzKQogICAgICAgICAgICAgaWYgcHJvdG8gPT0gMDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9zZXRpdGVtcywgMCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bV9zZXRpdGVtcyA+PSAyKQogCisgICAgZGVmIHRlc3Rfc2V0X2NodW5raW5nKHNlbGYpOgorICAgICAgICBuID0gMTAgICMgdG9vIHNtYWxsIHRvIGNodW5rCisgICAgICAgIHggPSBzZXQocmFuZ2UobikpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgIHkgPSBzZWxmLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCisgICAgICAgICAgICBudW1fYWRkaXRlbXMgPSBjb3VudF9vcGNvZGUocGlja2xlLkFERElURU1TLCBzKQorICAgICAgICAgICAgaWYgcHJvdG8gPCA0OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtX2FkZGl0ZW1zLCAwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9hZGRpdGVtcywgMSkKKworICAgICAgICBuID0gMjUwMCAgIyBleHBlY3QgYXQgbGVhc3QgdHdvIGNodW5rcyB3aGVuIHByb3RvID49IDQKKyAgICAgICAgeCA9IHNldChyYW5nZShuKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHMgPSBzZWxmLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKyAgICAgICAgICAgIG51bV9hZGRpdGVtcyA9IGNvdW50X29wY29kZShwaWNrbGUuQURESVRFTVMsIHMpCisgICAgICAgICAgICBpZiBwcm90byA8IDQ6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1fYWRkaXRlbXMsIDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bV9hZGRpdGVtcywgMikKKwogICAgIGRlZiB0ZXN0X3NpbXBsZV9uZXdvYmooc2VsZik6CiAgICAgICAgIHggPSBvYmplY3QuX19uZXdfXyhTaW1wbGVOZXdPYmopICAjIGF2b2lkIF9faW5pdF9fCiAgICAgICAgIHguYWJjID0gNjY2CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICBzID0gc2VsZi5kdW1wcyh4LCBwcm90bykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKLCBzKSwgcHJvdG8gPj0gMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bjb2RlX2luX3BpY2tsZShwaWNrbGUuTkVXT0JKLCBzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA8PSBwcm90byA8IDQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wY29kZV9pbl9waWNrbGUocGlja2xlLk5FV09CSl9FWCwgcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3RvID49IDQpCiAgICAgICAgICAgICB5ID0gc2VsZi5sb2FkcyhzKSAgICMgd2lsbCByYWlzZSBUeXBlRXJyb3IgaWYgX19pbml0X18gY2FsbGVkCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYWJjLCA2NjYpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCisgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KHgsIHkpCiAKICAgICBkZWYgdGVzdF9uZXdvYmpfbGlzdF9zbG90cyhzZWxmKToKICAgICAgICAgeCA9IFNsb3RMaXN0KFsxLCAyLCAzXSkKQEAgLTExMDIsMTAgKzE4MzIsNyBAQAogICAgICAgICB4LmJhciA9ICJoZWxsbyIKICAgICAgICAgcyA9IHNlbGYuZHVtcHMoeCwgMikKICAgICAgICAgeSA9IHNlbGYubG9hZHMocykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHgpLCBsaXN0KHkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19kaWN0X18sIHkuX19kaWN0X18pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5mb28sIHkuZm9vKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguYmFyLCB5LmJhcikKKyAgICAgICAgc2VsZi5hc3NlcnRfaXNfY29weSh4LCB5KQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX292ZXJyaWRlc19kZWZhdWx0X3JlZHVjZV9leChzZWxmKToKICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKQEAgLTExNTQsMTEgKzE4ODEsMTAgQEAKIAogICAgIEBub190cmFjaW5nCiAgICAgZGVmIHRlc3RfYmFkX2dldGF0dHIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzM1MTQ6IGNyYXNoIHdoZW4gdGhlcmUgaXMgYW4gaW5maW5pdGUgbG9vcCBpbiBfX2dldGF0dHJfXwogICAgICAgICB4ID0gQmFkR2V0YXR0cigpCi0gICAgICAgIGZvciBwcm90byBpbiAwLCAxOgorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmR1bXBzLCB4LCBwcm90bykKLSAgICAgICAgIyBwcm90b2NvbCAyIGRvbid0IHJhaXNlIGEgUnVudGltZUVycm9yLgotICAgICAgICBkID0gc2VsZi5kdW1wcyh4LCAyKQogCiAgICAgZGVmIHRlc3RfcmVkdWNlX2JhZF9pdGVyYXRvcihzZWxmKToKICAgICAgICAgIyBJc3N1ZTQxNzY6IGNyYXNoIHdoZW4gNHRoIGFuZCA1dGggaXRlbXMgb2YgX19yZWR1Y2VfXygpCkBAIC0xMTkxLDExICsxOTE3LDEwIEBACiAgICAgICAgIG9iaiA9IFtkaWN0KGxhcmdlX2RpY3QpLCBkaWN0KGxhcmdlX2RpY3QpLCBkaWN0KGxhcmdlX2RpY3QpXQogCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCi0gICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLCBvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgcHJvdG9jb2wgJWQ6ICVyICE9ICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChwcm90bywgb2JqLCBsb2FkZWQpKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8pOgorICAgICAgICAgICAgICAgIGR1bXBlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGR1bXBlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9pc19jb3B5KG9iaiwgbG9hZGVkKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlX25hbWVfaW50ZXJuaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhdHRyaWJ1dGUgbmFtZXMgb2YgcGlja2xlZCBvYmplY3RzIGFyZSBpbnRlcm5lZCB3aGVuCkBAIC0xMjExLDQyICsxOTM2LDE1IEBACiAgICAgICAgICAgICBmb3IgeF9rZXksIHlfa2V5IGluIHppcCh4X2tleXMsIHlfa2V5cyk6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh4X2tleSwgeV9rZXkpCiAKLSAgICBkZWYgdGVzdF91bnBpY2tsZV9mcm9tXzJ4KHNlbGYpOgotICAgICAgICAjIFVucGlja2xlIG5vbi10cml2aWFsIGRhdGEgZnJvbSBQeXRob24gMi54LgotICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKERBVEEzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZCwgc2V0KFsxLCAyXSkpCi0gICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoREFUQTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShsb2FkZWQpLCB0eXBlKHJhbmdlKDApKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGxvYWRlZCksIGxpc3QocmFuZ2UoNSkpKQotICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKERBVEE1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUobG9hZGVkKSwgU2ltcGxlQ29va2llKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobG9hZGVkLmtleXMoKSksIFsia2V5Il0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkWyJrZXkiXS52YWx1ZSwgIlNldC1Db29raWU6IGtleT12YWx1ZSIpCi0KLSAgICAgICAgZm9yIChleGMsIGRhdGEpIGluIERBVEE3Lml0ZW1zKCk6Ci0gICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmxvYWRzKGRhdGEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUobG9hZGVkKSwgZXhjKQotCi0gICAgICAgIGxvYWRlZCA9IHNlbGYubG9hZHMoREFUQTgpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShsb2FkZWQpLCBFeGNlcHRpb24pCi0KLSAgICAgICAgbG9hZGVkID0gc2VsZi5sb2FkcyhEQVRBOSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGxvYWRlZCksIFVuaWNvZGVFbmNvZGVFcnJvcikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQub2JqZWN0LCAiZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQuZW5jb2RpbmcsICJhc2NpaSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLnN0YXJ0LCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lbmQsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLnJlYXNvbiwgImJhZCIpCi0KICAgICBkZWYgdGVzdF9waWNrbGVfdG9fMngoc2VsZik6CiAgICAgICAgICMgUGlja2xlIG5vbi10cml2aWFsIGRhdGEgd2l0aCBwcm90b2NvbCAyLCBleHBlY3RpbmcgdGhhdCBpdCB5aWVsZHMKICAgICAgICAgIyB0aGUgc2FtZSByZXN1bHQgYXMgUHl0aG9uIDIueCBkaWQuCiAgICAgICAgICMgTk9URTogdGhpcyB0ZXN0IGlzIGEgYml0IHRvbyBzdHJvbmcgc2luY2Ugd2UgY2FuIHByb2R1Y2UgZGlmZmVyZW50CiAgICAgICAgICMgYnl0ZWNvZGUgdGhhdCAyLnggd2lsbCBzdGlsbCB1bmRlcnN0YW5kLgogICAgICAgICBkdW1wZWQgPSBzZWxmLmR1bXBzKHJhbmdlKDUpLCAyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1bXBlZCwgREFUQTQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVtcGVkLCBEQVRBX1hSQU5HRSkKICAgICAgICAgZHVtcGVkID0gc2VsZi5kdW1wcyhzZXQoWzNdKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkdW1wZWQsIERBVEE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1bXBlZCwgREFUQV9TRVQyKQogCiAgICAgZGVmIHRlc3RfbGFyZ2VfcGlja2xlcyhzZWxmKToKICAgICAgICAgIyBUZXN0IHRoZSBjb3JyZWN0bmVzcyBvZiBpbnRlcm5hbCBidWZmZXJpbmcgcm91dGluZXMgd2hlbiBoYW5kbGluZwpAQCAtMTI1OCw0OCArMTk1NiwxNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obG9hZGVkKSwgbGVuKGRhdGEpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWQsIGRhdGEpCiAKLSAgICBkZWYgdGVzdF9lbXB0eV9ieXRlc3RyaW5nKHNlbGYpOgotICAgICAgICAjIGlzc3VlIDExMjg2Ci0gICAgICAgIGVtcHR5ID0gc2VsZi5sb2FkcyhiJ1x4ODBceDAzVVx4MDBxXHgwMC4nLCBlbmNvZGluZz0na29pOC1yJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbXB0eSwgJycpCi0KICAgICBkZWYgdGVzdF9pbnRfcGlja2xpbmdfZWZmaWNpZW5jeShzZWxmKToKICAgICAgICAgIyBUZXN0IGNvbXBhY2l0eSBvZiBpbnQgcmVwcmVzZW50YXRpb24gKHNlZSBpc3N1ZSAjMTI3NDQpCiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBzaXplcyA9IFtsZW4oc2VsZi5kdW1wcygyKipuLCBwcm90bykpIGZvciBuIGluIHJhbmdlKDcwKV0KLSAgICAgICAgICAgICMgdGhlIHNpemUgZnVuY3Rpb24gaXMgbW9ub3RvbmljCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChzaXplcyksIHNpemVzKQotICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzaXplc1stMV0sIDE0KQotCi0gICAgZGVmIGNoZWNrX25lZ2F0aXZlXzMyYl9iaW5YWFgoc2VsZiwgZHVtcGVkKToKLSAgICAgICAgaWYgc3lzLm1heHNpemUgPiAyKiozMjoKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgaXMgb25seSBtZWFuaW5nZnVsIG9uIDMyLWJpdCBidWlsZHMiKQotICAgICAgICAjIFhYWCBQdXJlIFB5dGhvbiBwaWNrbGUgcmVhZHMgbGVuZ3RocyBhcyBzaWduZWQgYW5kIHBhc3NlcwotICAgICAgICAjIHRoZW0gZGlyZWN0bHkgdG8gcmVhZCgpIChoZW5jZSB0aGUgRU9GRXJyb3IpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsIEVPRkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6Ci0gICAgICAgICAgICBzZWxmLmxvYWRzKGR1bXBlZCkKLQotICAgIGRlZiB0ZXN0X25lZ2F0aXZlXzMyYl9iaW5ieXRlcyhzZWxmKToKLSAgICAgICAgIyBPbiAzMi1iaXQgYnVpbGRzLCBhIEJJTkJZVEVTIG9mIDIqKjMxIG9yIG1vcmUgaXMgcmVmdXNlZAotICAgICAgICBzZWxmLmNoZWNrX25lZ2F0aXZlXzMyYl9iaW5YWFgoYidceDgwXHgwM0JceGZmXHhmZlx4ZmZceGZmeHl6cVx4MDAuJykKLQotICAgIGRlZiB0ZXN0X25lZ2F0aXZlXzMyYl9iaW51bmljb2RlKHNlbGYpOgotICAgICAgICAjIE9uIDMyLWJpdCBidWlsZHMsIGEgQklOVU5JQ09ERSBvZiAyKiozMSBvciBtb3JlIGlzIHJlZnVzZWQKLSAgICAgICAgc2VsZi5jaGVja19uZWdhdGl2ZV8zMmJfYmluWFhYKGInXHg4MFx4MDNYXHhmZlx4ZmZceGZmXHhmZnh5enFceDAwLicpCi0KLSAgICBkZWYgdGVzdF9uZWdhdGl2ZV9wdXQoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzEyODQ3Ci0gICAgICAgIGR1bXBlZCA9IGInVmFcbnAtMVxuLicKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb2FkcywgZHVtcGVkKQotCi0gICAgZGVmIHRlc3RfbmVnYXRpdmVfMzJiX2JpbnB1dChzZWxmKToKLSAgICAgICAgIyBJc3N1ZSAjMTI4NDcKLSAgICAgICAgaWYgc3lzLm1heHNpemUgPiAyKiozMjoKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgaXMgb25seSBtZWFuaW5nZnVsIG9uIDMyLWJpdCBidWlsZHMiKQotICAgICAgICBkdW1wZWQgPSBiJ1x4ODBceDAzWFx4MDFceDAwXHgwMFx4MDBhclx4ZmZceGZmXHhmZlx4ZmYuJwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvYWRzLCBkdW1wZWQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgcGlja2xlcyA9IFtzZWxmLmR1bXBzKDIqKm4sIHByb3RvKSBmb3IgbiBpbiByYW5nZSg3MCldCisgICAgICAgICAgICAgICAgc2l6ZXMgPSBsaXN0KG1hcChsZW4sIHBpY2tsZXMpKQorICAgICAgICAgICAgICAgICMgdGhlIHNpemUgZnVuY3Rpb24gaXMgbW9ub3RvbmljCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoc2l6ZXMpLCBzaXplcykKKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgICAgICBmb3IgcCBpbiBwaWNrbGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGNvZGVfaW5fcGlja2xlKHBpY2tsZS5MT05HLCBwKSkKIAogICAgIGRlZiBfY2hlY2tfcGlja2xpbmdfd2l0aF9vcGNvZGUoc2VsZiwgb2JqLCBvcGNvZGUsIHByb3RvKToKICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKQEAgLTEzMjQsNiArMTk5MSwyMTIgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGlja2xpbmdfd2l0aF9vcGNvZGUob2JqLCBwaWNrbGUuU0VUSVRFTVMsIHByb3RvKQogCisgICAgIyBFeGVyY2lzZSBmcmFtaW5nIChwcm90byA+PSA0KSBmb3Igc2lnbmlmaWNhbnQgd29ya2xvYWRzCisKKyAgICBGUkFNRV9TSVpFX1RBUkdFVCA9IDY0ICogMTAyNAorCisgICAgZGVmIGNoZWNrX2ZyYW1lX29wY29kZXMoc2VsZiwgcGlja2xlZCk6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgYXJndW1lbnRzIG9mIEZSQU1FIG9wY29kZXMgaW4gYSBwcm90b2NvbCA0KyBwaWNrbGUuCisgICAgICAgICIiIgorICAgICAgICBmcmFtZV9vcGNvZGVfc2l6ZSA9IDkKKyAgICAgICAgbGFzdF9hcmcgPSBsYXN0X3BvcyA9IE5vbmUKKyAgICAgICAgZm9yIG9wLCBhcmcsIHBvcyBpbiBwaWNrbGV0b29scy5nZW5vcHMocGlja2xlZCk6CisgICAgICAgICAgICBpZiBvcC5uYW1lICE9ICdGUkFNRSc6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGlmIGxhc3RfcG9zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgVGhlIHByZXZpb3VzIGZyYW1lJ3Mgc2l6ZSBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIG51bWJlcgorICAgICAgICAgICAgICAgICMgb2YgYnl0ZXMgdXAgdG8gdGhlIGN1cnJlbnQgZnJhbWUuCisgICAgICAgICAgICAgICAgZnJhbWVfc2l6ZSA9IHBvcyAtIGxhc3RfcG9zIC0gZnJhbWVfb3Bjb2RlX3NpemUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyYW1lX3NpemUsIGxhc3RfYXJnKQorICAgICAgICAgICAgbGFzdF9hcmcsIGxhc3RfcG9zID0gYXJnLCBwb3MKKyAgICAgICAgIyBUaGUgbGFzdCBmcmFtZSdzIHNpemUgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMgdXAKKyAgICAgICAgIyB0byB0aGUgcGlja2xlJ3MgZW5kLgorICAgICAgICBmcmFtZV9zaXplID0gbGVuKHBpY2tsZWQpIC0gbGFzdF9wb3MgLSBmcmFtZV9vcGNvZGVfc2l6ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZyYW1lX3NpemUsIGxhc3RfYXJnKQorCisgICAgZGVmIHRlc3RfZnJhbWluZ19tYW55X29iamVjdHMoc2VsZik6CisgICAgICAgIG9iaiA9IGxpc3QocmFuZ2UoMTAqKjUpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBwaWNrbGVkID0gc2VsZi5kdW1wcyhvYmosIHByb3RvKQorICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgdW5waWNrbGVkKQorICAgICAgICAgICAgICAgIGJ5dGVzX3Blcl9mcmFtZSA9IChsZW4ocGlja2xlZCkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF9vcGNvZGUocGlja2xlLkZSQU1FLCBwaWNrbGVkKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYnl0ZXNfcGVyX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLkZSQU1FX1NJWkVfVEFSR0VUIC8gMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChieXRlc19wZXJfZnJhbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5GUkFNRV9TSVpFX1RBUkdFVCAqIDEpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19mcmFtZV9vcGNvZGVzKHBpY2tsZWQpCisKKyAgICBkZWYgdGVzdF9mcmFtaW5nX2xhcmdlX29iamVjdHMoc2VsZik6CisgICAgICAgIE4gPSAxMDI0ICogMTAyNAorICAgICAgICBvYmogPSBbYid4JyAqIE4sIGIneScgKiBOLCBiJ3onICogTl0KKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDQsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgICAgICB1bnBpY2tsZWQgPSBzZWxmLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHVucGlja2xlZCkKKyAgICAgICAgICAgICAgICBuX2ZyYW1lcyA9IGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIHBpY2tsZWQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobl9mcmFtZXMsIGxlbihvYmopKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfZnJhbWVfb3Bjb2RlcyhwaWNrbGVkKQorCisgICAgZGVmIHRlc3Rfb3B0aW9uYWxfZnJhbWVzKHNlbGYpOgorICAgICAgICBpZiBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCA8IDQ6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBkZWYgcmVtb3ZlX2ZyYW1lcyhwaWNrbGVkLCBrZWVwX2ZyYW1lPU5vbmUpOgorICAgICAgICAgICAgIiIiUmVtb3ZlIGZyYW1lIG9wY29kZXMgZnJvbSB0aGUgZ2l2ZW4gcGlja2xlLiIiIgorICAgICAgICAgICAgZnJhbWVfc3RhcnRzID0gW10KKyAgICAgICAgICAgICMgMSBieXRlIGZvciB0aGUgb3Bjb2RlIGFuZCA4IGZvciB0aGUgYXJndW1lbnQKKyAgICAgICAgICAgIGZyYW1lX29wY29kZV9zaXplID0gOQorICAgICAgICAgICAgZm9yIG9wY29kZSwgXywgcG9zIGluIHBpY2tsZXRvb2xzLmdlbm9wcyhwaWNrbGVkKToKKyAgICAgICAgICAgICAgICBpZiBvcGNvZGUubmFtZSA9PSAnRlJBTUUnOgorICAgICAgICAgICAgICAgICAgICBmcmFtZV9zdGFydHMuYXBwZW5kKHBvcykKKworICAgICAgICAgICAgbmV3cGlja2xlID0gYnl0ZWFycmF5KCkKKyAgICAgICAgICAgIGxhc3RfZnJhbWVfZW5kID0gMAorICAgICAgICAgICAgZm9yIGksIHBvcyBpbiBlbnVtZXJhdGUoZnJhbWVfc3RhcnRzKToKKyAgICAgICAgICAgICAgICBpZiBrZWVwX2ZyYW1lIGFuZCBrZWVwX2ZyYW1lKGkpOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIG5ld3BpY2tsZSArPSBwaWNrbGVkW2xhc3RfZnJhbWVfZW5kOnBvc10KKyAgICAgICAgICAgICAgICBsYXN0X2ZyYW1lX2VuZCA9IHBvcyArIGZyYW1lX29wY29kZV9zaXplCisgICAgICAgICAgICBuZXdwaWNrbGUgKz0gcGlja2xlZFtsYXN0X2ZyYW1lX2VuZDpdCisgICAgICAgICAgICByZXR1cm4gbmV3cGlja2xlCisKKyAgICAgICAgZnJhbWVfc2l6ZSA9IHNlbGYuRlJBTUVfU0laRV9UQVJHRVQKKyAgICAgICAgbnVtX2ZyYW1lcyA9IDIwCisgICAgICAgIG9iaiA9IFtieXRlcyhbaV0pICogZnJhbWVfc2l6ZSBmb3IgaSBpbiByYW5nZShudW1fZnJhbWVzKV0KKworICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKG9iaiwgcHJvdG8pCisKKyAgICAgICAgICAgIGZyYW1lbGVzc19waWNrbGUgPSByZW1vdmVfZnJhbWVzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIGZyYW1lbGVzc19waWNrbGUpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmosIHNlbGYubG9hZHMoZnJhbWVsZXNzX3BpY2tsZSkpCisKKyAgICAgICAgICAgIHNvbWVfZnJhbWVzX3BpY2tsZSA9IHJlbW92ZV9mcmFtZXMocGlja2xlZCwgbGFtYmRhIGk6IGkgJSAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGNvdW50X29wY29kZShwaWNrbGUuRlJBTUUsIHNvbWVfZnJhbWVzX3BpY2tsZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRfb3Bjb2RlKHBpY2tsZS5GUkFNRSwgcGlja2xlZCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iaiwgc2VsZi5sb2Fkcyhzb21lX2ZyYW1lc19waWNrbGUpKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX25hbWVzKHNlbGYpOgorICAgICAgICBnbG9iYWwgTmVzdGVkCisgICAgICAgIGNsYXNzIE5lc3RlZDoKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgY2xhc3MgQjoKKyAgICAgICAgICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBvYmogaW4gW05lc3RlZC5BLCBOZXN0ZWQuQS5CLCBOZXN0ZWQuQS5CLkNdOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBvYmo9b2JqKToKKyAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG9iaiwgcHJvdG8pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG9iaiwgdW5waWNrbGVkKQorCisgICAgZGVmIHRlc3RfcHlfbWV0aG9kcyhzZWxmKToKKyAgICAgICAgZ2xvYmFsIFB5TWV0aG9kc1Rlc3QKKyAgICAgICAgY2xhc3MgUHlNZXRob2RzVGVzdDoKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBjaGVlc2UoKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImNoZWVzZSIKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIHdpbmUoY2xzKToKKyAgICAgICAgICAgICAgICBhc3NlcnQgY2xzIGlzIFB5TWV0aG9kc1Rlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gIndpbmUiCisgICAgICAgICAgICBkZWYgYmlzY3VpdHMoc2VsZik6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc2VsZiwgUHlNZXRob2RzVGVzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gImJpc2N1aXRzIgorICAgICAgICAgICAgY2xhc3MgTmVzdGVkOgorICAgICAgICAgICAgICAgICJOZXN0ZWQgY2xhc3MiCisgICAgICAgICAgICAgICAgQHN0YXRpY21ldGhvZAorICAgICAgICAgICAgICAgIGRlZiBrZXRjaHVwKCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAia2V0Y2h1cCIKKyAgICAgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgICAgICBkZWYgbWFwbGUoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IGNscyBpcyBQeU1ldGhvZHNUZXN0Lk5lc3RlZAorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIm1hcGxlIgorICAgICAgICAgICAgICAgIGRlZiBwaWUoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHNlbGYsIFB5TWV0aG9kc1Rlc3QuTmVzdGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gInBpZSIKKworICAgICAgICBweV9tZXRob2RzID0gKAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5jaGVlc2UsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0LndpbmUsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0KCkuYmlzY3VpdHMsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0Lk5lc3RlZC5rZXRjaHVwLAorICAgICAgICAgICAgUHlNZXRob2RzVGVzdC5OZXN0ZWQubWFwbGUsCisgICAgICAgICAgICBQeU1ldGhvZHNUZXN0Lk5lc3RlZCgpLnBpZQorICAgICAgICApCisgICAgICAgIHB5X3VuYm91bmRfbWV0aG9kcyA9ICgKKyAgICAgICAgICAgIChQeU1ldGhvZHNUZXN0LmJpc2N1aXRzLCBQeU1ldGhvZHNUZXN0KSwKKyAgICAgICAgICAgIChQeU1ldGhvZHNUZXN0Lk5lc3RlZC5waWUsIFB5TWV0aG9kc1Rlc3QuTmVzdGVkKQorICAgICAgICApCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSg0LCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZm9yIG1ldGhvZCBpbiBweV9tZXRob2RzOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBtZXRob2Q9bWV0aG9kKToKKyAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG1ldGhvZCwgcHJvdG8pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGhvZCgpLCB1bnBpY2tsZWQoKSkKKyAgICAgICAgICAgIGZvciBtZXRob2QsIGNscyBpbiBweV91bmJvdW5kX21ldGhvZHM6CisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90bywgbWV0aG9kPW1ldGhvZCk6CisgICAgICAgICAgICAgICAgICAgIHVucGlja2xlZCA9IHNlbGYubG9hZHMoc2VsZi5kdW1wcyhtZXRob2QsIHByb3RvKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZXRob2Qob2JqKSwgdW5waWNrbGVkKG9iaikpCisKKyAgICBkZWYgdGVzdF9jX21ldGhvZHMoc2VsZik6CisgICAgICAgIGdsb2JhbCBTdWJjbGFzcworICAgICAgICBjbGFzcyBTdWJjbGFzcyh0dXBsZSk6CisgICAgICAgICAgICBjbGFzcyBOZXN0ZWQoc3RyKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY19tZXRob2RzID0gKAorICAgICAgICAgICAgIyBib3VuZCBidWlsdC1pbiBtZXRob2QKKyAgICAgICAgICAgICgiYWJjZCIuaW5kZXgsICgiYyIsKSksCisgICAgICAgICAgICAjIHVuYm91bmQgYnVpbHQtaW4gbWV0aG9kCisgICAgICAgICAgICAoc3RyLmluZGV4LCAoImFiY2QiLCAiYyIpKSwKKyAgICAgICAgICAgICMgYm91bmQgInNsb3QiIG1ldGhvZAorICAgICAgICAgICAgKFsxLCAyLCAzXS5fX2xlbl9fLCAoKSksCisgICAgICAgICAgICAjIHVuYm91bmQgInNsb3QiIG1ldGhvZAorICAgICAgICAgICAgKGxpc3QuX19sZW5fXywgKFsxLCAyLCAzXSwpKSwKKyAgICAgICAgICAgICMgYm91bmQgImNvZXhpc3QiIG1ldGhvZAorICAgICAgICAgICAgKHsxLCAyfS5fX2NvbnRhaW5zX18sICgyLCkpLAorICAgICAgICAgICAgIyB1bmJvdW5kICJjb2V4aXN0IiBtZXRob2QKKyAgICAgICAgICAgIChzZXQuX19jb250YWluc19fLCAoezEsIDJ9LCAyKSksCisgICAgICAgICAgICAjIGJ1aWx0LWluIGNsYXNzIG1ldGhvZAorICAgICAgICAgICAgKGRpY3QuZnJvbWtleXMsICgoImEiLCAxKSwgKCJiIiwgMikpKSwKKyAgICAgICAgICAgICMgYnVpbHQtaW4gc3RhdGljIG1ldGhvZAorICAgICAgICAgICAgKGJ5dGVhcnJheS5tYWtldHJhbnMsIChiImFiYyIsIGIieHl6IikpLAorICAgICAgICAgICAgIyBzdWJjbGFzcyBtZXRob2RzCisgICAgICAgICAgICAoU3ViY2xhc3MoWzEsMiwyXSkuY291bnQsICgyLCkpLAorICAgICAgICAgICAgKFN1YmNsYXNzLmNvdW50LCAoU3ViY2xhc3MoWzEsMiwyXSksIDIpKSwKKyAgICAgICAgICAgIChTdWJjbGFzcy5OZXN0ZWQoInN3ZWV0IikuY291bnQsICgiZSIsKSksCisgICAgICAgICAgICAoU3ViY2xhc3MuTmVzdGVkLmNvdW50LCAoU3ViY2xhc3MuTmVzdGVkKCJzd2VldCIpLCAiZSIpKSwKKyAgICAgICAgKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoNCwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGZvciBtZXRob2QsIGFyZ3MgaW4gY19tZXRob2RzOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvLCBtZXRob2Q9bWV0aG9kKToKKyAgICAgICAgICAgICAgICAgICAgdW5waWNrbGVkID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKG1ldGhvZCwgcHJvdG8pKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ldGhvZCgqYXJncyksIHVucGlja2xlZCgqYXJncykpCisKKyAgICBkZWYgdGVzdF9jb21wYXRfcGlja2xlKHNlbGYpOgorICAgICAgICB0ZXN0cyA9IFsKKyAgICAgICAgICAgIChyYW5nZSgxLCA3KSwgJ19fYnVpbHRpbl9fJywgJ3hyYW5nZScpLAorICAgICAgICAgICAgKG1hcChpbnQsICcxMjMnKSwgJ2l0ZXJ0b29scycsICdpbWFwJyksCisgICAgICAgICAgICAoZnVuY3Rvb2xzLnJlZHVjZSwgJ19fYnVpbHRpbl9fJywgJ3JlZHVjZScpLAorICAgICAgICAgICAgKGRibS53aGljaGRiLCAnd2hpY2hkYicsICd3aGljaGRiJyksCisgICAgICAgICAgICAoRXhjZXB0aW9uKCksICdleGNlcHRpb25zJywgJ0V4Y2VwdGlvbicpLAorICAgICAgICAgICAgKGNvbGxlY3Rpb25zLlVzZXJEaWN0KCksICdVc2VyRGljdCcsICdJdGVyYWJsZVVzZXJEaWN0JyksCisgICAgICAgICAgICAoY29sbGVjdGlvbnMuVXNlckxpc3QoKSwgJ1VzZXJMaXN0JywgJ1VzZXJMaXN0JyksCisgICAgICAgICAgICAoY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QoKSwgJ2NvbGxlY3Rpb25zJywgJ2RlZmF1bHRkaWN0JyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIHZhbCwgbW9kLCBuYW1lIGluIHRlc3RzOgorICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDMpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHR5cGU9dHlwZSh2YWwpLCBwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKHZhbCwgcHJvdG8pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdjJXNcbiVzJyAlIChtb2QsIG5hbWUpKS5lbmNvZGUoKSwgcGlja2xlZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHNlbGYubG9hZHMocGlja2xlZCkpLCB0eXBlKHZhbCkpCisKIAogY2xhc3MgQmlnbWVtUGlja2xlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xMzM2LDggKzIyMDksOSBAQAogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgICAgICBpZiBwcm90byA8IDI6CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT3ZlcmZsb3dFcnJvcikpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKQEAgLTEzNTIsMjQgKzIyMjYsNDQgQEAKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCAzOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbOjE1XSkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIiYWJjZCIgaW4gcGlja2xlZFstMTU6XSkKLSAgICAgICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSAocGlja2xlLkJJTkJZVEVTICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiPEkiLCBsZW4oZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zdGFydCA9IHBpY2tsZWQuaW5kZXgoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWRbZGF0YV9zdGFydC1sZW4oaGVhZGVyKTpkYXRhX3N0YXJ0XSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCiAgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fNEcsIG1lbXVzZT0yLjUsIGRyeV9ydW49RmFsc2UpCiAgICAgZGVmIHRlc3RfaHVnZV9ieXRlc182NGIoc2VsZiwgc2l6ZSk6Ci0gICAgICAgIGRhdGEgPSBiImEiICogc2l6ZQorICAgICAgICBkYXRhID0gYiJhY2JkIiAqIChzaXplIC8vIDQpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CiAgICAgICAgICAgICAgICAgaWYgcHJvdG8gPCAzOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIGlmIHByb3RvID09IDM6CisgICAgICAgICAgICAgICAgICAgICAgICAjIFByb3RvY29sIDMgZG9lcyBub3Qgc3VwcG9ydCBsYXJnZSBieXRlcyBvYmplY3RzLgorICAgICAgICAgICAgICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB3ZSBkbyBub3QgY3Jhc2ggd2hlbiBwcm9jZXNzaW5nIG9uZS4KKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSAocGlja2xlLkJJTkJZVEVTOCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LnBhY2soIjxRIiwgbGVuKGRhdGEpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfc3RhcnQgPSBwaWNrbGVkLmluZGV4KGRhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkW2RhdGFfc3RhcnQtbGVuKGhlYWRlcik6ZGF0YV9zdGFydF0pCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIApAQCAtMTM4MSwyNyArMjI3NSw1MiBAQAogICAgICAgICBkYXRhID0gImFiY2QiICogKHNpemUgLy8gNCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYiJhYmNkIiBpbiBwaWNrbGVkWzoxNV0pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiImFiY2QiIGluIHBpY2tsZWRbLTE1Ol0pCi0gICAgICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBwcm90byA9PSAwOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSAocGlja2xlLkJJTlVOSUNPREUgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5wYWNrKCI8SSIsIGxlbihkYXRhKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3N0YXJ0ID0gcGlja2xlZC5pbmRleChiJ2FiY2QnKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZFtkYXRhX3N0YXJ0LWxlbihoZWFkZXIpOmRhdGFfc3RhcnRdKQorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgocGlja2xlZC5yaW5kZXgoYiJhYmNkIikgKyBsZW4oYiJhYmNkIikgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZC5pbmRleChiImFiY2QiKSksIGxlbihkYXRhKSkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBOb25lCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBkYXRhID0gTm9uZQogCi0gICAgIyBCSU5VTklDT0RFIChwcm90b2NvbHMgMSwgMiBhbmQgMykgY2Fubm90IGNhcnJ5IG1vcmUgdGhhbgotICAgICMgMioqMzIgLSAxIGJ5dGVzIG9mIHV0Zi04IGVuY29kZWQgdW5pY29kZS4KKyAgICAjIEJJTlVOSUNPREUgKHByb3RvY29scyAxLCAyIGFuZCAzKSBjYW5ub3QgY2FycnkgbW9yZSB0aGFuIDIqKjMyIC0gMSBieXRlcworICAgICMgb2YgdXRmLTggZW5jb2RlZCB1bmljb2RlLiBCSU5VTklDT0RFOCAocHJvdG9jb2wgNCkgc3VwcG9ydHMgdGhlc2UgaHVnZQorICAgICMgdW5pY29kZSBzdHJpbmdzIGhvd2V2ZXIuCiAKICAgICBAYmlnbWVtdGVzdChzaXplPV80RywgbWVtdXNlPTgsIGRyeV9ydW49RmFsc2UpCiAgICAgZGVmIHRlc3RfaHVnZV9zdHJfNjRiKHNlbGYsIHNpemUpOgotICAgICAgICBkYXRhID0gImEiICogc2l6ZQorICAgICAgICBkYXRhID0gImFiY2QiICogKHNpemUgLy8gNCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKICAgICAgICAgICAgICAgICBpZiBwcm90byA9PSAwOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyhkYXRhLCBwcm90b2NvbD1wcm90bykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgICAgIGlmIHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzKGRhdGEsIHByb3RvY29sPXByb3RvKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgcGlja2xlZCA9IHNlbGYuZHVtcHMoZGF0YSwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXIgPSAocGlja2xlLkJJTlVOSUNPREU4ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygiPFEiLCBsZW4oZGF0YSkpKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9zdGFydCA9IHBpY2tsZWQuaW5kZXgoYidhYmNkJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWRbZGF0YV9zdGFydC1sZW4oaGVhZGVyKTpkYXRhX3N0YXJ0XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKHBpY2tsZWQucmluZGV4KGIiYWJjZCIpICsgbGVuKGIiYWJjZCIpIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZWQuaW5kZXgoYiJhYmNkIikpLCBsZW4oZGF0YSkpCisgICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGVkID0gTm9uZQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIApAQCAtMTQ0NSw4ICsyMzY0LDggQEAKICAgICAgICAgcmV0dXJuIG9iamVjdC5fX3JlZHVjZV9fKHNlbGYpCiAKIGNsYXNzIFJFWF9zaXgob2JqZWN0KToKLSAgICAiIiJUaGlzIGNsYXNzIGlzIHVzZWQgdG8gY2hlY2sgdGhlIDR0aCBhcmd1bWVudCAobGlzdCBpdGVyYXRvcikgb2YgdGhlIHJlZHVjZQotICAgIHByb3RvY29sLgorICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayB0aGUgNHRoIGFyZ3VtZW50IChsaXN0IGl0ZXJhdG9yKSBvZgorICAgIHRoZSByZWR1Y2UgcHJvdG9jb2wuCiAgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGl0ZW1zPU5vbmUpOgogICAgICAgICBzZWxmLml0ZW1zID0gaXRlbXMgaWYgaXRlbXMgaXMgbm90IE5vbmUgZWxzZSBbXQpAQCAtMTQ1OCw4ICsyMzc3LDggQEAKICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZiksICgpLCBOb25lLCBpdGVyKHNlbGYuaXRlbXMpLCBOb25lCiAKIGNsYXNzIFJFWF9zZXZlbihvYmplY3QpOgotICAgICIiIlRoaXMgY2xhc3MgaXMgdXNlZCB0byBjaGVjayB0aGUgNXRoIGFyZ3VtZW50IChkaWN0IGl0ZXJhdG9yKSBvZiB0aGUgcmVkdWNlCi0gICAgcHJvdG9jb2wuCisgICAgIiIiVGhpcyBjbGFzcyBpcyB1c2VkIHRvIGNoZWNrIHRoZSA1dGggYXJndW1lbnQgKGRpY3QgaXRlcmF0b3IpIG9mCisgICAgdGhlIHJlZHVjZSBwcm90b2NvbC4KICAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGFibGU9Tm9uZSk6CiAgICAgICAgIHNlbGYudGFibGUgPSB0YWJsZSBpZiB0YWJsZSBpcyBub3QgTm9uZSBlbHNlIHt9CkBAIC0xNDk3LDEwICsyNDE2LDE2IEBACiBjbGFzcyBNeURpY3QoZGljdCk6CiAgICAgc2FtcGxlID0geyJhIjogMSwgImIiOiAyfQogCitjbGFzcyBNeVNldChzZXQpOgorICAgIHNhbXBsZSA9IHsiYSIsICJiIn0KKworY2xhc3MgTXlGcm96ZW5TZXQoZnJvemVuc2V0KToKKyAgICBzYW1wbGUgPSBmcm96ZW5zZXQoeyJhIiwgImIifSkKKwogbXljbGFzc2VzID0gW015SW50LCBNeUZsb2F0LAogICAgICAgICAgICAgIE15Q29tcGxleCwKICAgICAgICAgICAgICBNeVN0ciwgTXlVbmljb2RlLAotICAgICAgICAgICAgIE15VHVwbGUsIE15TGlzdCwgTXlEaWN0XQorICAgICAgICAgICAgIE15VHVwbGUsIE15TGlzdCwgTXlEaWN0LCBNeVNldCwgTXlGcm96ZW5TZXRdCiAKIAogY2xhc3MgU2xvdExpc3QoTXlMaXN0KToKQEAgLTE1MTAsNiArMjQzNSw4IEBACiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIsIGMpOgogICAgICAgICAjIHJhaXNlIGFuIGVycm9yLCB0byBtYWtlIHN1cmUgdGhpcyBpc24ndCBjYWxsZWQKICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJTaW1wbGVOZXdPYmouX19pbml0X18oKSBkaWRuJ3QgZXhwZWN0IHRvIGdldCBjYWxsZWQiKQorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5fX2RpY3RfXyA9PSBvdGhlci5fX2RpY3RfXwogCiBjbGFzcyBCYWRHZXRhdHRyOgogICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBrZXkpOgpAQCAtMTU0Niw3ICsyNDczLDcgQEAKIAogICAgIGRlZiB0ZXN0X2hpZ2hlc3RfcHJvdG9jb2woc2VsZik6CiAgICAgICAgICMgT2YgY291cnNlIHRoaXMgbmVlZHMgdG8gYmUgY2hhbmdlZCB3aGVuIEhJR0hFU1RfUFJPVE9DT0wgY2hhbmdlcy4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCwgNCkKIAogICAgIGRlZiB0ZXN0X2NhbGxhcGkoc2VsZik6CiAgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKQEAgLTE3MzEsMjIgKzI2NTgsMjMgQEAKIAogICAgIGRlZiBfY2hlY2tfbXVsdGlwbGVfdW5waWNrbGluZ3Moc2VsZiwgaW9jbGFzcyk6CiAgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6Ci0gICAgICAgICAgICBkYXRhMSA9IFsoeCwgc3RyKHgpKSBmb3IgeCBpbiByYW5nZSgyMDAwKV0gKyBbYiJhYmNkZSIsIGxlbl0KLSAgICAgICAgICAgIGYgPSBpb2NsYXNzKCkKLSAgICAgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZiwgcHJvdG9jb2w9cHJvdG8pCi0gICAgICAgICAgICBwaWNrbGVyLmR1bXAoZGF0YTEpCi0gICAgICAgICAgICBwaWNrbGVkID0gZi5nZXR2YWx1ZSgpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgZGF0YTEgPSBbKHgsIHN0cih4KSkgZm9yIHggaW4gcmFuZ2UoMjAwMCldICsgW2IiYWJjZGUiLCBsZW5dCisgICAgICAgICAgICAgICAgZiA9IGlvY2xhc3MoKQorICAgICAgICAgICAgICAgIHBpY2tsZXIgPSBzZWxmLnBpY2tsZXJfY2xhc3MoZiwgcHJvdG9jb2w9cHJvdG8pCisgICAgICAgICAgICAgICAgcGlja2xlci5kdW1wKGRhdGExKQorICAgICAgICAgICAgICAgIHBpY2tsZWQgPSBmLmdldHZhbHVlKCkKIAotICAgICAgICAgICAgTiA9IDUKLSAgICAgICAgICAgIGYgPSBpb2NsYXNzKHBpY2tsZWQgKiBOKQotICAgICAgICAgICAgdW5waWNrbGVyID0gc2VsZi51bnBpY2tsZXJfY2xhc3MoZikKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pOgotICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gZi50ZWxsKCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlci5sb2FkKCksIGRhdGExKQotICAgICAgICAgICAgICAgIGlmIGYuc2Vla2FibGUoKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcG9zICsgbGVuKHBpY2tsZWQpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIHVucGlja2xlci5sb2FkKQorICAgICAgICAgICAgICAgIE4gPSA1CisgICAgICAgICAgICAgICAgZiA9IGlvY2xhc3MocGlja2xlZCAqIE4pCisgICAgICAgICAgICAgICAgdW5waWNrbGVyID0gc2VsZi51bnBpY2tsZXJfY2xhc3MoZikKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShOKToKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgcG9zID0gZi50ZWxsKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZXIubG9hZCgpLCBkYXRhMSkKKyAgICAgICAgICAgICAgICAgICAgaWYgZi5zZWVrYWJsZSgpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgcG9zICsgbGVuKHBpY2tsZWQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCB1bnBpY2tsZXIubG9hZCkKIAogICAgIGRlZiB0ZXN0X211bHRpcGxlX3VucGlja2xpbmdzX3NlZWthYmxlKHNlbGYpOgogICAgICAgICBzZWxmLl9jaGVja19tdWx0aXBsZV91bnBpY2tsaW5ncyhpby5CeXRlc0lPKQpAQCAtMTg3MSw3ICsyNzk5LDcgQEAKICAgICAjIFByaW50IHNvbWUgc3R1ZmYgdGhhdCBjYW4gYmUgdXNlZCB0byByZXdyaXRlIERBVEF7MCwxLDJ9CiAgICAgZnJvbSBwaWNrbGV0b29scyBpbXBvcnQgZGlzCiAgICAgeCA9IGNyZWF0ZV9kYXRhKCkKLSAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICBmb3IgaSBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCsxKToKICAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyh4LCBpKQogICAgICAgICBwcmludCgiREFUQXswfSA9ICgiLmZvcm1hdChpKSkKICAgICAgICAgZm9yIGogaW4gcmFuZ2UoMCwgbGVuKHApLCAyMCk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weWNhY2VydC5wZW0gYi9MaWIvdGVzdC9weWNhY2VydC5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliMWYzZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FjZXJ0LnBlbQpAQCAtMCwwICsxLDc4IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgwICgweGIwOTI2NGIxZjJkYTIxZDApCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBKYW4gIDIgMTk6NDc6MDcgMjAyMyBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmU3OmRlOmU5OmUzOjBjOjlmOjAwOmI2OmExOmZkOjJiOjViOjk2OmQyOgorICAgICAgICAgICAgICAgICAgICA2ZjpjYzplMDpiZTo4NjpiOToyMDo1ZTplYzowMzo3YTo1NTphYjplYTphNDoKKyAgICAgICAgICAgICAgICAgICAgZTk6Zjk6NDk6ODU6ZDI6NjY6ZDU6ZWQ6Yzc6N2E6ZWE6NTY6OGU6MmQ6OGY6CisgICAgICAgICAgICAgICAgICAgIGU3OjQyOmUyOjYyOjI4OmE5OjlmOmQ2OjFiOjhlOmViOmI1OmI0OjljOjlmOgorICAgICAgICAgICAgICAgICAgICAxNDphYjpkZjplNjo5NDo4Yjo3NjoxZDozZTo2ZDoyNDo2MTplZDowYzpiZjoKKyAgICAgICAgICAgICAgICAgICAgMDA6OGE6NjE6MGM6ZGY6NWM6Yzg6MzY6NzM6MTY6MDA6Y2Q6NDc6YmE6NmQ6CisgICAgICAgICAgICAgICAgICAgIGE0OmE0Ojc0Ojg4OjgzOjIzOjBhOjE5OmZjOjA5OmE3OjNjOjRhOjRiOmQzOgorICAgICAgICAgICAgICAgICAgICBlNzoxZDoyZDplNDplYTo0Yzo1NDoyMTpmMzoyNjpkYjo4OTozNzoxODpkNDoKKyAgICAgICAgICAgICAgICAgICAgMDI6YmI6NDA6MzI6NWY6YTQ6ZmY6MmQ6MWM6Zjc6ZDQ6YmI6ZWM6OGU6Y2Y6CisgICAgICAgICAgICAgICAgICAgIDVjOjgyOmFjOmU2OjdjOjA4OjZjOjQ4Ojg1OjYxOjA3OjdmOjI1OmUwOjVjOgorICAgICAgICAgICAgICAgICAgICBlMDpiYzozNDo1ZjplMDpiOTowNDo0Nzo3NTpjODo0NzowYjo4ZDpiYzpkNjoKKyAgICAgICAgICAgICAgICAgICAgYzg6Njg6NWY6MzM6ODM6NjI6ZDI6MjA6NDQ6MzU6YjE6YWQ6ODE6MWE6OGE6CisgICAgICAgICAgICAgICAgICAgIGNkOmJjOjM1OmIwOjVjOjhiOjQ3OmQ2OjE4OmU5OjljOjE4Ojk3OmNjOjAxOgorICAgICAgICAgICAgICAgICAgICAzYzoyOTpjYzplODoxZTplNDplNDpjMTpiODpkZTplNzpjMjoxMToxODo4NzoKKyAgICAgICAgICAgICAgICAgICAgNWE6OTM6MzQ6ZDg6YTY6MjU6Zjc6MTQ6NzE6ZWI6ZTQ6MjE6YTI6ZDI6MGY6CisgICAgICAgICAgICAgICAgICAgIDJlOjJlOmQ0OjYyOjAwOjM1OmQzOmQ2OmVmOjVjOjYwOjRiOjRjOmE5OjE0OgorICAgICAgICAgICAgICAgICAgICBlMjpkZDoxNTo1ODo0NjozNzozMzoyNjpiNzplNzoyZTo1ZDplZDo0MjplNDoKKyAgICAgICAgICAgICAgICAgICAgYzU6NGQKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorCisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDdkOjBhOmY1OmNiOjhkOmQzOjVkOmJkOjk5OjhlOmY4OjJiOjBmOmJhOmViOmMyOmQ5OmE2OgorICAgICAgICAgMjc6NGY6MmU6N2I6MmY6MGU6NjQ6ZDg6MWM6MzU6NTA6NGU6ZWU6ZmM6OTA6Yjk6OGQ6NmQ6CisgICAgICAgICBhODpjNTpjNjowNjpiMDphZjpmMzoyZDpiZjozYjpiODo0MjowNzpkZDoxODo3ZDo2ZDo5NToKKyAgICAgICAgIDU0OjU3Ojg1OjE4OjYwOjQ3OjJmOmViOjc4OjFiOmY5OmU4OjE3OmZkOjVhOjBkOjg3OjE3OgorICAgICAgICAgMjg6YWM6NGM6NmE6ZTY6YmM6Mjk6ZjQ6ZjQ6NTU6NzA6Mjk6NDI6ZGU6ODU6ZWE6YWI6NmM6CisgICAgICAgICAyMzowNjo2NDozMDo3NTowMjo4ZTo1MzpiYzo1ZTowMTozMzozNzpjYzoxZTpjZDpiODphNDoKKyAgICAgICAgIGZkOmNhOmU0OjVmOjY1OjNiOjgzOjFjOjg2OmYxOjU1OjAyOmEwOjNhOjhmOmRiOjkxOmI3OgorICAgICAgICAgNDA6MTQ6YjQ6ZTc6OGQ6ZDI6ZWU6NzM6YmE6ZTM6ZTU6MzQ6MmQ6YmM6OTQ6NmY6NGU6MjQ6CisgICAgICAgICAwNjpmNzo1Zjo4YjowZTphNzo4ZTo2YjpkZTo1ZTo3NTpmNDozMjo5YTo1MDpiMTo0NDozMzoKKyAgICAgICAgIDlhOmQwOjA1OmUyOjc4OjgyOmZmOmRiOmRhOjhhOjYzOmViOmE5OmRkOmQxOmJmOmEwOjYxOgorICAgICAgICAgYWQ6ZTM6OWU6OGE6MjQ6NWQ6NjI6MGU6ZTc6NGM6OTE6N2Y6ZWY6ZGY6MzQ6MzY6M2I6MmY6CisgICAgICAgICA1ZDpmNTo4NDpiMjoyZjpjNDo2ZDo5Mzo5NjoxYTo2ZjozMDoyODpmMTpkYToxMjo5YTo2NDoKKyAgICAgICAgIGI0OjQwOjMzOjFkOmJkOmRlOjJiOjUzOmE4OmVhOmJlOmQ2OmJjOjRlOjk2OmY1OjQ0OmZiOgorICAgICAgICAgMzI6MTg6YWU6ZDU6MWY6ZjY6Njk6YWY6YjY6NGU6N2I6MWQ6NTg6ZWM6M2I6YTk6NTM6YTM6CisgICAgICAgICA1ZTo1ODpjODo5ZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEYlRDQ0FsV2dBd0lCQWdJSkFMQ1NaTEh5MmlIUU1BMEdDU3FHU0liM0RRRUJCUVVBTUUweEN6QUpCZ05WCitCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZ1JtOTFibVJoZEdsdmJpQkRRVEVXCitNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pBZUZ3MHhNekF4TURReE9UUTNNRGRhRncweU16QXhNREl4CitPVFEzTURkYU1FMHhDekFKQmdOVkJBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnCitSbTkxYm1SaGRHbHZiaUJEUVRFV01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakNDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU9mZTZlTU1ud0Myb2Ywclc1YlNiOHpndm9hNUlGN3NBM3BWCitxK3FrNmZsSmhkSm0xZTNIZXVwV2ppMlA1MExpWWlpcG45WWJqdXUxdEp5ZkZLdmY1cFNMZGgwK2JTUmg3UXkvCitBSXBoRE45Y3lEWnpGZ0ROUjdwdHBLUjBpSU1qQ2huOENhYzhTa3ZUNXgwdDVPcE1WQ0h6SnR1Sk54alVBcnRBCitNbCtrL3kwYzk5Uzc3STdQWElLczVud0liRWlGWVFkL0plQmM0THcwWCtDNUJFZDF5RWNMamJ6V3lHaGZNNE5pCiswaUJFTmJHdGdScUt6Yncxc0Z5TFI5WVk2WndZbDh3QlBDbk02QjdrNU1HNDN1ZkNFUmlIV3BNMDJLWWw5eFJ4Cis2K1Fob3RJUExpN1VZZ0ExMDlidlhHQkxUS2tVNHQwVldFWTNNeWEzNXk1ZDdVTGt4VTBDQXdFQUFhTlFNRTR3CitIUVlEVlIwT0JCWUVGTHpkWXRsMjJodlNWR3ZQNEdhYkhoNTdWZ3dMTUI4R0ExVWRJd1FZTUJhQUZMemRZdGwyCisyaHZTVkd2UDRHYWJIaDU3Vmd3TE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCCitBSDBLOWN1TjAxMjltWTc0S3crNjY4TFpwaWRQTG5zdkRtVFlIRFZRVHU3OGtMbU5iYWpGeGdhd3IvTXR2enU0CitRZ2ZkR0gxdGxWUlhoUmhnUnkvcmVCdjU2QmY5V2cySEZ5aXNUR3JtdkNuMDlGVndLVUxlaGVxcmJDTUdaREIxCitBbzVUdkY0Qk16Zk1IczI0cFAzSzVGOWxPNE1jaHZGVkFxQTZqOXVSdDBBVXRPZU4wdTV6dXVQbE5DMjhsRzlPCitKQWIzWDRzT3A0NXIzbDUxOURLYVVMRkVNNXJRQmVKNGd2L2Iyb3BqNjZuZDBiK2dZYTNqbm9va1hXSU81MHlSCitmKy9mTkRZN0wxMzFoTEl2eEcyVGxocHZNQ2p4MmhLYVpMUkFNeDI5M2l0VHFPcSsxcnhPbHZWRSt6SVlydFVmCis5bW12dGs1N0hWanNPNmxUbzE1WXlKND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3B5Y2FrZXkucGVtIGIvTGliL3Rlc3QvcHljYWtleS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM2ZWZmZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3B5Y2FrZXkucGVtCkBAIC0wLDAgKzEsMjggQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJRXZnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2d3Z2dTa0FnRUFBb0lCQVFEbjN1bmpESjhBdHFIOQorSzF1VzBtL000TDZHdVNCZTdBTjZWYXZxcE9uNVNZWFNadFh0eDNycVZvNHRqK2RDNG1Jb3FaL1dHNDdydGJTYworbnhTcjMrYVVpM1lkUG0wa1llME12d0NLWVF6ZlhNZzJjeFlBelVlNmJhU2tkSWlESXdvWi9BbW5QRXBMMCtjZAorTGVUcVRGUWg4eWJiaVRjWTFBSzdRREpmcFA4dEhQZlV1K3lPejF5Q3JPWjhDR3hJaFdFSGZ5WGdYT0M4TkYvZwordVFSSGRjaEhDNDI4MXNob1h6T0RZdElnUkRXeHJZRWFpczI4TmJCY2kwZldHT21jR0pmTUFUd3B6T2dlNU9UQgordU43bndoRVloMXFUTk5pbUpmY1VjZXZrSWFMU0R5NHUxR0lBTmRQVzcxeGdTMHlwRk9MZEZWaEdOek1tdCtjdQorWGUxQzVNVk5BZ01CQUFFQ2dnRUJBSlBNN1F1VXJQbjRjTE4vWXNkMTVsd1RXbjlvSERGRmdrWUZ2Q3M2NmdYRQoranUvNkt4MkJqV0U0d1RKYnkwOUFITS9NcUIwRHZndVQ3TWYxUTJqM3RQUTFIWm93ZzhPd1JEbGV1d3A2S0lscworakJiaEwwSmRsLzVIQzY3a3RXdlo5d052Ty93RkcxclFmVDZGVmFqZjlMVWJXRWFTWmJPRzJTTGhIZnNIb3J6dQoreGpUSmFJM2JRLzArNzlCMWV4d2s1cnV3aHpGUmQvWHBZOGhsczdEL1JmUEl1SERsQmdoa1czTjU5S0ZXcmY1aAorNmJORWgyVEhtMCtJeUdjR3FzMEZEK1FDT1h5dnNqd1NVc3dxcnIyY3RMUkVPZURjZDVSZVVqU3hZZ2pjSlJybQorSjdjZUlZLyt1d0RKeHcvT2xubUJ2RjZwUU1rS3dZVzJnRnp0dStnMnQ0VUNnWUVBLzl5bzAxRXh6NGNyeFhzeQordEFsbkRKTSsrblpjbTA3cnRGalRLSFVmS1kvY0NnTlRhOHVkTTBzdm5md2xpZC9kcGdMc0kzOGd4MDRISEMxaQorRVo0YWN6K1RvSVdlZEx4TTBucTczLy94ZVJXRWF6T3ZDejFtTVRaYU1sZGFoVFdBeXpOOHFWSzJCLzYyNVl5NAord05ZV3l3ZUJCd0VCOE16YUNzNzNzcGtzWE9zQ2dZRUE1Lzd3dmhpb2ZZR0ZBZk11QU5lSkl3REwyT3RCbm9PdgorbVZOZkNtaTNHQzM4Znp3eWk1WnBza1dEaVMyd29KK0xRZnM5UXU0RWNaYlVGTGQ3Z2JlT3ZiNWdtRlV0WW9wZQorTGl0VVVLdW5JUjE4TWtRK21RREJwUVBRUGhrNFFKUDVyZUNiV2tyZlR1N2I1by9pUzQxczZmQlRGbXV6aExjVAorQzcxdkZkQ3llS2NDZ1lBaUNDcVllT3RFTERtQk9lTERtYUNRUnFHUTFOOTZkT1BiQ0JtRi94WVhCQ0NEWUcvZgorSGFVYUpuejk2WVRnc3RzYmNyWVAvcC9RZ3F0bGJ3L2xRZjlJcHdNdXpiY0cxZWp0OGc4OU95RFdOeXQyeXRnVQoraWFVbkZKQ29zMy9CeWgwSWFoL0JzZE91ZW8yL09KbDJaTU9CVzgwb3JsU2d2ODZjczJ5MDM3VEw0d0tCZ1FEbQorT095VytNbGJvd2huSXZmb0Jmd2xMRWtlZm5lajRuS0Q2V1JMWkJjdWU1UXlmMzU1WDA2TWhzYzlmb1hsSCs2RworRDloL2Jzd2lITmRocDZOODJyZGdQR2lIUXgvQ3hpVW9FLytiL252Z05PNW13NnFMRTJFWGJHMWU4cEFNSmN5RQorYkh3K1lrYXdnZ0RmRUxJMDM2ZlJqNWdraThTZVV6OG5TMW5OZ0VsYnlRS0JnQ1JEWDlKaCtNd1NMdTRRQldkdAorL2ZpK2x2M0s2a3VuL2ZJN0VPVjF2Q1Yvajg3MXRJQ3U3cHU1QnJPTHhBSHFvVmZVOUFVWDI5OS8yS2pDYjVwdgora2pvZ2lVSzZxV0NXQmxmdXFETldHQ29VR3Qxcmh6blV2YTBuTmpTTXk1cmluQmhoanBST1pDMnB3NDhsT2x1UAorVXV2WHNhUHBoN0dUcVB1eTRLYWIxMllDCistLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9weWRvY19tb2QucHkgYi9MaWIvdGVzdC9weWRvY19tb2QucHkKaW5kZXggZjg2YjVjNi4uY2RhMWM5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvcHlkb2NfbW9kLnB5CisrKyBiL0xpYi90ZXN0L3B5ZG9jX21vZC5weQpAQCAtMTUsNiArMTUsMTYgQEAKICAgICBOT19NRUFOSU5HID0gImVnZ3MiCiAgICAgcGFzcwogCitjbGFzcyBDKG9iamVjdCk6CisgICAgZGVmIHNheV9ubyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJubyIKKyAgICBkZWYgZ2V0X2Fuc3dlcihzZWxmKToKKyAgICAgICAgIiIiIFJldHVybiBzYXlfbm8oKSAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuc2F5X25vKCkKKyAgICBkZWYgaXNfaXRfdHJ1ZShzZWxmKToKKyAgICAgICAgIiIiIFJldHVybiBzZWxmLmdldF9hbnN3ZXIoKSAiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2Fuc3dlcigpCisKIGRlZiBkb2NfZnVuYygpOgogICAgICIiIgogICAgIFRoaXMgZnVuY3Rpb24gc29sdmVzIGFsbCBvZiB0aGUgd29ybGQncyBwcm9ibGVtczoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3B5c3RvbmUucHkgYi9MaWIvdGVzdC9weXN0b25lLnB5CmluZGV4IGQ3ZjFlYzkuLjU5ZGQ5OWIgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3B5c3RvbmUucHkKKysrIGIvTGliL3Rlc3QvcHlzdG9uZS5weQpAQCAtMyw3ICszLDcgQEAKICIiIgogIlBZU1RPTkUiIEJlbmNobWFyayBQcm9ncmFtCiAKLVZlcnNpb246ICAgICAgICBQeXRob24vMS4xIChjb3JyZXNwb25kcyB0byBDLzEuMSBwbHVzIDIgUHlzdG9uZSBmaXhlcykKK1ZlcnNpb246ICAgICAgICBQeXRob24vMS4yIChjb3JyZXNwb25kcyB0byBDLzEuMSBwbHVzIDMgUHlzdG9uZSBmaXhlcykKIAogQXV0aG9yOiAgICAgICAgIFJlaW5ob2xkIFAuIFdlaWNrZXIsICBDQUNNIFZvbCAyNywgTm8gMTAsIDEwLzg0IHBnLiAxMDEzLgogCkBAIC0zMCwxMyArMzAsMjAgQEAKICAgICAgICAgICAgICAgICBwZXJjZW50IGZhc3RlciB0aGFuIHZlcnNpb24gMS4wLCBzbyBiZW5jaG1hcmsgZmlndXJlcwogICAgICAgICAgICAgICAgIG9mIGRpZmZlcmVudCB2ZXJzaW9ucyBjYW4ndCBiZSBjb21wYXJlZCBkaXJlY3RseS4KIAorICAgICAgICAgICAgICAgIFZlcnNpb24gMS4yIGNoYW5nZXMgdGhlIGRpdmlzaW9uIHRvIGZsb29yIGRpdmlzaW9uLgorCisgICAgICAgICAgICAgICAgVW5kZXIgUHl0aG9uIDMgdmVyc2lvbiAxLjEgd291bGQgdXNlIHRoZSBub3JtYWwgZGl2aXNpb24KKyAgICAgICAgICAgICAgICBvcGVyYXRvciwgcmVzdWx0aW5nIGluIHNvbWUgb2YgdGhlIG9wZXJhdGlvbnMgbWlzdGFrZW5seQorICAgICAgICAgICAgICAgIHlpZWxkaW5nIGZsb2F0cy4gVmVyc2lvbiAxLjIgaW5zdGVhZCB1c2VzIGZsb29yIGRpdmlzaW9uCisgICAgICAgICAgICAgICAgbWFraW5nIHRoZSBiZW5jaG1hcmsgYW4gaW50ZWdlciBiZW5jaG1hcmsgYWdhaW4uCisKICIiIgogCiBMT09QUyA9IDUwMDAwCiAKIGZyb20gdGltZSBpbXBvcnQgY2xvY2sKIAotX192ZXJzaW9uX18gPSAiMS4xIgorX192ZXJzaW9uX18gPSAiMS4yIgogCiBbSWRlbnQxLCBJZGVudDIsIElkZW50MywgSWRlbnQ0LCBJZGVudDVdID0gcmFuZ2UoMSwgNikKIApAQCAtMTIzLDcgKzEzMCw3IEBACiAgICAgICAgICAgICAgICAgRW51bUxvYyA9IFByb2M2KElkZW50MSkKICAgICAgICAgICAgIENoYXJJbmRleCA9IGNocihvcmQoQ2hhckluZGV4KSsxKQogICAgICAgICBJbnRMb2MzID0gSW50TG9jMiAqIEludExvYzEKLSAgICAgICAgSW50TG9jMiA9IEludExvYzMgLyBJbnRMb2MxCisgICAgICAgIEludExvYzIgPSBJbnRMb2MzIC8vIEludExvYzEKICAgICAgICAgSW50TG9jMiA9IDcgKiAoSW50TG9jMyAtIEludExvYzIpIC0gSW50TG9jMQogICAgICAgICBJbnRMb2MxID0gUHJvYzIoSW50TG9jMSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvcmVfdGVzdHMucHkgYi9MaWIvdGVzdC9yZV90ZXN0cy5weQppbmRleCA1ZDE2ZTNkLi43ZjgwNzVlIDEwMDc1NQotLS0gYS9MaWIvdGVzdC9yZV90ZXN0cy5weQorKysgYi9MaWIvdGVzdC9yZV90ZXN0cy5weQpAQCAtODYsNyArODYsNyBAQAogICAgIChyJ1xhW1xiXVxmXG5cclx0XHYnLCAnXGFcYlxmXG5cclx0XHYnLCBTVUNDRUVELCAnZm91bmQnLCAnXGFcYlxmXG5cclx0XHYnKSwKICAgICAocidbXGFdW1xiXVtcZl1bXG5dW1xyXVtcdF1bXHZdJywgJ1xhXGJcZlxuXHJcdFx2JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ1xhXGJcZlxuXHJcdFx2JyksCiAgICAgIyBOT1RFOiBub3QgYW4gZXJyb3IgdW5kZXIgUENSRS9QUkU6Ci0gICAgIyAocidcdScsICcnLCBTWU5UQVhfRVJST1IpLCAgICAjIEEgUGVybCBlc2NhcGUKKyAgICAocidcdScsICcnLCBTWU5UQVhfRVJST1IpLCAgICAjIEEgUGVybCBlc2NhcGUKICAgICAocidcY1xlXGdcaFxpXGpca1xtXG9ccFxxXHlceicsICdjZWdoaWprbW9wcXl6JywgU1VDQ0VFRCwgJ2ZvdW5kJywgJ2NlZ2hpamttb3BxeXonKSwKICAgICAocidceGZmJywgJ1wzNzcnLCBTVUNDRUVELCAnZm91bmQnLCBjaHIoMjU1KSksCiAgICAgIyBuZXcgXHggc2VtYW50aWNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9yZWdydGVzdC5weSBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CmluZGV4IGFlNjJjNmUuLmViZGNkYWQgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CkBAIC0xLDExICsxLDE4IEBACiAjISAvdXNyL2Jpbi9lbnYgcHl0aG9uMwogCiAiIiIKLVVzYWdlOgorU2NyaXB0IHRvIHJ1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAorUnVuIHRoaXMgc2NyaXB0IHdpdGggLWggb3IgLS1oZWxwIGZvciBkb2N1bWVudGF0aW9uLgorIiIiCisKK1VTQUdFID0gIiIiXAogcHl0aG9uIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIFt0ZXN0X25hbWUyIC4uLl1dCiBweXRob24gcGF0aC90by9MaWIvdGVzdC9yZWdydGVzdC5weSBbb3B0aW9uc10gW3Rlc3RfbmFtZTEgW3Rlc3RfbmFtZTIgLi4uXV0KKyIiIgogCitERVNDUklQVElPTiA9ICIiIlwKK1J1biBQeXRob24gcmVncmVzc2lvbiB0ZXN0cy4KIAogSWYgbm8gYXJndW1lbnRzIG9yIG9wdGlvbnMgYXJlIHByb3ZpZGVkLCBmaW5kcyBhbGwgZmlsZXMgbWF0Y2hpbmcKIHRoZSBwYXR0ZXJuICJ0ZXN0XyoiIGluIHRoZSBMaWIvdGVzdCBzdWJkaXJlY3RvcnkgYW5kIHJ1bnMKQEAgLTE1LDY1ICsyMiwxMiBAQAogY29tbWFuZCBsaW5lOgogCiBweXRob24gLUUgLVdkIC1tIHRlc3QgW29wdGlvbnNdIFt0ZXN0X25hbWUxIC4uLl0KKyIiIgogCitFUElMT0cgPSAiIiJcCitBZGRpdGlvbmFsIG9wdGlvbiBkZXRhaWxzOgogCi1PcHRpb25zOgotCi0taC8tLWhlbHAgICAgICAgLS0gcHJpbnQgdGhpcyB0ZXh0IGFuZCBleGl0Ci0tLXRpbWVvdXQgVElNRU9VVAotICAgICAgICAgICAgICAgIC0tIGR1bXAgdGhlIHRyYWNlYmFjayBhbmQgZXhpdCBpZiBhIHRlc3QgdGFrZXMgbW9yZQotICAgICAgICAgICAgICAgICAgIHRoYW4gVElNRU9VVCBzZWNvbmRzOyBkaXNhYmxlZCBpZiBUSU1FT1VUIGlzIG5lZ2F0aXZlCi0gICAgICAgICAgICAgICAgICAgb3IgZXF1YWxzIHRvIHplcm8KLS0td2FpdCAgICAgICAgICAtLSB3YWl0IGZvciB1c2VyIGlucHV0LCBlLmcuLCBhbGxvdyBhIGRlYnVnZ2VyIHRvIGJlIGF0dGFjaGVkCi0KLVZlcmJvc2l0eQotCi0tdi8tLXZlcmJvc2UgICAgLS0gcnVuIHRlc3RzIGluIHZlcmJvc2UgbW9kZSB3aXRoIG91dHB1dCB0byBzdGRvdXQKLS13Ly0tdmVyYm9zZTIgICAtLSByZS1ydW4gZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZQotLVcvLS12ZXJib3NlMyAgIC0tIGRpc3BsYXkgdGVzdCBvdXRwdXQgb24gZmFpbHVyZQotLWQvLS1kZWJ1ZyAgICAgIC0tIHByaW50IHRyYWNlYmFjayBmb3IgZmFpbGVkIHRlc3RzCi0tcS8tLXF1aWV0ICAgICAgLS0gbm8gb3V0cHV0IHVubGVzcyBvbmUgb3IgbW9yZSB0ZXN0cyBmYWlsCi0tby8tLXNsb3cgICAgICAgLS0gcHJpbnQgdGhlIHNsb3dlc3QgMTAgdGVzdHMKLSAgIC0taGVhZGVyICAgICAtLSBwcmludCBoZWFkZXIgd2l0aCBpbnRlcnByZXRlciBpbmZvCi0KLVNlbGVjdGluZyB0ZXN0cwotCi0tci8tLXJhbmRvbWl6ZSAgLS0gcmFuZG9taXplIHRlc3QgZXhlY3V0aW9uIG9yZGVyIChzZWUgYmVsb3cpCi0gICAtLXJhbmRzZWVkICAgLS0gcGFzcyBhIHJhbmRvbSBzZWVkIHRvIHJlcHJvZHVjZSBhIHByZXZpb3VzIHJhbmRvbSBydW4KLS1mLy0tZnJvbWZpbGUgICAtLSByZWFkIG5hbWVzIG9mIHRlc3RzIHRvIHJ1biBmcm9tIGEgZmlsZSAoc2VlIGJlbG93KQotLXgvLS1leGNsdWRlICAgIC0tIGFyZ3VtZW50cyBhcmUgdGVzdHMgdG8gKmV4Y2x1ZGUqCi0tcy8tLXNpbmdsZSAgICAgLS0gc2luZ2xlIHN0ZXAgdGhyb3VnaCBhIHNldCBvZiB0ZXN0cyAoc2VlIGJlbG93KQotLW0vLS1tYXRjaCBQQVQgIC0tIG1hdGNoIHRlc3QgY2FzZXMgYW5kIG1ldGhvZHMgd2l0aCBnbG9iIHBhdHRlcm4gUEFUCi0tRy8tLWZhaWxmYXN0ICAgLS0gZmFpbCBhcyBzb29uIGFzIGEgdGVzdCBmYWlscyAob25seSB3aXRoIC12IG9yIC1XKQotLXUvLS11c2UgUkVTMSxSRVMyLC4uLgotICAgICAgICAgICAgICAgIC0tIHNwZWNpZnkgd2hpY2ggc3BlY2lhbCByZXNvdXJjZSBpbnRlbnNpdmUgdGVzdHMgdG8gcnVuCi0tTS8tLW1lbWxpbWl0IExJTUlUCi0gICAgICAgICAgICAgICAgLS0gcnVuIHZlcnkgbGFyZ2UgbWVtb3J5LWNvbnN1bWluZyB0ZXN0cwotICAgLS10ZXN0ZGlyIERJUgotICAgICAgICAgICAgICAgIC0tIGV4ZWN1dGUgdGVzdCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeSAoaW5zdGVhZAotICAgICAgICAgICAgICAgICAgIG9mIHRoZSBQeXRob24gc3RkbGliIHRlc3Qgc3VpdGUpCi0KLVNwZWNpYWwgcnVucwotCi0tbC8tLWZpbmRsZWFrcyAgLS0gaWYgR0MgaXMgYXZhaWxhYmxlIGRldGVjdCB0ZXN0cyB0aGF0IGxlYWsgbWVtb3J5Ci0tTC8tLXJ1bmxlYWtzICAgLS0gcnVuIHRoZSBsZWFrcygxKSBjb21tYW5kIGp1c3QgYmVmb3JlIGV4aXQKLS1SLy0taHVudHJsZWFrcyBSVU5DT1VOVFMKLSAgICAgICAgICAgICAgICAtLSBzZWFyY2ggZm9yIHJlZmVyZW5jZSBsZWFrcyAobmVlZHMgZGVidWcgYnVpbGQsIHYuIHNsb3cpCi0tai8tLW11bHRpcHJvY2VzcyBQUk9DRVNTRVMKLSAgICAgICAgICAgICAgICAtLSBydW4gUFJPQ0VTU0VTIHByb2Nlc3NlcyBhdCBvbmNlCi0tVC8tLWNvdmVyYWdlICAgLS0gdHVybiBvbiBjb2RlIGNvdmVyYWdlIHRyYWNpbmcgdXNpbmcgdGhlIHRyYWNlIG1vZHVsZQotLUQvLS1jb3ZlcmRpciBESVJFQ1RPUlkKLSAgICAgICAgICAgICAgICAtLSBEaXJlY3Rvcnkgd2hlcmUgY292ZXJhZ2UgZmlsZXMgYXJlIHB1dAotLU4vLS1ub2NvdmVyZGlyIC0tIFB1dCBjb3ZlcmFnZSBmaWxlcyBhbG9uZ3NpZGUgbW9kdWxlcwotLXQvLS10aHJlc2hvbGQgVEhSRVNIT0xECi0gICAgICAgICAgICAgICAgLS0gY2FsbCBnYy5zZXRfdGhyZXNob2xkKFRIUkVTSE9MRCkKLS1uLy0tbm93aW5kb3dzICAtLSBzdXBwcmVzcyBlcnJvciBtZXNzYWdlIGJveGVzIG9uIFdpbmRvd3MKLS1GLy0tZm9yZXZlciAgICAtLSBydW4gdGhlIHNwZWNpZmllZCB0ZXN0cyBpbiBhIGxvb3AsIHVudGlsIGFuIGVycm9yIGhhcHBlbnMKLQotCi1BZGRpdGlvbmFsIE9wdGlvbiBEZXRhaWxzOgotCi0tciByYW5kb21pemVzIHRlc3QgZXhlY3V0aW9uIG9yZGVyLiBZb3UgY2FuIHVzZSAtLXJhbmRzZWVkPWludCB0byBwcm92aWRlIGEKKy1yIHJhbmRvbWl6ZXMgdGVzdCBleGVjdXRpb24gb3JkZXIuIFlvdSBjYW4gdXNlIC0tcmFuZHNlZWQ9aW50IHRvIHByb3ZpZGUgYW4KIGludCBzZWVkIHZhbHVlIGZvciB0aGUgcmFuZG9taXplcjsgdGhpcyBpcyB1c2VmdWwgZm9yIHJlcHJvZHVjaW5nIHRyb3VibGVzb21lCiB0ZXN0IG9yZGVycy4KIApAQCAtMTY4LDExICsxMjIsMTIgQEAKICMgV2UgaW1wb3J0IGltcG9ydGxpYiAqQVNBUCogaW4gb3JkZXIgdG8gdGVzdCAjMTUzODYKIGltcG9ydCBpbXBvcnRsaWIKIAoraW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBmYXVsdGhhbmRsZXIKLWltcG9ydCBnZXRvcHQKIGltcG9ydCBpbwogaW1wb3J0IGpzb24KK2ltcG9ydCBsb2NhbGUKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgb3MKIGltcG9ydCBwbGF0Zm9ybQpAQCAtMTk0LDcgKzE0OSw3IEBACiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgdGhyZWFkaW5nID0gTm9uZQogdHJ5OgotICAgIGltcG9ydCBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcworICAgIGltcG9ydCBfbXVsdGlwcm9jZXNzaW5nLCBtdWx0aXByb2Nlc3NpbmcucHJvY2VzcwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIG11bHRpcHJvY2Vzc2luZyA9IE5vbmUKIApAQCAtMjQ2LDIwICsyMDEsMjYyIEBACiBSRVNPVVJDRV9OQU1FUyA9ICgnYXVkaW8nLCAnY3Vyc2VzJywgJ2xhcmdlZmlsZScsICduZXR3b3JrJywKICAgICAgICAgICAgICAgICAgICdkZWNpbWFsJywgJ2NwdScsICdzdWJwcm9jZXNzJywgJ3VybGZldGNoJywgJ2d1aScpCiAKLVRFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgodGVtcGZpbGUuZ2V0dGVtcGRpcigpKQorIyBXaGVuIHRlc3RzIGFyZSBydW4gZnJvbSB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeSwgaXQgaXMgYmVzdCBwcmFjdGljZQorIyB0byBrZWVwIHRoZSB0ZXN0IGZpbGVzIGluIGEgc3ViZm9sZGVyLiAgVGhpcyBlYXNlcyB0aGUgY2xlYW51cCBvZiBsZWZ0b3ZlcgorIyBmaWxlcyB1c2luZyB0aGUgIm1ha2UgZGlzdGNsZWFuIiBjb21tYW5kLgoraWYgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgorICAgIFRFTVBESVIgPSBvcy5wYXRoLmpvaW4oc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKSwgJ2J1aWxkJykKK2Vsc2U6CisgICAgVEVNUERJUiA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQorVEVNUERJUiA9IG9zLnBhdGguYWJzcGF0aChURU1QRElSKQogCi1kZWYgdXNhZ2UobXNnKToKLSAgICBwcmludChtc2csIGZpbGU9c3lzLnN0ZGVycikKLSAgICBwcmludCgiVXNlIC0taGVscCBmb3IgdXNhZ2UiLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgc3lzLmV4aXQoMikKK2NsYXNzIF9BcmdQYXJzZXIoYXJncGFyc2UuQXJndW1lbnRQYXJzZXIpOgogCisgICAgZGVmIGVycm9yKHNlbGYsIG1lc3NhZ2UpOgorICAgICAgICBzdXBlcigpLmVycm9yKG1lc3NhZ2UgKyAiXG5QYXNzIC1oIG9yIC0taGVscCBmb3IgY29tcGxldGUgaGVscC4iKQogCi1kZWYgbWFpbih0ZXN0cz1Ob25lLCB0ZXN0ZGlyPU5vbmUsIHZlcmJvc2U9MCwgcXVpZXQ9RmFsc2UsCitkZWYgX2NyZWF0ZV9wYXJzZXIoKToKKyAgICAjIFNldCBwcm9nIHRvIHByZXZlbnQgdGhlIHVuaW5mb3JtYXRpdmUgIl9fbWFpbl9fLnB5IiBmcm9tIGRpc3BsYXlpbmcgaW4KKyAgICAjIGVycm9yIG1lc3NhZ2VzIHdoZW4gdXNpbmcgInB5dGhvbiAtbSB0ZXN0IC4uLiIuCisgICAgcGFyc2VyID0gX0FyZ1BhcnNlcihwcm9nPSdyZWdydGVzdC5weScsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZT1VU0FHRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPURFU0NSSVBUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgZXBpbG9nPUVQSUxPRywKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9oZWxwPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyX2NsYXNzPWFyZ3BhcnNlLlJhd0Rlc2NyaXB0aW9uSGVscEZvcm1hdHRlcikKKworICAgICMgQXJndW1lbnRzIHdpdGggdGhpcyBjbGF1c2UgYWRkZWQgdG8gaXRzIGhlbHAgYXJlIGRlc2NyaWJlZCBmdXJ0aGVyIGluCisgICAgIyB0aGUgZXBpbG9nJ3MgIkFkZGl0aW9uYWwgb3B0aW9uIGRldGFpbHMiIHNlY3Rpb24uCisgICAgbW9yZV9kZXRhaWxzID0gJyAgU2VlIHRoZSBzZWN0aW9uIGF0IGJvdHRvbSBmb3IgbW9yZSBkZXRhaWxzLicKKworICAgIGdyb3VwID0gcGFyc2VyLmFkZF9hcmd1bWVudF9ncm91cCgnR2VuZXJhbCBvcHRpb25zJykKKyAgICAjIFdlIGFkZCBoZWxwIGV4cGxpY2l0bHkgdG8gY29udHJvbCB3aGF0IGFyZ3VtZW50IGdyb3VwIGl0IHJlbmRlcnMgdW5kZXIuCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctaCcsICctLWhlbHAnLCBhY3Rpb249J2hlbHAnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0tdGltZW91dCcsIG1ldGF2YXI9J1RJTUVPVVQnLCB0eXBlPWZsb2F0LAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZHVtcCB0aGUgdHJhY2ViYWNrIGFuZCBleGl0IGlmIGEgdGVzdCB0YWtlcyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb3JlIHRoYW4gVElNRU9VVCBzZWNvbmRzOyBkaXNhYmxlZCBpZiBUSU1FT1VUICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzIG5lZ2F0aXZlIG9yIGVxdWFscyB0byB6ZXJvJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0td2FpdCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3dhaXQgZm9yIHVzZXIgaW5wdXQsIGUuZy4sIGFsbG93IGEgZGVidWdnZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBiZSBhdHRhY2hlZCcpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXNsYXZlYXJncycsIG1ldGF2YXI9J0FSR1MnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVMnLCAnLS1zdGFydCcsIG1ldGF2YXI9J1NUQVJUJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ndGhlIG5hbWUgb2YgdGhlIHRlc3QgYXQgd2hpY2ggdG8gc3RhcnQuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorCisgICAgZ3JvdXAgPSBwYXJzZXIuYWRkX2FyZ3VtZW50X2dyb3VwKCdWZXJib3NpdHknKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJib3NlJywgYWN0aW9uPSdjb3VudCcsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3J1biB0ZXN0cyBpbiB2ZXJib3NlIG1vZGUgd2l0aCBvdXRwdXQgdG8gc3Rkb3V0JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy13JywgJy0tdmVyYm9zZTInLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdyZS1ydW4gZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctVycsICctLXZlcmJvc2UzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZGlzcGxheSB0ZXN0IG91dHB1dCBvbiBmYWlsdXJlJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1xJywgJy0tcXVpZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdubyBvdXRwdXQgdW5sZXNzIG9uZSBvciBtb3JlIHRlc3RzIGZhaWwnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLW8nLCAnLS1zbG93JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVzdD0ncHJpbnRfc2xvdycsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3ByaW50IHRoZSBzbG93ZXN0IDEwIHRlc3RzJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy0taGVhZGVyJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncHJpbnQgaGVhZGVyIHdpdGggaW50ZXJwcmV0ZXIgaW5mbycpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ1NlbGVjdGluZyB0ZXN0cycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctcicsICctLXJhbmRvbWl6ZScsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3JhbmRvbWl6ZSB0ZXN0IGV4ZWN1dGlvbiBvcmRlci4nICsgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLS1yYW5kc2VlZCcsIG1ldGF2YXI9J1NFRUQnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdyYW5kb21fc2VlZCcsIHR5cGU9aW50LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdwYXNzIGEgcmFuZG9tIHNlZWQgdG8gcmVwcm9kdWNlIGEgcHJldmlvdXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyYW5kb20gcnVuJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1mJywgJy0tZnJvbWZpbGUnLCBtZXRhdmFyPSdGSUxFJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncmVhZCBuYW1lcyBvZiB0ZXN0cyB0byBydW4gZnJvbSBhIGZpbGUuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXgnLCAnLS1leGNsdWRlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYXJndW1lbnRzIGFyZSB0ZXN0cyB0byAqZXhjbHVkZSonKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLXMnLCAnLS1zaW5nbGUnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzaW5nbGUgc3RlcCB0aHJvdWdoIGEgc2V0IG9mIHRlc3RzLicgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcmVfZGV0YWlscykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1tJywgJy0tbWF0Y2gnLCBtZXRhdmFyPSdQQVQnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdtYXRjaF90ZXN0cycsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J21hdGNoIHRlc3QgY2FzZXMgYW5kIG1ldGhvZHMgd2l0aCBnbG9iIHBhdHRlcm4gUEFUJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1HJywgJy0tZmFpbGZhc3QnLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdmYWlsIGFzIHNvb24gYXMgYSB0ZXN0IGZhaWxzIChvbmx5IHdpdGggLXYgb3IgLVcpJykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy11JywgJy0tdXNlJywgbWV0YXZhcj0nUkVTMSxSRVMyLC4uLicsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nYXBwZW5kJywgdHlwZT1yZXNvdXJjZXNfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nc3BlY2lmeSB3aGljaCBzcGVjaWFsIHJlc291cmNlIGludGVuc2l2ZSB0ZXN0cyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RvIHJ1bi4nICsgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLU0nLCAnLS1tZW1saW1pdCcsIG1ldGF2YXI9J0xJTUlUJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHZlcnkgbGFyZ2UgbWVtb3J5LWNvbnN1bWluZyB0ZXN0cy4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3JlX2RldGFpbHMpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXRlc3RkaXInLCBtZXRhdmFyPSdESVInLAorICAgICAgICAgICAgICAgICAgICAgICB0eXBlPXJlbGF0aXZlX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdleGVjdXRlIHRlc3QgZmlsZXMgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoaW5zdGVhZCBvZiB0aGUgUHl0aG9uIHN0ZGxpYiB0ZXN0IHN1aXRlKScpCisKKyAgICBncm91cCA9IHBhcnNlci5hZGRfYXJndW1lbnRfZ3JvdXAoJ1NwZWNpYWwgcnVucycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbCcsICctLWZpbmRsZWFrcycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2lmIEdDIGlzIGF2YWlsYWJsZSBkZXRlY3QgdGVzdHMgdGhhdCBsZWFrIG1lbW9yeScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctTCcsICctLXJ1bmxlYWtzJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIHRoZSBsZWFrcygxKSBjb21tYW5kIGp1c3QgYmVmb3JlIGV4aXQuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLVInLCAnLS1odW50cmxlYWtzJywgbWV0YXZhcj0nUlVOQ09VTlRTJywKKyAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdzZWFyY2ggZm9yIHJlZmVyZW5jZSBsZWFrcyAobmVlZHMgZGVidWcgYnVpbGQsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndmVyeSBzbG93KS4nICsgbW9yZV9kZXRhaWxzKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLWonLCAnLS1tdWx0aXByb2Nlc3MnLCBtZXRhdmFyPSdQUk9DRVNTRVMnLAorICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSd1c2VfbXAnLCB0eXBlPWludCwKKyAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIFBST0NFU1NFUyBwcm9jZXNzZXMgYXQgb25jZScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctVCcsICctLWNvdmVyYWdlJywgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndHJhY2UnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd0dXJuIG9uIGNvZGUgY292ZXJhZ2UgdHJhY2luZyB1c2luZyB0aGUgdHJhY2UgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2R1bGUnKQorICAgIGdyb3VwLmFkZF9hcmd1bWVudCgnLUQnLCAnLS1jb3ZlcmRpcicsIG1ldGF2YXI9J0RJUicsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9cmVsYXRpdmVfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J2RpcmVjdG9yeSB3aGVyZSBjb3ZlcmFnZSBmaWxlcyBhcmUgcHV0JykKKyAgICBncm91cC5hZGRfYXJndW1lbnQoJy1OJywgJy0tbm9jb3ZlcmRpcicsCisgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfY29uc3QnLCBjb25zdD1Ob25lLCBkZXN0PSdjb3ZlcmRpcicsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3B1dCBjb3ZlcmFnZSBmaWxlcyBhbG9uZ3NpZGUgbW9kdWxlcycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctdCcsICctLXRocmVzaG9sZCcsIG1ldGF2YXI9J1RIUkVTSE9MRCcsCisgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9aW50LAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdjYWxsIGdjLnNldF90aHJlc2hvbGQoVEhSRVNIT0xEKScpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctbicsICctLW5vd2luZG93cycsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3N1cHByZXNzIGVycm9yIG1lc3NhZ2UgYm94ZXMgb24gV2luZG93cycpCisgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctRicsICctLWZvcmV2ZXInLCBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdydW4gdGhlIHNwZWNpZmllZCB0ZXN0cyBpbiBhIGxvb3AsIHVudGlsIGFuICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXJyb3IgaGFwcGVucycpCisKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCdhcmdzJywgbmFyZ3M9YXJncGFyc2UuUkVNQUlOREVSLAorICAgICAgICAgICAgICAgICAgICAgICAgaGVscD1hcmdwYXJzZS5TVVBQUkVTUykKKworICAgIHJldHVybiBwYXJzZXIKKworZGVmIHJlbGF0aXZlX2ZpbGVuYW1lKHN0cmluZyk6CisgICAgIyBDV0QgaXMgcmVwbGFjZWQgd2l0aCBhIHRlbXBvcmFyeSBkaXIgYmVmb3JlIGNhbGxpbmcgbWFpbigpLCBzbyB3ZQorICAgICMgam9pbiBpdCB3aXRoIHRoZSBzYXZlZCBDV0Qgc28gaXQgZW5kcyB1cCB3aGVyZSB0aGUgdXNlciBleHBlY3RzLgorICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgc3RyaW5nKQorCitkZWYgaHVudHJsZWFrcyhzdHJpbmcpOgorICAgIGFyZ3MgPSBzdHJpbmcuc3BsaXQoJzonKQorICAgIGlmIGxlbihhcmdzKSBub3QgaW4gKDIsIDMpOgorICAgICAgICByYWlzZSBhcmdwYXJzZS5Bcmd1bWVudFR5cGVFcnJvcigKKyAgICAgICAgICAgICduZWVkcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCisgICAgbndhcm11cCA9IGludChhcmdzWzBdKSBpZiBhcmdzWzBdIGVsc2UgNQorICAgIG50cmFja2VkID0gaW50KGFyZ3NbMV0pIGlmIGFyZ3NbMV0gZWxzZSA0CisgICAgZm5hbWUgPSBhcmdzWzJdIGlmIGxlbihhcmdzKSA+IDIgYW5kIGFyZ3NbMl0gZWxzZSAncmVmbG9nLnR4dCcKKyAgICByZXR1cm4gbndhcm11cCwgbnRyYWNrZWQsIGZuYW1lCisKK2RlZiByZXNvdXJjZXNfbGlzdChzdHJpbmcpOgorICAgIHUgPSBbeC5sb3dlcigpIGZvciB4IGluIHN0cmluZy5zcGxpdCgnLCcpXQorICAgIGZvciByIGluIHU6CisgICAgICAgIGlmIHIgPT0gJ2FsbCcgb3IgciA9PSAnbm9uZSc6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiByWzBdID09ICctJzoKKyAgICAgICAgICAgIHIgPSByWzE6XQorICAgICAgICBpZiByIG5vdCBpbiBSRVNPVVJDRV9OQU1FUzoKKyAgICAgICAgICAgIHJhaXNlIGFyZ3BhcnNlLkFyZ3VtZW50VHlwZUVycm9yKCdpbnZhbGlkIHJlc291cmNlOiAnICsgcikKKyAgICByZXR1cm4gdQorCitkZWYgX3BhcnNlX2FyZ3MoYXJncywgKiprd2FyZ3MpOgorICAgICMgRGVmYXVsdHMKKyAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZSh0ZXN0ZGlyPU5vbmUsIHZlcmJvc2U9MCwgcXVpZXQ9RmFsc2UsCiAgICAgICAgICBleGNsdWRlPUZhbHNlLCBzaW5nbGU9RmFsc2UsIHJhbmRvbWl6ZT1GYWxzZSwgZnJvbWZpbGU9Tm9uZSwKICAgICAgICAgIGZpbmRsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLCB0cmFjZT1GYWxzZSwgY292ZXJkaXI9J2NvdmVyYWdlJywKICAgICAgICAgIHJ1bmxlYWtzPUZhbHNlLCBodW50cmxlYWtzPUZhbHNlLCB2ZXJib3NlMj1GYWxzZSwgcHJpbnRfc2xvdz1GYWxzZSwKICAgICAgICAgIHJhbmRvbV9zZWVkPU5vbmUsIHVzZV9tcD1Ob25lLCB2ZXJib3NlMz1GYWxzZSwgZm9yZXZlcj1GYWxzZSwKLSAgICAgICAgIGhlYWRlcj1GYWxzZSwgZmFpbGZhc3Q9RmFsc2UsIG1hdGNoX3Rlc3RzPU5vbmUpOgorICAgICAgICAgaGVhZGVyPUZhbHNlLCBmYWlsZmFzdD1GYWxzZSwgbWF0Y2hfdGVzdHM9Tm9uZSkKKyAgICBmb3IgaywgdiBpbiBrd2FyZ3MuaXRlbXMoKToKKyAgICAgICAgaWYgbm90IGhhc2F0dHIobnMsIGspOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCclciBpcyBhbiBpbnZhbGlkIGtleXdvcmQgYXJndW1lbnQgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3IgdGhpcyBmdW5jdGlvbicgJSBrKQorICAgICAgICBzZXRhdHRyKG5zLCBrLCB2KQorICAgIGlmIG5zLnVzZV9yZXNvdXJjZXMgaXMgTm9uZToKKyAgICAgICAgbnMudXNlX3Jlc291cmNlcyA9IFtdCisKKyAgICBwYXJzZXIgPSBfY3JlYXRlX3BhcnNlcigpCisgICAgcGFyc2VyLnBhcnNlX2FyZ3MoYXJncz1hcmdzLCBuYW1lc3BhY2U9bnMpCisKKyAgICBpZiBucy5zaW5nbGUgYW5kIG5zLmZyb21maWxlOgorICAgICAgICBwYXJzZXIuZXJyb3IoIi1zIGFuZCAtZiBkb24ndCBnbyB0b2dldGhlciEiKQorICAgIGlmIG5zLnVzZV9tcCBhbmQgbnMudHJhY2U6CisgICAgICAgIHBhcnNlci5lcnJvcigiLVQgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMudXNlX21wIGFuZCBucy5maW5kbGVha3M6CisgICAgICAgIHBhcnNlci5lcnJvcigiLWwgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCisgICAgaWYgbnMudXNlX21wIGFuZCBucy5tZW1saW1pdDoKKyAgICAgICAgcGFyc2VyLmVycm9yKCItTSBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKKyAgICBpZiBucy5mYWlsZmFzdCBhbmQgbm90IChucy52ZXJib3NlIG9yIG5zLnZlcmJvc2UzKToKKyAgICAgICAgcGFyc2VyLmVycm9yKCItRy8tLWZhaWxmYXN0IG5lZWRzIGVpdGhlciAtdiBvciAtVyIpCisKKyAgICBpZiBucy5xdWlldDoKKyAgICAgICAgbnMudmVyYm9zZSA9IDAKKyAgICBpZiBucy50aW1lb3V0IGlzIG5vdCBOb25lOgorICAgICAgICBpZiBoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyk6CisgICAgICAgICAgICBpZiBucy50aW1lb3V0IDw9IDA6CisgICAgICAgICAgICAgICAgbnMudGltZW91dCA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50KCJXYXJuaW5nOiBUaGUgdGltZW91dCBvcHRpb24gcmVxdWlyZXMgIgorICAgICAgICAgICAgICAgICAgImZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlciIpCisgICAgICAgICAgICBucy50aW1lb3V0ID0gTm9uZQorICAgIGlmIG5zLnVzZV9tcCBpcyBub3QgTm9uZToKKyAgICAgICAgaWYgbnMudXNlX21wIDw9IDA6CisgICAgICAgICAgICAjIFVzZSBhbGwgY29yZXMgKyBleHRyYXMgZm9yIHRlc3RzIHRoYXQgbGlrZSB0byBzbGVlcAorICAgICAgICAgICAgbnMudXNlX21wID0gMiArIChvcy5jcHVfY291bnQoKSBvciAxKQorICAgICAgICBpZiBucy51c2VfbXAgPT0gMToKKyAgICAgICAgICAgIG5zLnVzZV9tcCA9IE5vbmUKKyAgICBpZiBucy51c2U6CisgICAgICAgIGZvciBhIGluIG5zLnVzZToKKyAgICAgICAgICAgIGZvciByIGluIGE6CisgICAgICAgICAgICAgICAgaWYgciA9PSAnYWxsJzoKKyAgICAgICAgICAgICAgICAgICAgbnMudXNlX3Jlc291cmNlc1s6XSA9IFJFU09VUkNFX05BTUVTCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgciA9PSAnbm9uZSc6CisgICAgICAgICAgICAgICAgICAgIGRlbCBucy51c2VfcmVzb3VyY2VzWzpdCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcmVtb3ZlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiByWzBdID09ICctJzoKKyAgICAgICAgICAgICAgICAgICAgcmVtb3ZlID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICByID0gclsxOl0KKyAgICAgICAgICAgICAgICBpZiByZW1vdmU6CisgICAgICAgICAgICAgICAgICAgIGlmIHIgaW4gbnMudXNlX3Jlc291cmNlczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5zLnVzZV9yZXNvdXJjZXMucmVtb3ZlKHIpCisgICAgICAgICAgICAgICAgZWxpZiByIG5vdCBpbiBucy51c2VfcmVzb3VyY2VzOgorICAgICAgICAgICAgICAgICAgICBucy51c2VfcmVzb3VyY2VzLmFwcGVuZChyKQorICAgIGlmIG5zLnJhbmRvbV9zZWVkIGlzIG5vdCBOb25lOgorICAgICAgICBucy5yYW5kb21pemUgPSBUcnVlCisKKyAgICByZXR1cm4gbnMKKworCitkZWYgcnVuX3Rlc3RfaW5fc3VicHJvY2Vzcyh0ZXN0bmFtZSwgbnMpOgorICAgICIiIlJ1biB0aGUgZ2l2ZW4gdGVzdCBpbiBhIHN1YnByb2Nlc3Mgd2l0aCAtLXNsYXZlYXJncy4KKworICAgIG5zIGlzIHRoZSBvcHRpb24gTmFtZXNwYWNlIHBhcnNlZCBmcm9tIGNvbW1hbmQtbGluZSBhcmd1bWVudHMuIHJlZ3J0ZXN0CisgICAgaXMgaW52b2tlZCBpbiBhIHN1YnByb2Nlc3Mgd2l0aCB0aGUgLS1zbGF2ZWFyZ3MgYXJndW1lbnQ7IHdoZW4gdGhlCisgICAgc3VicHJvY2VzcyBleGl0cywgaXRzIHJldHVybiBjb2RlLCBzdGRvdXQgYW5kIHN0ZGVyciBhcmUgcmV0dXJuZWQgYXMgYQorICAgIDMtdHVwbGUuCisgICAgIiIiCisgICAgZnJvbSBzdWJwcm9jZXNzIGltcG9ydCBQb3BlbiwgUElQRQorICAgIGJhc2VfY21kID0gKFtzeXMuZXhlY3V0YWJsZV0gKyBzdXBwb3J0LmFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpICsKKyAgICAgICAgICAgICAgICBbJy1YJywgJ2ZhdWx0aGFuZGxlcicsICctbScsICd0ZXN0LnJlZ3J0ZXN0J10pCisKKyAgICBzbGF2ZWFyZ3MgPSAoCisgICAgICAgICAgICAodGVzdG5hbWUsIG5zLnZlcmJvc2UsIG5zLnF1aWV0KSwKKyAgICAgICAgICAgIGRpY3QoaHVudHJsZWFrcz1ucy5odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzPW5zLnVzZV9yZXNvdXJjZXMsCisgICAgICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPW5zLnZlcmJvc2UzLAorICAgICAgICAgICAgICAgICB0aW1lb3V0PW5zLnRpbWVvdXQsIGZhaWxmYXN0PW5zLmZhaWxmYXN0LAorICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1ucy5tYXRjaF90ZXN0cykpCisgICAgIyBSdW5uaW5nIHRoZSBjaGlsZCBmcm9tIHRoZSBzYW1lIHdvcmtpbmcgZGlyZWN0b3J5IGFzIHJlZ3J0ZXN0J3Mgb3JpZ2luYWwKKyAgICAjIGludm9jYXRpb24gZW5zdXJlcyB0aGF0IFRFTVBESVIgZm9yIHRoZSBjaGlsZCBpcyB0aGUgc2FtZSB3aGVuCisgICAgIyBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCkgaXMgdHJ1ZS4gU2VlIGlzc3VlIDE1MzAwLgorICAgIHBvcGVuID0gUG9wZW4oYmFzZV9jbWQgKyBbJy0tc2xhdmVhcmdzJywganNvbi5kdW1wcyhzbGF2ZWFyZ3MpXSwKKyAgICAgICAgICAgICAgICAgIHN0ZG91dD1QSVBFLCBzdGRlcnI9UElQRSwKKyAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLAorICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPShvcy5uYW1lICE9ICdudCcpLAorICAgICAgICAgICAgICAgICAgY3dkPXN1cHBvcnQuU0FWRURDV0QpCisgICAgc3Rkb3V0LCBzdGRlcnIgPSBwb3Blbi5jb21tdW5pY2F0ZSgpCisgICAgcmV0Y29kZSA9IHBvcGVuLndhaXQoKQorICAgIHJldHVybiByZXRjb2RlLCBzdGRvdXQsIHN0ZGVycgorCisKK2RlZiBtYWluKHRlc3RzPU5vbmUsICoqa3dhcmdzKToKICAgICAiIiJFeGVjdXRlIGEgdGVzdCBzdWl0ZS4KIAogICAgIFRoaXMgYWxzbyBwYXJzZXMgY29tbWFuZC1saW5lIG9wdGlvbnMgYW5kIG1vZGlmaWVzIGl0cyBiZWhhdmlvcgpAQCAtMjgyLDcgKzQ3OSw2IEBACiAgICAgZGlyZWN0bHkgdG8gc2V0IHRoZSB2YWx1ZXMgdGhhdCB3b3VsZCBub3JtYWxseSBiZSBzZXQgYnkgZmxhZ3MKICAgICBvbiB0aGUgY29tbWFuZCBsaW5lLgogICAgICIiIgotCiAgICAgIyBEaXNwbGF5IHRoZSBQeXRob24gdHJhY2ViYWNrIG9uIGZhdGFsIGVycm9ycyAoZS5nLiBzZWdmYXVsdCkKICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKGFsbF90aHJlYWRzPVRydWUpCiAKQEAgLTI5OCwxODcgKzQ5NCw1MSBAQAogICAgIHJlcGxhY2Vfc3Rkb3V0KCkKIAogICAgIHN1cHBvcnQucmVjb3JkX29yaWdpbmFsX3N0ZG91dChzeXMuc3Rkb3V0KQotICAgIHRyeToKLSAgICAgICAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAnaHZxeHNvUzpyZjpsdTp0OlREOk5MUjpGZHdXTTpuajpHbTonLAotICAgICAgICAgICAgWydoZWxwJywgJ3ZlcmJvc2UnLCAndmVyYm9zZTInLCAndmVyYm9zZTMnLCAncXVpZXQnLAotICAgICAgICAgICAgICdleGNsdWRlJywgJ3NpbmdsZScsICdzbG93JywgJ3JhbmRvbWl6ZScsICdmcm9tZmlsZT0nLCAnZmluZGxlYWtzJywKLSAgICAgICAgICAgICAndXNlPScsICd0aHJlc2hvbGQ9JywgJ2NvdmVyZGlyPScsICdub2NvdmVyZGlyJywKLSAgICAgICAgICAgICAncnVubGVha3MnLCAnaHVudHJsZWFrcz0nLCAnbWVtbGltaXQ9JywgJ3JhbmRzZWVkPScsCi0gICAgICAgICAgICAgJ211bHRpcHJvY2Vzcz0nLCAnY292ZXJhZ2UnLCAnc2xhdmVhcmdzPScsICdmb3JldmVyJywgJ2RlYnVnJywKLSAgICAgICAgICAgICAnc3RhcnQ9JywgJ25vd2luZG93cycsICdoZWFkZXInLCAndGVzdGRpcj0nLCAndGltZW91dD0nLCAnd2FpdCcsCi0gICAgICAgICAgICAgJ2ZhaWxmYXN0JywgJ21hdGNoPSddKQotICAgIGV4Y2VwdCBnZXRvcHQuZXJyb3IgYXMgbXNnOgotICAgICAgICB1c2FnZShtc2cpCiAKLSAgICAjIERlZmF1bHRzCi0gICAgaWYgcmFuZG9tX3NlZWQgaXMgTm9uZToKLSAgICAgICAgcmFuZG9tX3NlZWQgPSByYW5kb20ucmFuZHJhbmdlKDEwMDAwMDAwKQotICAgIGlmIHVzZV9yZXNvdXJjZXMgaXMgTm9uZToKLSAgICAgICAgdXNlX3Jlc291cmNlcyA9IFtdCi0gICAgZGVidWcgPSBGYWxzZQotICAgIHN0YXJ0ID0gTm9uZQotICAgIHRpbWVvdXQgPSBOb25lCi0gICAgZm9yIG8sIGEgaW4gb3B0czoKLSAgICAgICAgaWYgbyBpbiAoJy1oJywgJy0taGVscCcpOgotICAgICAgICAgICAgcHJpbnQoX19kb2NfXykKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbGlmIG8gaW4gKCctdicsICctLXZlcmJvc2UnKToKLSAgICAgICAgICAgIHZlcmJvc2UgKz0gMQotICAgICAgICBlbGlmIG8gaW4gKCctdycsICctLXZlcmJvc2UyJyk6Ci0gICAgICAgICAgICB2ZXJib3NlMiA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLWQnLCAnLS1kZWJ1ZycpOgotICAgICAgICAgICAgZGVidWcgPSBUcnVlCi0gICAgICAgIGVsaWYgbyBpbiAoJy1XJywgJy0tdmVyYm9zZTMnKToKLSAgICAgICAgICAgIHZlcmJvc2UzID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctRycsICctLWZhaWxmYXN0Jyk6Ci0gICAgICAgICAgICBmYWlsZmFzdCA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLXEnLCAnLS1xdWlldCcpOgotICAgICAgICAgICAgcXVpZXQgPSBUcnVlOwotICAgICAgICAgICAgdmVyYm9zZSA9IDAKLSAgICAgICAgZWxpZiBvIGluICgnLXgnLCAnLS1leGNsdWRlJyk6Ci0gICAgICAgICAgICBleGNsdWRlID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctUycsICctLXN0YXJ0Jyk6Ci0gICAgICAgICAgICBzdGFydCA9IGEKLSAgICAgICAgZWxpZiBvIGluICgnLXMnLCAnLS1zaW5nbGUnKToKLSAgICAgICAgICAgIHNpbmdsZSA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLW8nLCAnLS1zbG93Jyk6Ci0gICAgICAgICAgICBwcmludF9zbG93ID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctcicsICctLXJhbmRvbWl6ZScpOgotICAgICAgICAgICAgcmFuZG9taXplID0gVHJ1ZQotICAgICAgICBlbGlmIG8gPT0gJy0tcmFuZHNlZWQnOgotICAgICAgICAgICAgcmFuZG9taXplID0gVHJ1ZQotICAgICAgICAgICAgcmFuZG9tX3NlZWQgPSBpbnQoYSkKLSAgICAgICAgZWxpZiBvIGluICgnLWYnLCAnLS1mcm9tZmlsZScpOgotICAgICAgICAgICAgZnJvbWZpbGUgPSBhCi0gICAgICAgIGVsaWYgbyBpbiAoJy1tJywgJy0tbWF0Y2gnKToKLSAgICAgICAgICAgIG1hdGNoX3Rlc3RzID0gYQotICAgICAgICBlbGlmIG8gaW4gKCctbCcsICctLWZpbmRsZWFrcycpOgotICAgICAgICAgICAgZmluZGxlYWtzID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctTCcsICctLXJ1bmxlYWtzJyk6Ci0gICAgICAgICAgICBydW5sZWFrcyA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLXQnLCAnLS10aHJlc2hvbGQnKToKLSAgICAgICAgICAgIGltcG9ydCBnYwotICAgICAgICAgICAgZ2Muc2V0X3RocmVzaG9sZChpbnQoYSkpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1UJywgJy0tY292ZXJhZ2UnKToKLSAgICAgICAgICAgIHRyYWNlID0gVHJ1ZQotICAgICAgICBlbGlmIG8gaW4gKCctRCcsICctLWNvdmVyZGlyJyk6Ci0gICAgICAgICAgICAjIENXRCBpcyByZXBsYWNlZCB3aXRoIGEgdGVtcG9yYXJ5IGRpciBiZWZvcmUgY2FsbGluZyBtYWluKCksIHNvIHdlCi0gICAgICAgICAgICAjIG5lZWQgIGpvaW4gaXQgd2l0aCB0aGUgc2F2ZWQgQ1dEIHNvIGl0IGdvZXMgd2hlcmUgdGhlIHVzZXIgZXhwZWN0cy4KLSAgICAgICAgICAgIGNvdmVyZGlyID0gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGEpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1OJywgJy0tbm9jb3ZlcmRpcicpOgotICAgICAgICAgICAgY292ZXJkaXIgPSBOb25lCi0gICAgICAgIGVsaWYgbyBpbiAoJy1SJywgJy0taHVudHJsZWFrcycpOgotICAgICAgICAgICAgaHVudHJsZWFrcyA9IGEuc3BsaXQoJzonKQotICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3MpIG5vdCBpbiAoMiwgMyk6Ci0gICAgICAgICAgICAgICAgcHJpbnQoYSwgaHVudHJsZWFrcykKLSAgICAgICAgICAgICAgICB1c2FnZSgnLVIgdGFrZXMgMiBvciAzIGNvbG9uLXNlcGFyYXRlZCBhcmd1bWVudHMnKQotICAgICAgICAgICAgaWYgbm90IGh1bnRybGVha3NbMF06Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1swXSA9IDUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1swXSA9IGludChodW50cmxlYWtzWzBdKQotICAgICAgICAgICAgaWYgbm90IGh1bnRybGVha3NbMV06Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1sxXSA9IDQKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1sxXSA9IGludChodW50cmxlYWtzWzFdKQotICAgICAgICAgICAgaWYgbGVuKGh1bnRybGVha3MpID09IDIgb3Igbm90IGh1bnRybGVha3NbMl06Ci0gICAgICAgICAgICAgICAgaHVudHJsZWFrc1syOl0gPSBbInJlZmxvZy50eHQiXQotICAgICAgICAgICAgIyBBdm9pZCBmYWxzZSBwb3NpdGl2ZXMgZHVlIHRvIHZhcmlvdXMgY2FjaGVzCi0gICAgICAgICAgICAjIGZpbGxpbmcgc2xvd2x5IHdpdGggcmFuZG9tIGRhdGE6Ci0gICAgICAgICAgICB3YXJtX2NhY2hlcygpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1NJywgJy0tbWVtbGltaXQnKToKLSAgICAgICAgICAgIHN1cHBvcnQuc2V0X21lbWxpbWl0KGEpCi0gICAgICAgIGVsaWYgbyBpbiAoJy11JywgJy0tdXNlJyk6Ci0gICAgICAgICAgICB1ID0gW3gubG93ZXIoKSBmb3IgeCBpbiBhLnNwbGl0KCcsJyldCi0gICAgICAgICAgICBmb3IgciBpbiB1OgotICAgICAgICAgICAgICAgIGlmIHIgPT0gJ2FsbCc6Ci0gICAgICAgICAgICAgICAgICAgIHVzZV9yZXNvdXJjZXNbOl0gPSBSRVNPVVJDRV9OQU1FUwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIHIgPT0gJ25vbmUnOgotICAgICAgICAgICAgICAgICAgICBkZWwgdXNlX3Jlc291cmNlc1s6XQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIHJlbW92ZSA9IEZhbHNlCi0gICAgICAgICAgICAgICAgaWYgclswXSA9PSAnLSc6Ci0gICAgICAgICAgICAgICAgICAgIHJlbW92ZSA9IFRydWUKLSAgICAgICAgICAgICAgICAgICAgciA9IHJbMTpdCi0gICAgICAgICAgICAgICAgaWYgciBub3QgaW4gUkVTT1VSQ0VfTkFNRVM6Ci0gICAgICAgICAgICAgICAgICAgIHVzYWdlKCdJbnZhbGlkIC11Ly0tdXNlIG9wdGlvbjogJyArIGEpCi0gICAgICAgICAgICAgICAgaWYgcmVtb3ZlOgotICAgICAgICAgICAgICAgICAgICBpZiByIGluIHVzZV9yZXNvdXJjZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICB1c2VfcmVzb3VyY2VzLnJlbW92ZShyKQotICAgICAgICAgICAgICAgIGVsaWYgciBub3QgaW4gdXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgICAgICAgICAgdXNlX3Jlc291cmNlcy5hcHBlbmQocikKLSAgICAgICAgZWxpZiBvIGluICgnLW4nLCAnLS1ub3dpbmRvd3MnKToKLSAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKLSAgICAgICAgICAgIG1zdmNydC5TZXRFcnJvck1vZGUobXN2Y3J0LlNFTV9GQUlMQ1JJVElDQUxFUlJPUlN8Ci0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9BTElHTk1FTlRGQVVMVEVYQ0VQVHwKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0dQRkFVTFRFUlJPUkJPWHwKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT09QRU5GSUxFRVJST1JCT1gpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUKLSAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgICAgICAjIHJlbGVhc2UgYnVpbGQKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGZvciBtIGluIFttc3ZjcnQuQ1JUX1dBUk4sIG1zdmNydC5DUlRfRVJST1IsIG1zdmNydC5DUlRfQVNTRVJUXToKLSAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LkNydFNldFJlcG9ydE1vZGUobSwgbXN2Y3J0LkNSVERCR19NT0RFX0ZJTEUpCi0gICAgICAgICAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRGaWxlKG0sIG1zdmNydC5DUlREQkdfRklMRV9TVERFUlIpCi0gICAgICAgIGVsaWYgbyBpbiAoJy1GJywgJy0tZm9yZXZlcicpOgotICAgICAgICAgICAgZm9yZXZlciA9IFRydWUKLSAgICAgICAgZWxpZiBvIGluICgnLWonLCAnLS1tdWx0aXByb2Nlc3MnKToKLSAgICAgICAgICAgIHVzZV9tcCA9IGludChhKQotICAgICAgICAgICAgaWYgdXNlX21wIDw9IDA6Ci0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCi0gICAgICAgICAgICAgICAgICAgICMgVXNlIGFsbCBjb3JlcyArIGV4dHJhcyBmb3IgdGVzdHMgdGhhdCBsaWtlIHRvIHNsZWVwCi0gICAgICAgICAgICAgICAgICAgIHVzZV9tcCA9IDIgKyBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50KCkKLSAgICAgICAgICAgICAgICBleGNlcHQgKEltcG9ydEVycm9yLCBOb3RJbXBsZW1lbnRlZEVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgdXNlX21wID0gMwotICAgICAgICAgICAgaWYgdXNlX21wID09IDE6Ci0gICAgICAgICAgICAgICAgdXNlX21wID0gTm9uZQotICAgICAgICBlbGlmIG8gPT0gJy0taGVhZGVyJzoKLSAgICAgICAgICAgIGhlYWRlciA9IFRydWUKLSAgICAgICAgZWxpZiBvID09ICctLXNsYXZlYXJncyc6Ci0gICAgICAgICAgICBhcmdzLCBrd2FyZ3MgPSBqc29uLmxvYWRzKGEpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCgqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gSU5URVJSVVBURUQsICcnCi0gICAgICAgICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbiBhcyBlOgotICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IENISUxEX0VSUk9SLCBzdHIoZSkKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgcHJpbnQoKSAgICMgRm9yY2UgYSBuZXdsaW5lIChqdXN0IGluIGNhc2UpCi0gICAgICAgICAgICBwcmludChqc29uLmR1bXBzKHJlc3VsdCkpCi0gICAgICAgICAgICBzeXMuZXhpdCgwKQotICAgICAgICBlbGlmIG8gPT0gJy0tdGVzdGRpcic6Ci0gICAgICAgICAgICAjIENXRCBpcyByZXBsYWNlZCB3aXRoIGEgdGVtcG9yYXJ5IGRpciBiZWZvcmUgY2FsbGluZyBtYWluKCksIHNvIHdlCi0gICAgICAgICAgICAjIGpvaW4gaXQgd2l0aCB0aGUgc2F2ZWQgQ1dEIHNvIGl0IGVuZHMgdXAgd2hlcmUgdGhlIHVzZXIgZXhwZWN0cy4KLSAgICAgICAgICAgIHRlc3RkaXIgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgYSkKLSAgICAgICAgZWxpZiBvID09ICctLXRpbWVvdXQnOgotICAgICAgICAgICAgaWYgaGFzYXR0cihmYXVsdGhhbmRsZXIsICdkdW1wX3RyYWNlYmFja19sYXRlcicpOgotICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBmbG9hdChhKQotICAgICAgICAgICAgICAgIGlmIHRpbWVvdXQgPD0gMDoKLSAgICAgICAgICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIldhcm5pbmc6IFRoZSB0aW1lb3V0IG9wdGlvbiByZXF1aXJlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgImZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlciIpCi0gICAgICAgICAgICAgICAgdGltZW91dCA9IE5vbmUKLSAgICAgICAgZWxpZiBvID09ICctLXdhaXQnOgotICAgICAgICAgICAgaW5wdXQoIlByZXNzIGFueSBrZXkgdG8gY29udGludWUuLi4iKQorICAgIG5zID0gX3BhcnNlX2FyZ3Moc3lzLmFyZ3ZbMTpdLCAqKmt3YXJncykKKworICAgIGlmIG5zLmh1bnRybGVha3M6CisgICAgICAgICMgQXZvaWQgZmFsc2UgcG9zaXRpdmVzIGR1ZSB0byB2YXJpb3VzIGNhY2hlcworICAgICAgICAjIGZpbGxpbmcgc2xvd2x5IHdpdGggcmFuZG9tIGRhdGE6CisgICAgICAgIHdhcm1fY2FjaGVzKCkKKyAgICBpZiBucy5tZW1saW1pdCBpcyBub3QgTm9uZToKKyAgICAgICAgc3VwcG9ydC5zZXRfbWVtbGltaXQobnMubWVtbGltaXQpCisgICAgaWYgbnMudGhyZXNob2xkIGlzIG5vdCBOb25lOgorICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgZ2Muc2V0X3RocmVzaG9sZChucy50aHJlc2hvbGQpCisgICAgaWYgbnMubm93aW5kb3dzOgorICAgICAgICBpbXBvcnQgbXN2Y3J0CisgICAgICAgIG1zdmNydC5TZXRFcnJvck1vZGUobXN2Y3J0LlNFTV9GQUlMQ1JJVElDQUxFUlJPUlN8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT0FMSUdOTUVOVEZBVUxURVhDRVBUfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zdmNydC5TRU1fTk9HUEZBVUxURVJST1JCT1h8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXN2Y3J0LlNFTV9OT09QRU5GSUxFRVJST1JCT1gpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1zdmNydC5DcnRTZXRSZXBvcnRNb2RlCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICMgcmVsZWFzZSBidWlsZAorICAgICAgICAgICAgcGFzcwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgcHJpbnQoKCJObyBoYW5kbGVyIGZvciBvcHRpb24ge30uICBQbGVhc2UgcmVwb3J0IHRoaXMgYXMgYSBidWcgIgotICAgICAgICAgICAgICAgICAgICJhdCBodHRwOi8vYnVncy5weXRob24ub3JnLiIpLmZvcm1hdChvKSwgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBpZiBzaW5nbGUgYW5kIGZyb21maWxlOgotICAgICAgICB1c2FnZSgiLXMgYW5kIC1mIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgdXNlX21wIGFuZCB0cmFjZToKLSAgICAgICAgdXNhZ2UoIi1UIGFuZCAtaiBkb24ndCBnbyB0b2dldGhlciEiKQotICAgIGlmIHVzZV9tcCBhbmQgZmluZGxlYWtzOgotICAgICAgICB1c2FnZSgiLWwgYW5kIC1qIGRvbid0IGdvIHRvZ2V0aGVyISIpCi0gICAgaWYgdXNlX21wIGFuZCBzdXBwb3J0Lm1heF9tZW11c2U6Ci0gICAgICAgIHVzYWdlKCItTSBhbmQgLWogZG9uJ3QgZ28gdG9nZXRoZXIhIikKLSAgICBpZiBmYWlsZmFzdCBhbmQgbm90ICh2ZXJib3NlIG9yIHZlcmJvc2UzKToKLSAgICAgICAgdXNhZ2UoIi1HLy0tZmFpbGZhc3QgbmVlZHMgZWl0aGVyIC12IG9yIC1XIikKKyAgICAgICAgICAgIGZvciBtIGluIFttc3ZjcnQuQ1JUX1dBUk4sIG1zdmNydC5DUlRfRVJST1IsIG1zdmNydC5DUlRfQVNTRVJUXToKKyAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0TW9kZShtLCBtc3ZjcnQuQ1JUREJHX01PREVfRklMRSkKKyAgICAgICAgICAgICAgICBtc3ZjcnQuQ3J0U2V0UmVwb3J0RmlsZShtLCBtc3ZjcnQuQ1JUREJHX0ZJTEVfU1RERVJSKQorICAgIGlmIG5zLndhaXQ6CisgICAgICAgIGlucHV0KCJQcmVzcyBhbnkga2V5IHRvIGNvbnRpbnVlLi4uIikKKworICAgIGlmIG5zLnNsYXZlYXJncyBpcyBub3QgTm9uZToKKyAgICAgICAgYXJncywga3dhcmdzID0ganNvbi5sb2Fkcyhucy5zbGF2ZWFyZ3MpCisgICAgICAgIGlmIGt3YXJncy5nZXQoJ2h1bnRybGVha3MnKToKKyAgICAgICAgICAgIHVuaXR0ZXN0LkJhc2VUZXN0U3VpdGUuX2NsZWFudXAgPSBGYWxzZQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXN1bHQgPSBydW50ZXN0KCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcmVzdWx0ID0gSU5URVJSVVBURUQsICcnCisgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKCkKKyAgICAgICAgICAgIHJlc3VsdCA9IENISUxEX0VSUk9SLCBzdHIoZSkKKyAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgIHByaW50KCkgICAjIEZvcmNlIGEgbmV3bGluZSAoanVzdCBpbiBjYXNlKQorICAgICAgICBwcmludChqc29uLmR1bXBzKHJlc3VsdCkpCisgICAgICAgIHN5cy5leGl0KDApCiAKICAgICBnb29kID0gW10KICAgICBiYWQgPSBbXQpAQCAtNDg3LDEyICs1NDcsMTIgQEAKICAgICBlbnZpcm9ubWVudF9jaGFuZ2VkID0gW10KICAgICBpbnRlcnJ1cHRlZCA9IEZhbHNlCiAKLSAgICBpZiBmaW5kbGVha3M6CisgICAgaWYgbnMuZmluZGxlYWtzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgZ2MKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgcHJpbnQoJ05vIEdDIGF2YWlsYWJsZSwgZGlzYWJsaW5nIGZpbmRsZWFrcy4nKQotICAgICAgICAgICAgZmluZGxlYWtzID0gRmFsc2UKKyAgICAgICAgICAgIG5zLmZpbmRsZWFrcyA9IEZhbHNlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyB0byByZXBvcnQgZ2FyYmFnZSB0aGF0IGlzIG5vdAogICAgICAgICAgICAgIyBmcmVlYWJsZSBieSByZWZlcmVuY2UgY291bnRpbmcgYWxvbmUuICBCeSBkZWZhdWx0IG9ubHkKQEAgLTUwMCw4MiArNTYwLDg3IEBACiAgICAgICAgICAgICAjZ2Muc2V0X2RlYnVnKGdjLkRFQlVHX1NBVkVBTEwpCiAgICAgICAgICAgICBmb3VuZF9nYXJiYWdlID0gW10KIAotICAgIGlmIHNpbmdsZToKKyAgICBpZiBucy5odW50cmxlYWtzOgorICAgICAgICB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwID0gRmFsc2UKKworICAgIGlmIG5zLnNpbmdsZToKICAgICAgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgJ3B5bmV4dHRlc3QnKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmcCA9IG9wZW4oZmlsZW5hbWUsICdyJykKLSAgICAgICAgICAgIG5leHRfdGVzdCA9IGZwLnJlYWQoKS5zdHJpcCgpCi0gICAgICAgICAgICB0ZXN0cyA9IFtuZXh0X3Rlc3RdCi0gICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicpIGFzIGZwOgorICAgICAgICAgICAgICAgIG5leHRfdGVzdCA9IGZwLnJlYWQoKS5zdHJpcCgpCisgICAgICAgICAgICAgICAgdGVzdHMgPSBbbmV4dF90ZXN0XQorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAotICAgIGlmIGZyb21maWxlOgorICAgIGlmIG5zLmZyb21maWxlOgogICAgICAgICB0ZXN0cyA9IFtdCi0gICAgICAgIGZwID0gb3Blbihvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgZnJvbWZpbGUpKQotICAgICAgICBjb3VudF9wYXQgPSByZS5jb21waWxlKHInXFtccypcZCsvXHMqXGQrXF0nKQotICAgICAgICBmb3IgbGluZSBpbiBmcDoKLSAgICAgICAgICAgIGxpbmUgPSBjb3VudF9wYXQuc3ViKCcnLCBsaW5lKQotICAgICAgICAgICAgZ3V0cyA9IGxpbmUuc3BsaXQoKSAjIGFzc3VtaW5nIG5vIHRlc3QgaGFzIHdoaXRlc3BhY2UgaW4gaXRzIG5hbWUKLSAgICAgICAgICAgIGlmIGd1dHMgYW5kIG5vdCBndXRzWzBdLnN0YXJ0c3dpdGgoJyMnKToKLSAgICAgICAgICAgICAgICB0ZXN0cy5leHRlbmQoZ3V0cykKLSAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIG5zLmZyb21maWxlKSkgYXMgZnA6CisgICAgICAgICAgICBjb3VudF9wYXQgPSByZS5jb21waWxlKHInXFtccypcZCsvXHMqXGQrXF0nKQorICAgICAgICAgICAgZm9yIGxpbmUgaW4gZnA6CisgICAgICAgICAgICAgICAgbGluZSA9IGNvdW50X3BhdC5zdWIoJycsIGxpbmUpCisgICAgICAgICAgICAgICAgZ3V0cyA9IGxpbmUuc3BsaXQoKSAjIGFzc3VtaW5nIG5vIHRlc3QgaGFzIHdoaXRlc3BhY2UgaW4gaXRzIG5hbWUKKyAgICAgICAgICAgICAgICBpZiBndXRzIGFuZCBub3QgZ3V0c1swXS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChndXRzKQogCiAgICAgIyBTdHJpcCAucHkgZXh0ZW5zaW9ucy4KLSAgICByZW1vdmVweShhcmdzKQorICAgIHJlbW92ZXB5KG5zLmFyZ3MpCiAgICAgcmVtb3ZlcHkodGVzdHMpCiAKICAgICBzdGR0ZXN0cyA9IFNURFRFU1RTWzpdCiAgICAgbm90dGVzdHMgPSBOT1RURVNUUy5jb3B5KCkKLSAgICBpZiBleGNsdWRlOgotICAgICAgICBmb3IgYXJnIGluIGFyZ3M6CisgICAgaWYgbnMuZXhjbHVkZToKKyAgICAgICAgZm9yIGFyZyBpbiBucy5hcmdzOgogICAgICAgICAgICAgaWYgYXJnIGluIHN0ZHRlc3RzOgogICAgICAgICAgICAgICAgIHN0ZHRlc3RzLnJlbW92ZShhcmcpCiAgICAgICAgICAgICBub3R0ZXN0cy5hZGQoYXJnKQotICAgICAgICBhcmdzID0gW10KKyAgICAgICAgbnMuYXJncyA9IFtdCiAKICAgICAjIEZvciBhIHBhcnRpYWwgcnVuLCB3ZSBkbyBub3QgbmVlZCB0byBjbHV0dGVyIHRoZSBvdXRwdXQuCi0gICAgaWYgdmVyYm9zZSBvciBoZWFkZXIgb3Igbm90IChxdWlldCBvciBzaW5nbGUgb3IgdGVzdHMgb3IgYXJncyk6CisgICAgaWYgbnMudmVyYm9zZSBvciBucy5oZWFkZXIgb3Igbm90IChucy5xdWlldCBvciBucy5zaW5nbGUgb3IgdGVzdHMgb3IgbnMuYXJncyk6CiAgICAgICAgICMgUHJpbnQgYmFzaWMgcGxhdGZvcm0gaW5mb3JtYXRpb24KICAgICAgICAgcHJpbnQoIj09IiwgcGxhdGZvcm0ucHl0aG9uX2ltcGxlbWVudGF0aW9uKCksICpzeXMudmVyc2lvbi5zcGxpdCgpKQogICAgICAgICBwcmludCgiPT0gICIsIHBsYXRmb3JtLnBsYXRmb3JtKGFsaWFzZWQ9VHJ1ZSksCiAgICAgICAgICAgICAgICAgICAgICAgIiVzLWVuZGlhbiIgJSBzeXMuYnl0ZW9yZGVyKQorICAgICAgICBwcmludCgiPT0gICIsICJoYXNoIGFsZ29yaXRobToiLCBzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSwKKyAgICAgICAgICAgICAgIjY0Yml0IiBpZiBzeXMubWF4c2l6ZSA+IDIqKjMyIGVsc2UgIjMyYml0IikKICAgICAgICAgcHJpbnQoIj09ICAiLCBvcy5nZXRjd2QoKSkKICAgICAgICAgcHJpbnQoIlRlc3Rpbmcgd2l0aCBmbGFnczoiLCBzeXMuZmxhZ3MpCiAKICAgICAjIGlmIHRlc3RkaXIgaXMgc2V0LCB0aGVuIHdlIGFyZSBub3QgcnVubmluZyB0aGUgcHl0aG9uIHRlc3RzIHN1aXRlLCBzbwogICAgICMgZG9uJ3QgYWRkIGRlZmF1bHQgdGVzdHMgdG8gYmUgZXhlY3V0ZWQgb3Igc2tpcHBlZCAocGFzcyBlbXB0eSB2YWx1ZXMpCi0gICAgaWYgdGVzdGRpcjoKLSAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHModGVzdGRpciwgbGlzdCgpLCBzZXQoKSkKKyAgICBpZiBucy50ZXN0ZGlyOgorICAgICAgICBhbGx0ZXN0cyA9IGZpbmR0ZXN0cyhucy50ZXN0ZGlyLCBsaXN0KCksIHNldCgpKQogICAgIGVsc2U6Ci0gICAgICAgIGFsbHRlc3RzID0gZmluZHRlc3RzKHRlc3RkaXIsIHN0ZHRlc3RzLCBub3R0ZXN0cykKKyAgICAgICAgYWxsdGVzdHMgPSBmaW5kdGVzdHMobnMudGVzdGRpciwgc3RkdGVzdHMsIG5vdHRlc3RzKQogCi0gICAgc2VsZWN0ZWQgPSB0ZXN0cyBvciBhcmdzIG9yIGFsbHRlc3RzCi0gICAgaWYgc2luZ2xlOgorICAgIHNlbGVjdGVkID0gdGVzdHMgb3IgbnMuYXJncyBvciBhbGx0ZXN0cworICAgIGlmIG5zLnNpbmdsZToKICAgICAgICAgc2VsZWN0ZWQgPSBzZWxlY3RlZFs6MV0KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmV4dF9zaW5nbGVfdGVzdCA9IGFsbHRlc3RzW2FsbHRlc3RzLmluZGV4KHNlbGVjdGVkWzBdKSsxXQogICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgIG5leHRfc2luZ2xlX3Rlc3QgPSBOb25lCiAgICAgIyBSZW1vdmUgYWxsIHRoZSBzZWxlY3RlZCB0ZXN0cyB0aGF0IHByZWNlZGUgc3RhcnQgaWYgaXQncyBzZXQuCi0gICAgaWYgc3RhcnQ6CisgICAgaWYgbnMuc3RhcnQ6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzZWxlY3RlZFs6c2VsZWN0ZWQuaW5kZXgoc3RhcnQpXQorICAgICAgICAgICAgZGVsIHNlbGVjdGVkWzpzZWxlY3RlZC5pbmRleChucy5zdGFydCldCiAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgotICAgICAgICAgICAgcHJpbnQoIkNvdWxkbid0IGZpbmQgc3RhcnRpbmcgdGVzdCAoJXMpLCB1c2luZyBhbGwgdGVzdHMiICUgc3RhcnQpCi0gICAgaWYgcmFuZG9taXplOgotICAgICAgICByYW5kb20uc2VlZChyYW5kb21fc2VlZCkKLSAgICAgICAgcHJpbnQoIlVzaW5nIHJhbmRvbSBzZWVkIiwgcmFuZG9tX3NlZWQpCisgICAgICAgICAgICBwcmludCgiQ291bGRuJ3QgZmluZCBzdGFydGluZyB0ZXN0ICglcyksIHVzaW5nIGFsbCB0ZXN0cyIgJSBucy5zdGFydCkKKyAgICBpZiBucy5yYW5kb21pemU6CisgICAgICAgIGlmIG5zLnJhbmRvbV9zZWVkIGlzIE5vbmU6CisgICAgICAgICAgICBucy5yYW5kb21fc2VlZCA9IHJhbmRvbS5yYW5kcmFuZ2UoMTAwMDAwMDApCisgICAgICAgIHJhbmRvbS5zZWVkKG5zLnJhbmRvbV9zZWVkKQorICAgICAgICBwcmludCgiVXNpbmcgcmFuZG9tIHNlZWQiLCBucy5yYW5kb21fc2VlZCkKICAgICAgICAgcmFuZG9tLnNodWZmbGUoc2VsZWN0ZWQpCi0gICAgaWYgdHJhY2U6CisgICAgaWYgbnMudHJhY2U6CiAgICAgICAgIGltcG9ydCB0cmFjZSwgdGVtcGZpbGUKICAgICAgICAgdHJhY2VyID0gdHJhY2UuVHJhY2UoaWdub3JlZGlycz1bc3lzLmJhc2VfcHJlZml4LCBzeXMuYmFzZV9leGVjX3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGZpbGUuZ2V0dGVtcGRpcigpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2U9RmFsc2UsIGNvdW50PVRydWUpCiAKICAgICB0ZXN0X3RpbWVzID0gW10KLSAgICBzdXBwb3J0LnZlcmJvc2UgPSB2ZXJib3NlICAgICAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKLSAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSB1c2VfcmVzb3VyY2VzCisgICAgc3VwcG9ydC52ZXJib3NlID0gbnMudmVyYm9zZSAgICAgICMgVGVsbCB0ZXN0cyB0byBiZSBtb2RlcmF0ZWx5IHF1aWV0CisgICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gbnMudXNlX3Jlc291cmNlcwogICAgIHNhdmVfbW9kdWxlcyA9IHN5cy5tb2R1bGVzLmtleXMoKQogCiAgICAgZGVmIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCk6CkBAIC01OTMsNyArNjU4LDcgQEAKICAgICAgICAgICAgIHNraXBwZWQuYXBwZW5kKHRlc3QpCiAgICAgICAgICAgICByZXNvdXJjZV9kZW5pZWRzLmFwcGVuZCh0ZXN0KQogCi0gICAgaWYgZm9yZXZlcjoKKyAgICBpZiBucy5mb3JldmVyOgogICAgICAgICBkZWYgdGVzdF9mb3JldmVyKHRlc3RzPWxpc3Qoc2VsZWN0ZWQpKToKICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgZm9yIHRlc3QgaW4gdGVzdHM6CkBAIC02MDgsMTkgKzY3MywxNiBAQAogICAgICAgICB0ZXN0X2NvdW50ID0gJy97fScuZm9ybWF0KGxlbihzZWxlY3RlZCkpCiAgICAgICAgIHRlc3RfY291bnRfd2lkdGggPSBsZW4odGVzdF9jb3VudCkgLSAxCiAKLSAgICBpZiB1c2VfbXA6CisgICAgaWYgbnMudXNlX21wOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJNdWx0aXByb2Nlc3Mgb3B0aW9uIHJlcXVpcmVzIHRocmVhZCBzdXBwb3J0IikKICAgICAgICAgICAgIHN5cy5leGl0KDIpCiAgICAgICAgIGZyb20gcXVldWUgaW1wb3J0IFF1ZXVlCi0gICAgICAgIGZyb20gc3VicHJvY2VzcyBpbXBvcnQgUG9wZW4sIFBJUEUKLSAgICAgICAgZGVidWdfb3V0cHV0X3BhdCA9IHJlLmNvbXBpbGUociJcW1xkKyByZWZzXF0kIikKKyAgICAgICAgZGVidWdfb3V0cHV0X3BhdCA9IHJlLmNvbXBpbGUociJcW1xkKyByZWZzLCBcZCsgYmxvY2tzXF0kIikKICAgICAgICAgb3V0cHV0ID0gUXVldWUoKQogICAgICAgICBwZW5kaW5nID0gTXVsdGlwcm9jZXNzVGVzdHModGVzdHMpCi0gICAgICAgIG9wdF9hcmdzID0gc3VwcG9ydC5hcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MoKQotICAgICAgICBiYXNlX2NtZCA9IFtzeXMuZXhlY3V0YWJsZV0gKyBvcHRfYXJncyArIFsnLW0nLCAndGVzdC5yZWdydGVzdCddCiAgICAgICAgIGRlZiB3b3JrKCk6CiAgICAgICAgICAgICAjIEEgd29ya2VyIHRocmVhZC4KICAgICAgICAgICAgIHRyeToKQEAgLTYzMCwyNCArNjkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXQucHV0KChOb25lLCBOb25lLCBOb25lLCBOb25lKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICBhcmdzX3R1cGxlID0gKAotICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3QsIHZlcmJvc2UsIHF1aWV0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QoaHVudHJsZWFrcz1odW50cmxlYWtzLCB1c2VfcmVzb3VyY2VzPXVzZV9yZXNvdXJjZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnPWRlYnVnLCBvdXRwdXRfb25fZmFpbHVyZT12ZXJib3NlMywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD10aW1lb3V0LCBmYWlsZmFzdD1mYWlsZmFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bWF0Y2hfdGVzdHMpCi0gICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgIyAtRSBpcyBuZWVkZWQgYnkgc29tZSB0ZXN0cywgZS5nLiB0ZXN0X2ltcG9ydAotICAgICAgICAgICAgICAgICAgICAjIFJ1bm5pbmcgdGhlIGNoaWxkIGZyb20gdGhlIHNhbWUgd29ya2luZyBkaXJlY3RvcnkgZW5zdXJlcwotICAgICAgICAgICAgICAgICAgICAjIHRoYXQgVEVNUERJUiBmb3IgdGhlIGNoaWxkIGlzIHRoZSBzYW1lIHdoZW4KLSAgICAgICAgICAgICAgICAgICAgIyBzeXNjb25maWcuaXNfcHl0aG9uX2J1aWxkKCkgaXMgdHJ1ZS4gU2VlIGlzc3VlIDE1MzAwLgotICAgICAgICAgICAgICAgICAgICBwb3BlbiA9IFBvcGVuKGJhc2VfY21kICsgWyctLXNsYXZlYXJncycsIGpzb24uZHVtcHMoYXJnc190dXBsZSldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9KG9zLm5hbWUgIT0gJ250JyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN3ZD1zdXBwb3J0LlNBVkVEQ1dEKQotICAgICAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgICAgICAgICAgcmV0Y29kZSA9IHBvcGVuLndhaXQoKQorICAgICAgICAgICAgICAgICAgICByZXRjb2RlLCBzdGRvdXQsIHN0ZGVyciA9IHJ1bl90ZXN0X2luX3N1YnByb2Nlc3ModGVzdCwgbnMpCiAgICAgICAgICAgICAgICAgICAgICMgU3RyaXAgbGFzdCByZWZjb3VudCBvdXRwdXQgbGluZSBpZiBpdCBleGlzdHMsIHNpbmNlIGl0CiAgICAgICAgICAgICAgICAgICAgICMgY29tZXMgZnJvbSB0aGUgc2h1dGRvd24gb2YgdGhlIGludGVycHJldGVyIGluIHRoZSBzdWJjb21tYW5kLgogICAgICAgICAgICAgICAgICAgICBzdGRlcnIgPSBkZWJ1Z19vdXRwdXRfcGF0LnN1YigiIiwgc3RkZXJyKQpAQCAtNjY0LDE5ICs3MDksMTkgQEAKICAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uOgogICAgICAgICAgICAgICAgIG91dHB1dC5wdXQoKE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpKQogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgIHdvcmtlcnMgPSBbVGhyZWFkKHRhcmdldD13b3JrKSBmb3IgaSBpbiByYW5nZSh1c2VfbXApXQorICAgICAgICB3b3JrZXJzID0gW1RocmVhZCh0YXJnZXQ9d29yaykgZm9yIGkgaW4gcmFuZ2UobnMudXNlX21wKV0KICAgICAgICAgZm9yIHdvcmtlciBpbiB3b3JrZXJzOgogICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKICAgICAgICAgZmluaXNoZWQgPSAwCiAgICAgICAgIHRlc3RfaW5kZXggPSAxCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdoaWxlIGZpbmlzaGVkIDwgdXNlX21wOgorICAgICAgICAgICAgd2hpbGUgZmluaXNoZWQgPCBucy51c2VfbXA6CiAgICAgICAgICAgICAgICAgdGVzdCwgc3Rkb3V0LCBzdGRlcnIsIHJlc3VsdCA9IG91dHB1dC5nZXQoKQogICAgICAgICAgICAgICAgIGlmIHRlc3QgaXMgTm9uZToKICAgICAgICAgICAgICAgICAgICAgZmluaXNoZWQgKz0gMQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCkKLSAgICAgICAgICAgICAgICBpZiBub3QgcXVpZXQ6CisgICAgICAgICAgICAgICAgaWYgbm90IG5zLnF1aWV0OgogICAgICAgICAgICAgICAgICAgICBmbXQgPSAiW3sxOnswfX17Mn0vezN9XSB7NH0iIGlmIGJhZCBlbHNlICJbezE6ezB9fXsyfV0gezR9IgogICAgICAgICAgICAgICAgICAgICBwcmludChmbXQuZm9ybWF0KAogICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9jb3VudF93aWR0aCwgdGVzdF9pbmRleCwgdGVzdF9jb3VudCwKQEAgLTY5OSwyOSArNzQ0LDMwIEBACiAgICAgICAgICAgICB3b3JrZXIuam9pbigpCiAgICAgZWxzZToKICAgICAgICAgZm9yIHRlc3RfaW5kZXgsIHRlc3QgaW4gZW51bWVyYXRlKHRlc3RzLCAxKToKLSAgICAgICAgICAgIGlmIG5vdCBxdWlldDoKKyAgICAgICAgICAgIGlmIG5vdCBucy5xdWlldDoKICAgICAgICAgICAgICAgICBmbXQgPSAiW3sxOnswfX17Mn0vezN9XSB7NH0iIGlmIGJhZCBlbHNlICJbezE6ezB9fXsyfV0gezR9IgogICAgICAgICAgICAgICAgIHByaW50KGZtdC5mb3JtYXQoCiAgICAgICAgICAgICAgICAgICAgIHRlc3RfY291bnRfd2lkdGgsIHRlc3RfaW5kZXgsIHRlc3RfY291bnQsIGxlbihiYWQpLCB0ZXN0KSkKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgIGlmIHRyYWNlOgorICAgICAgICAgICAgaWYgbnMudHJhY2U6CiAgICAgICAgICAgICAgICAgIyBJZiB3ZSdyZSB0cmFjaW5nIGNvZGUgY292ZXJhZ2UsIHRoZW4gd2UgZG9uJ3QgZXhpdCB3aXRoIHN0YXR1cwogICAgICAgICAgICAgICAgICMgaWYgb24gYSBmYWxzZSByZXR1cm4gdmFsdWUgZnJvbSBtYWluLgotICAgICAgICAgICAgICAgIHRyYWNlci5ydW5jdHgoJ3J1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsIHRpbWVvdXQ9dGltZW91dCknLAorICAgICAgICAgICAgICAgIHRyYWNlci5ydW5jdHgoJ3J1bnRlc3QodGVzdCwgbnMudmVyYm9zZSwgbnMucXVpZXQsIHRpbWVvdXQ9bnMudGltZW91dCknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFscz1nbG9iYWxzKCksIGxvY2Fscz12YXJzKCkpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCh0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcywgZGVidWcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9dmVyYm9zZTMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD10aW1lb3V0LCBmYWlsZmFzdD1mYWlsZmFzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaF90ZXN0cz1tYXRjaF90ZXN0cykKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdCh0ZXN0LCBucy52ZXJib3NlLCBucy5xdWlldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucy5odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9vbl9mYWlsdXJlPW5zLnZlcmJvc2UzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9bnMudGltZW91dCwgZmFpbGZhc3Q9bnMuZmFpbGZhc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hfdGVzdHM9bnMubWF0Y2hfdGVzdHMpCiAgICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdGVfcmVzdWx0KHRlc3QsIHJlc3VsdCkKICAgICAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdGVkID0gVHJ1ZQogICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgIGlmIGZpbmRsZWFrczoKKyAgICAgICAgICAgIGlmIG5zLmZpbmRsZWFrczoKICAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgICAgICAgICBpZiBnYy5nYXJiYWdlOgogICAgICAgICAgICAgICAgICAgICBwcmludCgiV2FybmluZzogdGVzdCBjcmVhdGVkIiwgbGVuKGdjLmdhcmJhZ2UpLCBlbmQ9JyAnKQpAQCAtNzQyLDY5ICs3ODgsNTkgQEAKICAgICAgICAgb21pdHRlZCA9IHNldChzZWxlY3RlZCkgLSBzZXQoZ29vZCkgLSBzZXQoYmFkKSAtIHNldChza2lwcGVkKQogICAgICAgICBwcmludChjb3VudChsZW4ob21pdHRlZCksICJ0ZXN0IiksICJvbWl0dGVkOiIpCiAgICAgICAgIHByaW50bGlzdChvbWl0dGVkKQotICAgIGlmIGdvb2QgYW5kIG5vdCBxdWlldDoKKyAgICBpZiBnb29kIGFuZCBub3QgbnMucXVpZXQ6CiAgICAgICAgIGlmIG5vdCBiYWQgYW5kIG5vdCBza2lwcGVkIGFuZCBub3QgaW50ZXJydXB0ZWQgYW5kIGxlbihnb29kKSA+IDE6CiAgICAgICAgICAgICBwcmludCgiQWxsIiwgZW5kPScgJykKICAgICAgICAgcHJpbnQoY291bnQobGVuKGdvb2QpLCAidGVzdCIpLCAiT0suIikKLSAgICBpZiBwcmludF9zbG93OgorICAgIGlmIG5zLnByaW50X3Nsb3c6CiAgICAgICAgIHRlc3RfdGltZXMuc29ydChyZXZlcnNlPVRydWUpCiAgICAgICAgIHByaW50KCIxMCBzbG93ZXN0IHRlc3RzOiIpCiAgICAgICAgIGZvciB0aW1lLCB0ZXN0IGluIHRlc3RfdGltZXNbOjEwXToKICAgICAgICAgICAgIHByaW50KCIlczogJS4xZnMiICUgKHRlc3QsIHRpbWUpKQogICAgIGlmIGJhZDoKLSAgICAgICAgYmFkID0gc29ydGVkKHNldChiYWQpIC0gc2V0KGVudmlyb25tZW50X2NoYW5nZWQpKQotICAgICAgICBpZiBiYWQ6Ci0gICAgICAgICAgICBwcmludChjb3VudChsZW4oYmFkKSwgInRlc3QiKSwgImZhaWxlZDoiKQotICAgICAgICAgICAgcHJpbnRsaXN0KGJhZCkKKyAgICAgICAgcHJpbnQoY291bnQobGVuKGJhZCksICJ0ZXN0IiksICJmYWlsZWQ6IikKKyAgICAgICAgcHJpbnRsaXN0KGJhZCkKICAgICBpZiBlbnZpcm9ubWVudF9jaGFuZ2VkOgogICAgICAgICBwcmludCgie30gYWx0ZXJlZCB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50OiIuZm9ybWF0KAogICAgICAgICAgICAgICAgICBjb3VudChsZW4oZW52aXJvbm1lbnRfY2hhbmdlZCksICJ0ZXN0IikpKQogICAgICAgICBwcmludGxpc3QoZW52aXJvbm1lbnRfY2hhbmdlZCkKLSAgICBpZiBza2lwcGVkIGFuZCBub3QgcXVpZXQ6CisgICAgaWYgc2tpcHBlZCBhbmQgbm90IG5zLnF1aWV0OgogICAgICAgICBwcmludChjb3VudChsZW4oc2tpcHBlZCksICJ0ZXN0IiksICJza2lwcGVkOiIpCiAgICAgICAgIHByaW50bGlzdChza2lwcGVkKQogCi0gICAgICAgIGUgPSBfRXhwZWN0ZWRTa2lwcygpCi0gICAgICAgIHBsYXQgPSBzeXMucGxhdGZvcm0KLSAgICAgICAgaWYgZS5pc3ZhbGlkKCk6Ci0gICAgICAgICAgICBzdXJwcmlzZSA9IHNldChza2lwcGVkKSAtIGUuZ2V0ZXhwZWN0ZWQoKSAtIHNldChyZXNvdXJjZV9kZW5pZWRzKQotICAgICAgICAgICAgaWYgc3VycHJpc2U6Ci0gICAgICAgICAgICAgICAgcHJpbnQoY291bnQobGVuKHN1cnByaXNlKSwgInNraXAiKSwgXAotICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIG9uIiwgcGxhdCArICI6IikKLSAgICAgICAgICAgICAgICBwcmludGxpc3Qoc3VycHJpc2UpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCJUaG9zZSBza2lwcyBhcmUgYWxsIGV4cGVjdGVkIG9uIiwgcGxhdCArICIuIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50KCJBc2sgc29tZW9uZSB0byB0ZWFjaCByZWdydGVzdC5weSBhYm91dCB3aGljaCB0ZXN0cyBhcmUiKQotICAgICAgICAgICAgcHJpbnQoImV4cGVjdGVkIHRvIGdldCBza2lwcGVkIG9uIiwgcGxhdCArICIuIikKLQotICAgIGlmIHZlcmJvc2UyIGFuZCBiYWQ6CisgICAgaWYgbnMudmVyYm9zZTIgYW5kIGJhZDoKICAgICAgICAgcHJpbnQoIlJlLXJ1bm5pbmcgZmFpbGVkIHRlc3RzIGluIHZlcmJvc2UgbW9kZSIpCi0gICAgICAgIGZvciB0ZXN0IGluIGJhZDoKKyAgICAgICAgZm9yIHRlc3QgaW4gYmFkWzpdOgogICAgICAgICAgICAgcHJpbnQoIlJlLXJ1bm5pbmcgdGVzdCAlciBpbiB2ZXJib3NlIG1vZGUiICUgdGVzdCkKICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHZlcmJvc2UgPSBUcnVlCi0gICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIHF1aWV0LCBodW50cmxlYWtzLCBkZWJ1ZywgdGltZW91dD10aW1lb3V0KQorICAgICAgICAgICAgICAgIG5zLnZlcmJvc2UgPSBUcnVlCisgICAgICAgICAgICAgICAgb2sgPSBydW50ZXN0KHRlc3QsIFRydWUsIG5zLnF1aWV0LCBucy5odW50cmxlYWtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PW5zLnRpbWVvdXQpCiAgICAgICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CiAgICAgICAgICAgICAgICAgIyBwcmludCBhIG5ld2xpbmUgc2VwYXJhdGUgZnJvbSB0aGUgXkMKICAgICAgICAgICAgICAgICBwcmludCgpCiAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGV4Y2VwdDoKLSAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBpZiBva1swXSBpbiB7UEFTU0VELCBFTlZfQ0hBTkdFRCwgU0tJUFBFRCwgUkVTT1VSQ0VfREVOSUVEfToKKyAgICAgICAgICAgICAgICAgICAgYmFkLnJlbW92ZSh0ZXN0KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgYmFkOgorICAgICAgICAgICAgICAgIHByaW50KGNvdW50KGxlbihiYWQpLCAndGVzdCcpLCAiZmFpbGVkIGFnYWluOiIpCisgICAgICAgICAgICAgICAgcHJpbnRsaXN0KGJhZCkKIAotICAgIGlmIHNpbmdsZToKKyAgICBpZiBucy5zaW5nbGU6CiAgICAgICAgIGlmIG5leHRfc2luZ2xlX3Rlc3Q6CiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3JykgYXMgZnA6CiAgICAgICAgICAgICAgICAgZnAud3JpdGUobmV4dF9zaW5nbGVfdGVzdCArICdcbicpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy51bmxpbmsoZmlsZW5hbWUpCiAKLSAgICBpZiB0cmFjZToKKyAgICBpZiBucy50cmFjZToKICAgICAgICAgciA9IHRyYWNlci5yZXN1bHRzKCkKLSAgICAgICAgci53cml0ZV9yZXN1bHRzKHNob3dfbWlzc2luZz1UcnVlLCBzdW1tYXJ5PVRydWUsIGNvdmVyZGlyPWNvdmVyZGlyKQorICAgICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9bnMuY292ZXJkaXIpCiAKLSAgICBpZiBydW5sZWFrczoKKyAgICBpZiBucy5ydW5sZWFrczoKICAgICAgICAgb3Muc3lzdGVtKCJsZWFrcyAlZCIgJSBvcy5nZXRwaWQoKSkKIAogICAgIHN5cy5leGl0KGxlbihiYWQpID4gMCBvciBpbnRlcnJ1cHRlZCkKQEAgLTg3Nyw3ICs5MTMsNyBAQAogICAgIGF0ZXhpdC5yZWdpc3RlcihyZXN0b3JlX3N0ZG91dCkKIAogZGVmIHJ1bnRlc3QodGVzdCwgdmVyYm9zZSwgcXVpZXQsCi0gICAgICAgICAgICBodW50cmxlYWtzPUZhbHNlLCBkZWJ1Zz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLAorICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgdXNlX3Jlc291cmNlcz1Ob25lLAogICAgICAgICAgICAgb3V0cHV0X29uX2ZhaWx1cmU9RmFsc2UsIGZhaWxmYXN0PUZhbHNlLCBtYXRjaF90ZXN0cz1Ob25lLAogICAgICAgICAgICAgdGltZW91dD1Ob25lKToKICAgICAiIiJSdW4gYSBzaW5nbGUgdGVzdC4KQEAgLTg4NSwxNCArOTIxLDE1IEBACiAgICAgdGVzdCAtLSB0aGUgbmFtZSBvZiB0aGUgdGVzdAogICAgIHZlcmJvc2UgLS0gaWYgdHJ1ZSwgcHJpbnQgbW9yZSBtZXNzYWdlcwogICAgIHF1aWV0IC0tIGlmIHRydWUsIGRvbid0IHByaW50ICdza2lwcGVkJyBtZXNzYWdlcyAocHJvYmFibHkgcmVkdW5kYW50KQotICAgIHRlc3RfdGltZXMgLS0gYSBsaXN0IG9mICh0aW1lLCB0ZXN0X25hbWUpIHBhaXJzCiAgICAgaHVudHJsZWFrcyAtLSBydW4gbXVsdGlwbGUgdGltZXMgdG8gdGVzdCBmb3IgbGVha3M7IHJlcXVpcmVzIGEgZGVidWcKICAgICAgICAgICAgICAgICAgIGJ1aWxkOyBhIHRyaXBsZSBjb3JyZXNwb25kaW5nIHRvIC1SJ3MgdGhyZWUgYXJndW1lbnRzCisgICAgdXNlX3Jlc291cmNlcyAtLSBsaXN0IG9mIGV4dHJhIHJlc291cmNlcyB0byB1c2UKICAgICBvdXRwdXRfb25fZmFpbHVyZSAtLSBpZiB0cnVlLCBkaXNwbGF5IHRlc3Qgb3V0cHV0IG9uIGZhaWx1cmUKICAgICB0aW1lb3V0IC0tIGR1bXAgdGhlIHRyYWNlYmFjayBhbmQgZXhpdCBpZiBhIHRlc3QgdGFrZXMgbW9yZSB0aGFuCiAgICAgICAgICAgICAgICB0aW1lb3V0IHNlY29uZHMKKyAgICBmYWlsZmFzdCwgbWF0Y2hfdGVzdHMgLS0gU2VlIHJlZ3J0ZXN0IGNvbW1hbmQtbGluZSBmbGFncyBmb3IgdGhlc2UuCiAKLSAgICBSZXR1cm5zIG9uZSBvZiB0aGUgdGVzdCByZXN1bHQgY29uc3RhbnRzOgorICAgIFJldHVybnMgdGhlIHR1cGxlIHJlc3VsdCwgdGVzdF90aW1lLCB3aGVyZSByZXN1bHQgaXMgb25lIG9mIHRoZSBjb25zdGFudHM6CiAgICAgICAgIElOVEVSUlVQVEVEICAgICAgS2V5Ym9hcmRJbnRlcnJ1cHQgd2hlbiBydW4gdW5kZXIgLWoKICAgICAgICAgUkVTT1VSQ0VfREVOSUVEICB0ZXN0IHNraXBwZWQgYmVjYXVzZSByZXNvdXJjZSBkZW5pZWQKICAgICAgICAgU0tJUFBFRCAgICAgICAgICB0ZXN0IHNraXBwZWQgZm9yIHNvbWUgb3RoZXIgcmVhc29uCkBAIC05MzAsNyArOTY3LDcgQEAKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc3RyZWFtCiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IHN0cmVhbQogICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZywgZGlzcGxheV9mYWlsdXJlPUZhbHNlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mYWlsdXJlPUZhbHNlKQogICAgICAgICAgICAgICAgIGlmIHJlc3VsdFswXSA9PSBGQUlMRUQ6CiAgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IHN0cmVhbS5nZXR2YWx1ZSgpCiAgICAgICAgICAgICAgICAgICAgIG9yaWdfc3RkZXJyLndyaXRlKG91dHB1dCkKQEAgLTk0MCw3ICs5NzcsNyBAQAogICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBvcmlnX3N0ZGVycgogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc3VwcG9ydC52ZXJib3NlID0gdmVyYm9zZSAgIyBUZWxsIHRlc3RzIHRvIGJlIG1vZGVyYXRlbHkgcXVpZXQKLSAgICAgICAgICAgIHJlc3VsdCA9IHJ1bnRlc3RfaW5uZXIodGVzdCwgdmVyYm9zZSwgcXVpZXQsIGh1bnRybGVha3MsIGRlYnVnLAorICAgICAgICAgICAgcmVzdWx0ID0gcnVudGVzdF9pbm5lcih0ZXN0LCB2ZXJib3NlLCBxdWlldCwgaHVudHJsZWFrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzcGxheV9mYWlsdXJlPW5vdCB2ZXJib3NlKQogICAgICAgICByZXR1cm4gcmVzdWx0CiAgICAgZmluYWxseToKQEAgLTk5MiwxMCArMTAyOSwxMiBAQAogICAgICAgICAgICAgICAgICAnb3MuZW52aXJvbicsICdzeXMucGF0aCcsICdzeXMucGF0aF9ob29rcycsICdfX2ltcG9ydF9fJywKICAgICAgICAgICAgICAgICAgJ3dhcm5pbmdzLmZpbHRlcnMnLCAnYXN5bmNvcmUuc29ja2V0X21hcCcsCiAgICAgICAgICAgICAgICAgICdsb2dnaW5nLl9oYW5kbGVycycsICdsb2dnaW5nLl9oYW5kbGVyTGlzdCcsICdzeXMuZ2V0dHJhY2UnLAotICAgICAgICAgICAgICAgICAnc3lzLndhcm5vcHRpb25zJywgJ3RocmVhZGluZy5fZGFuZ2xpbmcnLAotICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nJywKKyAgICAgICAgICAgICAgICAgJ3N5cy53YXJub3B0aW9ucycsCisgICAgICAgICAgICAgICAgICMgbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2NsZWFudXAoKSBtYXkgcmVsZWFzZSByZWYKKyAgICAgICAgICAgICAgICAgIyB0byBhIHRocmVhZCwgc28gY2hlY2sgcHJvY2Vzc2VzIGZpcnN0LgorICAgICAgICAgICAgICAgICAnbXVsdGlwcm9jZXNzaW5nLnByb2Nlc3MuX2RhbmdsaW5nJywgJ3RocmVhZGluZy5fZGFuZ2xpbmcnLAogICAgICAgICAgICAgICAgICAnc3lzY29uZmlnLl9DT05GSUdfVkFSUycsICdzeXNjb25maWcuX0lOU1RBTExfU0NIRU1FUycsCi0gICAgICAgICAgICAgICAgICdzdXBwb3J0LlRFU1RGTicsCisgICAgICAgICAgICAgICAgICdmaWxlcycsICdsb2NhbGUnLCAnd2FybmluZ3Muc2hvd3dhcm5pbmcnLAogICAgICAgICAgICAgICAgICkKIAogICAgIGRlZiBnZXRfc3lzX2FyZ3Yoc2VsZik6CkBAIC0xMTIzLDYgKzExNjIsOCBAQAogICAgIGRlZiBnZXRfbXVsdGlwcm9jZXNzaW5nX3Byb2Nlc3NfX2RhbmdsaW5nKHNlbGYpOgogICAgICAgICBpZiBub3QgbXVsdGlwcm9jZXNzaW5nOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBVbmpvaW5lZCBwcm9jZXNzIG9iamVjdHMgY2FuIHN1cnZpdmUgYWZ0ZXIgcHJvY2VzcyBleGl0cworICAgICAgICBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fY2xlYW51cCgpCiAgICAgICAgICMgVGhpcyBjb3BpZXMgdGhlIHdlYWtyZWZzIHdpdGhvdXQgbWFraW5nIGFueSBzdHJvbmcgcmVmZXJlbmNlCiAgICAgICAgIHJldHVybiBtdWx0aXByb2Nlc3NpbmcucHJvY2Vzcy5fZGFuZ2xpbmcuY29weSgpCiAgICAgZGVmIHJlc3RvcmVfbXVsdGlwcm9jZXNzaW5nX3Byb2Nlc3NfX2RhbmdsaW5nKHNlbGYsIHNhdmVkKToKQEAgLTExNDksMjAgKzExOTAsMzUgQEAKICAgICAgICAgc3lzY29uZmlnLl9JTlNUQUxMX1NDSEVNRVMuY2xlYXIoKQogICAgICAgICBzeXNjb25maWcuX0lOU1RBTExfU0NIRU1FUy51cGRhdGUoc2F2ZWRbMl0pCiAKLSAgICBkZWYgZ2V0X3N1cHBvcnRfVEVTVEZOKHNlbGYpOgotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShzdXBwb3J0LlRFU1RGTik6Ci0gICAgICAgICAgICByZXN1bHQgPSAnZicKLSAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHN1cHBvcnQuVEVTVEZOKToKLSAgICAgICAgICAgIHJlc3VsdCA9ICdkJwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmVzdWx0ID0gTm9uZQotICAgICAgICByZXR1cm4gcmVzdWx0Ci0gICAgZGVmIHJlc3RvcmVfc3VwcG9ydF9URVNURk4oc2VsZiwgc2F2ZWRfdmFsdWUpOgotICAgICAgICBpZiBzYXZlZF92YWx1ZSBpcyBOb25lOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc3VwcG9ydC5URVNURk4pOgotICAgICAgICAgICAgICAgIG9zLnVubGluayhzdXBwb3J0LlRFU1RGTikKLSAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihzdXBwb3J0LlRFU1RGTik6Ci0gICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShzdXBwb3J0LlRFU1RGTikKKyAgICBkZWYgZ2V0X2ZpbGVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc29ydGVkKGZuICsgKCcvJyBpZiBvcy5wYXRoLmlzZGlyKGZuKSBlbHNlICcnKQorICAgICAgICAgICAgICAgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKCkpCisgICAgZGVmIHJlc3RvcmVfZmlsZXMoc2VsZiwgc2F2ZWRfdmFsdWUpOgorICAgICAgICBmbiA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIGlmIGZuIG5vdCBpbiBzYXZlZF92YWx1ZSBhbmQgKGZuICsgJy8nKSBub3QgaW4gc2F2ZWRfdmFsdWU6CisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbik6CisgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoZm4pCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZm4pOgorICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGZuKQorCisgICAgX2xjID0gW2dldGF0dHIobG9jYWxlLCBsYykgZm9yIGxjIGluIGRpcihsb2NhbGUpCisgICAgICAgICAgIGlmIGxjLnN0YXJ0c3dpdGgoJ0xDXycpXQorICAgIGRlZiBnZXRfbG9jYWxlKHNlbGYpOgorICAgICAgICBwYWlyaW5ncyA9IFtdCisgICAgICAgIGZvciBsYyBpbiBzZWxmLl9sYzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwYWlyaW5ncy5hcHBlbmQoKGxjLCBsb2NhbGUuc2V0bG9jYWxlKGxjLCBOb25lKSkpCisgICAgICAgICAgICBleGNlcHQgKFR5cGVFcnJvciwgVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgcmV0dXJuIHBhaXJpbmdzCisgICAgZGVmIHJlc3RvcmVfbG9jYWxlKHNlbGYsIHNhdmVkKToKKyAgICAgICAgZm9yIGxjLCBzZXR0aW5nIGluIHNhdmVkOgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsYywgc2V0dGluZykKKworICAgIGRlZiBnZXRfd2FybmluZ3Nfc2hvd3dhcm5pbmcoc2VsZik6CisgICAgICAgIHJldHVybiB3YXJuaW5ncy5zaG93d2FybmluZworICAgIGRlZiByZXN0b3JlX3dhcm5pbmdzX3Nob3d3YXJuaW5nKHNlbGYsIGZ4bik6CisgICAgICAgIHdhcm5pbmdzLnNob3d3YXJuaW5nID0gZnhuCiAKICAgICBkZWYgcmVzb3VyY2VfaW5mbyhzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5yZXNvdXJjZXM6CkBAIC0xMTk4LDcgKzEyNTQsNyBAQAogCiAKIGRlZiBydW50ZXN0X2lubmVyKHRlc3QsIHZlcmJvc2UsIHF1aWV0LAotICAgICAgICAgICAgICAgICAgaHVudHJsZWFrcz1GYWxzZSwgZGVidWc9RmFsc2UsIGRpc3BsYXlfZmFpbHVyZT1UcnVlKToKKyAgICAgICAgICAgICAgICAgIGh1bnRybGVha3M9RmFsc2UsIGRpc3BsYXlfZmFpbHVyZT1UcnVlKToKICAgICBzdXBwb3J0LnVubG9hZCh0ZXN0KQogCiAgICAgdGVzdF90aW1lID0gMC4wCkBAIC0xMjExLDE4ICsxMjY3LDE4IEBACiAgICAgICAgICAgICBhYnN0ZXN0ID0gJ3Rlc3QuJyArIHRlc3QKICAgICAgICAgd2l0aCBzYXZlZF90ZXN0X2Vudmlyb25tZW50KHRlc3QsIHZlcmJvc2UsIHF1aWV0KSBhcyBlbnZpcm9ubWVudDoKICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSB0aW1lLnRpbWUoKQotICAgICAgICAgICAgdGhlX3BhY2thZ2UgPSBfX2ltcG9ydF9fKGFic3Rlc3QsIGdsb2JhbHMoKSwgbG9jYWxzKCksIFtdKQotICAgICAgICAgICAgdGhlX21vZHVsZSA9IGdldGF0dHIodGhlX3BhY2thZ2UsIHRlc3QpCisgICAgICAgICAgICB0aGVfbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoYWJzdGVzdCkKICAgICAgICAgICAgICMgSWYgdGhlIHRlc3QgaGFzIGEgdGVzdF9tYWluLCB0aGF0IHdpbGwgcnVuIHRoZSBhcHByb3ByaWF0ZQogICAgICAgICAgICAgIyB0ZXN0cy4gIElmIG5vdCwgdXNlIG5vcm1hbCB1bml0dGVzdCB0ZXN0IGxvYWRpbmcuCiAgICAgICAgICAgICB0ZXN0X3J1bm5lciA9IGdldGF0dHIodGhlX21vZHVsZSwgInRlc3RfbWFpbiIsIE5vbmUpCiAgICAgICAgICAgICBpZiB0ZXN0X3J1bm5lciBpcyBOb25lOgotICAgICAgICAgICAgICAgIHRlc3RzID0gdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21Nb2R1bGUodGhlX21vZHVsZSkKLSAgICAgICAgICAgICAgICB0ZXN0X3J1bm5lciA9IGxhbWJkYTogc3VwcG9ydC5ydW5fdW5pdHRlc3QodGVzdHMpCisgICAgICAgICAgICAgICAgZGVmIHRlc3RfcnVubmVyKCk6CisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQorICAgICAgICAgICAgICAgICAgICB0ZXN0cyA9IGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKHRoZV9tb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3RzKQogICAgICAgICAgICAgdGVzdF9ydW5uZXIoKQogICAgICAgICAgICAgaWYgaHVudHJsZWFrczoKLSAgICAgICAgICAgICAgICByZWZsZWFrID0gZGFzaF9SKHRoZV9tb2R1bGUsIHRlc3QsIHRlc3RfcnVubmVyLAotICAgICAgICAgICAgICAgICAgICBodW50cmxlYWtzKQorICAgICAgICAgICAgICAgIHJlZmxlYWsgPSBkYXNoX1IodGhlX21vZHVsZSwgdGVzdCwgdGVzdF9ydW5uZXIsIGh1bnRybGVha3MpCiAgICAgICAgICAgICB0ZXN0X3RpbWUgPSB0aW1lLnRpbWUoKSAtIHN0YXJ0X3RpbWUKICAgICBleGNlcHQgc3VwcG9ydC5SZXNvdXJjZURlbmllZCBhcyBtc2c6CiAgICAgICAgIGlmIG5vdCBxdWlldDoKQEAgLTEzMjgsNDEgKzEzODQsNTAgQEAKICAgICAgICAgZm9yIG9iaiBpbiBhYmMuX19zdWJjbGFzc2VzX18oKSArIFthYmNdOgogICAgICAgICAgICAgYWJjc1tvYmpdID0gb2JqLl9hYmNfcmVnaXN0cnkuY29weSgpCiAKLSAgICBpZiBpbmRpcmVjdF90ZXN0OgotICAgICAgICBkZWYgcnVuX3RoZV90ZXN0KCk6Ci0gICAgICAgICAgICBpbmRpcmVjdF90ZXN0KCkKLSAgICBlbHNlOgotICAgICAgICBkZWYgcnVuX3RoZV90ZXN0KCk6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbdGhlX21vZHVsZS5fX25hbWVfX10KLSAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgdGhlX21vZHVsZS5fX25hbWVfXykKLQotICAgIGRlbHRhcyA9IFtdCiAgICAgbndhcm11cCwgbnRyYWNrZWQsIGZuYW1lID0gaHVudHJsZWFrcwogICAgIGZuYW1lID0gb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsIGZuYW1lKQogICAgIHJlcGNvdW50ID0gbndhcm11cCArIG50cmFja2VkCisgICAgcmNfZGVsdGFzID0gWzBdICogcmVwY291bnQKKyAgICBhbGxvY19kZWx0YXMgPSBbMF0gKiByZXBjb3VudAorCiAgICAgcHJpbnQoImJlZ2lubmluZyIsIHJlcGNvdW50LCAicmVwZXRpdGlvbnMiLCBmaWxlPXN5cy5zdGRlcnIpCiAgICAgcHJpbnQoKCIxMjM0NTY3ODkwIioocmVwY291bnQvLzEwICsgMSkpWzpyZXBjb3VudF0sIGZpbGU9c3lzLnN0ZGVycikKICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQogICAgIGZvciBpIGluIHJhbmdlKHJlcGNvdW50KToKLSAgICAgICAgcmNfYmVmb3JlID0gc3lzLmdldHRvdGFscmVmY291bnQoKQotICAgICAgICBydW5fdGhlX3Rlc3QoKQorICAgICAgICBpbmRpcmVjdF90ZXN0KCkKKyAgICAgICAgYWxsb2NfYWZ0ZXIsIHJjX2FmdGVyID0gZGFzaF9SX2NsZWFudXAoZnMsIHBzLCBwaWMsIHpkYywgYWJjcykKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnLicpCiAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2goKQotICAgICAgICBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKQotICAgICAgICByY19hZnRlciA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKICAgICAgICAgaWYgaSA+PSBud2FybXVwOgotICAgICAgICAgICAgZGVsdGFzLmFwcGVuZChyY19hZnRlciAtIHJjX2JlZm9yZSkKKyAgICAgICAgICAgIHJjX2RlbHRhc1tpXSA9IHJjX2FmdGVyIC0gcmNfYmVmb3JlCisgICAgICAgICAgICBhbGxvY19kZWx0YXNbaV0gPSBhbGxvY19hZnRlciAtIGFsbG9jX2JlZm9yZQorICAgICAgICBhbGxvY19iZWZvcmUsIHJjX2JlZm9yZSA9IGFsbG9jX2FmdGVyLCByY19hZnRlcgogICAgIHByaW50KGZpbGU9c3lzLnN0ZGVycikKLSAgICBpZiBhbnkoZGVsdGFzKToKLSAgICAgICAgbXNnID0gJyVzIGxlYWtlZCAlcyByZWZlcmVuY2VzLCBzdW09JXMnICUgKHRlc3QsIGRlbHRhcywgc3VtKGRlbHRhcykpCi0gICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQotICAgICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKLSAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAiYSIpIGFzIHJlZnJlcDoKLSAgICAgICAgICAgIHByaW50KG1zZywgZmlsZT1yZWZyZXApCi0gICAgICAgICAgICByZWZyZXAuZmx1c2goKQotICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHJldHVybiBGYWxzZQorICAgICMgVGhlc2UgY2hlY2tlcnMgcmV0dXJuIEZhbHNlIG9uIHN1Y2Nlc3MsIFRydWUgb24gZmFpbHVyZQorICAgIGRlZiBjaGVja19yY19kZWx0YXMoZGVsdGFzKToKKyAgICAgICAgcmV0dXJuIGFueShkZWx0YXMpCisgICAgZGVmIGNoZWNrX2FsbG9jX2RlbHRhcyhkZWx0YXMpOgorICAgICAgICAjIEF0IGxlYXN0IDEvM3JkIG9mIDBzCisgICAgICAgIGlmIDMgKiBkZWx0YXMuY291bnQoMCkgPCBsZW4oZGVsdGFzKToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICMgTm90aGluZyBlbHNlIHRoYW4gMXMsIDBzIGFuZCAtMXMKKyAgICAgICAgaWYgbm90IHNldChkZWx0YXMpIDw9IHsxLDAsLTF9OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgZmFpbGVkID0gRmFsc2UKKyAgICBmb3IgZGVsdGFzLCBpdGVtX25hbWUsIGNoZWNrZXIgaW4gWworICAgICAgICAocmNfZGVsdGFzLCAncmVmZXJlbmNlcycsIGNoZWNrX3JjX2RlbHRhcyksCisgICAgICAgIChhbGxvY19kZWx0YXMsICdtZW1vcnkgYmxvY2tzJywgY2hlY2tfYWxsb2NfZGVsdGFzKV06CisgICAgICAgIGlmIGNoZWNrZXIoZGVsdGFzKToKKyAgICAgICAgICAgIG1zZyA9ICclcyBsZWFrZWQgJXMgJXMsIHN1bT0lcycgJSAoCisgICAgICAgICAgICAgICAgdGVzdCwgZGVsdGFzW253YXJtdXA6XSwgaXRlbV9uYW1lLCBzdW0oZGVsdGFzKSkKKyAgICAgICAgICAgIHByaW50KG1zZywgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm5hbWUsICJhIikgYXMgcmVmcmVwOgorICAgICAgICAgICAgICAgIHByaW50KG1zZywgZmlsZT1yZWZyZXApCisgICAgICAgICAgICAgICAgcmVmcmVwLmZsdXNoKCkKKyAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICByZXR1cm4gZmFpbGVkCiAKIGRlZiBkYXNoX1JfY2xlYW51cChmcywgcHMsIHBpYywgemRjLCBhYmNzKToKICAgICBpbXBvcnQgZ2MsIGNvcHlyZWcKQEAgLTE0MjgsOCArMTQ5MywxMSBAQAogICAgIGVsc2U6CiAgICAgICAgIGN0eXBlcy5fcmVzZXRfY2FjaGUoKQogCi0gICAgIyBDb2xsZWN0IGN5Y2xpYyB0cmFzaC4KKyAgICAjIENvbGxlY3QgY3ljbGljIHRyYXNoIGFuZCByZWFkIG1lbW9yeSBzdGF0aXN0aWNzIGltbWVkaWF0ZWx5IGFmdGVyLgorICAgIGZ1bmMxID0gc3lzLmdldGFsbG9jYXRlZGJsb2NrcworICAgIGZ1bmMyID0gc3lzLmdldHRvdGFscmVmY291bnQKICAgICBnYy5jb2xsZWN0KCkKKyAgICByZXR1cm4gZnVuYzEoKSwgZnVuYzIoKQogCiBkZWYgd2FybV9jYWNoZXMoKToKICAgICAjIGNoYXIgY2FjaGUKQEAgLTE0NzIsMzA3ICsxNTQwLDEwIEBACiAgICAgcHJpbnQoZmlsbCgnICcuam9pbihzdHIoZWx0KSBmb3IgZWx0IGluIHNvcnRlZCh4KSksIHdpZHRoLAogICAgICAgICAgICAgICAgaW5pdGlhbF9pbmRlbnQ9YmxhbmtzLCBzdWJzZXF1ZW50X2luZGVudD1ibGFua3MpKQogCi0jIE1hcCBzeXMucGxhdGZvcm0gdG8gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYmFzZW5hbWVzIG9mIHRlc3RzCi0jIGV4cGVjdGVkIHRvIGJlIHNraXBwZWQgb24gdGhhdCBwbGF0Zm9ybS4KLSMKLSMgU3BlY2lhbCBjYXNlczoKLSMgICAgIHRlc3RfcGVwMjc3Ci0jICAgICAgICAgVGhlIF9FeHBlY3RlZFNraXBzIGNvbnN0cnVjdG9yIGFkZHMgdGhpcyB0byB0aGUgc2V0IG9mIGV4cGVjdGVkCi0jICAgICAgICAgc2tpcHMgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXMuCi0jICAgICB0ZXN0X3RpbWVvdXQKLSMgICAgICAgICBDb250cm9sbGVkIGJ5IHRlc3RfdGltZW91dC5za2lwX2V4cGVjdGVkLiAgUmVxdWlyZXMgdGhlIG5ldHdvcmsKLSMgICAgICAgICByZXNvdXJjZSBhbmQgYSBzb2NrZXQgbW9kdWxlLgotIwotIyBUZXN0cyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBza2lwcGVkIGV2ZXJ5d2hlcmUgZXhjZXB0IG9uIG9uZSBwbGF0Zm9ybQotIyBhcmUgYWxzbyBoYW5kbGVkIHNlcGFyYXRlbHkuCiAKLV9leHBlY3RhdGlvbnMgPSAoCi0gICAgKCd3aW4zMicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X19sb2NhbGUKLSAgICAgICAgdGVzdF9jcnlwdAotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RibQotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9mY250bAotICAgICAgICB0ZXN0X2ZvcmsxCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZGJtX25kYm0KLSAgICAgICAgdGVzdF9ncnAKLSAgICAgICAgdGVzdF9pb2N0bAotICAgICAgICB0ZXN0X2xhcmdlZmlsZQotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BpcGVzCi0gICAgICAgIHRlc3RfcG9sbAotICAgICAgICB0ZXN0X3Bvc2l4Ci0gICAgICAgIHRlc3RfcHR5Ci0gICAgICAgIHRlc3RfcHdkCi0gICAgICAgIHRlc3RfcmVzb3VyY2UKLSAgICAgICAgdGVzdF9zaWduYWwKLSAgICAgICAgdGVzdF9zeXNsb2cKLSAgICAgICAgdGVzdF90aHJlYWRzaWduYWxzCi0gICAgICAgIHRlc3Rfd2FpdDMKLSAgICAgICAgdGVzdF93YWl0NAotICAgICAgICAiIiIpLAotICAgICgnbGludXgnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3Rfb3NzYXVkaW9kZXYKLSAgICAgICAgIiIiKSwKLSAgICAoJ3VuaXh3YXJlJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgIiIiKSwKLSAgICAoJ29wZW51bml4JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF9zdW5kcnkKLSAgICAgICAgIiIiKSwKLSAgICAoJ3Njb19zdicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2FzeW5jaGF0Ci0gICAgICAgIHRlc3RfZm9yazEKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2dldHRleHQKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9xdWV1ZQotICAgICAgICB0ZXN0X3NheAotICAgICAgICB0ZXN0X3N1bmRyeQotICAgICAgICB0ZXN0X3RocmVhZAotICAgICAgICB0ZXN0X3RocmVhZGVkX2ltcG9ydAotICAgICAgICB0ZXN0X3RocmVhZGVkdGVtcGZpbGUKLSAgICAgICAgdGVzdF90aHJlYWRpbmcKLSAgICAgICAgIiIiKSwKLSAgICAoJ2RhcndpbicsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X19sb2NhbGUKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kZXZwb2xsCi0gICAgICAgIHRlc3RfZXBvbGwKLSAgICAgICAgdGVzdF9kYm1fZ251Ci0gICAgICAgIHRlc3RfZ2RiCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbG9jYWxlCi0gICAgICAgIHRlc3RfbWluaWRvbQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgIHRlc3RfcG9sbAotICAgICAgICAiIiIpLAotICAgICgnc3Vub3MnLAotICAgICAgICAiIiIKLSAgICAgICAgdGVzdF9jdXJzZXMKLSAgICAgICAgdGVzdF9kYm0KLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2txdWV1ZQotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9nemlwCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3ppcGZpbGUKLSAgICAgICAgdGVzdF96bGliCi0gICAgICAgICIiIiksCi0gICAgKCdocC11eCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2d6aXAKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9taW5pZG9tCi0gICAgICAgIHRlc3Rfb3BlbnB0eQotICAgICAgICB0ZXN0X3B5ZXhwYXQKLSAgICAgICAgdGVzdF9zYXgKLSAgICAgICAgdGVzdF96aXBmaWxlCi0gICAgICAgIHRlc3RfemxpYgotICAgICAgICAiIiIpLAotICAgICgnY3lnd2luJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3Vyc2VzCi0gICAgICAgIHRlc3RfZGJtCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfaW9jdGwKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9sYXJnZWZpbGUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3NvY2tldHNlcnZlcgotICAgICAgICAiIiIpLAotICAgICgnb3MyZW14JywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfYXVkaW9vcAotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3Rfa3F1ZXVlCi0gICAgICAgIHRlc3RfbGFyZ2VmaWxlCi0gICAgICAgIHRlc3RfbW1hcAotICAgICAgICB0ZXN0X29wZW5wdHkKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3B0eQotICAgICAgICB0ZXN0X3Jlc291cmNlCi0gICAgICAgIHRlc3Rfc2lnbmFsCi0gICAgICAgICIiIiksCi0gICAgKCdmcmVlYnNkJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X29zc2F1ZGlvZGV2Ci0gICAgICAgIHRlc3RfcGVwMjc3Ci0gICAgICAgIHRlc3RfcHR5Ci0gICAgICAgIHRlc3Rfc29ja2V0c2VydmVyCi0gICAgICAgIHRlc3RfdGNsCi0gICAgICAgIHRlc3RfdGsKLSAgICAgICAgdGVzdF90dGtfZ3Vpb25seQotICAgICAgICB0ZXN0X3R0a190ZXh0b25seQotICAgICAgICB0ZXN0X3RpbWVvdXQKLSAgICAgICAgdGVzdF91cmxsaWJuZXQKLSAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgIiIiKSwKLSAgICAoJ2FpeCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2J6MgotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2d6aXAKLSAgICAgICAgdGVzdF9rcXVldWUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF96aXBpbXBvcnQKLSAgICAgICAgdGVzdF96bGliCi0gICAgICAgICIiIiksCi0gICAgKCdvcGVuYnNkJywKLSAgICAgICAgIiIiCi0gICAgICAgIHRlc3RfY3R5cGVzCi0gICAgICAgIHRlc3RfZGV2cG9sbAotICAgICAgICB0ZXN0X2Vwb2xsCi0gICAgICAgIHRlc3RfZGJtX2dudQotICAgICAgICB0ZXN0X2xvY2FsZQotICAgICAgICB0ZXN0X25vcm1hbGl6YXRpb24KLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgIiIiKSwKLSAgICAoJ25ldGJzZCcsCi0gICAgICAgICIiIgotICAgICAgICB0ZXN0X2N0eXBlcwotICAgICAgICB0ZXN0X2N1cnNlcwotICAgICAgICB0ZXN0X2RldnBvbGwKLSAgICAgICAgdGVzdF9lcG9sbAotICAgICAgICB0ZXN0X2RibV9nbnUKLSAgICAgICAgdGVzdF9sb2NhbGUKLSAgICAgICAgdGVzdF9vc3NhdWRpb2RldgotICAgICAgICB0ZXN0X3BlcDI3NwotICAgICAgICB0ZXN0X3RjbAotICAgICAgICB0ZXN0X3RrCi0gICAgICAgIHRlc3RfdHRrX2d1aW9ubHkKLSAgICAgICAgdGVzdF90dGtfdGV4dG9ubHkKLSAgICAgICAgdGVzdF9tdWx0aXByb2Nlc3NpbmcKLSAgICAgICAgIiIiKSwKLSkKLQotY2xhc3MgX0V4cGVjdGVkU2tpcHM6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3MucGF0aAotICAgICAgICBmcm9tIHRlc3QgaW1wb3J0IHRlc3RfdGltZW91dAotCi0gICAgICAgIHNlbGYudmFsaWQgPSBGYWxzZQotICAgICAgICBleHBlY3RlZCA9IE5vbmUKLSAgICAgICAgZm9yIGl0ZW0gaW4gX2V4cGVjdGF0aW9uczoKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKGl0ZW1bMF0pOgotICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gaXRlbVsxXQotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGlmIGV4cGVjdGVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgc2VsZi5leHBlY3RlZCA9IHNldChleHBlY3RlZC5zcGxpdCgpKQotCi0gICAgICAgICAgICAjIFRoZXNlIGFyZSBicm9rZW4gdGVzdHMsIGZvciBub3cgc2tpcHBlZCBvbiBldmVyeSBwbGF0Zm9ybS4KLSAgICAgICAgICAgICMgWFhYIEZpeCB0aGVzZSEKLSAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X25pcycpCi0KLSAgICAgICAgICAgICMgZXhwZWN0ZWQgdG8gYmUgc2tpcHBlZCBvbiBldmVyeSBwbGF0Zm9ybSwgZXZlbiBMaW51eAotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXM6Ci0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfcGVwMjc3JykKLQotICAgICAgICAgICAgIyBkb2N0ZXN0LCBwcm9maWxlIGFuZCBjUHJvZmlsZSB0ZXN0cyBmYWlsIHdoZW4gdGhlIGNvZGVjIGZvciB0aGUKLSAgICAgICAgICAgICMgZnMgZW5jb2RpbmcgaXNuJ3QgYnVpbHQgaW4gYmVjYXVzZSBQeVVuaWNvZGVfRGVjb2RlKCkgYWRkcyB0d28KLSAgICAgICAgICAgICMgY2FsbHMgaW50byBQeXRob24uCi0gICAgICAgICAgICBlbmNzID0gKCJ1dGYtOCIsICJsYXRpbi0xIiwgImFzY2lpIiwgIm1iY3MiLCAidXRmLTE2IiwgInV0Zi0zMiIpCi0gICAgICAgICAgICBpZiBzeXMuZ2V0ZmlsZXN5c3RlbWVuY29kaW5nKCkubG93ZXIoKSBub3QgaW4gZW5jczoKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9wcm9maWxlJykKLSAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkLmFkZCgndGVzdF9jUHJvZmlsZScpCi0gICAgICAgICAgICAgICAgc2VsZi5leHBlY3RlZC5hZGQoJ3Rlc3RfZG9jdGVzdCcpCi0KLSAgICAgICAgICAgIGlmIHRlc3RfdGltZW91dC5za2lwX2V4cGVjdGVkOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X3RpbWVvdXQnKQotCi0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKLSAgICAgICAgICAgICAgICAjIHRlc3Rfc3FsaXRlIGlzIG9ubHkgcmVsaWFibGUgb24gV2luZG93cyB3aGVyZSB0aGUgbGlicmFyeQotICAgICAgICAgICAgICAgICMgaXMgZGlzdHJpYnV0ZWQgd2l0aCBQeXRob24KLSAgICAgICAgICAgICAgICBXSU5fT05MWSA9IHsidGVzdF91bmljb2RlX2ZpbGUiLCAidGVzdF93aW5yZWciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3dpbnNvdW5kIiwgInRlc3Rfc3RhcnRmaWxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9zcWxpdGUiLCAidGVzdF9tc2lsaWIifQotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQgfD0gV0lOX09OTFkKLQotICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICdzdW5vczUnOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCd0ZXN0X25pcycpCi0KLSAgICAgICAgICAgIGlmIHN1cHBvcnQucHl0aG9uX2lzX29wdGltaXplZCgpOgotICAgICAgICAgICAgICAgIHNlbGYuZXhwZWN0ZWQuYWRkKCJ0ZXN0X2dkYiIpCi0KLSAgICAgICAgICAgIHNlbGYudmFsaWQgPSBUcnVlCi0KLSAgICBkZWYgaXN2YWxpZChzZWxmKToKLSAgICAgICAgIlJldHVybiB0cnVlIGlmZiBfRXhwZWN0ZWRTa2lwcyBrbm93cyBhYm91dCB0aGUgY3VycmVudCBwbGF0Zm9ybS4iCi0gICAgICAgIHJldHVybiBzZWxmLnZhbGlkCi0KLSAgICBkZWYgZ2V0ZXhwZWN0ZWQoc2VsZik6Ci0gICAgICAgICIiIlJldHVybiBzZXQgb2YgdGVzdCBuYW1lcyB3ZSBleHBlY3QgdG8gc2tpcCBvbiBjdXJyZW50IHBsYXRmb3JtLgotCi0gICAgICAgIHNlbGYuaXN2YWxpZCgpIG11c3QgYmUgdHJ1ZS4KLSAgICAgICAgIiIiCi0KLSAgICAgICAgYXNzZXJ0IHNlbGYuaXN2YWxpZCgpCi0gICAgICAgIHJldHVybiBzZWxmLmV4cGVjdGVkCi0KLWRlZiBfbWFrZV90ZW1wX2Rpcl9mb3JfYnVpbGQoVEVNUERJUik6Ci0gICAgIyBXaGVuIHRlc3RzIGFyZSBydW4gZnJvbSB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeSwgaXQgaXMgYmVzdCBwcmFjdGljZQotICAgICMgdG8ga2VlcCB0aGUgdGVzdCBmaWxlcyBpbiBhIHN1YmZvbGRlci4gIEl0IGVhc2VzIHRoZSBjbGVhbnVwIG9mIGxlZnRvdmVyCi0gICAgIyBmaWxlcyB1c2luZyBjb21tYW5kICJtYWtlIGRpc3RjbGVhbiIuCitkZWYgbWFpbl9pbl90ZW1wX2N3ZCgpOgorICAgICIiIlJ1biBtYWluKCkgaW4gYSB0ZW1wb3Jhcnkgd29ya2luZyBkaXJlY3RvcnkuIiIiCiAgICAgaWYgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgotICAgICAgICBURU1QRElSID0gb3MucGF0aC5qb2luKHN5c2NvbmZpZy5nZXRfY29uZmlnX3Zhcignc3JjZGlyJyksICdidWlsZCcpCi0gICAgICAgIFRFTVBESVIgPSBvcy5wYXRoLmFic3BhdGgoVEVNUERJUikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIoVEVNUERJUikKICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKQEAgLTE3ODEsMTAgKzE1NTIsMTYgQEAKICAgICAjIERlZmluZSBhIHdyaXRhYmxlIHRlbXAgZGlyIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGN3ZCB3aGlsZSBydW5uaW5nCiAgICAgIyB0aGUgdGVzdHMuIFRoZSBuYW1lIG9mIHRoZSBkaXIgaW5jbHVkZXMgdGhlIHBpZCB0byBhbGxvdyBwYXJhbGxlbAogICAgICMgdGVzdGluZyAoc2VlIHRoZSAtaiBvcHRpb24pLgotICAgIFRFU1RDV0QgPSAndGVzdF9weXRob25fe30nLmZvcm1hdChvcy5nZXRwaWQoKSkKKyAgICB0ZXN0X2N3ZCA9ICd0ZXN0X3B5dGhvbl97fScuZm9ybWF0KG9zLmdldHBpZCgpKQorICAgIHRlc3RfY3dkID0gb3MucGF0aC5qb2luKFRFTVBESVIsIHRlc3RfY3dkKQogCi0gICAgVEVTVENXRCA9IG9zLnBhdGguam9pbihURU1QRElSLCBURVNUQ1dEKQotICAgIHJldHVybiBURU1QRElSLCBURVNUQ1dECisgICAgIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJpbHkgY2hhbmdlcyB0aGUgQ1dEIHRvIGEKKyAgICAjIHRlbXBvcmFyeSBhbmQgd3JpdGFibGUgZGlyZWN0b3J5LiAgSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCisgICAgIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuICBUaGUgb3JpZ2luYWwgQ1dEIGlzCisgICAgIyBhdmFpbGFibGUgZnJvbSBzdXBwb3J0LlNBVkVEQ1dELgorICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0ZXN0X2N3ZCwgcXVpZXQ9VHJ1ZSk6CisgICAgICAgIG1haW4oKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgIyBSZW1vdmUgcmVncnRlc3QucHkncyBvd24gZGlyZWN0b3J5IGZyb20gdGhlIG1vZHVsZSBzZWFyY2ggcGF0aC4gRGVzcGl0ZQpAQCAtMTgwOCwxMSArMTU4NSw0IEBACiAgICAgIyBzYW5pdHkgY2hlY2sKICAgICBhc3NlcnQgX19maWxlX18gPT0gb3MucGF0aC5hYnNwYXRoKHN5cy5hcmd2WzBdKQogCi0gICAgVEVNUERJUiwgVEVTVENXRCA9IF9tYWtlX3RlbXBfZGlyX2Zvcl9idWlsZChURU1QRElSKQotCi0gICAgIyBSdW4gdGhlIHRlc3RzIGluIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgdGVtcG9yYXJ5IGNoYW5nZXMgdGhlIENXRCB0byBhCi0gICAgIyB0ZW1wb3JhcnkgYW5kIHdyaXRhYmxlIGRpcmVjdG9yeS4gSWYgaXQncyBub3QgcG9zc2libGUgdG8gY3JlYXRlIG9yCi0gICAgIyBjaGFuZ2UgdGhlIENXRCwgdGhlIG9yaWdpbmFsIENXRCB3aWxsIGJlIHVzZWQuIFRoZSBvcmlnaW5hbCBDV0QgaXMKLSAgICAjIGF2YWlsYWJsZSBmcm9tIHN1cHBvcnQuU0FWRURDV0QuCi0gICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKFRFU1RDV0QsIHF1aWV0PVRydWUpOgotICAgICAgICBtYWluKCkKKyAgICBtYWluX2luX3RlbXBfY3dkKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsIGIvTGliL3Rlc3QvcmV2b2NhdGlvbi5jcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4OWIwOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Jldm9jYXRpb24uY3JsCkBAIC0wLDAgKzEsMTEgQEAKKy0tLS0tQkVHSU4gWDUwOSBDUkwtLS0tLQorTUlJQnBqQ0Jqd0lCQVRBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWVdURW1NQ1FHQTFVRQorQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVkJBTU1EVzkxY2kxagorWVMxelpYSjJaWElYRFRFek1URXlNVEUzTURnME4xb1hEVEl6TURrek1ERTNNRGcwTjFxZ0RqQU1NQW9HQTFVZAorRkFRREFnRUFNQTBHQ1NxR1NJYjNEUUVCQlFVQUE0SUJBUUNOSlhDMm1WS2F1RWVOM0xsUTNadE01Z2tIM0V4SAorK2k0Ym1KanRKbjQ5N1d3dnZvSWVVZHJtVlhnSlFSOTNSdFYzN2had04wU1hNTGxObVVaUEg0ckhoaWhheXc0bQordW5DelZqL09oQ0NZNy9UUGpLdUoxTy8wWGhhTEJwQlZqUU43Ui8xdWpvUktiU2lhL0NEM3ZjbjdGcXh6dzdMSworZlNSQ0tSR1RqMUNaaXV4cnBodEZjaHdBTFhTaUZEeTltcjJaS2hJbWN5cTFQeWRmZ0V6VTc4QVBwT2tNUXNJQworVU5KL2NmM2M5ZW16ZitkVXRjTUVjZWpRM215bkJvNGVJR2cxRVc0MmJ6NHE0aFNqelFsS2NCVjBtdXc1cVhoYworSE94SDJpVEZoUTdTcnZWdUsvZE0xNHJZTTRCNW1TWDNuUkMxa05tWHBTOWozd0pEaHV3bWpIZWQKKy0tLS0tRU5EIFg1MDkgQ1JMLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkgYi9MaWIvdGVzdC9zY3JpcHRfaGVscGVyLnB5CmluZGV4IGFiMjAxNjQuLmQyNzQ5NmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NjcmlwdF9oZWxwZXIucHkKKysrIGIvTGliL3Rlc3Qvc2NyaXB0X2hlbHBlci5weQpAQCAtMSw2ICsxLDcgQEAKICMgQ29tbW9uIHV0aWxpdHkgZnVuY3Rpb25zIHVzZWQgYnkgdmFyaW91cyBzY3JpcHQgZXhlY3V0aW9uIHRlc3RzCiAjICBlLmcuIHRlc3RfY21kX2xpbmUsIHRlc3RfY21kX2xpbmVfc2NyaXB0IGFuZCB0ZXN0X3J1bnB5CiAKK2ltcG9ydCBjb2xsZWN0aW9ucwogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IHN5cwogaW1wb3J0IG9zCkBAIC0xMiwxMyArMTMsNjIgQEAKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB6aXBmaWxlCiAKLWZyb20gaW1wIGltcG9ydCBzb3VyY2VfZnJvbV9jYWNoZQorZnJvbSBpbXBvcnRsaWIudXRpbCBpbXBvcnQgc291cmNlX2Zyb21fY2FjaGUKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBtYWtlX2xlZ2FjeV9weWMsIHN0cmlwX3B5dGhvbl9zdGRlcnIsIHRlbXBfZGlyCiAKKworIyBDYWNoZWQgcmVzdWx0IG9mIHRoZSBleHBlbnNpdmUgdGVzdCBwZXJmb3JtZWQgaW4gdGhlIGZ1bmN0aW9uIGJlbG93LgorX19jYWNoZWRfaW50ZXJwX3JlcXVpcmVzX2Vudmlyb25tZW50ID0gTm9uZQorCitkZWYgX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCk6CisgICAgIiIiCisgICAgUmV0dXJucyBUcnVlIGlmIG91ciBzeXMuZXhlY3V0YWJsZSBpbnRlcnByZXRlciByZXF1aXJlcyBlbnZpcm9ubWVudAorICAgIHZhcmlhYmxlcyBpbiBvcmRlciB0byBiZSBhYmxlIHRvIHJ1biBhdCBhbGwuCisKKyAgICBUaGlzIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aCBAdW5pdHRlc3Quc2tpcElmKCkgdG8gYW5ub3RhdGUgdGVzdHMKKyAgICB0aGF0IG5lZWQgdG8gdXNlIGFuIGFzc2VydF9weXRob24qKCkgZnVuY3Rpb24gdG8gbGF1bmNoIGFuIGlzb2xhdGVkCisgICAgbW9kZSAoLUkpIG9yIG5vIGVudmlyb25tZW50IG1vZGUgKC1FKSBzdWItaW50ZXJwcmV0ZXIgcHJvY2Vzcy4KKworICAgIEEgbm9ybWFsIGJ1aWxkICYgdGVzdCBkb2VzIG5vdCBydW4gaW50byB0aGlzIHNpdHVhdGlvbiBidXQgaXQgY2FuIGhhcHBlbgorICAgIHdoZW4gdHJ5aW5nIHRvIHJ1biB0aGUgc3RhbmRhcmQgbGlicmFyeSB0ZXN0IHN1aXRlIGZyb20gYW4gaW50ZXJwcmV0ZXIgdGhhdAorICAgIGRvZXNuJ3QgaGF2ZSBhbiBvYnZpb3VzIGhvbWUgd2l0aCBQeXRob24ncyBjdXJyZW50IGhvbWUgZmluZGluZyBsb2dpYy4KKworICAgIFNldHRpbmcgUFlUSE9OSE9NRSBpcyBvbmUgd2F5IHRvIGdldCBtb3N0IG9mIHRoZSB0ZXN0c3VpdGUgdG8gcnVuIGluIHRoYXQKKyAgICBzaXR1YXRpb24uICBQWVRIT05QQVRIIG9yIFBZVEhPTlVTRVJTSVRFIGFyZSBvdGhlciBjb21tb24gZW52aXJvbm1lbnQKKyAgICB2YXJpYWJsZXMgdGhhdCBtaWdodCBpbXBhY3Qgd2hldGhlciBvciBub3QgdGhlIGludGVycHJldGVyIGNhbiBzdGFydC4KKyAgICAiIiIKKyAgICBnbG9iYWwgX19jYWNoZWRfaW50ZXJwX3JlcXVpcmVzX2Vudmlyb25tZW50CisgICAgaWYgX19jYWNoZWRfaW50ZXJwX3JlcXVpcmVzX2Vudmlyb25tZW50IGlzIE5vbmU6CisgICAgICAgICMgVHJ5IHJ1bm5pbmcgYW4gaW50ZXJwcmV0ZXIgd2l0aCAtRSB0byBzZWUgaWYgaXQgd29ya3Mgb3Igbm90LgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoW3N5cy5leGVjdXRhYmxlLCAnLUUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWMnLCAnaW1wb3J0IHN5czsgc3lzLmV4aXQoMCknXSkKKyAgICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuQ2FsbGVkUHJvY2Vzc0Vycm9yOgorICAgICAgICAgICAgX19jYWNoZWRfaW50ZXJwX3JlcXVpcmVzX2Vudmlyb25tZW50ID0gVHJ1ZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX19jYWNoZWRfaW50ZXJwX3JlcXVpcmVzX2Vudmlyb25tZW50ID0gRmFsc2UKKworICAgIHJldHVybiBfX2NhY2hlZF9pbnRlcnBfcmVxdWlyZXNfZW52aXJvbm1lbnQKKworCitfUHl0aG9uUnVuUmVzdWx0ID0gY29sbGVjdGlvbnMubmFtZWR0dXBsZSgiX1B5dGhvblJ1blJlc3VsdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoInJjIiwgIm91dCIsICJlcnIiKSkKKworCiAjIEV4ZWN1dGluZyB0aGUgaW50ZXJwcmV0ZXIgaW4gYSBzdWJwcm9jZXNzCi1kZWYgX2Fzc2VydF9weXRob24oZXhwZWN0ZWRfc3VjY2VzcywgKmFyZ3MsICoqZW52X3ZhcnMpOgotICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlXQotICAgIGlmIG5vdCBlbnZfdmFyczoKK2RlZiBydW5fcHl0aG9uX3VudGlsX2VuZCgqYXJncywgKiplbnZfdmFycyk6CisgICAgZW52X3JlcXVpcmVkID0gX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkKKyAgICBpZiAnX19pc29sYXRlZCcgaW4gZW52X3ZhcnM6CisgICAgICAgIGlzb2xhdGVkID0gZW52X3ZhcnMucG9wKCdfX2lzb2xhdGVkJykKKyAgICBlbHNlOgorICAgICAgICBpc29sYXRlZCA9IG5vdCBlbnZfdmFycyBhbmQgbm90IGVudl9yZXF1aXJlZAorICAgIGNtZF9saW5lID0gW3N5cy5leGVjdXRhYmxlLCAnLVgnLCAnZmF1bHRoYW5kbGVyJ10KKyAgICBpZiBpc29sYXRlZDoKKyAgICAgICAgIyBpc29sYXRlZCBtb2RlOiBpZ25vcmUgUHl0aG9uIGVudmlyb25tZW50IHZhcmlhYmxlcywgaWdub3JlIHVzZXIKKyAgICAgICAgIyBzaXRlLXBhY2thZ2VzLCBhbmQgZG9uJ3QgYWRkIHRoZSBjdXJyZW50IGRpcmVjdG9yeSB0byBzeXMucGF0aAorICAgICAgICBjbWRfbGluZS5hcHBlbmQoJy1JJykKKyAgICBlbGlmIG5vdCBlbnZfdmFycyBhbmQgbm90IGVudl9yZXF1aXJlZDoKKyAgICAgICAgIyBpZ25vcmUgUHl0aG9uIGVudmlyb25tZW50IHZhcmlhYmxlcwogICAgICAgICBjbWRfbGluZS5hcHBlbmQoJy1FJykKICAgICAjIE5lZWQgdG8gcHJlc2VydmUgdGhlIG9yaWdpbmFsIGVudmlyb25tZW50LCBmb3IgaW4tcGxhY2UgdGVzdGluZyBvZgogICAgICMgc2hhcmVkIGxpYnJhcnkgYnVpbGRzLgpAQCAtMzksMzUgKzg5LDYzIEBACiAgICAgICAgIHAuc3Rkb3V0LmNsb3NlKCkKICAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQogICAgIHJjID0gcC5yZXR1cm5jb2RlCi0gICAgZXJyID0gIHN0cmlwX3B5dGhvbl9zdGRlcnIoZXJyKQotICAgIGlmIChyYyBhbmQgZXhwZWN0ZWRfc3VjY2Vzcykgb3IgKG5vdCByYyBhbmQgbm90IGV4cGVjdGVkX3N1Y2Nlc3MpOgorICAgIGVyciA9IHN0cmlwX3B5dGhvbl9zdGRlcnIoZXJyKQorICAgIHJldHVybiBfUHl0aG9uUnVuUmVzdWx0KHJjLCBvdXQsIGVyciksIGNtZF9saW5lCisKK2RlZiBfYXNzZXJ0X3B5dGhvbihleHBlY3RlZF9zdWNjZXNzLCAqYXJncywgKiplbnZfdmFycyk6CisgICAgcmVzLCBjbWRfbGluZSA9IHJ1bl9weXRob25fdW50aWxfZW5kKCphcmdzLCAqKmVudl92YXJzKQorICAgIGlmIChyZXMucmMgYW5kIGV4cGVjdGVkX3N1Y2Nlc3MpIG9yIChub3QgcmVzLnJjIGFuZCBub3QgZXhwZWN0ZWRfc3VjY2Vzcyk6CiAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKAotICAgICAgICAgICAgIlByb2Nlc3MgcmV0dXJuIGNvZGUgaXMgJWQsICIKLSAgICAgICAgICAgICJzdGRlcnIgZm9sbG93czpcbiVzIiAlIChyYywgZXJyLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJykpKQotICAgIHJldHVybiByYywgb3V0LCBlcnIKKyAgICAgICAgICAgICJQcm9jZXNzIHJldHVybiBjb2RlIGlzICVkLCBjb21tYW5kIGxpbmUgd2FzOiAlciwgIgorICAgICAgICAgICAgInN0ZGVyciBmb2xsb3dzOlxuJXMiICUgKHJlcy5yYywgY21kX2xpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmVyci5kZWNvZGUoJ2FzY2lpJywgJ2lnbm9yZScpKSkKKyAgICByZXR1cm4gcmVzCiAKIGRlZiBhc3NlcnRfcHl0aG9uX29rKCphcmdzLCAqKmVudl92YXJzKToKICAgICAiIiIKICAgICBBc3NlcnQgdGhhdCBydW5uaW5nIHRoZSBpbnRlcnByZXRlciB3aXRoIGBhcmdzYCBhbmQgb3B0aW9uYWwgZW52aXJvbm1lbnQKLSAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBpcyBvayBhbmQgcmV0dXJuIGEgKHJldHVybiBjb2RlLCBzdGRvdXQsIHN0ZGVycikgdHVwbGUuCisgICAgdmFyaWFibGVzIGBlbnZfdmFyc2Agc3VjY2VlZHMgKHJjID09IDApIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwKKyAgICBzdGRlcnIpIHR1cGxlLgorCisgICAgSWYgdGhlIF9fY2xlYW5lbnYga2V5d29yZCBpcyBzZXQsIGVudl92YXJzIGlzIHVzZWQgYXMgYSBmcmVzaCBlbnZpcm9ubWVudC4KKworICAgIFB5dGhvbiBpcyBzdGFydGVkIGluIGlzb2xhdGVkIG1vZGUgKGNvbW1hbmQgbGluZSBvcHRpb24gLUkpLAorICAgIGV4Y2VwdCBpZiB0aGUgX19pc29sYXRlZCBrZXl3b3JkIGlzIHNldCB0byBGYWxzZS4KICAgICAiIiIKICAgICByZXR1cm4gX2Fzc2VydF9weXRob24oVHJ1ZSwgKmFyZ3MsICoqZW52X3ZhcnMpCiAKIGRlZiBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoKmFyZ3MsICoqZW52X3ZhcnMpOgogICAgICIiIgogICAgIEFzc2VydCB0aGF0IHJ1bm5pbmcgdGhlIGludGVycHJldGVyIHdpdGggYGFyZ3NgIGFuZCBvcHRpb25hbCBlbnZpcm9ubWVudAotICAgIHZhcmlhYmxlcyBgZW52X3ZhcnNgIGZhaWxzIGFuZCByZXR1cm4gYSAocmV0dXJuIGNvZGUsIHN0ZG91dCwgc3RkZXJyKSB0dXBsZS4KKyAgICB2YXJpYWJsZXMgYGVudl92YXJzYCBmYWlscyAocmMgIT0gMCkgYW5kIHJldHVybiBhIChyZXR1cm4gY29kZSwgc3Rkb3V0LAorICAgIHN0ZGVycikgdHVwbGUuCisKKyAgICBTZWUgYXNzZXJ0X3B5dGhvbl9vaygpIGZvciBtb3JlIG9wdGlvbnMuCiAgICAgIiIiCiAgICAgcmV0dXJuIF9hc3NlcnRfcHl0aG9uKEZhbHNlLCAqYXJncywgKiplbnZfdmFycykKIAotZGVmIHNwYXduX3B5dGhvbigqYXJncywgKiprdyk6CitkZWYgc3Bhd25fcHl0aG9uKCphcmdzLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQsICoqa3cpOgorICAgICIiIlJ1biBhIFB5dGhvbiBzdWJwcm9jZXNzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKworICAgIGt3IGlzIGV4dHJhIGtleXdvcmQgYXJncyB0byBwYXNzIHRvIHN1YnByb2Nlc3MuUG9wZW4uIFJldHVybnMgYSBQb3BlbgorICAgIG9iamVjdC4KKyAgICAiIiIKICAgICBjbWRfbGluZSA9IFtzeXMuZXhlY3V0YWJsZSwgJy1FJ10KICAgICBjbWRfbGluZS5leHRlbmQoYXJncykKKyAgICAjIFVuZGVyIEZlZG9yYSAoPyksIEdOVSByZWFkbGluZSBjYW4gb3V0cHV0IGp1bmsgb24gc3RkZXJyIHdoZW4gaW5pdGlhbGl6ZWQsCisgICAgIyBkZXBlbmRpbmcgb24gdGhlIFRFUk0gc2V0dGluZy4gIFNldHRpbmcgVEVSTT12dDEwMCBpcyBzdXBwb3NlZCB0byBkaXNhYmxlCisgICAgIyB0aGF0LiAgUmVmZXJlbmNlczoKKyAgICAjIC0gaHR0cDovL3JlaW5vdXQudmFucmVlcy5vcmcvd2VibG9nLzIwMDkvMDgvMTQvcmVhZGxpbmUtaW52aXNpYmxlLWNoYXJhY3Rlci1oYWNrLmh0bWwKKyAgICAjIC0gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTc2MDcxMi9weXRob24tcmVhZGxpbmUtbW9kdWxlLXByaW50cy1lc2NhcGUtY2hhcmFjdGVyLWR1cmluZy1pbXBvcnQKKyAgICAjIC0gaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1yZWFkbGluZS8yMDA3LTA4L21zZzAwMDA0Lmh0bWwKKyAgICBlbnYgPSBrdy5zZXRkZWZhdWx0KCdlbnYnLCBkaWN0KG9zLmVudmlyb24pKQorICAgIGVudlsnVEVSTSddID0gJ3Z0MTAwJwogICAgIHJldHVybiBzdWJwcm9jZXNzLlBvcGVuKGNtZF9saW5lLCBzdGRpbj1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdGRvdXQsIHN0ZGVycj1zdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprdykKIAogZGVmIGtpbGxfcHl0aG9uKHApOgorICAgICIiIlJ1biB0aGUgZ2l2ZW4gUG9wZW4gcHJvY2VzcyB1bnRpbCBjb21wbGV0aW9uIGFuZCByZXR1cm4gc3Rkb3V0LiIiIgogICAgIHAuc3RkaW4uY2xvc2UoKQogICAgIGRhdGEgPSBwLnN0ZG91dC5yZWFkKCkKICAgICBwLnN0ZG91dC5jbG9zZSgpCkBAIC03Nyw4ICsxNTUsMTAgQEAKICAgICBzdWJwcm9jZXNzLl9jbGVhbnVwKCkKICAgICByZXR1cm4gZGF0YQogCi1kZWYgbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLCBzb3VyY2UpOgotICAgIHNjcmlwdF9maWxlbmFtZSA9IHNjcmlwdF9iYXNlbmFtZStvcy5leHRzZXArJ3B5JworZGVmIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlLCBvbWl0X3N1ZmZpeD1GYWxzZSk6CisgICAgc2NyaXB0X2ZpbGVuYW1lID0gc2NyaXB0X2Jhc2VuYW1lCisgICAgaWYgbm90IG9taXRfc3VmZml4OgorICAgICAgICBzY3JpcHRfZmlsZW5hbWUgKz0gb3MuZXh0c2VwICsgJ3B5JwogICAgIHNjcmlwdF9uYW1lID0gb3MucGF0aC5qb2luKHNjcmlwdF9kaXIsIHNjcmlwdF9maWxlbmFtZSkKICAgICAjIFRoZSBzY3JpcHQgc2hvdWxkIGJlIGVuY29kZWQgdG8gVVRGLTgsIHRoZSBkZWZhdWx0IHN0cmluZyBlbmNvZGluZwogICAgIHNjcmlwdF9maWxlID0gb3BlbihzY3JpcHRfbmFtZSwgJ3cnLCBlbmNvZGluZz0ndXRmLTgnKQpAQCAtMTIxLDggKzIwMSw4IEBACiAgICAgc2NyaXB0X25hbWUgPSBtYWtlX3NjcmlwdCh6aXBfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKICAgICB1bmxpbmsuYXBwZW5kKHNjcmlwdF9uYW1lKQogICAgIGlmIGNvbXBpbGVkOgotICAgICAgICBpbml0X25hbWUgPSBweV9jb21waWxlKGluaXRfbmFtZSwgZG9yYWlzZT1UcnVlKQotICAgICAgICBzY3JpcHRfbmFtZSA9IHB5X2NvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgaW5pdF9uYW1lID0gcHlfY29tcGlsZS5jb21waWxlKGluaXRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICBzY3JpcHRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQogICAgICAgICB1bmxpbmsuZXh0ZW5kKChpbml0X25hbWUsIHNjcmlwdF9uYW1lKSkKICAgICBwa2dfbmFtZXMgPSBbb3Muc2VwLmpvaW4oW3BrZ19uYW1lXSppKSBmb3IgaSBpbiByYW5nZSgxLCBkZXB0aCsxKV0KICAgICBzY3JpcHRfbmFtZV9pbl96aXAgPSBvcy5wYXRoLmpvaW4ocGtnX25hbWVzWy0xXSwgb3MucGF0aC5iYXNlbmFtZShzY3JpcHRfbmFtZSkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zZXFfdGVzdHMucHkgYi9MaWIvdGVzdC9zZXFfdGVzdHMucHkKaW5kZXggZjE4NWE4Mi4uMjQxNjI0OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc2VxX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L3NlcV90ZXN0cy5weQpAQCAtODUsNiArODUsMTQgQEAKICAgICAnVGVzdCBtdWx0aXBsZSB0aWVycyBvZiBpdGVyYXRvcnMnCiAgICAgcmV0dXJuIGNoYWluKG1hcChsYW1iZGEgeDp4LCBpdGVyZnVuYyhJdGVyR2VuKFNlcXVlbmNlKHNlcW4pKSkpKQogCitjbGFzcyBMeWluZ1R1cGxlKHR1cGxlKToKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHlpZWxkIDEKKworY2xhc3MgTHlpbmdMaXN0KGxpc3QpOgorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgeWllbGQgMQorCiBjbGFzcyBDb21tb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRoZSB0eXBlIHRvIGJlIHRlc3RlZAogICAgIHR5cGUydGVzdCA9IE5vbmUKQEAgLTEzMSw2ICsxMzksMTAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIEl0ZXJOb05leHQocykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50eXBlMnRlc3QsIEl0ZXJHZW5FeGMocykpCiAKKyAgICAgICAgIyBJc3N1ZSAjMjM3NTcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChMeWluZ1R1cGxlKCgyLCkpKSwgc2VsZi50eXBlMnRlc3QoKDEsKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoTHlpbmdMaXN0KFsyXSkpLCBzZWxmLnR5cGUydGVzdChbMV0pKQorCiAgICAgZGVmIHRlc3RfdHJ1dGgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50eXBlMnRlc3QoKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYudHlwZTJ0ZXN0KFs0Ml0pKQpAQCAtMzkyLDYgKzQwNCw3IEBACiAKICAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CiAgICAgICAgIGxzdCA9IHNlbGYudHlwZTJ0ZXN0KFs0LCA1LCA2LCA3XSkKLSAgICAgICAgbHN0MiA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMobHN0KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QyLCBsc3QpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQobHN0MiksIGlkKGxzdCkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgbHN0MiA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMobHN0LCBwcm90bykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdDIsIGxzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQobHN0MiksIGlkKGxzdCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zb3J0cGVyZi5weSBiL0xpYi90ZXN0L3NvcnRwZXJmLnB5CmluZGV4IGFmN2MwYjQuLjkwNzIyZjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3NvcnRwZXJmLnB5CisrKyBiL0xpYi90ZXN0L3NvcnRwZXJmLnB5CkBAIC0yMiw3ICsyMiw3IEBACiAgICAgZm4gPSBvcy5wYXRoLmpvaW4odGQsICJyciUwNmQiICUgbikKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihmbiwgInJiIikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgciA9IHJhbmRvbS5yYW5kb20KICAgICAgICAgcmVzdWx0ID0gW3IoKSBmb3IgaSBpbiByYW5nZShuKV0KICAgICAgICAgdHJ5OgpAQCAtMzUsOSArMzUsOSBAQAogICAgICAgICAgICAgICAgIGlmIGZwOgogICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcHJpbnQoImNhbid0IHdyaXRlIiwgZm4sICI6IiwgbXNnKQogICAgIGVsc2U6CiAgICAgICAgIHJlc3VsdCA9IG1hcnNoYWwubG9hZChmcCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3NzbF9zZXJ2ZXJzLnB5IGIvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkKaW5kZXggODY4NjE1My4uNzU5YjNmNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkKKysrIGIvTGliL3Rlc3Qvc3NsX3NlcnZlcnMucHkKQEAgLTM1LDcgKzM1LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc29jaywgYWRkciA9IHNlbGYuc29ja2V0LmFjY2VwdCgpCiAgICAgICAgICAgICBzc2xjb25uID0gc2VsZi5jb250ZXh0LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPVRydWUpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgc29ja2V0IGVycm9ycyBhcmUgc2lsZW5jZWQgYnkgdGhlIGNhbGxlciwgcHJpbnQgdGhlbSBoZXJlCiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiR290IGFuIGVycm9yOlxuJXNcbiIgJSBlKQpAQCAtMTQ3LDkgKzE0NywxMSBAQAogICAgICAgICBzZWxmLnNlcnZlci5zaHV0ZG93bigpCiAKIAotZGVmIG1ha2VfaHR0cHNfc2VydmVyKGNhc2UsIGNlcnRmaWxlPUNFUlRGSUxFLCBob3N0PUhPU1QsIGhhbmRsZXJfY2xhc3M9Tm9uZSk6Ci0gICAgIyB3ZSBhc3N1bWUgdGhlIGNlcnRmaWxlIGNvbnRhaW5zIGJvdGggcHJpdmF0ZSBrZXkgYW5kIGNlcnRpZmljYXRlCi0gICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCitkZWYgbWFrZV9odHRwc19zZXJ2ZXIoY2FzZSwgKiwgY29udGV4dD1Ob25lLCBjZXJ0ZmlsZT1DRVJURklMRSwKKyAgICAgICAgICAgICAgICAgICAgICBob3N0PUhPU1QsIGhhbmRsZXJfY2xhc3M9Tm9uZSk6CisgICAgaWYgY29udGV4dCBpcyBOb25lOgorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAjIFdlIGFzc3VtZSB0aGUgY2VydGZpbGUgY29udGFpbnMgYm90aCBwcml2YXRlIGtleSBhbmQgY2VydGlmaWNhdGUKICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihjZXJ0ZmlsZSkKICAgICBzZXJ2ZXIgPSBIVFRQU1NlcnZlclRocmVhZChjb250ZXh0LCBob3N0LCBoYW5kbGVyX2NsYXNzKQogICAgIGZsYWcgPSB0aHJlYWRpbmcuRXZlbnQoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc3NsdGVzdHMucHkgYi9MaWIvdGVzdC9zc2x0ZXN0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBlZDIyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3Qvc3NsdGVzdHMucHkKQEAgLTAsMCArMSwyMiBAQAorIyBDb252ZW5pZW5jZSB0ZXN0IG1vZHVsZSB0byBydW4gYWxsIG9mIHRoZSBTU0wtcmVsYXRlZCB0ZXN0cyBpbiB0aGUKKyMgc3RhbmRhcmQgbGlicmFyeS4KKworaW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKKworVEVTVFMgPSBbJ3Rlc3RfYXN5bmNpbycsICd0ZXN0X2Z0cGxpYicsICd0ZXN0X2hhc2hsaWInLCAndGVzdF9odHRwbGliJywKKyAgICAgICAgICd0ZXN0X2ltYXBsaWInLCAndGVzdF9ubnRwbGliJywgJ3Rlc3RfcG9wbGliJywgJ3Rlc3Rfc210cGxpYicsCisgICAgICAgICAndGVzdF9zbXRwbmV0JywgJ3Rlc3RfdXJsbGliMl9sb2NhbG5ldCcsICd0ZXN0X3ZlbnYnXQorCitkZWYgcnVuX3JlZ3J0ZXN0cygqZXh0cmFfYXJncyk6CisgICAgYXJncyA9IFtzeXMuZXhlY3V0YWJsZSwgIi1tIiwgInRlc3QiXQorICAgIGlmIG5vdCBleHRyYV9hcmdzOgorICAgICAgICBhcmdzLmFwcGVuZCgiLXVuZXR3b3JrIikKKyAgICBlbHNlOgorICAgICAgICBhcmdzLmV4dGVuZChleHRyYV9hcmdzKQorICAgIGFyZ3MuZXh0ZW5kKFRFU1RTKQorICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MuY2FsbChhcmdzKQorICAgIHN5cy5leGl0KHJlc3VsdCkKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBydW5fcmVncnRlc3RzKCpzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkgYi9MaWIvdGVzdC9zdHJpbmdfdGVzdHMucHkKaW5kZXggNDgwMGQ2ZC4uMjQyYTkzMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3RyaW5nX3Rlc3RzLnB5CisrKyBiL0xpYi90ZXN0L3N0cmluZ190ZXN0cy5weQpAQCAtMSw1ICsxLDUgQEAKICIiIgotQ29tbW9uIHRlc3RzIHNoYXJlZCBieSB0ZXN0X3N0ciwgdGVzdF91bmljb2RlLCB0ZXN0X3VzZXJzdHJpbmcgYW5kIHRlc3Rfc3RyaW5nLgorQ29tbW9uIHRlc3RzIHNoYXJlZCBieSB0ZXN0X3VuaWNvZGUsIHRlc3RfdXNlcnN0cmluZyBhbmQgdGVzdF9zdHJpbmcuCiAiIiIKIAogaW1wb3J0IHVuaXR0ZXN0LCBzdHJpbmcsIHN5cywgc3RydWN0CkBAIC03OSwxMSArNzksOSBAQAogICAgIGRlZiBjaGVja3JhaXNlcyhzZWxmLCBleGMsIG9iaiwgbWV0aG9kbmFtZSwgKmFyZ3MpOgogICAgICAgICBvYmogPSBzZWxmLmZpeHR5cGUob2JqKQogICAgICAgICBhcmdzID0gc2VsZi5maXh0eXBlKGFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgZXhjLAotICAgICAgICAgICAgZ2V0YXR0cihvYmosIG1ldGhvZG5hbWUpLAotICAgICAgICAgICAgKmFyZ3MKLSAgICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4YykgYXMgY206CisgICAgICAgICAgICBnZXRhdHRyKG9iaiwgbWV0aG9kbmFtZSkoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICcnKQogCiAgICAgIyBjYWxsIG9iai5tZXRob2QoKmFyZ3MpIHdpdGhvdXQgYW55IGNoZWNrcwogICAgIGRlZiBjaGVja2NhbGwoc2VsZiwgb2JqLCBtZXRob2RuYW1lLCAqYXJncyk6CkBAIC0zMjcsMTMgKzMyNSwyNiBAQAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ3VwcGVyJywgNDIpCiAKICAgICBkZWYgdGVzdF9leHBhbmR0YWJzKHNlbGYpOgotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJykKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycsIDgpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgZGVmXG5nICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgNCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNcclxuYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsICdleHBhbmR0YWJzJywgNCkKLSAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLCAnZXhwYW5kdGFicycpCi0gICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywgJ2V4cGFuZHRhYnMnLCA4KQotICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCAnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsICdleHBhbmR0YWJzJywgNCkKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhYmNccmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgICAgICBkZWZcbmcgICAgICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgZGVmXG5nICAgaGknLCAnYWJjXHJhYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDQpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICAgICAgZGVmXG5nICAgICAgIGhpJywgJ2FiY1xyXG5hYlx0ZGVmXG5nXHRoaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDgpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJcbmFiICBkZWZcbmcgICBoaScsICdhYmNcclxuYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCA0KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyXG5hYlxyXG5kZWZcbmdcclxuaGknLCAnYWJjXHJcbmFiXHJcbmRlZlxuZ1xyXG5oaScsCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhwYW5kdGFicycsIDQpCisgICAgICAgICMgY2hlY2sga2V5d29yZCBhcmdzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjXHJhYiAgICAgIGRlZlxuZyAgICAgICBoaScsICdhYmNccmFiXHRkZWZcbmdcdGhpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleHBhbmR0YWJzJywgdGFic2l6ZT04KQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2FiY1xyYWIgIGRlZlxuZyAgIGhpJywgJ2FiY1xyYWJcdGRlZlxuZ1x0aGknLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cGFuZHRhYnMnLCB0YWJzaXplPTQpCisKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCcgIGFcbiBiJywgJyBcdGFcblx0YicsICdleHBhbmR0YWJzJywgMSkKIAogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJ2hlbGxvJywgJ2V4cGFuZHRhYnMnLCA0MiwgNDIpCkBAIC0xMTA2LDggKzExMTcsNyBAQAogICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CiAgICAgICAgICMgam9pbiBub3cgd29ya3Mgd2l0aCBhbnkgc2VxdWVuY2UgdHlwZQogICAgICAgICAjIG1vdmVkIGhlcmUsIGJlY2F1c2UgdGhlIGFyZ3VtZW50IG9yZGVyIGlzCi0gICAgICAgICMgZGlmZmVyZW50IGluIHN0cmluZy5qb2luIChzZWUgdGhlIHRlc3QgaW4KLSAgICAgICAgIyB0ZXN0LnRlc3Rfc3RyaW5nLlN0cmluZ1Rlc3QudGVzdF9qb2luKQorICAgICAgICAjIGRpZmZlcmVudCBpbiBzdHJpbmcuam9pbgogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2EgYiBjIGQnLCAnICcsICdqb2luJywgWydhJywgJ2InLCAnYycsICdkJ10pCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgnYWJjZCcsICcnLCAnam9pbicsICgnYScsICdiJywgJ2MnLCAnZCcpKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWwoJ2JkJywgJycsICdqb2luJywgKCcnLCAnYicsICcnLCAnZCcpKQpAQCAtMTEyNyw2ICsxMTM3LDcgQEAKICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCdhIGIgYycsICcgJywgJ2pvaW4nLCBCYWRTZXEyKCkpCiAKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcgJywgJ2pvaW4nKQorICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyAnLCAnam9pbicsIE5vbmUpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnICcsICdqb2luJywgNykKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICcgJywgJ2pvaW4nLCBbMSwgMiwgYnl0ZXMoKV0pCiAgICAgICAgIHRyeToKQEAgLTExNjUsNyArMTE3Niw4IEBACiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnYWJjJywgJ19fbW9kX18nKQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyUoZm9vKXMnLCAnX19tb2RfXycsIDQyKQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVzJXMnLCAnX19tb2RfXycsICg0MiwpKQotICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVjJywgJ19fbW9kX18nLCAoTm9uZSwpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVHlwZUVycm9yLCAnJWMnLCAnX19tb2RfXycsIChOb25lLCkpCiAgICAgICAgIHNlbGYuY2hlY2tyYWlzZXMoVmFsdWVFcnJvciwgJyUoZm9vJywgJ19fbW9kX18nLCB7fSkKICAgICAgICAgc2VsZi5jaGVja3JhaXNlcyhUeXBlRXJyb3IsICclKGZvbylzICUoYmFyKXMnLCAnX19tb2RfXycsICgnZm9vJywgNDIpKQogICAgICAgICBzZWxmLmNoZWNrcmFpc2VzKFR5cGVFcnJvciwgJyVkJywgJ19fbW9kX18nLCAiNDIiKSAjIG5vdCBudW1lcmljCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkgYi9MaWIvdGVzdC9zdWJwcm9jZXNzZGF0YS9mZF9zdGF0dXMucHkKaW5kZXggMWY2MWUxMy4uZDEyYmQ5NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3Qvc3VicHJvY2Vzc2RhdGEvZmRfc3RhdHVzLnB5CisrKyBiL0xpYi90ZXN0L3N1YnByb2Nlc3NkYXRhL2ZkX3N0YXR1cy5weQpAQCAtMSwxNyArMSwyNyBAQAogIiIiV2hlbiBjYWxsZWQgYXMgYSBzY3JpcHQsIHByaW50IGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgdGhlIG9wZW4KLWZpbGUgZGVzY3JpcHRvcnMgb24gc3Rkb3V0LiIiIgorZmlsZSBkZXNjcmlwdG9ycyBvbiBzdGRvdXQuCisKK1VzYWdlOgorZmRfc3RhdHMucHk6IGNoZWNrIGFsbCBmaWxlIGRlc2NyaXB0b3JzCitmZF9zdGF0dXMucHkgZmQxIGZkMiAuLi46IGNoZWNrIG9ubHkgc3BlY2lmaWVkIGZpbGUgZGVzY3JpcHRvcnMKKyIiIgogCiBpbXBvcnQgZXJybm8KIGltcG9ydCBvcwotCi10cnk6Ci0gICAgX01BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQotZXhjZXB0OgotICAgIF9NQVhGRCA9IDI1NgoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBmZHMgPSBbXQotICAgIGZvciBmZCBpbiByYW5nZSgwLCBfTUFYRkQpOgorICAgIGlmIGxlbihzeXMuYXJndikgPT0gMToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX01BWEZEID0gb3Muc3lzY29uZigiU0NfT1BFTl9NQVgiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBfTUFYRkQgPSAyNTYKKyAgICAgICAgdGVzdF9mZHMgPSByYW5nZSgwLCBfTUFYRkQpCisgICAgZWxzZToKKyAgICAgICAgdGVzdF9mZHMgPSBtYXAoaW50LCBzeXMuYXJndlsxOl0pCisgICAgZm9yIGZkIGluIHRlc3RfZmRzOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdCA9IG9zLmZzdGF0KGZkKQogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgpAQCAtMTksNiArMjksNiBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICByYWlzZQogICAgICAgICAjIElnbm9yZSBTb2xhcmlzIGRvb3IgZmlsZXMKLSAgICAgICAgaWYgc3Quc3RfbW9kZSAmIDB4RjAwMCAhPSAweGQwMDA6CisgICAgICAgIGlmIG5vdCBzdGF0LlNfSVNET09SKHN0LnN0X21vZGUpOgogICAgICAgICAgICAgZmRzLmFwcGVuZChmZCkKICAgICBwcmludCgnLCcuam9pbihtYXAoc3RyLCBmZHMpKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkgYi9MaWIvdGVzdC9zdXBwb3J0L19faW5pdF9fLnB5CmluZGV4IDVjMDNmNTQuLmNkZjg2ZTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3N1cHBvcnQvX19pbml0X18ucHkKKysrIGIvTGliL3Rlc3Qvc3VwcG9ydC9fX2luaXRfXy5weQpAQCAtMywyOCArMywzMiBAQAogaWYgX19uYW1lX18gIT0gJ3Rlc3Quc3VwcG9ydCc6CiAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ3N1cHBvcnQgbXVzdCBiZSBpbXBvcnRlZCBmcm9tIHRoZSB0ZXN0IHBhY2thZ2UnKQogCitpbXBvcnQgY29sbGVjdGlvbnMuYWJjCiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGVycm5vCitpbXBvcnQgZmF1bHRoYW5kbGVyCitpbXBvcnQgZm5tYXRjaAogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGdjCi1pbXBvcnQgc29ja2V0Ci1pbXBvcnQgc3lzCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKK2ltcG9ydCBsb2dnaW5nLmhhbmRsZXJzCitpbXBvcnQgbm50cGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgcGxhdGZvcm0KLWltcG9ydCBzaHV0aWwKLWltcG9ydCB3YXJuaW5ncwotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgaW1wb3J0bGliCi1pbXBvcnQgY29sbGVjdGlvbnMuYWJjCiBpbXBvcnQgcmUKLWltcG9ydCBzdWJwcm9jZXNzCi1pbXBvcnQgaW1wCi1pbXBvcnQgdGltZQotaW1wb3J0IHN5c2NvbmZpZwotaW1wb3J0IGZubWF0Y2gKLWltcG9ydCBsb2dnaW5nLmhhbmRsZXJzCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RhdAogaW1wb3J0IHN0cnVjdAoraW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzeXNjb25maWcKIGltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVybGxpYi5lcnJvcgoraW1wb3J0IHdhcm5pbmdzCiAKIHRyeToKICAgICBpbXBvcnQgX3RocmVhZCwgdGhyZWFkaW5nCkBAIC01NiwyNiArNjAsNDkgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBsem1hID0gTm9uZQogCit0cnk6CisgICAgaW1wb3J0IHJlc291cmNlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgcmVzb3VyY2UgPSBOb25lCisKIF9fYWxsX18gPSBbCi0gICAgIkVycm9yIiwgIlRlc3RGYWlsZWQiLCAiUmVzb3VyY2VEZW5pZWQiLCAiaW1wb3J0X21vZHVsZSIsICJ2ZXJib3NlIiwKLSAgICAidXNlX3Jlc291cmNlcyIsICJtYXhfbWVtdXNlIiwgInJlY29yZF9vcmlnaW5hbF9zdGRvdXQiLAotICAgICJnZXRfb3JpZ2luYWxfc3Rkb3V0IiwgInVubG9hZCIsICJ1bmxpbmsiLCAicm10cmVlIiwgImZvcmdldCIsCisgICAgIyBnbG9iYWxzCisgICAgIlBJUEVfTUFYX1NJWkUiLCAidmVyYm9zZSIsICJtYXhfbWVtdXNlIiwgInVzZV9yZXNvdXJjZXMiLCAiZmFpbGZhc3QiLAorICAgICMgZXhjZXB0aW9ucworICAgICJFcnJvciIsICJUZXN0RmFpbGVkIiwgIlJlc291cmNlRGVuaWVkIiwKKyAgICAjIGltcG9ydHMKKyAgICAiaW1wb3J0X21vZHVsZSIsICJpbXBvcnRfZnJlc2hfbW9kdWxlIiwgIkNsZWFuSW1wb3J0IiwKKyAgICAjIG1vZHVsZXMKKyAgICAidW5sb2FkIiwgImZvcmdldCIsCisgICAgIyBpbworICAgICJyZWNvcmRfb3JpZ2luYWxfc3Rkb3V0IiwgImdldF9vcmlnaW5hbF9zdGRvdXQiLCAiY2FwdHVyZWRfc3Rkb3V0IiwKKyAgICAiY2FwdHVyZWRfc3RkaW4iLCAiY2FwdHVyZWRfc3RkZXJyIiwKKyAgICAjIGZpbGVzeXN0ZW0KKyAgICAiVEVTVEZOIiwgIlNBVkVEQ1dEIiwgInVubGluayIsICJybXRyZWUiLCAidGVtcF9jd2QiLCAiZmluZGZpbGUiLAorICAgICJjcmVhdGVfZW1wdHlfZmlsZSIsICJjYW5fc3ltbGluayIsICJmc19pc19jYXNlX2luc2Vuc2l0aXZlIiwKKyAgICAjIHVuaXR0ZXN0CiAgICAgImlzX3Jlc291cmNlX2VuYWJsZWQiLCAicmVxdWlyZXMiLCAicmVxdWlyZXNfZnJlZWJzZF92ZXJzaW9uIiwKLSAgICAicmVxdWlyZXNfbGludXhfdmVyc2lvbiIsICJyZXF1aXJlc19tYWNfdmVyIiwgImZpbmRfdW51c2VkX3BvcnQiLAotICAgICJiaW5kX3BvcnQiLCAiSVBWNl9FTkFCTEVEIiwgImlzX2p5dGhvbiIsICJURVNURk4iLCAiSE9TVCIsICJTQVZFRENXRCIsCi0gICAgInRlbXBfY3dkIiwgImZpbmRmaWxlIiwgImNyZWF0ZV9lbXB0eV9maWxlIiwgInNvcnRkaWN0IiwKLSAgICAiY2hlY2tfc3ludGF4X2Vycm9yIiwgIm9wZW5fdXJscmVzb3VyY2UiLCAiY2hlY2tfd2FybmluZ3MiLCAiQ2xlYW5JbXBvcnQiLAotICAgICJFbnZpcm9ubWVudFZhckd1YXJkIiwgIlRyYW5zaWVudFJlc291cmNlIiwgImNhcHR1cmVkX3N0ZG91dCIsCi0gICAgImNhcHR1cmVkX3N0ZGluIiwgImNhcHR1cmVkX3N0ZGVyciIsICJ0aW1lX291dCIsICJzb2NrZXRfcGVlcl9yZXNldCIsCi0gICAgImlvZXJyb3JfcGVlcl9yZXNldCIsICJydW5fd2l0aF9sb2NhbGUiLCAndGVtcF91bWFzaycsCi0gICAgInRyYW5zaWVudF9pbnRlcm5ldCIsICJzZXRfbWVtbGltaXQiLCAiYmlnbWVtdGVzdCIsICJiaWdhZGRyc3BhY2V0ZXN0IiwKLSAgICAiQmFzaWNUZXN0UnVubmVyIiwgInJ1bl91bml0dGVzdCIsICJydW5fZG9jdGVzdCIsICJ0aHJlYWRpbmdfc2V0dXAiLAotICAgICJ0aHJlYWRpbmdfY2xlYW51cCIsICJyZWFwX2NoaWxkcmVuIiwgImNweXRob25fb25seSIsICJjaGVja19pbXBsX2RldGFpbCIsCi0gICAgImdldF9hdHRyaWJ1dGUiLCAic3dhcF9pdGVtIiwgInN3YXBfYXR0ciIsICJyZXF1aXJlc19JRUVFXzc1NCIsCi0gICAgIlRlc3RIYW5kbGVyIiwgIk1hdGNoZXIiLCAiY2FuX3N5bWxpbmsiLCAic2tpcF91bmxlc3Nfc3ltbGluayIsCi0gICAgInNraXBfdW5sZXNzX3hhdHRyIiwgImltcG9ydF9mcmVzaF9tb2R1bGUiLCAicmVxdWlyZXNfemxpYiIsCi0gICAgIlBJUEVfTUFYX1NJWkUiLCAiZmFpbGZhc3QiLCAiYW50aWNpcGF0ZV9mYWlsdXJlIiwgInJ1bl93aXRoX3R6IiwKLSAgICAicmVxdWlyZXNfZ3ppcCIsICJyZXF1aXJlc19iejIiLCAicmVxdWlyZXNfbHptYSIsICJzdXBwcmVzc19jcmFzaF9wb3B1cCIsCisgICAgInJlcXVpcmVzX2xpbnV4X3ZlcnNpb24iLCAicmVxdWlyZXNfbWFjX3ZlciIsICJjaGVja19zeW50YXhfZXJyb3IiLAorICAgICJUcmFuc2llbnRSZXNvdXJjZSIsICJ0aW1lX291dCIsICJzb2NrZXRfcGVlcl9yZXNldCIsICJpb2Vycm9yX3BlZXJfcmVzZXQiLAorICAgICJ0cmFuc2llbnRfaW50ZXJuZXQiLCAiQmFzaWNUZXN0UnVubmVyIiwgInJ1bl91bml0dGVzdCIsICJydW5fZG9jdGVzdCIsCisgICAgInNraXBfdW5sZXNzX3N5bWxpbmsiLCAicmVxdWlyZXNfZ3ppcCIsICJyZXF1aXJlc19iejIiLCAicmVxdWlyZXNfbHptYSIsCisgICAgImJpZ21lbXRlc3QiLCAiYmlnYWRkcnNwYWNldGVzdCIsICJjcHl0aG9uX29ubHkiLCAiZ2V0X2F0dHJpYnV0ZSIsCisgICAgInJlcXVpcmVzX0lFRUVfNzU0IiwgInNraXBfdW5sZXNzX3hhdHRyIiwgInJlcXVpcmVzX3psaWIiLAorICAgICJhbnRpY2lwYXRlX2ZhaWx1cmUiLCAibG9hZF9wYWNrYWdlX3Rlc3RzIiwKKyAgICAjIHN5cworICAgICJpc19qeXRob24iLCAiY2hlY2tfaW1wbF9kZXRhaWwiLAorICAgICMgbmV0d29yaworICAgICJIT1NUIiwgIklQVjZfRU5BQkxFRCIsICJmaW5kX3VudXNlZF9wb3J0IiwgImJpbmRfcG9ydCIsICJvcGVuX3VybHJlc291cmNlIiwKKyAgICAjIHByb2Nlc3NlcworICAgICd0ZW1wX3VtYXNrJywgInJlYXBfY2hpbGRyZW4iLAorICAgICMgbG9nZ2luZworICAgICJUZXN0SGFuZGxlciIsCisgICAgIyB0aHJlYWRzCisgICAgInRocmVhZGluZ19zZXR1cCIsICJ0aHJlYWRpbmdfY2xlYW51cCIsICJyZWFwX3RocmVhZHMiLCAic3RhcnRfdGhyZWFkcyIsCisgICAgIyBtaXNjZWxsYW5lb3VzCisgICAgImNoZWNrX3dhcm5pbmdzIiwgIkVudmlyb25tZW50VmFyR3VhcmQiLCAicnVuX3dpdGhfbG9jYWxlIiwgInN3YXBfaXRlbSIsCisgICAgInN3YXBfYXR0ciIsICJNYXRjaGVyIiwgInNldF9tZW1saW1pdCIsICJTdXBwcmVzc0NyYXNoUmVwb3J0IiwgInNvcnRkaWN0IiwKKyAgICAicnVuX3dpdGhfdHoiLAogICAgIF0KIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKQEAgLTk3LDcgKzEyNCw4IEBACiAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIHN1cHByZXNzIHBhY2thZ2UgYW5kIG1vZHVsZSBkZXByZWNhdGlvbgogICAgIHdhcm5pbmdzIHdoZW4gaW1wb3J0aW5nIHRoZW0uCiAKLSAgICBJZiBpZ25vcmUgaXMgRmFsc2UsIHRoaXMgY29udGV4dCBtYW5hZ2VyIGhhcyBubyBlZmZlY3QuIiIiCisgICAgSWYgaWdub3JlIGlzIEZhbHNlLCB0aGlzIGNvbnRleHQgbWFuYWdlciBoYXMgbm8gZWZmZWN0LgorICAgICIiIgogICAgIGlmIGlnbm9yZToKICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgogICAgICAgICAgICAgd2FybmluZ3MuZmlsdGVyd2FybmluZ3MoImlnbm9yZSIsICIuKyAobW9kdWxlfHBhY2thZ2UpIiwKQEAgLTEwNywxNiArMTM1LDIxIEBACiAgICAgICAgIHlpZWxkCiAKIAotZGVmIGltcG9ydF9tb2R1bGUobmFtZSwgZGVwcmVjYXRlZD1GYWxzZSk6CitkZWYgaW1wb3J0X21vZHVsZShuYW1lLCBkZXByZWNhdGVkPUZhbHNlLCAqLCByZXF1aXJlZF9vbj0oKSk6CiAgICAgIiIiSW1wb3J0IGFuZCByZXR1cm4gdGhlIG1vZHVsZSB0byBiZSB0ZXN0ZWQsIHJhaXNpbmcgU2tpcFRlc3QgaWYKICAgICBpdCBpcyBub3QgYXZhaWxhYmxlLgogCiAgICAgSWYgZGVwcmVjYXRlZCBpcyBUcnVlLCBhbnkgbW9kdWxlIG9yIHBhY2thZ2UgZGVwcmVjYXRpb24gbWVzc2FnZXMKLSAgICB3aWxsIGJlIHN1cHByZXNzZWQuIiIiCisgICAgd2lsbCBiZSBzdXBwcmVzc2VkLiBJZiBhIG1vZHVsZSBpcyByZXF1aXJlZCBvbiBhIHBsYXRmb3JtIGJ1dCBvcHRpb25hbCBmb3IKKyAgICBvdGhlcnMsIHNldCByZXF1aXJlZF9vbiB0byBhbiBpdGVyYWJsZSBvZiBwbGF0Zm9ybSBwcmVmaXhlcyB3aGljaCB3aWxsIGJlCisgICAgY29tcGFyZWQgYWdhaW5zdCBzeXMucGxhdGZvcm0uCisgICAgIiIiCiAgICAgd2l0aCBfaWdub3JlX2RlcHJlY2F0ZWRfaW1wb3J0cyhkZXByZWNhdGVkKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmV0dXJuIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCiAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCh0dXBsZShyZXF1aXJlZF9vbikpOgorICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChzdHIobXNnKSkKIAogCkBAIC0xNTgsNiArMTkxLDI1IEBACiAgICAgICAgIHJldHVybiB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKICAgICByZXR1cm4gbGFtYmRhIGY6IGYKIAorZGVmIGxvYWRfcGFja2FnZV90ZXN0cyhwa2dfZGlyLCBsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKToKKyAgICAiIiJHZW5lcmljIGxvYWRfdGVzdHMgaW1wbGVtZW50YXRpb24gZm9yIHNpbXBsZSB0ZXN0IHBhY2thZ2VzLgorCisgICAgTW9zdCBwYWNrYWdlcyBjYW4gaW1wbGVtZW50IGxvYWRfdGVzdHMgdXNpbmcgdGhpcyBmdW5jdGlvbiBhcyBmb2xsb3dzOgorCisgICAgICAgZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgICAgICAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQorICAgICIiIgorICAgIGlmIHBhdHRlcm4gaXMgTm9uZToKKyAgICAgICAgcGF0dGVybiA9ICJ0ZXN0KiIKKyAgICB0b3BfZGlyID0gb3MucGF0aC5kaXJuYW1lKCAgICAgICAgICAgICAgIyBMaWIKKyAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSggICAgICAgICAgICAgICMgdGVzdAorICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSAgICMgc3VwcG9ydAorICAgIHBhY2thZ2VfdGVzdHMgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyPXBrZ19kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfbGV2ZWxfZGlyPXRvcF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPXBhdHRlcm4pCisgICAgc3RhbmRhcmRfdGVzdHMuYWRkVGVzdHMocGFja2FnZV90ZXN0cykKKyAgICByZXR1cm4gc3RhbmRhcmRfdGVzdHMKKwogCiBkZWYgaW1wb3J0X2ZyZXNoX21vZHVsZShuYW1lLCBmcmVzaD0oKSwgYmxvY2tlZD0oKSwgZGVwcmVjYXRlZD1GYWxzZSk6CiAgICAgIiIiSW1wb3J0IGFuZCByZXR1cm4gYSBtb2R1bGUsIGRlbGliZXJhdGVseSBieXBhc3Npbmcgc3lzLm1vZHVsZXMuCkBAIC0yNTcsNyArMzA5LDcgQEAKICAgICAgICAgIyBUaGUgZXhwb25lbnRpYWwgYmFja29mZiBvZiB0aGUgdGltZW91dCBhbW91bnRzIHRvIGEgdG90YWwKICAgICAgICAgIyBvZiB+MSBzZWNvbmQgYWZ0ZXIgd2hpY2ggdGhlIGRlbGV0aW9uIGlzIHByb2JhYmx5IGFuIGVycm9yCiAgICAgICAgICMgYW55d2F5LgotICAgICAgICAjIFRlc3Rpbmcgb24gYSBpN0A0LjNHSHogc2hvd3MgdGhhdCB1c3VhbGx5IG9ubHkgMSBpdGVyYXRpb24gaXMKKyAgICAgICAgIyBUZXN0aW5nIG9uIGFuIGk3QDQuM0dIeiBzaG93cyB0aGF0IHVzdWFsbHkgb25seSAxIGl0ZXJhdGlvbiBpcwogICAgICAgICAjIHJlcXVpcmVkIHdoZW4gY29udGVudGlvbiBvY2N1cnMuCiAgICAgICAgIHRpbWVvdXQgPSAwLjAwMQogICAgICAgICB3aGlsZSB0aW1lb3V0IDwgMS4wOgpAQCAtMjg3LDcgKzMzOSwxMyBAQAogICAgICAgICBkZWYgX3JtdHJlZV9pbm5lcihwYXRoKToKICAgICAgICAgICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbmFtZSkKLSAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZ1bGxuYW1lKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSBvcy5sc3RhdChmdWxsbmFtZSkuc3RfbW9kZQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoInN1cHBvcnQucm10cmVlKCk6IG9zLmxzdGF0KCVyKSBmYWlsZWQgd2l0aCAlcyIgJSAoZnVsbG5hbWUsIGV4YyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3lzLl9fc3RkZXJyX18pCisgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAwCisgICAgICAgICAgICAgICAgaWYgc3RhdC5TX0lTRElSKG1vZGUpOgogICAgICAgICAgICAgICAgICAgICBfd2FpdGZvcihfcm10cmVlX2lubmVyLCBmdWxsbmFtZSwgd2FpdGFsbD1UcnVlKQogICAgICAgICAgICAgICAgICAgICBvcy5ybWRpcihmdWxsbmFtZSkKICAgICAgICAgICAgICAgICBlbHNlOgpAQCAtMzAyLDI1ICszNjAsMjAgQEAKIGRlZiB1bmxpbmsoZmlsZW5hbWUpOgogICAgIHRyeToKICAgICAgICAgX3VubGluayhmaWxlbmFtZSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKLSAgICAgICAgIyBUaGUgZmlsZW5hbWUgbmVlZCBub3QgZXhpc3QuCi0gICAgICAgIGlmIGVycm9yLmVycm5vIG5vdCBpbiAoZXJybm8uRU5PRU5ULCBlcnJuby5FTk9URElSKToKLSAgICAgICAgICAgIHJhaXNlCisgICAgZXhjZXB0IChGaWxlTm90Rm91bmRFcnJvciwgTm90QURpcmVjdG9yeUVycm9yKToKKyAgICAgICAgcGFzcwogCiBkZWYgcm1kaXIoZGlybmFtZSk6CiAgICAgdHJ5OgogICAgICAgICBfcm1kaXIoZGlybmFtZSkKLSAgICBleGNlcHQgT1NFcnJvciBhcyBlcnJvcjoKLSAgICAgICAgIyBUaGUgZGlyZWN0b3J5IG5lZWQgbm90IGV4aXN0LgotICAgICAgICBpZiBlcnJvci5lcnJubyAhPSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgcGFzcwogCiBkZWYgcm10cmVlKHBhdGgpOgogICAgIHRyeToKICAgICAgICAgX3JtdHJlZShwYXRoKQotICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycm9yOgotICAgICAgICBpZiBlcnJvci5lcnJubyAhPSBlcnJuby5FTk9FTlQ6Ci0gICAgICAgICAgICByYWlzZQorICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgcGFzcwogCiBkZWYgbWFrZV9sZWdhY3lfcHljKHNvdXJjZSk6CiAgICAgIiIiTW92ZSBhIFBFUCAzMTQ3IHB5Yy9weW8gZmlsZSB0byBpdHMgbGVnYWN5IHB5Yy9weW8gbG9jYXRpb24uCkBAIC0zMzIsNyArMzg1LDcgQEAKICAgICAgICAgZG9lcyBub3QgbmVlZCB0byBleGlzdCwgaG93ZXZlciB0aGUgUEVQIDMxNDcgcHljIGZpbGUgbXVzdCBleGlzdC4KICAgICA6cmV0dXJuOiBUaGUgZmlsZSBzeXN0ZW0gcGF0aCB0byB0aGUgbGVnYWN5IHB5YyBmaWxlLgogICAgICIiIgotICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKKyAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICB1cF9vbmUgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKHNvdXJjZSkpCiAgICAgbGVnYWN5X3B5YyA9IG9zLnBhdGguam9pbih1cF9vbmUsIHNvdXJjZSArICgnYycgaWYgX19kZWJ1Z19fIGVsc2UgJ28nKSkKICAgICBvcy5yZW5hbWUocHljX2ZpbGUsIGxlZ2FjeV9weWMpCkBAIC0zNTEsMTUgKzQwNCwxOSBAQAogICAgICAgICAjIGNvbWJpbmF0aW9ucyBvZiBQRVAgMzE0NyBhbmQgbGVnYWN5IHB5YyBhbmQgcHlvIGZpbGVzLgogICAgICAgICB1bmxpbmsoc291cmNlICsgJ2MnKQogICAgICAgICB1bmxpbmsoc291cmNlICsgJ28nKQotICAgICAgICB1bmxpbmsoaW1wLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSwgZGVidWdfb3ZlcnJpZGU9VHJ1ZSkpCi0gICAgICAgIHVubGluayhpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCisgICAgICAgIHVubGluayhpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UsIGRlYnVnX292ZXJyaWRlPVRydWUpKQorICAgICAgICB1bmxpbmsoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlLCBkZWJ1Z19vdmVycmlkZT1GYWxzZSkpCiAKLSMgT24gc29tZSBwbGF0Zm9ybXMsIHNob3VsZCBub3QgcnVuIGd1aSB0ZXN0IGV2ZW4gaWYgaXQgaXMgYWxsb3dlZAotIyBpbiBgdXNlX3Jlc291cmNlcycuCi1pZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6Ci0gICAgaW1wb3J0IGN0eXBlcwotICAgIGltcG9ydCBjdHlwZXMud2ludHlwZXMKLSAgICBkZWYgX2lzX2d1aV9hdmFpbGFibGUoKToKKyMgQ2hlY2sgd2hldGhlciBhIGd1aSBpcyBhY3R1YWxseSBhdmFpbGFibGUKK2RlZiBfaXNfZ3VpX2F2YWlsYWJsZSgpOgorICAgIGlmIGhhc2F0dHIoX2lzX2d1aV9hdmFpbGFibGUsICdyZXN1bHQnKToKKyAgICAgICAgcmV0dXJuIF9pc19ndWlfYXZhaWxhYmxlLnJlc3VsdAorICAgIHJlYXNvbiA9IE5vbmUKKyAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyk6CisgICAgICAgICMgaWYgUHl0aG9uIGlzIHJ1bm5pbmcgYXMgYSBzZXJ2aWNlIChzdWNoIGFzIHRoZSBidWlsZGJvdCBzZXJ2aWNlKSwKKyAgICAgICAgIyBndWkgaW50ZXJhY3Rpb24gbWF5IGJlIGRpc2FsbG93ZWQKKyAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICBpbXBvcnQgY3R5cGVzLndpbnR5cGVzCiAgICAgICAgIFVPSV9GTEFHUyA9IDEKICAgICAgICAgV1NGX1ZJU0lCTEUgPSAweDAwMDEKICAgICAgICAgY2xhc3MgVVNFUk9CSkVDVEZMQUdTKGN0eXBlcy5TdHJ1Y3R1cmUpOgpAQCAtMzc5LDI5ICs0MzYsNjMgQEAKICAgICAgICAgICAgIGN0eXBlcy5ieXJlZihuZWVkZWQpKQogICAgICAgICBpZiBub3QgcmVzOgogICAgICAgICAgICAgcmFpc2UgY3R5cGVzLldpbkVycm9yKCkKLSAgICAgICAgcmV0dXJuIGJvb2wodW9mLmR3RmxhZ3MgJiBXU0ZfVklTSUJMRSkKLWVsc2U6Ci0gICAgZGVmIF9pc19ndWlfYXZhaWxhYmxlKCk6Ci0gICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIG5vdCBib29sKHVvZi5kd0ZsYWdzICYgV1NGX1ZJU0lCTEUpOgorICAgICAgICAgICAgcmVhc29uID0gImd1aSBub3QgYXZhaWxhYmxlIChXU0ZfVklTSUJMRSBmbGFnIG5vdCBzZXQpIgorICAgIGVsaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgorICAgICAgICAjIFRoZSBBcXVhIFRrIGltcGxlbWVudGF0aW9ucyBvbiBPUyBYIGNhbiBhYm9ydCB0aGUgcHJvY2VzcyBpZgorICAgICAgICAjIGJlaW5nIGNhbGxlZCBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSBhIHdpbmRvdyBzZXJ2ZXIgY29ubmVjdGlvbgorICAgICAgICAjIGNhbm5vdCBiZSBtYWRlLCBmb3IgaW5zdGFuY2Ugd2hlbiBpbnZva2VkIGJ5IGEgYnVpbGRib3Qgb3Igc3NoCisgICAgICAgICMgcHJvY2VzcyBub3QgcnVubmluZyB1bmRlciB0aGUgc2FtZSB1c2VyIGlkIGFzIHRoZSBjdXJyZW50IGNvbnNvbGUKKyAgICAgICAgIyB1c2VyLiAgVG8gYXZvaWQgdGhhdCwgcmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSB3aW5kb3cgbWFuYWdlcgorICAgICAgICAjIGNvbm5lY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgZnJvbSBjdHlwZXMgaW1wb3J0IGNkbGwsIGNfaW50LCBwb2ludGVyLCBTdHJ1Y3R1cmUKKyAgICAgICAgZnJvbSBjdHlwZXMudXRpbCBpbXBvcnQgZmluZF9saWJyYXJ5CisKKyAgICAgICAgYXBwX3NlcnZpY2VzID0gY2RsbC5Mb2FkTGlicmFyeShmaW5kX2xpYnJhcnkoIkFwcGxpY2F0aW9uU2VydmljZXMiKSkKKworICAgICAgICBpZiBhcHBfc2VydmljZXMuQ0dNYWluRGlzcGxheUlEKCkgPT0gMDoKKyAgICAgICAgICAgIHJlYXNvbiA9ICJndWkgdGVzdHMgY2Fubm90IHJ1biB3aXRob3V0IE9TIFggd2luZG93IG1hbmFnZXIiCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjbGFzcyBQcm9jZXNzU2VyaWFsTnVtYmVyKFN0cnVjdHVyZSk6CisgICAgICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJoaWdoTG9uZ09mUFNOIiwgY19pbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgibG93TG9uZ09mUFNOIiwgY19pbnQpXQorICAgICAgICAgICAgcHNuID0gUHJvY2Vzc1NlcmlhbE51bWJlcigpCisgICAgICAgICAgICBwc25fcCA9IHBvaW50ZXIocHNuKQorICAgICAgICAgICAgaWYgKCAgKGFwcF9zZXJ2aWNlcy5HZXRDdXJyZW50UHJvY2Vzcyhwc25fcCkgPCAwKSBvcgorICAgICAgICAgICAgICAgICAgKGFwcF9zZXJ2aWNlcy5TZXRGcm9udFByb2Nlc3MocHNuX3ApIDwgMCkgKToKKyAgICAgICAgICAgICAgICByZWFzb24gPSAiY2Fubm90IHJ1biB3aXRob3V0IE9TIFggZ3VpIHByb2Nlc3MiCisKKyAgICAjIGNoZWNrIG9uIGV2ZXJ5IHBsYXRmb3JtIHdoZXRoZXIgdGtpbnRlciBjYW4gYWN0dWFsbHkgZG8gYW55dGhpbmcKKyAgICBpZiBub3QgcmVhc29uOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIHRraW50ZXIgaW1wb3J0IFRrCisgICAgICAgICAgICByb290ID0gVGsoKQorICAgICAgICAgICAgcm9vdC51cGRhdGUoKQorICAgICAgICAgICAgcm9vdC5kZXN0cm95KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgZXJyX3N0cmluZyA9IHN0cihlKQorICAgICAgICAgICAgaWYgbGVuKGVycl9zdHJpbmcpID4gNTA6CisgICAgICAgICAgICAgICAgZXJyX3N0cmluZyA9IGVycl9zdHJpbmdbOjUwXSArICcgWy4uLl0nCisgICAgICAgICAgICByZWFzb24gPSAnVGsgdW5hdmFpbGFibGUgZHVlIHRvIHt9OiB7fScuZm9ybWF0KHR5cGUoZSkuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl9zdHJpbmcpCisKKyAgICBfaXNfZ3VpX2F2YWlsYWJsZS5yZWFzb24gPSByZWFzb24KKyAgICBfaXNfZ3VpX2F2YWlsYWJsZS5yZXN1bHQgPSBub3QgcmVhc29uCisKKyAgICByZXR1cm4gX2lzX2d1aV9hdmFpbGFibGUucmVzdWx0CiAKIGRlZiBpc19yZXNvdXJjZV9lbmFibGVkKHJlc291cmNlKToKLSAgICAiIiJUZXN0IHdoZXRoZXIgYSByZXNvdXJjZSBpcyBlbmFibGVkLiAgS25vd24gcmVzb3VyY2VzIGFyZSBzZXQgYnkKLSAgICByZWdydGVzdC5weS4iIiIKLSAgICByZXR1cm4gdXNlX3Jlc291cmNlcyBpcyBub3QgTm9uZSBhbmQgcmVzb3VyY2UgaW4gdXNlX3Jlc291cmNlcworICAgICIiIlRlc3Qgd2hldGhlciBhIHJlc291cmNlIGlzIGVuYWJsZWQuCisKKyAgICBLbm93biByZXNvdXJjZXMgYXJlIHNldCBieSByZWdydGVzdC5weS4gIElmIG5vdCBydW5uaW5nIHVuZGVyIHJlZ3J0ZXN0LnB5LAorICAgIGFsbCByZXNvdXJjZXMgYXJlIGFzc3VtZWQgZW5hYmxlZCB1bmxlc3MgdXNlX3Jlc291cmNlcyBoYXMgYmVlbiBzZXQuCisgICAgIiIiCisgICAgcmV0dXJuIHVzZV9yZXNvdXJjZXMgaXMgTm9uZSBvciByZXNvdXJjZSBpbiB1c2VfcmVzb3VyY2VzCiAKIGRlZiByZXF1aXJlcyhyZXNvdXJjZSwgbXNnPU5vbmUpOgotICAgICIiIlJhaXNlIFJlc291cmNlRGVuaWVkIGlmIHRoZSBzcGVjaWZpZWQgcmVzb3VyY2UgaXMgbm90IGF2YWlsYWJsZS4KLQotICAgIElmIHRoZSBjYWxsZXIncyBtb2R1bGUgaXMgX19tYWluX18gdGhlbiBhdXRvbWF0aWNhbGx5IHJldHVybiBUcnVlLiAgVGhlCi0gICAgcG9zc2liaWxpdHkgb2YgRmFsc2UgYmVpbmcgcmV0dXJuZWQgb2NjdXJzIHdoZW4gcmVncnRlc3QucHkgaXMKLSAgICBleGVjdXRpbmcuCi0gICAgIiIiCisgICAgIiIiUmFpc2UgUmVzb3VyY2VEZW5pZWQgaWYgdGhlIHNwZWNpZmllZCByZXNvdXJjZSBpcyBub3QgYXZhaWxhYmxlLiIiIgogICAgIGlmIHJlc291cmNlID09ICdndWknIGFuZCBub3QgX2lzX2d1aV9hdmFpbGFibGUoKToKLSAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNhbm5vdCB1c2UgdGhlICdndWknIHJlc291cmNlIikKLSAgICAjIHNlZSBpZiB0aGUgY2FsbGVyJ3MgbW9kdWxlIGlzIF9fbWFpbl9fIC0gaWYgc28sIHRyZWF0IGFzIGlmCi0gICAgIyB0aGUgcmVzb3VyY2Ugd2FzIHNldAotICAgIGlmIHN5cy5fZ2V0ZnJhbWUoMSkuZl9nbG9iYWxzLmdldCgiX19uYW1lX18iKSA9PSAiX19tYWluX18iOgotICAgICAgICByZXR1cm4KKyAgICAgICAgcmFpc2UgUmVzb3VyY2VEZW5pZWQoX2lzX2d1aV9hdmFpbGFibGUucmVhc29uKQogICAgIGlmIG5vdCBpc19yZXNvdXJjZV9lbmFibGVkKHJlc291cmNlKToKICAgICAgICAgaWYgbXNnIGlzIE5vbmU6CiAgICAgICAgICAgICBtc2cgPSAiVXNlIG9mIHRoZSAlciByZXNvdXJjZSBub3QgZW5hYmxlZCIgJSByZXNvdXJjZQpAQCAtNTEzLDcgKzYwNCw3IEBACiAgICAgdGhlIFNPX1JFVVNFQUREUiBzb2NrZXQgb3B0aW9uIGhhdmluZyBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIFdpbmRvd3MgdmVyc3VzCiAgICAgVW5peC9MaW51eC4gIE9uIFVuaXgsIHlvdSBjYW4ndCBoYXZlIHR3byBBRl9JTkVUIFNPQ0tfU1RSRUFNIHNvY2tldHMgYmluZCwKICAgICBsaXN0ZW4gYW5kIHRoZW4gYWNjZXB0IGNvbm5lY3Rpb25zIG9uIGlkZW50aWNhbCBob3N0L3BvcnRzLiAgQW4gRUFERFJJTlVTRQotICAgIHNvY2tldC5lcnJvciB3aWxsIGJlIHJhaXNlZCBhdCBzb21lIHBvaW50IChkZXBlbmRpbmcgb24gdGhlIHBsYXRmb3JtIGFuZAorICAgIE9TRXJyb3Igd2lsbCBiZSByYWlzZWQgYXQgc29tZSBwb2ludCAoZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSBhbmQKICAgICB0aGUgb3JkZXIgYmluZCBhbmQgbGlzdGVuIHdlcmUgY2FsbGVkIG9uIGVhY2ggc29ja2V0KS4KIAogICAgIEhvd2V2ZXIsIG9uIFdpbmRvd3MsIGlmIFNPX1JFVVNFQUREUiBpcyBzZXQgb24gdGhlIHNvY2tldHMsIG5vIEVBRERSSU5VU0UKQEAgLTU5MSw5ICs2ODIsOSBAQAogICAgICAgICBzb2NrID0gTm9uZQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX1NUUkVBTSkKLSAgICAgICAgICAgIHNvY2suYmluZCgoJzo6MScsIDApKQorICAgICAgICAgICAgc29jay5iaW5kKChIT1NUdjYsIDApKQogICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgZXhjZXB0IChzb2NrZXQuZXJyb3IsIHNvY2tldC5nYWllcnJvcik6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgc29jazoKQEAgLTYwMiw2ICs2OTMsMTggQEAKIAogSVBWNl9FTkFCTEVEID0gX2lzX2lwdjZfZW5hYmxlZCgpCiAKK2RlZiBzeXN0ZW1fbXVzdF92YWxpZGF0ZV9jZXJ0KGYpOgorICAgICIiIlNraXAgdGhlIHRlc3Qgb24gVExTIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gZmFpbHVyZXMuIiIiCisgICAgQGZ1bmN0b29scy53cmFwcyhmKQorICAgIGRlZiBkZWMoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZigqYXJncywgKiprd2FyZ3MpCisgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBpZiAiQ0VSVElGSUNBVEVfVkVSSUZZX0ZBSUxFRCIgaW4gc3RyKGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJzeXN0ZW0gZG9lcyBub3QgY29udGFpbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lY2Vzc2FyeSBjZXJ0aWZpY2F0ZXMiKQorICAgICAgICAgICAgcmFpc2UKKyAgICByZXR1cm4gZGVjCiAKICMgQSBjb25zdGFudCBsaWtlbHkgbGFyZ2VyIHRoYW4gdGhlIHVuZGVybHlpbmcgT1MgcGlwZSBidWZmZXIgc2l6ZSwgdG8KICMgbWFrZSB3cml0ZXMgYmxvY2tpbmcuCkBAIC05NDAsNyArMTA0MywxMiBAQAogICAgIHJlcXVpcmVzKCd1cmxmZXRjaCcpCiAKICAgICBwcmludCgnXHRmZXRjaGluZyAlcyAuLi4nICUgdXJsLCBmaWxlPWdldF9vcmlnaW5hbF9zdGRvdXQoKSkKLSAgICBmID0gdXJsbGliLnJlcXVlc3QudXJsb3Blbih1cmwsIHRpbWVvdXQ9MTUpCisgICAgb3BlbmVyID0gdXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKCkKKyAgICBpZiBnemlwOgorICAgICAgICBvcGVuZXIuYWRkaGVhZGVycy5hcHBlbmQoKCdBY2NlcHQtRW5jb2RpbmcnLCAnZ3ppcCcpKQorICAgIGYgPSBvcGVuZXIub3Blbih1cmwsIHRpbWVvdXQ9MTUpCisgICAgaWYgZ3ppcCBhbmQgZi5oZWFkZXJzLmdldCgnQ29udGVudC1FbmNvZGluZycpID09ICdnemlwJzoKKyAgICAgICAgZiA9IGd6aXAuR3ppcEZpbGUoZmlsZW9iaj1mKQogICAgIHRyeToKICAgICAgICAgd2l0aCBvcGVuKGZuLCAid2IiKSBhcyBvdXQ6CiAgICAgICAgICAgICBzID0gZi5yZWFkKCkKQEAgLTExODAsOSArMTI4OCw5IEBACiAjIENvbnRleHQgbWFuYWdlcnMgdGhhdCByYWlzZSBSZXNvdXJjZURlbmllZCB3aGVuIHZhcmlvdXMgaXNzdWVzCiAjIHdpdGggdGhlIEludGVybmV0IGNvbm5lY3Rpb24gbWFuaWZlc3QgdGhlbXNlbHZlcyBhcyBleGNlcHRpb25zLgogIyBYWFggZGVwcmVjYXRlIHRoZXNlIGFuZCB1c2UgdHJhbnNpZW50X2ludGVybmV0KCkgaW5zdGVhZAotdGltZV9vdXQgPSBUcmFuc2llbnRSZXNvdXJjZShJT0Vycm9yLCBlcnJubz1lcnJuby5FVElNRURPVVQpCi1zb2NrZXRfcGVlcl9yZXNldCA9IFRyYW5zaWVudFJlc291cmNlKHNvY2tldC5lcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKLWlvZXJyb3JfcGVlcl9yZXNldCA9IFRyYW5zaWVudFJlc291cmNlKElPRXJyb3IsIGVycm5vPWVycm5vLkVDT05OUkVTRVQpCit0aW1lX291dCA9IFRyYW5zaWVudFJlc291cmNlKE9TRXJyb3IsIGVycm5vPWVycm5vLkVUSU1FRE9VVCkKK3NvY2tldF9wZWVyX3Jlc2V0ID0gVHJhbnNpZW50UmVzb3VyY2UoT1NFcnJvciwgZXJybm89ZXJybm8uRUNPTk5SRVNFVCkKK2lvZXJyb3JfcGVlcl9yZXNldCA9IFRyYW5zaWVudFJlc291cmNlKE9TRXJyb3IsIGVycm5vPWVycm5vLkVDT05OUkVTRVQpCiAKIAogQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKQEAgLTEyMTgsNiArMTMyNiwxMSBAQAogICAgICAgICBuID0gZ2V0YXR0cihlcnIsICdlcnJubycsIE5vbmUpCiAgICAgICAgIGlmIChpc2luc3RhbmNlKGVyciwgc29ja2V0LnRpbWVvdXQpIG9yCiAgICAgICAgICAgICAoaXNpbnN0YW5jZShlcnIsIHNvY2tldC5nYWllcnJvcikgYW5kIG4gaW4gZ2FpX2Vycm5vcykgb3IKKyAgICAgICAgICAgIChpc2luc3RhbmNlKGVyciwgdXJsbGliLmVycm9yLkhUVFBFcnJvcikgYW5kCisgICAgICAgICAgICAgNTAwIDw9IGVyci5jb2RlIDw9IDU5OSkgb3IKKyAgICAgICAgICAgIChpc2luc3RhbmNlKGVyciwgdXJsbGliLmVycm9yLlVSTEVycm9yKSBhbmQKKyAgICAgICAgICAgICAgICAgKCgiQ29ubmVjdGlvblJlZnVzZWRFcnJvciIgaW4gZXJyLnJlYXNvbikgb3IKKyAgICAgICAgICAgICAgICAgICgiVGltZW91dEVycm9yIiBpbiBlcnIucmVhc29uKSkpIG9yCiAgICAgICAgICAgICBuIGluIGNhcHR1cmVkX2Vycm5vcyk6CiAgICAgICAgICAgICBpZiBub3QgdmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGRlbmllZC5hcmdzWzBdICsgIlxuIikKQEAgLTEyMjgsMTcgKzEzNDEsMjEgQEAKICAgICAgICAgaWYgdGltZW91dCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHNvY2tldC5zZXRkZWZhdWx0dGltZW91dCh0aW1lb3V0KQogICAgICAgICB5aWVsZAotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgbm50cGxpYi5OTlRQVGVtcG9yYXJ5RXJyb3IgYXMgZXJyOgorICAgICAgICBpZiB2ZXJib3NlOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShkZW5pZWQuYXJnc1swXSArICJcbiIpCisgICAgICAgIHJhaXNlIGRlbmllZCBmcm9tIGVycgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgIyB1cmxsaWIgY2FuIHdyYXAgb3JpZ2luYWwgc29ja2V0IGVycm9ycyBtdWx0aXBsZSB0aW1lcyAoISksIHdlIG11c3QKICAgICAgICAgIyB1bndyYXAgdG8gZ2V0IGF0IHRoZSBvcmlnaW5hbCBlcnJvci4KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGEgPSBlcnIuYXJncwotICAgICAgICAgICAgaWYgbGVuKGEpID49IDEgYW5kIGlzaW5zdGFuY2UoYVswXSwgSU9FcnJvcik6CisgICAgICAgICAgICBpZiBsZW4oYSkgPj0gMSBhbmQgaXNpbnN0YW5jZShhWzBdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzBdCiAgICAgICAgICAgICAjIFRoZSBlcnJvciBjYW4gYWxzbyBiZSB3cmFwcGVkIGFzIGFyZ3NbMV06CiAgICAgICAgICAgICAjICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgIyAgICAgICAgcmFpc2UgSU9FcnJvcignc29ja2V0IGVycm9yJywgbXNnKS53aXRoX3RyYWNlYmFjayhzeXMuZXhjX2luZm8oKVsyXSkKLSAgICAgICAgICAgIGVsaWYgbGVuKGEpID49IDIgYW5kIGlzaW5zdGFuY2UoYVsxXSwgSU9FcnJvcik6CisgICAgICAgICAgICAjICAgICAgICByYWlzZSBPU0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQorICAgICAgICAgICAgZWxpZiBsZW4oYSkgPj0gMiBhbmQgaXNpbnN0YW5jZShhWzFdLCBPU0Vycm9yKToKICAgICAgICAgICAgICAgICBlcnIgPSBhWzFdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGJyZWFrCkBAIC0xMjY3LDcgKzEzODQsNyBAQAogCiAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CiAgICAgICAgICAgIHByaW50KCJoZWxsbyIpCi0gICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgImhlbGxvXG4iKQorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICJoZWxsb1xcbiIpCiAgICAgIiIiCiAgICAgcmV0dXJuIGNhcHR1cmVkX291dHB1dCgic3Rkb3V0IikKIApAQCAtMTI3Niw3ICsxMzkzLDcgQEAKIAogICAgICAgIHdpdGggY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgogICAgICAgICAgICBwcmludCgiaGVsbG8iLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKSwgImhlbGxvXG4iKQorICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RkZXJyLmdldHZhbHVlKCksICJoZWxsb1xcbiIpCiAgICAgIiIiCiAgICAgcmV0dXJuIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikKIApAQCAtMTI4NCw3ICsxNDAxLDcgQEAKICAgICAiIiJDYXB0dXJlIHRoZSBpbnB1dCB0byBzeXMuc3RkaW46CiAKICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGluKCkgYXMgc3RkaW46Ci0gICAgICAgICAgIHN0ZGluLndyaXRlKCdoZWxsb1xuJykKKyAgICAgICAgICAgc3RkaW4ud3JpdGUoJ2hlbGxvXFxuJykKICAgICAgICAgICAgc3RkaW4uc2VlaygwKQogICAgICAgICAgICAjIGNhbGwgdGVzdCBjb2RlIHRoYXQgY29uc3VtZXMgZnJvbSBzeXMuc3RkaW4KICAgICAgICAgICAgY2FwdHVyZWQgPSBpbnB1dCgpCkBAIC0xMzI3LDcgKzE0NDQsNyBAQAogICAgIGZvciBvcHQgaW4gY2ZsYWdzLnNwbGl0KCk6CiAgICAgICAgIGlmIG9wdC5zdGFydHN3aXRoKCctTycpOgogICAgICAgICAgICAgZmluYWxfb3B0ID0gb3B0Ci0gICAgcmV0dXJuIGZpbmFsX29wdCAhPSAnJyBhbmQgZmluYWxfb3B0ICE9ICctTzAnCisgICAgcmV0dXJuIGZpbmFsX29wdCBub3QgaW4gKCcnLCAnLU8wJywgJy1PZycpCiAKIAogX2hlYWRlciA9ICduUCcKQEAgLTE1NjUsNyArMTY4Miw3IEBACiAKIGRlZiByZXF1aXJlc19yZXNvdXJjZShyZXNvdXJjZSk6CiAgICAgaWYgcmVzb3VyY2UgPT0gJ2d1aScgYW5kIG5vdCBfaXNfZ3VpX2F2YWlsYWJsZSgpOgotICAgICAgICByZXR1cm4gdW5pdHRlc3Quc2tpcCgicmVzb3VyY2UgJ2d1aScgaXMgbm90IGF2YWlsYWJsZSIpCisgICAgICAgIHJldHVybiB1bml0dGVzdC5za2lwKF9pc19ndWlfYXZhaWxhYmxlLnJlYXNvbikKICAgICBpZiBpc19yZXNvdXJjZV9lbmFibGVkKHJlc291cmNlKToKICAgICAgICAgcmV0dXJuIF9pZAogICAgIGVsc2U6CkBAIC0xNjk3LDkgKzE4MTQsMTggQEAKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIyBDaGVjayBmb3IgdGhlIHByZXNlbmNlIG9mIGRvY3N0cmluZ3MuCiAKLUhBVkVfRE9DU1RSSU5HUyA9IChjaGVja19pbXBsX2RldGFpbChjcHl0aG9uPUZhbHNlKSBvcgotICAgICAgICAgICAgICAgICAgIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIG9yCi0gICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX0RPQ19TVFJJTkdTJykpCisjIFJhdGhlciB0aGFuIHRyeWluZyB0byBlbnVtZXJhdGUgYWxsIHRoZSBjYXNlcyB3aGVyZSBkb2NzdHJpbmdzIG1heSBiZQorIyBkaXNhYmxlZCwgd2UganVzdCBjaGVjayBmb3IgdGhhdCBkaXJlY3RseQorCitkZWYgX2NoZWNrX2RvY3N0cmluZ3MoKToKKyAgICAiIiJKdXN0IHVzZWQgdG8gY2hlY2sgaWYgZG9jc3RyaW5ncyBhcmUgZW5hYmxlZCIiIgorCitNSVNTSU5HX0NfRE9DU1RSSU5HUyA9IChjaGVja19pbXBsX2RldGFpbCgpIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBsYXRmb3JtICE9ICd3aW4zMicgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICBub3Qgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdXSVRIX0RPQ19TVFJJTkdTJykpCisKK0hBVkVfRE9DU1RSSU5HUyA9IChfY2hlY2tfZG9jc3RyaW5ncy5fX2RvY19fIGlzIG5vdCBOb25lIGFuZAorICAgICAgICAgICAgICAgICAgIG5vdCBNSVNTSU5HX0NfRE9DU1RSSU5HUykKIAogcmVxdWlyZXNfZG9jc3RyaW5ncyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9ET0NTVFJJTkdTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRlc3QgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCkBAIC0xNzc0LDEyICsxOTAwLDEyIEBACiBkZWYgdGhyZWFkaW5nX2NsZWFudXAoKm9yaWdpbmFsX3ZhbHVlcyk6CiAgICAgaWYgbm90IF90aHJlYWQ6CiAgICAgICAgIHJldHVybgotICAgIF9NQVhfQ09VTlQgPSAxMAorICAgIF9NQVhfQ09VTlQgPSAxMDAKICAgICBmb3IgY291bnQgaW4gcmFuZ2UoX01BWF9DT1VOVCk6CiAgICAgICAgIHZhbHVlcyA9IF90aHJlYWQuX2NvdW50KCksIHRocmVhZGluZy5fZGFuZ2xpbmcKICAgICAgICAgaWYgdmFsdWVzID09IG9yaWdpbmFsX3ZhbHVlczoKICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCiAgICAgICAgIGdjX2NvbGxlY3QoKQogICAgICMgWFhYIHByaW50IGEgd2FybmluZyBpbiBjYXNlIG9mIGZhaWx1cmU/CiAKQEAgLTE4MjEsNiArMTk0Nyw0MiBAQAogICAgICAgICAgICAgICAgIGJyZWFrCiAKIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCitkZWYgc3RhcnRfdGhyZWFkcyh0aHJlYWRzLCB1bmxvY2s9Tm9uZSk6CisgICAgdGhyZWFkcyA9IGxpc3QodGhyZWFkcykKKyAgICBzdGFydGVkID0gW10KKyAgICB0cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICAgICAgc3RhcnRlZC5hcHBlbmQodCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgc3RhcnQgJWQgdGhyZWFkcywgb25seSAlZCB0aHJlYWRzIHN0YXJ0ZWQiICUKKyAgICAgICAgICAgICAgICAgICAgICAobGVuKHRocmVhZHMpLCBsZW4oc3RhcnRlZCkpKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB1bmxvY2s6CisgICAgICAgICAgICAgICAgdW5sb2NrKCkKKyAgICAgICAgICAgIGVuZHRpbWUgPSBzdGFydHRpbWUgPSB0aW1lLnRpbWUoKQorICAgICAgICAgICAgZm9yIHRpbWVvdXQgaW4gcmFuZ2UoMSwgMTYpOgorICAgICAgICAgICAgICAgIGVuZHRpbWUgKz0gNjAKKyAgICAgICAgICAgICAgICBmb3IgdCBpbiBzdGFydGVkOgorICAgICAgICAgICAgICAgICAgICB0LmpvaW4obWF4KGVuZHRpbWUgLSB0aW1lLnRpbWUoKSwgMC4wMSkpCisgICAgICAgICAgICAgICAgc3RhcnRlZCA9IFt0IGZvciB0IGluIHN0YXJ0ZWQgaWYgdC5pc0FsaXZlKCldCisgICAgICAgICAgICAgICAgaWYgbm90IHN0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ1VuYWJsZSB0byBqb2luICVkIHRocmVhZHMgZHVyaW5nIGEgcGVyaW9kIG9mICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJyVkIG1pbnV0ZXMnICUgKGxlbihzdGFydGVkKSwgdGltZW91dCkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzdGFydGVkID0gW3QgZm9yIHQgaW4gc3RhcnRlZCBpZiB0LmlzQWxpdmUoKV0KKyAgICAgICAgICAgIGlmIHN0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKHN5cy5zdGRvdXQpCisgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ1VuYWJsZSB0byBqb2luICVkIHRocmVhZHMnICUgbGVuKHN0YXJ0ZWQpKQorCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgogZGVmIHN3YXBfYXR0cihvYmosIGF0dHIsIG5ld192YWwpOgogICAgICIiIlRlbXBvcmFyeSBzd2FwIG91dCBhbiBhdHRyaWJ1dGUgd2l0aCBhIG5ldyBvYmplY3QuCiAKQEAgLTE4ODEsNyArMjA0Myw3IEBACiAgICAgVGhpcyB3aWxsIHR5cGljYWxseSBiZSBydW4gb24gdGhlIHJlc3VsdCBvZiB0aGUgY29tbXVuaWNhdGUoKSBtZXRob2QKICAgICBvZiBhIHN1YnByb2Nlc3MuUG9wZW4gb2JqZWN0LgogICAgICIiIgotICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzXF1ccj9cbj8iLCBiIiIsIHN0ZGVycikuc3RyaXAoKQorICAgIHN0ZGVyciA9IHJlLnN1YihiciJcW1xkKyByZWZzLCBcZCsgYmxvY2tzXF1ccj9cbj8iLCBiIiIsIHN0ZGVycikuc3RyaXAoKQogICAgIHJldHVybiBzdGRlcnIKIAogZGVmIGFyZ3NfZnJvbV9pbnRlcnByZXRlcl9mbGFncygpOgpAQCAtMjAxMiwyNyArMjE3NCw4MCBAQAogICAgIHJldHVybiB0ZXN0IGlmIG9rIGVsc2UgdW5pdHRlc3Quc2tpcChtc2cpKHRlc3QpCiAKIAotaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgotICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCi0gICAgZGVmIHN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgICIiIkRpc2FibGUgV2luZG93cyBFcnJvciBSZXBvcnRpbmcgZGlhbG9ncyB1c2luZyBTZXRFcnJvck1vZGUuIiIiCi0gICAgICAgICMgc2VlIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvbXM2ODA2MjElMjh2PXZzLjg1JTI5LmFzcHgKLSAgICAgICAgIyBHZXRFcnJvck1vZGUgaXMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzIFhQIGFuZCBXaW5kb3dzIFNlcnZlciAyMDAzLAotICAgICAgICAjIGJ1dCBTZXRFcnJvck1vZGUgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUsIHNvIHdlIGNhbiB1c2UgdGhhdAotICAgICAgICBpbXBvcnQgY3R5cGVzCi0gICAgICAgIGszMiA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIKLSAgICAgICAgU0VNX05PR1BGQVVMVEVSUk9SQk9YID0gMHgwMgotICAgICAgICBvbGRfZXJyb3JfbW9kZSA9IGszMi5TZXRFcnJvck1vZGUoU0VNX05PR1BGQVVMVEVSUk9SQk9YKQotICAgICAgICBrMzIuU2V0RXJyb3JNb2RlKG9sZF9lcnJvcl9tb2RlIHwgU0VNX05PR1BGQVVMVEVSUk9SQk9YKQorZGVmIGZzX2lzX2Nhc2VfaW5zZW5zaXRpdmUoZGlyZWN0b3J5KToKKyAgICAiIiJEZXRlY3RzIGlmIHRoZSBmaWxlIHN5c3RlbSBmb3IgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgaXMgY2FzZS1pbnNlbnNpdGl2ZS4iIiIKKyAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZShkaXI9ZGlyZWN0b3J5KSBhcyBiYXNlOgorICAgICAgICBiYXNlX3BhdGggPSBiYXNlLm5hbWUKKyAgICAgICAgY2FzZV9wYXRoID0gYmFzZV9wYXRoLnVwcGVyKCkKKyAgICAgICAgaWYgY2FzZV9wYXRoID09IGJhc2VfcGF0aDoKKyAgICAgICAgICAgIGNhc2VfcGF0aCA9IGJhc2VfcGF0aC5sb3dlcigpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHlpZWxkCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBrMzIuU2V0RXJyb3JNb2RlKG9sZF9lcnJvcl9tb2RlKQotZWxzZToKLSAgICAjIHRoaXMgaXMgYSBuby1vcCBmb3Igb3RoZXIgcGxhdGZvcm1zCi0gICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKLSAgICBkZWYgc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKLSAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHJldHVybiBvcy5wYXRoLnNhbWVmaWxlKGJhc2VfcGF0aCwgY2FzZV9wYXRoKQorICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworCitjbGFzcyBTdXBwcmVzc0NyYXNoUmVwb3J0OgorICAgICIiIlRyeSB0byBwcmV2ZW50IGEgY3Jhc2ggcmVwb3J0IGZyb20gcG9wcGluZyB1cC4KKworICAgIE9uIFdpbmRvd3MsIGRvbid0IGRpc3BsYXkgdGhlIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZy4gIE9uIFVOSVgsCisgICAgZGlzYWJsZSB0aGUgY3JlYXRpb24gb2YgY29yZWR1bXAgZmlsZS4KKyAgICAiIiIKKyAgICBvbGRfdmFsdWUgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICAiIiJPbiBXaW5kb3dzLCBkaXNhYmxlIFdpbmRvd3MgRXJyb3IgUmVwb3J0aW5nIGRpYWxvZ3MgdXNpbmcKKyAgICAgICAgU2V0RXJyb3JNb2RlLgorCisgICAgICAgIE9uIFVOSVgsIHRyeSB0byBzYXZlIHRoZSBwcmV2aW91cyBjb3JlIGZpbGUgc2l6ZSBsaW1pdCwgdGhlbiBzZXQKKyAgICAgICAgc29mdCBsaW1pdCB0byAwLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgIyBzZWUgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L3dpbmRvd3MvZGVza3RvcC9tczY4MDYyMS5hc3B4CisgICAgICAgICAgICAjIEdldEVycm9yTW9kZSBpcyBub3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MgWFAgYW5kIFdpbmRvd3MgU2VydmVyIDIwMDMsCisgICAgICAgICAgICAjIGJ1dCBTZXRFcnJvck1vZGUgcmV0dXJucyB0aGUgcHJldmlvdXMgdmFsdWUsIHNvIHdlIGNhbiB1c2UgdGhhdAorICAgICAgICAgICAgaW1wb3J0IGN0eXBlcworICAgICAgICAgICAgc2VsZi5fazMyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMgorICAgICAgICAgICAgU0VNX05PR1BGQVVMVEVSUk9SQk9YID0gMHgwMgorICAgICAgICAgICAgc2VsZi5vbGRfdmFsdWUgPSBzZWxmLl9rMzIuU2V0RXJyb3JNb2RlKFNFTV9OT0dQRkFVTFRFUlJPUkJPWCkKKyAgICAgICAgICAgIHNlbGYuX2szMi5TZXRFcnJvck1vZGUoc2VsZi5vbGRfdmFsdWUgfCBTRU1fTk9HUEZBVUxURVJST1JCT1gpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiByZXNvdXJjZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYub2xkX3ZhbHVlID0gcmVzb3VyY2UuZ2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFKQorICAgICAgICAgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwgc2VsZi5vbGRfdmFsdWVbMV0pKQorICAgICAgICAgICAgICAgIGV4Y2VwdCAoVmFsdWVFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIHRoZSAnQ3Jhc2ggUmVwb3J0ZXInIG9uIE9TWCB3YXMgY29uZmlndXJlZAorICAgICAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAorICAgICAgICAgICAgICAgICMgd2hlbiBpdCBpcy4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCisgICAgICAgICAgICAgICAgIyB0aGF0IG1pZ2h0IHRyaWdnZXIgdGhlIG5leHQgbWFuYWdlci4KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHN1YnByb2Nlc3MuUG9wZW4oWycvdXNyL2Jpbi9kZWZhdWx0cycsICdyZWFkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICdjb20uYXBwbGUuQ3Jhc2hSZXBvcnRlcicsICdEaWFsb2dUeXBlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5jb21tdW5pY2F0ZSgpWzBdCisgICAgICAgICAgICAgICAgaWYgdmFsdWUuc3RyaXAoKSA9PSBiJ2RldmVsb3Blcic6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJ0aGlzIHRlc3QgdHJpZ2dlcnMgdGhlIENyYXNoIFJlcG9ydGVyLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IGlzIGludGVudGlvbmFsIiwgZW5kPScnLCBmbHVzaD1UcnVlKQorCisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmlnbm9yZV9leGMpOgorICAgICAgICAiIiJSZXN0b3JlIFdpbmRvd3MgRXJyb3JNb2RlIG9yIGNvcmUgZmlsZSBiZWhhdmlvciB0byBpbml0aWFsIHZhbHVlLiIiIgorICAgICAgICBpZiBzZWxmLm9sZF92YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgorICAgICAgICAgICAgc2VsZi5fazMyLlNldEVycm9yTW9kZShzZWxmLm9sZF92YWx1ZSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCBzZWxmLm9sZF92YWx1ZSkKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKIAogZGVmIHBhdGNoKHRlc3RfaW5zdGFuY2UsIG9iamVjdF90b19wYXRjaCwgYXR0cl9uYW1lLCBuZXdfdmFsdWUpOgpAQCAtMjA2NywzICsyMjgyLDIzIEBACiAKICAgICAjIGFjdHVhbGx5IG92ZXJyaWRlIHRoZSBhdHRyaWJ1dGUKICAgICBzZXRhdHRyKG9iamVjdF90b19wYXRjaCwgYXR0cl9uYW1lLCBuZXdfdmFsdWUpCisKKworZGVmIHJ1bl9pbl9zdWJpbnRlcnAoY29kZSk6CisgICAgIiIiCisgICAgUnVuIGNvZGUgaW4gYSBzdWJpbnRlcnByZXRlci4gUmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QgaWYgdGhlIHRyYWNlbWFsbG9jCisgICAgbW9kdWxlIGlzIGVuYWJsZWQuCisgICAgIiIiCisgICAgIyBJc3N1ZSAjMTA5MTUsICMxNTc1MTogUHlHSUxTdGF0ZV8qKCkgZnVuY3Rpb25zIGRvbid0IHdvcmsgd2l0aAorICAgICMgc3ViLWludGVycHJldGVycywgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSB1c2VzIHRoZXNlIGZ1bmN0aW9ucyBpbnRlcm5hbGx5CisgICAgdHJ5OgorICAgICAgICBpbXBvcnQgdHJhY2VtYWxsb2MKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIHBhc3MKKyAgICBlbHNlOgorICAgICAgICBpZiB0cmFjZW1hbGxvYy5pc190cmFjaW5nKCk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgicnVuX2luX3N1YmludGVycCgpIGNhbm5vdCBiZSB1c2VkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWYgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIHRyYWNpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYWxsb2NhdGlvbnMiKQorICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICByZXR1cm4gX3Rlc3RjYXBpLnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weSBiL0xpYi90ZXN0L3Rlc3RfX19hbGxfXy5weQppbmRleCA2MDhlYzAxLi5lOTRkOTg0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X19fYWxsX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9fX2FsbF9fLnB5CkBAIC0yOSwxNyArMjksMjAgQEAKICAgICAgICAgaWYgbm90IGhhc2F0dHIoc3lzLm1vZHVsZXNbbW9kbmFtZV0sICJfX2FsbF9fIik6CiAgICAgICAgICAgICByYWlzZSBOb0FsbChtb2RuYW1lKQogICAgICAgICBuYW1lcyA9IHt9Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGV4ZWMoImZyb20gJXMgaW1wb3J0ICoiICUgbW9kbmFtZSwgbmFtZXMpCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgICMgSW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlIGV4Y2VwdGlvbiBzdHJpbmcKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiX19hbGxfXyBmYWlsdXJlIGluIHt9OiB7fToge30iLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICBtb2RuYW1lLCBlLl9fY2xhc3NfXy5fX25hbWVfXywgZSkpCi0gICAgICAgIGlmICJfX2J1aWx0aW5zX18iIGluIG5hbWVzOgotICAgICAgICAgICAgZGVsIG5hbWVzWyJfX2J1aWx0aW5zX18iXQotICAgICAgICBrZXlzID0gc2V0KG5hbWVzKQotICAgICAgICBhbGwgPSBzZXQoc3lzLm1vZHVsZXNbbW9kbmFtZV0uX19hbGxfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXlzLCBhbGwpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG1vZHVsZT1tb2RuYW1lKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGVjKCJmcm9tICVzIGltcG9ydCAqIiAlIG1vZG5hbWUsIG5hbWVzKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICMgSW5jbHVkZSB0aGUgbW9kdWxlIG5hbWUgaW4gdGhlIGV4Y2VwdGlvbiBzdHJpbmcKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIl9fYWxsX18gZmFpbHVyZSBpbiB7fToge306IHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZG5hbWUsIGUuX19jbGFzc19fLl9fbmFtZV9fLCBlKSkKKyAgICAgICAgICAgIGlmICJfX2J1aWx0aW5zX18iIGluIG5hbWVzOgorICAgICAgICAgICAgICAgIGRlbCBuYW1lc1siX19idWlsdGluc19fIl0KKyAgICAgICAgICAgIGtleXMgPSBzZXQobmFtZXMpCisgICAgICAgICAgICBhbGxfbGlzdCA9IHN5cy5tb2R1bGVzW21vZG5hbWVdLl9fYWxsX18KKyAgICAgICAgICAgIGFsbF9zZXQgPSBzZXQoYWxsX2xpc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoYWxsX3NldCwgYWxsX2xpc3QsICJpbiBtb2R1bGUge30iLmZvcm1hdChtb2RuYW1lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5cywgYWxsX3NldCwgImluIG1vZHVsZSB7fSIuZm9ybWF0KG1vZG5hbWUpKQogCiAgICAgZGVmIHdhbGtfbW9kdWxlcyhzZWxmLCBiYXNlZGlyLCBtb2RwYXRoKToKICAgICAgICAgZm9yIGZuIGluIHNvcnRlZChvcy5saXN0ZGlyKGJhc2VkaXIpKToKQEAgLTY5LDEzICs3MiwxNCBAQAogCiAgICAgICAgICMgcmxjb21wbGV0ZXIgbmVlZHMgc3BlY2lhbCBjb25zaWRlcmF0aW9uOyBpdCBpbXBvcnQgcmVhZGxpbmUgd2hpY2gKICAgICAgICAgIyBpbml0aWFsaXplcyBHTlUgcmVhZGxpbmUgd2hpY2ggY2FsbHMgc2V0bG9jYWxlKExDX0NUWVBFLCAiIikuLi4gOi0oCisgICAgICAgIGltcG9ydCBsb2NhbGUKKyAgICAgICAgbG9jYWxlX3R1cGxlID0gbG9jYWxlLmdldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGltcG9ydCBybGNvbXBsZXRlcgotICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSwgJ0MnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUsIGxvY2FsZV90dXBsZSkKIAogICAgICAgICBpZ25vcmVkID0gW10KICAgICAgICAgZmFpbGVkX2ltcG9ydHMgPSBbXQpAQCAtMTEwLDggKzExNCw1IEBACiAgICAgICAgICAgICBwcmludCgnRm9sbG93aW5nIG1vZHVsZXMgZmFpbGVkIHRvIGJlIGltcG9ydGVkOicsIGZhaWxlZF9pbXBvcnRzKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChBbGxUZXN0KQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkgYi9MaWIvdGVzdC90ZXN0X19sb2NhbGUucHkKaW5kZXggNDIzMWYzNy4uNThmMmYwNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9fbG9jYWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfX2xvY2FsZS5weQpAQCAtOSw3ICs5LDYgQEAKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgdW5hbWUKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIAogaWYgdW5hbWUoKS5zeXN0ZW0gPT0gIkRhcndpbiI6CiAgICAgbWFqLCBtaW4sIG1pYyA9IFtpbnQocGFydCkgZm9yIHBhcnQgaW4gdW5hbWUoKS5yZWxlYXNlLnNwbGl0KCIuIildCkBAIC0yNCw0NSArMjMsNTUgQEAKICAgICAnZGFfREsnLCAnbm5fTk8nLCAnY3NfQ1onLCAnZGVfTFUnLCAnZXNfQk8nLCAnc3FfQUwnLCAnc2tfU0snLCAnZnJfQ0gnLAogICAgICdkZV9ERScsICdzcl9ZVScsICdicl9GUicsICdubF9CRScsICdzdl9GSScsICdwbF9QTCcsICdmcl9DQScsICdmb19GTycsCiAgICAgJ2JzX0JBJywgJ2ZyX0xVJywgJ2tsX0dMJywgJ2ZhX0lSJywgJ2RlX0JFJywgJ3N2X1NFJywgJ2l0X0NIJywgJ3VrX1VBJywKLSAgICAnZXVfRVMnLCAndmlfVk4nLCAnYWZfWkEnLCAnbmJfTk8nLCAnZW5fREsnLCAndGdfVEonLCAnZW5fVVMnLAotICAgICdlc19FUy5JU084ODU5LTEnLCAnZnJfRlIuSVNPODg1OS0xNScsICdydV9SVS5LT0k4LVInLCAna29fS1IuZXVjS1InXQorICAgICdldV9FUycsICd2aV9WTicsICdhZl9aQScsICduYl9OTycsICdlbl9ESycsICd0Z19USicsICdwc19BRicsICdlbl9VUycsCisgICAgJ2ZyX0ZSLklTTzg4NTktMScsICdmcl9GUi5VVEYtOCcsICdmcl9GUi5JU084ODU5LTE1QGV1cm8nLAorICAgICdydV9SVS5LT0k4LVInLCAna29fS1IuZXVjS1InXQogCi0jIElzc3VlICMxMzQ0MTogU2tpcCBzb21lIGxvY2FsZXMgKGUuZy4gY3NfQ1ogYW5kIGh1X0hVKSBvbiBTb2xhcmlzIHRvCi0jIHdvcmthcm91bmQgYSBtYnN0b3djcygpIGJ1Zy4gRm9yIGV4YW1wbGUsIG9uIFNvbGFyaXMsIHRoZSBodV9IVSBsb2NhbGUgdXNlcwotIyB0aGUgbG9jYWxlIGVuY29kaW5nIElTTy04ODU5LTIsIHRoZSB0aG91c2F1ZHMgc2VwYXJhdG9yIGlzIGInXHhBMCcgYW5kIGl0IGlzCi0jIGRlY29kZWQgYXMgVSszMDAwMDAyMCAoYW4gaW52YWxpZCBjaGFyYWN0ZXIpIGJ5IG1ic3Rvd2NzKCkuCi1pZiBzeXMucGxhdGZvcm0gPT0gJ3N1bm9zNSc6Ci0gICAgb2xkX2xvY2FsZSA9IGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCkKLSAgICB0cnk6Ci0gICAgICAgIGxvY2FsZXMgPSBbXQotICAgICAgICBmb3IgbG9jIGluIGNhbmRpZGF0ZV9sb2NhbGVzOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0FMTCwgbG9jKQotICAgICAgICAgICAgZXhjZXB0IEVycm9yOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBsb2NhbGVjb252KCkKLSAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXJyOgotICAgICAgICAgICAgICAgIHByaW50KCJXQVJOSU5HOiBTa2lwIGxvY2FsZSAlcyAoZW5jb2RpbmcgJXMpOiBbJXNdICVzIgotICAgICAgICAgICAgICAgICAgICAgICUgKGxvYywgZW5jb2RpbmcsIHR5cGUoZXJyKSwgZXJyKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgbG9jYWxlcy5hcHBlbmQobG9jKQotICAgICAgICBjYW5kaWRhdGVfbG9jYWxlcyA9IGxvY2FsZXMKLSAgICBmaW5hbGx5OgotICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsIG9sZF9sb2NhbGUpCitkZWYgc2V0VXBNb2R1bGUoKToKKyAgICBnbG9iYWwgY2FuZGlkYXRlX2xvY2FsZXMKKyAgICAjIElzc3VlICMxMzQ0MTogU2tpcCBzb21lIGxvY2FsZXMgKGUuZy4gY3NfQ1ogYW5kIGh1X0hVKSBvbiBTb2xhcmlzIHRvCisgICAgIyB3b3JrYXJvdW5kIGEgbWJzdG93Y3MoKSBidWcuIEZvciBleGFtcGxlLCBvbiBTb2xhcmlzLCB0aGUgaHVfSFUgbG9jYWxlIHVzZXMKKyAgICAjIHRoZSBsb2NhbGUgZW5jb2RpbmcgSVNPLTg4NTktMiwgdGhlIHRob3VzYXVkcyBzZXBhcmF0b3IgaXMgYidceEEwJyBhbmQgaXQgaXMKKyAgICAjIGRlY29kZWQgYXMgVSszMDAwMDAyMCAoYW4gaW52YWxpZCBjaGFyYWN0ZXIpIGJ5IG1ic3Rvd2NzKCkuCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICdzdW5vczUnOgorICAgICAgICBvbGRfbG9jYWxlID0gbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQUxMKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBsb2NhbGVzID0gW10KKyAgICAgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsIGxvYykKKyAgICAgICAgICAgICAgICBleGNlcHQgRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsb2NhbGVjb252KCkKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoIldBUk5JTkc6IFNraXAgbG9jYWxlICVzIChlbmNvZGluZyAlcyk6IFslc10gJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAlIChsb2MsIGVuY29kaW5nLCB0eXBlKGVyciksIGVycikpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxlcy5hcHBlbmQobG9jKQorICAgICAgICAgICAgY2FuZGlkYXRlX2xvY2FsZXMgPSBsb2NhbGVzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsIG9sZF9sb2NhbGUpCiAKLSMgV29ya2Fyb3VuZCBmb3IgTVNWQzYoZGVidWcpIGNyYXNoIGJ1ZwotaWYgIk1TQyB2LjEyMDAiIGluIHN5cy52ZXJzaW9uOgotICAgIGRlZiBhY2NlcHQobG9jKToKLSAgICAgICAgYSA9IGxvYy5zcGxpdCgiLiIpCi0gICAgICAgIHJldHVybiBub3QobGVuKGEpID09IDIgYW5kIGxlbihhWy0xXSkgPj0gOSkKLSAgICBjYW5kaWRhdGVfbG9jYWxlcyA9IFtsb2MgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlcyBpZiBhY2NlcHQobG9jKV0KKyAgICAjIFdvcmthcm91bmQgZm9yIE1TVkM2KGRlYnVnKSBjcmFzaCBidWcKKyAgICBpZiAiTVNDIHYuMTIwMCIgaW4gc3lzLnZlcnNpb246CisgICAgICAgIGRlZiBhY2NlcHQobG9jKToKKyAgICAgICAgICAgIGEgPSBsb2Muc3BsaXQoIi4iKQorICAgICAgICAgICAgcmV0dXJuIG5vdChsZW4oYSkgPT0gMiBhbmQgbGVuKGFbLTFdKSA+PSA5KQorICAgICAgICBjYW5kaWRhdGVfbG9jYWxlcyA9IFtsb2MgZm9yIGxvYyBpbiBjYW5kaWRhdGVfbG9jYWxlcyBpZiBhY2NlcHQobG9jKV0KIAogIyBMaXN0IGtub3duIGxvY2FsZSB2YWx1ZXMgdG8gdGVzdCBhZ2FpbnN0IHdoZW4gYXZhaWxhYmxlLgogIyBEaWN0IGZvcm1hdHRlZCBhcyBgYDxsb2NhbGU+IDogKDxkZWNpbWFsX3BvaW50PiwgPHRob3VzYW5kc19zZXA+KWBgLiAgSWYgYQogIyB2YWx1ZSBpcyBub3Qga25vd24sIHVzZSAnJyAuCi1rbm93bl9udW1lcmljcyA9IHsnZnJfRlInIDogKCcsJywgJycpLCAnZW5fVVMnOignLicsICcsJyl9Citrbm93bl9udW1lcmljcyA9IHsKKyAgICAnZW5fVVMnOiAoJy4nLCAnLCcpLAorICAgICdkZV9ERScgOiAoJywnLCAnLicpLAorICAgICMgVGhlIEZyZW5jaCB0aG91c2FuZHMgc2VwYXJhdG9yIG1heSBiZSBhIGJyZWFraW5nIG9yIG5vbi1icmVha2luZyBzcGFjZQorICAgICMgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybSwgc28gZG8gbm90IHRlc3QgaXQKKyAgICAnZnJfRlInIDogKCcsJywgJycpLAorICAgICdwc19BRic6ICgnXHUwNjZiJywgJ1x1MDY2YycpLAorfQogCiBjbGFzcyBfTG9jYWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC05MSwxMCArMTAwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjX3ZhbHVlLCBrbm93bl92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGNfdHlwZSwgZGF0YV90eXBlLCBzZXRfbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZF9sb2NhbGUpKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG5sX2xhbmdpbmZvLCAibmxfbGFuZ2luZm8gaXMgbm90IGF2YWlsYWJsZSIpCiAgICAgZGVmIHRlc3RfbGNfbnVtZXJpY19ubF9sYW5naW5mbyhzZWxmKToKICAgICAgICAgIyBUZXN0IG5sX2xhbmdpbmZvIGFnYWluc3Qga25vd24gdmFsdWVzCisgICAgICAgIHRlc3RlZCA9IEZhbHNlCiAgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsIGxvYykKQEAgLTEwMywxMCArMTE0LDE0IEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGZvciBsaSwgbGMgaW4gKChSQURJWENIQVIsICJkZWNpbWFsX3BvaW50IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRIT1VTRVAsICJ0aG91c2FuZHNfc2VwIikpOgotICAgICAgICAgICAgICAgIHNlbGYubnVtZXJpY190ZXN0ZXIoJ25sX2xhbmdpbmZvJywgbmxfbGFuZ2luZm8obGkpLCBsYywgbG9jKQorICAgICAgICAgICAgICAgIGlmIHNlbGYubnVtZXJpY190ZXN0ZXIoJ25sX2xhbmdpbmZvJywgbmxfbGFuZ2luZm8obGkpLCBsYywgbG9jKToKKyAgICAgICAgICAgICAgICAgICAgdGVzdGVkID0gVHJ1ZQorICAgICAgICBpZiBub3QgdGVzdGVkOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbm8gc3VpdGFibGUgbG9jYWxlcycpCiAKICAgICBkZWYgdGVzdF9sY19udW1lcmljX2xvY2FsZWNvbnYoc2VsZik6CiAgICAgICAgICMgVGVzdCBsb2NhbGVjb252IGFnYWluc3Qga25vd24gdmFsdWVzCisgICAgICAgIHRlc3RlZCA9IEZhbHNlCiAgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsIGxvYykKQEAgLTExNiwxMSArMTMxLDE1IEBACiAgICAgICAgICAgICBmb3JtYXR0aW5nID0gbG9jYWxlY29udigpCiAgICAgICAgICAgICBmb3IgbGMgaW4gKCJkZWNpbWFsX3BvaW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ0aG91c2FuZHNfc2VwIik6Ci0gICAgICAgICAgICAgICAgc2VsZi5udW1lcmljX3Rlc3RlcignbG9jYWxlY29udicsIGZvcm1hdHRpbmdbbGNdLCBsYywgbG9jKQorICAgICAgICAgICAgICAgIGlmIHNlbGYubnVtZXJpY190ZXN0ZXIoJ2xvY2FsZWNvbnYnLCBmb3JtYXR0aW5nW2xjXSwgbGMsIGxvYyk6CisgICAgICAgICAgICAgICAgICAgIHRlc3RlZCA9IFRydWUKKyAgICAgICAgaWYgbm90IHRlc3RlZDoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25vIHN1aXRhYmxlIGxvY2FsZXMnKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MobmxfbGFuZ2luZm8sICJubF9sYW5naW5mbyBpcyBub3QgYXZhaWxhYmxlIikKICAgICBkZWYgdGVzdF9sY19udW1lcmljX2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFRlc3QgbmxfbGFuZ2luZm8gYWdhaW5zdCBsb2NhbGVjb252CisgICAgICAgIHRlc3RlZCA9IEZhbHNlCiAgICAgICAgIGZvciBsb2MgaW4gY2FuZGlkYXRlX2xvY2FsZXM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsIGxvYykKQEAgLTE0MCwxMCArMTU5LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoc2V0IHRvICVzLCB1c2luZyAlcykiICUgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmxfcmFkaXhjaGFyLCBsaV9yYWRpeGNoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2MsIHNldF9sb2NhbGUpKQorICAgICAgICAgICAgICAgIHRlc3RlZCA9IFRydWUKKyAgICAgICAgaWYgbm90IHRlc3RlZDoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25vIHN1aXRhYmxlIGxvY2FsZXMnKQogCiAgICAgZGVmIHRlc3RfZmxvYXRfcGFyc2luZyhzZWxmKToKICAgICAgICAgIyBCdWcgIzEzOTE4NzI6IFRlc3Qgd2hldGhlciBmbG9hdCBwYXJzaW5nIGlzIG9rYXkgb24gRXVyb3BlYW4KICAgICAgICAgIyBsb2NhbGVzLgorICAgICAgICB0ZXN0ZWQgPSBGYWxzZQogICAgICAgICBmb3IgbG9jIGluIGNhbmRpZGF0ZV9sb2NhbGVzOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNldGxvY2FsZShMQ19OVU1FUklDLCBsb2MpCkBAIC0xNjIsOSArMTg1LDEwIEBACiAgICAgICAgICAgICBpZiBsb2NhbGVjb252KClbJ2RlY2ltYWxfcG9pbnQnXSAhPSAnLic6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlY29udigpWydkZWNpbWFsX3BvaW50J10uam9pbihbJzEnLCAnMjMnXSkpCisgICAgICAgICAgICB0ZXN0ZWQgPSBUcnVlCisgICAgICAgIGlmIG5vdCB0ZXN0ZWQ6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdubyBzdWl0YWJsZSBsb2NhbGVzJykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChfTG9jYWxlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfX29wY29kZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTUyZTlkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9fb3Bjb2RlLnB5CkBAIC0wLDAgKzEsMjMgQEAKK2ltcG9ydCBkaXMKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCB1bml0dGVzdAorCitfb3Bjb2RlID0gaW1wb3J0X21vZHVsZSgiX29wY29kZSIpCisKK2NsYXNzIE9wY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3N0YWNrX2VmZmVjdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfb3Bjb2RlLnN0YWNrX2VmZmVjdChkaXMub3BtYXBbJ1BPUF9UT1AnXSksIC0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9vcGNvZGUuc3RhY2tfZWZmZWN0KGRpcy5vcG1hcFsnRFVQX1RPUF9UV08nXSksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydCVUlMRF9TTElDRSddLCAwKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydCVUlMRF9TTElDRSddLCAxKSwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX29wY29kZS5zdGFja19lZmZlY3QoZGlzLm9wbWFwWydCVUlMRF9TTElDRSddLCAzKSwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIF9vcGNvZGUuc3RhY2tfZWZmZWN0LCAzMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX29wY29kZS5zdGFja19lZmZlY3QsIGRpcy5vcG1hcFsnQlVJTERfU0xJQ0UnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgX29wY29kZS5zdGFja19lZmZlY3QsIGRpcy5vcG1hcFsnUE9QX1RPUCddLCAwKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KE9wY29kZVRlc3RzKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X19vc3hfc3VwcG9ydC5weSBiL0xpYi90ZXN0L3Rlc3RfX29zeF9zdXBwb3J0LnB5CmluZGV4IGZiMTU5ZWMuLjVkY2FkZjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfX29zeF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfX29zeF9zdXBwb3J0LnB5CkBAIC0xMDksNyArMTA5LDkgQEAKIAogICAgIGRlZiB0ZXN0X19zdXBwb3J0c191bml2ZXJzYWxfYnVpbGRzKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGxhdGZvcm0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGF0Zm9ybS5tYWNfdmVyKClbMF0uc3BsaXQoJy4nKSA+PSBbJzEwJywgJzQnXSwKKyAgICAgICAgbWFjX3Zlcl90dXBsZSA9IHR1cGxlKGludChpKSBmb3IgaSBpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtLm1hY192ZXIoKVswXS5zcGxpdCgnLicpWzA6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjX3Zlcl90dXBsZSA+PSAoMTAsIDQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9vc3hfc3VwcG9ydC5fc3VwcG9ydHNfdW5pdmVyc2FsX2J1aWxkcygpKQogCiAgICAgZGVmIHRlc3RfX2ZpbmRfYXBwcm9wcmlhdGVfY29tcGlsZXIoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FiYy5weSBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CmluZGV4IGQ0ZDc1NTYuLmUxNzY1ZjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYWJjLnB5CkBAIC02OCw2ICs2OCwxOSBAQAogCiBjbGFzcyBUZXN0QUJDKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X0FCQ19oZWxwZXIoc2VsZik6CisgICAgICAgICMgY3JlYXRlIGFuIEFCQyB1c2luZyB0aGUgaGVscGVyIGNsYXNzIGFuZCBwZXJmb3JtIGJhc2ljIGNoZWNrcworICAgICAgICBjbGFzcyBDKGFiYy5BQkMpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHJldHVybiBjbHMuX19uYW1lX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKEMpLCBhYmMuQUJDTWV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDKQorICAgICAgICBjbGFzcyBEKEMpOgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgZm9vKGNscyk6IHJldHVybiBzdXBlcigpLmZvbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRC5mb28oKSwgJ0QnKQorCiAgICAgZGVmIHRlc3RfYWJzdHJhY3RtZXRob2RfYmFzaWNzKHNlbGYpOgogICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCiAgICAgICAgIGRlZiBmb28oc2VsZik6IHBhc3MKQEAgLTE4MSw5ICsxOTQsOSBAQAogICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIHByb3BlcnR5J3MgX19pc2Fic3RyYWN0bWV0aG9kX18gZGVzY3JpcHRvciBkb2VzIHRoZQogICAgICAgICAjIHJpZ2h0IHRoaW5nIHdoZW4gcHJlc2VudGVkIHdpdGggYSB2YWx1ZSB0aGF0IGZhaWxzIHRydXRoIHRlc3Rpbmc6CiAgICAgICAgIGNsYXNzIE5vdEJvb2wob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX25vbnplcm9fXyhzZWxmKToKKyAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKLSAgICAgICAgICAgIF9fbGVuX18gPSBfX25vbnplcm9fXworICAgICAgICAgICAgX19sZW5fXyA9IF9fYm9vbF9fCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBjbGFzcyBGKEMpOgogICAgICAgICAgICAgICAgIGRlZiBiYXIoc2VsZik6CkBAIC0yODgsNyArMzAxLDEwIEBACiAgICAgICAgIGIgPSBCKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKGIsIEEpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGlzaW5zdGFuY2UoYiwgKEEsKSkpCisgICAgICAgIHRva2VuX29sZCA9IGFiYy5nZXRfY2FjaGVfdG9rZW4oKQogICAgICAgICBBLnJlZ2lzdGVyKEIpCisgICAgICAgIHRva2VuX25ldyA9IGFiYy5nZXRfY2FjaGVfdG9rZW4oKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHRva2VuX29sZCwgdG9rZW5fbmV3KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShiLCBBKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UoYiwgKEEsKSkpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYWlmYy5weSBiL0xpYi90ZXN0L3Rlc3RfYWlmYy5weQppbmRleCAxMDI2MGUzLi5hYjUxNDM3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FpZmMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9haWZjLnB5CkBAIC0xLDYgKzEsNyBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBURVNURk4sIHVubGluawogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IGF1ZGlvdGVzdHMKK2Zyb20gYXVkaW9vcCBpbXBvcnQgYnl0ZXN3YXAKIGltcG9ydCBvcwogaW1wb3J0IGlvCiBpbXBvcnQgc3lzCkBAIC0xMTksNyArMTIwLDcgQEAKICAgICAgIEU1MDQwQ0JDIDYxN0MwQTNDIDA4QkMwQTNDIDJDN0MwQjNDIDUxN0MwRTNDIDhBODQxMEZDIEI2ODQwRUJDIDQ1N0MwQTNDIFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMihmcmFtZXMpCisgICAgICAgIGZyYW1lcyA9IGJ5dGVzd2FwKGZyYW1lcywgMikKIAogCiBjbGFzcyBBaWZjQUxBV1Rlc3QoQWlmY1Rlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE0MCw3ICsxNDEsNyBAQAogICAgICAgRTQ4MDBDQzAgNjIwMDBBNDAgMDhDMDBBNDAgMkIwMDBCNDAgNTIwMDBFNDAgOEEwMDExODAgQjYwMDBFQzAgNDYwMDBBNDAgXAogICAgICAgIiIiKQogICAgIGlmIHN5cy5ieXRlb3JkZXIgIT0gJ2JpZyc6Ci0gICAgICAgIGZyYW1lcyA9IGF1ZGlvdGVzdHMuYnl0ZXN3YXAyKGZyYW1lcykKKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGNsYXNzIEFpZmNNaXNjVGVzdChhdWRpb3Rlc3RzLkF1ZGlvVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTE0OSw2ICsxNTAsMjEgQEAKICAgICAgICAgI1RoaXMgZmlsZSBjb250YWlucyBjaHVuayB0eXBlcyBhaWZjIGRvZXNuJ3QgcmVjb2duaXplLgogICAgICAgICBzZWxmLmYgPSBhaWZjLm9wZW4oZmluZGZpbGUoJ1NpbmUtMTAwMEh6LTMwMG1zLmFpZicpKQogCisgICAgZGVmIHRlc3RfcGFyYW1zX2FkZGVkKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mID0gYWlmYy5vcGVuKFRFU1RGTiwgJ3diJykKKyAgICAgICAgZi5haWZmKCkKKyAgICAgICAgZi5zZXRwYXJhbXMoKDEsIDEsIDEsIDEsIGInTk9ORScsIGInJykpCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOLCAncmInKQorICAgICAgICBwYXJhbXMgPSBmLmdldHBhcmFtcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5jaGFubmVscywgZi5nZXRuY2hhbm5lbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJhbXMuc2FtcHdpZHRoLCBmLmdldHNhbXB3aWR0aCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5mcmFtZXJhdGUsIGYuZ2V0ZnJhbWVyYXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyYW1zLm5mcmFtZXMsIGYuZ2V0bmZyYW1lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wdHlwZSwgZi5nZXRjb21wdHlwZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcmFtcy5jb21wbmFtZSwgZi5nZXRjb21wbmFtZSgpKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfaGVhZGVyX2NvbXB0eXBlX3NhbXB3aWR0aChzZWxmKToKICAgICAgICAgZm9yIGNvbXB0eXBlIGluIChiJ1VMQVcnLCBiJ3VsYXcnLCBiJ0FMQVcnLCBiJ2FsYXcnLCBiJ0c3MjInKToKICAgICAgICAgICAgIGZvdXQgPSBhaWZjLm9wZW4oaW8uQnl0ZXNJTygpLCAnd2InKQpAQCAtMzUyLDEyICszNjgsMTQgQEAKIAogICAgIGRlZiB0ZXN0X3dyaXRlX2FpZmZfYnlfZXh0ZW5zaW9uKHNlbGYpOgogICAgICAgICBzYW1wd2lkdGggPSAyCi0gICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oVEVTVEZOICsgJy5haWZmJywgJ3diJykKKyAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAnLmFpZmYnCisgICAgICAgIGZvdXQgPSBzZWxmLmZvdXQgPSBhaWZjLm9wZW4oZmlsZW5hbWUsICd3YicpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIGZpbGVuYW1lKQogICAgICAgICBmb3V0LnNldHBhcmFtcygoMSwgc2FtcHdpZHRoLCAxLCAxLCBiJ1VMQVcnLCBiJycpKQogICAgICAgICBmcmFtZXMgPSBiJ1x4MDAnICogZm91dC5nZXRuY2hhbm5lbHMoKSAqIHNhbXB3aWR0aAogICAgICAgICBmb3V0LndyaXRlZnJhbWVzKGZyYW1lcykKICAgICAgICAgZm91dC5jbG9zZSgpCi0gICAgICAgIGYgPSBzZWxmLmYgPSBhaWZjLm9wZW4oVEVTVEZOICsgJy5haWZmJywgJ3JiJykKKyAgICAgICAgZiA9IHNlbGYuZiA9IGFpZmMub3BlbihmaWxlbmFtZSwgJ3JiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmdldGNvbXB0eXBlKCksIGInTk9ORScpCiAgICAgICAgIGYuY2xvc2UoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9hcmdwYXJzZS5weQppbmRleCA5Y2IxNWM3Li41ZWZkYjY3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FyZ3BhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXJncGFyc2UucHkKQEAgLTE0LDYgKzE0LDcgQEAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogY2xhc3MgU3RkSU9CdWZmZXIoU3RyaW5nSU8pOgogICAgIHBhc3MKIApAQCAtNDYsNiArNDcsOSBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBvcy5jaGRpcihzZWxmLm9sZF9kaXIpCisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHNlbGYudGVtcF9kaXIsIHRvcGRvd249RmFsc2UpOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgb3MuY2htb2Qob3MucGF0aC5qb2luKHNlbGYudGVtcF9kaXIsIG5hbWUpLCBzdGF0LlNfSVdSSVRFKQogICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYudGVtcF9kaXIsIFRydWUpCiAKICAgICBkZWYgY3JlYXRlX3JlYWRvbmx5X2ZpbGUoc2VsZiwgZmlsZW5hbWUpOgpAQCAtMjMxLDggKzIzNSw4IEBACiAgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0X3BhcnNlcih0ZXN0ZXIpCiAgICAgICAgICAgICAgICAgZm9yIGFyZ3Nfc3RyIGluIHRlc3Rlci5mYWlsdXJlczoKICAgICAgICAgICAgICAgICAgICAgYXJncyA9IGFyZ3Nfc3RyLnNwbGl0KCkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2VzID0gdGVzdGVyLmFzc2VydFJhaXNlcwotICAgICAgICAgICAgICAgICAgICByYWlzZXMoQXJndW1lbnRQYXJzZXJFcnJvciwgcGFyc2VyLnBhcnNlX2FyZ3MsIGFyZ3MpCisgICAgICAgICAgICAgICAgICAgIHdpdGggdGVzdGVyLmFzc2VydFJhaXNlcyhBcmd1bWVudFBhcnNlckVycm9yLCBtc2c9YXJncyk6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQogCiAgICAgICAgICAgICBkZWYgdGVzdF9zdWNjZXNzZXMoc2VsZiwgdGVzdGVyKToKICAgICAgICAgICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRfcGFyc2VyKHRlc3RlcikKQEAgLTY0MCw3ICs2NDQsNyBAQAogCiAKIGNsYXNzIFRlc3RPcHRpb25hbHNSZXF1aXJlZChQYXJzZXJUZXN0Q2FzZSk6Ci0gICAgIiIiVGVzdHMgdGhlIGFuIG9wdGlvbmFsIGFjdGlvbiB0aGF0IGlzIHJlcXVpcmVkIiIiCisgICAgIiIiVGVzdHMgYW4gb3B0aW9uYWwgYWN0aW9uIHRoYXQgaXMgcmVxdWlyZWQiIiIKIAogICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCiAgICAgICAgIFNpZygnLXgnLCB0eXBlPWludCwgcmVxdWlyZWQ9VHJ1ZSksCkBAIC0xNDIxLDYgKzE0MjUsMTkgQEAKICAgICAgICAgdHlwZSA9IGFyZ3BhcnNlLkZpbGVUeXBlKCd3YicsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkZpbGVUeXBlKCd3YicsIDEpIiwgcmVwcih0eXBlKSkKIAorICAgIGRlZiB0ZXN0X3JfbGF0aW4oc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgncicsIGVuY29kaW5nPSdsYXRpbl8xJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiRmlsZVR5cGUoJ3InLCBlbmNvZGluZz0nbGF0aW5fMScpIiwgcmVwcih0eXBlKSkKKworICAgIGRlZiB0ZXN0X3dfYmlnNV9pZ25vcmUoc2VsZik6CisgICAgICAgIHR5cGUgPSBhcmdwYXJzZS5GaWxlVHlwZSgndycsIGVuY29kaW5nPSdiaWc1JywgZXJyb3JzPSdpZ25vcmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgndycsIGVuY29kaW5nPSdiaWc1JywgZXJyb3JzPSdpZ25vcmUnKSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVwcih0eXBlKSkKKworICAgIGRlZiB0ZXN0X3JfMV9yZXBsYWNlKHNlbGYpOgorICAgICAgICB0eXBlID0gYXJncGFyc2UuRmlsZVR5cGUoJ3InLCAxLCBlcnJvcnM9J3JlcGxhY2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJGaWxlVHlwZSgncicsIDEsIGVycm9ycz0ncmVwbGFjZScpIiwgcmVwcih0eXBlKSkKKwogCiBjbGFzcyBSRmlsZShvYmplY3QpOgogICAgIHNlZW4gPSB7fQpAQCAtMTU1Nyw2ICsxNTc0LDI0IEBACiAgICAgXQogCiAKK2NsYXNzIFRlc3RGaWxlVHlwZU9wZW5BcmdzKFRlc3RDYXNlKToKKyAgICAiIiJUZXN0IHRoYXQgb3BlbiAodGhlIGJ1aWx0aW4pIGlzIGNvcnJlY3RseSBjYWxsZWQiIiIKKworICAgIGRlZiB0ZXN0X29wZW5fYXJncyhzZWxmKToKKyAgICAgICAgRlQgPSBhcmdwYXJzZS5GaWxlVHlwZQorICAgICAgICBjYXNlcyA9IFsKKyAgICAgICAgICAgIChGVCgncmInKSwgKCdyYicsIC0xLCBOb25lLCBOb25lKSksCisgICAgICAgICAgICAoRlQoJ3cnLCAxKSwgKCd3JywgMSwgTm9uZSwgTm9uZSkpLAorICAgICAgICAgICAgKEZUKCd3JywgZXJyb3JzPSdyZXBsYWNlJyksICgndycsIC0xLCBOb25lLCAncmVwbGFjZScpKSwKKyAgICAgICAgICAgIChGVCgnd2InLCBlbmNvZGluZz0nYmlnNScpLCAoJ3diJywgLTEsICdiaWc1JywgTm9uZSkpLAorICAgICAgICAgICAgKEZUKCd3JywgMCwgJ2wxJywgJ3N0cmljdCcpLCAoJ3cnLCAwLCAnbDEnLCAnc3RyaWN0JykpLAorICAgICAgICBdCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYnVpbHRpbnMub3BlbicpIGFzIG06CisgICAgICAgICAgICBmb3IgdHlwZSwgYXJncyBpbiBjYXNlczoKKyAgICAgICAgICAgICAgICB0eXBlKCdmb28nKQorICAgICAgICAgICAgICAgIG0uYXNzZXJ0X2NhbGxlZF93aXRoKCdmb28nLCAqYXJncykKKworCiBjbGFzcyBUZXN0VHlwZUNhbGxhYmxlKFBhcnNlclRlc3RDYXNlKToKICAgICAiIiJUZXN0IHNvbWUgY2FsbGFibGVzIGFzIG9wdGlvbi9hcmd1bWVudCB0eXBlcyIiIgogCkBAIC0yNzYwLDYgKzI3OTUsMTMgQEAKICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOUyh4PSdmb28nKSwgcGFyc2VyLnBhcnNlX2FyZ3MoW10pKQogCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRzX29uX3BhcmVudF9hbmRfc3VicGFyc2VyKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcigpCisgICAgICAgIHhwYXJzZXIgPSBwYXJzZXIuYWRkX3N1YnBhcnNlcnMoKS5hZGRfcGFyc2VyKCdYJykKKyAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyhmb289MSkKKyAgICAgICAgeHBhcnNlci5zZXRfZGVmYXVsdHMoZm9vPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTlMoZm9vPTIpLCBwYXJzZXIucGFyc2VfYXJncyhbJ1gnXSkpCisKICAgICBkZWYgdGVzdF9zZXRfZGVmYXVsdHNfc2FtZV9hc19hZGRfYXJndW1lbnQoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKCkKICAgICAgICAgcGFyc2VyLnNldF9kZWZhdWx0cyh3PSdXJywgeD0nWCcsIHk9J1knLCB6PSdaJykKQEAgLTI5NzcsNyArMzAxOSw3IEBACiAgICAgJycnVGVzdCBleHRyZW1lbHkgc21hbGwgbnVtYmVyIG9mIGNvbHVtbnMuCiAKICAgICBUZXN0Q2FzZSBwcmV2ZW50cyAiQ09MVU1OUyIgZnJvbSBiZWluZyB0b28gc21hbGwgaW4gdGhlIHRlc3RzIHRoZW1zZWx2ZXMsCi0gICAgYnV0IHdlIGRvbid0IHdhbnQgYW55IGV4Y2VwdGlvbnMgdGhyb3duIGluIHN1Y2ggY2FzZS4gT25seSB1Z2x5IHJlcHJlc2VudGF0aW9uLgorICAgIGJ1dCB3ZSBkb24ndCB3YW50IGFueSBleGNlcHRpb25zIHRocm93biBpbiBzdWNoIGNhc2VzLiBPbmx5IHVnbHkgcmVwcmVzZW50YXRpb24uCiAgICAgJycnCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBlbnYgPSBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKQpAQCAtMzgwMywzNCArMzg0NSw2IEBACiAgICAgdmVyc2lvbiA9ICcnCiAKIAotY2xhc3MgVGVzdEhlbHBWZXJzaW9uT3B0aW9uYWwoSGVscFRlc3RDYXNlKToKLSAgICAiIiJUZXN0IHRoYXQgdGhlIC0tdmVyc2lvbiBhcmd1bWVudCBjYW4gYmUgc3VwcHJlc3NlZCBoZWxwIG1lc3NhZ2VzIiIiCi0KLSAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnKQotICAgIGFyZ3VtZW50X3NpZ25hdHVyZXMgPSBbCi0gICAgICAgIFNpZygnLXYnLCAnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nMS4wJyksCi0gICAgICAgIFNpZygnLS1mb28nLCBoZWxwPSdmb28gaGVscCcpLAotICAgICAgICBTaWcoJ3NwYW0nLCBoZWxwPSdzcGFtIGhlbHAnKSwKLSAgICBdCi0gICAgYXJndW1lbnRfZ3JvdXBfc2lnbmF0dXJlcyA9IFtdCi0gICAgdXNhZ2UgPSAnJydcCi0gICAgICAgIHVzYWdlOiBQUk9HIFstaF0gWy12XSBbLS1mb28gRk9PXSBzcGFtCi0gICAgICAgICcnJwotICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKLQotICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKLSAgICAgICAgICBzcGFtICAgICAgICAgICBzcGFtIGhlbHAKLQotICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6Ci0gICAgICAgICAgLWgsIC0taGVscCAgICAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAotICAgICAgICAgIC12LCAtLXZlcnNpb24gIHNob3cgcHJvZ3JhbSdzIHZlcnNpb24gbnVtYmVyIGFuZCBleGl0Ci0gICAgICAgICAgLS1mb28gRk9PICAgICAgZm9vIGhlbHAKLSAgICAgICAgJycnCi0gICAgdmVyc2lvbiA9ICcnJ1wKLSAgICAgICAgMS4wCi0gICAgICAgICcnJwotCi0KIGNsYXNzIFRlc3RIZWxwTm9uZShIZWxwVGVzdENhc2UpOgogICAgICIiIlRlc3QgdGhhdCBubyBlcnJvcnMgb2NjdXIgaWYgbm8gaGVscCBpcyBzcGVjaWZpZWQiIiIKIApAQCAtNDAzOCw2ICs0MDUyLDMyIEBACiAgICAgICAgICcnJwogICAgIHZlcnNpb24gPSAnJwogCisKK2NsYXNzIFRlc3RIZWxwVmVyc2lvbkFjdGlvblN1cHByZXNzKEhlbHBUZXN0Q2FzZSk6CisgICAgIiIiVGVzdCB0aGF0IHRoZSAtLXZlcnNpb24gYXJndW1lbnQgY2FuIGJlIHN1cHByZXNzZWQgaW4gaGVscCBtZXNzYWdlcyIiIgorCisgICAgcGFyc2VyX3NpZ25hdHVyZSA9IFNpZyhwcm9nPSdQUk9HJykKKyAgICBhcmd1bWVudF9zaWduYXR1cmVzID0gWworICAgICAgICBTaWcoJy12JywgJy0tdmVyc2lvbicsIGFjdGlvbj0ndmVyc2lvbicsIHZlcnNpb249JzEuMCcsCisgICAgICAgICAgICBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKSwKKyAgICAgICAgU2lnKCctLWZvbycsIGhlbHA9J2ZvbyBoZWxwJyksCisgICAgICAgIFNpZygnc3BhbScsIGhlbHA9J3NwYW0gaGVscCcpLAorICAgIF0KKyAgICBhcmd1bWVudF9ncm91cF9zaWduYXR1cmVzID0gW10KKyAgICB1c2FnZSA9ICcnJ1wKKyAgICAgICAgdXNhZ2U6IFBST0cgWy1oXSBbLS1mb28gRk9PXSBzcGFtCisgICAgICAgICcnJworICAgIGhlbHAgPSB1c2FnZSArICcnJ1wKKworICAgICAgICBwb3NpdGlvbmFsIGFyZ3VtZW50czoKKyAgICAgICAgICBzcGFtICAgICAgICBzcGFtIGhlbHAKKworICAgICAgICBvcHRpb25hbCBhcmd1bWVudHM6CisgICAgICAgICAgLWgsIC0taGVscCAgc2hvdyB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgICAgICAgIC0tZm9vIEZPTyAgIGZvbyBoZWxwCisgICAgICAgICcnJworCisKIGNsYXNzIFRlc3RIZWxwU3VicGFyc2Vyc09yZGVyaW5nKEhlbHBUZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCBvcmRlcmluZyBvZiBzdWJjb21tYW5kcyBpbiBoZWxwIG1hdGNoZXMgdGhlIGNvZGUiIiIKICAgICBwYXJzZXJfc2lnbmF0dXJlID0gU2lnKHByb2c9J1BST0cnLApAQCAtNDM4MSw3ICs0NDIxLDcgQEAKICAgICBkZWYgdGVzdF92ZXJzaW9uX2Zvcm1hdChzZWxmKToKICAgICAgICAgcGFyc2VyID0gRXJyb3JSYWlzaW5nQXJndW1lbnRQYXJzZXIocHJvZz0nUFBQJykKICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXYnLCAnLS12ZXJzaW9uJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMy41JykKLSAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy12J10pLnN0ZGVycgorICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLXYnXSkuc3Rkb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1BQUCAzLjVcbicsIG1zZykKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9faGVscChzZWxmKToKQEAgLTQzOTQsNyArNDQzNCw3IEBACiAgICAgZGVmIHRlc3RfdmVyc2lvbl9hY3Rpb24oc2VsZik6CiAgICAgICAgIHBhcnNlciA9IEVycm9yUmFpc2luZ0FyZ3VtZW50UGFyc2VyKHByb2c9J1hYWCcpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1WJywgYWN0aW9uPSd2ZXJzaW9uJywgdmVyc2lvbj0nJShwcm9nKXMgMy43JykKLSAgICAgICAgbXNnID0gc2VsZi5fZ2V0X2Vycm9yKHBhcnNlci5wYXJzZV9hcmdzLCBbJy1WJ10pLnN0ZGVycgorICAgICAgICBtc2cgPSBzZWxmLl9nZXRfZXJyb3IocGFyc2VyLnBhcnNlX2FyZ3MsIFsnLVYnXSkuc3Rkb3V0CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1hYWCAzLjdcbicsIG1zZykKIAogICAgIGRlZiB0ZXN0X25vX2hlbHAoc2VsZik6CkBAIC00NTE2LDYgKzQ1NTYsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zMiAhPSBuczMpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuczIgIT0gbnM0KQogCisgICAgZGVmIHRlc3RfZXF1YWxpdHlfcmV0dXJuc19ub3RpbXBsZW1ldGVkKHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAyMTQ4MQorICAgICAgICBucyA9IGFyZ3BhcnNlLk5hbWVzcGFjZShhPTEsIGI9MikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhucy5fX2VxX18oTm9uZSksIE5vdEltcGxlbWVudGVkKQorICAgICAgICBzZWxmLmFzc2VydElzKG5zLl9fbmVfXyhOb25lKSwgTm90SW1wbGVtZW50ZWQpCisKIAogIyA9PT09PT09PT09PT09PT09PT09CiAjIEZpbGUgZW5jb2RpbmcgdGVzdHMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CmluZGV4IGQ2ODI4NGYuLjA3YzliZjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQpAQCAtMjg1LDE3ICsyODUsMTggQEAKIAogICAgIGRlZiB0ZXN0X2l0ZXJhdG9yX3BpY2tsZShzZWxmKToKICAgICAgICAgZGF0YSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIHNlbGYuZXhhbXBsZSkKLSAgICAgICAgb3JnaXQgPSBpdGVyKGRhdGEpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMob3JnaXQpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShvcmdpdCksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBsaXN0KGRhdGEpKQotCi0gICAgICAgIGlmIGxlbihkYXRhKToKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBvcmdpdCA9IGl0ZXIoZGF0YSkKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMob3JnaXQsIHByb3RvKQogICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgICAgIG5leHQoaXQpCi0gICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChkYXRhKVsxOl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUob3JnaXQpLCB0eXBlKGl0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGxpc3QoZGF0YSkpCisKKyAgICAgICAgICAgIGlmIGxlbihkYXRhKToKKyAgICAgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChkYXRhKVsxOl0pCiAKICAgICBkZWYgdGVzdF9pbnNlcnQoc2VsZik6CiAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBzZWxmLmV4YW1wbGUpCkBAIC0zNTMsMTIgKzM1NCwxMiBAQAogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9mcm9tZmlsZV9pb2Vycm9yKHNlbGYpOgotICAgICAgICAjIElzc3VlICM1Mzk1OiBDaGVjayBpZiBmcm9tZmlsZSByYWlzZXMgYSBwcm9wZXIgSU9FcnJvcgorICAgICAgICAjIElzc3VlICM1Mzk1OiBDaGVjayBpZiBmcm9tZmlsZSByYWlzZXMgYSBwcm9wZXIgT1NFcnJvcgogICAgICAgICAjIGluc3RlYWQgb2YgRU9GRXJyb3IuCiAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlKQogICAgICAgICBmID0gb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgYS5mcm9tZmlsZSwgZiwgbGVuKHNlbGYuZXhhbXBsZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBhLmZyb21maWxlLCBmLCBsZW4oc2VsZi5leGFtcGxlKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCkBAIC0xMDI2LDYgKzEwMjcsMTggQEAKICAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGN2b2Jqc2l6ZSgnUG4yUGknKQogICAgICAgICBzdXBwb3J0LmNoZWNrX3NpemVvZihzZWxmLCBhLCBiYXNlc2l6ZSkKIAorICAgIGRlZiB0ZXN0X2luaXRpYWxpemVfd2l0aF91bmljb2RlKHNlbGYpOgorICAgICAgICBpZiBzZWxmLnR5cGVjb2RlICE9ICd1JzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoc2VsZi50eXBlY29kZSwgJ2ZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJjYW5ub3QgdXNlIGEgc3RyIiwgc3RyKGNtLmV4Y2VwdGlvbikpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgYSA9IGFycmF5LmFycmF5KHNlbGYudHlwZWNvZGUsIGFycmF5LmFycmF5KCd1JywgJ2ZvbycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiY2Fubm90IHVzZSBhIHVuaWNvZGUgYXJyYXkiLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCAiZm9vIikKKyAgICAgICAgICAgIGEgPSBhcnJheS5hcnJheShzZWxmLnR5cGVjb2RlLCBhcnJheS5hcnJheSgndScsICdmb28nKSkKKwogCiBjbGFzcyBTdHJpbmdUZXN0KEJhc2VUZXN0KToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3QucHkgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQppbmRleCA2MzUyODg4Li5hNTMzZjg2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2FzdC5weQpAQCAtMzcsNyArMzcsNyBAQAogICAgICMgRnVuY3Rpb25EZWYgd2l0aCBrd2FyZ3MKICAgICAiZGVmIGYoKiprd2FyZ3MpOiBwYXNzIiwKICAgICAjIEZ1bmN0aW9uRGVmIHdpdGggYWxsIGtpbmQgb2YgYXJncwotICAgICJkZWYgZihhLCBiPTEsIGM9Tm9uZSwgZD1bXSwgZT17fSwgKmFyZ3MsICoqa3dhcmdzKTogcGFzcyIsCisgICAgImRlZiBmKGEsIGI9MSwgYz1Ob25lLCBkPVtdLCBlPXt9LCAqYXJncywgZj00MiwgKiprd2FyZ3MpOiBwYXNzIiwKICAgICAjIENsYXNzRGVmCiAgICAgImNsYXNzIEM6cGFzcyIsCiAgICAgIyBDbGFzc0RlZiwgbmV3IHN0eWxlIGNsYXNzCkBAIC0yNjIsMTQgKzI2MiwxMyBAQAogCiAgICAgZGVmIHRlc3RfYXJndW1lbnRzKHNlbGYpOgogICAgICAgICB4ID0gYXN0LmFyZ3VtZW50cygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5fZmllbGRzLCAoJ2FyZ3MnLCAndmFyYXJnJywgJ3ZhcmFyZ2Fubm90YXRpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAna3dvbmx5YXJncycsICdrd2FyZycsICdrd2FyZ2Fubm90YXRpb24nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVmYXVsdHMnLCAna3dfZGVmYXVsdHMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9maWVsZHMsICgnYXJncycsICd2YXJhcmcnLCAna3dvbmx5YXJncycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdrd19kZWZhdWx0cycsICdrd2FyZycsICdkZWZhdWx0cycpKQogCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgogICAgICAgICAgICAgeC52YXJhcmcKIAotICAgICAgICB4ID0gYXN0LmFyZ3VtZW50cygqcmFuZ2UoMSwgOSkpCisgICAgICAgIHggPSBhc3QuYXJndW1lbnRzKCpyYW5nZSgxLCA3KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LnZhcmFyZywgMikKIAogICAgIGRlZiB0ZXN0X2ZpZWxkX2F0dHJfd3JpdGFibGUoc2VsZik6CkBAIC01NjAsOCArNTU5LDggQEAKICAgICAgICAgc2VsZi5tb2QobSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiLCAiZXZhbCIpCiAKICAgICBkZWYgX2NoZWNrX2FyZ3VtZW50cyhzZWxmLCBmYWMsIGNoZWNrKToKLSAgICAgICAgZGVmIGFyZ3VtZW50cyhhcmdzPU5vbmUsIHZhcmFyZz1Ob25lLCB2YXJhcmdhbm5vdGF0aW9uPU5vbmUsCi0gICAgICAgICAgICAgICAgICAgICAga3dvbmx5YXJncz1Ob25lLCBrd2FyZz1Ob25lLCBrd2FyZ2Fubm90YXRpb249Tm9uZSwKKyAgICAgICAgZGVmIGFyZ3VtZW50cyhhcmdzPU5vbmUsIHZhcmFyZz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgIGt3b25seWFyZ3M9Tm9uZSwga3dhcmc9Tm9uZSwKICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0cz1Ob25lLCBrd19kZWZhdWx0cz1Ob25lKToKICAgICAgICAgICAgIGlmIGFyZ3MgaXMgTm9uZToKICAgICAgICAgICAgICAgICBhcmdzID0gW10KQEAgLTU3MSwyMCArNTcwLDEyIEBACiAgICAgICAgICAgICAgICAgZGVmYXVsdHMgPSBbXQogICAgICAgICAgICAgaWYga3dfZGVmYXVsdHMgaXMgTm9uZToKICAgICAgICAgICAgICAgICBrd19kZWZhdWx0cyA9IFtdCi0gICAgICAgICAgICBhcmdzID0gYXN0LmFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIHZhcmFyZ2Fubm90YXRpb24sIGt3b25seWFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2FyZywga3dhcmdhbm5vdGF0aW9uLCBkZWZhdWx0cywga3dfZGVmYXVsdHMpCisgICAgICAgICAgICBhcmdzID0gYXN0LmFyZ3VtZW50cyhhcmdzLCB2YXJhcmcsIGt3b25seWFyZ3MsIGt3X2RlZmF1bHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmcsIGRlZmF1bHRzKQogICAgICAgICAgICAgcmV0dXJuIGZhYyhhcmdzKQogICAgICAgICBhcmdzID0gW2FzdC5hcmcoIngiLCBhc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSldCiAgICAgICAgIGNoZWNrKGFyZ3VtZW50cyhhcmdzPWFyZ3MpLCAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCi0gICAgICAgIGNoZWNrKGFyZ3VtZW50cyh2YXJhcmdhbm5vdGF0aW9uPWFzdC5OdW0oMykpLAotICAgICAgICAgICAgICAidmFyYXJnYW5ub3RhdGlvbiBidXQgbm8gdmFyYXJnIikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKHZhcmFyZ2Fubm90YXRpb249YXN0Lk5hbWUoIngiLCBhc3QuU3RvcmUoKSksIHZhcmFyZz0ieCIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKICAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3b25seWFyZ3M9YXJncyksICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3YXJnYW5ub3RhdGlvbj1hc3QuTnVtKDQyKSksCi0gICAgICAgICAgICAgICAgICAgICAgICJrd2FyZ2Fubm90YXRpb24gYnV0IG5vIGt3YXJnIikKLSAgICAgICAgY2hlY2soYXJndW1lbnRzKGt3YXJnYW5ub3RhdGlvbj1hc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAga3dhcmc9IngiKSwgIm11c3QgaGF2ZSBMb2FkIGNvbnRleHQiKQogICAgICAgICBjaGVjayhhcmd1bWVudHMoZGVmYXVsdHM9W2FzdC5OdW0oMyldKSwKICAgICAgICAgICAgICAgICAgICAgICAgIm1vcmUgcG9zaXRpb25hbCBkZWZhdWx0cyB0aGFuIGFyZ3MiKQogICAgICAgICBjaGVjayhhcmd1bWVudHMoa3dfZGVmYXVsdHM9W2FzdC5OdW0oNCldKSwKQEAgLTU5OSw3ICs1OTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAKICAgICBkZWYgdGVzdF9mdW5jZGVmKHNlbGYpOgotICAgICAgICBhID0gYXN0LmFyZ3VtZW50cyhbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSkKKyAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pCiAgICAgICAgIGYgPSBhc3QuRnVuY3Rpb25EZWYoIngiLCBhLCBbXSwgW10sIE5vbmUpCiAgICAgICAgIHNlbGYuc3RtdChmLCAiZW1wdHkgYm9keSBvbiBGdW5jdGlvbkRlZiIpCiAgICAgICAgIGYgPSBhc3QuRnVuY3Rpb25EZWYoIngiLCBhLCBbYXN0LlBhc3MoKV0sIFthc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKV0sCkBAIC03NzAsNyArNzYxLDcgQEAKICAgICAgICAgc2VsZi5leHByKHUsICJtdXN0IGhhdmUgTG9hZCBjb250ZXh0IikKIAogICAgIGRlZiB0ZXN0X2xhbWJkYShzZWxmKToKLSAgICAgICAgYSA9IGFzdC5hcmd1bWVudHMoW10sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pCisgICAgICAgIGEgPSBhc3QuYXJndW1lbnRzKFtdLCBOb25lLCBbXSwgW10sIE5vbmUsIFtdKQogICAgICAgICBzZWxmLmV4cHIoYXN0LkxhbWJkYShhLCBhc3QuTmFtZSgieCIsIGFzdC5TdG9yZSgpKSksCiAgICAgICAgICAgICAgICAgICAibXVzdCBoYXZlIExvYWQgY29udGV4dCIpCiAgICAgICAgIGRlZiBmYWMoYXJncyk6CkBAIC05MjgsNiArOTE5LDkgQEAKICAgICBkZWYgdGVzdF90dXBsZShzZWxmKToKICAgICAgICAgc2VsZi5fc2VxdWVuY2UoYXN0LlR1cGxlKQogCisgICAgZGVmIHRlc3RfbmFtZWNvbnN0YW50KHNlbGYpOgorICAgICAgICBzZWxmLmV4cHIoYXN0Lk5hbWVDb25zdGFudCg0KSwgInNpbmdsZXRvbiBtdXN0IGJlIFRydWUsIEZhbHNlLCBvciBOb25lIikKKwogICAgIGRlZiB0ZXN0X3N0ZGxpYl92YWxpZGF0ZXMoc2VsZik6CiAgICAgICAgIHN0ZGxpYiA9IG9zLnBhdGguZGlybmFtZShhc3QuX19maWxlX18pCiAgICAgICAgIHRlc3RzID0gW2ZuIGZvciBmbiBpbiBvcy5saXN0ZGlyKHN0ZGxpYikgaWYgZm4uZW5kc3dpdGgoIi5weSIpXQpAQCAtOTM2LDEzICs5MzAsMTAgQEAKICAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHN0ZGxpYiwgbW9kdWxlKQogICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAiciIsIGVuY29kaW5nPSJ1dGYtOCIpIGFzIGZwOgogICAgICAgICAgICAgICAgIHNvdXJjZSA9IGZwLnJlYWQoKQotICAgICAgICAgICAgbW9kID0gYXN0LnBhcnNlKHNvdXJjZSkKKyAgICAgICAgICAgIG1vZCA9IGFzdC5wYXJzZShzb3VyY2UsIGZuKQogICAgICAgICAgICAgY29tcGlsZShtb2QsIGZuLCAiZXhlYyIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEFTVF9UZXN0cywgQVNUSGVscGVyc19UZXN0LCBBU1RWYWxpZGF0b3JUZXN0cykKLQogZGVmIG1haW4oKToKICAgICBpZiBfX25hbWVfXyAhPSAnX19tYWluX18nOgogICAgICAgICByZXR1cm4KQEAgLTk1NSwyMCArOTQ2LDIwIEBACiAgICAgICAgICAgICBwcmludCgiXSIpCiAgICAgICAgIHByaW50KCJtYWluKCkiKQogICAgICAgICByYWlzZSBTeXN0ZW1FeGl0Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKIAogIyMjIyBFVkVSWVRISU5HIEJFTE9XIElTIEdFTkVSQVRFRCAjIyMjIwogZXhlY19yZXN1bHRzID0gWwotKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICdOb25lJywgKCdMb2FkJywpKSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1Bhc3MnLCAoMSwgOSkpXSwgW10sIE5vbmUpXSksCi0oJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgWygnYXJnJywgJ2EnLCBOb25lKV0sIE5vbmUsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDEwKSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAnYScsIE5vbmUpXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFsoJ051bScsICgxLCA4KSwgMCldLCBbXSksIFsoJ1Bhc3MnLCAoMSwgMTIpKV0sIFtdLCBOb25lKV0pLAotKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFtdLCAnYXJncycsIE5vbmUsIFtdLCBOb25lLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDE0KSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sICdrd2FyZ3MnLCBOb25lLCBbXSwgW10pLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSwgTm9uZSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAnYScsIE5vbmUpLCAoJ2FyZycsICdiJywgTm9uZSksICgnYXJnJywgJ2MnLCBOb25lKSwgKCdhcmcnLCAnZCcsIE5vbmUpLCAoJ2FyZycsICdlJywgTm9uZSldLCAnYXJncycsIE5vbmUsIFtdLCAna3dhcmdzJywgTm9uZSwgWygnTnVtJywgKDEsIDExKSwgMSksICgnTmFtZScsICgxLCAxNiksICdOb25lJywgKCdMb2FkJywpKSwgKCdMaXN0JywgKDEsIDI0KSwgW10sICgnTG9hZCcsKSksICgnRGljdCcsICgxLCAzMCksIFtdLCBbXSldLCBbXSksIFsoJ1Bhc3MnLCAoMSwgNTIpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdFeHByJywgKDEsIDApLCAoJ05hbWVDb25zdGFudCcsICgxLCAwKSwgTm9uZSkpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDkpKV0sIFtdLCBOb25lKV0pLAorKCdNb2R1bGUnLCBbKCdGdW5jdGlvbkRlZicsICgxLCAwKSwgJ2YnLCAoJ2FyZ3VtZW50cycsIFsoJ2FyZycsICgxLCA2KSwgJ2EnLCBOb25lKV0sIE5vbmUsIFtdLCBbXSwgTm9uZSwgW10pLCBbKCdQYXNzJywgKDEsIDEwKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAoMSwgNiksICdhJywgTm9uZSldLCBOb25lLCBbXSwgW10sIE5vbmUsIFsoJ051bScsICgxLCA4KSwgMCldKSwgWygnUGFzcycsICgxLCAxMikpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sICgnYXJnJywgKDEsIDcpLCAnYXJncycsIE5vbmUpLCBbXSwgW10sIE5vbmUsIFtdKSwgWygnUGFzcycsICgxLCAxNCkpXSwgW10sIE5vbmUpXSksCisoJ01vZHVsZScsIFsoJ0Z1bmN0aW9uRGVmJywgKDEsIDApLCAnZicsICgnYXJndW1lbnRzJywgW10sIE5vbmUsIFtdLCBbXSwgKCdhcmcnLCAoMSwgOCksICdrd2FyZ3MnLCBOb25lKSwgW10pLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbKCdhcmcnLCAoMSwgNiksICdhJywgTm9uZSksICgnYXJnJywgKDEsIDkpLCAnYicsIE5vbmUpLCAoJ2FyZycsICgxLCAxNCksICdjJywgTm9uZSksICgnYXJnJywgKDEsIDIyKSwgJ2QnLCBOb25lKSwgKCdhcmcnLCAoMSwgMjgpLCAnZScsIE5vbmUpXSwgKCdhcmcnLCAoMSwgMzUpLCAnYXJncycsIE5vbmUpLCBbKCdhcmcnLCAoMSwgNDEpLCAnZicsIE5vbmUpXSwgWygnTnVtJywgKDEsIDQzKSwgNDIpXSwgKCdhcmcnLCAoMSwgNDkpLCAna3dhcmdzJywgTm9uZSksIFsoJ051bScsICgxLCAxMSksIDEpLCAoJ05hbWVDb25zdGFudCcsICgxLCAxNiksIE5vbmUpLCAoJ0xpc3QnLCAoMSwgMjQpLCBbXSwgKCdMb2FkJywpKSwgKCdEaWN0JywgKDEsIDMwKSwgW10sIFtdKV0pLCBbKCdQYXNzJywgKDEsIDU4KSldLCBbXSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnQ2xhc3NEZWYnLCAoMSwgMCksICdDJywgW10sIFtdLCBOb25lLCBOb25lLCBbKCdQYXNzJywgKDEsIDgpKV0sIFtdKV0pLAogKCdNb2R1bGUnLCBbKCdDbGFzc0RlZicsICgxLCAwKSwgJ0MnLCBbKCdOYW1lJywgKDEsIDgpLCAnb2JqZWN0JywgKCdMb2FkJywpKV0sIFtdLCBOb25lLCBOb25lLCBbKCdQYXNzJywgKDEsIDE3KSldLCBbXSldKSwKLSgnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksIFsoJ1JldHVybicsICgxLCA4KSwgKCdOdW0nLCAoMSwgMTUpLCAxKSldLCBbXSwgTm9uZSldKSwKKygnTW9kdWxlJywgWygnRnVuY3Rpb25EZWYnLCAoMSwgMCksICdmJywgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksIFsoJ1JldHVybicsICgxLCA4KSwgKCdOdW0nLCAoMSwgMTUpLCAxKSldLCBbXSwgTm9uZSldKSwKICgnTW9kdWxlJywgWygnRGVsZXRlJywgKDEsIDApLCBbKCdOYW1lJywgKDEsIDQpLCAndicsICgnRGVsJywpKV0pXSksCiAoJ01vZHVsZScsIFsoJ0Fzc2lnbicsICgxLCAwKSwgWygnTmFtZScsICgxLCAwKSwgJ3YnLCAoJ1N0b3JlJywpKV0sICgnTnVtJywgKDEsIDQpLCAxKSldKSwKICgnTW9kdWxlJywgWygnQXVnQXNzaWduJywgKDEsIDApLCAoJ05hbWUnLCAoMSwgMCksICd2JywgKCdTdG9yZScsKSksICgnQWRkJywpLCAoJ051bScsICgxLCA1KSwgMSkpXSksCkBAIC0xMDAyLDE0ICs5OTMsMTQgQEAKICgnSW50ZXJhY3RpdmUnLCBbKCdFeHByJywgKDEsIDApLCAoJ0Jpbk9wJywgKDEsIDApLCAoJ051bScsICgxLCAwKSwgMSksICgnQWRkJywpLCAoJ051bScsICgxLCAyKSwgMikpKV0pLAogXQogZXZhbF9yZXN1bHRzID0gWwotKCdFeHByZXNzaW9uJywgKCdOYW1lJywgKDEsIDApLCAnTm9uZScsICgnTG9hZCcsKSkpLAorKCdFeHByZXNzaW9uJywgKCdOYW1lQ29uc3RhbnQnLCAoMSwgMCksIE5vbmUpKSwKICgnRXhwcmVzc2lvbicsICgnQm9vbE9wJywgKDEsIDApLCAoJ0FuZCcsKSwgWygnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ05hbWUnLCAoMSwgNiksICdiJywgKCdMb2FkJywpKV0pKSwKICgnRXhwcmVzc2lvbicsICgnQmluT3AnLCAoMSwgMCksICgnTmFtZScsICgxLCAwKSwgJ2EnLCAoJ0xvYWQnLCkpLCAoJ0FkZCcsKSwgKCdOYW1lJywgKDEsIDQpLCAnYicsICgnTG9hZCcsKSkpKSwKICgnRXhwcmVzc2lvbicsICgnVW5hcnlPcCcsICgxLCAwKSwgKCdOb3QnLCksICgnTmFtZScsICgxLCA0KSwgJ3YnLCAoJ0xvYWQnLCkpKSksCi0oJ0V4cHJlc3Npb24nLCAoJ0xhbWJkYScsICgxLCAwKSwgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgTm9uZSwgW10sIE5vbmUsIE5vbmUsIFtdLCBbXSksICgnTmFtZScsICgxLCA3KSwgJ05vbmUnLCAoJ0xvYWQnLCkpKSksCisoJ0V4cHJlc3Npb24nLCAoJ0xhbWJkYScsICgxLCAwKSwgKCdhcmd1bWVudHMnLCBbXSwgTm9uZSwgW10sIFtdLCBOb25lLCBbXSksICgnTmFtZUNvbnN0YW50JywgKDEsIDcpLCBOb25lKSkpLAogKCdFeHByZXNzaW9uJywgKCdEaWN0JywgKDEsIDApLCBbKCdOdW0nLCAoMSwgMiksIDEpXSwgWygnTnVtJywgKDEsIDQpLCAyKV0pKSwKICgnRXhwcmVzc2lvbicsICgnRGljdCcsICgxLCAwKSwgW10sIFtdKSksCi0oJ0V4cHJlc3Npb24nLCAoJ1NldCcsICgxLCAwKSwgWygnTmFtZScsICgxLCAxKSwgJ05vbmUnLCAoJ0xvYWQnLCkpXSkpLAorKCdFeHByZXNzaW9uJywgKCdTZXQnLCAoMSwgMCksIFsoJ05hbWVDb25zdGFudCcsICgxLCAxKSwgTm9uZSldKSksCiAoJ0V4cHJlc3Npb24nLCAoJ0RpY3QnLCAoMSwgMCksIFsoJ051bScsICgyLCA2KSwgMSldLCBbKCdOdW0nLCAoNCwgMTApLCAyKV0pKSwKICgnRXhwcmVzc2lvbicsICgnTGlzdENvbXAnLCAoMSwgMSksICgnTmFtZScsICgxLCAxKSwgJ2EnLCAoJ0xvYWQnLCkpLCBbKCdjb21wcmVoZW5zaW9uJywgKCdOYW1lJywgKDEsIDcpLCAnYicsICgnU3RvcmUnLCkpLCAoJ05hbWUnLCAoMSwgMTIpLCAnYycsICgnTG9hZCcsKSksIFsoJ05hbWUnLCAoMSwgMTcpLCAnZCcsICgnTG9hZCcsKSldKV0pKSwKICgnRXhwcmVzc2lvbicsICgnR2VuZXJhdG9yRXhwJywgKDEsIDEpLCAoJ05hbWUnLCAoMSwgMSksICdhJywgKCdMb2FkJywpKSwgWygnY29tcHJlaGVuc2lvbicsICgnTmFtZScsICgxLCA3KSwgJ2InLCAoJ1N0b3JlJywpKSwgKCdOYW1lJywgKDEsIDEyKSwgJ2MnLCAoJ0xvYWQnLCkpLCBbKCdOYW1lJywgKDEsIDE3KSwgJ2QnLCAoJ0xvYWQnLCkpXSldKSksCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2hhdC5weQppbmRleCBjNzlmZTZmLi4yZGM5ZDBjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2FzeW5jaGF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNoYXQucHkKQEAgLTUsOSArNSwxNCBAQAogIyBJZiB0aGlzIGZhaWxzLCB0aGUgdGVzdCB3aWxsIGJlIHNraXBwZWQuCiB0aHJlYWQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQogCi1pbXBvcnQgYXN5bmNvcmUsIGFzeW5jaGF0LCBzb2NrZXQsIHRpbWUKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IGFzeW5jaGF0CitpbXBvcnQgYXN5bmNvcmUKK2ltcG9ydCBlcnJubworaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0xNSw2ICsyMCw3IEBACiAKIEhPU1QgPSBzdXBwb3J0LkhPU1QKIFNFUlZFUl9RVUlUID0gYidRVUlUXG4nCitUSU1FT1VUID0gMy4wCiAKIGlmIHRocmVhZGluZzoKICAgICBjbGFzcyBlY2hvX3NlcnZlcih0aHJlYWRpbmcuVGhyZWFkKToKQEAgLTI3LDggKzMzLDggQEAKICAgICAgICAgICAgIHNlbGYuZXZlbnQgPSBldmVudAogICAgICAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgc2VsZi5wb3J0ID0gc3VwcG9ydC5iaW5kX3BvcnQoc2VsZi5zb2NrKQotICAgICAgICAgICAgIyBUaGlzIHdpbGwgYmUgc2V0IGlmIHRoZSBjbGllbnQgd2FudHMgdXMgdG8gd2FpdCBiZWZvcmUgZWNob2luZyBkYXRhCi0gICAgICAgICAgICAjIGJhY2suCisgICAgICAgICAgICAjIFRoaXMgd2lsbCBiZSBzZXQgaWYgdGhlIGNsaWVudCB3YW50cyB1cyB0byB3YWl0IGJlZm9yZSBlY2hvaW5nCisgICAgICAgICAgICAjIGRhdGEgYmFjay4KICAgICAgICAgICAgIHNlbGYuc3RhcnRfcmVzZW5kX2V2ZW50ID0gTm9uZQogCiAgICAgICAgIGRlZiBydW4oc2VsZik6CkBAIC01MSw4ICs1Nyw4IEBACiAKICAgICAgICAgICAgICMgcmUtc2VuZCBlbnRpcmUgc2V0IG9mIGNvbGxlY3RlZCBkYXRhCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyB0aGlzIG1heSBmYWlsIG9uIHNvbWUgdGVzdHMsIHN1Y2ggYXMgdGVzdF9jbG9zZV93aGVuX2RvbmUsIHNpbmNlCi0gICAgICAgICAgICAgICAgIyB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY2hhbm5lbCB3aGVuIGl0J3MgZG9uZSBzZW5kaW5nCisgICAgICAgICAgICAgICAgIyB0aGlzIG1heSBmYWlsIG9uIHNvbWUgdGVzdHMsIHN1Y2ggYXMgdGVzdF9jbG9zZV93aGVuX2RvbmUsCisgICAgICAgICAgICAgICAgIyBzaW5jZSB0aGUgY2xpZW50IGNsb3NlcyB0aGUgY2hhbm5lbCB3aGVuIGl0J3MgZG9uZSBzZW5kaW5nCiAgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5idWZmZXI6CiAgICAgICAgICAgICAgICAgICAgIG4gPSBjb25uLnNlbmQoc2VsZi5idWZmZXJbOnNlbGYuY2h1bmtfc2l6ZV0pCiAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDEpCkBAIC05NSw3ICsxMDEsNyBAQAogICAgICAgICBzLnN0YXJ0KCkKICAgICAgICAgZXZlbnQud2FpdCgpCiAgICAgICAgIGV2ZW50LmNsZWFyKCkKLSAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAjIEdpdmUgc2VydmVyIHRpbWUgdG8gc3RhcnQgYWNjZXB0aW5nLgorICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KICAgICAgICAgcmV0dXJuIHMsIGV2ZW50CiAKIApAQCAtMTAzLDEwICsxMDksMTAgQEAKIGNsYXNzIFRlc3RBc3luY2hhdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdXNlcG9sbCA9IEZhbHNlCiAKLSAgICBkZWYgc2V0VXAgKHNlbGYpOgorICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5fdGhyZWFkcyA9IHN1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKIAotICAgIGRlZiB0ZWFyRG93biAoc2VsZik6CisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzdXBwb3J0LnRocmVhZGluZ19jbGVhbnVwKCpzZWxmLl90aHJlYWRzKQogCiAgICAgZGVmIGxpbmVfdGVybWluYXRvcl9jaGVjayhzZWxmLCB0ZXJtLCBzZXJ2ZXJfY2h1bmspOgpAQCAtMTE2LDE0ICsxMjIsMTYgQEAKICAgICAgICAgcy5zdGFydCgpCiAgICAgICAgIGV2ZW50LndhaXQoKQogICAgICAgICBldmVudC5jbGVhcigpCi0gICAgICAgIHRpbWUuc2xlZXAoMC4wMSkgIyBHaXZlIHNlcnZlciB0aW1lIHRvIHN0YXJ0IGFjY2VwdGluZy4KKyAgICAgICAgdGltZS5zbGVlcCgwLjAxKSAgICMgR2l2ZSBzZXJ2ZXIgdGltZSB0byBzdGFydCBhY2NlcHRpbmcuCiAgICAgICAgIGMgPSBlY2hvX2NsaWVudCh0ZXJtLCBzLnBvcnQpCiAgICAgICAgIGMucHVzaChiImhlbGxvICIpCiAgICAgICAgIGMucHVzaChiIndvcmxkIiArIHRlcm0pCiAgICAgICAgIGMucHVzaChiIkknbSBub3QgZGVhZCB5ZXQhIiArIHRlcm0pCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbYiJoZWxsbyB3b3JsZCIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKIApAQCAtMTMzLDE3ICsxNDEsMTcgQEAKIAogICAgIGRlZiB0ZXN0X2xpbmVfdGVybWluYXRvcjEoc2VsZik6CiAgICAgICAgICMgdGVzdCBvbmUtY2hhcmFjdGVyIHRlcm1pbmF0b3IKLSAgICAgICAgZm9yIGwgaW4gKDEsMiwzKToKKyAgICAgICAgZm9yIGwgaW4gKDEsIDIsIDMpOgogICAgICAgICAgICAgc2VsZi5saW5lX3Rlcm1pbmF0b3JfY2hlY2soYidcbicsIGwpCiAKICAgICBkZWYgdGVzdF9saW5lX3Rlcm1pbmF0b3IyKHNlbGYpOgogICAgICAgICAjIHRlc3QgdHdvLWNoYXJhY3RlciB0ZXJtaW5hdG9yCi0gICAgICAgIGZvciBsIGluICgxLDIsMyk6CisgICAgICAgIGZvciBsIGluICgxLCAyLCAzKToKICAgICAgICAgICAgIHNlbGYubGluZV90ZXJtaW5hdG9yX2NoZWNrKGInXHJcbicsIGwpCiAKICAgICBkZWYgdGVzdF9saW5lX3Rlcm1pbmF0b3IzKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhyZWUtY2hhcmFjdGVyIHRlcm1pbmF0b3IKLSAgICAgICAgZm9yIGwgaW4gKDEsMiwzKToKKyAgICAgICAgZm9yIGwgaW4gKDEsIDIsIDMpOgogICAgICAgICAgICAgc2VsZi5saW5lX3Rlcm1pbmF0b3JfY2hlY2soYidxcXEnLCBsKQogCiAgICAgZGVmIG51bWVyaWNfdGVybWluYXRvcl9jaGVjayhzZWxmLCB0ZXJtbGVuKToKQEAgLTE1NCw3ICsxNjIsOSBAQAogICAgICAgICBjLnB1c2goZGF0YSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtkYXRhWzp0ZXJtbGVuXV0pCiAKQEAgLTE3NCw3ICsxODQsOSBAQAogICAgICAgICBjLnB1c2goZGF0YSkKICAgICAgICAgYy5wdXNoKFNFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuYnVmZmVyLCBkYXRhKQpAQCAtMTg2LDcgKzE5OCw5IEBACiAgICAgICAgIHAgPSBhc3luY2hhdC5zaW1wbGVfcHJvZHVjZXIoZGF0YStTRVJWRVJfUVVJVCwgYnVmZmVyX3NpemU9OCkKICAgICAgICAgYy5wdXNoX3dpdGhfcHJvZHVjZXIocCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLCBbYiJoZWxsbyB3b3JsZCIsIGIiSSdtIG5vdCBkZWFkIHlldCEiXSkKIApAQCAtMTk2LDcgKzIxMCw5IEBACiAgICAgICAgIGRhdGEgPSBiImhlbGxvIHdvcmxkXG5JJ20gbm90IGRlYWQgeWV0IVxuIgogICAgICAgICBjLnB1c2hfd2l0aF9wcm9kdWNlcihkYXRhK1NFUlZFUl9RVUlUKQogICAgICAgICBhc3luY29yZS5sb29wKHVzZV9wb2xsPXNlbGYudXNlcG9sbCwgY291bnQ9MzAwLCB0aW1lb3V0PS4wMSkKLSAgICAgICAgcy5qb2luKCkKKyAgICAgICAgcy5qb2luKHRpbWVvdXQ9VElNRU9VVCkKKyAgICAgICAgaWYgcy5pc19hbGl2ZSgpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiImhlbGxvIHdvcmxkIiwgYiJJJ20gbm90IGRlYWQgeWV0ISJdKQogCkBAIC0yMDcsNyArMjIzLDkgQEAKICAgICAgICAgYy5wdXNoKGIiaGVsbG8gd29ybGRcblxuSSdtIG5vdCBkZWFkIHlldCFcbiIpCiAgICAgICAgIGMucHVzaChTRVJWRVJfUVVJVCkKICAgICAgICAgYXN5bmNvcmUubG9vcCh1c2VfcG9sbD1zZWxmLnVzZXBvbGwsIGNvdW50PTMwMCwgdGltZW91dD0uMDEpCi0gICAgICAgIHMuam9pbigpCisgICAgICAgIHMuam9pbih0aW1lb3V0PVRJTUVPVVQpCisgICAgICAgIGlmIHMuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNvbnRlbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIFtiImhlbGxvIHdvcmxkIiwgYiIiLCBiIkknbSBub3QgZGVhZCB5ZXQhIl0pCkBAIC0yMjYsNyArMjQ0LDkgQEAKICAgICAgICAgIyB3aGVyZSB0aGUgc2VydmVyIGVjaG9lcyBhbGwgb2YgaXRzIGRhdGEgYmVmb3JlIHdlIGNhbiBjaGVjayB0aGF0IGl0CiAgICAgICAgICMgZ290IGFueSBkb3duIGJlbG93LgogICAgICAgICBzLnN0YXJ0X3Jlc2VuZF9ldmVudC5zZXQoKQotICAgICAgICBzLmpvaW4oKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBpZiBzLmlzX2FsaXZlKCk6CisgICAgICAgICAgICBzZWxmLmZhaWwoImpvaW4oKSB0aW1lZCBvdXQiKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5jb250ZW50cywgW10pCiAgICAgICAgICMgdGhlIHNlcnZlciBtaWdodCBoYXZlIGJlZW4gYWJsZSB0byBzZW5kIGEgYnl0ZSBvciB0d28gYmFjaywgYnV0IHRoaXMKQEAgLTIzNCwxNSArMjU0LDQ4IEBACiAgICAgICAgICMgKHdoaWNoIGNvdWxkIHN0aWxsIHJlc3VsdCBpbiB0aGUgY2xpZW50IG5vdCBoYXZpbmcgcmVjZWl2ZWQgYW55dGhpbmcpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihsZW4ocy5idWZmZXIpLCAwKQogCisgICAgZGVmIHRlc3RfcHVzaChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTI1MjM6IHB1c2goKSBzaG91bGQgcmFpc2UgYSBUeXBlRXJyb3IgaWYgaXQgZG9lc24ndCBnZXQKKyAgICAgICAgIyBhIGJ5dGVzIHN0cmluZworICAgICAgICBzLCBldmVudCA9IHN0YXJ0X2VjaG9fc2VydmVyKCkKKyAgICAgICAgYyA9IGVjaG9fY2xpZW50KGInXG4nLCBzLnBvcnQpCisgICAgICAgIGRhdGEgPSBiJ2J5dGVzXG4nCisgICAgICAgIGMucHVzaChkYXRhKQorICAgICAgICBjLnB1c2goYnl0ZWFycmF5KGRhdGEpKQorICAgICAgICBjLnB1c2gobWVtb3J5dmlldyhkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjLnB1c2gsIDEwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGMucHVzaCwgJ3VuaWNvZGUnKQorICAgICAgICBjLnB1c2goU0VSVkVSX1FVSVQpCisgICAgICAgIGFzeW5jb3JlLmxvb3AodXNlX3BvbGw9c2VsZi51c2Vwb2xsLCBjb3VudD0zMDAsIHRpbWVvdXQ9LjAxKQorICAgICAgICBzLmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY29udGVudHMsIFtiJ2J5dGVzJywgYidieXRlcycsIGInYnl0ZXMnXSkKKwogCiBjbGFzcyBUZXN0QXN5bmNoYXRfV2l0aFBvbGwoVGVzdEFzeW5jaGF0KToKICAgICB1c2Vwb2xsID0gVHJ1ZQogCisKK2NsYXNzIFRlc3RBc3luY2hhdE1vY2tlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYmxvY2tpbmdpb2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNjEzMzogaGFuZGxlX3JlYWQoKSBtdXN0IGlnbm9yZSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgc29jayA9IHVuaXR0ZXN0Lm1vY2suTW9jaygpCisgICAgICAgIHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcihlcnJuby5FQUdBSU4pCisKKyAgICAgICAgZGlzcGF0Y2hlciA9IGFzeW5jaGF0LmFzeW5jX2NoYXQoKQorICAgICAgICBkaXNwYXRjaGVyLnNldF9zb2NrZXQoc29jaykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGRpc3BhdGNoZXIuZGVsX2NoYW5uZWwpCisKKyAgICAgICAgd2l0aCB1bml0dGVzdC5tb2NrLnBhdGNoLm9iamVjdChkaXNwYXRjaGVyLCAnaGFuZGxlX2Vycm9yJykgYXMgZXJyb3I6CisgICAgICAgICAgICBkaXNwYXRjaGVyLmhhbmRsZV9yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnJvci5jYWxsZWQpCisKKwogY2xhc3MgVGVzdEhlbHBlckZ1bmN0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfZmluZF9wcmVmaXhfYXRfZW5kKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaGF0LmZpbmRfcHJlZml4X2F0X2VuZCgicXdlcnR5XHIiLCAiXHJcbiIpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaGF0LmZpbmRfcHJlZml4X2F0X2VuZCgicXdlcnR5ZGtqZiIsICJcclxuIiksIDApCiAKKwogY2xhc3MgVGVzdEZpZm8odW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICBmID0gYXN5bmNoYXQuZmlmbygpCkBAIC0yNjgsOSArMzIxLDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wb3AoKSwgKDAsIE5vbmUpKQogCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0QXN5bmNoYXQsIFRlc3RBc3luY2hhdF9XaXRoUG9sbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RIZWxwZXJGdW5jdGlvbnMsIFRlc3RGaWZvKQorY2xhc3MgVGVzdE5vdENvbm5lY3RlZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZGlzYWxsb3dfbmVnYXRpdmVfdGVybWluYXRvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTEyNTkKKyAgICAgICAgY2xpZW50ID0gYXN5bmNoYXQuYXN5bmNfY2hhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNsaWVudC5zZXRfdGVybWluYXRvciwgLTEpCisKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBhOWVlYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9fX2luaXRfXy5weQpAQCAtMCwwICsxLDEwIEBACitpbXBvcnQgb3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMsIGltcG9ydF9tb2R1bGUKKworIyBTa2lwIHRlc3RzIGlmIHdlIGRvbid0IGhhdmUgdGhyZWFkaW5nLgoraW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKKyMgU2tpcCB0ZXN0cyBpZiB3ZSBkb24ndCBoYXZlIGNvbmN1cnJlbnQuZnV0dXJlcy4KK2ltcG9ydF9tb2R1bGUoJ2NvbmN1cnJlbnQuZnV0dXJlcycpCisKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTIzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA2MzY0YgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvLnB5CkBAIC0wLDAgKzEsOCBAQAoraW1wb3J0IG9zCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgYnVmID0gb3MucmVhZCgwLCAxMDI0KQorICAgICAgICBpZiBub3QgYnVmOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgb3Mud3JpdGUoMSwgYnVmKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8yLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL2VjaG8yLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4M2NhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzIucHkKQEAgLTAsMCArMSw2IEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgb3Mud3JpdGUoMSwgYidPVVQ6JytidWYpCisgICAgb3Mud3JpdGUoMiwgYidFUlI6JytidWYpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vZWNobzMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY0NDk2NwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9lY2hvMy5weQpAQCAtMCwwICsxLDExIEBACitpbXBvcnQgb3MKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB3aGlsZSBUcnVlOgorICAgICAgICBidWYgPSBvcy5yZWFkKDAsIDEwMjQpCisgICAgICAgIGlmIG5vdCBidWY6CisgICAgICAgICAgICBicmVhaworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy53cml0ZSgxLCBiJ09VVDonK2J1ZikKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXg6CisgICAgICAgICAgICBvcy53cml0ZSgyLCBiJ0VSUjonICsgZXguX19jbGFzc19fLl9fbmFtZV9fLmVuY29kZSgnYXNjaWknKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9rZXljZXJ0My5wZW0gYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8va2V5Y2VydDMucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZmE2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8va2V5Y2VydDMucGVtCkBAIC0wLDAgKzEsNzMgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2RnSUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUF3Z2dKY0FnRUFBb0dCQU1MZ0Qwa0FLRGI1Y0Z5UAoramJ3TmZSNUN0ZXdkWEMra01YQVdEOERMeGlUVHZoTVc3cVZubHdPbTM2bVpsc3pIS3ZzUmYwNWxUNHBlZ2lGTQorOXoyajFPbGFOK2NpL1g3TlUyMlROTjZjcllTaU43N0ZqWUpQNDY0ajg3Nm5kU3h5RCtyenlzMzg2VCsxcjFhWgorYWdnRWRrajFUc1NzdjF6V0lZS2xQSWpsdmh1eEFnTUJBQUVDZ1lBMGFIK1QyVmYzV09QdjhLZGtjSmc2Z0NSZQoreUpLWE9XZ1dSY2ljeC9DVXpPRXNUeG1GSURQTHhxQVdBM2s3djBCKzN2akd3NVk5bHljVi81WHFYTm9RSTE0agoreTA5aU5zdW1kczEzdTVBS2tHZFRKblpoUTdVS2RvVkhmdVA0NFpkT3Yvcko1L1ZENkY0eld5d3BlOTBwY2JLKworQVdEVnR1c2dHUUJTaWVFbDFRSkJBT3lWclVHNWwyeW9VQnRkMnpyL2tpR20vRFl5WGxJdGhRTy9BMy9MbmdEVworNS95ZEd4VnNUN2xBVk9nQ3NvVCswTDRlZlRoOTBQanpXOExQUXJQQldWTUNRUURTM2gvRnRZWWQ1bGZ6K0ZOTAorOUNFZTFGMXc5bDhQNzQ5dU5VRDBnMzE3enYxdGF0SXFWQ3NRV0hmVkhOZFZ2ZlErdlNGdzM4T09STzAwWHFzOQorMUdKckFrQmtvWFhFa3hDWm95NFB0ZWhlTy84SVdXTEdHcjZMN2RpNk16RmwxbElxd1Q2RDhMOW9hVjJ2eW5GVAorRG5Lb3AwcGEwOVVuaGp5dzU3S01ObVNFMlNVSkFrRUFybG9URXpwZ1JtQ3E0SUsyL05wQ2VHZEhTNXVxUmxiaAorMVZJYS94R3BzN0VXUWw1TW44c3dRRGVsL1lQM1dHSFRqZng3cGdTZWdRZmt5YVJ0R3BaOU9RSkFhOVZ1bWo4bQorSkFBdEkwQm5nYThoZ1F4N0JoVFFZNENhZER4eWlSR09HWWh3VXpZVkNxa2Iyc2JWUkg5SG53VWFKVDdjV0JZMworUm5KZEhPTVhXZW03L3c9PQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQorQ2VydGlmaWNhdGU6CisgICAgRGF0YToKKyAgICAgICAgVmVyc2lvbjogMSAoMHgwKQorICAgICAgICBTZXJpYWwgTnVtYmVyOiAxMjcyMzM0MjYxMjcyMTQ0MzI4MSAoMHhiMDkyNjRiMWYyZGEyMWQxKQorICAgIFNpZ25hdHVyZSBBbGdvcml0aG06IHNoYTFXaXRoUlNBRW5jcnlwdGlvbgorICAgICAgICBJc3N1ZXI6IEM9WFksIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EsIENOPW91ci1jYS1zZXJ2ZXIKKyAgICAgICAgVmFsaWRpdHkKKyAgICAgICAgICAgIE5vdCBCZWZvcmU6IEphbiAgNCAxOTo0NzowNyAyMDEzIEdNVAorICAgICAgICAgICAgTm90IEFmdGVyIDogTm92IDEzIDE5OjQ3OjA3IDIwMjIgR01UCisgICAgICAgIFN1YmplY3Q6IEM9WFksIEw9Q2FzdGxlIEFudGhyYXgsIE89UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24sIENOPWxvY2FsaG9zdAorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDEwMjQgYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmMyOmUwOjBmOjQ5OjAwOjI4OjM2OmY5OjcwOjVjOjhmOjhkOmJjOjBkOgorICAgICAgICAgICAgICAgICAgICA3ZDoxZTo0MjpiNTplYzoxZDo1YzoyZjphNDozMTo3MDoxNjowZjpjMDpjYjoKKyAgICAgICAgICAgICAgICAgICAgYzY6MjQ6ZDM6YmU6MTM6MTY6ZWU6YTU6Njc6OTc6MDM6YTY6ZGY6YTk6OTk6CisgICAgICAgICAgICAgICAgICAgIDk2OmNjOmM3OjJhOmZiOjExOjdmOjRlOjY1OjRmOjhhOjVlOjgyOjIxOjRjOgorICAgICAgICAgICAgICAgICAgICBmNzozZDphMzpkNDplOTo1YTozNzplNzoyMjpmZDo3ZTpjZDo1Mzo2ZDo5MzoKKyAgICAgICAgICAgICAgICAgICAgMzQ6ZGU6OWM6YWQ6ODQ6YTI6Mzc6YmU6YzU6OGQ6ODI6NGY6ZTM6YWU6MjM6CisgICAgICAgICAgICAgICAgICAgIGYzOmJlOmE3Ojc1OjJjOjcyOjBmOmVhOmYzOmNhOmNkOmZjOmU5OjNmOmI1OgorICAgICAgICAgICAgICAgICAgICBhZjo1Njo5OTo2YTowODowNDo3Njo0ODpmNTo0ZTpjNDphYzpiZjo1YzpkNjoKKyAgICAgICAgICAgICAgICAgICAgMjE6ODI6YTU6M2M6ODg6ZTU6YmU6MWI6YjEKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgICAyZjo0Mjo1ZjphMzowOToyYzpmYTo1MTo4ODpjNzozNzo3ZjplYTowZTo2MzpmMDphMjo5YToKKyAgICAgICAgIGU1OjVhOmUyOmM4OjIwOmYwOjNmOjYwOmJjOmM4OjBmOmI2OmM2Ojc2OmNlOmRiOjgzOjkzOgorICAgICAgICAgZjU6YTM6MzM6Njc6MDE6OGU6MDQ6Y2Q6MDA6OWE6NzM6ZmQ6ZjM6MzU6ODY6ZmE6ZDc6MTM6CisgICAgICAgICBlMjo0NjpjNjo5ZDpjMDoyOTo1MzpkNDphOTo5MDpiODo3Nzo0YjplNjo4Mzo3NjplNDo5MjoKKyAgICAgICAgIGQ2OjljOjUwOmNmOjQzOmQwOmM2OjAxOjc3OjYxOjlhOmRlOjliOjcwOmY3OjcyOmNkOjU5OgorICAgICAgICAgMDA6MzE6Njk6ZDk6YjQ6Y2E6MDY6OWM6NmQ6YzM6Yzc6ODA6OGM6Njg6ZTY6YjU6YTI6Zjg6CisgICAgICAgICBlZjoxZDpiYjoxNjo5Zjo3Nzo3NzplZjo4Nzo2MjoyMjo5Yjo0ZDo2OTphNDozYToxYTpmMToKKyAgICAgICAgIDIxOjVlOjhjOjMyOmFjOjkyOmZkOjE1OjZiOjE4OmMyOjdmOjE1OjBkOjk4OjMwOmNhOjc1OgorICAgICAgICAgOGY6MWE6NzE6ZGY6ZGE6MWQ6YjI6ZWY6OWE6ZTg6MmQ6MmU6MDI6ZmQ6NGE6M2M6YWE6OTY6CisgICAgICAgICAwYjowNjo1ZDozNTpiMzozZDoyNDo4Nzo0YjplMDpiMDo1ODo2MDoyZjo0NTphYzoyZTo0ODoKKyAgICAgICAgIDhhOmIwOjk5OjEwOjY1OjI3OmZmOmNjOmIxOmQ4OmZkOmJkOjI2OjZiOmI5OjBjOjA1OjJhOgorICAgICAgICAgZjQ6NDU6NjM6MzU6NTE6MDc6ZWQ6ODM6ODU6ZmU6NmY6Njk6Y2I6YmI6NDA6YTg6YWU6YjY6CisgICAgICAgICAzYjo1Njo0YToyZDphNDplZDo2ZDoxMToyYzo0ZDplZDoxNzoyNDpmZDo0NzpiYzpkMzo0MToKKyAgICAgICAgIGEyOmQzOjA2OmZlOjBjOjkwOmQ4OmQ4Ojk0OjI2OmM0OmZmOmNjOmExOmQ4OjQyOjc3OmViOgorICAgICAgICAgZmM6YTk6OTQ6NzEKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ3BEQ0NBWXdDQ1FDd2ttU3g4dG9oMFRBTkJna3Foa2lHOXcwQkFRVUZBREJOTVFzd0NRWURWUVFHRXdKWQorV1RFbU1DUUdBMVVFQ2d3ZFVIbDBhRzl1SUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0Z1EwRXhGakFVQmdOVgorQkFNTURXOTFjaTFqWVMxelpYSjJaWEl3SGhjTk1UTXdNVEEwTVRrME56QTNXaGNOTWpJeE1URXpNVGswTnpBMworV2pCZk1Rc3dDUVlEVlFRR0V3SllXVEVYTUJVR0ExVUVCeE1PUTJGemRHeGxJRUZ1ZEdoeVlYZ3hJekFoQmdOVgorQkFvVEdsQjVkR2h2YmlCVGIyWjBkMkZ5WlNCR2IzVnVaR0YwYVc5dU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodgorYzNRd2daOHdEUVlKS29aSWh2Y05BUUVCQlFBRGdZMEFNSUdKQW9HQkFNTGdEMGtBS0RiNWNGeVBqYndOZlI1QwordGV3ZFhDK2tNWEFXRDhETHhpVFR2aE1XN3FWbmx3T20zNm1abHN6SEt2c1JmMDVsVDRwZWdpRk05ejJqMU9sYQorTitjaS9YN05VMjJUTk42Y3JZU2lONzdGallKUDQ2NGo4NzZuZFN4eUQrcnp5czM4NlQrMXIxYVphZ2dFZGtqMQorVHNTc3YxeldJWUtsUElqbHZodXhBZ01CQUFFd0RRWUpLb1pJaHZjTkFRRUZCUUFEZ2dFQkFDOUNYNk1KTFBwUgoraU1jM2Yrb09ZL0NpbXVWYTRzZ2c4RDlndk1nUHRzWjJ6dHVEay9Xak0yY0JqZ1ROQUpwei9mTTFodnJYRStKRworeHAzQUtWUFVxWkM0ZDB2bWczYmtrdGFjVU05RDBNWUJkMkdhM3B0dzkzTE5XUUF4YWRtMHlnYWNiY1BIZ0l4bworNXJXaStPOGR1eGFmZDNmdmgySWltMDFwcERvYThTRmVqREtza3YwVmF4akNmeFVObURES2RZOGFjZC9hSGJMdgorbXVndExnTDlTanlxbGdzR1hUV3pQU1NIUytDd1dHQXZSYXd1U0lxd21SQmxKLy9Nc2RqOXZTWnJ1UXdGS3ZSRgorWXpWUkIrMkRoZjV2YWN1N1FLaXV0anRXU2kyazdXMFJMRTN0RnlUOVI3elRRYUxUQnY0TWtOallsQ2JFLzh5aAorMkVKMzYveXBsSEU9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vcHljYWNlcnQucGVtIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3B5Y2FjZXJ0LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWIxZjNlCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3B5Y2FjZXJ0LnBlbQpAQCAtMCwwICsxLDc4IEBACitDZXJ0aWZpY2F0ZToKKyAgICBEYXRhOgorICAgICAgICBWZXJzaW9uOiAzICgweDIpCisgICAgICAgIFNlcmlhbCBOdW1iZXI6IDEyNzIzMzQyNjEyNzIxNDQzMjgwICgweGIwOTI2NGIxZjJkYTIxZDApCisgICAgU2lnbmF0dXJlIEFsZ29yaXRobTogc2hhMVdpdGhSU0FFbmNyeXB0aW9uCisgICAgICAgIElzc3VlcjogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBWYWxpZGl0eQorICAgICAgICAgICAgTm90IEJlZm9yZTogSmFuICA0IDE5OjQ3OjA3IDIwMTMgR01UCisgICAgICAgICAgICBOb3QgQWZ0ZXIgOiBKYW4gIDIgMTk6NDc6MDcgMjAyMyBHTVQKKyAgICAgICAgU3ViamVjdDogQz1YWSwgTz1QeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiBDQSwgQ049b3VyLWNhLXNlcnZlcgorICAgICAgICBTdWJqZWN0IFB1YmxpYyBLZXkgSW5mbzoKKyAgICAgICAgICAgIFB1YmxpYyBLZXkgQWxnb3JpdGhtOiByc2FFbmNyeXB0aW9uCisgICAgICAgICAgICAgICAgUHVibGljLUtleTogKDIwNDggYml0KQorICAgICAgICAgICAgICAgIE1vZHVsdXM6CisgICAgICAgICAgICAgICAgICAgIDAwOmU3OmRlOmU5OmUzOjBjOjlmOjAwOmI2OmExOmZkOjJiOjViOjk2OmQyOgorICAgICAgICAgICAgICAgICAgICA2ZjpjYzplMDpiZTo4NjpiOToyMDo1ZTplYzowMzo3YTo1NTphYjplYTphNDoKKyAgICAgICAgICAgICAgICAgICAgZTk6Zjk6NDk6ODU6ZDI6NjY6ZDU6ZWQ6Yzc6N2E6ZWE6NTY6OGU6MmQ6OGY6CisgICAgICAgICAgICAgICAgICAgIGU3OjQyOmUyOjYyOjI4OmE5OjlmOmQ2OjFiOjhlOmViOmI1OmI0OjljOjlmOgorICAgICAgICAgICAgICAgICAgICAxNDphYjpkZjplNjo5NDo4Yjo3NjoxZDozZTo2ZDoyNDo2MTplZDowYzpiZjoKKyAgICAgICAgICAgICAgICAgICAgMDA6OGE6NjE6MGM6ZGY6NWM6Yzg6MzY6NzM6MTY6MDA6Y2Q6NDc6YmE6NmQ6CisgICAgICAgICAgICAgICAgICAgIGE0OmE0Ojc0Ojg4OjgzOjIzOjBhOjE5OmZjOjA5OmE3OjNjOjRhOjRiOmQzOgorICAgICAgICAgICAgICAgICAgICBlNzoxZDoyZDplNDplYTo0Yzo1NDoyMTpmMzoyNjpkYjo4OTozNzoxODpkNDoKKyAgICAgICAgICAgICAgICAgICAgMDI6YmI6NDA6MzI6NWY6YTQ6ZmY6MmQ6MWM6Zjc6ZDQ6YmI6ZWM6OGU6Y2Y6CisgICAgICAgICAgICAgICAgICAgIDVjOjgyOmFjOmU2OjdjOjA4OjZjOjQ4Ojg1OjYxOjA3OjdmOjI1OmUwOjVjOgorICAgICAgICAgICAgICAgICAgICBlMDpiYzozNDo1ZjplMDpiOTowNDo0Nzo3NTpjODo0NzowYjo4ZDpiYzpkNjoKKyAgICAgICAgICAgICAgICAgICAgYzg6Njg6NWY6MzM6ODM6NjI6ZDI6MjA6NDQ6MzU6YjE6YWQ6ODE6MWE6OGE6CisgICAgICAgICAgICAgICAgICAgIGNkOmJjOjM1OmIwOjVjOjhiOjQ3OmQ2OjE4OmU5OjljOjE4Ojk3OmNjOjAxOgorICAgICAgICAgICAgICAgICAgICAzYzoyOTpjYzplODoxZTplNDplNDpjMTpiODpkZTplNzpjMjoxMToxODo4NzoKKyAgICAgICAgICAgICAgICAgICAgNWE6OTM6MzQ6ZDg6YTY6MjU6Zjc6MTQ6NzE6ZWI6ZTQ6MjE6YTI6ZDI6MGY6CisgICAgICAgICAgICAgICAgICAgIDJlOjJlOmQ0OjYyOjAwOjM1OmQzOmQ2OmVmOjVjOjYwOjRiOjRjOmE5OjE0OgorICAgICAgICAgICAgICAgICAgICBlMjpkZDoxNTo1ODo0NjozNzozMzoyNjpiNzplNzoyZTo1ZDplZDo0MjplNDoKKyAgICAgICAgICAgICAgICAgICAgYzU6NGQKKyAgICAgICAgICAgICAgICBFeHBvbmVudDogNjU1MzcgKDB4MTAwMDEpCisgICAgICAgIFg1MDl2MyBleHRlbnNpb25zOgorICAgICAgICAgICAgWDUwOXYzIFN1YmplY3QgS2V5IElkZW50aWZpZXI6IAorICAgICAgICAgICAgICAgIEJDOkREOjYyOkQ5Ojc2OkRBOjFCOkQyOjU0OjZCOkNGOkUwOjY2OjlCOjFFOjFFOjdCOjU2OjBDOjBCCisgICAgICAgICAgICBYNTA5djMgQXV0aG9yaXR5IEtleSBJZGVudGlmaWVyOiAKKyAgICAgICAgICAgICAgICBrZXlpZDpCQzpERDo2MjpEOTo3NjpEQToxQjpEMjo1NDo2QjpDRjpFMDo2Njo5QjoxRToxRTo3Qjo1NjowQzowQgorCisgICAgICAgICAgICBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IAorICAgICAgICAgICAgICAgIENBOlRSVUUKKyAgICBTaWduYXR1cmUgQWxnb3JpdGhtOiBzaGExV2l0aFJTQUVuY3J5cHRpb24KKyAgICAgICAgIDdkOjBhOmY1OmNiOjhkOmQzOjVkOmJkOjk5OjhlOmY4OjJiOjBmOmJhOmViOmMyOmQ5OmE2OgorICAgICAgICAgMjc6NGY6MmU6N2I6MmY6MGU6NjQ6ZDg6MWM6MzU6NTA6NGU6ZWU6ZmM6OTA6Yjk6OGQ6NmQ6CisgICAgICAgICBhODpjNTpjNjowNjpiMDphZjpmMzoyZDpiZjozYjpiODo0MjowNzpkZDoxODo3ZDo2ZDo5NToKKyAgICAgICAgIDU0OjU3Ojg1OjE4OjYwOjQ3OjJmOmViOjc4OjFiOmY5OmU4OjE3OmZkOjVhOjBkOjg3OjE3OgorICAgICAgICAgMjg6YWM6NGM6NmE6ZTY6YmM6Mjk6ZjQ6ZjQ6NTU6NzA6Mjk6NDI6ZGU6ODU6ZWE6YWI6NmM6CisgICAgICAgICAyMzowNjo2NDozMDo3NTowMjo4ZTo1MzpiYzo1ZTowMTozMzozNzpjYzoxZTpjZDpiODphNDoKKyAgICAgICAgIGZkOmNhOmU0OjVmOjY1OjNiOjgzOjFjOjg2OmYxOjU1OjAyOmEwOjNhOjhmOmRiOjkxOmI3OgorICAgICAgICAgNDA6MTQ6YjQ6ZTc6OGQ6ZDI6ZWU6NzM6YmE6ZTM6ZTU6MzQ6MmQ6YmM6OTQ6NmY6NGU6MjQ6CisgICAgICAgICAwNjpmNzo1Zjo4YjowZTphNzo4ZTo2YjpkZTo1ZTo3NTpmNDozMjo5YTo1MDpiMTo0NDozMzoKKyAgICAgICAgIDlhOmQwOjA1OmUyOjc4OjgyOmZmOmRiOmRhOjhhOjYzOmViOmE5OmRkOmQxOmJmOmEwOjYxOgorICAgICAgICAgYWQ6ZTM6OWU6OGE6MjQ6NWQ6NjI6MGU6ZTc6NGM6OTE6N2Y6ZWY6ZGY6MzQ6MzY6M2I6MmY6CisgICAgICAgICA1ZDpmNTo4NDpiMjoyZjpjNDo2ZDo5Mzo5NjoxYTo2ZjozMDoyODpmMTpkYToxMjo5YTo2NDoKKyAgICAgICAgIGI0OjQwOjMzOjFkOmJkOmRlOjJiOjUzOmE4OmVhOmJlOmQ2OmJjOjRlOjk2OmY1OjQ0OmZiOgorICAgICAgICAgMzI6MTg6YWU6ZDU6MWY6ZjY6Njk6YWY6YjY6NGU6N2I6MWQ6NTg6ZWM6M2I6YTk6NTM6YTM6CisgICAgICAgICA1ZTo1ODpjODo5ZQorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEYlRDQ0FsV2dBd0lCQWdJSkFMQ1NaTEh5MmlIUU1BMEdDU3FHU0liM0RRRUJCUVVBTUUweEN6QUpCZ05WCitCQVlUQWxoWk1TWXdKQVlEVlFRS0RCMVFlWFJvYjI0Z1UyOW1kSGRoY21VZ1JtOTFibVJoZEdsdmJpQkRRVEVXCitNQlFHQTFVRUF3d05iM1Z5TFdOaExYTmxjblpsY2pBZUZ3MHhNekF4TURReE9UUTNNRGRhRncweU16QXhNREl4CitPVFEzTURkYU1FMHhDekFKQmdOVkJBWVRBbGhaTVNZd0pBWURWUVFLREIxUWVYUm9iMjRnVTI5bWRIZGhjbVVnCitSbTkxYm1SaGRHbHZiaUJEUVRFV01CUUdBMVVFQXd3TmIzVnlMV05oTFhObGNuWmxjakNDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQU9mZTZlTU1ud0Myb2Ywclc1YlNiOHpndm9hNUlGN3NBM3BWCitxK3FrNmZsSmhkSm0xZTNIZXVwV2ppMlA1MExpWWlpcG45WWJqdXUxdEp5ZkZLdmY1cFNMZGgwK2JTUmg3UXkvCitBSXBoRE45Y3lEWnpGZ0ROUjdwdHBLUjBpSU1qQ2huOENhYzhTa3ZUNXgwdDVPcE1WQ0h6SnR1Sk54alVBcnRBCitNbCtrL3kwYzk5Uzc3STdQWElLczVud0liRWlGWVFkL0plQmM0THcwWCtDNUJFZDF5RWNMamJ6V3lHaGZNNE5pCiswaUJFTmJHdGdScUt6Yncxc0Z5TFI5WVk2WndZbDh3QlBDbk02QjdrNU1HNDN1ZkNFUmlIV3BNMDJLWWw5eFJ4Cis2K1Fob3RJUExpN1VZZ0ExMDlidlhHQkxUS2tVNHQwVldFWTNNeWEzNXk1ZDdVTGt4VTBDQXdFQUFhTlFNRTR3CitIUVlEVlIwT0JCWUVGTHpkWXRsMjJodlNWR3ZQNEdhYkhoNTdWZ3dMTUI4R0ExVWRJd1FZTUJhQUZMemRZdGwyCisyaHZTVkd2UDRHYWJIaDU3Vmd3TE1Bd0dBMVVkRXdRRk1BTUJBZjh3RFFZSktvWklodmNOQVFFRkJRQURnZ0VCCitBSDBLOWN1TjAxMjltWTc0S3crNjY4TFpwaWRQTG5zdkRtVFlIRFZRVHU3OGtMbU5iYWpGeGdhd3IvTXR2enU0CitRZ2ZkR0gxdGxWUlhoUmhnUnkvcmVCdjU2QmY5V2cySEZ5aXNUR3JtdkNuMDlGVndLVUxlaGVxcmJDTUdaREIxCitBbzVUdkY0Qk16Zk1IczI0cFAzSzVGOWxPNE1jaHZGVkFxQTZqOXVSdDBBVXRPZU4wdTV6dXVQbE5DMjhsRzlPCitKQWIzWDRzT3A0NXIzbDUxOURLYVVMRkVNNXJRQmVKNGd2L2Iyb3BqNjZuZDBiK2dZYTNqbm9va1hXSU81MHlSCitmKy9mTkRZN0wxMzFoTEl2eEcyVGxocHZNQ2p4MmhLYVpMUkFNeDI5M2l0VHFPcSsxcnhPbHZWRSt6SVlydFVmCis5bW12dGs1N0hWanNPNmxUbzE1WXlKND0KKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfY2VydC5wZW0gYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc3NsX2NlcnQucGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTdkN2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vc3NsX2NlcnQucGVtCkBAIC0wLDAgKzEsMTUgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJQ1ZEQ0NBYjJnQXdJQkFnSUpBTmZIT0JrWnI4Sk9NQTBHQ1NxR1NJYjNEUUVCQlFVQU1GOHhDekFKQmdOVgorQkFZVEFsaFpNUmN3RlFZRFZRUUhFdzVEWVhOMGJHVWdRVzUwYUhKaGVERWpNQ0VHQTFVRUNoTWFVSGwwYUc5dQorSUZOdlpuUjNZWEpsSUVadmRXNWtZWFJwYjI0eEVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQWVGdzB4TURFdworTURneU16QXhOVFphRncweU1ERXdNRFV5TXpBeE5UWmFNRjh4Q3pBSkJnTlZCQVlUQWxoWk1SY3dGUVlEVlFRSAorRXc1RFlYTjBiR1VnUVc1MGFISmhlREVqTUNFR0ExVUVDaE1hVUhsMGFHOXVJRk52Wm5SM1lYSmxJRVp2ZFc1aworWVhScGIyNHhFakFRQmdOVkJBTVRDV3h2WTJGc2FHOXpkRENCbnpBTkJna3Foa2lHOXcwQkFRRUZBQU9CalFBdworZ1lrQ2dZRUEyMXZUNWlzcTdGNjhhbVl1dU5wU0ZsS0RQck1VQ2E0WVdZcVpSdDJPWisvM05LYVoyeEFpU3dyNworNk1yUUY3MHQ1bkxiU1BwcUU1KzVWclM1OFNZK2cvc1hMaUZkNkFwbEgxd0pad2g3OERvZmJGWVhVZ2drdEZNdAorcFR5aVg4anRQNjZia2NQa0RBREEwODlSSTFUUVI2Q2ErbjdIRmE3YzFmYWJWVjZpM3prQ0F3RUFBYU1ZTUJZdworRkFZRFZSMFJCQTB3QzRJSmJHOWpZV3hvYjNOME1BMEdDU3FHU0liM0RRRUJCUVVBQTRHQkFIUGN0UUJFUTR3ZAorQko2K0pjcElyYW9wTG44QkdoYmpOV2o0MG1tUnFXQi9OQVdGNk01bmU3S3BHQXU3dExlRzRoYjF6TGFsZEs4RworbHh5MkdQU1JGNkxGUzQ4ZHBFajJIYk12Mm52djZ4eGFsRE1KOStEaWNXZ0FLVFE2YmNYMmozR1VrQ1IwZy9UMQorQ1JsTkJBQWx2aEt6TzdDbHBmOWwwWUtCRWZyYUpCeVgKKy0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfa2V5LnBlbSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby9zc2xfa2V5LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmQzYmJkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3NzbF9rZXkucGVtCkBAIC0wLDAgKzEsMTYgQEAKKy0tLS0tQkVHSU4gUFJJVkFURSBLRVktLS0tLQorTUlJQ2R3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NBbUV3Z2dKZEFnRUFBb0dCQU50YjArWXJLdXhldkdwbQorTHJqYVVoWlNnejZ6RkFtdUdGbUttVWJkam1mdjl6U21tZHNRSWtzSysrakswQmU5TGVaeTIwajZhaE9mdVZhMAordWZFbVBvUDdGeTRoWGVnS1pSOWNDV2NJZS9BNkgyeFdGMUlJSkxSVExhVThvbC9JN1QrdW01SEQ1QXdBd05QUAorVVNOVTBFZWdtdnAreHhXdTNOWDJtMVZlb3Q4NUFnTUJBQUVDZ1lBM1pkWjY3M1gwb2V4RmxxN0FBbXJ1dGtIdAorQ0w3THZ3cnBPaWFCamh5VHhUZVNOV3p2dFFCa0lVOERPSTBiSWF6QTRVcmVBRmZmd3R2RXVQbW9uRGIzRitJcQorU01BdTQyWGNHeVZaRWwrZ0hsVFBVOVhSWDduVE9YVnQrTWxSUlJ4TDZ0OUdrR2ZVQVhJM1h4SkRYVzNjMHZCSworVUw5eHFEOGNPUlhPZkUwNnJRSkJBUDhtRVgxRVJrUjY0UHRzb2U0MjgxdmpUbE5mSWJzN05NUGtVbnJuOU4vWQorQkxoak5JZlEzSEZaRzhCVE1MZlg3a0NTOUQ1OTNEVzV0VjRaOUJQL2M2Y0NRUURjRnpDY1ZBck5oMkpTeXdPUQorWmZUZlJiSmcvWjVMdDlGa25ndjFtZWVHTlBnSU1MTjhTZzY3OXBBT09XbXpkTU8zVjcwNnJOUHpTVk1NRTdFNQorb1BJZkFrRUE4cERkZGFyUDV0Q3ZUVGdVcG1URmJha20wS29UWm0yK0Z6SGNuQTRqUmgrWE5UalRPdjk4WTZJaworZU81ZDFabktYc2VXdmtabmNRZ3hmZG5NcXFwajV3SkFjTnEvUlZuZTFEYllsd1djaFQyU2k2NU1ZbW1KOHQrRgorMG1jc1VMcWpPbkVNd2Y1ZStwdHE1THp3YnlySFpZcTVGTms3b2N1ZlB2L1pRcmNTU0MrY0Z3SkJBS3ZPSkJ5UworeDU2cXlHZVpMT1FsV1MySlMzS0pvNTlYdUxGR3FjYmdOOU9tOXhGYTQxWWI0TjlOdnBsRml2c3ZaZHczbTFRLworU1BJWFF1VDhSTVBEVk5RPQorLS0tLS1FTkQgUFJJVkFURSBLRVktLS0tLQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9iYXNlX2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjYwNzE3Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfYmFzZV9ldmVudHMucHkKQEAgLTAsMCArMSwxNjU1IEBACisiIiJUZXN0cyBmb3IgYmFzZV9ldmVudHMucHkiIiIKKworaW1wb3J0IGVycm5vCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG1hdGgKK2ltcG9ydCBvcworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRocmVhZGluZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCBiYXNlX2V2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBjb25zdGFudHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscwordHJ5OgorICAgIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKK3RyeToKKyAgICBmcm9tIHRlc3Quc3VwcG9ydC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgdHJ5OgorICAgICAgICBmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgZnJvbSBhc3luY2lvLnRlc3Rfc3VwcG9ydCBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworCisKK01PQ0tfQU5ZID0gbW9jay5BTlkKK1BZMzQgPSBzeXMudmVyc2lvbl9pbmZvID49ICgzLCA0KQorCisKK2RlZiBtb2NrX3NvY2tldF9tb2R1bGUoKToKKyAgICBtX3NvY2tldCA9IG1vY2suTWFnaWNNb2NrKHNwZWM9c29ja2V0KQorICAgIGZvciBuYW1lIGluICgKKyAgICAgICAgJ0FGX0lORVQnLCAnQUZfSU5FVDYnLCAnQUZfVU5TUEVDJywgJ0lQUFJPVE9fVENQJywgJ0lQUFJPVE9fVURQJywKKyAgICAgICAgJ1NPQ0tfU1RSRUFNJywgJ1NPQ0tfREdSQU0nLCAnU09MX1NPQ0tFVCcsICdTT19SRVVTRUFERFInLCAnaW5ldF9wdG9uJworICAgICk6CisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCBuYW1lKToKKyAgICAgICAgICAgIHNldGF0dHIobV9zb2NrZXQsIG5hbWUsIGdldGF0dHIoc29ja2V0LCBuYW1lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlbGF0dHIobV9zb2NrZXQsIG5hbWUpCisKKyAgICBtX3NvY2tldC5zb2NrZXQgPSBtb2NrLk1hZ2ljTW9jaygpCisgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IHRlc3RfdXRpbHMubW9ja19ub25ibG9ja2luZ19zb2NrZXQoKQorCisgICAgcmV0dXJuIG1fc29ja2V0CisKKworZGVmIHBhdGNoX3NvY2tldChmKToKKyAgICByZXR1cm4gbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5zb2NrZXQnLAorICAgICAgICAgICAgICAgICAgICAgIG5ld19jYWxsYWJsZT1tb2NrX3NvY2tldF9tb2R1bGUpKGYpCisKKworY2xhc3MgQmFzZUV2ZW50VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8uY2FjaGVfY2xlYXIoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8uY2FjaGVfY2xlYXIoKQorICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKKworICAgIGRlZiB0ZXN0X2lwYWRkcl9pbmZvKHNlbGYpOgorICAgICAgICBVTlNQRUMgPSBzb2NrZXQuQUZfVU5TUEVDCisgICAgICAgIElORVQgPSBzb2NrZXQuQUZfSU5FVAorICAgICAgICBJTkVUNiA9IHNvY2tldC5BRl9JTkVUNgorICAgICAgICBTVFJFQU0gPSBzb2NrZXQuU09DS19TVFJFQU0KKyAgICAgICAgREdSQU0gPSBzb2NrZXQuU09DS19ER1JBTQorICAgICAgICBUQ1AgPSBzb2NrZXQuSVBQUk9UT19UQ1AKKyAgICAgICAgVURQID0gc29ja2V0LklQUFJPVE9fVURQCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChJTkVULCBTVFJFQU0sIFRDUCwgJycsICgnMS4yLjMuNCcsIDEpKSwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnMS4yLjMuNCcsIDEsIElORVQsIFNUUkVBTSwgVENQKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKElORVQsIFNUUkVBTSwgVENQLCAnJywgKCcxLjIuMy40JywgMSkpLAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgMSwgVU5TUEVDLCBTVFJFQU0sIFRDUCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChJTkVULCBER1JBTSwgVURQLCAnJywgKCcxLjIuMy40JywgMSkpLAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCcxLjIuMy40JywgMSwgVU5TUEVDLCBER1JBTSwgVURQKSkKKworICAgICAgICAjIFNvY2tldCB0eXBlIFNUUkVBTSBpbXBsaWVzIFRDUCBwcm90b2NvbC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChJTkVULCBTVFJFQU0sIFRDUCwgJycsICgnMS4yLjMuNCcsIDEpKSwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnMS4yLjMuNCcsIDEsIFVOU1BFQywgU1RSRUFNLCAwKSkKKworICAgICAgICAjIFNvY2tldCB0eXBlIERHUkFNIGltcGxpZXMgVURQIHByb3RvY29sLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKElORVQsIERHUkFNLCBVRFAsICcnLCAoJzEuMi4zLjQnLCAxKSksCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzEuMi4zLjQnLCAxLCBVTlNQRUMsIERHUkFNLCAwKSkKKworICAgICAgICAjIE5vIHNvY2tldCB0eXBlLgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSgKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnMS4yLjMuNCcsIDEsIFVOU1BFQywgMCwgMCkpCisKKyAgICAgICAgIyBJUHY0IGFkZHJlc3Mgd2l0aCBmYW1pbHkgSVB2Ni4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzEuMi4zLjQnLCAxLCBJTkVUNiwgU1RSRUFNLCBUQ1ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoSU5FVDYsIFNUUkVBTSwgVENQLCAnJywgKCc6OjMnLCAxKSksCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzo6MycsIDEsIElORVQ2LCBTVFJFQU0sIFRDUCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChJTkVUNiwgU1RSRUFNLCBUQ1AsICcnLCAoJzo6MycsIDEpKSwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9pcGFkZHJfaW5mbygnOjozJywgMSwgVU5TUEVDLCBTVFJFQU0sIFRDUCkpCisKKyAgICAgICAgIyBJUHY2IGFkZHJlc3Mgd2l0aCBmYW1pbHkgSVB2NC4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5faXBhZGRyX2luZm8oJzo6MycsIDEsIElORVQsIFNUUkVBTSwgVENQKSkKKworICAgICAgICAjIElQdjYgYWRkcmVzcyB3aXRoIHpvbmUgaW5kZXguCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoSU5FVDYsIFNUUkVBTSwgVENQLCAnJywgKCc6OjMlbG8wJywgMSkpLAorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvKCc6OjMlbG8wJywgMSwgSU5FVDYsIFNUUkVBTSwgVENQKSkKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9pcGFkZHJfaW5mb19ub19pbmV0X3B0b24oc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBkZWwgbV9zb2NrZXQuaW5ldF9wdG9uCisgICAgICAgIHNlbGYudGVzdF9pcGFkZHJfaW5mbygpCisKKyAgICBkZWYgdGVzdF9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNlbGYpOgorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgKCcxLjIuMy40JywgMSkpCisKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2KQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBiYXNlX2V2ZW50cy5fY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCAoJzo6MycsIDEpKQorICAgICAgICAgICAgYmFzZV9ldmVudHMuX2NoZWNrX3Jlc29sdmVkX2FkZHJlc3Moc29jaywgKCc6OjMlbG8wJywgMSkpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssICgnZm9vJywgMSkpCisKKyAgICBkZWYgdGVzdF9jaGVja19yZXNvbHZlZF9zb2NrX3R5cGUoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHdlIGlnbm9yZSBleHRyYSBmbGFncyBpbiBzb2NrLnR5cGUuCisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnU09DS19OT05CTE9DSycpOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQodHlwZT1zb2NrZXQuU09DS19TVFJFQU0gfCBzb2NrZXQuU09DS19OT05CTE9DSykKKyAgICAgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgICAgICBiYXNlX2V2ZW50cy5fY2hlY2tfcmVzb2x2ZWRfYWRkcmVzcyhzb2NrLCAoJzEuMi4zLjQnLCAxKSkKKworICAgICAgICBpZiBoYXNhdHRyKHNvY2tldCwgJ1NPQ0tfQ0xPRVhFQycpOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQodHlwZT1zb2NrZXQuU09DS19TVFJFQU0gfCBzb2NrZXQuU09DS19DTE9FWEVDKQorICAgICAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9jaGVja19yZXNvbHZlZF9hZGRyZXNzKHNvY2ssICgnMS4yLjMuNCcsIDEpKQorCisKK2NsYXNzIEJhc2VFdmVudExvb3BUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLnNlbGVjdC5yZXR1cm5fdmFsdWUgPSAoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X25vdF9pbXBsZW1lbnRlZChzZWxmKToKKyAgICAgICAgbSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydCwgbSwgbSwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX2RhdGFncmFtX3RyYW5zcG9ydCwgbSwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbWFrZV9yZWFkX3BpcGVfdHJhbnNwb3J0LCBtLCBtKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuX21ha2Vfd3JpdGVfcGlwZV90cmFuc3BvcnQsIG0sIG0pCisgICAgICAgIGdlbiA9IHNlbGYubG9vcC5fbWFrZV9zdWJwcm9jZXNzX3RyYW5zcG9ydChtLCBtLCBtLCBtLCBtLCBtLCBtKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgZ2VuLnNlbmQoTm9uZSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5pc19jbG9zZWQoKSkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5pc19jbG9zZWQoKSkKKworICAgICAgICAjIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBjYWxsIGNsb3NlKCkgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbiBibG9ja2VkIHdoZW4gdGhlIGxvb3AgaXMgY2xvc2VkCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZikKKworICAgIGRlZiB0ZXN0X19hZGRfY2FsbGJhY2tfaGFuZGxlKHNlbGYpOgorICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUobGFtYmRhOiBGYWxzZSwgKCksIHNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayhoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9fYWRkX2NhbGxiYWNrX2NhbmNlbGxlZF9oYW5kbGUoc2VsZik6CisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShsYW1iZGE6IEZhbHNlLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBoLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2soaCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NjaGVkdWxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfc2V0X2RlZmF1bHRfZXhlY3V0b3Ioc2VsZik6CisgICAgICAgIGV4ZWN1dG9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yKGV4ZWN1dG9yKQorICAgICAgICBzZWxmLmFzc2VydElzKGV4ZWN1dG9yLCBzZWxmLmxvb3AuX2RlZmF1bHRfZXhlY3V0b3IpCisKKyAgICBkZWYgdGVzdF9nZXRuYW1laW5mbyhzZWxmKToKKyAgICAgICAgc29ja2FkZHIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmdldG5hbWVpbmZvKHNvY2thZGRyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKE5vbmUsIHNvY2tldC5nZXRuYW1laW5mbywgc29ja2FkZHIsIDApLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb24oc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9zb29uKGNiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguX2NhbGxiYWNrLCBjYikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGgsIGFzeW5jaW8uSGFuZGxlKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9jYWxsX2xhdGVyKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBoID0gc2VsZi5sb29wLmNhbGxfbGF0ZXIoMTAuMCwgY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLCBhc3luY2lvLlRpbWVySGFuZGxlKQorICAgICAgICBzZWxmLmFzc2VydEluKGgsIHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGgsIHNlbGYubG9vcC5fcmVhZHkpCisKKyAgICBkZWYgdGVzdF9jYWxsX2xhdGVyX25lZ2F0aXZlX2RlbGF5cyhzZWxmKToKKyAgICAgICAgY2FsbHMgPSBbXQorCisgICAgICAgIGRlZiBjYihhcmcpOgorICAgICAgICAgICAgY2FsbHMuYXBwZW5kKGFyZykKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIoLTEsIGNiLCAnYScpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKC0yLCBjYiwgJ2InKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgWydiJywgJ2EnXSkKKworICAgIGRlZiB0ZXN0X3RpbWVfYW5kX2NhbGxfYXQoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBkZWxheSA9IDAuMQorCisgICAgICAgIHdoZW4gPSBzZWxmLmxvb3AudGltZSgpICsgZGVsYXkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfYXQod2hlbiwgY2IpCisgICAgICAgIHQwID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBkdCA9IHNlbGYubG9vcC50aW1lKCkgLSB0MAorCisgICAgICAgICMgNTAgbXM6IG1heGltdW0gZ3JhbnVsYXJpdHkgb2YgdGhlIGV2ZW50IGxvb3AKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZHQsIGRlbGF5IC0gMC4wNTAsIGR0KQorICAgICAgICAjIHRvbGVyYXRlIGEgZGlmZmVyZW5jZSBvZiArODAwIG1zIGJlY2F1c2Ugc29tZSBQeXRob24gYnVpbGRib3RzCisgICAgICAgICMgYXJlIHJlYWxseSBzbG93CisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGR0LCAwLjksIGR0KQorCisgICAgZGVmIGNoZWNrX3RocmVhZChzZWxmLCBsb29wLCBkZWJ1Zyk6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGxvb3Auc2V0X2RlYnVnKGRlYnVnKQorICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgIG1zZyA9ICgiTm9uLXRocmVhZC1zYWZlIG9wZXJhdGlvbiBpbnZva2VkIG9uIGFuIGV2ZW50IGxvb3Agb3RoZXIgIgorICAgICAgICAgICAgICAgICAgInRoYW4gdGhlIGN1cnJlbnQgb25lIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb24oY2IpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcig2MCwgY2IpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgICAgIGxvb3AuY2FsbF9hdChsb29wLnRpbWUoKSArIDYwLCBjYikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxvb3AuY2FsbF9zb29uKGNiKQorICAgICAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDYwLCBjYikKKyAgICAgICAgICAgIGxvb3AuY2FsbF9hdChsb29wLnRpbWUoKSArIDYwLCBjYikKKworICAgIGRlZiB0ZXN0X2NoZWNrX3RocmVhZChzZWxmKToKKyAgICAgICAgZGVmIGNoZWNrX2luX3RocmVhZChsb29wLCBldmVudCwgZGVidWcsIGNyZWF0ZV9sb29wLCBmdXQpOgorICAgICAgICAgICAgIyB3YWl0IHVudGlsIHRoZSBldmVudCBsb29wIGlzIHJ1bm5pbmcKKyAgICAgICAgICAgIGV2ZW50LndhaXQoKQorCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgY3JlYXRlX2xvb3A6CisgICAgICAgICAgICAgICAgICAgIGxvb3AyID0gYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCgpCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AobG9vcDIpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RocmVhZChsb29wLCBkZWJ1ZykKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3RocmVhZChsb29wLCBkZWJ1ZykKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIGxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoZnV0LnNldF9leGNlcHRpb24sIGV4YykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShmdXQuc2V0X3Jlc3VsdCwgTm9uZSkKKworICAgICAgICBkZWYgdGVzdF90aHJlYWQobG9vcCwgZGVidWcsIGNyZWF0ZV9sb29wPUZhbHNlKToKKyAgICAgICAgICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKKyAgICAgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgICAgIGxvb3AuY2FsbF9zb29uKGV2ZW50LnNldCkKKyAgICAgICAgICAgIGFyZ3MgPSAobG9vcCwgZXZlbnQsIGRlYnVnLCBjcmVhdGVfbG9vcCwgZnV0KQorICAgICAgICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Y2hlY2tfaW5fdGhyZWFkLCBhcmdzPWFyZ3MpCisgICAgICAgICAgICB0aHJlYWQuc3RhcnQoKQorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICAgICAgdGhyZWFkLmpvaW4oKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYgPSBtb2NrLk1vY2soKQorCisgICAgICAgICMgcmFpc2UgUnVudGltZUVycm9yIGlmIHRoZSB0aHJlYWQgaGFzIG5vIGV2ZW50IGxvb3AKKyAgICAgICAgdGVzdF90aHJlYWQoc2VsZi5sb29wLCBUcnVlKQorCisgICAgICAgICMgY2hlY2sgZGlzYWJsZWQgaWYgZGVidWcgbW9kZSBpcyBkaXNhYmxlZAorICAgICAgICB0ZXN0X3RocmVhZChzZWxmLmxvb3AsIEZhbHNlKQorCisgICAgICAgICMgcmFpc2UgUnVudGltZUVycm9yIGlmIHRoZSBldmVudCBsb29wIG9mIHRoZSB0aHJlYWQgaXMgbm90IHRoZSBjYWxsZWQKKyAgICAgICAgIyBldmVudCBsb29wCisgICAgICAgIHRlc3RfdGhyZWFkKHNlbGYubG9vcCwgVHJ1ZSwgY3JlYXRlX2xvb3A9VHJ1ZSkKKworICAgICAgICAjIGNoZWNrIGRpc2FibGVkIGlmIGRlYnVnIG1vZGUgaXMgZGlzYWJsZWQKKyAgICAgICAgdGVzdF90aHJlYWQoc2VsZi5sb29wLCBGYWxzZSwgY3JlYXRlX2xvb3A9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3J1bl9vbmNlX2luX2V4ZWN1dG9yX2hhbmRsZShzZWxmKToKKyAgICAgICAgZGVmIGNiKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvciwKKyAgICAgICAgICAgIE5vbmUsIGFzeW5jaW8uSGFuZGxlKGNiLCAoKSwgc2VsZi5sb29wKSwgKCcnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IsCisgICAgICAgICAgICBOb25lLCBhc3luY2lvLlRpbWVySGFuZGxlKDEwLCBjYiwgKCksIHNlbGYubG9vcCkpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZV9pbl9leGVjdXRvcl9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUoY2IsICgpLCBzZWxmLmxvb3ApCisgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYXN5bmNpby5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3J1bl9vbmNlX2luX2V4ZWN1dG9yX3BsYWluKHNlbGYpOgorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGNiLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV4ZWN1dG9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgZXhlY3V0b3Iuc3VibWl0LnJldHVybl92YWx1ZSA9IGYKKworICAgICAgICBzZWxmLmxvb3Auc2V0X2RlZmF1bHRfZXhlY3V0b3IoZXhlY3V0b3IpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBoKQorICAgICAgICBzZWxmLmFzc2VydElzKGYsIHJlcykKKworICAgICAgICBleGVjdXRvciA9IG1vY2suTW9jaygpCisgICAgICAgIGV4ZWN1dG9yLnN1Ym1pdC5yZXR1cm5fdmFsdWUgPSBmCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoZXhlY3V0b3IsIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXhlY3V0b3Iuc3VibWl0LmNhbGxlZCkKKworICAgICAgICBmLmNhbmNlbCgpICAjIERvbid0IGNvbXBsYWluIGFib3V0IGFiYW5kb25lZCBGdXR1cmUuCisKKyAgICBkZWYgdGVzdF9fcnVuX29uY2Uoc2VsZik6CisgICAgICAgIGgxID0gYXN5bmNpby5UaW1lckhhbmRsZSh0aW1lLm1vbm90b25pYygpICsgNS4wLCBsYW1iZGE6IFRydWUsICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wKQorICAgICAgICBoMiA9IGFzeW5jaW8uVGltZXJIYW5kbGUodGltZS5tb25vdG9uaWMoKSArIDEwLjAsIGxhbWJkYTogVHJ1ZSwgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3ApCisKKyAgICAgICAgaDEuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKGgxKQorICAgICAgICBzZWxmLmxvb3AuX3NjaGVkdWxlZC5hcHBlbmQoaDIpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorCisgICAgICAgIHQgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLnNlbGVjdC5jYWxsX2FyZ3NbMF1bMF0KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDkuNSA8IHQgPCAxMC41LCB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtoMl0sIHNlbGYubG9vcC5fc2NoZWR1bGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cy5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zZXRfZGVidWcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5nZXRfZGVidWcoKSkKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuZ2V0X2RlYnVnKCkpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X19ydW5fb25jZV9sb2dnaW5nKHNlbGYsIG1fbG9nZ2VyKToKKyAgICAgICAgZGVmIHNsb3dfc2VsZWN0KHRpbWVvdXQpOgorICAgICAgICAgICAgIyBTbGVlcCBhIGJpdCBsb25nZXIgdGhhbiBhIHNlY29uZCB0byBhdm9pZCB0aW1lciByZXNvbHV0aW9uCisgICAgICAgICAgICAjIGlzc3Vlcy4KKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMS4xKQorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgIyBsb2dnaW5nIG5lZWRzIGRlYnVnIGZsYWcKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorCisgICAgICAgICMgTG9nIHRvIElORk8gbGV2ZWwgaWYgdGltZW91dCA+IDEuMCBzZWMuCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3Iuc2VsZWN0ID0gc2xvd19zZWxlY3QKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuSU5GTywgbV9sb2dnZXIubG9nLmNhbGxfYXJnc1swXVswXSkKKworICAgICAgICBkZWYgZmFzdF9zZWxlY3QodGltZW91dCk6CisgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDAxKQorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5zZWxlY3QgPSBmYXN0X3NlbGVjdAorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2dnaW5nLkRFQlVHLCBtX2xvZ2dlci5sb2cuY2FsbF9hcmdzWzBdWzBdKQorCisgICAgZGVmIHRlc3RfX3J1bl9vbmNlX3NjaGVkdWxlX2hhbmRsZShzZWxmKToKKyAgICAgICAgaGFuZGxlID0gTm9uZQorICAgICAgICBwcm9jZXNzZWQgPSBGYWxzZQorCisgICAgICAgIGRlZiBjYihsb29wKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb2Nlc3NlZCwgaGFuZGxlCisgICAgICAgICAgICBwcm9jZXNzZWQgPSBUcnVlCisgICAgICAgICAgICBoYW5kbGUgPSBsb29wLmNhbGxfc29vbihsYW1iZGE6IFRydWUpCisKKyAgICAgICAgaCA9IGFzeW5jaW8uVGltZXJIYW5kbGUodGltZS5tb25vdG9uaWMoKSAtIDEsIGNiLCAoc2VsZi5sb29wLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zY2hlZHVsZWQuYXBwZW5kKGgpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm9jZXNzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2hhbmRsZV0sIGxpc3Qoc2VsZi5sb29wLl9yZWFkeSkpCisKKyAgICBkZWYgdGVzdF9fcnVuX29uY2VfY2FuY2VsbGVkX2V2ZW50X2NsZWFudXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIDAgPCBiYXNlX2V2ZW50cy5fTUlOX0NBTkNFTExFRF9USU1FUl9IQU5ETEVTX0ZSQUNUSU9OIDwgMS4wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgU2V0IHVwIG9uZSAiYmxvY2tpbmciIGV2ZW50IHRoYXQgd2lsbCBub3QgYmUgY2FuY2VsbGVkIHRvCisgICAgICAgICMgZW5zdXJlIGxhdGVyIGNhbmNlbGxlZCBldmVudHMgZG8gbm90IG1ha2UgaXQgdG8gdGhlIGhlYWQKKyAgICAgICAgIyBvZiB0aGUgcXVldWUgYW5kIGdldCBjbGVhbmVkLgorICAgICAgICBub3RfY2FuY2VsbGVkX2NvdW50ID0gMQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigzMDAwLCBjYikKKworICAgICAgICAjIEFkZCBsZXNzIHRoYW4gdGhyZXNob2xkIChiYXNlX2V2ZW50cy5fTUlOX1NDSEVEVUxFRF9USU1FUl9IQU5ETEVTKQorICAgICAgICAjIGNhbmNlbGxlZCBoYW5kbGVzLCBlbnN1cmUgdGhleSBhcmVuJ3QgcmVtb3ZlZAorCisgICAgICAgIGNhbmNlbGxlZF9jb3VudCA9IDIKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UoMik6CisgICAgICAgICAgICBoID0gc2VsZi5sb29wLmNhbGxfbGF0ZXIoMzYwMCwgY2IpCisgICAgICAgICAgICBoLmNhbmNlbCgpCisKKyAgICAgICAgIyBBZGQgc29tZSBjYW5jZWxsZWQgZXZlbnRzIHRoYXQgd2lsbCBiZSBhdCBoZWFkIGFuZCByZW1vdmVkCisgICAgICAgIGNhbmNlbGxlZF9jb3VudCArPSAyCisgICAgICAgIGZvciB4IGluIHJhbmdlKDIpOgorICAgICAgICAgICAgaCA9IHNlbGYubG9vcC5jYWxsX2xhdGVyKDEwMCwgY2IpCisgICAgICAgICAgICBoLmNhbmNlbCgpCisKKyAgICAgICAgIyBUaGlzIHRlc3QgaXMgaW52YWxpZCBpZiBfTUlOX1NDSEVEVUxFRF9USU1FUl9IQU5ETEVTIGlzIHRvbyBsb3cKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoY2FuY2VsbGVkX2NvdW50ICsgbm90X2NhbmNlbGxlZF9jb3VudCwKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9NSU5fU0NIRURVTEVEX1RJTUVSX0hBTkRMRVMpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCwgY2FuY2VsbGVkX2NvdW50KQorCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorCisgICAgICAgIGNhbmNlbGxlZF9jb3VudCAtPSAyCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AuX3RpbWVyX2NhbmNlbGxlZF9jb3VudCwgY2FuY2VsbGVkX2NvdW50KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fc2NoZWR1bGVkKSwKKyAgICAgICAgICAgIGNhbmNlbGxlZF9jb3VudCArIG5vdF9jYW5jZWxsZWRfY291bnQpCisKKyAgICAgICAgIyBOZWVkIGVub3VnaCBldmVudHMgdG8gcGFzcyBfTUlOX0NBTkNFTExFRF9USU1FUl9IQU5ETEVTX0ZSQUNUSU9OCisgICAgICAgICMgc28gdGhhdCBkZWxldGlvbiBvZiBjYW5jZWxsZWQgZXZlbnRzIHdpbGwgb2NjdXIgb24gbmV4dCBfcnVuX29uY2UKKyAgICAgICAgYWRkX2NhbmNlbF9jb3VudCA9IGludChtYXRoLmNlaWwoCisgICAgICAgICAgICBiYXNlX2V2ZW50cy5fTUlOX1NDSEVEVUxFRF9USU1FUl9IQU5ETEVTICoKKyAgICAgICAgICAgIGJhc2VfZXZlbnRzLl9NSU5fQ0FOQ0VMTEVEX1RJTUVSX0hBTkRMRVNfRlJBQ1RJT04pKSArIDEKKworICAgICAgICBhZGRfbm90X2NhbmNlbF9jb3VudCA9IG1heChiYXNlX2V2ZW50cy5fTUlOX1NDSEVEVUxFRF9USU1FUl9IQU5ETEVTIC0KKyAgICAgICAgICAgIGFkZF9jYW5jZWxfY291bnQsIDApCisKKyAgICAgICAgIyBBZGQgc29tZSBldmVudHMgdGhhdCB3aWxsIG5vdCBiZSBjYW5jZWxsZWQKKyAgICAgICAgbm90X2NhbmNlbGxlZF9jb3VudCArPSBhZGRfbm90X2NhbmNlbF9jb3VudAorICAgICAgICBmb3IgeCBpbiByYW5nZShhZGRfbm90X2NhbmNlbF9jb3VudCk6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigzNjAwLCBjYikKKworICAgICAgICAjIEFkZCBlbm91Z2ggY2FuY2VsbGVkIGV2ZW50cworICAgICAgICBjYW5jZWxsZWRfY291bnQgKz0gYWRkX2NhbmNlbF9jb3VudAorICAgICAgICBmb3IgeCBpbiByYW5nZShhZGRfY2FuY2VsX2NvdW50KToKKyAgICAgICAgICAgIGggPSBzZWxmLmxvb3AuY2FsbF9sYXRlcigzNjAwLCBjYikKKyAgICAgICAgICAgIGguY2FuY2VsKCkKKworICAgICAgICAjIEVuc3VyZSBhbGwgaGFuZGxlcyBhcmUgc3RpbGwgc2NoZWR1bGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fc2NoZWR1bGVkKSwKKyAgICAgICAgICAgIGNhbmNlbGxlZF9jb3VudCArIG5vdF9jYW5jZWxsZWRfY291bnQpCisKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisKKyAgICAgICAgIyBFbnN1cmUgY2FuY2VsbGVkIGV2ZW50cyB3ZXJlIHJlbW92ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5sb29wLl9zY2hlZHVsZWQpLCBub3RfY2FuY2VsbGVkX2NvdW50KQorCisgICAgICAgICMgRW5zdXJlIG9ubHkgdW5jYW5jZWxsZWQgZXZlbnRzIHJlbWFpbiBzY2hlZHVsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFsbChbbm90IHguX2NhbmNlbGxlZCBmb3IgeCBpbiBzZWxmLmxvb3AuX3NjaGVkdWxlZF0pKQorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlX3R5cGVfZXJyb3Ioc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsICdibGFoJykKKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZV9sb29wKHNlbGYpOgorICAgICAgICB0YXNrID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG90aGVyX2xvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3RoZXJfbG9vcC5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgIG90aGVyX2xvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0YXNrKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGVjX2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgYXJncyA9IFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3Bhc3MnXQorCisgICAgICAgICMgbWlzc2luZyBwcm9ncmFtIHBhcmFtZXRlciAoZW1wdHkgYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYywKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sKQorCisgICAgICAgICMgZXhwZWN0ZWQgbXVsdGlwbGUgYXJndW1lbnRzLCBub3QgYSBsaXN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgYXJncykKKworICAgICAgICAjIHByb2dyYW0gYXJndW1lbnRzIG11c3QgYmUgc3RyaW5ncywgbm90IGludAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsIHN5cy5leGVjdXRhYmxlLCAxMjMpCisKKyAgICAgICAgIyB1bml2ZXJzYWxfbmV3bGluZXMsIHNoZWxsLCBidWZzaXplIG11c3Qgbm90IGJlIHNldAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgKmFyZ3MsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICphcmdzLCBzaGVsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICphcmdzLCBidWZzaXplPTQwOTYpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3NoZWxsX2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgIyBleHBlY3RlZCBhIHN0cmluZywgbm90IGFuIGludCBvciBhIGxpc3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwsCisgICAgICAgICAgICBhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCwKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCBbc3lzLmV4ZWN1dGFibGUsICctYycsICdwYXNzJ10pCisKKyAgICAgICAgIyB1bml2ZXJzYWxfbmV3bGluZXMsIHNoZWxsLCBidWZzaXplIG11c3Qgbm90IGJlIHNldAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCwKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCAnZXhpdCAwJywgdW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsLAorICAgICAgICAgICAgYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsICdleGl0IDAnLCBzaGVsbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCwKKyAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLCAnZXhpdCAwJywgYnVmc2l6ZT00MDk2KQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9leGNfaGFuZGxlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9wcm9jZXNzX2V2ZW50cyA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZGVmIHplcm9fZXJyb3IoZnV0KToKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICAxLzAKKworICAgICAgICAjIFRlc3QgY2FsbF9zb29uIChldmVudHMuSGFuZGxlKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykgYXMgbG9nOgorICAgICAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHplcm9fZXJyb3IsIGZ1dCkKKyAgICAgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhsYW1iZGEgZnV0OiBzZWxmLmxvb3Auc3RvcCgpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybignRXhjZXB0aW9uIGluIGNhbGxiYWNrLip6ZXJvJyksCisgICAgICAgICAgICAgICAgZXhjX2luZm89KFplcm9EaXZpc2lvbkVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisgICAgICAgICMgVGVzdCBjYWxsX2xhdGVyIChldmVudHMuVGltZXJIYW5kbGUpCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKSBhcyBsb2c6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDAuMDEsIHplcm9fZXJyb3IsIGZ1dCkKKyAgICAgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhsYW1iZGEgZnV0OiBzZWxmLmxvb3Auc3RvcCgpKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybignRXhjZXB0aW9uIGluIGNhbGxiYWNrLip6ZXJvJyksCisgICAgICAgICAgICAgICAgZXhjX2luZm89KFplcm9EaXZpc2lvbkVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9leGNfaGFuZGxlcl9jb3JvKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHplcm9fZXJyb3JfY29ybygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgIyBUZXN0IEZ1dHVyZS5fX2RlbF9fCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKSBhcyBsb2c6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoemVyb19lcnJvcl9jb3JvKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgZnV0LmFkZF9kb25lX2NhbGxiYWNrKGxhbWJkYSAqYXJnczogc2VsZi5sb29wLnN0b3AoKSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgICAgICBmdXQgPSBOb25lICMgVHJpZ2dlciBGdXR1cmUuX19kZWxfXyBvciBmdXR1cmVzLl9UcmFjZWJhY2tMb2dnZXIKKyAgICAgICAgICAgIGlmIFBZMzQ6CisgICAgICAgICAgICAgICAgIyBGdXR1cmUuX19kZWxfXyBpbiBQeXRob24gMy40IGxvZ3MgZXJyb3Igd2l0aAorICAgICAgICAgICAgICAgICMgYW4gYWN0dWFsIGV4Y2VwdGlvbiBjb250ZXh0CisgICAgICAgICAgICAgICAgbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybignLipleGNlcHRpb24gd2FzIG5ldmVyIHJldHJpZXZlZCcpLAorICAgICAgICAgICAgICAgICAgICBleGNfaW5mbz0oWmVyb0RpdmlzaW9uRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgZnV0dXJlcy5fVHJhY2ViYWNrTG9nZ2VyIGxvZ3Mgb25seSB0ZXh0dWFsIHRyYWNlYmFjaworICAgICAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oCisgICAgICAgICAgICAgICAgICAgICAgICAnLipleGNlcHRpb24gd2FzIG5ldmVyIHJldHJpZXZlZC4qWmVyb0RpdicpLAorICAgICAgICAgICAgICAgICAgICBleGNfaW5mbz1GYWxzZSkKKworICAgIGRlZiB0ZXN0X3NldF9leGNfaGFuZGxlcl9pbnZhbGlkKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnQSBjYWxsYWJsZSBvYmplY3Qgb3IgTm9uZScpOgorICAgICAgICAgICAgc2VsZi5sb29wLnNldF9leGNlcHRpb25faGFuZGxlcignc3BhbScpCisKKyAgICBkZWYgdGVzdF9zZXRfZXhjX2hhbmRsZXJfY3VzdG9tKHNlbGYpOgorICAgICAgICBkZWYgemVyb19lcnJvcigpOgorICAgICAgICAgICAgMS8wCisKKyAgICAgICAgZGVmIHJ1bl9sb29wKCk6CisgICAgICAgICAgICBoYW5kbGUgPSBzZWxmLmxvb3AuY2FsbF9zb29uKHplcm9fZXJyb3IpCisgICAgICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGUKKworICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorCisgICAgICAgIG1vY2tfaGFuZGxlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIobW9ja19oYW5kbGVyKQorICAgICAgICBoYW5kbGUgPSBydW5fbG9vcCgpCisgICAgICAgIG1vY2tfaGFuZGxlci5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5sb29wLCB7CisgICAgICAgICAgICAnZXhjZXB0aW9uJzogTU9DS19BTlksCisgICAgICAgICAgICAnbWVzc2FnZSc6IHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFeGNlcHRpb24gaW4gY2FsbGJhY2suKnplcm9fZXJyb3InKSwKKyAgICAgICAgICAgICdoYW5kbGUnOiBoYW5kbGUsCisgICAgICAgICAgICAnc291cmNlX3RyYWNlYmFjayc6IGhhbmRsZS5fc291cmNlX3RyYWNlYmFjaywKKyAgICAgICAgfSkKKyAgICAgICAgbW9ja19oYW5kbGVyLnJlc2V0X21vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIoTm9uZSkKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpIGFzIGxvZzoKKyAgICAgICAgICAgIHJ1bl9sb29wKCkKKyAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRXhjZXB0aW9uIGluIGNhbGxiYWNrLip6ZXJvJyksCisgICAgICAgICAgICAgICAgICAgICAgICBleGNfaW5mbz0oWmVyb0RpdmlzaW9uRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisKKyAgICAgICAgYXNzZXJ0IG5vdCBtb2NrX2hhbmRsZXIuY2FsbGVkCisKKyAgICBkZWYgdGVzdF9zZXRfZXhjX2hhbmRsZXJfYnJva2VuKHNlbGYpOgorICAgICAgICBkZWYgcnVuX2xvb3AoKToKKyAgICAgICAgICAgIGRlZiB6ZXJvX2Vycm9yKCk6CisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHplcm9fZXJyb3IpCisgICAgICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKworICAgICAgICBkZWYgaGFuZGxlcihsb29wLCBjb250ZXh0KToKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCdzcGFtJykKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGhhbmRsZXIpCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpIGFzIGxvZzoKKyAgICAgICAgICAgIHJ1bl9sb29wKCkKKyAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybigKKyAgICAgICAgICAgICAgICAgICAgJ1VuaGFuZGxlZCBlcnJvciBpbiBleGNlcHRpb24gaGFuZGxlcicpLAorICAgICAgICAgICAgICAgIGV4Y19pbmZvPShBdHRyaWJ1dGVFcnJvciwgTU9DS19BTlksIE1PQ0tfQU5ZKSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfZXhjX2hhbmRsZXJfYnJva2VuKHNlbGYpOgorICAgICAgICBfY29udGV4dCA9IE5vbmUKKworICAgICAgICBjbGFzcyBMb29wKGJhc2VfZXZlbnRzLkJhc2VFdmVudExvb3ApOgorCisgICAgICAgICAgICBfc2VsZWN0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICAgICAgX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKworICAgICAgICAgICAgZGVmIGRlZmF1bHRfZXhjZXB0aW9uX2hhbmRsZXIoc2VsZiwgY29udGV4dCk6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgX2NvbnRleHQKKyAgICAgICAgICAgICAgICBfY29udGV4dCA9IGNvbnRleHQKKyAgICAgICAgICAgICAgICAjIFNpbXVsYXRlcyBjdXN0b20gYnVnZ3kgImRlZmF1bHRfZXhjZXB0aW9uX2hhbmRsZXIiCisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignc3BhbScpCisKKyAgICAgICAgbG9vcCA9IExvb3AoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChsb29wKQorCisgICAgICAgIGRlZiBydW5fbG9vcCgpOgorICAgICAgICAgICAgZGVmIHplcm9fZXJyb3IoKToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIGxvb3AuY2FsbF9zb29uKHplcm9fZXJyb3IpCisgICAgICAgICAgICBsb29wLl9ydW5fb25jZSgpCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpIGFzIGxvZzoKKyAgICAgICAgICAgIHJ1bl9sb29wKCkKKyAgICAgICAgICAgIGxvZy5lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgJ0V4Y2VwdGlvbiBpbiBkZWZhdWx0IGV4Y2VwdGlvbiBoYW5kbGVyJywKKyAgICAgICAgICAgICAgICBleGNfaW5mbz1UcnVlKQorCisgICAgICAgIGRlZiBjdXN0b21faGFuZGxlcihsb29wLCBjb250ZXh0KToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2hhbScpCisKKyAgICAgICAgX2NvbnRleHQgPSBOb25lCisgICAgICAgIGxvb3Auc2V0X2V4Y2VwdGlvbl9oYW5kbGVyKGN1c3RvbV9oYW5kbGVyKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykgYXMgbG9nOgorICAgICAgICAgICAgcnVuX2xvb3AoKQorICAgICAgICAgICAgbG9nLmVycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKCdFeGNlcHRpb24gaW4gZGVmYXVsdCBleGNlcHRpb24uKicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3aGlsZSBoYW5kbGluZy4qaW4gY3VzdG9tJyksCisgICAgICAgICAgICAgICAgZXhjX2luZm89VHJ1ZSkKKworICAgICAgICAgICAgIyBDaGVjayB0aGF0IG9yaWdpbmFsIGNvbnRleHQgd2FzIHBhc3NlZCB0byBkZWZhdWx0CisgICAgICAgICAgICAjIGV4Y2VwdGlvbiBoYW5kbGVyLgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignY29udGV4dCcsIF9jb250ZXh0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKF9jb250ZXh0Wydjb250ZXh0J11bJ2V4Y2VwdGlvbiddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgWmVyb0RpdmlzaW9uRXJyb3IpCisKKyAgICBkZWYgdGVzdF9zZXRfdGFza19mYWN0b3J5X2ludmFsaWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgIFR5cGVFcnJvciwgJ3Rhc2sgZmFjdG9yeSBtdXN0IGJlIGEgY2FsbGFibGUgb3IgTm9uZScpOgorCisgICAgICAgICAgICBzZWxmLmxvb3Auc2V0X3Rhc2tfZmFjdG9yeSgxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5nZXRfdGFza19mYWN0b3J5KCkpCisKKyAgICBkZWYgdGVzdF9zZXRfdGFza19mYWN0b3J5KHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKworICAgICAgICBjbGFzcyBNeVRhc2soYXN5bmNpby5UYXNrKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBmYWN0b3J5ID0gbGFtYmRhIGxvb3AsIGNvcm86IE15VGFzayhjb3JvLCBsb29wPWxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLmdldF90YXNrX2ZhY3RvcnkoKSkKKyAgICAgICAgc2VsZi5sb29wLnNldF90YXNrX2ZhY3RvcnkoZmFjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLmxvb3AuZ2V0X3Rhc2tfZmFjdG9yeSgpLCBmYWN0b3J5KQorCisgICAgICAgIHRhc2sgPSBzZWxmLmxvb3AuY3JlYXRlX3Rhc2soY29ybygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZSh0YXNrLCBNeVRhc2spKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisKKyAgICAgICAgc2VsZi5sb29wLnNldF90YXNrX2ZhY3RvcnkoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLmdldF90YXNrX2ZhY3RvcnkoKSkKKworICAgICAgICB0YXNrID0gc2VsZi5sb29wLmNyZWF0ZV90YXNrKGNvcm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2UodGFzaywgYXN5bmNpby5UYXNrKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKHRhc2ssIE15VGFzaykpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKworICAgIGRlZiB0ZXN0X2Vudl92YXJfZGVidWcoc2VsZik6CisgICAgICAgIGNvZGUgPSAnXG4nLmpvaW4oKAorICAgICAgICAgICAgJ2ltcG9ydCBhc3luY2lvJywKKyAgICAgICAgICAgICdsb29wID0gYXN5bmNpby5nZXRfZXZlbnRfbG9vcCgpJywKKyAgICAgICAgICAgICdwcmludChsb29wLmdldF9kZWJ1ZygpKScpKQorCisgICAgICAgICMgVGVzdCB3aXRoIC1FIHRvIG5vdCBmYWlsIGlmIHRoZSB1bml0IHRlc3Qgd2FzIHJ1biB3aXRoCisgICAgICAgICMgUFlUSE9OQVNZTkNJT0RFQlVHIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1FJywgJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInRmFsc2UnKQorCisgICAgICAgIHN0cywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTkFTWU5DSU9ERUJVRz0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInRmFsc2UnKQorCisgICAgICAgIHN0cywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTkFTWU5DSU9ERUJVRz0nMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJzdHJpcCgpLCBiJ1RydWUnKQorCisgICAgICAgIHN0cywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctRScsICctYycsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTkFTWU5DSU9ERUJVRz0nMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LnJzdHJpcCgpLCBiJ0ZhbHNlJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV90YXNrKHNlbGYpOgorICAgICAgICBjbGFzcyBNeVRhc2soYXN5bmNpby5UYXNrKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBFdmVudExvb3AoYmFzZV9ldmVudHMuQmFzZUV2ZW50TG9vcCk6CisgICAgICAgICAgICBkZWYgY3JlYXRlX3Rhc2soc2VsZiwgY29ybyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE15VGFzayhjb3JvLCBsb29wPWxvb3ApCisKKyAgICAgICAgbG9vcCA9IEV2ZW50TG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3AobG9vcCkKKworICAgICAgICBjb3JvID0gdGVzdCgpCisgICAgICAgIHRhc2sgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoY29ybywgbG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGFzaywgTXlUYXNrKQorCisgICAgICAgICMgbWFrZSB3YXJuaW5ncyBxdWlldAorICAgICAgICB0YXNrLl9sb2dfZGVzdHJveV9wZW5kaW5nID0gRmFsc2UKKyAgICAgICAgY29yby5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9ydW5fZm9yZXZlcl9rZXlib2FyZF9pbnRlcnJ1cHQoc2VsZik6CisgICAgICAgICMgUHl0aG9uIGlzc3VlICMyMjYwMTogZW5zdXJlIHRoYXQgdGhlIHRlbXBvcmFyeSB0YXNrIGNyZWF0ZWQgYnkKKyAgICAgICAgIyBydW5fZm9yZXZlcigpIGNvbnN1bWVzIHRoZSBLZXlib2FyZEludGVycnVwdCBhbmQgc28gZG9uJ3QgbG9nCisgICAgICAgICMgYSB3YXJuaW5nCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcmFpc2Vfa2V5Ym9hcmRfaW50ZXJydXB0KCk6CisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlciA9IG1vY2suTW9jaygpCisKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyYWlzZV9rZXlib2FyZF9pbnRlcnJ1cHQoKSkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcnVuX3VudGlsX2NvbXBsZXRlX2Jhc2VleGNlcHRpb24oc2VsZik6CisgICAgICAgICMgUHl0aG9uIGlzc3VlICMyMjQyOTogcnVuX3VudGlsX2NvbXBsZXRlKCkgbXVzdCBub3Qgc2NoZWR1bGUgYSBwZW5kaW5nCisgICAgICAgICMgY2FsbCB0byBzdG9wKCkgaWYgdGhlIGZ1dHVyZSByYWlzZWQgYSBCYXNlRXhjZXB0aW9uCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcmFpc2Vfa2V5Ym9hcmRfaW50ZXJydXB0KCk6CisgICAgICAgICAgICByYWlzZSBLZXlib2FyZEludGVycnVwdAorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmFpc2Vfa2V5Ym9hcmRfaW50ZXJydXB0KCkpCisgICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDoKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBkZWYgZnVuYygpOgorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorICAgICAgICAgICAgZnVuYy5jYWxsZWQgPSBUcnVlCisgICAgICAgIGZ1bmMuY2FsbGVkID0gRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihmdW5jKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoZnVuYy5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfc2VsZWN0ZXJfZXZlbnRfY2FsbGJhY2tfYWZ0ZXJfc3RvcHBpbmcoc2VsZik6CisgICAgICAgICMgUHl0aG9uIGlzc3VlICMyNTU5MzogQSBzdG9wcGVkIGV2ZW50IGxvb3AgbWF5IGNhdXNlIGV2ZW50IGNhbGxiYWNrcworICAgICAgICAjIHRvIHJ1biBtb3JlIHRoYW4gb25jZS4KKyAgICAgICAgZXZlbnRfc2VudGluZWwgPSBvYmplY3QoKQorICAgICAgICBjYWxsY291bnQgPSAwCisgICAgICAgIGRvZXIgPSBOb25lCisKKyAgICAgICAgZGVmIHByb2NfZXZlbnRzKGV2ZW50X2xpc3QpOgorICAgICAgICAgICAgbm9ubG9jYWwgZG9lcgorICAgICAgICAgICAgaWYgZXZlbnRfc2VudGluZWwgaW4gZXZlbnRfbGlzdDoKKyAgICAgICAgICAgICAgICBkb2VyID0gc2VsZi5sb29wLmNhbGxfc29vbihkb19ldmVudCkKKworICAgICAgICBkZWYgZG9fZXZlbnQoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhbGxjb3VudAorICAgICAgICAgICAgY2FsbGNvdW50ICs9IDEKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2xlYXJfc2VsZWN0b3IpCisKKyAgICAgICAgZGVmIGNsZWFyX3NlbGVjdG9yKCk6CisgICAgICAgICAgICBkb2VyLmNhbmNlbCgpCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLnNlbGVjdC5yZXR1cm5fdmFsdWUgPSAoKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBwcm9jX2V2ZW50cworICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLnNlbGVjdC5yZXR1cm5fdmFsdWUgPSAoZXZlbnRfc2VudGluZWwsKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDMpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoJ0xvb3AgJWQvMicgJSBpKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHNlbGYubG9vcC5zdG9wKQorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxsY291bnQsIDEpCisKKyAgICBkZWYgdGVzdF9ydW5fb25jZShzZWxmKToKKyAgICAgICAgIyBTaW1wbGUgdGVzdCBmb3IgdGVzdF91dGlscy5ydW5fb25jZSgpLiAgSXQgbWF5IHNlZW0gc3RyYW5nZQorICAgICAgICAjIHRvIGhhdmUgYSB0ZXN0IGZvciB0aGlzICh0aGUgZnVuY3Rpb24gaXNuJ3QgZXZlbiB1c2VkISkgYnV0CisgICAgICAgICMgaXQncyBhIGRlLWZhY3RvciBzdGFuZGFyZCBBUEkgZm9yIGxpYnJhcnkgdGVzdHMuICBUaGlzIHRlc3RzCisgICAgICAgICMgdGhlIGlkaW9tOiBsb29wLmNhbGxfc29vbihsb29wLnN0b3ApOyBsb29wLnJ1bl9mb3JldmVyKCkuCisgICAgICAgIGNvdW50ID0gMAorCisgICAgICAgIGRlZiBjYWxsYmFjaygpOgorICAgICAgICAgICAgbm9ubG9jYWwgY291bnQKKyAgICAgICAgICAgIGNvdW50ICs9IDEKKworICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYWxsYmFjaykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fb25jZShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY291bnQsIDEpCisKKyAgICBkZWYgdGVzdF9ydW5fZm9yZXZlcl9wcmVfc3RvcHBlZChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIG9sZCBpZGlvbSBmb3IgcHJlLXN0b3BwaW5nIHRoZSBsb29wIHdvcmtzLgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLnNlbGVjdC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgwKQorCisKK2NsYXNzIE15UHJvdG8oYXN5bmNpby5Qcm90b2NvbCk6CisgICAgZG9uZSA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjcmVhdGVfZnV0dXJlPUZhbHNlKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgY3JlYXRlX2Z1dHVyZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5Ib3N0OiBleGFtcGxlLmNvbVxyXG5cclxuJykKKworICAgIGRlZiBkYXRhX3JlY2VpdmVkKHNlbGYsIGRhdGEpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnRU9GJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSBpbiAoJ0NPTk5FQ1RFRCcsICdFT0YnKSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeURhdGFncmFtUHJvdG8oYXN5bmNpby5EYXRhZ3JhbVByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNyZWF0ZV9mdXR1cmU9RmFsc2UsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi5uYnl0ZXMgPSAwCisgICAgICAgIGlmIGNyZWF0ZV9mdXR1cmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUxJWkVEJworCisgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYubmJ5dGVzICs9IGxlbihkYXRhKQorCisgICAgZGVmIGVycm9yX3JlY2VpdmVkKHNlbGYsIGV4Yyk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBCYXNlRXZlbnRMb29wV2l0aFNlbGVjdG9yVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBDbGVhciBtb2NrZWQgY29uc3RhbnRzIGxpa2UgQUZfSU5FVCBmcm9tIHRoZSBjYWNoZS4KKyAgICAgICAgYmFzZV9ldmVudHMuX2lwYWRkcl9pbmZvLmNhY2hlX2NsZWFyKCkKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgICBAcGF0Y2hfc29ja2V0CisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGVfZXJyb3JzKHNlbGYsIG1fc29ja2V0KToKKworICAgICAgICBjbGFzcyBNeVByb3RvKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKSwKKyAgICAgICAgICAgICAgICAgICAgKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSldCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBpZHggPSAtMQorICAgICAgICBlcnJvcnMgPSBbJ2VycjEnLCAnZXJyMiddCisKKyAgICAgICAgZGVmIF9zb2NrZXQoKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgbm9ubG9jYWwgaWR4LCBlcnJvcnMKKyAgICAgICAgICAgIGlkeCArPSAxCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKGVycm9yc1tpZHhdKQorCisgICAgICAgIG1fc29ja2V0LnNvY2tldCA9IF9zb2NrZXQKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAnTXVsdGlwbGUgZXhjZXB0aW9uczogZXJyMSwgZXJyMicpCisKKyAgICBAcGF0Y2hfc29ja2V0CisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fdGltZW91dChzZWxmLCBtX3NvY2tldCk6CisgICAgICAgICMgRW5zdXJlIHRoYXQgdGhlIHNvY2tldCBpcyBjbG9zZWQgb24gdGltZW91dAorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IHNvY2sKKworICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBhZGRyID0gKHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0sIDAsICcnLAorICAgICAgICAgICAgICAgICAgICAoJzEyNy4wLjAuMScsIDgwKSkKKyAgICAgICAgICAgIGZ1dC5zZXRfcmVzdWx0KFthZGRyXSkKKyAgICAgICAgICAgIHJldHVybiBmdXQKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm8KKworICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYubG9vcCwgJ3NvY2tfY29ubmVjdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZV9lZmZlY3Q9YXN5bmNpby5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnMTI3LjAuMC4xJywgODApCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uVGltZW91dEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9ob3N0X3BvcnRfc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgIE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwLCBzb2NrPW9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9faG9zdF9wb3J0X3NvY2soc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX25vX2dldGFkZHJpbmZvKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fY29ubmVjdF9lcnIoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGUoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgcmV0dXJuIFsoMiwgMSwgNiwgJycsICgnMC4wLjAuMScsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcwLjAuMC4yJywgODApKV0KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgIE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwLCBmYW1pbHk9c29ja2V0LkFGX0lORVQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBAcGF0Y2hfc29ja2V0CisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbXVsdGlwbGVfZXJyb3JzX2xvY2FsX2FkZHIoc2VsZiwgbV9zb2NrZXQpOgorCisgICAgICAgIGRlZiBiaW5kKGFkZHIpOgorICAgICAgICAgICAgaWYgYWRkclswXSA9PSAnMC4wLjAuMSc6CisgICAgICAgICAgICAgICAgZXJyID0gT1NFcnJvcignRXJyJykKKyAgICAgICAgICAgICAgICBlcnIuc3RyZXJyb3IgPSAnRXJyJworICAgICAgICAgICAgICAgIHJhaXNlIGVycgorCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuYmluZCA9IGJpbmQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvKCphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzAuMC4wLjEnLCA4MCkpLAorICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMC4wLjAuMicsIDgwKSldCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcignRXJyMicpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgIE15UHJvdG8sICdleGFtcGxlLmNvbScsIDgwLCBmYW1pbHk9c29ja2V0LkFGX0lORVQsCisgICAgICAgICAgICBsb2NhbF9hZGRyPShOb25lLCA4MDgwKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyKGNtLmV4Y2VwdGlvbikuc3RhcnRzd2l0aCgnTXVsdGlwbGUgZXhjZXB0aW9uczogJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiBfdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9pcF9hZGRyKHNlbGYsIG1fc29ja2V0LCBhbGxvd19pbmV0X3B0b24pOgorICAgICAgICAjIFRlc3QgdGhlIGZhbGxiYWNrIGNvZGUsIGV2ZW4gaWYgdGhpcyBzeXN0ZW0gaGFzIGluZXRfcHRvbi4KKyAgICAgICAgaWYgbm90IGFsbG93X2luZXRfcHRvbjoKKyAgICAgICAgICAgIGRlbCBtX3NvY2tldC5pbmV0X3B0b24KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdzaG91bGQgbm90IGhhdmUgY2FsbGVkIGdldGFkZHJpbmZvJykKKworICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvCisgICAgICAgIHNvY2sgPSBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5faXNfY29yb3V0aW5lID0gRmFsc2UKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5faXNfY29yb3V0aW5lID0gRmFsc2UKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKGFzeW5jaW8uUHJvdG9jb2wsICcxLjIuMy40JywgODApCisgICAgICAgIHQsIHAgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2suY29ubmVjdC5hc3NlcnRfY2FsbGVkX3dpdGgoKCcxLjIuMy40JywgODApKQorICAgICAgICAgICAgbV9zb2NrZXQuc29ja2V0LmFzc2VydF9jYWxsZWRfd2l0aChmYW1pbHk9bV9zb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG89bV9zb2NrZXQuSVBQUk9UT19UQ1AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9bV9zb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICB0LmNsb3NlKCkKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKSAgIyBhbGxvdyB0cmFuc3BvcnQgdG8gY2xvc2UKKworICAgICAgICBzb2NrLmZhbWlseSA9IHNvY2tldC5BRl9JTkVUNgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKGFzeW5jaW8uUHJvdG9jb2wsICc6OjInLCA4MCkKKyAgICAgICAgdCwgcCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jay5jb25uZWN0LmFzc2VydF9jYWxsZWRfd2l0aCgoJzo6MicsIDgwKSkKKyAgICAgICAgICAgIG1fc29ja2V0LnNvY2tldC5hc3NlcnRfY2FsbGVkX3dpdGgoZmFtaWx5PW1fc29ja2V0LkFGX0lORVQ2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bz1tX3NvY2tldC5JUFBST1RPX1RDUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1tX3NvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHQuY2xvc2UoKQorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIGFsbG93IHRyYW5zcG9ydCB0byBjbG9zZQorCisgICAgQHBhdGNoX3NvY2tldAorICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2lwX2FkZHIoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBzZWxmLl90ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX2lwX2FkZHIobV9zb2NrZXQsIFRydWUpCisKKyAgICBAcGF0Y2hfc29ja2V0CisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbm9faW5ldF9wdG9uKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgc2VsZi5fdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9pcF9hZGRyKG1fc29ja2V0LCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX25vX2xvY2FsX2FkZHIoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oaG9zdCwgKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgaWYgaG9zdCA9PSAnZXhhbXBsZS5jb20nOgorICAgICAgICAgICAgICAgIHJldHVybiBbKDIsIDEsIDYsICcnLCAoJzEwNy42LjEwNi44MicsIDgwKSksCisgICAgICAgICAgICAgICAgICAgICAgICAoMiwgMSwgNiwgJycsICgnMTA3LjYuMTA2LjgyJywgODApKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gZ2V0YWRkcmluZm9fdGFzaworCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBNeVByb3RvLCAnZXhhbXBsZS5jb20nLCA4MCwgZmFtaWx5PXNvY2tldC5BRl9JTkVULAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oTm9uZSwgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3NzbF9zZXJ2ZXJfaG9zdG5hbWVfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvID0gbW9jay5Nb2NrKCkKKworICAgICAgICBkZWYgbW9ja19nZXRhZGRyaW5mbygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIGYuc2V0X3Jlc3VsdChbKHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1RDUCwgJycsICgnMS4yLjMuNCcsIDgwKSldKQorICAgICAgICAgICAgcmV0dXJuIGYKKworICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8uc2lkZV9lZmZlY3QgPSBtb2NrX2dldGFkZHJpbmZvCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3QgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0LnJldHVybl92YWx1ZSA9ICgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0ID0gbW9jay5Nb2NrKCkKKworICAgICAgICBjbGFzcyBfU2VsZWN0b3JUcmFuc3BvcnRNb2NrOgorICAgICAgICAgICAgX3NvY2sgPSBOb25lCisKKyAgICAgICAgICAgIGRlZiBnZXRfZXh0cmFfaW5mbyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2NrLk1vY2soKQorCisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fc29jay5jbG9zZSgpCisKKyAgICAgICAgZGVmIG1vY2tfbWFrZV9zc2xfdHJhbnNwb3J0KHNvY2ssIHByb3RvY29sLCBzc2xjb250ZXh0LCB3YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmt3ZHMpOgorICAgICAgICAgICAgd2FpdGVyLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclRyYW5zcG9ydE1vY2soKQorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrID0gc29jaworICAgICAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LnNpZGVfZWZmZWN0ID0gbW9ja19tYWtlX3NzbF90cmFuc3BvcnQKKyAgICAgICAgQU5ZID0gbW9jay5BTlkKKyAgICAgICAgIyBGaXJzdCB0cnkgdGhlIGRlZmF1bHQgc2VydmVyX2hvc3RuYW1lLgorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5yZXNldF9tb2NrKCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLCBzc2w9VHJ1ZSkKKyAgICAgICAgdHJhbnNwb3J0LCBfID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBBTlksIEFOWSwgQU5ZLCBBTlksCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncHl0aG9uLm9yZycpCisgICAgICAgICMgTmV4dCB0cnkgYW4gZXhwbGljaXQgc2VydmVyX2hvc3RuYW1lLgorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5yZXNldF9tb2NrKCkKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLCBzc2w9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J3BlcmwuY29tJykKKyAgICAgICAgdHJhbnNwb3J0LCBfID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AuX21ha2Vfc3NsX3RyYW5zcG9ydC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBBTlksIEFOWSwgQU5ZLCBBTlksCisgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncGVybC5jb20nKQorICAgICAgICAjIEZpbmFsbHkgdHJ5IGFuIGV4cGxpY2l0IGVtcHR5IHNlcnZlcl9ob3N0bmFtZS4KKyAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQucmVzZXRfbW9jaygpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgJ3B5dGhvbi5vcmcnLCA4MCwgc3NsPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPScnKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0LmFzc2VydF9jYWxsZWRfd2l0aChBTlksIEFOWSwgQU5ZLCBBTlksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX25vX3NzbF9zZXJ2ZXJfaG9zdG5hbWVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIFdoZW4gbm90IHVzaW5nIHNzbCwgc2VydmVyX2hvc3RuYW1lIG11c3QgYmUgTm9uZS4KKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCAncHl0aG9uLm9yZycsIDgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ncHl0aG9uLm9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9zc2xfc2VydmVyX2hvc3RuYW1lX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBXaGVuIHVzaW5nIHNzbCwgc2VydmVyX2hvc3RuYW1lIG1heSBiZSBOb25lIGlmIGhvc3QgaXMgbm9uLWVtcHR5LgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sICcnLCA4MCwgc3NsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgTm9uZSwgODAsIHNzbD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oTXlQcm90bywgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9VHJ1ZSwgc29jaz1zb2NrKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfZW1wdHlfaG9zdChzZWxmKToKKyAgICAgICAgIyBpZiBob3N0IGlzIGVtcHR5IHN0cmluZyB1c2UgTm9uZSBpbnN0ZWFkCisgICAgICAgIGhvc3QgPSBvYmplY3QoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgbm9ubG9jYWwgaG9zdAorICAgICAgICAgICAgaG9zdCA9IGFyZ3NbMF0KKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKworICAgICAgICBkZWYgZ2V0YWRkcmluZm9fdGFzaygqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlRhc2soZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3dkcyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvX3Rhc2sKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJycsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaG9zdCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfaG9zdF9wb3J0X3NvY2soc2VsZik6CisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKAorICAgICAgICAgICAgTXlQcm90bywgJzAuMC4wLjAnLCAwLCBzb2NrPW9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX25vX2hvc3RfcG9ydF9zb2NrKHNlbGYpOgorICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX25vX2dldGFkZHJpbmZvKHNlbGYpOgorICAgICAgICBnZXRhZGRyaW5mbyA9IHNlbGYubG9vcC5nZXRhZGRyaW5mbyA9IG1vY2suTW9jaygpCisgICAgICAgIGdldGFkZHJpbmZvLnJldHVybl92YWx1ZSA9IFtdCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZikKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX25vc29yZXVzZXBvcnQoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IHNvY2tldC5nZXRhZGRyaW5mbworICAgICAgICBkZWwgbV9zb2NrZXQuU09fUkVVU0VQT1JUCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcigKKyAgICAgICAgICAgIE15UHJvdG8sICcwLjAuMC4wJywgMCwgcmV1c2VfcG9ydD1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGYpCisKKyAgICBAcGF0Y2hfc29ja2V0CisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9jYW50X2JpbmQoc2VsZiwgbV9zb2NrZXQpOgorCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIHN0cmVycm9yID0gJ2Vycm9yJworCisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvLnJldHVybl92YWx1ZSA9IFsKKyAgICAgICAgICAgICgyLCAxLCA2LCAnJywgKCcxMjcuMC4wLjEnLCAxMDEwMCkpXQorICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mby5faXNfY29yb3V0aW5lID0gRmFsc2UKKyAgICAgICAgbV9zb2NrID0gbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IG1vY2suTW9jaygpCisgICAgICAgIG1fc29jay5iaW5kLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NvY2suY2xvc2UuY2FsbGVkKQorCisgICAgQHBhdGNoX3NvY2tldAorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9ub19hZGRyaW5mbyhzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvLnJldHVybl92YWx1ZSA9IFtdCisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvLl9pc19jb3JvdXRpbmUgPSBGYWxzZQorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBsb2NhbF9hZGRyPSgnbG9jYWxob3N0JywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9hZGRyX2Vycm9yKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0nbG9jYWxob3N0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCdsb2NhbGhvc3QnLCAxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBBc3NlcnRpb25FcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9jb25uZWN0X2VycihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wsIHJlbW90ZV9hZGRyPSgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgT1NFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc29ja2V0X2VycihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LmdldGFkZHJpbmZvID0gc29ja2V0LmdldGFkZHJpbmZvCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGFzeW5jaW8uRGF0YWdyYW1Qcm90b2NvbCwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE9TRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wsIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3VwcG9ydC5JUFY2X0VOQUJMRUQsICdJUHY2IG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZCcpCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X25vX21hdGNoaW5nX2ZhbWlseShzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wsCisgICAgICAgICAgICByZW1vdGVfYWRkcj0oJzEyNy4wLjAuMScsIDApLCBsb2NhbF9hZGRyPSgnOjoxJywgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybykKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc2V0YmxrX2VycihzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuc2V0YmxvY2tpbmcuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wsIGZhbWlseT1zb2NrZXQuQUZfSU5FVCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9ub2FkZHJfbm9mYW1pbHkoc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgYXN5bmNpby5EYXRhZ3JhbVByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb3JvKQorCisgICAgQHBhdGNoX3NvY2tldAorICAgIGRlZiB0ZXN0X2NyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludF9jYW50X2JpbmQoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbV9zb2NrZXQuZ2V0YWRkcmluZm8gPSBzb2NrZXQuZ2V0YWRkcmluZm8KKyAgICAgICAgbV9zb2NrID0gbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IG1vY2suTW9jaygpCisgICAgICAgIG1fc29jay5iaW5kLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSwgZmFtaWx5PXNvY2tldC5BRl9JTkVUKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFcnIsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc29jayhzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBzb2NrLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIGxhbWJkYTogTXlEYXRhZ3JhbVByb3RvKGNyZWF0ZV9mdXR1cmU9VHJ1ZSwgbG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgc29jaz1zb2NrKQorICAgICAgICB0cmFuc3BvcnQsIHByb3RvY29sID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG9jb2wuZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG9jb2wuc3RhdGUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc29ja19zb2Nrb3B0cyhzZWxmKToKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgbG9jYWxfYWRkcj0oJzEyNy4wLjAuMScsIDApLCBzb2NrPW9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgcmVtb3RlX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGZhbWlseT0xLCBzb2NrPW9iamVjdCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmdXQpCisKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIE15RGF0YWdyYW1Qcm90bywgcHJvdG89MSwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBNeURhdGFncmFtUHJvdG8sIGZsYWdzPTEsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCByZXVzZV9hZGRyZXNzPVRydWUsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCByZXVzZV9wb3J0PVRydWUsIHNvY2s9b2JqZWN0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGZ1dCkKKworICAgICAgICBmdXQgPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgTXlEYXRhZ3JhbVByb3RvLCBhbGxvd19icm9hZGNhc3Q9VHJ1ZSwgc29jaz1vYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgZnV0KQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X3NvY2tvcHRzKHNlbGYpOgorICAgICAgICAjIFNvY2tldCBvcHRpb25zIHNob3VsZCBub3QgYmUgYXBwbGllZCB1bmxlc3MgYXNrZWQgZm9yLgorICAgICAgICAjIFNPX1JFVVNFQUREUiBkZWZhdWx0cyB0byBvbiBmb3IgVU5JWC4KKyAgICAgICAgIyBTT19SRVVTRVBPUlQgaXMgbm90IGF2YWlsYWJsZSBvbiBhbGwgcGxhdGZvcm1zLgorCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgbGFtYmRhOiBNeURhdGFncmFtUHJvdG8oY3JlYXRlX2Z1dHVyZT1UcnVlLCBsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBsb2NhbF9hZGRyPSgnMTI3LjAuMC4xJywgMCkpCisgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisgICAgICAgIHNvY2sgPSB0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tldCcpCisKKyAgICAgICAgcmV1c2VfYWRkcmVzc19kZWZhdWx0X29uID0gKAorICAgICAgICAgICAgb3MubmFtZSA9PSAncG9zaXgnIGFuZCBzeXMucGxhdGZvcm0gIT0gJ2N5Z3dpbicpCisgICAgICAgIHJldXNlcG9ydF9zdXBwb3J0ZWQgPSBoYXNhdHRyKHNvY2tldCwgJ1NPX1JFVVNFUE9SVCcpCisKKyAgICAgICAgaWYgcmV1c2VfYWRkcmVzc19kZWZhdWx0X29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgIHNvY2suZ2V0c29ja29wdCgKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgICAgICAgICBzb2NrLmdldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSKSkKKyAgICAgICAgaWYgcmV1c2Vwb3J0X3N1cHBvcnRlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICAgICAgc29jay5nZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFUE9SVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzb2NrLmdldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19CUk9BRENBU1QpKQorCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG9jb2wuZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG9jb2wuc3RhdGUpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhjcmVhdGVfZnV0dXJlPVRydWUsIGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSwKKyAgICAgICAgICAgIHJldXNlX2FkZHJlc3M9VHJ1ZSwKKyAgICAgICAgICAgIHJldXNlX3BvcnQ9cmV1c2Vwb3J0X3N1cHBvcnRlZCwKKyAgICAgICAgICAgIGFsbG93X2Jyb2FkY2FzdD1UcnVlKQorICAgICAgICB0cmFuc3BvcnQsIHByb3RvY29sID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICBzb2NrID0gdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrZXQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNvY2suZ2V0c29ja29wdCgKKyAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFQUREUikpCisgICAgICAgIGlmIHJldXNlcG9ydF9zdXBwb3J0ZWQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgc29jay5nZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX1JFVVNFUE9SVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNvY2suZ2V0c29ja29wdCgKKyAgICAgICAgICAgICAgICBzb2NrZXQuU09MX1NPQ0tFVCwgc29ja2V0LlNPX0JST0FEQ0FTVCkpCisKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90b2NvbC5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90b2NvbC5zdGF0ZSkKKworICAgIEBwYXRjaF9zb2NrZXQKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfbm9zb3JldXNlcG9ydChzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIGRlbCBtX3NvY2tldC5TT19SRVVTRVBPUlQKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IG1vY2suTW9jaygpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBsb2NhbF9hZGRyPSgnMTI3LjAuMC4xJywgMCksCisgICAgICAgICAgICByZXVzZV9hZGRyZXNzPUZhbHNlLAorICAgICAgICAgICAgcmV1c2VfcG9ydD1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisKKyAgICBAcGF0Y2hfc29ja2V0CisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50X2lwX2FkZHIoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBkZWYgZ2V0YWRkcmluZm8oKmFyZ3MsICoqa3cpOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdzaG91bGQgbm90IGhhdmUgY2FsbGVkIGdldGFkZHJpbmZvJykKKworICAgICAgICBtX3NvY2tldC5nZXRhZGRyaW5mbyA9IGdldGFkZHJpbmZvCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuYmluZCA9IGJpbmQgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLl9pc19jb3JvdXRpbmUgPSBGYWxzZQorCisgICAgICAgIHJldXNlcG9ydF9zdXBwb3J0ZWQgPSBoYXNhdHRyKHNvY2tldCwgJ1NPX1JFVVNFUE9SVCcpCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KAorICAgICAgICAgICAgbGFtYmRhOiBNeURhdGFncmFtUHJvdG8obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgbG9jYWxfYWRkcj0oJzEuMi4zLjQnLCAwKSwKKyAgICAgICAgICAgIHJldXNlX2FkZHJlc3M9RmFsc2UsCisgICAgICAgICAgICByZXVzZV9wb3J0PXJldXNlcG9ydF9zdXBwb3J0ZWQpCisKKyAgICAgICAgdCwgcCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYmluZC5hc3NlcnRfY2FsbGVkX3dpdGgoKCcxLjIuMy40JywgMCkpCisgICAgICAgICAgICBtX3NvY2tldC5zb2NrZXQuYXNzZXJ0X2NhbGxlZF93aXRoKGZhbWlseT1tX3NvY2tldC5BRl9JTkVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm90bz1tX3NvY2tldC5JUFBST1RPX1VEUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1tX3NvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgdC5jbG9zZSgpCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgYWxsb3cgdHJhbnNwb3J0IHRvIGNsb3NlCisKKyAgICBkZWYgdGVzdF9hY2NlcHRfY29ubmVjdGlvbl9yZXRyeShzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suYWNjZXB0LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKworICAgICAgICBzZWxmLmxvb3AuX2FjY2VwdF9jb25uZWN0aW9uKE15UHJvdG8sIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FjY2VwdF9jb25uZWN0aW9uX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoZXJybm8uRU1GSUxFLCAnVG9vIG1hbnkgb3BlbiBmaWxlcycpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfbGF0ZXIgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fYWNjZXB0X2Nvbm5lY3Rpb24oTXlQcm90bywgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKDEwKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoY29uc3RhbnRzLkFDQ0VQVF9SRVRSWV9ERUxBWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2VsZi5sb29wLl9zdGFydF9zZXJ2aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2NrLkFOWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15UHJvdG8sIHNvY2ssIE5vbmUsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWxsX2Nvcm91dGluZShzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzaW1wbGVfY29yb3V0aW5lKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY29yb19mdW5jID0gc2ltcGxlX2Nvcm91dGluZQorICAgICAgICBjb3JvX29iaiA9IGNvcm9fZnVuYygpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjb3JvX29iai5jbG9zZSkKKyAgICAgICAgZm9yIGZ1bmMgaW4gKGNvcm9fZnVuYywgY29yb19vYmopOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oZnVuYykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoZnVuYykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcig2MCwgZnVuYykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9hdChzZWxmLmxvb3AudGltZSgpICsgNjAsIGZ1bmMpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBmdW5jKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9sb2dfc2xvd19jYWxsYmFja3Moc2VsZiwgbV9sb2dnZXIpOgorICAgICAgICBkZWYgc3RvcF9sb29wX2NiKGxvb3ApOgorICAgICAgICAgICAgbG9vcC5zdG9wKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHN0b3BfbG9vcF9jb3JvKGxvb3ApOgorICAgICAgICAgICAgeWllbGQgZnJvbSAoKQorICAgICAgICAgICAgbG9vcC5zdG9wKCkKKworICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorICAgICAgICBzZWxmLmxvb3Auc2xvd19jYWxsYmFja19kdXJhdGlvbiA9IDAuMAorCisgICAgICAgICMgc2xvdyBjYWxsYmFjaworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHN0b3BfbG9vcF9jYiwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBmbXQsICphcmdzID0gbV9sb2dnZXIud2FybmluZy5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChmbXQgJSB0dXBsZShhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiXkV4ZWN1dGluZyA8SGFuZGxlLipzdG9wX2xvb3BfY2IuKj4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ0b29rIC4qIHNlY29uZHMkIikKKworICAgICAgICAjIHNsb3cgdGFzaworICAgICAgICBhc3luY2lvLmVuc3VyZV9mdXR1cmUoc3RvcF9sb29wX2Nvcm8oc2VsZi5sb29wKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIGZtdCwgKmFyZ3MgPSBtX2xvZ2dlci53YXJuaW5nLmNhbGxfYXJnc1swXQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGZtdCAlIHR1cGxlKGFyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJeRXhlY3V0aW5nIDxUYXNrLipzdG9wX2xvb3BfY29yby4qPiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInRvb2sgLiogc2Vjb25kcyQiKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9ldmVudHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyYjg2ZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2V2ZW50cy5weQpAQCAtMCwwICsxLDI1MTcgQEAKKyIiIlRlc3RzIGZvciBldmVudHMucHkuIiIiCisKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBnYworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHJlCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc29ja2V0Cit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgdGhyZWFkaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IGVycm5vCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2ltcG9ydCB3ZWFrcmVmCisKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgcHJvYWN0b3JfZXZlbnRzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHNlbGVjdG9yX2V2ZW50cworZnJvbSBhc3luY2lvIGltcG9ydCBzc2xwcm90bworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCit0cnk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAorCisKK2RlZiBkYXRhX2ZpbGUoZmlsZW5hbWUpOgorICAgIGlmIGhhc2F0dHIoc3VwcG9ydCwgJ1RFU1RfSE9NRV9ESVInKToKKyAgICAgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNUX0hPTUVfRElSLCBmaWxlbmFtZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZnVsbG5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGZ1bGxuYW1lCisgICAgZnVsbG5hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgZmlsZW5hbWUpCisgICAgaWYgb3MucGF0aC5pc2ZpbGUoZnVsbG5hbWUpOgorICAgICAgICByZXR1cm4gZnVsbG5hbWUKKyAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihmaWxlbmFtZSkKKworCitkZWYgb3N4X3RpZ2VyKCk6CisgICAgIiIiUmV0dXJuIFRydWUgaWYgdGhlIHBsYXRmb3JtIGlzIE1hYyBPUyAxMC40IG9yIG9sZGVyLiIiIgorICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJzoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgdmVyc2lvbiA9IHBsYXRmb3JtLm1hY192ZXIoKVswXQorICAgIHZlcnNpb24gPSB0dXBsZShtYXAoaW50LCB2ZXJzaW9uLnNwbGl0KCcuJykpKQorICAgIHJldHVybiB2ZXJzaW9uIDwgKDEwLCA1KQorCisKK09OTFlDRVJUID0gZGF0YV9maWxlKCdzc2xfY2VydC5wZW0nKQorT05MWUtFWSA9IGRhdGFfZmlsZSgnc3NsX2tleS5wZW0nKQorU0lHTkVEX0NFUlRGSUxFID0gZGF0YV9maWxlKCdrZXljZXJ0My5wZW0nKQorU0lHTklOR19DQSA9IGRhdGFfZmlsZSgncHljYWNlcnQucGVtJykKK1BFRVJDRVJUID0geydzZXJpYWxOdW1iZXInOiAnQjA5MjY0QjFGMkRBMjFEMScsCisgICAgICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICAgICAnc3ViamVjdCc6ICgoKCdjb3VudHJ5TmFtZScsICdYWScpLCksCisgICAgICAgICAgICAgICAgICAgICgoJ2xvY2FsaXR5TmFtZScsICdDYXN0bGUgQW50aHJheCcpLCksCisgICAgICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nKSwpLAorICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ2xvY2FsaG9zdCcpLCkpLAorICAgICAgICAgICAgJ2lzc3Vlcic6ICgoKCdjb3VudHJ5TmFtZScsICdYWScpLCksCisgICAgICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gQ0EnKSwpLAorICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ291ci1jYS1zZXJ2ZXInKSwpKSwKKyAgICAgICAgICAgICdub3RBZnRlcic6ICdOb3YgMTMgMTk6NDc6MDcgMjAyMiBHTVQnLAorICAgICAgICAgICAgJ25vdEJlZm9yZSc6ICdKYW4gIDQgMTk6NDc6MDcgMjAxMyBHTVQnfQorCisKK2NsYXNzIE15QmFzZVByb3RvKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgIGNvbm5lY3RlZCA9IE5vbmUKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gTm9uZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0lOSVRJQUwnCisgICAgICAgIHNlbGYubmJ5dGVzID0gMAorICAgICAgICBpZiBsb29wIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5jb25uZWN0ZWQgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmRvbmUgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgaWYgc2VsZi5jb25uZWN0ZWQ6CisgICAgICAgICAgICBzZWxmLmNvbm5lY3RlZC5zZXRfcmVzdWx0KE5vbmUpCisKKyAgICBkZWYgZGF0YV9yZWNlaXZlZChzZWxmLCBkYXRhKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0NPTk5FQ1RFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZW9mX3JlY2VpdmVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0VPRicKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgaW4gKCdDT05ORUNURUQnLCAnRU9GJyksIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdDTE9TRUQnCisgICAgICAgIGlmIHNlbGYuZG9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZS5zZXRfcmVzdWx0KE5vbmUpCisKKworY2xhc3MgTXlQcm90byhNeUJhc2VQcm90byk6CisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcbkhvc3Q6IGV4YW1wbGUuY29tXHJcblxyXG4nKQorCisKK2NsYXNzIE15RGF0YWdyYW1Qcm90byhhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTElaRUQnCisKKyAgICBkZWYgZGF0YWdyYW1fcmVjZWl2ZWQoc2VsZiwgZGF0YSwgYWRkcik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMSVpFRCcsIHNlbGYuc3RhdGUKKyAgICAgICAgc2VsZi5uYnl0ZXMgKz0gbGVuKGRhdGEpCisKKyAgICBkZWYgZXJyb3JfcmVjZWl2ZWQoc2VsZiwgZXhjKToKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUxJWkVEJywgc2VsZi5zdGF0ZQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnSU5JVElBTElaRUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ0xPU0VEJworICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15UmVhZFBpcGVQcm90byhhc3luY2lvLlByb3RvY29sKToKKyAgICBkb25lID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3A9Tm9uZSk6CisgICAgICAgIHNlbGYuc3RhdGUgPSBbJ0lOSVRJQUwnXQorICAgICAgICBzZWxmLm5ieXRlcyA9IDAKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIGlmIGxvb3AgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUgPSBhc3luY2lvLkZ1dHVyZShsb29wPWxvb3ApCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdDT05ORUNURUQnKQorCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLm5ieXRlcyArPSBsZW4oZGF0YSkKKworICAgIGRlZiBlb2ZfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09IFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgnRU9GJykKKworICAgIGRlZiBjb25uZWN0aW9uX2xvc3Qoc2VsZiwgZXhjKToKKyAgICAgICAgaWYgJ0VPRicgbm90IGluIHNlbGYuc3RhdGU6CisgICAgICAgICAgICBzZWxmLnN0YXRlLmFwcGVuZCgnRU9GJykgICMgSXQgaXMgb2theSBpZiBFT0YgaXMgbWlzc2VkLgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJywgJ0VPRiddLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUuYXBwZW5kKCdDTE9TRUQnKQorICAgICAgICBpZiBzZWxmLmRvbmU6CisgICAgICAgICAgICBzZWxmLmRvbmUuc2V0X3Jlc3VsdChOb25lKQorCisKK2NsYXNzIE15V3JpdGVQaXBlUHJvdG8oYXN5bmNpby5CYXNlUHJvdG9jb2wpOgorICAgIGRvbmUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcD1Ob25lKToKKyAgICAgICAgc2VsZi5zdGF0ZSA9ICdJTklUSUFMJworICAgICAgICBzZWxmLnRyYW5zcG9ydCA9IE5vbmUKKyAgICAgICAgaWYgbG9vcCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuZG9uZSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKworICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSB0cmFuc3BvcnQKKyAgICAgICAgYXNzZXJ0IHNlbGYuc3RhdGUgPT0gJ0lOSVRJQUwnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuc3RhdGUgPSAnQ09OTkVDVEVEJworCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgaWYgc2VsZi5kb25lOgorICAgICAgICAgICAgc2VsZi5kb25lLnNldF9yZXN1bHQoTm9uZSkKKworCitjbGFzcyBNeVN1YnByb2Nlc3NQcm90b2NvbChhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCk6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCk6CisgICAgICAgIHNlbGYuc3RhdGUgPSAnSU5JVElBTCcKKyAgICAgICAgc2VsZi50cmFuc3BvcnQgPSBOb25lCisgICAgICAgIHNlbGYuY29ubmVjdGVkID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmNvbXBsZXRlZCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5kaXNjb25uZWN0cyA9IHtmZDogYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKSBmb3IgZmQgaW4gcmFuZ2UoMyl9CisgICAgICAgIHNlbGYuZGF0YSA9IHsxOiBiJycsIDI6IGInJ30KKyAgICAgICAgc2VsZi5yZXR1cm5jb2RlID0gTm9uZQorICAgICAgICBzZWxmLmdvdF9kYXRhID0gezE6IGFzeW5jaW8uRXZlbnQobG9vcD1sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAyOiBhc3luY2lvLkV2ZW50KGxvb3A9bG9vcCl9CisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHRyYW5zcG9ydCk6CisgICAgICAgIHNlbGYudHJhbnNwb3J0ID0gdHJhbnNwb3J0CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdJTklUSUFMJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NPTk5FQ1RFRCcKKyAgICAgICAgc2VsZi5jb25uZWN0ZWQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIGNvbm5lY3Rpb25fbG9zdChzZWxmLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnN0YXRlID0gJ0NMT1NFRCcKKyAgICAgICAgc2VsZi5jb21wbGV0ZWQuc2V0X3Jlc3VsdChOb25lKQorCisgICAgZGVmIHBpcGVfZGF0YV9yZWNlaXZlZChzZWxmLCBmZCwgZGF0YSk6CisgICAgICAgIGFzc2VydCBzZWxmLnN0YXRlID09ICdDT05ORUNURUQnLCBzZWxmLnN0YXRlCisgICAgICAgIHNlbGYuZGF0YVtmZF0gKz0gZGF0YQorICAgICAgICBzZWxmLmdvdF9kYXRhW2ZkXS5zZXQoKQorCisgICAgZGVmIHBpcGVfY29ubmVjdGlvbl9sb3N0KHNlbGYsIGZkLCBleGMpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBpZiBleGM6CisgICAgICAgICAgICBzZWxmLmRpc2Nvbm5lY3RzW2ZkXS5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZGlzY29ubmVjdHNbZmRdLnNldF9yZXN1bHQoZXhjKQorCisgICAgZGVmIHByb2Nlc3NfZXhpdGVkKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5zdGF0ZSA9PSAnQ09OTkVDVEVEJywgc2VsZi5zdGF0ZQorICAgICAgICBzZWxmLnJldHVybmNvZGUgPSBzZWxmLnRyYW5zcG9ydC5nZXRfcmV0dXJuY29kZSgpCisKKworY2xhc3MgRXZlbnRMb29wVGVzdHNNaXhpbjoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYuY3JlYXRlX2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBqdXN0IGluIGNhc2UgaWYgd2UgaGF2ZSB0cmFuc3BvcnQgY2xvc2UgY2FsbGJhY2tzCisgICAgICAgIGlmIG5vdCBzZWxmLmxvb3AuaXNfY2xvc2VkKCk6CisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfbmVzdGluZyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvMSgpOgorICAgICAgICAgICAgeWllbGQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8yKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmlzX3J1bm5pbmcoKSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybzEoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgY29ybzIoKSkKKworICAgICMgTm90ZTogYmVjYXVzZSBvZiB0aGUgZGVmYXVsdCBXaW5kb3dzIHRpbWluZyBncmFudWxhcml0eSBvZgorICAgICMgMTUuNiBtc2VjLCB3ZSB1c2UgZmFpcmx5IGxvbmcgc2xlZXAgdGltZXMgaGVyZSAofjEwMCBtc2VjKS4KKworICAgIGRlZiB0ZXN0X3J1bl91bnRpbF9jb21wbGV0ZShzZWxmKToKKyAgICAgICAgdDAgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5zbGVlcCgwLjEsIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgdDEgPSBzZWxmLmxvb3AudGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjA4IDw9IHQxLXQwIDw9IDAuOCwgdDEtdDApCisKKyAgICBkZWYgdGVzdF9ydW5fdW50aWxfY29tcGxldGVfc3RvcHBlZChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2sgPSBjYigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdGFzaykKKworICAgIGRlZiB0ZXN0X2NhbGxfbGF0ZXIoc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGRlZiBjYWxsYmFjayhhcmcpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoYXJnKQorICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDAuMSwgY2FsbGJhY2ssICdoZWxsbyB3b3JsZCcpCisgICAgICAgIHQwID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB0MSA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLCBbJ2hlbGxvIHdvcmxkJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjA4IDw9IHQxLXQwIDw9IDAuOCwgdDEtdDApCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb24oc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGRlZiBjYWxsYmFjayhhcmcxLCBhcmcyKToKKyAgICAgICAgICAgIHJlc3VsdHMuYXBwZW5kKChhcmcxLCBhcmcyKSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCAnaGVsbG8nLCAnd29ybGQnKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsoJ2hlbGxvJywgJ3dvcmxkJyldKQorCisgICAgZGVmIHRlc3RfY2FsbF9zb29uX3RocmVhZHNhZmUoc2VsZik6CisgICAgICAgIHJlc3VsdHMgPSBbXQorICAgICAgICBsb2NrID0gdGhyZWFkaW5nLkxvY2soKQorCisgICAgICAgIGRlZiBjYWxsYmFjayhhcmcpOgorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoYXJnKQorICAgICAgICAgICAgaWYgbGVuKHJlc3VsdHMpID49IDI6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnN0b3AoKQorCisgICAgICAgIGRlZiBydW5faW5fdGhyZWFkKCk6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uX3RocmVhZHNhZmUoY2FsbGJhY2ssICdoZWxsbycpCisgICAgICAgICAgICBsb2NrLnJlbGVhc2UoKQorCisgICAgICAgIGxvY2suYWNxdWlyZSgpCisgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW5faW5fdGhyZWFkKQorICAgICAgICB0LnN0YXJ0KCkKKworICAgICAgICB3aXRoIGxvY2s6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCAnd29ybGQnKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgdC5qb2luKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLCBbJ2hlbGxvJywgJ3dvcmxkJ10pCisKKyAgICBkZWYgdGVzdF9jYWxsX3Nvb25fdGhyZWFkc2FmZV9zYW1lX3RocmVhZChzZWxmKToKKyAgICAgICAgcmVzdWx0cyA9IFtdCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKGFyZyk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZChhcmcpCisgICAgICAgICAgICBpZiBsZW4ocmVzdWx0cykgPj0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKGNhbGxiYWNrLCAnaGVsbG8nKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGNhbGxiYWNrLCAnd29ybGQnKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdHMsIFsnaGVsbG8nLCAnd29ybGQnXSkKKworICAgIGRlZiB0ZXN0X3J1bl9pbl9leGVjdXRvcihzZWxmKToKKyAgICAgICAgZGVmIHJ1bihhcmcpOgorICAgICAgICAgICAgcmV0dXJuIChhcmcsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKyAgICAgICAgZjIgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIHJ1biwgJ3lvJykKKyAgICAgICAgcmVzLCB0aHJlYWRfaWQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ3lvJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0aHJlYWRfaWQsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKworICAgIGRlZiB0ZXN0X3JlYWRlcl9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHIuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGJ5dGVzX3JlYWQgPSBieXRlYXJyYXkoKQorCisgICAgICAgIGRlZiByZWFkZXIoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkYXRhID0gci5yZWN2KDEwMjQpCisgICAgICAgICAgICBleGNlcHQgQmxvY2tpbmdJT0Vycm9yOgorICAgICAgICAgICAgICAgICMgU3B1cmlvdXMgcmVhZGluZXNzIG5vdGlmaWNhdGlvbnMgYXJlIHBvc3NpYmxlCisgICAgICAgICAgICAgICAgIyBhdCBsZWFzdCBvbiBMaW51eCAtLSBzZWUgbWFuIHNlbGVjdC4KKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGlmIGRhdGE6CisgICAgICAgICAgICAgICAgYnl0ZXNfcmVhZC5leHRlbmQoZGF0YSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKHIuZmlsZW5vKCkpKQorICAgICAgICAgICAgICAgIHIuY2xvc2UoKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyKHIuZmlsZW5vKCksIHJlYWRlcikKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3LnNlbmQsIGInYWJjJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IGxlbihieXRlc19yZWFkKSA+PSAzKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHcuc2VuZCwgYidkZWYnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogbGVuKGJ5dGVzX3JlYWQpID49IDYpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24ody5jbG9zZSkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihzZWxmLmxvb3Auc3RvcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl9mb3JldmVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlc19yZWFkLCBiJ2FiY2RlZicpCisKKyAgICBkZWYgdGVzdF93cml0ZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgIHIsIHcgPSB0ZXN0X3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICB3LnNldGJsb2NraW5nKEZhbHNlKQorCisgICAgICAgIGRlZiB3cml0ZXIoZGF0YSk6CisgICAgICAgICAgICB3LnNlbmQoZGF0YSkKKyAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKworICAgICAgICBkYXRhID0gYid4JyAqIDEwMjQKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIody5maWxlbm8oKSwgd3JpdGVyLCBkYXRhKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcih3LmZpbGVubygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcih3LmZpbGVubygpKSkKKworICAgICAgICB3LmNsb3NlKCkKKyAgICAgICAgcmVhZCA9IHIucmVjdihsZW4oZGF0YSkgKiAyKQorICAgICAgICByLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkLCBkYXRhKQorCisgICAgZGVmIF9iYXNldGVzdF9zb2NrX2NsaWVudF9vcHMoc2VsZiwgaHR0cGQsIHNvY2spOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShzZWxmLmxvb3AsIHByb2FjdG9yX2V2ZW50cy5CYXNlUHJvYWN0b3JFdmVudExvb3ApOgorICAgICAgICAgICAgIyBpbiBkZWJ1ZyBtb2RlLCBzb2NrZXQgb3BlcmF0aW9ucyBtdXN0IGZhaWwKKyAgICAgICAgICAgICMgaWYgdGhlIHNvY2tldCBpcyBub3QgaW4gYmxvY2tpbmcgbW9kZQorICAgICAgICAgICAgc2VsZi5sb29wLnNldF9kZWJ1ZyhUcnVlKQorICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhUcnVlKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGh0dHBkLmFkZHJlc3MpKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19hY2NlcHQoc29jaykpCisKKyAgICAgICAgIyB0ZXN0IGluIG5vbi1ibG9ja2luZyBtb2RlCisgICAgICAgIHNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNvY2ssIGh0dHBkLmFkZHJlc3MpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzb2NrLCBiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKSkKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICBzZWxmLmxvb3Auc29ja19yZWN2KHNvY2ssIDEwMjQpKQorICAgICAgICAjIGNvbnN1bWUgZGF0YQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfcmVjdihzb2NrLCAxMDI0KSkKKyAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLnN0YXJ0c3dpdGgoYidIVFRQLzEuMCAyMDAgT0snKSkKKworICAgIGRlZiB0ZXN0X3NvY2tfY2xpZW50X29wcyhzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3Rfc29ja19jbGllbnRfb3BzKGh0dHBkLCBzb2NrKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X3VuaXhfc29ja19jbGllbnRfb3BzKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3RfdW5peF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3Rfc29ja19jbGllbnRfb3BzKGh0dHBkLCBzb2NrKQorCisgICAgZGVmIHRlc3Rfc29ja19jbGllbnRfZmFpbChzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSB3aWxsIGdldCBhbiB1bnVzZWQgcG9ydAorICAgICAgICBhZGRyZXNzID0gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICBzLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgIGFkZHJlc3MgPSBzLmdldHNvY2tuYW1lKCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhDb25uZWN0aW9uUmVmdXNlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKSkKKyAgICAgICAgc29jay5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgbGlzdGVuZXIgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgbGlzdGVuZXIuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGxpc3RlbmVyLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgbGlzdGVuZXIubGlzdGVuKDEpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdChsaXN0ZW5lci5nZXRzb2NrbmFtZSgpKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19hY2NlcHQobGlzdGVuZXIpCisgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29ubi5nZXR0aW1lb3V0KCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWRkciwgY2xpZW50LmdldHNvY2tuYW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50LmdldHBlZXJuYW1lKCksIGxpc3RlbmVyLmdldHNvY2tuYW1lKCkpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIGNvbm4uY2xvc2UoKQorICAgICAgICBsaXN0ZW5lci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNpZ25hbCwgJ1NJR0tJTEwnKSwgJ05vIFNJR0tJTEwnKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcihzZWxmKToKKyAgICAgICAgY2F1Z2h0ID0gMAorCisgICAgICAgIGRlZiBteV9oYW5kbGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBjYXVnaHQKKyAgICAgICAgICAgIGNhdWdodCArPSAxCisKKyAgICAgICAgIyBDaGVjayBlcnJvciBiZWhhdmlvciBmaXJzdC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsICdib29tJywgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIsICdib29tJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCBzaWduYWwuTlNJRysxLAorICAgICAgICAgICAgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCBzaWduYWwuTlNJRysxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIDAsIG15X2hhbmRsZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLCAtMSwgbXlfaGFuZGxlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsIHNpZ25hbC5TSUdLSUxMLAorICAgICAgICAgICAgbXlfaGFuZGxlcikKKyAgICAgICAgIyBSZW1vdmluZyBTSUdLSUxMIGRvZXNuJ3QgcmFpc2UsIHNpbmNlIHdlIGRvbid0IGNhbGwgc2lnbmFsKCkuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHS0lMTCkpCisgICAgICAgICMgTm93IHNldCBhIGhhbmRsZXIgYW5kIGhhbmRsZSBpdC4KKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5ULCBteV9oYW5kbGVyKQorCisgICAgICAgIG9zLmtpbGwob3MuZ2V0cGlkKCksIHNpZ25hbC5TSUdJTlQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiBjYXVnaHQpCisKKyAgICAgICAgIyBSZW1vdmluZyBpdCBzaG91bGQgcmVzdG9yZSB0aGUgZGVmYXVsdCBoYW5kbGVyLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5UKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWduYWwuZ2V0c2lnbmFsKHNpZ25hbC5TSUdJTlQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbC5kZWZhdWx0X2ludF9oYW5kbGVyKQorICAgICAgICAjIFJlbW92aW5nIGFnYWluIHJldHVybnMgRmFsc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSU5UKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAnU0lHQUxSTScpLCAnTm8gU0lHQUxSTScpCisgICAgZGVmIHRlc3Rfc2lnbmFsX2hhbmRsaW5nX3doaWxlX3NlbGVjdGluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHdpdGggYSBzaWduYWwgYWN0dWFsbHkgYXJyaXZpbmcgZHVyaW5nIGEgc2VsZWN0KCkgY2FsbC4KKyAgICAgICAgY2F1Z2h0ID0gMAorCisgICAgICAgIGRlZiBteV9oYW5kbGVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBjYXVnaHQKKyAgICAgICAgICAgIGNhdWdodCArPSAxCisgICAgICAgICAgICBzZWxmLmxvb3Auc3RvcCgpCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHQUxSTSwgbXlfaGFuZGxlcikKKworICAgICAgICBzaWduYWwuc2V0aXRpbWVyKHNpZ25hbC5JVElNRVJfUkVBTCwgMC4wMSwgMCkgICMgU2VuZCBTSUdBTFJNIG9uY2UuCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2F1Z2h0LCAxKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzaWduYWwsICdTSUdBTFJNJyksICdObyBTSUdBTFJNJykKKyAgICBkZWYgdGVzdF9zaWduYWxfaGFuZGxpbmdfYXJncyhzZWxmKToKKyAgICAgICAgc29tZV9hcmdzID0gKDQyLCkKKyAgICAgICAgY2F1Z2h0ID0gMAorCisgICAgICAgIGRlZiBteV9oYW5kbGVyKCphcmdzKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGNhdWdodAorICAgICAgICAgICAgY2F1Z2h0ICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgc29tZV9hcmdzKQorCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0FMUk0sIG15X2hhbmRsZXIsICpzb21lX2FyZ3MpCisKKyAgICAgICAgc2lnbmFsLnNldGl0aW1lcihzaWduYWwuSVRJTUVSX1JFQUwsIDAuMSwgMCkgICMgU2VuZCBTSUdBTFJNIG9uY2UuCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDAuNSwgc2VsZi5sb29wLnN0b3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fZm9yZXZlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2F1Z2h0LCAxKQorCisgICAgZGVmIF9iYXNldGVzdF9jcmVhdGVfY29ubmVjdGlvbihzZWxmLCBjb25uZWN0aW9uX2Z1dCwgY2hlY2tfc29ja25hbWU9VHJ1ZSk6CisgICAgICAgIHRyLCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdGlvbl9mdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0ciwgYXN5bmNpby5UcmFuc3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwciwgYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwci50cmFuc3BvcnQsIHRyKQorICAgICAgICBpZiBjaGVja19zb2NrbmFtZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwci5uYnl0ZXMsIDApCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjb25uX2Z1dCA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCAqaHR0cGQuYWRkcmVzcykKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uKGNvbm5fZnV0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIwNjgyOiBPbiBNYWMgT1MgWCBUaWdlciwgZ2V0c29ja25hbWUoKSByZXR1cm5zIGEKKyAgICAgICAgIyB6ZXJvLWxlbmd0aCBhZGRyZXNzIGZvciBVTklYIHNvY2tldC4KKyAgICAgICAgY2hlY2tfc29ja25hbWUgPSBub3Qgb3N4X3RpZ2VyKCkKKworICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3RfdW5peF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBNeVByb3RvKGxvb3A9c2VsZi5sb29wKSwgaHR0cGQuYWRkcmVzcykKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uKGNvbm5fZnV0LCBjaGVja19zb2NrbmFtZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9jb25uZWN0aW9uX3NvY2soc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIHNvY2sgPSBOb25lCisgICAgICAgICAgICBpbmZvcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgICAgICAqaHR0cGQuYWRkcmVzcywgdHlwZT1zb2NrZXQuU09DS19TVFJFQU0pKQorICAgICAgICAgICAgZm9yIGZhbWlseSwgdHlwZSwgcHJvdG8sIGNuYW1lLCBhZGRyZXNzIGluIGluZm9zOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5PWZhbWlseSwgdHlwZT10eXBlLCBwcm90bz1wcm90bykKKyAgICAgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zb2NrX2Nvbm5lY3Qoc29jaywgYWRkcmVzcykpCisgICAgICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAnQ2FuIG5vdCBjcmVhdGUgc29ja2V0LicKKworICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCBzb2NrPXNvY2spCisgICAgICAgICAgICB0ciwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIGFzeW5jaW8uVHJhbnNwb3J0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByLCBhc3luY2lvLlByb3RvY29sKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwci5kb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHByLm5ieXRlcywgMCkKKyAgICAgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiBjaGVja19zc2xfZXh0cmFfaW5mbyhzZWxmLCBjbGllbnQsIGNoZWNrX3NvY2tuYW1lPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJuYW1lPU5vbmUsIHBlZXJjZXJ0PXt9KToKKyAgICAgICAgaWYgY2hlY2tfc29ja25hbWU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjbGllbnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgIGlmIHBlZXJuYW1lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZWVybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LmdldF9leHRyYV9pbmZvKCdwZWVybmFtZScpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoY2xpZW50LmdldF9leHRyYV9pbmZvKCdwZWVybmFtZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlZXJjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5nZXRfZXh0cmFfaW5mbygncGVlcmNlcnQnKSkKKworICAgICAgICAjIHRlc3QgU1NMIGNpcGhlcgorICAgICAgICBjaXBoZXIgPSBjbGllbnQuZ2V0X2V4dHJhX2luZm8oJ2NpcGhlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjaXBoZXIsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjaXBoZXIpLCAzLCBjaXBoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjaXBoZXJbMF0sIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNpcGhlclsxXSwgc3RyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2lwaGVyWzJdLCBpbnQpCisKKyAgICAgICAgIyB0ZXN0IFNTTCBvYmplY3QKKyAgICAgICAgc3Nsb2JqID0gY2xpZW50LmdldF9leHRyYV9pbmZvKCdzc2xfb2JqZWN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3Nsb2JqKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbG9iai5jb21wcmVzc2lvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5nZXRfZXh0cmFfaW5mbygnY29tcHJlc3Npb24nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2xvYmouY2lwaGVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LmdldF9leHRyYV9pbmZvKCdjaXBoZXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2xvYmouZ2V0cGVlcmNlcnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuZ2V0X2V4dHJhX2luZm8oJ3BlZXJjZXJ0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Nsb2JqLmNvbXByZXNzaW9uKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LmdldF9leHRyYV9pbmZvKCdjb21wcmVzc2lvbicpKQorCisgICAgZGVmIF9iYXNldGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZiwgY29ubmVjdGlvbl9mdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfc29ja25hbWU9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVybmFtZT1Ob25lKToKKyAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0aW9uX2Z1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyLCBhc3luY2lvLlRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByLCBhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3NzbCcgaW4gdHIuX19jbGFzc19fLl9fbmFtZV9fLmxvd2VyKCkpCisgICAgICAgIHNlbGYuY2hlY2tfc3NsX2V4dHJhX2luZm8odHIsIGNoZWNrX3NvY2tuYW1lLCBwZWVybmFtZSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwci5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIocHIubmJ5dGVzLCAwKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgX3Rlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKHNlbGYsIGh0dHBkLCBjcmVhdGVfY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX3NvY2tuYW1lPVRydWUsIHBlZXJuYW1lPU5vbmUpOgorICAgICAgICBjb25uX2Z1dCA9IGNyZWF0ZV9jb25uZWN0aW9uKHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCkpCisgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihjb25uX2Z1dCwgY2hlY2tfc29ja25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVybmFtZSkKKworICAgICAgICAjIHNzbC5QdXJwb3NlIHdhcyBpbnRyb2R1Y2VkIGluIFB5dGhvbiAzLjQKKyAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQdXJwb3NlJyk6CisgICAgICAgICAgICBkZWYgX2R1bW15X3NzbF9jcmVhdGVfY29udGV4dChwdXJwb3NlPXNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FmaWxlPU5vbmUsIGNhcGF0aD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FkYXRhPU5vbmUpOgorICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgIEEgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSByZXBsYWNlbWVudCB0aGF0IGRvZXNuJ3QgZW5hYmxlCisgICAgICAgICAgICAgICAgY2VydCB2YWxpZGF0aW9uLgorICAgICAgICAgICAgICAgICIiIgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHVycG9zZSwgc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKQorCisgICAgICAgICAgICAjIFdpdGggc3NsPVRydWUsIHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkgc2hvdWxkIGJlIGNhbGxlZAorICAgICAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZV9lZmZlY3Q9X2R1bW15X3NzbF9jcmVhdGVfY29udGV4dCkgYXMgbToKKyAgICAgICAgICAgICAgICBjb25uX2Z1dCA9IGNyZWF0ZV9jb25uZWN0aW9uKHNzbD1UcnVlKQorICAgICAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X2NyZWF0ZV9zc2xfY29ubmVjdGlvbihjb25uX2Z1dCwgY2hlY2tfc29ja25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlZXJuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5jYWxsX2NvdW50LCAxKQorCisgICAgICAgICMgV2l0aCB0aGUgcmVhbCBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpLCBjZXJ0aWZpY2F0ZQorICAgICAgICAjIHZhbGlkYXRpb24gd2lsbCBmYWlsCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gY3JlYXRlX2Nvbm5lY3Rpb24oc3NsPVRydWUpCisgICAgICAgICAgICAjIElnbm9yZSB0aGUgIlNTTCBoYW5kc2hha2UgZmFpbGVkIiBsb2cgaW4gZGVidWcgbW9kZQorICAgICAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKGNvbm5fZnV0LCBjaGVja19zb2NrbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcm5hbWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucmVhc29uLCAnQ0VSVElGSUNBVEVfVkVSSUZZX0ZBSUxFRCcpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKHVzZV9zc2w9VHJ1ZSkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjcmVhdGVfY29ubmVjdGlvbiA9IGZ1bmN0b29scy5wYXJ0aWFsKAorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzKQorICAgICAgICAgICAgc2VsZi5fdGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oaHR0cGQsIGNyZWF0ZV9jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcm5hbWU9aHR0cGQuYWRkcmVzcykKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5mb3JjZV9sZWdhY3lfc3NsX3N1cHBvcnQoKToKKyAgICAgICAgICAgIHNlbGYudGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLCAnTm8gVU5JWCBTb2NrZXRzJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc3NsX3VuaXhfY29ubmVjdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjA2ODI6IE9uIE1hYyBPUyBYIFRpZ2VyLCBnZXRzb2NrbmFtZSgpIHJldHVybnMgYQorICAgICAgICAjIHplcm8tbGVuZ3RoIGFkZHJlc3MgZm9yIFVOSVggc29ja2V0LgorICAgICAgICBjaGVja19zb2NrbmFtZSA9IG5vdCBvc3hfdGlnZXIoKQorCisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF91bml4X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgY3JlYXRlX2Nvbm5lY3Rpb24gPSBmdW5jdG9vbHMucGFydGlhbCgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLCBodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nMTI3LjAuMC4xJykKKworICAgICAgICAgICAgc2VsZi5fdGVzdF9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oaHR0cGQsIGNyZWF0ZV9jb25uZWN0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfc29ja25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVybmFtZT1odHRwZC5hZGRyZXNzKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X2NyZWF0ZV9zc2xfdW5peF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZm9yY2VfbGVnYWN5X3NzbF9zdXBwb3J0KCk6CisgICAgICAgICAgICBzZWxmLnRlc3RfY3JlYXRlX3NzbF91bml4X2Nvbm5lY3Rpb24oKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Nvbm5lY3Rpb25fbG9jYWxfYWRkcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGxhbWJkYTogTXlQcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgKmh0dHBkLmFkZHJlc3MsIGxvY2FsX2FkZHI9KGh0dHBkLmFkZHJlc3NbMF0sIHBvcnQpKQorICAgICAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBwci50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJylbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9ydCwgZXhwZWN0ZWQpCisgICAgICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29ubmVjdGlvbl9sb2NhbF9hZGRyX2luX3VzZShzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3NlcnZlcigpIGFzIGh0dHBkOgorICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBsYW1iZGE6IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLCBsb2NhbF9hZGRyPWh0dHBkLmFkZHJlc3MpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQUREUklOVVNFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdHIoaHR0cGQuYWRkcmVzcyksIGNtLmV4Y2VwdGlvbi5zdHJlcnJvcikKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLnNvY2tldCcpCisgICAgZGVmIGNyZWF0ZV9zZXJ2ZXJfbXVsdGlwbGVfaG9zdHMoc2VsZiwgZmFtaWx5LCBob3N0cywgbW9ja19zb2NrKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnZXRhZGRyaW5mbyhob3N0LCBwb3J0LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBpZiBmYW1pbHkgPT0gc29ja2V0LkFGX0lORVQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtbZmFtaWx5LCBzb2NrZXQuU09DS19TVFJFQU0sIDYsICcnLCAoaG9zdCwgcG9ydCldXQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gW1tmYW1pbHksIHNvY2tldC5TT0NLX1NUUkVBTSwgNiwgJycsIChob3N0LCBwb3J0LCAwLCAwKV1dCisKKyAgICAgICAgZGVmIGdldGFkZHJpbmZvX3Rhc2soKmFyZ3MsICoqa3dkcyk6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5UYXNrKGdldGFkZHJpbmZvKCphcmdzLCAqKmt3ZHMpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBpZiBmYW1pbHkgPT0gc29ja2V0LkFGX0lORVQ6CisgICAgICAgICAgICBtb2NrX3NvY2suc29ja2V0KCkuZ2V0c29ja2J5bmFtZS5zaWRlX2VmZmVjdCA9IFsoaG9zdCwgODApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaG9zdCBpbiBob3N0c10KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vY2tfc29jay5zb2NrZXQoKS5nZXRzb2NrYnluYW1lLnNpZGVfZWZmZWN0ID0gWyhob3N0LCA4MCwgMCwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBob3N0IGluIGhvc3RzXQorICAgICAgICBzZWxmLmxvb3AuZ2V0YWRkcmluZm8gPSBnZXRhZGRyaW5mb190YXNrCisgICAgICAgIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZyA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc3RvcF9zZXJ2aW5nID0gbW9jay5Nb2NrKCkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKGxhbWJkYTogTXlQcm90byhzZWxmLmxvb3ApLCBob3N0cywgODApCisgICAgICAgIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlcnZlci5jbG9zZSkKKyAgICAgICAgc2VydmVyX2hvc3RzID0gW3NvY2suZ2V0c29ja2J5bmFtZSgpWzBdIGZvciBzb2NrIGluIHNlcnZlci5zb2NrZXRzXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcnZlcl9ob3N0cywgaG9zdHMpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX211bHRpcGxlX2hvc3RzX2lwdjQoc2VsZik6CisgICAgICAgIHNlbGYuY3JlYXRlX3NlcnZlcl9tdWx0aXBsZV9ob3N0cyhzb2NrZXQuQUZfSU5FVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnMS4yLjMuNCcsICc1LjYuNy44J10pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX211bHRpcGxlX2hvc3RzX2lwdjYoc2VsZik6CisgICAgICAgIHNlbGYuY3JlYXRlX3NlcnZlcl9tdWx0aXBsZV9ob3N0cyhzb2NrZXQuQUZfSU5FVDYsIFsnOjoxJywgJzo6MiddKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcihzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKHNlbGYubG9vcCkKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKGxhbWJkYTogcHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXJ2ZXIuc29ja2V0cyksIDEpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9zdCwgJzAuMC4wLjAnKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCcxMjcuMC4wLjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmRhbGwoYid4eHgnKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEyNy4wLjAuMScsCisgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwZWVybmFtZScpWzBdKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgIyB0aGUgY2xpZW50IHNvY2tldCBtdXN0IGJlIGNsb3NlZCBhZnRlciB0byBhdm9pZCBFQ09OTlJFU0VUIHVwb24KKyAgICAgICAgIyByZWN2KCkvc2VuZCgpIG9uIHRoZSBzZXJ2aW5nIHNvY2tldAorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgICMgY2xvc2Ugc2VydmVyCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ1NPX1JFVVNFUE9SVCcpLCAnTm8gU09fUkVVU0VQT1JUJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3JldXNlX3BvcnQoc2VsZik6CisgICAgICAgIHByb3RvID0gTXlQcm90byhzZWxmLmxvb3ApCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcigKKyAgICAgICAgICAgIGxhbWJkYTogcHJvdG8sICcwLjAuMC4wJywgMCkKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXJ2ZXIuc29ja2V0cyksIDEpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKAorICAgICAgICAgICAgc29jay5nZXRzb2Nrb3B0KAorICAgICAgICAgICAgICAgIHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VQT1JUKSkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBwcm90byA9IE15UHJvdG8oc2VsZi5sb29wKQorICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCAnMC4wLjAuMCcsIDAsIHJldXNlX3BvcnQ9VHJ1ZSkKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZXJ2ZXIuc29ja2V0cyksIDEpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzb2NrLmdldHNvY2tvcHQoCisgICAgICAgICAgICAgICAgc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRVBPUlQpKQorICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIF9tYWtlX3VuaXhfc2VydmVyKHNlbGYsIGZhY3RvcnksICoqa3dhcmdzKToKKyAgICAgICAgcGF0aCA9IHRlc3RfdXRpbHMuZ2VuX3VuaXhfc29ja2V0X3BhdGgoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBvcy5wYXRoLmV4aXN0cyhwYXRoKSBhbmQgb3MudW5saW5rKHBhdGgpKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGZhY3RvcnksIHBhdGgsICoqa3dhcmdzKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisKKyAgICAgICAgcmV0dXJuIHNlcnZlciwgcGF0aAorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcihzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIHBhdGggPSBzZWxmLl9tYWtlX3VuaXhfc2VydmVyKGxhbWJkYTogcHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcnZlci5zb2NrZXRzKSwgMSkKKworICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYKQorICAgICAgICBjbGllbnQuY29ubmVjdChwYXRoKQorICAgICAgICBjbGllbnQuc2VuZGFsbChiJ3h4eCcpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICAjIHRoZSBjbGllbnQgc29ja2V0IG11c3QgYmUgY2xvc2VkIGFmdGVyIHRvIGF2b2lkIEVDT05OUkVTRVQgdXBvbgorICAgICAgICAjIHJlY3YoKS9zZW5kKCkgb24gdGhlIHNlcnZpbmcgc29ja2V0CisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgIyBjbG9zZSBzZXJ2ZXIKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLCAnTm8gVU5JWCBTb2NrZXRzJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfcGF0aF9zb2NrZXRfZXJyb3Ioc2VsZik6CisgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X3NlcnZlcihsYW1iZGE6IHByb3RvLCAnL3Rlc3QnLCBzb2NrPXNvY2spCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGF0aCBhbmQgc29jayBjYW4gbm90IGJlIHNwZWNpZmllZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2F0IHRoZSBzYW1lIHRpbWUnKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisKKyAgICBkZWYgX2NyZWF0ZV9zc2xfY29udGV4dChzZWxmLCBjZXJ0ZmlsZSwga2V5ZmlsZT1Ob25lKToKKyAgICAgICAgc3NsY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgc3NsY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oY2VydGZpbGUsIGtleWZpbGUpCisgICAgICAgIHJldHVybiBzc2xjb250ZXh0CisKKyAgICBkZWYgX21ha2Vfc3NsX3NlcnZlcihzZWxmLCBmYWN0b3J5LCBjZXJ0ZmlsZSwga2V5ZmlsZT1Ob25lKToKKyAgICAgICAgc3NsY29udGV4dCA9IHNlbGYuX2NyZWF0ZV9zc2xfY29udGV4dChjZXJ0ZmlsZSwga2V5ZmlsZSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoZmFjdG9yeSwgJzEyNy4wLjAuMScsIDAsIHNzbD1zc2xjb250ZXh0KQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisKKyAgICAgICAgc29jayA9IHNlcnZlci5zb2NrZXRzWzBdCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LCAnMTI3LjAuMC4xJykKKyAgICAgICAgcmV0dXJuIHNlcnZlciwgaG9zdCwgcG9ydAorCisgICAgZGVmIF9tYWtlX3NzbF91bml4X3NlcnZlcihzZWxmLCBmYWN0b3J5LCBjZXJ0ZmlsZSwga2V5ZmlsZT1Ob25lKToKKyAgICAgICAgc3NsY29udGV4dCA9IHNlbGYuX2NyZWF0ZV9zc2xfY29udGV4dChjZXJ0ZmlsZSwga2V5ZmlsZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ha2VfdW5peF9zZXJ2ZXIoZmFjdG9yeSwgc3NsPXNzbGNvbnRleHQpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VydmVyLCBob3N0LCBwb3J0ID0gc2VsZi5fbWFrZV9zc2xfc2VydmVyKAorICAgICAgICAgICAgbGFtYmRhOiBwcm90bywgT05MWUNFUlQsIE9OTFlLRVkpCisKKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15QmFzZVByb3RvLCBob3N0LCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKSkKKyAgICAgICAgY2xpZW50LCBwciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9jKQorCisgICAgICAgIGNsaWVudC53cml0ZShiJ3h4eCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmNoZWNrX3NzbF9leHRyYV9pbmZvKGNsaWVudCwgcGVlcm5hbWU9KGhvc3QsIHBvcnQpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgICMgdGhlIGNsaWVudCBzb2NrZXQgbXVzdCBiZSBjbG9zZWQgYWZ0ZXIgdG8gYXZvaWQgRUNPTk5SRVNFVCB1cG9uCisgICAgICAgICMgcmVjdigpL3NlbmQoKSBvbiB0aGUgc2VydmluZyBzb2NrZXQKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICAjIHN0b3Agc2VydmluZworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X2NyZWF0ZV9zZXJ2ZXJfc3NsKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZm9yY2VfbGVnYWN5X3NzbF9zdXBwb3J0KCk6CisgICAgICAgICAgICBzZWxmLnRlc3RfY3JlYXRlX3NlcnZlcl9zc2woKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLCAnTm8gVU5JWCBTb2NrZXRzJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfc3NsKHNlbGYpOgorICAgICAgICBwcm90byA9IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlcnZlciwgcGF0aCA9IHNlbGYuX21ha2Vfc3NsX3VuaXhfc2VydmVyKAorICAgICAgICAgICAgbGFtYmRhOiBwcm90bywgT05MWUNFUlQsIE9OTFlLRVkpCisKKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBNeUJhc2VQcm90bywgcGF0aCwgc3NsPXRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nJykKKworICAgICAgICBjbGllbnQsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgY2xpZW50LndyaXRlKGIneHh4JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID4gMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ0xPU0VEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgIyB0aGUgY2xpZW50IHNvY2tldCBtdXN0IGJlIGNsb3NlZCBhZnRlciB0byBhdm9pZCBFQ09OTlJFU0VUIHVwb24KKyAgICAgICAgIyByZWN2KCkvc2VuZCgpIG9uIHRoZSBzZXJ2aW5nIHNvY2tldAorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgICAgICMgc3RvcCBzZXJ2aW5nCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3VuaXhfc2VydmVyX3NzbChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmZvcmNlX2xlZ2FjeV9zc2xfc3VwcG9ydCgpOgorICAgICAgICAgICAgc2VsZi50ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9zc2woKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsX3ZlcmlmeV9mYWlsZWQoc2VsZik6CisgICAgICAgIHByb3RvID0gTXlQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VydmVyLCBob3N0LCBwb3J0ID0gc2VsZi5fbWFrZV9zc2xfc2VydmVyKAorICAgICAgICAgICAgbGFtYmRhOiBwcm90bywgU0lHTkVEX0NFUlRGSUxFKQorCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQub3B0aW9ucyB8PSBzc2wuT1BfTk9fU1NMdjIKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisKKyAgICAgICAgIyBubyBDQSBsb2FkZWQKKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV9jb25uZWN0aW9uKE15UHJvdG8sIGhvc3QsIHBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9c3NsY29udGV4dF9jbGllbnQpCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5sb29wLCAnY2FsbF9leGNlcHRpb25faGFuZGxlcicpOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyg/aSljZXJ0aWZpY2F0ZS52ZXJpZnkuZmFpbGVkICcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAgICAgIyBleGVjdXRlIHRoZSBsb29wIHRvIGxvZyB0aGUgY29ubmVjdGlvbiBlcnJvcgorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9jcmVhdGVfc2VydmVyX3NzbF92ZXJpZnlfZmFpbGVkKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZm9yY2VfbGVnYWN5X3NzbF9zdXBwb3J0KCk6CisgICAgICAgICAgICBzZWxmLnRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZCgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIHBhdGggPSBzZWxmLl9tYWtlX3NzbF91bml4X3NlcnZlcigKKyAgICAgICAgICAgIGxhbWJkYTogcHJvdG8sIFNJR05FRF9DRVJURklMRSkKKworICAgICAgICBzc2xjb250ZXh0X2NsaWVudCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgaWYgaGFzYXR0cihzc2xjb250ZXh0X2NsaWVudCwgJ2NoZWNrX2hvc3RuYW1lJyk6CisgICAgICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5jaGVja19ob3N0bmFtZSA9IFRydWUKKworICAgICAgICAjIG5vIENBIGxvYWRlZAorICAgICAgICBmX2MgPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbihNeVByb3RvLCBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9c3NsY29udGV4dF9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0naW52YWxpZCcpCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5sb29wLCAnY2FsbF9leGNlcHRpb25faGFuZGxlcicpOgorICAgICAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyg/aSljZXJ0aWZpY2F0ZS52ZXJpZnkuZmFpbGVkICcpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAgICAgIyBleGVjdXRlIHRoZSBsb29wIHRvIGxvZyB0aGUgY29ubmVjdGlvbiBlcnJvcgorICAgICAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworCisgICAgZGVmIHRlc3RfbGVnYWN5X2NyZWF0ZV91bml4X3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmZvcmNlX2xlZ2FjeV9zc2xfc3VwcG9ydCgpOgorICAgICAgICAgICAgc2VsZi50ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZCgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKHNlbGYpOgorICAgICAgICBwcm90byA9IE15UHJvdG8obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlcnZlciwgaG9zdCwgcG9ydCA9IHNlbGYuX21ha2Vfc3NsX3NlcnZlcigKKyAgICAgICAgICAgIGxhbWJkYTogcHJvdG8sIFNJR05FRF9DRVJURklMRSkKKworICAgICAgICBzc2xjb250ZXh0X2NsaWVudCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQubG9hZF92ZXJpZnlfbG9jYXRpb25zKAorICAgICAgICAgICAgY2FmaWxlPVNJR05JTkdfQ0EpCisgICAgICAgIGlmIGhhc2F0dHIoc3NsY29udGV4dF9jbGllbnQsICdjaGVja19ob3N0bmFtZScpOgorICAgICAgICAgICAgc3NsY29udGV4dF9jbGllbnQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisKKyAgICAgICAgIyBpbmNvcnJlY3Qgc2VydmVyX2hvc3RuYW1lCisgICAgICAgIGZfYyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBob3N0LCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXNzbGNvbnRleHRfY2xpZW50KQorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYubG9vcCwgJ2NhbGxfZXhjZXB0aW9uX2hhbmRsZXInKToKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5DZXJ0aWZpY2F0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lICcxMjcuMC4wLjEnIGRvZXNuJ3QgbWF0Y2ggJ2xvY2FsaG9zdCciKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZm9yY2VfbGVnYWN5X3NzbF9zdXBwb3J0KCk6CisgICAgICAgICAgICBzZWxmLnRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX3NzbF92ZXJpZmllZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIHBhdGggPSBzZWxmLl9tYWtlX3NzbF91bml4X3NlcnZlcigKKyAgICAgICAgICAgIGxhbWJkYTogcHJvdG8sIFNJR05FRF9DRVJURklMRSkKKworICAgICAgICBzc2xjb250ZXh0X2NsaWVudCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1TSUdOSU5HX0NBKQorICAgICAgICBpZiBoYXNhdHRyKHNzbGNvbnRleHRfY2xpZW50LCAnY2hlY2tfaG9zdG5hbWUnKToKKyAgICAgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorCisgICAgICAgICMgQ29ubmVjdGlvbiBzdWNjZWVkcyB3aXRoIGNvcnJlY3QgQ0EgYW5kIHNlcnZlciBob3N0bmFtZS4KKyAgICAgICAgZl9jID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oTXlQcm90bywgcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXNzbGNvbnRleHRfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisgICAgICAgIGNsaWVudCwgcHIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfYykKKworICAgICAgICAjIGNsb3NlIGNvbm5lY3Rpb24KKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X2NyZWF0ZV91bml4X3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5mb3JjZV9sZWdhY3lfc3NsX3N1cHBvcnQoKToKKyAgICAgICAgICAgIHNlbGYudGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfc3NsX3ZlcmlmaWVkKCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbF92ZXJpZmllZChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZXJ2ZXIsIGhvc3QsIHBvcnQgPSBzZWxmLl9tYWtlX3NzbF9zZXJ2ZXIoCisgICAgICAgICAgICBsYW1iZGE6IHByb3RvLCBTSUdORURfQ0VSVEZJTEUpCisKKyAgICAgICAgc3NsY29udGV4dF9jbGllbnQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5vcHRpb25zIHw9IHNzbC5PUF9OT19TU0x2MgorICAgICAgICBzc2xjb250ZXh0X2NsaWVudC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIHNzbGNvbnRleHRfY2xpZW50LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWZpbGU9U0lHTklOR19DQSkKKyAgICAgICAgaWYgaGFzYXR0cihzc2xjb250ZXh0X2NsaWVudCwgJ2NoZWNrX2hvc3RuYW1lJyk6CisgICAgICAgICAgICBzc2xjb250ZXh0X2NsaWVudC5jaGVja19ob3N0bmFtZSA9IFRydWUKKworICAgICAgICAjIENvbm5lY3Rpb24gc3VjY2VlZHMgd2l0aCBjb3JyZWN0IENBIGFuZCBzZXJ2ZXIgaG9zdG5hbWUuCisgICAgICAgIGZfYyA9IHNlbGYubG9vcC5jcmVhdGVfY29ubmVjdGlvbihNeVByb3RvLCBob3N0LCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsPXNzbGNvbnRleHRfY2xpZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPSdsb2NhbGhvc3QnKQorICAgICAgICBjbGllbnQsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmX2MpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmNoZWNrX3NzbF9leHRyYV9pbmZvKGNsaWVudCxwZWVybmFtZT0oaG9zdCwgcG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcmNlcnQ9UEVFUkNFUlQpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9jcmVhdGVfc2VydmVyX3NzbF92ZXJpZmllZChzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmZvcmNlX2xlZ2FjeV9zc2xfc3VwcG9ydCgpOgorICAgICAgICAgICAgc2VsZi50ZXN0X2NyZWF0ZV9zZXJ2ZXJfc3NsX3ZlcmlmaWVkKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfc29jayhzZWxmKToKKyAgICAgICAgcHJvdG8gPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBjbGFzcyBUZXN0TXlQcm90byhNeVByb3RvKToKKyAgICAgICAgICAgIGRlZiBjb25uZWN0aW9uX21hZGUoc2VsZiwgdHJhbnNwb3J0KToKKyAgICAgICAgICAgICAgICBzdXBlcigpLmNvbm5lY3Rpb25fbWFkZSh0cmFuc3BvcnQpCisgICAgICAgICAgICAgICAgcHJvdG8uc2V0X3Jlc3VsdChzZWxmKQorCisgICAgICAgIHNvY2tfb2IgPSBzb2NrZXQuc29ja2V0KHR5cGU9c29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzb2NrX29iLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCisgICAgICAgIHNvY2tfb2IuYmluZCgoJzAuMC4wLjAnLCAwKSkKKworICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoVGVzdE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzb2NrLCBzb2NrX29iKQorCisgICAgICAgIGhvc3QsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob3N0LCAnMC4wLjAuMCcpCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBjbGllbnQuY29ubmVjdCgoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuc2VuZChiJ3h4eCcpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisgICAgICAgIHNlcnZlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX2FkZHJfaW5fdXNlKHNlbGYpOgorICAgICAgICBzb2NrX29iID0gc29ja2V0LnNvY2tldCh0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgc29ja19vYi5zZXRzb2Nrb3B0KHNvY2tldC5TT0xfU09DS0VULCBzb2NrZXQuU09fUkVVU0VBRERSLCAxKQorICAgICAgICBzb2NrX29iLmJpbmQoKCcwLjAuMC4wJywgMCkpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKE15UHJvdG8sIHNvY2s9c29ja19vYikKKyAgICAgICAgc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzb2NrID0gc2VydmVyLnNvY2tldHNbMF0KKyAgICAgICAgaG9zdCwgcG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX3NlcnZlcihNeVByb3RvLCBob3N0PWhvc3QsIHBvcnQ9cG9ydCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVBRERSSU5VU0UpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiBub3Qgc3VwcG9ydGVkIG9yIGVuYWJsZWQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfZHVhbF9zdGFjayhzZWxmKToKKyAgICAgICAgZl9wcm90byA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNsYXNzIFRlc3RNeVByb3RvKE15UHJvdG8pOgorICAgICAgICAgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFuc3BvcnQpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuY29ubmVjdGlvbl9tYWRlKHRyYW5zcG9ydCkKKyAgICAgICAgICAgICAgICBmX3Byb3RvLnNldF9yZXN1bHQoc2VsZikKKworICAgICAgICB0cnlfY291bnQgPSAwCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICAgICAgZiA9IHNlbGYubG9vcC5jcmVhdGVfc2VydmVyKFRlc3RNeVByb3RvLCBob3N0PU5vbmUsIHBvcnQ9cG9ydCkKKyAgICAgICAgICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBleDoKKyAgICAgICAgICAgICAgICBpZiBleC5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgorICAgICAgICAgICAgICAgICAgICB0cnlfY291bnQgKz0gMQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbCg1LCB0cnlfY291bnQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZfcHJvdG8pCisgICAgICAgIHByb3RvLnRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIGNsaWVudC5jbG9zZSgpCisKKyAgICAgICAgZl9wcm90byA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjbGllbnQgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNikKKyAgICAgICAgY2xpZW50LmNvbm5lY3QoKCc6OjEnLCBwb3J0KSkKKyAgICAgICAgY2xpZW50LnNlbmQoYid4eHgnKQorICAgICAgICBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZl9wcm90bykKKyAgICAgICAgcHJvdG8udHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2VydmVyX2Nsb3NlKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5sb29wLmNyZWF0ZV9zZXJ2ZXIoTXlQcm90bywgJzAuMC4wLjAnLCAwKQorICAgICAgICBzZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNvY2sgPSBzZXJ2ZXIuc29ja2V0c1swXQorICAgICAgICBob3N0LCBwb3J0ID0gc29jay5nZXRzb2NrbmFtZSgpCisKKyAgICAgICAgY2xpZW50ID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgcG9ydCkpCisgICAgICAgIGNsaWVudC5zZW5kKGIneHh4JykKKyAgICAgICAgY2xpZW50LmNsb3NlKCkKKworICAgICAgICBzZXJ2ZXIuY2xvc2UoKQorCisgICAgICAgIGNsaWVudCA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IsIGNsaWVudC5jb25uZWN0LCAoJzEyNy4wLjAuMScsIHBvcnQpKQorICAgICAgICBjbGllbnQuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2RhdGFncmFtX2VuZHBvaW50KHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0TXlEYXRhZ3JhbVByb3RvKE15RGF0YWdyYW1Qcm90byk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oaW5uZXJfc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhsb29wPXNlbGYubG9vcCkKKworICAgICAgICAgICAgZGVmIGRhdGFncmFtX3JlY2VpdmVkKHNlbGYsIGRhdGEsIGFkZHIpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuZGF0YWdyYW1fcmVjZWl2ZWQoZGF0YSwgYWRkcikKKyAgICAgICAgICAgICAgICBzZWxmLnRyYW5zcG9ydC5zZW5kdG8oYidyZXNwOicrZGF0YSwgYWRkcikKKworICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgKKyAgICAgICAgICAgIFRlc3RNeURhdGFncmFtUHJvdG8sIGxvY2FsX2FkZHI9KCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgc190cmFuc3BvcnQsIHNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgaG9zdCwgcG9ydCA9IHNfdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdzb2NrbmFtZScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNfdHJhbnNwb3J0LCBhc3luY2lvLlRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlcnZlciwgVGVzdE15RGF0YWdyYW1Qcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnSU5JVElBTElaRUQnLCBzZXJ2ZXIuc3RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VydmVyLnRyYW5zcG9ydCwgc190cmFuc3BvcnQpCisKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICByZW1vdGVfYWRkcj0oaG9zdCwgcG9ydCkpCisgICAgICAgIHRyYW5zcG9ydCwgY2xpZW50ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFuc3BvcnQsIGFzeW5jaW8uVHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2xpZW50LCBNeURhdGFncmFtUHJvdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0lOSVRJQUxJWkVEJywgY2xpZW50LnN0YXRlKQorICAgICAgICBzZWxmLmFzc2VydElzKGNsaWVudC50cmFuc3BvcnQsIHRyYW5zcG9ydCkKKworICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGIneHh4JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHNlcnZlci5uYnl0ZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMywgc2VydmVyLm5ieXRlcykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IGNsaWVudC5uYnl0ZXMpCisKKyAgICAgICAgIyByZWNlaXZlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDgsIGNsaWVudC5uYnl0ZXMpCisKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3NvY2tuYW1lJykpCisKKyAgICAgICAgIyBjbG9zZSBjb25uZWN0aW9uCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY2xpZW50LmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIGNsaWVudC5zdGF0ZSkKKyAgICAgICAgc2VydmVyLnRyYW5zcG9ydC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnRfc29jayhzZWxmKToKKyAgICAgICAgc29jayA9IE5vbmUKKyAgICAgICAgbG9jYWxfYWRkcmVzcyA9ICgnMTI3LjAuMC4xJywgMCkKKyAgICAgICAgaW5mb3MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgc2VsZi5sb29wLmdldGFkZHJpbmZvKAorICAgICAgICAgICAgICAgICpsb2NhbF9hZGRyZXNzLCB0eXBlPXNvY2tldC5TT0NLX0RHUkFNKSkKKyAgICAgICAgZm9yIGZhbWlseSwgdHlwZSwgcHJvdG8sIGNuYW1lLCBhZGRyZXNzIGluIGluZm9zOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KGZhbWlseT1mYW1pbHksIHR5cGU9dHlwZSwgcHJvdG89cHJvdG8pCisgICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZyhGYWxzZSkKKyAgICAgICAgICAgICAgICBzb2NrLmJpbmQoYWRkcmVzcykKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICdDYW4gbm90IGNyZWF0ZSBzb2NrZXQuJworCisgICAgICAgIGYgPSBzZWxmLmxvb3AuY3JlYXRlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBsYW1iZGE6IE15RGF0YWdyYW1Qcm90byhsb29wPXNlbGYubG9vcCksIHNvY2s9c29jaykKKyAgICAgICAgdHIsIHByID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIGFzeW5jaW8uVHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHIsIE15RGF0YWdyYW1Qcm90bykKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByLmRvbmUpCisKKyAgICBkZWYgdGVzdF9pbnRlcm5hbF9mZHMoc2VsZik6CisgICAgICAgIGxvb3AgPSBzZWxmLmNyZWF0ZV9ldmVudF9sb29wKCkKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UobG9vcCwgc2VsZWN0b3JfZXZlbnRzLkJhc2VTZWxlY3RvckV2ZW50TG9vcCk6CisgICAgICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2xvb3AgaXMgbm90IGEgQmFzZVNlbGVjdG9yRXZlbnRMb29wJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxvb3AuX2ludGVybmFsX2ZkcykKKyAgICAgICAgbG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbG9vcC5faW50ZXJuYWxfZmRzKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb29wLl9jc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9vcC5fc3NvY2spCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3RfcmVhZF9waXBlKHNlbGYpOgorICAgICAgICBwcm90byA9IE15UmVhZFBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBycGlwZSwgd3BpcGUgPSBvcy5waXBlKCkKKyAgICAgICAgcGlwZW9iaiA9IGlvLm9wZW4ocnBpcGUsICdyYicsIDEwMjQpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25uZWN0KCk6CisgICAgICAgICAgICB0LCBwID0geWllbGQgZnJvbSBzZWxmLmxvb3AuY29ubmVjdF9yZWFkX3BpcGUoCisgICAgICAgICAgICAgICAgbGFtYmRhOiBwcm90bywgcGlwZW9iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorCisgICAgICAgIG9zLndyaXRlKHdwaXBlLCBiJzEnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID49IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLndyaXRlKHdwaXBlLCBiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzID49IDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg1LCBwcm90by5uYnl0ZXMpCisKKyAgICAgICAgb3MuY2xvc2Uod3BpcGUpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsnSU5JVElBTCcsICdDT05ORUNURUQnLCAnRU9GJywgJ0NMT1NFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgIyBleHRyYSBpbmZvIGlzIGF2YWlsYWJsZQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwcm90by50cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3BpcGUnKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICAjIHNlbGVjdCwgcG9sbCBhbmQga3F1ZXVlIGRvbid0IHN1cHBvcnQgY2hhcmFjdGVyIGRldmljZXMgKFBUWSkgb24gTWFjIE9TIFgKKyAgICAjIG9sZGVyIHRoYW4gMTAuNiAoU25vdyBMZW9wYXJkKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDYpCisgICAgIyBJc3N1ZSAjMjA0OTU6IFRoZSB0ZXN0IGhhbmdzIG9uIEZyZWVCU0QgNy4yIGJ1dCBwYXNzIG9uIEZyZWVCU0QgOQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbig4KQorICAgIGRlZiB0ZXN0X3JlYWRfcHR5X291dHB1dChzZWxmKToKKyAgICAgICAgcHJvdG8gPSBNeVJlYWRQaXBlUHJvdG8obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgbWFzdGVyLCBzbGF2ZSA9IG9zLm9wZW5wdHkoKQorICAgICAgICBtYXN0ZXJfcmVhZF9vYmogPSBpby5vcGVuKG1hc3RlciwgJ3JiJywgMCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoKToKKyAgICAgICAgICAgIHQsIHAgPSB5aWVsZCBmcm9tIHNlbGYubG9vcC5jb25uZWN0X3JlYWRfcGlwZShsYW1iZGE6IHByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc3Rlcl9yZWFkX29iaikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocCwgcHJvdG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydJTklUSUFMJywgJ0NPTk5FQ1RFRCddLCBwcm90by5zdGF0ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCgpKQorCisgICAgICAgIG9zLndyaXRlKHNsYXZlLCBiJzEnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcHJvdG8ubmJ5dGVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHByb3RvLm5ieXRlcykKKworICAgICAgICBvcy53cml0ZShzbGF2ZSwgYicyMzQ1JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHByb3RvLm5ieXRlcyA+PSA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsnSU5JVElBTCcsICdDT05ORUNURUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNSwgcHJvdG8ubmJ5dGVzKQorCisgICAgICAgIG9zLmNsb3NlKHNsYXZlKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbJ0lOSVRJQUwnLCAnQ09OTkVDVEVEJywgJ0VPRicsICdDTE9TRUQnXSwgcHJvdG8uc3RhdGUpCisgICAgICAgICMgZXh0cmEgaW5mbyBpcyBhdmFpbGFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvdG8udHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCdwaXBlJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRG9uJ3Qgc3VwcG9ydCBwaXBlcyBmb3IgV2luZG93cyIpCisgICAgZGVmIHRlc3Rfd3JpdGVfcGlwZShzZWxmKToKKyAgICAgICAgcnBpcGUsIHdwaXBlID0gb3MucGlwZSgpCisgICAgICAgIHBpcGVvYmogPSBpby5vcGVuKHdwaXBlLCAnd2InLCAxMDI0KQorCisgICAgICAgIHByb3RvID0gTXlXcml0ZVBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5jb25uZWN0X3dyaXRlX3BpcGUobGFtYmRhOiBwcm90bywgcGlwZW9iaikKKyAgICAgICAgdHJhbnNwb3J0LCBwID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyYW5zcG9ydCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicxJykKKworICAgICAgICBkYXRhID0gYnl0ZWFycmF5KCkKKyAgICAgICAgZGVmIHJlYWRlcihkYXRhKToKKyAgICAgICAgICAgIGNodW5rID0gb3MucmVhZChycGlwZSwgMTAyNCkKKyAgICAgICAgICAgIGRhdGEgKz0gY2h1bmsKKyAgICAgICAgICAgIHJldHVybiBsZW4oZGF0YSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcmVhZGVyKGRhdGEpID49IDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxJywgZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicyMzQ1JykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fdW50aWwoc2VsZi5sb29wLCBsYW1iZGE6IHJlYWRlcihkYXRhKSA+PSA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMTIzNDUnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICBvcy5jbG9zZShycGlwZSkKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGlwZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkRvbid0IHN1cHBvcnQgcGlwZXMgZm9yIFdpbmRvd3MiKQorICAgIGRlZiB0ZXN0X3dyaXRlX3BpcGVfZGlzY29ubmVjdF9vbl9jbG9zZShzZWxmKToKKyAgICAgICAgcnNvY2ssIHdzb2NrID0gdGVzdF91dGlscy5zb2NrZXRwYWlyKCkKKyAgICAgICAgcnNvY2suc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIHBpcGVvYmogPSBpby5vcGVuKHdzb2NrLmRldGFjaCgpLCAnd2InLCAxMDI0KQorCisgICAgICAgIHByb3RvID0gTXlXcml0ZVBpcGVQcm90byhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5jb25uZWN0X3dyaXRlX3BpcGUobGFtYmRhOiBwcm90bywgcGlwZW9iaikKKyAgICAgICAgdHJhbnNwb3J0LCBwID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKHAsIHByb3RvKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyYW5zcG9ydCwgcHJvdG8udHJhbnNwb3J0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDT05ORUNURUQnLCBwcm90by5zdGF0ZSkKKworICAgICAgICB0cmFuc3BvcnQud3JpdGUoYicxJykKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VsZi5sb29wLnNvY2tfcmVjdihyc29jaywgMTAyNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxJywgZGF0YSkKKworICAgICAgICByc29jay5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5kb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdDTE9TRUQnLCBwcm90by5zdGF0ZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgICAgICJEb24ndCBzdXBwb3J0IHBpcGVzIGZvciBXaW5kb3dzIikKKyAgICAjIHNlbGVjdCwgcG9sbCBhbmQga3F1ZXVlIGRvbid0IHN1cHBvcnQgY2hhcmFjdGVyIGRldmljZXMgKFBUWSkgb24gTWFjIE9TIFgKKyAgICAjIG9sZGVyIHRoYW4gMTAuNiAoU25vdyBMZW9wYXJkKQorICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDYpCisgICAgZGVmIHRlc3Rfd3JpdGVfcHR5KHNlbGYpOgorICAgICAgICBtYXN0ZXIsIHNsYXZlID0gb3Mub3BlbnB0eSgpCisgICAgICAgIHNsYXZlX3dyaXRlX29iaiA9IGlvLm9wZW4oc2xhdmUsICd3YicsIDApCisKKyAgICAgICAgcHJvdG8gPSBNeVdyaXRlUGlwZVByb3RvKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLmNvbm5lY3Rfd3JpdGVfcGlwZShsYW1iZGE6IHByb3RvLCBzbGF2ZV93cml0ZV9vYmopCisgICAgICAgIHRyYW5zcG9ydCwgcCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwLCBwcm90bykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0cmFuc3BvcnQsIHByb3RvLnRyYW5zcG9ydCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInMScpCisKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheSgpCisgICAgICAgIGRlZiByZWFkZXIoZGF0YSk6CisgICAgICAgICAgICBjaHVuayA9IG9zLnJlYWQobWFzdGVyLCAxMDI0KQorICAgICAgICAgICAgZGF0YSArPSBjaHVuaworICAgICAgICAgICAgcmV0dXJuIGxlbihkYXRhKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX3VudGlsKHNlbGYubG9vcCwgbGFtYmRhOiByZWFkZXIoZGF0YSkgPj0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJzEnLCBkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJzIzNDUnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl91bnRpbChzZWxmLmxvb3AsIGxhbWJkYTogcmVhZGVyKGRhdGEpID49IDUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicxMjM0NScsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIG9zLmNsb3NlKG1hc3RlcikKKworICAgICAgICAjIGV4dHJhIGluZm8gaXMgYXZhaWxhYmxlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHByb3RvLnRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygncGlwZScpKQorCisgICAgICAgICMgY2xvc2UgY29ubmVjdGlvbgorICAgICAgICBwcm90by50cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmRvbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NMT1NFRCcsIHByb3RvLnN0YXRlKQorCisgICAgZGVmIHRlc3RfcHJvbXB0X2NhbmNlbGxhdGlvbihzZWxmKToKKyAgICAgICAgciwgdyA9IHRlc3RfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHIuc2V0YmxvY2tpbmcoRmFsc2UpCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19yZWN2KHIsIDEpCisgICAgICAgIG92ID0gZ2V0YXR0cihmLCAnb3YnLCBOb25lKQorICAgICAgICBpZiBvdiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdi5wZW5kaW5nKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbWFpbigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oZi5jYW5jZWwpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICByZXMgPSAnY2FuY2VsbGVkJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXMgPSBOb25lCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5zdG9wKCkKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICBzdGFydCA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhtYWluKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICBlbGFwc2VkID0gdGltZS5tb25vdG9uaWMoKSAtIHN0YXJ0CisKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGVsYXBzZWQsIDAuMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAnY2FuY2VsbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIGlmIG92IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdi5wZW5kaW5nKQorICAgICAgICBzZWxmLmxvb3AuX3N0b3Bfc2VydmluZyhyKQorCisgICAgICAgIHIuY2xvc2UoKQorICAgICAgICB3LmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXRfcm91bmRpbmcoc2VsZik6CisgICAgICAgIGRlZiBfcnVuX29uY2UoKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2VfY291bnRlciArPSAxCisgICAgICAgICAgICBvcmlnX3J1bl9vbmNlKCkKKworICAgICAgICBvcmlnX3J1bl9vbmNlID0gc2VsZi5sb29wLl9ydW5fb25jZQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlX2NvdW50ZXIgPSAwCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UgPSBfcnVuX29uY2UKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHdhaXQoKToKKyAgICAgICAgICAgIGxvb3AgPSBzZWxmLmxvb3AKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxZS0yLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMWUtNCwgbG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDFlLTYsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxZS04LCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMWUtMTAsIGxvb3A9bG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHdhaXQoKSkKKyAgICAgICAgIyBUaGUgaWRlYWwgbnVtYmVyIG9mIGNhbGwgaXMgMTIsIGJ1dCBvbiBzb21lIHBsYXRmb3JtcywgdGhlIHNlbGVjdG9yCisgICAgICAgICMgbWF5IHNsZWVwIGF0IGxpdHRsZSBiaXQgbGVzcyB0aGFuIHRpbWVvdXQgZGVwZW5kaW5nIG9uIHRoZSByZXNvbHV0aW9uCisgICAgICAgICMgb2YgdGhlIGNsb2NrIHVzZWQgYnkgdGhlIGtlcm5lbC4gVG9sZXJhdGUgYSBmZXcgdXNlbGVzcyBjYWxscyBvbgorICAgICAgICAjIHRoZXNlIHBsYXRmb3Jtcy4KKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoc2VsZi5sb29wLl9ydW5fb25jZV9jb3VudGVyLCAyMCwKKyAgICAgICAgICAgIHsnY2xvY2tfcmVzb2x1dGlvbic6IHNlbGYubG9vcC5fY2xvY2tfcmVzb2x1dGlvbiwKKyAgICAgICAgICAgICAnc2VsZWN0b3InOiBzZWxmLmxvb3AuX3NlbGVjdG9yLl9fY2xhc3NfXy5fX25hbWVfX30pCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3RfYWRkcmVzcyhzZWxmKToKKyAgICAgICAgYWRkcmVzc2VzID0gWyhzb2NrZXQuQUZfSU5FVCwgKCd3d3cucHl0aG9uLm9yZycsIDgwKSldCisgICAgICAgIGlmIHN1cHBvcnQuSVBWNl9FTkFCTEVEOgorICAgICAgICAgICAgYWRkcmVzc2VzLmV4dGVuZCgoCisgICAgICAgICAgICAgICAgKHNvY2tldC5BRl9JTkVUNiwgKCd3d3cucHl0aG9uLm9yZycsIDgwKSksCisgICAgICAgICAgICAgICAgKHNvY2tldC5BRl9JTkVUNiwgKCd3d3cucHl0aG9uLm9yZycsIDgwLCAwLCAwKSksCisgICAgICAgICAgICApKQorCisgICAgICAgIGZvciBmYW1pbHksIGFkZHJlc3MgaW4gYWRkcmVzc2VzOgorICAgICAgICAgICAgZm9yIHNvY2tfdHlwZSBpbiAoc29ja2V0LlNPQ0tfU1RSRUFNLCBzb2NrZXQuU09DS19ER1JBTSk6CisgICAgICAgICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoZmFtaWx5LCBzb2NrX3R5cGUpCisgICAgICAgICAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgICAgICAgICBzb2NrLnNldGJsb2NraW5nKEZhbHNlKQorICAgICAgICAgICAgICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCBhZGRyZXNzKQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdhZGRyZXNzIG11c3QgYmUgcmVzb2x2ZWQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cihjbS5leGNlcHRpb24pKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX2Zkc19hZnRlcl9jbG9zaW5nKHNlbGYpOgorICAgICAgICBsb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhOiBOb25lCisgICAgICAgIHIsIHcgPSB0ZXN0X3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHcuY2xvc2UpCisgICAgICAgIGxvb3AuYWRkX3JlYWRlcihyLCBjYWxsYmFjaykKKyAgICAgICAgbG9vcC5hZGRfd3JpdGVyKHcsIGNhbGxiYWNrKQorICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb29wLnJlbW92ZV9yZWFkZXIocikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9vcC5yZW1vdmVfd3JpdGVyKHcpKQorCisgICAgZGVmIHRlc3RfYWRkX2Zkc19hZnRlcl9jbG9zaW5nKHNlbGYpOgorICAgICAgICBsb29wID0gc2VsZi5jcmVhdGVfZXZlbnRfbG9vcCgpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhOiBOb25lCisgICAgICAgIHIsIHcgPSB0ZXN0X3V0aWxzLnNvY2tldHBhaXIoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoci5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHcuY2xvc2UpCisgICAgICAgIGxvb3AuY2xvc2UoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBsb29wLmFkZF9yZWFkZXIociwgY2FsbGJhY2spCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGxvb3AuYWRkX3dyaXRlcih3LCBjYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3J1bm5pbmdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjbG9zZV9sb29wKGxvb3ApOgorICAgICAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgICAgICBjb3JvID0gY2xvc2VfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGZ1bmMgPSBsYW1iZGE6IEZhbHNlCisgICAgICAgIGNvcm8gPSB0ZXN0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNvcm8uY2xvc2UpCisKKyAgICAgICAgIyBvcGVyYXRpb24gYmxvY2tlZCB3aGVuIHRoZSBsb29wIGlzIGNsb3NlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX2ZvcmV2ZXIoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGZ1bmMpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShmdW5jKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9sYXRlcigxLjAsIGZ1bmMpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX2F0KHNlbGYubG9vcC50aW1lKCkgKyAuMCwgZnVuYykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBmdW5jKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AuY3JlYXRlX3Rhc2soY29ybykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHVEVSTSwgZnVuYykKKworCitjbGFzcyBTdWJwcm9jZXNzVGVzdHNNaXhpbjoKKworICAgIGRlZiBjaGVja190ZXJtaW5hdGVkKHNlbGYsIHJldHVybmNvZGUpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICAjIGV4cGVjdCAxIGJ1dCBzb21ldGltZXMgZ2V0IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdURVJNLCByZXR1cm5jb2RlKQorCisgICAgZGVmIGNoZWNrX2tpbGxlZChzZWxmLCByZXR1cm5jb2RlKToKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmV0dXJuY29kZSwgaW50KQorICAgICAgICAgICAgIyBleHBlY3QgMSBidXQgc29tZXRpbWVzIGdldCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHS0lMTCwgcmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfZXhlYyhzZWxmKToKKyAgICAgICAgcHJvZyA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZWNoby5weScpCisKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCBwcm9nKQorICAgICAgICB0cmFuc3AsIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbm5lY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnQ09OTkVDVEVEJywgcHJvdG8uc3RhdGUpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHN0ZGluLndyaXRlKGInUHl0aG9uIFRoZSBXaW5uZXInKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja19raWxsZWQocHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1B5dGhvbiBUaGUgV2lubmVyJywgcHJvdG8uZGF0YVsxXSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfaW50ZXJhY3RpdmUoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ0NPTk5FQ1RFRCcsIHByb3RvLnN0YXRlKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRpbi53cml0ZShiJ1B5dGhvbiAnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmdvdF9kYXRhWzFdLndhaXQoKSkKKyAgICAgICAgcHJvdG8uZ290X2RhdGFbMV0uY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInUHl0aG9uICcsIHByb3RvLmRhdGFbMV0pCisKKyAgICAgICAgc3RkaW4ud3JpdGUoYidUaGUgV2lubmVyJykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsxXS53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidQeXRob24gVGhlIFdpbm5lcicsIHByb3RvLmRhdGFbMV0pCisKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja19raWxsZWQocHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc2hlbGwoc2VsZik6CisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2VjaG8gUHl0aG9uJykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKS5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLnJldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwoZi5kb25lKCkgZm9yIGYgaW4gcHJvdG8uZGlzY29ubmVjdHMudmFsdWVzKCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvLmRhdGFbMV0ucnN0cmlwKGInXHJcbicpLCBiJ1B5dGhvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvdG8uZGF0YVsyXSwgYicnKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19leGl0Y29kZShzZWxmKToKKyAgICAgICAgY29ubmVjdCA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhpdCA3Jywgc3RkaW49Tm9uZSwgc3Rkb3V0PU5vbmUsIHN0ZGVycj1Ob25lKQorICAgICAgICB0cmFuc3AsIHByb3RvID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHJvdG8sIE15U3VicHJvY2Vzc1Byb3RvY29sKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3LCBwcm90by5yZXR1cm5jb2RlKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19jbG9zZV9hZnRlcl9maW5pc2goc2VsZik6CisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19zaGVsbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2V4aXQgNycsIHN0ZGluPU5vbmUsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSkKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgyKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2tpbGwoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLmtpbGwoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja19raWxsZWQocHJvdG8ucmV0dXJuY29kZSkKKyAgICAgICAgdHJhbnNwLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBwcm9nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdlY2hvLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgIHRyYW5zcCwgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHRyYW5zcC50ZXJtaW5hdGUoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb3RvLmNvbXBsZXRlZCkKKyAgICAgICAgc2VsZi5jaGVja190ZXJtaW5hdGVkKHByb3RvLnJldHVybmNvZGUpCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLCAiRG9uJ3QgaGF2ZSBTSUdIVVAiKQorICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc2VuZF9zaWduYWwoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8ucHknKQorCisgICAgICAgIGNvbm5lY3QgPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rvb2xzLnBhcnRpYWwoTXlTdWJwcm9jZXNzUHJvdG9jb2wsIHNlbGYubG9vcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgcHJvZykKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgdHJhbnNwLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdIVVApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHSFVQLCBwcm90by5yZXR1cm5jb2RlKQorICAgICAgICB0cmFuc3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc19zdGRlcnIoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8yLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgIHRyYW5zcCwgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRpbi53cml0ZShiJ3Rlc3QnKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29tcGxldGVkKQorCisgICAgICAgIHRyYW5zcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidPVVQ6dGVzdCcsIHByb3RvLmRhdGFbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5kYXRhWzJdLnN0YXJ0c3dpdGgoYidFUlI6dGVzdCcpLCBwcm90by5kYXRhWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3N0ZGVycl9yZWRpcmVjdF90b19zdGRvdXQoc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8yLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2csIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgdHJhbnNwLCBwcm90byA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb25uZWN0ZWQpCisKKyAgICAgICAgc3RkaW4gPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcC5nZXRfcGlwZV90cmFuc3BvcnQoMikpCisKKyAgICAgICAgc3RkaW4ud3JpdGUoYid0ZXN0JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90by5kYXRhWzFdLnN0YXJ0c3dpdGgoYidPVVQ6dGVzdEVSUjp0ZXN0JyksCisgICAgICAgICAgICAgICAgICAgICAgICBwcm90by5kYXRhWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgcHJvdG8uZGF0YVsyXSkKKworICAgICAgICB0cmFuc3AuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX2Nsb3NlX2NsaWVudF9zdHJlYW0oc2VsZik6CisgICAgICAgIHByb2cgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2VjaG8zLnB5JykKKworICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5wYXJ0aWFsKE15U3VicHJvY2Vzc1Byb3RvY29sLCBzZWxmLmxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsIHByb2cpCisgICAgICAgIHRyYW5zcCwgcHJvdG8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwcm90bywgTXlTdWJwcm9jZXNzUHJvdG9jb2wpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uY29ubmVjdGVkKQorCisgICAgICAgIHN0ZGluID0gdHJhbnNwLmdldF9waXBlX3RyYW5zcG9ydCgwKQorICAgICAgICBzdGRvdXQgPSB0cmFuc3AuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpCisgICAgICAgIHN0ZGluLndyaXRlKGIndGVzdCcpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZ290X2RhdGFbMV0ud2FpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInT1VUOnRlc3QnLCBwcm90by5kYXRhWzFdKQorCisgICAgICAgIHN0ZG91dC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvdG8uZGlzY29ubmVjdHNbMV0pCisgICAgICAgIHN0ZGluLndyaXRlKGIneHh4JykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5nb3RfZGF0YVsyXS53YWl0KCkpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ0VSUjpCcm9rZW5QaXBlRXJyb3InLCBwcm90by5kYXRhWzJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBZnRlciBjbG9zaW5nIHRoZSByZWFkLWVuZCBvZiBhIHBpcGUsIHdyaXRpbmcgdG8gdGhlCisgICAgICAgICAgICAjIHdyaXRlLWVuZCB1c2luZyBvcy53cml0ZSgpIGZhaWxzIHdpdGggZXJybm89PUVJTlZBTCBhbmQKKyAgICAgICAgICAgICMgR2V0TGFzdEVycm9yKCk9PUVSUk9SX0lOVkFMSURfTkFNRSBvbiBXaW5kb3dzIT8hICAoVXNpbmcKKyAgICAgICAgICAgICMgV3JpdGVGaWxlKCkgd2UgZ2V0IEVSUk9SX0JST0tFTl9QSVBFIGFzIGV4cGVjdGVkLikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidFUlI6T1NFcnJvcicsIHByb3RvLmRhdGFbMl0pCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgdHJhbnNwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuY2hlY2tfa2lsbGVkKHByb3RvLnJldHVybmNvZGUpCisKKyAgICBkZWYgdGVzdF9zdWJwcm9jZXNzX3dhaXRfbm9fc2FtZV9ncm91cChzZWxmKToKKyAgICAgICAgIyBzdGFydCB0aGUgbmV3IHByb2Nlc3MgaW4gYSBuZXcgc2Vzc2lvbgorICAgICAgICBjb25uZWN0ID0gc2VsZi5sb29wLnN1YnByb2Nlc3Nfc2hlbGwoCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMucGFydGlhbChNeVN1YnByb2Nlc3NQcm90b2NvbCwgc2VsZi5sb29wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGl0IDcnLCBzdGRpbj1Ob25lLCBzdGRvdXQ9Tm9uZSwgc3RkZXJyPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9uZXdfc2Vzc2lvbj1UcnVlKQorICAgICAgICBfLCBwcm90byA9IHlpZWxkIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHByb3RvLCBNeVN1YnByb2Nlc3NQcm90b2NvbCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm90by5jb21wbGV0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNywgcHJvdG8ucmV0dXJuY29kZSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3NfZXhlY19pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ubmVjdCgqKmt3ZHMpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKAorICAgICAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLAorICAgICAgICAgICAgICAgICdwd2QnLCAqKmt3ZHMpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCh1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoYnVmc2l6ZT00MDk2KSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdChzaGVsbD1UcnVlKSkKKworICAgIGRlZiB0ZXN0X3N1YnByb2Nlc3Nfc2hlbGxfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvbm5lY3QoY21kPU5vbmUsICoqa3dkcyk6CisgICAgICAgICAgICBpZiBub3QgY21kOgorICAgICAgICAgICAgICAgIGNtZCA9ICdwd2QnCisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbGYubG9vcC5zdWJwcm9jZXNzX3NoZWxsKAorICAgICAgICAgICAgICAgIGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLAorICAgICAgICAgICAgICAgIGNtZCwgKiprd2RzKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoWydscycsICctbCddKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdCh1bml2ZXJzYWxfbmV3bGluZXM9VHJ1ZSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbm5lY3QoYnVmc2l6ZT00MDk2KSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ubmVjdChzaGVsbD1GYWxzZSkpCisKKworaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisKKyAgICBjbGFzcyBTZWxlY3RFdmVudExvb3BUZXN0cyhFdmVudExvb3BUZXN0c01peGluLCB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcCgpCisKKyAgICBjbGFzcyBQcm9hY3RvckV2ZW50TG9vcFRlc3RzKEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlByb2FjdG9yRXZlbnRMb29wKCkKKworICAgICAgICBpZiBub3Qgc3NscHJvdG8uX2lzX3NzbHByb3RvX2F2YWlsYWJsZSgpOgorICAgICAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NzbF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIHB5dGhvbiAzLjUgKHNzbC5NZW1vcnlCSU8pIikKKworICAgICAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm5lZWQgcHl0aG9uIDMuNSAoc3NsLk1lbW9yeUJJTykiKQorCisgICAgICAgICAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyX3NzbF92ZXJpZnlfZmFpbGVkKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIHB5dGhvbiAzLjUgKHNzbC5NZW1vcnlCSU8pIikKKworICAgICAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfbWF0Y2hfZmFpbGVkKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJuZWVkIHB5dGhvbiAzLjUgKHNzbC5NZW1vcnlCSU8pIikKKworICAgICAgICAgICAgZGVmIHRlc3RfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm5lZWQgcHl0aG9uIDMuNSAoc3NsLk1lbW9yeUJJTykiKQorCisgICAgICAgIGRlZiB0ZXN0X2xlZ2FjeV9jcmVhdGVfc3NsX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBsZWdhY3kgU1NMIikKKworICAgICAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2woc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBsZWdhY3kgU1NMIikKKworICAgICAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZ5X2ZhaWxlZChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGluY29tcGF0aWJsZSB3aXRoIGxlZ2FjeSBTU0wiKQorCisgICAgICAgIGRlZiB0ZXN0X2xlZ2FjeV9jcmVhdGVfc2VydmVyX3NzbF9tYXRjaF9mYWlsZWQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBsZWdhY3kgU1NMIikKKworICAgICAgICBkZWYgdGVzdF9sZWdhY3lfY3JlYXRlX3NlcnZlcl9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBpbmNvbXBhdGlibGUgd2l0aCBsZWdhY3kgU1NMIikKKworICAgICAgICBkZWYgdGVzdF9yZWFkZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF9yZWFkZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3RfcmVhZGVyX2NhbGxiYWNrX2NhbmNlbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3JlYWRlcigpIikKKworICAgICAgICBkZWYgdGVzdF93cml0ZXJfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF93cml0ZXIoKSIpCisKKyAgICAgICAgZGVmIHRlc3Rfd3JpdGVyX2NhbGxiYWNrX2NhbmNlbChzZWxmKToKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJJb2NwRXZlbnRMb29wIGRvZXMgbm90IGhhdmUgYWRkX3dyaXRlcigpIikKKworICAgICAgICBkZWYgdGVzdF9jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgKKyAgICAgICAgICAgICAgICAiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGNyZWF0ZV9kYXRhZ3JhbV9lbmRwb2ludCgpIikKKworICAgICAgICBkZWYgdGVzdF9yZW1vdmVfZmRzX2FmdGVyX2Nsb3Npbmcoc2VsZik6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiSW9jcEV2ZW50TG9vcCBkb2VzIG5vdCBoYXZlIGFkZF9yZWFkZXIoKSIpCitlbHNlOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JzCisKKyAgICBjbGFzcyBVbml4RXZlbnRMb29wVGVzdHNNaXhpbihFdmVudExvb3BUZXN0c01peGluKToKKyAgICAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCisgICAgICAgICAgICB3YXRjaGVyID0gYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKCkKKyAgICAgICAgICAgIHdhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorICAgICAgICAgICAgYXN5bmNpby5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorCisgICAgICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2NoaWxkX3dhdGNoZXIoTm9uZSkKKyAgICAgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicpOgorICAgICAgICBjbGFzcyBLcXVldWVFdmVudExvb3BUZXN0cyhVbml4RXZlbnRMb29wVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFzeW5jaW8uU2VsZWN0b3JFdmVudExvb3AoCisgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5LcXVldWVTZWxlY3RvcigpKQorCisgICAgICAgICAgICAjIGtxdWV1ZSBkb2Vzbid0IHN1cHBvcnQgY2hhcmFjdGVyIGRldmljZXMgKFBUWSkgb24gTWFjIE9TIFggb2xkZXIKKyAgICAgICAgICAgICMgdGhhbiAxMC45IChNYXZlcmljaykKKyAgICAgICAgICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDkpCisgICAgICAgICAgICAjIElzc3VlICMyMDY2NzogS3F1ZXVlRXZlbnRMb29wVGVzdHMudGVzdF9yZWFkX3B0eV9vdXRwdXQoKQorICAgICAgICAgICAgIyBoYW5ncyBvbiBPcGVuQlNEIDUuNQorICAgICAgICAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnb3BlbmJzZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBoYW5ncyBvbiBPcGVuQlNEJykKKyAgICAgICAgICAgIGRlZiB0ZXN0X3JlYWRfcHR5X291dHB1dChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLnRlc3RfcmVhZF9wdHlfb3V0cHV0KCkKKworICAgICAgICAgICAgIyBrcXVldWUgZG9lc24ndCBzdXBwb3J0IGNoYXJhY3RlciBkZXZpY2VzIChQVFkpIG9uIE1hYyBPUyBYIG9sZGVyCisgICAgICAgICAgICAjIHRoYW4gMTAuOSAoTWF2ZXJpY2spCisgICAgICAgICAgICBAc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA5KQorICAgICAgICAgICAgZGVmIHRlc3Rfd3JpdGVfcHR5KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkudGVzdF93cml0ZV9wdHkoKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdFcG9sbFNlbGVjdG9yJyk6CisgICAgICAgIGNsYXNzIEVQb2xsRXZlbnRMb29wVGVzdHMoVW5peEV2ZW50TG9vcFRlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuRXBvbGxTZWxlY3RvcigpKQorCisgICAgaWYgaGFzYXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InKToKKyAgICAgICAgY2xhc3MgUG9sbEV2ZW50TG9vcFRlc3RzKFVuaXhFdmVudExvb3BUZXN0c01peGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VicHJvY2Vzc1Rlc3RzTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICAgICAgZGVmIGNyZWF0ZV9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKHNlbGVjdG9ycy5Qb2xsU2VsZWN0b3IoKSkKKworICAgICMgU2hvdWxkIGFsd2F5cyBleGlzdC4KKyAgICBjbGFzcyBTZWxlY3RFdmVudExvb3BUZXN0cyhVbml4RXZlbnRMb29wVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdWJwcm9jZXNzVGVzdHNNaXhpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgICAgICBkZWYgY3JlYXRlX2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gYXN5bmNpby5TZWxlY3RvckV2ZW50TG9vcChzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IoKSkKKworCitkZWYgbm9vcCgqYXJncyk6CisgICAgcGFzcworCisKK2NsYXNzIEhhbmRsZVRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuZ2V0X2RlYnVnLnJldHVybl92YWx1ZSA9IFRydWUKKworICAgIGRlZiB0ZXN0X2hhbmRsZShzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisKKyAgICAgICAgYXJncyA9ICgpCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYWxsYmFjaywgYXJncywgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGguX2NhbGxiYWNrLCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhoLl9hcmdzLCBhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGguX2NhbmNlbGxlZCkKKworICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoLl9jYW5jZWxsZWQpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfZnJvbV9oYW5kbGUoc2VsZik6CisgICAgICAgIGRlZiBjYWxsYmFjaygqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYXJncworICAgICAgICBoMSA9IGFzeW5jaW8uSGFuZGxlKGNhbGxiYWNrLCAoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgQXNzZXJ0aW9uRXJyb3IsIGFzeW5jaW8uSGFuZGxlLCBoMSwgKCksIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrX3dpdGhfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcCA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyID0gbW9jay5Nb2NrKCkKKworICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUoY2FsbGJhY2ssICgpLCBzZWxmLmxvb3ApCisgICAgICAgIGguX3J1bigpCisKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHsKKyAgICAgICAgICAgICdtZXNzYWdlJzogdGVzdF91dGlscy5Nb2NrUGF0dGVybignRXhjZXB0aW9uIGluIGNhbGxiYWNrLionKSwKKyAgICAgICAgICAgICdleGNlcHRpb24nOiBtb2NrLkFOWSwKKyAgICAgICAgICAgICdoYW5kbGUnOiBoLAorICAgICAgICAgICAgJ3NvdXJjZV90cmFjZWJhY2snOiBoLl9zb3VyY2VfdHJhY2ViYWNrLAorICAgICAgICB9KQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3dlYWtyZWYoc2VsZik6CisgICAgICAgIHdkID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGxhbWJkYTogTm9uZSwgKCksIHNlbGYubG9vcCkKKyAgICAgICAgd2RbJ2gnXSA9IGggICMgV291bGQgZmFpbCB3aXRob3V0IF9fd2Vha3JlZl9fIHNsb3QuCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmdldF9kZWJ1Zy5yZXR1cm5fdmFsdWUgPSBGYWxzZQorCisgICAgICAgICMgc2ltcGxlIGZ1bmN0aW9uCisgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShub29wLCAoMSwgMiksIHNlbGYubG9vcCkKKyAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShub29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaCksCisgICAgICAgICAgICAgICAgICAgICAgICAnPEhhbmRsZSBub29wKDEsIDIpIGF0ICVzOiVzPicKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBsaW5lbm8pKQorCisgICAgICAgICMgY2FuY2VsbGVkIGhhbmRsZQorICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc8SGFuZGxlIGNhbmNlbGxlZD4nKQorCisgICAgICAgICMgZGVjb3JhdGVkIGZ1bmN0aW9uCisgICAgICAgIGNiID0gYXN5bmNpby5jb3JvdXRpbmUobm9vcCkKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGNiLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaCksCisgICAgICAgICAgICAgICAgICAgICAgICAnPEhhbmRsZSBub29wKCkgYXQgJXM6JXM+JworICAgICAgICAgICAgICAgICAgICAgICAgJSAoZmlsZW5hbWUsIGxpbmVubykpCisKKyAgICAgICAgIyBwYXJ0aWFsIGZ1bmN0aW9uCisgICAgICAgIGNiID0gZnVuY3Rvb2xzLnBhcnRpYWwobm9vcCwgMSwgMikKKyAgICAgICAgaCA9IGFzeW5jaW8uSGFuZGxlKGNiLCAoMywpLCBzZWxmLmxvb3ApCisgICAgICAgIHJlZ2V4ID0gKHInXjxIYW5kbGUgbm9vcFwoMSwgMlwpXCgzXCkgYXQgJXM6JXM+JCcKKyAgICAgICAgICAgICAgICAgJSAocmUuZXNjYXBlKGZpbGVuYW1lKSwgbGluZW5vKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGgpLCByZWdleCkKKworICAgICAgICAjIHBhcnRpYWwgbWV0aG9kCisgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDQpOgorICAgICAgICAgICAgbWV0aG9kID0gSGFuZGxlVGVzdHMudGVzdF9oYW5kbGVfcmVwcgorICAgICAgICAgICAgY2IgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChtZXRob2QpCisgICAgICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gdGVzdF91dGlscy5nZXRfZnVuY3Rpb25fc291cmNlKG1ldGhvZCkKKyAgICAgICAgICAgIGggPSBhc3luY2lvLkhhbmRsZShjYiwgKCksIHNlbGYubG9vcCkKKworICAgICAgICAgICAgY2JfcmVnZXggPSByJzxmdW5jdGlvbiBIYW5kbGVUZXN0cy50ZXN0X2hhbmRsZV9yZXByIC4qPicKKyAgICAgICAgICAgIGNiX3JlZ2V4ID0gKHInZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2RcKCVzLCAsIFwpXChcKScgJSBjYl9yZWdleCkKKyAgICAgICAgICAgIHJlZ2V4ID0gKHInXjxIYW5kbGUgJXMgYXQgJXM6JXM+JCcKKyAgICAgICAgICAgICAgICAgICAgICUgKGNiX3JlZ2V4LCByZS5lc2NhcGUoZmlsZW5hbWUpLCBsaW5lbm8pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGgpLCByZWdleCkKKworICAgIGRlZiB0ZXN0X2hhbmRsZV9yZXByX2RlYnVnKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuZ2V0X2RlYnVnLnJldHVybl92YWx1ZSA9IFRydWUKKworICAgICAgICAjIHNpbXBsZSBmdW5jdGlvbgorICAgICAgICBjcmVhdGVfZmlsZW5hbWUgPSBfX2ZpbGVfXworICAgICAgICBjcmVhdGVfbGluZW5vID0gc3lzLl9nZXRmcmFtZSgpLmZfbGluZW5vICsgMQorICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUobm9vcCwgKDEsIDIpLCBzZWxmLmxvb3ApCisgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8gPSB0ZXN0X3V0aWxzLmdldF9mdW5jdGlvbl9zb3VyY2Uobm9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJzxIYW5kbGUgbm9vcCgxLCAyKSBhdCAlczolcyBjcmVhdGVkIGF0ICVzOiVzPicKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBsaW5lbm8sIGNyZWF0ZV9maWxlbmFtZSwgY3JlYXRlX2xpbmVubykpCisKKyAgICAgICAgIyBjYW5jZWxsZWQgaGFuZGxlCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHJlcHIoaCksCisgICAgICAgICAgICAnPEhhbmRsZSBjYW5jZWxsZWQgbm9vcCgxLCAyKSBhdCAlczolcyBjcmVhdGVkIGF0ICVzOiVzPicKKyAgICAgICAgICAgICUgKGZpbGVuYW1lLCBsaW5lbm8sIGNyZWF0ZV9maWxlbmFtZSwgY3JlYXRlX2xpbmVubykpCisKKyAgICAgICAgIyBkb3VibGUgY2FuY2VsbGF0aW9uIHdvbid0IG92ZXJ3cml0ZSBfcmVwcgorICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZXByKGgpLAorICAgICAgICAgICAgJzxIYW5kbGUgY2FuY2VsbGVkIG5vb3AoMSwgMikgYXQgJXM6JXMgY3JlYXRlZCBhdCAlczolcz4nCisgICAgICAgICAgICAlIChmaWxlbmFtZSwgbGluZW5vLCBjcmVhdGVfZmlsZW5hbWUsIGNyZWF0ZV9saW5lbm8pKQorCisgICAgZGVmIHRlc3RfaGFuZGxlX3NvdXJjZV90cmFjZWJhY2soc2VsZik6CisgICAgICAgIGxvb3AgPSBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgbG9vcC5zZXRfZGVidWcoVHJ1ZSkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChsb29wKQorCisgICAgICAgIGRlZiBjaGVja19zb3VyY2VfdHJhY2ViYWNrKGgpOgorICAgICAgICAgICAgbGluZW5vID0gc3lzLl9nZXRmcmFtZSgxKS5mX2xpbmVubyAtIDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLl9zb3VyY2VfdHJhY2ViYWNrLCBsaXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLl9zb3VyY2VfdHJhY2ViYWNrWy0xXVs6M10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2ZpbGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X2hhbmRsZV9zb3VyY2VfdHJhY2ViYWNrJykpCisKKyAgICAgICAgIyBjYWxsX3Nvb24KKyAgICAgICAgaCA9IGxvb3AuY2FsbF9zb29uKG5vb3ApCisgICAgICAgIGNoZWNrX3NvdXJjZV90cmFjZWJhY2soaCkKKworICAgICAgICAjIGNhbGxfc29vbl90aHJlYWRzYWZlCisgICAgICAgIGggPSBsb29wLmNhbGxfc29vbl90aHJlYWRzYWZlKG5vb3ApCisgICAgICAgIGNoZWNrX3NvdXJjZV90cmFjZWJhY2soaCkKKworICAgICAgICAjIGNhbGxfbGF0ZXIKKyAgICAgICAgaCA9IGxvb3AuY2FsbF9sYXRlcigwLCBub29wKQorICAgICAgICBjaGVja19zb3VyY2VfdHJhY2ViYWNrKGgpCisKKyAgICAgICAgIyBjYWxsX2F0CisgICAgICAgIGggPSBsb29wLmNhbGxfbGF0ZXIoMCwgbm9vcCkKKyAgICAgICAgY2hlY2tfc291cmNlX3RyYWNlYmFjayhoKQorCisKK2NsYXNzIFRpbWVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBtb2NrLk1vY2soKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgd2hlbiA9IHRpbWUubW9ub3RvbmljKCkKKyAgICAgICAgaCA9IGFzeW5jaW8uVGltZXJIYW5kbGUod2hlbiwgbGFtYmRhOiBGYWxzZSwgKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vY2suTW9jaygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goaCksIGhhc2god2hlbikpCisKKyAgICBkZWYgdGVzdF90aW1lcihzZWxmKToKKyAgICAgICAgZGVmIGNhbGxiYWNrKCphcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisKKyAgICAgICAgYXJncyA9ICgxLCAyLCAzKQorICAgICAgICB3aGVuID0gdGltZS5tb25vdG9uaWMoKQorICAgICAgICBoID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgYXJncywgbW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaC5fY2FsbGJhY2ssIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydElzKGguX2FyZ3MsIGFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaC5fY2FuY2VsbGVkKQorCisgICAgICAgICMgY2FuY2VsCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGguX2NhbmNlbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoaC5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGguX2FyZ3MpCisKKyAgICAgICAgIyB3aGVuIGNhbm5vdCBiZSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY2lvLlRpbWVySGFuZGxlLCBOb25lLCBjYWxsYmFjaywgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfdGltZXJfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLmdldF9kZWJ1Zy5yZXR1cm5fdmFsdWUgPSBGYWxzZQorCisgICAgICAgICMgc2ltcGxlIGZ1bmN0aW9uCisgICAgICAgIGggPSBhc3luY2lvLlRpbWVySGFuZGxlKDEyMywgbm9vcCwgKCksIHNlbGYubG9vcCkKKyAgICAgICAgc3JjID0gdGVzdF91dGlscy5nZXRfZnVuY3Rpb25fc291cmNlKG5vb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc8VGltZXJIYW5kbGUgd2hlbj0xMjMgbm9vcCgpIGF0ICVzOiVzPicgJSBzcmMpCisKKyAgICAgICAgIyBjYW5jZWxsZWQgaGFuZGxlCisgICAgICAgIGguY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgJzxUaW1lckhhbmRsZSBjYW5jZWxsZWQgd2hlbj0xMjM+JykKKworICAgIGRlZiB0ZXN0X3RpbWVyX3JlcHJfZGVidWcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5nZXRfZGVidWcucmV0dXJuX3ZhbHVlID0gVHJ1ZQorCisgICAgICAgICMgc2ltcGxlIGZ1bmN0aW9uCisgICAgICAgIGNyZWF0ZV9maWxlbmFtZSA9IF9fZmlsZV9fCisgICAgICAgIGNyZWF0ZV9saW5lbm8gPSBzeXMuX2dldGZyYW1lKCkuZl9saW5lbm8gKyAxCisgICAgICAgIGggPSBhc3luY2lvLlRpbWVySGFuZGxlKDEyMywgbm9vcCwgKCksIHNlbGYubG9vcCkKKyAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShub29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoaCksCisgICAgICAgICAgICAgICAgICAgICAgICAnPFRpbWVySGFuZGxlIHdoZW49MTIzIG5vb3AoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAnYXQgJXM6JXMgY3JlYXRlZCBhdCAlczolcz4nCisgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgbGluZW5vLCBjcmVhdGVfZmlsZW5hbWUsIGNyZWF0ZV9saW5lbm8pKQorCisgICAgICAgICMgY2FuY2VsbGVkIGhhbmRsZQorICAgICAgICBoLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICc8VGltZXJIYW5kbGUgY2FuY2VsbGVkIHdoZW49MTIzIG5vb3AoKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAnYXQgJXM6JXMgY3JlYXRlZCBhdCAlczolcz4nCisgICAgICAgICAgICAgICAgICAgICAgICAlIChmaWxlbmFtZSwgbGluZW5vLCBjcmVhdGVfZmlsZW5hbWUsIGNyZWF0ZV9saW5lbm8pKQorCisKKyAgICBkZWYgdGVzdF90aW1lcl9jb21wYXJpc29uKHNlbGYpOgorICAgICAgICBkZWYgY2FsbGJhY2soKmFyZ3MpOgorICAgICAgICAgICAgcmV0dXJuIGFyZ3MKKworICAgICAgICB3aGVuID0gdGltZS5tb25vdG9uaWMoKQorCisgICAgICAgIGgxID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCksIHNlbGYubG9vcCkKKyAgICAgICAgaDIgPSBhc3luY2lvLlRpbWVySGFuZGxlKHdoZW4sIGNhbGxiYWNrLCAoKSwgc2VsZi5sb29wKQorICAgICAgICAjIFRPRE86IFVzZSBhc3NlcnRMZXNzIGV0Yy4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSA8IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgyIDwgaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA8PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgyIDw9IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID4gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPiBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxID49IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPj0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSA9PSBoMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoMSAhPSBoMikKKworICAgICAgICBoMi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID09IGgyKQorCisgICAgICAgIGgxID0gYXN5bmNpby5UaW1lckhhbmRsZSh3aGVuLCBjYWxsYmFjaywgKCksIHNlbGYubG9vcCkKKyAgICAgICAgaDIgPSBhc3luY2lvLlRpbWVySGFuZGxlKHdoZW4gKyAxMC4wLCBjYWxsYmFjaywgKCksIHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDwgaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDIgPCBoMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxIDw9IGgyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgyIDw9IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID4gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMiA+IGgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGgxID49IGgyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaDIgPj0gaDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaDEgPT0gaDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoMSAhPSBoMikKKworICAgICAgICBoMyA9IGFzeW5jaW8uSGFuZGxlKGNhbGxiYWNrLCAoKSwgc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX2VxX18oaDMpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vdEltcGxlbWVudGVkLCBoMS5fX25lX18oaDMpKQorCisKK2NsYXNzIEFic3RyYWN0RXZlbnRMb29wVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICBmID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3AoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucnVuX2ZvcmV2ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdG9wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuaXNfcnVubmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmlzX2Nsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY3JlYXRlX3Rhc2ssIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX2xhdGVyLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9hdCwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNhbGxfc29vbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnRpbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJ1bl9pbl9leGVjdXRvciwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNldF9kZWZhdWx0X2V4ZWN1dG9yLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuZ2V0YWRkcmluZm8sICdsb2NhbGhvc3QnLCA4MDgwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuZ2V0bmFtZWluZm8sICgnbG9jYWxob3N0JywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jcmVhdGVfY29ubmVjdGlvbiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNyZWF0ZV9zZXJ2ZXIsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5jcmVhdGVfZGF0YWdyYW1fZW5kcG9pbnQsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5hZGRfcmVhZGVyLCAxLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AucmVtb3ZlX3JlYWRlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF93cml0ZXIsIDEsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5yZW1vdmVfd3JpdGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc29ja19yZWN2LCBmLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNvY2tfc2VuZGFsbCwgZiwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX2Nvbm5lY3QsIGYsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zb2NrX2FjY2VwdCwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmFkZF9zaWduYWxfaGFuZGxlciwgMSwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlciwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmNvbm5lY3RfcmVhZF9waXBlLCBmLAorICAgICAgICAgICAgbW9jay5zZW50aW5lbC5waXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY29ubmVjdF93cml0ZV9waXBlLCBmLAorICAgICAgICAgICAgbW9jay5zZW50aW5lbC5waXBlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3Auc3VicHJvY2Vzc19zaGVsbCwgZiwKKyAgICAgICAgICAgIG1vY2suc2VudGluZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zdWJwcm9jZXNzX2V4ZWMsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgbG9vcC5kZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIGxvb3AuY2FsbF9leGNlcHRpb25faGFuZGxlciwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLmdldF9kZWJ1ZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCBsb29wLnNldF9kZWJ1ZywgZikKKworCitjbGFzcyBQcm90b2NvbHNBYnNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgZiA9IG1vY2suTW9jaygpCisgICAgICAgIHAgPSBhc3luY2lvLlByb3RvY29sKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuY29ubmVjdGlvbl9sb3N0KGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLmRhdGFfcmVjZWl2ZWQoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHAuZW9mX3JlY2VpdmVkKCkpCisKKyAgICAgICAgZHAgPSBhc3luY2lvLkRhdGFncmFtUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShkcC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmNvbm5lY3Rpb25fbG9zdChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZHAuZXJyb3JfcmVjZWl2ZWQoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRwLmRhdGFncmFtX3JlY2VpdmVkKGYsIGYpKQorCisgICAgICAgIHNwID0gYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2woKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5jb25uZWN0aW9uX21hZGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwLmNvbm5lY3Rpb25fbG9zdChmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucGlwZV9kYXRhX3JlY2VpdmVkKDEsIGYpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcC5waXBlX2Nvbm5lY3Rpb25fbG9zdCgxLCBmKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3AucHJvY2Vzc19leGl0ZWQoKSkKKworCitjbGFzcyBQb2xpY3lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ldmVudF9sb29wX3BvbGljeShzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5BYnN0cmFjdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5LnNldF9ldmVudF9sb29wLCBvYmplY3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcG9saWN5Lm5ld19ldmVudF9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll9sb2NhbC5fbG9vcCkKKworICAgICAgICBsb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb3AsIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwb2xpY3kuX2xvY2FsLl9sb29wLCBsb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX2NhbGxzX3NldF9ldmVudF9sb29wKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3QoCisgICAgICAgICAgICAgICAgcG9saWN5LCAic2V0X2V2ZW50X2xvb3AiLAorICAgICAgICAgICAgICAgIHdyYXBzPXBvbGljeS5zZXRfZXZlbnRfbG9vcCkgYXMgbV9zZXRfZXZlbnRfbG9vcDoKKworICAgICAgICAgICAgbG9vcCA9IHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpCisKKyAgICAgICAgICAgICMgcG9saWN5Ll9sb2NhbC5fbG9vcCBtdXN0IGJlIHNldCB0aHJvdWdoIC5zZXRfZXZlbnRfbG9vcCgpCisgICAgICAgICAgICAjICh0aGUgdW5peCBEZWZhdWx0RXZlbnRMb29wUG9saWN5IG5lZWRzIHRoaXMgY2FsbCB0byBhdHRhY2gKKyAgICAgICAgICAgICMgdGhlIGNoaWxkIHdhdGNoZXIgY29ycmVjdGx5KQorICAgICAgICAgICAgbV9zZXRfZXZlbnRfbG9vcC5hc3NlcnRfY2FsbGVkX3dpdGgobG9vcCkKKworICAgICAgICBsb29wLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2dldF9ldmVudF9sb29wX2FmdGVyX3NldF9ub25lKHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBwb2xpY3kuZ2V0X2V2ZW50X2xvb3ApCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5ldmVudHMudGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkJykKKyAgICBkZWYgdGVzdF9nZXRfZXZlbnRfbG9vcF90aHJlYWQoc2VsZiwgbV9jdXJyZW50X3RocmVhZCk6CisKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCkKKworICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgdGguam9pbigpCisKKyAgICBkZWYgdGVzdF9uZXdfZXZlbnRfbG9vcChzZWxmKToKKyAgICAgICAgcG9saWN5ID0gYXN5bmNpby5EZWZhdWx0RXZlbnRMb29wUG9saWN5KCkKKworICAgICAgICBsb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGxvb3AsIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3ApCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfc2V0X2V2ZW50X2xvb3Aoc2VsZik6CisgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisgICAgICAgIG9sZF9sb29wID0gcG9saWN5LmdldF9ldmVudF9sb29wKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgcG9saWN5LnNldF9ldmVudF9sb29wLCBvYmplY3QoKSkKKworICAgICAgICBsb29wID0gcG9saWN5Lm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgcG9saWN5LnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcCwgcG9saWN5LmdldF9ldmVudF9sb29wKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob2xkX2xvb3AsIHBvbGljeS5nZXRfZXZlbnRfbG9vcCgpKQorICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgb2xkX2xvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2V2ZW50X2xvb3BfcG9saWN5KHNlbGYpOgorICAgICAgICBwb2xpY3kgPSBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb2xpY3ksIGFzeW5jaW8uQWJzdHJhY3RFdmVudExvb3BQb2xpY3kpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5LCBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpKQorCisgICAgZGVmIHRlc3Rfc2V0X2V2ZW50X2xvb3BfcG9saWN5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIEFzc2VydGlvbkVycm9yLCBhc3luY2lvLnNldF9ldmVudF9sb29wX3BvbGljeSwgb2JqZWN0KCkpCisKKyAgICAgICAgb2xkX3BvbGljeSA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKworICAgICAgICBwb2xpY3kgPSBhc3luY2lvLkRlZmF1bHRFdmVudExvb3BQb2xpY3koKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wX3BvbGljeShwb2xpY3kpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5LCBhc3luY2lvLmdldF9ldmVudF9sb29wX3BvbGljeSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHBvbGljeSwgb2xkX3BvbGljeSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfZnV0dXJlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmZGZmMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X2Z1dHVyZXMucHkKQEAgLTAsMCArMSw0NzQgQEAKKyIiIlRlc3RzIGZvciBmdXR1cmVzLnB5LiIiIgorCitpbXBvcnQgY29uY3VycmVudC5mdXR1cmVzCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCit0cnk6CisgICAgZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3N1cHBvcnQgYXMgc3VwcG9ydAorCisKK2RlZiBfZmFrZWZ1bmMoZik6CisgICAgcmV0dXJuIGYKKworZGVmIGZpcnN0X2NiKCk6CisgICAgcGFzcworCitkZWYgbGFzdF9jYigpOgorICAgIHBhc3MKKworCitjbGFzcyBGdXR1cmVUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYubG9vcC5jbG9zZSkKKworICAgIGRlZiB0ZXN0X2luaXRpYWxfc3RhdGUoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3RfaW5pdF9jb25zdHJ1Y3Rvcl9kZWZhdWx0X2xvb3Aoc2VsZik6CisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUoKQorICAgICAgICBzZWxmLmFzc2VydElzKGYuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3Bvc2l0aW9uYWwoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIEZ1dHVyZSBkb2Vzbid0IGFjY2VwdCBhIHBvc2l0aW9uYWwgYXJndW1lbnQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhc3luY2lvLkZ1dHVyZSwgNDIpCisKKyAgICBkZWYgdGVzdF9jYW5jZWwoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2FuY2VsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIGYucmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBmLmV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfcmVzdWx0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9leGNlcHRpb24sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdChzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnJlc3VsdCkKKworICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVzdWx0KCksIDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXhjZXB0aW9uKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X3Jlc3VsdCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5zZXRfZXhjZXB0aW9uLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5JbnZhbGlkU3RhdGVFcnJvciwgZi5leGNlcHRpb24pCisKKyAgICAgICAgZi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZi5yZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5leGNlcHRpb24oKSwgZXhjKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkludmFsaWRTdGF0ZUVycm9yLCBmLnNldF9yZXN1bHQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW52YWxpZFN0YXRlRXJyb3IsIGYuc2V0X2V4Y2VwdGlvbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNhbmNlbCgpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uX2NsYXNzKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBSdW50aW1lRXJyb3IpCisKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tX3R3aWNlKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZGVmIGZpeHR1cmUoKToKKyAgICAgICAgICAgIHlpZWxkICdBJworICAgICAgICAgICAgeCA9IHlpZWxkIGZyb20gZgorICAgICAgICAgICAgeWllbGQgJ0InLCB4CisgICAgICAgICAgICB5ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICB5aWVsZCAnQycsIHkKKworICAgICAgICBnID0gZml4dHVyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgJ0EnKSAgIyB5aWVsZCAnQScuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgZikgICMgRmlyc3QgeWllbGQgZnJvbSBmLgorICAgICAgICBmLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgKCdCJywgNDIpKSAgIyB5aWVsZCAnQicsIHguCisgICAgICAgICMgVGhlIHNlY29uZCAieWllbGQgZnJvbSBmIiBkb2VzIG5vdCB5aWVsZCBmLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICgnQycsIDQyKSkgICMgeWllbGQgJ0MnLCB5LgorCisgICAgZGVmIHRlc3RfZnV0dXJlX3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoVHJ1ZSkKKyAgICAgICAgZl9wZW5kaW5nX2RlYnVnID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZyYW1lID0gZl9wZW5kaW5nX2RlYnVnLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9wZW5kaW5nX2RlYnVnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBwZW5kaW5nIGNyZWF0ZWQgYXQgJXM6JXM+JworICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZyYW1lWzBdLCBmcmFtZVsxXSkpCisgICAgICAgIGZfcGVuZGluZ19kZWJ1Zy5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisgICAgICAgIGZfcGVuZGluZyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9wZW5kaW5nKSwgJzxGdXR1cmUgcGVuZGluZz4nKQorICAgICAgICBmX3BlbmRpbmcuY2FuY2VsKCkKKworICAgICAgICBmX2NhbmNlbGxlZCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2NhbmNlbGxlZC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9jYW5jZWxsZWQpLCAnPEZ1dHVyZSBjYW5jZWxsZWQ+JykKKworICAgICAgICBmX3Jlc3VsdCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX3Jlc3VsdC5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX3Jlc3VsdCksICc8RnV0dXJlIGZpbmlzaGVkIHJlc3VsdD00PicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZl9yZXN1bHQucmVzdWx0KCksIDQpCisKKyAgICAgICAgZXhjID0gUnVudGltZUVycm9yKCkKKyAgICAgICAgZl9leGNlcHRpb24gPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9leGNlcHRpb24uc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX2V4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxGdXR1cmUgZmluaXNoZWQgZXhjZXB0aW9uPVJ1bnRpbWVFcnJvcigpPicpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZl9leGNlcHRpb24uZXhjZXB0aW9uKCksIGV4YykKKworICAgICAgICBkZWYgZnVuY19yZXByKGZ1bmMpOgorICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShmdW5jKQorICAgICAgICAgICAgdGV4dCA9ICclcygpIGF0ICVzOiVzJyAlIChmdW5jLl9fcXVhbG5hbWVfXywgZmlsZW5hbWUsIGxpbmVubykKKyAgICAgICAgICAgIHJldHVybiByZS5lc2NhcGUodGV4dCkKKworICAgICAgICBmX29uZV9jYWxsYmFja3MgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9vbmVfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKF9mYWtlZnVuYykKKyAgICAgICAgZmFrZV9yZXByID0gZnVuY19yZXByKF9mYWtlZnVuYykKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGZfb25lX2NhbGxiYWNrcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgcic8RnV0dXJlIHBlbmRpbmcgY2I9XFslc1xdPicgJSBmYWtlX3JlcHIpCisgICAgICAgIGZfb25lX2NhbGxiYWNrcy5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZl9vbmVfY2FsbGJhY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBjYW5jZWxsZWQ+JykKKworICAgICAgICBmX3R3b19jYWxsYmFja3MgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl90d29fY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKGZpcnN0X2NiKQorICAgICAgICBmX3R3b19jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2sobGFzdF9jYikKKyAgICAgICAgZmlyc3RfcmVwciA9IGZ1bmNfcmVwcihmaXJzdF9jYikKKyAgICAgICAgbGFzdF9yZXByID0gZnVuY19yZXByKGxhc3RfY2IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihmX3R3b19jYWxsYmFja3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHInPEZ1dHVyZSBwZW5kaW5nIGNiPVxbJXMsICVzXF0+JworICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpcnN0X3JlcHIsIGxhc3RfcmVwcikpCisKKyAgICAgICAgZl9tYW55X2NhbGxiYWNrcyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKGZpcnN0X2NiKQorICAgICAgICBmb3IgaSBpbiByYW5nZSg4KToKKyAgICAgICAgICAgIGZfbWFueV9jYWxsYmFja3MuYWRkX2RvbmVfY2FsbGJhY2soX2Zha2VmdW5jKQorICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmFkZF9kb25lX2NhbGxiYWNrKGxhc3RfY2IpCisgICAgICAgIGNiX3JlZ2V4ID0gciclcywgPDggbW9yZT4sICVzJyAlIChmaXJzdF9yZXByLCBsYXN0X3JlcHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgocmVwcihmX21hbnlfY2FsbGJhY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByJzxGdXR1cmUgcGVuZGluZyBjYj1cWyVzXF0+JyAlIGNiX3JlZ2V4KQorICAgICAgICBmX21hbnlfY2FsbGJhY2tzLmNhbmNlbCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmX21hbnlfY2FsbGJhY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPEZ1dHVyZSBjYW5jZWxsZWQ+JykKKworICAgIGRlZiB0ZXN0X2NvcHlfc3RhdGUoc2VsZik6CisgICAgICAgIGZyb20gYXN5bmNpby5mdXR1cmVzIGltcG9ydCBfY29weV9mdXR1cmVfc3RhdGUKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuc2V0X3Jlc3VsdCgxMCkKKworICAgICAgICBuZXdmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIF9jb3B5X2Z1dHVyZV9zdGF0ZShmLCBuZXdmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Zi5yZXN1bHQoKSwgMTApCisKKyAgICAgICAgZl9leGNlcHRpb24gPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZl9leGNlcHRpb24uc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoKSkKKworICAgICAgICBuZXdmX2V4Y2VwdGlvbiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBfY29weV9mdXR1cmVfc3RhdGUoZl9leGNlcHRpb24sIG5ld2ZfZXhjZXB0aW9uKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmV3Zl9leGNlcHRpb24uZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIG5ld2ZfZXhjZXB0aW9uLnJlc3VsdCkKKworICAgICAgICBmX2NhbmNlbGxlZCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX2NhbmNlbGxlZC5jYW5jZWwoKQorCisgICAgICAgIG5ld2ZfY2FuY2VsbGVkID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIF9jb3B5X2Z1dHVyZV9zdGF0ZShmX2NhbmNlbGxlZCwgbmV3Zl9jYW5jZWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuZXdmX2NhbmNlbGxlZC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBhcmcxLCBhcmcyID0gY29ybygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIHRlc3QpCisgICAgICAgIGZ1dC5jYW5jZWwoKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfYWJhbmRvbmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RiX2xvZ2dlcl9yZXN1bHRfdW5yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoNDIpCisgICAgICAgIGRlbCBmdXQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX2xvZy5lcnJvci5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3RiX2xvZ2dlcl9yZXN1bHRfcmV0cmlldmVkKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KDQyKQorICAgICAgICBmdXQucmVzdWx0KCkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl91bnJldHJpZXZlZChzZWxmLCBtX2xvZyk6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihSdW50aW1lRXJyb3IoJ2Jvb20nKSkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfdGJfbG9nZ2VyX2V4Y2VwdGlvbl9yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCdib29tJykpCisgICAgICAgIGZ1dC5leGNlcHRpb24oKQorICAgICAgICBkZWwgZnV0CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9sb2cuZXJyb3IuY2FsbGVkKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF90Yl9sb2dnZXJfZXhjZXB0aW9uX3Jlc3VsdF9yZXRyaWV2ZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCdib29tJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgZnV0LnJlc3VsdCkKKyAgICAgICAgZGVsIGZ1dAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlKHNlbGYpOgorCisgICAgICAgIGRlZiBydW4oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAoYXJnLCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgIGV4ID0gY29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcigxKQorICAgICAgICBmMSA9IGV4LnN1Ym1pdChydW4sICdvaScpCisgICAgICAgIGYyID0gYXN5bmNpby53cmFwX2Z1dHVyZShmMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcywgaWRlbnQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZjIsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgJ29pJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZGVudCwgdGhyZWFkaW5nLmdldF9pZGVudCgpKQorCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmVfZnV0dXJlKHNlbGYpOgorICAgICAgICBmMSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZjEsIGYyKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uZnV0dXJlcy5ldmVudHMnKQorICAgIGRlZiB0ZXN0X3dyYXBfZnV0dXJlX3VzZV9nbG9iYWxfbG9vcChzZWxmLCBtX2V2ZW50cyk6CisgICAgICAgIGRlZiBydW4oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAoYXJnLCB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgIGV4ID0gY29uY3VycmVudC5mdXR1cmVzLlRocmVhZFBvb2xFeGVjdXRvcigxKQorICAgICAgICBmMSA9IGV4LnN1Ym1pdChydW4sICdvaScpCisgICAgICAgIGYyID0gYXN5bmNpby53cmFwX2Z1dHVyZShmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtX2V2ZW50cy5nZXRfZXZlbnRfbG9vcC5yZXR1cm5fdmFsdWUsIGYyLl9sb29wKQorCisgICAgZGVmIHRlc3Rfd3JhcF9mdXR1cmVfY2FuY2VsKHNlbGYpOgorICAgICAgICBmMSA9IGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUoKQorICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmMi5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjIuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF93cmFwX2Z1dHVyZV9jYW5jZWwyKHNlbGYpOgorICAgICAgICBmMSA9IGNvbmN1cnJlbnQuZnV0dXJlcy5GdXR1cmUoKQorICAgICAgICBmMiA9IGFzeW5jaW8ud3JhcF9mdXR1cmUoZjEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmMS5zZXRfcmVzdWx0KDQyKQorICAgICAgICBmMi5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMS5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMS5yZXN1bHQoKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMi5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2Z1dHVyZV9zb3VyY2VfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisKKyAgICAgICAgZnV0dXJlID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGxpbmVubyA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2xpbmVubyAtIDEKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1dHVyZS5fc291cmNlX3RyYWNlYmFjaywgbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdXR1cmUuX3NvdXJjZV90cmFjZWJhY2tbLTFdWzozXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoX19maWxlX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RfZnV0dXJlX3NvdXJjZV90cmFjZWJhY2snKSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIGNoZWNrX2Z1dHVyZV9leGNlcHRpb25fbmV2ZXJfcmV0cmlldmVkKHNlbGYsIGRlYnVnLCBtX2xvZyk6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoZGVidWcpCisKKyAgICAgICAgZGVmIG1lbW9yeV9lcnJvcigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIE1lbW9yeUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICByZXR1cm4gZXhjCisgICAgICAgIGV4YyA9IG1lbW9yeV9lcnJvcigpCisKKyAgICAgICAgZnV0dXJlID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGlmIGRlYnVnOgorICAgICAgICAgICAgc291cmNlX3RyYWNlYmFjayA9IGZ1dHVyZS5fc291cmNlX3RyYWNlYmFjaworICAgICAgICBmdXR1cmUuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIGZ1dHVyZSA9IE5vbmUKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+PSAoMywgNCk6CisgICAgICAgICAgICBpZiBkZWJ1ZzoKKyAgICAgICAgICAgICAgICBmcmFtZSA9IHNvdXJjZV90cmFjZWJhY2tbLTFdCisgICAgICAgICAgICAgICAgcmVnZXggPSAocideRnV0dXJlIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidmdXR1cmU6IDxGdXR1cmUgZmluaXNoZWQgZXhjZXB0aW9uPU1lbW9yeUVycm9yXChcKSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInY3JlYXRlZCBhdCB7ZmlsZW5hbWV9OntsaW5lbm99PlxuJworICAgICAgICAgICAgICAgICAgICAgICAgIHInc291cmNlX3RyYWNlYmFjazogT2JqZWN0ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByJ2NyZWF0ZWQgYXQgXChtb3N0IHJlY2VudCBjYWxsIGxhc3RcKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJyAgRmlsZScKKyAgICAgICAgICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcicgIEZpbGUgIntmaWxlbmFtZX0iLCBsaW5lIHtsaW5lbm99LCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidpbiBjaGVja19mdXR1cmVfZXhjZXB0aW9uX25ldmVyX3JldHJpZXZlZFxuJworICAgICAgICAgICAgICAgICAgICAgICAgIHInICAgIGZ1dHVyZSA9IGFzeW5jaW9cLkZ1dHVyZVwobG9vcD1zZWxmXC5sb29wXCkkJworICAgICAgICAgICAgICAgICAgICAgICAgICkuZm9ybWF0KGZpbGVuYW1lPXJlLmVzY2FwZShmcmFtZVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vPWZyYW1lWzFdKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZWdleCA9IChyJ15GdXR1cmUgZXhjZXB0aW9uIHdhcyBuZXZlciByZXRyaWV2ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJ2Z1dHVyZTogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInPEZ1dHVyZSBmaW5pc2hlZCBleGNlcHRpb249TWVtb3J5RXJyb3JcKFwpPiQnCisgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgZXhjX2luZm8gPSAodHlwZShleGMpLCBleGMsIGV4Yy5fX3RyYWNlYmFja19fKQorICAgICAgICAgICAgbV9sb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgobW9jay5BTlksIGV4Y19pbmZvPWV4Y19pbmZvKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgZGVidWc6CisgICAgICAgICAgICAgICAgZnJhbWUgPSBzb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICAgICAgICAgIHJlZ2V4ID0gKHInXkZ1dHVyZS9UYXNrIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidGdXR1cmUvVGFzayBjcmVhdGVkIGF0IFwobW9zdCByZWNlbnQgY2FsbCBsYXN0XCk6XG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcicgIEZpbGUnCisgICAgICAgICAgICAgICAgICAgICAgICAgcicuKlxuJworICAgICAgICAgICAgICAgICAgICAgICAgIHInICBGaWxlICJ7ZmlsZW5hbWV9IiwgbGluZSB7bGluZW5vfSwgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHInaW4gY2hlY2tfZnV0dXJlX2V4Y2VwdGlvbl9uZXZlcl9yZXRyaWV2ZWRcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJyAgICBmdXR1cmUgPSBhc3luY2lvXC5GdXR1cmVcKGxvb3A9c2VsZlwubG9vcFwpXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidUcmFjZWJhY2sgXChtb3N0IHJlY2VudCBjYWxsIGxhc3RcKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidNZW1vcnlFcnJvciQnCisgICAgICAgICAgICAgICAgICAgICAgICAgKS5mb3JtYXQoZmlsZW5hbWU9cmUuZXNjYXBlKGZyYW1lWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lbm89ZnJhbWVbMV0pCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlZ2V4ID0gKHInXkZ1dHVyZS9UYXNrIGV4Y2VwdGlvbiB3YXMgbmV2ZXIgcmV0cmlldmVkXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidUcmFjZWJhY2sgXChtb3N0IHJlY2VudCBjYWxsIGxhc3RcKTpcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICByJy4qXG4nCisgICAgICAgICAgICAgICAgICAgICAgICAgcidNZW1vcnlFcnJvciQnCisgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgbV9sb2cuZXJyb3IuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgobW9jay5BTlksIGV4Y19pbmZvPUZhbHNlKQorICAgICAgICBtZXNzYWdlID0gbV9sb2cuZXJyb3IuY2FsbF9hcmdzWzBdWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgobWVzc2FnZSwgcmUuY29tcGlsZShyZWdleCwgcmUuRE9UQUxMKSkKKworICAgIGRlZiB0ZXN0X2Z1dHVyZV9leGNlcHRpb25fbmV2ZXJfcmV0cmlldmVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Z1dHVyZV9leGNlcHRpb25fbmV2ZXJfcmV0cmlldmVkKEZhbHNlKQorCisgICAgZGVmIHRlc3RfZnV0dXJlX2V4Y2VwdGlvbl9uZXZlcl9yZXRyaWV2ZWRfZGVidWcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZnV0dXJlX2V4Y2VwdGlvbl9uZXZlcl9yZXRyaWV2ZWQoVHJ1ZSkKKworICAgIGRlZiB0ZXN0X3NldF9yZXN1bHRfdW5sZXNzX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgZnJvbSBhc3luY2lvIGltcG9ydCBmdXR1cmVzCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgZnV0dXJlcy5fc2V0X3Jlc3VsdF91bmxlc3NfY2FuY2VsbGVkKGZ1dCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYW5jZWxsZWQoKSkKKworCitjbGFzcyBGdXR1cmVEb25lQ2FsbGJhY2tUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgIGRlZiBydW5fYnJpZWZseShzZWxmKToKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBkZWYgX21ha2VfY2FsbGJhY2soc2VsZiwgYmFnLCB0aGluZyk6CisgICAgICAgICMgQ3JlYXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBhcHBlbmRzIHRoaW5nIHRvIGJhZy4KKyAgICAgICAgZGVmIGJhZ19hcHBlbmRlcihmdXR1cmUpOgorICAgICAgICAgICAgYmFnLmFwcGVuZCh0aGluZykKKyAgICAgICAgcmV0dXJuIGJhZ19hcHBlbmRlcgorCisgICAgZGVmIF9uZXdfZnV0dXJlKHNlbGYpOgorICAgICAgICByZXR1cm4gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja3NfaW52b2tlZF9vbl9zZXRfcmVzdWx0KHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDQyKSkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMTcpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbXSkKKyAgICAgICAgZi5zZXRfcmVzdWx0KCdmb28nKQorCisgICAgICAgIHNlbGYucnVuX2JyaWVmbHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFnLCBbNDIsIDE3XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAnZm9vJykKKworICAgIGRlZiB0ZXN0X2NhbGxiYWNrc19pbnZva2VkX29uX3NldF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGJhZyA9IFtdCisgICAgICAgIGYgPSBzZWxmLl9uZXdfZnV0dXJlKCkKKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMTAwKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhZywgW10pCisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGYuc2V0X2V4Y2VwdGlvbihleGMpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFsxMDBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXhjZXB0aW9uKCksIGV4YykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9kb25lX2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBiYWcgPSBbXQorICAgICAgICBmID0gc2VsZi5fbmV3X2Z1dHVyZSgpCisgICAgICAgIGNiMSA9IHNlbGYuX21ha2VfY2FsbGJhY2soYmFnLCAxKQorICAgICAgICBjYjIgPSBzZWxmLl9tYWtlX2NhbGxiYWNrKGJhZywgMikKKyAgICAgICAgY2IzID0gc2VsZi5fbWFrZV9jYWxsYmFjayhiYWcsIDMpCisKKyAgICAgICAgIyBBZGQgb25lIGNiMSBhbmQgb25lIGNiMi4KKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjEpCisgICAgICAgIGYuYWRkX2RvbmVfY2FsbGJhY2soY2IyKQorCisgICAgICAgICMgT25lIGluc3RhbmNlIG9mIGNiMiByZW1vdmVkLiBOb3cgdGhlcmUncyBvbmx5IG9uZSBjYjEuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjIpLCAxKQorCisgICAgICAgICMgTmV2ZXIgaGFkIGFueSBjYjMgaW4gdGhlcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZW1vdmVfZG9uZV9jYWxsYmFjayhjYjMpLCAwKQorCisgICAgICAgICMgQWZ0ZXIgdGhpcyB0aGVyZSB3aWxsIGJlIDYgaW5zdGFuY2VzIG9mIGNiMSBhbmQgb25lIG9mIGNiMi4KKyAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjIpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICAgICAgZi5hZGRfZG9uZV9jYWxsYmFjayhjYjEpCisKKyAgICAgICAgIyBSZW1vdmUgYWxsIGluc3RhbmNlcyBvZiBjYjEuIE9uZSBjYjIgcmVtYWlucy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlbW92ZV9kb25lX2NhbGxiYWNrKGNiMSksIDYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFtdKQorICAgICAgICBmLnNldF9yZXN1bHQoJ2ZvbycpCisKKyAgICAgICAgc2VsZi5ydW5fYnJpZWZseSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYWcsIFsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAnZm9vJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9sb2Nrcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGY1ZDlkCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfbG9ja3MucHkKQEAgLTAsMCArMSw4OTIgQEAKKyIiIlRlc3RzIGZvciBsb2NrLnB5IiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworaW1wb3J0IHJlCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworU1RSX1JHWF9SRVBSID0gKAorICAgIHInXjwoP1A8Y2xhc3M+Lio/KSBvYmplY3QgYXQgKD9QPGFkZHJlc3M+Lio/KScKKyAgICByJ1xbKD9QPGV4dHJhcz4nCisgICAgcicoc2V0fHVuc2V0fGxvY2tlZHx1bmxvY2tlZCkoLHZhbHVlOlxkKT8oLHdhaXRlcnM6XGQrKT8nCisgICAgcicpXF0+XFonCispCitSR1hfUkVQUiA9IHJlLmNvbXBpbGUoU1RSX1JHWF9SRVBSKQorCisKK2NsYXNzIExvY2tUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IG1vY2suTW9jaygpCisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIGxvb3ApCisKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2NrLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2soKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvY2suX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGxvY2spLmVuZHN3aXRoKCdbdW5sb2NrZWRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihsb2NrKSkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gbG9jaworCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKGxvY2spLmVuZHN3aXRoKCdbbG9ja2VkXT4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIobG9jaykpKQorCisgICAgZGVmIHRlc3RfbG9jayhzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGxvY2spCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5sb2NrZWQoKSkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2subG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGxvY2suYWNxdWlyZSgpKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMyKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgyKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMzKHJlc3VsdCk6CisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBsb2NrLmFjcXVpcmUoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgzKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKworICAgICAgICB0MyA9IGFzeW5jaW8uVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMl0sIHJlc3VsdCkKKworICAgICAgICBsb2NrLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodDEuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQzLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZV9jYW5jZWwoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGxvY2suYWNxdWlyZSgpKSkKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKGxvY2suYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih0YXNrLmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsb2NrLl93YWl0ZXJzKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3JhY2Uoc2VsZik6CisgICAgICAgICMgU2V2ZXJhbCB0YXNrczoKKyAgICAgICAgIyAtIEEgYWNxdWlyZXMgdGhlIGxvY2sKKyAgICAgICAgIyAtIEIgaXMgYmxvY2tlZCBpbiBhcWN1aXJlKCkKKyAgICAgICAgIyAtIEMgaXMgYmxvY2tlZCBpbiBhcWN1aXJlKCkKKyAgICAgICAgIworICAgICAgICAjIE5vdywgY29uY3VycmVudGx5OgorICAgICAgICAjIC0gQiBpcyBjYW5jZWxsZWQKKyAgICAgICAgIyAtIEEgcmVsZWFzZXMgdGhlIGxvY2sKKyAgICAgICAgIworICAgICAgICAjIElmIEIncyB3YWl0ZXIgaXMgbWFya2VkIGNhbmNlbGxlZCBidXQgbm90IHlldCByZW1vdmVkIGZyb20KKyAgICAgICAgIyBfd2FpdGVycywgQSdzIHJlbGVhc2UoKSBjYWxsIHdpbGwgY3Jhc2ggd2hlbiB0cnlpbmcgdG8gc2V0CisgICAgICAgICMgQidzIHdhaXRlcjsgaW5zdGVhZCwgaXQgc2hvdWxkIG1vdmUgb24gdG8gQydzIHdhaXRlci4KKworICAgICAgICAjIFNldHVwOiBBIGhhcyB0aGUgbG9jaywgYiBhbmQgYyBhcmUgd2FpdGluZy4KKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGxvY2tpdChuYW1lLCBibG9ja2VyKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gbG9jay5hY3F1aXJlKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBibG9ja2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGJsb2NrZXIKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKworICAgICAgICBmYSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YSA9IGFzeW5jaW8uVGFzayhsb2NraXQoJ0EnLCBmYSksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvY2subG9ja2VkKCkpCisgICAgICAgIHRiID0gYXN5bmNpby5UYXNrKGxvY2tpdCgnQicsIE5vbmUpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxvY2suX3dhaXRlcnMpLCAxKQorICAgICAgICB0YyA9IGFzeW5jaW8uVGFzayhsb2NraXQoJ0MnLCBOb25lKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2NrLl93YWl0ZXJzKSwgMikKKworICAgICAgICAjIENyZWF0ZSB0aGUgcmFjZSBhbmQgY2hlY2suCisgICAgICAgICMgV2l0aG91dCB0aGUgZml4IHRoaXMgZmFpbGVkIGF0IHRoZSBsYXN0IGFzc2VydC4KKyAgICAgICAgZmEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0Yi5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jay5fd2FpdGVyc1swXS5jYW5jZWxsZWQoKSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRiLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGMuZG9uZSgpKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub3RfYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBsb2NrLnJlbGVhc2UpCisKKyAgICBkZWYgdGVzdF9yZWxlYXNlX25vX3dhaXRlcnMoc2VsZik6CisgICAgICAgIGxvY2sgPSBhc3luY2lvLkxvY2sobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUobG9jay5hY3F1aXJlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIGxvY2sucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgbG9jayA9IGFzeW5jaW8uTG9jayhsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGxvY2spCisKKyAgICAgICAgd2l0aCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfbG9jaygpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9jYW50X3JldXNlKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYWNxdWlyZV9sb2NrKCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gbG9jaykKKworICAgICAgICAjIFRoaXMgc3BlbGxzICJ5aWVsZCBmcm9tIGxvY2siIG91dHNpZGUgYSBnZW5lcmF0b3IuCisgICAgICAgIGNtID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKyAgICAgICAgd2l0aCBjbToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2NrLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9jay5sb2NrZWQoKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggY206CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyX25vX3lpZWxkKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggbG9jazoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1J1bnRpbWVFcnJvciBpcyBub3QgcmFpc2VkIGluIHdpdGggZXhwcmVzc2lvbicpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzdHIoZXJyKSwKKyAgICAgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvY2subG9ja2VkKCkpCisKKworY2xhc3MgRXZlbnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgIGRlZiB0ZXN0X2N0b3JfbG9vcChzZWxmKToKKyAgICAgICAgbG9vcCA9IG1vY2suTW9jaygpCisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudChsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKGV2Ll9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXYuX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIGV2ID0gYXN5bmNpby5FdmVudChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoZXYpLmVuZHN3aXRoKCdbdW5zZXRdPicpKQorICAgICAgICBtYXRjaCA9IFJHWF9SRVBSLm1hdGNoKHJlcHIoZXYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hdGNoLmdyb3VwKCdleHRyYXMnKSwgJ3Vuc2V0JykKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihldikuZW5kc3dpdGgoJ1tzZXRdPicpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihldikpKQorCisgICAgICAgIGV2Ll93YWl0ZXJzLmFwcGVuZChtb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjEnIGluIHJlcHIoZXYpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihldikpKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2LmlzX3NldCgpKQorCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMihyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gZXYud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgdDMgPSBhc3luY2lvLlRhc2soYzMocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzMsIDEsIDJdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodDEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0Mi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfb25fc2V0KHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV2LnNldCgpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShldi53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXMpCisKKyAgICBkZWYgdGVzdF93YWl0X2NhbmNlbChzZWxmKToKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHdhaXQgPSBhc3luY2lvLlRhc2soZXYud2FpdCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih3YWl0LmNhbmNlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgd2FpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5fd2FpdGVycykKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBldiA9IGFzeW5jaW8uRXZlbnQobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXYuaXNfc2V0KCkpCisKKyAgICAgICAgZXYuc2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV2LmlzX3NldCgpKQorCisgICAgICAgIGV2LmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX3dpdGhfd2FpdGVycyhzZWxmKToKKyAgICAgICAgZXYgPSBhc3luY2lvLkV2ZW50KGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGV2LndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIGV2LnNldCgpCisgICAgICAgIGV2LmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShldi5pc19zZXQoKSkKKworICAgICAgICBldi5zZXQoKQorICAgICAgICBldi5zZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihldi5fd2FpdGVycykpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgbGVuKGV2Ll93YWl0ZXJzKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LnJlc3VsdCgpKQorCisKK2NsYXNzIENvbmRpdGlvblRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBsb29wKQorCisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jdG9yX25vbG9vcChzZWxmKToKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY29uZC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3Rfd2FpdChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZXN1bHQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDEpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MiA9IGFzeW5jaW8uVGFzayhjMihyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDMgPSBhc3luY2lvLlRhc2soYzMocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvbmQuYWNxdWlyZSgpKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMV0sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgY29uZC5ub3RpZnkoMikKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29uZC5sb2NrZWQoKSkKKworICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0My5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfY2FuY2VsKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisKKyAgICAgICAgd2FpdCA9IGFzeW5jaW8uVGFzayhjb25kLndhaXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24od2FpdC5jYW5jZWwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXN5bmNpby5DYW5jZWxsZWRFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHdhaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5fd2FpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbmQubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF93YWl0X3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBjb25kLndhaXQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByZXN1bHQgPSBGYWxzZQorCisgICAgICAgIGRlZiBwcmVkaWNhdGUoKToKKyAgICAgICAgICAgIHJldHVybiBwcmVzdWx0CisKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXRfZm9yKHByZWRpY2F0ZSkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKGMxKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnkoKQorICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHByZXN1bHQgPSBUcnVlCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzFdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX3VuYWNxdWlyZWQoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICAjIHByZWRpY2F0ZSBjYW4gcmV0dXJuIHRydWUgaW1tZWRpYXRlbHkKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLndhaXRfZm9yKGxhbWJkYTogWzEsIDIsIDNdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIHJlcykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBjb25kLndhaXRfZm9yKGxhbWJkYTogRmFsc2UpKQorCisgICAgZGVmIHRlc3Rfbm90aWZ5KHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlc3VsdCA9IFtdCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMShyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBjb25kLmFjcXVpcmUoKQorICAgICAgICAgICAgaWYgKHlpZWxkIGZyb20gY29uZC53YWl0KCkpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMSkKKyAgICAgICAgICAgICAgICBjb25kLnJlbGVhc2UoKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMyKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgyKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzMocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0MyA9IGFzeW5jaW8uVGFzayhjMyhyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KDEpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29uZC5hY3F1aXJlKCkpCisgICAgICAgIGNvbmQubm90aWZ5KDEpCisgICAgICAgIGNvbmQubm90aWZ5KDIwNDgpCisgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAyLCAzXSwgcmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0MS5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQyLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDMucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfYWxsKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMxKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGNvbmQuYWNxdWlyZSgpCisgICAgICAgICAgICBpZiAoeWllbGQgZnJvbSBjb25kLndhaXQoKSk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgICAgIGNvbmQucmVsZWFzZSgpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzIocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gY29uZC5hY3F1aXJlKCkKKyAgICAgICAgICAgIGlmICh5aWVsZCBmcm9tIGNvbmQud2FpdCgpKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDIpCisgICAgICAgICAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2soYzEocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGMyKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgY29uZC5ub3RpZnlfYWxsKCkKKyAgICAgICAgY29uZC5yZWxlYXNlKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIDJdLCByZXN1bHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodDIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9ub3RpZnlfdW5hY3F1aXJlZChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIGNvbmQubm90aWZ5KQorCisgICAgZGVmIHRlc3Rfbm90aWZ5X2FsbF91bmFjcXVpcmVkKHNlbGYpOgorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgY29uZC5ub3RpZnlfYWxsKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ3VubG9ja2VkJyBpbiByZXByKGNvbmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihjb25kKSkpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb25kLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdsb2NrZWQnIGluIHJlcHIoY29uZCkpCisKKyAgICAgICAgY29uZC5fd2FpdGVycy5hcHBlbmQobW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoxJyBpbiByZXByKGNvbmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihjb25kKSkpCisKKyAgICAgICAgY29uZC5fd2FpdGVycy5hcHBlbmQobW9jay5Nb2NrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVyczoyJyBpbiByZXByKGNvbmQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUkdYX1JFUFIubWF0Y2gocmVwcihjb25kKSkpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIGNvbmQgPSBhc3luY2lvLkNvbmRpdGlvbihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfY29uZCgpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGNvbmQpCisKKyAgICAgICAgd2l0aCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFjcXVpcmVfY29uZCgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb25kLmxvY2tlZCgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29uZC5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9ub195aWVsZChzZWxmKToKKyAgICAgICAgY29uZCA9IGFzeW5jaW8uQ29uZGl0aW9uKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggY29uZDoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1J1bnRpbWVFcnJvciBpcyBub3QgcmFpc2VkIGluIHdpdGggZXhwcmVzc2lvbicpCisgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzdHIoZXJyKSwKKyAgICAgICAgICAgICAgICAnInlpZWxkIGZyb20iIHNob3VsZCBiZSB1c2VkIGFzIGNvbnRleHQgbWFuYWdlciBleHByZXNzaW9uJykKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNvbmQubG9ja2VkKCkpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9sb2NrKHNlbGYpOgorICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjb25kID0gYXN5bmNpby5Db25kaXRpb24obG9jaywgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25kLl9sb2NrLCBsb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzKGNvbmQuX2xvb3AsIGxvY2suX2xvb3ApCisKKyAgICBkZWYgdGVzdF9hbWJpZ3VvdXNfbG9vcHMoc2VsZik6CisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBsb2NrID0gYXN5bmNpby5Mb2NrKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgYXN5bmNpby5Db25kaXRpb24obG9jaywgbG9vcD1sb29wKQorCisKK2NsYXNzIFNlbWFwaG9yZVRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgbG9vcCkKKworICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZW0uX2xvb3AsIHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2N0b3Jfbm9sb29wKHNlbGYpOgorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNlbS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfaW5pdGlhbF92YWx1ZV96ZXJvKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSgwLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzZW0pLmVuZHN3aXRoKCdbdW5sb2NrZWQsdmFsdWU6MV0+JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShSR1hfUkVQUi5tYXRjaChyZXByKHNlbSkpKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcHIoc2VtKS5lbmRzd2l0aCgnW2xvY2tlZF0+JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnd2FpdGVycycgbm90IGluIHJlcHIoc2VtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoc2VtKSkpCisKKyAgICAgICAgc2VtLl93YWl0ZXJzLmFwcGVuZChtb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjEnIGluIHJlcHIoc2VtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoc2VtKSkpCisKKyAgICAgICAgc2VtLl93YWl0ZXJzLmFwcGVuZChtb2NrLk1vY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCd3YWl0ZXJzOjInIGluIHJlcHIoc2VtKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFJHWF9SRVBSLm1hdGNoKHJlcHIoc2VtKSkpCisKKyAgICBkZWYgdGVzdF9zZW1hcGhvcmUoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhY3F1aXJlX2xvY2soKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZW0pCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbS5sb2NrZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZW0uX3ZhbHVlKQorCisgICAgZGVmIHRlc3Rfc2VtYXBob3JlX3ZhbHVlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhc3luY2lvLlNlbWFwaG9yZSwgLTEpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSgzLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gW10KKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZW0uYWNxdWlyZSgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzEocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGMyKHJlc3VsdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHNlbS5hY3F1aXJlKCkKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoMikKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjMyhyZXN1bHQpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZW0uYWNxdWlyZSgpCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKDMpCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYzQocmVzdWx0KToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VtLmFjcXVpcmUoKQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCg0KQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhjMShyZXN1bHQpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soYzIocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQzID0gYXN5bmNpby5UYXNrKGMzKHJlc3VsdCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxXSwgcmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIGxlbihzZW0uX3dhaXRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgdDQgPSBhc3luY2lvLlRhc2soYzQocmVzdWx0KSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc2VtLl92YWx1ZSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBzZW0uX3ZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIGxlbihyZXN1bHQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGxlbihzZW0uX3dhaXRlcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLnJlc3VsdCgpKQorICAgICAgICByYWNlX3Rhc2tzID0gW3QyLCB0MywgdDRdCisgICAgICAgIGRvbmVfdGFza3MgPSBbdCBmb3IgdCBpbiByYWNlX3Rhc2tzIGlmIHQuZG9uZSgpIGFuZCB0LnJlc3VsdCgpXQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMiwgbGVuKGRvbmVfdGFza3MpKQorCisgICAgICAgICMgY2xlYW51cCBsb2NrZWQgc2VtYXBob3JlCisgICAgICAgIHNlbS5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLmdhdGhlcigqcmFjZV90YXNrcykpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbChzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKworICAgICAgICBhY3F1aXJlID0gYXN5bmNpby5UYXNrKHNlbS5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKGFjcXVpcmUuY2FuY2VsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBhY3F1aXJlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoKG5vdCBzZW0uX3dhaXRlcnMpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICBhbGwod2FpdGVyLmRvbmUoKSBmb3Igd2FpdGVyIGluIHNlbS5fd2FpdGVycykpCisKKyAgICBkZWYgdGVzdF9hY3F1aXJlX2NhbmNlbF9iZWZvcmVfYXdva2VuKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSh2YWx1ZT0wLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhzZW0uYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soc2VtLmFjcXVpcmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQzID0gYXN5bmNpby5UYXNrKHNlbS5hY3F1aXJlKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0NCA9IGFzeW5jaW8uVGFzayhzZW0uYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHQxLmNhbmNlbCgpCisgICAgICAgIHQyLmNhbmNlbCgpCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIG51bV9kb25lID0gc3VtKHQuZG9uZSgpIGZvciB0IGluIFt0MywgdDRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bV9kb25lLCAxKQorCisgICAgICAgIHQzLmNhbmNlbCgpCisgICAgICAgIHQ0LmNhbmNlbCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfYWNxdWlyZV9oYW5nKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSh2YWx1ZT0wLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB0MSA9IGFzeW5jaW8uVGFzayhzZW0uYWNxdWlyZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soc2VtLmFjcXVpcmUoKSwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgc2VtLnJlbGVhc2UoKQorICAgICAgICB0MS5jYW5jZWwoKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VtLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfcmVsZWFzZV9ub3RfYWNxdWlyZWQoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uQm91bmRlZFNlbWFwaG9yZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZW0ucmVsZWFzZSkKKworICAgIGRlZiB0ZXN0X3JlbGVhc2Vfbm9fd2FpdGVycyhzZWxmKToKKyAgICAgICAgc2VtID0gYXN5bmNpby5TZW1hcGhvcmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VtLmFjcXVpcmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBzZW0ucmVsZWFzZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VtLmxvY2tlZCgpKQorCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICBzZW0gPSBhc3luY2lvLlNlbWFwaG9yZSgyLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFjcXVpcmVfbG9jaygpOgorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIHNlbSkKKworICAgICAgICB3aXRoIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYWNxdWlyZV9sb2NrKCkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZW0ubG9ja2VkKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbS5fdmFsdWUpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhY3F1aXJlX2xvY2soKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbS5sb2NrZWQoKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDIsIHNlbS5fdmFsdWUpCisKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXJfbm9feWllbGQoc2VsZik6CisgICAgICAgIHNlbSA9IGFzeW5jaW8uU2VtYXBob3JlKDIsIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VtOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnUnVudGltZUVycm9yIGlzIG5vdCByYWlzZWQgaW4gd2l0aCBleHByZXNzaW9uJykKKyAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHN0cihlcnIpLAorICAgICAgICAgICAgICAgICcieWllbGQgZnJvbSIgc2hvdWxkIGJlIHVzZWQgYXMgY29udGV4dCBtYW5hZ2VyIGV4cHJlc3Npb24nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgc2VtLl92YWx1ZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcHJvYWN0b3JfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcHJvYWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOTJiMWUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9wcm9hY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSw1OTEgQEAKKyIiIlRlc3RzIGZvciBwcm9hY3Rvcl9ldmVudHMucHkiIiIKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBCYXNlUHJvYWN0b3JFdmVudExvb3AKK2Zyb20gYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMgaW1wb3J0IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnByb2FjdG9yX2V2ZW50cyBpbXBvcnQgX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8ucHJvYWN0b3JfZXZlbnRzIGltcG9ydCBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitkZWYgY2xvc2VfdHJhbnNwb3J0KHRyYW5zcG9ydCk6CisgICAgIyBEb24ndCBjYWxsIHRyYW5zcG9ydC5jbG9zZSgpIGJlY2F1c2UgdGhlIGV2ZW50IGxvb3AgYW5kIHRoZSBJT0NQIHByb2FjdG9yCisgICAgIyBhcmUgbW9ja2VkCisgICAgaWYgdHJhbnNwb3J0Ll9zb2NrIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorICAgIHRyYW5zcG9ydC5fc29jay5jbG9zZSgpCisgICAgdHJhbnNwb3J0Ll9zb2NrID0gTm9uZQorCisKK2NsYXNzIFByb2FjdG9yU29ja2V0VHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLmxvb3AuY2xvc2UpCisgICAgICAgIHNlbGYucHJvYWN0b3IgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yID0gc2VsZi5wcm9hY3RvcgorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gbW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisKKyAgICBkZWYgc29ja2V0X3RyYW5zcG9ydChzZWxmLCB3YWl0ZXI9Tm9uZSk6CisgICAgICAgIHRyYW5zcG9ydCA9IF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wsIHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbG9zZV90cmFuc3BvcnQsIHRyYW5zcG9ydCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KHdhaXRlcj1mdXQpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmdXQucmVzdWx0KCkpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlKHRyKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgNDA5NikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIDQwOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfZGF0YShzZWxmKToKKyAgICAgICAgcmVzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcy5zZXRfcmVzdWx0KGInZGF0YScpCisKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fcmVhZF9mdXQgPSByZXMKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZyhyZXMpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfbm9fZGF0YShzZWxmKToKKyAgICAgICAgcmVzID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcy5zZXRfcmVzdWx0KGInJykKKworICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0ci5fbG9vcF9yZWFkaW5nLCByZXMpCisKKyAgICAgICAgdHIuY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fcmVhZF9mdXQgPSByZXMKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZyhyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19hYm9ydGVkKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKworICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3JlYWRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgcmVhZCBlcnJvciBvbiBwaXBlIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF9sb29wX3JlYWRpbmdfYWJvcnRlZF9jbG9zaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uQWJvcnRlZEVycm9yKCkKKworICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Fib3J0ZWRfaXNfZmF0YWwoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25BYm9ydGVkRXJyb3IoKQorICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9jbG9zaW5nID0gRmFsc2UKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2xvb3BfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfbG9vcF9yZWFkaW5nX2Nvbm5fcmVzZXRfbG9zdChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlc2V0RXJyb3IoKQorCisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2Nsb3NpbmcgPSBGYWxzZQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0ci5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIGRlZiB0ZXN0X2xvb3BfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IChPU0Vycm9yKCkpCisKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fbG9vcF9yZWFkaW5nKCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZyA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgTm9uZSkKKyAgICAgICAgdHIuX2xvb3Bfd3JpdGluZy5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YT1iJ2RhdGEnKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX21vcmUoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX2xvb3Bfd3JpdGluZy5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb29wX3dyaXRpbmcoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IGJ5dGVhcnJheShiJ2RhdGEnKQorICAgICAgICB0ci5fbG9vcF93cml0aW5nKCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUuYWRkX2RvbmVfY2FsbGJhY2suXAorICAgICAgICAgICAgYXNzZXJ0X2NhbGxlZF93aXRoKHRyLl9sb29wX3dyaXRpbmcpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5wcm9hY3Rvcl9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9sb29wX3dyaXRpbmdfZXJyKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZXJyID0gc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIHRyLl9sb29wX3dyaXRpbmcoKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorICAgICAgICB0ci5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2J1ZmZlciwgTm9uZSkKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3RfbG9vcF93cml0aW5nX3N0b3Aoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChiJ2RhdGEnKQorCisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX3dyaXRlX2Z1dCA9IGZ1dAorICAgICAgICB0ci5fbG9vcF93cml0aW5nKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3dyaXRlX2Z1dCkKKworICAgIGRlZiB0ZXN0X2xvb3Bfd3JpdGluZ19jbG9zaW5nKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoMSkKKworICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl93cml0ZV9mdXQgPSBmdXQKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci5fbG9vcF93cml0aW5nKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3dyaXRlX2Z1dCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3RfYWJvcnQoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmlzX2Nsb3NpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LnJlc2V0X21vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3dyaXRlX2Z1dChzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fd3JpdGVfZnV0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9idWZmZXIoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3Ioc2VsZiwgbV9sb2dnaW5nKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9mb3JjZV9jbG9zZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX2xvZ2dpbmcuZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2Uoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICByZWFkX2Z1dCA9IHRyLl9yZWFkX2Z1dCA9IG1vY2suTW9jaygpCisgICAgICAgIHdyaXRlX2Z1dCA9IHRyLl93cml0ZV9mdXQgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICByZWFkX2Z1dC5jYW5jZWwuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgd3JpdGVfZnV0LmNhbmNlbC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgZGVmIHRlc3RfZm9yY2VfY2xvc2VfaWRlbXBvdGVudChzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlKE5vbmUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2ZhdGFsX2Vycm9yXzIoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhdGEnXQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTm9uZSwgdHIuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X2NhbGxfY29ubmVjdGlvbl9sb3N0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLnNvY2suc2h1dGRvd24uYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2tldC5TSFVUX1dSKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsX2NvdW50LCAxKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2ZfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuX2VvZl93cml0dGVuKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHRyLl9sb29wLl9wcm9hY3Rvci5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIGYuc2V0X3Jlc3VsdCg0KQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX3dyaXRlX3BpcGUoc2VsZik6CisgICAgICAgIHRyID0gX1Byb2FjdG9yV3JpdGVQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5jYW5fd3JpdGVfZW9mKCkpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2J1ZmZlcl93cml0ZV9waXBlKHNlbGYpOgorICAgICAgICB0ciA9IF9Qcm9hY3RvcldyaXRlUGlwZVRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCkKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ci5fbG9vcC5fcHJvYWN0b3Iuc2VuZC5yZXR1cm5fdmFsdWUgPSBmCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIHRyLndyaXRlX2VvZigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNodXRkb3duLmNhbGxlZCkKKyAgICAgICAgdHIuX2xvb3AuX3Byb2FjdG9yLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgYidkYXRhJykKKyAgICAgICAgZi5zZXRfcmVzdWx0KDQpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5jbG9zZS5jYWxsZWQpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZl9kdXBsZXhfcGlwZShzZWxmKToKKyAgICAgICAgdHIgPSBfUHJvYWN0b3JEdXBsZXhQaXBlVHJhbnNwb3J0KAorICAgICAgICAgICAgc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuY2FuX3dyaXRlX2VvZigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgY2xvc2VfdHJhbnNwb3J0KHRyKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgZnV0dXJlcyA9IFtdCisgICAgICAgIGZvciBtc2cgaW4gW2InZGF0YTEnLCBiJ2RhdGEyJywgYidkYXRhMycsIGInZGF0YTQnLCBiJyddOgorICAgICAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgZi5zZXRfcmVzdWx0KG1zZykKKyAgICAgICAgICAgIGZ1dHVyZXMuYXBwZW5kKGYpCisgICAgICAgIHNlbGYubG9vcC5fcHJvYWN0b3IucmVjdi5zaWRlX2VmZmVjdCA9IGZ1dHVyZXMKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMScpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTInKQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9wYXVzZWQpCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTInKQorICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIuX3BhdXNlZCkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoYidkYXRhMycpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YTQnKQorICAgICAgICB0ci5jbG9zZSgpCisKKworICAgIGRlZiBwYXVzZV93cml0aW5nX3RyYW5zcG9ydChzZWxmLCBoaWdoKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0ci5zZXRfd3JpdGVfYnVmZmVyX2xpbWl0cyhoaWdoPWhpZ2gpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLnBhdXNlX3dyaXRpbmcuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wucmVzdW1lX3dyaXRpbmcuY2FsbGVkKQorICAgICAgICByZXR1cm4gdHIKKworICAgIGRlZiB0ZXN0X3BhdXNlX3Jlc3VtZV93cml0aW5nKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYucGF1c2Vfd3JpdGluZ190cmFuc3BvcnQoaGlnaD00KQorCisgICAgICAgICMgd3JpdGUgYSBsYXJnZSBjaHVuaywgbXVzdCBwYXVzZSB3cml0aW5nCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZnV0CisgICAgICAgIHRyLndyaXRlKGInbGFyZ2UgZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5wYXVzZV93cml0aW5nLmNhbGxlZCkKKworICAgICAgICAjIGZsdXNoIHRoZSBidWZmZXIKKyAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLnJlc3VtZV93cml0aW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3dyaXRpbmdfMndyaXRlKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYucGF1c2Vfd3JpdGluZ190cmFuc3BvcnQoaGlnaD00KQorCisgICAgICAgICMgZmlyc3Qgc2hvcnQgd3JpdGUsIHRoZSBidWZmZXIgaXMgbm90IGZ1bGwgKDMgPD0gNCkKKyAgICAgICAgZnV0MSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZnV0MQorICAgICAgICB0ci53cml0ZShiJzEyMycpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wucGF1c2Vfd3JpdGluZy5jYWxsZWQpCisKKyAgICAgICAgIyBmaWxsIHRoZSBidWZmZXIsIG11c3QgcGF1c2Ugd3JpdGluZyAoNiA+IDQpCisgICAgICAgIHRyLndyaXRlKGInYWJjJykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLnBhdXNlX3dyaXRpbmcuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcGF1c2Vfd3JpdGluZ18zd3JpdGUoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5wYXVzZV93cml0aW5nX3RyYW5zcG9ydChoaWdoPTQpCisKKyAgICAgICAgIyBmaXJzdCBzaG9ydCB3cml0ZSwgdGhlIGJ1ZmZlciBpcyBub3QgZnVsbCAoMSA8PSA0KQorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLl9wcm9hY3Rvci5zZW5kLnJldHVybl92YWx1ZSA9IGZ1dAorICAgICAgICB0ci53cml0ZShiJzEnKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLnBhdXNlX3dyaXRpbmcuY2FsbGVkKQorCisgICAgICAgICMgc2Vjb25kIHNob3J0IHdyaXRlLCB0aGUgYnVmZmVyIGlzIG5vdCBmdWxsICgzIDw9IDQpCisgICAgICAgIHRyLndyaXRlKGInMjMnKQorICAgICAgICBzZWxmLmxvb3AuX3J1bl9vbmNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5nZXRfd3JpdGVfYnVmZmVyX3NpemUoKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLnBhdXNlX3dyaXRpbmcuY2FsbGVkKQorCisgICAgICAgICMgZmlsbCB0aGUgYnVmZmVyLCBtdXN0IHBhdXNlIHdyaXRpbmcgKDYgPiA0KQorICAgICAgICB0ci53cml0ZShiJ2FiYycpCisgICAgICAgIHNlbGYubG9vcC5fcnVuX29uY2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLmdldF93cml0ZV9idWZmZXJfc2l6ZSgpLCA2KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wcm90b2NvbC5wYXVzZV93cml0aW5nLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2RvbnRfcGF1c2Vfd3JpdGluZyhzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnBhdXNlX3dyaXRpbmdfdHJhbnNwb3J0KGhpZ2g9NCkKKworICAgICAgICAjIHdyaXRlIGEgbGFyZ2UgY2h1bmsgd2hpY2ggY29tcGxldGVzIGltbWVkaWFsdHksCisgICAgICAgICMgaXQgc2hvdWxkIG5vdCBwYXVzZSB3cml0aW5nCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2FjdG9yLnNlbmQucmV0dXJuX3ZhbHVlID0gZnV0CisgICAgICAgIHRyLndyaXRlKGIndmVyeSBsYXJnZSBkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuZ2V0X3dyaXRlX2J1ZmZlcl9zaXplKCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5wYXVzZV93cml0aW5nLmNhbGxlZCkKKworCitjbGFzcyBCYXNlUHJvYWN0b3JFdmVudExvb3BUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgICAgIHNlbGYucHJvYWN0b3IgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYuc3NvY2ssIHNlbGYuY3NvY2sgPSBtb2NrLk1vY2soKSwgbW9jay5Nb2NrKCkKKworICAgICAgICBjbGFzcyBFdmVudExvb3AoQmFzZVByb2FjdG9yRXZlbnRMb29wKToKKyAgICAgICAgICAgIGRlZiBfc29ja2V0cGFpcihzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHNlbGYuc3NvY2ssIHNlbGYuY3NvY2spCisKKyAgICAgICAgc2VsZi5sb29wID0gRXZlbnRMb29wKHNlbGYucHJvYWN0b3IpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgQG1vY2sucGF0Y2gub2JqZWN0KEJhc2VQcm9hY3RvckV2ZW50TG9vcCwgJ2NhbGxfc29vbicpCisgICAgQG1vY2sucGF0Y2gub2JqZWN0KEJhc2VQcm9hY3RvckV2ZW50TG9vcCwgJ19zb2NrZXRwYWlyJykKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYsIHNvY2tldHBhaXIsIGNhbGxfc29vbik6CisgICAgICAgIHNzb2NrLCBjc29jayA9IHNvY2tldHBhaXIucmV0dXJuX3ZhbHVlID0gKAorICAgICAgICAgICAgbW9jay5Nb2NrKCksIG1vY2suTW9jaygpKQorICAgICAgICBsb29wID0gQmFzZVByb2FjdG9yRXZlbnRMb29wKHNlbGYucHJvYWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9vcC5fc3NvY2ssIHNzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzKGxvb3AuX2Nzb2NrLCBjc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb29wLl9pbnRlcm5hbF9mZHMsIDEpCisgICAgICAgIGNhbGxfc29vbi5hc3NlcnRfY2FsbGVkX3dpdGgobG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfc2VsZl9waXBlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLl9pbnRlcm5hbF9mZHMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY3NvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3Nzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX2Nzb2NrKQorCisgICAgICAgICMgRG9uJ3QgY2FsbCBjbG9zZSgpOiBfY2xvc2Vfc2VsZl9waXBlKCkgY2Fubm90IGJlIGNhbGxlZCB0d2ljZQorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlZCA9IFRydWUKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb2FjdG9yLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9wcm9hY3RvcikKKworICAgICAgICBzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX2Nsb3NlX3NlbGZfcGlwZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zb2NrX3JlY3Yoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zb2NrX3JlY3Yoc2VsZi5zb2NrLCAxMDI0KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaywgMTAyNCkKKworICAgIGRlZiB0ZXN0X3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzZWxmLnNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYucHJvYWN0b3Iuc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZi5zb2NrLCBiJ2RhdGEnKQorCisgICAgZGVmIHRlc3Rfc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc29ja19jb25uZWN0KHNlbGYuc29jaywgKCcxLjIuMy40JywgMTIzKSkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5jb25uZWN0LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2ssICgnMS4yLjMuNCcsIDEyMykpCisKKyAgICBkZWYgdGVzdF9zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnNvY2tfYWNjZXB0KHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5hY2NlcHQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaykKKworICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIGNsYXNzIEV2ZW50TG9vcChCYXNlUHJvYWN0b3JFdmVudExvb3ApOgorICAgICAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVzdHJ1Y3RvciB0byBub3QgbG9nIGEgUmVzb3VyY2VXYXJuaW5nCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgRXZlbnRMb29wLCBzZWxmLnByb2FjdG9yKQorCisgICAgZGVmIHRlc3RfbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KHNlbGYuc29jaywgYXN5bmNpby5Qcm90b2NvbCgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHIsIF9Qcm9hY3RvclNvY2tldFRyYW5zcG9ydCkKKyAgICAgICAgY2xvc2VfdHJhbnNwb3J0KHRyKQorCisgICAgZGVmIHRlc3RfbG9vcF9zZWxmX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoKQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc3NvY2ssIDQwOTYpCisgICAgICAgIHNlbGYucHJvYWN0b3IucmVjdi5yZXR1cm5fdmFsdWUuYWRkX2RvbmVfY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZykKKworICAgIGRlZiB0ZXN0X2xvb3Bfc2VsZl9yZWFkaW5nX2Z1dChzZWxmKToKKyAgICAgICAgZnV0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9sb29wX3NlbGZfcmVhZGluZyhmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0LmNhbGxlZCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNzb2NrLCA0MDk2KQorICAgICAgICBzZWxmLnByb2FjdG9yLnJlY3YucmV0dXJuX3ZhbHVlLmFkZF9kb25lX2NhbGxiYWNrLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcpCisKKyAgICBkZWYgdGVzdF9sb29wX3NlbGZfcmVhZGluZ19leGNlcHRpb24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2V4Y2VwdGlvbl9oYW5kbGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5yZWN2LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHNlbGYubG9vcC5fbG9vcF9zZWxmX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfdG9fc2VsZihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl93cml0ZV90b19zZWxmKCkKKyAgICAgICAgc2VsZi5jc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChiJ1wwJykKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKFtdKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9jcmVhdGVfc2VydmVyKHNlbGYsIG1fbG9nKToKKyAgICAgICAgcGYgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsX3Nvb24gPSBzZWxmLmxvb3AuY2FsbF9zb29uID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLmxvb3AuX3N0YXJ0X3NlcnZpbmcocGYsIHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxfc29vbi5jYWxsZWQpCisKKyAgICAgICAgIyBjYWxsYmFjaworICAgICAgICBsb29wID0gY2FsbF9zb29uLmNhbGxfYXJnc1swXVswXQorICAgICAgICBsb29wKCkKKyAgICAgICAgc2VsZi5wcm9hY3Rvci5hY2NlcHQuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYuc29jaykKKworICAgICAgICAjIGNvbm4KKyAgICAgICAgZnV0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgZnV0LnJlc3VsdC5yZXR1cm5fdmFsdWUgPSAobW9jay5Nb2NrKCksIG1vY2suTW9jaygpKQorCisgICAgICAgIG1ha2VfdHIgPSBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydCA9IG1vY2suTW9jaygpCisgICAgICAgIGxvb3AoZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LnJlc3VsdC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYWtlX3RyLmNhbGxlZCkKKworICAgICAgICAjIGV4Y2VwdGlvbgorICAgICAgICBmdXQucmVzdWx0LnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIGxvb3AoZnV0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zZXJ2ZXJfY2FuY2VsKHNlbGYpOgorICAgICAgICBwZiA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxfc29vbiA9IHNlbGYubG9vcC5jYWxsX3Nvb24gPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fc3RhcnRfc2VydmluZyhwZiwgc2VsZi5zb2NrKQorICAgICAgICBsb29wID0gY2FsbF9zb29uLmNhbGxfYXJnc1swXVswXQorCisgICAgICAgICMgY2FuY2VsbGVkCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQuY2FuY2VsKCkKKyAgICAgICAgbG9vcChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNvY2suY2xvc2UuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc3RvcF9zZXJ2aW5nKHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zdG9wX3NlcnZpbmcoc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY2xvc2UuY2FsbGVkKQorICAgICAgICBzZWxmLnByb2FjdG9yLl9zdG9wX3NlcnZpbmcuYXNzZXJ0X2NhbGxlZF93aXRoKHNvY2spCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3F1ZXVlcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3F1ZXVlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTFhOWJiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfcXVldWVzLnB5CkBAIC0wLDAgKzEsNjI1IEBACisiIiJUZXN0cyBmb3IgcXVldWVzLnB5IiIiCisKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCisKKworY2xhc3MgX1F1ZXVlVGVzdEJhc2UodGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisKKworY2xhc3MgUXVldWVCYXNpY1Rlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiBfdGVzdF9yZXByX29yX3N0cihzZWxmLCBmbiwgZXhwZWN0X2lkKToKKyAgICAgICAgIiIiVGVzdCBRdWV1ZSdzIHJlcHIgb3Igc3RyLgorCisgICAgICAgIGZuIGlzIHJlcHIgb3Igc3RyLiBleHBlY3RfaWQgaXMgVHJ1ZSBpZiB3ZSBleHBlY3QgdGhlIFF1ZXVlJ3MgaWQgdG8KKyAgICAgICAgYXBwZWFyIGluIGZuKFF1ZXVlKCkpLgorICAgICAgICAiIiIKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwLjEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm4ocSkuc3RhcnRzd2l0aCgnPFF1ZXVlJyksIGZuKHEpKQorICAgICAgICBpZF9pc19wcmVzZW50ID0gaGV4KGlkKHEpKSBpbiBmbihxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdF9pZCwgaWRfaXNfcHJlc2VudCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGFkZF9nZXR0ZXIoKToKKyAgICAgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgU3RhcnQgYSB0YXNrIHRoYXQgd2FpdHMgdG8gZ2V0LgorICAgICAgICAgICAgYXN5bmNpby5UYXNrKHEuZ2V0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgTGV0IGl0IHN0YXJ0IHdhaXRpbmcuCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19nZXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEuZ2V0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoMCkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhZGRfZ2V0dGVyKCkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBhZGRfcHV0dGVyKCk6CisgICAgICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICAgICAgIyBTdGFydCBhIHRhc2sgdGhhdCB3YWl0cyB0byBwdXQuCisgICAgICAgICAgICBhc3luY2lvLlRhc2socS5wdXQoMiksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgICMgTGV0IGl0IHN0YXJ0IHdhaXRpbmcuCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19wdXR0ZXJzWzFdJyBpbiBmbihxKSkKKyAgICAgICAgICAgICMgcmVzdW1lIHEucHV0IGNvcm91dGluZSB0byBmaW5pc2ggZ2VuZXJhdG9yCisgICAgICAgICAgICBxLmdldF9ub3dhaXQoKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFkZF9wdXR0ZXIoKSkKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPWxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ19xdWV1ZT1bMV0nIGluIGZuKHEpKQorCisgICAgZGVmIHRlc3RfY3Rvcl9sb29wKHNlbGYpOgorICAgICAgICBsb29wID0gbW9jay5Nb2NrKCkKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHEuX2xvb3AsIGxvb3ApCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY3Rvcl9ub2xvb3Aoc2VsZik6CisgICAgICAgIGFzeW5jaW8uc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9yZXByX29yX3N0cihyZXByLCBUcnVlKQorCisgICAgZGVmIHRlc3Rfc3RyKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3JlcHJfb3Jfc3RyKHN0ciwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9lbXB0eShzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmVtcHR5KCkpCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEuZW1wdHkoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBxLmdldF9ub3dhaXQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEuZW1wdHkoKSkKKworICAgIGRlZiB0ZXN0X2Z1bGwoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHEuZnVsbCgpKQorCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKG1heHNpemU9MSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocS5mdWxsKCkpCisKKyAgICBkZWYgdGVzdF9vcmRlcihzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsxLCAzLCAyXSwgaXRlbXMpCisKKyAgICBkZWYgdGVzdF9tYXhzaXplKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMiwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTIsIGxvb3A9bG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBxLm1heHNpemUpCisgICAgICAgIGhhdmVfYmVlbl9wdXQgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcHV0dGVyKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgzKToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KGkpCisgICAgICAgICAgICAgICAgaGF2ZV9iZWVuX3B1dC5hcHBlbmQoaSkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHB1dHRlcigpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorCisgICAgICAgICAgICAjIFRoZSBwdXR0ZXIgaXMgYmxvY2tlZCBhZnRlciBwdXR0aW5nIHR3byBpdGVtcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzAsIDFdLCBoYXZlX2JlZW5fcHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBxLmdldF9ub3dhaXQoKSkKKworICAgICAgICAgICAgIyBMZXQgdGhlIHB1dHRlciByZXN1bWUgYW5kIHB1dCBsYXN0IGl0ZW0uCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMCwgMSwgMl0sIGhhdmVfYmVlbl9wdXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHEuZ2V0X25vd2FpdCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBxLmdldF9ub3dhaXQoKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQucmVzdWx0KCkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGVzdCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDIsIGxvb3AudGltZSgpKQorCisKK2NsYXNzIFF1ZXVlR2V0VGVzdHMoX1F1ZXVlVGVzdEJhc2UpOgorCisgICAgZGVmIHRlc3RfYmxvY2tpbmdfZ2V0KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9nZXQoKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBxLmdldCgpKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorCisgICAgZGVmIHRlc3RfZ2V0X3dpdGhfcHV0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUoMSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLl9wdXR0ZXJzLmFwcGVuZCh3YWl0ZXIpCisKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLmdldCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X2Jsb2NraW5nX2dldF93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4wMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9bG9vcCkKKyAgICAgICAgc3RhcnRlZCA9IGFzeW5jaW8uRXZlbnQobG9vcD1sb29wKQorICAgICAgICBmaW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9nZXQoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZpbmlzaGVkCisgICAgICAgICAgICBzdGFydGVkLnNldCgpCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHEuZ2V0KCkKKyAgICAgICAgICAgIGZpbmlzaGVkID0gVHJ1ZQorICAgICAgICAgICAgcmV0dXJuIHJlcworCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMC4wMSwgcS5wdXRfbm93YWl0LCAxKQorICAgICAgICAgICAgcXVldWVfZ2V0X3Rhc2sgPSBhc3luY2lvLlRhc2socXVldWVfZ2V0KCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc3RhcnRlZC53YWl0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluaXNoZWQpCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIHF1ZXVlX2dldF90YXNrCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluaXNoZWQpCisgICAgICAgICAgICByZXR1cm4gcmVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcmVzKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfZ2V0KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisKKyAgICBkZWYgdGVzdF9ub25ibG9ja2luZ19nZXRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5RdWV1ZUVtcHR5LCBxLmdldF9ub3dhaXQpCisKKyAgICBkZWYgdGVzdF9nZXRfY2FuY2VsbGVkKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfZ2V0KCk6CisgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gYXN5bmNpby53YWl0X2ZvcihxLmdldCgpLCAwLjA1MSwgbG9vcD1sb29wKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIGdldF90YXNrID0gYXN5bmNpby5UYXNrKHF1ZXVlX2dldCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKSAgIyBsZXQgdGhlIHRhc2sgc3RhcnQKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICAgICAgcmV0dXJuICh5aWVsZCBmcm9tIGdldF90YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGVzdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA2LCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X2dldF9jYW5jZWxsZWRfcmFjZShzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgdDEgPSBhc3luY2lvLlRhc2socS5nZXQoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICB0MS5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQxLmRvbmUoKSkKKyAgICAgICAgcS5wdXRfbm93YWl0KCdhJykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDIucmVzdWx0KCksICdhJykKKworICAgIGRlZiB0ZXN0X2dldF93aXRoX3dhaXRpbmdfcHV0dGVycyhzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3AsIG1heHNpemU9MSkKKyAgICAgICAgYXN5bmNpby5UYXNrKHEucHV0KCdhJyksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBhc3luY2lvLlRhc2socS5wdXQoJ2InKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocS5nZXQoKSksICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHEuZ2V0KCkpLCAnYicpCisKKyAgICBkZWYgdGVzdF93aHlfYXJlX2dldHRlcnNfd2FpdGluZyhzZWxmKToKKyAgICAgICAgIyBGcm9tIGlzc3VlICMyNjguCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb25zdW1lcihxdWV1ZSwgbnVtX2V4cGVjdGVkKToKKyAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKG51bV9leHBlY3RlZCk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBxdWV1ZS5nZXQoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcHJvZHVjZXIocXVldWUsIG51bV9pdGVtcyk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShudW1faXRlbXMpOgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gcXVldWUucHV0KGkpCisKKyAgICAgICAgcXVldWVfc2l6ZSA9IDEKKyAgICAgICAgcHJvZHVjZXJfbnVtX2l0ZW1zID0gNQorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShxdWV1ZV9zaXplLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgYXN5bmNpby5nYXRoZXIocHJvZHVjZXIocSwgcHJvZHVjZXJfbnVtX2l0ZW1zKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWVyKHEsIHByb2R1Y2VyX251bV9pdGVtcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICApCisKKworY2xhc3MgUXVldWVQdXRUZXN0cyhfUXVldWVUZXN0QmFzZSk6CisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19wdXQoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICAjIE5vIG1heHNpemUsIHdvbid0IGJsb2NrLgorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisKKyAgICBkZWYgdGVzdF9ibG9ja2luZ19wdXRfd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEsIGxvb3A9bG9vcCkKKyAgICAgICAgc3RhcnRlZCA9IGFzeW5jaW8uRXZlbnQobG9vcD1sb29wKQorICAgICAgICBmaW5pc2hlZCA9IEZhbHNlCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBxdWV1ZV9wdXQoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGZpbmlzaGVkCisgICAgICAgICAgICBzdGFydGVkLnNldCgpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDIpCisgICAgICAgICAgICBmaW5pc2hlZCA9IFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX2dldCgpOgorICAgICAgICAgICAgbG9vcC5jYWxsX2xhdGVyKDAuMDEsIHEuZ2V0X25vd2FpdCkKKyAgICAgICAgICAgIHF1ZXVlX3B1dF90YXNrID0gYXN5bmNpby5UYXNrKHF1ZXVlX3B1dCgpLCBsb29wPWxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHN0YXJ0ZWQud2FpdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbmlzaGVkKQorICAgICAgICAgICAgeWllbGQgZnJvbSBxdWV1ZV9wdXRfdGFzaworICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbmlzaGVkKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHF1ZXVlX2dldCgpKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfbm9uYmxvY2tpbmdfcHV0KHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcS5wdXRfbm93YWl0KDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcS5nZXRfbm93YWl0KCkpCisKKyAgICBkZWYgdGVzdF9nZXRfY2FuY2VsX2Ryb3Bfb25lX3BlbmRpbmdfcmVhZGVyKHNlbGYpOgorICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwLjAxCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPWxvb3ApCisKKyAgICAgICAgcmVhZGVyID0gbG9vcC5jcmVhdGVfdGFzayhxLmdldCgpKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKSkKKworICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgcS5wdXRfbm93YWl0KDIpCisgICAgICAgIHJlYWRlci5jYW5jZWwoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRlcikKKyAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAjIHRyeSBhZ2FpbgorICAgICAgICAgICAgcmVhZGVyID0gbG9vcC5jcmVhdGVfdGFzayhxLmdldCgpKQorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZGVyKQorCisgICAgICAgIHJlc3VsdCA9IHJlYWRlci5yZXN1bHQoKQorICAgICAgICAjIGlmIHdlIGdldCAyLCBpdCBtZWFucyAxIGdvdCBkcm9wcGVkIQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2dldF9jYW5jZWxfZHJvcF9tYW55X3BlbmRpbmdfcmVhZGVycyhzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMC4wMQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisgICAgICAgIGxvb3Auc2V0X2RlYnVnKFRydWUpCisKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1sb29wKQorCisgICAgICAgIHJlYWRlcjEgPSBsb29wLmNyZWF0ZV90YXNrKHEuZ2V0KCkpCisgICAgICAgIHJlYWRlcjIgPSBsb29wLmNyZWF0ZV90YXNrKHEuZ2V0KCkpCisgICAgICAgIHJlYWRlcjMgPSBsb29wLmNyZWF0ZV90YXNrKHEuZ2V0KCkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5zbGVlcCgwLjAxLCBsb29wPWxvb3ApKQorCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBxLnB1dF9ub3dhaXQoMikKKyAgICAgICAgcmVhZGVyMS5jYW5jZWwoKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRlcjEpCisgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRlcjMpCisKKyAgICAgICAgIyBJdCBpcyB1bmRlZmluZWQgaW4gd2hpY2ggb3JkZXIgY29uY3VycmVudCByZWFkZXJzIHJlY2VpdmUgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7cmVhZGVyMi5yZXN1bHQoKSwgcmVhZGVyMy5yZXN1bHQoKX0sIHsxLCAyfSkKKworICAgIGRlZiB0ZXN0X3B1dF9jYW5jZWxfZHJvcChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwLjAxCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUoMSwgbG9vcD1sb29wKQorCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorCisgICAgICAgICMgcHV0dGluZyBhIHNlY29uZCBpdGVtIGluIHRoZSBxdWV1ZSBoYXMgdG8gYmxvY2sgKHFzaXplPTEpCisgICAgICAgIHdyaXRlciA9IGxvb3AuY3JlYXRlX3Rhc2socS5wdXQoMikpCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKSkKKworICAgICAgICB2YWx1ZTEgPSBxLmdldF9ub3dhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlMSwgMSkKKworICAgICAgICB3cml0ZXIuY2FuY2VsKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUod3JpdGVyKQorICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICMgdHJ5IGFnYWluCisgICAgICAgICAgICB3cml0ZXIgPSBsb29wLmNyZWF0ZV90YXNrKHEucHV0KDIpKQorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUod3JpdGVyKQorCisgICAgICAgIHZhbHVlMiA9IHEuZ2V0X25vd2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUyLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEucXNpemUoKSwgMCkKKworICAgIGRlZiB0ZXN0X25vbmJsb2NraW5nX3B1dF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKG1heHNpemU9MSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHEucHV0X25vd2FpdCgxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlF1ZXVlRnVsbCwgcS5wdXRfbm93YWl0LCAyKQorCisgICAgZGVmIHRlc3RfZmxvYXRfbWF4c2l6ZShzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobWF4c2l6ZT0xLjMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBxLnB1dF9ub3dhaXQoMSkKKyAgICAgICAgcS5wdXRfbm93YWl0KDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxLmZ1bGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5RdWV1ZUZ1bGwsIHEucHV0X25vd2FpdCwgMykKKworICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShtYXhzaXplPTEuMywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcXVldWVfcHV0KCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDEpCisgICAgICAgICAgICB5aWVsZCBmcm9tIHEucHV0KDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocS5mdWxsKCkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocXVldWVfcHV0KCkpCisKKyAgICBkZWYgdGVzdF9wdXRfY2FuY2VsbGVkKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5RdWV1ZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHF1ZXVlX3B1dCgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBxLnB1dCgxKQorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3QoKToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBxLmdldCgpKQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2socXVldWVfcHV0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGVzdCgpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3B1dF9jYW5jZWxsZWRfcmFjZShzZWxmKToKKyAgICAgICAgcSA9IGFzeW5jaW8uUXVldWUobG9vcD1zZWxmLmxvb3AsIG1heHNpemU9MSkKKworICAgICAgICBwdXRfYSA9IGFzeW5jaW8uVGFzayhxLnB1dCgnYScpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHV0X2IgPSBhc3luY2lvLlRhc2socS5wdXQoJ2InKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHB1dF9jID0gYXN5bmNpby5UYXNrKHEucHV0KCdYJyksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocHV0X2EuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHB1dF9iLmRvbmUoKSkKKworICAgICAgICBwdXRfYy5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB1dF9jLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldF9ub3dhaXQoKSwgJ2EnKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLmdldF9ub3dhaXQoKSwgJ2InKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHV0X2IpCisKKyAgICBkZWYgdGVzdF9wdXRfd2l0aF93YWl0aW5nX2dldHRlcnMoc2VsZik6CisgICAgICAgIHEgPSBhc3luY2lvLlF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHEuZ2V0KCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShxLnB1dCgnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCksICdhJykKKworICAgIGRlZiB0ZXN0X3doeV9hcmVfcHV0dGVyc193YWl0aW5nKHNlbGYpOgorICAgICAgICAjIEZyb20gaXNzdWUgIzI2NS4KKworICAgICAgICBxdWV1ZSA9IGFzeW5jaW8uUXVldWUoMiwgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBwdXR0ZXIoaXRlbSk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIHF1ZXVlLnB1dChpdGVtKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ2V0dGVyKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgbnVtID0gcXVldWUucXNpemUoKQorICAgICAgICAgICAgZm9yIF8gaW4gcmFuZ2UobnVtKToKKyAgICAgICAgICAgICAgICBpdGVtID0gcXVldWUuZ2V0X25vd2FpdCgpCisKKyAgICAgICAgdDAgPSBwdXR0ZXIoMCkKKyAgICAgICAgdDEgPSBwdXR0ZXIoMSkKKyAgICAgICAgdDIgPSBwdXR0ZXIoMikKKyAgICAgICAgdDMgPSBwdXR0ZXIoMykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgIGFzeW5jaW8uZ2F0aGVyKGdldHRlcigpLCB0MCwgdDEsIHQyLCB0MywgbG9vcD1zZWxmLmxvb3ApKQorCisKK2NsYXNzIExpZm9RdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5MaWZvUXVldWUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIFsxLCAzLCAyXToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdChpKQorCisgICAgICAgIGl0ZW1zID0gW3EuZ2V0X25vd2FpdCgpIGZvciBfIGluIHJhbmdlKDMpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFsyLCAzLCAxXSwgaXRlbXMpCisKKworY2xhc3MgUHJpb3JpdHlRdWV1ZVRlc3RzKF9RdWV1ZVRlc3RCYXNlKToKKworICAgIGRlZiB0ZXN0X29yZGVyKHNlbGYpOgorICAgICAgICBxID0gYXN5bmNpby5Qcmlvcml0eVF1ZXVlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmb3IgaSBpbiBbMSwgMywgMl06CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoaSkKKworICAgICAgICBpdGVtcyA9IFtxLmdldF9ub3dhaXQoKSBmb3IgXyBpbiByYW5nZSgzKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbMSwgMiwgM10sIGl0ZW1zKQorCisKK2NsYXNzIF9RdWV1ZUpvaW5UZXN0TWl4aW46CisKKyAgICBxX2NsYXNzID0gTm9uZQorCisgICAgZGVmIHRlc3RfdGFza19kb25lX3VuZGVyZmxvdyhzZWxmKToKKyAgICAgICAgcSA9IHNlbGYucV9jbGFzcyhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcS50YXNrX2RvbmUpCisKKyAgICBkZWYgdGVzdF90YXNrX2RvbmUoc2VsZik6CisgICAgICAgIHEgPSBzZWxmLnFfY2xhc3MobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICBxLnB1dF9ub3dhaXQoaSkKKworICAgICAgICBhY2N1bXVsYXRvciA9IDAKKworICAgICAgICAjIFR3byB3b3JrZXJzIGdldCBpdGVtcyBmcm9tIHRoZSBxdWV1ZSBhbmQgY2FsbCB0YXNrX2RvbmUgYWZ0ZXIgZWFjaC4KKyAgICAgICAgIyBKb2luIHRoZSBxdWV1ZSBhbmQgYXNzZXJ0IGFsbCBpdGVtcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLgorICAgICAgICBydW5uaW5nID0gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgd29ya2VyKCk6CisgICAgICAgICAgICBub25sb2NhbCBhY2N1bXVsYXRvcgorCisgICAgICAgICAgICB3aGlsZSBydW5uaW5nOgorICAgICAgICAgICAgICAgIGl0ZW0gPSB5aWVsZCBmcm9tIHEuZ2V0KCkKKyAgICAgICAgICAgICAgICBhY2N1bXVsYXRvciArPSBpdGVtCisgICAgICAgICAgICAgICAgcS50YXNrX2RvbmUoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgdGFza3MgPSBbYXN5bmNpby5UYXNrKHdvcmtlcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICAgICAgIGZvciBpbmRleCBpbiByYW5nZSgyKV0KKworICAgICAgICAgICAgeWllbGQgZnJvbSBxLmpvaW4oKQorICAgICAgICAgICAgcmV0dXJuIHRhc2tzCisKKyAgICAgICAgdGFza3MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdW0ocmFuZ2UoMTAwKSksIGFjY3VtdWxhdG9yKQorCisgICAgICAgICMgY2xvc2UgcnVubmluZyBnZW5lcmF0b3JzCisgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4odGFza3MpKToKKyAgICAgICAgICAgIHEucHV0X25vd2FpdCgwKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdCh0YXNrcywgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgZGVmIHRlc3Rfam9pbl9lbXB0eV9xdWV1ZShzZWxmKToKKyAgICAgICAgcSA9IHNlbGYucV9jbGFzcyhsb29wPXNlbGYubG9vcCkKKworICAgICAgICAjIFRlc3QgdGhhdCBhIHF1ZXVlIGpvaW4oKXMgc3VjY2Vzc2Z1bGx5LCBhbmQgYmVmb3JlIGFueXRoaW5nIGVsc2UKKyAgICAgICAgIyAoZG9uZSB0d2ljZSBmb3IgaW5zdXJhbmNlKS4KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGpvaW4oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcS5qb2luKCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGpvaW4oKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKKyAgICAgICAgcSA9IHNlbGYucV9jbGFzcyhsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCcpCisKKyAgICAgICAgcS5fdW5maW5pc2hlZF90YXNrcyA9IDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLl9mb3JtYXQoKSwgJ21heHNpemU9MCB0YXNrcz0yJykKKworCitjbGFzcyBRdWV1ZUpvaW5UZXN0cyhfUXVldWVKb2luVGVzdE1peGluLCBfUXVldWVUZXN0QmFzZSk6CisgICAgcV9jbGFzcyA9IGFzeW5jaW8uUXVldWUKKworCitjbGFzcyBMaWZvUXVldWVKb2luVGVzdHMoX1F1ZXVlSm9pblRlc3RNaXhpbiwgX1F1ZXVlVGVzdEJhc2UpOgorICAgIHFfY2xhc3MgPSBhc3luY2lvLkxpZm9RdWV1ZQorCisKK2NsYXNzIFByaW9yaXR5UXVldWVKb2luVGVzdHMoX1F1ZXVlSm9pblRlc3RNaXhpbiwgX1F1ZXVlVGVzdEJhc2UpOgorICAgIHFfY2xhc3MgPSBhc3luY2lvLlByaW9yaXR5UXVldWUKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc2VsZWN0b3JfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNWI1YWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zZWxlY3Rvcl9ldmVudHMucHkKQEAgLTAsMCArMSwxNzY1IEBACisiIiJUZXN0cyBmb3Igc2VsZWN0b3JfZXZlbnRzLnB5IiIiCisKK2ltcG9ydCBlcnJubworaW1wb3J0IHNvY2tldAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgc2VsZWN0b3JzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IEJhc2VTZWxlY3RvckV2ZW50TG9vcAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yVHJhbnNwb3J0Citmcm9tIGFzeW5jaW8uc2VsZWN0b3JfZXZlbnRzIGltcG9ydCBfU2VsZWN0b3JTc2xUcmFuc3BvcnQKK2Zyb20gYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMgaW1wb3J0IF9TZWxlY3RvclNvY2tldFRyYW5zcG9ydAorZnJvbSBhc3luY2lvLnNlbGVjdG9yX2V2ZW50cyBpbXBvcnQgX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQKKworCitNT0NLX0FOWSA9IG1vY2suQU5ZCisKKworY2xhc3MgVGVzdEJhc2VTZWxlY3RvckV2ZW50TG9vcChCYXNlU2VsZWN0b3JFdmVudExvb3ApOgorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAjIERvbid0IGNhbGwgdGhlIGNsb3NlKCkgbWV0aG9kIG9mIHRoZSBwYXJlbnQgY2xhc3MsIGJlY2F1c2UgdGhlCisgICAgICAgICMgc2VsZWN0b3IgaXMgbW9ja2VkCisgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKKworICAgIGRlZiBfbWFrZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgIHNlbGYuX3Nzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5fY3NvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorCisKK2RlZiBsaXN0X3RvX2J1ZmZlcihsPSgpKToKKyAgICByZXR1cm4gYnl0ZWFycmF5KCkuam9pbihsKQorCisKK2RlZiBjbG9zZV90cmFuc3BvcnQodHJhbnNwb3J0KToKKyAgICAjIERvbid0IGNhbGwgdHJhbnNwb3J0LmNsb3NlKCkgYmVjYXVzZSB0aGUgZXZlbnQgbG9vcCBhbmQgdGhlIHNlbGVjdG9yCisgICAgIyBhcmUgbW9ja2VkCisgICAgaWYgdHJhbnNwb3J0Ll9zb2NrIGlzIE5vbmU6CisgICAgICAgIHJldHVybgorICAgIHRyYW5zcG9ydC5fc29jay5jbG9zZSgpCisgICAgdHJhbnNwb3J0Ll9zb2NrID0gTm9uZQorCisKK2NsYXNzIEJhc2VTZWxlY3RvckV2ZW50TG9vcFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNlbGVjdG9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zZWxlY3Rvci5zZWxlY3QucmV0dXJuX3ZhbHVlID0gW10KKyAgICAgICAgc2VsZi5sb29wID0gVGVzdEJhc2VTZWxlY3RvckV2ZW50TG9vcChzZWxmLnNlbGVjdG9yKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X21ha2Vfc29ja2V0X3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgbSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuX2lzX2Nvcm91dGluZSA9IEZhbHNlCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYubG9vcC5fbWFrZV9zb2NrZXRfdHJhbnNwb3J0KG0sIGFzeW5jaW8uUHJvdG9jb2woKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRyYW5zcG9ydCwgX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KQorCisgICAgICAgICMgQ2FsbGluZyByZXByKCkgbXVzdCBub3QgZmFpbCB3aGVuIHRoZSBldmVudCBsb29wIGlzIGNsb3NlZAorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICByZXByKHRyYW5zcG9ydCkKKworICAgICAgICBjbG9zZV90cmFuc3BvcnQodHJhbnNwb3J0KQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIHNzbCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X21ha2Vfc3NsX3RyYW5zcG9ydChzZWxmKToKKyAgICAgICAgbSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuX2lzX2Nvcm91dGluZSA9IEZhbHNlCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYubG9vcC5fbWFrZV9zc2xfdHJhbnNwb3J0KAorICAgICAgICAgICAgICAgIG0sIGFzeW5jaW8uUHJvdG9jb2woKSwgbSwgd2FpdGVyKQorICAgICAgICAgICAgIyBleGVjdXRlIHRoZSBoYW5kc2hha2Ugd2hpbGUgdGhlIGxvZ2dlciBpcyBkaXNhYmxlZAorICAgICAgICAgICAgIyB0byBpZ25vcmUgU1NMIGhhbmRzaGFrZSBmYWlsdXJlCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICAjIFNhbml0eSBjaGVjaworICAgICAgICBjbGFzc19uYW1lID0gdHJhbnNwb3J0Ll9fY2xhc3NfXy5fX25hbWVfXworICAgICAgICBzZWxmLmFzc2VydEluKCJzc2wiLCBjbGFzc19uYW1lLmxvd2VyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oInRyYW5zcG9ydCIsIGNsYXNzX25hbWUubG93ZXIoKSkKKworICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICAjIGV4ZWN1dGUgcGVuZGluZyBjYWxsYmFja3MgdG8gY2xvc2UgdGhlIHNvY2tldCB0cmFuc3BvcnQKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMuc3NsJywgTm9uZSkKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5zc2xwcm90by5zc2wnLCBOb25lKQorICAgIGRlZiB0ZXN0X21ha2Vfc3NsX3RyYW5zcG9ydF93aXRob3V0X3NzbF9lcnJvcihzZWxmKToKKyAgICAgICAgbSA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLl9tYWtlX3NzbF90cmFuc3BvcnQobSwgbSwgbSwgbSkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBjbGFzcyBFdmVudExvb3AoQmFzZVNlbGVjdG9yRXZlbnRMb29wKToKKyAgICAgICAgICAgIGRlZiBfbWFrZV9zZWxmX3BpcGUoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5fc3NvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICAgICAgICAgIHNlbGYuX2Nzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRlcm5hbF9mZHMgKz0gMQorCisgICAgICAgIHNlbGYubG9vcCA9IEV2ZW50TG9vcChzZWxmLnNlbGVjdG9yKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICBzc29jayA9IHNlbGYubG9vcC5fc3NvY2sKKyAgICAgICAgc3NvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKyAgICAgICAgY3NvY2sgPSBzZWxmLmxvb3AuX2Nzb2NrCisgICAgICAgIGNzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxCisgICAgICAgIHJlbW92ZV9yZWFkZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IgPSBzZWxlY3RvciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLmlzX2Nsb3NlZCgpKQorCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuaXNfY2xvc2VkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc2VsZWN0b3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fY3NvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubG9vcC5fc3NvY2spCisgICAgICAgIHNlbGVjdG9yLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNzb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIGNzb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKDcpCisKKyAgICAgICAgIyBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gY2FsbCBjbG9zZSgpIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisKKyAgICAgICAgIyBvcGVyYXRpb24gYmxvY2tlZCB3aGVuIHRoZSBsb29wIGlzIGNsb3NlZAorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgc2VsZi5sb29wLnJ1bl9mb3JldmVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGYpCisgICAgICAgIGZkID0gMAorICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmxvb3AuYWRkX3JlYWRlciwgZmQsIGNhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5hZGRfd3JpdGVyLCBmZCwgY2FsbGJhY2spCisKKyAgICBkZWYgdGVzdF9jbG9zZV9ub19zZWxlY3RvcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmNsb3NlKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3RvciA9IE5vbmUKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9zZWxlY3RvcikKKworICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHNlbGYubG9vcC5fc29ja2V0cGFpcikKKworICAgIGRlZiB0ZXN0X3JlYWRfZnJvbV9zZWxmX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Nzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5sb29wLl9yZWFkX2Zyb21fc2VsZigpKQorCisgICAgZGVmIHRlc3RfcmVhZF9mcm9tX3NlbGZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX3Nzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYubG9vcC5fcmVhZF9mcm9tX3NlbGYpCisKKyAgICBkZWYgdGVzdF93cml0ZV90b19zZWxmX3RyeWFnYWluKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuX2Nzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmxvb3AuX3dyaXRlX3RvX3NlbGYoKSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX3RvX3NlbGZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAjIF93cml0ZV90b19zZWxmKCkgc3dhbGxvd3MgT1NFcnJvcgorICAgICAgICBzZWxmLmxvb3AuX2Nzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5fd3JpdGVfdG9fc2VsZikKKworICAgIGRlZiB0ZXN0X3NvY2tfcmVjdihzZWxmKToKKyAgICAgICAgc29jayA9IHRlc3RfdXRpbHMubW9ja19ub25ibG9ja2luZ19zb2NrZXQoKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdiA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX3JlY3Yoc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdi5hc3NlcnRfY2FsbGVkX3dpdGgoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X2NhbmNlbGVkX2Z1dChzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3JlY3YoZiwgRmFsc2UsIHNvY2ssIDEwMjQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5yZWN2LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX3JlY3ZfdW5yZWdpc3RlcihzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmLmNhbmNlbCgpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBUcnVlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwpLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19yZWN2X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19yZWN2KGYsIEZhbHNlLCBzb2NrLCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgxMCwgc2VsZi5sb29wLl9zb2NrX3JlY3YsIGYsIFRydWUsIHNvY2ssIDEwMjQpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3JlY3ZfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBlcnIgPSBzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfcmVjdihmLCBGYWxzZSwgc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhlcnIsIGYuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9zb2NrX3NlbmRhbGwoc2VsZik6CisgICAgICAgIHNvY2sgPSB0ZXN0X3V0aWxzLm1vY2tfbm9uYmxvY2tpbmdfc29ja2V0KCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBzZWxmLmxvb3Auc29ja19zZW5kYWxsKHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChmLCBGYWxzZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX3NlbmRhbGxfbm9kYXRhKHNlbGYpOgorICAgICAgICBzb2NrID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfc2VuZGFsbChzb2NrLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBhc3luY2lvLkZ1dHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmLnJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc29ja19zZW5kYWxsLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzb2NrLnNlbmQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIFRydWUsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEwLCksIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMTAsIHNlbGYubG9vcC5fc29ja19zZW5kYWxsLCBmLCBUcnVlLCBzb2NrLCBiJ2RhdGEnKSwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyLmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX3NlbmRhbGxfaW50ZXJydXB0ZWQoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYidkYXRhJyksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgZXJyID0gc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwoZiwgRmFsc2UsIHNvY2ssIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZi5leGNlcHRpb24oKSwgZXJyKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbChzZWxmKToKKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9fc29ja19zZW5kYWxsX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19zZW5kYWxsKGYsIEZhbHNlLCBzb2NrLCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEwLCBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbCwgZiwgVHJ1ZSwgc29jaywgYid0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfc2VuZGFsbF9ub25lKHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDEwCisgICAgICAgIHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfc2VuZGFsbChmLCBGYWxzZSwgc29jaywgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX3NlbmRhbGwsIGYsIFRydWUsIHNvY2ssIGInZGF0YScpLAorICAgICAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3Rfc29ja19jb25uZWN0KHNlbGYpOgorICAgICAgICBzb2NrID0gdGVzdF91dGlscy5tb2NrX25vbmJsb2NraW5nX3NvY2tldCgpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0ID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYXN5bmNpby5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoZiwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdC5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9zb2NrX2Nvbm5lY3RfdGltZW91dChzZWxmKToKKyAgICAgICAgIyBhc3luY2lvIGlzc3VlICMyMDU6IHNvY2tfY29ubmVjdCgpIG11c3QgdW5yZWdpc3RlciB0aGUgc29ja2V0IG9uCisgICAgICAgICMgdGltZW91dCBlcnJvcgorCisgICAgICAgICMgcHJlcGFyZSBtb2NrcworICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jayA9IHRlc3RfdXRpbHMubW9ja19ub25ibG9ja2luZ19zb2NrZXQoKQorICAgICAgICBzb2NrLmNvbm5lY3Quc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICAjIGZpcnN0IGNhbGwgdG8gc29ja19jb25uZWN0KCkgcmVnaXN0ZXJzIHRoZSBzb2NrZXQKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLnNvY2tfY29ubmVjdChzb2NrLCAoJzEyNy4wLjAuMScsIDgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suY29ubmVjdC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZ1dC5fY2FsbGJhY2tzKSwgMSkKKworICAgICAgICAjIG9uIHRpbWVvdXQsIHRoZSBzb2NrZXQgbXVzdCBiZSB1bnJlZ2lzdGVyZWQKKyAgICAgICAgc29jay5jb25uZWN0LnJlc2V0X21vY2soKQorICAgICAgICBmdXQuc2V0X2V4Y2VwdGlvbihhc3luY2lvLlRpbWVvdXRFcnJvcikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlRpbWVvdXRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBzb2NrLCAoJzEyNy4wLjAuMScsIDgwODApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGYucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb2NrLmNvbm5lY3QuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdF9jYl9jYW5jZWxsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorCisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0X2NiKGYsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc29jay5nZXRzb2Nrb3B0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3Rfd3JpdGVyKHNlbGYpOgorICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIGZkIGlzIHJlZ2lzdGVyZWQgYW5kIHRoZW4gdW5yZWdpc3RlcmVkCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5jb25uZWN0LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHNvY2suZ2V0c29ja29wdC5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIGFkZHJlc3MgPSAoJzEyNy4wLjAuMScsIDgwODApCisKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AuX3NvY2tfY29ubmVjdChmLCBzb2NrLCBhZGRyZXNzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLmFkZF93cml0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEwLCBzZWxmLmxvb3AuYWRkX3dyaXRlci5jYWxsX2FyZ3NbMF1bMF0pCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3RfY2IoZiwgc29jaywgYWRkcmVzcykKKyAgICAgICAgIyBuZWVkIHRvIHJ1biB0aGUgZXZlbnQgbG9vcCB0byBleGVjdXRlIF9zb2NrX2Nvbm5lY3RfZG9uZSgpIGNhbGxiYWNrCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfY29ubmVjdF9jYl90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKyAgICAgICAgc29jay5nZXRzb2Nrb3B0LnJldHVybl92YWx1ZSA9IGVycm5vLkVBR0FJTgorCisgICAgICAgICMgY2hlY2sgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIGhhbmRsZWQKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2Nvbm5lY3RfY2IoZiwgc29jaywgKCcxMjcuMC4wLjEnLCA4MDgwKSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2Nvbm5lY3RfY2JfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmdldHNvY2tvcHQucmV0dXJuX3ZhbHVlID0gZXJybm8uRU5PVENPTk4KKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19jb25uZWN0X2NiKGYsIHNvY2ssICgnMTI3LjAuMC4xJywgODA4MCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBPU0Vycm9yKQorCisgICAgZGVmIHRlc3Rfc29ja19hY2NlcHQoc2VsZik6CisgICAgICAgIHNvY2sgPSB0ZXN0X3V0aWxzLm1vY2tfbm9uYmxvY2tpbmdfc29ja2V0KCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdCA9IG1vY2suTW9jaygpCisKKyAgICAgICAgZiA9IHNlbGYubG9vcC5zb2NrX2FjY2VwdChzb2NrKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgYXN5bmNpby5GdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoZiwgRmFsc2UsIHNvY2spLCBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0LmNhbGxfYXJnc1swXSkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdChzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGNvbm4gPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5yZXR1cm5fdmFsdWUgPSBjb25uLCAoJzEyNy4wLjAuMScsIDEwMDApCisKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChjb25uLCAoJzEyNy4wLjAuMScsIDEwMDApKSwgZi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoRmFsc2UsKSwgY29ubi5zZXRibG9ja2luZy5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfY2FuY2VsZWRfZnV0KHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AuX3NvY2tfYWNjZXB0KGYsIEZhbHNlLCBzb2NrKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNvY2suYWNjZXB0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X19zb2NrX2FjY2VwdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMTAKKworICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKworICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgVHJ1ZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMTAsKSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfX3NvY2tfYWNjZXB0X3RyeWFnYWluKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zb2NrX2FjY2VwdChmLCBGYWxzZSwgc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICgxMCwgc2VsZi5sb29wLl9zb2NrX2FjY2VwdCwgZiwgVHJ1ZSwgc29jayksCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlci5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9fc29ja19hY2NlcHRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBmID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNvY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSAxMAorICAgICAgICBlcnIgPSBzb2NrLmFjY2VwdC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHNlbGYubG9vcC5fc29ja19hY2NlcHQoZiwgRmFsc2UsIHNvY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXJyLCBmLmV4Y2VwdGlvbigpKQorCisgICAgZGVmIHRlc3RfYWRkX3JlYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnNpZGVfZWZmZWN0ID0gS2V5RXJyb3IKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHcpCisKKyAgICBkZWYgdGVzdF9hZGRfcmVhZGVyX2V4aXN0aW5nKHNlbGYpOgorICAgICAgICByZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydFRydWUocmVhZGVyLmNhbmNlbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLl9zZWxlY3Rvci5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsZWQpCisgICAgICAgIGZkLCBtYXNrLCAociwgdykgPSBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxlY3RvcnMuRVZFTlRfV1JJVEUgfCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgbWFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYiwgci5fY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JpdGVyLCB3KQorCisgICAgZGVmIHRlc3RfYWRkX3JlYWRlcl9leGlzdGluZ193cml0ZXIoc2VsZik6CisgICAgICAgIHdyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCB3cml0ZXIpKQorICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcigxLCBjYikKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2IsIHIuX2NhbGxiYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXRlciwgdykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV9yZWFkZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKE5vbmUsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyKDEpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVtb3ZlX3JlYWRlcl9yZWFkX3dyaXRlKHNlbGYpOgorICAgICAgICByZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLmdldF9rZXkucmV0dXJuX3ZhbHVlID0gc2VsZWN0b3JzLlNlbGVjdG9yS2V5KAorICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQgfCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAocmVhZGVyLCB3cml0ZXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IudW5yZWdpc3Rlci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfcmVhZGVyX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcigxKSkKKworICAgIGRlZiB0ZXN0X2FkZF93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIGNiID0gbGFtYmRhOiBUcnVlCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDEsIGNiKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvb3AuX3NlbGVjdG9yLnJlZ2lzdGVyLmNhbGxlZCkKKyAgICAgICAgZmQsIG1hc2ssIChyLCB3KSA9IHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFLCBtYXNrKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCB3Ll9jYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X2FkZF93cml0ZXJfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHJlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHdyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgd3JpdGVyKSkKKyAgICAgICAgY2IgPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoMSwgY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyaXRlci5jYW5jZWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5fc2VsZWN0b3IucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbGVkKQorICAgICAgICBmZCwgbWFzaywgKHIsIHcpID0gc2VsZi5sb29wLl9zZWxlY3Rvci5tb2RpZnkuY2FsbF9hcmdzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZWN0b3JzLkVWRU5UX1dSSVRFIHwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIG1hc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLCByKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLCB3Ll9jYWxsYmFjaykKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5yZXR1cm5fdmFsdWUgPSBzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsIChOb25lLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9zZWxlY3Rvci51bnJlZ2lzdGVyLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93cml0ZXJfcmVhZF93cml0ZShzZWxmKToKKyAgICAgICAgcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9zZWxlY3Rvci5nZXRfa2V5LnJldHVybl92YWx1ZSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgIDEsIDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFEIHwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgKHJlYWRlciwgd3JpdGVyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIoMSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AuX3NlbGVjdG9yLnVucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKDEsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAocmVhZGVyLCBOb25lKSksCisgICAgICAgICAgICBzZWxmLmxvb3AuX3NlbGVjdG9yLm1vZGlmeS5jYWxsX2FyZ3NbMF0pCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfd3JpdGVyX3Vua25vd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5fc2VsZWN0b3IuZ2V0X2tleS5zaWRlX2VmZmVjdCA9IEtleUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlcigxKSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3JlYWQoc2VsZik6CisgICAgICAgIHJlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHJlYWRlci5fY2FuY2VsbGVkID0gRmFsc2UKKworICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjayA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgKKyAgICAgICAgICAgICAgICAxLCAxLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgKHJlYWRlciwgTm9uZSkpLAorICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCldKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5sb29wLl9hZGRfY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuX2FkZF9jYWxsYmFjay5hc3NlcnRfY2FsbGVkX3dpdGgocmVhZGVyKQorCisgICAgZGVmIHRlc3RfcHJvY2Vzc19ldmVudHNfcmVhZF9jYW5jZWxsZWQoc2VsZik6CisgICAgICAgIHJlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHJlYWRlci5jYW5jZWxsZWQgPSBUcnVlCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKAorICAgICAgICAgICAgWyhzZWxlY3RvcnMuU2VsZWN0b3JLZXkoCisgICAgICAgICAgICAgICAgMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIChyZWFkZXIsIE5vbmUpKSwKKyAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfUkVBRCldKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlci5hc3NlcnRfY2FsbGVkX3dpdGgoMSkKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3dyaXRlKHNlbGYpOgorICAgICAgICB3cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICB3cml0ZXIuX2NhbmNlbGxlZCA9IEZhbHNlCisKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2sgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuX3Byb2Nlc3NfZXZlbnRzKAorICAgICAgICAgICAgWyhzZWxlY3RvcnMuU2VsZWN0b3JLZXkoMSwgMSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5vbmUsIHdyaXRlcikpLAorICAgICAgICAgICAgICBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpXSkKKyAgICAgICAgc2VsZi5sb29wLl9hZGRfY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF93aXRoKHdyaXRlcikKKworICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXZlbnRzX3dyaXRlX2NhbmNlbGxlZChzZWxmKToKKyAgICAgICAgd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgd3JpdGVyLmNhbmNlbGxlZCA9IFRydWUKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHNlbGYubG9vcC5fcHJvY2Vzc19ldmVudHMoCisgICAgICAgICAgICBbKHNlbGVjdG9ycy5TZWxlY3RvcktleSgxLCAxLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgd3JpdGVyKSksCisgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSldKQorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlci5hc3NlcnRfY2FsbGVkX3dpdGgoMSkKKworCitjbGFzcyBTZWxlY3RvclRyYW5zcG9ydFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLnByb3RvY29sID0gdGVzdF91dGlscy5tYWtlX3Rlc3RfcHJvdG9jb2woYXN5bmNpby5Qcm90b2NvbCkKKyAgICAgICAgc2VsZi5zb2NrID0gbW9jay5Nb2NrKHNvY2tldC5zb2NrZXQpCisgICAgICAgIHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgZGVmIGNyZWF0ZV90cmFuc3BvcnQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IF9TZWxlY3RvclRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYuc29jaywgc2VsZi5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbG9zZV90cmFuc3BvcnQsIHRyYW5zcG9ydCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLmNyZWF0ZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydElzKHRyLl9sb29wLCBzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHIuX3NvY2ssIHNlbGYuc29jaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ci5fc29ja19mZCwgNykKKworICAgIGRlZiB0ZXN0X2Fib3J0KHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuY3JlYXRlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZSA9IG1vY2suTW9jaygpCisKKyAgICAgICAgdHIuYWJvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLmNyZWF0ZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmlzX2Nsb3NpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFs3XSkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorCisgICAgICAgIHRyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzddKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfd3JpdGVfYnVmZmVyKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuY3JlYXRlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9mb3JjZV9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLmNyZWF0ZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5fYnVmZmVyLmV4dGVuZChiJzEnKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcig3LCBtb2NrLnNlbnRpbmVsKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCBtb2NrLnNlbnRpbmVsKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UoTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuaXNfY2xvc2luZygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGxpc3RfdG9fYnVmZmVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICAgICAgIyBzZWNvbmQgY2xvc2Ugc2hvdWxkIG5vdCByZW1vdmUgcmVhZGVyCisgICAgICAgIHRyLl9mb3JjZV9jbG9zZShOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHNlbGYubG9vcC5yZW1vdmVfcmVhZGVyX2NvdW50WzddKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8ubG9nLmxvZ2dlci5lcnJvcicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3Ioc2VsZiwgbV9leGMpOgorICAgICAgICBleGMgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIgPSBzZWxmLmNyZWF0ZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IoZXhjKQorCisgICAgICAgIG1fZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oCisgICAgICAgICAgICAgICAgJ0ZhdGFsIGVycm9yIG9uIHRyYW5zcG9ydFxucHJvdG9jb2w6LipcbnRyYW5zcG9ydDouKicpLAorICAgICAgICAgICAgZXhjX2luZm89KE9TRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisKKyAgICAgICAgdHIuX2ZvcmNlX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChleGMpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIGV4YyA9IE9TRXJyb3IoKQorICAgICAgICB0ciA9IHNlbGYuY3JlYXRlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX2xvb3ApCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChleGMpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGV4YykKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9zb2NrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisKKworY2xhc3MgU2VsZWN0b3JTb2NrZXRUcmFuc3BvcnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IG1vY2suTW9jayhzb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2tfZmQgPSBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKworICAgIGRlZiBzb2NrZXRfdHJhbnNwb3J0KHNlbGYsIHdhaXRlcj1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yU29ja2V0VHJhbnNwb3J0KHNlbGYubG9vcCwgc2VsZi5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbCwgd2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsb3NlX3RyYW5zcG9ydCwgdHJhbnNwb3J0KQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0CisKKyAgICBkZWYgdGVzdF9jdG9yKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQod2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh3YWl0ZXIpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNywgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5hc3NlcnRfY2FsbGVkX3dpdGgodHIpCisKKyAgICBkZWYgdGVzdF9jdG9yX3dpdGhfd2FpdGVyKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5zb2NrZXRfdHJhbnNwb3J0KHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3BhdXNlX3Jlc3VtZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDcsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoNyBpbiBzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdHIucmVzdW1lX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDcsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2LnJldHVybl92YWx1ZSA9IGInZGF0YScKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X2VvZihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmVvZl9yZWNlaXZlZC5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfZW9mX2tlZXBfb3BlbihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gbW9jay5Nb2NrKCkKKworICAgICAgICBzZWxmLnNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgc2VsZi5wcm90b2NvbC5lb2ZfcmVjZWl2ZWQucmV0dXJuX3ZhbHVlID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0LmNsb3NlLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2FpbihzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2Fpbl9pbnRlcnJ1cHRlZChzZWxmLCBtX2V4Yyk6CisgICAgICAgIHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gSW50ZXJydXB0ZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnbG9nZ2luZy5leGNlcHRpb24nKQorICAgIGRlZiB0ZXN0X3JlYWRfcmVhZHlfY29ubl9yZXNldChzZWxmLCBtX2V4Yyk6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlc2V0RXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZm9yY2VfY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKworICAgIEBtb2NrLnBhdGNoKCdsb2dnaW5nLmV4Y2VwdGlvbicpCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lcnIoc2VsZiwgbV9leGMpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCByZWFkIGVycm9yIG9uIHNvY2tldCB0cmFuc3BvcnQnKQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5hc3NlcnRfY2FsbGVkX3dpdGgoZGF0YSkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShiJ2RhdGEnKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSBsZW4oZGF0YSkKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuYXNzZXJ0X2NhbGxlZF93aXRoKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYnl0ZWFycmF5KGInZGF0YScpKSAgIyBIYXNuJ3QgYmVlbiBtdXRhdGVkLgorCisgICAgZGVmIHRlc3Rfd3JpdGVfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuc29jay5zZW5kLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfbm9fZGF0YShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfYnVmZmVyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoYidkYXRhMScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEyJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YTEnLCBiJ2RhdGEyJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbF9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJ5dGVhcnJheShiJ2RhdGEnKSkgICMgSGFzbid0IGJlZW4gbXV0YXRlZC4KKworICAgIGRlZiB0ZXN0X3dyaXRlX3BhcnRpYWxfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoYidkYXRhJykKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2IndGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbF9ub25lKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIHNlbGYuc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNworCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uc2VsZWN0b3JfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfZXhjZXB0aW9uKHNlbGYsIG1fbG9nKToKKyAgICAgICAgZXJyID0gc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBzb2NrZXQgdHJhbnNwb3J0JykKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisKKyAgICAgICAgc2VsZi5zb2NrLnJlc2V0X21vY2soKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDIpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF93cml0ZV9zdHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHJhbnNwb3J0LndyaXRlLCAnc3RyJykKKworICAgIGRlZiB0ZXN0X3dyaXRlX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDEpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHkoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X2Nsb3Npbmcoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGRhdGEpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLnNvY2suY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICAjIFRoaXMgaXMgYW4gaW50ZXJuYWwgZXJyb3IuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfcGFydGlhbChzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmV4dGVuZChkYXRhKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYid0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9wYXJ0aWFsX25vbmUoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHNlbGYuc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDAKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoZGF0YSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKworICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3dyaXRlcig3LCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExZGF0YTInXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc29ja2V0X3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5leHRlbmQoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBzb2NrZXQgdHJhbnNwb3J0JykKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfZXhjZXB0aW9uX2FuZF9jbG9zZShzZWxmLCBtX2xvZyk6CisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gT1NFcnJvcigpCisgICAgICAgIHJlbW92ZV93cml0ZXIgPSBzZWxmLmxvb3AucmVtb3ZlX3dyaXRlciA9IG1vY2suTW9jaygpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICByZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aChzZWxmLnNvY2tfZmQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5zb2NrZXRfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNvY2suc2h1dGRvd24uY2FsbF9jb3VudCwgMSkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX2J1ZmZlcihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLnNvY2tldF90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLnNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZV9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9idWZmZXIsIGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5fZW9mKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zaHV0ZG93bi5jYWxsZWQpCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gbGFtYmRhIF86IDQKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5zb2NrLnNodXRkb3duLmFzc2VydF9jYWxsZWRfd2l0aChzb2NrZXQuU0hVVF9XUikKKyAgICAgICAgdHIuY2xvc2UoKQorCisKK0B1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKK2NsYXNzIFNlbGVjdG9yU3NsVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLlByb3RvY29sKQorICAgICAgICBzZWxmLnNvY2sgPSBtb2NrLk1vY2soc29ja2V0LnNvY2tldCkKKyAgICAgICAgc2VsZi5zb2NrLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA3CisgICAgICAgIHNlbGYuc3Nsc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5maWxlbm8ucmV0dXJuX3ZhbHVlID0gMQorICAgICAgICBzZWxmLnNzbGNvbnRleHQgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNzbGNvbnRleHQud3JhcF9zb2NrZXQucmV0dXJuX3ZhbHVlID0gc2VsZi5zc2xzb2NrCisKKyAgICBkZWYgc3NsX3RyYW5zcG9ydChzZWxmLCB3YWl0ZXI9Tm9uZSwgc2VydmVyX2hvc3RuYW1lPU5vbmUpOgorICAgICAgICB0cmFuc3BvcnQgPSBfU2VsZWN0b3JTc2xUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssIHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNzbGNvbnRleHQsIHdhaXRlcj13YWl0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9c2VydmVyX2hvc3RuYW1lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xvc2VfdHJhbnNwb3J0LCB0cmFuc3BvcnQpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQKKworICAgIGRlZiBfbWFrZV9vbmUoc2VsZiwgY3JlYXRlX3dhaXRlcj1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zc2xfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5zb2NrLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2sucmVzZXRfbW9jaygpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC5yZXNldF9tb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLnJlc2V0X2NvdW50ZXJzKCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3Rfb25faGFuZHNoYWtlKHNlbGYpOgorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHIgPSBzZWxmLnNzbF90cmFuc3BvcnQod2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2UuY2FsbGVkKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9yZWFkZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLnNzbF90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcigxLCB0cmFuc3BvcnQuX29uX2hhbmRzaGFrZSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV93cml0ZXJfcmV0cnkoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5zZXRfZGVidWcoRmFsc2UpCisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zc2xfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoMSwgdHJhbnNwb3J0Ll9vbl9oYW5kc2hha2UsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9vbl9oYW5kc2hha2VfZXhjKHNlbGYpOgorICAgICAgICBleGMgPSBWYWx1ZUVycm9yKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zc2xfdHJhbnNwb3J0KHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydElzKGV4Yywgd2FpdGVyLmV4Y2VwdGlvbigpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X29uX2hhbmRzaGFrZV9iYXNlX2V4YyhzZWxmKToKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuc3NsX3RyYW5zcG9ydCh3YWl0ZXI9d2FpdGVyKQorICAgICAgICBleGMgPSBCYXNlRXhjZXB0aW9uKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJhc2VFeGNlcHRpb24sIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLmNsb3NlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZXhjLCB3YWl0ZXIuZXhjZXB0aW9uKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfaGFuZHNoYWtlKHNlbGYpOgorICAgICAgICAjIFB5dGhvbiBpc3N1ZSAjMjMxOTc6IGNhbmNlbGxpbmcgYW4gaGFuZHNoYWtlIG11c3Qgbm90IHJhaXNlIGFuCisgICAgICAgICMgZXhjZXB0aW9uIG9yIGxvZyBhbiBlcnJvciwgZXZlbiBpZiB0aGUgaGFuZHNoYWtlIGZhaWxlZAorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5zc2xfdHJhbnNwb3J0KHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHdhaXRlci5jYW5jZWwoKQorICAgICAgICBleGMgPSBWYWx1ZUVycm9yKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IGV4YworICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHRyYW5zcG9ydC5fb25faGFuZHNoYWtlKDApCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfcGF1c2VfcmVzdW1lX3JlYWRpbmcoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDEsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoMSBpbiBzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdHIucmVzdW1lX3JlYWRpbmcoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9wYXVzZWQpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfcmVhZGVyKDEsIHRyLl9yZWFkX3JlYWR5KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICB0ci5yZXN1bWVfcmVhZGluZygpCisKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX2J5dGVhcnJheShzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGJ5dGVhcnJheShiJ2RhdGEnKSkgICMgSGFzbid0IGJlZW4gbXV0YXRlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkYXRhLCB0cmFuc3BvcnQuX2J1ZmZlcikgICMgSGFzbid0IGJlZW4gaW5jb3Jwb3JhdGVkLgorCisgICAgZGVmIHRlc3Rfd3JpdGVfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBkYXRhID0gbWVtb3J5dmlldyhiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9zdHIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0cmFuc3BvcnQud3JpdGUsICdzdHInKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfY2xvc2luZyhzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAxKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMikKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3dyaXRlX2V4Y2VwdGlvbihzZWxmLCBtX2xvZyk6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9jb25uX2xvc3QgPSAxCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fYnVmZmVyLCBsaXN0X3RvX2J1ZmZlcigpKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZShiJ2RhdGEnKQorICAgICAgICB0cmFuc3BvcnQud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV9sb2cud2FybmluZy5hc3NlcnRfY2FsbGVkX3dpdGgoJ3NvY2tldC5zZW5kKCkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYidkYXRhJywpLCBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbF9hcmdzWzBdKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV93cml0ZV93YW50c19yZWFkKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV93YW50c19yZWFkID0gVHJ1ZQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2VvZihzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3YucmV0dXJuX3ZhbHVlID0gYicnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5X3JlY3ZfY29ubl9yZXNldChzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVzZXRFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZSA9IG1vY2suTW9jaygpCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mb3JjZV9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoZXJyKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3JldHJ5KHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50UmVhZEVycm9yCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5yZWN2LmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5yZWN2LnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5kYXRhX3JlY2VpdmVkLmNhbGxlZCkKKworICAgICAgICBzZWxmLnNzbHNvY2sucmVjdi5zaWRlX2VmZmVjdCA9IEludGVycnVwdGVkRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X3dyaXRlKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlciA9IG1vY2suTW9jaygpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFdyaXRlRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUpCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHRyYW5zcG9ydC5fc29ja19mZCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9yZWN2X2V4YyhzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnJlY3Yuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gU1NMIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKCksIHRyYW5zcG9ydC5fYnVmZmVyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9ub25lKHNlbGYpOgorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5yZXR1cm5fdmFsdWUgPSAwCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhMScsIGInZGF0YTInXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNzbHNvY2suc2VuZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YTFkYXRhMiddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDIKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGExJywgYidkYXRhMiddKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3Nsc29jay5zZW5kLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcihbYid0YTFkYXRhMiddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2Nsb3NpbmdfcGFydGlhbChzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gMgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YTEnLCBiJ2RhdGEyJ10pCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zc2xzb2NrLnNlbmQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc3Nsc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnJldHVybl92YWx1ZSA9IDQKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuY2xvc2UoKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlciA9IGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcmVhZHlfc2VuZF9jbG9zaW5nX2VtcHR5X2J1ZmZlcihzZWxmKToKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gNAorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoKQorICAgICAgICB0cmFuc3BvcnQuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX3JldHJ5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gc3NsLlNTTFdhbnRXcml0ZUVycm9yCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3RfdG9fYnVmZmVyKFtiJ2RhdGEnXSksIHRyYW5zcG9ydC5fYnVmZmVyKQorCisgICAgICAgIHNlbGYuc3Nsc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdF90b19idWZmZXIoW2InZGF0YSddKSwgdHJhbnNwb3J0Ll9idWZmZXIpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX3JlYWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIgPSBsaXN0X3RvX2J1ZmZlcihbYidkYXRhJ10pCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV93cml0ZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLnNzbHNvY2suc2VuZC5zaWRlX2VmZmVjdCA9IHNzbC5TU0xXYW50UmVhZEVycm9yCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3dyaXRlX3dhbnRzX3JlYWQpCisgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfd3JpdGVyLmFzc2VydF9jYWxsZWRfd2l0aCh0cmFuc3BvcnQuX3NvY2tfZmQpCisKKyAgICBkZWYgdGVzdF93cml0ZV9yZWFkeV9zZW5kX2V4YyhzZWxmKToKKyAgICAgICAgZXJyID0gc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLl9tYWtlX29uZSgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyID0gbGlzdF90b19idWZmZXIoW2InZGF0YSddKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll93cml0ZV9yZWFkeSgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGYXRhbCB3cml0ZSBlcnJvciBvbiBTU0wgdHJhbnNwb3J0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0X3RvX2J1ZmZlcigpLCB0cmFuc3BvcnQuX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3dyaXRlX3JlYWR5X3JlYWRfd2FudHNfd3JpdGUoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5hZGRfcmVhZGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5zc2xzb2NrLnNlbmQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfd2FudHNfd3JpdGUgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fcmVhZF9yZWFkeSA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fd3JpdGVfcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9yZWFkX3dhbnRzX3dyaXRlKQorICAgICAgICB0cmFuc3BvcnQuX3JlYWRfcmVhZHkuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdHJhbnNwb3J0Ll9zb2NrX2ZkLCB0cmFuc3BvcnQuX3JlYWRfcmVhZHkpCisKKyAgICBkZWYgdGVzdF93cml0ZV9lb2Yoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5fbWFrZV9vbmUoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLmNhbl93cml0ZV9lb2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHIud3JpdGVfZW9mKQorCisgICAgZGVmIGNoZWNrX2Nsb3NlKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYuX21ha2Vfb25lKCkKKyAgICAgICAgdHIuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgc2VsZi5sb29wLnJlbW92ZV9yZWFkZXJfY291bnRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKworICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHIuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBzZWxmLmxvb3AucmVtb3ZlX3JlYWRlcl9jb3VudFsxXSkKKworICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX25vdF9jb25uZWN0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuc3Nsc29jay5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBzc2wuU1NMV2FudFJlYWRFcnJvcgorICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgJ05vIFNTTCBzdXBwb3J0JykKKyAgICBkZWYgdGVzdF9zZXJ2ZXJfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuc3NsX3RyYW5zcG9ydChzZXJ2ZXJfaG9zdG5hbWU9J2xvY2FsaG9zdCcpCisgICAgICAgIHNlbGYuc3NsY29udGV4dC53cmFwX3NvY2tldC5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICBzZWxmLnNvY2ssIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlLCBzZXJ2ZXJfc2lkZT1GYWxzZSwKKyAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0nbG9jYWxob3N0JykKKworCitjbGFzcyBTZWxlY3RvclNzbFdpdGhvdXRTc2xUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5zZWxlY3Rvcl9ldmVudHMuc3NsJywgTm9uZSkKKyAgICBkZWYgdGVzdF9zc2xfdHJhbnNwb3J0X3JlcXVpcmVzX3NzbF9tb2R1bGUoc2VsZik6CisgICAgICAgIE1vY2sgPSBtb2NrLk1vY2sKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgX1NlbGVjdG9yU3NsVHJhbnNwb3J0KE1vY2soKSwgTW9jaygpLCBNb2NrKCksIE1vY2soKSkKKworCitjbGFzcyBTZWxlY3RvckRhdGFncmFtVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLkRhdGFncmFtUHJvdG9jb2wpCisgICAgICAgIHNlbGYuc29jayA9IG1vY2suTW9jayhzcGVjX3NldD1zb2NrZXQuc29ja2V0KQorICAgICAgICBzZWxmLnNvY2suZmlsZW5vLnJldHVybl92YWx1ZSA9IDcKKworICAgIGRlZiBkYXRhZ3JhbV90cmFuc3BvcnQoc2VsZiwgYWRkcmVzcz1Ob25lKToKKyAgICAgICAgdHJhbnNwb3J0ID0gX1NlbGVjdG9yRGF0YWdyYW1UcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3M9YWRkcmVzcykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsb3NlX3RyYW5zcG9ydCwgdHJhbnNwb3J0KQorICAgICAgICByZXR1cm4gdHJhbnNwb3J0CisKKyAgICBkZWYgdGVzdF9yZWFkX3JlYWR5KHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisKKyAgICAgICAgc2VsZi5zb2NrLnJlY3Zmcm9tLnJldHVybl92YWx1ZSA9IChiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFncmFtX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQpKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9lcnIoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKworICAgICAgICBlcnIgPSBzZWxmLnNvY2sucmVjdmZyb20uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgcmVhZCBlcnJvciBvbiBkYXRhZ3JhbSB0cmFuc3BvcnQnKQorCisgICAgZGVmIHRlc3RfcmVhZF9yZWFkeV9vc2VycihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorCisgICAgICAgIGVyciA9IHNlbGYuc29jay5yZWN2ZnJvbS5zaWRlX2VmZmVjdCA9IE9TRXJyb3IoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9yZWFkX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorICAgICAgICBzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9zZW5kdG8oc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICBkYXRhID0gYnl0ZWFycmF5KGInZGF0YScpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5jYWxsX2FyZ3NbMF0sIChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0KSkpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgZGF0YSA9IG1lbW9yeXZpZXcoYidkYXRhJykKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQpKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19ub19kYXRhKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJycsICgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGEnLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fYnVmZmVyKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J1ZmZlcl9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIGRhdGEyID0gYnl0ZWFycmF5KGInZGF0YTInKQorICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YTIsICgnMC4wLjAuMCcsIDEyMzQ1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIFsoYidkYXRhMScsICgnMC4wLjAuMCcsIDEyMzQ1KSksCisgICAgICAgICAgICAgKGInZGF0YTInLCAoJzAuMC4wLjAnLCAxMjM0NSkpXSwKKyAgICAgICAgICAgIGxpc3QodHJhbnNwb3J0Ll9idWZmZXIpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhbnNwb3J0Ll9idWZmZXJbMV1bMF0sIGJ5dGVzKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2J1ZmZlcl9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBkYXRhMiA9IG1lbW9yeXZpZXcoYidkYXRhMicpCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhMiwgKCcwLjAuMC4wJywgMTIzNDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYuc29jay5zZW5kdG8uY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCcwLjAuMC4wJywgMTIzNDUpKSwKKyAgICAgICAgICAgICAoYidkYXRhMicsICgnMC4wLjAuMCcsIDEyMzQ1KSldLAorICAgICAgICAgICAgbGlzdCh0cmFuc3BvcnQuX2J1ZmZlcikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFuc3BvcnQuX2J1ZmZlclsxXVswXSwgYnl0ZXMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fdHJ5YWdhaW4oc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpCisKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbKGInZGF0YScsICgnMC4wLjAuMCcsIDEyMzQ1KSldLCBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnNlbGVjdG9yX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X3NlbmR0b19leGNlcHRpb24oc2VsZiwgbV9sb2cpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBlcnIgPSBzZWxmLnNvY2suc2VuZHRvLnNpZGVfZWZmZWN0ID0gUnVudGltZUVycm9yKCkKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIGRhdGFncmFtIHRyYW5zcG9ydCcpCisgICAgICAgIHRyYW5zcG9ydC5fY29ubl9sb3N0ID0gMQorCisgICAgICAgIHRyYW5zcG9ydC5fYWRkcmVzcyA9ICgnMTIzJywpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisgICAgICAgIHRyYW5zcG9ydC5zZW5kdG8oZGF0YSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhkYXRhKQorICAgICAgICBtX2xvZy53YXJuaW5nLmFzc2VydF9jYWxsZWRfd2l0aCgnc29ja2V0LnNlbmQoKSByYWlzZWQgZXhjZXB0aW9uLicpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fZXJyb3JfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIGRhdGEgPSBiJ2RhdGEnCisKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IENvbm5lY3Rpb25SZWZ1c2VkRXJyb3IKKworICAgICAgICB0cmFuc3BvcnQgPSBzZWxmLmRhdGFncmFtX3RyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEsICgpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0Ll9jb25uX2xvc3QsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fZXJyb3JfcmVjZWl2ZWRfY29ubmVjdGVkKHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworCisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KGFkZHJlc3M9KCcwLjAuMC4wJywgMSkpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuc2VuZHRvKGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3N0cihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sICdzdHInLCAoKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19jb25uZWN0ZWRfYWRkcihzZWxmKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoYWRkcmVzcz0oJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCB0cmFuc3BvcnQuc2VuZHRvLCBiJ3N0cicsICgnMC4wLjAuMCcsIDIpKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KGFkZHJlc3M9KDEsKSkKKyAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2Nvbm5fbG9zdCwgMSkKKyAgICAgICAgdHJhbnNwb3J0LnNlbmR0byhiJ2RhdGEnLCAoMSwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5fY29ubl9sb3N0LCAyKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5KHNlbGYpOgorICAgICAgICBkYXRhID0gYidkYXRhJworICAgICAgICBzZWxmLnNvY2suc2VuZHRvLnJldHVybl92YWx1ZSA9IGxlbihkYXRhKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChkYXRhLCAoJzAuMC4wLjAnLCAxMjM0NSkpKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5zb2NrLnNlbmR0by5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmNhbGxfYXJnc1swXSwgKGRhdGEsICgnMC4wLjAuMCcsIDEyMzQ1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfY2xvc2luZyhzZWxmKToKKyAgICAgICAgZGF0YSA9IGInZGF0YScKKyAgICAgICAgc2VsZi5zb2NrLnNlbmQucmV0dXJuX3ZhbHVlID0gbGVuKGRhdGEpCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2Nsb3NpbmcgPSBUcnVlCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoZGF0YSwgKCkpKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorICAgICAgICBzZWxmLnNvY2suc2VuZHRvLmFzc2VydF9jYWxsZWRfd2l0aChkYXRhLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X25vX2RhdGEoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNywgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnNvY2suc2VuZHRvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV90cnlhZ2FpbihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLnNlbmR0by5zaWRlX2VmZmVjdCA9IEJsb2NraW5nSU9FcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuZXh0ZW5kKFsoYidkYXRhMScsICgpKSwgKGInZGF0YTInLCAoKSldKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig3LCB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDcsIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgWyhiJ2RhdGExJywgKCkpLCAoYidkYXRhMicsICgpKV0sCisgICAgICAgICAgICBsaXN0KHRyYW5zcG9ydC5fYnVmZmVyKSkKKworICAgIGRlZiB0ZXN0X3NlbmR0b19yZWFkeV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGVyciA9IHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoKQorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KCkKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvciA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydC5fYnVmZmVyLmFwcGVuZCgoYidkYXRhJywgKCkpKQorICAgICAgICB0cmFuc3BvcnQuX3NlbmR0b19yZWFkeSgpCisKKyAgICAgICAgdHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0ZhdGFsIHdyaXRlIGVycm9yIG9uIGRhdGFncmFtIHRyYW5zcG9ydCcpCisKKyAgICBkZWYgdGVzdF9zZW5kdG9fcmVhZHlfZXJyb3JfcmVjZWl2ZWQoc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kdG8uc2lkZV9lZmZlY3QgPSBDb25uZWN0aW9uUmVmdXNlZEVycm9yCisKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoKQorICAgICAgICB0cmFuc3BvcnQuX2ZhdGFsX2Vycm9yID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHJhbnNwb3J0Ll9idWZmZXIuYXBwZW5kKChiJ2RhdGEnLCAoKSkpCisgICAgICAgIHRyYW5zcG9ydC5fc2VuZHRvX3JlYWR5KCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IuY2FsbGVkKQorCisgICAgZGVmIHRlc3Rfc2VuZHRvX3JlYWR5X2Vycm9yX3JlY2VpdmVkX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHNlbGYuc29jay5zZW5kLnNpZGVfZWZmZWN0ID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcgorCisgICAgICAgIHRyYW5zcG9ydCA9IHNlbGYuZGF0YWdyYW1fdHJhbnNwb3J0KGFkZHJlc3M9KCcwLjAuMC4wJywgMSkpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0cmFuc3BvcnQuX2J1ZmZlci5hcHBlbmQoKGInZGF0YScsICgpKSkKKyAgICAgICAgdHJhbnNwb3J0Ll9zZW5kdG9fcmVhZHkoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHJhbnNwb3J0Ll9mYXRhbF9lcnJvci5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnByb3RvY29sLmVycm9yX3JlY2VpdmVkLmNhbGxlZCkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlci5lcnJvcicpCisgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3JfY29ubmVjdGVkKHNlbGYsIG1fZXhjKToKKyAgICAgICAgdHJhbnNwb3J0ID0gc2VsZi5kYXRhZ3JhbV90cmFuc3BvcnQoYWRkcmVzcz0oJzAuMC4wLjAnLCAxKSkKKyAgICAgICAgZXJyID0gQ29ubmVjdGlvblJlZnVzZWRFcnJvcigpCisgICAgICAgIHRyYW5zcG9ydC5fZmF0YWxfZXJyb3IoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZXJyb3JfcmVjZWl2ZWQuY2FsbGVkKQorICAgICAgICBtX2V4Yy5hc3NlcnRfY2FsbGVkX3dpdGgoCisgICAgICAgICAgICB0ZXN0X3V0aWxzLk1vY2tQYXR0ZXJuKAorICAgICAgICAgICAgICAgICdGYXRhbCBlcnJvciBvbiB0cmFuc3BvcnRcbnByb3RvY29sOi4qXG50cmFuc3BvcnQ6LionKSwKKyAgICAgICAgICAgIGV4Y19pbmZvPShDb25uZWN0aW9uUmVmdXNlZEVycm9yLCBNT0NLX0FOWSwgTU9DS19BTlkpKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zc2xwcm90by5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3NzbHByb3RvLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3Mjk2N2UKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zc2xwcm90by5weQpAQCAtMCwwICsxLDcxIEBACisiIiJUZXN0cyBmb3IgYXN5bmNpby9zc2xwcm90by5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKKworaW1wb3J0IGFzeW5jaW8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgc3NscHJvdG8KK2Zyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF91dGlscworCisKK0B1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKK2NsYXNzIFNzbFByb3RvSGFuZHNoYWtlVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiBzc2xfcHJvdG9jb2woc2VsZiwgd2FpdGVyPU5vbmUpOgorICAgICAgICBzc2xjb250ZXh0ID0gdGVzdF91dGlscy5kdW1teV9zc2xfY29udGV4dCgpCisgICAgICAgIGFwcF9wcm90byA9IGFzeW5jaW8uUHJvdG9jb2woKQorICAgICAgICBwcm90byA9IHNzbHByb3RvLlNTTFByb3RvY29sKHNlbGYubG9vcCwgYXBwX3Byb3RvLCBzc2xjb250ZXh0LCB3YWl0ZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChwcm90by5fYXBwX3RyYW5zcG9ydC5jbG9zZSkKKyAgICAgICAgcmV0dXJuIHByb3RvCisKKyAgICBkZWYgY29ubmVjdGlvbl9tYWRlKHNlbGYsIHNzbF9wcm90bywgZG9faGFuZHNoYWtlPU5vbmUpOgorICAgICAgICB0cmFuc3BvcnQgPSBtb2NrLk1vY2soKQorICAgICAgICBzc2xwaXBlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc3NscGlwZS5zaHV0ZG93bi5yZXR1cm5fdmFsdWUgPSBiJycKKyAgICAgICAgaWYgZG9faGFuZHNoYWtlOgorICAgICAgICAgICAgc3NscGlwZS5kb19oYW5kc2hha2Uuc2lkZV9lZmZlY3QgPSBkb19oYW5kc2hha2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlZiBtb2NrX2hhbmRzaGFrZShjYWxsYmFjayk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgICAgICBzc2xwaXBlLmRvX2hhbmRzaGFrZS5zaWRlX2VmZmVjdCA9IG1vY2tfaGFuZHNoYWtlCisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnYXN5bmNpby5zc2xwcm90by5fU1NMUGlwZScsIHJldHVybl92YWx1ZT1zc2xwaXBlKToKKyAgICAgICAgICAgIHNzbF9wcm90by5jb25uZWN0aW9uX21hZGUodHJhbnNwb3J0KQorCisgICAgZGVmIHRlc3RfY2FuY2VsX2hhbmRzaGFrZShzZWxmKToKKyAgICAgICAgIyBQeXRob24gaXNzdWUgIzIzMTk3OiBjYW5jZWxsaW5nIGFuIGhhbmRzaGFrZSBtdXN0IG5vdCByYWlzZSBhbgorICAgICAgICAjIGV4Y2VwdGlvbiBvciBsb2cgYW4gZXJyb3IsIGV2ZW4gaWYgdGhlIGhhbmRzaGFrZSBmYWlsZWQKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNzbF9wcm90byA9IHNlbGYuc3NsX3Byb3RvY29sKHdhaXRlcikKKyAgICAgICAgaGFuZHNoYWtlX2Z1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBkb19oYW5kc2hha2UoY2FsbGJhY2spOgorICAgICAgICAgICAgZXhjID0gRXhjZXB0aW9uKCkKKyAgICAgICAgICAgIGNhbGxiYWNrKGV4YykKKyAgICAgICAgICAgIGhhbmRzaGFrZV9mdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgd2FpdGVyLmNhbmNlbCgpCisgICAgICAgIHNlbGYuY29ubmVjdGlvbl9tYWRlKHNzbF9wcm90bywgZG9faGFuZHNoYWtlKQorCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShoYW5kc2hha2VfZnV0KQorCisgICAgZGVmIHRlc3RfZW9mX3JlY2VpdmVkX3dhaXRlcihzZWxmKToKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNzbF9wcm90byA9IHNlbGYuc3NsX3Byb3RvY29sKHdhaXRlcikKKyAgICAgICAgc2VsZi5jb25uZWN0aW9uX21hZGUoc3NsX3Byb3RvKQorICAgICAgICBzc2xfcHJvdG8uZW9mX3JlY2VpdmVkKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3YWl0ZXIuZXhjZXB0aW9uKCksIENvbm5lY3Rpb25SZXNldEVycm9yKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF9zdHJlYW1zLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzgzZDVmCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3RyZWFtcy5weQpAQCAtMCwwICsxLDg0OSBAQAorIiIiVGVzdHMgZm9yIHN0cmVhbXMucHkuIiIiCisKK2ltcG9ydCBnYworaW1wb3J0IG9zCitpbXBvcnQgcXVldWUKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aHJlYWRpbmcKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBzc2wgPSBOb25lCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKKworCitjbGFzcyBTdHJlYW1SZWFkZXJUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIERBVEEgPSBiJ2xpbmUxXG5saW5lMlxubGluZTNcbicKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICAjIGp1c3QgaW4gY2FzZSBpZiB3ZSBoYXZlIHRyYW5zcG9ydCBjbG9zZSBjYWxsYmFja3MKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uc3RyZWFtcy5ldmVudHMnKQorICAgIGRlZiB0ZXN0X2N0b3JfZ2xvYmFsX2xvb3Aoc2VsZiwgbV9ldmVudHMpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RyZWFtLl9sb29wLCBtX2V2ZW50cy5nZXRfZXZlbnRfbG9vcC5yZXR1cm5fdmFsdWUpCisKKyAgICBkZWYgX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbihzZWxmLCBvcGVuX2Nvbm5lY3Rpb25fZnV0KToKKyAgICAgICAgcmVhZGVyLCB3cml0ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKG9wZW5fY29ubmVjdGlvbl9mdXQpCisgICAgICAgIHdyaXRlci53cml0ZShiJ0dFVCAvIEhUVFAvMS4wXHJcblxyXG4nKQorICAgICAgICBmID0gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJ0hUVFAvMS4wIDIwMCBPS1xyXG4nKQorICAgICAgICBmID0gcmVhZGVyLnJlYWQoKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGF0YS5lbmRzd2l0aChiJ1xyXG5cclxuVGVzdCBtZXNzYWdlJykpCisgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9vcGVuX2Nvbm5lY3Rpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gYXN5bmNpby5vcGVuX2Nvbm5lY3Rpb24oKmh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3Rfb3Blbl9jb25uZWN0aW9uKGNvbm5fZnV0KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X29wZW5fdW5peF9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3RfdW5peF9zZXJ2ZXIoKSBhcyBodHRwZDoKKyAgICAgICAgICAgIGNvbm5fZnV0ID0gYXN5bmNpby5vcGVuX3VuaXhfY29ubmVjdGlvbihodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgc2VsZi5fYmFzZXRlc3Rfb3Blbl9jb25uZWN0aW9uKGNvbm5fZnV0KQorCisgICAgZGVmIF9iYXNldGVzdF9vcGVuX2Nvbm5lY3Rpb25fbm9fbG9vcF9zc2woc2VsZiwgb3Blbl9jb25uZWN0aW9uX2Z1dCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShvcGVuX2Nvbm5lY3Rpb25fZnV0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorICAgICAgICB3cml0ZXIud3JpdGUoYidHRVQgLyBIVFRQLzEuMFxyXG5cclxuJykKKyAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuZW5kc3dpdGgoYidcclxuXHJcblRlc3QgbWVzc2FnZScpKQorCisgICAgICAgIHdyaXRlci5jbG9zZSgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHNzbCBpcyBOb25lLCAnTm8gc3NsIG1vZHVsZScpCisgICAgZGVmIHRlc3Rfb3Blbl9jb25uZWN0aW9uX25vX2xvb3Bfc3NsKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKHVzZV9zc2w9VHJ1ZSkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjb25uX2Z1dCA9IGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgICpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgIHNzbD10ZXN0X3V0aWxzLmR1bW15X3NzbF9jb250ZXh0KCksCisgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbl9ub19sb29wX3NzbChjb25uX2Z1dCkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3NsIGlzIE5vbmUsICdObyBzc2wgbW9kdWxlJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKSwgJ05vIFVOSVggU29ja2V0cycpCisgICAgZGVmIHRlc3Rfb3Blbl91bml4X2Nvbm5lY3Rpb25fbm9fbG9vcF9zc2woc2VsZik6CisgICAgICAgIHdpdGggdGVzdF91dGlscy5ydW5fdGVzdF91bml4X3NlcnZlcih1c2Vfc3NsPVRydWUpIGFzIGh0dHBkOgorICAgICAgICAgICAgY29ubl9mdXQgPSBhc3luY2lvLm9wZW5fdW5peF9jb25uZWN0aW9uKAorICAgICAgICAgICAgICAgIGh0dHBkLmFkZHJlc3MsCisgICAgICAgICAgICAgICAgc3NsPXRlc3RfdXRpbHMuZHVtbXlfc3NsX2NvbnRleHQoKSwKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9JycsCisgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbl9ub19sb29wX3NzbChjb25uX2Z1dCkKKworICAgIGRlZiBfYmFzZXRlc3Rfb3Blbl9jb25uZWN0aW9uX2Vycm9yKHNlbGYsIG9wZW5fY29ubmVjdGlvbl9mdXQpOgorICAgICAgICByZWFkZXIsIHdyaXRlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUob3Blbl9jb25uZWN0aW9uX2Z1dCkKKyAgICAgICAgd3JpdGVyLl9wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QoWmVyb0RpdmlzaW9uRXJyb3IoKSkKKyAgICAgICAgZiA9IHJlYWRlci5yZWFkKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb25uZWN0aW9uX2Vycm9yKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMucnVuX3Rlc3Rfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjb25uX2Z1dCA9IGFzeW5jaW8ub3Blbl9jb25uZWN0aW9uKCpodHRwZC5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbl9lcnJvcihjb25uX2Z1dCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAnQUZfVU5JWCcpLCAnTm8gVU5JWCBTb2NrZXRzJykKKyAgICBkZWYgdGVzdF9vcGVuX3VuaXhfY29ubmVjdGlvbl9lcnJvcihzZWxmKToKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnJ1bl90ZXN0X3VuaXhfc2VydmVyKCkgYXMgaHR0cGQ6CisgICAgICAgICAgICBjb25uX2Z1dCA9IGFzeW5jaW8ub3Blbl91bml4X2Nvbm5lY3Rpb24oaHR0cGQuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHNlbGYuX2Jhc2V0ZXN0X29wZW5fY29ubmVjdGlvbl9lcnJvcihjb25uX2Z1dCkKKworICAgIGRlZiB0ZXN0X2ZlZWRfZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X2ZlZWRfbm9uZW1wdHlfZGF0YShzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRfemVybyhzZWxmKToKKyAgICAgICAgIyBSZWFkIHplcm8gYnl0ZXMuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CisgICAgICAgICMgUmVhZCBieXRlcy4KKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlYWRfdGFzayA9IGFzeW5jaW8uVGFzayhzdHJlYW0ucmVhZCgzMCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZF9saW5lX2JyZWFrcyhzZWxmKToKKyAgICAgICAgIyBSZWFkIGJ5dGVzIHdpdGhvdXQgbGluZSBicmVha3MuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZTEnKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZTInKQorCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkKDUpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lMScsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lMicsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZF9lb2Yoc2VsZik6CisgICAgICAgICMgUmVhZCBieXRlcywgc3RvcCBhdCBlb2YuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWQoMTAyNCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkX3VudGlsX2VvZihzZWxmKToKKyAgICAgICAgIyBSZWFkIGFsbCBieXRlcyB1bnRpbCBlb2YuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWQoLTEpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazFcbicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidjaHVuazFcbmNodW5rMicsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmVcbicpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWQoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaScsIGRhdGEpCisKKyAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oVmFsdWVFcnJvcigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkKDIpKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9saW1pdChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdpbWl0Jyk6CisgICAgICAgICAgICBhc3luY2lvLlN0cmVhbVJlYWRlcihsaW1pdD0wLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2ltaXQnKToKKyAgICAgICAgICAgIGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PS0xLCBsb29wPXNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X3JlYWRfbGltaXQoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PTMsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsnKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CisgICAgICAgICMgUmVhZCBvbmUgbGluZS4gJ3JlYWRsaW5lJyB3aWxsIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGRhdGEKKyAgICAgICAgIyB0byBjb21lIGZyb20gJ2NiJworICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMSAnKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMiAnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMyAnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ1xuIGNodW5rNCcpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocmVhZF90YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInY2h1bmsxIGNodW5rMiBjaHVuazMgXG4nLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInIGNodW5rNCcsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGltaXRfd2l0aF9leGlzdGluZ19kYXRhKHNlbGYpOgorICAgICAgICAjIFJlYWQgb25lIGxpbmUuIFRoZSBkYXRhIGlzIGluIFN0cmVhbVJlYWRlcidzIGJ1ZmZlcgorICAgICAgICAjIGJlZm9yZSB0aGUgZXZlbnQgbG9vcCBpcyBydW4uCisKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobGltaXQ9MywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYiduZTFcbmxpbmUyXG4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgICMgVGhlIGJ1ZmZlciBzaG91bGQgY29udGFpbiB0aGUgcmVtYWluaW5nIGRhdGEgYWZ0ZXIgZXhjZXB0aW9uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lMlxuJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobGltaXQ9MywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYiduZTEnKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgICMgTm8gYidcbicgYXQgdGhlIGVuZC4gVGhlICdsaW1pdCcgaXMgc2V0IHRvIDMuIFNvIGJlZm9yZQorICAgICAgICAjIHdhaXRpbmcgZm9yIHRoZSBuZXcgZGF0YSBpbiBidWZmZXIsICdyZWFkbGluZScgd2lsbCBjb25zdW1lCisgICAgICAgICMgdGhlIGVudGlyZSBidWZmZXIsIGFuZCBzaW5jZSB0aGUgbGVuZ3RoIG9mIHRoZSBjb25zdW1lZCBkYXRhCisgICAgICAgICMgaXMgbW9yZSB0aGFuIDMsIGl0IHdpbGwgcmFpc2UgYSBWYWx1ZUVycm9yLiBUaGUgYnVmZmVyIGlzCisgICAgICAgICMgZXhwZWN0ZWQgdG8gYmUgZW1wdHkgbm93LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9hdF9lb2Yoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5hdF9lb2YoKSkKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInc29tZSBkYXRhXG4nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5hdF9lb2YoKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0cmVhbS5hdF9lb2YoKSkKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInc29tZSBkYXRhXG4nKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RyZWFtLmF0X2VvZigpKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbGltaXQoc2VsZik6CisgICAgICAgICMgUmVhZCBvbmUgbGluZS4gU3RyZWFtUmVhZGVycyBhcmUgZmVkIHdpdGggZGF0YSBhZnRlcgorICAgICAgICAjIHRoZWlyICdyZWFkbGluZScgbWV0aG9kcyBhcmUgY2FsbGVkLgorCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxpbWl0PTcsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuazEnKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMicpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmszXG4nKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICAjIFRoZSBidWZmZXIgaGFkIGp1c3Qgb25lIGxpbmUgb2YgZGF0YSwgYW5kIGFmdGVyIHJhaXNpbmcKKyAgICAgICAgIyBhIFZhbHVlRXJyb3IgaXQgc2hvdWxkIGJlIGVtcHR5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobGltaXQ9NywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGRlZiBjYigpOgorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rMScpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInY2h1bmsyXG4nKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2NodW5rM1xuJykKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb24oY2IpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rM1xuJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICAgICAgIyBjaGVjayBzdHJpY3RuZXNzIG9mIHRoZSBsaW1pdAorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsaW1pdD03LCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJzEyMzQ1NjdcbicpCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInMTIzNDU2N1xuJywgbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYicxMjM0NTY3OFxuJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInMTIzNDU2NzgnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfbm9saW1pdF9ub3dhaXQoc2VsZik6CisgICAgICAgICMgQWxsIG5lZWRlZCBkYXRhIGZvciB0aGUgZmlyc3QgJ3JlYWRsaW5lJyBjYWxsIHdpbGwgYmUKKyAgICAgICAgIyBpbiB0aGUgYnVmZmVyLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEFbOjZdKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQVs2Ol0pCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmUxXG4nLCBsaW5lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTJcbmxpbmUzXG4nLCBzdHJlYW0uX2J1ZmZlcikKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2VvZihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidzb21lIGRhdGEnKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorCisgICAgICAgIGxpbmUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInc29tZSBkYXRhJywgbGluZSkKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2VtcHR5X2VvZihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2VvZigpCisKKyAgICAgICAgbGluZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRsaW5lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBsaW5lKQorCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfcmVhZF9ieXRlX2NvdW50KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZCg3KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZTJcbmwnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInaW5lM1xuJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkbGluZV9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZVxuJykKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGxpbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmVcbicsIGRhdGEpCisKKyAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oVmFsdWVFcnJvcigpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHN0cmVhbS5yZWFkbGluZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkdW50aWxfc2VwYXJhdG9yKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdTZXBhcmF0b3Igc2hvdWxkIGJlJyk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkdW50aWwoc2VwYXJhdG9yPWInJykpCisKKyAgICBkZWYgdGVzdF9yZWFkdW50aWxfbXVsdGlfY2h1bmtzKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZUFBQScpCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkdW50aWwoc2VwYXJhdG9yPWInQUFBJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidsaW5lQUFBJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidsaW5lQUFBJykKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWR1bnRpbChiJ0FBQScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGluZUFBQScsIGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInbGluZUFBQXh4eCcpCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkdW50aWwoYidBQUEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2xpbmVBQUEnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIneHh4Jywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkdW50aWxfbXVsdGlfY2h1bmtzXzEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidRV0VhYScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidYWWFhJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2EnKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZHVudGlsKGInYWFhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidRV0VhYVhZYWFhJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidRV0VhYScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidYWWEnKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInYWEnKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZHVudGlsKGInYWFhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidRV0VhYVhZYWFhJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidhYWEnKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZHVudGlsKGInYWFhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidhYWEnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ1hhYWEnKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZHVudGlsKGInYWFhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidYYWFhJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidYWFgnKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInYScpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidhJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2EnKQorICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZHVudGlsKGInYWFhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYidYWFhhYWEnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkdW50aWxfZW9mKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ3NvbWUgZGF0YUFBJykKKyAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW5jb21wbGV0ZVJlYWRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkdW50aWwoYidBQUEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucGFydGlhbCwgYidzb21lIGRhdGFBQScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNtLmV4Y2VwdGlvbi5leHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZHVudGlsX2xpbWl0X2ZvdW5kX3NlcChzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3AsIGxpbWl0PTMpCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidzb21lIGRhdGFBQScpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KGFzeW5jaW8uTGltaXRPdmVycnVuRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm90IGZvdW5kJykgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkdW50aWwoYidBQUEnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInc29tZSBkYXRhQUEnLCBzdHJlYW0uX2J1ZmZlcikKKworICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInQScpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChhc3luY2lvLkxpbWl0T3ZlcnJ1bkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzIGZvdW5kJykgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkdW50aWwoYidBQUEnKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInc29tZSBkYXRhQUFBJywgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV96ZXJvX29yX2xlc3Moc2VsZik6CisgICAgICAgICMgUmVhZCBleGFjdCBudW1iZXIgb2YgYnl0ZXMgKHplcm8gb3IgbGVzcykuCisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGV4YWN0bHkoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgc3RyZWFtLl9idWZmZXIpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdsZXNzIHRoYW4gemVybycpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzdHJlYW0ucmVhZGV4YWN0bHkoLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseShzZWxmKToKKyAgICAgICAgIyBSZWFkIGV4YWN0IG51bWJlciBvZiBieXRlcy4KKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgbiA9IDIgKiBsZW4oc2VsZi5EQVRBKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWRleGFjdGx5KG4pLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShzZWxmLkRBVEEpCisgICAgICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKHNlbGYuREFUQSkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICBkYXRhID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShyZWFkX3Rhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5EQVRBICsgc2VsZi5EQVRBLCBkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuREFUQSwgc3RyZWFtLl9idWZmZXIpCisKKyAgICBkZWYgdGVzdF9yZWFkZXhhY3RseV9saW1pdChzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobGltaXQ9MywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoYidjaHVuaycpCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHN0cmVhbS5yZWFkZXhhY3RseSg1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2NodW5rJywgZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZGV4YWN0bHlfZW9mKHNlbGYpOgorICAgICAgICAjIFJlYWQgZXhhY3QgbnVtYmVyIG9mIGJ5dGVzIChlb2YpLgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgbiA9IDIgKiBsZW4oc2VsZi5EQVRBKQorICAgICAgICByZWFkX3Rhc2sgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWRleGFjdGx5KG4pLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkZWYgY2IoKToKKyAgICAgICAgICAgIHN0cmVhbS5mZWVkX2RhdGEoc2VsZi5EQVRBKQorICAgICAgICAgICAgc3RyZWFtLmZlZWRfZW9mKCkKKyAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihjYikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uSW5jb21wbGV0ZVJlYWRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRfdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ucGFydGlhbCwgc2VsZi5EQVRBKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5leHBlY3RlZCwgbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnMTggYnl0ZXMgcmVhZCBvbiBhIHRvdGFsIG9mIDM2IGV4cGVjdGVkIGJ5dGVzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJycsIHN0cmVhbS5fYnVmZmVyKQorCisgICAgZGVmIHRlc3RfcmVhZGV4YWN0bHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLmZlZWRfZGF0YShiJ2xpbmVcbicpCisKKyAgICAgICAgZGF0YSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLnJlYWRleGFjdGx5KDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInbGknLCBkYXRhKQorCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFZhbHVlRXJyb3IoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBzdHJlYW0ucmVhZGV4YWN0bHkoMikpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzdHJlYW0uZXhjZXB0aW9uKCkpCisKKyAgICAgICAgZXhjID0gVmFsdWVFcnJvcigpCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdHJlYW0uZXhjZXB0aW9uKCksIGV4YykKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl93YWl0ZXIoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgc2V0X2VycigpOgorICAgICAgICAgICAgc3RyZWFtLnNldF9leGNlcHRpb24oVmFsdWVFcnJvcigpKQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKHN0cmVhbS5yZWFkbGluZSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdDIgPSBhc3luY2lvLlRhc2soc2V0X2VycigpLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdChbdDEsIHQyXSwgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQxLnJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9jYW5jZWwoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2soc3RyZWFtLnJlYWRsaW5lKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgIyBUaGUgZm9sbG93aW5nIGxpbmUgZmFpbHMgaWYgc2V0X2V4Y2VwdGlvbigpIGlzbid0IGNhcmVmdWwuCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcignbWVzc2FnZScpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdHJlYW0uX3dhaXRlciwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3N0YXJ0X3NlcnZlcihzZWxmKToKKworICAgICAgICBjbGFzcyBNeVNlcnZlcjoKKworICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvb3ApOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYubG9vcCA9IGxvb3AKKworICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgaGFuZGxlX2NsaWVudChzZWxmLCBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgZnJvbSBjbGllbnRfcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBjbGllbnRfd3JpdGVyLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjbGllbnRfd3JpdGVyLmRyYWluKCkKKyAgICAgICAgICAgICAgICBjbGllbnRfd3JpdGVyLmNsb3NlKCkKKworICAgICAgICAgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgICAgICBzb2NrLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoCisgICAgICAgICAgICAgICAgICAgIGFzeW5jaW8uc3RhcnRfc2VydmVyKHNlbGYuaGFuZGxlX2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29jaz1zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNvY2suZ2V0c29ja25hbWUoKQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2NsaWVudF9jYWxsYmFjayhzZWxmLCBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuY3JlYXRlX3Rhc2soc2VsZi5oYW5kbGVfY2xpZW50KGNsaWVudF9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfd3JpdGVyKSkKKworICAgICAgICAgICAgZGVmIHN0YXJ0X2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgICAgICAgICBzb2NrLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgICAgICBhZGRyID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgICAgICAgICBhc3luY2lvLnN0YXJ0X3NlcnZlcihzZWxmLmhhbmRsZV9jbGllbnRfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3Q9YWRkclswXSwgcG9ydD1hZGRyWzFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZHIKKworICAgICAgICAgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5zZXJ2ZXIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLmNsb3NlKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShzZWxmLnNlcnZlci53YWl0X2Nsb3NlZCgpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNsaWVudChhZGRyKToKKyAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0geWllbGQgZnJvbSBhc3luY2lvLm9wZW5fY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICAqYWRkciwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICAjIHNlbmQgYSBsaW5lCisgICAgICAgICAgICB3cml0ZXIud3JpdGUoYiJoZWxsbyB3b3JsZCFcbiIpCisgICAgICAgICAgICAjIHJlYWQgaXQgYmFjaworICAgICAgICAgICAgbXNnYmFjayA9IHlpZWxkIGZyb20gcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHdyaXRlci5jbG9zZSgpCisgICAgICAgICAgICByZXR1cm4gbXNnYmFjaworCisgICAgICAgICMgdGVzdCB0aGUgc2VydmVyIHZhcmlhbnQgd2l0aCBhIGNvcm91dGluZSBhcyBjbGllbnQgaGFuZGxlcgorICAgICAgICBzZXJ2ZXIgPSBNeVNlcnZlcihzZWxmLmxvb3ApCisgICAgICAgIGFkZHIgPSBzZXJ2ZXIuc3RhcnQoKQorICAgICAgICBtc2cgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhjbGllbnQoYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgc2VydmVyLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYiJoZWxsbyB3b3JsZCFcbiIpCisKKyAgICAgICAgIyB0ZXN0IHRoZSBzZXJ2ZXIgdmFyaWFudCB3aXRoIGEgY2FsbGJhY2sgYXMgY2xpZW50IGhhbmRsZXIKKyAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoc2VsZi5sb29wKQorICAgICAgICBhZGRyID0gc2VydmVyLnN0YXJ0X2NhbGxiYWNrKCkKKyAgICAgICAgbXNnID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soY2xpZW50KGFkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHNlcnZlci5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGIiaGVsbG8gd29ybGQhXG4iKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksICdObyBVTklYIFNvY2tldHMnKQorICAgIGRlZiB0ZXN0X3N0YXJ0X3VuaXhfc2VydmVyKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15U2VydmVyOgorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbG9vcCwgcGF0aCk6CisgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisgICAgICAgICAgICAgICAgc2VsZi5sb29wID0gbG9vcAorICAgICAgICAgICAgICAgIHNlbGYucGF0aCA9IHBhdGgKKworICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgaGFuZGxlX2NsaWVudChzZWxmLCBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgZnJvbSBjbGllbnRfcmVhZGVyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgICAgICBjbGllbnRfd3JpdGVyLndyaXRlKGRhdGEpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBjbGllbnRfd3JpdGVyLmRyYWluKCkKKyAgICAgICAgICAgICAgICBjbGllbnRfd3JpdGVyLmNsb3NlKCkKKworICAgICAgICAgICAgZGVmIHN0YXJ0KHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSgKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNpby5zdGFydF91bml4X3NlcnZlcihzZWxmLmhhbmRsZV9jbGllbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1zZWxmLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApKQorCisgICAgICAgICAgICBkZWYgaGFuZGxlX2NsaWVudF9jYWxsYmFjayhzZWxmLCBjbGllbnRfcmVhZGVyLCBjbGllbnRfd3JpdGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AuY3JlYXRlX3Rhc2soc2VsZi5oYW5kbGVfY2xpZW50KGNsaWVudF9yZWFkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfd3JpdGVyKSkKKworICAgICAgICAgICAgZGVmIHN0YXJ0X2NhbGxiYWNrKHNlbGYpOgorICAgICAgICAgICAgICAgIHN0YXJ0ID0gYXN5bmNpby5zdGFydF91bml4X3NlcnZlcihzZWxmLmhhbmRsZV9jbGllbnRfY2FsbGJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9c2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICBzZWxmLnNlcnZlciA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RhcnQpCisKKyAgICAgICAgICAgIGRlZiBzdG9wKHNlbGYpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuc2VydmVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5jbG9zZSgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VsZi5zZXJ2ZXIud2FpdF9jbG9zZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBOb25lCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjbGllbnQocGF0aCk6CisgICAgICAgICAgICByZWFkZXIsIHdyaXRlciA9IHlpZWxkIGZyb20gYXN5bmNpby5vcGVuX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBwYXRoLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICMgc2VuZCBhIGxpbmUKKyAgICAgICAgICAgIHdyaXRlci53cml0ZShiImhlbGxvIHdvcmxkIVxuIikKKyAgICAgICAgICAgICMgcmVhZCBpdCBiYWNrCisgICAgICAgICAgICBtc2diYWNrID0geWllbGQgZnJvbSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgd3JpdGVyLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBtc2diYWNrCisKKyAgICAgICAgIyB0ZXN0IHRoZSBzZXJ2ZXIgdmFyaWFudCB3aXRoIGEgY29yb3V0aW5lIGFzIGNsaWVudCBoYW5kbGVyCisgICAgICAgIHdpdGggdGVzdF91dGlscy51bml4X3NvY2tldF9wYXRoKCkgYXMgcGF0aDoKKyAgICAgICAgICAgIHNlcnZlciA9IE15U2VydmVyKHNlbGYubG9vcCwgcGF0aCkKKyAgICAgICAgICAgIHNlcnZlci5zdGFydCgpCisgICAgICAgICAgICBtc2cgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhjbGllbnQocGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgICAgICBzZXJ2ZXIuc3RvcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgYiJoZWxsbyB3b3JsZCFcbiIpCisKKyAgICAgICAgIyB0ZXN0IHRoZSBzZXJ2ZXIgdmFyaWFudCB3aXRoIGEgY2FsbGJhY2sgYXMgY2xpZW50IGhhbmRsZXIKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLnVuaXhfc29ja2V0X3BhdGgoKSBhcyBwYXRoOgorICAgICAgICAgICAgc2VydmVyID0gTXlTZXJ2ZXIoc2VsZi5sb29wLCBwYXRoKQorICAgICAgICAgICAgc2VydmVyLnN0YXJ0X2NhbGxiYWNrKCkKKyAgICAgICAgICAgIG1zZyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGNsaWVudChwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgICAgIHNlcnZlci5zdG9wKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBiImhlbGxvIHdvcmxkIVxuIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICd3aW4zMicsICJEb24ndCBoYXZlIHBpcGVzIikKKyAgICBkZWYgdGVzdF9yZWFkX2FsbF9mcm9tX3BpcGVfcmVhZGVyKHNlbGYpOgorICAgICAgICAjIFNlZSBhc3luY2lvIGlzc3VlIDE2OC4gIFRoaXMgdGVzdCBpcyBkZXJpdmVkIGZyb20gdGhlIGV4YW1wbGUKKyAgICAgICAgIyBzdWJwcm9jZXNzX2F0dGFjaF9yZWFkX3BpcGUucHksIGJ1dCB3ZSBjb25maWd1cmUgdGhlCisgICAgICAgICMgU3RyZWFtUmVhZGVyJ3MgbGltaXQgc28gdGhhdCB0d2ljZSBpdCBpcyBsZXNzIHRoYW4gdGhlIHNpemUKKyAgICAgICAgIyBvZiB0aGUgZGF0YSB3cml0dGVyLiAgQWxzbyB3ZSBtdXN0IGV4cGxpY2l0bHkgYXR0YWNoIGEgY2hpbGQKKyAgICAgICAgIyB3YXRjaGVyIHRvIHRoZSBldmVudCBsb29wLgorCisgICAgICAgIGNvZGUgPSAiIiJcCitpbXBvcnQgb3MsIHN5cworZmQgPSBpbnQoc3lzLmFyZ3ZbMV0pCitvcy53cml0ZShmZCwgYidkYXRhJykKK29zLmNsb3NlKGZkKQorIiIiCisgICAgICAgIHJmZCwgd2ZkID0gb3MucGlwZSgpCisgICAgICAgIGFyZ3MgPSBbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGUsIHN0cih3ZmQpXQorCisgICAgICAgIHBpcGUgPSBvcGVuKHJmZCwgJ3JiJywgMCkKKyAgICAgICAgcmVhZGVyID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3AsIGxpbWl0PTEpCisgICAgICAgIHByb3RvY29sID0gYXN5bmNpby5TdHJlYW1SZWFkZXJQcm90b2NvbChyZWFkZXIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0cmFuc3BvcnQsIF8gPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgc2VsZi5sb29wLmNvbm5lY3RfcmVhZF9waXBlKGxhbWJkYTogcHJvdG9jb2wsIHBpcGUpKQorCisgICAgICAgIHdhdGNoZXIgPSBhc3luY2lvLlNhZmVDaGlsZFdhdGNoZXIoKQorICAgICAgICB3YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorICAgICAgICAgICAgY3JlYXRlID0gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKCphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPXt3ZmR9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvYyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm9jLndhaXQoKSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGFzeW5jaW8uc2V0X2NoaWxkX3dhdGNoZXIoTm9uZSkKKworICAgICAgICBvcy5jbG9zZSh3ZmQpCisgICAgICAgIGRhdGEgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJlYWRlci5yZWFkKC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJ2RhdGEnKQorCisgICAgZGVmIHRlc3Rfc3RyZWFtcmVhZGVyX2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmFkZENsZWFudXAoYXN5bmNpby5zZXRfZXZlbnRfbG9vcCwgTm9uZSkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisKKyAgICAgICAgIyBhc3luY2lvIGlzc3VlICMxODQ6IEVuc3VyZSB0aGF0IFN0cmVhbVJlYWRlclByb3RvY29sIGNvbnN0cnVjdG9yCisgICAgICAgICMgcmV0cmlldmVzIHRoZSBjdXJyZW50IGxvb3AgaWYgdGhlIGxvb3AgcGFyYW1ldGVyIGlzIG5vdCBzZXQKKyAgICAgICAgcmVhZGVyID0gYXN5bmNpby5TdHJlYW1SZWFkZXIoKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlYWRlci5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3Rfc3RyZWFtcmVhZGVycHJvdG9jb2xfY29uc3RydWN0b3Ioc2VsZik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChhc3luY2lvLnNldF9ldmVudF9sb29wLCBOb25lKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICAjIGFzeW5jaW8gaXNzdWUgIzE4NDogRW5zdXJlIHRoYXQgU3RyZWFtUmVhZGVyUHJvdG9jb2wgY29uc3RydWN0b3IKKyAgICAgICAgIyByZXRyaWV2ZXMgdGhlIGN1cnJlbnQgbG9vcCBpZiB0aGUgbG9vcCBwYXJhbWV0ZXIgaXMgbm90IHNldAorICAgICAgICByZWFkZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBwcm90b2NvbCA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyUHJvdG9jb2wocmVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb3RvY29sLl9sb29wLCBzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9kcmFpbl9yYWlzZXMoc2VsZik6CisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyNTQ0MQorCisgICAgICAgICMgVGhpcyB0ZXN0IHNob3VsZCBub3QgdXNlIGFzeW5jaW8gZm9yIHRoZSBtb2NrIHNlcnZlcjsgdGhlCisgICAgICAgICMgd2hvbGUgcG9pbnQgb2YgdGhlIHRlc3QgaXMgdG8gdGVzdCBmb3IgYSBidWcgaW4gZHJhaW4oKQorICAgICAgICAjIHdoZXJlIGl0IG5ldmVyIGdpdmVzIHVwIHRoZSBldmVudCBsb29wIGJ1dCB0aGUgc29ja2V0IGlzCisgICAgICAgICMgY2xvc2VkIG9uIHRoZSAgc2VydmVyIHNpZGUuCisKKyAgICAgICAgcSA9IHF1ZXVlLlF1ZXVlKCkKKworICAgICAgICBkZWYgc2VydmVyKCk6CisgICAgICAgICAgICAjIFJ1bnMgaW4gYSBzZXBhcmF0ZSB0aHJlYWQuCisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCisgICAgICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICAgICAgc29jay5iaW5kKCgnbG9jYWxob3N0JywgMCkpCisgICAgICAgICAgICAgICAgc29jay5saXN0ZW4oMSkKKyAgICAgICAgICAgICAgICBhZGRyID0gc29jay5nZXRzb2NrbmFtZSgpCisgICAgICAgICAgICAgICAgcS5wdXQoYWRkcikKKyAgICAgICAgICAgICAgICBjbHQsIF8gPSBzb2NrLmFjY2VwdCgpCisgICAgICAgICAgICAgICAgY2x0LmNsb3NlKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNsaWVudChob3N0LCBwb3J0KToKKyAgICAgICAgICAgIHJlYWRlciwgd3JpdGVyID0geWllbGQgZnJvbSBhc3luY2lvLm9wZW5fY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBob3N0LCBwb3J0LCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB3cml0ZXIud3JpdGUoYiJmb29cbiIpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSB3cml0ZXIuZHJhaW4oKQorCisgICAgICAgICMgU3RhcnQgdGhlIHNlcnZlciB0aHJlYWQgYW5kIHdhaXQgZm9yIGl0IHRvIGJlIGxpc3RlbmluZy4KKyAgICAgICAgdGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VydmVyKQorICAgICAgICB0aHJlYWQuc2V0RGFlbW9uKFRydWUpCisgICAgICAgIHRocmVhZC5zdGFydCgpCisgICAgICAgIGFkZHIgPSBxLmdldCgpCisKKyAgICAgICAgIyBTaG91bGQgbm90IGJlIHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3AuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKENvbm5lY3Rpb25SZXNldEVycm9yLCBCcm9rZW5QaXBlRXJyb3IpKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY2xpZW50KCphZGRyKSkKKworICAgICAgICAjIENsZWFuIHVwIHRoZSB0aHJlYWQuICAoT25seSBvbiBzdWNjZXNzOyBvbiBmYWlsdXJlLCBpdCBtYXkKKyAgICAgICAgIyBiZSBzdHVjayBpbiBhY2NlcHQoKS4pCisgICAgICAgIHRocmVhZC5qb2luKCkKKworICAgIGRlZiB0ZXN0X19fcmVwcl9fKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPFN0cmVhbVJlYWRlcj4iLCByZXByKHN0cmVhbSkpCisKKyAgICBkZWYgdGVzdF9fX3JlcHJfX25vbmRlZmF1bHRfbGltaXQoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wLCBsaW1pdD0xMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxTdHJlYW1SZWFkZXIgbD0xMjM+IiwgcmVwcihzdHJlYW0pKQorCisgICAgZGVmIHRlc3RfX19yZXByX19lb2Yoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9lb2YoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8U3RyZWFtUmVhZGVyIGVvZj4iLCByZXByKHN0cmVhbSkpCisKKyAgICBkZWYgdGVzdF9fX3JlcHJfX2RhdGEoc2VsZik6CisgICAgICAgIHN0cmVhbSA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzdHJlYW0uZmVlZF9kYXRhKGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjxTdHJlYW1SZWFkZXIgNCBieXRlcz4iLCByZXByKHN0cmVhbSkpCisKKyAgICBkZWYgdGVzdF9fX3JlcHJfX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgc3RyZWFtID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV4YyA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIHN0cmVhbS5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPFN0cmVhbVJlYWRlciBlPVJ1bnRpbWVFcnJvcigpPiIsIHJlcHIoc3RyZWFtKSkKKworICAgIGRlZiB0ZXN0X19fcmVwcl9fd2FpdGVyKHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLl93YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleCgKKyAgICAgICAgICAgIHJlcHIoc3RyZWFtKSwKKyAgICAgICAgICAgICI8U3RyZWFtUmVhZGVyIHc9PEZ1dHVyZSBwZW5kaW5nW1xTIF0qPj4iKQorICAgICAgICBzdHJlYW0uX3dhaXRlci5zZXRfcmVzdWx0KE5vbmUpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc3RyZWFtLl93YWl0ZXIpCisgICAgICAgIHN0cmVhbS5fd2FpdGVyID0gTm9uZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCI8U3RyZWFtUmVhZGVyPiIsIHJlcHIoc3RyZWFtKSkKKworICAgIGRlZiB0ZXN0X19fcmVwcl9fdHJhbnNwb3J0KHNlbGYpOgorICAgICAgICBzdHJlYW0gPSBhc3luY2lvLlN0cmVhbVJlYWRlcihsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc3RyZWFtLl90cmFuc3BvcnQgPSBtb2NrLk1vY2soKQorICAgICAgICBzdHJlYW0uX3RyYW5zcG9ydC5fX3JlcHJfXyA9IG1vY2suTW9jaygpCisgICAgICAgIHN0cmVhbS5fdHJhbnNwb3J0Ll9fcmVwcl9fLnJldHVybl92YWx1ZSA9ICI8VHJhbnNwb3J0PiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiPFN0cmVhbVJlYWRlciB0PTxUcmFuc3BvcnQ+PiIsIHJlcHIoc3RyZWFtKSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfc3VicHJvY2Vzcy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3N1YnByb2Nlc3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTkwZjE3ZAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3N1YnByb2Nlc3MucHkKQEAgLTAsMCArMSw0NzIgQEAKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCitmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IGJhc2Vfc3VicHJvY2VzcworZnJvbSBhc3luY2lvIGltcG9ydCBzdWJwcm9jZXNzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK3RyeToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0CitpZiBzeXMucGxhdGZvcm0gIT0gJ3dpbjMyJzoKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHVuaXhfZXZlbnRzCisKKyMgUHJvZ3JhbSBibG9ja2luZworUFJPR1JBTV9CTE9DS0VEID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCAnaW1wb3J0IHRpbWU7IHRpbWUuc2xlZXAoMzYwMCknXQorCisjIFByb2dyYW0gY29weWluZyBpbnB1dCB0byBvdXRwdXQKK1BST0dSQU1fQ0FUID0gWworICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICc7Jy5qb2luKCgnaW1wb3J0IHN5cycsCisgICAgICAgICAgICAgICdkYXRhID0gc3lzLnN0ZGluLmJ1ZmZlci5yZWFkKCknLAorICAgICAgICAgICAgICAnc3lzLnN0ZG91dC5idWZmZXIud3JpdGUoZGF0YSknKSldCisKK2NsYXNzIFRlc3RTdWJwcm9jZXNzVHJhbnNwb3J0KGJhc2Vfc3VicHJvY2Vzcy5CYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCk6CisgICAgZGVmIF9zdGFydChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLl9wcm9jID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5fcHJvYy5zdGRpbiA9IE5vbmUKKyAgICAgICAgc2VsZi5fcHJvYy5zdGRvdXQgPSBOb25lCisgICAgICAgIHNlbGYuX3Byb2Muc3RkZXJyID0gTm9uZQorCisKK2NsYXNzIFN1YnByb2Nlc3NUcmFuc3BvcnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3Aoc2VsZi5sb29wKQorCisKKyAgICBkZWYgY3JlYXRlX3RyYW5zcG9ydChzZWxmLCB3YWl0ZXI9Tm9uZSk6CisgICAgICAgIHByb3RvY29sID0gbW9jay5Nb2NrKCkKKyAgICAgICAgcHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLl9pc19jb3JvdXRpbmUgPSBGYWxzZQorICAgICAgICBwcm90b2NvbC5wcm9jZXNzX2V4aXRlZC5faXNfY29yb3V0aW5lID0gRmFsc2UKKyAgICAgICAgdHJhbnNwb3J0ID0gVGVzdFN1YnByb2Nlc3NUcmFuc3BvcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AsIHByb3RvY29sLCBbJ3Rlc3QnXSwgRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBOb25lLCBOb25lLCAwLCB3YWl0ZXI9d2FpdGVyKQorICAgICAgICByZXR1cm4gKHRyYW5zcG9ydCwgcHJvdG9jb2wpCisKKyAgICBkZWYgdGVzdF9wcm9jX2V4aXRlZChzZWxmKToKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSBzZWxmLmNyZWF0ZV90cmFuc3BvcnQod2FpdGVyKQorICAgICAgICB0cmFuc3BvcnQuX3Byb2Nlc3NfZXhpdGVkKDYpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhbnNwb3J0LmdldF9yZXR1cm5jb2RlKCksIDYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb3RvY29sLmNvbm5lY3Rpb25fbWFkZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90b2NvbC5wcm9jZXNzX2V4aXRlZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsX2FyZ3NbMF0sIChOb25lLCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuaXNfY2xvc2luZygpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3BvcnQuX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyYW5zcG9ydC5fcHJvYykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwb3J0Ll9wcm90b2NvbCkKKworICAgICAgICAjIG1ldGhvZHMgbXVzdCByYWlzZSBQcm9jZXNzTG9va3VwRXJyb3IgaWYgdGhlIHByb2Nlc3MgZXhpdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb2Nlc3NMb29rdXBFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnNlbmRfc2lnbmFsLCBzaWduYWwuU0lHVEVSTSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvY2Vzc0xvb2t1cEVycm9yLCB0cmFuc3BvcnQudGVybWluYXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9jZXNzTG9va3VwRXJyb3IsIHRyYW5zcG9ydC5raWxsKQorCisgICAgICAgIHRyYW5zcG9ydC5jbG9zZSgpCisKKworY2xhc3MgU3VicHJvY2Vzc01peGluOgorCisgICAgZGVmIHRlc3Rfc3RkaW5fc3Rkb3V0KHNlbGYpOgorICAgICAgICBhcmdzID0gUFJPR1JBTV9DQVQKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJ1bihkYXRhKToKKyAgICAgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICAgICAjIGZlZWQgZGF0YQorICAgICAgICAgICAgcHJvYy5zdGRpbi53cml0ZShkYXRhKQorICAgICAgICAgICAgeWllbGQgZnJvbSBwcm9jLnN0ZGluLmRyYWluKCkKKyAgICAgICAgICAgIHByb2Muc3RkaW4uY2xvc2UoKQorCisgICAgICAgICAgICAjIGdldCBvdXRwdXQgYW5kIGV4aXRjb2RlCisgICAgICAgICAgICBkYXRhID0geWllbGQgZnJvbSBwcm9jLnN0ZG91dC5yZWFkKCkKKyAgICAgICAgICAgIGV4aXRjb2RlID0geWllbGQgZnJvbSBwcm9jLndhaXQoKQorICAgICAgICAgICAgcmV0dXJuIChleGl0Y29kZSwgZGF0YSkKKworICAgICAgICB0YXNrID0gcnVuKGInc29tZSBkYXRhJykKKyAgICAgICAgdGFzayA9IGFzeW5jaW8ud2FpdF9mb3IodGFzaywgNjAuMCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV4aXRjb2RlLCBzdGRvdXQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ3NvbWUgZGF0YScpCisKKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZShzZWxmKToKKyAgICAgICAgYXJncyA9IFBST0dSQU1fQ0FUCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBydW4oZGF0YSk6CisgICAgICAgICAgICBwcm9jID0geWllbGQgZnJvbSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0geWllbGQgZnJvbSBwcm9jLmNvbW11bmljYXRlKGRhdGEpCisgICAgICAgICAgICByZXR1cm4gcHJvYy5yZXR1cm5jb2RlLCBzdGRvdXQKKworICAgICAgICB0YXNrID0gcnVuKGInc29tZSBkYXRhJykKKyAgICAgICAgdGFzayA9IGFzeW5jaW8ud2FpdF9mb3IodGFzaywgNjAuMCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGV4aXRjb2RlLCBzdGRvdXQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ3NvbWUgZGF0YScpCisKKyAgICBkZWYgdGVzdF9zaGVsbChzZWxmKToKKyAgICAgICAgY3JlYXRlID0gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19zaGVsbCgnZXhpdCA3JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcHJvYyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorICAgICAgICBleGl0Y29kZSA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDcpCisKKyAgICBkZWYgdGVzdF9zdGFydF9uZXdfc2Vzc2lvbihzZWxmKToKKyAgICAgICAgIyBzdGFydCB0aGUgbmV3IHByb2Nlc3MgaW4gYSBuZXcgc2Vzc2lvbgorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX3NoZWxsKCdleGl0IDgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKyAgICAgICAgZXhpdGNvZGUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2Mud2FpdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4aXRjb2RlLCA4KQorCisgICAgZGVmIHRlc3Rfa2lsbChzZWxmKToKKyAgICAgICAgYXJncyA9IFBST0dSQU1fQkxPQ0tFRAorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoKmFyZ3MsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBwcm9jID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjcmVhdGUpCisgICAgICAgIHByb2Mua2lsbCgpCisgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2Mud2FpdCgpKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXR1cm5jb2RlLCBpbnQpCisgICAgICAgICAgICAjIGV4cGVjdCAxIGJ1dCBzb21ldGltZXMgZ2V0IDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoLXNpZ25hbC5TSUdLSUxMLCByZXR1cm5jb2RlKQorCisgICAgZGVmIHRlc3RfdGVybWluYXRlKHNlbGYpOgorICAgICAgICBhcmdzID0gUFJPR1JBTV9CTE9DS0VECisgICAgICAgIGNyZWF0ZSA9IGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygqYXJncywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKyAgICAgICAgcHJvYy50ZXJtaW5hdGUoKQorICAgICAgICByZXR1cm5jb2RlID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShwcm9jLndhaXQoKSkKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmV0dXJuY29kZSwgaW50KQorICAgICAgICAgICAgIyBleHBlY3QgMSBidXQgc29tZXRpbWVzIGdldCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHVEVSTSwgcmV0dXJuY29kZSkKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICd3aW4zMicsICJEb24ndCBoYXZlIFNJR0hVUCIpCisgICAgZGVmIHRlc3Rfc2VuZF9zaWduYWwoc2VsZik6CisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRpbWU7IHByaW50KCJzbGVlcGluZyIsIGZsdXNoPVRydWUpOyB0aW1lLnNsZWVwKDM2MDApJworICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlXQorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoKmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNlbmRfc2lnbmFsKHByb2MpOgorICAgICAgICAgICAgIyBiYXNpYyBzeW5jaHJvbml6YXRpb24gdG8gd2FpdCB1bnRpbCB0aGUgcHJvZ3JhbSBpcyBzbGVlcGluZworICAgICAgICAgICAgbGluZSA9IHlpZWxkIGZyb20gcHJvYy5zdGRvdXQucmVhZGxpbmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBiJ3NsZWVwaW5nXG4nKQorCisgICAgICAgICAgICBwcm9jLnNlbmRfc2lnbmFsKHNpZ25hbC5TSUdIVVApCisgICAgICAgICAgICByZXR1cm5jb2RlID0gKHlpZWxkIGZyb20gcHJvYy53YWl0KCkpCisgICAgICAgICAgICByZXR1cm4gcmV0dXJuY29kZQorCisgICAgICAgIHJldHVybmNvZGUgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHNlbmRfc2lnbmFsKHByb2MpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC1zaWduYWwuU0lHSFVQLCByZXR1cm5jb2RlKQorCisgICAgZGVmIHByZXBhcmVfYnJva2VuX3BpcGVfdGVzdChzZWxmKToKKyAgICAgICAgIyBidWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGZlZWQgdGhlIHdob2xlIHBpcGUgYnVmZmVyCisgICAgICAgIGxhcmdlX2RhdGEgPSBiJ3gnICogc3VwcG9ydC5QSVBFX01BWF9TSVpFCisKKyAgICAgICAgIyB0aGUgcHJvZ3JhbSBlbmRzIGJlZm9yZSB0aGUgc3RkaW4gY2FuIGJlIGZlZWRlZAorICAgICAgICBjcmVhdGUgPSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLCAncGFzcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHByb2MgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNyZWF0ZSkKKyAgICAgICAgcmV0dXJuIChwcm9jLCBsYXJnZV9kYXRhKQorCisgICAgZGVmIHRlc3Rfc3RkaW5fYnJva2VuX3BpcGUoc2VsZik6CisgICAgICAgIHByb2MsIGxhcmdlX2RhdGEgPSBzZWxmLnByZXBhcmVfYnJva2VuX3BpcGVfdGVzdCgpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB3cml0ZV9zdGRpbihwcm9jLCBkYXRhKToKKyAgICAgICAgICAgIHByb2Muc3RkaW4ud3JpdGUoZGF0YSkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gcHJvYy5zdGRpbi5kcmFpbigpCisKKyAgICAgICAgY29ybyA9IHdyaXRlX3N0ZGluKHByb2MsIGxhcmdlX2RhdGEpCisgICAgICAgICMgZHJhaW4oKSBtdXN0IHJhaXNlIEJyb2tlblBpcGVFcnJvciBvciBDb25uZWN0aW9uUmVzZXRFcnJvcgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChCcm9rZW5QaXBlRXJyb3IsIENvbm5lY3Rpb25SZXNldEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIGNvcm8pCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisKKyAgICBkZWYgdGVzdF9jb21tdW5pY2F0ZV9pZ25vcmVfYnJva2VuX3BpcGUoc2VsZik6CisgICAgICAgIHByb2MsIGxhcmdlX2RhdGEgPSBzZWxmLnByZXBhcmVfYnJva2VuX3BpcGVfdGVzdCgpCisKKyAgICAgICAgIyBjb21tdW5pY2F0ZSgpIG11c3QgaWdub3JlIEJyb2tlblBpcGVFcnJvciB3aGVuIGZlZWRpbmcgc3RkaW4KKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHByb2MuY29tbXVuaWNhdGUobGFyZ2VfZGF0YSkpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocHJvYy53YWl0KCkpCisKKyAgICBkZWYgdGVzdF9wYXVzZV9yZWFkaW5nKHNlbGYpOgorICAgICAgICBsaW1pdCA9IDEwCisgICAgICAgIHNpemUgPSAobGltaXQgKiAyICsgMSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRlc3RfcGF1c2VfcmVhZGluZygpOgorICAgICAgICAgICAgY29kZSA9ICdcbicuam9pbigoCisgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXMnLAorICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LndyaXRlKCJ4IiAqICVzKScgJSBzaXplLAorICAgICAgICAgICAgICAgICdzeXMuc3Rkb3V0LmZsdXNoKCknLAorICAgICAgICAgICAgKSkKKworICAgICAgICAgICAgY29ubmVjdF9yZWFkX3BpcGUgPSBzZWxmLmxvb3AuY29ubmVjdF9yZWFkX3BpcGUKKworICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgY29ubmVjdF9yZWFkX3BpcGVfbW9jaygqYXJncywgKiprdyk6CisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LCBwcm90b2NvbCA9IHlpZWxkIGZyb20gY29ubmVjdF9yZWFkX3BpcGUoKmFyZ3MsICoqa3cpCisgICAgICAgICAgICAgICAgdHJhbnNwb3J0LnBhdXNlX3JlYWRpbmcgPSBtb2NrLk1vY2soKQorICAgICAgICAgICAgICAgIHRyYW5zcG9ydC5yZXN1bWVfcmVhZGluZyA9IG1vY2suTW9jaygpCisgICAgICAgICAgICAgICAgcmV0dXJuICh0cmFuc3BvcnQsIHByb3RvY29sKQorCisgICAgICAgICAgICBzZWxmLmxvb3AuY29ubmVjdF9yZWFkX3BpcGUgPSBjb25uZWN0X3JlYWRfcGlwZV9tb2NrCisKKyAgICAgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPWFzeW5jaW8uc3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9YXN5bmNpby5zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PWxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHN0ZG91dF90cmFuc3BvcnQgPSBwcm9jLl90cmFuc3BvcnQuZ2V0X3BpcGVfdHJhbnNwb3J0KDEpCisKKyAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0geWllbGQgZnJvbSBwcm9jLmNvbW11bmljYXRlKCkKKworICAgICAgICAgICAgIyBUaGUgY2hpbGQgcHJvY2VzcyBwcm9kdWNlZCBtb3JlIHRoYW4gbGltaXQgYnl0ZXMgb2Ygb3V0cHV0LAorICAgICAgICAgICAgIyB0aGUgc3RyZWFtIHJlYWRlciB0cmFuc3BvcnQgc2hvdWxkIHBhdXNlIHRoZSBwcm90b2NvbCB0byBub3QKKyAgICAgICAgICAgICMgYWxsb2NhdGUgdG9vIG11Y2ggbWVtb3J5LgorICAgICAgICAgICAgcmV0dXJuIChzdGRvdXQsIHN0ZG91dF90cmFuc3BvcnQpCisKKyAgICAgICAgIyBJc3N1ZSAjMjI2ODU6IEVuc3VyZSB0aGF0IHRoZSBzdHJlYW0gcmVhZGVyIHBhdXNlcyB0aGUgcHJvdG9jb2wKKyAgICAgICAgIyB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIHByb2R1Y2VzIHRvbyBtdWNoIGRhdGEKKyAgICAgICAgc3Rkb3V0LCB0cmFuc3BvcnQgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRlc3RfcGF1c2VfcmVhZGluZygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ3gnICogc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5wYXVzZV9yZWFkaW5nLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyYW5zcG9ydC5yZXN1bWVfcmVhZGluZy5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9zdGRpbl9ub3RfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgICMgYXN5bmNpbyBpc3N1ZSAjMjA5OiBzdGRpbiBtdXN0IG5vdCBiZSBpbmhlcml0YWJsZSwgb3RoZXJ3aXNlCisgICAgICAgICMgdGhlIFByb2Nlc3MuY29tbXVuaWNhdGUoKSBoYW5ncworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGxlbl9tZXNzYWdlKG1lc3NhZ2UpOgorICAgICAgICAgICAgY29kZSA9ICdpbXBvcnQgc3lzOyBkYXRhID0gc3lzLnN0ZGluLnJlYWQoKTsgcHJpbnQobGVuKGRhdGEpKScKKyAgICAgICAgICAgIHByb2MgPSB5aWVsZCBmcm9tIGFzeW5jaW8uY3JlYXRlX3N1YnByb2Nlc3NfZXhlYygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49YXN5bmNpby5zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9YXN5bmNpby5zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9YXN5bmNpby5zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0geWllbGQgZnJvbSBwcm9jLmNvbW11bmljYXRlKG1lc3NhZ2UpCisgICAgICAgICAgICBleGl0Y29kZSA9IHlpZWxkIGZyb20gcHJvYy53YWl0KCkKKyAgICAgICAgICAgIHJldHVybiAoc3Rkb3V0LCBleGl0Y29kZSkKKworICAgICAgICBvdXRwdXQsIGV4aXRjb2RlID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShsZW5fbWVzc2FnZShiJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiczJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0Y29kZSwgMCkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9wcm9jZXNzX3dhaXQoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIzMTQwOiBjYW5jZWwgUHJvY2Vzcy53YWl0KCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNhbmNlbF93YWl0KCk6CisgICAgICAgICAgICBwcm9jID0geWllbGQgZnJvbSBhc3luY2lvLmNyZWF0ZV9zdWJwcm9jZXNzX2V4ZWMoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUFJPR1JBTV9CTE9DS0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgICAgICMgQ3JlYXRlIGFuIGludGVybmFsIGZ1dHVyZSB3YWl0aW5nIG9uIHRoZSBwcm9jZXNzIGV4aXQKKyAgICAgICAgICAgIHRhc2sgPSBzZWxmLmxvb3AuY3JlYXRlX3Rhc2socHJvYy53YWl0KCkpCisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHRhc2suY2FuY2VsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gdGFzaworICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICAjIENhbmNlbCB0aGUgZnV0dXJlCisgICAgICAgICAgICB0YXNrLmNhbmNlbCgpCisKKyAgICAgICAgICAgICMgS2lsbCB0aGUgcHJvY2VzcyBhbmQgd2FpdCB1bnRpbCBpdCBpcyBkb25lCisgICAgICAgICAgICBwcm9jLmtpbGwoKQorICAgICAgICAgICAgeWllbGQgZnJvbSBwcm9jLndhaXQoKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY2FuY2VsX3dhaXQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9tYWtlX3N1YnByb2Nlc3NfdHJhbnNwb3J0X2V4ZWMoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY2FuY2VsX21ha2VfdHJhbnNwb3J0KCk6CisgICAgICAgICAgICBjb3JvID0gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKCpQUk9HUkFNX0JMT0NLRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgdGFzayA9IHNlbGYubG9vcC5jcmVhdGVfdGFzayhjb3JvKQorCisgICAgICAgICAgICBzZWxmLmxvb3AuY2FsbF9zb29uKHRhc2suY2FuY2VsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gdGFzaworICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICMgaWdub3JlIHRoZSBsb2c6CisgICAgICAgICMgIkV4Y2VwdGlvbiBkdXJpbmcgc3VicHJvY2VzcyBjcmVhdGlvbiwga2lsbCB0aGUgc3VicHJvY2VzcyIKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWxzLmRpc2FibGVfbG9nZ2VyKCk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNhbmNlbF9tYWtlX3RyYW5zcG9ydCgpKQorCisgICAgZGVmIHRlc3RfY2FuY2VsX3Bvc3RfaW5pdChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjYW5jZWxfbWFrZV90cmFuc3BvcnQoKToKKyAgICAgICAgICAgIGNvcm8gPSBzZWxmLmxvb3Auc3VicHJvY2Vzc19leGVjKGFzeW5jaW8uU3VicHJvY2Vzc1Byb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBST0dSQU1fQkxPQ0tFRCkKKyAgICAgICAgICAgIHRhc2sgPSBzZWxmLmxvb3AuY3JlYXRlX3Rhc2soY29ybykKKworICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbih0YXNrLmNhbmNlbCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2sKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIGlnbm9yZSB0aGUgbG9nOgorICAgICAgICAjICJFeGNlcHRpb24gZHVyaW5nIHN1YnByb2Nlc3MgY3JlYXRpb24sIGtpbGwgdGhlIHN1YnByb2Nlc3MiCisgICAgICAgIHdpdGggdGVzdF91dGlscy5kaXNhYmxlX2xvZ2dlcigpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjYW5jZWxfbWFrZV90cmFuc3BvcnQoKSkKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgZGVmIHRlc3RfY2xvc2Vfa2lsbF9ydW5uaW5nKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGtpbGxfcnVubmluZygpOgorICAgICAgICAgICAgY3JlYXRlID0gc2VsZi5sb29wLnN1YnByb2Nlc3NfZXhlYyhhc3luY2lvLlN1YnByb2Nlc3NQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBST0dSQU1fQkxPQ0tFRCkKKyAgICAgICAgICAgIHRyYW5zcG9ydCwgcHJvdG9jb2wgPSB5aWVsZCBmcm9tIGNyZWF0ZQorCisgICAgICAgICAgICBraWxsX2NhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBkZWYga2lsbCgpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIGtpbGxfY2FsbGVkCisgICAgICAgICAgICAgICAga2lsbF9jYWxsZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgb3JpZ19raWxsKCkKKworICAgICAgICAgICAgcHJvYyA9IHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnc3VicHJvY2VzcycpCisgICAgICAgICAgICBvcmlnX2tpbGwgPSBwcm9jLmtpbGwKKyAgICAgICAgICAgIHByb2Mua2lsbCA9IGtpbGwKKyAgICAgICAgICAgIHJldHVybmNvZGUgPSB0cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUoKQorICAgICAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gdHJhbnNwb3J0Ll93YWl0KCkKKyAgICAgICAgICAgIHJldHVybiAocmV0dXJuY29kZSwga2lsbF9jYWxsZWQpCisKKyAgICAgICAgIyBJZ25vcmUgIkNsb3NlIHJ1bm5pbmcgY2hpbGQgcHJvY2Vzczoga2lsbCAuLi4iIGxvZworICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHJldHVybmNvZGUsIGtpbGxlZCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoa2lsbF9ydW5uaW5nKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJldHVybmNvZGUpCisKKyAgICAgICAgIyB0cmFuc3BvcnQuY2xvc2UoKSBtdXN0IGtpbGwgdGhlIHByb2Nlc3MgaWYgaXQgaXMgc3RpbGwgcnVubmluZworICAgICAgICBzZWxmLmFzc2VydFRydWUoa2lsbGVkKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2RvbnRfa2lsbF9maW5pc2hlZChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBraWxsX3J1bm5pbmcoKToKKyAgICAgICAgICAgIGNyZWF0ZSA9IHNlbGYubG9vcC5zdWJwcm9jZXNzX2V4ZWMoYXN5bmNpby5TdWJwcm9jZXNzUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQUk9HUkFNX0JMT0NLRUQpCisgICAgICAgICAgICB0cmFuc3BvcnQsIHByb3RvY29sID0geWllbGQgZnJvbSBjcmVhdGUKKyAgICAgICAgICAgIHByb2MgPSB0cmFuc3BvcnQuZ2V0X2V4dHJhX2luZm8oJ3N1YnByb2Nlc3MnKQorCisgICAgICAgICAgICAjIGtpbGwgdGhlIHByb2Nlc3MgKGJ1dCBhc3luY2lvIGlzIG5vdCBub3RpZmllZCBpbW1lZGlhdGx5KQorICAgICAgICAgICAgcHJvYy5raWxsKCkKKyAgICAgICAgICAgIHByb2Mud2FpdCgpCisKKyAgICAgICAgICAgIHByb2Mua2lsbCA9IG1vY2suTW9jaygpCisgICAgICAgICAgICBwcm9jX3JldHVybmNvZGUgPSBwcm9jLnBvbGwoKQorICAgICAgICAgICAgdHJhbnNwb3J0X3JldHVybmNvZGUgPSB0cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUoKQorICAgICAgICAgICAgdHJhbnNwb3J0LmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiAocHJvY19yZXR1cm5jb2RlLCB0cmFuc3BvcnRfcmV0dXJuY29kZSwgcHJvYy5raWxsLmNhbGxlZCkKKworICAgICAgICAjIElnbm9yZSAiVW5rbm93biBjaGlsZCBwcm9jZXNzIHBpZCAuLi4iIGxvZyBvZiBTYWZlQ2hpbGRXYXRjaGVyLAorICAgICAgICAjIGVtaXR0ZWQgYmVjYXVzZSB0aGUgdGVzdCBhbHJlYWR5IGNvbnN1bWVzIHRoZSBleGl0IHN0YXR1czoKKyAgICAgICAgIyBwcm9jLndhaXQoKQorICAgICAgICB3aXRoIHRlc3RfdXRpbHMuZGlzYWJsZV9sb2dnZXIoKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoa2lsbF9ydW5uaW5nKCkpCisgICAgICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgICAgICBwcm9jX3JldHVybmNvZGUsIHRyYW5zcG9ydF9yZXR1cm5fY29kZSwga2lsbGVkID0gcmVzdWx0CisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocHJvY19yZXR1cm5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0cmFuc3BvcnRfcmV0dXJuX2NvZGUpCisKKyAgICAgICAgIyB0cmFuc3BvcnQuY2xvc2UoKSBtdXN0IG5vdCBraWxsIHRoZSBwcm9jZXNzIGlmIGl0IGZpbmlzaGVkLCBldmVuIGlmCisgICAgICAgICMgdGhlIHRyYW5zcG9ydCB3YXMgbm90IG5vdGlmaWVkIHlldAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtpbGxlZCkKKworICAgIGRlZiB0ZXN0X3BvcGVuX2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNDc2MzogY2hlY2sgdGhhdCB0aGUgc3VicHJvY2VzcyB0cmFuc3BvcnQgaXMgY2xvc2VkCisgICAgICAgICMgd2hlbiBCYXNlU3VicHJvY2Vzc1RyYW5zcG9ydCBmYWlscworICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHRhcmdldCA9ICdhc3luY2lvLndpbmRvd3NfdXRpbHMuUG9wZW4nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXJnZXQgPSAnc3VicHJvY2Vzcy5Qb3BlbicKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKHRhcmdldCkgYXMgcG9wZW46CisgICAgICAgICAgICBleGMgPSBaZXJvRGl2aXNpb25FcnJvcgorICAgICAgICAgICAgcG9wZW4uc2lkZV9lZmZlY3QgPSBleGMKKworICAgICAgICAgICAgY3JlYXRlID0gYXN5bmNpby5jcmVhdGVfc3VicHJvY2Vzc19leGVjKHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXNzJywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3YXJuczoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4Yyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY3JlYXRlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2FybnMsIFtdKQorCisKK2lmIHN5cy5wbGF0Zm9ybSAhPSAnd2luMzInOgorICAgICMgVW5peAorICAgIGNsYXNzIFN1YnByb2Nlc3NXYXRjaGVyTWl4aW4oU3VicHJvY2Vzc01peGluKToKKworICAgICAgICBXYXRjaGVyID0gTm9uZQorCisgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgIHBvbGljeSA9IGFzeW5jaW8uZ2V0X2V2ZW50X2xvb3BfcG9saWN5KCkKKyAgICAgICAgICAgIHNlbGYubG9vcCA9IHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICAgICAgd2F0Y2hlciA9IHNlbGYuV2F0Y2hlcigpCisgICAgICAgICAgICB3YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKyAgICAgICAgICAgIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlciwgTm9uZSkKKworICAgIGNsYXNzIFN1YnByb2Nlc3NTYWZlV2F0Y2hlclRlc3RzKFN1YnByb2Nlc3NXYXRjaGVyTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgV2F0Y2hlciA9IHVuaXhfZXZlbnRzLlNhZmVDaGlsZFdhdGNoZXIKKworICAgIGNsYXNzIFN1YnByb2Nlc3NGYXN0V2F0Y2hlclRlc3RzKFN1YnByb2Nlc3NXYXRjaGVyTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICAgICAgV2F0Y2hlciA9IHVuaXhfZXZlbnRzLkZhc3RDaGlsZFdhdGNoZXIKKworZWxzZToKKyAgICAjIFdpbmRvd3MKKyAgICBjbGFzcyBTdWJwcm9jZXNzUHJvYWN0b3JUZXN0cyhTdWJwcm9jZXNzTWl4aW4sIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8uUHJvYWN0b3JFdmVudExvb3AoKQorICAgICAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Rhc2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdGFza3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlkNDlmMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3Rhc2tzLnB5CkBAIC0wLDAgKzEsMjQwOSBAQAorIiIiVGVzdHMgZm9yIHRhc2tzLnB5LiIiIgorCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCByZQoraW1wb3J0IHN5cworaW1wb3J0IHRpbWUKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitpbXBvcnQgYXN5bmNpbworZnJvbSBhc3luY2lvIGltcG9ydCBjb3JvdXRpbmVzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK3RyeToKKyAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3Rfc3VwcG9ydCBhcyBzdXBwb3J0Cit0cnk6CisgICAgZnJvbSB0ZXN0LnN1cHBvcnQuc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHRyeToKKyAgICAgICAgZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKKyAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIGZyb20gYXN5bmNpby50ZXN0X3N1cHBvcnQgaW1wb3J0IGFzc2VydF9weXRob25fb2sKKworCitQWTM0ID0gKHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDQpKQorUFkzNSA9IChzeXMudmVyc2lvbl9pbmZvID49ICgzLCA1KSkKKworCitAYXN5bmNpby5jb3JvdXRpbmUKK2RlZiBjb3JvdXRpbmVfZnVuY3Rpb24oKToKKyAgICBwYXNzCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBzZXRfY29yb3V0aW5lX2RlYnVnKGVuYWJsZWQpOgorICAgIGNvcm91dGluZXMgPSBhc3luY2lvLmNvcm91dGluZXMKKworICAgIG9sZF9kZWJ1ZyA9IGNvcm91dGluZXMuX0RFQlVHCisgICAgdHJ5OgorICAgICAgICBjb3JvdXRpbmVzLl9ERUJVRyA9IGVuYWJsZWQKKyAgICAgICAgeWllbGQKKyAgICBmaW5hbGx5OgorICAgICAgICBjb3JvdXRpbmVzLl9ERUJVRyA9IG9sZF9kZWJ1ZworCisKKworZGVmIGZvcm1hdF9jb3JvdXRpbmUocXVhbG5hbWUsIHN0YXRlLCBzcmMsIHNvdXJjZV90cmFjZWJhY2ssIGdlbmVyYXRvcj1GYWxzZSk6CisgICAgaWYgZ2VuZXJhdG9yOgorICAgICAgICBzdGF0ZSA9ICclcycgJSBzdGF0ZQorICAgIGVsc2U6CisgICAgICAgIHN0YXRlID0gJyVzLCBkZWZpbmVkJyAlIHN0YXRlCisgICAgaWYgc291cmNlX3RyYWNlYmFjayBpcyBub3QgTm9uZToKKyAgICAgICAgZnJhbWUgPSBzb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICByZXR1cm4gKCdjb3JvPTwlcygpICVzIGF0ICVzPiBjcmVhdGVkIGF0ICVzOiVzJworICAgICAgICAgICAgICAgICUgKHF1YWxuYW1lLCBzdGF0ZSwgc3JjLCBmcmFtZVswXSwgZnJhbWVbMV0pKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiAnY29ybz08JXMoKSAlcyBhdCAlcz4nICUgKHF1YWxuYW1lLCBzdGF0ZSwgc3JjKQorCisKK2NsYXNzIER1bW15OgorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxEdW1teT4nCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgVGFza1Rlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorCisgICAgZGVmIHRlc3Rfb3RoZXJfbG9vcF9mdXR1cmUoc2VsZik6CisgICAgICAgIG90aGVyX2xvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1vdGhlcl9sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcnVuKGZ1dCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcidUYXNrIC4qIGdvdCBGdXR1cmUgLiogYXR0YWNoZWQnKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJ1bihmdXQpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3RoZXJfbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF90YXNrX2NsYXNzKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHJldHVybiAnb2snCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sobm90bXVjaCgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZXN1bHQoKSwgJ29rJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBzZWxmLmxvb3ApCisKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sobm90bXVjaCgpLCBsb29wPWxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgbG9vcCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9lbnN1cmVfZnV0dXJlX2Nvcm91dGluZShzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBub3RtdWNoKCk6CisgICAgICAgICAgICByZXR1cm4gJ29rJworICAgICAgICB0ID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucmVzdWx0KCksICdvaycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgICAgIGxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICB0ID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKG5vdG11Y2goKSwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2xvb3AsIGxvb3ApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZW5zdXJlX2Z1dHVyZV9mdXR1cmUoc2VsZik6CisgICAgICAgIGZfb3JpZyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmX29yaWcuc2V0X3Jlc3VsdCgna28nKQorCisgICAgICAgIGYgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoZl9vcmlnKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCAna28nKQorICAgICAgICBzZWxmLmFzc2VydElzKGYsIGZfb3JpZykKKworICAgICAgICBsb29wID0gYXN5bmNpby5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHNlbGYuc2V0X2V2ZW50X2xvb3AobG9vcCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZiA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShmX29yaWcsIGxvb3A9bG9vcCkKKworICAgICAgICBsb29wLmNsb3NlKCkKKworICAgICAgICBmID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGZfb3JpZywgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgZl9vcmlnKQorCisgICAgZGVmIHRlc3RfZW5zdXJlX2Z1dHVyZV90YXNrKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHJldHVybiAnb2snCisgICAgICAgIHRfb3JpZyA9IGFzeW5jaW8uVGFzayhub3RtdWNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKHRfb3JpZykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5yZXN1bHQoKSwgJ29rJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0LCB0X29yaWcpCisKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKGxvb3ApCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHQgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUodF9vcmlnLCBsb29wPWxvb3ApCisKKyAgICAgICAgbG9vcC5jbG9zZSgpCisKKyAgICAgICAgdCA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZSh0X29yaWcsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQsIHRfb3JpZykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFBZMzUsICduZWVkIHB5dGhvbiAzLjUgb3IgbGF0ZXInKQorICAgIGRlZiB0ZXN0X2Vuc3VyZV9mdXR1cmVfYXdhaXRhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBBdzoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb3JvKToKKyAgICAgICAgICAgICAgICBzZWxmLmNvcm8gPSBjb3JvCisgICAgICAgICAgICBkZWYgX19hd2FpdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBzZWxmLmNvcm8pCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICByZXR1cm4gJ29rJworCisgICAgICAgIGxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChsb29wKQorICAgICAgICBmdXQgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoQXcoY29ybygpKSwgbG9vcD1sb29wKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgIGFzc2VydCBmdXQucmVzdWx0KCkgPT0gJ29rJworCisgICAgZGVmIHRlc3RfZW5zdXJlX2Z1dHVyZV9uZWl0aGVyKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBhc3luY2lvLmVuc3VyZV9mdXR1cmUoJ29rJykKKworICAgIGRlZiB0ZXN0X2FzeW5jX3dhcm5pbmcoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCwgdXNlIGVuc3VyZV8nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZiwgYXN5bmNpby5hc3luYyhmKSkKKworICAgIGRlZiB0ZXN0X2dldF9zdGFjayhzZWxmKToKKyAgICAgICAgVCA9IE5vbmUKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBiYXIoKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgYmFyKCk6CisgICAgICAgICAgICAjIHRlc3QgZ2V0X3N0YWNrKCkKKyAgICAgICAgICAgIGYgPSBULmdldF9zdGFjayhsaW1pdD0xKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZlswXS5mX2NvZGUuY29fbmFtZSwgJ2ZvbycpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGYgPSBOb25lCisKKyAgICAgICAgICAgICMgdGVzdCBwcmludF9zdGFjaygpCisgICAgICAgICAgICBmaWxlID0gaW8uU3RyaW5nSU8oKQorICAgICAgICAgICAgVC5wcmludF9zdGFjayhsaW1pdD0xLCBmaWxlPWZpbGUpCisgICAgICAgICAgICBmaWxlLnNlZWsoMCkKKyAgICAgICAgICAgIHRiID0gZmlsZS5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgodGIsIHInZm9vXChcKSBydW5uaW5nJykKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJ1bm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgVAorICAgICAgICAgICAgVCA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShmb28oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIFQKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHJ1bm5lcigpKQorCisgICAgZGVmIHRlc3RfdGFza19yZXByKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKEZhbHNlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBbXQorICAgICAgICAgICAgcmV0dXJuICdhYmMnCisKKyAgICAgICAgIyB0ZXN0IGNvcm91dGluZSBmdW5jdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vdG11Y2guX19uYW1lX18sICdub3RtdWNoJykKKyAgICAgICAgaWYgUFkzNToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm90bXVjaC5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYXNrVGVzdHMudGVzdF90YXNrX3JlcHIuPGxvY2Fscz4ubm90bXVjaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm90bXVjaC5fX21vZHVsZV9fLCBfX25hbWVfXykKKworICAgICAgICBmaWxlbmFtZSwgbGluZW5vID0gdGVzdF91dGlscy5nZXRfZnVuY3Rpb25fc291cmNlKG5vdG11Y2gpCisgICAgICAgIHNyYyA9ICIlczolcyIgJSAoZmlsZW5hbWUsIGxpbmVubykKKworICAgICAgICAjIHRlc3QgY29yb3V0aW5lIG9iamVjdAorICAgICAgICBnZW4gPSBub3RtdWNoKCkKKyAgICAgICAgaWYgY29yb3V0aW5lcy5fREVCVUcgb3IgUFkzNToKKyAgICAgICAgICAgIGNvcm9fcXVhbG5hbWUgPSAnVGFza1Rlc3RzLnRlc3RfdGFza19yZXByLjxsb2NhbHM+Lm5vdG11Y2gnCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb3JvX3F1YWxuYW1lID0gJ25vdG11Y2gnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuLl9fbmFtZV9fLCAnbm90bXVjaCcpCisgICAgICAgIGlmIFBZMzU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdlbi5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcm9fcXVhbG5hbWUpCisKKyAgICAgICAgIyB0ZXN0IHBlbmRpbmcgVGFzaworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKGdlbiwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQuYWRkX2RvbmVfY2FsbGJhY2soRHVtbXkoKSkKKworICAgICAgICBjb3JvID0gZm9ybWF0X2Nvcm91dGluZShjb3JvX3F1YWxuYW1lLCAncnVubmluZycsIHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC5fc291cmNlX3RyYWNlYmFjaywgZ2VuZXJhdG9yPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPFRhc2sgcGVuZGluZyAlcyBjYj1bPER1bW15PigpXT4nICUgY29ybykKKworICAgICAgICAjIHRlc3QgY2FuY2VsbGluZyBUYXNrCisgICAgICAgIHQuY2FuY2VsKCkgICMgRG9lcyBub3QgdGFrZSBpbW1lZGlhdGUgZWZmZWN0IQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxUYXNrIGNhbmNlbGxpbmcgJXMgY2I9WzxEdW1teT4oKV0+JyAlIGNvcm8pCisKKyAgICAgICAgIyB0ZXN0IGNhbmNlbGxlZCBUYXNrCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHQpCisgICAgICAgIGNvcm8gPSBmb3JtYXRfY29yb3V0aW5lKGNvcm9fcXVhbG5hbWUsICdkb25lJywgc3JjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Ll9zb3VyY2VfdHJhY2ViYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxUYXNrIGNhbmNlbGxlZCAlcz4nICUgY29ybykKKworICAgICAgICAjIHRlc3QgZmluaXNoZWQgVGFzaworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKG5vdG11Y2goKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgY29ybyA9IGZvcm1hdF9jb3JvdXRpbmUoY29yb19xdWFsbmFtZSwgJ2RvbmUnLCBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuX3NvdXJjZV90cmFjZWJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPFRhc2sgZmluaXNoZWQgJXMgcmVzdWx0PSdhYmMnPiIgJSBjb3JvKQorCisgICAgZGVmIHRlc3RfdGFza19yZXByX2Nvcm9fZGVjb3JhdG9yKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKEZhbHNlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgIyBub3RtdWNoKCkgZnVuY3Rpb24gZG9lc24ndCB1c2UgeWllbGQgZnJvbTogaXQgd2lsbCBiZSB3cmFwcGVkIGJ5CisgICAgICAgICAgICAjIEBjb3JvdXRpbmUgZGVjb3JhdG9yCisgICAgICAgICAgICByZXR1cm4gMTIzCisKKyAgICAgICAgIyB0ZXN0IGNvcm91dGluZSBmdW5jdGlvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vdG11Y2guX19uYW1lX18sICdub3RtdWNoJykKKyAgICAgICAgaWYgUFkzNToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm90bXVjaC5fX3F1YWxuYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUYXNrVGVzdHMudGVzdF90YXNrX3JlcHJfY29yb19kZWNvcmF0b3InCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcuPGxvY2Fscz4ubm90bXVjaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm90bXVjaC5fX21vZHVsZV9fLCBfX25hbWVfXykKKworICAgICAgICAjIHRlc3QgY29yb3V0aW5lIG9iamVjdAorICAgICAgICBnZW4gPSBub3RtdWNoKCkKKyAgICAgICAgaWYgY29yb3V0aW5lcy5fREVCVUcgb3IgUFkzNToKKyAgICAgICAgICAgICMgT24gUHl0aG9uID49IDMuNSwgZ2VuZXJhdG9ycyBub3cgaW5oZXJpdCB0aGUgbmFtZSBvZiB0aGUKKyAgICAgICAgICAgICMgZnVuY3Rpb24sIGFzIGV4cGVjdGVkLCBhbmQgaGF2ZSBhIHF1YWxpZmllZCBuYW1lIChfX3F1YWxuYW1lX18KKyAgICAgICAgICAgICMgYXR0cmlidXRlKS4KKyAgICAgICAgICAgIGNvcm9fbmFtZSA9ICdub3RtdWNoJworICAgICAgICAgICAgY29yb19xdWFsbmFtZSA9ICgnVGFza1Rlc3RzLnRlc3RfdGFza19yZXByX2Nvcm9fZGVjb3JhdG9yJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLjxsb2NhbHM+Lm5vdG11Y2gnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBPbiBQeXRob24gPCAzLjUsIGdlbmVyYXRvcnMgaW5oZXJpdCB0aGUgbmFtZSBvZiB0aGUgY29kZSwgbm90IG9mCisgICAgICAgICAgICAjIHRoZSBmdW5jdGlvbi4gU2VlOiBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjEyMDUKKyAgICAgICAgICAgIGNvcm9fbmFtZSA9IGNvcm9fcXVhbG5hbWUgPSAnY29ybycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZW4uX19uYW1lX18sIGNvcm9fbmFtZSkKKyAgICAgICAgaWYgUFkzNToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2VuLl9fcXVhbG5hbWVfXywgY29yb19xdWFsbmFtZSkKKworICAgICAgICAjIHRlc3QgcmVwcihDb3JvV3JhcHBlcikKKyAgICAgICAgaWYgY29yb3V0aW5lcy5fREVCVUc6CisgICAgICAgICAgICAjIGZvcm1hdCB0aGUgY29yb3V0aW5lIG9iamVjdAorICAgICAgICAgICAgaWYgY29yb3V0aW5lcy5fREVCVUc6CisgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShub3RtdWNoKQorICAgICAgICAgICAgICAgIGZyYW1lID0gZ2VuLl9zb3VyY2VfdHJhY2ViYWNrWy0xXQorICAgICAgICAgICAgICAgIGNvcm8gPSAoJyVzKCkgcnVubmluZywgZGVmaW5lZCBhdCAlczolcywgY3JlYXRlZCBhdCAlczolcycKKyAgICAgICAgICAgICAgICAgICAgICAgICUgKGNvcm9fcXVhbG5hbWUsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZVswXSwgZnJhbWVbMV0pKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb2RlID0gZ2VuLmdpX2NvZGUKKyAgICAgICAgICAgICAgICBjb3JvID0gKCclcygpIHJ1bm5pbmcgYXQgJXM6JXMnCisgICAgICAgICAgICAgICAgICAgICAgICAlIChjb3JvX3F1YWxuYW1lLCBjb2RlLmNvX2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5jb19maXJzdGxpbmVubykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihnZW4pLCAnPENvcm9XcmFwcGVyICVzPicgJSBjb3JvKQorCisgICAgICAgICMgdGVzdCBwZW5kaW5nIFRhc2sKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayhnZW4sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0LmFkZF9kb25lX2NhbGxiYWNrKER1bW15KCkpCisKKyAgICAgICAgIyBmb3JtYXQgdGhlIGNvcm91dGluZSBvYmplY3QKKyAgICAgICAgaWYgY29yb3V0aW5lcy5fREVCVUc6CisgICAgICAgICAgICBzcmMgPSAnJXM6JXMnICUgdGVzdF91dGlscy5nZXRfZnVuY3Rpb25fc291cmNlKG5vdG11Y2gpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb2RlID0gZ2VuLmdpX2NvZGUKKyAgICAgICAgICAgIHNyYyA9ICclczolcycgJSAoY29kZS5jb19maWxlbmFtZSwgY29kZS5jb19maXJzdGxpbmVubykKKyAgICAgICAgY29ybyA9IGZvcm1hdF9jb3JvdXRpbmUoY29yb19xdWFsbmFtZSwgJ3J1bm5pbmcnLCBzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuX3NvdXJjZV90cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvcj1ub3QgY29yb3V0aW5lcy5fREVCVUcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPFRhc2sgcGVuZGluZyAlcyBjYj1bPER1bW15PigpXT4nICUgY29ybykKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorCisgICAgZGVmIHRlc3RfdGFza19yZXByX3dhaXRfZm9yKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKEZhbHNlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3IoZnV0KToKKyAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBmdXQpCisKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2sod2FpdF9mb3IoZnV0KSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHJlcHIodGFzayksCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxUYXNrIC4qIHdhaXRfZm9yPSVzPicgJSByZS5lc2NhcGUocmVwcihmdXQpKSkKKworICAgICAgICBmdXQuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisKKyAgICBkZWYgdGVzdF90YXNrX3JlcHJfcGFydGlhbF9jb3Jvd3JhcHBlcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjIyOiByZXByKENvcm9XcmFwcGVyKSBtdXN0IG5vdCBmYWlsIGluIGRlYnVnIG1vZGUgaWYgdGhlCisgICAgICAgICMgY29yb3V0aW5lIGlzIGEgcGFydGlhbCBmdW5jdGlvbgorICAgICAgICB3aXRoIHNldF9jb3JvdXRpbmVfZGVidWcoVHJ1ZSk6CisgICAgICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisKKyAgICAgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICAgICAgZGVmIGZ1bmMoeCwgeSk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDApCisKKyAgICAgICAgICAgIHBhcnRpYWxfZnVuYyA9IGFzeW5jaW8uY29yb3V0aW5lKGZ1bmN0b29scy5wYXJ0aWFsKGZ1bmMsIDEpKQorICAgICAgICAgICAgdGFzayA9IHNlbGYubG9vcC5jcmVhdGVfdGFzayhwYXJ0aWFsX2Z1bmMoMikpCisKKyAgICAgICAgICAgICMgbWFrZSB3YXJuaW5ncyBxdWlldAorICAgICAgICAgICAgdGFzay5fbG9nX2Rlc3Ryb3lfcGVuZGluZyA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAodGFzay5fY29yby5jbG9zZSkKKworICAgICAgICBjb3JvX3JlcHIgPSByZXByKHRhc2suX2Nvcm8pCisgICAgICAgIGV4cGVjdGVkID0gKCc8Q29yb1dyYXBwZXIgVGFza1Rlc3RzLnRlc3RfdGFza19yZXByX3BhcnRpYWxfY29yb3dyYXBwZXInCisgICAgICAgICAgICAgICAgICAgICcuPGxvY2Fscz4uZnVuYygxKSgpIHJ1bm5pbmcsICcpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3JvX3JlcHIuc3RhcnRzd2l0aChleHBlY3RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICBjb3JvX3JlcHIpCisKKyAgICBkZWYgdGVzdF90YXNrX2Jhc2ljcyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgYSA9IHlpZWxkIGZyb20gaW5uZXIxKCkKKyAgICAgICAgICAgIGIgPSB5aWVsZCBmcm9tIGlubmVyMigpCisgICAgICAgICAgICByZXR1cm4gYStiCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcjEoKToKKyAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgaW5uZXIyKCk6CisgICAgICAgICAgICByZXR1cm4gMTAwMAorCisgICAgICAgIHQgPSBvdXRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KSwgMTA0MikKKworICAgIGRlZiB0ZXN0X2NhbmNlbChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxMC4wLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHRhc2soKSwgbG9vcD1sb29wKQorICAgICAgICBsb29wLmNhbGxfc29vbih0LmNhbmNlbCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF95aWVsZChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHJldHVybiAxMgorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApICAjIHN0YXJ0IGNvcm8KKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWwoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9pbm5lcl9mdXR1cmUoc2VsZik6CisgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHRhc2soKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZgorICAgICAgICAgICAgcmV0dXJuIDEyCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkgICMgc3RhcnQgdGFzaworICAgICAgICBmLmNhbmNlbCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9ib3RoX3Rhc2tfYW5kX2lubmVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgdC5jYW5jZWwoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuY2FuY2VsbGVkKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfdGFza19jYXRjaGluZyhzZWxmKToKKyAgICAgICAgZnV0MSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBmdXQyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB0YXNrKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDIKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIHJldHVybiA0MgorCisgICAgICAgIHQgPSBhc3luY2lvLlRhc2sodGFzaygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fZnV0X3dhaXRlciwgZnV0MSkgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIGZ1dDEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9mdXRfd2FpdGVyLCBmdXQyKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0Mi5jYW5jZWxsZWQoKSkKKyAgICAgICAgcmVzID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF90YXNrX2lnbm9yaW5nKHNlbGYpOgorICAgICAgICBmdXQxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgZnV0MyA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQxCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQyCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICByZXMgPSB5aWVsZCBmcm9tIGZ1dDMKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHRhc2soKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDEpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICBmdXQxLnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fZnV0X3dhaXRlciwgZnV0MikgICMgV2hpdGUtYm94IHRlc3QuCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dDIuY2FuY2VsbGVkKCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKHQuX2Z1dF93YWl0ZXIsIGZ1dDMpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICBmdXQzLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dDMuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9jdXJyZW50X3Rhc2soc2VsZik6CisgICAgICAgIGxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChsb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgdC5jYW5jZWwoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuX211c3RfY2FuY2VsKSAgIyBXaGl0ZS1ib3ggdGVzdC4KKyAgICAgICAgICAgICMgVGhlIHNsZWVwIHNob3VsZCBiZSBjYW5jZWxsZWQgaW1tZWRpYXRlbHkuCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMTAwLCBsb29wPWxvb3ApCisgICAgICAgICAgICByZXR1cm4gMTIKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHRhc2soKSwgbG9vcD1sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IsIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCB0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5fbXVzdF9jYW5jZWwpICAjIFdoaXRlLWJveCB0ZXN0LgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHQuY2FuY2VsKCkpCisKKyAgICBkZWYgdGVzdF9zdG9wX3doaWxlX3J1bl9pbl9jb21wbGV0ZShzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjIsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4xCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMywgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIHggPSAwCisgICAgICAgIHdhaXRlcnMgPSBbXQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgdGFzaygpOgorICAgICAgICAgICAgbm9ubG9jYWwgeAorICAgICAgICAgICAgd2hpbGUgeCA8IDEwOgorICAgICAgICAgICAgICAgIHdhaXRlcnMuYXBwZW5kKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApKQorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyc1stMV0KKyAgICAgICAgICAgICAgICB4ICs9IDEKKyAgICAgICAgICAgICAgICBpZiB4ID09IDI6CisgICAgICAgICAgICAgICAgICAgIGxvb3Auc3RvcCgpCisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh0YXNrKCksIGxvb3A9bG9vcCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnRXZlbnQgbG9vcCBzdG9wcGVkIGJlZm9yZSBGdXR1cmUgY29tcGxldGVkLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjMsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgY2xvc2UgZ2VuZXJhdG9ycworICAgICAgICBmb3IgdyBpbiB3YWl0ZXJzOgorICAgICAgICAgICAgdy5jbG9zZSgpCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgbG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHQpCisKKyAgICBkZWYgdGVzdF93YWl0X2ZvcihzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4yLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGZvb19ydW5uaW5nID0gTm9uZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBub25sb2NhbCBmb29fcnVubmluZworICAgICAgICAgICAgZm9vX3J1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMiwgbG9vcD1sb29wKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmb29fcnVubmluZyA9IEZhbHNlCisgICAgICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICAgICAgZnV0ID0gYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlRpbWVvdXRFcnJvcik6CisgICAgICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXRfZm9yKGZ1dCwgMC4xLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmRvbmUoKSkKKyAgICAgICAgIyBpdCBzaG91bGQgaGF2ZSBiZWVuIGNhbmNlbGxlZCBkdWUgdG8gdGhlIHRpbWVvdXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYW5jZWxsZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvb19ydW5uaW5nLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX2Jsb2NraW5nKHNlbGYpOgorICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHJldHVybiAnZG9uZScKKworICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXRfZm9yKGNvcm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICdkb25lJykKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX3dpdGhfZ2xvYmFsX2xvb3Aoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMiwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjIsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiAnZG9uZScKKworICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZ1dCA9IGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlRpbWVvdXRFcnJvcik6CisgICAgICAgICAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0X2ZvcihmdXQsIDAuMDEpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgbG9vcC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmNhbmNlbGxlZCgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF9mb3JfcmFjZV9jb25kaXRpb24oc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgeWllbGQgMC4xCisgICAgICAgICAgICB5aWVsZCAwLjEKKyAgICAgICAgICAgIHlpZWxkIDAuMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9bG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8ud2FpdF9mb3IoZnV0LCB0aW1lb3V0PTAuMiwgbG9vcD1sb29wKQorICAgICAgICBsb29wLmNhbGxfbGF0ZXIoMC4xLCBmdXQuc2V0X3Jlc3VsdCwgIm9rIikKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICJvayIpCisKKyAgICBkZWYgdGVzdF93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xNQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KFtiLCBhXSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2EsIGJdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIERvaW5nIGl0IGFnYWluIHNob3VsZCB0YWtlIG5vIHRpbWUgYW5kIGV4ZXJjaXNlIGEgZGlmZmVyZW50IHBhdGguCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjE1LCBsb29wLnRpbWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIDQyKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aXRoX2dsb2JhbF9sb29wKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjAxLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMTUsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxNQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjAxLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjAxNSwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZm9vKCk6CisgICAgICAgICAgICBkb25lLCBwZW5kaW5nID0geWllbGQgZnJvbSBhc3luY2lvLndhaXQoW2IsIGFdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2EsIGJdKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGVuZGluZywgc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gNDIKKworICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKGxvb3ApCisgICAgICAgIHJlcyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3dhaXRfZHVwbGljYXRlX2Nvcm91dGluZXMoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybyhzKToKKyAgICAgICAgICAgIHJldHVybiBzCisgICAgICAgIGMgPSBjb3JvKCd0ZXN0JykKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKAorICAgICAgICAgICAgYXN5bmNpby53YWl0KFtjLCBjLCBjb3JvKCdzcGFtJyldLCBsb29wPXNlbGYubG9vcCksCisgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBkb25lLCBwZW5kaW5nID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocGVuZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZi5yZXN1bHQoKSBmb3IgZiBpbiBkb25lKSwgeyd0ZXN0JywgJ3NwYW0nfSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZXJyb3JzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsCisgICAgICAgICAgICBhc3luY2lvLndhaXQoc2V0KCksIGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICAjIC0xIGlzIGFuIGludmFsaWQgcmV0dXJuX3doZW4gdmFsdWUKKyAgICAgICAgc2xlZXBfY29ybyA9IGFzeW5jaW8uc2xlZXAoMTAuMCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHdhaXRfY29ybyA9IGFzeW5jaW8ud2FpdChbc2xlZXBfY29yb10sIHJldHVybl93aGVuPS0xLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgd2FpdF9jb3JvKQorCisgICAgICAgIHNsZWVwX2Nvcm8uY2xvc2UoKQorCisgICAgZGVmIHRlc3Rfd2FpdF9maXJzdF9jb21wbGV0ZWQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMTAuMCwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorICAgICAgICBiID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soCisgICAgICAgICAgICBhc3luY2lvLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj1hc3luY2lvLkZJUlNUX0NPTVBMRVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApLAorICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtifSwgZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YX0sIHBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYi5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfcmVhbGx5X2RvbmUoc2VsZik6CisgICAgICAgICMgdGhlcmUgaXMgcG9zc2liaWxpdHkgdGhhdCBzb21lIHRhc2tzIGluIHRoZSBwZW5kaW5nIGxpc3QKKyAgICAgICAgIyBiZWNhbWUgZG9uZSBidXQgdGhlaXIgY2FsbGJhY2tzIGhhdmVuJ3QgYWxsIGJlZW4gY2FsbGVkIHlldAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzEoKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvMigpOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgYSA9IGFzeW5jaW8uVGFzayhjb3JvMSgpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhjb3JvMigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzaygKKyAgICAgICAgICAgIGFzeW5jaW8ud2FpdChbYiwgYV0sIHJldHVybl93aGVuPWFzeW5jaW8uRklSU1RfQ09NUExFVEVELAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKSwKKyAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoe2EsIGJ9LCBkb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYS5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGEucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoYi5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3dhaXRfZmlyc3RfZXhjZXB0aW9uKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgxMC4wLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMAorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgICMgZmlyc3RfZXhjZXB0aW9uLCB0YXNrIGFscmVhZHkgaGFzIGV4Y2VwdGlvbgorICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMTAuMCwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZXhjKCk6CisgICAgICAgICAgICByYWlzZSBaZXJvRGl2aXNpb25FcnJvcignZXJyJykKKworICAgICAgICBiID0gYXN5bmNpby5UYXNrKGV4YygpLCBsb29wPWxvb3ApCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soCisgICAgICAgICAgICBhc3luY2lvLndhaXQoW2IsIGFdLCByZXR1cm5fd2hlbj1hc3luY2lvLkZJUlNUX0VYQ0VQVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPWxvb3ApLAorICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtifSwgZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YX0sIHBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMCwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF9maXJzdF9leGNlcHRpb25faW5fd2FpdChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgIyBmaXJzdF9leGNlcHRpb24sIGV4Y2VwdGlvbiBkdXJpbmcgd2FpdGluZworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMTAuMCwgbG9vcD1sb29wKSwgbG9vcD1sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZXhjKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wMSwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ2VycicpCisKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhleGMoKSwgbG9vcD1sb29wKQorICAgICAgICB0YXNrID0gYXN5bmNpby53YWl0KFtiLCBhXSwgcmV0dXJuX3doZW49YXN5bmNpby5GSVJTVF9FWENFUFRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1sb29wKQorCisgICAgICAgIGRvbmUsIHBlbmRpbmcgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHtifSwgZG9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh7YX0sIHBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wMSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgIyBtb3ZlIGZvcndhcmQgdG8gY2xvc2UgZ2VuZXJhdG9yCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDEwKQorICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLndhaXQoW2EsIGJdLCBsb29wPWxvb3ApKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aXRoX2V4Y2VwdGlvbihzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMTUKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4xNSwgbG9vcD1sb29wKQorICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IoJ3JlYWxseScpCisKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhzbGVlcGVyKCksIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KFtiLCBhXSwgbG9vcD1sb29wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZG9uZSksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldCgpKQorICAgICAgICAgICAgZXJyb3JzID0gc2V0KGYgZm9yIGYgaW4gZG9uZSBpZiBmLmV4Y2VwdGlvbigpIGlzIG5vdCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZXJyb3JzKSwgMSkKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3Rfd2FpdF93aXRoX3RpbWVvdXQoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjExLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xMQorCisgICAgICAgIGxvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoZ2VuKQorCisgICAgICAgIGEgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjEsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uVGFzayhhc3luY2lvLnNsZWVwKDAuMTUsIGxvb3A9bG9vcCksIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgZG9uZSwgcGVuZGluZyA9IHlpZWxkIGZyb20gYXN5bmNpby53YWl0KFtiLCBhXSwgdGltZW91dD0wLjExLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZG9uZSwgc2V0KFthXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBlbmRpbmcsIHNldChbYl0pKQorCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uVGFzayhmb28oKSwgbG9vcD1sb29wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjExLCBsb29wLnRpbWUoKSkKKworICAgICAgICAjIG1vdmUgZm9yd2FyZCB0byBjbG9zZSBnZW5lcmF0b3IKKyAgICAgICAgbG9vcC5hZHZhbmNlX3RpbWUoMTApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8ud2FpdChbYSwgYl0sIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF93YWl0X2NvbmN1cnJlbnRfY29tcGxldGUoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMSwgd2hlbikKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZCAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjEKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMC4xLCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisgICAgICAgIGIgPSBhc3luY2lvLlRhc2soYXN5bmNpby5zbGVlcCgwLjE1LCBsb29wPWxvb3ApLCBsb29wPWxvb3ApCisKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKAorICAgICAgICAgICAgYXN5bmNpby53YWl0KFtiLCBhXSwgdGltZW91dD0wLjEsIGxvb3A9bG9vcCkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb25lLCBzZXQoW2FdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZW5kaW5nLCBzZXQoW2JdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwLjAxCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisgICAgICAgICMgZGlzYWJsZSAic2xvdyBjYWxsYmFjayIgd2FybmluZworICAgICAgICBsb29wLnNsb3dfY2FsbGJhY2tfZHVyYXRpb24gPSAxLjAKKyAgICAgICAgY29tcGxldGVkID0gc2V0KCkKKyAgICAgICAgdGltZV9zaGlmdGVkID0gRmFsc2UKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNsZWVwZXIoZHQsIHgpOgorICAgICAgICAgICAgbm9ubG9jYWwgdGltZV9zaGlmdGVkCisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoZHQsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIGNvbXBsZXRlZC5hZGQoeCkKKyAgICAgICAgICAgIGlmIG5vdCB0aW1lX3NoaWZ0ZWQgYW5kICdhJyBpbiBjb21wbGV0ZWQgYW5kICdiJyBpbiBjb21wbGV0ZWQ6CisgICAgICAgICAgICAgICAgdGltZV9zaGlmdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDAuMTQpCisgICAgICAgICAgICByZXR1cm4geAorCisgICAgICAgIGEgPSBzbGVlcGVyKDAuMDEsICdhJykKKyAgICAgICAgYiA9IHNsZWVwZXIoMC4wMSwgJ2InKQorICAgICAgICBjID0gc2xlZXBlcigwLjE1LCAnYycpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiBhc3luY2lvLmFzX2NvbXBsZXRlZChbYiwgYywgYV0sIGxvb3A9bG9vcCk6CisgICAgICAgICAgICAgICAgdmFsdWVzLmFwcGVuZCgoeWllbGQgZnJvbSBmKSkKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZXMKKworICAgICAgICByZXMgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xNSwgbG9vcC50aW1lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnYScgaW4gcmVzWzoyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdiJyBpbiByZXNbOjJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc1syXSwgJ2MnKQorCisgICAgICAgICMgRG9pbmcgaXQgYWdhaW4gc2hvdWxkIHRha2Ugbm8gdGltZSBhbmQgZXhlcmNpc2UgYSBkaWZmZXJlbnQgcGF0aC4KKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTUsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfYXNfY29tcGxldGVkX3dpdGhfdGltZW91dChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMAorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uc2xlZXAoMC4xLCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uc2xlZXAoMC4xNSwgJ2InLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHZhbHVlcyA9IFtdCisgICAgICAgICAgICBmb3IgZiBpbiBhc3luY2lvLmFzX2NvbXBsZXRlZChbYSwgYl0sIHRpbWVvdXQ9MC4xMiwgbG9vcD1sb29wKToKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZXM6CisgICAgICAgICAgICAgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDAuMDIpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB2ID0geWllbGQgZnJvbSBmCisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoKDEsIHYpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLlRpbWVvdXRFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoKDIsIGV4YykpCisgICAgICAgICAgICByZXR1cm4gdmFsdWVzCisKKyAgICAgICAgcmVzID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby5UYXNrKGZvbygpLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXMpLCAyLCByZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzWzBdLCAoMSwgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNbMV1bMF0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXNbMV1bMV0sIGFzeW5jaW8uVGltZW91dEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMTIsIGxvb3AudGltZSgpKQorCisgICAgICAgICMgbW92ZSBmb3J3YXJkIHRvIGNsb3NlIGdlbmVyYXRvcgorICAgICAgICBsb29wLmFkdmFuY2VfdGltZSgxMCkKKyAgICAgICAgbG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KFthLCBiXSwgbG9vcD1sb29wKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF93aXRoX3VudXNlZF90aW1lb3V0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICB5aWVsZCAwCisgICAgICAgICAgICB5aWVsZCAwLjAxCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgYSA9IGFzeW5jaW8uc2xlZXAoMC4wMSwgJ2EnLCBsb29wPWxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIGZvciBmIGluIGFzeW5jaW8uYXNfY29tcGxldGVkKFthXSwgdGltZW91dD0xLCBsb29wPWxvb3ApOgorICAgICAgICAgICAgICAgIHYgPSB5aWVsZCBmcm9tIGYKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYsICdhJykKKworICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShhc3luY2lvLlRhc2soZm9vKCksIGxvb3A9bG9vcCkpCisKKyAgICBkZWYgdGVzdF9hc19jb21wbGV0ZWRfcmV2ZXJzZV93YWl0KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHlpZWxkIDAKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5zbGVlcCgwLjA1LCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uc2xlZXAoMC4xMCwgJ2InLCBsb29wPWxvb3ApCisgICAgICAgIGZzID0ge2EsIGJ9CisgICAgICAgIGZ1dHMgPSBsaXN0KGFzeW5jaW8uYXNfY29tcGxldGVkKGZzLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmdXRzKSwgMikKKworICAgICAgICB4ID0gbG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0c1sxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNSwgbG9vcC50aW1lKCkpCisgICAgICAgIGxvb3AuYWR2YW5jZV90aW1lKDAuMDUpCisgICAgICAgIHkgPSBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXRzWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHksICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEwLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF9jb25jdXJyZW50KHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjA1LCB3aGVuKQorICAgICAgICAgICAgd2hlbiA9IHlpZWxkIDAKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4wNSwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAuMDUKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICBhID0gYXN5bmNpby5zbGVlcCgwLjA1LCAnYScsIGxvb3A9bG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uc2xlZXAoMC4wNSwgJ2InLCBsb29wPWxvb3ApCisgICAgICAgIGZzID0ge2EsIGJ9CisgICAgICAgIGZ1dHMgPSBsaXN0KGFzeW5jaW8uYXNfY29tcGxldGVkKGZzLCBsb29wPWxvb3ApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihmdXRzKSwgMikKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby53YWl0KGZ1dHMsIGxvb3A9bG9vcCkKKyAgICAgICAgZG9uZSwgcGVuZGluZyA9IGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHdhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZi5yZXN1bHQoKSBmb3IgZiBpbiBkb25lKSwgeydhJywgJ2InfSkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF9kdXBsaWNhdGVfY29yb3V0aW5lcyhzZWxmKToKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8ocyk6CisgICAgICAgICAgICByZXR1cm4gcworCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgcnVubmVyKCk6CisgICAgICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICAgICAgYyA9IGNvcm8oJ2hhbScpCisgICAgICAgICAgICBmb3IgZiBpbiBhc3luY2lvLmFzX2NvbXBsZXRlZChbYywgYywgY29ybygnc3BhbScpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9c2VsZi5sb29wKToKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCh5aWVsZCBmcm9tIGYpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uVGFzayhydW5uZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0KQorICAgICAgICByZXN1bHQgPSBmdXQucmVzdWx0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocmVzdWx0KSwgeydoYW0nLCAnc3BhbSd9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQpLCAyKQorCisgICAgZGVmIHRlc3Rfc2xlZXAoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDAuMDUsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMC4wNQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwLjA1CisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKGR0LCBhcmcpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKGR0LzIsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJlcyA9IHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcChkdC8yLCBhcmcsIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIHJldHVybiByZXMKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKHNsZWVwZXIoMC4xLCAneWVhaCcpLCBsb29wPWxvb3ApCisgICAgICAgIGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlc3VsdCgpLCAneWVhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMC4xLCBsb29wLnRpbWUoKSkKKworICAgIGRlZiB0ZXN0X3NsZWVwX2NhbmNlbChzZWxmKToKKworICAgICAgICBkZWYgZ2VuKCk6CisgICAgICAgICAgICB3aGVuID0geWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoMTAuMCwgd2hlbikKKyAgICAgICAgICAgIHlpZWxkIDAKKworICAgICAgICBsb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKGdlbikKKworICAgICAgICB0ID0gYXN5bmNpby5UYXNrKGFzeW5jaW8uc2xlZXAoMTAuMCwgJ3llYWgnLCBsb29wPWxvb3ApLAorICAgICAgICAgICAgICAgICAgICAgICAgIGxvb3A9bG9vcCkKKworICAgICAgICBoYW5kbGUgPSBOb25lCisgICAgICAgIG9yaWdfY2FsbF9sYXRlciA9IGxvb3AuY2FsbF9sYXRlcgorCisgICAgICAgIGRlZiBjYWxsX2xhdGVyKGRlbGF5LCBjYWxsYmFjaywgKmFyZ3MpOgorICAgICAgICAgICAgbm9ubG9jYWwgaGFuZGxlCisgICAgICAgICAgICBoYW5kbGUgPSBvcmlnX2NhbGxfbGF0ZXIoZGVsYXksIGNhbGxiYWNrLCAqYXJncykKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGUKKworICAgICAgICBsb29wLmNhbGxfbGF0ZXIgPSBjYWxsX2xhdGVyCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkobG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhbmRsZS5fY2FuY2VsbGVkKQorCisgICAgICAgIHQuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFuZGxlLl9jYW5jZWxsZWQpCisKKyAgICBkZWYgdGVzdF90YXNrX2NhbmNlbF9zbGVlcGluZ190YXNrKHNlbGYpOgorCisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHdoZW4gPSB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIHdoZW4pCisgICAgICAgICAgICB3aGVuID0geWllbGQgMAorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCg1MDAwLCB3aGVuKQorICAgICAgICAgICAgeWllbGQgMC4xCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcChkdCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoZHQsIGxvb3A9bG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGRvaXQoKToKKyAgICAgICAgICAgIHNsZWVwZXIgPSBhc3luY2lvLlRhc2soc2xlZXAoNTAwMCksIGxvb3A9bG9vcCkKKyAgICAgICAgICAgIGxvb3AuY2FsbF9sYXRlcigwLjEsIHNsZWVwZXIuY2FuY2VsKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gc2xlZXBlcgorICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmV0dXJuICdjYW5jZWxsZWQnCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAnc2xlcHQgaW4nCisKKyAgICAgICAgZG9lciA9IGRvaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGRvZXIpLCAnY2FuY2VsbGVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbCgwLjEsIGxvb3AudGltZSgpKQorCisgICAgZGVmIHRlc3RfdGFza19jYW5jZWxfd2FpdGVyX2Z1dHVyZShzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dAorCisgICAgICAgIHRhc2sgPSBhc3luY2lvLlRhc2soY29ybygpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGFzay5fZnV0X3dhaXRlciwgZnV0KQorCisgICAgICAgIHRhc2suY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgYXN5bmNpby5DYW5jZWxsZWRFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgdGFzaykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodGFzay5fZnV0X3dhaXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3N0ZXBfaW5fY29tcGxldGVkX3Rhc2soc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXVjaCgpOgorICAgICAgICAgICAgcmV0dXJuICdrbycKKworICAgICAgICBnZW4gPSBub3RtdWNoKCkKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayhnZW4sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0YXNrLnNldF9yZXN1bHQoJ29rJykKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgdGFzay5fc3RlcCkKKyAgICAgICAgZ2VuLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3N0ZXBfcmVzdWx0KHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11Y2goKToKKyAgICAgICAgICAgIHlpZWxkIE5vbmUKKyAgICAgICAgICAgIHlpZWxkIDEKKyAgICAgICAgICAgIHJldHVybiAna28nCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIG5vdG11Y2goKSkKKworICAgIGRlZiB0ZXN0X3N0ZXBfcmVzdWx0X2Z1dHVyZShzZWxmKToKKyAgICAgICAgIyBJZiBjb3JvdXRpbmUgcmV0dXJucyBmdXR1cmUsIHRhc2sgd2FpdHMgb24gdGhpcyBmdXR1cmUuCisKKyAgICAgICAgY2xhc3MgRnV0KGFzeW5jaW8uRnV0dXJlKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICBzZWxmLmNiX2FkZGVkID0gRmFsc2UKKyAgICAgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzLCAqKmt3ZHMpCisKKyAgICAgICAgICAgIGRlZiBhZGRfZG9uZV9jYWxsYmFjayhzZWxmLCBmbik6CisgICAgICAgICAgICAgICAgc2VsZi5jYl9hZGRlZCA9IFRydWUKKyAgICAgICAgICAgICAgICBzdXBlcigpLmFkZF9kb25lX2NhbGxiYWNrKGZuKQorCisgICAgICAgIGZ1dCA9IEZ1dChsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcmVzdWx0ID0gTm9uZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICBub25sb2NhbCByZXN1bHQKKyAgICAgICAgICAgIHJlc3VsdCA9IHlpZWxkIGZyb20gZnV0CisKKyAgICAgICAgdCA9IGFzeW5jaW8uVGFzayh3YWl0X2Zvcl9mdXR1cmUoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnV0LmNiX2FkZGVkKQorCisgICAgICAgIHJlcyA9IG9iamVjdCgpCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KHJlcykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVzLCByZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodC5yZXN1bHQoKSkKKworICAgIGRlZiB0ZXN0X3N0ZXBfd2l0aF9iYXNlZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG5vdG11dGNoKCk6CisgICAgICAgICAgICByYWlzZSBCYXNlRXhjZXB0aW9uKCkKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKG5vdG11dGNoKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0YXNrLl9zdGVwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRhc2suZXhjZXB0aW9uKCksIEJhc2VFeGNlcHRpb24pCisKKyAgICBkZWYgdGVzdF9iYXNlZXhjZXB0aW9uX2R1cmluZ19jYW5jZWwoc2VsZik6CisKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgd2hlbiA9IHlpZWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKDEwLjAsIHdoZW4pCisgICAgICAgICAgICB5aWVsZCAwCisKKyAgICAgICAgbG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcChnZW4pCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBzbGVlcGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMTAsIGxvb3A9bG9vcCkKKworICAgICAgICBiYXNlX2V4YyA9IEJhc2VFeGNlcHRpb24oKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgbm90bXV0Y2goKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIHNsZWVwZXIoKQorICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgYmFzZV9leGMKKworICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKG5vdG11dGNoKCksIGxvb3A9bG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShsb29wKQorCisgICAgICAgIHRhc2suY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmRvbmUoKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCYXNlRXhjZXB0aW9uLCB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5LCBsb29wKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0YXNrLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHRhc2suZXhjZXB0aW9uKCksIGJhc2VfZXhjKQorCisgICAgZGVmIHRlc3RfaXNjb3JvdXRpbmVmdW5jdGlvbihzZWxmKToKKyAgICAgICAgZGVmIGZuKCk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3luY2lvLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4pKQorCisgICAgICAgIGRlZiBmbjEoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXN5bmNpby5pc2Nvcm91dGluZWZ1bmN0aW9uKGZuMSkpCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmbjIoKToKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLmlzY29yb3V0aW5lZnVuY3Rpb24oZm4yKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3ZzX3lpZWxkX2Zyb20oc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgd2FpdF9mb3JfZnV0dXJlKCk6CisgICAgICAgICAgICB5aWVsZCBmdXQKKworICAgICAgICB0YXNrID0gd2FpdF9mb3JfZnV0dXJlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3ZzX3lpZWxkX2Zyb21fZ2VuZXJhdG9yKHNlbGYpOgorICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8oKToKKyAgICAgICAgICAgIHlpZWxkCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiB3YWl0X2Zvcl9mdXR1cmUoKToKKyAgICAgICAgICAgIGdlbiA9IGNvcm8oKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGdlbgorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBnZW4uY2xvc2UoKQorCisgICAgICAgIHRhc2sgPSB3YWl0X2Zvcl9mdXR1cmUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUsIHRhc2spCisKKyAgICBkZWYgdGVzdF9jb3JvdXRpbmVfbm9uX2dlbl9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBmdW5jKCk6CisgICAgICAgICAgICByZXR1cm4gJ3Rlc3QnCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uaXNjb3JvdXRpbmVmdW5jdGlvbihmdW5jKSkKKworICAgICAgICBjb3JvID0gZnVuYygpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLmlzY29yb3V0aW5lKGNvcm8pKQorCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsICd0ZXN0JykKKworICAgIGRlZiB0ZXN0X2Nvcm91dGluZV9ub25fZ2VuX2Z1bmN0aW9uX3JldHVybl9mdXR1cmUoc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZnVuYygpOgorICAgICAgICAgICAgcmV0dXJuIGZ1dAorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoJ3Rlc3QnKQorCisgICAgICAgIHQxID0gYXN5bmNpby5UYXNrKGZ1bmMoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHQyID0gYXN5bmNpby5UYXNrKGNvcm8oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHQyLnJlc3VsdCgpKQorCisgICAgZGVmIHRlc3RfY3VycmVudF90YXNrKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8obG9vcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPWxvb3ApIGlzIHRhc2spCisKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayhjb3JvKHNlbGYubG9vcCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKHRhc2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLmxvb3ApKQorCisgICAgZGVmIHRlc3RfY3VycmVudF90YXNrX3dpdGhfaW50ZXJsZWF2aW5nX3Rhc2tzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9c2VsZi5sb29wKSkKKworICAgICAgICBmdXQxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGNvcm8xKGxvb3ApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1sb29wKSBpcyB0YXNrMSkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0MQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1sb29wKSBpcyB0YXNrMSkKKyAgICAgICAgICAgIGZ1dDIuc2V0X3Jlc3VsdChUcnVlKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybzIobG9vcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5UYXNrLmN1cnJlbnRfdGFzayhsb29wPWxvb3ApIGlzIHRhc2syKQorICAgICAgICAgICAgZnV0MS5zZXRfcmVzdWx0KFRydWUpCisgICAgICAgICAgICB5aWVsZCBmcm9tIGZ1dDIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc3luY2lvLlRhc2suY3VycmVudF90YXNrKGxvb3A9bG9vcCkgaXMgdGFzazIpCisKKyAgICAgICAgdGFzazEgPSBhc3luY2lvLlRhc2soY29ybzEoc2VsZi5sb29wKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRhc2syID0gYXN5bmNpby5UYXNrKGNvcm8yKHNlbGYubG9vcCksIGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoYXN5bmNpby53YWl0KCh0YXNrMSwgdGFzazIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGFzeW5jaW8uVGFzay5jdXJyZW50X3Rhc2sobG9vcD1zZWxmLmxvb3ApKQorCisgICAgIyBTb21lIHRob3JvdWdoIHRlc3RzIGZvciBjYW5jZWxsYXRpb24gcHJvcGFnYXRpb24gdGhyb3VnaAorICAgICMgY29yb3V0aW5lcywgdGFza3MgYW5kIHdhaXQoKS4KKworICAgIGRlZiB0ZXN0X3lpZWxkX2Z1dHVyZV9wYXNzZXNfY2FuY2VsKHNlbGYpOgorICAgICAgICAjIENhbmNlbGxpbmcgb3V0ZXIoKSBjYW5jZWxzIGlubmVyKCkgY2FuY2VscyB3YWl0ZXIuCisgICAgICAgIHByb29mID0gMAorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKCk6CisgICAgICAgICAgICBub25sb2NhbCBwcm9vZgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwcm9vZiArPSAxCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdnb3QgcGFzdCBzbGVlcCgpIGluIGlubmVyKCknKQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgb3V0ZXIoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHByb29mCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBpbm5lcigpCisgICAgICAgICAgICBleGNlcHQgYXN5bmNpby5DYW5jZWxsZWRFcnJvcjoKKyAgICAgICAgICAgICAgICBwcm9vZiArPSAxMDAgICMgRXhwZWN0IHRoaXMgcGF0aC4KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJvb2YgKz0gMTAKKworICAgICAgICBmID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvb2YsIDEwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdhaXRlci5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX3dhaXRfZG9lc19ub3Rfc2hpZWxkX2NhbmNlbChzZWxmKToKKyAgICAgICAgIyBDYW5jZWxsaW5nIG91dGVyKCkgbWFrZXMgd2FpdCgpIHJldHVybiBlYXJseSwgbGVhdmVzIGlubmVyKCkKKyAgICAgICAgIyBydW5uaW5nLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBwcm9vZiArPSAxCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIGQsIHAgPSB5aWVsZCBmcm9tIGFzeW5jaW8ud2FpdChbaW5uZXIoKV0sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcHJvb2YgKz0gMTAwCisKKyAgICAgICAgZiA9IGFzeW5jaW8uZW5zdXJlX2Z1dHVyZShvdXRlcigpLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIGYuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBhc3luY2lvLkNhbmNlbGxlZEVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLCBmKQorICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9vZiwgMSkKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9yZXN1bHQoc2VsZik6CisgICAgICAgIGlubmVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG91dGVyID0gYXN5bmNpby5zaGllbGQoaW5uZXIpCisgICAgICAgIGlubmVyLnNldF9yZXN1bHQoNDIpCisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUob3V0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIGlubmVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIG91dGVyID0gYXN5bmNpby5zaGllbGQoaW5uZXIpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IoJ2V4cGVjdGVkJykKKyAgICAgICAgaW5uZXIuc2V0X2V4Y2VwdGlvbihleGMpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzKG91dGVyLmV4Y2VwdGlvbigpLCBleGMpCisKKyAgICBkZWYgdGVzdF9zaGllbGRfY2FuY2VsKHNlbGYpOgorICAgICAgICBpbm5lciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IGFzeW5jaW8uc2hpZWxkKGlubmVyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgaW5uZXIuY2FuY2VsKCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRlci5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9zaG9ydGN1dChzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGZ1dC5zZXRfcmVzdWx0KDQyKQorICAgICAgICByZXMgPSBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGFzeW5jaW8uc2hpZWxkKGZ1dCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCA0MikKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9lZmZlY3Qoc2VsZik6CisgICAgICAgICMgQ2FuY2VsbGluZyBvdXRlcigpIGRvZXMgbm90IGFmZmVjdCBpbm5lcigpLgorICAgICAgICBwcm9vZiA9IDAKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBwcm9vZiArPSAxCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zaGllbGQoaW5uZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBwcm9vZiArPSAxMDAKKworICAgICAgICBmID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgZi5jYW5jZWwoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmKQorICAgICAgICB3YWl0ZXIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9vZiwgMSkKKworICAgIGRlZiB0ZXN0X3NoaWVsZF9nYXRoZXIoc2VsZik6CisgICAgICAgIGNoaWxkMSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjaGlsZDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50ID0gYXN5bmNpby5nYXRoZXIoY2hpbGQxLCBjaGlsZDIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBvdXRlciA9IGFzeW5jaW8uc2hpZWxkKHBhcmVudCwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBvdXRlci5jYW5jZWwoKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dGVyLmNhbmNlbGxlZCgpKQorICAgICAgICBjaGlsZDEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBjaGlsZDIuc2V0X3Jlc3VsdCgyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJlbnQucmVzdWx0KCksIFsxLCAyXSkKKworICAgIGRlZiB0ZXN0X2dhdGhlcl9zaGllbGQoc2VsZik6CisgICAgICAgIGNoaWxkMSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICBjaGlsZDIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgaW5uZXIxID0gYXN5bmNpby5zaGllbGQoY2hpbGQxLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgaW5uZXIyID0gYXN5bmNpby5zaGllbGQoY2hpbGQyLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50ID0gYXN5bmNpby5nYXRoZXIoaW5uZXIxLCBpbm5lcjIsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgcGFyZW50LmNhbmNlbCgpCisgICAgICAgICMgVGhpcyBzaG91bGQgY2FuY2VsIGlubmVyMSBhbmQgaW5uZXIyIGJ1dCBib3QgY2hpbGQxIGFuZCBjaGlsZDIuCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGFyZW50LmV4Y2VwdGlvbigpLCBhc3luY2lvLkNhbmNlbGxlZEVycm9yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5uZXIxLmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5uZXIyLmNhbmNlbGxlZCgpKQorICAgICAgICBjaGlsZDEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBjaGlsZDIuc2V0X3Jlc3VsdCgyKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2FzX2NvbXBsZXRlZF9pbnZhbGlkX2FyZ3Moc2VsZik6CisgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorCisgICAgICAgICMgYXNfY29tcGxldGVkKCkgZXhwZWN0cyBhIGxpc3Qgb2YgZnV0dXJlcywgbm90IGEgZnV0dXJlIGluc3RhbmNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwKKyAgICAgICAgICAgIGFzeW5jaW8uYXNfY29tcGxldGVkKGZ1dCwgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBjb3JvID0gY29yb3V0aW5lX2Z1bmN0aW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgYXN5bmNpby5hc19jb21wbGV0ZWQoY29ybywgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBjb3JvLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dhaXRfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICBmdXQgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKworICAgICAgICAjIHdhaXQoKSBleHBlY3RzIGEgbGlzdCBvZiBmdXR1cmVzLCBub3QgYSBmdXR1cmUgaW5zdGFuY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgYXN5bmNpby53YWl0KGZ1dCwgbG9vcD1zZWxmLmxvb3ApKQorICAgICAgICBjb3JvID0gY29yb3V0aW5lX2Z1bmN0aW9uKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgYXN5bmNpby53YWl0KGNvcm8sIGxvb3A9c2VsZi5sb29wKSkKKyAgICAgICAgY29yby5jbG9zZSgpCisKKyAgICAgICAgIyB3YWl0KCkgZXhwZWN0cyBhdCBsZWFzdCBhIGZ1dHVyZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlLAorICAgICAgICAgICAgYXN5bmNpby53YWl0KFtdLCBsb29wPXNlbGYubG9vcCkpCisKKyAgICBkZWYgdGVzdF9jb3Jvd3JhcHBlcl9tb2Nrc19nZW5lcmF0b3Ioc2VsZik6CisKKyAgICAgICAgZGVmIGNoZWNrKCk6CisgICAgICAgICAgICAjIEEgZnVuY3Rpb24gdGhhdCBhc3NlcnRzIHZhcmlvdXMgdGhpbmdzLgorICAgICAgICAgICAgIyBDYWxsZWQgdHdpY2UsIHdpdGggZGlmZmVyZW50IGRlYnVnIGZsYWcgdmFsdWVzLgorCisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICAgICAgIyBUaGUgYWN0dWFsIGNvcm91dGluZS4KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2VuLmdpX3J1bm5pbmcpCisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKworICAgICAgICAgICAgIyBBIGNvbXBsZXRlZCBGdXR1cmUgdXNlZCB0byBydW4gdGhlIGNvcm91dGluZS4KKyAgICAgICAgICAgIGZ1dCA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKworICAgICAgICAgICAgIyBDYWxsIHRoZSBjb3JvdXRpbmUuCisgICAgICAgICAgICBnZW4gPSBjb3JvKCkKKworICAgICAgICAgICAgIyBDaGVjayBzb21lIHByb3BlcnRpZXMuCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN5bmNpby5pc2Nvcm91dGluZShnZW4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGdlbi5naV9mcmFtZSwgdHlwZXMuRnJhbWVUeXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnZW4uZ2lfcnVubmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShnZW4uZ2lfY29kZSwgdHlwZXMuQ29kZVR5cGUpCisKKyAgICAgICAgICAgICMgUnVuIGl0LgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShnZW4pCisKKyAgICAgICAgICAgICMgVGhlIGZyYW1lIHNob3VsZCBoYXZlIGNoYW5nZWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShnZW4uZ2lfZnJhbWUpCisKKyAgICAgICAgIyBUZXN0IHdpdGggZGVidWcgZmxhZyBjbGVhcmVkLgorICAgICAgICB3aXRoIHNldF9jb3JvdXRpbmVfZGVidWcoRmFsc2UpOgorICAgICAgICAgICAgY2hlY2soKQorCisgICAgICAgICMgVGVzdCB3aXRoIGRlYnVnIGZsYWcgc2V0LgorICAgICAgICB3aXRoIHNldF9jb3JvdXRpbmVfZGVidWcoVHJ1ZSk6CisgICAgICAgICAgICBjaGVjaygpCisKKyAgICBkZWYgdGVzdF95aWVsZF9mcm9tX2Nvcm93cmFwcGVyKHNlbGYpOgorICAgICAgICB3aXRoIHNldF9jb3JvdXRpbmVfZGVidWcoVHJ1ZSk6CisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiB0MSgpOgorICAgICAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSB0MigpKQorCisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiB0MigpOgorICAgICAgICAgICAgICAgIGYgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICBhc3luY2lvLlRhc2sodDMoZiksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgICAgIHJldHVybiAoeWllbGQgZnJvbSBmKQorCisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiB0MyhmKToKKyAgICAgICAgICAgICAgICBmLnNldF9yZXN1bHQoKDEsIDIsIDMpKQorCisgICAgICAgICAgICB0YXNrID0gYXN5bmNpby5UYXNrKHQxKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgdmFsID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwsICgxLCAyLCAzKSkKKworICAgIGRlZiB0ZXN0X3lpZWxkX2Zyb21fY29yb3dyYXBwZXJfc2VuZChzZWxmKToKKyAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgYSA9IHlpZWxkCisgICAgICAgICAgICByZXR1cm4gYQorCisgICAgICAgIGRlZiBjYWxsKGFyZyk6CisgICAgICAgICAgICBjdyA9IGFzeW5jaW8uY29yb3V0aW5lcy5Db3JvV3JhcHBlcihmb28oKSkKKyAgICAgICAgICAgIGN3LnNlbmQoTm9uZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjdy5zZW5kKGFyZykKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgICAgICAgICAgICAgIHJldHVybiBleC5hcmdzWzBdCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCdTdG9wSXRlcmF0aW9uIHdhcyBleHBlY3RlZCcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxsKCgxLCAyKSksICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxsKCdzcGFtJyksICdzcGFtJykKKworICAgIGRlZiB0ZXN0X2Nvcm93cmFwcGVyX3dlYWtyZWYoc2VsZik6CisgICAgICAgIHdkID0gd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5KCkKKyAgICAgICAgZGVmIGZvbygpOiB5aWVsZCBmcm9tIFtdCisgICAgICAgIGN3ID0gYXN5bmNpby5jb3JvdXRpbmVzLkNvcm9XcmFwcGVyKGZvbygpKQorICAgICAgICB3ZFsnY3cnXSA9IGN3ICAjIFdvdWxkIGZhaWwgd2l0aG91dCBfX3dlYWtyZWZfXyBzbG90LgorICAgICAgICBjdy5nZW4gPSBOb25lICAjIFN1cHByZXNzIHdhcm5pbmcgZnJvbSBfX2RlbF9fLgorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoUFkzNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZCBweXRob24gMy40IG9yIGxhdGVyJykKKyAgICBkZWYgdGVzdF9sb2dfZGVzdHJveWVkX3BlbmRpbmdfdGFzayhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBraWxsX21lKGxvb3ApOgorICAgICAgICAgICAgZnV0dXJlID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXR1cmUKKyAgICAgICAgICAgICMgYXQgdGhpcyBwb2ludCwgdGhlIG9ubHkgcmVmZXJlbmNlIHRvIGtpbGxfbWUoKSB0YXNrIGlzCisgICAgICAgICAgICAjIHRoZSBUYXNrLl93YWtldXAoKSBtZXRob2QgaW4gZnV0dXJlLl9jYWxsYmFja3MKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiY29kZSBuZXZlciByZWFjaGVkIikKKworICAgICAgICBtb2NrX2hhbmRsZXIgPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisgICAgICAgIHNlbGYubG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIobW9ja19oYW5kbGVyKQorCisgICAgICAgICMgc2NoZWR1bGUgdGhlIHRhc2sKKyAgICAgICAgY29ybyA9IGtpbGxfbWUoc2VsZi5sb29wKQorICAgICAgICB0YXNrID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGNvcm8sIGxvb3A9c2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaW8uVGFzay5hbGxfdGFza3MobG9vcD1zZWxmLmxvb3ApLCB7dGFza30pCisKKyAgICAgICAgIyBleGVjdXRlIHRoZSB0YXNrIHNvIGl0IHdhaXRzIGZvciBmdXR1cmUKKyAgICAgICAgc2VsZi5sb29wLl9ydW5fb25jZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYubG9vcC5fcmVhZHkpLCAwKQorCisgICAgICAgICMgcmVtb3ZlIHRoZSBmdXR1cmUgdXNlZCBpbiBraWxsX21lKCksIGFuZCByZWZlcmVuY2VzIHRvIHRoZSB0YXNrCisgICAgICAgIGRlbCBjb3JvLmdpX2ZyYW1lLmZfbG9jYWxzWydmdXR1cmUnXQorICAgICAgICBjb3JvID0gTm9uZQorICAgICAgICBzb3VyY2VfdHJhY2ViYWNrID0gdGFzay5fc291cmNlX3RyYWNlYmFjaworICAgICAgICB0YXNrID0gTm9uZQorCisgICAgICAgICMgbm8gbW9yZSByZWZlcmVuY2UgdG8ga2lsbF9tZSgpIHRhc2s6IHRoZSB0YXNrIGlzIGRlc3Ryb3llZCBieSB0aGUgR0MKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzeW5jaW8uVGFzay5hbGxfdGFza3MobG9vcD1zZWxmLmxvb3ApLCBzZXQoKSkKKworICAgICAgICBtb2NrX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF93aXRoKHNlbGYubG9vcCwgeworICAgICAgICAgICAgJ21lc3NhZ2UnOiAnVGFzayB3YXMgZGVzdHJveWVkIGJ1dCBpdCBpcyBwZW5kaW5nIScsCisgICAgICAgICAgICAndGFzayc6IG1vY2suQU5ZLAorICAgICAgICAgICAgJ3NvdXJjZV90cmFjZWJhY2snOiBzb3VyY2VfdHJhY2ViYWNrLAorICAgICAgICB9KQorICAgICAgICBtb2NrX2hhbmRsZXIucmVzZXRfbW9jaygpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5jb3JvdXRpbmVzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfY29yb3V0aW5lX25ldmVyX3lpZWxkZWQoc2VsZiwgbV9sb2cpOgorICAgICAgICB3aXRoIHNldF9jb3JvdXRpbmVfZGVidWcoVHJ1ZSk6CisgICAgICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgICAgIGRlZiBjb3JvX25vb3AoKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgdGJfZmlsZW5hbWUgPSBfX2ZpbGVfXworICAgICAgICB0Yl9saW5lbm8gPSBzeXMuX2dldGZyYW1lKCkuZl9saW5lbm8gKyAyCisgICAgICAgICMgY3JlYXRlIGEgY29yb3V0aW5lIG9iamVjdCBidXQgZG9uJ3QgdXNlIGl0CisgICAgICAgIGNvcm9fbm9vcCgpCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fbG9nLmVycm9yLmNhbGxlZCkKKyAgICAgICAgbWVzc2FnZSA9IG1fbG9nLmVycm9yLmNhbGxfYXJnc1swXVswXQorICAgICAgICBmdW5jX2ZpbGVuYW1lLCBmdW5jX2xpbmVubyA9IHRlc3RfdXRpbHMuZ2V0X2Z1bmN0aW9uX3NvdXJjZShjb3JvX25vb3ApCisKKyAgICAgICAgcmVnZXggPSAocidePENvcm9XcmFwcGVyICVzXCg/XCk/IC4qIGF0ICVzOiVzLCAuKj4gJworICAgICAgICAgICAgICAgICAgICByJ3dhcyBuZXZlciB5aWVsZGVkIGZyb21cbicKKyAgICAgICAgICAgICAgICAgcidDb3JvdXRpbmUgb2JqZWN0IGNyZWF0ZWQgYXQgXChtb3N0IHJlY2VudCBjYWxsIGxhc3RcKTpcbicKKyAgICAgICAgICAgICAgICAgcicuKlxuJworICAgICAgICAgICAgICAgICByJyAgRmlsZSAiJXMiLCBsaW5lICVzLCBpbiB0ZXN0X2Nvcm91dGluZV9uZXZlcl95aWVsZGVkXG4nCisgICAgICAgICAgICAgICAgIHInICAgIGNvcm9fbm9vcFwoXCkkJworICAgICAgICAgICAgICAgICAlIChyZS5lc2NhcGUoY29yb19ub29wLl9fcXVhbG5hbWVfXyksCisgICAgICAgICAgICAgICAgICAgIHJlLmVzY2FwZShmdW5jX2ZpbGVuYW1lKSwgZnVuY19saW5lbm8sCisgICAgICAgICAgICAgICAgICAgIHJlLmVzY2FwZSh0Yl9maWxlbmFtZSksIHRiX2xpbmVubykpCisKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChtZXNzYWdlLCByZS5jb21waWxlKHJlZ2V4LCByZS5ET1RBTEwpKQorCisgICAgZGVmIHRlc3RfdGFza19zb3VyY2VfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3Auc2V0X2RlYnVnKFRydWUpCisKKyAgICAgICAgdGFzayA9IGFzeW5jaW8uVGFzayhjb3JvdXRpbmVfZnVuY3Rpb24oKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGxpbmVubyA9IHN5cy5fZ2V0ZnJhbWUoKS5mX2xpbmVubyAtIDEKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHRhc2suX3NvdXJjZV90cmFjZWJhY2ssIGxpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFzay5fc291cmNlX3RyYWNlYmFja1stMV1bOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChfX2ZpbGVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdF90YXNrX3NvdXJjZV90cmFjZWJhY2snKSkKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh0YXNrKQorCisgICAgZGVmIF90ZXN0X2NhbmNlbF93YWl0X2ZvcihzZWxmLCB0aW1lb3V0KToKKyAgICAgICAgbG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAobG9vcC5jbG9zZSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGJsb2NraW5nX2Nvcm91dGluZSgpOgorICAgICAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1sb29wKQorICAgICAgICAgICAgIyBCbG9jazogZnV0IHJlc3VsdCBpcyBuZXZlciBzZXQKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZnV0CisKKyAgICAgICAgdGFzayA9IGxvb3AuY3JlYXRlX3Rhc2soYmxvY2tpbmdfY29yb3V0aW5lKCkpCisKKyAgICAgICAgd2FpdCA9IGxvb3AuY3JlYXRlX3Rhc2soYXN5bmNpby53YWl0X2Zvcih0YXNrLCB0aW1lb3V0LCBsb29wPWxvb3ApKQorICAgICAgICBsb29wLmNhbGxfc29vbih3YWl0LmNhbmNlbCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wLnJ1bl91bnRpbF9jb21wbGV0ZSwgd2FpdCkKKworICAgICAgICAjIFB5dGhvbiBpc3N1ZSAjMjMyMTk6IGNhbmNlbGxpbmcgdGhlIHdhaXQgbXVzdCBhbHNvIGNhbmNlbCB0aGUgdGFzaworICAgICAgICBzZWxmLmFzc2VydFRydWUodGFzay5jYW5jZWxsZWQoKSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF9ibG9ja2luZ193YWl0X2ZvcihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jYW5jZWxfd2FpdF9mb3IoTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhbmNlbF93YWl0X2ZvcihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9jYW5jZWxfd2FpdF9mb3IoNjAuMCkKKworCitjbGFzcyBHYXRoZXJUZXN0c0Jhc2U6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub25lX2xvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLm90aGVyX2xvb3AgPSBzZWxmLm5ld190ZXN0X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYub25lX2xvb3AsIGNsZWFudXA9RmFsc2UpCisKKyAgICBkZWYgX3J1bl9sb29wKHNlbGYsIGxvb3ApOgorICAgICAgICB3aGlsZSBsb29wLl9yZWFkeToKKyAgICAgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkobG9vcCkKKworICAgIGRlZiBfY2hlY2tfc3VjY2VzcyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgIGEsIGIsIGMgPSBbYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKSBmb3IgaSBpbiByYW5nZSgzKV0KKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKnNlbGYud3JhcF9mdXR1cmVzKGEsIGIsIGMpLCAqKmt3YXJncykKKyAgICAgICAgY2IgPSB0ZXN0X3V0aWxzLk1vY2tDYWxsYmFjaygpCisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgYi5zZXRfcmVzdWx0KDEpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgyKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNiLmNhbGxlZCwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgYy5zZXRfcmVzdWx0KDMpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIGNiLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdXQucmVzdWx0KCksIFsyLCAxLCAzXSkKKworICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3N1Y2Nlc3MoKQorICAgICAgICBzZWxmLl9jaGVja19zdWNjZXNzKHJldHVybl9leGNlcHRpb25zPUZhbHNlKQorCisgICAgZGVmIHRlc3RfcmVzdWx0X2V4Y2VwdGlvbl9zdWNjZXNzKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19zdWNjZXNzKHJldHVybl9leGNlcHRpb25zPVRydWUpCisKKyAgICBkZWYgdGVzdF9vbmVfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBhLCBiLCBjLCBkLCBlID0gW2FzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoNSldCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKCpzZWxmLndyYXBfZnV0dXJlcyhhLCBiLCBjLCBkLCBlKSkKKyAgICAgICAgY2IgPSB0ZXN0X3V0aWxzLk1vY2tDYWxsYmFjaygpCisgICAgICAgIGZ1dC5hZGRfZG9uZV9jYWxsYmFjayhjYikKKyAgICAgICAgZXhjID0gWmVyb0RpdmlzaW9uRXJyb3IoKQorICAgICAgICBhLnNldF9yZXN1bHQoMSkKKyAgICAgICAgYi5zZXRfZXhjZXB0aW9uKGV4YykKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5kb25lKCkpCisgICAgICAgIGNiLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuZXhjZXB0aW9uKCksIGV4YykKKyAgICAgICAgIyBEb2VzIG5vdGhpbmcKKyAgICAgICAgYy5zZXRfcmVzdWx0KDMpCisgICAgICAgIGQuY2FuY2VsKCkKKyAgICAgICAgZS5zZXRfZXhjZXB0aW9uKFJ1bnRpbWVFcnJvcigpKQorICAgICAgICBlLmV4Y2VwdGlvbigpCisKKyAgICBkZWYgdGVzdF9yZXR1cm5fZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCA9IFthc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApIGZvciBpIGluIHJhbmdlKDQpXQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcigqc2VsZi53cmFwX2Z1dHVyZXMoYSwgYiwgYywgZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl9leGNlcHRpb25zPVRydWUpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGV4YyA9IFplcm9EaXZpc2lvbkVycm9yKCkKKyAgICAgICAgZXhjMiA9IFJ1bnRpbWVFcnJvcigpCisgICAgICAgIGIuc2V0X3Jlc3VsdCgxKQorICAgICAgICBjLnNldF9leGNlcHRpb24oZXhjKQorICAgICAgICBhLnNldF9yZXN1bHQoMykKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBkLnNldF9leGNlcHRpb24oZXhjMikKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5kb25lKCkpCisgICAgICAgIGNiLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZ1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdXQucmVzdWx0KCksIFszLCAxLCBleGMsIGV4YzJdKQorCisgICAgZGVmIHRlc3RfZW52X3Zhcl9kZWJ1ZyhzZWxmKToKKyAgICAgICAgYWlvX3BhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKGFzeW5jaW8uX19maWxlX18pKQorCisgICAgICAgIGNvZGUgPSAnXG4nLmpvaW4oKAorICAgICAgICAgICAgJ2ltcG9ydCBhc3luY2lvLmNvcm91dGluZXMnLAorICAgICAgICAgICAgJ3ByaW50KGFzeW5jaW8uY29yb3V0aW5lcy5fREVCVUcpJykpCisKKyAgICAgICAgIyBUZXN0IHdpdGggLUUgdG8gbm90IGZhaWwgaWYgdGhlIHVuaXQgdGVzdCB3YXMgcnVuIHdpdGgKKyAgICAgICAgIyBQWVRIT05BU1lOQ0lPREVCVUcgc2V0IHRvIGEgbm9uLWVtcHR5IHN0cmluZworICAgICAgICBzdHMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLUUnLCAnLWMnLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05QQVRIPWFpb19wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yc3RyaXAoKSwgYidGYWxzZScpCisKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OQVNZTkNJT0RFQlVHPScnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05QQVRIPWFpb19wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5yc3RyaXAoKSwgYidGYWxzZScpCisKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OQVNZTkNJT0RFQlVHPScxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OUEFUSD1haW9fcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInVHJ1ZScpCisKKyAgICAgICAgc3RzLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1FJywgJy1jJywgY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OQVNZTkNJT0RFQlVHPScxJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OUEFUSD1haW9fcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQucnN0cmlwKCksIGInRmFsc2UnKQorCisKK2NsYXNzIEZ1dHVyZUdhdGhlclRlc3RzKEdhdGhlclRlc3RzQmFzZSwgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgd3JhcF9mdXR1cmVzKHNlbGYsICpmdXR1cmVzKToKKyAgICAgICAgcmV0dXJuIGZ1dHVyZXMKKworICAgIGRlZiBfY2hlY2tfZW1wdHlfc2VxdWVuY2Uoc2VsZiwgc2VxX29yX2l0ZXIpOgorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChhc3luY2lvLnNldF9ldmVudF9sb29wLCBOb25lKQorICAgICAgICBmdXQgPSBhc3luY2lvLmdhdGhlcigqc2VxX29yX2l0ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmdXQsIGFzeW5jaW8uRnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZ1dC5kb25lKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbXSkKKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKnNlcV9vcl9pdGVyLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2VtcHR5X3NlcXVlbmNlKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZShbXSkKKyAgICAgICAgc2VsZi5fY2hlY2tfZW1wdHlfc2VxdWVuY2UoKCkpCisgICAgICAgIHNlbGYuX2NoZWNrX2VtcHR5X3NlcXVlbmNlKHNldCgpKQorICAgICAgICBzZWxmLl9jaGVja19lbXB0eV9zZXF1ZW5jZShpdGVyKCIiKSkKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX2hldGVyb2dlbm91c19mdXR1cmVzKHNlbGYpOgorICAgICAgICBmdXQxID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICBmdXQyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBhc3luY2lvLmdhdGhlcihmdXQxLCBmdXQyKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgYXN5bmNpby5nYXRoZXIoZnV0MSwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9ob21vZ2Vub3VzX2Z1dHVyZXMoc2VsZik6CisgICAgICAgIGNoaWxkcmVuID0gW2FzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vdGhlcl9sb29wKSBmb3IgaSBpbiByYW5nZSgzKV0KKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKmNoaWxkcmVuKQorICAgICAgICBzZWxmLmFzc2VydElzKGZ1dC5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLl9ydW5fbG9vcChzZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmRvbmUoKSkKKyAgICAgICAgZnV0ID0gYXN5bmNpby5nYXRoZXIoKmNoaWxkcmVuLCBsb29wPXNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhmdXQuX2xvb3AsIHNlbGYub3RoZXJfbG9vcCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5kb25lKCkpCisKKyAgICBkZWYgdGVzdF9vbmVfY2FuY2VsbGF0aW9uKHNlbGYpOgorICAgICAgICBhLCBiLCBjLCBkLCBlID0gW2FzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkgZm9yIGkgaW4gcmFuZ2UoNSldCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKGEsIGIsIGMsIGQsIGUpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICBiLmNhbmNlbCgpCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQuZG9uZSgpKQorICAgICAgICBjYi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnV0LmNhbmNlbGxlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZnV0LmV4Y2VwdGlvbigpLCBhc3luY2lvLkNhbmNlbGxlZEVycm9yKQorICAgICAgICAjIERvZXMgbm90aGluZworICAgICAgICBjLnNldF9yZXN1bHQoMykKKyAgICAgICAgZC5jYW5jZWwoKQorICAgICAgICBlLnNldF9leGNlcHRpb24oUnVudGltZUVycm9yKCkpCisgICAgICAgIGUuZXhjZXB0aW9uKCkKKworICAgIGRlZiB0ZXN0X3Jlc3VsdF9leGNlcHRpb25fb25lX2NhbmNlbGxhdGlvbihzZWxmKToKKyAgICAgICAgYSwgYiwgYywgZCwgZSwgZiA9IFthc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNildCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKGEsIGIsIGMsIGQsIGUsIGYsIHJldHVybl9leGNlcHRpb25zPVRydWUpCisgICAgICAgIGNiID0gdGVzdF91dGlscy5Nb2NrQ2FsbGJhY2soKQorICAgICAgICBmdXQuYWRkX2RvbmVfY2FsbGJhY2soY2IpCisgICAgICAgIGEuc2V0X3Jlc3VsdCgxKQorICAgICAgICB6ZGUgPSBaZXJvRGl2aXNpb25FcnJvcigpCisgICAgICAgIGIuc2V0X2V4Y2VwdGlvbih6ZGUpCisgICAgICAgIGMuY2FuY2VsKCkKKyAgICAgICAgc2VsZi5fcnVuX2xvb3Aoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmdXQuZG9uZSgpKQorICAgICAgICBkLnNldF9yZXN1bHQoMykKKyAgICAgICAgZS5jYW5jZWwoKQorICAgICAgICBydGUgPSBSdW50aW1lRXJyb3IoKQorICAgICAgICBmLnNldF9leGNlcHRpb24ocnRlKQorICAgICAgICByZXMgPSBzZWxmLm9uZV9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXNbMl0sIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXNbNF0sIGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpCisgICAgICAgIHJlc1syXSA9IHJlc1s0XSA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxLCB6ZGUsIE5vbmUsIDMsIE5vbmUsIHJ0ZV0pCisgICAgICAgIGNiLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGZ1dCkKKworCitjbGFzcyBDb3JvdXRpbmVHYXRoZXJUZXN0cyhHYXRoZXJUZXN0c0Jhc2UsIHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChzZWxmLm9uZV9sb29wKQorCisgICAgZGVmIHdyYXBfZnV0dXJlcyhzZWxmLCAqZnV0dXJlcyk6CisgICAgICAgIGNvcm9zID0gW10KKyAgICAgICAgZm9yIGZ1dCBpbiBmdXR1cmVzOgorICAgICAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgICAgICBkZWYgY29ybyhmdXQ9ZnV0KToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHlpZWxkIGZyb20gZnV0KQorICAgICAgICAgICAgY29yb3MuYXBwZW5kKGNvcm8oKSkKKyAgICAgICAgcmV0dXJuIGNvcm9zCisKKyAgICBkZWYgdGVzdF9jb25zdHJ1Y3Rvcl9sb29wX3NlbGVjdGlvbihzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKCk6CisgICAgICAgICAgICByZXR1cm4gJ2FiYycKKyAgICAgICAgZ2VuMSA9IGNvcm8oKQorICAgICAgICBnZW4yID0gY29ybygpCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKGdlbjEsIGdlbjIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Ll9sb29wLCBzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLm9uZV9sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLm90aGVyX2xvb3AsIGNsZWFudXA9RmFsc2UpCisgICAgICAgIGdlbjMgPSBjb3JvKCkKKyAgICAgICAgZ2VuNCA9IGNvcm8oKQorICAgICAgICBmdXQyID0gYXN5bmNpby5nYXRoZXIoZ2VuMywgZ2VuNCwgbG9vcD1zZWxmLm90aGVyX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnV0Mi5fbG9vcCwgc2VsZi5vdGhlcl9sb29wKQorICAgICAgICBzZWxmLm90aGVyX2xvb3AucnVuX3VudGlsX2NvbXBsZXRlKGZ1dDIpCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfY29yb3V0aW5lcyhzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBjb3JvKHMpOgorICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgYyA9IGNvcm8oJ2FiYycpCisgICAgICAgIGZ1dCA9IGFzeW5jaW8uZ2F0aGVyKGMsIGMsIGNvcm8oJ2RlZicpLCBjLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuX3J1bl9sb29wKHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnV0LnJlc3VsdCgpLCBbJ2FiYycsICdhYmMnLCAnZGVmJywgJ2FiYyddKQorCisgICAgZGVmIHRlc3RfY2FuY2VsbGF0aW9uX2Jyb2FkY2FzdChzZWxmKToKKyAgICAgICAgIyBDYW5jZWxsaW5nIG91dGVyKCkgY2FuY2VscyBhbGwgY2hpbGRyZW4uCisgICAgICAgIHByb29mID0gMAorICAgICAgICB3YWl0ZXIgPSBhc3luY2lvLkZ1dHVyZShsb29wPXNlbGYub25lX2xvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YKKyAgICAgICAgICAgIHlpZWxkIGZyb20gd2FpdGVyCisgICAgICAgICAgICBwcm9vZiArPSAxCisKKyAgICAgICAgY2hpbGQxID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGlubmVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgY2hpbGQyID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKGlubmVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgZ2F0aGVyZXIgPSBOb25lCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbm9ubG9jYWwgcHJvb2YsIGdhdGhlcmVyCisgICAgICAgICAgICBnYXRoZXJlciA9IGFzeW5jaW8uZ2F0aGVyKGNoaWxkMSwgY2hpbGQyLCBsb29wPXNlbGYub25lX2xvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIGdhdGhlcmVyCisgICAgICAgICAgICBwcm9vZiArPSAxMDAKKworICAgICAgICBmID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKG91dGVyKCksIGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLm9uZV9sb29wKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jYW5jZWwoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYub25lX2xvb3AucnVuX3VudGlsX2NvbXBsZXRlKGYpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2F0aGVyZXIuY2FuY2VsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YWl0ZXIuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGlsZDEuY2FuY2VsbGVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjaGlsZDIuY2FuY2VsbGVkKCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5vbmVfbG9vcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9vZiwgMCkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbl9tYXJraW5nKHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBmaXJzdCBsaW5lIG1hcmtlZCAiTWFyayBleGNlcHRpb24gcmV0cmlldmVkLiIKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGlubmVyKGYpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBmCisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3Nob3VsZCBub3QgYmUgaWdub3JlZCcpCisKKyAgICAgICAgYSA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKyAgICAgICAgYiA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5vbmVfbG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uZ2F0aGVyKGlubmVyKGEpLCBpbm5lcihiKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorCisgICAgICAgIGYgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUob3V0ZXIoKSwgbG9vcD1zZWxmLm9uZV9sb29wKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIGEuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIGIuc2V0X3Jlc3VsdChOb25lKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYub25lX2xvb3ApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLmV4Y2VwdGlvbigpLCBSdW50aW1lRXJyb3IpCisKKworY2xhc3MgUnVuQ29yb3V0aW5lVGhyZWFkc2FmZVRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorICAgICIiIlRlc3QgY2FzZSBmb3IgYXN5bmNpby5ydW5fY29yb3V0aW5lX3RocmVhZHNhZmUuIiIiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkgIyBXaWxsIGNsZWFudXAgcHJvcGVybHkKKworICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgIGRlZiBhZGQoc2VsZiwgYSwgYiwgZmFpbD1GYWxzZSwgY2FuY2VsPUZhbHNlKToKKyAgICAgICAgIiIiV2FpdCAwLjA1IHNlY29uZCBhbmQgcmV0dXJuIGEgKyBiLiIiIgorICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4wNSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgIGlmIGZhaWw6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkZhaWwhIikKKyAgICAgICAgaWYgY2FuY2VsOgorICAgICAgICAgICAgYXN5bmNpby50YXNrcy5UYXNrLmN1cnJlbnRfdGFzayhzZWxmLmxvb3ApLmNhbmNlbCgpCisgICAgICAgICAgICB5aWVsZAorICAgICAgICByZXR1cm4gYSArIGIKKworICAgIGRlZiB0YXJnZXQoc2VsZiwgZmFpbD1GYWxzZSwgY2FuY2VsPUZhbHNlLCB0aW1lb3V0PU5vbmUsCisgICAgICAgICAgICAgICBhZHZhbmNlX2Nvcm89RmFsc2UpOgorICAgICAgICAiIiJSdW4gYWRkIGNvcm91dGluZSBpbiB0aGUgZXZlbnQgbG9vcC4iIiIKKyAgICAgICAgY29ybyA9IHNlbGYuYWRkKDEsIDIsIGZhaWw9ZmFpbCwgY2FuY2VsPWNhbmNlbCkKKyAgICAgICAgZnV0dXJlID0gYXN5bmNpby5ydW5fY29yb3V0aW5lX3RocmVhZHNhZmUoY29ybywgc2VsZi5sb29wKQorICAgICAgICBpZiBhZHZhbmNlX2Nvcm86CisgICAgICAgICAgICAjIHRoaXMgaXMgZm9yIHRlc3RfcnVuX2Nvcm91dGluZV90aHJlYWRzYWZlX3Rhc2tfZmFjdG9yeV9leGNlcHRpb247CisgICAgICAgICAgICAjIG90aGVyd2lzZSBpdCBzcGlsbHMgZXJyb3JzIGFuZCBicmVha3MgKipvdGhlcioqIHVuaXR0ZXN0cywgc2luY2UKKyAgICAgICAgICAgICMgJ3RhcmdldCcgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aHJlYWRzLgorCisgICAgICAgICAgICAjIFdpdGggdGhpcyBjYWxsLCBgY29yb2Agd2lsbCBiZSBhZHZhbmNlZCwgc28gdGhhdAorICAgICAgICAgICAgIyBDb3JvV3JhcHBlci5fX2RlbF9fIHdvbid0IGRvIGFueXRoaW5nIHdoZW4gYXN5bmNpbyB0ZXN0cyBydW4KKyAgICAgICAgICAgICMgaW4gZGVidWcgbW9kZS4KKyAgICAgICAgICAgIHNlbGYubG9vcC5jYWxsX3Nvb25fdGhyZWFkc2FmZShjb3JvLnNlbmQsIE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmdXR1cmUucmVzdWx0KHRpbWVvdXQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmdXR1cmUuZG9uZSgpIG9yIGZ1dHVyZS5jYW5jZWwoKQorCisgICAgZGVmIHRlc3RfcnVuX2Nvcm91dGluZV90aHJlYWRzYWZlKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvcm91dGluZSBzdWJtaXNzaW9uIGZyb20gYSB0aHJlYWQgdG8gYW4gZXZlbnQgbG9vcC4iIiIKKyAgICAgICAgZnV0dXJlID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBzZWxmLnRhcmdldCkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXR1cmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAzKQorCisgICAgZGVmIHRlc3RfcnVuX2Nvcm91dGluZV90aHJlYWRzYWZlX3dpdGhfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJUZXN0IGNvcm91dGluZSBzdWJtaXNzaW9uIGZyb20gYSB0aHJlYWQgdG8gYW4gZXZlbnQgbG9vcAorICAgICAgICB3aGVuIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQuIiIiCisgICAgICAgIGZ1dHVyZSA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoTm9uZSwgc2VsZi50YXJnZXQsIFRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyBleGNfY29udGV4dDoKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEluKCJGYWlsISIsIGV4Y19jb250ZXh0LmV4Y2VwdGlvbi5hcmdzKQorCisgICAgZGVmIHRlc3RfcnVuX2Nvcm91dGluZV90aHJlYWRzYWZlX3dpdGhfdGltZW91dChzZWxmKToKKyAgICAgICAgIiIiVGVzdCBjb3JvdXRpbmUgc3VibWlzc2lvbiBmcm9tIGEgdGhyZWFkIHRvIGFuIGV2ZW50IGxvb3AKKyAgICAgICAgd2hlbiBhIHRpbWVvdXQgaXMgcmFpc2VkLiIiIgorICAgICAgICBjYWxsYmFjayA9IGxhbWJkYTogc2VsZi50YXJnZXQodGltZW91dD0wKQorICAgICAgICBmdXR1cmUgPSBzZWxmLmxvb3AucnVuX2luX2V4ZWN1dG9yKE5vbmUsIGNhbGxiYWNrKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uVGltZW91dEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0dXJlKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZXJlJ3Mgbm8gcGVuZGluZyB0YXNrIChhZGQgaGFzIGJlZW4gY2FuY2VsbGVkKQorICAgICAgICBmb3IgdGFzayBpbiBhc3luY2lvLlRhc2suYWxsX3Rhc2tzKHNlbGYubG9vcCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFzay5kb25lKCkpCisKKyAgICBkZWYgdGVzdF9ydW5fY29yb3V0aW5lX3RocmVhZHNhZmVfdGFza19jYW5jZWxsZWQoc2VsZik6CisgICAgICAgICIiIlRlc3QgY29yb3V0aW5lIHN1Ym1pc3Npb24gZnJvbSBhIHRyZWFkIHRvIGFuIGV2ZW50IGxvb3AKKyAgICAgICAgd2hlbiB0aGUgdGFzayBpcyBjYW5jZWxsZWQuIiIiCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhOiBzZWxmLnRhcmdldChjYW5jZWw9VHJ1ZSkKKyAgICAgICAgZnV0dXJlID0gc2VsZi5sb29wLnJ1bl9pbl9leGVjdXRvcihOb25lLCBjYWxsYmFjaykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLkNhbmNlbGxlZEVycm9yKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZnV0dXJlKQorCisgICAgZGVmIHRlc3RfcnVuX2Nvcm91dGluZV90aHJlYWRzYWZlX3Rhc2tfZmFjdG9yeV9leGNlcHRpb24oc2VsZik6CisgICAgICAgICIiIlRlc3QgY29yb3V0aW5lIHN1Ym1pc3Npb24gZnJvbSBhIHRyZWFkIHRvIGFuIGV2ZW50IGxvb3AKKyAgICAgICAgd2hlbiB0aGUgdGFzayBmYWN0b3J5IHJhaXNlIGFuIGV4Y2VwdGlvbi4iIiIKKyAgICAgICAgIyBTY2hlZHVsZSB0aGUgdGFyZ2V0CisgICAgICAgIGZ1dHVyZSA9IHNlbGYubG9vcC5ydW5faW5fZXhlY3V0b3IoCisgICAgICAgICAgICBOb25lLCBsYW1iZGE6IHNlbGYudGFyZ2V0KGFkdmFuY2VfY29ybz1UcnVlKSkKKyAgICAgICAgIyBTZXQgY29ycnVwdGVkIHRhc2sgZmFjdG9yeQorICAgICAgICBzZWxmLmxvb3Auc2V0X3Rhc2tfZmFjdG9yeShsYW1iZGEgbG9vcCwgY29ybzogd3JvbmdfbmFtZSkKKyAgICAgICAgIyBTZXQgZXhjZXB0aW9uIGhhbmRsZXIKKyAgICAgICAgY2FsbGJhY2sgPSB0ZXN0X3V0aWxzLk1vY2tDYWxsYmFjaygpCisgICAgICAgIHNlbGYubG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIoY2FsbGJhY2spCisgICAgICAgICMgUnVuIGV2ZW50IGxvb3AKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGV4Y19jb250ZXh0OgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXR1cmUpCisgICAgICAgICMgQ2hlY2sgZXhjZXB0aW9ucworICAgICAgICBzZWxmLmFzc2VydEluKCd3cm9uZ19uYW1lJywgZXhjX2NvbnRleHQuZXhjZXB0aW9uLmFyZ3NbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNhbGxiYWNrLmNhbGxfYXJnc19saXN0KSwgMSkKKyAgICAgICAgKGxvb3AsIGNvbnRleHQpLCBrd2FyZ3MgPSBjYWxsYmFjay5jYWxsX2FyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZXh0WydleGNlcHRpb24nXSwgZXhjX2NvbnRleHQuZXhjZXB0aW9uKQorCisKK2NsYXNzIFNsZWVwVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLm5ld19ldmVudF9sb29wKCkKKyAgICAgICAgYXN5bmNpby5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AuY2xvc2UoKQorICAgICAgICBzZWxmLmxvb3AgPSBOb25lCisKKyAgICBkZWYgdGVzdF9zbGVlcF96ZXJvKHNlbGYpOgorICAgICAgICByZXN1bHQgPSAwCisKKyAgICAgICAgZGVmIGluY19yZXN1bHQobnVtKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHJlc3VsdAorICAgICAgICAgICAgcmVzdWx0ICs9IG51bQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgY29ybygpOgorICAgICAgICAgICAgc2VsZi5sb29wLmNhbGxfc29vbihpbmNfcmVzdWx0LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDApCisgICAgICAgICAgICBudW0gPSB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMCwgbG9vcD1zZWxmLmxvb3AsIHJlc3VsdD0xMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAxKSAjIGluYydlZCBieSBjYWxsX3Nvb24KKyAgICAgICAgICAgIGluY19yZXN1bHQobnVtKSAjIG51bSBzaG91bGQgYmUgMTEKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIDExKQorCisKK2NsYXNzIFRpbWVvdXRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8ubmV3X2V2ZW50X2xvb3AoKQorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKE5vbmUpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcCA9IE5vbmUKKworICAgIGRlZiB0ZXN0X3RpbWVvdXQoc2VsZik6CisgICAgICAgIGNhbmNlbGVkX3JhaXNlZCA9IFtGYWxzZV0KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGxvbmdfcnVubmluZ190YXNrKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEwLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIGV4Y2VwdCBhc3luY2lvLkNhbmNlbGxlZEVycm9yOgorICAgICAgICAgICAgICAgIGNhbmNlbGVkX3JhaXNlZFswXSA9IFRydWUKKyAgICAgICAgICAgICAgICByYWlzZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ28oKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5UaW1lb3V0RXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggYXN5bmNpby50aW1lb3V0KDAuMDEsIGxvb3A9c2VsZi5sb29wKSBhcyB0OgorICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGxvbmdfcnVubmluZ190YXNrKCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0Ll9sb29wLCBzZWxmLmxvb3ApCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShnbygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2FuY2VsZWRfcmFpc2VkWzBdLCAnQ2FuY2VsbGVkRXJyb3Igd2FzIG5vdCByYWlzZWQnKQorCisgICAgZGVmIHRlc3RfdGltZW91dF9maW5pc2hfaW5fdGltZShzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBsb25nX3J1bm5pbmdfdGFzaygpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDAuMDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ28oKToKKyAgICAgICAgICAgIHdpdGggYXN5bmNpby50aW1lb3V0KDAuMSwgbG9vcD1zZWxmLmxvb3ApOgorICAgICAgICAgICAgICAgIHJlc3AgPSB5aWVsZCBmcm9tIGxvbmdfcnVubmluZ190YXNrKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgJ2RvbmUnKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ28oKSkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXRfZ2xvYWJhbF9sb29wKHNlbGYpOgorICAgICAgICBhc3luY2lvLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHJ1bigpOgorICAgICAgICAgICAgd2l0aCBhc3luY2lvLnRpbWVvdXQoMC4xKSBhcyB0OgorICAgICAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLjAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fbG9vcCwgc2VsZi5sb29wKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUocnVuKCkpCisKKyAgICBkZWYgdGVzdF90aW1lb3V0X25vdF9yZWxldmFudF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ28oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggYXN5bmNpby50aW1lb3V0KDAuMSwgbG9vcD1zZWxmLmxvb3ApOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBLZXlFcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ28oKSkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXRfY2FuY2VsZWRfZXJyb3JfaXNfY29udmVydGVkX3RvX3RpbWVvdXQoc2VsZik6CisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ28oKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgwLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBhc3luY2lvLnRpbWVvdXQoMC4wMDEsIGxvb3A9c2VsZi5sb29wKToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgYXN5bmNpby5DYW5jZWxsZWRFcnJvcgorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ28oKSkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXRfYmxvY2tpbmdfbG9vcChzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBsb25nX3J1bm5pbmdfdGFzaygpOgorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICAgICAgcmV0dXJuICdkb25lJworCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ28oKToKKyAgICAgICAgICAgIHdpdGggYXN5bmNpby50aW1lb3V0KDAuMDEsIGxvb3A9c2VsZi5sb29wKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB5aWVsZCBmcm9tIGxvbmdfcnVubmluZ190YXNrKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZG9uZScpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShnbygpKQorCisgICAgZGVmIHRlc3RfZm9yX3JhY2VfY29uZGl0aW9ucyhzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHNlbGYubG9vcC5jYWxsX2xhdGVyKDAuMSwgZnV0LnNldF9yZXN1bHQoJ2RvbmUnKSkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdvKCk6CisgICAgICAgICAgICB3aXRoIGFzeW5jaW8udGltZW91dCgwLjIsIGxvb3A9c2VsZi5sb29wKToKKyAgICAgICAgICAgICAgICByZXNwID0geWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgJ2RvbmUnKQorCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZ28oKSkKKworICAgIGRlZiB0ZXN0X3RpbWVvdXRfdGltZShzZWxmKToKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBnbygpOgorICAgICAgICAgICAgZm9vX3J1bm5pbmcgPSBOb25lCisKKyAgICAgICAgICAgIHN0YXJ0ID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhhc3luY2lvLlRpbWVvdXRFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCBhc3luY2lvLnRpbWVvdXQoMC4xLCBsb29wPXNlbGYubG9vcCk6CisgICAgICAgICAgICAgICAgICAgIGZvb19ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBmcm9tIGFzeW5jaW8uc2xlZXAoMC4yLCBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvb19ydW5uaW5nID0gRmFsc2UKKworICAgICAgICAgICAgZHQgPSBzZWxmLmxvb3AudGltZSgpIC0gc3RhcnQKKyAgICAgICAgICAgICMgdG9sZXJhdGUgYSBzbWFsbCBkZWx0YSBmb3Igc2xvdyBkZWx0YSBvciB1bnN0YWJsZSBjbG9ja3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjA5IDwgZHQgPCAwLjEyLCBkdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm9vX3J1bm5pbmcpCisKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShnbygpKQorCisgICAgZGVmIHRlc3RfcmFpc2VfcnVudGltZWVycm9yX2lmX25vX3Rhc2soc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggYXN5bmNpby50aW1lb3V0KDAuMSwgbG9vcD1zZWxmLmxvb3ApOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X291dGVyX2Nvcm9faXNfbm90X2NhbmNlbGxlZChzZWxmKToKKworICAgICAgICBoYXNfdGltZW91dCA9IFtGYWxzZV0KKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBhc3luY2lvLnRpbWVvdXQoMC4wMDEsIGxvb3A9c2VsZi5sb29wKToKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBhc3luY2lvLnNsZWVwKDEsIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgZXhjZXB0IGFzeW5jaW8uVGltZW91dEVycm9yOgorICAgICAgICAgICAgICAgIGhhc190aW1lb3V0WzBdID0gVHJ1ZQorCisgICAgICAgIEBhc3luY2lvLmNvcm91dGluZQorICAgICAgICBkZWYgZ28oKToKKyAgICAgICAgICAgIHRhc2sgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUob3V0ZXIoKSwgbG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICB5aWVsZCBmcm9tIHRhc2sKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNfdGltZW91dFswXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGFzay5jYW5jZWxsZWQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGdvKCkpCisKKyAgICBkZWYgdGVzdF9jYW5jZWxfb3V0ZXJfY29ybyhzZWxmKToKKyAgICAgICAgZnV0ID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisKKyAgICAgICAgQGFzeW5jaW8uY29yb3V0aW5lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgZnV0LnNldF9yZXN1bHQoTm9uZSkKKyAgICAgICAgICAgIHlpZWxkIGZyb20gYXN5bmNpby5zbGVlcCgxLCBsb29wPXNlbGYubG9vcCkKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIGdvKCk6CisgICAgICAgICAgICB0YXNrID0gYXN5bmNpby5lbnN1cmVfZnV0dXJlKG91dGVyKCksIGxvb3A9c2VsZi5sb29wKQorICAgICAgICAgICAgeWllbGQgZnJvbSBmdXQKKyAgICAgICAgICAgIHRhc2suY2FuY2VsKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoYXN5bmNpby5DYW5jZWxsZWRFcnJvcik6CisgICAgICAgICAgICAgICAgeWllbGQgZnJvbSB0YXNrCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGFzay5jYW5jZWxsZWQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXNrLmRvbmUoKSkKKworICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGdvKCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF90cmFuc3BvcnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdHJhbnNwb3J0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjZlM2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdHJhbnNwb3J0cy5weQpAQCAtMCwwICsxLDkxIEBACisiIiJUZXN0cyBmb3IgdHJhbnNwb3J0cy5weS4iIiIKKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRyYW5zcG9ydHMKKworCitjbGFzcyBUcmFuc3BvcnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jdG9yX2V4dHJhX2lzX25vbmUoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IGFzeW5jaW8uVHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuX2V4dHJhLCB7fSkKKworICAgIGRlZiB0ZXN0X2dldF9leHRyYV9pbmZvKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlRyYW5zcG9ydCh7J2V4dHJhJzogJ2luZm8nfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnaW5mbycsIHRyYW5zcG9ydC5nZXRfZXh0cmFfaW5mbygnZXh0cmEnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCd1bmtub3duJykpCisKKyAgICAgICAgZGVmYXVsdCA9IG9iamVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZGVmYXVsdCwgdHJhbnNwb3J0LmdldF9leHRyYV9pbmZvKCd1bmtub3duJywgZGVmYXVsdCkpCisKKyAgICBkZWYgdGVzdF93cml0ZWxpbmVzKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlRyYW5zcG9ydCgpCisgICAgICAgIHRyYW5zcG9ydC53cml0ZSA9IG1vY2suTW9jaygpCisKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlbGluZXMoW2InbGluZTEnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGInbGluZTInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYidsaW5lMycpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCB0cmFuc3BvcnQud3JpdGUuY2FsbF9jb3VudCkKKyAgICAgICAgdHJhbnNwb3J0LndyaXRlLmFzc2VydF9jYWxsZWRfd2l0aChiJ2xpbmUxbGluZTJsaW5lMycpCisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IGFzeW5jaW8uVHJhbnNwb3J0KCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfd3JpdGVfYnVmZmVyX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC53cml0ZSwgJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQud3JpdGVfZW9mKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuY2FuX3dyaXRlX2VvZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LnBhdXNlX3JlYWRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5yZXN1bWVfcmVhZGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuYWJvcnQpCisKKyAgICBkZWYgdGVzdF9kZ3JhbV9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIHRyYW5zcG9ydCA9IGFzeW5jaW8uRGF0YWdyYW1UcmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5zZW5kdG8sICdkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmFib3J0KQorCisgICAgZGVmIHRlc3Rfc3VicHJvY2Vzc190cmFuc3BvcnRfbm90X2ltcGxlbWVudGVkKHNlbGYpOgorICAgICAgICB0cmFuc3BvcnQgPSBhc3luY2lvLlN1YnByb2Nlc3NUcmFuc3BvcnQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfcGlkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB0cmFuc3BvcnQuZ2V0X3JldHVybmNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5nZXRfcGlwZV90cmFuc3BvcnQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHRyYW5zcG9ydC5zZW5kX3NpZ25hbCwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LnRlcm1pbmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgdHJhbnNwb3J0LmtpbGwpCisKKyAgICBkZWYgdGVzdF9mbG93Y29udHJvbF9taXhpbl9zZXRfd3JpdGVfbGltaXRzKHNlbGYpOgorCisgICAgICAgIGNsYXNzIE15VHJhbnNwb3J0KHRyYW5zcG9ydHMuX0Zsb3dDb250cm9sTWl4aW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zcG9ydHMuVHJhbnNwb3J0KToKKworICAgICAgICAgICAgZGVmIGdldF93cml0ZV9idWZmZXJfc2l6ZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNTEyCisKKyAgICAgICAgbG9vcCA9IG1vY2suTW9jaygpCisgICAgICAgIHRyYW5zcG9ydCA9IE15VHJhbnNwb3J0KGxvb3A9bG9vcCkKKyAgICAgICAgdHJhbnNwb3J0Ll9wcm90b2NvbCA9IG1vY2suTW9jaygpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0cmFuc3BvcnQuX3Byb3RvY29sX3BhdXNlZCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2hpZ2guKm11c3QgYmUgPj0gbG93Jyk6CisgICAgICAgICAgICB0cmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoaGlnaD0wLCBsb3c9MSkKKworICAgICAgICB0cmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoaGlnaD0xMDI0LCBsb3c9MTI4KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYW5zcG9ydC5fcHJvdG9jb2xfcGF1c2VkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYW5zcG9ydC5nZXRfd3JpdGVfYnVmZmVyX2xpbWl0cygpLCAoMTI4LCAxMDI0KSkKKworICAgICAgICB0cmFuc3BvcnQuc2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoaGlnaD0yNTYsIGxvdz0xMjgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFuc3BvcnQuX3Byb3RvY29sX3BhdXNlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFuc3BvcnQuZ2V0X3dyaXRlX2J1ZmZlcl9saW1pdHMoKSwgKDEyOCwgMjU2KSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdW5peF9ldmVudHMucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF91bml4X2V2ZW50cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmRjNjg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3RfdW5peF9ldmVudHMucHkKQEAgLTAsMCArMSwxNTYxIEBACisiIiJUZXN0cyBmb3IgdW5peF9ldmVudHMucHkuIiIiCisKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGVycm5vCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHRocmVhZGluZworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCisKK2lmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgorICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdVTklYIG9ubHknKQorCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IGxvZworZnJvbSBhc3luY2lvIGltcG9ydCB0ZXN0X3V0aWxzCitmcm9tIGFzeW5jaW8gaW1wb3J0IHVuaXhfZXZlbnRzCisKKworTU9DS19BTlkgPSBtb2NrLkFOWQorCisKK2RlZiBjbG9zZV9waXBlX3RyYW5zcG9ydCh0cmFuc3BvcnQpOgorICAgICMgRG9uJ3QgY2FsbCB0cmFuc3BvcnQuY2xvc2UoKSBiZWNhdXNlIHRoZSBldmVudCBsb29wIGFuZCB0aGUgc2VsZWN0b3IKKyAgICAjIGFyZSBtb2NrZWQKKyAgICBpZiB0cmFuc3BvcnQuX3BpcGUgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuCisgICAgdHJhbnNwb3J0Ll9waXBlLmNsb3NlKCkKKyAgICB0cmFuc3BvcnQuX3BpcGUgPSBOb25lCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc2lnbmFsLCAnU2lnbmFscyBhcmUgbm90IHN1cHBvcnRlZCcpCitjbGFzcyBTZWxlY3RvckV2ZW50TG9vcFNpZ25hbFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jaGVja19zaWduYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLCBzZWxmLmxvb3AuX2NoZWNrX3NpZ25hbCwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYubG9vcC5fY2hlY2tfc2lnbmFsLCBzaWduYWwuTlNJRyArIDEpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfc2lnbmFsX25vX2hhbmRsZXIoc2VsZik6CisgICAgICAgIHNlbGYubG9vcC5faGFuZGxlX3NpZ25hbChzaWduYWwuTlNJRyArIDEpCisKKyAgICBkZWYgdGVzdF9oYW5kbGVfc2lnbmFsX2NhbmNlbGxlZF9oYW5kbGVyKHNlbGYpOgorICAgICAgICBoID0gYXN5bmNpby5IYW5kbGUobW9jay5Nb2NrKCksICgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9vcD1tb2NrLk1vY2soKSkKKyAgICAgICAgaC5jYW5jZWwoKQorICAgICAgICBzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVyc1tzaWduYWwuTlNJRyArIDFdID0gaAorICAgICAgICBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc2VsZi5sb29wLl9oYW5kbGVfc2lnbmFsKHNpZ25hbC5OU0lHICsgMSkKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX3dpdGgoc2lnbmFsLk5TSUcgKyAxKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXJfc2V0dXBfZXJyb3Ioc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKyAgICAgICAgbV9zaWduYWwuc2V0X3dha2V1cF9mZC5zaWRlX2VmZmVjdCA9IFZhbHVlRXJyb3IKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFJ1bnRpbWVFcnJvciwKKyAgICAgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIsCisgICAgICAgICAgICBzaWduYWwuU0lHSU5ULCBsYW1iZGE6IFRydWUpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9jb3JvdXRpbmVfZXJyb3Ioc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBAYXN5bmNpby5jb3JvdXRpbmUKKyAgICAgICAgZGVmIHNpbXBsZV9jb3JvdXRpbmUoKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gW10KKworICAgICAgICAjIGNhbGxiYWNrIG11c3Qgbm90IGJlIGEgY29yb3V0aW5lIGZ1bmN0aW9uCisgICAgICAgIGNvcm9fZnVuYyA9IHNpbXBsZV9jb3JvdXRpbmUKKyAgICAgICAgY29yb19vYmogPSBjb3JvX2Z1bmMoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY29yb19vYmouY2xvc2UpCisgICAgICAgIGZvciBmdW5jIGluIChjb3JvX2Z1bmMsIGNvcm9fb2JqKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgVHlwZUVycm9yLCAnY29yb3V0aW5lcyBjYW5ub3QgYmUgdXNlZCB3aXRoIGFkZF9zaWduYWxfaGFuZGxlcicsCisgICAgICAgICAgICAgICAgc2VsZi5sb29wLmFkZF9zaWduYWxfaGFuZGxlciwKKyAgICAgICAgICAgICAgICBzaWduYWwuU0lHSU5ULCBmdW5jKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9hZGRfc2lnbmFsX2hhbmRsZXIoc2VsZiwgbV9zaWduYWwpOgorICAgICAgICBtX3NpZ25hbC5OU0lHID0gc2lnbmFsLk5TSUcKKworICAgICAgICBjYiA9IGxhbWJkYTogVHJ1ZQorICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGNiKQorICAgICAgICBoID0gc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnMuZ2V0KHNpZ25hbC5TSUdIVVApCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLCBhc3luY2lvLkhhbmRsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLl9jYWxsYmFjaywgY2IpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9pbnN0YWxsX2Vycm9yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgZGVmIHNldF93YWtldXBfZmQoZmQpOgorICAgICAgICAgICAgaWYgZmQgPT0gLTE6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQgPSBzZXRfd2FrZXVwX2ZkCisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FRkFVTFQKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBFcnIsCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLAorICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5iYXNlX2V2ZW50cy5sb2dnZXInKQorICAgIGRlZiB0ZXN0X2FkZF9zaWduYWxfaGFuZGxlcl9pbnN0YWxsX2Vycm9yMihzZWxmLCBtX2xvZ2dpbmcsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgY2xhc3MgRXJyKE9TRXJyb3IpOgorICAgICAgICAgICAgZXJybm8gPSBlcnJuby5FSU5WQUwKKyAgICAgICAgbV9zaWduYWwuc2lnbmFsLnNpZGVfZWZmZWN0ID0gRXJyCisKKyAgICAgICAgc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnNbc2lnbmFsLlNJR0hVUF0gPSBsYW1iZGE6IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLAorICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nZ2luZy5pbmZvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmNhbGxfY291bnQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmJhc2VfZXZlbnRzLmxvZ2dlcicpCisgICAgZGVmIHRlc3RfYWRkX3NpZ25hbF9oYW5kbGVyX2luc3RhbGxfZXJyb3IzKHNlbGYsIG1fbG9nZ2luZywgbV9zaWduYWwpOgorICAgICAgICBjbGFzcyBFcnIoT1NFcnJvcik6CisgICAgICAgICAgICBlcnJubyA9IGVycm5vLkVJTlZBTAorICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBFcnIKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBSdW50aW1lRXJyb3IsCisgICAgICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyLAorICAgICAgICAgICAgc2lnbmFsLlNJR0lOVCwgbGFtYmRhOiBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1fbG9nZ2luZy5pbmZvLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmNhbGxfY291bnQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1fc2lnbmFsLnNpZ25hbC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoc2lnbmFsLlNJR0hVUCwgbV9zaWduYWwuU0lHX0RGTCksIG1fc2lnbmFsLnNpZ25hbC5jYWxsX2FyZ3NbMF0pCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcl8yKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIG1fc2lnbmFsLlNJR0lOVCA9IHNpZ25hbC5TSUdJTlQKKworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdJTlQsIGxhbWJkYTogVHJ1ZSkKKyAgICAgICAgc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnNbc2lnbmFsLlNJR0hVUF0gPSBvYmplY3QoKQorICAgICAgICBtX3NpZ25hbC5zZXRfd2FrZXVwX2ZkLnJlc2V0X21vY2soKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgKKyAgICAgICAgICAgIHNlbGYubG9vcC5yZW1vdmVfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0lOVCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV9zaWduYWwuc2V0X3dha2V1cF9mZC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtX3NpZ25hbC5zaWduYWwuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgKHNpZ25hbC5TSUdJTlQsIG1fc2lnbmFsLmRlZmF1bHRfaW50X2hhbmRsZXIpLAorICAgICAgICAgICAgbV9zaWduYWwuc2lnbmFsLmNhbGxfYXJnc1swXSkKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLnNpZ25hbCcpCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8uYmFzZV9ldmVudHMubG9nZ2VyJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfY2xlYW51cF9lcnJvcihzZWxmLCBtX2xvZ2dpbmcsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQuc2lkZV9lZmZlY3QgPSBWYWx1ZUVycm9yCisKKyAgICAgICAgc2VsZi5sb29wLnJlbW92ZV9zaWduYWxfaGFuZGxlcihzaWduYWwuU0lHSFVQKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobV9sb2dnaW5nLmluZm8pCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zaWduYWwnKQorICAgIGRlZiB0ZXN0X3JlbW92ZV9zaWduYWxfaGFuZGxlcl9lcnJvcihzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdIVVAsIGxhbWJkYTogVHJ1ZSkKKworICAgICAgICBtX3NpZ25hbC5zaWduYWwuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBPU0Vycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCBzaWduYWwuU0lHSFVQKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9yZW1vdmVfc2lnbmFsX2hhbmRsZXJfZXJyb3IyKHNlbGYsIG1fc2lnbmFsKToKKyAgICAgICAgbV9zaWduYWwuTlNJRyA9IHNpZ25hbC5OU0lHCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgbGFtYmRhOiBUcnVlKQorCisgICAgICAgIGNsYXNzIEVycihPU0Vycm9yKToKKyAgICAgICAgICAgIGVycm5vID0gZXJybm8uRUlOVkFMCisgICAgICAgIG1fc2lnbmFsLnNpZ25hbC5zaWRlX2VmZmVjdCA9IEVycgorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgUnVudGltZUVycm9yLCBzZWxmLmxvb3AucmVtb3ZlX3NpZ25hbF9oYW5kbGVyLCBzaWduYWwuU0lHSFVQKQorCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuc2lnbmFsJykKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmLCBtX3NpZ25hbCk6CisgICAgICAgIG1fc2lnbmFsLk5TSUcgPSBzaWduYWwuTlNJRworCisgICAgICAgIHNlbGYubG9vcC5hZGRfc2lnbmFsX2hhbmRsZXIoc2lnbmFsLlNJR0hVUCwgbGFtYmRhOiBUcnVlKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3NpZ25hbF9oYW5kbGVyKHNpZ25hbC5TSUdDSExELCBsYW1iZGE6IFRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5sb29wLl9zaWduYWxfaGFuZGxlcnMpLCAyKQorCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQucmVzZXRfbW9jaygpCisKKyAgICAgICAgc2VsZi5sb29wLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLmxvb3AuX3NpZ25hbF9oYW5kbGVycyksIDApCisgICAgICAgIG1fc2lnbmFsLnNldF93YWtldXBfZmQuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoLTEpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICdBRl9VTklYJyksCisgICAgICAgICAgICAgICAgICAgICAnVU5JWCBTb2NrZXRzIGFyZSBub3Qgc3VwcG9ydGVkJykKK2NsYXNzIFNlbGVjdG9yRXZlbnRMb29wVW5peFNvY2tldFRlc3RzKHRlc3RfdXRpbHMuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmxvb3AgPSBhc3luY2lvLlNlbGVjdG9yRXZlbnRMb29wKCkKKyAgICAgICAgc2VsZi5zZXRfZXZlbnRfbG9vcChzZWxmLmxvb3ApCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfZXhpc3RpbmdfcGF0aF9zb2NrKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3RfdXRpbHMudW5peF9zb2NrZXRfcGF0aCgpIGFzIHBhdGg6CisgICAgICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCkKKyAgICAgICAgICAgIHNvY2suYmluZChwYXRoKQorICAgICAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGxhbWJkYTogTm9uZSwgcGF0aCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkZHJlc3MuKmlzIGFscmVhZHkgaW4gdXNlJyk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9leGlzdGluZ19wYXRoX25vbnNvY2soc2VsZik6CisgICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCkgYXMgZmlsZToKKyAgICAgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGxhbWJkYTogTm9uZSwgZmlsZS5uYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE9TRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0FkZHJlc3MuKmlzIGFscmVhZHkgaW4gdXNlJyk6CisgICAgICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfc2VydmVyX3NzbF9ib29sKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X3NlcnZlcihsYW1iZGE6IE5vbmUsIHBhdGg9J3NwYW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2w9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzc2wgYXJndW1lbnQgbXVzdCBiZSBhbiBTU0xDb250ZXh0Jyk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfbm9wYXRoX25vc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIobGFtYmRhOiBOb25lLCBwYXRoPU5vbmUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhdGggd2FzIG5vdCBzcGVjaWZpZWQsIGFuZCBubyBzb2NrJyk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9zZXJ2ZXJfcGF0aF9pbmV0c29jayhzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X3NlcnZlcihsYW1iZGE6IE5vbmUsIHBhdGg9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2s9c29jaykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdBIFVOSVggRG9tYWluIFNvY2tldCB3YXMgZXhwZWN0ZWQnKToKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby51bml4X2V2ZW50cy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X3NlcnZlcl9iaW5kX2Vycm9yKHNlbGYsIG1fc29ja2V0KToKKyAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgc29ja2V0IGlzIGNsb3NlZCBvbiBhbnkgYmluZCBlcnJvcgorICAgICAgICBzb2NrID0gbW9jay5Nb2NrKCkKKyAgICAgICAgbV9zb2NrZXQuc29ja2V0LnJldHVybl92YWx1ZSA9IHNvY2sKKworICAgICAgICBzb2NrLmJpbmQuc2lkZV9lZmZlY3QgPSBPU0Vycm9yCisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfc2VydmVyKGxhbWJkYTogTm9uZSwgcGF0aD0iL3Rlc3QiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICAgICAgc29jay5iaW5kLnNpZGVfZWZmZWN0ID0gTWVtb3J5RXJyb3IKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIobGFtYmRhOiBOb25lLCBwYXRoPSIvdGVzdCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTWVtb3J5RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9jb25uZWN0aW9uX3BhdGhfc29jayhzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9jb25uZWN0aW9uKAorICAgICAgICAgICAgbGFtYmRhOiBOb25lLCBvcy5kZXZudWxsLCBzb2NrPW9iamVjdCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3BhdGggYW5kIHNvY2sgY2FuIG5vdCBiZScpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShjb3JvKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX3VuaXhfY29ubmVjdGlvbl9ub3BhdGhfbm9zb2NrKHNlbGYpOgorICAgICAgICBjb3JvID0gc2VsZi5sb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oCisgICAgICAgICAgICBsYW1iZGE6IE5vbmUsIE5vbmUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vIHBhdGggYW5kIHNvY2sgd2VyZSBzcGVjaWZpZWQnKToKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV91bml4X2Nvbm5lY3Rpb25fbm9zc2xfc2VydmVyaG9zdChzZWxmKToKKyAgICAgICAgY29ybyA9IHNlbGYubG9vcC5jcmVhdGVfdW5peF9jb25uZWN0aW9uKAorICAgICAgICAgICAgbGFtYmRhOiBOb25lLCBvcy5kZXZudWxsLCBzZXJ2ZXJfaG9zdG5hbWU9J3NwYW0nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXJ2ZXJfaG9zdG5hbWUgaXMgb25seSBtZWFuaW5nZnVsJyk6CisgICAgICAgICAgICBzZWxmLmxvb3AucnVuX3VudGlsX2NvbXBsZXRlKGNvcm8pCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfdW5peF9jb25uZWN0aW9uX3NzbF9ub3NlcnZlcmhvc3Qoc2VsZik6CisgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuY3JlYXRlX3VuaXhfY29ubmVjdGlvbigKKyAgICAgICAgICAgIGxhbWJkYTogTm9uZSwgb3MuZGV2bnVsbCwgc3NsPVRydWUpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KAorICAgICAgICAgICAgVmFsdWVFcnJvciwgJ3lvdSBoYXZlIHRvIHBhc3Mgc2VydmVyX2hvc3RuYW1lIHdoZW4gdXNpbmcgc3NsJyk6CisKKyAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoY29ybykKKworCitjbGFzcyBVbml4UmVhZFBpcGVUcmFuc3BvcnRUZXN0cyh0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgc2VsZi5wcm90b2NvbCA9IHRlc3RfdXRpbHMubWFrZV90ZXN0X3Byb3RvY29sKGFzeW5jaW8uUHJvdG9jb2wpCisgICAgICAgIHNlbGYucGlwZSA9IG1vY2suTW9jayhzcGVjX3NldD1pby5SYXdJT0Jhc2UpCisgICAgICAgIHNlbGYucGlwZS5maWxlbm8ucmV0dXJuX3ZhbHVlID0gNQorCisgICAgICAgIGJsb2NraW5nX3BhdGNoZXIgPSBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLl9zZXRfbm9uYmxvY2tpbmcnKQorICAgICAgICBibG9ja2luZ19wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGJsb2NraW5nX3BhdGNoZXIuc3RvcCkKKworICAgICAgICBmc3RhdF9wYXRjaGVyID0gbW9jay5wYXRjaCgnb3MuZnN0YXQnKQorICAgICAgICBtX2ZzdGF0ID0gZnN0YXRfcGF0Y2hlci5zdGFydCgpCisgICAgICAgIHN0ID0gbW9jay5Nb2NrKCkKKyAgICAgICAgc3Quc3RfbW9kZSA9IHN0YXQuU19JRklGTworICAgICAgICBtX2ZzdGF0LnJldHVybl92YWx1ZSA9IHN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmc3RhdF9wYXRjaGVyLnN0b3ApCisKKyAgICBkZWYgcmVhZF9waXBlX3RyYW5zcG9ydChzZWxmLCB3YWl0ZXI9Tm9uZSk6CisgICAgICAgIHRyYW5zcG9ydCA9IHVuaXhfZXZlbnRzLl9Vbml4UmVhZFBpcGVUcmFuc3BvcnQoc2VsZi5sb29wLCBzZWxmLnBpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0ZXI9d2FpdGVyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xvc2VfcGlwZV90cmFuc3BvcnQsIHRyYW5zcG9ydCkKKyAgICAgICAgcmV0dXJuIHRyYW5zcG9ydAorCisgICAgZGVmIHRlc3RfY3RvcihzZWxmKToKKyAgICAgICAgd2FpdGVyID0gYXN5bmNpby5GdXR1cmUobG9vcD1zZWxmLmxvb3ApCisgICAgICAgIHRyID0gc2VsZi5yZWFkX3BpcGVfdHJhbnNwb3J0KHdhaXRlcj13YWl0ZXIpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUod2FpdGVyKQorCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9tYWRlLmFzc2VydF9jYWxsZWRfd2l0aCh0cikKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhaXRlci5yZXN1bHQoKSkKKworICAgIEBtb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeShzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHNlbGYucmVhZF9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIG1fcmVhZC5yZXR1cm5fdmFsdWUgPSBiJ2RhdGEnCisgICAgICAgIHRyLl9yZWFkX3JlYWR5KCkKKworICAgICAgICBtX3JlYWQuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIHRyLm1heF9zaXplKQorICAgICAgICBzZWxmLnByb3RvY29sLmRhdGFfcmVjZWl2ZWQuYXNzZXJ0X2NhbGxlZF93aXRoKGInZGF0YScpCisKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfZW9mKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gc2VsZi5yZWFkX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgbV9yZWFkLnJldHVybl92YWx1ZSA9IGInJworICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgbV9yZWFkLmFzc2VydF9jYWxsZWRfd2l0aCg1LCB0ci5tYXhfc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuZW9mX3JlY2VpdmVkLmFzc2VydF9jYWxsZWRfd2l0aCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgQG1vY2sucGF0Y2goJ29zLnJlYWQnKQorICAgIGRlZiB0ZXN0X19yZWFkX3JlYWR5X2Jsb2NrZWQoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSBzZWxmLnJlYWRfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBtX3JlYWQuc2lkZV9lZmZlY3QgPSBCbG9ja2luZ0lPRXJyb3IKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorCisgICAgICAgIG1fcmVhZC5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgdHIubWF4X3NpemUpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucHJvdG9jb2wuZGF0YV9yZWNlaXZlZC5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnYXN5bmNpby5sb2cubG9nZ2VyLmVycm9yJykKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX3JlYWRfcmVhZHlfZXJyb3Ioc2VsZiwgbV9yZWFkLCBtX2xvZ2V4Yyk6CisgICAgICAgIHRyID0gc2VsZi5yZWFkX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgZXJyID0gT1NFcnJvcigpCisgICAgICAgIG1fcmVhZC5zaWRlX2VmZmVjdCA9IGVycgorICAgICAgICB0ci5fY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpCisKKyAgICAgICAgbV9yZWFkLmFzc2VydF9jYWxsZWRfd2l0aCg1LCB0ci5tYXhfc2l6ZSkKKyAgICAgICAgdHIuX2Nsb3NlLmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIG1fbG9nZXhjLmFzc2VydF9jYWxsZWRfd2l0aCgKKyAgICAgICAgICAgIHRlc3RfdXRpbHMuTW9ja1BhdHRlcm4oCisgICAgICAgICAgICAgICAgJ0ZhdGFsIHJlYWQgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnCisgICAgICAgICAgICAgICAgJ1xucHJvdG9jb2w6LipcbnRyYW5zcG9ydDouKicpLAorICAgICAgICAgICAgZXhjX2luZm89KE9TRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfcGF1c2VfcmVhZGluZyhzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHNlbGYucmVhZF9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIG0gPSBtb2NrLk1vY2soKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3JlYWRlcig1LCBtKQorICAgICAgICB0ci5wYXVzZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKworICAgIEBtb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9yZXN1bWVfcmVhZGluZyhzZWxmLCBtX3JlYWQpOgorICAgICAgICB0ciA9IHNlbGYucmVhZF9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLnJlc3VtZV9yZWFkaW5nKCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSBzZWxmLnJlYWRfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5fY2xvc2UgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHRyLl9jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIEBtb2NrLnBhdGNoKCdvcy5yZWFkJykKKyAgICBkZWYgdGVzdF9jbG9zZV9hbHJlYWR5X2Nsb3Npbmcoc2VsZiwgbV9yZWFkKToKKyAgICAgICAgdHIgPSBzZWxmLnJlYWRfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5fY2xvc2luZyA9IFRydWUKKyAgICAgICAgdHIuX2Nsb3NlID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyLl9jbG9zZS5jYWxsZWQpCisKKyAgICBAbW9jay5wYXRjaCgnb3MucmVhZCcpCisgICAgZGVmIHRlc3RfX2Nsb3NlKHNlbGYsIG1fcmVhZCk6CisgICAgICAgIHRyID0gc2VsZi5yZWFkX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgZXJyID0gb2JqZWN0KCkKKyAgICAgICAgdHIuX2Nsb3NlKGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmlzX2Nsb3NpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Qoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5yZWFkX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0ci5fbG9vcCkKKworICAgICAgICBlcnIgPSBOb25lCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Rfd2l0aF9lcnIoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi5yZWFkX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0ci5fbG9vcCkKKworICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX2NhbGxfY29ubmVjdGlvbl9sb3N0KGVycikKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKGVycikKKyAgICAgICAgc2VsZi5waXBlLmNsb3NlLmFzc2VydF9jYWxsZWRfd2l0aCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0ci5fbG9vcCkKKworCitjbGFzcyBVbml4V3JpdGVQaXBlVHJhbnNwb3J0VGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucHJvdG9jb2wgPSB0ZXN0X3V0aWxzLm1ha2VfdGVzdF9wcm90b2NvbChhc3luY2lvLkJhc2VQcm90b2NvbCkKKyAgICAgICAgc2VsZi5waXBlID0gbW9jay5Nb2NrKHNwZWNfc2V0PWlvLlJhd0lPQmFzZSkKKyAgICAgICAgc2VsZi5waXBlLmZpbGVuby5yZXR1cm5fdmFsdWUgPSA1CisKKyAgICAgICAgYmxvY2tpbmdfcGF0Y2hlciA9IG1vY2sucGF0Y2goJ2FzeW5jaW8udW5peF9ldmVudHMuX3NldF9ub25ibG9ja2luZycpCisgICAgICAgIGJsb2NraW5nX3BhdGNoZXIuc3RhcnQoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoYmxvY2tpbmdfcGF0Y2hlci5zdG9wKQorCisgICAgICAgIGZzdGF0X3BhdGNoZXIgPSBtb2NrLnBhdGNoKCdvcy5mc3RhdCcpCisgICAgICAgIG1fZnN0YXQgPSBmc3RhdF9wYXRjaGVyLnN0YXJ0KCkKKyAgICAgICAgc3QgPSBtb2NrLk1vY2soKQorICAgICAgICBzdC5zdF9tb2RlID0gc3RhdC5TX0lGU09DSworICAgICAgICBtX2ZzdGF0LnJldHVybl92YWx1ZSA9IHN0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChmc3RhdF9wYXRjaGVyLnN0b3ApCisKKyAgICBkZWYgd3JpdGVfcGlwZV90cmFuc3BvcnQoc2VsZiwgd2FpdGVyPU5vbmUpOgorICAgICAgICB0cmFuc3BvcnQgPSB1bml4X2V2ZW50cy5fVW5peFdyaXRlUGlwZVRyYW5zcG9ydChzZWxmLmxvb3AsIHNlbGYucGlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsb3NlX3BpcGVfdHJhbnNwb3J0LCB0cmFuc3BvcnQpCisgICAgICAgIHJldHVybiB0cmFuc3BvcnQKKworICAgIGRlZiB0ZXN0X2N0b3Ioc2VsZik6CisgICAgICAgIHdhaXRlciA9IGFzeW5jaW8uRnV0dXJlKGxvb3A9c2VsZi5sb29wKQorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQod2FpdGVyPXdhaXRlcikKKyAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZSh3YWl0ZXIpCisKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX21hZGUuYXNzZXJ0X2NhbGxlZF93aXRoKHRyKQorICAgICAgICBzZWxmLmxvb3AuYXNzZXJ0X3JlYWRlcig1LCB0ci5fcmVhZF9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCB3YWl0ZXIucmVzdWx0KCkpCisKKyAgICBkZWYgdGVzdF9jYW5fd3JpdGVfZW9mKHNlbGYpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuY2FuX3dyaXRlX2VvZigpKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX25vX2RhdGEoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLndyaXRlKGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3dyaXRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKworICAgIEBtb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3Rfd3JpdGVfcGFydGlhbChzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSAyCisgICAgICAgIHRyLndyaXRlKGInZGF0YScpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYubG9vcC5hc3NlcnRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbYid0YSddLCB0ci5fYnVmZmVyKQorCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9idWZmZXIoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ3ByZXZpb3VzJ10KKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtX3dyaXRlLmNhbGxlZCkKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ3ByZXZpb3VzJywgYidkYXRhJ10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2FnYWluKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLnVuaXhfZXZlbnRzLmxvZ2dlcicpCisgICAgQG1vY2sucGF0Y2goJ29zLndyaXRlJykKKyAgICBkZWYgdGVzdF93cml0ZV9lcnIoc2VsZiwgbV93cml0ZSwgbV9sb2cpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgbV93cml0ZS5zaWRlX2VmZmVjdCA9IGVycgorICAgICAgICB0ci5fZmF0YWxfZXJyb3IgPSBtb2NrLk1vY2soKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBtX3dyaXRlLmFzc2VydF9jYWxsZWRfd2l0aCg1LCBiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtdLCB0ci5fYnVmZmVyKQorICAgICAgICB0ci5fZmF0YWxfZXJyb3IuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIHRyLl9jb25uX2xvc3QpCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgyLCB0ci5fY29ubl9sb3N0KQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICAjIFRoaXMgaXMgYSBiaXQgb3ZlcnNwZWNpZmllZC4gOi0oCisgICAgICAgIG1fbG9nLndhcm5pbmcuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgJ3BpcGUgY2xvc2VkIGJ5IHBlZXIgb3Igb3Mud3JpdGUocGlwZSwgZGF0YSkgcmFpc2VkIGV4Y2VwdGlvbi4nKQorICAgICAgICB0ci5jbG9zZSgpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X3dyaXRlX2Nsb3NlKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICB0ci5fcmVhZF9yZWFkeSgpICAjIHBpcGUgd2FzIGNsb3NlZCBieSBwZWVyCisKKyAgICAgICAgdHIud3JpdGUoYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ci5fY29ubl9sb3N0LCAxKQorICAgICAgICB0ci53cml0ZShiJ2RhdGEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyLl9jb25uX2xvc3QsIDIpCisKKyAgICBkZWYgdGVzdF9fcmVhZF9yZWFkeShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIuX3JlYWRfcmVhZHkoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC5yZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9vcC53cml0ZXJzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHIuaXNfY2xvc2luZygpKQorICAgICAgICB0ZXN0X3V0aWxzLnJ1bl9icmllZmx5KHNlbGYubG9vcCkKKyAgICAgICAgc2VsZi5wcm90b2NvbC5jb25uZWN0aW9uX2xvc3QuYXNzZXJ0X2NhbGxlZF93aXRoKE5vbmUpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeShzZWxmLCBtX3dyaXRlKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5sb29wLmFkZF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9wYXJ0aWFsKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDMKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2EnXSwgdHIuX2J1ZmZlcikKKworICAgIEBtb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X2FnYWluKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnNpZGVfZWZmZWN0ID0gQmxvY2tpbmdJT0Vycm9yKCkKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEBtb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X2VtcHR5KHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICBtX3dyaXRlLnJldHVybl92YWx1ZSA9IDAKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5sb29wLmFzc2VydF93cml0ZXIoNSwgdHIuX3dyaXRlX3JlYWR5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtiJ2RhdGEnXSwgdHIuX2J1ZmZlcikKKworICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLmxvZy5sb2dnZXIuZXJyb3InKQorICAgIEBtb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfX3dyaXRlX3JlYWR5X2VycihzZWxmLCBtX3dyaXRlLCBtX2xvZ2V4Yyk6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgdHIuX2J1ZmZlciA9IFtiJ2RhJywgYid0YSddCisgICAgICAgIG1fd3JpdGUuc2lkZV9lZmZlY3QgPSBlcnIgPSBPU0Vycm9yKCkKKyAgICAgICAgdHIuX3dyaXRlX3JlYWR5KCkKKyAgICAgICAgbV93cml0ZS5hc3NlcnRfY2FsbGVkX3dpdGgoNSwgYidkYXRhJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3Aud3JpdGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbXSwgdHIuX2J1ZmZlcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmlzX2Nsb3NpbmcoKSkKKyAgICAgICAgbV9sb2dleGMuYXNzZXJ0X2NhbGxlZF93aXRoKAorICAgICAgICAgICAgdGVzdF91dGlscy5Nb2NrUGF0dGVybigKKyAgICAgICAgICAgICAgICAnRmF0YWwgd3JpdGUgZXJyb3Igb24gcGlwZSB0cmFuc3BvcnQnCisgICAgICAgICAgICAgICAgJ1xucHJvdG9jb2w6LipcbnRyYW5zcG9ydDouKicpLAorICAgICAgICAgICAgZXhjX2luZm89KE9TRXJyb3IsIE1PQ0tfQU5ZLCBNT0NLX0FOWSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgdHIuX2Nvbm5fbG9zdCkKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisKKyAgICBAbW9jay5wYXRjaCgnb3Mud3JpdGUnKQorICAgIGRlZiB0ZXN0X193cml0ZV9yZWFkeV9jbG9zaW5nKHNlbGYsIG1fd3JpdGUpOgorICAgICAgICB0ciA9IHNlbGYud3JpdGVfcGlwZV90cmFuc3BvcnQoKQorICAgICAgICBzZWxmLmxvb3AuYWRkX3dyaXRlcig1LCB0ci5fd3JpdGVfcmVhZHkpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5fYnVmZmVyID0gW2InZGEnLCBiJ3RhJ10KKyAgICAgICAgbV93cml0ZS5yZXR1cm5fdmFsdWUgPSA0CisgICAgICAgIHRyLl93cml0ZV9yZWFkeSgpCisgICAgICAgIG1fd3JpdGUuYXNzZXJ0X2NhbGxlZF93aXRoKDUsIGInZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorICAgICAgICBzZWxmLnBpcGUuY2xvc2UuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgIEBtb2NrLnBhdGNoKCdvcy53cml0ZScpCisgICAgZGVmIHRlc3RfYWJvcnQoc2VsZiwgbV93cml0ZSk6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYubG9vcC5hZGRfd3JpdGVyKDUsIHRyLl93cml0ZV9yZWFkeSkKKyAgICAgICAgc2VsZi5sb29wLmFkZF9yZWFkZXIoNSwgdHIuX3JlYWRfcmVhZHkpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYScsIGIndGEnXQorICAgICAgICB0ci5hYm9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobV93cml0ZS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLnJlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb29wLndyaXRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIHRyLl9idWZmZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ci5pc19jbG9zaW5nKCkpCisgICAgICAgIHRlc3RfdXRpbHMucnVuX2JyaWVmbHkoc2VsZi5sb29wKQorICAgICAgICBzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5hc3NlcnRfY2FsbGVkX3dpdGgoTm9uZSkKKworICAgIGRlZiB0ZXN0X19jYWxsX2Nvbm5lY3Rpb25fbG9zdChzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX3Byb3RvY29sKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0ci5fbG9vcCkKKworICAgICAgICBlcnIgPSBOb25lCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisKKyAgICBkZWYgdGVzdF9fY2FsbF9jb25uZWN0aW9uX2xvc3Rfd2l0aF9lcnIoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUodHIuX2xvb3ApCisKKyAgICAgICAgZXJyID0gT1NFcnJvcigpCisgICAgICAgIHRyLl9jYWxsX2Nvbm5lY3Rpb25fbG9zdChlcnIpCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChlcnIpCisgICAgICAgIHNlbGYucGlwZS5jbG9zZS5hc3NlcnRfY2FsbGVkX3dpdGgoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRyLl9wcm90b2NvbCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHIuX2xvb3ApCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIud3JpdGVfZW9mID0gbW9jay5Nb2NrKCkKKyAgICAgICAgdHIuY2xvc2UoKQorICAgICAgICB0ci53cml0ZV9lb2YuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKworICAgICAgICAjIGNsb3NpbmcgdGhlIHRyYW5zcG9ydCB0d2ljZSBtdXN0IG5vdCBmYWlsCisgICAgICAgIHRyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Nsb3Npbmcoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLndyaXRlX2VvZiA9IG1vY2suTW9jaygpCisgICAgICAgIHRyLl9jbG9zaW5nID0gVHJ1ZQorICAgICAgICB0ci5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHIud3JpdGVfZW9mLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3dyaXRlX2VvZihzZWxmKToKKyAgICAgICAgdHIgPSBzZWxmLndyaXRlX3BpcGVfdHJhbnNwb3J0KCkKKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmlzX2Nsb3NpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvb3AucmVhZGVycykKKyAgICAgICAgdGVzdF91dGlscy5ydW5fYnJpZWZseShzZWxmLmxvb3ApCisgICAgICAgIHNlbGYucHJvdG9jb2wuY29ubmVjdGlvbl9sb3N0LmFzc2VydF9jYWxsZWRfd2l0aChOb25lKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfZW9mX3BlbmRpbmcoc2VsZik6CisgICAgICAgIHRyID0gc2VsZi53cml0ZV9waXBlX3RyYW5zcG9ydCgpCisgICAgICAgIHRyLl9idWZmZXIgPSBbYidkYXRhJ10KKyAgICAgICAgdHIud3JpdGVfZW9mKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRyLmlzX2Nsb3NpbmcoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnByb3RvY29sLmNvbm5lY3Rpb25fbG9zdC5jYWxsZWQpCisKKworY2xhc3MgQWJzdHJhY3RDaGlsZFdhdGNoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIGYgPSBtb2NrLk1vY2soKQorICAgICAgICB3YXRjaGVyID0gYXN5bmNpby5BYnN0cmFjdENoaWxkV2F0Y2hlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlciwgZiwgZikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyLCBmKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIE5vdEltcGxlbWVudGVkRXJyb3IsIHdhdGNoZXIuYXR0YWNoX2xvb3AsIGYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLl9fZW50ZXJfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZEVycm9yLCB3YXRjaGVyLl9fZXhpdF9fLCBmLCBmLCBmKQorCisKK2NsYXNzIEJhc2VDaGlsZFdhdGNoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgIGYgPSBtb2NrLk1vY2soKQorICAgICAgICB3YXRjaGVyID0gdW5peF9ldmVudHMuQmFzZUNoaWxkV2F0Y2hlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgTm90SW1wbGVtZW50ZWRFcnJvciwgd2F0Y2hlci5fZG9fd2FpdHBpZCwgZikKKworCitXYWl0UGlkTW9ja3MgPSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCJXYWl0UGlkTW9ja3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIndhaXRwaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldJRkVYSVRFRCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV0lGU0lHTkFMRUQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldFWElUU1RBVFVTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXVEVSTVNJRyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQorCisKK2NsYXNzIENoaWxkV2F0Y2hlclRlc3RzTWl4aW46CisKKyAgICBpZ25vcmVfd2FybmluZ3MgPSBtb2NrLnBhdGNoLm9iamVjdChsb2cubG9nZ2VyLCAid2FybmluZyIpCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuem9tYmllcyA9IHt9CisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AsICJhZGRfc2lnbmFsX2hhbmRsZXIiKSBhcyBzZWxmLm1fYWRkX3NpZ25hbF9oYW5kbGVyOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyID0gc2VsZi5jcmVhdGVfd2F0Y2hlcigpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3Aoc2VsZi5sb29wKQorCisgICAgZGVmIHdhaXRwaWQoc2VsZiwgcGlkLCBmbGFncyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi53YXRjaGVyLCBhc3luY2lvLlNhZmVDaGlsZFdhdGNoZXIpIG9yIHBpZCAhPSAtMToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihwaWQsIDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHBpZCA8IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuem9tYmllcy5wb3BpdGVtKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBpZCwgc2VsZi56b21iaWVzLnBvcChwaWQpCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgc2VsZi5ydW5uaW5nOgorICAgICAgICAgICAgcmV0dXJuIDAsIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIENoaWxkUHJvY2Vzc0Vycm9yKCkKKworICAgIGRlZiBhZGRfem9tYmllKHNlbGYsIHBpZCwgcmV0dXJuY29kZSk6CisgICAgICAgIHNlbGYuem9tYmllc1twaWRdID0gcmV0dXJuY29kZSArIDMyNzY4CisKKyAgICBkZWYgV0lGRVhJVEVEKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHJldHVybiBzdGF0dXMgPj0gMzI3NjgKKworICAgIGRlZiBXSUZTSUdOQUxFRChzZWxmLCBzdGF0dXMpOgorICAgICAgICByZXR1cm4gMzI3MDAgPCBzdGF0dXMgPCAzMjc2OAorCisgICAgZGVmIFdFWElUU1RBVFVTKHNlbGYsIHN0YXR1cyk6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLldJRkVYSVRFRChzdGF0dXMpKQorICAgICAgICByZXR1cm4gc3RhdHVzIC0gMzI3NjgKKworICAgIGRlZiBXVEVSTVNJRyhzZWxmLCBzdGF0dXMpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5XSUZTSUdOQUxFRChzdGF0dXMpKQorICAgICAgICByZXR1cm4gMzI3NjggLSBzdGF0dXMKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV93YXRjaGVyKHNlbGYpOgorICAgICAgICBzZWxmLm1fYWRkX3NpZ25hbF9oYW5kbGVyLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQsIHNlbGYud2F0Y2hlci5fc2lnX2NobGQpCisKKyAgICBkZWYgd2FpdHBpZF9tb2NrcyhmdW5jKToKKyAgICAgICAgZGVmIHdyYXBwZWRfZnVuYyhzZWxmKToKKyAgICAgICAgICAgIGRlZiBwYXRjaCh0YXJnZXQsIHdyYXBwZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2NrLnBhdGNoKHRhcmdldCwgd3JhcHM9d3JhcHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfY2FsbGFibGU9bW9jay5Nb2NrKQorCisgICAgICAgICAgICB3aXRoIHBhdGNoKCdvcy5XVEVSTVNJRycsIHNlbGYuV1RFUk1TSUcpIGFzIG1fV1RFUk1TSUcsIFwKKyAgICAgICAgICAgICAgICAgcGF0Y2goJ29zLldFWElUU1RBVFVTJywgc2VsZi5XRVhJVFNUQVRVUykgYXMgbV9XRVhJVFNUQVRVUywgXAorICAgICAgICAgICAgICAgICBwYXRjaCgnb3MuV0lGU0lHTkFMRUQnLCBzZWxmLldJRlNJR05BTEVEKSBhcyBtX1dJRlNJR05BTEVELCBcCisgICAgICAgICAgICAgICAgIHBhdGNoKCdvcy5XSUZFWElURUQnLCBzZWxmLldJRkVYSVRFRCkgYXMgbV9XSUZFWElURUQsIFwKKyAgICAgICAgICAgICAgICAgcGF0Y2goJ29zLndhaXRwaWQnLCBzZWxmLndhaXRwaWQpIGFzIG1fd2FpdHBpZDoKKyAgICAgICAgICAgICAgICBmdW5jKHNlbGYsIFdhaXRQaWRNb2NrcyhtX3dhaXRwaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9XSUZFWElURUQsIG1fV0lGU0lHTkFMRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9XRVhJVFNUQVRVUywgbV9XVEVSTVNJRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApKQorICAgICAgICByZXR1cm4gd3JhcHBlZF9mdW5jCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGQoc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICBjYWxsYmFjayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNDIsIGNhbGxiYWNrLCA5LCAxMCwgMTQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgaXMgcnVubmluZworICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzIChyZXR1cm5jb2RlIDEyKQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDIsIDEyKQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQyLCAxMiwgOSwgMTAsIDE0KQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldFWElUU1RBVFVTLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjay5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZCBpcyBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQyLCAxMykKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGRVhJVEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldFWElUU1RBVFVTLnJlc2V0X21vY2soKQorCisgICAgICAgICMgc2lnY2hsZCBjYWxsZWQgYWdhaW4KKyAgICAgICAgc2VsZi56b21iaWVzLmNsZWFyKCkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3R3b19jaGlsZHJlbihzZWxmLCBtKToKKyAgICAgICAgY2FsbGJhY2sxID0gbW9jay5Nb2NrKCkKKyAgICAgICAgY2FsbGJhY2syID0gbW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGNoaWxkIDEKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNDMsIGNhbGxiYWNrMSwgNywgOCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZCAyCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQ0LCBjYWxsYmFjazIsIDE0NywgMTgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGRyZW4gYXJlIHJ1bm5pbmcKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgMSB0ZXJtaW5hdGVzIChzaWduYWwgMykKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDQzLCAtMykKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2sxLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDQzLCAtMywgNywgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XVEVSTVNJRy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2sxLnJlc2V0X21vY2soKQorCisgICAgICAgICMgY2hpbGQgMiBzdGlsbCBydW5uaW5nCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIGNoaWxkIDIgdGVybWluYXRlcyAoY29kZSAxMDgpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NCwgMTA4KQorICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjazIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDQsIDEwOCwgMTQ3LCAxOCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0VYSVRTVEFUVVMucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMi5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZHJlbiBhcmUgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0MywgMTQpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NCwgMTUpCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKworICAgICAgICAjIHNpZ2NobGQgY2FsbGVkIGFnYWluCisgICAgICAgIHNlbGYuem9tYmllcy5jbGVhcigpCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF90d29fY2hpbGRyZW5fdGVybWluYXRpbmdfdG9nZXRoZXIoc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrMSA9IG1vY2suTW9jaygpCisgICAgICAgIGNhbGxiYWNrMiA9IG1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBjaGlsZCAxCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDQ1LCBjYWxsYmFjazEsIDE3LCA4KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHJlZ2lzdGVyIGNoaWxkIDIKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNDYsIGNhbGxiYWNrMiwgMTE0NywgMTgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGRyZW4gYXJlIHJ1bm5pbmcKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgMSB0ZXJtaW5hdGVzIChjb2RlIDc4KQorICAgICAgICAjIGNoaWxkIDIgdGVybWluYXRlcyAoc2lnbmFsIDUpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NSwgNzgpCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg0NiwgLTUpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg0NSwgNzgsIDE3LCA4KQorICAgICAgICBjYWxsYmFjazIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNDYsIC01LCAxMTQ3LCAxOCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBtLldJRlNJR05BTEVELnJlc2V0X21vY2soKQorICAgICAgICBtLldJRkVYSVRFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XVEVSTVNJRy5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XRVhJVFNUQVRVUy5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2sxLnJlc2V0X21vY2soKQorICAgICAgICBjYWxsYmFjazIucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGRyZW4gYXJlIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDUsIDE0KQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNDYsIDE1KQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmFjZV9jb25kaXRpb24oc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICBjYWxsYmFjayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMgYmVmb3JlIGJlaW5nIHJlZ2lzdGVyZWQKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MCwgNCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTAsIGNhbGxiYWNrLCAxLCAxMikKKworICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1MCwgNCwgMSwgMTIpCisgICAgICAgIGNhbGxiYWNrLnJlc2V0X21vY2soKQorCisgICAgICAgICMgZW5zdXJlIHRoYXQgdGhlIGNoaWxkIGlzIGVmZmVjdGl2ZWx5IHJlYXBlZAorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTAsIC0xKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfcmVwbGFjZV9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSBtb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MSwgY2FsbGJhY2sxLCAxOSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyByZWdpc3RlciB0aGUgc2FtZSBjaGlsZCBhZ2FpbgorICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1MSwgY2FsbGJhY2syLCAyMSkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyBjaGlsZCB0ZXJtaW5hdGVzIChzaWduYWwgOCkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUxLCAtOCkKKyAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgY2FsbGJhY2syLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUxLCAtOCwgMjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgbS5XSUZTSUdOQUxFRC5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV1RFUk1TSUcucmVzZXRfbW9jaygpCisgICAgICAgIGNhbGxiYWNrMi5yZXNldF9tb2NrKCkKKworICAgICAgICAjIGVuc3VyZSB0aGF0IHRoZSBjaGlsZCBpcyBlZmZlY3RpdmVseSByZWFwZWQKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUxLCAxMykKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2sxLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3JlbW92ZV9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUyLCBjYWxsYmFjaywgMTk4NCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZTSUdOQUxFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XRVhJVFNUQVRVUy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XVEVSTVNJRy5jYWxsZWQpCisKKyAgICAgICAgIyB1bnJlZ2lzdGVyIHRoZSBjaGlsZAorICAgICAgICBzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcyAoY29kZSA5OSkKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDUyLCA5OSkKKyAgICAgICAgd2l0aCBzZWxmLmlnbm9yZV93YXJuaW5nczoKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3Vua25vd25fc3RhdHVzKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDUzLCBjYWxsYmFjaywgLTE5KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGRVhJVEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICAjIHRlcm1pbmF0ZSB3aXRoIHVua25vd24gc3RhdHVzCisgICAgICAgIHNlbGYuem9tYmllc1s1M10gPSAxMTc4CisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgIGNhbGxiYWNrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDUzLCAxMTc4LCAtMTkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRkVYSVRFRC5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLldJRlNJR05BTEVELmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldFWElUU1RBVFVTLmNhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtLldURVJNU0lHLmNhbGxlZCkKKworICAgICAgICBjYWxsYmFjay5yZXNldF9tb2NrKCkKKyAgICAgICAgbS5XSUZFWElURUQucmVzZXRfbW9jaygpCisgICAgICAgIG0uV0lGU0lHTkFMRUQucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgY2hpbGQgaXMgZWZmZWN0aXZlbHkgcmVhcGVkCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1MywgMTAxKQorICAgICAgICB3aXRoIHNlbGYuaWdub3JlX3dhcm5pbmdzOgorICAgICAgICAgICAgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3JlbW92ZV9jaGlsZF9oYW5kbGVyKHNlbGYsIG0pOgorICAgICAgICBjYWxsYmFjazEgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazMgPSBtb2NrLk1vY2soKQorCisgICAgICAgICMgcmVnaXN0ZXIgY2hpbGRyZW4KKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTQsIGNhbGxiYWNrMSwgMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1NSwgY2FsbGJhY2syLCAyKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU2LCBjYWxsYmFjazMsIDMpCisKKyAgICAgICAgIyByZW1vdmUgY2hpbGQgaGFuZGxlciAxCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTQpKQorCisgICAgICAgICMgcmVtb3ZlIGNoaWxkIGhhbmRsZXIgMiBtdWx0aXBsZSB0aW1lcworICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi53YXRjaGVyLnJlbW92ZV9jaGlsZF9oYW5kbGVyKDU1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIucmVtb3ZlX2NoaWxkX2hhbmRsZXIoNTUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYud2F0Y2hlci5yZW1vdmVfY2hpbGRfaGFuZGxlcig1NSkpCisKKyAgICAgICAgIyBhbGwgY2hpbGRyZW4gdGVybWluYXRlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1NCwgMCkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDU1LCAxKQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTYsIDIpCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2szLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDU2LCAyLCAzKQorCisgICAgQHdhaXRwaWRfbW9ja3MKKyAgICBkZWYgdGVzdF9zaWdjaGxkX3VuaGFuZGxlZF9leGNlcHRpb24oc2VsZiwgbSk6CisgICAgICAgIGNhbGxiYWNrID0gbW9jay5Nb2NrKCkKKworICAgICAgICAjIHJlZ2lzdGVyIGEgY2hpbGQKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNTcsIGNhbGxiYWNrKQorCisgICAgICAgICMgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgIG0ud2FpdHBpZC5zaWRlX2VmZmVjdCA9IFZhbHVlRXJyb3IKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KGxvZy5sb2dnZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vycm9yJykgYXMgbV9lcnJvcjoKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobV9lcnJvci5jYWxsZWQpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X3NpZ2NobGRfY2hpbGRfcmVhcGVkX2Vsc2V3aGVyZShzZWxmLCBtKToKKyAgICAgICAgIyByZWdpc3RlciBhIGNoaWxkCisgICAgICAgIGNhbGxiYWNrID0gbW9jay5Nb2NrKCkKKworICAgICAgICB3aXRoIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig1OCwgY2FsbGJhY2spCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjay5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5XSUZFWElURUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0lGU0lHTkFMRUQuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV0VYSVRTVEFUVVMuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uV1RFUk1TSUcuY2FsbGVkKQorCisgICAgICAgICMgY2hpbGQgdGVybWluYXRlcworICAgICAgICBzZWxmLnJ1bm5pbmcgPSBGYWxzZQorICAgICAgICBzZWxmLmFkZF96b21iaWUoNTgsIDQpCisKKyAgICAgICAgIyB3YWl0cGlkIGlzIGNhbGxlZCBlbHNld2hlcmUKKyAgICAgICAgb3Mud2FpdHBpZCg1OCwgb3MuV05PSEFORykKKworICAgICAgICBtLndhaXRwaWQucmVzZXRfbW9jaygpCisKKyAgICAgICAgIyBzaWdjaGxkCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3M6CisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgYXN5bmNpby5GYXN0Q2hpbGRXYXRjaGVyKToKKyAgICAgICAgICAgICMgaGVyZSB0aGUgRmFzdENoaWxkV2F0Y2hlIGVudGVycyBhIGRlYWRsb2NrCisgICAgICAgICAgICAjICh0aGVyZSBpcyBubyB3YXkgdG8gcHJldmVudCBpdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2suY2FsbGVkKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2FsbGJhY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNTgsIDI1NSkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2lnY2hsZF91bmtub3duX3BpZF9kdXJpbmdfcmVnaXN0cmF0aW9uKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIHR3byBjaGlsZHJlbgorICAgICAgICBjYWxsYmFjazEgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi5pZ25vcmVfd2FybmluZ3MsIHNlbGYud2F0Y2hlcjoKKyAgICAgICAgICAgIHNlbGYucnVubmluZyA9IFRydWUKKyAgICAgICAgICAgICMgY2hpbGQgMSB0ZXJtaW5hdGVzCisgICAgICAgICAgICBzZWxmLmFkZF96b21iaWUoNTkxLCA3KQorICAgICAgICAgICAgIyBhbiB1bmtub3duIGNoaWxkIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg1OTMsIDE3KQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU5MSwgY2FsbGJhY2sxKQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDU5MiwgY2FsbGJhY2syKQorCisgICAgICAgIGNhbGxiYWNrMS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg1OTEsIDcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2V0X2xvb3Aoc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgYSBjaGlsZAorICAgICAgICBjYWxsYmFjayA9IG1vY2suTW9jaygpCisKKyAgICAgICAgd2l0aCBzZWxmLndhdGNoZXI6CisgICAgICAgICAgICBzZWxmLnJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjAsIGNhbGxiYWNrKQorCisgICAgICAgICMgYXR0YWNoIGEgbmV3IGxvb3AKKyAgICAgICAgb2xkX2xvb3AgPSBzZWxmLmxvb3AKKyAgICAgICAgc2VsZi5sb29wID0gc2VsZi5uZXdfdGVzdF9sb29wKCkKKyAgICAgICAgcGF0Y2ggPSBtb2NrLnBhdGNoLm9iamVjdAorCisgICAgICAgIHdpdGggcGF0Y2gob2xkX2xvb3AsICJyZW1vdmVfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX29sZF9yZW1vdmUsIFwKKyAgICAgICAgICAgICBwYXRjaChzZWxmLmxvb3AsICJhZGRfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX25ld19hZGQ6CisKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hdHRhY2hfbG9vcChzZWxmLmxvb3ApCisKKyAgICAgICAgICAgIG1fb2xkX3JlbW92ZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCkKKyAgICAgICAgICAgIG1fbmV3X2FkZC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICBzaWduYWwuU0lHQ0hMRCwgc2VsZi53YXRjaGVyLl9zaWdfY2hsZCkKKworICAgICAgICAjIGNoaWxkIHRlcm1pbmF0ZXMKKyAgICAgICAgc2VsZi5ydW5uaW5nID0gRmFsc2UKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDYwLCA5KQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBjYWxsYmFjay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg2MCwgOSkKKworICAgIEB3YWl0cGlkX21vY2tzCisgICAgZGVmIHRlc3Rfc2V0X2xvb3BfcmFjZV9jb25kaXRpb24oc2VsZiwgbSk6CisgICAgICAgICMgcmVnaXN0ZXIgMyBjaGlsZHJlbgorICAgICAgICBjYWxsYmFjazEgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazIgPSBtb2NrLk1vY2soKQorICAgICAgICBjYWxsYmFjazMgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgc2VsZi53YXRjaGVyLmFkZF9jaGlsZF9oYW5kbGVyKDYxLCBjYWxsYmFjazEpCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjIsIGNhbGxiYWNrMikKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2MjIsIGNhbGxiYWNrMykKKworICAgICAgICAjIGRldGFjaCB0aGUgbG9vcAorICAgICAgICBvbGRfbG9vcCA9IHNlbGYubG9vcAorICAgICAgICBzZWxmLmxvb3AgPSBOb25lCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBvbGRfbG9vcCwgInJlbW92ZV9zaWduYWxfaGFuZGxlciIpIGFzIG1fcmVtb3ZlX3NpZ25hbF9oYW5kbGVyOgorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYXR0YWNoX2xvb3AoTm9uZSkKKworICAgICAgICAgICAgbV9yZW1vdmVfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQpCisKKyAgICAgICAgIyBjaGlsZCAxICYgMiB0ZXJtaW5hdGUKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDYxLCAxMSkKKyAgICAgICAgc2VsZi5hZGRfem9tYmllKDYyLCAtNSkKKworICAgICAgICAjIFNJR0NITEQgd2FzIG5vdCBjYXVnaHQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazEuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMi5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2szLmNhbGxlZCkKKworICAgICAgICAjIGF0dGFjaCBhIG5ldyBsb29wCisgICAgICAgIHNlbGYubG9vcCA9IHNlbGYubmV3X3Rlc3RfbG9vcCgpCisKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdCgKKyAgICAgICAgICAgICAgICBzZWxmLmxvb3AsICJhZGRfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX2FkZF9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgc2VsZi53YXRjaGVyLmF0dGFjaF9sb29wKHNlbGYubG9vcCkKKworICAgICAgICAgICAgbV9hZGRfc2lnbmFsX2hhbmRsZXIuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQsIHNlbGYud2F0Y2hlci5fc2lnX2NobGQpCisgICAgICAgICAgICBjYWxsYmFjazEuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoNjEsIDExKSAgIyByYWNlIGNvbmRpdGlvbiEKKyAgICAgICAgICAgIGNhbGxiYWNrMi5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCg2MiwgLTUpICAjIHJhY2UgY29uZGl0aW9uIQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjYWxsYmFjazMuY2FsbGVkKQorCisgICAgICAgIGNhbGxiYWNrMS5yZXNldF9tb2NrKCkKKyAgICAgICAgY2FsbGJhY2syLnJlc2V0X21vY2soKQorCisgICAgICAgICMgY2hpbGQgMyB0ZXJtaW5hdGVzCisgICAgICAgIHNlbGYucnVubmluZyA9IEZhbHNlCisgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MjIsIDE5KQorICAgICAgICBzZWxmLndhdGNoZXIuX3NpZ19jaGxkKCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNhbGxiYWNrMS5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2FsbGJhY2syLmNhbGxlZCkKKyAgICAgICAgY2FsbGJhY2szLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDYyMiwgMTkpCisKKyAgICBAd2FpdHBpZF9tb2NrcworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYsIG0pOgorICAgICAgICAjIHJlZ2lzdGVyIHR3byBjaGlsZHJlbgorICAgICAgICBjYWxsYmFjazEgPSBtb2NrLk1vY2soKQorCisgICAgICAgIHdpdGggc2VsZi53YXRjaGVyOgorICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gVHJ1ZQorICAgICAgICAgICAgIyBjaGlsZCAxIHRlcm1pbmF0ZXMKKyAgICAgICAgICAgIHNlbGYuYWRkX3pvbWJpZSg2MywgOSkKKyAgICAgICAgICAgICMgb3RoZXIgY2hpbGQgdGVybWluYXRlcworICAgICAgICAgICAgc2VsZi5hZGRfem9tYmllKDY1LCAxOCkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5fc2lnX2NobGQoKQorCisgICAgICAgICAgICBzZWxmLndhdGNoZXIuYWRkX2NoaWxkX2hhbmRsZXIoNjMsIGNhbGxiYWNrMSkKKyAgICAgICAgICAgIHNlbGYud2F0Y2hlci5hZGRfY2hpbGRfaGFuZGxlcig2NCwgY2FsbGJhY2sxKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLndhdGNoZXIuX2NhbGxiYWNrcyksIDEpCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgYXN5bmNpby5GYXN0Q2hpbGRXYXRjaGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLndhdGNoZXIuX3pvbWJpZXMpLCAxKQorCisgICAgICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KAorICAgICAgICAgICAgICAgICAgICBzZWxmLmxvb3AsCisgICAgICAgICAgICAgICAgICAgICJyZW1vdmVfc2lnbmFsX2hhbmRsZXIiKSBhcyBtX3JlbW92ZV9zaWduYWxfaGFuZGxlcjoKKworICAgICAgICAgICAgICAgIHNlbGYud2F0Y2hlci5jbG9zZSgpCisKKyAgICAgICAgICAgICAgICBtX3JlbW92ZV9zaWduYWxfaGFuZGxlci5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgICAgICAgICAgc2lnbmFsLlNJR0NITEQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIuX2NhbGxiYWNrcykKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYud2F0Y2hlciwgYXN5bmNpby5GYXN0Q2hpbGRXYXRjaGVyKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLndhdGNoZXIuX3pvbWJpZXMpCisKKworY2xhc3MgU2FmZUNoaWxkV2F0Y2hlclRlc3RzIChDaGlsZFdhdGNoZXJUZXN0c01peGluLCB0ZXN0X3V0aWxzLlRlc3RDYXNlKToKKyAgICBkZWYgY3JlYXRlX3dhdGNoZXIoc2VsZik6CisgICAgICAgIHJldHVybiBhc3luY2lvLlNhZmVDaGlsZFdhdGNoZXIoKQorCisKK2NsYXNzIEZhc3RDaGlsZFdhdGNoZXJUZXN0cyAoQ2hpbGRXYXRjaGVyVGVzdHNNaXhpbiwgdGVzdF91dGlscy5UZXN0Q2FzZSk6CisgICAgZGVmIGNyZWF0ZV93YXRjaGVyKHNlbGYpOgorICAgICAgICByZXR1cm4gYXN5bmNpby5GYXN0Q2hpbGRXYXRjaGVyKCkKKworCitjbGFzcyBQb2xpY3lUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgY3JlYXRlX3BvbGljeShzZWxmKToKKyAgICAgICAgcmV0dXJuIGFzeW5jaW8uRGVmYXVsdEV2ZW50TG9vcFBvbGljeSgpCisKKyAgICBkZWYgdGVzdF9nZXRfY2hpbGRfd2F0Y2hlcihzZWxmKToKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocG9saWN5Ll93YXRjaGVyKQorCisgICAgICAgIHdhdGNoZXIgPSBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod2F0Y2hlciwgYXN5bmNpby5TYWZlQ2hpbGRXYXRjaGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocG9saWN5Ll93YXRjaGVyLCB3YXRjaGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlciwgcG9saWN5LmdldF9jaGlsZF93YXRjaGVyKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdhdGNoZXIuX2xvb3ApCisKKyAgICBkZWYgdGVzdF9nZXRfY2hpbGRfd2F0Y2hlcl9hZnRlcl9zZXQoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIHdhdGNoZXIgPSBhc3luY2lvLkZhc3RDaGlsZFdhdGNoZXIoKQorCisgICAgICAgIHBvbGljeS5zZXRfY2hpbGRfd2F0Y2hlcih3YXRjaGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHBvbGljeS5fd2F0Y2hlciwgd2F0Y2hlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLCBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKSkKKworICAgIGRlZiB0ZXN0X2dldF9jaGlsZF93YXRjaGVyX3dpdGhfbWFpbmxvb3BfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBvbGljeS5fd2F0Y2hlcikKKyAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHdhdGNoZXIsIGFzeW5jaW8uU2FmZUNoaWxkV2F0Y2hlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3YXRjaGVyLl9sb29wLCBsb29wKQorCisgICAgICAgIGxvb3AuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZ2V0X2NoaWxkX3dhdGNoZXJfdGhyZWFkKHNlbGYpOgorCisgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICBwb2xpY3kuc2V0X2V2ZW50X2xvb3AocG9saWN5Lm5ld19ldmVudF9sb29wKCkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3luY2lvLkFic3RyYWN0RXZlbnRMb29wKQorICAgICAgICAgICAgd2F0Y2hlciA9IHBvbGljeS5nZXRfY2hpbGRfd2F0Y2hlcigpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh3YXRjaGVyLCBhc3luY2lvLlNhZmVDaGlsZFdhdGNoZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3YXRjaGVyLl9sb29wKQorCisgICAgICAgICAgICBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKS5jbG9zZSgpCisKKyAgICAgICAgcG9saWN5ID0gc2VsZi5jcmVhdGVfcG9saWN5KCkKKworICAgICAgICB0aCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHRoLnN0YXJ0KCkKKyAgICAgICAgdGguam9pbigpCisKKyAgICBkZWYgdGVzdF9jaGlsZF93YXRjaGVyX3JlcGxhY2VfbWFpbmxvb3BfZXhpc3Rpbmcoc2VsZik6CisgICAgICAgIHBvbGljeSA9IHNlbGYuY3JlYXRlX3BvbGljeSgpCisgICAgICAgIGxvb3AgPSBwb2xpY3kuZ2V0X2V2ZW50X2xvb3AoKQorCisgICAgICAgIHdhdGNoZXIgPSBwb2xpY3kuZ2V0X2NoaWxkX3dhdGNoZXIoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlci5fbG9vcCwgbG9vcCkKKworICAgICAgICBuZXdfbG9vcCA9IHBvbGljeS5uZXdfZXZlbnRfbG9vcCgpCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChuZXdfbG9vcCkKKworICAgICAgICBzZWxmLmFzc2VydElzKHdhdGNoZXIuX2xvb3AsIG5ld19sb29wKQorCisgICAgICAgIHBvbGljeS5zZXRfZXZlbnRfbG9vcChOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod2F0Y2hlci5fbG9vcCwgTm9uZSkKKworICAgICAgICBsb29wLmNsb3NlKCkKKyAgICAgICAgbmV3X2xvb3AuY2xvc2UoKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX2V2ZW50cy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfZXZlbnRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmY2Y0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2FzeW5jaW8vdGVzdF93aW5kb3dzX2V2ZW50cy5weQpAQCAtMCwwICsxLDE2MSBAQAoraW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ1dpbmRvd3Mgb25seScpCisKK2ltcG9ydCBfd2luYXBpCisKK2ltcG9ydCBhc3luY2lvCitmcm9tIGFzeW5jaW8gaW1wb3J0IF9vdmVybGFwcGVkCitmcm9tIGFzeW5jaW8gaW1wb3J0IHRlc3RfdXRpbHMKK2Zyb20gYXN5bmNpbyBpbXBvcnQgd2luZG93c19ldmVudHMKKworCitjbGFzcyBVcHBlclByb3RvKGFzeW5jaW8uUHJvdG9jb2wpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5idWYgPSBbXQorCisgICAgZGVmIGNvbm5lY3Rpb25fbWFkZShzZWxmLCB0cmFucyk6CisgICAgICAgIHNlbGYudHJhbnMgPSB0cmFucworCisgICAgZGVmIGRhdGFfcmVjZWl2ZWQoc2VsZiwgZGF0YSk6CisgICAgICAgIHNlbGYuYnVmLmFwcGVuZChkYXRhKQorICAgICAgICBpZiBiJ1xuJyBpbiBkYXRhOgorICAgICAgICAgICAgc2VsZi50cmFucy53cml0ZShiJycuam9pbihzZWxmLmJ1ZikudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYudHJhbnMuY2xvc2UoKQorCisKK2NsYXNzIFByb2FjdG9yVGVzdHModGVzdF91dGlscy5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubG9vcCA9IGFzeW5jaW8uUHJvYWN0b3JFdmVudExvb3AoKQorICAgICAgICBzZWxmLnNldF9ldmVudF9sb29wKHNlbGYubG9vcCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBhLCBiID0gc2VsZi5sb29wLl9zb2NrZXRwYWlyKCkKKyAgICAgICAgdHJhbnMgPSBzZWxmLmxvb3AuX21ha2Vfc29ja2V0X3RyYW5zcG9ydChhLCBhc3luY2lvLlByb3RvY29sKCkpCisgICAgICAgIGYgPSBhc3luY2lvLmVuc3VyZV9mdXR1cmUoc2VsZi5sb29wLnNvY2tfcmVjdihiLCAxMDApKQorICAgICAgICB0cmFucy5jbG9zZSgpCisgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlc3VsdCgpLCBiJycpCisgICAgICAgIGIuY2xvc2UoKQorCisgICAgZGVmIHRlc3RfZG91YmxlX2JpbmQoc2VsZik6CisgICAgICAgIEFERFJFU1MgPSByJ1xcLlxwaXBlXHRlc3RfZG91YmxlX2JpbmQtJXMnICUgb3MuZ2V0cGlkKCkKKyAgICAgICAgc2VydmVyMSA9IHdpbmRvd3NfZXZlbnRzLlBpcGVTZXJ2ZXIoQUREUkVTUykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2luZG93c19ldmVudHMuUGlwZVNlcnZlcihBRERSRVNTKQorICAgICAgICBzZXJ2ZXIxLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3BpcGUoc2VsZik6CisgICAgICAgIHJlcyA9IHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUoc2VsZi5fdGVzdF9waXBlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCAnZG9uZScpCisKKyAgICBkZWYgX3Rlc3RfcGlwZShzZWxmKToKKyAgICAgICAgQUREUkVTUyA9IHInXFwuXHBpcGVcX3Rlc3RfcGlwZS0lcycgJSBvcy5nZXRwaWQoKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZU5vdEZvdW5kRXJyb3IpOgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmxvb3AuY3JlYXRlX3BpcGVfY29ubmVjdGlvbigKKyAgICAgICAgICAgICAgICBhc3luY2lvLlByb3RvY29sLCBBRERSRVNTKQorCisgICAgICAgIFtzZXJ2ZXJdID0geWllbGQgZnJvbSBzZWxmLmxvb3Auc3RhcnRfc2VydmluZ19waXBlKAorICAgICAgICAgICAgVXBwZXJQcm90bywgQUREUkVTUykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlcnZlciwgd2luZG93c19ldmVudHMuUGlwZVNlcnZlcikKKworICAgICAgICBjbGllbnRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoNSk6CisgICAgICAgICAgICBzdHJlYW1fcmVhZGVyID0gYXN5bmNpby5TdHJlYW1SZWFkZXIobG9vcD1zZWxmLmxvb3ApCisgICAgICAgICAgICBwcm90b2NvbCA9IGFzeW5jaW8uU3RyZWFtUmVhZGVyUHJvdG9jb2woc3RyZWFtX3JlYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29wPXNlbGYubG9vcCkKKyAgICAgICAgICAgIHRyYW5zLCBwcm90byA9IHlpZWxkIGZyb20gc2VsZi5sb29wLmNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgbGFtYmRhOiBwcm90b2NvbCwgQUREUkVTUykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cmFucywgYXN5bmNpby5UcmFuc3BvcnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb3RvY29sLCBwcm90bykKKyAgICAgICAgICAgIGNsaWVudHMuYXBwZW5kKChzdHJlYW1fcmVhZGVyLCB0cmFucykpCisKKyAgICAgICAgZm9yIGksIChyLCB3KSBpbiBlbnVtZXJhdGUoY2xpZW50cyk6CisgICAgICAgICAgICB3LndyaXRlKCdsb3dlci17fVxuJy5mb3JtYXQoaSkuZW5jb2RlKCkpCisKKyAgICAgICAgZm9yIGksIChyLCB3KSBpbiBlbnVtZXJhdGUoY2xpZW50cyk6CisgICAgICAgICAgICByZXNwb25zZSA9IHlpZWxkIGZyb20gci5yZWFkbGluZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLCAnTE9XRVIte31cbicuZm9ybWF0KGkpLmVuY29kZSgpKQorICAgICAgICAgICAgdy5jbG9zZSgpCisKKyAgICAgICAgc2VydmVyLmNsb3NlKCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgIHlpZWxkIGZyb20gc2VsZi5sb29wLmNyZWF0ZV9waXBlX2Nvbm5lY3Rpb24oCisgICAgICAgICAgICAgICAgYXN5bmNpby5Qcm90b2NvbCwgQUREUkVTUykKKworICAgICAgICByZXR1cm4gJ2RvbmUnCisKKyAgICBkZWYgdGVzdF9jb25uZWN0X3BpcGVfY2FuY2VsKHNlbGYpOgorICAgICAgICBleGMgPSBPU0Vycm9yKCkKKyAgICAgICAgZXhjLndpbmVycm9yID0gX292ZXJsYXBwZWQuRVJST1JfUElQRV9CVVNZCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3QoX292ZXJsYXBwZWQsICdDb25uZWN0UGlwZScsIHNpZGVfZWZmZWN0PWV4YykgYXMgY29ubmVjdDoKKyAgICAgICAgICAgIGNvcm8gPSBzZWxmLmxvb3AuX3Byb2FjdG9yLmNvbm5lY3RfcGlwZSgncGlwZV9hZGRyZXNzJykKKyAgICAgICAgICAgIHRhc2sgPSBzZWxmLmxvb3AuY3JlYXRlX3Rhc2soY29ybykKKworICAgICAgICAgICAgIyBjaGVjayB0aGF0IGl0J3MgcG9zc2libGUgdG8gY2FuY2VsIGNvbm5lY3RfcGlwZSgpCisgICAgICAgICAgICB0YXNrLmNhbmNlbCgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgICAgIHNlbGYubG9vcC5ydW5fdW50aWxfY29tcGxldGUodGFzaykKKworICAgIGRlZiB0ZXN0X3dhaXRfZm9yX2hhbmRsZShzZWxmKToKKyAgICAgICAgZXZlbnQgPSBfb3ZlcmxhcHBlZC5DcmVhdGVFdmVudChOb25lLCBUcnVlLCBGYWxzZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKF93aW5hcGkuQ2xvc2VIYW5kbGUsIGV2ZW50KQorCisgICAgICAgICMgV2FpdCBmb3IgdW5zZXQgZXZlbnQgd2l0aCAwLjVzIHRpbWVvdXQ7CisgICAgICAgICMgcmVzdWx0IHNob3VsZCBiZSBGYWxzZSBhdCB0aW1lb3V0CisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGV2ZW50LCAwLjUpCisgICAgICAgIHN0YXJ0ID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBkb25lID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgIGVsYXBzZWQgPSBzZWxmLmxvb3AudGltZSgpIC0gc3RhcnQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZ1dC5yZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAuNDggPCBlbGFwc2VkIDwgMC45LCBlbGFwc2VkKQorCisgICAgICAgIF9vdmVybGFwcGVkLlNldEV2ZW50KGV2ZW50KQorCisgICAgICAgICMgV2FpdCBmb3Igc2V0IGV2ZW50OworICAgICAgICAjIHJlc3VsdCBzaG91bGQgYmUgVHJ1ZSBpbW1lZGlhdGVseQorICAgICAgICBmdXQgPSBzZWxmLmxvb3AuX3Byb2FjdG9yLndhaXRfZm9yX2hhbmRsZShldmVudCwgMTApCisgICAgICAgIHN0YXJ0ID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICBkb25lID0gc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgIGVsYXBzZWQgPSBzZWxmLmxvb3AudGltZSgpIC0gc3RhcnQKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvbmUsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmdXQucmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDw9IGVsYXBzZWQgPCAwLjMsIGVsYXBzZWQpCisKKyAgICAgICAgIyBhc3luY2lvIGlzc3VlICMxOTU6IGNhbmNlbGxpbmcgYSBkb25lIF9XYWl0SGFuZGxlRnV0dXJlCisgICAgICAgICMgbXVzdCBub3QgY3Jhc2gKKyAgICAgICAgZnV0LmNhbmNlbCgpCisKKyAgICBkZWYgdGVzdF93YWl0X2Zvcl9oYW5kbGVfY2FuY2VsKHNlbGYpOgorICAgICAgICBldmVudCA9IF9vdmVybGFwcGVkLkNyZWF0ZUV2ZW50KE5vbmUsIFRydWUsIEZhbHNlLCBOb25lKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoX3dpbmFwaS5DbG9zZUhhbmRsZSwgZXZlbnQpCisKKyAgICAgICAgIyBXYWl0IGZvciB1bnNldCBldmVudCB3aXRoIGEgY2FuY2VsbGVkIGZ1dHVyZTsKKyAgICAgICAgIyBDYW5jZWxsZWRFcnJvciBzaG91bGQgYmUgcmFpc2VkIGltbWVkaWF0ZWx5CisgICAgICAgIGZ1dCA9IHNlbGYubG9vcC5fcHJvYWN0b3Iud2FpdF9mb3JfaGFuZGxlKGV2ZW50LCAxMCkKKyAgICAgICAgZnV0LmNhbmNlbCgpCisgICAgICAgIHN0YXJ0ID0gc2VsZi5sb29wLnRpbWUoKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGFzeW5jaW8uQ2FuY2VsbGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5sb29wLnJ1bl91bnRpbF9jb21wbGV0ZShmdXQpCisgICAgICAgIGVsYXBzZWQgPSBzZWxmLmxvb3AudGltZSgpIC0gc3RhcnQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gZWxhcHNlZCA8IDAuMSwgZWxhcHNlZCkKKworICAgICAgICAjIGFzeW5jaW8gaXNzdWUgIzE5NTogY2FuY2VsbGluZyBhIF9XYWl0SGFuZGxlRnV0dXJlIHR3aWNlCisgICAgICAgICMgbXVzdCBub3QgY3Jhc2gKKyAgICAgICAgZnV0ID0gc2VsZi5sb29wLl9wcm9hY3Rvci53YWl0X2Zvcl9oYW5kbGUoZXZlbnQpCisgICAgICAgIGZ1dC5jYW5jZWwoKQorICAgICAgICBmdXQuY2FuY2VsKCkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hc3luY2lvL3Rlc3Rfd2luZG93c191dGlscy5weSBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ4YjhiYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfYXN5bmNpby90ZXN0X3dpbmRvd3NfdXRpbHMucHkKQEAgLTAsMCArMSwxODIgQEAKKyIiIlRlc3RzIGZvciB3aW5kb3dfdXRpbHMiIiIKKworaW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ1dpbmRvd3Mgb25seScpCisKK2ltcG9ydCBfd2luYXBpCisKK2Zyb20gYXN5bmNpbyBpbXBvcnQgX292ZXJsYXBwZWQKK2Zyb20gYXN5bmNpbyBpbXBvcnQgd2luZG93c191dGlscwordHJ5OgorICAgIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gYXN5bmNpbyBpbXBvcnQgdGVzdF9zdXBwb3J0IGFzIHN1cHBvcnQKKworCitjbGFzcyBXaW5zb2NrZXRwYWlyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIGNoZWNrX3dpbnNvY2tldHBhaXIoc2VsZiwgc3NvY2ssIGNzb2NrKToKKyAgICAgICAgY3NvY2suc2VuZChiJ3h4eCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYid4eHgnLCBzc29jay5yZWN2KDEwMjQpKQorICAgICAgICBjc29jay5jbG9zZSgpCisgICAgICAgIHNzb2NrLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3dpbnNvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHNzb2NrLCBjc29jayA9IHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuY2hlY2tfd2luc29ja2V0cGFpcihzc29jaywgY3NvY2spCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LklQVjZfRU5BQkxFRCwgJ0lQdjYgbm90IHN1cHBvcnRlZCBvciBlbmFibGVkJykKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyX2lwdjYoc2VsZik6CisgICAgICAgIHNzb2NrLCBjc29jayA9IHdpbmRvd3NfdXRpbHMuc29ja2V0cGFpcihmYW1pbHk9c29ja2V0LkFGX0lORVQ2KQorICAgICAgICBzZWxmLmNoZWNrX3dpbnNvY2tldHBhaXIoc3NvY2ssIGNzb2NrKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKSwKKyAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuc29ja2V0cGFpciBpcyBhdmFpbGFibGUnKQorICAgIEBtb2NrLnBhdGNoKCdhc3luY2lvLndpbmRvd3NfdXRpbHMuc29ja2V0JykKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyX2V4YyhzZWxmLCBtX3NvY2tldCk6CisgICAgICAgIG1fc29ja2V0LkFGX0lORVQgPSBzb2NrZXQuQUZfSU5FVAorICAgICAgICBtX3NvY2tldC5TT0NLX1NUUkVBTSA9IHNvY2tldC5TT0NLX1NUUkVBTQorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmdldHNvY2tuYW1lLnJldHVybl92YWx1ZSA9ICgnJywgMTIzNDUpCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUuYWNjZXB0LnJldHVybl92YWx1ZSA9IG9iamVjdCgpLCBvYmplY3QoKQorICAgICAgICBtX3NvY2tldC5zb2NrZXQucmV0dXJuX3ZhbHVlLmNvbm5lY3Quc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIpCisKKyAgICBkZWYgdGVzdF93aW5zb2NrZXRwYWlyX2ludmFsaWRfYXJncyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93c191dGlscy5zb2NrZXRwYWlyLCBmYW1pbHk9c29ja2V0LkFGX1VOU1BFQykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93c191dGlscy5zb2NrZXRwYWlyLCB0eXBlPXNvY2tldC5TT0NLX0RHUkFNKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dzX3V0aWxzLnNvY2tldHBhaXIsIHByb3RvPTEpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc29ja2V0LCAnc29ja2V0cGFpcicpLAorICAgICAgICAgICAgICAgICAgICAgJ3NvY2tldC5zb2NrZXRwYWlyIGlzIGF2YWlsYWJsZScpCisgICAgQG1vY2sucGF0Y2goJ2FzeW5jaW8ud2luZG93c191dGlscy5zb2NrZXQnKQorICAgIGRlZiB0ZXN0X3dpbnNvY2tldHBhaXJfY2xvc2Uoc2VsZiwgbV9zb2NrZXQpOgorICAgICAgICBtX3NvY2tldC5BRl9JTkVUID0gc29ja2V0LkFGX0lORVQKKyAgICAgICAgbV9zb2NrZXQuU09DS19TVFJFQU0gPSBzb2NrZXQuU09DS19TVFJFQU0KKyAgICAgICAgc29jayA9IG1vY2suTW9jaygpCisgICAgICAgIG1fc29ja2V0LnNvY2tldC5yZXR1cm5fdmFsdWUgPSBzb2NrCisgICAgICAgIHNvY2suYmluZC5zaWRlX2VmZmVjdCA9IE9TRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgd2luZG93c191dGlscy5zb2NrZXRwYWlyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29jay5jbG9zZS5jYWxsZWQpCisKKworY2xhc3MgUGlwZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BpcGVfb3ZlcmxhcHBlZChzZWxmKToKKyAgICAgICAgaDEsIGgyID0gd2luZG93c191dGlscy5waXBlKG92ZXJsYXBwZWQ9KFRydWUsIFRydWUpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdjEgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3YxLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5lcnJvciwgMCkKKworICAgICAgICAgICAgb3YxLlJlYWRGaWxlKGgxLCAxMDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3YxLnBlbmRpbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG92MS5lcnJvciwgX3dpbmFwaS5FUlJPUl9JT19QRU5ESU5HKQorICAgICAgICAgICAgRVJST1JfSU9fSU5DT01QTEVURSA9IDk5NgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG92MS5nZXRyZXN1bHQoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIEVSUk9SX0lPX0lOQ09NUExFVEUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignZXhwZWN0ZWQgRVJST1JfSU9fSU5DT01QTEVURScpCisKKyAgICAgICAgICAgIG92MiA9IF9vdmVybGFwcGVkLk92ZXJsYXBwZWQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjIucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YyLmVycm9yLCAwKQorCisgICAgICAgICAgICBvdjIuV3JpdGVGaWxlKGgyLCBiImhlbGxvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3YyLmVycm9yLCB7MCwgX3dpbmFwaS5FUlJPUl9JT19QRU5ESU5HfSkKKworICAgICAgICAgICAgcmVzID0gX3dpbmFwaS5XYWl0Rm9yTXVsdGlwbGVPYmplY3RzKFtvdjIuZXZlbnRdLCBGYWxzZSwgMTAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjEucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmVycm9yLCBFUlJPUl9JT19JTkNPTVBMRVRFKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdjIucGVuZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3YyLmVycm9yLCB7MCwgX3dpbmFwaS5FUlJPUl9JT19QRU5ESU5HfSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3YxLmdldHJlc3VsdCgpLCBiImhlbGxvIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoaDEpCisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgyKQorCisgICAgZGVmIHRlc3RfcGlwZV9oYW5kbGUoc2VsZik6CisgICAgICAgIGgsIF8gPSB3aW5kb3dzX3V0aWxzLnBpcGUob3ZlcmxhcHBlZD0oVHJ1ZSwgVHJ1ZSkpCisgICAgICAgIF93aW5hcGkuQ2xvc2VIYW5kbGUoXykKKyAgICAgICAgcCA9IHdpbmRvd3NfdXRpbHMuUGlwZUhhbmRsZShoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZmlsZW5vKCksIGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5oYW5kbGUsIGgpCisKKyAgICAgICAgIyBjaGVjayBnYXJiYWdlIGNvbGxlY3Rpb24gb2YgcCBjbG9zZXMgaGFuZGxlCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLCAiIiwgIFJlc291cmNlV2FybmluZykKKyAgICAgICAgICAgIGRlbCBwCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBfd2luYXBpLkNsb3NlSGFuZGxlKGgpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUud2luZXJyb3IsIDYpICAgICAjIEVSUk9SX0lOVkFMSURfSEFORExFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ2V4cGVjdGVkIEVSUk9SX0lOVkFMSURfSEFORExFJykKKworCitjbGFzcyBQb3BlblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3BvcGVuKHNlbGYpOgorICAgICAgICBjb21tYW5kID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBzID0gc3lzLnN0ZGluLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUocy51cHBlcigpKQorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnc3RkZXJyJykKKyAgICAgICAgICAgICIiIgorICAgICAgICBtc2cgPSBiImJsYWhcbiIKKworICAgICAgICBwID0gd2luZG93c191dGlscy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvbW1hbmRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRpbj13aW5kb3dzX3V0aWxzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD13aW5kb3dzX3V0aWxzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj13aW5kb3dzX3V0aWxzLlBJUEUpCisKKyAgICAgICAgZm9yIGYgaW4gW3Auc3RkaW4sIHAuc3Rkb3V0LCBwLnN0ZGVycl06CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgd2luZG93c191dGlscy5QaXBlSGFuZGxlKQorCisgICAgICAgIG92aW4gPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgb3ZvdXQgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKyAgICAgICAgb3ZlcnIgPSBfb3ZlcmxhcHBlZC5PdmVybGFwcGVkKCkKKworICAgICAgICBvdmluLldyaXRlRmlsZShwLnN0ZGluLmhhbmRsZSwgbXNnKQorICAgICAgICBvdm91dC5SZWFkRmlsZShwLnN0ZG91dC5oYW5kbGUsIDEwMCkKKyAgICAgICAgb3ZlcnIuUmVhZEZpbGUocC5zdGRlcnIuaGFuZGxlLCAxMDApCisKKyAgICAgICAgZXZlbnRzID0gW292aW4uZXZlbnQsIG92b3V0LmV2ZW50LCBvdmVyci5ldmVudF0KKyAgICAgICAgIyBTdXBlci1sb25nIHRpbWVvdXQgZm9yIHNsb3cgYnVpbGRib3RzLgorICAgICAgICByZXMgPSBfd2luYXBpLldhaXRGb3JNdWx0aXBsZU9iamVjdHMoZXZlbnRzLCBUcnVlLCAxMDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIF93aW5hcGkuV0FJVF9PQkpFQ1RfMCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdm91dC5wZW5kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG92ZXJyLnBlbmRpbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3Zpbi5wZW5kaW5nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Zpbi5nZXRyZXN1bHQoKSwgbGVuKG1zZykpCisgICAgICAgIG91dCA9IG92b3V0LmdldHJlc3VsdCgpLnJzdHJpcCgpCisgICAgICAgIGVyciA9IG92ZXJyLmdldHJlc3VsdCgpLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihvdXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKGVyciksIDApCisgICAgICAgICMgYWxsb3cgZm9yIHBhcnRpYWwgcmVhZHMuLi4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1zZy51cHBlcigpLnJzdHJpcCgpLnN0YXJ0c3dpdGgob3V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIic3RkZXJyIi5zdGFydHN3aXRoKGVycikpCisKKyAgICAgICAgIyBUaGUgY29udGV4dCBtYW5hZ2VyIGNhbGxzIHdhaXQoKSBhbmQgY2xvc2VzIHJlc291cmNlcworICAgICAgICB3aXRoIHA6CisgICAgICAgICAgICBwYXNzCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkgYi9MaWIvdGVzdC90ZXN0X2FzeW5jb3JlLnB5CmluZGV4IDVkMDYzMmUuLmQ0NDcyNmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXN5bmNvcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hc3luY29yZS5weQpAQCAtNSwyMCArNSwxOSBAQAogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLWltcG9ydCB3YXJuaW5ncwogaW1wb3J0IGVycm5vCiBpbXBvcnQgc3RydWN0CitpbXBvcnQgd2FybmluZ3MKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIHVubGluaywgSE9TVCwgSE9TVHY2CiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCi1mcm9tIGlvIGltcG9ydCBTdHJpbmdJTwogCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAorVElNRU9VVCA9IDMKIEhBU19VTklYX1NPQ0tFVFMgPSBoYXNhdHRyKHNvY2tldCwgJ0FGX1VOSVgnKQogCiBjbGFzcyBkdW1teXNvY2tldDoKQEAgLTkzLDcgKzkyLDcgQEAKICAgICAiIiJIZWxwZXIgZnVuY3Rpb24gdG8gYmluZCBhIHNvY2tldCBhY2NvcmRpbmcgdG8gaXRzIGZhbWlseS4iIiIKICAgICBpZiBIQVNfVU5JWF9TT0NLRVRTIGFuZCBzb2NrLmZhbWlseSA9PSBzb2NrZXQuQUZfVU5JWDoKICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIHBhdGggZG9lc24ndCBleGlzdC4KLSAgICAgICAgdW5saW5rKGFkZHIpCisgICAgICAgIHN1cHBvcnQudW5saW5rKGFkZHIpCiAgICAgc29jay5iaW5kKGFkZHIpCiAKIApAQCAtMjU2LDQwICsyNTUsMjkgQEAKICAgICAgICAgZCA9IGFzeW5jb3JlLmRpc3BhdGNoZXIoKQogCiAgICAgICAgICMgY2FwdHVyZSBvdXRwdXQgb2YgZGlzcGF0Y2hlci5sb2coKSAodG8gc3RkZXJyKQotICAgICAgICBmcCA9IFN0cmluZ0lPKCkKLSAgICAgICAgc3RkZXJyID0gc3lzLnN0ZGVycgogICAgICAgICBsMSA9ICJMb3ZlbHkgc3BhbSEgV29uZGVyZnVsIHNwYW0hIgogICAgICAgICBsMiA9ICJJIGRvbid0IGxpa2Ugc3BhbSEiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBmcAorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgogICAgICAgICAgICAgZC5sb2cobDEpCiAgICAgICAgICAgICBkLmxvZyhsMikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRlcnIgPSBzdGRlcnIKIAotICAgICAgICBsaW5lcyA9IGZwLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIGxpbmVzID0gc3RkZXJyLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsnbG9nOiAlcycgJSBsMSwgJ2xvZzogJXMnICUgbDJdKQogCiAgICAgZGVmIHRlc3RfbG9nX2luZm8oc2VsZik6CiAgICAgICAgIGQgPSBhc3luY29yZS5kaXNwYXRjaGVyKCkKIAogICAgICAgICAjIGNhcHR1cmUgb3V0cHV0IG9mIGRpc3BhdGNoZXIubG9nX2luZm8oKSAodG8gc3Rkb3V0IHZpYSBwcmludCkKLSAgICAgICAgZnAgPSBTdHJpbmdJTygpCi0gICAgICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKICAgICAgICAgbDEgPSAiSGF2ZSB5b3UgZ290IGFueXRoaW5nIHdpdGhvdXQgc3BhbT8iCiAgICAgICAgIGwyID0gIldoeSBjYW4ndCBzaGUgaGF2ZSBlZ2cgYmFjb24gc3BhbSBhbmQgc2F1c2FnZT8iCiAgICAgICAgIGwzID0gIlRIQVQnUyBnb3Qgc3BhbSBpbiBpdCEiCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBmcAorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgogICAgICAgICAgICAgZC5sb2dfaW5mbyhsMSwgJ0VHR1MnKQogICAgICAgICAgICAgZC5sb2dfaW5mbyhsMikKICAgICAgICAgICAgIGQubG9nX2luZm8obDMsICdTUEFNJykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKIAotICAgICAgICBsaW5lcyA9IGZwLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIGxpbmVzID0gc3Rkb3V0LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgIGV4cGVjdGVkID0gWydFR0dTOiAlcycgJSBsMSwgJ2luZm86ICVzJyAlIGwyLCAnU1BBTTogJXMnICUgbDNdCi0KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF91bmhhbmRsZWQoc2VsZik6CkBAIC0yOTcsMTggKzI4NSwxMyBAQAogICAgICAgICBkLmlnbm9yZV9sb2dfdHlwZXMgPSAoKQogCiAgICAgICAgICMgY2FwdHVyZSBvdXRwdXQgb2YgZGlzcGF0Y2hlci5sb2dfaW5mbygpICh0byBzdGRvdXQgdmlhIHByaW50KQotICAgICAgICBmcCA9IFN0cmluZ0lPKCkKLSAgICAgICAgc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gZnAKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKICAgICAgICAgICAgIGQuaGFuZGxlX2V4cHQoKQogICAgICAgICAgICAgZC5oYW5kbGVfcmVhZCgpCiAgICAgICAgICAgICBkLmhhbmRsZV93cml0ZSgpCiAgICAgICAgICAgICBkLmhhbmRsZV9jb25uZWN0KCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzdGRvdXQKIAotICAgICAgICBsaW5lcyA9IGZwLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIGxpbmVzID0gc3Rkb3V0LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCiAgICAgICAgIGV4cGVjdGVkID0gWyd3YXJuaW5nOiB1bmhhbmRsZWQgaW5jb21pbmcgcHJpb3JpdHkgZXZlbnQnLAogICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIHJlYWQgZXZlbnQnLAogICAgICAgICAgICAgICAgICAgICAnd2FybmluZzogdW5oYW5kbGVkIHdyaXRlIGV2ZW50JywKQEAgLTM3Nyw3ICszNjAsNyBAQAogICAgICAgICAgICAgZGF0YSA9IGIiU3VwcG9zZSB0aGVyZSBpc24ndCBhIDE2LXRvbiB3ZWlnaHQ/IgogICAgICAgICAgICAgZCA9IGRpc3BhdGNoZXJ3aXRoc2VuZF9ub3JlYWQoKQogICAgICAgICAgICAgZC5jcmVhdGVfc29ja2V0KCkKLSAgICAgICAgICAgIGQuY29ubmVjdCgoSE9TVCwgcG9ydCkpCisgICAgICAgICAgICBkLmNvbm5lY3QoKHN1cHBvcnQuSE9TVCwgcG9ydCkpCiAKICAgICAgICAgICAgICMgZ2l2ZSB0aW1lIGZvciBzb2NrZXQgdG8gY29ubmVjdAogICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCkBAIC0zOTUsNyArMzc4LDEwIEBACiAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwLmdldHZhbHVlKCksIGRhdGEqMikKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgaWYgdC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiam9pbigpIHRpbWVkIG91dCIpCisKIAogCiBjbGFzcyBEaXNwYXRjaGVyV2l0aFNlbmRUZXN0c19Vc2VQb2xsKERpc3BhdGNoZXJXaXRoU2VuZFRlc3RzKToKQEAgLTQwNiwxNCArMzkyLDE0IEBACiBjbGFzcyBGaWxlV3JhcHBlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5kID0gYiJJdCdzIG5vdCBkZWFkLCBpdCdzIHNsZWVwaW5nISIKLSAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3diJykgYXMgZmlsZToKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmaWxlOgogICAgICAgICAgICAgZmlsZS53cml0ZShzZWxmLmQpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfcmVjdihzZWxmKToKLSAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19SRE9OTFkpCisgICAgICAgIGZkID0gb3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgb3MuT19SRE9OTFkpCiAgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCiAgICAgICAgIG9zLmNsb3NlKGZkKQogCkBAIC00MjcsMjAgKzQxMywyMCBAQAogICAgIGRlZiB0ZXN0X3NlbmQoc2VsZik6CiAgICAgICAgIGQxID0gYiJDb21lIGFnYWluPyIKICAgICAgICAgZDIgPSBiIkkgd2FudCB0byBidXkgc29tZSBjaGVlc2UuIgotICAgICAgICBmZCA9IG9zLm9wZW4oVEVTVEZOLCBvcy5PX1dST05MWSB8IG9zLk9fQVBQRU5EKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fV1JPTkxZIHwgb3MuT19BUFBFTkQpCiAgICAgICAgIHcgPSBhc3luY29yZS5maWxlX3dyYXBwZXIoZmQpCiAgICAgICAgIG9zLmNsb3NlKGZkKQogCiAgICAgICAgIHcud3JpdGUoZDEpCiAgICAgICAgIHcuc2VuZChkMikKICAgICAgICAgdy5jbG9zZSgpCi0gICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIGZpbGU6CisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZS5yZWFkKCksIHNlbGYuZCArIGQxICsgZDIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGFzeW5jb3JlLCAnZmlsZV9kaXNwYXRjaGVyJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FzeW5jb3JlLmZpbGVfZGlzcGF0Y2hlciByZXF1aXJlZCcpCiAgICAgZGVmIHRlc3RfZGlzcGF0Y2hlcihzZWxmKToKLSAgICAgICAgZmQgPSBvcy5vcGVuKFRFU1RGTiwgb3MuT19SRE9OTFkpCisgICAgICAgIGZkID0gb3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgb3MuT19SRE9OTFkpCiAgICAgICAgIGRhdGEgPSBbXQogICAgICAgICBjbGFzcyBGaWxlRGlzcGF0Y2hlcihhc3luY29yZS5maWxlX2Rpc3BhdGNoZXIpOgogICAgICAgICAgICAgZGVmIGhhbmRsZV9yZWFkKHNlbGYpOgpAQCAtNDUwLDYgKzQzNiwyNiBAQAogICAgICAgICBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4wMSwgdXNlX3BvbGw9VHJ1ZSwgY291bnQ9MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiIiIuam9pbihkYXRhKSwgc2VsZi5kKQogCisgICAgZGVmIHRlc3RfcmVzb3VyY2Vfd2FybmluZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTE0NTMKKyAgICAgICAgZmQgPSBvcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBvcy5PX1JET05MWSkKKyAgICAgICAgZiA9IGFzeW5jb3JlLmZpbGVfd3JhcHBlcihmZCkKKworICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJywgUmVzb3VyY2VXYXJuaW5nKSk6CisgICAgICAgICAgICBmID0gTm9uZQorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKworICAgIGRlZiB0ZXN0X2Nsb3NlX3R3aWNlKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fUkRPTkxZKQorICAgICAgICBmID0gYXN5bmNvcmUuZmlsZV93cmFwcGVyKGZkKQorICAgICAgICBvcy5jbG9zZShmZCkKKworICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZkLCAtMSkKKyAgICAgICAgIyBjYWxsaW5nIGNsb3NlIHR3aWNlIHNob3VsZCBub3QgZmFpbAorICAgICAgICBmLmNsb3NlKCkKKwogCiBjbGFzcyBCYXNlVGVzdEhhbmRsZXIoYXN5bmNvcmUuZGlzcGF0Y2hlcik6CiAKQEAgLTc0MCw3ICs3NDYsMTIgQEAKICAgICAgICAgcy5jcmVhdGVfc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LmZhbWlseSwgc2VsZi5mYW1pbHkpCiAgICAgICAgIFNPQ0tfTk9OQkxPQ0sgPSBnZXRhdHRyKHNvY2tldCwgJ1NPQ0tfTk9OQkxPQ0snLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0spCisgICAgICAgIHNvY2tfdHlwZSA9IHNvY2tldC5TT0NLX1NUUkVBTSB8IFNPQ0tfTk9OQkxPQ0sKKyAgICAgICAgaWYgaGFzYXR0cihzb2NrZXQsICdTT0NLX0NMT0VYRUMnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocy5zb2NrZXQudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tfdHlwZSB8IHNvY2tldC5TT0NLX0NMT0VYRUMsIHNvY2tfdHlwZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc29ja2V0LnR5cGUsIHNvY2tfdHlwZSkKIAogICAgIGRlZiB0ZXN0X2JpbmQoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzU0LDcgKzc2NSw3IEBACiAgICAgICAgIHMyID0gYXN5bmNvcmUuZGlzcGF0Y2hlcigpCiAgICAgICAgIHMyLmNyZWF0ZV9zb2NrZXQoc2VsZi5mYW1pbHkpCiAgICAgICAgICMgRUFERFJJTlVTRSBpbmRpY2F0ZXMgdGhlIHNvY2tldCB3YXMgY29ycmVjdGx5IGJvdW5kCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgczIuYmluZCwgKHNlbGYuYWRkclswXSwgcG9ydCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHMyLmJpbmQsIChzZWxmLmFkZHJbMF0sIHBvcnQpKQogCiAgICAgZGVmIHRlc3Rfc2V0X3JldXNlX2FkZHIoc2VsZik6CiAgICAgICAgIGlmIEhBU19VTklYX1NPQ0tFVFMgYW5kIHNlbGYuZmFtaWx5ID09IHNvY2tldC5BRl9VTklYOgpAQCAtNzYyLDcgKzc3Myw3IEBACiAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNlbGYuZmFtaWx5KQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrLnNldHNvY2tvcHQoc29ja2V0LlNPTF9TT0NLRVQsIHNvY2tldC5TT19SRVVTRUFERFIsIDEpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgdW5pdHRlc3Quc2tpcCgiU09fUkVVU0VBRERSIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybSIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGlmIFNPX1JFVVNFQUREUiBzdWNjZWVkZWQgZm9yIHNvY2sgd2UgZXhwZWN0IGFzeW5jb3JlCkBAIC03ODcsNyArNzk4LDExIEBACiAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9bGFtYmRhOiBhc3luY29yZS5sb29wKHRpbWVvdXQ9MC4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudD01MDApKQogICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICBzZWxmLmFkZENsZWFudXAodC5qb2luKQorICAgICAgICAgICAgZGVmIGNsZWFudXAoKToKKyAgICAgICAgICAgICAgICB0LmpvaW4odGltZW91dD1USU1FT1VUKQorICAgICAgICAgICAgICAgIGlmIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJqb2luKCkgdGltZWQgb3V0IikKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQogCiAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldChzZWxmLmZhbWlseSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICAgICAgcy5zZXR0aW1lb3V0KC4yKQpAQCAtNzk1LDE5ICs4MTAsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjaygnaWknLCAxLCAwKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzLmNvbm5lY3Qoc2VydmVyLmFkZHJlc3MpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAogY2xhc3MgVGVzdEFQSV9Vc2VJUHY0U29ja2V0cyhCYXNlVGVzdEFQSSk6CiAgICAgZmFtaWx5ID0gc29ja2V0LkFGX0lORVQKLSAgICBhZGRyID0gKEhPU1QsIDApCisgICAgYWRkciA9IChzdXBwb3J0LkhPU1QsIDApCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiBzdXBwb3J0IHJlcXVpcmVkJykKIGNsYXNzIFRlc3RBUElfVXNlSVB2NlNvY2tldHMoQmFzZVRlc3RBUEkpOgogICAgIGZhbWlseSA9IHNvY2tldC5BRl9JTkVUNgotICAgIGFkZHIgPSAoSE9TVHY2LCAwKQorICAgIGFkZHIgPSAoc3VwcG9ydC5IT1NUdjYsIDApCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBU19VTklYX1NPQ0tFVFMsICdVbml4IHNvY2tldHMgcmVxdWlyZWQnKQogY2xhc3MgVGVzdEFQSV9Vc2VVbml4U29ja2V0cyhCYXNlVGVzdEFQSSk6CkBAIC04MTYsNyArODMxLDcgQEAKICAgICBhZGRyID0gc3VwcG9ydC5URVNURk4KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgdW5saW5rKHNlbGYuYWRkcikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5hZGRyKQogICAgICAgICBCYXNlVGVzdEFQSS50ZWFyRG93bihzZWxmKQogCiBjbGFzcyBUZXN0QVBJX1VzZUlQdjRTZWxlY3QoVGVzdEFQSV9Vc2VJUHY0U29ja2V0cywgdW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hdGV4aXQucHkgYi9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQppbmRleCAzMGMzYjRhLi43MGQyZjFjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2F0ZXhpdC5weQpAQCAtMjMsNyArMjMsOSBAQAogZGVmIHJhaXNlMigpOgogICAgIHJhaXNlIFN5c3RlbUVycm9yCiAKLWNsYXNzIFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgR2VuZXJhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAogICAgICAgICBzZWxmLnNhdmVfc3RkZXJyID0gc3lzLnN0ZGVycgpAQCAtMTQxLDggKzE0Myw0MyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFs1XSkKIAogCitjbGFzcyBTdWJpbnRlcnByZXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2xlYWsoc2VsZik6CisgICAgICAgICMgVGhpcyB0ZXN0IHNob3dzIGEgbGVhayBpbiByZWZsZWFrIG1vZGUgaWYgYXRleGl0IGRvZXNuJ3QKKyAgICAgICAgIyB0YWtlIGNhcmUgdG8gZnJlZSBjYWxsYmFja3MgaW4gaXRzIHBlci1zdWJpbnRlcnByZXRlciBtb2R1bGUKKyAgICAgICAgIyBzdGF0ZS4KKyAgICAgICAgbiA9IGF0ZXhpdC5fbmNhbGxiYWNrcygpCisgICAgICAgIGNvZGUgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBhdGV4aXQKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgYXRleGl0LnJlZ2lzdGVyKGYpCisgICAgICAgICAgICBkZWwgYXRleGl0CisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0LCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0ZXhpdC5fbmNhbGxiYWNrcygpLCBuKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tzX2xlYWtfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgU2ltaWxhciB0byB0aGUgYWJvdmUsIGJ1dCB3aXRoIGEgcmVmY3ljbGUgdGhyb3VnaCB0aGUgYXRleGl0CisgICAgICAgICMgbW9kdWxlLgorICAgICAgICBuID0gYXRleGl0Ll9uY2FsbGJhY2tzKCkKKyAgICAgICAgY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IGF0ZXhpdAorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoZikKKyAgICAgICAgICAgIGF0ZXhpdC5fX2F0ZXhpdCA9IGF0ZXhpdAorICAgICAgICAgICAgIiIiCisgICAgICAgIHJldCA9IHN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdGV4aXQuX25jYWxsYmFja3MoKSwgbikKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdENhc2UpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5IGIvTGliL3Rlc3QvdGVzdF9hdWRpb29wLnB5CmluZGV4IGE5MmNmODcuLjhmMzRkNzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXVkaW9vcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2F1ZGlvb3AucHkKQEAgLTUsMTMgKzUsMTggQEAKIGRlZiBwYWNrKHdpZHRoLCBkYXRhKToKICAgICByZXR1cm4gYicnLmpvaW4odi50b19ieXRlcyh3aWR0aCwgc3lzLmJ5dGVvcmRlciwgc2lnbmVkPVRydWUpIGZvciB2IGluIGRhdGEpCiAKLXBhY2tzID0ge3c6IChsYW1iZGEgKmRhdGEsIHdpZHRoPXc6IHBhY2sod2lkdGgsIGRhdGEpKSBmb3IgdyBpbiAoMSwgMiwgNCl9Ci1tYXh2YWx1ZXMgPSB7dzogKDEgPDwgKDggKiB3IC0gMSkpIC0gMSBmb3IgdyBpbiAoMSwgMiwgNCl9Ci1taW52YWx1ZXMgPSB7dzogLTEgPDwgKDggKiB3IC0gMSkgZm9yIHcgaW4gKDEsIDIsIDQpfQorZGVmIHVucGFjayh3aWR0aCwgZGF0YSk6CisgICAgcmV0dXJuIFtpbnQuZnJvbV9ieXRlcyhkYXRhW2k6IGkgKyB3aWR0aF0sIHN5cy5ieXRlb3JkZXIsIHNpZ25lZD1UcnVlKQorICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKGRhdGEpLCB3aWR0aCldCisKK3BhY2tzID0ge3c6IChsYW1iZGEgKmRhdGEsIHdpZHRoPXc6IHBhY2sod2lkdGgsIGRhdGEpKSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CittYXh2YWx1ZXMgPSB7dzogKDEgPDwgKDggKiB3IC0gMSkpIC0gMSBmb3IgdyBpbiAoMSwgMiwgMywgNCl9CittaW52YWx1ZXMgPSB7dzogLTEgPDwgKDggKiB3IC0gMSkgZm9yIHcgaW4gKDEsIDIsIDMsIDQpfQogCiBkYXRhcyA9IHsKICAgICAxOiBiJ1x4MDBceDEyXHg0NVx4YmJceDdmXHg4MFx4ZmYnLAogICAgIDI6IHBhY2tzWzJdKDAsIDB4MTIzNCwgMHg0NTY3LCAtMHg0NTY3LCAweDdmZmYsIC0weDgwMDAsIC0xKSwKKyAgICAzOiBwYWNrc1szXSgwLCAweDEyMzQ1NiwgMHg0NTY3ODksIC0weDQ1Njc4OSwgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTEpLAogICAgIDQ6IHBhY2tzWzRdKDAsIDB4MTIzNDU2NzgsIDB4NDU2Nzg5YWIsIC0weDQ1Njc4OWFiLAogICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMSksCiB9CkBAIC0xOSw2ICsyNCw3IEBACiBJTlZBTElEX0RBVEEgPSBbCiAgICAgKGInYWJjJywgMCksCiAgICAgKGInYWJjJywgMiksCisgICAgKGInYWInLCAzKSwKICAgICAoYidhYmMnLCA0KSwKIF0KIApAQCAtMjYsOCArMzIsMTAgQEAKIGNsYXNzIFRlc3RBdWRpb29wKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X21heChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4KHAoNSksIHcpLCA1KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heChwKDUsIC04LCAtMSksIHcpLCA4KQpAQCAtMzYsOSArNDQsMTMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXgoZGF0YXNbd10sIHcpLCAtbWludmFsdWVzW3ddKQogCiAgICAgZGVmIHRlc3RfbWlubWF4KHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChiJycsIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1pbm1heChieXRlYXJyYXkoKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWlubWF4KG1lbW9yeXZpZXcoYicnKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCkpCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1KSwgdyksICg1LCA1KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5taW5tYXgocCg1LCAtOCwgLTEpLCB3KSwgKC04LCA1KSkKQEAgLTUwLDE2ICs2MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pKQogCiAgICAgZGVmIHRlc3RfbWF4cHAoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubWF4cHAobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tYXhwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm1heHBwKGRhdGFzW3ddLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4dmFsdWVzW3ddIC0gbWludmFsdWVzW3ddKQogCiAgICAgZGVmIHRlc3RfYXZnKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhiJycsIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZnKG1lbW9yeXZpZXcoYicnKSwgdyksIDApCiAgICAgICAgICAgICBwID0gcGFja3Nbd10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmcocCg1KSwgdyksIDUpCiAgICAgICAgICAgICBzZWxmIC5hc3NlcnRFcXVhbChhdWRpb29wLmF2ZyhwKDUsIDgpLCB3KSwgNikKQEAgLTc0LDE3ICs5MCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDYwMDAwMDAwKQogCiAgICAgZGVmIHRlc3RfYXZncHAoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChieXRlYXJyYXkoKSwgdyksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAobWVtb3J5dmlldyhiJycpLCB3KSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChwYWNrc1t3XSgqcmFuZ2UoMTAwKSksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKHBhY2tzW3ddKDksIDEwLCA1LCA1LCAwLCAxKSwgdyksIDEwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbMV0sIDEpLCAxOTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hdmdwcChkYXRhc1syXSwgMiksIDUwNTM0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYXZncHAoZGF0YXNbM10sIDMpLCAxMjkzNzA5NikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmF2Z3BwKGRhdGFzWzRdLCA0KSwgMzMxMTg5NzAwMikKIAogICAgIGRlZiB0ZXN0X3JtcyhzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYicnLCB3KSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoYnl0ZWFycmF5KCksIHcpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhtZW1vcnl2aWV3KGInJyksIHcpLCAwKQogICAgICAgICAgICAgcCA9IHBhY2tzW3ddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKHAoKnJhbmdlKDEwMCkpLCB3KSwgNTcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGF1ZGlvb3Aucm1zKHAobWF4dmFsdWVzW3ddKSAqIDUsIHcpLApAQCAtOTMsMTEgKzExNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtbWludmFsdWVzW3ddLCBkZWx0YT0xKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3Aucm1zKGRhdGFzWzFdLCAxKSwgNzcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbMl0sIDIpLCAyMDAwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJtcyhkYXRhc1szXSwgMyksIDUxMjA1MjMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ybXMoZGF0YXNbNF0sIDQpLCAxMzEwODU0MTUyKQogCiAgICAgZGVmIHRlc3RfY3Jvc3Moc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYicnLCB3KSwgLTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuY3Jvc3MoYnl0ZWFycmF5KCksIHcpLCAtMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5jcm9zcyhtZW1vcnl2aWV3KGInJyksIHcpLCAtMSkKICAgICAgICAgICAgIHAgPSBwYWNrc1t3XQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoMCwgMSwgMiksIHcpLCAwKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAoMSwgMiwgLTMsIC00KSwgdyksIDEpCkBAIC0xMDYsMjIgKzEzMCwyOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmNyb3NzKHAobWludmFsdWVzW3ddLCBtYXh2YWx1ZXNbd10pLCB3KSwgMSkKIAogICAgIGRlZiB0ZXN0X2FkZChzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoYicnLCBiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGJ5dGVhcnJheSgpLCBieXRlYXJyYXkoKSwgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQobWVtb3J5dmlldyhiJycpLCBtZW1vcnl2aWV3KGInJyksIHcpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzW3ddLCBiJ1wwJyAqIGxlbihkYXRhc1t3XSksIHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkZChkYXRhc1sxXSwgZGF0YXNbMV0sIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMFx4MjRceDdmXHg4MFx4N2ZceDgwXHhmZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbMl0sIGRhdGFzWzJdLCAyKSwKICAgICAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDI0NjgsIDB4N2ZmZiwgLTB4ODAwMCwgMHg3ZmZmLCAtMHg4MDAwLCAtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZGQoZGF0YXNbM10sIGRhdGFzWzNdLCAzKSwKKyAgICAgICAgICAgICAgICBwYWNrc1szXSgwLCAweDI0NjhhYywgMHg3ZmZmZmYsIC0weDgwMDAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRkKGRhdGFzWzRdLCBkYXRhc1s0XSwgNCksCiAgICAgICAgICAgICAgICAgcGFja3NbNF0oMCwgMHgyNDY4YWNmMCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwLCAtMikpCiAKICAgICBkZWYgdGVzdF9iaWFzKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgZm9yIGJpYXMgaW4gMCwgMSwgLTEsIDEyNywgLTEyOCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoYicnLCB3LCBiaWFzKSwgYicnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGJ5dGVhcnJheSgpLCB3LCBiaWFzKSwgYicnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKG1lbW9yeXZpZXcoYicnKSwgdywgYmlhcyksIGInJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbMV0sIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMVx4MTNceDQ2XHhiY1x4ODBceDgxXHgwMCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5iaWFzKGRhdGFzWzFdLCAxLCAtMSksCkBAIC0xMzgsNiArMTY5LDE3IEBACiAgICAgICAgICAgICAgICAgcGFja3NbMl0oLTEsIDB4MTIzMywgMHg0NTY2LCAtMHg0NTY4LCAweDdmZmUsIDB4N2ZmZiwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1syXSwgMiwgLTB4ODAwMDAwMDApLAogICAgICAgICAgICAgICAgIGRhdGFzWzJdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgMSksCisgICAgICAgICAgICAgICAgcGFja3NbM10oMSwgMHgxMjM0NTcsIDB4NDU2NzhhLCAtMHg0NTY3ODgsCisgICAgICAgICAgICAgICAgICAgICAgICAgLTB4ODAwMDAwLCAtMHg3ZmZmZmYsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYmlhcyhkYXRhc1szXSwgMywgLTEpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKC0xLCAweDEyMzQ1NSwgMHg0NTY3ODgsIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZSwgMHg3ZmZmZmYsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIDB4N2ZmZmZmZmYpLAorICAgICAgICAgICAgICAgIHBhY2tzWzNdKC0xLCAweDEyMzQ1NSwgMHg0NTY3ODgsIC0weDQ1Njc4YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZSwgMHg3ZmZmZmYsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbM10sIDMsIC0weDgwMDAwMDAwKSwKKyAgICAgICAgICAgICAgICBkYXRhc1szXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJpYXMoZGF0YXNbNF0sIDQsIDEpLAogICAgICAgICAgICAgICAgIHBhY2tzWzRdKDEsIDB4MTIzNDU2NzksIDB4NDU2Nzg5YWMsIC0weDQ1Njc4OWFhLAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDgwMDAwMDAwLCAtMHg3ZmZmZmZmZiwgMCkpCkBAIC0xNTIsOTkgKzE5NCwxNTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCwgMHg3ZmZmZmZmZikpCiAKICAgICBkZWYgdGVzdF9saW4ybGluKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbd10sIHcsIHcpLCBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGJ5dGVhcnJheShkYXRhc1t3XSksIHcsIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKG1lbW9yeXZpZXcoZGF0YXNbd10pLCB3LCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNbd10pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDIpLAogICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjAwLCAweDQ1MDAsIC0weDQ1MDAsIDB4N2YwMCwgLTB4ODAwMCwgLTB4MTAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbMV0sIDEsIDMpLAorICAgICAgICAgICAgcGFja3NbM10oMCwgMHgxMjAwMDAsIDB4NDUwMDAwLCAtMHg0NTAwMDAsCisgICAgICAgICAgICAgICAgICAgICAweDdmMDAwMCwgLTB4ODAwMDAwLCAtMHgxMDAwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzFdLCAxLCA0KSwKICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIwMDAwMDAsIDB4NDUwMDAwMDAsIC0weDQ1MDAwMDAwLAogICAgICAgICAgICAgICAgICAgICAgMHg3ZjAwMDAwMCwgLTB4ODAwMDAwMDAsIC0weDEwMDAwMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgMSksCiAgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1syXSwgMiwgMyksCisgICAgICAgICAgICBwYWNrc1szXSgwLCAweDEyMzQwMCwgMHg0NTY3MDAsIC0weDQ1NjcwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZjAwLCAtMHg4MDAwMDAsIC0weDEwMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzJdLCAyLCA0KSwKICAgICAgICAgICAgIHBhY2tzWzRdKDAsIDB4MTIzNDAwMDAsIDB4NDU2NzAwMDAsIC0weDQ1NjcwMDAwLAogICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmMDAwMCwgLTB4ODAwMDAwMDAsIC0weDEwMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDEpLAorICAgICAgICAgICAgYidceDAwXHgxMlx4NDVceGJhXHg3Zlx4ODBceGZmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJsaW4oZGF0YXNbM10sIDMsIDIpLAorICAgICAgICAgICAgcGFja3NbMl0oMCwgMHgxMjM0LCAweDQ1NjcsIC0weDQ1NjgsIDB4N2ZmZiwgLTB4ODAwMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1szXSwgMywgNCksCisgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDEyMzQ1NjAwLCAweDQ1Njc4OTAwLCAtMHg0NTY3ODkwMCwKKyAgICAgICAgICAgICAgICAgICAgIDB4N2ZmZmZmMDAsIC0weDgwMDAwMDAwLCAtMHgxMDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMSksCiAgICAgICAgICAgICBiJ1x4MDBceDEyXHg0NVx4YmFceDdmXHg4MFx4ZmYnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmxpbihkYXRhc1s0XSwgNCwgMiksCiAgICAgICAgICAgICBwYWNrc1syXSgwLCAweDEyMzQsIDB4NDU2NywgLTB4NDU2OCwgMHg3ZmZmLCAtMHg4MDAwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ybGluKGRhdGFzWzRdLCA0LCAzKSwKKyAgICAgICAgICAgIHBhY2tzWzNdKDAsIDB4MTIzNDU2LCAweDQ1Njc4OSwgLTB4NDU2NzhhLAorICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTEpKQogCiAgICAgZGVmIHRlc3RfYWRwY20ybGluKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKGInXHgwN1x4N2ZceDdmJywgMSwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYnl0ZWFycmF5KGInXHgwN1x4N2ZceDdmJyksIDEsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDBceDAwXHgwMFx4ZmZceDAwXHhmZicsICgtMTc5LCA0MCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWRwY20ybGluKG1lbW9yeXZpZXcoYidceDA3XHg3Zlx4N2YnKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwMFx4MDBceDAwXHhmZlx4MDBceGZmJywgKC0xNzksIDQwKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5hZHBjbTJsaW4oYidceDA3XHg3Zlx4N2YnLCAyLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAocGFja3NbMl0oMCwgMHhiLCAweDI5LCAtMHgxNiwgMHg3MiwgLTB4YjMpLCAoLTE3OSwgNDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDMsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1szXSgwLCAweGIwMCwgMHgyOTAwLCAtMHgxNjAwLCAweDcyMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0weGIzMDApLCAoLTE3OSwgNDApKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1x4MDdceDdmXHg3ZicsIDQsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChwYWNrc1s0XSgwLCAweGIwMDAwLCAweDI5MDAwMCwgLTB4MTYwMDAwLCAweDcyMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTB4YjMwMDAwKSwgKC0xNzksIDQwKSkpCiAKICAgICAgICAgIyBWZXJ5IGN1cnNvcnkgdGVzdAotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFkcGNtMmxpbihiJ1wwJyAqIDUsIHcsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiB3ICogMTAsICgwLCAwKSkpCiAKICAgICBkZWYgdGVzdF9saW4yYWRwY20oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbMV0sIDEsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgtMjIxLCAzOSkpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzWzJdLCAyLCBOb25lKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoMzEsIDM5KSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oZGF0YXNbNF0sIDQsIE5vbmUpLAotICAgICAgICAgICAgICAgICAgICAgICAgIChiJ1x4MDdceDdmXHg3ZicsICgzMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShieXRlYXJyYXkoZGF0YXNbMV0pLCAxLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoYidceDA3XHg3Zlx4N2YnLCAoLTIyMSwgMzkpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhZHBjbShtZW1vcnl2aWV3KGRhdGFzWzFdKSwgMSwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKC0yMjEsIDM5KSkpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFkcGNtKGRhdGFzW3ddLCB3LCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInXHgwN1x4N2ZceDdmJywgKDMxLCAzOSkpKQogCiAgICAgICAgICMgVmVyeSBjdXJzb3J5IHRlc3QKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWRwY20oYidcMCcgKiB3ICogMTAsIHcsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYidcMCcgKiA1LCAoMCwgMCkpKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9hZHBjbV9zdGF0ZShzZWxmKToKKyAgICAgICAgIyBzdGF0ZSBtdXN0IGJlIGEgdHVwbGUgb3IgTm9uZSwgbm90IGFuIGludGVnZXIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmFkcGNtMmxpbiwgYidcMCcsIDEsIDU1NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJhZHBjbSwgYidcMCcsIDEsIDU1NSkKKyAgICAgICAgIyBJc3N1ZXMgIzI0NDU2LCAjMjQ0NTc6IGluZGV4IG91dCBvZiByYW5nZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhdWRpb29wLmFkcGNtMmxpbiwgYidcMCcsIDEsICgwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGF1ZGlvb3AuYWRwY20ybGluLCBiJ1wwJywgMSwgKDAsIDg5KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGInXDAnLCAxLCAoMCwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhdWRpb29wLmxpbjJhZHBjbSwgYidcMCcsIDEsICgwLCA4OSkpCisgICAgICAgICMgdmFsdWUgb3V0IG9mIHJhbmdlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGF1ZGlvb3AuYWRwY20ybGluLCBiJ1wwJywgMSwgKC0weDgwMDEsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhdWRpb29wLmFkcGNtMmxpbiwgYidcMCcsIDEsICgweDgwMDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhdWRpb29wLmxpbjJhZHBjbSwgYidcMCcsIDEsICgtMHg4MDAxLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGInXDAnLCAxLCAoMHg4MDAwLCAwKSkKKwogICAgIGRlZiB0ZXN0X2xpbjJhbGF3KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoZGF0YXNbMV0sIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhkNVx4ODdceGE0XHgyNFx4YWFceDJhXHg1YScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4yYWxhdyhkYXRhc1syXSwgMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDU1JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzWzRdLCA0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMmFsYXcoYnl0ZWFycmF5KGRhdGFzWzFdKSwgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDVhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KG1lbW9yeXZpZXcoZGF0YXNbMV0pLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDVceDg3XHhhNFx4MjRceGFhXHgyYVx4NWEnKQorICAgICAgICBmb3IgdyBpbiAyLCAzLCA0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRhdGFzW3ddLCB3KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQ1XHg4N1x4YTRceDI0XHhhYVx4MmFceDU1JykKIAogICAgIGRlZiB0ZXN0X2FsYXcybGluKHNlbGYpOgogICAgICAgICBlbmNvZGVkID0gYidceDAwXHgwM1x4MjRceDJhXHg1MVx4NTRceDU1XHg1OFx4NmJceDcxXHg3ZidcCiAgICAgICAgICAgICAgICAgICBiJ1x4ODBceDgzXHhhNFx4YWFceGQxXHhkNFx4ZDVceGQ4XHhlYlx4ZjFceGZmJwogICAgICAgICBzcmMgPSBbLTY4OCwgLTcyMCwgLTIyNDAsIC00MDMyLCAtOSwgLTMsIC0xLCAtMjcsIC0yNDQsIC04MiwgLTEwNiwKICAgICAgICAgICAgICAgIDY4OCwgNzIwLCAyMjQwLCA0MDMyLCA5LCAzLCAxLCAyNywgMjQ0LCA4MiwgMTA2XQotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFsYXcybGluKGVuY29kZWQsIHcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxMyBmb3IgeCBpbiBzcmMpKSkKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKKyAgICAgICAgICAgIGRlY29kZWQgPSBwYWNrc1t3XSgqKHggPDwgKHcgKiA4KSA+PiAxMyBmb3IgeCBpbiBzcmMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFsYXcybGluKGVuY29kZWQsIHcpLCBkZWNvZGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmFsYXcybGluKGJ5dGVhcnJheShlbmNvZGVkKSwgdyksIGRlY29kZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYWxhdzJsaW4obWVtb3J5dmlldyhlbmNvZGVkKSwgdyksIGRlY29kZWQpCiAKICAgICAgICAgZW5jb2RlZCA9IGJ5dGVzKHJhbmdlKDI1NikpCi0gICAgICAgIGZvciB3IGluIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CiAgICAgICAgICAgICBkZWNvZGVkID0gYXVkaW9vcC5hbGF3MmxpbihlbmNvZGVkLCB3KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJhbGF3KGRlY29kZWQsIHcpLCBlbmNvZGVkKQogCiAgICAgZGVmIHRlc3RfbGluMnVsYXcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhkYXRhc1sxXSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGZmXHhhZFx4OGVceDBlXHg4MFx4MDBceDY3JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRhdGFzWzJdLCAyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4N2UnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbNF0sIDQpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg3ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5saW4ydWxhdyhieXRlYXJyYXkoZGF0YXNbMV0pLCAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4NjcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcobWVtb3J5dmlldyhkYXRhc1sxXSksIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInXHhmZlx4YWRceDhlXHgwZVx4ODBceDAwXHg2NycpCisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubGluMnVsYXcoZGF0YXNbd10sIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZmZceGFkXHg4ZVx4MGVceDgwXHgwMFx4N2UnKQogCiAgICAgZGVmIHRlc3RfdWxhdzJsaW4oc2VsZik6CiAgICAgICAgIGVuY29kZWQgPSBiJ1x4MDBceDBlXHgyOFx4M2ZceDU3XHg2YVx4NzZceDdjXHg3ZVx4N2YnXAogICAgICAgICAgICAgICAgICAgYidceDgwXHg4ZVx4YThceGJmXHhkN1x4ZWFceGY2XHhmY1x4ZmVceGZmJwogICAgICAgICBzcmMgPSBbLTgwMzEsIC00NDQ3LCAtMTQ3MSwgLTQ5NSwgLTE2MywgLTUzLCAtMTgsIC02LCAtMiwgMCwKICAgICAgICAgICAgICAgIDgwMzEsIDQ0NDcsIDE0NzEsIDQ5NSwgMTYzLCA1MywgMTgsIDYsIDIsIDBdCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudWxhdzJsaW4oZW5jb2RlZCwgdyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDE0IGZvciB4IGluIHNyYykpKQorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgorICAgICAgICAgICAgZGVjb2RlZCA9IHBhY2tzW3ddKCooeCA8PCAodyAqIDgpID4+IDE0IGZvciB4IGluIHNyYykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudWxhdzJsaW4oZW5jb2RlZCwgdyksIGRlY29kZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudWxhdzJsaW4oYnl0ZWFycmF5KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC51bGF3MmxpbihtZW1vcnl2aWV3KGVuY29kZWQpLCB3KSwgZGVjb2RlZCkKIAogICAgICAgICAjIEN1cnJlbnQgdS1sYXcgaW1wbGVtZW50YXRpb24gaGFzIHR3byBjb2RlcyBmbyAwOiAweDdmIGFuZCAweGZmLgogICAgICAgICBlbmNvZGVkID0gYnl0ZXMocmFuZ2UoMTI3KSkgKyBieXRlcyhyYW5nZSgxMjgsIDI1NikpCi0gICAgICAgIGZvciB3IGluIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDIsIDMsIDQ6CiAgICAgICAgICAgICBkZWNvZGVkID0gYXVkaW9vcC51bGF3MmxpbihlbmNvZGVkLCB3KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmxpbjJ1bGF3KGRlY29kZWQsIHcpLCBlbmNvZGVkKQogCiAgICAgZGVmIHRlc3RfbXVsKHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChiJycsIHcsIDIpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGJ5dGVhcnJheSgpLCB3LCAyKSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChtZW1vcnl2aWV3KGInJyksIHcsIDIpLCBiJycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzW3ddLCB3LCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidcMCcgKiBsZW4oZGF0YXNbd10pKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1t3XSwgdywgMSksCkBAIC0yNTMsMjYgKzM1MiwzNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIGInXHgwMFx4MjRceDdmXHg4MFx4N2ZceDgwXHhmZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5tdWwoZGF0YXNbMl0sIDIsIDIpLAogICAgICAgICAgICAgICAgIHBhY2tzWzJdKDAsIDB4MjQ2OCwgMHg3ZmZmLCAtMHg4MDAwLCAweDdmZmYsIC0weDgwMDAsIC0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLm11bChkYXRhc1szXSwgMywgMiksCisgICAgICAgICAgICAgICAgcGFja3NbM10oMCwgMHgyNDY4YWMsIDB4N2ZmZmZmLCAtMHg4MDAwMDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZmZmZmYsIC0weDgwMDAwMCwgLTIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AubXVsKGRhdGFzWzRdLCA0LCAyKSwKICAgICAgICAgICAgICAgICBwYWNrc1s0XSgwLCAweDI0NjhhY2YwLCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMCwgLTIpKQogCiAgICAgZGVmIHRlc3RfcmF0ZWN2KHNlbGYpOgotICAgICAgICBmb3IgdyBpbiAxLCAyLCA0OgorICAgICAgICBmb3IgdyBpbiAxLCAyLCAzLCA0OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihiJycsIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYicnLCAoLTEsICgoMCwgMCksKSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihieXRlYXJyYXkoKSwgdywgMSwgODAwMCwgODAwMCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KG1lbW9yeXZpZXcoYicnKSwgdywgMSwgODAwMCwgODAwMCwgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGInJywgdywgNSwgODAwMCwgODAwMCwgTm9uZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChiJycsICgtMSwgKCgwLCAwKSwpICogNSkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLnJhdGVjdihiJycsIHcsIDEsIDgwMDAsIDE2MDAwLCBOb25lKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGInJywgKC0yLCAoKDAsIDApLCkpKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoZGF0YXNbd10sIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUpWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yYXRlY3YoZGF0YXNbd10sIHcsIDEsIDgwMDAsIDgwMDAsIE5vbmUsIDEsIDApWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc1t3XSkKKwogICAgICAgICBzdGF0ZSA9IE5vbmUKICAgICAgICAgZDEsIHN0YXRlID0gYXVkaW9vcC5yYXRlY3YoYidceDAwXHgwMVx4MDInLCAxLCAxLCA4MDAwLCAxNjAwMCwgc3RhdGUpCiAgICAgICAgIGQyLCBzdGF0ZSA9IGF1ZGlvb3AucmF0ZWN2KGInXHgwMFx4MDFceDAyJywgMSwgMSwgODAwMCwgMTYwMDAsIHN0YXRlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxICsgZDIsIGInXDAwMFwwMDBcMDAxXDAwMVwwMDJcMDAxXDAwMFwwMDBcMDAxXDAwMVwwMDInKQogCi0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkMCwgc3RhdGUwID0gYXVkaW9vcC5yYXRlY3YoZGF0YXNbd10sIHcsIDEsIDgwMDAsIDE2MDAwLCBOb25lKQogICAgICAgICAgICAgZCwgc3RhdGUgPSBiJycsIE5vbmUKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhc1t3XSksIHcpOgpAQCAtMjgyLDE0ICszOTEsMzAgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRlLCBzdGF0ZTApCiAKKyAgICAgICAgZXhwZWN0ZWQgPSB7CisgICAgICAgICAgICAxOiBwYWNrc1sxXSgwLCAweDBkLCAweDM3LCAtMHgyNiwgMHg1NSwgLTB4NGIsIC0weDE0KSwKKyAgICAgICAgICAgIDI6IHBhY2tzWzJdKDAsIDB4MGRhNywgMHgzNzc3LCAtMHgyNjMwLCAweDU2NzMsIC0weDRhNjQsIC0weDEyOWEpLAorICAgICAgICAgICAgMzogcGFja3NbM10oMCwgMHgwZGE3NDAsIDB4Mzc3Nzc2LCAtMHgyNjJmY2EsCisgICAgICAgICAgICAgICAgICAgICAgICAweDU2NzQwYywgLTB4NGE2MmZkLCAtMHgxMjk4YzApLAorICAgICAgICAgICAgNDogcGFja3NbNF0oMCwgMHgwZGE3NDBkYSwgMHgzNzc3Nzc3NiwgLTB4MjYyZmM5NjIsCisgICAgICAgICAgICAgICAgICAgICAgICAweDU2NzQwZGE2LCAtMHg0YTYyZmM5NiwgLTB4MTI5OGJmMjYpLAorICAgICAgICB9CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGRhdGFzW3ddLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lLCAzLCAxKVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmF0ZWN2KGRhdGFzW3ddLCB3LCAxLCA4MDAwLCA4MDAwLCBOb25lLCAzMCwgMTApWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFt3XSkKKwogICAgIGRlZiB0ZXN0X3JldmVyc2Uoc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShiJycsIHcpLCBiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AucmV2ZXJzZShieXRlYXJyYXkoKSwgdyksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKG1lbW9yeXZpZXcoYicnKSwgdyksIGInJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5yZXZlcnNlKHBhY2tzW3ddKDAsIDEsIDIpLCB3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja3Nbd10oMiwgMSwgMCkpCiAKICAgICBkZWYgdGVzdF90b21vbm8oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhMSA9IGRhdGFzW3ddCiAgICAgICAgICAgICBkYXRhMiA9IGJ5dGVhcnJheSgyICogbGVuKGRhdGExKSkKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgpAQCAtMjk5LDkgKzQyNCwxMyBAQAogICAgICAgICAgICAgZm9yIGsgaW4gcmFuZ2Uodyk6CiAgICAgICAgICAgICAgICAgZGF0YTJbayt3OjoyKnddID0gZGF0YTFbazo6d10KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b21vbm8oZGF0YTIsIHcsIDAuNSwgMC41KSwgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKGJ5dGVhcnJheShkYXRhMiksIHcsIDAuNSwgMC41KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9tb25vKG1lbW9yeXZpZXcoZGF0YTIpLCB3LCAwLjUsIDAuNSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGExKQogCiAgICAgZGVmIHRlc3RfdG9zdGVyZW8oc2VsZik6Ci0gICAgICAgIGZvciB3IGluIDEsIDIsIDQ6CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CiAgICAgICAgICAgICBkYXRhMSA9IGRhdGFzW3ddCiAgICAgICAgICAgICBkYXRhMiA9IGJ5dGVhcnJheSgyICogbGVuKGRhdGExKSkKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgpAQCAtMzExLDE0ICs0NDAsMjUgQEAKICAgICAgICAgICAgIGZvciBrIGluIHJhbmdlKHcpOgogICAgICAgICAgICAgICAgIGRhdGEyW2srdzo6Mip3XSA9IGRhdGExW2s6OnddCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8oZGF0YTEsIHcsIDEsIDEpLCBkYXRhMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC50b3N0ZXJlbyhieXRlYXJyYXkoZGF0YTEpLCB3LCAxLCAxKSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AudG9zdGVyZW8obWVtb3J5dmlldyhkYXRhMSksIHcsIDEsIDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhMikKIAogICAgIGRlZiB0ZXN0X2ZpbmRmYWN0b3Ioc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kZmFjdG9yKGRhdGFzWzJdLCBkYXRhc1syXSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IoYnl0ZWFycmF5KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGRhdGFzWzJdKSksIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmYWN0b3IobWVtb3J5dmlldyhkYXRhc1syXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoZGF0YXNbMl0pKSwgMS4wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZhY3RvcihiJ1wwJyAqIGxlbihkYXRhc1syXSksIGRhdGFzWzJdKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAwLjApCiAKICAgICBkZWYgdGVzdF9maW5kZml0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChkYXRhc1syXSwgZGF0YXNbMl0pLCAoMCwgMS4wKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoYnl0ZWFycmF5KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5KGRhdGFzWzJdKSksICgwLCAxLjApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZmluZGZpdChtZW1vcnl2aWV3KGRhdGFzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhkYXRhc1syXSkpLCAoMCwgMS4wKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl0sIHBhY2tzWzJdKDEsIDIsIDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgODAzOC44KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRmaXQoZGF0YXNbMl1bOi0yXSAqIDUgKyBkYXRhc1syXSwgZGF0YXNbMl0pLApAQCAtMzI2LDE2ICs0NjYsMzcgQEAKIAogICAgIGRlZiB0ZXN0X2ZpbmRtYXgoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KGRhdGFzWzJdLCAxKSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmZpbmRtYXgoYnl0ZWFycmF5KGRhdGFzWzJdKSwgMSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5maW5kbWF4KG1lbW9yeXZpZXcoZGF0YXNbMl0pLCAxKSwgNSkKIAogICAgIGRlZiB0ZXN0X2dldHNhbXBsZShzZWxmKToKLSAgICAgICAgZm9yIHcgaW4gMSwgMiwgNDoKKyAgICAgICAgZm9yIHcgaW4gMSwgMiwgMywgNDoKICAgICAgICAgICAgIGRhdGEgPSBwYWNrc1t3XSgwLCAxLCAtMSwgbWF4dmFsdWVzW3ddLCBtaW52YWx1ZXNbd10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShieXRlYXJyYXkoZGF0YSksIHcsIDApLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmdldHNhbXBsZShtZW1vcnl2aWV3KGRhdGEpLCB3LCAwKSwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMSksIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuZ2V0c2FtcGxlKGRhdGEsIHcsIDIpLCAtMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgMyksIG1heHZhbHVlc1t3XSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5nZXRzYW1wbGUoZGF0YSwgdywgNCksIG1pbnZhbHVlc1t3XSkKIAorICAgIGRlZiB0ZXN0X2J5dGVzd2FwKHNlbGYpOgorICAgICAgICBzd2FwcGVkX2RhdGFzID0geworICAgICAgICAgICAgMTogZGF0YXNbMV0sCisgICAgICAgICAgICAyOiBwYWNrc1syXSgwLCAweDM0MTIsIDB4Njc0NSwgLTB4NjY0NiwgLTB4ODEsIDB4ODAsIC0xKSwKKyAgICAgICAgICAgIDM6IHBhY2tzWzNdKDAsIDB4NTYzNDEyLCAtMHg3Njk4YmIsIDB4Nzc5OGJhLCAtMHg4MSwgMHg4MCwgLTEpLAorICAgICAgICAgICAgNDogcGFja3NbNF0oMCwgMHg3ODU2MzQxMiwgLTB4NTQ3Njk4YmIsIDB4NTU3Njk4YmEsCisgICAgICAgICAgICAgICAgICAgICAgICAtMHg4MSwgMHg4MCwgLTEpLAorICAgICAgICB9CisgICAgICAgIGZvciB3IGluIDEsIDIsIDMsIDQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoYicnLCB3KSwgYicnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhdWRpb29wLmJ5dGVzd2FwKGRhdGFzW3ddLCB3KSwgc3dhcHBlZF9kYXRhc1t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXVkaW9vcC5ieXRlc3dhcChzd2FwcGVkX2RhdGFzW3ddLCB3KSwgZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAoYnl0ZWFycmF5KGRhdGFzW3ddKSwgdyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3YXBwZWRfZGF0YXNbd10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF1ZGlvb3AuYnl0ZXN3YXAobWVtb3J5dmlldyhkYXRhc1t3XSksIHcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwcGVkX2RhdGFzW3ddKQorCiAgICAgZGVmIHRlc3RfbmVnYXRpdmVsZW4oc2VsZik6CiAgICAgICAgICMgZnJvbSBpc3N1ZSAzMzA2LCBwcmV2aW91c2x5IGl0IHNlZ2ZhdWx0ZWQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwKQEAgLTM2NSwxMCArNTI2LDMzIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLmxpbjJhbGF3LCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5saW4yYWRwY20sIGRhdGEsIHNpemUsIHN0YXRlKQogCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICBkYXRhID0gJ2FiY2QnCisgICAgICAgIHNpemUgPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5nZXRzYW1wbGUsIGRhdGEsIHNpemUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5taW5tYXgsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hdmcsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5ybXMsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hdmdwcCwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLm1heHBwLCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AuY3Jvc3MsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5tdWwsIGRhdGEsIHNpemUsIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLnRvbW9ubywgZGF0YSwgc2l6ZSwgMC41LCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC50b3N0ZXJlbywgZGF0YSwgc2l6ZSwgMC41LCAwLjUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5hZGQsIGRhdGEsIGRhdGEsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5iaWFzLCBkYXRhLCBzaXplLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AucmV2ZXJzZSwgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJsaW4sIGRhdGEsIHNpemUsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5yYXRlY3YsIGRhdGEsIHNpemUsIDEsIDEsIDEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYXVkaW9vcC5saW4ydWxhdywgZGF0YSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBhdWRpb29wLmxpbjJhbGF3LCBkYXRhLCBzaXplKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGF1ZGlvb3AubGluMmFkcGNtLCBkYXRhLCBzaXplLCBOb25lKQorCiAgICAgZGVmIHRlc3Rfd3JvbmdzaXplKHNlbGYpOgogICAgICAgICBkYXRhID0gYidhYmNkZWZnaCcKICAgICAgICAgc3RhdGUgPSBOb25lCi0gICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgMywgNSwgMTAyNCk6CisgICAgICAgIGZvciBzaXplIGluICgtMSwgMCwgNSwgMTAyNCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhhdWRpb29wLmVycm9yLCBhdWRpb29wLnVsYXcybGluLCBkYXRhLCBzaXplKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYXVkaW9vcC5lcnJvciwgYXVkaW9vcC5hbGF3MmxpbiwgZGF0YSwgc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGF1ZGlvb3AuZXJyb3IsIGF1ZGlvb3AuYWRwY20ybGluLCBkYXRhLCBzaXplLCBzdGF0ZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXVnYXNzaWduLnB5IGIvTGliL3Rlc3QvdGVzdF9hdWdhc3NpZ24ucHkKaW5kZXggOWE1OWM1OC4uMGU3NWM2YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9hdWdhc3NpZ24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hdWdhc3NpZ24ucHkKQEAgLTEzNiwxNCArMTM2LDYgQEAKICAgICAgICAgICAgICAgICBvdXRwdXQuYXBwZW5kKCJfX2ltdWxfXyBjYWxsZWQiKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCiAKLSAgICAgICAgICAgIGRlZiBfX2Rpdl9fKHNlbGYsIHZhbCk6Ci0gICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19kaXZfXyBjYWxsZWQiKQotICAgICAgICAgICAgZGVmIF9fcmRpdl9fKHNlbGYsIHZhbCk6Ci0gICAgICAgICAgICAgICAgb3V0cHV0LmFwcGVuZCgiX19yZGl2X18gY2FsbGVkIikKLSAgICAgICAgICAgIGRlZiBfX2lkaXZfXyhzZWxmLCB2YWwpOgotICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9faWRpdl9fIGNhbGxlZCIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQogICAgICAgICAgICAgZGVmIF9fZmxvb3JkaXZfXyhzZWxmLCB2YWwpOgogICAgICAgICAgICAgICAgIG91dHB1dC5hcHBlbmQoIl9fZmxvb3JkaXZfXyBjYWxsZWQiKQogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Jhc2U2NC5weSBiL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CmluZGV4IDEzNjk1ZGUuLmI5NzM4ZGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYmFzZTY0LnB5CkBAIC01LDEwICs1LDIxIEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCBzdWJwcm9jZXNzCi0KK2ltcG9ydCBzdHJ1Y3QKK2Zyb20gYXJyYXkgaW1wb3J0IGFycmF5CiAKIAogY2xhc3MgTGVnYWN5QmFzZTY0VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgIyBMZWdhY3kgQVBJIGlzIG5vdCBhcyBwZXJtaXNzaXZlIGFzIHRoZSBtb2Rlcm4gQVBJCisgICAgZGVmIGNoZWNrX3R5cGVfZXJyb3JzKHNlbGYsIGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsICIiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIFtdKQorICAgICAgICBtdWx0aWRpbWVuc2lvbmFsID0gbWVtb3J5dmlldyhiIjEyMzQiKS5jYXN0KCdCJywgKDIsIDIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIG11bHRpZGltZW5zaW9uYWwpCisgICAgICAgIGludF9kYXRhID0gbWVtb3J5dmlldyhiIjEyMzQiKS5jYXN0KCdJJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBpbnRfZGF0YSkKKwogICAgIGRlZiB0ZXN0X2VuY29kZWJ5dGVzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgZXEoYmFzZTY0LmVuY29kZWJ5dGVzKGIid3d3LnB5dGhvbi5vcmciKSwgYiJkM2QzTG5CNWRHaHZiaTV2Y21jPVxuIikKQEAgLTI0LDcgKzM1LDkgQEAKICAgICAgICAgICAgYiJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09XG4iKQogICAgICAgICAjIE5vbi1ieXRlcwogICAgICAgICBlcShiYXNlNjQuZW5jb2RlYnl0ZXMoYnl0ZWFycmF5KGInYWJjJykpLCBiJ1lXSmpcbicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmVuY29kZWJ5dGVzLCAiIikKKyAgICAgICAgZXEoYmFzZTY0LmVuY29kZWJ5dGVzKG1lbW9yeXZpZXcoYidhYmMnKSksIGInWVdKalxuJykKKyAgICAgICAgZXEoYmFzZTY0LmVuY29kZWJ5dGVzKGFycmF5KCdCJywgYidhYmMnKSksIGInWVdKalxuJykKKyAgICAgICAgc2VsZi5jaGVja190eXBlX2Vycm9ycyhiYXNlNjQuZW5jb2RlYnl0ZXMpCiAKICAgICBkZWYgdGVzdF9kZWNvZGVieXRlcyhzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC00MSw3ICs1NCw5IEBACiAgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhiJycpLCBiJycpCiAgICAgICAgICMgTm9uLWJ5dGVzCiAgICAgICAgIGVxKGJhc2U2NC5kZWNvZGVieXRlcyhieXRlYXJyYXkoYidZV0pqXG4nKSksIGInYWJjJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiYXNlNjQuZGVjb2RlYnl0ZXMsICIiKQorICAgICAgICBlcShiYXNlNjQuZGVjb2RlYnl0ZXMobWVtb3J5dmlldyhiJ1lXSmpcbicpKSwgYidhYmMnKQorICAgICAgICBlcShiYXNlNjQuZGVjb2RlYnl0ZXMoYXJyYXkoJ0InLCBiJ1lXSmpcbicpKSwgYidhYmMnKQorICAgICAgICBzZWxmLmNoZWNrX3R5cGVfZXJyb3JzKGJhc2U2NC5kZWNvZGVieXRlcykKIAogICAgIGRlZiB0ZXN0X2VuY29kZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC03Myw2ICs4OCw0MiBAQAogCiAKIGNsYXNzIEJhc2VYWVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICMgTW9kZXJuIEFQSSBjb21wbGV0ZWx5IGlnbm9yZXMgZXhwb3J0ZWQgZGltZW5zaW9uIGFuZCBmb3JtYXQgZGF0YSBhbmQKKyAgICAjIHRyZWF0cyBhbnkgYnVmZmVyIGFzIGEgc3RyZWFtIG9mIGJ5dGVzCisgICAgZGVmIGNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhzZWxmLCBmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLCBbXSkKKworICAgIGRlZiBjaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoc2VsZiwgZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgW10pCisKKyAgICBkZWYgY2hlY2tfb3RoZXJfdHlwZXMoc2VsZiwgZiwgYnl0ZXNfZGF0YSwgZXhwZWN0ZWQpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKyAgICAgICAgYiA9IGJ5dGVhcnJheShieXRlc19kYXRhKQorICAgICAgICBlcShmKGIpLCBleHBlY3RlZCkKKyAgICAgICAgIyBUaGUgYnl0ZWFycmF5IHdhc24ndCBtdXRhdGVkCisgICAgICAgIGVxKGIsIGJ5dGVzX2RhdGEpCisgICAgICAgIGVxKGYobWVtb3J5dmlldyhieXRlc19kYXRhKSksIGV4cGVjdGVkKQorICAgICAgICBlcShmKGFycmF5KCdCJywgYnl0ZXNfZGF0YSkpLCBleHBlY3RlZCkKKyAgICAgICAgIyBYWFggd2h5IGlzIGI2NGVuY29kZSBoYXJkY29kZWQgaGVyZT8KKyAgICAgICAgc2VsZi5jaGVja19ub25ieXRlX2VsZW1lbnRfZm9ybWF0KGJhc2U2NC5iNjRlbmNvZGUsIGJ5dGVzX2RhdGEpCisgICAgICAgIHNlbGYuY2hlY2tfbXVsdGlkaW1lbnNpb25hbChiYXNlNjQuYjY0ZW5jb2RlLCBieXRlc19kYXRhKQorCisgICAgZGVmIGNoZWNrX211bHRpZGltZW5zaW9uYWwoc2VsZiwgZiwgZGF0YSk6CisgICAgICAgIHBhZGRpbmcgPSBiIlx4MDAiIGlmIGxlbihkYXRhKSAlIDIgZWxzZSBiIiIKKyAgICAgICAgYnl0ZXNfZGF0YSA9IGRhdGEgKyBwYWRkaW5nICMgTWFrZSBzdXJlIGNhc3Qgd29ya3MKKyAgICAgICAgc2hhcGUgPSAobGVuKGJ5dGVzX2RhdGEpIC8vIDIsIDIpCisgICAgICAgIG11bHRpZGltZW5zaW9uYWwgPSBtZW1vcnl2aWV3KGJ5dGVzX2RhdGEpLmNhc3QoJ0InLCBzaGFwZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKG11bHRpZGltZW5zaW9uYWwpLCBmKGJ5dGVzX2RhdGEpKQorCisgICAgZGVmIGNoZWNrX25vbmJ5dGVfZWxlbWVudF9mb3JtYXQoc2VsZiwgZiwgZGF0YSk6CisgICAgICAgIHBhZGRpbmcgPSBiIlx4MDAiICogKCg0IC0gbGVuKGRhdGEpKSAlIDQpCisgICAgICAgIGJ5dGVzX2RhdGEgPSBkYXRhICsgcGFkZGluZyAjIE1ha2Ugc3VyZSBjYXN0IHdvcmtzCisgICAgICAgIGludF9kYXRhID0gbWVtb3J5dmlldyhieXRlc19kYXRhKS5jYXN0KCdJJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGludF9kYXRhKSwgZihieXRlc19kYXRhKSkKKworCiAgICAgZGVmIHRlc3RfYjY0ZW5jb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyBUZXN0IGRlZmF1bHQgYWxwaGFiZXQKQEAgLTkwLDEzICsxNDEsMTYgQEAKICAgICAgICAgICAgYiJZM09Ea2hRQ013WGlZcUtDazdPancrTEM0Z1cxMTdmUT09IikKICAgICAgICAgIyBUZXN0IHdpdGggYXJiaXRyYXJ5IGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPWInKiQnKSwgYicwMWEqYiRjZCcpCi0gICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYnl0ZWFycmF5KGInYWJjZCcpKSwgYidZV0pqWkE9PScpCiAgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1ieXRlYXJyYXkoYicqJCcpKSwKICAgICAgICAgICAgYicwMWEqYiRjZCcpCi0gICAgICAgICMgQ2hlY2sgaWYgcGFzc2luZyBhIHN0ciBvYmplY3QgcmFpc2VzIGFuIGVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmI2NGVuY29kZSwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmI2NGVuY29kZSwgYiIiLCBhbHRjaGFycz0iIikKKyAgICAgICAgZXEoYmFzZTY0LmI2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsIGFsdGNoYXJzPW1lbW9yeXZpZXcoYicqJCcpKSwKKyAgICAgICAgICAgYicwMWEqYiRjZCcpCisgICAgICAgIGVxKGJhc2U2NC5iNjRlbmNvZGUoYidceGQzVlx4YmVvXHhmN1x4MWQnLCBhbHRjaGFycz1hcnJheSgnQicsIGInKiQnKSksCisgICAgICAgICAgIGInMDFhKmIkY2QnKQorICAgICAgICAjIE5vbi1ieXRlcworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iNjRlbmNvZGUsIGInYWJjZCcsIGInWVdKalpBPT0nKQorICAgICAgICBzZWxmLmNoZWNrX2VuY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjY0ZW5jb2RlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iNjRlbmNvZGUsIGIiIiwgYWx0Y2hhcnM9IiokIikKICAgICAgICAgIyBUZXN0IHN0YW5kYXJkIGFscGhhYmV0CiAgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoYiJ3d3cucHl0aG9uLm9yZyIpLCBiImQzZDNMbkI1ZEdodmJpNXZjbWM9IikKICAgICAgICAgZXEoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZShiImEiKSwgYiJZUT09IikKQEAgLTExMCwxNSArMTY0LDE1IEBACiAgICAgICAgICAgIGIiUlVaSFNFbEtTMHhOVGs5UVVWSlRWRlZXVjFoWldqQXhNak0wTlQiCiAgICAgICAgICAgIGIiWTNPRGtoUUNNd1hpWXFLQ2s3T2p3K0xDNGdXMTE3ZlE9PSIpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRlbmNvZGUoYnl0ZWFycmF5KGInYWJjZCcpKSwgYidZV0pqWkE9PScpCi0gICAgICAgICMgQ2hlY2sgaWYgcGFzc2luZyBhIHN0ciBvYmplY3QgcmFpc2VzIGFuIGVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ2FiY2QnLCBiJ1lXSmpaQT09JykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LnN0YW5kYXJkX2I2NGVuY29kZSkKICAgICAgICAgIyBUZXN0IHdpdGggJ1VSTCBzYWZlJyBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGVuY29kZShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpLCBiJzAxYS1iX2NkJykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlKGJ5dGVhcnJheShiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpKSwgYicwMWEtYl9jZCcpCi0gICAgICAgICMgQ2hlY2sgaWYgcGFzc2luZyBhIHN0ciBvYmplY3QgcmFpc2VzIGFuIGVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlLCAiIikKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQudXJsc2FmZV9iNjRlbmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceGQzVlx4YmVvXHhmN1x4MWQnLCBiJzAxYS1iX2NkJykKKyAgICAgICAgc2VsZi5jaGVja19lbmNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LnVybHNhZmVfYjY0ZW5jb2RlKQogCiAgICAgZGVmIHRlc3RfYjY0ZGVjb2RlKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKQEAgLTE0MSw3ICsxOTUsOCBAQAogICAgICAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZShkYXRhKSwgcmVzKQogICAgICAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LmI2NGRlY29kZShieXRlYXJyYXkoYiJZV0pqIikpLCBiImFiYyIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmI2NGRlY29kZSwgYiJZV0pqIiwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX2RlY29kZV90eXBlX2Vycm9ycyhiYXNlNjQuYjY0ZGVjb2RlKQogCiAgICAgICAgICMgVGVzdCB3aXRoIGFyYml0cmFyeSBhbHRlcm5hdGl2ZSBjaGFyYWN0ZXJzCiAgICAgICAgIHRlc3RzX2FsdGNoYXJzID0geyhiJzAxYSpiJGNkJywgYicqJCcpOiBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcsCkBAIC0xNjAsNyArMjE1LDggQEAKICAgICAgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoZGF0YS5kZWNvZGUoJ2FzY2lpJykpLCByZXMpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUoYnl0ZWFycmF5KGIiWVdKaiIpKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5zdGFuZGFyZF9iNjRkZWNvZGUsIGIiWVdKaiIsIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LnN0YW5kYXJkX2I2NGRlY29kZSkKIAogICAgICAgICAjIFRlc3Qgd2l0aCAnVVJMIHNhZmUnIGFsdGVybmF0aXZlIGNoYXJhY3RlcnMKICAgICAgICAgdGVzdHNfdXJsc2FmZSA9IHtiJzAxYS1iX2NkJzogYidceGQzVlx4YmVvXHhmN1x4MWQnLApAQCAtMTcwLDcgKzIyNiw5IEBACiAgICAgICAgICAgICBlcShiYXNlNjQudXJsc2FmZV9iNjRkZWNvZGUoZGF0YSksIHJlcykKICAgICAgICAgICAgIGVxKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZShkYXRhLmRlY29kZSgnYXNjaWknKSksIHJlcykKICAgICAgICAgIyBOb24tYnl0ZXMKLSAgICAgICAgZXEoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlKGJ5dGVhcnJheShiJzAxYS1iX2NkJykpLCBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlLCBiJzAxYS1iX2NkJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ1x4ZDNWXHhiZW9ceGY3XHgxZCcpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC51cmxzYWZlX2I2NGRlY29kZSkKIAogICAgIGRlZiB0ZXN0X2I2NGRlY29kZV9wYWRkaW5nX2Vycm9yKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhiaW5hc2NpaS5FcnJvciwgYmFzZTY0LmI2NGRlY29kZSwgYidhYmMnKQpAQCAtMjA1LDggKzI2Myw4IEBACiAgICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoYidhYmNkJyksIGInTUZSR0daQT0nKQogICAgICAgICBlcShiYXNlNjQuYjMyZW5jb2RlKGInYWJjZGUnKSwgYidNRlJHR1pERicpCiAgICAgICAgICMgTm9uLWJ5dGVzCi0gICAgICAgIGVxKGJhc2U2NC5iMzJlbmNvZGUoYnl0ZWFycmF5KGInYWJjZCcpKSwgYidNRlJHR1pBPScpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmIzMmVuY29kZSwgIiIpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIzMmVuY29kZSwgYidhYmNkJywgYidNRlJHR1pBPScpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iMzJlbmNvZGUpCiAKICAgICBkZWYgdGVzdF9iMzJkZWNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjIyLDcgKzI4MCw4IEBACiAgICAgICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKGRhdGEpLCByZXMpCiAgICAgICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKGRhdGEuZGVjb2RlKCdhc2NpaScpKSwgcmVzKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjMyZGVjb2RlKGJ5dGVhcnJheShiJ01GUkdHPT09JykpLCBiJ2FiYycpCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmIzMmRlY29kZSwgYidNRlJHRz09PScsIGIiYWJjIikKKyAgICAgICAgc2VsZi5jaGVja19kZWNvZGVfdHlwZV9lcnJvcnMoYmFzZTY0LmIzMmRlY29kZSkKIAogICAgIGRlZiB0ZXN0X2IzMmRlY29kZV9jYXNlZm9sZChzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCkBAIC0yNzcsOCArMzM2LDkgQEAKICAgICAgICAgZXEoYmFzZTY0LmIxNmVuY29kZShiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJyksIGInMDEwMkFCQ0RFRicpCiAgICAgICAgIGVxKGJhc2U2NC5iMTZlbmNvZGUoYidceDAwJyksIGInMDAnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjE2ZW5jb2RlKGJ5dGVhcnJheShiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykpLCBiJzAxMDJBQkNERUYnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGJhc2U2NC5iMTZlbmNvZGUsICIiKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMTZlbmNvZGUsIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInMDEwMkFCQ0RFRicpCisgICAgICAgIHNlbGYuY2hlY2tfZW5jb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iMTZlbmNvZGUpCiAKICAgICBkZWYgdGVzdF9iMTZkZWNvZGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbApAQCAtMjkzLDE0ICszNTMsMjY4IEBACiAgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYicwMTAyYWJjZGVmJywgVHJ1ZSksIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQogICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKCcwMTAyYWJjZGVmJywgVHJ1ZSksIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQogICAgICAgICAjIE5vbi1ieXRlcwotICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKGJ5dGVhcnJheShiIjAxMDJBQkNERUYiKSksIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iMTZkZWNvZGUsIGIiMDEwMkFCQ0RFRiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIHNlbGYuY2hlY2tfZGVjb2RlX3R5cGVfZXJyb3JzKGJhc2U2NC5iMTZkZWNvZGUpCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUoYnl0ZWFycmF5KGIiMDEwMmFiY2RlZiIpLCBUcnVlKSwKKyAgICAgICAgICAgYidceDAxXHgwMlx4YWJceGNkXHhlZicpCisgICAgICAgIGVxKGJhc2U2NC5iMTZkZWNvZGUobWVtb3J5dmlldyhiIjAxMDJhYmNkZWYiKSwgVHJ1ZSksCisgICAgICAgICAgIGInXHgwMVx4MDJceGFiXHhjZFx4ZWYnKQorICAgICAgICBlcShiYXNlNjQuYjE2ZGVjb2RlKGFycmF5KCdCJywgYiIwMTAyYWJjZGVmIiksIFRydWUpLAorICAgICAgICAgICBiJ1x4MDFceDAyXHhhYlx4Y2RceGVmJykKKworICAgIGRlZiB0ZXN0X2E4NWVuY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGVzdHMgPSB7CisgICAgICAgICAgICBiJyc6IGInJywKKyAgICAgICAgICAgIGIid3d3LnB5dGhvbi5vcmciOiBiJ0dCXFw2YEUtWlA9RGYuMUdFYj4nLAorICAgICAgICAgICAgYnl0ZXMocmFuZ2UoMjU1KSk6IGIiIiIhISotJyI5ZXU3I1JMaEckazNbVyYub05nJ0dWQiIoYD01MiokJCIiIgorICAgICAgICAgICAgICAgYiIiIihCKzxfcFIsVUZjYi1uLVZyLzFpSi0wSlA9PTFjNzBNMyZzI100P1lrbTVYQF8oNnEnUjg4NGNFIiIiCisgICAgICAgICAgICAgICBiIiIiSDlNSjhYOmYxK2g8KWx0Iz1CU2czPls6WkM/dCFNU0E3XUBjQlBEM3NDaSsnLkUsZm8+RkVNYk4iIiIKKyAgICAgICAgICAgICAgIGIiIiJHXjRVXkkhcEhuSjpXPClLUz4vOUxsJSJJTi9gallPSEddaVBhLlEkUiRqRDRTPVE3RFRWOCpUVSIiIgorICAgICAgICAgICAgICAgYiIiIm5zcmRXMlpldFhLQVkvWWQoTD9bJ2Q/T1xcQEsyX11ZMiVvXnFtbipgNVRhOmFOO1RKYmciR1pkIiIiCisgICAgICAgICAgICAgICBiIiIiKl46amVDRS4lZlxcLCE1Z3RnaUVpOE5cXFVqUTVPZWtpcUJ1bS1YNjBuRj8pQG9fJXFQcSJhZGAiIiIKKyAgICAgICAgICAgICAgIGIiIiJyO0hUIiIiLAorICAgICAgICAgICAgYiJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIgorICAgICAgICAgICAgICAgIGIiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IjoKKyAgICAgICAgICAgICAgICBiJ0A6RV9XQVMsUmdCa2hGIkQvTzkyRUg2LEJGYHF0UkgkVmJDNlVYQDQ3bj8zRDkyJiZUJworICAgICAgICAgICAgICAgIGIiOkphbmQ7Y0hhdD0nL1UvMEpQPT0xYzcwTTMmci1JLDs8Rk4uT1pgLTNdb1NXL2crQShIW1AiLAorICAgICAgICAgICAgYiJubyBwYWRkaW5nLi4iOiBiJ0RKcFk6QDpXbl9ESihSUycsCisgICAgICAgICAgICBiInplcm8gY29tcHJlc3Npb25cMFwwXDBcMCI6IGInSD1fLDgrQ2Y+LEUsb04yRihvUTF6JywKKyAgICAgICAgICAgIGIiemVybyBjb21wcmVzc2lvblwwXDBcMCI6IGInSD1fLDgrQ2Y+LEUsb04yRihvUTEhISEhJywKKyAgICAgICAgICAgIGIiQm91bmRhcnk6XDBcMFwwXDAiOiBiJzY+cSFhQTc5TSgzV0stWyEhJywKKyAgICAgICAgICAgIGIiU3BhY2UgY29tcHI6ICAgICI6IGInO2ZIL1RBS1lLJEQvYU1WKzxWZEwnLAorICAgICAgICAgICAgYidceGZmJzogYidycicsCisgICAgICAgICAgICBiJ1x4ZmYnKjI6IGInczhOJywKKyAgICAgICAgICAgIGInXHhmZicqMzogYidzOFcqJywKKyAgICAgICAgICAgIGInXHhmZicqNDogYidzOFctIScsCisgICAgICAgICAgICB9CisKKyAgICAgICAgZm9yIGRhdGEsIHJlcyBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShkYXRhKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShkYXRhLCBhZG9iZT1GYWxzZSksIHJlcywgZGF0YSkKKyAgICAgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoZGF0YSwgYWRvYmU9VHJ1ZSksIGInPH4nICsgcmVzICsgYid+PicsIGRhdGEpCisKKyAgICAgICAgc2VsZi5jaGVja19vdGhlcl90eXBlcyhiYXNlNjQuYTg1ZW5jb2RlLCBiInd3dy5weXRob24ub3JnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ0dCXFw2YEUtWlA9RGYuMUdFYj4nKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmFzZTY0LmE4NWVuY29kZSwgIiIpCisKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiInd3dy5weXRob24ub3JnIiwgd3JhcGNvbD03LCBhZG9iZT1GYWxzZSksCisgICAgICAgICAgIGInR0JcXDZgRS1cblpQPURmLjFcbkdFYj4nKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIiXDBcMFwwXDB3d3cucHl0aG9uLm9yZyIsIHdyYXBjb2w9NywgYWRvYmU9RmFsc2UpLAorICAgICAgICAgICBiJ3pHQlxcNmBFXG4tWlA9RGYuXG4xR0ViPicpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ3d3cucHl0aG9uLm9yZyIsIHdyYXBjb2w9NywgYWRvYmU9VHJ1ZSksCisgICAgICAgICAgIGInPH5HQlxcNmBcbkUtWlA9RGZcbi4xR0ViPlxufj4nKQorCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYicgJyo4LCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYid5eScpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYicgJyo3LCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYid5KzxWZCcpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYicgJyo2LCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYid5KzxVJykKKyAgICAgICAgZXEoYmFzZTY0LmE4NWVuY29kZShiJyAnKjUsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJ3krOScpCisKKyAgICBkZWYgdGVzdF9iODVlbmNvZGUoc2VsZik6CisgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAorCisgICAgICAgIHRlc3RzID0geworICAgICAgICAgICAgYicnOiBiJycsCisgICAgICAgICAgICBiJ3d3dy5weXRob24ub3JnJzogYidjWHhMI2FDdmxTWipER2NhJVQnLAorICAgICAgICAgICAgYnl0ZXMocmFuZ2UoMjU1KSk6IGIiIiIwMDlDNjFPKX5NMm5oLWMzPUl3czVEXmorNmNyWDE3I1NLSDkzMzdYIiIiCisgICAgICAgICAgICAgICAgYiIiIkFSIV9uQnFiJiVDQENye0VHO2ZDRmZsU1NHJk1GaUk1fDJ5SlV1PT9LdFYhN0xgNm5OTkomYWQiIiIKKyAgICAgICAgICAgICAgICBiIiIiT2lmTnRQKkdBLVI4Pn0yU1hvK0lUd1B2WVV9MGlvV015ViZYbFpJfFk7QTZEYUIqXlRiYWklaiIiIgorICAgICAgICAgICAgICAgIGIiIiJjekpxemUwX2RAZlBzUjhnb1RFT2g+NDFlakUjPHVrZGN5O2wkRG0zbjM8WkpvU21NWnByTjlwIiIiCisgICAgICAgICAgICAgICAgYiIiInFAfHsoc0h2KX10Z1d1RXUoN2hVdzYoVWt4VmdIIXl1SDReemA/QDkjS3AkUCRqUXBmJSsxY3YiIiIKKyAgICAgICAgICAgICAgICBiIiIiKDl6UDwpWWFENCp4QjBLK30rO2E7Tmp4cTxtS2spPTtgWH4/Q3RMRkBiVThWXiE0YGxgMSQoIyIiIgorICAgICAgICAgICAgICAgIGIiIiJ7UWRwIiIiLAorICAgICAgICAgICAgYiIiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIiIKKyAgICAgICAgICAgICAgICBiIiIiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IiIiOgorICAgICAgICAgICAgICAgIGIiIiJWUGEhc1dvQm4rWD0tYjFaRWtPSGFkTEJYYiNgfW5kM3IlWUxxdFZKTUBVSVpPSDU1cFBmJEAoIiIiCisgICAgICAgICAgICAgICAgYiIiIlEmZCR9UzZFcUVGZmxTU0cmTUZpSTV7Q2VCUVJiakRrdiNDSXleb3NFK0FXN2R3bCIiIiwKKyAgICAgICAgICAgIGInbm8gcGFkZGluZy4uJzogYidaZl91UFZQc0AhWmY3bm8nLAorICAgICAgICAgICAgYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwXHgwMCc6IGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwMCcsCisgICAgICAgICAgICBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDAnOiBiJ2RTIUJOQVkqVEJhQl5qSGI3Xm1HMDAwMCcsCisgICAgICAgICAgICBiIiIiQm91bmRhcnk6XHgwMFx4MDBceDAwXHgwMCIiIjogYiIiIkxUYDAkV01PaTdJc2dDdzAwIiIiLAorICAgICAgICAgICAgYidTcGFjZSBjb21wcjogICAgJzogYidRKmRFcFdndWczWkUkaXJBUnIoaCcsCisgICAgICAgICAgICBiJ1x4ZmYnOiBiJ3t7JywKKyAgICAgICAgICAgIGInXHhmZicqMjogYid8TmonLAorICAgICAgICAgICAgYidceGZmJyozOiBiJ3xOczknLAorICAgICAgICAgICAgYidceGZmJyo0OiBiJ3xOc0MwJywKKyAgICAgICAgfQorCisgICAgICAgIGZvciBkYXRhLCByZXMgaW4gdGVzdHMuaXRlbXMoKToKKyAgICAgICAgICAgIGVxKGJhc2U2NC5iODVlbmNvZGUoZGF0YSksIHJlcykKKworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iODVlbmNvZGUsIGIid3d3LnB5dGhvbi5vcmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGInY1h4TCNhQ3ZsU1oqREdjYSVUJykKKworICAgIGRlZiB0ZXN0X2E4NWRlY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGVzdHMgPSB7CisgICAgICAgICAgICBiJyc6IGInJywKKyAgICAgICAgICAgIGInR0JcXDZgRS1aUD1EZi4xR0ViPic6IGInd3d3LnB5dGhvbi5vcmcnLAorICAgICAgICAgICAgYiIiIiEgISAqIC0nIlxuXHRcdDlldVxyXG43IyAgUkxcdmhHJGszW1cmLm9OZydHVkIiKGA9NTIqJCQiIiIKKyAgICAgICAgICAgICAgIGIiIiIoQis8X3BSLFVGY2Itbi1Wci8xaUotMEpQPT0xYzcwTTMmcyNdND9Za201WEBfKDZxJ1I4ODRjRSIiIgorICAgICAgICAgICAgICAgYiIiIkg5TUo4WDpmMStoPClsdCM9QlNnMz5bOlpDP3QhTVNBN11AY0JQRDNzQ2krJy5FLGZvPkZFTWJOIiIiCisgICAgICAgICAgICAgICBiIiIiR140VV5JIXBIbko6VzwpS1M+LzlMbCUiSU4vYGpZT0hHXWlQYS5RJFIkakQ0Uz1RN0RUVjgqVFUiIiIKKyAgICAgICAgICAgICAgIGIiIiJuc3JkVzJaZXRYS0FZL1lkKEw/WydkP09cXEBLMl9dWTIlb15xbW4qYDVUYTphTjtUSmJnIkdaZCIiIgorICAgICAgICAgICAgICAgYiIiIipeOmplQ0UuJWZcXCwhNWd0Z2lFaThOXFxValE1T2VraXFCdW0tWDYwbkY/KUBvXyVxUHEiYWRgIiIiCisgICAgICAgICAgICAgICBiIiIicjtIVCIiIjogYnl0ZXMocmFuZ2UoMjU1KSksCisgICAgICAgICAgICBiIiIiQDpFX1dBUyxSZ0JraEYiRC9POTJFSDYsQkZgcXRSSCRWYkM2VVhANDduPzNEOTImJlQ6SmFuZDtjIiIiCisgICAgICAgICAgICAgICAgYiIiIkhhdD0nL1UvMEpQPT0xYzcwTTMmci1JLDs8Rk4uT1pgLTNdb1NXL2crQShIW1AiIiI6CisgICAgICAgICAgICAgICAgYidhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaMDEyMzQnCisgICAgICAgICAgICAgICAgYic1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9JywKKyAgICAgICAgICAgIGInREpwWTpAOlduX0RKKFJTJzogYidubyBwYWRkaW5nLi4nLAorICAgICAgICAgICAgYidIPV8sOCtDZj4sRSxvTjJGKG9RMXonOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInSD1fLDgrQ2Y+LEUsb04yRihvUTEhISEhJzogYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInNj5xIWFBNzlNKDNXSy1bISEnOiBiIkJvdW5kYXJ5Olx4MDBceDAwXHgwMFx4MDAiLAorICAgICAgICAgICAgYic7ZkgvVEFLWUskRC9hTVYrPFZkTCc6IGInU3BhY2UgY29tcHI6ICAgICcsCisgICAgICAgICAgICBiJ3JyJzogYidceGZmJywKKyAgICAgICAgICAgIGInczhOJzogYidceGZmJyoyLAorICAgICAgICAgICAgYidzOFcqJzogYidceGZmJyozLAorICAgICAgICAgICAgYidzOFctISc6IGInXHhmZicqNCwKKyAgICAgICAgICAgIH0KKworICAgICAgICBmb3IgZGF0YSwgcmVzIGluIHRlc3RzLml0ZW1zKCk6CisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGRhdGEpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGRhdGEsIGFkb2JlPUZhbHNlKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShkYXRhLmRlY29kZSgiYXNjaWkiKSwgYWRvYmU9RmFsc2UpLCByZXMsIGRhdGEpCisgICAgICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInPH4nICsgZGF0YSArIGInfj4nLCBhZG9iZT1UcnVlKSwgcmVzLCBkYXRhKQorICAgICAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZSgnPH4lc34+JyAlIGRhdGEuZGVjb2RlKCJhc2NpaSIpLCBhZG9iZT1UcnVlKSwKKyAgICAgICAgICAgICAgIHJlcywgZGF0YSkKKworICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIneXknLCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYicgJyo4KQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIneSs8VmQnLCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYicgJyo3KQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGIneSs8VScsIGZvbGRzcGFjZXM9VHJ1ZSwgYWRvYmU9RmFsc2UpLCBiJyAnKjYpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYid5KzknLCBmb2xkc3BhY2VzPVRydWUsIGFkb2JlPUZhbHNlKSwgYicgJyo1KQorCisgICAgICAgIHNlbGYuY2hlY2tfb3RoZXJfdHlwZXMoYmFzZTY0LmE4NWRlY29kZSwgYidHQlxcNmBFLVpQPURmLjFHRWI+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiInd3dy5weXRob24ub3JnIikKKworICAgIGRlZiB0ZXN0X2I4NWRlY29kZShzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgdGVzdHMgPSB7CisgICAgICAgICAgICBiJyc6IGInJywKKyAgICAgICAgICAgIGInY1h4TCNhQ3ZsU1oqREdjYSVUJzogYid3d3cucHl0aG9uLm9yZycsCisgICAgICAgICAgICBiIiIiMDA5QzYxTyl+TTJuaC1jMz1Jd3M1RF5qKzZjclgxNyNTS0g5MzM3WCIiIgorICAgICAgICAgICAgICAgIGIiIiJBUiFfbkJxYiYlQ0BDcntFRztmQ0ZmbFNTRyZNRmlJNXwyeUpVdT0/S3RWITdMYDZuTk5KJmFkIiIiCisgICAgICAgICAgICAgICAgYiIiIk9pZk50UCpHQS1SOD59MlNYbytJVHdQdllVfTBpb1dNeVYmWGxaSXxZO0E2RGFCKl5UYmFpJWoiIiIKKyAgICAgICAgICAgICAgICBiIiIiY3pKcXplMF9kQGZQc1I4Z29URU9oPjQxZWpFIzx1a2RjeTtsJERtM24zPFpKb1NtTVpwck45cCIiIgorICAgICAgICAgICAgICAgIGIiIiJxQHx7KHNIdil9dGdXdUV1KDdoVXc2KFVreFZnSCF5dUg0XnpgP0A5I0twJFAkalFwZiUrMWN2IiIiCisgICAgICAgICAgICAgICAgYiIiIig5elA8KVlhRDQqeEIwSyt9KzthO05qeHE8bUtrKT07YFh+P0N0TEZAYlU4Vl4hNGBsYDEkKCMiIiIKKyAgICAgICAgICAgICAgICBiIiIie1FkcCIiIjogYnl0ZXMocmFuZ2UoMjU1KSksCisgICAgICAgICAgICBiIiIiVlBhIXNXb0JuK1g9LWIxWkVrT0hhZExCWGIjYH1uZDNyJVlMcXRWSk1AVUlaT0g1NXBQZiRAKCIiIgorICAgICAgICAgICAgICAgIGIiIiJRJmQkfVM2RXFFRmZsU1NHJk1GaUk1e0NlQlFSYmpEa3YjQ0l5Xm9zRStBVzdkd2wiIiI6CisgICAgICAgICAgICAgICAgYiIiImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoiIiIKKyAgICAgICAgICAgICAgICBiIiIiMDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9IiIiLAorICAgICAgICAgICAgYidaZl91UFZQc0AhWmY3bm8nOiBiJ25vIHBhZGRpbmcuLicsCisgICAgICAgICAgICBiJ2RTIUJOQVkqVEJhQl5qSGI3Xm1HMDAwMDAnOiBiJ3plcm8gY29tcHJlc3Npb25ceDAwXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGInZFMhQk5BWSpUQmFCXmpIYjdebUcwMDAwJzogYid6ZXJvIGNvbXByZXNzaW9uXHgwMFx4MDBceDAwJywKKyAgICAgICAgICAgIGIiIiJMVGAwJFdNT2k3SXNnQ3cwMCIiIjogYiIiIkJvdW5kYXJ5Olx4MDBceDAwXHgwMFx4MDAiIiIsCisgICAgICAgICAgICBiJ1EqZEVwV2d1ZzNaRSRpckFScihoJzogYidTcGFjZSBjb21wcjogICAgJywKKyAgICAgICAgICAgIGIne3snOiBiJ1x4ZmYnLAorICAgICAgICAgICAgYid8TmonOiBiJ1x4ZmYnKjIsCisgICAgICAgICAgICBiJ3xOczknOiBiJ1x4ZmYnKjMsCisgICAgICAgICAgICBiJ3xOc0MwJzogYidceGZmJyo0LAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGRhdGEsIHJlcyBpbiB0ZXN0cy5pdGVtcygpOgorICAgICAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShkYXRhKSwgcmVzKQorICAgICAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShkYXRhLmRlY29kZSgiYXNjaWkiKSksIHJlcykKKworICAgICAgICBzZWxmLmNoZWNrX290aGVyX3R5cGVzKGJhc2U2NC5iODVkZWNvZGUsIGInY1h4TCNhQ3ZsU1oqREdjYSVUJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiInd3dy5weXRob24ub3JnIikKKworICAgIGRlZiB0ZXN0X2E4NV9wYWRkaW5nKHNlbGYpOgorICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKKworICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieCIsIHBhZD1UcnVlKSwgYidHUTdeRCcpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4eCIsIHBhZD1UcnVlKSwgYiJHXicyZyIpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4eHgiLCBwYWQ9VHJ1ZSksIGInR14rSDUnKQorICAgICAgICBlcShiYXNlNjQuYTg1ZW5jb2RlKGIieHh4eCIsIHBhZD1UcnVlKSwgYidHXitJWCcpCisgICAgICAgIGVxKGJhc2U2NC5hODVlbmNvZGUoYiJ4eHh4eCIsIHBhZD1UcnVlKSwgYidHXitJWEdRN15EJykKKworICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInR1E3XkQnKSwgYiJ4XHgwMFx4MDBceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiIkdeJzJnIiksIGIieHhceDAwXHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5hODVkZWNvZGUoYidHXitINScpLCBiInh4eFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYTg1ZGVjb2RlKGInR14rSVgnKSwgYiJ4eHh4IikKKyAgICAgICAgZXEoYmFzZTY0LmE4NWRlY29kZShiJ0deK0lYR1E3XkQnKSwgYiJ4eHh4eFx4MDBceDAwXHgwMCIpCisKKyAgICBkZWYgdGVzdF9iODVfcGFkZGluZyhzZWxmKToKKyAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCisKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiIngiLCBwYWQ9VHJ1ZSksIGInY21NelonKQorICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieHgiLCBwYWQ9VHJ1ZSksIGInY3o2SCsnKQorICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieHh4IiwgcGFkPVRydWUpLCBiJ2N6QWRLJykKKyAgICAgICAgZXEoYmFzZTY0LmI4NWVuY29kZShiInh4eHgiLCBwYWQ9VHJ1ZSksIGInY3pBZXQnKQorICAgICAgICBlcShiYXNlNjQuYjg1ZW5jb2RlKGIieHh4eHgiLCBwYWQ9VHJ1ZSksIGInY3pBZXRjbU16WicpCisKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2NtTXpaJyksIGIieFx4MDBceDAwXHgwMCIpCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjejZIKycpLCBiInh4XHgwMFx4MDAiKQorICAgICAgICBlcShiYXNlNjQuYjg1ZGVjb2RlKGInY3pBZEsnKSwgYiJ4eHhceDAwIikKKyAgICAgICAgZXEoYmFzZTY0LmI4NWRlY29kZShiJ2N6QWV0JyksIGIieHh4eCIpCisgICAgICAgIGVxKGJhc2U2NC5iODVkZWNvZGUoYidjekFldGNtTXpaJyksIGIieHh4eHhceDAwXHgwMFx4MDAiKQorCisgICAgZGVmIHRlc3RfYTg1ZGVjb2RlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgaWxsZWdhbCA9IChzZXQocmFuZ2UoMzIpKSB8IHNldChyYW5nZSgxMTgsIDI1NikpKSAtIHNldChiJyBcdFxuXHJcdicpCisgICAgICAgIGZvciBjIGluIGlsbGVnYWw6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1ieXRlcyhbY10pKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKGInISEhIScgKyBieXRlcyhbY10pKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtc2c9Ynl0ZXMoW2NdKSk6CisgICAgICAgICAgICAgICAgYmFzZTY0LmE4NWRlY29kZShiJyEhISEnICsgYnl0ZXMoW2NdKSwgYWRvYmU9RmFsc2UpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1ieXRlcyhbY10pKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYTg1ZGVjb2RlKGInPH4hISEhJyArIGJ5dGVzKFtjXSkgKyBiJ34+JywgYWRvYmU9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIm1hbGZvcm1lZCIsIGFkb2JlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPH5zdGlsbCBtYWxmb3JtZWQiLCBhZG9iZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFsc28gbWFsZm9ybWVkfj4iLCBhZG9iZT1UcnVlKQorCisgICAgICAgICMgV2l0aCBhZG9iZT1GYWxzZSAodGhlIGRlZmF1bHQpLCBBZG9iZSBmcmFtaW5nIG1hcmtlcnMgYXJlIGRpc2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8fn4+IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiI8fn4+IiwgYWRvYmU9RmFsc2UpCisgICAgICAgIGJhc2U2NC5hODVkZWNvZGUoYiI8fn4+IiwgYWRvYmU9VHJ1ZSkgICMgc2FuaXR5IGNoZWNrCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiJhYmN4IiwgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWJjZGV5IiwgYWRvYmU9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5hODVkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYSBiXG5jIiwgYWRvYmU9RmFsc2UsIGlnbm9yZWNoYXJzPWIiIikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3MnLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzOCcsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4VycsIGFkb2JlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYTg1ZGVjb2RlLCBiJ3M4Vy0nLCBhZG9iZT1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYmFzZTY0LmE4NWRlY29kZSwgYidzOFctIicsIGFkb2JlPUZhbHNlKQorCisgICAgZGVmIHRlc3RfYjg1ZGVjb2RlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgaWxsZWdhbCA9IGxpc3QocmFuZ2UoMzMpKSArIFwKKyAgICAgICAgICAgICAgICAgIGxpc3QoYiciXCcsLi86W1xcXScpICsgXAorICAgICAgICAgICAgICAgICAgbGlzdChyYW5nZSgxMjgsIDI1NikpCisgICAgICAgIGZvciBjIGluIGlsbGVnYWw6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1zZz1ieXRlcyhbY10pKToKKyAgICAgICAgICAgICAgICBiYXNlNjQuYjg1ZGVjb2RlKGInMDAwMCcgKyBieXRlcyhbY10pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfE4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiYXNlNjQuYjg1ZGVjb2RlLCBiJ3xOcycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfE5zQycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJhc2U2NC5iODVkZWNvZGUsIGInfE5zQzEnKQogCiAgICAgZGVmIHRlc3RfZGVjb2RlX25vbmFzY2lpX3N0cihzZWxmKToKICAgICAgICAgZGVjb2RlX2Z1bmNzID0gKGJhc2U2NC5iNjRkZWNvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuc3RhbmRhcmRfYjY0ZGVjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LnVybHNhZmVfYjY0ZGVjb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmIzMmRlY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5iMTZkZWNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlNjQuYjE2ZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgYmFzZTY0LmI4NWRlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhc2U2NC5hODVkZWNvZGUpCiAgICAgICAgIGZvciBmIGluIGRlY29kZV9mdW5jczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYsICd3aXRoIG5vbi1hc2NpaSBceGNiJykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weSBiL0xpYi90ZXN0L3Rlc3RfYmluYXNjaWkucHkKaW5kZXggMDRkOGY5ZC4uMzg5ZGFhMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaW5hc2NpaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2JpbmFzY2lpLnB5CkBAIC0xMzYsNiArMTM2LDE4IEBACiAgICAgICAgICMgSXNzdWUgIzc3MDEgKGNyYXNoIG9uIGEgcHlkZWJ1ZyBidWlsZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5iMmFfdXUoYid4JyksIGInIT4gICBcbicpCiAKKyAgICBkZWYgdGVzdF9jcmNfaHF4KHNlbGYpOgorICAgICAgICBjcmMgPSBiaW5hc2NpaS5jcmNfaHF4KHNlbGYudHlwZTJ0ZXN0KGIiVGVzdCB0aGUgQ1JDLTMyIG9mIiksIDApCisgICAgICAgIGNyYyA9IGJpbmFzY2lpLmNyY19ocXgoc2VsZi50eXBlMnRlc3QoYiIgdGhpcyBzdHJpbmcuIiksIGNyYykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmMsIDE0MjkwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgYmluYXNjaWkuY3JjX2hxeCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBiaW5hc2NpaS5jcmNfaHF4LCBzZWxmLnR5cGUydGVzdChiJycpKQorCisgICAgICAgIGZvciBjcmMgaW4gMCwgMSwgMHgxMjM0LCAweDEyMzQ1LCAweDEyMzQ1Njc4LCAtMToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuY3JjX2hxeChzZWxmLnR5cGUydGVzdChiJycpLCBjcmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmMgJiAweGZmZmYpCisKICAgICBkZWYgdGVzdF9jcmMzMihzZWxmKToKICAgICAgICAgY3JjID0gYmluYXNjaWkuY3JjMzIoc2VsZi50eXBlMnRlc3QoYiJUZXN0IHRoZSBDUkMtMzIgb2YiKSkKICAgICAgICAgY3JjID0gYmluYXNjaWkuY3JjMzIoc2VsZi50eXBlMnRlc3QoYiIgdGhpcyBzdHJpbmcuIiksIGNyYykKQEAgLTE2Miw5ICsxNzQsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJpbmFzY2lpLmEyYl9oZXgsIHRbOi0xXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYmluYXNjaWkuRXJyb3IsIGJpbmFzY2lpLmEyYl9oZXgsIHRbOi0xXSArIGIncScpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5oZXhsaWZ5KGInYScpLCBiJzYxJykKKyAgICAgICAgIyBDb25maXJtIHRoYXQgYjJhX2hleCA9PSBoZXhsaWZ5IGFuZCBhMmJfaGV4ID09IHVuaGV4bGlmeQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLmhleGxpZnkoc2VsZi50eXBlMnRlc3QocykpLCB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJpbmFzY2lpLnVuaGV4bGlmeShzZWxmLnR5cGUydGVzdCh0KSksIHUpCiAKICAgICBkZWYgdGVzdF9xcChzZWxmKToKKyAgICAgICAgYmluYXNjaWkuYTJiX3FwKGRhdGE9YiIiLCBoZWFkZXI9RmFsc2UpICAjIEtleXdvcmQgYXJndW1lbnRzIGFsbG93ZWQKKwogICAgICAgICAjIEEgdGVzdCBmb3IgU0YgYnVnIDUzNDM0NyAoc2VnZmF1bHRzIHdpdGhvdXQgdGhlIHByb3BlciBmaXgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGJpbmFzY2lpLmEyYl9xcChiIiIsICoqezE6MX0pCkBAIC0xNzIsNiArMTg4LDcgQEAKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiYmluYXNjaWkuYTJiX3FwKCoqezE6MX0pIGRpZG4ndCByYWlzZSBUeXBlRXJyb3IiKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3FwKGIiPSAiKSwgYiI9ICIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmluYXNjaWkuYTJiX3FwKGIiPT0iKSwgYiI9IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiaW5hc2NpaS5hMmJfcXAoYiI9QVgiKSwgYiI9QVgiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9iaW5vcC5weSBiL0xpYi90ZXN0L3Rlc3RfYmlub3AucHkKaW5kZXggODQxNzkxNi4uOTYzYWEwMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaW5vcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2Jpbm9wLnB5CkBAIC0zLDYgKzMsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gb3BlcmF0b3IgaW1wb3J0IGVxLCBuZSwgbHQsIGd0LCBsZSwgZ2UKK2Zyb20gYWJjIGltcG9ydCBBQkNNZXRhCiAKIGRlZiBnY2QoYSwgYik6CiAgICAgIiIiR3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgdXNpbmcgRXVjbGlkJ3MgYWxnb3JpdGhtLiIiIgpAQCAtMTk0LDEwICsxOTUsNiBAQAogICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHNlbGYpID09IG90aGVyCiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgICIiIkNvbXBhcmUgdHdvIFJhdHMgZm9yIGluZXF1YWxpdHkuIiIiCi0gICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgotCiBjbGFzcyBSYXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVW5pdCB0ZXN0cyBmb3IgUmF0IGNsYXNzIGFuZCBpdHMgc3VwcG9ydCB1dGlsaXRpZXMuIiIiCiAKQEAgLTMzNiw3ICszMzMsNyBAQAogICAgICAgICBzZWxmLmxvZ19vcGVyYXRpb24oJ0EuX19nZV9fJykKICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAKLWNsYXNzIEIoT3BlcmF0aW9uTG9nZ2VyKToKK2NsYXNzIEIoT3BlcmF0aW9uTG9nZ2VyLCBtZXRhY2xhc3M9QUJDTWV0YSk6CiAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgIHNlbGYubG9nX29wZXJhdGlvbignQi5fX2VxX18nKQogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKQEAgLTM1OCw2ICszNTUsMjAgQEAKICAgICAgICAgc2VsZi5sb2dfb3BlcmF0aW9uKCdDLl9fZ2VfXycpCiAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAogCitjbGFzcyBWKE9wZXJhdGlvbkxvZ2dlcik6CisgICAgIiIiVmlydHVhbCBzdWJjbGFzcyBvZiBCIiIiCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHNlbGYubG9nX29wZXJhdGlvbignVi5fX2VxX18nKQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgc2VsZi5sb2dfb3BlcmF0aW9uKCdWLl9fbGVfXycpCisgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBzZWxmLmxvZ19vcGVyYXRpb24oJ1YuX19nZV9fJykKKyAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCitCLnJlZ2lzdGVyKFYpCisKKwogY2xhc3MgT3BlcmF0aW9uT3JkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfY29tcGFyaXNvbl9vcmRlcnMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UoZXEsIEEsIEEpLCBbJ0EuX19lcV9fJywgJ0EuX19lcV9fJ10pCkBAIC0zNzMsOCArMzg0LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UobGUsIEIsIEMpLCBbJ0MuX19nZV9fJywgJ0IuX19sZV9fJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UobGUsIEMsIEIpLCBbJ0MuX19sZV9fJywgJ0IuX19nZV9fJ10pCiAKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoViwgQikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UoZXEsIEIsIFYpLCBbJ0IuX19lcV9fJywgJ1YuX19lcV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Bfc2VxdWVuY2UobGUsIEIsIFYpLCBbJ0IuX19sZV9fJywgJ1YuX19nZV9fJ10pCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFJhdFRlc3RDYXNlLCBPcGVyYXRpb25PcmRlclRlc3RzKQogCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYmlzZWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKaW5kZXggN2I5YmQxOS4uNTgwYTk2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9iaXNlY3QucHkKQEAgLTcsNyArNyw3IEBACiBjX2Jpc2VjdCA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnYmlzZWN0JywgZnJlc2g9WydfYmlzZWN0J10pCiAKIGNsYXNzIFJhbmdlKG9iamVjdCk6Ci0gICAgIiIiQSB0cml2aWFsIHJhbmdlKCktbGlrZSBvYmplY3Qgd2l0aG91dCBhbnkgaW50ZWdlciB3aWR0aCBsaW1pdGF0aW9ucy4iIiIKKyAgICAiIiJBIHRyaXZpYWwgcmFuZ2UoKS1saWtlIG9iamVjdCB0aGF0IGhhcyBhbiBpbnNlcnQoKSBtZXRob2QuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXJ0LCBzdG9wKToKICAgICAgICAgc2VsZi5zdGFydCA9IHN0YXJ0CiAgICAgICAgIHNlbGYuc3RvcCA9IHN0b3AKQEAgLTEyMCwxMCArMTIwLDEwIEBACiAgICAgZGVmIHRlc3RfbmVnYXRpdmVfbG8oc2VsZik6CiAgICAgICAgICMgSXNzdWUgMzMwMQogICAgICAgICBtb2QgPSBzZWxmLm1vZHVsZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X2xlZnQsIFsxLCAyLCAzXSwgNSwgLTEsIDMpLAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuYmlzZWN0X3JpZ2h0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKSwKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMyksCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1vZC5iaXNlY3RfbGVmdCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmJpc2VjdF9yaWdodCwgWzEsIDIsIDNdLCA1LCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbW9kLmluc29ydF9sZWZ0LCBbMSwgMiwgM10sIDUsIC0xLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtb2QuaW5zb3J0X3JpZ2h0LCBbMSwgMiwgM10sIDUsIC0xLCAzKQogCiAgICAgZGVmIHRlc3RfbGFyZ2VfcmFuZ2Uoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTM0OTYKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYm9vbC5weSBiL0xpYi90ZXN0L3Rlc3RfYm9vbC5weQppbmRleCA0YmFiMjhiLi4yNTA3NDM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Jvb2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ib29sLnB5CkBAIC0yNjksMTAgKzI2OSw5IEBACiAKICAgICBkZWYgdGVzdF9waWNrbGUoc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKFRydWUpKSwgVHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKEZhbHNlKSksIEZhbHNlKQotICAgICAgICBzZWxmLmFzc2VydElzKHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoVHJ1ZSwgVHJ1ZSkpLCBUcnVlKQotICAgICAgICBzZWxmLmFzc2VydElzKHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoRmFsc2UsIFRydWUpKSwgRmFsc2UpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKFRydWUsIHByb3RvKSksIFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoRmFsc2UsIHByb3RvKSksIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfcGlja2xldmFsdWVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yIHNwZWNpZmljIGJhY2t3YXJkcy1jb21wYXRpYmxlIHBpY2tsZSB2YWx1ZXMKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5IGIvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKaW5kZXggMDRlM2Y2MS4uYWExNTM3NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWZmZXIucHkKQEAgLTE0OSwxNSArMTQ5LDE1IEBACiAgICAgICAgZm9ybWF0IGNoYXJhY3Rlci4iIiIKICAgICB4ID0gcmFuZHJhbmdlKCpmbXRkaWN0W21vZGVdW2NoYXJdKQogICAgIGlmIGNoYXIgPT0gJ2MnOgotICAgICAgICB4ID0gYnl0ZXMoY2hyKHgpLCAnbGF0aW4xJykKKyAgICAgICAgeCA9IGJ5dGVzKFt4XSkKKyAgICAgICAgaWYgb2JqID09ICdudW1weScgYW5kIHggPT0gYidceDAwJzoKKyAgICAgICAgICAgICMgaHR0cDovL3Byb2plY3RzLnNjaXB5Lm9yZy9udW1weS90aWNrZXQvMTkyNQorICAgICAgICAgICAgeCA9IGInXHgwMScKICAgICBpZiBjaGFyID09ICc/JzoKICAgICAgICAgeCA9IGJvb2woeCkKICAgICBpZiBjaGFyID09ICdmJyBvciBjaGFyID09ICdkJzoKICAgICAgICAgeCA9IHN0cnVjdC5wYWNrKGNoYXIsIHgpCiAgICAgICAgIHggPSBzdHJ1Y3QudW5wYWNrKGNoYXIsIHgpWzBdCi0gICAgaWYgb2JqID09ICdudW1weScgYW5kIHggPT0gYidceDAwJzoKLSAgICAgICAgIyBodHRwOi8vcHJvamVjdHMuc2NpcHkub3JnL251bXB5L3RpY2tldC8xOTI1Ci0gICAgICAgIHggPSBiJ1x4MDEnCiAgICAgcmV0dXJuIHgKIAogZGVmIGdlbl9pdGVtKGZtdCwgb2JqKToKQEAgLTI0NDksNiArMjQ0OSwyMSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRvYnl0ZXMoKSwgYicnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnRvbGlzdCgpLCBbXSkKIAorICAgIGNoZWNrX3NpemVvZiA9IHN1cHBvcnQuY2hlY2tfc2l6ZW9mCisKKyAgICBkZWYgdGVzdF9tZW1vcnl2aWV3X3NpemVvZihzZWxmKToKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgorICAgICAgICB2c2l6ZSA9IHN1cHBvcnQuY2FsY3ZvYmpzaXplCisgICAgICAgIGJhc2Vfc3RydWN0ID0gJ1BuaW4gMlAybjJpNVAgM2NQJworICAgICAgICBwZXJfZGltID0gJzNuJworCisgICAgICAgIGl0ZW1zID0gbGlzdChyYW5nZSg4KSkKKyAgICAgICAgY2hlY2sobWVtb3J5dmlldyhiJycpLCB2c2l6ZShiYXNlX3N0cnVjdCArIDEgKiBwZXJfZGltKSkKKyAgICAgICAgYSA9IG5kYXJyYXkoaXRlbXMsIHNoYXBlPVsyLCA0XSwgZm9ybWF0PSJiIikKKyAgICAgICAgY2hlY2sobWVtb3J5dmlldyhhKSwgdnNpemUoYmFzZV9zdHJ1Y3QgKyAyICogcGVyX2RpbSkpCisgICAgICAgIGEgPSBuZGFycmF5KGl0ZW1zLCBzaGFwZT1bMiwgMiwgMl0sIGZvcm1hdD0iYiIpCisgICAgICAgIGNoZWNrKG1lbW9yeXZpZXcoYSksIHZzaXplKGJhc2Vfc3RydWN0ICsgMyAqIHBlcl9kaW0pKQorCiAgICAgZGVmIHRlc3RfbWVtb3J5dmlld19zdHJ1Y3RfbW9kdWxlKHNlbGYpOgogCiAgICAgICAgIGNsYXNzIElOVChvYmplY3QpOgpAQCAtNDI5MCw5ICs0MzA1LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIG1lbW9yeXZpZXcsIHgpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RCdWZmZXJQcm90b2NvbCkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5IGIvTGliL3Rlc3QvdGVzdF9idWZpby5weQppbmRleCA2MzM4YWQ4Li45OTMxYzg0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1ZmlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnVmaW8ucHkKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgcykKICAgICAgICAgICAgIGxpbmUgPSBmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgbGluZSkgIyBNdXN0IGJlIGF0IEVPRgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsaW5lKSAjIE11c3QgYmUgYXQgRU9GCiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5IGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CmluZGV4IGMzNDJhNDMuLmQwMGQwYjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKQEAgLTE2LDYgKzE2LDcgQEAKIGltcG9ydCB3YXJuaW5ncwogZnJvbSBvcGVyYXRvciBpbXBvcnQgbmVnCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmssICBydW5fdW5pdHRlc3QsIGNoZWNrX3dhcm5pbmdzCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogdHJ5OgogICAgIGltcG9ydCBwdHksIHNpZ25hbAogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMTIwLDkgKzEyMSw5IEBACiAKIGNsYXNzIEJ1aWx0aW5UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIEhlbHBlciB0byBjaGVjayBwaWNrbGFiaWxpdHkKLSAgICBkZWYgY2hlY2tfaXRlcl9waWNrbGUoc2VsZiwgaXQsIHNlcSk6CisgICAgZGVmIGNoZWNrX2l0ZXJfcGlja2xlKHNlbGYsIGl0LCBzZXEsIHByb3RvKToKICAgICAgICAgaXRvcmcgPSBpdAotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQorICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIHNlcSkKQEAgLTEzMyw3ICsxMzQsNyBAQAogICAgICAgICAgICAgbmV4dChpdCkKICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CiAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKKyAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCiAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIHNlcVsxOl0pCiAKQEAgLTQ2NCw2ICs0NjUsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBldmFsLCAoKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGJvbVs6Ml0gKyBiJ2EnKQogCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGV2YWwsICJmb28iLCB7fSwgWCgpKQorCiAgICAgZGVmIHRlc3RfZ2VuZXJhbF9ldmFsKHNlbGYpOgogICAgICAgICAjIFRlc3RzIHRoYXQgZ2VuZXJhbCBtYXBwaW5ncyBjYW4gYmUgdXNlZCBmb3IgdGhlIGxvY2FscyBhcmd1bWVudAogCkBAIC01NzksNyArNTg1LDEwIEBACiAgICAgICAgICAgICAgICAgcmFpc2UgZnJvemVuZGljdF9lcnJvcigiZnJvemVuZGljdCBpcyByZWFkb25seSIpCiAKICAgICAgICAgIyByZWFkLW9ubHkgYnVpbHRpbnMKLSAgICAgICAgZnJvemVuX2J1aWx0aW5zID0gZnJvemVuZGljdChfX2J1aWx0aW5zX18pCisgICAgICAgIGlmIGlzaW5zdGFuY2UoX19idWlsdGluc19fLCB0eXBlcy5Nb2R1bGVUeXBlKToKKyAgICAgICAgICAgIGZyb3plbl9idWlsdGlucyA9IGZyb3plbmRpY3QoX19idWlsdGluc19fLl9fZGljdF9fKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnJvemVuX2J1aWx0aW5zID0gZnJvemVuZGljdChfX2J1aWx0aW5zX18pCiAgICAgICAgIGNvZGUgPSBjb21waWxlKCJfX2J1aWx0aW5zX19bJ3N1cGVyZ2xvYmFsJ109MjsgcHJpbnQoc3VwZXJnbG9iYWwpIiwgInRlc3QiLCAiZXhlYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGZyb3plbmRpY3RfZXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWMsIGNvZGUsIHsnX19idWlsdGluc19fJzogZnJvemVuX2J1aWx0aW5zfSkKQEAgLTYyNyw5ICs2MzYsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBmaWx0ZXIoNDIsICgxLCAyKSkpCiAKICAgICBkZWYgdGVzdF9maWx0ZXJfcGlja2xlKHNlbGYpOgotICAgICAgICBmMSA9IGZpbHRlcihmaWx0ZXJfY2hhciwgImFiY2RlYWJjZGUiKQotICAgICAgICBmMiA9IGZpbHRlcihmaWx0ZXJfY2hhciwgImFiY2RlYWJjZGUiKQotICAgICAgICBzZWxmLmNoZWNrX2l0ZXJfcGlja2xlKGYxLCBsaXN0KGYyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmMSA9IGZpbHRlcihmaWx0ZXJfY2hhciwgImFiY2RlYWJjZGUiKQorICAgICAgICAgICAgZjIgPSBmaWx0ZXIoZmlsdGVyX2NoYXIsICJhYmNkZWFiY2RlIikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfaXRlcl9waWNrbGUoZjEsIGxpc3QoZjIpLCBwcm90bykKIAogICAgIGRlZiB0ZXN0X2dldGF0dHIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShnZXRhdHRyKHN5cywgJ3N0ZG91dCcpIGlzIHN5cy5zdGRvdXQpCkBAIC04MjUsOSArODM1LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvciwgbGlzdCwgbWFwKGJhZGZ1bmMsIHJhbmdlKDUpKSkKIAogICAgIGRlZiB0ZXN0X21hcF9waWNrbGUoc2VsZik6Ci0gICAgICAgIG0xID0gbWFwKG1hcF9jaGFyLCAiSXMgdGhpcyB0aGUgcmVhbCBsaWZlPyIpCi0gICAgICAgIG0yID0gbWFwKG1hcF9jaGFyLCAiSXMgdGhpcyB0aGUgcmVhbCBsaWZlPyIpCi0gICAgICAgIHNlbGYuY2hlY2tfaXRlcl9waWNrbGUobTEsIGxpc3QobTIpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIG0xID0gbWFwKG1hcF9jaGFyLCAiSXMgdGhpcyB0aGUgcmVhbCBsaWZlPyIpCisgICAgICAgICAgICBtMiA9IG1hcChtYXBfY2hhciwgIklzIHRoaXMgdGhlIHJlYWwgbGlmZT8iKQorICAgICAgICAgICAgc2VsZi5jaGVja19pdGVyX3BpY2tsZShtMSwgbGlzdChtMiksIHByb3RvKQogCiAgICAgZGVmIHRlc3RfbWF4KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgnMTIzMTIzJyksICczJykKQEAgLTgzOSw4ICs4NTAsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMSwgMi4wLCAzKSwgMykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMS4wLCAyLCAzKSwgMykKIAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1heCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtYXgsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtYXgsICgpKQorICAgICAgICBjbGFzcyBCYWRTZXE6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWF4LCBCYWRTZXEoKSkKKwogICAgICAgICBmb3Igc3RtdCBpbiAoCiAgICAgICAgICAgICAibWF4KGtleT1pbnQpIiwgICAgICAgICAgICAgICAgICMgbm8gYXJncworICAgICAgICAgICAgIm1heChkZWZhdWx0PU5vbmUpIiwKKyAgICAgICAgICAgICJtYXgoMSwgMiwgZGVmYXVsdD1Ob25lKSIsICAgICAgIyByZXF1aXJlIGNvbnRhaW5lciBmb3IgZGVmYXVsdAorICAgICAgICAgICAgIm1heChkZWZhdWx0PU5vbmUsIGtleT1pbnQpIiwKICAgICAgICAgICAgICJtYXgoMSwga2V5PWludCkiLCAgICAgICAgICAgICAgIyBzaW5nbGUgYXJnIG5vdCBpdGVyYWJsZQogICAgICAgICAgICAgIm1heCgxLCAyLCBrZXlzdG9uZT1pbnQpIiwgICAgICAjIHdyb25nIGtleXdvcmQKICAgICAgICAgICAgICJtYXgoMSwgMiwga2V5PWludCwgYWJjPWludCkiLCAgIyB0d28gbWFueSBrZXl3b3JkcwpAQCAtODU3LDYgKzg3OSwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwyKSwga2V5PW5lZyksIDEpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXgoMSwgMiwga2V5PW5lZyksIDEpICAgICAjIHR3byBlbGVtcwogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KCgpLCBkZWZhdWx0PU5vbmUpLCBOb25lKSAgICAjIHplcm8gZWxlbSBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwpLCBkZWZhdWx0PU5vbmUpLCAxKSAgICAgIyBvbmUgZWxlbSBpdGVyYWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwyKSwgZGVmYXVsdD1Ob25lKSwgMikgICAgIyB0d28gZWxlbSBpdGVyYWJsZQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWF4KCgpLCBkZWZhdWx0PTEsIGtleT1uZWcpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1heCgoMSwgMiksIGRlZmF1bHQ9Mywga2V5PW5lZyksIDEpCisKICAgICAgICAgZGF0YSA9IFtyYW5kb20ucmFuZHJhbmdlKDIwMCkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0KICAgICAgICAga2V5cyA9IGRpY3QoKGVsZW0sIHJhbmRvbS5yYW5kcmFuZ2UoNTApKSBmb3IgZWxlbSBpbiBkYXRhKQogICAgICAgICBmID0ga2V5cy5fX2dldGl0ZW1fXwpAQCAtODgzLDYgKzkxMiw5IEBACiAKICAgICAgICAgZm9yIHN0bXQgaW4gKAogICAgICAgICAgICAgIm1pbihrZXk9aW50KSIsICAgICAgICAgICAgICAgICAjIG5vIGFyZ3MKKyAgICAgICAgICAgICJtaW4oZGVmYXVsdD1Ob25lKSIsCisgICAgICAgICAgICAibWluKDEsIDIsIGRlZmF1bHQ9Tm9uZSkiLCAgICAgICMgcmVxdWlyZSBjb250YWluZXIgZm9yIGRlZmF1bHQKKyAgICAgICAgICAgICJtaW4oZGVmYXVsdD1Ob25lLCBrZXk9aW50KSIsCiAgICAgICAgICAgICAibWluKDEsIGtleT1pbnQpIiwgICAgICAgICAgICAgICMgc2luZ2xlIGFyZyBub3QgaXRlcmFibGUKICAgICAgICAgICAgICJtaW4oMSwgMiwga2V5c3RvbmU9aW50KSIsICAgICAgIyB3cm9uZyBrZXl3b3JkCiAgICAgICAgICAgICAibWluKDEsIDIsIGtleT1pbnQsIGFiYz1pbnQpIiwgICMgdHdvIG1hbnkga2V5d29yZHMKQEAgLTg5OSw2ICs5MzEsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsMiksIGtleT1uZWcpLCAyKSAgICAjIHR3byBlbGVtIGl0ZXJhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWluKDEsIDIsIGtleT1uZWcpLCAyKSAgICAgIyB0d28gZWxlbXMKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigoKSwgZGVmYXVsdD1Ob25lKSwgTm9uZSkgICAgIyB6ZXJvIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsKSwgZGVmYXVsdD1Ob25lKSwgMSkgICAgICMgb25lIGVsZW0gaXRlcmFibGUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsMiksIGRlZmF1bHQ9Tm9uZSksIDEpICAgICMgdHdvIGVsZW0gaXRlcmFibGUKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1pbigoKSwgZGVmYXVsdD0xLCBrZXk9bmVnKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW4oKDEsIDIpLCBkZWZhdWx0PTEsIGtleT1uZWcpLCAyKQorCiAgICAgICAgIGRhdGEgPSBbcmFuZG9tLnJhbmRyYW5nZSgyMDApIGZvciBpIGluIHJhbmdlKDEwMCldCiAgICAgICAgIGtleXMgPSBkaWN0KChlbGVtLCByYW5kb20ucmFuZHJhbmdlKDUwKSkgZm9yIGVsZW0gaW4gZGF0YSkKICAgICAgICAgZiA9IGtleXMuX19nZXRpdGVtX18KQEAgLTk0MCwyOSArOTc5LDI1IEBACiAgICAgZGVmIHdyaXRlX3Rlc3RmaWxlKHNlbGYpOgogICAgICAgICAjIE5CIHRoZSBmaXJzdCA0IGxpbmVzIGFyZSBhbHNvIHVzZWQgdG8gdGVzdCBpbnB1dCwgYmVsb3cKICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3cnKQotICAgICAgICB0cnk6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIFRFU1RGTikKKyAgICAgICAgd2l0aCBmcDoKICAgICAgICAgICAgIGZwLndyaXRlKCcxKzFcbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZycpCiAgICAgICAgICAgICBmcC53cml0ZSgnLlxuJykKICAgICAgICAgICAgIGZwLndyaXRlKCdEZWFyIEpvaG5cbicpCiAgICAgICAgICAgICBmcC53cml0ZSgnWFhYJyoxMDApCiAgICAgICAgICAgICBmcC53cml0ZSgnWVlZJyoxMDApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBmcC5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9vcGVuKHNlbGYpOgogICAgICAgICBzZWxmLndyaXRlX3Rlc3RmaWxlKCkKICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3InKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggZnA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnMSsxXG4nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcC5yZWFkbGluZSgpLCAnVGhlIHF1aWNrIGJyb3duIGZveCBqdW1wcyBvdmVyIHRoZSBsYXp5IGRvZy5cbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDQpLCAnRGVhcicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWRsaW5lKDEwMCksICcgSm9oblxuJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnAucmVhZCgzMDApLCAnWFhYJyoxMDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLnJlYWQoMTAwMCksICdZWVknKjEwMCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKLSAgICAgICAgICAgIHVubGluayhURVNURk4pCiAKICAgICBkZWYgdGVzdF9vcGVuX2RlZmF1bHRfZW5jb2Rpbmcoc2VsZik6CiAgICAgICAgIG9sZF9lbnZpcm9uID0gZGljdChvcy5lbnZpcm9uKQpAQCAtOTc3LDE1ICsxMDEyLDE3IEBACiAgICAgICAgICAgICBzZWxmLndyaXRlX3Rlc3RmaWxlKCkKICAgICAgICAgICAgIGN1cnJlbnRfbG9jYWxlX2VuY29kaW5nID0gbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKEZhbHNlKQogICAgICAgICAgICAgZnAgPSBvcGVuKFRFU1RGTiwgJ3cnKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBmcDoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwLmVuY29kaW5nLCBjdXJyZW50X2xvY2FsZV9lbmNvZGluZykKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZnAuY2xvc2UoKQotICAgICAgICAgICAgICAgIHVubGluayhURVNURk4pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBvcy5lbnZpcm9uLmNsZWFyKCkKICAgICAgICAgICAgIG9zLmVudmlyb24udXBkYXRlKG9sZF9lbnZpcm9uKQogCisgICAgZGVmIHRlc3Rfb3Blbl9ub25faW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGZpbGVvYmogPSBvcGVuKF9fZmlsZV9fKQorICAgICAgICB3aXRoIGZpbGVvYmo6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShmaWxlb2JqLmZpbGVubygpKSkKKwogICAgIGRlZiB0ZXN0X29yZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcmQoJyAnKSwgMzIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JkKCdBJyksIDY1KQpAQCAtMTA5Niw4MyArMTEzMyw2IEBACiAgICAgICAgICAgICBzeXMuc3RkaW4gPSBzYXZlc3RkaW4KICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBzYXZlc3Rkb3V0CiAgICAgICAgICAgICBmcC5jbG9zZSgpCi0gICAgICAgICAgICB1bmxpbmsoVEVTVEZOKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MocHR5LCAidGhlIHB0eSBhbmQgc2lnbmFsIG1vZHVsZXMgbXVzdCBiZSBhdmFpbGFibGUiKQotICAgIGRlZiBjaGVja19pbnB1dF90dHkoc2VsZiwgcHJvbXB0LCB0ZXJtaW5hbF9pbnB1dCwgc3RkaW9fZW5jb2Rpbmc9Tm9uZSk6Ci0gICAgICAgIGlmIG5vdCBzeXMuc3RkaW4uaXNhdHR5KCkgb3Igbm90IHN5cy5zdGRvdXQuaXNhdHR5KCk6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzdGRpbiBhbmQgc3Rkb3V0IG11c3QgYmUgdHR5cyIpCi0gICAgICAgIHIsIHcgPSBvcy5waXBlKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGlkLCBmZCA9IHB0eS5mb3JrKCkKLSAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBBdHRyaWJ1dGVFcnJvcikgYXMgZToKLSAgICAgICAgICAgIG9zLmNsb3NlKHIpCi0gICAgICAgICAgICBvcy5jbG9zZSh3KQotICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgicHR5LmZvcmsoKSByYWlzZWQge30iLmZvcm1hdChlKSkKLSAgICAgICAgaWYgcGlkID09IDA6Ci0gICAgICAgICAgICAjIENoaWxkCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHN0dWNrIGlmIHRoZXJlJ3MgYSBwcm9ibGVtCi0gICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDIpCi0gICAgICAgICAgICAgICAgb3MuY2xvc2UocikKLSAgICAgICAgICAgICAgICAjIENoZWNrIHRoZSBlcnJvciBoYW5kbGVycyBhcmUgYWNjb3VudGVkIGZvcgotICAgICAgICAgICAgICAgIGlmIHN0ZGlvX2VuY29kaW5nOgotICAgICAgICAgICAgICAgICAgICBzeXMuc3RkaW4gPSBpby5UZXh0SU9XcmFwcGVyKHN5cy5zdGRpbi5kZXRhY2goKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1zdGRpb19lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpCi0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQgPSBpby5UZXh0SU9XcmFwcGVyKHN5cy5zdGRvdXQuZGV0YWNoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPXN0ZGlvX2VuY29kaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9J3JlcGxhY2UnKQotICAgICAgICAgICAgICAgIHdpdGggb3Blbih3LCAidyIpIGFzIHdwaXBlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgidHR5ID0iLCBzeXMuc3RkaW4uaXNhdHR5KCkgYW5kIHN5cy5zdGRvdXQuaXNhdHR5KCksIGZpbGU9d3BpcGUpCi0gICAgICAgICAgICAgICAgICAgIHByaW50KGFzY2lpKGlucHV0KHByb21wdCkpLCBmaWxlPXdwaXBlKQotICAgICAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICAjIFdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIHRvIHVuaXR0ZXN0Li4uCi0gICAgICAgICAgICAgICAgb3MuX2V4aXQoMCkKLSAgICAgICAgIyBQYXJlbnQKLSAgICAgICAgb3MuY2xvc2UodykKLSAgICAgICAgb3Mud3JpdGUoZmQsIHRlcm1pbmFsX2lucHV0ICsgYiJcclxuIikKLSAgICAgICAgIyBHZXQgcmVzdWx0cyBmcm9tIHRoZSBwaXBlCi0gICAgICAgIHdpdGggb3BlbihyLCAiciIpIGFzIHJwaXBlOgotICAgICAgICAgICAgbGluZXMgPSBbXQotICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICBsaW5lID0gcnBpcGUucmVhZGxpbmUoKS5zdHJpcCgpCi0gICAgICAgICAgICAgICAgaWYgbGluZSA9PSAiIjoKLSAgICAgICAgICAgICAgICAgICAgIyBUaGUgb3RoZXIgZW5kIHdhcyBjbG9zZWQgPT4gdGhlIGNoaWxkIGV4aXRlZAotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQotICAgICAgICAjIENoZWNrIHRoZSByZXN1bHQgd2FzIGdvdCBhbmQgY29ycmVzcG9uZHMgdG8gdGhlIHVzZXIncyB0ZXJtaW5hbCBpbnB1dAotICAgICAgICBpZiBsZW4obGluZXMpICE9IDI6Ci0gICAgICAgICAgICAjIFNvbWV0aGluZyB3ZW50IHdyb25nLCB0cnkgdG8gZ2V0IGF0IHN0ZGVycgotICAgICAgICAgICAgd2l0aCBvcGVuKGZkLCAiciIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikgYXMgY2hpbGRfb3V0cHV0OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiZ290ICVkIGxpbmVzIGluIHBpcGUgYnV0IGV4cGVjdGVkIDIsIGNoaWxkIG91dHB1dCB3YXM6XG4lcyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJSAobGVuKGxpbmVzKSwgY2hpbGRfb3V0cHV0LnJlYWQoKSkpCi0gICAgICAgIG9zLmNsb3NlKGZkKQotICAgICAgICAjIENoZWNrIHdlIGRpZCBleGVyY2lzZSB0aGUgR05VIHJlYWRsaW5lIHBhdGgKLSAgICAgICAgc2VsZi5hc3NlcnRJbihsaW5lc1swXSwgeyd0dHkgPSBUcnVlJywgJ3R0eSA9IEZhbHNlJ30pCi0gICAgICAgIGlmIGxpbmVzWzBdICE9ICd0dHkgPSBUcnVlJzoKLSAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInN0YW5kYXJkIElPIGluIHNob3VsZCBoYXZlIGJlZW4gYSB0dHkiKQotICAgICAgICBpbnB1dF9yZXN1bHQgPSBldmFsKGxpbmVzWzFdKSAgICMgYXNjaWkoKSAtPiBldmFsKCkgcm91bmR0cmlwCi0gICAgICAgIGlmIHN0ZGlvX2VuY29kaW5nOgotICAgICAgICAgICAgZXhwZWN0ZWQgPSB0ZXJtaW5hbF9pbnB1dC5kZWNvZGUoc3RkaW9fZW5jb2RpbmcsICdzdXJyb2dhdGVlc2NhcGUnKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZXhwZWN0ZWQgPSB0ZXJtaW5hbF9pbnB1dC5kZWNvZGUoc3lzLnN0ZGluLmVuY29kaW5nKSAgIyB3aGF0IGVsc2U/Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5wdXRfcmVzdWx0LCBleHBlY3RlZCkKLQotICAgIGRlZiB0ZXN0X2lucHV0X3R0eShzZWxmKToKLSAgICAgICAgIyBUZXN0IGlucHV0KCkgZnVuY3Rpb25hbGl0eSB3aGVuIHdpcmVkIHRvIGEgdHR5ICh0aGUgY29kZSBwYXRoCi0gICAgICAgICMgaXMgZGlmZmVyZW50IGFuZCBpbnZva2VzIEdOVSByZWFkbGluZSBpZiBhdmFpbGFibGUpLgotICAgICAgICBzZWxmLmNoZWNrX2lucHV0X3R0eSgicHJvbXB0IiwgYiJxdXV4IikKLQotICAgIGRlZiB0ZXN0X2lucHV0X3R0eV9ub25fYXNjaWkoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgc3RkaW4vc3Rkb3V0IGVuY29kaW5nIGlzIHVzZWQgd2hlbiBpbnZva2luZyBHTlUgcmVhZGxpbmUKLSAgICAgICAgc2VsZi5jaGVja19pbnB1dF90dHkoInByb21wdMOpIiwgYiJxdXV4XHhlOSIsICJ1dGYtOCIpCi0KLSAgICBkZWYgdGVzdF9pbnB1dF90dHlfbm9uX2FzY2lpX3VuaWNvZGVfZXJyb3JzKHNlbGYpOgotICAgICAgICAjIENoZWNrIHN0ZGluL3N0ZG91dCBlcnJvciBoYW5kbGVyIGlzIHVzZWQgd2hlbiBpbnZva2luZyBHTlUgcmVhZGxpbmUKLSAgICAgICAgc2VsZi5jaGVja19pbnB1dF90dHkoInByb21wdMOpIiwgYiJxdXV4XHhlOSIsICJhc2NpaSIpCiAKICAgICAjIHRlc3RfaW50KCk6IHNlZSB0ZXN0X2ludC5weSBmb3IgdGVzdHMgb2YgYnVpbHQtaW4gZnVuY3Rpb24gaW50KCkuCiAKQEAgLTEzOTksOCArMTM1OSw5IEBACiAgICAgICAgIGEgPSAoMSwgMiwgMykKICAgICAgICAgYiA9ICg0LCA1LCA2KQogICAgICAgICB0ID0gWygxLCA0KSwgKDIsIDUpLCAoMywgNildCi0gICAgICAgIHoxID0gemlwKGEsIGIpCi0gICAgICAgIHNlbGYuY2hlY2tfaXRlcl9waWNrbGUoejEsIHQpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgejEgPSB6aXAoYSwgYikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfaXRlcl9waWNrbGUoejEsIHQsIHByb3RvKQogCiAgICAgZGVmIHRlc3RfZm9ybWF0KHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhlIGJhc2ljIG1hY2hpbmVyeSBvZiB0aGUgZm9ybWF0KCkgYnVpbHRpbi4gIERvbid0IHRlc3QKQEAgLTE0NzYsMTcgKzE0MzcsMTEgQEAKICAgICAgICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgICAjIElzc3VlICM3OTk0OiBvYmplY3QuX19mb3JtYXRfXyB3aXRoIGEgbm9uLWVtcHR5IGZvcm1hdCBzdHJpbmcgaXMKICAgICAgICAgIyAgZGVwcmVjYXRlZAotICAgICAgICBkZWYgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcob2JqLCBmbXRfc3RyLCBzaG91bGRfcmFpc2Vfd2FybmluZyk6Ci0gICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiYWx3YXlzIiwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgICAgIGZvcm1hdChvYmosIGZtdF9zdHIpCi0gICAgICAgICAgICBpZiBzaG91bGRfcmFpc2Vfd2FybmluZzoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uod1swXS5tZXNzYWdlLCBEZXByZWNhdGlvbldhcm5pbmcpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0cmluZycsIHN0cih3WzBdLm1lc3NhZ2UpKQorICAgICAgICBkZWYgdGVzdF9kZXByZWNhdGVkX2Zvcm1hdF9zdHJpbmcob2JqLCBmbXRfc3RyLCBzaG91bGRfcmFpc2UpOgorICAgICAgICAgICAgaWYgc2hvdWxkX3JhaXNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZm9ybWF0LCBvYmosIGZtdF9zdHIpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAwKQorICAgICAgICAgICAgICAgIGZvcm1hdChvYmosIGZtdF9zdHIpCiAKICAgICAgICAgZm10X3N0cnMgPSBbJycsICdzJ10KIApAQCAtMTUzMyw2ICsxNDg4LDExOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0cCwgMSwgMikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdHAsIGE9MSwgYj0yKQogCitAdW5pdHRlc3Quc2tpcFVubGVzcyhwdHksICJ0aGUgcHR5IGFuZCBzaWduYWwgbW9kdWxlcyBtdXN0IGJlIGF2YWlsYWJsZSIpCitjbGFzcyBQdHlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgdGhhdCB1c2UgYSBwc2V1ZG8gdGVybWluYWwgdG8gZ3VhcmFudGVlIHN0ZGluIGFuZCBzdGRvdXQgYXJlCisgICAgdGVybWluYWxzIGluIHRoZSB0ZXN0IGVudmlyb25tZW50IiIiCisKKyAgICBkZWYgcnVuX2NoaWxkKHNlbGYsIGNoaWxkLCB0ZXJtaW5hbF9pbnB1dCk6CisgICAgICAgIHIsIHcgPSBvcy5waXBlKCkgICMgUGlwZSB0ZXN0IHJlc3VsdHMgZnJvbSBjaGlsZCBiYWNrIHRvIHBhcmVudAorICAgICAgICB0cnk6CisgICAgICAgICAgICBwaWQsIGZkID0gcHR5LmZvcmsoKQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSBhcyBlOgorICAgICAgICAgICAgb3MuY2xvc2UocikKKyAgICAgICAgICAgIG9zLmNsb3NlKHcpCisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJwdHkuZm9yaygpIHJhaXNlZCB7fSIuZm9ybWF0KGUpKQorICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAjIENoaWxkCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHN0dWNrIGlmIHRoZXJlJ3MgYSBwcm9ibGVtCisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDIpCisgICAgICAgICAgICAgICAgb3MuY2xvc2UocikKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4odywgInciKSBhcyB3cGlwZToKKyAgICAgICAgICAgICAgICAgICAgY2hpbGQod3BpcGUpCisgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgdHJhY2ViYWNrLnByaW50X2V4YygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgICMgV2UgZG9uJ3Qgd2FudCB0byByZXR1cm4gdG8gdW5pdHRlc3QuLi4KKyAgICAgICAgICAgICAgICBvcy5fZXhpdCgwKQorICAgICAgICAjIFBhcmVudAorICAgICAgICBvcy5jbG9zZSh3KQorICAgICAgICBvcy53cml0ZShmZCwgdGVybWluYWxfaW5wdXQpCisgICAgICAgICMgR2V0IHJlc3VsdHMgZnJvbSB0aGUgcGlwZQorICAgICAgICB3aXRoIG9wZW4ociwgInIiKSBhcyBycGlwZToKKyAgICAgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgbGluZSA9IHJwaXBlLnJlYWRsaW5lKCkuc3RyaXAoKQorICAgICAgICAgICAgICAgIGlmIGxpbmUgPT0gIiI6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIG90aGVyIGVuZCB3YXMgY2xvc2VkID0+IHRoZSBjaGlsZCBleGl0ZWQKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQobGluZSkKKyAgICAgICAgIyBDaGVjayB0aGUgcmVzdWx0IHdhcyBnb3QgYW5kIGNvcnJlc3BvbmRzIHRvIHRoZSB1c2VyJ3MgdGVybWluYWwgaW5wdXQKKyAgICAgICAgaWYgbGVuKGxpbmVzKSAhPSAyOgorICAgICAgICAgICAgIyBTb21ldGhpbmcgd2VudCB3cm9uZywgdHJ5IHRvIGdldCBhdCBzdGRlcnIKKyAgICAgICAgICAgICMgQmV3YXJlIG9mIExpbnV4IHJhaXNpbmcgRUlPIHdoZW4gdGhlIHNsYXZlIGlzIGNsb3NlZAorICAgICAgICAgICAgY2hpbGRfb3V0cHV0ID0gYnl0ZWFycmF5KCkKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBjaHVuayA9IG9zLnJlYWQoZmQsIDMwMDApCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICAjIEFzc3VtZSBFSU8KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBub3QgY2h1bms6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgY2hpbGRfb3V0cHV0LmV4dGVuZChjaHVuaykKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkKQorICAgICAgICAgICAgY2hpbGRfb3V0cHV0ID0gY2hpbGRfb3V0cHV0LmRlY29kZSgiYXNjaWkiLCAiaWdub3JlIikKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiZ290ICVkIGxpbmVzIGluIHBpcGUgYnV0IGV4cGVjdGVkIDIsIGNoaWxkIG91dHB1dCB3YXM6XG4lcyIKKyAgICAgICAgICAgICAgICAgICAgICAlIChsZW4obGluZXMpLCBjaGlsZF9vdXRwdXQpKQorICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgcmV0dXJuIGxpbmVzCisKKyAgICBkZWYgY2hlY2tfaW5wdXRfdHR5KHNlbGYsIHByb21wdCwgdGVybWluYWxfaW5wdXQsIHN0ZGlvX2VuY29kaW5nPU5vbmUpOgorICAgICAgICBpZiBub3Qgc3lzLnN0ZGluLmlzYXR0eSgpIG9yIG5vdCBzeXMuc3Rkb3V0LmlzYXR0eSgpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic3RkaW4gYW5kIHN0ZG91dCBtdXN0IGJlIHR0eXMiKQorICAgICAgICBkZWYgY2hpbGQod3BpcGUpOgorICAgICAgICAgICAgIyBDaGVjayB0aGUgZXJyb3IgaGFuZGxlcnMgYXJlIGFjY291bnRlZCBmb3IKKyAgICAgICAgICAgIGlmIHN0ZGlvX2VuY29kaW5nOgorICAgICAgICAgICAgICAgIHN5cy5zdGRpbiA9IGlvLlRleHRJT1dyYXBwZXIoc3lzLnN0ZGluLmRldGFjaCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9c3RkaW9fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dCA9IGlvLlRleHRJT1dyYXBwZXIoc3lzLnN0ZG91dC5kZXRhY2goKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz1zdGRpb19lbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9J3JlcGxhY2UnKQorICAgICAgICAgICAgcHJpbnQoInR0eSA9Iiwgc3lzLnN0ZGluLmlzYXR0eSgpIGFuZCBzeXMuc3Rkb3V0LmlzYXR0eSgpLCBmaWxlPXdwaXBlKQorICAgICAgICAgICAgcHJpbnQoYXNjaWkoaW5wdXQocHJvbXB0KSksIGZpbGU9d3BpcGUpCisgICAgICAgIGxpbmVzID0gc2VsZi5ydW5fY2hpbGQoY2hpbGQsIHRlcm1pbmFsX2lucHV0ICsgYiJcclxuIikKKyAgICAgICAgIyBDaGVjayB3ZSBkaWQgZXhlcmNpc2UgdGhlIEdOVSByZWFkbGluZSBwYXRoCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obGluZXNbMF0sIHsndHR5ID0gVHJ1ZScsICd0dHkgPSBGYWxzZSd9KQorICAgICAgICBpZiBsaW5lc1swXSAhPSAndHR5ID0gVHJ1ZSc6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJzdGFuZGFyZCBJTyBpbiBzaG91bGQgaGF2ZSBiZWVuIGEgdHR5IikKKyAgICAgICAgaW5wdXRfcmVzdWx0ID0gZXZhbChsaW5lc1sxXSkgICAjIGFzY2lpKCkgLT4gZXZhbCgpIHJvdW5kdHJpcAorICAgICAgICBpZiBzdGRpb19lbmNvZGluZzoKKyAgICAgICAgICAgIGV4cGVjdGVkID0gdGVybWluYWxfaW5wdXQuZGVjb2RlKHN0ZGlvX2VuY29kaW5nLCAnc3Vycm9nYXRlZXNjYXBlJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGV4cGVjdGVkID0gdGVybWluYWxfaW5wdXQuZGVjb2RlKHN5cy5zdGRpbi5lbmNvZGluZykgICMgd2hhdCBlbHNlPworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlucHV0X3Jlc3VsdCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pbnB1dF90dHkoc2VsZik6CisgICAgICAgICMgVGVzdCBpbnB1dCgpIGZ1bmN0aW9uYWxpdHkgd2hlbiB3aXJlZCB0byBhIHR0eSAodGhlIGNvZGUgcGF0aAorICAgICAgICAjIGlzIGRpZmZlcmVudCBhbmQgaW52b2tlcyBHTlUgcmVhZGxpbmUgaWYgYXZhaWxhYmxlKS4KKyAgICAgICAgc2VsZi5jaGVja19pbnB1dF90dHkoInByb21wdCIsIGIicXV1eCIpCisKKyAgICBkZWYgdGVzdF9pbnB1dF90dHlfbm9uX2FzY2lpKHNlbGYpOgorICAgICAgICAjIENoZWNrIHN0ZGluL3N0ZG91dCBlbmNvZGluZyBpcyB1c2VkIHdoZW4gaW52b2tpbmcgR05VIHJlYWRsaW5lCisgICAgICAgIHNlbGYuY2hlY2tfaW5wdXRfdHR5KCJwcm9tcHTDqSIsIGIicXV1eFx4ZTkiLCAidXRmLTgiKQorCisgICAgZGVmIHRlc3RfaW5wdXRfdHR5X25vbl9hc2NpaV91bmljb2RlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBzdGRpbi9zdGRvdXQgZXJyb3IgaGFuZGxlciBpcyB1c2VkIHdoZW4gaW52b2tpbmcgR05VIHJlYWRsaW5lCisgICAgICAgIHNlbGYuY2hlY2tfaW5wdXRfdHR5KCJwcm9tcHTDqSIsIGIicXV1eFx4ZTkiLCAiYXNjaWkiKQorCisgICAgZGVmIHRlc3RfaW5wdXRfbm9fc3Rkb3V0X2ZpbGVubyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjQ0MDI6IElmIHN0ZGluIGlzIHRoZSBvcmlnaW5hbCB0ZXJtaW5hbCBidXQgc3Rkb3V0LmZpbGVubygpCisgICAgICAgICMgZmFpbHMsIGRvIG5vdCB1c2UgdGhlIG9yaWdpbmFsIHN0ZG91dCBmaWxlIGRlc2NyaXB0b3IKKyAgICAgICAgZGVmIGNoaWxkKHdwaXBlKToKKyAgICAgICAgICAgIHByaW50KCJzdGRpbi5pc2F0dHkoKToiLCBzeXMuc3RkaW4uaXNhdHR5KCksIGZpbGU9d3BpcGUpCisgICAgICAgICAgICBzeXMuc3Rkb3V0ID0gaW8uU3RyaW5nSU8oKSAgIyBEb2VzIG5vdCBzdXBwb3J0IGZpbGVubygpCisgICAgICAgICAgICBpbnB1dCgicHJvbXB0IikKKyAgICAgICAgICAgIHByaW50KCJjYXB0dXJlZDoiLCBhc2NpaShzeXMuc3Rkb3V0LmdldHZhbHVlKCkpLCBmaWxlPXdwaXBlKQorICAgICAgICBsaW5lcyA9IHNlbGYucnVuX2NoaWxkKGNoaWxkLCBiInF1dXhcciIpCisgICAgICAgIGV4cGVjdGVkID0gKAorICAgICAgICAgICAgInN0ZGluLmlzYXR0eSgpOiBUcnVlIiwKKyAgICAgICAgICAgICJjYXB0dXJlZDogJ3Byb21wdCciLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChsaW5lcywgZXhwZWN0ZWQpCisKIGNsYXNzIFRlc3RTb3J0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CkBAIC0xNTY1LDIxICsxNjMzLDQ1IEBACiAgICAgICAgIGRhdGEgPSAnVGhlIHF1aWNrIEJyb3duIGZveCBKdW1wZWQgb3ZlciBUaGUgbGF6eSBEb2cnLnNwbGl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzb3J0ZWQsIGRhdGEsIE5vbmUsIGxhbWJkYSB4LHk6IDApCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICB0ZXN0X2NsYXNzZXMgPSAoQnVpbHRpblRlc3QsIFRlc3RTb3J0ZWQpCiAKLSAgICBydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKK2NsYXNzIFNodXRkb3duVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKLSAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKLSAgICAgICAgaW1wb3J0IGdjCi0gICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvdW50cykpOgotICAgICAgICAgICAgcnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCi0gICAgICAgICAgICBnYy5jb2xsZWN0KCkKLSAgICAgICAgICAgIGNvdW50c1tpXSA9IHN5cy5nZXR0b3RhbHJlZmNvdW50KCkKLSAgICAgICAgcHJpbnQoY291bnRzKQorICAgIGRlZiB0ZXN0X2NsZWFudXAoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE5MjU1OiBidWlsdGlucyBhcmUgc3RpbGwgYXZhaWxhYmxlIGF0IHNodXRkb3duCisgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IGJ1aWx0aW5zCisgICAgICAgICAgICBpbXBvcnQgc3lzCiAKKyAgICAgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJiZWZvcmUiKQorICAgICAgICAgICAgICAgICAgICAjIENoZWNrIHRoYXQgYnVpbHRpbnMgc3RpbGwgZXhpc3QKKyAgICAgICAgICAgICAgICAgICAgbGVuKCgpKQorICAgICAgICAgICAgICAgICAgICBwcmludCgiYWZ0ZXIiKQorCisgICAgICAgICAgICBjID0gQygpCisgICAgICAgICAgICAjIE1ha2UgdGhpcyBtb2R1bGUgc3Vydml2ZSB1bnRpbCBidWlsdGlucyBhbmQgc3lzIGFyZSBjbGVhbmVkCisgICAgICAgICAgICBidWlsdGlucy5oZXJlID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCisgICAgICAgICAgICBzeXMuaGVyZSA9IHN5cy5tb2R1bGVzW19fbmFtZV9fXQorICAgICAgICAgICAgIyBDcmVhdGUgYSByZWZlcmVuY2UgbG9vcCBzbyB0aGF0IHRoaXMgbW9kdWxlIG5lZWRzIHRvIGdvCisgICAgICAgICAgICAjIHRocm91Z2ggYSBHQyBwaGFzZS4KKyAgICAgICAgICAgIGhlcmUgPSBzeXMubW9kdWxlc1tfX25hbWVfX10KKyAgICAgICAgICAgICIiIgorICAgICAgICAjIElzc3VlICMyMDU5OTogRm9yY2UgQVNDSUkgZW5jb2RpbmcgdG8gZ2V0IGEgY29kZWMgaW1wbGVtZW50ZWQgaW4gQywKKyAgICAgICAgIyBvdGhlcndpc2UgdGhlIGNvZGVjIG1heSBiZSB1bmxvYWRlZCBiZWZvcmUgQy5fX2RlbF9fKCkgaXMgY2FsbGVkLCBhbmQKKyAgICAgICAgIyBzbyBwcmludCgiYmVmb3JlIikgZmFpbHMgYmVjYXVzZSB0aGUgY29kZWMgY2Fubm90IGJlIHVzZWQgdG8gZW5jb2RlCisgICAgICAgICMgImJlZm9yZSIgdG8gc3lzLnN0ZG91dC5lbmNvZGluZy4gRm9yIGV4YW1wbGUsIG9uIFdpbmRvd3MsCisgICAgICAgICMgc3lzLnN0ZG91dC5lbmNvZGluZyBpcyB0aGUgT0VNIGNvZGUgcGFnZSBhbmQgdGhlc2UgY29kZSBwYWdlcyBhcmUKKyAgICAgICAgIyBpbXBsZW1lbnRlZCBpbiBQeXRob24KKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTklPRU5DT0RJTkc9ImFzY2lpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbImJlZm9yZSIsICJhZnRlciJdLCBvdXQuZGVjb2RlKCkuc3BsaXRsaW5lcygpKQorCisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIHBhdHRlcm4pOgorICAgIGZyb20gZG9jdGVzdCBpbXBvcnQgRG9jVGVzdFN1aXRlCisgICAgdGVzdHMuYWRkVGVzdChEb2NUZXN0U3VpdGUoYnVpbHRpbnMpKQorICAgIHJldHVybiB0ZXN0cwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5IGIvTGliL3Rlc3QvdGVzdF9ieXRlcy5weQppbmRleCAzYzA5MTQxLi4wYTczZmNiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J5dGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnl0ZXMucHkKQEAgLTEzLDkgKzEzLDExIEBACiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAorCiBpbXBvcnQgdGVzdC5zdXBwb3J0CiBpbXBvcnQgdGVzdC5zdHJpbmdfdGVzdHMKIGltcG9ydCB0ZXN0LmJ1ZmZlcl90ZXN0cworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGJpZ2FkZHJzcGFjZXRlc3QsIE1BWF9QeV9zc2l6ZV90CiAKIAogaWYgc3lzLmZsYWdzLmJ5dGVzX3dhcm5pbmc6CkBAIC05OCw2ICsxMDAsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgWzAuMF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFtOb25lXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgW0MoKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIDAsICdhc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsIGInJywgJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgMCwgZXJyb3JzPSdpZ25vcmUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBiJycsIGVycm9ycz0naWdub3JlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsICcnLCBlcnJvcnM9J2lnbm9yZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50eXBlMnRlc3QsICcnLCBiJ2FzY2lpJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnR5cGUydGVzdCwgJycsICdhc2NpaScsIGInaWdub3JlJykKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX3ZhbHVlX2Vycm9ycyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi50eXBlMnRlc3QsIFstMV0pCkBAIC0xMTEsNiArMTIxLDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbc3lzLm1heHNpemUrMV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0LCBbMTAqKjEwMF0pCiAKKyAgICBAYmlnYWRkcnNwYWNldGVzdAorICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yX292ZXJmbG93KHNlbGYpOgorICAgICAgICBzaXplID0gTUFYX1B5X3NzaXplX3QKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yKSwgc2VsZi50eXBlMnRlc3QsIHNpemUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgU2hvdWxkIGVpdGhlciBwYXNzIG9yIHJhaXNlIGFuIGVycm9yIChlLmcuIG9uIGRlYnVnIGJ1aWxkcyB3aXRoCisgICAgICAgICAgICAjIGFkZGl0aW9uYWwgbWFsbG9jKCkgb3ZlcmhlYWQpLCBidXQgc2hvdWxkbid0IGNyYXNoLgorICAgICAgICAgICAgYnl0ZWFycmF5KHNpemUgLSA0KQorICAgICAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X2NvbXBhcmUoc2VsZik6CiAgICAgICAgIGIxID0gc2VsZi50eXBlMnRlc3QoWzEsIDIsIDNdKQogICAgICAgICBiMiA9IHNlbGYudHlwZTJ0ZXN0KFsxLCAyLCAzXSkKQEAgLTI4OCw4ICszMDksMjMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKGxzdCksIGIiYWJjIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIiKS5qb2luKHR1cGxlKGxzdCkpLCBiImFiYyIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGIiIikuam9pbihpdGVyKGxzdCkpLCBiImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoYiIuIikuam9pbihbYiJhYiIsIGIiY2QiXSksIGIiYWIuY2QiKQotICAgICAgICAjIFhYWCBtb3JlLi4uCisgICAgICAgIGRvdF9qb2luID0gc2VsZi50eXBlMnRlc3QoYiIuOiIpLmpvaW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihbYiJhYiIsIGIiY2QiXSksIGIiYWIuOmNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihbbWVtb3J5dmlldyhiImFiIiksIGIiY2QiXSksIGIiYWIuOmNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihbYiJhYiIsIG1lbW9yeXZpZXcoYiJjZCIpXSksIGIiYWIuOmNkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb3Rfam9pbihbYnl0ZWFycmF5KGIiYWIiKSwgYiJjZCJdKSwgYiJhYi46Y2QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKFtiImFiIiwgYnl0ZWFycmF5KGIiY2QiKV0pLCBiImFiLjpjZCIpCisgICAgICAgICMgU3RyZXNzIGl0IHdpdGggbWFueSBpdGVtcworICAgICAgICBzZXEgPSBbYiJhYmMiXSAqIDEwMDAKKyAgICAgICAgZXhwZWN0ZWQgPSBiImFiYyIgKyBiIi46YWJjIiAqIDk5OQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRvdF9qb2luKHNlcSksIGV4cGVjdGVkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYudHlwZTJ0ZXN0KGIiICIpLmpvaW4sIE5vbmUpCisgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgYW5kIGNsZWFudXAgd2hlbiBzb21lIGl0ZW0gaW4gdGhlIG1pZGRsZSBvZiB0aGUKKyAgICAgICAgIyBzZXF1ZW5jZSBoYXMgdGhlIHdyb25nIHR5cGUuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFtieXRlYXJyYXkoYiJhYiIpLCAiY2QiLCBiImVmIl0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRvdF9qb2luKFttZW1vcnl2aWV3KGIiYWIiKSwgImNkIiwgYiJlZiJdKQogCiAgICAgZGVmIHRlc3RfY291bnQoc2VsZik6CiAgICAgICAgIGIgPSBzZWxmLnR5cGUydGVzdChiJ21pc3Npc3NpcHBpJykKQEAgLTUxOSwyMiArNTU1LDIzIEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLCBxKQogCiAgICAgZGVmIHRlc3RfaXRlcmF0b3JfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIGZvciBiIGluIGIiIiwgYiJhIiwgYiJhYmMiLCBiIlx4ZmZhYlx4ODAiLCBiIlwwXDBcMzc3XDBcMCI6Ci0gICAgICAgICAgICBpdCA9IGl0b3JnID0gaXRlcihzZWxmLnR5cGUydGVzdChiKSkKLSAgICAgICAgICAgIGRhdGEgPSBsaXN0KHNlbGYudHlwZTJ0ZXN0KGIpKQotICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGEpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZm9yIGIgaW4gYiIiLCBiImEiLCBiImFiYyIsIGIiXHhmZmFiXHg4MCIsIGIiXDBcMFwzNzdcMFwwIjoKKyAgICAgICAgICAgICAgICBpdCA9IGl0b3JnID0gaXRlcihzZWxmLnR5cGUydGVzdChiKSkKKyAgICAgICAgICAgICAgICBkYXRhID0gbGlzdChzZWxmLnR5cGUydGVzdChiKSkKKyAgICAgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGEpCiAKLSAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGFbMTpdKQorICAgICAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorICAgICAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgZGF0YVsxOl0pCiAKICAgICBkZWYgdGVzdF9zdHJpcChzZWxmKToKICAgICAgICAgYiA9IHNlbGYudHlwZTJ0ZXN0KGInbWlzc2lzc2lwcGknKQpAQCAtNjg2LDcgKzcyMyw3IEBACiAgICAgdHlwZTJ0ZXN0ID0gYnl0ZXMKIAogICAgIGRlZiB0ZXN0X2J1ZmZlcl9pc19yZWFkb25seShzZWxmKToKLSAgICAgICAgZmQgPSBvcy5kdXAoc3lzLnN0ZGluLmZpbGVubygpKQorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQogICAgICAgICB3aXRoIG9wZW4oZmQsICJyYiIsIGJ1ZmZlcmluZz0wKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmLnJlYWRpbnRvLCBiIiIpCiAKQEAgLTcwNyw2ICs3NDQsMTQgQEAKICAgICAgICAgICAgIGRlZiBfX2luZGV4X18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoQSgpKSwgYidhJykKKyAgICAgICAgIyBJc3N1ZSAjMjQ3MzEKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2J5dGVzX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE90aGVyQnl0ZXNTdWJjbGFzcyhiJ2FiYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoQSgpKSwgYidhYmMnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoYnl0ZXMoQSgpKSksIE90aGVyQnl0ZXNTdWJjbGFzcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChCeXRlc1N1YmNsYXNzKEEoKSksIGInYWJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKEJ5dGVzU3ViY2xhc3MoQSgpKSksIEJ5dGVzU3ViY2xhc3MpCiAKICAgICAjIFRlc3QgUHlCeXRlc19Gcm9tRm9ybWF0KCkKICAgICBkZWYgdGVzdF9mcm9tX2Zvcm1hdChzZWxmKToKQEAgLTc2NSw3ICs4MTAsNyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh0Zm4pCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9yZXZlcnNlKHNlbGYpOgpAQCAtOTAxLDYgKzk0NiwzMSBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgICAgICBiWzM6NF0gPSBlbGVtCiAKKyAgICBkZWYgdGVzdF9zZXRzbGljZV9leHRlbmQoc2VsZik6CisgICAgICAgICMgRXhlcmNpc2UgdGhlIHJlc2l6aW5nIGxvZ2ljIChzZWUgaXNzdWUgIzE5MDg3KQorICAgICAgICBiID0gYnl0ZWFycmF5KHJhbmdlKDEwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMDApKSkKKyAgICAgICAgZGVsIGJbOjEwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QocmFuZ2UoMTAsIDEwMCkpKQorICAgICAgICBiLmV4dGVuZChyYW5nZSgxMDAsIDExMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbGlzdChyYW5nZSgxMCwgMTEwKSkpCisKKyAgICBkZWYgdGVzdF9maWZvX292ZXJydW4oc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgaXNzdWUgIzIzOTg1LCBhIGJ1ZmZlciBvdmVycnVuIHdoZW4gaW1wbGVtZW50aW5nIGEgRklGTworICAgICAgICAjIEJ1aWxkIFB5dGhvbiBpbiBweWRlYnVnIG1vZGUgZm9yIGJlc3QgcmVzdWx0cy4KKyAgICAgICAgYiA9IGJ5dGVhcnJheSgxMCkKKyAgICAgICAgYi5wb3AoKSAgICAgICAgIyBEZWZlYXQgZXhwYW5kaW5nIGJ1ZmZlciBvZmYtYnktb25lIHF1aXJrCisgICAgICAgIGRlbCBiWzoxXSAgICAgICMgQWR2YW5jZSBzdGFydCBwb2ludGVyIHdpdGhvdXQgcmVhbGxvY2F0aW5nCisgICAgICAgIGIgKz0gYnl0ZXMoMikgICMgQXBwZW5kIGV4YWN0bHkgdGhlIG51bWJlciBvZiBkZWxldGVkIGJ5dGVzCisgICAgICAgIGRlbCBiICAgICAgICAgICMgRnJlZSBtZW1vcnkgYnVmZmVyLCBhbGxvd2luZyBweWRlYnVnIHZlcmlmaWNhdGlvbgorCisgICAgZGVmIHRlc3RfZGVsX2V4cGFuZChzZWxmKToKKyAgICAgICAgIyBSZWR1Y2luZyB0aGUgc2l6ZSBzaG91bGQgbm90IGV4cGFuZCB0aGUgYnVmZmVyIChpc3N1ZSAjMjM5ODUpCisgICAgICAgIGIgPSBieXRlYXJyYXkoMTApCisgICAgICAgIHNpemUgPSBzeXMuZ2V0c2l6ZW9mKGIpCisgICAgICAgIGRlbCBiWzoxXQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzeXMuZ2V0c2l6ZW9mKGIpLCBzaXplKQorCiAgICAgZGVmIHRlc3RfZXh0ZW5kZWRfc2V0X2RlbF9zbGljZShzZWxmKToKICAgICAgICAgaW5kaWNlcyA9ICgwLCBOb25lLCAxLCAzLCAxOSwgMzAwLCAxPDwzMzMsIC0xLCAtMiwgLTMxLCAtMzAwKQogICAgICAgICBmb3Igc3RhcnQgaW4gaW5kaWNlczoKQEAgLTk2OCwxMCArMTAzOCwyNyBAQAogICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDApOgogICAgICAgICAgICAgYiArPSBiIngiCiAgICAgICAgICAgICBhbGxvYyA9IGIuX19hbGxvY19fKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGxvYyA+PSBsZW4oYikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoYWxsb2MsIGxlbihiKSkgICMgaW5jbHVkaW5nIHRyYWlsaW5nIG51bGwgYnl0ZQogICAgICAgICAgICAgaWYgYWxsb2Mgbm90IGluIHNlcToKICAgICAgICAgICAgICAgICBzZXEuYXBwZW5kKGFsbG9jKQogCisgICAgZGVmIHRlc3RfaW5pdF9hbGxvYyhzZWxmKToKKyAgICAgICAgYiA9IGJ5dGVhcnJheSgpCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgxLCAxMDApOgorICAgICAgICAgICAgICAgIHlpZWxkIGkKKyAgICAgICAgICAgICAgICBhID0gbGlzdChiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYSwgbGlzdChyYW5nZSgxLCBsZW4oYSkrMSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCBsZW4oYSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwobGVuKGIpLCBpKQorICAgICAgICAgICAgICAgIGFsbG9jID0gYi5fX2FsbG9jX18oKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihhbGxvYywgbGVuKGIpKSAgIyBpbmNsdWRpbmcgdHJhaWxpbmcgbnVsbCBieXRlCisgICAgICAgIGIuX19pbml0X18oZygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYiksIGxpc3QocmFuZ2UoMSwgMTAwKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGIpLCA5OSkKKyAgICAgICAgYWxsb2MgPSBiLl9fYWxsb2NfXygpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihhbGxvYywgbGVuKGIpKQorCiAgICAgZGVmIHRlc3RfZXh0ZW5kKHNlbGYpOgogICAgICAgICBvcmlnID0gYidoZWxsbycKICAgICAgICAgYSA9IGJ5dGVhcnJheShvcmlnKQpAQCAtMTI4MCw2ICsxMzY3LDExIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHZhbCBpcyBub3QgbmV3dmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHIrJyByZXR1cm5lZCB2YWwgb24gYSBtdXRhYmxlIG9iamVjdCcpCisgICAgICAgIHNlcCA9IHNlbGYubWFyc2hhbChiJycpCisgICAgICAgIG5ld3ZhbCA9IHNlcC5qb2luKFt2YWxdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgbmV3dmFsKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHZhbCwgbmV3dmFsKQorCiAKIGNsYXNzIEZpeGVkU3RyaW5nVGVzdCh0ZXN0LnN0cmluZ190ZXN0cy5CYXNlVGVzdCk6CiAKQEAgLTEzODEsNiArMTQ3Myw5IEBACiBjbGFzcyBCeXRlc1N1YmNsYXNzKGJ5dGVzKToKICAgICBwYXNzCiAKK2NsYXNzIE90aGVyQnl0ZXNTdWJjbGFzcyhieXRlcyk6CisgICAgcGFzcworCiBjbGFzcyBCeXRlQXJyYXlTdWJjbGFzc1Rlc3QoU3ViY2xhc3NUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdHlwZTJ0ZXN0ID0gYnl0ZWFycmF5CiAgICAgc3ViY2xhc3MydGVzdCA9IEJ5dGVBcnJheVN1YmNsYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2J6Mi5weSBiL0xpYi90ZXN0L3Rlc3RfYnoyLnB5CmluZGV4IGM4YzkzNTEuLmJlZWYyNzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYnoyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfYnoyLnB5CkBAIC0xLDUgKzEsNSBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBiaWdtZW10ZXN0LCBfNEcKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBiaWdtZW10ZXN0LCBfNEcKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCkBAIC04LDYgKzgsNyBAQAogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB1bmxpbmsKIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTE4LDEwICsxOSwxMCBAQAogYnoyID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdiejInKQogZnJvbSBiejIgaW1wb3J0IEJaMkZpbGUsIEJaMkNvbXByZXNzb3IsIEJaMkRlY29tcHJlc3NvcgogCi1oYXNfY21kbGluZV9idW56aXAyID0gc3lzLnBsYXRmb3JtIG5vdCBpbiAoIndpbjMyIiwgIm9zMmVteCIpCiAKIGNsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiQmFzZSBmb3Igb3RoZXIgdGVzdGNhc2VzLiIKKwogICAgIFRFWFRfTElORVMgPSBbCiAgICAgICAgIGIncm9vdDp4OjA6MDpyb290Oi9yb290Oi9iaW4vYmFzaFxuJywKICAgICAgICAgYidiaW46eDoxOjE6YmluOi9iaW46XG4nLApAQCAtNTEsMTMgKzUyLDE3IEBACiAgICAgQkFEX0RBVEEgPSBiJ3RoaXMgaXMgbm90IGEgdmFsaWQgYnppcDIgZmlsZScKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IFRFU1RGTgorICAgICAgICBzZWxmLmZpbGVuYW1lID0gc3VwcG9ydC5URVNURk4KIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoc2VsZi5maWxlbmFtZSk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5maWxlbmFtZSkKIAotICAgIGlmIGhhc19jbWRsaW5lX2J1bnppcDI6CisgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICMgYnVuemlwMiBpc24ndCBhdmFpbGFibGUgdG8gcnVuIG9uIFdpbmRvd3MuCisgICAgICAgIGRlZiBkZWNvbXByZXNzKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgcmV0dXJuIGJ6Mi5kZWNvbXByZXNzKGRhdGEpCisgICAgZWxzZToKICAgICAgICAgZGVmIGRlY29tcHJlc3Moc2VsZiwgZGF0YSk6CiAgICAgICAgICAgICBwb3AgPSBzdWJwcm9jZXNzLlBvcGVuKCJidW56aXAyIiwgc2hlbGw9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLApAQCAtNzEsMTMgKzc2LDkgQEAKICAgICAgICAgICAgICAgICByZXQgPSBiejIuZGVjb21wcmVzcyhkYXRhKQogICAgICAgICAgICAgcmV0dXJuIHJldAogCi0gICAgZWxzZToKLSAgICAgICAgIyBidW56aXAyIGlzbid0IGF2YWlsYWJsZSB0byBydW4gb24gV2luZG93cy4KLSAgICAgICAgZGVmIGRlY29tcHJlc3Moc2VsZiwgZGF0YSk6Ci0gICAgICAgICAgICByZXR1cm4gYnoyLmRlY29tcHJlc3MoZGF0YSkKIAogY2xhc3MgQloyRmlsZVRlc3QoQmFzZVRlc3QpOgotICAgICJUZXN0IEJaMkZpbGUgdHlwZSBtaXNjZWxsYW5lb3VzIG1ldGhvZHMuIgorICAgICJUZXN0IHRoZSBCWjJGaWxlIGNsYXNzLiIKIAogICAgIGRlZiBjcmVhdGVUZW1wRmlsZShzZWxmLCBzdHJlYW1zPTEsIHN1ZmZpeD1iIiIpOgogICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKQEAgLTg1LDE4ICs4NiwxMiBAQAogICAgICAgICAgICAgZi53cml0ZShzdWZmaXgpCiAKICAgICBkZWYgdGVzdEJhZEFyZ3Moc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoMTIzLjQ1NikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJ6IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsICJyeCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBCWjJGaWxlKCIvZGV2L251bGwiLCAicmJ0IikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIEJaMkZpbGUoIi9kZXYvbnVsbCIsIGNvbXByZXNzbGV2ZWw9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQloyRmlsZSwgMTIzLjQ1NikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgb3MuZGV2bnVsbCwgInoiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBCWjJGaWxlLCBvcy5kZXZudWxsLCAicngiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBCWjJGaWxlLCBvcy5kZXZudWxsLCAicmJ0IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgQloyRmlsZSwgb3MuZGV2bnVsbCwgY29tcHJlc3NsZXZlbD0wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBCWjJGaWxlLCBvcy5kZXZudWxsLCBjb21wcmVzc2xldmVsPTEwKQogCiAgICAgZGVmIHRlc3RSZWFkKHNlbGYpOgogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKQEAgLTIzMiw5ICsyMjcsOCBAQAogICAgICAgICBzZWxmLmNyZWF0ZVRlbXBGaWxlKCkKICAgICAgICAgYnoyZiA9IEJaMkZpbGUoc2VsZi5maWxlbmFtZSkKICAgICAgICAgYnoyZi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYuX19uZXh0X18pCi0gICAgICAgICMgVGhpcyBjYWxsIHdpbGwgZGVhZGxvY2sgaWYgdGhlIGFib3ZlIC5fX25leHRfXyBjYWxsIGZhaWxlZCB0bwotICAgICAgICAjIHJlbGVhc2UgdGhlIGxvY2suCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGJ6MmYpCisgICAgICAgICMgVGhpcyBjYWxsIHdpbGwgZGVhZGxvY2sgaWYgdGhlIGFib3ZlIGNhbGwgZmFpbGVkIHRvIHJlbGVhc2UgdGhlIGxvY2suCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYucmVhZGxpbmVzKQogCiAgICAgZGVmIHRlc3RXcml0ZShzZWxmKToKQEAgLTI3OCw4ICsyNzIsOCBAQAogICAgICAgICAgICAgYnoyZi53cml0ZShiImFiYyIpCiAKICAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgYnoyZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ6MmYud3JpdGUsIGIiYSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiejJmLndyaXRlbGluZXMsIFtiImEiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ6MmYud3JpdGUsIGIiYSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBiejJmLndyaXRlbGluZXMsIFtiImEiXSkKIAogICAgIGRlZiB0ZXN0QXBwZW5kKHNlbGYpOgogICAgICAgICB3aXRoIEJaMkZpbGUoc2VsZi5maWxlbmFtZSwgInciKSBhcyBiejJmOgpAQCAtMzk3LDcgKzM5MSw3IEBACiAgICAgICAgICAgICBiejJmLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnoyZi5zZWVrYWJsZSkKIAotICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksIG1vZGU9InciKQorICAgICAgICBiejJmID0gQloyRmlsZShCeXRlc0lPKCksICJ3IikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiejJmLnNlZWthYmxlKCkpCiAgICAgICAgIGZpbmFsbHk6CkBAIC00MjMsNyArNDE3LDcgQEAKICAgICAgICAgICAgIGJ6MmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiejJmLnJlYWRhYmxlKQogCi0gICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgbW9kZT0idyIpCisgICAgICAgIGJ6MmYgPSBCWjJGaWxlKEJ5dGVzSU8oKSwgInciKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJ6MmYucmVhZGFibGUoKSkKICAgICAgICAgZmluYWxseToKQEAgLTQ0MCw3ICs0MzQsNyBAQAogICAgICAgICAgICAgYnoyZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGJ6MmYud3JpdGFibGUpCiAKLSAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCBtb2RlPSJ3IikKKyAgICAgICAgYnoyZiA9IEJaMkZpbGUoQnl0ZXNJTygpLCAidyIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiejJmLndyaXRhYmxlKCkpCiAgICAgICAgIGZpbmFsbHk6CkBAIC00NTQsNyArNDQ4LDcgQEAKICAgICAgICAgICAgIGRlbCBvCiAKICAgICBkZWYgdGVzdE9wZW5Ob25leGlzdGVudChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgQloyRmlsZSwgIi9ub24vZXhpc3RlbnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBCWjJGaWxlLCAiL25vbi9leGlzdGVudCIpCiAKICAgICBkZWYgdGVzdFJlYWRsaW5lc05vTmV3bGluZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTE5MTA0MzogcmVhZGxpbmVzKCkgZmFpbHMgb24gYSBmaWxlIGNvbnRhaW5pbmcgbm8gbmV3bGluZS4KQEAgLTQ5NCwzOSArNDg4LDM2IEBACiAgICAgICAgICMgSXNzdWUgIzcyMDU6IFVzaW5nIGEgQloyRmlsZSBmcm9tIHNldmVyYWwgdGhyZWFkcyBzaG91bGRuJ3QgZGVhZGxvY2suCiAgICAgICAgIGRhdGEgPSBiIjEiICogMioqMjAKICAgICAgICAgbnRocmVhZHMgPSAxMAotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICd3YicpIGFzIGY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgogICAgICAgICAgICAgZGVmIGNvbXAoKToKICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg1KToKICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhKQogICAgICAgICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1jb21wKSBmb3IgaSBpbiByYW5nZShudGhyZWFkcyldCi0gICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN0YXJ0X3RocmVhZHModGhyZWFkcyk6CisgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RXaXRob3V0VGhyZWFkaW5nKHNlbGYpOgotICAgICAgICBiejIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoImJ6MiIsIGJsb2NrZWQ9KCJ0aHJlYWRpbmciLCkpCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgbW9kdWxlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCJiejIiLCBibG9ja2VkPSgidGhyZWFkaW5nIiwpKQorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiYWJjIikKLSAgICAgICAgd2l0aCBiejIuQloyRmlsZShzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICB3aXRoIG1vZHVsZS5CWjJGaWxlKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiImFiYyIpCiAKICAgICBkZWYgdGVzdE1peGVkSXRlcmF0aW9uQW5kUmVhZHMoc2VsZik6CiAgICAgICAgIHNlbGYuY3JlYXRlVGVtcEZpbGUoKQogICAgICAgICBsaW5lbGVuID0gbGVuKHNlbGYuVEVYVF9MSU5FU1swXSkKICAgICAgICAgaGFsZmxlbiA9IGxpbmVsZW4gLy8gMgotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkKGhhbGZsZW4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1swXVtoYWxmbGVuOl0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZCgpLCBzZWxmLlRFWFRbbGluZWxlbjpdKQotICAgICAgICB3aXRoIGJ6Mi5CWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CisgICAgICAgIHdpdGggQloyRmlsZShzZWxmLmZpbGVuYW1lKSBhcyBiejJmOgogICAgICAgICAgICAgYnoyZi5yZWFkbGluZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoYnoyZiksIHNlbGYuVEVYVF9MSU5FU1sxXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkbGluZSgpLCBzZWxmLlRFWFRfTElORVNbMl0pCi0gICAgICAgIHdpdGggYnoyLkJaMkZpbGUoc2VsZi5maWxlbmFtZSkgYXMgYnoyZjoKKyAgICAgICAgd2l0aCBCWjJGaWxlKHNlbGYuZmlsZW5hbWUpIGFzIGJ6MmY6CiAgICAgICAgICAgICBiejJmLnJlYWRsaW5lcygpCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24pOgotICAgICAgICAgICAgICAgIG5leHQoYnoyZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGJ6MmYpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ6MmYucmVhZGxpbmVzKCksIFtdKQogCiAgICAgZGVmIHRlc3RNdWx0aVN0cmVhbU9yZGVyaW5nKHNlbGYpOgpAQCAtNTk0LDYgKzU4NSwyMCBAQAogICAgICAgICAgICAgICAgIGJ6MmYuc2VlaygtMTUwLCAxKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnoyZi5yZWFkKCksIHNlbGYuVEVYVFs1MDAtMTUwOl0pCiAKKyAgICBkZWYgdGVzdF9yZWFkX3RydW5jYXRlZChzZWxmKToKKyAgICAgICAgIyBEcm9wIHRoZSBlb3NfbWFnaWMgZmllbGQgKDYgYnl0ZXMpIGFuZCBDUkMgKDQgYnl0ZXMpLgorICAgICAgICB0cnVuY2F0ZWQgPSBzZWxmLkRBVEFbOi0xMF0KKyAgICAgICAgd2l0aCBCWjJGaWxlKEJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oc2VsZi5URVhUKSksIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisgICAgICAgICMgSW5jb21wbGV0ZSA0LWJ5dGUgZmlsZSBoZWFkZXIsIGFuZCBibG9jayBoZWFkZXIgb2YgYXQgbGVhc3QgMTQ2IGJpdHMuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIyKToKKyAgICAgICAgICAgIHdpdGggQloyRmlsZShCeXRlc0lPKHRydW5jYXRlZFs6aV0pKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQsIDEpCisKKwogY2xhc3MgQloyQ29tcHJlc3NvclRlc3QoQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0Q29tcHJlc3Moc2VsZik6CiAgICAgICAgIGJ6MmMgPSBCWjJDb21wcmVzc29yKCkKQEAgLTYzOSw4ICs2NDQsOSBAQAogICAgICAgICAgICAgZGF0YSA9IE5vbmUKIAogICAgIGRlZiB0ZXN0UGlja2xlKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBwaWNrbGUuZHVtcHMoQloyQ29tcHJlc3NvcigpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMoQloyQ29tcHJlc3NvcigpLCBwcm90bykKIAogCiBjbGFzcyBCWjJEZWNvbXByZXNzb3JUZXN0KEJhc2VUZXN0KToKQEAgLTY5NSw4ICs3MDEsOSBAQAogICAgICAgICAgICAgZGVjb21wcmVzc2VkID0gTm9uZQogCiAgICAgZGVmIHRlc3RQaWNrbGUoc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhCWjJEZWNvbXByZXNzb3IoKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKEJaMkRlY29tcHJlc3NvcigpLCBwcm90bykKIAogCiBjbGFzcyBDb21wcmVzc0RlY29tcHJlc3NUZXN0KEJhc2VUZXN0KToKQEAgLTc0MCw5NyArNzQ3LDEyMiBAQAogCiAKIGNsYXNzIE9wZW5UZXN0KEJhc2VUZXN0KToKKyAgICAiVGVzdCB0aGUgb3BlbiBmdW5jdGlvbi4iCisKKyAgICBkZWYgb3BlbihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICByZXR1cm4gYnoyLm9wZW4oKmFyZ3MsICoqa3dhcmdzKQorCiAgICAgZGVmIHRlc3RfYmluYXJ5X21vZGVzKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgotICAgICAgICAgICAgZmlsZV9kYXRhID0gYnoyLmRlY29tcHJlc3MoZi5yZWFkKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3YiIsICJ4YiIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieGIiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYWIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQorICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CisgICAgICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQgKiAyKQogCiAgICAgZGVmIHRlc3RfaW1wbGljaXRfYmluYXJ5X21vZGVzKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW1wbGljaXQgYmluYXJ5IG1vZGVzIChubyAiYiIgb3IgInQiIGluIG1vZGUgc3RyaW5nKS4KLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAidyIpIGFzIGY6Ci0gICAgICAgICAgICBmLndyaXRlKHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCBzZWxmLlRFWFQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInIiKSBhcyBmOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgc2VsZi5URVhUKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJhIikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoc2VsZi5URVhUKQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCisgICAgICAgIGZvciBtb2RlIGluICgidyIsICJ4Iik6CisgICAgICAgICAgICBpZiBtb2RlID09ICJ4IjoKKyAgICAgICAgICAgICAgICB1bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsIG1vZGUpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJyIikgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYSIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlRFWFQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHNlbGYuVEVYVCAqIDIpCiAKICAgICBkZWYgdGVzdF90ZXh0X21vZGVzKHNlbGYpOgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQogICAgICAgICB0ZXh0X25hdGl2ZV9lb2wgPSB0ZXh0LnJlcGxhY2UoIlxuIiwgb3MubGluZXNlcCkKLSAgICAgICAgd2l0aCBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiKSBhcyBmOgotICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKLSAgICAgICAgICAgIGZpbGVfZGF0YSA9IGJ6Mi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgImF0IikgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUodGV4dCkKLSAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sICogMikKKyAgICAgICAgZm9yIG1vZGUgaW4gKCJ3dCIsICJ4dCIpOgorICAgICAgICAgICAgaWYgbW9kZSA9PSAieHQiOgorICAgICAgICAgICAgICAgIHVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgbW9kZSkgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKHRleHQpCisgICAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgICAgICBmaWxlX2RhdGEgPSBzZWxmLmRlY29tcHJlc3MoZi5yZWFkKCkpLmRlY29kZSgiYXNjaWkiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB0ZXh0X25hdGl2ZV9lb2wpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAiYXQiKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKKyAgICAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgICAgIGZpbGVfZGF0YSA9IHNlbGYuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJhc2NpaSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHRleHRfbmF0aXZlX2VvbCAqIDIpCisKKyAgICBkZWYgdGVzdF94X21vZGUoc2VsZik6CisgICAgICAgIGZvciBtb2RlIGluICgieCIsICJ4YiIsICJ4dCIpOgorICAgICAgICAgICAgdW5saW5rKHNlbGYuZmlsZW5hbWUpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCBtb2RlKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgdGVzdF9maWxlb2JqKHNlbGYpOgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInIiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJyYiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHNlbGYuVEVYVCkKICAgICAgICAgdGV4dCA9IHNlbGYuVEVYVC5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgd2l0aCBiejIub3BlbihCeXRlc0lPKHNlbGYuREFUQSksICJydCIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKEJ5dGVzSU8oc2VsZi5EQVRBKSwgInJ0IikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9iYWRfcGFyYW1zKHNlbGYpOgogICAgICAgICAjIFRlc3QgaW52YWxpZCBwYXJhbWV0ZXIgY29tYmluYXRpb25zLgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgIndidCIpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBiejIub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgbmV3bGluZT0iXG4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ3YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJ4YnQiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIGVuY29kaW5nPSJ1dGYtOCIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub3Blbiwgc2VsZi5maWxlbmFtZSwgInJiIiwgZXJyb3JzPSJpZ25vcmUiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm9wZW4sIHNlbGYuZmlsZW5hbWUsICJyYiIsIG5ld2xpbmU9IlxuIikKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgogICAgICAgICAjIFRlc3Qgbm9uLWRlZmF1bHQgZW5jb2RpbmcuCiAgICAgICAgIHRleHQgPSBzZWxmLlRFWFQuZGVjb2RlKCJhc2NpaSIpCiAgICAgICAgIHRleHRfbmF0aXZlX2VvbCA9IHRleHQucmVwbGFjZSgiXG4iLCBvcy5saW5lc2VwKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAid3QiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUodGV4dCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICBmaWxlX2RhdGEgPSBiejIuZGVjb21wcmVzcyhmLnJlYWQoKSkuZGVjb2RlKCJ1dGYtMTYtbGUiKQorICAgICAgICAgICAgZmlsZV9kYXRhID0gc2VsZi5kZWNvbXByZXNzKGYucmVhZCgpKS5kZWNvZGUoInV0Zi0xNi1sZSIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdGV4dF9uYXRpdmVfZW9sKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJ1dGYtMTYtbGUiKSBhcyBmOgorICAgICAgICB3aXRoIHNlbGYub3BlbihzZWxmLmZpbGVuYW1lLCAicnQiLCBlbmNvZGluZz0idXRmLTE2LWxlIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIHRleHQpCiAKICAgICBkZWYgdGVzdF9lbmNvZGluZ19lcnJvcl9oYW5kbGVyKHNlbGYpOgogICAgICAgICAjIFRlc3Qgd2l0aCBub24tZGVmYXVsdCBlbmNvZGluZyBlcnJvciBoYW5kbGVyLgotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3YiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKGIiZm9vXHhmZmJhciIpCi0gICAgICAgIHdpdGggYnoyLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgZW5jb2Rpbmc9ImFzY2lpIiwgZXJyb3JzPSJpZ25vcmUiKSBcCisgICAgICAgIHdpdGggc2VsZi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIGVuY29kaW5nPSJhc2NpaSIsIGVycm9ycz0iaWdub3JlIikgXAogICAgICAgICAgICAgICAgIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAiZm9vYmFyIikKIAogICAgIGRlZiB0ZXN0X25ld2xpbmUoc2VsZik6CiAgICAgICAgICMgVGVzdCB3aXRoIGV4cGxpY2l0IG5ld2xpbmUgKHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgZGlzYWJsZWQpLgogICAgICAgICB0ZXh0ID0gc2VsZi5URVhULmRlY29kZSgiYXNjaWkiKQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJ3dCIsIG5ld2xpbmU9IlxuIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInd0IiwgbmV3bGluZT0iXG4iKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICB3aXRoIGJ6Mi5vcGVuKHNlbGYuZmlsZW5hbWUsICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKKyAgICAgICAgd2l0aCBzZWxmLm9wZW4oc2VsZi5maWxlbmFtZSwgInJ0IiwgbmV3bGluZT0iXHIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWRsaW5lcygpLCBbdGV4dF0pCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weSBiL0xpYi90ZXN0L3Rlc3RfY2FsZW5kYXIucHkKaW5kZXggZjY4MGI1Mi4uOTE5Mzg1NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jYWxlbmRhci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NhbGVuZGFyLnB5CkBAIC0yLDEzICsyLDE0IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQogaW1wb3J0IHRpbWUKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBzeXMKIGltcG9ydCBkYXRldGltZQoraW1wb3J0IG9zCiAKLXJlc3VsdF8yMDA0XzAxX3RleHQgPSAiIiIKK3Jlc3VsdF8yMDA0XzAxX3RleHQgPSAiIiJcCiAgICAgSmFudWFyeSAyMDA0CiBNbyBUdSBXZSBUaCBGciBTYSBTdQogICAgICAgICAgIDEgIDIgIDMgIDQKQEAgLTE4LDcgKzE5LDcgQEAKIDI2IDI3IDI4IDI5IDMwIDMxCiAiIiIKIAotcmVzdWx0XzIwMDRfdGV4dCA9ICIiIgorcmVzdWx0XzIwMDRfdGV4dCA9ICIiIlwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDA0CiAKICAgICAgIEphbnVhcnkgICAgICAgICAgICAgICAgICAgRmVicnVhcnkgICAgICAgICAgICAgICAgICAgTWFyY2gKQEAgLTU2LDcgKzU3LDcgQEAKIDI1IDI2IDI3IDI4IDI5IDMwIDMxICAgICAgMjkgMzAgICAgICAgICAgICAgICAgICAgICAyNyAyOCAyOSAzMCAzMQogIiIiCiAKLXJlc3VsdF8yMDA0X2h0bWwgPSAiIiIKK3Jlc3VsdF8yMDA0X2h0bWwgPSAiIiJcCiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSIlKGUpcyI/PgogPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgImh0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXN0cmljdC5kdGQiPgogPGh0bWw+CkBAIC0zMjcsOCArMzI4LDggQEAKICAgICBkZWYgY2hlY2tfaHRtbGNhbGVuZGFyX2VuY29kaW5nKHNlbGYsIHJlcSwgcmVzKToKICAgICAgICAgY2FsID0gY2FsZW5kYXIuSFRNTENhbGVuZGFyKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNhbC5mb3JtYXR5ZWFycGFnZSgyMDA0LCBlbmNvZGluZz1yZXEpLnN0cmlwKGInIFx0XG4nKSwKLSAgICAgICAgICAgIChyZXN1bHRfMjAwNF9odG1sICUgeydlJzogcmVzfSkuc3RyaXAoJyBcdFxuJykuZW5jb2RlKHJlcykKKyAgICAgICAgICAgIGNhbC5mb3JtYXR5ZWFycGFnZSgyMDA0LCBlbmNvZGluZz1yZXEpLAorICAgICAgICAgICAgKHJlc3VsdF8yMDA0X2h0bWwgJSB7J2UnOiByZXN9KS5lbmNvZGUocmVzKQogICAgICAgICApCiAKICAgICBkZWYgdGVzdF9vdXRwdXQoc2VsZik6CkBAIC0zMzksOCArMzQwLDggQEAKIAogICAgIGRlZiB0ZXN0X291dHB1dF90ZXh0Y2FsZW5kYXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBjYWxlbmRhci5UZXh0Q2FsZW5kYXIoKS5mb3JtYXR5ZWFyKDIwMDQpLnN0cmlwKCksCi0gICAgICAgICAgICByZXN1bHRfMjAwNF90ZXh0LnN0cmlwKCkKKyAgICAgICAgICAgIGNhbGVuZGFyLlRleHRDYWxlbmRhcigpLmZvcm1hdHllYXIoMjAwNCksCisgICAgICAgICAgICByZXN1bHRfMjAwNF90ZXh0CiAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X291dHB1dF9odG1sY2FsZW5kYXJfZW5jb2RpbmdfYXNjaWkoc2VsZik6CkBAIC0zODMsOCArMzg0LDggQEAKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdG1vbnRoKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgY2FsZW5kYXIuVGV4dENhbGVuZGFyKCkuZm9ybWF0bW9udGgoMjAwNCwgMSkuc3RyaXAoKSwKLSAgICAgICAgICAgIHJlc3VsdF8yMDA0XzAxX3RleHQuc3RyaXAoKQorICAgICAgICAgICAgY2FsZW5kYXIuVGV4dENhbGVuZGFyKCkuZm9ybWF0bW9udGgoMjAwNCwgMSksCisgICAgICAgICAgICByZXN1bHRfMjAwNF8wMV90ZXh0CiAgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdG1vbnRobmFtZV93aXRoX3llYXIoc2VsZik6CkBAIC02OTIsMjMgKzY5MywxMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxlbmRhci5sZWFwZGF5cygxOTk3LDIwMjApLCA1KQogCiAKLWNsYXNzIENvbnNvbGVPdXRwdXRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3Rfb3V0cHV0c19ieXRlcyhzZWxmKToKLSAgICAgICAgKHJldHVybl9jb2RlLCBzdGRvdXQsIHN0ZGVycikgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdjYWxlbmRhcicsICctLXR5cGU9aHRtbCcsICcyMDEwJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXRbOjZdLCBiJzw/eG1sICcpCitkZWYgY29udihzKToKKyAgICByZXR1cm4gcy5yZXBsYWNlKCdcbicsIG9zLmxpbmVzZXApLmVuY29kZSgpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgT3V0cHV0VGVzdENhc2UsCi0gICAgICAgIENhbGVuZGFyVGVzdENhc2UsCi0gICAgICAgIE1vbmRheVRlc3RDYXNlLAotICAgICAgICBTdW5kYXlUZXN0Q2FzZSwKLSAgICAgICAgVGltZWdtVGVzdENhc2UsCi0gICAgICAgIE1vbnRoUmFuZ2VUZXN0Q2FzZSwKLSAgICAgICAgTGVhcGRheXNUZXN0Q2FzZSwKLSAgICAgICAgQ29uc29sZU91dHB1dFRlc3RDYXNlCi0gICAgKQorY2xhc3MgQ29tbWFuZExpbmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHJ1bl9vayhzZWxmLCAqYXJncyk6CisgICAgICAgIHJldHVybiBhc3NlcnRfcHl0aG9uX29rKCctbScsICdjYWxlbmRhcicsICphcmdzKVsxXQorCisgICAgZGVmIGFzc2VydEZhaWx1cmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICByYywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ2NhbGVuZGFyJywgKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVc2FnZTonLCBzdGRlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDIpCisKKyAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnLWgnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInVXNhZ2U6Jywgc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydEluKGInY2FsZW5kYXIucHknLCBzdGRvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYictLWhlbHAnLCBzdGRvdXQpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCcteicpCisgICAgICAgICNzZWxmLmFzc2VydEZhaWx1cmUoJ3NwYW0nKQorICAgICAgICAjc2VsZi5hc3NlcnRGYWlsdXJlKCcyMDA0JywgJ3NwYW0nKQorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy10JywgJ2h0bWwnLCAnMjAwNCcsICcxJykKKworICAgIGRlZiB0ZXN0X291dHB1dF9jdXJyZW50X3llYXIoc2VsZik6CisgICAgICAgIHN0ZG91dCA9IHNlbGYucnVuX29rKCkKKyAgICAgICAgeWVhciA9IGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpLnllYXIKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJyAlcycgJSB5ZWFyKS5lbmNvZGUoKSwgc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydEluKGInSmFudWFyeScsIHN0ZG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ01vIFR1IFdlIFRoIEZyIFNhIFN1Jywgc3Rkb3V0KQorCisgICAgZGVmIHRlc3Rfb3V0cHV0X3llYXIoc2VsZik6CisgICAgICAgIHN0ZG91dCA9IHNlbGYucnVuX29rKCcyMDA0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIGNvbnYocmVzdWx0XzIwMDRfdGV4dCkpCisKKyAgICBkZWYgdGVzdF9vdXRwdXRfbW9udGgoc2VsZik6CisgICAgICAgIHN0ZG91dCA9IHNlbGYucnVuX29rKCcyMDA0JywgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgY29udihyZXN1bHRfMjAwNF8wMV90ZXh0KSkKKworICAgIGRlZiB0ZXN0X29wdGlvbl9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLS1lbmNvZGluZycpCisgICAgICAgIHN0ZG91dCA9IHNlbGYucnVuX29rKCctLWVuY29kaW5nJywgJ3V0Zi0xNi1sZScsICcyMDA0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHJlc3VsdF8yMDA0X3RleHQuZW5jb2RlKCd1dGYtMTYtbGUnKSkKKworICAgIGRlZiB0ZXN0X29wdGlvbl9sb2NhbGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLUwnKQorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy0tbG9jYWxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctTCcsICdlbicpCisgICAgICAgIGxhbmcsIGVuYyA9IGxvY2FsZS5nZXRkZWZhdWx0bG9jYWxlKCkKKyAgICAgICAgbGFuZyA9IGxhbmcgb3IgJ0MnCisgICAgICAgIGVuYyA9IGVuYyBvciAnVVRGLTgnCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9sZGxvY2FsZSA9IGxvY2FsZS5nZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfVElNRSwgKGxhbmcsIGVuYykpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUsIG9sZGxvY2FsZSkKKyAgICAgICAgZXhjZXB0IChsb2NhbGUuRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY2Fubm90IHNldCB0aGUgc3lzdGVtIGRlZmF1bHQgbG9jYWxlJykKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5ydW5fb2soJy0tbG9jYWxlJywgbGFuZywgJy0tZW5jb2RpbmcnLCBlbmMsICcyMDA0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbignMjAwNCcuZW5jb2RlKGVuYyksIHN0ZG91dCkKKworICAgIGRlZiB0ZXN0X29wdGlvbl93aWR0aChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctdycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLS13aWR0aCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLXcnLCAnc3BhbScpCisgICAgICAgIHN0ZG91dCA9IHNlbGYucnVuX29rKCctLXdpZHRoJywgJzMnLCAnMjAwNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidNb24gVHVlIFdlZCBUaHUgRnJpIFNhdCBTdW4nLCBzdGRvdXQpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fbGluZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFpbHVyZSgnLWwnKQorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy0tbGluZXMnKQorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy1sJywgJ3NwYW0nKQorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnLS1saW5lcycsICcyJywgJzIwMDQnKQorICAgICAgICBzZWxmLmFzc2VydEluKGNvbnYoJ0RlY2VtYmVyXG5cbk1vIFR1IFdlJyksIHN0ZG91dCkKKworICAgIGRlZiB0ZXN0X29wdGlvbl9zcGFjaW5nKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy1zJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctLXNwYWNpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy1zJywgJ3NwYW0nKQorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnLS1zcGFjaW5nJywgJzgnLCAnMjAwNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidTdSAgICAgICAgTW8nLCBzdGRvdXQpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fbW9udGhzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy1tJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctLW1vbnRoJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctbScsICdzcGFtJykKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5ydW5fb2soJy0tbW9udGhzJywgJzEnLCAnMjAwNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oY29udignXG5NbyBUdSBXZSBUaCBGciBTYSBTdVxuJyksIHN0ZG91dCkKKworICAgIGRlZiB0ZXN0X29wdGlvbl90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy10JykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctLXR5cGUnKQorICAgICAgICBzZWxmLmFzc2VydEZhaWx1cmUoJy10JywgJ3NwYW0nKQorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnLS10eXBlJywgJ3RleHQnLCAnMjAwNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBjb252KHJlc3VsdF8yMDA0X3RleHQpKQorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnLS10eXBlJywgJ2h0bWwnLCAnMjAwNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0Wzo2XSwgYic8P3htbCAnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInPHRpdGxlPkNhbGVuZGFyIGZvciAyMDA0PC90aXRsZT4nLCBzdGRvdXQpCisKKyAgICBkZWYgdGVzdF9odG1sX291dHB1dF9jdXJyZW50X3llYXIoc2VsZik6CisgICAgICAgIHN0ZG91dCA9IHNlbGYucnVuX29rKCctLXR5cGUnLCAnaHRtbCcpCisgICAgICAgIHllYXIgPSBkYXRldGltZS5kYXRldGltZS5ub3coKS55ZWFyCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCc8dGl0bGU+Q2FsZW5kYXIgZm9yICVzPC90aXRsZT4nICUgeWVhcikuZW5jb2RlKCksCisgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0KQorICAgICAgICBzZWxmLmFzc2VydEluKGInPHRyPjx0aCBjb2xzcGFuPSI3IiBjbGFzcz0ibW9udGgiPkphbnVhcnk8L3RoPjwvdHI+JywKKyAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQpCisKKyAgICBkZWYgdGVzdF9odG1sX291dHB1dF95ZWFyX2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzdGRvdXQgPSBzZWxmLnJ1bl9vaygnLXQnLCAnaHRtbCcsICctLWVuY29kaW5nJywgJ2FzY2lpJywgJzIwMDQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAocmVzdWx0XzIwMDRfaHRtbCAlIHsnZSc6ICdhc2NpaSd9KS5lbmNvZGUoJ2FzY2lpJykpCisKKyAgICBkZWYgdGVzdF9odG1sX291dHB1dF95ZWFyX2NzcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctdCcsICdodG1sJywgJy1jJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWlsdXJlKCctdCcsICdodG1sJywgJy0tY3NzJykKKyAgICAgICAgc3Rkb3V0ID0gc2VsZi5ydW5fb2soJy10JywgJ2h0bWwnLCAnLS1jc3MnLCAnY3VzdG9tLmNzcycsICcyMDA0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiICcKKyAgICAgICAgICAgICAgICAgICAgICBiJ2hyZWY9ImN1c3RvbS5jc3MiIC8+Jywgc3Rkb3V0KQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQppbmRleCA1MGM0YmJhLi5hMGMxZTc5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NhcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgTUlTU0lOR19DX0RPQ1NUUklOR1MKIHRyeToKICAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcwogZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtNDQsNyArNDUsNyBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKICAgICBkZWYgdGVzdF9ub19GYXRhbEVycm9yX2luZmluaXRlX2xvb3Aoc2VsZik6Ci0gICAgICAgIHdpdGggc3VwcG9ydC5zdXBwcmVzc19jcmFzaF9wb3B1cCgpOgorICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgX3Rlc3RjYXBpOycKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX3Rlc3RjYXBpLmNyYXNoX25vX2N1cnJlbnRfdGhyZWFkKCknXSwKQEAgLTExMCw2ICsxMTEsNDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfcG9zaXhzdWJwcm9jZXNzLmZvcmtfZXhlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgWigpLFtiJzEnXSwzLFsxLCAyXSw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX3NpZ25hdHVyZV9wYXJzaW5nKHNlbGYpOgorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLm5vX2RvY3N0cmluZy5fX2RvY19fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5ub19kb2NzdHJpbmcuX190ZXh0X3NpZ25hdHVyZV9fLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX3Rlc3RjYXBpLmRvY3N0cmluZ19lbXB0eS5fX2RvY19fLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX2VtcHR5Ll9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfbm9fc2lnbmF0dXJlLl9fZG9jX18sCisgICAgICAgICAgICAiVGhpcyBkb2NzdHJpbmcgaGFzIG5vIHNpZ25hdHVyZS4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfbm9fc2lnbmF0dXJlLl9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZS5fX2RvY19fLAorICAgICAgICAgICAgImRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlKCRtb2R1bGUsIC8sIGJvbylcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgYW4gaW52YWxpZCBzaWduYXR1cmUuIgorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9pbnZhbGlkX3NpZ25hdHVyZS5fX3RleHRfc2lnbmF0dXJlX18sIE5vbmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyLl9fZG9jX18sCisgICAgICAgICAgICAiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyKCRtb2R1bGUsIC8sIGJvbylcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICItLVxuIgorICAgICAgICAgICAgIlxuIgorICAgICAgICAgICAgIlRoaXMgZG9jc3RyaW5nIGFsc28gaGFzIGFuIGludmFsaWQgc2lnbmF0dXJlLiIKKyAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyLl9fdGV4dF9zaWduYXR1cmVfXywgTm9uZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmUuX19kb2NfXywKKyAgICAgICAgICAgICJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLl9fdGV4dF9zaWduYXR1cmVfXywgIigkbW9kdWxlLCAvLCBzaWcpIikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5kb2NzdHJpbmdfd2l0aF9zaWduYXR1cmVfYW5kX2V4dHJhX25ld2xpbmVzLl9fZG9jX18sCisgICAgICAgICAgICAiXG5UaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUgYW5kIHNvbWUgZXh0cmEgbmV3bGluZXMuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcy5fX3RleHRfc2lnbmF0dXJlX18sCisgICAgICAgICAgICAiKCRtb2R1bGUsIC8sIHBhcmFtZXRlcikiKQorCisKIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBUZXN0UGVuZGluZ0NhbGxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMTYxLDE1ICsyMDIsMTEgQEAKICAgICAgICAgY29udGV4dC5sb2NrID0gdGhyZWFkaW5nLkxvY2soKQogICAgICAgICBjb250ZXh0LmV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKIAotICAgICAgICBmb3IgaSBpbiByYW5nZShjb250ZXh0Lm5UaHJlYWRzKToKLSAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1zZWxmLnBlbmRpbmdjYWxsc190aHJlYWQsIGFyZ3MgPSAoY29udGV4dCwpKQotICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQotCi0gICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQoY29udGV4dC5sLCBuLCBjb250ZXh0KQotCi0gICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICB0aHJlYWRzID0gW3RocmVhZGluZy5UaHJlYWQodGFyZ2V0PXNlbGYucGVuZGluZ2NhbGxzX3RocmVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KGNvbnRleHQsKSkKKyAgICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShjb250ZXh0Lm5UaHJlYWRzKV0KKyAgICAgICAgd2l0aCBzdXBwb3J0LnN0YXJ0X3RocmVhZHModGhyZWFkcyk6CisgICAgICAgICAgICBzZWxmLnBlbmRpbmdjYWxsc193YWl0KGNvbnRleHQubCwgbiwgY29udGV4dCkKIAogICAgIGRlZiBwZW5kaW5nY2FsbHNfdGhyZWFkKHNlbGYsIGNvbnRleHQpOgogICAgICAgICB0cnk6CkBAIC0xOTMsNiArMjMwLDkgQEAKICAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfc3VibWl0KGwsIG4pCiAgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQobCwgbikKIAorCitjbGFzcyBTdWJpbnRlcnByZXRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCiAgICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKICAgICAgICAgaW1wb3J0IGJ1aWx0aW5zCiAgICAgICAgIHIsIHcgPSBvcy5waXBlKCkKQEAgLTIwMyw0NyArMjQzLDExMCBAQAogICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wKGlkKGJ1aWx0aW5zKSwgZikKICAgICAgICAgICAgICIiIi5mb3JtYXQodykKICAgICAgICAgd2l0aCBvcGVuKHIsICJyYiIpIGFzIGY6Ci0gICAgICAgICAgICByZXQgPSBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICAgICAgcmV0ID0gc3VwcG9ydC5ydW5faW5fc3ViaW50ZXJwKGNvZGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGlja2xlLmxvYWQoZiksIGlkKHN5cy5tb2R1bGVzKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocGlja2xlLmxvYWQoZiksIGlkKGJ1aWx0aW5zKSkKIAorCiAjIEJ1ZyAjNjAxMgogY2xhc3MgVGVzdDYwMTIodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF90ZXN0Y2FwaS5hcmdwYXJzaW5nKCJIZWxsbyIsICJXb3JsZCIpLCAxKQogCiAKLWNsYXNzIEVtYmVkZGluZ1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAidGVzdCBkb2Vzbid0IHdvcmsgdW5kZXIgV2luZG93cyIpCi0gICAgZGVmIHRlc3Rfc3ViaW50ZXJwcyhzZWxmKToKLSAgICAgICAgIyBYWFggb25seSB0ZXN0ZWQgdW5kZXIgVW5peCBjaGVja291dHMKLSAgICAgICAgYmFzZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKQotICAgICAgICBvbGRjd2QgPSBvcy5nZXRjd2QoKQorY2xhc3MgRW1iZWRkaW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaGVyZSA9IG9zLnBhdGguYWJzcGF0aChfX2ZpbGVfXykKKyAgICAgICAgYmFzZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShoZXJlKSkpCisgICAgICAgIGV4ZW5hbWUgPSAiX3Rlc3RlbWJlZCIKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoIndpbiIpOgorICAgICAgICAgICAgZXh0ID0gKCJfZCIgaWYgIl9kIiBpbiBzeXMuZXhlY3V0YWJsZSBlbHNlICIiKSArICIuZXhlIgorICAgICAgICAgICAgZXhlbmFtZSArPSBleHQKKyAgICAgICAgICAgIGV4ZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBleGVwYXRoID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAiTW9kdWxlcyIpCisgICAgICAgIHNlbGYudGVzdF9leGUgPSBleGUgPSBvcy5wYXRoLmpvaW4oZXhlcGF0aCwgZXhlbmFtZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGV4ZSk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBkb2Vzbid0IGV4aXN0IiAlIGV4ZSkKICAgICAgICAgIyBUaGlzIGlzIG5lZWRlZCBvdGhlcndpc2Ugd2UgZ2V0IGEgZmF0YWwgZXJyb3I6CiAgICAgICAgICMgIlB5X0luaXRpYWxpemU6IFVuYWJsZSB0byBnZXQgdGhlIGxvY2FsZSBlbmNvZGluZwogICAgICAgICAjIExvb2t1cEVycm9yOiBubyBjb2RlYyBzZWFyY2ggZnVuY3Rpb25zIHJlZ2lzdGVyZWQ6IGNhbid0IGZpbmQgZW5jb2RpbmciCisgICAgICAgIHNlbGYub2xkY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgb3MuY2hkaXIoYmFzZXBhdGgpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIG9zLmNoZGlyKHNlbGYub2xkY3dkKQorCisgICAgZGVmIHJ1bl9lbWJlZGRlZF9pbnRlcnByZXRlcihzZWxmLCAqYXJncyk6CisgICAgICAgICIiIlJ1bnMgYSB0ZXN0IGluIHRoZSBlbWJlZGRlZCBpbnRlcnByZXRlciIiIgorICAgICAgICBjbWQgPSBbc2VsZi50ZXN0X2V4ZV0KKyAgICAgICAgY21kLmV4dGVuZChhcmdzKQorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJldHVybmNvZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCByZXR1cm5jb2RlICVkLCBzdGRlcnIgaXMgJXIiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAocC5yZXR1cm5jb2RlLCBlcnIpKQorICAgICAgICByZXR1cm4gb3V0LmRlY29kZSgibGF0aW4xIiksIGVyci5kZWNvZGUoImxhdGluMSIpCisKKyAgICBkZWYgdGVzdF9zdWJpbnRlcnBzKHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMganVzdCBhICJkb24ndCBjcmFzaCIgdGVzdAorICAgICAgICBvdXQsIGVyciA9IHNlbGYucnVuX2VtYmVkZGVkX2ludGVycHJldGVyKCkKKyAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQob3V0KQorICAgICAgICAgICAgcHJpbnQoZXJyKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfZ2V0X2RlZmF1bHRfcGlwZV9lbmNvZGluZygpOgorICAgICAgICBycCwgd3AgPSBvcy5waXBlKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhlID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAiTW9kdWxlcyIsICJfdGVzdGVtYmVkIikKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhleGUpOgotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIiVyIGRvZXNuJ3QgZXhpc3QiICUgZXhlKQotICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW2V4ZV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKLSAgICAgICAgICAgIChvdXQsIGVycikgPSBwLmNvbW11bmljYXRlKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJldHVybmNvZGUgJWQsIHN0ZGVyciBpcyAlciIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocC5yZXR1cm5jb2RlLCBlcnIpKQotICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgotICAgICAgICAgICAgICAgIHByaW50KCkKLSAgICAgICAgICAgICAgICBwcmludChvdXQuZGVjb2RlKCdsYXRpbjEnKSkKLSAgICAgICAgICAgICAgICBwcmludChlcnIuZGVjb2RlKCdsYXRpbjEnKSkKKyAgICAgICAgICAgIHdpdGggb3MuZmRvcGVuKHdwLCAndycpIGFzIHc6CisgICAgICAgICAgICAgICAgZGVmYXVsdF9waXBlX2VuY29kaW5nID0gdy5lbmNvZGluZwogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkY3dkKQorICAgICAgICAgICAgb3MuY2xvc2UocnApCisgICAgICAgIHJldHVybiBkZWZhdWx0X3BpcGVfZW5jb2RpbmcKKworICAgIGRlZiB0ZXN0X2ZvcmNlZF9pb19lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBDaGVja3MgZm9yY2VkIGNvbmZpZ3VyYXRpb24gb2YgZW1iZWRkZWQgaW50ZXJwcmV0ZXIgSU8gc3RyZWFtcworICAgICAgICBvdXQsIGVyciA9IHNlbGYucnVuX2VtYmVkZGVkX2ludGVycHJldGVyKCJmb3JjZWRfaW9fZW5jb2RpbmciKQorICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgpCisgICAgICAgICAgICBwcmludChvdXQpCisgICAgICAgICAgICBwcmludChlcnIpCisgICAgICAgIGV4cGVjdGVkX3N0ZGluX2VuY29kaW5nID0gc3lzLl9fc3RkaW5fXy5lbmNvZGluZworICAgICAgICBleHBlY3RlZF9waXBlX2VuY29kaW5nID0gc2VsZi5fZ2V0X2RlZmF1bHRfcGlwZV9lbmNvZGluZygpCisgICAgICAgIGV4cGVjdGVkX291dHB1dCA9IG9zLmxpbmVzZXAuam9pbihbCisgICAgICAgICItLS0gVXNlIGRlZmF1bHRzIC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogZGVmYXVsdCIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHQiLAorICAgICAgICAic3RkaW46IHswfTpzdHJpY3QiLAorICAgICAgICAic3Rkb3V0OiB7MX06c3RyaWN0IiwKKyAgICAgICAgInN0ZGVycjogezF9OmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiLS0tIFNldCBlcnJvcnMgb25seSAtLS0iLAorICAgICAgICAiRXhwZWN0ZWQgZW5jb2Rpbmc6IGRlZmF1bHQiLAorICAgICAgICAiRXhwZWN0ZWQgZXJyb3JzOiBzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3RkaW46IHswfTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3Rkb3V0OiB7MX06c3Vycm9nYXRlZXNjYXBlIiwKKyAgICAgICAgInN0ZGVycjogezF9OmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiLS0tIFNldCBlbmNvZGluZyBvbmx5IC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogbGF0aW4tMSIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IGRlZmF1bHQiLAorICAgICAgICAic3RkaW46IGxhdGluLTE6c3RyaWN0IiwKKyAgICAgICAgInN0ZG91dDogbGF0aW4tMTpzdHJpY3QiLAorICAgICAgICAic3RkZXJyOiBsYXRpbi0xOmJhY2tzbGFzaHJlcGxhY2UiLAorICAgICAgICAiLS0tIFNldCBlbmNvZGluZyBhbmQgZXJyb3JzIC0tLSIsCisgICAgICAgICJFeHBlY3RlZCBlbmNvZGluZzogbGF0aW4tMSIsCisgICAgICAgICJFeHBlY3RlZCBlcnJvcnM6IHN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRpbjogbGF0aW4tMTpzdXJyb2dhdGVlc2NhcGUiLAorICAgICAgICAic3Rkb3V0OiBsYXRpbi0xOnN1cnJvZ2F0ZWVzY2FwZSIsCisgICAgICAgICJzdGRlcnI6IGxhdGluLTE6YmFja3NsYXNocmVwbGFjZSJdKS5mb3JtYXQoZXhwZWN0ZWRfc3RkaW5fZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcGlwZV9lbmNvZGluZykKKyAgICAgICAgIyBUaGlzIGlzIHVzZWZ1bCBpZiB3ZSBldmVyIHRyaXAgb3ZlciBvZGQgcGxhdGZvcm0gYmVoYXZpb3VyCisgICAgICAgIHNlbGYubWF4RGlmZiA9IE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZXhwZWN0ZWRfb3V0cHV0KQogCiBjbGFzcyBTa2lwaXRlbVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zNTUsOCArNDU4LDkgQEAKICAgICBkZWYgdGVzdF9fdGVzdGNhcGkoc2VsZik6CiAgICAgICAgIGZvciBuYW1lIGluIGRpcihfdGVzdGNhcGkpOgogICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCd0ZXN0XycpOgotICAgICAgICAgICAgICAgIHRlc3QgPSBnZXRhdHRyKF90ZXN0Y2FwaSwgbmFtZSkKLSAgICAgICAgICAgICAgICB0ZXN0KCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiaW50ZXJuYWwiLCBuYW1lPW5hbWUpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0ID0gZ2V0YXR0cihfdGVzdGNhcGksIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHRlc3QoKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jZ2kucHkgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQppbmRleCA4NmUxZjNhLi42YjI4MTA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NnaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NnaS5weQpAQCAtMTg2LDkgKzE4Niw5IEBACiAgICAgICAgIGNnaS5pbml0bG9nKCIlcyIsICJUZXN0aW5nIGluaXRsb2cgMSIpCiAgICAgICAgIGNnaS5sb2coIiVzIiwgIlRlc3RpbmcgbG9nIDIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNnaS5sb2dmcC5nZXR2YWx1ZSgpLCAiVGVzdGluZyBpbml0bG9nIDFcblRlc3RpbmcgbG9nIDJcbiIpCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKCIvZGV2L251bGwiKToKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMob3MuZGV2bnVsbCk6CiAgICAgICAgICAgICBjZ2kubG9nZnAgPSBOb25lCi0gICAgICAgICAgICBjZ2kubG9nZmlsZSA9ICIvZGV2L251bGwiCisgICAgICAgICAgICBjZ2kubG9nZmlsZSA9IG9zLmRldm51bGwKICAgICAgICAgICAgIGNnaS5pbml0bG9nKCIlcyIsICJUZXN0aW5nIGxvZyAzIikKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjZ2kuY2xvc2Vsb2cpCiAgICAgICAgICAgICBjZ2kubG9nKCJUZXN0aW5nIGxvZyA0IikKQEAgLTI0OCw2ICsyNDgsMjUgQEAKICAgICAgICAgICAgICAgICBnb3QgPSBnZXRhdHRyKGZzLmxpc3RbeF0sIGspCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cCkKIAorICAgIGRlZiB0ZXN0X2ZpZWxkc3RvcmFnZV9tdWx0aXBhcnRfbGVhZGluZ193aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICBlbnYgPSB7CisgICAgICAgICAgICAnUkVRVUVTVF9NRVRIT0QnOiAnUE9TVCcsCisgICAgICAgICAgICAnQ09OVEVOVF9UWVBFJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PXt9Jy5mb3JtYXQoQk9VTkRBUlkpLAorICAgICAgICAgICAgJ0NPTlRFTlRfTEVOR1RIJzogJzU2MCd9CisgICAgICAgICMgQWRkIHNvbWUgbGVhZGluZyB3aGl0ZXNwYWNlIHRvIG91ciBwb3N0IGRhdGEgdGhhdCB3aWxsIGNhdXNlIHRoZQorICAgICAgICAjIGZpcnN0IGxpbmUgdG8gbm90IGJlIHRoZSBpbm5lcmJvdW5kYXJ5LgorICAgICAgICBmcCA9IEJ5dGVzSU8oYiJcclxuIiArIFBPU1REQVRBLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBmcyA9IGNnaS5GaWVsZFN0b3JhZ2UoZnAsIGVudmlyb249ZW52LCBlbmNvZGluZz0ibGF0aW4tMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZzLmxpc3QpLCA0KQorICAgICAgICBleHBlY3QgPSBbeyduYW1lJzonaWQnLCAnZmlsZW5hbWUnOk5vbmUsICd2YWx1ZSc6JzEyMzQnfSwKKyAgICAgICAgICAgICAgICAgIHsnbmFtZSc6J3RpdGxlJywgJ2ZpbGVuYW1lJzpOb25lLCAndmFsdWUnOicnfSwKKyAgICAgICAgICAgICAgICAgIHsnbmFtZSc6J2ZpbGUnLCAnZmlsZW5hbWUnOid0ZXN0LnR4dCcsICd2YWx1ZSc6YidUZXN0aW5nIDEyMy5cbid9LAorICAgICAgICAgICAgICAgICAgeyduYW1lJzonc3VibWl0JywgJ2ZpbGVuYW1lJzpOb25lLCAndmFsdWUnOicgQWRkICd9XQorICAgICAgICBmb3IgeCBpbiByYW5nZShsZW4oZnMubGlzdCkpOgorICAgICAgICAgICAgZm9yIGssIGV4cCBpbiBleHBlY3RbeF0uaXRlbXMoKToKKyAgICAgICAgICAgICAgICBnb3QgPSBnZXRhdHRyKGZzLmxpc3RbeF0sIGspCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cCkKKwogICAgIGRlZiB0ZXN0X2ZpZWxkc3RvcmFnZV9tdWx0aXBhcnRfbm9uX2FzY2lpKHNlbGYpOgogICAgICAgICAjVGVzdCBiYXNpYyBGaWVsZFN0b3JhZ2UgbXVsdGlwYXJ0IHBhcnNpbmcKICAgICAgICAgZW52ID0geydSRVFVRVNUX01FVEhPRCc6J1BPU1QnLApAQCAtMzA3LDYgKzMyNiwyNSBAQAogICAgICAgICAgICAgICAgIGdvdCA9IGdldGF0dHIoZmlsZXNbeF0sIGspCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cCkKIAorICAgIGRlZiB0ZXN0X2ZpZWxkc3RvcmFnZV9wYXJ0X2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBCT1VOREFSWSA9ICJKZklTYTAxIgorICAgICAgICBQT1NUREFUQSA9ICIiIi0tSmZJU2EwMQorQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJzdWJtaXQtbmFtZSIKK0NvbnRlbnQtTGVuZ3RoOiA1CisKK0xhcnJ5CistLUpmSVNhMDEiIiIKKyAgICAgICAgZW52ID0geworICAgICAgICAgICAgJ1JFUVVFU1RfTUVUSE9EJzogJ1BPU1QnLAorICAgICAgICAgICAgJ0NPTlRFTlRfVFlQRSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT17fScuZm9ybWF0KEJPVU5EQVJZKSwKKyAgICAgICAgICAgICdDT05URU5UX0xFTkdUSCc6IHN0cihsZW4oUE9TVERBVEEpKX0KKyAgICAgICAgZnAgPSBCeXRlc0lPKFBPU1REQVRBLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBmcyA9IGNnaS5GaWVsZFN0b3JhZ2UoZnAsIGVudmlyb249ZW52LCBlbmNvZGluZz0ibGF0aW4tMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGZzLmxpc3QpLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZzLmxpc3RbMF0ubmFtZSwgJ3N1Ym1pdC1uYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmcy5saXN0WzBdLnZhbHVlLCAnTGFycnknKQorCisKICAgICBfcXNfcmVzdWx0ID0gewogICAgICAgICAna2V5MSc6ICd2YWx1ZTEnLAogICAgICAgICAna2V5Mic6IFsndmFsdWUyeCcsICd2YWx1ZTJ5J10sCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5IGIvTGliL3Rlc3QvdGVzdF9jbGFzcy5weQppbmRleCBjNzAwM2ZiLi5lMzg4M2Q2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NsYXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY2xhc3MucHkKQEAgLTE1LDYgKzE1LDggQEAKICAgICAicm11bCIsCiAgICAgInRydWVkaXYiLAogICAgICJydHJ1ZWRpdiIsCisgICAgImZsb29yZGl2IiwKKyAgICAicmZsb29yZGl2IiwKICAgICAibW9kIiwKICAgICAicm1vZCIsCiAgICAgImRpdm1vZCIsCkBAIC0xNzQsMTUgKzE3NiwyMyBAQAogICAgICAgICAxICogdGVzdG1lCiAgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fcm11bF9fIiwgKHRlc3RtZSwgMSkpXSkKIAotICAgICAgICBpZiAxLzIgPT0gMDoKLSAgICAgICAgICAgIGNhbGxMc3RbOl0gPSBbXQotICAgICAgICAgICAgdGVzdG1lIC8gMQotICAgICAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19kaXZfXyIsICh0ZXN0bWUsIDEpKV0pCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICB0ZXN0bWUgLyAxCisgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fdHJ1ZWRpdl9fIiwgKHRlc3RtZSwgMSkpXSkKIAogCi0gICAgICAgICAgICBjYWxsTHN0WzpdID0gW10KLSAgICAgICAgICAgIDEgLyB0ZXN0bWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q2FsbFN0YWNrKFsoIl9fcmRpdl9fIiwgKHRlc3RtZSwgMSkpXSkKKyAgICAgICAgY2FsbExzdFs6XSA9IFtdCisgICAgICAgIDEgLyB0ZXN0bWUKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19ydHJ1ZWRpdl9fIiwgKHRlc3RtZSwgMSkpXSkKKworICAgICAgICBjYWxsTHN0WzpdID0gW10KKyAgICAgICAgdGVzdG1lIC8vIDEKKyAgICAgICAgc2VsZi5hc3NlcnRDYWxsU3RhY2soWygiX19mbG9vcmRpdl9fIiwgKHRlc3RtZSwgMSkpXSkKKworCisgICAgICAgIGNhbGxMc3RbOl0gPSBbXQorICAgICAgICAxIC8vIHRlc3RtZQorICAgICAgICBzZWxmLmFzc2VydENhbGxTdGFjayhbKCJfX3JmbG9vcmRpdl9fIiwgKHRlc3RtZSwgMSkpXSkKIAogICAgICAgICBjYWxsTHN0WzpdID0gW10KICAgICAgICAgdGVzdG1lICUgMQpAQCAtNDQ0LDEyICs0NTQsMTYgQEAKICAgICAgICAgICAgIGRlZiBfX2ludF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgICAgICBfX2Zsb2F0X18gPSBfX2ludF9fCisgICAgICAgICAgICBfX2NvbXBsZXhfXyA9IF9faW50X18KICAgICAgICAgICAgIF9fc3RyX18gPSBfX2ludF9fCiAgICAgICAgICAgICBfX3JlcHJfXyA9IF9faW50X18KLSAgICAgICAgICAgIF9fb2N0X18gPSBfX2ludF9fCi0gICAgICAgICAgICBfX2hleF9fID0gX19pbnRfXworICAgICAgICAgICAgX19ieXRlc19fID0gX19pbnRfXworICAgICAgICAgICAgX19ib29sX18gPSBfX2ludF9fCisgICAgICAgICAgICBfX2luZGV4X18gPSBfX2ludF9fCisgICAgICAgIGRlZiBpbmRleCh4KToKKyAgICAgICAgICAgIHJldHVybiBbXVt4XQogCi0gICAgICAgIGZvciBmIGluIFtpbnQsIGZsb2F0LCBzdHIsIHJlcHIsIG9jdCwgaGV4XToKKyAgICAgICAgZm9yIGYgaW4gW2Zsb2F0LCBjb21wbGV4LCBzdHIsIHJlcHIsIGJ5dGVzLCBiaW4sIG9jdCwgaGV4LCBib29sLCBpbmRleF06CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIEJhZFR5cGVDbGFzcygpKQogCiAgICAgZGVmIHRlc3RIYXNoU3R1ZmYoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9jbWF0aC5weQppbmRleCA0ZGI2YjJiLi42OGJmMTZlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY21hdGgucHkKQEAgLTEsNCArMSw0IEBACi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCByZXF1aXJlc19JRUVFXzc1NAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVxdWlyZXNfSUVFRV83NTQsIGNweXRob25fb25seQogZnJvbSB0ZXN0LnRlc3RfbWF0aCBpbXBvcnQgcGFyc2VfdGVzdGZpbGUsIHRlc3RfZmlsZQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgY21hdGgsIG1hdGgKQEAgLTM4MSwxNyArMzgxLDQ4IEBACiAgICAgICAgICAgICBzZWxmLnJBc3NlcnRBbG1vc3RFcXVhbChleHBlY3RlZC5pbWFnLCBhY3R1YWwuaW1hZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJyb3JfbWVzc2FnZSkKIAotICAgIGRlZiBhc3NlcnRDSVNFcXVhbChzZWxmLCBhLCBiKToKLSAgICAgICAgZXBzID0gMUUtNwotICAgICAgICBpZiBhYnMoYVswXSAtIGJbMF0pID4gZXBzIG9yIGFicyhhWzFdIC0gYlsxXSkgPiBlcHM6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoKGEgLGIpKQorICAgIGRlZiBjaGVja19wb2xhcihzZWxmLCBmdW5jKToKKyAgICAgICAgZGVmIGNoZWNrKGFyZywgZXhwZWN0ZWQpOgorICAgICAgICAgICAgZ290ID0gZnVuYyhhcmcpCisgICAgICAgICAgICBmb3IgZSwgZyBpbiB6aXAoZXhwZWN0ZWQsIGdvdCk6CisgICAgICAgICAgICAgICAgc2VsZi5yQXNzZXJ0QWxtb3N0RXF1YWwoZSwgZykKKyAgICAgICAgY2hlY2soMCwgKDAuLCAwLikpCisgICAgICAgIGNoZWNrKDEsICgxLiwgMC4pKQorICAgICAgICBjaGVjaygtMSwgKDEuLCBwaSkpCisgICAgICAgIGNoZWNrKDFqLCAoMS4sIHBpIC8gMikpCisgICAgICAgIGNoZWNrKC0zaiwgKDMuLCAtcGkgLyAyKSkKKyAgICAgICAgaW5mID0gZmxvYXQoJ2luZicpCisgICAgICAgIGNoZWNrKGNvbXBsZXgoaW5mLCAwKSwgKGluZiwgMC4pKQorICAgICAgICBjaGVjayhjb21wbGV4KC1pbmYsIDApLCAoaW5mLCBwaSkpCisgICAgICAgIGNoZWNrKGNvbXBsZXgoMywgaW5mKSwgKGluZiwgcGkgLyAyKSkKKyAgICAgICAgY2hlY2soY29tcGxleCg1LCAtaW5mKSwgKGluZiwgLXBpIC8gMikpCisgICAgICAgIGNoZWNrKGNvbXBsZXgoaW5mLCBpbmYpLCAoaW5mLCBwaSAvIDQpKQorICAgICAgICBjaGVjayhjb21wbGV4KGluZiwgLWluZiksIChpbmYsIC1waSAvIDQpKQorICAgICAgICBjaGVjayhjb21wbGV4KC1pbmYsIGluZiksIChpbmYsIDMgKiBwaSAvIDQpKQorICAgICAgICBjaGVjayhjb21wbGV4KC1pbmYsIC1pbmYpLCAoaW5mLCAtMyAqIHBpIC8gNCkpCisgICAgICAgIG5hbiA9IGZsb2F0KCduYW4nKQorICAgICAgICBjaGVjayhjb21wbGV4KG5hbiwgMCksIChuYW4sIG5hbikpCisgICAgICAgIGNoZWNrKGNvbXBsZXgoMCwgbmFuKSwgKG5hbiwgbmFuKSkKKyAgICAgICAgY2hlY2soY29tcGxleChuYW4sIG5hbiksIChuYW4sIG5hbikpCisgICAgICAgIGNoZWNrKGNvbXBsZXgoaW5mLCBuYW4pLCAoaW5mLCBuYW4pKQorICAgICAgICBjaGVjayhjb21wbGV4KC1pbmYsIG5hbiksIChpbmYsIG5hbikpCisgICAgICAgIGNoZWNrKGNvbXBsZXgobmFuLCBpbmYpLCAoaW5mLCBuYW4pKQorICAgICAgICBjaGVjayhjb21wbGV4KG5hbiwgLWluZiksIChpbmYsIG5hbikpCiAKICAgICBkZWYgdGVzdF9wb2xhcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRDSVNFcXVhbChwb2xhcigwKSwgKDAuLCAwLikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Q0lTRXF1YWwocG9sYXIoMS4pLCAoMS4sIDAuKSkKLSAgICAgICAgc2VsZi5hc3NlcnRDSVNFcXVhbChwb2xhcigtMS4pLCAoMS4sIHBpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRDSVNFcXVhbChwb2xhcigxaiksICgxLiwgcGkvMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Q0lTRXF1YWwocG9sYXIoLTFqKSwgKDEuLCAtcGkvMikpCisgICAgICAgIHNlbGYuY2hlY2tfcG9sYXIocG9sYXIpCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfcG9sYXJfZXJybm8oc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI0NDg5OiBjaGVjayBhIHByZXZpb3VzbHkgc2V0IEMgZXJybm8gZG9lc24ndCBkaXN0dXJiIHBvbGFyKCkKKyAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHNldF9lcnJubworICAgICAgICBkZWYgcG9sYXJfd2l0aF9lcnJub19zZXQoeik6CisgICAgICAgICAgICBzZXRfZXJybm8oMTEpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHBvbGFyKHopCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHNldF9lcnJubygwKQorICAgICAgICBzZWxmLmNoZWNrX3BvbGFyKHBvbGFyX3dpdGhfZXJybm9fc2V0KQogCiAgICAgZGVmIHRlc3RfcGhhc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocGhhc2UoMCksIDAuKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jbWQucHkgYi9MaWIvdGVzdC90ZXN0X2NtZC5weQppbmRleCBlOWEwMjExLi5kZDg5ODFmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NtZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NtZC5weQpAQCAtMTEwLDcgKzExMCw3IEBACiAgICAgNSAgMTIgIDE5CiAgICAgNiAgMTMKIAotICAgIFRoaXMgaXMgYSBpbnRlcmFjdGl2ZSB0ZXN0LCBwdXQgc29tZSBjb21tYW5kcyBpbiB0aGUgY21kcXVldWUgYXR0cmlidXRlCisgICAgVGhpcyBpcyBhbiBpbnRlcmFjdGl2ZSB0ZXN0LCBwdXQgc29tZSBjb21tYW5kcyBpbiB0aGUgY21kcXVldWUgYXR0cmlidXRlCiAgICAgYW5kIGxldCBpdCBleGVjdXRlCiAgICAgVGhpcyB0ZXN0IGluY2x1ZGVzIHRoZSBwcmVsb29wKCksIHBvc3Rsb29wKCksIGRlZmF1bHQoKSwgZW1wdHlsaW5lKCksCiAgICAgcGFyc2VsaW5lKCksIGRvX2hlbHAoKSBmdW5jdGlvbnMKQEAgLTIyOSw3ICsyMjksNyBAQAogICAgIHRyYWNlID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0cmFjZScpCiAgICAgdHJhY2VyPXRyYWNlLlRyYWNlKGlnbm9yZWRpcnM9W3N5cy5iYXNlX3ByZWZpeCwgc3lzLmJhc2VfZXhlY19wcmVmaXgsXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlPTAsIGNvdW50PTEpCi0gICAgdHJhY2VyLnJ1bigncmVsb2FkKGNtZCk7dGVzdF9tYWluKCknKQorICAgIHRyYWNlci5ydW4oJ2ltcG9ydCBpbXBvcnRsaWI7IGltcG9ydGxpYi5yZWxvYWQoY21kKTsgdGVzdF9tYWluKCknKQogICAgIHI9dHJhY2VyLnJlc3VsdHMoKQogICAgIHByaW50KCJXcml0aW5nIGNvdmVyYWdlIHJlc3VsdHMuLi4iKQogICAgIHIud3JpdGVfcmVzdWx0cyhzaG93X21pc3Npbmc9VHJ1ZSwgc3VtbWFyeT1UcnVlLCBjb3ZlcmRpcj1jb3ZlcmRpcikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkgYi9MaWIvdGVzdC90ZXN0X2NtZF9saW5lLnB5CmluZGV4IGE4OWQ3ZTQuLjVjYWQzZWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZS5weQpAQCAtNCw5ICs0LDExIEBACiAKIGltcG9ydCB0ZXN0LnN1cHBvcnQsIHVuaXR0ZXN0CiBpbXBvcnQgb3MKK2ltcG9ydCBzaHV0aWwKIGltcG9ydCBzeXMKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGVtcGZpbGUKK2Zyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlcgogZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IChzcGF3bl9weXRob24sIGtpbGxfcHl0aG9uLCBhc3NlcnRfcHl0aG9uX29rLAogICAgIGFzc2VydF9weXRob25fZmFpbHVyZSkKIApAQCAtNDEsOCArNDMsMTAgQEAKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb24oc2VsZik6CiAgICAgICAgIHZlcnNpb24gPSAoJ1B5dGhvbiAlZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSkuZW5jb2RlKCJhc2NpaSIpCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1WJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVyci5zdGFydHN3aXRoKHZlcnNpb24pKQorICAgICAgICBmb3Igc3dpdGNoIGluICctVicsICctLXZlcnNpb24nOgorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzd2l0Y2gpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVyci5zdGFydHN3aXRoKHZlcnNpb24pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG91dC5zdGFydHN3aXRoKHZlcnNpb24pKQogCiAgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKICAgICAgICAgIyAtdiBjYXVzZXMgaW1wb3J0cyB0byB3cml0ZSB0byBzdGRlcnIuICBJZiB0aGUgd3JpdGUgdG8KQEAgLTU0LDE0ICs1OCw0OSBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInc3RhY2sgb3ZlcmZsb3cnLCBlcnIpCiAKICAgICBkZWYgdGVzdF94b3B0aW9ucyhzZWxmKToKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLl94b3B0aW9ucyknKQotICAgICAgICBvcHRzID0gZXZhbChvdXQuc3BsaXRsaW5lcygpWzBdKQorICAgICAgICBkZWYgZ2V0X3hvcHRpb25zKCphcmdzKToKKyAgICAgICAgICAgICMgdXNlIHN1YnByb2Nlc3MgbW9kdWxlIGRpcmVjdGx5IGJlY2F1c2UgdGVzdC5zY3JpcHRfaGVscGVyIGFkZHMKKyAgICAgICAgICAgICMgIi1YIGZhdWx0aGFuZGxlciIgdG8gdGhlIGNvbW1hbmQgbGluZQorICAgICAgICAgICAgYXJncyA9IChzeXMuZXhlY3V0YWJsZSwgJy1FJykgKyBhcmdzCisgICAgICAgICAgICBhcmdzICs9ICgnLWMnLCAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLl94b3B0aW9ucyknKQorICAgICAgICAgICAgb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJncykKKyAgICAgICAgICAgIG9wdHMgPSBldmFsKG91dC5zcGxpdGxpbmVzKClbMF0pCisgICAgICAgICAgICByZXR1cm4gb3B0cworCisgICAgICAgIG9wdHMgPSBnZXRfeG9wdGlvbnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIHt9KQotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKAotICAgICAgICAgICAgJy1YYScsICctWGI9YyxkPWUnLCAnLWMnLCAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLl94b3B0aW9ucyknKQotICAgICAgICBvcHRzID0gZXZhbChvdXQuc3BsaXRsaW5lcygpWzBdKQorCisgICAgICAgIG9wdHMgPSBnZXRfeG9wdGlvbnMoJy1YYScsICctWGI9YyxkPWUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdHMsIHsnYSc6IFRydWUsICdiJzogJ2MsZD1lJ30pCiAKKyAgICBkZWYgdGVzdF9zaG93cmVmY291bnQoc2VsZik6CisgICAgICAgIGRlZiBydW5fcHl0aG9uKCphcmdzKToKKyAgICAgICAgICAgICMgdGhpcyBpcyBzaW1pbGFyIHRvIGFzc2VydF9weXRob25fb2sgYnV0IGRvZXNuJ3Qgc3RyaXAKKyAgICAgICAgICAgICMgdGhlIHJlZmNvdW50IGZyb20gc3RkZXJyLiAgSXQgY2FuIGJlIHJlcGxhY2VkIG9uY2UKKyAgICAgICAgICAgICMgYXNzZXJ0X3B5dGhvbl9vayBzdG9wcyBkb2luZyB0aGF0LgorICAgICAgICAgICAgY21kID0gW3N5cy5leGVjdXRhYmxlXQorICAgICAgICAgICAgY21kLmV4dGVuZChhcmdzKQorICAgICAgICAgICAgUElQRSA9IHN1YnByb2Nlc3MuUElQRQorICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9UElQRSwgc3RkZXJyPVBJUEUpCisgICAgICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAgICAgcC5zdGRvdXQuY2xvc2UoKQorICAgICAgICAgICAgcC5zdGRlcnIuY2xvc2UoKQorICAgICAgICAgICAgcmMgPSBwLnJldHVybmNvZGUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgICAgICByZXR1cm4gcmMsIG91dCwgZXJyCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHN5czsgcHJpbnQoc3lzLl94b3B0aW9ucyknCisgICAgICAgICMgbm9ybWFsbHkgdGhlIHJlZmNvdW50IGlzIGhpZGRlbgorICAgICAgICByYywgb3V0LCBlcnIgPSBydW5fcHl0aG9uKCctYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnJzdHJpcCgpLCBiJ3t9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKyAgICAgICAgIyAiLVggc2hvd3JlZmNvdW50IiBzaG93cyB0aGUgcmVmY291bnQsIGJ1dCBvbmx5IGluIGRlYnVnIGJ1aWxkcworICAgICAgICByYywgb3V0LCBlcnIgPSBydW5fcHl0aG9uKCctWCcsICdzaG93cmVmY291bnQnLCAnLWMnLCBjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5yc3RyaXAoKSwgYiJ7J3Nob3dyZWZjb3VudCc6IFRydWV9IikKKyAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXR0b3RhbHJlZmNvdW50Jyk6ICAjIGRlYnVnIGJ1aWxkCisgICAgICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KGVyciwgYnInXlxbXGQrIHJlZnMsIFxkKyBibG9ja3NcXScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCiAgICAgZGVmIHRlc3RfcnVuX21vZHVsZShzZWxmKToKICAgICAgICAgIyBUZXN0IGV4cGVjdGVkIG9wZXJhdGlvbiBvZiB0aGUgJy1tJyBzd2l0Y2gKICAgICAgICAgIyBTd2l0Y2ggbmVlZHMgYW4gYXJndW1lbnQKQEAgLTcwLDkgKzEwOSw5IEBACiAgICAgICAgIGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAnZm5vcmQ0MzUyMHh5eicpCiAgICAgICAgICMgQ2hlY2sgdGhlIHJ1bnB5IG1vZHVsZSBhbHNvIGdpdmVzIGFuIGVycm9yIGZvcgogICAgICAgICAjIGEgbm9uZXhpc3RlbnQgbW9kdWxlCi0gICAgICAgIGFzc2VydF9weXRob25fZmFpbHVyZSgnLW0nLCAncnVucHknLCAnZm5vcmQ0MzUyMHh5eicpLAorICAgICAgICBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3J1bnB5JywgJ2Zub3JkNDM1MjB4eXonKQogICAgICAgICAjIEFsbCBnb29kIGlmIG1vZHVsZSBpcyBsb2NhdGVkIGFuZCBydW4gc3VjY2Vzc2Z1bGx5Ci0gICAgICAgIGFzc2VydF9weXRob25fb2soJy1tJywgJ3RpbWVpdCcsICctbicsICcxJyksCisgICAgICAgIGFzc2VydF9weXRob25fb2soJy1tJywgJ3RpbWVpdCcsICctbicsICcxJykKIAogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGVfYnVnMTc2NDQwNyhzZWxmKToKICAgICAgICAgIyAtbSBhbmQgLWkgbmVlZCB0byBwbGF5IHdlbGwgdG9nZXRoZXIKQEAgLTIxMyw5ICsyNTIsMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXRoMS5lbmNvZGUoJ2FzY2lpJyksIG91dCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXRoMi5lbmNvZGUoJ2FzY2lpJyksIG91dCkKIAorICAgIGRlZiB0ZXN0X2VtcHR5X1BZVEhPTlBBVEhfaXNzdWUxNjMwOShzZWxmKToKKyAgICAgICAgIyBPbiBQb3NpeCwgaXQgaXMgZG9jdW1lbnRlZCB0aGF0IHNldHRpbmcgUEFUSCB0byB0aGUKKyAgICAgICAgIyBlbXB0eSBzdHJpbmcgaXMgZXF1aXZhbGVudCB0byBub3Qgc2V0dGluZyBQQVRIIGF0IGFsbCwKKyAgICAgICAgIyB3aGljaCBpcyBhbiBleGNlcHRpb24gdG8gdGhlIHJ1bGUgdGhhdCBpbiBhIHN0cmluZyBsaWtlCisgICAgICAgICMgIi9iaW46Oi91c3IvYmluIiB0aGUgZW1wdHkgc3RyaW5nIGluIHRoZSBtaWRkbGUgZ2V0cworICAgICAgICAjIGludGVycHJldGVkIGFzICcuJworICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIHBhdGggPSAiOiIuam9pbihzeXMucGF0aCkKKyAgICAgICAgICAgIHBhdGggPSBwYXRoLmVuY29kZSgiYXNjaWkiLCAiYmFja3NsYXNocmVwbGFjZSIpCisgICAgICAgICAgICBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShwYXRoKSIiIgorICAgICAgICByYzEsIG91dDEsIGVycjEgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIFBZVEhPTlBBVEg9IiIpCisgICAgICAgIHJjMiwgb3V0MiwgZXJyMiA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSwgX19pc29sYXRlZD1GYWxzZSkKKyAgICAgICAgIyByZWdhcmRpbmcgdG8gUG9zaXggc3BlY2lmaWNhdGlvbiwgb3V0cHV0cyBzaG91bGQgYmUgZXF1YWwKKyAgICAgICAgIyBmb3IgZW1wdHkgYW5kIHVuc2V0IFBZVEhPTlBBVEgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQxLCBvdXQyKQorCiAgICAgZGVmIHRlc3RfZGlzcGxheWhvb2tfdW5lbmNvZGFibGUoc2VsZik6CiAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoJ2FzY2lpJywgJ2xhdGluLTEnLCAndXRmLTgnKToKLSAgICAgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgICAgICAjIFdlIGFyZSB0ZXN0aW5nIGEgUFlUSE9OIGVudmlyb25tZW50IHZhcmlhYmxlIGhlcmUsIHNvIHdlIGNhbid0CisgICAgICAgICAgICAjIHVzZSAtRSwgLUksIG9yIHNjcmlwdF9oZWxwZXIgKHdoaWNoIHVzZXMgdGhlbSkuICBTbyBpbnN0ZWFkIHdlIGRvCisgICAgICAgICAgICAjIHBvb3ItbWFuJ3MgaXNvbGF0aW9uIGJ5IGRlbGV0aW5nIHRoZSBQWVRIT04gdmFycyBmcm9tIGVudi4KKyAgICAgICAgICAgIGVudiA9IHtrZXk6dmFsdWUgZm9yIChrZXksdmFsdWUpIGluIG9zLmVudmlyb24uY29weSgpLml0ZW1zKCkKKyAgICAgICAgICAgICAgICAgICBpZiBub3Qga2V5LnN0YXJ0c3dpdGgoJ1BZVEhPTicpfQogICAgICAgICAgICAgZW52WydQWVRIT05JT0VOQ09ESU5HJ10gPSBlbmNvZGluZwogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oCiAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAnLWknXSwKQEAgLTI5MCw3ICszNTAsNyBAQAogICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLCBvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgoZXJyLmRlY29kZSgnYXNjaWknLCAnaWdub3JlJyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgJ0V4Y2VwdGlvbiBPU0Vycm9yOiAuKiBpZ25vcmVkJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAnRXhjZXB0aW9uIGlnbm9yZWQgaW4uKlxuT1NFcnJvcjogLionKQogCiAgICAgZGVmIHRlc3RfY2xvc2VkX3N0ZG91dChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTM0NDQ6IGlmIHN0ZG91dCBoYXMgYmVlbiBleHBsaWNpdGx5IGNsb3NlZCwgd2Ugc2hvdWxkCkBAIC0zNDIsMTIgKzQwMiwyNCBAQAogICAgICAgICAjIFZlcmlmeSB0aGF0IC1SIGVuYWJsZXMgaGFzaCByYW5kb21pemF0aW9uOgogICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctUicpCiAgICAgICAgIGhhc2hlcyA9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDIpOgorICAgICAgICBpZiBvcy5lbnZpcm9uLmdldCgnUFlUSE9OSEFTSFNFRUQnLCAncmFuZG9tJykgIT0gJ3JhbmRvbSc6CisgICAgICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pICAjIGNvcHkKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byB0ZXN0IHRoYXQgaXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGhvdXQKKyAgICAgICAgICAgICMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIGVuYWJsaW5nIGl0IGZvciB1cy4KKyAgICAgICAgICAgIGRlbCBlbnZbJ1BZVEhPTkhBU0hTRUVEJ10KKyAgICAgICAgICAgIGVudlsnX19jbGVhbmVudiddID0gJzEnICAjIGNvbnN1bWVkIGJ5IGFzc2VydF9weXRob25fb2soKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZW52ID0ge30KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMyk6CiAgICAgICAgICAgICBjb2RlID0gJ3ByaW50KGhhc2goInNwYW0iKSknCi0gICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsICoqZW52KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKICAgICAgICAgICAgIGhhc2hlcy5hcHBlbmQob3V0KQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGhhc2hlc1swXSwgaGFzaGVzWzFdKQorICAgICAgICBoYXNoZXMgPSBzb3J0ZWQoc2V0KGhhc2hlcykpICAjIHVuaXEKKyAgICAgICAgIyBSYXJlIGNoYW5jZSBvZiBmYWlsdXJlIGR1ZSB0byAzIHJhbmRvbSBzZWVkcyBob25lc3RseSBiZWluZyBlcXVhbC4KKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihoYXNoZXMpLCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSczIHJ1bnMgcHJvZHVjZWQgYW4gaWRlbnRpY2FsIHJhbmRvbSBoYXNoICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGZvciAic3BhbSI6IHt9Jy5mb3JtYXQoaGFzaGVzKSkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHN5cy5mbGFncyBjb250YWlucyBoYXNoX3JhbmRvbWl6YXRpb24KICAgICAgICAgY29kZSA9ICdpbXBvcnQgc3lzOyBwcmludCgicmFuZG9tIGlzIiwgc3lzLmZsYWdzLmhhc2hfcmFuZG9taXphdGlvbiknCkBAIC0zODQsNiArNDU2LDMyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLnNwbGl0bGluZXMoKS5jb3VudChiJ1Vua25vd24gb3B0aW9uOiAtYScpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInJywgb3V0KQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzY3JpcHRfaGVscGVyLl9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpLAorICAgICAgICAgICAgICAgICAgICAgJ0Nhbm5vdCBydW4gLUkgdGVzdHMgd2hlbiBQWVRIT04gZW52IHZhcnMgYXJlIHJlcXVpcmVkLicpCisgICAgZGVmIHRlc3RfaXNvbGF0ZWRtb2RlKHNlbGYpOgorICAgICAgICBzZWxmLnZlcmlmeV92YWxpZF9mbGFnKCctSScpCisgICAgICAgIHNlbGYudmVyaWZ5X3ZhbGlkX2ZsYWcoJy1JRXMnKQorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctSScsICctYycsCisgICAgICAgICAgICAnZnJvbSBzeXMgaW1wb3J0IGZsYWdzIGFzIGY7ICcKKyAgICAgICAgICAgICdwcmludChmLm5vX3VzZXJfc2l0ZSwgZi5pZ25vcmVfZW52aXJvbm1lbnQsIGYuaXNvbGF0ZWQpJywKKyAgICAgICAgICAgICMgZHVtbXl2YXIgdG8gcHJldmVudCBleHRyYW5vdXMgLUUKKyAgICAgICAgICAgIGR1bW15dmFyPSIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJzEgMSAxJykKKyAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQudGVtcF9jd2QoKSBhcyB0bXBkaXI6CisgICAgICAgICAgICBmYWtlID0gb3MucGF0aC5qb2luKHRtcGRpciwgInV1aWQucHkiKQorICAgICAgICAgICAgbWFpbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICJtYWluLnB5IikKKyAgICAgICAgICAgIHdpdGggb3BlbihmYWtlLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgicmFpc2UgUnVudGltZUVycm9yKCdpc29sYXRlZCBtb2RlIHRlc3QnKVxuIikKKyAgICAgICAgICAgIHdpdGggb3BlbihtYWluLCAidyIpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiaW1wb3J0IHV1aWRcbiIpCisgICAgICAgICAgICAgICAgZi53cml0ZSgicHJpbnQoJ29rJylcbiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCBtYWluXSwgY3dkPXRtcGRpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwpCisgICAgICAgICAgICBvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbc3lzLmV4ZWN1dGFibGUsICItSSIsIG1haW5dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3dkPXRtcGRpcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGIib2siKQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDbWRMaW5lVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY21kX2xpbmVfc2NyaXB0LnB5IGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKaW5kZXggYjQyNjliOS4uNzM1MDE2NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jbWRfbGluZV9zY3JpcHQucHkKQEAgLTEsNSArMSw2IEBACiAjIHRlc3RzIGNvbW1hbmQgbGluZSBleGVjdXRpb24gb2Ygc2NyaXB0cwogCitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCB6aXBpbXBvcnQKQEAgLTgsNiArOSw3IEBACiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcHlfY29tcGlsZQoraW1wb3J0IHN1YnByb2Nlc3MKIAogaW1wb3J0IHRleHR3cmFwCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKQEAgLTQxLDExICs0MywyOCBAQAogX2xvYWRlciA9IF9fbG9hZGVyX18gaWYgX19sb2FkZXJfXyBpcyBCdWlsdGluSW1wb3J0ZXIgZWxzZSB0eXBlKF9fbG9hZGVyX18pCiBwcmludCgnX19sb2FkZXJfXz09JWEnICUgX2xvYWRlcikKIHByaW50KCdfX2ZpbGVfXz09JWEnICUgX19maWxlX18pCi1hc3NlcnRFcXVhbChfX2NhY2hlZF9fLCBOb25lKQorcHJpbnQoJ19fY2FjaGVkX189PSVhJyAlIF9fY2FjaGVkX18pCiBwcmludCgnX19wYWNrYWdlX189PSVyJyAlIF9fcGFja2FnZV9fKQorIyBDaGVjayBQRVAgNDUxIGRldGFpbHMKK2ltcG9ydCBvcy5wYXRoCitpZiBfX3BhY2thZ2VfXyBpcyBub3QgTm9uZToKKyAgICBwcmludCgnX19tYWluX18gd2FzIGxvY2F0ZWQgdGhyb3VnaCB0aGUgaW1wb3J0IHN5c3RlbScpCisgICAgYXNzZXJ0SWRlbnRpY2FsKF9fc3BlY19fLmxvYWRlciwgX19sb2FkZXJfXykKKyAgICBleHBlY3RlZF9zcGVjX25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KG9zLnBhdGguYmFzZW5hbWUoX19maWxlX18pKVswXQorICAgIGlmIF9fcGFja2FnZV9fOgorICAgICAgICBleHBlY3RlZF9zcGVjX25hbWUgPSBfX3BhY2thZ2VfXyArICIuIiArIGV4cGVjdGVkX3NwZWNfbmFtZQorICAgIGFzc2VydEVxdWFsKF9fc3BlY19fLm5hbWUsIGV4cGVjdGVkX3NwZWNfbmFtZSkKKyAgICBhc3NlcnRFcXVhbChfX3NwZWNfXy5wYXJlbnQsIF9fcGFja2FnZV9fKQorICAgIGFzc2VydElkZW50aWNhbChfX3NwZWNfXy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICBhc3NlcnRFcXVhbChfX3NwZWNfXy5vcmlnaW4sIF9fZmlsZV9fKQorICAgIGlmIF9fc3BlY19fLmNhY2hlZCBpcyBub3QgTm9uZToKKyAgICAgICAgYXNzZXJ0RXF1YWwoX19zcGVjX18uY2FjaGVkLCBfX2NhY2hlZF9fKQogIyBDaGVjayB0aGUgc3lzIG1vZHVsZQogaW1wb3J0IHN5cwogYXNzZXJ0SWRlbnRpY2FsKGdsb2JhbHMoKSwgc3lzLm1vZHVsZXNbX19uYW1lX19dLl9fZGljdF9fKQoraWYgX19zcGVjX18gaXMgbm90IE5vbmU6CisgICAgIyBYWFg6IFdlJ3JlIG5vdCBjdXJyZW50bHkgbWFraW5nIF9fbWFpbl9fIGF2YWlsYWJsZSB1bmRlciBpdHMgcmVhbCBuYW1lCisgICAgcGFzcyAjIGFzc2VydElkZW50aWNhbChnbG9iYWxzKCksIHN5cy5tb2R1bGVzW19fc3BlY19fLm5hbWVdLl9fZGljdF9fKQogZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X2NtZF9saW5lX3NjcmlwdAogZXhhbXBsZV9hcmdzX2xpc3QgPSB0ZXN0X2NtZF9saW5lX3NjcmlwdC5leGFtcGxlX2FyZ3MKIGFzc2VydEVxdWFsKHN5cy5hcmd2WzE6XSwgZXhhbXBsZV9hcmdzX2xpc3QpCkBAIC05NSw3ICsxMTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9sb2FkZXIpOgogICAgICAgICBpZiB2ZXJib3NlID4gMToKICAgICAgICAgICAgIHByaW50KCJPdXRwdXQgZnJvbSB0ZXN0IHNjcmlwdCAlcjoiICUgc2NyaXB0X25hbWUpCi0gICAgICAgICAgICBwcmludChkYXRhKQorICAgICAgICAgICAgcHJpbnQocmVwcihkYXRhKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0X2NvZGUsIDApCiAgICAgICAgIHByaW50ZWRfbG9hZGVyID0gJ19fbG9hZGVyX189PSVhJyAlIGV4cGVjdGVkX2xvYWRlcgogICAgICAgICBwcmludGVkX2ZpbGUgPSAnX19maWxlX189PSVhJyAlIGV4cGVjdGVkX2ZpbGUKQEAgLTEyMyw3ICsxNDIsNyBAQAogICAgICAgICBpZiBub3QgX19kZWJ1Z19fOgogICAgICAgICAgICAgY21kX2xpbmVfc3dpdGNoZXMgKz0gKCctJyArICdPJyAqIHN5cy5mbGFncy5vcHRpbWl6ZSwpCiAgICAgICAgIHJ1bl9hcmdzID0gY21kX2xpbmVfc3dpdGNoZXMgKyAoc2NyaXB0X25hbWUsKSArIHR1cGxlKGV4YW1wbGVfYXJncykKLSAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygqcnVuX2FyZ3MpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKnJ1bl9hcmdzLCBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQgKyBlcnIsIGV4cGVjdGVkX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgZXhwZWN0ZWRfcGF0aDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9wYWNrYWdlLCBleHBlY3RlZF9sb2FkZXIpCkBAIC0xMzQsNyArMTUzLDcgQEAKICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCpydW5fYXJncykKICAgICAgICAgaWYgdmVyYm9zZSA+IDE6CiAgICAgICAgICAgICBwcmludCgnT3V0cHV0IGZyb20gdGVzdCBzY3JpcHQgJXI6JyAlIHNjcmlwdF9uYW1lKQotICAgICAgICAgICAgcHJpbnQoZXJyKQorICAgICAgICAgICAgcHJpbnQocmVwcihlcnIpKQogICAgICAgICAgICAgcHJpbnQoJ0V4cGVjdGVkIG91dHB1dDogJXInICUgZXhwZWN0ZWRfbXNnKQogICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkX21zZy5lbmNvZGUoJ3V0Zi04JyksIGVycikKIApAQCAtMTU2LDYgKzE3NSw1MyBAQAogICAgICAgICBleHBlY3RlZCA9IHJlcHIoaW1wb3J0bGliLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIpLmVuY29kZSgidXRmLTgiKQogICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLCBvdXQpCiAKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiBpbnRlcmFjdGl2ZV9weXRob24oc2VsZiwgc2VwYXJhdGVfc3RkZXJyPUZhbHNlKToKKyAgICAgICAgaWYgc2VwYXJhdGVfc3RkZXJyOgorICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbignLWknLCBidWZzaXplPTEsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICBzdGRlcnIgPSBwLnN0ZGVycgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcCA9IHNwYXduX3B5dGhvbignLWknLCBidWZzaXplPTEsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIHN0ZGVyciA9IHAuc3Rkb3V0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRHJhaW4gc3RkZXJyIHVudGlsIHByb21wdAorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBkYXRhID0gc3RkZXJyLnJlYWQoNCkKKyAgICAgICAgICAgICAgICBpZiBkYXRhID09IGIiPj4+ICI6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc3RkZXJyLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHlpZWxkIHAKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGtpbGxfcHl0aG9uKHApCisgICAgICAgICAgICBzdGRlcnIuY2xvc2UoKQorCisgICAgZGVmIGNoZWNrX3JlcGxfc3Rkb3V0X2ZsdXNoKHNlbGYsIHNlcGFyYXRlX3N0ZGVycj1GYWxzZSk6CisgICAgICAgIHdpdGggc2VsZi5pbnRlcmFjdGl2ZV9weXRob24oc2VwYXJhdGVfc3RkZXJyKSBhcyBwOgorICAgICAgICAgICAgcC5zdGRpbi53cml0ZShiInByaW50KCdmb28nKVxuIikKKyAgICAgICAgICAgIHAuc3RkaW4uZmx1c2goKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ2ZvbycsIHAuc3Rkb3V0LnJlYWRsaW5lKCkuc3RyaXAoKSkKKworICAgIGRlZiBjaGVja19yZXBsX3N0ZGVycl9mbHVzaChzZWxmLCBzZXBhcmF0ZV9zdGRlcnI9RmFsc2UpOgorICAgICAgICB3aXRoIHNlbGYuaW50ZXJhY3RpdmVfcHl0aG9uKHNlcGFyYXRlX3N0ZGVycikgYXMgcDoKKyAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUoYiIxLzBcbiIpCisgICAgICAgICAgICBwLnN0ZGluLmZsdXNoKCkKKyAgICAgICAgICAgIHN0ZGVyciA9IHAuc3RkZXJyIGlmIHNlcGFyYXRlX3N0ZGVyciBlbHNlIHAuc3Rkb3V0CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInVHJhY2ViYWNrICcsIHN0ZGVyci5yZWFkbGluZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0ZpbGUgIjxzdGRpbj4iJywgc3RkZXJyLnJlYWRsaW5lKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInWmVyb0RpdmlzaW9uRXJyb3InLCBzdGRlcnIucmVhZGxpbmUoKSkKKworICAgIGRlZiB0ZXN0X3JlcGxfc3Rkb3V0X2ZsdXNoKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlcGxfc3Rkb3V0X2ZsdXNoKCkKKworICAgIGRlZiB0ZXN0X3JlcGxfc3Rkb3V0X2ZsdXNoX3NlcGFyYXRlX3N0ZGVycihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXBsX3N0ZG91dF9mbHVzaChUcnVlKQorCisgICAgZGVmIHRlc3RfcmVwbF9zdGRlcnJfZmx1c2goc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVwbF9zdGRlcnJfZmx1c2goKQorCisgICAgZGVmIHRlc3RfcmVwbF9zdGRlcnJfZmx1c2hfc2VwYXJhdGVfc3RkZXJyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3JlcGxfc3RkZXJyX2ZsdXNoKFRydWUpCisKICAgICBkZWYgdGVzdF9iYXNpY19zY3JpcHQoc2VsZik6CiAgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0JykKQEAgLTI5NCw5ICszNjAsOSBAQAogICAgICAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKICAgICAgICAgICAgICAgICBtYWtlX3BrZyhwa2dfZGlyLCAiaW1wb3J0IHN5czsgcHJpbnQoJ2luaXRfYXJndjA9PSVyJyAlIHN5cy5hcmd2WzBdKSIpCiAgICAgICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChwa2dfZGlyLCAnc2NyaXB0JykKLSAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICd0ZXN0X3BrZy5zY3JpcHQnLCAqZXhhbXBsZV9hcmdzKQorICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ3Rlc3RfcGtnLnNjcmlwdCcsICpleGFtcGxlX2FyZ3MsIF9faXNvbGF0ZWQ9RmFsc2UpCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihvdXQpKQogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gImluaXRfYXJndjA9PSVyIiAlICctbScKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGV4cGVjdGVkLmVuY29kZSgndXRmLTgnKSwgb3V0KQogICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX291dHB1dChzY3JpcHRfbmFtZSwgcmMsIG91dCwKQEAgLTMxMSw5ICszNzcsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oIi1jIiwgInciKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKICAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLAotICAgICAgICAgICAgICAgICAgICAgICAgJ2ltcG9ydCBzeXM7IHByaW50KCJzeXMucGF0aFswXT09JXIiICUgc3lzLnBhdGhbMF0pJykKKyAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBwcmludCgic3lzLnBhdGhbMF09PSVyIiAlIHN5cy5wYXRoWzBdKScsCisgICAgICAgICAgICAgICAgICAgICAgICBfX2lzb2xhdGVkPUZhbHNlKQogICAgICAgICAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KHJlcHIob3V0KSkKICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAic3lzLnBhdGhbMF09PSVyIiAlICcnCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQuZW5jb2RlKCd1dGYtOCcpLCBvdXQpCiAKQEAgLTMyNSw3ICszOTIsOCBAQAogICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QocGF0aD1zY3JpcHRfZGlyKToKICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oIi1tIiwgInciKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBmLndyaXRlKCJkYXRhIikKLSAgICAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAnb3RoZXInLCAqZXhhbXBsZV9hcmdzKQorICAgICAgICAgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdvdGhlcicsICpleGFtcGxlX2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY2hlY2tfb3V0cHV0KHNjcmlwdF9uYW1lLCByYywgb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgc2NyaXB0X25hbWUsICcnLCAnJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKQpAQCAtMzQyLDcgKzQxMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzogcmFpc2UgVmFsdWVFcnJvciIpCiAgICAgICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctbScsICd0ZXN0X3BrZy5vdGhlcicsICpleGFtcGxlX2FyZ3MpCiAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50KG91dCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihvdXQpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCiAKICAgICBkZWYgdGVzdF9wZXBfNDA5X3ZlcmJpYWdlKHNlbGYpOgpAQCAtMzg2LDYgKzQ1NCwyNCBAQAogICAgICAgICAgICAgJ3N0ZG91dD0lciBzdGRlcnI9JXInICUgKHN0ZG91dCwgc3RkZXJyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCByYykKIAorICAgIGRlZiB0ZXN0X2lzc3VlMjA1MDBfZXhpdF93aXRoX2V4Y2VwdGlvbl92YWx1ZShzZWxmKToKKyAgICAgICAgc2NyaXB0ID0gdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIGVycm9yID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ3NvbWUgdGV4dCcpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvciBhcyBlcnI6CisgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnIKKworICAgICAgICAgICAgaWYgZXJyb3I6CisgICAgICAgICAgICAgICAgc3lzLmV4aXQoZXJyb3IpCisgICAgICAgICAgICAiIiIpCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0Jywgc2NyaXB0KQorICAgICAgICAgICAgZXhpdGNvZGUsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgdGV4dCA9IHN0ZGVyci5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgInNvbWUgdGV4dCIpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KENtZExpbmVUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZV9tb2R1bGUucHkKaW5kZXggYWRlZjE3MC4uN2E4MGE4MCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlX21vZHVsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVfbW9kdWxlLnB5CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIHNlbGYuaW5mdW5jLnNpZGVfZWZmZWN0ID0gWyJ1bmRlZmluZWQiLCBFT0ZFcnJvcignRmluaXNoZWQnKV0KICAgICAgICAgc2VsZi5jb25zb2xlLmludGVyYWN0KCkKICAgICAgICAgZm9yIGNhbGwgaW4gc2VsZi5zdGRlcnIubWV0aG9kX2NhbGxzOgotICAgICAgICAgICAgaWYgJ05hbWVFcnJvcjonIGluICcnLmpvaW4oY2FsbFsxXSk6CisgICAgICAgICAgICBpZiAnTmFtZUVycm9yJyBpbiAnJy5qb2luKGNhbGxbMV0pOgogICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiTm8gc3ludGF4IGVycm9yIGZyb20gY29uc29sZSIpCkBAIC02NCw2ICs2NCwyMCBAQAogICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaG9vay5jYWxsZWQpCiAKKyAgICBkZWYgdGVzdF9iYW5uZXIoc2VsZik6CisgICAgICAgICMgd2l0aCBiYW5uZXIKKyAgICAgICAgc2VsZi5pbmZ1bmMuc2lkZV9lZmZlY3QgPSBFT0ZFcnJvcignRmluaXNoZWQnKQorICAgICAgICBzZWxmLmNvbnNvbGUuaW50ZXJhY3QoYmFubmVyPSdGb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLnN0ZGVyci5tZXRob2RfY2FsbHMpLCAyKQorICAgICAgICBiYW5uZXJfY2FsbCA9IHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxsc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhbm5lcl9jYWxsLCBbJ3dyaXRlJywgKCdGb29cbicsKSwge31dKQorCisgICAgICAgICMgbm8gYmFubmVyCisgICAgICAgIHNlbGYuc3RkZXJyLnJlc2V0X21vY2soKQorICAgICAgICBzZWxmLmluZnVuYy5zaWRlX2VmZmVjdCA9IEVPRkVycm9yKCdGaW5pc2hlZCcpCisgICAgICAgIHNlbGYuY29uc29sZS5pbnRlcmFjdChiYW5uZXI9JycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYuc3RkZXJyLm1ldGhvZF9jYWxscyksIDEpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RJbnRlcmFjdGl2ZUNvbnNvbGUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY2NhbGxiYWNrcy5weQppbmRleCBmZDg4NTA1Li4xMzI3ZjExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjY2FsbGJhY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNjYWxsYmFja3MucHkKQEAgLTYsMTQgKzYsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2FybmluZ3MKIAotdHJ5OgotICAgIGltcG9ydCBjdHlwZXMKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBjdHlwZXMgPSBOb25lCi0gICAgU0laRU9GX1dDSEFSX1QgPSAtMQotZWxzZToKLSAgICBTSVpFT0ZfV0NIQVJfVCA9IGN0eXBlcy5zaXplb2YoY3R5cGVzLmNfd2NoYXIpCi0KIGNsYXNzIFBvc1JldHVybjoKICAgICAjIHRoaXMgY2FuIGJlIHVzZWQgZm9yIGNvbmZpZ3VyYWJsZSBjYWxsYmFja3MKIApAQCAtMjEyLDE0ICsyMDQsMTIgQEAKICAgICAgICAgICAgICAgICBiIlx4MDBceDAwXHgwMFx4MDBceDAwIi5kZWNvZGUsCiAgICAgICAgICAgICAgICAgInVuaWNvZGUtaW50ZXJuYWwiLAogICAgICAgICAgICAgKQotICAgICAgICBpZiBTSVpFT0ZfV0NIQVJfVCA9PSA0OgotICAgICAgICAgICAgZGVmIGhhbmRsZXJfdW5pY29kZWludGVybmFsKGV4Yyk6Ci0gICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRGVjb2RlRXJyb3IpOgotICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoImRvbid0IGtub3cgaG93IHRvIGhhbmRsZSAlciIgJSBleGMpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgiXHgwMSIsIDEpCisgICAgICAgICAgICBpZiBsZW4oJ1wwJy5lbmNvZGUoJ3VuaWNvZGUtaW50ZXJuYWwnKSkgPT0gNDoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcl91bmljb2RlaW50ZXJuYWwoZXhjKToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZXhjLCBVbmljb2RlRGVjb2RlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgJXIiICUgZXhjKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJceDAxIiwgMSkKIAotICAgICAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCd1bmljb2RlX2ludGVybmFsIGNvZGVjIGhhcyBiZWVuICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVwcmVjYXRlZCcsIERlcHJlY2F0aW9uV2FybmluZykpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICAgICAgICAgIGIiXHgwMFx4MDBceDAwXHgwMFx4MDAiLmRlY29kZSgidW5pY29kZS1pbnRlcm5hbCIsICJpZ25vcmUiKSwKICAgICAgICAgICAgICAgICAgICAgIlx1MDAwMCIKQEAgLTM2NCwxMiArMzU0LDExIEBACiAgICAgICAgICAgICBbImFzY2lpIiwgIlx1ZmZmZngiLCAwLCAxLCAib3VjaCJdLAogICAgICAgICAgICAgIidhc2NpaScgY29kZWMgY2FuJ3QgZW5jb2RlIGNoYXJhY3RlciAnXFx1ZmZmZicgaW4gcG9zaXRpb24gMDogb3VjaCIKICAgICAgICAgKQotICAgICAgICBpZiBTSVpFT0ZfV0NIQVJfVCA9PSA0OgotICAgICAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAotICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKLSAgICAgICAgICAgICAgICBbImFzY2lpIiwgIlxVMDAwMTAwMDB4IiwgMCwgMSwgIm91Y2giXSwKLSAgICAgICAgICAgICAgICAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVyICdcXFUwMDAxMDAwMCcgaW4gcG9zaXRpb24gMDogb3VjaCIKLSAgICAgICAgICAgICkKKyAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAorICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgWyJhc2NpaSIsICJcVTAwMDEwMDAweCIsIDAsIDEsICJvdWNoIl0sCisgICAgICAgICAgICAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBlbmNvZGUgY2hhcmFjdGVyICdcXFUwMDAxMDAwMCcgaW4gcG9zaXRpb24gMDogb3VjaCIKKyAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZWRlY29kZWVycm9yKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2V4Y2VwdGlvbm9iamVjdGFyZ3MoCkBAIC0zOTksMTIgKzM4OCwxMSBAQAogICAgICAgICAgICAgWyJnXHVmZmZmcmsiLCAxLCAyLCAib3VjaCJdLAogICAgICAgICAgICAgImNhbid0IHRyYW5zbGF0ZSBjaGFyYWN0ZXIgJ1xcdWZmZmYnIGluIHBvc2l0aW9uIDE6IG91Y2giCiAgICAgICAgICkKLSAgICAgICAgaWYgU0laRU9GX1dDSEFSX1QgPT0gNDoKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKLSAgICAgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IsCi0gICAgICAgICAgICAgICAgWyJnXFUwMDAxMDAwMHJrIiwgMSwgMiwgIm91Y2giXSwKLSAgICAgICAgICAgICAgICAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlciAnXFxVMDAwMTAwMDAnIGluIHBvc2l0aW9uIDE6IG91Y2giCi0gICAgICAgICAgICApCisgICAgICAgIHNlbGYuY2hlY2tfZXhjZXB0aW9ub2JqZWN0YXJncygKKyAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvciwKKyAgICAgICAgICAgIFsiZ1xVMDAwMTAwMDByayIsIDEsIDIsICJvdWNoIl0sCisgICAgICAgICAgICAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlciAnXFxVMDAwMTAwMDAnIGluIHBvc2l0aW9uIDE6IG91Y2giCisgICAgICAgICkKICAgICAgICAgc2VsZi5jaGVja19leGNlcHRpb25vYmplY3RhcmdzKAogICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yLAogICAgICAgICAgICAgWyJnXHhmY3JrIiwgMSwgMywgIm91Y2giXSwKQEAgLTQzMSw2ICs0MTksMTYgQEAKICAgICAgICAgICAgIGNvZGVjcy5zdHJpY3RfZXJyb3JzLAogICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJcdTMwNDIiLCAwLCAxLCAib3VjaCIpCiAgICAgICAgICkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICBjb2RlY3Muc3RyaWN0X2Vycm9ycywKKyAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvcigiYXNjaWkiLCBieXRlYXJyYXkoYiJceGZmIiksIDAsIDEsICJvdWNoIikKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvciwKKyAgICAgICAgICAgIGNvZGVjcy5zdHJpY3RfZXJyb3JzLAorICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKCJcdTMwNDIiLCAwLCAxLCAib3VjaCIpCisgICAgICAgICkKIAogICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RpZ25vcmVleGNlcHRpb25zKHNlbGYpOgogICAgICAgICAjICJpZ25vcmUiIGNvbXBsYWlucyBhYm91dCBhIG5vbi1leGNlcHRpb24gcGFzc2VkIGluCkBAIC00NDgsMTggKzQ0NiwxOCBAQAogICAgICAgICAjIElmIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbiBpcyBwYXNzZWQgaW4sICJpZ25vcmUiIHJldHVybnMgYW4gZW1wdHkgcmVwbGFjZW1lbnQKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5pZ25vcmVfZXJyb3JzKAotICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXHUzMDQyIiwgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAoIiIsIDEpCisgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJhXHUzMDQyYiIsIDEsIDIsICJvdWNoIikpLAorICAgICAgICAgICAgKCIiLCAyKQogICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgYnl0ZWFycmF5KGIiXHhmZiIpLCAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICgiIiwgMSkKKyAgICAgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoImFzY2lpIiwgYnl0ZWFycmF5KGIiYVx4ZmZiIiksIDEsIDIsICJvdWNoIikpLAorICAgICAgICAgICAgKCIiLCAyKQogICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MuaWdub3JlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IoIlx1MzA0MiIsIDAsIDEsICJvdWNoIikpLAotICAgICAgICAgICAgKCIiLCAxKQorICAgICAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvcigiYVx1MzA0MmIiLCAxLCAyLCAib3VjaCIpKSwKKyAgICAgICAgICAgICgiIiwgMikKICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfYmFkYW5kZ29vZHJlcGxhY2VleGNlcHRpb25zKHNlbGYpOgpAQCAtNDg4LDE4ICs0ODYsMTggQEAKICAgICAgICAgIyBXaXRoIHRoZSBjb3JyZWN0IGV4Y2VwdGlvbiwgInJlcGxhY2UiIHJldHVybnMgYW4gIj8iIG9yICJcdWZmZmQiIHJlcGxhY2VtZW50CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MucmVwbGFjZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICgiPyIsIDEpCisgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJhXHUzMDQyYiIsIDEsIDIsICJvdWNoIikpLAorICAgICAgICAgICAgKCI/IiwgMikKICAgICAgICAgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgY29kZWNzLnJlcGxhY2VfZXJyb3JzKAotICAgICAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvcigiYXNjaWkiLCBieXRlYXJyYXkoYiJceGZmIiksIDAsIDEsICJvdWNoIikpLAotICAgICAgICAgICAgKCJcdWZmZmQiLCAxKQorICAgICAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvcigiYXNjaWkiLCBieXRlYXJyYXkoYiJhXHhmZmIiKSwgMSwgMiwgIm91Y2giKSksCisgICAgICAgICAgICAoIlx1ZmZmZCIsIDIpCiAgICAgICAgICkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIGNvZGVjcy5yZXBsYWNlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IoIlx1MzA0MiIsIDAsIDEsICJvdWNoIikpLAotICAgICAgICAgICAgKCJcdWZmZmQiLCAxKQorICAgICAgICAgICAgICAgIFVuaWNvZGVUcmFuc2xhdGVFcnJvcigiYVx1MzA0MmIiLCAxLCAyLCAib3VjaCIpKSwKKyAgICAgICAgICAgICgiXHVmZmZkIiwgMikKICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfYmFkYW5kZ29vZHhtbGNoYXJyZWZyZXBsYWNlZXhjZXB0aW9ucyhzZWxmKToKQEAgLTUyNywxMyArNTI1LDE2IEBACiAgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IoIlx1MzA0MiIsIDAsIDEsICJvdWNoIikKICAgICAgICAgKQogICAgICAgICAjIFVzZSB0aGUgY29ycmVjdCBleGNlcHRpb24KLSAgICAgICAgY3MgPSAoMCwgMSwgOSwgMTAsIDk5LCAxMDAsIDk5OSwgMTAwMCwgOTk5OSwgMTAwMDAsIDB4MzA0MikKKyAgICAgICAgY3MgPSAoMCwgMSwgOSwgMTAsIDk5LCAxMDAsIDk5OSwgMTAwMCwgOTk5OSwgMTAwMDAsIDk5OTk5LCAxMDAwMDAsCisgICAgICAgICAgICAgIDk5OTk5OSwgMTAwMDAwMCkKKyAgICAgICAgY3MgKz0gKDB4ZDgwMCwgMHhkZmZmKQogICAgICAgICBzID0gIiIuam9pbihjaHIoYykgZm9yIGMgaW4gY3MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzKAotICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCBzLCAwLCBsZW4ocyksICJvdWNoIikKKyAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgImEiICsgcyArICJiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSArIGxlbihzKSwgIm91Y2giKQogICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICgiIi5qb2luKCImIyVkOyIgJSBvcmQoYykgZm9yIGMgaW4gcyksIGxlbihzKSkKKyAgICAgICAgICAgICgiIi5qb2luKCImIyVkOyIgJSBjIGZvciBjIGluIGNzKSwgMSArIGxlbihzKSkKICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfYmFkYW5kZ29vZGJhY2tzbGFzaHJlcGxhY2VleGNlcHRpb25zKHNlbGYpOgpAQCAtNTYxLDU1ICs1NjIsMTQxIEBACiAgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IoIlx1MzA0MiIsIDAsIDEsICJvdWNoIikKICAgICAgICAgKQogICAgICAgICAjIFVzZSB0aGUgY29ycmVjdCBleGNlcHRpb24KKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoIlx1MzA0MiIsICJcXHUzMDQyIiksCisgICAgICAgICAgICAoIlxuIiwgIlxceDBhIiksCisgICAgICAgICAgICAoImEiLCAiXFx4NjEiKSwKKyAgICAgICAgICAgICgiXHgwMCIsICJcXHgwMCIpLAorICAgICAgICAgICAgKCJceGZmIiwgIlxceGZmIiksCisgICAgICAgICAgICAoIlx1MDEwMCIsICJcXHUwMTAwIiksCisgICAgICAgICAgICAoIlx1ZmZmZiIsICJcXHVmZmZmIiksCisgICAgICAgICAgICAoIlxVMDAwMTAwMDAiLCAiXFxVMDAwMTAwMDAiKSwKKyAgICAgICAgICAgICgiXFUwMDEwZmZmZiIsICJcXFUwMDEwZmZmZiIpLAorICAgICAgICAgICAgIyBMb25lIHN1cnJvZ2F0ZXMKKyAgICAgICAgICAgICgiXHVkODAwIiwgIlxcdWQ4MDAiKSwKKyAgICAgICAgICAgICgiXHVkZmZmIiwgIlxcdWRmZmYiKSwKKyAgICAgICAgICAgICgiXHVkODAwXHVkZmZmIiwgIlxcdWQ4MDBcXHVkZmZmIiksCisgICAgICAgIF0KKyAgICAgICAgZm9yIHMsIHIgaW4gdGVzdHM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdHI9cyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKAorICAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJhIiArIHMgKyAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSArIGxlbihzKSwgIm91Y2giKSksCisgICAgICAgICAgICAgICAgICAgIChyLCAxICsgbGVuKHMpKQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2JhZGFuZGdvb2RzdXJyb2dhdGVlc2NhcGVleGNlcHRpb25zKHNlbGYpOgorICAgICAgICBzdXJyb2dhdGVlc2NhcGVfZXJyb3JzID0gY29kZWNzLmxvb2t1cF9lcnJvcignc3Vycm9nYXRlZXNjYXBlJykKKyAgICAgICAgIyAic3Vycm9nYXRlZXNjYXBlIiBjb21wbGFpbnMgYWJvdXQgYSBub24tZXhjZXB0aW9uIHBhc3NlZCBpbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICBzdXJyb2dhdGVlc2NhcGVfZXJyb3JzLAorICAgICAgICAgICA0MgorICAgICAgICApCisgICAgICAgICMgInN1cnJvZ2F0ZWVzY2FwZSIgY29tcGxhaW5zIGFib3V0IHRoZSB3cm9uZyBleGNlcHRpb24gdHlwZXMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgIFR5cGVFcnJvciwKKyAgICAgICAgICAgc3Vycm9nYXRlZXNjYXBlX2Vycm9ycywKKyAgICAgICAgICAgVW5pY29kZUVycm9yKCJvdWNoIikKKyAgICAgICAgKQorICAgICAgICAjICJzdXJyb2dhdGVlc2NhcGUiIGNhbiBub3QgYmUgdXNlZCBmb3IgdHJhbnNsYXRpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBUeXBlRXJyb3IsCisgICAgICAgICAgICBzdXJyb2dhdGVlc2NhcGVfZXJyb3JzLAorICAgICAgICAgICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yKCJcdWRjODAiLCAwLCAxLCAib3VjaCIpCisgICAgICAgICkKKyAgICAgICAgIyBVc2UgdGhlIGNvcnJlY3QgZXhjZXB0aW9uCisgICAgICAgIGZvciBzIGluICgiYSIsICJcdWRjN2YiLCAiXHVkZDAwIik6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdHI9cyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlZXNjYXBlX2Vycm9ycywKKyAgICAgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsIHMsIDAsIDEsICJvdWNoIikKKyAgICAgICAgICAgICAgICApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJcdTMwNDIiLCAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICgiXFx1MzA0MiIsIDEpCisgICAgICAgICAgICBzdXJyb2dhdGVlc2NhcGVfZXJyb3JzKAorICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiYVx1ZGM4MGIiLCAxLCAyLCAib3VjaCIpKSwKKyAgICAgICAgICAgIChiIlx4ODAiLCAyKQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVW5pY29kZURlY29kZUVycm9yLAorICAgICAgICAgICAgc3Vycm9nYXRlZXNjYXBlX2Vycm9ycywKKyAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvcigiYXNjaWkiLCBieXRlYXJyYXkoYiJhIiksIDAsIDEsICJvdWNoIikKICAgICAgICAgKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKAotICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXHgwMCIsIDAsIDEsICJvdWNoIikpLAotICAgICAgICAgICAgKCJcXHgwMCIsIDEpCisgICAgICAgICAgICBzdXJyb2dhdGVlc2NhcGVfZXJyb3JzKAorICAgICAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvcigiYXNjaWkiLCBieXRlYXJyYXkoYiJhXHg4MGIiKSwgMSwgMiwgIm91Y2giKSksCisgICAgICAgICAgICAoIlx1ZGM4MCIsIDIpCiAgICAgICAgICkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycygKLSAgICAgICAgICAgICAgICBVbmljb2RlRW5jb2RlRXJyb3IoImFzY2lpIiwgIlx4ZmYiLCAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICgiXFx4ZmYiLCAxKQorCisgICAgZGVmIHRlc3RfYmFkYW5kZ29vZHN1cnJvZ2F0ZXBhc3NleGNlcHRpb25zKHNlbGYpOgorICAgICAgICBzdXJyb2dhdGVwYXNzX2Vycm9ycyA9IGNvZGVjcy5sb29rdXBfZXJyb3IoJ3N1cnJvZ2F0ZXBhc3MnKQorICAgICAgICAjICJzdXJyb2dhdGVwYXNzIiBjb21wbGFpbnMgYWJvdXQgYSBub24tZXhjZXB0aW9uIHBhc3NlZCBpbgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICBzdXJyb2dhdGVwYXNzX2Vycm9ycywKKyAgICAgICAgICAgNDIKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKAotICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXHUwMTAwIiwgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAoIlxcdTAxMDAiLCAxKQorICAgICAgICAjICJzdXJyb2dhdGVwYXNzIiBjb21wbGFpbnMgYWJvdXQgdGhlIHdyb25nIGV4Y2VwdGlvbiB0eXBlcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICBzdXJyb2dhdGVwYXNzX2Vycm9ycywKKyAgICAgICAgICAgVW5pY29kZUVycm9yKCJvdWNoIikKICAgICAgICAgKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgY29kZWNzLmJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzKAotICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXHVmZmZmIiwgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAoIlxcdWZmZmYiLCAxKQorICAgICAgICAjICJzdXJyb2dhdGVwYXNzIiBjYW4gbm90IGJlIHVzZWQgZm9yIHRyYW5zbGF0aW5nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVHlwZUVycm9yLAorICAgICAgICAgICAgc3Vycm9nYXRlcGFzc19lcnJvcnMsCisgICAgICAgICAgICBVbmljb2RlVHJhbnNsYXRlRXJyb3IoIlx1ZDgwMCIsIDAsIDEsICJvdWNoIikKICAgICAgICAgKQotICAgICAgICBpZiBTSVpFT0ZfV0NIQVJfVCA+IDA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycygKLSAgICAgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJcVTAwMDEwMDAwIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDEsICJvdWNoIikpLAotICAgICAgICAgICAgICAgICgiXFxVMDAwMTAwMDAiLCAxKQotICAgICAgICAgICAgKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXFUwMDEwZmZmZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICAgICAoIlxcVTAwMTBmZmZmIiwgMSkKLSAgICAgICAgICAgICkKLSAgICAgICAgICAgICMgTG9uZSBzdXJyb2dhdGVzIChyZWdhcmRsZXNzIG9mIHVuaWNvZGUgd2lkdGgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAotICAgICAgICAgICAgICAgIGNvZGVjcy5iYWNrc2xhc2hyZXBsYWNlX2Vycm9ycygKLSAgICAgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKCJhc2NpaSIsICJcdWQ4MDAiLCAwLCAxLCAib3VjaCIpKSwKLSAgICAgICAgICAgICAgICAoIlxcdWQ4MDAiLCAxKQotICAgICAgICAgICAgKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMoCi0gICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcigiYXNjaWkiLCAiXHVkZmZmIiwgMCwgMSwgIm91Y2giKSksCi0gICAgICAgICAgICAgICAgKCJcXHVkZmZmIiwgMSkKLSAgICAgICAgICAgICkKKyAgICAgICAgIyBVc2UgdGhlIGNvcnJlY3QgZXhjZXB0aW9uCisgICAgICAgIGZvciBlbmMgaW4gKCJ1dGYtOCIsICJ1dGYtMTZsZSIsICJ1dGYtMTZiZSIsICJ1dGYtMzJsZSIsICJ1dGYtMzJiZSIpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yLAorICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGVwYXNzX2Vycm9ycywKKyAgICAgICAgICAgICAgICAgICAgVW5pY29kZUVuY29kZUVycm9yKGVuYywgImEiLCAwLCAxLCAib3VjaCIpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZXBhc3NfZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICBVbmljb2RlRGVjb2RlRXJyb3IoZW5jLCAiYSIuZW5jb2RlKGVuYyksIDAsIDEsICJvdWNoIikKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHRlc3RzID0gWworICAgICAgICAgICAgKCJhc2NpaSIsICJcdWQ4MDAiLCBiJ1x4ZWRceGEwXHg4MCcsIDMpLAorICAgICAgICAgICAgKCJ1dGYtOCIsICJcdWQ4MDAiLCBiJ1x4ZWRceGEwXHg4MCcsIDMpLAorICAgICAgICAgICAgKCJ1dGYtMTZsZSIsICJcdWQ4MDAiLCBiJ1x4MDBceGQ4JywgMiksCisgICAgICAgICAgICAoInV0Zi0xNmJlIiwgIlx1ZDgwMCIsIGInXHhkOFx4MDAnLCAyKSwKKyAgICAgICAgICAgICgidXRmLTMybGUiLCAiXHVkODAwIiwgYidceDAwXHhkOFx4MDBceDAwJywgNCksCisgICAgICAgICAgICAoInV0Zi0zMmJlIiwgIlx1ZDgwMCIsIGInXHgwMFx4MDBceGQ4XHgwMCcsIDQpLAorICAgICAgICAgICAgKCJhc2NpaSIsICJcdWRmZmYiLCBiJ1x4ZWRceGJmXHhiZicsIDMpLAorICAgICAgICAgICAgKCJ1dGYtOCIsICJcdWRmZmYiLCBiJ1x4ZWRceGJmXHhiZicsIDMpLAorICAgICAgICAgICAgKCJ1dGYtMTZsZSIsICJcdWRmZmYiLCBiJ1x4ZmZceGRmJywgMiksCisgICAgICAgICAgICAoInV0Zi0xNmJlIiwgIlx1ZGZmZiIsIGInXHhkZlx4ZmYnLCAyKSwKKyAgICAgICAgICAgICgidXRmLTMybGUiLCAiXHVkZmZmIiwgYidceGZmXHhkZlx4MDBceDAwJywgNCksCisgICAgICAgICAgICAoInV0Zi0zMmJlIiwgIlx1ZGZmZiIsIGInXHgwMFx4MDBceGRmXHhmZicsIDQpLAorICAgICAgICAgICAgKCJhc2NpaSIsICJcdWQ4MDBcdWRmZmYiLCBiJ1x4ZWRceGEwXHg4MFx4ZWRceGJmXHhiZicsIDMpLAorICAgICAgICAgICAgKCJ1dGYtOCIsICJcdWQ4MDBcdWRmZmYiLCBiJ1x4ZWRceGEwXHg4MFx4ZWRceGJmXHhiZicsIDMpLAorICAgICAgICAgICAgKCJ1dGYtMTZsZSIsICJcdWQ4MDBcdWRmZmYiLCBiJ1x4MDBceGQ4XHhmZlx4ZGYnLCAyKSwKKyAgICAgICAgICAgICgidXRmLTE2YmUiLCAiXHVkODAwXHVkZmZmIiwgYidceGQ4XHgwMFx4ZGZceGZmJywgMiksCisgICAgICAgICAgICAoInV0Zi0zMmxlIiwgIlx1ZDgwMFx1ZGZmZiIsIGInXHgwMFx4ZDhceDAwXHgwMFx4ZmZceGRmXHgwMFx4MDAnLCA0KSwKKyAgICAgICAgICAgICgidXRmLTMyYmUiLCAiXHVkODAwXHVkZmZmIiwgYidceDAwXHgwMFx4ZDhceDAwXHgwMFx4MDBceGRmXHhmZicsIDQpLAorICAgICAgICBdCisgICAgICAgIGZvciBlbmMsIHMsIGIsIG4gaW4gdGVzdHM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmMsIHN0cj1zLCBieXRlcz1iKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGVwYXNzX2Vycm9ycygKKyAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVFbmNvZGVFcnJvcihlbmMsICJhIiArIHMgKyAiYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSArIGxlbihzKSwgIm91Y2giKSksCisgICAgICAgICAgICAgICAgICAgIChiLCAxICsgbGVuKHMpKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGVwYXNzX2Vycm9ycygKKyAgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGVEZWNvZGVFcnJvcihlbmMsIGJ5dGVhcnJheShiImEiICsgYls6bl0gKyBiImIiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBuLCAib3VjaCIpKSwKKyAgICAgICAgICAgICAgICAgICAgKHNbOjFdLCAxICsgbikKKyAgICAgICAgICAgICAgICApCiAKICAgICBkZWYgdGVzdF9iYWRoYW5kbGVycmVzdWx0cyhzZWxmKToKICAgICAgICAgcmVzdWx0cyA9ICggNDIsICJmb28iLCAoMSwyLDMpLCAoImZvbyIsIDEsIDMpLCAoImZvbyIsIE5vbmUpLCAoImZvbyIsKSwgKCJmb28iLCAxLCAzKSwgKCJmb28iLCBOb25lKSwgKCJmb28iLCkgKQpAQCAtNjg4LDkgKzc3NSw4IEBACiAgICAgICAgICMgZW5oYW5jZSBjb3ZlcmFnZSBvZjoKICAgICAgICAgIyBQeXRob24vY29kZWNzLmM6OlB5Q29kZWNfWE1MQ2hhclJlZlJlcGxhY2VFcnJvcnMoKQogICAgICAgICAjIGFuZCBpbmxpbmUgaW1wbGVtZW50YXRpb25zCi0gICAgICAgIHYgPSAoMSwgNSwgMTAsIDUwLCAxMDAsIDUwMCwgMTAwMCwgNTAwMCwgMTAwMDAsIDUwMDAwKQotICAgICAgICBpZiBTSVpFT0ZfV0NIQVJfVCA9PSA0OgotICAgICAgICAgICAgdiArPSAoMTAwMDAwLCA1MDAwMDAsIDEwMDAwMDApCisgICAgICAgIHYgPSAoMSwgNSwgMTAsIDUwLCAxMDAsIDUwMCwgMTAwMCwgNTAwMCwgMTAwMDAsIDUwMDAwLCAxMDAwMDAsCisgICAgICAgICAgICAgNTAwMDAwLCAxMDAwMDAwKQogICAgICAgICBzID0gIiIuam9pbihbY2hyKHgpIGZvciB4IGluIHZdKQogICAgICAgICBjb2RlY3MucmVnaXN0ZXJfZXJyb3IoInRlc3QueG1sY2hhcnJlZnJlcGxhY2UiLCBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzKQogICAgICAgICBmb3IgZW5jIGluICgiYXNjaWkiLCAiaXNvLTg4NTktMTUiKToKQEAgLTg3NSw4ICs5NjEsMjkgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEuZGVjb2RlKGVuY29kaW5nLCAidGVzdC5yZXBsYWNpbmciKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChDb2RlY0NhbGxiYWNrVGVzdCkKKyAgICBkZWYgdGVzdF9mYWtlX2Vycm9yX2NsYXNzKHNlbGYpOgorICAgICAgICBoYW5kbGVycyA9IFsKKyAgICAgICAgICAgIGNvZGVjcy5zdHJpY3RfZXJyb3JzLAorICAgICAgICAgICAgY29kZWNzLmlnbm9yZV9lcnJvcnMsCisgICAgICAgICAgICBjb2RlY3MucmVwbGFjZV9lcnJvcnMsCisgICAgICAgICAgICBjb2RlY3MuYmFja3NsYXNocmVwbGFjZV9lcnJvcnMsCisgICAgICAgICAgICBjb2RlY3MueG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzLAorICAgICAgICAgICAgY29kZWNzLmxvb2t1cF9lcnJvcignc3Vycm9nYXRlZXNjYXBlJyksCisgICAgICAgICAgICBjb2RlY3MubG9va3VwX2Vycm9yKCdzdXJyb2dhdGVwYXNzJyksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGNscyBpbiBVbmljb2RlRW5jb2RlRXJyb3IsIFVuaWNvZGVEZWNvZGVFcnJvciwgVW5pY29kZVRyYW5zbGF0ZUVycm9yOgorICAgICAgICAgICAgY2xhc3MgRmFrZVVuaWNvZGVFcnJvcihzdHIpOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXyA9IGNscworICAgICAgICAgICAgZm9yIGhhbmRsZXIgaW4gaGFuZGxlcnM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaGFuZGxlcj1oYW5kbGVyLCBlcnJvcl9jbGFzcz1jbHMpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGhhbmRsZXIsIEZha2VVbmljb2RlRXJyb3IoKSkKKyAgICAgICAgICAgIGNsYXNzIEZha2VVbmljb2RlRXJyb3IoRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18gPSBjbHMKKyAgICAgICAgICAgIGZvciBoYW5kbGVyIGluIGhhbmRsZXJzOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGhhbmRsZXI9aGFuZGxlciwgZXJyb3JfY2xhc3M9Y2xzKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBGYWtlVW5pY29kZUVycm9yKSk6CisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyKEZha2VVbmljb2RlRXJyb3IoKSkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19jbi5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5CmluZGV4IDc2NjMyYTIuLmYxYmQzODQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2NuLnB5CkBAIC0xMCwyMyArMTAsMTggQEAKIGNsYXNzIFRlc3RHQjIzMTJNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICdnYjIzMTInCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wZXJreS9pMThuL0VVQy1DTi5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvRVVDLUNOLlRYVCcKIAogY2xhc3MgVGVzdEdCS01hcChtdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gJ2diaycKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvJyBcCi0gICAgICAgICAgICAgICAgICdNSUNTRlQvV0lORE9XUy9DUDkzNi5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvQ1A5MzYuVFhUJwogCiBjbGFzcyBUZXN0R0IxODAzME1hcChtdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnZ2IxODAzMCcKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly9zb3VyY2UuaWN1LXByb2plY3Qub3JnL3JlcG9zL2ljdS9kYXRhLycgXAotICAgICAgICAgICAgICAgICAndHJ1bmsvY2hhcnNldC9kYXRhL3htbC9nYi0xODAzMC0yMDAwLnhtbCcKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cucHl0aG9udGVzdC5uZXQvdW5pY29kZS9nYi0xODAzMC0yMDAwLnhtbCcKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2hrLnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfaGsucHkKaW5kZXggMjc4YWUyZi4uNGMwYzQxNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfaGsucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfaGsucHkKQEAgLTEwLDExICsxMCw3IEBACiBjbGFzcyBUZXN0QmlnNUhLU0NTTWFwKG11bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gJ2JpZzVoa3NjcycKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly9wZW9wbGUuZnJlZWJzZC5vcmcvfnBlcmt5L2kxOG4vQklHNUhLU0NTLTIwMDQuVFhUJwotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvQklHNUhLU0NTLTIwMDQuVFhUJwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsndXJsZmV0Y2gnXQotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19qcC5weSBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2pwLnB5CmluZGV4IGZhOTNmMTIuLjU3NzM4MjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2pwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX2pwLnB5CkBAIC0xMCw4ICsxMCw3IEBACiBjbGFzcyBUZXN0Q1A5MzJNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICdjcDkzMicKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZULycgXAotICAgICAgICAgICAgICAgICAnV0lORE9XUy9DUDkzMi5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvQ1A5MzIuVFhUJwogICAgIHN1cG1hcHMgPSBbCiAgICAgICAgIChiJ1x4ODAnLCAnXHUwMDgwJyksCiAgICAgICAgIChiJ1x4YTAnLCAnXHVmOGYwJyksCkBAIC0yNywxNSArMjYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnZXVjX2pwJwogICAgIG1hcGZpbGVuYW1lID0gJ0VVQy1KUC5UWFQnCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vcGVvcGxlLmZyZWVic2Qub3JnL35wZXJreS9pMThuL0VVQy1KUC5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvRVVDLUpQLlRYVCcKIAogCiBjbGFzcyBUZXN0U0pJU0NPTVBBVE1hcChtdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnc2hpZnRfamlzJwogICAgIG1hcGZpbGVuYW1lID0gJ1NISUZUSklTLlRYVCcKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL09CU09MRVRFJyBcCi0gICAgICAgICAgICAgICAgICcvRUFTVEFTSUEvSklTL1NISUZUSklTLlRYVCcKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cucHl0aG9udGVzdC5uZXQvdW5pY29kZS9TSElGVEpJUy5UWFQnCiAgICAgcGFzc19lbmN0ZXN0ID0gWwogICAgICAgICAoYidceDgxXycsICdcXCcpLAogICAgIF0KQEAgLTQ5LDE4ICs0NywxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICdldWNfamlzeDAyMTMnCiAgICAgbWFwZmlsZW5hbWUgPSAnRVVDLUpJU1gwMjEzLlRYVCcKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly9wZW9wbGUuZnJlZWJzZC5vcmcvfnBlcmt5L2kxOG4vRVVDLUpJU1gwMjEzLlRYVCcKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cucHl0aG9udGVzdC5uZXQvdW5pY29kZS9FVUMtSklTWDAyMTMuVFhUJwogCiAKIGNsYXNzIFRlc3RTSklTWDAyMTNNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnc2hpZnRfamlzeDAyMTMnCiAgICAgbWFwZmlsZW5hbWUgPSAnU0hJRlRfSklTWDAyMTMuVFhUJwotICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3Blb3BsZS5mcmVlYnNkLm9yZy9+cGVya3kvaTE4bi9TSElGVF9KSVNYMDIxMy5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvU0hJRlRfSklTWDAyMTMuVFhUJwogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfa3IucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19rci5weQppbmRleCBlMGJmNzE2Li42Y2I0MWM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19rci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjbWFwc19rci5weQpAQCAtMTAsMTQgKzEwLDEzIEBACiBjbGFzcyBUZXN0Q1A5NDlNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICdjcDk0OScKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZUJyBcCi0gICAgICAgICAgICAgICAgICcvV0lORE9XUy9DUDk0OS5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvQ1A5NDkuVFhUJwogCiAKIGNsYXNzIFRlc3RFVUNLUk1hcChtdWx0aWJ5dGVjb2RlY19zdXBwb3J0LlRlc3RCYXNlX01hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gJ2V1Y19rcicKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly9wZW9wbGUuZnJlZWJzZC5vcmcvfnBlcmt5L2kxOG4vRVVDLUtSLlRYVCcKKyAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cucHl0aG9udGVzdC5uZXQvdW5pY29kZS9FVUMtS1IuVFhUJwogCiAgICAgIyBBNEQ0IEhBTkdVTCBGSUxMRVIgaW5kaWNhdGVzIHRoZSBiZWdpbiBvZiA4LWJ5dGVzIG1ha2UtdXAgc2VxdWVuY2UuCiAgICAgcGFzc19lbmN0ZXN0ID0gWyhiJ1x4YTRceGQ0JywgJ1x1MzE2NCcpXQpAQCAtMjcsOCArMjYsNyBAQAogY2xhc3MgVGVzdEpPSEFCTWFwKG11bHRpYnl0ZWNvZGVjX3N1cHBvcnQuVGVzdEJhc2VfTWFwcGluZywKICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAnam9oYWInCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9PQlNPTEVURS9FQVNUQVNJQS8nIFwKLSAgICAgICAgICAgICAgICAgJ0tTQy9KT0hBQi5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvSk9IQUIuVFhUJwogICAgICMgS1MgWCAxMDAxIHN0YW5kYXJkIGFzc2lnbmVkIDB4NWMgYXMgV09OIFNJR04uCiAgICAgIyBidXQsIGluIGVhcmx5IDkwcyB0aGF0IGlzIHRoZSBvbmx5IGVyYSB1c2VkIGpvaGFiIHdpZGVseSwKICAgICAjIHRoZSBtb3N0IHNvZnR3YXJlcyBpbXBsZW1lbnRzIGl0IGFzIFJFVkVSU0UgU09MSURVUy4KQEAgLTM2LDggKzM0LDUgQEAKICAgICBwYXNzX2VuY3Rlc3QgPSBbKGInXFwnLCAnXHUyMGE5JyldCiAgICAgcGFzc19kZWN0ZXN0ID0gWyhiJ1xcJywgJ1x1MjBhOScpXQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29kZWNtYXBzX3R3LnB5IGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfdHcucHkKaW5kZXggNGQyNzA4MC4uMmVhNDRiNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfdHcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2RlY21hcHNfdHcucHkKQEAgLTEwLDE0ICsxMCwxMiBAQAogY2xhc3MgVGVzdEJJRzVNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gJ2JpZzUnCi0gICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9PQlNPTEVURS8nIFwKLSAgICAgICAgICAgICAgICAgJ0VBU1RBU0lBL09USEVSL0JJRzUuVFhUJworICAgIG1hcGZpbGV1cmwgPSAnaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlL0JJRzUuVFhUJwogCiBjbGFzcyBUZXN0Q1A5NTBNYXAobXVsdGlieXRlY29kZWNfc3VwcG9ydC5UZXN0QmFzZV9NYXBwaW5nLAogICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICdjcDk1MCcKLSAgICBtYXBmaWxldXJsID0gJ2h0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljL01BUFBJTkdTL1ZFTkRPUlMvTUlDU0ZULycgXAotICAgICAgICAgICAgICAgICAnV0lORE9XUy9DUDk1MC5UWFQnCisgICAgbWFwZmlsZXVybCA9ICdodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvQ1A5NTAuVFhUJwogICAgIHBhc3NfZW5jdGVzdCA9IFsKICAgICAgICAgKGInXHhhMlx4Y2MnLCAnXHU1MzQxJyksCiAgICAgICAgIChiJ1x4YTJceGNlJywgJ1x1NTM0NScpLApAQCAtMjYsOCArMjQsNSBAQAogICAgICAgICAoYiJceEZGeHkiLCAicmVwbGFjZSIsICAiXHVmZmZkeHkiKSwKICAgICApCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2RlY3MucHkgYi9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weQppbmRleCBhOGIzZGEwLi44ZmUyMWZiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvZGVjcy5weQpAQCAtMSw0ICsxLDUgQEAKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgaW8KIGltcG9ydCBsb2NhbGUKIGltcG9ydCBzeXMKQEAgLTk2LDcgKzk3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLnJlYWQoKSwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5ieXRlYnVmZmVyLCBiIiIpCiAKLSAgICAgICAgIyBkbyB0aGUgY2hlY2sgYWdhaW4sIHRoaXMgdGltZSB1c2luZyBhIGluY3JlbWVudGFsIGRlY29kZXIKKyAgICAgICAgIyBkbyB0aGUgY2hlY2sgYWdhaW4sIHRoaXMgdGltZSB1c2luZyBhbiBpbmNyZW1lbnRhbCBkZWNvZGVyCiAgICAgICAgIGQgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxkZWNvZGVyKHNlbGYuZW5jb2RpbmcpKCkKICAgICAgICAgcmVzdWx0ID0gIiIKICAgICAgICAgZm9yIChjLCBwYXJ0aWFscmVzdWx0KSBpbiB6aXAoaW5wdXQuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBwYXJ0aWFscmVzdWx0cyk6CkBAIC0zNDIsOCArMzQzLDQ2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZGVyLnJlYWRsaW5lKCksIHM1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRlci5yZWFkbGluZSgpLCAiIikKIAorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2VfcmVwbGFjZSA9ICJcdWZmZmQiCisKKyAgICBkZWYgdGVzdF9sb25lX3N1cnJvZ2F0ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgIlx1ZDgwMCIuZW5jb2RlLCBzZWxmLmVuY29kaW5nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcsICJiYWNrc2xhc2hyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIltcXHVkYzgwXSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcsICJ4bWxjaGFycmVmcmVwbGFjZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbJiM1NjQ0ODtdIi5lbmNvZGUoc2VsZi5lbmNvZGluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIltcdURDODBdIi5lbmNvZGUoc2VsZi5lbmNvZGluZywgImlnbm9yZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJbXSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcsICJyZXBsYWNlIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIls/XSIuZW5jb2RlKHNlbGYuZW5jb2RpbmcpKQorCisgICAgICAgIGJvbSA9ICIiLmVuY29kZShzZWxmLmVuY29kaW5nKQorICAgICAgICBmb3IgYmVmb3JlLCBhZnRlciBpbiBbKCJcVTAwMDEwZmZmIiwgIkEiKSwgKCJbIiwgIl0iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiQSIsICJcVTAwMDEwZmZmIildOgorICAgICAgICAgICAgYmVmb3JlX3NlcXVlbmNlID0gYmVmb3JlLmVuY29kZShzZWxmLmVuY29kaW5nKVtsZW4oYm9tKTpdCisgICAgICAgICAgICBhZnRlcl9zZXF1ZW5jZSA9IGFmdGVyLmVuY29kZShzZWxmLmVuY29kaW5nKVtsZW4oYm9tKTpdCisgICAgICAgICAgICB0ZXN0X3N0cmluZyA9IGJlZm9yZSArICJcdURDODAiICsgYWZ0ZXIKKyAgICAgICAgICAgIHRlc3Rfc2VxdWVuY2UgPSAoYm9tICsgYmVmb3JlX3NlcXVlbmNlICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbGxfZm9ybWVkX3NlcXVlbmNlICsgYWZ0ZXJfc2VxdWVuY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRGVjb2RlRXJyb3IsIHRlc3Rfc2VxdWVuY2UuZGVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5lbmNvZGluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9zdHJpbmcuZW5jb2RlKHNlbGYuZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlcGFzcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3NlcXVlbmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0X3NlcXVlbmNlLmRlY29kZShzZWxmLmVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3Vycm9nYXRlcGFzcyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3N0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9zZXF1ZW5jZS5kZWNvZGUoc2VsZi5lbmNvZGluZywgImlnbm9yZSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmUgKyBhZnRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9zZXF1ZW5jZS5kZWNvZGUoc2VsZi5lbmNvZGluZywgInJlcGxhY2UiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlICsgc2VsZi5pbGxfZm9ybWVkX3NlcXVlbmNlX3JlcGxhY2UgKyBhZnRlcikKKwogY2xhc3MgVVRGMzJUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTMyIgorICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6CisgICAgICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4ODBceGRjXHgwMFx4MDAiCisgICAgZWxzZToKKyAgICAgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHgwMFx4MDBceGRjXHg4MCIKIAogICAgIHNwYW1sZSA9IChiJ1x4ZmZceGZlXHgwMFx4MDAnCiAgICAgICAgICAgICAgIGInc1x4MDBceDAwXHgwMHBceDAwXHgwMFx4MDBhXHgwMFx4MDBceDAwbVx4MDBceDAwXHgwMCcKQEAgLTQzNSw2ICs0NzQsNyBAQAogCiBjbGFzcyBVVEYzMkxFVGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0zMi1sZSIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDgwXHhkY1x4MDBceDAwIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19wYXJ0aWFsKApAQCAtNDc5LDYgKzUxOSw3IEBACiAKIGNsYXNzIFVURjMyQkVUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTMyLWJlIgorICAgIGlsbF9mb3JtZWRfc2VxdWVuY2UgPSBiIlx4MDBceDAwXHhkY1x4ODAiCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCkBAIC01MjQsNiArNTY1LDEwIEBACiAKIGNsYXNzIFVURjE2VGVzdChSZWFkVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGVuY29kaW5nID0gInV0Zi0xNiIKKyAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgorICAgICAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceDgwXHhkYyIKKyAgICBlbHNlOgorICAgICAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceGRjXHg4MCIKIAogICAgIHNwYW1sZSA9IGInXHhmZlx4ZmVzXHgwMHBceDAwYVx4MDBtXHgwMHNceDAwcFx4MDBhXHgwMG1ceDAwJwogICAgIHNwYW1iZSA9IGInXHhmZVx4ZmZceDAwc1x4MDBwXHgwMGFceDAwbVx4MDBzXHgwMHBceDAwYVx4MDBtJwpAQCAtNTk5LDExICs2NDQsMTQgQEAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmcDoKICAgICAgICAgICAgIGZwLndyaXRlKHMpCi0gICAgICAgIHdpdGggY29kZWNzLm9wZW4oc3VwcG9ydC5URVNURk4sICdVJywgZW5jb2Rpbmc9c2VsZi5lbmNvZGluZykgYXMgcmVhZGVyOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCAnVScsIGVuY29kaW5nPXNlbGYuZW5jb2RpbmcpCisgICAgICAgIHdpdGggcmVhZGVyOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkZXIucmVhZCgpLCBzMSkKIAogY2xhc3MgVVRGMTZMRVRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMTYtbGUiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHg4MFx4ZGMiCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCkBAIC02NDcsNiArNjk1LDcgQEAKIAogY2xhc3MgVVRGMTZCRVRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtMTYtYmUiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZSA9IGIiXHhkY1x4ODAiCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCkBAIC02OTAsNiArNzM5LDggQEAKIAogY2xhc3MgVVRGOFRlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBlbmNvZGluZyA9ICJ1dGYtOCIKKyAgICBpbGxfZm9ybWVkX3NlcXVlbmNlID0gYiJceGVkXHhiMlx4ODAiCisgICAgaWxsX2Zvcm1lZF9zZXF1ZW5jZV9yZXBsYWNlID0gIlx1ZmZmZCIgKiAzCiAKICAgICBkZWYgdGVzdF9wYXJ0aWFsKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3BhcnRpYWwoCkBAIC03MTksMTggKzc3MCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1LCB1LmVuY29kZShzZWxmLmVuY29kaW5nKSkKIAogICAgIGRlZiB0ZXN0X2xvbmVfc3Vycm9nYXRlcyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCAiXHVkODAwIi5lbmNvZGUsICJ1dGYtOCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgYiJceGVkXHhhMFx4ODAiLmRlY29kZSwgInV0Zi04IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAiYmFja3NsYXNocmVwbGFjZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInW1xcdWRjODBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAieG1sY2hhcnJlZnJlcGxhY2UiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1smIzU2NDQ4O10nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJ1dGYtOCIsICJzdXJyb2dhdGVlc2NhcGUiKSwKKyAgICAgICAgc3VwZXIoKS50ZXN0X2xvbmVfc3Vycm9nYXRlcygpCisgICAgICAgICMgbm90IHN1cmUgaWYgdGhpcyBpcyBtYWtpbmcgc2Vuc2UgZm9yCisgICAgICAgICMgVVRGLTE2IGFuZCBVVEYtMzIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgndXRmLTgnLCAic3Vycm9nYXRlZXNjYXBlIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgYidbXHg4MF0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJbXHVEQzgwXSIuZW5jb2RlKCJ1dGYtOCIsICJpZ25vcmUiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBiJ1tdJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiW1x1REM4MF0iLmVuY29kZSgidXRmLTgiLCAicmVwbGFjZSIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIGInWz9dJykKIAogICAgIGRlZiB0ZXN0X3N1cnJvZ2F0ZXBhc3NfaGFuZGxlcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiYWJjXHVkODAwZGVmIi5lbmNvZGUoInV0Zi04IiwgInN1cnJvZ2F0ZXBhc3MiKSwKQEAgLTg1NCw2ICs4OTgsMzIgQEAKIGNsYXNzIFVURjdUZXN0KFJlYWRUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTciCiAKKyAgICBkZWYgdGVzdF9hc2NpaShzZWxmKToKKyAgICAgICAgIyBTZXQgRCAoZGlyZWN0bHkgZW5jb2RlZCBjaGFyYWN0ZXJzKQorICAgICAgICBzZXRfZCA9ICgnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCisgICAgICAgICAgICAgICAgICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKyAgICAgICAgICAgICAgICAgJzAxMjM0NTY3ODknCisgICAgICAgICAgICAgICAgICdcJygpLC0uLzo/JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRfZC5lbmNvZGUoc2VsZi5lbmNvZGluZyksIHNldF9kLmVuY29kZSgnYXNjaWknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRfZC5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCBzZXRfZCkKKyAgICAgICAgIyBTZXQgTyAob3B0aW9uYWwgZGlyZWN0IGNoYXJhY3RlcnMpCisgICAgICAgIHNldF9vID0gJyAhIiMkJSYqOzw9PkBbXV5fYHt8fScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRfby5lbmNvZGUoc2VsZi5lbmNvZGluZyksIHNldF9vLmVuY29kZSgnYXNjaWknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXRfby5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCBzZXRfbykKKyAgICAgICAgIyArCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2ErYicuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBiJ2ErLWInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInYSstYicuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCAnYStiJykKKyAgICAgICAgIyBXaGl0ZSBzcGFjZXMKKyAgICAgICAgd3MgPSAnIFx0XG5ccicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cy5lbmNvZGUoc2VsZi5lbmNvZGluZyksIHdzLmVuY29kZSgnYXNjaWknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cy5lbmNvZGUoJ2FzY2lpJykuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCB3cykKKyAgICAgICAgIyBPdGhlciBBU0NJSSBjaGFyYWN0ZXJzCisgICAgICAgIG90aGVyX2FzY2lpID0gJycuam9pbihzb3J0ZWQoc2V0KGJ5dGVzKHJhbmdlKDB4ODApKS5kZWNvZGUoKSkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldChzZXRfZCArIHNldF9vICsgJysnICsgd3MpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdGhlcl9hc2NpaS5lbmNvZGUoc2VsZi5lbmNvZGluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYicrQUFBQUFRQUNBQU1BQkFBRkFBWUFCd0FJQUFzQURBQU9BQThBRUFBUkFCSUFFd0FVJworICAgICAgICAgICAgICAgICAgICAgICAgIGInQUJVQUZnQVhBQmdBR1FBYUFCc0FIQUFkQUI0QUh3QmNBSDRBZnctJykKKwogICAgIGRlZiB0ZXN0X3BhcnRpYWwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfcGFydGlhbCgKICAgICAgICAgICAgICdhKy1iXHgwMGNceDgwZFx1MDEwMGVcVTAwMDEwMDAwZicsCkBAIC04OTUsNyArOTY1LDkgQEAKIAogICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKICAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoYidceGZmYicsICdcdWZmZmRiJyksCiAgICAgICAgICAgICAoYidhXHhmZmInLCAnYVx1ZmZmZGInKSwKKyAgICAgICAgICAgIChiJ2FceGZmXHhmZmInLCAnYVx1ZmZmZFx1ZmZmZGInKSwKICAgICAgICAgICAgIChiJ2ErSUsnLCAnYVx1ZmZmZCcpLAogICAgICAgICAgICAgKGInYStJSy1iJywgJ2FcdWZmZmRiJyksCiAgICAgICAgICAgICAoYidhK0lLLGInLCAnYVx1ZmZmZGInKSwKQEAgLTkxMSwxNiArOTgzLDUwIEBACiAgICAgICAgICAgICAoYidhKy8vLCtJS3ctYicsICdhXHVmZmZkXHUyMGFjYicpLAogICAgICAgICAgICAgKGInYSsvLy8sK0lLdy1iJywgJ2FcdWZmZmZcdWZmZmRcdTIwYWNiJyksCiAgICAgICAgICAgICAoYidhKy8vLy8sK0lLdy1iJywgJ2FcdWZmZmZcdWZmZmRcdTIwYWNiJyksCisgICAgICAgICAgICAoYidhK0lLdy1iXHhmZicsICdhXHUyMGFjYlx1ZmZmZCcpLAorICAgICAgICAgICAgKGInYStJS3dceGZmYicsICdhXHUyMGFjXHVmZmZkYicpLAogICAgICAgICBdCiAgICAgICAgIGZvciByYXcsIGV4cGVjdGVkIGluIHRlc3RzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBjb2RlY3MudXRmXzdfZGVjb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmRlY29kZSgndXRmLTcnLCAncmVwbGFjZScpLCBleHBlY3RlZCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHJhdz1yYXcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVEZWNvZGVFcnJvciwgY29kZWNzLnV0Zl83X2RlY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3LCAnc3RyaWN0JywgVHJ1ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdy5kZWNvZGUoJ3V0Zi03JywgJ3JlcGxhY2UnKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9ub25ibXAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1xVMDAwMTA0QTAnLmVuY29kZShzZWxmLmVuY29kaW5nKSwgYicrMkFIY29BLScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x1ZDgwMVx1ZGNhMCcuZW5jb2RlKHNlbGYuZW5jb2RpbmcpLCBiJysyQUhjb0EtJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJysyQUhjb0EtJy5kZWNvZGUoc2VsZi5lbmNvZGluZyksICdcVTAwMDEwNEEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJysyQUhjb0EnLmRlY29kZShzZWxmLmVuY29kaW5nKSwgJ1xVMDAwMTA0QTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdcdTIwYWNcVTAwMDEwNEEwJy5lbmNvZGUoc2VsZi5lbmNvZGluZyksIGInK0lLellBZHlnLScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrSUt6WUFkeWctJy5kZWNvZGUoc2VsZi5lbmNvZGluZyksICdcdTIwYWNcVTAwMDEwNEEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJytJS3pZQWR5ZycuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLCAnXHUyMGFjXFUwMDAxMDRBMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ1x1MjBhY1x1MjBhY1xVMDAwMTA0QTAnLmVuY29kZShzZWxmLmVuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBiJytJS3dnck5nQjNLQS0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInK0lLd2dyTmdCM0tBLScuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcdTIwYWNcdTIwYWNcVTAwMDEwNEEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJytJS3dnck5nQjNLQScuZGVjb2RlKHNlbGYuZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdcdTIwYWNcdTIwYWNcVTAwMDEwNEEwJykKKworICAgIGRlZiB0ZXN0X2xvbmVfc3Vycm9nYXRlcyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbCisgICAgICAgICAgICAoYidhKzJBRS1iJywgJ2FcdWQ4MDFiJyksCisgICAgICAgICAgICAoYidhKzJBRVx4ZmZiJywgJ2FcdWZmZmRiJyksCisgICAgICAgICAgICAoYidhKzJBRScsICdhXHVmZmZkJyksCisgICAgICAgICAgICAoYidhKzJBRUEtYicsICdhXHVmZmZkYicpLAorICAgICAgICAgICAgKGInYSsyQUgtYicsICdhXHVmZmZkYicpLAorICAgICAgICAgICAgKGInYStJS3pZQVEtYicsICdhXHUyMGFjXHVkODAxYicpLAorICAgICAgICAgICAgKGInYStJS3pZQVFceGZmYicsICdhXHUyMGFjXHVmZmZkYicpLAorICAgICAgICAgICAgKGInYStJS3pZQVFBLWInLCAnYVx1MjBhY1x1ZmZmZGInKSwKKyAgICAgICAgICAgIChiJ2ErSUt6WUFkLWInLCAnYVx1MjBhY1x1ZmZmZGInKSwKKyAgICAgICAgICAgIChiJ2ErSUt3Z3JOZ0ItYicsICdhXHUyMGFjXHUyMGFjXHVkODAxYicpLAorICAgICAgICAgICAgKGInYStJS3dnck5nQlx4ZmZiJywgJ2FcdTIwYWNcdTIwYWNcdWZmZmRiJyksCisgICAgICAgICAgICAoYidhK0lLd2dyTmdCJywgJ2FcdTIwYWNcdTIwYWNcdWZmZmQnKSwKKyAgICAgICAgICAgIChiJ2ErSUt3Z3JOZ0JBLWInLCAnYVx1MjBhY1x1MjBhY1x1ZmZmZGInKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgcmF3LCBleHBlY3RlZCBpbiB0ZXN0czoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHJhdz1yYXcpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3LmRlY29kZSgndXRmLTcnLCAncmVwbGFjZScpLCBleHBlY3RlZCkKKwogCiBjbGFzcyBVVEYxNkV4VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTk0Niw3ICsxMDUyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb2RlY3MucmVhZGJ1ZmZlcl9lbmNvZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29kZWNzLnJlYWRidWZmZXJfZW5jb2RlLCA0MikKIAotY2xhc3MgVVRGOFNpZ1Rlc3QoUmVhZFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFVURjhTaWdUZXN0KFVURjhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZW5jb2RpbmcgPSAidXRmLTgtc2lnIgogCiAgICAgZGVmIHRlc3RfcGFydGlhbChzZWxmKToKQEAgLTEwOTEsNiArMTE5Nyw4IEBACiAgICAgICAgICMgUHl0aG9uIHVzZWQgdG8gY3Jhc2ggb24gdGhpcyBhdCBleGl0IGJlY2F1c2Ugb2YgYSByZWZjb3VudAogICAgICAgICAjIGJ1ZyBpbiBfY29kZWNzbW9kdWxlLmMKIAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisKICMgRnJvbSBSRkMgMzQ5MgogcHVueWNvZGVfdGVzdGNhc2VzID0gWwogICAgICMgQSBBcmFiaWMgKEVneXB0aWFuKToKQEAgLTE1NDMsNiArMTY1MSwxNiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZXIuZW5jb2RlKCJhbXBsZS5vcmcuIiksIGIieG4tLXhhbXBsZS05dGEub3JnLiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5lbmNvZGUoIiIsIFRydWUpLCBiIiIpCiAKKyAgICBkZWYgdGVzdF9lcnJvcnMoc2VsZik6CisgICAgICAgICIiIk9ubHkgc3VwcG9ydHMgInN0cmljdCIgZXJyb3IgaGFuZGxlciIiIgorICAgICAgICAicHl0aG9uLm9yZyIuZW5jb2RlKCJpZG5hIiwgInN0cmljdCIpCisgICAgICAgIGIicHl0aG9uLm9yZyIuZGVjb2RlKCJpZG5hIiwgInN0cmljdCIpCisgICAgICAgIGZvciBlcnJvcnMgaW4gKCJpZ25vcmUiLCAicmVwbGFjZSIsICJiYWNrc2xhc2hyZXBsYWNlIiwKKyAgICAgICAgICAgICAgICAic3Vycm9nYXRlZXNjYXBlIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sICJweXRob24ub3JnIi5lbmNvZGUsICJpZG5hIiwgZXJyb3JzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uLAorICAgICAgICAgICAgICAgIGIicHl0aG9uLm9yZyIuZGVjb2RlLCAiaWRuYSIsIGVycm9ycykKKwogY2xhc3MgQ29kZWNzTW9kdWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9kZWNvZGUoc2VsZik6CkBAIC0xNTk4LDYgKzE3MTYsNDYgQEAKICAgICAgICAgYyA9IGNvZGVjcy5sb29rdXAoJ0FTQ0lJJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLm5hbWUsICdhc2NpaScpCiAKKyAgICBkZWYgdGVzdF9hbGwoc2VsZik6CisgICAgICAgIGFwaSA9ICgKKyAgICAgICAgICAgICJlbmNvZGUiLCAiZGVjb2RlIiwKKyAgICAgICAgICAgICJyZWdpc3RlciIsICJDb2RlY0luZm8iLCAiQ29kZWMiLCAiSW5jcmVtZW50YWxFbmNvZGVyIiwKKyAgICAgICAgICAgICJJbmNyZW1lbnRhbERlY29kZXIiLCAiU3RyZWFtUmVhZGVyIiwgIlN0cmVhbVdyaXRlciIsICJsb29rdXAiLAorICAgICAgICAgICAgImdldGVuY29kZXIiLCAiZ2V0ZGVjb2RlciIsICJnZXRpbmNyZW1lbnRhbGVuY29kZXIiLAorICAgICAgICAgICAgImdldGluY3JlbWVudGFsZGVjb2RlciIsICJnZXRyZWFkZXIiLCAiZ2V0d3JpdGVyIiwKKyAgICAgICAgICAgICJyZWdpc3Rlcl9lcnJvciIsICJsb29rdXBfZXJyb3IiLAorICAgICAgICAgICAgInN0cmljdF9lcnJvcnMiLCAicmVwbGFjZV9lcnJvcnMiLCAiaWdub3JlX2Vycm9ycyIsCisgICAgICAgICAgICAieG1sY2hhcnJlZnJlcGxhY2VfZXJyb3JzIiwgImJhY2tzbGFzaHJlcGxhY2VfZXJyb3JzIiwKKyAgICAgICAgICAgICJvcGVuIiwgIkVuY29kZWRGaWxlIiwKKyAgICAgICAgICAgICJpdGVyZW5jb2RlIiwgIml0ZXJkZWNvZGUiLAorICAgICAgICAgICAgIkJPTSIsICJCT01fQkUiLCAiQk9NX0xFIiwKKyAgICAgICAgICAgICJCT01fVVRGOCIsICJCT01fVVRGMTYiLCAiQk9NX1VURjE2X0JFIiwgIkJPTV9VVEYxNl9MRSIsCisgICAgICAgICAgICAiQk9NX1VURjMyIiwgIkJPTV9VVEYzMl9CRSIsICJCT01fVVRGMzJfTEUiLAorICAgICAgICAgICAgIkJPTTMyX0JFIiwgIkJPTTMyX0xFIiwgIkJPTTY0X0JFIiwgIkJPTTY0X0xFIiwgICMgVW5kb2N1bWVudGVkCisgICAgICAgICAgICAiU3RyZWFtUmVhZGVyV3JpdGVyIiwgIlN0cmVhbVJlY29kZXIiLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChhcGksIGNvZGVjcy5fX2FsbF9fKQorICAgICAgICBmb3IgYXBpIGluIGNvZGVjcy5fX2FsbF9fOgorICAgICAgICAgICAgZ2V0YXR0cihjb2RlY3MsIGFwaSkKKworICAgIGRlZiB0ZXN0X29wZW4oc2VsZik6CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZvciBtb2RlIGluICgndycsICdyJywgJ3IrJywgJ3crJywgJ2EnLCAnYSsnKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG1vZGUpLCBcCisgICAgICAgICAgICAgICAgICAgIGNvZGVjcy5vcGVuKHN1cHBvcnQuVEVTVEZOLCBtb2RlLCAnYXNjaWknKSBhcyBmaWxlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaWxlLCBjb2RlY3MuU3RyZWFtUmVhZGVyV3JpdGVyKQorCisgICAgZGVmIHRlc3RfdW5kZWZpbmVkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGNvZGVjcy5lbmNvZGUsICdhYmMnLCAndW5kZWZpbmVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjb2RlY3MuZGVjb2RlLCBiJ2FiYycsICd1bmRlZmluZWQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIGNvZGVjcy5lbmNvZGUsICcnLCAndW5kZWZpbmVkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBjb2RlY3MuZGVjb2RlLCBiJycsICd1bmRlZmluZWQnKQorICAgICAgICBmb3IgZXJyb3JzIGluICgnc3RyaWN0JywgJ2lnbm9yZScsICdyZXBsYWNlJywgJ2JhY2tzbGFzaHJlcGxhY2UnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICBjb2RlY3MuZW5jb2RlLCAnYWJjJywgJ3VuZGVmaW5lZCcsIGVycm9ycykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwKKyAgICAgICAgICAgICAgICBjb2RlY3MuZGVjb2RlLCBiJ2FiYycsICd1bmRlZmluZWQnLCBlcnJvcnMpCisKIGNsYXNzIFN0cmVhbVJlYWRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTYyOCw2ICsxNzg2LDcgQEAKICAgICAiY3AwMzciLAogICAgICJjcDEwMDYiLAogICAgICJjcDEwMjYiLAorICAgICJjcDExMjUiLAogICAgICJjcDExNDAiLAogICAgICJjcDEyNTAiLAogICAgICJjcDEyNTEiLApAQCAtMTczMCwxMyArMTg4OSwxMCBAQAogIyAgICAidW5kZWZpbmVkIgogCiAjIFRoZSBmb2xsb3dpbmcgZW5jb2RpbmdzIGRvbid0IHdvcmsgaW4gc3RhdGVmdWwgbW9kZQotYnJva2VuX3VuaWNvZGVfd2l0aF9zdHJlYW1zID0gWworYnJva2VuX3VuaWNvZGVfd2l0aF9zdGF0ZWZ1bCA9IFsKICAgICAicHVueWNvZGUiLAogICAgICJ1bmljb2RlX2ludGVybmFsIgogXQotYnJva2VuX2luY3JlbWVudGFsX2NvZGVycyA9IGJyb2tlbl91bmljb2RlX3dpdGhfc3RyZWFtcyArIFsKLSAgICAiaWRuYSIsCi1dCiAKIGNsYXNzIEJhc2ljVW5pY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UsIE1peEluQ2hlY2tTdGF0ZUhhbmRsaW5nKToKICAgICBkZWYgdGVzdF9iYXNpY3Moc2VsZik6CkBAIC0xNzU2LDcgKzE5MTIsNyBAQAogICAgICAgICAgICAgICAgIChjaGFycywgc2l6ZSkgPSBjb2RlY3MuZ2V0ZGVjb2RlcihlbmNvZGluZykoYikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNoYXJzLCBzLCAiZW5jb2Rpbmc9JXIiICUgZW5jb2RpbmcpCiAKLSAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBicm9rZW5fdW5pY29kZV93aXRoX3N0cmVhbXM6CisgICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gYnJva2VuX3VuaWNvZGVfd2l0aF9zdGF0ZWZ1bDoKICAgICAgICAgICAgICAgICAjIGNoZWNrIHN0cmVhbSByZWFkZXIvd3JpdGVyCiAgICAgICAgICAgICAgICAgcSA9IFF1ZXVlKGIiIikKICAgICAgICAgICAgICAgICB3cml0ZXIgPSBjb2RlY3MuZ2V0d3JpdGVyKGVuY29kaW5nKShxKQpAQCAtMTc3NCw3ICsxOTMwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZHJlc3VsdCArPSByZWFkZXIucmVhZCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkcmVzdWx0LCBzLCAiZW5jb2Rpbmc9JXIiICUgZW5jb2RpbmcpCiAKLSAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBicm9rZW5faW5jcmVtZW50YWxfY29kZXJzOgorICAgICAgICAgICAgaWYgZW5jb2Rpbmcgbm90IGluIGJyb2tlbl91bmljb2RlX3dpdGhfc3RhdGVmdWw6CiAgICAgICAgICAgICAgICAgIyBjaGVjayBpbmNyZW1lbnRhbCBkZWNvZGVyL2VuY29kZXIgYW5kIGl0ZXJlbmNvZGUoKS9pdGVyZGVjb2RlKCkKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGVuY29kZXIgPSBjb2RlY3MuZ2V0aW5jcmVtZW50YWxlbmNvZGVyKGVuY29kaW5nKSgpCkBAIC0xODIzLDcgKzE5NzksNyBAQAogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgY29kZWNfaW5jcmVtZW50YWxlbmNvZGVyLCBjb2RlY19pbmNyZW1lbnRhbGRlY29kZXIKICAgICAgICAgcyA9ICJhYmMxMjMiICAjIGFsbCBjb2RlY3Mgc2hvdWxkIGJlIGFibGUgdG8gZW5jb2RlIHRoZXNlCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBhbGxfdW5pY29kZV9lbmNvZGluZ3M6Ci0gICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gYnJva2VuX2luY3JlbWVudGFsX2NvZGVyczoKKyAgICAgICAgICAgIGlmIGVuY29kaW5nIG5vdCBpbiBicm9rZW5fdW5pY29kZV93aXRoX3N0YXRlZnVsOgogICAgICAgICAgICAgICAgICMgY2hlY2sgaW5jcmVtZW50YWwgZGVjb2Rlci9lbmNvZGVyIChmZXRjaGVkIHZpYSB0aGUgQyBBUEkpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBjZW5jb2RlciA9IGNvZGVjX2luY3JlbWVudGFsZW5jb2RlcihlbmNvZGluZykKQEAgLTE4NjMsNyArMjAxOSw3IEBACiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBhbGxfdW5pY29kZV9lbmNvZGluZ3M6CiAgICAgICAgICAgICBpZiBlbmNvZGluZyA9PSAiaWRuYSI6ICMgRklYTUU6IFNlZSBTRiBidWcgIzExNjMxNzgKICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgaWYgZW5jb2RpbmcgaW4gYnJva2VuX3VuaWNvZGVfd2l0aF9zdHJlYW1zOgorICAgICAgICAgICAgaWYgZW5jb2RpbmcgaW4gYnJva2VuX3VuaWNvZGVfd2l0aF9zdGF0ZWZ1bDoKICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzLmVuY29kZShlbmNvZGluZykpKQogICAgICAgICAgICAgZm9yIHQgaW4gcmFuZ2UoNSk6CkBAIC0xODk2LDcgKzIwNTIsNyBAQAogICAgICAgICAjIENoZWNrIHRoYXQgZ2V0c3RhdGUoKSBhbmQgc2V0c3RhdGUoKSBoYW5kbGUgdGhlIHN0YXRlIHByb3Blcmx5CiAgICAgICAgIHUgPSAiYWJjMTIzIgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYWxsX3VuaWNvZGVfZW5jb2RpbmdzOgotICAgICAgICAgICAgaWYgZW5jb2Rpbmcgbm90IGluIGJyb2tlbl9pbmNyZW1lbnRhbF9jb2RlcnM6CisgICAgICAgICAgICBpZiBlbmNvZGluZyBub3QgaW4gYnJva2VuX3VuaWNvZGVfd2l0aF9zdGF0ZWZ1bDoKICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3N0YXRlX2hhbmRsaW5nX2RlY29kZShlbmNvZGluZywgdSwgdS5lbmNvZGUoZW5jb2RpbmcpKQogICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RhdGVfaGFuZGxpbmdfZW5jb2RlKGVuY29kaW5nLCB1LCB1LmVuY29kZShlbmNvZGluZykpCiAKQEAgLTIxMDAsNiArMjI1Niw3IEBACiAgICAgICAgIGYgPSBpby5CeXRlc0lPKGIiXHhjM1x4YmMiKQogICAgICAgICB3aXRoIGNvZGVjcy5FbmNvZGVkRmlsZShmLCAibGF0aW4tMSIsICJ1dGYtOCIpIGFzIGVmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlZi5yZWFkKCksIGIiXHhmYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X3N0cmVhbXJlYWRlcndyaXRlcihzZWxmKToKICAgICAgICAgZiA9IGlvLkJ5dGVzSU8oYiJceGMzXHhiYyIpCkBAIC0yMzcwLDYwICsyNTI3LDkzIEBACiAgICAgInF1b3ByaV9jb2RlYyIsCiAgICAgImhleF9jb2RlYyIsCiBdCisKK3RyYW5zZm9ybV9hbGlhc2VzID0geworICAgICJiYXNlNjRfY29kZWMiOiBbImJhc2U2NCIsICJiYXNlXzY0Il0sCisgICAgInV1X2NvZGVjIjogWyJ1dSJdLAorICAgICJxdW9wcmlfY29kZWMiOiBbInF1b3ByaSIsICJxdW90ZWRfcHJpbnRhYmxlIiwgInF1b3RlZHByaW50YWJsZSJdLAorICAgICJoZXhfY29kZWMiOiBbImhleCJdLAorICAgICJyb3RfMTMiOiBbInJvdDEzIl0sCit9CisKIHRyeToKICAgICBpbXBvcnQgemxpYgogZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHBhc3MKKyAgICB6bGliID0gTm9uZQogZWxzZToKICAgICBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzLmFwcGVuZCgiemxpYl9jb2RlYyIpCisgICAgdHJhbnNmb3JtX2FsaWFzZXNbInpsaWJfY29kZWMiXSA9IFsiemlwIiwgInpsaWIiXQogdHJ5OgogICAgIGltcG9ydCBiejIKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwYXNzCiBlbHNlOgogICAgIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3MuYXBwZW5kKCJiejJfY29kZWMiKQorICAgIHRyYW5zZm9ybV9hbGlhc2VzWyJiejJfY29kZWMiXSA9IFsiYnoyIl0KIAogY2xhc3MgVHJhbnNmb3JtQ29kZWNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2Jhc2ljcyhzZWxmKToKICAgICAgICAgYmlucHV0ID0gYnl0ZXMocmFuZ2UoMjU2KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6Ci0gICAgICAgICAgICAjIGdlbmVyaWMgY29kZWNzIGludGVyZmFjZQotICAgICAgICAgICAgKG8sIHNpemUpID0gY29kZWNzLmdldGVuY29kZXIoZW5jb2RpbmcpKGJpbnB1dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKGJpbnB1dCkpCi0gICAgICAgICAgICAoaSwgc2l6ZSkgPSBjb2RlY3MuZ2V0ZGVjb2RlcihlbmNvZGluZykobykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKG8pKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBiaW5wdXQpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgIyBnZW5lcmljIGNvZGVjcyBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAobywgc2l6ZSkgPSBjb2RlY3MuZ2V0ZW5jb2RlcihlbmNvZGluZykoYmlucHV0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2l6ZSwgbGVuKGJpbnB1dCkpCisgICAgICAgICAgICAgICAgKGksIHNpemUpID0gY29kZWNzLmdldGRlY29kZXIoZW5jb2RpbmcpKG8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaXplLCBsZW4obykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpLCBiaW5wdXQpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBmb3IgZW5jb2RpbmcgaW4gYnl0ZXNfdHJhbnNmb3JtX2VuY29kaW5nczoKLSAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCi0gICAgICAgICAgICByZWFkZXIgPSBjb2RlY3MuZ2V0cmVhZGVyKGVuY29kaW5nKShpby5CeXRlc0lPKHNpbikpCi0gICAgICAgICAgICBzb3V0ID0gcmVhZGVyLnJlYWQoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQorICAgICAgICAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQogCiAgICAgZGVmIHRlc3RfcmVhZGxpbmUoc2VsZik6CiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgotICAgICAgICAgICAgc2luID0gY29kZWNzLmVuY29kZShiIlx4ODAiLCBlbmNvZGluZykKLSAgICAgICAgICAgIHJlYWRlciA9IGNvZGVjcy5nZXRyZWFkZXIoZW5jb2RpbmcpKGlvLkJ5dGVzSU8oc2luKSkKLSAgICAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZGxpbmUoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3V0LCBiIlx4ODAiKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIHNpbiA9IGNvZGVjcy5lbmNvZGUoYiJceDgwIiwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgcmVhZGVyID0gY29kZWNzLmdldHJlYWRlcihlbmNvZGluZykoaW8uQnl0ZXNJTyhzaW4pKQorICAgICAgICAgICAgICAgIHNvdXQgPSByZWFkZXIucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc291dCwgYiJceDgwIikKKworICAgIGRlZiB0ZXN0X2J1ZmZlcl9hcGlfdXNhZ2Uoc2VsZik6CisgICAgICAgICMgV2UgY2hlY2sgYWxsIHRoZSB0cmFuc2Zvcm0gY29kZWNzIGFjY2VwdCBtZW1vcnl2aWV3IGlucHV0CisgICAgICAgICMgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZworICAgICAgICAjIGFuZCBhbHNvIHRoYXQgdGhleSByb3VuZHRyaXAgY29ycmVjdGx5CisgICAgICAgIG9yaWdpbmFsID0gYiIxMjM0NVx4ODAiCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBvcmlnaW5hbAorICAgICAgICAgICAgICAgIHZpZXcgPSBtZW1vcnl2aWV3KGRhdGEpCisgICAgICAgICAgICAgICAgZGF0YSA9IGNvZGVjcy5lbmNvZGUoZGF0YSwgZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgdmlld19lbmNvZGVkID0gY29kZWNzLmVuY29kZSh2aWV3LCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpZXdfZW5jb2RlZCwgZGF0YSkKKyAgICAgICAgICAgICAgICB2aWV3ID0gbWVtb3J5dmlldyhkYXRhKQorICAgICAgICAgICAgICAgIGRhdGEgPSBjb2RlY3MuZGVjb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgb3JpZ2luYWwpCisgICAgICAgICAgICAgICAgdmlld19kZWNvZGVkID0gY29kZWNzLmRlY29kZSh2aWV3LCBlbmNvZGluZykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpZXdfZGVjb2RlZCwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X3RleHRfdG9fYmluYXJ5X2JsYWNrbGlzdHNfYmluYXJ5X3RyYW5zZm9ybXMoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgYmluYXJ5IC0+IGJpbmFyeSBjb2RlY3MgZ2l2ZSBhIGdvb2QgZXJyb3IgZm9yIHN0ciBpbnB1dAogICAgICAgICBiYWRfaW5wdXQgPSAiYmFkIGlucHV0IHR5cGUiCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBieXRlc190cmFuc2Zvcm1fZW5jb2RpbmdzOgotICAgICAgICAgICAgZm10ID0gKHIieyFyfSBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCi0gICAgICAgICAgICAgICAgICAgciJ1c2UgY29kZWNzLmVuY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQotICAgICAgICAgICAgbXNnID0gZm10LmZvcm1hdChlbmNvZGluZykKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKSBhcyBmYWlsdXJlOgotICAgICAgICAgICAgICAgIGJhZF9pbnB1dC5lbmNvZGUoZW5jb2RpbmcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18pCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChlbmNvZGluZz1lbmNvZGluZyk6CisgICAgICAgICAgICAgICAgZm10ID0gKCAieyFyfSBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKKyAgICAgICAgICAgICAgICBtc2cgPSBmbXQuZm9ybWF0KGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKSBhcyBmYWlsdXJlOgorICAgICAgICAgICAgICAgICAgICBiYWRfaW5wdXQuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZhaWx1cmUuZXhjZXB0aW9uLl9fY2F1c2VfXykKIAogICAgIGRlZiB0ZXN0X3RleHRfdG9fYmluYXJ5X2JsYWNrbGlzdHNfdGV4dF90cmFuc2Zvcm1zKHNlbGYpOgogICAgICAgICAjIENoZWNrIHN0ci5lbmNvZGUgZ2l2ZXMgYSBnb29kIGVycm9yIG1lc3NhZ2UgZm9yIHN0ciAtPiBzdHIgY29kZWNzCiAgICAgICAgIG1zZyA9IChyIl4ncm90XzEzJyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCi0gICAgICAgICAgICAgICByInVzZSBjb2RlY3MuZW5jb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKICAgICAgICAgICAgICJqdXN0IGFuIGV4YW1wbGUgbWVzc2FnZSIuZW5jb2RlKCJyb3RfMTMiKQogCkBAIC0yNDMyLDIzICsyNjIyLDI1MCBAQAogICAgICAgICAjIG1lc3NhZ2UgZm9yIGJpbmFyeSAtPiBiaW5hcnkgY29kZWNzCiAgICAgICAgIGRhdGEgPSBiImVuY29kZSBmaXJzdCB0byBlbnN1cmUgd2UgbWVldCBhbnkgZm9ybWF0IHJlc3RyaWN0aW9ucyIKICAgICAgICAgZm9yIGVuY29kaW5nIGluIGJ5dGVzX3RyYW5zZm9ybV9lbmNvZGluZ3M6Ci0gICAgICAgICAgICBlbmNvZGVkX2RhdGEgPSBjb2RlY3MuZW5jb2RlKGRhdGEsIGVuY29kaW5nKQotICAgICAgICAgICAgZm10ID0gKHIieyFyfSBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCi0gICAgICAgICAgICAgICAgICAgciJ1c2UgY29kZWNzLmRlY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQotICAgICAgICAgICAgbXNnID0gZm10LmZvcm1hdChlbmNvZGluZykKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKLSAgICAgICAgICAgICAgICBlbmNvZGVkX2RhdGEuZGVjb2RlKGVuY29kaW5nKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgotICAgICAgICAgICAgICAgIGJ5dGVhcnJheShlbmNvZGVkX2RhdGEpLmRlY29kZShlbmNvZGluZykKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGVuY29kaW5nPWVuY29kaW5nKToKKyAgICAgICAgICAgICAgICBlbmNvZGVkX2RhdGEgPSBjb2RlY3MuZW5jb2RlKGRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgICAgIGZtdCA9IChyInshcn0gaXMgbm90IGEgdGV4dCBlbmNvZGluZzsgIgorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlXChcKSB0byBoYW5kbGUgYXJiaXRyYXJ5IGNvZGVjcyIpCisgICAgICAgICAgICAgICAgbXNnID0gZm10LmZvcm1hdChlbmNvZGluZykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAgICAgICAgIGVuY29kZWRfZGF0YS5kZWNvZGUoZW5jb2RpbmcpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpOgorICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoZW5jb2RlZF9kYXRhKS5kZWNvZGUoZW5jb2RpbmcpCiAKICAgICBkZWYgdGVzdF9iaW5hcnlfdG9fdGV4dF9ibGFja2xpc3RzX3RleHRfdHJhbnNmb3JtcyhzZWxmKToKICAgICAgICAgIyBDaGVjayBzdHIgLT4gc3RyIGNvZGVjIGdpdmVzIGEgZ29vZCBlcnJvciBmb3IgYmluYXJ5IGlucHV0CiAgICAgICAgIGZvciBiYWRfaW5wdXQgaW4gKGIiaW1tdXRhYmxlIiwgYnl0ZWFycmF5KGIibXV0YWJsZSIpKToKLSAgICAgICAgICAgIG1zZyA9IChyIl4ncm90XzEzJyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCi0gICAgICAgICAgICAgICAgICAgciJ1c2UgY29kZWNzLmRlY29kZVwoXCkgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiKQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KExvb2t1cEVycm9yLCBtc2cpIGFzIGZhaWx1cmU6Ci0gICAgICAgICAgICAgICAgYmFkX2lucHV0LmRlY29kZSgicm90XzEzIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZhaWx1cmUuZXhjZXB0aW9uLl9fY2F1c2VfXykKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGJhZF9pbnB1dD1iYWRfaW5wdXQpOgorICAgICAgICAgICAgICAgIG1zZyA9IChyIl4ncm90XzEzJyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCisgICAgICAgICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5kZWNvZGVcKFwpIHRvIGhhbmRsZSBhcmJpdHJhcnkgY29kZWNzIikKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZykgYXMgZmFpbHVyZToKKyAgICAgICAgICAgICAgICAgICAgYmFkX2lucHV0LmRlY29kZSgicm90XzEzIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmYWlsdXJlLmV4Y2VwdGlvbi5fX2NhdXNlX18pCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh6bGliLCAiUmVxdWlyZXMgemxpYiBzdXBwb3J0IikKKyAgICBkZWYgdGVzdF9jdXN0b21femxpYl9lcnJvcl9pc193cmFwcGVkKHNlbGYpOgorICAgICAgICAjIENoZWNrIHpsaWIgY29kZWMgZ2l2ZXMgYSBnb29kIGVycm9yIGZvciBtYWxmb3JtZWQgaW5wdXQKKyAgICAgICAgbXNnID0gIl5kZWNvZGluZyB3aXRoICd6bGliX2NvZGVjJyBjb2RlYyBmYWlsZWQiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChFeGNlcHRpb24sIG1zZykgYXMgZmFpbHVyZToKKyAgICAgICAgICAgIGNvZGVjcy5kZWNvZGUoYiJoZWxsbyIsICJ6bGliX2NvZGVjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZhaWx1cmUuZXhjZXB0aW9uLl9fY2F1c2VfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZmFpbHVyZS5leGNlcHRpb24pKQorCisgICAgZGVmIHRlc3RfY3VzdG9tX2hleF9lcnJvcl9pc193cmFwcGVkKHNlbGYpOgorICAgICAgICAjIENoZWNrIGhleCBjb2RlYyBnaXZlcyBhIGdvb2QgZXJyb3IgZm9yIG1hbGZvcm1lZCBpbnB1dAorICAgICAgICBtc2cgPSAiXmRlY29kaW5nIHdpdGggJ2hleF9jb2RlYycgY29kZWMgZmFpbGVkIgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpIGFzIGZhaWx1cmU6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiaGVsbG8iLCAiaGV4X2NvZGVjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZhaWx1cmUuZXhjZXB0aW9uLl9fY2F1c2VfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUoZmFpbHVyZS5leGNlcHRpb24pKQorCisgICAgIyBVbmZvcnR1bmF0ZWx5LCB0aGUgYnoyIG1vZHVsZSB0aHJvd3MgT1NFcnJvciwgd2hpY2ggdGhlIGNvZGVjCisgICAgIyBtYWNoaW5lcnkgY3VycmVudGx5IGNhbid0IHdyYXAgOigKKworICAgICMgRW5zdXJlIGNvZGVjIGFsaWFzZXMgZnJvbSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNzQ3NSB3b3JrCisgICAgZGVmIHRlc3RfYWxpYXNlcyhzZWxmKToKKyAgICAgICAgZm9yIGNvZGVjX25hbWUsIGFsaWFzZXMgaW4gdHJhbnNmb3JtX2FsaWFzZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGV4cGVjdGVkX25hbWUgPSBjb2RlY3MubG9va3VwKGNvZGVjX25hbWUpLm5hbWUKKyAgICAgICAgICAgIGZvciBhbGlhcyBpbiBhbGlhc2VzOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGFsaWFzPWFsaWFzKToKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGNvZGVjcy5sb29rdXAoYWxpYXMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5uYW1lLCBleHBlY3RlZF9uYW1lKQorCisgICAgZGVmIHRlc3RfcXVvcHJpX3N0YXRlbGVzcyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgZW5jb2RlIHdpdGggcXVvdGV0YWJzPVRydWUKKyAgICAgICAgZW5jb2RlZCA9IGNvZGVjcy5lbmNvZGUoYiJzcGFjZSB0YWJcdGVvbCBcbiIsICJxdW9wcmktY29kZWMiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuY29kZWQsIGIic3BhY2U9MjB0YWI9MDllb2w9MjBcbiIpCisgICAgICAgICMgQnV0IHNob3VsZCBzdGlsbCBzdXBwb3J0IHVuZXNjYXBlZCB0YWJzIGFuZCBzcGFjZXMKKyAgICAgICAgdW5lc2NhcGVkID0gYiJzcGFjZSB0YWIgZW9sXG4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZWNzLmRlY29kZSh1bmVzY2FwZWQsICJxdW9wcmktY29kZWMiKSwgdW5lc2NhcGVkKQorCisgICAgZGVmIHRlc3RfdXVfaW52YWxpZChzZWxmKToKKyAgICAgICAgIyBNaXNzaW5nICJiZWdpbiIgbGluZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb2RlY3MuZGVjb2RlLCBiIiIsICJ1dS1jb2RlYyIpCisKKworIyBUaGUgY29kZWMgc3lzdGVtIHRyaWVzIHRvIHdyYXAgZXhjZXB0aW9ucyBpbiBvcmRlciB0byBlbnN1cmUgdGhlIGVycm9yCisjIG1lbnRpb25zIHRoZSBvcGVyYXRpb24gYmVpbmcgcGVyZm9ybWVkIGFuZCB0aGUgY29kZWMgaW52b2x2ZWQuIFdlCisjIGN1cnJlbnRseSAqb25seSogd2FudCB0aGlzIHRvIGhhcHBlbiBmb3IgcmVsYXRpdmVseSBzdGF0ZWxlc3MKKyMgZXhjZXB0aW9ucywgd2hlcmUgdGhlIG9ubHkgc2lnbmlmaWNhbnQgaW5mb3JtYXRpb24gdGhleSBjb250YWluIGlzIHRoZWlyCisjIHR5cGUgYW5kIGEgc2luZ2xlIHN0ciBhcmd1bWVudC4KKworIyBVc2UgYSBsb2NhbCBjb2RlYyByZWdpc3RyeSB0byBhdm9pZCBhcHBlYXJpbmcgdG8gbGVhayBvYmplY3RzIHdoZW4KKyMgcmVnaXN0ZXJpbmcgbXVsdGlwbGUgc2VhY2ggZnVuY3Rpb25zCitfVEVTVF9DT0RFQ1MgPSB7fQorCitkZWYgX2dldF90ZXN0X2NvZGVjKGNvZGVjX25hbWUpOgorICAgIHJldHVybiBfVEVTVF9DT0RFQ1MuZ2V0KGNvZGVjX25hbWUpCitjb2RlY3MucmVnaXN0ZXIoX2dldF90ZXN0X2NvZGVjKSAjIFJldHVybnMgTm9uZSwgbm90IHVzYWJsZSBhcyBhIGRlY29yYXRvcgorCit0cnk6CisgICAgIyBJc3N1ZSAjMjIxNjY6IEFsc28gbmVlZCB0byBjbGVhciB0aGUgaW50ZXJuYWwgY2FjaGUgaW4gQ1B5dGhvbgorICAgIGZyb20gX2NvZGVjcyBpbXBvcnQgX2ZvcmdldF9jb2RlYworZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGRlZiBfZm9yZ2V0X2NvZGVjKGNvZGVjX25hbWUpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgRXhjZXB0aW9uQ2hhaW5pbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBUaGVyZSdzIG5vIHdheSB0byB1bnJlZ2lzdGVyIGEgY29kZWMgc2VhcmNoIGZ1bmN0aW9uLCBzbyB3ZSBqdXN0CisgICAgICAgICMgZW5zdXJlIHdlIHJlbmRlciB0aGlzIG9uZSBmYWlybHkgaGFybWxlc3MgYWZ0ZXIgdGhlIHRlc3QKKyAgICAgICAgIyBjYXNlIGZpbmlzaGVzIGJ5IHVzaW5nIHRoZSB0ZXN0IGNhc2UgcmVwciBhcyB0aGUgY29kZWMgbmFtZQorICAgICAgICAjIFRoZSBjb2RlY3MgbW9kdWxlIG5vcm1hbGl6ZXMgY29kZWMgbmFtZXMsIGFsdGhvdWdoIHRoaXMgZG9lc24ndAorICAgICAgICAjIGFwcGVhciB0byBiZSBmb3JtYWxseSBkb2N1bWVudGVkLi4uCisgICAgICAgICMgV2UgYWxzbyBtYWtlIHN1cmUgd2UgdXNlIGEgdHJ1bHkgdW5pcXVlIGlkIGZvciB0aGUgY3VzdG9tIGNvZGVjCisgICAgICAgICMgdG8gYXZvaWQgaXNzdWVzIHdpdGggdGhlIGNvZGVjIGNhY2hlIHdoZW4gcnVubmluZyB0aGVzZSB0ZXN0cworICAgICAgICAjIG11bHRpcGxlIHRpbWVzIChlLmcuIHdoZW4gaHVudGluZyBmb3IgcmVmbGVha3MpCisgICAgICAgIHVuaXF1ZV9pZCA9IHJlcHIoc2VsZikgKyBzdHIoaWQoc2VsZikpCisgICAgICAgIHNlbGYuY29kZWNfbmFtZSA9IGVuY29kaW5ncy5ub3JtYWxpemVfZW5jb2RpbmcodW5pcXVlX2lkKS5sb3dlcigpCisKKyAgICAgICAgIyBXZSBzdG9yZSB0aGUgb2JqZWN0IHRvIHJhaXNlIG9uIHRoZSBpbnN0YW5jZSBiZWNhdXNlIG9mIGEgYmFkCisgICAgICAgICMgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgY29kZWMgY2FjaGluZyAod2hpY2ggbWVhbnMgd2UgY2FuJ3QKKyAgICAgICAgIyByZWNyZWF0ZSB0aGUgY29kZWMgZW50cnkpIGFuZCByZWdydGVzdCByZWZsZWFrIGh1bnRpbmcgKHdoaWNoCisgICAgICAgICMgcnVucyB0aGUgc2FtZSB0ZXN0IGluc3RhbmNlIG11bHRpcGxlIHRpbWVzKS4gVGhpcyBtZWFucyB3ZQorICAgICAgICAjIG5lZWQgdG8gZW5zdXJlIHRoZSBjb2RlY3MgY2FsbCBiYWNrIGluIHRvIHRoZSBpbnN0YW5jZSB0byBmaW5kCisgICAgICAgICMgb3V0IHdoaWNoIGV4Y2VwdGlvbiB0byByYWlzZSByYXRoZXIgdGhhbiBiaW5kaW5nIHRoZW0gaW4gYQorICAgICAgICAjIGNsb3N1cmUgdG8gYW4gb2JqZWN0IHRoYXQgbWF5IGNoYW5nZSBvbiB0aGUgbmV4dCBydW4KKyAgICAgICAgc2VsZi5vYmpfdG9fcmFpc2UgPSBSdW50aW1lRXJyb3IKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgX1RFU1RfQ09ERUNTLnBvcChzZWxmLmNvZGVjX25hbWUsIE5vbmUpCisgICAgICAgICMgSXNzdWUgIzIyMTY2OiBBbHNvIHBvcCBmcm9tIGNhY2hlcyB0byBhdm9pZCBhcHBlYXJhbmNlIG9mIHJlZiBsZWFrcworICAgICAgICBlbmNvZGluZ3MuX2NhY2hlLnBvcChzZWxmLmNvZGVjX25hbWUsIE5vbmUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIF9mb3JnZXRfY29kZWMoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgc2V0X2NvZGVjKHNlbGYsIGVuY29kZSwgZGVjb2RlKToKKyAgICAgICAgY29kZWNfaW5mbyA9IGNvZGVjcy5Db2RlY0luZm8oZW5jb2RlLCBkZWNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9c2VsZi5jb2RlY19uYW1lKQorICAgICAgICBfVEVTVF9DT0RFQ1Nbc2VsZi5jb2RlY19uYW1lXSA9IGNvZGVjX2luZm8KKworICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIGFzc2VydFdyYXBwZWQoc2VsZiwgb3BlcmF0aW9uLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgZnVsbF9tc2cgPSByInt9IHdpdGggeyFyfSBjb2RlYyBmYWlsZWQgXCh7fToge31cKSIuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLCBzZWxmLmNvZGVjX25hbWUsIGV4Y190eXBlLl9fbmFtZV9fLCBtc2cpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChleGNfdHlwZSwgZnVsbF9tc2cpIGFzIGNhdWdodDoKKyAgICAgICAgICAgIHlpZWxkIGNhdWdodAorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2F1Z2h0LmV4Y2VwdGlvbi5fX2NhdXNlX18sIGV4Y190eXBlKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjYXVnaHQuZXhjZXB0aW9uLl9fY2F1c2VfXy5fX3RyYWNlYmFja19fKQorCisgICAgZGVmIHJhaXNlX29iaihzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgIyBIZWxwZXIgdG8gZHluYW1pY2FsbHkgY2hhbmdlIHRoZSBvYmplY3QgcmFpc2VkIGJ5IGEgdGVzdCBjb2RlYworICAgICAgICByYWlzZSBzZWxmLm9ial90b19yYWlzZQorCisgICAgZGVmIGNoZWNrX3dyYXBwZWQoc2VsZiwgb2JqX3RvX3JhaXNlLCBtc2csIGV4Y190eXBlPVJ1bnRpbWVFcnJvcik6CisgICAgICAgIHNlbGYub2JqX3RvX3JhaXNlID0gb2JqX3RvX3JhaXNlCisgICAgICAgIHNlbGYuc2V0X2NvZGVjKHNlbGYucmFpc2Vfb2JqLCBzZWxmLnJhaXNlX29iaikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImVuY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICAic3RyX2lucHV0Ii5lbmNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V3JhcHBlZCgiZW5jb2RpbmciLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5lbmNvZGUoInN0cl9pbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdyYXBwZWQoImRlY29kaW5nIiwgZXhjX3R5cGUsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V3JhcHBlZCgiZGVjb2RpbmciLCBleGNfdHlwZSwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5kZWNvZGUoYiJieXRlcyBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKworICAgIGRlZiB0ZXN0X3JhaXNlX2J5X3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JhcHBlZChSdW50aW1lRXJyb3IsICIiKQorCisgICAgZGVmIHRlc3RfcmFpc2VfYnlfdmFsdWUoc2VsZik6CisgICAgICAgIG1zZyA9ICJUaGlzIHNob3VsZCBiZSB3cmFwcGVkIgorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZWQoUnVudGltZUVycm9yKG1zZyksIG1zZykKKworICAgIGRlZiB0ZXN0X3JhaXNlX2dyYW5kY2hpbGRfc3ViY2xhc3NfZXhhY3Rfc2l6ZShzZWxmKToKKyAgICAgICAgbXNnID0gIlRoaXMgc2hvdWxkIGJlIHdyYXBwZWQiCisgICAgICAgIGNsYXNzIE15UnVudGltZUVycm9yKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSAoKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXBwZWQoTXlSdW50aW1lRXJyb3IobXNnKSwgbXNnLCBNeVJ1bnRpbWVFcnJvcikKKworICAgIGRlZiB0ZXN0X3JhaXNlX3N1YmNsYXNzX3dpdGhfd2Vha3JlZl9zdXBwb3J0KHNlbGYpOgorICAgICAgICBtc2cgPSAiVGhpcyBzaG91bGQgYmUgd3JhcHBlZCIKKyAgICAgICAgY2xhc3MgTXlSdW50aW1lRXJyb3IoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVkKE15UnVudGltZUVycm9yKG1zZyksIG1zZywgTXlSdW50aW1lRXJyb3IpCisKKyAgICBkZWYgY2hlY2tfbm90X3dyYXBwZWQoc2VsZiwgb2JqX3RvX3JhaXNlLCBtc2cpOgorICAgICAgICBkZWYgcmFpc2Vfb2JqKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmFpc2Ugb2JqX3RvX3JhaXNlCisgICAgICAgIHNlbGYuc2V0X2NvZGVjKHJhaXNlX29iaiwgcmFpc2Vfb2JqKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoUnVudGltZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgInN0ciBpbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5lbmNvZGUoInN0ciBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGIiYnl0ZXMgaW5wdXQiLmRlY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChSdW50aW1lRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZGVjb2RlKGIiYnl0ZXMgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisKKyAgICBkZWYgdGVzdF9pbml0X292ZXJyaWRlX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBDdXN0b21Jbml0KFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKEN1c3RvbUluaXQsICIiKQorCisgICAgZGVmIHRlc3RfbmV3X292ZXJyaWRlX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBDdXN0b21OZXcoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19uZXdfXyhjbHMpCisgICAgICAgIHNlbGYuY2hlY2tfbm90X3dyYXBwZWQoQ3VzdG9tTmV3LCAiIikKKworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2F0dHJpYnV0ZV9pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgbXNnID0gIlRoaXMgc2hvdWxkIE5PVCBiZSB3cmFwcGVkIgorICAgICAgICBleGMgPSBSdW50aW1lRXJyb3IobXNnKQorICAgICAgICBleGMuYXR0ciA9IDEKKyAgICAgICAgc2VsZi5jaGVja19ub3Rfd3JhcHBlZChleGMsICJee30kIi5mb3JtYXQobXNnKSkKKworICAgIGRlZiB0ZXN0X25vbl9zdHJfYXJnX2lzX25vdF93cmFwcGVkKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKFJ1bnRpbWVFcnJvcigxKSwgIjEiKQorCisgICAgZGVmIHRlc3RfbXVsdGlwbGVfYXJnc19pc19ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgbXNnX3JlID0gciJeXCgnYScsICdiJywgJ2MnXCkkIgorICAgICAgICBzZWxmLmNoZWNrX25vdF93cmFwcGVkKFJ1bnRpbWVFcnJvcignYScsICdiJywgJ2MnKSwgbXNnX3JlKQorCisgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk2MDkKKyAgICBkZWYgdGVzdF9jb2RlY19sb29rdXBfZmFpbHVyZV9ub3Rfd3JhcHBlZChzZWxmKToKKyAgICAgICAgbXNnID0gIl51bmtub3duIGVuY29kaW5nOiB7fSQiLmZvcm1hdChzZWxmLmNvZGVjX25hbWUpCisgICAgICAgICMgVGhlIGluaXRpYWwgY29kZWMgbG9va3VwIHNob3VsZCBub3QgYmUgd3JhcHBlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICAic3RyIGlucHV0Ii5lbmNvZGUoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoTG9va3VwRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBjb2RlY3MuZW5jb2RlKCJzdHIgaW5wdXQiLCBzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGIiYnl0ZXMgaW5wdXQiLmRlY29kZShzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgbXNnKToKKyAgICAgICAgICAgIGNvZGVjcy5kZWNvZGUoYiJieXRlcyBpbnB1dCIsIHNlbGYuY29kZWNfbmFtZSkKKworICAgIGRlZiB0ZXN0X3VuZmxhZ2dlZF9ub25fdGV4dF9jb2RlY19oYW5kbGluZyhzZWxmKToKKyAgICAgICAgIyBUaGUgc3RkbGliIG5vbi10ZXh0IGNvZGVjcyBhcmUgbm93IG1hcmtlZCBzbyB0aGV5J3JlCisgICAgICAgICMgcHJlLWVtcHRpdmVseSBza2lwcGVkIGJ5IHRoZSB0ZXh0IG1vZGVsIHJlbGF0ZWQgbWV0aG9kcworICAgICAgICAjIEhvd2V2ZXIsIHRoaXJkIHBhcnR5IGNvZGVjcyB3b24ndCBiZSBmbGFnZ2VkLCBzbyB3ZSBzdGlsbCBtYWtlCisgICAgICAgICMgc3VyZSB0aGUgY2FzZSB3aGVyZSBhbiBpbmFwcHJvcHJpYXRlIG91dHB1dCB0eXBlIGlzIHByb2R1Y2VkIGlzCisgICAgICAgICMgaGFuZGxlZCBhcHByb3ByaWF0ZWx5CisgICAgICAgIGRlZiBlbmNvZGVfdG9fc3RyKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuICJub3QgYnl0ZXMhIiwgMAorICAgICAgICBkZWYgZGVjb2RlX3RvX2J5dGVzKCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgcmV0dXJuIGIibm90IHN0ciEiLCAwCisgICAgICAgIHNlbGYuc2V0X2NvZGVjKGVuY29kZV90b19zdHIsIGRlY29kZV90b19ieXRlcykKKyAgICAgICAgIyBObyBpbnB1dCBvciBvdXRwdXQgdHlwZSBjaGVja3Mgb24gdGhlIGNvZGVjcyBtb2R1bGUgZnVuY3Rpb25zCisgICAgICAgIGVuY29kZWQgPSBjb2RlY3MuZW5jb2RlKE5vbmUsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbmNvZGVkLCAibm90IGJ5dGVzISIpCisgICAgICAgIGRlY29kZWQgPSBjb2RlY3MuZGVjb2RlKE5vbmUsIHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNvZGVkLCBiIm5vdCBzdHIhIikKKyAgICAgICAgIyBUZXh0IG1vZGVsIG1ldGhvZHMgc2hvdWxkIGNvbXBsYWluCisgICAgICAgIGZtdCA9IChyIl57IXJ9IGVuY29kZXIgcmV0dXJuZWQgJ3N0cicgaW5zdGVhZCBvZiAnYnl0ZXMnOyAiCisgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZW5jb2RlXChcKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzJCIpCisgICAgICAgIG1zZyA9IGZtdC5mb3JtYXQoc2VsZi5jb2RlY19uYW1lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgInN0cl9pbnB1dCIuZW5jb2RlKHNlbGYuY29kZWNfbmFtZSkKKyAgICAgICAgZm10ID0gKHIiXnshcn0gZGVjb2RlciByZXR1cm5lZCAnYnl0ZXMnIGluc3RlYWQgb2YgJ3N0cic7ICIKKyAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5kZWNvZGVcKFwpIHRvIGRlY29kZSB0byBhcmJpdHJhcnkgdHlwZXMkIikKKyAgICAgICAgbXNnID0gZm10LmZvcm1hdChzZWxmLmNvZGVjX25hbWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIG1zZyk6CisgICAgICAgICAgICBiImJ5dGVzIGlucHV0Ii5kZWNvZGUoc2VsZi5jb2RlY19uYW1lKQorCiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICd3aW4zMicsCkBAIC0yNDYwLDggKzI4NzcsOCBAQAogICAgIGRlZiB0ZXN0X2ludmFsaWRfY29kZV9wYWdlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb2RlY3MuY29kZV9wYWdlX2VuY29kZSwgLTEsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29kZWNzLmNvZGVfcGFnZV9kZWNvZGUsIC0xLCBiJ2EnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZW5jb2RlLCAxMjMsICdhJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2RlY29kZSwgMTIzLCBiJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjb2RlY3MuY29kZV9wYWdlX2VuY29kZSwgMTIzLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGNvZGVjcy5jb2RlX3BhZ2VfZGVjb2RlLCAxMjMsIGInYScpCiAKICAgICBkZWYgdGVzdF9jb2RlX3BhZ2VfbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChVbmljb2RlRW5jb2RlRXJyb3IsICdjcDkzMicsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGJiNTFmLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfY29kaW5nLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmssIHVubG9hZAotaW1wb3J0IGltcG9ydGxpYiwgb3MsIHN5cywgc3VicHJvY2VzcwotCi1jbGFzcyBDb2RpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgotICAgICAgICBtb2R1bGVfbmFtZSA9ICdiYWRfY29kaW5nJwotICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQotCi0gICAgZGVmIHRlc3RfYmFkX2NvZGluZzIoc2VsZik6Ci0gICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcyJwotICAgICAgICBzZWxmLnZlcmlmeV9iYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQotCi0gICAgZGVmIHZlcmlmeV9iYWRfbW9kdWxlKHNlbGYsIG1vZHVsZV9uYW1lKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIF9faW1wb3J0X18sICd0ZXN0LicgKyBtb2R1bGVfbmFtZSkKLQotICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCBtb2R1bGVfbmFtZSArICcucHknKQotICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJyYiIpIGFzIGZwOgotICAgICAgICAgICAgYnl0ZXMgPSBmcC5yZWFkKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGJ5dGVzLCBmaWxlbmFtZSwgJ2V4ZWMnKQotCi0gICAgZGVmIHRlc3RfZXhlY192YWxpZF9jb2Rpbmcoc2VsZik6Ci0gICAgICAgIGQgPSB7fQotICAgICAgICBleGVjKGInIyBjb2Rpbmc6IGNwOTQ5XG5hID0gIlx4YWFceGE3IlxuJywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sICdcdTMwNDcnKQotCi0gICAgZGVmIHRlc3RfZmlsZV9wYXJzZShzZWxmKToKLSAgICAgICAgIyBpc3N1ZTExMzQ6IGFsbCBlbmNvZGluZ3Mgb3V0c2lkZSBsYXRpbi0xIGFuZCB1dGYtOCBmYWlsIG9uCi0gICAgICAgICMgbXVsdGlsaW5lIHN0cmluZ3MgYW5kIGxvbmcgbGluZXMgKD41MTIgY29sdW1ucykKLSAgICAgICAgdW5sb2FkKFRFU1RGTikKLSAgICAgICAgZmlsZW5hbWUgPSBURVNURk4gKyAiLnB5IgotICAgICAgICBmID0gb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz0iY3AxMjUyIikKLSAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIG9zLmN1cmRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBmOgotICAgICAgICAgICAgICAgIGYud3JpdGUoIiMgLSotIGNvZGluZzogY3AxMjUyIC0qLVxuIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKCInJydBIHNob3J0IHN0cmluZ1xuIikKLSAgICAgICAgICAgICAgICBmLndyaXRlKCInJydcbiIpCi0gICAgICAgICAgICAgICAgZi53cml0ZSgiJ0EgdmVyeSBsb25nIHN0cmluZyAlcydcbiIgJSAoIlgiICogMTAwMCkpCi0KLSAgICAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCi0gICAgICAgICAgICBfX2ltcG9ydF9fKFRFU1RGTikKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQotICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lKQotICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgImMiKQotICAgICAgICAgICAgdW5saW5rKGZpbGVuYW1lICsgIm8iKQotICAgICAgICAgICAgdW5sb2FkKFRFU1RGTikKLQotICAgIGRlZiB0ZXN0X2Vycm9yX2Zyb21fc3RyaW5nKHNlbGYpOgotICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjI4OQotICAgICAgICBpbnB1dCA9ICIjIGNvZGluZzogYXNjaWlcblxOe1NOT1dNQU59Ii5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcikgYXMgYzoKLSAgICAgICAgICAgIGNvbXBpbGUoaW5wdXQsICI8c3RyaW5nPiIsICJleGVjIikKLSAgICAgICAgZXhwZWN0ZWQgPSAiJ2FzY2lpJyBjb2RlYyBjYW4ndCBkZWNvZGUgYnl0ZSAweGUyIGluIHBvc2l0aW9uIDE2OiAiIFwKLSAgICAgICAgICAgICAgICAgICAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuZXhjZXB0aW9uLmFyZ3NbMF0uc3RhcnRzd2l0aChleHBlY3RlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICBtc2c9Yy5leGNlcHRpb24uYXJnc1swXSkKLQotICAgIGRlZiB0ZXN0XzIwNzMxKHNlbGYpOgotICAgICAgICBzdWIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RpbmcyMDczMS5weScpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCi0gICAgICAgIGVyciA9IHN1Yi5jb21tdW5pY2F0ZSgpWzFdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLnJldHVybmNvZGUsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidTeW50YXhFcnJvcicsIGVycikKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbGxlY3Rpb25zLnB5CmluZGV4IGZmNTI3NTUuLjA4ODJiYWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29sbGVjdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb2xsZWN0aW9ucy5weQpAQCAtMSwxNiArMSwxOSBAQAogIiIiVW5pdCB0ZXN0cyBmb3IgY29sbGVjdGlvbnMucHkuIiIiCiAKLWltcG9ydCB1bml0dGVzdCwgZG9jdGVzdCwgb3BlcmF0b3IKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGZvcmdldCwgdW5saW5rCi1pbXBvcnQgaW5zcGVjdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlLCBDb3VudGVyLCBPcmRlcmVkRGljdCwgX2NvdW50X2VsZW1lbnRzCi1mcm9tIHRlc3QgaW1wb3J0IG1hcHBpbmdfdGVzdHMKLWltcG9ydCBwaWNrbGUsIGNvcHkKLWZyb20gcmFuZG9tIGltcG9ydCByYW5kcmFuZ2UsIHNodWZmbGUKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvcHkKK2ltcG9ydCBkb2N0ZXN0CiBpbXBvcnQga2V5d29yZAoraW1wb3J0IG9wZXJhdG9yCitpbXBvcnQgcGlja2xlCitmcm9tIHJhbmRvbSBpbXBvcnQgY2hvaWNlLCByYW5kcmFuZ2UKIGltcG9ydCByZQoraW1wb3J0IHN0cmluZwogaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZSwgQ291bnRlciwgT3JkZXJlZERpY3QsIF9jb3VudF9lbGVtZW50cwogZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgVXNlckRpY3QKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENoYWluTWFwCiBmcm9tIGNvbGxlY3Rpb25zLmFiYyBpbXBvcnQgSGFzaGFibGUsIEl0ZXJhYmxlLCBJdGVyYXRvcgpAQCAtNjMsMTAgKzY2LDE3IEBACiAgICAgICAgICAgICBmb3IgbTEsIG0yIGluIHppcChkLm1hcHNbMTpdLCBlLm1hcHNbMTpdKToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKG0xLCBtMikKIAotICAgICAgICBmb3IgZSBpbiBbcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhkKSksCi0gICAgICAgICAgICAgICAgICBjb3B5LmRlZXBjb3B5KGQpLAorICAgICAgICAjIGNoZWNrIGRlZXAgY29waWVzCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoZCwgcHJvdG8pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1hcHMsIGUubWFwcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZCwgZSkKKyAgICAgICAgICAgIGZvciBtMSwgbTIgaW4gemlwKGQubWFwcywgZS5tYXBzKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KG0xLCBtMiwgZSkKKyAgICAgICAgZm9yIGUgaW4gW2NvcHkuZGVlcGNvcHkoZCksCiAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIoZCkpCi0gICAgICAgICAgICAgICAgXTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBkZWVwIGNvcGllcworICAgICAgICAgICAgICAgIF06CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubWFwcywgZS5tYXBzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkLCBlKQpAQCAtMTEyLDYgKzEyMiwzOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoZCksIGRpY3QoYT0xLCBiPTIsIGM9MzApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoZC5pdGVtcygpKSwgZGljdChhPTEsIGI9MiwgYz0zMCkpCiAKKyAgICBkZWYgdGVzdF9uZXdfY2hpbGQoc2VsZik6CisgICAgICAgICdUZXN0cyBmb3IgY2hhbmdlcyBmb3IgaXNzdWUgIzE2NjEzLicKKyAgICAgICAgYyA9IENoYWluTWFwKCkKKyAgICAgICAgY1snYSddID0gMQorICAgICAgICBjWydiJ10gPSAyCisgICAgICAgIG0gPSB7J2InOjIwLCAnYyc6IDMwfQorICAgICAgICBkID0gYy5uZXdfY2hpbGQobSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLm1hcHMsIFt7J2InOjIwLCAnYyc6MzB9LCB7J2EnOjEsICdiJzoyfV0pICAjIGNoZWNrIGludGVybmFsIHN0YXRlCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobSwgZC5tYXBzWzBdKQorCisgICAgICAgICMgVXNlIGEgZGlmZmVyZW50IG1hcCB0aGFuIGEgZGljdAorICAgICAgICBjbGFzcyBsb3dlcmRpY3QoZGljdCk6CisgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGtleSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAga2V5ID0ga2V5Lmxvd2VyKCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZGljdC5fX2dldGl0ZW1fXyhzZWxmLCBrZXkpCisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGtleSk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShrZXksIHN0cik6CisgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5sb3dlcigpCisgICAgICAgICAgICAgICAgcmV0dXJuIGRpY3QuX19jb250YWluc19fKHNlbGYsIGtleSkKKworICAgICAgICBjID0gQ2hhaW5NYXAoKQorICAgICAgICBjWydhJ10gPSAxCisgICAgICAgIGNbJ2InXSA9IDIKKyAgICAgICAgbSA9IGxvd2VyZGljdChiPTIwLCBjPTMwKQorICAgICAgICBkID0gYy5uZXdfY2hpbGQobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtLCBkLm1hcHNbMF0pCisgICAgICAgIGZvciBrZXkgaW4gJ2FiYyc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayBjb250YWlucworICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihrZXksIGQpCisgICAgICAgIGZvciBrLCB2IGluIGRpY3QoYT0xLCBCPTIwLCBDPTMwLCB6PTEwMCkuaXRlbXMoKTogICAgICAgICAgICAgIyBjaGVjayBnZXQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5nZXQoaywgMTAwKSwgdikKKwogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMjIE5hbWVkIFR1cGxlcwpAQCAtMTg2LDcgKzIyOCw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fZmllbGRzLCAoJ3gnLCAneScpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IF9maWVsZHMgYXR0cmlidXRlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5fcmVwbGFjZSh4PTEpLCAoMSwgMjIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IF9yZXBsYWNlIG1ldGhvZAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX2FzZGljdCgpLCBkaWN0KHg9MTEsIHk9MjIpKSAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBfYXNkaWN0IG1ldGhvZAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMocCksIHAuX2FzZGljdCgpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdmVyaWZ5IHRoYXQgdmFycygpIHdvcmtzCiAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcC5fcmVwbGFjZSh4PTEsIGVycm9yPTIpCkBAIC0yNDMsOCArMjg0LDcgQEAKIAogICAgICAgICAjIG4gPSA1MDAwCiAgICAgICAgIG4gPSAyNTQgIyBTeW50YXhFcnJvcjogbW9yZSB0aGFuIDI1NSBhcmd1bWVudHM6Ci0gICAgICAgIGltcG9ydCBzdHJpbmcsIHJhbmRvbQotICAgICAgICBuYW1lcyA9IGxpc3Qoc2V0KCcnLmpvaW4oW3JhbmRvbS5jaG9pY2Uoc3RyaW5nLmFzY2lpX2xldHRlcnMpCisgICAgICAgIG5hbWVzID0gbGlzdChzZXQoJycuam9pbihbY2hvaWNlKHN0cmluZy5hc2NpaV9sZXR0ZXJzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBqIGluIHJhbmdlKDEwKV0pIGZvciBpIGluIHJhbmdlKG4pKSkKICAgICAgICAgbiA9IGxlbihuYW1lcykKICAgICAgICAgQmlnID0gbmFtZWR0dXBsZSgnQmlnJywgbmFtZXMpCkBAIC0yNjksNyArMzA5LDcgQEAKICAgICAgICAgZm9yIG1vZHVsZSBpbiAocGlja2xlLCk6CiAgICAgICAgICAgICBsb2FkcyA9IGdldGF0dHIobW9kdWxlLCAnbG9hZHMnKQogICAgICAgICAgICAgZHVtcHMgPSBnZXRhdHRyKG1vZHVsZSwgJ2R1bXBzJykKLSAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiAtMSwgMCwgMSwgMjoKKyAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZSgtMSwgbW9kdWxlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgICAgICBxID0gbG9hZHMoZHVtcHMocCwgcHJvdG9jb2wpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgcSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuX2ZpZWxkcywgcS5fZmllbGRzKQpAQCAtMzQxLDYgKzM4MSwxNyBAQAogICAgICAgICBnbG9iYWxzKCkucG9wKCdOVENvbG9yJywgTm9uZSkgICAgICAgICAgIyBjbGVhbi11cCBhZnRlciB0aGlzIHRlc3QKIAogCisgICAgZGVmIHRlc3RfbmFtZWR0dXBsZV9zdWJjbGFzc19pc3N1ZV8yNDkzMShzZWxmKToKKyAgICAgICAgY2xhc3MgUG9pbnQobmFtZWR0dXBsZSgnX1BvaW50JywgWyd4JywgJ3knXSkpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGEgPSBQb2ludCgzLCA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX2FzZGljdCgpLCBPcmRlcmVkRGljdChbKCd4JywgMyksICgneScsIDQpXSkpCisKKyAgICAgICAgYS53ID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEuX19kaWN0X18sIHsndyc6IDV9KQorCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyMgQWJzdHJhY3QgQmFzZSBDbGFzc2VzCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNjg4LDE0ICs3MzksMTY2IEBACiAKICAgICAgICAgY3MgPSBNeUNvbXBhcmFibGVTZXQoKQogICAgICAgICBuY3MgPSBNeU5vbkNvbXBhcmFibGVTZXQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5jcyA8IGNzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmNzIDw9IGNzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5jcyA+IGNzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobmNzID49IGNzKQorCisgICAgZGVmIGFzc2VydFNhbWVTZXQoc2VsZiwgczEsIHMyKToKKyAgICAgICAgIyBjb2VyY2UgYm90aCB0byBhIHJlYWwgc2V0IHRoZW4gY2hlY2sgZXF1YWxpdHkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQoczEpLCBzZXQoczIpKQorCisgICAgZGVmIHRlc3RfU2V0X2ludGVyb3BlcmFiaWxpdHlfd2l0aF9yZWFsX3NldHMoc2VsZik6CisgICAgICAgICMgSXNzdWU6IDg3NDMKKyAgICAgICAgY2xhc3MgTGlzdFNldChTZXQpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnRzPSgpKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEgPSBbXQorICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIGVsZW1lbnRzOgorICAgICAgICAgICAgICAgICAgICBpZiBlbGVtIG5vdCBpbiBzZWxmLmRhdGE6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRhdGEuYXBwZW5kKGVsZW0pCisgICAgICAgICAgICBkZWYgX19jb250YWluc19fKHNlbGYsIGVsZW0pOgorICAgICAgICAgICAgICAgIHJldHVybiBlbGVtIGluIHNlbGYuZGF0YQorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuZGF0YSkKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBsZW4oc2VsZi5kYXRhKQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnU2V0KHshcn0pJy5mb3JtYXQoc2VsZi5kYXRhKQorCisgICAgICAgIHIxID0gc2V0KCdhYmMnKQorICAgICAgICByMiA9IHNldCgnYmNkJykKKyAgICAgICAgcjMgPSBzZXQoJ2FiY2RlJykKKyAgICAgICAgZjEgPSBMaXN0U2V0KCdhYmMnKQorICAgICAgICBmMiA9IExpc3RTZXQoJ2JjZCcpCisgICAgICAgIGYzID0gTGlzdFNldCgnYWJjZGUnKQorICAgICAgICBsMSA9IGxpc3QoJ2FiY2NiYScpCisgICAgICAgIGwyID0gbGlzdCgnYmNkZGNiJykKKyAgICAgICAgbDMgPSBsaXN0KCdhYmNkZWVkY2JhJykKKworICAgICAgICB0YXJnZXQgPSByMSAmIHIyCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAmIGYyLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAmIHIyLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChyMiAmIGYxLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAmIGwyLCB0YXJnZXQpCisKKyAgICAgICAgdGFyZ2V0ID0gcjEgfCByMgorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgfCBmMiwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgfCByMiwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQocjIgfCBmMSwgdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjEgfCBsMiwgdGFyZ2V0KQorCisgICAgICAgIGZ3ZF90YXJnZXQgPSByMSAtIHIyCisgICAgICAgIHJldl90YXJnZXQgPSByMiAtIHIxCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAtIGYyLCBmd2RfdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjIgLSBmMSwgcmV2X3RhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KGYxIC0gcjIsIGZ3ZF90YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMiAtIHIxLCByZXZfdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQocjEgLSBmMiwgZndkX3RhcmdldCkKKyAgICAgICAgc2VsZi5hc3NlcnRTYW1lU2V0KHIyIC0gZjEsIHJldl90YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSAtIGwyLCBmd2RfdGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydFNhbWVTZXQoZjIgLSBsMSwgcmV2X3RhcmdldCkKKworICAgICAgICB0YXJnZXQgPSByMSBeIHIyCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSBeIGYyLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSBeIHIyLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChyMiBeIGYxLCB0YXJnZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0U2FtZVNldChmMSBeIGwyLCB0YXJnZXQpCisKKyAgICAgICAgIyBEb24ndCBjaGFuZ2UgdGhlIGZvbGxvd2luZyB0byB1c2UgYXNzZXJ0TGVzcyBvciBvdGhlcgorICAgICAgICAjICJtb3JlIHNwZWNpZmljIiB1bml0dGVzdCBhc3NlcnRpb25zLiAgVGhlIGN1cnJlbnQKKyAgICAgICAgIyBhc3NlcnRUcnVlL2Fzc2VydEZhbHNlIHN0eWxlIG1ha2VzIHRoZSBwYXR0ZXJuIG9mIHRlc3QKKyAgICAgICAgIyBjYXNlIGNvbWJpbmF0aW9ucyBjbGVhciBhbmQgYWxsb3dzIHVzIHRvIGtub3cgZm9yIHN1cmUKKyAgICAgICAgIyB0aGUgZXhhY3Qgb3BlcmF0b3IgYmVpbmcgaW52b2tlZC4KKworICAgICAgICAjIHByb3BlciBzdWJzZXQKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxIDwgZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPCBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMSA8IGYyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPCBmMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyMSA8IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIxIDwgZjIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSA8IHIzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHIxIDwgcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPCByMikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgbmNzIDwgY3MKKyAgICAgICAgICAgIGYxIDwgbDMKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgbmNzIDw9IGNzCisgICAgICAgICAgICBmMSA8IGwxCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGNzID4gbmNzCisgICAgICAgICAgICBmMSA8IGwyCisKKyAgICAgICAgIyBhbnkgc3Vic2V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSA8PSBmMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxIDw9IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxIDw9IGYyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPD0gZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMSA8PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyMSA8PSBmMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxIDw9IHIzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPD0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPD0gcjIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGNzID49IG5jcworICAgICAgICAgICAgZjEgPD0gbDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjEgPD0gbDEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjEgPD0gbDIKKworICAgICAgICAjIHByb3BlciBzdXBlcnNldAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjMgPiBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMSA+IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyID4gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyMyA+IHIxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYxID4gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjIgPiByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIzID4gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPiByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyMiA+IHIxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBmMSA+IGwzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxID4gbDEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjEgPiBsMgorCisgICAgICAgICMgYW55IHN1cGVyc2V0CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMyA+PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxID49IGYxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYyID49IGYxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjMgPj0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSA+PSByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMiA+PSByMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIzID49IHIxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocjEgPj0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjIgPj0gcjEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxID49IGwzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGYxID49bDEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZjEgPj0gbDIKKworICAgICAgICAjIGVxdWFsaXR5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSA9PSBmMSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxID09IGYxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgPT0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgPT0gZjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gcjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gbDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gbDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgPT0gbDIpCisKKyAgICAgICAgIyBpbmVxdWFsaXR5CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgIT0gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocjEgIT0gZjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjEgIT0gcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSAhPSBmMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIxICE9IGYzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgIT0gcjMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMSAhPSBsMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYxICE9IGwxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjEgIT0gbDIpCiAKICAgICBkZWYgdGVzdF9NYXBwaW5nKHNlbGYpOgogICAgICAgICBmb3Igc2FtcGxlIGluIFtkaWN0XToKQEAgLTc1MCw2ICs5NTMsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2FtcGxlLCBTZXF1ZW5jZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyYW5nZSgxMCksIFNlcXVlbmNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhyYW5nZSwgU2VxdWVuY2UpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWVtb3J5dmlldyhiIiIpLCBTZXF1ZW5jZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MobWVtb3J5dmlldywgU2VxdWVuY2UpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzdHIsIFNlcXVlbmNlKSkKICAgICAgICAgc2VsZi52YWxpZGF0ZV9hYnN0cmFjdF9tZXRob2RzKFNlcXVlbmNlLCAnX19jb250YWluc19fJywgJ19faXRlcl9fJywgJ19fbGVuX18nLAogICAgICAgICAgICAgJ19fZ2V0aXRlbV9fJykKQEAgLTg5OCwyOSArMTEwMyw0NyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuc2V0ZGVmYXVsdCgnZScsIDUpLCA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNbJ2UnXSwgNSkKIAorICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb3VudGVyKHNlbGY9NDIpLml0ZW1zKCkpLCBbKCdzZWxmJywgNDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KENvdW50ZXIoaXRlcmFibGU9NDIpLml0ZW1zKCkpLCBbKCdpdGVyYWJsZScsIDQyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb3VudGVyKGl0ZXJhYmxlPU5vbmUpLml0ZW1zKCkpLCBbKCdpdGVyYWJsZScsIE5vbmUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDb3VudGVyLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDb3VudGVyLCAoKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ291bnRlci5fX2luaXRfXykKKworICAgIGRlZiB0ZXN0X3VwZGF0ZShzZWxmKToKKyAgICAgICAgYyA9IENvdW50ZXIoKQorICAgICAgICBjLnVwZGF0ZShzZWxmPTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYy5pdGVtcygpKSwgWygnc2VsZicsIDQyKV0pCisgICAgICAgIGMgPSBDb3VudGVyKCkKKyAgICAgICAgYy51cGRhdGUoaXRlcmFibGU9NDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjLml0ZW1zKCkpLCBbKCdpdGVyYWJsZScsIDQyKV0pCisgICAgICAgIGMgPSBDb3VudGVyKCkKKyAgICAgICAgYy51cGRhdGUoaXRlcmFibGU9Tm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMuaXRlbXMoKSksIFsoJ2l0ZXJhYmxlJywgTm9uZSldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIENvdW50ZXIoKS51cGRhdGUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIENvdW50ZXIoKS51cGRhdGUsIHt9LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDb3VudGVyLnVwZGF0ZSkKKwogICAgIGRlZiB0ZXN0X2NvcHlpbmcoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBjb3VudGVycyBhcmUgY29weWFibGUsIGRlZXBjb3B5YWJsZSwgcGlja2xhYmxlLCBhbmQKICAgICAgICAgI2hhdmUgYSByZXByL2V2YWwgcm91bmQtdHJpcAogICAgICAgICB3b3JkcyA9IENvdW50ZXIoJ3doaWNoIHdpdGNoIGhhZCB3aGljaCB3aXRjaGVzIHdyaXN0IHdhdGNoJy5zcGxpdCgpKQorICAgICAgICBkZWYgY2hlY2soZHVwKToKKyAgICAgICAgICAgIG1zZyA9ICJcbmNvcHk6ICVzXG53b3JkczogJXMiICUgKGR1cCwgd29yZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgd29yZHMsIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCB3b3JkcykKKyAgICAgICAgY2hlY2sod29yZHMuY29weSgpKQorICAgICAgICBjaGVjayhjb3B5LmNvcHkod29yZHMpKQorICAgICAgICBjaGVjayhjb3B5LmRlZXBjb3B5KHdvcmRzKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgY2hlY2socGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgcHJvdG8pKSkKKyAgICAgICAgY2hlY2soZXZhbChyZXByKHdvcmRzKSkpCiAgICAgICAgIHVwZGF0ZV90ZXN0ID0gQ291bnRlcigpCiAgICAgICAgIHVwZGF0ZV90ZXN0LnVwZGF0ZSh3b3JkcykKLSAgICAgICAgZm9yIGksIGR1cCBpbiBlbnVtZXJhdGUoWwotICAgICAgICAgICAgICAgICAgICB3b3Jkcy5jb3B5KCksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuY29weSh3b3JkcyksCi0gICAgICAgICAgICAgICAgICAgIGNvcHkuZGVlcGNvcHkod29yZHMpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAwKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMod29yZHMsIDEpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh3b3JkcywgMikpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHdvcmRzLCAtMSkpLAotICAgICAgICAgICAgICAgICAgICBldmFsKHJlcHIod29yZHMpKSwKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlX3Rlc3QsCi0gICAgICAgICAgICAgICAgICAgIENvdW50ZXIod29yZHMpLAotICAgICAgICAgICAgICAgICAgICBdKToKLSAgICAgICAgICAgIG1zZyA9IChpLCBkdXAsIHdvcmRzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR1cCBpcyBub3Qgd29yZHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgd29yZHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkdXApLCBsZW4od29yZHMpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGR1cCksIHR5cGUod29yZHMpKQorICAgICAgICBjaGVjayh1cGRhdGVfdGVzdCkKKyAgICAgICAgY2hlY2soQ291bnRlcih3b3JkcykpCiAKICAgICBkZWYgdGVzdF9jb3B5X3N1YmNsYXNzKHNlbGYpOgogICAgICAgICBjbGFzcyBNeUNvdW50ZXIoQ291bnRlcik6CkBAIC0xMDE2LDYgKzEyMzksMTYgQEAKICAgICAgICAgYy5zdWJ0cmFjdCgnYWFhYWJiY2NlJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLCBDb3VudGVyKGE9LTEsIGI9MCwgYz0tMSwgZD0xLCBlPS0xKSkKIAorICAgICAgICBjID0gQ291bnRlcigpCisgICAgICAgIGMuc3VidHJhY3Qoc2VsZj00MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGMuaXRlbXMoKSksIFsoJ3NlbGYnLCAtNDIpXSkKKyAgICAgICAgYyA9IENvdW50ZXIoKQorICAgICAgICBjLnN1YnRyYWN0KGl0ZXJhYmxlPTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoYy5pdGVtcygpKSwgWygnaXRlcmFibGUnLCAtNDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBDb3VudGVyKCkuc3VidHJhY3QsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIENvdW50ZXIoKS5zdWJ0cmFjdCwge30sIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIENvdW50ZXIuc3VidHJhY3QpCisKICAgICBkZWYgdGVzdF91bmFyeShzZWxmKToKICAgICAgICAgYyA9IENvdW50ZXIoYT0tNSwgYj0wLCBjPTUsIGQ9MTAsIGU9MTUsZz00MCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KCtjKSwgZGljdChjPTUsIGQ9MTAsIGU9MTUsIGc9NDApKQpAQCAtMTA0MywzMDMgKzEyNzYsMjAgQEAKICAgICAgICAgIyB0ZXN0IGZpZGVsaXR5IHRvIHRoZSBwdXJlIHB5dGhvbiB2ZXJzaW9uCiAgICAgICAgIGMgPSBDb3VudGVyU3ViY2xhc3NXaXRoU2V0SXRlbSgnYWJyYWNhZGFicmEnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYy5jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChjKSwgeydhJzogNSwgJ2InOiAyLCAnYyc6IDEsICdkJzogMSwgJ3InOjIgfSkKICAgICAgICAgYyA9IENvdW50ZXJTdWJjbGFzc1dpdGhHZXQoJ2FicmFjYWRhYnJhJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMuY2FsbGVkKQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIyMgT3JkZXJlZERpY3QKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLWNsYXNzIFRlc3RPcmRlcmVkRGljdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBPcmRlcmVkRGljdChbKCdhJywgMSksICgnYicsIDIpXSwgTm9uZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRvbyBtYW55IGFyZ3MKLSAgICAgICAgcGFpcnMgPSBbKCdhJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdkJywgNCksICgnZScsIDUpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChPcmRlcmVkRGljdChkaWN0KHBhaXJzKSkuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgIyBkaWN0IGlucHV0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKE9yZGVyZWREaWN0KCoqZGljdChwYWlycykpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAjIGt3ZHMgaW5wdXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE9yZGVyZWREaWN0KHBhaXJzKS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICMgcGFpcnMgaW5wdXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDkpLCAoJ2QnLCA0KV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjPTMsIGU9NSkuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICAgICAgICAjIG1peGVkIGlucHV0Ci0KLSAgICAgICAgIyBtYWtlIHN1cmUgbm8gcG9zaXRpb25hbCBhcmdzIGNvbmZsaWN0IHdpdGggcG9zc2libGUga3dkYXJncwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXJnc3BlYyhPcmRlcmVkRGljdC5fX2RpY3RfX1snX19pbml0X18nXSkuYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICBbJ3NlbGYnXSkKLQotICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGRpcmVjdCBjYWxscyB0byBfX2luaXRfXyBkbyBub3QgY2xlYXIgcHJldmlvdXMgY29udGVudHMKLSAgICAgICAgZCA9IE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0NCksICgnZScsIDU1KV0pCi0gICAgICAgIGQuX19pbml0X18oWygnZScsIDUpLCAoJ2YnLCA2KV0sIGc9NywgZD00KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5pdGVtcygpKSwKLSAgICAgICAgICAgIFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpLCAoJ2cnLCA3KV0pCi0KLSAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIE9yZGVyZWREaWN0KCkudXBkYXRlKFsoJ2EnLCAxKSwgKCdiJywgMildLCBOb25lKSAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncwotICAgICAgICBwYWlycyA9IFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSldCi0gICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQotICAgICAgICBvZC51cGRhdGUoZGljdChwYWlycykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG9kLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRpY3QgaW5wdXQKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCi0gICAgICAgIG9kLnVwZGF0ZSgqKmRpY3QocGFpcnMpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBrd2RzIGlucHV0Ci0gICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQotICAgICAgICBvZC51cGRhdGUocGFpcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBhaXJzIGlucHV0Ci0gICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQotICAgICAgICBvZC51cGRhdGUoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgOSksICgnZCcsIDQpXSwgYz0zLCBlPTUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1peGVkIGlucHV0Ci0KLSAgICAgICAgIyBJc3N1ZSA5MTM3OiBOYW1lZCBhcmd1bWVudCBjYWxsZWQgJ290aGVyJyBvciAnc2VsZicKLSAgICAgICAgIyBzaG91bGRuJ3QgYmUgdHJlYXRlZCBzcGVjaWFsbHkuCi0gICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQotICAgICAgICBvZC51cGRhdGUoc2VsZj0yMykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdzZWxmJywgMjMpXSkKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCi0gICAgICAgIG9kLnVwZGF0ZShvdGhlcj17fSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdvdGhlcicsIHt9KV0pCi0gICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQotICAgICAgICBvZC51cGRhdGUocmVkPTUsIGJsdWU9Niwgb3RoZXI9Nywgc2VsZj04KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChsaXN0KG9kLml0ZW1zKCkpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbKCdibHVlJywgNiksICgnb3RoZXInLCA3KSwgKCdyZWQnLCA1KSwgKCdzZWxmJywgOCldKQotCi0gICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZGlyZWN0IGNhbGxzIHRvIHVwZGF0ZSBkbyBub3QgY2xlYXIgcHJldmlvdXMgY29udGVudHMKLSAgICAgICAgIyBhZGQgdGhhdCB1cGRhdGVzIGl0ZW1zIGFyZSBub3QgbW92ZWQgdG8gdGhlIGVuZAotICAgICAgICBkID0gT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQ0KSwgKCdlJywgNTUpXSkKLSAgICAgICAgZC51cGRhdGUoWygnZScsIDUpLCAoJ2YnLCA2KV0sIGc9NywgZD00KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5pdGVtcygpKSwKLSAgICAgICAgICAgIFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpLCAoJ2cnLCA3KV0pCi0KLSAgICBkZWYgdGVzdF9hYmMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShPcmRlcmVkRGljdCgpLCBNdXRhYmxlTWFwcGluZykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoT3JkZXJlZERpY3QsIE11dGFibGVNYXBwaW5nKSkKLQotICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgotICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQotICAgICAgICBzaHVmZmxlKHBhaXJzKQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIGxlbihwYWlycykpCi0gICAgICAgIG9kLmNsZWFyKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQotCi0gICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKLSAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgZGVsIG9kWydhJ10KLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIG9kKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKLSAgICAgICAgICAgIGRlbCBvZFsnYSddCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnNbOjJdICsgcGFpcnNbMzpdKQotCi0gICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdChbKCdkJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdhJywgNCksICgnZScsIDUpXSkKLSAgICAgICAgb2RbJ2MnXSA9IDEwICAgICAgICAgICAjIGV4aXN0aW5nIGVsZW1lbnQKLSAgICAgICAgb2RbJ2YnXSA9IDIwICAgICAgICAgICAjIG5ldyBlbGVtZW50Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBbKCdkJywgMSksICgnYicsIDIpLCAoJ2MnLCAxMCksICgnYScsIDQpLCAoJ2UnLCA1KSwgKCdmJywgMjApXSkKLQotICAgIGRlZiB0ZXN0X2l0ZXJhdG9ycyhzZWxmKToKLSAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KLSAgICAgICAgc2h1ZmZsZShwYWlycykKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgW3RbMF0gZm9yIHQgaW4gcGFpcnNdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2Qua2V5cygpKSwgW3RbMF0gZm9yIHQgaW4gcGFpcnNdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QudmFsdWVzKCkpLCBbdFsxXSBmb3IgdCBpbiBwYWlyc10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChvZCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFt0WzBdIGZvciB0IGluIHJldmVyc2VkKHBhaXJzKV0pCi0KLSAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgotICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQotICAgICAgICBzaHVmZmxlKHBhaXJzKQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICB3aGlsZSBwYWlyczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9waXRlbSgpLCBwYWlycy5wb3AoKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgICAgICBvZC5wb3BpdGVtKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQotCi0gICAgZGVmIHRlc3RfcG9wKHNlbGYpOgotICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQotICAgICAgICBzaHVmZmxlKHBhaXJzKQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICBzaHVmZmxlKHBhaXJzKQotICAgICAgICB3aGlsZSBwYWlyczoKLSAgICAgICAgICAgIGssIHYgPSBwYWlycy5wb3AoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5wb3AoayksIHYpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgotICAgICAgICAgICAgb2QucG9wKCd4eXonKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9wKGssIDEyMzQ1KSwgMTIzNDUpCi0KLSAgICAgICAgIyBtYWtlIHN1cmUgcG9wIHN0aWxsIHdvcmtzIHdoZW4gX19taXNzaW5nX18gaXMgZGVmaW5lZAotICAgICAgICBjbGFzcyBNaXNzaW5nKE9yZGVyZWREaWN0KToKLSAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgotICAgICAgICAgICAgICAgIHJldHVybiAwCi0gICAgICAgIG0gPSBNaXNzaW5nKGE9MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYicsIDUpLCA1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucG9wKCdhJywgNiksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5wb3AoJ2EnLCA2KSwgNikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgICAgICBtLnBvcCgnYScpCi0KLSAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKLSAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KLSAgICAgICAgc2h1ZmZsZShwYWlycykKLSAgICAgICAgb2QxID0gT3JkZXJlZERpY3QocGFpcnMpCi0gICAgICAgIG9kMiA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kMSwgb2QyKSAgICAgICAgICAjIHNhbWUgb3JkZXIgaW1wbGllcyBlcXVhbGl0eQotICAgICAgICBwYWlycyA9IHBhaXJzWzI6XSArIHBhaXJzWzoyXQotICAgICAgICBvZDIgPSBPcmRlcmVkRGljdChwYWlycykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvZDEsIG9kMikgICAgICAgIyBkaWZmZXJlbnQgb3JkZXIgaW1wbGllcyBpbmVxdWFsaXR5Ci0gICAgICAgICMgY29tcGFyaXNvbiB0byByZWd1bGFyIGRpY3QgaXMgbm90IG9yZGVyIHNlbnNpdGl2ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kMSwgZGljdChvZDIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3Qob2QyKSwgb2QxKQotICAgICAgICAjIGRpZmZlcmVudCBsZW5ndGggaW1wbGllZCBpbmVxdWFsaXR5Ci0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2QxLCBPcmRlcmVkRGljdChwYWlyc1s6LTFdKSkKLQotICAgIGRlZiB0ZXN0X2NvcHlpbmcoc2VsZik6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBvcmRlcmVkIGRpY3RzIGFyZSBjb3B5YWJsZSwgZGVlcGNvcHlhYmxlLCBwaWNrbGFibGUsCi0gICAgICAgICMgYW5kIGhhdmUgYSByZXByL2V2YWwgcm91bmQtdHJpcAotICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICB1cGRhdGVfdGVzdCA9IE9yZGVyZWREaWN0KCkKLSAgICAgICAgdXBkYXRlX3Rlc3QudXBkYXRlKG9kKQotICAgICAgICBmb3IgaSwgZHVwIGluIGVudW1lcmF0ZShbCi0gICAgICAgICAgICAgICAgICAgIG9kLmNvcHkoKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5jb3B5KG9kKSwKLSAgICAgICAgICAgICAgICAgICAgY29weS5kZWVwY29weShvZCksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDApKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgMSkpLAotICAgICAgICAgICAgICAgICAgICBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKG9kLCAyKSksCi0gICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2QsIDMpKSwKLSAgICAgICAgICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgLTEpKSwKLSAgICAgICAgICAgICAgICAgICAgZXZhbChyZXByKG9kKSksCi0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZV90ZXN0LAotICAgICAgICAgICAgICAgICAgICBPcmRlcmVkRGljdChvZCksCi0gICAgICAgICAgICAgICAgICAgIF0pOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGR1cCBpcyBub3Qgb2QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGR1cCwgb2QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZHVwLml0ZW1zKCkpLCBsaXN0KG9kLml0ZW1zKCkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZHVwKSwgbGVuKG9kKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkdXApLCB0eXBlKG9kKSkKLQotICAgIGRlZiB0ZXN0X3lhbWxfbGlua2FnZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhhdCBfX3JlZHVjZV9fIGlzIHNldHVwIGluIGEgd2F5IHRoYXQgc3VwcG9ydHMgUHlZQU1MJ3MgZHVtcCgpIGZlYXR1cmUuCi0gICAgICAgICMgSW4geWFtbCwgbGlzdHMgYXJlIG5hdGl2ZSBidXQgdHVwbGVzIGFyZSBub3QuCi0gICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCi0gICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCi0gICAgICAgICMgeWFtbC5kdW1wKG9kKSAtLT4KLSAgICAgICAgIyAnISFweXRob24vb2JqZWN0L2FwcGx5Ol9fbWFpbl9fLk9yZGVyZWREaWN0XG4tIC0gW2EsIDFdXG4gIC0gW2IsIDJdXG4nCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhbGwodHlwZShwYWlyKT09bGlzdCBmb3IgcGFpciBpbiBvZC5fX3JlZHVjZV9fKClbMV0pKQotCi0gICAgZGVmIHRlc3RfcmVkdWNlX25vdF90b29fZmF0KHNlbGYpOgotICAgICAgICAjIGRvIG5vdCBzYXZlIGluc3RhbmNlIGRpY3Rpb25hcnkgaWYgbm90IG5lZWRlZAotICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZC5fX3JlZHVjZV9fKCkpLCAyKQotICAgICAgICBvZC54ID0gMTAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QuX19yZWR1Y2VfXygpKSwgMykKLQotICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6Ci0gICAgICAgIG9kID0gT3JkZXJlZERpY3QoWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIob2QpLAotICAgICAgICAgICAgIk9yZGVyZWREaWN0KFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXSkiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwocmVwcihvZCkpLCBvZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE9yZGVyZWREaWN0KCkpLCAiT3JkZXJlZERpY3QoKSIpCi0KLSAgICBkZWYgdGVzdF9yZXByX3JlY3Vyc2l2ZShzZWxmKToKLSAgICAgICAgIyBTZWUgaXNzdWUgIzk4MjYKLSAgICAgICAgb2QgPSBPcmRlcmVkRGljdC5mcm9ta2V5cygnYWJjJykKLSAgICAgICAgb2RbJ3gnXSA9IG9kCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvZCksCi0gICAgICAgICAgICAiT3JkZXJlZERpY3QoWygnYScsIE5vbmUpLCAoJ2InLCBOb25lKSwgKCdjJywgTm9uZSksICgneCcsIC4uLildKSIpCi0KLSAgICBkZWYgdGVzdF9zZXRkZWZhdWx0KHNlbGYpOgotICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQotICAgICAgICBzaHVmZmxlKHBhaXJzKQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQotICAgICAgICBwYWlyX29yZGVyID0gbGlzdChvZC5pdGVtcygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnNldGRlZmF1bHQoJ2EnLCAxMCksIDMpCi0gICAgICAgICMgbWFrZSBzdXJlIG9yZGVyIGRpZG4ndCBjaGFuZ2UKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBwYWlyX29yZGVyKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kLnNldGRlZmF1bHQoJ3gnLCAxMCksIDEwKQotICAgICAgICAjIG1ha2Ugc3VyZSAneCcgaXMgYWRkZWQgdG8gdGhlIGVuZAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSlbLTFdLCAoJ3gnLCAxMCkpCi0KLSAgICAgICAgIyBtYWtlIHN1cmUgc2V0ZGVmYXVsdCBzdGlsbCB3b3JrcyB3aGVuIF9fbWlzc2luZ19fIGlzIGRlZmluZWQKLSAgICAgICAgY2xhc3MgTWlzc2luZyhPcmRlcmVkRGljdCk6Ci0gICAgICAgICAgICBkZWYgX19taXNzaW5nX18oc2VsZiwga2V5KToKLSAgICAgICAgICAgICAgICByZXR1cm4gMAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1pc3NpbmcoKS5zZXRkZWZhdWx0KDUsIDkpLCA5KQotCi0gICAgZGVmIHRlc3RfcmVpbnNlcnQoc2VsZik6Ci0gICAgICAgICMgR2l2ZW4gaW5zZXJ0IGEsIGluc2VydCBiLCBkZWxldGUgYSwgcmUtaW5zZXJ0IGEsCi0gICAgICAgICMgdmVyaWZ5IHRoYXQgYSBpcyBub3cgbGF0ZXIgdGhhbiBiLgotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCkKLSAgICAgICAgb2RbJ2EnXSA9IDEKLSAgICAgICAgb2RbJ2InXSA9IDIKLSAgICAgICAgZGVsIG9kWydhJ10KLSAgICAgICAgb2RbJ2EnXSA9IDEKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdiJywgMiksICgnYScsIDEpXSkKLQotICAgIGRlZiB0ZXN0X21vdmVfdG9fZW5kKHNlbGYpOgotICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKCdhYmNkZScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2FiY2RlJykpCi0gICAgICAgIG9kLm1vdmVfdG9fZW5kKCdjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnYWJkZWMnKSkKLSAgICAgICAgb2QubW92ZV90b19lbmQoJ2MnLCAwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdjYWJkZScpKQotICAgICAgICBvZC5tb3ZlX3RvX2VuZCgnYycsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2NhYmRlJykpCi0gICAgICAgIG9kLm1vdmVfdG9fZW5kKCdlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnY2FiZGUnKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgICAgICBvZC5tb3ZlX3RvX2VuZCgneCcpCi0KLSAgICBkZWYgdGVzdF9zaXplb2Yoc2VsZik6Ci0gICAgICAgICMgV2ltcHkgdGVzdDogSnVzdCB2ZXJpZnkgdGhlIHJlcG9ydGVkIHNpemUgaXMgbGFyZ2VyIHRoYW4gYSByZWd1bGFyIGRpY3QKLSAgICAgICAgZCA9IGRpY3QoYT0xKQotICAgICAgICBvZCA9IE9yZGVyZWREaWN0KCoqZCkKLSAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHN5cy5nZXRzaXplb2Yob2QpLCBzeXMuZ2V0c2l6ZW9mKGQpKQotCi0gICAgZGVmIHRlc3Rfb3ZlcnJpZGVfdXBkYXRlKHNlbGYpOgotICAgICAgICAjIFZlcmlmeSB0aGF0IHN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHVwZGF0ZSgpIHdpdGhvdXQgYnJlYWtpbmcgX19pbml0X18oKQotICAgICAgICBjbGFzcyBNeU9EKE9yZGVyZWREaWN0KToKLSAgICAgICAgICAgIGRlZiB1cGRhdGUoc2VsZiwgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCkKLSAgICAgICAgaXRlbXMgPSBbKCdhJywgMSksICgnYycsIDMpLCAoJ2InLCAyKV0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KE15T0QoaXRlbXMpLml0ZW1zKCkpLCBpdGVtcykKLQotY2xhc3MgR2VuZXJhbE1hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6Ci0gICAgdHlwZTJ0ZXN0ID0gT3JkZXJlZERpY3QKLQotICAgIGRlZiB0ZXN0X3BvcGl0ZW0oc2VsZik6Ci0gICAgICAgIGQgPSBzZWxmLl9lbXB0eV9tYXBwaW5nKCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGQucG9waXRlbSkKLQotY2xhc3MgTXlPcmRlcmVkRGljdChPcmRlcmVkRGljdCk6Ci0gICAgcGFzcwotCi1jbGFzcyBTdWJjbGFzc01hcHBpbmdUZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6Ci0gICAgdHlwZTJ0ZXN0ID0gTXlPcmRlcmVkRGljdAotCi0gICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKLSAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3BpdGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoYyksIHsnYSc6IDUsICdiJzogMiwgJ2MnOiAxLCAnZCc6IDEsICdyJzoyIH0pCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIyBSdW4gdGVzdHMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLWltcG9ydCBkb2N0ZXN0LCBjb2xsZWN0aW9ucwotCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgTmFtZWRUdXBsZURvY3MgPSBkb2N0ZXN0LkRvY1Rlc3RTdWl0ZShtb2R1bGU9Y29sbGVjdGlvbnMpCiAgICAgdGVzdF9jbGFzc2VzID0gW1Rlc3ROYW1lZFR1cGxlLCBOYW1lZFR1cGxlRG9jcywgVGVzdE9uZVRyaWNrUG9ueUFCQ3MsCi0gICAgICAgICAgICAgICAgICAgIFRlc3RDb2xsZWN0aW9uQUJDcywgVGVzdENvdW50ZXIsIFRlc3RDaGFpbk1hcCwKLSAgICAgICAgICAgICAgICAgICAgVGVzdE9yZGVyZWREaWN0LCBHZW5lcmFsTWFwcGluZ1Rlc3RzLCBTdWJjbGFzc01hcHBpbmdUZXN0c10KKyAgICAgICAgICAgICAgICAgICAgVGVzdENvbGxlY3Rpb25BQkNzLCBUZXN0Q291bnRlciwgVGVzdENoYWluTWFwXQogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChjb2xsZWN0aW9ucywgdmVyYm9zZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weSBiL0xpYi90ZXN0L3Rlc3RfY29sb3JzeXMucHkKaW5kZXggZTQwNWI4YS4uYTI0ZTNhZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb2xvcnN5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbG9yc3lzLnB5CkBAIC0xLDQgKzEsNCBAQAotaW1wb3J0IHVuaXR0ZXN0LCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCB1bml0dGVzdAogaW1wb3J0IGNvbG9yc3lzCiAKIGRlZiBmcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApOgpAQCAtNjksOCArNjksMzIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwoaGxzLCBjb2xvcnN5cy5yZ2JfdG9faGxzKCpyZ2IpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbChyZ2IsIGNvbG9yc3lzLmhsc190b19yZ2IoKmhscykpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KENvbG9yc3lzVGVzdCkKKyAgICBkZWYgdGVzdF95aXFfcm91bmR0cmlwKHNlbGYpOgorICAgICAgICBmb3IgciBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICBmb3IgZyBpbiBmcmFuZ2UoMC4wLCAxLjAsIDAuMik6CisgICAgICAgICAgICAgICAgZm9yIGIgaW4gZnJhbmdlKDAuMCwgMS4wLCAwLjIpOgorICAgICAgICAgICAgICAgICAgICByZ2IgPSAociwgZywgYikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcmlwbGVFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc3lzLnlpcV90b19yZ2IoKmNvbG9yc3lzLnJnYl90b195aXEoKnJnYikpCisgICAgICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3lpcV92YWx1ZXMoc2VsZik6CisgICAgICAgIHZhbHVlcyA9IFsKKyAgICAgICAgICAgICMgcmdiLCB5aXEKKyAgICAgICAgICAgICgoMC4wLCAwLjAsIDAuMCksICgwLjAsIDAuMCwgMC4wKSksICMgYmxhY2sKKyAgICAgICAgICAgICgoMC4wLCAwLjAsIDEuMCksICgwLjExLCAtMC4zMjE3LCAwLjMxMjEpKSwgIyBibHVlCisgICAgICAgICAgICAoKDAuMCwgMS4wLCAwLjApLCAoMC41OSwgLTAuMjc3MywgLTAuNTI1MSkpLCAjIGdyZWVuCisgICAgICAgICAgICAoKDAuMCwgMS4wLCAxLjApLCAoMC43LCAtMC41OTksIC0wLjIxMykpLCAjIGN5YW4KKyAgICAgICAgICAgICgoMS4wLCAwLjAsIDAuMCksICgwLjMsIDAuNTk5LCAwLjIxMykpLCAjIHJlZAorICAgICAgICAgICAgKCgxLjAsIDAuMCwgMS4wKSwgKDAuNDEsIDAuMjc3MywgMC41MjUxKSksICMgcHVycGxlCisgICAgICAgICAgICAoKDEuMCwgMS4wLCAwLjApLCAoMC44OSwgMC4zMjE3LCAtMC4zMTIxKSksICMgeWVsbG93CisgICAgICAgICAgICAoKDEuMCwgMS4wLCAxLjApLCAoMS4wLCAwLjAsIDAuMCkpLCAjIHdoaXRlCisgICAgICAgICAgICAoKDAuNSwgMC41LCAwLjUpLCAoMC41LCAwLjAsIDAuMCkpLCAjIGdyZXkKKyAgICAgICAgXQorICAgICAgICBmb3IgKHJnYiwgeWlxKSBpbiB2YWx1ZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRyaXBsZUVxdWFsKHlpcSwgY29sb3JzeXMucmdiX3RvX3lpcSgqcmdiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJpcGxlRXF1YWwocmdiLCBjb2xvcnN5cy55aXFfdG9fcmdiKCp5aXEpKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBhcmUucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBhcmUucHkKaW5kZXggZWUzNzk0YS4uYTY2MzgzMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21wYXJlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGFyZS5weQpAQCAtNDgsOCArNDgsNjkgQEAKICAgICBkZWYgdGVzdF9uZV9kZWZhdWx0c190b19ub3RfZXEoc2VsZik6CiAgICAgICAgIGEgPSBDbXAoMSkKICAgICAgICAgYiA9IENtcCgxKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBiKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEgIT0gYikKKyAgICAgICAgYyA9IENtcCgyKQorICAgICAgICBzZWxmLmFzc2VydElzKGEgPT0gYiwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhhICE9IGIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKGEgIT0gYywgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X25lX2hpZ2hfcHJpb3JpdHkoc2VsZik6CisgICAgICAgICIiIm9iamVjdC5fX25lX18oKSBzaG91bGQgYWxsb3cgcmVmbGVjdGVkIF9fbmVfXygpIHRvIGJlIHRyaWVkIiIiCisgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgY2xhc3MgTGVmdDoKKyAgICAgICAgICAgICMgSW5oZXJpdHMgb2JqZWN0Ll9fbmVfXygpCisgICAgICAgICAgICBkZWYgX19lcV9fKCphcmdzKToKKyAgICAgICAgICAgICAgICBjYWxscy5hcHBlbmQoJ0xlZnQuX19lcV9fJykKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKyAgICAgICAgY2xhc3MgUmlnaHQ6CisgICAgICAgICAgICBkZWYgX19lcV9fKCphcmdzKToKKyAgICAgICAgICAgICAgICBjYWxscy5hcHBlbmQoJ1JpZ2h0Ll9fZXFfXycpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19uZV9fKCphcmdzKToKKyAgICAgICAgICAgICAgICBjYWxscy5hcHBlbmQoJ1JpZ2h0Ll9fbmVfXycpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIExlZnQoKSAhPSBSaWdodCgpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChjYWxscywgWydMZWZ0Ll9fZXFfXycsICdSaWdodC5fX25lX18nXSkKKworICAgIGRlZiB0ZXN0X25lX2xvd19wcmlvcml0eShzZWxmKToKKyAgICAgICAgIiIib2JqZWN0Ll9fbmVfXygpIHNob3VsZCBub3QgaW52b2tlIHJlZmxlY3RlZCBfX2VxX18oKSIiIgorICAgICAgICBjYWxscyA9IFtdCisgICAgICAgIGNsYXNzIEJhc2U6CisgICAgICAgICAgICAjIEluaGVyaXRzIG9iamVjdC5fX25lX18oKQorICAgICAgICAgICAgZGVmIF9fZXFfXygqYXJncyk6CisgICAgICAgICAgICAgICAgY2FsbHMuYXBwZW5kKCdCYXNlLl9fZXFfXycpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIGNsYXNzIERlcml2ZWQoQmFzZSk6ICAjIFN1YmNsYXNzaW5nIGZvcmNlcyBoaWdoZXIgcHJpb3JpdHkKKyAgICAgICAgICAgIGRlZiBfX2VxX18oKmFyZ3MpOgorICAgICAgICAgICAgICAgIGNhbGxzLmFwcGVuZCgnRGVyaXZlZC5fX2VxX18nKQorICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgZGVmIF9fbmVfXygqYXJncyk6CisgICAgICAgICAgICAgICAgY2FsbHMuYXBwZW5kKCdEZXJpdmVkLl9fbmVfXycpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgIEJhc2UoKSAhPSBEZXJpdmVkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRTZXF1ZW5jZUVxdWFsKGNhbGxzLCBbJ0Rlcml2ZWQuX19uZV9fJywgJ0Jhc2UuX19lcV9fJ10pCisKKyAgICBkZWYgdGVzdF9vdGhlcl9kZWxlZ2F0aW9uKHNlbGYpOgorICAgICAgICAiIiJObyBkZWZhdWx0IGRlbGVnYXRpb24gYmV0d2VlbiBvcGVyYXRpb25zIGV4Y2VwdCBfX25lX18oKSIiIgorICAgICAgICBvcHMgPSAoCisgICAgICAgICAgICAoJ19fZXFfXycsIGxhbWJkYSBhLCBiOiBhID09IGIpLAorICAgICAgICAgICAgKCdfX2x0X18nLCBsYW1iZGEgYSwgYjogYSA8IGIpLAorICAgICAgICAgICAgKCdfX2xlX18nLCBsYW1iZGEgYSwgYjogYSA8PSBiKSwKKyAgICAgICAgICAgICgnX19ndF9fJywgbGFtYmRhIGEsIGI6IGEgPiBiKSwKKyAgICAgICAgICAgICgnX19nZV9fJywgbGFtYmRhIGEsIGI6IGEgPj0gYiksCisgICAgICAgICkKKyAgICAgICAgZm9yIG5hbWUsIGZ1bmMgaW4gb3BzOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmFtZSk6CisgICAgICAgICAgICAgICAgZGVmIHVuZXhwZWN0ZWQoKmFyZ3MpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ1VuZXhwZWN0ZWQgb3BlcmF0b3IgbWV0aG9kIGNhbGxlZCcpCisgICAgICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICAgICAgX19uZV9fID0gdW5leHBlY3RlZAorICAgICAgICAgICAgICAgIGZvciBvdGhlciwgXyBpbiBvcHM6CisgICAgICAgICAgICAgICAgICAgIGlmIG90aGVyICE9IG5hbWU6CisgICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKEMsIG90aGVyLCB1bmV4cGVjdGVkKQorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ19fZXFfXyc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZnVuYyhDKCksIG9iamVjdCgpKSwgRmFsc2UpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmdW5jLCBDKCksIG9iamVjdCgpKQogCiAgICAgZGVmIHRlc3RfaXNzdWVfMTM5MyhzZWxmKToKICAgICAgICAgeCA9IGxhbWJkYTogTm9uZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jb21waWxlLnB5CmluZGV4IGNjZDA4ZGIuLmVlMjhjYTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29tcGlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGUucHkKQEAgLTEsOCArMSwxMSBAQAoraW1wb3J0IG1hdGgKK2ltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgX2FzdAoraW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdHlwZXMKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBzY3JpcHRfaGVscGVyCiAKIGNsYXNzIFRlc3RTcGVjaWZpY3ModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0zMDMsOSArMzA2LDI2IEBACiAgICAgICAgIGwgPSBsYW1iZGE6ICJmb28iCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGwuX19kb2NfXykKIAotIyMgICAgIGRlZiB0ZXN0X3VuaWNvZGVfZW5jb2Rpbmcoc2VsZik6Ci0jIyAgICAgICAgIGNvZGUgPSAiIyAtKi0gY29kaW5nOiB1dGYtOCAtKi1cbnBhc3NcbiIKLSMjICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGNvbXBpbGUsIGNvZGUsICJ0bXAiLCAiZXhlYyIpCisgICAgZGVmIHRlc3RfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIGNvZGUgPSBiJyMgLSotIGNvZGluZzogYmFkZW5jb2RpbmcgLSotXG5wYXNzXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBjb21waWxlLCBjb2RlLCAndG1wJywgJ2V4ZWMnKQorICAgICAgICBjb2RlID0gJyMgLSotIGNvZGluZzogYmFkZW5jb2RpbmcgLSotXG4iXHhjMlx4YTQiXG4nCisgICAgICAgIGNvbXBpbGUoY29kZSwgJ3RtcCcsICdleGVjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnXHhjMlx4YTQnKQorICAgICAgICBjb2RlID0gJyJceGMyXHhhNCJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnXHhjMlx4YTQnKQorICAgICAgICBjb2RlID0gYiciXHhjMlx4YTQiXG4nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgJ1x4YTQnKQorICAgICAgICBjb2RlID0gYicjIC0qLSBjb2Rpbmc6IGxhdGluMSAtKi1cbiJceGMyXHhhNCJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnXHhjMlx4YTQnKQorICAgICAgICBjb2RlID0gYicjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuIlx4YzJceGE0IlxuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksICdceGE0JykKKyAgICAgICAgY29kZSA9IGInIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuIlx4YzJceGE0IlxuJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksICdceGMyXHUyMGFjJykKKyAgICAgICAgY29kZSA9ICciIiJcXFxuIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuXHhjMlx4YTQiIiJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuXHhjMlx4YTQnKQorICAgICAgICBjb2RlID0gYiciIiJcXFxuIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuXHhjMlx4YTQiIiJcbicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAnIyAtKi0gY29kaW5nOiBpc284ODU5LTE1IC0qLVxuXHhhNCcpCiAKICAgICBkZWYgdGVzdF9zdWJzY3JpcHRzKHNlbGYpOgogICAgICAgICAjIFNGIGJ1ZyAxNDQ4ODA0CkBAIC00NzQsNiArNDk0LDI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW52YWxpZFNpbmdsZSgnZigpXG54eSAjIGJsYWhcbmJsYWgoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW52YWxpZFNpbmdsZSgneCA9IDUgIyBjb21tZW50XG54ID0gNlxuJykKIAorICAgIGRlZiB0ZXN0X3BhcnRpY3VsYXJseV9ldmlsX3VuZGVjb2RhYmxlKHNlbGYpOgorICAgICAgICAjIElzc3VlIDI0MDIyCisgICAgICAgIHNyYyA9IGInMDAwMFx4MDBcbjAwMDAwMDAwMDAwXG5ceDAwXG5ceDllXG4nCisgICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZDoKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGQsICJiYWQucHkiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShzcmMpCisgICAgICAgICAgICByZXMgPSBzY3JpcHRfaGVscGVyLnJ1bl9weXRob25fdW50aWxfZW5kKGZuKVswXQorICAgICAgICBzZWxmLmFzc2VydEluKGIiTm9uLVVURi04IiwgcmVzLmVycikKKworICAgIGRlZiB0ZXN0X3lldF9tb3JlX2V2aWxfc3RpbGxfdW5kZWNvZGFibGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzI1Mzg4CisgICAgICAgIHNyYyA9IGIiI1x4MDBcbiNceGZkXG4iCisgICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZDoKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGQsICJiYWQucHkiKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAid2IiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZShzcmMpCisgICAgICAgICAgICByZXMgPSBzY3JpcHRfaGVscGVyLnJ1bl9weXRob25fdW50aWxfZW5kKGZuKVswXQorICAgICAgICBzZWxmLmFzc2VydEluKGIiTm9uLVVURi04IiwgcmVzLmVycikKKwogICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2NvbXBpbGVyX3JlY3Vyc2lvbl9saW1pdChzZWxmKToKICAgICAgICAgIyBFeHBlY3RlZCBsaW1pdCBpcyBzeXMuZ2V0cmVjdXJzaW9ubGltaXQoKSAqIHRoZSBzY2FsaW5nIGZhY3RvcgpAQCAtNTAwLDkgKzU0MCw2NSBAQAogICAgICAgICBjaGVja19saW1pdCgiYSIsICJbMF0iKQogICAgICAgICBjaGVja19saW1pdCgiYSIsICIqYSIpCiAKKyAgICBkZWYgdGVzdF9udWxsX3Rlcm1pbmF0ZWQoc2VsZik6CisgICAgICAgICMgVGhlIHNvdXJjZSBjb2RlIGlzIG51bGwtdGVybWluYXRlZCBpbnRlcm5hbGx5LCBidXQgYnl0ZXMtbGlrZQorICAgICAgICAjIG9iamVjdHMgYXJlIGFjY2VwdGVkLCB3aGljaCBjb3VsZCBiZSBub3QgdGVybWluYXRlZC4KKyAgICAgICAgIyBFeGNlcHRpb24gY2hhbmdlZCBmcm9tIFR5cGVFcnJvciB0byBWYWx1ZUVycm9yIGluIDMuNQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCAiY2Fubm90IGNvbnRhaW4gbnVsbCIpOgorICAgICAgICAgICAgY29tcGlsZSgiMTIzXHgwMCIsICI8ZHVtbXk+IiwgImV2YWwiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCAiY2Fubm90IGNvbnRhaW4gbnVsbCIpOgorICAgICAgICAgICAgY29tcGlsZShtZW1vcnl2aWV3KGIiMTIzXHgwMCIpLCAiPGR1bW15PiIsICJldmFsIikKKyAgICAgICAgY29kZSA9IGNvbXBpbGUobWVtb3J5dmlldyhiIjEyM1x4MDAiKVsxOi0xXSwgIjxkdW1teT4iLCAiZXZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChjb2RlKSwgMjMpCisgICAgICAgIGNvZGUgPSBjb21waWxlKG1lbW9yeXZpZXcoYiIxMjM0IilbMTotMV0sICI8ZHVtbXk+IiwgImV2YWwiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoY29kZSksIDIzKQorICAgICAgICBjb2RlID0gY29tcGlsZShtZW1vcnl2aWV3KGIiJDIzJCIpWzE6LTFdLCAiPGR1bW15PiIsICJldmFsIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGNvZGUpLCAyMykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RTcGVjaWZpY3MpCisgICAgICAgICMgQWxzbyB0ZXN0IHdoZW4gZXZhbCgpIGFuZCBleGVjKCkgZG8gdGhlIGNvbXBpbGF0aW9uIHN0ZXAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKG1lbW9yeXZpZXcoYiIxMjM0IilbMTotMV0pLCAyMykKKyAgICAgICAgbmFtZXNwYWNlID0gZGljdCgpCisgICAgICAgIGV4ZWMobWVtb3J5dmlldyhiImF4ID0gMTIzIilbMTotMV0sIG5hbWVzcGFjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lc3BhY2VbJ3gnXSwgMTIpCisKKworY2xhc3MgVGVzdFN0YWNrU2l6ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGVzZSB0ZXN0cyBjaGVjayB0aGF0IHRoZSBjb21wdXRlZCBzdGFjayBzaXplIGZvciBhIGNvZGUgb2JqZWN0CisgICAgIyBzdGF5cyB3aXRoaW4gcmVhc29uYWJsZSBib3VuZHMgKHNlZSBpc3N1ZSAjMjE1MjMgZm9yIGFuIGV4YW1wbGUKKyAgICAjIGR5c2Z1bmN0aW9uKS4KKyAgICBOID0gMTAwCisKKyAgICBkZWYgY2hlY2tfc3RhY2tfc2l6ZShzZWxmLCBjb2RlKToKKyAgICAgICAgIyBUbyBhc3NlcnQgdGhhdCB0aGUgYWxsZWdlZCBzdGFjayBzaXplIGlzIG5vdCBPKE4pLCB3ZQorICAgICAgICAjIGNoZWNrIHRoYXQgaXQgaXMgc21hbGxlciB0aGFuIGxvZyhOKS4KKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb2RlLCBzdHIpOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoY29kZSwgIjxmb28+IiwgInNpbmdsZSIpCisgICAgICAgIG1heF9zaXplID0gbWF0aC5jZWlsKG1hdGgubG9nKGxlbihjb2RlLmNvX2NvZGUpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwoY29kZS5jb19zdGFja3NpemUsIG1heF9zaXplKQorCisgICAgZGVmIHRlc3RfYW5kKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N0YWNrX3NpemUoInggYW5kICIgKiBzZWxmLk4gKyAieCIpCisKKyAgICBkZWYgdGVzdF9vcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdGFja19zaXplKCJ4IG9yICIgKiBzZWxmLk4gKyAieCIpCisKKyAgICBkZWYgdGVzdF9hbmRfb3Ioc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3RhY2tfc2l6ZSgieCBhbmQgeCBvciAiICogc2VsZi5OICsgIngiKQorCisgICAgZGVmIHRlc3RfY2hhaW5lZF9jb21wYXJpc29uKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3N0YWNrX3NpemUoInggPCAiICogc2VsZi5OICsgIngiKQorCisgICAgZGVmIHRlc3RfaWZfZWxzZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zdGFja19zaXplKCJ4IGlmIHggZWxzZSAiICogc2VsZi5OICsgIngiKQorCisgICAgZGVmIHRlc3RfYmlub3Aoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc3RhY2tfc2l6ZSgieCArICIgKiBzZWxmLk4gKyAieCIpCisKKyAgICBkZWYgdGVzdF9mdW5jX2FuZChzZWxmKToKKyAgICAgICAgY29kZSA9ICJkZWYgZih4KTpcbiIKKyAgICAgICAgY29kZSArPSAiICAgeCBhbmQgeFxuIiAqIHNlbGYuTgorICAgICAgICBzZWxmLmNoZWNrX3N0YWNrX3NpemUoY29kZSkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBpbGVhbGwucHkKaW5kZXggMDUwNWM1Mi4uN2M2MWZhMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21waWxlYWxsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGlsZWFsbC5weQpAQCAtMSwxMSArMSwxMSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IGNvbXBpbGVhbGwKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IG9zCitpbXBvcnQgcGF0aGxpYgogaW1wb3J0IHB5X2NvbXBpbGUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCBzdHJ1Y3QKLWltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTE4LDExICsxOCwxMSBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKLSAgICAgICAgc2VsZi5iY19wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCisgICAgICAgIHNlbGYuYmNfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLnNvdXJjZV9wYXRoLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICBmaWxlLndyaXRlKCd4ID0gMTIzXG4nKQogICAgICAgICBzZWxmLnNvdXJjZV9wYXRoMiA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0Mi5weScpCi0gICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDIpCisgICAgICAgIHNlbGYuYmNfcGF0aDIgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMikKICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYuc291cmNlX3BhdGgyKQogICAgICAgICBzZWxmLnN1YmRpcmVjdG9yeSA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ19zdWJkaXInKQogICAgICAgICBvcy5ta2RpcihzZWxmLnN1YmRpcmVjdG9yeSkKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuYmNfcGF0aCwgJ3JiJykgYXMgZmlsZToKICAgICAgICAgICAgIGRhdGEgPSBmaWxlLnJlYWQoOCkKICAgICAgICAgbXRpbWUgPSBpbnQob3Muc3RhdChzZWxmLnNvdXJjZV9wYXRoKS5zdF9tdGltZSkKLSAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wLmdldF9tYWdpYygpLCBtdGltZSkKKyAgICAgICAgY29tcGFyZSA9IHN0cnVjdC5wYWNrKCc8NHNsJywgaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSLCBtdGltZSkKICAgICAgICAgcmV0dXJuIGRhdGEsIGNvbXBhcmUKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzdGF0JyksICd0ZXN0IG5lZWRzIG9zLnN0YXQoKScpCkBAIC01Niw3ICs1Niw4IEBACiAKICAgICBkZWYgdGVzdF9tdGltZShzZWxmKToKICAgICAgICAgIyBUZXN0IGEgY2hhbmdlIGluIG10aW1lIGxlYWRzIHRvIGEgbmV3IC5weWMuCi0gICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcC5nZXRfbWFnaWMoKSwgMSkpCisgICAgICAgIHNlbGYucmVjcmVhdGlvbl9jaGVjayhzdHJ1Y3QucGFjaygnPDRzbCcsIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKQogCiAgICAgZGVmIHRlc3RfbWFnaWNfbnVtYmVyKHNlbGYpOgogICAgICAgICAjIFRlc3QgYSBjaGFuZ2UgaW4gbXRpbWUgbGVhZHMgdG8gYSBuZXcgLnB5Yy4KQEAgLTk2LDE0ICs5NywxNCBAQAogICAgICAgICAjIGludGVycHJldGVyJ3MgY3JlYXRlcyB0aGUgY29ycmVjdCBmaWxlIG5hbWVzCiAgICAgICAgIG9wdGltaXplID0gMSBpZiBfX2RlYnVnX18gZWxzZSAwCiAgICAgICAgIGNvbXBpbGVhbGwuY29tcGlsZV9kaXIoc2VsZi5kaXJlY3RvcnksIHF1aWV0PVRydWUsIG9wdGltaXplPW9wdGltaXplKQotICAgICAgICBjYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkKSkKLSAgICAgICAgY2FjaGVkMiA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKKyAgICAgICAgY2FjaGVkMiA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdfb3ZlcnJpZGU9bm90IG9wdGltaXplKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY2FjaGVkMikpCi0gICAgICAgIGNhY2hlZDMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5zb3VyY2VfcGF0aDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19vdmVycmlkZT1ub3Qgb3B0aW1pemUpCisgICAgICAgIGNhY2hlZDMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnNvdXJjZV9wYXRoMywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX292ZXJyaWRlPW5vdCBvcHRpbWl6ZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGNhY2hlZDMpKQogCiAKQEAgLTEzMyw2ICsxMzQsMzMgQEAKIGNsYXNzIENvbW1hbmRMaW5lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgY29tcGlsZWFsbCdzIENMSS4iIiIKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGZvciBwYXRoIGluIGZpbHRlcihvcy5wYXRoLmlzZGlyLCBzeXMucGF0aCk6CisgICAgICAgICAgICBkaXJlY3RvcnlfY3JlYXRlZCA9IEZhbHNlCisgICAgICAgICAgICBkaXJlY3RvcnkgPSBwYXRobGliLlBhdGgocGF0aCkgLyAnX19weWNhY2hlX18nCisgICAgICAgICAgICBwYXRoID0gZGlyZWN0b3J5IC8gJ3Rlc3QudHJ5JworICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGlmIG5vdCBkaXJlY3RvcnkuaXNfZGlyKCk6CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS5ta2RpcigpCisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeV9jcmVhdGVkID0gVHJ1ZQorICAgICAgICAgICAgICAgIHdpdGggcGF0aC5vcGVuKCd3JykgYXMgZmlsZToKKyAgICAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgnIyBmb3IgdGVzdF9jb21waWxlYWxsJykKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHN5c19wYXRoX3dyaXRhYmxlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdHIocGF0aCkpCisgICAgICAgICAgICAgICAgaWYgZGlyZWN0b3J5X2NyZWF0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yeS5ybWRpcigpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzeXNfcGF0aF93cml0YWJsZSA9IFRydWUKKyAgICAgICAgY2xzLl9zeXNfcGF0aF93cml0YWJsZSA9IHN5c19wYXRoX3dyaXRhYmxlCisKKyAgICBkZWYgX3NraXBfaWZfc3lzX3BhdGhfbm90X3dyaXRhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3Qgc2VsZi5fc3lzX3BhdGhfd3JpdGFibGU6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnbm90IGFsbCBlbnRyaWVzIG9uIHN5cy5wYXRoIGFyZSB3cml0YWJsZScpCisKICAgICBkZWYgX2dldF9ydW5fYXJncyhzZWxmLCBhcmdzKToKICAgICAgICAgaW50ZXJwX2FyZ3MgPSBbJy1TJ10KICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplOgpAQCAtMTUxLDE0ICsxNzksMTYgQEAKICAgICAgICAgcmV0dXJuIHJjLCBvdXQsIGVycgogCiAgICAgZGVmIGFzc2VydENvbXBpbGVkKHNlbGYsIGZuKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShmbikpKQorICAgICAgICBwYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZm4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhwYXRoKSkKIAogICAgIGRlZiBhc3NlcnROb3RDb21waWxlZChzZWxmLCBmbik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZuKSkpCisgICAgICAgIHBhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhwYXRoKSkKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYuX2NsZWFudXApCiAgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gdGVtcGZpbGUubWtkdGVtcCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnJtdHJlZSwgc2VsZi5kaXJlY3RvcnkpCiAgICAgICAgIHNlbGYucGtnZGlyID0gb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnZm9vJykKICAgICAgICAgb3MubWtkaXIoc2VsZi5wa2dkaXIpCiAgICAgICAgIHNlbGYucGtnZGlyX2NhY2hlZGlyID0gb3MucGF0aC5qb2luKHNlbGYucGtnZGlyLCAnX19weWNhY2hlX18nKQpAQCAtMTY2LDExICsxOTYsOSBAQAogICAgICAgICBzZWxmLmluaXRmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5wa2dkaXIsICdfX2luaXRfXycsICcnKQogICAgICAgICBzZWxmLmJhcmZuID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLnBrZ2RpciwgJ2JhcicsICcnKQogCi0gICAgZGVmIF9jbGVhbnVwKHNlbGYpOgotICAgICAgICBzdXBwb3J0LnJtdHJlZShzZWxmLmRpcmVjdG9yeSkKLQogICAgIGRlZiB0ZXN0X25vX2FyZ3NfY29tcGlsZXNfcGF0aChzZWxmKToKICAgICAgICAgIyBOb3RlIHRoYXQgLWwgaXMgaW1wbGllZCBmb3IgdGhlIG5vIGFyZ3MgY2FzZS4KKyAgICAgICAgc2VsZi5fc2tpcF9pZl9zeXNfcGF0aF9ub3Rfd3JpdGFibGUoKQogICAgICAgICBiYXpmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5kaXJlY3RvcnksICdiYXonLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRSdW5PSyhQWVRIT05QQVRIPXNlbGYuZGlyZWN0b3J5KQogICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkKGJhemZuKQpAQCAtMTc4LDkgKzIwNiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdENvbXBpbGVkKHNlbGYuYmFyZm4pCiAKICAgICBkZWYgdGVzdF9ub19hcmdzX3Jlc3BlY3RzX2ZvcmNlX2ZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuX3NraXBfaWZfc3lzX3BhdGhfbm90X3dyaXRhYmxlKCkKICAgICAgICAgYmF6Zm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYuZGlyZWN0b3J5LCAnYmF6JywgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UnVuT0soUFlUSE9OUEFUSD1zZWxmLmRpcmVjdG9yeSkKLSAgICAgICAgcHljcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShiYXpmbikKKyAgICAgICAgcHljcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhemZuKQogICAgICAgICAjIFNldCBhdGltZS9tdGltZSBiYWNrd2FyZCB0byBhdm9pZCBmaWxlIHRpbWVzdGFtcCByZXNvbHV0aW9uIGlzc3VlcwogICAgICAgICBvcy51dGltZShweWNwYXRoLCAodGltZS50aW1lKCktNjAsKSoyKQogICAgICAgICBtdGltZSA9IG9zLnN0YXQocHljcGF0aCkuc3RfbXRpbWUKQEAgLTE5NCw2ICsyMjMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG10aW1lLCBtdGltZTIpCiAKICAgICBkZWYgdGVzdF9ub19hcmdzX3Jlc3BlY3RzX3F1aWV0X2ZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuX3NraXBfaWZfc3lzX3BhdGhfbm90X3dyaXRhYmxlKCkKICAgICAgICAgc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdChzZWxmLmRpcmVjdG9yeSwgJ2JheicsICcnKQogICAgICAgICBub2lzeSA9IHNlbGYuYXNzZXJ0UnVuT0soUFlUSE9OUEFUSD1zZWxmLmRpcmVjdG9yeSkKICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0xpc3RpbmcgJywgbm9pc3kpCkBAIC0yMTIsOCArMjQyLDggQEAKICAgICAgICAgICAgICAgICBbJy1tJywgJ2NvbXBpbGVhbGwnLCAnLXEnLCBzZWxmLnBrZ2Rpcl0pKQogICAgICAgICAgICAgIyBWZXJpZnkgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yeSBjb250ZW50cy4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnBrZ2Rpcl9jYWNoZWRpcikpCi0gICAgICAgICAgICBleHBlY3RlZCA9IHNvcnRlZChiYXNlLmZvcm1hdChpbXAuZ2V0X3RhZygpLCBleHQpIGZvciBiYXNlIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ19faW5pdF9fLnt9Lnt9JywgJ2Jhci57fS57fScpKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSBzb3J0ZWQoYmFzZS5mb3JtYXQoc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZywgZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGJhc2UgaW4gKCdfX2luaXRfXy57fS57fScsICdiYXIue30ue30nKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG9zLmxpc3RkaXIoc2VsZi5wa2dkaXJfY2FjaGVkaXIpKSwgZXhwZWN0ZWQpCiAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gLnB5YyBmaWxlcyBpbiB0aGUgc291cmNlIGRpcmVjdG9yeS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoW2ZuIGZvciBmbiBpbiBvcy5saXN0ZGlyKHNlbGYucGtnZGlyKQpAQCAtMjQ2LDcgKzI3Niw3IEBACiAKICAgICBkZWYgdGVzdF9mb3JjZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCBzZWxmLnBrZ2RpcikKLSAgICAgICAgcHljcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLmJhcmZuKQorICAgICAgICBweWNwYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5iYXJmbikKICAgICAgICAgIyBzZXQgYXRpbWUvbXRpbWUgYmFja3dhcmQgdG8gYXZvaWQgZmlsZSB0aW1lc3RhbXAgcmVzb2x1dGlvbiBpc3N1ZXMKICAgICAgICAgb3MudXRpbWUocHljcGF0aCwgKHRpbWUudGltZSgpLTYwLCkqMikKICAgICAgICAgbXRpbWUgPSBvcy5zdGF0KHB5Y3BhdGgpLnN0X210aW1lCkBAIC0yOTMsMTQgKzMyMyw2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWQoaW5pdDJmbikKICAgICAgICAgc2VsZi5hc3NlcnRDb21waWxlZChiYXIyZm4pCiAKLSAgICBkZWYgdGVzdF9kX3Rha2VzX2V4YWN0bHlfb25lX2RpcihzZWxmKToKLSAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi5hc3NlcnRSdW5Ob3RPSygnLWQnLCAnZm9vJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGInLWQnKQotICAgICAgICByYywgb3V0LCBlcnIgPSBzZWxmLmFzc2VydFJ1bk5vdE9LKCctZCcsICdmb28nLCAnYmFyJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKLSAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGInLWQnKQotCiAgICAgZGVmIHRlc3RfZF9jb21waWxlX2Vycm9yKHNlbGYpOgogICAgICAgICBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnY3J1bmNoeWZyb2cnLCAnYmFkKHN5bnRheCcpCiAgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuYXNzZXJ0UnVuTm90T0soJy1xJywgJy1kJywgJ2RpbnNkYWxlJywgc2VsZi5wa2dkaXIpCkBAIC0zMTAsMTAgKzMzMiwxMCBAQAogICAgICAgICBiYXpmbiA9IHNjcmlwdF9oZWxwZXIubWFrZV9zY3JpcHQoc2VsZi5wa2dkaXIsICdiYXonLCAncmFpc2UgRXhjZXB0aW9uJykKICAgICAgICAgc2VsZi5hc3NlcnRSdW5PSygnLXEnLCAnLWQnLCAnZGluc2RhbGUnLCBzZWxmLnBrZ2RpcikKICAgICAgICAgZm4gPSBzY3JpcHRfaGVscGVyLm1ha2Vfc2NyaXB0KHNlbGYucGtnZGlyLCAnYmluZycsICdpbXBvcnQgYmF6JykKLSAgICAgICAgcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGJhemZuKQorICAgICAgICBweWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShiYXpmbikKICAgICAgICAgb3MucmVuYW1lKHB5Yywgb3MucGF0aC5qb2luKHNlbGYucGtnZGlyLCAnYmF6LnB5YycpKQogICAgICAgICBvcy5yZW1vdmUoYmF6Zm4pCi0gICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKGZuKQorICAgICAgICByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZShmbiwgX19pc29sYXRlZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChlcnIsIGInRmlsZSAiZGluc2RhbGUnKQogCiAgICAgZGVmIHRlc3RfaW5jbHVkZV9iYWRfZmlsZShzZWxmKToKQEAgLTMyMSw3ICszNDMsNyBAQAogICAgICAgICAgICAgJy1pJywgb3MucGF0aC5qb2luKHNlbGYuZGlyZWN0b3J5LCAnbm9zdWNoZmlsZScpLCBzZWxmLnBrZ2RpcikKICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXQsIGIncnJvci4qbm9zdWNoZmlsZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90UmVnZXgoZXJyLCBiJ1RyYWNlYmFjaycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnBrZ2Rpcl9jYWNoZWRpcikpKQogCiAgICAgZGVmIHRlc3RfaW5jbHVkZV9maWxlX3dpdGhfYXJnKHNlbGYpOgpAQCAtMzc4LDEzICs0MDAsNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dCwgYiJDYW4ndCBsaXN0ICdiYWRmaWxlbmFtZSciKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgQ29tbWFuZExpbmVUZXN0cywKLSAgICAgICAgQ29tcGlsZWFsbFRlc3RzLAotICAgICAgICBFbmNvZGluZ1Rlc3QsCi0gICAgICAgICkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkgYi9MaWIvdGVzdC90ZXN0X2NvbXBsZXgucHkKaW5kZXggMWJmNDA5Ny4uMGVmOWE3YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jb21wbGV4LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29tcGxleC5weQpAQCAtMjcsNyArMjcsNyBAQAogICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsKHNlbGYsIGEsIGIpCiAKICAgICBkZWYgYXNzZXJ0Q2xvc2VBYnMoc2VsZiwgeCwgeSwgZXBzPTFlLTkpOgotICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZmYgZmxvYXRzIHggYW5kIHkgImFyZSBjbG9zZVwiIiIiCisgICAgICAgICIiIlJldHVybiB0cnVlIGlmZiBmbG9hdHMgeCBhbmQgeSAiYXJlIGNsb3NlIi4iIiIKICAgICAgICAgIyBwdXQgdGhlIG9uZSB3aXRoIGxhcmdlciBtYWduaXR1ZGUgc2Vjb25kCiAgICAgICAgIGlmIGFicyh4KSA+IGFicyh5KToKICAgICAgICAgICAgIHgsIHkgPSB5LCB4CkBAIC02Miw3ICs2Miw3IEBACiAgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KHgsIHkpKQogCiAgICAgZGVmIGFzc2VydENsb3NlKHNlbGYsIHgsIHksIGVwcz0xZS05KToKLSAgICAgICAgIiIiUmV0dXJuIHRydWUgaWZmIGNvbXBsZXhlcyB4IGFuZCB5ICJhcmUgY2xvc2VcIiIiIgorICAgICAgICAiIiJSZXR1cm4gdHJ1ZSBpZmYgY29tcGxleGVzIHggYW5kIHkgImFyZSBjbG9zZSIuIiIiCiAgICAgICAgIHNlbGYuYXNzZXJ0Q2xvc2VBYnMoeC5yZWFsLCB5LnJlYWwsIGVwcykKICAgICAgICAgc2VsZi5hc3NlcnRDbG9zZUFicyh4LmltYWcsIHkuaW1hZywgZXBzKQogCkBAIC0xMDQsNiArMTA0LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoY29tcGxleC5fX3RydWVkaXZfXygyKzBqLCAxKzFqKSwgMS0xaikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGNvbXBsZXguX190cnVlZGl2X18sIDErMWosIDArMGopCiAKKyAgICAgICAgZm9yIGRlbm9tX3JlYWwsIGRlbm9tX2ltYWcgaW4gWygwLCBOQU4pLCAoTkFOLCAwKSwgKE5BTiwgTkFOKV06CisgICAgICAgICAgICB6ID0gY29tcGxleCgwLCAwKSAvIGNvbXBsZXgoZGVub21fcmVhbCwgZGVub21faW1hZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbih6LnJlYWwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKHouaW1hZykpCisKICAgICBkZWYgdGVzdF9mbG9vcmRpdihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4Ll9fZmxvb3JkaXZfXywgMyswaiwgMS41KzBqKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXguX19mbG9vcmRpdl9fLCAzKzBqLCAwKzBqKQpAQCAtMjIwLDYgKzIyNSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgT1MoTm9uZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTlMoTm9uZSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29tcGxleCwgTlMoMS41KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBOUygxKSkKIAogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoIjErMTBqIiksIDErMTBqKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGNvbXBsZXgoMTApLCAxMCswaikKQEAgLTMwMSw2ICszMDgsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZsb2F0LCA1KzNqKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjb21wbGV4LCAiIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wbGV4LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCAnTm9uZVR5cGUnIiwgY29tcGxleCwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIlwwIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgY29tcGxleCwgIjNcMDkiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbXBsZXgsICIxIiwgIjIiKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMucHkgYi9MaWIvdGVzdC90ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy5weQppbmRleCAwNGM0YzM3Li5jNzRiMmNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy5weQpAQCAtMTUsNiArMTUsNyBAQAogaW1wb3J0IHRocmVhZGluZwogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdlYWtyZWYKIAogZnJvbSBjb25jdXJyZW50IGltcG9ydCBmdXR1cmVzCiBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcy5fYmFzZSBpbXBvcnQgKApAQCAtNTIsNiArNTMsMTEgQEAKICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKIAogCitjbGFzcyBNeU9iamVjdChvYmplY3QpOgorICAgIGRlZiBteV9tZXRob2Qoc2VsZik6CisgICAgICAgIHBhc3MKKworCiBjbGFzcyBFeGVjdXRvck1peGluOgogICAgIHdvcmtlcl9jb3VudCA9IDUKIApAQCAtNDAzLDYgKzQwOSwyMiBAQAogICAgICAgICBzZWxmLmV4ZWN1dG9yLm1hcChzdHIsIFsyXSAqIChzZWxmLndvcmtlcl9jb3VudCArIDEpKQogICAgICAgICBzZWxmLmV4ZWN1dG9yLnNodXRkb3duKCkKIAorICAgIEB0ZXN0LnN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3Rfbm9fc3RhbGVfcmVmZXJlbmNlcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTYyODQ6IGNoZWNrIHRoYXQgdGhlIGV4ZWN1dG9ycyBkb24ndCB1bm5lY2Vzc2FyaWx5IGhhbmcgb250bworICAgICAgICAjIHJlZmVyZW5jZXMuCisgICAgICAgIG15X29iamVjdCA9IE15T2JqZWN0KCkKKyAgICAgICAgbXlfb2JqZWN0X2NvbGxlY3RlZCA9IHRocmVhZGluZy5FdmVudCgpCisgICAgICAgIG15X29iamVjdF9jYWxsYmFjayA9IHdlYWtyZWYucmVmKAorICAgICAgICAgICAgbXlfb2JqZWN0LCBsYW1iZGEgb2JqOiBteV9vYmplY3RfY29sbGVjdGVkLnNldCgpKQorICAgICAgICAjIERlbGliZXJhdGVseSBkaXNjYXJkaW5nIHRoZSBmdXR1cmUuCisgICAgICAgIHNlbGYuZXhlY3V0b3Iuc3VibWl0KG15X29iamVjdC5teV9tZXRob2QpCisgICAgICAgIGRlbCBteV9vYmplY3QKKworICAgICAgICBjb2xsZWN0ZWQgPSBteV9vYmplY3RfY29sbGVjdGVkLndhaXQodGltZW91dD01LjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb2xsZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAiU3RhbGUgcmVmZXJlbmNlIG5vdCBjb2xsZWN0ZWQgd2l0aGluIHRpbWVvdXQuIikKKwogCiBjbGFzcyBUaHJlYWRQb29sRXhlY3V0b3JUZXN0KFRocmVhZFBvb2xNaXhpbiwgRXhlY3V0b3JUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfbWFwX3N1Ym1pdHNfd2l0aG91dF9pdGVyYXRpb24oc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NvbmZpZ3BhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfY29uZmlncGFyc2VyLnB5CmluZGV4IDc4YmQzMTUuLjNiMDM1MDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29uZmlncGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY29uZmlncGFyc2VyLnB5CkBAIC04NDcsNyArODQ3LDggQEAKICAgICAgICAgICAgInNvbWV0aGluZyB3aXRoIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTAgc3RlcHMpIikKICAgICAgICAgZSA9IHNlbGYuZ2V0X2Vycm9yKGNmLCBjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3IsICJGb28iLCAiYmFyMTEiKQogICAgICAgICBpZiBzZWxmLmludGVycG9sYXRpb24gPT0gY29uZmlncGFyc2VyLl9VTlNFVDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoImJhcjExIiwgIkZvbyIsICIlKHdpdGgxKXMiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoImJhcjExIiwgIkZvbyIsCisgICAgICAgICAgICAgICAgInNvbWV0aGluZyAlKHdpdGgxMSlzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTEgc3RlcHMpIikpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLmludGVycG9sYXRpb24sIGNvbmZpZ3BhcnNlci5MZWdhY3lJbnRlcnBvbGF0aW9uKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoImJhcjExIiwgIkZvbyIsCiAgICAgICAgICAgICAgICAgInNvbWV0aGluZyAlKHdpdGgxMSlzIGxvdHMgb2YgaW50ZXJwb2xhdGlvbiAoMTEgc3RlcHMpIikpCkBAIC04NjEsNyArODYyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm9wdGlvbiwgIm5hbWUiKQogICAgICAgICBpZiBzZWxmLmludGVycG9sYXRpb24gPT0gY29uZmlncGFyc2VyLl9VTlNFVDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoJ25hbWUnLCAnSW50ZXJwb2xhdGlvbiBFcnJvcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywgJ3JlZmVyZW5jZScpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyUocmVmZXJlbmNlKXMnLCAncmVmZXJlbmNlJykpCiAgICAgICAgIGVsaWYgaXNpbnN0YW5jZShzZWxmLmludGVycG9sYXRpb24sIGNvbmZpZ3BhcnNlci5MZWdhY3lJbnRlcnBvbGF0aW9uKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzLCAoJ25hbWUnLCAnSW50ZXJwb2xhdGlvbiBFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJShyZWZlcmVuY2UpcycsICdyZWZlcmVuY2UnKSkKQEAgLTExNzcsNyArMTE3OCw3IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhjZXB0aW9uX2NsYXNzKSBhcyBjbToKICAgICAgICAgICAgIGNmWydpbnRlcnBvbGF0ZWQnXVsnJHRyeWluZyddCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlZmVyZW5jZSwgJ2RvbGxhcnM6JHtzaWNrJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJnc1syXSwgJ30nKSAjcmF3dmFsCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3NbMl0sICcke2RvbGxhcnM6JHtzaWNrfX0nKSAjcmF3dmFsCiAKICAgICBkZWYgdGVzdF9jYXNlX3NlbnNpdGl2aXR5X2Jhc2ljKHNlbGYpOgogICAgICAgICBpbmkgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiCkBAIC0xNTkxLDEwNCArMTU5MiwxMTMgQEAKICAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKICAgICAgICAgaW1wb3J0IHBpY2tsZQogICAgICAgICBlMSA9IGNvbmZpZ3BhcnNlci5FcnJvcigndmFsdWUnKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQotICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEsIHByb3RvKQorICAgICAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQogCiAgICAgZGVmIHRlc3Rfbm9zZWN0aW9uZXJyb3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKICAgICAgICAgZTEgPSBjb25maWdwYXJzZXIuTm9TZWN0aW9uRXJyb3IoJ3NlY3Rpb24nKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQotICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxLCBwcm90bykKKyAgICAgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKIAogICAgIGRlZiB0ZXN0X25vb3B0aW9uZXJyb3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKICAgICAgICAgZTEgPSBjb25maWdwYXJzZXIuTm9PcHRpb25FcnJvcignb3B0aW9uJywgJ3NlY3Rpb24nKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQotICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxLCBwcm90bykKKyAgICAgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCiAKICAgICBkZWYgdGVzdF9kdXBsaWNhdGVzZWN0aW9uZXJyb3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKICAgICAgICAgZTEgPSBjb25maWdwYXJzZXIuRHVwbGljYXRlU2VjdGlvbkVycm9yKCdzZWN0aW9uJywgJ3NvdXJjZScsIDEyMykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zb3VyY2UsIGUyLnNvdXJjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5saW5lbm8sIGUyLmxpbmVubykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSwgcHJvdG8pCisgICAgICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zb3VyY2UsIGUyLnNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubGluZW5vLCBlMi5saW5lbm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKIAogICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZW9wdGlvbmVycm9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCiAgICAgICAgIGUxID0gY29uZmlncGFyc2VyLkR1cGxpY2F0ZU9wdGlvbkVycm9yKCdzZWN0aW9uJywgJ29wdGlvbicsICdzb3VyY2UnLAogICAgICAgICAgICAgMTIzKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQotICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNvdXJjZSwgZTIuc291cmNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmxpbmVubywgZTIubGluZW5vKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxLCBwcm90bykKKyAgICAgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zb3VyY2UsIGUyLnNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubGluZW5vLCBlMi5saW5lbm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKIAogICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb25lcnJvcihzZWxmKToKICAgICAgICAgaW1wb3J0IHBpY2tsZQogICAgICAgICBlMSA9IGNvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uRXJyb3IoJ29wdGlvbicsICdzZWN0aW9uJywgJ21zZycpCi0gICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEpCi0gICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEub3B0aW9uLCBlMi5vcHRpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEsIHByb3RvKQorICAgICAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEub3B0aW9uLCBlMi5vcHRpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKIAogICAgIGRlZiB0ZXN0X2ludGVycG9sYXRpb25taXNzaW5nb3B0aW9uZXJyb3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKICAgICAgICAgZTEgPSBjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvbk1pc3NpbmdPcHRpb25FcnJvcignb3B0aW9uJywgJ3NlY3Rpb24nLAogICAgICAgICAgICAgJ3Jhd3ZhbCcsICdyZWZlcmVuY2UnKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQotICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnJlZmVyZW5jZSwgZTIucmVmZXJlbmNlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxLCBwcm90bykKKyAgICAgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5yZWZlcmVuY2UsIGUyLnJlZmVyZW5jZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQogCiAgICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbnN5bnRheGVycm9yKHNlbGYpOgogICAgICAgICBpbXBvcnQgcGlja2xlCiAgICAgICAgIGUxID0gY29uZmlncGFyc2VyLkludGVycG9sYXRpb25TeW50YXhFcnJvcignb3B0aW9uJywgJ3NlY3Rpb24nLCAnbXNnJykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc2VjdGlvbiwgZTIuc2VjdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSwgcHJvdG8pCisgICAgICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5vcHRpb24sIGUyLm9wdGlvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQogCiAgICAgZGVmIHRlc3RfaW50ZXJwb2xhdGlvbmRlcHRoZXJyb3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKICAgICAgICAgZTEgPSBjb25maWdwYXJzZXIuSW50ZXJwb2xhdGlvbkRlcHRoRXJyb3IoJ29wdGlvbicsICdzZWN0aW9uJywKICAgICAgICAgICAgICdyYXd2YWwnKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQotICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zZWN0aW9uLCBlMi5zZWN0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxLCBwcm90bykKKyAgICAgICAgICAgIGUyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLnNlY3Rpb24sIGUyLnNlY3Rpb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm9wdGlvbiwgZTIub3B0aW9uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCiAKICAgICBkZWYgdGVzdF9wYXJzaW5nZXJyb3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKQEAgLTE2OTYsMzYgKzE3MDYsMzkgQEAKICAgICAgICAgZTEuYXBwZW5kKDEsICdsaW5lMScpCiAgICAgICAgIGUxLmFwcGVuZCgyLCAnbGluZTInKQogICAgICAgICBlMS5hcHBlbmQoMywgJ2xpbmUzJykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc291cmNlLCBlMi5zb3VyY2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuZXJyb3JzLCBlMi5lcnJvcnMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihlMSksIHJlcHIoZTIpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZTEsIHByb3RvKQorICAgICAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubWVzc2FnZSwgZTIubWVzc2FnZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc291cmNlLCBlMi5zb3VyY2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmVycm9ycywgZTIuZXJyb3JzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCiAgICAgICAgIGUxID0gY29uZmlncGFyc2VyLlBhcnNpbmdFcnJvcihmaWxlbmFtZT0nZmlsZW5hbWUnKQogICAgICAgICBlMS5hcHBlbmQoMSwgJ2xpbmUxJykKICAgICAgICAgZTEuYXBwZW5kKDIsICdsaW5lMicpCiAgICAgICAgIGUxLmFwcGVuZCgzLCAnbGluZTMnKQotICAgICAgICBwaWNrbGVkID0gcGlja2xlLmR1bXBzKGUxKQotICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLm1lc3NhZ2UsIGUyLm1lc3NhZ2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuYXJncywgZTIuYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zb3VyY2UsIGUyLnNvdXJjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5lcnJvcnMsIGUyLmVycm9ycykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSwgcHJvdG8pCisgICAgICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zb3VyY2UsIGUyLnNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuZXJyb3JzLCBlMi5lcnJvcnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKIAogICAgIGRlZiB0ZXN0X21pc3NpbmdzZWN0aW9uaGVhZGVyZXJyb3Ioc2VsZik6CiAgICAgICAgIGltcG9ydCBwaWNrbGUKICAgICAgICAgZTEgPSBjb25maWdwYXJzZXIuTWlzc2luZ1NlY3Rpb25IZWFkZXJFcnJvcignZmlsZW5hbWUnLCAxMjMsICdsaW5lJykKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSkKLSAgICAgICAgZTIgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLmFyZ3MsIGUyLmFyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubGluZSwgZTIubGluZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zb3VyY2UsIGUyLnNvdXJjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5saW5lbm8sIGUyLmxpbmVubykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGUxKSwgcmVwcihlMikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhlMSwgcHJvdG8pCisgICAgICAgICAgICBlMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5tZXNzYWdlLCBlMi5tZXNzYWdlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5hcmdzLCBlMi5hcmdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5saW5lLCBlMi5saW5lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5zb3VyY2UsIGUyLnNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEubGluZW5vLCBlMi5saW5lbm8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoZTEpLCByZXByKGUyKSkKIAogCiBjbGFzcyBJbmxpbmVDb21tZW50U3RyaXBwaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9jb250ZXh0bGliLnB5CmluZGV4IGUzOGQwNDMuLjI2Njk2NTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY29udGV4dGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2NvbnRleHRsaWIucHkKQEAgLTEsNSArMSw2IEBACiAiIiJVbml0IHRlc3RzIGZvciBjb250ZXh0bGliLnB5LCBhbmQgb3RoZXIgY29udGV4dCBtYW5hZ2Vycy4iIiIKIAoraW1wb3J0IGlvCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdApAQCAtMTAwLDE1ICsxMDEsMzMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19uYW1lX18sJ2JheicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmF6LmZvbywgJ2JhcicpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAotICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfY29udGV4dG1hbmFnZXJfZG9jX2F0dHJpYihzZWxmKToKICAgICAgICAgYmF6ID0gc2VsZi5fY3JlYXRlX2NvbnRleHRtYW5hZ2VyX2F0dHJpYnMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhei5fX2RvY19fLCAiV2hlZSEiKQogCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3N0cmluZ19naXZlbl9jbV9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGJheiA9IHNlbGYuX2NyZWF0ZV9jb250ZXh0bWFuYWdlcl9hdHRyaWJzKCkoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXouX19kb2NfXywgIldoZWUhIikKKworICAgIGRlZiB0ZXN0X2tleXdvcmRzKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSBubyBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgaW5oaWJpdGVkCisgICAgICAgIEBjb250ZXh0bWFuYWdlcgorICAgICAgICBkZWYgd29vaG9vKHNlbGYsIGZ1bmMsIGFyZ3MsIGt3ZHMpOgorICAgICAgICAgICAgeWllbGQgKHNlbGYsIGZ1bmMsIGFyZ3MsIGt3ZHMpCisgICAgICAgIHdpdGggd29vaG9vKHNlbGY9MTEsIGZ1bmM9MjIsIGFyZ3M9MzMsIGt3ZHM9NDQpIGFzIHRhcmdldDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZ2V0LCAoMTEsIDIyLCAzMywgNDQpKQorCisKIGNsYXNzIENsb3NpbmdUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSAgICAjIFhYWCBUaGlzIG5lZWRzIG1vcmUgd29yaworICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBjbG9zaW5nLl9fZG9jX18KKyAgICAgICAgb2JqID0gY2xvc2luZyhOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCiAKICAgICBkZWYgdGVzdF9jbG9zaW5nKHNlbGYpOgogICAgICAgICBzdGF0ZSA9IFtdCkBAIC0yMDQsNiArMjIzLDcgQEAKIAogCiBjbGFzcyBteWNvbnRleHQoQ29udGV4dERlY29yYXRvcik6CisgICAgIiIiRXhhbXBsZSBkZWNvcmF0aW9uLWNvbXBhdGlibGUgY29udGV4dCBtYW5hZ2VyIGZvciB0ZXN0aW5nIiIiCiAgICAgc3RhcnRlZCA9IEZhbHNlCiAgICAgZXhjID0gTm9uZQogICAgIGNhdGNoID0gRmFsc2UKQEAgLTIxOSw2ICsyMzksMTMgQEAKIAogY2xhc3MgVGVzdENvbnRleHREZWNvcmF0b3IodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQHN1cHBvcnQucmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RvY3Moc2VsZik6CisgICAgICAgICMgSXNzdWUgMTkzMzA6IGVuc3VyZSBjb250ZXh0IG1hbmFnZXIgaW5zdGFuY2VzIGhhdmUgZ29vZCBkb2NzdHJpbmdzCisgICAgICAgIGNtX2RvY3N0cmluZyA9IG15Y29udGV4dC5fX2RvY19fCisgICAgICAgIG9iaiA9IG15Y29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fZG9jX18sIGNtX2RvY3N0cmluZykKKwogICAgIGRlZiB0ZXN0X2NvbnRleHRkZWNvcmF0b3Ioc2VsZik6CiAgICAgICAgIGNvbnRleHQgPSBteWNvbnRleHQoKQogICAgICAgICB3aXRoIGNvbnRleHQgYXMgcmVzdWx0OgpAQCAtMzcyLDYgKzM5OSwxMyBAQAogCiBjbGFzcyBUZXN0RXhpdFN0YWNrKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBzdXBwb3J0LnJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9pbnN0YW5jZV9kb2NzKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5MzMwOiBlbnN1cmUgY29udGV4dCBtYW5hZ2VyIGluc3RhbmNlcyBoYXZlIGdvb2QgZG9jc3RyaW5ncworICAgICAgICBjbV9kb2NzdHJpbmcgPSBFeGl0U3RhY2suX19kb2NfXworICAgICAgICBvYmogPSBFeGl0U3RhY2soKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX2RvY19fLCBjbV9kb2NzdHJpbmcpCisKICAgICBkZWYgdGVzdF9ub19yZXNvdXJjZXMoc2VsZik6CiAgICAgICAgIHdpdGggRXhpdFN0YWNrKCk6CiAgICAgICAgICAgICBwYXNzCkBAIC02OTIsMTAgKzcyNiwxMTMgQEAKICAgICAgICAgc3RhY2sucHVzaChjbSkKICAgICAgICAgc2VsZi5hc3NlcnRJcyhzdGFjay5fZXhpdF9jYWxsYmFja3NbLTFdLCBjbSkKIAorY2xhc3MgVGVzdFJlZGlyZWN0U3Rkb3V0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotIyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIHRoZSB0ZXN0IGFjdHVhbGx5IHJ1biB1bmRlciByZWdydGVzdC5weSEKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gcmVkaXJlY3Rfc3Rkb3V0Ll9fZG9jX18KKyAgICAgICAgb2JqID0gcmVkaXJlY3Rfc3Rkb3V0KE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fZG9jX18sIGNtX2RvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X25vX3JlZGlyZWN0X2luX2luaXQoc2VsZik6CisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICByZWRpcmVjdF9zdGRvdXQoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCBvcmlnX3N0ZG91dCkKKworICAgIGRlZiB0ZXN0X3JlZGlyZWN0X3RvX3N0cmluZ19pbyhzZWxmKToKKyAgICAgICAgZiA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgbXNnID0gIkNvbnNpZGVyIGFuIEFQSSBsaWtlIGhlbHAoKSwgd2hpY2ggcHJpbnRzIGRpcmVjdGx5IHRvIHN0ZG91dCIKKyAgICAgICAgb3JpZ19zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHdpdGggcmVkaXJlY3Rfc3Rkb3V0KGYpOgorICAgICAgICAgICAgcHJpbnQobXNnKQorICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5zdGRvdXQsIG9yaWdfc3Rkb3V0KQorICAgICAgICBzID0gZi5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBtc2cpCisKKyAgICBkZWYgdGVzdF9lbnRlcl9yZXN1bHRfaXNfdGFyZ2V0KHNlbGYpOgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIHJlZGlyZWN0X3N0ZG91dChmKSBhcyBlbnRlcl9yZXN1bHQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGVudGVyX3Jlc3VsdCwgZikKKworICAgIGRlZiB0ZXN0X2NtX2lzX3JldXNhYmxlKHNlbGYpOgorICAgICAgICBmID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3cml0ZV90b19mID0gcmVkaXJlY3Rfc3Rkb3V0KGYpCisgICAgICAgIG9yaWdfc3Rkb3V0ID0gc3lzLnN0ZG91dAorICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6CisgICAgICAgICAgICBwcmludCgiSGVsbG8iLCBlbmQ9IiAiKQorICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6CisgICAgICAgICAgICBwcmludCgiV29ybGQhIikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuc3Rkb3V0LCBvcmlnX3N0ZG91dCkKKyAgICAgICAgcyA9IGYuZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsICJIZWxsbyBXb3JsZCFcbiIpCisKKyAgICBkZWYgdGVzdF9jbV9pc19yZWVudHJhbnQoc2VsZik6CisgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdyaXRlX3RvX2YgPSByZWRpcmVjdF9zdGRvdXQoZikKKyAgICAgICAgb3JpZ19zdGRvdXQgPSBzeXMuc3Rkb3V0CisgICAgICAgIHdpdGggd3JpdGVfdG9fZjoKKyAgICAgICAgICAgIHByaW50KCJIZWxsbyIsIGVuZD0iICIpCisgICAgICAgICAgICB3aXRoIHdyaXRlX3RvX2Y6CisgICAgICAgICAgICAgICAgcHJpbnQoIldvcmxkISIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLnN0ZG91dCwgb3JpZ19zdGRvdXQpCisgICAgICAgIHMgPSBmLmdldHZhbHVlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiSGVsbG8gV29ybGQhXG4iKQorCisKK2NsYXNzIFRlc3RTdXBwcmVzcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfaW5zdGFuY2VfZG9jcyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxOTMzMDogZW5zdXJlIGNvbnRleHQgbWFuYWdlciBpbnN0YW5jZXMgaGF2ZSBnb29kIGRvY3N0cmluZ3MKKyAgICAgICAgY21fZG9jc3RyaW5nID0gc3VwcHJlc3MuX19kb2NfXworICAgICAgICBvYmogPSBzdXBwcmVzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLl9fZG9jX18sIGNtX2RvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X25vX3Jlc3VsdF9mcm9tX2VudGVyKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHByZXNzKFZhbHVlRXJyb3IpIGFzIGVudGVyX3Jlc3VsdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGVudGVyX3Jlc3VsdCkKKworICAgIGRlZiB0ZXN0X25vX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG93KDIsIDUpLCAzMikKKworICAgIGRlZiB0ZXN0X2V4YWN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgbGVuKDUpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25faGllcmFyY2h5KHNlbGYpOgorICAgICAgICB3aXRoIHN1cHByZXNzKExvb2t1cEVycm9yKToKKyAgICAgICAgICAgICdIZWxsbydbNTBdCisKKyAgICBkZWYgdGVzdF9vdGhlcl9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzdXBwcmVzcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIDEvMAorCisgICAgZGVmIHRlc3Rfbm9fYXJncyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6CisgICAgICAgICAgICB3aXRoIHN1cHByZXNzKCk6CisgICAgICAgICAgICAgICAgMS8wCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9leGNlcHRpb25fYXJncyhzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwcmVzcyhaZXJvRGl2aXNpb25FcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgICAgIDEvMAorICAgICAgICB3aXRoIHN1cHByZXNzKFplcm9EaXZpc2lvbkVycm9yLCBUeXBlRXJyb3IpOgorICAgICAgICAgICAgbGVuKDUpCisKKyAgICBkZWYgdGVzdF9jbV9pc19yZWVudHJhbnQoc2VsZik6CisgICAgICAgIGlnbm9yZV9leGNlcHRpb25zID0gc3VwcHJlc3MoRXhjZXB0aW9uKQorICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOgorICAgICAgICAgICAgbGVuKDUpCisgICAgICAgIHdpdGggaWdub3JlX2V4Y2VwdGlvbnM6CisgICAgICAgICAgICB3aXRoIGlnbm9yZV9leGNlcHRpb25zOiAjIENoZWNrIG5lc3RlZCB1c2FnZQorICAgICAgICAgICAgICAgIGxlbig1KQorICAgICAgICAgICAgb3V0ZXJfY29udGludWVkID0gVHJ1ZQorICAgICAgICAgICAgMS8wCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRlcl9jb250aW51ZWQpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY29weS5weSBiL0xpYi90ZXN0L3Rlc3RfY29weS5weQppbmRleCBlYjhkMThjLi4wYzUzNTRjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NvcHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jb3B5LnB5CkBAIC0xODAsNiArMTgwLDkgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mb28gPT0gb3RoZXIuZm9vCiAgICAgICAgIHggPSBDKDQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKKyAgICAgICAgIyBTdGF0ZSB3aXRoIGJvb2xlYW4gdmFsdWUgaXMgZmFsc2UgKGlzc3VlICMyNTcxOCkKKyAgICAgICAgeCA9IEMoMC4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcHkuY29weSh4KSwgeCkKIAogICAgICMgVGhlIGRlZXBjb3B5KCkgbWV0aG9kCiAKQEAgLTQ0OCw2ICs0NTEsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQogICAgICAgICBzZWxmLmFzc2VydElzTm90KHksIHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeS5mb28sIHguZm9vKQorICAgICAgICAjIFN0YXRlIHdpdGggYm9vbGVhbiB2YWx1ZSBpcyBmYWxzZSAoaXNzdWUgIzI1NzE4KQorICAgICAgICB4ID0gQyhbXSkKKyAgICAgICAgeSA9IGNvcHkuZGVlcGNvcHkoeCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LCB4KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHksIHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeS5mb28sIHguZm9vKQogCiAgICAgZGVmIHRlc3RfZGVlcGNvcHlfcmVmbGV4aXZlX2luc3Qoc2VsZik6CiAgICAgICAgIGNsYXNzIEM6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9jcHJvZmlsZS5weQppbmRleCA1Njc2NjY4Li5jZTVkMjdlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Nwcm9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3Byb2ZpbGUucHkKQEAgLTYsOSArNiwxMSBAQAogIyByaXAgb2ZmIGFsbCBpbnRlcmVzdGluZyBzdHVmZiBmcm9tIHRlc3RfcHJvZmlsZQogaW1wb3J0IGNQcm9maWxlCiBmcm9tIHRlc3QudGVzdF9wcm9maWxlIGltcG9ydCBQcm9maWxlVGVzdCwgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQKK2Zyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMKIAogY2xhc3MgQ1Byb2ZpbGVUZXN0KFByb2ZpbGVUZXN0KToKICAgICBwcm9maWxlcmNsYXNzID0gY1Byb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gY1Byb2ZpbGUKICAgICBleHBlY3RlZF9tYXhfb3V0cHV0ID0gIntidWlsdC1pbiBtZXRob2QgbWF4fSIKIAogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgpAQCAtMjcsNiArMjksNyBAQAogICAgICAgICAgICAgICAgICAgICBvYmouZW5hYmxlKCkKICAgICAgICAgICAgICAgICAgICAgb2JqID0gX2xzcHJvZi5Qcm9maWxlcigxKQogICAgICAgICAgICAgICAgICAgICBvYmouZGlzYWJsZSgpCisgICAgICAgICAgICAgICAgICAgIG9iai5jbGVhcigpCiAgICAgICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZGVyciA9IG9yaWdfc3RkZXJyCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5IGIvTGliL3Rlc3QvdGVzdF9jcnlwdC5weQppbmRleCBjZmI3MzQxLi42MjRkNzAyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NyeXB0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3J5cHQucHkKQEAgLTEsMTEgKzEsNyBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIAotZGVmIHNldFVwTW9kdWxlKCk6Ci0gICAgIyB0aGlzIGltcG9ydCB3aWxsIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0IGlmIF9jcnlwdCBkb2Vzbid0IGV4aXN0LAotICAgICMgc28gaXQgaGFzIHRvIGJlIGRvbmUgaW4gc2V0VXBNb2R1bGUgZm9yIHRlc3QgZGlzY292ZXJ5IHRvIHdvcmsKLSAgICBnbG9iYWwgY3J5cHQKLSAgICBjcnlwdCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnY3J5cHQnKQorY3J5cHQgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ2NyeXB0JykKIAogY2xhc3MgQ3J5cHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY3N2LnB5IGIvTGliL3Rlc3QvdGVzdF9jc3YucHkKaW5kZXggODNmOGNiMy4uNjU0NDlhZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9jc3YucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jc3YucHkKQEAgLTEyNCwyNCArMTI0LDMxIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVvYmoucmVhZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3QgKyB3cml0ZXIuZGlhbGVjdC5saW5ldGVybWluYXRvcikKIAorICAgIGRlZiBfd3JpdGVfZXJyb3JfdGVzdChzZWxmLCBleGMsIGZpZWxkcywgKiprd2FyZ3MpOgorICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoIncrIiwgbmV3bGluZT0nJykgYXMgZmlsZW9iajoKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaiwgKiprd2FyZ3MpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4Yyk6CisgICAgICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93KGZpZWxkcykKKyAgICAgICAgICAgIGZpbGVvYmouc2VlaygwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgJycpCisKICAgICBkZWYgdGVzdF93cml0ZV9hcmdfdmFsaWQoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwgTm9uZSwgJycpCisgICAgICAgIHNlbGYuX3dyaXRlX2Vycm9yX3Rlc3QoY3N2LkVycm9yLCBOb25lKQogICAgICAgICBzZWxmLl93cml0ZV90ZXN0KCgpLCAnJykKICAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbTm9uZV0sICciIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgc2VsZi5fd3JpdGVfdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgW05vbmVdLCBOb25lLCBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUpCisgICAgICAgIHNlbGYuX3dyaXRlX2Vycm9yX3Rlc3QoY3N2LkVycm9yLCBbTm9uZV0sIHF1b3RpbmcgPSBjc3YuUVVPVEVfTk9ORSkKICAgICAgICAgIyBDaGVjayB0aGF0IGV4Y2VwdGlvbnMgYXJlIHBhc3NlZCB1cCB0aGUgY2hhaW4KICAgICAgICAgY2xhc3MgQmFkTGlzdDoKICAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiAxMDsKICAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKICAgICAgICAgICAgICAgICBpZiBpID4gMjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLl93cml0ZV90ZXN0LCBCYWRMaXN0KCksICcnKQorICAgICAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHNlbGYuX3dyaXRlX2Vycm9yX3Rlc3QoT1NFcnJvciwgQmFkTGlzdCgpKQogICAgICAgICBjbGFzcyBCYWRJdGVtOgogICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLl93cml0ZV90ZXN0LCBbQmFkSXRlbSgpXSwgJycpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLl93cml0ZV9lcnJvcl90ZXN0KE9TRXJyb3IsIFtCYWRJdGVtKCldKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfYmlnZmllbGQoc2VsZik6CiAgICAgICAgICMgVGhpcyBleGVyY2lzZXMgdGhlIGJ1ZmZlciByZWFsbG9jIGZ1bmN0aW9uYWxpdHkKQEAgLTE1MSwxMCArMTU4LDggQEAKIAogICAgIGRlZiB0ZXN0X3dyaXRlX3F1b3Rpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLHEnXSwgJ2EsMSwicCxxIicpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVfdGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgWydhJywxLCdwLHEnXSwgJ2EsMSxwLHEnLAotICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90aW5nID0gY3N2LlFVT1RFX05PTkUpCisgICAgICAgIHNlbGYuX3dyaXRlX2Vycm9yX3Rlc3QoY3N2LkVycm9yLCBbJ2EnLDEsJ3AscSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1b3RpbmcgPSBjc3YuUVVPVEVfTk9ORSkKICAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbJ2EnLDEsJ3AscSddLCAnYSwxLCJwLHEiJywKICAgICAgICAgICAgICAgICAgICAgICAgICBxdW90aW5nID0gY3N2LlFVT1RFX01JTklNQUwpCiAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLHEnXSwgJyJhIiwxLCJwLHEiJywKQEAgLTE2NywxMCArMTcyLDggQEAKICAgICBkZWYgdGVzdF93cml0ZV9lc2NhcGUoc2VsZik6CiAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QoWydhJywxLCdwLHEnXSwgJ2EsMSwicCxxIicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlY2hhcj0nXFwnKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3dyaXRlX3Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFsnYScsMSwncCwicSInXSwgJ2EsMSwicCxcXCJxXFwiIicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9Tm9uZSwgZG91YmxlcXVvdGU9RmFsc2UpCisgICAgICAgIHNlbGYuX3dyaXRlX2Vycm9yX3Rlc3QoY3N2LkVycm9yLCBbJ2EnLDEsJ3AsInEiJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlY2hhcj1Ob25lLCBkb3VibGVxdW90ZT1GYWxzZSkKICAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbJ2EnLDEsJ3AsInEiJ10sICdhLDEsInAsXFwicVxcIiInLAogICAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZWNoYXI9J1xcJywgZG91YmxlcXVvdGUgPSBGYWxzZSkKICAgICAgICAgc2VsZi5fd3JpdGVfdGVzdChbJyInXSwgJyIiIiInLApAQCAtMTg2LDkgKzE4OSw5IEBACiAgICAgZGVmIHRlc3Rfd3JpdGVyb3dzKHNlbGYpOgogICAgICAgICBjbGFzcyBCcm9rZW5GaWxlOgogICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsIGJ1Zik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgd3JpdGVyID0gY3N2LndyaXRlcihCcm9rZW5GaWxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIHdyaXRlci53cml0ZXJvd3MsIFtbJ2EnXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHdyaXRlci53cml0ZXJvd3MsIFtbJ2EnXV0pCiAKICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCJ3KyIsIG5ld2xpbmU9JycpIGFzIGZpbGVvYmo6CiAgICAgICAgICAgICB3cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmopCkBAIC0zMDgsNiArMzExLDE1IEBACiAgICAgICAgICAgICBmb3IgaSwgcm93IGluIGVudW1lcmF0ZShjc3YucmVhZGVyKGZpbGVvYmopKToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdywgcm93c1tpXSkKIAorICAgIGRlZiB0ZXN0X3JvdW5kdHJpcF9lc2NhcGVkX3VucXVvdGVkX25ld2xpbmVzKHNlbGYpOgorICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoIncrIiwgbmV3bGluZT0nJykgYXMgZmlsZW9iajoKKyAgICAgICAgICAgIHdyaXRlciA9IGNzdi53cml0ZXIoZmlsZW9iaixxdW90aW5nPWNzdi5RVU9URV9OT05FLGVzY2FwZWNoYXI9IlxcIikKKyAgICAgICAgICAgIHJvd3MgPSBbWydhXG5iJywnYiddLFsnYycsJ3hcclxuZCddXQorICAgICAgICAgICAgd3JpdGVyLndyaXRlcm93cyhyb3dzKQorICAgICAgICAgICAgZmlsZW9iai5zZWVrKDApCisgICAgICAgICAgICBmb3IgaSwgcm93IGluIGVudW1lcmF0ZShjc3YucmVhZGVyKGZpbGVvYmoscXVvdGluZz1jc3YuUVVPVEVfTk9ORSxlc2NhcGVjaGFyPSJcXCIpKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdyxyb3dzW2ldKQorCiBjbGFzcyBUZXN0RGlhbGVjdFJlZ2lzdHJ5KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9yZWdpc3RyeV9iYWRhcmdzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNzdi5saXN0X2RpYWxlY3RzLCBOb25lKQpAQCAtODM2LDEwICs4NDgsMTEgQEAKICAgICAgICAgICAgIGQgPSBteWRpYWxlY3QoKQogCiAgICAgICAgIGZvciBmaWVsZF9uYW1lIGluICgiZGVsaW1pdGVyIiwgImVzY2FwZWNoYXIiLCAicXVvdGVjaGFyIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjc3YuRXJyb3IsIGNyZWF0ZV9pbnZhbGlkLCBmaWVsZF9uYW1lLCAiIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsICJhYmMiKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBjcmVhdGVfaW52YWxpZCwgZmllbGRfbmFtZSwgYid4JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsIDUpCisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmaWVsZF9uYW1lPWZpZWxkX25hbWUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsICIiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsICJhYmMiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGNzdi5FcnJvciwgY3JlYXRlX2ludmFsaWQsIGZpZWxkX25hbWUsIGIneCcpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoY3N2LkVycm9yLCBjcmVhdGVfaW52YWxpZCwgZmllbGRfbmFtZSwgNSkKIAogCiBjbGFzcyBUZXN0U25pZmZlcih1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMDUzLDcgKzEwNjYsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlb2JqLnJlYWQoKSwgZXhwZWN0ZWQpCiAKIAotCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgbW9kID0gc3lzLm1vZHVsZXNbX19uYW1lX19dCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2N0eXBlcy5weSBiL0xpYi90ZXN0L3Rlc3RfY3R5cGVzLnB5CmluZGV4IDQ5NjM1NWUuLjY4MjY4OTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfY3R5cGVzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfY3R5cGVzLnB5CkBAIC0xLDE2ICsxLDkgQEAKIGltcG9ydCB1bml0dGVzdAotCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgaW1wb3J0X21vZHVsZQogCi0jIFNraXAgdGVzdHMgaWYgX2N0eXBlcyBtb2R1bGUgd2FzIG5vdCBidWlsdC4KLWltcG9ydF9tb2R1bGUoJ19jdHlwZXMnKQorY3R5cGVzX3Rlc3QgPSBpbXBvcnRfbW9kdWxlKCdjdHlwZXMudGVzdCcpCiAKLWltcG9ydCBjdHlwZXMudGVzdAotCi1kZWYgbG9hZF90ZXN0cygqYXJncyk6Ci0gICAgc2tpcHBlZCwgdGVzdGNhc2VzID0gY3R5cGVzLnRlc3QuZ2V0X3Rlc3RzKGN0eXBlcy50ZXN0LCAidGVzdF8qLnB5IiwgdmVyYm9zaXR5PTApCi0gICAgc3VpdGVzID0gW3VuaXR0ZXN0Lm1ha2VTdWl0ZSh0KSBmb3IgdCBpbiB0ZXN0Y2FzZXNdCi0gICAgcmV0dXJuIHVuaXR0ZXN0LlRlc3RTdWl0ZShzdWl0ZXMpCitsb2FkX3Rlc3RzID0gY3R5cGVzX3Rlc3QubG9hZF90ZXN0cwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9jdXJzZXMucHkgYi9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weQppbmRleCA3MzEwYWZjLi4zNzk3MjFhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2N1cnNlcy5weQpAQCAtMiwzNjQgKzIsMzc5IEBACiAjIFRlc3Qgc2NyaXB0IGZvciB0aGUgY3Vyc2VzIG1vZHVsZQogIwogIyBUaGlzIHNjcmlwdCBkb2Vzbid0IGFjdHVhbGx5IGRpc3BsYXkgYW55dGhpbmcgdmVyeSBjb2hlcmVudC4gYnV0IGl0Ci0jIGRvZXMgY2FsbCBldmVyeSBtZXRob2QgYW5kIGZ1bmN0aW9uLgorIyBkb2VzIGNhbGwgKG5lYXJseSkgZXZlcnkgbWV0aG9kIGFuZCBmdW5jdGlvbi4KICMKICMgRnVuY3Rpb25zIG5vdCB0ZXN0ZWQ6IHtkZWYscmVzZXR9X3tzaGVsbCxwcm9nfV9tb2RlLCBnZXRjaCgpLCBnZXRzdHIoKSwKICMgaW5pdF9jb2xvcigpCiAjIE9ubHkgY2FsbGVkLCBub3QgdGVzdGVkOiBnZXRtb3VzZSgpLCB1bmdldG1vdXNlKCkKICMKIAotaW1wb3J0IHN5cywgdGVtcGZpbGUsIG9zCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgaW1wb3J0X21vZHVsZSwgdmVyYm9zZQogCiAjIE9wdGlvbmFsbHkgdGVzdCBjdXJzZXMgbW9kdWxlLiAgVGhpcyBjdXJyZW50bHkgcmVxdWlyZXMgdGhhdCB0aGUKICMgJ2N1cnNlcycgcmVzb3VyY2UgYmUgZ2l2ZW4gb24gdGhlIHJlZ3J0ZXN0IGNvbW1hbmQgbGluZSB1c2luZyB0aGUgLXUKICMgb3B0aW9uLiAgSWYgbm90IGF2YWlsYWJsZSwgbm90aGluZyBhZnRlciB0aGlzIGxpbmUgd2lsbCBiZSBleGVjdXRlZC4KLQotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcmVxdWlyZXMsIGltcG9ydF9tb2R1bGUKK2ltcG9ydCBpbnNwZWN0CiByZXF1aXJlcygnY3Vyc2VzJykKIAogIyBJZiBlaXRoZXIgb2YgdGhlc2UgZG9uJ3QgZXhpc3QsIHNraXAgdGhlIHRlc3RzLgogY3Vyc2VzID0gaW1wb3J0X21vZHVsZSgnY3Vyc2VzJykKIGN1cnNlcy5wYW5lbCA9IGltcG9ydF9tb2R1bGUoJ2N1cnNlcy5wYW5lbCcpCiAKK3Rlcm0gPSBvcy5lbnZpcm9uLmdldCgnVEVSTScsICd1bmtub3duJykKIAotIyBYWFg6IGlmIG5ld3Rlcm0gd2FzIHN1cHBvcnRlZCB3ZSBjb3VsZCB1c2UgaXQgaW5zdGVhZCBvZiBpbml0c2NyIGFuZCBub3QgZXhpdAotdGVybSA9IG9zLmVudmlyb24uZ2V0KCdURVJNJykKLWlmIG5vdCB0ZXJtIG9yIHRlcm0gPT0gJ3Vua25vd24nOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCIkVEVSTT0lciwgY2FsbGluZyBpbml0c2NyKCkgbWF5IGNhdXNlIGV4aXQiICUgdGVybSkKK0B1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5fX3N0ZG91dF9fLmlzYXR0eSgpLCAnc3lzLl9fc3Rkb3V0X18gaXMgbm90IGEgdHR5JykKK0B1bml0dGVzdC5za2lwSWYodGVybSA9PSAndW5rbm93bicsCisgICAgICAgICAgICAgICAgICIkVEVSTT0lciwgY2FsbGluZyBpbml0c2NyKCkgbWF5IGNhdXNlIGV4aXQiICUgdGVybSkKK0B1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJjeWd3aW4iLAorICAgICAgICAgICAgICAgICAiY3lnd2luJ3MgY3Vyc2VzIG1vc3RseSBqdXN0IGhhbmdzIikKK2NsYXNzIFRlc3RDdXJzZXModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGN1cnNlcy5zZXR1cHRlcm0oZmQ9c3lzLl9fc3Rkb3V0X18uZmlsZW5vKCkpCiAKLWlmIHN5cy5wbGF0Zm9ybSA9PSAiY3lnd2luIjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiY3lnd2luJ3MgY3Vyc2VzIG1vc3RseSBqdXN0IGhhbmdzIikKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICAjIGp1c3QgdG8gbWFrZSB0aGUgdGVzdCBvdXRwdXQgYSBsaXR0bGUgbW9yZSByZWFkYWJsZQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICBzZWxmLnN0ZHNjciA9IGN1cnNlcy5pbml0c2NyKCkKKyAgICAgICAgY3Vyc2VzLnNhdmV0dHkoKQogCi1kZWYgd2luZG93X2Z1bmNzKHN0ZHNjcik6Ci0gICAgIlRlc3QgdGhlIG1ldGhvZHMgb2Ygd2luZG93cyIKLSAgICB3aW4gPSBjdXJzZXMubmV3d2luKDEwLDEwKQotICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSw1LCA1LDUpCi0gICAgd2luMiA9IGN1cnNlcy5uZXd3aW4oMTUsMTUsIDUsNSkKLQotICAgIGZvciBtZXRoIGluIFtzdGRzY3IuYWRkY2gsIHN0ZHNjci5hZGRzdHJdOgotICAgICAgICBmb3IgYXJncyBpbiBbKCdhJyksICgnYScsIGN1cnNlcy5BX0JPTEQpLAotICAgICAgICAgICAgICAgICAgICAgKDQsNCwgJ2EnKSwgKDUsNSwgJ2EnLCBjdXJzZXMuQV9CT0xEKV06Ci0gICAgICAgICAgICBtZXRoKCphcmdzKQotCi0gICAgZm9yIG1ldGggaW4gW3N0ZHNjci5ib3gsIHN0ZHNjci5jbGVhciwgc3Rkc2NyLmNscnRvYm90LAotICAgICAgICAgICAgICAgICBzdGRzY3IuY2xydG9lb2wsIHN0ZHNjci5jdXJzeW5jdXAsIHN0ZHNjci5kZWxjaCwKLSAgICAgICAgICAgICAgICAgc3Rkc2NyLmRlbGV0ZWxuLCBzdGRzY3IuZXJhc2UsIHN0ZHNjci5nZXRiZWd5eCwKLSAgICAgICAgICAgICAgICAgc3Rkc2NyLmdldGJrZ2QsIHN0ZHNjci5nZXRrZXksIHN0ZHNjci5nZXRtYXh5eCwKLSAgICAgICAgICAgICAgICAgc3Rkc2NyLmdldHBhcnl4LCBzdGRzY3IuZ2V0eXgsIHN0ZHNjci5pbmNoLAotICAgICAgICAgICAgICAgICBzdGRzY3IuaW5zZXJ0bG4sIHN0ZHNjci5pbnN0ciwgc3Rkc2NyLmlzX3dpbnRvdWNoZWQsCi0gICAgICAgICAgICAgICAgIHdpbi5ub3V0cmVmcmVzaCwgc3Rkc2NyLnJlZHJhd3dpbiwgc3Rkc2NyLnJlZnJlc2gsCi0gICAgICAgICAgICAgICAgIHN0ZHNjci5zdGFuZG91dCwgc3Rkc2NyLnN0YW5kZW5kLCBzdGRzY3Iuc3luY2Rvd24sCi0gICAgICAgICAgICAgICAgIHN0ZHNjci5zeW5jdXAsIHN0ZHNjci50b3VjaHdpbiwgc3Rkc2NyLnVudG91Y2h3aW5dOgotICAgICAgICBtZXRoKCkKLQotICAgIHN0ZHNjci5hZGRuc3RyKCcxMjM0JywgMykKLSAgICBzdGRzY3IuYWRkbnN0cignMTIzNCcsIDMsIGN1cnNlcy5BX0JPTEQpCi0gICAgc3Rkc2NyLmFkZG5zdHIoNCw0LCAnMTIzNCcsIDMpCi0gICAgc3Rkc2NyLmFkZG5zdHIoNSw1LCAnMTIzNCcsIDMsIGN1cnNlcy5BX0JPTEQpCi0KLSAgICBzdGRzY3IuYXR0cm9uKGN1cnNlcy5BX0JPTEQpCi0gICAgc3Rkc2NyLmF0dHJvZmYoY3Vyc2VzLkFfQk9MRCkKLSAgICBzdGRzY3IuYXR0cnNldChjdXJzZXMuQV9CT0xEKQotICAgIHN0ZHNjci5ia2dkKCcgJykKLSAgICBzdGRzY3IuYmtnZCgnICcsIGN1cnNlcy5BX1JFVkVSU0UpCi0gICAgc3Rkc2NyLmJrZ2RzZXQoJyAnKQotICAgIHN0ZHNjci5ia2dkc2V0KCcgJywgY3Vyc2VzLkFfUkVWRVJTRSkKLQotICAgIHdpbi5ib3JkZXIoNjUsIDY2LCA2NywgNjgsCi0gICAgICAgICAgICAgICA2OSwgNzAsIDcxLCA3MikKLSAgICB3aW4uYm9yZGVyKCd8JywgJyEnLCAnLScsICdfJywKLSAgICAgICAgICAgICAgICcrJywgJ1xcJywgJyMnLCAnLycpCi0gICAgdHJ5OgotICAgICAgICB3aW4uYm9yZGVyKDY1LCA2NiwgNjcsIDY4LAotICAgICAgICAgICAgICAgICAgIDY5LCBbXSwgNzEsIDcyKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkV4cGVjdGVkIHdpbi5ib3JkZXIoKSB0byByYWlzZSBUeXBlRXJyb3IiKQotCi0gICAgc3Rkc2NyLmNsZWFyb2soMSkKLQotICAgIHdpbjQgPSBzdGRzY3IuZGVyd2luKDIsMikKLSAgICB3aW40ID0gc3Rkc2NyLmRlcndpbigxLDEsIDUsNSkKLSAgICB3aW40Lm12ZGVyd2luKDksOSkKLQotICAgIHN0ZHNjci5lY2hvY2hhcignYScpCi0gICAgc3Rkc2NyLmVjaG9jaGFyKCdhJywgY3Vyc2VzLkFfQk9MRCkKLSAgICBzdGRzY3IuaGxpbmUoJy0nLCA1KQotICAgIHN0ZHNjci5obGluZSgnLScsIDUsIGN1cnNlcy5BX0JPTEQpCi0gICAgc3Rkc2NyLmhsaW5lKDEsMSwnLScsIDUpCi0gICAgc3Rkc2NyLmhsaW5lKDEsMSwnLScsIDUsIGN1cnNlcy5BX0JPTEQpCi0KLSAgICBzdGRzY3IuaWRjb2soMSkKLSAgICBzdGRzY3IuaWRsb2soMSkKLSAgICBzdGRzY3IuaW1tZWRvaygxKQotICAgIHN0ZHNjci5pbnNjaCgnYycpCi0gICAgc3Rkc2NyLmluc2RlbGxuKDEpCi0gICAgc3Rkc2NyLmluc25zdHIoJ2FiYycsIDMpCi0gICAgc3Rkc2NyLmluc25zdHIoJ2FiYycsIDMsIGN1cnNlcy5BX0JPTEQpCi0gICAgc3Rkc2NyLmluc25zdHIoNSwgNSwgJ2FiYycsIDMpCi0gICAgc3Rkc2NyLmluc25zdHIoNSwgNSwgJ2FiYycsIDMsIGN1cnNlcy5BX0JPTEQpCi0KLSAgICBzdGRzY3IuaW5zc3RyKCdkZWYnKQotICAgIHN0ZHNjci5pbnNzdHIoJ2RlZicsIGN1cnNlcy5BX0JPTEQpCi0gICAgc3Rkc2NyLmluc3N0cig1LCA1LCAnZGVmJykKLSAgICBzdGRzY3IuaW5zc3RyKDUsIDUsICdkZWYnLCBjdXJzZXMuQV9CT0xEKQotICAgIHN0ZHNjci5pc19saW5ldG91Y2hlZCgwKQotICAgIHN0ZHNjci5rZXlwYWQoMSkKLSAgICBzdGRzY3IubGVhdmVvaygxKQotICAgIHN0ZHNjci5tb3ZlKDMsMykKLSAgICB3aW4ubXZ3aW4oMiwyKQotICAgIHN0ZHNjci5ub2RlbGF5KDEpCi0gICAgc3Rkc2NyLm5vdGltZW91dCgxKQotICAgIHdpbjIub3ZlcmxheSh3aW4pCi0gICAgd2luMi5vdmVyd3JpdGUod2luKQotICAgIHdpbjIub3ZlcmxheSh3aW4sIDEsIDIsIDMsIDMsIDIsIDEpCi0gICAgd2luMi5vdmVyd3JpdGUod2luLCAxLCAyLCAzLCAzLCAyLCAxKQotICAgIHN0ZHNjci5yZWRyYXdsbigxLDIpCi0KLSAgICBzdGRzY3Iuc2Nyb2xsb2soMSkKLSAgICBzdGRzY3Iuc2Nyb2xsKCkKLSAgICBzdGRzY3Iuc2Nyb2xsKDIpCi0gICAgc3Rkc2NyLnNjcm9sbCgtMykKLQotICAgIHN0ZHNjci5tb3ZlKDEyLCAyKQotICAgIHN0ZHNjci5zZXRzY3JyZWcoMTAsMTUpCi0gICAgd2luMyA9IHN0ZHNjci5zdWJ3aW4oMTAsMTApCi0gICAgd2luMyA9IHN0ZHNjci5zdWJ3aW4oMTAsMTAsIDUsNSkKLSAgICBzdGRzY3Iuc3luY29rKDEpCi0gICAgc3Rkc2NyLnRpbWVvdXQoNSkKLSAgICBzdGRzY3IudG91Y2hsaW5lKDUsNSkKLSAgICBzdGRzY3IudG91Y2hsaW5lKDUsNSwwKQotICAgIHN0ZHNjci52bGluZSgnYScsIDMpCi0gICAgc3Rkc2NyLnZsaW5lKCdhJywgMywgY3Vyc2VzLkFfU1RBTkRPVVQpCi0gICAgc3Rkc2NyLmNoZ2F0KDUsIDIsIDMsIGN1cnNlcy5BX0JMSU5LKQotICAgIHN0ZHNjci5jaGdhdCgzLCBjdXJzZXMuQV9CT0xEKQotICAgIHN0ZHNjci5jaGdhdCg1LCA4LCBjdXJzZXMuQV9VTkRFUkxJTkUpCi0gICAgc3Rkc2NyLmNoZ2F0KGN1cnNlcy5BX0JMSU5LKQotICAgIHN0ZHNjci5yZWZyZXNoKCkKLQotICAgIHN0ZHNjci52bGluZSgxLDEsICdhJywgMykKLSAgICBzdGRzY3IudmxpbmUoMSwxLCAnYScsIDMsIGN1cnNlcy5BX1NUQU5ET1VUKQotCi0gICAgaWYgaGFzYXR0cihjdXJzZXMsICdyZXNpemUnKToKLSAgICAgICAgc3Rkc2NyLnJlc2l6ZSgpCi0gICAgaWYgaGFzYXR0cihjdXJzZXMsICdlbmNsb3NlJyk6Ci0gICAgICAgIHN0ZHNjci5lbmNsb3NlKCkKLQotCi1kZWYgbW9kdWxlX2Z1bmNzKHN0ZHNjcik6Ci0gICAgIlRlc3QgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucyIKLQotICAgIGZvciBmdW5jIGluIFtjdXJzZXMuYmF1ZHJhdGUsIGN1cnNlcy5iZWVwLCBjdXJzZXMuY2FuX2NoYW5nZV9jb2xvciwKLSAgICAgICAgICAgICAgICAgY3Vyc2VzLmNicmVhaywgY3Vyc2VzLmRlZl9wcm9nX21vZGUsIGN1cnNlcy5kb3VwZGF0ZSwKLSAgICAgICAgICAgICAgICAgY3Vyc2VzLmZpbHRlciwgY3Vyc2VzLmZsYXNoLCBjdXJzZXMuZmx1c2hpbnAsCi0gICAgICAgICAgICAgICAgIGN1cnNlcy5oYXNfY29sb3JzLCBjdXJzZXMuaGFzX2ljLCBjdXJzZXMuaGFzX2lsLAotICAgICAgICAgICAgICAgICBjdXJzZXMuaXNlbmR3aW4sIGN1cnNlcy5raWxsY2hhciwgY3Vyc2VzLmxvbmduYW1lLAotICAgICAgICAgICAgICAgICBjdXJzZXMubm9jYnJlYWssIGN1cnNlcy5ub2VjaG8sIGN1cnNlcy5ub25sLAotICAgICAgICAgICAgICAgICBjdXJzZXMubm9xaWZsdXNoLCBjdXJzZXMubm9yYXcsCi0gICAgICAgICAgICAgICAgIGN1cnNlcy5yZXNldF9wcm9nX21vZGUsIGN1cnNlcy50ZXJtYXR0cnMsCi0gICAgICAgICAgICAgICAgIGN1cnNlcy50ZXJtbmFtZSwgY3Vyc2VzLmVyYXNlY2hhciwgY3Vyc2VzLmdldHN5eF06Ci0gICAgICAgIGZ1bmMoKQotCi0gICAgIyBGdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBuZWVkIGFyZ3VtZW50cwotICAgIGlmIGN1cnNlcy50aWdldHN0cigiY25vcm0iKToKLSAgICAgICAgY3Vyc2VzLmN1cnNfc2V0KDEpCi0gICAgY3Vyc2VzLmRlbGF5X291dHB1dCgxKQotICAgIGN1cnNlcy5lY2hvKCkgOyBjdXJzZXMuZWNobygxKQotCi0gICAgZiA9IHRlbXBmaWxlLlRlbXBvcmFyeUZpbGUoKQotICAgIHN0ZHNjci5wdXR3aW4oZikKLSAgICBmLnNlZWsoMCkKLSAgICBjdXJzZXMuZ2V0d2luKGYpCi0gICAgZi5jbG9zZSgpCi0KLSAgICBjdXJzZXMuaGFsZmRlbGF5KDEpCi0gICAgY3Vyc2VzLmludHJmbHVzaCgxKQotICAgIGN1cnNlcy5tZXRhKDEpCi0gICAgY3Vyc2VzLm5hcG1zKDEwMCkKLSAgICBjdXJzZXMubmV3cGFkKDUwLDUwKQotICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSw1KQotICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSw1LCAxLDEpCi0gICAgY3Vyc2VzLm5sKCkgOyBjdXJzZXMubmwoMSkKLSAgICBjdXJzZXMucHV0cChiJ2FiYycpCi0gICAgY3Vyc2VzLnFpZmx1c2goKQotICAgIGN1cnNlcy5yYXcoKSA7IGN1cnNlcy5yYXcoMSkKLSAgICBjdXJzZXMuc2V0c3l4KDUsNSkKLSAgICBjdXJzZXMudGlnZXRmbGFnKCdoYycpCi0gICAgY3Vyc2VzLnRpZ2V0bnVtKCdjbycpCi0gICAgY3Vyc2VzLnRpZ2V0c3RyKCdjcicpCi0gICAgY3Vyc2VzLnRwYXJtKGInY3InKQotICAgIGN1cnNlcy50eXBlYWhlYWQoc3lzLl9fc3RkaW5fXy5maWxlbm8oKSkKLSAgICBjdXJzZXMudW5jdHJsKCdhJykKLSAgICBjdXJzZXMudW5nZXRjaCgnYScpCi0gICAgY3Vyc2VzLnVzZV9lbnYoMSkKLQotICAgICMgRnVuY3Rpb25zIG9ubHkgYXZhaWxhYmxlIG9uIGEgZmV3IHBsYXRmb3JtcwotICAgIGlmIGN1cnNlcy5oYXNfY29sb3JzKCk6Ci0gICAgICAgIGN1cnNlcy5zdGFydF9jb2xvcigpCi0gICAgICAgIGN1cnNlcy5pbml0X3BhaXIoMiwgMSwxKQotICAgICAgICBjdXJzZXMuY29sb3JfY29udGVudCgxKQotICAgICAgICBjdXJzZXMuY29sb3JfcGFpcigyKQotICAgICAgICBjdXJzZXMucGFpcl9jb250ZW50KGN1cnNlcy5DT0xPUl9QQUlSUyAtIDEpCi0gICAgICAgIGN1cnNlcy5wYWlyX251bWJlcigwKQotCi0gICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAndXNlX2RlZmF1bHRfY29sb3JzJyk6Ci0gICAgICAgICAgICBjdXJzZXMudXNlX2RlZmF1bHRfY29sb3JzKCkKLQotICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAna2V5bmFtZScpOgotICAgICAgICBjdXJzZXMua2V5bmFtZSgxMykKLQotICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnaGFzX2tleScpOgotICAgICAgICBjdXJzZXMuaGFzX2tleSgxMykKLQotICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnZ2V0bW91c2UnKToKLSAgICAgICAgKGF2YWlsbWFzaywgb2xkbWFzaykgPSBjdXJzZXMubW91c2VtYXNrKGN1cnNlcy5CVVRUT04xX1BSRVNTRUQpCi0gICAgICAgICMgYXZhaWxtYXNrIGluZGljYXRlcyB0aGF0IG1vdXNlIHN0dWZmIG5vdCBhdmFpbGFibGUuCi0gICAgICAgIGlmIGF2YWlsbWFzayAhPSAwOgotICAgICAgICAgICAgY3Vyc2VzLm1vdXNlaW50ZXJ2YWwoMTApCi0gICAgICAgICAgICAjIGp1c3QgdmVyaWZ5IHRoZXNlIGRvbid0IGNhdXNlIGVycm9ycwotICAgICAgICAgICAgY3Vyc2VzLnVuZ2V0bW91c2UoMCwgMCwgMCwgMCwgY3Vyc2VzLkJVVFRPTjFfUFJFU1NFRCkKLSAgICAgICAgICAgIG0gPSBjdXJzZXMuZ2V0bW91c2UoKQotCi0gICAgaWYgaGFzYXR0cihjdXJzZXMsICdpc190ZXJtX3Jlc2l6ZWQnKToKLSAgICAgICAgY3Vyc2VzLmlzX3Rlcm1fcmVzaXplZCgqc3Rkc2NyLmdldG1heHl4KCkpCi0gICAgaWYgaGFzYXR0cihjdXJzZXMsICdyZXNpemV0ZXJtJyk6Ci0gICAgICAgIGN1cnNlcy5yZXNpemV0ZXJtKCpzdGRzY3IuZ2V0bWF4eXgoKSkKLSAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3Jlc2l6ZV90ZXJtJyk6Ci0gICAgICAgIGN1cnNlcy5yZXNpemVfdGVybSgqc3Rkc2NyLmdldG1heHl4KCkpCi0KLWRlZiB1bml0X3Rlc3RzKCk6Ci0gICAgZnJvbSBjdXJzZXMgaW1wb3J0IGFzY2lpCi0gICAgZm9yIGNoLCBleHBlY3RlZCBpbiBbKCdhJywgJ2EnKSwgKCdBJywgJ0EnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoJzsnLCAnOycpLCAoJyAnLCAnICcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICgnXHg3ZicsICdePycpLCAoJ1xuJywgJ15KJyksICgnXDAnLCAnXkAnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAjIE1ldGEtYml0IGNoYXJhY3RlcnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4OGEnLCAnIV5KJyksICgnXHhjMScsICchQScpLAotICAgICAgICAgICAgICAgICAgICAgICAgIF06Ci0gICAgICAgIGlmIGFzY2lpLnVuY3RybChjaCkgIT0gZXhwZWN0ZWQ6Ci0gICAgICAgICAgICBwcmludCgnY3Vyc2VzLnVuY3RybCBmYWlscyBvbiBjaGFyYWN0ZXInLCByZXByKGNoKSkKLQotCi1kZWYgdGVzdF91c2VycHRyX3dpdGhvdXRfc2V0KHN0ZHNjcik6Ci0gICAgdyA9IGN1cnNlcy5uZXd3aW4oMTAsIDEwKQotICAgIHAgPSBjdXJzZXMucGFuZWwubmV3X3BhbmVsKHcpCi0gICAgIyB0cnkgdG8gYWNjZXNzIHVzZXJwdHIoKSBiZWZvcmUgY2FsbGluZyBzZXRfdXNlcnB0cigpIC0tIHNlZ2ZhdWx0cwotICAgIHRyeToKLSAgICAgICAgcC51c2VycHRyKCkKLSAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCd1c2VycHRyIHNob3VsZCBmYWlsIHNpbmNlIG5vdCBzZXQnKQotICAgIGV4Y2VwdCBjdXJzZXMucGFuZWwuZXJyb3I6Ci0gICAgICAgIHBhc3MKLQotZGVmIHRlc3RfdXNlcnB0cl9tZW1vcnlfbGVhayhzdGRzY3IpOgotICAgIHcgPSBjdXJzZXMubmV3d2luKDEwLCAxMCkKLSAgICBwID0gY3Vyc2VzLnBhbmVsLm5ld19wYW5lbCh3KQotICAgIG9iaiA9IG9iamVjdCgpCi0gICAgbnJlZnMgPSBzeXMuZ2V0cmVmY291bnQob2JqKQotICAgIGZvciBpIGluIHJhbmdlKDEwMCk6Ci0gICAgICAgIHAuc2V0X3VzZXJwdHIob2JqKQotCi0gICAgcC5zZXRfdXNlcnB0cihOb25lKQotICAgIGlmIHN5cy5nZXRyZWZjb3VudChvYmopICE9IG5yZWZzOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInNldF91c2VycHRyIGxlYWtlZCByZWZlcmVuY2VzIikKLQotZGVmIHRlc3RfdXNlcnB0cl9zZWdmYXVsdChzdGRzY3IpOgotICAgIHBhbmVsID0gY3Vyc2VzLnBhbmVsLm5ld19wYW5lbChzdGRzY3IpCi0gICAgY2xhc3MgQToKLSAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6Ci0gICAgICAgICAgICBwYW5lbC5zZXRfdXNlcnB0cihOb25lKQotICAgIHBhbmVsLnNldF91c2VycHRyKEEoKSkKLSAgICBwYW5lbC5zZXRfdXNlcnB0cihOb25lKQotCi1kZWYgdGVzdF9yZXNpemVfdGVybShzdGRzY3IpOgotICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAncmVzaXpldGVybScpOgotICAgICAgICBsaW5lcywgY29scyA9IGN1cnNlcy5MSU5FUywgY3Vyc2VzLkNPTFMKLSAgICAgICAgY3Vyc2VzLnJlc2l6ZXRlcm0obGluZXMgLSAxLCBjb2xzICsgMSkKLQotICAgICAgICBpZiBjdXJzZXMuTElORVMgIT0gbGluZXMgLSAxIG9yIGN1cnNlcy5DT0xTICE9IGNvbHMgKyAxOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJFeHBlY3RlZCByZXNpemV0ZXJtIHRvIHVwZGF0ZSBMSU5FUyBhbmQgQ09MUyIpCi0KLWRlZiB0ZXN0X2lzc3VlNjI0MyhzdGRzY3IpOgotICAgIGN1cnNlcy51bmdldGNoKDEwMjUpCi0gICAgc3Rkc2NyLmdldGtleSgpCi0KLWRlZiB0ZXN0X3VuZ2V0X3djaChzdGRzY3IpOgotICAgIGlmIG5vdCBoYXNhdHRyKGN1cnNlcywgJ3VuZ2V0X3djaCcpOgotICAgICAgICByZXR1cm4KLSAgICBlbmNvZGluZyA9IHN0ZHNjci5lbmNvZGluZwotICAgIGZvciBjaCBpbiAoJ2EnLCAnXHhlOScsICdcdTIwYWMnLCAnXFUwMDEwRkZGRicpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjaC5lbmNvZGUoZW5jb2RpbmcpCi0gICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjdXJzZXMudW5nZXRfd2NoKGNoKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKLSAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigidW5nZXRfd2NoKCVhKSBmYWlsZWQgd2l0aCBlbmNvZGluZyAlczogJXMiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJSAoY2gsIHN0ZHNjci5lbmNvZGluZywgZXJyKSkKLSAgICAgICAgcmVhZCA9IHN0ZHNjci5nZXRfd2NoKCkKLSAgICAgICAgaWYgcmVhZCAhPSBjaDoKLSAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlciAhPSAlciIgJSAocmVhZCwgY2gpKQotCi0gICAgICAgIGNvZGUgPSBvcmQoY2gpCi0gICAgICAgIGN1cnNlcy51bmdldF93Y2goY29kZSkKLSAgICAgICAgcmVhZCA9IHN0ZHNjci5nZXRfd2NoKCkKLSAgICAgICAgaWYgcmVhZCAhPSBjaDoKLSAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCIlciAhPSAlciIgJSAocmVhZCwgY2gpKQotCi1kZWYgdGVzdF9pc3N1ZTEwNTcwKCk6Ci0gICAgYiA9IGN1cnNlcy50cGFybShjdXJzZXMudGlnZXRzdHIoImN1cCIpLCA1LCAzKQotICAgIGFzc2VydCB0eXBlKGIpIGlzIGJ5dGVzCi0gICAgY3Vyc2VzLnB1dHAoYikKLQotZGVmIHRlc3RfZW5jb2Rpbmcoc3Rkc2NyKToKLSAgICBpbXBvcnQgY29kZWNzCi0gICAgZW5jb2RpbmcgPSBzdGRzY3IuZW5jb2RpbmcKLSAgICBjb2RlY3MubG9va3VwKGVuY29kaW5nKQotICAgIHRyeToKLSAgICAgICAgc3Rkc2NyLmVuY29kaW5nID0gMTAKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlR5cGVFcnJvciBub3QgcmFpc2VkIikKLSAgICBzdGRzY3IuZW5jb2RpbmcgPSBlbmNvZGluZwotICAgIHRyeToKLSAgICAgICAgZGVsIHN0ZHNjci5lbmNvZGluZwotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgIHBhc3MKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiVHlwZUVycm9yIG5vdCByYWlzZWQiKQotCi1kZWYgbWFpbihzdGRzY3IpOgotICAgIGN1cnNlcy5zYXZldHR5KCkKLSAgICB0cnk6Ci0gICAgICAgIG1vZHVsZV9mdW5jcyhzdGRzY3IpCi0gICAgICAgIHdpbmRvd19mdW5jcyhzdGRzY3IpCi0gICAgICAgIHRlc3RfdXNlcnB0cl93aXRob3V0X3NldChzdGRzY3IpCi0gICAgICAgIHRlc3RfdXNlcnB0cl9tZW1vcnlfbGVhayhzdGRzY3IpCi0gICAgICAgIHRlc3RfdXNlcnB0cl9zZWdmYXVsdChzdGRzY3IpCi0gICAgICAgIHRlc3RfcmVzaXplX3Rlcm0oc3Rkc2NyKQotICAgICAgICB0ZXN0X2lzc3VlNjI0MyhzdGRzY3IpCi0gICAgICAgIHRlc3RfdW5nZXRfd2NoKHN0ZHNjcikKLSAgICAgICAgdGVzdF9pc3N1ZTEwNTcwKCkKLSAgICAgICAgdGVzdF9lbmNvZGluZyhzdGRzY3IpCi0gICAgZmluYWxseToKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGN1cnNlcy5yZXNldHR5KCkKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGlmIG5vdCBzeXMuX19zdGRvdXRfXy5pc2F0dHkoKToKLSAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoInN5cy5fX3N0ZG91dF9fIGlzIG5vdCBhIHR0eSIpCi0gICAgIyB0ZXN0aW5nIHNldHVwdGVybSgpIGluc2lkZSBpbml0c2NyL2VuZHdpbgotICAgICMgY2F1c2VzIHRlcm1pbmFsIGJyZWFrYWdlCi0gICAgY3Vyc2VzLnNldHVwdGVybShmZD1zeXMuX19zdGRvdXRfXy5maWxlbm8oKSkKLSAgICB0cnk6Ci0gICAgICAgIHN0ZHNjciA9IGN1cnNlcy5pbml0c2NyKCkKLSAgICAgICAgbWFpbihzdGRzY3IpCi0gICAgZmluYWxseToKICAgICAgICAgY3Vyc2VzLmVuZHdpbigpCi0gICAgdW5pdF90ZXN0cygpCisKKyAgICBkZWYgdGVzdF93aW5kb3dfZnVuY3Moc2VsZik6CisgICAgICAgICJUZXN0IHRoZSBtZXRob2RzIG9mIHdpbmRvd3MiCisgICAgICAgIHN0ZHNjciA9IHNlbGYuc3Rkc2NyCisgICAgICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oMTAsMTApCisgICAgICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSw1LCA1LDUpCisgICAgICAgIHdpbjIgPSBjdXJzZXMubmV3d2luKDE1LDE1LCA1LDUpCisKKyAgICAgICAgZm9yIG1ldGggaW4gW3N0ZHNjci5hZGRjaCwgc3Rkc2NyLmFkZHN0cl06CisgICAgICAgICAgICBmb3IgYXJncyBpbiBbKCdhJyksICgnYScsIGN1cnNlcy5BX0JPTEQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICg0LDQsICdhJyksICg1LDUsICdhJywgY3Vyc2VzLkFfQk9MRCldOgorICAgICAgICAgICAgICAgIG1ldGgoKmFyZ3MpCisKKyAgICAgICAgZm9yIG1ldGggaW4gW3N0ZHNjci5ib3gsIHN0ZHNjci5jbGVhciwgc3Rkc2NyLmNscnRvYm90LAorICAgICAgICAgICAgICAgICAgICAgc3Rkc2NyLmNscnRvZW9sLCBzdGRzY3IuY3Vyc3luY3VwLCBzdGRzY3IuZGVsY2gsCisgICAgICAgICAgICAgICAgICAgICBzdGRzY3IuZGVsZXRlbG4sIHN0ZHNjci5lcmFzZSwgc3Rkc2NyLmdldGJlZ3l4LAorICAgICAgICAgICAgICAgICAgICAgc3Rkc2NyLmdldGJrZ2QsIHN0ZHNjci5nZXRrZXksIHN0ZHNjci5nZXRtYXh5eCwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZHNjci5nZXRwYXJ5eCwgc3Rkc2NyLmdldHl4LCBzdGRzY3IuaW5jaCwKKyAgICAgICAgICAgICAgICAgICAgIHN0ZHNjci5pbnNlcnRsbiwgc3Rkc2NyLmluc3RyLCBzdGRzY3IuaXNfd2ludG91Y2hlZCwKKyAgICAgICAgICAgICAgICAgICAgIHdpbi5ub3V0cmVmcmVzaCwgc3Rkc2NyLnJlZHJhd3dpbiwgc3Rkc2NyLnJlZnJlc2gsCisgICAgICAgICAgICAgICAgICAgICBzdGRzY3Iuc3RhbmRvdXQsIHN0ZHNjci5zdGFuZGVuZCwgc3Rkc2NyLnN5bmNkb3duLAorICAgICAgICAgICAgICAgICAgICAgc3Rkc2NyLnN5bmN1cCwgc3Rkc2NyLnRvdWNod2luLCBzdGRzY3IudW50b3VjaHdpbl06CisgICAgICAgICAgICBtZXRoKCkKKworICAgICAgICBzdGRzY3IuYWRkbnN0cignMTIzNCcsIDMpCisgICAgICAgIHN0ZHNjci5hZGRuc3RyKCcxMjM0JywgMywgY3Vyc2VzLkFfQk9MRCkKKyAgICAgICAgc3Rkc2NyLmFkZG5zdHIoNCw0LCAnMTIzNCcsIDMpCisgICAgICAgIHN0ZHNjci5hZGRuc3RyKDUsNSwgJzEyMzQnLCAzLCBjdXJzZXMuQV9CT0xEKQorCisgICAgICAgIHN0ZHNjci5hdHRyb24oY3Vyc2VzLkFfQk9MRCkKKyAgICAgICAgc3Rkc2NyLmF0dHJvZmYoY3Vyc2VzLkFfQk9MRCkKKyAgICAgICAgc3Rkc2NyLmF0dHJzZXQoY3Vyc2VzLkFfQk9MRCkKKyAgICAgICAgc3Rkc2NyLmJrZ2QoJyAnKQorICAgICAgICBzdGRzY3IuYmtnZCgnICcsIGN1cnNlcy5BX1JFVkVSU0UpCisgICAgICAgIHN0ZHNjci5ia2dkc2V0KCcgJykKKyAgICAgICAgc3Rkc2NyLmJrZ2RzZXQoJyAnLCBjdXJzZXMuQV9SRVZFUlNFKQorCisgICAgICAgIHdpbi5ib3JkZXIoNjUsIDY2LCA2NywgNjgsCisgICAgICAgICAgICAgICAgICAgNjksIDcwLCA3MSwgNzIpCisgICAgICAgIHdpbi5ib3JkZXIoJ3wnLCAnIScsICctJywgJ18nLAorICAgICAgICAgICAgICAgICAgICcrJywgJ1xcJywgJyMnLCAnLycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iRXhwZWN0ZWQgd2luLmJvcmRlcigpIHRvIHJhaXNlIFR5cGVFcnJvciIpOgorICAgICAgICAgICAgd2luLmJvcmRlcig2NSwgNjYsIDY3LCA2OCwKKyAgICAgICAgICAgICAgICAgICAgICAgNjksIFtdLCA3MSwgNzIpCisKKyAgICAgICAgc3Rkc2NyLmNsZWFyb2soMSkKKworICAgICAgICB3aW40ID0gc3Rkc2NyLmRlcndpbigyLDIpCisgICAgICAgIHdpbjQgPSBzdGRzY3IuZGVyd2luKDEsMSwgNSw1KQorICAgICAgICB3aW40Lm12ZGVyd2luKDksOSkKKworICAgICAgICBzdGRzY3IuZWNob2NoYXIoJ2EnKQorICAgICAgICBzdGRzY3IuZWNob2NoYXIoJ2EnLCBjdXJzZXMuQV9CT0xEKQorICAgICAgICBzdGRzY3IuaGxpbmUoJy0nLCA1KQorICAgICAgICBzdGRzY3IuaGxpbmUoJy0nLCA1LCBjdXJzZXMuQV9CT0xEKQorICAgICAgICBzdGRzY3IuaGxpbmUoMSwxLCctJywgNSkKKyAgICAgICAgc3Rkc2NyLmhsaW5lKDEsMSwnLScsIDUsIGN1cnNlcy5BX0JPTEQpCisKKyAgICAgICAgc3Rkc2NyLmlkY29rKDEpCisgICAgICAgIHN0ZHNjci5pZGxvaygxKQorICAgICAgICBzdGRzY3IuaW1tZWRvaygxKQorICAgICAgICBzdGRzY3IuaW5zY2goJ2MnKQorICAgICAgICBzdGRzY3IuaW5zZGVsbG4oMSkKKyAgICAgICAgc3Rkc2NyLmluc25zdHIoJ2FiYycsIDMpCisgICAgICAgIHN0ZHNjci5pbnNuc3RyKCdhYmMnLCAzLCBjdXJzZXMuQV9CT0xEKQorICAgICAgICBzdGRzY3IuaW5zbnN0cig1LCA1LCAnYWJjJywgMykKKyAgICAgICAgc3Rkc2NyLmluc25zdHIoNSwgNSwgJ2FiYycsIDMsIGN1cnNlcy5BX0JPTEQpCisKKyAgICAgICAgc3Rkc2NyLmluc3N0cignZGVmJykKKyAgICAgICAgc3Rkc2NyLmluc3N0cignZGVmJywgY3Vyc2VzLkFfQk9MRCkKKyAgICAgICAgc3Rkc2NyLmluc3N0cig1LCA1LCAnZGVmJykKKyAgICAgICAgc3Rkc2NyLmluc3N0cig1LCA1LCAnZGVmJywgY3Vyc2VzLkFfQk9MRCkKKyAgICAgICAgc3Rkc2NyLmlzX2xpbmV0b3VjaGVkKDApCisgICAgICAgIHN0ZHNjci5rZXlwYWQoMSkKKyAgICAgICAgc3Rkc2NyLmxlYXZlb2soMSkKKyAgICAgICAgc3Rkc2NyLm1vdmUoMywzKQorICAgICAgICB3aW4ubXZ3aW4oMiwyKQorICAgICAgICBzdGRzY3Iubm9kZWxheSgxKQorICAgICAgICBzdGRzY3Iubm90aW1lb3V0KDEpCisgICAgICAgIHdpbjIub3ZlcmxheSh3aW4pCisgICAgICAgIHdpbjIub3ZlcndyaXRlKHdpbikKKyAgICAgICAgd2luMi5vdmVybGF5KHdpbiwgMSwgMiwgMiwgMSwgMywgMykKKyAgICAgICAgd2luMi5vdmVyd3JpdGUod2luLCAxLCAyLCAyLCAxLCAzLCAzKQorICAgICAgICBzdGRzY3IucmVkcmF3bG4oMSwyKQorCisgICAgICAgIHN0ZHNjci5zY3JvbGxvaygxKQorICAgICAgICBzdGRzY3Iuc2Nyb2xsKCkKKyAgICAgICAgc3Rkc2NyLnNjcm9sbCgyKQorICAgICAgICBzdGRzY3Iuc2Nyb2xsKC0zKQorCisgICAgICAgIHN0ZHNjci5tb3ZlKDEyLCAyKQorICAgICAgICBzdGRzY3Iuc2V0c2NycmVnKDEwLDE1KQorICAgICAgICB3aW4zID0gc3Rkc2NyLnN1YndpbigxMCwxMCkKKyAgICAgICAgd2luMyA9IHN0ZHNjci5zdWJ3aW4oMTAsMTAsIDUsNSkKKyAgICAgICAgc3Rkc2NyLnN5bmNvaygxKQorICAgICAgICBzdGRzY3IudGltZW91dCg1KQorICAgICAgICBzdGRzY3IudG91Y2hsaW5lKDUsNSkKKyAgICAgICAgc3Rkc2NyLnRvdWNobGluZSg1LDUsMCkKKyAgICAgICAgc3Rkc2NyLnZsaW5lKCdhJywgMykKKyAgICAgICAgc3Rkc2NyLnZsaW5lKCdhJywgMywgY3Vyc2VzLkFfU1RBTkRPVVQpCisgICAgICAgIHN0ZHNjci5jaGdhdCg1LCAyLCAzLCBjdXJzZXMuQV9CTElOSykKKyAgICAgICAgc3Rkc2NyLmNoZ2F0KDMsIGN1cnNlcy5BX0JPTEQpCisgICAgICAgIHN0ZHNjci5jaGdhdCg1LCA4LCBjdXJzZXMuQV9VTkRFUkxJTkUpCisgICAgICAgIHN0ZHNjci5jaGdhdChjdXJzZXMuQV9CTElOSykKKyAgICAgICAgc3Rkc2NyLnJlZnJlc2goKQorCisgICAgICAgIHN0ZHNjci52bGluZSgxLDEsICdhJywgMykKKyAgICAgICAgc3Rkc2NyLnZsaW5lKDEsMSwgJ2EnLCAzLCBjdXJzZXMuQV9TVEFORE9VVCkKKworICAgICAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ3Jlc2l6ZScpOgorICAgICAgICAgICAgc3Rkc2NyLnJlc2l6ZSgpCisgICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnZW5jbG9zZScpOgorICAgICAgICAgICAgc3Rkc2NyLmVuY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0ZHNjci5nZXRzdHIsIC00MDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0ZHNjci5nZXRzdHIsIDIsIDMsIC00MDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0ZHNjci5pbnN0ciwgLTIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHN0ZHNjci5pbnN0ciwgMiwgMywgLTIpCisKKworICAgIGRlZiB0ZXN0X21vZHVsZV9mdW5jcyhzZWxmKToKKyAgICAgICAgIlRlc3QgbW9kdWxlLWxldmVsIGZ1bmN0aW9ucyIKKyAgICAgICAgc3Rkc2NyID0gc2VsZi5zdGRzY3IKKyAgICAgICAgZm9yIGZ1bmMgaW4gW2N1cnNlcy5iYXVkcmF0ZSwgY3Vyc2VzLmJlZXAsIGN1cnNlcy5jYW5fY2hhbmdlX2NvbG9yLAorICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLmNicmVhaywgY3Vyc2VzLmRlZl9wcm9nX21vZGUsIGN1cnNlcy5kb3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5maWx0ZXIsIGN1cnNlcy5mbGFzaCwgY3Vyc2VzLmZsdXNoaW5wLAorICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLmhhc19jb2xvcnMsIGN1cnNlcy5oYXNfaWMsIGN1cnNlcy5oYXNfaWwsCisgICAgICAgICAgICAgICAgICAgICBjdXJzZXMuaXNlbmR3aW4sIGN1cnNlcy5raWxsY2hhciwgY3Vyc2VzLmxvbmduYW1lLAorICAgICAgICAgICAgICAgICAgICAgY3Vyc2VzLm5vY2JyZWFrLCBjdXJzZXMubm9lY2hvLCBjdXJzZXMubm9ubCwKKyAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5ub3FpZmx1c2gsIGN1cnNlcy5ub3JhdywKKyAgICAgICAgICAgICAgICAgICAgIGN1cnNlcy5yZXNldF9wcm9nX21vZGUsIGN1cnNlcy50ZXJtYXR0cnMsCisgICAgICAgICAgICAgICAgICAgICBjdXJzZXMudGVybW5hbWUsIGN1cnNlcy5lcmFzZWNoYXIsIGN1cnNlcy5nZXRzeXhdOgorICAgICAgICAgICAgZnVuYygpCisKKyAgICAgICAgIyBGdW5jdGlvbnMgdGhhdCBhY3R1YWxseSBuZWVkIGFyZ3VtZW50cworICAgICAgICBpZiBjdXJzZXMudGlnZXRzdHIoImNub3JtIik6CisgICAgICAgICAgICBjdXJzZXMuY3Vyc19zZXQoMSkKKyAgICAgICAgY3Vyc2VzLmRlbGF5X291dHB1dCgxKQorICAgICAgICBjdXJzZXMuZWNobygpIDsgY3Vyc2VzLmVjaG8oMSkKKworICAgICAgICBmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHN0ZHNjci5wdXR3aW4oZikKKyAgICAgICAgZi5zZWVrKDApCisgICAgICAgIGN1cnNlcy5nZXR3aW4oZikKKyAgICAgICAgZi5jbG9zZSgpCisKKyAgICAgICAgY3Vyc2VzLmhhbGZkZWxheSgxKQorICAgICAgICBjdXJzZXMuaW50cmZsdXNoKDEpCisgICAgICAgIGN1cnNlcy5tZXRhKDEpCisgICAgICAgIGN1cnNlcy5uYXBtcygxMDApCisgICAgICAgIGN1cnNlcy5uZXdwYWQoNTAsNTApCisgICAgICAgIHdpbiA9IGN1cnNlcy5uZXd3aW4oNSw1KQorICAgICAgICB3aW4gPSBjdXJzZXMubmV3d2luKDUsNSwgMSwxKQorICAgICAgICBjdXJzZXMubmwoKSA7IGN1cnNlcy5ubCgxKQorICAgICAgICBjdXJzZXMucHV0cChiJ2FiYycpCisgICAgICAgIGN1cnNlcy5xaWZsdXNoKCkKKyAgICAgICAgY3Vyc2VzLnJhdygpIDsgY3Vyc2VzLnJhdygxKQorICAgICAgICBjdXJzZXMuc2V0c3l4KDUsNSkKKyAgICAgICAgY3Vyc2VzLnRpZ2V0ZmxhZygnaGMnKQorICAgICAgICBjdXJzZXMudGlnZXRudW0oJ2NvJykKKyAgICAgICAgY3Vyc2VzLnRpZ2V0c3RyKCdjcicpCisgICAgICAgIGN1cnNlcy50cGFybShiJ2NyJykKKyAgICAgICAgY3Vyc2VzLnR5cGVhaGVhZChzeXMuX19zdGRpbl9fLmZpbGVubygpKQorICAgICAgICBjdXJzZXMudW5jdHJsKCdhJykKKyAgICAgICAgY3Vyc2VzLnVuZ2V0Y2goJ2EnKQorICAgICAgICBjdXJzZXMudXNlX2VudigxKQorCisgICAgICAgICMgRnVuY3Rpb25zIG9ubHkgYXZhaWxhYmxlIG9uIGEgZmV3IHBsYXRmb3JtcworICAgICAgICBpZiBjdXJzZXMuaGFzX2NvbG9ycygpOgorICAgICAgICAgICAgY3Vyc2VzLnN0YXJ0X2NvbG9yKCkKKyAgICAgICAgICAgIGN1cnNlcy5pbml0X3BhaXIoMiwgMSwxKQorICAgICAgICAgICAgY3Vyc2VzLmNvbG9yX2NvbnRlbnQoMSkKKyAgICAgICAgICAgIGN1cnNlcy5jb2xvcl9wYWlyKDIpCisgICAgICAgICAgICBjdXJzZXMucGFpcl9jb250ZW50KGN1cnNlcy5DT0xPUl9QQUlSUyAtIDEpCisgICAgICAgICAgICBjdXJzZXMucGFpcl9udW1iZXIoMCkKKworICAgICAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICd1c2VfZGVmYXVsdF9jb2xvcnMnKToKKyAgICAgICAgICAgICAgICBjdXJzZXMudXNlX2RlZmF1bHRfY29sb3JzKCkKKworICAgICAgICBpZiBoYXNhdHRyKGN1cnNlcywgJ2tleW5hbWUnKToKKyAgICAgICAgICAgIGN1cnNlcy5rZXluYW1lKDEzKQorCisgICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnaGFzX2tleScpOgorICAgICAgICAgICAgY3Vyc2VzLmhhc19rZXkoMTMpCisKKyAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICdnZXRtb3VzZScpOgorICAgICAgICAgICAgKGF2YWlsbWFzaywgb2xkbWFzaykgPSBjdXJzZXMubW91c2VtYXNrKGN1cnNlcy5CVVRUT04xX1BSRVNTRUQpCisgICAgICAgICAgICAjIGF2YWlsbWFzayBpbmRpY2F0ZXMgdGhhdCBtb3VzZSBzdHVmZiBub3QgYXZhaWxhYmxlLgorICAgICAgICAgICAgaWYgYXZhaWxtYXNrICE9IDA6CisgICAgICAgICAgICAgICAgY3Vyc2VzLm1vdXNlaW50ZXJ2YWwoMTApCisgICAgICAgICAgICAgICAgIyBqdXN0IHZlcmlmeSB0aGVzZSBkb24ndCBjYXVzZSBlcnJvcnMKKyAgICAgICAgICAgICAgICBjdXJzZXMudW5nZXRtb3VzZSgwLCAwLCAwLCAwLCBjdXJzZXMuQlVUVE9OMV9QUkVTU0VEKQorICAgICAgICAgICAgICAgIG0gPSBjdXJzZXMuZ2V0bW91c2UoKQorCisgICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAnaXNfdGVybV9yZXNpemVkJyk6CisgICAgICAgICAgICBjdXJzZXMuaXNfdGVybV9yZXNpemVkKCpzdGRzY3IuZ2V0bWF4eXgoKSkKKyAgICAgICAgaWYgaGFzYXR0cihjdXJzZXMsICdyZXNpemV0ZXJtJyk6CisgICAgICAgICAgICBjdXJzZXMucmVzaXpldGVybSgqc3Rkc2NyLmdldG1heHl4KCkpCisgICAgICAgIGlmIGhhc2F0dHIoY3Vyc2VzLCAncmVzaXplX3Rlcm0nKToKKyAgICAgICAgICAgIGN1cnNlcy5yZXNpemVfdGVybSgqc3Rkc2NyLmdldG1heHl4KCkpCisKKyAgICBkZWYgdGVzdF91bmN0cmwoc2VsZik6CisgICAgICAgIGZyb20gY3Vyc2VzIGltcG9ydCBhc2NpaQorICAgICAgICBmb3IgY2gsIGV4cGVjdGVkIGluIFsoJ2EnLCAnYScpLCAoJ0EnLCAnQScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJzsnLCAnOycpLCAoJyAnLCAnICcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4N2YnLCAnXj8nKSwgKCdcbicsICdeSicpLCAoJ1wwJywgJ15AJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWV0YS1iaXQgY2hhcmFjdGVycworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ1x4OGEnLCAnIV5KJyksICgnXHhjMScsICchQScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc2NpaS51bmN0cmwoY2gpLCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2N1cnNlcy51bmN0cmwgZmFpbHMgb24gY2hhcmFjdGVyICVyJyAlIGNoKQorCisKKyAgICBkZWYgdGVzdF91c2VycHRyX3dpdGhvdXRfc2V0KHNlbGYpOgorICAgICAgICB3ID0gY3Vyc2VzLm5ld3dpbigxMCwgMTApCisgICAgICAgIHAgPSBjdXJzZXMucGFuZWwubmV3X3BhbmVsKHcpCisgICAgICAgICMgdHJ5IHRvIGFjY2VzcyB1c2VycHRyKCkgYmVmb3JlIGNhbGxpbmcgc2V0X3VzZXJwdHIoKSAtLSBzZWdmYXVsdHMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhjdXJzZXMucGFuZWwuZXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSd1c2VycHRyIHNob3VsZCBmYWlsIHNpbmNlIG5vdCBzZXQnKToKKyAgICAgICAgICAgIHAudXNlcnB0cigpCisKKyAgICBkZWYgdGVzdF91c2VycHRyX21lbW9yeV9sZWFrKHNlbGYpOgorICAgICAgICB3ID0gY3Vyc2VzLm5ld3dpbigxMCwgMTApCisgICAgICAgIHAgPSBjdXJzZXMucGFuZWwubmV3X3BhbmVsKHcpCisgICAgICAgIG9iaiA9IG9iamVjdCgpCisgICAgICAgIG5yZWZzID0gc3lzLmdldHJlZmNvdW50KG9iaikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTAwKToKKyAgICAgICAgICAgIHAuc2V0X3VzZXJwdHIob2JqKQorCisgICAgICAgIHAuc2V0X3VzZXJwdHIoTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0cmVmY291bnQob2JqKSwgbnJlZnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNldF91c2VycHRyIGxlYWtlZCByZWZlcmVuY2VzIikKKworICAgIGRlZiB0ZXN0X3VzZXJwdHJfc2VnZmF1bHQoc2VsZik6CisgICAgICAgIHBhbmVsID0gY3Vyc2VzLnBhbmVsLm5ld19wYW5lbChzZWxmLnN0ZHNjcikKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhbmVsLnNldF91c2VycHRyKE5vbmUpCisgICAgICAgIHBhbmVsLnNldF91c2VycHRyKEEoKSkKKyAgICAgICAgcGFuZWwuc2V0X3VzZXJwdHIoTm9uZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoY3Vyc2VzLCAncmVzaXpldGVybScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Jlc2l6ZXRlcm0gbm90IGF2YWlsYWJsZScpCisgICAgZGVmIHRlc3RfcmVzaXplX3Rlcm0oc2VsZik6CisgICAgICAgIGxpbmVzLCBjb2xzID0gY3Vyc2VzLkxJTkVTLCBjdXJzZXMuQ09MUworICAgICAgICBuZXdfbGluZXMgPSBsaW5lcyAtIDEKKyAgICAgICAgbmV3X2NvbHMgPSBjb2xzICsgMQorICAgICAgICBjdXJzZXMucmVzaXpldGVybShuZXdfbGluZXMsIG5ld19jb2xzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3Vyc2VzLkxJTkVTLCBuZXdfbGluZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3Vyc2VzLkNPTFMsIG5ld19jb2xzKQorCisgICAgZGVmIHRlc3RfaXNzdWU2MjQzKHNlbGYpOgorICAgICAgICBjdXJzZXMudW5nZXRjaCgxMDI1KQorICAgICAgICBzZWxmLnN0ZHNjci5nZXRrZXkoKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihjdXJzZXMsICd1bmdldF93Y2gnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndW5nZXRfd2NoIG5vdCBhdmFpbGFibGUnKQorICAgIGRlZiB0ZXN0X3VuZ2V0X3djaChzZWxmKToKKyAgICAgICAgc3Rkc2NyID0gc2VsZi5zdGRzY3IKKyAgICAgICAgZW5jb2RpbmcgPSBzdGRzY3IuZW5jb2RpbmcKKyAgICAgICAgZm9yIGNoIGluICgnYScsICdceGU5JywgJ1x1MjBhYycsICdcVTAwMTBGRkZGJyk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgY2guZW5jb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGN1cnNlcy51bmdldF93Y2goY2gpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGVycjoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuZ2V0X3djaCglYSkgZmFpbGVkIHdpdGggZW5jb2RpbmcgJXM6ICVzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAlIChjaCwgc3Rkc2NyLmVuY29kaW5nLCBlcnIpKQorICAgICAgICAgICAgcmVhZCA9IHN0ZHNjci5nZXRfd2NoKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhZCwgY2gpCisKKyAgICAgICAgICAgIGNvZGUgPSBvcmQoY2gpCisgICAgICAgICAgICBjdXJzZXMudW5nZXRfd2NoKGNvZGUpCisgICAgICAgICAgICByZWFkID0gc3Rkc2NyLmdldF93Y2goKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFkLCBjaCkKKworICAgIGRlZiB0ZXN0X2lzc3VlMTA1NzAoc2VsZik6CisgICAgICAgIGIgPSBjdXJzZXMudHBhcm0oY3Vyc2VzLnRpZ2V0c3RyKCJjdXAiKSwgNSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGIpLCBieXRlcykKKyAgICAgICAgY3Vyc2VzLnB1dHAoYikKKworICAgIGRlZiB0ZXN0X2VuY29kaW5nKHNlbGYpOgorICAgICAgICBzdGRzY3IgPSBzZWxmLnN0ZHNjcgorICAgICAgICBpbXBvcnQgY29kZWNzCisgICAgICAgIGVuY29kaW5nID0gc3Rkc2NyLmVuY29kaW5nCisgICAgICAgIGNvZGVjcy5sb29rdXAoZW5jb2RpbmcpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc3Rkc2NyLmVuY29kaW5nID0gMTAKKworICAgICAgICBzdGRzY3IuZW5jb2RpbmcgPSBlbmNvZGluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBkZWwgc3Rkc2NyLmVuY29kaW5nCisKKyAgICBkZWYgdGVzdF9pc3N1ZTIxMDg4KHNlbGYpOgorICAgICAgICBzdGRzY3IgPSBzZWxmLnN0ZHNjcgorICAgICAgICAjCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIxMDg4CisgICAgICAgICMKKyAgICAgICAgIyB0aGUgYnVnOgorICAgICAgICAjIHdoZW4gY29udmVydGluZyBjdXJzZXMud2luZG93LmFkZGNoIHRvIEFyZ3VtZW50IENsaW5pYworICAgICAgICAjIHRoZSBmaXJzdCB0d28gcGFyYW1ldGVycyB3ZXJlIHN3aXRjaGVkLgorCisgICAgICAgICMgaWYgc29tZWRheSB3ZSBjYW4gcmVwcmVzZW50IHRoZSBzaWduYXR1cmUgb2YgYWRkY2gKKyAgICAgICAgIyB3ZSB3aWxsIG5lZWQgdG8gcmV3cml0ZSB0aGlzIHRlc3QuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKHN0ZHNjci5hZGRjaCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2lnbmF0dXJlKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICMgbm90IGdlbmVyYXRpbmcgYSBzaWduYXR1cmUgaXMgZmluZS4KKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICAjIFNvLiAgTm8gc2lnbmF0dXJlIGZvciBhZGRjaC4KKyAgICAgICAgIyBCdXQgQXJndW1lbnQgQ2xpbmljIGdhdmUgdXMgYSBodW1hbi1yZWFkYWJsZSBlcXVpdmFsZW50CisgICAgICAgICMgYXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGRvY3N0cmluZy4gIFNvIHdlIHBhcnNlIHRoYXQsCisgICAgICAgICMgYW5kIGVuc3VyZSB0aGF0IHRoZSBwYXJhbWV0ZXJzIGFwcGVhciBpbiB0aGUgY29ycmVjdCBvcmRlci4KKyAgICAgICAgIyBTaW5jZSB0aGlzIGlzIHBhcnNpbmcgb3V0cHV0IGZyb20gQXJndW1lbnQgQ2xpbmljLCB3ZSBjYW4KKyAgICAgICAgIyBiZSByZWFzb25hYmx5IGNlcnRhaW4gdGhlIGdlbmVyYXRlZCBwYXJzaW5nIGNvZGUgd2lsbCBiZQorICAgICAgICAjIGNvcnJlY3QgdG9vLgorICAgICAgICBodW1hbl9yZWFkYWJsZV9zaWduYXR1cmUgPSBzdGRzY3IuYWRkY2guX19kb2NfXy5zcGxpdCgiXG4iKVswXQorICAgICAgICBvZmZzZXQgPSBodW1hbl9yZWFkYWJsZV9zaWduYXR1cmUuZmluZCgiW3ksIHgsXSIpCisgICAgICAgIGFzc2VydCBvZmZzZXQgPj0gMCwgIiIKKwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGN1cnNlcy53cmFwcGVyKG1haW4pCi0gICAgdW5pdF90ZXN0cygpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CmluZGV4IGQxMWQ5MjQuLjYyM2Q5OTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtLnB5CkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgIHJldHVybiBrZXlzCiAKICAgICBkZWYgdGVzdF9lcnJvcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi5tb2R1bGUuZXJyb3IsIElPRXJyb3IpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzZWxmLm1vZHVsZS5lcnJvciwgT1NFcnJvcikpCiAKICAgICBkZWYgdGVzdF9hbnlkYm1fbm90X2V4aXN0aW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhkYm0uZXJyb3IsIGRibS5vcGVuLCBfZm5hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5IGIvTGliL3Rlc3QvdGVzdF9kYm1fZHVtYi5weQppbmRleCA0ZjAzYWU3Li5kYzg4Y2E2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RibV9kdW1iLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtX2R1bWIucHkKQEAgLTMsMTAgKzMsMTIgQEAKICIiIgogCiBpbXBvcnQgaW8KK2ltcG9ydCBvcGVyYXRvcgogaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBkYm0uZHVtYiBhcyBkdW1iZGJtCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gZnVuY3Rvb2xzIGltcG9ydCBwYXJ0aWFsCiAKIF9mbmFtZSA9IHN1cHBvcnQuVEVTVEZOCiAKQEAgLTE4Myw2ICsxODUsNDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGdvdCkKICAgICAgICAgICAgIGYuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIGR1bWJkYm0ub3BlbihfZm5hbWUsICdjJykgYXMgZGI6CisgICAgICAgICAgICBkYlsiZHVtYmRibSBjb250ZXh0IG1hbmFnZXIiXSA9ICJjb250ZXh0IG1hbmFnZXIiCisKKyAgICAgICAgd2l0aCBkdW1iZGJtLm9wZW4oX2ZuYW1lLCAncicpIGFzIGRiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRiLmtleXMoKSksIFtiImR1bWJkYm0gY29udGV4dCBtYW5hZ2VyIl0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkdW1iZGJtLmVycm9yKToKKyAgICAgICAgICAgIGRiLmtleXMoKQorCisgICAgZGVmIHRlc3RfY2hlY2tfY2xvc2VkKHNlbGYpOgorICAgICAgICBmID0gZHVtYmRibS5vcGVuKF9mbmFtZSwgJ2MnKQorICAgICAgICBmLmNsb3NlKCkKKworICAgICAgICBmb3IgbWV0aCBpbiAocGFydGlhbChvcGVyYXRvci5kZWxpdGVtLCBmKSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwob3BlcmF0b3Iuc2V0aXRlbSwgZiwgJ2InKSwKKyAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwob3BlcmF0b3IuZ2V0aXRlbSwgZiksCisgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsKG9wZXJhdG9yLmNvbnRhaW5zLCBmKSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGR1bWJkYm0uZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIG1ldGgoJ3Rlc3QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQiKQorCisgICAgICAgIGZvciBtZXRoIGluIChvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2tleXMnKSwKKyAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLm1ldGhvZGNhbGxlcignaXRlcmtleXMnKSwKKyAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yLm1ldGhvZGNhbGxlcignaXRlbXMnKSwKKyAgICAgICAgICAgICAgICAgICAgIGxlbik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGR1bWJkYm0uZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIG1ldGgoZikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEQk0gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY2xvc2VkIikKKworICAgIGRlZiB0ZXN0X2V2YWwoc2VsZik6CisgICAgICAgIHdpdGggb3BlbihfZm5hbWUgKyAnLmRpcicsICd3JykgYXMgc3RyZWFtOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKCJzdHIocHJpbnQoJ0hhY2tlZCEnKSksIDBcbiIpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggZHVtYmRibS5vcGVuKF9mbmFtZSkgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJycpCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIF9kZWxldGVfZmlsZXMoKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RibV9nbnUucHkgYi9MaWIvdGVzdC90ZXN0X2RibV9nbnUucHkKaW5kZXggNGZiNjZjNS4uYTc4MDhmNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kYm1fZ251LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGJtX2dudS5weQpAQCAtODEsNiArODEsMTcgQEAKICAgICAgICAgc2l6ZTIgPSBvcy5wYXRoLmdldHNpemUoZmlsZW5hbWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzaXplMSA+IHNpemUyID49IHNpemUwKQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIGdkYm0ub3BlbihmaWxlbmFtZSwgJ2MnKSBhcyBkYjoKKyAgICAgICAgICAgIGRiWyJnZGJtIGNvbnRleHQgbWFuYWdlciJdID0gImNvbnRleHQgbWFuYWdlciIKKworICAgICAgICB3aXRoIGdkYm0ub3BlbihmaWxlbmFtZSwgJ3InKSBhcyBkYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkYi5rZXlzKCkpLCBbYiJnZGJtIGNvbnRleHQgbWFuYWdlciJdKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZ2RibS5lcnJvcikgYXMgY206CisgICAgICAgICAgICBkYi5rZXlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiR0RCTSBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBjbG9zZWQiKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kYm1fbmRibS5weSBiL0xpYi90ZXN0L3Rlc3RfZGJtX25kYm0ucHkKaW5kZXggYjU3ZTFmMC4uMjI5MTU2MSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kYm1fbmRibS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RibV9uZGJtLnB5CkBAIC0zNyw1ICszNywxOCBAQAogICAgICAgICAgICAgZXhjZXB0IGVycm9yOgogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgpCiAKKyAgICBkZWYgdGVzdF9jb250ZXh0X21hbmFnZXIoc2VsZik6CisgICAgICAgIHdpdGggZGJtLm5kYm0ub3BlbihzZWxmLmZpbGVuYW1lLCAnYycpIGFzIGRiOgorICAgICAgICAgICAgZGJbIm5kYm0gY29udGV4dCBtYW5hZ2VyIl0gPSAiY29udGV4dCBtYW5hZ2VyIgorCisgICAgICAgIHdpdGggZGJtLm5kYm0ub3BlbihzZWxmLmZpbGVuYW1lLCAncicpIGFzIGRiOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGRiLmtleXMoKSksIFtiIm5kYm0gY29udGV4dCBtYW5hZ2VyIl0pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhkYm0ubmRibS5lcnJvcikgYXMgY206CisgICAgICAgICAgICBkYi5rZXlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiREJNIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZCIpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weSBiL0xpYi90ZXN0L3Rlc3RfZGVjaW1hbC5weQppbmRleCA0MDMxMzQ3Li5hMTc4ZjZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RlY2ltYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZWNpbWFsLnB5CkBAIC0xMDU3LDYgKzEwNTcsMTEgQEAKIAogICAgICAgICAgICAgIyBpc3N1ZSA2ODUwCiAgICAgICAgICAgICAoJ2E9LTcuMCcsICcwLjEyMzQ1JywgJ2FhYWEwLjEnKSwKKworICAgICAgICAgICAgIyBpc3N1ZSAyMjA5MAorICAgICAgICAgICAgKCc8XisxNS4yMCUnLCAnaW5mJywgJzw8K0luZmluaXR5JTw8PCcpLAorICAgICAgICAgICAgKCdceDA3PiwlJywgJ3NOYU4xMjM0NTY3JywgJ3NOYU4xMjM0NTY3JScpLAorICAgICAgICAgICAgKCc9MTAuMTAlJywgJ05hTjEyMycsICcgICBOYU4xMjMlJyksCiAgICAgICAgICAgICBdCiAgICAgICAgIGZvciBmbXQsIGQsIHJlc3VsdCBpbiB0ZXN0X3ZhbHVlczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KERlY2ltYWwoZCksIGZtdCksIHJlc3VsdCkKQEAgLTI0MDEsMzcgKzI0MDYsNTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKERlY2ltYWwoMCksIG51bWJlcnMuUmVhbCkKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKLSAgICAgICAgRGVjaW1hbCA9IHNlbGYuZGVjaW1hbC5EZWNpbWFsCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgRGVjaW1hbCA9IHNlbGYuZGVjaW1hbC5EZWNpbWFsCiAKLSAgICAgICAgc2F2ZWRlY2ltYWwgPSBzeXMubW9kdWxlc1snZGVjaW1hbCddCisgICAgICAgICAgICBzYXZlZGVjaW1hbCA9IHN5cy5tb2R1bGVzWydkZWNpbWFsJ10KIAotICAgICAgICAjIFJvdW5kIHRyaXAKLSAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IHNlbGYuZGVjaW1hbAotICAgICAgICBkID0gRGVjaW1hbCgnLTMuMTQxNTkwMDAwJykKLSAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhkKQotICAgICAgICBlID0gcGlja2xlLmxvYWRzKHApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZCwgZSkKKyAgICAgICAgICAgICMgUm91bmQgdHJpcAorICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IHNlbGYuZGVjaW1hbAorICAgICAgICAgICAgZCA9IERlY2ltYWwoJy0zLjE0MTU5MDAwMCcpCisgICAgICAgICAgICBwID0gcGlja2xlLmR1bXBzKGQsIHByb3RvKQorICAgICAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBlKQogCi0gICAgICAgIGlmIEM6Ci0gICAgICAgICAgICAjIFRlc3QgaW50ZXJjaGFuZ2VhYmlsaXR5Ci0gICAgICAgICAgICB4ID0gQy5EZWNpbWFsKCctMy4xMjNlODE3MjMnKQotICAgICAgICAgICAgeSA9IFAuRGVjaW1hbCgnLTMuMTIzZTgxNzIzJykKKyAgICAgICAgICAgIGlmIEM6CisgICAgICAgICAgICAgICAgIyBUZXN0IGludGVyY2hhbmdlYWJpbGl0eQorICAgICAgICAgICAgICAgIHggPSBDLkRlY2ltYWwoJy0zLjEyM2U4MTcyMycpCisgICAgICAgICAgICAgICAgeSA9IFAuRGVjaW1hbCgnLTMuMTIzZTgxNzIzJykKIAotICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IEMKLSAgICAgICAgICAgIHN4ID0gcGlja2xlLmR1bXBzKHgpCi0gICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gUAotICAgICAgICAgICAgciA9IHBpY2tsZS5sb2FkcyhzeCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBQLkRlY2ltYWwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHkpCisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IEMKKyAgICAgICAgICAgICAgICBzeCA9IHBpY2tsZS5kdW1wcyh4LCBwcm90bykKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gUAorICAgICAgICAgICAgICAgIHIgPSBwaWNrbGUubG9hZHMoc3gpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIFAuRGVjaW1hbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIsIHkpCiAKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBQCi0gICAgICAgICAgICBzeSA9IHBpY2tsZS5kdW1wcyh5KQotICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IEMKLSAgICAgICAgICAgIHIgPSBwaWNrbGUubG9hZHMoc3kpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UociwgQy5EZWNpbWFsKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB4KQorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBQCisgICAgICAgICAgICAgICAgc3kgPSBwaWNrbGUuZHVtcHMoeSwgcHJvdG8pCisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IEMKKyAgICAgICAgICAgICAgICByID0gcGlja2xlLmxvYWRzKHN5KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCBDLkRlY2ltYWwpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB4KQogCi0gICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBzYXZlZGVjaW1hbAorICAgICAgICAgICAgICAgIHggPSBDLkRlY2ltYWwoJy0zLjEyM2U4MTcyMycpLmFzX3R1cGxlKCkKKyAgICAgICAgICAgICAgICB5ID0gUC5EZWNpbWFsKCctMy4xMjNlODE3MjMnKS5hc190dXBsZSgpCisKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gQworICAgICAgICAgICAgICAgIHN4ID0gcGlja2xlLmR1bXBzKHgsIHByb3RvKQorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBQCisgICAgICAgICAgICAgICAgciA9IHBpY2tsZS5sb2FkcyhzeCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UociwgUC5EZWNpbWFsVHVwbGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCB5KQorCisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IFAKKyAgICAgICAgICAgICAgICBzeSA9IHBpY2tsZS5kdW1wcyh5LCBwcm90bykKKyAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gQworICAgICAgICAgICAgICAgIHIgPSBwaWNrbGUubG9hZHMoc3kpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIEMuRGVjaW1hbFR1cGxlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgeCkKKworICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IHNhdmVkZWNpbWFsCiAKICAgICBkZWYgdGVzdF9pbnQoc2VsZik6CiAgICAgICAgIERlY2ltYWwgPSBzZWxmLmRlY2ltYWwuRGVjaW1hbApAQCAtMjc1NSw2MyArMjc3OCw2NCBAQAogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgogCi0gICAgICAgIENvbnRleHQgPSBzZWxmLmRlY2ltYWwuQ29udGV4dAorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIENvbnRleHQgPSBzZWxmLmRlY2ltYWwuQ29udGV4dAogCi0gICAgICAgIHNhdmVkZWNpbWFsID0gc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXQorICAgICAgICAgICAgc2F2ZWRlY2ltYWwgPSBzeXMubW9kdWxlc1snZGVjaW1hbCddCiAKLSAgICAgICAgIyBSb3VuZCB0cmlwCi0gICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBzZWxmLmRlY2ltYWwKLSAgICAgICAgYyA9IENvbnRleHQoKQotICAgICAgICBlID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjKSkKKyAgICAgICAgICAgICMgUm91bmQgdHJpcAorICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IHNlbGYuZGVjaW1hbAorICAgICAgICAgICAgYyA9IENvbnRleHQoKQorICAgICAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYywgcHJvdG8pKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5wcmVjLCBlLnByZWMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5FbWluLCBlLkVtaW4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5FbWF4LCBlLkVtYXgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5yb3VuZGluZywgZS5yb3VuZGluZykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNhcGl0YWxzLCBlLmNhcGl0YWxzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuY2xhbXAsIGUuY2xhbXApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5mbGFncywgZS5mbGFncykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRyYXBzLCBlLnRyYXBzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnByZWMsIGUucHJlYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy5FbWluLCBlLkVtaW4pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuRW1heCwgZS5FbWF4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnJvdW5kaW5nLCBlLnJvdW5kaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNhcGl0YWxzLCBlLmNhcGl0YWxzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmNsYW1wLCBlLmNsYW1wKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZsYWdzLCBlLmZsYWdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLnRyYXBzLCBlLnRyYXBzKQogCi0gICAgICAgICMgVGVzdCBpbnRlcmNoYW5nZWFiaWxpdHkKLSAgICAgICAgY29tYmluYXRpb25zID0gWyhDLCBQKSwgKFAsIEMpXSBpZiBDIGVsc2UgWyhQLCBQKV0KLSAgICAgICAgZm9yIGR1bXBlciwgbG9hZGVyIGluIGNvbWJpbmF0aW9uczoKLSAgICAgICAgICAgIGZvciByaSwgXyBpbiBlbnVtZXJhdGUoUm91bmRpbmdNb2Rlcyk6Ci0gICAgICAgICAgICAgICAgZm9yIGZpLCBfIGluIGVudW1lcmF0ZShPcmRlcmVkU2lnbmFsc1tkdW1wZXJdKToKLSAgICAgICAgICAgICAgICAgICAgZm9yIHRpLCBfIGluIGVudW1lcmF0ZShPcmRlcmVkU2lnbmFsc1tkdW1wZXJdKToKKyAgICAgICAgICAgICMgVGVzdCBpbnRlcmNoYW5nZWFiaWxpdHkKKyAgICAgICAgICAgIGNvbWJpbmF0aW9ucyA9IFsoQywgUCksIChQLCBDKV0gaWYgQyBlbHNlIFsoUCwgUCldCisgICAgICAgICAgICBmb3IgZHVtcGVyLCBsb2FkZXIgaW4gY29tYmluYXRpb25zOgorICAgICAgICAgICAgICAgIGZvciByaSwgXyBpbiBlbnVtZXJhdGUoUm91bmRpbmdNb2Rlcyk6CisgICAgICAgICAgICAgICAgICAgIGZvciBmaSwgXyBpbiBlbnVtZXJhdGUoT3JkZXJlZFNpZ25hbHNbZHVtcGVyXSk6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGksIF8gaW4gZW51bWVyYXRlKE9yZGVyZWRTaWduYWxzW2R1bXBlcl0pOgogCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmVjID0gcmFuZG9tLnJhbmRyYW5nZSgxLCAxMDApCi0gICAgICAgICAgICAgICAgICAgICAgICBlbWluID0gcmFuZG9tLnJhbmRyYW5nZSgtMTAwLCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZW1heCA9IHJhbmRvbS5yYW5kcmFuZ2UoMSwgMTAwKQotICAgICAgICAgICAgICAgICAgICAgICAgY2FwcyA9IHJhbmRvbS5yYW5kcmFuZ2UoMikKLSAgICAgICAgICAgICAgICAgICAgICAgIGNsYW1wID0gcmFuZG9tLnJhbmRyYW5nZSgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWMgPSByYW5kb20ucmFuZHJhbmdlKDEsIDEwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWluID0gcmFuZG9tLnJhbmRyYW5nZSgtMTAwLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtYXggPSByYW5kb20ucmFuZHJhbmdlKDEsIDEwMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXBzID0gcmFuZG9tLnJhbmRyYW5nZSgyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYW1wID0gcmFuZG9tLnJhbmRyYW5nZSgyKQogCi0gICAgICAgICAgICAgICAgICAgICAgICAjIE9uZSBtb2R1bGUgZHVtcHMKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBkdW1wZXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBkdW1wZXIuQ29udGV4dCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWM9cHJlYywgRW1pbj1lbWluLCBFbWF4PWVtYXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3VuZGluZz1Sb3VuZGluZ01vZGVzW3JpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGl0YWxzPWNhcHMsIGNsYW1wPWNsYW1wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M9T3JkZXJlZFNpZ25hbHNbZHVtcGVyXVs6ZmldLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhcHM9T3JkZXJlZFNpZ25hbHNbZHVtcGVyXVs6dGldCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBPbmUgbW9kdWxlIGR1bXBzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IGR1bXBlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBkdW1wZXIuQ29udGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVjPXByZWMsIEVtaW49ZW1pbiwgRW1heD1lbWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdW5kaW5nPVJvdW5kaW5nTW9kZXNbcmldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcGl0YWxzPWNhcHMsIGNsYW1wPWNsYW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzPU9yZGVyZWRTaWduYWxzW2R1bXBlcl1bOmZpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFwcz1PcmRlcmVkU2lnbmFsc1tkdW1wZXJdWzp0aV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhjLCBwcm90bykKIAotICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgb3RoZXIgbW9kdWxlIGxvYWRzCi0gICAgICAgICAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gbG9hZGVyCi0gICAgICAgICAgICAgICAgICAgICAgICBkID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgbG9hZGVyLkNvbnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGUgb3RoZXIgbW9kdWxlIGxvYWRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2RlY2ltYWwnXSA9IGxvYWRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBwaWNrbGUubG9hZHMocykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgbG9hZGVyLkNvbnRleHQpCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wcmVjLCBwcmVjKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLkVtaW4sIGVtaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuRW1heCwgZW1heCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5yb3VuZGluZywgUm91bmRpbmdNb2Rlc1tyaV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY2FwaXRhbHMsIGNhcHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY2xhbXAsIGNsYW1wKQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X3NpZ25hbHMoc2VsZiwgZCwgJ2ZsYWdzJywgT3JkZXJlZFNpZ25hbHNbbG9hZGVyXVs6ZmldKQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X3NpZ25hbHMoc2VsZiwgZCwgJ3RyYXBzJywgT3JkZXJlZFNpZ25hbHNbbG9hZGVyXVs6dGldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5wcmVjLCBwcmVjKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5FbWluLCBlbWluKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5FbWF4LCBlbWF4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5yb3VuZGluZywgUm91bmRpbmdNb2Rlc1tyaV0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmNhcGl0YWxzLCBjYXBzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jbGFtcCwgY2xhbXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X3NpZ25hbHMoc2VsZiwgZCwgJ2ZsYWdzJywgT3JkZXJlZFNpZ25hbHNbbG9hZGVyXVs6ZmldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF9zaWduYWxzKHNlbGYsIGQsICd0cmFwcycsIE9yZGVyZWRTaWduYWxzW2xvYWRlcl1bOnRpXSkKIAotICAgICAgICBzeXMubW9kdWxlc1snZGVjaW1hbCddID0gc2F2ZWRlY2ltYWwKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWydkZWNpbWFsJ10gPSBzYXZlZGVjaW1hbAogCiAgICAgZGVmIHRlc3RfZXF1YWxpdHlfd2l0aF9vdGhlcl90eXBlcyhzZWxmKToKICAgICAgICAgRGVjaW1hbCA9IHNlbGYuZGVjaW1hbC5EZWNpbWFsCkBAIC01NDEyLDcgKzU0MzYsNyBAQAogICAgIGFsbF90ZXN0cy5pbnNlcnQoMCwgQ2hlY2tBdHRyaWJ1dGVzKQogCiAKLWRlZiB0ZXN0X21haW4oYXJpdGg9RmFsc2UsIHZlcmJvc2U9Tm9uZSwgdG9kb190ZXN0cz1Ob25lLCBkZWJ1Zz1Ob25lKToKK2RlZiB0ZXN0X21haW4oYXJpdGg9Tm9uZSwgdmVyYm9zZT1Ob25lLCB0b2RvX3Rlc3RzPU5vbmUsIGRlYnVnPU5vbmUpOgogICAgICIiIiBFeGVjdXRlIHRoZSB0ZXN0cy4KIAogICAgIFJ1bnMgYWxsIGFyaXRobWV0aWMgdGVzdHMgaWYgYXJpdGggaXMgVHJ1ZSBvciBpZiB0aGUgImRlY2ltYWwiIHJlc291cmNlCkBAIC01NDIyLDcgKzU0NDYsNyBAQAogICAgIGluaXQoQykKICAgICBpbml0KFApCiAgICAgZ2xvYmFsIFRFU1RfQUxMLCBERUJVRwotICAgIFRFU1RfQUxMID0gYXJpdGggb3IgaXNfcmVzb3VyY2VfZW5hYmxlZCgnZGVjaW1hbCcpCisgICAgVEVTVF9BTEwgPSBhcml0aCBpZiBhcml0aCBpcyBub3QgTm9uZSBlbHNlIGlzX3Jlc291cmNlX2VuYWJsZWQoJ2RlY2ltYWwnKQogICAgIERFQlVHID0gZGVidWcKIAogICAgIGlmIHRvZG9fdGVzdHMgaXMgTm9uZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkgYi9MaWIvdGVzdC90ZXN0X2RlcXVlLnB5CmluZGV4IGE4NDg3ZDIuLjVlY2JjNzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGVxdWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kZXF1ZS5weQpAQCAtNDc0LDE2ICs0NzQsMTcgQEAKIAogICAgIGRlZiB0ZXN0X2l0ZXJhdG9yX3BpY2tsZShzZWxmKToKICAgICAgICAgZGF0YSA9IGRlcXVlKHJhbmdlKDIwMCkpCi0gICAgICAgIGl0ID0gaXRvcmcgPSBpdGVyKGRhdGEpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBsaXN0KGRhdGEpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGl0ID0gaXRvcmcgPSBpdGVyKGRhdGEpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGxpc3QoZGF0YSkpCiAKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgbmV4dChpdCkKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChkYXRhKVsxOl0pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgbGlzdChkYXRhKVsxOl0pCiAKICAgICBkZWYgdGVzdF9kZWVwY29weShzZWxmKToKICAgICAgICAgbXV0ID0gWzEwXQpAQCAtNTQzLDggKzU0NCw4IEBACiAgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKICAgICAgICAgY2hlY2soZGVxdWUoKSwgYmFzZXNpemUgKyBibG9ja3NpemUpCiAgICAgICAgIGNoZWNrKGRlcXVlKCdhJyksIGJhc2VzaXplICsgYmxvY2tzaXplKQotICAgICAgICBjaGVjayhkZXF1ZSgnYScgKiAoQkxPQ0tMRU4gLy8gMikpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKLSAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKEJMT0NLTEVOIC8vIDIgKyAxKSksIGJhc2VzaXplICsgMiAqIGJsb2Nrc2l6ZSkKKyAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogKEJMT0NLTEVOIC0gMSkpLCBiYXNlc2l6ZSArIGJsb2Nrc2l6ZSkKKyAgICAgICAgY2hlY2soZGVxdWUoJ2EnICogQkxPQ0tMRU4pLCBiYXNlc2l6ZSArIDIgKiBibG9ja3NpemUpCiAgICAgICAgIGNoZWNrKGRlcXVlKCdhJyAqICg0MiAqIEJMT0NLTEVOKSksIGJhc2VzaXplICsgNDMgKiBibG9ja3NpemUpCiAKIGNsYXNzIFRlc3RWYXJpb3VzSXRlcmF0b3JBcmdzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTYxNCwxMSArNjE1LDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShkKSwgdHlwZShlKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQogCi0gICAgICAgIHMgPSBwaWNrbGUuZHVtcHMoZCkKLSAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKGQpLCBpZChlKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGQpLCB0eXBlKGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhkLCBwcm90bykKKyAgICAgICAgICAgIGUgPSBwaWNrbGUubG9hZHMocykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGQpLCB0eXBlKGUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQpLCBsaXN0KGUpKQogCiAgICAgICAgIGQgPSBEZXF1ZSgnYWJjZGUnLCBtYXhsZW49NCkKIApAQCAtNjMwLDExICs2MzIsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGQpLCB0eXBlKGUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCiAKLSAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhkKQotICAgICAgICBlID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaWQoZCksIGlkKGUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChkKSwgbGlzdChlKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGQsIHByb3RvKQorICAgICAgICAgICAgZSA9IHBpY2tsZS5sb2FkcyhzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpZChkKSwgaWQoZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZCksIHR5cGUoZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZCksIGxpc3QoZSkpCiAKICMjICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKICMjICAgICAgICBkID0gRGVxdWUoJ2FiYycpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5IGIvTGliL3Rlc3QvdGVzdF9kZXNjci5weQppbmRleCAxYTg5MWE4Li42NGE0YTM2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Rlc2NyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGVzY3IucHkKQEAgLTEsOCArMSwxMSBAQAogaW1wb3J0IGJ1aWx0aW5zCitpbXBvcnQgY29weXJlZwogaW1wb3J0IGdjCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgbWF0aAoraW1wb3J0IHBpY2tsZQogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCi1pbXBvcnQgbWF0aAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgd2Vha3JlZgogCkBAIC0xOCw3ICsyMSw4IEBACiAgICAgICAgICAgICAnYWRkJzogJysnLAogICAgICAgICAgICAgJ3N1Yic6ICctJywKICAgICAgICAgICAgICdtdWwnOiAnKicsCi0gICAgICAgICAgICAnZGl2JzogJy8nLAorICAgICAgICAgICAgJ3RydWVkaXYnOiAnLycsCisgICAgICAgICAgICAnZmxvb3JkaXYnOiAnLy8nLAogICAgICAgICAgICAgJ2Rpdm1vZCc6ICdkaXZtb2QnLAogICAgICAgICAgICAgJ3Bvdyc6ICcqKicsCiAgICAgICAgICAgICAnbHNoaWZ0JzogJzw8JywKQEAgLTQ5LDggKzUzLDYgQEAKICAgICAgICAgICAgICdpbnZlcnQnOiAnficsCiAgICAgICAgICAgICAnaW50JzogJ2ludCcsCiAgICAgICAgICAgICAnZmxvYXQnOiAnZmxvYXQnLAotICAgICAgICAgICAgJ29jdCc6ICdvY3QnLAotICAgICAgICAgICAgJ2hleCc6ICdoZXgnLAogICAgICAgICB9CiAKICAgICAgICAgZm9yIG5hbWUsIGV4cHIgaW4gbGlzdChzZWxmLnVub3BzLml0ZW1zKCkpOgpAQCAtNzksMTIgKzgxLDYgQEAKICAgICBkZWYgYmlub3BfdGVzdChzZWxmLCBhLCBiLCByZXMsIGV4cHI9ImErYiIsIG1ldGg9Il9fYWRkX18iKToKICAgICAgICAgZCA9IHsnYSc6IGEsICdiJzogYn0KIAotICAgICAgICAjIFhYWCBIYWNrIHNvIHRoaXMgcGFzc2VzIGJlZm9yZSAyLjMgd2hlbiAtUW5ldyBpcyBzcGVjaWZpZWQuCi0gICAgICAgIGlmIG1ldGggPT0gIl9fZGl2X18iIGFuZCAxLzIgPT0gMC41OgotICAgICAgICAgICAgbWV0aCA9ICJfX3RydWVkaXZfXyIKLQotICAgICAgICBpZiBtZXRoID09ICdfX2Rpdm1vZF9fJzogcGFzcwotCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChleHByLCBkKSwgcmVzKQogICAgICAgICB0ID0gdHlwZShhKQogICAgICAgICBtID0gZ2V0YXR0cih0LCBtZXRoKQpAQCAtMjE4LDcgKzIxNCw3IEBACiAgICAgZGVmIG51bWJlcl9vcGVyYXRvcnMoc2VsZiwgYSwgYiwgc2tpcD1bXSk6CiAgICAgICAgIGRpY3QgPSB7J2EnOiBhLCAnYic6IGJ9CiAKLSAgICAgICAgZm9yIG5hbWUsIGV4cHIgaW4gbGlzdChzZWxmLmJpbm9wcy5pdGVtcygpKToKKyAgICAgICAgZm9yIG5hbWUsIGV4cHIgaW4gc2VsZi5iaW5vcHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5hbWUgbm90IGluIHNraXA6CiAgICAgICAgICAgICAgICAgbmFtZSA9ICJfXyVzX18iICUgbmFtZQogICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIoYSwgbmFtZSk6CkBAIC0yNTgsNyArMjU0LDcgQEAKICAgICAgICAgIyBUZXN0aW5nIGNvbXBsZXggb3BlcmF0aW9ucy4uLgogICAgICAgICBzZWxmLm51bWJlcl9vcGVyYXRvcnMoMTAwLjBqLCAzLjBqLCBza2lwPVsnbHQnLCAnbGUnLCAnZ3QnLCAnZ2UnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW50JywgJ2Zsb2F0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rpdm1vZCcsICdtb2QnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zsb29yZGl2JywgJ2Rpdm1vZCcsICdtb2QnXSkKIAogICAgICAgICBjbGFzcyBOdW1iZXIoY29tcGxleCk6CiAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ3ByZWMnXQpAQCAtMTE0Niw3ICsxMTQyLDcgQEAKICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFVuaWNvZGVFbmNvZGVFcnJvcik6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCJbY2hyKDEyOCldIHNsb3RzIG5vdCBjYXVnaHQiKQorICAgICAgICAgICAgc2VsZi5mYWlsKCJbY2hyKDEyOCldIHNsb3RzIG5vdCBjYXVnaHQiKQogCiAgICAgICAgICMgVGVzdCBsZWFrcwogICAgICAgICBjbGFzcyBDb3VudGVkKG9iamVjdCk6CkBAIC0xNzk3LDYgKzE3OTMsNyBAQAogICAgICAgICAgICAgKCJfX3RydW5jX18iLCBpbnQsIHplcm8sIHNldCgpLCB7fSksCiAgICAgICAgICAgICAoIl9fY2VpbF9fIiwgbWF0aC5jZWlsLCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgKCJfX2Rpcl9fIiwgZGlyLCBlbXB0eV9zZXEsIHNldCgpLCB7fSksCisgICAgICAgICAgICAoIl9fcm91bmRfXyIsIHJvdW5kLCB6ZXJvLCBzZXQoKSwge30pLAogICAgICAgICAgICAgXQogCiAgICAgICAgIGNsYXNzIENoZWNrZXIob2JqZWN0KToKQEAgLTIyNTgsNyArMjI1NSw5IEBACiAgICAgICAgIG1pbnN0YW5jZSA9IE0oIm0iKQogICAgICAgICBtaW5zdGFuY2UuYiA9IDIKICAgICAgICAgbWluc3RhbmNlLmEgPSAxCi0gICAgICAgIG5hbWVzID0gW3ggZm9yIHggaW4gZGlyKG1pbnN0YW5jZSkgaWYgeCBub3QgaW4gWyJfX25hbWVfXyIsICJfX2RvY19fIl1dCisgICAgICAgIGRlZmF1bHRfYXR0cmlidXRlcyA9IFsnX19uYW1lX18nLCAnX19kb2NfXycsICdfX3BhY2thZ2VfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19sb2FkZXJfXycsICdfX3NwZWNfXyddCisgICAgICAgIG5hbWVzID0gW3ggZm9yIHggaW4gZGlyKG1pbnN0YW5jZSkgaWYgeCBub3QgaW4gZGVmYXVsdF9hdHRyaWJ1dGVzXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWVzLCBbJ2EnLCAnYiddKQogCiAgICAgICAgIGNsYXNzIE0yKE0pOgpAQCAtMzE1MSwxNzYgKzMxNTAsNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmEsIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbl9kZWxldGVfZGljdChlKSwgY2FuX2RlbGV0ZV9kaWN0KFZhbHVlRXJyb3IoKSkpCiAKLSAgICBkZWYgdGVzdF9waWNrbGVzKHNlbGYpOgotICAgICAgICAjIFRlc3RpbmcgcGlja2xpbmcgYW5kIGNvcHlpbmcgbmV3LXN0eWxlIGNsYXNzZXMgYW5kIG9iamVjdHMuLi4KLSAgICAgICAgaW1wb3J0IHBpY2tsZQotCi0gICAgICAgIGRlZiBzb3J0ZWRpdGVtcyhkKToKLSAgICAgICAgICAgIEwgPSBsaXN0KGQuaXRlbXMoKSkKLSAgICAgICAgICAgIEwuc29ydCgpCi0gICAgICAgICAgICByZXR1cm4gTAotCi0gICAgICAgIGdsb2JhbCBDCi0gICAgICAgIGNsYXNzIEMob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICBzdXBlcihDLCBzZWxmKS5fX2luaXRfXygpCi0gICAgICAgICAgICAgICAgc2VsZi5hID0gYQotICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKLSAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIkMoJXIsICVyKSIgJSAoc2VsZi5hLCBzZWxmLmIpCi0KLSAgICAgICAgZ2xvYmFsIEMxCi0gICAgICAgIGNsYXNzIEMxKGxpc3QpOgotICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoQzEsIGNscykuX19uZXdfXyhjbHMpCi0gICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLmEsIHNlbGYuYikKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKLSAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCi0gICAgICAgICAgICAgICAgc2VsZi5iID0gYgotICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiQzEoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBsaXN0KHNlbGYpKQotCi0gICAgICAgIGdsb2JhbCBDMgotICAgICAgICBjbGFzcyBDMihpbnQpOgotICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiLCB2YWw9MCk6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKEMyLCBjbHMpLl9fbmV3X18oY2xzLCB2YWwpCi0gICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIChzZWxmLmEsIHNlbGYuYiwgaW50KHNlbGYpKQotICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGEsIGIsIHZhbD0wKToKLSAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCi0gICAgICAgICAgICAgICAgc2VsZi5iID0gYgotICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiQzIoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBpbnQoc2VsZikpCi0KLSAgICAgICAgZ2xvYmFsIEMzCi0gICAgICAgIGNsYXNzIEMzKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZm9vKToKLSAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbwotICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5mb28KLSAgICAgICAgICAgIGRlZiBfX3NldHN0YXRlX18oc2VsZiwgZm9vKToKLSAgICAgICAgICAgICAgICBzZWxmLmZvbyA9IGZvbwotCi0gICAgICAgIGdsb2JhbCBDNGNsYXNzaWMsIEM0Ci0gICAgICAgIGNsYXNzIEM0Y2xhc3NpYzogIyBjbGFzc2ljCi0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGNsYXNzIEM0KEM0Y2xhc3NpYywgb2JqZWN0KTogIyBtaXhlZCBpbmhlcml0YW5jZQotICAgICAgICAgICAgcGFzcwotCi0gICAgICAgIGZvciBiaW4gaW4gMCwgMToKLSAgICAgICAgICAgIGZvciBjbHMgaW4gQywgQzEsIEMyOgotICAgICAgICAgICAgICAgIHMgPSBwaWNrbGUuZHVtcHMoY2xzLCBiaW4pCi0gICAgICAgICAgICAgICAgY2xzMiA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2xzMiwgY2xzKQotCi0gICAgICAgICAgICBhID0gQzEoMSwgMik7IGEuYXBwZW5kKDQyKTsgYS5hcHBlbmQoMjQpCi0gICAgICAgICAgICBiID0gQzIoImhlbGxvIiwgIndvcmxkIiwgNDIpCi0gICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKChhLCBiKSwgYmluKQotICAgICAgICAgICAgeCwgeSA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Ll9fY2xhc3NfXywgYS5fX2NsYXNzX18pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHguX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhhLl9fZGljdF9fKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2NsYXNzX18sIGIuX19jbGFzc19fKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh5Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYi5fX2RpY3RfXykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeCksIHJlcHIoYSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeSksIHJlcHIoYikpCi0gICAgICAgICAgICAjIFRlc3QgZm9yIF9fZ2V0c3RhdGVfXyBhbmQgX19zZXRzdGF0ZV9fIG9uIG5ldyBzdHlsZSBjbGFzcwotICAgICAgICAgICAgdSA9IEMzKDQyKQotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyh1LCBiaW4pCi0gICAgICAgICAgICB2ID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuX19jbGFzc19fLCB2Ll9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mb28sIHYuZm9vKQotICAgICAgICAgICAgIyBUZXN0IGZvciBwaWNrbGFiaWxpdHkgb2YgaHlicmlkIGNsYXNzCi0gICAgICAgICAgICB1ID0gQzQoKQotICAgICAgICAgICAgdS5mb28gPSA0MgotICAgICAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyh1LCBiaW4pCi0gICAgICAgICAgICB2ID0gcGlja2xlLmxvYWRzKHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuX19jbGFzc19fLCB2Ll9fY2xhc3NfXykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS5mb28sIHYuZm9vKQotCi0gICAgICAgICMgVGVzdGluZyBjb3B5LmRlZXBjb3B5KCkKLSAgICAgICAgaW1wb3J0IGNvcHkKLSAgICAgICAgZm9yIGNscyBpbiBDLCBDMSwgQzI6Ci0gICAgICAgICAgICBjbHMyID0gY29weS5kZWVwY29weShjbHMpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKGNsczIsIGNscykKLQotICAgICAgICBhID0gQzEoMSwgMik7IGEuYXBwZW5kKDQyKTsgYS5hcHBlbmQoMjQpCi0gICAgICAgIGIgPSBDMigiaGVsbG8iLCAid29ybGQiLCA0MikKLSAgICAgICAgeCwgeSA9IGNvcHkuZGVlcGNvcHkoKGEsIGIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCBhLl9fY2xhc3NfXykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWRpdGVtcyh4Ll9fZGljdF9fKSwgc29ydGVkaXRlbXMoYS5fX2RpY3RfXykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5fX2NsYXNzX18sIGIuX19jbGFzc19fKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZGl0ZW1zKHkuX19kaWN0X18pLCBzb3J0ZWRpdGVtcyhiLl9fZGljdF9fKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHgpLCByZXByKGEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoeSksIHJlcHIoYikpCi0KLSAgICBkZWYgdGVzdF9waWNrbGVfc2xvdHMoc2VsZik6Ci0gICAgICAgICMgVGVzdGluZyBwaWNrbGluZyBvZiBjbGFzc2VzIHdpdGggX19zbG90c19fIC4uLgotICAgICAgICBpbXBvcnQgcGlja2xlCi0gICAgICAgICMgUGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXyBidXQgd2l0aG91dCBfX2dldHN0YXRlX18gc2hvdWxkIGZhaWwKLSAgICAgICAgIyAoaWYgdXNpbmcgcHJvdG9jb2wgMCBvciAxKQotICAgICAgICBnbG9iYWwgQiwgQywgRCwgRQotICAgICAgICBjbGFzcyBCKG9iamVjdCk6Ci0gICAgICAgICAgICBwYXNzCi0gICAgICAgIGZvciBiYXNlIGluIFtvYmplY3QsIEJdOgotICAgICAgICAgICAgY2xhc3MgQyhiYXNlKToKLSAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQotICAgICAgICAgICAgY2xhc3MgRChDKToKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBmYWlsOiBwaWNrbGUgQyBpbnN0YW5jZSAtICVzIiAlIGJhc2UpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKEMoKSwgMCkKLSAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInNob3VsZCBmYWlsOiBwaWNrbGUgRCBpbnN0YW5jZSAtICVzIiAlIGJhc2UpCi0gICAgICAgICAgICAjIEdpdmUgQyBhIG5pY2UgZ2VuZXJpYyBfX2dldHN0YXRlX18gYW5kIF9fc2V0c3RhdGVfXwotICAgICAgICAgICAgY2xhc3MgQyhiYXNlKToKLSAgICAgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQotICAgICAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBzZWxmLl9fZGljdF9fLmNvcHkoKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICBkID0ge30KLSAgICAgICAgICAgICAgICAgICAgZm9yIGNscyBpbiBzZWxmLl9fY2xhc3NfXy5fX21yb19fOgotICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNuIGluIGNscy5fX2RpY3RfXy5nZXQoJ19fc2xvdHNfXycsICgpKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbc25dID0gZ2V0YXR0cihzZWxmLCBzbikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQKLSAgICAgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIGQpOgotICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiBsaXN0KGQuaXRlbXMoKSk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRhdHRyKHNlbGYsIGssIHYpCi0gICAgICAgICAgICBjbGFzcyBEKEMpOgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgICMgTm93IGl0IHNob3VsZCB3b3JrCi0gICAgICAgICAgICB4ID0gQygpCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SGFzQXR0cih5LCAnYScpCi0gICAgICAgICAgICB4LmEgPSA0MgotICAgICAgICAgICAgeSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHkuYSwgNDIpCi0gICAgICAgICAgICB4ID0gRCgpCi0gICAgICAgICAgICB4LmEgPSA0MgotICAgICAgICAgICAgeC5iID0gMTAwCi0gICAgICAgICAgICB5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyh4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5hICsgeS5iLCAxNDIpCi0gICAgICAgICAgICAjIEEgc3ViY2xhc3MgdGhhdCBhZGRzIGEgc2xvdCBzaG91bGQgYWxzbyB3b3JrCi0gICAgICAgICAgICBjbGFzcyBFKEMpOgotICAgICAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYiddCi0gICAgICAgICAgICB4ID0gRSgpCi0gICAgICAgICAgICB4LmEgPSA0MgotICAgICAgICAgICAgeC5iID0gImZvbyIKLSAgICAgICAgICAgIHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh5LmEsIHguYSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeS5iLCB4LmIpCi0KICAgICBkZWYgdGVzdF9iaW5hcnlfb3BlcmF0b3Jfb3ZlcnJpZGUoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBvdmVycmlkZXMgb2YgYmluYXJ5IG9wZXJhdGlvbnMuLi4KICAgICAgICAgY2xhc3MgSShpbnQpOgpAQCAtMzc0NSwxOCArMzU3NCw4IEBACiAgICAgICAgICMgYnVnKS4KICAgICAgICAgZGVsIGMKIAotICAgICAgICAjIElmIHRoYXQgZGlkbid0IGJsb3cgdXAsIGl0J3MgYWxzbyBpbnRlcmVzdGluZyB0byBzZWUgd2hldGhlciBjbGVhcmluZwotICAgICAgICAjIHRoZSBsYXN0IGNvbnRhaW5lciBzbG90IHdvcmtzOiB0aGF0IHdpbGwgYXR0ZW1wdCB0byBkZWxldGUgYyBhZ2FpbiwKLSAgICAgICAgIyB3aGljaCB3aWxsIGNhdXNlIGMgdG8gZ2V0IGFwcGVuZGVkIGJhY2sgdG8gdGhlIGNvbnRhaW5lciBhZ2FpbgotICAgICAgICAjICJkdXJpbmciIHRoZSBkZWwuICAoT24gbm9uLUNQeXRob24gaW1wbGVtZW50YXRpb25zLCBob3dldmVyLCBfX2RlbF9fCi0gICAgICAgICMgaXMgdHlwaWNhbGx5IG5vdCBjYWxsZWQgYWdhaW4uKQogICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihDLmNvbnRhaW5lciksIDEpCi0gICAgICAgIGRlbCBDLmNvbnRhaW5lclstMV0KLSAgICAgICAgaWYgc3VwcG9ydC5jaGVja19pbXBsX2RldGFpbCgpOgotICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKEMuY29udGFpbmVyKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5jb250YWluZXJbLTFdLmF0dHIsIDQyKQogCiAgICAgICAgICMgTWFrZSBjIG1vcnRhbCBhZ2Fpbiwgc28gdGhhdCB0aGUgdGVzdCBmcmFtZXdvcmsgd2l0aCAtbCBkb2Vzbid0IHJlcG9ydAogICAgICAgICAjIGl0IGFzIGEgbGVhay4KQEAgLTM5MTYsNiArMzczNSwzNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgYXNzZXJ0IDAsICJiZXN0X2Jhc2UgY2FsY3VsYXRpb24gZm91bmQgd2FudGluZyIKIAorICAgIGRlZiB0ZXN0X3Vuc3ViY2xhc3NhYmxlX3R5cGVzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBYKHR5cGUoTm9uZSkpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgWChvYmplY3QsIHR5cGUoTm9uZSkpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgWCh0eXBlKE5vbmUpLCBvYmplY3QpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBYKE8sIHR5cGUoTm9uZSkpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgWCh0eXBlKE5vbmUpLCBPKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgWChvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBYLl9fYmFzZXNfXyA9IHR5cGUoTm9uZSksCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFguX19iYXNlc19fID0gb2JqZWN0LCB0eXBlKE5vbmUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFguX19iYXNlc19fID0gdHlwZShOb25lKSwgb2JqZWN0CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFguX19iYXNlc19fID0gTywgdHlwZShOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBYLl9fYmFzZXNfXyA9IHR5cGUoTm9uZSksIE8KIAogICAgIGRlZiB0ZXN0X211dGFibGVfYmFzZXNfd2l0aF9mYWlsaW5nX21ybyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIG11dGFibGUgYmFzZXMgd2l0aCBmYWlsaW5nIG1yby4uLgpAQCAtNDMzNCw5ICs0MTg0LDggQEAKICAgICAgICAgICAgICAgICAoJ19fYWRkX18nLCAgICAgICd4ICsgeScsICAgICAgICAgICAgICAgICAgICd4ICs9IHknKSwKICAgICAgICAgICAgICAgICAoJ19fc3ViX18nLCAgICAgICd4IC0geScsICAgICAgICAgICAgICAgICAgICd4IC09IHknKSwKICAgICAgICAgICAgICAgICAoJ19fbXVsX18nLCAgICAgICd4ICogeScsICAgICAgICAgICAgICAgICAgICd4ICo9IHknKSwKLSAgICAgICAgICAgICAgICAoJ19fdHJ1ZWRpdl9fJywgICdvcGVyYXRvci50cnVlZGl2KHgsIHkpJywgIE5vbmUpLAotICAgICAgICAgICAgICAgICgnX19mbG9vcmRpdl9fJywgJ29wZXJhdG9yLmZsb29yZGl2KHgsIHkpJywgTm9uZSksCi0gICAgICAgICAgICAgICAgKCdfX2Rpdl9fJywgICAgICAneCAvIHknLCAgICAgICAgICAgICAgICAgICAneCAvPSB5JyksCisgICAgICAgICAgICAgICAgKCdfX3RydWVkaXZfXycsICAneCAvIHknLCAgICAgICAgICAgICAgICAgICAneCAvPSB5JyksCisgICAgICAgICAgICAgICAgKCdfX2Zsb29yZGl2X18nLCAneCAvLyB5JywgICAgICAgICAgICAgICAgICAneCAvLz0geScpLAogICAgICAgICAgICAgICAgICgnX19tb2RfXycsICAgICAgJ3ggJSB5JywgICAgICAgICAgICAgICAgICAgJ3ggJT0geScpLAogICAgICAgICAgICAgICAgICgnX19kaXZtb2RfXycsICAgJ2Rpdm1vZCh4LCB5KScsICAgICAgICAgICAgTm9uZSksCiAgICAgICAgICAgICAgICAgKCdfX3Bvd19fJywgICAgICAneCAqKiB5JywgICAgICAgICAgICAgICAgICAneCAqKj0geScpLApAQCAtNDM5OCw4ICs0MjQ3LDggQEAKICAgICAgICAgIyBBbHNvIGNoZWNrIHR5cGVfZ2V0YXR0cm8gZm9yIGNvcnJlY3RuZXNzLgogICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgogICAgICAgICAgICAgcGFzcwotICAgICAgICBjbGFzcyBYKG9iamVjdCk6Ci0gICAgICAgICAgICBfX21ldGFjbGFzc19fID0gTWV0YQorICAgICAgICBjbGFzcyBYKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIHBhc3MKICAgICAgICAgWC5hID0gNDIKICAgICAgICAgTWV0YS5hID0gRGVzY3IoImEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFguYSwgNDIpCkBAIC00NTM2LDYgKzQzODUsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlLl9fZGljdF9fWydfX3F1YWxuYW1lX18nXS5fX3NldF9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsICdPaW5rJykKIAorICAgICAgICBnbG9iYWwgWQorICAgICAgICBjbGFzcyBZOgorICAgICAgICAgICAgY2xhc3MgSW5zaWRlOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChZLl9fcXVhbG5hbWVfXywgJ1knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFkuSW5zaWRlLl9fcXVhbG5hbWVfXywgJ1kuSW5zaWRlJykKKwogICAgIGRlZiB0ZXN0X3F1YWxuYW1lX2RpY3Qoc2VsZik6CiAgICAgICAgIG5zID0geydfX3F1YWxuYW1lX18nOiAnc29tZS5uYW1lJ30KICAgICAgICAgdHAgPSB0eXBlKCdGb28nLCAoKSwgbnMpCkBAIC00NTgxLDYgKzQ0MzcsMTQgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2FzZSwgMSwgMiwgMykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY2FzZSwgMSwgMiwgZm9vPTMpCiAKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2luZ19kb2VzX25vdF9kdXBsaWNhdGVfZGljdF9kZXNjcmlwdG9ycyhzZWxmKToKKyAgICAgICAgY2xhc3MgQmFzZToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgU3ViKEJhc2UpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEluKCJfX2RpY3RfXyIsIEJhc2UuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIl9fZGljdF9fIiwgU3ViLl9fZGljdF9fKQorCiAKIGNsYXNzIERpY3RQcm94eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC00NjkxLDExICs0NTU1LDcwOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgubXlrZXkyLCAnZnJvbSBCYXNlMicpCiAKIAorY2xhc3MgUGlja2xpbmdUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2NoZWNrX3JlZHVjZShzZWxmLCBwcm90bywgb2JqLCBhcmdzPSgpLCBrd2FyZ3M9e30sIHN0YXRlPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgbGlzdGl0ZW1zPU5vbmUsIGRpY3RpdGVtcz1Ob25lKToKKyAgICAgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weXJlZy5fX25ld29ial9leF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwgYXJncywga3dhcmdzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKSkKKyAgICAgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaXN0KHJlZHVjZV92YWx1ZVszXSksIGxpc3RpdGVtcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVkdWNlX3ZhbHVlWzNdKQorICAgICAgICAgICAgaWYgZGljdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGRpY3QocmVkdWNlX3ZhbHVlWzRdKSwgZGljdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbNF0pCisgICAgICAgIGVsaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWR1Y2VfdmFsdWVbOjNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29weXJlZy5fX25ld29ial9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUob2JqKSwpICsgYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlKSkKKyAgICAgICAgICAgIGlmIGxpc3RpdGVtcyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChsaXN0KHJlZHVjZV92YWx1ZVszXSksIGxpc3RpdGVtcykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVkdWNlX3ZhbHVlWzNdKQorICAgICAgICAgICAgaWYgZGljdGl0ZW1zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RGljdEVxdWFsKGRpY3QocmVkdWNlX3ZhbHVlWzRdKSwgZGljdGl0ZW1zKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWR1Y2VfdmFsdWVbNF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBiYXNlX3R5cGUgPSB0eXBlKG9iaikuX19iYXNlX18KKyAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IChjb3B5cmVnLl9yZWNvbnN0cnVjdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG9iaiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSBpZiBiYXNlX3R5cGUgaXMgb2JqZWN0IGVsc2UgYmFzZV90eXBlKG9iaikpKQorICAgICAgICAgICAgaWYgc3RhdGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlICs9IChzdGF0ZSwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5fX3JlZHVjZV9leF9fKHByb3RvKSwgcmVkdWNlX3ZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouX19yZWR1Y2VfXygpLCByZWR1Y2VfdmFsdWUpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHByb3RvY29scyA9IHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSkKKyAgICAgICAgYXJncyA9ICgtMTAxLCAic3BhbSIpCisgICAgICAgIGt3YXJncyA9IHsnYmFjb24nOiAtMjAxLCAnZmlzaCc6IC0zMDF9CisgICAgICAgIHN0YXRlID0geydjaGVlc2UnOiAtNDAxfQorCisgICAgICAgIGNsYXNzIEMxOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBhcmdzCisgICAgICAgIG9iaiA9IEMxKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBhcmdzKQorCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzdGF0ZS5pdGVtcygpOgorICAgICAgICAgICAgc2V0YXR0cihvYmosIG5hbWUsIHZhbHVlKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGFyZ3MsIHN0YXRlPXN0YXRlKQorCisgICAgICAgIGNsYXNzIEMyOgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiYmFkIGFyZ3MiCisgICAgICAgIG9iaiA9IEMyKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGlmIHByb3RvID49IDI6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKworICAgICAgICBjbGFzcyBDMzoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGFyZ3MsIGt3YXJncykKKyAgICAgICAgb2JqID0gQzMoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gNDoKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgYXJncywga3dhcmdzKQorICAgICAgICAgICAgZWxpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEM0OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywgImJhZCBkaWN0IikKKyAgICAgICAgY2xhc3MgQzU6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiYmFkIHR1cGxlIiwga3dhcmdzKQorICAgICAgICBjbGFzcyBDNjoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCkKKyAgICAgICAgY2xhc3MgQzc6CisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJiYWQgYXJncyIKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIGZvciBjbHMgaW4gQzQsIEM1LCBDNiwgQzc6CisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCkKKyAgICAgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpKToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEM5OgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAoYXJncywge30pCisgICAgICAgIG9iaiA9IEM5KCkKKyAgICAgICAgZm9yIHByb3RvIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90bywgb2JqLCBhcmdzKQorCisgICAgICAgIGNsYXNzIEMxMDoKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgICAgIG9iaiA9IEMxMCgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBpZiBwcm90byA+PSAyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorCisgICAgICAgIGNsYXNzIEMxMToKKyAgICAgICAgICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlCisgICAgICAgIG9iaiA9IEMxMSgpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgc3RhdGU9c3RhdGUpCisKKyAgICAgICAgY2xhc3MgQzEyOgorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gIm5vdCBkaWN0IgorICAgICAgICBvYmogPSBDMTIoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIHN0YXRlPSJub3QgZGljdCIpCisKKyAgICAgICAgY2xhc3MgQzEzOgorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCisgICAgICAgIG9iaiA9IEMxMygpCisgICAgICAgIGZvciBwcm90byBpbiBwcm90b2NvbHM6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9leF9fKHByb3RvKQorICAgICAgICAgICAgaWYgcHJvdG8gPCAyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9fKCkKKworICAgICAgICBjbGFzcyBDMTQ6CisgICAgICAgICAgICBfX3Nsb3RzX18gPSB0dXBsZShzdGF0ZSkKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gc3RhdGUuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBuYW1lLCB2YWx1ZSkKKworICAgICAgICBvYmogPSBDMTQoKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgaWYgcHJvdG8gPj0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLl9jaGVja19yZWR1Y2UocHJvdG8sIG9iaiwgc3RhdGU9KE5vbmUsIHN0YXRlKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBvYmouX19yZWR1Y2VfZXhfXyhwcm90bykKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIG9iai5fX3JlZHVjZV9fKCkKKworICAgICAgICBjbGFzcyBDMTUoZGljdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG9iaiA9IEMxNSh7InF1ZWJlYyI6IC02MDF9KQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGRpY3RpdGVtcz1kaWN0KG9iaikpCisKKyAgICAgICAgY2xhc3MgQzE2KGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvYmogPSBDMTYoWyJ5dWtvbiJdKQorICAgICAgICBmb3IgcHJvdG8gaW4gcHJvdG9jb2xzOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcmVkdWNlKHByb3RvLCBvYmosIGxpc3RpdGVtcz1saXN0KG9iaikpCisKKyAgICBkZWYgdGVzdF9zcGVjaWFsX21ldGhvZF9sb29rdXAoc2VsZik6CisgICAgICAgIHByb3RvY29scyA9IHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSkKKyAgICAgICAgY2xhc3MgUGlja3k6CisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiB7fQorCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgYXR0cik6CisgICAgICAgICAgICAgICAgaWYgYXR0ciBpbiAoIl9fZ2V0bmV3YXJnc19fIiwgIl9fZ2V0bmV3YXJnc19leF9fIik6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKGF0dHIpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZm9yIHByb3RvY29sIGluIHByb3RvY29sczoKKyAgICAgICAgICAgIHN0YXRlID0ge30gaWYgcHJvdG9jb2wgPj0gMiBlbHNlIE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3JlZHVjZShwcm90b2NvbCwgUGlja3koKSwgc3RhdGU9c3RhdGUpCisKKyAgICBkZWYgX2Fzc2VydF9pc19jb3B5KHNlbGYsIG9iaiwgb2JqY29weSwgbXNnPU5vbmUpOgorICAgICAgICAiIiJVdGlsaXR5IG1ldGhvZCB0byB2ZXJpZnkgaWYgdHdvIG9iamVjdHMgYXJlIGNvcGllcyBvZiBlYWNoIG90aGVycy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG1zZyBpcyBOb25lOgorICAgICAgICAgICAgbXNnID0gInshcn0gaXMgbm90IGEgY29weSBvZiB7IXJ9Ii5mb3JtYXQob2JqLCBvYmpjb3B5KQorICAgICAgICBpZiB0eXBlKG9iaikuX19yZXByX18gaXMgb2JqZWN0Ll9fcmVwcl9fOgorICAgICAgICAgICAgIyBXZSBoYXZlIHRoaXMgbGltaXRhdGlvbiBmb3Igbm93IGJlY2F1c2Ugd2UgdXNlIHRoZSBvYmplY3QncyByZXByCisgICAgICAgICAgICAjIHRvIGhlbHAgdXMgdmVyaWZ5IHRoYXQgdGhlIHR3byBvYmplY3RzIGFyZSBjb3BpZXMuIFRoaXMgYWxsb3dzCisgICAgICAgICAgICAjIHVzIHRvIGRlbGVnYXRlIHRoZSBub24tZ2VuZXJpYyB2ZXJpZmljYXRpb24gbG9naWMgdG8gdGhlIG9iamVjdHMKKyAgICAgICAgICAgICMgdGhlbXNlbHZlcy4KKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIm9iamVjdCBwYXNzZWQgdG8gX2Fzc2VydF9pc19jb3B5IG11c3QgIiArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvdmVycmlkZSB0aGUgX19yZXByX18gbWV0aG9kLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qob2JqLCBvYmpjb3B5LCBtc2c9bXNnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUob2JqKSwgdHlwZShvYmpjb3B5KSwgbXNnPW1zZykKKyAgICAgICAgaWYgaGFzYXR0cihvYmosICdfX2RpY3RfXycpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnREaWN0RXF1YWwob2JqLl9fZGljdF9fLCBvYmpjb3B5Ll9fZGljdF9fLCBtc2c9bXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvYmouX19kaWN0X18sIG9iamNvcHkuX19kaWN0X18sIG1zZz1tc2cpCisgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX19zbG90c19fJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydExpc3RFcXVhbChvYmouX19zbG90c19fLCBvYmpjb3B5Ll9fc2xvdHNfXywgbXNnPW1zZykKKyAgICAgICAgICAgIGZvciBzbG90IGluIG9iai5fX3Nsb3RzX186CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgaGFzYXR0cihvYmosIHNsb3QpLCBoYXNhdHRyKG9iamNvcHksIHNsb3QpLCBtc2c9bXNnKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihvYmosIHNsb3QsIE5vbmUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0YXR0cihvYmpjb3B5LCBzbG90LCBOb25lKSwgbXNnPW1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG9iaiksIHJlcHIob2JqY29weSksIG1zZz1tc2cpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9nZW5lcmF0ZV9waWNrbGVfY29waWVycygpOgorICAgICAgICAiIiJVdGlsaXR5IG1ldGhvZCB0byBnZW5lcmF0ZSB0aGUgbWFueSBwb3NzaWJsZSBwaWNrbGUgY29uZmlndXJhdGlvbnMuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBQaWNrbGVDb3BpZXI6CisgICAgICAgICAgICAiVGhpcyBjbGFzcyBjb3BpZXMgb2JqZWN0IHVzaW5nIHBpY2tsZS4iCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvdG8sIGR1bXBzLCBsb2Fkcyk6CisgICAgICAgICAgICAgICAgc2VsZi5wcm90byA9IHByb3RvCisgICAgICAgICAgICAgICAgc2VsZi5kdW1wcyA9IGR1bXBzCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcyA9IGxvYWRzCisgICAgICAgICAgICBkZWYgY29weShzZWxmLCBvYmopOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmxvYWRzKHNlbGYuZHVtcHMob2JqLCBzZWxmLnByb3RvKSkKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIFdlIHRyeSB0byBiZSBhcyBkZXNjcmlwdGl2ZSBhcyBwb3NzaWJsZSBoZXJlIHNpbmNlIHRoaXMgaXMKKyAgICAgICAgICAgICAgICAjIHRoZSBzdHJpbmcgd2hpY2ggd2Ugd2lsbCBhbGxvdyB1cyB0byB0ZWxsIHRoZSBwaWNrbGUKKyAgICAgICAgICAgICAgICAjIGNvbmZpZ3VyYXRpb24gd2UgYXJlIHVzaW5nIGR1cmluZyBkZWJ1Z2dpbmcuCisgICAgICAgICAgICAgICAgcmV0dXJuICgiUGlja2xlQ29waWVyKHByb3RvPXt9LCBkdW1wcz17fS57fSwgbG9hZHM9e30ue30pIgorICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChzZWxmLnByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmR1bXBzLl9fbW9kdWxlX18sIHNlbGYuZHVtcHMuX19xdWFsbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLl9fbW9kdWxlX18sIHNlbGYubG9hZHMuX19xdWFsbmFtZV9fKSkKKyAgICAgICAgcmV0dXJuIChQaWNrbGVDb3BpZXIoKmFyZ3MpIGZvciBhcmdzIGluCisgICAgICAgICAgICAgICAgICAgaXRlcnRvb2xzLnByb2R1Y3QocmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGlja2xlLmR1bXBzLCBwaWNrbGUuX2R1bXBzfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7cGlja2xlLmxvYWRzLCBwaWNrbGUuX2xvYWRzfSkpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfc2xvdHMoc2VsZik6CisgICAgICAgICMgVGVzdHMgcGlja2xpbmcgb2YgY2xhc3NlcyB3aXRoIF9fc2xvdHNfXy4KKworICAgICAgICAjIFBpY2tsaW5nIG9mIGNsYXNzZXMgd2l0aCBfX3Nsb3RzX18gYnV0IHdpdGhvdXQgX19nZXRzdGF0ZV9fIHNob3VsZAorICAgICAgICAjIGZhaWwgKGlmIHVzaW5nIHByb3RvY29sIDAgb3IgMSkKKyAgICAgICAgZ2xvYmFsIEMKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIF9fc2xvdHNfXyA9IFsnYSddCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhDKCksIDApCisKKyAgICAgICAgZ2xvYmFsIEQKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGlja2xlLmR1bXBzKEQoKSwgMCkKKworICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgIkEgY2xhc3Mgd2l0aCBfX2dldHN0YXRlX18gYW5kIF9fc2V0c3RhdGVfXyBpbXBsZW1lbnRlZC4iCisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2EnXQorICAgICAgICAgICAgZGVmIF9fZ2V0c3RhdGVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IGdldGF0dHIoc2VsZiwgJ19fZGljdF9fJywge30pLmNvcHkoKQorICAgICAgICAgICAgICAgIGZvciBjbHMgaW4gdHlwZShzZWxmKS5fX21yb19fOgorICAgICAgICAgICAgICAgICAgICBmb3Igc2xvdCBpbiBjbHMuX19kaWN0X18uZ2V0KCdfX3Nsb3RzX18nLCAoKSk6CisgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVbc2xvdF0gPSBnZXRhdHRyKHNlbGYsIHNsb3QpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHJldHVybiBzdGF0ZQorICAgICAgICAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gc3RhdGUuaXRlbXMoKToKKyAgICAgICAgICAgICAgICAgICAgc2V0YXR0cihzZWxmLCBrLCB2KQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiJXMoKTwlcj4iICUgKHR5cGUoc2VsZikuX19uYW1lX18sIHNlbGYuX19nZXRzdGF0ZV9fKCkpCisKKyAgICAgICAgY2xhc3MgRChDKToKKyAgICAgICAgICAgICJBIHN1YmNsYXNzIG9mIGEgY2xhc3Mgd2l0aCBzbG90cy4iCisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgZ2xvYmFsIEUKKyAgICAgICAgY2xhc3MgRShDKToKKyAgICAgICAgICAgICJBIHN1YmNsYXNzIHdpdGggYW4gZXh0cmEgc2xvdC4iCisgICAgICAgICAgICBfX3Nsb3RzX18gPSBbJ2InXQorCisgICAgICAgICMgTm93IGl0IHNob3VsZCB3b3JrCisgICAgICAgIGZvciBwaWNrbGVfY29waWVyIGluIHNlbGYuX2dlbmVyYXRlX3BpY2tsZV9jb3BpZXJzKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwaWNrbGVfY29waWVyPXBpY2tsZV9jb3BpZXIpOgorICAgICAgICAgICAgICAgIHggPSBDKCkKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgICAgICAgICAgICAgIHguYSA9IDQyCisgICAgICAgICAgICAgICAgeSA9IHBpY2tsZV9jb3BpZXIuY29weSh4KQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICAgICAgICAgICAgICB4ID0gRCgpCisgICAgICAgICAgICAgICAgeC5hID0gNDIKKyAgICAgICAgICAgICAgICB4LmIgPSAxMDAKKyAgICAgICAgICAgICAgICB5ID0gcGlja2xlX2NvcGllci5jb3B5KHgpCisgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkoeCwgeSkKKworICAgICAgICAgICAgICAgIHggPSBFKCkKKyAgICAgICAgICAgICAgICB4LmEgPSA0MgorICAgICAgICAgICAgICAgIHguYiA9ICJmb28iCisgICAgICAgICAgICAgICAgeSA9IHBpY2tsZV9jb3BpZXIuY29weSh4KQorICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KHgsIHkpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2VfY29weWluZyhzZWxmKToKKyAgICAgICAgIyBUZXN0cyBwaWNrbGluZyBhbmQgY29weWluZyBuZXctc3R5bGUgY2xhc3NlcyBhbmQgb2JqZWN0cy4KKyAgICAgICAgZ2xvYmFsIEMxCisgICAgICAgIGNsYXNzIEMxOgorICAgICAgICAgICAgIlRoZSBzdGF0ZSBvZiB0aGlzIGNsYXNzIGlzIGNvcHlhYmxlIHZpYSBpdHMgaW5zdGFuY2UgZGljdC4iCisgICAgICAgICAgICBBUkdTID0gKDEsIDIpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IFRydWUKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhLCBiKToKKyAgICAgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQzEoJXIsICVyKSIgJSAoc2VsZi5hLCBzZWxmLmIpCisKKyAgICAgICAgZ2xvYmFsIEMyCisgICAgICAgIGNsYXNzIEMyKGxpc3QpOgorICAgICAgICAgICAgIkEgbGlzdCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRuZXdhcmdzX18uIgorICAgICAgICAgICAgQVJHUyA9ICgxLCAyKQorICAgICAgICAgICAgTkVFRF9ESUNUX0NPUFlJTkcgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiKToKKyAgICAgICAgICAgICAgICBzZWxmID0gc3VwZXIoKS5fX25ld19fKGNscykKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgICAgICMgVGhpcyBoZWxwcyB0ZXN0aW5nIHRoYXQgX19pbml0X18gaXMgbm90IGNhbGxlZCBkdXJpbmcgdGhlCisgICAgICAgICAgICAgICAgIyB1bnBpY2tsaW5nIHByb2Nlc3MsIHdoaWNoIHdvdWxkIGNhdXNlIGV4dHJhIGFwcGVuZHMuCisgICAgICAgICAgICAgICAgc2VsZi5hcHBlbmQoImNoZWVzZSIpCisgICAgICAgICAgICBAY2xhc3NtZXRob2QKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBjbHMuQVJHUworICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQzIoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBsaXN0KHNlbGYpKQorCisgICAgICAgIGdsb2JhbCBDMworICAgICAgICBjbGFzcyBDMyhsaXN0KToKKyAgICAgICAgICAgICJBIGxpc3Qgc3ViY2xhc3MgY29weWFibGUgdmlhIF9fZ2V0c3RhdGVfXy4iCisgICAgICAgICAgICBBUkdTID0gKDEsIDIpCisgICAgICAgICAgICBORUVEX0RJQ1RfQ09QWUlORyA9IEZhbHNlCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYSwgYik6CisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgICAgICAjIFRoaXMgaGVscHMgdGVzdGluZyB0aGF0IF9faW5pdF9fIGlzIG5vdCBjYWxsZWQgZHVyaW5nIHRoZQorICAgICAgICAgICAgICAgICMgdW5waWNrbGluZyBwcm9jZXNzLCB3aGljaCB3b3VsZCBjYXVzZSBleHRyYSBhcHBlbmRzLgorICAgICAgICAgICAgICAgIHNlbGYuYXBwZW5kKCJjaGVlc2UiKQorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgX19nZXRzdGF0ZV9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5BUkdTCisgICAgICAgICAgICBkZWYgX19zZXRzdGF0ZV9fKHNlbGYsIHN0YXRlKToKKyAgICAgICAgICAgICAgICBhLCBiID0gc3RhdGUKKyAgICAgICAgICAgICAgICBzZWxmLmEgPSBhCisgICAgICAgICAgICAgICAgc2VsZi5iID0gYgorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQzMoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBsaXN0KHNlbGYpKQorCisgICAgICAgIGdsb2JhbCBDNAorICAgICAgICBjbGFzcyBDNChpbnQpOgorICAgICAgICAgICAgIkFuIGludCBzdWJjbGFzcyBjb3B5YWJsZSB2aWEgX19nZXRuZXdhcmdzX18uIgorICAgICAgICAgICAgQVJHUyA9ICgiaGVsbG8iLCAid29ybGQiLCAxKQorICAgICAgICAgICAgTkVFRF9ESUNUX0NPUFlJTkcgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZiA9IHN1cGVyKCkuX19uZXdfXyhjbHMsIHZhbHVlKQorICAgICAgICAgICAgICAgIHNlbGYuYSA9IGEKKyAgICAgICAgICAgICAgICBzZWxmLmIgPSBiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIEBjbGFzc21ldGhvZAorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNscy5BUkdTCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJDNCglciwgJXIpPCVyPiIgJSAoc2VsZi5hLCBzZWxmLmIsIGludChzZWxmKSkKKworICAgICAgICBnbG9iYWwgQzUKKyAgICAgICAgY2xhc3MgQzUoaW50KToKKyAgICAgICAgICAgICJBbiBpbnQgc3ViY2xhc3MgY29weWFibGUgdmlhIF9fZ2V0bmV3YXJnc19leF9fLiIKKyAgICAgICAgICAgIEFSR1MgPSAoMSwgMikKKyAgICAgICAgICAgIEtXQVJHUyA9IHsndmFsdWUnOiAzfQorICAgICAgICAgICAgTkVFRF9ESUNUX0NPUFlJTkcgPSBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCBhLCBiLCAqLCB2YWx1ZT0wKToKKyAgICAgICAgICAgICAgICBzZWxmID0gc3VwZXIoKS5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgc2VsZi5hID0gYQorICAgICAgICAgICAgICAgIHNlbGYuYiA9IGIKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgQGNsYXNzbWV0aG9kCisgICAgICAgICAgICBkZWYgX19nZXRuZXdhcmdzX2V4X18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKGNscy5BUkdTLCBjbHMuS1dBUkdTKQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAiQzUoJXIsICVyKTwlcj4iICUgKHNlbGYuYSwgc2VsZi5iLCBpbnQoc2VsZikpCisKKyAgICAgICAgdGVzdF9jbGFzc2VzID0gKEMxLCBDMiwgQzMsIEM0LCBDNSkKKyAgICAgICAgIyBUZXN0aW5nIGNvcHlpbmcgdGhyb3VnaCBwaWNrbGUKKyAgICAgICAgcGlja2xlX2NvcGllcnMgPSBzZWxmLl9nZW5lcmF0ZV9waWNrbGVfY29waWVycygpCisgICAgICAgIGZvciBjbHMsIHBpY2tsZV9jb3BpZXIgaW4gaXRlcnRvb2xzLnByb2R1Y3QodGVzdF9jbGFzc2VzLCBwaWNrbGVfY29waWVycyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjbHM9Y2xzLCBwaWNrbGVfY29waWVyPXBpY2tsZV9jb3BpZXIpOgorICAgICAgICAgICAgICAgIGt3YXJncyA9IGdldGF0dHIoY2xzLCAnS1dBUkdTJywge30pCisgICAgICAgICAgICAgICAgb2JqID0gY2xzKCpjbHMuQVJHUywgKiprd2FyZ3MpCisgICAgICAgICAgICAgICAgcHJvdG8gPSBwaWNrbGVfY29waWVyLnByb3RvCisgICAgICAgICAgICAgICAgaWYgMiA8PSBwcm90byA8IDQgYW5kIGhhc2F0dHIoY2xzLCAnX19nZXRuZXdhcmdzX2V4X18nKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZV9jb3BpZXIuZHVtcHMob2JqLCBwcm90bykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBvYmpjb3B5ID0gcGlja2xlX2NvcGllci5jb3B5KG9iaikKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weShvYmosIG9iamNvcHkpCisgICAgICAgICAgICAgICAgIyBGb3IgdGVzdCBjbGFzc2VzIHRoYXQgc3VwcG9ydHMgdGhpcywgbWFrZSBzdXJlIHdlIGRpZG4ndCBnbworICAgICAgICAgICAgICAgICMgYXJvdW5kIHRoZSByZWR1Y2UgcHJvdG9jb2wgYnkgc2ltcGx5IGNvcHlpbmcgdGhlIGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgICMgZGljdGlvbmFyeS4gV2UgY2xlYXIgYXR0cmlidXRlcyB1c2luZyB0aGUgcHJldmlvdXMgY29weSB0bworICAgICAgICAgICAgICAgICMgbm90IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgaWYgcHJvdG8gPj0gMiBhbmQgbm90IGNscy5ORUVEX0RJQ1RfQ09QWUlORzoKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weS5fX2RpY3RfXy5jbGVhcigpCisgICAgICAgICAgICAgICAgICAgIG9iamNvcHkyID0gcGlja2xlX2NvcGllci5jb3B5KG9iamNvcHkpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2Fzc2VydF9pc19jb3B5KG9iaiwgb2JqY29weTIpCisKKyAgICAgICAgIyBUZXN0aW5nIGNvcHlpbmcgdGhyb3VnaCBjb3B5LmRlZXBjb3B5KCkKKyAgICAgICAgZm9yIGNscyBpbiB0ZXN0X2NsYXNzZXM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjbHM9Y2xzKToKKyAgICAgICAgICAgICAgICBrd2FyZ3MgPSBnZXRhdHRyKGNscywgJ0tXQVJHUycsIHt9KQorICAgICAgICAgICAgICAgIG9iaiA9IGNscygqY2xzLkFSR1MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgICMgWFhYOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgY29weSBtb2R1bGUgdG8gc3VwcG9ydCBQRVAgMzE1NCdzCisgICAgICAgICAgICAgICAgIyByZWR1Y2UgcHJvdG9jb2wgNC4KKyAgICAgICAgICAgICAgICBpZiBoYXNhdHRyKGNscywgJ19fZ2V0bmV3YXJnc19leF9fJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgb2JqY29weSA9IGRlZXBjb3B5KG9iaikKKyAgICAgICAgICAgICAgICBzZWxmLl9hc3NlcnRfaXNfY29weShvYmosIG9iamNvcHkpCisgICAgICAgICAgICAgICAgIyBGb3IgdGVzdCBjbGFzc2VzIHRoYXQgc3VwcG9ydHMgdGhpcywgbWFrZSBzdXJlIHdlIGRpZG4ndCBnbworICAgICAgICAgICAgICAgICMgYXJvdW5kIHRoZSByZWR1Y2UgcHJvdG9jb2wgYnkgc2ltcGx5IGNvcHlpbmcgdGhlIGF0dHJpYnV0ZQorICAgICAgICAgICAgICAgICMgZGljdGlvbmFyeS4gV2UgY2xlYXIgYXR0cmlidXRlcyB1c2luZyB0aGUgcHJldmlvdXMgY29weSB0bworICAgICAgICAgICAgICAgICMgbm90IG11dGF0ZSB0aGUgb3JpZ2luYWwgYXJndW1lbnQuCisgICAgICAgICAgICAgICAgaWYgbm90IGNscy5ORUVEX0RJQ1RfQ09QWUlORzoKKyAgICAgICAgICAgICAgICAgICAgb2JqY29weS5fX2RpY3RfXy5jbGVhcigpCisgICAgICAgICAgICAgICAgICAgIG9iamNvcHkyID0gZGVlcGNvcHkob2JqY29weSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2NvcHkob2JqLCBvYmpjb3B5MikKKworICAgIGRlZiB0ZXN0X2lzc3VlMjQwOTcoc2VsZik6CisgICAgICAgICMgU2xvdCBuYW1lIGlzIGZyZWVkIGluc2lkZSBfX2dldGF0dHJfXyBhbmQgaXMgbGF0ZXIgdXNlZC4KKyAgICAgICAgY2xhc3MgUyhzdHIpOiAgIyBOb3QgaW50ZXJuZWQKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIF9fc2xvdG5hbWVzX18gPSBbUygnc3BhbScpXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIGF0dHIpOgorICAgICAgICAgICAgICAgIGlmIGF0dHIgPT0gJ3NwYW0nOgorICAgICAgICAgICAgICAgICAgICBBLl9fc2xvdG5hbWVzX19bOl0gPSBbUygnc3BhbScpXQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcgorCisgICAgICAgIGltcG9ydCBjb3B5cmVnCisgICAgICAgIGV4cGVjdGVkID0gKGNvcHlyZWcuX19uZXdvYmpfXywgKEEsKSwgKE5vbmUsIHsnc3BhbSc6IDQyfSksIE5vbmUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQSgpLl9fcmVkdWNlX18oMiksIGV4cGVjdGVkKSAgIyBTaG91bGRuJ3QgY3Jhc2gKKworCitjbGFzcyBTaGFyZWRLZXlUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzKHNlbGYpOgorICAgICAgICAjIFZlcmlmeSB0aGF0IHN1YmNsYXNzZXMgY2FuIHNoYXJlIGtleXMgKHBlciBQRVAgNDEyKQorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGEsIGIgPSBBKCksIEIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YodmFycyhhKSksIHN5cy5nZXRzaXplb2YodmFycyhiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuZ2V0c2l6ZW9mKHZhcnMoYSkpLCBzeXMuZ2V0c2l6ZW9mKHt9KSkKKyAgICAgICAgYS54LCBhLnksIGEueiwgYS53ID0gcmFuZ2UoNCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzeXMuZ2V0c2l6ZW9mKHZhcnMoYSkpLCBzeXMuZ2V0c2l6ZW9mKHZhcnMoYikpKQorICAgICAgICBhMiA9IEEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YodmFycyhhKSksIHN5cy5nZXRzaXplb2YodmFycyhhMikpKQorICAgICAgICBzZWxmLmFzc2VydExlc3Moc3lzLmdldHNpemVvZih2YXJzKGEpKSwgc3lzLmdldHNpemVvZih7fSkpCisgICAgICAgIGIudSwgYi52LCBiLncsIGIudCA9IHJhbmdlKDQpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuZ2V0c2l6ZW9mKHZhcnMoYikpLCBzeXMuZ2V0c2l6ZW9mKHt9KSkKKworCitjbGFzcyBEZWJ1Z0hlbHBlck1ldGEodHlwZSk6CisgICAgIiIiCisgICAgU2V0cyBkZWZhdWx0IF9fZG9jX18gYW5kIHNpbXBsaWZpZXMgcmVwcigpIG91dHB1dC4KKyAgICAiIiIKKyAgICBkZWYgX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpOgorICAgICAgICBpZiBhdHRycy5nZXQoJ19fZG9jX18nKSBpcyBOb25lOgorICAgICAgICAgICAgYXR0cnNbJ19fZG9jX18nXSA9IG5hbWUgICMgaGVscHMgd2hlbiBkZWJ1Z2dpbmcgd2l0aCBnZGIKKyAgICAgICAgcmV0dXJuIHR5cGUuX19uZXdfXyhtY2xzLCBuYW1lLCBiYXNlcywgYXR0cnMpCisgICAgZGVmIF9fcmVwcl9fKGNscyk6CisgICAgICAgIHJldHVybiByZXByKGNscy5fX25hbWVfXykKKworCitjbGFzcyBNcm9UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBSZWdyZXNzaW9ucyBmb3Igc29tZSBidWdzIHJldmVhbGVkIHRocm91Z2gKKyAgICBtY3NsLm1ybygpIGN1c3RvbWl6YXRpb24gKHR5cGVvYmplY3QuYzogbXJvX2ludGVybmFsKCkpIGFuZAorICAgIGNscy5fX2Jhc2VzX18gYXNzaWdubWVudCAodHlwZW9iamVjdC5jOiB0eXBlX3NldF9iYXNlcygpKS4KKyAgICAiIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zdGVwID0gMAorICAgICAgICBzZWxmLnJlYWR5ID0gRmFsc2UKKworICAgIGRlZiBzdGVwX3VudGlsKHNlbGYsIGxpbWl0KToKKyAgICAgICAgcmV0ID0gKHNlbGYuc3RlcCA8IGxpbWl0KQorICAgICAgICBpZiByZXQ6CisgICAgICAgICAgICBzZWxmLnN0ZXAgKz0gMQorICAgICAgICByZXR1cm4gcmV0CisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX3NldF9iYXNlc19vbl9zZWxmKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgdHlwZV9zZXRfYmFzZXMgbXVzdCBiZSBhd2FyZSB0aGF0IHR5cGUtPnRwX21ybyBjYW4gYmUgTlVMTC4KKyAgICAgICAgIiIiCisgICAgICAgIGNsYXNzIE0oRGVidWdIZWxwZXJNZXRhKToKKyAgICAgICAgICAgIGRlZiBtcm8oY2xzKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZXBfdW50aWwoMSk6CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCBjbHMuX19tcm9fXyBpcyBOb25lCisgICAgICAgICAgICAgICAgICAgIGNscy5fX2Jhc2VzX18gKz0gKCkKKworICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLm1ybyhjbHMpCisKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9yZWVudF9zZXRfYmFzZXNfb25fYmFzZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIERlZXAgcmVlbnRyYW5jeSBtdXN0IG5vdCBvdmVyLWRlY3JlZiBvbGRfbXJvLgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgTShEZWJ1Z0hlbHBlck1ldGEpOgorICAgICAgICAgICAgZGVmIG1ybyhjbHMpOgorICAgICAgICAgICAgICAgIGlmIGNscy5fX21yb19fIGlzIG5vdCBOb25lIGFuZCBjbHMuX19uYW1lX18gPT0gJ0InOgorICAgICAgICAgICAgICAgICAgICAjIDQtNSBzdGVwcyBhcmUgdXN1YWxseSBlbm91Z2ggdG8gbWFrZSBpdCBjcmFzaCBzb21ld2hlcmUKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5zdGVwX3VudGlsKDEwKToKKyAgICAgICAgICAgICAgICAgICAgICAgIEEuX19iYXNlc19fICs9ICgpCisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS5tcm8oY2xzKQorCisgICAgICAgIGNsYXNzIEEobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBCLl9fYmFzZXNfXyArPSAoKQorCisgICAgZGVmIHRlc3RfcmVlbnRfc2V0X2Jhc2VzX29uX2RpcmVjdF9iYXNlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgU2ltaWxhciB0byB0ZXN0X3JlZW50X3NldF9iYXNlc19vbl9iYXNlLCBidXQgbWF5IGNyYXNoIGRpZmZlcmVudGx5LgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgTShEZWJ1Z0hlbHBlck1ldGEpOgorICAgICAgICAgICAgZGVmIG1ybyhjbHMpOgorICAgICAgICAgICAgICAgIGJhc2UgPSBjbHMuX19iYXNlc19fWzBdCisgICAgICAgICAgICAgICAgaWYgYmFzZSBpcyBub3Qgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnN0ZXBfdW50aWwoNSk6CisgICAgICAgICAgICAgICAgICAgICAgICBiYXNlLl9fYmFzZXNfXyArPSAoKQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUubXJvKGNscykKKworICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQihBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQyhCKToKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X3JlZW50X3NldF9iYXNlc190cF9iYXNlX2N5Y2xlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgdHlwZV9zZXRfYmFzZXMgbXVzdCBjaGVjayBmb3IgYW4gaW5oZXJpdGFuY2UgY3ljbGUgbm90IG9ubHkgdGhyb3VnaAorICAgICAgICBNUk8gb2YgdGhlIHR5cGUsIHdoaWNoIG1heSBiZSBub3QgeWV0IHVwZGF0ZWQgaW4gY2FzZSBvZiByZWVudHJhbmNlLAorICAgICAgICBidXQgYWxzbyB0aHJvdWdoIHRwX2Jhc2UgY2hhaW4sIHdoaWNoIGlzIGFzc2lnbmVkIGJlZm9yZSBkaXZpbmcgaW50bworICAgICAgICBpbm5lciBjYWxscyB0byBtcm8oKS4KKworICAgICAgICBPdGhlcndpc2UsIHRoZSBmb2xsb3dpbmcgc25pcHBldCBjYW4gbG9vcCBmb3JldmVyOgorICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIC8vIC4uLgorICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLT50cF9iYXNlOworICAgICAgICAgICAgfSB3aGlsZSAodHlwZSAhPSBOVUxMKTsKKworICAgICAgICBGdW5jdGlvbnMgdGhhdCByZWx5IG9uIHRwX2Jhc2UgKGxpa2Ugc29saWRfYmFzZSBhbmQgUHlUeXBlX0lzU3VidHlwZSkKKyAgICAgICAgd291bGQgbm90IGJlIGhhcHB5IGluIHRoYXQgY2FzZSwgY2F1c2luZyBhIHN0YWNrIG92ZXJmbG93LgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgTShEZWJ1Z0hlbHBlck1ldGEpOgorICAgICAgICAgICAgZGVmIG1ybyhjbHMpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYucmVhZHk6CisgICAgICAgICAgICAgICAgICAgIGlmIGNscy5fX25hbWVfXyA9PSAnQjEnOgorICAgICAgICAgICAgICAgICAgICAgICAgQjIuX19iYXNlc19fID0gKEIxLCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY2xzLl9fbmFtZV9fID09ICdCMic6CisgICAgICAgICAgICAgICAgICAgICAgICBCMS5fX2Jhc2VzX18gPSAoQjIsKQorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLm1ybyhjbHMpCisKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIxKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCMihBKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLnJlYWR5ID0gVHJ1ZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBCMS5fX2Jhc2VzX18gKz0gKCkKKworICAgIGRlZiB0ZXN0X3RwX3N1YmNsYXNzZXNfY3ljbGVfaW5fdXBkYXRlX3Nsb3RzKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgdHlwZV9zZXRfYmFzZXMgbXVzdCBjaGVjayBmb3IgcmVlbnRyYW5jeSB1cG9uIGZpbmlzaGluZyBpdHMgam9iCisgICAgICAgIGJ5IHVwZGF0aW5nIHRwX3N1YmNsYXNzZXMgb2Ygb2xkL25ldyBiYXNlcyBvZiB0aGUgdHlwZS4KKyAgICAgICAgT3RoZXJ3aXNlLCBhbiBpbXBsaWNpdCBpbmhlcml0YW5jZSBjeWNsZSB0aHJvdWdoIHRwX3N1YmNsYXNzZXMKKyAgICAgICAgY2FuIGJyZWFrIGZ1bmN0aW9ucyB0aGF0IHJlY3Vyc2Ugb24gZWxlbWVudHMgb2YgdGhhdCBmaWVsZAorICAgICAgICAobGlrZSByZWN1cnNlX2Rvd25fc3ViY2xhc3NlcyBhbmQgbXJvX2hpZXJhcmNoeSkgZXZlbnR1YWxseQorICAgICAgICBsZWFkaW5nIHRvIGEgc3RhY2sgb3ZlcmZsb3cuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBNKERlYnVnSGVscGVyTWV0YSk6CisgICAgICAgICAgICBkZWYgbXJvKGNscyk6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5yZWFkeSBhbmQgY2xzLl9fbmFtZV9fID09ICdDJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZWFkeSA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgIEMuX19iYXNlc19fID0gKEIyLCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS5tcm8oY2xzKQorCisgICAgICAgIGNsYXNzIEEobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCMShBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQjIoQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEMoQSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5yZWFkeSA9IFRydWUKKyAgICAgICAgQy5fX2Jhc2VzX18gPSAoQjEsKQorICAgICAgICBCMS5fX2Jhc2VzX18gPSAoQywpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fYmFzZXNfXywgKEIyLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQjIuX19zdWJjbGFzc2VzX18oKSwgW0NdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEIxLl9fc3ViY2xhc3Nlc19fKCksIFtdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQjEuX19iYXNlc19fLCAoQywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMuX19zdWJjbGFzc2VzX18oKSwgW0IxXSkKKworICAgIGRlZiB0ZXN0X3RwX3N1YmNsYXNzZXNfY3ljbGVfZXJyb3JfcmV0dXJuX3BhdGgoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgc2FtZSBhcyB0ZXN0X3RwX3N1YmNsYXNzZXNfY3ljbGVfaW5fdXBkYXRlX3Nsb3RzLCBidXQgdGVzdHMKKyAgICAgICAgYSBjb2RlIHBhdGggZXhlY3V0ZWQgb24gZXJyb3IgKGdvdG8gYmFpbCkuCisgICAgICAgICIiIgorICAgICAgICBjbGFzcyBFKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIE0oRGVidWdIZWxwZXJNZXRhKToKKyAgICAgICAgICAgIGRlZiBtcm8oY2xzKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJlYWR5IGFuZCBjbHMuX19uYW1lX18gPT0gJ0MnOgorICAgICAgICAgICAgICAgICAgICBpZiBDLl9fYmFzZXNfXyA9PSAoQjIsKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYucmVhZHkgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgQy5fX2Jhc2VzX18gPSAoQjIsKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgRQorICAgICAgICAgICAgICAgIHJldHVybiB0eXBlLm1ybyhjbHMpCisKKyAgICAgICAgY2xhc3MgQShtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIxKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCMihBKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgQyhBKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLnJlYWR5ID0gVHJ1ZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEUpOgorICAgICAgICAgICAgQy5fX2Jhc2VzX18gPSAoQjEsKQorICAgICAgICBCMS5fX2Jhc2VzX18gPSAoQywpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLl9fYmFzZXNfXywgKEIyLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5fX21yb19fLCB0dXBsZSh0eXBlLm1ybyhDKSkpCisKKyAgICBkZWYgdGVzdF9pbmNvbXBsZXRlX2V4dGVuZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4dGVuZGluZyBhbiB1bml0aWFsaXplZCB0eXBlIHdpdGggdHlwZS0+dHBfbXJvID09IE5VTEwgbXVzdAorICAgICAgICB0aHJvdyBhIHJlYXNvbmFibGUgVHlwZUVycm9yIGV4Y2VwdGlvbiwgaW5zdGVhZCBvZiBmYWlsaW5nCisgICAgICAgIHdpdGggUHlFcnJfQmFkSW50ZXJuYWxDYWxsLgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgTShEZWJ1Z0hlbHBlck1ldGEpOgorICAgICAgICAgICAgZGVmIG1ybyhjbHMpOgorICAgICAgICAgICAgICAgIGlmIGNscy5fX21yb19fIGlzIE5vbmUgYW5kIGNscy5fX25hbWVfXyAhPSAnWCc6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzIFgoY2xzKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZS5tcm8oY2xzKQorCisgICAgICAgIGNsYXNzIEEobWV0YWNsYXNzPU0pOgorICAgICAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RfaW5jb21wbGV0ZV9zdXBlcihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEF0dHJ1YnV0ZSBsb29rdXAgb24gYSBzdXBlciBvYmplY3QgbXVzdCBiZSBhd2FyZSB0aGF0CisgICAgICAgIGl0cyB0YXJnZXQgdHlwZSBjYW4gYmUgdW5pbml0aWFsaXplZCAodHlwZS0+dHBfbXJvID09IE5VTEwpLgorICAgICAgICAiIiIKKyAgICAgICAgY2xhc3MgTShEZWJ1Z0hlbHBlck1ldGEpOgorICAgICAgICAgICAgZGVmIG1ybyhjbHMpOgorICAgICAgICAgICAgICAgIGlmIGNscy5fX21yb19fIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXIoY2xzLCBjbHMpLnh4eAorCisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUubXJvKGNscykKKworICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIHBhc3MKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgIyBSdW4gYWxsIGxvY2FsIHRlc3QgY2FzZXMsIHdpdGggUFR5cGVzTG9uZ0luaXRUZXN0IGZpcnN0LgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFBUeXBlc0xvbmdJbml0VGVzdCwgT3BlcmF0b3JzVGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzc1Byb3BlcnRpZXNBbmRNZXRob2RzLCBEaWN0UHJveHlUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBNaXNjVGVzdHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgTWlzY1Rlc3RzLCBQaWNrbGluZ1Rlc3RzLCBTaGFyZWRLZXlUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBNcm9UZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RldnBvbGwucHkgYi9MaWIvdGVzdC90ZXN0X2RldnBvbGwucHkKaW5kZXggOTEyOWFjMC4uOTU1NjE4YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kZXZwb2xsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGV2cG9sbC5weQpAQCAtMiwxMyArMiwxNSBAQAogCiAjIEluaXRpYWwgdGVzdHMgYXJlIGNvcGllZCBhcyBpcyBmcm9tICJ0ZXN0X3BvbGwucHkiCiAKLWltcG9ydCBvcywgc2VsZWN0LCByYW5kb20sIHVuaXR0ZXN0LCBzeXMKK2ltcG9ydCBvcworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHNlbGVjdAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBydW5fdW5pdHRlc3QsIGNweXRob25fb25seQogCi10cnk6Ci0gICAgc2VsZWN0LmRldnBvbGwKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LmRldnBvbGwgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF9kZXZwb2xsIikKK2lmIG5vdCBoYXNhdHRyKHNlbGVjdCwgJ2RldnBvbGwnKSA6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3Rlc3Qgd29ya3Mgb25seSBvbiBTb2xhcmlzIE9TIGZhbWlseScpCiAKIAogZGVmIGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIGZsYWcpOgpAQCAtODcsNiArODksMzUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcG9sbHN0ZXIucG9sbCwgMSA8PCA2MykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcG9sbHN0ZXIucG9sbCwgMSA8PCA2NCkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBvcGVuX2ZpbGUgPSBvcGVuKF9fZmlsZV9fLCAicmIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3Blbl9maWxlLmNsb3NlKQorICAgICAgICBmZCA9IG9wZW5fZmlsZS5maWxlbm8oKQorICAgICAgICBkZXZwb2xsID0gc2VsZWN0LmRldnBvbGwoKQorCisgICAgICAgICMgdGVzdCBmaWxlbm8oKSBtZXRob2QgYW5kIGNsb3NlZCBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRldnBvbGwuZmlsZW5vKCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkZXZwb2xsLmNsb3NlZCkKKworICAgICAgICAjIHRlc3QgY2xvc2UoKQorICAgICAgICBkZXZwb2xsLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRldnBvbGwuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLmZpbGVubykKKworICAgICAgICAjIGNsb3NlKCkgY2FuIGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZQorICAgICAgICBkZXZwb2xsLmNsb3NlKCkKKworICAgICAgICAjIG9wZXJhdGlvbnMgbXVzdCBmYWlsIHdpdGggVmFsdWVFcnJvcigiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgLi4uIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC5tb2RpZnksIGZkLCBzZWxlY3QuUE9MTElOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBkZXZwb2xsLnBvbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGRldnBvbGwucmVnaXN0ZXIsIGZkLCBmZCwgc2VsZWN0LlBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZGV2cG9sbC51bnJlZ2lzdGVyLCBmZCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZGV2cG9sbCA9IHNlbGVjdC5kZXZwb2xsKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGRldnBvbGwuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGRldnBvbGwuZmlsZW5vKCkpLCBGYWxzZSkKKwogICAgIGRlZiB0ZXN0X2V2ZW50c19tYXNrX292ZXJmbG93KHNlbGYpOgogICAgICAgICBwb2xsc3RlciA9IHNlbGVjdC5kZXZwb2xsKCkKICAgICAgICAgdywgciA9IG9zLnBpcGUoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kaWN0LnB5IGIvTGliL3Rlc3QvdGVzdF9kaWN0LnB5CmluZGV4IGJkMzA0MGEuLjgwZmViOTAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGljdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RpY3QucHkKQEAgLTYwMyw3ICs2MDMsNyBAQAogICAgICAgICAjIChEKSBzdWJjbGFzcyBkZWZpbmVzIF9fbWlzc2luZ19fIG1ldGhvZCByZXR1cm5pbmcgYSB2YWx1ZQogICAgICAgICAjIChFKSBzdWJjbGFzcyBkZWZpbmVzIF9fbWlzc2luZ19fIG1ldGhvZCByYWlzaW5nIFJ1bnRpbWVFcnJvcgogICAgICAgICAjIChGKSBzdWJjbGFzcyBzZXRzIF9fbWlzc2luZ19fIGluc3RhbmNlIHZhcmlhYmxlIChubyBlZmZlY3QpCi0gICAgICAgICMgKEcpIHN1YmNsYXNzIGRvZXNuJ3QgZGVmaW5lIF9fbWlzc2luZ19fIGF0IGEgYWxsCisgICAgICAgICMgKEcpIHN1YmNsYXNzIGRvZXNuJ3QgZGVmaW5lIF9fbWlzc2luZ19fIGF0IGFsbAogICAgICAgICBjbGFzcyBEKGRpY3QpOgogICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCkBAIC04MzcsNTcgKzgzNyw2MCBAQAogICAgICAgICBzZWxmLl90cmFja2VkKE15RGljdCgpKQogCiAgICAgZGVmIHRlc3RfaXRlcmF0b3JfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIGRhdGEgPSB7MToiYSIsIDI6ImIiLCAzOiJjIn0KLSAgICAgICAgaXQgPSBpdGVyKGRhdGEpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGl0KSwgc29ydGVkKGRhdGEpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGRhdGEgPSB7MToiYSIsIDI6ImIiLCAzOiJjIn0KKyAgICAgICAgICAgIGl0ID0gaXRlcihkYXRhKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaXQpLCBzb3J0ZWQoZGF0YSkpCiAKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZHJvcCA9IG5leHQoaXQpCi0gICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIGRlbCBkYXRhW2Ryb3BdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGl0KSwgc29ydGVkKGRhdGEpKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkcm9wID0gbmV4dChpdCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBkZWwgZGF0YVtkcm9wXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaXQpLCBzb3J0ZWQoZGF0YSkpCiAKICAgICBkZWYgdGVzdF9pdGVtaXRlcmF0b3JfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIGRhdGEgPSB7MToiYSIsIDI6ImIiLCAzOiJjIn0KLSAgICAgICAgIyBkaWN0dmlld3MgYXJlbid0IHBpY2tsYWJsZSwgb25seSB0aGVpciBpdGVyYXRvcnMKLSAgICAgICAgaXRvcmcgPSBpdGVyKGRhdGEuaXRlbXMoKSkKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZykKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgIyBub3RlIHRoYXQgdGhlIHR5cGUgb2YgdHlwZSBvZiB0aGUgdW5waWNrbGVkIGl0ZXJhdG9yCi0gICAgICAgICMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbC4gIEl0IGlzCi0gICAgICAgICMgbWVyZWx5IGFuIG9iamVjdCBzdXBwb3J0aW5nIHRoZSBpdGVyYXRvciBwcm90b2NvbCwgeWllbGRpbmcKLSAgICAgICAgIyB0aGUgc2FtZSBvYmplY3RzIGFzIHRoZSBvcmlnaW5hbCBvbmUuCi0gICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5hYmMuSXRlcmF0b3IpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoaXQpLCBkYXRhKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGRhdGEgPSB7MToiYSIsIDI6ImIiLCAzOiJjIn0KKyAgICAgICAgICAgICMgZGljdHZpZXdzIGFyZW4ndCBwaWNrbGFibGUsIG9ubHkgdGhlaXIgaXRlcmF0b3JzCisgICAgICAgICAgICBpdG9yZyA9IGl0ZXIoZGF0YS5pdGVtcygpKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZywgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgIyBub3RlIHRoYXQgdGhlIHR5cGUgb2YgdHlwZSBvZiB0aGUgdW5waWNrbGVkIGl0ZXJhdG9yCisgICAgICAgICAgICAjIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgb3JpZ2luYWwuICBJdCBpcworICAgICAgICAgICAgIyBtZXJlbHkgYW4gb2JqZWN0IHN1cHBvcnRpbmcgdGhlIGl0ZXJhdG9yIHByb3RvY29sLCB5aWVsZGluZworICAgICAgICAgICAgIyB0aGUgc2FtZSBvYmplY3RzIGFzIHRoZSBvcmlnaW5hbCBvbmUuCisgICAgICAgICAgICAjIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5hYmMuSXRlcmF0b3IpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoaXQpLCBkYXRhKQogCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIGRyb3AgPSBuZXh0KGl0KQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBkZWwgZGF0YVtkcm9wWzBdXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QoaXQpLCBkYXRhKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGRyb3AgPSBuZXh0KGl0KQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgZGVsIGRhdGFbZHJvcFswXV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChpdCksIGRhdGEpCiAKICAgICBkZWYgdGVzdF92YWx1ZXNpdGVyYXRvcl9waWNrbGluZyhzZWxmKToKLSAgICAgICAgZGF0YSA9IHsxOiJhIiwgMjoiYiIsIDM6ImMifQotICAgICAgICAjIGRhdGEudmFsdWVzKCkgaXNuJ3QgcGlja2xhYmxlLCBvbmx5IGl0cyBpdGVyYXRvcgotICAgICAgICBpdCA9IGl0ZXIoZGF0YS52YWx1ZXMoKSkKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQobGlzdChpdCkpLCBzb3J0ZWQobGlzdChkYXRhLnZhbHVlcygpKSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCk6CisgICAgICAgICAgICBkYXRhID0gezE6ImEiLCAyOiJiIiwgMzoiYyJ9CisgICAgICAgICAgICAjIGRhdGEudmFsdWVzKCkgaXNuJ3QgcGlja2xhYmxlLCBvbmx5IGl0cyBpdGVyYXRvcgorICAgICAgICAgICAgaXQgPSBpdGVyKGRhdGEudmFsdWVzKCkpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChsaXN0KGl0KSksIHNvcnRlZChsaXN0KGRhdGEudmFsdWVzKCkpKSkKIAotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBkcm9wID0gbmV4dChpdCkKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgdmFsdWVzID0gbGlzdChpdCkgKyBbZHJvcF0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodmFsdWVzKSwgc29ydGVkKGxpc3QoZGF0YS52YWx1ZXMoKSkpKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIGRyb3AgPSBuZXh0KGl0KQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgdmFsdWVzID0gbGlzdChpdCkgKyBbZHJvcF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHZhbHVlcyksIHNvcnRlZChsaXN0KGRhdGEudmFsdWVzKCkpKSkKIAogICAgIGRlZiB0ZXN0X2luc3RhbmNlX2RpY3RfZ2V0YXR0cl9zdHJfc3ViY2xhc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbzoKQEAgLTkwNiw2ICs5MDksMzQgQEAKICAgICAgICAgZi5hID0gJ2EnCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2RpY3RfXywgezE6MSwgJ2EnOidhJ30pCiAKKyAgICBkZWYgY2hlY2tfcmVlbnRyYW50X2luc2VydGlvbihzZWxmLCBtdXRhdGUpOgorICAgICAgICAjIFRoaXMgb2JqZWN0IHdpbGwgdHJpZ2dlciBtdXRhdGlvbiBvZiB0aGUgZGljdCB3aGVuIHJlcGxhY2VkCisgICAgICAgICMgYnkgYW5vdGhlciB2YWx1ZS4gIE5vdGUgdGhpcyByZWxpZXMgb24gcmVmY291bnRpbmc6IHRoZSB0ZXN0CisgICAgICAgICMgd29uJ3QgYWNoaWV2ZSBpdHMgcHVycG9zZSBvbiBmdWxseS1HQ2VkIFB5dGhvbiBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgIGNsYXNzIE11dGF0aW5nOgorICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgbXV0YXRlKGQpCisKKyAgICAgICAgZCA9IHtrOiBNdXRhdGluZygpIGZvciBrIGluICdhYmNkZWZnaGlqa2xtbm9wcXInfQorICAgICAgICBmb3IgayBpbiBsaXN0KGQpOgorICAgICAgICAgICAgZFtrXSA9IGsKKworICAgIGRlZiB0ZXN0X3JlZW50cmFudF9pbnNlcnRpb24oc2VsZik6CisgICAgICAgICMgUmVlbnRyYW50IGluc2VydGlvbiBzaG91bGRuJ3QgY3Jhc2ggKHNlZSBpc3N1ZSAjMjI2NTMpCisgICAgICAgIGRlZiBtdXRhdGUoZCk6CisgICAgICAgICAgICBkWydiJ10gPSA1CisgICAgICAgIHNlbGYuY2hlY2tfcmVlbnRyYW50X2luc2VydGlvbihtdXRhdGUpCisKKyAgICAgICAgZGVmIG11dGF0ZShkKToKKyAgICAgICAgICAgIGQudXBkYXRlKHNlbGYuX19kaWN0X18pCisgICAgICAgICAgICBkLmNsZWFyKCkKKyAgICAgICAgc2VsZi5jaGVja19yZWVudHJhbnRfaW5zZXJ0aW9uKG11dGF0ZSkKKworICAgICAgICBkZWYgbXV0YXRlKGQpOgorICAgICAgICAgICAgd2hpbGUgZDoKKyAgICAgICAgICAgICAgICBkLnBvcGl0ZW0oKQorICAgICAgICBzZWxmLmNoZWNrX3JlZW50cmFudF9pbnNlcnRpb24obXV0YXRlKQorCiAgICAgZGVmIHRlc3RfbWVyZ2VfYW5kX211dGF0ZShzZWxmKToKICAgICAgICAgY2xhc3MgWDoKICAgICAgICAgICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZGljdHZpZXdzLnB5IGIvTGliL3Rlc3QvdGVzdF9kaWN0dmlld3MucHkKaW5kZXggN2IwMmVhOS4uNWYyMTQ0YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaWN0dmlld3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9kaWN0dmlld3MucHkKQEAgLTEsMyArMSw1IEBACitpbXBvcnQgY29weQoraW1wb3J0IHBpY2tsZQogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIApAQCAtOTUsNiArOTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmtleXMoKSAmIHNldChkMS5rZXlzKCkpLCB7J2EnLCAnYid9KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmtleXMoKSAmIHNldChkMi5rZXlzKCkpLCB7J2InfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgJiBzZXQoZDMua2V5cygpKSwgc2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpICYgdHVwbGUoZDEua2V5cygpKSwgeydhJywgJ2InfSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmtleXMoKSB8IGQxLmtleXMoKSwgeydhJywgJ2InfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgfCBkMi5rZXlzKCksIHsnYScsICdiJywgJ2MnfSkKQEAgLTEwMyw2ICsxMDYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmtleXMoKSB8IHNldChkMi5rZXlzKCkpLCB7J2EnLCAnYicsICdjJ30pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIHwgc2V0KGQzLmtleXMoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJywgJ2InLCAnZCcsICdlJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIHwgKDEsIDIpLCB7J2EnLCAnYicsIDEsIDJ9KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIF4gZDEua2V5cygpLCBzZXQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgXiBkMi5rZXlzKCksIHsnYScsICdjJ30pCkBAIC0xMTEsNiArMTE1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgXiBzZXQoZDIua2V5cygpKSwgeydhJywgJ2MnfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgXiBzZXQoZDMua2V5cygpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICB7J2EnLCAnYicsICdkJywgJ2UnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgXiB0dXBsZShkMi5rZXlzKCkpLCB7J2EnLCAnYyd9KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIC0gZDEua2V5cygpLCBzZXQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgLSBkMi5rZXlzKCksIHsnYSd9KQpAQCAtMTE4LDYgKzEyMyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDEua2V5cygpIC0gc2V0KGQxLmtleXMoKSksIHNldCgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQxLmtleXMoKSAtIHNldChkMi5rZXlzKCkpLCB7J2EnfSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgLSBzZXQoZDMua2V5cygpKSwgeydhJywgJ2InfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMS5rZXlzKCkgLSAoMCwgMSksIHsnYScsICdiJ30pCiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShkMS5rZXlzKCkuaXNkaXNqb2ludChkMS5rZXlzKCkpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGQxLmtleXMoKS5pc2Rpc2pvaW50KGQyLmtleXMoKSkpCkBAIC0xOTgsNiArMjA0LDIyIEBACiAgICAgICAgIGRbNDJdID0gZC52YWx1ZXMoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHJlcHIsIGQpCiAKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvcHkuY29weSwgZC5rZXlzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29weS5jb3B5LCBkLnZhbHVlcygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvcHkuY29weSwgZC5pdGVtcygpKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBkID0gezE6IDEwLCAiYSI6ICJBQkMifQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHBpY2tsZS5QaWNrbGluZ0Vycm9yKSwKKyAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMsIGQua2V5cygpLCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHBpY2tsZS5QaWNrbGluZ0Vycm9yKSwKKyAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMsIGQudmFsdWVzKCksIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgcGlja2xlLlBpY2tsaW5nRXJyb3IpLAorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcywgZC5pdGVtcygpLCBwcm90bykKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoRGljdFNldFRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2RpZmZsaWIucHkKaW5kZXggMzI1NDQ5YS4uMGJhOGYwZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kaWZmbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGlmZmxpYi5weQpAQCAtNzYsNiArNzYsMTUgQEAKICAgICAgICAgZGlmZl9nZW4gPSBkaWZmbGliLnVuaWZpZWRfZGlmZihbXSwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGRpZmZfZ2VuKQogCisgICAgZGVmIHRlc3RfbWF0Y2hpbmdfYmxvY2tzX2NhY2hlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTYzNQorICAgICAgICBzID0gZGlmZmxpYi5TZXF1ZW5jZU1hdGNoZXIoTm9uZSwgImFieGNkIiwgImFiY2QiKQorICAgICAgICBmaXJzdCA9IHMuZ2V0X21hdGNoaW5nX2Jsb2NrcygpCisgICAgICAgIHNlY29uZCA9IHMuZ2V0X21hdGNoaW5nX2Jsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kWzBdLnNpemUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kWzFdLnNpemUsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Vjb25kWzJdLnNpemUsIDApCisKICAgICBkZWYgdGVzdF9hZGRlZF90YWJfaGludChzZWxmKToKICAgICAgICAgIyBDaGVjayBmaXggZm9yIGJ1ZyAjMTQ4ODk0MwogICAgICAgICBkaWZmID0gbGlzdChkaWZmbGliLkRpZmZlcigpLmNvbXBhcmUoWyJcdEkgYW0gYSBidWdneSJdLFsiXHRcdEkgYW0gYSBidWciXSkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Rpcy5weSBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CmluZGV4IGI4NmNjODYuLmI4ZGFmZjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZGlzLnB5CkBAIC0xLDEyICsxLDMwIEBACiAjIE1pbmltYWwgdGVzdHMgZm9yIGRpcyBtb2R1bGUKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgY2FwdHVyZWRfc3Rkb3V0Citmcm9tIHRlc3QuYnl0ZWNvZGVfaGVscGVyIGltcG9ydCBCeXRlY29kZVRlc3RDYXNlCiBpbXBvcnQgZGlmZmxpYgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgZGlzCiBpbXBvcnQgaW8KIGltcG9ydCByZQoraW1wb3J0IHR5cGVzCitpbXBvcnQgY29udGV4dGxpYgorCitkZWYgZ2V0X3RiKCk6CisgICAgZGVmIF9lcnJvcigpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAxIC8gMAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICB0YiA9IGUuX190cmFjZWJhY2tfXworICAgICAgICByZXR1cm4gdGIKKworICAgIHRiID0gX2Vycm9yKCkKKyAgICB3aGlsZSB0Yi50Yl9uZXh0OgorICAgICAgICB0YiA9IHRiLnRiX25leHQKKyAgICByZXR1cm4gdGIKKworVFJBQ0VCQUNLX0NPREUgPSBnZXRfdGIoKS50Yl9mcmFtZS5mX2NvZGUKIAogY2xhc3MgX0M6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjMsMTIgKzQxLDEyIEBACiAiIiIgJSAoX0MuX19pbml0X18uX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLCkKIAogZGlzX2NfaW5zdGFuY2VfbWV0aG9kX2J5dGVzID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9GQVNUICAgICAgICAgICAxICgxKQotICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQotICAgICAgICAgIDYgQ09NUEFSRV9PUCAgICAgICAgICAyICg9PSkKLSAgICAgICAgICA5IExPQURfRkFTVCAgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgMCAoMCkKLSAgICAgICAgIDE1IExPQURfQ09OU1QgICAgICAgICAgMCAoMCkKKyAgICAgICAgICAwIExPQURfRkFTVCAgICAgICAgICAgICAgICAxICgxKQorICAgICAgICAgIDMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCisgICAgICAgICAgNiBDT01QQVJFX09QICAgICAgICAgICAgICAgMiAoPT0pCisgICAgICAgICAgOSBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgIDEyIFNUT1JFX0FUVFIgICAgICAgICAgICAgICAwICgwKQorICAgICAgICAgMTUgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDAgKDApCiAgICAgICAgICAxOCBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC00OSwxMSArNjcsMTEgQEAKIAogCiBkaXNfZl9jb19jb2RlID0gIiIiXAotICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAwICgwKQotICAgICAgICAgIDMgTE9BRF9GQVNUICAgICAgICAgICAwICgwKQotICAgICAgICAgIDYgQ0FMTF9GVU5DVElPTiAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQorICAgICAgICAgIDAgTE9BRF9HTE9CQUwgICAgICAgICAgICAgIDAgKDApCisgICAgICAgICAgMyBMT0FEX0ZBU1QgICAgICAgICAgICAgICAgMCAoMCkKKyAgICAgICAgICA2IENBTExfRlVOQ1RJT04gICAgICAgICAgICAxICgxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyKQogICAgICAgICAgIDkgUE9QX1RPUAotICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAxICgxKQorICAgICAgICAgMTAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDEpCiAgICAgICAgICAxMyBSRVRVUk5fVkFMVUUKICIiIgogCkBAIC04OSw3ICsxMDcsNyBAQAogICAgIHBhc3MKIAogZGlzX2J1ZzEzMzM5ODIgPSAiIiJcCi0gJS00ZCAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCislM2QgICAgICAgICAgIDAgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDEgKDApCiAgICAgICAgICAgICAgIDMgUE9QX0pVTVBfSUZfVFJVRSAgICAgICAgMzUKICAgICAgICAgICAgICAgNiBMT0FEX0dMT0JBTCAgICAgICAgICAgICAgMCAoQXNzZXJ0aW9uRXJyb3IpCiAgICAgICAgICAgICAgIDkgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKDxjb2RlIG9iamVjdCA8bGlzdGNvbXA+IGF0IDB4Li4uLCBmaWxlICIlcyIsIGxpbmUgJWQ+KQpAQCAtOTksMTIgKzExNywxMiBAQAogICAgICAgICAgICAgIDIxIEdFVF9JVEVSCiAgICAgICAgICAgICAgMjIgQ0FMTF9GVU5DVElPTiAgICAgICAgICAgIDEgKDEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXIpCiAKLSAlLTRkICAgICAgICAyNSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgNCAoMSkKKyUzZCAgICAgICAgICAyNSBMT0FEX0NPTlNUICAgICAgICAgICAgICAgNCAoMSkKICAgICAgICAgICAgICAyOCBCSU5BUllfQURECiAgICAgICAgICAgICAgMjkgQ0FMTF9GVU5DVElPTiAgICAgICAgICAgIDEgKDEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXIpCiAgICAgICAgICAgICAgMzIgUkFJU0VfVkFSQVJHUyAgICAgICAgICAgIDEKIAotICUtNGQgICA+PiAgIDM1IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQorJTNkICAgICA+PiAgIDM1IExPQURfQ09OU1QgICAgICAgICAgICAgICAwIChOb25lKQogICAgICAgICAgICAgIDM4IFJFVFVSTl9WQUxVRQogIiIiICUgKGJ1ZzEzMzM5ODIuX19jb2RlX18uY29fZmlyc3RsaW5lbm8gKyAxLAogICAgICAgIF9fZmlsZV9fLApAQCAtMTYwLDQ5ICsxNzgsODEgQEAKICAgMSAgICAgICAgICAgMCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoMCkKICAgICAgICAgICAgICAgMyBTVE9SRV9OQU1FICAgICAgICAgICAgICAgMCAoeCkKIAotICAyICAgICAgICAgICA2IFNFVFVQX0xPT1AgICAgICAgICAgICAgIDEzICh0byAyMikKKyAgMiAgICAgICAgICAgNiBTRVRVUF9MT09QICAgICAgICAgICAgICAxNCAodG8gMjMpCiAKICAgMyAgICAgPj4gICAgOSBMT0FEX05BTUUgICAgICAgICAgICAgICAgMCAoeCkKICAgICAgICAgICAgICAxMiBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKICAgICAgICAgICAgICAxNSBJTlBMQUNFX0FERAogICAgICAgICAgICAgIDE2IFNUT1JFX05BTUUgICAgICAgICAgICAgICAwICh4KQogICAgICAgICAgICAgIDE5IEpVTVBfQUJTT0xVVEUgICAgICAgICAgICA5Ci0gICAgICAgID4+ICAgMjIgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKE5vbmUpCi0gICAgICAgICAgICAgMjUgUkVUVVJOX1ZBTFVFCisgICAgICAgICAgICAgMjIgUE9QX0JMT0NLCisgICAgICAgID4+ICAgMjMgTE9BRF9DT05TVCAgICAgICAgICAgICAgIDIgKE5vbmUpCisgICAgICAgICAgICAgMjYgUkVUVVJOX1ZBTFVFCiAiIiIKIAorZGlzX3RyYWNlYmFjayA9ICIiIlwKKyAlLTRkICAgICAgICAgMCBTRVRVUF9FWENFUFQgICAgICAgICAgICAxMiAodG8gMTUpCisKKyAlLTRkICAgICAgICAgMyBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMSAoMSkKKyAgICAgICAgICAgICAgNiBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMiAoMCkKKyAgICAtLT4gICAgICAgOSBCSU5BUllfVFJVRV9ESVZJREUKKyAgICAgICAgICAgICAxMCBQT1BfVE9QCisgICAgICAgICAgICAgMTEgUE9QX0JMT0NLCisgICAgICAgICAgICAgMTIgSlVNUF9GT1JXQVJEICAgICAgICAgICAgNDYgKHRvIDYxKQorCisgJS00ZCAgID4+ICAgMTUgRFVQX1RPUAorICAgICAgICAgICAgIDE2IExPQURfR0xPQkFMICAgICAgICAgICAgICAwIChFeGNlcHRpb24pCisgICAgICAgICAgICAgMTkgQ09NUEFSRV9PUCAgICAgICAgICAgICAgMTAgKGV4Y2VwdGlvbiBtYXRjaCkKKyAgICAgICAgICAgICAyMiBQT1BfSlVNUF9JRl9GQUxTRSAgICAgICA2MAorICAgICAgICAgICAgIDI1IFBPUF9UT1AKKyAgICAgICAgICAgICAyNiBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMCAoZSkKKyAgICAgICAgICAgICAyOSBQT1BfVE9QCisgICAgICAgICAgICAgMzAgU0VUVVBfRklOQUxMWSAgICAgICAgICAgMTQgKHRvIDQ3KQorCisgJS00ZCAgICAgICAgMzMgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDAgKGUpCisgICAgICAgICAgICAgMzYgTE9BRF9BVFRSICAgICAgICAgICAgICAgIDEgKF9fdHJhY2ViYWNrX18pCisgICAgICAgICAgICAgMzkgU1RPUkVfRkFTVCAgICAgICAgICAgICAgIDEgKHRiKQorICAgICAgICAgICAgIDQyIFBPUF9CTE9DSworICAgICAgICAgICAgIDQzIFBPUF9FWENFUFQKKyAgICAgICAgICAgICA0NCBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKKyAgICAgICAgPj4gICA0NyBMT0FEX0NPTlNUICAgICAgICAgICAgICAgMCAoTm9uZSkKKyAgICAgICAgICAgICA1MCBTVE9SRV9GQVNUICAgICAgICAgICAgICAgMCAoZSkKKyAgICAgICAgICAgICA1MyBERUxFVEVfRkFTVCAgICAgICAgICAgICAgMCAoZSkKKyAgICAgICAgICAgICA1NiBFTkRfRklOQUxMWQorICAgICAgICAgICAgIDU3IEpVTVBfRk9SV0FSRCAgICAgICAgICAgICAxICh0byA2MSkKKyAgICAgICAgPj4gICA2MCBFTkRfRklOQUxMWQorCisgJS00ZCAgID4+ICAgNjEgTE9BRF9GQVNUICAgICAgICAgICAgICAgIDEgKHRiKQorICAgICAgICAgICAgIDY0IFJFVFVSTl9WQUxVRQorIiIiICUgKFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgMSwKKyAgICAgICBUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDIsCisgICAgICAgVFJBQ0VCQUNLX0NPREUuY29fZmlyc3RsaW5lbm8gKyAzLAorICAgICAgIFRSQUNFQkFDS19DT0RFLmNvX2ZpcnN0bGluZW5vICsgNCwKKyAgICAgICBUUkFDRUJBQ0tfQ09ERS5jb19maXJzdGxpbmVubyArIDUpCisKIGNsYXNzIERpc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBnZXRfZGlzYXNzZW1ibHkoc2VsZiwgZnVuYywgbGFzdGk9LTEsIHdyYXBwZXI9VHJ1ZSk6Ci0gICAgICAgIHMgPSBpby5TdHJpbmdJTygpCi0gICAgICAgIHNhdmVfc3Rkb3V0ID0gc3lzLnN0ZG91dAotICAgICAgICBzeXMuc3Rkb3V0ID0gcwotICAgICAgICB0cnk6CisgICAgICAgICMgV2Ugd2FudCB0byB0ZXN0IHRoZSBkZWZhdWx0IHByaW50aW5nIGJlaGF2aW91ciwgbm90IHRoZSBmaWxlIGFyZworICAgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpCisgICAgICAgIHdpdGggY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXQob3V0cHV0KToKICAgICAgICAgICAgIGlmIHdyYXBwZXI6CiAgICAgICAgICAgICAgICAgZGlzLmRpcyhmdW5jKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBkaXMuZGlzYXNzZW1ibGUoZnVuYywgbGFzdGkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZV9zdGRvdXQKLSAgICAgICAgIyBUcmltIHRyYWlsaW5nIGJsYW5rcyAoaWYgYW55KS4KLSAgICAgICAgcmV0dXJuIFtsaW5lLnJzdHJpcCgpIGZvciBsaW5lIGluIHMuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCldCisgICAgICAgIHJldHVybiBvdXRwdXQuZ2V0dmFsdWUoKQogCiAgICAgZGVmIGdldF9kaXNhc3NlbWJsZV9hc19zdHJpbmcoc2VsZiwgZnVuYywgbGFzdGk9LTEpOgotICAgICAgICByZXR1cm4gJ1xuJy5qb2luKHNlbGYuZ2V0X2Rpc2Fzc2VtYmx5KGZ1bmMsIGxhc3RpLCBGYWxzZSkpCisgICAgICAgIHJldHVybiBzZWxmLmdldF9kaXNhc3NlbWJseShmdW5jLCBsYXN0aSwgRmFsc2UpCisKKyAgICBkZWYgc3RyaXBfYWRkcmVzc2VzKHNlbGYsIHRleHQpOgorICAgICAgICByZXR1cm4gcmUuc3ViKHInXGIweFswLTlBLUZhLWZdK1xiJywgJzB4Li4uJywgdGV4dCkKIAogICAgIGRlZiBkb19kaXNhc3NlbWJseV90ZXN0KHNlbGYsIGZ1bmMsIGV4cGVjdGVkKToKLSAgICAgICAgbGluZXMgPSBzZWxmLmdldF9kaXNhc3NlbWJseShmdW5jKQotICAgICAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnNwbGl0bGluZXMoKQotICAgICAgICBpZiBleHBlY3RlZCA9PSBsaW5lczoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbGluZXMgPSBbcmUuc3ViKCcweFswLTlBLUZhLWZdKycsICcweC4uLicsIGwpIGZvciBsIGluIGxpbmVzXQotICAgICAgICAgICAgaWYgZXhwZWN0ZWQgPT0gbGluZXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuZmFpbCgKLSAgICAgICAgICAgICAgICAiZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0YXRpb246XG4iICsKLSAgICAgICAgICAgICAgICAiXG4iLmpvaW4oZGlmZmxpYi5uZGlmZihleHBlY3RlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcykpKQorICAgICAgICBnb3QgPSBzZWxmLmdldF9kaXNhc3NlbWJseShmdW5jKQorICAgICAgICBpZiBnb3QgIT0gZXhwZWN0ZWQ6CisgICAgICAgICAgICBnb3QgPSBzZWxmLnN0cmlwX2FkZHJlc3Nlcyhnb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290LCBleHBlY3RlZCkKIAogICAgIGRlZiB0ZXN0X29wbWFwKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcy5vcG1hcFsiTk9QIl0sIDkpCkBAIC0yOTAsMzUgKzM0MCwzNSBAQAogICAgIGRlZiB0ZXN0X2Rpc19vYmplY3Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlzLmRpcywgb2JqZWN0KCkpCiAKK2NsYXNzIERpc1dpdGhGaWxlVGVzdHMoRGlzVGVzdHMpOgorCisgICAgIyBSdW4gdGhlIHRlc3RzIGFnYWluLCB1c2luZyB0aGUgZmlsZSBhcmcgaW5zdGVhZCBvZiBwcmludAorICAgIGRlZiBnZXRfZGlzYXNzZW1ibHkoc2VsZiwgZnVuYywgbGFzdGk9LTEsIHdyYXBwZXI9VHJ1ZSk6CisgICAgICAgIG91dHB1dCA9IGlvLlN0cmluZ0lPKCkKKyAgICAgICAgaWYgd3JhcHBlcjoKKyAgICAgICAgICAgIGRpcy5kaXMoZnVuYywgZmlsZT1vdXRwdXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkaXMuZGlzYXNzZW1ibGUoZnVuYywgbGFzdGksIGZpbGU9b3V0cHV0KQorICAgICAgICByZXR1cm4gb3V0cHV0LmdldHZhbHVlKCkKKworCisKIGNvZGVfaW5mb19jb2RlX2luZm8gPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgY29kZV9pbmZvCiBGaWxlbmFtZTogICAgICAgICAgKC4qKQogQXJndW1lbnQgY291bnQ6ICAgIDEKIEt3LW9ubHkgYXJndW1lbnRzOiAwCiBOdW1iZXIgb2YgbG9jYWxzOiAgMQotU3RhY2sgc2l6ZTogICAgICAgIDQKK1N0YWNrIHNpemU6ICAgICAgICAzCiBGbGFnczogICAgICAgICAgICAgT1BUSU1JWkVELCBORVdMT0NBTFMsIE5PRlJFRQogQ29uc3RhbnRzOgogICAgMDogJXIKLSAgIDE6ICdfX2Z1bmNfXycKLSAgIDI6ICdfX2NvZGVfXycKLSAgIDM6ICc8Y29kZV9pbmZvPicKLSAgIDQ6ICdjb19jb2RlJwotICAgNTogImRvbid0IGtub3cgaG93IHRvIGRpc2Fzc2VtYmxlICUlcyBvYmplY3RzIgotJXNOYW1lczoKLSAgIDA6IGhhc2F0dHIKLSAgIDE6IF9fZnVuY19fCi0gICAyOiBfX2NvZGVfXwotICAgMzogaXNpbnN0YW5jZQotICAgNDogc3RyCi0gICA1OiBfdHJ5X2NvbXBpbGUKLSAgIDY6IF9mb3JtYXRfY29kZV9pbmZvCi0gICA3OiBUeXBlRXJyb3IKLSAgIDg6IHR5cGUKLSAgIDk6IF9fbmFtZV9fCitOYW1lczoKKyAgIDA6IF9mb3JtYXRfY29kZV9pbmZvCisgICAxOiBfZ2V0X2NvZGVfb2JqZWN0CiBWYXJpYWJsZSBuYW1lczoKLSAgIDA6IHgiIiIgJSAoKCdGb3JtYXR0ZWQgZGV0YWlscyBvZiBtZXRob2RzLCBmdW5jdGlvbnMsIG9yIGNvZGUuJywgJyAgIDY6IE5vbmVcbicpCi0gICAgICAgICAgICAgIGlmIHN5cy5mbGFncy5vcHRpbWl6ZSA8IDIgZWxzZSAoTm9uZSwgJycpKQorICAgMDogeCIiIiAlICgoJ0Zvcm1hdHRlZCBkZXRhaWxzIG9mIG1ldGhvZHMsIGZ1bmN0aW9ucywgb3IgY29kZS4nLCkKKyAgICAgICAgICAgICAgaWYgc3lzLmZsYWdzLm9wdGltaXplIDwgMiBlbHNlIChOb25lLCkpCiAKIEBzdGF0aWNtZXRob2QKIGRlZiB0cmlja3koeCwgeSwgej1UcnVlLCAqYXJncywgYywgZCwgZT1bXSwgKiprd2RzKToKQEAgLTM4Miw3ICs0MzIsNyBAQAogCiBjb2RlX2luZm9fZXhwcl9zdHIgPSAiIiJcCiBOYW1lOiAgICAgICAgICAgICAgPG1vZHVsZT4KLUZpbGVuYW1lOiAgICAgICAgICA8Y29kZV9pbmZvPgorRmlsZW5hbWU6ICAgICAgICAgIDxkaXNhc3NlbWJseT4KIEFyZ3VtZW50IGNvdW50OiAgICAwCiBLdy1vbmx5IGFyZ3VtZW50czogMAogTnVtYmVyIG9mIGxvY2FsczogIDAKQEAgLTM5NSw3ICs0NDUsNyBAQAogCiBjb2RlX2luZm9fc2ltcGxlX3N0bXRfc3RyID0gIiIiXAogTmFtZTogICAgICAgICAgICAgIDxtb2R1bGU+Ci1GaWxlbmFtZTogICAgICAgICAgPGNvZGVfaW5mbz4KK0ZpbGVuYW1lOiAgICAgICAgICA8ZGlzYXNzZW1ibHk+CiBBcmd1bWVudCBjb3VudDogICAgMAogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAwCkBAIC00MDksNyArNDU5LDcgQEAKIAogY29kZV9pbmZvX2NvbXBvdW5kX3N0bXRfc3RyID0gIiIiXAogTmFtZTogICAgICAgICAgICAgIDxtb2R1bGU+Ci1GaWxlbmFtZTogICAgICAgICAgPGNvZGVfaW5mbz4KK0ZpbGVuYW1lOiAgICAgICAgICA8ZGlzYXNzZW1ibHk+CiBBcmd1bWVudCBjb3VudDogICAgMAogS3ctb25seSBhcmd1bWVudHM6IDAKIE51bWJlciBvZiBsb2NhbHM6ICAwCkBAIC00NDMsNiArNDkzLDkgQEAKICAgICAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgogICAgICAgICAgICAgICAgIGRpcy5zaG93X2NvZGUoeCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0cHV0LmdldHZhbHVlKCksIGV4cGVjdGVkKyJcbiIpCisgICAgICAgICAgICBvdXRwdXQgPSBpby5TdHJpbmdJTygpCisgICAgICAgICAgICBkaXMuc2hvd19jb2RlKHgsIGZpbGU9b3V0cHV0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChvdXRwdXQuZ2V0dmFsdWUoKSwgZXhwZWN0ZWQpCiAKICAgICBkZWYgdGVzdF9jb2RlX2luZm9fb2JqZWN0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGRpcy5jb2RlX2luZm8sIG9iamVjdCgpKQpAQCAtNDUxLDUgKzUwNCwzMzAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXMucHJldHR5X2ZsYWdzKDApLCAnMHgwJykKIAogCisjIEZvZGRlciBmb3IgaW5zdHJ1Y3Rpb24gaW50cm9zcGVjdGlvbiB0ZXN0cworIyAgIEVkaXRpbmcgYW55IG9mIHRoZXNlIG1heSByZXF1aXJlIHJlY2FsY3VsYXRpbmcgdGhlIGV4cGVjdGVkIG91dHB1dAorZGVmIG91dGVyKGE9MSwgYj0yKToKKyAgICBkZWYgZihjPTMsIGQ9NCk6CisgICAgICAgIGRlZiBpbm5lcihlPTUsIGY9Nik6CisgICAgICAgICAgICBwcmludChhLCBiLCBjLCBkLCBlLCBmKQorICAgICAgICBwcmludChhLCBiLCBjLCBkKQorICAgICAgICByZXR1cm4gaW5uZXIKKyAgICBwcmludChhLCBiLCAnJywgMSwgW10sIHt9LCAiSGVsbG8gd29ybGQhIikKKyAgICByZXR1cm4gZgorCitkZWYganVtcHkoKToKKyAgICAjIFRoaXMgd29uJ3QgYWN0dWFsbHkgcnVuIChidXQgdGhhdCdzIE9LLCB3ZSBvbmx5IGRpc2Fzc2VtYmxlIGl0KQorICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgcHJpbnQoaSkKKyAgICAgICAgaWYgaSA8IDQ6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBpZiBpID4gNjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoIkkgY2FuIGhheiBlbHNlIGNsYXVzZT8iKQorICAgIHdoaWxlIGk6CisgICAgICAgIHByaW50KGkpCisgICAgICAgIGkgLT0gMQorICAgICAgICBpZiBpID4gNjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGlmIGkgPCA0OgorICAgICAgICAgICAgYnJlYWsKKyAgICBlbHNlOgorICAgICAgICBwcmludCgiV2hvIGxldCBsb2xjYXR6IGludG8gdGhpcyB0ZXN0IHN1aXRlPyIpCisgICAgdHJ5OgorICAgICAgICAxIC8gMAorICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgcHJpbnQoIkhlcmUgd2UgZ28sIGhlcmUgd2UgZ28sIGhlcmUgd2UgZ28uLi4iKQorICAgIGVsc2U6CisgICAgICAgIHdpdGggaSBhcyBkb2RneToKKyAgICAgICAgICAgIHByaW50KCJOZXZlciByZWFjaCB0aGlzIikKKyAgICBmaW5hbGx5OgorICAgICAgICBwcmludCgiT0ssIG5vdyB3ZSdyZSBkb25lIikKKworIyBFbmQgZm9kZGVyIGZvciBvcGluZm8gZ2VuZXJhdGlvbiB0ZXN0cworZXhwZWN0ZWRfb3V0ZXJfbGluZSA9IDEKK19saW5lX29mZnNldCA9IG91dGVyLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vIC0gMQorY29kZV9vYmplY3RfZiA9IG91dGVyLl9fY29kZV9fLmNvX2NvbnN0c1szXQorZXhwZWN0ZWRfZl9saW5lID0gY29kZV9vYmplY3RfZi5jb19maXJzdGxpbmVubyAtIF9saW5lX29mZnNldAorY29kZV9vYmplY3RfaW5uZXIgPSBjb2RlX29iamVjdF9mLmNvX2NvbnN0c1szXQorZXhwZWN0ZWRfaW5uZXJfbGluZSA9IGNvZGVfb2JqZWN0X2lubmVyLmNvX2ZpcnN0bGluZW5vIC0gX2xpbmVfb2Zmc2V0CitleHBlY3RlZF9qdW1weV9saW5lID0gMQorCisjIFRoZSBmb2xsb3dpbmcgbGluZXMgYXJlIHVzZWZ1bCB0byByZWdlbmVyYXRlIHRoZSBleHBlY3RlZCByZXN1bHRzIGFmdGVyCisjIGVpdGhlciB0aGUgZm9kZGVyIGlzIG1vZGlmaWVkIG9yIHRoZSBieXRlY29kZSBnZW5lcmF0aW9uIGNoYW5nZXMKKyMgQWZ0ZXIgcmVnZW5lcmF0aW9uLCB1cGRhdGUgdGhlIHJlZmVyZW5jZXMgdG8gY29kZV9vYmplY3RfZiBhbmQKKyMgY29kZV9vYmplY3RfaW5uZXIgYmVmb3JlIHJlcnVubmluZyB0aGUgdGVzdHMKKworI19pbnN0cnVjdGlvbnMgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhvdXRlciwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9fb3V0ZXIgPSBbXG4gICcsCisgICAgICAjJyxcbiAgJy5qb2luKG1hcChzdHIsIF9pbnN0cnVjdGlvbnMpKSwgJyxcbl0nLCBzZXA9JycpCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyKCksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyNwcmludCgnZXhwZWN0ZWRfb3BpbmZvX2YgPSBbXG4gICcsCisgICAgICAjJyxcbiAgJy5qb2luKG1hcChzdHIsIF9pbnN0cnVjdGlvbnMpKSwgJyxcbl0nLCBzZXA9JycpCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyKCkoKSwgZmlyc3RfbGluZT1leHBlY3RlZF9vdXRlcl9saW5lKQorI3ByaW50KCdleHBlY3RlZF9vcGluZm9faW5uZXIgPSBbXG4gICcsCisgICAgICAjJyxcbiAgJy5qb2luKG1hcChzdHIsIF9pbnN0cnVjdGlvbnMpKSwgJyxcbl0nLCBzZXA9JycpCisjX2luc3RydWN0aW9ucyA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGp1bXB5LCBmaXJzdF9saW5lPWV4cGVjdGVkX2p1bXB5X2xpbmUpCisjcHJpbnQoJ2V4cGVjdGVkX29waW5mb19qdW1weSA9IFtcbiAgJywKKyAgICAgICMnLFxuICAnLmpvaW4obWFwKHN0ciwgX2luc3RydWN0aW9ucykpLCAnLFxuXScsIHNlcD0nJykKKworCitJbnN0cnVjdGlvbiA9IGRpcy5JbnN0cnVjdGlvbgorZXhwZWN0ZWRfb3BpbmZvX291dGVyID0gWworICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTMsIGFyZ3JlcHI9JzMnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9MiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MiwgYXJndmFsPTQsIGFyZ3JlcHI9JzQnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0wLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MSwgYXJndmFsPSdiJywgYXJncmVwcj0nYicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQlVJTERfVFVQTEUnLCBvcGNvZGU9MTAyLCBhcmc9MiwgYXJndmFsPTIsIGFyZ3JlcHI9JycsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPWNvZGVfb2JqZWN0X2YsIGFyZ3JlcHI9cmVwcihjb2RlX29iamVjdF9mKSwgb2Zmc2V0PTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz00LCBhcmd2YWw9J291dGVyLjxsb2NhbHM+LmYnLCBhcmdyZXByPSInb3V0ZXIuPGxvY2Fscz4uZiciLCBvZmZzZXQ9MTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdNQUtFX0NMT1NVUkUnLCBvcGNvZGU9MTM0LCBhcmc9MiwgYXJndmFsPTIsIGFyZ3JlcHI9JycsIG9mZnNldD0yMSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MiwgYXJndmFsPSdmJywgYXJncmVwcj0nZicsIG9mZnNldD0yNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTAsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0yNywgc3RhcnRzX2xpbmU9NywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MCwgYXJndmFsPSdhJywgYXJncmVwcj0nYScsIG9mZnNldD0zMCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MSwgYXJndmFsPSdiJywgYXJncmVwcj0nYicsIG9mZnNldD0zMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NSwgYXJndmFsPScnLCBhcmdyZXByPSInJyIsIG9mZnNldD0zNiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NiwgYXJndmFsPTEsIGFyZ3JlcHI9JzEnLCBvZmZzZXQ9MzksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9MSVNUJywgb3Bjb2RlPTEwMywgYXJnPTAsIGFyZ3ZhbD0wLCBhcmdyZXByPScnLCBvZmZzZXQ9NDIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCVUlMRF9NQVAnLCBvcGNvZGU9MTA1LCBhcmc9MCwgYXJndmFsPTAsIGFyZ3JlcHI9JycsIG9mZnNldD00NSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NywgYXJndmFsPSdIZWxsbyB3b3JsZCEnLCBhcmdyZXByPSInSGVsbG8gd29ybGQhJyIsIG9mZnNldD00OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9NywgYXJndmFsPTcsIGFyZ3JlcHI9JzcgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9NTEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTIsIGFyZ3ZhbD0nZicsIGFyZ3JlcHI9J2YnLCBvZmZzZXQ9NTUsIHN0YXJ0c19saW5lPTgsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdSRVRVUk5fVkFMVUUnLCBvcGNvZGU9ODMsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTU4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCitdCisKK2V4cGVjdGVkX29waW5mb19mID0gWworICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MSwgYXJndmFsPTUsIGFyZ3JlcHI9JzUnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9MywgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MiwgYXJndmFsPTYsIGFyZ3JlcHI9JzYnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ0xPU1VSRScsIG9wY29kZT0xMzUsIGFyZz0yLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MywgYXJndmFsPSdiJywgYXJncmVwcj0nYicsIG9mZnNldD05LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DTE9TVVJFJywgb3Bjb2RlPTEzNSwgYXJnPTAsIGFyZ3ZhbD0nYycsIGFyZ3JlcHI9J2MnLCBvZmZzZXQ9MTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NMT1NVUkUnLCBvcGNvZGU9MTM1LCBhcmc9MSwgYXJndmFsPSdkJywgYXJncmVwcj0nZCcsIG9mZnNldD0xNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JVSUxEX1RVUExFJywgb3Bjb2RlPTEwMiwgYXJnPTQsIGFyZ3ZhbD00LCBhcmdyZXByPScnLCBvZmZzZXQ9MTgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTMsIGFyZ3ZhbD1jb2RlX29iamVjdF9pbm5lciwgYXJncmVwcj1yZXByKGNvZGVfb2JqZWN0X2lubmVyKSwgb2Zmc2V0PTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz00LCBhcmd2YWw9J291dGVyLjxsb2NhbHM+LmYuPGxvY2Fscz4uaW5uZXInLCBhcmdyZXByPSInb3V0ZXIuPGxvY2Fscz4uZi48bG9jYWxzPi5pbm5lciciLCBvZmZzZXQ9MjQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdNQUtFX0NMT1NVUkUnLCBvcGNvZGU9MTM0LCBhcmc9MiwgYXJndmFsPTIsIGFyZ3JlcHI9JycsIG9mZnNldD0yNywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MiwgYXJndmFsPSdpbm5lcicsIGFyZ3JlcHI9J2lubmVyJywgb2Zmc2V0PTMwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTMzLCBzdGFydHNfbGluZT01LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0yLCBhcmd2YWw9J2EnLCBhcmdyZXByPSdhJywgb2Zmc2V0PTM2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0zLCBhcmd2YWw9J2InLCBhcmdyZXByPSdiJywgb2Zmc2V0PTM5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0wLCBhcmd2YWw9J2MnLCBhcmdyZXByPSdjJywgb2Zmc2V0PTQyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0xLCBhcmd2YWw9J2QnLCBhcmdyZXByPSdkJywgb2Zmc2V0PTQ1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz00LCBhcmd2YWw9NCwgYXJncmVwcj0nNCBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD00OCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9NTEsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MiwgYXJndmFsPSdpbm5lcicsIGFyZ3JlcHI9J2lubmVyJywgb2Zmc2V0PTUyLCBzdGFydHNfbGluZT02LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUkVUVVJOX1ZBTFVFJywgb3Bjb2RlPTgzLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01NSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCitleHBlY3RlZF9vcGluZm9faW5uZXIgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTAsIHN0YXJ0c19saW5lPTQsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTAsIGFyZ3ZhbD0nYScsIGFyZ3JlcHI9J2EnLCBvZmZzZXQ9Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfREVSRUYnLCBvcGNvZGU9MTM2LCBhcmc9MSwgYXJndmFsPSdiJywgYXJncmVwcj0nYicsIG9mZnNldD02LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9ERVJFRicsIG9wY29kZT0xMzYsIGFyZz0yLCBhcmd2YWw9J2MnLCBhcmdyZXByPSdjJywgb2Zmc2V0PTksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0RFUkVGJywgb3Bjb2RlPTEzNiwgYXJnPTMsIGFyZ3ZhbD0nZCcsIGFyZ3JlcHI9J2QnLCBvZmZzZXQ9MTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdlJywgYXJncmVwcj0nZScsIG9mZnNldD0xNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0xLCBhcmd2YWw9J2YnLCBhcmdyZXByPSdmJywgb2Zmc2V0PTE4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz02LCBhcmd2YWw9NiwgYXJncmVwcj0nNiBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0yMSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjQsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTI1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUkVUVVJOX1ZBTFVFJywgb3Bjb2RlPTgzLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorXQorCitleHBlY3RlZF9vcGluZm9fanVtcHkgPSBbCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfTE9PUCcsIG9wY29kZT0xMjAsIGFyZz03NCwgYXJndmFsPTc3LCBhcmdyZXByPSd0byA3NycsIG9mZnNldD0wLCBzdGFydHNfbGluZT0zLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MCwgYXJndmFsPSdyYW5nZScsIGFyZ3JlcHI9J3JhbmdlJywgb2Zmc2V0PTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTEsIGFyZ3ZhbD0xMCwgYXJncmVwcj0nMTAnLCBvZmZzZXQ9Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0dFVF9JVEVSJywgb3Bjb2RlPTY4LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0ZPUl9JVEVSJywgb3Bjb2RlPTkzLCBhcmc9NTAsIGFyZ3ZhbD02NiwgYXJncmVwcj0ndG8gNjYnLCBvZmZzZXQ9MTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xNiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0xOSwgc3RhcnRzX2xpbmU9NCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTIyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0yNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0yOSwgc3RhcnRzX2xpbmU9NSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MiwgYXJndmFsPTQsIGFyZ3JlcHI9JzQnLCBvZmZzZXQ9MzIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTAsIGFyZ3ZhbD0nPCcsIGFyZ3JlcHI9JzwnLCBvZmZzZXQ9MzUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz00NywgYXJndmFsPTQ3LCBhcmdyZXByPScnLCBvZmZzZXQ9MzgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTEzLCBhcmd2YWw9MTMsIGFyZ3JlcHI9JycsIG9mZnNldD00MSwgc3RhcnRzX2xpbmU9NiwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfRk9SV0FSRCcsIG9wY29kZT0xMTAsIGFyZz0wLCBhcmd2YWw9NDcsIGFyZ3JlcHI9J3RvIDQ3Jywgb2Zmc2V0PTQ0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9NDcsIHN0YXJ0c19saW5lPTcsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MywgYXJndmFsPTYsIGFyZ3JlcHI9JzYnLCBvZmZzZXQ9NTAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTQsIGFyZ3ZhbD0nPicsIGFyZ3JlcHI9Jz4nLCBvZmZzZXQ9NTMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NTYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdCUkVBS19MT09QJywgb3Bjb2RlPTgwLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD01OSwgc3RhcnRzX2xpbmU9OCwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfQUJTT0xVVEUnLCBvcGNvZGU9MTEzLCBhcmc9MTMsIGFyZ3ZhbD0xMywgYXJncmVwcj0nJywgb2Zmc2V0PTYwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz0xMywgYXJndmFsPTEzLCBhcmdyZXByPScnLCBvZmZzZXQ9NjMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTY2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0xLCBhcmd2YWw9J3ByaW50JywgYXJncmVwcj0ncHJpbnQnLCBvZmZzZXQ9NjcsIHN0YXJ0c19saW5lPTEwLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz00LCBhcmd2YWw9J0kgY2FuIGhheiBlbHNlIGNsYXVzZT8nLCBhcmdyZXByPSInSSBjYW4gaGF6IGVsc2UgY2xhdXNlPyciLCBvZmZzZXQ9NzAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTczLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD03Niwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX0xPT1AnLCBvcGNvZGU9MTIwLCBhcmc9NzQsIGFyZ3ZhbD0xNTQsIGFyZ3JlcHI9J3RvIDE1NCcsIG9mZnNldD03Nywgc3RhcnRzX2xpbmU9MTEsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfRkFTVCcsIG9wY29kZT0xMjQsIGFyZz0wLCBhcmd2YWw9J2knLCBhcmdyZXByPSdpJywgb2Zmc2V0PTgwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfSlVNUF9JRl9GQUxTRScsIG9wY29kZT0xMTQsIGFyZz0xNDMsIGFyZ3ZhbD0xNDMsIGFyZ3JlcHI9JycsIG9mZnNldD04Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD04Niwgc3RhcnRzX2xpbmU9MTIsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD04OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0NBTExfRlVOQ1RJT04nLCBvcGNvZGU9MTMxLCBhcmc9MSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEgcG9zaXRpb25hbCwgMCBrZXl3b3JkIHBhaXInLCBvZmZzZXQ9OTIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTk1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9OTYsIHN0YXJ0c19saW5lPTEzLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz01LCBhcmd2YWw9MSwgYXJncmVwcj0nMScsIG9mZnNldD05OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0lOUExBQ0VfU1VCVFJBQ1QnLCBvcGNvZGU9NTYsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEwMiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMDMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0ZBU1QnLCBvcGNvZGU9MTI0LCBhcmc9MCwgYXJndmFsPSdpJywgYXJncmVwcj0naScsIG9mZnNldD0xMDYsIHN0YXJ0c19saW5lPTE0LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0zLCBhcmd2YWw9NiwgYXJncmVwcj0nNicsIG9mZnNldD0xMDksIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTQsIGFyZ3ZhbD0nPicsIGFyZ3JlcHI9Jz4nLCBvZmZzZXQ9MTEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTI0LCBhcmd2YWw9MTI0LCBhcmdyZXByPScnLCBvZmZzZXQ9MTE1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9BQlNPTFVURScsIG9wY29kZT0xMTMsIGFyZz04MCwgYXJndmFsPTgwLCBhcmdyZXByPScnLCBvZmZzZXQ9MTE4LCBzdGFydHNfbGluZT0xNSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0pVTVBfRk9SV0FSRCcsIG9wY29kZT0xMTAsIGFyZz0wLCBhcmd2YWw9MTI0LCBhcmdyZXByPSd0byAxMjQnLCBvZmZzZXQ9MTIxLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MTI0LCBzdGFydHNfbGluZT0xNiwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0yLCBhcmd2YWw9NCwgYXJncmVwcj0nNCcsIG9mZnNldD0xMjcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDT01QQVJFX09QJywgb3Bjb2RlPTEwNywgYXJnPTAsIGFyZ3ZhbD0nPCcsIGFyZ3JlcHI9JzwnLCBvZmZzZXQ9MTMwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9ODAsIGFyZ3ZhbD04MCwgYXJncmVwcj0nJywgb2Zmc2V0PTEzMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0JSRUFLX0xPT1AnLCBvcGNvZGU9ODAsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTEzNiwgc3RhcnRzX2xpbmU9MTcsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xMzcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdKVU1QX0FCU09MVVRFJywgb3Bjb2RlPTExMywgYXJnPTgwLCBhcmd2YWw9ODAsIGFyZ3JlcHI9JycsIG9mZnNldD0xNDAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfQkxPQ0snLCBvcGNvZGU9ODcsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE0Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE0NCwgc3RhcnRzX2xpbmU9MTksIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTYsIGFyZ3ZhbD0nV2hvIGxldCBsb2xjYXR6IGludG8gdGhpcyB0ZXN0IHN1aXRlPycsIGFyZ3JlcHI9IidXaG8gbGV0IGxvbGNhdHogaW50byB0aGlzIHRlc3Qgc3VpdGU/JyIsIG9mZnNldD0xNDcsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTE1MCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTUzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfRklOQUxMWScsIG9wY29kZT0xMjIsIGFyZz03MiwgYXJndmFsPTIyOSwgYXJncmVwcj0ndG8gMjI5Jywgb2Zmc2V0PTE1NCwgc3RhcnRzX2xpbmU9MjAsIGlzX2p1bXBfdGFyZ2V0PVRydWUpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NFVFVQX0VYQ0VQVCcsIG9wY29kZT0xMjEsIGFyZz0xMiwgYXJndmFsPTE3MiwgYXJncmVwcj0ndG8gMTcyJywgb2Zmc2V0PTE1Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NSwgYXJndmFsPTEsIGFyZ3JlcHI9JzEnLCBvZmZzZXQ9MTYwLCBzdGFydHNfbGluZT0yMSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9NywgYXJndmFsPTAsIGFyZ3JlcHI9JzAnLCBvZmZzZXQ9MTYzLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQklOQVJZX1RSVUVfRElWSURFJywgb3Bjb2RlPTI3LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNjYsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE2Nywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTY4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTI4LCBhcmd2YWw9MjAwLCBhcmdyZXByPSd0byAyMDAnLCBvZmZzZXQ9MTY5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRFVQX1RPUCcsIG9wY29kZT00LCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xNzIsIHN0YXJ0c19saW5lPTIyLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0dMT0JBTCcsIG9wY29kZT0xMTYsIGFyZz0yLCBhcmd2YWw9J1plcm9EaXZpc2lvbkVycm9yJywgYXJncmVwcj0nWmVyb0RpdmlzaW9uRXJyb3InLCBvZmZzZXQ9MTczLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ09NUEFSRV9PUCcsIG9wY29kZT0xMDcsIGFyZz0xMCwgYXJndmFsPSdleGNlcHRpb24gbWF0Y2gnLCBhcmdyZXByPSdleGNlcHRpb24gbWF0Y2gnLCBvZmZzZXQ9MTc2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0pVTVBfSUZfRkFMU0UnLCBvcGNvZGU9MTE0LCBhcmc9MTk5LCBhcmd2YWw9MTk5LCBhcmdyZXByPScnLCBvZmZzZXQ9MTc5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX1RPUCcsIG9wY29kZT0xLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0xODIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE4Mywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTg0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9HTE9CQUwnLCBvcGNvZGU9MTE2LCBhcmc9MSwgYXJndmFsPSdwcmludCcsIGFyZ3JlcHI9J3ByaW50Jywgb2Zmc2V0PTE4NSwgc3RhcnRzX2xpbmU9MjMsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTgsIGFyZ3ZhbD0nSGVyZSB3ZSBnbywgaGVyZSB3ZSBnbywgaGVyZSB3ZSBnby4uLicsIGFyZ3JlcHI9IidIZXJlIHdlIGdvLCBoZXJlIHdlIGdvLCBoZXJlIHdlIGdvLi4uJyIsIG9mZnNldD0xODgsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTE5MSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk0LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUE9QX0VYQ0VQVCcsIG9wY29kZT04OSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MTk1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nSlVNUF9GT1JXQVJEJywgb3Bjb2RlPTExMCwgYXJnPTI2LCBhcmd2YWw9MjI1LCBhcmdyZXByPSd0byAyMjUnLCBvZmZzZXQ9MTk2LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRU5EX0ZJTkFMTFknLCBvcGNvZGU9ODgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTE5OSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9GQVNUJywgb3Bjb2RlPTEyNCwgYXJnPTAsIGFyZ3ZhbD0naScsIGFyZ3JlcHI9J2knLCBvZmZzZXQ9MjAwLCBzdGFydHNfbGluZT0yNSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nU0VUVVBfV0lUSCcsIG9wY29kZT0xNDMsIGFyZz0xNywgYXJndmFsPTIyMywgYXJncmVwcj0ndG8gMjIzJywgb2Zmc2V0PTIwMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1NUT1JFX0ZBU1QnLCBvcGNvZGU9MTI1LCBhcmc9MSwgYXJndmFsPSdkb2RneScsIGFyZ3JlcHI9J2RvZGd5Jywgb2Zmc2V0PTIwNiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0yMDksIHN0YXJ0c19saW5lPTI2LCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz05LCBhcmd2YWw9J05ldmVyIHJlYWNoIHRoaXMnLCBhcmdyZXByPSInTmV2ZXIgcmVhY2ggdGhpcyciLCBvZmZzZXQ9MjEyLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nQ0FMTF9GVU5DVElPTicsIG9wY29kZT0xMzEsIGFyZz0xLCBhcmd2YWw9MSwgYXJncmVwcj0nMSBwb3NpdGlvbmFsLCAwIGtleXdvcmQgcGFpcicsIG9mZnNldD0yMTUsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdQT1BfVE9QJywgb3Bjb2RlPTEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIxOCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjE5LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nTE9BRF9DT05TVCcsIG9wY29kZT0xMDAsIGFyZz0wLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nTm9uZScsIG9mZnNldD0yMjAsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdXSVRIX0NMRUFOVVAnLCBvcGNvZGU9ODEsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIyMywgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9VHJ1ZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRU5EX0ZJTkFMTFknLCBvcGNvZGU9ODgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIyNCwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9CTE9DSycsIG9wY29kZT04NywgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjI1LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTAsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPSdOb25lJywgb2Zmc2V0PTIyNiwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfR0xPQkFMJywgb3Bjb2RlPTExNiwgYXJnPTEsIGFyZ3ZhbD0ncHJpbnQnLCBhcmdyZXByPSdwcmludCcsIG9mZnNldD0yMjksIHN0YXJ0c19saW5lPTI4LCBpc19qdW1wX3RhcmdldD1UcnVlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdMT0FEX0NPTlNUJywgb3Bjb2RlPTEwMCwgYXJnPTEwLCBhcmd2YWw9Ik9LLCBub3cgd2UncmUgZG9uZSIsIGFyZ3JlcHI9JyJPSywgbm93IHdlXCdyZSBkb25lIicsIG9mZnNldD0yMzIsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKKyAgSW5zdHJ1Y3Rpb24ob3BuYW1lPSdDQUxMX0ZVTkNUSU9OJywgb3Bjb2RlPTEzMSwgYXJnPTEsIGFyZ3ZhbD0xLCBhcmdyZXByPScxIHBvc2l0aW9uYWwsIDAga2V5d29yZCBwYWlyJywgb2Zmc2V0PTIzNSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J1BPUF9UT1AnLCBvcGNvZGU9MSwgYXJnPU5vbmUsIGFyZ3ZhbD1Ob25lLCBhcmdyZXByPScnLCBvZmZzZXQ9MjM4LCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nRU5EX0ZJTkFMTFknLCBvcGNvZGU9ODgsIGFyZz1Ob25lLCBhcmd2YWw9Tm9uZSwgYXJncmVwcj0nJywgb2Zmc2V0PTIzOSwgc3RhcnRzX2xpbmU9Tm9uZSwgaXNfanVtcF90YXJnZXQ9RmFsc2UpLAorICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MjQwLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUkVUVVJOX1ZBTFVFJywgb3Bjb2RlPTgzLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0yNDMsIHN0YXJ0c19saW5lPU5vbmUsIGlzX2p1bXBfdGFyZ2V0PUZhbHNlKSwKK10KKworIyBPbmUgbGFzdCBwaWVjZSBvZiBpbnNwZWN0IGZvZGRlciB0byBjaGVjayB0aGUgZGVmYXVsdCBsaW5lIG51bWJlciBoYW5kbGluZworZGVmIHNpbXBsZSgpOiBwYXNzCitleHBlY3RlZF9vcGluZm9fc2ltcGxlID0gWworICBJbnN0cnVjdGlvbihvcG5hbWU9J0xPQURfQ09OU1QnLCBvcGNvZGU9MTAwLCBhcmc9MCwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9J05vbmUnLCBvZmZzZXQ9MCwgc3RhcnRzX2xpbmU9c2ltcGxlLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vLCBpc19qdW1wX3RhcmdldD1GYWxzZSksCisgIEluc3RydWN0aW9uKG9wbmFtZT0nUkVUVVJOX1ZBTFVFJywgb3Bjb2RlPTgzLCBhcmc9Tm9uZSwgYXJndmFsPU5vbmUsIGFyZ3JlcHI9JycsIG9mZnNldD0zLCBzdGFydHNfbGluZT1Ob25lLCBpc19qdW1wX3RhcmdldD1GYWxzZSkKK10KKworCitjbGFzcyBJbnN0cnVjdGlvblRlc3RzKEJ5dGVjb2RlVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9maXJzdF9saW5lKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhzaW1wbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY3R1YWwpLCBleHBlY3RlZF9vcGluZm9fc2ltcGxlKQorCisgICAgZGVmIHRlc3RfZmlyc3RfbGluZV9zZXRfdG9fTm9uZShzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoc2ltcGxlLCBmaXJzdF9saW5lPU5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY3R1YWwpLCBleHBlY3RlZF9vcGluZm9fc2ltcGxlKQorCisgICAgZGVmIHRlc3Rfb3V0ZXIoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKG91dGVyLCBmaXJzdF9saW5lPWV4cGVjdGVkX291dGVyX2xpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY3R1YWwpLCBleHBlY3RlZF9vcGluZm9fb3V0ZXIpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWQoc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCk6CisgICAgICAgICAgICBmID0gb3V0ZXIoKQorICAgICAgICBhY3R1YWwgPSBkaXMuZ2V0X2luc3RydWN0aW9ucyhmLCBmaXJzdF9saW5lPWV4cGVjdGVkX2ZfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19mKQorCisgICAgZGVmIHRlc3RfZG91Ymx5X25lc3RlZChzZWxmKToKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAgICAgICAgIGlubmVyID0gb3V0ZXIoKSgpCisgICAgICAgIGFjdHVhbCA9IGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGlubmVyLCBmaXJzdF9saW5lPWV4cGVjdGVkX2lubmVyX2xpbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChhY3R1YWwpLCBleHBlY3RlZF9vcGluZm9faW5uZXIpCisKKyAgICBkZWYgdGVzdF9qdW1weShzZWxmKToKKyAgICAgICAgYWN0dWFsID0gZGlzLmdldF9pbnN0cnVjdGlvbnMoanVtcHksIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfanVtcHlfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19qdW1weSkKKworIyBnZXRfaW5zdHJ1Y3Rpb25zIGhhcyBpdHMgb3duIHRlc3RzIGFib3ZlLCBzbyBjYW4gcmVseSBvbiBpdCB0byB2YWxpZGF0ZQorIyB0aGUgb2JqZWN0IG9yaWVudGVkIEFQSQorY2xhc3MgQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW5zdGFudGlhdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IHdpdGggZnVuY3Rpb24sIG1ldGhvZCwgY29kZSBzdHJpbmcgYW5kIGNvZGUgb2JqZWN0CisgICAgICAgIGZvciBvYmogaW4gW19mLCBfQygxKS5fX2luaXRfXywgImE9MSIsIF9mLl9fY29kZV9fXToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmopOgorICAgICAgICAgICAgICAgIGIgPSBkaXMuQnl0ZWNvZGUob2JqKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiLmNvZGVvYmosIHR5cGVzLkNvZGVUeXBlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZGlzLkJ5dGVjb2RlLCBvYmplY3QoKSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdGlvbihzZWxmKToKKyAgICAgICAgZm9yIG9iaiBpbiBbX2YsIF9DKDEpLl9faW5pdF9fLCAiYT0xIiwgX2YuX19jb2RlX19dOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaik6CisgICAgICAgICAgICAgICAgdmlhX29iamVjdCA9IGxpc3QoZGlzLkJ5dGVjb2RlKG9iaikpCisgICAgICAgICAgICAgICAgdmlhX2dlbmVyYXRvciA9IGxpc3QoZGlzLmdldF9pbnN0cnVjdGlvbnMob2JqKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZpYV9vYmplY3QsIHZpYV9nZW5lcmF0b3IpCisKKyAgICBkZWYgdGVzdF9leHBsaWNpdF9maXJzdF9saW5lKHNlbGYpOgorICAgICAgICBhY3R1YWwgPSBkaXMuQnl0ZWNvZGUob3V0ZXIsIGZpcnN0X2xpbmU9ZXhwZWN0ZWRfb3V0ZXJfbGluZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGFjdHVhbCksIGV4cGVjdGVkX29waW5mb19vdXRlcikKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9saW5lX2luX2Rpc2Fzc2VtYmx5KHNlbGYpOgorICAgICAgICAjIFVzZSB0aGUgbGluZSBpbiB0aGUgc291cmNlIGNvZGUKKyAgICAgICAgYWN0dWFsID0gZGlzLkJ5dGVjb2RlKHNpbXBsZSkuZGlzKClbOjNdCisgICAgICAgIGV4cGVjdGVkID0gIns6PjN9Ii5mb3JtYXQoc2ltcGxlLl9fY29kZV9fLmNvX2ZpcnN0bGluZW5vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICMgVXNlIGFuIGV4cGxpY2l0IGZpcnN0IGxpbmUgbnVtYmVyCisgICAgICAgIGFjdHVhbCA9IGRpcy5CeXRlY29kZShzaW1wbGUsIGZpcnN0X2xpbmU9MzUwKS5kaXMoKVs6M10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsICIzNTAiKQorCisgICAgZGVmIHRlc3RfaW5mbyhzZWxmKToKKyAgICAgICAgc2VsZi5tYXhEaWZmID0gMTAwMAorICAgICAgICBmb3IgeCwgZXhwZWN0ZWQgaW4gQ29kZUluZm9UZXN0cy50ZXN0X3BhaXJzOgorICAgICAgICAgICAgYiA9IGRpcy5CeXRlY29kZSh4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleChiLmluZm8oKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9kaXNhc3NlbWJsZWQoc2VsZik6CisgICAgICAgIGFjdHVhbCA9IGRpcy5CeXRlY29kZShfZikuZGlzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGRpc19mKQorCisgICAgZGVmIHRlc3RfZnJvbV90cmFjZWJhY2soc2VsZik6CisgICAgICAgIHRiID0gZ2V0X3RiKCkKKyAgICAgICAgYiA9IGRpcy5CeXRlY29kZS5mcm9tX3RyYWNlYmFjayh0YikKKyAgICAgICAgd2hpbGUgdGIudGJfbmV4dDogdGIgPSB0Yi50Yl9uZXh0CisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmN1cnJlbnRfb2Zmc2V0LCB0Yi50Yl9sYXN0aSkKKworICAgIGRlZiB0ZXN0X2Zyb21fdHJhY2ViYWNrX2RpcyhzZWxmKToKKyAgICAgICAgdGIgPSBnZXRfdGIoKQorICAgICAgICBiID0gZGlzLkJ5dGVjb2RlLmZyb21fdHJhY2ViYWNrKHRiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZGlzKCksIGRpc190cmFjZWJhY2spCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3Rlc3QucHkKaW5kZXggODYyNTljMy4uOTI5MmQ5MiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9kb2N0ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZG9jdGVzdC5weQpAQCAtNDA5LDcgKzQwOSw4IEBACiAKICIiIgogCi1kZWYgdGVzdF9Eb2NUZXN0RmluZGVyKCk6IHIiIiIKK2NsYXNzIHRlc3RfRG9jVGVzdEZpbmRlcjoKKyAgICBkZWYgYmFzaWNzKCk6IHIiIiIKIFVuaXQgdGVzdHMgZm9yIHRoZSBgRG9jVGVzdEZpbmRlcmAgY2xhc3MuCiAKIERvY1Rlc3RGaW5kZXIgaXMgdXNlZCB0byBleHRyYWN0IERvY1Rlc3RzIGZyb20gYW4gb2JqZWN0J3MgZG9jc3RyaW5nCkBAIC02NDYsNiArNjQ3LDM5IEBACiAgICAgWzEsIDksIDEyXQogIiIiCiAKKyAgICBpZiBpbnQuX19kb2NfXzogIyBzaW1wbGUgY2hlY2sgZm9yIC0td2l0aG91dC1kb2Mtc3RyaW5ncywgc2tpcCBpZiBsYWNraW5nCisgICAgICAgIGRlZiBub25fUHl0aG9uX21vZHVsZXMoKTogciIiIgorCitGaW5kaW5nIERvY3Rlc3RzIGluIE1vZHVsZXMgTm90IFdyaXR0ZW4gaW4gUHl0aG9uCit+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CitEb2NUZXN0RmluZGVyIGNhbiBhbHNvIGZpbmQgZG9jdGVzdHMgaW4gbW9zdCBtb2R1bGVzIG5vdCB3cml0dGVuIGluIFB5dGhvbi4KK1dlJ2xsIHVzZSBidWlsdGlucyBhcyBhbiBleGFtcGxlLCBzaW5jZSBpdCBhbG1vc3QgY2VydGFpbmx5IGlzbid0IHdyaXR0ZW4gaW4KK3BsYWluIG9sJyBQeXRob24gYW5kIGlzIGd1YXJhbnRlZWQgdG8gYmUgYXZhaWxhYmxlLgorCisgICAgPj4+IGltcG9ydCBidWlsdGlucworICAgID4+PiB0ZXN0cyA9IGRvY3Rlc3QuRG9jVGVzdEZpbmRlcigpLmZpbmQoYnVpbHRpbnMpCisgICAgPj4+IDc5MCA8IGxlbih0ZXN0cykgPCA4MDAgIyBhcHByb3hpbWF0ZSBudW1iZXIgb2Ygb2JqZWN0cyB3aXRoIGRvY3N0cmluZ3MKKyAgICBUcnVlCisgICAgPj4+IHJlYWxfdGVzdHMgPSBbdCBmb3IgdCBpbiB0ZXN0cyBpZiBsZW4odC5leGFtcGxlcykgPiAwXQorICAgID4+PiBsZW4ocmVhbF90ZXN0cykgIyBvYmplY3RzIHRoYXQgYWN0dWFsbHkgaGF2ZSBkb2N0ZXN0cworICAgIDgKKyAgICA+Pj4gZm9yIHQgaW4gcmVhbF90ZXN0czoKKyAgICAuLi4gICAgIHByaW50KCd7fSAge30nLmZvcm1hdChsZW4odC5leGFtcGxlcyksIHQubmFtZSkpCisgICAgLi4uCisgICAgMSAgYnVpbHRpbnMuYmluCisgICAgMyAgYnVpbHRpbnMuZmxvYXQuYXNfaW50ZWdlcl9yYXRpbworICAgIDIgIGJ1aWx0aW5zLmZsb2F0LmZyb21oZXgKKyAgICAyICBidWlsdGlucy5mbG9hdC5oZXgKKyAgICAxICBidWlsdGlucy5oZXgKKyAgICAxICBidWlsdGlucy5pbnQKKyAgICAyICBidWlsdGlucy5pbnQuYml0X2xlbmd0aAorICAgIDEgIGJ1aWx0aW5zLm9jdAorCitOb3RlIGhlcmUgdGhhdCAnYmluJywgJ29jdCcsIGFuZCAnaGV4JyBhcmUgZnVuY3Rpb25zOyAnZmxvYXQuYXNfaW50ZWdlcl9yYXRpbycsCisnZmxvYXQuaGV4JywgYW5kICdpbnQuYml0X2xlbmd0aCcgYXJlIG1ldGhvZHM7ICdmbG9hdC5mcm9taGV4JyBpcyBhIGNsYXNzbWV0aG9kLAorYW5kICdpbnQnIGlzIGEgdHlwZS4KKyIiIgorCiBkZWYgdGVzdF9Eb2NUZXN0UGFyc2VyKCk6IHIiIiIKIFVuaXQgdGVzdHMgZm9yIHRoZSBgRG9jVGVzdFBhcnNlcmAgY2xhc3MuCiAKQEAgLTE0MzYsOCArMTQ3MCw0MCBAQAogICAgICAgICAyCiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTMsIGF0dGVtcHRlZD01KQogCi1Gb3IgdGhlIHB1cnBvc2VzIG9mIFJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUsIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucwotY291bnQgYXMgZmFpbHVyZXM6CitUaGUgRkFJTF9GQVNUIGZsYWcgY2F1c2VzIHRoZSBydW5uZXIgdG8gZXhpdCBhZnRlciB0aGUgZmlyc3QgZmFpbGluZyBleGFtcGxlLAorc28gc3Vic2VxdWVudCBleGFtcGxlcyBhcmUgbm90IGV2ZW4gYXR0ZW1wdGVkOgorCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5GQUlMX0ZBU1QKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCgyKSAjIGZpcnN0IGZhaWx1cmUKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgMjAwCisgICAgR290OgorICAgICAgICAyCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCitTcGVjaWZ5aW5nIGJvdGggRkFJTF9GQVNUIGFuZCBSRVBPUlRfT05MWV9GSVJTVF9GQUlMVVJFIGlzIGVxdWl2YWxlbnQgdG8KK0ZBSUxfRkFTVCBvbmx5OgorCisgICAgPj4+IGZsYWdzID0gZG9jdGVzdC5GQUlMX0ZBU1QgfCBkb2N0ZXN0LlJFUE9SVF9PTkxZX0ZJUlNUX0ZBSUxVUkUKKyAgICA+Pj4gZG9jdGVzdC5Eb2NUZXN0UnVubmVyKHZlcmJvc2U9RmFsc2UsIG9wdGlvbmZsYWdzPWZsYWdzKS5ydW4odGVzdCkKKyAgICAuLi4gIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAuLi4sIGxpbmUgNSwgaW4gZgorICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICBwcmludCgyKSAjIGZpcnN0IGZhaWx1cmUKKyAgICBFeHBlY3RlZDoKKyAgICAgICAgMjAwCisgICAgR290OgorICAgICAgICAyCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTEsIGF0dGVtcHRlZD0yKQorCitGb3IgdGhlIHB1cnBvc2VzIG9mIGJvdGggUkVQT1JUX09OTFlfRklSU1RfRkFJTFVSRSBhbmQgRkFJTF9GQVNULCB1bmV4cGVjdGVkCitleGNlcHRpb25zIGNvdW50IGFzIGZhaWx1cmVzOgogCiAgICAgPj4+IGRlZiBmKHgpOgogICAgIC4uLiAgICAgcicnJwpAQCAtMTQ2NCw2ICsxNTMwLDE3IEBACiAgICAgICAgIC4uLgogICAgICAgICBWYWx1ZUVycm9yOiAyCiAgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTMsIGF0dGVtcHRlZD01KQorICAgID4+PiBmbGFncyA9IGRvY3Rlc3QuRkFJTF9GQVNUCisgICAgPj4+IGRvY3Rlc3QuRG9jVGVzdFJ1bm5lcih2ZXJib3NlPUZhbHNlLCBvcHRpb25mbGFncz1mbGFncykucnVuKHRlc3QpCisgICAgLi4uICMgZG9jdGVzdDogK0VMTElQU0lTCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgLi4uLCBsaW5lIDUsIGluIGYKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigyKSAjIGZpcnN0IGZhaWx1cmUKKyAgICBFeGNlcHRpb24gcmFpc2VkOgorICAgICAgICAuLi4KKyAgICAgICAgVmFsdWVFcnJvcjogMgorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MikKIAogTmV3IG9wdGlvbiBmbGFncyBjYW4gYWxzbyBiZSByZWdpc3RlcmVkLCB2aWEgcmVnaXN0ZXJfb3B0aW9uZmxhZygpLiAgSGVyZQogd2UgcmVhY2ggaW50byBkb2N0ZXN0J3MgaW50ZXJuYWxzIGEgYml0LgpAQCAtMjA5Myw3ICsyMTcwLDcgQEAKICAgICAgICAgIC4uLgogICAgICAgICAgQXR0cmlidXRlRXJyb3I6ICdtb2R1bGUnIG9iamVjdCBoYXMgbm8gYXR0cmlidXRlICdzaWxseVNldHVwJwogCi0gICAgICAgVGhlIHNldFVwIGFuZCB0ZWFyRG93biBmdW50aW9ucyBhcmUgcGFzc2VkIHRlc3Qgb2JqZWN0cy4gSGVyZQorICAgICAgIFRoZSBzZXRVcCBhbmQgdGVhckRvd24gZnVuY3Rpb25zIGFyZSBwYXNzZWQgdGVzdCBvYmplY3RzLiBIZXJlCiAgICAgICAgd2UnbGwgdXNlIHRoZSBzZXRVcCBmdW5jdGlvbiB0byBzdXBwbHkgdGhlIG1pc3NpbmcgdmFyaWFibGUgeToKIAogICAgICAgICAgPj4+IGRlZiBzZXRVcCh0ZXN0KToKQEAgLTIyMzksNyArMjMxNiw3IEBACiAgICAgICAgICAuLi4KICAgICAgICAgIEF0dHJpYnV0ZUVycm9yOiAnbW9kdWxlJyBvYmplY3QgaGFzIG5vIGF0dHJpYnV0ZSAnc2lsbHlTZXR1cCcKIAotICAgICAgIFRoZSBzZXRVcCBhbmQgdGVhckRvd24gZnVudGlvbnMgYXJlIHBhc3NlZCB0ZXN0IG9iamVjdHMuCisgICAgICAgVGhlIHNldFVwIGFuZCB0ZWFyRG93biBmdW5jdGlvbnMgYXJlIHBhc3NlZCB0ZXN0IG9iamVjdHMuCiAgICAgICAgSGVyZSwgd2UnbGwgdXNlIGEgc2V0VXAgZnVuY3Rpb24gdG8gc2V0IHRoZSBmYXZvcml0ZSBjb2xvciBpbgogICAgICAgIHRlc3RfZG9jdGVzdC50eHQ6CiAKQEAgLTI1MzYsNiArMjYxMywzNiBAQAogICAgID4+PiBzeXMuYXJndiA9IHNhdmVfYXJndgogIiIiCiAKK2RlZiB0ZXN0X2xpbmVlbmRpbmdzKCk6IHIiIiIKKypuaXggc3lzdGVtcyB1c2UgXG4gbGluZSBlbmRpbmdzLCB3aGlsZSBXaW5kb3dzIHN5c3RlbXMgdXNlIFxyXG4uICBQeXRob24KK2hhbmRsZXMgdGhpcyB1c2luZyB1bml2ZXJzYWwgbmV3bGluZSBtb2RlIGZvciByZWFkaW5nIGZpbGVzLiAgTGV0J3MgbWFrZQorc3VyZSBkb2N0ZXN0IGRvZXMgc28gKGlzc3VlIDg0NzMpIGJ5IGNyZWF0aW5nIHRlbXBvcmFyeSB0ZXN0IGZpbGVzIHVzaW5nIGVhY2gKK29mIHRoZSB0d28gbGluZSBkaXNjaXBsaW5lcy4gIE9uZSBvZiB0aGUgdHdvIHdpbGwgYmUgdGhlICJ3cm9uZyIgb25lIGZvciB0aGUKK3BsYXRmb3JtIHRoZSB0ZXN0IGlzIHJ1biBvbi4KKworV2luZG93cyBsaW5lIGVuZGluZ3MgZmlyc3Q6CisKKyAgICA+Pj4gaW1wb3J0IHRlbXBmaWxlLCBvcworICAgID4+PiBmbiA9IHRlbXBmaWxlLm1rdGVtcCgpCisgICAgPj4+IHdpdGggb3BlbihmbiwgJ3diJykgYXMgZjoKKyAgICAuLi4gICAgZi53cml0ZShiJ1Rlc3Q6XHJcblxyXG4gID4+PiB4ID0gMSArIDFcclxuXHJcbkRvbmUuXHJcbicpCisgICAgMzUKKyAgICA+Pj4gZG9jdGVzdC50ZXN0ZmlsZShmbiwgRmFsc2UpCisgICAgVGVzdFJlc3VsdHMoZmFpbGVkPTAsIGF0dGVtcHRlZD0xKQorICAgID4+PiBvcy5yZW1vdmUoZm4pCisKK0FuZCBub3cgKm5peCBsaW5lIGVuZGluZ3M6CisKKyAgICA+Pj4gZm4gPSB0ZW1wZmlsZS5ta3RlbXAoKQorICAgID4+PiB3aXRoIG9wZW4oZm4sICd3YicpIGFzIGY6CisgICAgLi4uICAgICBmLndyaXRlKGInVGVzdDpcblxuICA+Pj4geCA9IDEgKyAxXG5cbkRvbmUuXG4nKQorICAgIDMwCisgICAgPj4+IGRvY3Rlc3QudGVzdGZpbGUoZm4sIEZhbHNlKQorICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0wLCBhdHRlbXB0ZWQ9MSkKKyAgICA+Pj4gb3MucmVtb3ZlKGZuKQorCisiIiIKKwogZGVmIHRlc3RfdGVzdG1vZCgpOiByIiIiCiBUZXN0cyBmb3IgdGhlIHRlc3Rtb2QgZnVuY3Rpb24uICBNb3JlIG1pZ2h0IGJlIHVzZWZ1bCwgYnV0IGZvciBub3cgd2UncmUganVzdAogdGVzdGluZyB0aGUgY2FzZSByYWlzZWQgYnkgSXNzdWUgNjE5NSwgd2hlcmUgdHJ5aW5nIHRvIGRvY3Rlc3QgYSBDIG1vZHVsZSB3b3VsZApAQCAtMjU4MCw2ICsyNjg3LDI0MCBAQAogICAgIFRlc3RSZXN1bHRzKGZhaWxlZD0xLCBhdHRlbXB0ZWQ9MSkKICAgICAiIiIKIAorZGVmIHRlc3RfQ0xJKCk6IHIiIiIKK1RoZSBkb2N0ZXN0IG1vZHVsZSBjYW4gYmUgdXNlZCB0byBydW4gZG9jdGVzdHMgYWdhaW5zdCBhbiBhcmJpdHJhcnkgZmlsZS4KK1RoZXNlIHRlc3RzIHRlc3QgdGhpcyBDTEkgZnVuY3Rpb25hbGl0eS4KKworV2UnbGwgdXNlIHRoZSBzdXBwb3J0IG1vZHVsZSdzIHNjcmlwdF9oZWxwZXJzIGZvciB0aGlzLCBhbmQgd3JpdGUgYSB0ZXN0IGZpbGVzCit0byBhIHRlbXAgZGlyIHRvIHJ1biB0aGUgY29tbWFuZCBhZ2FpbnN0LiAgRHVlIHRvIGEgY3VycmVudCBsaW1pdGF0aW9uIGluCitzY3JpcHRfaGVscGVycywgdGhvdWdoLCB3ZSBuZWVkIGEgbGl0dGxlIHV0aWxpdHkgZnVuY3Rpb24gdG8gdHVybiB0aGUgcmV0dXJuZWQKK291dHB1dCBpbnRvIHNvbWV0aGluZyB3ZSBjYW4gZG9jdGVzdCBhZ2FpbnN0OgorCisgICAgPj4+IGRlZiBub3JtYWxpemUocyk6CisgICAgLi4uICAgICByZXR1cm4gJ1xuJy5qb2luKHMuZGVjb2RlKCkuc3BsaXRsaW5lcygpKQorCitOb3RlOiB3ZSBhbHNvIHBhc3MgVEVSTT0nJyB0byBhbGwgdGhlIGFzc2VydF9weXRob24gY2FsbHMgdG8gYXZvaWQgYSBidWcKK2luIHRoZSByZWFkbGluZSBsaWJyYXJ5IHRoYXQgaXMgdHJpZ2dlcmVkIGluIHRoZXNlIHRlc3RzIGJlY2F1c2Ugd2UgYXJlCitydW5uaW5nIHRoZW0gaW4gYSBuZXcgcHl0aG9uIHByb2Nlc3MuICBTZWU6CisKKyAgaHR0cDovL2xpc3RzLmdudS5vcmcvYXJjaGl2ZS9odG1sL2J1Zy1yZWFkbGluZS8yMDEzLTA2L21zZzAwMDAwLmh0bWwKKworV2l0aCB0aG9zZSBwcmVsaW1pbmFyaWVzIG91dCBvZiB0aGUgd2F5LCB3ZSdsbCBzdGFydCB3aXRoIGEgZmlsZSB3aXRoIHR3bworc2ltcGxlIHRlc3RzIGFuZCBubyBlcnJvcnMuICBXZSdsbCBydW4gYm90aCB0aGUgdW5hZG9ybmVkIGRvY3Rlc3QgY29tbWFuZCwgYW5kCit0aGUgdmVyYm9zZSB2ZXJzaW9uLCBhbmQgdGhlbiBjaGVjayB0aGUgb3V0cHV0OgorCisgICAgPj4+IGZyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlcgorICAgID4+PiB3aXRoIHNjcmlwdF9oZWxwZXIudGVtcF9kaXIoKSBhcyB0bXBkaXI6CisgICAgLi4uICAgICBmbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdteWZpbGUuZG9jJykKKyAgICAuLi4gICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBmOgorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdUaGlzIGlzIGEgdmVyeSBzaW1wbGUgdGVzdCBmaWxlLlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgPj4+IDEgKyAxXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICAyXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gImEiXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCIgICAnYSdcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1xuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnQW5kIHRoYXQgaXMgaXQuXG4nKQorICAgIC4uLiAgICAgcmMxLCBvdXQxLCBlcnIxID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKAorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsIGZuLCBURVJNPScnKQorICAgIC4uLiAgICAgcmMyLCBvdXQyLCBlcnIyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKAorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctdicsIGZuLCBURVJNPScnKQorCitXaXRoIG5vIGFyZ3VtZW50cyBhbmQgcGFzc2luZyB0ZXN0cywgd2Ugc2hvdWxkIGdldCBubyBvdXRwdXQ6CisKKyAgICA+Pj4gcmMxLCBvdXQxLCBlcnIxCisgICAgKDAsIGInJywgYicnKQorCitXaXRoIHRoZSB2ZXJib3NlIGZsYWcsIHdlIHNob3VsZCBzZWUgdGhlIHRlc3Qgb3V0cHV0LCBidXQgbm8gZXJyb3Igb3V0cHV0OgorCisgICAgPj4+IHJjMiwgZXJyMgorICAgICgwLCBiJycpCisgICAgPj4+IHByaW50KG5vcm1hbGl6ZShvdXQyKSkKKyAgICBUcnlpbmc6CisgICAgICAgIDEgKyAxCisgICAgRXhwZWN0aW5nOgorICAgICAgICAyCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhIgorICAgIEV4cGVjdGluZzoKKyAgICAgICAgJ2EnCisgICAgb2sKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgMiB0ZXN0cyBpbiBteWZpbGUuZG9jCisgICAgMiB0ZXN0cyBpbiAxIGl0ZW1zLgorICAgIDIgcGFzc2VkIGFuZCAwIGZhaWxlZC4KKyAgICBUZXN0IHBhc3NlZC4KKworTm93IHdlJ2xsIHdyaXRlIGEgY291cGxlIGZpbGVzLCBvbmUgd2l0aCB0aHJlZSB0ZXN0cywgdGhlIG90aGVyIGEgcHl0aG9uIG1vZHVsZQord2l0aCB0d28gdGVzdHMsIGJvdGggb2YgdGhlIGZpbGVzIGhhdmluZyAiZXJyb3JzIiBpbiB0aGUgdGVzdHMgdGhhdCBjYW4gYmUgbWFkZQorbm9uLWVycm9ycyBieSBhcHBseWluZyB0aGUgYXBwcm9wcmlhdGUgZG9jdGVzdCBvcHRpb25zIHRvIHRoZSBydW4gKEVMTElQU0lTIGluCit0aGUgZmlyc3QgZmlsZSwgTk9STUFMSVpFX1dISVRFU1BBQ0UgaW4gdGhlIHNlY29uZCkuICBUaGlzIGNvbWJpbmF0aW9uIHdpbGwKK2FsbG93IHRvIHRob3JvdWdobHkgdGVzdCB0aGUgLWYgYW5kIC1vIGZsYWdzLCBhcyB3ZWxsIGFzIHRoZSBkb2N0ZXN0IGNvbW1hbmQncworYWJpbGl0eSB0byBwcm9jZXNzIG1vcmUgdGhhbiBvbmUgZmlsZSBvbiB0aGUgY29tbWFuZCBsaW5lIGFuZCwgc2luY2UgdGhlIHNlY29uZAorZmlsZSBlbmRzIGluICcucHknLCBpdHMgaGFuZGxpbmcgb2YgcHl0aG9uIG1vZHVsZSBmaWxlcyAoYXMgb3Bwb3NlZCB0byBzdHJhaWdodAordGV4dCBmaWxlcykuCisKKyAgICA+Pj4gZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCisgICAgPj4+IHdpdGggc2NyaXB0X2hlbHBlci50ZW1wX2RpcigpIGFzIHRtcGRpcjoKKyAgICAuLi4gICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ215ZmlsZS5kb2MnKQorICAgIC4uLiAgICAgd2l0aCBvcGVuKGZuLCAndycpIGFzIGY6CisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ1RoaXMgaXMgYW5vdGhlciBzaW1wbGUgdGVzdCBmaWxlLlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgPj4+IDEgKyAxXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICAyXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICA+Pj4gImFiY2RlZiJcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoIiAgICdhLi4uZidcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgID4+PiAiYWprbWwiXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCIgICAnYS4uLmwnXG4iKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCdcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJ0FuZCB0aGF0IGlzIGl0LlxuJykKKyAgICAuLi4gICAgIGZuMiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdteWZpbGUyLnB5JykKKyAgICAuLi4gICAgIHdpdGggb3BlbihmbjIsICd3JykgYXMgZjoKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnZGVmIHRlc3RfZnVuYygpOlxuJykKKyAgICAuLi4gICAgICAgICBfID0gZi53cml0ZSgnICAgXCJcIlwiXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICBUaGlzIGlzIHNpbXBsZSBweXRob24gdGVzdCBmdW5jdGlvbi5cbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgICAgICA+Pj4gMSArIDFcbicpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgICAgICAyXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCcgICAgICAgPj4+ICJhYmMgICBkZWYiXG4nKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCIgICAgICAgJ2FiYyBkZWYnXG4iKQorICAgIC4uLiAgICAgICAgIF8gPSBmLndyaXRlKCJcbiIpCisgICAgLi4uICAgICAgICAgXyA9IGYud3JpdGUoJyAgIFwiXCJcIlxuJykKKyAgICAuLi4gICAgIGltcG9ydCBzaHV0aWwKKyAgICAuLi4gICAgIHJjMSwgb3V0MSwgZXJyMSA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsIGZuLCBmbjIsIFRFUk09JycpCisgICAgLi4uICAgICByYzIsIG91dDIsIGVycjIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ0VMTElQU0lTJywgZm4sIFRFUk09JycpCisgICAgLi4uICAgICByYzMsIG91dDMsIGVycjMgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy1vJywgJ0VMTElQU0lTJywKKyAgICAuLi4gICAgICAgICAgICAgJy1vJywgJ05PUk1BTElaRV9XSElURVNQQUNFJywgZm4sIGZuMiwgVEVSTT0nJykKKyAgICAuLi4gICAgIHJjNCwgb3V0NCwgZXJyNCA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctZicsIGZuLCBmbjIsIFRFUk09JycpCisgICAgLi4uICAgICByYzUsIG91dDUsIGVycjUgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soCisgICAgLi4uICAgICAgICAgICAgICctbScsICdkb2N0ZXN0JywgJy12JywgJy1vJywgJ0VMTElQU0lTJywKKyAgICAuLi4gICAgICAgICAgICAgJy1vJywgJ05PUk1BTElaRV9XSElURVNQQUNFJywgZm4sIGZuMiwgVEVSTT0nJykKKworT3VyIGZpcnN0IHRlc3QgcnVuIHdpbGwgc2hvdyB0aGUgZXJyb3JzIGZyb20gdGhlIGZpcnN0IGZpbGUgKGRvY3Rlc3Qgc3RvcHMgaWYgYQorZmlsZSBoYXMgZXJyb3JzKS4gIE5vdGUgdGhhdCBkb2N0ZXN0IHRlc3QtcnVuIGVycm9yIG91dHB1dCBhcHBlYXJzIG9uIHN0ZG91dCwKK25vdCBzdGRlcnI6CisKKyAgICA+Pj4gcmMxLCBlcnIxCisgICAgKDEsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKG91dDEpKSAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICBGaWxlICIuLi5teWZpbGUuZG9jIiwgbGluZSA0LCBpbiBteWZpbGUuZG9jCisgICAgRmFpbGVkIGV4YW1wbGU6CisgICAgICAgICJhYmNkZWYiCisgICAgRXhwZWN0ZWQ6CisgICAgICAgICdhLi4uZicKKyAgICBHb3Q6CisgICAgICAgICdhYmNkZWYnCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIEZpbGUgIi4uLm15ZmlsZS5kb2MiLCBsaW5lIDYsIGluIG15ZmlsZS5kb2MKKyAgICBGYWlsZWQgZXhhbXBsZToKKyAgICAgICAgImFqa21sIgorICAgIEV4cGVjdGVkOgorICAgICAgICAnYS4uLmwnCisgICAgR290OgorICAgICAgICAnYWprbWwnCisgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgIDEgaXRlbXMgaGFkIGZhaWx1cmVzOgorICAgICAgIDIgb2YgICAzIGluIG15ZmlsZS5kb2MKKyAgICAqKipUZXN0IEZhaWxlZCoqKiAyIGZhaWx1cmVzLgorCitXaXRoIC1vIEVMTElQU0lTIHNwZWNpZmllZCwgdGhlIHNlY29uZCBydW4sIGFnYWluc3QganVzdCB0aGUgZmlyc3QgZmlsZSwgc2hvdWxkCitwcm9kdWNlIG5vIGVycm9ycywgYW5kIHdpdGggLW8gTk9STUFMSVpFX1dISVRFU1BBQ0UgYWxzbyBzcGVjaWZpZWQsIG5laXRoZXIKK3Nob3VsZCB0aGUgdGhpcmQsIHdoaWNoIHJhbiBhZ2FpbnN0IGJvdGggZmlsZXM6CisKKyAgICA+Pj4gcmMyLCBvdXQyLCBlcnIyCisgICAgKDAsIGInJywgYicnKQorICAgID4+PiByYzMsIG91dDMsIGVycjMKKyAgICAoMCwgYicnLCBiJycpCisKK1RoZSBmb3VydGggcnVuIHVzZXMgRkFJTF9GQVNULCBzbyB3ZSBzaG91bGQgc2VlIG9ubHkgb25lIGVycm9yOgorCisgICAgPj4+IHJjNCwgZXJyNAorICAgICgxLCBiJycpCisgICAgPj4+IHByaW50KG5vcm1hbGl6ZShvdXQ0KSkgICAgICAgICAgICAgICAgIyBkb2N0ZXN0OiArRUxMSVBTSVMKKyAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgRmlsZSAiLi4ubXlmaWxlLmRvYyIsIGxpbmUgNCwgaW4gbXlmaWxlLmRvYworICAgIEZhaWxlZCBleGFtcGxlOgorICAgICAgICAiYWJjZGVmIgorICAgIEV4cGVjdGVkOgorICAgICAgICAnYS4uLmYnCisgICAgR290OgorICAgICAgICAnYWJjZGVmJworICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAxIGl0ZW1zIGhhZCBmYWlsdXJlczoKKyAgICAgICAxIG9mICAgMiBpbiBteWZpbGUuZG9jCisgICAgKioqVGVzdCBGYWlsZWQqKiogMSBmYWlsdXJlcy4KKworVGhlIGZpZnRoIHRlc3QgdXNlcyB2ZXJib3NlIHdpdGggdGhlIHR3byBvcHRpb25zLCBzbyB3ZSBzaG91bGQgZ2V0IHZlcmJvc2UKK3N1Y2Nlc3Mgb3V0cHV0IGZvciB0aGUgdGVzdHMgaW4gYm90aCBmaWxlczoKKworICAgID4+PiByYzUsIGVycjUKKyAgICAoMCwgYicnKQorICAgID4+PiBwcmludChub3JtYWxpemUob3V0NSkpCisgICAgVHJ5aW5nOgorICAgICAgICAxICsgMQorICAgIEV4cGVjdGluZzoKKyAgICAgICAgMgorICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICAiYWJjZGVmIgorICAgIEV4cGVjdGluZzoKKyAgICAgICAgJ2EuLi5mJworICAgIG9rCisgICAgVHJ5aW5nOgorICAgICAgICAiYWprbWwiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYS4uLmwnCisgICAgb2sKKyAgICAxIGl0ZW1zIHBhc3NlZCBhbGwgdGVzdHM6CisgICAgICAgMyB0ZXN0cyBpbiBteWZpbGUuZG9jCisgICAgMyB0ZXN0cyBpbiAxIGl0ZW1zLgorICAgIDMgcGFzc2VkIGFuZCAwIGZhaWxlZC4KKyAgICBUZXN0IHBhc3NlZC4KKyAgICBUcnlpbmc6CisgICAgICAgIDEgKyAxCisgICAgRXhwZWN0aW5nOgorICAgICAgICAyCisgICAgb2sKKyAgICBUcnlpbmc6CisgICAgICAgICJhYmMgICBkZWYiCisgICAgRXhwZWN0aW5nOgorICAgICAgICAnYWJjIGRlZicKKyAgICBvaworICAgIDEgaXRlbXMgaGFkIG5vIHRlc3RzOgorICAgICAgICBteWZpbGUyCisgICAgMSBpdGVtcyBwYXNzZWQgYWxsIHRlc3RzOgorICAgICAgIDIgdGVzdHMgaW4gbXlmaWxlMi50ZXN0X2Z1bmMKKyAgICAyIHRlc3RzIGluIDIgaXRlbXMuCisgICAgMiBwYXNzZWQgYW5kIDAgZmFpbGVkLgorICAgIFRlc3QgcGFzc2VkLgorCitXZSBzaG91bGQgYWxzbyBjaGVjayBzb21lIHR5cGljYWwgZXJyb3IgY2FzZXMuCisKK0ludmFsaWQgZmlsZSBuYW1lOgorCisgICAgPj4+IHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKAorICAgIC4uLiAgICAgICAgICctbScsICdkb2N0ZXN0JywgJ25vc3VjaGZpbGUnLCBURVJNPScnKQorICAgID4+PiByYywgb3V0CisgICAgKDEsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKGVycikpICAgICAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKKyAgICAgIC4uLgorICAgIEZpbGVOb3RGb3VuZEVycm9yOiBbRXJybm8gLi4uXSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5OiAnbm9zdWNoZmlsZScKKworSW52YWxpZCBkb2N0ZXN0IG9wdGlvbjoKKworICAgID4+PiByYywgb3V0LCBlcnIgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgKKyAgICAuLi4gICAgICAgICAnLW0nLCAnZG9jdGVzdCcsICctbycsICdub3N1Y2hvcHRpb24nLCBURVJNPScnKQorICAgID4+PiByYywgb3V0CisgICAgKDIsIGInJykKKyAgICA+Pj4gcHJpbnQobm9ybWFsaXplKGVycikpICAgICAgICAgICAgICAgICAgICAjIGRvY3Rlc3Q6ICtFTExJUFNJUworICAgIHVzYWdlLi4uaW52YWxpZC4uLm5vc3VjaG9wdGlvbi4uLgorCisiIiIKKwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgTWFpbgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9kb2N4bWxycGMucHkgYi9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQppbmRleCBjYjYzNjZjLi4wNjE2MWYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2RvY3htbHJwYy5weQpAQCAtMTAsNyArMTAsNyBAQAogUE9SVCA9IE5vbmUKIAogZGVmIG1ha2VfcmVxdWVzdF9hbmRfc2tpcElmKGNvbmRpdGlvbiwgcmVhc29uKToKLSAgICAjIElmIHdlIHNraXAgdGhlIHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBhIHJlcXVlc3QgYmVjYXVzZSB0aGUKKyAgICAjIElmIHdlIHNraXAgdGhlIHRlc3QsIHdlIGhhdmUgdG8gbWFrZSBhIHJlcXVlc3QgYmVjYXVzZQogICAgICMgdGhlIHNlcnZlciBjcmVhdGVkIGluIHNldFVwIGJsb2NrcyBleHBlY3Rpbmcgb25lIHRvIGNvbWUgaW4uCiAgICAgaWYgbm90IGNvbmRpdGlvbjoKICAgICAgICAgcmV0dXJuIGxhbWJkYSBmdW5jOiBmdW5jCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZHluYW1pY2NsYXNzYXR0cmlidXRlLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjNmEzOWIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2R5bmFtaWNjbGFzc2F0dHJpYnV0ZS5weQpAQCAtMCwwICsxLDMwNCBAQAorIyBUZXN0IGNhc2UgZm9yIER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorIyBtb3JlIHRlc3RzIGFyZSBpbiB0ZXN0X2Rlc2NyCisKK2ltcG9ydCBhYmMKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0eXBlcyBpbXBvcnQgRHluYW1pY0NsYXNzQXR0cmlidXRlCisKK2NsYXNzIFByb3BlcnR5QmFzZShFeGNlcHRpb24pOgorICAgIHBhc3MKKworY2xhc3MgUHJvcGVydHlHZXQoUHJvcGVydHlCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFByb3BlcnR5U2V0KFByb3BlcnR5QmFzZSk6CisgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eURlbChQcm9wZXJ0eUJhc2UpOgorICAgIHBhc3MKKworY2xhc3MgQmFzZUNsYXNzKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl9zcGFtID0gNQorCisgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJCYXNlQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYuX3NwYW0gPSB2YWx1ZQorCisgICAgQHNwYW0uZGVsZXRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5fc3BhbQorCitjbGFzcyBTdWJDbGFzcyhCYXNlQ2xhc3MpOgorCisgICAgc3BhbSA9IEJhc2VDbGFzcy5fX2RpY3RfX1snc3BhbSddCisKKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIiU3ViQ2xhc3MuZ2V0dGVyIiIiCisgICAgICAgIHJhaXNlIFByb3BlcnR5R2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5zZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHJhaXNlIFByb3BlcnR5U2V0KHNlbGYuX3NwYW0pCisKKyAgICBAc3BhbS5kZWxldGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgIHJhaXNlIFByb3BlcnR5RGVsKHNlbGYuX3NwYW0pCisKK2NsYXNzIFByb3BlcnR5RG9jQmFzZShvYmplY3QpOgorICAgIF9zcGFtID0gMQorICAgIGRlZiBfZ2V0X3NwYW0oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9zcGFtCisgICAgc3BhbSA9IER5bmFtaWNDbGFzc0F0dHJpYnV0ZShfZ2V0X3NwYW0sIGRvYz0ic3BhbSBzcGFtIHNwYW0iKQorCitjbGFzcyBQcm9wZXJ0eURvY1N1YihQcm9wZXJ0eURvY0Jhc2UpOgorICAgIHNwYW0gPSBQcm9wZXJ0eURvY0Jhc2UuX19kaWN0X19bJ3NwYW0nXQorICAgIEBzcGFtLmdldHRlcgorICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAiIiJUaGUgZGVjb3JhdG9yIGRvZXMgbm90IHVzZSB0aGlzIGRvYyBzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKworY2xhc3MgUHJvcGVydHlTdWJOZXdHZXR0ZXIoQmFzZUNsYXNzKToKKyAgICBzcGFtID0gQmFzZUNsYXNzLl9fZGljdF9fWydzcGFtJ10KKyAgICBAc3BhbS5nZXR0ZXIKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIibmV3IGRvY3N0cmluZyIiIgorICAgICAgICByZXR1cm4gNQorCitjbGFzcyBQcm9wZXJ0eU5ld0dldHRlcihvYmplY3QpOgorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgIiIib3JpZ2luYWwgZG9jc3RyaW5nIiIiCisgICAgICAgIHJldHVybiAxCisgICAgQHNwYW0uZ2V0dGVyCisgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICIiIm5ldyBkb2NzdHJpbmciIiIKKyAgICAgICAgcmV0dXJuIDgKKworY2xhc3MgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkobWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKKyAgICBARHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjb2xvcigpOgorICAgICAgICBwYXNzCisKK2NsYXNzIENsYXNzV2l0aFByb3BlcnR5QWJzdHJhY3RWaXJ0dWFsKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CisgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAorICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICBkZWYgY29sb3IoKToKKyAgICAgICAgcGFzcworCitjbGFzcyBQcm9wZXJ0eVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3JfYmFzZWNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBiYXNlID0gQmFzZUNsYXNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fc3BhbSwgNSkKKyAgICAgICAgYmFzZS5zcGFtID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDEwKQorICAgICAgICBkZWxhdHRyKGJhc2UsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKGJhc2UsICJzcGFtIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihiYXNlLCAiX3NwYW0iKSkKKyAgICAgICAgYmFzZS5zcGFtID0gMjAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLnNwYW0sIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX3NwYW0sIDIwKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTYyMAorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb3BlcnR5R2V0LCBnZXRhdHRyLCBzdWIsICJzcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUHJvcGVydHlTZXQsIHNldGF0dHIsIHN1YiwgInNwYW0iLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQcm9wZXJ0eURlbCwgZGVsYXR0ciwgc3ViLCAic3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9kZWNvcmF0b3Jfc3ViY2xhc3NfZG9jKHNlbGYpOgorICAgICAgICBzdWIgPSBTdWJDbGFzcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJTdWJDbGFzcy5nZXR0ZXIiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2Jhc2VjbGFzc19kb2Moc2VsZik6CisgICAgICAgIGJhc2UgPSBCYXNlQ2xhc3MoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhc2UuX19jbGFzc19fLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgIkJhc2VDbGFzcy5nZXR0ZXIiKQorCisgICAgZGVmIHRlc3RfcHJvcGVydHlfZGVjb3JhdG9yX2RvYyhzZWxmKToKKyAgICAgICAgYmFzZSA9IFByb3BlcnR5RG9jQmFzZSgpCisgICAgICAgIHN1YiA9IFByb3BlcnR5RG9jU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJzcGFtIHNwYW0gc3BhbSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9nZXR0ZXJfZG9jX292ZXJyaWRlKHNlbGYpOgorICAgICAgICBuZXdnZXR0ZXJzdWIgPSBQcm9wZXJ0eVN1Yk5ld0dldHRlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLnNwYW0sIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV3Z2V0dGVyc3ViLl9fY2xhc3NfXy5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sICJuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgbmV3Z2V0dGVyID0gUHJvcGVydHlOZXdHZXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5zcGFtLCA4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld2dldHRlci5fX2NsYXNzX18uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAibmV3IGRvY3N0cmluZyIpCisKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9fX2lzYWJzdHJhY3RtZXRob2RfX2Rlc2NyaXB0b3Ioc2VsZik6CisgICAgICAgIGZvciB2YWwgaW4gKFRydWUsIEZhbHNlLCBbXSwgWzFdLCAnJywgJzEnKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gdmFsCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoQy5fX2RpY3RfX1snZm9vJ10uX19pc2Fic3RyYWN0bWV0aG9kX18sIGJvb2wodmFsKSkKKworICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSdzIF9faXNhYnN0cmFjdG1ldGhvZF9fIGRlc2NyaXB0b3IgZG9lcyB0aGUKKyAgICAgICAgIyByaWdodCB0aGluZyB3aGVuIHByZXNlbnRlZCB3aXRoIGEgdmFsdWUgdGhhdCBmYWlscyB0cnV0aCB0ZXN0aW5nOgorICAgICAgICBjbGFzcyBOb3RCb29sKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCisgICAgICAgICAgICBfX2xlbl9fID0gX19ib29sX18KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgICAgICBkZWYgZm9vKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgZm9vLl9faXNhYnN0cmFjdG1ldGhvZF9fID0gTm90Qm9vbCgpCisgICAgICAgICAgICAgICAgZm9vID0gRHluYW1pY0NsYXNzQXR0cmlidXRlKGZvbykKKworICAgIGRlZiB0ZXN0X2Fic3RyYWN0X3ZpcnR1YWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQ2xhc3NXaXRoUHJvcGVydHlBYnN0cmFjdFZpcnR1YWwpCisgICAgICAgIGNsYXNzIEFQVihDbGFzc1dpdGhQcm9wZXJ0eUFic3RyYWN0VmlydHVhbCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgQVBWKQorICAgICAgICBjbGFzcyBBVlAoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEFWUCkKKyAgICAgICAgY2xhc3MgT2theTEoQ2xhc3NXaXRoQWJzdHJhY3RWaXJ0dWFsUHJvcGVydHkpOgorICAgICAgICAgICAgQER5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGNvbG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9jb2xvcgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuX2NvbG9yID0gJ2N5YW4nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgT2theTEuY29sb3IKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChPa2F5MSgpLmNvbG9yLCAnY3lhbicpCisgICAgICAgIGNsYXNzIE9rYXkyKENsYXNzV2l0aEFic3RyYWN0VmlydHVhbFByb3BlcnR5KToKKyAgICAgICAgICAgIEBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBjb2xvcihzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29sb3IKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLl9jb2xvciA9ICdtYWdlbnRhJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIE9rYXkyLmNvbG9yCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT2theTIoKS5jb2xvciwgJ21hZ2VudGEnKQorCisKKyMgSXNzdWUgNTg5MDogc3ViY2xhc3NlcyBvZiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgZG8gbm90IHByZXNlcnZlIG1ldGhvZCBfX2RvY19fIHN0cmluZ3MKK2NsYXNzIFByb3BlcnR5U3ViKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSIiIgorCitjbGFzcyBQcm9wZXJ0eVN1YlNsb3RzKER5bmFtaWNDbGFzc0F0dHJpYnV0ZSk6CisgICAgIiIiVGhpcyBpcyBhIHN1YmNsYXNzIG9mIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSB0aGF0IGRlZmluZXMgX19zbG90c19fIiIiCisgICAgX19zbG90c19fID0gKCkKKworY2xhc3MgUHJvcGVydHlTdWJjbGFzc1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihQcm9wZXJ0eVN1YlNsb3RzLCAnX19kb2NfXycpLAorICAgICAgICAgICAgIl9fZG9jX18gaXMgYWxyZWFkeSBwcmVzZW50LCBfX3Nsb3RzX18gd2lsbCBoYXZlIG5vIGVmZmVjdCIpCisgICAgZGVmIHRlc3Rfc2xvdHNfZG9jc3RyaW5nX2NvcHlfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKKyAgICAgICAgICAgICAgICBAUHJvcGVydHlTdWJTbG90cworICAgICAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICAiIiJUcnlpbmcgdG8gY29weSB0aGlzIGRvY3N0cmluZyB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbiIiIgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHByaW50KCdcbicsc3BhbS5fX2RvY19fKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkF0dHJpYnV0ZUVycm9yIG5vdCByYWlzZWQiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RfZG9jc3RyaW5nX2NvcHkoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvby5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9zZXR0ZXJfY29waWVzX2dldHRlcl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyhvYmplY3QpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOiBzZWxmLl9zcGFtID0gMQorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJzcGFtIHdyYXBwZWQgaW4gRHluYW1pY0NsYXNzQXR0cmlidXRlIHN1YmNsYXNzIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3NwYW0KKyAgICAgICAgICAgIEBzcGFtLnNldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgICIiInRoaXMgZG9jc3RyaW5nIGlzIGlnbm9yZWQiIiIKKyAgICAgICAgICAgICAgICBzZWxmLl9zcGFtID0gdmFsdWUKKyAgICAgICAgZm9vID0gRm9vKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uc3BhbSwgMSkKKyAgICAgICAgZm9vLnNwYW0gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnNwYW0sIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLAorICAgICAgICAgICAgInNwYW0gd3JhcHBlZCBpbiBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgc3ViY2xhc3MiKQorICAgICAgICBjbGFzcyBGb29TdWIoRm9vKToKKyAgICAgICAgICAgIHNwYW0gPSBGb28uX19kaWN0X19bJ3NwYW0nXQorICAgICAgICAgICAgQHNwYW0uc2V0dGVyCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgIiIiYW5vdGhlciBpZ25vcmVkIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHNlbGYuX3NwYW0gPSAnZWdncycKKyAgICAgICAgZm9vc3ViID0gRm9vU3ViKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb29zdWIuc3BhbSwgMSkKKyAgICAgICAgZm9vc3ViLnNwYW0gPSA3CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vc3ViLnNwYW0sICdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIEZvb1N1Yi5fX2RpY3RfX1snc3BhbSddLl9fZG9jX18sCisgICAgICAgICAgICAic3BhbSB3cmFwcGVkIGluIER5bmFtaWNDbGFzc0F0dHJpYnV0ZSBzdWJjbGFzcyIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9wcm9wZXJ0eV9uZXdfZ2V0dGVyX25ld19kb2NzdHJpbmcoc2VsZik6CisKKyAgICAgICAgY2xhc3MgRm9vKG9iamVjdCk6CisgICAgICAgICAgICBAUHJvcGVydHlTdWIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgIEBzcGFtLmdldHRlcgorICAgICAgICAgICAgZGVmIHNwYW0oc2VsZik6CisgICAgICAgICAgICAgICAgIiIiYSBuZXcgZG9jc3RyaW5nIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGb28uX19kaWN0X19bJ3NwYW0nXS5fX2RvY19fLCAiYSBuZXcgZG9jc3RyaW5nIikKKyAgICAgICAgY2xhc3MgRm9vQmFzZShvYmplY3QpOgorICAgICAgICAgICAgQFByb3BlcnR5U3ViCisgICAgICAgICAgICBkZWYgc3BhbShzZWxmKToKKyAgICAgICAgICAgICAgICAiIiJhIGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGNsYXNzIEZvbzIoRm9vQmFzZSk6CisgICAgICAgICAgICBzcGFtID0gRm9vQmFzZS5fX2RpY3RfX1snc3BhbSddCisgICAgICAgICAgICBAc3BhbS5nZXR0ZXIKKyAgICAgICAgICAgIGRlZiBzcGFtKHNlbGYpOgorICAgICAgICAgICAgICAgICIiImEgbmV3IGRvY3N0cmluZyIiIgorICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRm9vLl9fZGljdF9fWydzcGFtJ10uX19kb2NfXywgImEgbmV3IGRvY3N0cmluZyIpCisKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgcnVuX3VuaXR0ZXN0KFByb3BlcnR5VGVzdHMsIFByb3BlcnR5U3ViY2xhc3NUZXN0cykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19pbml0X18ucHkKaW5kZXggZjIwNmFjZS4uZDJmN2QzMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19faW5pdF9fLnB5CkBAIC0xLDMwICsxLDE2IEBACiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAotaW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IGNvbGxlY3Rpb25zCiBpbXBvcnQgZW1haWwKIGZyb20gZW1haWwubWVzc2FnZSBpbXBvcnQgTWVzc2FnZQogZnJvbSBlbWFpbC5fcG9saWN5YmFzZSBpbXBvcnQgY29tcGF0MzIKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKIGZyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBfX2ZpbGVfXyBhcyBsYW5kbWFyawogCi0jIFJ1biBhbGwgdGVzdHMgaW4gcGFja2FnZSBmb3IgJy1tIHVuaXR0ZXN0IHRlc3QudGVzdF9lbWFpbCcKLWRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3RhbmRhcmRfdGVzdHMsIHBhdHRlcm4pOgotICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgIGlmIHBhdHRlcm4gaXMgTm9uZToKLSAgICAgICAgcGF0dGVybiA9ICJ0ZXN0KiIKLSAgICBwYWNrYWdlX3Rlc3RzID0gbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2Rpcj10aGlzX2RpciwgcGF0dGVybj1wYXR0ZXJuKQotICAgIHN0YW5kYXJkX3Rlc3RzLmFkZFRlc3RzKHBhY2thZ2VfdGVzdHMpCi0gICAgcmV0dXJuIHN0YW5kYXJkX3Rlc3RzCi0KLQotIyB1c2VkIGJ5IHJlZ3J0ZXN0IGFuZCBfX21haW5fXy4KLWRlZiB0ZXN0X21haW4oKToKLSAgICBoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICMgVW5pdHRlc3QgbXVja3Mgd2l0aCB0aGUgcGF0aCwgc28gd2UgaGF2ZSB0byBzYXZlIGFuZCByZXN0b3JlCi0gICAgIyBpdCB0byBrZWVwIHJlZ3J0ZXN0IGhhcHB5LgotICAgIHNhdmVwYXRoID0gc3lzLnBhdGhbOl0KLSAgICB0ZXN0LnN1cHBvcnQuX3J1bl9zdWl0ZSh1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5kaXNjb3ZlcihoZXJlKSkKLSAgICBzeXMucGF0aFs6XSA9IHNhdmVwYXRoCisjIExvYWQgYWxsIHRlc3RzIGluIHBhY2thZ2UKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQogCiAKICMgaGVscGVyIGNvZGUgdXNlZCBieSBhIG51bWJlciBvZiB0ZXN0IG1vZHVsZXMuCkBAIC00Miw2ICsyOCw4IEBACiAgICAgIyBoZXJlIHdlIG1ha2UgbWluaW1hbCBjaGFuZ2VzIGluIHRoZSB0ZXN0X2VtYWlsIHRlc3RzIGNvbXBhcmVkIHRvIHRoZWlyCiAgICAgIyBwcmUtMy4zIHN0YXRlLgogICAgIHBvbGljeSA9IGNvbXBhdDMyCisgICAgIyBMaWtld2lzZSwgdGhlIGRlZmF1bHQgbWVzc2FnZSBvYmplY3QgaXMgTWVzc2FnZS4KKyAgICBtZXNzYWdlID0gTWVzc2FnZQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKICAgICAgICAgc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprdykKQEAgLTU0LDExICs0MiwyMyBAQAogICAgICAgICB3aXRoIG9wZW5maWxlKGZpbGVuYW1lKSBhcyBmcDoKICAgICAgICAgICAgIHJldHVybiBlbWFpbC5tZXNzYWdlX2Zyb21fZmlsZShmcCwgcG9saWN5PXNlbGYucG9saWN5KQogCi0gICAgZGVmIF9zdHJfbXNnKHNlbGYsIHN0cmluZywgbWVzc2FnZT1NZXNzYWdlLCBwb2xpY3k9Tm9uZSk6CisgICAgZGVmIF9zdHJfbXNnKHNlbGYsIHN0cmluZywgbWVzc2FnZT1Ob25lLCBwb2xpY3k9Tm9uZSk6CiAgICAgICAgIGlmIHBvbGljeSBpcyBOb25lOgogICAgICAgICAgICAgcG9saWN5ID0gc2VsZi5wb2xpY3kKKyAgICAgICAgaWYgbWVzc2FnZSBpcyBOb25lOgorICAgICAgICAgICAgbWVzc2FnZSA9IHNlbGYubWVzc2FnZQogICAgICAgICByZXR1cm4gZW1haWwubWVzc2FnZV9mcm9tX3N0cmluZyhzdHJpbmcsIG1lc3NhZ2UsIHBvbGljeT1wb2xpY3kpCiAKKyAgICBkZWYgX2J5dGVzX21zZyhzZWxmLCBieXRlc3RyaW5nLCBtZXNzYWdlPU5vbmUsIHBvbGljeT1Ob25lKToKKyAgICAgICAgaWYgcG9saWN5IGlzIE5vbmU6CisgICAgICAgICAgICBwb2xpY3kgPSBzZWxmLnBvbGljeQorICAgICAgICBpZiBtZXNzYWdlIGlzIE5vbmU6CisgICAgICAgICAgICBtZXNzYWdlID0gc2VsZi5tZXNzYWdlCisgICAgICAgIHJldHVybiBlbWFpbC5tZXNzYWdlX2Zyb21fYnl0ZXMoYnl0ZXN0cmluZywgbWVzc2FnZSwgcG9saWN5PXBvbGljeSkKKworICAgIGRlZiBfbWFrZV9tZXNzYWdlKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5tZXNzYWdlKHBvbGljeT1zZWxmLnBvbGljeSkKKwogICAgIGRlZiBfYnl0ZXNfcmVwcihzZWxmLCBiKToKICAgICAgICAgcmV0dXJuIFtyZXByKHgpIGZvciB4IGluIGIuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKV0KIApAQCAtODcsNyArODcsNyBAQAogICAgIGVsZW1lbnQgdHVwbGVzLiAgSG93ZXZlciBkZXJpdmVkLCB0aGUgcmVzdWx0aW5nIHNlcXVlbmNlIGlzIHBhc3NlZCB2aWEKICAgICAqYXJncyB0byB0aGUgcGFyYW1ldGVyaXplZCB0ZXN0IGZ1bmN0aW9uLgogCi0gICAgSW4gYSBfcGFyYW1zIGRpY3Rpb2FucnksIHRoZSBrZXlzIGJlY29tZSBwYXJ0IG9mIHRoZSBuYW1lIG9mIHRoZSBnZW5lcmF0ZWQKKyAgICBJbiBhIF9wYXJhbXMgZGljdGlvbmFyeSwgdGhlIGtleXMgYmVjb21lIHBhcnQgb2YgdGhlIG5hbWUgb2YgdGhlIGdlbmVyYXRlZAogICAgIHRlc3RzLiAgSW4gYSBfcGFyYW1zIGxpc3QsIHRoZSB2YWx1ZXMgaW4gdGhlIGxpc3QgYXJlIGNvbnZlcnRlZCBpbnRvIGEKICAgICBzdHJpbmcgYnkgam9pbmluZyB0aGUgc3RyaW5nIHZhbHVlcyBvZiB0aGUgZWxlbWVudHMgb2YgdGhlIHR1cGxlIGJ5ICdfJyBhbmQKICAgICBjb252ZXJ0aW5nIGFueSBibGFua3MgaW50byAnXydzLCBhbmQgdGhpcyBiZWNvbWUgcGFydCBvZiB0aGUgbmFtZS4KQEAgLTEyMyw2ICsxMjMsNyBAQAogCiAgICAgIiIiCiAgICAgcGFyYW1kaWN0cyA9IHt9CisgICAgdGVzdGVycyA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJ19wYXJhbXMnKToKICAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKGF0dHIsICdrZXlzJyk6CkBAIC0xMzQsNyArMTM1LDE1IEBACiAgICAgICAgICAgICAgICAgICAgIGRbbl0gPSB4CiAgICAgICAgICAgICAgICAgYXR0ciA9IGQKICAgICAgICAgICAgIHBhcmFtZGljdHNbbmFtZVs6LTddICsgJ19hc18nXSA9IGF0dHIKKyAgICAgICAgaWYgJ19hc18nIGluIG5hbWU6CisgICAgICAgICAgICB0ZXN0ZXJzW25hbWUuc3BsaXQoJ19hc18nKVswXSArICdfYXNfJ10uYXBwZW5kKG5hbWUpCiAgICAgdGVzdGZ1bmNzID0ge30KKyAgICBmb3IgbmFtZSBpbiBwYXJhbWRpY3RzOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiB0ZXN0ZXJzOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiTm8gdGVzdGVyIGZvdW5kIGZvciB7fSIuZm9ybWF0KG5hbWUpKQorICAgIGZvciBuYW1lIGluIHRlc3RlcnM6CisgICAgICAgIGlmIG5hbWUgbm90IGluIHBhcmFtZGljdHM6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJObyBwYXJhbXMgZm91bmQgZm9yIHt9Ii5mb3JtYXQobmFtZSkpCiAgICAgZm9yIG5hbWUsIGF0dHIgaW4gY2xzLl9fZGljdF9fLml0ZW1zKCk6CiAgICAgICAgIGZvciBwYXJhbXNuYW1lLCBwYXJhbXNkaWN0IGluIHBhcmFtZGljdHMuaXRlbXMoKToKICAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwYXJhbXNuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL19fbWFpbl9fLnB5CmluZGV4IDk4YWY5ZWMuLjRiMTRmNzcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvX19tYWluX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC9fX21haW5fXy5weQpAQCAtMSwzICsxLDQgQEAKLWZyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCB0ZXN0X21haW4KK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKIAotdGVzdF9tYWluKCkKK3VuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X19oZWFkZXJfdmFsdWVfcGFyc2VyLnB5CmluZGV4IDMyOTk2Y2EuLmQwMjhmNzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9faGVhZGVyX3ZhbHVlX3BhcnNlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfX2hlYWRlcl92YWx1ZV9wYXJzZXIucHkKQEAgLTI0NDMsNiArMjQ0MywxMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYWRkcmVzc19saXN0LmFkZHJlc3Nlc1sxXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKGFkZHJlc3NfbGlzdC5tYWlsYm94ZXNbMl0pKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9jb250ZW50X2Rpc3Bvc2l0aW9uKHNlbGYpOgorICAgICAgICBjb250ZW50X2Rpc3AgPSBzZWxmLl90ZXN0X3BhcnNlX3goCisgICAgICAgICAgICBwYXJzZXIucGFyc2VfY29udGVudF9kaXNwb3NpdGlvbl9oZWFkZXIsCisgICAgICAgICAgICAiO2F0dGFjaG1lbnQiLCAiOyBhdHRhY2htZW50IiwgIjthdHRhY2htZW50IiwKKyAgICAgICAgICAgIFtlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdF0qMgorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2NvbnRlbnRfdHJhbnNmZXJfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIGN0ZSA9IHNlbGYuX3Rlc3RfcGFyc2VfeCgKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZV9jb250ZW50X3RyYW5zZmVyX2VuY29kaW5nX2hlYWRlciwKKyAgICAgICAgICAgICI7Zm9vIiwgIjtmb28iLCAiO2ZvbyIsIFtlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdF0qMworICAgICAgICApCisKKworQHBhcmFtZXRlcml6ZQorY2xhc3MgVGVzdF9wYXJzZV9taW1lX3BhcmFtZXRlcnMoVGVzdFBhcnNlck1peGluLCBUZXN0RW1haWxCYXNlKToKKworICAgIGRlZiBtaW1lX3BhcmFtZXRlcnNfYXNfdmFsdWUoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZlY3RzKToKKyAgICAgICAgbWltZV9wYXJhbWV0ZXJzID0gc2VsZi5fdGVzdF9wYXJzZV94KHBhcnNlci5wYXJzZV9taW1lX3BhcmFtZXRlcnMsCisgICAgICAgICAgICB2YWx1ZSwgdGxfc3RyLCB0bF92YWx1ZSwgZGVmZWN0cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtaW1lX3BhcmFtZXRlcnMudG9rZW5fdHlwZSwgJ21pbWUtcGFyYW1ldGVycycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtaW1lX3BhcmFtZXRlcnMucGFyYW1zKSwgcGFyYW1zKQorCisKKyAgICBtaW1lX3BhcmFtZXRlcnNfcGFyYW1zID0geworCisgICAgICAgICdzaW1wbGUnOiAoCisgICAgICAgICAgICAnZmlsZW5hbWU9ImFiYy5weSInLAorICAgICAgICAgICAgJyBmaWxlbmFtZT0iYWJjLnB5IicsCisgICAgICAgICAgICAnZmlsZW5hbWU9YWJjLnB5JywKKyAgICAgICAgICAgIFsoJ2ZpbGVuYW1lJywgJ2FiYy5weScpXSwKKyAgICAgICAgICAgIFtdKSwKKworICAgICAgICAnbXVsdGlwbGVfa2V5cyc6ICgKKyAgICAgICAgICAgICdmaWxlbmFtZT0iYWJjLnB5IjsgeHl6PWFiYycsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSJhYmMucHkiOyB4eXo9ImFiYyInLAorICAgICAgICAgICAgJ2ZpbGVuYW1lPWFiYy5weTsgeHl6PWFiYycsCisgICAgICAgICAgICBbKCdmaWxlbmFtZScsICdhYmMucHknKSwgKCd4eXonLCAnYWJjJyldLAorICAgICAgICAgICAgW10pLAorCisgICAgICAgICdzcGxpdF92YWx1ZSc6ICgKKyAgICAgICAgICAgICJmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjEqPSU3NCU2OSU2NiIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSIyMDEudGlmIicsCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSoxKj0lNzQlNjklNjYiLAorICAgICAgICAgICAgWygnZmlsZW5hbWUnLCAnMjAxLnRpZicpXSwKKyAgICAgICAgICAgIFtdKSwKKworICAgICAgICAjIE5vdGUgdGhhdCBpdCBpcyB1bmRlZmluZWQgd2hhdCB3ZSBzaG91bGQgZG8gZm9yIGVycm9yIHJlY292ZXJ5IHdoZW4KKyAgICAgICAgIyB0aGVyZSBhcmUgZHVwbGljYXRlIHBhcmFtZXRlciBuYW1lcyBvciBkdXBsaWNhdGUgcGFydHMgaW4gYSBzcGxpdAorICAgICAgICAjIHBhcnQuICBXZSBjaG9vc2UgdG8gaWdub3JlIGFsbCBkdXBsaWNhdGUgcGFyYW1ldGVycyBhZnRlciB0aGUgZmlyc3QKKyAgICAgICAgIyBhbmQgdG8gdGFrZSBkdXBsaWNhdGUgb3IgbWlzc2luZyByZmMgMjIzMSBwYXJ0cyBpbiBhcHBlcmFuY2Ugb3JkZXIuCisgICAgICAgICMgVGhpcyBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggZ2V0X3BhcmFtJ3MgYmVoYXZpb3IsIGJ1dCB0aGUKKyAgICAgICAgIyBkZWNpc2lvbnMgYXJlIGFyYml0cmFyeS4KKworICAgICAgICAnZHVwbGljYXRlX2tleSc6ICgKKyAgICAgICAgICAgICdmaWxlbmFtZT1hYmMuZ2lmOyBmaWxlbmFtZT1kZWYudGlmZicsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSJhYmMuZ2lmIicsCisgICAgICAgICAgICAiZmlsZW5hbWU9YWJjLmdpZjsgZmlsZW5hbWU9ZGVmLnRpZmYiLAorICAgICAgICAgICAgWygnZmlsZW5hbWUnLCAnYWJjLmdpZicpXSwKKyAgICAgICAgICAgIFtlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdF0pLAorCisgICAgICAgICdkdXBsaWNhdGVfa2V5X3dpdGhfc3BsaXRfdmFsdWUnOiAoCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSoxKj0lNzQlNjklNjY7IgorICAgICAgICAgICAgICAgICIgZmlsZW5hbWU9YWJjLmdpZiIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSIyMDEudGlmIicsCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSoxKj0lNzQlNjklNjY7IgorICAgICAgICAgICAgICAgICIgZmlsZW5hbWU9YWJjLmdpZiIsCisgICAgICAgICAgICBbKCdmaWxlbmFtZScsICcyMDEudGlmJyldLAorICAgICAgICAgICAgW2Vycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0XSksCisKKyAgICAgICAgJ2R1cGxpY2F0ZV9rZXlfd2l0aF9zcGxpdF92YWx1ZV9vdGhlcl9vcmRlcic6ICgKKyAgICAgICAgICAgICJmaWxlbmFtZT1hYmMuZ2lmOyAiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjEqPSU3NCU2OSU2NiIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSJhYmMuZ2lmIicsCisgICAgICAgICAgICAiZmlsZW5hbWU9YWJjLmdpZjsiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjEqPSU3NCU2OSU2NiIsCisgICAgICAgICAgICBbKCdmaWxlbmFtZScsICdhYmMuZ2lmJyldLAorICAgICAgICAgICAgW2Vycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0XSksCisKKyAgICAgICAgJ2R1cGxpY2F0ZV9pbl9zcGxpdF92YWx1ZSc6ICgKKyAgICAgICAgICAgICJmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjEqPSU3NCU2OSU2NjsiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSoxKj1hYmMuZ2lmIiwKKyAgICAgICAgICAgICcgZmlsZW5hbWU9IjIwMS50aWZhYmMuZ2lmIicsCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSoxKj0lNzQlNjklNjY7IgorICAgICAgICAgICAgICAgICIgZmlsZW5hbWUqMSo9YWJjLmdpZiIsCisgICAgICAgICAgICBbKCdmaWxlbmFtZScsICcyMDEudGlmYWJjLmdpZicpXSwKKyAgICAgICAgICAgIFtlcnJvcnMuSW52YWxpZEhlYWRlckRlZmVjdF0pLAorCisgICAgICAgICdtaXNzaW5nX3NwbGl0X3ZhbHVlJzogKAorICAgICAgICAgICAgImZpbGVuYW1lKjAqPWlzby04ODU5LTEnJyUzMiUzMCUzMSUyRTsgZmlsZW5hbWUqMyo9JTc0JTY5JTY2OyIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSIyMDEudGlmIicsCisgICAgICAgICAgICAiZmlsZW5hbWUqMCo9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSozKj0lNzQlNjklNjY7IiwKKyAgICAgICAgICAgIFsoJ2ZpbGVuYW1lJywgJzIwMS50aWYnKV0sCisgICAgICAgICAgICBbZXJyb3JzLkludmFsaWRIZWFkZXJEZWZlY3RdKSwKKworICAgICAgICAnZHVwbGljYXRlX2FuZF9taXNzaW5nX3NwbGl0X3ZhbHVlJzogKAorICAgICAgICAgICAgImZpbGVuYW1lKjAqPWlzby04ODU5LTEnJyUzMiUzMCUzMSUyRTsgZmlsZW5hbWUqMyo9JTc0JTY5JTY2OyIKKyAgICAgICAgICAgICAgICAiIGZpbGVuYW1lKjMqPWFiYy5naWYiLAorICAgICAgICAgICAgJyBmaWxlbmFtZT0iMjAxLnRpZmFiYy5naWYiJywKKyAgICAgICAgICAgICJmaWxlbmFtZSowKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjMqPSU3NCU2OSU2NjsiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSozKj1hYmMuZ2lmIiwKKyAgICAgICAgICAgIFsoJ2ZpbGVuYW1lJywgJzIwMS50aWZhYmMuZ2lmJyldLAorICAgICAgICAgICAgW2Vycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0XSoyKSwKKworICAgICAgICAjIEhlcmUgd2UgZGVwYXJ0IGZyb20gZ2V0X3BhcmFtIGFuZCBhc3N1bWUgdGhlICowKiB3YXMgbWlzc2luZy4KKyAgICAgICAgJ2R1cGxpY2F0ZV93aXRoX2Jyb2tlbl9zcGxpdF92YWx1ZSc6ICgKKyAgICAgICAgICAgICJmaWxlbmFtZT1hYmMuZ2lmOyAiCisgICAgICAgICAgICAgICAgIiBmaWxlbmFtZSoyKj1pc28tODg1OS0xJyclMzIlMzAlMzElMkU7IGZpbGVuYW1lKjMqPSU3NCU2OSU2NiIsCisgICAgICAgICAgICAnIGZpbGVuYW1lPSJhYmMuZ2lmMjAxLnRpZiInLAorICAgICAgICAgICAgImZpbGVuYW1lPWFiYy5naWY7IgorICAgICAgICAgICAgICAgICIgZmlsZW5hbWUqMio9aXNvLTg4NTktMScnJTMyJTMwJTMxJTJFOyBmaWxlbmFtZSozKj0lNzQlNjklNjYiLAorICAgICAgICAgICAgWygnZmlsZW5hbWUnLCAnYWJjLmdpZjIwMS50aWYnKV0sCisgICAgICAgICAgICAjIERlZmVjdHMgYXJlIGFwcGFyZW50IG1pc3NpbmcgKjAqLCBhbmQgdHdvICdvdXQgb2Ygc2VxdWVuY2UnLgorICAgICAgICAgICAgW2Vycm9ycy5JbnZhbGlkSGVhZGVyRGVmZWN0XSozKSwKKworICAgIH0KIAogQHBhcmFtZXRlcml6ZQogY2xhc3MgVGVzdF9wYXJzZV9taW1lX3ZlcnNpb24oVGVzdFBhcnNlck1peGluLCBUZXN0RW1haWxCYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9jb250ZW50bWFuYWdlci5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGIwNGU0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2NvbnRlbnRtYW5hZ2VyLnB5CkBAIC0wLDAgKzEsNzk2IEBACitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlLCBwYXJhbWV0ZXJpemUKK2ltcG9ydCB0ZXh0d3JhcAorZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5Citmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IEVtYWlsTWVzc2FnZQorZnJvbSBlbWFpbC5jb250ZW50bWFuYWdlciBpbXBvcnQgQ29udGVudE1hbmFnZXIsIHJhd19kYXRhX21hbmFnZXIKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0Q29udGVudE1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdAorICAgIG1lc3NhZ2UgPSBFbWFpbE1lc3NhZ2UKKworICAgIGdldF9rZXlfcGFyYW1zID0geworICAgICAgICAnZnVsbF90eXBlJzogICAgICAgICgxLCAndGV4dC9wbGFpbicsKSwKKyAgICAgICAgJ21haW50eXBlX29ubHknOiAgICAoMiwgJ3RleHQnLCksCisgICAgICAgICdudWxsX2tleSc6ICAgICAgICAgKDMsICcnLCksCisgICAgICAgIH0KKworICAgIGRlZiBnZXRfa2V5X2FzX2dldF9jb250ZW50X2tleShzZWxmLCBvcmRlciwga2V5KToKKyAgICAgICAgZGVmIGZvb19nZXR0ZXIobXNnLCBmb289Tm9uZSk6CisgICAgICAgICAgICBiYXIgPSBtc2dbJ1gtQmFyLUhlYWRlciddCisgICAgICAgICAgICByZXR1cm4gZm9vLCBiYXIKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBtWydYLUJhci1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSwgZm9vPSdiYXInKSwgKCdiYXInLCAnZm9vJykpCisKKyAgICBkZWYgZ2V0X2tleV9hc19nZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBiYXJfZ2V0dGVyKG1zZyk6CisgICAgICAgICAgICByZXR1cm4gbXNnWydYLUJhci1IZWFkZXInXQorICAgICAgICBkZWYgZm9vX2dldHRlcihtc2cpOgorICAgICAgICAgICAgcmV0dXJuIG1zZ1snWC1Gb28tSGVhZGVyJ10KKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9nZXRfaGFuZGxlcihrZXksIGZvb19nZXR0ZXIpCisgICAgICAgIGZvciBwcmVjZWRlbmNlLCBrZXkgaW4gc2VsZi5nZXRfa2V5X3BhcmFtcy52YWx1ZXMoKToKKyAgICAgICAgICAgIGlmIHByZWNlZGVuY2UgPiBvcmRlcjoKKyAgICAgICAgICAgICAgICBjbS5hZGRfZ2V0X2hhbmRsZXIoa2V5LCBiYXJfZ2V0dGVyKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgbVsnWC1CYXItSGVhZGVyJ10gPSAnYmFyJworICAgICAgICBtWydYLUZvby1IZWFkZXInXSA9ICdmb28nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZ2V0X2NvbnRlbnQobSksICgnZm9vJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF9yYWlzZXNfaWZfdW5rbm93bl9taW1ldHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoS2V5RXJyb3IsICd0ZXh0L3BsYWluJyk6CisgICAgICAgICAgICBjbS5nZXRfY29udGVudChtKQorCisgICAgY2xhc3MgQmFzZVRoaW5nKHN0cik6CisgICAgICAgIHBhc3MKKyAgICBiYXNlb2JqZWN0X2Z1bGxfcGF0aCA9IF9fbmFtZV9fICsgJy4nICsgJ1Rlc3RDb250ZW50TWFuYWdlci5CYXNlVGhpbmcnCisgICAgY2xhc3MgVGhpbmcoQmFzZVRoaW5nKToKKyAgICAgICAgcGFzcworICAgIHRlc3RvYmplY3RfZnVsbF9wYXRoID0gX19uYW1lX18gKyAnLicgKyAnVGVzdENvbnRlbnRNYW5hZ2VyLlRoaW5nJworCisgICAgc2V0X2tleV9wYXJhbXMgPSB7CisgICAgICAgICd0eXBlJzogICAgICAgICAgICAgKDAsICBUaGluZywpLAorICAgICAgICAnZnVsbF9wYXRoJzogICAgICAgICgxLCAgdGVzdG9iamVjdF9mdWxsX3BhdGgsKSwKKyAgICAgICAgJ3F1YWxuYW1lJzogICAgICAgICAoMiwgICdUZXN0Q29udGVudE1hbmFnZXIuVGhpbmcnLCksCisgICAgICAgICduYW1lJzogICAgICAgICAgICAgKDMsICAnVGhpbmcnLCksCisgICAgICAgICdiYXNlX3R5cGUnOiAgICAgICAgKDQsICBCYXNlVGhpbmcsKSwKKyAgICAgICAgJ2Jhc2VfZnVsbF9wYXRoJzogICAoNSwgIGJhc2VvYmplY3RfZnVsbF9wYXRoLCksCisgICAgICAgICdiYXNlX3F1YWxuYW1lJzogICAgKDYsICAnVGVzdENvbnRlbnRNYW5hZ2VyLkJhc2VUaGluZycsKSwKKyAgICAgICAgJ2Jhc2VfbmFtZSc6ICAgICAgICAoNywgICdCYXNlVGhpbmcnLCksCisgICAgICAgICdzdHJfdHlwZSc6ICAgICAgICAgKDgsICBzdHIsKSwKKyAgICAgICAgJ3N0cl9mdWxsX3BhdGgnOiAgICAoOSwgICdidWlsdGlucy5zdHInLCksCisgICAgICAgICdzdHJfbmFtZSc6ICAgICAgICAgKDEwLCAnc3RyJywpLCAgICMgc3RyIG5hbWUgYW5kIHF1YWxuYW1lIGFyZSB0aGUgc2FtZQorICAgICAgICAnbnVsbF9rZXknOiAgICAgICAgICgxMSwgTm9uZSwpLAorICAgICAgICB9CisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXkoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqLCBmb289Tm9uZSk6CisgICAgICAgICAgICBtc2dbJ1gtRm9vLUhlYWRlciddID0gZm9vCisgICAgICAgICAgICBtc2cuc2V0X3BheWxvYWQob2JqKQorICAgICAgICBjbSA9IENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgZm9vX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaiwgZm9vPSdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ1gtRm9vLUhlYWRlciddLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksIG1zZ19vYmopCisKKyAgICBkZWYgc2V0X2tleV9hc19zZXRfY29udGVudF9rZXlfb3JkZXIoc2VsZiwgb3JkZXIsIGtleSk6CisgICAgICAgIGRlZiBmb29fc2V0dGVyKG1zZywgb2JqKToKKyAgICAgICAgICAgIG1zZ1snWC1Gb29CYXItSGVhZGVyJ10gPSAnZm9vJworICAgICAgICAgICAgbXNnLnNldF9wYXlsb2FkKG9iaikKKyAgICAgICAgZGVmIGJhcl9zZXR0ZXIobXNnLCBvYmopOgorICAgICAgICAgICAgbXNnWydYLUZvb0Jhci1IZWFkZXInXSA9ICdiYXInCisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBjbS5hZGRfc2V0X2hhbmRsZXIoa2V5LCBmb29fc2V0dGVyKQorICAgICAgICBmb3IgcHJlY2VkZW5jZSwga2V5IGluIHNlbGYuZ2V0X2tleV9wYXJhbXMudmFsdWVzKCk6CisgICAgICAgICAgICBpZiBwcmVjZWRlbmNlID4gb3JkZXI6CisgICAgICAgICAgICAgICAgY20uYWRkX3NldF9oYW5kbGVyKGtleSwgYmFyX3NldHRlcikKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1zZ19vYmogPSBzZWxmLlRoaW5nKCkKKyAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgbXNnX29iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydYLUZvb0Jhci1IZWFkZXInXSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgpLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX3Vua25vd25fdHlwZV9hbmRfbm9fZGVmYXVsdChzZWxmKToKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtc2dfb2JqID0gc2VsZi5UaGluZygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChLZXlFcnJvciwgc2VsZi50ZXN0b2JqZWN0X2Z1bGxfcGF0aCk6CisgICAgICAgICAgICBjbS5zZXRfY29udGVudChtLCBtc2dfb2JqKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfcmFpc2VzX2lmX2NhbGxlZF9vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIGNtID0gQ29udGVudE1hbmFnZXIoKQorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0L2ZvbycKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY20uc2V0X2NvbnRlbnQobSwgJ3Rlc3QnKQorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfY2FsbHNfY2xlYXJfY29udGVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG1bJ0NvbnRlbnQtRm9vJ10gPSAnYmFyJworICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L2h0bWwnCisgICAgICAgIG1bJ1RvJ10gPSAndGVzdCcKKyAgICAgICAgbS5zZXRfcGF5bG9hZCgnYWJjJykKKyAgICAgICAgY20gPSBDb250ZW50TWFuYWdlcigpCisgICAgICAgIGNtLmFkZF9zZXRfaGFuZGxlcihzdHIsIGxhbWJkYSAqYXJncywgKiprdzogTm9uZSkKKyAgICAgICAgbS5zZXRfY29udGVudCgneHl6JywgY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LUZvbyddKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShtWydDb250ZW50LVR5cGUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydUbyddLCAndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG0uZ2V0X3BheWxvYWQoKSkKKworCitAcGFyYW1ldGVyaXplCitjbGFzcyBUZXN0UmF3RGF0YU1hbmFnZXIoVGVzdEVtYWlsQmFzZSk6CisgICAgIyBOb3RlOiB0aGVzZSB0ZXN0cyBhcmUgZGVwZW5kZW50IG9uIHRoZSBvcmRlciBpbiB3aGljaCBoZWFkZXJzIGFyZSBhZGRlZAorICAgICMgdG8gdGhlIG1lc3NhZ2Ugb2JqZWN0cyBieSB0aGUgY29kZS4gIFRoZXJlJ3Mgbm8gZGVmaW5lZCBvcmRlcmluZyBpbgorICAgICMgUkZDNTMyMi9NSU1FLCBzbyB0aGlzIG1ha2VzIHRoZSB0ZXN0cyBtb3JlIGZyYWdpbGUgdGhhbiB0aGUgc3RhbmRhcmRzCisgICAgIyByZXF1aXJlLiAgSG93ZXZlciwgaWYgdGhlIGhlYWRlciBvcmRlciBjaGFuZ2VzIGl0IGlzIGJlc3QgdG8gdW5kZXJzdGFuZAorICAgICMgKndoeSosIGFuZCBtYWtlIHN1cmUgaXQgaXNuJ3QgYSBzdWJ0bGUgYnVnIGluIHdoYXRldmVyIGNoYW5nZSB3YXMKKyAgICAjIGFwcGxpZWQuCisKKyAgICBwb2xpY3kgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShtYXhfbGluZV9sZW5ndGg9NjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF9tYW5hZ2VyPXJhd19kYXRhX21hbmFnZXIpCisgICAgbWVzc2FnZSA9IEVtYWlsTWVzc2FnZQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW4oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgIkJhc2ljIHRleHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfaHRtbChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgIDxwPkJhc2ljIHRleHQuPC9wPgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8cD5CYXNpYyB0ZXh0LjwvcD5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9wbGFpbl9sYXRpbjEoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9ieXRlc19tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD1sYXRpbjEKKworICAgICAgICAgICAgQmFzw6xjIHTDq3h0LgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2xhdGluMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fbGF0aW4xX3F1b3RlZF9wcmludGFibGUoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9ImxhdGluLTEiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisKKyAgICAgICAgICAgIEJhcz1FQ2MgdD1FQnh0LgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pLCAiQmFzw6xjIHTDq3h0LlxuIikKKworICAgIGRlZiB0ZXN0X2dldF90ZXh0X3BsYWluX3V0ZjhfYmFzZTY0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ289CisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2codGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgQmFzPWMzPWFjYyB0PWMzPWFieHQ9ZmQuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSksICJCYXPDrGMgdMOreHTvv70uXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fYmFkX3V0ZjhfcXVvdGVkX3ByaW50YWJsZV9pZ25vcmVfZXJyb3JzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorCisgICAgICAgICAgICBCYXM9YzM9YWNjIHQ9YzM9YWJ4dD1mZC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtLCBlcnJvcnM9J2lnbm9yZScpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJCYXPDrGMgdMOreHQuXG4iKQorCisgICAgZGVmIHRlc3RfZ2V0X3RleHRfcGxhaW5fdXRmOF9iYXNlNjRfcmVjb3ZlcmFibGVfYmFkX0NURV9kYXRhKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGY4IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFFtRnp3NnhqSUhURHEzaDBMZ29ceEZGPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0sIGVycm9ycz0naWdub3JlJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJhc8OsYyB0w6t4dC5cbiIpCisKKyAgICBkZWYgdGVzdF9nZXRfdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgQmFzaWMgdGV4dC4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZm9vPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X25vbl90ZXh0KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHt9CisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiYXNlNjQKKworICAgICAgICAgICAgWW05bmRYTWdaR0YwWVE9PQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3IgbWFpbnR5cGUgaW4gJ2F1ZGlvIGltYWdlIHZpZGVvIGFwcGxpY2F0aW9uJy5zcGxpdCgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobWFpbnR5cGU9bWFpbnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChtYWludHlwZSsnL2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKSwgYiJib2d1cyBkYXRhIikKKworICAgIGRlZiB0ZXN0X2dldF9ub25fdGV4dF9pbnZhbGlkX2tleXdvcmQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIFltOW5kWE1nWkdGMFlRPT0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuZ2V0X2NvbnRlbnQobSwgZXJyb3JzPSdpZ25vcmUnKQorCisgICAgZGVmIHRlc3RfZ2V0X3JhaXNlc19vbl9tdWx0aXBhcnQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorCisgICAgZGVmIHRlc3RfZ2V0X21lc3NhZ2VfcmZjODIyX2FuZF9leHRlcm5hbF9ib2R5KHNlbGYpOgorICAgICAgICB0ZW1wbGF0ZSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2Uve30KKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIGFuIGV4YW1wbGUgbWVzc2FnZQorICAgICAgICAgICAgIiIiKQorICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKHRlbXBsYXRlLmZvcm1hdChzdWJ0eXBlKSkKKyAgICAgICAgICAgICAgICBzdWJfbXNnID0gcmF3X2RhdGFfbWFuYWdlci5nZXRfY29udGVudChtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJfbXNnLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KHN1Yl9tc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFuIGV4YW1wbGUgbWVzc2FnZVxuIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yl9tc2dbJ3RvJ10sICdmb29AZXhhbXBsZS5jb20nKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViX21zZ1snZnJvbSddLmFkZHJlc3Nlc1swXS51c2VybmFtZSwgJ2JhcicpCisKKyAgICBkZWYgdGVzdF9nZXRfbWVzc2FnZV9ub25fcmZjODIyX29yX2V4dGVybmFsX2JvZHlfeWllbGRzX2J5dGVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyh0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3BhcnRpYWwKKworICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBleGFtcGxlCisKKyAgICAgICAgICAgIFRoZSByZWFsIGJvZHkgaXMgaW4gYW5vdGhlciBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYXdfZGF0YV9tYW5hZ2VyLmdldF9jb250ZW50KG0pWzoxMF0sIGInVG86IGZvb0BleCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9wbGFpbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2h0bWwoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gIjxwPlNpbXBsZSBtZXNzYWdlLjwvcD5cbiIKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBzdWJ0eXBlPSdodG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbDsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIDxwPlNpbXBsZSBtZXNzYWdlLjwvcD4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2NoYXJzZXRfbGF0aW5fMShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgY2hhcnNldD0nbGF0aW4tMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJpc28tODg1OS0xIgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorCisgICAgICAgICAgICBTaW1wbGUgbWVzc2FnZS4KKyAgICAgICAgICAgICIiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X3Nob3J0X2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiZXQgbMOgIGlsIGVzdCBtb250w6kgc3VyIG1vaSBldCBpbCBjb21tZW5jZSDDoCBtJ8OpdG8uXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA4Yml0CisKKyAgICAgICAgICAgIGV0IGzDoCBpbCBlc3QgbW9udMOpIHN1ciBtb2kgZXQgaWwgY29tbWVuY2Ugw6AgbSfDqXRvLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X2xvbmdfbGluZV9taW5pbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgICIgw6AgbSfDqXRvLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IHF1b3RlZC1wcmludGFibGUKKworICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWluaW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAnXG4nKjEwICsgKAorICAgICAgICAgICAgICAgICAgImonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiIKKyAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uICBldCBsw6AgaWwgZXN0IG1vbnTDqSBzdXIgbW9pIGV0IGlsIGNvbW1lbmNlIgorICAgICAgICAgICAgICAgICAgIiDDoCBtJ8OpdG8uXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgaidhaSB1biBwcm9ibD1DMz1BOG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcmk9CisgICAgICAgICAgICB1bS4gIGV0IGw9QzM9QTAgaWwgZXN0IG1vbnQ9QzM9QTkgc3VyIG1vaSBldCBpbCBjb21tZW5jZSA9CisgICAgICAgICAgICA9QzM9QTAgbSc9QzM9QTl0by4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9tYXhpbWFsX25vbl9hc2NpaV9oZXVyaXN0aWNzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICDDocOgw6TDqcOoxJnDtsWRLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0XzExX2xpbmVzX21heGltYWxfbm9uX2FzY2lpX2hldXJpc3RpY3Moc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gJ1xuJyoxMCArICLDocOgw6TDqcOoxJnDtsWRLlxuIgorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgw6HDoMOkw6nDqMSZw7bFkS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAoIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEiCisgICAgICAgICAgICAgICAgICAgIsOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZEuXG4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0CisKKyAgICAgICAgICAgIHc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09veEpuRAorICAgICAgICAgICAgdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VERxY09vCisgICAgICAgICAgICB4Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZ3c2VEQKKyAgICAgICAgICAgIHFjT294Sm5EdHNXUnc2SERvTU9rdzZuRHFNU1p3N2JGa2NPaHc2RERwTU9wdzZqRW1jTzJ4WkhEb2NPZworICAgICAgICAgICAgdzZURHFjT294Sm5EdHNXUkxnbz0KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLmRlY29kZSgndXRmLTgnKSwgY29udGVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50KCksIGNvbnRlbnQpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF8xMV9saW5lc19sb25nX2xpbmVfbWF4aW1hbF9ub25fYXNjaWlfaGV1cmlzdGljcyhzZWxmKToKKyAgICAgICAgIyBZZXMsIGl0IGNob29zZXMgIndyb25nIiBoZXJlLiAgSXQncyBhIGhldXJpc3RpYy4gIFNvIHRoaXMgcmVzdWx0CisgICAgICAgICMgY291bGQgY2hhbmdlIGlmIHdlIGNvbWUgdXAgd2l0aCBhIGJldHRlciBoZXVyaXN0aWMuCisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gKCdcbicqMTAgKworICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRIgorICAgICAgICAgICAgICAgICAgICLDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRLlxuIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCAiXG4iKjEwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiw6HDoMOkw6nDqMSZw7bFkcOhw6DDpMOpw6jEmcO2xZHDocOgw6TDqcOoxJnDtsWRw6HDoMOkw6nDqMSZw7bFkS5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogcXVvdGVkLXByaW50YWJsZQorICAgICAgICAgICAgIiIiICsgJ1xuJyoxMCArICIiIgorICAgICAgICAgICAgPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPQorICAgICAgICAgICAgPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PQorICAgICAgICAgICAgPUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPQorICAgICAgICAgICAgPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PQorICAgICAgICAgICAgPUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PQorICAgICAgICAgICAgPTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPQorICAgICAgICAgICAgPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPQorICAgICAgICAgICAgPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PQorICAgICAgICAgICAgPUMzPUE4PUM0PTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PQorICAgICAgICAgICAgPTk5PUMzPUI2PUM1PTkxPUMzPUExPUMzPUEwPUMzPUE0PUMzPUE5PUMzPUE4PUM0PTk5PUMzPUI2PQorICAgICAgICAgICAgPUM1PTkxLgorICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ3V0Zi04JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSkuZGVjb2RlKCd1dGYtOCcpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcpCisKKyAgICBkZWYgdGVzdF9zZXRfdGV4dF9ub25fYXNjaWlfd2l0aF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF90ZXh0X25vbl9hc2NpaV93aXRoX2N0ZV83Yml0X2FuZF9jaGFyc2V0X2FzY2lpX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwiw6HDoMOkw6nDqMSZw7bFkS5cbiIsIGN0ZT0nN2JpdCcsIGNoYXJzZXQ9J2FzY2lpJykKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkZvcndhcmRlZCBtZXNzYWdlIgorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudFsnVG8nXSA9ICdweXRob25Adml2YXJpdW0ub3JnJworICAgICAgICBjb250ZW50WydGcm9tJ10gPSAncG9saWNlQG1vbnR5Lm9yZycKKyAgICAgICAgY29udGVudFsnU3ViamVjdCddID0gImdldCBiYWNrIGluIHlvdXIgYm94IgorICAgICAgICBjb250ZW50LnNldF9jb250ZW50KCJPciBmYWNlIHRoZSBjb21meSBjaGFpci4iKQorICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRm9yd2FyZGVkIG1lc3NhZ2UKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbWVzc2FnZS9yZmM4MjIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKworICAgICAgICAgICAgVG86IHB5dGhvbkB2aXZhcml1bS5vcmcKKyAgICAgICAgICAgIEZyb206IHBvbGljZUBtb250eS5vcmcKKyAgICAgICAgICAgIFN1YmplY3Q6IGdldCBiYWNrIGluIHlvdXIgYm94CisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgT3IgZmFjZSB0aGUgY29tZnkgY2hhaXIuCisgICAgICAgICAgICAiIiIpKQorICAgICAgICBwYXlsb2FkID0gbS5nZXRfcGF5bG9hZCgwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGF5bG9hZCwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwYXlsb2FkKSwgc3RyKGNvbnRlbnQpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobS5nZXRfY29udGVudCgpLCBzZWxmLm1lc3NhZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0uZ2V0X2NvbnRlbnQoKSksIHN0cihjb250ZW50KSkKKworICAgIGRlZiB0ZXN0X3NldF9tZXNzYWdlX3dpdGhfbm9uX2FzY2lpX2FuZF9jb2VyY2lvbl90b183Yml0KHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbVsnU3ViamVjdCddID0gIkVzY2FwZSByZXBvcnQiCisgICAgICAgIGNvbnRlbnQgPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50WydUbyddID0gJ3BvbGljZUBtb250eS5vcmcnCisgICAgICAgIGNvbnRlbnRbJ0Zyb20nXSA9ICd2aWN0aW1AbW9udHkub3JnJworICAgICAgICBjb250ZW50WydTdWJqZWN0J10gPSAiSGVscCIKKyAgICAgICAgY29udGVudC5zZXRfY29udGVudCgiaidhaSB1biBwcm9ibMOobWUgZGUgcHl0aG9uLiBpbCBlc3Qgc29ydGkgZGUgc29uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgdml2YXJpdW0uIikKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVzKG0pLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDhiaXQKKyAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisKKyAgICAgICAgICAgIGonYWkgdW4gcHJvYmzDqG1lIGRlIHB5dGhvbi4gaWwgZXN0IHNvcnRpIGRlIHNvbiB2aXZhcml1bS4KKyAgICAgICAgICAgICIiIikuZW5jb2RlKCd1dGYtOCcpKQorICAgICAgICAjIFRoZSBjaG9pY2Ugb2YgYmFzZTY0IGZvciB0aGUgYm9keSBlbmNvZGluZyBpcyBiZWNhdXNlIGdlbmVyYXRvcgorICAgICAgICAjIGRvZXNuJ3QgYm90aGVyIHdpdGggaGV1cmlzdGljcyBhbmQgdXNlcyBpdCB1bmNvbmRpdGlvbmFsbHkgZm9yIHV0Zi04CisgICAgICAgICMgdGV4dC4KKyAgICAgICAgIyBYWFg6IHRoZSBmaXJzdCBjdGUgc2hvdWxkIGJlIDdiaXQsIHRvby4uLnRoYXQncyBhIGdlbmVyYXRvciBidWcuCisgICAgICAgICMgWFhYOiB0aGUgbGluZSBsZW5ndGggaW4gdGhlIGJvZHkgYWxzbyBsb29rcyBsaWtlIGEgZ2VuZXJhdG9yIGJ1Zy4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmFzX3N0cmluZyhtYXhoZWFkZXJsZW49c2VsZi5wb2xpY3kubWF4X2xpbmVfbGVuZ3RoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgU3ViamVjdDogRXNjYXBlIHJlcG9ydAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorCisgICAgICAgICAgICBUbzogcG9saWNlQG1vbnR5Lm9yZworICAgICAgICAgICAgRnJvbTogdmljdGltQG1vbnR5Lm9yZworICAgICAgICAgICAgU3ViamVjdDogSGVscAorICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOCIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgYWlkaGFTQjFiaUJ3Y205aWJNT29iV1VnWkdVZ2NIbDBhRzl1TGlCcGJDQmxjM1FnYzI5eWRHa2daR1VnYzI5dUlIWnBkbUZ5YVhWdAorICAgICAgICAgICAgTGdvPQorICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG0uZ2V0X2NvbnRlbnQoKSwgc2VsZi5tZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtLmdldF9jb250ZW50KCkpLCBzdHIoY29udGVudCkpCisKKyAgICBkZWYgdGVzdF9zZXRfbWVzc2FnZV9pbnZhbGlkX2N0ZV9yYWlzZXMoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBjb250ZW50ID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgZm9yIGN0ZSBpbiAncXVvdGVkLXByaW50YWJsZSBiYXNlNjQnLnNwbGl0KCk6CisgICAgICAgICAgICBmb3Igc3VidHlwZSBpbiAncmZjODIyIGV4dGVybmFsLWJvZHknLnNwbGl0KCk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY3RlPWN0ZSwgc3VidHlwZT1zdWJ0eXBlKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBhcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICAgICAgZXhjID0gc3RyKGFyLmV4Y2VwdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjdGUsIGV4YykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisgICAgICAgIHN1YnR5cGUgPSAnZXh0ZXJuYWwtYm9keScKKyAgICAgICAgZm9yIGN0ZSBpbiAnOGJpdCBiaW5hcnknLnNwbGl0KCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjdGU9Y3RlLCBzdWJ0eXBlPXN1YnR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYXI6CisgICAgICAgICAgICAgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgc3VidHlwZSwgY3RlPWN0ZSkKKyAgICAgICAgICAgICAgICBleGMgPSBzdHIoYXIuZXhjZXB0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oY3RlLCBleGMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzdWJ0eXBlLCBleGMpCisKKyAgICBkZWYgdGVzdF9zZXRfaW1hZ2VfanBnKHNlbGYpOgorICAgICAgICBmb3IgY29udGVudCBpbiAoYiJib2d1cyBjb250ZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShiImJvZ3VzIGNvbnRlbnQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJib2d1cyBjb250ZW50IikpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoY29udGVudD1jb250ZW50KToKKyAgICAgICAgICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsICdpbWFnZScsICdqcGVnJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGVnCisgICAgICAgICAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJhc2U2NAorCisgICAgICAgICAgICAgICAgICAgIFltOW5kWE1nWTI5dWRHVnVkQT09CisgICAgICAgICAgICAgICAgICAgICIiIikpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKGRlY29kZT1UcnVlKSwgY29udGVudCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hdWRpb19haWZfd2l0aF9xdW90ZWRfcHJpbnRhYmxlX2N0ZShzZWxmKToKKyAgICAgICAgIyBXaHkgeW91IHdvdWxkIHVzZSBxcCwgSSBkb24ndCBrbm93LCBidXQgaXQgaXMgdGVjaG5pY2FsbHkgc3VwcG9ydGVkLgorICAgICAgICAjIFhYWDogdGhlIGluY29ycmVjdCBsaW5lIGxlbmd0aCBpcyBiZWNhdXNlIGJpbmFzY2lpLmIyYV9xcCBkb2Vzbid0CisgICAgICAgICMgc3VwcG9ydCBhIGxpbmUgbGVuZ3RoIHBhcmFtZXRlciwgYnV0IHdlIG11c3QgdXNlIGl0IHRvIGdldCBuZXdsaW5lCisgICAgICAgICMgZW5jb2RpbmcuCisgICAgICAgICMgWFhYOiB3aGF0IGFib3V0IHRoYXQgbGFjayBvZiB0YWlsaW5nIG5ld2xpbmU/ICBEbyB3ZSBhY3R1YWxseSBoYW5kbGUKKyAgICAgICAgIyB0aGF0IGNvcnJlY3RseSBpbiBhbGwgY2FzZXM/ICBUaGF0IGlzLCBpZiB0aGUgKnNvdXJjZSogaGFzIGFuCisgICAgICAgICMgdW5lbmNvZGVkIG5ld2xpbmUsIGRvIHdlIGFkZCBhbiBleHRyYSBuZXdsaW5lIHRvIHRoZSByZXR1cm5lZCBwYXlsb2FkCisgICAgICAgICMgb3Igbm90PyAgQW5kIGNhbiB0aGF0IGFjdHVhbGx5IGJlIGRpc2FtYmlndWF0ZWQgYmFzZWQgb24gdGhlIFJGQz8KKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAnYXVkaW8nLCAnYWlmJywgY3RlPSdxdW90ZWQtcHJpbnRhYmxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogYXVkaW8vYWlmCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlCisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICBiPUZGZ3VzPTA5Y29uPTBBdD0wRGVudD0yMHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6eno9CisgICAgICAgICAgICB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enoiIiIpLmVuY29kZSgnbGF0aW4tMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF92aWRlb19tcGVnX3dpdGhfYmluYXJ5X2N0ZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSBiJ2JceEZGZ3VzXHRjb25cbnRccmVudCAnICsgYid6JyoxMDAKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50LCAndmlkZW8nLCAnbXBlZycsIGN0ZT0nYmluYXJ5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdmlkZW8vbXBlZworICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmluYXJ5CisgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSArCisgICAgICAgICAgICAjIFhYWDogdGhlIHNlY29uZCBcbiBvdWdodCB0byBiZSBhIFxyLCBidXQgZ2VuZXJhdG9yIGdldHMgaXQgd3JvbmcuCisgICAgICAgICAgICAjIFRISVMgTUVBTlMgV0UgRE9OJ1QgQUNUVUFMTFkgU1VQUE9SVCBUSEUgJ2JpbmFyeScgQ1RFLgorICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnQgenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6JyArCisgICAgICAgICAgICBiJ3p6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBjb250ZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgY29udGVudCkKKworICAgIGRlZiB0ZXN0X3NldF9hcHBsaWNhdGlvbl9vY3RldF9zdHJlYW1fd2l0aF84Yml0X2N0ZShzZWxmKToKKyAgICAgICAgIyBJbiA4Yml0IG1vZGUsIHVuaXZlcmFsIGxpbmUgZW5kIGxvZ2ljIGFwcGxpZXMuICBJdCBpcyB1cCB0byB0aGUKKyAgICAgICAgIyBhcHBsaWNhdGlvbiB0byBtYWtlIHN1cmUgdGhlIGxpbmVzIGFyZSBzaG9ydCBlbm91Z2g7IHdlIGRvbid0IGNoZWNrLgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9IGInYlx4RkZndXNcdGNvblxudFxyZW50XG4nICsgYid6Jyo2MCArIGInXG4nCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudCwgJ2FwcGxpY2F0aW9uJywgJ29jdGV0LXN0cmVhbScsIGN0ZT0nOGJpdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgIiIiKS5lbmNvZGUoJ2FzY2lpJykgKworICAgICAgICAgICAgYidiXHhGRmd1c1x0Y29uXG50XG5lbnRcbicgKworICAgICAgICAgICAgYid6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enpcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZChkZWNvZGU9VHJ1ZSksIGNvbnRlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudCgpLCBjb250ZW50KQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfZnJvbV9oZWFkZXJfb2JqZWN0cyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIGhlYWRlcl9mYWN0b3J5ID0gc2VsZi5wb2xpY3kuaGVhZGVyX2ZhY3RvcnkKKyAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJUbyIsICJmb29AZXhhbXBsZS5jb20iKSwKKyAgICAgICAgICAgIGhlYWRlcl9mYWN0b3J5KCJGcm9tIiwgImZvb0BleGFtcGxlLmNvbSIpLAorICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoIlN1YmplY3QiLCAiSSdtIHRhbGtpbmcgdG8gbXlzZWxmLiIpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgRnJvbTogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICBTdWJqZWN0OiBJJ20gdGFsa2luZyB0byBteXNlbGYuCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFNpbXBsZSBtZXNzYWdlLgorICAgICAgICAgICAgIiIiKSkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX2Zyb21fc3RyaW5ncyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAiWC1Gb28tSGVhZGVyOiBmb28iLAorICAgICAgICAgICAgIlgtQmFyLUhlYWRlcjogYmFyIiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisgICAgICAgICAgICBYLUZvby1IZWFkZXI6IGZvbworICAgICAgICAgICAgWC1CYXItSGVhZGVyOiBiYXIKKyAgICAgICAgICAgIENvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IDdiaXQKKworICAgICAgICAgICAgU2ltcGxlIG1lc3NhZ2UuCisgICAgICAgICAgICAiIiIpKQorCisgICAgZGVmIHRlc3Rfc2V0X2hlYWRlcnNfd2l0aF9pbnZhbGlkX2R1cGxpY2F0ZV9zdHJpbmdfaGVhZGVyX3JhaXNlcyhzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIGNvbnRlbnQgPSAiU2ltcGxlIG1lc3NhZ2UuXG4iCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnQ29udGVudC1UeXBlJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICJDb250ZW50LVR5cGU6IGZvby9iYXIiLCkKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zZXRfaGVhZGVyc193aXRoX2ludmFsaWRfZHVwbGljYXRlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ0NvbnRlbnQtVHlwZScpOgorICAgICAgICAgICAgcmF3X2RhdGFfbWFuYWdlci5zZXRfY29udGVudChtLCBjb250ZW50LCBoZWFkZXJzPSgKKyAgICAgICAgICAgICAgICBoZWFkZXJfZmFjdG9yeSgiQ29udGVudC1UeXBlIiwgIiBmb28vYmFyIiksKQorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX3N0cmluZ19oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdhQGZhaXJseUBAaW52YWxpZEBhZGRyZXNzJyk6CisgICAgICAgICAgICByYXdfZGF0YV9tYW5hZ2VyLnNldF9jb250ZW50KG0sIGNvbnRlbnQsIGhlYWRlcnM9KAorICAgICAgICAgICAgICAgICdUbzogYUBmYWlybHlAQGludmFsaWRAYWRkcmVzcycsKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHByaW50KG1bJ1RvJ10uZGVmZWN0cykKKworICAgIGRlZiB0ZXN0X3NldF9oZWFkZXJzX3dpdGhfZGVmZWN0aXZlX2hlYWRlcl9oZWFkZXJfcmFpc2VzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgY29udGVudCA9ICJTaW1wbGUgbWVzc2FnZS5cbiIKKyAgICAgICAgaGVhZGVyX2ZhY3RvcnkgPSBzZWxmLnBvbGljeS5oZWFkZXJfZmFjdG9yeQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKToKKyAgICAgICAgICAgIHJhd19kYXRhX21hbmFnZXIuc2V0X2NvbnRlbnQobSwgY29udGVudCwgaGVhZGVycz0oCisgICAgICAgICAgICAgICAgaGVhZGVyX2ZhY3RvcnkoJ1RvJywgJ2FAZmFpcmx5QEBpbnZhbGlkQGFkZHJlc3MnKSwpCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcHJpbnQobVsnVG8nXS5kZWZlY3RzKQorCisgICAgZGVmIHRlc3Rfc2V0X2Rpc3Bvc2l0aW9uX2lubGluZShzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgdGVzdF9zZXRfZGlzcG9zaXRpb25fYXR0YWNobWVudChzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGRpc3Bvc2l0aW9uPSdhdHRhY2htZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdhdHRhY2htZW50JykKKworICAgIGRlZiB0ZXN0X3NldF9kaXNwb3NpdGlvbl9mb28oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBtLnNldF9jb250ZW50KCdmb28nLCBkaXNwb3NpdGlvbj0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdmb28nKQorCisgICAgIyBYWFg6IHdlIHNob3VsZCBoYXZlIGEgJ3N0cmljdCcgcG9saWN5IG1vZGUgKGJleW9uZCByYWlzZV9vbl9kZWZlY3QpIHRoYXQKKyAgICAjIHdvdWxkIGNhdXNlICdmb28nIGFib3ZlIHRvIHJhaXNlLgorCisgICAgZGVmIHRlc3Rfc2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J2Jhci50eHQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWU9ImJhci50eHQiJykKKworICAgIGRlZiB0ZXN0X3NldF9maWxlbmFtZV9hbmRfZGlzcG9zaXRpb25faW5saW5lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiYXIudHh0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtWydDb250ZW50LURpc3Bvc2l0aW9uJ10sICdpbmxpbmU7IGZpbGVuYW1lPSJiYXIudHh0IicpCisKKyAgICBkZWYgdGVzdF9zZXRfbm9uX2FzY2lpX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgZmlsZW5hbWU9J8OhYsOhcsOuLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMobSksIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi04IgorICAgICAgICAgICAgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogN2JpdAorICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsKKyAgICAgICAgICAgICBmaWxlbmFtZSo9dXRmLTgnJyVDMyVBMWIlQzMlQTFyJUMzJUFFLnR4dAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKworICAgICAgICAgICAgZm9vCisgICAgICAgICAgICAiIiIpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGNvbnRlbnRfb2JqZWN0X3BhcmFtcyA9IHsKKyAgICAgICAgJ3RleHRfcGxhaW4nOiAoJ2NvbnRlbnQnLCAoKSksCisgICAgICAgICd0ZXh0X2h0bWwnOiAoJ2NvbnRlbnQnLCAoJ2h0bWwnLCkpLAorICAgICAgICAnYXBwbGljYXRpb25fb2N0ZXRfc3RyZWFtJzogKGInY29udGVudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhcHBsaWNhdGlvbicsICdvY3RldF9zdHJlYW0nKSksCisgICAgICAgICdpbWFnZV9qcGVnJzogKGInY29udGVudCcsICgnaW1hZ2UnLCAnanBlZycpKSwKKyAgICAgICAgJ21lc3NhZ2VfcmZjODIyJzogKG1lc3NhZ2UoKSwgKCkpLAorICAgICAgICAnbWVzc2FnZV9leHRlcm5hbF9ib2R5JzogKG1lc3NhZ2UoKSwgKCdleHRlcm5hbC1ib2R5JywpKSwKKyAgICAgICAgfQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2hlYWRlcl9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGhlYWRlcnM9KAorICAgICAgICAgICAgJ1RvOiBmb29AZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgJ0Zyb206IGJhckBzaW1wbGUubmV0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsndG8nXSwgJ2Zvb0BleGFtcGxlLmNvbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnZnJvbSddLCAnYmFyQHNpbXBsZS5uZXQnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX2Rpc3Bvc2l0aW9uX2lubGluZV9yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIGRpc3Bvc2l0aW9uPSdpbmxpbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfbm9uX2FzY2lpX2ZpbGVuYW1lX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgZGlzcG9zaXRpb249J2lubGluZScsIGZpbGVuYW1lPSdiw6FyLnR4dCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnaW5saW5lOyBmaWxlbmFtZT0iYsOhci50eHQiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9maWxlbmFtZSgpLCAiYsOhci50eHQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ0NvbnRlbnQtRGlzcG9zaXRpb24nXS5wYXJhbXNbJ2ZpbGVuYW1lJ10sICJiw6FyLnR4dCIpCisKKyAgICBkZWYgY29udGVudF9vYmplY3RfYXNfY2lkX3JlY2VpdmVyKHNlbGYsIG9iaiwgbWltZXR5cGUpOgorICAgICAgICBtID0gc2VsZi5fbWFrZV9tZXNzYWdlKCkKKyAgICAgICAgbS5zZXRfY29udGVudChvYmosICptaW1ldHlwZSwgY2lkPSdzb21lX3JhbmRvbV9zdHVmZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1JRCddLCAnc29tZV9yYW5kb21fc3R1ZmYnKQorCisgICAgZGVmIGNvbnRlbnRfb2JqZWN0X2FzX3BhcmFtc19yZWNlaXZlcihzZWxmLCBvYmosIG1pbWV0eXBlKToKKyAgICAgICAgbSA9IHNlbGYuX21ha2VfbWVzc2FnZSgpCisgICAgICAgIHBhcmFtcyA9IHsnZm9vJzogJ2LDoXInLCAnYWJjJzogJ3h5eid9CisgICAgICAgIG0uc2V0X2NvbnRlbnQob2JqLCAqbWltZXR5cGUsIHBhcmFtcz1wYXJhbXMpCisgICAgICAgIGlmIGlzaW5zdGFuY2Uob2JqLCBzdHIpOgorICAgICAgICAgICAgcGFyYW1zWydjaGFyc2V0J10gPSAndXRmLTgnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnQ29udGVudC1UeXBlJ10ucGFyYW1zLCBwYXJhbXMpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9lbWFpbC5weQppbmRleCA1MWZlNzU2Li44NGY0ZTM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfZW1haWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2VtYWlsLnB5CkBAIC0xMCw2ICsxMCwxMSBAQAogCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTywgQnl0ZXNJTwogZnJvbSBpdGVydG9vbHMgaW1wb3J0IGNoYWluCitmcm9tIHJhbmRvbSBpbXBvcnQgY2hvaWNlCit0cnk6CisgICAgZnJvbSB0aHJlYWRpbmcgaW1wb3J0IFRocmVhZAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGZyb20gZHVtbXlfdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQKIAogaW1wb3J0IGVtYWlsCiBpbXBvcnQgZW1haWwucG9saWN5CkBAIC0zMyw3ICszOCw3IEBACiBmcm9tIGVtYWlsIGltcG9ydCBiYXNlNjRtaW1lCiBmcm9tIGVtYWlsIGltcG9ydCBxdW9wcmltaW1lCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB1bmxpbmsKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB1bmxpbmssIHN0YXJ0X3RocmVhZHMKIGZyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBvcGVuZmlsZSwgVGVzdEVtYWlsQmFzZQogCiAjIFRoZXNlIGltcG9ydHMgYXJlIGRvY3VtZW50ZWQgdG8gd29yaywgYnV0IHdlIGFyZSB0ZXN0aW5nIHRoZW0gdXNpbmcgYQpAQCAtMTI0LDYgKzEyOSwxNCBAQAogICAgICAgICBtc2cuc2V0X3BheWxvYWQoW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmdldF9wYXlsb2FkKCksIFtdKQogCisgICAgZGVmIHRlc3RfYXR0YWNoX3doZW5fcGF5bG9hZF9pc19zdHJpbmcoc2VsZik6CisgICAgICAgIG1zZyA9IE1lc3NhZ2UoKQorICAgICAgICBtc2dbJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC9taXhlZCcKKyAgICAgICAgbXNnLnNldF9wYXlsb2FkKCdzdHJpbmcgcGF5bG9hZCcpCisgICAgICAgIHN1Yl9tc2cgPSBNSU1FTWVzc2FnZShNZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAiW0FhXXR0YWNoLipub24tbXVsdGlwYXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cuYXR0YWNoLCBzdWJfbXNnKQorCiAgICAgZGVmIHRlc3RfZ2V0X2NoYXJzZXRzKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKIApAQCAtMjgxLDE1ICsyOTQsNDIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJbignVE8nLCBtc2cpCiAKICAgICBkZWYgdGVzdF9hc19zdHJpbmcoc2VsZik6Ci0gICAgICAgIGVxID0gc2VsZi5uZGlmZkFzc2VydEVxdWFsCiAgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCiAgICAgICAgIHdpdGggb3BlbmZpbGUoJ21zZ18wMS50eHQnKSBhcyBmcDoKICAgICAgICAgICAgIHRleHQgPSBmcC5yZWFkKCkKLSAgICAgICAgZXEodGV4dCwgc3RyKG1zZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgc3RyKG1zZykpCiAgICAgICAgIGZ1bGxyZXByID0gbXNnLmFzX3N0cmluZyh1bml4ZnJvbT1UcnVlKQogICAgICAgICBsaW5lcyA9IGZ1bGxyZXByLnNwbGl0KCdcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lc1swXS5zdGFydHN3aXRoKCdGcm9tICcpKQotICAgICAgICBlcSh0ZXh0LCBOTC5qb2luKGxpbmVzWzE6XSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGV4dCwgTkwuam9pbihsaW5lc1sxOl0pKQorCisgICAgZGVmIHRlc3RfYXNfc3RyaW5nX3BvbGljeShzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgbmV3cG9saWN5ID0gbXNnLnBvbGljeS5jbG9uZShsaW5lc2VwPSdcclxuJykKKyAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfc3RyaW5nKHBvbGljeT1uZXdwb2xpY3kpCisgICAgICAgIHMgPSBTdHJpbmdJTygpCisgICAgICAgIGcgPSBHZW5lcmF0b3IocywgcG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgZy5mbGF0dGVuKG1zZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdWxscmVwciwgcy5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfYXNfYnl0ZXMoc2VsZik6CisgICAgICAgIG1zZyA9IHNlbGYuX21zZ29iaignbXNnXzAxLnR4dCcpCisgICAgICAgIHdpdGggb3BlbmZpbGUoJ21zZ18wMS50eHQnKSBhcyBmcDoKKyAgICAgICAgICAgIGRhdGEgPSBmcC5yZWFkKCkuZW5jb2RlKCdhc2NpaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYnl0ZXMobXNnKSkKKyAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfYnl0ZXModW5peGZyb209VHJ1ZSkKKyAgICAgICAgbGluZXMgPSBmdWxscmVwci5zcGxpdChiJ1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpbmVzWzBdLnN0YXJ0c3dpdGgoYidGcm9tICcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGInXG4nLmpvaW4obGluZXNbMTpdKSkKKworICAgIGRlZiB0ZXN0X2FzX2J5dGVzX3BvbGljeShzZWxmKToKKyAgICAgICAgbXNnID0gc2VsZi5fbXNnb2JqKCdtc2dfMDEudHh0JykKKyAgICAgICAgbmV3cG9saWN5ID0gbXNnLnBvbGljeS5jbG9uZShsaW5lc2VwPSdcclxuJykKKyAgICAgICAgZnVsbHJlcHIgPSBtc2cuYXNfYnl0ZXMocG9saWN5PW5ld3BvbGljeSkKKyAgICAgICAgcyA9IEJ5dGVzSU8oKQorICAgICAgICBnID0gQnl0ZXNHZW5lcmF0b3Iocyxwb2xpY3k9bmV3cG9saWN5KQorICAgICAgICBnLmZsYXR0ZW4obXNnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bGxyZXByLCBzLmdldHZhbHVlKCkpCiAKICAgICAjIHRlc3RfaGVhZGVycmVnaXN0cnkuVGVzdENvbnRlbnRUeXBlSGVhZGVyLmJhZF9wYXJhbXMKICAgICBkZWYgdGVzdF9iYWRfcGFyYW0oc2VsZik6CkBAIC03NDIsOCArNzgyLDE1IEBACiAgICAgICAgICMgd2hvc2Ugb3V0cHV0IGNoYXJhY3RlciBzZXQgaXMgN2JpdCBnZXRzIGEgdHJhbnNmZXItZW5jb2RpbmcKICAgICAgICAgIyBvZiA3Yml0LgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgbXNnID0gTUlNRVRleHQoJ+aWhycsIF9jaGFyc2V0PSdldWMtanAnKQorICAgICAgICBtc2cgPSBNSU1FVGV4dCgn5paHXG4nLCBfY2hhcnNldD0nZXVjLWpwJykKICAgICAgICAgZXEobXNnWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10sICc3Yml0JykKKyAgICAgICAgZXEobXNnLmFzX3N0cmluZygpLCB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0iaXNvLTIwMjItanAiCisgICAgICAgICAgICBDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiA3Yml0CisKKyAgICAgICAgICAgIFx4MWIkQko4XHgxYihCCisgICAgICAgICAgICAiIiIpKQogCiAgICAgZGVmIHRlc3RfcXBfZW5jb2RlX2xhdGluMShzZWxmKToKICAgICAgICAgbXNnID0gTUlNRVRleHQoJ1x4ZTFceGY2XG4nLCAndGV4dCcsICdJU08tODg1OS0xJykKQEAgLTI5OTAsNyArMzAzNyw3IEBACiAgICAgICAgICMgaXNzdWUgMTY5MDYwOC4gIGVtYWlsLnV0aWxzLmZvcm1hdGFkZHIoKSBzaG91bGQgYmUgcmZjMjA0NyBhd2FyZS4KICAgICAgICAgbmFtZSA9ICJIXHUwMGU0bnMgV1x1MDBmY3JzdCIKICAgICAgICAgYWRkciA9ICdwZXJzb25AZG9tLmFpbicKLSAgICAgICAgIyBBIG9iamVjdCB3aXRob3V0IGEgaGVhZGVyX2VuY29kZSBtZXRob2Q6CisgICAgICAgICMgQW4gb2JqZWN0IHdpdGhvdXQgYSBoZWFkZXJfZW5jb2RlIG1ldGhvZDoKICAgICAgICAgYmFkX2NoYXJzZXQgPSBvYmplY3QoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgdXRpbHMuZm9ybWF0YWRkciwgKG5hbWUsIGFkZHIpLAogICAgICAgICAgICAgYmFkX2NoYXJzZXQpCkBAIC0zMTA5LDYgKzMxNTYsMjggQEAKICAgICAgICAgYWRkcnMgPSB1dGlscy5nZXRhZGRyZXNzZXMoWydVc2VyICgobmVzdGVkIGNvbW1lbnQpKSA8Zm9vQGJhci5jb20+J10pCiAgICAgICAgIGVxKGFkZHJzWzBdWzFdLCAnZm9vQGJhci5jb20nKQogCisgICAgZGVmIHRlc3RfbWFrZV9tc2dpZF9jb2xsaXNpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWFrZV9tc2dpZCB1bmlxdWVuZXNzLCBldmVuIHdpdGggbXVsdGlwbGUgdGhyZWFkcworICAgICAgICBjbGFzcyBNc2dpZHNUaHJlYWQoVGhyZWFkKToKKyAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgIyBnZW5lcmF0ZSBtc2dpZHMgZm9yIDMgc2Vjb25kcworICAgICAgICAgICAgICAgIHNlbGYubXNnaWRzID0gW10KKyAgICAgICAgICAgICAgICBhcHBlbmQgPSBzZWxmLm1zZ2lkcy5hcHBlbmQKKyAgICAgICAgICAgICAgICBtYWtlX21zZ2lkID0gdXRpbHMubWFrZV9tc2dpZAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgY2xvY2sgPSB0aW1lLm1vbm90b25pYworICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY2xvY2sgPSB0aW1lLnRpbWUKKyAgICAgICAgICAgICAgICB0ZmluID0gY2xvY2soKSArIDMuMAorICAgICAgICAgICAgICAgIHdoaWxlIGNsb2NrKCkgPCB0ZmluOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQobWFrZV9tc2dpZChkb21haW49J3Rlc3Rkb21haW4tc3RyaW5nJykpCisKKyAgICAgICAgdGhyZWFkcyA9IFtNc2dpZHNUaHJlYWQoKSBmb3IgaSBpbiByYW5nZSg1KV0KKyAgICAgICAgd2l0aCBzdGFydF90aHJlYWRzKHRocmVhZHMpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBhbGxfaWRzID0gc3VtKFt0Lm1zZ2lkcyBmb3IgdCBpbiB0aHJlYWRzXSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNldChhbGxfaWRzKSksIGxlbihhbGxfaWRzKSkKKwogICAgIGRlZiB0ZXN0X3V0aWxzX3F1b3RlX3VucXVvdGUoc2VsZik6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAogICAgICAgICBtc2cgPSBNZXNzYWdlKCkKQEAgLTMzMTEsMTYgKzMzODAsNzcgQEAKICAgICAgICAgICAgIGJzZi5wdXNoKGlsKQogICAgICAgICAgICAgbnQgKz0gbgogICAgICAgICAgICAgbjEgPSAwCi0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIG9sID0gYnNmLnJlYWRsaW5lKCkKLSAgICAgICAgICAgICAgICBpZiBvbCA9PSBOZWVkTW9yZURhdGE6Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmb3Igb2wgaW4gaXRlcihic2YucmVhZGxpbmUsIE5lZWRNb3JlRGF0YSk6CiAgICAgICAgICAgICAgICAgb20uYXBwZW5kKG9sKQogICAgICAgICAgICAgICAgIG4xICs9IDEKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgbjEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9tKSwgbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJycuam9pbihbaWwgZm9yIGlsLCBuIGluIGltdF0pLCAnJy5qb2luKG9tKSkKIAorICAgIGRlZiB0ZXN0X3B1c2hfcmFuZG9tKHNlbGYpOgorICAgICAgICBmcm9tIGVtYWlsLmZlZWRwYXJzZXIgaW1wb3J0IEJ1ZmZlcmVkU3ViRmlsZSwgTmVlZE1vcmVEYXRhCisKKyAgICAgICAgbiA9IDEwMDAwCisgICAgICAgIGNodW5rc2l6ZSA9IDUKKyAgICAgICAgY2hhcnMgPSAnYWJjZCBcdFxyXG4nCisKKyAgICAgICAgcyA9ICcnLmpvaW4oY2hvaWNlKGNoYXJzKSBmb3IgaSBpbiByYW5nZShuKSkgKyAnXG4nCisgICAgICAgIHRhcmdldCA9IHMuc3BsaXRsaW5lcyhUcnVlKQorCisgICAgICAgIGJzZiA9IEJ1ZmZlcmVkU3ViRmlsZSgpCisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBjaHVua3NpemUpOgorICAgICAgICAgICAgY2h1bmsgPSBzW2k6aStjaHVua3NpemVdCisgICAgICAgICAgICBic2YucHVzaChjaHVuaykKKyAgICAgICAgICAgIGxpbmVzLmV4dGVuZChpdGVyKGJzZi5yZWFkbGluZSwgTmVlZE1vcmVEYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgdGFyZ2V0KQorCisKK2NsYXNzIFRlc3RGZWVkUGFyc2VycyhUZXN0RW1haWxCYXNlKToKKworICAgIGRlZiBwYXJzZShzZWxmLCBjaHVua3MpOgorICAgICAgICBmcm9tIGVtYWlsLmZlZWRwYXJzZXIgaW1wb3J0IEZlZWRQYXJzZXIKKyAgICAgICAgZmVlZHBhcnNlciA9IEZlZWRQYXJzZXIoKQorICAgICAgICBmb3IgY2h1bmsgaW4gY2h1bmtzOgorICAgICAgICAgICAgZmVlZHBhcnNlci5mZWVkKGNodW5rKQorICAgICAgICByZXR1cm4gZmVlZHBhcnNlci5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9oZWFkZXJfbmFtZV9oYW5kbGVkKHNlbGYpOgorICAgICAgICAjIElzc3VlIDE5OTk2CisgICAgICAgIG1zZyA9IHNlbGYucGFyc2UoIkZpcnN0OiB2YWxcbjogYmFkXG5TZWNvbmQ6IHZhbCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnWydGaXJzdCddLCAndmFsJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2dbJ1NlY29uZCddLCAndmFsJykKKworICAgIGRlZiB0ZXN0X25ld2xpbmVzKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5wYXJzZShbJ2E6XG5iOlxyYzpcclxuZDpcbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ua2V5cygpLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOlxuYjpccmM6XHJcbmQ6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5rZXlzKCksIFsnYScsICdiJywgJ2MnLCAnZCddKQorICAgICAgICBtID0gc2VsZi5wYXJzZShbJ2E6XHJiJywgJ2M6XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmtleXMoKSwgWydhJywgJ2JjJ10pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpccicsICdiOlxuJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5rZXlzKCksIFsnYScsICdiJ10pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpccicsICdcbmI6XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmtleXMoKSwgWydhJywgJ2InXSkKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOlx4ODViOlx1MjAyOGM6XG4nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksIFsoJ2EnLCAnXHg4NScpLCAoJ2InLCAnXHUyMDI4JyksICgnYycsICcnKV0pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpccicsICdiOlx4ODUnLCAnYzpcbiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwgWygnYScsICcnKSwgKCdiJywgJ1x4ODUnKSwgKCdjJywgJycpXSkKKworICAgIGRlZiB0ZXN0X2xvbmdfbGluZXMoc2VsZik6CisgICAgICAgICMgRXhwZWN0ZWQgcGVhayBtZW1vcnkgdXNlIG9uIDMyLWJpdCBwbGF0Zm9ybTogNipOKk0gYnl0ZXMuCisgICAgICAgIE0sIE4gPSAxMDAwLCAyMDAwMAorICAgICAgICBtID0gc2VsZi5wYXJzZShbJ2E6YlxuXG4nXSArIFsneCcqTV0gKiBOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwgWygnYScsICdiJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoKSwgJ3gnKk0qTikKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOmJcclxyJ10gKyBbJ3gnKk1dICogTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLml0ZW1zKCksIFsoJ2EnLCAnYicpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9wYXlsb2FkKCksICd4JypNKk4pCisgICAgICAgIG0gPSBzZWxmLnBhcnNlKFsnYTpiXHJcciddICsgWyd4JypNKydceDg1J10gKiBOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwgWygnYScsICdiJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X3BheWxvYWQoKSwgKCd4JypNKydceDg1JykqTikKKyAgICAgICAgbSA9IHNlbGYucGFyc2UoWydhOlxyJywgJ2I6ICddICsgWyd4JypNXSAqIE4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5pdGVtcygpLCBbKCdhJywgJycpLCAoJ2InLCAneCcqTSpOKV0pCiAKIAogY2xhc3MgVGVzdFBhcnNlcnMoVGVzdEVtYWlsQmFzZSk6CkBAIC0zMzQ4LDYgKzM0NzgsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG1zZy5nZXRfcGF5bG9hZCgpLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtc2cuZ2V0X3BheWxvYWQoZGVjb2RlPVRydWUpLCBieXRlcykKIAorICAgIGRlZiB0ZXN0X2J5dGVzX3BhcnNlcl9kb2VzX25vdF9jbG9zZV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW5maWxlKCdtc2dfMDIudHh0JywgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBlbWFpbC5wYXJzZXIuQnl0ZXNQYXJzZXIoKS5wYXJzZShmcCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZnAuY2xvc2VkKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfcGFyc2VyX29uX2V4Y2VwdGlvbl9kb2VzX25vdF9jbG9zZV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW5maWxlKCdtc2dfMTUudHh0JywgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBieXRlc1BhcnNlciA9IGVtYWlsLnBhcnNlci5CeXRlc1BhcnNlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZW1haWwuZXJyb3JzLlN0YXJ0Qm91bmRhcnlOb3RGb3VuZERlZmVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzUGFyc2VyKHBvbGljeT1lbWFpbC5wb2xpY3kuc3RyaWN0KS5wYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmcC5jbG9zZWQpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfZG9lc19ub3RfY2xvc2VfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzAyLnR4dCcsICdyJykgYXMgZnA6CisgICAgICAgICAgICBlbWFpbC5wYXJzZXIuUGFyc2VyKCkucGFyc2UoZnApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZwLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X3BhcnNlcl9vbl9leGNlcHRpb25fZG9lc19ub3RfY2xvc2VfZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuZmlsZSgnbXNnXzE1LnR4dCcsICdyJykgYXMgZnA6CisgICAgICAgICAgICBwYXJzZXIgPSBlbWFpbC5wYXJzZXIuUGFyc2VyCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhlbWFpbC5lcnJvcnMuU3RhcnRCb3VuZGFyeU5vdEZvdW5kRGVmZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyKHBvbGljeT1lbWFpbC5wb2xpY3kuc3RyaWN0KS5wYXJzZSwgZnApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZwLmNsb3NlZCkKKwogICAgIGRlZiB0ZXN0X3doaXRlc3BhY2VfY29udGludWF0aW9uKHNlbGYpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgIyBUaGlzIG1lc3NhZ2UgY29udGFpbnMgYSBsaW5lIGFmdGVyIHRoZSBTdWJqZWN0OiBoZWFkZXIgdGhhdCBoYXMgb25seQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X2hlYWRlcnJlZ2lzdHJ5LnB5CmluZGV4IGFkYWYzZTguLjU1ZWNkZWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9oZWFkZXJyZWdpc3RyeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfaGVhZGVycmVnaXN0cnkucHkKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCB0ZXh0d3JhcAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdHlwZXMKIGZyb20gZW1haWwgaW1wb3J0IGVycm9ycwogZnJvbSBlbWFpbCBpbXBvcnQgcG9saWN5CiBmcm9tIGVtYWlsLm1lc3NhZ2UgaW1wb3J0IE1lc3NhZ2UKQEAgLTIzNSw2ICsyMzYsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubWFpbnR5cGUsIG1haW50eXBlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguc3VidHlwZSwgc3VidHlwZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnBhcmFtcywgcGFybWRpY3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGgucGFyYW1zWydhYmMnXSA9ICd4eXonICAgIyBwYXJhbXMgaXMgcmVhZC1vbmx5LgogICAgICAgICBzZWxmLmFzc2VydERlZmVjdHNFcXVhbChoLmRlZmVjdHMsIGRlZmVjdHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCwgZGVjb2RlZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmZvbGQocG9saWN5PXBvbGljeS5kZWZhdWx0KSwgZm9sZGVkKQpAQCAtNjYxLDcgKzY2NCw3IEBACiAgICAgICAgICAgICAndGV4dC9wbGFpbjsgbmFtZT0iYXNjaWlfaXNfdGhlX2RlZmF1bHQiJyksCiAKICAgICAgICAgJ3JmYzIyMzFfYmFkX2NoYXJhY3Rlcl9pbl9jaGFyc2V0X3BhcmFtZXRlcl92YWx1ZSc6ICgKLSAgICAgICAgICAgICJ0ZXh0L3BsYWluOyBjaGFyc2V0Kj1hc2NpaScndXRmLTglRTIlODAlOUQiLAorICAgICAgICAgICAgInRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVGMSVGMiVGMyIsCiAgICAgICAgICAgICAndGV4dC9wbGFpbicsCiAgICAgICAgICAgICAndGV4dCcsCiAgICAgICAgICAgICAncGxhaW4nLApAQCAtNjY5LDYgKzY3MiwxOCBAQAogICAgICAgICAgICAgW2Vycm9ycy5VbmRlY29kYWJsZUJ5dGVzRGVmZWN0XSwKICAgICAgICAgICAgICd0ZXh0L3BsYWluOyBjaGFyc2V0PSJ1dGYtOFx1RkZGRFx1RkZGRFx1RkZGRCInKSwKIAorICAgICAgICAncmZjMjIzMV91dGZfOF9pbl9zdXBwb3NlZGx5X2FzY2lpX2NoYXJzZXRfcGFyYW1ldGVyX3ZhbHVlJzogKAorICAgICAgICAgICAgInRleHQvcGxhaW47IGNoYXJzZXQqPWFzY2lpJyd1dGYtOCVFMiU4MCU5RCIsCisgICAgICAgICAgICAndGV4dC9wbGFpbicsCisgICAgICAgICAgICAndGV4dCcsCisgICAgICAgICAgICAncGxhaW4nLAorICAgICAgICAgICAgeydjaGFyc2V0JzogJ3V0Zi044oCdJ30sCisgICAgICAgICAgICBbZXJyb3JzLlVuZGVjb2RhYmxlQnl0ZXNEZWZlY3RdLAorICAgICAgICAgICAgJ3RleHQvcGxhaW47IGNoYXJzZXQ9InV0Zi044oCdIicsCisgICAgICAgICAgICApLAorICAgICAgICAgICAgIyBYWFg6IGlmIHRoZSBhYm92ZSB3ZXJlICpyZSpmb2xkZWQsIGl0IHdvdWxkIGdldCB0YWdnZWQgYXMgdXRmLTgKKyAgICAgICAgICAgICMgaW5zdGVhZCBvZiBhc2NpaSBpbiB0aGUgcGFyYW0sIHNpbmNlIGl0IG5vdyBjb250YWlucyBub24tQVNDSUkuCisKICAgICAgICAgJ3JmYzIyMzFfZW5jb2RlZF90aGVuX3VuZW5jb2RlZF9zZWdtZW50cyc6ICgKICAgICAgICAgICAgICgnYXBwbGljYXRpb24veC1mb287JwogICAgICAgICAgICAgICAgICdcdG5hbWUqMCo9InVzLWFzY2lpXCdlbi11c1wnTXkiOycKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9tZXNzYWdlLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkKaW5kZXggOGNjM2Y4MC4uNTBlMWE2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X21lc3NhZ2UucHkKQEAgLTEsNiArMSwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGVtYWlsIGltcG9ydCBwb2xpY3kKLWZyb20gdGVzdC50ZXN0X2VtYWlsIGltcG9ydCBUZXN0RW1haWxCYXNlCitpbXBvcnQgdGV4dHdyYXAKK2Zyb20gZW1haWwgaW1wb3J0IHBvbGljeSwgbWVzc2FnZV9mcm9tX3N0cmluZworZnJvbSBlbWFpbC5tZXNzYWdlIGltcG9ydCBFbWFpbE1lc3NhZ2UsIE1JTUVQYXJ0Citmcm9tIHRlc3QudGVzdF9lbWFpbCBpbXBvcnQgVGVzdEVtYWlsQmFzZSwgcGFyYW1ldGVyaXplCisKKworIyBIZWxwZXIuCitkZWYgZmlyc3QoaXRlcmFibGUpOgorICAgIHJldHVybiBuZXh0KGZpbHRlcihsYW1iZGEgeDogeCBpcyBub3QgTm9uZSwgaXRlcmFibGUpLCBOb25lKQogCiAKIGNsYXNzIFRlc3QoVGVzdEVtYWlsQmFzZSk6CkBAIC0xMyw2ICsyMCw3NjQgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIG1bJ1RvJ10gPSAneHl6QGFiYycKIAorICAgIGRlZiB0ZXN0X3JmYzIwNDNfYXV0b19kZWNvZGVkX2FuZF9lbWFpbG1lc3NhZ2VfdXNlZChzZWxmKToKKyAgICAgICAgbSA9IG1lc3NhZ2VfZnJvbV9zdHJpbmcodGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgIFN1YmplY3Q6IEF5b25zIGFzcGVyZ2VzIHBvdXIgbGUgPT91dGYtOD9xP2Q9QzM9QTlqZXVuZXI/PQorICAgICAgICAgICAgRnJvbTogPT91dGYtOD9xP1BlcD1DMz1BOT89IExlIFBldyA8cGVwZUBleGFtcGxlLmNvbT4KKyAgICAgICAgICAgIFRvOiAiUGVuZWxvcGUgUHVzc3ljYXQiIDwicGVuZWxvcGVAZXhhbXBsZS5jb20iPgorICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjsgY2hhcnNldD0idXRmLTgiCisKKyAgICAgICAgICAgIHNhbXBsZSB0ZXh0CisgICAgICAgICAgICAiIiIpLCBwb2xpY3k9cG9saWN5LmRlZmF1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnc3ViamVjdCddLCAiQXlvbnMgYXNwZXJnZXMgcG91ciBsZSBkw6lqZXVuZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ2Zyb20nXSwgIlBlcMOpIExlIFBldyA8cGVwZUBleGFtcGxlLmNvbT4iKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobSwgRW1haWxNZXNzYWdlKQorCisKK0BwYXJhbWV0ZXJpemUKK2NsYXNzIFRlc3RFbWFpbE1lc3NhZ2VCYXNlOgorCisgICAgcG9saWN5ID0gcG9saWN5LmRlZmF1bHQKKworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGEgdHJpcGxlIChyZWxhdGVkLCBodG1sLCBwbGFpbikgb2YgaW5kaWNlcyBpbnRvIHRoZQorICAgICMgbGlzdCByZXR1cm5lZCBieSAnd2FsaycgY2FsbGVkIG9uIGEgTWVzc2FnZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSB0aGlyZC4KKyAgICAjIFRoZSBpbmRpY2VzIGluZGljYXRlIHdoaWNoIHBhcnQgc2hvdWxkIG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIHBhcnQtdHlwZQorICAgICMgd2hlbiBwYXNzZWQgdG8gZ2V0X2JvZHkgKGllOiB0aGUgImZpcnN0IiBwYXJ0IG9mIHRoYXQgdHlwZSBpbiB0aGUKKyAgICAjIG1lc3NhZ2UpLiAgVGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGxpc3Qgb2YgaW5kaWNlcyBpbnRvIHRoZSAnd2FsaycgbGlzdAorICAgICMgb2YgdGhlIGF0dGFjaG1lbnRzIHRoYXQgc2hvdWxkIGJlIHJldHVybmVkIGJ5IGEgY2FsbCB0bworICAgICMgJ2l0ZXJfYXR0YWNobWVudHMnLiAgVGhlIHRoaXJkIGFyZ3VtZW50IGlzIGEgbGlzdCBvZiBpbmRpY2VzIGludG8gJ3dhbGsnCisgICAgIyB0aGF0IHNob3VsZCBiZSByZXR1cm5lZCBieSBhIGNhbGwgdG8gJ2l0ZXJfcGFydHMnLiAgTm90ZSB0aGF0IHRoZSBmaXJzdAorICAgICMgaXRlbSByZXR1cm5lZCBieSAnd2FsaycgaXMgdGhlIE1lc3NhZ2UgaXRzZWxmLgorCisgICAgbWVzc2FnZV9wYXJhbXMgPSB7CisKKyAgICAgICAgJ2VtcHR5X21lc3NhZ2UnOiAoCisgICAgICAgICAgICAoTm9uZSwgTm9uZSwgMCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgIiIpLAorCisgICAgICAgICdub25fbWltZV9wbGFpbic6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCAwKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKworICAgICAgICAgICAgICAgIHNpbXBsZSB0ZXh0IGJvZHkKKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAnbWltZV9ub25fdGV4dCc6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICgpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisKKyAgICAgICAgICAgICAgICBib2d1cyBib2R5LgorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdwbGFpbl9odG1sX2FsdGVybmF0aXZlJzogKAorICAgICAgICAgICAgKE5vbmUsIDIsIDEpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgcHJlYW1ibGUKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICdwbGFpbl9odG1sX21peGVkJzogKAorICAgICAgICAgICAgKE5vbmUsIDIsIDEpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgcHJlYW1ibGUKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ3BsYWluX2h0bWxfYXR0YWNobWVudF9taXhlZCc6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCAxKSwKKyAgICAgICAgICAgICgyLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ2h0bWxfdGV4dF9hdHRhY2htZW50X21peGVkJzogKAorICAgICAgICAgICAgKE5vbmUsIDIsIE5vbmUpLAorICAgICAgICAgICAgKDEsKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IEF0VGFDaG1lbnQKKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAnaHRtbF90ZXh0X2F0dGFjaG1lbnRfaW5saW5lX21peGVkJzogKAorICAgICAgICAgICAgKE5vbmUsIDIsIDEpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBJbkxpbmUKKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogaW5saW5lCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFJGQyAyMzg3CisgICAgICAgICdyZWxhdGVkJzogKAorICAgICAgICAgICAgKDAsIDEsIE5vbmUpLAorICAgICAgICAgICAgKDIsKSwKKyAgICAgICAgICAgICgxLCAyKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9Ij09PSI7IHR5cGU9dGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxPgorCisgICAgICAgICAgICAgICAgYm9ndXMgZGF0YQorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICMgVGhpcyBtZXNzYWdlIHN0cnVjdHVyZSB3aWxsIHByb2JhYmx5IG5ldmVyIGJlIHNlZW4gaW4gdGhlIHdpbGQsIGJ1dAorICAgICAgICAjIGl0IHByb3ZlcyB3ZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRleHQgcGFydHMgYmFzZWQgb24gJ3N0YXJ0Jy4gIFRoZQorICAgICAgICAjIGNvbnRlbnQgd291bGQgbm90LCBvZiBjb3Vyc2UsIGFjdHVhbGx5IHdvcmsgOikKKyAgICAgICAgJ3JlbGF0ZWRfd2l0aF9zdGFydCc6ICgKKyAgICAgICAgICAgICgwLCAyLCBOb25lKSwKKyAgICAgICAgICAgICgxLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSI9PT0iOyB0eXBlPXRleHQvaHRtbDsKKyAgICAgICAgICAgICAgICAgc3RhcnQ9Ijxib2R5PiIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW5jbHVkZT4KKworICAgICAgICAgICAgICAgIHVzZWxlc3MgdGV4dAorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxib2R5PgorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisgICAgICAgICAgICAgICAgPCEtLSNpbmNsdWRlIGZpbGU9IjxpbmNsdWRlPiItLT4KKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworCisgICAgICAgICdtaXhlZF9hbHRlcm5hdGl2ZV9wbGFpbl9yZWxhdGVkJzogKAorICAgICAgICAgICAgKDMsIDQsIDIpLAorICAgICAgICAgICAgKDYsIDcpLAorICAgICAgICAgICAgKDEsIDYsIDcpLAorICAgICAgICAgICAgdGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICBUbzogZm9vQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgTUlNRS1WZXJzaW9uOiAxLjAKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9taXhlZDsgYm91bmRhcnk9Ij09PSIKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvYWx0ZXJuYXRpdmU7IGJvdW5kYXJ5PSIrKysiCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9wbGFpbgorCisgICAgICAgICAgICAgICAgc2ltcGxlIGJvZHkKKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvcmVsYXRlZDsgYm91bmRhcnk9Il9fXyIKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L2h0bWwKKworICAgICAgICAgICAgICAgIDxwPnNpbXBsZSBib2R5PC9wPgorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtSUQ6IDxpbWFnZTFAY2lkPgorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tX19fLS0KKworICAgICAgICAgICAgICAgIC0tKysrLS0KKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IGltYWdlL2pwZworICAgICAgICAgICAgICAgIENvbnRlbnQtRGlzcG9zaXRpb246IEF0dGFjSG1lblQKKworICAgICAgICAgICAgICAgIGFub3RoZXIgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09LS0KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAjIFRoaXMgc3RydWN0dXJlIHN1Z2dlc3RlZCBieSBTdGVwaGVuIEouIFR1cm5idWxsLi4ubWF5IG5vdCBleGlzdC9iZQorICAgICAgICAjIHN1cHBvcnRlZCBpbiB0aGUgd2lsZCwgYnV0IHdlIHdhbnQgdG8gc3VwcG9ydCBpdC4KKyAgICAgICAgJ21peGVkX3JlbGF0ZWRfYWx0ZXJuYXRpdmVfcGxhaW5faHRtbCc6ICgKKyAgICAgICAgICAgICgxLCA0LCAzKSwKKyAgICAgICAgICAgICg2LCA3KSwKKyAgICAgICAgICAgICgxLCA2LCA3KSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSIrKysiCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L2FsdGVybmF0aXZlOyBib3VuZGFyeT0iX19fIgorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIHNpbXBsZSBib2R5CisKKyAgICAgICAgICAgICAgICAtLV9fXworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogdGV4dC9odG1sCisKKyAgICAgICAgICAgICAgICA8cD5zaW1wbGUgYm9keTwvcD4KKworICAgICAgICAgICAgICAgIC0tX19fLS0KKworICAgICAgICAgICAgICAgIC0tKysrCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LUlEOiA8aW1hZ2UxQGNpZD4KKworICAgICAgICAgICAgICAgIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLSsrKy0tCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CisKKyAgICAgICAgICAgICAgICBhbm90aGVyIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgIyBTYW1lIHRoaW5nLCBidXQgcHJvdmluZyB3ZSBvbmx5IGxvb2sgYXQgdGhlIHJvb3QgcGFydCwgd2hpY2ggaXMgdGhlCisgICAgICAgICMgZmlyc3Qgb25lIGlmIHRoZXJlIGlzbid0IGFueSBzdGFydCBwYXJhbWV0ZXIuICBUaGF0IGlzLCB0aGlzIGlzIGEKKyAgICAgICAgIyBicm9rZW4gcmVsYXRlZC4KKyAgICAgICAgJ21peGVkX3JlbGF0ZWRfYWx0ZXJuYXRpdmVfcGxhaW5faHRtbF93cm9uZ19vcmRlcic6ICgKKyAgICAgICAgICAgICgxLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICg2LCA3KSwKKyAgICAgICAgICAgICgxLCA2LCA3KSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PT0iCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3JlbGF0ZWQ7IGJvdW5kYXJ5PSIrKysiCisKKyAgICAgICAgICAgICAgICAtLSsrKworICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1JRDogPGltYWdlMUBjaWQ+CisKKyAgICAgICAgICAgICAgICBib2d1cyBqcGcgYm9keQorCisgICAgICAgICAgICAgICAgLS0rKysKKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG11bHRpcGFydC9hbHRlcm5hdGl2ZTsgYm91bmRhcnk9Il9fXyIKKworICAgICAgICAgICAgICAgIC0tX19fCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiB0ZXh0L3BsYWluCisKKyAgICAgICAgICAgICAgICBzaW1wbGUgYm9keQorCisgICAgICAgICAgICAgICAgLS1fX18KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvaHRtbAorCisgICAgICAgICAgICAgICAgPHA+c2ltcGxlIGJvZHk8L3A+CisKKyAgICAgICAgICAgICAgICAtLV9fXy0tCisKKyAgICAgICAgICAgICAgICAtLSsrKy0tCisKKyAgICAgICAgICAgICAgICAtLT09PQorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogaW1hZ2UvanBnCisgICAgICAgICAgICAgICAgQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudAorCisgICAgICAgICAgICAgICAgYm9ndXMganBnIGJvZHkKKworICAgICAgICAgICAgICAgIC0tPT09CisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBpbWFnZS9qcGcKKyAgICAgICAgICAgICAgICBDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50CisKKyAgICAgICAgICAgICAgICBhbm90aGVyIGJvZ3VzIGpwZyBib2R5CisKKyAgICAgICAgICAgICAgICAtLT09PS0tCisgICAgICAgICAgICAgICAgIiIiKSksCisKKyAgICAgICAgJ21lc3NhZ2VfcmZjODIyJzogKAorICAgICAgICAgICAgKE5vbmUsIE5vbmUsIE5vbmUpLAorICAgICAgICAgICAgKCksCisgICAgICAgICAgICAoKSwKKyAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiJcCisgICAgICAgICAgICAgICAgVG86IGZvb0BleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIE1JTUUtVmVyc2lvbjogMS4wCisgICAgICAgICAgICAgICAgQ29udGVudC1UeXBlOiBtZXNzYWdlL3JmYzgyMgorCisgICAgICAgICAgICAgICAgVG86IGJhckBleGFtcGxlLmNvbQorICAgICAgICAgICAgICAgIEZyb206IHJvYm90QGV4YW1wLmNvbQorCisgICAgICAgICAgICAgICAgdGhpcyBpcyBhIG1lc3NhZ2UgYm9keS4KKyAgICAgICAgICAgICAgICAiIiIpKSwKKworICAgICAgICAnbWl4ZWRfdGV4dF9tZXNzYWdlX3JmYzgyMic6ICgKKyAgICAgICAgICAgIChOb25lLCBOb25lLCAxKSwKKyAgICAgICAgICAgICgyLCksCisgICAgICAgICAgICAoMSwgMiksCisgICAgICAgICAgICB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorICAgICAgICAgICAgICAgIFRvOiBmb29AZXhhbXBsZS5jb20KKyAgICAgICAgICAgICAgICBNSU1FLVZlcnNpb246IDEuMAorICAgICAgICAgICAgICAgIENvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOyBib3VuZGFyeT0iPT09IgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW4KKworICAgICAgICAgICAgICAgIFlvdXIgbWVzc2FnZSBoYXMgYm91bmNlZCwgc2VyLgorCisgICAgICAgICAgICAgICAgLS09PT0KKyAgICAgICAgICAgICAgICBDb250ZW50LVR5cGU6IG1lc3NhZ2UvcmZjODIyCisKKyAgICAgICAgICAgICAgICBUbzogYmFyQGV4YW1wbGUuY29tCisgICAgICAgICAgICAgICAgRnJvbTogcm9ib3RAZXhhbXAuY29tCisKKyAgICAgICAgICAgICAgICB0aGlzIGlzIGEgbWVzc2FnZSBib2R5LgorCisgICAgICAgICAgICAgICAgLS09PT0tLQorICAgICAgICAgICAgICAgICIiIikpLAorCisgICAgICAgICB9CisKKyAgICBkZWYgbWVzc2FnZV9hc19nZXRfYm9keShzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgYWxscGFydHMgPSBsaXN0KG0ud2FsaygpKQorICAgICAgICBleHBlY3RlZCA9IFtOb25lIGlmIG4gaXMgTm9uZSBlbHNlIGFsbHBhcnRzW25dIGZvciBuIGluIGJvZHlfcGFydHNdCisgICAgICAgIHJlbGF0ZWQgPSAwOyBodG1sID0gMTsgcGxhaW4gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keSgpLCBmaXJzdChleHBlY3RlZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlbGF0ZWQnLCAnaHRtbCcsICdwbGFpbicpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ3JlbGF0ZWQnLCAnaHRtbCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtyZWxhdGVkOmh0bWwrMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdyZWxhdGVkJywgJ3BsYWluJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KFtleHBlY3RlZFtyZWxhdGVkXSwgZXhwZWN0ZWRbcGxhaW5dXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ2h0bWwnLCAncGxhaW4nKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbaHRtbDpwbGFpbisxXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD1bJ3JlbGF0ZWQnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRbcmVsYXRlZF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD1bJ2h0bWwnXSksIGV4cGVjdGVkW2h0bWxdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9WydwbGFpbiddKSwgZXhwZWN0ZWRbcGxhaW5dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdwbGFpbicsICdodG1sJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KGV4cGVjdGVkW3BsYWluOmh0bWwtMTotMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdwbGFpbicsICdyZWxhdGVkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0KFtleHBlY3RlZFtwbGFpbl0sIGV4cGVjdGVkW3JlbGF0ZWRdXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfYm9keShwcmVmZXJlbmNlbGlzdD0oJ2h0bWwnLCAncmVsYXRlZCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdChleHBlY3RlZFtodG1sOjotMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdwbGFpbicsICdodG1sJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoZXhwZWN0ZWRbOjotMV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvZHkocHJlZmVyZW5jZWxpc3Q9KCdodG1sJywgJ3BsYWluJywgJ3JlbGF0ZWQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QoW2V4cGVjdGVkW2h0bWxdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFtwbGFpbl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkW3JlbGF0ZWRdXSkpCisKKyAgICBkZWYgbWVzc2FnZV9hc19pdGVyX2F0dGFjaG1lbnQoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGFsbHBhcnRzID0gbGlzdChtLndhbGsoKSkKKyAgICAgICAgYXR0YWNobWVudHMgPSBbYWxscGFydHNbbl0gZm9yIG4gaW4gYXR0YWNobWVudHNdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZXJfYXR0YWNobWVudHMoKSksIGF0dGFjaG1lbnRzKQorCisgICAgZGVmIG1lc3NhZ2VfYXNfaXRlcl9wYXJ0cyhzZWxmLCBib2R5X3BhcnRzLCBhdHRhY2htZW50cywgcGFydHMsIG1zZyk6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKG1zZykKKyAgICAgICAgYWxscGFydHMgPSBsaXN0KG0ud2FsaygpKQorICAgICAgICBwYXJ0cyA9IFthbGxwYXJ0c1tuXSBmb3IgbiBpbiBwYXJ0c10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0uaXRlcl9wYXJ0cygpKSwgcGFydHMpCisKKyAgICBjbGFzcyBfVGVzdENvbnRlbnRNYW5hZ2VyOgorICAgICAgICBkZWYgZ2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICByZXR1cm4gbXNnLCBhcmdzLCBrdworICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCAqYXJncywgKiprdyk6CisgICAgICAgICAgICBzZWxmLm1zZyA9IG1zZworICAgICAgICAgICAgc2VsZi5hcmdzID0gYXJncworICAgICAgICAgICAgc2VsZi5rdyA9IGt3CisKKyAgICBkZWYgdGVzdF9nZXRfY29udGVudF93aXRoX2NtKHNlbGYpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZygnJykKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKSwgKG0sICgpLCB7fSkpCisgICAgICAgIG1zZywgYXJncywga3cgPSBtLmdldF9jb250ZW50KCdmb28nLCBjb250ZW50X21hbmFnZXI9Y20sIGJhcj0xLCBrPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsICgnZm9vJywpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGt3LCBkaWN0KGJhcj0xLCBrPTIpKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvbnRlbnRfZGVmYXVsdF9jbV9jb21lc19mcm9tX3BvbGljeShzZWxmKToKKyAgICAgICAgcCA9IHBvbGljeS5kZWZhdWx0LmNsb25lKGNvbnRlbnRfbWFuYWdlcj1zZWxmLl9UZXN0Q29udGVudE1hbmFnZXIoKSkKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycsIHBvbGljeT1wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnQoKSwgKG0sICgpLCB7fSkpCisgICAgICAgIG1zZywgYXJncywga3cgPSBtLmdldF9jb250ZW50KCdmb28nLCBiYXI9MSwgaz0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCAoJ2ZvbycsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrdywgZGljdChiYXI9MSwgaz0yKSkKKworICAgIGRlZiB0ZXN0X3NldF9jb250ZW50X3dpdGhfY20oc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm1zZywgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5hcmdzLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5rdywge30pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoJ2ZvbycsIGNvbnRlbnRfbWFuYWdlcj1jbSwgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF9kZWZhdWx0X2NtX2NvbWVzX2Zyb21fcG9saWN5KHNlbGYpOgorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RDb250ZW50TWFuYWdlcigpCisgICAgICAgIHAgPSBwb2xpY3kuZGVmYXVsdC5jbG9uZShjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIG0gPSBzZWxmLl9zdHJfbXNnKCcnLCBwb2xpY3k9cCkKKyAgICAgICAgbS5zZXRfY29udGVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ubXNnLCBtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmFyZ3MsICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmt3LCB7fSkKKyAgICAgICAgbS5zZXRfY29udGVudCgnZm9vJywgYmFyPTEsIGs9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5tc2csIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uYXJncywgKCdmb28nLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ua3csIGRpY3QoYmFyPTEsIGs9MikpCisKKyAgICAjIG91dGNvbWUgaXMgd2hldGhlciB4eHhfbWV0aG9kIHNob3VsZCByYWlzZSBWYWx1ZUVycm9yIGVycm9yIHdoZW4gY2FsbGVkCisgICAgIyBvbiBtdWx0aXBhcnQvc3VidHlwZS4gIEJsYW5rIG91dGNvbWUgbWVhbnMgaXQgZGVwZW5kcyBvbiB4eHggKGFkZAorICAgICMgc3VjY2VlZHMsIG1ha2UgcmFpc2VzKS4gIE5vdGU6ICdub25lJyBtZWFucyB0aGVyZSBhcmUgY29udGVudC10eXBlCisgICAgIyBoZWFkZXJzIGJ1dCBwYXlsb2FkIGlzIE5vbmUuLi50aGlzIGhhcHBlbmluZyBpbiBwcmFjdGljZSB3b3VsZCBiZSB2ZXJ5CisgICAgIyB1bnVzdWFsLCBzbyB0cmVhdGluZyBpdCBhcyBpZiB0aGVyZSB3ZXJlIGNvbnRlbnQgc2VlbXMgcmVhc29uYWJsZS4KKyAgICAjICAgIG1ldGhvZCAgICAgICAgICBzdWJ0eXBlICAgICAgICAgICBvdXRjb21lCisgICAgc3VidHlwZV9wYXJhbXMgPSAoCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ25vX2NvbnRlbnQnLCAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ25vbmUnLCAgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ3BsYWluJywgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgncmVsYXRlZCcsICAgICAgJ3JlbGF0ZWQnLCAgICAgICAgJycpLAorICAgICAgICAoJ3JlbGF0ZWQnLCAgICAgICdhbHRlcm5hdGl2ZScsICAgICdyYWlzZXMnKSwKKyAgICAgICAgKCdyZWxhdGVkJywgICAgICAnbWl4ZWQnLCAgICAgICAgICAncmFpc2VzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ25vX2NvbnRlbnQnLCAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ25vbmUnLCAgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ3BsYWluJywgICAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ3JlbGF0ZWQnLCAgICAgICAgJ3N1Y2NlZWRzJyksCisgICAgICAgICgnYWx0ZXJuYXRpdmUnLCAgJ2FsdGVybmF0aXZlJywgICAgJycpLAorICAgICAgICAoJ2FsdGVybmF0aXZlJywgICdtaXhlZCcsICAgICAgICAgICdyYWlzZXMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAnbm9fY29udGVudCcsICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAnbm9uZScsICAgICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAncGxhaW4nLCAgICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAncmVsYXRlZCcsICAgICAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAnYWx0ZXJuYXRpdmUnLCAgICAnc3VjY2VlZHMnKSwKKyAgICAgICAgKCdtaXhlZCcsICAgICAgICAnbWl4ZWQnLCAgICAgICAgICAnJyksCisgICAgICAgICkKKworICAgIGRlZiBfbWFrZV9zdWJ0eXBlX3Rlc3RfbWVzc2FnZShzZWxmLCBzdWJ0eXBlKToKKyAgICAgICAgbSA9IHNlbGYubWVzc2FnZSgpCisgICAgICAgIHBheWxvYWQgPSBOb25lCisgICAgICAgIG1zZ19oZWFkZXJzID0gIFsKKyAgICAgICAgICAgICgnVG8nLCAnZm9vQGJhci5jb20nKSwKKyAgICAgICAgICAgICgnRnJvbScsICdiYXJAZm9vLmNvbScpLAorICAgICAgICAgICAgXQorICAgICAgICBpZiBzdWJ0eXBlICE9ICdub19jb250ZW50JzoKKyAgICAgICAgICAgICgnY29udGVudC1zaGFkb3cnLCAnTG9ncnVzJyksCisgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ1gtUmFuZG9tLUhlYWRlcicsICdDb3J3aW4nKSkKKyAgICAgICAgaWYgc3VidHlwZSA9PSAndGV4dCc6CisgICAgICAgICAgICBwYXlsb2FkID0gJycKKyAgICAgICAgICAgIG1zZ19oZWFkZXJzLmFwcGVuZCgoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJykpCisgICAgICAgICAgICBtLnNldF9wYXlsb2FkKCcnKQorICAgICAgICBlbGlmIHN1YnR5cGUgIT0gJ25vX2NvbnRlbnQnOgorICAgICAgICAgICAgcGF5bG9hZCA9IFtdCisgICAgICAgICAgICBtc2dfaGVhZGVycy5hcHBlbmQoKCdDb250ZW50LVR5cGUnLCAnbXVsdGlwYXJ0LycgKyBzdWJ0eXBlKSkKKyAgICAgICAgbXNnX2hlYWRlcnMuYXBwZW5kKCgnWC1UcnVtcCcsICdSYW5kb20nKSkKKyAgICAgICAgbS5zZXRfcGF5bG9hZChwYXlsb2FkKQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICBtW25hbWVdID0gdmFsdWUKKyAgICAgICAgcmV0dXJuIG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkCisKKyAgICBkZWYgX2NoZWNrX2Rpc2FsbG93ZWRfc3VidHlwZV9yYWlzZXMoc2VsZiwgbSwgbWV0aG9kX25hbWUsIHN1YnR5cGUsIG1ldGhvZCk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYXI6CisgICAgICAgICAgICBnZXRhdHRyKG0sIG1ldGhvZCkoKQorICAgICAgICBleGNfdGV4dCA9IHN0cihhci5leGNlcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3VidHlwZSwgZXhjX3RleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obWV0aG9kX25hbWUsIGV4Y190ZXh0KQorCisgICAgZGVmIF9jaGVja19tYWtlX211bHRpcGFydChzZWxmLCBtLCBtc2dfaGVhZGVycywgcGF5bG9hZCk6CisgICAgICAgIGNvdW50ID0gMAorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gbXNnX2hlYWRlcnM6CisgICAgICAgICAgICBpZiBub3QgbmFtZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtW25hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0pLCBjb3VudCsxKSAjICsxIGZvciBuZXcgQ29udGVudC1UeXBlCisgICAgICAgIHBhcnQgPSBuZXh0KG0uaXRlcl9wYXJ0cygpKQorICAgICAgICBjb3VudCA9IDAKKyAgICAgICAgZm9yIG5hbWUsIHZhbHVlIGluIG1zZ19oZWFkZXJzOgorICAgICAgICAgICAgaWYgbmFtZS5sb3dlcigpLnN0YXJ0c3dpdGgoJ2NvbnRlbnQtJyk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0W25hbWVdLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhcnQpLCBjb3VudCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJ0LmdldF9wYXlsb2FkKCksIHBheWxvYWQpCisKKyAgICBkZWYgc3VidHlwZV9hc19tYWtlKHNlbGYsIG1ldGhvZCwgc3VidHlwZSwgb3V0Y29tZSk6CisgICAgICAgIG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkID0gc2VsZi5fbWFrZV9zdWJ0eXBlX3Rlc3RfbWVzc2FnZShzdWJ0eXBlKQorICAgICAgICBtYWtlX21ldGhvZCA9ICdtYWtlXycgKyBtZXRob2QKKyAgICAgICAgaWYgb3V0Y29tZSBpbiAoJycsICdyYWlzZXMnKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2Rpc2FsbG93ZWRfc3VidHlwZV9yYWlzZXMobSwgbWV0aG9kLCBzdWJ0eXBlLCBtYWtlX21ldGhvZCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBnZXRhdHRyKG0sIG1ha2VfbWV0aG9kKSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfY29udGVudF9tYWludHlwZSgpLCAnbXVsdGlwYXJ0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X3N1YnR5cGUoKSwgbWV0aG9kKQorICAgICAgICBpZiBzdWJ0eXBlID09ICdub19jb250ZW50JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG0uZ2V0X3BheWxvYWQoKSksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uaXRlbXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX2hlYWRlcnMgKyBbKCdDb250ZW50LVR5cGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211bHRpcGFydC8nK21ldGhvZCldKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5nZXRfcGF5bG9hZCgpKSwgMSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21ha2VfbXVsdGlwYXJ0KG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkKQorCisgICAgZGVmIHN1YnR5cGVfYXNfbWFrZV93aXRoX2JvdW5kYXJ5KHNlbGYsIG1ldGhvZCwgc3VidHlwZSwgb3V0Y29tZSk6CisgICAgICAgICMgRG9pbmcgYWxsIHZhcmlhdGlvbiBpcyBhIGJpdCBvZiBvdmVya2lsbC4uLgorICAgICAgICBtID0gc2VsZi5tZXNzYWdlKCkKKyAgICAgICAgaWYgb3V0Y29tZSBpbiAoJycsICdyYWlzZXMnKToKKyAgICAgICAgICAgIG1bJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC8nICsgc3VidHlwZQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICBnZXRhdHRyKG0sICdtYWtlXycgKyBtZXRob2QpKCkKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBzdWJ0eXBlID09ICdwbGFpbic6CisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICBlbGlmIHN1YnR5cGUgIT0gJ25vX2NvbnRlbnQnOgorICAgICAgICAgICAgbVsnQ29udGVudC1UeXBlJ10gPSAnbXVsdGlwYXJ0LycgKyBzdWJ0eXBlCisgICAgICAgIGdldGF0dHIobSwgJ21ha2VfJyArIG1ldGhvZCkoYm91bmRhcnk9ImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmlzX211bHRpcGFydCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2JvdW5kYXJ5KCksICdhYmMnKQorCisgICAgZGVmIHRlc3RfcG9saWN5X29uX3BhcnRfbWFkZV9ieV9tYWtlX2NvbWVzX2Zyb21fbWVzc2FnZShzZWxmKToKKyAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ21ha2VfcmVsYXRlZCcsICdtYWtlX2FsdGVybmF0aXZlJywgJ21ha2VfbWl4ZWQnKToKKyAgICAgICAgICAgIG0gPSBzZWxmLm1lc3NhZ2UocG9saWN5PXNlbGYucG9saWN5LmNsb25lKGNvbnRlbnRfbWFuYWdlcj0nZm9vJykpCisgICAgICAgICAgICBtWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJworICAgICAgICAgICAgZ2V0YXR0cihtLCBtZXRob2QpKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5nZXRfcGF5bG9hZCgwKS5wb2xpY3kuY29udGVudF9tYW5hZ2VyLCAnZm9vJykKKworICAgIGNsYXNzIF9UZXN0U2V0Q29udGVudE1hbmFnZXI6CisgICAgICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csIGNvbnRlbnQsICphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIG1zZ1snQ29udGVudC1UeXBlJ10gPSAndGV4dC9wbGFpbicKKyAgICAgICAgICAgIG1zZy5zZXRfcGF5bG9hZChjb250ZW50KQorCisgICAgZGVmIHN1YnR5cGVfYXNfYWRkKHNlbGYsIG1ldGhvZCwgc3VidHlwZSwgb3V0Y29tZSk6CisgICAgICAgIG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkID0gc2VsZi5fbWFrZV9zdWJ0eXBlX3Rlc3RfbWVzc2FnZShzdWJ0eXBlKQorICAgICAgICBjbSA9IHNlbGYuX1Rlc3RTZXRDb250ZW50TWFuYWdlcigpCisgICAgICAgIGFkZF9tZXRob2QgPSAnYWRkX2F0dGFjaG1lbnQnIGlmIG1ldGhvZD09J21peGVkJyBlbHNlICdhZGRfJyArIG1ldGhvZAorICAgICAgICBpZiBvdXRjb21lID09ICdyYWlzZXMnOgorICAgICAgICAgICAgc2VsZi5fY2hlY2tfZGlzYWxsb3dlZF9zdWJ0eXBlX3JhaXNlcyhtLCBtZXRob2QsIHN1YnR5cGUsIGFkZF9tZXRob2QpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZ2V0YXR0cihtLCBhZGRfbWV0aG9kKSgndGVzdCcsIGNvbnRlbnRfbWFuYWdlcj1jbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLmdldF9jb250ZW50X21haW50eXBlKCksICdtdWx0aXBhcnQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ2V0X2NvbnRlbnRfc3VidHlwZSgpLCBtZXRob2QpCisgICAgICAgIGlmIG1ldGhvZCA9PSBzdWJ0eXBlIG9yIHN1YnR5cGUgPT0gJ25vX2NvbnRlbnQnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5nZXRfcGF5bG9hZCgpKSwgMSkKKyAgICAgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBtc2dfaGVhZGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bbmFtZV0sIHZhbHVlKQorICAgICAgICAgICAgcGFydCA9IG0uZ2V0X3BheWxvYWQoKVswXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obS5nZXRfcGF5bG9hZCgpKSwgMikKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21ha2VfbXVsdGlwYXJ0KG0sIG1zZ19oZWFkZXJzLCBwYXlsb2FkKQorICAgICAgICAgICAgcGFydCA9IG0uZ2V0X3BheWxvYWQoKVsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnQuZ2V0X2NvbnRlbnRfdHlwZSgpLCAndGV4dC9wbGFpbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydC5nZXRfcGF5bG9hZCgpLCAndGVzdCcpCisgICAgICAgIGlmIG1ldGhvZD09J21peGVkJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydFsnQ29udGVudC1EaXNwb3NpdGlvbiddLCAnYXR0YWNobWVudCcpCisgICAgICAgIGVsaWYgbWV0aG9kPT0ncmVsYXRlZCc6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSwgJ2lubGluZScpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE90aGVyd2lzZSB3ZSBkb24ndCBndWVzcy4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhcnRbJ0NvbnRlbnQtRGlzcG9zaXRpb24nXSkKKworICAgIGNsYXNzIF9UZXN0U2V0UmFpc2luZ0NvbnRlbnRNYW5hZ2VyOgorICAgICAgICBkZWYgc2V0X2NvbnRlbnQoc2VsZiwgbXNnLCBjb250ZW50LCAqYXJncywgKiprdyk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3Rlc3QnKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9jb250ZW50X21hbmFnZXJfZm9yX2FkZF9jb21lc19mcm9tX3BvbGljeShzZWxmKToKKyAgICAgICAgY20gPSBzZWxmLl9UZXN0U2V0UmFpc2luZ0NvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgbSA9IHNlbGYubWVzc2FnZShwb2xpY3k9c2VsZi5wb2xpY3kuY2xvbmUoY29udGVudF9tYW5hZ2VyPWNtKSkKKyAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ2FkZF9yZWxhdGVkJywgJ2FkZF9hbHRlcm5hdGl2ZScsICdhZGRfYXR0YWNobWVudCcpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24pIGFzIGFyOgorICAgICAgICAgICAgICAgIGdldGF0dHIobSwgbWV0aG9kKSgnJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGFyLmV4Y2VwdGlvbiksICd0ZXN0JykKKworICAgIGRlZiBtZXNzYWdlX2FzX2NsZWFyKHNlbGYsIGJvZHlfcGFydHMsIGF0dGFjaG1lbnRzLCBwYXJ0cywgbXNnKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2cobXNnKQorICAgICAgICBtLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChtLml0ZW1zKCkpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobS5nZXRfcGF5bG9hZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX3BhcnRzKCkpLCBbXSkKKworICAgIGRlZiBtZXNzYWdlX2FzX2NsZWFyX2NvbnRlbnQoc2VsZiwgYm9keV9wYXJ0cywgYXR0YWNobWVudHMsIHBhcnRzLCBtc2cpOgorICAgICAgICBtID0gc2VsZi5fc3RyX21zZyhtc2cpCisgICAgICAgIGV4cGVjdGVkX2hlYWRlcnMgPSBbaCBmb3IgaCBpbiBtLmtleXMoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBoLmxvd2VyKCkuc3RhcnRzd2l0aCgnY29udGVudC0nKV0KKyAgICAgICAgbS5jbGVhcl9jb250ZW50KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0ua2V5cygpKSwgZXhwZWN0ZWRfaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobS5nZXRfcGF5bG9hZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QobS5pdGVyX3BhcnRzKCkpLCBbXSkKKworICAgIGRlZiB0ZXN0X2lzX2F0dGFjaG1lbnQoc2VsZik6CisgICAgICAgIG0gPSBzZWxmLl9tYWtlX21lc3NhZ2UoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uaXNfYXR0YWNobWVudCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAnaW5saW5lJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG0uaXNfYXR0YWNobWVudCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobS5pc19hdHRhY2htZW50KQorICAgICAgICBtLnJlcGxhY2VfaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uJywgJ2F0dGFjaG1lbnQnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCkKKyAgICAgICAgbS5yZXBsYWNlX2hlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbicsICdBdFRhY2hNZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCgpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmlzX2F0dGFjaG1lbnQpCisgICAgICAgIG0uc2V0X3BhcmFtKCdmaWxlbmFtZScsICdhYmMucG5nJywgJ0NvbnRlbnQtRGlzcG9zaXRpb24nKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5pc19hdHRhY2htZW50KCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG0uaXNfYXR0YWNobWVudCkKKworCitjbGFzcyBUZXN0RW1haWxNZXNzYWdlKFRlc3RFbWFpbE1lc3NhZ2VCYXNlLCBUZXN0RW1haWxCYXNlKToKKyAgICBtZXNzYWdlID0gRW1haWxNZXNzYWdlCisKKyAgICBkZWYgdGVzdF9zZXRfY29udGVudF9hZGRzX01JTUVfVmVyc2lvbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTUlNRS1WZXJzaW9uJywgbSkKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobVsnTUlNRS1WZXJzaW9uJ10sICcxLjAnKQorCisgICAgY2xhc3MgX01JTUVfVmVyc2lvbl9hZGRpbmdfQ006CisgICAgICAgIGRlZiBzZXRfY29udGVudChzZWxmLCBtc2csICphcmdzLCAqKmt3KToKKyAgICAgICAgICAgIG1zZ1snTUlNRS1WZXJzaW9uJ10gPSAnMS4wJworCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfZG9lc19ub3RfZHVwbGljYXRlX01JTUVfVmVyc2lvbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fTUlNRV9WZXJzaW9uX2FkZGluZ19DTSgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisgICAgICAgIG0uc2V0X2NvbnRlbnQoY29udGVudF9tYW5hZ2VyPWNtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1bJ01JTUUtVmVyc2lvbiddLCAnMS4wJykKKworCitjbGFzcyBUZXN0TUlNRVBhcnQoVGVzdEVtYWlsTWVzc2FnZUJhc2UsIFRlc3RFbWFpbEJhc2UpOgorICAgICMgRG9pbmcgdGhlIGZ1bGwgdGVzdCBydW4gaGVyZSBtYXkgc2VlbSBhIGJpdCByZWR1bmRhbnQsIHNpbmNlIHRoZSB0d28KKyAgICAjIGNsYXNzZXMgYXJlIGFsbW9zdCBpZGVudGljYWwuICBCdXQgd2hhdCBpZiB0aGV5IGRyaWZ0IGFwYXJ0PyAgU28gd2UgZG8KKyAgICAjIHRoZSBmdWxsIHRlc3RzIHNvIHRoYXQgYW55IGZ1dHVyZSBkcmlmdCBkb2Vzbid0IGludHJvZHVjZSBidWdzLgorICAgIG1lc3NhZ2UgPSBNSU1FUGFydAorCisgICAgZGVmIHRlc3Rfc2V0X2NvbnRlbnRfZG9lc19ub3RfYWRkX01JTUVfVmVyc2lvbihzZWxmKToKKyAgICAgICAgbSA9IHNlbGYuX3N0cl9tc2coJycpCisgICAgICAgIGNtID0gc2VsZi5fVGVzdENvbnRlbnRNYW5hZ2VyKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignTUlNRS1WZXJzaW9uJywgbSkKKyAgICAgICAgbS5zZXRfY29udGVudChjb250ZW50X21hbmFnZXI9Y20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ01JTUUtVmVyc2lvbicsIG0pCisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9waWNrbGVhYmxlLnB5IGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BpY2tsZWFibGUucHkKaW5kZXggZGFhOGQyNS4uMTZiNDQ2NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BpY2tsZWFibGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BpY2tsZWFibGUucHkKQEAgLTMwLDkgKzMwLDEwIEBACiAKICAgICBkZWYgaGVhZGVyX2FzX3BpY2tsZShzZWxmLCBuYW1lLCB2YWx1ZSk6CiAgICAgICAgIGhlYWRlciA9IHNlbGYuaGVhZGVyX2ZhY3RvcnkobmFtZSwgdmFsdWUpCi0gICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoaGVhZGVyKQotICAgICAgICBoID0gcGlja2xlLmxvYWRzKHApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGgpLCBzdHIoaGVhZGVyKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwID0gcGlja2xlLmR1bXBzKGhlYWRlciwgcHJvdG8pCisgICAgICAgICAgICBoID0gcGlja2xlLmxvYWRzKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihoKSwgc3RyKGhlYWRlcikpCiAKIAogQHBhcmFtZXRlcml6ZQpAQCAtNjUsOSArNjYsMTAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2cyLmFzX3N0cmluZygpLCBtc2cuYXNfc3RyaW5nKCkpCiAKICAgICBkZWYgbXNnX2FzX3BpY2tsZShzZWxmLCBtc2cpOgotICAgICAgICBwID0gcGlja2xlLmR1bXBzKG1zZykKLSAgICAgICAgbXNnMiA9IHBpY2tsZS5sb2FkcyhwKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIuYXNfc3RyaW5nKCksIG1zZy5hc19zdHJpbmcoKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBwID0gcGlja2xlLmR1bXBzKG1zZywgcHJvdG8pCisgICAgICAgICAgICBtc2cyID0gcGlja2xlLmxvYWRzKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZzIuYXNfc3RyaW5nKCksIG1zZy5hc19zdHJpbmcoKSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF9wb2xpY3kucHkKaW5kZXggOTgzYmQ0OS4uZTc5N2YzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3BvbGljeS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfcG9saWN5LnB5CkBAIC0zMCw2ICszMCw3IEBACiAgICAgICAgICdyYWlzZV9vbl9kZWZlY3QnOiAgICAgICAgICBGYWxzZSwKICAgICAgICAgJ2hlYWRlcl9mYWN0b3J5JzogICAgICAgICAgIGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5oZWFkZXJfZmFjdG9yeSwKICAgICAgICAgJ3JlZm9sZF9zb3VyY2UnOiAgICAgICAgICAgICdsb25nJywKKyAgICAgICAgJ2NvbnRlbnRfbWFuYWdlcic6ICAgICAgICAgIGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeS5jb250ZW50X21hbmFnZXIsCiAgICAgICAgIH0pCiAKICAgICAjIEZvciBlYWNoIHBvbGljeSB1bmRlciB0ZXN0LCB3ZSBnaXZlIGhlcmUgd2hhdCB3ZSBleHBlY3QgdGhlIGRlZmF1bHRzIHRvCkBAIC0zMTgsNSArMzE5LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXNnLmFzX3N0cmluZygpLCAiU3ViamVjdDogdGVzdFhUbzogZm9vWFgiKQogCiAKK2NsYXNzIFRlc3RDb25jcmV0ZVBvbGljaWVzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2hlYWRlcl9zdG9yZV9wYXJzZV9yZWplY3RzX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBpbnN0YW5jZSA9IGVtYWlsLnBvbGljeS5FbWFpbFBvbGljeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLmhlYWRlcl9zdG9yZV9wYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zyb20nLCAnc3BhbVxuZWdnQGZvby5weScpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF91dGlscy5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdGVzdF91dGlscy5weQppbmRleCA0YWJkYzA0Li42ZGNiM2JiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3Rlc3RfdXRpbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9lbWFpbC90ZXN0X3V0aWxzLnB5CkBAIC0xMzYsNSArMTM2LDI4IEBACiAgICAgICAgIHQxID0gdXRpbHMubG9jYWx0aW1lKHQwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLnR6bmFtZSgpLCAnRUVUJykKIAorIyBJc3N1ZSAjMjQ4MzY6IFRoZSB0aW1lem9uZSBmaWxlcyBhcmUgb3V0IG9mIGRhdGUgKHByZSAyMDExaykKKyMgb24gTWFjIE9TIFggU25vdyBMZW9wYXJkLgorQHRlc3Quc3VwcG9ydC5yZXF1aXJlc19tYWNfdmVyKDEwLCA3KQorY2xhc3MgRm9ybWF0RGF0ZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB0ZXN0LnN1cHBvcnQucnVuX3dpdGhfdHooJ0V1cm9wZS9NaW5zaycpCisgICAgZGVmIHRlc3RfZm9ybWF0ZGF0ZShzZWxmKToKKyAgICAgICAgdGltZXZhbCA9IHRpbWUubWt0aW1lKCgyMDExLCAxMiwgMSwgMTgsIDAsIDAsIDQsIDMzNSwgMCkpCisgICAgICAgIHN0cmluZyA9IHV0aWxzLmZvcm1hdGRhdGUodGltZXZhbCwgbG9jYWx0aW1lPUZhbHNlLCB1c2VnbXQ9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLCAnVGh1LCAwMSBEZWMgMjAxMSAxNTowMDowMCAtMDAwMCcpCisgICAgICAgIHN0cmluZyA9IHV0aWxzLmZvcm1hdGRhdGUodGltZXZhbCwgbG9jYWx0aW1lPUZhbHNlLCB1c2VnbXQ9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHJpbmcsICdUaHUsIDAxIERlYyAyMDExIDE1OjAwOjAwIEdNVCcpCisKKyAgICBAdGVzdC5zdXBwb3J0LnJ1bl93aXRoX3R6KCdFdXJvcGUvTWluc2snKQorICAgIGRlZiB0ZXN0X2Zvcm1hdGRhdGVfd2l0aF9sb2NhbHRpbWUoc2VsZik6CisgICAgICAgIHRpbWV2YWwgPSB0aW1lLm1rdGltZSgoMjAxMSwgMSwgMSwgMTgsIDAsIDAsIDYsIDEsIDApKQorICAgICAgICBzdHJpbmcgPSB1dGlscy5mb3JtYXRkYXRlKHRpbWV2YWwsIGxvY2FsdGltZT1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmluZywgJ1NhdCwgMDEgSmFuIDIwMTEgMTg6MDA6MDAgKzAyMDAnKQorICAgICAgICAjIE1pbnNrIG1vdmVkIGZyb20gKzAyMDAgKHdpdGggRFNUKSB0byArMDMwMCAod2l0aG91dCBEU1QpIGluIDIwMTEKKyAgICAgICAgdGltZXZhbCA9IHRpbWUubWt0aW1lKCgyMDExLCAxMiwgMSwgMTgsIDAsIDAsIDQsIDMzNSwgMCkpCisgICAgICAgIHN0cmluZyA9IHV0aWxzLmZvcm1hdGRhdGUodGltZXZhbCwgbG9jYWx0aW1lPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyaW5nLCAnVGh1LCAwMSBEZWMgMjAxMSAxODowMDowMCArMDMwMCcpCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VtYWlsL3RvcnR1cmVfdGVzdC5weSBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5CmluZGV4IDU0NGIxYmIuLjE5Y2Y2NGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW1haWwvdG9ydHVyZV90ZXN0LnB5CkBAIC0yNyw3ICsyNyw3IEBACiAjIFByZXZlbnQgdGhpcyB0ZXN0IGZyb20gcnVubmluZyBpbiB0aGUgUHl0aG9uIGRpc3RybwogdHJ5OgogICAgIG9wZW5maWxlKCdjcmlzcGluLXRvcnR1cmUudHh0JykKLWV4Y2VwdCBJT0Vycm9yOgorZXhjZXB0IE9TRXJyb3I6CiAgICAgcmFpc2UgVGVzdFNraXBwZWQKIAogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Vuc3VyZXBpcC5weSBiL0xpYi90ZXN0L3Rlc3RfZW5zdXJlcGlwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYzc2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2Vuc3VyZXBpcC5weQpAQCAtMCwwICsxLDM2MCBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jaworaW1wb3J0IHRlc3Quc3VwcG9ydAoraW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBzeXMKKworaW1wb3J0IGVuc3VyZXBpcAoraW1wb3J0IGVuc3VyZXBpcC5fdW5pbnN0YWxsCisKKyMgcGlwIGN1cnJlbnRseSByZXF1aXJlcyBzc2wgc3VwcG9ydCwgc28gd2UgZW5zdXJlIHdlIGhhbmRsZQorIyBpdCBiZWluZyBtaXNzaW5nIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQpCitlbnN1cmVwaXBfbm9fc3NsID0gdGVzdC5zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoImVuc3VyZXBpcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tlZD1bInNzbCJdKQordHJ5OgorICAgIGltcG9ydCBzc2wKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBkZWYgcmVxdWlyZXNfdXNhYmxlX3BpcChmKToKKyAgICAgICAgZGVjbyA9IHVuaXR0ZXN0LnNraXAoZW5zdXJlcGlwLl9NSVNTSU5HX1NTTF9NRVNTQUdFKQorICAgICAgICByZXR1cm4gZGVjbyhmKQorZWxzZToKKyAgICBkZWYgcmVxdWlyZXNfdXNhYmxlX3BpcChmKToKKyAgICAgICAgcmV0dXJuIGYKKworY2xhc3MgVGVzdEVuc3VyZVBpcFZlcnNpb24odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfcmV0dXJuc192ZXJzaW9uKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuc3VyZXBpcC5fUElQX1ZFUlNJT04sIGVuc3VyZXBpcC52ZXJzaW9uKCkpCisKK2NsYXNzIEVuc3VyZXBpcE1peGluOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBydW5fcGlwX3BhdGNoID0gdW5pdHRlc3QubW9jay5wYXRjaCgiZW5zdXJlcGlwLl9ydW5fcGlwIikKKyAgICAgICAgc2VsZi5ydW5fcGlwID0gcnVuX3BpcF9wYXRjaC5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChydW5fcGlwX3BhdGNoLnN0b3ApCisKKyAgICAgICAgIyBBdm9pZCBzaWRlIGVmZmVjdHMgb24gdGhlIGFjdHVhbCBvcyBtb2R1bGUKKyAgICAgICAgcmVhbF9kZXZudWxsID0gb3MuZGV2bnVsbAorICAgICAgICBvc19wYXRjaCA9IHVuaXR0ZXN0Lm1vY2sucGF0Y2goImVuc3VyZXBpcC5vcyIpCisgICAgICAgIHBhdGNoZWRfb3MgPSBvc19wYXRjaC5zdGFydCgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvc19wYXRjaC5zdG9wKQorICAgICAgICBwYXRjaGVkX29zLmRldm51bGwgPSByZWFsX2Rldm51bGwKKyAgICAgICAgcGF0Y2hlZF9vcy5wYXRoID0gb3MucGF0aAorICAgICAgICBzZWxmLm9zX2Vudmlyb24gPSBwYXRjaGVkX29zLmVudmlyb24gPSBvcy5lbnZpcm9uLmNvcHkoKQorCisKK2NsYXNzIFRlc3RCb290c3RyYXAoRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYmFzaWNfYm9vdHN0cmFwcGluZyhzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCgpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgICAgIGFkZGl0aW9uYWxfcGF0aHMgPSBzZWxmLnJ1bl9waXAuY2FsbF9hcmdzWzBdWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFkZGl0aW9uYWxfcGF0aHMpLCAyKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfcm9vdChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChyb290PSIvZm9vL2Jhci8iKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItLXJvb3QiLCAiL2Zvby9iYXIvIiwKKyAgICAgICAgICAgICAgICAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF91c2VyKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHVzZXI9VHJ1ZSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLS11c2VyIiwgInNldHVwdG9vbHMiLCAicGlwIiwKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwKKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9ib290c3RyYXBwaW5nX3dpdGhfdXBncmFkZShzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh1cGdyYWRlPVRydWUpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJpbnN0YWxsIiwgIi0tbm8taW5kZXgiLCAiLS1maW5kLWxpbmtzIiwKKyAgICAgICAgICAgICAgICB1bml0dGVzdC5tb2NrLkFOWSwgIi0tdXBncmFkZSIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3ZlcmJvc2l0eV8xKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHZlcmJvc2l0eT0xKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItdiIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3ZlcmJvc2l0eV8yKHNlbGYpOgorICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKHZlcmJvc2l0eT0yKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAiaW5zdGFsbCIsICItLW5vLWluZGV4IiwgIi0tZmluZC1saW5rcyIsCisgICAgICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksICItdnYiLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF92ZXJib3NpdHlfMyhzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCh2ZXJib3NpdHk9MykKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAiLXZ2diIsICJzZXR1cHRvb2xzIiwgInBpcCIsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgdW5pdHRlc3QubW9jay5BTlksCisgICAgICAgICkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwcGluZ193aXRoX3JlZ3VsYXJfaW5zdGFsbChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vc19lbnZpcm9uWyJFTlNVUkVQSVBfT1BUSU9OUyJdLCAiaW5zdGFsbCIpCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF9hbHRfaW5zdGFsbChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChhbHRpbnN0YWxsPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5vc19lbnZpcm9uWyJFTlNVUkVQSVBfT1BUSU9OUyJdLCAiYWx0aW5zdGFsbCIpCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcHBpbmdfd2l0aF9kZWZhdWx0X3BpcChzZWxmKToKKyAgICAgICAgZW5zdXJlcGlwLmJvb3RzdHJhcChkZWZhdWx0X3BpcD1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJFTlNVUkVQSVBfT1BUSU9OUyIsIHNlbGYub3NfZW52aXJvbikKKworICAgIGRlZiB0ZXN0X2FsdGluc3RhbGxfZGVmYXVsdF9waXBfY29uZmxpY3Qoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKGFsdGluc3RhbGw9VHJ1ZSwgZGVmYXVsdF9waXA9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnJ1bl9waXAuY2FsbGVkKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF9waXBfZW52aXJvbm1lbnRfdmFyaWFibGVzX3JlbW92ZWQoc2VsZik6CisgICAgICAgICMgZW5zdXJlcGlwIGRlbGliZXJhdGVseSBpZ25vcmVzIGFsbCBwaXAgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTczNCBmb3IgZGV0YWlscworICAgICAgICBzZWxmLm9zX2Vudmlyb25bIlBJUF9USElTX1NIT1VMRF9HT19BV0FZIl0gPSAidGVzdCBmb2RkZXIiCisgICAgICAgIGVuc3VyZXBpcC5ib290c3RyYXAoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJQSVBfVEhJU19TSE9VTERfR09fQVdBWSIsIHNlbGYub3NfZW52aXJvbikKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfcGlwX2NvbmZpZ19maWxlX2Rpc2FibGVkKHNlbGYpOgorICAgICAgICAjIGVuc3VyZXBpcCBkZWxpYmVyYXRlbHkgaWdub3JlcyB0aGUgcGlwIGNvbmZpZyBmaWxlCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDA1MyBmb3IgZGV0YWlscworICAgICAgICBlbnN1cmVwaXAuYm9vdHN0cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9zX2Vudmlyb25bIlBJUF9DT05GSUdfRklMRSJdLCBvcy5kZXZudWxsKQorCitAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorZGVmIGZha2VfcGlwKHZlcnNpb249ZW5zdXJlcGlwLl9QSVBfVkVSU0lPTik6CisgICAgaWYgdmVyc2lvbiBpcyBOb25lOgorICAgICAgICBwaXAgPSBOb25lCisgICAgZWxzZToKKyAgICAgICAgY2xhc3MgRmFrZVBpcCgpOgorICAgICAgICAgICAgX192ZXJzaW9uX18gPSB2ZXJzaW9uCisgICAgICAgIHBpcCA9IEZha2VQaXAoKQorICAgIHNlbnRpbmVsID0gb2JqZWN0KCkKKyAgICBvcmlnX3BpcCA9IHN5cy5tb2R1bGVzLmdldCgicGlwIiwgc2VudGluZWwpCisgICAgc3lzLm1vZHVsZXNbInBpcCJdID0gcGlwCisgICAgdHJ5OgorICAgICAgICB5aWVsZCBwaXAKKyAgICBmaW5hbGx5OgorICAgICAgICBpZiBvcmlnX3BpcCBpcyBzZW50aW5lbDoKKyAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1sicGlwIl0KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWyJwaXAiXSA9IG9yaWdfcGlwCisKK2NsYXNzIFRlc3RVbmluc3RhbGwoRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF9za2lwcGVkX3doZW5fbm90X2luc3RhbGxlZChzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcChOb25lKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKworICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF9za2lwcGVkX3dpdGhfd2FybmluZ19mb3Jfd3JvbmdfdmVyc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgibm90IGEgdmFsaWQgdmVyc2lvbiIpOgorICAgICAgICAgICAgd2l0aCB0ZXN0LnN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisgICAgICAgIHdhcm5pbmcgPSBzdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm9ubHkgdW5pbnN0YWxsIGEgbWF0Y2hpbmcgdmVyc2lvbiIsIHdhcm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKworCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF91bmluc3RhbGwoc2VsZik6CisgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgIGVuc3VyZXBpcC5fdW5pbnN0YWxsX2hlbHBlcigpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJ1bmluc3RhbGwiLCAiLXkiLCAiLS1kaXNhYmxlLXBpcC12ZXJzaW9uLWNoZWNrIiwgInBpcCIsCisgICAgICAgICAgICAgICAgInNldHVwdG9vbHMiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF93aXRoX3ZlcmJvc2l0eV8xKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbF9oZWxwZXIodmVyYm9zaXR5PTEpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJ1bmluc3RhbGwiLCAiLXkiLCAiLS1kaXNhYmxlLXBpcC12ZXJzaW9uLWNoZWNrIiwgIi12IiwgInBpcCIsCisgICAgICAgICAgICAgICAgInNldHVwdG9vbHMiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF93aXRoX3ZlcmJvc2l0eV8yKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbF9oZWxwZXIodmVyYm9zaXR5PTIpCisKKyAgICAgICAgc2VsZi5ydW5fcGlwLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKAorICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICJ1bmluc3RhbGwiLCAiLXkiLCAiLS1kaXNhYmxlLXBpcC12ZXJzaW9uLWNoZWNrIiwgIi12diIsICJwaXAiLAorICAgICAgICAgICAgICAgICJzZXR1cHRvb2xzIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgKQorCisgICAgQHJlcXVpcmVzX3VzYWJsZV9waXAKKyAgICBkZWYgdGVzdF91bmluc3RhbGxfd2l0aF92ZXJib3NpdHlfMyhzZWxmKToKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKHZlcmJvc2l0eT0zKQorCisgICAgICAgIHNlbGYucnVuX3BpcC5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgKKyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICAidW5pbnN0YWxsIiwgIi15IiwgIi0tZGlzYWJsZS1waXAtdmVyc2lvbi1jaGVjayIsICItdnZ2IiwKKyAgICAgICAgICAgICAgICAicGlwIiwgInNldHVwdG9vbHMiLAorICAgICAgICAgICAgXQorICAgICAgICApCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3BpcF9lbnZpcm9ubWVudF92YXJpYWJsZXNfcmVtb3ZlZChzZWxmKToKKyAgICAgICAgIyBlbnN1cmVwaXAgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgYWxsIHBpcCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5NzM0IGZvciBkZXRhaWxzCisgICAgICAgIHNlbGYub3NfZW52aXJvblsiUElQX1RISVNfU0hPVUxEX0dPX0FXQVkiXSA9ICJ0ZXN0IGZvZGRlciIKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiUElQX1RISVNfU0hPVUxEX0dPX0FXQVkiLCBzZWxmLm9zX2Vudmlyb24pCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X3BpcF9jb25maWdfZmlsZV9kaXNhYmxlZChzZWxmKToKKyAgICAgICAgIyBlbnN1cmVwaXAgZGVsaWJlcmF0ZWx5IGlnbm9yZXMgdGhlIHBpcCBjb25maWcgZmlsZQorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjAwNTMgZm9yIGRldGFpbHMKKyAgICAgICAgd2l0aCBmYWtlX3BpcCgpOgorICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGxfaGVscGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm9zX2Vudmlyb25bIlBJUF9DT05GSUdfRklMRSJdLCBvcy5kZXZudWxsKQorCisKK2NsYXNzIFRlc3RNaXNzaW5nU1NMKEVuc3VyZXBpcE1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN5cy5tb2R1bGVzWyJlbnN1cmVwaXAiXSA9IGVuc3VyZXBpcF9ub19zc2wKKyAgICAgICAgQHNlbGYuYWRkQ2xlYW51cAorICAgICAgICBkZWYgcmVzdG9yZV9tb2R1bGUoKToKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzWyJlbnN1cmVwaXAiXSA9IGVuc3VyZXBpcAorICAgICAgICBzdXBlcigpLnNldFVwKCkKKworICAgIGRlZiB0ZXN0X2Jvb3RzdHJhcF9yZXF1aXJlc19zc2woc2VsZik6CisgICAgICAgIHNlbGYub3NfZW52aXJvblsiUElQX1RISVNfU0hPVUxEX1NUQVkiXSA9ICJ0ZXN0IGZvZGRlciIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgInJlcXVpcmVzIFNTTC9UTFMiKToKKyAgICAgICAgICAgIGVuc3VyZXBpcF9ub19zc2wuYm9vdHN0cmFwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnJ1bl9waXAuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQSVBfVEhJU19TSE9VTERfU1RBWSIsIHNlbGYub3NfZW52aXJvbikKKworICAgIGRlZiB0ZXN0X3VuaW5zdGFsbF9yZXF1aXJlc19zc2woc2VsZik6CisgICAgICAgIHNlbGYub3NfZW52aXJvblsiUElQX1RISVNfU0hPVUxEX1NUQVkiXSA9ICJ0ZXN0IGZvZGRlciIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFJ1bnRpbWVFcnJvciwgInJlcXVpcmVzIFNTTC9UTFMiKToKKyAgICAgICAgICAgIHdpdGggZmFrZV9waXAoKToKKyAgICAgICAgICAgICAgICBlbnN1cmVwaXBfbm9fc3NsLl91bmluc3RhbGxfaGVscGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnJ1bl9waXAuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEluKCJQSVBfVEhJU19TSE9VTERfU1RBWSIsIHNlbGYub3NfZW52aXJvbikKKworICAgIGRlZiB0ZXN0X21haW5fZXhpdHNfZWFybHlfd2l0aF93YXJuaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnI6CisgICAgICAgICAgICBlbnN1cmVwaXBfbm9fc3NsLl9tYWluKFsiLS12ZXJzaW9uIl0pCisgICAgICAgIHdhcm5pbmcgPSBzdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3YXJuaW5nLmVuZHN3aXRoKCJyZXF1aXJlcyBTU0wvVExTIiksIHdhcm5pbmcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKworIyBCYXNpYyB0ZXN0aW5nIG9mIHRoZSBtYWluIGZ1bmN0aW9ucyBhbmQgdGhlaXIgYXJndW1lbnQgcGFyc2luZworCitFWFBFQ1RFRF9WRVJTSU9OX09VVFBVVCA9ICJwaXAgIiArIGVuc3VyZXBpcC5fUElQX1ZFUlNJT04KKworY2xhc3MgVGVzdEJvb3RzdHJhcHBpbmdNYWluRnVuY3Rpb24oRW5zdXJlcGlwTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYm9vdHN0cmFwX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgZW5zdXJlcGlwLl9tYWluKFsiLS12ZXJzaW9uIl0pCisgICAgICAgIHJlc3VsdCA9IHN0ZG91dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIEVYUEVDVEVEX1ZFUlNJT05fT1VUUFVUKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYucnVuX3BpcC5jYWxsZWQpCisKKyAgICBAcmVxdWlyZXNfdXNhYmxlX3BpcAorICAgIGRlZiB0ZXN0X2Jhc2ljX2Jvb3RzdHJhcHBpbmcoc2VsZik6CisgICAgICAgIGVuc3VyZXBpcC5fbWFpbihbXSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgImluc3RhbGwiLCAiLS1uby1pbmRleCIsICItLWZpbmQtbGlua3MiLAorICAgICAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLCAic2V0dXB0b29scyIsICJwaXAiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIHVuaXR0ZXN0Lm1vY2suQU5ZLAorICAgICAgICApCisKKyAgICAgICAgYWRkaXRpb25hbF9wYXRocyA9IHNlbGYucnVuX3BpcC5jYWxsX2FyZ3NbMF1bMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWRkaXRpb25hbF9wYXRocyksIDIpCisKK2NsYXNzIFRlc3RVbmluc3RhbGxhdGlvbk1haW5GdW5jdGlvbihFbnN1cmVwaXBNaXhpbiwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfdW5pbnN0YWxsX3ZlcnNpb24oc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCk6CisgICAgICAgICAgICAgICAgZW5zdXJlcGlwLl91bmluc3RhbGwuX21haW4oWyItLXZlcnNpb24iXSkKKyAgICAgICAgcmVzdWx0ID0gc3Rkb3V0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgRVhQRUNURURfVkVSU0lPTl9PVVRQVVQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5ydW5fcGlwLmNhbGxlZCkKKworICAgIEByZXF1aXJlc191c2FibGVfcGlwCisgICAgZGVmIHRlc3RfYmFzaWNfdW5pbnN0YWxsKHNlbGYpOgorICAgICAgICB3aXRoIGZha2VfcGlwKCk6CisgICAgICAgICAgICBlbnN1cmVwaXAuX3VuaW5zdGFsbC5fbWFpbihbXSkKKworICAgICAgICBzZWxmLnJ1bl9waXAuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoCisgICAgICAgICAgICBbCisgICAgICAgICAgICAgICAgInVuaW5zdGFsbCIsICIteSIsICItLWRpc2FibGUtcGlwLXZlcnNpb24tY2hlY2siLCAicGlwIiwKKyAgICAgICAgICAgICAgICAic2V0dXB0b29scyIsCisgICAgICAgICAgICBdCisgICAgICAgICkKKworCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZW51bS5weSBiL0xpYi90ZXN0L3Rlc3RfZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDMzNjM4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9lbnVtLnB5CkBAIC0wLDAgKzEsMTYyNSBAQAoraW1wb3J0IGVudW0KK2ltcG9ydCBpbnNwZWN0CitpbXBvcnQgcHlkb2MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gZW51bSBpbXBvcnQgRW51bSwgSW50RW51bSwgRW51bU1ldGEsIHVuaXF1ZQorZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8KK2Zyb20gcGlja2xlIGltcG9ydCBkdW1wcywgbG9hZHMsIFBpY2tsaW5nRXJyb3IsIEhJR0hFU1RfUFJPVE9DT0wKKworIyBmb3IgcGlja2xlIHRlc3RzCit0cnk6CisgICAgY2xhc3MgU3Rvb2dlcyhFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxCisgICAgICAgIENVUkxZID0gMgorICAgICAgICBNT0UgPSAzCitleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICBTdG9vZ2VzID0gZXhjCisKK3RyeToKKyAgICBjbGFzcyBJbnRTdG9vZ2VzKGludCwgRW51bSk6CisgICAgICAgIExBUlJZID0gMQorICAgICAgICBDVVJMWSA9IDIKKyAgICAgICAgTU9FID0gMworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgSW50U3Rvb2dlcyA9IGV4YworCit0cnk6CisgICAgY2xhc3MgRmxvYXRTdG9vZ2VzKGZsb2F0LCBFbnVtKToKKyAgICAgICAgTEFSUlkgPSAxLjM5CisgICAgICAgIENVUkxZID0gMi43MgorICAgICAgICBNT0UgPSAzLjE0MjU5NgorZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgRmxvYXRTdG9vZ2VzID0gZXhjCisKKyMgZm9yIHBpY2tsZSB0ZXN0IGFuZCBzdWJjbGFzcyB0ZXN0cwordHJ5OgorICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgJ2FjY2VwdHMgb25seSBzdHJpbmcgdmFsdWVzJworICAgIGNsYXNzIE5hbWUoU3RyRW51bSk6CisgICAgICAgIEJERkwgPSAnR3VpZG8gdmFuIFJvc3N1bScKKyAgICAgICAgRkxVRkwgPSAnQmFycnkgV2Fyc2F3JworZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgTmFtZSA9IGV4YworCit0cnk6CisgICAgUXVlc3Rpb24gPSBFbnVtKCdRdWVzdGlvbicsICd3aG8gd2hhdCB3aGVuIHdoZXJlIHdoeScsIG1vZHVsZT1fX25hbWVfXykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIFF1ZXN0aW9uID0gZXhjCisKK3RyeToKKyAgICBBbnN3ZXIgPSBFbnVtKCdBbnN3ZXInLCAnaGltIHRoaXMgdGhlbiB0aGVyZSBiZWNhdXNlJykKK2V4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgIEFuc3dlciA9IGV4YworCit0cnk6CisgICAgVGhlb3J5ID0gRW51bSgnVGhlb3J5JywgJ3J1bGUgbGF3IHN1cHBvc2l0aW9uJywgcXVhbG5hbWU9J3NwYW5pc2hfaW5xdWlzaXRpb24nKQorZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgVGhlb3J5ID0gZXhjCisKKyMgZm9yIGRvY3Rlc3RzCit0cnk6CisgICAgY2xhc3MgRnJ1aXQoRW51bSk6CisgICAgICAgIHRvbWF0byA9IDEKKyAgICAgICAgYmFuYW5hID0gMgorICAgICAgICBjaGVycnkgPSAzCitleGNlcHQgRXhjZXB0aW9uOgorICAgIHBhc3MKKworZGVmIHRlc3RfcGlja2xlX2R1bXBfbG9hZChhc3NlcnRpb24sIHNvdXJjZSwgdGFyZ2V0PU5vbmUsCisgICAgICAgICosIHByb3RvY29sPSgwLCBISUdIRVNUX1BST1RPQ09MKSk6CisgICAgc3RhcnQsIHN0b3AgPSBwcm90b2NvbAorICAgIGlmIHRhcmdldCBpcyBOb25lOgorICAgICAgICB0YXJnZXQgPSBzb3VyY2UKKyAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2Uoc3RhcnQsIHN0b3ArMSk6CisgICAgICAgIGFzc2VydGlvbihsb2FkcyhkdW1wcyhzb3VyY2UsIHByb3RvY29sPXByb3RvY29sKSksIHRhcmdldCkKKworZGVmIHRlc3RfcGlja2xlX2V4Y2VwdGlvbihhc3NlcnRpb24sIGV4Y2VwdGlvbiwgb2JqLAorICAgICAgICAqLCBwcm90b2NvbD0oMCwgSElHSEVTVF9QUk9UT0NPTCkpOgorICAgIHN0YXJ0LCBzdG9wID0gcHJvdG9jb2wKKyAgICBmb3IgcHJvdG9jb2wgaW4gcmFuZ2Uoc3RhcnQsIHN0b3ArMSk6CisgICAgICAgIHdpdGggYXNzZXJ0aW9uKGV4Y2VwdGlvbik6CisgICAgICAgICAgICBkdW1wcyhvYmosIHByb3RvY29sPXByb3RvY29sKQorCitjbGFzcyBUZXN0SGVscGVycyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBfaXNfZGVzY3JpcHRvciwgX2lzX3N1bmRlciwgX2lzX2R1bmRlcgorCisgICAgZGVmIHRlc3RfaXNfZGVzY3JpcHRvcihzZWxmKToKKyAgICAgICAgY2xhc3MgZm9vOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgYXR0ciBpbiAoJ19fZ2V0X18nLCdfX3NldF9fJywnX19kZWxldGVfXycpOgorICAgICAgICAgICAgb2JqID0gZm9vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW51bS5faXNfZGVzY3JpcHRvcihvYmopKQorICAgICAgICAgICAgc2V0YXR0cihvYmosIGF0dHIsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZW51bS5faXNfZGVzY3JpcHRvcihvYmopKQorCisgICAgZGVmIHRlc3RfaXNfc3VuZGVyKHNlbGYpOgorICAgICAgICBmb3IgcyBpbiAoJ19hXycsICdfYWFfJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZW51bS5faXNfc3VuZGVyKHMpKQorCisgICAgICAgIGZvciBzIGluICgnYScsICdhXycsICdfYScsICdfX2EnLCAnYV9fJywgJ19fYV9fJywgJ19hX18nLCAnX19hXycsICdfJywKKyAgICAgICAgICAgICAgICAnX18nLCAnX19fJywgJ19fX18nLCAnX19fX18nLCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVudW0uX2lzX3N1bmRlcihzKSkKKworICAgIGRlZiB0ZXN0X2lzX2R1bmRlcihzZWxmKToKKyAgICAgICAgZm9yIHMgaW4gKCdfX2FfXycsICdfX2FhX18nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbnVtLl9pc19kdW5kZXIocykpCisgICAgICAgIGZvciBzIGluICgnYScsICdhXycsICdfYScsICdfX2EnLCAnYV9fJywgJ19hXycsICdfYV9fJywgJ19fYV8nLCAnXycsCisgICAgICAgICAgICAgICAgJ19fJywgJ19fXycsICdfX19fJywgJ19fX19fJywpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlbnVtLl9pc19kdW5kZXIocykpCisKKworY2xhc3MgVGVzdEVudW0odW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBjbGFzcyBTZWFzb24oRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBTVU1NRVIgPSAyCisgICAgICAgICAgICBBVVRVTU4gPSAzCisgICAgICAgICAgICBXSU5URVIgPSA0CisgICAgICAgIHNlbGYuU2Vhc29uID0gU2Vhc29uCisKKyAgICAgICAgY2xhc3MgS29uc3RhbnRzKGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIEUgPSAyLjcxODI4MTgKKyAgICAgICAgICAgIFBJID0gMy4xNDE1OTI2CisgICAgICAgICAgICBUQVUgPSAyICogUEkKKyAgICAgICAgc2VsZi5Lb25zdGFudHMgPSBLb25zdGFudHMKKworICAgICAgICBjbGFzcyBHcmFkZXMoSW50RW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDAKKyAgICAgICAgc2VsZi5HcmFkZXMgPSBHcmFkZXMKKworICAgICAgICBjbGFzcyBEaXJlY3Rpb25hbChzdHIsIEVudW0pOgorICAgICAgICAgICAgRUFTVCA9ICdlYXN0JworICAgICAgICAgICAgV0VTVCA9ICd3ZXN0JworICAgICAgICAgICAgTk9SVEggPSAnbm9ydGgnCisgICAgICAgICAgICBTT1VUSCA9ICdzb3V0aCcKKyAgICAgICAgc2VsZi5EaXJlY3Rpb25hbCA9IERpcmVjdGlvbmFsCisKKyAgICAgICAgZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZQorICAgICAgICBjbGFzcyBIb2xpZGF5KGRhdGUsIEVudW0pOgorICAgICAgICAgICAgTkVXX1lFQVIgPSAyMDEzLCAxLCAxCisgICAgICAgICAgICBJREVTX09GX01BUkNIID0gMjAxMywgMywgMTUKKyAgICAgICAgc2VsZi5Ib2xpZGF5ID0gSG9saWRheQorCisgICAgZGVmIHRlc3RfZGlyX29uX2NsYXNzKHNlbGYpOgorICAgICAgICBTZWFzb24gPSBzZWxmLlNlYXNvbgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgc2V0KGRpcihTZWFzb24pKSwKKyAgICAgICAgICAgIHNldChbJ19fY2xhc3NfXycsICdfX2RvY19fJywgJ19fbWVtYmVyc19fJywgJ19fbW9kdWxlX18nLAorICAgICAgICAgICAgICAgICdTUFJJTkcnLCAnU1VNTUVSJywgJ0FVVFVNTicsICdXSU5URVInXSksCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kaXJfb25faXRlbShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNldChkaXIoU2Vhc29uLldJTlRFUikpLAorICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsICduYW1lJywgJ3ZhbHVlJ10pLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZGlyX3dpdGhfYWRkZWRfYmVoYXZpb3Ioc2VsZik6CisgICAgICAgIGNsYXNzIFRlc3QoRW51bSk6CisgICAgICAgICAgICB0aGlzID0gJ3RoYXQnCisgICAgICAgICAgICB0aGVzZSA9ICd0aG9zZScKKyAgICAgICAgICAgIGRlZiB3b3dzZXIoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICgiV293c2VyISBJJ20gJXMhIiAlIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzZXQoZGlyKFRlc3QpKSwKKyAgICAgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21lbWJlcnNfXycsICdfX21vZHVsZV9fJywgJ3RoaXMnLCAndGhlc2UnXSksCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChkaXIoVGVzdC50aGlzKSksCisgICAgICAgICAgICAgICAgc2V0KFsnX19jbGFzc19fJywgJ19fZG9jX18nLCAnX19tb2R1bGVfXycsICduYW1lJywgJ3ZhbHVlJywgJ3dvd3NlciddKSwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kaXJfb25fc3ViX3dpdGhfYmVoYXZpb3Jfb25fc3VwZXIoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlMjI1MDYKKyAgICAgICAgY2xhc3MgU3VwZXJFbnVtKEVudW0pOgorICAgICAgICAgICAgZGVmIGludmlzaWJsZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gImRpZCB5b3Ugc2VlIG1lPyIKKyAgICAgICAgY2xhc3MgU3ViRW51bShTdXBlckVudW0pOgorICAgICAgICAgICAgc2FtcGxlID0gNQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNldChkaXIoU3ViRW51bS5zYW1wbGUpKSwKKyAgICAgICAgICAgICAgICBzZXQoWydfX2NsYXNzX18nLCAnX19kb2NfXycsICdfX21vZHVsZV9fJywgJ25hbWUnLCAndmFsdWUnLCAnaW52aXNpYmxlJ10pLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2VudW1faW5fZW51bV9vdXQoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKFNlYXNvbi5XSU5URVIpLCBTZWFzb24uV0lOVEVSKQorCisgICAgZGVmIHRlc3RfZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfaW50ZW51bV92YWx1ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJbnRTdG9vZ2VzLkNVUkxZLnZhbHVlLCAyKQorCisgICAgZGVmIHRlc3RfZW51bShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgbHN0ID0gbGlzdChTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTZWFzb24pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTZWFzb24pLCA0LCBTZWFzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBbU2Vhc29uLlNQUklORywgU2Vhc29uLlNVTU1FUiwgU2Vhc29uLkFVVFVNTiwgU2Vhc29uLldJTlRFUl0sIGxzdCkKKworICAgICAgICBmb3IgaSwgc2Vhc29uIGluIGVudW1lcmF0ZSgnU1BSSU5HIFNVTU1FUiBBVVRVTU4gV0lOVEVSJy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTZWFzb24oaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgZ2V0YXR0cihTZWFzb24sIHNlYXNvbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUudmFsdWUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGUsIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUubmFtZSwgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFNlYXNvbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBTZWFzb24pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgJ1NlYXNvbi4nICsgc2Vhc29uKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVwcihlKSwKKyAgICAgICAgICAgICAgICAgICAgJzxTZWFzb24uezB9OiB7MX0+Jy5mb3JtYXQoc2Vhc29uLCBpKSwKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uU1BSSU5HLm5hbWUsICdTUFJJTkcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5TUFJJTkcudmFsdWUsIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLlNQUklORy5uYW1lID0gJ2ludmllcm5vJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcudmFsdWUgPSAyCisKKyAgICBkZWYgdGVzdF9jaGFuZ2luZ19tZW1iZXIoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgU2Vhc29uLldJTlRFUiA9ICdyZWFsbHkgY29sZCcKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gMworICAgICAgICAgICAgV0lOVEVSID0gNAorCisgICAgICAgICAgICBkZWYgc3BhbShjbHMpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihTZWFzb24sICdzcGFtJykpCisgICAgICAgIGRlbCBTZWFzb24uc3BhbQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoU2Vhc29uLCAnc3BhbScpKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIFNlYXNvbi5TUFJJTkcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgU2Vhc29uLkRSWQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBTZWFzb24uU1BSSU5HLm5hbWUKKworICAgIGRlZiB0ZXN0X2Jvb2xfb2ZfY2xhc3Moc2VsZik6CisgICAgICAgIGNsYXNzIEVtcHR5KEVudW0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFRydWUoYm9vbChFbXB0eSkpCisKKyAgICBkZWYgdGVzdF9ib29sX29mX21lbWJlcihzZWxmKToKKyAgICAgICAgY2xhc3MgQ291bnQoRW51bSk6CisgICAgICAgICAgICB6ZXJvID0gMAorICAgICAgICAgICAgb25lID0gMQorICAgICAgICAgICAgdHdvID0gMgorICAgICAgICBmb3IgbWVtYmVyIGluIENvdW50OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJvb2wobWVtYmVyKSkKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfbmFtZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBtcm8gPSA5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfY3JlYXRlXz0gMTEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9nZXRfbWl4aW5zXyA9IDkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIFdyb25nKEVudW0pOgorICAgICAgICAgICAgICAgIF9maW5kX25ld18gPSAxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBXcm9uZyhFbnVtKToKKyAgICAgICAgICAgICAgICBfYW55X25hbWVfID0gOQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oU2Vhc29uLkFVVFVNTiwgU2Vhc29uKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKDMsIFNlYXNvbikKKworICAgICAgICB2YWwgPSBTZWFzb24oMykKKyAgICAgICAgc2VsZi5hc3NlcnRJbih2YWwsIFNlYXNvbikKKworICAgICAgICBjbGFzcyBPdGhlckVudW0oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxOyB0d28gPSAyCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oT3RoZXJFbnVtLnR3bywgU2Vhc29uKQorCisgICAgZGVmIHRlc3RfY29tcGFyaXNvbnMoc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBTZWFzb24uV0lOVEVSCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPiA0CisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChTZWFzb24uU1BSSU5HLCAxKQorCisgICAgICAgIGNsYXNzIFBhcnQoRW51bSk6CisgICAgICAgICAgICBTUFJJTkcgPSAxCisgICAgICAgICAgICBDTElQID0gMgorICAgICAgICAgICAgQkFSUkVMID0gMworCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoU2Vhc29uLlNQUklORywgUGFydC5TUFJJTkcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIFNlYXNvbi5TUFJJTkcgPCBQYXJ0LkNMSVAKKworICAgIGRlZiB0ZXN0X2VudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgU2Vhc29uKEVudW0pOgorICAgICAgICAgICAgU1BSSU5HID0gMQorICAgICAgICAgICAgU1VNTUVSID0gMgorICAgICAgICAgICAgQVVUVU1OID0gRkFMTCA9IDMKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFOT1RIRVJfU1BSSU5HID0gMQorICAgICAgICBsc3QgPSBsaXN0KFNlYXNvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgIFtTZWFzb24uU1BSSU5HLCBTZWFzb24uU1VNTUVSLAorICAgICAgICAgICAgIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5XSU5URVIsCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbi5GQUxMLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5GQUxMLnZhbHVlLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNlYXNvbi5BVVRVTU4udmFsdWUsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU2Vhc29uKDMpLCBTZWFzb24uQVVUVU1OKQorICAgICAgICBzZWxmLmFzc2VydElzKFNlYXNvbigxKSwgU2Vhc29uLlNQUklORykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTZWFzb24uRkFMTC5uYW1lLCAnQVVUVU1OJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbayBmb3Igayx2IGluIFNlYXNvbi5fX21lbWJlcnNfXy5pdGVtcygpIGlmIHYubmFtZSAhPSBrXSwKKyAgICAgICAgICAgICAgICBbJ0ZBTEwnLCAnQU5PVEhFUl9TUFJJTkcnXSwKKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9kdXBsaWNhdGVfbmFtZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICAgICAgcmVkID0gNAorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkJworCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgICAgIGRlZiByZWQoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAncmVkZGVyJworICAgICAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgICAgICBibHVlID0gMworCisKKyAgICBkZWYgdGVzdF9lbnVtX3dpdGhfdmFsdWVfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgSHVoKEVudW0pOgorICAgICAgICAgICAgbmFtZSA9IDEKKyAgICAgICAgICAgIHZhbHVlID0gMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgbGlzdChIdWgpLAorICAgICAgICAgICAgW0h1aC5uYW1lLCBIdWgudmFsdWVdLAorICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoSHVoLm5hbWUpLCBIdWgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSHVoLm5hbWUubmFtZSwgJ25hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEh1aC5uYW1lLnZhbHVlLCAxKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW0oc2VsZik6CisgICAgICAgIFNlYXNvbiA9IHNlbGYuU2Vhc29uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3t9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCggJ3s6fScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnezp9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezoyMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezoyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7Ol4yMH0nLmZvcm1hdChTZWFzb24uU1BSSU5HKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnezpeMjB9Jy5mb3JtYXQoc3RyKFNlYXNvbi5TUFJJTkcpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezo+MjB9Jy5mb3JtYXQoU2Vhc29uLlNQUklORyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6PjIwfScuZm9ybWF0KHN0cihTZWFzb24uU1BSSU5HKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3s6PDIwfScuZm9ybWF0KFNlYXNvbi5TUFJJTkcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7OjwyMH0nLmZvcm1hdChzdHIoU2Vhc29uLlNQUklORykpKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2VudW1fY3VzdG9tKHNlbGYpOgorICAgICAgICBjbGFzcyBUZXN0RmxvYXQoZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgb25lID0gMS4wCisgICAgICAgICAgICB0d28gPSAyLjAKKyAgICAgICAgICAgIGRlZiBfX2Zvcm1hdF9fKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGVzdEZsb2F0IHN1Y2Nlc3MhJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fScuZm9ybWF0KFRlc3RGbG9hdC5vbmUpLCAnVGVzdEZsb2F0IHN1Y2Nlc3MhJykKKworICAgIGRlZiBhc3NlcnRGb3JtYXRJc1ZhbHVlKHNlbGYsIHNwZWMsIG1lbWJlcik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5mb3JtYXQobWVtYmVyKSwgc3BlYy5mb3JtYXQobWVtYmVyLnZhbHVlKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2RhdGUoc2VsZik6CisgICAgICAgIEhvbGlkYXkgPSBzZWxmLkhvbGlkYXkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7On0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgSG9saWRheS5JREVTX09GX01BUkNIKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PjIwfScsIEhvbGlkYXkuSURFU19PRl9NQVJDSCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbX0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezolWSAlbSAlTTowMH0nLCBIb2xpZGF5LklERVNfT0ZfTUFSQ0gpCisKKyAgICBkZWYgdGVzdF9mb3JtYXRfZW51bV9mbG9hdChzZWxmKToKKyAgICAgICAgS29uc3RhbnRzID0gc2VsZi5Lb25zdGFudHMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezp9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7Oj4yMH0nLCBLb25zdGFudHMuVEFVKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6PDIwfScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpufScsIEtvbnN0YW50cy5UQVUpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo1LjJ9JywgS29uc3RhbnRzLlRBVSkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OmZ9JywgS29uc3RhbnRzLlRBVSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX2ludChzZWxmKToKKyAgICAgICAgR3JhZGVzID0gc2VsZi5HcmFkZXMKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezpeMjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo8MjB9JywgR3JhZGVzLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezorfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6MDhYfScsIEdyYWRlcy5DKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6Yn0nLCBHcmFkZXMuQykKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF9lbnVtX3N0cihzZWxmKToKKyAgICAgICAgRGlyZWN0aW9uYWwgPSBzZWxmLkRpcmVjdGlvbmFsCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgne30nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6fScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezoyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorICAgICAgICBzZWxmLmFzc2VydEZvcm1hdElzVmFsdWUoJ3s6XjIwfScsIERpcmVjdGlvbmFsLldFU1QpCisgICAgICAgIHNlbGYuYXNzZXJ0Rm9ybWF0SXNWYWx1ZSgnezo+MjB9JywgRGlyZWN0aW9uYWwuV0VTVCkKKyAgICAgICAgc2VsZi5hc3NlcnRGb3JtYXRJc1ZhbHVlKCd7OjwyMH0nLCBEaXJlY3Rpb25hbC5XRVNUKQorCisgICAgZGVmIHRlc3RfaGFzaChzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgZGF0ZXMgPSB7fQorICAgICAgICBkYXRlc1tTZWFzb24uV0lOVEVSXSA9ICcxMjI1JworICAgICAgICBkYXRlc1tTZWFzb24uU1BSSU5HXSA9ICcwMzE1JworICAgICAgICBkYXRlc1tTZWFzb24uU1VNTUVSXSA9ICcwNzA0JworICAgICAgICBkYXRlc1tTZWFzb24uQVVUVU1OXSA9ICcxMDMxJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGVzW1NlYXNvbi5BVVRVTU5dLCAnMTAzMScpCisKKyAgICBkZWYgdGVzdF9pbnRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGludCwgRW51bSk6CisgICAgICAgICAgICBwaSA9IDMKKyAgICAgICAgICAgIHRhdSA9IDIgKiBwaQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIHBoeShJbnRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMworICAgICAgICAgICAgdGF1ID0gMiAqIHBpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3RfZmxvYXRlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KGZsb2F0LCBFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9mbG9hdGVudW1faW5oZXJpdGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBGbG9hdEVudW0oZmxvYXQsIEVudW0pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBwaHkoRmxvYXRFbnVtKToKKyAgICAgICAgICAgIHBpID0gMy4xNDE1OTI2CisgICAgICAgICAgICB0YXUgPSAyICogcGkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBoeS5waSA8IHBoeS50YXUpCisKKyAgICBkZWYgdGVzdF9zdHJlbnVtX2Zyb21fc2NyYXRjaChzZWxmKToKKyAgICAgICAgY2xhc3MgcGh5KHN0ciwgRW51bSk6CisgICAgICAgICAgICBwaSA9ICdQaScKKyAgICAgICAgICAgIHRhdSA9ICdUYXUnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwaHkucGkgPCBwaHkudGF1KQorCisgICAgZGVmIHRlc3Rfc3RyZW51bV9pbmhlcml0ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIFN0ckVudW0oc3RyLCBFbnVtKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgcGh5KFN0ckVudW0pOgorICAgICAgICAgICAgcGkgPSAnUGknCisgICAgICAgICAgICB0YXUgPSAnVGF1JworICAgICAgICBzZWxmLmFzc2VydFRydWUocGh5LnBpIDwgcGh5LnRhdSkKKworCisgICAgZGVmIHRlc3RfaW50ZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSAzCisgICAgICAgICAgICBXRURORVNEQVkgPSA0CisgICAgICAgICAgICBUSFVSU0RBWSA9IDUKKyAgICAgICAgICAgIEZSSURBWSA9IDYKKyAgICAgICAgICAgIFNBVFVSREFZID0gNworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydhJywgJ2InLCAnYyddW1dlZWtEYXkuTU9OREFZXSwgJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtpIGZvciBpIGluIHJhbmdlKFdlZWtEYXkuVFVFU0RBWSldLCBbMCwgMSwgMl0pCisKKyAgICAgICAgbHN0ID0gbGlzdChXZWVrRGF5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oV2Vla0RheSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFdlZWtEYXkpLCA3KQorICAgICAgICB0YXJnZXQgPSAnU1VOREFZIE1PTkRBWSBUVUVTREFZIFdFRE5FU0RBWSBUSFVSU0RBWSBGUklEQVkgU0FUVVJEQVknCisgICAgICAgIHRhcmdldCA9IHRhcmdldC5zcGxpdCgpCisgICAgICAgIGZvciBpLCB3ZWVrZGF5IGluIGVudW1lcmF0ZSh0YXJnZXQsIDEpOgorICAgICAgICAgICAgZSA9IFdlZWtEYXkoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIHdlZWtkYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKGUsIFdlZWtEYXkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxzdC5pbmRleChlKSsxLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPCBlIDwgOCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgV2Vla0RheSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZSwgRW51bSkKKworICAgIGRlZiB0ZXN0X2ludGVudW1fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgV2Vla0RheShJbnRFbnVtKToKKyAgICAgICAgICAgIFNVTkRBWSA9IDEKKyAgICAgICAgICAgIE1PTkRBWSA9IDIKKyAgICAgICAgICAgIFRVRVNEQVkgPSBURVVTREFZID0gMworICAgICAgICAgICAgV0VETkVTREFZID0gNAorICAgICAgICAgICAgVEhVUlNEQVkgPSA1CisgICAgICAgICAgICBGUklEQVkgPSA2CisgICAgICAgICAgICBTQVRVUkRBWSA9IDcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhXZWVrRGF5LlRFVVNEQVksIFdlZWtEYXkuVFVFU0RBWSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChXZWVrRGF5KDMpLm5hbWUsICdUVUVTREFZJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbayBmb3Igayx2IGluIFdlZWtEYXkuX19tZW1iZXJzX18uaXRlbXMoKQorICAgICAgICAgICAgICAgIGlmIHYubmFtZSAhPSBrXSwgWydURVVTREFZJywgXSkKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9lbnVtKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKFN0b29nZXMsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBTdG9vZ2VzCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBTdG9vZ2VzLkNVUkxZKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgU3Rvb2dlcykKKworICAgIGRlZiB0ZXN0X3BpY2tsZV9pbnQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoSW50U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEludFN0b29nZXMKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIEludFN0b29nZXMuQ1VSTFkpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBJbnRTdG9vZ2VzKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2Zsb2F0KHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKEZsb2F0U3Rvb2dlcywgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIEZsb2F0U3Rvb2dlcworICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgRmxvYXRTdG9vZ2VzLkNVUkxZKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgRmxvYXRTdG9vZ2VzKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW1fZnVuY3Rpb24oc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoQW5zd2VyLCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgQW5zd2VyCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBBbnN3ZXIuaGltKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgQW5zd2VyKQorCisgICAgZGVmIHRlc3RfcGlja2xlX2VudW1fZnVuY3Rpb25fd2l0aF9tb2R1bGUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoUXVlc3Rpb24sIEV4Y2VwdGlvbik6CisgICAgICAgICAgICByYWlzZSBRdWVzdGlvbgorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgUXVlc3Rpb24ud2hvKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgUXVlc3Rpb24pCisKKyAgICBkZWYgdGVzdF9lbnVtX2Z1bmN0aW9uX3dpdGhfcXVhbG5hbWUoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoVGhlb3J5LCBFeGNlcHRpb24pOgorICAgICAgICAgICAgcmFpc2UgVGhlb3J5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVGhlb3J5Ll9fcXVhbG5hbWVfXywgJ3NwYW5pc2hfaW5xdWlzaXRpb24nKQorCisgICAgZGVmIHRlc3RfY2xhc3NfbmVzdGVkX2VudW1fYW5kX3BpY2tsZV9wcm90b2NvbF9mb3VyKHNlbGYpOgorICAgICAgICAjIHdvdWxkIG5vcm1hbGx5IGp1c3QgaGF2ZSB0aGlzIGRpcmVjdGx5IGluIHRoZSBjbGFzcyBuYW1lc3BhY2UKKyAgICAgICAgY2xhc3MgTmVzdGVkRW51bShFbnVtKToKKyAgICAgICAgICAgIHR3aWdzID0gJ2NvbW1vbicKKyAgICAgICAgICAgIHNoaW55ID0gJ3JhcmUnCisKKyAgICAgICAgc2VsZi5fX2NsYXNzX18uTmVzdGVkRW51bSA9IE5lc3RlZEVudW0KKyAgICAgICAgc2VsZi5OZXN0ZWRFbnVtLl9fcXVhbG5hbWVfXyA9ICclcy5OZXN0ZWRFbnVtJyAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisgICAgICAgIHRlc3RfcGlja2xlX2V4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcywgUGlja2xpbmdFcnJvciwgc2VsZi5OZXN0ZWRFbnVtLnR3aWdzLAorICAgICAgICAgICAgICAgIHByb3RvY29sPSgwLCAzKSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIHNlbGYuTmVzdGVkRW51bS50d2lncywKKyAgICAgICAgICAgICAgICBwcm90b2NvbD0oNCwgSElHSEVTVF9QUk9UT0NPTCkpCisKKyAgICBkZWYgdGVzdF9waWNrbGVfYnlfbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgUmVwbGFjZUdsb2JhbEludChJbnRFbnVtKToKKyAgICAgICAgICAgIE9ORSA9IDEKKyAgICAgICAgICAgIFRXTyA9IDIKKyAgICAgICAgUmVwbGFjZUdsb2JhbEludC5fX3JlZHVjZV9leF9fID0gZW51bS5fcmVkdWNlX2V4X2J5X25hbWUKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKEhJR0hFU1RfUFJPVE9DT0wpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChSZXBsYWNlR2xvYmFsSW50LlRXTy5fX3JlZHVjZV9leF9fKHByb3RvKSwgJ1RXTycpCisKKyAgICBkZWYgdGVzdF9leHBsb2RpbmdfcGlja2xlKHNlbGYpOgorICAgICAgICBCYWRQaWNrbGUgPSBFbnVtKAorICAgICAgICAgICAgICAgICdCYWRQaWNrbGUnLCAnZGlsbCBzd2VldCBicmVhZC1uLWJ1dHRlcicsIG1vZHVsZT1fX25hbWVfXykKKyAgICAgICAgZ2xvYmFscygpWydCYWRQaWNrbGUnXSA9IEJhZFBpY2tsZQorICAgICAgICAjIG5vdyBicmVhayBCYWRQaWNrbGUgdG8gdGVzdCBleGNlcHRpb24gcmFpc2luZworICAgICAgICBlbnVtLl9tYWtlX2NsYXNzX3VucGlja2xhYmxlKEJhZFBpY2tsZSkKKyAgICAgICAgdGVzdF9waWNrbGVfZXhjZXB0aW9uKHNlbGYuYXNzZXJ0UmFpc2VzLCBUeXBlRXJyb3IsIEJhZFBpY2tsZS5kaWxsKQorICAgICAgICB0ZXN0X3BpY2tsZV9leGNlcHRpb24oc2VsZi5hc3NlcnRSYWlzZXMsIFBpY2tsaW5nRXJyb3IsIEJhZFBpY2tsZSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ19lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBTa2lsbExldmVsKHN0ciwgRW51bSk6CisgICAgICAgICAgICBtYXN0ZXIgPSAnd2hhdCBpcyB0aGUgc291bmQgb2Ygb25lIGhhbmQgY2xhcHBpbmc/JworICAgICAgICAgICAgam91cm5leW1hbiA9ICd3aHkgZGlkIHRoZSBjaGlja2VuIGNyb3NzIHRoZSByb2FkPycKKyAgICAgICAgICAgIGFwcHJlbnRpY2UgPSAna25vY2ssIGtub2NrIScKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChTa2lsbExldmVsLmFwcHJlbnRpY2UsICdrbm9jaywga25vY2shJykKKworICAgIGRlZiB0ZXN0X2dldGF0dHJfZ2V0aXRlbShzZWxmKToKKyAgICAgICAgY2xhc3MgUGVyaW9kKEVudW0pOgorICAgICAgICAgICAgbW9ybmluZyA9IDEKKyAgICAgICAgICAgIG5vb24gPSAyCisgICAgICAgICAgICBldmVuaW5nID0gMworICAgICAgICAgICAgbmlnaHQgPSA0CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoUGVyaW9kKDIpLCBQZXJpb2Qubm9vbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKFBlcmlvZCwgJ25pZ2h0JyksIFBlcmlvZC5uaWdodCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhQZXJpb2RbJ21vcm5pbmcnXSwgUGVyaW9kLm1vcm5pbmcpCisKKyAgICBkZWYgdGVzdF9nZXRhdHRyX2R1bmRlcihzZWxmKToKKyAgICAgICAgU2Vhc29uID0gc2VsZi5TZWFzb24KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIoU2Vhc29uLCAnX19lcV9fJykpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRpb25fb3JkZXIoc2VsZik6CisgICAgICAgIGNsYXNzIFNlYXNvbihFbnVtKToKKyAgICAgICAgICAgIFNVTU1FUiA9IDIKKyAgICAgICAgICAgIFdJTlRFUiA9IDQKKyAgICAgICAgICAgIEFVVFVNTiA9IDMKKyAgICAgICAgICAgIFNQUklORyA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KFNlYXNvbiksCisgICAgICAgICAgICAgICAgW1NlYXNvbi5TVU1NRVIsIFNlYXNvbi5XSU5URVIsIFNlYXNvbi5BVVRVTU4sIFNlYXNvbi5TUFJJTkddLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3JldmVyc2VkX2l0ZXJhdGlvbl9vcmRlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KHJldmVyc2VkKHNlbGYuU2Vhc29uKSksCisgICAgICAgICAgICAgICAgW3NlbGYuU2Vhc29uLldJTlRFUiwgc2VsZi5TZWFzb24uQVVUVU1OLCBzZWxmLlNlYXNvbi5TVU1NRVIsCisgICAgICAgICAgICAgICAgIHNlbGYuU2Vhc29uLlNQUklOR10KKyAgICAgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9zdHJpbmcoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcpCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl9zdHJpbmdfbGlzdChzZWxmKToKKyAgICAgICAgU3VtbWVyTW9udGggPSBFbnVtKCdTdW1tZXJNb250aCcsIFsnanVuZScsICdqdWx5JywgJ2F1Z3VzdCddKQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlLnZhbHVlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25faXRlcmFibGUoc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gRW51bSgKKyAgICAgICAgICAgICAgICAnU3VtbWVyTW9udGgnLAorICAgICAgICAgICAgICAgICgoJ2p1bmUnLCAxKSwgKCdqdWx5JywgMiksICgnYXVndXN0JywgMykpCisgICAgICAgICAgICAgICAgKQorICAgICAgICBsc3QgPSBsaXN0KFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsc3QpLCBsZW4oU3VtbWVyTW9udGgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihTdW1tZXJNb250aCksIDMsIFN1bW1lck1vbnRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIFtTdW1tZXJNb250aC5qdW5lLCBTdW1tZXJNb250aC5qdWx5LCBTdW1tZXJNb250aC5hdWd1c3RdLAorICAgICAgICAgICAgICAgIGxzdCwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGZvciBpLCBtb250aCBpbiBlbnVtZXJhdGUoJ2p1bmUganVseSBhdWd1c3QnLnNwbGl0KCksIDEpOgorICAgICAgICAgICAgZSA9IFN1bW1lck1vbnRoKGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChlLnZhbHVlKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3RfcHJvZ3JhbWF0aWNfZnVuY3Rpb25fZnJvbV9kaWN0KHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oCisgICAgICAgICAgICAgICAgJ1N1bW1lck1vbnRoJywKKyAgICAgICAgICAgICAgICBPcmRlcmVkRGljdCgoKCdqdW5lJywgMSksICgnanVseScsIDIpLCAoJ2F1Z3VzdCcsIDMpKSkKKyAgICAgICAgICAgICAgICApCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGUudmFsdWUpLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl90eXBlKHNlbGYpOgorICAgICAgICBTdW1tZXJNb250aCA9IEVudW0oJ1N1bW1lck1vbnRoJywgJ2p1bmUganVseSBhdWd1c3QnLCB0eXBlPWludCkKKyAgICAgICAgbHN0ID0gbGlzdChTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obHN0KSwgbGVuKFN1bW1lck1vbnRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oU3VtbWVyTW9udGgpLCAzLCBTdW1tZXJNb250aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBbU3VtbWVyTW9udGguanVuZSwgU3VtbWVyTW9udGguanVseSwgU3VtbWVyTW9udGguYXVndXN0XSwKKyAgICAgICAgICAgICAgICBsc3QsCisgICAgICAgICAgICAgICAgKQorICAgICAgICBmb3IgaSwgbW9udGggaW4gZW51bWVyYXRlKCdqdW5lIGp1bHkgYXVndXN0Jy5zcGxpdCgpLCAxKToKKyAgICAgICAgICAgIGUgPSBTdW1tZXJNb250aChpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLCBpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLm5hbWUsIG1vbnRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlLCBTdW1tZXJNb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShlKSwgU3VtbWVyTW9udGgpCisKKyAgICBkZWYgdGVzdF9wcm9ncmFtYXRpY19mdW5jdGlvbl90eXBlX2Zyb21fc3ViY2xhc3Moc2VsZik6CisgICAgICAgIFN1bW1lck1vbnRoID0gSW50RW51bSgnU3VtbWVyTW9udGgnLCAnanVuZSBqdWx5IGF1Z3VzdCcpCisgICAgICAgIGxzdCA9IGxpc3QoU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIGxlbihTdW1tZXJNb250aCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKFN1bW1lck1vbnRoKSwgMywgU3VtbWVyTW9udGgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgW1N1bW1lck1vbnRoLmp1bmUsIFN1bW1lck1vbnRoLmp1bHksIFN1bW1lck1vbnRoLmF1Z3VzdF0sCisgICAgICAgICAgICAgICAgbHN0LAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgZm9yIGksIG1vbnRoIGluIGVudW1lcmF0ZSgnanVuZSBqdWx5IGF1Z3VzdCcuc3BsaXQoKSwgMSk6CisgICAgICAgICAgICBlID0gU3VtbWVyTW9udGgoaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5uYW1lLCBtb250aCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZSwgU3VtbWVyTW9udGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZSksIFN1bW1lck1vbnRoKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Npbmcoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoTmFtZSwgRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHJhaXNlIE5hbWUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOYW1lLkJERkwsICdHdWlkbyB2YW4gUm9zc3VtJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKE5hbWUuQkRGTCwgTmFtZSgnR3VpZG8gdmFuIFJvc3N1bScpKQorICAgICAgICBzZWxmLmFzc2VydElzKE5hbWUuQkRGTCwgZ2V0YXR0cihOYW1lLCAnQkRGTCcpKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTmFtZS5CREZMKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBDb2xvcihFbnVtKToKKyAgICAgICAgICAgIHJlZCA9IDEKKyAgICAgICAgICAgIGdyZWVuID0gMgorICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAgICAgICAgICAgICBjeWFuID0gNAorICAgICAgICAgICAgICAgIG1hZ2VudGEgPSA1CisgICAgICAgICAgICAgICAgeWVsbG93ID0gNgorCisgICAgZGVmIHRlc3RfZXhjbHVkZV9tZXRob2RzKHNlbGYpOgorICAgICAgICBjbGFzcyB3aGF0ZXZlcihFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAndGhhdCcKKyAgICAgICAgICAgIHRoZXNlID0gJ3Rob3NlJworICAgICAgICAgICAgZGVmIHJlYWxseShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ25vLCBub3QgJXMnICUgc2VsZi52YWx1ZQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHR5cGUod2hhdGV2ZXIucmVhbGx5KSwgd2hhdGV2ZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2hhdGV2ZXIudGhpcy5yZWFsbHkoKSwgJ25vLCBub3QgdGhhdCcpCisKKyAgICBkZWYgdGVzdF93cm9uZ19pbmhlcml0YW5jZV9vcmRlcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY2xhc3MgV3JvbmcoRW51bSwgc3RyKToKKyAgICAgICAgICAgICAgICBOb3RIZXJlID0gJ2Vycm9yIGJlZm9yZSB0aGlzIHBvaW50JworCisgICAgZGVmIHRlc3RfaW50ZW51bV90cmFuc2l0aXZpdHkoc2VsZik6CisgICAgICAgIGNsYXNzIG51bWJlcihJbnRFbnVtKToKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgICAgIHR3byA9IDIKKyAgICAgICAgICAgIHRocmVlID0gMworICAgICAgICBjbGFzcyBudW1lcm8oSW50RW51bSk6CisgICAgICAgICAgICB1bm8gPSAxCisgICAgICAgICAgICBkb3MgPSAyCisgICAgICAgICAgICB0cmVzID0gMworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG51bWJlci5vbmUsIG51bWVyby51bm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnVtYmVyLnR3bywgbnVtZXJvLmRvcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChudW1iZXIudGhyZWUsIG51bWVyby50cmVzKQorCisgICAgZGVmIHRlc3Rfd3JvbmdfZW51bV9pbl9jYWxsKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgTW9ub2Nocm9tZSwgR2VuZGVyLm1hbGUpCisKKyAgICBkZWYgdGVzdF93cm9uZ19lbnVtX2luX21peGVkX2NhbGwoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoSW50RW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoRW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBNb25vY2hyb21lLCBHZW5kZXIubWFsZSkKKworICAgIGRlZiB0ZXN0X21peGVkX2VudW1faW5fY2FsbF8xKHNlbGYpOgorICAgICAgICBjbGFzcyBNb25vY2hyb21lKEludEVudW0pOgorICAgICAgICAgICAgYmxhY2sgPSAwCisgICAgICAgICAgICB3aGl0ZSA9IDEKKyAgICAgICAgY2xhc3MgR2VuZGVyKEludEVudW0pOgorICAgICAgICAgICAgbWFsZSA9IDAKKyAgICAgICAgICAgIGZlbWFsZSA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhNb25vY2hyb21lKEdlbmRlci5mZW1hbGUpLCBNb25vY2hyb21lLndoaXRlKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfZW51bV9pbl9jYWxsXzIoc2VsZik6CisgICAgICAgIGNsYXNzIE1vbm9jaHJvbWUoRW51bSk6CisgICAgICAgICAgICBibGFjayA9IDAKKyAgICAgICAgICAgIHdoaXRlID0gMQorICAgICAgICBjbGFzcyBHZW5kZXIoSW50RW51bSk6CisgICAgICAgICAgICBtYWxlID0gMAorICAgICAgICAgICAgZmVtYWxlID0gMQorICAgICAgICBzZWxmLmFzc2VydElzKE1vbm9jaHJvbWUoR2VuZGVyLm1hbGUpLCBNb25vY2hyb21lLmJsYWNrKQorCisgICAgZGVmIHRlc3RfZmx1ZmxfZW51bShzZWxmKToKKyAgICAgICAgY2xhc3MgRmx1ZmxudW0oRW51bSk6CisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYudmFsdWUpCisgICAgICAgIGNsYXNzIE1haWxNYW5PcHRpb25zKEZsdWZsbnVtKToKKyAgICAgICAgICAgIG9wdGlvbjEgPSAxCisgICAgICAgICAgICBvcHRpb24yID0gMgorICAgICAgICAgICAgb3B0aW9uMyA9IDMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoTWFpbE1hbk9wdGlvbnMub3B0aW9uMSksIDEpCisKKyAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uKHNlbGYpOgorICAgICAgICBjbGFzcyBOdW1iZXIoSW50RW51bSk6CisgICAgICAgICAgICBvbmUgPSAxMDAKKyAgICAgICAgICAgIHR3byA9IDIwMAorICAgICAgICBzZWxmLmFzc2VydElzKE51bWJlci5vbmUuX21lbWJlcl90eXBlXywgaW50KQorICAgICAgICBzZWxmLmFzc2VydElzKE51bWJlci5fbWVtYmVyX3R5cGVfLCBpbnQpCisgICAgICAgIGNsYXNzIFN0cmluZyhzdHIsIEVudW0pOgorICAgICAgICAgICAgeWFybiA9ICdzb2Z0JworICAgICAgICAgICAgcm9wZSA9ICdyb3VnaCcKKyAgICAgICAgICAgIHdpcmUgPSAnaGFyZCcKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhTdHJpbmcueWFybi5fbWVtYmVyX3R5cGVfLCBzdHIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoU3RyaW5nLl9tZW1iZXJfdHlwZV8sIHN0cikKKyAgICAgICAgY2xhc3MgUGxhaW4oRW51bSk6CisgICAgICAgICAgICB2YW5pbGxhID0gJ3doaXRlJworICAgICAgICAgICAgb25lID0gMQorICAgICAgICBzZWxmLmFzc2VydElzKFBsYWluLnZhbmlsbGEuX21lbWJlcl90eXBlXywgb2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydElzKFBsYWluLl9tZW1iZXJfdHlwZV8sIG9iamVjdCkKKworICAgIGRlZiB0ZXN0X25vX3N1Y2hfZW51bV9tZW1iZXIoc2VsZik6CisgICAgICAgIGNsYXNzIENvbG9yKEVudW0pOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgQ29sb3IoNCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBDb2xvclsnY2hhcnRyZXVzZSddCisKKyAgICBkZWYgdGVzdF9uZXdfcmVwcihzZWxmKToKKyAgICAgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJkb24ndCB5b3UganVzdCBsb3ZlIHNoYWRlcyBvZiAlcz8iICUgc2VsZi5uYW1lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVwcihDb2xvci5ibHVlKSwKKyAgICAgICAgICAgICAgICAiZG9uJ3QgeW91IGp1c3QgbG92ZSBzaGFkZXMgb2YgYmx1ZT8iLAorICAgICAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9yZXByKHNlbGYpOgorICAgICAgICBjbGFzcyBNeUVudW0oRW51bSk6CisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICJNeSBuYW1lIGlzICVzLiIgJSBzZWxmLm5hbWUKKyAgICAgICAgY2xhc3MgTXlJbnRFbnVtKGludCwgTXlFbnVtKToKKyAgICAgICAgICAgIHRoaXMgPSAxCisgICAgICAgICAgICB0aGF0ID0gMgorICAgICAgICAgICAgdGhlb3RoZXIgPSAzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihNeUludEVudW0udGhhdCksICJNeSBuYW1lIGlzIHRoYXQuIikKKworICAgIGRlZiB0ZXN0X211bHRpcGxlX21peGluX21ybyhzZWxmKToKKyAgICAgICAgY2xhc3MgYXV0b19lbnVtKHR5cGUoRW51bSkpOgorICAgICAgICAgICAgZGVmIF9fbmV3X18obWV0YWNscywgY2xzLCBiYXNlcywgY2xhc3NkaWN0KToKKyAgICAgICAgICAgICAgICB0ZW1wID0gdHlwZShjbGFzc2RpY3QpKCkKKyAgICAgICAgICAgICAgICBuYW1lcyA9IHNldChjbGFzc2RpY3QuX21lbWJlcl9uYW1lcykKKyAgICAgICAgICAgICAgICBpID0gMAorICAgICAgICAgICAgICAgIGZvciBrIGluIGNsYXNzZGljdC5fbWVtYmVyX25hbWVzOgorICAgICAgICAgICAgICAgICAgICB2ID0gY2xhc3NkaWN0W2tdCisgICAgICAgICAgICAgICAgICAgIGlmIHYgaXMgRWxsaXBzaXM6CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gaQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgaSA9IHYKKyAgICAgICAgICAgICAgICAgICAgaSArPSAxCisgICAgICAgICAgICAgICAgICAgIHRlbXBba10gPSB2CisgICAgICAgICAgICAgICAgZm9yIGssIHYgaW4gY2xhc3NkaWN0Lml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIGsgbm90IGluIG5hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcFtrXSA9IHYKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoYXV0b19lbnVtLCBtZXRhY2xzKS5fX25ld19fKAorICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWNscywgY2xzLCBiYXNlcywgdGVtcCkKKworICAgICAgICBjbGFzcyBBdXRvTnVtYmVyZWRFbnVtKEVudW0sIG1ldGFjbGFzcz1hdXRvX2VudW0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEF1dG9JbnRFbnVtKEludEVudW0sIG1ldGFjbGFzcz1hdXRvX2VudW0pOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFRlc3RBdXRvTnVtYmVyKEF1dG9OdW1iZXJlZEVudW0pOgorICAgICAgICAgICAgYSA9IC4uLgorICAgICAgICAgICAgYiA9IDMKKyAgICAgICAgICAgIGMgPSAuLi4KKworICAgICAgICBjbGFzcyBUZXN0QXV0b0ludChBdXRvSW50RW51bSk6CisgICAgICAgICAgICBhID0gLi4uCisgICAgICAgICAgICBiID0gMworICAgICAgICAgICAgYyA9IC4uLgorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRoX2dldG5ld2FyZ3Moc2VsZik6CisgICAgICAgIGNsYXNzIE5hbWVkSW50KGludCk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTmFtZWRJbnQnICAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX2dldG5ld2FyZ3NfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fYXJncworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05FSScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRFcXVhbCwgTkk1LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5FSS55LnZhbHVlLCAyKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJLnkpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkpCisKKyAgICBkZWYgdGVzdF9zdWJjbGFzc2VzX3dpdGhfZ2V0bmV3YXJnc19leChzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcgICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9fZ2V0bmV3YXJnc19leF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9hcmdzLCB7fQorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgX19uYW1lX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2ludG5hbWUKKyAgICAgICAgICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHJlcHIoKSBpcyB1cGRhdGVkIHRvIGluY2x1ZGUgdGhlIG5hbWUgYW5kIHR5cGUgaW5mbworICAgICAgICAgICAgICAgIHJldHVybiAie30oeyFyfSwge30pIi5mb3JtYXQodHlwZShzZWxmKS5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQuX19yZXByX18oc2VsZikpCisgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAjIHN0cigpIGlzIHVuY2hhbmdlZCwgZXZlbiBpZiBpdCByZWxpZXMgb24gdGhlIHJlcHIoKSBmYWxsYmFjaworICAgICAgICAgICAgICAgIGJhc2UgPSBpbnQKKyAgICAgICAgICAgICAgICBiYXNlX3N0ciA9IGJhc2UuX19zdHJfXworICAgICAgICAgICAgICAgIGlmIGJhc2Vfc3RyLl9fb2JqY2xhc3NfXyBpcyBvYmplY3Q6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXNlLl9fcmVwcl9fKHNlbGYpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2Vfc3RyKHNlbGYpCisgICAgICAgICAgICAjIGZvciBzaW1wbGljaXR5LCB3ZSBvbmx5IGRlZmluZSBvbmUgb3BlcmF0b3IgdGhhdAorICAgICAgICAgICAgIyBwcm9wYWdhdGVzIGV4cHJlc3Npb25zCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgdGVtcCA9IGludChzZWxmKSArIGludCggb3RoZXIpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzZWxmLCBOYW1lZEludCkgYW5kIGlzaW5zdGFuY2Uob3RoZXIsIE5hbWVkSW50KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVkSW50KAorICAgICAgICAgICAgICAgICAgICAgICAgJyh7MH0gKyB7MX0pJy5mb3JtYXQoc2VsZi5fX25hbWVfXywgb3RoZXIuX19uYW1lX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlbXAKKworICAgICAgICBjbGFzcyBORUkoTmFtZWRJbnQsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05FSScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIHggPSAoJ3RoZS14JywgMSkKKyAgICAgICAgICAgIHkgPSAoJ3RoZS15JywgMikKKworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRFcXVhbCwgTkk1LCA1LCBwcm90b2NvbD0oNCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkueSwgcHJvdG9jb2w9KDQsIDQpKQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRoX3JlZHVjZShzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcgICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICBfYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBuYW1lLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgICAgICAgICBpZiBsZW4oYXJncykgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJuYW1lIGFuZCB2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCIpCisgICAgICAgICAgICAgICAgc2VsZiA9IGludC5fX25ld19fKGNscywgKmFyZ3MpCisgICAgICAgICAgICAgICAgc2VsZi5faW50bmFtZSA9IG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl9hcmdzID0gX2FyZ3MKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICAgICAgZGVmIF9fcmVkdWNlX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fLCBzZWxmLl9hcmdzCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTkVJJyAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydEVxdWFsLCBOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkueSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSSkKKworICAgIGRlZiB0ZXN0X3N1YmNsYXNzZXNfd2l0aF9yZWR1Y2VfZXgoc2VsZik6CisgICAgICAgIGNsYXNzIE5hbWVkSW50KGludCk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTmFtZWRJbnQnICAgICAgICMgbmVlZGVkIGZvciBwaWNrbGUgcHJvdG9jb2wgNAorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX3JlZHVjZV9leF9fKHNlbGYsIHByb3RvKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fX2NsYXNzX18sIHNlbGYuX2FyZ3MKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbmFtZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRuYW1lCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyByZXByKCkgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBuYW1lIGFuZCB0eXBlIGluZm8KKyAgICAgICAgICAgICAgICByZXR1cm4gInt9KHshcn0sIHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Ll9fcmVwcl9fKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBzdHIoKSBpcyB1bmNoYW5nZWQsIGV2ZW4gaWYgaXQgcmVsaWVzIG9uIHRoZSByZXByKCkgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICBiYXNlID0gaW50CisgICAgICAgICAgICAgICAgYmFzZV9zdHIgPSBiYXNlLl9fc3RyX18KKyAgICAgICAgICAgICAgICBpZiBiYXNlX3N0ci5fX29iamNsYXNzX18gaXMgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5fX3JlcHJfXyhzZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3N0cihzZWxmKQorICAgICAgICAgICAgIyBmb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBkZWZpbmUgb25lIG9wZXJhdG9yIHRoYXQKKyAgICAgICAgICAgICMgcHJvcGFnYXRlcyBleHByZXNzaW9ucworICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBpbnQoc2VsZikgKyBpbnQoIG90aGVyKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgTmFtZWRJbnQpIGFuZCBpc2luc3RhbmNlKG90aGVyLCBOYW1lZEludCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lZEludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcoezB9ICsgezF9KScuZm9ybWF0KHNlbGYuX19uYW1lX18sIG90aGVyLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wCisKKyAgICAgICAgY2xhc3MgTkVJKE5hbWVkSW50LCBFbnVtKToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdORUknICAgICAgIyBuZWVkZWQgZm9yIHBpY2tsZSBwcm90b2NvbCA0CisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisKKworICAgICAgICBzZWxmLmFzc2VydElzKE5FSS5fX25ld19fLCBFbnVtLl9fbmV3X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihORUkueCArIE5FSS55KSwgIk5hbWVkSW50KCcodGhlLXggKyB0aGUteSknLCAzKSIpCisgICAgICAgIGdsb2JhbHMoKVsnTmFtZWRJbnQnXSA9IE5hbWVkSW50CisgICAgICAgIGdsb2JhbHMoKVsnTkVJJ10gPSBORUkKKyAgICAgICAgTkk1ID0gTmFtZWRJbnQoJ3Rlc3QnLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5JNSwgNSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0RXF1YWwsIE5JNSwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChORUkueS52YWx1ZSwgMikKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSS55KQorICAgICAgICB0ZXN0X3BpY2tsZV9kdW1wX2xvYWQoc2VsZi5hc3NlcnRJcywgTkVJKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRob3V0X2RpcmVjdF9waWNrbGVfc3VwcG9ydChzZWxmKToKKyAgICAgICAgY2xhc3MgTmFtZWRJbnQoaW50KToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdOYW1lZEludCcKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MpOgorICAgICAgICAgICAgICAgIF9hcmdzID0gYXJncworICAgICAgICAgICAgICAgIG5hbWUsICphcmdzID0gYXJncworICAgICAgICAgICAgICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIm5hbWUgYW5kIHZhbHVlIG11c3QgYmUgc3BlY2lmaWVkIikKKyAgICAgICAgICAgICAgICBzZWxmID0gaW50Ll9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgICAgICAgICBzZWxmLl9pbnRuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgIHNlbGYuX2FyZ3MgPSBfYXJncworICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX25hbWVfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5faW50bmFtZQorICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgcmVwcigpIGlzIHVwZGF0ZWQgdG8gaW5jbHVkZSB0aGUgbmFtZSBhbmQgdHlwZSBpbmZvCisgICAgICAgICAgICAgICAgcmV0dXJuICJ7fSh7IXJ9LCB7fSkiLmZvcm1hdCh0eXBlKHNlbGYpLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludC5fX3JlcHJfXyhzZWxmKSkKKyAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAgICAgICAgICMgc3RyKCkgaXMgdW5jaGFuZ2VkLCBldmVuIGlmIGl0IHJlbGllcyBvbiB0aGUgcmVwcigpIGZhbGxiYWNrCisgICAgICAgICAgICAgICAgYmFzZSA9IGludAorICAgICAgICAgICAgICAgIGJhc2Vfc3RyID0gYmFzZS5fX3N0cl9fCisgICAgICAgICAgICAgICAgaWYgYmFzZV9zdHIuX19vYmpjbGFzc19fIGlzIG9iamVjdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2UuX19yZXByX18oc2VsZikKKyAgICAgICAgICAgICAgICByZXR1cm4gYmFzZV9zdHIoc2VsZikKKyAgICAgICAgICAgICMgZm9yIHNpbXBsaWNpdHksIHdlIG9ubHkgZGVmaW5lIG9uZSBvcGVyYXRvciB0aGF0CisgICAgICAgICAgICAjIHByb3BhZ2F0ZXMgZXhwcmVzc2lvbnMKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICB0ZW1wID0gaW50KHNlbGYpICsgaW50KCBvdGhlcikKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYsIE5hbWVkSW50KSBhbmQgaXNpbnN0YW5jZShvdGhlciwgTmFtZWRJbnQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTmFtZWRJbnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnKHswfSArIHsxfSknLmZvcm1hdChzZWxmLl9fbmFtZV9fLCBvdGhlci5fX25hbWVfXyksCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wICkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVtcAorCisgICAgICAgIGNsYXNzIE5FSShOYW1lZEludCwgRW51bSk6CisgICAgICAgICAgICBfX3F1YWxuYW1lX18gPSAnTkVJJworICAgICAgICAgICAgeCA9ICgndGhlLXgnLCAxKQorICAgICAgICAgICAgeSA9ICgndGhlLXknLCAyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoTkVJLl9fbmV3X18sIEVudW0uX19uZXdfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKE5FSS54ICsgTkVJLnkpLCAiTmFtZWRJbnQoJyh0aGUteCArIHRoZS15KScsIDMpIikKKyAgICAgICAgZ2xvYmFscygpWydOYW1lZEludCddID0gTmFtZWRJbnQKKyAgICAgICAgZ2xvYmFscygpWydORUknXSA9IE5FSQorICAgICAgICBOSTUgPSBOYW1lZEludCgndGVzdCcsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkk1LCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5FSS55LnZhbHVlLCAyKQorICAgICAgICB0ZXN0X3BpY2tsZV9leGNlcHRpb24oc2VsZi5hc3NlcnRSYWlzZXMsIFR5cGVFcnJvciwgTkVJLngpCisgICAgICAgIHRlc3RfcGlja2xlX2V4Y2VwdGlvbihzZWxmLmFzc2VydFJhaXNlcywgUGlja2xpbmdFcnJvciwgTkVJKQorCisgICAgZGVmIHRlc3Rfc3ViY2xhc3Nlc193aXRob3V0X2RpcmVjdF9waWNrbGVfc3VwcG9ydF91c2luZ19uYW1lKHNlbGYpOgorICAgICAgICBjbGFzcyBOYW1lZEludChpbnQpOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ05hbWVkSW50JworICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzLCAqYXJncyk6CisgICAgICAgICAgICAgICAgX2FyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgbmFtZSwgKmFyZ3MgPSBhcmdzCisgICAgICAgICAgICAgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigibmFtZSBhbmQgdmFsdWUgbXVzdCBiZSBzcGVjaWZpZWQiKQorICAgICAgICAgICAgICAgIHNlbGYgPSBpbnQuX19uZXdfXyhjbHMsICphcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuX2ludG5hbWUgPSBuYW1lCisgICAgICAgICAgICAgICAgc2VsZi5fYXJncyA9IF9hcmdzCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICAgICAgZGVmIF9fbmFtZV9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9pbnRuYW1lCisgICAgICAgICAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyByZXByKCkgaXMgdXBkYXRlZCB0byBpbmNsdWRlIHRoZSBuYW1lIGFuZCB0eXBlIGluZm8KKyAgICAgICAgICAgICAgICByZXR1cm4gInt9KHshcn0sIHt9KSIuZm9ybWF0KHR5cGUoc2VsZikuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50Ll9fcmVwcl9fKHNlbGYpKQorICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgICAgICAgICAgIyBzdHIoKSBpcyB1bmNoYW5nZWQsIGV2ZW4gaWYgaXQgcmVsaWVzIG9uIHRoZSByZXByKCkgZmFsbGJhY2sKKyAgICAgICAgICAgICAgICBiYXNlID0gaW50CisgICAgICAgICAgICAgICAgYmFzZV9zdHIgPSBiYXNlLl9fc3RyX18KKyAgICAgICAgICAgICAgICBpZiBiYXNlX3N0ci5fX29iamNsYXNzX18gaXMgb2JqZWN0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZS5fX3JlcHJfXyhzZWxmKQorICAgICAgICAgICAgICAgIHJldHVybiBiYXNlX3N0cihzZWxmKQorICAgICAgICAgICAgIyBmb3Igc2ltcGxpY2l0eSwgd2Ugb25seSBkZWZpbmUgb25lIG9wZXJhdG9yIHRoYXQKKyAgICAgICAgICAgICMgcHJvcGFnYXRlcyBleHByZXNzaW9ucworICAgICAgICAgICAgZGVmIF9fYWRkX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHRlbXAgPSBpbnQoc2VsZikgKyBpbnQoIG90aGVyKQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgTmFtZWRJbnQpIGFuZCBpc2luc3RhbmNlKG90aGVyLCBOYW1lZEludCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOYW1lZEludCgKKyAgICAgICAgICAgICAgICAgICAgICAgICcoezB9ICsgezF9KScuZm9ybWF0KHNlbGYuX19uYW1lX18sIG90aGVyLl9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wCisKKyAgICAgICAgY2xhc3MgTkVJKE5hbWVkSW50LCBFbnVtKToKKyAgICAgICAgICAgIF9fcXVhbG5hbWVfXyA9ICdORUknCisgICAgICAgICAgICB4ID0gKCd0aGUteCcsIDEpCisgICAgICAgICAgICB5ID0gKCd0aGUteScsIDIpCisgICAgICAgICAgICBkZWYgX19yZWR1Y2VfZXhfXyhzZWxmLCBwcm90byk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIsIChzZWxmLl9fY2xhc3NfXywgc2VsZi5fbmFtZV8pCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhORUkuX19uZXdfXywgRW51bS5fX25ld19fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoTkVJLnggKyBORUkueSksICJOYW1lZEludCgnKHRoZS14ICsgdGhlLXkpJywgMykiKQorICAgICAgICBnbG9iYWxzKClbJ05hbWVkSW50J10gPSBOYW1lZEludAorICAgICAgICBnbG9iYWxzKClbJ05FSSddID0gTkVJCisgICAgICAgIE5JNSA9IE5hbWVkSW50KCd0ZXN0JywgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOSTUsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTkVJLnkudmFsdWUsIDIpCisgICAgICAgIHRlc3RfcGlja2xlX2R1bXBfbG9hZChzZWxmLmFzc2VydElzLCBORUkueSkKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIE5FSSkKKworICAgIGRlZiB0ZXN0X3R1cGxlX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBTb21lVHVwbGUodHVwbGUsIEVudW0pOgorICAgICAgICAgICAgX19xdWFsbmFtZV9fID0gJ1NvbWVUdXBsZScgICAgICAjIG5lZWRlZCBmb3IgcGlja2xlIHByb3RvY29sIDQKKyAgICAgICAgICAgIGZpcnN0ID0gKDEsICdmb3IgdGhlIG1vbmV5JykKKyAgICAgICAgICAgIHNlY29uZCA9ICgyLCAnZm9yIHRoZSBzaG93JykKKyAgICAgICAgICAgIHRoaXJkID0gKDMsICdmb3IgdGhlIG11c2ljJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKFNvbWVUdXBsZS5maXJzdCksIFNvbWVUdXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKFNvbWVUdXBsZS5zZWNvbmQsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNvbWVUdXBsZS50aGlyZCwgKDMsICdmb3IgdGhlIG11c2ljJykpCisgICAgICAgIGdsb2JhbHMoKVsnU29tZVR1cGxlJ10gPSBTb21lVHVwbGUKKyAgICAgICAgdGVzdF9waWNrbGVfZHVtcF9sb2FkKHNlbGYuYXNzZXJ0SXMsIFNvbWVUdXBsZS5maXJzdCkKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV92YWx1ZXNfZ2l2ZV91bmlxdWVfZW51bV9pdGVtcyhzZWxmKToKKyAgICAgICAgY2xhc3MgQXV0b051bWJlcihFbnVtKToKKyAgICAgICAgICAgIGZpcnN0ID0gKCkKKyAgICAgICAgICAgIHNlY29uZCA9ICgpCisgICAgICAgICAgICB0aGlyZCA9ICgpCisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBsaXN0KEF1dG9OdW1iZXIpLAorICAgICAgICAgICAgICAgIFtBdXRvTnVtYmVyLmZpcnN0LCBBdXRvTnVtYmVyLnNlY29uZCwgQXV0b051bWJlci50aGlyZF0sCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChBdXRvTnVtYmVyLnNlY29uZCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQXV0b051bWJlci50aGlyZC52YWx1ZSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhBdXRvTnVtYmVyKDEpLCBBdXRvTnVtYmVyLmZpcnN0KQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX25ld19mcm9tX2VuaGFuY2VkX2VudW0oc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXIoRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMpOgorICAgICAgICAgICAgICAgIHZhbHVlID0gbGVuKGNscy5fX21lbWJlcnNfXykgKyAxCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50KHNlbGYuX3ZhbHVlXykKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9uZXdfZnJvbV9taXhlZF9lbnVtKHNlbGYpOgorICAgICAgICBjbGFzcyBBdXRvTnVtYmVyKEludEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGxlbihjbHMuX19tZW1iZXJzX18pICsgMQorICAgICAgICAgICAgICAgIG9iaiA9IGludC5fX25ld19fKGNscywgdmFsdWUpCisgICAgICAgICAgICAgICAgb2JqLl92YWx1ZV8gPSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBvYmoKKyAgICAgICAgY2xhc3MgQ29sb3IoQXV0b051bWJlcik6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvciksIFtDb2xvci5yZWQsIENvbG9yLmdyZWVuLCBDb2xvci5ibHVlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChpbnQsIENvbG9yKSksIFsxLCAyLCAzXSkKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBjbGFzcyBBbHdheXNFcXVhbDoKKyAgICAgICAgICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGNsYXNzIE9yZGluYXJ5RW51bShFbnVtKToKKyAgICAgICAgICAgIGEgPSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQWx3YXlzRXF1YWwoKSwgT3JkaW5hcnlFbnVtLmEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoT3JkaW5hcnlFbnVtLmEsIEFsd2F5c0VxdWFsKCkpCisKKyAgICBkZWYgdGVzdF9vcmRlcmVkX21peGluKHNlbGYpOgorICAgICAgICBjbGFzcyBPcmRlcmVkRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2dlX18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIHNlbGYuX19jbGFzc19fIGlzIG90aGVyLl9fY2xhc3NfXzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3ZhbHVlXyA+PSBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19ndF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPiBvdGhlci5fdmFsdWVfCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBzZWxmLl9fY2xhc3NfXyBpcyBvdGhlci5fX2NsYXNzX186CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl92YWx1ZV8gPD0gb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fX2NsYXNzX18gaXMgb3RoZXIuX19jbGFzc19fOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fdmFsdWVfIDwgb3RoZXIuX3ZhbHVlXworICAgICAgICAgICAgICAgIHJldHVybiBOb3RJbXBsZW1lbnRlZAorICAgICAgICBjbGFzcyBHcmFkZShPcmRlcmVkRW51bSk6CisgICAgICAgICAgICBBID0gNQorICAgICAgICAgICAgQiA9IDQKKyAgICAgICAgICAgIEMgPSAzCisgICAgICAgICAgICBEID0gMgorICAgICAgICAgICAgRiA9IDEKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKEdyYWRlLkEsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKEdyYWRlLkYsIEdyYWRlLkMpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhHcmFkZS5ELCBHcmFkZS5BKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChHcmFkZS5CLCBHcmFkZS5CKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEdyYWRlLkIsIEdyYWRlLkIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoR3JhZGUuQywgR3JhZGUuRCkKKworICAgIGRlZiB0ZXN0X2V4dGVuZGluZzIoc2VsZik6CisgICAgICAgIGNsYXNzIFNoYWRlKEVudW0pOgorICAgICAgICAgICAgZGVmIHNoYWRlKHNlbGYpOgorICAgICAgICAgICAgICAgIHByaW50KHNlbGYubmFtZSkKKyAgICAgICAgY2xhc3MgQ29sb3IoU2hhZGUpOgorICAgICAgICAgICAgcmVkID0gMQorICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICBibHVlID0gMworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBNb3JlQ29sb3IoQ29sb3IpOgorICAgICAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICAgICAgbWFnZW50YSA9IDUKKyAgICAgICAgICAgICAgICB5ZWxsb3cgPSA2CisKKyAgICBkZWYgdGVzdF9leHRlbmRpbmczKHNlbGYpOgorICAgICAgICBjbGFzcyBTaGFkZShFbnVtKToKKyAgICAgICAgICAgIGRlZiBzaGFkZShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5uYW1lCisgICAgICAgIGNsYXNzIENvbG9yKFNoYWRlKToKKyAgICAgICAgICAgIGRlZiBoZXgoc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICclcyBoZXhsaWZpZWQhJyAlIHNlbGYudmFsdWUKKyAgICAgICAgY2xhc3MgTW9yZUNvbG9yKENvbG9yKToKKyAgICAgICAgICAgIGN5YW4gPSA0CisgICAgICAgICAgICBtYWdlbnRhID0gNQorICAgICAgICAgICAgeWVsbG93ID0gNgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE1vcmVDb2xvci5tYWdlbnRhLmhleCgpLCAnNSBoZXhsaWZpZWQhJykKKworCisgICAgZGVmIHRlc3Rfbm9fZHVwbGljYXRlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgVW5pcXVlRW51bShFbnVtKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgY2xzID0gc2VsZi5fX2NsYXNzX18KKyAgICAgICAgICAgICAgICBpZiBhbnkoc2VsZi52YWx1ZSA9PSBlLnZhbHVlIGZvciBlIGluIGNscyk6CisgICAgICAgICAgICAgICAgICAgIGEgPSBzZWxmLm5hbWUKKyAgICAgICAgICAgICAgICAgICAgZSA9IGNscyhzZWxmLnZhbHVlKS5uYW1lCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsaWFzZXMgbm90IGFsbG93ZWQgaW4gVW5pcXVlRW51bTogICVyIC0tPiAlciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChhLCBlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgY2xhc3MgQ29sb3IoVW5pcXVlRW51bSk6CisgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICBncmVlbiA9IDIKKyAgICAgICAgICAgIGJsdWUgPSAzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBDb2xvcihVbmlxdWVFbnVtKToKKyAgICAgICAgICAgICAgICByZWQgPSAxCisgICAgICAgICAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgICAgICAgICAgYmx1ZSA9IDMKKyAgICAgICAgICAgICAgICBncmVuZSA9IDIKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIGNsYXNzIFBsYW5ldChFbnVtKToKKyAgICAgICAgICAgIE1FUkNVUlkgPSAoMy4zMDNlKzIzLCAyLjQzOTdlNikKKyAgICAgICAgICAgIFZFTlVTICAgPSAoNC44NjllKzI0LCA2LjA1MThlNikKKyAgICAgICAgICAgIEVBUlRIICAgPSAoNS45NzZlKzI0LCA2LjM3ODE0ZTYpCisgICAgICAgICAgICBNQVJTICAgID0gKDYuNDIxZSsyMywgMy4zOTcyZTYpCisgICAgICAgICAgICBKVVBJVEVSID0gKDEuOWUrMjcsICAgNy4xNDkyZTcpCisgICAgICAgICAgICBTQVRVUk4gID0gKDUuNjg4ZSsyNiwgNi4wMjY4ZTcpCisgICAgICAgICAgICBVUkFOVVMgID0gKDguNjg2ZSsyNSwgMi41NTU5ZTcpCisgICAgICAgICAgICBORVBUVU5FID0gKDEuMDI0ZSsyNiwgMi40NzQ2ZTcpCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgbWFzcywgcmFkaXVzKToKKyAgICAgICAgICAgICAgICBzZWxmLm1hc3MgPSBtYXNzICAgICAgICMgaW4ga2lsb2dyYW1zCisgICAgICAgICAgICAgICAgc2VsZi5yYWRpdXMgPSByYWRpdXMgICAjIGluIG1ldGVycworICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgc3VyZmFjZV9ncmF2aXR5KHNlbGYpOgorICAgICAgICAgICAgICAgICMgdW5pdmVyc2FsIGdyYXZpdGF0aW9uYWwgY29uc3RhbnQgIChtMyBrZy0xIHMtMikKKyAgICAgICAgICAgICAgICBHID0gNi42NzMwMEUtMTEKKyAgICAgICAgICAgICAgICByZXR1cm4gRyAqIHNlbGYubWFzcyAvIChzZWxmLnJhZGl1cyAqIHNlbGYucmFkaXVzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJvdW5kKFBsYW5ldC5FQVJUSC5zdXJmYWNlX2dyYXZpdHksIDIpLCA5LjgwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFBsYW5ldC5FQVJUSC52YWx1ZSwgKDUuOTc2ZSsyNCwgNi4zNzgxNGU2KSkKKworICAgIGRlZiB0ZXN0X25vbmhhc2hfdmFsdWUoc2VsZik6CisgICAgICAgIGNsYXNzIEF1dG9OdW1iZXJJbkFMaXN0KEVudW0pOgorICAgICAgICAgICAgZGVmIF9fbmV3X18oY2xzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFtsZW4oY2xzLl9fbWVtYmVyc19fKSArIDFdCisgICAgICAgICAgICAgICAgb2JqID0gb2JqZWN0Ll9fbmV3X18oY2xzKQorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisgICAgICAgIGNsYXNzIENvbG9ySW5BTGlzdChBdXRvTnVtYmVySW5BTGlzdCk6CisgICAgICAgICAgICByZWQgPSAoKQorICAgICAgICAgICAgZ3JlZW4gPSAoKQorICAgICAgICAgICAgYmx1ZSA9ICgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChDb2xvckluQUxpc3QpLCBbQ29sb3JJbkFMaXN0LnJlZCwgQ29sb3JJbkFMaXN0LmdyZWVuLCBDb2xvckluQUxpc3QuYmx1ZV0pCisgICAgICAgIGZvciBlbnVtLCB2YWx1ZSBpbiB6aXAoQ29sb3JJbkFMaXN0LCByYW5nZSgzKSk6CisgICAgICAgICAgICB2YWx1ZSArPSAxCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudW0udmFsdWUsIFt2YWx1ZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKENvbG9ySW5BTGlzdChbdmFsdWVdKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X2NvbmZsaWN0aW5nX3R5cGVzX3Jlc29sdmVkX2luX25ldyhzZWxmKToKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRJbnRFbnVtKGludCwgRW51bSk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzKToKKyAgICAgICAgICAgICAgICB2YWx1ZSwgbGFiZWwgPSBhcmdzCisgICAgICAgICAgICAgICAgb2JqID0gaW50Ll9fbmV3X18oY2xzLCB2YWx1ZSkKKyAgICAgICAgICAgICAgICBvYmoubGFiZWwgPSBsYWJlbAorICAgICAgICAgICAgICAgIG9iai5fdmFsdWVfID0gdmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gb2JqCisKKyAgICAgICAgY2xhc3MgTGFiZWxsZWRMaXN0KExhYmVsbGVkSW50RW51bSk6CisgICAgICAgICAgICB1bnByb2Nlc3NlZCA9ICgxLCAiVW5wcm9jZXNzZWQiKQorICAgICAgICAgICAgcGF5bWVudF9jb21wbGV0ZSA9ICgyLCAiUGF5bWVudCBDb21wbGV0ZSIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KExhYmVsbGVkTGlzdCksIFtMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIExhYmVsbGVkTGlzdC5wYXltZW50X2NvbXBsZXRlXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTGFiZWxsZWRMaXN0KDEpLCBMYWJlbGxlZExpc3QudW5wcm9jZXNzZWQpCisKKworY2xhc3MgVGVzdFVuaXF1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bmlxdWVfY2xlYW4oc2VsZik6CisgICAgICAgIEB1bmlxdWUKKyAgICAgICAgY2xhc3MgQ2xlYW4oRW51bSk6CisgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICB0d28gPSAnZG9zJworICAgICAgICAgICAgdHJlcyA9IDQuMAorICAgICAgICBAdW5pcXVlCisgICAgICAgIGNsYXNzIENsZWFuZXIoSW50RW51bSk6CisgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICBkb3VibGUgPSAyCisgICAgICAgICAgICB0cmlwbGUgPSAzCisKKyAgICBkZWYgdGVzdF91bmlxdWVfZGlydHkoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAndHJlcy4qb25lJyk6CisgICAgICAgICAgICBAdW5pcXVlCisgICAgICAgICAgICBjbGFzcyBEaXJ0eShFbnVtKToKKyAgICAgICAgICAgICAgICBvbmUgPSAxCisgICAgICAgICAgICAgICAgdHdvID0gJ2RvcycKKyAgICAgICAgICAgICAgICB0cmVzID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoCisgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAnZG91YmxlLipzaW5nbGUuKnR1cmtleS4qdHJpcGxlJywKKyAgICAgICAgICAgICAgICApOgorICAgICAgICAgICAgQHVuaXF1ZQorICAgICAgICAgICAgY2xhc3MgRGlydGllcihJbnRFbnVtKToKKyAgICAgICAgICAgICAgICBzaW5nbGUgPSAxCisgICAgICAgICAgICAgICAgZG91YmxlID0gMQorICAgICAgICAgICAgICAgIHRyaXBsZSA9IDMKKyAgICAgICAgICAgICAgICB0dXJrZXkgPSAzCisKKworZXhwZWN0ZWRfaGVscF9vdXRwdXQgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ29sb3IgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDb2xvcihlbnVtLkVudW0pCisgfCAgTWV0aG9kIHJlc29sdXRpb24gb3JkZXI6CisgfCAgICAgIENvbG9yCisgfCAgICAgIGVudW0uRW51bQorIHwgICAgICBidWlsdGlucy5vYmplY3QKKyB8XHgyMFx4MjAKKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGRlZmluZWQgaGVyZToKKyB8XHgyMFx4MjAKKyB8ICBibHVlID0gPENvbG9yLmJsdWU6IDM+CisgfFx4MjBceDIwCisgfCAgZ3JlZW4gPSA8Q29sb3IuZ3JlZW46IDI+CisgfFx4MjBceDIwCisgfCAgcmVkID0gPENvbG9yLnJlZDogMT4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW06CisgfFx4MjBceDIwCisgfCAgbmFtZQorIHwgICAgICBUaGUgbmFtZSBvZiB0aGUgRW51bSBtZW1iZXIuCisgfFx4MjBceDIwCisgfCAgdmFsdWUKKyB8ICAgICAgVGhlIHZhbHVlIG9mIHRoZSBFbnVtIG1lbWJlci4KKyB8XHgyMFx4MjAKKyB8ICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgfCAgRGF0YSBkZXNjcmlwdG9ycyBpbmhlcml0ZWQgZnJvbSBlbnVtLkVudW1NZXRhOgorIHxceDIwXHgyMAorIHwgIF9fbWVtYmVyc19fCisgfCAgICAgIFJldHVybnMgYSBtYXBwaW5nIG9mIG1lbWJlciBuYW1lLT52YWx1ZS4KKyB8XHgyMFx4MjBceDIwXHgyMFx4MjBceDIwCisgfCAgICAgIFRoaXMgbWFwcGluZyBsaXN0cyBhbGwgZW51bSBtZW1iZXJzLCBpbmNsdWRpbmcgYWxpYXNlcy4gTm90ZSB0aGF0IHRoaXMKKyB8ICAgICAgaXMgYSByZWFkLW9ubHkgdmlldyBvZiB0aGUgaW50ZXJuYWwgbWFwcGluZy4KKyIiIi5zdHJpcCgpCisKK2NsYXNzIFRlc3RTdGRMaWIodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgQ29sb3IoRW51bSk6CisgICAgICAgIHJlZCA9IDEKKyAgICAgICAgZ3JlZW4gPSAyCisgICAgICAgIGJsdWUgPSAzCisKKyAgICBkZWYgdGVzdF9weWRvYyhzZWxmKToKKyAgICAgICAgIyBpbmRpcmVjdGx5IHRlc3QgX19vYmpjbGFzc19fCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9oZWxwX291dHB1dCAlIF9fbmFtZV9fCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihzZWxmLkNvbG9yKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZF90ZXh0KQorCisgICAgZGVmIHRlc3RfaW5zcGVjdF9nZXRtZW1iZXJzKHNlbGYpOgorICAgICAgICB2YWx1ZXMgPSBkaWN0KCgKKyAgICAgICAgICAgICAgICAoJ19fY2xhc3NfXycsIEVudW1NZXRhKSwKKyAgICAgICAgICAgICAgICAoJ19fZG9jX18nLCBOb25lKSwKKyAgICAgICAgICAgICAgICAoJ19fbWVtYmVyc19fJywgc2VsZi5Db2xvci5fX21lbWJlcnNfXyksCisgICAgICAgICAgICAgICAgKCdfX21vZHVsZV9fJywgX19uYW1lX18pLAorICAgICAgICAgICAgICAgICgnYmx1ZScsIHNlbGYuQ29sb3IuYmx1ZSksCisgICAgICAgICAgICAgICAgKCdncmVlbicsIHNlbGYuQ29sb3IuZ3JlZW4pLAorICAgICAgICAgICAgICAgICgnbmFtZScsIEVudW0uX19kaWN0X19bJ25hbWUnXSksCisgICAgICAgICAgICAgICAgKCdyZWQnLCBzZWxmLkNvbG9yLnJlZCksCisgICAgICAgICAgICAgICAgKCd2YWx1ZScsIEVudW0uX19kaWN0X19bJ3ZhbHVlJ10pLAorICAgICAgICAgICAgICAgICkpCisgICAgICAgIHJlc3VsdCA9IGRpY3QoaW5zcGVjdC5nZXRtZW1iZXJzKHNlbGYuQ29sb3IpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlcy5rZXlzKCksIHJlc3VsdC5rZXlzKCkpCisgICAgICAgIGZhaWxlZCA9IEZhbHNlCisgICAgICAgIGZvciBrIGluIHZhbHVlcy5rZXlzKCk6CisgICAgICAgICAgICBpZiByZXN1bHRba10gIT0gdmFsdWVzW2tdOgorICAgICAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgICAgICAgICBwcmludCgnXG4lc1xuICAgICBrZXk6ICVzXG4gIHJlc3VsdDogJXNcbmV4cGVjdGVkOiAlc1xuJXNcbicgJQorICAgICAgICAgICAgICAgICAgICAgICAgKCc9JyAqIDc1LCBrLCByZXN1bHRba10sIHZhbHVlc1trXSwgJz0nICogNzUpLCBzZXA9JycpCisgICAgICAgICAgICAgICAgZmFpbGVkID0gVHJ1ZQorICAgICAgICBpZiBmYWlsZWQ6CisgICAgICAgICAgICBzZWxmLmZhaWwoInJlc3VsdCBkb2VzIG5vdCBlcXVhbCBleHBlY3RlZCwgc2VlIHByaW50IGFib3ZlIikKKworICAgIGRlZiB0ZXN0X2luc3BlY3RfY2xhc3NpZnlfY2xhc3NfYXR0cnMoc2VsZik6CisgICAgICAgICMgaW5kaXJlY3RseSB0ZXN0IF9fb2JqY2xhc3NfXworICAgICAgICBmcm9tIGluc3BlY3QgaW1wb3J0IEF0dHJpYnV0ZQorICAgICAgICB2YWx1ZXMgPSBbCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fY2xhc3NfXycsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1vYmplY3QsIG9iamVjdD1FbnVtTWV0YSksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fZG9jX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PU5vbmUpLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdfX21lbWJlcnNfXycsIGtpbmQ9J3Byb3BlcnR5JywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bU1ldGEsIG9iamVjdD1FbnVtTWV0YS5fX21lbWJlcnNfXyksCisgICAgICAgICAgICAgICAgQXR0cmlidXRlKG5hbWU9J19fbW9kdWxlX18nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PV9fbmFtZV9fKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nYmx1ZScsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1zZWxmLkNvbG9yLCBvYmplY3Q9c2VsZi5Db2xvci5ibHVlKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nZ3JlZW4nLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IuZ3JlZW4pLAorICAgICAgICAgICAgICAgIEF0dHJpYnV0ZShuYW1lPSdyZWQnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9c2VsZi5Db2xvciwgb2JqZWN0PXNlbGYuQ29sb3IucmVkKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0nbmFtZScsIGtpbmQ9J2RhdGEnLAorICAgICAgICAgICAgICAgICAgICBkZWZpbmluZ19jbGFzcz1FbnVtLCBvYmplY3Q9RW51bS5fX2RpY3RfX1snbmFtZSddKSwKKyAgICAgICAgICAgICAgICBBdHRyaWJ1dGUobmFtZT0ndmFsdWUnLCBraW5kPSdkYXRhJywKKyAgICAgICAgICAgICAgICAgICAgZGVmaW5pbmdfY2xhc3M9RW51bSwgb2JqZWN0PUVudW0uX19kaWN0X19bJ3ZhbHVlJ10pLAorICAgICAgICAgICAgICAgIF0KKyAgICAgICAgdmFsdWVzLnNvcnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLm5hbWUpCisgICAgICAgIHJlc3VsdCA9IGxpc3QoaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhzZWxmLkNvbG9yKSkKKyAgICAgICAgcmVzdWx0LnNvcnQoa2V5PWxhbWJkYSBpdGVtOiBpdGVtLm5hbWUpCisgICAgICAgIGZhaWxlZCA9IEZhbHNlCisgICAgICAgIGZvciB2LCByIGluIHppcCh2YWx1ZXMsIHJlc3VsdCk6CisgICAgICAgICAgICBpZiByICE9IHY6CisgICAgICAgICAgICAgICAgcHJpbnQoJ1xuJXNcbiVzXG4lc1xuJXNcbicgJSAoJz0nICogNzUsIHIsIHYsICc9JyAqIDc1KSwgc2VwPScnKQorICAgICAgICAgICAgICAgIGZhaWxlZCA9IFRydWUKKyAgICAgICAgaWYgZmFpbGVkOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJyZXN1bHQgZG9lcyBub3QgZXF1YWwgZXhwZWN0ZWQsIHNlZSBwcmludCBhYm92ZSIpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2VudW1lcmF0ZS5weSBiL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CmluZGV4IDRhZjIxN2IuLmU4NTI1NGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZW51bWVyYXRlLnB5CkBAIC0xLDQgKzEsNSBAQAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCBzeXMKIGltcG9ydCBwaWNrbGUKIApAQCAtNjUsMjAgKzY2LDIxIEBACiBjbGFzcyBQaWNrbGVUZXN0OgogICAgICMgSGVscGVyIHRvIGNoZWNrIHBpY2tsYWJpbGl0eQogICAgIGRlZiBjaGVja19waWNrbGUoc2VsZiwgaXRvcmcsIHNlcSk6Ci0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXRvcmcpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXEpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZywgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXEpCiAKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlcVsxOl0pCi0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgc2VxWzE6XSkKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VxWzE6XSkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGl0KSwgc2VxWzE6XSkKIAogY2xhc3MgRW51bWVyYXRlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIFBpY2tsZVRlc3QpOgogCkBAIC0xNjgsMTUgKzE3MCwxMiBAQAogICAgICAgICB4ID0gcmFuZ2UoMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJldmVyc2VkKHgpKSwgdHlwZShpdGVyKHgpKSkKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2xlbihzZWxmKToKLSAgICAgICAgIyBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCwgbm90IGFuIGludGVyZmFjZSByZXF1aXJlbWVudAotICAgICAgICBmcm9tIHRlc3QudGVzdF9pdGVybGVuIGltcG9ydCBsZW4KICAgICAgICAgZm9yIHMgaW4gKCdoZWxsbycsIHR1cGxlKCdoZWxsbycpLCBsaXN0KCdoZWxsbycpLCByYW5nZSg1KSk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXZlcnNlZChzKSksIGxlbihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQocmV2ZXJzZWQocykpLCBsZW4ocykpCiAgICAgICAgICAgICByID0gcmV2ZXJzZWQocykKICAgICAgICAgICAgIGxpc3QocikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHIpLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyKSwgMCkKICAgICAgICAgY2xhc3MgU2VxV2l0aFdlaXJkTGVuOgogICAgICAgICAgICAgY2FsbGVkID0gRmFsc2UKICAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgpAQCAtMTg3LDcgKzE4Niw3IEBACiAgICAgICAgICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICAgICAgICAgIHJldHVybiBpbmRleAogICAgICAgICByID0gcmV2ZXJzZWQoU2VxV2l0aFdlaXJkTGVuKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBsZW4sIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBvcGVyYXRvci5sZW5ndGhfaGludCwgcikKIAogCiAgICAgZGVmIHRlc3RfZ2Moc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5IGIvTGliL3Rlc3QvdGVzdF9lcG9sbC5weQppbmRleCA4NzFlZmIyLi5iMzdmMDMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2Vwb2xsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXBvbGwucHkKQEAgLTIxLDEwICsyMSwxMSBAQAogIiIiCiBUZXN0cyBmb3IgZXBvbGwgd3JhcHBlci4KICIiIgotaW1wb3J0IHNvY2tldAogaW1wb3J0IGVycm5vCi1pbXBvcnQgdGltZQoraW1wb3J0IG9zCiBpbXBvcnQgc2VsZWN0CitpbXBvcnQgc29ja2V0CitpbXBvcnQgdGltZQogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydApAQCAtMzMsNyArMzQsNyBAQAogCiB0cnk6CiAgICAgc2VsZWN0LmVwb2xsKCkKLWV4Y2VwdCBJT0Vycm9yIGFzIGU6CitleGNlcHQgT1NFcnJvciBhcyBlOgogICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgogICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgia2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBlcG9sbCgpIikKICAgICByYWlzZQpAQCAtNTUsNyArNTYsNyBAQAogICAgICAgICBjbGllbnQuc2V0YmxvY2tpbmcoRmFsc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgc2VsZi5zZXJ2ZXJTb2NrZXQuZ2V0c29ja25hbWUoKVsxXSkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCBlcnJuby5FSU5QUk9HUkVTUykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJDb25uZWN0IHNob3VsZCBoYXZlIHJhaXNlZCBFSU5QUk9HUkVTUyIpCkBAIC04Niw2ICs4NywxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGVjdC5lcG9sbCwgWydmb28nXSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxlY3QuZXBvbGwsIHt9KQogCisgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGVjdC5lcG9sbCgxNikgYXMgZXA6CisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZXAuZmlsZW5vKCksIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGVwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXAuZmlsZW5vKQorCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgogICAgICAgICBzZXJ2ZXIsIGNsaWVudCA9IHNlbGYuX2Nvbm5lY3RlZF9wYWlyKCkKIApAQCAtMTE0LDEyICsxMjIsMTIgQEAKICAgICAgICAgICAgICMgVmFsdWVFcnJvcjogZmlsZSBkZXNjcmlwdG9yIGNhbm5vdCBiZSBhIG5lZ2F0aXZlIGludGVnZXIgKC0xKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXAucmVnaXN0ZXIsIC0xLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQotICAgICAgICAgICAgIyBJT0Vycm9yOiBbRXJybm8gOV0gQmFkIGZpbGUgZGVzY3JpcHRvcgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgZXAucmVnaXN0ZXIsIDEwMDAwLAorICAgICAgICAgICAgIyBPU0Vycm9yOiBbRXJybm8gOV0gQmFkIGZpbGUgZGVzY3JpcHRvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZXAucmVnaXN0ZXIsIDEwMDAwLAogICAgICAgICAgICAgICAgIHNlbGVjdC5FUE9MTElOIHwgc2VsZWN0LkVQT0xMT1VUKQogICAgICAgICAgICAgIyByZWdpc3RlcmluZyB0d2ljZSBhbHNvIHJhaXNlcyBhbiBleGNlcHRpb24KICAgICAgICAgICAgIGVwLnJlZ2lzdGVyKHNlcnZlciwgc2VsZWN0LkVQT0xMSU4gfCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBlcC5yZWdpc3Rlciwgc2VydmVyLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZXAucmVnaXN0ZXIsIHNlcnZlciwKICAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGVwLmNsb3NlKCkKQEAgLTE0MSw3ICsxNDksNyBAQAogICAgICAgICBlcC5jbG9zZSgpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGVwMi5wb2xsKDEsIDQpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUJBREYsIGUpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImVwb2xsIG9uIGNsb3NlZCBmZCBkaWRuJ3QgcmFpc2UgRUJBREYiKQpAQCAtMTU1LDkgKzE2Myw5IEBACiAgICAgICAgIGVwLnJlZ2lzdGVyKGNsaWVudC5maWxlbm8oKSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3QuRVBPTExJTiB8IHNlbGVjdC5FUE9MTE9VVCB8IHNlbGVjdC5FUE9MTEVUKQogCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIG5vdyA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQotICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgdGhlbiA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4xLCB0aGVuIC0gbm93KQogCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKQEAgLTE2NiwxOSArMTc0LDE2IEBACiAgICAgICAgIGV4cGVjdGVkLnNvcnQoKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLCBleHBlY3RlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSwgdGhlbiAtIG5vdykKIAotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKHRpbWVvdXQ9Mi4xLCBtYXhldmVudHM9NCkKLSAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXZlbnRzKQogCiAgICAgICAgIGNsaWVudC5zZW5kKGIiSGVsbG8hIikKICAgICAgICAgc2VydmVyLnNlbmQoYiJ3b3JsZCEhISIpCiAKLSAgICAgICAgbm93ID0gdGltZS50aW1lKCkKKyAgICAgICAgbm93ID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICBldmVudHMgPSBlcC5wb2xsKDEsIDQpCi0gICAgICAgIHRoZW4gPSB0aW1lLnRpbWUoKQorICAgICAgICB0aGVuID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRoZW4gLSBub3cgPiAwLjAxKQogCiAgICAgICAgIGV2ZW50cy5zb3J0KCkKQEAgLTE5MCw5ICsxOTUsOSBAQAogCiAgICAgICAgIGVwLnVucmVnaXN0ZXIoY2xpZW50LmZpbGVubygpKQogICAgICAgICBlcC5tb2RpZnkoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpCi0gICAgICAgIG5vdyA9IHRpbWUudGltZSgpCisgICAgICAgIG5vdyA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgZXZlbnRzID0gZXAucG9sbCgxLCA0KQotICAgICAgICB0aGVuID0gdGltZS50aW1lKCkKKyAgICAgICAgdGhlbiA9IHRpbWUubW9ub3RvbmljKCkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0aGVuIC0gbm93ID4gMC4wMSkKIAogICAgICAgICBleHBlY3RlZCA9IFsoc2VydmVyLmZpbGVubygpLCBzZWxlY3QuRVBPTExPVVQpXQpAQCAtMjA5LDE0ICsyMTQsNDMgQEAKICAgICAgICAgZXAgPSBzZWxlY3QuZXBvbGwoMTYpCiAgICAgICAgIGVwLnJlZ2lzdGVyKHNlcnZlcikKIAotICAgICAgICBub3cgPSB0aW1lLnRpbWUoKQorICAgICAgICBub3cgPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgIGV2ZW50cyA9IGVwLnBvbGwoMSwgNCkKLSAgICAgICAgdGhlbiA9IHRpbWUudGltZSgpCisgICAgICAgIHRoZW4gPSB0aW1lLm1vbm90b25pYygpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGhlbiAtIG5vdyA+IDAuMDEpCiAKICAgICAgICAgc2VydmVyLmNsb3NlKCkKICAgICAgICAgZXAudW5yZWdpc3RlcihmZCkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBvcGVuX2ZpbGUgPSBvcGVuKF9fZmlsZV9fLCAicmIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3Blbl9maWxlLmNsb3NlKQorICAgICAgICBmZCA9IG9wZW5fZmlsZS5maWxlbm8oKQorICAgICAgICBlcG9sbCA9IHNlbGVjdC5lcG9sbCgpCisKKyAgICAgICAgIyB0ZXN0IGZpbGVubygpIG1ldGhvZCBhbmQgY2xvc2VkIGF0dHJpYnV0ZQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXBvbGwuZmlsZW5vKCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcG9sbC5jbG9zZWQpCisKKyAgICAgICAgIyB0ZXN0IGNsb3NlKCkKKyAgICAgICAgZXBvbGwuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZXBvbGwuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5maWxlbm8pCisKKyAgICAgICAgIyBjbG9zZSgpIGNhbiBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgZXBvbGwuY2xvc2UoKQorCisgICAgICAgICMgb3BlcmF0aW9ucyBtdXN0IGZhaWwgd2l0aCBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCAuLi4iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5tb2RpZnksIGZkLCBzZWxlY3QuRVBPTExJTikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZXBvbGwucG9sbCwgMS4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC5yZWdpc3RlciwgZmQsIHNlbGVjdC5FUE9MTElOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlcG9sbC51bnJlZ2lzdGVyLCBmZCkKKworICAgIGRlZiB0ZXN0X2ZkX25vbl9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgZXBvbGwgPSBzZWxlY3QuZXBvbGwoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoZXBvbGwuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGVwb2xsLmZpbGVubygpKSwgRmFsc2UpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RFUG9sbCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weSBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQppbmRleCA4ZDExZDkwLi5kOTU0MzAyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CkBAIC04LDggKzgsOCBAQAogaW1wb3J0IGVycm5vCiAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoVEVTVEZOLCBjYXB0dXJlZF9vdXRwdXQsIGNoZWNrX2ltcGxfZGV0YWlsLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja193YXJuaW5ncywgY3B5dGhvbl9vbmx5LCBnY19jb2xsZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBub190cmFjaW5nLCBydW5fdW5pdHRlc3QsIHVubGluaykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfd2FybmluZ3MsIGNweXRob25fb25seSwgZ2NfY29sbGVjdCwgcnVuX3VuaXR0ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBub190cmFjaW5nLCB1bmxpbmssIGltcG9ydF9tb2R1bGUpCiAKIGNsYXNzIE5haXZlRXhjZXB0aW9uKEV4Y2VwdGlvbik6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHgpOgpAQCAtMjMwLDYgKzIzMCw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcud2luZXJyb3IsIDMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuc3RyZXJyb3IsICdmb28nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LmZpbGVuYW1lLCAnYmFyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5maWxlbmFtZTIsIE5vbmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih3KSwgIltXaW5FcnJvciAzXSBmb286ICdiYXInIikKICAgICAgICAgICAgICMgVW5rbm93biB3aW4gZXJyb3IgYmVjb21lcyBFSU5WQUwgKDIyKQogICAgICAgICAgICAgdyA9IE9TRXJyb3IoMCwgJ2ZvbycsIE5vbmUsIDEwMDEpCkBAIC0yMzcsNiArMjM4LDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody53aW5lcnJvciwgMTAwMSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5zdHJlcnJvciwgJ2ZvbycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuZmlsZW5hbWUsIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcuZmlsZW5hbWUyLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodyksICJbV2luRXJyb3IgMTAwMV0gZm9vIikKICAgICAgICAgICAgICMgTm9uLW51bWVyaWMgImVycm5vIgogICAgICAgICAgICAgdyA9IE9TRXJyb3IoJ2JhcicsICdmb28nKQpAQCAtMjQ0LDYgKzI0NiwxNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LndpbmVycm9yLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3LnN0cmVycm9yLCAnZm9vJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5maWxlbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwody5maWxlbmFtZTIsIE5vbmUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCBzcGVjaWZpYyB0byBXaW5kb3dzJykKKyAgICBkZWYgdGVzdF93aW5kb3dzX21lc3NhZ2Uoc2VsZik6CisgICAgICAgICIiIlNob3VsZCBmaWxsIGluIHVua25vd24gZXJyb3IgY29kZSBpbiBXaW5kb3dzIGVycm9yIG1lc3NhZ2UiIiIKKyAgICAgICAgY3R5cGVzID0gaW1wb3J0X21vZHVsZSgnY3R5cGVzJykKKyAgICAgICAgIyB0aGlzIGVycm9yIGNvZGUgaGFzIG5vIG1lc3NhZ2UsIFB5dGhvbiBmb3JtYXRzIGl0IGFzIGhleGFkZWNpbWFsCisgICAgICAgIGNvZGUgPSAzNzY1MjY5MzQ3CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChPU0Vycm9yLCAnV2luZG93cyBFcnJvciAweCV4JyAlIGNvZGUpOgorICAgICAgICAgICAgY3R5cGVzLnB5dGhvbmFwaS5QeUVycl9TZXRGcm9tV2luZG93c0Vycihjb2RlKQogCiAgICAgZGVmIHRlc3RBdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCBleGNlcHRpb24gYXR0cmlidXRlcyBhcmUgaGFwcHkKQEAgLTI1NywyNCArMjcwLDI3IEBACiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgMSl9KSwKICAgICAgICAgICAgIChTeXN0ZW1FeGl0LCAoJ2ZvbycsKSwKICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCksICdjb2RlJyA6ICdmb28nfSksCi0gICAgICAgICAgICAoSU9FcnJvciwgKCdmb28nLCksCi0gICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywpLCAnZmlsZW5hbWUnIDogTm9uZSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsKSwKKyAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCksICdmaWxlbmFtZScgOiBOb25lLCAnZmlsZW5hbWUyJyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgICdlcnJubycgOiBOb25lLCAnc3RyZXJyb3InIDogTm9uZX0pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicpLAotICAgICAgICAgICAgICAgIHsnYXJncycgOiAoJ2ZvbycsICdiYXInKSwgJ2ZpbGVuYW1lJyA6IE5vbmUsCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCAnYmFyJyksCisgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogTm9uZSwgJ2ZpbGVuYW1lMicgOiBOb25lLAogICAgICAgICAgICAgICAgICAnZXJybm8nIDogJ2ZvbycsICdzdHJlcnJvcicgOiAnYmFyJ30pLAotICAgICAgICAgICAgKElPRXJyb3IsICgnZm9vJywgJ2JhcicsICdiYXonKSwKLSAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJyksICdmaWxlbmFtZScgOiAnYmF6JywKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JyksCisgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicpLAorICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogJ2JheicsICdmaWxlbmFtZTInIDogTm9uZSwKICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6ICdmb28nLCAnc3RyZXJyb3InIDogJ2Jhcid9KSwKLSAgICAgICAgICAgIChJT0Vycm9yLCAoJ2ZvbycsICdiYXInLCAnYmF6JywgJ3F1dXgnKSwKLSAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXV4Jyl9KSwKLSAgICAgICAgICAgIChFbnZpcm9ubWVudEVycm9yLCAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCisgICAgICAgICAgICAoT1NFcnJvciwgKCdmb28nLCAnYmFyJywgJ2JheicsIE5vbmUsICdxdXV4JyksCisgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZm9vJywgJ2JhcicpLCAnZmlsZW5hbWUnIDogJ2JheicsICdmaWxlbmFtZTInOiAncXV1eCd9KSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoJ2Vycm5vU3RyJywgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgnZXJybm9TdHInLCAnc3RyRXJyb3JTdHInKSwKICAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICdlcnJubycgOiAnZXJybm9TdHInLAogICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJ30pLAotICAgICAgICAgICAgKEVudmlyb25tZW50RXJyb3IsICgxLCAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWVTdHInKSwKKyAgICAgICAgICAgIChPU0Vycm9yLCAoMSwgJ3N0ckVycm9yU3RyJywgJ2ZpbGVuYW1lU3RyJyksCiAgICAgICAgICAgICAgICAgeydhcmdzJyA6ICgxLCAnc3RyRXJyb3JTdHInKSwgJ2Vycm5vJyA6IDEsCi0gICAgICAgICAgICAgICAgICdzdHJlcnJvcicgOiAnc3RyRXJyb3JTdHInLCAnZmlsZW5hbWUnIDogJ2ZpbGVuYW1lU3RyJ30pLAorICAgICAgICAgICAgICAgICAnc3RyZXJyb3InIDogJ3N0ckVycm9yU3RyJywKKyAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cicsICdmaWxlbmFtZTInIDogTm9uZX0pLAogICAgICAgICAgICAgKFN5bnRheEVycm9yLCAoKSwgeydtc2cnIDogTm9uZSwgJ3RleHQnIDogTm9uZSwKICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnIDogTm9uZSwgJ2xpbmVubycgOiBOb25lLCAnb2Zmc2V0JyA6IE5vbmUsCiAgICAgICAgICAgICAgICAgJ3ByaW50X2ZpbGVfYW5kX2xpbmUnIDogTm9uZX0pLApAQCAtMzMwLDcgKzM0Niw4IEBACiAgICAgICAgICAgICAgICAgKFdpbmRvd3NFcnJvciwgKDEsICdzdHJFcnJvclN0cicsICdmaWxlbmFtZVN0cicpLAogICAgICAgICAgICAgICAgICAgICB7J2FyZ3MnIDogKDEsICdzdHJFcnJvclN0cicpLAogICAgICAgICAgICAgICAgICAgICAgJ3N0cmVycm9yJyA6ICdzdHJFcnJvclN0cicsICd3aW5lcnJvcicgOiBOb25lLAotICAgICAgICAgICAgICAgICAgICAgJ2Vycm5vJyA6IDEsICdmaWxlbmFtZScgOiAnZmlsZW5hbWVTdHInfSkKKyAgICAgICAgICAgICAgICAgICAgICdlcnJubycgOiAxLAorICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA6ICdmaWxlbmFtZVN0cicsICdmaWxlbmFtZTInIDogTm9uZX0pCiAgICAgICAgICAgICApCiAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CiAgICAgICAgICAgICBwYXNzCkBAIC00MjIsNyArNDM5LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NvbnRleHRfXykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZS5fX2NhdXNlX18pCiAKLSAgICAgICAgY2xhc3MgTXlFeGNlcHRpb24oRW52aXJvbm1lbnRFcnJvcik6CisgICAgICAgIGNsYXNzIE15RXhjZXB0aW9uKE9TRXJyb3IpOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGUgPSBNeUV4Y2VwdGlvbigpCkBAIC02NjEsNiArNjc4LDUyIEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmV4Y19pbmZvKCksIChOb25lLCBOb25lLCBOb25lKSkKIAorICAgIGRlZiB0ZXN0X2dlbmVyYXRvcl9sZWFraW5nMyhzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgIzIzMzUzLiAgV2hlbiBnZW4udGhyb3coKSBpcyBjYWxsZWQsIHRoZSBjYWxsZXIncworICAgICAgICAjIGV4Y2VwdGlvbiBzdGF0ZSBzaG91bGQgYmUgc2F2ZSBhbmQgcmVzdG9yZWQuCisgICAgICAgIGRlZiBnKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICB5aWVsZCBzeXMuZXhjX2luZm8oKVsxXQorICAgICAgICBpdCA9IGcoKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICB0cnk6CisgICAgICAgICAgICAxLzAKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5leGNfaW5mbygpWzFdLCBlKQorICAgICAgICAgICAgZ2VuX2V4YyA9IGl0LnRocm93KGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5leGNfaW5mbygpWzFdLCBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZW5fZXhjLCBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpLCAoTm9uZSwgTm9uZSwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9nZW5lcmF0b3JfbGVha2luZzQoc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlICMyMzM1My4gIFdoZW4gYW4gZXhjZXB0aW9uIGlzIHJhaXNlZCBieSBhIGdlbmVyYXRvciwKKyAgICAgICAgIyB0aGUgY2FsbGVyJ3MgZXhjZXB0aW9uIHN0YXRlIHNob3VsZCBzdGlsbCBiZSByZXN0b3JlZC4KKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICAgICB5aWVsZCBzeXMuZXhjX2luZm8oKVswXQorICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGl0ID0gZygpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcgorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgIyBUaGUgY2FsbGVyJ3MgZXhjZXB0aW9uIHN0YXRlIChUeXBlRXJyb3IpIGlzIHRlbXBvcmFyaWx5CisgICAgICAgICAgICAjIHNhdmVkIGluIHRoZSBnZW5lcmF0b3IuCisgICAgICAgICAgICB0cCA9IG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHAsIFplcm9EaXZpc2lvbkVycm9yKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICAgICAgIyBXZSBjYW4ndCBjaGVjayBpdCBpbW1lZGlhdGVseSwgYnV0IHdoaWxlIG5leHQoKSByZXR1cm5zCisgICAgICAgICAgICAjIHdpdGggYW4gZXhjZXB0aW9uLCBpdCBzaG91bGRuJ3QgaGF2ZSByZXN0b3JlZCB0aGUgb2xkCisgICAgICAgICAgICAjIGV4Y2VwdGlvbiBzdGF0ZSAoVHlwZUVycm9yKS4KKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5leGNfaW5mbygpWzFdLCBlKQorICAgICAgICAjIFdlIHVzZWQgdG8gZmluZCBUeXBlRXJyb3IgaGVyZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKSwgKE5vbmUsIE5vbmUsIE5vbmUpKQorCiAgICAgZGVmIHRlc3RfZ2VuZXJhdG9yX2RvZXNudF9yZXRhaW5fb2xkX2V4YyhzZWxmKToKICAgICAgICAgZGVmIGcoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuZXhjX2luZm8oKVsxXSwgUnVudGltZUVycm9yKQpAQCAtNzYzLDcgKzgyNiw3IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZSwgKE5vbmUsIE5vbmUsIE5vbmUpKQogCi0gICAgZGVmIHRlc3RVbmljb2RlQ2hhbmdlQXR0cmlidXRlcyhzZWxmKToKKyAgICBkZWYgdGVzdF91bmljb2RlX2NoYW5nZV9hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSA3MzA5LiBUaGlzIHdhcyBhIGNyYXNoZXIuCiAKICAgICAgICAgdSA9IFVuaWNvZGVFbmNvZGVFcnJvcignYmF6JywgJ3h4eHh4JywgMSwgNSwgJ2ZvbycpCkBAIC04MDAsNiArODYzLDEyIEBACiAgICAgICAgIHUuc3RhcnQgPSAxMDAwCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUpLCAiY2FuJ3QgdHJhbnNsYXRlIGNoYXJhY3RlcnMgaW4gcG9zaXRpb24gMTAwMC00OiA5NjUyMzA5NTE0NDM2ODU3MjQ5OTciKQogCisgICAgZGVmIHRlc3RfdW5pY29kZV9lcnJvcnNfbm9fb2JqZWN0KHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAjMjExMzQuCisgICAgICAgIGtsYXNzZXMgPSBVbmljb2RlRW5jb2RlRXJyb3IsIFVuaWNvZGVEZWNvZGVFcnJvciwgVW5pY29kZVRyYW5zbGF0ZUVycm9yCisgICAgICAgIGZvciBrbGFzcyBpbiBrbGFzc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoa2xhc3MuX19uZXdfXyhrbGFzcykpLCAiIikKKwogICAgIEBub190cmFjaW5nCiAgICAgZGVmIHRlc3RfYmFkaXNpbnN0YW5jZShzZWxmKToKICAgICAgICAgIyBCdWcgIzI1NDI6IGlmIGlzc3ViY2xhc3MoZSwgTXlFeGNlcHRpb24pIHJhaXNlcyBhbiBleGNlcHRpb24sCkBAIC05NjgsOCArMTAzNyw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihhcmcpLCBzdHIoZXhjKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvblRlc3RzLCBJbXBvcnRFcnJvclRlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mYXVsdGhhbmRsZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQppbmRleCA3NzBlNzBjLi5lNjhhMDllIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZhdWx0aGFuZGxlci5weQpAQCAtMTAsNiArMTAsNyBAQAogZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIGltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRleHR3cmFwIGltcG9ydCBkZWRlbnQKIAogdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKQEAgLTE5LDE4ICsyMCw2IEBACiAKIFRJTUVPVVQgPSAwLjUKIAotdHJ5OgotICAgIGZyb20gcmVzb3VyY2UgaW1wb3J0IHNldHJsaW1pdCwgUkxJTUlUX0NPUkUsIGVycm9yIGFzIHJlc291cmNlX2Vycm9yCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgcHJlcGFyZV9zdWJwcm9jZXNzID0gTm9uZQotZWxzZToKLSAgICBkZWYgcHJlcGFyZV9zdWJwcm9jZXNzKCk6Ci0gICAgICAgICMgZG9uJ3QgY3JlYXRlIGNvcmUgZmlsZQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZXRybGltaXQoUkxJTUlUX0NPUkUsICgwLCAwKSkKLSAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCByZXNvdXJjZV9lcnJvcik6Ci0gICAgICAgICAgICBwYXNzCi0KIGRlZiBleHBlY3RlZF90cmFjZWJhY2sobGluZW5vMSwgbGluZW5vMiwgaGVhZGVyLCBtaW5fY291bnQ9MSk6CiAgICAgcmVnZXggPSBoZWFkZXIKICAgICByZWdleCArPSAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgJXMgaW4gZnVuY1xuJyAlIGxpbmVubzEKQEAgLTU5LDEwICs0OCw5IEBACiAgICAgICAgIGJ1aWxkLCBhbmQgcmVwbGFjZSAiQ3VycmVudCB0aHJlYWQgMHgwMDAwN2Y4ZDhmYmQ5NzAwIiBieSAiQ3VycmVudAogICAgICAgICB0aHJlYWQgWFhYIi4KICAgICAgICAgIiIiCi0gICAgICAgIG9wdGlvbnMgPSB7fQotICAgICAgICBpZiBwcmVwYXJlX3N1YnByb2Nlc3M6Ci0gICAgICAgICAgICBvcHRpb25zWydwcmVleGVjX2ZuJ10gPSBwcmVwYXJlX3N1YnByb2Nlc3MKLSAgICAgICAgcHJvY2VzcyA9IHNjcmlwdF9oZWxwZXIuc3Bhd25fcHl0aG9uKCctYycsIGNvZGUsICoqb3B0aW9ucykKKyAgICAgICAgY29kZSA9IGRlZGVudChjb2RlKS5zdHJpcCgpCisgICAgICAgIHdpdGggc3VwcG9ydC5TdXBwcmVzc0NyYXNoUmVwb3J0KCk6CisgICAgICAgICAgICBwcm9jZXNzID0gc2NyaXB0X2hlbHBlci5zcGF3bl9weXRob24oJy1jJywgY29kZSkKICAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBwcm9jZXNzLmNvbW11bmljYXRlKCkKICAgICAgICAgZXhpdGNvZGUgPSBwcm9jZXNzLndhaXQoKQogICAgICAgICBvdXRwdXQgPSBzdXBwb3J0LnN0cmlwX3B5dGhvbl9zdGRlcnIoc3Rkb3V0KQpAQCAtODYsMjMgKzc0LDIyIEBACiAgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAiIiIKICAgICAgICAgaWYgYWxsX3RocmVhZHM6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnQ3VycmVudCB0aHJlYWQgWFhYJworICAgICAgICAgICAgaGVhZGVyID0gJ0N1cnJlbnQgdGhyZWFkIFhYWCAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBoZWFkZXIgPSAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KScKKyAgICAgICAgICAgIGhlYWRlciA9ICdTdGFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCknCiAgICAgICAgIHJlZ2V4ID0gIiIiCi1eRmF0YWwgUHl0aG9uIGVycm9yOiB7bmFtZX0KKyAgICAgICAgICAgIF5GYXRhbCBQeXRob24gZXJyb3I6IHtuYW1lfQogCi17aGVhZGVyfToKLSAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIHtsaW5lbm99IGluIDxtb2R1bGU+Ci0iIiIuc3RyaXAoKQotICAgICAgICByZWdleCA9IHJlZ2V4LmZvcm1hdCgKKyAgICAgICAgICAgIHtoZWFkZXJ9OgorICAgICAgICAgICAgICBGaWxlICI8c3RyaW5nPiIsIGxpbmUge2xpbmVub30gaW4gPG1vZHVsZT4KKyAgICAgICAgICAgICIiIgorICAgICAgICByZWdleCA9IGRlZGVudChyZWdleC5mb3JtYXQoCiAgICAgICAgICAgICBsaW5lbm89bGluZV9udW1iZXIsCiAgICAgICAgICAgICBuYW1lPW5hbWVfcmVnZXgsCi0gICAgICAgICAgICBoZWFkZXI9cmUuZXNjYXBlKGhlYWRlcikpCisgICAgICAgICAgICBoZWFkZXI9cmUuZXNjYXBlKGhlYWRlcikpKS5zdHJpcCgpCiAgICAgICAgIGlmIG90aGVyX3JlZ2V4OgogICAgICAgICAgICAgcmVnZXggKz0gJ3wnICsgb3RoZXJfcmVnZXgKLSAgICAgICAgd2l0aCBzdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6Ci0gICAgICAgICAgICBvdXRwdXQsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUsIGZpbGVuYW1lKQorICAgICAgICBvdXRwdXQsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUsIGZpbGVuYW1lKQogICAgICAgICBvdXRwdXQgPSAnXG4nLmpvaW4ob3V0cHV0KQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dHB1dCwgcmVnZXgpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXhpdGNvZGUsIDApCkBAIC0xMTEsMjkgKzk4LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAidGhlIGZpcnN0IHBhZ2Ugb2YgbWVtb3J5IGlzIGEgbWFwcGVkIHJlYWQtb25seSBvbiBBSVgiKQogICAgIGRlZiB0ZXN0X3JlYWRfbnVsbChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLl9yZWFkX251bGwoKQotIiIiLnN0cmlwKCksCisgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKCkKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5fcmVhZF9udWxsKCkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAjIElzc3VlICMxMjcwMDogUmVhZCBOVUxMIHJhaXNlcyBTSUdJTEwgb24gTWFjIE9TIFggTGlvbgogICAgICAgICAgICAgJyg/OlNlZ21lbnRhdGlvbiBmYXVsdHxCdXMgZXJyb3J8SWxsZWdhbCBpbnN0cnVjdGlvbiknKQogCiAgICAgZGVmIHRlc3Rfc2lnc2VndihzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQorICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgMywKICAgICAgICAgICAgICdTZWdtZW50YXRpb24gZmF1bHQnKQogCiAgICAgZGVmIHRlc3Rfc2lnYWJydChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLl9zaWdhYnJ0KCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ2FicnQoKQorICAgICAgICAgICAgIiIiLAogICAgICAgICAgICAgMywKICAgICAgICAgICAgICdBYm9ydGVkJykKIApAQCAtMTQxLDEwICsxMjgsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICJTSUdGUEUgY2Fubm90IGJlIGNhdWdodCBvbiBXaW5kb3dzIikKICAgICBkZWYgdGVzdF9zaWdmcGUoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fc2lnZnBlKCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ2ZwZSgpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAzLAogICAgICAgICAgICAgJ0Zsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbicpCiAKQEAgLTE1MiwxMCArMTM5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAibmVlZCBmYXVsdGhhbmRsZXIuX3NpZ2J1cygpIikKICAgICBkZWYgdGVzdF9zaWdidXMoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fc2lnYnVzKCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ2J1cygpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAzLAogICAgICAgICAgICAgJ0J1cyBlcnJvcicpCiAKQEAgLTE2MywxOCArMTUwLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAibmVlZCBmYXVsdGhhbmRsZXIuX3NpZ2lsbCgpIikKICAgICBkZWYgdGVzdF9zaWdpbGwoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuZW5hYmxlKCkKLWZhdWx0aGFuZGxlci5fc2lnaWxsKCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ2lsbCgpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAzLAogICAgICAgICAgICAgJ0lsbGVnYWwgaW5zdHJ1Y3Rpb24nKQogCiAgICAgZGVmIHRlc3RfZmF0YWxfZXJyb3Ioc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfZmF0YWxfZXJyb3IoIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mYXVsdGhhbmRsZXIuX2ZhdGFsX2Vycm9yKGIneHl6JykKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9mYXRhbF9lcnJvcihiJ3h5eicpCisgICAgICAgICAgICAiIiIsCiAgICAgICAgICAgICAyLAogICAgICAgICAgICAgJ3h5eicpCiAKQEAgLTE4NSw1NiArMTcyLDU1IEBACiAgICAgICAgICAgICAgICAgICAgICAnbmVlZCBmYXVsdGhhbmRsZXIuX3N0YWNrX292ZXJmbG93KCknKQogICAgIGRlZiB0ZXN0X3N0YWNrX292ZXJmbG93KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2ZhdGFsX2Vycm9yKCIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotZmF1bHRoYW5kbGVyLmVuYWJsZSgpCi1mYXVsdGhhbmRsZXIuX3N0YWNrX292ZXJmbG93KCkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3N0YWNrX292ZXJmbG93KCkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAnKD86U2VnbWVudGF0aW9uIGZhdWx0fEJ1cyBlcnJvciknLAogICAgICAgICAgICAgb3RoZXJfcmVnZXg9J3VuYWJsZSB0byByYWlzZSBhIHN0YWNrIG92ZXJmbG93JykKIAogICAgIGRlZiB0ZXN0X2dpbF9yZWxlYXNlZChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoKQotZmF1bHRoYW5kbGVyLl9yZWFkX251bGwoVHJ1ZSkKLSIiIi5zdHJpcCgpLAorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmVuYWJsZSgpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoVHJ1ZSkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCi0gICAgICAgICAgICAnKD86U2VnbWVudGF0aW9uIGZhdWx0fEJ1cyBlcnJvcnxJbGxlZ2FsIGluc3RydWN0aW9uKScpCisgICAgICAgICAgICAnU2VnbWVudGF0aW9uIGZhdWx0JykKIAogICAgIGRlZiB0ZXN0X2VuYWJsZV9maWxlKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBvcmFyeV9maWxlbmFtZSgpIGFzIGZpbGVuYW1lOgogICAgICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLW91dHB1dCA9IG9wZW4oe2ZpbGVuYW1lfSwgJ3diJykKLWZhdWx0aGFuZGxlci5lbmFibGUob3V0cHV0KQotZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKLSIiIi5zdHJpcCgpLmZvcm1hdChmaWxlbmFtZT1yZXByKGZpbGVuYW1lKSksCisgICAgICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgICAgIG91dHB1dCA9IG9wZW4oe2ZpbGVuYW1lfSwgJ3diJykKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKG91dHB1dCkKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQorICAgICAgICAgICAgICAgICIiIi5mb3JtYXQoZmlsZW5hbWU9cmVwcihmaWxlbmFtZSkpLAogICAgICAgICAgICAgICAgIDQsCiAgICAgICAgICAgICAgICAgJ1NlZ21lbnRhdGlvbiBmYXVsdCcsCiAgICAgICAgICAgICAgICAgZmlsZW5hbWU9ZmlsZW5hbWUpCiAKICAgICBkZWYgdGVzdF9lbmFibGVfc2luZ2xlX3RocmVhZChzZWxmKToKICAgICAgICAgc2VsZi5jaGVja19mYXRhbF9lcnJvcigiIiIKLWltcG9ydCBmYXVsdGhhbmRsZXIKLWZhdWx0aGFuZGxlci5lbmFibGUoYWxsX3RocmVhZHM9RmFsc2UpCi1mYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQotIiIiLnN0cmlwKCksCisgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZW5hYmxlKGFsbF90aHJlYWRzPUZhbHNlKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKKyAgICAgICAgICAgICIiIiwKICAgICAgICAgICAgIDMsCiAgICAgICAgICAgICAnU2VnbWVudGF0aW9uIGZhdWx0JywKICAgICAgICAgICAgIGFsbF90aHJlYWRzPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfZGlzYWJsZShzZWxmKToKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotZmF1bHRoYW5kbGVyLmVuYWJsZSgpCi1mYXVsdGhhbmRsZXIuZGlzYWJsZSgpCi1mYXVsdGhhbmRsZXIuX3NpZ3NlZ3YoKQotIiIiLnN0cmlwKCkKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmRpc2FibGUoKQorICAgICAgICAgICAgZmF1bHRoYW5kbGVyLl9zaWdzZWd2KCkKKyAgICAgICAgICAgICIiIgogICAgICAgICBub3RfZXhwZWN0ZWQgPSAnRmF0YWwgUHl0aG9uIGVycm9yJwotICAgICAgICB3aXRoIHN1cHBvcnQuc3VwcHJlc3NfY3Jhc2hfcG9wdXAoKToKLSAgICAgICAgICAgIHN0ZGVyciwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSkKLSAgICAgICAgc3RkZXIgPSAnXG4nLmpvaW4oc3RkZXJyKQorICAgICAgICBzdGRlcnIsIGV4aXRjb2RlID0gc2VsZi5nZXRfb3V0cHV0KGNvZGUpCisgICAgICAgIHN0ZGVyciA9ICdcbicuam9pbihzdGRlcnIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3RfZXhwZWN0ZWQgbm90IGluIHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICIlciBpcyBwcmVzZW50IGluICVyIiAlIChub3RfZXhwZWN0ZWQsIHN0ZGVycikpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXhpdGNvZGUsIDApCkBAIC0yNjQsMTYgKzI1MCw0MiBAQAogICAgIGRlZiB0ZXN0X2Rpc2FibGVkX2J5X2RlZmF1bHQoc2VsZik6CiAgICAgICAgICMgQnkgZGVmYXVsdCwgdGhlIG1vZHVsZSBzaG91bGQgYmUgZGlzYWJsZWQKICAgICAgICAgY29kZSA9ICJpbXBvcnQgZmF1bHRoYW5kbGVyOyBwcmludChmYXVsdGhhbmRsZXIuaXNfZW5hYmxlZCgpKSIKLSAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQotICAgICAgICBzdGRvdXQgPSAoc3Rkb3V0ICsgc3RkZXJyKS5zdHJpcCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiIkZhbHNlIikKKyAgICAgICAgYXJncyA9IGZpbHRlcihOb25lLCAoc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItRSIgaWYgc3lzLmZsYWdzLmlnbm9yZV9lbnZpcm9ubWVudCBlbHNlICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLWMiLCBjb2RlKSkKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52LnBvcCgiUFlUSE9ORkFVTFRIQU5ETEVSIiwgTm9uZSkKKyAgICAgICAgIyBkb24ndCB1c2UgYXNzZXJ0X3B5dGhvbl9vaygpIGJlY2F1c2UgaXQgYWx3YXlzIGVuYWJsZXMgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIkZhbHNlIikKIAogICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKICAgICAgICAgIyBUZXN0IHB5dGhvbiAtWCBmYXVsdGhhbmRsZXIKICAgICAgICAgY29kZSA9ICJpbXBvcnQgZmF1bHRoYW5kbGVyOyBwcmludChmYXVsdGhhbmRsZXIuaXNfZW5hYmxlZCgpKSIKLSAgICAgICAgcmMsIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLVgiLCAiZmF1bHRoYW5kbGVyIiwgIi1jIiwgY29kZSkKLSAgICAgICAgc3Rkb3V0ID0gKHN0ZG91dCArIHN0ZGVycikuc3RyaXAoKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYiJUcnVlIikKKyAgICAgICAgYXJncyA9IGZpbHRlcihOb25lLCAoc3lzLmV4ZWN1dGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItRSIgaWYgc3lzLmZsYWdzLmlnbm9yZV9lbnZpcm9ubWVudCBlbHNlICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLVgiLCAiZmF1bHRoYW5kbGVyIiwgIi1jIiwgY29kZSkpCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudi5wb3AoIlBZVEhPTkZBVUxUSEFORExFUiIsIE5vbmUpCisgICAgICAgICMgZG9uJ3QgdXNlIGFzc2VydF9weXRob25fb2soKSBiZWNhdXNlIGl0IGFsd2F5cyBlbmFibGVzIGZhdWx0aGFuZGxlcgorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChhcmdzLCBlbnY9ZW52KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dC5yc3RyaXAoKSwgYiJUcnVlIikKKworICAgIGRlZiB0ZXN0X2Vudl92YXIoc2VsZik6CisgICAgICAgICMgZW1wdHkgZW52IHZhcgorICAgICAgICBjb2RlID0gImltcG9ydCBmYXVsdGhhbmRsZXI7IHByaW50KGZhdWx0aGFuZGxlci5pc19lbmFibGVkKCkpIgorICAgICAgICBhcmdzID0gKHN5cy5leGVjdXRhYmxlLCAiLWMiLCBjb2RlKQorICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQorICAgICAgICBlbnZbJ1BZVEhPTkZBVUxUSEFORExFUiddID0gJycKKyAgICAgICAgIyBkb24ndCB1c2UgYXNzZXJ0X3B5dGhvbl9vaygpIGJlY2F1c2UgaXQgYWx3YXlzIGVuYWJsZXMgZmF1bHRoYW5kbGVyCisgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGFyZ3MsIGVudj1lbnYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LnJzdHJpcCgpLCBiIkZhbHNlIikKKworICAgICAgICAjIG5vbi1lbXB0eSBlbnYgdmFyCisgICAgICAgIGVudiA9IG9zLmVudmlyb24uY29weSgpCisgICAgICAgIGVudlsnUFlUSE9ORkFVTFRIQU5ETEVSJ10gPSAnMScKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoYXJncywgZW52PWVudikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQucnN0cmlwKCksIGIiVHJ1ZSIpCiAKICAgICBkZWYgY2hlY2tfZHVtcF90cmFjZWJhY2soc2VsZiwgZmlsZW5hbWUpOgogICAgICAgICAiIiIKQEAgLTI4MSwyMCArMjkzLDIwIEBACiAgICAgICAgIFJhaXNlIGFuIGVycm9yIGlmIHRoZSBvdXRwdXQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgZm9ybWF0LgogICAgICAgICAiIiIKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgogCi1kZWYgZnVuY0IoKToKLSAgICBpZiB7aGFzX2ZpbGVuYW1lfToKLSAgICAgICAgd2l0aCBvcGVuKHtmaWxlbmFtZX0sICJ3YiIpIGFzIGZwOgotICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGZwLCBhbGxfdGhyZWFkcz1GYWxzZSkKLSAgICBlbHNlOgotICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9RmFsc2UpCisgICAgICAgICAgICBkZWYgZnVuY0IoKToKKyAgICAgICAgICAgICAgICBpZiB7aGFzX2ZpbGVuYW1lfToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHtmaWxlbmFtZX0sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGZwLCBhbGxfdGhyZWFkcz1GYWxzZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9RmFsc2UpCiAKLWRlZiBmdW5jQSgpOgotICAgIGZ1bmNCKCkKKyAgICAgICAgICAgIGRlZiBmdW5jQSgpOgorICAgICAgICAgICAgICAgIGZ1bmNCKCkKIAotZnVuY0EoKQotIiIiLnN0cmlwKCkKKyAgICAgICAgICAgIGZ1bmNBKCkKKyAgICAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gY29kZS5mb3JtYXQoCiAgICAgICAgICAgICBmaWxlbmFtZT1yZXByKGZpbGVuYW1lKSwKICAgICAgICAgICAgIGhhc19maWxlbmFtZT1ib29sKGZpbGVuYW1lKSwKQEAgLTMwNCw3ICszMTYsNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGluZW5vID0gOAogICAgICAgICBleHBlY3RlZCA9IFsKLSAgICAgICAgICAgICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOicsCisgICAgICAgICAgICAnU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOicsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgJXMgaW4gZnVuY0InICUgbGluZW5vLAogICAgICAgICAgICAgJyAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDExIGluIGZ1bmNBJywKICAgICAgICAgICAgICcgIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAxMyBpbiA8bW9kdWxlPicKQEAgLTMyNSwxOCArMzM3LDE4IEBACiAgICAgICAgIGZ1bmNfbmFtZSA9ICd4JyAqIChtYXhsZW4gKyA1MCkKICAgICAgICAgdHJ1bmNhdGVkID0gJ3gnICogbWF4bGVuICsgJy4uLicKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgorICAgICAgICAgICAgaW1wb3J0IGZhdWx0aGFuZGxlcgogCi1kZWYge2Z1bmNfbmFtZX0oKToKLSAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9RmFsc2UpCisgICAgICAgICAgICBkZWYge2Z1bmNfbmFtZX0oKToKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9RmFsc2UpCiAKLXtmdW5jX25hbWV9KCkKLSIiIi5zdHJpcCgpCisgICAgICAgICAgICB7ZnVuY19uYW1lfSgpCisgICAgICAgICAgICAiIiIKICAgICAgICAgY29kZSA9IGNvZGUuZm9ybWF0KAogICAgICAgICAgICAgZnVuY19uYW1lPWZ1bmNfbmFtZSwKICAgICAgICAgKQogICAgICAgICBleHBlY3RlZCA9IFsKLSAgICAgICAgICAgICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOicsCisgICAgICAgICAgICAnU3RhY2sgKG1vc3QgcmVjZW50IGNhbGwgZmlyc3QpOicsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgNCBpbiAlcycgJSB0cnVuY2F0ZWQsCiAgICAgICAgICAgICAnICBGaWxlICI8c3RyaW5nPiIsIGxpbmUgNiBpbiA8bW9kdWxlPicKICAgICAgICAgXQpAQCAtMzUxLDM3ICszNjMsMzcgQEAKICAgICAgICAgUmFpc2UgYW4gZXJyb3IgaWYgdGhlIG91dHB1dCBkb2Vzbid0IG1hdGNoIHRoZSBleHBlY3RlZCBmb3JtYXQuCiAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gIiIiCi1pbXBvcnQgZmF1bHRoYW5kbGVyCi1mcm9tIHRocmVhZGluZyBpbXBvcnQgVGhyZWFkLCBFdmVudAotaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGZyb20gdGhyZWFkaW5nIGltcG9ydCBUaHJlYWQsIEV2ZW50CisgICAgICAgICAgICBpbXBvcnQgdGltZQogCi1kZWYgZHVtcCgpOgotICAgIGlmIHtmaWxlbmFtZX06Ci0gICAgICAgIHdpdGggb3Blbih7ZmlsZW5hbWV9LCAid2IiKSBhcyBmcDoKLSAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjayhmcCwgYWxsX3RocmVhZHM9VHJ1ZSkKLSAgICBlbHNlOgotICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2soYWxsX3RocmVhZHM9VHJ1ZSkKKyAgICAgICAgICAgIGRlZiBkdW1wKCk6CisgICAgICAgICAgICAgICAgaWYge2ZpbGVuYW1lfToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHtmaWxlbmFtZX0sICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrKGZwLCBhbGxfdGhyZWFkcz1UcnVlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjayhhbGxfdGhyZWFkcz1UcnVlKQogCi1jbGFzcyBXYWl0ZXIoVGhyZWFkKToKLSAgICAjIGF2b2lkIGJsb2NraW5nIGlmIHRoZSBtYWluIHRocmVhZCByYWlzZXMgYW4gZXhjZXB0aW9uLgotICAgIGRhZW1vbiA9IFRydWUKKyAgICAgICAgICAgIGNsYXNzIFdhaXRlcihUaHJlYWQpOgorICAgICAgICAgICAgICAgICMgYXZvaWQgYmxvY2tpbmcgaWYgdGhlIG1haW4gdGhyZWFkIHJhaXNlcyBhbiBleGNlcHRpb24uCisgICAgICAgICAgICAgICAgZGFlbW9uID0gVHJ1ZQogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYpOgotICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKLSAgICAgICAgc2VsZi5ydW5uaW5nID0gRXZlbnQoKQotICAgICAgICBzZWxmLnN0b3AgPSBFdmVudCgpCisgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW5uaW5nID0gRXZlbnQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3AgPSBFdmVudCgpCiAKLSAgICBkZWYgcnVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bm5pbmcuc2V0KCkKLSAgICAgICAgc2VsZi5zdG9wLndhaXQoKQorICAgICAgICAgICAgICAgIGRlZiBydW4oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucnVubmluZy5zZXQoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLnN0b3Aud2FpdCgpCiAKLXdhaXRlciA9IFdhaXRlcigpCi13YWl0ZXIuc3RhcnQoKQotd2FpdGVyLnJ1bm5pbmcud2FpdCgpCi1kdW1wKCkKLXdhaXRlci5zdG9wLnNldCgpCi13YWl0ZXIuam9pbigpCi0iIiIuc3RyaXAoKQorICAgICAgICAgICAgd2FpdGVyID0gV2FpdGVyKCkKKyAgICAgICAgICAgIHdhaXRlci5zdGFydCgpCisgICAgICAgICAgICB3YWl0ZXIucnVubmluZy53YWl0KCkKKyAgICAgICAgICAgIGR1bXAoKQorICAgICAgICAgICAgd2FpdGVyLnN0b3Auc2V0KCkKKyAgICAgICAgICAgIHdhaXRlci5qb2luKCkKKyAgICAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gY29kZS5mb3JtYXQoZmlsZW5hbWU9cmVwcihmaWxlbmFtZSkpCiAgICAgICAgIG91dHB1dCwgZXhpdGNvZGUgPSBzZWxmLmdldF9vdXRwdXQoY29kZSwgZmlsZW5hbWUpCiAgICAgICAgIG91dHB1dCA9ICdcbicuam9pbihvdXRwdXQpCkBAIC0zOTAsMTcgKzQwMiwxNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbGluZW5vID0gMTAKICAgICAgICAgcmVnZXggPSAiIiIKLV5UaHJlYWQgMHhbMC05YS1mXSs6Ci0oPzogIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gW19hLXpdKwotKXt7MSwzfX0gIEZpbGUgIjxzdHJpbmc+IiwgbGluZSAyMyBpbiBydW4KLSAgRmlsZSAiLip0aHJlYWRpbmcucHkiLCBsaW5lIFswLTldKyBpbiBfYm9vdHN0cmFwX2lubmVyCi0gIEZpbGUgIi4qdGhyZWFkaW5nLnB5IiwgbGluZSBbMC05XSsgaW4gX2Jvb3RzdHJhcAorICAgICAgICAgICAgXlRocmVhZCAweFswLTlhLWZdKyBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgICAgICAgICAgICg/OiAgRmlsZSAiLip0aHJlYWRpbmcucHkiLCBsaW5lIFswLTldKyBpbiBbX2Etel0rCisgICAgICAgICAgICApe3sxLDN9fSAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDIzIGluIHJ1bgorICAgICAgICAgICAgICBGaWxlICIuKnRocmVhZGluZy5weSIsIGxpbmUgWzAtOV0rIGluIF9ib290c3RyYXBfaW5uZXIKKyAgICAgICAgICAgICAgRmlsZSAiLip0aHJlYWRpbmcucHkiLCBsaW5lIFswLTldKyBpbiBfYm9vdHN0cmFwCiAKLUN1cnJlbnQgdGhyZWFkIFhYWDoKLSAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIHtsaW5lbm99IGluIGR1bXAKLSAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDI4IGluIDxtb2R1bGU+JAotIiIiLnN0cmlwKCkKLSAgICAgICAgcmVnZXggPSByZWdleC5mb3JtYXQobGluZW5vPWxpbmVubykKKyAgICAgICAgICAgIEN1cnJlbnQgdGhyZWFkIFhYWCBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKToKKyAgICAgICAgICAgICAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIHtsaW5lbm99IGluIGR1bXAKKyAgICAgICAgICAgICAgRmlsZSAiPHN0cmluZz4iLCBsaW5lIDI4IGluIDxtb2R1bGU+JAorICAgICAgICAgICAgIiIiCisgICAgICAgIHJlZ2V4ID0gZGVkZW50KHJlZ2V4LmZvcm1hdChsaW5lbm89bGluZW5vKSkuc3RyaXAoKQogICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dHB1dCwgcmVnZXgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCiAKQEAgLTQyMSwyOSArNDMzLDI5IEBACiAgICAgICAgICIiIgogICAgICAgICB0aW1lb3V0X3N0ciA9IHN0cihkYXRldGltZS50aW1lZGVsdGEoc2Vjb25kcz1USU1FT1VUKSkKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotaW1wb3J0IHRpbWUKKyAgICAgICAgICAgIGltcG9ydCBmYXVsdGhhbmRsZXIKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCiAKLWRlZiBmdW5jKHRpbWVvdXQsIHJlcGVhdCwgY2FuY2VsLCBmaWxlLCBsb29wcyk6Ci0gICAgZm9yIGxvb3AgaW4gcmFuZ2UobG9vcHMpOgotICAgICAgICBmYXVsdGhhbmRsZXIuZHVtcF90cmFjZWJhY2tfbGF0ZXIodGltZW91dCwgcmVwZWF0PXJlcGVhdCwgZmlsZT1maWxlKQotICAgICAgICBpZiBjYW5jZWw6Ci0gICAgICAgICAgICBmYXVsdGhhbmRsZXIuY2FuY2VsX2R1bXBfdHJhY2ViYWNrX2xhdGVyKCkKLSAgICAgICAgdGltZS5zbGVlcCh0aW1lb3V0ICogNSkKLSAgICAgICAgZmF1bHRoYW5kbGVyLmNhbmNlbF9kdW1wX3RyYWNlYmFja19sYXRlcigpCisgICAgICAgICAgICBkZWYgZnVuYyh0aW1lb3V0LCByZXBlYXQsIGNhbmNlbCwgZmlsZSwgbG9vcHMpOgorICAgICAgICAgICAgICAgIGZvciBsb29wIGluIHJhbmdlKGxvb3BzKToKKyAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmR1bXBfdHJhY2ViYWNrX2xhdGVyKHRpbWVvdXQsIHJlcGVhdD1yZXBlYXQsIGZpbGU9ZmlsZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgY2FuY2VsOgorICAgICAgICAgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLmNhbmNlbF9kdW1wX3RyYWNlYmFja19sYXRlcigpCisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAodGltZW91dCAqIDUpCisgICAgICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5jYW5jZWxfZHVtcF90cmFjZWJhY2tfbGF0ZXIoKQogCi10aW1lb3V0ID0ge3RpbWVvdXR9Ci1yZXBlYXQgPSB7cmVwZWF0fQotY2FuY2VsID0ge2NhbmNlbH0KLWxvb3BzID0ge2xvb3BzfQotaWYge2hhc19maWxlbmFtZX06Ci0gICAgZmlsZSA9IG9wZW4oe2ZpbGVuYW1lfSwgIndiIikKLWVsc2U6Ci0gICAgZmlsZSA9IE5vbmUKLWZ1bmModGltZW91dCwgcmVwZWF0LCBjYW5jZWwsIGZpbGUsIGxvb3BzKQotaWYgZmlsZSBpcyBub3QgTm9uZToKLSAgICBmaWxlLmNsb3NlKCkKLSIiIi5zdHJpcCgpCisgICAgICAgICAgICB0aW1lb3V0ID0ge3RpbWVvdXR9CisgICAgICAgICAgICByZXBlYXQgPSB7cmVwZWF0fQorICAgICAgICAgICAgY2FuY2VsID0ge2NhbmNlbH0KKyAgICAgICAgICAgIGxvb3BzID0ge2xvb3BzfQorICAgICAgICAgICAgaWYge2hhc19maWxlbmFtZX06CisgICAgICAgICAgICAgICAgZmlsZSA9IG9wZW4oe2ZpbGVuYW1lfSwgIndiIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIGZ1bmModGltZW91dCwgcmVwZWF0LCBjYW5jZWwsIGZpbGUsIGxvb3BzKQorICAgICAgICAgICAgaWYgZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgICIiIgogICAgICAgICBjb2RlID0gY29kZS5mb3JtYXQoCiAgICAgICAgICAgICB0aW1lb3V0PVRJTUVPVVQsCiAgICAgICAgICAgICByZXBlYXQ9cmVwZWF0LApAQCAtNDU5LDcgKzQ3MSw3IEBACiAgICAgICAgICAgICBjb3VudCA9IGxvb3BzCiAgICAgICAgICAgICBpZiByZXBlYXQ6CiAgICAgICAgICAgICAgICAgY291bnQgKj0gMgotICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKzpcbicgJSB0aW1lb3V0X3N0cgorICAgICAgICAgICAgaGVhZGVyID0gcidUaW1lb3V0IFwoJXNcKSFcblRocmVhZCAweFswLTlhLWZdKyBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicgJSB0aW1lb3V0X3N0cgogICAgICAgICAgICAgcmVnZXggPSBleHBlY3RlZF90cmFjZWJhY2soOSwgMjAsIGhlYWRlciwgbWluX2NvdW50PWNvdW50KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSZWdleCh0cmFjZSwgcmVnZXgpCiAgICAgICAgIGVsc2U6CkBAIC01MTAsNDUgKzUyMiw0NSBAQAogICAgICAgICAiIiIKICAgICAgICAgc2lnbnVtID0gc2lnbmFsLlNJR1VTUjEKICAgICAgICAgY29kZSA9ICIiIgotaW1wb3J0IGZhdWx0aGFuZGxlcgotaW1wb3J0IG9zCi1pbXBvcnQgc2lnbmFsCi1pbXBvcnQgc3lzCisgICAgICAgICAgICBpbXBvcnQgZmF1bHRoYW5kbGVyCisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCBzaWduYWwKKyAgICAgICAgICAgIGltcG9ydCBzeXMKIAotZGVmIGZ1bmMoc2lnbnVtKToKLSAgICBvcy5raWxsKG9zLmdldHBpZCgpLCBzaWdudW0pCisgICAgICAgICAgICBkZWYgZnVuYyhzaWdudW0pOgorICAgICAgICAgICAgICAgIG9zLmtpbGwob3MuZ2V0cGlkKCksIHNpZ251bSkKIAotZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6Ci0gICAgaGFuZGxlci5jYWxsZWQgPSBUcnVlCi1oYW5kbGVyLmNhbGxlZCA9IEZhbHNlCisgICAgICAgICAgICBkZWYgaGFuZGxlcihzaWdudW0sIGZyYW1lKToKKyAgICAgICAgICAgICAgICBoYW5kbGVyLmNhbGxlZCA9IFRydWUKKyAgICAgICAgICAgIGhhbmRsZXIuY2FsbGVkID0gRmFsc2UKIAotZXhpdGNvZGUgPSAwCi1zaWdudW0gPSB7c2lnbnVtfQotdW5yZWdpc3RlciA9IHt1bnJlZ2lzdGVyfQotY2hhaW4gPSB7Y2hhaW59CisgICAgICAgICAgICBleGl0Y29kZSA9IDAKKyAgICAgICAgICAgIHNpZ251bSA9IHtzaWdudW19CisgICAgICAgICAgICB1bnJlZ2lzdGVyID0ge3VucmVnaXN0ZXJ9CisgICAgICAgICAgICBjaGFpbiA9IHtjaGFpbn0KIAotaWYge2hhc19maWxlbmFtZX06Ci0gICAgZmlsZSA9IG9wZW4oe2ZpbGVuYW1lfSwgIndiIikKLWVsc2U6Ci0gICAgZmlsZSA9IE5vbmUKLWlmIGNoYWluOgotICAgIHNpZ25hbC5zaWduYWwoc2lnbnVtLCBoYW5kbGVyKQotZmF1bHRoYW5kbGVyLnJlZ2lzdGVyKHNpZ251bSwgZmlsZT1maWxlLAotICAgICAgICAgICAgICAgICAgICAgIGFsbF90aHJlYWRzPXthbGxfdGhyZWFkc30sIGNoYWluPXtjaGFpbn0pCi1pZiB1bnJlZ2lzdGVyOgotICAgIGZhdWx0aGFuZGxlci51bnJlZ2lzdGVyKHNpZ251bSkKLWZ1bmMoc2lnbnVtKQotaWYgY2hhaW4gYW5kIG5vdCBoYW5kbGVyLmNhbGxlZDoKLSAgICBpZiBmaWxlIGlzIG5vdCBOb25lOgotICAgICAgICBvdXRwdXQgPSBmaWxlCi0gICAgZWxzZToKLSAgICAgICAgb3V0cHV0ID0gc3lzLnN0ZGVycgotICAgIHByaW50KCJFcnJvcjogc2lnbmFsIGhhbmRsZXIgbm90IGNhbGxlZCEiLCBmaWxlPW91dHB1dCkKLSAgICBleGl0Y29kZSA9IDEKLWlmIGZpbGUgaXMgbm90IE5vbmU6Ci0gICAgZmlsZS5jbG9zZSgpCi1zeXMuZXhpdChleGl0Y29kZSkKLSIiIi5zdHJpcCgpCisgICAgICAgICAgICBpZiB7aGFzX2ZpbGVuYW1lfToKKyAgICAgICAgICAgICAgICBmaWxlID0gb3Blbih7ZmlsZW5hbWV9LCAid2IiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWxlID0gTm9uZQorICAgICAgICAgICAgaWYgY2hhaW46CisgICAgICAgICAgICAgICAgc2lnbmFsLnNpZ25hbChzaWdudW0sIGhhbmRsZXIpCisgICAgICAgICAgICBmYXVsdGhhbmRsZXIucmVnaXN0ZXIoc2lnbnVtLCBmaWxlPWZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsX3RocmVhZHM9e2FsbF90aHJlYWRzfSwgY2hhaW49e2NoYWlufSkKKyAgICAgICAgICAgIGlmIHVucmVnaXN0ZXI6CisgICAgICAgICAgICAgICAgZmF1bHRoYW5kbGVyLnVucmVnaXN0ZXIoc2lnbnVtKQorICAgICAgICAgICAgZnVuYyhzaWdudW0pCisgICAgICAgICAgICBpZiBjaGFpbiBhbmQgbm90IGhhbmRsZXIuY2FsbGVkOgorICAgICAgICAgICAgICAgIGlmIGZpbGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIG91dHB1dCA9IGZpbGUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvdXRwdXQgPSBzeXMuc3RkZXJyCisgICAgICAgICAgICAgICAgcHJpbnQoIkVycm9yOiBzaWduYWwgaGFuZGxlciBub3QgY2FsbGVkISIsIGZpbGU9b3V0cHV0KQorICAgICAgICAgICAgICAgIGV4aXRjb2RlID0gMQorICAgICAgICAgICAgaWYgZmlsZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHN5cy5leGl0KGV4aXRjb2RlKQorICAgICAgICAgICAgIiIiCiAgICAgICAgIGNvZGUgPSBjb2RlLmZvcm1hdCgKICAgICAgICAgICAgIGZpbGVuYW1lPXJlcHIoZmlsZW5hbWUpLAogICAgICAgICAgICAgaGFzX2ZpbGVuYW1lPWJvb2woZmlsZW5hbWUpLApAQCAtNTYxLDkgKzU3Myw5IEBACiAgICAgICAgIHRyYWNlID0gJ1xuJy5qb2luKHRyYWNlKQogICAgICAgICBpZiBub3QgdW5yZWdpc3RlcjoKICAgICAgICAgICAgIGlmIGFsbF90aHJlYWRzOgotICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ0N1cnJlbnQgdGhyZWFkIFhYWDpcbicKKyAgICAgICAgICAgICAgICByZWdleCA9ICdDdXJyZW50IHRocmVhZCBYWFggXChtb3N0IHJlY2VudCBjYWxsIGZpcnN0XCk6XG4nCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHJlZ2V4ID0gJ1RyYWNlYmFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicKKyAgICAgICAgICAgICAgICByZWdleCA9ICdTdGFjayBcKG1vc3QgcmVjZW50IGNhbGwgZmlyc3RcKTpcbicKICAgICAgICAgICAgIHJlZ2V4ID0gZXhwZWN0ZWRfdHJhY2ViYWNrKDcsIDI4LCByZWdleCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgodHJhY2UsIHJlZ2V4KQogICAgICAgICBlbHNlOgpAQCAtNTg5LDkgKzYwMSwzMSBAQAogICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2NoYWluKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3JlZ2lzdGVyKGNoYWluPVRydWUpCiAKKyAgICBAY29udGV4dG1hbmFnZXIKKyAgICBkZWYgY2hlY2tfc3RkZXJyX25vbmUoc2VsZik6CisgICAgICAgIHN0ZGVyciA9IHN5cy5zdGRlcnIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IE5vbmUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgInN5cy5zdGRlcnIgaXMgTm9uZSIpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuc3RkZXJyID0gc3RkZXJyCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGYXVsdEhhbmRsZXJUZXN0cykKKyAgICBkZWYgdGVzdF9zdGRlcnJfTm9uZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjE0OTc6IHByb3ZpZGUgYW4gaGVscGZ1bCBlcnJvciBpZiBzeXMuc3RkZXJyIGlzIE5vbmUsCisgICAgICAgICMgaW5zdGVhZCBvZiBqdXN0IGFuIGF0dHJpYnV0ZSBlcnJvcjogIk5vbmUgaGFzIG5vIGF0dHJpYnV0ZSBmaWxlbm8iLgorICAgICAgICB3aXRoIHNlbGYuY2hlY2tfc3RkZXJyX25vbmUoKToKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5lbmFibGUoKQorICAgICAgICB3aXRoIHNlbGYuY2hlY2tfc3RkZXJyX25vbmUoKToKKyAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFjaygpCisgICAgICAgIGlmIGhhc2F0dHIoZmF1bHRoYW5kbGVyLCAnZHVtcF90cmFjZWJhY2tfbGF0ZXInKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5jaGVja19zdGRlcnJfbm9uZSgpOgorICAgICAgICAgICAgICAgIGZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlcigxZS0zKQorICAgICAgICBpZiBoYXNhdHRyKGZhdWx0aGFuZGxlciwgInJlZ2lzdGVyIik6CisgICAgICAgICAgICB3aXRoIHNlbGYuY2hlY2tfc3RkZXJyX25vbmUoKToKKyAgICAgICAgICAgICAgICBmYXVsdGhhbmRsZXIucmVnaXN0ZXIoc2lnbmFsLlNJR1VTUjEpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mY250bC5weSBiL0xpYi90ZXN0L3Rlc3RfZmNudGwucHkKaW5kZXggMTgxMGM0ZS4uZTNiN2VkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mY250bC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZjbnRsLnB5CkBAIC0xLDcgKzEsNCBAQAogIiIiVGVzdCBwcm9ncmFtIGZvciB0aGUgZmNudGwgQyBtb2R1bGUuCi0KLU9TLzIrRU1YIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZmlsZSBsb2NraW5nIG9wZXJhdGlvbnMuCi0KICIiIgogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgb3MKQEAgLTM5LDggKzM2LDYgQEAKICAgICAgICAgbG9ja2RhdGEgPSBzdHJ1Y3QucGFjaygncXFpaGhpJywgMCwgMCwgMCwgZmNudGwuRl9XUkxDSywgMCwgMCkKICAgICBlbGlmIHN5cy5wbGF0Zm9ybSBpbiBbJ2FpeDMnLCAnYWl4NCcsICdocC11eEInLCAndW5peHdhcmU3J106CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hobGxsaWknLCBmY250bC5GX1dSTENLLCAwLCAwLCAwLCAwLCAwLCAwKQotICAgIGVsaWYgc3lzLnBsYXRmb3JtIGluIFsnb3MyZW14J106Ci0gICAgICAgIGxvY2tkYXRhID0gTm9uZQogICAgIGVsc2U6CiAgICAgICAgIGxvY2tkYXRhID0gc3RydWN0LnBhY2soJ2hoJytzdGFydF9sZW4rJ2hoJywgZmNudGwuRl9XUkxDSywgMCwgMCwgMCwgMCwgMCkKICAgICBpZiBsb2NrZGF0YToKQEAgLTcyLDE4ICs2NywyMCBAQAogICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRGTCwgb3MuT19OT05CTE9DSykKICAgICAgICAgaWYgdmVyYm9zZToKICAgICAgICAgICAgIHByaW50KCdTdGF0dXMgZnJvbSBmY250bCB3aXRoIE9fTk9OQkxPQ0s6ICcsIHJ2KQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gbm90IGluIFsnb3MyZW14J106Ci0gICAgICAgICAgICBydiA9IGZjbnRsLmZjbnRsKHNlbGYuZi5maWxlbm8oKSwgZmNudGwuRl9TRVRMS1csIGxvY2tkYXRhKQotICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCisgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLmZpbGVubygpLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RyaW5nIGZyb20gZmNudGwgd2l0aCBGX1NFVExLVzogJywgcmVwcihydikpCiAgICAgICAgIHNlbGYuZi5jbG9zZSgpCiAKICAgICBkZWYgdGVzdF9mY250bF9maWxlX2Rlc2NyaXB0b3Ioc2VsZik6CiAgICAgICAgICMgYWdhaW4sIGJ1dCBwYXNzIHRoZSBmaWxlIHJhdGhlciB0aGFuIG51bWVyaWMgZGVzY3JpcHRvcgogICAgICAgICBzZWxmLmYgPSBvcGVuKFRFU1RGTiwgJ3diJykKICAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VURkwsIG9zLk9fTk9OQkxPQ0spCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBub3QgaW4gWydvczJlbXgnXToKLSAgICAgICAgICAgIHJ2ID0gZmNudGwuZmNudGwoc2VsZi5mLCBmY250bC5GX1NFVExLVywgbG9ja2RhdGEpCisgICAgICAgIGlmIHZlcmJvc2U6CisgICAgICAgICAgICBwcmludCgnU3RhdHVzIGZyb20gZmNudGwgd2l0aCBPX05PTkJMT0NLOiAnLCBydikKKyAgICAgICAgcnYgPSBmY250bC5mY250bChzZWxmLmYsIGZjbnRsLkZfU0VUTEtXLCBsb2NrZGF0YSkKKyAgICAgICAgaWYgdmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KCdTdHJpbmcgZnJvbSBmY250bCB3aXRoIEZfU0VUTEtXOiAnLCByZXByKHJ2KSkKICAgICAgICAgc2VsZi5mLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2ZjbnRsX2JhZF9maWxlKHNlbGYpOgpAQCAtMTI3LDYgKzEyNCwyNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuY2xvc2UoZmQpCiAKKyAgICBkZWYgdGVzdF9mbG9jayhzZWxmKToKKyAgICAgICAgIyBTb2xhcmlzIG5lZWRzIHJlYWRhYmxlIGZpbGUgZm9yIHNoYXJlZCBsb2NrCisgICAgICAgIHNlbGYuZiA9IG9wZW4oVEVTVEZOLCAnd2IrJykKKyAgICAgICAgZmlsZW5vID0gc2VsZi5mLmZpbGVubygpCisgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgZmNudGwuTE9DS19TSCkKKyAgICAgICAgZmNudGwuZmxvY2soZmlsZW5vLCBmY250bC5MT0NLX1VOKQorICAgICAgICBmY250bC5mbG9jayhzZWxmLmYsIGZjbnRsLkxPQ0tfU0ggfCBmY250bC5MT0NLX05CKQorICAgICAgICBmY250bC5mbG9jayhzZWxmLmYsIGZjbnRsLkxPQ0tfVU4pCisgICAgICAgIGZjbnRsLmZsb2NrKGZpbGVubywgZmNudGwuTE9DS19FWCkKKyAgICAgICAgZmNudGwuZmxvY2soZmlsZW5vLCBmY250bC5MT0NLX1VOKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZjbnRsLmZsb2NrLCAtMSwgZmNudGwuTE9DS19TSCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmY250bC5mbG9jaywgJ3NwYW0nLCBmY250bC5MT0NLX1NIKQorCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2Zsb2NrX292ZXJmbG93KHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGZjbnRsLmZsb2NrLCBfdGVzdGNhcGkuSU5UX01BWCsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5MT0NLX1NIKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVGVzdEZjbnRsKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlLnB5CmluZGV4IDc2YjE2OTQuLjRlMzkyYjcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbGUucHkKQEAgLTgzLDExICs4MywxMSBAQAogICAgIGRlZiB0ZXN0RXJyb3JzKHNlbGYpOgogICAgICAgICBmID0gc2VsZi5mCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5uYW1lLCBURVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5pc2F0dHkoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmlzYXR0eSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuY2xvc2VkKQogCiAgICAgICAgIGlmIGhhc2F0dHIoZiwgInJlYWRpbnRvIik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoSU9FcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoT1NFcnJvciwgVHlwZUVycm9yKSwgZi5yZWFkaW50bywgIiIpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmYuX19leGl0X18oKnN5cy5leGNfaW5mbygpKSwgTm9uZSkKIAogICAgIGRlZiB0ZXN0UmVhZFdoZW5Xcml0aW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLmYucmVhZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5mLnJlYWQpCiAKIGNsYXNzIENBdXRvRmlsZVRlc3RzKEF1dG9GaWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBvcGVuID0gaW8ub3BlbgpAQCAtMTc3LDcgKzE3Nyw3IEBACiAgICAgICAgICAgICAgICAgZCA9IGludChmLnJlYWQoKS5kZWNvZGUoImFzY2lpIikpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBtc2c6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdlcnJvciBzZXR0aW5nIGJ1ZmZlciBzaXplICVkOiAlcycgJSAocywgc3RyKG1zZykpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLCBzKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkgYi9MaWIvdGVzdC90ZXN0X2ZpbGVjbXAucHkKaW5kZXggMDk1OTk3OS4uYjViMjRhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlY21wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWNtcC5weQpAQCAtMSw4ICsxLDEyIEBACi0KLWltcG9ydCBvcywgZmlsZWNtcCwgc2h1dGlsLCB0ZW1wZmlsZQoraW1wb3J0IGZpbGVjbXAKK2ltcG9ydCBvcworaW1wb3J0IHNodXRpbAoraW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKKwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKKwogY2xhc3MgRmlsZUNvbXBhcmVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLm5hbWUgPSBzdXBwb3J0LlRFU1RGTgpAQCAtMTAsMTMgKzE0LDExIEBACiAgICAgICAgIHNlbGYubmFtZV9kaWZmID0gc3VwcG9ydC5URVNURk4gKyAnLWRpZmYnCiAgICAgICAgIGRhdGEgPSAnQ29udGVudHMgb2YgZmlsZSBnbyBoZXJlLlxuJwogICAgICAgICBmb3IgbmFtZSBpbiBbc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSwgc2VsZi5uYW1lX2RpZmZdOgotICAgICAgICAgICAgb3V0cHV0ID0gb3BlbihuYW1lLCAndycpCi0gICAgICAgICAgICBvdXRwdXQud3JpdGUoZGF0YSkKLSAgICAgICAgICAgIG91dHB1dC5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG9wZW4obmFtZSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICAgICAgb3V0cHV0LndyaXRlKGRhdGEpCiAKLSAgICAgICAgb3V0cHV0ID0gb3BlbihzZWxmLm5hbWVfZGlmZiwgJ2ErJykKLSAgICAgICAgb3V0cHV0LndyaXRlKCdBbiBleHRyYSBsaW5lLlxuJykKLSAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYubmFtZV9kaWZmLCAnYSsnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBvdXRwdXQud3JpdGUoJ0FuIGV4dHJhIGxpbmUuXG4nKQogICAgICAgICBzZWxmLmRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtMjUsMTMgKzI3LDEzIEBACiAgICAgICAgIG9zLnVubGluayhzZWxmLm5hbWVfZGlmZikKIAogICAgIGRlZiB0ZXN0X21hdGNoaW5nKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWVfc2FtZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaXRzZWxmIGZhaWxzIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNoYWxsb3c9RmFsc2UpLAorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXAoc2VsZi5uYW1lLCBzZWxmLm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGl0c2VsZiBmYWlscyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZSwgc2hhbGxvdz1GYWxzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaW5nIGZpbGUgdG8gaXRzZWxmIGZhaWxzIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGlkZW50aWNhbCBmaWxlIGZhaWxzIikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lKSwKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX3NhbWUsIHNoYWxsb3c9RmFsc2UpLAogICAgICAgICAgICAgICAgICAgICAgICAgIkNvbXBhcmluZyBmaWxlIHRvIGlkZW50aWNhbCBmaWxlIGZhaWxzIikKIAogICAgIGRlZiB0ZXN0X2RpZmZlcmVudChzZWxmKToKQEAgLTQwLDMzICs0Miw0NSBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5kaXIpLAogICAgICAgICAgICAgICAgICAgICAiRmlsZSBhbmQgZGlyZWN0b3J5IGNvbXBhcmUgYXMgZXF1YWwiKQogCisgICAgZGVmIHRlc3RfY2FjaGVfY2xlYXIoc2VsZik6CisgICAgICAgIGZpcnN0X2NvbXBhcmUgPSBmaWxlY21wLmNtcChzZWxmLm5hbWUsIHNlbGYubmFtZV9zYW1lLCBzaGFsbG93PUZhbHNlKQorICAgICAgICBzZWNvbmRfY29tcGFyZSA9IGZpbGVjbXAuY21wKHNlbGYubmFtZSwgc2VsZi5uYW1lX2RpZmYsIHNoYWxsb3c9RmFsc2UpCisgICAgICAgIGZpbGVjbXAuY2xlYXJfY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGVuKGZpbGVjbXAuX2NhY2hlKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhY2hlIG5vdCBjbGVhcmVkIGFmdGVyIGNhbGxpbmcgY2xlYXJfY2FjaGUiKQorCiBjbGFzcyBEaXJDb21wYXJlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgdG1wZGlyID0gdGVtcGZpbGUuZ2V0dGVtcGRpcigpCiAgICAgICAgIHNlbGYuZGlyID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2RpcicpCiAgICAgICAgIHNlbGYuZGlyX3NhbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZGlyLXNhbWUnKQogICAgICAgICBzZWxmLmRpcl9kaWZmID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2Rpci1kaWZmJykKKworICAgICAgICAjIEFub3RoZXIgZGlyIGlzIGNyZWF0ZWQgdW5kZXIgZGlyX3NhbWUsIGJ1dCBpdCBoYXMgYSBuYW1lIGZyb20gdGhlCisgICAgICAgICMgaWdub3JlZCBsaXN0IHNvIGl0IHNob3VsZCBub3QgYWZmZWN0IHRlc3RpbmcgcmVzdWx0cy4KKyAgICAgICAgc2VsZi5kaXJfaWdub3JlZCA9IG9zLnBhdGguam9pbihzZWxmLmRpcl9zYW1lLCAnLmhnJykKKwogICAgICAgICBzZWxmLmNhc2VpbnNlbnNpdGl2ZSA9IG9zLnBhdGgubm9ybWNhc2UoJ0EnKSA9PSBvcy5wYXRoLm5vcm1jYXNlKCdhJykKICAgICAgICAgZGF0YSA9ICdDb250ZW50cyBvZiBmaWxlIGdvIGhlcmUuXG4nCi0gICAgICAgIGZvciBkaXIgaW4gW3NlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBzZWxmLmRpcl9kaWZmXToKKyAgICAgICAgZm9yIGRpciBpbiAoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUsIHNlbGYuZGlyX2RpZmYsIHNlbGYuZGlyX2lnbm9yZWQpOgogICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShkaXIsIFRydWUpCiAgICAgICAgICAgICBvcy5ta2RpcihkaXIpCiAgICAgICAgICAgICBpZiBzZWxmLmNhc2VpbnNlbnNpdGl2ZSBhbmQgZGlyIGlzIHNlbGYuZGlyX3NhbWU6CiAgICAgICAgICAgICAgICAgZm4gPSAnRmlMZScgICAgICMgVmVyaWZ5IGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbgogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBmbiA9ICdmaWxlJwotICAgICAgICAgICAgb3V0cHV0ID0gb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmbiksICd3JykKLSAgICAgICAgICAgIG91dHB1dC53cml0ZShkYXRhKQotICAgICAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZGlyLCBmbiksICd3JykgYXMgb3V0cHV0OgorICAgICAgICAgICAgICAgIG91dHB1dC53cml0ZShkYXRhKQogCi0gICAgICAgIG91dHB1dCA9IG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGlyX2RpZmYsICdmaWxlMicpLCAndycpCi0gICAgICAgIG91dHB1dC53cml0ZSgnQW4gZXh0cmEgZmlsZS5cbicpCi0gICAgICAgIG91dHB1dC5jbG9zZSgpCisgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXJfZGlmZiwgJ2ZpbGUyJyksICd3JykgYXMgb3V0cHV0OgorICAgICAgICAgICAgb3V0cHV0LndyaXRlKCdBbiBleHRyYSBmaWxlLlxuJykKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcikKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLmRpcl9zYW1lKQotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZGlyX2RpZmYpCisgICAgICAgIGZvciBkaXIgaW4gKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLCBzZWxmLmRpcl9kaWZmKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGlyKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9pZ25vcmVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEluKCcuaGcnLCBmaWxlY21wLkRFRkFVTFRfSUdOT1JFUykKIAogICAgIGRlZiB0ZXN0X2NtcGZpbGVzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZWNtcC5jbXBmaWxlcyhzZWxmLmRpciwgc2VsZi5kaXIsIFsnZmlsZSddKSA9PQpAQCAtODYsOSArMTAwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpbmcgZGlyZWN0b3J5IHRvIHNhbWUgZmFpbHMiKQogCiAgICAgICAgICMgQWRkIGRpZmZlcmVudCBmaWxlMgotICAgICAgICBvdXRwdXQgPSBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpciwgJ2ZpbGUyJyksICd3JykKLSAgICAgICAgb3V0cHV0LndyaXRlKCdEaWZmZXJlbnQgY29udGVudHMuXG4nKQotICAgICAgICBvdXRwdXQuY2xvc2UoKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYuZGlyLCAnZmlsZTInKSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBvdXRwdXQud3JpdGUoJ0RpZmZlcmVudCBjb250ZW50cy5cbicpCiAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmaWxlY21wLmNtcGZpbGVzKHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnZmlsZScsICdmaWxlMiddKSA9PQpAQCAtMTA3LDMwICsxMjAsOTQgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW2QubGVmdF9saXN0LCBkLnJpZ2h0X2xpc3RdLFtbJ2ZpbGUnXSwgWydmaWxlJ11dKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuY29tbW9uLCBbJ2ZpbGUnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGQubGVmdF9vbmx5ID09IGQucmlnaHRfb25seSA9PSBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLmxlZnRfb25seSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5yaWdodF9vbmx5LCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNhbWVfZmlsZXMsIFsnZmlsZSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGlmZl9maWxlcywgW10pCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUpLAorICAgICAgICAgICAgIklkZW50aWNhbCBmaWxlcyA6IFsnZmlsZSddIiwKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVwb3J0KGQucmVwb3J0LCBleHBlY3RlZF9yZXBvcnQpCiAKLSAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIGZvciBjb21wYXJpc29uIG9mIHR3byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMKKyAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIGZvciBjb21wYXJpc29uIG9mIHR3byBkaWZmZXJlbnQgZGlyZWN0b3JpZXMgKHJpZ2h0KQogICAgICAgICBsZWZ0X2RpciwgcmlnaHRfZGlyID0gc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYKICAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKGxlZnRfZGlyLCByaWdodF9kaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0LCBsZWZ0X2RpcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJpZ2h0LCByaWdodF9kaXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0X2xpc3QsIFsnZmlsZSddKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZC5yaWdodF9saXN0ID09IFsnZmlsZScsICdmaWxlMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucmlnaHRfbGlzdCwgWydmaWxlJywgJ2ZpbGUyJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb21tb24sIFsnZmlsZSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubGVmdF9vbmx5LCBbXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJpZ2h0X29ubHksIFsnZmlsZTInXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNhbWVfZmlsZXMsIFsnZmlsZSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGlmZl9maWxlcywgW10pCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYpLAorICAgICAgICAgICAgIk9ubHkgaW4ge30gOiBbJ2ZpbGUyJ10iLmZvcm1hdChzZWxmLmRpcl9kaWZmKSwKKyAgICAgICAgICAgICJJZGVudGljYWwgZmlsZXMgOiBbJ2ZpbGUnXSIsCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X3JlcG9ydChkLnJlcG9ydCwgZXhwZWN0ZWRfcmVwb3J0KQorCisgICAgICAgICMgQ2hlY2sgYXR0cmlidXRlcyBmb3IgY29tcGFyaXNvbiBvZiB0d28gZGlmZmVyZW50IGRpcmVjdG9yaWVzIChsZWZ0KQorICAgICAgICBsZWZ0X2RpciwgcmlnaHRfZGlyID0gc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYKKyAgICAgICAgc2h1dGlsLm1vdmUoCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kaXJfZGlmZiwgJ2ZpbGUyJyksCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdmaWxlMicpCisgICAgICAgICkKKyAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKGxlZnRfZGlyLCByaWdodF9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0LCBsZWZ0X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnJpZ2h0LCByaWdodF9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5sZWZ0X2xpc3QsIFsnZmlsZScsICdmaWxlMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQucmlnaHRfbGlzdCwgWydmaWxlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5jb21tb24sIFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQubGVmdF9vbmx5LCBbJ2ZpbGUyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5yaWdodF9vbmx5LCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNhbWVfZmlsZXMsIFsnZmlsZSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGlmZl9maWxlcywgW10pCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX2RpZmYpLAorICAgICAgICAgICAgIk9ubHkgaW4ge30gOiBbJ2ZpbGUyJ10iLmZvcm1hdChzZWxmLmRpciksCisgICAgICAgICAgICAiSWRlbnRpY2FsIGZpbGVzIDogWydmaWxlJ10iLAorICAgICAgICBdCisgICAgICAgIHNlbGYuX2Fzc2VydF9yZXBvcnQoZC5yZXBvcnQsIGV4cGVjdGVkX3JlcG9ydCkKIAogICAgICAgICAjIEFkZCBkaWZmZXJlbnQgZmlsZTIKLSAgICAgICAgb3V0cHV0ID0gb3Blbihvcy5wYXRoLmpvaW4oc2VsZi5kaXIsICdmaWxlMicpLCAndycpCi0gICAgICAgIG91dHB1dC53cml0ZSgnRGlmZmVyZW50IGNvbnRlbnRzLlxuJykKLSAgICAgICAgb3V0cHV0LmNsb3NlKCkKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzZWxmLmRpcl9kaWZmLCAnZmlsZTInKSwgJ3cnKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBvdXRwdXQud3JpdGUoJ0RpZmZlcmVudCBjb250ZW50cy5cbicpCiAgICAgICAgIGQgPSBmaWxlY21wLmRpcmNtcChzZWxmLmRpciwgc2VsZi5kaXJfZGlmZikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkLnNhbWVfZmlsZXMsIFsnZmlsZSddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZGlmZl9maWxlcywgWydmaWxlMiddKQorICAgICAgICBleHBlY3RlZF9yZXBvcnQgPSBbCisgICAgICAgICAgICAiZGlmZiB7fSB7fSIuZm9ybWF0KHNlbGYuZGlyLCBzZWxmLmRpcl9kaWZmKSwKKyAgICAgICAgICAgICJJZGVudGljYWwgZmlsZXMgOiBbJ2ZpbGUnXSIsCisgICAgICAgICAgICAiRGlmZmVyaW5nIGZpbGVzIDogWydmaWxlMiddIiwKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVwb3J0KGQucmVwb3J0LCBleHBlY3RlZF9yZXBvcnQpCisKKyAgICBkZWYgdGVzdF9yZXBvcnRfcGFydGlhbF9jbG9zdXJlKHNlbGYpOgorICAgICAgICBsZWZ0X2RpciwgcmlnaHRfZGlyID0gc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUKKyAgICAgICAgZCA9IGZpbGVjbXAuZGlyY21wKGxlZnRfZGlyLCByaWdodF9kaXIpCisgICAgICAgIGV4cGVjdGVkX3JlcG9ydCA9IFsKKyAgICAgICAgICAgICJkaWZmIHt9IHt9Ii5mb3JtYXQoc2VsZi5kaXIsIHNlbGYuZGlyX3NhbWUpLAorICAgICAgICAgICAgIklkZW50aWNhbCBmaWxlcyA6IFsnZmlsZSddIiwKKyAgICAgICAgXQorICAgICAgICBzZWxmLl9hc3NlcnRfcmVwb3J0KGQucmVwb3J0X3BhcnRpYWxfY2xvc3VyZSwgZXhwZWN0ZWRfcmVwb3J0KQorCisgICAgZGVmIHRlc3RfcmVwb3J0X2Z1bGxfY2xvc3VyZShzZWxmKToKKyAgICAgICAgbGVmdF9kaXIsIHJpZ2h0X2RpciA9IHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lCisgICAgICAgIGQgPSBmaWxlY21wLmRpcmNtcChsZWZ0X2RpciwgcmlnaHRfZGlyKQorICAgICAgICBleHBlY3RlZF9yZXBvcnQgPSBbCisgICAgICAgICAgICAiZGlmZiB7fSB7fSIuZm9ybWF0KHNlbGYuZGlyLCBzZWxmLmRpcl9zYW1lKSwKKyAgICAgICAgICAgICJJZGVudGljYWwgZmlsZXMgOiBbJ2ZpbGUnXSIsCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5fYXNzZXJ0X3JlcG9ydChkLnJlcG9ydF9mdWxsX2Nsb3N1cmUsIGV4cGVjdGVkX3JlcG9ydCkKKworICAgIGRlZiBfYXNzZXJ0X3JlcG9ydChzZWxmLCBkaXJjbXBfcmVwb3J0LCBleHBlY3RlZF9yZXBvcnRfbGluZXMpOgorICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgZGlyY21wX3JlcG9ydCgpCisgICAgICAgICAgICByZXBvcnRfbGluZXMgPSBzdGRvdXQuZ2V0dmFsdWUoKS5zdHJpcCgpLnNwbGl0KCdcbicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcG9ydF9saW5lcywgZXhwZWN0ZWRfcmVwb3J0X2xpbmVzKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlucHV0LnB5IGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKaW5kZXggYjk1MjNjYy4uNDc2NWEwNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9maWxlaW5wdXQucHkKQEAgLTE5LDExICsxOSwxMiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGd6aXAgPSBOb25lCiAKLWZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCitmcm9tIGlvIGltcG9ydCBCeXRlc0lPLCBTdHJpbmdJTwogZnJvbSBmaWxlaW5wdXQgaW1wb3J0IEZpbGVJbnB1dCwgaG9va19lbmNvZGVkCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBURVNURk4sIHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCBjaGVja193YXJuaW5ncwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHVubGluayBhcyBzYWZlX3VubGluaworZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jawogCiAKICMgVGhlIGZpbGVpbnB1dCBtb2R1bGUgaGFzIDIgaW50ZXJmYWNlczogdGhlIEZpbGVJbnB1dCBjbGFzcyB3aGljaCBkb2VzCkBAIC0yMjQsMTIgKzIyNSwyMSBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIHRyeSBvcGVuaW5nIGluIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUKICAgICAgICAgICAgIHQxID0gd3JpdGVUbXAoMSwgW2IiQVxuQlxyXG5DXHJEIl0sIG1vZGU9IndiIikKLSAgICAgICAgICAgIGZpID0gRmlsZUlucHV0KGZpbGVzPXQxLCBtb2RlPSJVIikKLSAgICAgICAgICAgIGxpbmVzID0gbGlzdChmaSkKKyAgICAgICAgICAgIHdpdGggY2hlY2tfd2FybmluZ3MoKCcnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKKyAgICAgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz10MSwgbW9kZT0iVSIpCisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgWyJBXG4iLCAiQlxuIiwgIkNcbiIsICJEIl0pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICByZW1vdmVfdGVtcGZpbGVzKHQxKQogCisgICAgZGVmIHRlc3Rfc3RkaW5fYmluYXJ5X21vZGUoc2VsZik6CisgICAgICAgIHdpdGggbW9jay5wYXRjaCgnc3lzLnN0ZGluJykgYXMgbV9zdGRpbjoKKyAgICAgICAgICAgIG1fc3RkaW4uYnVmZmVyID0gQnl0ZXNJTyhiJ3NwYW0sIGJhY29uLCBzYXVzYWdlLCBhbmQgc3BhbScpCisgICAgICAgICAgICBmaSA9IEZpbGVJbnB1dChmaWxlcz1bJy0nXSwgbW9kZT0ncmInKQorICAgICAgICAgICAgbGluZXMgPSBsaXN0KGZpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgW2Inc3BhbSwgYmFjb24sIHNhdXNhZ2UsIGFuZCBzcGFtJ10pCisKICAgICBkZWYgdGVzdF9maWxlX29wZW5pbmdfaG9vayhzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBjYW5ub3QgdXNlIG9wZW5ob29rIGFuZCBpbnBsYWNlIG1vZGUKQEAgLTI3OCw2ICsyODgsMjEgQEAKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yKToKICAgICAgICAgICAgICAgICAjIFJlYWQgdG8gdGhlIGVuZCBvZiBmaWxlLgogICAgICAgICAgICAgICAgIGxpc3QoZmkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLnJlYWRsaW5lKCksICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5yZWFkbGluZSgpLCAnJykKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2JpbmFyeV9tb2RlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiJ0FcbkJcclxuQ1xyRCcpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzYWZlX3VubGluaywgVEVTVEZOKQorCisgICAgICAgIHdpdGggRmlsZUlucHV0KGZpbGVzPVRFU1RGTiwgbW9kZT0ncmInKSBhcyBmaToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkucmVhZGxpbmUoKSwgYidBXG4nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaS5yZWFkbGluZSgpLCBiJ0JcclxuJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkucmVhZGxpbmUoKSwgYidDXHJEJykKKyAgICAgICAgICAgICMgUmVhZCB0byB0aGUgZW5kIG9mIGZpbGUuCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpLnJlYWRsaW5lKCksIGInJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkucmVhZGxpbmUoKSwgYicnKQogCiAgICAgZGVmIHRlc3RfY29udGV4dF9tYW5hZ2VyKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0yOTYsOCArMzIxLDggQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdDEgPSB3cml0ZVRtcCgxLCBbIiJdKQogICAgICAgICAgICAgd2l0aCBGaWxlSW5wdXQoZmlsZXM9dDEpIGFzIGZpOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmkuX2ZpbGVzLCAoKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlbW92ZV90ZW1wZmlsZXModDEpCkBAIC04NjksMjcgKzg5NCwxMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lcywgZXhwZWN0ZWRfbGluZXMpCiAKICAgICAgICAgY2hlY2soJ3InLCBbJ0FcbicsICdCXG4nLCAnQ1xuJywgJ0RcdTIwYWMnXSkKLSAgICAgICAgY2hlY2soJ3JVJywgWydBXG4nLCAnQlxuJywgJ0NcbicsICdEXHUyMGFjJ10pCi0gICAgICAgIGNoZWNrKCdVJywgWydBXG4nLCAnQlxuJywgJ0NcbicsICdEXHUyMGFjJ10pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgY2hlY2soJ3JVJywgWydBXG4nLCAnQlxuJywgJ0NcbicsICdEXHUyMGFjJ10pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgY2hlY2soJ1UnLCBbJ0FcbicsICdCXG4nLCAnQ1xuJywgJ0RcdTIwYWMnXSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGNoZWNrKCdyYicsIFsnQVxuJywgJ0JcclxuJywgJ0NccicsICdEXHUyMGFjJ10pCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoCi0gICAgICAgIEJ1ZmZlclNpemVzVGVzdHMsCi0gICAgICAgIEZpbGVJbnB1dFRlc3RzLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pbnB1dCwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfY2xvc2UsCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X25leHRmaWxlLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbmFtZSwKLSAgICAgICAgVGVzdF9maWxlaW5wdXRfbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbGluZW5vLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9maWxlbm8sCi0gICAgICAgIFRlc3RfZmlsZWlucHV0X2lzZmlyc3RsaW5lLAotICAgICAgICBUZXN0X2ZpbGVpbnB1dF9pc3N0ZGluLAotICAgICAgICBUZXN0X2hvb2tfY29tcHJlc3NlZCwKLSAgICAgICAgVGVzdF9ob29rX2VuY29kZWQsCi0gICAgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbGVpby5weSBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CmluZGV4IDQ0NGJlOTEuLmE0ZmQyMGQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZmlsZWlvLnB5CkBAIC0xMTMsMjIgKzExMywyMiBAQAogCiAgICAgZGVmIHRlc3RFcnJvcnMoc2VsZik6CiAgICAgICAgIGYgPSBzZWxmLmYKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBmLmlzYXR0eSgpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGYuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuaXNhdHR5KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCiAgICAgICAgICNzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmLnJlYWQsIDEwKSAjIE9wZW4gZm9yIHJlYWRpbmcKICAgICAgICAgZi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLmNsb3NlZCkKICAgICAgICAgZiA9IF9GaWxlSU8oVEVTVEZOLCAncicpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZi5yZWFkaW50bywgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5jbG9zZWQpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCiAKICAgICBkZWYgdGVzdE1ldGhvZHMoc2VsZik6Ci0gICAgICAgIG1ldGhvZHMgPSBbJ2ZpbGVubycsICdpc2F0dHknLCAncmVhZCcsICdyZWFkaW50bycsCi0gICAgICAgICAgICAgICAgICAgJ3NlZWsnLCAndGVsbCcsICd0cnVuY2F0ZScsICd3cml0ZScsICdzZWVrYWJsZScsCi0gICAgICAgICAgICAgICAgICAgJ3JlYWRhYmxlJywgJ3dyaXRhYmxlJ10KKyAgICAgICAgbWV0aG9kcyA9IFsnZmlsZW5vJywgJ2lzYXR0eScsICdzZWVrYWJsZScsICdyZWFkYWJsZScsICd3cml0YWJsZScsCisgICAgICAgICAgICAgICAgICAgJ3JlYWQnLCAncmVhZGFsbCcsICdyZWFkbGluZScsICdyZWFkbGluZXMnLAorICAgICAgICAgICAgICAgICAgICd0ZWxsJywgJ3RydW5jYXRlJywgJ2ZsdXNoJ10KIAogICAgICAgICBzZWxmLmYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5mLmNsb3NlZCkKQEAgLTEzOCwyMiArMTM4LDMxIEBACiAgICAgICAgICAgICAjIHNob3VsZCByYWlzZSBvbiBjbG9zZWQgZmlsZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWV0aG9kKQogCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZi5yZWFkaW50bykgIyBYWFggc2hvdWxkIGJlIFR5cGVFcnJvcj8KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLnJlYWRpbnRvLCBieXRlYXJyYXkoMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuZi5zZWVrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYuc2VlaywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLndyaXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmYud3JpdGUsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmYud3JpdGVsaW5lcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5mLndyaXRlbGluZXMsIGInJykKKwogICAgIGRlZiB0ZXN0T3BlbmRpcihzZWxmKToKICAgICAgICAgIyBJc3N1ZSAzNzAzOiBvcGVuaW5nIGEgZGlyZWN0b3J5IHNob3VsZCBmaWxsIHRoZSBlcnJubwogICAgICAgICAjIFdpbmRvd3MgYWx3YXlzIHJldHVybnMgIltFcnJubyAxM106IFBlcm1pc3Npb24gZGVuaWVkCiAgICAgICAgICMgVW5peCBjYWxscyBkaXJjaGVjaygpIGFuZCByZXR1cm5zICJbRXJybm8gMjFdOiBJcyBhIGRpcmVjdG9yeSIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgX0ZpbGVJTygnLicsICdyJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZS5lcnJubywgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maWxlbmFtZSwgIi4iKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJTaG91bGQgaGF2ZSByYWlzZWQgSU9FcnJvciIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBPU0Vycm9yIikKIAogICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAidGVzdCBvbmx5IHdvcmtzIG9uIGEgUE9TSVgtbGlrZSBzeXN0ZW0iKQogICAgIGRlZiB0ZXN0T3BlbkRpckZEKHNlbGYpOgogICAgICAgICBmZCA9IG9zLm9wZW4oJy4nLCBvcy5PX1JET05MWSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIF9GaWxlSU8oZmQsICdyJykKICAgICAgICAgb3MuY2xvc2UoZmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSVNESVIpCkBAIC0xNzEsNyArMTgwLDcgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBzZWxmLmYuY2xvc2UoKQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHJldHVybiB3cmFwcGVyCiAKQEAgLTE4MywxNCArMTkyLDE0IEBACiAgICAgICAgICAgICBvcy5jbG9zZShmLmZpbGVubygpKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGZ1bmMoc2VsZiwgZikKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5lcnJubywgZXJybm8uRUJBREYpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIElPRXJyb3IiKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiU2hvdWxkIGhhdmUgcmFpc2VkIE9TRXJyb3IiKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgcmV0dXJuIHdyYXBwZXIKIApAQCAtMjM3LDcgKzI0Niw3IEBACiAgICAgZGVmIFJlb3BlbkZvclJlYWQoc2VsZik6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuZi5jbG9zZSgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5mID0gX0ZpbGVJTyhURVNURk4sICdyJykKICAgICAgICAgb3MuY2xvc2Uoc2VsZi5mLmZpbGVubygpKQpAQCAtMjg1LDcgKzI5NCw3IEBACiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGYgPSBfRmlsZUlPKCIvZGV2L3R0eSIsICJhIikKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyBXaGVuIHJ1biBpbiBhIGNyb24gam9iIHRoZXJlIGp1c3QgYXJlbid0IGFueQogICAgICAgICAgICAgICAgICAgICAjIHR0eXMsIHNvIHNraXAgdGhlIHRlc3QuICBUaGlzIGFsc28gaGFuZGxlcyBvdGhlcgogICAgICAgICAgICAgICAgICAgICAjIE9TJ2VzIHRoYXQgZG9uJ3Qgc3VwcG9ydCAvZGV2L3R0eS4KQEAgLTM2MCw3ICszNjksNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBfRmlsZUlPLCBtYWtlX2JhZF9mZCgpKQogICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKICAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1zdmNydC5nZXRfb3NmaGFuZGxlLCBtYWtlX2JhZF9mZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXN2Y3J0LmdldF9vc2ZoYW5kbGUsIG1ha2VfYmFkX2ZkKCkpCiAKICAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RJbnZhbGlkRmRfb3ZlcmZsb3coc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ZpbmFsaXphdGlvbi5weSBiL0xpYi90ZXN0L3Rlc3RfZmluYWxpemF0aW9uLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYWMxYWEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ZpbmFsaXphdGlvbi5weQpAQCAtMCwwICsxLDUyMiBAQAorIiIiCitUZXN0cyBmb3Igb2JqZWN0IGZpbmFsaXphdGlvbiBzZW1hbnRpY3MsIGFzIG91dGxpbmVkIGluIFBFUCA0NDIuCisiIiIKKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBnYworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2Vha3JlZgorCit0cnk6CisgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHdpdGhfdHBfZGVsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZGVmIHdpdGhfdHBfZGVsKGNscyk6CisgICAgICAgIGNsYXNzIEMob2JqZWN0KToKKyAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoJ3JlcXVpcmVzIF90ZXN0Y2FwaS53aXRoX3RwX2RlbCcpCisgICAgICAgIHJldHVybiBDCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIE5vbkdDU2ltcGxlQmFzZToKKyAgICAiIiIKKyAgICBUaGUgYmFzZSBjbGFzcyBmb3IgYWxsIHRoZSBvYmplY3RzIHVuZGVyIHRlc3QsIGVxdWlwcGVkIHdpdGggdmFyaW91cworICAgIHRlc3RpbmcgZmVhdHVyZXMuCisgICAgIiIiCisKKyAgICBzdXJ2aXZvcnMgPSBbXQorICAgIGRlbF9jYWxscyA9IFtdCisgICAgdHBfZGVsX2NhbGxzID0gW10KKyAgICBlcnJvcnMgPSBbXQorCisgICAgX2NsZWFuaW5nID0gRmFsc2UKKworICAgIF9fc2xvdHNfXyA9ICgpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX2NsZWFudXAoY2xzKToKKyAgICAgICAgY2xzLnN1cnZpdm9ycy5jbGVhcigpCisgICAgICAgIGNscy5lcnJvcnMuY2xlYXIoKQorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIGNscy5kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICBjbHMudHBfZGVsX2NhbGxzLmNsZWFyKCkKKworICAgIEBjbGFzc21ldGhvZAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHRlc3QoY2xzKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgY29udGV4dCBtYW5hZ2VyIHRvIHVzZSBhcm91bmQgYWxsIGZpbmFsaXphdGlvbiB0ZXN0cy4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CisgICAgICAgICAgICBjbHMuZGVsX2NhbGxzLmNsZWFyKCkKKyAgICAgICAgICAgIGNscy50cF9kZWxfY2FsbHMuY2xlYXIoKQorICAgICAgICAgICAgTm9uR0NTaW1wbGVCYXNlLl9jbGVhbmluZyA9IEZhbHNlCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBpZiBjbHMuZXJyb3JzOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBjbHMuZXJyb3JzWzBdCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIE5vbkdDU2ltcGxlQmFzZS5fY2xlYW5pbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgY2xzLl9jbGVhbnVwKCkKKworICAgIGRlZiBjaGVja19zYW5pdHkoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBDaGVjayB0aGUgb2JqZWN0IGlzIHNhbmUgKG5vbi1icm9rZW4pLgorICAgICAgICAiIiIKKworICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUEVQIDQ0MiBmaW5hbGl6ZXIuICBSZWNvcmQgdGhhdCB0aGlzIHdhcyBjYWxsZWQsIGNoZWNrIHRoZQorICAgICAgICBvYmplY3QgaXMgaW4gYSBzYW5lIHN0YXRlLCBhbmQgaW52b2tlIGEgc2lkZSBlZmZlY3QuCisgICAgICAgICIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fY2xlYW5pbmc6CisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2FsbHMuYXBwZW5kKGlkKHNlbGYpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfc2FuaXR5KCkKKyAgICAgICAgICAgICAgICBzZWxmLnNpZGVfZWZmZWN0KCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKGUpCisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHNpZGUgZWZmZWN0IGNhbGxlZCBvbiBkZXN0cnVjdGlvbi4KKyAgICAgICAgIiIiCisKKworY2xhc3MgU2ltcGxlQmFzZShOb25HQ1NpbXBsZUJhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmlkXyA9IGlkKHNlbGYpCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5pZF8gPT0gaWQoc2VsZikKKworCitjbGFzcyBOb25HQyhOb25HQ1NpbXBsZUJhc2UpOgorICAgIF9fc2xvdHNfXyA9ICgpCisKK2NsYXNzIE5vbkdDUmVzdXJyZWN0b3IoTm9uR0NTaW1wbGVCYXNlKToKKyAgICBfX3Nsb3RzX18gPSAoKQorCisgICAgZGVmIHNpZGVfZWZmZWN0KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmVzdXJyZWN0IHNlbGYgYnkgc3RvcmluZyBzZWxmIGluIGEgY2xhc3Mtd2lkZSBsaXN0LgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5zdXJ2aXZvcnMuYXBwZW5kKHNlbGYpCisKK2NsYXNzIFNpbXBsZShTaW1wbGVCYXNlKToKKyAgICBwYXNzCisKK2NsYXNzIFNpbXBsZVJlc3VycmVjdG9yKE5vbkdDUmVzdXJyZWN0b3IsIFNpbXBsZUJhc2UpOgorICAgIHBhc3MKKworCitjbGFzcyBUZXN0QmFzZToKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZ2MuZ2FyYmFnZVs6XSA9IFtdCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgdGVzdHMgaGVyZSBzaG91bGQgcHV0IGFueXRoaW5nIGluIGdjLmdhcmJhZ2UKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnYy5nYXJiYWdlLCBbXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIGRlbCBzZWxmLm9sZF9nYXJiYWdlCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgIGRlZiBhc3NlcnRfZGVsX2NhbGxzKHNlbGYsIGlkcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKFNpbXBsZUJhc2UuZGVsX2NhbGxzKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgYXNzZXJ0X3RwX2RlbF9jYWxscyhzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChTaW1wbGVCYXNlLnRwX2RlbF9jYWxscyksIHNvcnRlZChpZHMpKQorCisgICAgZGVmIGFzc2VydF9zdXJ2aXZvcnMoc2VsZiwgaWRzKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoaWQoeCkgZm9yIHggaW4gU2ltcGxlQmFzZS5zdXJ2aXZvcnMpLCBzb3J0ZWQoaWRzKSkKKworICAgIGRlZiBhc3NlcnRfZ2FyYmFnZShzZWxmLCBpZHMpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChpZCh4KSBmb3IgeCBpbiBnYy5nYXJiYWdlKSwgc29ydGVkKGlkcykpCisKKyAgICBkZWYgY2xlYXJfc3Vydml2b3JzKHNlbGYpOgorICAgICAgICBTaW1wbGVCYXNlLnN1cnZpdm9ycy5jbGVhcigpCisKKworY2xhc3MgU2ltcGxlRmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIHdpdGhvdXQgcmVmY3ljbGVzLgorICAgICIiIgorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFNpbXBsZSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKFtdKQorCisgICAgZGVmIHRlc3Rfc2ltcGxlX3Jlc3VycmVjdChzZWxmKToKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIHMgPSBTaW1wbGVSZXN1cnJlY3RvcigpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3Rfbm9uX2djKHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZ2MuaXNfdHJhY2tlZChzKSkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9ub25fZ2NfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IE5vbkdDUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnYy5pc190cmFja2VkKHMpKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMgKiAyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKworCitjbGFzcyBTZWxmQ3ljbGVCYXNlOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5yZWYgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGFzc2VydCBzZWxmLnJlZiBpcyBzZWxmCisKK2NsYXNzIFNpbXBsZVNlbGZDeWNsZShTZWxmQ3ljbGVCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgU2VsZkN5Y2xlUmVzdXJyZWN0b3IoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlUmVzdXJyZWN0b3IpOgorICAgIHBhc3MKKworY2xhc3MgU3VpY2lkYWxTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgU2ltcGxlKToKKworICAgIGRlZiBzaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEV4cGxpY2l0bHkgYnJlYWsgdGhlIHJlZmVyZW5jZSBjeWNsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYucmVmID0gTm9uZQorCisKK2NsYXNzIFNlbGZDeWNsZUZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhbiBvYmplY3QgaGF2aW5nIGEgc2luZ2xlIGN5Y2xpYyByZWZlcmVuY2UgdG8KKyAgICBpdHNlbGYuCisgICAgIiIiCisKKyAgICBkZWYgdGVzdF9zaW1wbGUoc2VsZik6CisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2ltcGxlU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBfX2RlbF9fIGNhbiByZXN1cnJlY3QgdGhlIG9iamVjdCBiZWluZyBmaW5hbGl6ZWQuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gU2VsZkN5Y2xlUmVzdXJyZWN0b3IoKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpXQorICAgICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihzKQorICAgICAgICAgICAgZGVsIHMKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgICAgICAjIFhYWCBpcyB0aGlzIGRlc2lyYWJsZT8KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgICMgV2hlbiB0cnlpbmcgdG8gZGVzdHJveSB0aGUgb2JqZWN0IGEgc2Vjb25kIHRpbWUsIF9fZGVsX18KKyAgICAgICAgICAgICMgaXNuJ3QgY2FsbGVkIGFueW1vcmUgKGFuZCB0aGUgb2JqZWN0IGlzbid0IHJlc3VycmVjdGVkKS4KKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NpbXBsZV9zdWljaWRlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIEdDIGlzIGFibGUgdG8gZGVhbCB3aXRoIGFuIG9iamVjdCB0aGF0IGtpbGxzIGl0cyBsYXN0CisgICAgICAgICMgcmVmZXJlbmNlIGR1cmluZyBfX2RlbF9fLgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IFN1aWNpZGFsU2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKworY2xhc3MgQ2hhaW5lZEJhc2U6CisKKyAgICBkZWYgY2hhaW4oc2VsZiwgbGVmdCk6CisgICAgICAgIHNlbGYuc3VpY2lkZWQgPSBGYWxzZQorICAgICAgICBzZWxmLmxlZnQgPSBsZWZ0CisgICAgICAgIGxlZnQucmlnaHQgPSBzZWxmCisKKyAgICBkZWYgY2hlY2tfc2FuaXR5KHNlbGYpOgorICAgICAgICBzdXBlcigpLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGlmIHNlbGYuc3VpY2lkZWQ6CisgICAgICAgICAgICBhc3NlcnQgc2VsZi5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLnJpZ2h0IGlzIE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxlZnQgPSBzZWxmLmxlZnQKKyAgICAgICAgICAgIGlmIGxlZnQuc3VpY2lkZWQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0IGxlZnQucmlnaHQgaXMgTm9uZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBhc3NlcnQgbGVmdC5yaWdodCBpcyBzZWxmCisgICAgICAgICAgICByaWdodCA9IHNlbGYucmlnaHQKKyAgICAgICAgICAgIGlmIHJpZ2h0LnN1aWNpZGVkOgorICAgICAgICAgICAgICAgIGFzc2VydCByaWdodC5sZWZ0IGlzIE5vbmUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYXNzZXJ0IHJpZ2h0LmxlZnQgaXMgc2VsZgorCitjbGFzcyBTaW1wbGVDaGFpbmVkKENoYWluZWRCYXNlLCBTaW1wbGUpOgorICAgIHBhc3MKKworY2xhc3MgQ2hhaW5lZFJlc3VycmVjdG9yKENoYWluZWRCYXNlLCBTaW1wbGVSZXN1cnJlY3Rvcik6CisgICAgcGFzcworCitjbGFzcyBTdWljaWRhbENoYWluZWQoQ2hhaW5lZEJhc2UsIFNpbXBsZSk6CisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBFeHBsaWNpdGx5IGJyZWFrIHRoZSByZWZlcmVuY2UgY3ljbGUuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1aWNpZGVkID0gVHJ1ZQorICAgICAgICBzZWxmLmxlZnQgPSBOb25lCisgICAgICAgIHNlbGYucmlnaHQgPSBOb25lCisKKworY2xhc3MgQ3ljbGVDaGFpbkZpbmFsaXphdGlvblRlc3QoVGVzdEJhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGZpbmFsaXphdGlvbiBvZiBhIGN5Y2xpYyBjaGFpbi4gIFRoZXNlIHRlc3RzIGFyZSBzaW1pbGFyIGluCisgICAgc3Bpcml0IHRvIHRoZSBzZWxmLWN5Y2xlIHRlc3RzIGFib3ZlLCBidXQgdGhlIGNvbGxlY3RhYmxlIG9iamVjdAorICAgIGdyYXBoIGlzbid0IHRyaXZpYWwgYW55bW9yZS4KKyAgICAiIiIKKworICAgIGRlZiBidWlsZF9jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgbm9kZXMgPSBbY2xzKCkgZm9yIGNscyBpbiBjbGFzc2VzXQorICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4obm9kZXMpKToKKyAgICAgICAgICAgIG5vZGVzW2ldLmNoYWluKG5vZGVzW2ktMV0pCisgICAgICAgIHJldHVybiBub2RlcworCisgICAgZGVmIGNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oc2VsZiwgY2xhc3Nlcyk6CisgICAgICAgIE4gPSBsZW4oY2xhc3NlcykKKyAgICAgICAgd2l0aCBTaW1wbGVCYXNlLnRlc3QoKToKKyAgICAgICAgICAgIG5vZGVzID0gc2VsZi5idWlsZF9jaGFpbihjbGFzc2VzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoW10pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3cigpIGZvciB3ciBpbiB3cnNdLCBbTm9uZV0gKiBOKQorICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorCisgICAgZGVmIGNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihzZWxmLCBjbGFzc2VzKToKKyAgICAgICAgTiA9IGxlbihjbGFzc2VzKQorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgbm9kZXMgPSBzZWxmLmJ1aWxkX2NoYWluKGNsYXNzZXMpCisgICAgICAgICAgICBOID0gbGVuKG5vZGVzKQorICAgICAgICAgICAgaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgc3Vydml2b3JfaWRzID0gW2lkKHMpIGZvciBzIGluIG5vZGVzIGlmIGlzaW5zdGFuY2UocywgU2ltcGxlUmVzdXJyZWN0b3IpXQorICAgICAgICAgICAgd3JzID0gW3dlYWtyZWYucmVmKHMpIGZvciBzIGluIG5vZGVzXQorICAgICAgICAgICAgZGVsIG5vZGVzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9zdXJ2aXZvcnMoc3Vydml2b3JfaWRzKQorICAgICAgICAgICAgIyBYWFggZGVzaXJhYmxlPworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbd3IoKSBmb3Igd3IgaW4gd3JzXSwgW05vbmVdICogTikKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfc3Vydml2b3JzKCkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU2ltcGxlQ2hhaW5lZF0gKiAzKQorCisgICAgZGVmIHRlc3RfaG9tb2dlbm91c19yZXN1cnJlY3Qoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKFtDaGFpbmVkUmVzdXJyZWN0b3JdICogMykKKworICAgIGRlZiB0ZXN0X2hvbW9nZW5vdXNfc3VpY2lkYWwoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfbm9uX3Jlc3VycmVjdGluZ19jaGFpbihbU3VpY2lkYWxDaGFpbmVkXSAqIDMpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfc3VpY2lkYWxfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX25vbl9yZXN1cnJlY3RpbmdfY2hhaW4oW1N1aWNpZGFsQ2hhaW5lZCwgU2ltcGxlQ2hhaW5lZF0gKiAyKQorCisgICAgZGVmIHRlc3RfaGV0ZXJvZ2Vub3VzX3N1aWNpZGFsX3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19ub25fcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW1N1aWNpZGFsQ2hhaW5lZF0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3Rfb25lKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX3Jlc3VycmVjdGluZ19jaGFpbihbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkXSAqIDIpCisKKyAgICBkZWYgdGVzdF9oZXRlcm9nZW5vdXNfcmVzdXJyZWN0X3R3byhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19yZXN1cnJlY3RpbmdfY2hhaW4oCisgICAgICAgICAgICBbQ2hhaW5lZFJlc3VycmVjdG9yLCBTaW1wbGVDaGFpbmVkLCBTdWljaWRhbENoYWluZWRdICogMikKKworICAgIGRlZiB0ZXN0X2hldGVyb2dlbm91c19yZXN1cnJlY3RfdGhyZWUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfcmVzdXJyZWN0aW5nX2NoYWluKAorICAgICAgICAgICAgW0NoYWluZWRSZXN1cnJlY3Rvcl0gKiAyICsgW1NpbXBsZUNoYWluZWRdICogMiArIFtTdWljaWRhbENoYWluZWRdICogMikKKworCisjIE5PVEU6IHRoZSB0cF9kZWwgc2xvdCBpc24ndCBhdXRvbWF0aWNhbGx5IGluaGVyaXRlZCwgc28gd2UgaGF2ZSB0byBjYWxsCisjIHdpdGhfdHBfZGVsKCkgZm9yIGVhY2ggaW5zdGFudGlhdGVkIGNsYXNzLgorCitjbGFzcyBMZWdhY3lCYXNlKFNpbXBsZUJhc2UpOgorCisgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgRG8gbm90IGludm9rZSBzaWRlX2VmZmVjdCBoZXJlLCBzaW5jZSB3ZSBhcmUgbm93IGV4ZXJjaXNpbmcKKyAgICAgICAgICAgICMgdGhlIHRwX2RlbCBzbG90LgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYuZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCisgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBMZWdhY3kgKHByZS1QRVAgNDQyKSBmaW5hbGl6ZXIsIG1hcHBlZCB0byBhIHRwX2RlbCBzbG90LgorICAgICAgICAiIiIKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYgbm90IHNlbGYuX2NsZWFuaW5nOgorICAgICAgICAgICAgICAgIHNlbGYudHBfZGVsX2NhbGxzLmFwcGVuZChpZChzZWxmKSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3Nhbml0eSgpCisgICAgICAgICAgICAgICAgc2VsZi5zaWRlX2VmZmVjdCgpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHNlbGYuZXJyb3JzLmFwcGVuZChlKQorCitAd2l0aF90cF9kZWwKK2NsYXNzIExlZ2FjeShMZWdhY3lCYXNlKToKKyAgICBwYXNzCisKK0B3aXRoX3RwX2RlbAorY2xhc3MgTGVnYWN5UmVzdXJyZWN0b3IoTGVnYWN5QmFzZSk6CisKKyAgICBkZWYgc2lkZV9lZmZlY3Qoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBSZXN1cnJlY3Qgc2VsZiBieSBzdG9yaW5nIHNlbGYgaW4gYSBjbGFzcy13aWRlIGxpc3QuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLnN1cnZpdm9ycy5hcHBlbmQoc2VsZikKKworQHdpdGhfdHBfZGVsCitjbGFzcyBMZWdhY3lTZWxmQ3ljbGUoU2VsZkN5Y2xlQmFzZSwgTGVnYWN5QmFzZSk6CisgICAgcGFzcworCisKK0BzdXBwb3J0LmNweXRob25fb25seQorY2xhc3MgTGVnYWN5RmluYWxpemF0aW9uVGVzdChUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3QgZmluYWxpemF0aW9uIG9mIG9iamVjdHMgd2l0aCBhIHRwX2RlbC4KKyAgICAiIiIKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBUaGVzZSB0ZXN0cyBuZWVkIHRvIGNsZWFuIHVwIGEgYml0IG1vcmUsIHNpbmNlIHRoZXkgY3JlYXRlCisgICAgICAgICMgdW5jb2xsZWN0YWJsZSBvYmplY3RzLgorICAgICAgICBnYy5nYXJiYWdlLmNsZWFyKCkKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfbGVnYWN5KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeSgpCisgICAgICAgICAgICBpZHMgPSBbaWQocyldCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHMpCisgICAgICAgICAgICBkZWwgcworICAgICAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfdHBfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfZGVsX2NhbGxzKGlkcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhpZHMpCisKKyAgICBkZWYgdGVzdF9sZWdhY3lfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICB3aXRoIFNpbXBsZUJhc2UudGVzdCgpOgorICAgICAgICAgICAgcyA9IExlZ2FjeVJlc3VycmVjdG9yKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfc3Vydml2b3JzKGlkcykKKyAgICAgICAgICAgICMgd2Vha3JlZnMgYXJlIGNsZWFyZWQgYmVmb3JlIHRwX2RlbCBpcyBjYWxsZWQuCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisgICAgICAgICAgICBzZWxmLmNsZWFyX3N1cnZpdm9ycygpCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhpZHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF90cF9kZWxfY2FsbHMoaWRzICogMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhpZHMpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2xlZ2FjeV9zZWxmX2N5Y2xlKHNlbGYpOgorICAgICAgICAjIFNlbGYtY3ljbGVzIHdpdGggbGVnYWN5IGZpbmFsaXplcnMgZW5kIHVwIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIHdpdGggU2ltcGxlQmFzZS50ZXN0KCk6CisgICAgICAgICAgICBzID0gTGVnYWN5U2VsZkN5Y2xlKCkKKyAgICAgICAgICAgIGlkcyA9IFtpZChzKV0KKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYocykKKyAgICAgICAgICAgIGRlbCBzCisgICAgICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2RlbF9jYWxscyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3RwX2RlbF9jYWxscyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X3N1cnZpdm9ycyhbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2UoaWRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3cigpLCBOb25lKQorICAgICAgICAgICAgIyBCcmVhayB0aGUgY3ljbGUgdG8gYWxsb3cgY29sbGVjdGlvbgorICAgICAgICAgICAgZ2MuZ2FyYmFnZVswXS5yZWYgPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2UoW10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMod3IoKSwgTm9uZSkKKworCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkgYi9MaWIvdGVzdC90ZXN0X2Zsb2F0LnB5CmluZGV4IDk2ZDkwN2EuLjI0ZmUxMjggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZmxvYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mbG9hdC5weQpAQCAtMSwxMiArMSwxNiBAQAogCi1pbXBvcnQgdW5pdHRlc3QsIHN0cnVjdAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBmcmFjdGlvbnMKIGltcG9ydCBtYXRoCi1mcm9tIG1hdGggaW1wb3J0IGlzaW5mLCBpc25hbiwgY29weXNpZ24sIGxkZXhwCiBpbXBvcnQgb3BlcmF0b3IKLWltcG9ydCByYW5kb20sIGZyYWN0aW9ucworaW1wb3J0IG9zCitpbXBvcnQgcmFuZG9tCitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0CitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBtYXRoIGltcG9ydCBpc2luZiwgaXNuYW4sIGNvcHlzaWduLCBsZGV4cAogCiBJTkYgPSBmbG9hdCgiaW5mIikKIE5BTiA9IGZsb2F0KCJuYW4iKQpAQCAtMjEsMTMgKzI1LDE4IEBACiB0ZXN0X2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyCiBmb3JtYXRfdGVzdGZpbGUgPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdmb3JtYXRmbG9hdF90ZXN0Y2FzZXMudHh0JykKIAorY2xhc3MgRmxvYXRTdWJjbGFzcyhmbG9hdCk6CisgICAgcGFzcworCitjbGFzcyBPdGhlckZsb2F0U3ViY2xhc3MoZmxvYXQpOgorICAgIHBhc3MKKwogY2xhc3MgR2VuZXJhbEZsb2F0Q2FzZXModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMy4xNCksIDMuMTQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoMzE0KSwgMzE0LjApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoIiAgMy4xNCAgIiksIDMuMTQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoYiIgMy4xNCAgIiksIDMuMTQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiICAweDMuMSAgIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsICIgIC0weDMucC0xICAiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIiAgKzB4My5wLTEgICIpCkBAIC0zOSw4ICs0OCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGZsb2F0LCAiKy5pbmYiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi4iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBmbG9hdCwgIi0uIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZmxvYXQsIGIiLSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQsIHt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgIm5vdCAnZGljdCciLCBmbG9hdCwge30pCiAgICAgICAgICMgTG9uZSBzdXJyb2dhdGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVuY29kZUVycm9yLCBmbG9hdCwgJ1x1RDhGMCcpCiAgICAgICAgICMgY2hlY2sgdGhhdCB3ZSBkb24ndCBhY2NlcHQgYWx0ZXJuYXRlIGV4cG9uZW50IG1hcmtlcnMKQEAgLTUyLDYgKzYxLDQyIEBACiAgICAgICAgIGZsb2F0KGInLicgKyBiJzEnKjEwMDApCiAgICAgICAgIGZsb2F0KCcuJyArICcxJyoxMDAwKQogCisgICAgZGVmIHRlc3Rfbm9uX251bWVyaWNfaW5wdXRfdHlwZXMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3NzaWJsZSBub24tbnVtZXJpYyB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHgsIGluY2x1ZGluZworICAgICAgICAjIHN1YmNsYXNzZXMgb2YgdGhlIGV4cGxpY2l0bHkgZG9jdW1lbnRlZCBhY2NlcHRlZCB0eXBlcy4KKyAgICAgICAgY2xhc3MgQ3VzdG9tU3RyKHN0cik6IHBhc3MKKyAgICAgICAgY2xhc3MgQ3VzdG9tQnl0ZXMoYnl0ZXMpOiBwYXNzCisgICAgICAgIGNsYXNzIEN1c3RvbUJ5dGVBcnJheShieXRlYXJyYXkpOiBwYXNzCisKKyAgICAgICAgZmFjdG9yaWVzID0gWworICAgICAgICAgICAgYnl0ZXMsCisgICAgICAgICAgICBieXRlYXJyYXksCisgICAgICAgICAgICBsYW1iZGEgYjogQ3VzdG9tU3RyKGIuZGVjb2RlKCkpLAorICAgICAgICAgICAgQ3VzdG9tQnl0ZXMsCisgICAgICAgICAgICBDdXN0b21CeXRlQXJyYXksCisgICAgICAgICAgICBtZW1vcnl2aWV3LAorICAgICAgICBdCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gYXJyYXkgaW1wb3J0IGFycmF5CisgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZhY3Rvcmllcy5hcHBlbmQobGFtYmRhIGI6IGFycmF5KCdCJywgYikpCisKKyAgICAgICAgZm9yIGYgaW4gZmFjdG9yaWVzOgorICAgICAgICAgICAgeCA9IGYoYiIgMy4xNCAgIikKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHR5cGUoeCkpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoeCksIDMuMTQpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJjb3VsZCBub3QgY29udmVydCIpOgorICAgICAgICAgICAgICAgICAgICBmbG9hdChmKGInQScgKiAweDEwKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X21lbW9yeXZpZXcoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQobWVtb3J5dmlldyhiJzEyLjMnKVsxOjRdKSwgMi4zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KG1lbW9yeXZpZXcoYicxMi4zXHgwMCcpWzE6NF0pLCAyLjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQobWVtb3J5dmlldyhiJzEyLjMgJylbMTo0XSksIDIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChtZW1vcnl2aWV3KGInMTIuM0EnKVsxOjRdKSwgMi4zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KG1lbW9yeXZpZXcoYicxMi4zNCcpWzE6NF0pLCAyLjMpCisKICAgICBkZWYgdGVzdF9lcnJvcl9tZXNzYWdlKHNlbGYpOgogICAgICAgICB0ZXN0bGlzdCA9ICgnXHhiZCcsICcxMjNceGJkJywgJyAgMTIzIDQ1NiAgJykKICAgICAgICAgZm9yIHMgaW4gdGVzdGxpc3Q6CkBAIC05MiwxMCArMTM3LDYgQEAKIAogICAgIGRlZiB0ZXN0X2Zsb2F0Y29udmVyc2lvbihzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBjYWxscyB0byBfX2Zsb2F0X18oKSB3b3JrIHByb3Blcmx5Ci0gICAgICAgIGNsYXNzIEZvbzA6Ci0gICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiA0Mi4KLQogICAgICAgICBjbGFzcyBGb28xKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiA0Mi4KQEAgLTEyMSwxMyArMTYyLDI2IEBACiAgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHJldHVybiBmbG9hdChzdHIoc2VsZikpICsgMQogCi0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoRm9vMCgpKSwgNDIuKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvbzEoKSksIDQyLikKICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdChGb28yKCkpLCA0Mi4pCiAgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoZmxvYXQoRm9vMygyMSkpLCA0Mi4pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmxvYXQsIEZvbzQoNDIpKQogICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEZvb1N0cignOCcpKSwgOS4pCiAKKyAgICAgICAgY2xhc3MgRm9vNToKKyAgICAgICAgICAgIGRlZiBfX2Zsb2F0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuICIiCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGltZS5zbGVlcCwgRm9vNSgpKQorCisgICAgICAgICMgSXNzdWUgIzI0NzMxCisgICAgICAgIGNsYXNzIEY6CisgICAgICAgICAgICBkZWYgX19mbG9hdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBPdGhlckZsb2F0U3ViY2xhc3MoNDIuKQorICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGZsb2F0KEYoKSksIDQyLikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGZsb2F0KEYoKSkpLCBPdGhlckZsb2F0U3ViY2xhc3MpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoRmxvYXRTdWJjbGFzcyhGKCkpLCA0Mi4pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShGbG9hdFN1YmNsYXNzKEYoKSkpLCBGbG9hdFN1YmNsYXNzKQorCiAgICAgZGVmIHRlc3RfaXNfaW50ZWdlcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoMS4xKS5pc19pbnRlZ2VyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoMS4pLmlzX2ludGVnZXIoKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkgYi9MaWIvdGVzdC90ZXN0X2ZvcmsxLnB5CmluZGV4IDgxOTJjMzguLmUwNjI2ZGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9yazEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JrMS5weQpAQCAtMSw3ICsxLDcgQEAKICIiIlRoaXMgdGVzdCBjaGVja3MgZm9yIGNvcnJlY3QgZm9yaygpIGJlaGF2aW9yLgogIiIiCiAKLWltcG9ydCBpbXAKK2ltcG9ydCBfaW1wIGFzIGltcAogaW1wb3J0IG9zCiBpbXBvcnQgc2lnbmFsCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zvcm1hdC5weSBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CmluZGV4IGVhNWE3MzEuLmZjNzFlNDggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5CkBAIC0xNDIsNyArMTQyLDggQEAKICAgICAgICAgdGVzdGZvcm1hdCgiJSMrMDI3LjIzWCIsIGJpZywgIiswWDAwMDEyMzQ1Njc4OTBBQkNERUYxMjM0NSIpCiAgICAgICAgICMgc2FtZSwgZXhjZXB0IG5vIDAgZmxhZwogICAgICAgICB0ZXN0Zm9ybWF0KCIlIysyNy4yM1giLCBiaWcsICIgKzBYMDAxMjM0NTY3ODkwQUJDREVGMTIzNDUiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIGZsb2F0KGJpZyksICIxMjM0NTZfX19fX19fX19fX19fX18iLCA2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiV4IiwgZmxvYXQoYmlnKSwgIjEyMzQ1Nl9fX19fX19fX19fX19fXyIsIDYpCiAgICAgICAgIGJpZyA9IDBvMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAgICMgMzIgb2N0YWwgZGlnaXRzCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgYmlnLCAiMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIC1iaWcsICItMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAiKQpAQCAtMTgyLDcgKzE4Myw4IEBACiAgICAgICAgIHRlc3Rmb3JtYXQoIiUwMzQuMzNvIiwgYmlnLCAiMDAxMjM0NTY3MDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MCIpCiAgICAgICAgICMgYmFzZSBtYXJrZXIgc2hvdWxkbid0IGNoYW5nZSB0aGF0CiAgICAgICAgIHRlc3Rmb3JtYXQoIiUwIzM0LjMzbyIsIGJpZywgIjBvMDEyMzQ1NjcwMTIzNDU2NzAxMjM0NTY3MDEyMzQ1NjcwIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJW8iLCBmbG9hdChiaWcpLCAiMTIzNDU2X19fX19fX19fX19fX19fX19fX19fX19fX18iLCA2KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgZmxvYXQoYmlnKSwgIjEyMzQ1Nl9fX19fX19fX19fX19fX19fX19fX19fX19fIiwgNikKICAgICAgICAgIyBTb21lIHNtYWxsIGludHMsIGluIGJvdGggUHl0aG9uIGludCBhbmQgZmxhdm9ycykuCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVkIiwgNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVkIiwgLTQyLCAiLTQyIikKQEAgLTE5Myw3ICsxOTUsOCBAQAogICAgICAgICB0ZXN0Zm9ybWF0KCIlI3giLCAxLCAiMHgxIikKICAgICAgICAgdGVzdGZvcm1hdCgiJSNYIiwgMSwgIjBYMSIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjWCIsIDEsICIwWDEiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlI3giLCAxLjAsICIweDEiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiUjeCIsIDEuMCwgIjB4MSIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiUjbyIsIDEsICIwbzEiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlI28iLCAxLCAiMG8xIikKICAgICAgICAgdGVzdGZvcm1hdCgiJSNvIiwgMCwgIjBvMCIpCkBAIC0yMTAsMTIgKzIxMywxNCBAQAogICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIC0weDQyLCAiLTQyIikKICAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCAweDQyLCAiNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIC0weDQyLCAiLTQyIikKLSAgICAgICAgdGVzdGZvcm1hdCgiJXgiLCBmbG9hdCgweDQyKSwgIjQyIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICB0ZXN0Zm9ybWF0KCIleCIsIGZsb2F0KDB4NDIpLCAiNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDBvNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLTBvNDIsICItNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDBvNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLTBvNDIsICItNDIiKQotICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIGZsb2F0KDBvNDIpLCAiNDIiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgZmxvYXQoMG80MiksICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVyIiwgIlx1MDM3OCIsICInXFx1MDM3OCciKSAgIyBub24gcHJpbnRhYmxlCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVhIiwgIlx1MDM3OCIsICInXFx1MDM3OCciKSAgIyBub24gcHJpbnRhYmxlCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVyIiwgIlx1MDM3NCIsICInXHUwMzc0JyIpICAgIyBwcmludGFibGUKQEAgLTMwNywxMCArMzEyLDI1IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19BTEwsIG9sZGxvYykKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X29wdGltaXNhdGlvbnMoc2VsZik6CisgICAgICAgIHRleHQgPSAiYWJjZGUiICMgNSBjaGFyYWN0ZXJzCiAKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJXMiICUgdGV4dCwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJS41cyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlLjEwcyIgJSB0ZXh0LCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCIlMXMiICUgdGV4dCwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiJTVzIiAlIHRleHQsIHRleHQpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChGb3JtYXRUZXN0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MH0iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6c30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6LjVzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDouMTBzfSIuZm9ybWF0KHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmFzc2VydElzKCJ7MDoxc30iLmZvcm1hdCh0ZXh0KSwgdGV4dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcygiezA6NXN9Ii5mb3JtYXQodGV4dCksIHRleHQpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0ZXh0ICUgKCksIHRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGV4dC5mb3JtYXQoKSwgdGV4dCkKIAogICAgIGRlZiB0ZXN0X3ByZWNpc2lvbihzZWxmKToKICAgICAgICAgZiA9IDEuMgpAQCAtMzE4LDE0ICszMzgsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoZiwgIi4zZiIpLCAiMS4yMDAiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZm9ybWF0KGYsICIuJXNmIiAlIChzeXMubWF4c2l6ZSArIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAicHJlY2lzaW9uIHRvbyBiaWciKQogCiAgICAgICAgIGMgPSBjb21wbGV4KGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9ybWF0KGMsICIuMGYiKSwgIjErMGoiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvcm1hdChjLCAiLjNmIiksICIxLjIwMCswLjAwMGoiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgZm9ybWF0KGMsICIuJXNmIiAlIChzeXMubWF4c2l6ZSArIDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAicHJlY2lzaW9uIHRvbyBiaWciKQogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfcHJlY2lzaW9uX2NfbGltaXRzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFjdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQppbmRleCAxZmFkOTIxLi4zMzM2NTMyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ZyYWN0aW9ucy5weQpAQCAtMTQ2LDkgKzE0NiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCAxKSwgX2NvbXBvbmVudHMoRigtMC4wKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDM2MDI4Nzk3MDE4OTYzOTcsIDM2MDI4Nzk3MDE4OTYzOTY4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfY29tcG9uZW50cyhGKDAuMSkpKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBmbG9hdCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgZmxvYXQoJy1pbmYnKSkKKyAgICAgICAgIyBidWcgMTY0Njk6IGVycm9yIHR5cGVzIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggZmxvYXQgLT4gaW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIEYsIGZsb2F0KCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgZmxvYXQoJ2luZicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBmbG9hdCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RJbml0RnJvbURlY2ltYWwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDExLCAxMCksCkBAIC0xNTcsMTAgKzE1OCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIF9jb21wb25lbnRzKEYoRGVjaW1hbCgnMy41ZS0yJykpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbXBvbmVudHMoRihEZWNpbWFsKCcuMDAwZTIwJykpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBGLCBEZWNpbWFsKCdzbmFuJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnaW5mJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBGLCBEZWNpbWFsKCduYW4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgRiwgRGVjaW1hbCgnc25hbicpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBGLCBEZWNpbWFsKCdpbmYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgRiwgRGVjaW1hbCgnLWluZicpKQogCiAgICAgZGVmIHRlc3RGcm9tU3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCg1LCAxKSwgX2NvbXBvbmVudHMoRigiNSIpKSkKQEAgLTI0OCwxNCArMjUwLDE1IEBACiAKICAgICAgICAgaW5mID0gMWUxMDAwCiAgICAgICAgIG5hbiA9IGluZiAtIGluZgorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBmbG9hdCAtPiBpbnQKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBPdmVyZmxvd0Vycm9yLCAiQ2Fubm90IGNvbnZlcnQgaW5mIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIGluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgLWluZiB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1pbmYgdG8gRnJhY3Rpb24uIiwKICAgICAgICAgICAgIEYuZnJvbV9mbG9hdCwgLWluZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgbmFuIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZmxvYXQsIG5hbikKIAogICAgIGRlZiB0ZXN0RnJvbURlY2ltYWwoc2VsZik6CkBAIC0yNjgsMTcgKzI3MSwxOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgLSBGKDEsIDEwKiozMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwoRGVjaW1hbCgiMC4iICsgIjkiICogMzApKSkKIAorICAgICAgICAjIGJ1ZyAxNjQ2OTogZXJyb3IgdHlwZXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQgd2l0aCBkZWNpbWFsIC0+IGludAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc01lc3NhZ2UoCi0gICAgICAgICAgICBUeXBlRXJyb3IsICJDYW5ub3QgY29udmVydCBJbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IEluZmluaXR5IHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgiaW5mIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAorICAgICAgICAgICAgT3ZlcmZsb3dFcnJvciwgIkNhbm5vdCBjb252ZXJ0IC1JbmZpbml0eSB0byBGcmFjdGlvbi4iLAogICAgICAgICAgICAgRi5mcm9tX2RlY2ltYWwsIERlY2ltYWwoIi1pbmYiKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNNZXNzYWdlKAotICAgICAgICAgICAgVHlwZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCisgICAgICAgICAgICBWYWx1ZUVycm9yLCAiQ2Fubm90IGNvbnZlcnQgTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgibmFuIikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzTWVzc2FnZSgKLSAgICAgICAgICAgIFR5cGVFcnJvciwgIkNhbm5vdCBjb252ZXJ0IHNOYU4gdG8gRnJhY3Rpb24uIiwKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsICJDYW5ub3QgY29udmVydCBzTmFOIHRvIEZyYWN0aW9uLiIsCiAgICAgICAgICAgICBGLmZyb21fZGVjaW1hbCwgRGVjaW1hbCgic25hbiIpKQogCiAgICAgZGVmIHRlc3RMaW1pdERlbm9taW5hdG9yKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mcmFtZS5weSBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwMmVjMwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfZnJhbWUucHkKQEAgLTAsMCArMSwxNjggQEAKK2ltcG9ydCBnYworaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIENsZWFyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIGZyYW1lLmNsZWFyKCkuCisgICAgIiIiCisKKyAgICBkZWYgaW5uZXIoc2VsZiwgeD01LCAqKmt3YXJncyk6CisgICAgICAgIDEvMAorCisgICAgZGVmIG91dGVyKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5pbm5lcigqKmt3YXJncykKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CisgICAgICAgICAgICBleGMgPSBlCisgICAgICAgIHJldHVybiBleGMKKworICAgIGRlZiBjbGVhcl90cmFjZWJhY2tfZnJhbWVzKHNlbGYsIHRiKToKKyAgICAgICAgIiIiCisgICAgICAgIENsZWFyIGFsbCBmcmFtZXMgaW4gYSB0cmFjZWJhY2suCisgICAgICAgICIiIgorICAgICAgICB3aGlsZSB0YiBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRiLnRiX2ZyYW1lLmNsZWFyKCkKKyAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorCisgICAgZGVmIHRlc3RfY2xlYXJfbG9jYWxzKHNlbGYpOgorICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjID0gQygpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYykKKyAgICAgICAgZXhjID0gc2VsZi5vdXRlcihjPWMpCisgICAgICAgIGRlbCBjCisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgICMgQSByZWZlcmVuY2UgdG8gYyBpcyBoZWxkIHRocm91Z2ggdGhlIGZyYW1lcworICAgICAgICBzZWxmLmFzc2VydElzTm90KE5vbmUsIHdyKCkpCisgICAgICAgIHNlbGYuY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhleGMuX190cmFjZWJhY2tfXykKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgIyBUaGUgcmVmZXJlbmNlIHdhcyByZWxlYXNlZCBieSAuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydElzKE5vbmUsIHdyKCkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgIGVuZGx5ID0gRmFsc2UKKyAgICAgICAgZGVmIGcoKToKKyAgICAgICAgICAgIG5vbmxvY2FsIGVuZGx5CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBpbm5lcigpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGVuZGx5ID0gVHJ1ZQorICAgICAgICBnZW4gPSBnKCkKKyAgICAgICAgbmV4dChnZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW5kbHkpCisgICAgICAgICMgQ2xlYXJpbmcgdGhlIGZyYW1lIGNsb3NlcyB0aGUgZ2VuZXJhdG9yCisgICAgICAgIGdlbi5naV9mcmFtZS5jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlbmRseSkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2V4ZWN1dGluZyhzZWxmKToKKyAgICAgICAgIyBBdHRlbXB0aW5nIHRvIGNsZWFyIGFuIGV4ZWN1dGluZyBmcmFtZSBpcyBmb3JiaWRkZW4uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIDEvMAorICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGYgPSBlLl9fdHJhY2ViYWNrX18udGJfZnJhbWUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgZi5jbGVhcigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgIGYuZl9iYWNrLmNsZWFyKCkKKworICAgIGRlZiB0ZXN0X2NsZWFyX2V4ZWN1dGluZ19nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgICMgQXR0ZW1wdGluZyB0byBjbGVhciBhbiBleGVjdXRpbmcgZ2VuZXJhdG9yIGZyYW1lIGlzIGZvcmJpZGRlbi4KKyAgICAgICAgZW5kbHkgPSBGYWxzZQorICAgICAgICBkZWYgZygpOgorICAgICAgICAgICAgbm9ubG9jYWwgZW5kbHkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAxLzAKKyAgICAgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGYgPSBlLl9fdHJhY2ViYWNrX18udGJfZnJhbWUKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIGYuY2xlYXIoKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgZi5mX2JhY2suY2xlYXIoKQorICAgICAgICAgICAgICAgIHlpZWxkIGYKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgZW5kbHkgPSBUcnVlCisgICAgICAgIGdlbiA9IGcoKQorICAgICAgICBmID0gbmV4dChnZW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZW5kbHkpCisgICAgICAgICMgQ2xlYXJpbmcgdGhlIGZyYW1lIGNsb3NlcyB0aGUgZ2VuZXJhdG9yCisgICAgICAgIGYuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZW5kbHkpCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9jbGVhcl9yZWZjeWNsZXMoc2VsZik6CisgICAgICAgICMgLmNsZWFyKCkgZG9lc24ndCBsZWF2ZSBhbnkgcmVmY3ljbGUgYmVoaW5kCisgICAgICAgIHdpdGggc3VwcG9ydC5kaXNhYmxlX2djKCk6CisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGMgPSBDKCkKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoYykKKyAgICAgICAgICAgIGV4YyA9IHNlbGYub3V0ZXIoYz1jKQorICAgICAgICAgICAgZGVsIGMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoTm9uZSwgd3IoKSkKKyAgICAgICAgICAgIHNlbGYuY2xlYXJfdHJhY2ViYWNrX2ZyYW1lcyhleGMuX190cmFjZWJhY2tfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoTm9uZSwgd3IoKSkKKworCitjbGFzcyBGcmFtZUxvY2Fsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIgorICAgIFRlc3RzIGZvciB0aGUgLmZfbG9jYWxzIGF0dHJpYnV0ZS4KKyAgICAiIiIKKworICAgIGRlZiBtYWtlX2ZyYW1lcyhzZWxmKToKKyAgICAgICAgZGVmIG91dGVyKCk6CisgICAgICAgICAgICB4ID0gNQorICAgICAgICAgICAgeSA9IDYKKyAgICAgICAgICAgIGRlZiBpbm5lcigpOgorICAgICAgICAgICAgICAgIHogPSB4ICsgMgorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgICAgIHQgPSA5CisgICAgICAgICAgICByZXR1cm4gaW5uZXIoKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRlcigpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvciBhcyBlOgorICAgICAgICAgICAgdGIgPSBlLl9fdHJhY2ViYWNrX18KKyAgICAgICAgICAgIGZyYW1lcyA9IFtdCisgICAgICAgICAgICB3aGlsZSB0YjoKKyAgICAgICAgICAgICAgICBmcmFtZXMuYXBwZW5kKHRiLnRiX2ZyYW1lKQorICAgICAgICAgICAgICAgIHRiID0gdGIudGJfbmV4dAorICAgICAgICByZXR1cm4gZnJhbWVzCisKKyAgICBkZWYgdGVzdF9sb2NhbHMoc2VsZik6CisgICAgICAgIGYsIG91dGVyLCBpbm5lciA9IHNlbGYubWFrZV9mcmFtZXMoKQorICAgICAgICBvdXRlcl9sb2NhbHMgPSBvdXRlci5mX2xvY2FscworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3V0ZXJfbG9jYWxzLnBvcCgnaW5uZXInKSwgdHlwZXMuRnVuY3Rpb25UeXBlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dGVyX2xvY2Fscywgeyd4JzogNSwgJ3knOiA2fSkKKyAgICAgICAgaW5uZXJfbG9jYWxzID0gaW5uZXIuZl9sb2NhbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9sb2NhbHMsIHsneCc6IDUsICd6JzogN30pCisKKyAgICBkZWYgdGVzdF9jbGVhcl9sb2NhbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBmX2xvY2FscyBhZnRlciBjbGVhcigpIChpc3N1ZSAjMjE4OTcpCisgICAgICAgIGYsIG91dGVyLCBpbm5lciA9IHNlbGYubWFrZV9mcmFtZXMoKQorICAgICAgICBvdXRlci5jbGVhcigpCisgICAgICAgIGlubmVyLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRlci5mX2xvY2Fscywge30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5uZXIuZl9sb2NhbHMsIHt9KQorCisgICAgZGVmIHRlc3RfbG9jYWxzX2NsZWFyX2xvY2FscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IGZfbG9jYWxzIGJlZm9yZSBhbmQgYWZ0ZXIgY2xlYXIoKSAodG8gZXhlcmNpc2UgY2FjaGluZykKKyAgICAgICAgZiwgb3V0ZXIsIGlubmVyID0gc2VsZi5tYWtlX2ZyYW1lcygpCisgICAgICAgIG91dGVyLmZfbG9jYWxzCisgICAgICAgIGlubmVyLmZfbG9jYWxzCisgICAgICAgIG91dGVyLmNsZWFyKCkKKyAgICAgICAgaW5uZXIuY2xlYXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dGVyLmZfbG9jYWxzLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lci5mX2xvY2Fscywge30pCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Zyb3plbi5weSBiL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZDY3NjFjLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfZnJvemVuLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAotIyBUZXN0IHRoZSBmcm96ZW4gbW9kdWxlIGRlZmluZWQgaW4gZnJvemVuLmMuCi0KLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQsIHJ1bl91bml0dGVzdAotaW1wb3J0IHVuaXR0ZXN0Ci1pbXBvcnQgc3lzCi0KLWNsYXNzIEZyb3plblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIG1vZHVsZV9hdHRycyA9IGZyb3plbnNldChbJ19fYnVpbHRpbnNfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJ10pCi0gICAgcGFja2FnZV9hdHRycyA9IGZyb3plbnNldChsaXN0KG1vZHVsZV9hdHRycykgKyBbJ19fcGF0aF9fJ10pCi0KLSAgICBkZWYgdGVzdF9mcm96ZW4oc2VsZik6Ci0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX2hlbGxvX18KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvciBhcyB4OgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9faGVsbG9fXyBmYWlsZWQ6IiArIHN0cih4KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19oZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9faGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQotCi0gICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCBfX3BoZWxsb19fCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fIGZhaWxlZDoiICsgc3RyKHgpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfX3BoZWxsb19fLmluaXRpYWxpemVkLCBUcnVlKQotICAgICAgICAgICAgZXhwZWN0ID0gc2V0KHNlbGYucGFja2FnZV9hdHRycykKLSAgICAgICAgICAgIGV4cGVjdC5hZGQoJ2luaXRpYWxpemVkJykKLSAgICAgICAgICAgIGlmIG5vdCAiX19waGVsbG9fXy5zcGFtIiBpbiBzeXMubW9kdWxlczoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXykpLCBleHBlY3QpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGV4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGRpcihfX3BoZWxsb19fKSksIGV4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19waGVsbG9fXy5fX3BhdGhfXywgW19fcGhlbGxvX18uX19uYW1lX19dKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwgJ0hlbGxvIHdvcmxkIVxuJykKLQotICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5zcGFtCi0gICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgeDoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImltcG9ydCBfX3BoZWxsb19fLnNwYW0gZmFpbGVkOiIgKyBzdHIoeCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9fcGhlbGxvX18uc3BhbS5pbml0aWFsaXplZCwgVHJ1ZSkKLSAgICAgICAgICAgIHNwYW1fZXhwZWN0ID0gc2V0KHNlbGYubW9kdWxlX2F0dHJzKQotICAgICAgICAgICAgc3BhbV9leHBlY3QuYWRkKCdpbml0aWFsaXplZCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChkaXIoX19waGVsbG9fXy5zcGFtKSksIHNwYW1fZXhwZWN0KQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdCA9IHNldChzZWxmLnBhY2thZ2VfYXR0cnMpCi0gICAgICAgICAgICBwaGVsbG9fZXhwZWN0LmFkZCgnaW5pdGlhbGl6ZWQnKQotICAgICAgICAgICAgcGhlbGxvX2V4cGVjdC5hZGQoJ3NwYW0nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZGlyKF9fcGhlbGxvX18pKSwgcGhlbGxvX2V4cGVjdCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdIZWxsbyB3b3JsZCFcbicpCi0KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wb3J0IF9fcGhlbGxvX18uZm9vCi0gICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpbXBvcnQgX19waGVsbG9fXy5mb28KLSAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiaW1wb3J0IF9fcGhlbGxvX18uZm9vIHNob3VsZCBoYXZlIGZhaWxlZCIpCi0KLSAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfX2hlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18nXQotICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ19fcGhlbGxvX18uc3BhbSddCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoRnJvemVuVGVzdHMpCi0KLWlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKaW5kZXggNmM5NWM0OS4uZDNiZTdkNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdHBsaWIucHkKQEAgLTIxLDYgKzIxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBIT1NULCBIT1NUdjYKIHRocmVhZGluZyA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykKIAorVElNRU9VVCA9IDMKICMgdGhlIGR1bW15IGRhdGEgcmV0dXJuZWQgYnkgc2VydmVyIG92ZXIgdGhlIGRhdGEgY2hhbm5lbCB3aGVuCiAjIFJFVFIsIExJU1QsIE5MU1QsIE1MU0QgY29tbWFuZHMgYXJlIGlzc3VlZAogUkVUUl9EQVRBID0gJ2FiY2RlMTIzNDVcclxuJyAqIDEwMDAKQEAgLTEyNiw3ICsxMjcsNyBAQAogICAgICAgICBhZGRyID0gbGlzdChtYXAoaW50LCBhcmcuc3BsaXQoJywnKSkpCiAgICAgICAgIGlwID0gJyVkLiVkLiVkLiVkJyAldHVwbGUoYWRkcls6NF0pCiAgICAgICAgIHBvcnQgPSAoYWRkcls0XSAqIDI1NikgKyBhZGRyWzVdCi0gICAgICAgIHMgPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGlwLCBwb3J0KSwgdGltZW91dD0yKQorICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5kdHAgPSBzZWxmLmR0cF9oYW5kbGVyKHMsIGJhc2VjbGFzcz1zZWxmKQogICAgICAgICBzZWxmLnB1c2goJzIwMCBhY3RpdmUgZGF0YSBjb25uZWN0aW9uIGVzdGFibGlzaGVkJykKIApAQCAtMTM0LDcgKzEzNSw3IEBACiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmJpbmQoKHNlbGYuc29ja2V0LmdldHNvY2tuYW1lKClbMF0sIDApKQogICAgICAgICAgICAgc29jay5saXN0ZW4oNSkKLSAgICAgICAgICAgIHNvY2suc2V0dGltZW91dCgxMCkKKyAgICAgICAgICAgIHNvY2suc2V0dGltZW91dChUSU1FT1VUKQogICAgICAgICAgICAgaXAsIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbOjJdCiAgICAgICAgICAgICBpcCA9IGlwLnJlcGxhY2UoJy4nLCAnLCcpOyBwMSA9IHBvcnQgLyAyNTY7IHAyID0gcG9ydCAlIDI1NgogICAgICAgICAgICAgc2VsZi5wdXNoKCcyMjcgZW50ZXJpbmcgcGFzc2l2ZSBtb2RlICglcywlZCwlZCknICUoaXAsIHAxLCBwMikpCkBAIC0xNDQsNyArMTQ1LDcgQEAKICAgICBkZWYgY21kX2VwcnQoc2VsZiwgYXJnKToKICAgICAgICAgYWYsIGlwLCBwb3J0ID0gYXJnLnNwbGl0KGFyZ1swXSlbMTotMV0KICAgICAgICAgcG9ydCA9IGludChwb3J0KQotICAgICAgICBzID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChpcCwgcG9ydCksIHRpbWVvdXQ9MikKKyAgICAgICAgcyA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaXAsIHBvcnQpLCB0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuZHRwID0gc2VsZi5kdHBfaGFuZGxlcihzLCBiYXNlY2xhc3M9c2VsZikKICAgICAgICAgc2VsZi5wdXNoKCcyMDAgYWN0aXZlIGRhdGEgY29ubmVjdGlvbiBlc3RhYmxpc2hlZCcpCiAKQEAgLTE1Miw3ICsxNTMsNyBAQAogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2KSBhcyBzb2NrOgogICAgICAgICAgICAgc29jay5iaW5kKChzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzBdLCAwKSkKICAgICAgICAgICAgIHNvY2subGlzdGVuKDUpCi0gICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoMTApCisgICAgICAgICAgICBzb2NrLnNldHRpbWVvdXQoVElNRU9VVCkKICAgICAgICAgICAgIHBvcnQgPSBzb2NrLmdldHNvY2tuYW1lKClbMV0KICAgICAgICAgICAgIHNlbGYucHVzaCgnMjI5IGVudGVyaW5nIGV4dGVuZGVkIHBhc3NpdmUgbW9kZSAofHx8JWR8KScgJXBvcnQpCiAgICAgICAgICAgICBjb25uLCBhZGRyID0gc29jay5hY2NlcHQoKQpAQCAtMzAwLDcgKzMwMSw4IEBACiAKIGlmIHNzbCBpcyBub3QgTm9uZToKIAotICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJrZXljZXJ0LnBlbSIpCisgICAgQ0VSVEZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgImtleWNlcnQzLnBlbSIpCisgICAgQ0FGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICJweWNhY2VydC5wZW0iKQogCiAgICAgY2xhc3MgU1NMQ29ubmVjdGlvbihhc3luY29yZS5kaXNwYXRjaGVyKToKICAgICAgICAgIiIiQW4gYXN5bmNvcmUuZGlzcGF0Y2hlciBzdWJjbGFzcyBzdXBwb3J0aW5nIFRMUy9TU0wuIiIiCkBAIC0zMjcsNyArMzI5LDcgQEAKICAgICAgICAgICAgICAgICBlbGlmIGVyci5hcmdzWzBdID09IHNzbC5TU0xfRVJST1JfRU9GOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQogICAgICAgICAgICAgICAgIHJhaXNlCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSA9PSBlcnJuby5FQ09OTkFCT1JURUQ6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICBlbHNlOgpAQCAtMzQxLDcgKzM0Myw3IEBACiAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gaW4gKHNzbC5TU0xfRVJST1JfV0FOVF9SRUFELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2wuU1NMX0VSUk9SX1dBTlRfV1JJVEUpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICMgQW55ICJzb2NrZXQgZXJyb3IiIGNvcnJlc3BvbmRzIHRvIGEgU1NMX0VSUk9SX1NZU0NBTEwgcmV0dXJuCiAgICAgICAgICAgICAgICAgIyBmcm9tIE9wZW5TU0wncyBTU0xfc2h1dGRvd24oKSwgY29ycmVzcG9uZGluZyB0byBhCiAgICAgICAgICAgICAgICAgIyBjbG9zZWQgc29ja2V0IGNvbmRpdGlvbi4gU2VlIGFsc286CkBAIC00NjAsNyArNDYyLDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlGVFBTZXJ2ZXIoKEhPU1QsIDApKQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTQ4OCw3ICs0OTAsNyBAQAogCiAgICAgZGVmIHRlc3RfYWxsX2Vycm9ycyhzZWxmKToKICAgICAgICAgZXhjZXB0aW9ucyA9IChmdHBsaWIuZXJyb3JfcmVwbHksIGZ0cGxpYi5lcnJvcl90ZW1wLCBmdHBsaWIuZXJyb3JfcGVybSwKLSAgICAgICAgICAgICAgICAgICAgICBmdHBsaWIuZXJyb3JfcHJvdG8sIGZ0cGxpYi5FcnJvciwgSU9FcnJvciwgRU9GRXJyb3IpCisgICAgICAgICAgICAgICAgICAgICAgZnRwbGliLmVycm9yX3Byb3RvLCBmdHBsaWIuRXJyb3IsIE9TRXJyb3IsIEVPRkVycm9yKQogICAgICAgICBmb3IgeCBpbiBleGNlcHRpb25zOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHJhaXNlIHgoJ2V4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gYWxsX2Vycm9ycyBzZXQnKQpAQCAtNjc4LDcgKzY4MCw3IEBACiAKICAgICBkZWYgdGVzdF9tYWtlcGFzdihzZWxmKToKICAgICAgICAgaG9zdCwgcG9ydCA9IHNlbGYuY2xpZW50Lm1ha2VwYXN2KCkKLSAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIDEwKQorICAgICAgICBjb25uID0gc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKChob3N0LCBwb3J0KSwgdGltZW91dD1USU1FT1VUKQogICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgIyBJUHY0IGlzIGluIHVzZSwganVzdCBtYWtlIHN1cmUgc2VuZF9lcHN2IGhhcyBub3QgYmVlbiB1c2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ3Bhc3YnKQpAQCAtNjkxLDEyICs2OTMsMTIgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKLSAgICAgICAgICAgIGV4Y2VwdCAoc29ja2V0LmVycm9yLCBFT0ZFcnJvcik6CisgICAgICAgICAgICBleGNlcHQgKE9TRXJyb3IsIEVPRkVycm9yKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHJldHVybiBUcnVlCiAKICAgICAgICAgIyBiYXNlIHRlc3QKLSAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgIHdpdGggZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpIGFzIHNlbGYuY2xpZW50OgogICAgICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQpAQCAtNzA0LDcgKzcwNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaXNfY2xpZW50X2Nvbm5lY3RlZCgpKQogCiAgICAgICAgICMgUVVJVCBzZW50IGluc2lkZSB0aGUgd2l0aCBibG9jawotICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD0yKSBhcyBzZWxmLmNsaWVudDoKKyAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9VElNRU9VVCkgYXMgc2VsZi5jbGllbnQ6CiAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5zZW5kY21kKCdub29wJykKICAgICAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQpAQCAtNzE0LDcgKzcxNiw3IEBACiAgICAgICAgICMgZm9yY2UgYSB3cm9uZyByZXNwb25zZSBjb2RlIHRvIGJlIHNlbnQgb24gUVVJVDogZXJyb3JfcGVybQogICAgICAgICAjIGlzIGV4cGVjdGVkIGFuZCB0aGUgY29ubmVjdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBjbG9zZWQKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgd2l0aCBmdHBsaWIuRlRQKHRpbWVvdXQ9MikgYXMgc2VsZi5jbGllbnQ6CisgICAgICAgICAgICB3aXRoIGZ0cGxpYi5GVFAodGltZW91dD1USU1FT1VUKSBhcyBzZWxmLmNsaWVudDoKICAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnQuc2VuZGNtZCgnbm9vcCcpCiAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5uZXh0X3Jlc3BvbnNlID0gJzU1MCBlcnJvciBvbiBxdWl0JwpAQCAtNzM2LDcgKzczOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZV9hZGRyZXNzPShIT1NULCBwb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jbGllbnQuc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQogICAgICAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNzQ3LDcgKzc0OSw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggc2VsZi5jbGllbnQudHJhbnNmZXJjbWQoJ2xpc3QnKSBhcyBzb2NrOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRzb2NrbmFtZSgpWzFdLCBwb3J0KQotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBlcnJuby5FQUREUklOVVNFOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoImNvdWxkbid0IGJpbmQgdG8gcG9ydCAlZCIgJSBwb3J0KQogICAgICAgICAgICAgcmFpc2UKQEAgLTc4NSw3ICs3ODcsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teUZUUFNlcnZlcigoSE9TVHY2LCAwKSwgYWY9c29ja2V0LkFGX0lORVQ2KQogICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCi0gICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUCh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTgwMiw3ICs4MDQsNyBAQAogCiAgICAgZGVmIHRlc3RfbWFrZXBhc3Yoc2VsZik6CiAgICAgICAgIGhvc3QsIHBvcnQgPSBzZWxmLmNsaWVudC5tYWtlcGFzdigpCi0gICAgICAgIGNvbm4gPSBzb2NrZXQuY3JlYXRlX2Nvbm5lY3Rpb24oKGhvc3QsIHBvcnQpLCAxMCkKKyAgICAgICAgY29ubiA9IHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCksIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgY29ubi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXJ2ZXIuaGFuZGxlcl9pbnN0YW5jZS5sYXN0X3JlY2VpdmVkX2NtZCwgJ2Vwc3YnKQogCkBAIC04MjksNyArODMxLDcgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2VydmVyID0gRHVtbXlUTFNfRlRQU2VydmVyKChIT1NULCAwKSkKICAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKHRpbWVvdXQ9MikKKyAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PVRJTUVPVVQpCiAgICAgICAgIHNlbGYuY2xpZW50LmNvbm5lY3Qoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCkKICAgICAgICAgIyBlbmFibGUgVExTCiAgICAgICAgIHNlbGYuY2xpZW50LmF1dGgoKQpAQCAtODQzLDcgKzg0NSw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnNlcnZlciA9IER1bW15VExTX0ZUUFNlcnZlcigoSE9TVCwgMCkpCiAgICAgICAgIHNlbGYuc2VydmVyLnN0YXJ0KCkKLSAgICAgICAgc2VsZi5jbGllbnQgPSBmdHBsaWIuRlRQX1RMUyh0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFModGltZW91dD1USU1FT1VUKQogICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC04ODcsNyArODg5LDcgQEAKIAogICAgIGRlZiB0ZXN0X2F1dGhfc3NsKHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLmNsaWVudC5zc2xfdmVyc2lvbiA9IHNzbC5QUk9UT0NPTF9TU0x2MworICAgICAgICAgICAgc2VsZi5jbGllbnQuc3NsX3ZlcnNpb24gPSBzc2wuUFJPVE9DT0xfU1NMdjIzCiAgICAgICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LmF1dGgpCiAgICAgICAgIGZpbmFsbHk6CkBAIC05MDMsNyArOTA1LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZnRwbGliLkZUUF9UTFMsIGNlcnRmaWxlPUNFUlRGSUxFLAogICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKIAotICAgICAgICBzZWxmLmNsaWVudCA9IGZ0cGxpYi5GVFBfVExTKGNvbnRleHQ9Y3R4LCB0aW1lb3V0PTIpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9VElNRU9VVCkKICAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0KQogICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2Uoc2VsZi5jbGllbnQuc29jaywgc3NsLlNTTFNvY2tldCkKICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCkBAIC05MjIsNiArOTI0LDM2IEBACiAgICAgICAgIHNlbGYuY2xpZW50LmNjYygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYuY2xpZW50LnNvY2sudW53cmFwKQogCisgICAgZGVmIHRlc3RfY2hlY2tfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDQUZJTEUpCisgICAgICAgIHNlbGYuY2xpZW50ID0gZnRwbGliLkZUUF9UTFMoY29udGV4dD1jdHgsIHRpbWVvdXQ9VElNRU9VVCkKKworICAgICAgICAjIDEyNy4wLjAuMSBkb2Vzbid0IG1hdGNoIFNBTgorICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5jbGllbnQuYXV0aCgpCisgICAgICAgICMgZXhjZXB0aW9uIHF1aXRzIGNvbm5lY3Rpb24KKworICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KHNlbGYuc2VydmVyLmhvc3QsIHNlbGYuc2VydmVyLnBvcnQpCisgICAgICAgIHNlbGYuY2xpZW50LnByb3RfcCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgibGlzdCIpIGFzIHNvY2s6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKworICAgICAgICBzZWxmLmNsaWVudC5jb25uZWN0KCJsb2NhbGhvc3QiLCBzZWxmLnNlcnZlci5wb3J0KQorICAgICAgICBzZWxmLmNsaWVudC5hdXRoKCkKKyAgICAgICAgc2VsZi5jbGllbnQucXVpdCgpCisKKyAgICAgICAgc2VsZi5jbGllbnQuY29ubmVjdCgibG9jYWxob3N0Iiwgc2VsZi5zZXJ2ZXIucG9ydCkKKyAgICAgICAgc2VsZi5jbGllbnQucHJvdF9wKCkKKyAgICAgICAgd2l0aCBzZWxmLmNsaWVudC50cmFuc2ZlcmNtZCgibGlzdCIpIGFzIHNvY2s6CisgICAgICAgICAgICBwYXNzCisKIAogY2xhc3MgVGVzdFRpbWVvdXRzKFRlc3RDYXNlKToKIApAQCAtMTAxNyw4ICsxMDQ5LDE5IEBACiAgICAgICAgIGZ0cC5jbG9zZSgpCiAKIAorY2xhc3MgVGVzdE5ldHJjRGVwcmVjYXRpb24oVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCgpLCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnZbJ0hPTUUnXSA9IG9zLmdldGN3ZCgpCisgICAgICAgICAgICBvcGVuKCcubmV0cmMnLCAndycpLmNsb3NlKCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIGZ0cGxpYi5OZXRyYygpCisKKworCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHMsCisgICAgdGVzdHMgPSBbVGVzdEZUUENsYXNzLCBUZXN0VGltZW91dHMsIFRlc3ROZXRyY0RlcHJlY2F0aW9uLAogICAgICAgICAgICAgIFRlc3RJUHY2RW52aXJvbm1lbnQsCiAgICAgICAgICAgICAgVGVzdFRMU19GVFBDbGFzc01peGluLCBUZXN0VExTX0ZUUENsYXNzXQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2Z1bmNhdHRycy5weSBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CmluZGV4IGM4ZWQ4MzAuLjUwOTRmN2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZnVuY2F0dHJzLnB5CkBAIC03LDYgKzcsMTEgQEAKICAgICBkZWYgaW5uZXJfZnVuY3Rpb24oKToKICAgICAgICAgY2xhc3MgTG9jYWxDbGFzczoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZ2xvYmFsIGlubmVyX2dsb2JhbF9mdW5jdGlvbgorICAgICAgICBkZWYgaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uKCk6CisgICAgICAgICAgICBkZWYgaW5uZXJfZnVuY3Rpb24yKCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgcmV0dXJuIGlubmVyX2Z1bmN0aW9uMgogICAgICAgICByZXR1cm4gTG9jYWxDbGFzcwogICAgIHJldHVybiBsYW1iZGE6IGlubmVyX2Z1bmN0aW9uCiAKQEAgLTExNiw2ICsxMjEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdnbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdsb2JhbF9mdW5jdGlvbigpKCkoKS5fX3F1YWxuYW1lX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dsb2JhbF9mdW5jdGlvbi48bG9jYWxzPi5pbm5lcl9mdW5jdGlvbi48bG9jYWxzPi5Mb2NhbENsYXNzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24uX19xdWFsbmFtZV9fLCAnaW5uZXJfZ2xvYmFsX2Z1bmN0aW9uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbm5lcl9nbG9iYWxfZnVuY3Rpb24oKS5fX3F1YWxuYW1lX18sICdpbm5lcl9nbG9iYWxfZnVuY3Rpb24uPGxvY2Fscz4uaW5uZXJfZnVuY3Rpb24yJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdjJwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYi5fX3F1YWxuYW1lX18sICdjJykKICAgICAgICAgc2VsZi5iLl9fcXVhbG5hbWVfXyA9ICdkJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X2Z1bmN0b29scy5weQppbmRleCBkMWNlMmE5Li5jMGQyNGQ4YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdW5jdG9vbHMucHkKQEAgLTEsNjYgKzEsNTIgQEAKLWltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBhYmMKIGltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IHN5cwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gd2Vha3JlZiBpbXBvcnQgcHJveHkKK2Zyb20gaXRlcnRvb2xzIGltcG9ydCBwZXJtdXRhdGlvbnMKIGltcG9ydCBwaWNrbGUKIGZyb20gcmFuZG9tIGltcG9ydCBjaG9pY2UKK2ltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKLUBzdGF0aWNtZXRob2QKLWRlZiBQeXRob25QYXJ0aWFsKGZ1bmMsICphcmdzLCAqKmtleXdvcmRzKToKLSAgICAnUHVyZSBQeXRob24gYXBwcm94aW1hdGlvbiBvZiBwYXJ0aWFsKCknCi0gICAgZGVmIG5ld2Z1bmMoKmZhcmdzLCAqKmZrZXl3b3Jkcyk6Ci0gICAgICAgIG5ld2tleXdvcmRzID0ga2V5d29yZHMuY29weSgpCi0gICAgICAgIG5ld2tleXdvcmRzLnVwZGF0ZShma2V5d29yZHMpCi0gICAgICAgIHJldHVybiBmdW5jKCooYXJncyArIGZhcmdzKSwgKipuZXdrZXl3b3JkcykKLSAgICBuZXdmdW5jLmZ1bmMgPSBmdW5jCi0gICAgbmV3ZnVuYy5hcmdzID0gYXJncwotICAgIG5ld2Z1bmMua2V5d29yZHMgPSBrZXl3b3JkcwotICAgIHJldHVybiBuZXdmdW5jCitpbXBvcnQgZnVuY3Rvb2xzCisKK3B5X2Z1bmN0b29scyA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZnVuY3Rvb2xzJywgYmxvY2tlZD1bJ19mdW5jdG9vbHMnXSkKK2NfZnVuY3Rvb2xzID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdmdW5jdG9vbHMnLCBmcmVzaD1bJ19mdW5jdG9vbHMnXSkKKworZGVjaW1hbCA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnZGVjaW1hbCcsIGZyZXNoPVsnX2RlY2ltYWwnXSkKKwogCiBkZWYgY2FwdHVyZSgqYXJncywgKiprdyk6CiAgICAgIiIiY2FwdHVyZSBhbGwgcG9zaXRpb25hbCBhbmQga2V5d29yZCBhcmd1bWVudHMiIiIKICAgICByZXR1cm4gYXJncywga3cKIAorCiBkZWYgc2lnbmF0dXJlKHBhcnQpOgogICAgICIiIiByZXR1cm4gdGhlIHNpZ25hdHVyZSBvZiBhIHBhcnRpYWwgb2JqZWN0ICIiIgogICAgIHJldHVybiAocGFydC5mdW5jLCBwYXJ0LmFyZ3MsIHBhcnQua2V5d29yZHMsIHBhcnQuX19kaWN0X18pCiAKLWNsYXNzIFRlc3RQYXJ0aWFsKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAotICAgIHRoZXR5cGUgPSBmdW5jdG9vbHMucGFydGlhbAorY2xhc3MgVGVzdFBhcnRpYWw6CiAKICAgICBkZWYgdGVzdF9iYXNpY19leGFtcGxlcyhzZWxmKToKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjYWxsYWJsZShwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsIDQsIGI9MzAsIGM9NDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoMSwgMiwgMywgNCksIGRpY3QoYT0xMCwgYj0zMCwgYz00MCkpKQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKG1hcCwgbGFtYmRhIHg6IHgqMTApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwobWFwLCBsYW1iZGEgeDogeCoxMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHAoWzEsMiwzLDRdKSksIFsxMCwgMjAsIDMwLCA0MF0pCiAKICAgICBkZWYgdGVzdF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDEsIDIsIGE9MTAsIGI9MjApCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgMSwgMiwgYT0xMCwgYj0yMCkKICAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBiZSByZWFkYWJsZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuZnVuYywgY2FwdHVyZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFyZ3MsICgxLCAyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtleXdvcmRzLCBkaWN0KGE9MTAsIGI9MjApKQotICAgICAgICAjIGF0dHJpYnV0ZXMgc2hvdWxkIG5vdCBiZSB3cml0YWJsZQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2Z1bmMnLCBtYXApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnYXJncycsICgxLCAyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdrZXl3b3JkcycsIGRpY3QoYT0xLCBiPTIpKQotCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoaGV4KQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWwgcC5fX2RpY3RfXwotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQogCiAgICAgZGVmIHRlc3RfYXJndW1lbnRfY2hlY2tpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50aGV0eXBlKSAgICAgIyBuZWVkIGF0IGxlYXN0IGEgZnVuYyBhcmcKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLnBhcnRpYWwpICAgICAjIG5lZWQgYXQgbGVhc3QgYSBmdW5jIGFyZwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBzZWxmLnRoZXR5cGUoMikoKQorICAgICAgICAgICAgc2VsZi5wYXJ0aWFsKDIpKCkKICAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKQEAgLTcxLDcgKzU3LDcgQEAKICAgICAgICAgZGVmIGZ1bmMoYT0xMCwgYj0yMCk6CiAgICAgICAgICAgICByZXR1cm4gYQogICAgICAgICBkID0geydhJzozfQotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGZ1bmMsIGE9NSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChmdW5jLCBhPTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgqKmQpLCAzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQsIHsnYSc6M30pCiAgICAgICAgIHAoYj03KQpAQCAtODAsMjAgKzY2LDIyIEBACiAgICAgZGVmIHRlc3RfYXJnX2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIHplcm8gYXJncyBpbiBlaXRoZXIgcGFydGlhbAogICAgICAgICAjIG9iamVjdCBvciB0aGUgY2FsbGVyCi0gICAgICAgIHAgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoKSwgKCgpLCB7fSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgxLDIpLCAoKDEsMiksIHt9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAxLCAyKQorICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIDEsIDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKDEsMiksIHt9KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKDMsNCksICgoMSwyLDMsNCksIHt9KSkKIAogICAgIGRlZiB0ZXN0X2t3X2NvbWJpbmF0aW9ucyhzZWxmKToKICAgICAgICAgIyBleGVyY2lzZSBzcGVjaWFsIGNvZGUgcGF0aHMgZm9yIG5vIGtleXdvcmQgYXJncyBpbgogICAgICAgICAjIGVpdGhlciB0aGUgcGFydGlhbCBvYmplY3Qgb3IgdGhlIGNhbGxlcgotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmtleXdvcmRzLCB7fSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCksICgoKSwge30pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYT0xKSwgKCgpLCB7J2EnOjF9KSkKLSAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPTEpCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoY2FwdHVyZSwgYT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAua2V5d29yZHMsIHsnYSc6MX0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgpLCAoKCksIHsnYSc6MX0pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoYj0yKSwgKCgpLCB7J2EnOjEsICdiJzoyfSkpCiAgICAgICAgICMga2V5d29yZCBhcmdzIGluIHRoZSBjYWxsIG92ZXJyaWRlIHRob3NlIGluIHRoZSBwYXJ0aWFsIG9iamVjdApAQCAtMTAyLDcgKzkwLDcgQEAKICAgICBkZWYgdGVzdF9wb3NpdGlvbmFsKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhcmUgY2FwdHVyZWQgY29ycmVjdGx5CiAgICAgICAgIGZvciBhcmdzIGluIFsoKSwgKDAsKSwgKDAsMSksICgwLDEsMiksICgwLDEsMiwzKV06Ci0gICAgICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsICphcmdzKQorICAgICAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqYXJncykKICAgICAgICAgICAgIGV4cGVjdGVkID0gYXJncyArICgneCcsKQogICAgICAgICAgICAgZ290LCBlbXB0eSA9IHAoJ3gnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0ge30pCkBAIC0xMTAsMTQgKzk4LDE0IEBACiAgICAgZGVmIHRlc3Rfa2V5d29yZChzZWxmKToKICAgICAgICAgIyBtYWtlIHN1cmUga2V5d29yZCBhcmd1bWVudHMgYXJlIGNhcHR1cmVkIGNvcnJlY3RseQogICAgICAgICBmb3IgYSBpbiBbJ2EnLCAwLCBOb25lLCAzLjVdOgotICAgICAgICAgICAgcCA9IHNlbGYudGhldHlwZShjYXB0dXJlLCBhPWEpCisgICAgICAgICAgICBwID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsIGE9YSkKICAgICAgICAgICAgIGV4cGVjdGVkID0geydhJzphLCd4JzpOb25lfQogICAgICAgICAgICAgZW1wdHksIGdvdCA9IHAoeD1Ob25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGV4cGVjdGVkID09IGdvdCBhbmQgZW1wdHkgPT0gKCkpCiAKICAgICBkZWYgdGVzdF9ub19zaWRlX2VmZmVjdHMoc2VsZik6CiAgICAgICAgICMgbWFrZSBzdXJlIHRoZXJlIGFyZSBubyBzaWRlIGVmZmVjdHMgdGhhdCBhZmZlY3Qgc3Vic2VxdWVudCBjYWxscwotICAgICAgICBwID0gc2VsZi50aGV0eXBlKGNhcHR1cmUsIDAsIGE9MSkKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAwLCBhPTEpCiAgICAgICAgIGFyZ3MxLCBrdzEgPSBwKDEsIGI9MikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFyZ3MxID09ICgwLDEpIGFuZCBrdzEgPT0geydhJzoxLCdiJzoyfSkKICAgICAgICAgYXJnczIsIGt3MiA9IHAoKQpAQCAtMTI2LDEzICsxMTQsMTMgQEAKICAgICBkZWYgdGVzdF9lcnJvcl9wcm9wYWdhdGlvbihzZWxmKToKICAgICAgICAgZGVmIGYoeCwgeSk6CiAgICAgICAgICAgICB4IC8geQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEsIDApKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIDEpLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYpLCAxLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgc2VsZi50aGV0eXBlKGYsIHk9MCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgMSksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiksIDEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLCBzZWxmLnBhcnRpYWwoZiwgeT0wKSwgMSkKIAogICAgIGRlZiB0ZXN0X3dlYWtyZWYoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoaW50LCBiYXNlPTE2KQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGludCwgYmFzZT0xNikKICAgICAgICAgcCA9IHByb3h5KGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5mdW5jLCBwLmZ1bmMpCiAgICAgICAgIGYgPSBOb25lCkBAIC0xNDAsNDIgKzEyOCw2NyBAQAogCiAgICAgZGVmIHRlc3Rfd2l0aF9ib3VuZF9hbmRfdW5ib3VuZF9tZXRob2RzKHNlbGYpOgogICAgICAgICBkYXRhID0gbGlzdChtYXAoc3RyLCByYW5nZSgxMCkpKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKHN0ci5qb2luLCAnJykKKyAgICAgICAgam9pbiA9IHNlbGYucGFydGlhbChzdHIuam9pbiwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihkYXRhKSwgJzAxMjM0NTY3ODknKQotICAgICAgICBqb2luID0gc2VsZi50aGV0eXBlKCcnLmpvaW4pCisgICAgICAgIGpvaW4gPSBzZWxmLnBhcnRpYWwoJycuam9pbikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGRhdGEpLCAnMDEyMzQ1Njc4OScpCiAKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0UGFydGlhbEMoVGVzdFBhcnRpYWwsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgcGFydGlhbCA9IGNfZnVuY3Rvb2xzLnBhcnRpYWwKKworICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZXNfdW53cml0YWJsZShzZWxmKToKKyAgICAgICAgIyBhdHRyaWJ1dGVzIHNob3VsZCBub3QgYmUgd3JpdGFibGUKKyAgICAgICAgcCA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAxLCAyLCBhPTEwLCBiPTIwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgc2V0YXR0ciwgcCwgJ2Z1bmMnLCBtYXApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBzZXRhdHRyLCBwLCAnYXJncycsICgxLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIHAsICdrZXl3b3JkcycsIGRpY3QoYT0xLCBiPTIpKQorCisgICAgICAgIHAgPSBzZWxmLnBhcnRpYWwoaGV4KQorICAgICAgICB0cnk6CisgICAgICAgICAgICBkZWwgcC5fX2RpY3RfXworICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCdwYXJ0aWFsIG9iamVjdCBhbGxvd2VkIF9fZGljdF9fIHRvIGJlIGRlbGV0ZWQnKQorCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKICAgICAgICAgYXJncyA9IChvYmplY3QoKSwgb2JqZWN0KCkpCiAgICAgICAgIGFyZ3NfcmVwciA9ICcsICcuam9pbihyZXByKGEpIGZvciBhIGluIGFyZ3MpCiAgICAgICAgIGt3YXJncyA9IHsnYSc6IG9iamVjdCgpLCAnYic6IG9iamVjdCgpfQotICAgICAgICBrd2FyZ3NfcmVwciA9ICcsICcuam9pbigiJXM9JXIiICUgKGssIHYpIGZvciBrLCB2IGluIGt3YXJncy5pdGVtcygpKQotICAgICAgICBpZiBzZWxmLnRoZXR5cGUgaXMgZnVuY3Rvb2xzLnBhcnRpYWw6CisgICAgICAgIGt3YXJnc19yZXBycyA9IFsnYT17YSFyfSwgYj17YiFyfScuZm9ybWF0X21hcChrd2FyZ3MpLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2I9e2Ihcn0sIGE9e2Ehcn0nLmZvcm1hdF9tYXAoa3dhcmdzKV0KKyAgICAgICAgaWYgc2VsZi5wYXJ0aWFsIGlzIGNfZnVuY3Rvb2xzLnBhcnRpYWw6CiAgICAgICAgICAgICBuYW1lID0gJ2Z1bmN0b29scy5wYXJ0aWFsJwogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbmFtZSA9IHNlbGYudGhldHlwZS5fX25hbWVfXworICAgICAgICAgICAgbmFtZSA9IHNlbGYucGFydGlhbC5fX25hbWVfXwogCi0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7fSh7IXJ9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUpLAogICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHIoZikpCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncykKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChjYXB0dXJlLCAqYXJncykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgne30oeyFyfSwge30pJy5mb3JtYXQobmFtZSwgY2FwdHVyZSwgYXJnc19yZXByKSwKICAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQogCi0gICAgICAgIGYgPSBzZWxmLnRoZXR5cGUoY2FwdHVyZSwgKiprd2FyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUsIGt3YXJnc19yZXByKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlcHIoZiksCisgICAgICAgICAgICAgICAgICAgICAgWyd7fSh7IXJ9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBrd2FyZ3NfcmVwcikKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIGt3YXJnc19yZXByIGluIGt3YXJnc19yZXByc10pCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShjYXB0dXJlLCAqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3t9KHshcn0sIHt9LCB7fSknLmZvcm1hdChuYW1lLCBjYXB0dXJlLCBhcmdzX3JlcHIsIGt3YXJnc19yZXByKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICByZXByKGYpKQorICAgICAgICBmID0gc2VsZi5wYXJ0aWFsKGNhcHR1cmUsICphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyZXByKGYpLAorICAgICAgICAgICAgICAgICAgICAgIFsne30oeyFyfSwge30sIHt9KScuZm9ybWF0KG5hbWUsIGNhcHR1cmUsIGFyZ3NfcmVwciwga3dhcmdzX3JlcHIpCisgICAgICAgICAgICAgICAgICAgICAgIGZvciBrd2FyZ3NfcmVwciBpbiBrd2FyZ3NfcmVwcnNdKQogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgotICAgICAgICBmID0gc2VsZi50aGV0eXBlKHNpZ25hdHVyZSwgJ2FzZGYnLCBiYXI9VHJ1ZSkKKyAgICAgICAgZiA9IHNlbGYucGFydGlhbChzaWduYXR1cmUsICdhc2RmJywgYmFyPVRydWUpCiAgICAgICAgIGYuYWRkX3NvbWV0aGluZ190b19fZGljdF9fID0gVHJ1ZQotICAgICAgICBmX2NvcHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGYpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZl9jb3B5ID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhmLCBwcm90bykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ25hdHVyZShmKSwgc2lnbmF0dXJlKGZfY29weSkpCiAKICAgICAjIElzc3VlIDYwODM6IFJlZmVyZW5jZSBjb3VudGluZyBidWcKICAgICBkZWYgdGVzdF9zZXRzdGF0ZV9yZWZjb3VudChzZWxmKToKQEAgLTE5MSwzMCArMjA0LDE0MCBAQAogICAgICAgICAgICAgICAgICAgICByZXR1cm4ge30KICAgICAgICAgICAgICAgICByYWlzZSBJbmRleEVycm9yCiAKLSAgICAgICAgZiA9IHNlbGYudGhldHlwZShvYmplY3QpCisgICAgICAgIGYgPSBzZWxmLnBhcnRpYWwob2JqZWN0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICJuZXcgc3R5bGUgZ2V0YXJncyBmb3JtYXQgYnV0IGFyZ3VtZW50IGlzIG5vdCBhIHR1cGxlIiwKICAgICAgICAgICAgICAgICBmLl9fc2V0c3RhdGVfXywgQmFkU2VxdWVuY2UoKSkKIAotY2xhc3MgUGFydGlhbFN1YmNsYXNzKGZ1bmN0b29scy5wYXJ0aWFsKToKLSAgICBwYXNzCiAKLWNsYXNzIFRlc3RQYXJ0aWFsU3ViY2xhc3MoVGVzdFBhcnRpYWwpOgorY2xhc3MgVGVzdFBhcnRpYWxQeShUZXN0UGFydGlhbCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHBhcnRpYWwgPSBzdGF0aWNtZXRob2QocHlfZnVuY3Rvb2xzLnBhcnRpYWwpCiAKLSAgICB0aGV0eXBlID0gUGFydGlhbFN1YmNsYXNzCiAKLWNsYXNzIFRlc3RQeXRob25QYXJ0aWFsKFRlc3RQYXJ0aWFsKToKK2lmIGNfZnVuY3Rvb2xzOgorICAgIGNsYXNzIFBhcnRpYWxTdWJjbGFzcyhjX2Z1bmN0b29scy5wYXJ0aWFsKToKKyAgICAgICAgcGFzcwogCi0gICAgdGhldHlwZSA9IFB5dGhvblBhcnRpYWwKIAotICAgICMgdGhlIHB5dGhvbiB2ZXJzaW9uIGhhc24ndCBhIG5pY2UgcmVwcgotICAgIHRlc3RfcmVwciA9IE5vbmUKK0B1bml0dGVzdC5za2lwVW5sZXNzKGNfZnVuY3Rvb2xzLCAncmVxdWlyZXMgdGhlIEMgX2Z1bmN0b29scyBtb2R1bGUnKQorY2xhc3MgVGVzdFBhcnRpYWxDU3ViY2xhc3MoVGVzdFBhcnRpYWxDKToKKyAgICBpZiBjX2Z1bmN0b29sczoKKyAgICAgICAgcGFydGlhbCA9IFBhcnRpYWxTdWJjbGFzcwogCi0gICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaXNuJ3QgcGlja2xhYmxlCi0gICAgdGVzdF9waWNrbGUgPSB0ZXN0X3NldHN0YXRlX3JlZmNvdW50ID0gTm9uZQogCi0gICAgIyB0aGUgcHl0aG9uIHZlcnNpb24gaXNuJ3QgYSB0eXBlCi0gICAgdGVzdF9hdHRyaWJ1dGVzID0gTm9uZQorY2xhc3MgVGVzdFBhcnRpYWxNZXRob2QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgY2xhc3MgQShvYmplY3QpOgorICAgICAgICBub3RoaW5nID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2FwdHVyZSkKKyAgICAgICAgcG9zaXRpb25hbCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNhcHR1cmUsIDEpCisgICAgICAgIGtleXdvcmRzID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2FwdHVyZSwgYT0yKQorICAgICAgICBib3RoID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoY2FwdHVyZSwgMywgYj00KQorCisgICAgICAgIG5lc3RlZCA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKHBvc2l0aW9uYWwsIDUpCisKKyAgICAgICAgb3Zlcl9wYXJ0aWFsID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoZnVuY3Rvb2xzLnBhcnRpYWwoY2FwdHVyZSwgYz02KSwgNykKKworICAgICAgICBzdGF0aWMgPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChzdGF0aWNtZXRob2QoY2FwdHVyZSksIDgpCisgICAgICAgIGNscyA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGNsYXNzbWV0aG9kKGNhcHR1cmUpLCBkPTkpCisKKyAgICBhID0gQSgpCisKKyAgICBkZWYgdGVzdF9hcmdfY29tYmluYXRpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ub3RoaW5nKCksICgoc2VsZi5hLCksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubm90aGluZyg1KSwgKChzZWxmLmEsIDUpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5vdGhpbmcoYz02KSwgKChzZWxmLmEsKSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ub3RoaW5nKDUsIGM9NiksICgoc2VsZi5hLCA1KSwgeydjJzogNn0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoKSwgKChzZWxmLmEsIDEpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLnBvc2l0aW9uYWwoNSksICgoc2VsZi5hLCAxLCA1KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5wb3NpdGlvbmFsKGM9NiksICgoc2VsZi5hLCAxKSwgeydjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5wb3NpdGlvbmFsKDUsIGM9NiksICgoc2VsZi5hLCAxLCA1KSwgeydjJzogNn0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLmtleXdvcmRzKCksICgoc2VsZi5hLCksIHsnYSc6IDJ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoNSksICgoc2VsZi5hLCA1KSwgeydhJzogMn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3JkcyhjPTYpLCAoKHNlbGYuYSwpLCB7J2EnOiAyLCAnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEua2V5d29yZHMoNSwgYz02KSwgKChzZWxmLmEsIDUpLCB7J2EnOiAyLCAnYyc6IDZ9KSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ib3RoKCksICgoc2VsZi5hLCAzKSwgeydiJzogNH0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ib3RoKDUpLCAoKHNlbGYuYSwgMywgNSksIHsnYic6IDR9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEuYm90aChjPTYpLCAoKHNlbGYuYSwgMyksIHsnYic6IDQsICdjJzogNn0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5ib3RoKDUsIGM9NiksICgoc2VsZi5hLCAzLCA1KSwgeydiJzogNCwgJ2MnOiA2fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEuYm90aChzZWxmLmEsIDUsIGM9NiksICgoc2VsZi5hLCAzLCA1KSwgeydiJzogNCwgJ2MnOiA2fSkpCisKKyAgICBkZWYgdGVzdF9uZXN0ZWQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm5lc3RlZCgpLCAoKHNlbGYuYSwgMSwgNSksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubmVzdGVkKDYpLCAoKHNlbGYuYSwgMSwgNSwgNiksIHt9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEubmVzdGVkKGQ9NyksICgoc2VsZi5hLCAxLCA1KSwgeydkJzogN30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5uZXN0ZWQoNiwgZD03KSwgKChzZWxmLmEsIDEsIDUsIDYpLCB7J2QnOiA3fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLkEubmVzdGVkKHNlbGYuYSwgNiwgZD03KSwgKChzZWxmLmEsIDEsIDUsIDYpLCB7J2QnOiA3fSkpCisKKyAgICBkZWYgdGVzdF9vdmVyX3BhcnRpYWwoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm92ZXJfcGFydGlhbCgpLCAoKHNlbGYuYSwgNyksIHsnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKDUpLCAoKHNlbGYuYSwgNywgNSksIHsnYyc6IDZ9KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmEub3Zlcl9wYXJ0aWFsKGQ9OCksICgoc2VsZi5hLCA3KSwgeydjJzogNiwgJ2QnOiA4fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5hLm92ZXJfcGFydGlhbCg1LCBkPTgpLCAoKHNlbGYuYSwgNywgNSksIHsnYyc6IDYsICdkJzogOH0pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5BLm92ZXJfcGFydGlhbChzZWxmLmEsIDUsIGQ9OCksICgoc2VsZi5hLCA3LCA1KSwgeydjJzogNiwgJ2QnOiA4fSkpCisKKyAgICBkZWYgdGVzdF9ib3VuZF9tZXRob2RfaW50cm9zcGVjdGlvbihzZWxmKToKKyAgICAgICAgb2JqID0gc2VsZi5hCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLmJvdGguX19zZWxmX18sIG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhvYmoubmVzdGVkLl9fc2VsZl9fLCBvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0SXMob2JqLm92ZXJfcGFydGlhbC5fX3NlbGZfXywgb2JqKQorICAgICAgICBzZWxmLmFzc2VydElzKG9iai5jbHMuX19zZWxmX18sIHNlbGYuQSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLkEuY2xzLl9fc2VsZl9fLCBzZWxmLkEpCisKKyAgICBkZWYgdGVzdF91bmJvdW5kX21ldGhvZF9yZXRyaWV2YWwoc2VsZik6CisgICAgICAgIG9iaiA9IHNlbGYuQQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIob2JqLmJvdGgsICJfX3NlbGZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIob2JqLm5lc3RlZCwgIl9fc2VsZl9fIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihvYmoub3Zlcl9wYXJ0aWFsLCAiX19zZWxmX18iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG9iai5zdGF0aWMsICJfX3NlbGZfXyIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoc2VsZi5hLnN0YXRpYywgIl9fc2VsZl9fIikpCisKKyAgICBkZWYgdGVzdF9kZXNjcmlwdG9ycyhzZWxmKToKKyAgICAgICAgZm9yIG9iaiBpbiBbc2VsZi5BLCBzZWxmLmFdOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob2JqPW9iaik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RhdGljKCksICgoOCwpLCB7fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RhdGljKDUpLCAoKDgsIDUpLCB7fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RhdGljKGQ9OCksICgoOCwpLCB7J2QnOiA4fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouc3RhdGljKDUsIGQ9OCksICgoOCwgNSksIHsnZCc6IDh9KSkKKworICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqLmNscygpLCAoKHNlbGYuQSwpLCB7J2QnOiA5fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouY2xzKDUpLCAoKHNlbGYuQSwgNSksIHsnZCc6IDl9KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9iai5jbHMoYz04KSwgKChzZWxmLkEsKSwgeydjJzogOCwgJ2QnOiA5fSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouY2xzKDUsIGM9OCksICgoc2VsZi5BLCA1KSwgeydjJzogOCwgJ2QnOiA5fSkpCisKKyAgICBkZWYgdGVzdF9vdmVycmlkaW5nX2tleXdvcmRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuYS5rZXl3b3JkcyhhPTMpLCAoKHNlbGYuYSwpLCB7J2EnOiAzfSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5BLmtleXdvcmRzKHNlbGYuYSwgYT0zKSwgKChzZWxmLmEsKSwgeydhJzogM30pKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9hcmdzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjbGFzcyBCKG9iamVjdCk6CisgICAgICAgICAgICAgICAgbWV0aG9kID0gZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QoTm9uZSwgMSkKKworICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih2YXJzKHNlbGYuQSlbJ2JvdGgnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2Z1bmN0b29scy5wYXJ0aWFsbWV0aG9kKHt9LCAzLCBiPTQpJy5mb3JtYXQoY2FwdHVyZSkpCisKKyAgICBkZWYgdGVzdF9hYnN0cmFjdChzZWxmKToKKyAgICAgICAgY2xhc3MgQWJzdHJhY3QoYWJjLkFCQ01ldGEpOgorCisgICAgICAgICAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgICAgICAgICBkZWYgYWRkKHNlbGYsIHgsIHkpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgYWRkNSA9IGZ1bmN0b29scy5wYXJ0aWFsbWV0aG9kKGFkZCwgNSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUoQWJzdHJhY3QuYWRkLl9faXNhYnN0cmFjdG1ldGhvZF9fKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoQWJzdHJhY3QuYWRkNS5fX2lzYWJzdHJhY3RtZXRob2RfXykKKworICAgICAgICBmb3IgZnVuYyBpbiBbc2VsZi5BLnN0YXRpYywgc2VsZi5BLmNscywgc2VsZi5BLm92ZXJfcGFydGlhbCwgc2VsZi5BLm5lc3RlZCwgc2VsZi5BLmJvdGhdOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShnZXRhdHRyKGZ1bmMsICdfX2lzYWJzdHJhY3RtZXRob2RfXycsIEZhbHNlKSkKKwogCiBjbGFzcyBUZXN0VXBkYXRlV3JhcHBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTIyMywxOSArMzQ2LDI2IEBACiAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZD1mdW5jdG9vbHMuV1JBUFBFUl9VUERBVEVTKToKICAgICAgICAgIyBDaGVjayBhdHRyaWJ1dGVzIHdlcmUgYXNzaWduZWQKICAgICAgICAgZm9yIG5hbWUgaW4gYXNzaWduZWQ6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cih3cmFwcGVyLCBuYW1lKSBpcyBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHdyYXBwZXIsIG5hbWUpLCBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpKQogICAgICAgICAjIENoZWNrIGF0dHJpYnV0ZXMgd2VyZSB1cGRhdGVkCiAgICAgICAgIGZvciBuYW1lIGluIHVwZGF0ZWQ6CiAgICAgICAgICAgICB3cmFwcGVyX2F0dHIgPSBnZXRhdHRyKHdyYXBwZXIsIG5hbWUpCiAgICAgICAgICAgICB3cmFwcGVkX2F0dHIgPSBnZXRhdHRyKHdyYXBwZWQsIG5hbWUpCiAgICAgICAgICAgICBmb3Iga2V5IGluIHdyYXBwZWRfYXR0cjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUod3JhcHBlZF9hdHRyW2tleV0gaXMgd3JhcHBlcl9hdHRyW2tleV0pCisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSAiX19kaWN0X18iIGFuZCBrZXkgPT0gIl9fd3JhcHBlZF9fIjoKKyAgICAgICAgICAgICAgICAgICAgIyBfX3dyYXBwZWRfXyBpcyBvdmVyd3JpdHRlbiBieSB0aGUgdXBkYXRlIGNvZGUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZWRfYXR0cltrZXldLCB3cmFwcGVyX2F0dHJba2V5XSkKKyAgICAgICAgIyBDaGVjayBfX3dyYXBwZWRfXworICAgICAgICBzZWxmLmFzc2VydElzKHdyYXBwZXIuX193cmFwcGVkX18sIHdyYXBwZWQpCisKIAogICAgIGRlZiBfZGVmYXVsdF91cGRhdGUoc2VsZik6CiAgICAgICAgIGRlZiBmKGE6J1RoaXMgaXMgYSBuZXcgYW5ub3RhdGlvbicpOgogICAgICAgICAgICAgIiIiVGhpcyBpcyBhIHRlc3QiIiIKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZi5hdHRyID0gJ1RoaXMgaXMgYWxzbyBhIHRlc3QnCisgICAgICAgIGYuX193cmFwcGVkX18gPSAiVGhpcyBpcyBhIGJhbGQgZmFjZWQgbGllIgogICAgICAgICBkZWYgd3JhcHBlcihiOidUaGlzIGlzIHRoZSBwcmlvciBhbm5vdGF0aW9uJyk6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZ1bmN0b29scy51cGRhdGVfd3JhcHBlcih3cmFwcGVyLCBmKQpAQCAtMzIyLDYgKzQ1Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cmFwcGVyLl9fZG9jX18uc3RhcnRzd2l0aCgnbWF4KCcpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19hbm5vdGF0aW9uc19fLCB7fSkKIAorCiBjbGFzcyBUZXN0V3JhcHMoVGVzdFVwZGF0ZVdyYXBwZXIpOgogCiAgICAgZGVmIF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKQEAgLTMyOSwxNCArNDYwLDE1IEBACiAgICAgICAgICAgICAiIiJUaGlzIGlzIGEgdGVzdCIiIgogICAgICAgICAgICAgcGFzcwogICAgICAgICBmLmF0dHIgPSAnVGhpcyBpcyBhbHNvIGEgdGVzdCcKKyAgICAgICAgZi5fX3dyYXBwZWRfXyA9ICJUaGlzIGlzIHN0aWxsIGEgYmFsZCBmYWNlZCBsaWUiCiAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZikKICAgICAgICAgZGVmIHdyYXBwZXIoKToKICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYpCiAgICAgICAgIHJldHVybiB3cmFwcGVyLCBmCiAKICAgICBkZWYgdGVzdF9kZWZhdWx0X3VwZGF0ZShzZWxmKToKICAgICAgICAgd3JhcHBlciwgZiA9IHNlbGYuX2RlZmF1bHRfdXBkYXRlKCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwcGVyKHdyYXBwZXIsIGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5fX25hbWVfXywgJ2YnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuX19xdWFsbmFtZV9fLCBmLl9fcXVhbG5hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVyLmF0dHIsICdUaGlzIGlzIGFsc28gYSB0ZXN0JykKQEAgLTM4Miw2ICs1MTQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZXIuYXR0ciwgJ1RoaXMgaXMgYSBkaWZmZXJlbnQgdGVzdCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlci5kaWN0X2F0dHIsIGYuZGljdF9hdHRyKQogCisKIGNsYXNzIFRlc3RSZWR1Y2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGZ1bmMgPSBmdW5jdG9vbHMucmVkdWNlCiAKQEAgLTQ2MiwyNCArNTk1LDI5IEBACiAgICAgICAgIGQgPSB7Im9uZSI6IDEsICJ0d28iOiAyLCAidGhyZWUiOiAzfQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhhZGQsIGQpLCAiIi5qb2luKGQua2V5cygpKSkKIAotY2xhc3MgVGVzdENtcFRvS2V5KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgVGVzdENtcFRvS2V5OgogCiAgICAgZGVmIHRlc3RfY21wX3RvX2tleShzZWxmKToKICAgICAgICAgZGVmIGNtcDEoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5KDMpLCBrZXkoMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihrZXkoMyksIGtleSgxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoa2V5KDMpLCBrZXkoMykpCisKICAgICAgICAgZGVmIGNtcDIoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4gaW50KHgpIC0gaW50KHkpCi0gICAgICAgIGtleSA9IGZ1bmN0b29scy5jbXBfdG9fa2V5KGNtcDIpCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSg0LjApLCBrZXkoJzQnKSkKICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGtleSgyKSwga2V5KCczNScpKQorICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChrZXkoMiksIGtleSgnMzUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkoMiksIGtleSgnMzUnKSkKIAogICAgIGRlZiB0ZXN0X2NtcF90b19rZXlfYXJndW1lbnRzKHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShteWNtcD1jbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkobXljbXA9Y21wMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkob2JqPTMpLCBrZXkob2JqPTMpKQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoa2V5KG9iaj0zKSwga2V5KG9iaj0xKSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcikpOgpAQCAtNDg3LDEwICs2MjUsMTAgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvcikpOgogICAgICAgICAgICAgMSA8IGtleSgzKSAgICAjIGxocyBpcyBub3QgYSBLIG9iamVjdAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleSgpICAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCisgICAgICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkoKSAgICAgICAgICAgICAjIHRvbyBmZXcgYXJncwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxLCBOb25lKSAgICMgdG9vIG1hbnkgYXJncwotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShjbXAxKQorICAgICAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDEsIE5vbmUpICAgIyB0b28gbWFueSBhcmdzCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShjbXAxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CiAgICAgICAgICAgICBrZXkoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIGZldyBhcmdzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKQEAgLTQ5OSw3ICs2MzcsNyBAQAogICAgIGRlZiB0ZXN0X2JhZF9jbXAoc2VsZik6CiAgICAgICAgIGRlZiBjbXAxKHgsIHkpOgogICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkoY21wMSkKKyAgICAgICAga2V5ID0gc2VsZi5jbXBfdG9fa2V5KGNtcDEpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IpOgogICAgICAgICAgICAga2V5KDMpID4ga2V5KDEpCiAKQEAgLTUxNCwxMyArNjUyLDEzIEBACiAgICAgZGVmIHRlc3Rfb2JqX2ZpZWxkKHNlbGYpOgogICAgICAgICBkZWYgY21wMSh4LCB5KToKICAgICAgICAgICAgIHJldHVybiAoeCA+IHkpIC0gKHggPCB5KQotICAgICAgICBrZXkgPSBmdW5jdG9vbHMuY21wX3RvX2tleShteWNtcD1jbXAxKQorICAgICAgICBrZXkgPSBzZWxmLmNtcF90b19rZXkobXljbXA9Y21wMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkoNTApLm9iaiwgNTApCiAKICAgICBkZWYgdGVzdF9zb3J0X2ludChzZWxmKToKICAgICAgICAgZGVmIG15Y21wKHgsIHkpOgogICAgICAgICAgICAgcmV0dXJuIHkgLSB4Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHJhbmdlKDUpLCBrZXk9ZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocmFuZ2UoNSksIGtleT1zZWxmLmNtcF90b19rZXkobXljbXApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbNCwgMywgMiwgMSwgMF0pCiAKICAgICBkZWYgdGVzdF9zb3J0X2ludF9zdHIoc2VsZik6CkBAIC01MjgsMTggKzY2NiwyOSBAQAogICAgICAgICAgICAgeCwgeSA9IGludCh4KSwgaW50KHkpCiAgICAgICAgICAgICByZXR1cm4gKHggPiB5KSAtICh4IDwgeSkKICAgICAgICAgdmFsdWVzID0gWzUsICczJywgNywgMiwgJzAnLCAnMScsIDQsICcxMCcsIDFdCi0gICAgICAgIHZhbHVlcyA9IHNvcnRlZCh2YWx1ZXMsIGtleT1mdW5jdG9vbHMuY21wX3RvX2tleShteWNtcCkpCisgICAgICAgIHZhbHVlcyA9IHNvcnRlZCh2YWx1ZXMsIGtleT1zZWxmLmNtcF90b19rZXkobXljbXApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtpbnQodmFsdWUpIGZvciB2YWx1ZSBpbiB2YWx1ZXNdLAogICAgICAgICAgICAgICAgICAgICAgICAgIFswLCAxLCAxLCAyLCAzLCA0LCA1LCA3LCAxMF0pCiAKICAgICBkZWYgdGVzdF9oYXNoKHNlbGYpOgogICAgICAgICBkZWYgbXljbXAoeCwgeSk6CiAgICAgICAgICAgICByZXR1cm4geSAtIHgKLSAgICAgICAga2V5ID0gZnVuY3Rvb2xzLmNtcF90b19rZXkobXljbXApCisgICAgICAgIGtleSA9IHNlbGYuY21wX3RvX2tleShteWNtcCkKICAgICAgICAgayA9IGtleSgxMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBrKQogICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoaywgY29sbGVjdGlvbnMuSGFzaGFibGUpCiAKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19mdW5jdG9vbHMsICdyZXF1aXJlcyB0aGUgQyBfZnVuY3Rvb2xzIG1vZHVsZScpCitjbGFzcyBUZXN0Q21wVG9LZXlDKFRlc3RDbXBUb0tleSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGlmIGNfZnVuY3Rvb2xzOgorICAgICAgICBjbXBfdG9fa2V5ID0gY19mdW5jdG9vbHMuY21wX3RvX2tleQorCisKK2NsYXNzIFRlc3RDbXBUb0tleVB5KFRlc3RDbXBUb0tleSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNtcF90b19rZXkgPSBzdGF0aWNtZXRob2QocHlfZnVuY3Rvb2xzLmNtcF90b19rZXkpCisKKwogY2xhc3MgVGVzdFRvdGFsT3JkZXJpbmcodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbHQoc2VsZik6CkBAIC01NTcsNiArNzA2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDEpID4gQSgyKSkKIAogICAgIGRlZiB0ZXN0X3RvdGFsX29yZGVyaW5nX2xlKHNlbGYpOgogICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCkBAIC01NzMsNiArNzIzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgxKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPD0gQSgyKSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEEoMikgPj0gQSgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShBKDEpID49IEEoMikpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19ndChzZWxmKToKICAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwpAQCAtNTg5LDYgKzc0MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgyKSA8IEEoMSkpCiAKICAgICBkZWYgdGVzdF90b3RhbF9vcmRlcmluZ19nZShzZWxmKToKICAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwpAQCAtNjA1LDYgKzc1Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpIDw9IEEoMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShBKDIpID49IEEoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoQSgyKSA8PSBBKDEpKQogCiAgICAgZGVmIHRlc3RfdG90YWxfb3JkZXJpbmdfbm9fb3ZlcndyaXRlKHNlbGYpOgogICAgICAgICAjIG5ldyBtZXRob2RzIHNob3VsZCBub3Qgb3ZlcndyaXRlIGV4aXN0aW5nCkBAIC02MjQsMjcgKzc3NywxMTggQEAKICAgICAgICAgICAgIGNsYXNzIEE6CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHRlc3RfYnVnXzEwMDQyKHNlbGYpOgorICAgIGRlZiB0ZXN0X3R5cGVfZXJyb3Jfd2hlbl9ub3RfaW1wbGVtZW50ZWQoc2VsZik6CisgICAgICAgICMgYnVnIDEwMDQyOyBlbnN1cmUgc3RhY2sgb3ZlcmZsb3cgZG9lcyBub3Qgb2NjdXIKKyAgICAgICAgIyB3aGVuIGRlY29yYXRlZCB0eXBlcyByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZwotICAgICAgICBjbGFzcyBUZXN0VE86CisgICAgICAgIGNsYXNzIEltcGxlbWVudHNMZXNzVGhhbjoKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CiAgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCiAgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUZXN0VE8pOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbik6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBUZXN0VE8pOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNMZXNzVGhhbik6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlIDwgb3RoZXIudmFsdWUKLSAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgVGVzdFRPKDgpIDw9ICgpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgQGZ1bmN0b29scy50b3RhbF9vcmRlcmluZworICAgICAgICBjbGFzcyBJbXBsZW1lbnRzR3JlYXRlclRoYW46CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPT0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgICAgIGRlZiBfX2d0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uob3RoZXIsIEltcGxlbWVudHNHcmVhdGVyVGhhbik6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID4gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG86CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19sZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPD0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG86CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlID09IG90aGVyLnZhbHVlCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICBkZWYgX19nZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUgPj0gb3RoZXIudmFsdWUKKyAgICAgICAgICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKworICAgICAgICBAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCisgICAgICAgIGNsYXNzIENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG90aGVyLCBDb21wYXJhdG9yTm90SW1wbGVtZW50ZWQpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZSA9PSBvdGhlci52YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxUIDwgMSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuKC0xKSA8IDEKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTFQgPCBMRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0xlc3NUaGFuKDApIDwgSW1wbGVtZW50c0xlc3NUaGFuRXF1YWxUbygwKQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMVCA8IEdUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW4oMSkgPCBJbXBsZW1lbnRzR3JlYXRlclRoYW4oMSkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiTEUgPD0gTFQiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oMikgPD0gSW1wbGVtZW50c0xlc3NUaGFuKDIpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkxFIDw9IEdFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzTGVzc1RoYW5FcXVhbFRvKDMpIDw9IEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oMykKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR1QgPiBHRSIpLCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDQpID4gSW1wbGVtZW50c0dyZWF0ZXJUaGFuRXF1YWxUbyg0KQorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJHVCA+IExUIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW4oNSkgPiBJbXBsZW1lbnRzTGVzc1RoYW4oNSkKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR0UgPj0gR1QiKSwgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIEltcGxlbWVudHNHcmVhdGVyVGhhbkVxdWFsVG8oNikgPj0gSW1wbGVtZW50c0dyZWF0ZXJUaGFuKDYpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoIkdFID49IExFIiksIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBJbXBsZW1lbnRzR3JlYXRlclRoYW5FcXVhbFRvKDcpID49IEltcGxlbWVudHNMZXNzVGhhbkVxdWFsVG8oNykKKworICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgiR0Ugd2hlbiBlcXVhbCIpOgorICAgICAgICAgICAgYSA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg4KQorICAgICAgICAgICAgYiA9IENvbXBhcmF0b3JOb3RJbXBsZW1lbnRlZCg4KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLCBiKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGEgPj0gYgorCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCJMRSB3aGVuIGVxdWFsIik6CisgICAgICAgICAgICBhID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDkpCisgICAgICAgICAgICBiID0gQ29tcGFyYXRvck5vdEltcGxlbWVudGVkKDkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgYSA8PSBiCiAKIGNsYXNzIFRlc3RMUlUodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbHJ1KHNlbGYpOgogICAgICAgICBkZWYgb3JpZyh4LCB5KToKLSAgICAgICAgICAgIHJldHVybiAzKngreQorICAgICAgICAgICAgcmV0dXJuIDMgKiB4ICsgeQogICAgICAgICBmID0gZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPTIwKShvcmlnKQogICAgICAgICBoaXRzLCBtaXNzZXMsIG1heHNpemUsIGN1cnJzaXplID0gZi5jYWNoZV9pbmZvKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXhzaXplLCAyMCkKQEAgLTc0OSw3ICs5OTMsNyBAQAogICAgICAgICAjIFZlcmlmeSB0aGF0IHVzZXJfZnVuY3Rpb24gZXhjZXB0aW9ucyBnZXQgcGFzc2VkIHRocm91Z2ggd2l0aG91dAogICAgICAgICAjIGNyZWF0aW5nIGEgaGFyZC10by1yZWFkIGNoYWluZWQgZXhjZXB0aW9uLgogICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxMzE3NwotICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTAwKToKKyAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEyOCk6CiAgICAgICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplKQogICAgICAgICAgICAgZGVmIGZ1bmMoaSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuICdhYmMnW2ldCkBAIC03NjIsNyArMTAwNiw3IEBACiAgICAgICAgICAgICAgICAgZnVuYygxNSkKIAogICAgIGRlZiB0ZXN0X2xydV93aXRoX3R5cGVzKHNlbGYpOgotICAgICAgICBmb3IgbWF4c2l6ZSBpbiAoTm9uZSwgMTAwKToKKyAgICAgICAgZm9yIG1heHNpemUgaW4gKE5vbmUsIDEyOCk6CiAgICAgICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPW1heHNpemUsIHR5cGVkPVRydWUpCiAgICAgICAgICAgICBkZWYgc3F1YXJlKHgpOgogICAgICAgICAgICAgICAgIHJldHVybiB4ICogeApAQCAtNzc3LDYgKzEwMjEsMzYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3F1YXJlLmNhY2hlX2luZm8oKS5oaXRzLCA0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcXVhcmUuY2FjaGVfaW5mbygpLm1pc3NlcywgNCkKIAorICAgIGRlZiB0ZXN0X2xydV93aXRoX2tleXdvcmRfYXJncyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUoKQorICAgICAgICBkZWYgZmliKG4pOgorICAgICAgICAgICAgaWYgbiA8IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgICAgIHJldHVybiBmaWIobj1uLTEpICsgZmliKG49bi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgW2ZpYihuPW51bWJlcikgZm9yIG51bWJlciBpbiByYW5nZSgxNildLAorICAgICAgICAgICAgWzAsIDEsIDEsIDIsIDMsIDUsIDgsIDEzLCAyMSwgMzQsIDU1LCA4OSwgMTQ0LCAyMzMsIDM3NywgNjEwXQorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmliLmNhY2hlX2luZm8oKSwKKyAgICAgICAgICAgIGZ1bmN0b29scy5fQ2FjaGVJbmZvKGhpdHM9MjgsIG1pc3Nlcz0xNiwgbWF4c2l6ZT0xMjgsIGN1cnJzaXplPTE2KSkKKyAgICAgICAgZmliLmNhY2hlX2NsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWIuY2FjaGVfaW5mbygpLAorICAgICAgICAgICAgZnVuY3Rvb2xzLl9DYWNoZUluZm8oaGl0cz0wLCBtaXNzZXM9MCwgbWF4c2l6ZT0xMjgsIGN1cnJzaXplPTApKQorCisgICAgZGVmIHRlc3RfbHJ1X3dpdGhfa2V5d29yZF9hcmdzX21heHNpemVfbm9uZShzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5scnVfY2FjaGUobWF4c2l6ZT1Ob25lKQorICAgICAgICBkZWYgZmliKG4pOgorICAgICAgICAgICAgaWYgbiA8IDI6CisgICAgICAgICAgICAgICAgcmV0dXJuIG4KKyAgICAgICAgICAgIHJldHVybiBmaWIobj1uLTEpICsgZmliKG49bi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFtmaWIobj1udW1iZXIpIGZvciBudW1iZXIgaW4gcmFuZ2UoMTYpXSwKKyAgICAgICAgICAgIFswLCAxLCAxLCAyLCAzLCA1LCA4LCAxMywgMjEsIDM0LCA1NSwgODksIDE0NCwgMjMzLCAzNzcsIDYxMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmliLmNhY2hlX2luZm8oKSwKKyAgICAgICAgICAgIGZ1bmN0b29scy5fQ2FjaGVJbmZvKGhpdHM9MjgsIG1pc3Nlcz0xNiwgbWF4c2l6ZT1Ob25lLCBjdXJyc2l6ZT0xNikpCisgICAgICAgIGZpYi5jYWNoZV9jbGVhcigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmliLmNhY2hlX2luZm8oKSwKKyAgICAgICAgICAgIGZ1bmN0b29scy5fQ2FjaGVJbmZvKGhpdHM9MCwgbWlzc2VzPTAsIG1heHNpemU9Tm9uZSwgY3VycnNpemU9MCkpCisKICAgICBkZWYgdGVzdF9uZWVkX2Zvcl9ybG9jayhzZWxmKToKICAgICAgICAgIyBUaGlzIHdpbGwgZGVhZGxvY2sgb24gYW4gTFJVIGNhY2hlIHRoYXQgdXNlcyBhIHJlZ3VsYXIgbG9jawogCkBAIC04MDEsMTggKzEwNzUsNTIxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdF9mdW5jKERvdWJsZUVxKDIpKSwgICAgIyBUcmlnZ2VyIGEgcmUtZW50cmFudCBfX2VxX18gY2FsbAogICAgICAgICAgICAgICAgICAgICAgICAgIERvdWJsZUVxKDIpKSAgICAgICAgICAgICAgICMgVmVyaWZ5IHRoZSBjb3JyZWN0IHJldHVybiB2YWx1ZQogCisgICAgZGVmIHRlc3RfZWFybHlfZGV0ZWN0aW9uX29mX2JhZF9jYWxsKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjE4NAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLmxydV9jYWNoZQorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKworY2xhc3MgVGVzdFNpbmdsZURpc3BhdGNoKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9zaW1wbGVfb3ZlcmxvYWRzKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIGRlZiBnX2ludChpKToKKyAgICAgICAgICAgIHJldHVybiAiaW50ZWdlciIKKyAgICAgICAgZy5yZWdpc3RlcihpbnQsIGdfaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoInN0ciIpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygxKSwgImludGVnZXIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoWzEsMiwzXSksICJiYXNlIikKKworICAgIGRlZiB0ZXN0X21ybyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBCKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBEKEMsIEIpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgZ19BKGEpOgorICAgICAgICAgICAgcmV0dXJuICJBIgorICAgICAgICBkZWYgZ19CKGIpOgorICAgICAgICAgICAgcmV0dXJuICJCIgorICAgICAgICBnLnJlZ2lzdGVyKEEsIGdfQSkKKyAgICAgICAgZy5yZWdpc3RlcihCLCBnX0IpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhBKCkpLCAiQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhCKCkpLCAiQiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhDKCkpLCAiQSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhEKCkpLCAiQiIpCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl9kZWNvcmF0b3Ioc2VsZik6CisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcob2JqKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGcucmVnaXN0ZXIoaW50KQorICAgICAgICBkZWYgZ19pbnQoaSk6CisgICAgICAgICAgICByZXR1cm4gImludCAlcyIgJSAoaSwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZygiIiksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKDEyKSwgImludCAxMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZy5kaXNwYXRjaChpbnQpLCBnX2ludCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhnLmRpc3BhdGNoKG9iamVjdCksIGcuZGlzcGF0Y2goc3RyKSkKKyAgICAgICAgIyBOb3RlOiBpbiB0aGUgYXNzZXJ0IGFib3ZlIHRoaXMgaXMgbm90IGcuCisgICAgICAgICMgQHNpbmdsZWRpc3BhdGNoIHJldHVybnMgdGhlIHdyYXBwZXIuCisKKyAgICBkZWYgdGVzdF93cmFwcGluZ19hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICAiU2ltcGxlIHRlc3QiCisgICAgICAgICAgICByZXR1cm4gIlRlc3QiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZy5fX25hbWVfXywgImciKQorICAgICAgICBpZiBzeXMuZmxhZ3Mub3B0aW1pemUgPCAyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnLl9fZG9jX18sICJTaW1wbGUgdGVzdCIpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhkZWNpbWFsLCAncmVxdWlyZXMgX2RlY2ltYWwnKQorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2NfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhvYmopOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAZy5yZWdpc3RlcihkZWNpbWFsLkRlY2ltYWxFeGNlcHRpb24pCisgICAgICAgIGRlZiBfKG9iaik6CisgICAgICAgICAgICByZXR1cm4gb2JqLmFyZ3MKKyAgICAgICAgc3VibiA9IGRlY2ltYWwuU3Vibm9ybWFsKCJFeHBvbmVudCA8IEVtaW4iKQorICAgICAgICBybmQgPSBkZWNpbWFsLlJvdW5kZWQoIk51bWJlciBnb3Qgcm91bmRlZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzdWJuKSwgKCJFeHBvbmVudCA8IEVtaW4iLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhybmQpLCAoIk51bWJlciBnb3Qgcm91bmRlZCIsKSkKKyAgICAgICAgQGcucmVnaXN0ZXIoZGVjaW1hbC5TdWJub3JtYWwpCisgICAgICAgIGRlZiBfKG9iaik6CisgICAgICAgICAgICByZXR1cm4gIlRvbyBzbWFsbCB0byBjYXJlLiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHN1Ym4pLCAiVG9vIHNtYWxsIHRvIGNhcmUuIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHJuZCksICgiTnVtYmVyIGdvdCByb3VuZGVkIiwpKQorCisgICAgZGVmIHRlc3RfY29tcG9zZV9tcm8oc2VsZik6CisgICAgICAgICMgTm9uZSBvZiB0aGUgZXhhbXBsZXMgaW4gdGhpcyB0ZXN0IGRlcGVuZCBvbiBoYXlzdGFjayBvcmRlcmluZy4KKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIG1ybyA9IGZ1bmN0b29scy5fY29tcG9zZV9tcm8KKyAgICAgICAgYmFzZXMgPSBbYy5TZXF1ZW5jZSwgYy5NdXRhYmxlTWFwcGluZywgYy5NYXBwaW5nLCBjLlNldF0KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKGRpY3QsIGhheXN0YWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbZGljdCwgYy5NdXRhYmxlTWFwcGluZywgYy5NYXBwaW5nLCBjLlNpemVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsIG9iamVjdF0pCisgICAgICAgIGJhc2VzID0gW2MuQ29udGFpbmVyLCBjLk1hcHBpbmcsIGMuTXV0YWJsZU1hcHBpbmcsIGMuT3JkZXJlZERpY3RdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhjLkNoYWluTWFwLCBoYXlzdGFjaykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobSwgW2MuQ2hhaW5NYXAsIGMuTXV0YWJsZU1hcHBpbmcsIGMuTWFwcGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLCBvYmplY3RdKQorCisgICAgICAgICMgSWYgdGhlcmUncyBhIGdlbmVyaWMgZnVuY3Rpb24gd2l0aCBpbXBsZW1lbnRhdGlvbnMgcmVnaXN0ZXJlZCBmb3IKKyAgICAgICAgIyBib3RoIFNpemVkIGFuZCBDb250YWluZXIsIHBhc3NpbmcgYSBkZWZhdWx0ZGljdCB0byBpdCByZXN1bHRzIGluIGFuCisgICAgICAgICMgYW1iaWd1b3VzIGRpc3BhdGNoIHdoaWNoIHdpbGwgY2F1c2UgYSBSdW50aW1lRXJyb3IgKHNlZQorICAgICAgICAjIHRlc3RfbXJvX2NvbmZsaWN0cykuCisgICAgICAgIGJhc2VzID0gW2MuQ29udGFpbmVyLCBjLlNpemVkLCBzdHJdCisgICAgICAgIGZvciBoYXlzdGFjayBpbiBwZXJtdXRhdGlvbnMoYmFzZXMpOgorICAgICAgICAgICAgbSA9IG1ybyhjLmRlZmF1bHRkaWN0LCBbYy5TaXplZCwgYy5Db250YWluZXIsIHN0cl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtjLmRlZmF1bHRkaWN0LCBkaWN0LCBjLlNpemVkLCBjLkNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF0pCisKKyAgICAgICAgIyBNdXRhYmxlU2VxdWVuY2UgYmVsb3cgaXMgcmVnaXN0ZXJlZCBkaXJlY3RseSBvbiBELiBJbiBvdGhlciB3b3JkcywgaXQKKyAgICAgICAgIyBwcmVjZWVkcyBNdXRhYmxlTWFwcGluZyB3aGljaCBtZWFucyBzaW5nbGUgZGlzcGF0Y2ggd2lsbCBhbHdheXMKKyAgICAgICAgIyBjaG9vc2UgTXV0YWJsZVNlcXVlbmNlIGhlcmUuCisgICAgICAgIGNsYXNzIEQoYy5kZWZhdWx0ZGljdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGMuTXV0YWJsZVNlcXVlbmNlLnJlZ2lzdGVyKEQpCisgICAgICAgIGJhc2VzID0gW2MuTXV0YWJsZVNlcXVlbmNlLCBjLk11dGFibGVNYXBwaW5nXQorICAgICAgICBmb3IgaGF5c3RhY2sgaW4gcGVybXV0YXRpb25zKGJhc2VzKToKKyAgICAgICAgICAgIG0gPSBtcm8oRCwgYmFzZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0sIFtELCBjLk11dGFibGVTZXF1ZW5jZSwgYy5TZXF1ZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMuZGVmYXVsdGRpY3QsIGRpY3QsIGMuTXV0YWJsZU1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLk1hcHBpbmcsIGMuU2l6ZWQsIGMuSXRlcmFibGUsIGMuQ29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0XSkKKworICAgICAgICAjIENvbnRhaW5lciBhbmQgQ2FsbGFibGUgYXJlIHJlZ2lzdGVyZWQgb24gZGlmZmVyZW50IGJhc2UgY2xhc3NlcyBhbmQKKyAgICAgICAgIyBhIGdlbmVyaWMgZnVuY3Rpb24gc3VwcG9ydGluZyBib3RoIHNob3VsZCBhbHdheXMgcGljayB0aGUgQ2FsbGFibGUKKyAgICAgICAgIyBpbXBsZW1lbnRhdGlvbiBpZiBhIEMgaW5zdGFuY2UgaXMgcGFzc2VkLgorICAgICAgICBjbGFzcyBDKGMuZGVmYXVsdGRpY3QpOgorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYmFzZXMgPSBbYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXIsIGMuTWFwcGluZ10KKyAgICAgICAgZm9yIGhheXN0YWNrIGluIHBlcm11dGF0aW9ucyhiYXNlcyk6CisgICAgICAgICAgICBtID0gbXJvKEMsIGhheXN0YWNrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLCBbQywgYy5DYWxsYWJsZSwgYy5kZWZhdWx0ZGljdCwgZGljdCwgYy5NYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy5TaXplZCwgYy5JdGVyYWJsZSwgYy5Db250YWluZXIsIG9iamVjdF0pCisKKyAgICBkZWYgdGVzdF9yZWdpc3Rlcl9hYmMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBkID0geyJhIjogImIifQorICAgICAgICBsID0gWzEsIDIsIDNdCisgICAgICAgIHMgPSB7b2JqZWN0KCksIE5vbmV9CisgICAgICAgIGYgPSBmcm96ZW5zZXQocykKKyAgICAgICAgdCA9ICgxLCAyLCAzKQorICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBnKG9iaik6CisgICAgICAgICAgICByZXR1cm4gImJhc2UiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJiYXNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgb2JqOiAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nLCBsYW1iZGEgb2JqOiAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkNoYWluTWFwLCBsYW1iZGEgb2JqOiAiY2hhaW5tYXAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpICAjIGlycmVsZXZhbnQgQUJDcyByZWdpc3RlcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVTZXF1ZW5jZSwgbGFtYmRhIG9iajogIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNpemVkIikKKyAgICAgICAgZy5yZWdpc3RlcihjLk11dGFibGVTZXQsIGxhbWJkYSBvYmo6ICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NYXBwaW5nLCBsYW1iZGEgb2JqOiAibWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgIm11dGFibGVtYXBwaW5nIikgICMgbm90IHNwZWNpZmljIGVub3VnaAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzaXplZCIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXF1ZW5jZSwgbGFtYmRhIG9iajogInNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAibXV0YWJsZW1hcHBpbmciKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJtdXRhYmxlc2VxdWVuY2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJtdXRhYmxlc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGYpLCAic2l6ZWQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoYy5TZXQsIGxhbWJkYSBvYmo6ICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgIm11dGFibGVzZXF1ZW5jZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgIm11dGFibGVzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJzZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJzZXF1ZW5jZSIpCisgICAgICAgIGcucmVnaXN0ZXIoZGljdCwgbGFtYmRhIG9iajogImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibXV0YWJsZXNlcXVlbmNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihsaXN0LCBsYW1iZGEgb2JqOiAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHMpLCAibXV0YWJsZXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3RlcihzZXQsIGxhbWJkYSBvYmo6ICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgInNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyh0KSwgInNlcXVlbmNlIikKKyAgICAgICAgZy5yZWdpc3Rlcihmcm96ZW5zZXQsIGxhbWJkYSBvYmo6ICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocyksICJjb25jcmV0ZS1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZiksICJmcm96ZW4tc2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKHQpLCAic2VxdWVuY2UiKQorICAgICAgICBnLnJlZ2lzdGVyKHR1cGxlLCBsYW1iZGEgb2JqOiAidHVwbGUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJkaWN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhzKSwgImNvbmNyZXRlLXNldCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhmKSwgImZyb3plbi1zZXQiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcodCksICJ0dXBsZSIpCisKKyAgICBkZWYgdGVzdF9jM19hYmMoc2VsZik6CisgICAgICAgIGMgPSBjb2xsZWN0aW9ucworICAgICAgICBtcm8gPSBmdW5jdG9vbHMuX2MzX21ybworICAgICAgICBjbGFzcyBBKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEIoQSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMCAgICMgaW1wbGllcyBTaXplZAorICAgICAgICBAYy5Db250YWluZXIucmVnaXN0ZXIKKyAgICAgICAgY2xhc3MgQyhvYmplY3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBEKG9iamVjdCk6CisgICAgICAgICAgICBwYXNzICAgIyB1bnJlbGF0ZWQKKyAgICAgICAgY2xhc3MgWChELCBDLCBCKToKKyAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzICAgIyBpbXBsaWVzIENhbGxhYmxlCisgICAgICAgIGV4cGVjdGVkID0gW1gsIGMuQ2FsbGFibGUsIEQsIEMsIGMuQ29udGFpbmVyLCBCLCBjLlNpemVkLCBBLCBvYmplY3RdCisgICAgICAgIGZvciBhYmNzIGluIHBlcm11dGF0aW9ucyhbYy5TaXplZCwgYy5DYWxsYWJsZSwgYy5Db250YWluZXJdKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXJvKFgsIGFiY3M9YWJjcyksIGV4cGVjdGVkKQorICAgICAgICAjIHVucmVsYXRlZCBBQkNzIGRvbid0IGFwcGVhciBpbiB0aGUgcmVzdWx0aW5nIE1STworICAgICAgICBtYW55X2FiY3MgPSBbYy5NYXBwaW5nLCBjLlNpemVkLCBjLkNhbGxhYmxlLCBjLkNvbnRhaW5lciwgYy5JdGVyYWJsZV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtcm8oWCwgYWJjcz1tYW55X2FiY3MpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ZhbHNlX21ldGEoc2VsZik6CisgICAgICAgICMgc2VlIGlzc3VlMjM1NzIKKyAgICAgICAgY2xhc3MgTWV0YUEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1NZXRhQSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEFBKEEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBAZnVuY3Rvb2xzLnNpbmdsZWRpc3BhdGNoCisgICAgICAgIGRlZiBmdW4oYSk6CisgICAgICAgICAgICByZXR1cm4gJ2Jhc2UgQScKKyAgICAgICAgQGZ1bi5yZWdpc3RlcihBKQorICAgICAgICBkZWYgXyhhKToKKyAgICAgICAgICAgIHJldHVybiAnZnVuIEEnCisgICAgICAgIGFhID0gQUEoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bihhYSksICdmdW4gQScpCisKKyAgICBkZWYgdGVzdF9tcm9fY29uZmxpY3RzKHNlbGYpOgorICAgICAgICBjID0gY29sbGVjdGlvbnMKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgZyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBjbGFzcyBPKGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgbyA9IE8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobyksICJiYXNlIikKKyAgICAgICAgZy5yZWdpc3RlcihjLkl0ZXJhYmxlLCBsYW1iZGEgYXJnOiAiaXRlcmFibGUiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuQ29udGFpbmVyLCBsYW1iZGEgYXJnOiAiY29udGFpbmVyIikKKyAgICAgICAgZy5yZWdpc3RlcihjLlNpemVkLCBsYW1iZGEgYXJnOiAic2l6ZWQiKQorICAgICAgICBnLnJlZ2lzdGVyKGMuU2V0LCBsYW1iZGEgYXJnOiAic2V0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIF9fbXJvX18KKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoTykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKG8pLCAic2l6ZWQiKSAgICMgc2VlIGFib3ZlOiBTaXplZCBpcyBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKE8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhvKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkNvbnRhaW5lcgorICAgICAgICBjbGFzcyBQOgorICAgICAgICAgICAgcGFzcworICAgICAgICBwID0gUCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgImJhc2UiKQorICAgICAgICBjLkl0ZXJhYmxlLnJlZ2lzdGVyKFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhwKSwgIml0ZXJhYmxlIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoUCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX29uZToKKyAgICAgICAgICAgIGcocCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV9vbmUuZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICgoIkFtYmlndW91cyBkaXNwYXRjaDogPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuSXRlcmFibGUnPiIpLAorICAgICAgICAgICAgICgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5JdGVyYWJsZSc+ICIKKyAgICAgICAgICAgICAgIm9yIDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLkNvbnRhaW5lcic+IikpLAorICAgICAgICApCisgICAgICAgIGNsYXNzIFEoYy5TaXplZCk6CisgICAgICAgICAgICBkZWYgX19sZW5fXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBxID0gUSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNpemVkIikKKyAgICAgICAgYy5JdGVyYWJsZS5yZWdpc3RlcihRKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcocSksICJzaXplZCIpICAgIyBiZWNhdXNlIGl0J3MgZXhwbGljaXRseSBpbiBfX21yb19fCisgICAgICAgIGMuU2V0LnJlZ2lzdGVyKFEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhxKSwgInNldCIpICAgICAjIGJlY2F1c2UgYy5TZXQgaXMgYSBzdWJjbGFzcyBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjLlNpemVkIGFuZCBjLkl0ZXJhYmxlCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGgoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGgucmVnaXN0ZXIoYy5TaXplZCkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2l6ZWQiCisgICAgICAgIEBoLnJlZ2lzdGVyKGMuQ29udGFpbmVyKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJjb250YWluZXIiCisgICAgICAgICMgRXZlbiB0aG91Z2ggU2l6ZWQgYW5kIENvbnRhaW5lciBhcmUgZXhwbGljaXQgYmFzZXMgb2YgTXV0YWJsZU1hcHBpbmcsCisgICAgICAgICMgdGhpcyBBQkMgaXMgaW1wbGljaXRseSByZWdpc3RlcmVkIG9uIGRlZmF1bHRkaWN0IHdoaWNoIG1ha2VzIGFsbCBvZgorICAgICAgICAjIE11dGFibGVNYXBwaW5nJ3MgYmFzZXMgaW1wbGljaXQgYXMgd2VsbCBmcm9tIGRlZmF1bHRkaWN0J3MKKyAgICAgICAgIyBwZXJzcGVjdGl2ZS4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpIGFzIHJlX3R3bzoKKyAgICAgICAgICAgIGgoYy5kZWZhdWx0ZGljdChsYW1iZGE6IDApKQorICAgICAgICBzZWxmLmFzc2VydEluKAorICAgICAgICAgICAgc3RyKHJlX3R3by5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgUihjLmRlZmF1bHRkaWN0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlU2VxdWVuY2UucmVnaXN0ZXIoUikKKyAgICAgICAgQGZ1bmN0b29scy5zaW5nbGVkaXNwYXRjaAorICAgICAgICBkZWYgaShhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJiYXNlIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVNYXBwaW5nKQorICAgICAgICBkZWYgXyhhcmcpOgorICAgICAgICAgICAgcmV0dXJuICJtYXBwaW5nIgorICAgICAgICBAaS5yZWdpc3RlcihjLk11dGFibGVTZXF1ZW5jZSkKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAic2VxdWVuY2UiCisgICAgICAgIHIgPSBSKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpKHIpLCAic2VxdWVuY2UiKQorICAgICAgICBjbGFzcyBTOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBUKFMsIGMuU2l6ZWQpOgorICAgICAgICAgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgdCA9IFQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgodCksICJzaXplZCIpCisgICAgICAgIGMuQ29udGFpbmVyLnJlZ2lzdGVyKFQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaCh0KSwgInNpemVkIikgICAjIGJlY2F1c2UgaXQncyBleHBsaWNpdGx5IGluIHRoZSBNUk8KKyAgICAgICAgY2xhc3MgVToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHUgPSBVKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoKHUpLCAic2l6ZWQiKSAgICMgaW1wbGljaXQgU2l6ZWQgc3ViY2xhc3MgaW5mZXJyZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgZnJvbSB0aGUgZXhpc3RlbmNlIG9mIF9fbGVuX18oKQorICAgICAgICBjLkNvbnRhaW5lci5yZWdpc3RlcihVKQorICAgICAgICAjIFRoZXJlIGlzIG5vIHByZWZlcmVuY2UgZm9yIHJlZ2lzdGVyZWQgdmVyc3VzIGluZmVycmVkIEFCQ3MuCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyByZV90aHJlZToKKyAgICAgICAgICAgIGgodSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigKKyAgICAgICAgICAgIHN0cihyZV90aHJlZS5leGNlcHRpb24pLAorICAgICAgICAgICAgKCgiQW1iaWd1b3VzIGRpc3BhdGNoOiA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5Db250YWluZXInPiAiCisgICAgICAgICAgICAgICJvciA8Y2xhc3MgJ2NvbGxlY3Rpb25zLmFiYy5TaXplZCc+IiksCisgICAgICAgICAgICAgKCJBbWJpZ3VvdXMgZGlzcGF0Y2g6IDxjbGFzcyAnY29sbGVjdGlvbnMuYWJjLlNpemVkJz4gIgorICAgICAgICAgICAgICAib3IgPGNsYXNzICdjb2xsZWN0aW9ucy5hYmMuQ29udGFpbmVyJz4iKSksCisgICAgICAgICkKKyAgICAgICAgY2xhc3MgVihjLlNpemVkLCBTKToKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGooYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgQGoucmVnaXN0ZXIoUykKKyAgICAgICAgZGVmIF8oYXJnKToKKyAgICAgICAgICAgIHJldHVybiAicyIKKyAgICAgICAgQGoucmVnaXN0ZXIoYy5Db250YWluZXIpCisgICAgICAgIGRlZiBfKGFyZyk6CisgICAgICAgICAgICByZXR1cm4gImNvbnRhaW5lciIKKyAgICAgICAgdiA9IFYoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGoodiksICJzIikKKyAgICAgICAgYy5Db250YWluZXIucmVnaXN0ZXIoVikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqKHYpLCAiY29udGFpbmVyIikgICAjIGJlY2F1c2UgaXQgZW5kcyB1cCByaWdodCBhZnRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgU2l6ZWQgaW4gdGhlIE1STworCisgICAgZGVmIHRlc3RfY2FjaGVfaW52YWxpZGF0aW9uKHNlbGYpOgorICAgICAgICBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBVc2VyRGljdAorICAgICAgICBjbGFzcyBUcmFjaW5nRGljdChVc2VyRGljdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBzdXBlcihUcmFjaW5nRGljdCwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcyA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzID0gW10KKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZGF0YVtrZXldCisgICAgICAgICAgICAgICAgc2VsZi5nZXRfb3BzLmFwcGVuZChrZXkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGtleSwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X29wcy5hcHBlbmQoa2V5KQorICAgICAgICAgICAgICAgIHNlbGYuZGF0YVtrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGEuY2xlYXIoKQorICAgICAgICBfb3JpZ193a2QgPSBmdW5jdG9vbHMuV2Vha0tleURpY3Rpb25hcnkKKyAgICAgICAgdGQgPSBUcmFjaW5nRGljdCgpCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IGxhbWJkYTogdGQKKyAgICAgICAgYyA9IGNvbGxlY3Rpb25zCisgICAgICAgIEBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2gKKyAgICAgICAgZGVmIGcoYXJnKToKKyAgICAgICAgICAgIHJldHVybiAiYmFzZSIKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGwgPSBbXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbZGljdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtkaWN0XSwgZy5yZWdpc3RyeVtvYmplY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmRhdGFbbGlzdF0sIGcucmVnaXN0cnlbb2JqZWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLCB0ZC5kYXRhW2xpc3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJiYXNlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5yZWdpc3RlcihsaXN0LCBsYW1iZGEgYXJnOiAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImJhc2UiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5kYXRhW2RpY3RdLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0b29scy5fZmluZF9pbXBsKGRpY3QsIGcucmVnaXN0cnkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZGF0YVtsaXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdG9vbHMuX2ZpbmRfaW1wbChsaXN0LCBnLnJlZ2lzdHJ5KSkKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYy5NdXRhYmxlTWFwcGluZy5yZWdpc3RlcihYKSAgICMgV2lsbCBub3QgaW52YWxpZGF0ZSB0aGUgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdCB1c2luZyBBQkNzIHlldC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGQpLCAiYmFzZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIGcucmVnaXN0ZXIoYy5TaXplZCwgbGFtYmRhIGFyZzogInNpemVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5nZXRfb3BzLCBbbGlzdCwgZGljdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuc2V0X29wcywgW2RpY3QsIGxpc3QsIGRpY3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLmdldF9vcHMsIFtsaXN0LCBkaWN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZC5zZXRfb3BzLCBbZGljdCwgbGlzdCwgZGljdCwgbGlzdCwgZGljdCwgbGlzdF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJzaXplZCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgZy5kaXNwYXRjaChsaXN0KQorICAgICAgICBnLmRpc3BhdGNoKGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGQuZ2V0X29wcywgW2xpc3QsIGRpY3QsIGRpY3QsIGxpc3QsIGxpc3QsIGRpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QsIGRpY3RdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRkLnNldF9vcHMsIFtkaWN0LCBsaXN0LCBkaWN0LCBsaXN0LCBkaWN0LCBsaXN0XSkKKyAgICAgICAgYy5NdXRhYmxlU2V0LnJlZ2lzdGVyKFgpICAgICAgICMgV2lsbCBpbnZhbGlkYXRlIHRoZSBjYWNoZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAyKSAgICMgU3RhbGUgY2FjaGUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhsKSwgImxpc3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDEpCisgICAgICAgIGcucmVnaXN0ZXIoYy5NdXRhYmxlTWFwcGluZywgbGFtYmRhIGFyZzogIm11dGFibGVtYXBwaW5nIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcoZCksICJtdXRhYmxlbWFwcGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnKGwpLCAibGlzdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRkKSwgMikKKyAgICAgICAgZy5yZWdpc3RlcihkaWN0LCBsYW1iZGEgYXJnOiAiZGljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZyhkKSwgImRpY3QiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGcobCksICJsaXN0IikKKyAgICAgICAgZy5fY2xlYXJfY2FjaGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0ZCksIDApCisgICAgICAgIGZ1bmN0b29scy5XZWFrS2V5RGljdGlvbmFyeSA9IF9vcmlnX3drZAorCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X2NsYXNzZXMgPSAoCi0gICAgICAgIFRlc3RQYXJ0aWFsLAotICAgICAgICBUZXN0UGFydGlhbFN1YmNsYXNzLAotICAgICAgICBUZXN0UHl0aG9uUGFydGlhbCwKKyAgICAgICAgVGVzdFBhcnRpYWxDLAorICAgICAgICBUZXN0UGFydGlhbFB5LAorICAgICAgICBUZXN0UGFydGlhbENTdWJjbGFzcywKKyAgICAgICAgVGVzdFBhcnRpYWxNZXRob2QsCiAgICAgICAgIFRlc3RVcGRhdGVXcmFwcGVyLAogICAgICAgICBUZXN0VG90YWxPcmRlcmluZywKLSAgICAgICAgVGVzdENtcFRvS2V5LAorICAgICAgICBUZXN0Q21wVG9LZXlDLAorICAgICAgICBUZXN0Q21wVG9LZXlQeSwKICAgICAgICAgVGVzdFdyYXBzLAogICAgICAgICBUZXN0UmVkdWNlLAogICAgICAgICBUZXN0TFJVLAorICAgICAgICBUZXN0U2luZ2xlRGlzcGF0Y2gsCiAgICAgKQogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZnV0dXJlLnB5IGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKaW5kZXggYTBjMTU2Zi4uYmVhYzk5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mdXR1cmUucHkKQEAgLTgyLDYgKzgyLDE0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQogCisgICAgZGVmIHRlc3RfYmFkZnV0dXJlMTAoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gdGVzdCBpbXBvcnQgYmFkc3ludGF4X2Z1dHVyZTEwCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyBtc2c6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldF9lcnJvcl9sb2NhdGlvbihtc2cpLCAoImJhZHN5bnRheF9mdXR1cmUxMCIsICczJykpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmZhaWwoImV4cGVjdGVkIGV4Y2VwdGlvbiBkaWRuJ3Qgb2NjdXIiKQorCiAgICAgZGVmIHRlc3RfcGFyc2VyaGFjayhzZWxmKToKICAgICAgICAgIyB0ZXN0IHRoYXQgdGhlIHBhcnNlci5jOjpmdXR1cmVfaGFjayBmdW5jdGlvbiB3b3JrcyBhcyBleHBlY3RlZAogICAgICAgICAjIE5vdGU6IGFsdGhvdWdoIHRoaXMgdGVzdCBtdXN0IHBhc3MsIGl0J3Mgbm90IHRlc3RpbmcgdGhlIG9yaWdpbmFsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2djLnB5IGIvTGliL3Rlc3QvdGVzdF9nYy5weQppbmRleCBjNTliNzJlLi4yYWMxZDRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2djLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2MucHkKQEAgLTEsNiArMSw4IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAodmVyYm9zZSwgcmVmY291bnRfdGVzdCwgcnVuX3VuaXR0ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwX3B5dGhvbl9zdGRlcnIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBfcHl0aG9uX3N0ZGVyciwgY3B5dGhvbl9vbmx5LCBzdGFydF90aHJlYWRzKQorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIG1ha2Vfc2NyaXB0LCB0ZW1wX2RpcgorCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IGdjCkBAIC0xMSw2ICsxMywxNSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAordHJ5OgorICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCB3aXRoX3RwX2RlbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGRlZiB3aXRoX3RwX2RlbChjbHMpOgorICAgICAgICBjbGFzcyBDKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19uZXdfXyhjbHMsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdyZXF1aXJlcyBfdGVzdGNhcGkud2l0aF90cF9kZWwnKQorICAgICAgICByZXR1cm4gQworCiAjIyMgU3VwcG9ydCBjb2RlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKQEAgLTM4LDYgKzQ5LDcgQEAKICAgICAgICAgIyBnYyBjb2xsZWN0cyBpdC4KICAgICAgICAgc2VsZi53ciA9IHdlYWtyZWYucmVmKEMxMDU1ODIwKDY2NiksIGl0X2hhcHBlbmVkKQogCitAd2l0aF90cF9kZWwKIGNsYXNzIFVuY29sbGVjdGFibGUob2JqZWN0KToKICAgICAiIiJDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgd2l0aCBtdWx0aXBsZSBfX2RlbF9fIG1ldGhvZHMuCiAKQEAgLTUwLDcgKzYyLDcgQEAKICAgICAgICAgICAgIHNlbGYucGFydG5lciA9IFVuY29sbGVjdGFibGUocGFydG5lcj1zZWxmKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5wYXJ0bmVyID0gcGFydG5lcgotICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOgogICAgICAgICBwYXNzCiAKICMjIyBUZXN0cwpAQCAtMTM5LDExICsxNTEsMTMgQEAKICAgICAgICAgZGVsIGEKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChnYy5jb2xsZWN0KCksIDApCiAKLSAgICBkZWYgdGVzdF9maW5hbGl6ZXIoc2VsZik6CisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2xlZ2FjeV9maW5hbGl6ZXIoc2VsZik6CiAgICAgICAgICMgQSgpIGlzIHVuY29sbGVjdGFibGUgaWYgaXQgaXMgcGFydCBvZiBhIGN5Y2xlLCBtYWtlIHN1cmUgaXQgc2hvd3MgdXAKICAgICAgICAgIyBpbiBnYy5nYXJiYWdlLgorICAgICAgICBAd2l0aF90cF9kZWwKICAgICAgICAgY2xhc3MgQToKLSAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOiBwYXNzCisgICAgICAgICAgICBkZWYgX190cF9kZWxfXyhzZWxmKTogcGFzcwogICAgICAgICBjbGFzcyBCOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQSgpCkBAIC0xNjMsMTEgKzE3NywxMyBAQAogICAgICAgICAgICAgc2VsZi5mYWlsKCJkaWRuJ3QgZmluZCBvYmogaW4gZ2FyYmFnZSAoZmluYWxpemVyKSIpCiAgICAgICAgIGdjLmdhcmJhZ2UucmVtb3ZlKG9iaikKIAotICAgIGRlZiB0ZXN0X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfbGVnYWN5X2ZpbmFsaXplcl9uZXdjbGFzcyhzZWxmKToKICAgICAgICAgIyBBKCkgaXMgdW5jb2xsZWN0YWJsZSBpZiBpdCBpcyBwYXJ0IG9mIGEgY3ljbGUsIG1ha2Ugc3VyZSBpdCBzaG93cyB1cAogICAgICAgICAjIGluIGdjLmdhcmJhZ2UuCisgICAgICAgIEB3aXRoX3RwX2RlbAogICAgICAgICBjbGFzcyBBKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKTogcGFzcworICAgICAgICAgICAgZGVmIF9fdHBfZGVsX18oc2VsZik6IHBhc3MKICAgICAgICAgY2xhc3MgQihvYmplY3QpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBhID0gQSgpCkBAIC0zODEsMTcgKzM5NywxMyBAQAogICAgICAgICBvbGRfc3dpdGNoaW50ZXJ2YWwgPSBzeXMuZ2V0c3dpdGNoaW50ZXJ2YWwoKQogICAgICAgICBzeXMuc2V0c3dpdGNoaW50ZXJ2YWwoMWUtNSkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZXhpdCA9IEZhbHNlCisgICAgICAgICAgICBleGl0ID0gW10KICAgICAgICAgICAgIHRocmVhZHMgPSBbXQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTl9USFJFQURTKToKICAgICAgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuX3RocmVhZCkKICAgICAgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQotICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMS4wKQotICAgICAgICAgICAgZXhpdCA9IFRydWUKLSAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgIHdpdGggc3RhcnRfdGhyZWFkcyh0aHJlYWRzLCBsYW1iZGE6IGV4aXQuYXBwZW5kKDEpKToKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEuMCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHN5cy5zZXRzd2l0Y2hpbnRlcnZhbChvbGRfc3dpdGNoaW50ZXJ2YWwpCiAgICAgICAgIGdjLmNvbGxlY3QoKQpAQCAtNTY0LDE2ICs1NzYsNTEgQEAKICAgICAgICAgICAgICMgd291bGQgYmUgZGFtYWdlZCwgd2l0aCBhbiBlbXB0eSBfX2RpY3RfXy4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgTm9uZSkKIAorICAgIGRlZiB0ZXN0X2J1ZzIxNDM1KHNlbGYpOgorICAgICAgICAjIFRoaXMgaXMgYSBwb29yIHRlc3QgLSBpdHMgb25seSB2aXJ0dWUgaXMgdGhhdCBpdCBoYXBwZW5lZCB0bworICAgICAgICAjIHNlZ2ZhdWx0IG9uIFRpbSdzIFdpbmRvd3MgYm94IGJlZm9yZSB0aGUgcGF0Y2ggZm9yIDIxNDM1IHdhcworICAgICAgICAjIGFwcGxpZWQuICBUaGF0J3MgYSBuYXN0eSBidWcgcmVseWluZyBvbiBzcGVjaWZpYyBwaWVjZXMgb2YgY3ljbGljCisgICAgICAgICMgdHJhc2ggYXBwZWFyaW5nIGluIGV4YWN0bHkgdGhlIHJpZ2h0IG9yZGVyIGluIGZpbmFsaXplX2dhcmJhZ2UoKSdzCisgICAgICAgICMgaW5wdXQgbGlzdC4KKyAgICAgICAgIyBCdXQgdGhlcmUncyBubyByZWxpYWJsZSB3YXkgdG8gZm9yY2UgdGhhdCBvcmRlciBmcm9tIFB5dGhvbiBjb2RlLAorICAgICAgICAjIHNvIG92ZXIgdGltZSBjaGFuY2VzIGFyZSBnb29kIHRoaXMgdGVzdCB3b24ndCByZWFsbHkgYmUgdGVzdGluZyBtdWNoCisgICAgICAgICMgb2YgYW55dGhpbmcgYW55bW9yZS4gIFN0aWxsLCBpZiBpdCBibG93cyB1cCwgdGhlcmUncyBfc29tZV8KKyAgICAgICAgIyBwcm9ibGVtIDstKQorICAgICAgICBnYy5jb2xsZWN0KCkKKworICAgICAgICBjbGFzcyBBOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIEI6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCk6CisgICAgICAgICAgICAgICAgc2VsZi54ID0geAorCisgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmF0dHIgPSBOb25lCisKKyAgICAgICAgZGVmIGRvX3dvcmsoKToKKyAgICAgICAgICAgIGEgPSBBKCkKKyAgICAgICAgICAgIGIgPSBCKEEoKSkKKworICAgICAgICAgICAgYS5hdHRyID0gYgorICAgICAgICAgICAgYi5hdHRyID0gYQorCisgICAgICAgIGRvX3dvcmsoKQorICAgICAgICBnYy5jb2xsZWN0KCkgIyB0aGlzIGJsb3dzIHVwIChiYWQgQyBwb2ludGVyKSB3aGVuIGl0IGZhaWxzCisKKyAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfZ2FyYmFnZV9hdF9zaHV0ZG93bihzZWxmKToKICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKICAgICAgICAgY29kZSA9ICIiImlmIDE6CiAgICAgICAgICAgICBpbXBvcnQgZ2MKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgICAgIEBfdGVzdGNhcGkud2l0aF90cF9kZWwKICAgICAgICAgICAgIGNsYXNzIFg6CiAgICAgICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgICAgICAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gIjxYICUlcj4iICUlIHNlbGYubmFtZQotICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIGRlZiBfX3RwX2RlbF9fKHNlbGYpOgogICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICAgICAgICAgIHggPSBYKCdmaXJzdCcpCkBAIC02MTAsNiArNjU3LDY2IEBACiAgICAgICAgIHN0ZGVyciA9IHJ1bl9jb21tYW5kKGNvZGUgJSAiZ2MuREVCVUdfU0FWRUFMTCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYiJ1bmNvbGxlY3RhYmxlIG9iamVjdHMgYXQgc2h1dGRvd24iLCBzdGRlcnIpCiAKKyAgICBkZWYgdGVzdF9nY19tYWluX21vZHVsZV9hdF9zaHV0ZG93bihzZWxmKToKKyAgICAgICAgIyBDcmVhdGUgYSByZWZlcmVuY2UgY3ljbGUgdGhyb3VnaCB0aGUgX19tYWluX18gbW9kdWxlIGFuZCBjaGVjaworICAgICAgICAjIGl0IGdldHMgY29sbGVjdGVkIGF0IGludGVycHJldGVyIHNodXRkb3duLgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCB3ZWFrcmVmCisgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnX19kZWxfXyBjYWxsZWQnKQorICAgICAgICAgICAgbCA9IFtDKCldCisgICAgICAgICAgICBsLmFwcGVuZChsKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgYidfX2RlbF9fIGNhbGxlZCcpCisKKyAgICBkZWYgdGVzdF9nY19vcmRpbmFyeV9tb2R1bGVfYXRfc2h1dGRvd24oc2VsZik6CisgICAgICAgICMgU2FtZSBhcyBhYm92ZSwgYnV0IHdpdGggYSBub24tX19tYWluX18gbW9kdWxlLgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZHVsZSA9ICIiImlmIDE6CisgICAgICAgICAgICAgICAgaW1wb3J0IHdlYWtyZWYKKyAgICAgICAgICAgICAgICBjbGFzcyBDOgorICAgICAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdfX2RlbF9fIGNhbGxlZCcpCisgICAgICAgICAgICAgICAgbCA9IFtDKCldCisgICAgICAgICAgICAgICAgbC5hcHBlbmQobCkKKyAgICAgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGNvZGUgPSAiIiJpZiAxOgorICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgJXIpCisgICAgICAgICAgICAgICAgaW1wb3J0IGdjdGVzdAorICAgICAgICAgICAgICAgICIiIiAlIChzY3JpcHRfZGlyLCkKKyAgICAgICAgICAgIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsICdnY3Rlc3QnLCBtb2R1bGUpCisgICAgICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5zdHJpcCgpLCBiJ19fZGVsX18gY2FsbGVkJykKKworICAgIGRlZiB0ZXN0X2dldF9zdGF0cyhzZWxmKToKKyAgICAgICAgc3RhdHMgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0cyksIDMpCisgICAgICAgIGZvciBzdCBpbiBzdGF0czoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdCwgZGljdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHN0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyJjb2xsZWN0ZWQiLCAiY29sbGVjdGlvbnMiLCAidW5jb2xsZWN0YWJsZSJ9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RbImNvbGxlY3RlZCJdLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3RbImNvbGxlY3Rpb25zIl0sIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdFsidW5jb2xsZWN0YWJsZSJdLCAwKQorICAgICAgICAjIENoZWNrIHRoYXQgY29sbGVjdGlvbiBjb3VudHMgYXJlIGluY3JlbWVudGVkIGNvcnJlY3RseQorICAgICAgICBpZiBnYy5pc2VuYWJsZWQoKToKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChnYy5lbmFibGUpCisgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgb2xkID0gZ2MuZ2V0X3N0YXRzKCkKKyAgICAgICAgZ2MuY29sbGVjdCgwKQorICAgICAgICBuZXcgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1swXVsiY29sbGVjdGlvbnMiXSwgb2xkWzBdWyJjb2xsZWN0aW9ucyJdICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMV1bImNvbGxlY3Rpb25zIl0sIG9sZFsxXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMl1bImNvbGxlY3Rpb25zIl0sIG9sZFsyXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgZ2MuY29sbGVjdCgyKQorICAgICAgICBuZXcgPSBnYy5nZXRfc3RhdHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5ld1swXVsiY29sbGVjdGlvbnMiXSwgb2xkWzBdWyJjb2xsZWN0aW9ucyJdICsgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMV1bImNvbGxlY3Rpb25zIl0sIG9sZFsxXVsiY29sbGVjdGlvbnMiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdbMl1bImNvbGxlY3Rpb25zIl0sIG9sZFsyXVsiY29sbGVjdGlvbnMiXSArIDEpCisKIAogY2xhc3MgR0NDYWxsYmFja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC02OTYsNiArODAzLDcgQEAKICAgICAgICAgICAgIGluZm8gPSB2WzJdCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bImdlbmVyYXRpb24iXSwgMikKIAorICAgIEBjcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9jb2xsZWN0X2dhcmJhZ2Uoc2VsZik6CiAgICAgICAgIHNlbGYucHJlY2xlYW4oKQogICAgICAgICAjIEVhY2ggb2YgdGhlc2UgY2F1c2UgZm91ciBvYmplY3RzIHRvIGJlIGdhcmJhZ2U6IFR3bwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nZGIucHkgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQppbmRleCA4NDY0MjJiLi5iNTAxN2I5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dkYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dkYi5weQpAQCAtNSw2ICs1LDcgQEAKIAogaW1wb3J0IG9zCiBpbXBvcnQgcmUKK2ltcG9ydCBwcHJpbnQKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3lzY29uZmlnCkBAIC0xNywyMSArMTgsMzcgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBfdGhyZWFkID0gTm9uZQogCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIGZpbmRmaWxlLCBweXRob25faXNfb3B0aW1pemVkCiAKLXRyeToKLSAgICBnZGJfdmVyc2lvbiwgXyA9IHN1YnByb2Nlc3MuUG9wZW4oWyJnZGIiLCAiLS12ZXJzaW9uIl0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKCkKLWV4Y2VwdCBPU0Vycm9yOgotICAgICMgVGhpcyBpcyB3aGF0ICJubyBnZGIiIGxvb2tzIGxpa2UuICBUaGVyZSBtYXksIGhvd2V2ZXIsIGJlIG90aGVyCi0gICAgIyBlcnJvcnMgdGhhdCBtYW5pZmVzdCB0aGlzIHdheSB0b28uCi0gICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIkNvdWxkbid0IGZpbmQgZ2RiIG9uIHRoZSBwYXRoIikKLWdkYl92ZXJzaW9uX251bWJlciA9IHJlLnNlYXJjaChiIl5HTlUgZ2RiIFteXGRdKihcZCspXC4oXGQpIiwgZ2RiX3ZlcnNpb24pCi1nZGJfbWFqb3JfdmVyc2lvbiA9IGludChnZGJfdmVyc2lvbl9udW1iZXIuZ3JvdXAoMSkpCi1nZGJfbWlub3JfdmVyc2lvbiA9IGludChnZGJfdmVyc2lvbl9udW1iZXIuZ3JvdXAoMikpCitkZWYgZ2V0X2dkYl92ZXJzaW9uKCk6CisgICAgdHJ5OgorICAgICAgICBwcm9jID0gc3VicHJvY2Vzcy5Qb3BlbihbImdkYiIsICItbngiLCAiLS12ZXJzaW9uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorICAgICAgICB3aXRoIHByb2M6CisgICAgICAgICAgICB2ZXJzaW9uID0gcHJvYy5jb21tdW5pY2F0ZSgpWzBdCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICMgVGhpcyBpcyB3aGF0ICJubyBnZGIiIGxvb2tzIGxpa2UuICBUaGVyZSBtYXksIGhvd2V2ZXIsIGJlIG90aGVyCisgICAgICAgICMgZXJyb3JzIHRoYXQgbWFuaWZlc3QgdGhpcyB3YXkgdG9vLgorICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ291bGRuJ3QgZmluZCBnZGIgb24gdGhlIHBhdGgiKQorCisgICAgIyBSZWdleCB0byBwYXJzZToKKyAgICAjICdHTlUgZ2RiIChHREI7IFNVU0UgTGludXggRW50ZXJwcmlzZSAxMikgNy43XG4nIC0+IDcuNworICAgICMgJ0dOVSBnZGIgKEdEQikgRmVkb3JhIDcuOS4xLTE3LmZjMjJcbicgLT4gNy45CisgICAgIyAnR05VIGdkYiA2LjEuMSBbRnJlZUJTRF1cbicgLT4gNi4xCisgICAgIyAnR05VIGdkYiAoR0RCKSBGZWRvcmEgKDcuNS4xLTM3LmZjMTgpXG4nIC0+IDcuNQorICAgIG1hdGNoID0gcmUuc2VhcmNoKHIiXkdOVSBnZGIuKj9cYihcZCspXC4oXGQrKSIsIHZlcnNpb24pCisgICAgaWYgbWF0Y2ggaXMgTm9uZToKKyAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJ1bmFibGUgdG8gcGFyc2UgR0RCIHZlcnNpb246ICVyIiAlIHZlcnNpb24pCisgICAgcmV0dXJuICh2ZXJzaW9uLCBpbnQobWF0Y2guZ3JvdXAoMSkpLCBpbnQobWF0Y2guZ3JvdXAoMikpKQorCitnZGJfdmVyc2lvbiwgZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uID0gZ2V0X2dkYl92ZXJzaW9uKCkKIGlmIGdkYl9tYWpvcl92ZXJzaW9uIDwgNzoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2RiIHZlcnNpb25zIGJlZm9yZSA3LjAgZGlkbid0IHN1cHBvcnQgcHl0aG9uIGVtYmVkZGluZyIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNhdzpcbiIgKyBnZGJfdmVyc2lvbi5kZWNvZGUoJ2FzY2lpJywgJ3JlcGxhY2UnKSkKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2RiIHZlcnNpb25zIGJlZm9yZSA3LjAgZGlkbid0IHN1cHBvcnQgcHl0aG9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW1iZWRkaW5nLiBTYXcgJXMuJXM6XG4lcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RiX3ZlcnNpb24pKQogCiBpZiBub3Qgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0ZXN0X2dkYiBvbmx5IHdvcmtzIG9uIHNvdXJjZSBidWlsZHMgYXQgdGhlIG1vbWVudC4iKQpAQCAtNDAsNiArNTcsOCBAQAogY2hlY2tvdXRfaG9va19wYXRoID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShzeXMuZXhlY3V0YWJsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbi1nZGIucHknKQogCitQWVRIT05IQVNIU0VFRCA9ICcxMjMnCisKIGRlZiBydW5fZ2RiKCphcmdzLCAqKmVudl92YXJzKToKICAgICAiIiJSdW5zIGdkYiBpbiAtLWJhdGNoIG1vZGUgd2l0aCB0aGUgYWRkaXRpb25hbCBhcmd1bWVudHMgZ2l2ZW4gYnkgKmFyZ3MuCiAKQEAgLTUwLDEyICs2OSwxNyBAQAogICAgICAgICBlbnYudXBkYXRlKGVudl92YXJzKQogICAgIGVsc2U6CiAgICAgICAgIGVudiA9IE5vbmUKLSAgICBiYXNlX2NtZCA9ICgnZ2RiJywgJy0tYmF0Y2gnKQorICAgICMgLW54OiBEbyBub3QgZXhlY3V0ZSBjb21tYW5kcyBmcm9tIGFueSAuZ2RiaW5pdCBpbml0aWFsaXphdGlvbiBmaWxlcworICAgICMgICAgICAoaXNzdWUgIzIyMTg4KQorICAgIGJhc2VfY21kID0gKCdnZGInLCAnLS1iYXRjaCcsICctbngnKQogICAgIGlmIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24pID49ICg3LCA0KToKICAgICAgICAgYmFzZV9jbWQgKz0gKCctaWV4JywgJ2FkZC1hdXRvLWxvYWQtc2FmZS1wYXRoICcgKyBjaGVja291dF9ob29rX3BhdGgpCi0gICAgb3V0LCBlcnIgPSBzdWJwcm9jZXNzLlBvcGVuKGJhc2VfY21kICsgYXJncywKLSAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwgZW52PWVudiwKLSAgICAgICAgKS5jb21tdW5pY2F0ZSgpCisgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oYmFzZV9jbWQgKyBhcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnY9ZW52KQorICAgIHdpdGggcHJvYzoKKyAgICAgICAgb3V0LCBlcnIgPSBwcm9jLmNvbW11bmljYXRlKCkKICAgICByZXR1cm4gb3V0LmRlY29kZSgndXRmLTgnLCAncmVwbGFjZScpLCBlcnIuZGVjb2RlKCd1dGYtOCcsICdyZXBsYWNlJykKIAogIyBWZXJpZnkgdGhhdCAiZ2RiIiB3YXMgYnVpbHQgd2l0aCB0aGUgZW1iZWRkZWQgcHl0aG9uIHN1cHBvcnQgZW5hYmxlZDoKQEAgLTExNyw3ICsxNDEsMjggQEAKICAgICAgICAgIyBHZW5lcmF0ZSBhIGxpc3Qgb2YgY29tbWFuZHMgaW4gZ2RiJ3MgbGFuZ3VhZ2U6CiAgICAgICAgIGNvbW1hbmRzID0gWydzZXQgYnJlYWtwb2ludCBwZW5kaW5nIHllcycsCiAgICAgICAgICAgICAgICAgICAgICdicmVhayAlcycgJSBicmVha3BvaW50LAorCisgICAgICAgICAgICAgICAgICAgICMgVGhlIHRlc3RzIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCBmcmFtZSBvZiBwcmludGVkCisgICAgICAgICAgICAgICAgICAgICMgIGJhY2t0cmFjZSB3aWxsIG5vdCBjb250YWluIHByb2dyYW0gY291bnRlciwKKyAgICAgICAgICAgICAgICAgICAgIyAgdGhhdCBpcyBob3dldmVyIG5vdCBndWFyYW50ZWVkIGJ5IGdkYgorICAgICAgICAgICAgICAgICAgICAjICB0aGVyZWZvcmUgd2UgbmVlZCB0byB1c2UgJ3NldCBwcmludCBhZGRyZXNzIG9mZicgdG8KKyAgICAgICAgICAgICAgICAgICAgIyAgbWFrZSBzdXJlIHRoZSBjb3VudGVyIGlzIG5vdCB0aGVyZS4gRm9yIGV4YW1wbGU6CisgICAgICAgICAgICAgICAgICAgICMgIzAgaW4gUHlPYmplY3RfUHJpbnQgLi4uCisgICAgICAgICAgICAgICAgICAgICMgIGlzIGFzc3VtZWQsIGJ1dCBzb21ldGltZXMgdGhpcyBjYW4gYmUgZS5nLgorICAgICAgICAgICAgICAgICAgICAjICMwIDB4MDAwMDNmZmZiN2RkMTc5OCBpbiBQeU9iamVjdF9QcmludCAuLi4KKyAgICAgICAgICAgICAgICAgICAgJ3NldCBwcmludCBhZGRyZXNzIG9mZicsCisKICAgICAgICAgICAgICAgICAgICAgJ3J1biddCisKKyAgICAgICAgIyBHREIgYXMgb2YgNy40IG9ud2FyZHMgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlCisgICAgICAgICMgdmFsdWUgb2YgYSB2YXJpYWJsZSBhdCBlbnRyeSB2cyBjdXJyZW50IHZhbHVlOgorICAgICAgICAjICAgaHR0cDovL3NvdXJjZXdhcmUub3JnL2dkYi9vbmxpbmVkb2NzL2dkYi9WYXJpYWJsZXMuaHRtbAorICAgICAgICAjIHdoaWNoIGxlYWRzIHRvIHRoZSBzZWxmdGVzdHMgZmFpbGluZyB3aXRoIGVycm9ycyBsaWtlIHRoaXM6CisgICAgICAgICMgICBBc3NlcnRpb25FcnJvcjogJ3ZAZW50cnk9KCknICE9ICcoKScKKyAgICAgICAgIyBEaXNhYmxlIHRoaXM6CisgICAgICAgIGlmIChnZGJfbWFqb3JfdmVyc2lvbiwgZ2RiX21pbm9yX3ZlcnNpb24pID49ICg3LCA0KToKKyAgICAgICAgICAgIGNvbW1hbmRzICs9IFsnc2V0IHByaW50IGVudHJ5LXZhbHVlcyBubyddCisKICAgICAgICAgaWYgY21kc19hZnRlcl9icmVha3BvaW50OgogICAgICAgICAgICAgY29tbWFuZHMgKz0gY21kc19hZnRlcl9icmVha3BvaW50CiAgICAgICAgIGVsc2U6CkBAIC0xMjYsNyArMTcxLDcgQEAKICAgICAgICAgIyBwcmludCBjb21tYW5kcwogCiAgICAgICAgICMgVXNlICJjb21tYW5kcyIgdG8gZ2VuZXJhdGUgdGhlIGFyZ3VtZW50cyB3aXRoIHdoaWNoIHRvIGludm9rZSAiZ2RiIjoKLSAgICAgICAgYXJncyA9IFsiZ2RiIiwgIi0tYmF0Y2giXQorICAgICAgICBhcmdzID0gWyJnZGIiLCAiLS1iYXRjaCIsICItbngiXQogICAgICAgICBhcmdzICs9IFsnLS1ldmFsLWNvbW1hbmQ9JXMnICUgY21kIGZvciBjbWQgaW4gY29tbWFuZHNdCiAgICAgICAgIGFyZ3MgKz0gWyItLWFyZ3MiLAogICAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZV0KQEAgLTE0NCw3ICsxODksNyBAQAogICAgICAgICAjIHByaW50ICgnICcuam9pbihhcmdzKSkKIAogICAgICAgICAjIFVzZSAiYXJncyIgdG8gaW52b2tlIGdkYiwgY2FwdHVyaW5nIHN0ZG91dCwgc3RkZXJyOgotICAgICAgICBvdXQsIGVyciA9IHJ1bl9nZGIoKmFyZ3MsIFBZVEhPTkhBU0hTRUVEPScwJykKKyAgICAgICAgb3V0LCBlcnIgPSBydW5fZ2RiKCphcmdzLCBQWVRIT05IQVNIU0VFRD1QWVRIT05IQVNIU0VFRCkKIAogICAgICAgICBlcnJsaW5lcyA9IGVyci5zcGxpdGxpbmVzKCkKICAgICAgICAgdW5leHBlY3RlZF9lcnJsaW5lcyA9IFtdCkBAIC0xNjMsOCArMjA4LDE0IEBACiAgICAgICAgICAgICAnbGludXgtdmRzby5zbycsCiAgICAgICAgICAgICAnd2FybmluZzogQ291bGQgbm90IGxvYWQgc2hhcmVkIGxpYnJhcnkgc3ltYm9scyBmb3IgJwogICAgICAgICAgICAgJ2xpbnV4LWdhdGUuc28nLAorICAgICAgICAgICAgJ3dhcm5pbmc6IENvdWxkIG5vdCBsb2FkIHNoYXJlZCBsaWJyYXJ5IHN5bWJvbHMgZm9yICcKKyAgICAgICAgICAgICdsaW51eC12ZHNvNjQuc28nLAogICAgICAgICAgICAgJ0RvIHlvdSBuZWVkICJzZXQgc29saWItc2VhcmNoLXBhdGgiIG9yICcKICAgICAgICAgICAgICcic2V0IHN5c3Jvb3QiPycsCisgICAgICAgICAgICAnd2FybmluZzogU291cmNlIGZpbGUgaXMgbW9yZSByZWNlbnQgdGhhbiBleGVjdXRhYmxlLicsCisgICAgICAgICAgICAjIElzc3VlICMxOTc1MzogbWlzc2luZyBzeW1ib2xzIG9uIFN5c3RlbSBaCisgICAgICAgICAgICAnTWlzc2luZyBzZXBhcmF0ZSBkZWJ1Z2luZm8gZm9yICcsCisgICAgICAgICAgICAnVHJ5OiB6eXBwZXIgaW5zdGFsbCAtQyAnLAogICAgICAgICAgICAgKQogICAgICAgICBmb3IgbGluZSBpbiBlcnJsaW5lczoKICAgICAgICAgICAgIGlmIG5vdCBsaW5lLnN0YXJ0c3dpdGgoaWdub3JlX3BhdHRlcm5zKToKQEAgLTI0OCw5ICsyOTksOCBAQAogICAgIGRlZiB0ZXN0X2RpY3RzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZGljdGlvbmFyaWVzJwogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoe30pCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih7J2Zvbyc6ICdiYXInfSkKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInsnZm9vJzogJ2JhcicsICdkb3VnbGFzJzogNDJ9IikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHsnZm9vJzogJ2Jhcid9LCAieydmb28nOiAnYmFyJ30iKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoeydmb28nOiAnYmFyJywgJ2RvdWdsYXMnOiA0Mn0sICJ7J2RvdWdsYXMnOiA0MiwgJ2Zvbyc6ICdiYXInfSIpCiAKICAgICBkZWYgdGVzdF9saXN0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIGxpc3RzJwpAQCAtMzA1LDI2ICszNTUsMzAgQEAKIAogICAgIGRlZiB0ZXN0X3R1cGxlcyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHR1cGxlcycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHR1cGxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcih0dXBsZSgpLCAnKCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKDEsKSwgJygxLCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoKCdmb28nLCAnYmFyJywgJ2JheicpKQogCiAgICAgZGVmIHRlc3Rfc2V0cyhzZWxmKToKICAgICAgICAgJ1ZlcmlmeSB0aGUgcHJldHR5LXByaW50aW5nIG9mIHNldHMnCi0gICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoKSkKKyAgICAgICAgaWYgKGdkYl9tYWpvcl92ZXJzaW9uLCBnZGJfbWlub3JfdmVyc2lvbikgPCAoNywgMyk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJwcmV0dHktcHJpbnRpbmcgb2Ygc2V0cyBuZWVkcyBnZGIgNy4zIG9yIGxhdGVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKHNldCgpLCAnc2V0KCknKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoc2V0KFsnYScsICdiJ10pLCAieydhJywgJ2InfSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihzZXQoWzQsIDUsIDZdKSwgIns0LCA1LCA2fSIpCiAKICAgICAgICAgIyBFbnN1cmUgdGhhdCB3ZSBoYW5kbGUgc2V0cyBjb250YWluaW5nIHRoZSAiZHVtbXkiIGtleSB2YWx1ZSwKICAgICAgICAgIyB3aGljaCBoYXBwZW5zIG9uIGRlbGV0aW9uOgogICAgICAgICBnZGJfcmVwciwgZ2RiX291dHB1dCA9IHNlbGYuZ2V0X2dkYl9yZXByKCcnJ3MgPSBzZXQoWydhJywnYiddKQotcy5wb3AoKQorcy5yZW1vdmUoJ2EnKQogaWQocyknJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2RiX3JlcHIsICJ7J2InfSIpCiAKICAgICBkZWYgdGVzdF9mcm96ZW5zZXRzKHNlbGYpOgogICAgICAgICAnVmVyaWZ5IHRoZSBwcmV0dHktcHJpbnRpbmcgb2YgZnJvemVuc2V0cycKLSAgICAgICAgc2VsZi5hc3NlcnRHZGJSZXByKGZyb3plbnNldCgpKQorICAgICAgICBpZiAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSA8ICg3LCAzKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInByZXR0eS1wcmludGluZyBvZiBmcm96ZW5zZXRzIG5lZWRzIGdkYiA3LjMgb3IgbGF0ZXIiKQorICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KCksICdmcm96ZW5zZXQoKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0R2RiUmVwcihmcm96ZW5zZXQoWydhJywgJ2InXSksICJmcm96ZW5zZXQoeydhJywgJ2InfSkiKQogICAgICAgICBzZWxmLmFzc2VydEdkYlJlcHIoZnJvemVuc2V0KFs0LCA1LCA2XSksICJmcm96ZW5zZXQoezQsIDUsIDZ9KSIpCiAKQEAgLTg0MSw2ICs4OTUsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiLipcbmEgPSAxXG5iID0gMlxuYyA9IDNcbi4qIikKIAogZGVmIHRlc3RfbWFpbigpOgorICAgIGlmIHN1cHBvcnQudmVyYm9zZToKKyAgICAgICAgcHJpbnQoIkdEQiB2ZXJzaW9uICVzLiVzOiIgJSAoZ2RiX21ham9yX3ZlcnNpb24sIGdkYl9taW5vcl92ZXJzaW9uKSkKKyAgICAgICAgZm9yIGxpbmUgaW4gZ2RiX3ZlcnNpb24uc3BsaXRsaW5lcygpOgorICAgICAgICAgICAgcHJpbnQoIiAiICogNCArIGxpbmUpCiAgICAgcnVuX3VuaXR0ZXN0KFByZXR0eVByaW50VGVzdHMsCiAgICAgICAgICAgICAgICAgIFB5TGlzdFRlc3RzLAogICAgICAgICAgICAgICAgICBTdGFja05hdmlnYXRpb25UZXN0cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJhdG9ycy5weQppbmRleCA5NTgwNTRhLi42MDRlMTJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyYXRvcnMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZW5lcmF0b3JzLnB5CkBAIC0xLDMgKzEsMjA0IEBACitpbXBvcnQgY29weQoraW1wb3J0IGdjCitpbXBvcnQgcGlja2xlCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCisKK2NsYXNzIEZpbmFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3RfZnJhbWVfcmVzdXJyZWN0KHNlbGYpOgorICAgICAgICAjIEEgZ2VuZXJhdG9yIGZyYW1lIGNhbiBiZSByZXN1cnJlY3RlZCBieSBhIGdlbmVyYXRvcidzIGZpbmFsaXphdGlvbi4KKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZnJhbWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmcmFtZSA9IHN5cy5fZ2V0ZnJhbWUoKQorCisgICAgICAgIGcgPSBnZW4oKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGcpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZGVsIGcKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZnJhbWUpCisgICAgICAgIGRlbCBmcmFtZQorICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorCisgICAgZGVmIHRlc3RfcmVmY3ljbGUoc2VsZik6CisgICAgICAgICMgQSBnZW5lcmF0b3IgY2F1Z2h0IGluIGEgcmVmY3ljbGUgZ2V0cyBmaW5hbGl6ZWQgYW55d2F5LgorICAgICAgICBvbGRfZ2FyYmFnZSA9IGdjLmdhcmJhZ2VbOl0KKyAgICAgICAgZmluYWxpemVkID0gRmFsc2UKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgbm9ubG9jYWwgZmluYWxpemVkCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZyA9IHlpZWxkCisgICAgICAgICAgICAgICAgeWllbGQgMQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBmaW5hbGl6ZWQgPSBUcnVlCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgZy5zZW5kKGcpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzeXMuZ2V0cmVmY291bnQoZyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmluYWxpemVkKQorICAgICAgICBkZWwgZworICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmluYWxpemVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdjLmdhcmJhZ2UsIG9sZF9nYXJiYWdlKQorCisgICAgZGVmIHRlc3RfbGFtYmRhX2dlbmVyYXRvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjMxOTI6IFRlc3QgdGhhdCBhIGxhbWJkYSByZXR1cm5pbmcgYSBnZW5lcmF0b3IgYmVoYXZlcworICAgICAgICAjIGxpa2UgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb24KKyAgICAgICAgZiA9IGxhbWJkYTogKHlpZWxkIDEpCisgICAgICAgIGRlZiBnKCk6IHJldHVybiAoeWllbGQgMSkKKworICAgICAgICAjIHRlc3QgJ3lpZWxkIGZyb20nCisgICAgICAgIGYyID0gbGFtYmRhOiAoeWllbGQgZnJvbSBnKCkpCisgICAgICAgIGRlZiBnMigpOiByZXR1cm4gKHlpZWxkIGZyb20gZygpKQorCisgICAgICAgIGYzID0gbGFtYmRhOiAoeWllbGQgZnJvbSBmKCkpCisgICAgICAgIGRlZiBnMygpOiByZXR1cm4gKHlpZWxkIGZyb20gZigpKQorCisgICAgICAgIGZvciBnZW5fZnVuIGluIChmLCBnLCBmMiwgZzIsIGYzLCBnMyk6CisgICAgICAgICAgICBnZW4gPSBnZW5fZnVuKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnZW4pLCAxKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uKSBhcyBjbToKKyAgICAgICAgICAgICAgICBnZW4uc2VuZCgyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24udmFsdWUsIDIpCisKKworY2xhc3MgR2VuZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICBnID0gZigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGNvcHkuY29weShnKQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgeWllbGQgMQorICAgICAgICBnID0gZigpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBwaWNrbGUuUGlja2xpbmdFcnJvcikpOgorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhnLCBwcm90bykKKworCitjbGFzcyBFeGNlcHRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3RzIGZvciB0aGUgaXNzdWUgIzIzMzUzOiBjaGVjayB0aGF0IHRoZSBjdXJyZW50bHkgaGFuZGxlZCBleGNlcHRpb24KKyAgICAjIGlzIGNvcnJlY3RseSBzYXZlZC9yZXN0b3JlZCBpbiBQeUV2YWxfRXZhbEZyYW1lRXgoKS4KKworICAgIGRlZiB0ZXN0X2V4Y2VwdF90aHJvdyhzZWxmKToKKyAgICAgICAgZGVmIHN0b3JlX3JhaXNlX2V4Y19nZW5lcmF0b3IoKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpWzBdLCBOb25lKQorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICAjIGV4Y2VwdGlvbiByYWlzZWQgYnkgZ2VuLnRocm93KGV4YykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpWzBdLCBWYWx1ZUVycm9yKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGV4Yy5fX2NvbnRleHRfXykKKyAgICAgICAgICAgICAgICB5aWVsZAorCisgICAgICAgICAgICAgICAgIyBlbnN1cmUgdGhhdCB0aGUgZXhjZXB0aW9uIGlzIG5vdCBsb3N0CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgICAgICAgICB5aWVsZAorCisgICAgICAgICAgICAgICAgIyB3ZSBzaG91bGQgYmUgYWJsZSB0byByYWlzZSBiYWNrIHRoZSBWYWx1ZUVycm9yCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBtYWtlID0gc3RvcmVfcmFpc2VfZXhjX2dlbmVyYXRvcigpCisgICAgICAgIG5leHQobWFrZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBleGM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgbWFrZS50aHJvdyhleGMpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBuZXh0KG1ha2UpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgY206CisgICAgICAgICAgICBuZXh0KG1ha2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNtLmV4Y2VwdGlvbi5fX2NvbnRleHRfXykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpLCAoTm9uZSwgTm9uZSwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9leGNlcHRfbmV4dChzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgICAgIHlpZWxkICJkb25lIgorCisgICAgICAgIGcgPSBnZW4oKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoZyksICJkb25lIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKSwgKE5vbmUsIE5vbmUsIE5vbmUpKQorCisgICAgZGVmIHRlc3RfZXhjZXB0X2dlbl9leGNlcHQoc2VsZik6CisgICAgICAgIGRlZiBnZW4oKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpWzBdLCBOb25lKQorICAgICAgICAgICAgICAgIHlpZWxkCisgICAgICAgICAgICAgICAgIyB3ZSBhcmUgY2FsbGVkIGZyb20gImV4Y2VwdCBWYWx1ZUVycm9yOiIsIFR5cGVFcnJvciBtdXN0CisgICAgICAgICAgICAgICAgIyBpbmhlcml0IFZhbHVlRXJyb3IgaW4gaXRzIGNvbnRleHQKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgVHlwZUVycm9yKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShleGMuX19jb250ZXh0X18pLCBWYWx1ZUVycm9yKQorICAgICAgICAgICAgIyBoZXJlIHdlIGFyZSBzdGlsbCBjYWxsZWQgZnJvbSB0aGUgImV4Y2VwdCBWYWx1ZUVycm9yOiIKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmV4Y19pbmZvKClbMF0sIFZhbHVlRXJyb3IpCisgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lzLmV4Y19pbmZvKClbMF0pCisgICAgICAgICAgICB5aWVsZCAiZG9uZSIKKworICAgICAgICBnID0gZ2VuKCkKKyAgICAgICAgbmV4dChnKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBuZXh0KGcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGcpLCAiZG9uZSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmV4Y19pbmZvKCksIChOb25lLCBOb25lLCBOb25lKSkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdF90aHJvd19leGNlcHRpb25fY29udGV4dChzZWxmKToKKyAgICAgICAgZGVmIGdlbigpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBhcmUgY2FsbGVkIGZyb20gImV4Y2VwdCBWYWx1ZUVycm9yOiIKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZXhjX2luZm8oKVswXSwgVmFsdWVFcnJvcikKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCkKKyAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmV4Y19pbmZvKClbMF0sIFR5cGVFcnJvcikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoZXhjLl9fY29udGV4dF9fKSwgVmFsdWVFcnJvcikKKyAgICAgICAgICAgICMgd2UgYXJlIHN0aWxsIGNhbGxlZCBmcm9tICJleGNlcHQgVmFsdWVFcnJvcjoiCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpWzBdLCBWYWx1ZUVycm9yKQorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHN5cy5leGNfaW5mbygpWzBdKQorICAgICAgICAgICAgeWllbGQgImRvbmUiCisKKyAgICAgICAgZyA9IGdlbigpCisgICAgICAgIG5leHQoZykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgIGcudGhyb3coZXhjKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChnKSwgImRvbmUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGNfaW5mbygpLCAoTm9uZSwgTm9uZSwgTm9uZSkpCisKKwogdHV0b3JpYWxfdGVzdHMgPSAiIiIKIExldCdzIHRyeSBhIHNpbXBsZSBnZW5lcmF0b3I6CiAKQEAgLTM4NCw4ICs1ODUsOCBAQAogPj4+IFtzIGZvciBzIGluIGRpcihpKSBpZiBub3Qgcy5zdGFydHN3aXRoKCdfJyldCiBbJ2Nsb3NlJywgJ2dpX2NvZGUnLCAnZ2lfZnJhbWUnLCAnZ2lfcnVubmluZycsICdzZW5kJywgJ3Rocm93J10KID4+PiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgSEFWRV9ET0NTVFJJTkdTCi0+Pj4gcHJpbnQoaS5fX25leHRfXy5fX2RvY19fIGlmIEhBVkVfRE9DU1RSSU5HUyBlbHNlICd4Ll9fbmV4dF9fKCkgPD09PiBuZXh0KHgpJykKLXguX19uZXh0X18oKSA8PT0+IG5leHQoeCkKKz4+PiBwcmludChpLl9fbmV4dF9fLl9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ0ltcGxlbWVudCBuZXh0KHNlbGYpLicpCitJbXBsZW1lbnQgbmV4dChzZWxmKS4KID4+PiBpdGVyKGkpIGlzIGkKIFRydWUKID4+PiBpbXBvcnQgdHlwZXMKQEAgLTE3MjksOSArMTkzMCw3IEBACiA+Pj4gZyA9IGYoKQogPj4+IG5leHQoZykKID4+PiBkZWwgZwotPj4+IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdGFydHN3aXRoKAotLi4uICAgICAiRXhjZXB0aW9uIFJ1bnRpbWVFcnJvcjogJ2dlbmVyYXRvciBpZ25vcmVkIEdlbmVyYXRvckV4aXQnIGluICIKLS4uLiApCis+Pj4gIlJ1bnRpbWVFcnJvcjogZ2VuZXJhdG9yIGlnbm9yZWQgR2VuZXJhdG9yRXhpdCIgaW4gc3lzLnN0ZGVyci5nZXR2YWx1ZSgpCiBUcnVlCiA+Pj4gc3lzLnN0ZGVyciA9IG9sZAogCkBAIC0xODQxLDIyICsyMDQwLDIzIEBACiAuLi4gICAgIHN5cy5zdGRlcnIgPSBpby5TdHJpbmdJTygpCiAuLi4gICAgIGNsYXNzIExlYWtlcjoKIC4uLiAgICAgICAgIGRlZiBfX2RlbF9fKHNlbGYpOgotLi4uICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorLi4uICAgICAgICAgICAgIGRlZiBpbnZva2UobWVzc2FnZSk6CisuLi4gICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcihtZXNzYWdlKQorLi4uICAgICAgICAgICAgIGludm9rZSgidGVzdCIpCiAuLi4KIC4uLiAgICAgbCA9IExlYWtlcigpCiAuLi4gICAgIGRlbCBsCiAuLi4gICAgIGVyciA9IHN5cy5zdGRlcnIuZ2V0dmFsdWUoKS5zdHJpcCgpCi0uLi4gICAgIGVyci5zdGFydHN3aXRoKAotLi4uICAgICAgICAgIkV4Y2VwdGlvbiBSdW50aW1lRXJyb3I6IFJ1bnRpbWVFcnJvcigpIGluIDwiCi0uLi4gICAgICkKLS4uLiAgICAgZXJyLmVuZHN3aXRoKCI+IGlnbm9yZWQiKQotLi4uICAgICBsZW4oZXJyLnNwbGl0bGluZXMoKSkKKy4uLiAgICAgIkV4Y2VwdGlvbiBpZ25vcmVkIGluIiBpbiBlcnIKKy4uLiAgICAgIlJ1bnRpbWVFcnJvcjogdGVzdCIgaW4gZXJyCisuLi4gICAgICJUcmFjZWJhY2siIGluIGVycgorLi4uICAgICAiaW4gaW52b2tlIiBpbiBlcnIKIC4uLiBmaW5hbGx5OgogLi4uICAgICBzeXMuc3RkZXJyID0gb2xkCiBUcnVlCiBUcnVlCi0xCi0KK1RydWUKK1RydWUKIAogCiBUaGVzZSByZWZsZWFrIHRlc3RzIHNob3VsZCBwZXJoYXBzIGJlIGluIGEgdGVzdGZpbGUgb2YgdGhlaXIgb3duLApAQCAtMTg4MSw2ICsyMDgxLDcgQEAKICMgc28gdGhpcyB3b3JrcyBhcyBleHBlY3RlZCBpbiBib3RoIHdheXMgb2YgcnVubmluZyByZWdydGVzdC4KIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHRlc3RfZ2VuZXJhdG9ycworICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogICAgIHN1cHBvcnQucnVuX2RvY3Rlc3QodGVzdF9nZW5lcmF0b3JzLCB2ZXJib3NlKQogCiAjIFRoaXMgcGFydCBpc24ndCBuZWVkZWQgZm9yIHJlZ3J0ZXN0LCBidXQgZm9yIHJ1bm5pbmcgdGhlIHRlc3QgZGlyZWN0bHkuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9nZW5lcmljcGF0aC5weQppbmRleCBiNTA2OGU0Li5lNTllZDRkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmVyaWNwYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXJpY3BhdGgucHkKQEAgLTE4OCwxMiArMTg4LDkzIEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoc3VwcG9ydC5URVNURk4pCiAKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIF9jcmVhdGVfZmlsZShmaWxlbmFtZSk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYidmb28nKQorCisgICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZWZpbGUodGVzdF9mbiwgdGVzdF9mbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuKQorCisgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluaworICAgIGRlZiB0ZXN0X3NhbWVmaWxlX29uX3N5bWxpbmsoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3Rfc2FtZWZpbGVfb25fbGlua19mdW5jKG9zLnN5bWxpbmspCisKKyAgICBkZWYgdGVzdF9zYW1lZmlsZV9vbl9saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhvcy5saW5rKQorCisgICAgZGVmIF90ZXN0X3NhbWVmaWxlX29uX2xpbmtfZnVuYyhzZWxmLCBmdW5jKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgorICAgICAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgorICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjEpCisKKyAgICAgICAgICAgIGZ1bmModGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYucGF0aG1vZHVsZS5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjEpCisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCisKKyAgICBkZWYgdGVzdF9zYW1lc3RhdChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdGVzdF9mbiA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQorICAgICAgICAgICAgdGVzdF9mbnMgPSBbdGVzdF9mbl0qMgorICAgICAgICAgICAgc3RhdHMgPSBtYXAob3Muc3RhdCwgdGVzdF9mbnMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5yZW1vdmUodGVzdF9mbikKKworICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKKyAgICBkZWYgdGVzdF9zYW1lc3RhdF9vbl9zeW1saW5rKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3NhbWVzdGF0X29uX2xpbmtfZnVuYyhvcy5zeW1saW5rKQorCisgICAgZGVmIHRlc3Rfc2FtZXN0YXRfb25fbGluayhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMob3MubGluaykKKworICAgIGRlZiBfdGVzdF9zYW1lc3RhdF9vbl9saW5rX2Z1bmMoc2VsZiwgZnVuYyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKKyAgICAgICAgICAgIHRlc3RfZm4yID0gc3VwcG9ydC5URVNURk4gKyAiMiIKKyAgICAgICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQorICAgICAgICAgICAgdGVzdF9mbnMgPSAodGVzdF9mbjEsIHRlc3RfZm4yKQorICAgICAgICAgICAgZnVuYygqdGVzdF9mbnMpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZXN0YXQoKnN0YXRzKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZSh0ZXN0X2ZuMikKKworICAgICAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCisgICAgICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KCpzdGF0cykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5wYXRobW9kdWxlLnNhbWVzdGF0KQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4xKQorICAgICAgICAgICAgb3MucmVtb3ZlKHRlc3RfZm4yKQorCisgICAgZGVmIHRlc3Rfc2FtZW9wZW5maWxlKHNlbGYpOgorICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCisgICAgICAgIHdpdGggb3BlbihmbmFtZSwgIndiIikgYXMgYSwgb3BlbihmbmFtZSwgIndiIikgYXMgYjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnBhdGhtb2R1bGUuc2FtZW9wZW5maWxlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhLmZpbGVubygpLCBiLmZpbGVubygpKSkKKwogY2xhc3MgVGVzdEdlbmVyaWNUZXN0KEdlbmVyaWNUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBJc3N1ZSAxNjg1MjogR2VuZXJpY1Rlc3QgY2FuJ3QgaW5oZXJpdCBmcm9tIHVuaXR0ZXN0LlRlc3RDYXNlCiAgICAgIyBmb3IgdGVzdCBkaXNjb3ZlcnkgcHVycG9zZXM7IENvbW1vblRlc3QgaW5oZXJpdHMgZnJvbSBHZW5lcmljVGVzdAogICAgICMgYW5kIGlzIG9ubHkgbWVhbnQgdG8gYmUgaW5oZXJpdGVkIGJ5IG90aGVycy4KICAgICBwYXRobW9kdWxlID0gZ2VuZXJpY3BhdGgKIAorCiAjIEZvbGxvd2luZyBUZXN0Q2FzZSBpcyBub3Qgc3VwcG9zZWQgdG8gYmUgcnVuIGZyb20gdGVzdF9nZW5lcmljcGF0aC4KICMgSXQgaXMgaW5oZXJpdGVkIGJ5IG90aGVyIHRlc3QgbW9kdWxlcyAobWFjcGF0aCwgbnRwYXRoLCBwb3NpeHBhdGgpLgogCkBAIC0zNDgsNyArNDI5LDYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5lZWQgc3VwcG9ydC5URVNURk5fTk9OQVNDSUkiKQogCi0gICAgICAgICMgVGVzdCBub24tQVNDSUksIG5vbi1VVEY4IGJ5dGVzIGluIHRoZSBwYXRoLgogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChuYW1lKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2VuZXhwcy5weQppbmRleCAyMDNiMzM2Li5mYjUzMWQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dlbmV4cHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZW5leHBzLnB5CkBAIC0yMjIsOCArMjIyLDggQEAKICAgICBUcnVlCiAKICAgICA+Pj4gZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IEhBVkVfRE9DU1RSSU5HUwotICAgID4+PiBwcmludChnLl9fbmV4dF9fLl9fZG9jX18gaWYgSEFWRV9ET0NTVFJJTkdTIGVsc2UgJ3guX19uZXh0X18oKSA8PT0+IG5leHQoeCknKQotICAgIHguX19uZXh0X18oKSA8PT0+IG5leHQoeCkKKyAgICA+Pj4gcHJpbnQoZy5fX25leHRfXy5fX2RvY19fIGlmIEhBVkVfRE9DU1RSSU5HUyBlbHNlICdJbXBsZW1lbnQgbmV4dChzZWxmKS4nKQorICAgIEltcGxlbWVudCBuZXh0KHNlbGYpLgogICAgID4+PiBpbXBvcnQgdHlwZXMKICAgICA+Pj4gaXNpbnN0YW5jZShnLCB0eXBlcy5HZW5lcmF0b3JUeXBlKQogICAgIFRydWUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkgYi9MaWIvdGVzdC90ZXN0X2dldGFyZ3MyLnB5CmluZGV4IGZlNjRlZTEuLjE4NTNhMmQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2V0YXJnczIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRhcmdzMi5weQpAQCAtMywzOCArMyw0MCBAQAogIyBTa2lwIHRoaXMgdGVzdCBpZiB0aGUgX3Rlc3RjYXBpIG1vZHVsZSBpc24ndCBhdmFpbGFibGUuCiBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190ZXN0Y2FwaScpCiBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19rZXl3b3JkcywgZ2V0YXJnc19rZXl3b3JkX29ubHkKK3RyeToKKyAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBnZXRhcmdzX0wgPSBOb25lICMgUFlfTE9OR19MT05HIG5vdCBhdmFpbGFibGUKIAotIiIiCi0+IEhvdyBhYm91dCB0aGUgZm9sbG93aW5nIGNvdW50ZXJwcm9wb3NhbC4gVGhpcyBhbHNvIGNoYW5nZXMgc29tZSBvZgotPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KLT4KLT4gQ29kZSBDIHR5cGUgUmFuZ2UgY2hlY2sKLT4KLT4gYiB1bnNpZ25lZCBjaGFyIDAuLlVDSEFSX01BWAotPiBoIHNpZ25lZCBzaG9ydCBTSFJUX01JTi4uU0hSVF9NQVgKLT4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKLT4gSCB1bnNpZ25lZCBzaG9ydCBub25lICoqCi0+IGsgKiB1bnNpZ25lZCBsb25nIG5vbmUKLT4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAotCi0KLT4gaSBpbnQgSU5UX01JTi4uSU5UX01BWAotPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCi0KLT4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCi0+IEwgbG9uZyBsb25nIExMT05HX01JTi4uTExPTkdfTUFYCi0KLT4gTm90ZXM6Ci0+Ci0+ICogTmV3IGZvcm1hdCBjb2Rlcy4KLT4KLT4gKiogQ2hhbmdlZCBmcm9tIHByZXZpb3VzICJyYW5nZS1hbmQtYS1oYWxmIiB0byAibm9uZSI7IHRoZQotPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgotCi1QbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgotdW5zaWduZWQgbG9uZyBhbmQgUHlJbnRfQXNMb25nTG9uZ01hc2soKSAtPiB1bnNpZ25lZAotbG9uZyBsb25nIChpZiB0aGF0IGV4aXN0cykuCi0iIiIKKyMgPiBIb3cgYWJvdXQgdGhlIGZvbGxvd2luZyBjb3VudGVycHJvcG9zYWwuIFRoaXMgYWxzbyBjaGFuZ2VzIHNvbWUgb2YKKyMgPiB0aGUgb3RoZXIgZm9ybWF0IGNvZGVzIHRvIGJlIGEgbGl0dGxlIG1vcmUgcmVndWxhci4KKyMgPgorIyA+IENvZGUgQyB0eXBlIFJhbmdlIGNoZWNrCisjID4KKyMgPiBiIHVuc2lnbmVkIGNoYXIgMC4uVUNIQVJfTUFYCisjID4gaCBzaWduZWQgc2hvcnQgU0hSVF9NSU4uLlNIUlRfTUFYCisjID4gQiB1bnNpZ25lZCBjaGFyIG5vbmUgKioKKyMgPiBIIHVuc2lnbmVkIHNob3J0IG5vbmUgKioKKyMgPiBrICogdW5zaWduZWQgbG9uZyBub25lCisjID4gSSAqIHVuc2lnbmVkIGludCAwLi5VSU5UX01BWAorIworIworIyA+IGkgaW50IElOVF9NSU4uLklOVF9NQVgKKyMgPiBsIGxvbmcgTE9OR19NSU4uLkxPTkdfTUFYCisjCisjID4gSyAqIHVuc2lnbmVkIGxvbmcgbG9uZyBub25lCisjID4gTCBsb25nIGxvbmcgTExPTkdfTUlOLi5MTE9OR19NQVgKKyMKKyMgPiBOb3RlczoKKyMgPgorIyA+ICogTmV3IGZvcm1hdCBjb2Rlcy4KKyMgPgorIyA+ICoqIENoYW5nZWQgZnJvbSBwcmV2aW91cyAicmFuZ2UtYW5kLWEtaGFsZiIgdG8gIm5vbmUiOyB0aGUKKyMgPiByYW5nZS1hbmQtYS1oYWxmIGNoZWNraW5nIHdhc24ndCBwYXJ0aWN1bGFybHkgdXNlZnVsLgorIworIyBQbHVzIGEgQyBBUEkgb3IgdHdvLCBlLmcuIFB5SW50X0FzTG9uZ01hc2soKSAtPgorIyB1bnNpZ25lZCBsb25nIGFuZCBQeUludF9Bc0xvbmdMb25nTWFzaygpIC0+IHVuc2lnbmVkCisjIGxvbmcgbG9uZyAoaWYgdGhhdCBleGlzdHMpLgogCiBMQVJHRSA9IDB4N0ZGRkZGRkYKIFZFUllfTEFSR0UgPSAweEZGMDAwMDEyMTIxMjEyMTIxMjEyMTI0MgpAQCAtNzcsNyArNzksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2IoSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfYihJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2IsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfYihCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19iKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19iKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19iLCAtMSkKQEAgLTk1LDcgKzk4LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg5OSwgZ2V0YXJnc19CKEludCgpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0IoSW50U3ViY2xhc3MoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXJnc19CLCBCYWRJbnQoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX0IoQmFkSW50MigpKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfQihCYWRJbnQyKCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfQihCYWRJbnQzKCkpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVUNIQVJfTUFYLCBnZXRhcmdzX0IoLTEpKQpAQCAtMTEzLDcgKzExNyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfSChJbnQoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19IKEludFN1YmNsYXNzKCkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfSCwgQmFkSW50KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19IKEJhZEludDIoKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX0goQmFkSW50MigpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX0goQmFkSW50MygpKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFVTSFJUX01BWCwgZ2V0YXJnc19IKC0xKSkKQEAgLTEzMiw3ICsxMzcsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0koSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfSShJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0ksIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfSShCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19JKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19JKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChVSU5UX01BWCwgZ2V0YXJnc19JKC0xKSkKQEAgLTE3Miw3ICsxNzgsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2goSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfaChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2gsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfaChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19oKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19oKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19oLCBTSFJUX01JTi0xKQpAQCAtMTkwLDcgKzE5Nyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoOTksIGdldGFyZ3NfaShJbnQoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19pKEludFN1YmNsYXNzKCkpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGdldGFyZ3NfaSwgQmFkSW50KCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19pKEJhZEludDIoKSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBnZXRhcmdzX2koQmFkSW50MigpKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBnZXRhcmdzX2koQmFkSW50MygpKSkKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBnZXRhcmdzX2ksIElOVF9NSU4tMSkKQEAgLTIwOCw3ICsyMTYsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX2woSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfbChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX2wsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfbChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19sKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19sKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19sLCBMT05HX01JTi0xKQpAQCAtMjM5LDYgKzI0OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIGdldGFyZ3NfbiwgVkVSWV9MQVJHRSkKIAogCitAdW5pdHRlc3Quc2tpcElmKGdldGFyZ3NfTCBpcyBOb25lLCAnUFlfTE9OR19MT05HIGlzIG5vdCBhdmFpbGFibGUnKQogY2xhc3MgTG9uZ0xvbmdfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X0woc2VsZik6CiAgICAgICAgIGZyb20gX3Rlc3RjYXBpIGltcG9ydCBnZXRhcmdzX0wKQEAgLTI0OSw3ICsyNTksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDk5LCBnZXRhcmdzX0woSW50KCkpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGdldGFyZ3NfTChJbnRTdWJjbGFzcygpKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRhcmdzX0wsIEJhZEludCgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIGdldGFyZ3NfTChCYWRJbnQyKCkpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgZ2V0YXJnc19MKEJhZEludDIoKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgZ2V0YXJnc19MKEJhZEludDMoKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZ2V0YXJnc19MLCBMTE9OR19NSU4tMSkKQEAgLTYwMCwyNCArNjExLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZ2V0YXJnc19aX2hhc2goTm9uZSkpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gWwotICAgICAgICBTaWduZWRfVGVzdENhc2UsCi0gICAgICAgIFVuc2lnbmVkX1Rlc3RDYXNlLAotICAgICAgICBCb29sZWFuX1Rlc3RDYXNlLAotICAgICAgICBUdXBsZV9UZXN0Q2FzZSwKLSAgICAgICAgS2V5d29yZHNfVGVzdENhc2UsCi0gICAgICAgIEtleXdvcmRPbmx5X1Rlc3RDYXNlLAotICAgICAgICBCeXRlc19UZXN0Q2FzZSwKLSAgICAgICAgVW5pY29kZV9UZXN0Q2FzZSwKLSAgICBdCi0gICAgdHJ5OgotICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgZ2V0YXJnc19MLCBnZXRhcmdzX0sKLSAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgIHBhc3MgIyBQWV9MT05HX0xPTkcgbm90IGF2YWlsYWJsZQotICAgIGVsc2U6Ci0gICAgICAgIHRlc3RzLmFwcGVuZChMb25nTG9uZ19UZXN0Q2FzZSkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0cGFzcy5weQppbmRleCAxNzMxYmQ0Li4zNDUyZTQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldHBhc3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXRwYXNzLnB5CkBAIC0xLDcgKzEsNyBAQAogaW1wb3J0IGdldHBhc3MKIGltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGlvIGltcG9ydCBCeXRlc0lPLCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8sIFRleHRJT1dyYXBwZXIKIGZyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCkBAIC02OSw2ICs2OSwxNCBAQAogICAgICAgICBnZXRwYXNzLl9yYXdfaW5wdXQoc3RyZWFtPVN0cmluZ0lPKCkpCiAgICAgICAgIG1vY2tfaW5wdXQucmVhZGxpbmUuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKQogCisgICAgQG1vY2sucGF0Y2goJ3N5cy5zdGRpbicpCisgICAgZGVmIHRlc3RfdXNlc19zdGRpbl9hc19kaWZmZXJlbnRfbG9jYWxlKHNlbGYsIG1vY2tfaW5wdXQpOgorICAgICAgICBzdHJlYW0gPSBUZXh0SU9XcmFwcGVyKEJ5dGVzSU8oKSwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgbW9ja19pbnB1dC5yZWFkbGluZS5yZXR1cm5fdmFsdWUgPSAiSGFzw4XigJpvOiAiCisgICAgICAgIGdldHBhc3MuX3Jhd19pbnB1dChwcm9tcHQ9Ikhhc8OF4oCabzogIixzdHJlYW09c3RyZWFtKQorICAgICAgICBtb2NrX2lucHV0LnJlYWRsaW5lLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKworCiAgICAgZGVmIHRlc3RfcmFpc2VzX29uX2VtcHR5X2lucHV0KHNlbGYpOgogICAgICAgICBpbnB1dCA9IFN0cmluZ0lPKCcnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZ2V0cGFzcy5fcmF3X2lucHV0LCBpbnB1dD1pbnB1dCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weSBiL0xpYi90ZXN0L3Rlc3RfZ2V0dGV4dC5weQppbmRleCAzZmJjNTBkLi44MGIxOGRhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2dldHRleHQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nZXR0ZXh0LnB5CkBAIC03Nyw4ICs3NywxNCBAQAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc2VsZi5lbnYuX19leGl0X18oKQogICAgICAgICBkZWwgc2VsZi5lbnYKLSAgICAgICAgc2h1dGlsLnJtdHJlZShvcy5wYXRoLnNwbGl0KExPQ0FMRURJUilbMF0pCisgICAgICAgIHN1cHBvcnQucm10cmVlKG9zLnBhdGguc3BsaXQoTE9DQUxFRElSKVswXSkKIAorR05VX01PX0RBVEFfSVNTVUVfMTc4OTggPSBiJycnXAorM2hJRWxRQUFBQUFCQUFBQUhBQUFBQ1FBQUFBQUFBQUFBQUFBQUFBQUFBQXNBQUFBZ2dBQUFDMEFBQUFBVUd4MWNtRnNMVVp2Y20xegorT2lCdWNHeDFjbUZzY3oweU95QndiSFZ5WVd3OUtHNGdJVDBnTVNrN0NpTXRJeTBqTFNNdEl5QWdiV1Z6YzJGblpYTXVjRzhnS0VWaworV0NCVGRIVmthVzhwSUNBakxTTXRJeTBqTFNNS1EyOXVkR1Z1ZEMxVWVYQmxPaUIwWlhoMEwzQnNZV2x1T3lCamFHRnljMlYwUFZWVQorUmkwNENnQT0KKycnJwogCiBjbGFzcyBHZXR0ZXh0VGVzdENhc2UxKEdldHRleHRCYXNlVGVzdCk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMzc3LDYgKzM4MywxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGYsIG9iamVjdCgpKQogCiAKK2NsYXNzIEdOVVRyYW5zbGF0aW9uUGFyc2luZ1Rlc3QoR2V0dGV4dEJhc2VUZXN0KToKKyAgICBkZWYgdGVzdF9wbHVyYWxfZm9ybV9lcnJvcl9pc3N1ZTE3ODk4KHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oTU9GSUxFLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlKGJhc2U2NC5kZWNvZGVieXRlcyhHTlVfTU9fREFUQV9JU1NVRV8xNzg5OCkpCisgICAgICAgIHdpdGggb3BlbihNT0ZJTEUsICdyYicpIGFzIGZwOgorICAgICAgICAgICAgIyBJZiB0aGlzIHJ1bnMgY2xlYW5seSwgdGhlIGJ1ZyBpcyBmaXhlZC4KKyAgICAgICAgICAgIHQgPSBnZXR0ZXh0LkdOVVRyYW5zbGF0aW9ucyhmcCkKKwogCiBjbGFzcyBVbmljb2RlVHJhbnNsYXRpb25zVGVzdChHZXR0ZXh0QmFzZVRlc3QpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTU1MiwzICs1NjYsMTYgQEAKICJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBxdW90ZWQtcHJpbnRhYmxlXG4iCiAiR2VuZXJhdGVkLUJ5OiBweWdldHRleHQucHkgMS4zXG4iCiAnJycKKworIworIyBtZXNzYWdlcy5wbywgdXNlZCBmb3IgYnVnIDE3ODk4CisjCisKKycnJworIyB0ZXN0IGZpbGUgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzg5OAorbXNnaWQgIiIKK21zZ3N0ciAiIgorIlBsdXJhbC1Gb3JtczogbnBsdXJhbHM9MjsgcGx1cmFsPShuICE9IDEpO1xuIgorIiMtIy0jLSMtIyAgbWVzc2FnZXMucG8gKEVkWCBTdHVkaW8pICAjLSMtIy0jLSNcbiIKKyJDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLThcbiIKKycnJwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9nbG9iLnB5IGIvTGliL3Rlc3QvdGVzdF9nbG9iLnB5CmluZGV4IGViOWFlYjUuLmE1YWI4ZDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ2xvYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dsb2IucHkKQEAgLTE2OSw2ICsxNjksMjggQEAKICAgICAgICAgZXEoZ2xvYi5nbG9iKCdcXFxcKlxcKlxcJyksIFtdKQogICAgICAgICBlcShnbG9iLmdsb2IoYidcXFxcKlxcKlxcJyksIFtdKQogCisgICAgZGVmIGNoZWNrX2VzY2FwZShzZWxmLCBhcmcsIGV4cGVjdGVkKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iLmVzY2FwZShhcmcpLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iLmVzY2FwZShvcy5mc2VuY29kZShhcmcpKSwgb3MuZnNlbmNvZGUoZXhwZWN0ZWQpKQorCisgICAgZGVmIHRlc3RfZXNjYXBlKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfZXNjYXBlCisgICAgICAgIGNoZWNrKCdhYmMnLCAnYWJjJykKKyAgICAgICAgY2hlY2soJ1snLCAnW1tdJykKKyAgICAgICAgY2hlY2soJz8nLCAnWz9dJykKKyAgICAgICAgY2hlY2soJyonLCAnWypdJykKKyAgICAgICAgY2hlY2soJ1tbXy8qPyovX11dJywgJ1tbXVtbXV8vWypdWz9dWypdL19dXScpCisgICAgICAgIGNoZWNrKCcvW1tfLyo/Ki9fXV0vJywgJy9bW11bW11fL1sqXVs/XVsqXS9fXV0vJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdCIpCisgICAgZGVmIHRlc3RfZXNjYXBlX3dpbmRvd3Moc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19lc2NhcGUKKyAgICAgICAgY2hlY2soJz86PycsICc/Ols/XScpCisgICAgICAgIGNoZWNrKCcqOionLCAnKjpbKl0nKQorICAgICAgICBjaGVjayhyJ1xcP1xjOlw/JywgcidcXD9cYzpcWz9dJykKKyAgICAgICAgY2hlY2socidcXCpcKlwqJywgcidcXCpcKlxbKl0nKQorICAgICAgICBjaGVjaygnLy8/L2M6Lz8nLCAnLy8/L2M6L1s/XScpCisgICAgICAgIGNoZWNrKCcvLyovKi8qJywgJy8vKi8qL1sqXScpCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoR2xvYlRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5IGIvTGliL3Rlc3QvdGVzdF9ncmFtbWFyLnB5CmluZGV4IDZiMzI2YmQuLjI1MDQ1MjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfZ3JhbW1hci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2dyYW1tYXIucHkKQEAgLTgwLDYgKzgwLDEyIEBACiAgICAgICAgIHggPSAuM2UxNAogICAgICAgICB4ID0gMy4xZTQKIAorICAgIGRlZiB0ZXN0X2Zsb2F0X2V4cG9uZW50X3Rva2VuaXphdGlvbihzZWxmKToKKyAgICAgICAgIyBTZWUgaXNzdWUgMjE2NDIuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSBpZiAxZWxzZSAwLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEgaWYgMGVsc2UgMCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsICIwIGlmIDFFbHNlIDAiKQorCiAgICAgZGVmIHRlc3Rfc3RyaW5nX2xpdGVyYWxzKHNlbGYpOgogICAgICAgICB4ID0gJyc7IHkgPSAiIjsgc2VsZi5hc3NlcnRUcnVlKGxlbih4KSA9PSAwIGFuZCB4ID09IHkpCiAgICAgICAgIHggPSAnXCcnOyB5ID0gIiciOyBzZWxmLmFzc2VydFRydWUobGVuKHgpID09IDEgYW5kIHggPT0geSBhbmQgb3JkKHgpID09IDM5KQpAQCAtMTk4LDcgKzIwNCw5IEBACiAgICAgICAgIGQwMSgpCiAgICAgICAgIGQwMSgxKQogICAgICAgICBkMDEoKigxLCkpCisgICAgICAgIGQwMSgqW10gb3IgWzJdKQogICAgICAgICBkMDEoKip7J2EnOjJ9KQorICAgICAgICBkMDEoKip7J2EnOjJ9IG9yIHt9KQogICAgICAgICBkZWYgZDExKGEsIGI9MSk6IHBhc3MKICAgICAgICAgZDExKDEpCiAgICAgICAgIGQxMSgxLCAyKQpAQCAtMjk2LDI0ICszMDQsMzEgQEAKICAgICAgICAgIyBhcmd1bWVudCBhbm5vdGF0aW9uIHRlc3RzCiAgICAgICAgIGRlZiBmKHgpIC0+IGxpc3Q6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fYW5ub3RhdGlvbnNfXywgeydyZXR1cm4nOiBsaXN0fSkKLSAgICAgICAgZGVmIGYoeDppbnQpOiBwYXNzCisgICAgICAgIGRlZiBmKHg6IGludCk6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fYW5ub3RhdGlvbnNfXywgeyd4JzogaW50fSkKLSAgICAgICAgZGVmIGYoKng6c3RyKTogcGFzcworICAgICAgICBkZWYgZigqeDogc3RyKTogcGFzcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuX19hbm5vdGF0aW9uc19fLCB7J3gnOiBzdHJ9KQotICAgICAgICBkZWYgZigqKng6ZmxvYXQpOiBwYXNzCisgICAgICAgIGRlZiBmKCoqeDogZmxvYXQpOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Fubm90YXRpb25zX18sIHsneCc6IGZsb2F0fSkKLSAgICAgICAgZGVmIGYoeCwgeToxKzIpOiBwYXNzCisgICAgICAgIGRlZiBmKHgsIHk6IDErMik6IHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLl9fYW5ub3RhdGlvbnNfXywgeyd5JzogM30pCi0gICAgICAgIGRlZiBmKGEsIGI6MSwgYzoyLCBkKTogcGFzcworICAgICAgICBkZWYgZihhLCBiOiAxLCBjOiAyLCBkKTogcGFzcwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuX19hbm5vdGF0aW9uc19fLCB7J2InOiAxLCAnYyc6IDJ9KQotICAgICAgICBkZWYgZihhLCBiOjEsIGM6MiwgZCwgZTozPTQsIGY9NSwgKmc6Nik6IHBhc3MKKyAgICAgICAgZGVmIGYoYSwgYjogMSwgYzogMiwgZCwgZTogMyA9IDQsIGY9NSwgKmc6IDYpOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Fubm90YXRpb25zX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsnYic6IDEsICdjJzogMiwgJ2UnOiAzLCAnZyc6IDZ9KQotICAgICAgICBkZWYgZihhLCBiOjEsIGM6MiwgZCwgZTozPTQsIGY9NSwgKmc6NiwgaDo3LCBpPTgsIGo6OT0xMCwKLSAgICAgICAgICAgICAgKiprOjExKSAtPiAxMjogcGFzcworICAgICAgICAgICAgICAgICAgICAgICAgIHsnYic6IDEsICdjJzogMiwgJ2UnOiAzLCAnZyc6IDZ9KQorICAgICAgICBkZWYgZihhLCBiOiAxLCBjOiAyLCBkLCBlOiAzID0gNCwgZj01LCAqZzogNiwgaDogNywgaT04LCBqOiA5ID0gMTAsCisgICAgICAgICAgICAgICoqazogMTEpIC0+IDEyOiBwYXNzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5fX2Fubm90YXRpb25zX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHsnYic6IDEsICdjJzogMiwgJ2UnOiAzLCAnZyc6IDYsICdoJzogNywgJ2onOiA5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2snOiAxMSwgJ3JldHVybic6IDEyfSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J2InOiAxLCAnYyc6IDIsICdlJzogMywgJ2cnOiA2LCAnaCc6IDcsICdqJzogOSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2snOiAxMSwgJ3JldHVybic6IDEyfSkKKyAgICAgICAgIyBDaGVjayBmb3IgaXNzdWUgIzIwNjI1IC0tIGFubm90YXRpb25zIG1hbmdsaW5nCisgICAgICAgIGNsYXNzIFNwYW06CisgICAgICAgICAgICBkZWYgZihzZWxmLCAqLCBfX2t3OiAxKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIEhhbShTcGFtKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFNwYW0uZi5fX2Fubm90YXRpb25zX18sIHsnX1NwYW1fX2t3JzogMX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSGFtLmYuX19hbm5vdGF0aW9uc19fLCB7J19TcGFtX19rdyc6IDF9KQogICAgICAgICAjIENoZWNrIGZvciBTRiBCdWcgIzE2OTcyNDggLSBtaXhpbmcgZGVjb3JhdG9ycyBhbmQgYSByZXR1cm4gYW5ub3RhdGlvbgogICAgICAgICBkZWYgbnVsbCh4KTogcmV0dXJuIHgKICAgICAgICAgQG51bGwKQEAgLTM3Nyw2ICszOTIsMzEgQEAKICAgICAgICAgY2hlY2tfc3ludGF4X2Vycm9yKHNlbGYsICJ4ICsgMSA9IDEiKQogICAgICAgICBjaGVja19zeW50YXhfZXJyb3Ioc2VsZiwgImEgKyAxID0gYiArIDIiKQogCisgICAgIyBDaGVjayB0aGUgaGV1cmlzdGljIGZvciBwcmludCAmIGV4ZWMgY292ZXJzIHNpZ25pZmljYW50IGNhc2VzCisgICAgIyBBcyB3ZWxsIGFzIHBsYWNpbmcgc29tZSBsaW1pdHMgb24gZmFsc2UgcG9zaXRpdmVzCisgICAgZGVmIHRlc3RfZm9ybWVyX3N0YXRlbWVudHNfcmVmZXJfdG9fYnVpbHRpbnMoc2VsZik6CisgICAgICAgIGtleXdvcmRzID0gInByaW50IiwgImV4ZWMiCisgICAgICAgICMgQ2FzZXMgd2hlcmUgd2Ugd2FudCB0aGUgY3VzdG9tIGVycm9yCisgICAgICAgIGNhc2VzID0gWworICAgICAgICAgICAgInt9IGZvbyIsCisgICAgICAgICAgICAie30ge3sxOmZvb319IiwKKyAgICAgICAgICAgICJpZiAxOiB7fSBmb28iLAorICAgICAgICAgICAgImlmIDE6IHt9IHt7MTpmb299fSIsCisgICAgICAgICAgICAiaWYgMTpcbiAgICB7fSBmb28iLAorICAgICAgICAgICAgImlmIDE6XG4gICAge30ge3sxOmZvb319IiwKKyAgICAgICAgXQorICAgICAgICBmb3Iga2V5d29yZCBpbiBrZXl3b3JkczoKKyAgICAgICAgICAgIGN1c3RvbV9tc2cgPSAiY2FsbCB0byAne30nIi5mb3JtYXQoa2V5d29yZCkKKyAgICAgICAgICAgIGZvciBjYXNlIGluIGNhc2VzOgorICAgICAgICAgICAgICAgIHNvdXJjZSA9IGNhc2UuZm9ybWF0KGtleXdvcmQpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoc291cmNlPXNvdXJjZSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgY3VzdG9tX21zZyk6CisgICAgICAgICAgICAgICAgICAgICAgICBleGVjKHNvdXJjZSkKKyAgICAgICAgICAgICAgICBzb3VyY2UgPSBzb3VyY2UucmVwbGFjZSgiZm9vIiwgIihmb28uKSIpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qoc291cmNlPXNvdXJjZSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgImludmFsaWQgc3ludGF4Iik6CisgICAgICAgICAgICAgICAgICAgICAgICBleGVjKHNvdXJjZSkKKwogICAgIGRlZiB0ZXN0X2RlbF9zdG10KHNlbGYpOgogICAgICAgICAjICdkZWwnIGV4cHJsaXN0CiAgICAgICAgIGFiYyA9IFsxLDIsM10KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weSBiL0xpYi90ZXN0L3Rlc3RfZ3ppcC5weQppbmRleCAwMzRhY2IwLi5iNDE3MDQ0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2d6aXAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9nemlwLnB5CkBAIC00Myw2ICs0MywxNCBAQAogCiAKIGNsYXNzIFRlc3RHemlwKEJhc2VUZXN0KToKKyAgICBkZWYgd3JpdGVfYW5kX3JlYWRfYmFjayhzZWxmLCBkYXRhLCBtb2RlPSdiJyk6CisgICAgICAgIGJfZGF0YSA9IGJ5dGVzKGRhdGEpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAndycrbW9kZSkgYXMgZjoKKyAgICAgICAgICAgIGwgPSBmLndyaXRlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgbGVuKGJfZGF0YSkpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAncicrbW9kZSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGJfZGF0YSkKKwogICAgIGRlZiB0ZXN0X3dyaXRlKHNlbGYpOgogICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3diJykgYXMgZjoKICAgICAgICAgICAgIGYud3JpdGUoZGF0YTEgKiA1MCkKQEAgLTU3LDYgKzY1LDMxIEBACiAgICAgICAgICMgVGVzdCBtdWx0aXBsZSBjbG9zZSgpIGNhbGxzLgogICAgICAgICBmLmNsb3NlKCkKIAorICAgICMgVGhlIGZvbGxvd2luZyB0ZXN0X3dyaXRlX3h5IG1ldGhvZHMgdGVzdCB0aGF0IHdyaXRlIGFjY2VwdHMKKyAgICAjIHRoZSBjb3JyZXNwb25kaW5nIGJ5dGVzLWxpa2Ugb2JqZWN0IHR5cGUgYXMgaW5wdXQKKyAgICAjIGFuZCB0aGF0IHRoZSBkYXRhIHdyaXR0ZW4gZXF1YWxzIGJ5dGVzKHh5KSBpbiBhbGwgY2FzZXMuCisgICAgZGVmIHRlc3Rfd3JpdGVfbWVtb3J5dmlldyhzZWxmKToKKyAgICAgICAgc2VsZi53cml0ZV9hbmRfcmVhZF9iYWNrKG1lbW9yeXZpZXcoZGF0YTEgKiA1MCkpCisgICAgICAgIG0gPSBtZW1vcnl2aWV3KGJ5dGVzKHJhbmdlKDI1NikpKQorICAgICAgICBkYXRhID0gbS5jYXN0KCdCJywgc2hhcGU9WzgsOCw0XSkKKyAgICAgICAgc2VsZi53cml0ZV9hbmRfcmVhZF9iYWNrKGRhdGEpCisKKyAgICBkZWYgdGVzdF93cml0ZV9ieXRlYXJyYXkoc2VsZik6CisgICAgICAgIHNlbGYud3JpdGVfYW5kX3JlYWRfYmFjayhieXRlYXJyYXkoZGF0YTEgKiA1MCkpCisKKyAgICBkZWYgdGVzdF93cml0ZV9pbmNvbXBhdGlibGVfdHlwZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgbm9uLWJ5dGVzLWxpa2UgdHlwZXMgcmFpc2UgVHlwZUVycm9yLgorICAgICAgICAjIElzc3VlICMyMTU2MDogYXR0ZW1wdHMgdG8gd3JpdGUgaW5jb21wYXRpYmxlIHR5cGVzCisgICAgICAgICMgc2hvdWxkIG5vdCBhZmZlY3QgdGhlIHN0YXRlIG9mIHRoZSBmaWxlb2JqZWN0CisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShzZWxmLmZpbGVuYW1lLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ2EnKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGYud3JpdGUoWzFdKQorICAgICAgICAgICAgZi53cml0ZShkYXRhMSkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhMSkKKwogICAgIGRlZiB0ZXN0X3JlYWQoc2VsZik6CiAgICAgICAgIHNlbGYudGVzdF93cml0ZSgpCiAgICAgICAgICMgVHJ5IHJlYWRpbmcuCkBAIC0xMzAsNiArMTYzLDE0IEBACiAgICAgICAgICAgICAgICAgaWYgbm90IHp0eHQ6IGJyZWFrCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudHMsIGInYScqMjAxKQogCisgICAgZGVmIHRlc3RfZXhjbHVzaXZlX3dyaXRlKHNlbGYpOgorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3hiJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YTEgKiA1MCkKKyAgICAgICAgd2l0aCBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBkYXRhMSAqIDUwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICBnemlwLkd6aXBGaWxlKHNlbGYuZmlsZW5hbWUsICd4YicpCisKICAgICBkZWYgdGVzdF9idWZmZXJlZF9yZWFkZXIoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzc0NzE6IGEgR3ppcEZpbGUgY2FuIGJlIHdyYXBwZWQgaW4gYSBCdWZmZXJlZFJlYWRlciBmb3IKICAgICAgICAgIyBwZXJmb3JtYW5jZS4KQEAgLTIwNSw2ICsyNDYsOSBAQAogICAgICAgICBzZWxmLnRlc3Rfd3JpdGUoKQogICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3InKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm15ZmlsZW9iai5tb2RlLCAncmInKQorICAgICAgICBzdXBwb3J0LnVubGluayhzZWxmLmZpbGVuYW1lKQorICAgICAgICB3aXRoIGd6aXAuR3ppcEZpbGUoc2VsZi5maWxlbmFtZSwgJ3gnKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLm15ZmlsZW9iai5tb2RlLCAneGInKQogCiAgICAgZGVmIHRlc3RfMTY0NzQ4NChzZWxmKToKICAgICAgICAgZm9yIG1vZGUgaW4gKCd3YicsICdyYicpOgpAQCAtMzg4LDYgKzQzMiwyMCBAQAogICAgICAgICAgICAgZGF0YWMgPSBnemlwLmNvbXByZXNzKGRhdGEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGd6aXAuZGVjb21wcmVzcyhkYXRhYyksIGRhdGEpCiAKKyAgICBkZWYgdGVzdF9yZWFkX3RydW5jYXRlZChzZWxmKToKKyAgICAgICAgZGF0YSA9IGRhdGExKjUwCisgICAgICAgICMgRHJvcCB0aGUgQ1JDICg0IGJ5dGVzKSBhbmQgZmlsZSBzaXplICg0IGJ5dGVzKS4KKyAgICAgICAgdHJ1bmNhdGVkID0gZ3ppcC5jb21wcmVzcyhkYXRhKVs6LThdCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShmaWxlb2JqPWlvLkJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCBmLnJlYWQpCisgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShmaWxlb2JqPWlvLkJ5dGVzSU8odHJ1bmNhdGVkKSkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKGxlbihkYXRhKSksIGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorICAgICAgICAjIEluY29tcGxldGUgMTAtYnl0ZSBoZWFkZXIuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDIsIDEwKToKKyAgICAgICAgICAgIHdpdGggZ3ppcC5HemlwRmlsZShmaWxlb2JqPWlvLkJ5dGVzSU8odHJ1bmNhdGVkWzppXSkpIGFzIGY6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCwgMSkKKwogICAgIGRlZiB0ZXN0X3JlYWRfd2l0aF9leHRyYShzZWxmKToKICAgICAgICAgIyBHemlwIGRhdGEgd2l0aCBhbiBleHRyYSBmaWVsZAogICAgICAgICBnemRhdGEgPSAoYidceDFmXHg4Ylx4MDhceDA0XHhiMlx4MTdjUVx4MDJceGZmJwpAQCAtNDA2LDM1ICs0NjQsNTkgQEAKIGNsYXNzIFRlc3RPcGVuKEJhc2VUZXN0KToKICAgICBkZWYgdGVzdF9iaW5hcnlfbW9kZXMoc2VsZik6CiAgICAgICAgIHVuY29tcHJlc3NlZCA9IGRhdGExICogNTAKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAid2IiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCkKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgdW5jb21wcmVzc2VkKQorCiAgICAgICAgIHdpdGggZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJhYiIpIGFzIGY6CiAgICAgICAgICAgICBmLndyaXRlKHVuY29tcHJlc3NlZCkKICAgICAgICAgd2l0aCBvcGVuKHNlbGYuZmlsZW5hbWUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBmaWxlX2RhdGEgPSBnemlwLmRlY29tcHJlc3MoZi5yZWFkKCkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfZGF0YSwgdW5jb21wcmVzc2VkICogMikKIAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInhiIikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInhiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUodW5jb21wcmVzc2VkKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlbmFtZSwgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGZpbGVfZGF0YSA9IGd6aXAuZGVjb21wcmVzcyhmLnJlYWQoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmlsZV9kYXRhLCB1bmNvbXByZXNzZWQpCisKICAgICBkZWYgdGVzdF9pbXBsaWNpdF9iaW5hcnlfbW9kZXMoc2VsZik6CiAgICAgICAgICMgVGVzdCBpbXBsaWNpdCBiaW5hcnkgbW9kZXMgKG5vICJiIiBvciAidCIgaW4gbW9kZSBzdHJpbmcpLgogICAgICAgICB1bmNvbXByZXNzZWQgPSBkYXRhMSAqIDUwCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInciKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCkKKwogICAgICAgICB3aXRoIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAiciIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCB1bmNvbXByZXNzZWQpCisKICAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgImEiKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCiAgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCAqIDIpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgZ3ppcC5vcGVuKHNlbGYuZmlsZW5hbWUsICJ4IikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi5maWxlbmFtZSkKKyAgICAgICAgd2l0aCBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIngiKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZSh1bmNvbXByZXNzZWQpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGVuYW1lLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgZmlsZV9kYXRhID0gZ3ppcC5kZWNvbXByZXNzKGYucmVhZCgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaWxlX2RhdGEsIHVuY29tcHJlc3NlZCkKKwogICAgIGRlZiB0ZXN0X3RleHRfbW9kZXMoc2VsZik6CiAgICAgICAgIHVuY29tcHJlc3NlZCA9IGRhdGExLmRlY29kZSgiYXNjaWkiKSAqIDUwCiAgICAgICAgIHVuY29tcHJlc3NlZF9yYXcgPSB1bmNvbXByZXNzZWQucmVwbGFjZSgiXG4iLCBvcy5saW5lc2VwKQpAQCAtNDY5LDYgKzU1MSw4IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgIndidCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInhidCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBnemlwLm9wZW4oc2VsZi5maWxlbmFtZSwgInJiIiwgZW5jb2Rpbmc9InV0Zi04IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGd6aXAub3BlbihzZWxmLmZpbGVuYW1lLCAicmIiLCBlcnJvcnM9Imlnbm9yZSIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2hhc2gucHkgYi9MaWIvdGVzdC90ZXN0X2hhc2gucHkKaW5kZXggMjJlYmJjYy4uZjY0N2M2ZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9oYXNoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaGFzaC5weQpAQCAtMTIsNiArMTIsNDAgQEAKIAogSVNfNjRCSVQgPSBzeXMubWF4c2l6ZSA+IDIqKjMyCiAKK2RlZiBsY2coeCwgbGVuZ3RoPTE2KToKKyAgICAiIiJMaW5lYXIgY29uZ3J1ZW50aWFsIGdlbmVyYXRvciIiIgorICAgIGlmIHggPT0gMDoKKyAgICAgICAgcmV0dXJuIGJ5dGVzKGxlbmd0aCkKKyAgICBvdXQgPSBieXRlYXJyYXkobGVuZ3RoKQorICAgIGZvciBpIGluIHJhbmdlKGxlbmd0aCk6CisgICAgICAgIHggPSAoMjE0MDEzICogeCArIDI1MzEwMTEpICYgMHg3ZmZmZmZmZgorICAgICAgICBvdXRbaV0gPSAoeCA+PiAxNikgJiAweGZmCisgICAgcmV0dXJuIGJ5dGVzKG91dCkKKworZGVmIHB5c2lwaGFzaCh1aW50NjQpOgorICAgICIiIkNvbnZlcnQgU2lwSGFzaDI0IG91dHB1dCB0byBQeV9oYXNoX3QKKyAgICAiIiIKKyAgICBhc3NlcnQgMCA8PSB1aW50NjQgPCAoMSA8PCA2NCkKKyAgICAjIHNpbXBsZSB1bnNpZ25lZCB0byBzaWduZWQgaW50NjQKKyAgICBpZiB1aW50NjQgPiAoMSA8PCA2MykgLSAxOgorICAgICAgICBpbnQ2NCA9IHVpbnQ2NCAtICgxIDw8IDY0KQorICAgIGVsc2U6CisgICAgICAgIGludDY0ID0gdWludDY0CisgICAgIyBtYW5nbGUgdWludDY0IHRvIHVpbnQzMgorICAgIHVpbnQzMiA9ICh1aW50NjQgXiB1aW50NjQgPj4gMzIpICYgMHhmZmZmZmZmZgorICAgICMgc2ltcGxlIHVuc2lnbmVkIHRvIHNpZ25lZCBpbnQzMgorICAgIGlmIHVpbnQzMiA+ICgxIDw8IDMxKSAtIDE6CisgICAgICAgIGludDMyID0gdWludDMyIC0gKDEgPDwgMzIpCisgICAgZWxzZToKKyAgICAgICAgaW50MzIgPSB1aW50MzIKKyAgICByZXR1cm4gaW50MzIsIGludDY0CisKK2RlZiBza2lwX3VubGVzc19pbnRlcm5hbGhhc2godGVzdCk6CisgICAgIiIiU2tpcCBkZWNvcmF0b3IgZm9yIHRlc3RzIHRoYXQgZGVwZW5kIG9uIFNpcEhhc2gyNCBvciBGTlYiIiIKKyAgICBvayA9IHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtIGluIHsiZm52IiwgInNpcGhhc2gyNCJ9CisgICAgbXNnID0gIlJlcXVpcmVzIFNpcEhhc2gyNCBvciBGTlYiCisgICAgcmV0dXJuIHRlc3QgaWYgb2sgZWxzZSB1bml0dGVzdC5za2lwKG1zZykodGVzdCkKKwogCiBjbGFzcyBIYXNoRXF1YWxpdHlUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTE2MSwxMiArMTk1LDY0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocnVuMSwgcnVuMikKIAogY2xhc3MgU3RyaW5nbGlrZUhhc2hSYW5kb21pemF0aW9uVGVzdHMoSGFzaFJhbmRvbWl6YXRpb25UZXN0cyk6CisgICAgcmVwcl8gPSBOb25lCisgICAgcmVwcl9sb25nID0gTm9uZQorCisgICAgIyAzMmJpdCBsaXR0bGUsIDY0Yml0IGxpdHRsZSwgMzJiaXQgYmlnLCA2NGJpdCBiaWcKKyAgICBrbm93bl9oYXNoZXMgPSB7CisgICAgICAgICdkamJhMzN4JzogWyAjIG9ubHkgdXNlZCBmb3Igc21hbGwgc3RyaW5ncworICAgICAgICAgICAgIyBzZWVkIDAsICdhYmMnCisgICAgICAgICAgICBbMTkzNDg1OTYwLCAxOTM0ODU5NjAsICAxOTM0ODU5NjAsIDE5MzQ4NTk2MF0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmMnCisgICAgICAgICAgICBbLTY3ODk2NjE5NiwgNTczNzYzNDI2MjYzMjIzMzcyLCAtODIwNDg5Mzg4LCAtNDI4MjkwNTgwNDgyNjAzOTY2NV0sCisgICAgICAgICAgICBdLAorICAgICAgICAnc2lwaGFzaDI0JzogWworICAgICAgICAgICAgIyBOT1RFOiBQeVVDUzIgbGF5b3V0IGRlcGVuZHMgb24gZW5kaWFuZXNzCisgICAgICAgICAgICAjIHNlZWQgMCwgJ2FiYycKKyAgICAgICAgICAgIFsxMTk4NTgzNTE4LCA0NTk2MDY5MjAwNzEwMTM1NTE4LCAxMTk4NTgzNTE4LCA0NTk2MDY5MjAwNzEwMTM1NTE4XSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiYycKKyAgICAgICAgICAgIFsyNzM4NzY4ODYsIC00NTAxNjE4MTUyNTI0NTQ0MTA2LCAyNzM4NzY4ODYsIC00NTAxNjE4MTUyNTI0NTQ0MTA2XSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiY2RlZmdoaWprJworICAgICAgICAgICAgWy0xNzQ1MjE1MzEzLCA0NDM2NzE5NTg4ODkyODc2OTc1LCAtMTc0NTIxNTMxMywgNDQzNjcxOTU4ODg5Mjg3Njk3NV0sCisgICAgICAgICAgICAjIHNlZWQgMCwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbNDkzNTcwODA2LCA1NzQ5OTg2NDg0MTg5NjEyNzkwLCAtMTAwNjM4MTU2NCwgLTU5MTUxMTE0NTAxOTk0Njg1NDBdLAorICAgICAgICAgICAgIyBzZWVkIDQyLCAnw6TDuuKIkeKEhycKKyAgICAgICAgICAgIFstMTY3NzExMDgxNiwgLTI5NDc5ODEzNDIyMjc3MzgxNDQsIC0xODYwMjA3NzkzLCAtNDI5NjY5OTIxNzY1MjUxNjAxN10sCisgICAgICAgIF0sCisgICAgICAgICdmbnYnOiBbCisgICAgICAgICAgICAjIHNlZWQgMCwgJ2FiYycKKyAgICAgICAgICAgIFstMTYwMDkyNTUzMywgMTQ1MzA3OTcyOTE4ODA5ODIxMSwgLTE2MDA5MjU1MzMsCisgICAgICAgICAgICAgMTQ1MzA3OTcyOTE4ODA5ODIxMV0sCisgICAgICAgICAgICAjIHNlZWQgNDIsICdhYmMnCisgICAgICAgICAgICBbLTIwNjA3Njc5OSwgLTQ0MTA5MTE1MDIzMDM4Nzg1MDksIC0xMDI0MDE0NDU3LAorICAgICAgICAgICAgIC0zNTcwMTUwOTY5NDc5OTk0MTMwXSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ2FiY2RlZmdoaWprJworICAgICAgICAgICAgWzgxMTEzNjc1MSwgLTUwNDYyMzAwNDkzNzYxMTg3NDYsIC03NzIwODA1MyAsCisgICAgICAgICAgICAgLTQ3NzkwMjk2MTUyODEwMTk2NjZdLAorICAgICAgICAgICAgIyBzZWVkIDAsICfDpMO64oiR4oSHJworICAgICAgICAgICAgWzQ0NDAyODE3LCA4OTk4Mjk3NTc5ODQ1OTg3NDMxLCAtMTk1NjI0MDMzMSwKKyAgICAgICAgICAgICAtNzgyNjk3ODg4NjE0MDQ3ODg3XSwKKyAgICAgICAgICAgICMgc2VlZCA0MiwgJ8Okw7riiJHihIcnCisgICAgICAgICAgICBbLTI4MzA2NjM2NSwgLTQ1NzY3Mjk4ODM4MjQ2MDE1NDMsIC0yNzE4NzE0MDcsCisgICAgICAgICAgICAgLTM5Mjc2OTU1MDExODcyNDcwODRdLAorICAgICAgICBdCisgICAgfQorCisgICAgZGVmIGdldF9leHBlY3RlZF9oYXNoKHNlbGYsIHBvc2l0aW9uLCBsZW5ndGgpOgorICAgICAgICBpZiBsZW5ndGggPCBzeXMuaGFzaF9pbmZvLmN1dG9mZjoKKyAgICAgICAgICAgIGFsZ29yaXRobSA9ICJkamJhMzN4IgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWxnb3JpdGhtID0gc3lzLmhhc2hfaW5mby5hbGdvcml0aG0KKyAgICAgICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnbGl0dGxlJzoKKyAgICAgICAgICAgIHBsYXRmb3JtID0gMSBpZiBJU182NEJJVCBlbHNlIDAKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydChzeXMuYnl0ZW9yZGVyID09ICdiaWcnKQorICAgICAgICAgICAgcGxhdGZvcm0gPSAzIGlmIElTXzY0QklUIGVsc2UgMgorICAgICAgICByZXR1cm4gc2VsZi5rbm93bl9oYXNoZXNbYWxnb3JpdGhtXVtwb3NpdGlvbl1bcGxhdGZvcm1dCisKICAgICBkZWYgdGVzdF9udWxsX2hhc2goc2VsZik6CiAgICAgICAgICMgUFlUSE9OSEFTSFNFRUQ9MCBkaXNhYmxlcyB0aGUgcmFuZG9taXplZCBoYXNoCi0gICAgICAgIGlmIElTXzY0QklUOgotICAgICAgICAgICAga25vd25faGFzaF9vZl9vYmogPSAxNDUzMDc5NzI5MTg4MDk4MjExCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBrbm93bl9oYXNoX29mX29iaiA9IC0xNjAwOTI1NTMzCisgICAgICAgIGtub3duX2hhc2hfb2Zfb2JqID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgwLCAzKQogCiAgICAgICAgICMgUmFuZG9taXphdGlvbiBpcyBlbmFibGVkIGJ5IGRlZmF1bHQ6CiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfKSwga25vd25faGFzaF9vZl9vYmopCkBAIC0xNzQsMzkgKzI2MCw1MyBAQAogICAgICAgICAjIEl0IGNhbiBhbHNvIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlIHNlZWQgdG8gMDoKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdldF9oYXNoKHNlbGYucmVwcl8sIHNlZWQ9MCksIGtub3duX2hhc2hfb2Zfb2JqKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2ZpeGVkX2hhc2goc2VsZik6CiAgICAgICAgICMgdGVzdCBhIGZpeGVkIHNlZWQgZm9yIHRoZSByYW5kb21pemVkIGhhc2gKICAgICAgICAgIyBOb3RlIHRoYXQgYWxsIHR5cGVzIHNoYXJlIHRoZSBzYW1lIHZhbHVlczoKLSAgICAgICAgaWYgSVNfNjRCSVQ6Ci0gICAgICAgICAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdsaXR0bGUnOgotICAgICAgICAgICAgICAgIGggPSAtNDQxMDkxMTUwMjMwMzg3ODUwOQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBoID0gLTM1NzAxNTA5Njk0Nzk5OTQxMzAKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGlmIHN5cy5ieXRlb3JkZXIgPT0gJ2xpdHRsZSc6Ci0gICAgICAgICAgICAgICAgaCA9IC0yMDYwNzY3OTkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaCA9IC0xMDI0MDE0NDU3CisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDEsIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfLCBzZWVkPTQyKSwgaCkKIAorICAgIEBza2lwX3VubGVzc19pbnRlcm5hbGhhc2gKKyAgICBkZWYgdGVzdF9sb25nX2ZpeGVkX2hhc2goc2VsZik6CisgICAgICAgIGlmIHNlbGYucmVwcl9sb25nIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaCA9IHNlbGYuZ2V0X2V4cGVjdGVkX2hhc2goMiwgMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfbG9uZywgc2VlZD00MiksIGgpCisKKwogY2xhc3MgU3RySGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHJlcHJfID0gcmVwcignYWJjJykKKyAgICByZXByX2xvbmcgPSByZXByKCdhYmNkZWZnaGlqaycpCisgICAgcmVwcl91Y3MyID0gcmVwcignw6TDuuKIkeKEhycpCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goIiIpLCAwKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAorICAgIGRlZiB0ZXN0X3VjczJfc3RyaW5nKHNlbGYpOgorICAgICAgICBoID0gc2VsZi5nZXRfZXhwZWN0ZWRfaGFzaCgzLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZ2V0X2hhc2goc2VsZi5yZXByX3VjczIsIHNlZWQ9MCksIGgpCisgICAgICAgIGggPSBzZWxmLmdldF9leHBlY3RlZF9oYXNoKDQsIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5nZXRfaGFzaChzZWxmLnJlcHJfdWNzMiwgc2VlZD00MiksIGgpCisKIGNsYXNzIEJ5dGVzSGFzaFJhbmRvbWl6YXRpb25UZXN0cyhTdHJpbmdsaWtlSGFzaFJhbmRvbWl6YXRpb25UZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcmVwcl8gPSByZXByKGInYWJjJykKKyAgICByZXByX2xvbmcgPSByZXByKGInYWJjZGVmZ2hpamsnKQogCisgICAgQHNraXBfdW5sZXNzX2ludGVybmFsaGFzaAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKGIiIiksIDApCiAKIGNsYXNzIE1lbW9yeXZpZXdIYXNoUmFuZG9taXphdGlvblRlc3RzKFN0cmluZ2xpa2VIYXNoUmFuZG9taXphdGlvblRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHJlcHJfID0gIm1lbW9yeXZpZXcoYidhYmMnKSIKKyAgICByZXByX2xvbmcgPSAibWVtb3J5dmlldyhiJ2FiY2RlZmdoaWprJykiCiAKKyAgICBAc2tpcF91bmxlc3NfaW50ZXJuYWxoYXNoCiAgICAgZGVmIHRlc3RfZW1wdHlfc3RyaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gobWVtb3J5dmlldyhiIiIpKSwgMCkKIApAQCAtMjI0LDUgKzMyNCwyMyBAQAogICAgIHJlcHJfID0gcmVwcihkYXRldGltZS50aW1lKDApKQogCiAKK2NsYXNzIEhhc2hEaXN0cmlidXRpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9oYXNoX2Rpc3RyaWJ1dGlvbihzZWxmKToKKyAgICAgICAgIyBjaGVjayBmb3IgaGFzaCBjb2xsaXNpb24KKyAgICAgICAgYmFzZSA9ICJhYmNkZWZnaGFiY2RlZmciCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIGxlbihiYXNlKSk6CisgICAgICAgICAgICBwcmVmaXggPSBiYXNlWzppXQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJlZml4PXByZWZpeCk6CisgICAgICAgICAgICAgICAgczE1ID0gc2V0KCkKKyAgICAgICAgICAgICAgICBzMjU1ID0gc2V0KCkKKyAgICAgICAgICAgICAgICBmb3IgYyBpbiByYW5nZSgyNTYpOgorICAgICAgICAgICAgICAgICAgICBoID0gaGFzaChwcmVmaXggKyBjaHIoYykpCisgICAgICAgICAgICAgICAgICAgIHMxNS5hZGQoaCAmIDB4ZikKKyAgICAgICAgICAgICAgICAgICAgczI1NS5hZGQoaCAmIDB4ZmYpCisgICAgICAgICAgICAgICAgIyBTaXBIYXNoMjQgZGlzdHJpYnV0aW9uIGRlcGVuZHMgb24ga2V5LCB1c3VhbGx5ID4gNjAlCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihzMTUpLCA4LCBwcmVmaXgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGxlbihzMjU1KSwgMTI4LCBwcmVmaXgpCisKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkgYi9MaWIvdGVzdC90ZXN0X2hhc2hsaWIucHkKaW5kZXggYzA0NzBkNi4uODVlYzJmOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9oYXNobGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaGFzaGxpYi5weQpAQCAtMTgsMTEgKzE4LDEzIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3YXJuaW5ncwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgXzRHLCBiaWdtZW10ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgXzRHLCBiaWdtZW10ZXN0LCBpbXBvcnRfZnJlc2hfbW9kdWxlCiAKICMgV2VyZSB3ZSBjb21waWxlZCAtLXdpdGgtcHlkZWJ1ZyBvciB3aXRoICNkZWZpbmUgUHlfREVCVUc/CiBDT01QSUxFRF9XSVRIX1BZREVCVUcgPSBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKQogCitjX2hhc2hsaWIgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCdoYXNobGliJywgZnJlc2g9WydfaGFzaGxpYiddKQorcHlfaGFzaGxpYiA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ2hhc2hsaWInLCBibG9ja2VkPVsnX2hhc2hsaWInXSkKIAogZGVmIGhleHN0cihzKToKICAgICBhc3NlcnQgaXNpbnN0YW5jZShzLCBieXRlcyksIHJlcHIocykKQEAgLTM2LDcgKzM4LDcgQEAKIGNsYXNzIEhhc2hMaWJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgc3VwcG9ydGVkX2hhc2hfbmFtZXMgPSAoICdtZDUnLCAnTUQ1JywgJ3NoYTEnLCAnU0hBMScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEyMjQnLCAnU0hBMjI0JywgJ3NoYTI1NicsICdTSEEyNTYnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hhMzg0JywgJ1NIQTM4NCcsICdzaGE1MTInLCAnU0hBNTEyJyApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaGEzODQnLCAnU0hBMzg0JywgJ3NoYTUxMicsICdTSEE1MTInKQogCiAgICAgIyBJc3N1ZSAjMTQ2OTM6IGZhbGxiYWNrIG1vZHVsZXMgYXJlIGFsd2F5cyBjb21waWxlZCB1bmRlciBQT1NJWAogICAgIF93YXJuX29uX2V4dGVuc2lvbl9pbXBvcnQgPSBvcy5uYW1lID09ICdwb3NpeCcgb3IgQ09NUElMRURfV0lUSF9QWURFQlVHCkBAIC03MiwyNyArNzQsMzEgQEAKICAgICAgICAgaWYgX2hhc2hsaWI6CiAgICAgICAgICAgICAjIFRoZXNlIHR3byBhbGdvcml0aG1zIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCB3aGVuIHRoaXMgbW9kdWxlCiAgICAgICAgICAgICAjIGlzIGNvbXBpbGVkLiAgSWYgbm90LCBzb21ldGhpbmcgd2FzIGNvbXBpbGVkIHdyb25nLgotICAgICAgICAgICAgYXNzZXJ0IGhhc2F0dHIoX2hhc2hsaWIsICdvcGVuc3NsX21kNScpCi0gICAgICAgICAgICBhc3NlcnQgaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfc2hhMScpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfbWQ1JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihfaGFzaGxpYiwgJ29wZW5zc2xfc2hhMScpKQogICAgICAgICAgICAgZm9yIGFsZ29yaXRobSwgY29uc3RydWN0b3JzIGluIHNlbGYuY29uc3RydWN0b3JzX3RvX3Rlc3QuaXRlbXMoKToKICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvciA9IGdldGF0dHIoX2hhc2hsaWIsICdvcGVuc3NsXycrYWxnb3JpdGhtLCBOb25lKQogICAgICAgICAgICAgICAgIGlmIGNvbnN0cnVjdG9yOgogICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvcnMuYWRkKGNvbnN0cnVjdG9yKQogCisgICAgICAgIGRlZiBhZGRfYnVpbHRpbl9jb25zdHJ1Y3RvcihuYW1lKToKKyAgICAgICAgICAgIGNvbnN0cnVjdG9yID0gZ2V0YXR0cihoYXNobGliLCAiX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciIpKG5hbWUpCisgICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0W25hbWVdLmFkZChjb25zdHJ1Y3RvcikKKwogICAgICAgICBfbWQ1ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX21kNScpCiAgICAgICAgIGlmIF9tZDU6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydtZDUnXS5hZGQoX21kNS5tZDUpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3RvcignbWQ1JykKICAgICAgICAgX3NoYTEgPSBzZWxmLl9jb25kaXRpb25hbF9pbXBvcnRfbW9kdWxlKCdfc2hhMScpCiAgICAgICAgIGlmIF9zaGExOgotICAgICAgICAgICAgc2VsZi5jb25zdHJ1Y3RvcnNfdG9fdGVzdFsnc2hhMSddLmFkZChfc2hhMS5zaGExKQorICAgICAgICAgICAgYWRkX2J1aWx0aW5fY29uc3RydWN0b3IoJ3NoYTEnKQogICAgICAgICBfc2hhMjU2ID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTI1NicpCiAgICAgICAgIGlmIF9zaGEyNTY6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyMjQnXS5hZGQoX3NoYTI1Ni5zaGEyMjQpCi0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEyNTYnXS5hZGQoX3NoYTI1Ni5zaGEyNTYpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMjI0JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGEyNTYnKQogICAgICAgICBfc2hhNTEyID0gc2VsZi5fY29uZGl0aW9uYWxfaW1wb3J0X21vZHVsZSgnX3NoYTUxMicpCiAgICAgICAgIGlmIF9zaGE1MTI6Ci0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGEzODQnXS5hZGQoX3NoYTUxMi5zaGEzODQpCi0gICAgICAgICAgICBzZWxmLmNvbnN0cnVjdG9yc190b190ZXN0WydzaGE1MTInXS5hZGQoX3NoYTUxMi5zaGE1MTIpCisgICAgICAgICAgICBhZGRfYnVpbHRpbl9jb25zdHJ1Y3Rvcignc2hhMzg0JykKKyAgICAgICAgICAgIGFkZF9idWlsdGluX2NvbnN0cnVjdG9yKCdzaGE1MTInKQogCiAgICAgICAgIHN1cGVyKEhhc2hMaWJUZXN0Q2FzZSwgc2VsZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQogCkBAIC0xMjEsOCArMTI3LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaGxpYi5uZXcsIDEpCiAKICAgICBkZWYgdGVzdF9nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcihzZWxmKToKLSAgICAgICAgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IgPSBoYXNobGliLl9fZGljdF9fWwotICAgICAgICAgICAgICAgICdfX2dldF9idWlsdGluX2NvbnN0cnVjdG9yJ10KKyAgICAgICAgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IgPSBnZXRhdHRyKGhhc2hsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19nZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcicpCisgICAgICAgIGJ1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUgPSBnZXRhdHRyKGhhc2hsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2J1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgJ3Rlc3QnKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpbXBvcnQgX21kNQpAQCAtMTMwLDYgKzEzOCw4IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgVGhpcyBmb3JjZXMgYW4gSW1wb3J0RXJyb3IgZm9yICJpbXBvcnQgX21kNSIgc3RhdGVtZW50cwogICAgICAgICBzeXMubW9kdWxlc1snX21kNSddID0gTm9uZQorICAgICAgICAjIGNsZWFyIHRoZSBjYWNoZQorICAgICAgICBidWlsdGluX2NvbnN0cnVjdG9yX2NhY2hlLmNsZWFyKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZ2V0X2J1aWx0aW5fY29uc3RydWN0b3IsICdtZDUnKQogICAgICAgICBmaW5hbGx5OgpAQCAtMTM4LDEzICsxNDgsMjMgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydfbWQ1J10KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvciwgMykKKyAgICAgICAgY29uc3RydWN0b3IgPSBnZXRfYnVpbHRpbl9jb25zdHJ1Y3RvcignbWQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjb25zdHJ1Y3RvciwgX21kNS5tZDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKGJ1aWx0aW5fY29uc3RydWN0b3JfY2FjaGUpLCBbJ01ENScsICdtZDUnXSkKIAogICAgIGRlZiB0ZXN0X2hleGRpZ2VzdChzZWxmKToKICAgICAgICAgZm9yIGNvbnMgaW4gc2VsZi5oYXNoX2NvbnN0cnVjdG9yczoKICAgICAgICAgICAgIGggPSBjb25zKCkKLSAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGguZGlnZXN0KCksIGJ5dGVzKSwgbmFtZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGguZGlnZXN0KCksIGJ5dGVzKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoZXhzdHIoaC5kaWdlc3QoKSksIGguaGV4ZGlnZXN0KCkpCiAKKyAgICBkZWYgdGVzdF9uYW1lX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgZm9yIGNvbnMgaW4gc2VsZi5oYXNoX2NvbnN0cnVjdG9yczoKKyAgICAgICAgICAgIGggPSBjb25zKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShoLm5hbWUsIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaC5uYW1lLCBzZWxmLnN1cHBvcnRlZF9oYXNoX25hbWVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsIGhhc2hsaWIubmV3KGgubmFtZSkubmFtZSkKKwogICAgIGRlZiB0ZXN0X2xhcmdlX3VwZGF0ZShzZWxmKToKICAgICAgICAgYWFzID0gYidhJyAqIDEyOAogICAgICAgICBiZWVzID0gYidiJyAqIDEyNwpAQCAtMjEzLDggKzIzMyw5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uYmxvY2tfc2l6ZSwgYmxvY2tfc2l6ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5kaWdlc3Rfc2l6ZSwgZGlnZXN0X3NpemUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihtLmRpZ2VzdCgpKSwgZGlnZXN0X3NpemUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ubmFtZS5sb3dlcigpLCBuYW1lLmxvd2VyKCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUuc3BsaXQoIl8iKVswXSwgcmVwcihtKS5sb3dlcigpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAjIHNwbGl0IGZvciBzaGEzXzUxMiAvIF9zaGEzLnNoYTMgb2JqZWN0CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUuc3BsaXQoIl8iKVswXSwgcmVwcihtKSkKIAogICAgIGRlZiB0ZXN0X2Jsb2Nrc2l6ZV9uYW1lKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2Jsb2Nrc2l6ZV9uYW1lKCdtZDUnLCA2NCwgMTYpCkBAIC00MDAsOCArNDIxLDggQEAKICAgICAgICAgZXZlbnRzID0gW10KICAgICAgICAgZm9yIHRocmVhZG51bSBpbiByYW5nZShudW1fdGhyZWFkcyk6CiAgICAgICAgICAgICBjaHVua19zaXplID0gbGVuKGRhdGEpIC8vICgxMCoqdGhyZWFkbnVtKQotICAgICAgICAgICAgYXNzZXJ0IGNodW5rX3NpemUgPiAwCi0gICAgICAgICAgICBhc3NlcnQgY2h1bmtfc2l6ZSAlIGxlbihzbWFsbGVzdF9kYXRhKSA9PSAwCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoY2h1bmtfc2l6ZSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2h1bmtfc2l6ZSAlIGxlbihzbWFsbGVzdF9kYXRhKSwgMCkKICAgICAgICAgICAgIGV2ZW50ID0gdGhyZWFkaW5nLkV2ZW50KCkKICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoZXZlbnQpCiAgICAgICAgICAgICB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1oYXNoX2luX2NodW5rcywKQEAgLTQxMiw4ICs0MzMsOTUgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4cGVjdGVkX2hhc2gsIGhhc2hlci5oZXhkaWdlc3QoKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEhhc2hMaWJUZXN0Q2FzZSkKKworY2xhc3MgS0RGVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgcGJrZGYyX3Rlc3RfdmVjdG9ycyA9IFsKKyAgICAgICAgKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAxLCBOb25lKSwKKyAgICAgICAgKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAyLCBOb25lKSwKKyAgICAgICAgKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCA0MDk2LCBOb25lKSwKKyAgICAgICAgIyB0b28gc2xvdywgaXQgdGFrZXMgb3ZlciBhIG1pbnV0ZSBvbiBhIGZhc3QgQ1BVLgorICAgICAgICAjKGIncGFzc3dvcmQnLCBiJ3NhbHQnLCAxNjc3NzIxNiwgTm9uZSksCisgICAgICAgIChiJ3Bhc3N3b3JkUEFTU1dPUkRwYXNzd29yZCcsIGInc2FsdFNBTFRzYWx0U0FMVHNhbHRTQUxUc2FsdFNBTFRzYWx0JywKKyAgICAgICAgIDQwOTYsIC0xKSwKKyAgICAgICAgKGIncGFzc1wwd29yZCcsIGInc2FcMGx0JywgNDA5NiwgMTYpLAorICAgIF0KKworICAgIHBia2RmMl9yZXN1bHRzID0geworICAgICAgICAic2hhMSI6IFsKKyAgICAgICAgICAgICMgb2ZmaWNhbCB0ZXN0IHZlY3RvcnMgZnJvbSBSRkMgNjA3MAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzBjNjBjODBmOTYxZjBlNzFmM2E5YjUyNGFmNjAxMjA2MmZlMDM3YTYnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZWE2YzAxNGRjNzJkNmY4Y2NkMWVkOTJhY2UxZDQxZjBkOGRlODk1NycpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc0YjAwNzkwMWI3NjU0ODlhYmVhZDQ5ZDkyNmY3MjFkMDY1YTQyOWMxJyksIE5vbmUpLAorICAgICAgICAgICAgIyhieXRlcy5mcm9taGV4KCdlZWZlM2Q2MWNkNGRhNGU0ZTk5NDViM2Q2YmEyMTU4YzI2MzRlOTg0JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzNkMmVlYzRmZTQxYzg0OWI4MGM4ZDgzNjYyYzBlNDRhOGIyOTFhOTY0YycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdmMmYwNzAzOCcpLCAyNSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnNTZmYTZhYTc1NTQ4MDk5ZGNjMzdkN2YwMzQyNWUwYzMnKSwgTm9uZSksXSwKKyAgICAgICAgInNoYTI1NiI6IFsKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCcxMjBmYjZjZmZjZjhiMzJjNDNlNzIyNTI1NmM0ZjgzNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdhODY1NDhjOTJjY2MzNTQ4MDgwNTk4N2NiNzBiZTE3YicpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdhZTRkMGM5NWFmNmI0NmQzMmQwYWRmZjkyOGYwNmRkMCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICcyYTMwM2Y4ZWYzYzI1MWRmZDZlMmQ4NWE5NTQ3NGM0MycpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCdjNWU0NzhkNTkyODhjODQxYWE1MzBkYjY4NDVjNGM4ZCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICc5NjI4OTNhMDAxY2U0ZTExYTQ5NjM4NzNhYTk4MTM0YScpLCBOb25lKSwKKyAgICAgICAgICAgICMoYnl0ZXMuZnJvbWhleCgnY2Y4MWM2NmZlOGNmYzA0ZDFmMzFlY2I2NWRhYjQwODknCisgICAgICAgICAgICAjICAgICAgICAgICAgICAgJ2Y3ZjE3OWU4OWIzYjBiY2IxN2FkMTBlM2FjNmViYTQ2JyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJzM0OGM4OWRiY2JkMzJiMmYzMmQ4MTRiODExNmU4NGNmMmIxNycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICczNDdlYmMxODAwMTgxYzRlMmExZmI4ZGQ1M2UxYzYzNTUxOGM3ZGFjNDdlOScpLCA0MCksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnODliNjlkMDUxNmY4Mjk4OTNjNjk2MjI2NjUwYTg2ODcnKSwgTm9uZSksXSwKKyAgICAgICAgInNoYTUxMiI6IFsKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc4NjdmNzBjZjFhZGUwMmNmZjM3NTI1OTlhM2E1M2RjNGFmMzRjN2E2Njk4MTVhZTUnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnZDUxMzU1NGUxYzhjZjI1MmMwMmQ0NzBhMjg1YTA1MDFiYWQ5OTliZmU5NDNjMDhmJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzA1MDIzNWQ3ZDY4YjFkYTU1ZTYzZjczYjYwYTU3ZmNlJyksIE5vbmUpLAorICAgICAgICAgICAgKGJ5dGVzLmZyb21oZXgoJ2UxZDljMTZhYTY4MTcwOGE0NWY1YzdjNGUyMTVjZWI2NmUwMTFhMmU5ZjAwNDA3MScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICczZjE4YWVmZGI4NjZkNTNjZjc2Y2FiMjg2OGEzOWI5Zjc4NDBlZGNlNGZlZjVhODInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmU2NzMzNWM3N2E2MDY4ZTA0MTEyNzU0ZjI3Y2NmNGUnKSwgTm9uZSksCisgICAgICAgICAgICAoYnl0ZXMuZnJvbWhleCgnZDE5N2IxYjMzZGIwMTQzZTAxOGIxMmYzZDFkMTQ3OWU2Y2RlYmRjYzk3YzVjMGY4JworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzdmNjkwMmUwNzJmNDU3YjUxNDNmMzA2MDI2NDFiM2Q1NWNkMzM1OTg4Y2IzNmI4NCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICczNzYwNjBlY2Q1MzJlMDM5Yjc0MmEyMzk0MzRhZjJkNScpLCBOb25lKSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc4YzA1MTFmNGM2ZTU5N2M2YWM2MzE1ZDhmMDM2MmUyMjVmM2M1MDE0OTViYTIzYjgnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnNjhjMDA1MTc0ZGM0ZWU3MTExNWI1OWY5ZTYwY2Q5NTMyZmEzM2UwZjc1YWVmZTMwJworICAgICAgICAgICAgICAgICAgICAgICAgICAgJzIyNWM1ODNhMTg2Y2Q4MmJkNGRhZWE5NzI0YTNkM2I4JyksIDY0KSwKKyAgICAgICAgICAgIChieXRlcy5mcm9taGV4KCc5ZDllOWM0Y2QyMWZlNGJlMjRkNWI4MjQ0Yzc1OTY2NScpLCBOb25lKSxdLAorICAgIH0KKworICAgIGRlZiBfdGVzdF9wYmtkZjJfaG1hYyhzZWxmLCBwYmtkZjIpOgorICAgICAgICBmb3IgZGlnZXN0X25hbWUsIHJlc3VsdHMgaW4gc2VsZi5wYmtkZjJfcmVzdWx0cy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGksIHZlY3RvciBpbiBlbnVtZXJhdGUoc2VsZi5wYmtkZjJfdGVzdF92ZWN0b3JzKToKKyAgICAgICAgICAgICAgICBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbiA9IHZlY3RvcgorICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBvdmVyd3JpdGVfZGtsZW4gPSByZXN1bHRzW2ldCisgICAgICAgICAgICAgICAgaWYgb3ZlcndyaXRlX2RrbGVuOgorICAgICAgICAgICAgICAgICAgICBka2xlbiA9IG92ZXJ3cml0ZV9ka2xlbgorICAgICAgICAgICAgICAgIG91dCA9IHBia2RmMihkaWdlc3RfbmFtZSwgcGFzc3dvcmQsIHNhbHQsIHJvdW5kcywgZGtsZW4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzLCBka2xlbikpCisgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBtZW1vcnl2aWV3KHBhc3N3b3JkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5dmlldyhzYWx0KSwgcm91bmRzLCBka2xlbikKKyAgICAgICAgICAgICAgICBvdXQgPSBwYmtkZjIoZGlnZXN0X25hbWUsIGJ5dGVhcnJheShwYXNzd29yZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVhcnJheShzYWx0KSwgcm91bmRzLCBka2xlbikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgaWYgZGtsZW4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgb3V0ID0gcGJrZGYyKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRpZ2VzdF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgcm91bmRzKSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBia2RmMiwgYidzaGExJywgYidwYXNzJywgYidzYWx0JywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwYmtkZjIsICdzaGExJywgJ3Bhc3MnLCAnc2FsdCcsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBia2RmMiwgJ3NoYTEnLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwYmtkZjIsICdzaGExJywgYidwYXNzJywgYidzYWx0JywgMSwgLTEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAndW5zdXBwb3J0ZWQgaGFzaCB0eXBlJyk6CisgICAgICAgICAgICBwYmtkZjIoJ3Vua25vd24nLCBiJ3Bhc3MnLCBiJ3NhbHQnLCAxKQorCisgICAgZGVmIHRlc3RfcGJrZGYyX2htYWNfcHkoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGJrZGYyX2htYWMocHlfaGFzaGxpYi5wYmtkZjJfaG1hYykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoY19oYXNobGliLCAncGJrZGYyX2htYWMnKSwKKyAgICAgICAgICAgICAgICAgICAgICcgICB0ZXN0IHJlcXVpcmVzIE9wZW5TU0wgPiAxLjAnKQorICAgIGRlZiB0ZXN0X3Bia2RmMl9obWFjX2Moc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfcGJrZGYyX2htYWMoY19oYXNobGliLnBia2RmMl9obWFjKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaG1hYy5weSBiL0xpYi90ZXN0L3Rlc3RfaG1hYy5weQppbmRleCA0Y2E3Y2VjLi5jZGU1NmZkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2htYWMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9obWFjLnB5CkBAIC0xLDE3ICsxLDM5IEBACitpbXBvcnQgZnVuY3Rvb2xzCiBpbXBvcnQgaG1hYwogaW1wb3J0IGhhc2hsaWIKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAorCitkZWYgaWdub3JlX3dhcm5pbmcoZnVuYyk6CisgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJpZ25vcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnk9UGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICByZXR1cm4gd3JhcHBlcgorCisKIGNsYXNzIFRlc3RWZWN0b3JzVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfbWQ1X3ZlY3RvcnMoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGUgSE1BQyBtb2R1bGUgYWdhaW5zdCB0ZXN0IHZlY3RvcnMgZnJvbSB0aGUgUkZDLgogCiAgICAgICAgIGRlZiBtZDV0ZXN0KGtleSwgZGF0YSwgZGlnZXN0KToKLSAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhKQorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNobGliLm1kNSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1tZDUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAxNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKworICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD0nbWQ1JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1tZDUiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmRpZ2VzdF9zaXplLCAxNikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5ibG9ja19zaXplLCA2NCkKKwogCiAgICAgICAgIG1kNXRlc3QoYiJceDBiIiAqIDE2LAogICAgICAgICAgICAgICAgIGIiSGkgVGhlcmUiLApAQCAtNDYsNiArNjgsMTYgQEAKICAgICAgICAgZGVmIHNoYXRlc3Qoa2V5LCBkYXRhLCBkaWdlc3QpOgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNobGliLnNoYTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0LnVwcGVyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgubmFtZSwgImhtYWMtc2hhMSIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIDIwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIDY0KQorCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGtleSwgZGF0YSwgZGlnZXN0bW9kPSdzaGExJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS51cHBlcigpLCBkaWdlc3QudXBwZXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCAiaG1hYy1zaGExIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgMjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgNjQpCisKIAogICAgICAgICBzaGF0ZXN0KGIiXHgwYiIgKiAyMCwKICAgICAgICAgICAgICAgICBiIkhpIFRoZXJlIiwKQEAgLTc2LDEwICsxMDgsMjEgQEAKICAgICAgICAgICAgICAgICAgYiJhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0YSIpLAogICAgICAgICAgICAgICAgICJlOGU5OWQwZjQ1MjM3ZDc4NmQ2YmJhYTc5NjVjNzgwOGJiZmYxYTkxIikKIAotICAgIGRlZiBfcmZjNDIzMV90ZXN0X2Nhc2VzKHNlbGYsIGhhc2hmdW5jKToKKyAgICBkZWYgX3JmYzQyMzFfdGVzdF9jYXNlcyhzZWxmLCBoYXNoZnVuYywgaGFzaF9uYW1lLCBkaWdlc3Rfc2l6ZSwgYmxvY2tfc2l6ZSk6CiAgICAgICAgIGRlZiBobWFjdGVzdChrZXksIGRhdGEsIGhleGRpZ2VzdHMpOgorICAgICAgICAgICAgaG1hY19uYW1lID0gImhtYWMtIiArIGhhc2hfbmFtZQogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEsIGRpZ2VzdG1vZD1oYXNoZnVuYykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKS5sb3dlcigpLCBoZXhkaWdlc3RzW2hhc2hmdW5jXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5uYW1lLCBobWFjX25hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguZGlnZXN0X3NpemUsIGRpZ2VzdF9zaXplKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmJsb2NrX3NpemUsIGJsb2NrX3NpemUpCisKKyAgICAgICAgICAgIGggPSBobWFjLkhNQUMoa2V5LCBkYXRhLCBkaWdlc3Rtb2Q9aGFzaF9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhleGRpZ2VzdCgpLmxvd2VyKCksIGhleGRpZ2VzdHNbaGFzaGZ1bmNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLm5hbWUsIGhtYWNfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5kaWdlc3Rfc2l6ZSwgZGlnZXN0X3NpemUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguYmxvY2tfc2l6ZSwgYmxvY2tfc2l6ZSkKKwogCiAgICAgICAgICMgNC4yLiAgVGVzdCBDYXNlIDEKICAgICAgICAgaG1hY3Rlc3Qoa2V5ID0gYidceDBiJyoyMCwKQEAgLTE4OSwxNiArMjMyLDE2IEBACiAgICAgICAgICAgICAgICAgIH0pCiAKICAgICBkZWYgdGVzdF9zaGEyMjRfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjI0KQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyMjQsICdzaGEyMjQnLCAyOCwgNjQpCiAKICAgICBkZWYgdGVzdF9zaGEyNTZfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMjU2KQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEyNTYsICdzaGEyNTYnLCAzMiwgNjQpCiAKICAgICBkZWYgdGVzdF9zaGEzODRfcmZjNDIzMShzZWxmKToKLSAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhMzg0KQorICAgICAgICBzZWxmLl9yZmM0MjMxX3Rlc3RfY2FzZXMoaGFzaGxpYi5zaGEzODQsICdzaGEzODQnLCA0OCwgMTI4KQogCiAgICAgZGVmIHRlc3Rfc2hhNTEyX3JmYzQyMzEoc2VsZik6Ci0gICAgICAgIHNlbGYuX3JmYzQyMzFfdGVzdF9jYXNlcyhoYXNobGliLnNoYTUxMikKKyAgICAgICAgc2VsZi5fcmZjNDIzMV90ZXN0X2Nhc2VzKGhhc2hsaWIuc2hhNTEyLCAnc2hhNTEyJywgNjQsIDEyOCkKIAogICAgIGRlZiB0ZXN0X2xlZ2FjeV9ibG9ja19zaXplX3dhcm5pbmdzKHNlbGYpOgogICAgICAgICBjbGFzcyBNb2NrQ3JhenlIYXNoKG9iamVjdCk6CkBAIC0yMjIsNDYgKzI2NSw3NCBAQAogICAgICAgICAgICAgICAgIGhtYWMuSE1BQyhiJ2EnLCBiJ2InLCBkaWdlc3Rtb2Q9TW9ja0NyYXp5SGFzaCkKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ0V4cGVjdGVkIHdhcm5pbmcgYWJvdXQgc21hbGwgYmxvY2tfc2l6ZScpCiAKKyAgICBkZWYgdGVzdF93aXRoX2RpZ2VzdG1vZF93YXJuaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBrZXkgPSBiIlx4MGIiICogMTYKKyAgICAgICAgICAgIGRhdGEgPSBiIkhpIFRoZXJlIgorICAgICAgICAgICAgZGlnZXN0ID0gIjkyOTQ3MjdBMzYzOEJCMUMxM0Y0OEVGODE1OEJGQzlEIgorICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhrZXksIGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCkudXBwZXIoKSwgZGlnZXN0KQogCiAKIGNsYXNzIENvbnN0cnVjdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCisgICAgQGlnbm9yZV93YXJuaW5nCiAgICAgZGVmIHRlc3Rfbm9ybWFsKHNlbGYpOgogICAgICAgICAjIFN0YW5kYXJkIGNvbnN0cnVjdG9yIGNhbGwuCiAgICAgICAgIGZhaWxlZCA9IDAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQyhiImtleSIpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiU3RhbmRhcmQgY29uc3RydWN0b3IgY2FsbCByYWlzZWQgZXhjZXB0aW9uLiIpCiAKKyAgICBAaWdub3JlX3dhcm5pbmcKICAgICBkZWYgdGVzdF93aXRoX3N0cl9rZXkoc2VsZik6CiAgICAgICAgICMgUGFzcyBhIGtleSBvZiB0eXBlIHN0ciwgd2hpY2ggaXMgYW4gZXJyb3IsIGJlY2F1c2UgaXQgZXhwZWN0cyBhIGtleQogICAgICAgICAjIG9mIHR5cGUgYnl0ZXMKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgaCA9IGhtYWMuSE1BQygia2V5IikKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X2RvdF9uZXdfd2l0aF9zdHJfa2V5KHNlbGYpOgogICAgICAgICAjIFBhc3MgYSBrZXkgb2YgdHlwZSBzdHIsIHdoaWNoIGlzIGFuIGVycm9yLCBiZWNhdXNlIGl0IGV4cGVjdHMgYSBrZXkKICAgICAgICAgIyBvZiB0eXBlIGJ5dGVzCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKICAgICAgICAgICAgIGggPSBobWFjLm5ldygia2V5IikKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X3dpdGh0ZXh0KHNlbGYpOgogICAgICAgICAjIENvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0LgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IiwgYiJoYXNoIHRoaXMhIikKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggdGV4dCBhcmd1bWVudCByYWlzZWQgZXhjZXB0aW9uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5oZXhkaWdlc3QoKSwgJzM0MzI1YjYzOWRhNGNmZDk1NzM1YjM4MWUyOGNiODY0JykKKworICAgIGRlZiB0ZXN0X3dpdGhfYnl0ZWFycmF5KHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGJ5dGVhcnJheShiImtleSIpLCBieXRlYXJyYXkoYiJoYXNoIHRoaXMhIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZ2VzdG1vZD0ibWQ1IikKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIGJ5dGVhcnJheSBhcmd1bWVudHMgcmFpc2VkIGV4Y2VwdGlvbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCksICczNDMyNWI2MzlkYTRjZmQ5NTczNWIzODFlMjhjYjg2NCcpCisKKyAgICBkZWYgdGVzdF93aXRoX21lbW9yeXZpZXdfbXNnKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IiwgbWVtb3J5dmlldyhiImhhc2ggdGhpcyEiKSwgZGlnZXN0bW9kPSJtZDUiKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJDb25zdHJ1Y3RvciBjYWxsIHdpdGggbWVtb3J5dmlldyBtc2cgcmFpc2VkIGV4Y2VwdGlvbi4iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGguaGV4ZGlnZXN0KCksICczNDMyNWI2MzlkYTRjZmQ5NTczNWIzODFlMjhjYjg2NCcpCiAKICAgICBkZWYgdGVzdF93aXRobW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbnN0cnVjdG9yIGNhbGwgd2l0aCB0ZXh0IGFuZCBkaWdlc3QgbW9kdWxlLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIia2V5IiwgYiIiLCBoYXNobGliLnNoYTEpCi0gICAgICAgIGV4Y2VwdDoKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ29uc3RydWN0b3IgY2FsbCB3aXRoIGhhc2hsaWIuc2hhMSByYWlzZWQgZXhjZXB0aW9uLiIpCiAKIGNsYXNzIFNhbml0eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIEBpZ25vcmVfd2FybmluZwogICAgIGRlZiB0ZXN0X2RlZmF1bHRfaXNfbWQ1KHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgaWYgSE1BQyBkZWZhdWx0cyB0byBNRDUgYWxnb3JpdGhtLgogICAgICAgICAjIE5PVEU6IHRoaXMgd2hpdGVib3ggdGVzdCBkZXBlbmRzIG9uIHRoZSBobWFjIGNsYXNzIGludGVybmFscwpAQCAtMjcyLDE5ICszNDMsMTkgQEAKICAgICAgICAgIyBFeGVyY2lzaW5nIGFsbCBtZXRob2RzIG9uY2UuCiAgICAgICAgICMgVGhpcyBtdXN0IG5vdCByYWlzZSBhbnkgZXhjZXB0aW9ucwogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIibXkgc2VjcmV0IGtleSIpCisgICAgICAgICAgICBoID0gaG1hYy5ITUFDKGIibXkgc2VjcmV0IGtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgICAgIGgudXBkYXRlKGIiY29tcHV0ZSB0aGUgaGFzaCBvZiB0aGlzIHRleHQhIikKICAgICAgICAgICAgIGRpZyA9IGguZGlnZXN0KCkKICAgICAgICAgICAgIGRpZyA9IGguaGV4ZGlnZXN0KCkKICAgICAgICAgICAgIGgyID0gaC5jb3B5KCkKLSAgICAgICAgZXhjZXB0OgorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFeGNlcHRpb24gcmFpc2VkIGR1cmluZyBub3JtYWwgdXNhZ2Ugb2YgSE1BQyBjbGFzcy4iKQogCiBjbGFzcyBDb3B5VGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIGlmIGF0dHJpYnV0ZXMgYXJlIG9mIHNhbWUgdHlwZS4KLSAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiKQorICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGgxLmRpZ2VzdF9jb25zID09IGgyLmRpZ2VzdF9jb25zLAogICAgICAgICAgICAgImRpZ2VzdCBjb25zdHJ1Y3RvcnMgZG9uJ3QgbWF0Y2guIikKQEAgLTI5NSw3ICszNjYsNyBAQAogCiAgICAgZGVmIHRlc3RfcmVhbGNvcHkoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiB0aGUgY29weSBtZXRob2QgY3JlYXRlZCBhIHJlYWwgY29weS4KLSAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiKQorICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgaDIgPSBoMS5jb3B5KCkKICAgICAgICAgIyBVc2luZyBpZCgpIGluIGNhc2Ugc29tZWJvZHkgaGFzIG92ZXJyaWRkZW4gX19lcV9fL19fbmVfXy4KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlkKGgxKSAhPSBpZChoMiksICJObyByZWFsIGNvcHkgb2YgdGhlIEhNQUMgaW5zdGFuY2UuIikKQEAgLTMwNiw3ICszNzcsNyBAQAogCiAgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBpZiB0aGUgY29weSBoYXMgdGhlIHNhbWUgZGlnZXN0cy4KLSAgICAgICAgaDEgPSBobWFjLkhNQUMoYiJrZXkiKQorICAgICAgICBoMSA9IGhtYWMuSE1BQyhiImtleSIsIGRpZ2VzdG1vZD0ibWQ1IikKICAgICAgICAgaDEudXBkYXRlKGIic29tZSByYW5kb20gdGV4dCIpCiAgICAgICAgIGgyID0gaDEuY29weSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDEuZGlnZXN0KCksIGgyLmRpZ2VzdCgpLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odG1sLnB5IGIvTGliL3Rlc3QvdGVzdF9odG1sLnB5CmluZGV4IDMwZGFjNTguLmQ2ZjBhZTggMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHRtbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0bWwucHkKQEAgLTE2LDkgKzE2LDg5IEBACiAgICAgICAgICAgICBodG1sLmVzY2FwZSgnXCc8c2NyaXB0PiImZm9vOyI8L3NjcmlwdD5cJycsIEZhbHNlKSwKICAgICAgICAgICAgICdcJyZsdDtzY3JpcHQmZ3Q7IiZhbXA7Zm9vOyImbHQ7L3NjcmlwdCZndDtcJycpCiAKKyAgICBkZWYgdGVzdF91bmVzY2FwZShzZWxmKToKKyAgICAgICAgbnVtZXJpY19mb3JtYXRzID0gWycmIyVkJywgJyYjJWQ7JywgJyYjeCV4JywgJyYjeCV4OyddCisgICAgICAgIGVycm1zZyA9ICd1bmVzY2FwZSglcikgc2hvdWxkIGhhdmUgcmV0dXJuZWQgJXInCisgICAgICAgIGRlZiBjaGVjayh0ZXh0LCBleHBlY3RlZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwudW5lc2NhcGUodGV4dCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ZXJybXNnICUgKHRleHQsIGV4cGVjdGVkKSkKKyAgICAgICAgZGVmIGNoZWNrX251bShudW0sIGV4cGVjdGVkKToKKyAgICAgICAgICAgIGZvciBmb3JtYXQgaW4gbnVtZXJpY19mb3JtYXRzOgorICAgICAgICAgICAgICAgIHRleHQgPSBmb3JtYXQgJSBudW0KKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGh0bWwudW5lc2NhcGUodGV4dCksIGV4cGVjdGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWVycm1zZyAlICh0ZXh0LCBleHBlY3RlZCkpCisgICAgICAgICMgY2hlY2sgdGV4dCB3aXRoIG5vIGNoYXJhY3RlciByZWZlcmVuY2VzCisgICAgICAgIGNoZWNrKCdubyBjaGFyYWN0ZXIgcmVmZXJlbmNlcycsICdubyBjaGFyYWN0ZXIgcmVmZXJlbmNlcycpCisgICAgICAgICMgY2hlY2sgJiBmb2xsb3dlZCBieSBpbnZhbGlkIGNoYXJzCisgICAgICAgIGNoZWNrKCcmXG4mXHQmICYmJywgJyZcbiZcdCYgJiYnKQorICAgICAgICAjIGNoZWNrICYgZm9sbG93ZWQgYnkgbnVtYmVycyBhbmQgbGV0dGVycworICAgICAgICBjaGVjaygnJjAgJjkgJmEgJjA7ICY5OyAmYTsnLCAnJjAgJjkgJmEgJjA7ICY5OyAmYTsnKQorICAgICAgICAjIGNoZWNrIGluY29tcGxldGUgZW50aXRpZXMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCisgICAgICAgIGZvciB4IGluIFsnJicsICcmIycsICcmI3gnLCAnJiNYJywgJyYjeScsICcmI3h5JywgJyYjWHknXToKKyAgICAgICAgICAgIGNoZWNrKHgsIHgpCisgICAgICAgICAgICBjaGVjayh4Kyc7JywgeCsnOycpCisgICAgICAgICMgY2hlY2sgc2V2ZXJhbCBjb21iaW5hdGlvbnMgb2YgbnVtZXJpYyBjaGFyYWN0ZXIgcmVmZXJlbmNlcywKKyAgICAgICAgIyBwb3NzaWJseSBmb2xsb3dlZCBieSBkaWZmZXJlbnQgY2hhcmFjdGVycworICAgICAgICBmb3JtYXRzID0gWycmIyVkJywgJyYjJTA3ZCcsICcmIyVkOycsICcmIyUwN2Q7JywKKyAgICAgICAgICAgICAgICAgICAnJiN4JXgnLCAnJiN4JTA2eCcsICcmI3gleDsnLCAnJiN4JTA2eDsnLAorICAgICAgICAgICAgICAgICAgICcmI3glWCcsICcmI3glMDZYJywgJyYjWCV4OycsICcmI1glMDZ4OyddCisgICAgICAgIGZvciBudW0sIGNoYXIgaW4gemlwKFs2NSwgOTcsIDM0LCAzOCwgMHgyNjAzLCAweDEwMTIzNF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnQScsICdhJywgJyInLCAnJicsICdcdTI2MDMnLCAnXFUwMDEwMTIzNCddKToKKyAgICAgICAgICAgIGZvciBzIGluIGZvcm1hdHM6CisgICAgICAgICAgICAgICAgY2hlY2socyAlIG51bSwgY2hhcikKKyAgICAgICAgICAgICAgICBmb3IgZW5kIGluIFsnICcsICdYJ106CisgICAgICAgICAgICAgICAgICAgIGNoZWNrKChzK2VuZCkgJSBudW0sIGNoYXIrZW5kKQorICAgICAgICAjIGNoZWNrIGludmFsaWQgY29kZSBwb2ludHMKKyAgICAgICAgZm9yIGNwIGluIFsweEQ4MDAsIDB4REIwMCwgMHhEQzAwLCAweERGRkYsIDB4MTEwMDAwXToKKyAgICAgICAgICAgIGNoZWNrX251bShjcCwgJ1x1RkZGRCcpCisgICAgICAgICMgY2hlY2sgbW9yZSBpbnZhbGlkIGNvZGUgcG9pbnRzCisgICAgICAgIGZvciBjcCBpbiBbMHgxLCAweGIsIDB4ZSwgMHg3ZiwgMHhmZmZlLCAweGZmZmYsIDB4MTBmZmZlLCAweDEwZmZmZl06CisgICAgICAgICAgICBjaGVja19udW0oY3AsICcnKQorICAgICAgICAjIGNoZWNrIGludmFsaWQgbnVtYmVycworICAgICAgICBmb3IgbnVtLCBjaCBpbiB6aXAoWzB4MGQsIDB4ODAsIDB4OTUsIDB4OWRdLCAnXHJcdTIwYWNcdTIwMjJceDlkJyk6CisgICAgICAgICAgICBjaGVja19udW0obnVtLCBjaCkKKyAgICAgICAgIyBjaGVjayBzbWFsbCBudW1iZXJzCisgICAgICAgIGNoZWNrX251bSgwLCAnXHVGRkZEJykKKyAgICAgICAgY2hlY2tfbnVtKDksICdcdCcpCisgICAgICAgICMgY2hlY2sgYSBiaWcgbnVtYmVyCisgICAgICAgIGNoZWNrX251bSgxMDAwMDAwMDAwMDAwMDAwMDAwLCAnXHVGRkZEJykKKyAgICAgICAgIyBjaGVjayB0aGF0IG11bHRpcGxlIHRyYWlsaW5nIHNlbWljb2xvbnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5CisgICAgICAgIGZvciBlIGluIFsnJnF1b3Q7OycsICcmIzM0OzsnLCAnJiN4MjI7OycsICcmI1gyMjs7J106CisgICAgICAgICAgICBjaGVjayhlLCAnIjsnKQorICAgICAgICAjIGNoZWNrIHRoYXQgc2VtaWNvbG9ucyBpbiB0aGUgbWlkZGxlIGRvbid0IGNyZWF0ZSBwcm9ibGVtcworICAgICAgICBmb3IgZSBpbiBbJyZxdW90O3F1b3Q7JywgJyYjMzQ7cXVvdDsnLCAnJiN4MjI7cXVvdDsnLCAnJiNYMjI7cXVvdDsnXToKKyAgICAgICAgICAgIGNoZWNrKGUsICcicXVvdDsnKQorICAgICAgICAjIGNoZWNrIHRyaXBsZSBhZGphY2VudCBjaGFycmVmcworICAgICAgICBmb3IgZSBpbiBbJyZxdW90JywgJyYjMzQnLCAnJiN4MjInLCAnJiNYMjInXToKKyAgICAgICAgICAgIGNoZWNrKGUqMywgJyIiIicpCisgICAgICAgICAgICBjaGVjaygoZSsnOycpKjMsICciIiInKQorICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIGNhc2UgaXMgcmVzcGVjdGVkCisgICAgICAgIGZvciBlIGluIFsnJmFtcCcsICcmYW1wOycsICcmQU1QJywgJyZBTVA7J106CisgICAgICAgICAgICBjaGVjayhlLCAnJicpCisgICAgICAgIGZvciBlIGluIFsnJkFtcCcsICcmQW1wOyddOgorICAgICAgICAgICAgY2hlY2soZSwgZSkKKyAgICAgICAgIyBjaGVjayB0aGF0IG5vbi1leGlzdGVudCBuYW1lZCBlbnRpdGllcyBhcmUgcmV0dXJuZWQgdW5jaGFuZ2VkCisgICAgICAgIGNoZWNrKCcmc3ZhZGlsZmFyaTsnLCAnJnN2YWRpbGZhcmk7JykKKyAgICAgICAgIyB0aGUgZm9sbG93aW5nIGV4YW1wbGVzIGFyZSBpbiB0aGUgaHRtbDUgc3BlY3MKKyAgICAgICAgY2hlY2soJyZub3RpdCcsICfCrGl0JykKKyAgICAgICAgY2hlY2soJyZub3RpdDsnLCAnwqxpdDsnKQorICAgICAgICBjaGVjaygnJm5vdGluJywgJ8KsaW4nKQorICAgICAgICBjaGVjaygnJm5vdGluOycsICfiiIknKQorICAgICAgICAjIGEgc2ltaWxhciBleGFtcGxlIHdpdGggYSBsb25nIG5hbWUKKyAgICAgICAgY2hlY2soJyZub3RSZWFsbHlBbkV4aXN0aW5nTmFtZWRDaGFyYWN0ZXJSZWZlcmVuY2U7JywKKyAgICAgICAgICAgICAgJ8KsUmVhbGx5QW5FeGlzdGluZ05hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlOycpCisgICAgICAgICMgbG9uZ2VzdCB2YWxpZCBuYW1lCisgICAgICAgIGNoZWNrKCcmQ291bnRlckNsb2Nrd2lzZUNvbnRvdXJJbnRlZ3JhbDsnLCAn4oizJykKKyAgICAgICAgIyBjaGVjayBhIGNoYXJyZWYgdGhhdCBtYXBzIHRvIHR3byB1bmljb2RlIGNoYXJzCisgICAgICAgIGNoZWNrKCcmYWNFOycsICdcdTIyM0VcdTAzMzMnKQorICAgICAgICBjaGVjaygnJmFjRScsICcmYWNFJykKKyAgICAgICAgIyBzZWUgIzEyODg4CisgICAgICAgIGNoZWNrKCcmIzEyMzsgJyAqIDEwNTAsICd7ICcgKiAxMDUwKQorICAgICAgICAjIHNlZSAjMTUxNTYKKyAgICAgICAgY2hlY2soJyZFYWN1dGVyaWMmRWFjdXRlO3JpYyZhbHBoYWNlbnRhdXJpJmFscGhhO2NlbnRhdXJpJywKKyAgICAgICAgICAgICAgJ8OJcmljw4lyaWMmYWxwaGFjZW50YXVyac6xY2VudGF1cmknKQorICAgICAgICBjaGVjaygnJmNvOycsICcmY287JykKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChIdG1sVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weSBiL0xpYi90ZXN0L3Rlc3RfaHRtbHBhcnNlci5weQppbmRleCAxMWQ5YzljLi4xNDRmODIwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2h0bWxwYXJzZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odG1scGFyc2VyLnB5CkBAIC03MCw2ICs3MCwxNSBAQAogICAgICAgICBzZWxmLmFwcGVuZCgoInN0YXJ0dGFnX3RleHQiLCBzZWxmLmdldF9zdGFydHRhZ190ZXh0KCkpKQogCiAKK2NsYXNzIEV2ZW50Q29sbGVjdG9yQ2hhcnJlZnMoRXZlbnRDb2xsZWN0b3IpOgorCisgICAgZGVmIGhhbmRsZV9jaGFycmVmKHNlbGYsIGRhdGEpOgorICAgICAgICBzZWxmLmZhaWwoJ1RoaXMgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGNvbnZlcnRfY2hhcnJlZnM9VHJ1ZScpCisKKyAgICBkZWYgaGFuZGxlX2VudGl0eXJlZihzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5mYWlsKCdUaGlzIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2l0aCBjb252ZXJ0X2NoYXJyZWZzPVRydWUnKQorCisKIGNsYXNzIFRlc3RDYXNlQmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKQEAgLTg0LDI2ICs5MywzMCBAQAogICAgICAgICBwYXJzZXIuY2xvc2UoKQogICAgICAgICBldmVudHMgPSBwYXJzZXIuZ2V0X2V2ZW50cygpCiAgICAgICAgIGlmIGV2ZW50cyAhPSBleHBlY3RlZF9ldmVudHM6Ci0gICAgICAgICAgICBzZWxmLmZhaWwoInJlY2VpdmVkIGV2ZW50cyBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGV2ZW50c1xuIgotICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZDpcbiIgKyBwcHJpbnQucGZvcm1hdChleHBlY3RlZF9ldmVudHMpICsKKyAgICAgICAgICAgIHNlbGYuZmFpbCgicmVjZWl2ZWQgZXZlbnRzIGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgZXZlbnRzIiArCisgICAgICAgICAgICAgICAgICAgICAgIlxuU291cmNlOlxuIiArIHJlcHIoc291cmNlKSArCisgICAgICAgICAgICAgICAgICAgICAgIlxuRXhwZWN0ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXhwZWN0ZWRfZXZlbnRzKSArCiAgICAgICAgICAgICAgICAgICAgICAgIlxuUmVjZWl2ZWQ6XG4iICsgcHByaW50LnBmb3JtYXQoZXZlbnRzKSkKIAogICAgIGRlZiBfcnVuX2NoZWNrX2V4dHJhKHNlbGYsIHNvdXJjZSwgZXZlbnRzKToKLSAgICAgICAgc2VsZi5fcnVuX2NoZWNrKHNvdXJjZSwgZXZlbnRzLCBFdmVudENvbGxlY3RvckV4dHJhKCkpCisgICAgICAgIHNlbGYuX3J1bl9jaGVjayhzb3VyY2UsIGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yRXh0cmEoY29udmVydF9jaGFycmVmcz1GYWxzZSkpCiAKICAgICBkZWYgX3BhcnNlX2Vycm9yKHNlbGYsIHNvdXJjZSk6CiAgICAgICAgIGRlZiBwYXJzZShzb3VyY2U9c291cmNlKToKICAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuZ2V0X2NvbGxlY3RvcigpCiAgICAgICAgICAgICBwYXJzZXIuZmVlZChzb3VyY2UpCiAgICAgICAgICAgICBwYXJzZXIuY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhodG1sLnBhcnNlci5IVE1MUGFyc2VFcnJvciwgcGFyc2UpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoaHRtbC5wYXJzZXIuSFRNTFBhcnNlRXJyb3IpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgcGFyc2UoKQogCiAKIGNsYXNzIEhUTUxQYXJzZXJTdHJpY3RUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6CiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIiIsIERlcHJlY2F0aW9uV2FybmluZyksIHF1aXRlPUZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSwgY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X3Byb2Nlc3NpbmdfaW5zdHJ1Y3Rpb25fb25seShzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCI8P3Byb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24+IiwgWwpAQCAtMzM5LDcgKzM1Miw3IEBACiAgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2socywgWygic3RhcnR0YWciLCBlbGVtZW50X2xvd2VyLCBbXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiZGF0YSIsIGNvbnRlbnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImVuZHRhZyIsIGVsZW1lbnRfbG93ZXIpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0b3I9Q29sbGVjdG9yKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPUNvbGxlY3Rvcihjb252ZXJ0X2NoYXJyZWZzPUZhbHNlKSkKIAogICAgIGRlZiB0ZXN0X2NvbW1lbnRzKHNlbGYpOgogICAgICAgICBodG1sID0gKCI8IS0tIEknbSBhIHZhbGlkIGNvbW1lbnQgLS0+IgpAQCAtMzY3LDExICszODAsNjAgQEAKICAgICAgICAgICAgICAgICAgICAgKCdjb21tZW50JywgJ1tpZiBsdGUgSUUgN10+cHJldHR5PzwhW2VuZGlmXScpXQogICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCiAKKyAgICBkZWYgdGVzdF9jb252ZXJ0X2NoYXJyZWZzKHNlbGYpOgorICAgICAgICBjb2xsZWN0b3IgPSBsYW1iZGE6IEV2ZW50Q29sbGVjdG9yQ2hhcnJlZnMoY29udmVydF9jaGFycmVmcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29sbGVjdG9yKCkuY29udmVydF9jaGFycmVmcykKKyAgICAgICAgY2hhcnJlZnMgPSBbJyZxdW90OycsICcmIzM0OycsICcmI3gyMjsnLCAnJnF1b3QnLCAnJiMzNCcsICcmI3gyMiddCisgICAgICAgICMgY2hlY2sgY2hhcnJlZnMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdGV4dC9hdHRyaWJ1dGVzCisgICAgICAgIGV4cGVjdGVkID0gWygnc3RhcnR0YWcnLCAnYScsIFsoJ2hyZWYnLCAnZm9vInphcicpXSksCisgICAgICAgICAgICAgICAgICAgICgnZGF0YScsICdhInonKSwgKCdlbmR0YWcnLCAnYScpXQorICAgICAgICBmb3IgY2hhcnJlZiBpbiBjaGFycmVmczoKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnPGEgaHJlZj0iZm9vezB9emFyIj5hezB9ejwvYT4nLmZvcm1hdChjaGFycmVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCwgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIGNoYXJyZWZzIGF0IHRoZSBiZWdpbm5pbmcvZW5kIG9mIHRoZSB0ZXh0L2F0dHJpYnV0ZXMKKyAgICAgICAgZXhwZWN0ZWQgPSBbKCdkYXRhJywgJyInKSwKKyAgICAgICAgICAgICAgICAgICAgKCdzdGFydHRhZycsICdhJywgWygneCcsICciJyksICgneScsICciWCcpLCAoJ3onLCAnWCInKV0pLAorICAgICAgICAgICAgICAgICAgICAoJ2RhdGEnLCAnIicpLCAoJ2VuZHRhZycsICdhJyksICgnZGF0YScsICciJyldCisgICAgICAgIGZvciBjaGFycmVmIGluIGNoYXJyZWZzOgorICAgICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCd7MH08YSB4PSJ7MH0iIHk9InswfVgiIHo9Ilh7MH0iPicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnezB9PC9hPnswfScuZm9ybWF0KGNoYXJyZWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCisgICAgICAgICMgY2hlY2sgY2hhcnJlZnMgaW4gPHNjcmlwdD4vPHN0eWxlPiBlbGVtZW50cworICAgICAgICBmb3IgY2hhcnJlZiBpbiBjaGFycmVmczoKKyAgICAgICAgICAgIHRleHQgPSAnWCcuam9pbihbY2hhcnJlZl0qMykKKyAgICAgICAgICAgIGV4cGVjdGVkID0gWygnZGF0YScsICciJyksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ3N0YXJ0dGFnJywgJ3NjcmlwdCcsIFtdKSwgKCdkYXRhJywgdGV4dCksCisgICAgICAgICAgICAgICAgICAgICAgICAoJ2VuZHRhZycsICdzY3JpcHQnKSwgKCdkYXRhJywgJyInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICgnc3RhcnR0YWcnLCAnc3R5bGUnLCBbXSksICgnZGF0YScsIHRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCdlbmR0YWcnLCAnc3R5bGUnKSwgKCdkYXRhJywgJyInKV0KKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjaygnezF9PHNjcmlwdD57MH08L3NjcmlwdD57MX0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzxzdHlsZT57MH08L3N0eWxlPnsxfScuZm9ybWF0KHRleHQsIGNoYXJyZWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLCBjb2xsZWN0b3I9Y29sbGVjdG9yKCkpCisgICAgICAgICMgY2hlY2sgdHJ1bmNhdGVkIGNoYXJyZWZzIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUKKyAgICAgICAgaHRtbCA9ICcmcXVvICYjICYjeCcKKyAgICAgICAgZm9yIHggaW4gcmFuZ2UoMSwgbGVuKGh0bWwpKToKKyAgICAgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sWzp4XSwgWygnZGF0YScsIGh0bWxbOnhdKV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorICAgICAgICAjIGNoZWNrIGEgc3RyaW5nIHdpdGggbm8gY2hhcnJlZnMKKyAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCdubyBjaGFycmVmcyBoZXJlJywgWygnZGF0YScsICdubyBjaGFycmVmcyBoZXJlJyldLAorICAgICAgICAgICAgICAgICAgICAgICAgY29sbGVjdG9yPWNvbGxlY3RvcigpKQorCiAKIGNsYXNzIEhUTUxQYXJzZXJUb2xlcmFudFRlc3RDYXNlKEhUTUxQYXJzZXJTdHJpY3RUZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKLSAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1GYWxzZSkKKyAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9kZXByZWNhdGlvbl93YXJuaW5ncyhzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBFdmVudENvbGxlY3RvcigpICAjIGNvbnZlcnRfY2hhcnJlZnMgbm90IHBhc3NlZCBleHBsaWNpdGx5CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PVRydWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgRXZlbnRDb2xsZWN0b3Ioc3RyaWN0PUZhbHNlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGh0bWwucGFyc2VyLkhUTUxQYXJzZUVycm9yKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIEV2ZW50Q29sbGVjdG9yKCkuZXJyb3IoJ3Rlc3QnKQogCiAgICAgZGVmIHRlc3RfdG9sZXJhbnRfcGFyc2luZyhzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKCc8aHRtbCA8aHRtbD50ZT4+eHQmYTw8YmM8L2E+PC9odG1sPlxuJwpAQCAtNTY0LDE3ICs2MjYsMTIgQEAKICAgICAgICAgZm9yIGh0bWwsIGV4cGVjdGVkIGluIGRhdGE6CiAgICAgICAgICAgICBzZWxmLl9ydW5fY2hlY2soaHRtbCwgZXhwZWN0ZWQpCiAKLSAgICBkZWYgdGVzdF91bmVzY2FwZV9mdW5jdGlvbihzZWxmKToKKyAgICBkZWYgdGVzdF91bmVzY2FwZV9tZXRob2Qoc2VsZik6CisgICAgICAgIGZyb20gaHRtbCBpbXBvcnQgdW5lc2NhcGUKICAgICAgICAgcCA9IHNlbGYuZ2V0X2NvbGxlY3RvcigpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJiNiYWQ7JyksJyYjYmFkOycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJiMwMDM4OycpLCcmJykKLSAgICAgICAgIyBzZWUgIzEyODg4Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZSgnJiMxMjM7ICcgKiAxMDUwKSwgJ3sgJyAqIDEwNTApCi0gICAgICAgICMgc2VlICMxNTE1NgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyZFYWN1dGVyaWMmRWFjdXRlO3JpYycKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcmYWxwaGFjZW50YXVyaSZhbHBoYTtjZW50YXVyaScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ8OJcmljw4lyaWMmYWxwaGFjZW50YXVyac6xY2VudGF1cmknKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAudW5lc2NhcGUoJyZjbzsnKSwgJyZjbzsnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHMgPSAnJnF1b3Q7JiMzNDsmI3gyMjsmcXVvdCYjMzQmI3gyMiYjYmFkOycKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC51bmVzY2FwZShzKSwgdW5lc2NhcGUocykpCiAKICAgICBkZWYgdGVzdF9icm9rZW5fY29tbWVudHMoc2VsZik6CiAgICAgICAgIGh0bWwgPSAoJzwhIG5vdCByZWFsbHkgYSBjb21tZW50ID4nCkBAIC02MjUsMTIgKzY4MiwyNCBAQAogICAgICAgICBdCiAgICAgICAgIHNlbGYuX3J1bl9jaGVjayhodG1sLCBleHBlY3RlZCkKIAorICAgIGRlZiB0ZXN0X2NvbnZlcnRfY2hhcnJlZnNfZHJvcHBlZF90ZXh0KHNlbGYpOgorICAgICAgICAjICMyMzE0NDogbWFrZSBzdXJlIHRoYXQgYWxsIHRoZSBldmVudHMgYXJlIHRyaWdnZXJlZCB3aGVuCisgICAgICAgICMgY29udmVydF9jaGFycmVmcyBpcyBUcnVlLCBldmVuIGlmIHdlIGRvbid0IGNhbGwgLmNsb3NlKCkKKyAgICAgICAgcGFyc2VyID0gRXZlbnRDb2xsZWN0b3IoY29udmVydF9jaGFycmVmcz1UcnVlKQorICAgICAgICAjIGJlZm9yZSB0aGUgZml4LCBiYXIgJiBiYXogd2FzIG1pc3NpbmcKKyAgICAgICAgcGFyc2VyLmZlZWQoImZvbyA8YT5saW5rPC9hPiBiYXIgJmFtcDsgYmF6IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHBhcnNlci5nZXRfZXZlbnRzKCksCisgICAgICAgICAgICBbKCdkYXRhJywgJ2ZvbyAnKSwgKCdzdGFydHRhZycsICdhJywgW10pLCAoJ2RhdGEnLCAnbGluaycpLAorICAgICAgICAgICAgICgnZW5kdGFnJywgJ2EnKSwgKCdkYXRhJywgJyBiYXIgJiBiYXonKV0KKyAgICAgICAgKQorCiAKIGNsYXNzIEF0dHJpYnV0ZXNTdHJpY3RUZXN0Q2FzZShUZXN0Q2FzZUJhc2UpOgogCiAgICAgZGVmIGdldF9jb2xsZWN0b3Ioc2VsZik6CiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoIiIsIERlcHJlY2F0aW9uV2FybmluZyksIHF1aXRlPUZhbHNlKToKLSAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBFdmVudENvbGxlY3RvcihzdHJpY3Q9VHJ1ZSwgY29udmVydF9jaGFycmVmcz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X2F0dHJfc3ludGF4KHNlbGYpOgogICAgICAgICBvdXRwdXQgPSBbCkBAIC02OTEsNyArNzYwLDcgQEAKIGNsYXNzIEF0dHJpYnV0ZXNUb2xlcmFudFRlc3RDYXNlKEF0dHJpYnV0ZXNTdHJpY3RUZXN0Q2FzZSk6CiAKICAgICBkZWYgZ2V0X2NvbGxlY3RvcihzZWxmKToKLSAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKHN0cmljdD1GYWxzZSkKKyAgICAgICAgcmV0dXJuIEV2ZW50Q29sbGVjdG9yKGNvbnZlcnRfY2hhcnJlZnM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9hdHRyX2Z1bmt5X25hbWVzMihzZWxmKToKICAgICAgICAgc2VsZi5fcnVuX2NoZWNrKApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZWphci5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cF9jb29raWVqYXIucHkKaW5kZXggZmI2NmY2Zi4uNTAyNjBmZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZWphci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBfY29va2llamFyLnB5CkBAIC00NzksNiArNDc5LDkgQEAKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb206ODAvIiwgJ2Zvbz1iYXI7IGV4cGlyZXM9JykKICAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgImh0dHA6Ly93d3cuYWNtZS5jb206ODAvIiwgJ3NwYW09ZWdnczsgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwaXJlcz0iRm9vIEJhciAyNSAzMzoyMjoxMSAzMDIyIicpCisgICAgICAgIGludGVyYWN0X25ldHNjYXBlKGMsICdodHRwOi8vd3d3LmFjbWUuY29tLycsICdmb3J0eXR3bz0nKQorICAgICAgICBpbnRlcmFjdF9uZXRzY2FwZShjLCAnaHR0cDovL3d3dy5hY21lLmNvbS8nLCAnPXVubGFkZW5zd2FsbG93JykKKyAgICAgICAgaW50ZXJhY3RfbmV0c2NhcGUoYywgJ2h0dHA6Ly93d3cuYWNtZS5jb20vJywgJ2hvbHloYW5kZ3JlbmFkZScpCiAKICAgICAgICAgY29va2llID0gYy5fY29va2llc1siLmFjbWUuY29tIl1bIi8iXVsic3BhbSJdCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLmRvbWFpbiwgIi5hY21lLmNvbSIpCkBAIC01MDUsNiArNTA4LDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZvby5leHBpcmVzKQogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcGFtLmV4cGlyZXMpCiAKKyAgICAgICAgY29va2llID0gYy5fY29va2llc1snd3d3LmFjbWUuY29tJ11bJy8nXVsnZm9ydHl0d28nXQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShjb29raWUudmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29va2llLnZhbHVlLCAnJykKKworICAgICAgICAjIHRoZXJlIHNob3VsZCBiZSBhIGRpc3RpbmN0aW9uIGJldHdlZW4gYSBwcmVzZW50IGJ1dCBlbXB0eSB2YWx1ZQorICAgICAgICAjIChhYm92ZSkgYW5kIGEgdmFsdWUgdGhhdCdzIGVudGlyZWx5IG1pc3NpbmcgKGJlbG93KQorCisgICAgICAgIGNvb2tpZSA9IGMuX2Nvb2tpZXNbJ3d3dy5hY21lLmNvbSddWycvJ11bJ2hvbHloYW5kZ3JlbmFkZSddCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvb2tpZS52YWx1ZSkKKwogICAgIGRlZiB0ZXN0X25zX3BhcnNlcl9zcGVjaWFsX25hbWVzKHNlbGYpOgogICAgICAgICAjIG5hbWVzIHN1Y2ggYXMgJ2V4cGlyZXMnIGFyZSBub3Qgc3BlY2lhbCBpbiBmaXJzdCBuYW1lPXZhbHVlIHBhaXIKICAgICAgICAgIyBvZiBTZXQtQ29va2llOiBoZWFkZXIKQEAgLTU1Myw2ICs1NjYsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYyksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3NwYW09ImJhciInLCBoKQogCisgICAgICAgICMgdGVzdCBpZiBmcmFjdGlvbmFsIGV4cGlyeSBpcyBhY2NlcHRlZAorICAgICAgICBjb29raWUgID0gQ29va2llKDAsICJuYW1lIiwgInZhbHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOb25lLCBGYWxzZSwgInd3dy5weXRob24ub3JnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBGYWxzZSwgIi8iLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBGYWxzZSwgIjE0NDQzMTIzODMuMDE4MzA3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBGYWxzZSwgTm9uZSwgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb29raWUuZXhwaXJlcywgMTQ0NDMxMjM4MykKKwogICAgICAgICAjIFhYWCBSRkMgMjk2NSBleHBpcnkgcnVsZXMgKHNvbWUgYXBwbHkgdG8gVjAgdG9vKQogCiAgICAgZGVmIHRlc3RfZGVmYXVsdF9wYXRoKHNlbGYpOgpAQCAtMTA4MCw2ICsxMTAyLDEzIEBACiAgICAgICAgICAgICBwYXJzZV9uc19oZWFkZXJzKFsiZm9vIl0pLAogICAgICAgICAgICAgW1soImZvbyIsIE5vbmUpLCAoInZlcnNpb24iLCAiMCIpXV0KICAgICAgICAgICAgICkKKyAgICAgICAgIyBtaXNzaW5nIGNvb2tpZSB2YWx1ZXMgZm9yIHBhcnNlZCBhdHRyaWJ1dGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZV9uc19oZWFkZXJzKFsnZm9vPWJhcjsgZXhwaXJlcyddKSwKKyAgICAgICAgICAgIFtbKCdmb28nLCAnYmFyJyksICgnZXhwaXJlcycsIE5vbmUpLCAoJ3ZlcnNpb24nLCAnMCcpXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXJzZV9uc19oZWFkZXJzKFsnZm9vPWJhcjsgdmVyc2lvbiddKSwKKyAgICAgICAgICAgIFtbKCdmb28nLCAnYmFyJyksICgndmVyc2lvbicsIE5vbmUpXV0pCiAgICAgICAgICMgc2hvdWxkbid0IGFkZCB2ZXJzaW9uIGlmIGhlYWRlciBpcyBlbXB0eQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlX25zX2hlYWRlcnMoWyIiXSksIFtdKQogCkBAIC0xMDkyLDYgKzExMjEsOCBAQAogICAgICAgICAgICAgYy5leHRyYWN0X2Nvb2tpZXMociwgcmVxKQogICAgICAgICAgICAgcmV0dXJuIGMKIAorICAgICAgICBmdXR1cmUgPSB0aW1lMm5ldHNjYXBlKHRpbWUudGltZSgpKzM2MDApCisKICAgICAgICAgIyBub25lIG9mIHRoZXNlIGJhZCBoZWFkZXJzIHNob3VsZCBjYXVzZSBhbiBleGNlcHRpb24gdG8gYmUgcmFpc2VkCiAgICAgICAgIGZvciBoZWFkZXJzIGluIFsKICAgICAgICAgICAgIFsiU2V0LUNvb2tpZTogIl0sICAjIGFjdHVhbGx5LCBub3RoaW5nIHdyb25nIHdpdGggdGhpcwpAQCAtMTEwMiw2ICsxMTMzLDcgQEAKICAgICAgICAgICAgIFsiU2V0LUNvb2tpZTogYj1mb287IG1heC1hZ2U9b29wcyJdLAogICAgICAgICAgICAgIyBiYWQgdmVyc2lvbgogICAgICAgICAgICAgWyJTZXQtQ29va2llOiBiPWZvbzsgdmVyc2lvbj1zcGFtIl0sCisgICAgICAgICAgICBbIlNldC1Db29raWU6OyBFeHBpcmVzPSVzIiAlIGZ1dHVyZV0sCiAgICAgICAgICAgICBdOgogICAgICAgICAgICAgYyA9IGNvb2tpZWphcl9mcm9tX2Nvb2tpZV9oZWFkZXJzKGhlYWRlcnMpCiAgICAgICAgICAgICAjIHRoZXNlIGJhZCBjb29raWVzIHNob3VsZG4ndCBiZSBzZXQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaHR0cF9jb29raWVzLnB5IGIvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZXMucHkKaW5kZXggOGQ3YzIyMC4uYzdiNjgwYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9odHRwX2Nvb2tpZXMucHkKQEAgLTMsNyArMyw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBydW5fZG9jdGVzdCwgY2hlY2tfd2FybmluZ3MKIGltcG9ydCB1bml0dGVzdAogZnJvbSBodHRwIGltcG9ydCBjb29raWVzCi0KK2ltcG9ydCBwaWNrbGUKIGltcG9ydCB3YXJuaW5ncwogCiBjbGFzcyBDb29raWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMjcsNyArMTI3LDcgQEAKICAgICAgICAgQ1snQ3VzdG9tZXInXVsnc2VjdXJlJ10gPSBUcnVlCiAgICAgICAgIENbJ0N1c3RvbWVyJ11bJ2h0dHBvbmx5J10gPSBUcnVlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQy5vdXRwdXQoKSwKLSAgICAgICAgICAgICdTZXQtQ29va2llOiBDdXN0b21lcj0iV0lMRV9FX0NPWU9URSI7IGh0dHBvbmx5OyBzZWN1cmUnKQorICAgICAgICAgICAgJ1NldC1Db29raWU6IEN1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgSHR0cE9ubHk7IFNlY3VyZScpCiAKICAgICBkZWYgdGVzdF9zZWN1cmVfaHR0cG9ubHlfZmFsc2VfaWZfbm90X3ByZXNlbnQoc2VsZik6CiAgICAgICAgIEMgPSBjb29raWVzLlNpbXBsZUNvb2tpZSgpCkBAIC0xNjUsNyArMTY1LDcgQEAKICAgICAgICAgQyA9IGNvb2tpZXMuU2ltcGxlQ29va2llKCkKICAgICAgICAgQy5sb2FkKCdlZ2dzICA9ICBzY3JhbWJsZWQgIDsgIHNlY3VyZSAgOyAgcGF0aCAgPSAgYmFyICAgOyBmb289Zm9vICAgJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChDLm91dHB1dCgpLAotICAgICAgICAgICAgJ1NldC1Db29raWU6IGVnZ3M9c2NyYW1ibGVkOyBQYXRoPWJhcjsgc2VjdXJlXHJcblNldC1Db29raWU6IGZvbz1mb28nKQorICAgICAgICAgICAgJ1NldC1Db29raWU6IGVnZ3M9c2NyYW1ibGVkOyBQYXRoPWJhcjsgU2VjdXJlXHJcblNldC1Db29raWU6IGZvbz1mb28nKQogCiAgICAgZGVmIHRlc3RfcXVvdGVkX21ldGEoc2VsZik6CiAgICAgICAgICMgVHJ5IGNvb2tpZSB3aXRoIHF1b3RlZCBtZXRhLWRhdGEKQEAgLTIwMCw2ICsyMDAsMTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChDKSwge30pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMub3V0cHV0KCksICcnKQogCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICByYXdkYXRhID0gJ0N1c3RvbWVyPSJXSUxFX0VfQ09ZT1RFIjsgUGF0aD0vYWNtZTsgVmVyc2lvbj0xJworICAgICAgICBleHBlY3RlZF9vdXRwdXQgPSAnU2V0LUNvb2tpZTogJXMnICUgcmF3ZGF0YQorCisgICAgICAgIEMgPSBjb29raWVzLlNpbXBsZUNvb2tpZSgpCisgICAgICAgIEMubG9hZChyYXdkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEMub3V0cHV0KCksIGV4cGVjdGVkX291dHB1dCkKKworICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHByb3RvPXByb3RvKToKKyAgICAgICAgICAgICAgICBDMSA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoQywgcHJvdG9jb2w9cHJvdG8pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoQzEub3V0cHV0KCksIGV4cGVjdGVkX291dHB1dCkKKwogCiBjbGFzcyBNb3JzZWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdHMgZm9yIHRoZSBNb3JzZWwgb2JqZWN0LiIiIgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9odHRwbGliLnB5CmluZGV4IGQ4MTcyYzEuLmRmOWE5ZTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaHR0cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBsaWIucHkKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgZXJybm8KIGZyb20gaHR0cCBpbXBvcnQgY2xpZW50CiBpbXBvcnQgaW8KK2ltcG9ydCBpdGVydG9vbHMKIGltcG9ydCBvcwogaW1wb3J0IGFycmF5CiBpbXBvcnQgc29ja2V0CkBAIC0yMSwyMCArMjIsMzQgQEAKIEhPU1QgPSBzdXBwb3J0LkhPU1QKIAogY2xhc3MgRmFrZVNvY2tldDoKLSAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dCwgZmlsZWNsYXNzPWlvLkJ5dGVzSU8pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXh0LCBmaWxlY2xhc3M9aW8uQnl0ZXNJTywgaG9zdD1Ob25lLCBwb3J0PU5vbmUpOgogICAgICAgICBpZiBpc2luc3RhbmNlKHRleHQsIHN0cik6CiAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5lbmNvZGUoImFzY2lpIikKICAgICAgICAgc2VsZi50ZXh0ID0gdGV4dAogICAgICAgICBzZWxmLmZpbGVjbGFzcyA9IGZpbGVjbGFzcwogICAgICAgICBzZWxmLmRhdGEgPSBiJycKKyAgICAgICAgc2VsZi5zZW5kYWxsX2NhbGxzID0gMAorICAgICAgICBzZWxmLmZpbGVfY2xvc2VkID0gRmFsc2UKKyAgICAgICAgc2VsZi5ob3N0ID0gaG9zdAorICAgICAgICBzZWxmLnBvcnQgPSBwb3J0CiAKICAgICBkZWYgc2VuZGFsbChzZWxmLCBkYXRhKToKKyAgICAgICAgc2VsZi5zZW5kYWxsX2NhbGxzICs9IDEKICAgICAgICAgc2VsZi5kYXRhICs9IGRhdGEKIAogICAgIGRlZiBtYWtlZmlsZShzZWxmLCBtb2RlLCBidWZzaXplPU5vbmUpOgogICAgICAgICBpZiBtb2RlICE9ICdyJyBhbmQgbW9kZSAhPSAncmInOgogICAgICAgICAgICAgcmFpc2UgY2xpZW50LlVuaW1wbGVtZW50ZWRGaWxlTW9kZSgpCi0gICAgICAgIHJldHVybiBzZWxmLmZpbGVjbGFzcyhzZWxmLnRleHQpCisgICAgICAgICMga2VlcCB0aGUgZmlsZSBhcm91bmQgc28gd2UgY2FuIGNoZWNrIGhvdyBtdWNoIHdhcyByZWFkIGZyb20gaXQKKyAgICAgICAgc2VsZi5maWxlID0gc2VsZi5maWxlY2xhc3Moc2VsZi50ZXh0KQorICAgICAgICBzZWxmLmZpbGUuY2xvc2UgPSBzZWxmLmZpbGVfY2xvc2UgI25lcmYgY2xvc2UgKCkKKyAgICAgICAgcmV0dXJuIHNlbGYuZmlsZQorCisgICAgZGVmIGZpbGVfY2xvc2Uoc2VsZik6CisgICAgICAgIHNlbGYuZmlsZV9jbG9zZWQgPSBUcnVlCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIHBhc3MKIAogY2xhc3MgRVBpcGVTb2NrZXQoRmFrZVNvY2tldCk6CiAKQEAgLTQ1LDcgKzYwLDcgQEAKIAogICAgIGRlZiBzZW5kYWxsKHNlbGYsIGRhdGEpOgogICAgICAgICBpZiBzZWxmLnBpcGVfdHJpZ2dlciBpbiBkYXRhOgotICAgICAgICAgICAgcmFpc2Ugc29ja2V0LmVycm9yKGVycm5vLkVQSVBFLCAiZ290Y2hhIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoZXJybm8uRVBJUEUsICJnb3RjaGEiKQogICAgICAgICBzZWxmLmRhdGEgKz0gZGF0YQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgpAQCAtMTExLDIxICsxMjYsNTkgQEAKICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb250ZW50X2xlbmd0aCA9IGt2WzFdLnN0cmlwKCkKICAgICAgICAgICAgICAgICBsaXN0LmFwcGVuZChzZWxmLCBpdGVtKQogCi0gICAgICAgICMgUE9TVCB3aXRoIGVtcHR5IGJvZHkKLSAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQotICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCi0gICAgICAgIGNvbm4uX2J1ZmZlciA9IENvbnRlbnRMZW5ndGhDaGVja2VyKCkKLSAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLl9idWZmZXIuY29udGVudF9sZW5ndGgsIGInMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnSGVhZGVyIENvbnRlbnQtTGVuZ3RoIG5vdCBzZXQnKQorICAgICAgICAjIEhlcmUsIHdlJ3JlIHRlc3RpbmcgdGhhdCBtZXRob2RzIGV4cGVjdGluZyBhIGJvZHkgZ2V0IGEKKyAgICAgICAgIyBjb250ZW50LWxlbmd0aCBzZXQgdG8gemVybyBpZiB0aGUgYm9keSBpcyBlbXB0eSAoZWl0aGVyIE5vbmUgb3IgJycpCisgICAgICAgIGJvZGllcyA9IChOb25lLCAnJykKKyAgICAgICAgbWV0aG9kc193aXRoX2JvZHkgPSAoJ1BVVCcsICdQT1NUJywgJ1BBVENIJykKKyAgICAgICAgZm9yIG1ldGhvZCwgYm9keSBpbiBpdGVydG9vbHMucHJvZHVjdChtZXRob2RzX3dpdGhfYm9keSwgYm9kaWVzKToKKyAgICAgICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgICAgIGNvbm4uc29jayA9IEZha2VTb2NrZXQoTm9uZSkKKyAgICAgICAgICAgIGNvbm4uX2J1ZmZlciA9IENvbnRlbnRMZW5ndGhDaGVja2VyKCkKKyAgICAgICAgICAgIGNvbm4ucmVxdWVzdChtZXRob2QsICcvJywgYm9keSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgY29ubi5fYnVmZmVyLmNvbnRlbnRfbGVuZ3RoLCBiJzAnLAorICAgICAgICAgICAgICAgICdIZWFkZXIgQ29udGVudC1MZW5ndGggaW5jb3JyZWN0IG9uIHt9Jy5mb3JtYXQobWV0aG9kKQorICAgICAgICAgICAgKQogCi0gICAgICAgICMgUFVUIHJlcXVlc3Qgd2l0aCBlbXB0eSBib2R5Ci0gICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKLSAgICAgICAgY29ubi5zb2NrID0gRmFrZVNvY2tldChOb25lKQotICAgICAgICBjb25uLl9idWZmZXIgPSBDb250ZW50TGVuZ3RoQ2hlY2tlcigpCi0gICAgICAgIGNvbm4ucmVxdWVzdCgnUFVUJywgJy8nLCAnJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb25uLl9idWZmZXIuY29udGVudF9sZW5ndGgsIGInMCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnSGVhZGVyIENvbnRlbnQtTGVuZ3RoIG5vdCBzZXQnKQorICAgICAgICAjIEZvciB0aGVzZSBtZXRob2RzLCB3ZSBtYWtlIHN1cmUgdGhhdCBjb250ZW50LWxlbmd0aCBpcyBub3Qgc2V0IHdoZW4KKyAgICAgICAgIyB0aGUgYm9keSBpcyBOb25lIGJlY2F1c2UgaXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvdXIgb24gdGhlCisgICAgICAgICMgc2VydmVyLgorICAgICAgICBtZXRob2RzX3dpdGhvdXRfYm9keSA9ICgKKyAgICAgICAgICAgICAnR0VUJywgJ0NPTk5FQ1QnLCAnREVMRVRFJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRScsCisgICAgICAgICkKKyAgICAgICAgZm9yIG1ldGhvZCBpbiBtZXRob2RzX3dpdGhvdXRfYm9keToKKyAgICAgICAgICAgIGNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oJ2V4YW1wbGUuY29tJykKKyAgICAgICAgICAgIGNvbm4uc29jayA9IEZha2VTb2NrZXQoTm9uZSkKKyAgICAgICAgICAgIGNvbm4uX2J1ZmZlciA9IENvbnRlbnRMZW5ndGhDaGVja2VyKCkKKyAgICAgICAgICAgIGNvbm4ucmVxdWVzdChtZXRob2QsICcvJywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgY29ubi5fYnVmZmVyLmNvbnRlbnRfbGVuZ3RoLCBOb25lLAorICAgICAgICAgICAgICAgICdIZWFkZXIgQ29udGVudC1MZW5ndGggc2V0IGZvciBlbXB0eSBib2R5IG9uIHt9Jy5mb3JtYXQobWV0aG9kKQorICAgICAgICAgICAgKQorCisgICAgICAgICMgSWYgdGhlIGJvZHkgaXMgc2V0IHRvICcnLCB0aGF0J3MgY29uc2lkZXJlZCB0byBiZSAicHJlc2VudCBidXQKKyAgICAgICAgIyBlbXB0eSIgcmF0aGVyIHRoYW4gIm1pc3NpbmciLCBzbyBjb250ZW50IGxlbmd0aCB3b3VsZCBiZSBzZXQsIGV2ZW4KKyAgICAgICAgIyBmb3IgbWV0aG9kcyB0aGF0IGRvbid0IGV4cGVjdCBhIGJvZHkuCisgICAgICAgIGZvciBtZXRob2QgaW4gbWV0aG9kc193aXRob3V0X2JvZHk6CisgICAgICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgICAgICBjb25uLl9idWZmZXIgPSBDb250ZW50TGVuZ3RoQ2hlY2tlcigpCisgICAgICAgICAgICBjb25uLnJlcXVlc3QobWV0aG9kLCAnLycsICcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBjb25uLl9idWZmZXIuY29udGVudF9sZW5ndGgsIGInMCcsCisgICAgICAgICAgICAgICAgJ0hlYWRlciBDb250ZW50LUxlbmd0aCBpbmNvcnJlY3Qgb24ge30nLmZvcm1hdChtZXRob2QpCisgICAgICAgICAgICApCisKKyAgICAgICAgIyBJZiB0aGUgYm9keSBpcyBzZXQsIG1ha2Ugc3VyZSBDb250ZW50LUxlbmd0aCBpcyBzZXQuCisgICAgICAgIGZvciBtZXRob2QgaW4gaXRlcnRvb2xzLmNoYWluKG1ldGhvZHNfd2l0aG91dF9ib2R5LCBtZXRob2RzX3dpdGhfYm9keSk6CisgICAgICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgICAgICBjb25uLl9idWZmZXIgPSBDb250ZW50TGVuZ3RoQ2hlY2tlcigpCisgICAgICAgICAgICBjb25uLnJlcXVlc3QobWV0aG9kLCAnLycsICcgJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgY29ubi5fYnVmZmVyLmNvbnRlbnRfbGVuZ3RoLCBiJzEnLAorICAgICAgICAgICAgICAgICdIZWFkZXIgQ29udGVudC1MZW5ndGggaW5jb3JyZWN0IG9uIHt9Jy5mb3JtYXQobWV0aG9kKQorICAgICAgICAgICAgKQogCiAgICAgZGVmIHRlc3RfcHV0aGVhZGVyKHNlbGYpOgogICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCkBAIC0xMzQsNiArMTg3LDMzIEBACiAgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdDb250ZW50LWxlbmd0aCcsIDQyKQogICAgICAgICBzZWxmLmFzc2VydEluKGInQ29udGVudC1sZW5ndGg6IDQyJywgY29ubi5fYnVmZmVyKQogCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdGb28nLCAnIGJhciAnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInRm9vOiAgYmFyICcsIGNvbm4uX2J1ZmZlcikKKyAgICAgICAgY29ubi5wdXRoZWFkZXIoJ0JhcicsICdcdGJhelx0JykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0JhcjogXHRiYXpcdCcsIGNvbm4uX2J1ZmZlcikKKyAgICAgICAgY29ubi5wdXRoZWFkZXIoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyIG15dG9rZW4nKQorICAgICAgICBzZWxmLmFzc2VydEluKGInQXV0aG9yaXphdGlvbjogQmVhcmVyIG15dG9rZW4nLCBjb25uLl9idWZmZXIpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdJdGVySGVhZGVyJywgJ0l0ZXJBJywgJ0l0ZXJCJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0l0ZXJIZWFkZXI6IEl0ZXJBXHJcblx0SXRlckInLCBjb25uLl9idWZmZXIpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdMYXRpbkhlYWRlcicsIGInXHhGRicpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidMYXRpbkhlYWRlcjogXHhGRicsIGNvbm4uX2J1ZmZlcikKKyAgICAgICAgY29ubi5wdXRoZWFkZXIoJ1V0ZjhIZWFkZXInLCBiJ1x4YzNceDgwJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1V0ZjhIZWFkZXI6IFx4YzNceDgwJywgY29ubi5fYnVmZmVyKQorICAgICAgICBjb25uLnB1dGhlYWRlcignQzEtQ29udHJvbCcsIGInbmV4dFx4ODVsaW5lJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0MxLUNvbnRyb2w6IG5leHRceDg1bGluZScsIGNvbm4uX2J1ZmZlcikKKyAgICAgICAgY29ubi5wdXRoZWFkZXIoJ0VtYmVkZGVkLUZvbGQtU3BhY2UnLCAnaXNcclxuIGFsbG93ZWQnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInRW1iZWRkZWQtRm9sZC1TcGFjZTogaXNcclxuIGFsbG93ZWQnLCBjb25uLl9idWZmZXIpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKCdFbWJlZGRlZC1Gb2xkLVRhYicsICdpc1xyXG5cdGFsbG93ZWQnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInRW1iZWRkZWQtRm9sZC1UYWI6IGlzXHJcblx0YWxsb3dlZCcsIGNvbm4uX2J1ZmZlcikKKyAgICAgICAgY29ubi5wdXRoZWFkZXIoJ0tleSBTcGFjZScsICd2YWx1ZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidLZXkgU3BhY2U6IHZhbHVlJywgY29ubi5fYnVmZmVyKQorICAgICAgICBjb25uLnB1dGhlYWRlcignS2V5U3BhY2UgJywgJ3ZhbHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0tleVNwYWNlIDogdmFsdWUnLCBjb25uLl9idWZmZXIpCisgICAgICAgIGNvbm4ucHV0aGVhZGVyKGInTm9uYnJlYWtceGEwU3BhY2UnLCAndmFsdWUnKQorICAgICAgICBzZWxmLmFzc2VydEluKGInTm9uYnJlYWtceGEwU3BhY2U6IHZhbHVlJywgY29ubi5fYnVmZmVyKQorICAgICAgICBjb25uLnB1dGhlYWRlcihiJ1x4YTBOb25icmVha1NwYWNlJywgJ3ZhbHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1x4YTBOb25icmVha1NwYWNlOiB2YWx1ZScsIGNvbm4uX2J1ZmZlcikKKwogICAgIGRlZiB0ZXN0X2lwdjZob3N0X2hlYWRlcihzZWxmKToKICAgICAgICAgIyBEZWZhdWx0IGhvc3QgaGVhZGVyIG9uIElQdjYgdHJhbnNhY3Rpb24gc2hvdWxkIHdyYXBwZWQgYnkgW10gaWYKICAgICAgICAgIyBpdHMgYWN0dWFsIElQdjYgYWRkcmVzcwpAQCAtMTUzLDYgKzIzMyw0NiBAQAogICAgICAgICBjb25uLnJlcXVlc3QoJ0dFVCcsICcvZm9vJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suZGF0YS5zdGFydHN3aXRoKGV4cGVjdGVkKSkKIAorICAgIGRlZiB0ZXN0X21hbGZvcm1lZF9oZWFkZXJzX2NvcGVkX3dpdGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgMTk5OTYKKyAgICAgICAgYm9keSA9ICJIVFRQLzEuMSAyMDAgT0tcclxuRmlyc3Q6IHZhbFxyXG46IG52YWxcclxuU2Vjb25kOiB2YWxcclxuXHJcbiIKKyAgICAgICAgc29jayA9IEZha2VTb2NrZXQoYm9keSkKKyAgICAgICAgcmVzcCA9IGNsaWVudC5IVFRQUmVzcG9uc2Uoc29jaykKKyAgICAgICAgcmVzcC5iZWdpbigpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXNwLmdldGhlYWRlcignRmlyc3QnKSwgJ3ZhbCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5nZXRoZWFkZXIoJ1NlY29uZCcpLCAndmFsJykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfaGVhZGVycyhzZWxmKToKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KCcnKQorICAgICAgICBjb25uLnB1dHJlcXVlc3QoJ0dFVCcsICcvJykKKworICAgICAgICAjIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNCwgd2hpdGVzcGFjZSBpcyBubworICAgICAgICAjIGxvbmdlciBhbGxvd2VkIGluIGhlYWRlciBuYW1lcworICAgICAgICBjYXNlcyA9ICgKKyAgICAgICAgICAgIChiJ0ludmFsaWRcclxuTmFtZScsIGInVmFsaWRWYWx1ZScpLAorICAgICAgICAgICAgKGInSW52YWxpZFxyTmFtZScsIGInVmFsaWRWYWx1ZScpLAorICAgICAgICAgICAgKGInSW52YWxpZFxuTmFtZScsIGInVmFsaWRWYWx1ZScpLAorICAgICAgICAgICAgKGInXHJcbkludmFsaWROYW1lJywgYidWYWxpZFZhbHVlJyksCisgICAgICAgICAgICAoYidcckludmFsaWROYW1lJywgYidWYWxpZFZhbHVlJyksCisgICAgICAgICAgICAoYidcbkludmFsaWROYW1lJywgYidWYWxpZFZhbHVlJyksCisgICAgICAgICAgICAoYicgSW52YWxpZE5hbWUnLCBiJ1ZhbGlkVmFsdWUnKSwKKyAgICAgICAgICAgIChiJ1x0SW52YWxpZE5hbWUnLCBiJ1ZhbGlkVmFsdWUnKSwKKyAgICAgICAgICAgIChiJ0ludmFsaWQ6TmFtZScsIGInVmFsaWRWYWx1ZScpLAorICAgICAgICAgICAgKGInOkludmFsaWROYW1lJywgYidWYWxpZFZhbHVlJyksCisgICAgICAgICAgICAoYidWYWxpZE5hbWUnLCBiJ0ludmFsaWRcclxuVmFsdWUnKSwKKyAgICAgICAgICAgIChiJ1ZhbGlkTmFtZScsIGInSW52YWxpZFxyVmFsdWUnKSwKKyAgICAgICAgICAgIChiJ1ZhbGlkTmFtZScsIGInSW52YWxpZFxuVmFsdWUnKSwKKyAgICAgICAgICAgIChiJ1ZhbGlkTmFtZScsIGInSW52YWxpZFZhbHVlXHJcbicpLAorICAgICAgICAgICAgKGInVmFsaWROYW1lJywgYidJbnZhbGlkVmFsdWVccicpLAorICAgICAgICAgICAgKGInVmFsaWROYW1lJywgYidJbnZhbGlkVmFsdWVcbicpLAorICAgICAgICApCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBjYXNlczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KChuYW1lLCB2YWx1ZSkpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnSW52YWxpZCBoZWFkZXInKToKKyAgICAgICAgICAgICAgICAgICAgY29ubi5wdXRoZWFkZXIobmFtZSwgdmFsdWUpCisKIAogY2xhc3MgQmFzaWNUZXN0KFRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9zdGF0dXNfbGluZXMoc2VsZik6CkBAIC02MDAsNyArNzIwLDcgQEAKICAgICAgICAgICAgIGIiQ29udGVudC1MZW5ndGgiKQogICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCJleGFtcGxlLmNvbSIpCiAgICAgICAgIGNvbm4uc29jayA9IHNvY2sKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IGNvbm4ucmVxdWVzdCgiUFVUIiwgIi91cmwiLCAiYm9keSIpKQogICAgICAgICByZXNwID0gY29ubi5nZXRyZXNwb25zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDAxLCByZXNwLnN0YXR1cykKQEAgLTY0Niw3ICs3NjYsNjAgQEAKICAgICAgICAgcmVzcC5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXNwLmNsb3NlZCkKIAorICAgIGRlZiB0ZXN0X2RlbGF5ZWRfYWNrX29wdChzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgTmFnbGUvZGVsYXllZF9hY2sgb3B0aW1pc3RhaW9uIHdvcmtzIGNvcnJlY3RseS4KKworICAgICAgICAjIEZvciBzbWFsbCBwYXlsb2FkcywgaXQgc2hvdWxkIGNvYWxlc2NlIHRoZSBib2R5IHdpdGgKKyAgICAgICAgIyBoZWFkZXJzLCByZXN1bHRpbmcgaW4gYSBzaW5nbGUgc2VuZGFsbCgpIGNhbGwKKyAgICAgICAgY29ubiA9IGNsaWVudC5IVFRQQ29ubmVjdGlvbignZXhhbXBsZS5jb20nKQorICAgICAgICBzb2NrID0gRmFrZVNvY2tldChOb25lKQorICAgICAgICBjb25uLnNvY2sgPSBzb2NrCisgICAgICAgIGJvZHkgPSBiJ3gnICogKGNvbm4ubXNzIC0gMSkKKyAgICAgICAgY29ubi5yZXF1ZXN0KCdQT1NUJywgJy8nLCBib2R5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2suc2VuZGFsbF9jYWxscywgMSkKKworICAgICAgICAjIEZvciBsYXJnZSBwYXlsb2FkcywgaXQgc2hvdWxkIHNlbmQgdGhlIGhlYWRlcnMgYW5kCisgICAgICAgICMgdGhlbiB0aGUgYm9keSwgcmVzdWx0aW5nIGluIG1vcmUgdGhhbiBvbmUgc2VuZGFsbCgpCisgICAgICAgICMgY2FsbAorICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIHNvY2sgPSBGYWtlU29ja2V0KE5vbmUpCisgICAgICAgIGNvbm4uc29jayA9IHNvY2sKKyAgICAgICAgYm9keSA9IGIneCcgKiBjb25uLm1zcworICAgICAgICBjb25uLnJlcXVlc3QoJ1BPU1QnLCAnLycsIGJvZHkpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihzb2NrLnNlbmRhbGxfY2FsbHMsIDEpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9sZWFrKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgc29ja2V0IGlzIG5vdCBsZWFrZWQgaWYgZ2V0cmVzcG9uc2UoKSBmYWlscworICAgICAgICBjb25uID0gY2xpZW50LkhUVFBDb25uZWN0aW9uKCdleGFtcGxlLmNvbScpCisgICAgICAgIHJlc3BvbnNlID0gTm9uZQorICAgICAgICBjbGFzcyBSZXNwb25zZShjbGllbnQuSFRUUFJlc3BvbnNlKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqcG9zLCAqKmt3KToKKyAgICAgICAgICAgICAgICBub25sb2NhbCByZXNwb25zZQorICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZiAgIyBBdm9pZCBnYXJiYWdlIGNvbGxlY3RvciBjbG9zaW5nIHRoZSBzb2NrZXQKKyAgICAgICAgICAgICAgICBjbGllbnQuSFRUUFJlc3BvbnNlLl9faW5pdF9fKHNlbGYsICpwb3MsICoqa3cpCisgICAgICAgIGNvbm4ucmVzcG9uc2VfY2xhc3MgPSBSZXNwb25zZQorICAgICAgICBjb25uLnNvY2sgPSBGYWtlU29ja2V0KCcnKSAgIyBFbXVsYXRlIHNlcnZlciBkcm9wcGluZyBjb25uZWN0aW9uCisgICAgICAgIGNvbm4ucmVxdWVzdCgnR0VUJywgJy8nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhjbGllbnQuQmFkU3RhdHVzTGluZSwgY29ubi5nZXRyZXNwb25zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3BvbnNlLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvbm4uc29jay5maWxlX2Nsb3NlZCkKKworCiBjbGFzcyBPZmZsaW5lVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfYWxsKHNlbGYpOgorICAgICAgICAjIERvY3VtZW50ZWQgb2JqZWN0cyBkZWZpbmVkIGluIHRoZSBtb2R1bGUgc2hvdWxkIGJlIGluIF9fYWxsX18KKyAgICAgICAgZXhwZWN0ZWQgPSB7InJlc3BvbnNlcyJ9ICAjIFdoaXRlLWxpc3QgZG9jdW1lbnRlZCBkaWN0KCkgb2JqZWN0CisgICAgICAgICMgSFRUUE1lc3NhZ2UsIHBhcnNlX2hlYWRlcnMoKSwgYW5kIHRoZSBIVFRQIHN0YXR1cyBjb2RlIGNvbnN0YW50cyBhcmUKKyAgICAgICAgIyBpbnRlbnRpb25hbGx5IG9taXR0ZWQgZm9yIHNpbXBsaWNpdHkKKyAgICAgICAgYmxhY2tsaXN0ID0geyJIVFRQTWVzc2FnZSIsICJwYXJzZV9oZWFkZXJzIn0KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKGNsaWVudCk6CisgICAgICAgICAgICBpZiBuYW1lIGluIGJsYWNrbGlzdDoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgbW9kdWxlX29iamVjdCA9IGdldGF0dHIoY2xpZW50LCBuYW1lKQorICAgICAgICAgICAgaWYgZ2V0YXR0cihtb2R1bGVfb2JqZWN0LCAiX19tb2R1bGVfXyIsIE5vbmUpID09ICJodHRwLmNsaWVudCI6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQuYWRkKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbChjbGllbnQuX19hbGxfXywgZXhwZWN0ZWQpCisKICAgICBkZWYgdGVzdF9yZXNwb25zZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2xpZW50LnJlc3BvbnNlc1tjbGllbnQuTk9UX0ZPVU5EXSwgIk5vdCBGb3VuZCIpCiAKQEAgLTczNiwyNiArOTA5LDQ3IEBACiAKICAgICBkZWYgbWFrZV9zZXJ2ZXIoc2VsZiwgY2VydGZpbGUpOgogICAgICAgICBmcm9tIHRlc3Quc3NsX3NlcnZlcnMgaW1wb3J0IG1ha2VfaHR0cHNfc2VydmVyCi0gICAgICAgIHJldHVybiBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZSkKKyAgICAgICAgcmV0dXJuIG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIGNlcnRmaWxlPWNlcnRmaWxlKQogCiAgICAgZGVmIHRlc3RfYXR0cmlidXRlcyhzZWxmKToKICAgICAgICAgIyBzaW1wbGUgdGVzdCB0byBjaGVjayBpdCdzIHN0b3JpbmcgdGhlIHRpbWVvdXQKICAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oSE9TVCwgVGltZW91dFRlc3QuUE9SVCwgdGltZW91dD0zMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnRpbWVvdXQsIDMwKQogCi0gICAgZGVmIF9jaGVja19zdm5fcHl0aG9uX29yZyhzZWxmLCByZXNwKToKLSAgICAgICAgIyBKdXN0IGEgc2ltcGxlIGNoZWNrIHRoYXQgZXZlcnl0aGluZyB3ZW50IGZpbmUKLSAgICAgICAgc2VydmVyX3N0cmluZyA9IHJlc3AuZ2V0aGVhZGVyKCdzZXJ2ZXInKQotICAgICAgICBzZWxmLmFzc2VydEluKCdBcGFjaGUnLCBzZXJ2ZXJfc3RyaW5nKQotCiAgICAgZGVmIHRlc3RfbmV0d29ya2VkKHNlbGYpOgotICAgICAgICAjIERlZmF1bHQgc2V0dGluZ3M6IG5vIGNlcnQgdmVyaWZpY2F0aW9uIGlzIGRvbmUKKyAgICAgICAgIyBEZWZhdWx0IHNldHRpbmdzOiByZXF1aXJlcyBhIHZhbGlkIGNlcnQgZnJvbSBhIHRydXN0ZWQgQ0EKKyAgICAgICAgaW1wb3J0IHNzbAogICAgICAgICBzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKLSAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgnc3ZuLnB5dGhvbi5vcmcnKToKLSAgICAgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdzdm4ucHl0aG9uLm9yZycsIDQ0MykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgnc2VsZi1zaWduZWQucHl0aG9udGVzdC5uZXQnKToKKyAgICAgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdzZWxmLXNpZ25lZC5weXRob250ZXN0Lm5ldCcsIDQ0MykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLlNTTEVycm9yKSBhcyBleGNfaW5mbzoKKyAgICAgICAgICAgICAgICBoLnJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2luZm8uZXhjZXB0aW9uLnJlYXNvbiwgJ0NFUlRJRklDQVRFX1ZFUklGWV9GQUlMRUQnKQorCisgICAgZGVmIHRlc3RfbmV0d29ya2VkX25vdmVyaWZpY2F0aW9uKHNlbGYpOgorICAgICAgICAjIFN3aXRjaCBvZmYgY2VydCB2ZXJpZmljYXRpb24KKyAgICAgICAgaW1wb3J0IHNzbAorICAgICAgICBzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgnc2VsZi1zaWduZWQucHl0aG9udGVzdC5uZXQnKToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuX2NyZWF0ZV91bnZlcmlmaWVkX2NvbnRleHQoKQorICAgICAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ3NlbGYtc2lnbmVkLnB5dGhvbnRlc3QubmV0JywgNDQzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dD1jb250ZXh0KQogICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCiAgICAgICAgICAgICByZXNwID0gaC5nZXRyZXNwb25zZSgpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zdm5fcHl0aG9uX29yZyhyZXNwKQorICAgICAgICAgICAgaC5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCduZ2lueCcsIHJlc3AuZ2V0aGVhZGVyKCdzZXJ2ZXInKSkKKworICAgIEBzdXBwb3J0LnN5c3RlbV9tdXN0X3ZhbGlkYXRlX2NlcnQKKyAgICBkZWYgdGVzdF9uZXR3b3JrZWRfdHJ1c3RlZF9ieV9kZWZhdWx0X2NlcnQoc2VsZik6CisgICAgICAgICMgRGVmYXVsdCBzZXR0aW5nczogcmVxdWlyZXMgYSB2YWxpZCBjZXJ0IGZyb20gYSB0cnVzdGVkIENBCisgICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQorICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCd3d3cucHl0aG9uLm9yZycpOgorICAgICAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ3d3dy5weXRob24ub3JnJywgNDQzKQorICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgICAgICByZXNwID0gaC5nZXRyZXNwb25zZSgpCisgICAgICAgICAgICBjb250ZW50X3R5cGUgPSByZXNwLmdldGhlYWRlcignY29udGVudC10eXBlJykKKyAgICAgICAgICAgIGguY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigndGV4dC9odG1sJywgY29udGVudF90eXBlKQogCiAgICAgZGVmIHRlc3RfbmV0d29ya2VkX2dvb2RfY2VydChzZWxmKToKICAgICAgICAgIyBXZSBmZWVkIHRoZSBzZXJ2ZXIncyBjZXJ0IGFzIGEgdmFsaWRhdGluZyBjZXJ0CkBAIC03NjksMTkgKzk2MywzMCBAQAogICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCiAgICAgICAgICAgICByZXNwID0gaC5nZXRyZXNwb25zZSgpCiAgICAgICAgICAgICBzZXJ2ZXJfc3RyaW5nID0gcmVzcC5nZXRoZWFkZXIoJ3NlcnZlcicpCisgICAgICAgICAgICBoLmNsb3NlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ25naW54Jywgc2VydmVyX3N0cmluZykKIAogICAgIGRlZiB0ZXN0X25ldHdvcmtlZF9iYWRfY2VydChzZWxmKToKICAgICAgICAgIyBXZSBmZWVkIGEgIkNBIiBjZXJ0IHRoYXQgaXMgdW5yZWxhdGVkIHRvIHRoZSBzZXJ2ZXIncyBjZXJ0CiAgICAgICAgIGltcG9ydCBzc2wKICAgICAgICAgc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCi0gICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ3N2bi5weXRob24ub3JnJyk6CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ3NlbGYtc2lnbmVkLnB5dGhvbnRlc3QubmV0Jyk6CiAgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECiAgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJUX2xvY2FsaG9zdCkKLSAgICAgICAgICAgIGggPSBjbGllbnQuSFRUUFNDb25uZWN0aW9uKCdzdm4ucHl0aG9uLm9yZycsIDQ0MywgY29udGV4dD1jb250ZXh0KQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpOgorICAgICAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ3NlbGYtc2lnbmVkLnB5dGhvbnRlc3QubmV0JywgNDQzLCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgZXhjX2luZm86CiAgICAgICAgICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV4Y19pbmZvLmV4Y2VwdGlvbi5yZWFzb24sICdDRVJUSUZJQ0FURV9WRVJJRllfRkFJTEVEJykKKworICAgIGRlZiB0ZXN0X2xvY2FsX3Vua25vd25fY2VydChzZWxmKToKKyAgICAgICAgIyBUaGUgY3VzdG9tIGNlcnQgaXNuJ3Qga25vd24gdG8gdGhlIGRlZmF1bHQgdHJ1c3QgYnVuZGxlCisgICAgICAgIGltcG9ydCBzc2wKKyAgICAgICAgc2VydmVyID0gc2VsZi5tYWtlX3NlcnZlcihDRVJUX2xvY2FsaG9zdCkKKyAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgZXhjX2luZm86CisgICAgICAgICAgICBoLnJlcXVlc3QoJ0dFVCcsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNfaW5mby5leGNlcHRpb24ucmVhc29uLCAnQ0VSVElGSUNBVEVfVkVSSUZZX0ZBSUxFRCcpCiAKICAgICBkZWYgdGVzdF9sb2NhbF9nb29kX2hvc3RuYW1lKHNlbGYpOgogICAgICAgICAjIFRoZSAodmFsaWQpIGNlcnQgdmFsaWRhdGVzIHRoZSBIVFRQIGhvc3RuYW1lCkBAIC03OTQsNyArOTk5LDYgQEAKICAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnL25vbmV4aXN0ZW50JykKICAgICAgICAgcmVzcCA9IGguZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3Auc3RhdHVzLCA0MDQpCi0gICAgICAgIGRlbCBzZXJ2ZXIKIAogICAgIGRlZiB0ZXN0X2xvY2FsX2JhZF9ob3N0bmFtZShzZWxmKToKICAgICAgICAgIyBUaGUgKHZhbGlkKSBjZXJ0IGRvZXNuJ3QgdmFsaWRhdGUgdGhlIEhUVFAgaG9zdG5hbWUKQEAgLTgwMiw2ICsxMDA2LDcgQEAKICAgICAgICAgc2VydmVyID0gc2VsZi5tYWtlX3NlcnZlcihDRVJUX2Zha2Vob3N0bmFtZSkKICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBUcnVlCiAgICAgICAgIGNvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKENFUlRfZmFrZWhvc3RuYW1lKQogICAgICAgICBoID0gY2xpZW50LkhUVFBTQ29ubmVjdGlvbignbG9jYWxob3N0Jywgc2VydmVyLnBvcnQsIGNvbnRleHQ9Y29udGV4dCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuQ2VydGlmaWNhdGVFcnJvcik6CkBAIC04MTIsMTIgKzEwMTcsMjQgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuQ2VydGlmaWNhdGVFcnJvcik6CiAgICAgICAgICAgICBoLnJlcXVlc3QoJ0dFVCcsICcvJykKICAgICAgICAgIyBXaXRoIGNoZWNrX2hvc3RuYW1lPUZhbHNlLCB0aGUgbWlzbWF0Y2hpbmcgaXMgaWdub3JlZAorICAgICAgICBjb250ZXh0LmNoZWNrX2hvc3RuYW1lID0gRmFsc2UKICAgICAgICAgaCA9IGNsaWVudC5IVFRQU0Nvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIHNlcnZlci5wb3J0LCBjb250ZXh0PWNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPUZhbHNlKQogICAgICAgICBoLnJlcXVlc3QoJ0dFVCcsICcvbm9uZXhpc3RlbnQnKQogICAgICAgICByZXNwID0gaC5nZXRyZXNwb25zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcC5zdGF0dXMsIDQwNCkKLSAgICAgICAgZGVsIHNlcnZlcgorICAgICAgICAjIFRoZSBjb250ZXh0J3MgY2hlY2tfaG9zdG5hbWUgc2V0dGluZyBpcyB1c2VkIGlmIG9uZSBpc24ndCBwYXNzZWQgdG8KKyAgICAgICAgIyBIVFRQU0Nvbm5lY3Rpb24uCisgICAgICAgIGNvbnRleHQuY2hlY2tfaG9zdG5hbWUgPSBGYWxzZQorICAgICAgICBoID0gY2xpZW50LkhUVFBTQ29ubmVjdGlvbignbG9jYWxob3N0Jywgc2VydmVyLnBvcnQsIGNvbnRleHQ9Y29udGV4dCkKKyAgICAgICAgaC5yZXF1ZXN0KCdHRVQnLCAnL25vbmV4aXN0ZW50JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmdldHJlc3BvbnNlKCkuc3RhdHVzLCA0MDQpCisgICAgICAgICMgUGFzc2luZyBjaGVja19ob3N0bmFtZSB0byBIVFRQU0Nvbm5lY3Rpb24gc2hvdWxkIG92ZXJyaWRlIHRoZQorICAgICAgICAjIGNvbnRleHQncyBzZXR0aW5nLgorICAgICAgICBoID0gY2xpZW50LkhUVFBTQ29ubmVjdGlvbignbG9jYWxob3N0Jywgc2VydmVyLnBvcnQsIGNvbnRleHQ9Y29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfaG9zdG5hbWU9VHJ1ZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuQ2VydGlmaWNhdGVFcnJvcik6CisgICAgICAgICAgICBoLnJlcXVlc3QoJ0dFVCcsICcvJykKIAogICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoY2xpZW50LCAnSFRUUFNDb25uZWN0aW9uJyksCiAgICAgICAgICAgICAgICAgICAgICAnaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uIG5vdCBhdmFpbGFibGUnKQpAQCAtOTQ3LDEwICsxMTY0LDcxIEBACiAgICAgICAgIGhlYWRlciA9IHNlbGYucmVzcC5nZXRoZWFkZXIoJ05vLVN1Y2gtSGVhZGVyJyxkZWZhdWx0PTQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhlYWRlciwgNDIpCiAKK2NsYXNzIFR1bm5lbFRlc3RzKFRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHJlc3BvbnNlX3RleHQgPSAoCisgICAgICAgICAgICAnSFRUUC8xLjAgMjAwIE9LXHJcblxyXG4nICMgUmVwbHkgdG8gQ09OTkVDVAorICAgICAgICAgICAgJ0hUVFAvMS4xIDIwMCBPS1xyXG4nICMgUmVwbHkgdG8gSEVBRAorICAgICAgICAgICAgJ0NvbnRlbnQtTGVuZ3RoOiA0MlxyXG5cclxuJworICAgICAgICApCisKKyAgICAgICAgZGVmIGNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MsIHRpbWVvdXQ9Tm9uZSwgc291cmNlX2FkZHJlc3M9Tm9uZSk6CisgICAgICAgICAgICByZXR1cm4gRmFrZVNvY2tldChyZXNwb25zZV90ZXh0LCBob3N0PWFkZHJlc3NbMF0sIHBvcnQ9YWRkcmVzc1sxXSkKKworICAgICAgICBzZWxmLmhvc3QgPSAncHJveHkuY29tJworICAgICAgICBzZWxmLmNvbm4gPSBjbGllbnQuSFRUUENvbm5lY3Rpb24oc2VsZi5ob3N0KQorICAgICAgICBzZWxmLmNvbm4uX2NyZWF0ZV9jb25uZWN0aW9uID0gY3JlYXRlX2Nvbm5lY3Rpb24KKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5jb25uLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0X3NldF90dW5uZWxfaG9zdF9wb3J0X2hlYWRlcnMoc2VsZik6CisgICAgICAgIHR1bm5lbF9ob3N0ID0gJ2Rlc3RpbmF0aW9uLmNvbScKKyAgICAgICAgdHVubmVsX3BvcnQgPSA4ODg4CisgICAgICAgIHR1bm5lbF9oZWFkZXJzID0geydVc2VyLUFnZW50JzogJ01vemlsbGEvNS4wIChjb21wYXRpYmxlLCBNU0lFIDExKSd9CisgICAgICAgIHNlbGYuY29ubi5zZXRfdHVubmVsKHR1bm5lbF9ob3N0LCBwb3J0PXR1bm5lbF9wb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXR1bm5lbF9oZWFkZXJzKQorICAgICAgICBzZWxmLmNvbm4ucmVxdWVzdCgnSEVBRCcsICcvJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb25uLnNvY2suaG9zdCwgc2VsZi5ob3N0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29ubi5zb2NrLnBvcnQsIGNsaWVudC5IVFRQX1BPUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb25uLl90dW5uZWxfaG9zdCwgdHVubmVsX2hvc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb25uLl90dW5uZWxfcG9ydCwgdHVubmVsX3BvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jb25uLl90dW5uZWxfaGVhZGVycywgdHVubmVsX2hlYWRlcnMpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd19zZXRfdHVubmVsX2FmdGVyX2Nvbm5lY3Qoc2VsZik6CisgICAgICAgICMgT25jZSBjb25uZWN0ZWQsIHdlIHNob3VsZG4ndCBiZSBhYmxlIHRvIHR1bm5lbCBhbnltb3JlCisgICAgICAgIHNlbGYuY29ubi5jb25uZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBzZWxmLmNvbm4uc2V0X3R1bm5lbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc3RpbmF0aW9uLmNvbScpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0X3dpdGhfdHVubmVsKHNlbGYpOgorICAgICAgICBzZWxmLmNvbm4uc2V0X3R1bm5lbCgnZGVzdGluYXRpb24uY29tJykKKyAgICAgICAgc2VsZi5jb25uLnJlcXVlc3QoJ0hFQUQnLCAnLycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29ubi5zb2NrLmhvc3QsIHNlbGYuaG9zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbm4uc29jay5wb3J0LCBjbGllbnQuSFRUUF9QT1JUKQorICAgICAgICBzZWxmLmFzc2VydEluKGInQ09OTkVDVCBkZXN0aW5hdGlvbi5jb20nLCBzZWxmLmNvbm4uc29jay5kYXRhKQorICAgICAgICAjIGlzc3VlMjIwOTUKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiJ0hvc3Q6IGRlc3RpbmF0aW9uLmNvbTpOb25lJywgc2VsZi5jb25uLnNvY2suZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0hvc3Q6IGRlc3RpbmF0aW9uLmNvbScsIHNlbGYuY29ubi5zb2NrLmRhdGEpCisKKyAgICAgICAgIyBUaGlzIHRlc3Qgc2hvdWxkIGJlIHJlbW92ZWQgd2hlbiBDT05ORUNUIGdldHMgdGhlIEhUVFAvMS4xIGJsZXNzaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidIb3N0OiBwcm94eS5jb20nLCBzZWxmLmNvbm4uc29jay5kYXRhKQorCisgICAgZGVmIHRlc3RfY29ubmVjdF9wdXRfcmVxdWVzdChzZWxmKToKKyAgICAgICAgc2VsZi5jb25uLnNldF90dW5uZWwoJ2Rlc3RpbmF0aW9uLmNvbScpCisgICAgICAgIHNlbGYuY29ubi5yZXF1ZXN0KCdQVVQnLCAnLycsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY29ubi5zb2NrLmhvc3QsIHNlbGYuaG9zdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNvbm4uc29jay5wb3J0LCBjbGllbnQuSFRUUF9QT1JUKQorICAgICAgICBzZWxmLmFzc2VydEluKGInQ09OTkVDVCBkZXN0aW5hdGlvbi5jb20nLCBzZWxmLmNvbm4uc29jay5kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEluKGInSG9zdDogZGVzdGluYXRpb24uY29tJywgc2VsZi5jb25uLnNvY2suZGF0YSkKKworCisKK0BzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbih2ZXJib3NlPU5vbmUpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEhlYWRlclRlc3RzLCBPZmZsaW5lVGVzdCwgQmFzaWNUZXN0LCBUaW1lb3V0VGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQU1Rlc3QsIFJlcXVlc3RCb2R5VGVzdCwgU291cmNlQWRkcmVzc1Rlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgSFRUUFJlc3BvbnNlVGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQUmVzcG9uc2VUZXN0LCBUdW5uZWxUZXN0cykKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weSBiL0xpYi90ZXN0L3Rlc3RfaHR0cHNlcnZlcnMucHkKaW5kZXggYmU1ZDhkZS4uNmU1ZjJkYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9odHRwc2VydmVycy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2h0dHBzZXJ2ZXJzLnB5CkBAIC0xNCw2ICsxNCw3IEBACiBpbXBvcnQgYmFzZTY0CiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdXJsbGliLnBhcnNlCitpbXBvcnQgaHRtbAogaW1wb3J0IGh0dHAuY2xpZW50CiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gaW8gaW1wb3J0IEJ5dGVzSU8KQEAgLTkyLDYgKzkzLDEzIEBACiAgICAgICAgIGRlZiBkb19LRVlFUlJPUihzZWxmKToKICAgICAgICAgICAgIHNlbGYuc2VuZF9lcnJvcig5OTkpCiAKKyAgICAgICAgZGVmIGRvX05PVEZPVU5EKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDQwNCkKKworICAgICAgICBkZWYgZG9fRVhQTEFJTkVSUk9SKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zZW5kX2Vycm9yKDk5OSwgIlNob3J0IE1lc3NhZ2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGEgbG9uZyBcbiBleHBsYWluYXRpb24iKQorCiAgICAgICAgIGRlZiBkb19DVVNUT00oc2VsZik6CiAgICAgICAgICAgICBzZWxmLnNlbmRfcmVzcG9uc2UoOTk5KQogICAgICAgICAgICAgc2VsZi5zZW5kX2hlYWRlcignQ29udGVudC1UeXBlJywgJ3RleHQvaHRtbCcpCkBAIC0xMTgsNyArMTI2LDcgQEAKIAogICAgIGRlZiB0ZXN0X3JlcXVlc3RfbGluZV90cmltbWluZyhzZWxmKToKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICdIVFRQLzEuMVxuJwotICAgICAgICBzZWxmLmNvbi5wdXRyZXF1ZXN0KCdHRVQnLCAnLycpCisgICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ1hZWkJPR1VTJywgJy8nKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKQEAgLTE0NSw4ICsxNTMsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDUwMSkKIAogICAgIGRlZiB0ZXN0X3ZlcnNpb25fbm9uZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYSB2YWxpZCBtZXRob2QgaXMgcmVqZWN0ZWQgd2hlbiBub3QgSFRUUC8xLngKICAgICAgICAgc2VsZi5jb24uX2h0dHBfdnNuX3N0ciA9ICcnCi0gICAgICAgIHNlbGYuY29uLnB1dHJlcXVlc3QoJ1BVVCcsICcvJykKKyAgICAgICAgc2VsZi5jb24ucHV0cmVxdWVzdCgnQ1VTVE9NJywgJy8nKQogICAgICAgICBzZWxmLmNvbi5lbmRoZWFkZXJzKCkKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwMCkKQEAgLTIwMyw2ICsyMTIsMTIgQEAKICAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDk5OSkKIAorICAgIGRlZiB0ZXN0X3JldHVybl9leHBsYWluX2Vycm9yKHNlbGYpOgorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdFWFBMQUlORVJST1InLCAnLycpCisgICAgICAgIHJlcyA9IHNlbGYuY29uLmdldHJlc3BvbnNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuc3RhdHVzLCA5OTkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnQocmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSkpCisKICAgICBkZWYgdGVzdF9sYXRpbjFfaGVhZGVyKHNlbGYpOgogICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdMQVRJTk9ORUhFQURFUicsICcvJywgaGVhZGVycz17CiAgICAgICAgICAgICAnWC1TcGVjaWFsLUluY29taW5nJzogICAgICAgJ8OEcmdlciBtaXQgVW5pY29kZScKQEAgLTIxMSw2ICsyMjYsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMuZ2V0aGVhZGVyKCdYLVNwZWNpYWwnKSwgJ0TDpG5nZXJvdXMgTWluZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLnJlYWQoKSwgJ8OEcmdlciBtaXQgVW5pY29kZScuZW5jb2RlKCd1dGYtOCcpKQogCisgICAgZGVmIHRlc3RfZXJyb3JfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzE2MDg4OiBzdGFuZGFyZCBlcnJvciByZXNwb25zZXMgc2hvdWxkIGhhdmUgYSBjb250ZW50LWxlbmd0aAorICAgICAgICBzZWxmLmNvbi5yZXF1ZXN0KCdOT1RGT1VORCcsICcvJykKKyAgICAgICAgcmVzID0gc2VsZi5jb24uZ2V0cmVzcG9uc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5zdGF0dXMsIDQwNCkKKyAgICAgICAgZGF0YSA9IHJlcy5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQocmVzLmdldGhlYWRlcignQ29udGVudC1MZW5ndGgnKSksIGxlbihkYXRhKSkKKwogCiBjbGFzcyBTaW1wbGVIVFRQU2VydmVyVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKICAgICBjbGFzcyByZXF1ZXN0X2hhbmRsZXIoTm9Mb2dSZXF1ZXN0SGFuZGxlciwgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyKToKQEAgLTI0NCw2ICsyNjcsMzMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmVzcG9uc2UucmVhc29uKQogICAgICAgICBpZiBkYXRhOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBib2R5KQorICAgICAgICByZXR1cm4gYm9keQorCisgICAgQHN1cHBvcnQucmVxdWlyZXNfbWFjX3ZlcigxMCwgNSkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LlRFU1RGTl9VTkRFQ09EQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnbmVlZCBzdXBwb3J0LlRFU1RGTl9VTkRFQ09EQUJMRScpCisgICAgZGVmIHRlc3RfdW5kZWNvZGFibGVfZmlsZW5hbWUoc2VsZik6CisgICAgICAgIGVuYyA9IHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKQorICAgICAgICBmaWxlbmFtZSA9IG9zLmZzZGVjb2RlKHN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFKSArICcudHh0JworICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNlbGYudGVtcGRpciwgZmlsZW5hbWUpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShzdXBwb3J0LlRFU1RGTl9VTkRFQ09EQUJMRSkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3Qoc2VsZi50ZW1wZGlyX25hbWUgKyAnLycpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICMgT24gTWFjIE9TIHRoZSBIRlMrIGZpbGVzeXN0ZW0gcmVwbGFjZXMgYnl0ZXMgdGhhdCBhcmVuJ3QgdmFsaWQKKyAgICAgICAgICAgICMgVVRGLTggaW50byBhIHBlcmNlbnQtZW5jb2RlZCB2YWx1ZS4KKyAgICAgICAgICAgIGZvciBuYW1lIGluIG9zLmxpc3RkaXIoc2VsZi50ZW1wZGlyKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lICE9ICd0ZXN0JzogIyBJZ25vcmUgYSBmaWxlbmFtZSBjcmVhdGVkIGluIHNldFVwKCkuCisgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gbmFtZQorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBib2R5ID0gc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMjAwKQorICAgICAgICBxdW90ZWRuYW1lID0gdXJsbGliLnBhcnNlLnF1b3RlKGZpbGVuYW1lLCBlcnJvcnM9J3N1cnJvZ2F0ZXBhc3MnKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnaHJlZj0iJXMiJyAlIHF1b3RlZG5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgLmVuY29kZShlbmMsICdzdXJyb2dhdGVlc2NhcGUnKSwgYm9keSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJz4lczwnICUgaHRtbC5lc2NhcGUoZmlsZW5hbWUpKQorICAgICAgICAgICAgICAgICAgICAgIC5lbmNvZGUoZW5jLCAnc3Vycm9nYXRlZXNjYXBlJyksIGJvZHkpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJy8nICsgcXVvdGVkbmFtZSkKKyAgICAgICAgc2VsZi5jaGVja19zdGF0dXNfYW5kX3JlYXNvbihyZXNwb25zZSwgMjAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9c3VwcG9ydC5URVNURk5fVU5ERUNPREFCTEUpCiAKICAgICBkZWYgdGVzdF9nZXQoc2VsZik6CiAgICAgICAgICNjb25zdHJ1Y3RzIHRoZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgSFRUUFNlcnZlcgpAQCAtMjU2LDYgKzMwNiwxMiBAQAogICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAyMDApCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lKQogICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAzMDEpCisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KHNlbGYudGVtcGRpcl9uYW1lICsgJy8/aGk9MicpCisgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDIwMCkKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3Qoc2VsZi50ZW1wZGlyX25hbWUgKyAnP2hpPTEnKQorICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCAzMDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcG9uc2UuZ2V0aGVhZGVyKCJMb2NhdGlvbiIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudGVtcGRpcl9uYW1lICsgIi8/aGk9MSIpCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvVGhpc0RvZXNOb3RFeGlzdCcpCiAgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDQwNCkKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy8nICsgJ1RoaXNEb2VzTm90RXhpc3QnICsgJy8nKQpAQCAtMjg0LDcgKzM0MCw3IEBACiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCcvJywgbWV0aG9kPSdGT08nKQogICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA1MDEpCiAgICAgICAgICMgcmVxdWVzdHMgbXVzdCBiZSBjYXNlIHNlbnNpdGl2ZSxzbyB0aGlzIHNob3VsZCBmYWlsIHRvbwotICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgnLycsIG1ldGhvZD0nZ2V0JykKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy8nLCBtZXRob2Q9J2N1c3RvbScpCiAgICAgICAgIHNlbGYuY2hlY2tfc3RhdHVzX2FuZF9yZWFzb24ocmVzcG9uc2UsIDUwMSkKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJy8nLCBtZXRob2Q9J0dFVHMnKQogICAgICAgICBzZWxmLmNoZWNrX3N0YXR1c19hbmRfcmVhc29uKHJlc3BvbnNlLCA1MDEpCkBAIC0zMTAsNiArMzY2LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0uZ2V0Zmlyc3QoImJhY29uIikpKQogIiIiCiAKK2NnaV9maWxlNCA9ICIiIlwKKyMhJXMKK2ltcG9ydCBvcworCitwcmludCgiQ29udGVudC10eXBlOiB0ZXh0L2h0bWwiKQorcHJpbnQoKQorCitwcmludChvcy5lbnZpcm9uWyIlcyJdKQorIiIiCisKIAogQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKG9zLCAnZ2V0ZXVpZCcpIGFuZCBvcy5nZXRldWlkKCkgPT0gMCwKICAgICAgICAgIlRoaXMgdGVzdCBjYW4ndCBiZSBydW4gcmVsaWFibHkgYXMgcm9vdCAoaXNzdWUgIzEzMzA4KS4iKQpAQCAtMzMxLDYgKzM5Nyw3IEBACiAgICAgICAgIHNlbGYuZmlsZTFfcGF0aCA9IE5vbmUKICAgICAgICAgc2VsZi5maWxlMl9wYXRoID0gTm9uZQogICAgICAgICBzZWxmLmZpbGUzX3BhdGggPSBOb25lCisgICAgICAgIHNlbGYuZmlsZTRfcGF0aCA9IE5vbmUKIAogICAgICAgICAjIFRoZSBzaGViYW5nIGxpbmUgc2hvdWxkIGJlIHB1cmUgQVNDSUk6IHVzZSBzeW1saW5rIGlmIHBvc3NpYmxlLgogICAgICAgICAjIFNlZSBpc3N1ZSAjNzY2OC4KQEAgLTM2OSw2ICs0MzYsMTEgQEAKICAgICAgICAgICAgIGZpbGUzLndyaXRlKGNnaV9maWxlMSAlIHNlbGYucHl0aG9uZXhlKQogICAgICAgICBvcy5jaG1vZChzZWxmLmZpbGUzX3BhdGgsIDBvNzc3KQogCisgICAgICAgIHNlbGYuZmlsZTRfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmNnaV9kaXIsICdmaWxlNC5weScpCisgICAgICAgIHdpdGggb3BlbihzZWxmLmZpbGU0X3BhdGgsICd3JywgZW5jb2Rpbmc9J3V0Zi04JykgYXMgZmlsZTQ6CisgICAgICAgICAgICBmaWxlNC53cml0ZShjZ2lfZmlsZTQgJSAoc2VsZi5weXRob25leGUsICdRVUVSWV9TVFJJTkcnKSkKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5maWxlNF9wYXRoLCAwbzc3NykKKwogICAgICAgICBvcy5jaGRpcihzZWxmLnBhcmVudF9kaXIpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CkBAIC0zODQsNiArNDU2LDggQEAKICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi5maWxlMl9wYXRoKQogICAgICAgICAgICAgaWYgc2VsZi5maWxlM19wYXRoOgogICAgICAgICAgICAgICAgIG9zLnJlbW92ZShzZWxmLmZpbGUzX3BhdGgpCisgICAgICAgICAgICBpZiBzZWxmLmZpbGU0X3BhdGg6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYuZmlsZTRfcGF0aCkKICAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYuY2dpX2NoaWxkX2RpcikKICAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYuY2dpX2RpcikKICAgICAgICAgICAgIG9zLnJtZGlyKHNlbGYucGFyZW50X2RpcikKQEAgLTQ4NSw2ICs1NTksMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYidIZWxsbyBXb3JsZCcgKyBzZWxmLmxpbmVzZXAsICd0ZXh0L2h0bWwnLCAyMDApLAogICAgICAgICAgICAgICAgIChyZXMucmVhZCgpLCByZXMuZ2V0aGVhZGVyKCdDb250ZW50LXR5cGUnKSwgcmVzLnN0YXR1cykpCiAKKyAgICBkZWYgdGVzdF9xdWVyeV93aXRoX211bHRpcGxlX3F1ZXN0aW9uX21hcmsoc2VsZik6CisgICAgICAgIHJlcyA9IHNlbGYucmVxdWVzdCgnL2NnaS1iaW4vZmlsZTQucHk/YT1iP2M9ZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAoYidhPWI/Yz1kJyArIHNlbGYubGluZXNlcCwgJ3RleHQvaHRtbCcsIDIwMCksCisgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorCisgICAgZGVmIHRlc3RfcXVlcnlfd2l0aF9jb250aW51b3VzX3NsYXNoZXMoc2VsZik6CisgICAgICAgIHJlcyA9IHNlbGYucmVxdWVzdCgnL2NnaS1iaW4vZmlsZTQucHk/az1hYSUyRiUyRmJiJi8vcS8vcC8vPS8vYS8vYi8vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIChiJ2s9YWElMkYlMkZiYiYvL3EvL3AvLz0vL2EvL2IvLycgKyBzZWxmLmxpbmVzZXAsCisgICAgICAgICAgICAgJ3RleHQvaHRtbCcsIDIwMCksCisgICAgICAgICAgICAocmVzLnJlYWQoKSwgcmVzLmdldGhlYWRlcignQ29udGVudC10eXBlJyksIHJlcy5zdGF0dXMpKQorCiAKIGNsYXNzIFNvY2tldGxlc3NSZXF1ZXN0SGFuZGxlcihTaW1wbGVIVFRQUmVxdWVzdEhhbmRsZXIpOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTU2MCw2ICs2NDcsMTEgQEAKICAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMTotMV0pCiAgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sIGInPGh0bWw+PGJvZHk+RGF0YTwvYm9keT48L2h0bWw+XHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLnJlcXVlc3RsaW5lLCAnR0VUIC8gSFRUUC8xLjEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5jb21tYW5kLCAnR0VUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucGF0aCwgJy8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5yZXF1ZXN0X3ZlcnNpb24sICdIVFRQLzEuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChzZWxmLmhhbmRsZXIuaGVhZGVycy5pdGVtcygpLCAoKSkKIAogICAgIGRlZiB0ZXN0X2h0dHBfMV8wKHNlbGYpOgogICAgICAgICByZXN1bHQgPSBzZWxmLnNlbmRfdHlwaWNhbF9yZXF1ZXN0KGInR0VUIC8gSFRUUC8xLjBcclxuXHJcbicpCkBAIC01NjcsNiArNjU5LDExIEBACiAgICAgICAgIHNlbGYudmVyaWZ5X2V4cGVjdGVkX2hlYWRlcnMocmVzdWx0WzE6LTFdKQogICAgICAgICBzZWxmLnZlcmlmeV9nZXRfY2FsbGVkKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbLTFdLCBiJzxodG1sPjxib2R5PkRhdGE8L2JvZHk+PC9odG1sPlxyXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5yZXF1ZXN0bGluZSwgJ0dFVCAvIEhUVFAvMS4wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIuY29tbWFuZCwgJ0dFVCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLnBhdGgsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucmVxdWVzdF92ZXJzaW9uLCAnSFRUUC8xLjAnKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoc2VsZi5oYW5kbGVyLmhlYWRlcnMuaXRlbXMoKSwgKCkpCiAKICAgICBkZWYgdGVzdF9odHRwXzBfOShzZWxmKToKICAgICAgICAgcmVzdWx0ID0gc2VsZi5zZW5kX3R5cGljYWxfcmVxdWVzdChiJ0dFVCAvIEhUVFAvMC45XHJcblxyXG4nKQpAQCAtNTgwLDYgKzY3NywxMiBAQAogICAgICAgICBzZWxmLnZlcmlmeV9leHBlY3RlZF9oZWFkZXJzKHJlc3VsdFsxOi0xXSkKICAgICAgICAgc2VsZi52ZXJpZnlfZ2V0X2NhbGxlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0Wy0xXSwgYic8aHRtbD48Ym9keT5EYXRhPC9ib2R5PjwvaHRtbD5cclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucmVxdWVzdGxpbmUsICdHRVQgLyBIVFRQLzEuMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLmNvbW1hbmQsICdHRVQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5wYXRoLCAnLycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLnJlcXVlc3RfdmVyc2lvbiwgJ0hUVFAvMS4wJykKKyAgICAgICAgaGVhZGVycyA9ICgoIkV4cGVjdCIsICIxMDAtY29udGludWUiKSwpCisgICAgICAgIHNlbGYuYXNzZXJ0U2VxdWVuY2VFcXVhbChzZWxmLmhhbmRsZXIuaGVhZGVycy5pdGVtcygpLCBoZWFkZXJzKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9jb250aW51ZV8xXzEoc2VsZik6CiAgICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoYidHRVQgLyBIVFRQLzEuMVxyXG5FeHBlY3Q6IDEwMC1jb250aW51ZVxyXG5cclxuJykKQEAgLTU4OSw2ICs2OTIsMTIgQEAKICAgICAgICAgc2VsZi52ZXJpZnlfZXhwZWN0ZWRfaGVhZGVycyhyZXN1bHRbMjotMV0pCiAgICAgICAgIHNlbGYudmVyaWZ5X2dldF9jYWxsZWQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMV0sIGInPGh0bWw+PGJvZHk+RGF0YTwvYm9keT48L2h0bWw+XHJcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5oYW5kbGVyLnJlcXVlc3RsaW5lLCAnR0VUIC8gSFRUUC8xLjEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5jb21tYW5kLCAnR0VUJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucGF0aCwgJy8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaGFuZGxlci5yZXF1ZXN0X3ZlcnNpb24sICdIVFRQLzEuMScpCisgICAgICAgIGhlYWRlcnMgPSAoKCJFeHBlY3QiLCAiMTAwLWNvbnRpbnVlIiksKQorICAgICAgICBzZWxmLmFzc2VydFNlcXVlbmNlRXF1YWwoc2VsZi5oYW5kbGVyLmhlYWRlcnMuaXRlbXMoKSwgaGVhZGVycykKIAogICAgIGRlZiB0ZXN0X2hlYWRlcl9idWZmZXJpbmdfb2Zfc2VuZF9lcnJvcihzZWxmKToKIApAQCAtNjc0LDYgKzc4Myw3IEBACiAgICAgICAgIHJlc3VsdCA9IHNlbGYuc2VuZF90eXBpY2FsX3JlcXVlc3QoYidHRVQgJyArIGIneCcgKiA2NTUzNykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMF0sIGInSFRUUC8xLjEgNDE0IFJlcXVlc3QtVVJJIFRvbyBMb25nXHJcbicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5oYW5kbGVyLmdldF9jYWxsZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmhhbmRsZXIucmVxdWVzdGxpbmUsIHN0cikKIAogICAgIGRlZiB0ZXN0X2hlYWRlcl9sZW5ndGgoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzY3OTE6IHNhbWUgZm9yIGhlYWRlcnMKQEAgLTY4MSw2ICs3OTEsMjIgQEAKICAgICAgICAgICAgIGInR0VUIC8gSFRUUC8xLjFcclxuWC1Gb286IGJhcicgKyBiJ3InICogNjU1MzcgKyBiJ1xyXG5cclxuJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRbMF0sIGInSFRUUC8xLjEgNDAwIExpbmUgdG9vIGxvbmdcclxuJykKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmhhbmRsZXIuZ2V0X2NhbGxlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmhhbmRsZXIucmVxdWVzdGxpbmUsICdHRVQgLyBIVFRQLzEuMScpCisKKyAgICBkZWYgdGVzdF9jbG9zZV9jb25uZWN0aW9uKHNlbGYpOgorICAgICAgICAjIGhhbmRsZV9vbmVfcmVxdWVzdCgpIHNob3VsZCBiZSByZXBlYXRlZGx5IGNhbGxlZCB1bnRpbAorICAgICAgICAjIGl0IHNldHMgY2xvc2VfY29ubmVjdGlvbgorICAgICAgICBkZWYgaGFuZGxlX29uZV9yZXF1ZXN0KCk6CisgICAgICAgICAgICBzZWxmLmhhbmRsZXIuY2xvc2VfY29ubmVjdGlvbiA9IG5leHQoY2xvc2VfdmFsdWVzKQorICAgICAgICBzZWxmLmhhbmRsZXIuaGFuZGxlX29uZV9yZXF1ZXN0ID0gaGFuZGxlX29uZV9yZXF1ZXN0CisKKyAgICAgICAgY2xvc2VfdmFsdWVzID0gaXRlcigoVHJ1ZSwpKQorICAgICAgICBzZWxmLmhhbmRsZXIuaGFuZGxlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgY2xvc2VfdmFsdWVzKQorCisgICAgICAgIGNsb3NlX3ZhbHVlcyA9IGl0ZXIoKEZhbHNlLCBGYWxzZSwgVHJ1ZSkpCisgICAgICAgIHNlbGYuaGFuZGxlci5oYW5kbGUoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBjbG9zZV92YWx1ZXMpCiAKIGNsYXNzIFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlclRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiIgVGVzdCB1cmwgcGFyc2luZyAiIiIKQEAgLTcwNCw2ICs4MzAsMTkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCBzZWxmLnRyYW5zbGF0ZWQpCiAKIAorY2xhc3MgTWlzY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgdGVzdF9hbGwoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gW10KKyAgICAgICAgYmxhY2tsaXN0ID0geydleGVjdXRhYmxlJywgJ25vYm9keV91aWQnLCAndGVzdCd9CisgICAgICAgIGZvciBuYW1lIGluIGRpcihzZXJ2ZXIpOgorICAgICAgICAgICAgaWYgbmFtZS5zdGFydHN3aXRoKCdfJykgb3IgbmFtZSBpbiBibGFja2xpc3Q6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIG1vZHVsZV9vYmplY3QgPSBnZXRhdHRyKHNlcnZlciwgbmFtZSkKKyAgICAgICAgICAgIGlmIGdldGF0dHIobW9kdWxlX29iamVjdCwgJ19fbW9kdWxlX18nLCBOb25lKSA9PSAnaHR0cC5zZXJ2ZXInOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkLmFwcGVuZChuYW1lKQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoc2VydmVyLl9fYWxsX18sIGV4cGVjdGVkKQorCisKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICBjd2QgPSBvcy5nZXRjd2QoKQogICAgIHRyeToKQEAgLTcxMyw2ICs4NTIsNyBAQAogICAgICAgICAgICAgU2ltcGxlSFRUUFNlcnZlclRlc3RDYXNlLAogICAgICAgICAgICAgQ0dJSFRUUFNlcnZlclRlc3RDYXNlLAogICAgICAgICAgICAgU2ltcGxlSFRUUFJlcXVlc3RIYW5kbGVyVGVzdENhc2UsCisgICAgICAgICAgICBNaXNjVGVzdENhc2UsCiAgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICBvcy5jaGRpcihjd2QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2lkbGUucHkgYi9MaWIvdGVzdC90ZXN0X2lkbGUucHkKaW5kZXggNzc3MGVlNS4uMTMyNjU3YiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pZGxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaWRsZS5weQpAQCAtMSwyMyArMSwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfbW9kdWxlLCB1c2VfcmVzb3VyY2VzCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgaW1wb3J0X21vZHVsZSwgaW1wb3J0X2ZyZXNoX21vZHVsZQogCiAjIFNraXAgdGVzdCBpZiBfdGhyZWFkIG9yIF90a2ludGVyIHdhc24ndCBidWlsdCBvciBpZGxlbGliIHdhcyBkZWxldGVkLgogaW1wb3J0X21vZHVsZSgndGhyZWFkaW5nJykgICMgaW1wb3J0ZWQgYnkgUHlTaGVsbCwgaW1wb3J0cyBfdGhyZWFkCiB0ayA9IGltcG9ydF9tb2R1bGUoJ3RraW50ZXInKSAgIyBpbXBvcnRzIF90a2ludGVyCiBpZGxldGVzdCA9IGltcG9ydF9tb2R1bGUoJ2lkbGVsaWIuaWRsZV90ZXN0JykKLQotIyBJZiBidWlsZGJvdCBpbXByb3Blcmx5IHNldHMgZ3VpIHJlc291cmNlICgjMTgzNjUsICMxODQ0MSksIHJlbW92ZSBpdAotIyBzbyByZXF1aXJlcygnZ3VpJykgdGVzdHMgYXJlIHNraXBwZWQgd2hpbGUgbm9uLWd1aSB0ZXN0cyBzdGlsbCBydW4uCi0jIElmIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIE1hY3MsIHNlZSAjMTg0NDEsIG1zZyAxOTM4MDUKLWlmIHVzZV9yZXNvdXJjZXMgYW5kICdndWknIGluIHVzZV9yZXNvdXJjZXM6Ci0gICAgdHJ5OgotICAgICAgICByb290ID0gdGsuVGsoKQotICAgICAgICByb290LmRlc3Ryb3koKQotICAgICAgICBkZWwgcm9vdAotICAgIGV4Y2VwdCB0ay5UY2xFcnJvcjoKLSAgICAgICAgd2hpbGUgJ2d1aScgaW4gdXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgIHVzZV9yZXNvdXJjZXMucmVtb3ZlKCdndWknKQorIyBNYWtlIHN1cmUgVENMX0xJQlJBUlkgaXMgc2V0IHByb3Blcmx5IG9uIFdpbmRvd3MuICBOb3RlIHRoYXQgdGhpcyB3aWxsCisjIGNhdXNlIGEgd2FybmluZyBhYm91dCB0ZXN0X2lkbGUgbW9kaWZ5aW5nIHRoZSBlbnZpcm9ubWVudAoraW1wb3J0X2ZyZXNoX21vZHVsZSgndGtpbnRlci5fZml4JykKIAogIyBXaXRob3V0IHRlc3RfbWFpbiBwcmVzZW50LCByZWdydGVzdC5ydW50ZXN0X2lubmVyIChsaW5lMTIxOSkgY2FsbHMKICMgdW5pdHRlc3QuVGVzdExvYWRlcigpLmxvYWRUZXN0c0Zyb21Nb2R1bGUodGhpc19tb2R1bGUpIHdoaWNoIGNhbGxzCkBAIC0yNSw4ICsxNSw0IEBACiBsb2FkX3Rlc3RzID0gaWRsZXRlc3QubG9hZF90ZXN0cwogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgICMgVW50aWwgdW5pdHRlc3Qgc3VwcG9ydHMgcmVzb3VyY2VzLCB3ZSBlbXVsYXRlIHJlZ3J0ZXN0J3MgLXVndWkKLSAgICAjIHNvIGxvYWRlZCB0ZXN0cyBydW4gdGhlIHNhbWUgYXMgaWYgdGV4dHVhbGx5IHByZXNlbnQgaGVyZS4KLSAgICAjIElmIGFueSBJZGxlIHRlc3QgZXZlciBuZWVkcyBhbm90aGVyIHJlc291cmNlLCBhZGQgaXQgdG8gdGhlIGxpc3QuCi0gICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWydndWknXSAgIyB1c2VfcmVzb3VyY2VzIGlzIGluaXRpYWxseSBOb25lCiAgICAgdW5pdHRlc3QubWFpbih2ZXJib3NpdHk9MiwgZXhpdD1GYWxzZSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfaW1hcGxpYi5weQppbmRleCA3YzlhZmQ5Li44Mzg0MTFlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltYXBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbWFwbGliLnB5CkBAIC0yMCw2ICsyMCw3IEBACiAgICAgc3NsID0gTm9uZQogCiBDRVJURklMRSA9IE5vbmUKK0NBRklMRSA9IE5vbmUKIAogCiBjbGFzcyBUZXN0SW1hcGxpYih1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC01NCw3ICs1NSw5IEBACiAgICAgICAgICAgICAgICAgJyIxOC1NYXktMjAzMyAwNTozMzoyMCArMDIwMCInXQogCiAgICAgQHJ1bl93aXRoX2xvY2FsZSgnTENfQUxMJywgJ2RlX0RFJywgJ2ZyX0ZSJykKLSAgICBAcnVuX3dpdGhfdHooJ1NURC0xRFNUJykKKyAgICAjIERTVCBydWxlcyBpbmNsdWRlZCB0byB3b3JrIGFyb3VuZCBxdWlyayB3aGVyZSB0aGUgR251IEMgbGlicmFyeSBtYXkgbm90CisgICAgIyBvdGhlcndpc2UgcmVzdG9yZSB0aGUgcHJldmlvdXMgdGltZSB6b25lCisgICAgQHJ1bl93aXRoX3R6KCdTVEQtMURTVCxNMy4yLjAsTTExLjEuMCcpCiAgICAgZGVmIHRlc3RfVGltZTJJbnRlcm5hbGRhdGUoc2VsZik6CiAgICAgICAgIGV4cGVjdGVkID0gJyIxOC1NYXktMjAzMyAwNTozMzoyMCArMDIwMCInCiAKQEAgLTEyNSw3ICsxMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyBOYWtlZCBzb2NrZXRzIHJldHVybiBlbXB0eSBzdHJpbmdzLi4KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgICAgICBsaW5lICs9IHBhcnQKLSAgICAgICAgICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgIyAuLmJ1dCBTU0xTb2NrZXRzIHJhaXNlIGV4Y2VwdGlvbnMuCiAgICAgICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoYidcclxuJyk6CkBAIC0zMjQsNiArMzI3LDI1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgIk9LIikKIAogCisKKyAgICBAcmVhcF90aHJlYWRzCisgICAgZGVmIHRlc3RfYWJvcnRlZF9hdXRoZW50aWNhdGlvbihzZWxmKToKKworICAgICAgICBjbGFzcyBNeVNlcnZlcihTaW1wbGVJTUFQSGFuZGxlcik6CisKKyAgICAgICAgICAgIGRlZiBjbWRfQVVUSEVOVElDQVRFKHNlbGYsIHRhZywgYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5fc2VuZF90ZXh0bGluZSgnKycpCisgICAgICAgICAgICAgICAgc2VsZi5yZXNwb25zZSA9IHlpZWxkCisKKyAgICAgICAgICAgICAgICBpZiBzZWxmLnJlc3BvbnNlID09IGInKlxyXG4nOgorICAgICAgICAgICAgICAgICAgICBzZWxmLl9zZW5kX3RhZ2dlZCh0YWcsICdOTycsICdbQVVUSEVOVElDQVRJT05GQUlMRURdIGFib3J0ZWQnKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3NlbmRfdGFnZ2VkKHRhZywgJ09LJywgJ01ZQVVUSCBzdWNjZXNzZnVsJykKKworICAgICAgICB3aXRoIHNlbGYucmVhcGVkX3BhaXIoTXlTZXJ2ZXIpIGFzIChzZXJ2ZXIsIGNsaWVudCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGltYXBsaWIuSU1BUDQuZXJyb3IpOgorICAgICAgICAgICAgICAgIGNvZGUsIGRhdGEgPSBjbGllbnQuYXV0aGVudGljYXRlKCdNWUFVVEgnLCBsYW1iZGEgeDogTm9uZSkKKwogICAgIGRlZiB0ZXN0X2xpbmV0b29sb25nKHNlbGYpOgogICAgICAgICBjbGFzcyBUb29Mb25nSGFuZGxlcihTaW1wbGVJTUFQSGFuZGxlcik6CiAgICAgICAgICAgICBkZWYgaGFuZGxlKHNlbGYpOgpAQCAtMzQ3LDYgKzM2OSwyNSBAQAogICAgIHNlcnZlcl9jbGFzcyA9IFNlY3VyZVRDUFNlcnZlcgogICAgIGltYXBfY2xhc3MgPSBJTUFQNF9TU0wKIAorICAgIEByZWFwX3RocmVhZHMKKyAgICBkZWYgdGVzdF9zc2xfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHNzbF9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgc3NsX2NvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBzc2xfY29udGV4dC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgc3NsX2NvbnRleHQubG9hZF92ZXJpZnlfbG9jYXRpb25zKENBRklMRSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLkNlcnRpZmljYXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgJzEyNy4wLjAuMScgZG9lc24ndCBtYXRjaCAnbG9jYWxob3N0JyIpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnJlYXBlZF9zZXJ2ZXIoU2ltcGxlSU1BUEhhbmRsZXIpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgICAgICBjbGllbnQgPSBzZWxmLmltYXBfY2xhc3MoKnNlcnZlci5zZXJ2ZXJfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NvbnRleHQ9c3NsX2NvbnRleHQpCisgICAgICAgICAgICAgICAgY2xpZW50LnNodXRkb3duKCkKKworICAgICAgICB3aXRoIHNlbGYucmVhcGVkX3NlcnZlcihTaW1wbGVJTUFQSGFuZGxlcikgYXMgc2VydmVyOgorICAgICAgICAgICAgY2xpZW50ID0gc2VsZi5pbWFwX2NsYXNzKCJsb2NhbGhvc3QiLCBzZXJ2ZXIuc2VydmVyX2FkZHJlc3NbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsX2NvbnRleHQ9c3NsX2NvbnRleHQpCisgICAgICAgICAgICBjbGllbnQuc2h1dGRvd24oKQorCiAKIGNsYXNzIFJlbW90ZUlNQVBUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBob3N0ID0gJ2N5cnVzLmFuZHJldy5jbXUuZWR1JwpAQCAtNDU5LDExICs1MDAsMTUgQEAKIAogICAgIGlmIHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpOgogICAgICAgICBpZiBzc2w6Ci0gICAgICAgICAgICBnbG9iYWwgQ0VSVEZJTEUKKyAgICAgICAgICAgIGdsb2JhbCBDRVJURklMRSwgQ0FGSUxFCiAgICAgICAgICAgICBDRVJURklMRSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXljZXJ0LnBlbSIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAia2V5Y2VydDMucGVtIikKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhDRVJURklMRSk6CiAgICAgICAgICAgICAgICAgcmFpc2Ugc3VwcG9ydC5UZXN0RmFpbGVkKCJDYW4ndCByZWFkIGNlcnRpZmljYXRlIGZpbGVzISIpCisgICAgICAgICAgICBDQUZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHljYWNlcnQucGVtIikKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhDQUZJTEUpOgorICAgICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBDQSBmaWxlISIpCiAgICAgICAgIHRlc3RzLmV4dGVuZChbCiAgICAgICAgICAgICBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzLCBUaHJlYWRlZE5ldHdvcmtlZFRlc3RzU1NMLAogICAgICAgICAgICAgUmVtb3RlSU1BUFRlc3QsIFJlbW90ZUlNQVBfU1NMVGVzdCwgUmVtb3RlSU1BUF9TVEFSVFRMU1Rlc3QsCkBAIC00NzMsNSArNTE4LDQgQEAKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnbmV0d29yayddCiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CmluZGV4IDcxYzIyMGYuLjgwYjllYzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wLnB5CkBAIC0xLDE0ICsxLDI5IEBACi1pbXBvcnQgaW1wCit0cnk6CisgICAgaW1wb3J0IF90aHJlYWQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfdGhyZWFkID0gTm9uZQogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHNodXRpbAogaW1wb3J0IHN5cwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRlc3QudGVzdF9pbXBvcnRsaWIgaW1wb3J0IHV0aWwKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHdhcm5pbmdzCit3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nKQorICAgIGltcG9ydCBpbXAKIAorCitkZWYgcmVxdWlyZXNfbG9hZF9keW5hbWljKG1ldGgpOgorICAgICIiIkRlY29yYXRvciB0byBza2lwIGEgdGVzdCBpZiBub3QgcnVubmluZyB1bmRlciBDUHl0aG9uIG9yIGxhY2tpbmcKKyAgICBpbXAubG9hZF9keW5hbWljKCkuIiIiCisgICAgbWV0aCA9IHN1cHBvcnQuY3B5dGhvbl9vbmx5KG1ldGgpCisgICAgcmV0dXJuIHVuaXR0ZXN0LnNraXBJZihub3QgaGFzYXR0cihpbXAsICdsb2FkX2R5bmFtaWMnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXAubG9hZF9keW5hbWljKCkgcmVxdWlyZWQnKShtZXRoKQorCisKK0B1bml0dGVzdC5za2lwSWYoX3RocmVhZCBpcyBOb25lLCAnX3RocmVhZCBtb2R1bGUgaXMgcmVxdWlyZWQnKQogY2xhc3MgTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIlZlcnkgYmFzaWMgdGVzdCBvZiBpbXBvcnQgbG9jayBmdW5jdGlvbnMuIiIiCkBAIC0xNTAsNyArMTY1LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShmaWxlKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlbmFtZVs6LTNdLmVuZHN3aXRoKHRlbXBfbW9kX25hbWUpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1swXSwgJy5weScpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzFdLCAnVScpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzFdLCAncicpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWzJdLCBpbXAuUFlfU09VUkNFKQogCiAgICAgICAgICAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKHRlbXBfbW9kX25hbWUsIGZpbGUsIGZpbGVuYW1lLCBpbmZvKQpAQCAtMTgzLDYgKzE5OCw3IEBACiAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGVtcF9tb2RfbmFtZSArIGV4dCkKICAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhpbml0X2ZpbGVfbmFtZSArIGV4dCkKICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKHRlc3RfcGFja2FnZV9uYW1lKQorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUoJ19fcHljYWNoZV9fJykKIAogICAgIGRlZiB0ZXN0X2lzc3VlOTMxOShzZWxmKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKQEAgLTIwOCw5ICsyMjQsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhvcmlnX3BhdGgsIG5ld19vcy5wYXRoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChvcmlnX2dldGVudiwgbmV3X29zLmdldGVudikKIAotICAgIEBzdXBwb3J0LmNweXRob25fb25seQotICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIoaW1wLCAnbG9hZF9keW5hbWljJyksCi0gICAgICAgICAgICAgICAgICAgICAnaW1wLmxvYWRfZHluYW1pYygpIHJlcXVpcmVkJykKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfaXNzdWUxNTgyOF9sb2FkX2V4dGVuc2lvbnMoc2VsZik6CiAgICAgICAgICMgSXNzdWUgMTU4MjggcGlja2VkIHVwIHRoYXQgdGhlIGFkYXB0ZXIgYmV0d2VlbiB0aGUgb2xkIGltcCBBUEkKICAgICAgICAgIyBhbmQgaW1wb3J0bGliIGNvdWxkbid0IGhhbmRsZSBDIGV4dGVuc2lvbnMKQEAgLTIyMiw2ICsyMzYsMjIgQEAKICAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKGV4YW1wbGUsICp4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5fX25hbWVfXywgZXhhbXBsZSkKIAorICAgIEByZXF1aXJlc19sb2FkX2R5bmFtaWMKKyAgICBkZWYgdGVzdF9pc3N1ZTE2NDIxX211bHRpcGxlX21vZHVsZXNfaW5fb25lX2RsbChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNjQyMTogbG9hZGluZyBzZXZlcmFsIG1vZHVsZXMgZnJvbSB0aGUgc2FtZSBjb21waWxlZCBmaWxlIGZhaWxzCisgICAgICAgIG0gPSAnX3Rlc3RpbXBvcnRtdWx0aXBsZScKKyAgICAgICAgZmlsZW9iaiwgcGF0aG5hbWUsIGRlc2NyaXB0aW9uID0gaW1wLmZpbmRfbW9kdWxlKG0pCisgICAgICAgIGZpbGVvYmouY2xvc2UoKQorICAgICAgICBtb2QwID0gaW1wLmxvYWRfZHluYW1pYyhtLCBwYXRobmFtZSkKKyAgICAgICAgbW9kMSA9IGltcC5sb2FkX2R5bmFtaWMoJ190ZXN0aW1wb3J0bXVsdGlwbGVfZm9vJywgcGF0aG5hbWUpCisgICAgICAgIG1vZDIgPSBpbXAubG9hZF9keW5hbWljKCdfdGVzdGltcG9ydG11bHRpcGxlX2JhcicsIHBhdGhuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZDAuX19uYW1lX18sIG0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kMS5fX25hbWVfXywgJ190ZXN0aW1wb3J0bXVsdGlwbGVfZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2QyLl9fbmFtZV9fLCAnX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXInKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIGltcC5sb2FkX2R5bmFtaWMoJ25vbmV4aXN0ZW50JywgcGF0aG5hbWUpCisKKyAgICBAcmVxdWlyZXNfbG9hZF9keW5hbWljCiAgICAgZGVmIHRlc3RfbG9hZF9keW5hbWljX0ltcG9ydEVycm9yX3BhdGgoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE1NTk1NDkgYWRkZWQgYG5hbWVgIGFuZCBgcGF0aGAgYXR0cmlidXRlcyB0byBJbXBvcnRFcnJvcgogICAgICAgICAjIGluIG9yZGVyIHRvIHByb3ZpZGUgYmV0dGVyIGRldGFpbC4gSXNzdWUgIzEwODU0IGltcGxlbWVudGVkIHRob3NlCkBAIC0yMzMsMTQgKzI2MywxMiBAQAogICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgsIGVyci5leGNlcHRpb24ucGF0aCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBlcnIuZXhjZXB0aW9uLm5hbWUpCiAKLSAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKGltcCwgJ2xvYWRfZHluYW1pYycpLAotICAgICAgICAgICAgICAgICAgICAgJ2ltcC5sb2FkX2R5bmFtaWMoKSByZXF1aXJlZCcpCisgICAgQHJlcXVpcmVzX2xvYWRfZHluYW1pYwogICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlX2V4dGVuc2lvbl9maWxlX2lzX05vbmUoc2VsZik6CiAgICAgICAgICMgV2hlbiBsb2FkaW5nIGFuIGV4dGVuc2lvbiBtb2R1bGUgYW5kIHRoZSBmaWxlIGlzIE5vbmUsIG9wZW4gb25lCiAgICAgICAgICMgb24gdGhlIGJlaGFsZiBvZiBpbXAubG9hZF9keW5hbWljKCkuCiAgICAgICAgICMgSXNzdWUgIzE1OTAyCi0gICAgICAgIG5hbWUgPSAnX2hlYXBxJworICAgICAgICBuYW1lID0gJ190ZXN0aW1wb3J0bXVsdGlwbGUnCiAgICAgICAgIGZvdW5kID0gaW1wLmZpbmRfbW9kdWxlKG5hbWUpCiAgICAgICAgIGlmIGZvdW5kWzBdIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgZm91bmRbMF0uY2xvc2UoKQpAQCAtMjQ4LDYgKzI3NiwxNSBAQAogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiZm91bmQgbW9kdWxlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgQyBleHRlbnNpb24iKQogICAgICAgICBpbXAubG9hZF9tb2R1bGUobmFtZSwgTm9uZSwgKmZvdW5kWzE6XSkKIAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUsCisgICAgICAgICJ0ZXN0IG1lYW5pbmdmdWwgb25seSB3aGVuIHdyaXRpbmcgYnl0ZWNvZGUiKQorICAgIGRlZiB0ZXN0X2J1Zzc3MzIoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCgpOgorICAgICAgICAgICAgc291cmNlID0gc3VwcG9ydC5URVNURk4gKyAnLnB5JworICAgICAgICAgICAgb3MubWtkaXIoc291cmNlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgJ15ObyBtb2R1bGUnLAorICAgICAgICAgICAgICAgIGltcC5maW5kX21vZHVsZSwgc3VwcG9ydC5URVNURk4sIFsiLiJdKQorCiAgICAgZGVmIHRlc3RfbXVsdGlwbGVfY2FsbHNfdG9fZ2V0X2RhdGEoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE4NzU1OiBtYWtlIHN1cmUgbXVsdGlwbGUgY2FsbHMgdG8gZ2V0X2RhdGEoKSBjYW4gc3VjY2VlZC4KICAgICAgICAgbG9hZGVyID0gaW1wLl9Mb2FkU291cmNlQ29tcGF0aWJpbGl0eSgnaW1wJywgaW1wLl9fZmlsZV9fLApAQCAtMjkzLDIyICszMzAsNiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoSW1wb3J0RXJyb3IsICdodG1sJyk6CiAgICAgICAgICAgICBpbXAucmVsb2FkKHBhcnNlcikKIAotICAgIGRlZiB0ZXN0X21vZHVsZV9yZXBsYWNlZChzZWxmKToKLSAgICAgICAgIyBzZWUgIzE4Njk4Ci0gICAgICAgIGRlZiBjb2RlKCk6Ci0gICAgICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ3RvcF9sZXZlbCcpCi0gICAgICAgICAgICBtb2R1bGUuc3BhbSA9IDMKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXSA9IG1vZHVsZQotICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3RvcF9sZXZlbCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3RvcF9sZXZlbCc6IGNvZGV9KQotICAgICAgICB3aXRoIG1vY2s6Ci0gICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd0b3BfbGV2ZWwnKQotICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gaW1wLnJlbG9hZChtb2R1bGUpCi0gICAgICAgICAgICAgICAgYWN0dWFsID0gc3lzLm1vZHVsZXNbJ3RvcF9sZXZlbCddCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwuc3BhbSwgMykKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbG9hZGVkLnNwYW0sIDMpCi0KIAogY2xhc3MgUEVQMzE0N1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0cyBvZiBQRVAgMzE0Ny4iIiIKQEAgLTQ2MSwyMCArNDgyLDUgQEAKICAgICAgICAgICAgIG9zLnJtZGlyKG5hbWUpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gWwotICAgICAgICBJbXBvcnRUZXN0cywKLSAgICAgICAgUEVQMzE0N1Rlc3RzLAotICAgICAgICBSZWxvYWRUZXN0cywKLSAgICAgICAgTnVsbEltcG9ydGVyVGVzdHMsCi0gICAgICAgIF0KLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBfdGhyZWFkCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzCi0gICAgZWxzZToKLSAgICAgICAgdGVzdHMuYXBwZW5kKExvY2tUZXN0cykKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKaW5kZXggZGYwOGU2YS4uYjQ4NDJjNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnQucHkKQEAgLTEsOSArMSw4IEBACiAjIFdlIGltcG9ydCBpbXBvcnRsaWIgKkFTQVAqIGluIG9yZGVyIHRvIHRlc3QgIzE1Mzg2CiBpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGZyb20gaW1wb3J0bGliLl9ib290c3RyYXAgaW1wb3J0IF9nZXRfc291cmNlZmlsZQogaW1wb3J0IGJ1aWx0aW5zCi1pbXBvcnQgaW1wCi1mcm9tIHRlc3QudGVzdF9pbXBvcnRsaWIuaW1wb3J0XyBpbXBvcnQgdXRpbCBhcyBpbXBvcnRsaWJfdXRpbAogaW1wb3J0IG1hcnNoYWwKIGltcG9ydCBvcwogaW1wb3J0IHBsYXRmb3JtCkBAIC0yMiw3ICsyMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKAogICAgIEVudmlyb25tZW50VmFyR3VhcmQsIFRFU1RGTiwgY2hlY2tfd2FybmluZ3MsIGZvcmdldCwgaXNfanl0aG9uLAogICAgIG1ha2VfbGVnYWN5X3B5Yywgcm10cmVlLCBydW5fdW5pdHRlc3QsIHN3YXBfYXR0ciwgc3dhcF9pdGVtLCB0ZW1wX3VtYXNrLAotICAgIHVubGluaywgdW5sb2FkLCBjcmVhdGVfZW1wdHlfZmlsZSwgY3B5dGhvbl9vbmx5KQorICAgIHVubGluaywgdW5sb2FkLCBjcmVhdGVfZW1wdHlfZmlsZSwgY3B5dGhvbl9vbmx5LCBURVNURk5fVU5FTkNPREFCTEUpCiBmcm9tIHRlc3QgaW1wb3J0IHNjcmlwdF9oZWxwZXIKIAogCkBAIC03MCw4ICs2OSw2IEBACiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICB1bmxvYWQoVEVTVEZOKQogCi0gICAgc2V0VXAgPSB0ZWFyRG93bgotCiAgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdml0eShzZWxmKToKICAgICAgICAgIyBCcmllZiBkaWdyZXNzaW9uIHRvIHRlc3QgdGhhdCBpbXBvcnQgaXMgY2FzZS1zZW5zaXRpdmU6ICBpZiB3ZSBnb3QKICAgICAgICAgIyB0aGlzIGZhciwgd2Uga25vdyBmb3Igc3VyZSB0aGF0ICJyYW5kb20iIGV4aXN0cy4KQEAgLTEyOSwxNiArMTI2LDYgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQogCi0gICAgQHNraXBfaWZfZG9udF93cml0ZV9ieXRlY29kZQotICAgIGRlZiB0ZXN0X2J1Zzc3MzIoc2VsZik6Ci0gICAgICAgIHNvdXJjZSA9IFRFU1RGTiArICcucHknCi0gICAgICAgIG9zLm1rZGlyKHNvdXJjZSkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgJ15ObyBtb2R1bGUnLAotICAgICAgICAgICAgICAgIGltcC5maW5kX21vZHVsZSwgVEVTVEZOLCBbIi4iXSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLnJtZGlyKHNvdXJjZSkKLQogICAgIGRlZiB0ZXN0X21vZHVsZV93aXRoX2xhcmdlX3N0YWNrKHNlbGYsIG1vZHVsZT0nbG9uZ2xpc3QnKToKICAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWU1NjE4NTguCiAgICAgICAgIGZpbGVuYW1lID0gbW9kdWxlICsgJy5weScKQEAgLTE2MSwxNiArMTQ4LDI0IEBACiAgICAgICAgIHN5cy5wYXRoLmFwcGVuZCgnJykKICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKIAorICAgICAgICBuYW1lc3BhY2UgPSB7fQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBtYWtlX2xlZ2FjeV9weWMoZmlsZW5hbWUpCiAgICAgICAgICAgICAjIFRoaXMgdXNlZCB0byBjcmFzaC4KLSAgICAgICAgICAgIGV4ZWMoJ2ltcG9ydCAnICsgbW9kdWxlKQorICAgICAgICAgICAgZXhlYygnaW1wb3J0ICcgKyBtb2R1bGUsIE5vbmUsIG5hbWVzcGFjZSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICMgQ2xlYW51cC4KICAgICAgICAgICAgIGRlbCBzeXMucGF0aFstMV0KICAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICdjJykKICAgICAgICAgICAgIHVubGluayhmaWxlbmFtZSArICdvJykKIAorICAgICAgICAgICAgIyBSZW1vdmUgcmVmZXJlbmNlcyB0byB0aGUgbW9kdWxlICh1bmxvYWQgdGhlIG1vZHVsZSkKKyAgICAgICAgICAgIG5hbWVzcGFjZS5jbGVhcigpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW21vZHVsZV0KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdF9mYWlsaW5nX2ltcG9ydF9zdGlja3Moc2VsZik6CiAgICAgICAgIHNvdXJjZSA9IFRFU1RGTiArICIucHkiCiAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICJ3IikgYXMgZjoKQEAgLTE5NSwxMiArMTkwLDEyIEBACiAgICAgICAgICMgaW1wb3J0IHgueS56IGJpbmRzIHggaW4gdGhlIGN1cnJlbnQgbmFtZXNwYWNlCiAgICAgICAgIGltcG9ydCB0ZXN0IGFzIHgKICAgICAgICAgaW1wb3J0IHRlc3Quc3VwcG9ydAotICAgICAgICBzZWxmLmFzc2VydFRydWUoeCBpcyB0ZXN0LCB4Ll9fbmFtZV9fKQorICAgICAgICBzZWxmLmFzc2VydElzKHgsIHRlc3QsIHguX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHRlc3Quc3VwcG9ydCwgIl9fZmlsZV9fIikpCiAKICAgICAgICAgIyBpbXBvcnQgeC55LnogYXMgdyBiaW5kcyB6IGFzIHcKICAgICAgICAgaW1wb3J0IHRlc3Quc3VwcG9ydCBhcyB5Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh5IGlzIHRlc3Quc3VwcG9ydCwgeS5fX25hbWVfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh5LCB0ZXN0LnN1cHBvcnQsIHkuX19uYW1lX18pCiAKICAgICBkZWYgdGVzdF9mYWlsaW5nX3JlbG9hZChzZWxmKToKICAgICAgICAgIyBBIGZhaWxpbmcgcmVsb2FkIHNob3VsZCBsZWF2ZSB0aGUgbW9kdWxlIG9iamVjdCBpbiBzeXMubW9kdWxlcy4KQEAgLTIyNSwxMCArMjIwLDEwIEBACiAgICAgICAgICAgICB3aXRoIG9wZW4oc291cmNlLCAidyIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgiYSA9IDEwXG5iPTIwLy8wXG4iKQogCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvciwgaW1wLnJlbG9hZCwgbW9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoWmVyb0RpdmlzaW9uRXJyb3IsIGltcG9ydGxpYi5yZWxvYWQsIG1vZCkKICAgICAgICAgICAgICMgQnV0IHdlIHN0aWxsIGV4cGVjdCB0aGUgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzLgogICAgICAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuZ2V0KFRFU1RGTikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kLCBOb25lLCAiZXhwZWN0ZWQgbW9kdWxlIHRvIGJlIGluIHN5cy5tb2R1bGVzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1vZCwgImV4cGVjdGVkIG1vZHVsZSB0byBiZSBpbiBzeXMubW9kdWxlcyIpCiAKICAgICAgICAgICAgICMgV2Ugc2hvdWxkIGhhdmUgcmVwbGFjZWQgYSB3LyAxMCwgYnV0IHRoZSBvbGQgYiB2YWx1ZSBzaG91bGQKICAgICAgICAgICAgICMgc3RpY2suCkBAIC0yODAsNyArMjc1LDcgQEAKICAgICAgICAgICAgIGltcG9ydCBzeXMKICAgICAgICAgICAgIGNsYXNzIEM6CiAgICAgICAgICAgICAgICBkZWYgX19kZWxfXyhzZWxmKToKLSAgICAgICAgICAgICAgICAgIGltcG9ydCBpbXAKKyAgICAgICAgICAgICAgICAgIGltcG9ydCBpbXBvcnRsaWIKICAgICAgICAgICAgIHN5cy5hcmd2Lmluc2VydCgwLCBDKCkpCiAgICAgICAgICAgICAiIiIpKQogICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2sodGVzdGZuKQpAQCAtMjkxLDcgKzI4Niw3IEBACiAgICAgICAgIHN5cy5wYXRoLmluc2VydCgwLCBvcy5jdXJkaXIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNvdXJjZSA9IFRFU1RGTiArICIucHkiCi0gICAgICAgICAgICBjb21waWxlZCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShzb3VyY2UpCisgICAgICAgICAgICBjb21waWxlZCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNvdXJjZSkKICAgICAgICAgICAgIHdpdGggb3Blbihzb3VyY2UsICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICB0cnk6CkBAIC0zMjIsNiArMzE3LDE0IEBACiAgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQogICAgICAgICBzZWxmLmFzc2VydEluKGIiSW1wb3J0RXJyb3IiLCBzdGRvdXQpCiAKKyAgICBkZWYgdGVzdF9mcm9tX2ltcG9ydF9tZXNzYWdlX2Zvcl9ub25leGlzdGVudF9tb2R1bGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgIl5ObyBtb2R1bGUgbmFtZWQgJ2JvZ3VzJyIpOgorICAgICAgICAgICAgZnJvbSBib2d1cyBpbXBvcnQgZm9vCisKKyAgICBkZWYgdGVzdF9mcm9tX2ltcG9ydF9tZXNzYWdlX2Zvcl9leGlzdGluZ19tb2R1bGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbXBvcnRFcnJvciwgIl5jYW5ub3QgaW1wb3J0IG5hbWUgJ2JvZ3VzJyIpOgorICAgICAgICAgICAgZnJvbSByZSBpbXBvcnQgYm9ndXMKKwogCiBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCiBjbGFzcyBGaWxlUGVybWlzc2lvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTMzMiw3ICszMzUsNyBAQAogICAgIGRlZiB0ZXN0X2NyZWF0aW9uX21vZGUoc2VsZik6CiAgICAgICAgIG1hc2sgPSAwbzAyMgogICAgICAgICB3aXRoIHRlbXBfdW1hc2sobWFzayksIF9yZWFkeV90b19pbXBvcnQoKSBhcyAobmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQogICAgICAgICAgICAgbW9kdWxlID0gX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGNhY2hlZF9wYXRoKToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIl9faW1wb3J0X18gZGlkIG5vdCByZXN1bHQgaW4gY3JlYXRpb24gb2YgIgpAQCAtMzUwLDcgKzM1Myw3IEBACiAgICAgICAgICMgcGVybWlzc2lvbnMgb2YgLnB5YyBzaG91bGQgbWF0Y2ggdGhvc2Ugb2YgLnB5LCByZWdhcmRsZXNzIG9mIG1hc2sKICAgICAgICAgbW9kZSA9IDBvNjAwCiAgICAgICAgIHdpdGggdGVtcF91bWFzaygwbzAyMiksIF9yZWFkeV90b19pbXBvcnQoKSBhcyAobmFtZSwgcGF0aCk6Ci0gICAgICAgICAgICBjYWNoZWRfcGF0aCA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQorICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShwYXRoKQogICAgICAgICAgICAgb3MuY2htb2QocGF0aCwgbW9kZSkKICAgICAgICAgICAgIF9faW1wb3J0X18obmFtZSkKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhjYWNoZWRfcGF0aCk6CkBAIC0zNjUsNyArMzY4LDcgQEAKICAgICBkZWYgdGVzdF9jYWNoZWRfcmVhZG9ubHkoc2VsZik6CiAgICAgICAgIG1vZGUgPSAwbzQwMAogICAgICAgICB3aXRoIHRlbXBfdW1hc2soMG8wMjIpLCBfcmVhZHlfdG9faW1wb3J0KCkgYXMgKG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKKyAgICAgICAgICAgIGNhY2hlZF9wYXRoID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCkKICAgICAgICAgICAgIG9zLmNobW9kKHBhdGgsIG1vZGUpCiAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoY2FjaGVkX3BhdGgpOgpAQCAtNDA1LDcgKzQwOCw3IEBACiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfb25seSA9IHBhdGggKyAiYyIKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfb25seSA9IHBhdGggKyAibyIKLSAgICAgICAgICAgIG9zLnJlbmFtZShpbXAuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCksIGJ5dGVjb2RlX29ubHkpCisgICAgICAgICAgICBvcy5yZW5hbWUoaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCksIGJ5dGVjb2RlX29ubHkpCiAgICAgICAgICAgICBtID0gX19pbXBvcnRfXyhuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLngsICdyZXdyaXR0ZW4nKQogCkBAIC00MjcsNyArNDMwLDcgQEAKICIiIgogICAgIGRpcl9uYW1lID0gb3MucGF0aC5hYnNwYXRoKFRFU1RGTikKICAgICBmaWxlX25hbWUgPSBvcy5wYXRoLmpvaW4oZGlyX25hbWUsIG1vZHVsZV9uYW1lKSArIG9zLmV4dHNlcCArICJweSIKLSAgICBjb21waWxlZF9uYW1lID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfbmFtZSkKKyAgICBjb21waWxlZF9uYW1lID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9uYW1lKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KQEAgLTQ4OCw3ICs0OTEsNyBAQAogICAgICAgICAgICAgaGVhZGVyID0gZi5yZWFkKDEyKQogICAgICAgICAgICAgY29kZSA9IG1hcnNoYWwubG9hZChmKQogICAgICAgICBjb25zdGFudHMgPSBsaXN0KGNvZGUuY29fY29uc3RzKQotICAgICAgICBmb3JlaWduX2NvZGUgPSB0ZXN0X21haW4uX19jb2RlX18KKyAgICAgICAgZm9yZWlnbl9jb2RlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUuX19jb2RlX18KICAgICAgICAgcG9zID0gY29uc3RhbnRzLmluZGV4KDEpCiAgICAgICAgIGNvbnN0YW50c1twb3NdID0gZm9yZWlnbl9jb2RlCiAgICAgICAgIGNvZGUgPSB0eXBlKGNvZGUpKGNvZGUuY29fYXJnY291bnQsIGNvZGUuY29fa3dvbmx5YXJnY291bnQsCkBAIC02MzAsNyArNjMzLDcgQEAKIGNsYXNzIFB5Y2FjaGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBUZXN0IHRoZSB2YXJpb3VzIFBFUCAzMTQ3IHJlbGF0ZWQgYmVoYXZpb3JzLgogCi0gICAgdGFnID0gaW1wLmdldF90YWcoKQorICAgIHRhZyA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKIAogICAgIGRlZiBfY2xlYW4oc2VsZik6CiAgICAgICAgIGZvcmdldChURVNURk4pCkBAIC02NzgsMTAgKzY4MSwxMSBAQAogICAgICAgICAjIFdpdGggUEVQIDMxNDcgY2FjaGUgbGF5b3V0LCByZW1vdmluZyB0aGUgc291cmNlIGJ1dCBsZWF2aW5nIHRoZSBweWMKICAgICAgICAgIyBmaWxlIGRvZXMgbm90IHNhdGlzZnkgdGhlIGltcG9ydC4KICAgICAgICAgX19pbXBvcnRfXyhURVNURk4pCi0gICAgICAgIHB5Y19maWxlID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlKQorICAgICAgICBweWNfZmlsZSA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocHljX2ZpbGUpKQogICAgICAgICBvcy5yZW1vdmUoc2VsZi5zb3VyY2UpCiAgICAgICAgIGZvcmdldChURVNURk4pCisgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBfX2ltcG9ydF9fLCBURVNURk4pCiAKICAgICBAc2tpcF9pZl9kb250X3dyaXRlX2J5dGVjb2RlCkBAIC03MDMsNyArNzA3LDcgQEAKICAgICBkZWYgdGVzdF9fX2NhY2hlZF9fKHNlbGYpOgogICAgICAgICAjIE1vZHVsZXMgbm93IGFsc28gaGF2ZSBhbiBfX2NhY2hlZF9fIHRoYXQgcG9pbnRzIHRvIHRoZSBweWMgZmlsZS4KICAgICAgICAgbSA9IF9faW1wb3J0X18oVEVTVEZOKQotICAgICAgICBweWNfZmlsZSA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShURVNURk4gKyAnLnB5JykKKyAgICAgICAgcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShURVNURk4gKyAnLnB5JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLl9fY2FjaGVkX18sIG9zLnBhdGguam9pbihvcy5jdXJkaXIsIHB5Y19maWxlKSkKIAogICAgIEBza2lwX2lmX2RvbnRfd3JpdGVfYnl0ZWNvZGUKQEAgLTczOCwxMCArNzQyLDEwIEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3LmZvbycpCi0gICAgICAgIGluaXRfcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICBpbml0X3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgb3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ19faW5pdF9fLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2NhY2hlZF9fLCBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBpbml0X3B5YykpCi0gICAgICAgIGZvb19weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ2Zvby5weScpKQorICAgICAgICBmb29fcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ2Zvby5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5tb2R1bGVzWydwZXAzMTQ3LmZvbyddLl9fY2FjaGVkX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgZm9vX3B5YykpCiAKQEAgLTc2NSwxMCArNzY5LDEwIEBACiAgICAgICAgIHVubG9hZCgncGVwMzE0NycpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIG0gPSBfX2ltcG9ydF9fKCdwZXAzMTQ3LmZvbycpCi0gICAgICAgIGluaXRfcHljID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKAorICAgICAgICBpbml0X3B5YyA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKAogICAgICAgICAgICAgb3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ19faW5pdF9fLnB5JykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5fX2NhY2hlZF9fLCBvcy5wYXRoLmpvaW4ob3MuY3VyZGlyLCBpbml0X3B5YykpCi0gICAgICAgIGZvb19weWMgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ2Zvby5weScpKQorICAgICAgICBmb29fcHljID0gaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uob3MucGF0aC5qb2luKCdwZXAzMTQ3JywgJ2Zvby5weScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5tb2R1bGVzWydwZXAzMTQ3LmZvbyddLl9fY2FjaGVkX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKG9zLmN1cmRpciwgZm9vX3B5YykpCiAKQEAgLTg1Miw3ICs4NTYsNiBAQAogICAgICAgICBmcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzWydfZnJvemVuX2ltcG9ydGxpYiddCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMobWFjaGluZXJ5LkZpbGVGaW5kZXIsIG1vZC5GaWxlRmluZGVyKQotICAgICAgICBzZWxmLmFzc2VydElzKGltcC5uZXdfbW9kdWxlLCBtb2QubmV3X21vZHVsZSkKIAogCiBAY3B5dGhvbl9vbmx5CkBAIC0xMDMzLDExICsxMDM2LDE0IEBACiAgICAgICAgICMgYXdheSBmcm9tIHRoZSB0cmFjZWJhY2suCiAgICAgICAgIHNlbGYuY3JlYXRlX21vZHVsZSgiZm9vIiwgIiIpCiAgICAgICAgIGltcG9ydGxpYiA9IHN5cy5tb2R1bGVzWydfZnJvemVuX2ltcG9ydGxpYiddCi0gICAgICAgIG9sZF9sb2FkX21vZHVsZSA9IGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGUKKyAgICAgICAgaWYgJ2xvYWRfbW9kdWxlJyBpbiB2YXJzKGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIpOgorICAgICAgICAgICAgb2xkX2V4ZWNfbW9kdWxlID0gaW1wb3J0bGliLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb2xkX2V4ZWNfbW9kdWxlID0gTm9uZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoKmFyZ3MpOgorICAgICAgICAgICAgZGVmIGV4ZWNfbW9kdWxlKCphcmdzKToKICAgICAgICAgICAgICAgICAxLzAKLSAgICAgICAgICAgIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIubG9hZF9tb2R1bGUgPSBsb2FkX21vZHVsZQorICAgICAgICAgICAgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZSA9IGV4ZWNfbW9kdWxlCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgaW1wb3J0IGZvbwogICAgICAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yIGFzIGU6CkBAIC0xMDQ2LDE5ICsxMDUyLDIyIEBACiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJaZXJvRGl2aXNpb25FcnJvciBzaG91bGQgaGF2ZSBiZWVuIHJhaXNlZCIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydF90cmFjZWJhY2sodGIsIFtfX2ZpbGVfXywgJzxmcm96ZW4gaW1wb3J0bGliJywgX19maWxlX19dKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5sb2FkX21vZHVsZSA9IG9sZF9sb2FkX21vZHVsZQorICAgICAgICAgICAgaWYgb2xkX2V4ZWNfbW9kdWxlIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGVsIGltcG9ydGxpYi5Tb3VyY2VMb2FkZXIuZXhlY19tb2R1bGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW1wb3J0bGliLlNvdXJjZUxvYWRlci5leGVjX21vZHVsZSA9IG9sZF9leGVjX21vZHVsZQogCi0KLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBydW5fdW5pdHRlc3QoSW1wb3J0VGVzdHMsIFB5Y2FjaGVUZXN0cywgRmlsZVBlcm1pc3Npb25UZXN0cywKLSAgICAgICAgICAgICAgICAgUHljUmV3cml0aW5nVGVzdHMsIFBhdGhzVGVzdHMsIFJlbGF0aXZlSW1wb3J0VGVzdHMsCi0gICAgICAgICAgICAgICAgIE92ZXJyaWRpbmdJbXBvcnRCdWlsdGluVGVzdHMsCi0gICAgICAgICAgICAgICAgIEltcG9ydGxpYkJvb3RzdHJhcFRlc3RzLCBHZXRTb3VyY2VmaWxlVGVzdHMsCi0gICAgICAgICAgICAgICAgIFRlc3RTeW1ib2xpY2FsbHlMaW5rZWRQYWNrYWdlLAotICAgICAgICAgICAgICAgICBJbXBvcnRUcmFjZWJhY2tUZXN0cykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhURVNURk5fVU5FTkNPREFCTEUsICduZWVkIFRFU1RGTl9VTkVOQ09EQUJMRScpCisgICAgZGVmIHRlc3RfdW5lbmNvZGFibGVfZmlsZW5hbWUoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzExNjE5OiBUaGUgUHl0aG9uIHBhcnNlciBhbmQgdGhlIGltcG9ydCBtYWNoaW5lcnkgbXVzdCBub3QKKyAgICAgICAgIyBlbmNvZGUgZmlsZW5hbWVzLCBlc3BlY2lhbGx5IG9uIFdpbmRvd3MKKyAgICAgICAgcHluYW1lID0gc2NyaXB0X2hlbHBlci5tYWtlX3NjcmlwdCgnJywgVEVTVEZOX1VORU5DT0RBQkxFLCAncGFzcycpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIHB5bmFtZSkKKyAgICAgICAgbmFtZSA9IHB5bmFtZVs6LTNdCisgICAgICAgIHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCAibW9kID0gX19pbXBvcnRfXyglYSkiICUgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXNvbGF0ZWQ9RmFsc2UpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICAjIFRlc3QgbmVlZHMgdG8gYmUgYSBwYWNrYWdlLCBzbyB3ZSBjYW4gZG8gcmVsYXRpdmUgaW1wb3J0cy4KLSAgICBmcm9tIHRlc3QudGVzdF9pbXBvcnQgaW1wb3J0IHRlc3RfbWFpbgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRob29rcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmEyMmQxYS4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGhvb2tzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUwICswLDAgQEAKLWltcG9ydCBzeXMKLWltcG9ydCBpbXAKLWltcG9ydCBvcwotaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLQotCi10ZXN0X3NyYyA9ICIiIlwKLWRlZiBnZXRfbmFtZSgpOgotICAgIHJldHVybiBfX25hbWVfXwotZGVmIGdldF9maWxlKCk6Ci0gICAgcmV0dXJuIF9fZmlsZV9fCi0iIiIKLQotYWJzaW1wID0gImltcG9ydCBzdWJcbiIKLXJlbGltcCA9ICJmcm9tIC4gaW1wb3J0IHN1YlxuIgotZGVlcHJlbGltcCA9ICJmcm9tIC4uLi4gaW1wb3J0IHN1YlxuIgotZnV0aW1wID0gImZyb20gX19mdXR1cmVfXyBpbXBvcnQgYWJzb2x1dGVfaW1wb3J0XG4iCi0KLXJlbG9hZF9zcmMgPSB0ZXN0X3NyYysiIiJcCi1yZWxvYWRlZCA9IFRydWUKLSIiIgotCi10ZXN0X2NvID0gY29tcGlsZSh0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotcmVsb2FkX2NvID0gY29tcGlsZShyZWxvYWRfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCi0KLXRlc3QyX29sZGFic19jbyA9IGNvbXBpbGUoYWJzaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX25ld2Fic19jbyA9IGNvbXBpbGUoZnV0aW1wICsgYWJzaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX25ld3JlbF9jbyA9IGNvbXBpbGUocmVsaW1wICsgdGVzdF9zcmMsICI8Pz8/PiIsICJleGVjIikKLXRlc3QyX2RlZXByZWxfY28gPSBjb21waWxlKGRlZXByZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotdGVzdDJfZnV0cmVsX2NvID0gY29tcGlsZShmdXRpbXAgKyByZWxpbXAgKyB0ZXN0X3NyYywgIjw/Pz8+IiwgImV4ZWMiKQotCi10ZXN0X3BhdGggPSAiISEhX3Rlc3RfISEhIgotCi0KLWNsYXNzIFRlc3RJbXBvcnRlcjoKLQotICAgIG1vZHVsZXMgPSB7Ci0gICAgICAgICJob29rdGVzdG1vZHVsZSI6IChGYWxzZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UiOiAoVHJ1ZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViIjogKFRydWUsIHRlc3RfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIiOiAoVHJ1ZSwgdGVzdF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uub2xkYWJzIjogKEZhbHNlLCB0ZXN0Ml9vbGRhYnNfY28pLAotICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld2FicyI6IChGYWxzZSwgdGVzdDJfbmV3YWJzX2NvKSwKLSAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdyZWwiOiAoRmFsc2UsIHRlc3QyX25ld3JlbF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2Uuc3ViLnN1YmJlci5zdWJlc3QiOiAoVHJ1ZSwgdGVzdDJfZGVlcHJlbF9jbyksCi0gICAgICAgICJob29rdGVzdHBhY2thZ2UuZnV0cmVsIjogKEZhbHNlLCB0ZXN0Ml9mdXRyZWxfY28pLAotICAgICAgICAic3ViIjogKEZhbHNlLCB0ZXN0X2NvKSwKLSAgICAgICAgInJlbG9hZG1vZHVsZSI6IChGYWxzZSwgdGVzdF9jbyksCi0gICAgfQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGg9dGVzdF9wYXRoKToKLSAgICAgICAgaWYgcGF0aCAhPSB0ZXN0X3BhdGg6Ci0gICAgICAgICAgICAjIGlmIG91ciBjbGFzcyBpcyBvbiBzeXMucGF0aF9ob29rcywgd2UgbXVzdCByYWlzZQotICAgICAgICAgICAgIyBJbXBvcnRFcnJvciBmb3IgYW55IHBhdGggaXRlbSB0aGF0IHdlIGNhbid0IGhhbmRsZS4KLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBfZ2V0X19wYXRoX18oc2VsZik6Ci0gICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IKLQotICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgaWYgZnVsbG5hbWUgaW4gc2VsZi5tb2R1bGVzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0KLSAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgotICAgICAgICBpc3BrZywgY29kZSA9IHNlbGYubW9kdWxlc1tmdWxsbmFtZV0KLSAgICAgICAgbW9kID0gc3lzLm1vZHVsZXMuc2V0ZGVmYXVsdChmdWxsbmFtZSxpbXAubmV3X21vZHVsZShmdWxsbmFtZSkpCi0gICAgICAgIG1vZC5fX2ZpbGVfXyA9ICI8JXM+IiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCi0gICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZgotICAgICAgICBpZiBpc3BrZzoKLSAgICAgICAgICAgIG1vZC5fX3BhdGhfXyA9IHNlbGYuX2dldF9fcGF0aF9fKCkKLSAgICAgICAgZXhlYyhjb2RlLCBtb2QuX19kaWN0X18pCi0gICAgICAgIHJldHVybiBtb2QKLQotCi1jbGFzcyBNZXRhSW1wb3J0ZXIoVGVzdEltcG9ydGVyKToKLSAgICBkZWYgX2dldF9fcGF0aF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gW10KLQotY2xhc3MgUGF0aEltcG9ydGVyKFRlc3RJbXBvcnRlcik6Ci0gICAgZGVmIF9nZXRfX3BhdGhfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIFtzZWxmLnBhdGhdCi0KLQotY2xhc3MgSW1wb3J0QmxvY2tlcjoKLSAgICAiIiJQbGFjZSBhbiBJbXBvcnRCbG9ja2VyIGluc3RhbmNlIG9uIHN5cy5tZXRhX3BhdGggYW5kIHlvdQotICAgIGNhbiBiZSBzdXJlIHRoZSBtb2R1bGVzIHlvdSBzcGVjaWZpZWQgY2FuJ3QgYmUgaW1wb3J0ZWQsIGV2ZW4KLSAgICBpZiBpdCdzIGEgYnVpbHRpbi4iIiIKLSAgICBkZWYgX19pbml0X18oc2VsZiwgKm5hbWVzdG9ibG9jayk6Ci0gICAgICAgIHNlbGYubmFtZXN0b2Jsb2NrID0gZGljdC5mcm9ta2V5cyhuYW1lc3RvYmxvY2spCi0gICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUpOgotICAgICAgICBpZiBmdWxsbmFtZSBpbiBzZWxmLm5hbWVzdG9ibG9jazoKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0gICAgICAgIHJldHVybiBOb25lCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoIkkgZGFyZSB5b3UiKQotCi0KLWNsYXNzIEltcFdyYXBwZXI6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD1Ob25lKToKLSAgICAgICAgaWYgcGF0aCBpcyBub3QgTm9uZSBhbmQgbm90IG9zLnBhdGguaXNkaXIocGF0aCk6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotICAgICAgICBzZWxmLnBhdGggPSBwYXRoCi0KLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6Ci0gICAgICAgIHN1Ym5hbWUgPSBmdWxsbmFtZS5zcGxpdCgiLiIpWy0xXQotICAgICAgICBpZiBzdWJuYW1lICE9IGZ1bGxuYW1lIGFuZCBzZWxmLnBhdGggaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBOb25lCi0gICAgICAgIGlmIHNlbGYucGF0aCBpcyBOb25lOgotICAgICAgICAgICAgcGF0aCA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHBhdGggPSBbc2VsZi5wYXRoXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmaWxlLCBmaWxlbmFtZSwgc3R1ZmYgPSBpbXAuZmluZF9tb2R1bGUoc3VibmFtZSwgcGF0aCkKLSAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgcmV0dXJuIEltcExvYWRlcihmaWxlLCBmaWxlbmFtZSwgc3R1ZmYpCi0KLQotY2xhc3MgSW1wTG9hZGVyOgotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGZpbGVuYW1lLCBzdHVmZik6Ci0gICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKLSAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgICAgIHNlbGYuc3R1ZmYgPSBzdHVmZgotCi0gICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgbW9kID0gaW1wLmxvYWRfbW9kdWxlKGZ1bGxuYW1lLCBzZWxmLmZpbGUsIHNlbGYuZmlsZW5hbWUsIHNlbGYuc3R1ZmYpCi0gICAgICAgIGlmIHNlbGYuZmlsZToKLSAgICAgICAgICAgIHNlbGYuZmlsZS5jbG9zZSgpCi0gICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZiAgIyBmb3IgaW50cm9zcGVjdGlvbgotICAgICAgICByZXR1cm4gbW9kCi0KLQotY2xhc3MgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLnBhdGggPSBzeXMucGF0aFs6XQotICAgICAgICBzZWxmLm1ldGFfcGF0aCA9IHN5cy5tZXRhX3BhdGhbOl0KLSAgICAgICAgc2VsZi5wYXRoX2hvb2tzID0gc3lzLnBhdGhfaG9va3NbOl0KLSAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQotICAgICAgICBzZWxmLm1vZHVsZXNfYmVmb3JlID0gc3VwcG9ydC5tb2R1bGVzX3NldHVwKCkKLQotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnBhdGgKLSAgICAgICAgc3lzLm1ldGFfcGF0aFs6XSA9IHNlbGYubWV0YV9wYXRoCi0gICAgICAgIHN5cy5wYXRoX2hvb2tzWzpdID0gc2VsZi5wYXRoX2hvb2tzCi0gICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKLSAgICAgICAgc3VwcG9ydC5tb2R1bGVzX2NsZWFudXAoKnNlbGYubW9kdWxlc19iZWZvcmUpCi0KLQotY2xhc3MgSW1wb3J0SG9va3NUZXN0Q2FzZShJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSk6Ci0KLSAgICBkZWYgZG9UZXN0SW1wb3J0cyhzZWxmLCBpbXBvcnRlcj1Ob25lKToKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0bW9kdWxlCi0gICAgICAgIGltcG9ydCBob29rdGVzdHBhY2thZ2UKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIKLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3Rtb2R1bGUuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3Rtb2R1bGUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5nZXRfbmFtZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJob29rdGVzdHBhY2thZ2UiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5zdWIuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1YiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIiKQotICAgICAgICBpZiBpbXBvcnRlcjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3Rtb2R1bGUuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5fX2xvYWRlcl9fLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuX19sb2FkZXJfXywgaW1wb3J0ZXIpCi0KLSAgICAgICAgVGVzdEltcG9ydGVyLm1vZHVsZXNbJ3JlbG9hZG1vZHVsZSddID0gKEZhbHNlLCB0ZXN0X2NvKQotICAgICAgICBpbXBvcnQgcmVsb2FkbW9kdWxlCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihyZWxvYWRtb2R1bGUsJ3JlbG9hZGVkJykpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UubmV3cmVsLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5uZXdyZWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdyZWwuc3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5zdWIuc3ViYmVyLnN1YmVzdCBhcyBzdWJlc3QKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJlc3QuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLnN1Yi5zdWJiZXIuc3ViZXN0IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWJlc3Quc3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCi0KLSAgICAgICAgaW1wb3J0IGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChob29rdGVzdHBhY2thZ2UuZnV0cmVsLmdldF9uYW1lKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgImhvb2t0ZXN0cGFja2FnZS5mdXRyZWwiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5mdXRyZWwuc3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgIGhvb2t0ZXN0cGFja2FnZS5zdWIpCi0KLSAgICAgICAgaW1wb3J0IHN1YgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1Yi5nZXRfbmFtZSgpLCAic3ViIikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm9sZGFicwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5vbGRhYnMuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm9sZGFicyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm9sZGFicy5zdWIsIHN1YikKLQotICAgICAgICBpbXBvcnQgaG9va3Rlc3RwYWNrYWdlLm5ld2FicwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhvb2t0ZXN0cGFja2FnZS5uZXdhYnMuZ2V0X25hbWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiaG9va3Rlc3RwYWNrYWdlLm5ld2FicyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaG9va3Rlc3RwYWNrYWdlLm5ld2Ficy5zdWIsIHN1YikKLQotICAgIGRlZiB0ZXN0TWV0YVBhdGgoc2VsZik6Ci0gICAgICAgIGkgPSBNZXRhSW1wb3J0ZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpKQotICAgICAgICBzZWxmLmRvVGVzdEltcG9ydHMoaSkKLQotICAgIGRlZiB0ZXN0UGF0aEhvb2soc2VsZik6Ci0gICAgICAgIHN5cy5wYXRoX2hvb2tzLmluc2VydCgwLCBQYXRoSW1wb3J0ZXIpCi0gICAgICAgIHN5cy5wYXRoLmFwcGVuZCh0ZXN0X3BhdGgpCi0gICAgICAgIHNlbGYuZG9UZXN0SW1wb3J0cygpCi0KLSAgICBkZWYgdGVzdEJsb2NrZXIoc2VsZik6Ci0gICAgICAgIG1uYW1lID0gImV4Y2VwdGlvbnMiICAjIGFuIGFyYml0cmFyeSBoYXJtbGVzcyBidWlsdGluIG1vZHVsZQotICAgICAgICBzdXBwb3J0LnVubG9hZChtbmFtZSkKLSAgICAgICAgc3lzLm1ldGFfcGF0aC5hcHBlbmQoSW1wb3J0QmxvY2tlcihtbmFtZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yLCBfX2ltcG9ydF9fLCBtbmFtZSkKLQotICAgIGRlZiB0ZXN0SW1wV3JhcHBlcihzZWxmKToKLSAgICAgICAgaSA9IEltcFdyYXBwZXIoKQotICAgICAgICBzeXMubWV0YV9wYXRoLmFwcGVuZChpKQotICAgICAgICBzeXMucGF0aF9ob29rcy5pbnNlcnQoMCwgSW1wV3JhcHBlcikKLSAgICAgICAgbW5hbWVzID0gKAotICAgICAgICAgICAgImNvbG9yc3lzIiwgInVybGxpYi5wYXJzZSIsICJkaXN0dXRpbHMuY29yZSIsICJzeXMiLAotICAgICAgICApCi0gICAgICAgIGZvciBtbmFtZSBpbiBtbmFtZXM6Ci0gICAgICAgICAgICBwYXJlbnQgPSBtbmFtZS5zcGxpdCgiLiIpWzBdCi0gICAgICAgICAgICBmb3IgbiBpbiBsaXN0KHN5cy5tb2R1bGVzKToKLSAgICAgICAgICAgICAgICBpZiBuLnN0YXJ0c3dpdGgocGFyZW50KToKLSAgICAgICAgICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25dCi0gICAgICAgIGZvciBtbmFtZSBpbiBtbmFtZXM6Ci0gICAgICAgICAgICBtID0gX19pbXBvcnRfXyhtbmFtZSwgZ2xvYmFscygpLCBsb2NhbHMoKSwgWyJfX2R1bW15X18iXSkKLSAgICAgICAgICAgICMgdG8gbWFrZSBzdXJlIHdlIGFjdHVhbGx5IGhhbmRsZWQgdGhlIGltcG9ydAotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobSwgIl9fbG9hZGVyX18iKSkKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSW1wb3J0SG9va3NUZXN0Q2FzZSkKLQotaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX2luaXRfXy5weQppbmRleCAwZTM0NWNkLi40YjE2ZWNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX2luaXRfXy5weQpAQCAtMSwzMyArMSw1IEBACiBpbXBvcnQgb3MKLWltcG9ydCBzeXMKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLWRlZiB0ZXN0X3N1aXRlKHBhY2thZ2U9X19wYWNrYWdlX18sIGRpcmVjdG9yeT1vcy5wYXRoLmRpcm5hbWUoX19maWxlX18pKToKLSAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCi0gICAgZm9yIG5hbWUgaW4gb3MubGlzdGRpcihkaXJlY3RvcnkpOgotICAgICAgICBpZiBuYW1lLnN0YXJ0c3dpdGgoKCcuJywgJ19fJykpOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihkaXJlY3RvcnksIG5hbWUpCi0gICAgICAgIGlmIChvcy5wYXRoLmlzZmlsZShwYXRoKSBhbmQgbmFtZS5zdGFydHN3aXRoKCd0ZXN0XycpIGFuZAotICAgICAgICAgICAgICAgIG5hbWUuZW5kc3dpdGgoJy5weScpKToKLSAgICAgICAgICAgIHN1Ym1vZHVsZV9uYW1lID0gb3MucGF0aC5zcGxpdGV4dChuYW1lKVswXQotICAgICAgICAgICAgbW9kdWxlX25hbWUgPSAiezB9LnsxfSIuZm9ybWF0KHBhY2thZ2UsIHN1Ym1vZHVsZV9uYW1lKQotICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGVfbmFtZSwgbGV2ZWw9MCkKLSAgICAgICAgICAgIG1vZHVsZV90ZXN0cyA9IHVuaXR0ZXN0LmZpbmRUZXN0Q2FzZXMoc3lzLm1vZHVsZXNbbW9kdWxlX25hbWVdKQotICAgICAgICAgICAgc3VpdGUuYWRkVGVzdChtb2R1bGVfdGVzdHMpCi0gICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICAgIHBhY2thZ2VfbmFtZSA9ICJ7MH0uezF9Ii5mb3JtYXQocGFja2FnZSwgbmFtZSkKLSAgICAgICAgICAgIF9faW1wb3J0X18ocGFja2FnZV9uYW1lLCBsZXZlbD0wKQotICAgICAgICAgICAgcGFja2FnZV90ZXN0cyA9IGdldGF0dHIoc3lzLm1vZHVsZXNbcGFja2FnZV9uYW1lXSwgJ3Rlc3Rfc3VpdGUnKSgpCi0gICAgICAgICAgICBzdWl0ZS5hZGRUZXN0KHBhY2thZ2VfdGVzdHMpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgIHJldHVybiBzdWl0ZQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgdG9wX2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLmRpcm5hbWUoc3RhcnRfZGlyKSkKLSAgICB0ZXN0X2xvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KHRlc3RfbG9hZGVyLmRpc2NvdmVyKHN0YXJ0X2RpciwgdG9wX2xldmVsX2Rpcj10b3BfZGlyKSkKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weQppbmRleCBjMzk3MTI4Li40MGEyM2EyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9fX21haW5fXy5weQpAQCAtMSwyMCArMSw0IEBACi0iIiJSdW4gaW1wb3J0bGliJ3MgdGVzdCBzdWl0ZS4KK2Zyb20gLiBpbXBvcnQgbG9hZF90ZXN0cworaW1wb3J0IHVuaXR0ZXN0CiAKLVNwZWNpZnlpbmcgdGhlIGBgLS1idWlsdGluYGAgZmxhZyB3aWxsIHJ1biB0ZXN0cywgd2hlcmUgYXBwbGljYWJsZSwgd2l0aAotYnVpbHRpbnMuX19pbXBvcnRfXyBpbnN0ZWFkIG9mIGltcG9ydGxpYi5fX2ltcG9ydF9fLgotCi0iIiIKLWZyb20gLiBpbXBvcnQgdGVzdF9tYWluCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgYXJncGFyc2UKLQotICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPSdFeGVjdXRlIHRoZSBpbXBvcnRsaWIgdGVzdCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdWl0ZScpCi0gICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1idWlsdGluJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J3VzZSBidWlsdGlucy5fX2ltcG9ydF9fKCkgaW5zdGVhZCBvZiBpbXBvcnRsaWInKQotICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCi0gICAgaWYgYXJncy5idWlsdGluOgotICAgICAgICB1dGlsLnVzaW5nX19faW1wb3J0X18gPSBUcnVlCi0gICAgdGVzdF9tYWluKCkKK3VuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYWJjLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYWJjLnB5CmluZGV4IDJjMTdhYzMuLjIwNzBkYWQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2FiYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9hYmMucHkKQEAgLTIsNyArMiw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIAogCi1jbGFzcyBGaW5kZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSwgbWV0YWNsYXNzPWFiYy5BQkNNZXRhKToKK2NsYXNzIEZpbmRlclRlc3RzKG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CiAKICAgICAiIiJCYXNpYyB0ZXN0cyBmb3IgYSBmaW5kZXIgdG8gcGFzcy4iIiIKIApAQCAtMzksNyArMzksNyBAQAogICAgICAgICBwYXNzCiAKIAotY2xhc3MgTG9hZGVyVGVzdHModW5pdHRlc3QuVGVzdENhc2UsIG1ldGFjbGFzcz1hYmMuQUJDTWV0YSk6CitjbGFzcyBMb2FkZXJUZXN0cyhtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgogCiAgICAgQGFiYy5hYnN0cmFjdG1ldGhvZAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKQEAgLTgxLDExICs4MSw2IEBACiAgICAgICAgIHBhc3MKIAogICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKLSAgICBkZWYgdGVzdF9tb2R1bGVfcmV1c2Uoc2VsZik6Ci0gICAgICAgICIiIklmIGEgbW9kdWxlIGlzIGFscmVhZHkgaW4gc3lzLm1vZHVsZXMsIGl0IHNob3VsZCBiZSByZXVzZWQuIiIiCi0gICAgICAgIHBhc3MKLQotICAgIEBhYmMuYWJzdHJhY3RtZXRob2QKICAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgogICAgICAgICAiIiJJZiBhIG1vZHVsZSBpcyBhbHJlYWR5IGluIHN5cy5tb2R1bGVzIGFuZCBhIHJlbG9hZCBmYWlscwogICAgICAgICAoZS5nLiBhIFN5bnRheEVycm9yKSwgdGhlIG1vZHVsZSBzaG91bGQgYmUgaW4gdGhlIHN0YXRlIGl0IHdhcyBiZWZvcmUKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL19faW5pdF9fLnB5CmluZGV4IDE1YzBhZGUuLjRiMTZlY2MgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vX19pbml0X18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi9fX2luaXRfXy5weQpAQCAtMSwxMiArMSw1IEBACi1mcm9tIC4uIGltcG9ydCB0ZXN0X3N1aXRlCiBpbXBvcnQgb3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKIAotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICByZXR1cm4gdGVzdF9zdWl0ZSgnaW1wb3J0bGliLnRlc3QuYnVpbHRpbicsIGRpcmVjdG9yeSkKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QodGVzdF9zdWl0ZSgpKQorZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgIHJldHVybiBsb2FkX3BhY2thZ2VfdGVzdHMob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgKmFyZ3MpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGEyM2EyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi9fX21haW5fXy5weQpAQCAtMCwwICsxLDQgQEAKK2Zyb20gLiBpbXBvcnQgbG9hZF90ZXN0cworaW1wb3J0IHVuaXR0ZXN0CisKK3VuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9maW5kZXIucHkKaW5kZXggZGEwZWYyOC4uOTM0NTYyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfZmluZGVyLnB5CkBAIC0xLDExICsxLDUzIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBidWlsdGluX3V0aWwKIAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBzeXMKIGltcG9ydCB1bml0dGVzdAogCisKK2NsYXNzIEZpbmRTcGVjVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKKworICAgICIiIlRlc3QgZmluZF9zcGVjKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgICMgQ29tbW9uIGNhc2UuCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQub3JpZ2luLCAnYnVpbHQtaW4nKQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vdCBiZSBhIHBhY2thZ2UuCisgICAgdGVzdF9wYWNrYWdlID0gTm9uZQorCisgICAgIyBCdWlsdC1pbiBtb2R1bGVzIGNhbm5vYnQgYmUgaW4gYSBwYWNrYWdlLgorICAgIHRlc3RfbW9kdWxlX2luX3BhY2thZ2UgPSBOb25lCisKKyAgICAjIEJ1aWx0LWluIG1vZHVsZXMgY2Fubm90IGJlIGEgcGFja2FnZS4KKyAgICB0ZXN0X3BhY2thZ2VfaW5fcGFja2FnZSA9IE5vbmUKKworICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgorICAgIHRlc3RfcGFja2FnZV9vdmVyX21vZHVsZSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnaW1wb3J0bGliJworICAgICAgICBhc3NlcnQgbmFtZSBub3QgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9zcGVjKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNwZWMpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfcGF0aChzZWxmKToKKyAgICAgICAgIyBUaGUgdmFsdWUgZm9yICdwYXRoJyBzaG91bGQgYWx3YXlzIHRyaWdnZXIgYSBmYWlsZWQgaW1wb3J0LgorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6CisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfc3BlYyhidWlsdGluX3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsncGtnJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcGVjKQorCitGcm96ZW5fRmluZFNwZWNUZXN0cywgU291cmNlX0ZpbmRTcGVjVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kU3BlY1Rlc3RzLAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQorCisKIGNsYXNzIEZpbmRlclRlc3RzKGFiYy5GaW5kZXJUZXN0cyk6CiAKICAgICAiIiJUZXN0IGZpbmRfbW9kdWxlKCkgZm9yIGJ1aWx0LWluIG1vZHVsZXMuIiIiCkBAIC0xMyw4ICs1NSw5IEBACiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICAjIENvbW1vbiBjYXNlLgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShidWlsdGluX3V0aWwuTkFNRSk6Ci0gICAgICAgICAgICBmb3VuZCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmb3VuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZvdW5kLCAnbG9hZF9tb2R1bGUnKSkKIAogICAgICMgQnVpbHQtaW4gbW9kdWxlcyBjYW5ub3QgYmUgYSBwYWNrYWdlLgogICAgIHRlc3RfcGFja2FnZSA9IHRlc3RfcGFja2FnZV9pbl9wYWNrYWdlID0gdGVzdF9wYWNrYWdlX292ZXJfbW9kdWxlID0gTm9uZQpAQCAtMjQsMjIgKzY3LDE5IEBACiAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICBhc3NlcnQgJ2ltcG9ydGxpYicgbm90IGluIHN5cy5idWlsdGluX21vZHVsZV9uYW1lcwotICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKCdpbXBvcnRsaWInKQorICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ2ltcG9ydGxpYicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvYWRlcikKIAogICAgIGRlZiB0ZXN0X2lnbm9yZV9wYXRoKHNlbGYpOgogICAgICAgICAjIFRoZSB2YWx1ZSBmb3IgJ3BhdGgnIHNob3VsZCBhbHdheXMgdHJpZ2dlciBhIGZhaWxlZCBpbXBvcnQuCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGJ1aWx0aW5fdXRpbC5OQU1FKToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZmluZF9tb2R1bGUoYnVpbHRpbl91dGlsLk5BTUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJ3BrZyddKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQogCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEZpbmRlclRlc3RzLAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9idWlsdGluL3Rlc3RfbG9hZGVyLnB5CmluZGV4IDEyYTc5YzYuLjFmODM1NzQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2J1aWx0aW4vdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvYnVpbHRpbi90ZXN0X2xvYWRlci5weQpAQCAtMSw5ICsxLDkgQEAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGJ1aWx0aW5fdXRpbAogCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHN5cwogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTEzLDggKzEzLDkgQEAKIAogICAgICIiIlRlc3QgbG9hZF9tb2R1bGUoKSBmb3IgYnVpbHQtaW4gbW9kdWxlcy4iIiIKIAotICAgIHZlcmlmaWNhdGlvbiA9IHsnX19uYW1lX18nOiAnZXJybm8nLCAnX19wYWNrYWdlX18nOiAnJywKLSAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyfQorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi52ZXJpZmljYXRpb24gPSB7J19fbmFtZV9fJzogJ2Vycm5vJywgJ19fcGFja2FnZV9fJzogJycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyfQogCiAgICAgZGVmIHZlcmlmeShzZWxmLCBtb2R1bGUpOgogICAgICAgICAiIiJWZXJpZnkgdGhhdCB0aGUgbW9kdWxlIG1hdGNoZXMgYWdhaW5zdCB3aGF0IGl0IHNob3VsZCBoYXZlLiIiIgpAQCAtMjMsOCArMjQsOCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnZXRhdHRyKG1vZHVsZSwgYXR0ciksIHZhbHVlKQogICAgICAgICBzZWxmLmFzc2VydEluKG1vZHVsZS5fX25hbWVfXywgc3lzLm1vZHVsZXMpCiAKLSAgICBsb2FkX21vZHVsZSA9IHN0YXRpY21ldGhvZChsYW1iZGEgbmFtZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5sb2FkX21vZHVsZShuYW1lKSkKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIubG9hZF9tb2R1bGUobmFtZSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgIyBDb21tb24gY2FzZS4KQEAgLTU1LDQ1ICs1Niw1MSBAQAogICAgIGRlZiB0ZXN0X2FscmVhZHlfaW1wb3J0ZWQoc2VsZik6CiAgICAgICAgICMgVXNpbmcgdGhlIG5hbWUgb2YgYSBtb2R1bGUgYWxyZWFkeSBpbXBvcnRlZCBidXQgbm90IGEgYnVpbHQtaW4gc2hvdWxkCiAgICAgICAgICMgc3RpbGwgZmFpbC4KLSAgICAgICAgYXNzZXJ0IGhhc2F0dHIoaW1wb3J0bGliLCAnX19maWxlX18nKSAgIyBOb3QgYSBidWlsdC1pbi4KKyAgICAgICAgbW9kdWxlX25hbWUgPSAnYnVpbHRpbl9yZWxvYWRfdGVzdCcKKyAgICAgICAgYXNzZXJ0IG1vZHVsZV9uYW1lIG5vdCBpbiBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobW9kdWxlX25hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2R1bGVfbmFtZSkKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZHVsZV9uYW1lXSA9IG1vZHVsZQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZF9tb2R1bGUoJ2ltcG9ydGxpYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsICdpbXBvcnRsaWInKQorICAgICAgICAgICAgc2VsZi5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgbW9kdWxlX25hbWUpCiAKIAotY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCisKKworY2xhc3MgSW5zcGVjdExvYWRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIEluc3BlY3RMb2FkZXIgbWV0aG9kcyBmb3IgQnVpbHRpbkltcG9ydGVyLiIiIgogCiAgICAgZGVmIHRlc3RfZ2V0X2NvZGUoc2VsZik6CiAgICAgICAgICMgVGhlcmUgaXMgbm8gY29kZSBvYmplY3QuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X2NvZGUoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHJlc3VsdCA9IHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5nZXRfY29kZShidWlsdGluX3V0aWwuTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0KQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKICAgICAgICAgIyBUaGVyZSBpcyBubyBzb3VyY2UuCi0gICAgICAgIHJlc3VsdCA9IG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIuZ2V0X3NvdXJjZShidWlsdGluX3V0aWwuTkFNRSkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmdldF9zb3VyY2UoYnVpbHRpbl91dGlsLk5BTUUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdCkKIAogICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgQ2Fubm90IGJlIGEgcGFja2FnZS4KLSAgICAgICAgcmVzdWx0ID0gbWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5pc19wYWNrYWdlKGJ1aWx0aW5fdXRpbC5OQU1FKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmlzX3BhY2thZ2UoYnVpbHRpbl91dGlsLk5BTUUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0KQogCiAgICAgZGVmIHRlc3Rfbm90X2J1aWx0aW4oc2VsZik6CiAgICAgICAgICMgTW9kdWxlcyBub3QgYnVpbHQtaW4gc2hvdWxkIHJhaXNlIEltcG9ydEVycm9yLgogICAgICAgICBmb3IgbWV0aF9uYW1lIGluICgnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsICdpc19wYWNrYWdlJyk6Ci0gICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKG1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIsIG1ldGhfbmFtZSkKKyAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtZXRoX25hbWUpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgbWV0aG9kKGJ1aWx0aW5fdXRpbC5CQURfTkFNRSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoYnVpbHRpbl91dGlsLkJBRF9OQU1FKQogCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoTG9hZGVyVGVzdHMsIEluc3BlY3RMb2FkZXJUZXN0cykKK0Zyb3plbl9JbnNwZWN0TG9hZGVyVGVzdHMsIFNvdXJjZV9JbnNwZWN0TG9hZGVyVGVzdHMgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgSW5zcGVjdExvYWRlclRlc3RzLAorICAgICAgICBtYWNoaW5lcnk9W2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnldKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi9fX2luaXRfXy5weQppbmRleCBjMDMzOTIzLi40YjE2ZWNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vX19pbml0X18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL19faW5pdF9fLnB5CkBAIC0xLDEzICsxLDUgQEAKLWZyb20gLi4gaW1wb3J0IHRlc3Rfc3VpdGUKLWltcG9ydCBvcy5wYXRoCi1pbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCBvcworZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGxvYWRfcGFja2FnZV90ZXN0cwogCi0KLWRlZiB0ZXN0X3N1aXRlKCk6Ci0gICAgZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgIHJldHVybiB0ZXN0X3N1aXRlKCdpbXBvcnRsaWIudGVzdC5leHRlbnNpb24nLCBkaXJlY3RvcnkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTIzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CmluZGV4IDc2YzUzZTQuLmJiMjUyOGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQpAQCAtMSwyMiArMSwyNyBAQAotaW1wb3J0IGltcAorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAorCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgZXh0X3V0aWwKIAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCiAKKworIyBYWFggZmluZF9zcGVjIHRlc3RzCisKK0B1bml0dGVzdC5za2lwSWYoZXh0X3V0aWwuRklMRU5BTUUgaXMgTm9uZSwgJ190ZXN0Y2FwaSBub3QgYXZhaWxhYmxlJykKIEB1dGlsLmNhc2VfaW5zZW5zaXRpdmVfdGVzdHMKLWNsYXNzIEV4dGVuc2lvbk1vZHVsZUNhc2VTZW5zaXRpdml0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRXh0ZW5zaW9uTW9kdWxlQ2FzZVNlbnNpdGl2aXR5VGVzdDoKIAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmKToKICAgICAgICAgZ29vZF9uYW1lID0gZXh0X3V0aWwuTkFNRQogICAgICAgICBiYWRfbmFtZSA9IGdvb2RfbmFtZS51cHBlcigpCiAgICAgICAgIGFzc2VydCBnb29kX25hbWUgIT0gYmFkX25hbWUKLSAgICAgICAgZmluZGVyID0gX2Jvb3RzdHJhcC5GaWxlRmluZGVyKGV4dF91dGlsLlBBVEgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9ib290c3RyYXAuRXh0ZW5zaW9uRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2Jvb3RzdHJhcC5FWFRFTlNJT05fU1VGRklYRVMpKQorICAgICAgICBmaW5kZXIgPSBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKGV4dF91dGlsLlBBVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVMpKQogICAgICAgICByZXR1cm4gZmluZGVyLmZpbmRfbW9kdWxlKGJhZF9uYW1lKQogCiAgICAgZGVmIHRlc3RfY2FzZV9zZW5zaXRpdmUoc2VsZik6CkBAIC0zNywxNCArNDIsMTAgQEAKICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuZmluZF9tb2R1bGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobG9hZGVyLCAnbG9hZF9tb2R1bGUnKSkKIAotCi0KLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGlmIGV4dF91dGlsLkZJTEVOQU1FIGlzIE5vbmU6Ci0gICAgICAgIHJldHVybgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEV4dGVuc2lvbk1vZHVsZUNhc2VTZW5zaXRpdml0eVRlc3QpCitGcm96ZW5fRXh0ZW5zaW9uQ2FzZVNlbnNpdGl2aXR5LCBTb3VyY2VfRXh0ZW5zaW9uQ2FzZVNlbnNpdGl2aXR5ID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEV4dGVuc2lvbk1vZHVsZUNhc2VTZW5zaXRpdml0eVRlc3QsCisgICAgICAgIG1hY2hpbmVyeT1bZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeV0pCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfZmluZGVyLnB5CmluZGV4IDM3ZjY3NzIuLjk5MGYyOWMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9maW5kZXIucHkKQEAgLTEsMTggKzEsMjUgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IGFiYworZnJvbSAuLiBpbXBvcnQgdXRpbCBhcyB0ZXN0X3V0aWwKIGZyb20gLiBpbXBvcnQgdXRpbAogCittYWNoaW5lcnkgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCisKKyMgWFhYIGZpbmRfc3BlYyB0ZXN0cwogCiBjbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCB0aGUgZmluZGVyIGZvciBleHRlbnNpb24gbW9kdWxlcy4iIiIKIAogICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIGltcG9ydGVyID0gbWFjaGluZXJ5LkZpbGVGaW5kZXIodXRpbC5QQVRILAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUykpCi0gICAgICAgIHJldHVybiBpbXBvcnRlci5maW5kX21vZHVsZShmdWxsbmFtZSkKKyAgICAgICAgaW1wb3J0ZXIgPSBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKHV0aWwuUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVMpKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBpbXBvcnRlci5maW5kX21vZHVsZShmdWxsbmFtZSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuZmluZF9tb2R1bGUodXRpbC5OQU1FKSkKQEAgLTI5LDExICszNiw5IEBACiAgICAgZGVmIHRlc3RfZmFpbHVyZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5maW5kX21vZHVsZSgnYXNkZmprbDsnKSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKK0Zyb3plbl9GaW5kZXJUZXN0cywgU291cmNlX0ZpbmRlclRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHMsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfbG9hZGVyLnB5CmluZGV4IGU3OTA2NzUuLmZkOWFiZjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9sb2FkZXIucHkKQEAgLTEsMTAgKzEsMTIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBleHRfdXRpbAogZnJvbSAuLiBpbXBvcnQgYWJjCiBmcm9tIC4uIGltcG9ydCB1dGlsCiAKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCiAKQEAgLTEzLDggKzE1LDggQEAKICAgICAiIiJUZXN0IGxvYWRfbW9kdWxlKCkgZm9yIGV4dGVuc2lvbiBtb2R1bGVzLiIiIgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLmxvYWRlciA9IG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dF91dGlsLk5BTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQorICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIoZXh0X3V0aWwuTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dF91dGlsLkZJTEVQQVRIKQogCiAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKICAgICAgICAgcmV0dXJuIHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQpAQCAtMjYsNiArMjgsMTUgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CiAgICAgICAgICAgICBzZWxmLmxvYWRfbW9kdWxlKCdYWFgnKQogCisgICAgZGVmIHRlc3RfZXF1YWxpdHkoc2VsZik6CisgICAgICAgIG90aGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcihleHRfdXRpbC5OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0X3V0aWwuRklMRVBBVEgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkZXIsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSBzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKCdfJyArIGV4dF91dGlsLk5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRfdXRpbC5GSUxFUEFUSCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLmxvYWRlciwgb3RoZXIpCiAKICAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKGV4dF91dGlsLk5BTUUpOgpAQCAtMzYsNyArNDcsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXh0X3V0aWwuTkFNRSwgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLl9fbG9hZGVyX18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkV4dGVuc2lvbkZpbGVMb2FkZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcikKIAogICAgICMgTm8gZXh0ZW5zaW9uIG1vZHVsZSBhcyBfX2luaXRfXyBhdmFpbGFibGUgZm9yIHRlc3RpbmcuCiAgICAgdGVzdF9wYWNrYWdlID0gTm9uZQpAQCAtNjEsMTYgKzcyLDE1IEBACiAKICAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2UoZXh0X3V0aWwuTkFNRSkpCi0gICAgICAgIGZvciBzdWZmaXggaW4gbWFjaGluZXJ5LkVYVEVOU0lPTl9TVUZGSVhFUzoKKyAgICAgICAgZm9yIHN1ZmZpeCBpbiBzZWxmLm1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVM6CiAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdzb21lJywgJ3BhdGgnLCAncGtnJywgJ19faW5pdF9fJyArIHN1ZmZpeCkKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKCdwa2cnLCBwYXRoKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlcigncGtnJywgcGF0aCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsb2FkZXIuaXNfcGFja2FnZSgncGtnJykpCiAKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIExvYWRlclRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChMb2FkZXJUZXN0cykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdGVzdF9wYXRoX2hvb2sucHkKaW5kZXggMWQ5NjlhMS4uNDlkNjczNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZXh0ZW5zaW9uL3Rlc3RfcGF0aF9ob29rLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi90ZXN0X3BhdGhfaG9vay5weQpAQCAtMSwzMiArMSwzMiBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQorZnJvbSAuLiBpbXBvcnQgdXRpbCBhcyB0ZXN0X3V0aWwKIGZyb20gLiBpbXBvcnQgdXRpbAogCittYWNoaW5lcnkgPSB0ZXN0X3V0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgUGF0aEhvb2tUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQYXRoSG9va1Rlc3RzOgogCiAgICAgIiIiVGVzdCB0aGUgcGF0aCBob29rIGZvciBleHRlbnNpb24gbW9kdWxlcy4iIiIKICAgICAjIFhYWCBTaG91bGQgaXQgb25seSBzdWNjZWVkIGZvciBwcmUtZXhpc3RpbmcgZGlyZWN0b3JpZXM/CiAgICAgIyBYWFggU2hvdWxkIGl0IG9ubHkgd29yayBmb3IgZGlyZWN0b3JpZXMgY29udGFpbmluZyBhbiBleHRlbnNpb24gbW9kdWxlPwogCiAgICAgZGVmIGhvb2soc2VsZiwgZW50cnkpOgotICAgICAgICByZXR1cm4gbWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKChtYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlciwKLSAgICAgICAgICAgIG1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVMpKShlbnRyeSkKKyAgICAgICAgcmV0dXJuIHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKAorICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5FWFRFTlNJT05fU1VGRklYRVMpKShlbnRyeSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgICMgUGF0aCBob29rIHNob3VsZCBoYW5kbGUgYSBkaXJlY3Rvcnkgd2hlcmUgYSBrbm93biBleHRlbnNpb24gbW9kdWxlCiAgICAgICAgICMgZXhpc3RzLgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLmhvb2sodXRpbC5QQVRIKSwgJ2ZpbmRfbW9kdWxlJykpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUGF0aEhvb2tUZXN0cykKK0Zyb3plbl9QYXRoSG9va3NUZXN0cywgU291cmNlX1BhdGhIb29rc1Rlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgUGF0aEhvb2tUZXN0cywgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9leHRlbnNpb24vdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi91dGlsLnB5CmluZGV4IGEyNjZkZDkuLjhkMDg5ZjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2V4dGVuc2lvbi91dGlsLnB5CkBAIC0xLDQgKzEsMyBAQAotaW1wb3J0IGltcAogZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vX19pbml0X18ucHkKaW5kZXggOWVmMTAzYi4uNGIxNmVjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi9fX2luaXRfXy5weQpAQCAtMSwxMyArMSw1IEBACi1mcm9tIC4uIGltcG9ydCB0ZXN0X3N1aXRlCi1pbXBvcnQgb3MucGF0aAotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKIAotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICByZXR1cm4gdGVzdF9zdWl0ZSgnaW1wb3J0bGliLnRlc3QuZnJvemVuJywgZGlyZWN0b3J5KQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdCh0ZXN0X3N1aXRlKCkpCitkZWYgbG9hZF90ZXN0cygqYXJncyk6CisgICAgcmV0dXJuIGxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGEyM2EyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSAuIGltcG9ydCBsb2FkX3Rlc3RzCitpbXBvcnQgdW5pdHRlc3QKKwordW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9maW5kZXIucHkKaW5kZXggZjBhYmUwZS4uZjlmOTdmMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfZmluZGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2ZpbmRlci5weQpAQCAtMSwxNSArMSw1MiBAQAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQogZnJvbSAuLiBpbXBvcnQgYWJjCitmcm9tIC4uIGltcG9ydCB1dGlsCisKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCiAKIGltcG9ydCB1bml0dGVzdAogCiAKK2NsYXNzIEZpbmRTcGVjVGVzdHMoYWJjLkZpbmRlclRlc3RzKToKKworICAgICIiIlRlc3QgZmluZGluZyBmcm96ZW4gbW9kdWxlcy4iIiIKKworICAgIGRlZiBmaW5kKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyCisgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9zcGVjKG5hbWUsIHBhdGgpCisKKyAgICBkZWYgdGVzdF9tb2R1bGUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnX19oZWxsb19fJworICAgICAgICBzcGVjID0gc2VsZi5maW5kKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sICdmcm96ZW4nKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZCgnX19waGVsbG9fXycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHNwZWMpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfaW5fcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYuZmluZCgnX19waGVsbG9fXy5zcGFtJywgWydfX3BoZWxsb19fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHNwZWMpCisKKyAgICAjIE5vIGZyb3plbiBwYWNrYWdlIHdpdGhpbiBhbm90aGVyIHBhY2thZ2UgdG8gdGVzdCB3aXRoLgorICAgIHRlc3RfcGFja2FnZV9pbl9wYWNrYWdlID0gTm9uZQorCisgICAgIyBObyBlYXN5IHdheSB0byB0ZXN0LgorICAgIHRlc3RfcGFja2FnZV9vdmVyX21vZHVsZSA9IE5vbmUKKworICAgIGRlZiB0ZXN0X2ZhaWx1cmUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLmZpbmQoJzxub3QgcmVhbD4nKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzcGVjKQorCitGcm96ZW5fRmluZFNwZWNUZXN0cywgU291cmNlX0ZpbmRTcGVjVGVzdHMgPSB1dGlsLnRlc3RfYm90aChGaW5kU3BlY1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworCiBjbGFzcyBGaW5kZXJUZXN0cyhhYmMuRmluZGVyVGVzdHMpOgogCiAgICAgIiIiVGVzdCBmaW5kaW5nIGZyb3plbiBtb2R1bGVzLiIiIgogCiAgICAgZGVmIGZpbmQoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgZmluZGVyID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyCiAgICAgICAgIHJldHVybiBmaW5kZXIuZmluZF9tb2R1bGUobmFtZSwgcGF0aCkKIAogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKQEAgLTM1LDExICs3Miw5IEBACiAgICAgICAgIGxvYWRlciA9IHNlbGYuZmluZCgnPG5vdCByZWFsPicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvYWRlcikKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChGaW5kZXJUZXN0cykKK0Zyb3plbl9GaW5kZXJUZXN0cywgU291cmNlX0ZpbmRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoRmluZGVyVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvZnJvemVuL3Rlc3RfbG9hZGVyLnB5CmluZGV4IGYzYThiZjYuLjdjMDE0NjQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2Zyb3plbi90ZXN0X2xvYWRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9mcm96ZW4vdGVzdF9sb2FkZXIucHkKQEAgLTEsMTggKzEsMTA0IEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5Ci1pbXBvcnQgaW1wCi1pbXBvcnQgdW5pdHRlc3QKIGZyb20gLi4gaW1wb3J0IGFiYwogZnJvbSAuLiBpbXBvcnQgdXRpbAorCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCisKK2ltcG9ydCBzeXMKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBjYXB0dXJlZF9zdGRvdXQKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKKworCitjbGFzcyBFeGVjTW9kdWxlVGVzdHMoYWJjLkxvYWRlclRlc3RzKToKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKAorICAgICAgICAgICAgICAgICAgICBuYW1lLCBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlciwgb3JpZ2luPSdmcm96ZW4nLAorICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPXNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmlzX3BhY2thZ2UobmFtZSkpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBhc3NlcnQgbm90IGhhc2F0dHIobW9kdWxlLCAnaW5pdGlhbGl6ZWQnKQorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1vZHVsZS5pbml0aWFsaXplZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fc3BlY19fJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3NwZWNfXy5vcmlnaW4sICdmcm96ZW4nKQorICAgICAgICAgICAgcmV0dXJuIG1vZHVsZSwgc3Rkb3V0LmdldHZhbHVlKCkKKworICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdfX2hlbGxvX18nCisgICAgICAgIG1vZHVsZSwgb3V0cHV0ID0gc2VsZi5leGVjX21vZHVsZShuYW1lKQorICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiBuYW1lfQorICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsICdIZWxsbyB3b3JsZCFcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fc3BlY19fJykpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19fcGhlbGxvX18nCisgICAgICAgIG1vZHVsZSwgb3V0cHV0ID0gc2VsZi5leGVjX21vZHVsZShuYW1lKQorICAgICAgICBjaGVjayA9IHsnX19uYW1lX18nOiBuYW1lfQorICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKKyAgICAgICAgICAgIGF0dHJfdmFsdWUgPSBnZXRhdHRyKG1vZHVsZSwgYXR0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cl92YWx1ZSwgdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAnZm9yIHtuYW1lfS57YXR0cn0sIHtnaXZlbiFyfSAhPSB7ZXhwZWN0ZWQhcn0nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9bmFtZSwgYXR0cj1hdHRyLCBnaXZlbj1hdHRyX3ZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ9dmFsdWUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgJ0hlbGxvIHdvcmxkIVxuJykKKworICAgIGRlZiB0ZXN0X2xhY2tpbmdfcGFyZW50KHNlbGYpOgorICAgICAgICBuYW1lID0gJ19fcGhlbGxvX18uc3BhbScKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19fcGhlbGxvX18nKToKKyAgICAgICAgICAgIG1vZHVsZSwgb3V0cHV0ID0gc2VsZi5leGVjX21vZHVsZShuYW1lKQorICAgICAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogbmFtZX0KKyAgICAgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgorICAgICAgICAgICAgICAgIGF0dHJfdmFsdWUgPSBnZXRhdHRyKG1vZHVsZSwgYXR0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGF0dHJfdmFsdWUsIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2ZvciB7bmFtZX0ue2F0dHJ9LCB7Z2l2ZW59ICE9IHtleHBlY3RlZCFyfScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1uYW1lLCBhdHRyPWF0dHIsIGdpdmVuPWF0dHJfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD12YWx1ZSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgJ0hlbGxvIHdvcmxkIVxuJykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcmVwcl9zdHIgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5tb2R1bGVfcmVwcihtb2R1bGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcl9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIjxtb2R1bGUgJ19faGVsbG9fXycgKGZyb3plbik+IikKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX2luZGlyZWN0KHNlbGYpOgorICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKKyAgICAgICAgbW9kdWxlLCBvdXRwdXQgPSBzZWxmLmV4ZWNfbW9kdWxlKG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtb2R1bGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICI8bW9kdWxlICdfX2hlbGxvX18nIChmcm96ZW4pPiIpCisKKyAgICAjIE5vIHdheSB0byB0cmlnZ2VyIGFuIGVycm9yIGluIGEgZnJvemVuIG1vZHVsZS4KKyAgICB0ZXN0X3N0YXRlX2FmdGVyX2ZhaWx1cmUgPSBOb25lCisKKyAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgorICAgICAgICBhc3NlcnQgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ19ub3RfcmVhbCcpIGlzIE5vbmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmV4ZWNfbW9kdWxlKCdfbm90X3JlYWwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnX25vdF9yZWFsJykKKworRnJvemVuX0V4ZWNNb2R1bGVUZXN0cywgU291cmNlX0V4ZWNNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKEV4ZWNNb2R1bGVUZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKwogCiBjbGFzcyBMb2FkZXJUZXN0cyhhYmMuTG9hZGVyVGVzdHMpOgogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnX19oZWxsb19fJyksIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKLSAgICAgICAgICAgIG1vZHVsZSA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfX2hlbGxvX18nLAogICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnJywKLSAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihtb2R1bGUsIGF0dHIpLCB2YWx1ZSkKQEAgLTIxLDExICsxMDcsMTMgQEAKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX3BoZWxsb19fJyksICBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19fcGhlbGxvX18nKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fJykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfX3BoZWxsb19fJywKICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICdfX3BoZWxsb19fJywKLSAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFsnX19waGVsbG9fXyddLAotICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbXSwKKyAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgYXR0ciwgdmFsdWUgaW4gY2hlY2suaXRlbXMoKToKICAgICAgICAgICAgICAgICBhdHRyX3ZhbHVlID0gZ2V0YXR0cihtb2R1bGUsIGF0dHIpCkBAIC0zOCwxMCArMTI2LDEyIEBACiAgICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX3BoZWxsb19fJywgJ19fcGhlbGxvX18uc3BhbScpLCBcCiAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgotICAgICAgICAgICAgbW9kdWxlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fLnNwYW0nKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX3BoZWxsb19fLnNwYW0nKQogICAgICAgICAgICAgY2hlY2sgPSB7J19fbmFtZV9fJzogJ19fcGhlbGxvX18uc3BhbScsCiAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICdfX3BoZWxsb19fJywKLSAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nOiBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCisgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJzogc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvciBhdHRyLCB2YWx1ZSBpbiBjaGVjay5pdGVtcygpOgogICAgICAgICAgICAgICAgIGF0dHJfdmFsdWUgPSBnZXRhdHRyKG1vZHVsZSwgYXR0cikKQEAgLTUzLDI5ICsxNDMsNDMgQEAKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXVzZShzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19faGVsbG9fXycpLCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBtb2R1bGUxID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQotICAgICAgICAgICAgbW9kdWxlMiA9IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUxID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCisgICAgICAgICAgICAgICAgbW9kdWxlMiA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUxLCBtb2R1bGUyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZ2V0dmFsdWUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0hlbGxvIHdvcmxkIVxuSGVsbG8gd29ybGQhXG4nKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHIoc2VsZik6CiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfX2hlbGxvX18nKSwgY2FwdHVyZWRfc3Rkb3V0KCk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19faGVsbG9fXycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobW9kdWxlKSwKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX19oZWxsb19fJykKKyAgICAgICAgICAgICAgICByZXByX3N0ciA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLm1vZHVsZV9yZXByKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcl9zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8bW9kdWxlICdfX2hlbGxvX18nIChmcm96ZW4pPiIpCiAKKyAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl9pbmRpcmVjdChzZWxmKToKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ19faGVsbG9fXycpLCBjYXB0dXJlZF9zdGRvdXQoKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmxvYWRfbW9kdWxlKCdfX2hlbGxvX18nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobW9kdWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiPG1vZHVsZSAnX19oZWxsb19fJyAoZnJvemVuKT4iKQorCiAgICAgIyBObyB3YXkgdG8gdHJpZ2dlciBhbiBlcnJvciBpbiBhIGZyb3plbiBtb2R1bGUuCiAgICAgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlID0gTm9uZQogCiAgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgYXNzZXJ0IG1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZSgnX25vdF9yZWFsJykgaXMgTm9uZQorICAgICAgICBhc3NlcnQgc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZmluZF9tb2R1bGUoJ19ub3RfcmVhbCcpIGlzIE5vbmUKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIubG9hZF9tb2R1bGUoJ19ub3RfcmVhbCcpCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5sb2FkX21vZHVsZSgnX25vdF9yZWFsJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ19ub3RfcmVhbCcpCiAKK0Zyb3plbl9Mb2FkZXJUZXN0cywgU291cmNlX0xvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoTG9hZGVyVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeT1tYWNoaW5lcnkpCiAKLWNsYXNzIEluc3BlY3RMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIEluc3BlY3RMb2FkZXJUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciB0aGUgSW5zcGVjdExvYWRlciBtZXRob2RzIGZvciBGcm96ZW5JbXBvcnRlci4iIiIKIApAQCAtODMsMTUgKzE4NywxNSBAQAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSBjb2RlIG9iamVjdCBpcyBnb29kLgogICAgICAgICBuYW1lID0gJ19faGVsbG9fXycKICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6Ci0gICAgICAgICAgICBjb2RlID0gbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9jb2RlKG5hbWUpCi0gICAgICAgICAgICBtb2QgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICAgICAgY29kZSA9IHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmdldF9jb2RlKG5hbWUpCisgICAgICAgICAgICBtb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgICAgICBleGVjKGNvZGUsIG1vZC5fX2RpY3RfXykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZCwgJ2luaXRpYWxpemVkJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5nZXR2YWx1ZSgpLCAnSGVsbG8gd29ybGQhXG4nKQogCiAgICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKICAgICAgICAgIyBTaG91bGQgYWx3YXlzIHJldHVybiBOb25lLgotICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZ2V0X3NvdXJjZSgnX19oZWxsb19fJykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuZ2V0X3NvdXJjZSgnX19oZWxsb19fJykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmVzdWx0KQogCiAgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKQEAgLTk5LDIyICsyMDMsMjAgQEAKICAgICAgICAgdGVzdF9mb3IgPSAoKCdfX2hlbGxvX18nLCBGYWxzZSksICgnX19waGVsbG9fXycsIFRydWUpLAogICAgICAgICAgICAgICAgICAgICAoJ19fcGhlbGxvX18uc3BhbScsIEZhbHNlKSkKICAgICAgICAgZm9yIG5hbWUsIGlzX3BhY2thZ2UgaW4gdGVzdF9mb3I6Ci0gICAgICAgICAgICByZXN1bHQgPSBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuaXNfcGFja2FnZShuYW1lKQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5tYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIuaXNfcGFja2FnZShuYW1lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChib29sKHJlc3VsdCksIGlzX3BhY2thZ2UpCiAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFJhaXNlIEltcG9ydEVycm9yIGZvciBtb2R1bGVzIHRoYXQgYXJlIG5vdCBmcm96ZW4uCiAgICAgICAgIGZvciBtZXRoX25hbWUgaW4gKCdnZXRfY29kZScsICdnZXRfc291cmNlJywgJ2lzX3BhY2thZ2UnKToKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIobWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtZXRoX25hbWUpCisgICAgICAgICAgICBtZXRob2QgPSBnZXRhdHRyKHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLCBtZXRoX25hbWUpCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKICAgICAgICAgICAgICAgICBtZXRob2QoJ2ltcG9ydGxpYicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnaW1wb3J0bGliJykKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChMb2FkZXJUZXN0cywgSW5zcGVjdExvYWRlclRlc3RzKQorRnJvemVuX0lMVGVzdHMsIFNvdXJjZV9JTFRlc3RzID0gdXRpbC50ZXN0X2JvdGgoSW5zcGVjdExvYWRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy9fX2luaXRfXy5weQppbmRleCAzNjZlNTMxLi40YjE2ZWNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vX19pbml0X18ucHkKQEAgLTEsMTMgKzEsNSBAQAotZnJvbSAuLiBpbXBvcnQgdGVzdF9zdWl0ZQotaW1wb3J0IG9zLnBhdGgKLWltcG9ydCB1bml0dGVzdAoraW1wb3J0IG9zCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbG9hZF9wYWNrYWdlX3Rlc3RzCiAKLQotZGVmIHRlc3Rfc3VpdGUoKToKLSAgICBkaXJlY3RvcnkgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCi0gICAgcmV0dXJuIHRlc3Rfc3VpdGUoJ2ltcG9ydGxpYi50ZXN0LmltcG9ydF8nLCBkaXJlY3RvcnkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy9fX21haW5fXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBhMjNhMgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fbG9hZGVyX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRmODAxMAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX2xvYWRlcl9fLnB5CkBAIC0wLDAgKzEsNzAgQEAKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKK2ltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gLi4gaW1wb3J0IHV0aWwKK2Zyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAorCisKK2NsYXNzIFNwZWNMb2FkZXJNb2NrOgorCisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgIHJldHVybiBtYWNoaW5lcnkuTW9kdWxlU3BlYyhmdWxsbmFtZSwgc2VsZikKKworICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICBwYXNzCisKKworY2xhc3MgU3BlY0xvYWRlckF0dHJpYnV0ZVRlc3RzOgorCisgICAgZGVmIHRlc3RfX19sb2FkZXJfXyhzZWxmKToKKyAgICAgICAgbG9hZGVyID0gU3BlY0xvYWRlck1vY2soKQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnYmxhaCcpLCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2xvYWRlcl0pOgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX2xvYWRlcl9fKQorCitGcm96ZW5fU3BlY1Rlc3RzLCBTb3VyY2VfU3BlY1Rlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNwZWNMb2FkZXJBdHRyaWJ1dGVUZXN0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2NsYXNzIExvYWRlck1vY2s6CisKKyAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOgorICAgICAgICBzeXMubW9kdWxlc1tmdWxsbmFtZV0gPSBzZWxmLm1vZHVsZQorICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworCitjbGFzcyBMb2FkZXJBdHRyaWJ1dGVUZXN0czoKKworICAgIGRlZiB0ZXN0X19fbG9hZGVyX19fbWlzc2luZyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGxvYWRlciA9IExvYWRlck1vY2soKQorICAgICAgICBsb2FkZXIubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdibGFoJyksIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbG9hZGVyXSk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ2JsYWgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fbG9hZGVyX18pCisKKyAgICBkZWYgdGVzdF9fX2xvYWRlcl9fX2lzX05vbmUoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IE5vbmUKKyAgICAgICAgbG9hZGVyID0gTG9hZGVyTW9jaygpCisgICAgICAgIGxvYWRlci5tb2R1bGUgPSBtb2R1bGUKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoJ2JsYWgnKSwgdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtsb2FkZXJdKToKKyAgICAgICAgICAgIHJldHVybmVkX21vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBtb2R1bGUuX19sb2FkZXJfXykKKworCitGcm96ZW5fVGVzdHMsIFNvdXJjZV9UZXN0cyA9IHV0aWwudGVzdF9ib3RoKExvYWRlckF0dHJpYnV0ZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9fX3BhY2thZ2VfXy5weQppbmRleCA3ODNjZGUxLi4yZTE5NzI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfX19wYWNrYWdlX18ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X19fcGFja2FnZV9fLnB5CkBAIC05LDcgKzksNyBAQAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCiAKIAotY2xhc3MgVXNpbmdfX3BhY2thZ2VfXyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBVc2luZ19fcGFja2FnZV9fOgogCiAgICAgIiIiVXNlIG9mIF9fcGFja2FnZV9fIHN1cGVyY2VkZXMgdGhlIHVzZSBvZiBfX25hbWVfXy9fX3BhdGhfXyB0byBjYWxjdWxhdGUKICAgICB3aGF0IHBhY2thZ2UgYSBtb2R1bGUgYmVsb25ncyB0by4gVGhlIGJhc2ljIGFsZ29yaXRobSBpcyBbX19wYWNrYWdlX19dOjoKQEAgLTM2LDEwICszNiwxMCBAQAogCiAgICAgZGVmIHRlc3RfdXNpbmdfX19wYWNrYWdlX18oc2VsZik6CiAgICAgICAgICMgW19fcGFja2FnZV9fXQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLmZha2UnKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5mYWtlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cuZmFrZScpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnJywKKyAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5mYWtlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbHM9eydfX3BhY2thZ2VfXyc6ICdwa2cuZmFrZSd9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQpAQCAtNDksMTAgKzQ5LDEwIEBACiAgICAgICAgIGdsb2JhbHNfID0geydfX25hbWVfXyc6ICdwa2cuZmFrZScsICdfX3BhdGhfXyc6IFtdfQogICAgICAgICBpZiBwYWNrYWdlX2FzX05vbmU6CiAgICAgICAgICAgICBnbG9iYWxzX1snX19wYWNrYWdlX18nXSA9IE5vbmUKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5mYWtlJykgYXMgaW1wb3J0ZXI6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuZmFrZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLmZha2UnKQotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbHM9IGdsb2JhbHNfLAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLmZha2UnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFscz0gZ2xvYmFsc18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKIApAQCAtNjMsMTYgKzYzLDI3IEBACiAgICAgZGVmIHRlc3RfYmFkX19wYWNrYWdlX18oc2VsZik6CiAgICAgICAgIGdsb2JhbHMgPSB7J19fcGFja2FnZV9fJzogJzxub3QgcmVhbD4nfQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbHMsIHt9LCBbJ3JlbGltcG9ydCddLCAxKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxzLCB7fSwgWydyZWxpbXBvcnQnXSwgMSkKIAogICAgIGRlZiB0ZXN0X2J1bmtfX3BhY2thZ2VfXyhzZWxmKToKICAgICAgICAgZ2xvYmFscyA9IHsnX19wYWNrYWdlX18nOiA0Mn0KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnJywgZ2xvYmFscywge30sIFsncmVsaW1wb3J0J10sIDEpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbHMsIHt9LCBbJ3JlbGltcG9ydCddLCAxKQorCitjbGFzcyBVc2luZ19fcGFja2FnZV9fUEVQMzAyKFVzaW5nX19wYWNrYWdlX18pOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19tb2R1bGVzCisKK0Zyb3plbl9Vc2luZ1BhY2thZ2VQRVAzMDIsIFNvdXJjZV9Vc2luZ1BhY2thZ2VQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMiwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCitjbGFzcyBVc2luZ19fcGFja2FnZV9fUEVQMzAyKFVzaW5nX19wYWNrYWdlX18pOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19zcGVjCisKK0Zyb3plbl9Vc2luZ1BhY2thZ2VQRVA0NTEsIFNvdXJjZV9Vc2luZ1BhY2thZ2VQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgVXNpbmdfX3BhY2thZ2VfX1BFUDMwMiwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKLUBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQotY2xhc3MgU2V0dGluZ19fcGFja2FnZV9fKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFNldHRpbmdfX3BhY2thZ2VfXzoKIAogICAgICIiIkJlY2F1c2UgX19wYWNrYWdlX18gaXMgYSBuZXcgZmVhdHVyZSwgaXQgaXMgbm90IGFsd2F5cyBzZXQgYnkgYSBsb2FkZXIuCiAgICAgSW1wb3J0IHdpbGwgc2V0IGl0IGFzIG5lZWRlZCB0byBoZWxwIHdpdGggdGhlIHRyYW5zaXRpb24gdG8gcmVseWluZyBvbgpAQCAtODQsMzYgKzk1LDM5IEBACiAKICAgICAiIiIKIAorICAgIF9faW1wb3J0X18gPSBpbXBvcnRfdXRpbC5fX2ltcG9ydF9fWzFdCisKICAgICAjIFt0b3AtbGV2ZWxdCiAgICAgZGVmIHRlc3RfdG9wX2xldmVsKHNlbGYpOgotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnKSBhcyBtb2NrOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBkZWwgbW9ja1sndG9wX2xldmVsJ10uX19wYWNrYWdlX18KLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygndG9wX2xldmVsJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgJycpCiAKICAgICAjIFtwYWNrYWdlXQogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6Ci0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycpIGFzIG1vY2s6CisgICAgICAgIHdpdGggc2VsZi5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIGRlbCBtb2NrWydwa2cnXS5fX3BhY2thZ2VfXwotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCAncGtnJykKIAogICAgICMgW3N1Ym1vZHVsZV0KICAgICBkZWYgdGVzdF9zdWJtb2R1bGUoc2VsZik6Ci0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kJykgYXMgbW9jazoKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2QnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICBkZWwgbW9ja1sncGtnLm1vZCddLl9fcGFja2FnZV9fCi0gICAgICAgICAgICAgICAgcGtnID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZCcpCisgICAgICAgICAgICAgICAgcGtnID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kJykKICAgICAgICAgICAgICAgICBtb2R1bGUgPSBnZXRhdHRyKHBrZywgJ21vZCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sICdwa2cnKQogCitjbGFzcyBTZXR0aW5nX19wYWNrYWdlX19QRVAzMDIoU2V0dGluZ19fcGFja2FnZV9fLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9ja19tb2R1bGVzID0gdXRpbC5tb2NrX21vZHVsZXMKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoVXNpbmdfX3BhY2thZ2VfXywgU2V0dGluZ19fcGFja2FnZV9fKQorY2xhc3MgU2V0dGluZ19fcGFja2FnZV9fUEVQNDUxKFNldHRpbmdfX3BhY2thZ2VfXywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19zcGVjCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9hcGkucHkKaW5kZXggM2Q0Y2Q5NC4uNDM5YzEwNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2FwaS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfYXBpLnB5CkBAIC0xLDIzICsxLDQxIEBACi1mcm9tIC4uIGltcG9ydCB1dGlsIGFzIGltcG9ydGxpYl90ZXN0X3V0aWwKLWZyb20gLiBpbXBvcnQgdXRpbAotaW1wb3J0IGltcAorZnJvbSAuLiBpbXBvcnQgdXRpbAorZnJvbSAuIGltcG9ydCB1dGlsIGFzIGltcG9ydF91dGlsCisKK2Zyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiAKK1BLR19OQU1FID0gJ2ZpbmUnCitTVUJNT0RfTkFNRSA9ICdmaW5lLmJvZ3VzJwogCi1jbGFzcyBCYWRMb2FkZXJGaW5kZXI6Ci0gICAgYmFkID0gJ2ZpbmUuYm9ndXMnCisKK2NsYXNzIEJhZFNwZWNGaW5kZXJMb2FkZXI6CiAgICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGZpbmRfbW9kdWxlKGNscywgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICBpZiBmdWxsbmFtZSA9PSBjbHMuYmFkOgotICAgICAgICAgICAgcmV0dXJuIGNscwotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBsb2FkX21vZHVsZShjbHMsIGZ1bGxuYW1lKToKLSAgICAgICAgaWYgZnVsbG5hbWUgPT0gY2xzLmJhZDoKKyAgICBkZWYgZmluZF9zcGVjKGNscywgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgorICAgICAgICBpZiBmdWxsbmFtZSA9PSBTVUJNT0RfTkFNRToKKyAgICAgICAgICAgIHNwZWMgPSBtYWNoaW5lcnkuTW9kdWxlU3BlYyhmdWxsbmFtZSwgY2xzKQorICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZXhlY19tb2R1bGUobW9kdWxlKToKKyAgICAgICAgaWYgbW9kdWxlLl9fbmFtZV9fID09IFNVQk1PRF9OQU1FOgogICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ0kgY2Fubm90IGJlIGxvYWRlZCEnKQogCiAKLWNsYXNzIEFQSVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQmFkTG9hZGVyRmluZGVyOgorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBmaW5kX21vZHVsZShjbHMsIGZ1bGxuYW1lLCBwYXRoKToKKyAgICAgICAgaWYgZnVsbG5hbWUgPT0gU1VCTU9EX05BTUU6CisgICAgICAgICAgICByZXR1cm4gY2xzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbG9hZF9tb2R1bGUoY2xzLCBmdWxsbmFtZSk6CisgICAgICAgIGlmIGZ1bGxuYW1lID09IFNVQk1PRF9OQU1FOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IoJ0kgY2Fubm90IGJlIGxvYWRlZCEnKQorCisKK2NsYXNzIEFQSVRlc3Q6CiAKICAgICAiIiJUZXN0IEFQSS1zcGVjaWZpYyBkZXRhaWxzIGZvciBfX2ltcG9ydF9fIChlLmcuIHJhaXNpbmcgdGhlIHJpZ2h0CiAgICAgZXhjZXB0aW9uIHdoZW4gcGFzc2luZyBpbiBhbiBpbnQgZm9yIHRoZSBtb2R1bGUgbmFtZSkuIiIiCkBAIC0yNSw0MyArNDMsNTIgQEAKICAgICBkZWYgdGVzdF9uYW1lX3JlcXVpcmVzX3JwYXJpdGlvbihzZWxmKToKICAgICAgICAgIyBSYWlzZSBUeXBlRXJyb3IgaWYgYSBub24tc3RyaW5nIGlzIHBhc3NlZCBpbiBmb3IgdGhlIG1vZHVsZSBuYW1lLgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICB1dGlsLmltcG9ydF8oNDIpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oNDIpCiAKICAgICBkZWYgdGVzdF9uZWdhdGl2ZV9sZXZlbChzZWxmKToKICAgICAgICAgIyBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gYSBuZWdhdGl2ZSBsZXZlbCBpcyBzcGVjaWZpZWQuCiAgICAgICAgICMgUEVQIDMyOCBkaWQgYXdheSB3aXRoIHN5cy5tb2R1bGUgTm9uZSBlbnRyaWVzIGFuZCB0aGUgYW1iaWd1aXR5IG9mCiAgICAgICAgICMgYWJzb2x1dGUvcmVsYXRpdmUgaW1wb3J0cy4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIHV0aWwuaW1wb3J0Xygnb3MnLCBnbG9iYWxzKCksIGxldmVsPS0xKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdvcycsIGdsb2JhbHMoKSwgbGV2ZWw9LTEpCiAKICAgICBkZWYgdGVzdF9ub25leGlzdGVudF9mcm9tbGlzdF9lbnRyeShzZWxmKToKICAgICAgICAgIyBJZiBzb21ldGhpbmcgaW4gZnJvbWxpc3QgZG9lc24ndCBleGlzdCwgdGhhdCdzIG9rYXkuCiAgICAgICAgICMgaXNzdWUxNTcxNQotICAgICAgICBtb2QgPSBpbXAubmV3X21vZHVsZSgnZmluZScpCisgICAgICAgIG1vZCA9IHR5cGVzLk1vZHVsZVR5cGUoUEtHX05BTUUpCiAgICAgICAgIG1vZC5fX3BhdGhfXyA9IFsnWFhYJ10KLSAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W0JhZExvYWRlckZpbmRlcl0pOgotICAgICAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLnVuY2FjaGUoJ2ZpbmUnKToKLSAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZmluZSddID0gbW9kCi0gICAgICAgICAgICAgICAgdXRpbC5pbXBvcnRfKCdmaW5lJywgZnJvbWxpc3Q9Wydub3QgaGVyZSddKQorICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bc2VsZi5iYWRfZmluZGVyX2xvYWRlcl0pOgorICAgICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoUEtHX05BTUUpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW1BLR19OQU1FXSA9IG1vZAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhQS0dfTkFNRSwgZnJvbWxpc3Q9Wydub3QgaGVyZSddKQogCiAgICAgZGVmIHRlc3RfZnJvbWxpc3RfbG9hZF9lcnJvcl9wcm9wYWdhdGVzKHNlbGYpOgogICAgICAgICAjIElmIHNvbWV0aGluZyBpbiBmcm9tbGlzdCB0cmlnZ2VycyBhbiBleGNlcHRpb24gbm90IHJlbGF0ZWQgdG8gbm90CiAgICAgICAgICMgZXhpc3RpbmcsIGxldCB0aGF0IGV4Y2VwdGlvbiBwcm9wYWdhdGUuCiAgICAgICAgICMgaXNzdWUxNTMxNgotICAgICAgICBtb2QgPSBpbXAubmV3X21vZHVsZSgnZmluZScpCisgICAgICAgIG1vZCA9IHR5cGVzLk1vZHVsZVR5cGUoUEtHX05BTUUpCiAgICAgICAgIG1vZC5fX3BhdGhfXyA9IFsnWFhYJ10KLSAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W0JhZExvYWRlckZpbmRlcl0pOgotICAgICAgICAgICAgd2l0aCBpbXBvcnRsaWJfdGVzdF91dGlsLnVuY2FjaGUoJ2ZpbmUnKToKLSAgICAgICAgICAgICAgICBzeXMubW9kdWxlc1snZmluZSddID0gbW9kCisgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLmJhZF9maW5kZXJfbG9hZGVyXSk6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShQS0dfTkFNRSk6CisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbUEtHX05BTUVdID0gbW9kCiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICAgICAgICAgIHV0aWwuaW1wb3J0XygnZmluZScsIGZyb21saXN0PVsnYm9ndXMnXSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKFBLR19OQU1FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9W1NVQk1PRF9OQU1FLnJwYXJ0aXRpb24oJy4nKVstMV1dKQogCiAKK2NsYXNzIE9sZEFQSVRlc3RzKEFQSVRlc3QpOgorICAgIGJhZF9maW5kZXJfbG9hZGVyID0gQmFkTG9hZGVyRmluZGVyCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEFQSVRlc3QpCitGcm96ZW5fT2xkQVBJVGVzdHMsIFNvdXJjZV9PbGRBUElUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBPbGRBUElUZXN0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2NsYXNzIFNwZWNBUElUZXN0cyhBUElUZXN0KToKKyAgICBiYWRfZmluZGVyX2xvYWRlciA9IEJhZFNwZWNGaW5kZXJMb2FkZXIKKworRnJvemVuX1NwZWNBUElUZXN0cywgU291cmNlX1NwZWNBUElUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTcGVjQVBJVGVzdHMsIF9faW1wb3J0X189aW1wb3J0X3V0aWwuX19pbXBvcnRfXykKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfY2FjaGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9jYWNoaW5nLnB5CmluZGV4IDIwNzM3OGEuLmMyOTJlZTQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9jYWNoaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9jYWNoaW5nLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgVXNlQ2FjaGUodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgVXNlQ2FjaGU6CiAKICAgICAiIiJXaGVuIGl0IGNvbWVzIHRvIHN5cy5tb2R1bGVzLCBpbXBvcnQgcHJlZmVycyBpdCBvdmVyIGFueXRoaW5nIGVsc2UuCiAKQEAgLTIxLDEyICsyMSwxMyBAQAogICAgIEltcG9ydEVycm9yIGlzIHJhaXNlZCBbTm9uZSBpbiBjYWNoZV0uCiAKICAgICAiIiIKKwogICAgIGRlZiB0ZXN0X3VzaW5nX2NhY2hlKHNlbGYpOgogICAgICAgICAjIFt1c2UgY2FjaGVdCiAgICAgICAgIG1vZHVsZV90b191c2UgPSAic29tZSBtb2R1bGUgZm91bmQhIgogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc29tZV9tb2R1bGUnKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzWydzb21lX21vZHVsZSddID0gbW9kdWxlX3RvX3VzZQotICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0Xygnc29tZV9tb2R1bGUnKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdzb21lX21vZHVsZScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZV90b191c2UpLCBpZChtb2R1bGUpKQogCiAgICAgZGVmIHRlc3RfTm9uZV9pbl9jYWNoZShzZWxmKToKQEAgLTM1LDkgKzM2LDE5IEBACiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBOb25lCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQogCitGcm96ZW5fVXNlQ2FjaGUsIFNvdXJjZV9Vc2VDYWNoZSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBVc2VDYWNoZSwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQorCisKK2NsYXNzIEltcG9ydGxpYlVzZUNhY2hlKFVzZUNhY2hlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAjIFBlcnRpbmVudCBvbmx5IHRvIFBFUCAzMDI7IGV4ZWNfbW9kdWxlKCkgZG9lc24ndCByZXR1cm4gYSBtb2R1bGUuCisKKyAgICBfX2ltcG9ydF9fID0gaW1wb3J0X3V0aWwuX19pbXBvcnRfX1sxXQorCiAgICAgZGVmIGNyZWF0ZV9tb2NrKHNlbGYsICpuYW1lcywgcmV0dXJuXz1Ob25lKToKICAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCpuYW1lcykKICAgICAgICAgb3JpZ2luYWxfbG9hZCA9IG1vY2subG9hZF9tb2R1bGUKQEAgLTQ5LDQwICs2MCwzMyBAQAogCiAgICAgIyBfX2ltcG9ydF9fIGluY29uc2lzdGVudCBiZXR3ZWVuIGxvYWRlcnMgYW5kIGJ1aWx0LWluIGltcG9ydCB3aGVuIGl0IGNvbWVzCiAgICAgIyAgIHRvIHdoZW4gdG8gdXNlIHRoZSBtb2R1bGUgaW4gc3lzLm1vZHVsZXMgYW5kIHdoZW4gbm90IHRvLgotICAgIEBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQogICAgIGRlZiB0ZXN0X3VzaW5nX2NhY2hlX2FmdGVyX2xvYWRlcihzZWxmKToKICAgICAgICAgIyBbZnJvbSBjYWNoZSBvbiByZXR1cm5dCiAgICAgICAgIHdpdGggc2VsZi5jcmVhdGVfbW9jaygnbW9kdWxlJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygnbW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ21vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChtb2R1bGUpLCBpZChzeXMubW9kdWxlc1snbW9kdWxlJ10pKQogCiAgICAgIyBTZWUgdGVzdF91c2luZ19jYWNoZV9hZnRlcl9sb2FkZXIoKSBmb3IgcmVhc29uaW5nLgotICAgIEBpbXBvcnRfdXRpbC5pbXBvcnRsaWJfb25seQogICAgIGRlZiB0ZXN0X3VzaW5nX2NhY2hlX2Zvcl9hc3NpZ25pbmdfdG9fYXR0cmlidXRlKHNlbGYpOgogICAgICAgICAjIFtmcm9tIGNhY2hlIHRvIGF0dHJpYnV0ZV0KICAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9tb2NrKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlkKG1vZHVsZS5tb2R1bGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc3lzLm1vZHVsZXNbJ3BrZy5tb2R1bGUnXSkpCiAKICAgICAjIFNlZSB0ZXN0X3VzaW5nX2NhY2hlX2FmdGVyX2xvYWRlcigpIGZvciByZWFzb25pbmcuCi0gICAgQGltcG9ydF91dGlsLmltcG9ydGxpYl9vbmx5CiAgICAgZGVmIHRlc3RfdXNpbmdfY2FjaGVfZm9yX2Zyb21saXN0KHNlbGYpOgogICAgICAgICAjIFtmcm9tIGNhY2hlIGZvciBmcm9tbGlzdF0KICAgICAgICAgd2l0aCBzZWxmLmNyZWF0ZV9tb2NrKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUnXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpZChtb2R1bGUubW9kdWxlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkKHN5cy5tb2R1bGVzWydwa2cubW9kdWxlJ10pKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFVzZUNhY2hlKQotCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfZnJvbWxpc3QucHkKaW5kZXggYzE2YzMzNy4uYTc1NWI3NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X2Zyb21saXN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9mcm9tbGlzdC5weQpAQCAtMSwxMCArMSwxMCBAQAogIiIiVGVzdCB0aGF0IHRoZSBzZW1hbnRpY3MgcmVsYXRpbmcgdG8gdGhlICdmcm9tbGlzdCcgYXJndW1lbnQgYXJlIGNvcnJlY3QuIiIiCiBmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgaW1wb3J0X3V0aWwKLWltcG9ydCBpbXAKIGltcG9ydCB1bml0dGVzdAogCi1jbGFzcyBSZXR1cm5WYWx1ZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFJldHVyblZhbHVlOgogCiAgICAgIiIiVGhlIHVzZSBvZiBmcm9tbGlzdCBpbmZsdWVuY2VzIHdoYXQgaW1wb3J0IHJldHVybnMuCiAKQEAgLTE3LDIwICsxNywyMyBAQAogCiAgICAgZGVmIHRlc3RfcmV0dXJuX2Zyb21faW1wb3J0KHNlbGYpOgogICAgICAgICAjIFtpbXBvcnQgcmV0dXJuXQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgorICAgICAgICB3aXRoIHV0aWwubW9ja19zcGVjKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIGltcG9ydGVyOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W2ltcG9ydGVyXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9yZXR1cm5fZnJvbV9mcm9tX2ltcG9ydChzZWxmKToKICAgICAgICAgIyBbZnJvbSByZXR1cm5dCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJylhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnLCBmcm9tbGlzdD1bJ2F0dHInXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnLCBmcm9tbGlzdD1bJ2F0dHInXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZy5tb2R1bGUnKQogCitGcm96ZW5fUmV0dXJuVmFsdWUsIFNvdXJjZV9SZXR1cm5WYWx1ZSA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBSZXR1cm5WYWx1ZSwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1jbGFzcyBIYW5kbGluZ0Zyb21saXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgSGFuZGxpbmdGcm9tbGlzdDoKIAogICAgICIiIlVzaW5nIGZyb21saXN0IHRyaWdnZXJzIGRpZmZlcmVudCBhY3Rpb25zIGJhc2VkIG9uIHdoYXQgaXMgYmVpbmcgYXNrZWQKICAgICBvZiBpdC4KQEAgLTQ5LDIyICs1MiwyMiBAQAogICAgICAgICAjIFtvYmplY3QgY2FzZV0KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygnbW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2R1bGUnLCBmcm9tbGlzdD1bJ2F0dHInXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ21vZHVsZScsIGZyb21saXN0PVsnYXR0ciddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnbW9kdWxlJykKIAogICAgIGRlZiB0ZXN0X25vbmV4aXN0ZW50X29iamVjdChzZWxmKToKICAgICAgICAgIyBbYmFkIG9iamVjdF0KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygnbW9kdWxlJykgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2R1bGUnLCBmcm9tbGlzdD1bJ25vbl9leGlzdGVudCddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnbW9kdWxlJywgZnJvbWxpc3Q9Wydub25fZXhpc3RlbnQnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ21vZHVsZScpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG1vZHVsZSwgJ25vbl9leGlzdGVudCcpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdub25fZXhpc3RlbnQnKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9mcm9tX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgW21vZHVsZV0KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlJ10pCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1bJ21vZHVsZSddKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUuX19uYW1lX18sICdwa2cubW9kdWxlJykKQEAgLTc5LDEzICs4MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsncGtnLm1vZCc6IG1vZHVsZV9jb2RlfSkgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBleGM6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycsIGZyb21saXN0PVsnbW9kJ10pCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJywgZnJvbWxpc3Q9Wydtb2QnXSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdpX2RvX25vdF9leGlzdCcsIGV4Yy5leGNlcHRpb24ubmFtZSkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X3N0cmluZyhzZWxmKToKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2QnKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2QnLCBmcm9tbGlzdD1bJyddKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygncGtnLm1vZCcsIGZyb21saXN0PVsnJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cubW9kJykKIAogICAgIGRlZiBiYXNpY19zdGFyX3Rlc3Qoc2VsZiwgZnJvbWxpc3Q9WycqJ10pOgpAQCAtOTMsNyArOTYsNyBAQAogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIG1vY2tbJ3BrZyddLl9fYWxsX18gPSBbJ21vZHVsZSddCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9ZnJvbWxpc3QpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCdwa2cnLCBmcm9tbGlzdD1mcm9tbGlzdCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnbW9kdWxlJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZHVsZScpCkBAIC0xMTEsMTcgKzExNCwxNiBAQAogICAgICAgICB3aXRoIGNvbnRleHQgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgbW9ja1sncGtnJ10uX19hbGxfXyA9IFsnbW9kdWxlMSddCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJywgZnJvbWxpc3Q9Wydtb2R1bGUyJywgJyonXSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZycsIGZyb21saXN0PVsnbW9kdWxlMicsICcqJ10pCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ21vZHVsZTEnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUyJykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUubW9kdWxlMS5fX25hbWVfXywgJ3BrZy5tb2R1bGUxJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2R1bGUyLl9fbmFtZV9fLCAncGtnLm1vZHVsZTInKQogCitGcm96ZW5fRnJvbUxpc3QsIFNvdXJjZV9Gcm9tTGlzdCA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBIYW5kbGluZ0Zyb21saXN0LCBfX2ltcG9ydF9fPWltcG9ydF91dGlsLl9faW1wb3J0X18pCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFJldHVyblZhbHVlLCBIYW5kbGluZ0Zyb21saXN0KQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X21ldGFfcGF0aC5weQppbmRleCA0ZDg1ZjgwLi41ZWViMTQ1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfbWV0YV9wYXRoLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9tZXRhX3BhdGgucHkKQEAgLTcsNyArNyw3IEBACiBpbXBvcnQgd2FybmluZ3MKIAogCi1jbGFzcyBDYWxsaW5nT3JkZXIodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQ2FsbGluZ09yZGVyOgogCiAgICAgIiIiQ2FsbHMgdG8gdGhlIGltcG9ydGVycyBvbiBzeXMubWV0YV9wYXRoIGhhcHBlbiBpbiBvcmRlciB0aGF0IHRoZXkgYXJlCiAgICAgc3BlY2lmaWVkIGluIHRoZSBzZXF1ZW5jZSwgc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgaW1wb3J0ZXIKQEAgLTE4LDIzICsxOCwxOCBAQAogICAgIGRlZiB0ZXN0X2ZpcnN0X2NhbGxlZChzZWxmKToKICAgICAgICAgIyBbZmlyc3QgY2FsbGVkXQogICAgICAgICBtb2QgPSAndG9wX2xldmVsJwotICAgICAgICBmaXJzdCA9IHV0aWwubW9ja19tb2R1bGVzKG1vZCkKLSAgICAgICAgc2Vjb25kID0gdXRpbC5tb2NrX21vZHVsZXMobW9kKQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKG1vZCkgYXMgZmlyc3QsIHV0aWwubW9ja19tb2R1bGVzKG1vZCkgYXMgc2Vjb25kOgotICAgICAgICAgICAgZmlyc3QubW9kdWxlc1ttb2RdID0gNDIKLSAgICAgICAgICAgIHNlY29uZC5tb2R1bGVzW21vZF0gPSAtMTMKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYyhtb2QpIGFzIGZpcnN0LCB1dGlsLm1vY2tfc3BlYyhtb2QpIGFzIHNlY29uZDoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtmaXJzdCwgc2Vjb25kXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRfdXRpbC5pbXBvcnRfKG1vZCksIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5fX2ltcG9ydF9fKG1vZCksIGZpcnN0Lm1vZHVsZXNbbW9kXSkKIAogICAgIGRlZiB0ZXN0X2NvbnRpbnVpbmcoc2VsZik6CiAgICAgICAgICMgW2NvbnRpbnVpbmddCiAgICAgICAgIG1vZF9uYW1lID0gJ2Zvcl9yZWFsJwotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCdub25leGlzdGVudCcpIGFzIGZpcnN0LCBcCi0gICAgICAgICAgICAgdXRpbC5tb2NrX21vZHVsZXMobW9kX25hbWUpIGFzIHNlY29uZDoKLSAgICAgICAgICAgIGZpcnN0LmZpbmRfbW9kdWxlID0gbGFtYmRhIHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmU6IE5vbmUKLSAgICAgICAgICAgIHNlY29uZC5tb2R1bGVzW21vZF9uYW1lXSA9IDQyCisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMoJ25vbmV4aXN0ZW50JykgYXMgZmlyc3QsIFwKKyAgICAgICAgICAgICB1dGlsLm1vY2tfc3BlYyhtb2RfbmFtZSkgYXMgc2Vjb25kOgorICAgICAgICAgICAgZmlyc3QuZmluZF9zcGVjID0gbGFtYmRhIHNlbGYsIGZ1bGxuYW1lLCBwYXRoPU5vbmUsIHBhcmVudD1Ob25lOiBOb25lCiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bZmlyc3QsIHNlY29uZF0pOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wb3J0X3V0aWwuaW1wb3J0Xyhtb2RfbmFtZSksIDQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5fX2ltcG9ydF9fKG1vZF9uYW1lKSwgc2Vjb25kLm1vZHVsZXNbbW9kX25hbWVdKQogCiAgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CiAgICAgICAgICMgUmFpc2UgYW4gSW1wb3J0V2FybmluZyBpZiBzeXMubWV0YV9wYXRoIGlzIGVtcHR5LgpAQCAtNDYsNDEgKzQxLDQyIEBACiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtdKToKICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6CiAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdhbHdheXMnKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGltcG9ydGxpYi5fYm9vdHN0cmFwLl9maW5kX21vZHVsZSgnbm90aGluZycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGltcG9ydGxpYi5fYm9vdHN0cmFwLl9maW5kX3NwZWMoJ25vdGhpbmcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Mod1stMV0uY2F0ZWdvcnksIEltcG9ydFdhcm5pbmcpKQogCitGcm96ZW5fQ2FsbGluZ09yZGVyLCBTb3VyY2VfQ2FsbGluZ09yZGVyID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIENhbGxpbmdPcmRlciwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1jbGFzcyBDYWxsU2lnbmF0dXJlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworY2xhc3MgQ2FsbFNpZ25hdHVyZToKIAogICAgICIiIklmIHRoZXJlIGlzIG5vIF9fcGF0aF9fIGVudHJ5IG9uIHRoZSBwYXJlbnQgbW9kdWxlLCB0aGVuICdwYXRoJyBpcyBOb25lCiAgICAgW25vIHBhdGhdLiBPdGhlcndpc2UsIHRoZSB2YWx1ZSBmb3IgX19wYXRoX18gaXMgcGFzc2VkIGluIGZvciB0aGUgJ3BhdGgnCiAgICAgYXJndW1lbnQgW3BhdGggc2V0XS4iIiIKIAotICAgIGRlZiBsb2coc2VsZiwgZnhuKToKKyAgICBkZWYgbG9nX2ZpbmRlcihzZWxmLCBpbXBvcnRlcik6CisgICAgICAgIGZ4biA9IGdldGF0dHIoaW1wb3J0ZXIsIHNlbGYuZmluZGVyX25hbWUpCiAgICAgICAgIGxvZyA9IFtdCiAgICAgICAgIGRlZiB3cmFwcGVyKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICBsb2cuYXBwZW5kKFthcmdzLCBrd2FyZ3NdKQogICAgICAgICAgICAgcmV0dXJuIGZ4bigqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHJldHVybiBsb2csIHdyYXBwZXIKIAotCiAgICAgZGVmIHRlc3Rfbm9fcGF0aChzZWxmKToKICAgICAgICAgIyBbbm8gcGF0aF0KICAgICAgICAgbW9kX25hbWUgPSAndG9wX2xldmVsJwogICAgICAgICBhc3NlcnQgJy4nIG5vdCBpbiBtb2RfbmFtZQotICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKG1vZF9uYW1lKSBhcyBpbXBvcnRlcjoKLSAgICAgICAgICAgIGxvZywgd3JhcHBlZF9jYWxsID0gc2VsZi5sb2coaW1wb3J0ZXIuZmluZF9tb2R1bGUpCi0gICAgICAgICAgICBpbXBvcnRlci5maW5kX21vZHVsZSA9IE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikKKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfbW9kdWxlcyhtb2RfbmFtZSkgYXMgaW1wb3J0ZXI6CisgICAgICAgICAgICBsb2csIHdyYXBwZWRfY2FsbCA9IHNlbGYubG9nX2ZpbmRlcihpbXBvcnRlcikKKyAgICAgICAgICAgIHNldGF0dHIoaW1wb3J0ZXIsIHNlbGYuZmluZGVyX25hbWUsIE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikpCiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1baW1wb3J0ZXJdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKG1vZF9uYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXyhtb2RfbmFtZSkKICAgICAgICAgICAgICAgICBhc3NlcnQgbGVuKGxvZykgPT0gMQogICAgICAgICAgICAgICAgIGFyZ3MgPSBsb2dbMF1bMF0KICAgICAgICAgICAgICAgICBrd2FyZ3MgPSBsb2dbMF1bMV0KICAgICAgICAgICAgICAgICAjIEFzc3VtaW5nIGFsbCBhcmd1bWVudHMgYXJlIHBvc2l0aW9uYWwuCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYXJncyksIDIpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa3dhcmdzKSwgMCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3NbMF0sIG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGFyZ3NbMV0pCiAKQEAgLTkwLDI2ICs4NiwzNCBAQAogICAgICAgICBtb2RfbmFtZSA9IHBrZ19uYW1lICsgJy5tb2R1bGUnCiAgICAgICAgIHBhdGggPSBbNDJdCiAgICAgICAgIGFzc2VydCAnLicgaW4gbW9kX25hbWUKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbmFtZSsnLl9faW5pdF9fJywgbW9kX25hbWUpIGFzIGltcG9ydGVyOgorICAgICAgICB3aXRoIHNlbGYubW9ja19tb2R1bGVzKHBrZ19uYW1lKycuX19pbml0X18nLCBtb2RfbmFtZSkgYXMgaW1wb3J0ZXI6CiAgICAgICAgICAgICBpbXBvcnRlci5tb2R1bGVzW3BrZ19uYW1lXS5fX3BhdGhfXyA9IHBhdGgKLSAgICAgICAgICAgIGxvZywgd3JhcHBlZF9jYWxsID0gc2VsZi5sb2coaW1wb3J0ZXIuZmluZF9tb2R1bGUpCi0gICAgICAgICAgICBpbXBvcnRlci5maW5kX21vZHVsZSA9IE1ldGhvZFR5cGUod3JhcHBlZF9jYWxsLCBpbXBvcnRlcikKKyAgICAgICAgICAgIGxvZywgd3JhcHBlZF9jYWxsID0gc2VsZi5sb2dfZmluZGVyKGltcG9ydGVyKQorICAgICAgICAgICAgc2V0YXR0cihpbXBvcnRlciwgc2VsZi5maW5kZXJfbmFtZSwgTWV0aG9kVHlwZSh3cmFwcGVkX2NhbGwsIGltcG9ydGVyKSkKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgotICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8obW9kX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIGFzc2VydCBsZW4obG9nKSA9PSAyCiAgICAgICAgICAgICAgICAgYXJncyA9IGxvZ1sxXVswXQogICAgICAgICAgICAgICAgIGt3YXJncyA9IGxvZ1sxXVsxXQogICAgICAgICAgICAgICAgICMgQXNzdW1pbmcgYWxsIGFyZ3VtZW50cyBhcmUgcG9zaXRpb25hbC4KLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IGt3YXJncykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGt3YXJncykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3NbMF0sIG1vZF9uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoYXJnc1sxXSwgcGF0aCkKIAorY2xhc3MgQ2FsbFNpZ25hdHVyZVBFUDMwMihDYWxsU2lnbmF0dXJlKToKKyAgICBtb2NrX21vZHVsZXMgPSB1dGlsLm1vY2tfbW9kdWxlcworICAgIGZpbmRlcl9uYW1lID0gJ2ZpbmRfbW9kdWxlJwogCitGcm96ZW5fQ2FsbFNpZ25hdHVyZVBFUDMwMiwgU291cmNlX0NhbGxTaWduYXR1cmVQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQ2FsbFNpZ25hdHVyZVBFUDMwMiwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChDYWxsaW5nT3JkZXIsIENhbGxTaWduYXR1cmUpCitjbGFzcyBDYWxsU2lnbmF0dXJlUEVQNDUxKENhbGxTaWduYXR1cmUpOgorICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19zcGVjCisgICAgZmluZGVyX25hbWUgPSAnZmluZF9zcGVjJworCitGcm96ZW5fQ2FsbFNpZ25hdHVyZVBFUDQ1MSwgU291cmNlX0NhbGxTaWduYXR1cmVQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgQ2FsbFNpZ25hdHVyZVBFUDQ1MSwgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYWNrYWdlcy5weQppbmRleCBiZmExOGRjLi41NWE1ZDE0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3Rlc3RfcGFja2FnZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhY2thZ2VzLnB5CkBAIC02LDM3ICs2LDM3IEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAogCi1jbGFzcyBQYXJlbnRNb2R1bGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBQYXJlbnRNb2R1bGVUZXN0czoKIAogICAgICIiIkltcG9ydGluZyBhIHN1Ym1vZHVsZSBzaG91bGQgaW1wb3J0IHRoZSBwYXJlbnQgbW9kdWxlcy4iIiIKIAogICAgIGRlZiB0ZXN0X2ltcG9ydF9wYXJlbnQoc2VsZik6Ci0gICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJykgYXMgbW9jazoKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cubW9kdWxlJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogCiAgICAgZGVmIHRlc3RfYmFkX3BhcmVudChzZWxmKToKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygncGtnLm1vZHVsZScpIGFzIG1vY2s6CisgICAgICAgIHdpdGggdXRpbC5tb2NrX3NwZWMoJ3BrZy5tb2R1bGUnKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgJ3BrZycpCiAKICAgICBkZWYgdGVzdF9yYWlzaW5nX3BhcmVudF9hZnRlcl9pbXBvcnRpbmdfY2hpbGQoc2VsZik6CiAgICAgICAgIGRlZiBfX2luaXRfXygpOgogICAgICAgICAgICAgaW1wb3J0IHBrZy5tb2R1bGUKICAgICAgICAgICAgIDEvMAotICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJywKKyAgICAgICAgbW9jayA9IHV0aWwubW9ja19zcGVjKCdwa2cuX19pbml0X18nLCAncGtnLm1vZHVsZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVfY29kZT17J3BrZyc6IF9faW5pdF9ffSkKICAgICAgICAgd2l0aCBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3BrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLm1vZHVsZScpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnLm1vZHVsZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncGtnLm1vZHVsZScsIHN5cy5tb2R1bGVzKQogCkBAIC00NCwxNyArNDQsMTcgQEAKICAgICAgICAgZGVmIF9faW5pdF9fKCk6CiAgICAgICAgICAgICBmcm9tIC4gaW1wb3J0IG1vZHVsZQogICAgICAgICAgICAgMS8wCi0gICAgICAgIG1vY2sgPSB1dGlsLm1vY2tfbW9kdWxlcygncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnLAorICAgICAgICBtb2NrID0gdXRpbC5tb2NrX3NwZWMoJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZV9jb2RlPXsncGtnJzogX19pbml0X199KQogICAgICAgICB3aXRoIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgogICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFplcm9EaXZpc2lvbkVycm9yLCBJbXBvcnRFcnJvcikpOgogICAgICAgICAgICAgICAgICAgICAjIFRoaXMgcmFpc2VzIEltcG9ydEVycm9yIG9uIHRoZSAiZnJvbSAuIGltcG9ydCBtb2R1bGUiCiAgICAgICAgICAgICAgICAgICAgICMgbGluZSwgbm90IHN1cmUgd2h5LgotICAgICAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigncGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoWmVyb0RpdmlzaW9uRXJyb3IsIEltcG9ydEVycm9yKSk6Ci0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5tb2R1bGUnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZycsIHN5cy5tb2R1bGVzKQogICAgICAgICAgICAgICAgICMgWFhYIEZhbHNlCiAgICAgICAgICAgICAgICAgI3NlbGYuYXNzZXJ0SW4oJ3BrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgZGVmIF9faW5pdF9fKCk6CiAgICAgICAgICAgICBmcm9tIC4uc3VicGtnIGltcG9ydCBtb2R1bGUKICAgICAgICAgICAgIDEvMAotICAgICAgICBtb2NrID0gdXRpbC5tb2NrX21vZHVsZXMoJ3BrZy5fX2luaXRfXycsICdwa2cuc3VicGtnLl9faW5pdF9fJywKKyAgICAgICAgbW9jayA9IHV0aWwubW9ja19zcGVjKCdwa2cuX19pbml0X18nLCAncGtnLnN1YnBrZy5fX2luaXRfXycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncGtnLnN1YnBrZy5tb2R1bGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydwa2cuc3VicGtnJzogX19pbml0X199KQogICAgICAgICB3aXRoIG1vY2s6CkBAIC03MSwxMCArNzEsMTAgQEAKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIHJhaXNlcyBJbXBvcnRFcnJvciBvbiB0aGUgImZyb20gLi5zdWJwa2cgaW1wb3J0IG1vZHVsZSIKICAgICAgICAgICAgICAgICAgICAgIyBsaW5lLCBub3Qgc3VyZSB3aHkuCi0gICAgICAgICAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZy5zdWJwa2cnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5zdWJwa2cnKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3BrZy5zdWJwa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChaZXJvRGl2aXNpb25FcnJvciwgSW1wb3J0RXJyb3IpKToKLSAgICAgICAgICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnLnN1YnBrZy5tb2R1bGUnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZy5zdWJwa2cubW9kdWxlJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdwa2cuc3VicGtnJywgc3lzLm1vZHVsZXMpCiAgICAgICAgICAgICAgICAgIyBYWFggRmFsc2UKICAgICAgICAgICAgICAgICAjc2VsZi5hc3NlcnRJbigncGtnLnN1YnBrZy5tb2R1bGUnLCBzeXMubW9kdWxlcykKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAgICAgIyBUcnkgdG8gaW1wb3J0IGEgc3VibW9kdWxlIGZyb20gYSBub24tcGFja2FnZSBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IuCiAgICAgICAgIGFzc2VydCBub3QgaGFzYXR0cihzeXMsICdfX3BhdGhfXycpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0Xygnc3lzLm5vX3N1Ym1vZHVsZXNfaGVyZScpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3N5cy5ub19zdWJtb2R1bGVzX2hlcmUnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCAnc3lzLm5vX3N1Ym1vZHVsZXNfaGVyZScpCiAKICAgICBkZWYgdGVzdF9tb2R1bGVfbm90X3BhY2thZ2VfYnV0X3NpZGVfZWZmZWN0cyhzZWxmKToKQEAgLTkzLDIwICs5MywxOCBAQAogICAgICAgICBzdWJuYW1lID0gbmFtZSArICcuYicKICAgICAgICAgZGVmIG1vZHVsZV9pbmplY3Rpb24oKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW3N1Ym5hbWVdID0gJ3RvdGFsIGJ1bmsnCi0gICAgICAgIG1vY2tfbW9kdWxlcyA9IHV0aWwubW9ja19tb2R1bGVzKCdtb2QnLAorICAgICAgICBtb2NrX3NwZWMgPSB1dGlsLm1vY2tfc3BlYygnbW9kJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eydtb2QnOiBtb2R1bGVfaW5qZWN0aW9ufSkKLSAgICAgICAgd2l0aCBtb2NrX21vZHVsZXMgYXMgbW9jazoKKyAgICAgICAgd2l0aCBtb2NrX3NwZWMgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6CiAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKHN1Ym5hbWUpCisgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXyhzdWJuYW1lKQogICAgICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQudW5sb2FkKHN1Ym5hbWUpCiAKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoUGFyZW50TW9kdWxlVGVzdHMpCitGcm96ZW5fUGFyZW50VGVzdHMsIFNvdXJjZV9QYXJlbnRUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBQYXJlbnRNb2R1bGVUZXN0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9wYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKaW5kZXggZDgyYjdmNi4uMTI3NGY4YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3BhdGgucHkKQEAgLTEsOCArMSw5IEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGltcG9ydF9tb2R1bGUKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBpbXBvcnRfdXRpbAorCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdHlwZXMgaW1wb3J0IE1vZHVsZVR5cGUKQEAgLTExLDI1ICsxMiwyNSBAQAogaW1wb3J0IHppcGltcG9ydAogCiAKLWNsYXNzIEZpbmRlclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEZpbmRlclRlc3RzOgogCiAgICAgIiIiVGVzdHMgZm9yIFBhdGhGaW5kZXIuIiIiCiAKICAgICBkZWYgdGVzdF9mYWlsdXJlKHNlbGYpOgotICAgICAgICAjIFRlc3QgTm9uZSByZXR1cm5lZCB1cG9uIG5vdCBmaW5kaW5nIGEgc3VpdGFibGUgZmluZGVyLgorICAgICAgICAjIFRlc3QgTm9uZSByZXR1cm5lZCB1cG9uIG5vdCBmaW5kaW5nIGEgc3VpdGFibGUgbG9hZGVyLgogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZSgpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKSkKIAogICAgIGRlZiB0ZXN0X3N5c19wYXRoKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBzeXMucGF0aCBpcyB1c2VkIHdoZW4gJ3BhdGgnIGlzIE5vbmUuCiAgICAgICAgICMgSW1wbGljaXRseSB0ZXN0cyB0aGF0IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlzIHVzZWQuCiAgICAgICAgIG1vZHVsZSA9ICc8dGVzdCBtb2R1bGU+JwogICAgICAgICBwYXRoID0gJzx0ZXN0IHBhdGg+JwotICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKKyAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfc3BlYyhtb2R1bGUpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9pbXBvcnRlcl9jYWNoZT17cGF0aDogaW1wb3J0ZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W3BhdGhdKToKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIGltcG9ydGVyKQogCiAgICAgZGVmIHRlc3RfcGF0aChzZWxmKToKQEAgLTM3LDI5ICszOCwyOSBAQAogICAgICAgICAjIEltcGxpY2l0bHkgdGVzdHMgdGhhdCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSBpcyB1c2VkLgogICAgICAgICBtb2R1bGUgPSAnPHRlc3QgbW9kdWxlPicKICAgICAgICAgcGF0aCA9ICc8dGVzdCBwYXRoPicKLSAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfbW9kdWxlcyhtb2R1bGUpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGhfaW1wb3J0ZXJfY2FjaGU9e3BhdGg6IGltcG9ydGVyfSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsIFtwYXRoXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9saXN0KHNlbGYpOgogICAgICAgICAjIEFuIGVtcHR5IGxpc3Qgc2hvdWxkIG5vdCBjb3VudCBhcyBhc2tpbmcgZm9yIHN5cy5wYXRoLgogICAgICAgICBtb2R1bGUgPSAnbW9kdWxlJwogICAgICAgICBwYXRoID0gJzx0ZXN0IHBhdGg+JwotICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKKyAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfc3BlYyhtb2R1bGUpCiAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aF9pbXBvcnRlcl9jYWNoZT17cGF0aDogaW1wb3J0ZXJ9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg9W3BhdGhdKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKG1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdtb2R1bGUnLCBbXSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKCdtb2R1bGUnLCBbXSkpCiAKICAgICBkZWYgdGVzdF9wYXRoX2hvb2tzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBzeXMucGF0aF9ob29rcyBpcyB1c2VkLgogICAgICAgICAjIFRlc3QgdGhhdCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSBpcyBzZXQuCiAgICAgICAgIG1vZHVsZSA9ICc8dGVzdCBtb2R1bGU+JwogICAgICAgICBwYXRoID0gJzx0ZXN0IHBhdGg+JwotICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKKyAgICAgICAgaW1wb3J0ZXIgPSB1dGlsLm1vY2tfc3BlYyhtb2R1bGUpCiAgICAgICAgIGhvb2sgPSBpbXBvcnRfdXRpbC5tb2NrX3BhdGhfaG9vayhwYXRoLCBpbXBvcnRlcj1pbXBvcnRlcikKICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShwYXRoX2hvb2tzPVtob29rXSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUsIFtwYXRoXSkKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUobW9kdWxlLCBbcGF0aF0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlciwgaW1wb3J0ZXIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHBhdGgsIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtwYXRoXSwgaW1wb3J0ZXIpCkBAIC03Miw3ICs3Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1bcGF0aF9lbnRyeV0pOgogICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Fsd2F5cycpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobWFjaGluZXJ5LlBhdGhGaW5kZXIuZmluZF9tb2R1bGUoJ29zJykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZSgnb3MnKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtwYXRoX2VudHJ5XSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyh3Wy0xXS5jYXRlZ29yeSwgSW1wb3J0V2FybmluZykpCkBAIC04MSwxMiArODIsMTIgQEAKICAgICAgICAgIyBUaGUgZW1wdHkgc3RyaW5nIHNob3VsZCBjcmVhdGUgYSBmaW5kZXIgdXNpbmcgdGhlIGN3ZC4KICAgICAgICAgcGF0aCA9ICcnCiAgICAgICAgIG1vZHVsZSA9ICc8dGVzdCBtb2R1bGU+JwotICAgICAgICBpbXBvcnRlciA9IHV0aWwubW9ja19tb2R1bGVzKG1vZHVsZSkKLSAgICAgICAgaG9vayA9IGltcG9ydF91dGlsLm1vY2tfcGF0aF9ob29rKG9zLmN1cmRpciwgaW1wb3J0ZXI9aW1wb3J0ZXIpCisgICAgICAgIGltcG9ydGVyID0gdXRpbC5tb2NrX3NwZWMobW9kdWxlKQorICAgICAgICBob29rID0gaW1wb3J0X3V0aWwubW9ja19wYXRoX2hvb2sob3MuZ2V0Y3dkKCksIGltcG9ydGVyPWltcG9ydGVyKQogICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKHBhdGg9W3BhdGhdLCBwYXRoX2hvb2tzPVtob29rXSk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5QYXRoRmluZGVyLmZpbmRfbW9kdWxlKG1vZHVsZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLCBpbXBvcnRlcikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MuY3VyZGlyLCBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MuZ2V0Y3dkKCksIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlKQogCiAgICAgZGVmIHRlc3RfTm9uZV9vbl9zeXNfcGF0aChzZWxmKToKICAgICAgICAgIyBQdXR0aW5nIE5vbmUgaW4gc3lzLnBhdGhbMF0gY2F1c2VkIGFuIGltcG9ydCByZWdyZXNzaW9uIGZyb20gUHl0aG9uCkBAIC05Niw4ICs5Nyw4IEBACiAgICAgICAgIG5ld19wYXRoX2ltcG9ydGVyX2NhY2hlID0gc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY29weSgpCiAgICAgICAgIG5ld19wYXRoX2ltcG9ydGVyX2NhY2hlLnBvcChOb25lLCBOb25lKQogICAgICAgICBuZXdfcGF0aF9ob29rcyA9IFt6aXBpbXBvcnQuemlwaW1wb3J0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIF9ib290c3RyYXAuRmlsZUZpbmRlci5wYXRoX2hvb2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqX2Jvb3RzdHJhcC5fZ2V0X3N1cHBvcnRlZF9maWxlX2xvYWRlcnMoKSldCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnNlbGYuaW1wb3J0bGliLl9ib290c3RyYXAuX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkpXQogICAgICAgICBtaXNzaW5nID0gb2JqZWN0KCkKICAgICAgICAgZW1haWwgPSBzeXMubW9kdWxlcy5wb3AoJ2VtYWlsJywgbWlzc2luZykKICAgICAgICAgdHJ5OgpAQCAtMTA1LDE2ICsxMDYsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aD1uZXdfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9pbXBvcnRlcl9jYWNoZT1uZXdfcGF0aF9pbXBvcnRlcl9jYWNoZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9ob29rcz1uZXdfcGF0aF9ob29rcyk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0X21vZHVsZSgnZW1haWwnKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2VtYWlsJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdWxlLCBNb2R1bGVUeXBlKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgaWYgZW1haWwgaXMgbm90IG1pc3Npbmc6CiAgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbJ2VtYWlsJ10gPSBlbWFpbAogCitGcm96ZW5fRmluZGVyVGVzdHMsIFNvdXJjZV9GaW5kZXJUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBGaW5kZXJUZXN0cywgaW1wb3J0bGliPWltcG9ydGxpYiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRmluZGVyVGVzdHMpCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlclRlc3RzOgorCisgICAgZGVmIHRlc3RfZmluZGVyX3dpdGhfZmFpbGluZ19maW5kX21vZHVsZShzZWxmKToKKyAgICAgICAgIyBQYXRoRW50cnlGaW5kZXIgd2l0aCBmaW5kX21vZHVsZSgpIGRlZmluZWQgc2hvdWxkIHdvcmsuCisgICAgICAgICMgSXNzdWUgIzIwNzYzLgorICAgICAgICBjbGFzcyBGaW5kZXI6CisgICAgICAgICAgICBwYXRoX2xvY2F0aW9uID0gJ3Rlc3RfZmluZGVyX3dpdGhfZmluZF9tb2R1bGUnCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6CisgICAgICAgICAgICAgICAgaWYgcGF0aCAhPSBzZWxmLnBhdGhfbG9jYXRpb246CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCisKKyAgICAgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgICAgIGRlZiBmaW5kX21vZHVsZShmdWxsbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworCisgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUocGF0aD1bRmluZGVyLnBhdGhfbG9jYXRpb25dK3N5cy5wYXRoWzpdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3M9W0ZpbmRlcl0pOgorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuUGF0aEZpbmRlci5maW5kX3NwZWMoJ2ltcG9ydGxpYicpCisKK0Zyb3plbl9QRUZUZXN0cywgU291cmNlX1BFRlRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBhdGhFbnRyeUZpbmRlclRlc3RzLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdGVzdF9yZWxhdGl2ZV9pbXBvcnRzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKaW5kZXggNDU2OWMyNi4uYjIxNmU5YyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy90ZXN0X3JlbGF0aXZlX2ltcG9ydHMucHkKQEAgLTQsNyArNCw3IEBACiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKIAotY2xhc3MgUmVsYXRpdmVJbXBvcnRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFJlbGF0aXZlSW1wb3J0czoKIAogICAgICIiIlBFUCAzMjggaW50cm9kdWNlZCByZWxhdGl2ZSBpbXBvcnRzLiBUaGlzIGFsbG93cyBmb3IgaW1wb3J0cyB0byBvY2N1cgogICAgIGZyb20gd2l0aGluIGEgcGFja2FnZSB3aXRob3V0IGhhdmluZyB0byBzcGVjaWZ5IHRoZSBhY3R1YWwgcGFja2FnZSBuYW1lLgpAQCAtNjQsNyArNjQsNyBAQAogICAgICAgICAgICAgICAgIHVuY2FjaGVfbmFtZXMuYXBwZW5kKG5hbWUpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHVuY2FjaGVfbmFtZXMuYXBwZW5kKG5hbWVbOi1sZW4oJy5fX2luaXRfXycpXSkKLSAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygqY3JlYXRlKSBhcyBpbXBvcnRlcjoKKyAgICAgICAgd2l0aCB1dGlsLm1vY2tfc3BlYygqY3JlYXRlKSBhcyBpbXBvcnRlcjoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtpbXBvcnRlcl0pOgogICAgICAgICAgICAgICAgIGZvciBnbG9iYWxfIGluIGdsb2JhbHNfOgogICAgICAgICAgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgqdW5jYWNoZV9uYW1lcyk6CkBAIC03Niw4ICs3Niw4IEBACiAgICAgICAgIGNyZWF0ZSA9ICdwa2cuX19pbml0X18nLCAncGtnLm1vZDInCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdwa2cnfSwgeydfX25hbWVfXyc6ICdwa2cubW9kMSd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ21vZDInXSwgbGV2ZWw9MSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wydtb2QyJ10sIGxldmVsPTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2QyJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5tb2QyLmF0dHIsICdwa2cubW9kMicpCkBAIC04OCw4ICs4OCw4IEBACiAgICAgICAgIGNyZWF0ZSA9ICdwa2cuX19pbml0X18nLCAncGtnLm1vZDInCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdwa2cnfSwgeydfX25hbWVfXyc6ICdwa2cubW9kMSd9CiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCi0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCdtb2QyJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydhdHRyJ10sCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJ21vZDInLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnLm1vZDInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgJ3BrZy5tb2QyJykKQEAgLTEwMSw4ICsxMDEsOCBAQAogICAgICAgICBnbG9iYWxzXyA9ICh7J19fcGFja2FnZV9fJzogJ3BrZyd9LAogICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZycsICdfX3BhdGhfXyc6IFsnYmxhaCddfSkKICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnbW9kdWxlJ10sCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJ3BrZycpICAjIEZvciBfX2ltcG9ydF9fKCkuCisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9faW1wb3J0X18oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnbW9kdWxlJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdtb2R1bGUnKSkKQEAgLTExNCw4ICsxMTQsOCBAQAogICAgICAgICBjcmVhdGUgPSAncGtnLl9faW5pdF9fJywgJ3BrZy5tb2R1bGUnCiAgICAgICAgIGdsb2JhbHNfID0geydfX3BhY2thZ2VfXyc6ICdwa2cnfSwgeydfX25hbWVfXyc6ICdwa2cubW9kdWxlJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygncGtnJykgICMgRm9yIF9faW1wb3J0X18oKS4KLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD0xKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKSAgIyBGb3IgX19pbXBvcnRfXygpLgorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9MSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIApAQCAtMTI2LDcgKzEyNiw3IEBACiAgICAgICAgIGdsb2JhbHNfID0gICh7J19fcGFja2FnZV9fJzogJ3BrZy5zdWJwa2cxJ30sCiAgICAgICAgICAgICAgICAgICAgICB7J19fbmFtZV9fJzogJ3BrZy5zdWJwa2cxJywgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3N1YnBrZzInXSwKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9WydzdWJwa2cyJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgJ3BrZycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdzdWJwa2cyJykpCkBAIC0xNDIsOCArMTQyLDggQEAKICAgICAgICAgICAgICAgICAgICAgeydfX25hbWVfXyc6ICdwa2cucGtnMS5wa2cyLnBrZzMucGtnNC5wa2c1JywKICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXyc6IFsnYmxhaCddfSkKICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XyhnbG9iYWxzX1swXVsnX19wYWNrYWdlX18nXSkKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJycsIGdsb2JhbF8sIGZyb21saXN0PVsnYXR0ciddLCBsZXZlbD02KQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKGdsb2JhbHNfWzBdWydfX3BhY2thZ2VfXyddKQorICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5fX2ltcG9ydF9fKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ2F0dHInXSwgbGV2ZWw9NikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAncGtnJykKICAgICAgICAgc2VsZi5yZWxhdGl2ZV9pbXBvcnRfdGVzdChjcmVhdGUsIGdsb2JhbHNfLCBjYWxsYmFjaykKIApAQCAtMTUzLDkgKzE1Myw5IEBACiAgICAgICAgIGdsb2JhbHNfID0gKHsnX19wYWNrYWdlX18nOiAncGtnJ30sCiAgICAgICAgICAgICAgICAgICAgIHsnX19uYW1lX18nOiAncGtnJywgJ19fcGF0aF9fJzogWydibGFoJ119KQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wyd0b3BfbGV2ZWwnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKQEAgLTE2NCwxNiArMTY0LDE2IEBACiAgICAgICAgIGNyZWF0ZSA9IFsndG9wX2xldmVsJywgJ3BrZy5fX2luaXRfXycsICdwa2cubW9kdWxlJ10KICAgICAgICAgZ2xvYmFsc18gPSB7J19fcGFja2FnZV9fJzogJ3BrZyd9LCB7J19fbmFtZV9fJzogJ3BrZy5tb2R1bGUnfQogICAgICAgICBkZWYgY2FsbGJhY2soZ2xvYmFsXyk6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdwa2cnKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdwa2cnKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCcnLCBnbG9iYWxfLCBmcm9tbGlzdD1bJ3RvcF9sZXZlbCddLAorICAgICAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnJywgZ2xvYmFsXywgZnJvbWxpc3Q9Wyd0b3BfbGV2ZWwnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsPTIpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKICAgICBkZWYgdGVzdF9lbXB0eV9uYW1lX3dfbGV2ZWxfMChzZWxmKToKICAgICAgICAgIyBbZW1wdHkgbmFtZV0KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJycpCisgICAgICAgICAgICBzZWxmLl9faW1wb3J0X18oJycpCiAKICAgICBkZWYgdGVzdF9pbXBvcnRfZnJvbV9kaWZmZXJlbnRfcGFja2FnZShzZWxmKToKICAgICAgICAgIyBUZXN0IGltcG9ydGluZyBmcm9tIGEgZGlmZmVyZW50IHBhY2thZ2UgdGhhbiB0aGUgY2FsbGVyLgpAQCAtMTg2LDggKzE4Niw4IEBACiAgICAgICAgICAgICAgICAgICAgICdfX3J1bnB5X3BrZ19fLnVuY2xlLmNvdXNpbi5uZXBoZXcnXQogICAgICAgICBnbG9iYWxzXyA9IHsnX19wYWNrYWdlX18nOiAnX19ydW5weV9wa2dfXy5fX3J1bnB5X3BrZ19fJ30KICAgICAgICAgZGVmIGNhbGxiYWNrKGdsb2JhbF8pOgotICAgICAgICAgICAgaW1wb3J0X3V0aWwuaW1wb3J0XygnX19ydW5weV9wa2dfXy5fX3J1bnB5X3BrZ19fJykKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydF91dGlsLmltcG9ydF8oJ3VuY2xlLmNvdXNpbicsIGdsb2JhbHNfLCB7fSwKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnX19ydW5weV9wa2dfXy5fX3J1bnB5X3BrZ19fJykKKyAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYuX19pbXBvcnRfXygndW5jbGUuY291c2luJywgZ2xvYmFsc18sIHt9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbWxpc3Q9WyduZXBoZXcnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWw9MikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCAnX19ydW5weV9wa2dfXy51bmNsZS5jb3VzaW4nKQpAQCAtMTk4LDIwICsxOTgsMTkgQEAKICAgICAgICAgY3JlYXRlID0gWydjcmFzaC5fX2luaXRfXycsICdjcmFzaC5tb2QnXQogICAgICAgICBnbG9iYWxzXyA9IFt7J19fcGFja2FnZV9fJzogJ2NyYXNoJywgJ19fbmFtZV9fJzogJ2NyYXNoJ31dCiAgICAgICAgIGRlZiBjYWxsYmFjayhnbG9iYWxfKToKLSAgICAgICAgICAgIGltcG9ydF91dGlsLmltcG9ydF8oJ2NyYXNoJykKLSAgICAgICAgICAgIG1vZCA9IGltcG9ydF91dGlsLmltcG9ydF8oJ21vZCcsIGdsb2JhbF8sIHt9LCBbXSwgMSkKKyAgICAgICAgICAgIHNlbGYuX19pbXBvcnRfXygnY3Jhc2gnKQorICAgICAgICAgICAgbW9kID0gc2VsZi5fX2ltcG9ydF9fKCdtb2QnLCBnbG9iYWxfLCB7fSwgW10sIDEpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5fX25hbWVfXywgJ2NyYXNoLm1vZCcpCiAgICAgICAgIHNlbGYucmVsYXRpdmVfaW1wb3J0X3Rlc3QoY3JlYXRlLCBnbG9iYWxzXywgY2FsbGJhY2spCiAKICAgICBkZWYgdGVzdF9yZWxhdGl2ZV9pbXBvcnRfbm9fZ2xvYmFscyhzZWxmKToKICAgICAgICAgIyBObyBnbG9iYWxzIGZvciBhIHJlbGF0aXZlIGltcG9ydCBpcyBhbiBlcnJvci4KICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6Ci0gICAgICAgICAgICBpbXBvcnRfdXRpbC5pbXBvcnRfKCdzeXMnLCBsZXZlbD0xKQorICAgICAgICAgICAgc2VsZi5fX2ltcG9ydF9fKCdzeXMnLCBsZXZlbD0xKQogCitGcm96ZW5fUmVsYXRpdmVJbXBvcnRzLCBTb3VyY2VfUmVsYXRpdmVJbXBvcnRzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFJlbGF0aXZlSW1wb3J0cywgX19pbXBvcnRfXz1pbXBvcnRfdXRpbC5fX2ltcG9ydF9fKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChSZWxhdGl2ZUltcG9ydHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL2ltcG9ydF8vdXRpbC5weQppbmRleCA4NmFjMDY1Li5kY2I0OTBmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9pbXBvcnRfL3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvaW1wb3J0Xy91dGlsLnB5CkBAIC0xLDIyICsxLDE0IEBACitmcm9tIC4uIGltcG9ydCB1dGlsCisKK2Zyb3plbl9pbXBvcnRsaWIsIHNvdXJjZV9pbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCisKK2ltcG9ydCBidWlsdGlucwogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IHVuaXR0ZXN0CiAKIAotdXNpbmdfX19pbXBvcnRfXyA9IEZhbHNlCi0KLQotZGVmIGltcG9ydF8oKmFyZ3MsICoqa3dhcmdzKToKLSAgICAiIiJEZWxlZ2F0ZSB0byBhbGxvdyBmb3IgaW5qZWN0aW5nIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbnMgb2YgaW1wb3J0LiIiIgotICAgIGlmIHVzaW5nX19faW1wb3J0X186Ci0gICAgICAgIHJldHVybiBfX2ltcG9ydF9fKCphcmdzLCAqKmt3YXJncykKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gaW1wb3J0bGliLl9faW1wb3J0X18oKmFyZ3MsICoqa3dhcmdzKQotCi0KLWRlZiBpbXBvcnRsaWJfb25seShmeG4pOgotICAgICIiIkRlY29yYXRvciB0byBza2lwIGEgdGVzdCBpZiB1c2luZyBfX2J1aWx0aW5zX18uX19pbXBvcnRfXy4iIiIKLSAgICByZXR1cm4gdW5pdHRlc3Quc2tpcElmKHVzaW5nX19faW1wb3J0X18sICJpbXBvcnRsaWItc3BlY2lmaWMgdGVzdCIpKGZ4bikKK19faW1wb3J0X18gPSBzdGF0aWNtZXRob2QoYnVpbHRpbnMuX19pbXBvcnRfXyksIHN0YXRpY21ldGhvZChzb3VyY2VfaW1wb3J0bGliLl9faW1wb3J0X18pCiAKIAogZGVmIG1vY2tfcGF0aF9ob29rKCplbnRyaWVzLCBpbXBvcnRlcik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2Zvby9vbmUucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2Zvby9vbmUucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL2JvdGhfcG9ydGlvbnMvZm9vL29uZS5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vb25lLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2Zvby90d28ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ib3RoX3BvcnRpb25zL2Zvby90d28ucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL2JvdGhfcG9ydGlvbnMvZm9vL3R3by5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28vdHdvLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9taXNzaW5nX2RpcmVjdG9yeS56aXAgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9taXNzaW5nX2RpcmVjdG9yeS56aXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL21pc3NpbmdfZGlyZWN0b3J5LnppcApyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbWlzc2luZ19kaXJlY3RvcnkuemlwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0LnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdC5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QvZW1wdHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlL2FfdGVzdC9lbXB0eQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QvZW1wdHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0L2VtcHR5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9uZXN0ZWRfcG9ydGlvbjEuemlwIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbmVzdGVkX3BvcnRpb24xLnppcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvbmVzdGVkX3BvcnRpb24xLnppcApyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbmVzdGVkX3BvcnRpb24xLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2Zvby9fX2luaXRfXy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vL19faW5pdF9fLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2Zvby9fX2luaXRfXy5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28vX19pbml0X18ucHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vL29uZS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vL29uZS5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3Mvbm90X2FfbmFtZXNwYWNlX3BrZy9mb28vb25lLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2Zvby9vbmUucHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3BvcnRpb24xL2Zvby9vbmUucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMS9mb28vb25lLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMS9mb28vb25lLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMS9mb28vb25lLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMi9mb28vdHdvLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjIvZm9vL3R3by5weQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjIvZm9vL3R3by5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjIvZm9vL3R3by5weQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDEvcGFyZW50L2NoaWxkL29uZS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QxL3BhcmVudC9jaGlsZC9vbmUucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QxL3BhcmVudC9jaGlsZC9vbmUucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QxL3BhcmVudC9jaGlsZC9vbmUucHkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QyL3BhcmVudC9jaGlsZC90d28ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0Mi9wYXJlbnQvY2hpbGQvdHdvLnB5CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBMaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0Mi9wYXJlbnQvY2hpbGQvdHdvLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0Mi9wYXJlbnQvY2hpbGQvdHdvLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQvY2hpbGQvdGhyZWUucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQvY2hpbGQvdGhyZWUucHkKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIExpYi90ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QzL3BhcmVudC9jaGlsZC90aHJlZS5weQpyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkL3RocmVlLnB5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC9uYW1lc3BhY2VfcGtncy90b3BfbGV2ZWxfcG9ydGlvbjEuemlwIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvdG9wX2xldmVsX3BvcnRpb24xLnppcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gTGliL3Rlc3QvbmFtZXNwYWNlX3BrZ3MvdG9wX2xldmVsX3BvcnRpb24xLnppcApyZW5hbWUgdG8gTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvdG9wX2xldmVsX3BvcnRpb24xLnppcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvX19pbml0X18ucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvX19pbml0X18ucHkKaW5kZXggM2VmOTdmMy4uNGIxNmVjYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL19faW5pdF9fLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS9fX2luaXRfXy5weQpAQCAtMSwxMyArMSw1IEBACi1mcm9tIC4uIGltcG9ydCB0ZXN0X3N1aXRlCi1pbXBvcnQgb3MucGF0aAotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBsb2FkX3BhY2thZ2VfdGVzdHMKIAotCi1kZWYgdGVzdF9zdWl0ZSgpOgotICAgIGRpcmVjdG9yeSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLSAgICByZXR1cm4gdGVzdC50ZXN0X3N1aXRlKCdpbXBvcnRsaWIudGVzdC5zb3VyY2UnLCBkaXJlY3RvcnkpCi0KLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KHRlc3Rfc3VpdGUoKSkKK2RlZiBsb2FkX3Rlc3RzKCphcmdzKToKKyAgICByZXR1cm4gbG9hZF9wYWNrYWdlX3Rlc3RzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICphcmdzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL19fbWFpbl9fLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYTIzYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvX19tYWluX18ucHkKQEAgLTAsMCArMSw0IEBACitmcm9tIC4gaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9hYmNfbG9hZGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZDkxMmI2Li4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2FiY19sb2FkZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw5MDYgKzAsMCBAQAotaW1wb3J0IGltcG9ydGxpYgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IGFiYwotCi1mcm9tIC4uIGltcG9ydCBhYmMgYXMgdGVzdGluZ19hYmMKLWZyb20gLi4gaW1wb3J0IHV0aWwKLWZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotCi1pbXBvcnQgaW1wCi1pbXBvcnQgaW5zcGVjdAotaW1wb3J0IGlvCi1pbXBvcnQgbWFyc2hhbAotaW1wb3J0IG9zCi1pbXBvcnQgc3lzCi1pbXBvcnQgdHlwZXMKLWltcG9ydCB1bml0dGVzdAotaW1wb3J0IHdhcm5pbmdzCi0KLQotY2xhc3MgU291cmNlT25seUxvYWRlck1vY2soYWJjLlNvdXJjZUxvYWRlcik6Ci0KLSAgICAjIEdsb2JhbHMgdGhhdCBzaG91bGQgYmUgZGVmaW5lZCBmb3IgYWxsIG1vZHVsZXMuCi0gICAgc291cmNlID0gKGIiXyA9ICc6Oicuam9pbihbX19uYW1lX18sIF9fZmlsZV9fLCBfX2NhY2hlZF9fLCBfX3BhY2thZ2VfXywgIgotICAgICAgICAgICAgICBiInJlcHIoX19sb2FkZXJfXyldKSIpCi0KLSAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aCk6Ci0gICAgICAgIHNlbGYucGF0aCA9IHBhdGgKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgYXNzZXJ0IHNlbGYucGF0aCA9PSBwYXRoCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLnBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOgotICAgICAgICByZXR1cm4gJzxtb2R1bGU+JwotCi0KLWNsYXNzIFNvdXJjZUxvYWRlck1vY2soU291cmNlT25seUxvYWRlck1vY2spOgotCi0gICAgc291cmNlX210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhdGgsIG1hZ2ljPWltcC5nZXRfbWFnaWMoKSk6Ci0gICAgICAgIHN1cGVyKCkuX19pbml0X18ocGF0aCkKLSAgICAgICAgc2VsZi5ieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5zb3VyY2Vfc2l6ZSA9IGxlbihzZWxmLnNvdXJjZSkKLSAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShtYWdpYykKLSAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5zb3VyY2VfbXRpbWUpKQotICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLnNvdXJjZV9zaXplKSkKLSAgICAgICAgY29kZV9vYmplY3QgPSBjb21waWxlKHNlbGYuc291cmNlLCBzZWxmLnBhdGgsICdleGVjJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9pbmhlcml0PVRydWUpCi0gICAgICAgIGRhdGEuZXh0ZW5kKG1hcnNoYWwuZHVtcHMoY29kZV9vYmplY3QpKQotICAgICAgICBzZWxmLmJ5dGVjb2RlID0gYnl0ZXMoZGF0YSkKLSAgICAgICAgc2VsZi53cml0dGVuID0ge30KLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCA9PSBzZWxmLnBhdGg6Ci0gICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5nZXRfZGF0YShwYXRoKQotICAgICAgICBlbGlmIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuYnl0ZWNvZGUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLQotICAgIGRlZiBwYXRoX3N0YXRzKHNlbGYsIHBhdGgpOgotICAgICAgICBhc3NlcnQgcGF0aCA9PSBzZWxmLnBhdGgKLSAgICAgICAgcmV0dXJuIHsnbXRpbWUnOiBzZWxmLnNvdXJjZV9tdGltZSwgJ3NpemUnOiBzZWxmLnNvdXJjZV9zaXplfQotCi0gICAgZGVmIHNldF9kYXRhKHNlbGYsIHBhdGgsIGRhdGEpOgotICAgICAgICBzZWxmLndyaXR0ZW5bcGF0aF0gPSBieXRlcyhkYXRhKQotICAgICAgICByZXR1cm4gcGF0aCA9PSBzZWxmLmJ5dGVjb2RlX3BhdGgKLQotCi1jbGFzcyBQeUxvYWRlck1vY2soYWJjLlB5TG9hZGVyKToKLQotICAgICMgR2xvYmFscyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIGZvciBhbGwgbW9kdWxlcy4KLSAgICBzb3VyY2UgPSAoYiJfID0gJzo6Jy5qb2luKFtfX25hbWVfXywgX19maWxlX18sIF9fcGFja2FnZV9fLCAiCi0gICAgICAgICAgICAgIGIicmVwcihfX2xvYWRlcl9fKV0pIikKLQotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkYXRhKToKLSAgICAgICAgIiIiVGFrZSBhIGRpY3Qgb2YgJ21vZHVsZV9uYW1lOiBwYXRoJyBwYWlyaW5ncy4KLQotICAgICAgICBQYXRocyBzaG91bGQgaGF2ZSBubyBmaWxlIGV4dGVuc2lvbiwgYWxsb3dpbmcgcGFja2FnZXMgdG8gYmUgZGVub3RlZCBieQotICAgICAgICBlbmRpbmcgaW4gJ19faW5pdF9fJy4KLQotICAgICAgICAiIiIKLSAgICAgICAgc2VsZi5tb2R1bGVfcGF0aHMgPSBkYXRhCi0gICAgICAgIHNlbGYucGF0aF90b19tb2R1bGUgPSB7dmFsOmtleSBmb3Iga2V5LHZhbCBpbiBkYXRhLml0ZW1zKCl9Ci0KLSAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGlmIHBhdGggbm90IGluIHNlbGYucGF0aF90b19tb2R1bGU6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHJldHVybiBzZWxmLnNvdXJjZQotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5iYXNlbmFtZShzZWxmLmdldF9maWxlbmFtZShuYW1lKSkKLSAgICAgICAgcmV0dXJuIG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzBdID09ICdfX2luaXRfXycKLQotICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgotICAgICAgICAiIiJTaWxlbmNlIGRlcHJlY2F0aW9uIHdhcm5pbmcuIiIiCi0gICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHc6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImFsd2F5cyIpCi0gICAgICAgICAgICBwYXRoID0gc3VwZXIoKS5nZXRfZmlsZW5hbWUobmFtZSkKLSAgICAgICAgICAgIGFzc2VydCBsZW4odykgPT0gMQotICAgICAgICAgICAgYXNzZXJ0IGlzc3ViY2xhc3Mod1swXS5jYXRlZ29yeSwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgICAgICAgICAgcmV0dXJuIHBhdGgKLQotICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmKToKLSAgICAgICAgcmV0dXJuICc8bW9kdWxlPicKLQotCi1jbGFzcyBQeUxvYWRlckNvbXBhdE1vY2soUHlMb2FkZXJNb2NrKToKLQotICAgICIiIk1vY2sgdGhhdCBtYXRjaGVzIHdoYXQgaXMgc3VnZ2VzdGVkIHRvIGhhdmUgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlCi0gICAgZnJvbSBQeXRob24gMy4xIG9ud2FyZHMuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlX3BhdGhzW2Z1bGxuYW1lXQotICAgICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgotCi0gICAgZGVmIHNvdXJjZV9wYXRoKHNlbGYsIGZ1bGxuYW1lKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2ZpbGVuYW1lKGZ1bGxuYW1lKQotICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0KLWNsYXNzIFB5UHljTG9hZGVyTW9jayhhYmMuUHlQeWNMb2FkZXIsIFB5TG9hZGVyTW9jayk6Ci0KLSAgICBkZWZhdWx0X210aW1lID0gMQotCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIHNvdXJjZSwgYmM9e30pOgotICAgICAgICAiIiJJbml0aWFsaXplIG1vY2suCi0KLSAgICAgICAgJ2JjJyBpcyBhIGRpY3Qga2V5ZWQgb24gYSBtb2R1bGUncyBuYW1lLiBUaGUgdmFsdWUgaXMgZGljdCB3aXRoCi0gICAgICAgIHBvc3NpYmxlIGtleXMgb2YgJ3BhdGgnLCAnbXRpbWUnLCAnbWFnaWMnLCBhbmQgJ2JjJy4gRXhjZXB0IGZvciAncGF0aCcsCi0gICAgICAgIGVhY2ggb2YgdGhvc2Uga2V5cyBjb250cm9sIGlmIGFueSBwYXJ0IG9mIGNyZWF0ZWQgYnl0ZWNvZGUgaXMgdG8KLSAgICAgICAgZGV2aWF0ZSBmcm9tIGRlZmF1bHQgdmFsdWVzLgotCi0gICAgICAgICIiIgotICAgICAgICBzdXBlcigpLl9faW5pdF9fKHNvdXJjZSkKLSAgICAgICAgc2VsZi5tb2R1bGVfYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLnBhdGhfdG9fYnl0ZWNvZGUgPSB7fQotICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGggPSB7fQotICAgICAgICBmb3IgbmFtZSwgZGF0YSBpbiBiYy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5wYXRoX3RvX2J5dGVjb2RlW2RhdGFbJ3BhdGgnXV0gPSBuYW1lCi0gICAgICAgICAgICBzZWxmLmJ5dGVjb2RlX3RvX3BhdGhbbmFtZV0gPSBkYXRhWydwYXRoJ10KLSAgICAgICAgICAgIG1hZ2ljID0gZGF0YS5nZXQoJ21hZ2ljJywgaW1wLmdldF9tYWdpYygpKQotICAgICAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3dfbG9uZyhkYXRhLmdldCgnbXRpbWUnLCBzZWxmLmRlZmF1bHRfbXRpbWUpKQotICAgICAgICAgICAgc291cmNlX3NpemUgPSBpbXBvcnRsaWIuX3dfbG9uZyhsZW4oc2VsZi5zb3VyY2UpICYgMHhGRkZGRkZGRikKLSAgICAgICAgICAgIGlmICdiYycgaW4gZGF0YToKLSAgICAgICAgICAgICAgICBiYyA9IGRhdGFbJ2JjJ10KLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgYmMgPSBzZWxmLmNvbXBpbGVfYmMobmFtZSkKLSAgICAgICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gbWFnaWMgKyBtdGltZSArIHNvdXJjZV9zaXplICsgYmMKLQotICAgIGRlZiBjb21waWxlX2JjKHNlbGYsIG5hbWUpOgotICAgICAgICBzb3VyY2VfcGF0aCA9IHNlbGYubW9kdWxlX3BhdGhzLmdldChuYW1lLCAnPHRlc3Q+Jykgb3IgJzx0ZXN0PicKLSAgICAgICAgY29kZSA9IGNvbXBpbGUoc2VsZi5zb3VyY2UsIHNvdXJjZV9wYXRoLCAnZXhlYycpCi0gICAgICAgIHJldHVybiBtYXJzaGFsLmR1bXBzKGNvZGUpCi0KLSAgICBkZWYgc291cmNlX210aW1lKHNlbGYsIG5hbWUpOgotICAgICAgICBpZiBuYW1lIGluIHNlbGYubW9kdWxlX3BhdGhzOgotICAgICAgICAgICAgcmV0dXJuIHNlbGYuZGVmYXVsdF9tdGltZQotICAgICAgICBlbGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfYnl0ZWNvZGU6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiBieXRlY29kZV9wYXRoKHNlbGYsIG5hbWUpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICByZXR1cm4gc2VsZi5ieXRlY29kZV90b19wYXRoW25hbWVdCi0gICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKLSAgICAgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5tb2R1bGVfcGF0aHM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKLQotICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBuYW1lLCBieXRlY29kZSk6Ci0gICAgICAgIHNlbGYubW9kdWxlX2J5dGVjb2RlW25hbWVdID0gYnl0ZWNvZGUKLSAgICAgICAgcmV0dXJuIFRydWUKLQotICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKLSAgICAgICAgaWYgcGF0aCBpbiBzZWxmLnBhdGhfdG9fbW9kdWxlOgotICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKLSAgICAgICAgZWxpZiBwYXRoIGluIHNlbGYucGF0aF90b19ieXRlY29kZToKLSAgICAgICAgICAgIG5hbWUgPSBzZWxmLnBhdGhfdG9fYnl0ZWNvZGVbcGF0aF0KLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZV9ieXRlY29kZVtuYW1lXQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgotCi0gICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJldHVybiBzdXBlcigpLmlzX3BhY2thZ2UobmFtZSkKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHJldHVybiAnX19pbml0X18nIGluIHNlbGYuYnl0ZWNvZGVfdG9fcGF0aFtuYW1lXQotCi0gICAgZGVmIGdldF9jb2RlKHNlbGYsIG5hbWUpOgotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyB3OgotICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJhbHdheXMiKQotICAgICAgICAgICAgY29kZV9vYmplY3QgPSBzdXBlcigpLmdldF9jb2RlKG5hbWUpCi0gICAgICAgICAgICBhc3NlcnQgbGVuKHcpID09IDEKLSAgICAgICAgICAgIGFzc2VydCBpc3N1YmNsYXNzKHdbMF0uY2F0ZWdvcnksIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIHJldHVybiBjb2RlX29iamVjdAotCi1jbGFzcyBQeUxvYWRlclRlc3RzKHRlc3RpbmdfYWJjLkxvYWRlclRlc3RzKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyLiIiIgotCi0gICAgbW9ja2VyID0gUHlMb2FkZXJNb2NrCi0KLSAgICBkZWYgZXFfYXR0cnMoc2VsZiwgb2IsICoqa3dhcmdzKToKLSAgICAgICAgZm9yIGF0dHIsIHZhbCBpbiBrd2FyZ3MuaXRlbXMoKToKLSAgICAgICAgICAgIGZvdW5kID0gZ2V0YXR0cihvYiwgYXR0cikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHZhbCwKLSAgICAgICAgICAgICAgICAgICAgInt9IGF0dHJpYnV0ZToge30gIT0ge30iLmZvcm1hdChhdHRyLCBmb3VuZCwgdmFsKSkKLQotICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8bW9kdWxlPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignJywgJ3BhdGgnLCAndG8nLCAnbW9kdWxlJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189JycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub3QgaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICc8cGtnPicKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsIG5hbWUsICdfX2luaXRfXycpCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzeXMubW9kdWxlcykKLSAgICAgICAgc2VsZi5lcV9hdHRycyhtb2R1bGUsIF9fbmFtZV9fPW5hbWUsIF9fZmlsZV9fPXBhdGgsCi0gICAgICAgICAgICAgICAgX19wYXRoX189W29zLnBhdGguZGlybmFtZShwYXRoKV0sIF9fcGFja2FnZV9fPW5hbWUsCi0gICAgICAgICAgICAgICAgX19sb2FkZXJfXz1tb2NrKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG5hbWUgPSAncGtnLm1vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdwa2cnLCAnbW9kJykKLSAgICAgICAgbW9jayA9IHNlbGYubW9ja2VyKHtuYW1lOiBwYXRofSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICBzZWxmLmVxX2F0dHJzKG1vZHVsZSwgX19uYW1lX189bmFtZSwgX19maWxlX189cGF0aCwgX19wYWNrYWdlX189J3BrZycsCi0gICAgICAgICAgICAgICAgICAgICAgICBfX2xvYWRlcl9fPW1vY2spCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQotICAgICAgICByZXR1cm4gbW9jaywgbmFtZQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKQotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQotICAgICAgICBtb2NrID0gc2VsZi5tb2NrZXIoe25hbWU6IHBhdGh9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgICAgICBsb2FkZWRfbW9kdWxlID0gbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWRfbW9kdWxlLCBtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW25hbWVdLCBtb2R1bGUpCi0gICAgICAgIHJldHVybiBtb2NrLCBuYW1lCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBuYW1lID0gIm1vZCIKLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKLSAgICAgICAgbW9kdWxlLmJsYWggPSBOb25lCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhaZXJvRGl2aXNpb25FcnJvcik6Ci0gICAgICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1tuYW1lXSwgbW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCAnYmxhaCcpKQotICAgICAgICByZXR1cm4gbW9jawotCi0gICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICJtb2QiCi0gICAgICAgIG1vY2sgPSBzZWxmLm1vY2tlcih7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgbW9jay5zb3VyY2UgPSBiIjEvMCIKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKLSAgICAgICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIHN5cy5tb2R1bGVzKQotICAgICAgICByZXR1cm4gbW9jawotCi0KLWNsYXNzIFB5TG9hZGVyQ29tcGF0VGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgdGhlIHN1Z2dlc3RlZCBjb2RlIHRvIG1ha2UgYSBsb2FkZXIgdGhhdCBpcyBjb21wYXRpYmxlIGZyb20KLSAgICBQeXRob24gMy4xIGZvcndhcmQgd29ya3MuIiIiCi0KLSAgICBtb2NrZXIgPSBQeUxvYWRlckNvbXBhdE1vY2sKLQotCi1jbGFzcyBQeUxvYWRlckludGVyZmFjZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIuYWJjLlB5TG9hZGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHdoZW4gc291cmNlX3BhdGgoKQotICAgIGRvZXNuJ3QgcmV0dXJuIGEgcGF0aCBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkLiIiIgotCi0gICAgZGVmIHRlc3Rfbm9fc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgTm8gc291cmNlIHBhdGggc2hvdWxkIGxlYWQgdG8gSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlMb2FkZXJNb2NrKHt9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfaXNfTm9uZShzZWxmKToKLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeUxvYWRlck1vY2soe25hbWU6IE5vbmV9KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lX3dpdGhfc291cmNlX3BhdGgoc2VsZik6Ci0gICAgICAgICMgZ2V0X2ZpbGVuYW1lKCkgc2hvdWxkIHJldHVybiB3aGF0IHNvdXJjZV9wYXRoKCkgcmV0dXJucy4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnc291cmNlJykKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogcGF0aH0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9maWxlbmFtZShuYW1lKSwgcGF0aCkKLQotICAgIGRlZiB0ZXN0X2dldF9maWxlbmFtZV9ub19zb3VyY2VfcGF0aChzZWxmKToKLSAgICAgICAgIyBnZXRfZmlsZW5hbWUoKSBzaG91bGQgcmFpc2UgSW1wb3J0RXJyb3IgaWYgc291cmNlX3BhdGggcmV0dXJucyBOb25lLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5TG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmdldF9maWxlbmFtZShuYW1lKQotCi0KLWNsYXNzIFB5UHljTG9hZGVyVGVzdHMoUHlMb2FkZXJUZXN0cyk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlci4iIiIKLQotICAgIG1vY2tlciA9IFB5UHljTG9hZGVyTW9jawotCi0gICAgQHNvdXJjZV91dGlsLndyaXRlc19ieXRlY29kZV9maWxlcwotICAgIGRlZiB2ZXJpZnlfYnl0ZWNvZGUoc2VsZiwgbW9jaywgbmFtZSk6Ci0gICAgICAgIGFzc2VydCBuYW1lIGluIG1vY2subW9kdWxlX3BhdGhzCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLSAgICAgICAgbXRpbWUgPSBpbXBvcnRsaWIuX3JfbG9uZyhtb2NrLm1vZHVsZV9ieXRlY29kZVtuYW1lXVs0OjhdKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG10aW1lLCAxKQotICAgICAgICBzb3VyY2Vfc2l6ZSA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzg6MTJdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG1vY2suc291cmNlKSAmIDB4RkZGRkZGRkYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLl9yX2xvbmcoc291cmNlX3NpemUpKQotICAgICAgICBiYyA9IG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzEyOl0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYywgbW9jay5jb21waWxlX2JjKG5hbWUpKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X3BhY2thZ2UoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbGFja2luZ19wYXJlbnQoc2VsZik6Ci0gICAgICAgIG1vY2ssIG5hbWUgPSBzdXBlcigpLnRlc3RfbGFja2luZ19wYXJlbnQoKQotICAgICAgICBzZWxmLnZlcmlmeV9ieXRlY29kZShtb2NrLCBuYW1lKQotCi0gICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgotICAgICAgICBtb2NrLCBuYW1lID0gc3VwZXIoKS50ZXN0X21vZHVsZV9yZXVzZSgpCi0gICAgICAgIHNlbGYudmVyaWZ5X2J5dGVjb2RlKG1vY2ssIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zdGF0ZV9hZnRlcl9mYWlsdXJlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3Rfc3RhdGVfYWZ0ZXJfZmFpbHVyZSgpCi0KLSAgICBkZWYgdGVzdF91bmxvYWRhYmxlKHNlbGYpOgotICAgICAgICBzdXBlcigpLnRlc3RfdW5sb2FkYWJsZSgpCi0KLQotY2xhc3MgUHlQeWNMb2FkZXJJbnRlcmZhY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IGZvciB0aGUgaW50ZXJmYWNlIG9mIGltcG9ydGxpYi5hYmMuUHlQeWNMb2FkZXIuIiIiCi0KLSAgICBkZWYgZ2V0X2ZpbGVuYW1lX2NoZWNrKHNlbGYsIHNyY19wYXRoLCBiY19wYXRoLCBleHBlY3QpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogc3JjX3BhdGh9LCB7bmFtZTogeydwYXRoJzogYmNfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIGFzc2VydCBtb2NrLnNvdXJjZV9wYXRoKG5hbWUpID09IHNyY19wYXRoCi0gICAgICAgICAgICBhc3NlcnQgbW9jay5ieXRlY29kZV9wYXRoKG5hbWUpID09IGJjX3BhdGgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5nZXRfZmlsZW5hbWUobmFtZSksIGV4cGVjdCkKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdoZW4gc291cmNlIGFuZCBieXRlY29kZSBwYXRocyBwcmVzZW50LCByZXR1cm4gdGhlIHNvdXJjZSBwYXRoLgotICAgICAgICBzZWxmLmdldF9maWxlbmFtZV9jaGVjaygnc291cmNlX3BhdGgnLCAnYmNfcGF0aCcsICdzb3VyY2VfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX3NvdXJjZV9ub19iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIHNvdXJjZSBidXQgbm8gYmMsIHJldHVybiBzb3VyY2UgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soJ3NvdXJjZV9wYXRoJywgTm9uZSwgJ3NvdXJjZV9wYXRoJykKLQotICAgIGRlZiB0ZXN0X2ZpbGVuYW1lX3dpdGhfbm9fc291cmNlX2JjKHNlbGYpOgotICAgICAgICAjIFdpdGggbm90IHNvdXJjZSBidXQgYmMsIHJldHVybiB0aGUgYmMgcGF0aC4KLSAgICAgICAgc2VsZi5nZXRfZmlsZW5hbWVfY2hlY2soTm9uZSwgJ2JjX3BhdGgnLCAnYmNfcGF0aCcpCi0KLSAgICBkZWYgdGVzdF9maWxlbmFtZV93aXRoX25vX3NvdXJjZV9vcl9iYyhzZWxmKToKLSAgICAgICAgIyBXaXRoIG5vIHNvdXJjZSBvciBiYywgcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwge25hbWU6IHsncGF0aCc6IE5vbmV9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKLSAgICAgICAgICAgIG1vY2suZ2V0X2ZpbGVuYW1lKG5hbWUpCi0KLQotY2xhc3MgU2tpcFdyaXRpbmdCeXRlY29kZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgdGhhdCBieXRlY29kZSBpcyBwcm9wZXJseSBoYW5kbGVkIGJhc2VkIG9uCi0gICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHJ1bl90ZXN0KHNlbGYsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpOgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSkKLSAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBkb250X3dyaXRlX2J5dGVjb2RlCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydElzTm90KG5hbWUgaW4gbW9jay5tb2R1bGVfYnl0ZWNvZGUsIGRvbnRfd3JpdGVfYnl0ZWNvZGUpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KFRydWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV93cml0dGVuKHNlbGYpOgotICAgICAgICBzZWxmLnJ1bl90ZXN0KEZhbHNlKQotCi0KLWNsYXNzIFJlZ2VuZXJhdGVkQnl0ZWNvZGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoYXQgYnl0ZWNvZGUgaXMgcmVnZW5lcmF0ZWQgYXMgZXhwZWN0ZWQuIiIiCi0KLSAgICBAc291cmNlX3V0aWwud3JpdGVzX2J5dGVjb2RlX2ZpbGVzCi0gICAgZGVmIHRlc3RfZGlmZmVyZW50X21hZ2ljKHNlbGYpOgotICAgICAgICAjIEEgZGlmZmVyZW50IG1hZ2ljIG51bWJlciBzaG91bGQgbGVhZCB0byBuZXcgYnl0ZWNvZGUuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYWRfbWFnaWMgPSBiJ1x4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGFzc2VydCBiYWRfbWFnaWMgIT0gaW1wLmdldF9tYWdpYygpCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2QuYnl0ZWNvZGUnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWFnaWMnOiBiYWRfbWFnaWN9fSkKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgbW9jay5tb2R1bGVfYnl0ZWNvZGUpCi0gICAgICAgIG1hZ2ljID0gbW9jay5tb2R1bGVfYnl0ZWNvZGVbbmFtZV1bOjRdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFnaWMsIGltcC5nZXRfbWFnaWMoKSkKLQotICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKLSAgICBkZWYgdGVzdF9vbGRfbXRpbWUoc2VsZik6Ci0gICAgICAgICMgQnl0ZWNvZGUgd2l0aCBhbiBvbGRlciBtdGltZSBzaG91bGQgYmUgcmVnZW5lcmF0ZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBvbGRfbXRpbWUgPSBQeVB5Y0xvYWRlck1vY2suZGVmYXVsdF9tdGltZSAtIDEKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogb3MucGF0aC5qb2luKCdwYXRoJywgJ3RvJywgJ21vZCcpfSwKLSAgICAgICAgICAgICAgICB7bmFtZTogeydwYXRoJzogJ3BhdGgvdG8vbW9kLmJ5dGVjb2RlJywgJ210aW1lJzogb2xkX210aW1lfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIG1vY2subW9kdWxlX2J5dGVjb2RlKQotICAgICAgICBtdGltZSA9IGltcG9ydGxpYi5fcl9sb25nKG1vY2subW9kdWxlX2J5dGVjb2RlW25hbWVdWzQ6OF0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXRpbWUsIFB5UHljTG9hZGVyTW9jay5kZWZhdWx0X210aW1lKQotCi0KLWNsYXNzIEJhZEJ5dGVjb2RlRmFpbHVyZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgICIiIlRlc3QgaW1wb3J0IGZhaWx1cmVzIHdoZW4gdGhlcmUgaXMgbm8gc291cmNlIGFuZCBwYXJ0cyBvZiB0aGUgYnl0ZWNvZGUKLSAgICBpcyBiYWQuIiIiCi0KLSAgICBkZWYgdGVzdF9iYWRfbWFnaWMoc2VsZik6Ci0gICAgICAgICMgQSBiYWQgbWFnaWMgbnVtYmVyIHNob3VsZCBsZWFkIHRvIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgYmFkX21hZ2ljID0gYidceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiYyA9IHtuYW1lOgotICAgICAgICAgICAgICAgIHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwKLSAgICAgICAgICAgICAgICAgJ21hZ2ljJzogYmFkX21hZ2ljfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpIGFzIGNtOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBuYW1lKQotCi0gICAgZGVmIHRlc3Rfbm9fYnl0ZWNvZGUoc2VsZik6Ci0gICAgICAgICMgTWlzc2luZyBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhbiBFT0ZFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJjID0ge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKSwgJ2JjJzogYicnfX0KLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0sIGJjKQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKSwgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgotICAgICAgICAgICAgbW9jay5sb2FkX21vZHVsZShuYW1lKQotCi0gICAgZGVmIHRlc3RfYmFkX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIE1hbGZvcm1lZCBjb2RlIG9iamVjdCBieXRlY29kZSBzaG91bGQgbGVhZCB0byBhIFZhbHVlRXJyb3IuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBiYyA9IHtuYW1lOiB7J3BhdGgnOiBvcy5wYXRoLmpvaW4oJ3BhdGgnLCAndG8nLCAnbW9kJyksICdiYyc6IGInMTIzNCd9fQotICAgICAgICBtb2NrID0gUHlQeWNMb2FkZXJNb2NrKHtuYW1lOiBOb25lfSwgYmMpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1kZWYgcmFpc2VfSW1wb3J0RXJyb3IoKmFyZ3MsICoqa3dhcmdzKToKLSAgICByYWlzZSBJbXBvcnRFcnJvcgotCi1jbGFzcyBNaXNzaW5nUGF0aHNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHdoYXQgaGFwcGVucyB3aGVuIGEgc291cmNlIG9yIGJ5dGVjb2RlIHBhdGggZG9lcyBub3QgZXhpc3QgKGVpdGhlcgotICAgIGZyb20gKl9wYXRoIHJldHVybmluZyBOb25lIG9yIHJhaXNpbmcgSW1wb3J0RXJyb3IpLiIiIgotCi0gICAgZGVmIHRlc3Rfc291cmNlX3BhdGhfTm9uZShzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBzaG91bGQgYmUgdXNlZCB3aGVuIHNvdXJjZV9wYXRoIHJldHVybnMgTm9uZSwgYWxvbmcgd2l0aAotICAgICAgICAjIF9fZmlsZV9fIGJlaW5nIHNldCB0byB0aGUgYnl0ZWNvZGUgcGF0aC4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIGJ5dGVjb2RlX3BhdGggPSAncGF0aC90by9tb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IE5vbmV9LCB7bmFtZTogeydwYXRoJzogYnl0ZWNvZGVfcGF0aH19KQotICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IG1vY2subG9hZF9tb2R1bGUobmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIGJ5dGVjb2RlX3BhdGgpCi0KLSAgICAjIFRlc3RpbmcgZm9yIGJ5dGVjb2RlX3BhdGggcmV0dXJuaW5nIE5vbmUgaGFuZGxlZCBieSBhbGwgdGVzdHMgd2hlcmUgbm8KLSAgICAjIGJ5dGVjb2RlIGluaXRpYWxseSBleGlzdHMuCi0KLSAgICBkZWYgdGVzdF9hbGxfcGF0aHNfTm9uZShzZWxmKToKLSAgICAgICAgIyBJZiBhbGwgKl9wYXRoIG1ldGhvZHMgcmV0dXJuIE5vbmUsIHJhaXNlIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7bmFtZTogTm9uZX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLm5hbWUsIG5hbWUpCi0KLSAgICBkZWYgdGVzdF9zb3VyY2VfcGF0aF9JbXBvcnRFcnJvcihzZWxmKToKLSAgICAgICAgIyBBbiBJbXBvcnRFcnJvciBmcm9tIHNvdXJjZV9wYXRoIHNob3VsZCB0cmlnZ2VyIGFuIEltcG9ydEVycm9yLgotICAgICAgICBuYW1lID0gJ21vZCcKLSAgICAgICAgbW9jayA9IFB5UHljTG9hZGVyTW9jayh7fSwge25hbWU6IHsncGF0aCc6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ21vZCcpfX0pCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpLCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBtb2NrLmxvYWRfbW9kdWxlKG5hbWUpCi0KLSAgICBkZWYgdGVzdF9ieXRlY29kZV9wYXRoX0ltcG9ydEVycm9yKHNlbGYpOgotICAgICAgICAjIEFuIEltcG9ydEVycm9yIGZyb20gYnl0ZWNvZGVfcGF0aCBzaG91bGQgdHJpZ2dlciBhbiBJbXBvcnRFcnJvci4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBQeVB5Y0xvYWRlck1vY2soe25hbWU6IG9zLnBhdGguam9pbigncGF0aCcsICd0bycsICdtb2QnKX0pCi0gICAgICAgIGJhZF9tZXRoID0gdHlwZXMuTWV0aG9kVHlwZShyYWlzZV9JbXBvcnRFcnJvciwgbW9jaykKLSAgICAgICAgbW9jay5ieXRlY29kZV9wYXRoID0gYmFkX21ldGgKLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSksIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIG1vY2subG9hZF9tb2R1bGUobmFtZSkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZiwgKiwgaXNfcGFja2FnZT1UcnVlLCAqKmt3YXJncyk6Ci0gICAgICAgIHNlbGYucGFja2FnZSA9ICdwa2cnCi0gICAgICAgIGlmIGlzX3BhY2thZ2U6Ci0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnX19pbml0X18ucHknKQotICAgICAgICAgICAgc2VsZi5uYW1lID0gc2VsZi5wYWNrYWdlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2R1bGVfbmFtZSA9ICdtb2QnCi0gICAgICAgICAgICBzZWxmLnBhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5wYWNrYWdlLCAnLicuam9pbihbJ21vZCcsICdweSddKSkKLSAgICAgICAgICAgIHNlbGYubmFtZSA9ICcuJy5qb2luKFtzZWxmLnBhY2thZ2UsIG1vZHVsZV9uYW1lXSkKLSAgICAgICAgc2VsZi5jYWNoZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICBzZWxmLmxvYWRlciA9IHNlbGYubG9hZGVyX21vY2soc2VsZi5wYXRoLCAqKmt3YXJncykKLQotICAgIGRlZiB2ZXJpZnlfbW9kdWxlKHNlbGYsIG1vZHVsZSk6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fZmlsZV9fLCBzZWxmLnBhdGgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2xvYWRlcl9fLCBzZWxmLmxvYWRlcikKLSAgICAgICAgdmFsdWVzID0gbW9kdWxlLl8uc3BsaXQoJzo6JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMF0sIHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMV0sIHNlbGYucGF0aCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWx1ZXNbMl0sIHNlbGYuY2FjaGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1szXSwgc2VsZi5wYWNrYWdlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1s0XSwgcmVwcihzZWxmLmxvYWRlcikpCi0KLSAgICBkZWYgdmVyaWZ5X2NvZGUoc2VsZiwgY29kZV9vYmplY3QpOgotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9IHNlbGYucGF0aAotICAgICAgICBtb2R1bGUuX19jYWNoZWRfXyA9IHNlbGYuY2FjaGVkCi0gICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHNlbGYucGFja2FnZQotICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IHNlbGYubG9hZGVyCi0gICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFtdCi0gICAgICAgIGV4ZWMoY29kZV9vYmplY3QsIG1vZHVsZS5fX2RpY3RfXykKLSAgICAgICAgc2VsZi52ZXJpZnlfbW9kdWxlKG1vZHVsZSkKLQotCi1jbGFzcyBTb3VyY2VPbmx5TG9hZGVyVGVzdHMoU291cmNlTG9hZGVyVGVzdEhhcm5lc3MpOgotCi0gICAgIiIiVGVzdCBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlciBmb3Igc291cmNlLW9ubHkgbG9hZGluZy4KLQotICAgIFJlbG9hZCB0ZXN0aW5nIGlzIHN1YnN1bWVkIGJ5IHRoZSB0ZXN0cyBmb3IKLSAgICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KLQotICAgICIiIgotCi0gICAgbG9hZGVyX21vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jawotCi0gICAgZGVmIHRlc3RfZ2V0X3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBWZXJpZnkgdGhlIHNvdXJjZSBjb2RlIGlzIHJldHVybmVkIGFzIGEgc3RyaW5nLgotICAgICAgICAjIElmIGFuIElPRXJyb3IgaXMgcmFpc2VkIGJ5IGdldF9kYXRhIHRoZW4gcmFpc2UgSW1wb3J0RXJyb3IuCi0gICAgICAgIGV4cGVjdGVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLnNvdXJjZS5kZWNvZGUoJ3V0Zi04JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSksIGV4cGVjdGVkX3NvdXJjZSkKLSAgICAgICAgZGVmIHJhaXNlX0lPRXJyb3IocGF0aCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yCi0gICAgICAgIHNlbGYubG9hZGVyLmdldF9kYXRhID0gcmFpc2VfSU9FcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5uYW1lLCBzZWxmLm5hbWUpCi0KLSAgICBkZWYgdGVzdF9pc19wYWNrYWdlKHNlbGYpOgotICAgICAgICAjIFByb3Blcmx5IGRldGVjdCB3aGVuIGxvYWRpbmcgYSBwYWNrYWdlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUpKQotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9VHJ1ZSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSArICcuX19pbml0X18nKSkKLQotICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgotICAgICAgICAjIFZlcmlmeSB0aGUgY29kZSBvYmplY3QgaXMgY3JlYXRlZC4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKLSAgICAgICAgIyBMb2FkaW5nIGEgbW9kdWxlIHNob3VsZCBzZXQgX19uYW1lX18sIF9fbG9hZGVyX18sIF9fcGFja2FnZV9fLAotICAgICAgICAjIF9fcGF0aF9fIChmb3IgcGFja2FnZXMpLCBfX2ZpbGVfXywgYW5kIF9fY2FjaGVkX18uCi0gICAgICAgICMgVGhlIG1vZHVsZSBzaG91bGQgYWxzbyBiZSBwdXQgaW50byBzeXMubW9kdWxlcy4KLSAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKLSAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhdGhfXywgW29zLnBhdGguZGlybmFtZShzZWxmLnBhdGgpXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzeXMubW9kdWxlcykKLQotICAgIGRlZiB0ZXN0X3BhY2thZ2Vfc2V0dGluZ3Moc2VsZik6Ci0gICAgICAgICMgX19wYWNrYWdlX18gbmVlZHMgdG8gYmUgc2V0LCB3aGlsZSBfX3BhdGhfXyBpcyBzZXQgb24gaWYgdGhlIG1vZHVsZQotICAgICAgICAjIGlzIGEgcGFja2FnZS4KLSAgICAgICAgIyBUZXN0aW5nIHRoZSB2YWx1ZXMgZm9yIGEgcGFja2FnZSBhcmUgY292ZXJlZCBieSB0ZXN0X2xvYWRfbW9kdWxlLgotICAgICAgICBzZWxmLnNldFVwKGlzX3BhY2thZ2U9RmFsc2UpCi0gICAgICAgIHdpdGggdXRpbC51bmNhY2hlKHNlbGYubmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCi0gICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5vdCBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykpCi0KLSAgICBkZWYgdGVzdF9nZXRfc291cmNlX2VuY29kaW5nKHNlbGYpOgotICAgICAgICAjIFNvdXJjZSBpcyBjb25zaWRlcmVkIGVuY29kZWQgaW4gVVRGLTggYnkgZGVmYXVsdCB1bmxlc3Mgb3RoZXJ3aXNlCi0gICAgICAgICMgc3BlY2lmaWVkIGJ5IGFuIGVuY29kaW5nIGxpbmUuCi0gICAgICAgIHNvdXJjZSA9ICJfID0gJ8O8JyIKLSAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLSAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBsYXRpbi0xXG5fID0gw7wiCi0gICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQotICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKLQotCi1AdW5pdHRlc3Quc2tpcElmKHN5cy5kb250X3dyaXRlX2J5dGVjb2RlLCAic3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgaXMgdHJ1ZSIpCi1jbGFzcyBTb3VyY2VMb2FkZXJCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKLQotICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIncyB1c2Ugb2YgYnl0ZWNvZGUuCi0KLSAgICBTb3VyY2Utb25seSB0ZXN0aW5nIGhhbmRsZWQgYnkgU291cmNlT25seUxvYWRlclRlc3RzLgotCi0gICAgIiIiCi0KLSAgICBsb2FkZXJfbW9jayA9IFNvdXJjZUxvYWRlck1vY2sKLQotICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCwgKiwgYnl0ZWNvZGVfd3JpdHRlbj1GYWxzZSk6Ci0gICAgICAgIHN1cGVyKCkudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0gICAgICAgIGlmIGJ5dGVjb2RlX3dyaXR0ZW46Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuY2FjaGVkLCBzZWxmLmxvYWRlci53cml0dGVuKQotICAgICAgICAgICAgZGF0YSA9IGJ5dGVhcnJheShpbXAuZ2V0X21hZ2ljKCkpCi0gICAgICAgICAgICBkYXRhLmV4dGVuZChpbXBvcnRsaWIuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQoaW1wb3J0bGliLl93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX3NpemUpKQotICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgotICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCi0KLSAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKLSAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKLSAgICAgICAgIyBTYW5pdHkgY2hlY2sKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKLSAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKLSAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCi0gICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLQotICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKLSAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgotICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKLSAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCi0gICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQotICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCi0gICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KLSAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCi0KLSAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKLSAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCi0gICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKLSAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCi0gICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCi0gICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCi0KLSAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgotICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCi0gICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCi0gICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCi0KLSAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKLSAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgotICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCi0gICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLnNldF9kYXRhCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18uc2V0X2RhdGEKLSAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQotICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCi0KLSAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKLSAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgSU9FcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KLSAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgotICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKLSAgICAgICAgICAgICAgICByYWlzZSBleGMKLSAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCi0KLSAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQotICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQotICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKLSAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKLQotCi1jbGFzcyBTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgotCi0gICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKLSAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gJ3ggPSAiw7wiJwotICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKLSAgICAgICAgcmV0dXJuZWRfc291cmNlID0gbW9jay5nZXRfc291cmNlKG5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmV0dXJuZWRfc291cmNlLCBzb3VyY2UpCi0KLSAgICBkZWYgdGVzdF9kZWNvZGVkX3NvdXJjZShzZWxmKToKLSAgICAgICAgIyBEZWNvZGluZyBzaG91bGQgd29yay4KLSAgICAgICAgbmFtZSA9ICdtb2QnCi0gICAgICAgIG1vY2sgPSBTb3VyY2VPbmx5TG9hZGVyTW9jaygibW9kLmZpbGUiKQotICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IExhdGluLTFcbng9J8O8JyIKLSAgICAgICAgYXNzZXJ0IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKSAhPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCi0gICAgICAgIHJldHVybmVkX3NvdXJjZSA9IG1vY2suZ2V0X3NvdXJjZShuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQotCi0gICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgotICAgICAgICAjIFBFUCAzMDIgc2F5cyB1bml2ZXJzYWwgbmV3bGluZXMgc2hvdWxkIGJlIHVzZWQuCi0gICAgICAgIG5hbWUgPSAnbW9kJwotICAgICAgICBtb2NrID0gU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKLSAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKLSAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCi0gICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKLQotCi1jbGFzcyBBYnN0cmFjdE1ldGhvZEltcGxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAiIiJUZXN0IHRoZSBjb25jcmV0ZSBhYnN0cmFjdG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMuIiIiCi0KLSAgICBjbGFzcyBNZXRhUGF0aEZpbmRlcihhYmMuTWV0YVBhdGhGaW5kZXIpOgotICAgICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGgpOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShmdWxsbmFtZSwgcGF0aCkKLQotICAgIGNsYXNzIFBhdGhFbnRyeUZpbmRlcihhYmMuUGF0aEVudHJ5RmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5maW5kX21vZHVsZShfKQotCi0gICAgICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9sb2FkZXIoXykKLQotICAgIGNsYXNzIEZpbmRlcihhYmMuRmluZGVyKToKLSAgICAgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKLSAgICAgICAgICAgIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCi0KLSAgICBjbGFzcyBMb2FkZXIoYWJjLkxvYWRlcik6Ci0gICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICBzdXBlcigpLmxvYWRfbW9kdWxlKGZ1bGxuYW1lKQotICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKLSAgICAgICAgICAgIHN1cGVyKCkubW9kdWxlX3JlcHIobW9kdWxlKQotCi0gICAgY2xhc3MgUmVzb3VyY2VMb2FkZXIoTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLmdldF9kYXRhKF8pCi0KLSAgICBjbGFzcyBJbnNwZWN0TG9hZGVyKExvYWRlciwgYWJjLkluc3BlY3RMb2FkZXIpOgotICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuaXNfcGFja2FnZShfKQotCi0gICAgICAgIGRlZiBnZXRfY29kZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X2NvZGUoXykKLQotICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuZ2V0X3NvdXJjZShfKQotCi0gICAgY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXIpOgotICAgICAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIF8pOgotICAgICAgICAgICAgc3VwZXIoKS5nZXRfZmlsZW5hbWUoXykKLQotICAgIGNsYXNzIFNvdXJjZUxvYWRlcihSZXNvdXJjZUxvYWRlciwgRXhlY3V0aW9uTG9hZGVyLCBhYmMuU291cmNlTG9hZGVyKToKLSAgICAgICAgcGFzcwotCi0gICAgY2xhc3MgUHlMb2FkZXIoUmVzb3VyY2VMb2FkZXIsIEluc3BlY3RMb2FkZXIsIGFiYy5QeUxvYWRlcik6Ci0gICAgICAgIGRlZiBzb3VyY2VfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuc291cmNlX3BhdGgoXykKLQotICAgIGNsYXNzIFB5UHljTG9hZGVyKFB5TG9hZGVyLCBhYmMuUHlQeWNMb2FkZXIpOgotICAgICAgICBkZWYgYnl0ZWNvZGVfcGF0aChzZWxmLCBfKToKLSAgICAgICAgICAgIHN1cGVyKCkuYnl0ZWNvZGVfcGF0aChfKQotCi0gICAgICAgIGRlZiBzb3VyY2VfbXRpbWUoc2VsZiwgXyk6Ci0gICAgICAgICAgICBzdXBlcigpLnNvdXJjZV9tdGltZShfKQotCi0gICAgICAgIGRlZiB3cml0ZV9ieXRlY29kZShzZWxmLCBfLCBfMik6Ci0gICAgICAgICAgICBzdXBlcigpLndyaXRlX2J5dGVjb2RlKF8sIF8yKQotCi0gICAgZGVmIHJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYsIGlucywgKmFyZ3MpOgotICAgICAgICBmb3IgbWV0aG9kX25hbWUgaW4gYXJnczoKLSAgICAgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoaW5zLCBtZXRob2RfbmFtZSkKLSAgICAgICAgICAgIGFyZ19jb3VudCA9IGxlbihpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKG1ldGhvZClbMF0pIC0gMQotICAgICAgICAgICAgYXJncyA9IFsnJ10gKiBhcmdfY291bnQKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBtZXRob2QoKmFyZ3MpCi0gICAgICAgICAgICBleGNlcHQgTm90SW1wbGVtZW50ZWRFcnJvcjoKLSAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG1zZyA9ICJ7fS57fSBkaWQgbm90IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IiCi0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKG1zZy5mb3JtYXQoaW5zLl9fY2xhc3NfXy5fX25hbWVfXywgbWV0aG9kX25hbWUpKQotCi0gICAgZGVmIHRlc3RfTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuTG9hZGVyKCksICdsb2FkX21vZHVsZScpCi0KLSAgICAjIFhYWCBtaXNwbGFjZWQ7IHNob3VsZCBiZSBzb21ld2hlcmUgZWxzZQotICAgIGRlZiB0ZXN0X0ZpbmRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLkZpbmRlcigpLCAnZmluZF9tb2R1bGUnKQotCi0gICAgZGVmIHRlc3RfUmVzb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3Ioc2VsZi5SZXNvdXJjZUxvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfZGF0YScpCi0KLSAgICBkZWYgdGVzdF9JbnNwZWN0TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuSW5zcGVjdExvYWRlcigpLCAnbG9hZF9tb2R1bGUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19wYWNrYWdlJywgJ2dldF9jb2RlJywgJ2dldF9zb3VyY2UnKQotCi0gICAgZGVmIHRlc3RfRXhlY3V0aW9uTG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuRXhlY3V0aW9uTG9hZGVyKCksICdsb2FkX21vZHVsZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX3BhY2thZ2UnLCAnZ2V0X2NvZGUnLCAnZ2V0X3NvdXJjZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9maWxlbmFtZScpCi0KLSAgICBkZWYgdGVzdF9Tb3VyY2VMb2FkZXIoc2VsZik6Ci0gICAgICAgIGlucyA9IHNlbGYuU291cmNlTG9hZGVyKCkKLSAgICAgICAgIyBSZXF1aXJlZCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCAnZ2V0X2ZpbGVuYW1lJywgJ2dldF9kYXRhJykKLSAgICAgICAgIyBPcHRpb25hbCBhYnN0cmFjdG1ldGhvZHMuCi0gICAgICAgIHNlbGYucmFpc2VzX05vdEltcGxlbWVudGVkRXJyb3IoaW5zLCdwYXRoX3N0YXRzJywgJ3NldF9kYXRhJykKLQotICAgIGRlZiB0ZXN0X1B5TG9hZGVyKHNlbGYpOgotICAgICAgICBzZWxmLnJhaXNlc19Ob3RJbXBsZW1lbnRlZEVycm9yKHNlbGYuUHlMb2FkZXIoKSwgJ3NvdXJjZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2RhdGEnLCAnaXNfcGFja2FnZScpCi0KLSAgICBkZWYgdGVzdF9QeVB5Y0xvYWRlcihzZWxmKToKLSAgICAgICAgc2VsZi5yYWlzZXNfTm90SW1wbGVtZW50ZWRFcnJvcihzZWxmLlB5UHljTG9hZGVyKCksICdzb3VyY2VfcGF0aCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZV9tdGltZScsICdieXRlY29kZV9wYXRoJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd3JpdGVfYnl0ZWNvZGUnKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFB5TG9hZGVyVGVzdHMsIFB5TG9hZGVyQ29tcGF0VGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5TG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFB5UHljTG9hZGVyVGVzdHMsIFB5UHljTG9hZGVySW50ZXJmYWNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNraXBXcml0aW5nQnl0ZWNvZGVUZXN0cywgUmVnZW5lcmF0ZWRCeXRlY29kZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICBCYWRCeXRlY29kZUZhaWx1cmVUZXN0cywgTWlzc2luZ1BhdGhzVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIFNvdXJjZU9ubHlMb2FkZXJUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgIEFic3RyYWN0TWV0aG9kSW1wbFRlc3RzKQotCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9jYXNlX3NlbnNpdGl2aXR5LnB5CmluZGV4IDI0MTE3M2YuLmVmZDMxNDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2Nhc2Vfc2Vuc2l0aXZpdHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfY2FzZV9zZW5zaXRpdml0eS5weQpAQCAtMSw5ICsxLDEwIEBACiAiIiJUZXN0IGNhc2Utc2Vuc2l0aXZpdHkgKFBFUCAyMzUpLiIiIgotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAotaW1wb3J0IGltcAorCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCittYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydCBhcyB0ZXN0X3N1cHBvcnQKQEAgLTExLDcgKzEyLDcgQEAKIAogCiBAdXRpbC5jYXNlX2luc2Vuc2l0aXZlX3Rlc3RzCi1jbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIENhc2VTZW5zaXRpdml0eVRlc3Q6CiAKICAgICAiIiJQRVAgMjM1IGRpY3RhdGVzIHRoYXQgb24gY2FzZS1wcmVzZXJ2aW5nLCBjYXNlLWluc2Vuc2l0aXZlIGZpbGUgc3lzdGVtcwogICAgIHRoYXQgaW1wb3J0cyBhcmUgY2FzZS1zZW5zaXRpdmUgdW5sZXNzIHRoZSBQWVRIT05DQVNFT0sgZW52aXJvbm1lbnQKQEAgLTIwLDEzICsyMSwxMiBAQAogICAgIG5hbWUgPSAnTW9EdUxlJwogICAgIGFzc2VydCBuYW1lICE9IG5hbWUubG93ZXIoKQogCi0gICAgZGVmIGZpbmQoc2VsZiwgcGF0aCk6Ci0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKHBhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkJZVEVDT0RFX1NVRkZJWEVTKSkKLSAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShzZWxmLm5hbWUpCisgICAgZGVmIGZpbmRlcihzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUykpCiAKICAgICBkZWYgc2Vuc2l0aXZpdHlfdGVzdChzZWxmKToKICAgICAgICAgIiIiTG9vayBmb3IgYSBtb2R1bGUgd2l0aCBtYXRjaGluZyBhbmQgbm9uLW1hdGNoaW5nIHNlbnNpdGl2aXR5LiIiIgpAQCAtMzYsMzUgKzM2LDQ4IEBACiAgICAgICAgIHdpdGggY29udGV4dCBhcyBtYXBwaW5nOgogICAgICAgICAgICAgc2Vuc2l0aXZlX3BhdGggPSBvcy5wYXRoLmpvaW4obWFwcGluZ1snLnJvb3QnXSwgJ3NlbnNpdGl2ZScpCiAgICAgICAgICAgICBpbnNlbnNpdGl2ZV9wYXRoID0gb3MucGF0aC5qb2luKG1hcHBpbmdbJy5yb290J10sICdpbnNlbnNpdGl2ZScpCi0gICAgICAgICAgICByZXR1cm4gc2VsZi5maW5kKHNlbnNpdGl2ZV9wYXRoKSwgc2VsZi5maW5kKGluc2Vuc2l0aXZlX3BhdGgpCisgICAgICAgICAgICBzZW5zaXRpdmVfZmluZGVyID0gc2VsZi5maW5kZXIoc2Vuc2l0aXZlX3BhdGgpCisgICAgICAgICAgICBpbnNlbnNpdGl2ZV9maW5kZXIgPSBzZWxmLmZpbmRlcihpbnNlbnNpdGl2ZV9wYXRoKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuZmluZChzZW5zaXRpdmVfZmluZGVyKSwgc2VsZi5maW5kKGluc2Vuc2l0aXZlX2ZpbmRlcikKIAogICAgIGRlZiB0ZXN0X3NlbnNpdGl2ZShzZWxmKToKICAgICAgICAgd2l0aCB0ZXN0X3N1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi51bnNldCgnUFlUSE9OQ0FTRU9LJykKLSAgICAgICAgICAgIGlmIGInUFlUSE9OQ0FTRU9LJyBpbiBfYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgorICAgICAgICAgICAgaWYgYidQWVRIT05DQVNFT0snIGluIHNlbGYuaW1wb3J0bGliLl9ib290c3RyYXAuX29zLmVudmlyb246CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnb3MuZW52aXJvbiBjaGFuZ2VzIG5vdCByZWZsZWN0ZWQgaW4gJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19vcy5lbnZpcm9uJykKICAgICAgICAgICAgIHNlbnNpdGl2ZSwgaW5zZW5zaXRpdmUgPSBzZWxmLnNlbnNpdGl2aXR5X3Rlc3QoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc2Vuc2l0aXZlLCAnbG9hZF9tb2R1bGUnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHNlbnNpdGl2ZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5uYW1lLCBzZW5zaXRpdmUuZ2V0X2ZpbGVuYW1lKHNlbGYubmFtZSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbnNlbnNpdGl2ZSkKIAogICAgIGRlZiB0ZXN0X2luc2Vuc2l0aXZlKHNlbGYpOgogICAgICAgICB3aXRoIHRlc3Rfc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgogICAgICAgICAgICAgZW52LnNldCgnUFlUSE9OQ0FTRU9LJywgJzEnKQotICAgICAgICAgICAgaWYgYidQWVRIT05DQVNFT0snIG5vdCBpbiBfYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgorICAgICAgICAgICAgaWYgYidQWVRIT05DQVNFT0snIG5vdCBpbiBzZWxmLmltcG9ydGxpYi5fYm9vdHN0cmFwLl9vcy5lbnZpcm9uOgogICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLmVudmlyb24gY2hhbmdlcyBub3QgcmVmbGVjdGVkIGluICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfb3MuZW52aXJvbicpCiAgICAgICAgICAgICBzZW5zaXRpdmUsIGluc2Vuc2l0aXZlID0gc2VsZi5zZW5zaXRpdml0eV90ZXN0KCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbnNpdGl2ZSwgJ2xvYWRfbW9kdWxlJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShzZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc2Vuc2l0aXZlLmdldF9maWxlbmFtZShzZWxmLm5hbWUpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoaW5zZW5zaXRpdmUsICdsb2FkX21vZHVsZScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoaW5zZW5zaXRpdmUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgaW5zZW5zaXRpdmUuZ2V0X2ZpbGVuYW1lKHNlbGYubmFtZSkpCiAKK2NsYXNzIENhc2VTZW5zaXRpdml0eVRlc3RQRVAzMDIoQ2FzZVNlbnNpdGl2aXR5VGVzdCk6CisgICAgZGVmIGZpbmQoc2VsZiwgZmluZGVyKToKKyAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShzZWxmLm5hbWUpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KENhc2VTZW5zaXRpdml0eVRlc3QpCitGcm96ZW5fQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDMwMiwgU291cmNlX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICBDYXNlU2Vuc2l0aXZpdHlUZXN0UEVQMzAyLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCitjbGFzcyBDYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxKENhc2VTZW5zaXRpdml0eVRlc3QpOgorICAgIGRlZiBmaW5kKHNlbGYsIGZpbmRlcik6CisgICAgICAgIGZvdW5kID0gZmluZGVyLmZpbmRfc3BlYyhzZWxmLm5hbWUpCisgICAgICAgIHJldHVybiBmb3VuZC5sb2FkZXIgaWYgZm91bmQgaXMgbm90IE5vbmUgZWxzZSBmb3VuZAorCitGcm96ZW5fQ2FzZVNlbnNpdGl2aXR5VGVzdFBFUDQ1MSwgU291cmNlX0Nhc2VTZW5zaXRpdml0eVRlc3RQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICBDYXNlU2Vuc2l0aXZpdHlUZXN0UEVQNDUxLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbGVfbG9hZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKaW5kZXggZDcxMWNiMy4uMmQ0MTVmOSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmlsZV9sb2FkZXIucHkKQEAgLTEsNTIgKzEsNTIgQEAKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKLWltcG9ydCBpbXBvcnRsaWIKLWltcG9ydCBpbXBvcnRsaWIuYWJjCiBmcm9tIC4uIGltcG9ydCBhYmMKIGZyb20gLi4gaW1wb3J0IHV0aWwKIGZyb20gLiBpbXBvcnQgdXRpbCBhcyBzb3VyY2VfdXRpbAogCitpbXBvcnRsaWIgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitpbXBvcnRsaWJfYWJjID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIuYWJjJykKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitpbXBvcnRsaWJfdXRpbCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLnV0aWwnKQorCiBpbXBvcnQgZXJybm8KLWltcG9ydCBpbXAKIGltcG9ydCBtYXJzaGFsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3RhdAogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbWFrZV9sZWdhY3lfcHljCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgbWFrZV9sZWdhY3lfcHljLCB1bmxvYWQKIAogCi1jbGFzcyBTaW1wbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFNpbXBsZVRlc3QoYWJjLkxvYWRlclRlc3RzKToKIAogICAgICIiIlNob3VsZCBoYXZlIG5vIGlzc3VlIGltcG9ydGluZyBhIHNvdXJjZSBtb2R1bGUgW2Jhc2ljXS4gQW5kIGlmIHRoZXJlIGlzCiAgICAgYSBzeW50YXggZXJyb3IsIGl0IHNob3VsZCByYWlzZSBhIFN5bnRheEVycm9yIFtzeW50YXggZXJyb3JdLgogCiAgICAgIiIiCiAKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYubmFtZSA9ICdzcGFtJworICAgICAgICBzZWxmLmZpbGVwYXRoID0gb3MucGF0aC5qb2luKCdoYW0nLCBzZWxmLm5hbWUgKyAnLnB5JykKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKHNlbGYubmFtZSwgc2VsZi5maWxlcGF0aCkKKwogICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlX0FQSShzZWxmKToKLSAgICAgICAgIyBJZiBmdWxsbmFtZSBpcyBub3Qgc3BlY2lmaWVkIHRoYXQgYXNzdW1lIHNlbGYubmFtZSBpcyBkZXNpcmVkLgotICAgICAgICBjbGFzcyBUZXN0ZXJNaXhpbihpbXBvcnRsaWIuYWJjLkxvYWRlcik6Ci0gICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUpOiByZXR1cm4gZnVsbG5hbWUKLSAgICAgICAgICAgIGRlZiBtb2R1bGVfcmVwcihzZWxmLCBtb2R1bGUpOiByZXR1cm4gJzxtb2R1bGU+JworICAgICAgICBjbGFzcyBUZXN0ZXIoc2VsZi5hYmMuRmlsZUxvYWRlcik6CisgICAgICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKTogcmV0dXJuICdhdHRyID0gNDInCisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKTogcmV0dXJuIEZhbHNlCiAKLSAgICAgICAgY2xhc3MgVGVzdGVyKGltcG9ydGxpYi5hYmMuRmlsZUxvYWRlciwgVGVzdGVyTWl4aW4pOgotICAgICAgICAgICAgZGVmIGdldF9jb2RlKHNlbGYsIF8pOiBwYXNzCi0gICAgICAgICAgICBkZWYgZ2V0X3NvdXJjZShzZWxmLCBfKTogcGFzcwotICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgXyk6IHBhc3MKLQotICAgICAgICBuYW1lID0gJ21vZF9uYW1lJwotICAgICAgICBsb2FkZXIgPSBUZXN0ZXIobmFtZSwgJ3NvbWVfcGF0aCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgbG9hZGVyLmxvYWRfbW9kdWxlKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgbG9hZGVyLmxvYWRfbW9kdWxlKE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGxvYWRlci5sb2FkX21vZHVsZShuYW1lKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6Ci0gICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUobG9hZGVyLm5hbWUgKyAnWFhYJykKKyAgICAgICAgbG9hZGVyID0gVGVzdGVyKCdibGFoJywgJ2JsYWgucHknKQorICAgICAgICBzZWxmLmFkZENsZWFudXAodW5sb2FkLCAnYmxhaCcpCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKCkgICMgU2hvdWxkIG5vdCByYWlzZSBhbiBleGNlcHRpb24uCiAKICAgICBkZWYgdGVzdF9nZXRfZmlsZW5hbWVfQVBJKHNlbGYpOgogICAgICAgICAjIElmIGZ1bGxuYW1lIGlzIG5vdCBzZXQgdGhlbiBhc3N1bWUgc2VsZi5wYXRoIGlzIGRlc2lyZWQuCi0gICAgICAgIGNsYXNzIFRlc3RlcihpbXBvcnRsaWIuYWJjLkZpbGVMb2FkZXIpOgorICAgICAgICBjbGFzcyBUZXN0ZXIoc2VsZi5hYmMuRmlsZUxvYWRlcik6CiAgICAgICAgICAgICBkZWYgZ2V0X2NvZGUoc2VsZiwgXyk6IHBhc3MKICAgICAgICAgICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIF8pOiBwYXNzCiAgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBfKTogcGFzcwpAQCAtNjEsMTEgKzYxLDIxIEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgogICAgICAgICAgICAgbG9hZGVyLmdldF9maWxlbmFtZShuYW1lICsgJ1hYWCcpCiAKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgb3RoZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKHNlbGYubmFtZSwgc2VsZi5maWxlcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRlciwgb3RoZXIpCisKKyAgICBkZWYgdGVzdF9pbmVxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ18nICsgc2VsZi5uYW1lLCBzZWxmLmZpbGVwYXRoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNlbGYubG9hZGVyLCBvdGhlcikKKwogICAgICMgW2Jhc2ljXQogICAgIGRlZiB0ZXN0X21vZHVsZShzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgotICAgICAgICAgICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignX3RlbXAnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfdGVtcCcsICdfX2ZpbGVfXyc6IG1hcHBpbmdbJ190ZW1wJ10sCiAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnJ30KQEAgLTc0LDkgKzg0LDExIEBACiAKICAgICBkZWYgdGVzdF9wYWNrYWdlKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfcGtnLl9faW5pdF9fJykgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnJywKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ19wa2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbJ19wa2cuX19pbml0X18nXSkKLSAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZycpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfcGtnJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ19wa2cnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfcGtnJywgJ19fZmlsZV9fJzogbWFwcGluZ1snX3BrZy5fX2luaXRfXyddLAogICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW29zLnBhdGguZGlybmFtZShtYXBwaW5nWydfcGtnLl9faW5pdF9fJ10pXSwKQEAgLTg3LDkgKzk5LDExIEBACiAKICAgICBkZWYgdGVzdF9sYWNraW5nX3BhcmVudChzZWxmKToKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3BrZy5fX2luaXRfXycsICdfcGtnLm1vZCcpYXMgbWFwcGluZzoKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfcGtnLm1vZCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1snX3BrZy5tb2QnXSkKLSAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZy5tb2QnKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3BrZy5tb2QnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignX3BrZy5tb2QnLCBzeXMubW9kdWxlcykKICAgICAgICAgICAgIGNoZWNrID0geydfX25hbWVfXyc6ICdfcGtnLm1vZCcsICdfX2ZpbGVfXyc6IG1hcHBpbmdbJ19wa2cubW9kJ10sCiAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiAnX3BrZyd9CkBAIC0xMDIsMTMgKzExNiwxNyBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JldXNlKHNlbGYpOgogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKCdfdGVtcCcpIGFzIG1hcHBpbmc6Ci0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCiAgICAgICAgICAgICBtb2R1bGVfaWQgPSBpZChtb2R1bGUpCiAgICAgICAgICAgICBtb2R1bGVfZGljdF9pZCA9IGlkKG1vZHVsZS5fX2RpY3RfXykKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nWydfdGVtcCddLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgidGVzdGluZ192YXIgPSA0MlxuIikKLSAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZSgnX3RlbXAnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigndGVzdGluZ192YXInLCBtb2R1bGUuX19kaWN0X18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIid0ZXN0aW5nX3Zhcicgbm90IGluICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiezB9Ii5mb3JtYXQobGlzdChtb2R1bGUuX19kaWN0X18ua2V5cygpKSkpCkBAIC0xMjIsMTQgKzE0MCwyMCBAQAogICAgICAgICB2YWx1ZSA9ICc8dGVzdD4nCiAgICAgICAgIG5hbWUgPSAnX3RlbXAnCiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMobmFtZSkgYXMgbWFwcGluZzoKLSAgICAgICAgICAgIG9yaWdfbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIG9yaWdfbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgZm9yIGF0dHIgaW4gYXR0cmlidXRlczoKICAgICAgICAgICAgICAgICBzZXRhdHRyKG9yaWdfbW9kdWxlLCBhdHRyLCB2YWx1ZSkKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nW25hbWVdLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgnKysrIGJhZCBzeW50YXggKysrJykKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yKToKLSAgICAgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICBsb2FkZXIuZXhlY19tb2R1bGUob3JpZ19tb2R1bGUpCisgICAgICAgICAgICBmb3IgYXR0ciBpbiBhdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihvcmlnX21vZHVsZSwgYXR0ciksIHZhbHVlKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6CisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCiAgICAgICAgICAgICBmb3IgYXR0ciBpbiBhdHRyaWJ1dGVzOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0YXR0cihvcmlnX21vZHVsZSwgYXR0ciksIHZhbHVlKQogCkBAIC0xMzgsOSArMTYyLDExIEBACiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nWydfdGVtcCddLCAndycpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgnPScpCi0gICAgICAgICAgICBsb2FkZXIgPSBtYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignX3RlbXAnLCBtYXBwaW5nWydfdGVtcCddKQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvcik6Ci0gICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCisgICAgICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdfdGVtcCcsIHN5cy5tb2R1bGVzKQogCiAgICAgZGVmIHRlc3RfZmlsZV9mcm9tX2VtcHR5X3N0cmluZ19kaXIoc2VsZik6CkBAIC0xNTEsMTQgKzE3NywxNiBAQAogICAgICAgICAgICAgZmlsZS53cml0ZSgiIyB0ZXN0IGZpbGUgZm9yIGltcG9ydGxpYiIpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdfdGVtcCcpOgotICAgICAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIGZpbGVfcGF0aCkKLSAgICAgICAgICAgICAgICBtb2QgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKKyAgICAgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIGZpbGVfcGF0aCkKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBtb2QgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfcGF0aCwgbW9kLl9fZmlsZV9fKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCksCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoZmlsZV9wYXRoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZC5fX2NhY2hlZF9fKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MudW5saW5rKGZpbGVfcGF0aCkKLSAgICAgICAgICAgIHB5Y2FjaGUgPSBvcy5wYXRoLmRpcm5hbWUoaW1wLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcGF0aCkpCisgICAgICAgICAgICBweWNhY2hlID0gb3MucGF0aC5kaXJuYW1lKHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3BhdGgpKQogICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocHljYWNoZSk6CiAgICAgICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShweWNhY2hlKQogCkBAIC0xNjgsNyArMTk2LDcgQEAKICAgICAgICAgIyB0cnVuY2F0ZWQgcmF0aGVyIHRoYW4gcmFpc2UgYW4gT3ZlcmZsb3dFcnJvci4KICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgc291cmNlID0gbWFwcGluZ1snX3RlbXAnXQotICAgICAgICAgICAgY29tcGlsZWQgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQorICAgICAgICAgICAgY29tcGlsZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc291cmNlKQogICAgICAgICAgICAgd2l0aCBvcGVuKHNvdXJjZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgICAgIGYud3JpdGUoInggPSA1IikKICAgICAgICAgICAgIHRyeToKQEAgLTE3OSwyMCArMjA3LDQ4IEBACiAgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBnZXRhdHRyKGVycm5vLCAnRU9WRVJGTE9XJywgTm9uZSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY2Fubm90IHNldCBtb2RpZmljYXRpb24gdGltZSB0byBsYXJnZSBpbnRlZ2VyICh7fSkiLmZvcm1hdChlKSkKLSAgICAgICAgICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdfdGVtcCcsIG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBtb2QgPSBsb2FkZXIubG9hZF9tb2R1bGUoJ190ZW1wJykKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ190ZW1wJywgbWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgICMgUEVQIDQ1MQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnX3RlbXAnKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoJ190ZW1wJywgbG9hZGVyKQorICAgICAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLngsIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoY29tcGlsZWQpKQorICAgICAgICAgICAgb3MudW5saW5rKGNvbXBpbGVkKQorICAgICAgICAgICAgIyBQRVAgMzAyCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbW9kID0gbG9hZGVyLmxvYWRfbW9kdWxlKCdfdGVtcCcpICMgWFhYCiAgICAgICAgICAgICAjIFNhbml0eSBjaGVja3MuCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZC5fX2NhY2hlZF9fLCBjb21waWxlZCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kLngsIDUpCiAgICAgICAgICAgICAjIFRoZSBweWMgZmlsZSB3YXMgY3JlYXRlZC4KLSAgICAgICAgICAgIG9zLnN0YXQoY29tcGlsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoY29tcGlsZWQpKQorCisgICAgZGVmIHRlc3RfdW5sb2FkYWJsZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcignZ29vZCBuYW1lJywge30pCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JhZCBuYW1lJykKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnYmFkIG5hbWUnLCBsb2FkZXIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKCdiYWQgbmFtZScpCisKK0Zyb3plbl9TaW1wbGVUZXN0LCBTb3VyY2VfU2ltcGxlVGVzdCA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTaW1wbGVUZXN0LCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LCBhYmM9aW1wb3J0bGliX2FiYywKKyAgICAgICAgdXRpbD1pbXBvcnRsaWJfdXRpbCkKIAogCi1jbGFzcyBCYWRCeXRlY29kZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgQmFkQnl0ZWNvZGVUZXN0OgogCiAgICAgZGVmIGltcG9ydF8oc2VsZiwgZmlsZSwgbW9kdWxlX25hbWUpOgogICAgICAgICBsb2FkZXIgPSBzZWxmLmxvYWRlcihtb2R1bGVfbmFtZSwgZmlsZSkKLSAgICAgICAgbW9kdWxlID0gbG9hZGVyLmxvYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICMgWFhYIENoYW5nZSB0byB1c2UgZXhlY19tb2R1bGUoKS4KKyAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShtb2R1bGVfbmFtZSkKICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGVfbmFtZSwgc3lzLm1vZHVsZXMpCiAKICAgICBkZWYgbWFuaXB1bGF0ZV9ieXRlY29kZShzZWxmLCBuYW1lLCBtYXBwaW5nLCBtYW5pcHVsYXRvciwgKiwKQEAgLTIwNSw3ICsyNjEsNyBAQAogICAgICAgICAgICAgcGFzcwogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobWFwcGluZ1tuYW1lXSkKICAgICAgICAgaWYgbm90IGRlbF9zb3VyY2U6Ci0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbbmFtZV0pCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy51bmxpbmsobWFwcGluZ1tuYW1lXSkKICAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBtYWtlX2xlZ2FjeV9weWMobWFwcGluZ1tuYW1lXSkKQEAgLTI5MSwxMCArMzQ3LDI5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGEgYmM6IGInXHgwMFx4MDBceDAwXHgwMCcgKyBiY1s0Ol0pCiAgICAgICAgICAgICB0ZXN0KCdfdGVtcCcsIG1hcHBpbmcsIGJjX3BhdGgpCiAKK2NsYXNzIEJhZEJ5dGVjb2RlVGVzdFBFUDQ1MShCYWRCeXRlY29kZVRlc3QpOgogCi1jbGFzcyBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QoQmFkQnl0ZWNvZGVUZXN0KToKKyAgICBkZWYgaW1wb3J0XyhzZWxmLCBmaWxlLCBtb2R1bGVfbmFtZSk6CisgICAgICAgIGxvYWRlciA9IHNlbGYubG9hZGVyKG1vZHVsZV9uYW1lLCBmaWxlKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG1vZHVsZV9uYW1lKQorICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihtb2R1bGVfbmFtZSwgbG9hZGVyKQorICAgICAgICBsb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQogCi0gICAgbG9hZGVyID0gbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIKK2NsYXNzIEJhZEJ5dGVjb2RlVGVzdFBFUDMwMihCYWRCeXRlY29kZVRlc3QpOgorCisgICAgZGVmIGltcG9ydF8oc2VsZiwgZmlsZSwgbW9kdWxlX25hbWUpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLmxvYWRlcihtb2R1bGVfbmFtZSwgZmlsZSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobW9kdWxlX25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlX25hbWUsIHN5cy5tb2R1bGVzKQorCisKK2NsYXNzIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdDoKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBzZXRVcENsYXNzKGNscyk6CisgICAgICAgIGNscy5sb2FkZXIgPSBjbHMubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIKIAogICAgIEBzb3VyY2VfdXRpbC53cml0ZXNfYnl0ZWNvZGVfZmlsZXMKICAgICBkZWYgdGVzdF9lbXB0eV9maWxlKHNlbGYpOgpAQCAtMzMzLDcgKzQwOCw4IEBACiAgICAgICAgIGRlZiB0ZXN0KG5hbWUsIG1hcHBpbmcsIGJ5dGVjb2RlX3BhdGgpOgogICAgICAgICAgICAgc2VsZi5pbXBvcnRfKG1hcHBpbmdbbmFtZV0sIG5hbWUpCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3JiJykgYXMgYnl0ZWNvZGVfZmlsZToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ5dGVjb2RlX2ZpbGUucmVhZCg0KSwgaW1wLmdldF9tYWdpYygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWNvZGVfZmlsZS5yZWFkKDQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLk1BR0lDX05VTUJFUikKIAogICAgICAgICBzZWxmLl90ZXN0X2JhZF9tYWdpYyh0ZXN0KQogCkBAIC0zODMsMTMgKzQ1OSwxMyBAQAogICAgICAgICB6ZXJvcyA9IGInXHgwMFx4MDBceDAwXHgwMCcKICAgICAgICAgd2l0aCBzb3VyY2VfdXRpbC5jcmVhdGVfbW9kdWxlcygnX3RlbXAnKSBhcyBtYXBwaW5nOgogICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKG1hcHBpbmdbJ190ZW1wJ10pCi0gICAgICAgICAgICBieXRlY29kZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCisgICAgICAgICAgICBieXRlY29kZV9wYXRoID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1hcHBpbmdbJ190ZW1wJ10pCiAgICAgICAgICAgICB3aXRoIG9wZW4oYnl0ZWNvZGVfcGF0aCwgJ3IrYicpIGFzIGJ5dGVjb2RlX2ZpbGU6CiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS5zZWVrKDQpCiAgICAgICAgICAgICAgICAgYnl0ZWNvZGVfZmlsZS53cml0ZSh6ZXJvcykKICAgICAgICAgICAgIHNlbGYuaW1wb3J0XyhtYXBwaW5nWydfdGVtcCddLCAnX3RlbXAnKQogICAgICAgICAgICAgc291cmNlX210aW1lID0gb3MucGF0aC5nZXRtdGltZShtYXBwaW5nWydfdGVtcCddKQotICAgICAgICAgICAgc291cmNlX3RpbWVzdGFtcCA9IGltcG9ydGxpYi5fd19sb25nKHNvdXJjZV9tdGltZSkKKyAgICAgICAgICAgIHNvdXJjZV90aW1lc3RhbXAgPSBzZWxmLmltcG9ydGxpYi5fd19sb25nKHNvdXJjZV9tdGltZSkKICAgICAgICAgICAgIHdpdGggb3BlbihieXRlY29kZV9wYXRoLCAncmInKSBhcyBieXRlY29kZV9maWxlOgogICAgICAgICAgICAgICAgIGJ5dGVjb2RlX2ZpbGUuc2Vlayg0KQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZWNvZGVfZmlsZS5yZWFkKDQpLCBzb3VyY2VfdGltZXN0YW1wKQpAQCAtNDAxLDcgKzQ3Nyw3IEBACiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ190ZW1wJykgYXMgbWFwcGluZzoKICAgICAgICAgICAgICMgQ3JlYXRlIGJ5dGVjb2RlIHRoYXQgd2lsbCBuZWVkIHRvIGJlIHJlLWNyZWF0ZWQuCiAgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobWFwcGluZ1snX3RlbXAnXSkKLSAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1snX3RlbXAnXSkKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobWFwcGluZ1snX3RlbXAnXSkKICAgICAgICAgICAgIHdpdGggb3BlbihieXRlY29kZV9wYXRoLCAncitiJykgYXMgYnl0ZWNvZGVfZmlsZToKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLnNlZWsoMCkKICAgICAgICAgICAgICAgICBieXRlY29kZV9maWxlLndyaXRlKGInXHgwMFx4MDBceDAwXHgwMCcpCkBAIC00MDksMTYgKzQ4NSwzNCBAQAogICAgICAgICAgICAgb3MuY2htb2QoYnl0ZWNvZGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUlVTUiB8IHN0YXQuU19JUkdSUCB8IHN0YXQuU19JUk9USCkKICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIFNob3VsZCBub3QgcmFpc2UgSU9FcnJvciEKKyAgICAgICAgICAgICAgICAjIFNob3VsZCBub3QgcmFpc2UgT1NFcnJvciEKICAgICAgICAgICAgICAgICBzZWxmLmltcG9ydF8obWFwcGluZ1snX3RlbXAnXSwgJ190ZW1wJykKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgIyBNYWtlIHdyaXRhYmxlIGZvciBldmVudHVhbCBjbGVhbi11cC4KICAgICAgICAgICAgICAgICBvcy5jaG1vZChieXRlY29kZV9wYXRoLCBzdGF0LlNfSVdVU1IpCiAKK2NsYXNzIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSgKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0LCBCYWRCeXRlY29kZVRlc3RQRVA0NTEpOgorICAgIHBhc3MKIAotY2xhc3MgU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdChCYWRCeXRlY29kZVRlc3QpOgorRnJvemVuX1NvdXJjZUJhZEJ5dGVjb2RlUEVQNDUxLCBTb3VyY2VfU291cmNlQmFkQnl0ZWNvZGVQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQNDUxLCBpbXBvcnRsaWI9aW1wb3J0bGliLCBtYWNoaW5lcnk9bWFjaGluZXJ5LAorICAgICAgICBhYmM9aW1wb3J0bGliX2FiYywgdXRpbD1pbXBvcnRsaWJfdXRpbCkKIAotICAgIGxvYWRlciA9IG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcgorY2xhc3MgU291cmNlTG9hZGVyQmFkQnl0ZWNvZGVUZXN0UEVQMzAyKAorICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3QsIEJhZEJ5dGVjb2RlVGVzdFBFUDMwMik6CisgICAgcGFzcworCitGcm96ZW5fU291cmNlQmFkQnl0ZWNvZGVQRVAzMDIsIFNvdXJjZV9Tb3VyY2VCYWRCeXRlY29kZVBFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBTb3VyY2VMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVAzMDIsIGltcG9ydGxpYj1pbXBvcnRsaWIsIG1hY2hpbmVyeT1tYWNoaW5lcnksCisgICAgICAgIGFiYz1pbXBvcnRsaWJfYWJjLCB1dGlsPWltcG9ydGxpYl91dGlsKQorCisKK2NsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3Q6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMubG9hZGVyID0gY2xzLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcgogCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZShzZWxmKToKICAgICAgICAgZGVmIHRlc3QobmFtZSwgbWFwcGluZywgYnl0ZWNvZGVfcGF0aCk6CkBAIC00NzMsMTQgKzU2NywyMiBAQAogICAgIGRlZiB0ZXN0X25vbl9jb2RlX21hcnNoYWwoc2VsZik6CiAgICAgICAgIHNlbGYuX3Rlc3Rfbm9uX2NvZGVfbWFyc2hhbChkZWxfc291cmNlPVRydWUpCiAKK2NsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVA0NTEoU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdCwKKyAgICAgICAgQmFkQnl0ZWNvZGVUZXN0UEVQNDUxKToKKyAgICBwYXNzCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KFNpbXBsZVRlc3QsCi0gICAgICAgICAgICAgICAgIFNvdXJjZUxvYWRlckJhZEJ5dGVjb2RlVGVzdCwKLSAgICAgICAgICAgICAgICAgU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdAotICAgICAgICAgICAgICAgICkKK0Zyb3plbl9Tb3VyY2VsZXNzQmFkQnl0ZWNvZGVQRVA0NTEsIFNvdXJjZV9Tb3VyY2VsZXNzQmFkQnl0ZWNvZGVQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDQ1MSwgaW1wb3J0bGliPWltcG9ydGxpYiwKKyAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSwgYWJjPWltcG9ydGxpYl9hYmMsIHV0aWw9aW1wb3J0bGliX3V0aWwpCisKK2NsYXNzIFNvdXJjZWxlc3NMb2FkZXJCYWRCeXRlY29kZVRlc3RQRVAzMDIoU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdCwKKyAgICAgICAgQmFkQnl0ZWNvZGVUZXN0UEVQMzAyKToKKyAgICBwYXNzCisKK0Zyb3plbl9Tb3VyY2VsZXNzQmFkQnl0ZWNvZGVQRVAzMDIsIFNvdXJjZV9Tb3VyY2VsZXNzQmFkQnl0ZWNvZGVQRVAzMDIgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgU291cmNlbGVzc0xvYWRlckJhZEJ5dGVjb2RlVGVzdFBFUDMwMiwgaW1wb3J0bGliPWltcG9ydGxpYiwKKyAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSwgYWJjPWltcG9ydGxpYl9hYmMsIHV0aWw9aW1wb3J0bGliX3V0aWwpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfZmluZGVyLnB5CmluZGV4IDhlNDk4NjguLjQ3MzI5N2IgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X2ZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9maW5kZXIucHkKQEAgLTEsOSArMSwxMCBAQAogZnJvbSAuLiBpbXBvcnQgYWJjCitmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IGVycm5vCi1pbXBvcnQgaW1wCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc3RhdApAQCAtMzksMTQgKzQwLDE1IEBACiAgICAgIiIiCiAKICAgICBkZWYgZ2V0X2ZpbmRlcihzZWxmLCByb290KToKLSAgICAgICAgbG9hZGVyX2RldGFpbHMgPSBbKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAobWFjaGluZXJ5LlNvdXJjZWxlc3NGaWxlTG9hZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUyldCi0gICAgICAgIHJldHVybiBtYWNoaW5lcnkuRmlsZUZpbmRlcihyb290LCAqbG9hZGVyX2RldGFpbHMpCisgICAgICAgIGxvYWRlcl9kZXRhaWxzID0gWyhzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5CWVRFQ09ERV9TVUZGSVhFUyldCisgICAgICAgIHJldHVybiBzZWxmLm1hY2hpbmVyeS5GaWxlRmluZGVyKHJvb3QsICpsb2FkZXJfZGV0YWlscykKIAogICAgIGRlZiBpbXBvcnRfKHNlbGYsIHJvb3QsIG1vZHVsZSk6Ci0gICAgICAgIHJldHVybiBzZWxmLmdldF9maW5kZXIocm9vdCkuZmluZF9tb2R1bGUobW9kdWxlKQorICAgICAgICBmaW5kZXIgPSBzZWxmLmdldF9maW5kZXIocm9vdCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmQoZmluZGVyLCBtb2R1bGUsIGxvYWRlcl9vbmx5PVRydWUpCiAKICAgICBkZWYgcnVuX3Rlc3Qoc2VsZiwgdGVzdCwgY3JlYXRlPU5vbmUsICosIGNvbXBpbGVfPU5vbmUsIHVubGluaz1Ob25lKToKICAgICAgICAgIiIiVGVzdCB0aGUgZmluZGluZyBvZiAndGVzdCcgd2l0aCB0aGUgY3JlYXRpb24gb2YgbW9kdWxlcyBsaXN0ZWQgaW4KQEAgLTEyNCwyMCArMTI2LDIwIEBACiAKICAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmdfZm9yX2RpcihzZWxmKToKICAgICAgICAgIyBUaGUgZW1wdHkgc3RyaW5nIGZyb20gc3lzLnBhdGggbWVhbnMgdG8gc2VhcmNoIGluIHRoZSBjd2QuCi0gICAgICAgIGZpbmRlciA9IG1hY2hpbmVyeS5GaWxlRmluZGVyKCcnLCAobWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKKyAgICAgICAgZmluZGVyID0gc2VsZi5tYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCisgICAgICAgICAgICBzZWxmLm1hY2hpbmVyeS5TT1VSQ0VfU1VGRklYRVMpKQogICAgICAgICB3aXRoIG9wZW4oJ21vZC5weScsICd3JykgYXMgZmlsZToKICAgICAgICAgICAgIGZpbGUud3JpdGUoIiMgdGVzdCBmaWxlIGZvciBpbXBvcnRsaWIiKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2FkZXIgPSBmaW5kZXIuZmluZF9tb2R1bGUoJ21vZCcpCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLl9maW5kKGZpbmRlciwgJ21vZCcsIGxvYWRlcl9vbmx5PVRydWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihsb2FkZXIsICdsb2FkX21vZHVsZScpKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MudW5saW5rKCdtb2QucHknKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZGF0ZV9jYWNoZXMoc2VsZik6CiAgICAgICAgICMgaW52YWxpZGF0ZV9jYWNoZXMoKSBzaG91bGQgcmVzZXQgdGhlIG10aW1lLgotICAgICAgICBmaW5kZXIgPSBtYWNoaW5lcnkuRmlsZUZpbmRlcignJywgKG1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAotICAgICAgICAgICAgbWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUykpCisgICAgICAgIGZpbmRlciA9IHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIoJycsIChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKICAgICAgICAgZmluZGVyLl9wYXRoX210aW1lID0gNDIKICAgICAgICAgZmluZGVyLmludmFsaWRhdGVfY2FjaGVzKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kZXIuX3BhdGhfbXRpbWUsIC0xKQpAQCAtMTQ3LDggKzE0OSwxMCBAQAogICAgICAgICBtb2QgPSAnbW9kJwogICAgICAgICB3aXRoIHNvdXJjZV91dGlsLmNyZWF0ZV9tb2R1bGVzKG1vZCkgYXMgbWFwcGluZzoKICAgICAgICAgICAgIGZpbmRlciA9IHNlbGYuZ2V0X2ZpbmRlcihtYXBwaW5nWycucm9vdCddKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoZmluZGVyLmZpbmRfbW9kdWxlKG1vZCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZpbmRlci5maW5kX21vZHVsZShtb2QpKQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLl9maW5kKGZpbmRlciwgJ21vZCcsIGxvYWRlcl9vbmx5PVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShmb3VuZCkKKyAgICAgICAgZm91bmQgPSBzZWxmLl9maW5kKGZpbmRlciwgJ21vZCcsIGxvYWRlcl9vbmx5PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZvdW5kKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtICE9ICd3aW4zMicsCiAgICAgICAgICAgICAnb3MuY2htb2QoKSBkb2VzIG5vdCBzdXBwb3J0IHRoZSBuZWVkZWQgYXJndW1lbnRzIHVuZGVyIFdpbmRvd3MnKQpAQCAtMTcyLDIwICsxNzYsNTcgQEAKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXAsIHRlbXBkaXIpCiAgICAgICAgIG9zLmNobW9kKHRlbXBkaXIubmFtZSwgc3RhdC5TX0lXVVNSIHwgc3RhdC5TX0lYVVNSKQogICAgICAgICBmaW5kZXIgPSBzZWxmLmdldF9maW5kZXIodGVtcGRpci5uYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCBbXSksIGZpbmRlci5maW5kX2xvYWRlcignZG9lc25vdGV4aXN0JykpCisgICAgICAgIGZvdW5kID0gc2VsZi5fZmluZChmaW5kZXIsICdkb2Vzbm90ZXhpc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzZWxmLk5PVF9GT1VORCkKIAogICAgIGRlZiB0ZXN0X2lnbm9yZV9maWxlKHNlbGYpOgogICAgICAgICAjIElmIGEgZGlyZWN0b3J5IGdvdCBjaGFuZ2VkIHRvIGEgZmlsZSBmcm9tIHVuZGVybmVhdGggdXMsIHRoZW4gZG9uJ3QKICAgICAgICAgIyB3b3JyeSBhYm91dCBsb29raW5nIGZvciBzdWJtb2R1bGVzLgogICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpIGFzIGZpbGVfb2JqOgogICAgICAgICAgICAgZmluZGVyID0gc2VsZi5nZXRfZmluZGVyKGZpbGVfb2JqLm5hbWUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCBbXSksIGZpbmRlci5maW5kX2xvYWRlcignZG9lc25vdGV4aXN0JykpCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYuX2ZpbmQoZmluZGVyLCAnZG9lc25vdGV4aXN0JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHNlbGYuTk9UX0ZPVU5EKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEZpbmRlclRlc3RzKQorY2xhc3MgRmluZGVyVGVzdHNQRVA0NTEoRmluZGVyVGVzdHMpOgorCisgICAgTk9UX0ZPVU5EID0gTm9uZQorCisgICAgZGVmIF9maW5kKHNlbGYsIGZpbmRlciwgbmFtZSwgbG9hZGVyX29ubHk9RmFsc2UpOgorICAgICAgICBzcGVjID0gZmluZGVyLmZpbmRfc3BlYyhuYW1lKQorICAgICAgICByZXR1cm4gc3BlYy5sb2FkZXIgaWYgc3BlYyBpcyBub3QgTm9uZSBlbHNlIHNwZWMKKworRnJvemVuX0ZpbmRlclRlc3RzUEVQNDUxLCBTb3VyY2VfRmluZGVyVGVzdHNQRVA0NTEgPSB1dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRmluZGVyVGVzdHNQRVA0NTEsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKworY2xhc3MgRmluZGVyVGVzdHNQRVA0MjAoRmluZGVyVGVzdHMpOgorCisgICAgTk9UX0ZPVU5EID0gKE5vbmUsIFtdKQorCisgICAgZGVmIF9maW5kKHNlbGYsIGZpbmRlciwgbmFtZSwgbG9hZGVyX29ubHk9RmFsc2UpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIGxvYWRlcl9wb3J0aW9ucyA9IGZpbmRlci5maW5kX2xvYWRlcihuYW1lKQorICAgICAgICAgICAgcmV0dXJuIGxvYWRlcl9wb3J0aW9uc1swXSBpZiBsb2FkZXJfb25seSBlbHNlIGxvYWRlcl9wb3J0aW9ucworCitGcm96ZW5fRmluZGVyVGVzdHNQRVA0MjAsIFNvdXJjZV9GaW5kZXJUZXN0c1BFUDQyMCA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBGaW5kZXJUZXN0c1BFUDQyMCwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworCitjbGFzcyBGaW5kZXJUZXN0c1BFUDMwMihGaW5kZXJUZXN0cyk6CisKKyAgICBOT1RfRk9VTkQgPSBOb25lCisKKyAgICBkZWYgX2ZpbmQoc2VsZiwgZmluZGVyLCBuYW1lLCBsb2FkZXJfb25seT1GYWxzZSk6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgcmV0dXJuIGZpbmRlci5maW5kX21vZHVsZShuYW1lKQorCitGcm96ZW5fRmluZGVyVGVzdHNQRVAzMDIsIFNvdXJjZV9GaW5kZXJUZXN0c1BFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBGaW5kZXJUZXN0c1BFUDMwMiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKwogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3BhdGhfaG9vay5weQppbmRleCA2YTc4NzkyLi45MmRhNzcyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9wYXRoX2hvb2sucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3RfcGF0aF9ob29rLnB5CkBAIC0xLDE3ICsxLDE4IEBACitmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IG1hY2hpbmVyeQotaW1wb3J0IGltcAorbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKwogaW1wb3J0IHVuaXR0ZXN0CiAKIAotY2xhc3MgUGF0aEhvb2tUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFBhdGhIb29rVGVzdDoKIAogICAgICIiIlRlc3QgdGhlIHBhdGggaG9vayBmb3Igc291cmNlLiIiIgogCiAgICAgZGVmIHBhdGhfaG9vayhzZWxmKToKLSAgICAgICAgcmV0dXJuIG1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vaygobWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsCi0gICAgICAgICAgICBtYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKKyAgICAgICAgcmV0dXJuIHNlbGYubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKChzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyLAorICAgICAgICAgICAgc2VsZi5tYWNoaW5lcnkuU09VUkNFX1NVRkZJWEVTKSkKIAogICAgIGRlZiB0ZXN0X3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoJ2R1bW15JykgYXMgbWFwcGluZzoKQEAgLTIyLDExICsyMyw4IEBACiAgICAgICAgICMgVGhlIGVtcHR5IHN0cmluZyByZXByZXNlbnRzIHRoZSBjd2QuCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYucGF0aF9ob29rKCkoJycpLCAnZmluZF9tb2R1bGUnKSkKIAotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAotICAgIHJ1bl91bml0dGVzdChQYXRoSG9va1Rlc3QpCitGcm96ZW5fUGF0aEhvb2tUZXN0LCBTb3VyY2VfUGF0aEhvb2t0ZXN0ID0gdXRpbC50ZXN0X2JvdGgoUGF0aEhvb2tUZXN0LCBtYWNoaW5lcnk9bWFjaGluZXJ5KQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS90ZXN0X3NvdXJjZV9lbmNvZGluZy5weQppbmRleCBiYTAyYjQ0Li5jNjJkZmExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvc291cmNlL3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CkBAIC0xLDE5ICsxLDI0IEBACitmcm9tIC4uIGltcG9ydCB1dGlsCiBmcm9tIC4gaW1wb3J0IHV0aWwgYXMgc291cmNlX3V0aWwKIAotZnJvbSBpbXBvcnRsaWIgaW1wb3J0IF9ib290c3RyYXAKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCisKIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHJlCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKICMgQmVjYXVzZSBzeXMucGF0aCBnZXRzIGVzc2VudGlhbGx5IGJsYW5rZWQsIG5lZWQgdG8gaGF2ZSB1bmljb2RlZGF0YSBhbHJlYWR5CiAjIGltcG9ydGVkIGZvciB0aGUgcGFyc2VyIHRvIHVzZS4KIGltcG9ydCB1bmljb2RlZGF0YQogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAogCiBDT0RJTkdfUkUgPSByZS5jb21waWxlKHInXlsgXHRcZl0qIy4qY29kaW5nWzo9XVsgXHRdKihbLVx3Ll0rKScsIHJlLkFTQ0lJKQogCiAKLWNsYXNzIEVuY29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBFbmNvZGluZ1Rlc3Q6CiAKICAgICAiIiJQRVAgMzEyMCBtYWtlcyBVVEYtOCB0aGUgZGVmYXVsdCBlbmNvZGluZyBmb3Igc291cmNlIGNvZGUKICAgICBbZGVmYXVsdCBlbmNvZGluZ10uCkBAIC0zNSw5ICs0MCw5IEBACiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMoc2VsZi5tb2R1bGVfbmFtZSkgYXMgbWFwcGluZzoKICAgICAgICAgICAgIHdpdGggb3BlbihtYXBwaW5nW3NlbGYubW9kdWxlX25hbWVdLCAnd2InKSBhcyBmaWxlOgogICAgICAgICAgICAgICAgIGZpbGUud3JpdGUoc291cmNlKQotICAgICAgICAgICAgbG9hZGVyID0gX2Jvb3RzdHJhcC5Tb3VyY2VGaWxlTG9hZGVyKHNlbGYubW9kdWxlX25hbWUsCisgICAgICAgICAgICBsb2FkZXIgPSBzZWxmLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKHNlbGYubW9kdWxlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcHBpbmdbc2VsZi5tb2R1bGVfbmFtZV0pCi0gICAgICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubW9kdWxlX25hbWUpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkKGxvYWRlcikKIAogICAgIGRlZiBjcmVhdGVfc291cmNlKHNlbGYsIGVuY29kaW5nKToKICAgICAgICAgZW5jb2RpbmdfbGluZSA9ICIjIGNvZGluZz17MH0iLmZvcm1hdChlbmNvZGluZykKQEAgLTg0LDggKzg5LDI5IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpOgogICAgICAgICAgICAgc2VsZi5ydW5fdGVzdChzb3VyY2UpCiAKK2NsYXNzIEVuY29kaW5nVGVzdFBFUDQ1MShFbmNvZGluZ1Rlc3QpOgogCi1jbGFzcyBMaW5lRW5kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGxvYWQoc2VsZiwgbG9hZGVyKToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubW9kdWxlX25hbWUsIGxvYWRlcikKKyAgICAgICAgbG9hZGVyLmV4ZWNfbW9kdWxlKG1vZHVsZSkKKyAgICAgICAgcmV0dXJuIG1vZHVsZQorCitGcm96ZW5fRW5jb2RpbmdUZXN0UEVQNDUxLCBTb3VyY2VfRW5jb2RpbmdUZXN0UEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIEVuY29kaW5nVGVzdFBFUDQ1MSwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKKworY2xhc3MgRW5jb2RpbmdUZXN0UEVQMzAyKEVuY29kaW5nVGVzdCk6CisKKyAgICBkZWYgbG9hZChzZWxmLCBsb2FkZXIpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKworRnJvemVuX0VuY29kaW5nVGVzdFBFUDMwMiwgU291cmNlX0VuY29kaW5nVGVzdFBFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBFbmNvZGluZ1Rlc3RQRVAzMDIsIG1hY2hpbmVyeT1tYWNoaW5lcnkpCisKKworY2xhc3MgTGluZUVuZGluZ1Rlc3Q6CiAKICAgICByIiIiU291cmNlIHdyaXR0ZW4gd2l0aCB0aGUgdGhyZWUgdHlwZXMgb2YgbGluZSBlbmRpbmdzIChcbiwgXHJcbiwgXHIpCiAgICAgbmVlZCB0byBiZSByZWFkYWJsZSBbY3JdW2NybGZdW2xmXS4iIiIKQEAgLTk3LDkgKzEyMyw5IEBACiAgICAgICAgIHdpdGggc291cmNlX3V0aWwuY3JlYXRlX21vZHVsZXMobW9kdWxlX25hbWUpIGFzIG1hcHBpbmc6CiAgICAgICAgICAgICB3aXRoIG9wZW4obWFwcGluZ1ttb2R1bGVfbmFtZV0sICd3YicpIGFzIGZpbGU6CiAgICAgICAgICAgICAgICAgZmlsZS53cml0ZShzb3VyY2UpCi0gICAgICAgICAgICBsb2FkZXIgPSBfYm9vdHN0cmFwLlNvdXJjZUZpbGVMb2FkZXIobW9kdWxlX25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1ttb2R1bGVfbmFtZV0pCi0gICAgICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcihtb2R1bGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZ1ttb2R1bGVfbmFtZV0pCisgICAgICAgICAgICByZXR1cm4gc2VsZi5sb2FkKGxvYWRlciwgbW9kdWxlX25hbWUpCiAKICAgICAjIFtjcl0KICAgICBkZWYgdGVzdF9jcihzZWxmKToKQEAgLTExMywxMSArMTM5LDI3IEBACiAgICAgZGVmIHRlc3RfbGYoc2VsZik6CiAgICAgICAgIHNlbGYucnVuX3Rlc3QoYidcbicpCiAKK2NsYXNzIExpbmVFbmRpbmdUZXN0UEVQNDUxKExpbmVFbmRpbmdUZXN0KToKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLSAgICBydW5fdW5pdHRlc3QoRW5jb2RpbmdUZXN0LCBMaW5lRW5kaW5nVGVzdCkKKyAgICBkZWYgbG9hZChzZWxmLCBsb2FkZXIsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShtb2R1bGVfbmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2xvYWRlcihtb2R1bGVfbmFtZSwgbG9hZGVyKQorICAgICAgICBsb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICByZXR1cm4gbW9kdWxlCisKK0Zyb3plbl9MaW5lRW5kaW5nVGVzdFBFUDQ1MSwgU291cmNlX0xpbmVFbmRpbmdUZXN0UEVQNDUxID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIExpbmVFbmRpbmdUZXN0UEVQNDUxLCBtYWNoaW5lcnk9bWFjaGluZXJ5KQorCitjbGFzcyBMaW5lRW5kaW5nVGVzdFBFUDMwMihMaW5lRW5kaW5nVGVzdCk6CisKKyAgICBkZWYgbG9hZChzZWxmLCBsb2FkZXIsIG1vZHVsZV9uYW1lKToKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICByZXR1cm4gbG9hZGVyLmxvYWRfbW9kdWxlKG1vZHVsZV9uYW1lKQorCitGcm96ZW5fTGluZUVuZGluZ1Rlc3RQRVAzMDIsIFNvdXJjZV9MaW5lRW5kaW5nVGVzdFBFUDMwMiA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBMaW5lRW5kaW5nVGVzdFBFUDMwMiwgbWFjaGluZXJ5PW1hY2hpbmVyeSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi9zb3VyY2UvdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5CmluZGV4IGFlNjU2NjMuLjYzY2QyNWEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3NvdXJjZS91dGlsLnB5CkBAIC0yLDcgKzIsNiBAQAogaW1wb3J0IGNvbnRleHRsaWIKIGltcG9ydCBlcnJubwogaW1wb3J0IGZ1bmN0b29scwotaW1wb3J0IGltcAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHN5cwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9hYmMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQppbmRleCBjNjIwYzM3Li5hMWY4ZTc2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FiYy5weQpAQCAtMSw5ICsxLDIzIEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgYWJjCi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgbWFjaGluZXJ5CitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGluc3BlY3QKK2ltcG9ydCBpbworaW1wb3J0IG1hcnNoYWwKK2ltcG9ydCBvcworaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworaW1wb3J0IHdhcm5pbmdzCiAKK2Zyb20gLiBpbXBvcnQgdXRpbAogCitmcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitmcm96ZW5fYWJjLCBzb3VyY2VfYWJjID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIuYWJjJykKK21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKworIyMjIyMgSW5oZXJpdGFuY2UgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIGNsYXNzIEluaGVyaXRhbmNlVGVzdHM6CiAKICAgICAiIiJUZXN0IHRoYXQgdGhlIHNwZWNpZmllZCBjbGFzcyBpcyBhIHN1YmNsYXNzL3N1cGVyY2xhc3Mgb2YgdGhlIGV4cGVjdGVkCkBAIC0xNCw4ICsyOCwxOSBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLnN1cGVyY2xhc3NlcyA9IFtnZXRhdHRyKHNlbGYuYWJjLCBjbGFzc19uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgY2xhc3NfbmFtZSBpbiBzZWxmLnN1cGVyY2xhc3NfbmFtZXNdCisgICAgICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3N1YmNsYXNzX25hbWVzJyk6CisgICAgICAgICAgICAjIEJlY2F1c2UgdGVzdC5zdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoKSBjcmVhdGVzIGEgbmV3CisgICAgICAgICAgICAjIGltcG9ydGxpYi5fYm9vdHN0cmFwIHBlciBtb2R1bGUsIGluaGVyaXRhbmNlIGNoZWNrcyBmYWlsIHdoZW4KKyAgICAgICAgICAgICMgY2hlY2tpbmcgYWNyb3NzIG1vZHVsZSBib3VuZGFyaWVzIChpLmUuIHRoZSBfYm9vdHN0cmFwIGluIGFiYyBpcworICAgICAgICAgICAgIyBub3QgdGhlIHNhbWUgYXMgdGhlIG9uZSBpbiBtYWNoaW5lcnkpLiBUaGF0IG1lYW5zIHN0ZWFsaW5nIG9uZSBvZgorICAgICAgICAgICAgIyB0aGUgbW9kdWxlcyBmcm9tIHRoZSBvdGhlciB0byBtYWtlIHN1cmUgdGhlIHNhbWUgaW5zdGFuY2UgaXMgdXNlZC4KKyAgICAgICAgICAgIHNlbGYuc3ViY2xhc3NlcyA9IFtnZXRhdHRyKHNlbGYuYWJjLm1hY2hpbmVyeSwgY2xhc3NfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGNsYXNzX25hbWUgaW4gc2VsZi5zdWJjbGFzc19uYW1lc10KICAgICAgICAgYXNzZXJ0IHNlbGYuc3ViY2xhc3NlcyBvciBzZWxmLnN1cGVyY2xhc3Nlcywgc2VsZi5fX2NsYXNzX18KLSAgICAgICAgc2VsZi5fX3Rlc3QgPSBnZXRhdHRyKGFiYywgc2VsZi5fX2NsYXNzX18uX19uYW1lX18pCisgICAgICAgIHRlc3RpbmcgPSBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXy5wYXJ0aXRpb24oJ18nKVsyXQorICAgICAgICBzZWxmLl9fdGVzdCA9IGdldGF0dHIoc2VsZi5hYmMsIHRlc3RpbmcpCiAKICAgICBkZWYgdGVzdF9zdWJjbGFzc2VzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZXhwZWN0ZWQgc3ViY2xhc3NlcyBpbmhlcml0LgpAQCAtMjksNzUgKzU0LDg5OCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc2VsZi5fX3Rlc3QsIHN1cGVyY2xhc3MpLAogICAgICAgICAgICAgICAgInswfSBpcyBub3QgYSBzdXBlcmNsYXNzIG9mIHsxfSIuZm9ybWF0KHN1cGVyY2xhc3MsIHNlbGYuX190ZXN0KSkKIAorZGVmIGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhiYXNlX2NsYXNzKToKKyAgICBkZWYgc2V0X2Zyb3plbihucyk6CisgICAgICAgIG5zWydhYmMnXSA9IGZyb3plbl9hYmMKKyAgICBkZWYgc2V0X3NvdXJjZShucyk6CisgICAgICAgIG5zWydhYmMnXSA9IHNvdXJjZV9hYmMKIAotY2xhc3MgTWV0YVBhdGhGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5GaW5kZXJdCi0gICAgc3ViY2xhc3NlcyA9IFttYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLCBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsCi0gICAgICAgICAgICAgICAgICAgIG1hY2hpbmVyeS5QYXRoRmluZGVyLCBtYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyXQotCi0KLWNsYXNzIFBhdGhFbnRyeUZpbmRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkZpbmRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5GaWxlRmluZGVyXQotCi0KLWNsYXNzIExvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdWJjbGFzc2VzID0gW2FiYy5QeUxvYWRlcl0KLQotCi1jbGFzcyBSZXNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkxvYWRlcl0KLQotCi1jbGFzcyBJbnNwZWN0TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuTG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbYWJjLlB5TG9hZGVyLCBtYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICBtYWNoaW5lcnkuRnJvemVuSW1wb3J0ZXIsIG1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyXQotCi0KLWNsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLkluc3BlY3RMb2FkZXJdCi0gICAgc3ViY2xhc3NlcyA9IFthYmMuUHlMb2FkZXJdCi0KLQotY2xhc3MgRmlsZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBzdXBlcmNsYXNzZXMgPSBbYWJjLlJlc291cmNlTG9hZGVyLCBhYmMuRXhlY3V0aW9uTG9hZGVyXQotICAgIHN1YmNsYXNzZXMgPSBbbWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIsIG1hY2hpbmVyeS5Tb3VyY2VsZXNzRmlsZUxvYWRlcl0KLQotCi1jbGFzcyBTb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5SZXNvdXJjZUxvYWRlciwgYWJjLkV4ZWN1dGlvbkxvYWRlcl0KLSAgICBzdWJjbGFzc2VzID0gW21hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyXQotCi0KLWNsYXNzIFB5TG9hZGVyKEluaGVyaXRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIHN1cGVyY2xhc3NlcyA9IFthYmMuTG9hZGVyLCBhYmMuUmVzb3VyY2VMb2FkZXIsIGFiYy5FeGVjdXRpb25Mb2FkZXJdCi0KLQotY2xhc3MgUHlQeWNMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgc3VwZXJjbGFzc2VzID0gW2FiYy5QeUxvYWRlcl0KLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAogICAgIGNsYXNzZXMgPSBbXQotICAgIGZvciBjbGFzc18gaW4gZ2xvYmFscygpLnZhbHVlcygpOgotICAgICAgICBpZiAoaW5zcGVjdC5pc2NsYXNzKGNsYXNzXykgYW5kCi0gICAgICAgICAgICAgICAgaXNzdWJjbGFzcyhjbGFzc18sIHVuaXR0ZXN0LlRlc3RDYXNlKSBhbmQKLSAgICAgICAgICAgICAgICBpc3N1YmNsYXNzKGNsYXNzXywgSW5oZXJpdGFuY2VUZXN0cykpOgotICAgICAgICAgICAgY2xhc3Nlcy5hcHBlbmQoY2xhc3NfKQotICAgIHJ1bl91bml0dGVzdCgqY2xhc3NlcykKKyAgICBmb3IgcHJlZml4LCBuc19zZXQgaW4gWygnRnJvemVuJywgc2V0X2Zyb3plbiksICgnU291cmNlJywgc2V0X3NvdXJjZSldOgorICAgICAgICBjbGFzc2VzLmFwcGVuZCh0eXBlcy5uZXdfY2xhc3MoJ18nLmpvaW4oW3ByZWZpeCwgYmFzZV9jbGFzcy5fX25hbWVfX10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJhc2VfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfYm9keT1uc19zZXQpKQorICAgIHJldHVybiBjbGFzc2VzCisKKworY2xhc3MgTWV0YVBhdGhGaW5kZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnRmluZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnQnVpbHRpbkltcG9ydGVyJywgJ0Zyb3plbkltcG9ydGVyJywgJ1BhdGhGaW5kZXInLAorICAgICAgICAgICAgICAgICAgICAgICdXaW5kb3dzUmVnaXN0cnlGaW5kZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhNZXRhUGF0aEZpbmRlcikKK0Zyb3plbl9NZXRhUGF0aEZpbmRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9NZXRhUGF0aEZpbmRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydGaW5kZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydGaWxlRmluZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoUGF0aEVudHJ5RmluZGVyKQorRnJvemVuX1BhdGhFbnRyeUZpbmRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9QYXRoRW50cnlGaW5kZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBSZXNvdXJjZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhSZXNvdXJjZUxvYWRlcikKK0Zyb3plbl9SZXNvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMsIFNvdXJjZV9SZXNvdXJjZUxvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEluc3BlY3RMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnQnVpbHRpbkltcG9ydGVyJywgJ0Zyb3plbkltcG9ydGVyJywgJ0V4dGVuc2lvbkZpbGVMb2FkZXInXQorCit0ZXN0cyA9IGNyZWF0ZV9pbmhlcml0YW5jZV90ZXN0cyhJbnNwZWN0TG9hZGVyKQorRnJvemVuX0luc3BlY3RMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfSW5zcGVjdExvYWRlckluaGVyaXRhbmNlVGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydJbnNwZWN0TG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnRXh0ZW5zaW9uRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKEV4ZWN1dGlvbkxvYWRlcikKK0Zyb3plbl9FeGVjdXRpb25Mb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfRXhlY3V0aW9uTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgRmlsZUxvYWRlcihJbmhlcml0YW5jZVRlc3RzKToKKyAgICBzdXBlcmNsYXNzX25hbWVzID0gWydSZXNvdXJjZUxvYWRlcicsICdFeGVjdXRpb25Mb2FkZXInXQorICAgIHN1YmNsYXNzX25hbWVzID0gWydTb3VyY2VGaWxlTG9hZGVyJywgJ1NvdXJjZWxlc3NGaWxlTG9hZGVyJ10KKwordGVzdHMgPSBjcmVhdGVfaW5oZXJpdGFuY2VfdGVzdHMoRmlsZUxvYWRlcikKK0Zyb3plbl9GaWxlTG9hZGVySW5oZXJpdGFuY2VUZXN0cywgU291cmNlX0ZpbGVMb2FkZXJJbmhlcml0YW5jZVRlc3RzID0gdGVzdHMKKworCitjbGFzcyBTb3VyY2VMb2FkZXIoSW5oZXJpdGFuY2VUZXN0cyk6CisgICAgc3VwZXJjbGFzc19uYW1lcyA9IFsnUmVzb3VyY2VMb2FkZXInLCAnRXhlY3V0aW9uTG9hZGVyJ10KKyAgICBzdWJjbGFzc19uYW1lcyA9IFsnU291cmNlRmlsZUxvYWRlciddCisKK3Rlc3RzID0gY3JlYXRlX2luaGVyaXRhbmNlX3Rlc3RzKFNvdXJjZUxvYWRlcikKK0Zyb3plbl9Tb3VyY2VMb2FkZXJJbmhlcml0YW5jZVRlc3RzLCBTb3VyY2VfU291cmNlTG9hZGVySW5oZXJpdGFuY2VUZXN0cyA9IHRlc3RzCisKKyMjIyMjIERlZmF1bHQgcmV0dXJuIHZhbHVlcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitkZWYgbWFrZV9hYmNfc3ViY2xhc3NlcyhiYXNlX2NsYXNzKToKKyAgICBjbGFzc2VzID0gW10KKyAgICBmb3Iga2luZCwgYWJjIGluIFsoJ0Zyb3plbicsIGZyb3plbl9hYmMpLCAoJ1NvdXJjZScsIHNvdXJjZV9hYmMpXToKKyAgICAgICAgbmFtZSA9ICdfJy5qb2luKFtraW5kLCBiYXNlX2NsYXNzLl9fbmFtZV9fXSkKKyAgICAgICAgYmFzZV9jbGFzc2VzID0gYmFzZV9jbGFzcywgZ2V0YXR0cihhYmMsIGJhc2VfY2xhc3MuX19uYW1lX18pCisgICAgICAgIGNsYXNzZXMuYXBwZW5kKHR5cGVzLm5ld19jbGFzcyhuYW1lLCBiYXNlX2NsYXNzZXMpKQorICAgIHJldHVybiBjbGFzc2VzCisKK2RlZiBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhiYXNlX2NsYXNzLCB0ZXN0X2NsYXNzKToKKyAgICBmcm96ZW5fY2xhc3MsIHNvdXJjZV9jbGFzcyA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoYmFzZV9jbGFzcykKKyAgICB0ZXN0cyA9IFtdCisgICAgZm9yIHByZWZpeCwgY2xhc3NfaW5fdGVzdCBpbiBbKCdGcm96ZW4nLCBmcm96ZW5fY2xhc3MpLCAoJ1NvdXJjZScsIHNvdXJjZV9jbGFzcyldOgorICAgICAgICBkZWYgc2V0X25zKG5zKToKKyAgICAgICAgICAgIG5zWydpbnMnXSA9IGNsYXNzX2luX3Rlc3QoKQorICAgICAgICB0ZXN0cy5hcHBlbmQodHlwZXMubmV3X2NsYXNzKCdfJy5qb2luKFtwcmVmaXgsIHRlc3RfY2xhc3MuX19uYW1lX19dKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGVzdF9jbGFzcywgdW5pdHRlc3QuVGVzdENhc2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfYm9keT1zZXRfbnMpKQorICAgIHJldHVybiB0ZXN0cworCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyOgorCisgICAgZGVmIGZpbmRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZmluZF9tb2R1bGUoZnVsbG5hbWUsIHBhdGgpCisKK0Zyb3plbl9NUEYsIFNvdXJjZV9NUEYgPSBtYWtlX2FiY19zdWJjbGFzc2VzKE1ldGFQYXRoRmluZGVyKQorCisKK2NsYXNzIE1ldGFQYXRoRmluZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2ZpbmRfbW9kdWxlKHNlbGYpOgorICAgICAgICAjIERlZmF1bHQgc2hvdWxkIHJldHVybiBOb25lLgorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmlucy5maW5kX21vZHVsZSgnc29tZXRoaW5nJywgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKKyAgICAgICAgIyBDYWxsaW5nIHRoZSBtZXRob2QgaXMgYSBuby1vcC4KKyAgICAgICAgc2VsZi5pbnMuaW52YWxpZGF0ZV9jYWNoZXMoKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoTWV0YVBhdGhGaW5kZXIsIE1ldGFQYXRoRmluZGVyRGVmYXVsdHNUZXN0cykKK0Zyb3plbl9NUEZEZWZhdWx0VGVzdHMsIFNvdXJjZV9NUEZEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIFBhdGhFbnRyeUZpbmRlcjoKKworICAgIGRlZiBmaW5kX2xvYWRlcihzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmZpbmRfbG9hZGVyKGZ1bGxuYW1lKQorCitGcm96ZW5fUEVGLCBTb3VyY2VfUEVGID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhQYXRoRW50cnlGaW5kZXIpCisKKworY2xhc3MgUGF0aEVudHJ5RmluZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2ZpbmRfbG9hZGVyKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChOb25lLCBbXSksIHNlbGYuaW5zLmZpbmRfbG9hZGVyKCdzb21ldGhpbmcnKSkKKworICAgIGRlZiBmaW5kX21vZHVsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCBzZWxmLmlucy5maW5kX21vZHVsZSgnc29tZXRoaW5nJykpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkYXRlX2NhY2hlcyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgYmUgYSBuby1vcC4KKyAgICAgICAgc2VsZi5pbnMuaW52YWxpZGF0ZV9jYWNoZXMoKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoUGF0aEVudHJ5RmluZGVyLCBQYXRoRW50cnlGaW5kZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX1BFRkRlZmF1bHRUZXN0cywgU291cmNlX1BFRkRlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgTG9hZGVyOgorCisgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkubG9hZF9tb2R1bGUoZnVsbG5hbWUpCisKKworRnJvemVuX0wsIFNvdXJjZV9MID0gbWFrZV9hYmNfc3ViY2xhc3NlcyhMb2FkZXIpCisKKworY2xhc3MgTG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2xvYWRfbW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmxvYWRfbW9kdWxlKCdzb21ldGhpbmcnKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHIoc2VsZik6CisgICAgICAgIG1vZCA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMubW9kdWxlX3JlcHIobW9kKQorICAgICAgICBvcmlnaW5hbF9yZXByID0gcmVwcihtb2QpCisgICAgICAgIG1vZC5fX2xvYWRlcl9fID0gc2VsZi5pbnMKKyAgICAgICAgIyBTaG91bGQgc3RpbGwgcmV0dXJuIGEgcHJvcGVyIHJlcHIuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKG1vZCkpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhMb2FkZXIsIExvYWRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fTERlZmF1bHRUZXN0cywgU291cmNlTERlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXIoTG9hZGVyKToKKworICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKKworCitGcm96ZW5fUkwsIFNvdXJjZV9STCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoUmVzb3VyY2VMb2FkZXIpCisKKworY2xhc3MgUmVzb3VyY2VMb2FkZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfZ2V0X2RhdGEoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgICAgICBzZWxmLmlucy5nZXRfZGF0YSgnL3NvbWUvcGF0aCcpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhSZXNvdXJjZUxvYWRlciwgUmVzb3VyY2VMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX1JMRGVmYXVsdFRlc3RzLCBTb3VyY2VfUkxEZWZhdWx0VGVzdHMgPSB0ZXN0cworCisKK2NsYXNzIEluc3BlY3RMb2FkZXIoTG9hZGVyKToKKworICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuaXNfcGFja2FnZShmdWxsbmFtZSkKKworICAgIGRlZiBnZXRfc291cmNlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X3NvdXJjZShmdWxsbmFtZSkKKworCitGcm96ZW5fSUwsIFNvdXJjZV9JTCA9IG1ha2VfYWJjX3N1YmNsYXNzZXMoSW5zcGVjdExvYWRlcikKKworCitjbGFzcyBJbnNwZWN0TG9hZGVyRGVmYXVsdHNUZXN0czoKKworICAgIGRlZiB0ZXN0X2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgc2VsZi5pbnMuaXNfcGFja2FnZSgnYmxhaCcpCisKKyAgICBkZWYgdGVzdF9nZXRfc291cmNlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9zb3VyY2UoJ2JsYWgnKQorCisKK3Rlc3RzID0gbWFrZV9yZXR1cm5fdmFsdWVfdGVzdHMoSW5zcGVjdExvYWRlciwgSW5zcGVjdExvYWRlckRlZmF1bHRzVGVzdHMpCitGcm96ZW5fSUxEZWZhdWx0VGVzdHMsIFNvdXJjZV9JTERlZmF1bHRUZXN0cyA9IHRlc3RzCisKKworY2xhc3MgRXhlY3V0aW9uTG9hZGVyKEluc3BlY3RMb2FkZXIpOgorCisgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBmdWxsbmFtZSk6CisgICAgICAgIHJldHVybiBzdXBlcigpLmdldF9maWxlbmFtZShmdWxsbmFtZSkKKworRnJvemVuX0VMLCBTb3VyY2VfRUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKEV4ZWN1dGlvbkxvYWRlcikKKworCitjbGFzcyBFeGVjdXRpb25Mb2FkZXJEZWZhdWx0c1Rlc3RzOgorCisgICAgZGVmIHRlc3RfZ2V0X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKKyAgICAgICAgICAgIHNlbGYuaW5zLmdldF9maWxlbmFtZSgnYmxhaCcpCisKKwordGVzdHMgPSBtYWtlX3JldHVybl92YWx1ZV90ZXN0cyhFeGVjdXRpb25Mb2FkZXIsIEluc3BlY3RMb2FkZXJEZWZhdWx0c1Rlc3RzKQorRnJvemVuX0VMRGVmYXVsdFRlc3RzLCBTb3VyY2VfRUxEZWZhdWx0c1Rlc3RzID0gdGVzdHMKKworIyMjIyMgTWV0YVBhdGhGaW5kZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworY2xhc3MgTWV0YVBhdGhGaW5kZXJGaW5kTW9kdWxlVGVzdHM6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZGVyKGNscywgc3BlYyk6CisgICAgICAgIGNsYXNzIE1ldGFQYXRoU3BlY0ZpbmRlcihjbHMuYWJjLk1ldGFQYXRoRmluZGVyKToKKworICAgICAgICAgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgcGF0aCwgdGFyZ2V0PU5vbmUpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGVkX2ZvciA9IGZ1bGxuYW1lLCBwYXRoCisgICAgICAgICAgICAgICAgcmV0dXJuIHNwZWMKKworICAgICAgICByZXR1cm4gTWV0YVBhdGhTcGVjRmluZGVyKCkKKworICAgIGRlZiB0ZXN0X25vX3NwZWMoc2VsZik6CisgICAgICAgIGZpbmRlciA9IHNlbGYuZmluZGVyKE5vbmUpCisgICAgICAgIHBhdGggPSBbJ2EnLCAnYicsICdjJ10KKyAgICAgICAgbmFtZSA9ICdibGFoJworICAgICAgICBmb3VuZCA9IGZpbmRlci5maW5kX21vZHVsZShuYW1lLCBwYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmb3VuZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBmaW5kZXIuY2FsbGVkX2ZvclswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRoLCBmaW5kZXIuY2FsbGVkX2ZvclsxXSkKKworICAgIGRlZiB0ZXN0X3NwZWMoc2VsZik6CisgICAgICAgIGxvYWRlciA9IG9iamVjdCgpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcignYmxhaCcsIGxvYWRlcikKKyAgICAgICAgZmluZGVyID0gc2VsZi5maW5kZXIoc3BlYykKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9tb2R1bGUoJ2JsYWgnLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvdW5kLCBzcGVjLmxvYWRlcikKKworCitGcm96ZW5fTVBGRmluZE1vZHVsZVRlc3RzLCBTb3VyY2VfTVBGRmluZE1vZHVsZVRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE1ldGFQYXRoRmluZGVyRmluZE1vZHVsZVRlc3RzLAorICAgICAgICBhYmM9KGZyb3plbl9hYmMsIHNvdXJjZV9hYmMpLAorICAgICAgICB1dGlsPShmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwpKQorCisjIyMjIyBQYXRoRW50cnlGaW5kZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBQYXRoRW50cnlGaW5kZXJGaW5kTG9hZGVyVGVzdHM6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgZmluZGVyKGNscywgc3BlYyk6CisgICAgICAgIGNsYXNzIFBhdGhFbnRyeVNwZWNGaW5kZXIoY2xzLmFiYy5QYXRoRW50cnlGaW5kZXIpOgorCisgICAgICAgICAgICBkZWYgZmluZF9zcGVjKHNlbGYsIGZ1bGxuYW1lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICAgICAgICAgc2VsZi5jYWxsZWRfZm9yID0gZnVsbG5hbWUKKyAgICAgICAgICAgICAgICByZXR1cm4gc3BlYworCisgICAgICAgIHJldHVybiBQYXRoRW50cnlTcGVjRmluZGVyKCkKKworICAgIGRlZiB0ZXN0X25vX3NwZWMoc2VsZik6CisgICAgICAgIGZpbmRlciA9IHNlbGYuZmluZGVyKE5vbmUpCisgICAgICAgIG5hbWUgPSAnYmxhaCcKKyAgICAgICAgZm91bmQgPSBmaW5kZXIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZm91bmRbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoW10sIGZvdW5kWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIGZpbmRlci5jYWxsZWRfZm9yKQorCisgICAgZGVmIHRlc3Rfc3BlY193aXRoX2xvYWRlcihzZWxmKToKKyAgICAgICAgbG9hZGVyID0gb2JqZWN0KCkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKCdibGFoJywgbG9hZGVyKQorICAgICAgICBmaW5kZXIgPSBzZWxmLmZpbmRlcihzcGVjKQorICAgICAgICBmb3VuZCA9IGZpbmRlci5maW5kX2xvYWRlcignYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm91bmRbMF0sIHNwZWMubG9hZGVyKQorCisgICAgZGVmIHRlc3Rfc3BlY193aXRoX3BvcnRpb25zKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnYmxhaCcsIE5vbmUpCisgICAgICAgIHBhdGhzID0gWydhJywgJ2InLCAnYyddCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBwYXRocworICAgICAgICBmaW5kZXIgPSBzZWxmLmZpbmRlcihzcGVjKQorICAgICAgICBmb3VuZCA9IGZpbmRlci5maW5kX2xvYWRlcignYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGZvdW5kWzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGhzLCBmb3VuZFsxXSkKKworCitGcm96ZW5fUEVGRmluZExvYWRlclRlc3RzLCBTb3VyY2VfUEVGRmluZExvYWRlclRlc3RzID0gdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBhdGhFbnRyeUZpbmRlckZpbmRMb2FkZXJUZXN0cywKKyAgICAgICAgYWJjPShmcm96ZW5fYWJjLCBzb3VyY2VfYWJjKSwKKyAgICAgICAgbWFjaGluZXJ5PW1hY2hpbmVyeSwKKyAgICAgICAgdXRpbD0oZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsKSkKKworCisjIyMjIyBMb2FkZXIgY29uY3JldGUgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworY2xhc3MgTG9hZGVyTG9hZE1vZHVsZVRlc3RzOgorCisgICAgZGVmIGxvYWRlcihzZWxmKToKKyAgICAgICAgY2xhc3MgU3BlY0xvYWRlcihzZWxmLmFiYy5Mb2FkZXIpOgorICAgICAgICAgICAgZm91bmQgPSBOb25lCisgICAgICAgICAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICBzZWxmLmZvdW5kID0gbW9kdWxlCisKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgICAgICAgICAiIiJGb3JjZSBzb21lIG5vbi1kZWZhdWx0IG1vZHVsZSBzdGF0ZSB0byBiZSBzZXQuIiIiCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXR1cm4gU3BlY0xvYWRlcigpCisKKyAgICBkZWYgdGVzdF9mcmVzaChzZWxmKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIoKQorICAgICAgICBuYW1lID0gJ2JsYWgnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSBsb2FkZXIuZm91bmQKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbbmFtZV0sIG1vZHVsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIG1vZHVsZS5fX2xvYWRlcl9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlciwgbW9kdWxlLl9fc3BlY19fLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuYW1lLCBtb2R1bGUuX19uYW1lX18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmFtZSwgbW9kdWxlLl9fc3BlY19fLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG1vZHVsZS5fX3BhdGhfXykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUobW9kdWxlLl9fcGF0aF9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18uc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMpCisKKyAgICBkZWYgdGVzdF9yZWxvYWQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnYmxhaCcKKyAgICAgICAgbG9hZGVyID0gc2VsZi5sb2FkZXIoKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKG5hbWUsIGxvYWRlcikKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgbG9hZGVyLmxvYWRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICBmb3VuZCA9IGxvYWRlci5mb3VuZAorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhmb3VuZCwgc3lzLm1vZHVsZXNbbmFtZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZSwgc3lzLm1vZHVsZXNbbmFtZV0pCisKKworRnJvemVuX0xvYWRlckxvYWRNb2R1bGVUZXN0cywgU291cmNlX0xvYWRlckxvYWRNb2R1bGVUZXN0cyA9IHV0aWwudGVzdF9ib3RoKAorICAgICAgICBMb2FkZXJMb2FkTW9kdWxlVGVzdHMsCisgICAgICAgIGFiYz0oZnJvemVuX2FiYywgc291cmNlX2FiYyksCisgICAgICAgIHV0aWw9KGZyb3plbl91dGlsLCBzb3VyY2VfdXRpbCkpCisKKworIyMjIyMgSW5zcGVjdExvYWRlciBjb25jcmV0ZSBtZXRob2RzICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0czoKKworICAgIGRlZiBzb3VyY2VfdG9fbW9kdWxlKHNlbGYsIGRhdGEsIHBhdGg9Tm9uZSk6CisgICAgICAgICIiIkhlbHAgd2l0aCBzb3VyY2VfdG9fY29kZSgpIHRlc3RzLiIiIgorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICBpZiBwYXRoIGlzIE5vbmU6CisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKGRhdGEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKGRhdGEsIHBhdGgpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICByZXR1cm4gbW9kdWxlCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgU2luY2UgY29tcGlsZSgpIGNhbiBoYW5kbGUgc3RyaW5ncywgc28gc2hvdWxkIHNvdXJjZV90b19jb2RlKCkuCisgICAgICAgIHNvdXJjZSA9ICdhdHRyID0gNDInCisgICAgICAgIG1vZHVsZSA9IHNlbGYuc291cmNlX3RvX21vZHVsZShzb3VyY2UpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ2F0dHInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuYXR0ciwgNDIpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfdG9fY29kZV9ieXRlcyhzZWxmKToKKyAgICAgICAgIyBTaW5jZSBjb21waWxlKCkgY2FuIGhhbmRsZSBieXRlcywgc28gc2hvdWxkIHNvdXJjZV90b19jb2RlKCkuCisgICAgICAgIHNvdXJjZSA9IGInYXR0ciA9IDQyJworICAgICAgICBtb2R1bGUgPSBzZWxmLnNvdXJjZV90b19tb2R1bGUoc291cmNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2R1bGUsICdhdHRyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfcGF0aChzZWxmKToKKyAgICAgICAgIyBTcGVjaWZ5aW5nIGEgcGF0aCBzaG91bGQgc2V0IGl0IGZvciB0aGUgY29kZSBvYmplY3QuCisgICAgICAgIHBhdGggPSAncGF0aC90by9zb21ld2hlcmUnCisgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgY29kZSA9IGxvYWRlci5zb3VyY2VfdG9fY29kZSgnJywgcGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCBwYXRoKQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGVfbm9fcGF0aChzZWxmKToKKyAgICAgICAgIyBOb3Qgc2V0dGluZyBhIHBhdGggc2hvdWxkIHN0aWxsIHdvcmsgYW5kIGJlIHNldCB0byA8c3RyaW5nPiBzaW5jZSB0aGF0CisgICAgICAgICMgaXMgYSBwcmUtZXhpc3RpbmcgcHJhY3RpY2UgYXMgYSBkZWZhdWx0IHRvIGNvbXBpbGUoKS4KKyAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICBjb2RlID0gbG9hZGVyLnNvdXJjZV90b19jb2RlKCcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvZGUuY29fZmlsZW5hbWUsICc8c3RyaW5nPicpCisKKworY2xhc3MgRnJvemVuX0lMU291cmNlVG9Db2RlVGVzdHMoSW5zcGVjdExvYWRlclNvdXJjZVRvQ29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gRnJvemVuX0lMCisKK2NsYXNzIFNvdXJjZV9JTFNvdXJjZVRvQ29kZVRlc3RzKEluc3BlY3RMb2FkZXJTb3VyY2VUb0NvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKK2NsYXNzIEluc3BlY3RMb2FkZXJHZXRDb2RlVGVzdHM6CisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHN1Y2Nlc3MuCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzLCAnZ2V0X3NvdXJjZScpIGFzIG1vY2tlZDoKKyAgICAgICAgICAgIG1vY2tlZC5yZXR1cm5fdmFsdWUgPSAnYXR0ciA9IDQyJworICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlX3NvdXJjZV9pc19Ob25lKHNlbGYpOgorICAgICAgICAjIElmIGdldF9zb3VyY2UoKSBpcyBOb25lIHRoZW4gdGhpcyBzaG91bGQgYmUgTm9uZS4KKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcywgJ2dldF9zb3VyY2UnKSBhcyBtb2NrZWQ6CisgICAgICAgICAgICBtb2NrZWQucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvZGUpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2Vfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICAjIElmIHRoZXJlIGlzIG5vIHNvdXJjZSB0aGVuIHRoZXJlIGlzIG5vIGNvZGUgb2JqZWN0LgorICAgICAgICBsb2FkZXIgPSBzZWxmLkluc3BlY3RMb2FkZXJTdWJjbGFzcygpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKworCitjbGFzcyBGcm96ZW5fSUxHZXRDb2RlVGVzdHMoSW5zcGVjdExvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IEZyb3plbl9JTAorCitjbGFzcyBTb3VyY2VfSUxHZXRDb2RlVGVzdHMoSW5zcGVjdExvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEluc3BlY3RMb2FkZXJTdWJjbGFzcyA9IFNvdXJjZV9JTAorCisKK2NsYXNzIEluc3BlY3RMb2FkZXJMb2FkTW9kdWxlVGVzdHM6CisKKyAgICAiIiJUZXN0IEluc3BlY3RMb2FkZXIubG9hZF9tb2R1bGUoKS4iIiIKKworICAgIG1vZHVsZV9uYW1lID0gJ2JsYWgnCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQudW5sb2FkKHNlbGYubW9kdWxlX25hbWUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubG9hZCwgc2VsZi5tb2R1bGVfbmFtZSkKKworICAgIGRlZiBtb2NrX2dldF9jb2RlKHNlbGYpOgorICAgICAgICByZXR1cm4gbW9jay5wYXRjaC5vYmplY3Qoc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MsICdnZXRfY29kZScpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9JbXBvcnRFcnJvcihzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfY29kZSgpIHJhaXNlcyBJbXBvcnRFcnJvciwgaXQgc2hvdWxkIHByb3BhZ2F0ZS4KKyAgICAgICAgd2l0aCBzZWxmLm1vY2tfZ2V0X2NvZGUoKSBhcyBtb2NrZWRfZ2V0X2NvZGU6CisgICAgICAgICAgICBtb2NrZWRfZ2V0X2NvZGUuc2lkZV9lZmZlY3QgPSBJbXBvcnRFcnJvcgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5JbnNwZWN0TG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfTm9uZShzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfY29kZSgpIHJldHVybnMgTm9uZSwgcmFpc2UgSW1wb3J0RXJyb3IuCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2dldF9jb2RlKCkgYXMgbW9ja2VkX2dldF9jb2RlOgorICAgICAgICAgICAgbW9ja2VkX2dldF9jb2RlLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW1wb3J0RXJyb3IpOgorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgICAgICBsb2FkZXIubG9hZF9tb2R1bGUoc2VsZi5tb2R1bGVfbmFtZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9yZXR1cm5lZChzZWxmKToKKyAgICAgICAgIyBUaGUgbG9hZGVkIG1vZHVsZSBzaG91bGQgYmUgcmV0dXJuZWQuCisgICAgICAgIGNvZGUgPSBjb21waWxlKCdhdHRyID0gNDInLCAnPHN0cmluZz4nLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5tb2NrX2dldF9jb2RlKCkgYXMgbW9ja2VkX2dldF9jb2RlOgorICAgICAgICAgICAgbW9ja2VkX2dldF9jb2RlLnJldHVybl92YWx1ZSA9IGNvZGUKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuSW5zcGVjdExvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgICAgIG1vZHVsZSA9IGxvYWRlci5sb2FkX21vZHVsZShzZWxmLm1vZHVsZV9uYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUsIHN5cy5tb2R1bGVzW3NlbGYubW9kdWxlX25hbWVdKQorCisKK2NsYXNzIEZyb3plbl9JTExvYWRNb2R1bGVUZXN0cyhJbnNwZWN0TG9hZGVyTG9hZE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gRnJvemVuX0lMCisKK2NsYXNzIFNvdXJjZV9JTExvYWRNb2R1bGVUZXN0cyhJbnNwZWN0TG9hZGVyTG9hZE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgSW5zcGVjdExvYWRlclN1YmNsYXNzID0gU291cmNlX0lMCisKKworIyMjIyMgRXhlY3V0aW9uTG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIEV4ZWN1dGlvbkxvYWRlckdldENvZGVUZXN0czoKKworICAgIGRlZiBtb2NrX21ldGhvZHMoc2VsZiwgKiwgZ2V0X3NvdXJjZT1GYWxzZSwgZ2V0X2ZpbGVuYW1lPUZhbHNlKToKKyAgICAgICAgc291cmNlX21vY2tfY29udGV4dCwgZmlsZW5hbWVfbW9ja19jb250ZXh0ID0gTm9uZSwgTm9uZQorICAgICAgICBpZiBnZXRfc291cmNlOgorICAgICAgICAgICAgc291cmNlX21vY2tfY29udGV4dCA9IG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9zb3VyY2UnKQorICAgICAgICBpZiBnZXRfZmlsZW5hbWU6CisgICAgICAgICAgICBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBtb2NrLnBhdGNoLm9iamVjdChzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9maWxlbmFtZScpCisgICAgICAgIHJldHVybiBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQKKworICAgIGRlZiB0ZXN0X2dldF9jb2RlKHNlbGYpOgorICAgICAgICBwYXRoID0gJ2JsYWgucHknCisgICAgICAgIHNvdXJjZV9tb2NrX2NvbnRleHQsIGZpbGVuYW1lX21vY2tfY29udGV4dCA9IHNlbGYubW9ja19tZXRob2RzKAorICAgICAgICAgICAgICAgIGdldF9zb3VyY2U9VHJ1ZSwgZ2V0X2ZpbGVuYW1lPVRydWUpCisgICAgICAgIHdpdGggc291cmNlX21vY2tfY29udGV4dCBhcyBzb3VyY2VfbW9jaywgZmlsZW5hbWVfbW9ja19jb250ZXh0IGFzIG5hbWVfbW9jazoKKyAgICAgICAgICAgIHNvdXJjZV9tb2NrLnJldHVybl92YWx1ZSA9ICdhdHRyID0gNDInCisgICAgICAgICAgICBuYW1lX21vY2sucmV0dXJuX3ZhbHVlID0gcGF0aAorICAgICAgICAgICAgbG9hZGVyID0gc2VsZi5FeGVjdXRpb25Mb2FkZXJTdWJjbGFzcygpCisgICAgICAgICAgICBjb2RlID0gbG9hZGVyLmdldF9jb2RlKCdibGFoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlLmNvX2ZpbGVuYW1lLCBwYXRoKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgZXhlYyhjb2RlLCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLmF0dHIsIDQyKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfc291cmNlX2lzX05vbmUoc2VsZik6CisgICAgICAgICMgSWYgZ2V0X3NvdXJjZSgpIGlzIE5vbmUgdGhlbiB0aGlzIHNob3VsZCBiZSBOb25lLgorICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBfID0gc2VsZi5tb2NrX21ldGhvZHMoZ2V0X3NvdXJjZT1UcnVlKQorICAgICAgICB3aXRoIHNvdXJjZV9tb2NrX2NvbnRleHQgYXMgbW9ja2VkOgorICAgICAgICAgICAgbW9ja2VkLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvZGUpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZV9zb3VyY2Vfbm90X2ZvdW5kKHNlbGYpOgorICAgICAgICAjIElmIHRoZXJlIGlzIG5vIHNvdXJjZSB0aGVuIHRoZXJlIGlzIG5vIGNvZGUgb2JqZWN0LgorICAgICAgICBsb2FkZXIgPSBzZWxmLkV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CisgICAgICAgICAgICBsb2FkZXIuZ2V0X2NvZGUoJ2JsYWgnKQorCisgICAgZGVmIHRlc3RfZ2V0X2NvZGVfbm9fcGF0aChzZWxmKToKKyAgICAgICAgIyBJZiBnZXRfZmlsZW5hbWUoKSByYWlzZXMgSW1wb3J0RXJyb3IgdGhlbiBzaW1wbHkgc2tpcCBzZXR0aW5nIHRoZSBwYXRoCisgICAgICAgICMgb24gdGhlIGNvZGUgb2JqZWN0LgorICAgICAgICBzb3VyY2VfbW9ja19jb250ZXh0LCBmaWxlbmFtZV9tb2NrX2NvbnRleHQgPSBzZWxmLm1vY2tfbWV0aG9kcygKKyAgICAgICAgICAgICAgICBnZXRfc291cmNlPVRydWUsIGdldF9maWxlbmFtZT1UcnVlKQorICAgICAgICB3aXRoIHNvdXJjZV9tb2NrX2NvbnRleHQgYXMgc291cmNlX21vY2ssIGZpbGVuYW1lX21vY2tfY29udGV4dCBhcyBuYW1lX21vY2s6CisgICAgICAgICAgICBzb3VyY2VfbW9jay5yZXR1cm5fdmFsdWUgPSAnYXR0ciA9IDQyJworICAgICAgICAgICAgbmFtZV9tb2NrLnNpZGVfZWZmZWN0ID0gSW1wb3J0RXJyb3IKKyAgICAgICAgICAgIGxvYWRlciA9IHNlbGYuRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MoKQorICAgICAgICAgICAgY29kZSA9IGxvYWRlci5nZXRfY29kZSgnYmxhaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZS5jb19maWxlbmFtZSwgJzxzdHJpbmc+JykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnYmxhaCcpCisgICAgICAgIGV4ZWMoY29kZSwgbW9kdWxlLl9fZGljdF9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5hdHRyLCA0MikKKworCitjbGFzcyBGcm96ZW5fRUxHZXRDb2RlVGVzdHMoRXhlY3V0aW9uTG9hZGVyR2V0Q29kZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgRXhlY3V0aW9uTG9hZGVyU3ViY2xhc3MgPSBGcm96ZW5fRUwKKworY2xhc3MgU291cmNlX0VMR2V0Q29kZVRlc3RzKEV4ZWN1dGlvbkxvYWRlckdldENvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIEV4ZWN1dGlvbkxvYWRlclN1YmNsYXNzID0gU291cmNlX0VMCisKKworIyMjIyMgU291cmNlTG9hZGVyIGNvbmNyZXRlIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2NsYXNzIFNvdXJjZUxvYWRlcjoKKworICAgICMgR2xvYmFscyB0aGF0IHNob3VsZCBiZSBkZWZpbmVkIGZvciBhbGwgbW9kdWxlcy4KKyAgICBzb3VyY2UgPSAoYiJfID0gJzo6Jy5qb2luKFtfX25hbWVfXywgX19maWxlX18sIF9fY2FjaGVkX18sIF9fcGFja2FnZV9fLCAiCisgICAgICAgICAgICAgIGIicmVwcihfX2xvYWRlcl9fKV0pIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoKToKKyAgICAgICAgc2VsZi5wYXRoID0gcGF0aAorCisgICAgZGVmIGdldF9kYXRhKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBwYXRoICE9IHNlbGYucGF0aDoKKyAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKKyAgICAgICAgcmV0dXJuIHNlbGYuc291cmNlCisKKyAgICBkZWYgZ2V0X2ZpbGVuYW1lKHNlbGYsIGZ1bGxuYW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGF0aAorCisgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIHJldHVybiAnPG1vZHVsZT4nCisKKworRnJvemVuX1NvdXJjZU9ubHlMLCBTb3VyY2VfU291cmNlT25seUwgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFNvdXJjZUxvYWRlcikKKworCitjbGFzcyBTb3VyY2VMb2FkZXIoU291cmNlTG9hZGVyKToKKworICAgIHNvdXJjZV9tdGltZSA9IDEKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRoLCBtYWdpYz1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhwYXRoKQorICAgICAgICBzZWxmLmJ5dGVjb2RlX3BhdGggPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLnNvdXJjZV9zaXplID0gbGVuKHNlbGYuc291cmNlKQorICAgICAgICBpZiBtYWdpYyBpcyBOb25lOgorICAgICAgICAgICAgbWFnaWMgPSBzZWxmLnV0aWwuTUFHSUNfTlVNQkVSCisgICAgICAgIGRhdGEgPSBieXRlYXJyYXkobWFnaWMpCisgICAgICAgIGRhdGEuZXh0ZW5kKHNlbGYuaW5pdC5fd19sb25nKHNlbGYuc291cmNlX210aW1lKSkKKyAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5zb3VyY2Vfc2l6ZSkpCisgICAgICAgIGNvZGVfb2JqZWN0ID0gY29tcGlsZShzZWxmLnNvdXJjZSwgc2VsZi5wYXRoLCAnZXhlYycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbnRfaW5oZXJpdD1UcnVlKQorICAgICAgICBkYXRhLmV4dGVuZChtYXJzaGFsLmR1bXBzKGNvZGVfb2JqZWN0KSkKKyAgICAgICAgc2VsZi5ieXRlY29kZSA9IGJ5dGVzKGRhdGEpCisgICAgICAgIHNlbGYud3JpdHRlbiA9IHt9CisKKyAgICBkZWYgZ2V0X2RhdGEoc2VsZiwgcGF0aCk6CisgICAgICAgIGlmIHBhdGggPT0gc2VsZi5wYXRoOgorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZ2V0X2RhdGEocGF0aCkKKyAgICAgICAgZWxpZiBwYXRoID09IHNlbGYuYnl0ZWNvZGVfcGF0aDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmJ5dGVjb2RlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisKKyAgICBkZWYgcGF0aF9zdGF0cyhzZWxmLCBwYXRoKToKKyAgICAgICAgaWYgcGF0aCAhPSBzZWxmLnBhdGg6CisgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgIHJldHVybiB7J210aW1lJzogc2VsZi5zb3VyY2VfbXRpbWUsICdzaXplJzogc2VsZi5zb3VyY2Vfc2l6ZX0KKworICAgIGRlZiBzZXRfZGF0YShzZWxmLCBwYXRoLCBkYXRhKToKKyAgICAgICAgc2VsZi53cml0dGVuW3BhdGhdID0gYnl0ZXMoZGF0YSkKKyAgICAgICAgcmV0dXJuIHBhdGggPT0gc2VsZi5ieXRlY29kZV9wYXRoCisKKworRnJvemVuX1NMLCBTb3VyY2VfU0wgPSBtYWtlX2FiY19zdWJjbGFzc2VzKFNvdXJjZUxvYWRlcikKK0Zyb3plbl9TTC51dGlsID0gZnJvemVuX3V0aWwKK1NvdXJjZV9TTC51dGlsID0gc291cmNlX3V0aWwKK0Zyb3plbl9TTC5pbml0ID0gZnJvemVuX2luaXQKK1NvdXJjZV9TTC5pbml0ID0gc291cmNlX2luaXQKKworCitjbGFzcyBTb3VyY2VMb2FkZXJUZXN0SGFybmVzczoKKworICAgIGRlZiBzZXRVcChzZWxmLCAqLCBpc19wYWNrYWdlPVRydWUsICoqa3dhcmdzKToKKyAgICAgICAgc2VsZi5wYWNrYWdlID0gJ3BrZycKKyAgICAgICAgaWYgaXNfcGFja2FnZToKKyAgICAgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhY2thZ2UsICdfX2luaXRfXy5weScpCisgICAgICAgICAgICBzZWxmLm5hbWUgPSBzZWxmLnBhY2thZ2UKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gJ21vZCcKKyAgICAgICAgICAgIHNlbGYucGF0aCA9IG9zLnBhdGguam9pbihzZWxmLnBhY2thZ2UsICcuJy5qb2luKFsnbW9kJywgJ3B5J10pKQorICAgICAgICAgICAgc2VsZi5uYW1lID0gJy4nLmpvaW4oW3NlbGYucGFja2FnZSwgbW9kdWxlX25hbWVdKQorICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gc2VsZi5sb2FkZXJfbW9jayhzZWxmLnBhdGgsICoqa3dhcmdzKQorCisgICAgZGVmIHZlcmlmeV9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19jYWNoZWRfXywgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzZWxmLnBhY2thZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbG9hZGVyX18sIHNlbGYubG9hZGVyKQorICAgICAgICB2YWx1ZXMgPSBtb2R1bGUuXy5zcGxpdCgnOjonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1swXSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1sxXSwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlc1syXSwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzNdLCBzZWxmLnBhY2thZ2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWVzWzRdLCByZXByKHNlbGYubG9hZGVyKSkKKworICAgIGRlZiB2ZXJpZnlfY29kZShzZWxmLCBjb2RlX29iamVjdCk6CisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoc2VsZi5uYW1lKQorICAgICAgICBtb2R1bGUuX19maWxlX18gPSBzZWxmLnBhdGgKKyAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzZWxmLmNhY2hlZAorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSBzZWxmLnBhY2thZ2UKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmLmxvYWRlcgorICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbXQorICAgICAgICBleGVjKGNvZGVfb2JqZWN0LCBtb2R1bGUuX19kaWN0X18pCisgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCisKKworY2xhc3MgU291cmNlT25seUxvYWRlclRlc3RzKFNvdXJjZUxvYWRlclRlc3RIYXJuZXNzKToKKworICAgICIiIlRlc3QgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIgZm9yIHNvdXJjZS1vbmx5IGxvYWRpbmcuCisKKyAgICBSZWxvYWQgdGVzdGluZyBpcyBzdWJzdW1lZCBieSB0aGUgdGVzdHMgZm9yCisgICAgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIuCisKKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X2dldF9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoZSBzb3VyY2UgY29kZSBpcyByZXR1cm5lZCBhcyBhIHN0cmluZy4KKyAgICAgICAgIyBJZiBhbiBPU0Vycm9yIGlzIHJhaXNlZCBieSBnZXRfZGF0YSB0aGVuIHJhaXNlIEltcG9ydEVycm9yLgorICAgICAgICBleHBlY3RlZF9zb3VyY2UgPSBzZWxmLmxvYWRlci5zb3VyY2UuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkZXIuZ2V0X3NvdXJjZShzZWxmLm5hbWUpLCBleHBlY3RlZF9zb3VyY2UpCisgICAgICAgIGRlZiByYWlzZV9PU0Vycm9yKHBhdGgpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLmxvYWRlci5nZXRfZGF0YSA9IHJhaXNlX09TRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcikgYXMgY206CisgICAgICAgICAgICBzZWxmLmxvYWRlci5nZXRfc291cmNlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24ubmFtZSwgc2VsZi5uYW1lKQorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgIyBQcm9wZXJseSBkZXRlY3Qgd2hlbiBsb2FkaW5nIGEgcGFja2FnZS4KKyAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYubG9hZGVyLmlzX3BhY2thZ2Uoc2VsZi5uYW1lKSkKKyAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmxvYWRlci5pc19wYWNrYWdlKHNlbGYubmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5sb2FkZXIuaXNfcGFja2FnZShzZWxmLm5hbWUgKyAnLl9faW5pdF9fJykpCisKKyAgICBkZWYgdGVzdF9nZXRfY29kZShzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhlIGNvZGUgb2JqZWN0IGlzIGNyZWF0ZWQuCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0KQorCisgICAgZGVmIHRlc3Rfc291cmNlX3RvX2NvZGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoZSBjb21waWxlZCBjb2RlIG9iamVjdC4KKyAgICAgICAgY29kZSA9IHNlbGYubG9hZGVyLnNvdXJjZV90b19jb2RlKHNlbGYubG9hZGVyLnNvdXJjZSwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGUpCisKKyAgICBkZWYgdGVzdF9sb2FkX21vZHVsZShzZWxmKToKKyAgICAgICAgIyBMb2FkaW5nIGEgbW9kdWxlIHNob3VsZCBzZXQgX19uYW1lX18sIF9fbG9hZGVyX18sIF9fcGFja2FnZV9fLAorICAgICAgICAjIF9fcGF0aF9fIChmb3IgcGFja2FnZXMpLCBfX2ZpbGVfXywgYW5kIF9fY2FjaGVkX18uCisgICAgICAgICMgVGhlIG1vZHVsZSBzaG91bGQgYWxzbyBiZSBwdXQgaW50byBzeXMubW9kdWxlcy4KKyAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUoc2VsZi5uYW1lKToKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmxvYWRlci5sb2FkX21vZHVsZShzZWxmLm5hbWUpCisgICAgICAgICAgICBzZWxmLnZlcmlmeV9tb2R1bGUobW9kdWxlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYXRoX18sIFtvcy5wYXRoLmRpcm5hbWUoc2VsZi5wYXRoKV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYubmFtZSwgc3lzLm1vZHVsZXMpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX3NldHRpbmdzKHNlbGYpOgorICAgICAgICAjIF9fcGFja2FnZV9fIG5lZWRzIHRvIGJlIHNldCwgd2hpbGUgX19wYXRoX18gaXMgc2V0IG9uIGlmIHRoZSBtb2R1bGUKKyAgICAgICAgIyBpcyBhIHBhY2thZ2UuCisgICAgICAgICMgVGVzdGluZyB0aGUgdmFsdWVzIGZvciBhIHBhY2thZ2UgYXJlIGNvdmVyZWQgYnkgdGVzdF9sb2FkX21vZHVsZS4KKyAgICAgICAgc2VsZi5zZXRVcChpc19wYWNrYWdlPUZhbHNlKQorICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShzZWxmLm5hbWUpOgorICAgICAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IHNlbGYubG9hZGVyLmxvYWRfbW9kdWxlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X21vZHVsZShtb2R1bGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYXRoX18nKSkKKworICAgIGRlZiB0ZXN0X2dldF9zb3VyY2VfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgICMgU291cmNlIGlzIGNvbnNpZGVyZWQgZW5jb2RlZCBpbiBVVEYtOCBieSBkZWZhdWx0IHVubGVzcyBvdGhlcndpc2UKKyAgICAgICAgIyBzcGVjaWZpZWQgYnkgYW4gZW5jb2RpbmcgbGluZS4KKyAgICAgICAgc291cmNlID0gIl8gPSAnw7wnIgorICAgICAgICBzZWxmLmxvYWRlci5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorICAgICAgICBzb3VyY2UgPSAiIyBjb2Rpbmc6IGxhdGluLTFcbl8gPSDDvCIKKyAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlID0gc291cmNlLmVuY29kZSgnbGF0aW4tMScpCisgICAgICAgIHJldHVybmVkX3NvdXJjZSA9IHNlbGYubG9hZGVyLmdldF9zb3VyY2Uoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldHVybmVkX3NvdXJjZSwgc291cmNlKQorCisKK2NsYXNzIEZyb3plbl9Tb3VyY2VPbmx5TFRlc3RzKFNvdXJjZU9ubHlMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gRnJvemVuX1NvdXJjZU9ubHlMCisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKK2NsYXNzIFNvdXJjZV9Tb3VyY2VPbmx5TFRlc3RzKFNvdXJjZU9ubHlMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gU291cmNlX1NvdXJjZU9ubHlMCisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworQHVuaXR0ZXN0LnNraXBJZihzeXMuZG9udF93cml0ZV9ieXRlY29kZSwgInN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUiKQorY2xhc3MgU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cyhTb3VyY2VMb2FkZXJUZXN0SGFybmVzcyk6CisKKyAgICAiIiJUZXN0IGltcG9ydGxpYi5hYmMuU291cmNlTG9hZGVyJ3MgdXNlIG9mIGJ5dGVjb2RlLgorCisgICAgU291cmNlLW9ubHkgdGVzdGluZyBoYW5kbGVkIGJ5IFNvdXJjZU9ubHlMb2FkZXJUZXN0cy4KKworICAgICIiIgorCisgICAgZGVmIHZlcmlmeV9jb2RlKHNlbGYsIGNvZGVfb2JqZWN0LCAqLCBieXRlY29kZV93cml0dGVuPUZhbHNlKToKKyAgICAgICAgc3VwZXIoKS52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgaWYgYnl0ZWNvZGVfd3JpdHRlbjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgICAgICBkYXRhID0gYnl0ZWFycmF5KHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpCisgICAgICAgICAgICBkYXRhLmV4dGVuZChzZWxmLmluaXQuX3dfbG9uZyhzZWxmLmxvYWRlci5zb3VyY2VfbXRpbWUpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQoc2VsZi5pbml0Ll93X2xvbmcoc2VsZi5sb2FkZXIuc291cmNlX3NpemUpKQorICAgICAgICAgICAgZGF0YS5leHRlbmQobWFyc2hhbC5kdW1wcyhjb2RlX29iamVjdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZGVyLndyaXR0ZW5bc2VsZi5jYWNoZWRdLCBieXRlcyhkYXRhKSkKKworICAgIGRlZiB0ZXN0X2NvZGVfd2l0aF9ldmVyeXRoaW5nKHNlbGYpOgorICAgICAgICAjIFdoZW4gZXZlcnl0aGluZyBzaG91bGQgd29yay4KKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QpCisKKyAgICBkZWYgdGVzdF9ub19ieXRlY29kZShzZWxmKToKKyAgICAgICAgIyBJZiBubyBieXRlY29kZSBleGlzdHMgdGhlbiBtb3ZlIG9uIHRvIHRoZSBzb3VyY2UuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlX3BhdGggPSAiPGRvZXMgbm90IGV4aXN0PiIKKyAgICAgICAgIyBTYW5pdHkgY2hlY2sKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKToKKyAgICAgICAgICAgIGJ5dGVjb2RlX3BhdGggPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZi5wYXRoKQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuZ2V0X2RhdGEoYnl0ZWNvZGVfcGF0aCkKKyAgICAgICAgY29kZV9vYmplY3QgPSBzZWxmLmxvYWRlci5nZXRfY29kZShzZWxmLm5hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKworICAgIGRlZiB0ZXN0X2NvZGVfYmFkX3RpbWVzdGFtcChzZWxmKToKKyAgICAgICAgIyBCeXRlY29kZSBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgdGltZXN0YW1wIG1hdGNoZXMgdGhlIHNvdXJjZSBFWEFDVExZLgorICAgICAgICBmb3Igc291cmNlX210aW1lIGluICgwLCAyKToKKyAgICAgICAgICAgIGFzc2VydCBzb3VyY2VfbXRpbWUgIT0gc2VsZi5sb2FkZXIuc291cmNlX210aW1lCisgICAgICAgICAgICBvcmlnaW5hbCA9IHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZQorICAgICAgICAgICAgc2VsZi5sb2FkZXIuc291cmNlX210aW1lID0gc291cmNlX210aW1lCisgICAgICAgICAgICAjIElmIGJ5dGVjb2RlIGlzIHVzZWQgdGhlbiBFT0ZFcnJvciB3b3VsZCBiZSByYWlzZWQgYnkgbWFyc2hhbC4KKyAgICAgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYudmVyaWZ5X2NvZGUoY29kZV9vYmplY3QsIGJ5dGVjb2RlX3dyaXR0ZW49VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLnNvdXJjZV9tdGltZSA9IG9yaWdpbmFsCisKKyAgICBkZWYgdGVzdF9jb2RlX2JhZF9tYWdpYyhzZWxmKToKKyAgICAgICAgIyBTa2lwIG92ZXIgYnl0ZWNvZGUgd2l0aCBhIGJhZCBtYWdpYyBudW1iZXIuCisgICAgICAgIHNlbGYuc2V0VXAobWFnaWM9YicwMDAwJykKKyAgICAgICAgIyBJZiBieXRlY29kZSBpcyB1c2VkIHRoZW4gRU9GRXJyb3Igd291bGQgYmUgcmFpc2VkIGJ5IG1hcnNoYWwuCisgICAgICAgIHNlbGYubG9hZGVyLmJ5dGVjb2RlID0gc2VsZi5sb2FkZXIuYnl0ZWNvZGVbODpdCisgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9jb2RlKGNvZGVfb2JqZWN0LCBieXRlY29kZV93cml0dGVuPVRydWUpCisKKyAgICBkZWYgdGVzdF9kb250X3dyaXRlX2J5dGVjb2RlKHNlbGYpOgorICAgICAgICAjIEJ5dGVjb2RlIGlzIG5vdCB3cml0dGVuIGlmIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlIGlzIHRydWUuCisgICAgICAgICMgQ2FuIGFzc3VtZSBpdCBpcyBmYWxzZSBhbHJlYWR5IHRoYW5rcyB0byB0aGUgc2tpcElmIGNsYXNzIGRlY29yYXRvci4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmxvYWRlci5ieXRlY29kZV9wYXRoID0gIjxkb2VzIG5vdCBleGlzdD4iCisgICAgICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5jYWNoZWQsIHNlbGYubG9hZGVyLndyaXR0ZW4pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzeXMuZG9udF93cml0ZV9ieXRlY29kZSA9IEZhbHNlCisKKyAgICBkZWYgdGVzdF9ub19zZXRfZGF0YShzZWxmKToKKyAgICAgICAgIyBJZiBzZXRfZGF0YSBpcyBub3QgZGVmaW5lZCwgb25lIGNhbiBzdGlsbCByZWFkIGJ5dGVjb2RlLgorICAgICAgICBzZWxmLnNldFVwKG1hZ2ljPWInMDAwMCcpCisgICAgICAgIG9yaWdpbmFsX3NldF9kYXRhID0gc2VsZi5sb2FkZXIuX19jbGFzc19fLm1ybygpWzFdLnNldF9kYXRhCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGRlbCBzZWxmLmxvYWRlci5fX2NsYXNzX18ubXJvKClbMV0uc2V0X2RhdGEKKyAgICAgICAgICAgIGNvZGVfb2JqZWN0ID0gc2VsZi5sb2FkZXIuZ2V0X2NvZGUoc2VsZi5uYW1lKQorICAgICAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYubG9hZGVyLl9fY2xhc3NfXy5tcm8oKVsxXS5zZXRfZGF0YSA9IG9yaWdpbmFsX3NldF9kYXRhCisKKyAgICBkZWYgdGVzdF9zZXRfZGF0YV9yYWlzZXNfZXhjZXB0aW9ucyhzZWxmKToKKyAgICAgICAgIyBSYWlzaW5nIE5vdEltcGxlbWVudGVkRXJyb3Igb3IgT1NFcnJvciBpcyBva2F5IGZvciBzZXRfZGF0YS4KKyAgICAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihleGMpOgorICAgICAgICAgICAgZGVmIGNsb3N1cmUoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICByYWlzZSBleGMKKyAgICAgICAgICAgIHJldHVybiBjbG9zdXJlCisKKyAgICAgICAgc2VsZi5zZXRVcChtYWdpYz1iJzAwMDAnKQorICAgICAgICBzZWxmLmxvYWRlci5zZXRfZGF0YSA9IHJhaXNlX2V4Y2VwdGlvbihOb3RJbXBsZW1lbnRlZEVycm9yKQorICAgICAgICBjb2RlX29iamVjdCA9IHNlbGYubG9hZGVyLmdldF9jb2RlKHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfY29kZShjb2RlX29iamVjdCkKKworCitjbGFzcyBGcm96ZW5fU0xCeXRlY29kZVRlc3RzKFNvdXJjZUxvYWRlckJ5dGVjb2RlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBsb2FkZXJfbW9jayA9IEZyb3plbl9TTAorICAgIGluaXQgPSBmcm96ZW5faW5pdAorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VTTEJ5dGVjb2RlVGVzdHMoU291cmNlTG9hZGVyQnl0ZWNvZGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGxvYWRlcl9tb2NrID0gU291cmNlX1NMCisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgU291cmNlTG9hZGVyR2V0U291cmNlVGVzdHM6CisKKyAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLmFiYy5Tb3VyY2VMb2FkZXIuZ2V0X3NvdXJjZSgpLiIiIgorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgaGF2ZSBubyBwcm9ibGVtcyB3aXRoIFVURi04IHRleHQuCisgICAgICAgIG5hbWUgPSAnbW9kJworICAgICAgICBtb2NrID0gc2VsZi5Tb3VyY2VPbmx5TG9hZGVyTW9jaygnbW9kLmZpbGUnKQorICAgICAgICBzb3VyY2UgPSAneCA9ICLDvCInCisgICAgICAgIG1vY2suc291cmNlID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X2RlY29kZWRfc291cmNlKHNlbGYpOgorICAgICAgICAjIERlY29kaW5nIHNob3VsZCB3b3JrLgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soIm1vZC5maWxlIikKKyAgICAgICAgc291cmNlID0gIiMgY29kaW5nOiBMYXRpbi0xXG54PSfDvCciCisgICAgICAgIGFzc2VydCBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykgIT0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBtb2NrLnNvdXJjZSA9IHNvdXJjZS5lbmNvZGUoJ2xhdGluLTEnKQorICAgICAgICByZXR1cm5lZF9zb3VyY2UgPSBtb2NrLmdldF9zb3VyY2UobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXR1cm5lZF9zb3VyY2UsIHNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9uZXdsaW5lcyhzZWxmKToKKyAgICAgICAgIyBQRVAgMzAyIHNheXMgdW5pdmVyc2FsIG5ld2xpbmVzIHNob3VsZCBiZSB1c2VkLgorICAgICAgICBuYW1lID0gJ21vZCcKKyAgICAgICAgbW9jayA9IHNlbGYuU291cmNlT25seUxvYWRlck1vY2soJ21vZC5maWxlJykKKyAgICAgICAgc291cmNlID0gInggPSA0MlxyXG55ID0gLTEzXHJcbiIKKyAgICAgICAgbW9jay5zb3VyY2UgPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIGV4cGVjdCA9IGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIoTm9uZSwgVHJ1ZSkuZGVjb2RlKHNvdXJjZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmdldF9zb3VyY2UobmFtZSksIGV4cGVjdCkKKworCitjbGFzcyBGcm96ZW5fU291cmNlT25seUxHZXRTb3VyY2VUZXN0cyhTb3VyY2VMb2FkZXJHZXRTb3VyY2VUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFNvdXJjZU9ubHlMb2FkZXJNb2NrID0gRnJvemVuX1NvdXJjZU9ubHlMCisKK2NsYXNzIFNvdXJjZV9Tb3VyY2VPbmx5TEdldFNvdXJjZVRlc3RzKFNvdXJjZUxvYWRlckdldFNvdXJjZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgU291cmNlT25seUxvYWRlck1vY2sgPSBTb3VyY2VfU291cmNlT25seUwKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CmluZGV4IGIxYTU4OTQuLjJhMmQ0MmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfYXBpLnB5CkBAIC0xLDE0ICsxLDE4IEBACiBmcm9tIC4gaW1wb3J0IHV0aWwKLWltcG9ydCBpbXAKLWltcG9ydCBpbXBvcnRsaWIKLWZyb20gaW1wb3J0bGliIGltcG9ydCBtYWNoaW5lcnkKKworZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWInKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIudXRpbCcpCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdXRpbC5pbXBvcnRfaW1wb3J0bGliKCdpbXBvcnRsaWIubWFjaGluZXJ5JykKKworaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHR5cGVzCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3YXJuaW5ncwogCiAKLWNsYXNzIEltcG9ydE1vZHVsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEltcG9ydE1vZHVsZVRlc3RzOgogCiAgICAgIiIiVGVzdCBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZS4iIiIKIApAQCAtMTYsNyArMjAsNyBAQAogICAgICAgICAjIFRlc3QgaW1wb3J0aW5nIGEgdG9wLWxldmVsIG1vZHVsZS4KICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcygndG9wX2xldmVsJykgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ3RvcF9sZXZlbCcpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICd0b3BfbGV2ZWwnKQogCiAgICAgZGVmIHRlc3RfYWJzb2x1dGVfcGFja2FnZV9pbXBvcnQoc2VsZik6CkBAIC0yNiw3ICszMCw3IEBACiAgICAgICAgIG5hbWUgPSAnezB9Lm1vZCcuZm9ybWF0KHBrZ19uYW1lKQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKHBrZ19sb25nX25hbWUsIG5hbWUpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKG5hbWUpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKIAogICAgIGRlZiB0ZXN0X3NoYWxsb3dfcmVsYXRpdmVfcGFja2FnZV9pbXBvcnQoc2VsZik6CkBAIC0zOCwxNyArNDIsMTcgQEAKICAgICAgICAgcmVsYXRpdmVfbmFtZSA9ICcuezB9Jy5mb3JtYXQobW9kdWxlX25hbWUpCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMocGtnX2xvbmdfbmFtZSwgYWJzb2x1dGVfbmFtZSkgYXMgbW9jazoKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVttb2NrXSk6Ci0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocGtnX25hbWUpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUocmVsYXRpdmVfbmFtZSwgcGtnX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUocGtnX25hbWUpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUocmVsYXRpdmVfbmFtZSwgcGtnX25hbWUpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIGFic29sdXRlX25hbWUpCiAKICAgICBkZWYgdGVzdF9kZWVwX3JlbGF0aXZlX3BhY2thZ2VfaW1wb3J0KHNlbGYpOgogICAgICAgICBtb2R1bGVzID0gWydhLl9faW5pdF9fJywgJ2EuYi5fX2luaXRfXycsICdhLmMnXQogICAgICAgICB3aXRoIHV0aWwubW9ja19tb2R1bGVzKCptb2R1bGVzKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSgnYScpCi0gICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ2EuYicpCi0gICAgICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJy4uYycsICdhLmInKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhJykKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnYS5iJykKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnLi5jJywgJ2EuYicpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sICdhLmMnKQogCiAgICAgZGVmIHRlc3RfYWJzb2x1dGVfaW1wb3J0X3dpdGhfcGFja2FnZShzZWxmKToKQEAgLTU5LDE1ICs2MywxNSBAQAogICAgICAgICBuYW1lID0gJ3swfS5tb2QnLmZvcm1hdChwa2dfbmFtZSkKICAgICAgICAgd2l0aCB1dGlsLm1vY2tfbW9kdWxlcyhwa2dfbG9uZ19uYW1lLCBuYW1lKSBhcyBtb2NrOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShwa2dfbmFtZSkKLSAgICAgICAgICAgICAgICBtb2R1bGUgPSBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZShuYW1lLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lLCBwa2dfbmFtZSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgbmFtZSkKIAogICAgIGRlZiB0ZXN0X3JlbGF0aXZlX2ltcG9ydF93b19wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIFJlbGF0aXZlIGltcG9ydHMgY2Fubm90IGhhcHBlbiB3aXRob3V0IHRoZSAncGFja2FnZScgYXJndW1lbnQgYmVpbmcKICAgICAgICAgIyBzZXQuCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKLSAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCcuc3VwcG9ydCcpCisgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgnLnN1cHBvcnQnKQogCiAKICAgICBkZWYgdGVzdF9sb2FkZWRfb25jZShzZWxmKToKQEAgLTc2LDcgKzgwLDcgQEAKICAgICAgICAgIyBtb2R1bGUgY3VycmVudGx5IGJlaW5nIGltcG9ydGVkLgogICAgICAgICBiX2xvYWRfY291bnQgPSAwCiAgICAgICAgIGRlZiBsb2FkX2EoKToKLSAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdhLmInKQorICAgICAgICAgICAgc2VsZi5pbml0LmltcG9ydF9tb2R1bGUoJ2EuYicpCiAgICAgICAgIGRlZiBsb2FkX2IoKToKICAgICAgICAgICAgIG5vbmxvY2FsIGJfbG9hZF9jb3VudAogICAgICAgICAgICAgYl9sb2FkX2NvdW50ICs9IDEKQEAgLTg0LDExICs4OCwxNyBAQAogICAgICAgICBtb2R1bGVzID0gWydhLl9faW5pdF9fJywgJ2EuYiddCiAgICAgICAgIHdpdGggdXRpbC5tb2NrX21vZHVsZXMoKm1vZHVsZXMsIG1vZHVsZV9jb2RlPWNvZGUpIGFzIG1vY2s6CiAgICAgICAgICAgICB3aXRoIHV0aWwuaW1wb3J0X3N0YXRlKG1ldGFfcGF0aD1bbW9ja10pOgotICAgICAgICAgICAgICAgIGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCdhLmInKQorICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5pbXBvcnRfbW9kdWxlKCdhLmInKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJfbG9hZF9jb3VudCwgMSkKIAorY2xhc3MgRnJvemVuX0ltcG9ydE1vZHVsZVRlc3RzKEltcG9ydE1vZHVsZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CiAKLWNsYXNzIEZpbmRMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTb3VyY2VfSW1wb3J0TW9kdWxlVGVzdHMoSW1wb3J0TW9kdWxlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKKworCitjbGFzcyBGaW5kTG9hZGVyVGVzdHM6CiAKICAgICBjbGFzcyBGYWtlTWV0YUZpbmRlcjoKICAgICAgICAgQHN0YXRpY21ldGhvZApAQCAtOTgsMjkgKzEwOCw1MSBAQAogICAgICAgICAjIElmIGEgbW9kdWxlIHdpdGggX19sb2FkZXJfXyBpcyBpbiBzeXMubW9kdWxlcywgdGhlbiByZXR1cm4gaXQuCiAgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgotICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKICAgICAgICAgICAgIGxvYWRlciA9ICdhIGxvYWRlciEnCiAgICAgICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IGxvYWRlcgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIGZvdW5kID0gaW1wb3J0bGliLmZpbmRfbG9hZGVyKG5hbWUpCisgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgZm91bmQgPSBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBmb3VuZCkKIAogICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19Ob25lKHNlbGYpOgogICAgICAgICAjIElmIHN5cy5tb2R1bGVzW25hbWVdLl9fbG9hZGVyX18gaXMgTm9uZSwgcmFpc2UgVmFsdWVFcnJvci4KICAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKICAgICAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6Ci0gICAgICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBOb25lCiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKLSAgICAgICAgICAgICAgICBpbXBvcnRsaWIuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSkKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX2xvYWRlcl9pc19ub3Rfc2V0KHNlbGYpOgorICAgICAgICAjIFNob3VsZCByYWlzZSBWYWx1ZUVycm9yCisgICAgICAgICMgSXNzdWUgIzE3MDk5CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRlbCBtb2R1bGUuX19sb2FkZXJfXworICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5maW5kX2xvYWRlcihuYW1lKQogCiAgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKICAgICAgICAgIyBSZXR1cm4gdGhlIGxvYWRlciBmb3VuZCBvbiBzeXMubWV0YV9wYXRoLgogICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJwogICAgICAgICB3aXRoIHV0aWwudW5jYWNoZShuYW1lKToKICAgICAgICAgICAgIHdpdGggdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgobmFtZSwgTm9uZSksIGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lKSkKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBOb25lKSwgc2VsZi5pbml0LmZpbmRfbG9hZGVyKG5hbWUpKQogCiAgICAgZGVmIHRlc3Rfc3VjY2Vzc19wYXRoKHNlbGYpOgogICAgICAgICAjIFNlYXJjaGluZyBvbiBhIHBhdGggc2hvdWxkIHdvcmsuCkBAIC0xMjgsMTUgKzE2MCwyMDEgQEAKICAgICAgICAgcGF0aCA9ICdwYXRoIHRvIHNvbWUgcGxhY2UnCiAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBwYXRoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5maW5kX2xvYWRlcihuYW1lLCBwYXRoKSkKKyAgICAgICAgICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBwYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuZmluZF9sb2FkZXIobmFtZSwgcGF0aCkpCiAKICAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOgogICAgICAgICAjIE5vbmUgaXMgcmV0dXJuZWQgdXBvbiBmYWlsdXJlIHRvIGZpbmQgYSBsb2FkZXIuCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGltcG9ydGxpYi5maW5kX2xvYWRlcignbmV2ZXJnb2luZ3RvZmluZHRoaXNtb2R1bGUnKSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdpZ25vcmUnLCBEZXByZWNhdGlvbldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzZWxmLmluaXQuZmluZF9sb2FkZXIoJ25ldmVyZ29pbmd0b2ZpbmR0aGlzbW9kdWxlJykpCisKK2NsYXNzIEZyb3plbl9GaW5kTG9hZGVyVGVzdHMoRmluZExvYWRlclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CisKK2NsYXNzIFNvdXJjZV9GaW5kTG9hZGVyVGVzdHMoRmluZExvYWRlclRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CiAKIAotY2xhc3MgSW52YWxpZGF0ZUNhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgUmVsb2FkVGVzdHM6CisKKyAgICAiIiJUZXN0IG1vZHVsZSByZWxvYWRpbmcgZm9yIGJ1aWx0aW4gYW5kIGV4dGVuc2lvbiBtb2R1bGVzLiIiIgorCisgICAgZGVmIHRlc3RfcmVsb2FkX21vZHVsZXMoc2VsZik6CisgICAgICAgIGZvciBtb2QgaW4gKCd0b2tlbml6ZScsICd0aW1lJywgJ21hcnNoYWwnKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG1vZHVsZT1tb2QpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5DbGVhbkltcG9ydChtb2QpOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShtb2QpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdC5yZWxvYWQobW9kdWxlKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX3JlcGxhY2VkKHNlbGYpOgorICAgICAgICBkZWYgY29kZSgpOgorICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKCd0b3BfbGV2ZWwnKQorICAgICAgICAgICAgbW9kdWxlLnNwYW0gPSAzCisgICAgICAgICAgICBzeXMubW9kdWxlc1sndG9wX2xldmVsJ10gPSBtb2R1bGUKKyAgICAgICAgbW9jayA9IHV0aWwubW9ja19tb2R1bGVzKCd0b3BfbGV2ZWwnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX2NvZGU9eyd0b3BfbGV2ZWwnOiBjb2RlfSkKKyAgICAgICAgd2l0aCBtb2NrOgorICAgICAgICAgICAgd2l0aCB1dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W21vY2tdKToKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZSgndG9wX2xldmVsJykKKyAgICAgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQobW9kdWxlKQorICAgICAgICAgICAgICAgIGFjdHVhbCA9IHN5cy5tb2R1bGVzWyd0b3BfbGV2ZWwnXQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLnNwYW0sIDMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWxvYWRlZC5zcGFtLCAzKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX21pc3NpbmdfbG9hZGVyKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQuQ2xlYW5JbXBvcnQoJ3R5cGVzJyk6CisgICAgICAgICAgICBpbXBvcnQgdHlwZXMKKyAgICAgICAgICAgIGxvYWRlciA9IHR5cGVzLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGRlbCB0eXBlcy5fX2xvYWRlcl9fCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuaW5pdC5yZWxvYWQodHlwZXMpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIHR5cGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMubW9kdWxlc1sndHlwZXMnXSwgdHlwZXMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbG9hZGVkLl9fbG9hZGVyX18ucGF0aCwgbG9hZGVyLnBhdGgpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbG9hZGVyX3JlcGxhY2VkKHNlbGYpOgorICAgICAgICB3aXRoIHN1cHBvcnQuQ2xlYW5JbXBvcnQoJ3R5cGVzJyk6CisgICAgICAgICAgICBpbXBvcnQgdHlwZXMKKyAgICAgICAgICAgIHR5cGVzLl9fbG9hZGVyX18gPSBOb25lCisgICAgICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKHR5cGVzKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHJlbG9hZGVkLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCB0eXBlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLm1vZHVsZXNbJ3R5cGVzJ10sIHR5cGVzKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX2xvY2F0aW9uX2NoYW5nZWQoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKE5vbmUpIGFzIGN3ZDoKKyAgICAgICAgICAgIHdpdGggdXRpbC51bmNhY2hlKCdzcGFtJyk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgoY3dkKToKKyAgICAgICAgICAgICAgICAgICAgIyBTdGFydCBhcyBhIHBsYWluIG1vZHVsZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihjd2QsIG5hbWUgKyAnLnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgpCisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkID0geydfX25hbWVfXyc6IG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhY2thZ2VfXyc6ICcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19maWxlX18nOiBwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IGNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuY3JlYXRlX2VtcHR5X2ZpbGUocGF0aCkKKyAgICAgICAgICAgICAgICAgICAgbW9kdWxlID0gc2VsZi5pbml0LmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgbnMgPSB2YXJzKG1vZHVsZSkuY29weSgpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgbnMucG9wKCdfX2J1aWx0aW5zX18nLCBOb25lKSAgIyBBbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLnBhdGgsIHBhdGgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisgICAgICAgICAgICAgICAgICAgICMgQ2hhbmdlIHRvIGEgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J19fbmFtZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGFja2FnZV9fJzogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZmlsZV9fJzogaW5pdF9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19jYWNoZWRfXyc6IGNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJzogW29zLnBhdGguZGlybmFtZShpbml0X3BhdGgpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fZG9jX18nOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKG5hbWUpCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbmFtZShwYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChtb2R1bGUpCisgICAgICAgICAgICAgICAgICAgIG5zID0gdmFycyhyZWxvYWRlZCkuY29weSgpCisgICAgICAgICAgICAgICAgICAgIGxvYWRlciA9IG5zLnBvcCgnX19sb2FkZXJfXycpCisgICAgICAgICAgICAgICAgICAgIHNwZWMgPSBucy5wb3AoJ19fc3BlY19fJykKKyAgICAgICAgICAgICAgICAgICAgbnMucG9wKCdfX2J1aWx0aW5zX18nLCBOb25lKSAgIyBBbiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBuYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIucGF0aCwgaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX25hbWVzcGFjZV9jaGFuZ2VkKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZChOb25lKSBhcyBjd2Q6CisgICAgICAgICAgICB3aXRoIHV0aWwudW5jYWNoZSgnc3BhbScpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5EaXJzT25TeXNQYXRoKGN3ZCk6CisgICAgICAgICAgICAgICAgICAgICMgU3RhcnQgYXMgYSBuYW1lc3BhY2UgcGFja2FnZS4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0LmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lLCAnX19pbml0LnB5JykKKyAgICAgICAgICAgICAgICAgICAgY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhZF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIobmFtZSkKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGJhZF9wYXRoLCAndycpIGFzIGluaXRfZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRfZmlsZS53cml0ZSgnZWdncyA9IE5vbmUnKQorICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgICAgICAgICBucyA9IHZhcnMobW9kdWxlKS5jb3B5KCkKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbnMucG9wKCdfX2xvYWRlcl9fJykKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG5zLnBvcCgnX19wYXRoX18nKQorICAgICAgICAgICAgICAgICAgICBzcGVjID0gbnMucG9wKCdfX3NwZWNfXycpCisgICAgICAgICAgICAgICAgICAgIG5zLnBvcCgnX19idWlsdGluc19fJywgTm9uZSkgICMgQW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlciwgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChsb2FkZXIsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHBhdGgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldChbb3MucGF0aC5kaXJuYW1lKGJhZF9wYXRoKV0pKQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYSBOYW1lc3BhY2VMb2FkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlci5wYXRoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisgICAgICAgICAgICAgICAgICAgICMgQ2hhbmdlIHRvIGEgcmVndWxhciBwYWNrYWdlLgorICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgICAgICAgICAgICAgICAgICBpbml0X3BhdGggPSBvcy5wYXRoLmpvaW4oY3dkLCBuYW1lLCAnX19pbml0X18ucHknKQorICAgICAgICAgICAgICAgICAgICBjYWNoZWQgPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UoaW5pdF9wYXRoKQorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IHsnX19uYW1lX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYWNrYWdlX18nOiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19maWxlX18nOiBpbml0X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogY2FjaGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19wYXRoX18nOiBbb3MucGF0aC5kaXJuYW1lKGluaXRfcGF0aCldLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX19kb2NfXyc6IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZ2dzJzogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvcy5yZW5hbWUoYmFkX3BhdGgsIGluaXRfcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmluaXQucmVsb2FkKG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgbnMgPSB2YXJzKHJlbG9hZGVkKS5jb3B5KCkKKyAgICAgICAgICAgICAgICAgICAgbG9hZGVyID0gbnMucG9wKCdfX2xvYWRlcl9fJykKKyAgICAgICAgICAgICAgICAgICAgc3BlYyA9IG5zLnBvcCgnX19zcGVjX18nKQorICAgICAgICAgICAgICAgICAgICBucy5wb3AoJ19fYnVpbHRpbnNfXycsIE5vbmUpICAjIEFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWxvYWRlZCwgbW9kdWxlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlci5wYXRoLCBpbml0X3BhdGgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVsb2FkX3N1Ym1vZHVsZShzZWxmKToKKyAgICAgICAgIyBTZWUgIzE5ODUxLgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHN1Ym5hbWUgPSAnaGFtJworICAgICAgICB3aXRoIHV0aWwudGVtcF9tb2R1bGUobmFtZSwgcGtnPVRydWUpIGFzIHBrZ19kaXI6CisgICAgICAgICAgICBmdWxsbmFtZSwgXyA9IHV0aWwuc3VibW9kdWxlKG5hbWUsIHN1Ym5hbWUsIHBrZ19kaXIpCisgICAgICAgICAgICBoYW0gPSBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShmdWxsbmFtZSkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5pbml0LnJlbG9hZChoYW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBoYW0pCisKKworY2xhc3MgRnJvemVuX1JlbG9hZFRlc3RzKFJlbG9hZFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKK2NsYXNzIFNvdXJjZV9SZWxvYWRUZXN0cyhSZWxvYWRUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBzb3VyY2VfaW5pdAorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIEludmFsaWRhdGVDYWNoZVRlc3RzOgogCiAgICAgZGVmIHRlc3RfbWV0aG9kX2NhbGxlZChzZWxmKToKICAgICAgICAgIyBJZiBkZWZpbmVkIHRoZSBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZC4KQEAgLTE1NSw0OCArMzczLDY1IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLl9fZGVsaXRlbV9fKGtleSkpCiAgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlW2tleV0gPSBwYXRoX2lucwogICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzeXMubWV0YV9wYXRoLnJlbW92ZShtZXRhX2lucykpCi0gICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgICAgIHNlbGYuaW5pdC5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtZXRhX2lucy5jYWxsZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXRoX2lucy5jYWxsZWQpCiAKICAgICBkZWYgdGVzdF9tZXRob2RfbGFja2luZyhzZWxmKToKICAgICAgICAgIyBUaGVyZSBzaG91bGQgYmUgbm8gaXNzdWVzIGlmIHRoZSBtZXRob2QgaXMgbm90IGRlZmluZWQuCiAgICAgICAgIGtleSA9ICdnb2JibGVkZWVnb29rJwotICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZVtrZXldID0gaW1wLk51bGxJbXBvcnRlcignYWJjJykKKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGVba2V5XSA9IE5vbmUKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxhbWJkYTogc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuX19kZWxpdGVtX18oa2V5KSkKLSAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgICMgU2hvdWxkbid0IHRyaWdnZXIgYW4gZXhjZXB0aW9uLgorICAgICAgICBzZWxmLmluaXQuaW52YWxpZGF0ZV9jYWNoZXMoKSAgIyBTaG91bGRuJ3QgdHJpZ2dlciBhbiBleGNlcHRpb24uCisKK2NsYXNzIEZyb3plbl9JbnZhbGlkYXRlQ2FjaGVUZXN0cyhJbnZhbGlkYXRlQ2FjaGVUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGluaXQgPSBmcm96ZW5faW5pdAorCitjbGFzcyBTb3VyY2VfSW52YWxpZGF0ZUNhY2hlVGVzdHMoSW52YWxpZGF0ZUNhY2hlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBpbml0ID0gc291cmNlX2luaXQKIAogCiBjbGFzcyBGcm96ZW5JbXBvcnRsaWJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9ub19mcm96ZW5faW1wb3J0bGliKHNlbGYpOgogICAgICAgICAjIFNob3VsZCBiZSBhYmxlIHRvIGltcG9ydCB3L28gX2Zyb3plbl9pbXBvcnRsaWIgYmVpbmcgZGVmaW5lZC4KLSAgICAgICAgbW9kdWxlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdpbXBvcnRsaWInLCBibG9ja2VkPVsnX2Zyb3plbl9pbXBvcnRsaWInXSkKLSAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpc2luc3RhbmNlKG1vZHVsZS5fX2xvYWRlcl9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjaGluZXJ5LkZyb3plbkltcG9ydGVyKSkKKyAgICAgICAgIyBDYW4ndCBkbyBhbiBpc2luc3RhbmNlKCkgY2hlY2sgc2luY2Ugc2VwYXJhdGUgY29waWVzIG9mIGltcG9ydGxpYgorICAgICAgICAjIG1heSBoYXZlIGJlZW4gdXNlZCBmb3IgaW1wb3J0LCBzbyBqdXN0IGNoZWNrIHRoZSBuYW1lIGlzIG5vdCBmb3IgdGhlCisgICAgICAgICMgZnJvemVuIGxvYWRlci4KKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzb3VyY2VfaW5pdC5fX2xvYWRlcl9fLl9fY2xhc3NfXy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRnJvemVuSW1wb3J0ZXInKQogCiAKLWNsYXNzIFN0YXJ0dXBUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBTdGFydHVwVGVzdHM6CiAKICAgICBkZWYgdGVzdF9ldmVyeW9uZV9oYXNfX19sb2FkZXJfXyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTcwOTg6IGFsbCBtb2R1bGVzIHNob3VsZCBoYXZlIF9fbG9hZGVyX18gZGVmaW5lZC4KICAgICAgICAgZm9yIG5hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgotICAgICAgICAgICAgICAgIGlmIG5hbWUgaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltcG9ydGxpYi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fKQotICAgICAgICAgICAgICAgIGVsaWYgaW1wLmlzX2Zyb3plbihuYW1lKToKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbXBvcnRsaWIubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5fX2xvYWRlcl9fKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fbG9hZGVyX18nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGxhY2tzIGEgX19sb2FkZXJfXyBhdHRyaWJ1dGUnLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgc2VsZi5tYWNoaW5lcnkuQnVpbHRpbkltcG9ydGVyLmZpbmRfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2R1bGUuX19sb2FkZXJfXywgTm9uZSkKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBzZWxmLm1hY2hpbmVyeS5Gcm96ZW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fbG9hZGVyX18sIE5vbmUpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0Ci0gICAgcnVuX3VuaXR0ZXN0KEltcG9ydE1vZHVsZVRlc3RzLAotICAgICAgICAgICAgICAgICBGaW5kTG9hZGVyVGVzdHMsCi0gICAgICAgICAgICAgICAgIEludmFsaWRhdGVDYWNoZVRlc3RzLAotICAgICAgICAgICAgICAgICBGcm96ZW5JbXBvcnRsaWJUZXN0cywKLSAgICAgICAgICAgICAgICAgU3RhcnR1cFRlc3RzKQorICAgIGRlZiB0ZXN0X2V2ZXJ5b25lX2hhc19fX3NwZWNfXyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUsIG1vZHVsZSBpbiBzeXMubW9kdWxlcy5pdGVtcygpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShtb2R1bGUsIHR5cGVzLk1vZHVsZVR5cGUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG5hbWU9bmFtZSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fc3BlY19fJykpCisgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYubWFjaGluZXJ5LkJ1aWx0aW5JbXBvcnRlci5maW5kX21vZHVsZShuYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QobW9kdWxlLl9fc3BlY19fLCBOb25lKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHNlbGYubWFjaGluZXJ5LkZyb3plbkltcG9ydGVyLmZpbmRfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChtb2R1bGUuX19zcGVjX18sIE5vbmUpCisKK2NsYXNzIEZyb3plbl9TdGFydHVwVGVzdHMoU3RhcnR1cFRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorCitjbGFzcyBTb3VyY2VfU3RhcnR1cFRlc3RzKFN0YXJ0dXBUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9sb2Nrcy5weQppbmRleCBjMzczYjExLi5kYzk3YmExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X2xvY2tzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfbG9ja3MucHkKQEAgLTEsNCArMSw4IEBACi1mcm9tIGltcG9ydGxpYiBpbXBvcnQgX2Jvb3RzdHJhcAorZnJvbSAuIGltcG9ydCB1dGlsCitmcm96ZW5faW5pdCwgc291cmNlX2luaXQgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitmcm96ZW5fYm9vdHN0cmFwID0gZnJvemVuX2luaXQuX2Jvb3RzdHJhcAorc291cmNlX2Jvb3RzdHJhcCA9IHNvdXJjZV9pbml0Ll9ib290c3RyYXAKKwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdApAQCAtMTMsMTQgKzE3LDkgQEAKIGVsc2U6CiAgICAgZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCiAKLQotTG9ja1R5cGUgPSBfYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCi1EZWFkbG9ja0Vycm9yID0gX2Jvb3RzdHJhcC5fRGVhZGxvY2tFcnJvcgotCi0KIGlmIHRocmVhZGluZyBpcyBub3QgTm9uZToKLSAgICBjbGFzcyBNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKGxvY2tfdGVzdHMuUkxvY2tUZXN0cyk6Ci0gICAgICAgIGxvY2t0eXBlID0gc3RhdGljbWV0aG9kKGxhbWJkYTogTG9ja1R5cGUoInNvbWVfbG9jayIpKQorICAgIGNsYXNzIE1vZHVsZUxvY2tBc1JMb2NrVGVzdHM6CisgICAgICAgIGxvY2t0eXBlID0gY2xhc3NtZXRob2QobGFtYmRhIGNsczogY2xzLkxvY2tUeXBlKCJzb21lX2xvY2siKSkKIAogICAgICAgICAjIF9pc19vd25lZCgpIHVuc3VwcG9ydGVkCiAgICAgICAgIHRlc3RfX2lzX293bmVkID0gTm9uZQpAQCAtMzQsMTMgKzMzLDIxIEBACiAgICAgICAgICMgX3JlbGVhc2Vfc2F2ZSgpIHVuc3VwcG9ydGVkCiAgICAgICAgIHRlc3RfcmVsZWFzZV9zYXZlX3VuYWNxdWlyZWQgPSBOb25lCiAKKyAgICBjbGFzcyBGcm96ZW5fTW9kdWxlTG9ja0FzUkxvY2tUZXN0cyhNb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLCBsb2NrX3Rlc3RzLlJMb2NrVGVzdHMpOgorICAgICAgICBMb2NrVHlwZSA9IGZyb3plbl9ib290c3RyYXAuX01vZHVsZUxvY2sKKworICAgIGNsYXNzIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKE1vZHVsZUxvY2tBc1JMb2NrVGVzdHMsIGxvY2tfdGVzdHMuUkxvY2tUZXN0cyk6CisgICAgICAgIExvY2tUeXBlID0gc291cmNlX2Jvb3RzdHJhcC5fTW9kdWxlTG9jaworCiBlbHNlOgotICAgIGNsYXNzIE1vZHVsZUxvY2tBc1JMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIEZyb3plbl9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgcGFzcworCisgICAgY2xhc3MgU291cmNlX01vZHVsZUxvY2tBc1JMb2NrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBwYXNzCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCi1jbGFzcyBEZWFkbG9ja0F2b2lkYW5jZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIERlYWRsb2NrQXZvaWRhbmNlVGVzdHM6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHRyeToKQEAgLTU1LDcgKzYyLDcgQEAKIAogICAgIGRlZiBydW5fZGVhZGxvY2tfYXZvaWRhbmNlX3Rlc3Qoc2VsZiwgY3JlYXRlX2RlYWRsb2NrKToKICAgICAgICAgTkxPQ0tTID0gMTAKLSAgICAgICAgbG9ja3MgPSBbTG9ja1R5cGUoc3RyKGkpKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQorICAgICAgICBsb2NrcyA9IFtzZWxmLkxvY2tUeXBlKHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoTkxPQ0tTKV0KICAgICAgICAgcGFpcnMgPSBbKGxvY2tzW2ldLCBsb2Nrc1soaSsxKSVOTE9DS1NdKSBmb3IgaSBpbiByYW5nZShOTE9DS1MpXQogICAgICAgICBpZiBjcmVhdGVfZGVhZGxvY2s6CiAgICAgICAgICAgICBOVEhSRUFEUyA9IE5MT0NLUwpAQCAtNjcsNyArNzQsNyBAQAogICAgICAgICAgICAgIiIiVHJ5IHRvIGFjcXVpcmUgdGhlIGxvY2suIFJldHVybiBUcnVlIG9uIHN1Y2Nlc3MsIEZhbHNlIG9uIGRlYWRsb2NrLiIiIgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIGxvY2suYWNxdWlyZSgpCi0gICAgICAgICAgICBleGNlcHQgRGVhZGxvY2tFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBzZWxmLkRlYWRsb2NrRXJyb3I6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCkBAIC05OSwzMCArMTA2LDUwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0cy5jb3VudCgoVHJ1ZSwgRmFsc2UpKSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHRzLmNvdW50KChUcnVlLCBUcnVlKSksIGxlbihyZXN1bHRzKSkKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAidGhyZWFkcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCitjbGFzcyBGcm96ZW5fRGVhZGxvY2tBdm9pZGFuY2VUZXN0cyhEZWFkbG9ja0F2b2lkYW5jZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgTG9ja1R5cGUgPSBmcm96ZW5fYm9vdHN0cmFwLl9Nb2R1bGVMb2NrCisgICAgRGVhZGxvY2tFcnJvciA9IGZyb3plbl9ib290c3RyYXAuX0RlYWRsb2NrRXJyb3IKIAotY2xhc3MgTGlmZXRpbWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICJ0aHJlYWRzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKK2NsYXNzIFNvdXJjZV9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzKERlYWRsb2NrQXZvaWRhbmNlVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBMb2NrVHlwZSA9IHNvdXJjZV9ib290c3RyYXAuX01vZHVsZUxvY2sKKyAgICBEZWFkbG9ja0Vycm9yID0gc291cmNlX2Jvb3RzdHJhcC5fRGVhZGxvY2tFcnJvcgorCisKK2NsYXNzIExpZmV0aW1lVGVzdHM6CiAKICAgICBkZWYgdGVzdF9sb2NrX2xpZmV0aW1lKHNlbGYpOgogICAgICAgICBuYW1lID0gInh5enp5IgotICAgICAgICBzZWxmLmFzc2VydE5vdEluKG5hbWUsIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKLSAgICAgICAgbG9jayA9IF9ib290c3RyYXAuX2dldF9tb2R1bGVfbG9jayhuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIF9ib290c3RyYXAuX21vZHVsZV9sb2NrcykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBsb2NrID0gc2VsZi5ib290c3RyYXAuX2dldF9tb2R1bGVfbG9jayhuYW1lKQorICAgICAgICBzZWxmLmFzc2VydEluKG5hbWUsIHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCiAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYobG9jaykKICAgICAgICAgZGVsIGxvY2sKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBfYm9vdHN0cmFwLl9tb2R1bGVfbG9ja3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4obmFtZSwgc2VsZi5ib290c3RyYXAuX21vZHVsZV9sb2NrcykKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSkKIAogICAgIGRlZiB0ZXN0X2FsbF9sb2NrcyhzZWxmKToKICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCBsZW4oX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKSwgX2Jvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGxlbihzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX2xvY2tzKQorCitjbGFzcyBGcm96ZW5fTGlmZXRpbWVUZXN0cyhMaWZldGltZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gZnJvemVuX2Jvb3RzdHJhcAorCitjbGFzcyBTb3VyY2VfTGlmZXRpbWVUZXN0cyhMaWZldGltZVRlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgYm9vdHN0cmFwID0gc291cmNlX2Jvb3RzdHJhcAogCiAKIEBzdXBwb3J0LnJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KE1vZHVsZUxvY2tBc1JMb2NrVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRGVhZGxvY2tBdm9pZGFuY2VUZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICBMaWZldGltZVRlc3RzKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KEZyb3plbl9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZV9Nb2R1bGVMb2NrQXNSTG9ja1Rlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plbl9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZV9EZWFkbG9ja0F2b2lkYW5jZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIEZyb3plbl9MaWZldGltZVRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZV9MaWZldGltZVRlc3RzKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9uYW1lc3BhY2VfcGtncy5weQpzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBMaWIvdGVzdC90ZXN0X25hbWVzcGFjZV9wa2dzLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X25hbWVzcGFjZV9wa2dzLnB5CmluZGV4IDcwNjdiMTIuLjY2Mzk2MTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbmFtZXNwYWNlX3BrZ3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF9uYW1lc3BhY2VfcGtncy5weQpAQCAtMSw3ICsxLDEwIEBACi1pbXBvcnQgc3lzCiBpbXBvcnQgY29udGV4dGxpYgotaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgaW1wb3J0bGliLmFiYworaW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKIGltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB0ZXN0LnRlc3RfaW1wb3J0bGliIGltcG9ydCB1dGlsCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CkBAIC0yODYsOSArMjg5LDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhX3Rlc3QuYXR0ciwgJ2luIG1vZHVsZScpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgqTmFtZXNwYWNlUGFja2FnZVRlc3QuX19zdWJjbGFzc2VzX18oKSkKLQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3NwZWMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1NDFmNgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfc3BlYy5weQpAQCAtMCwwICsxLDk1NyBAQAorZnJvbSAuIGltcG9ydCB1dGlsCisKK2Zyb3plbl9pbml0LCBzb3VyY2VfaW5pdCA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliJykKK2Zyb3plbl9ib290c3RyYXAgPSBmcm96ZW5faW5pdC5fYm9vdHN0cmFwCitzb3VyY2VfYm9vdHN0cmFwID0gc291cmNlX2luaXQuX2Jvb3RzdHJhcAorZnJvemVuX21hY2hpbmVyeSwgc291cmNlX21hY2hpbmVyeSA9IHV0aWwuaW1wb3J0X2ltcG9ydGxpYignaW1wb3J0bGliLm1hY2hpbmVyeScpCitmcm96ZW5fdXRpbCwgc291cmNlX3V0aWwgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKworaW1wb3J0IG9zLnBhdGgKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBDbGVhbkltcG9ydAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgc3lzCitpbXBvcnQgd2FybmluZ3MKKworCisKK2NsYXNzIFRlc3RMb2FkZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0aD1Ob25lLCBpc19wYWNrYWdlPU5vbmUpOgorICAgICAgICBzZWxmLnBhdGggPSBwYXRoCisgICAgICAgIHNlbGYucGFja2FnZSA9IGlzX3BhY2thZ2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8VGVzdExvYWRlciBvYmplY3Q+JworCisgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICBpZiBuYW1lID09ICdnZXRfZmlsZW5hbWUnIGFuZCBzZWxmLnBhdGggaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fZ2V0X2ZpbGVuYW1lCisgICAgICAgIGlmIG5hbWUgPT0gJ2lzX3BhY2thZ2UnOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2lzX3BhY2thZ2UKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IobmFtZSkKKworICAgIGRlZiBfZ2V0X2ZpbGVuYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXRoCisKKyAgICBkZWYgX2lzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLnBhY2thZ2UKKworCitjbGFzcyBOZXdMb2FkZXIoVGVzdExvYWRlcik6CisKKyAgICBFR0dTID0gMQorCisgICAgZGVmIGV4ZWNfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgIG1vZHVsZS5lZ2dzID0gc2VsZi5FR0dTCisKKworY2xhc3MgTGVnYWN5TG9hZGVyKFRlc3RMb2FkZXIpOgorCisgICAgSEFNID0gLTEKKworICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBEZXByZWNhdGlvbldhcm5pbmcpCisKKyAgICAgICAgQGZyb3plbl91dGlsLm1vZHVsZV9mb3JfbG9hZGVyCisgICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgbW9kdWxlLmhhbSA9IHNlbGYuSEFNCisgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisKKworY2xhc3MgTW9kdWxlU3BlY1Rlc3RzOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm5hbWUgPSAnc3BhbScKKyAgICAgICAgc2VsZi5wYXRoID0gJ3NwYW0ucHknCisgICAgICAgIHNlbGYuY2FjaGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2FkZXIgPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgc2VsZi5zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmxvY19zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49c2VsZi5wYXRoKQorICAgICAgICBzZWxmLmxvY19zcGVjLl9zZXRfZmlsZWF0dHIgPSBUcnVlCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0X25vX2xvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBOb25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXIsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaXNfcGFja2FnZV9mYWxzZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1GYWxzZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3RfZGVmYXVsdF9pc19wYWNrYWdlX3RydWUoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2hhc19sb2NhdGlvbl9zZXR0ZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj0nc29tZXdoZXJlJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKyAgICAgICAgc3BlYy5oYXNfbG9jYXRpb24gPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X2VxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW49Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xvY2F0aW9uPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZWQ9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnNwZWMgPT0gb3RoZXIpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eV9sb2NhdGlvbihzZWxmKToKKyAgICAgICAgb3RoZXIgPSB0eXBlKHN5cy5pbXBsZW1lbnRhdGlvbikobmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzX2xvY2F0aW9uPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZD1zZWxmLmNhY2hlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2Nfc3BlYywgb3RoZXIpCisKKyAgICBkZWYgdGVzdF9pbmVxdWFsaXR5KHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPSdoYW0nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkZXI9c2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfbG9jYXRpb249RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlZD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLnNwZWMsIG90aGVyKQorCisgICAgZGVmIHRlc3RfaW5lcXVhbGl0eV9pbmNvbXBsZXRlKHNlbGYpOgorICAgICAgICBvdGhlciA9IHR5cGUoc3lzLmltcGxlbWVudGF0aW9uKShuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChzZWxmLnNwZWMsIG90aGVyKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3NwYW0uZWdncycsIHNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5wYXJlbnQsICdzcGFtJykKKworICAgIGRlZiB0ZXN0X3BhY2thZ2VfaXNfcGFja2FnZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoJ3NwYW0uZWdncycsIHNlbGYubG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19wYWNrYWdlPVRydWUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnBhcmVudCwgJ3NwYW0uZWdncycpCisKKyAgICAjIGNhY2hlZAorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NldChzZWxmKToKKyAgICAgICAgYmVmb3JlID0gc2VsZi5zcGVjLmNhY2hlZAorICAgICAgICBzZWxmLnNwZWMuY2FjaGVkID0gJ3RoZXJlJworICAgICAgICBhZnRlciA9IHNlbGYuc3BlYy5jYWNoZWQKKworICAgICAgICBzZWxmLmFzc2VydElzKGJlZm9yZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZnRlciwgJ3RoZXJlJykKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9ub19vcmlnaW4oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF93aXRoX29yaWdpbl9ub3RfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1zZWxmLnBhdGgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2Uoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYucGF0aCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9jX3NwZWMuY2FjaGVkLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2NhY2hlZF9zb3VyY2VfdW5rbm93bl9zdWZmaXgoc2VsZik6CisgICAgICAgIHNlbGYubG9jX3NwZWMub3JpZ2luID0gJ3NwYW0uc3BhbXNwYW1zcGFtJworCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5sb2Nfc3BlYy5jYWNoZWQsIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jYWNoZWRfc291cmNlX21pc3NpbmdfY2FjaGVfdGFnKHNlbGYpOgorICAgICAgICBvcmlnaW5hbCA9IHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKyAgICAgICAgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FjaGVkID0gc2VsZi5sb2Nfc3BlYy5jYWNoZWQKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgPSBvcmlnaW5hbAorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY2FjaGVkLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FjaGVkX3NvdXJjZWxlc3Moc2VsZik6CisgICAgICAgIHNlbGYubG9jX3NwZWMub3JpZ2luID0gJ3NwYW0ucHljJworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2Nfc3BlYy5jYWNoZWQsICdzcGFtLnB5YycpCisKKworY2xhc3MgRnJvemVuX01vZHVsZVNwZWNUZXN0cyhNb2R1bGVTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gZnJvemVuX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisKKworY2xhc3MgU291cmNlX01vZHVsZVNwZWNUZXN0cyhNb2R1bGVTcGVjVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICB1dGlsID0gc291cmNlX3V0aWwKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisKKworY2xhc3MgTW9kdWxlU3BlY01ldGhvZHNUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ3NwYW0nCisgICAgICAgIHNlbGYucGF0aCA9ICdzcGFtLnB5JworICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5sb2Nfc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luPXNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5sb2Nfc3BlYy5fc2V0X2ZpbGVhdHRyID0gVHJ1ZQorCisgICAgIyBpbml0X21vZHVsZV9hdHRycworCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5Nb2R1bGVTcGVjKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMgPSBbJ3NwYW0nLCAnaGFtJ10KKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX25hbWVfXywgc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBzcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19wYWNrYWdlX18sIHNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX3NwZWNfXywgc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19wYXRoX18sIHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfbG9jYXRpb24oc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKShzZWxmLm5hbWUpCisgICAgICAgIHNwZWMgPSBzZWxmLmxvY19zcGVjCisgICAgICAgIHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzcGVjKS5pbml0X21vZHVsZV9hdHRycyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19uYW1lX18sIHNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19sb2FkZXJfXywgc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBzcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhtb2R1bGUuX19zcGVjX18sIHNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2ZpbGVfXywgc3BlYy5vcmlnaW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fY2FjaGVkX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNwZWMub3JpZ2luKSkKKworICAgIGRlZiB0ZXN0X2luaXRfbW9kdWxlX2F0dHJzX2RpZmZlcmVudF9uYW1lKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSB0eXBlKHN5cykoJ2VnZ3MnKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pbml0X21vZHVsZV9hdHRyc19kaWZmZXJlbnRfc3BlYyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMpKHNlbGYubmFtZSkKKyAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnZWdncycsIG9iamVjdCgpKQorICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhzZWxmLm5hbWUsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbmFtZV9fLCBzcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIHNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fc3BlY19fLCBzcGVjKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfYWxyZWFkeV9zZXQoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHR5cGUoc3lzKSgnaGFtLmVnZ3MnKQorICAgICAgICBtb2R1bGUuX19sb2FkZXJfXyA9IG9iamVjdCgpCisgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9ICdoYW0nCisgICAgICAgIG1vZHVsZS5fX3BhdGhfXyA9IFsnZWdncyddCisgICAgICAgIG1vZHVsZS5fX2ZpbGVfXyA9ICdoYW0vZWdncy9fX2luaXRfXy5weScKKyAgICAgICAgbW9kdWxlLl9fY2FjaGVkX18gPSBzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobW9kdWxlLl9fZmlsZV9fKQorICAgICAgICBvcmlnaW5hbCA9IHZhcnMobW9kdWxlKS5jb3B5KCkKKyAgICAgICAgc3BlYyA9IHNlbGYubG9jX3NwZWMKKyAgICAgICAgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyA9IFsnJ10KKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmluaXRfbW9kdWxlX2F0dHJzKG1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydElzKG1vZHVsZS5fX2xvYWRlcl9fLCBvcmlnaW5hbFsnX19sb2FkZXJfXyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX3BhY2thZ2VfXywgb3JpZ2luYWxbJ19fcGFja2FnZV9fJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fcGF0aF9fLCBvcmlnaW5hbFsnX19wYXRoX18nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuX19maWxlX18sIG9yaWdpbmFsWydfX2ZpbGVfXyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHVsZS5fX2NhY2hlZF9fLCBvcmlnaW5hbFsnX19jYWNoZWRfXyddKQorCisgICAgZGVmIHRlc3RfaW5pdF9tb2R1bGVfYXR0cnNfaW1tdXRhYmxlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBvYmplY3QoKQorICAgICAgICBzcGVjID0gc2VsZi5sb2Nfc3BlYworICAgICAgICBzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zID0gWycnXQorICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc3BlYykuaW5pdF9tb2R1bGVfYXR0cnMobW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX25hbWVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19sb2FkZXJfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19wYWNrYWdlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fc3BlY19fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihtb2R1bGUsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobW9kdWxlLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ19fY2FjaGVkX18nKSkKKworICAgICMgY3JlYXRlKCkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZShzZWxmKToKKyAgICAgICAgY3JlYXRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmNyZWF0ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fbmFtZV9fLCBzZWxmLnNwZWMubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjcmVhdGVkLl9fc3BlY19fLCBzZWxmLnNwZWMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2ZpbGVfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fY2FjaGVkX18nKSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2xvYWRlcihzZWxmKToKKyAgICAgICAgbW9kdWxlID0gdHlwZShzeXMuaW1wbGVtZW50YXRpb24pKCkKKyAgICAgICAgY2xhc3MgQ3JlYXRpbmdMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgY3JlYXRlX21vZHVsZShzZWxmLCBzcGVjKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBDcmVhdGluZ0xvYWRlcigpCisgICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZCwgbW9kdWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19uYW1lX18sIHNlbGYuc3BlYy5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19sb2FkZXJfXywgc2VsZi5zcGVjLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjcmVhdGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGNyZWF0ZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX3BhdGhfXycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19jYWNoZWRfXycpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fbG9hZGVyX25vdF9oYW5kbGVkKHNlbGYpOgorICAgICAgICBjbGFzcyBDcmVhdGluZ0xvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBjcmVhdGVfbW9kdWxlKHNlbGYsIHNwZWMpOgorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBDcmVhdGluZ0xvYWRlcigpCisgICAgICAgIGNyZWF0ZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5jcmVhdGUoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3JlYXRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNyZWF0ZWQuX19wYWNrYWdlX18sIHNlbGYuc3BlYy5wYXJlbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoY3JlYXRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIoY3JlYXRlZCwgJ19fcGF0aF9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihjcmVhdGVkLCAnX19maWxlX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGNyZWF0ZWQsICdfX2NhY2hlZF9fJykpCisKKyAgICAjIGV4ZWMoKQorCisgICAgZGVmIHRlc3RfZXhlYyhzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIG1vZHVsZSA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmNyZWF0ZSgpCisgICAgICAgIHN5cy5tb2R1bGVzW3NlbGYubmFtZV0gPSBtb2R1bGUKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKG1vZHVsZSwgJ2VnZ3MnKSkKKyAgICAgICAgc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhtb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2R1bGUuZWdncywgMSkKKworICAgICMgbG9hZCgpCisKKyAgICBkZWYgdGVzdF9sb2FkKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVnZ3MsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLCBpbnN0YWxsZWQpCisKKyAgICBkZWYgdGVzdF9sb2FkX3JlcGxhY2VkKHNlbGYpOgorICAgICAgICByZXBsYWNlbWVudCA9IG9iamVjdCgpCisgICAgICAgIGNsYXNzIFJlcGxhY2luZ0xvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHN5cy5tb2R1bGVzW21vZHVsZS5fX25hbWVfX10gPSByZXBsYWNlbWVudAorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gUmVwbGFjaW5nTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGluc3RhbGxlZCA9IHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLCByZXBsYWNlbWVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhpbnN0YWxsZWQsIHJlcGxhY2VtZW50KQorCisgICAgZGVmIHRlc3RfbG9hZF9mYWlsZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEZhaWxlZExvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gRmFpbGVkTG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuc3BlYy5uYW1lLCBzeXMubW9kdWxlcykKKworICAgIGRlZiB0ZXN0X2xvYWRfZmFpbGVkX3JlbW92ZWQoc2VsZik6CisgICAgICAgIGNsYXNzIEZhaWxlZExvYWRlcihUZXN0TG9hZGVyKToKKyAgICAgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2R1bGUpOgorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1ttb2R1bGUuX19uYW1lX19dCisgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBGYWlsZWRMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKToKKyAgICAgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oc2VsZi5zcGVjLm5hbWUsIHN5cy5tb2R1bGVzKQorCisgICAgZGVmIHRlc3RfbG9hZF9sZWdhY3koc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBMZWdhY3lMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmhhbSwgLTEpCisKKyAgICBkZWYgdGVzdF9sb2FkX2xlZ2FjeV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTGVnYWN5TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKworICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX2xvYWRlcl9fLCBzZWxmLnNwZWMubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX3BhY2thZ2VfXywgc2VsZi5zcGVjLnBhcmVudCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZWQuX19zcGVjX18sIHNlbGYuc3BlYykKKworICAgIGRlZiB0ZXN0X2xvYWRfbGVnYWN5X2F0dHJpYnV0ZXNfaW1tdXRhYmxlKHNlbGYpOgorICAgICAgICBtb2R1bGUgPSBvYmplY3QoKQorICAgICAgICBjbGFzcyBJbW11dGFibGVMb2FkZXIoVGVzdExvYWRlcik6CisgICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBJbW11dGFibGVMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN5cy5tb2R1bGVzW3NlbGYuc3BlYy5uYW1lXSwgbW9kdWxlKQorCisgICAgIyByZWxvYWQoKQorCisgICAgZGVmIHRlc3RfcmVsb2FkKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5lZ2dzLCAxKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBsb2FkZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zdGFsbGVkLCBsb2FkZWQpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbW9kaWZpZWQoc2VsZik6CisgICAgICAgIHNlbGYuc3BlYy5sb2FkZXIgPSBOZXdMb2FkZXIoKQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KHNlbGYuc3BlYy5uYW1lKToKKyAgICAgICAgICAgIGxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmxvYWQoKQorICAgICAgICAgICAgbG9hZGVkLmVnZ3MgPSAyCisgICAgICAgICAgICByZWxvYWRlZCA9IHNlbGYuYm9vdHN0cmFwLl9TcGVjTWV0aG9kcyhzZWxmLnNwZWMpLmV4ZWMobG9hZGVkKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLmVnZ3MsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9leHRyYV9hdHRyaWJ1dGVzKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTmV3TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIGxvYWRlZC5hdmFpbGFibGUgPSBGYWxzZQorICAgICAgICAgICAgcmVsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxvYWRlZC5hdmFpbGFibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocmVsb2FkZWQsIGxvYWRlZCkKKworICAgIGRlZiB0ZXN0X3JlbG9hZF9pbml0X21vZHVsZV9hdHRycyhzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5ld0xvYWRlcigpCisgICAgICAgIHdpdGggQ2xlYW5JbXBvcnQoc2VsZi5zcGVjLm5hbWUpOgorICAgICAgICAgICAgbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykubG9hZCgpCisgICAgICAgICAgICBsb2FkZWQuX19uYW1lX18gPSAnaGFtJworICAgICAgICAgICAgZGVsIGxvYWRlZC5fX2xvYWRlcl9fCisgICAgICAgICAgICBkZWwgbG9hZGVkLl9fcGFja2FnZV9fCisgICAgICAgICAgICBkZWwgbG9hZGVkLl9fc3BlY19fCisgICAgICAgICAgICBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5leGVjKGxvYWRlZCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5fX25hbWVfXywgc2VsZi5zcGVjLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVkLl9fbG9hZGVyX18sIHNlbGYuc3BlYy5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVkLl9fcGFja2FnZV9fLCBzZWxmLnNwZWMucGFyZW50KQorICAgICAgICBzZWxmLmFzc2VydElzKGxvYWRlZC5fX3NwZWNfXywgc2VsZi5zcGVjKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGhhc2F0dHIobG9hZGVkLCAnX19wYXRoX18nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKGxvYWRlZCwgJ19fZmlsZV9fJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaGFzYXR0cihsb2FkZWQsICdfX2NhY2hlZF9fJykpCisKKyAgICBkZWYgdGVzdF9yZWxvYWRfbGVnYWN5KHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gTGVnYWN5TG9hZGVyKCkKKyAgICAgICAgd2l0aCBDbGVhbkltcG9ydChzZWxmLnNwZWMubmFtZSk6CisgICAgICAgICAgICBsb2FkZWQgPSBzZWxmLmJvb3RzdHJhcC5fU3BlY01ldGhvZHMoc2VsZi5zcGVjKS5sb2FkKCkKKyAgICAgICAgICAgIHJlbG9hZGVkID0gc2VsZi5ib290c3RyYXAuX1NwZWNNZXRob2RzKHNlbGYuc3BlYykuZXhlYyhsb2FkZWQpCisgICAgICAgICAgICBpbnN0YWxsZWQgPSBzeXMubW9kdWxlc1tzZWxmLnNwZWMubmFtZV0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZC5oYW0sIC0xKQorICAgICAgICBzZWxmLmFzc2VydElzKHJlbG9hZGVkLCBsb2FkZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaW5zdGFsbGVkLCBsb2FkZWQpCisKKworY2xhc3MgRnJvemVuX01vZHVsZVNwZWNNZXRob2RzVGVzdHMoTW9kdWxlU3BlY01ldGhvZHNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKKworY2xhc3MgU291cmNlX01vZHVsZVNwZWNNZXRob2RzVGVzdHMoTW9kdWxlU3BlY01ldGhvZHNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IHNvdXJjZV9ib290c3RyYXAKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CisgICAgdXRpbCA9IHNvdXJjZV91dGlsCisKKworY2xhc3MgTW9kdWxlUmVwclRlc3RzOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLm1vZHVsZSA9IHR5cGUob3MpKCdzcGFtJykKKyAgICAgICAgc2VsZi5zcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYygnc3BhbScsIFRlc3RMb2FkZXIoKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX2xvYWRlcl9fX21vZHVsZV9yZXByKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgbW9kdWxlX3JlcHIoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJzxkZWxpY2lvdXMge30+Jy5mb3JtYXQobW9kdWxlLl9fbmFtZV9fKQorICAgICAgICBzZWxmLm1vZHVsZS5fX2xvYWRlcl9fID0gTG9hZGVyKCkKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8ZGVsaWNpb3VzIHNwYW0+JykKKworICAgIGRlZiB0ZXN0X21vZHVsZV9fX2xvYWRlcl9fX21vZHVsZV9yZXByX2JhZChzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyKFRlc3RMb2FkZXIpOgorICAgICAgICAgICAgZGVmIG1vZHVsZV9yZXByKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uCisgICAgICAgIHNlbGYubW9kdWxlLl9fbG9hZGVyX18gPSBMb2FkZXIoKQorICAgICAgICBtb2RyZXByID0gc2VsZi5ib290c3RyYXAuX21vZHVsZV9yZXByKHNlbGYubW9kdWxlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kcmVwciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnPG1vZHVsZSB7IXJ9ICg8VGVzdExvYWRlciBvYmplY3Q+KT4nLmZvcm1hdCgnc3BhbScpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fc3BlY19fKHNlbGYpOgorICAgICAgICBvcmlnaW4gPSAnaW4gYSBob2xlLCBpbiB0aGUgZ3JvdW5kJworICAgICAgICBzZWxmLnNwZWMub3JpZ2luID0gb3JpZ2luCisgICAgICAgIHNlbGYubW9kdWxlLl9fc3BlY19fID0gc2VsZi5zcGVjCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLCAnPG1vZHVsZSB7IXJ9ICh7fSk+Jy5mb3JtYXQoJ3NwYW0nLCBvcmlnaW4pKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX19fc3BlY19fX2xvY2F0aW9uKHNlbGYpOgorICAgICAgICBsb2NhdGlvbiA9ICdpbl9hX2dhbGF4eV9mYXJfZmFyX2F3YXkucHknCisgICAgICAgIHNlbGYuc3BlYy5vcmlnaW4gPSBsb2NhdGlvbgorICAgICAgICBzZWxmLnNwZWMuX3NldF9maWxlYXR0ciA9IFRydWUKKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSBmcm9tIHshcn0+Jy5mb3JtYXQoJ3NwYW0nLCBsb2NhdGlvbikpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX19fbm9fb3JpZ2luKHNlbGYpOgorICAgICAgICBzZWxmLnNwZWMubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYubW9kdWxlLl9fc3BlY19fID0gc2VsZi5zcGVjCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gKDxUZXN0TG9hZGVyIG9iamVjdD4pPicuZm9ybWF0KCdzcGFtJykpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfX19zcGVjX19fbm9fb3JpZ2luX25vX2xvYWRlcihzZWxmKToKKyAgICAgICAgc2VsZi5zcGVjLmxvYWRlciA9IE5vbmUKKyAgICAgICAgc2VsZi5tb2R1bGUuX19zcGVjX18gPSBzZWxmLnNwZWMKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9ub19uYW1lKHNlbGYpOgorICAgICAgICBkZWwgc2VsZi5tb2R1bGUuX19uYW1lX18KKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQoJz8nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV93aXRoX2ZpbGUoc2VsZik6CisgICAgICAgIGZpbGVuYW1lID0gJ2UvaS9lL2kvby9zcGFtLnB5JworICAgICAgICBzZWxmLm1vZHVsZS5fX2ZpbGVfXyA9IGZpbGVuYW1lCisgICAgICAgIG1vZHJlcHIgPSBzZWxmLmJvb3RzdHJhcC5fbW9kdWxlX3JlcHIoc2VsZi5tb2R1bGUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2RyZXByLAorICAgICAgICAgICAgICAgICAgICAgICAgICc8bW9kdWxlIHshcn0gZnJvbSB7IXJ9PicuZm9ybWF0KCdzcGFtJywgZmlsZW5hbWUpKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX25vX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYubW9kdWxlLl9fbG9hZGVyX18gPSBUZXN0TG9hZGVyKCkKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgJzxtb2R1bGUgeyFyfSAoPFRlc3RMb2FkZXIgb2JqZWN0Pik+Jy5mb3JtYXQoJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9ub19maWxlX25vX2xvYWRlcihzZWxmKToKKyAgICAgICAgbW9kcmVwciA9IHNlbGYuYm9vdHN0cmFwLl9tb2R1bGVfcmVwcihzZWxmLm1vZHVsZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZHJlcHIsICc8bW9kdWxlIHshcn0+Jy5mb3JtYXQoJ3NwYW0nKSkKKworCitjbGFzcyBGcm96ZW5fTW9kdWxlUmVwclRlc3RzKE1vZHVsZVJlcHJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGJvb3RzdHJhcCA9IGZyb3plbl9ib290c3RyYXAKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisgICAgdXRpbCA9IGZyb3plbl91dGlsCisKKworY2xhc3MgU291cmNlX01vZHVsZVJlcHJUZXN0cyhNb2R1bGVSZXByVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBib290c3RyYXAgPSBzb3VyY2VfYm9vdHN0cmFwCisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIEZhY3RvcnlUZXN0czoKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5uYW1lID0gJ3NwYW0nCisgICAgICAgIHNlbGYucGF0aCA9ICdzcGFtLnB5JworICAgICAgICBzZWxmLmNhY2hlZCA9IHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShzZWxmLnBhdGgpCisgICAgICAgIHNlbGYubG9hZGVyID0gVGVzdExvYWRlcigpCisgICAgICAgIHNlbGYuZmlsZWxvYWRlciA9IFRlc3RMb2FkZXIoc2VsZi5wYXRoKQorICAgICAgICBzZWxmLnBrZ2xvYWRlciA9IFRlc3RMb2FkZXIoc2VsZi5wYXRoLCBUcnVlKQorCisgICAgIyBzcGVjX2Zyb21fbG9hZGVyKCkKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfZGVmYXVsdF93aXRoX2JhZF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMub3JpZ2luLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fbG9hZGVyX29yaWdpbihzZWxmKToKKyAgICAgICAgb3JpZ2luID0gJ3NvbWV3aGVyZSBvdmVyIHRoZSByYWluYm93JworICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1vcmlnaW4pCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIG9yaWdpbikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX2ZhbHNlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5sb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV90cnVlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfb3JpZ2luX2FuZF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBvcmlnaW4gPSAnd2hlcmUgdGhlIHN0cmVldHMgaGF2ZSBubyBuYW1lJworICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1vcmlnaW4sIGlzX3BhY2thZ2U9VHJ1ZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgb3JpZ2luKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2xvYWRlcl9pc19wYWNrYWdlX3dpdGhfbG9hZGVyX2ZhbHNlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKGlzX3BhY2thZ2U9RmFsc2UpCisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIGxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5vcmlnaW4sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV93aXRoX2xvYWRlcl90cnVlKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBUZXN0TG9hZGVyKGlzX3BhY2thZ2U9VHJ1ZSkKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgbG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIGxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLm9yaWdpbiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmNhY2hlZCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfZGVmYXVsdF93aXRoX2ZpbGVfbG9hZGVyKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9sb2FkZXIoc2VsZi5uYW1lLCBzZWxmLmZpbGVsb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV9mYWxzZV93aXRoX2ZpbGVsb2FkZXIoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2xvYWRlcihzZWxmLm5hbWUsIHNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX3BhY2thZ2U9RmFsc2UpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgc2VsZi5maWxlbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9sb2FkZXJfaXNfcGFja2FnZV90cnVlX3dpdGhfZmlsZWxvYWRlcihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fbG9hZGVyKHNlbGYubmFtZSwgc2VsZi5maWxlbG9hZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfcGFja2FnZT1UcnVlKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICAjIHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKCkKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2RlZmF1bHQoc2VsZik6CisgICAgICAgIGlmIHNlbGYubWFjaGluZXJ5IGlzIHNvdXJjZV9tYWNoaW5lcnk6CisgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgnbm90IHN1cmUgd2h5IHRoaXMgaXMgYnJlYWtpbmcuLi4nKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzcGVjLmxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLnBhdGgsIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9kZWZhdWx0X3dpdGhvdXRfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc2VsZi5uYW1lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2RlZmF1bHRfYmFkX3N1ZmZpeChzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsICdzcGFtLmVnZ3MnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX2xvYWRlcl9ub19sb2NhdGlvbihzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fbG9hZGVyX25vX2xvY2F0aW9uX25vX2dldF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYubG9hZGVyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYubG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCAnPHVua25vd24+JykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuY2FjaGVkLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9sb2FkZXJfbm9fbG9jYXRpb25fYmFkX2dldF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgY2xhc3MgTG9hZGVyOgorICAgICAgICAgICAgZGVmIGdldF9maWxlbmFtZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgbG9hZGVyPWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sICc8dW5rbm93bj4nKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5jYWNoZWQsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfbm9uZShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1Ob25lKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2VtcHR5KHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zPVtdKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5uYW1lLCBzZWxmLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5sb2FkZXIsIHNlbGYuZmlsZWxvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX25vdF9lbXB0eShzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLmZpbGVsb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1bJ2VnZ3MnXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBbJ2VnZ3MnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZGVmYXVsdChzZWxmKToKKyAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzZWxmLm5hbWUsIHNlbGYucGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1zZWxmLnBrZ2xvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLnBrZ2xvYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm9yaWdpbiwgc2VsZi5wYXRoKQorICAgICAgICBzZWxmLmFzc2VydElzKHNwZWMubG9hZGVyX3N0YXRlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnMsIFsnJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5jYWNoZWQsIHNlbGYuY2FjaGVkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3BlYy5oYXNfbG9jYXRpb24pCisKKyAgICBkZWYgdGVzdF9zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbl9zbXNsX2RlZmF1bHRfbm90X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGNsYXNzIExvYWRlcjoKKyAgICAgICAgICAgIGRlZiBpc19wYWNrYWdlKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworICAgIGRlZiB0ZXN0X3NwZWNfZnJvbV9maWxlX2xvY2F0aW9uX3Ntc2xfZGVmYXVsdF9ub19pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPXNlbGYuZmlsZWxvYWRlcikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubmFtZSwgc2VsZi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMubG9hZGVyLCBzZWxmLmZpbGVsb2FkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5vcmlnaW4sIHNlbGYucGF0aCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLmxvYWRlcl9zdGF0ZSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLnN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMuY2FjaGVkLCBzZWxmLmNhY2hlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNwZWMuaGFzX2xvY2F0aW9uKQorCisgICAgZGVmIHRlc3Rfc3BlY19mcm9tX2ZpbGVfbG9jYXRpb25fc21zbF9kZWZhdWx0X2JhZF9pc19wYWNrYWdlKHNlbGYpOgorICAgICAgICBjbGFzcyBMb2FkZXI6CisgICAgICAgICAgICBkZWYgaXNfcGFja2FnZShzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQorICAgICAgICBzcGVjID0gc2VsZi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKHNlbGYubmFtZSwgc2VsZi5wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLm5hbWUsIHNlbGYubmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmxvYWRlciwgbG9hZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWMub3JpZ2luLCBzZWxmLnBhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5sb2FkZXJfc3RhdGUsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjLmNhY2hlZCwgc2VsZi5jYWNoZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcGVjLmhhc19sb2NhdGlvbikKKworCitjbGFzcyBGcm96ZW5fRmFjdG9yeVRlc3RzKEZhY3RvcnlUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorICAgIG1hY2hpbmVyeSA9IGZyb3plbl9tYWNoaW5lcnkKKworCitjbGFzcyBTb3VyY2VfRmFjdG9yeVRlc3RzKEZhY3RvcnlUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorICAgIG1hY2hpbmVyeSA9IHNvdXJjZV9tYWNoaW5lcnkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3RfdXRpbC5weQppbmRleCBlZmM4OTc3Li5iMjgyM2M2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3V0aWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdGVzdF91dGlsLnB5CkBAIC0xLDIzICsxLDY2IEBACiBmcm9tIGltcG9ydGxpYiBpbXBvcnQgdXRpbAogZnJvbSAuIGltcG9ydCB1dGlsIGFzIHRlc3RfdXRpbAotaW1wb3J0IGltcAorZnJvemVuX2luaXQsIHNvdXJjZV9pbml0ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYicpCitmcm96ZW5fbWFjaGluZXJ5LCBzb3VyY2VfbWFjaGluZXJ5ID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsID0gdGVzdF91dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi51dGlsJykKKworaW1wb3J0IG9zCiBpbXBvcnQgc3lzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgd2FybmluZ3MKIAogCi1jbGFzcyBNb2R1bGVGb3JMb2FkZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEZWNvZGVTb3VyY2VCeXRlc1Rlc3RzOgorCisgICAgc291cmNlID0gInN0cmluZyA9J8O8JyIKKworICAgIGRlZiB0ZXN0X3V0OF9kZWZhdWx0KHNlbGYpOgorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzZWxmLnNvdXJjZS5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuZGVjb2RlX3NvdXJjZShzb3VyY2VfYnl0ZXMpLCBzZWxmLnNvdXJjZSkKKworICAgIGRlZiB0ZXN0X3NwZWNpZmllZF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgc291cmNlID0gJyMgY29kaW5nPWxhdGluLTFcbicgKyBzZWxmLnNvdXJjZQorICAgICAgICBzb3VyY2VfYnl0ZXMgPSBzb3VyY2UuZW5jb2RlKCdsYXRpbi0xJykKKyAgICAgICAgYXNzZXJ0IHNvdXJjZV9ieXRlcyAhPSBzb3VyY2UuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmRlY29kZV9zb3VyY2Uoc291cmNlX2J5dGVzKSwgc291cmNlKQorCisgICAgZGVmIHRlc3RfdW5pdmVyc2FsX25ld2xpbmVzKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSAnXHJcbicuam9pbihbc2VsZi5zb3VyY2UsIHNlbGYuc291cmNlXSkKKyAgICAgICAgc291cmNlX2J5dGVzID0gc291cmNlLmVuY29kZSgndXRmLTgnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5kZWNvZGVfc291cmNlKHNvdXJjZV9ieXRlcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1xuJy5qb2luKFtzZWxmLnNvdXJjZSwgc2VsZi5zb3VyY2VdKSkKKworRnJvemVuX0RlY29kZVNvdXJjZUJ5dGVzVGVzdHMsIFNvdXJjZV9EZWNvZGVTb3VyY2VCeXRlc1Rlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgRGVjb2RlU291cmNlQnl0ZXNUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKKworCitjbGFzcyBNb2R1bGVGb3JMb2FkZXJUZXN0czoKIAogICAgICIiIlRlc3RzIGZvciBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4iIiIKIAorICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtb2R1bGVfZm9yX2xvYWRlcihjbHMsIGZ1bmMpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHJldHVybiBjbHMudXRpbC5tb2R1bGVfZm9yX2xvYWRlcihmdW5jKQorCisgICAgZGVmIHRlc3Rfd2FybmluZyhzZWxmKToKKyAgICAgICAgIyBTaG91bGQgcmFpc2UgYSBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIHdoZW4gdXNlZC4KKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICBmdW5jID0gc2VsZi51dGlsLm1vZHVsZV9mb3JfbG9hZGVyKGxhbWJkYSB4OiB4KQorCiAgICAgZGVmIHJldHVybl9tb2R1bGUoc2VsZiwgbmFtZSk6Ci0gICAgICAgIGZ4biA9IHV0aWwubW9kdWxlX2Zvcl9sb2FkZXIobGFtYmRhIHNlbGYsIG1vZHVsZTogbW9kdWxlKQorICAgICAgICBmeG4gPSBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyKGxhbWJkYSBzZWxmLCBtb2R1bGU6IG1vZHVsZSkKICAgICAgICAgcmV0dXJuIGZ4bihzZWxmLCBuYW1lKQogCiAgICAgZGVmIHJhaXNlX2V4Y2VwdGlvbihzZWxmLCBuYW1lKToKICAgICAgICAgZGVmIHRvX3dyYXAoc2VsZiwgbW9kdWxlKToKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCi0gICAgICAgIGZ4biA9IHV0aWwubW9kdWxlX2Zvcl9sb2FkZXIodG9fd3JhcCkKKyAgICAgICAgZnhuID0gc2VsZi5tb2R1bGVfZm9yX2xvYWRlcih0b193cmFwKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmeG4oc2VsZiwgbmFtZSkKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgpAQCAtMzUsMTIgKzc4LDIzIEBACiAKICAgICBkZWYgdGVzdF9yZWxvYWQoc2VsZik6CiAgICAgICAgICMgVGVzdCB0aGF0IGEgbW9kdWxlIGlzIHJldXNlZCBpZiBhbHJlYWR5IGluIHN5cy5tb2R1bGVzLgorICAgICAgICBjbGFzcyBGYWtlTG9hZGVyOgorICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIEBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyCisgICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCiAgICAgICAgIG5hbWUgPSAnYS5iLmMnCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdhLmIuYycpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2EuYi5jJykKKyAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSA0MgorICAgICAgICBtb2R1bGUuX19wYWNrYWdlX18gPSA0MgogICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgogICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKLSAgICAgICAgICAgIHJldHVybmVkX21vZHVsZSA9IHNlbGYucmV0dXJuX21vZHVsZShuYW1lKQorICAgICAgICAgICAgbG9hZGVyID0gRmFrZUxvYWRlcigpCisgICAgICAgICAgICByZXR1cm5lZF9tb2R1bGUgPSBsb2FkZXIubG9hZF9tb2R1bGUobmFtZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocmV0dXJuZWRfbW9kdWxlLCBzeXMubW9kdWxlc1tuYW1lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBuYW1lKQogCiAgICAgZGVmIHRlc3RfbmV3X21vZHVsZV9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhIG1vZHVsZSBpcyByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMgaWYgYWRkZWQgYnV0IGFuCkBAIC01Myw3ICsxMDcsNyBAQAogICAgIGRlZiB0ZXN0X3JlbG9hZF9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhhdCBhIGZhaWx1cmUgb24gcmVsb2FkIGxlYXZlcyB0aGUgbW9kdWxlIGluLXBsYWNlLgogICAgICAgICBuYW1lID0gJ2EuYi5jJwotICAgICAgICBtb2R1bGUgPSBpbXAubmV3X21vZHVsZShuYW1lKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCiAgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQogICAgICAgICAgICAgc2VsZi5yYWlzZV9leGNlcHRpb24obmFtZSkKQEAgLTYxLDcgKzExNSw3IEBACiAKICAgICBkZWYgdGVzdF9kZWNvcmF0b3JfYXR0cnMoc2VsZik6CiAgICAgICAgIGRlZiBmeG4oc2VsZiwgbW9kdWxlKTogcGFzcwotICAgICAgICB3cmFwcGVkID0gdXRpbC5tb2R1bGVfZm9yX2xvYWRlcihmeG4pCisgICAgICAgIHdyYXBwZWQgPSBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyKGZ4bikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fbmFtZV9fLCBmeG4uX19uYW1lX18pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod3JhcHBlZC5fX3F1YWxuYW1lX18sIGZ4bi5fX3F1YWxuYW1lX18pCiAKQEAgLTg3LDcgKzE0MSw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5fcGtnID0gaXNfcGFja2FnZQogICAgICAgICAgICAgZGVmIGlzX3BhY2thZ2Uoc2VsZiwgbmFtZSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BrZwotICAgICAgICAgICAgQHV0aWwubW9kdWxlX2Zvcl9sb2FkZXIKKyAgICAgICAgICAgIEBzZWxmLm1vZHVsZV9mb3JfbG9hZGVyCiAgICAgICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKICAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlCiAKQEAgLTEwNyw4ICsxNjEsMTEgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMobW9kdWxlLl9fbG9hZGVyX18sIGxvYWRlcikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLl9fcGFja2FnZV9fLCBuYW1lKQogCitGcm96ZW5fTW9kdWxlRm9yTG9hZGVyVGVzdHMsIFNvdXJjZV9Nb2R1bGVGb3JMb2FkZXJUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIE1vZHVsZUZvckxvYWRlclRlc3RzLCB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCi1jbGFzcyBTZXRQYWNrYWdlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCitjbGFzcyBTZXRQYWNrYWdlVGVzdHM6CiAKICAgICAiIiJUZXN0cyBmb3IgaW1wb3J0bGliLnV0aWwuc2V0X3BhY2thZ2UuIiIiCiAKQEAgLTExNiwzNCArMTczLDM2IEBACiAgICAgICAgICIiIlZlcmlmeSB0aGUgbW9kdWxlIGhhcyB0aGUgZXhwZWN0ZWQgdmFsdWUgZm9yIF9fcGFja2FnZV9fIGFmdGVyCiAgICAgICAgIHBhc3NpbmcgdGhyb3VnaCBzZXRfcGFja2FnZS4iIiIKICAgICAgICAgZnhuID0gbGFtYmRhOiBtb2R1bGUKLSAgICAgICAgd3JhcHBlZCA9IHV0aWwuc2V0X3BhY2thZ2UoZnhuKQotICAgICAgICB3cmFwcGVkKCkKKyAgICAgICAgd3JhcHBlZCA9IHNlbGYudXRpbC5zZXRfcGFja2FnZShmeG4pCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgd3JhcHBlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0LCBtb2R1bGUuX19wYWNrYWdlX18pCiAKICAgICBkZWYgdGVzdF90b3BfbGV2ZWwoc2VsZik6CiAgICAgICAgICMgX19wYWNrYWdlX18gc2hvdWxkIGJlIHNldCB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIGEgdG9wLWxldmVsIG1vZHVsZS4KICAgICAgICAgIyBJbXBsaWNpdGx5IHRlc3RzIHdoZW4gcGFja2FnZSBpcyBzZXQgdG8gTm9uZS4KLSAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoJ21vZHVsZScpCisgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ21vZHVsZScpCiAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IE5vbmUKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAnJykKIAogICAgIGRlZiB0ZXN0X3BhY2thZ2Uoc2VsZik6CiAgICAgICAgICMgVGVzdCBzZXR0aW5nIF9fcGFja2FnZV9fIGZvciBhIHBhY2thZ2UuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdwa2cnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwa2cnKQogICAgICAgICBtb2R1bGUuX19wYXRoX18gPSBbJzxwYXRoPiddCiAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IE5vbmUKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3N1Ym1vZHVsZShzZWxmKToKICAgICAgICAgIyBUZXN0IF9fcGFja2FnZV9fIGZvciBhIG1vZHVsZSBpbiBhIHBhY2thZ2UuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdwa2cubW9kJykKKyAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgncGtnLm1vZCcpCiAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IE5vbmUKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAncGtnJykKIAogICAgIGRlZiB0ZXN0X3NldHRpbmdfaWZfbWlzc2luZyhzZWxmKToKICAgICAgICAgIyBfX3BhY2thZ2VfXyBzaG91bGQgYmUgc2V0IGlmIGl0IGlzIG1pc3NpbmcuCi0gICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdtb2QnKQorICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2QnKQogICAgICAgICBpZiBoYXNhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJyk6CiAgICAgICAgICAgICBkZWxhdHRyKG1vZHVsZSwgJ19fcGFja2FnZV9fJykKICAgICAgICAgc2VsZi52ZXJpZnkobW9kdWxlLCAnJykKQEAgLTE1MSw1OCArMjEwLDM4MyBAQAogICAgIGRlZiB0ZXN0X2xlYXZpbmdfYWxvbmUoc2VsZik6CiAgICAgICAgICMgSWYgX19wYWNrYWdlX18gaXMgc2V0IGFuZCBub3QgTm9uZSB0aGVuIGxlYXZlIGl0IGFsb25lLgogICAgICAgICBmb3IgdmFsdWUgaW4gKFRydWUsIEZhbHNlKToKLSAgICAgICAgICAgIG1vZHVsZSA9IGltcC5uZXdfbW9kdWxlKCdtb2QnKQorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZSgnbW9kJykKICAgICAgICAgICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9IHZhbHVlCiAgICAgICAgICAgICBzZWxmLnZlcmlmeShtb2R1bGUsIHZhbHVlKQogCiAgICAgZGVmIHRlc3RfZGVjb3JhdG9yX2F0dHJzKHNlbGYpOgogICAgICAgICBkZWYgZnhuKG1vZHVsZSk6IHBhc3MKLSAgICAgICAgd3JhcHBlZCA9IHV0aWwuc2V0X3BhY2thZ2UoZnhuKQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHdyYXBwZWQgPSBzZWxmLnV0aWwuc2V0X3BhY2thZ2UoZnhuKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyYXBwZWQuX19uYW1lX18sIGZ4bi5fX25hbWVfXykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3cmFwcGVkLl9fcXVhbG5hbWVfXywgZnhuLl9fcXVhbG5hbWVfXykKIAorRnJvemVuX1NldFBhY2thZ2VUZXN0cywgU291cmNlX1NldFBhY2thZ2VUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFNldFBhY2thZ2VUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAotY2xhc3MgUmVzb2x2ZU5hbWVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKK2NsYXNzIFNldExvYWRlclRlc3RzOgorCisgICAgIiIiVGVzdHMgaW1wb3J0bGliLnV0aWwuc2V0X2xvYWRlcigpLiIiIgorCisgICAgY2xhc3MgRHVtbXlMb2FkZXI6CisgICAgICAgIEB1dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworICAgIGRlZiB0ZXN0X25vX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5EdW1teUxvYWRlcigpCisgICAgICAgIGxvYWRlci5tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZGVsIGxvYWRlci5tb2R1bGUuX19sb2FkZXJfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcignaWdub3JlJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZXIsIGxvYWRlci5sb2FkX21vZHVsZSgnYmxhaCcpLl9fbG9hZGVyX18pCisKKyAgICBkZWYgdGVzdF9hdHRyaWJ1dGVfaXNfTm9uZShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5EdW1teUxvYWRlcigpCisgICAgICAgIGxvYWRlci5tb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKCdibGFoJykKKyAgICAgICAgbG9hZGVyLm1vZHVsZS5fX2xvYWRlcl9fID0gTm9uZQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9hZGVyLCBsb2FkZXIubG9hZF9tb2R1bGUoJ2JsYWgnKS5fX2xvYWRlcl9fKQorCisgICAgZGVmIHRlc3Rfbm90X3Jlc2V0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSBzZWxmLkR1bW15TG9hZGVyKCkKKyAgICAgICAgbG9hZGVyLm1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ2JsYWgnKQorICAgICAgICBsb2FkZXIubW9kdWxlLl9fbG9hZGVyX18gPSA0MgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2lnbm9yZScsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoNDIsIGxvYWRlci5sb2FkX21vZHVsZSgnYmxhaCcpLl9fbG9hZGVyX18pCisKK2NsYXNzIEZyb3plbl9TZXRMb2FkZXJUZXN0cyhTZXRMb2FkZXJUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNsYXNzIER1bW15TG9hZGVyOgorICAgICAgICBAZnJvemVuX3V0aWwuc2V0X2xvYWRlcgorICAgICAgICBkZWYgbG9hZF9tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZQorCitjbGFzcyBTb3VyY2VfU2V0TG9hZGVyVGVzdHMoU2V0TG9hZGVyVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBEdW1teUxvYWRlcjoKKyAgICAgICAgQHNvdXJjZV91dGlsLnNldF9sb2FkZXIKKyAgICAgICAgZGVmIGxvYWRfbW9kdWxlKHNlbGYsIG1vZHVsZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5tb2R1bGUKKworCitjbGFzcyBSZXNvbHZlTmFtZVRlc3RzOgogCiAgICAgIiIiVGVzdHMgaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1lKCkuIiIiCiAKICAgICBkZWYgdGVzdF9hYnNvbHV0ZShzZWxmKToKICAgICAgICAgIyBiYWNvbgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdiYWNvbicsIHNlbGYudXRpbC5yZXNvbHZlX25hbWUoJ2JhY29uJywgTm9uZSkpCiAKICAgICBkZWYgdGVzdF9hYm9zbHV0ZV93aXRoaW5fcGFja2FnZShzZWxmKToKICAgICAgICAgIyBiYWNvbiBpbiBzcGFtCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhY29uJywgdXRpbC5yZXNvbHZlX25hbWUoJ2JhY29uJywgJ3NwYW0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYmFjb24nLCBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCdiYWNvbicsICdzcGFtJykpCiAKICAgICBkZWYgdGVzdF9ub19wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIC5iYWNvbiBpbiAnJwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICcnKQorICAgICAgICAgICAgc2VsZi51dGlsLnJlc29sdmVfbmFtZSgnLmJhY29uJywgJycpCiAKICAgICBkZWYgdGVzdF9pbl9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIC5iYWNvbiBpbiBzcGFtCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3NwYW0uZWdncy5iYWNvbicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy5iYWNvbicsICdzcGFtLmVnZ3MnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuYmFjb24nLCAnc3BhbS5lZ2dzJykpCiAKICAgICBkZWYgdGVzdF9vdGhlcl9wYWNrYWdlKHNlbGYpOgogICAgICAgICAjIC4uYmFjb24gaW4gc3BhbS5iYWNvbgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCdzcGFtLmJhY29uJywKLSAgICAgICAgICAgICAgICAgICAgICAgICB1dGlsLnJlc29sdmVfbmFtZSgnLi5iYWNvbicsICdzcGFtLmVnZ3MnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0uZWdncycpKQogCiAgICAgZGVmIHRlc3RfZXNjYXBlKHNlbGYpOgogICAgICAgICAjIC4uYmFjb24gaW4gc3BhbQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdXRpbC5yZXNvbHZlX25hbWUoJy4uYmFjb24nLCAnc3BhbScpCisgICAgICAgICAgICBzZWxmLnV0aWwucmVzb2x2ZV9uYW1lKCcuLmJhY29uJywgJ3NwYW0nKQorCitGcm96ZW5fUmVzb2x2ZU5hbWVUZXN0cywgU291cmNlX1Jlc29sdmVOYW1lVGVzdHMgPSB0ZXN0X3V0aWwudGVzdF9ib3RoKAorICAgICAgICBSZXNvbHZlTmFtZVRlc3RzLAorICAgICAgICB1dGlsPVtmcm96ZW5fdXRpbCwgc291cmNlX3V0aWxdKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgIE1vZHVsZUZvckxvYWRlclRlc3RzLAotICAgICAgICAgICAgU2V0UGFja2FnZVRlc3RzLAotICAgICAgICAgICAgUmVzb2x2ZU5hbWVUZXN0cwotICAgICAgICApCitjbGFzcyBGaW5kU3BlY1Rlc3RzOgorCisgICAgY2xhc3MgRmFrZU1ldGFGaW5kZXI6CisgICAgICAgIEBzdGF0aWNtZXRob2QKKyAgICAgICAgZGVmIGZpbmRfc3BlYyhuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKTogcmV0dXJuIG5hbWUsIHBhdGgsIHRhcmdldAorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXMoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgICAgICBsb2FkZXIgPSAnYSBsb2FkZXIhJworICAgICAgICAgICAgc3BlYyA9IHNlbGYubWFjaGluZXJ5Lk1vZHVsZVNwZWMobmFtZSwgbG9hZGVyKQorICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBsb2FkZXIKKyAgICAgICAgICAgIG1vZHVsZS5fX3NwZWNfXyA9IHNwZWMKKyAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCisgICAgICAgICAgICBmb3VuZCA9IHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm91bmQsIHNwZWMpCisKKyAgICBkZWYgdGVzdF9zeXNfbW9kdWxlc193aXRob3V0X19fbG9hZGVyX18oc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgICAgICBkZWwgbW9kdWxlLl9fbG9hZGVyX18KKyAgICAgICAgICAgIGxvYWRlciA9ICdhIGxvYWRlciEnCisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhuYW1lLCBsb2FkZXIpCisgICAgICAgICAgICBtb2R1bGUuX19zcGVjX18gPSBzcGVjCisgICAgICAgICAgICBzeXMubW9kdWxlc1tuYW1lXSA9IG1vZHVsZQorICAgICAgICAgICAgZm91bmQgPSBzZWxmLnV0aWwuZmluZF9zcGVjKG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvdW5kLCBzcGVjKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfc3BlY19pc19Ob25lKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NvbWVfbW9kJworICAgICAgICB3aXRoIHRlc3RfdXRpbC51bmNhY2hlKG5hbWUpOgorICAgICAgICAgICAgbW9kdWxlID0gdHlwZXMuTW9kdWxlVHlwZShuYW1lKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gTm9uZQorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lKQorCisgICAgZGVmIHRlc3Rfc3lzX21vZHVsZXNfbG9hZGVyX2lzX05vbmUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc29tZV9tb2QnCisgICAgICAgIHdpdGggdGVzdF91dGlsLnVuY2FjaGUobmFtZSk6CisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKG5hbWUpCisgICAgICAgICAgICBzcGVjID0gc2VsZi5tYWNoaW5lcnkuTW9kdWxlU3BlYyhuYW1lLCBOb25lKQorICAgICAgICAgICAgbW9kdWxlLl9fc3BlY19fID0gc3BlYworICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIGZvdW5kID0gc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3VuZCwgc3BlYykKKworICAgIGRlZiB0ZXN0X3N5c19tb2R1bGVzX3NwZWNfaXNfbm90X3NldChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIG1vZHVsZSA9IHR5cGVzLk1vZHVsZVR5cGUobmFtZSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgbW9kdWxlLl9fc3BlY19fCisgICAgICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2R1bGUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLmZpbmRfc3BlYyhuYW1lKQorCisgICAgZGVmIHRlc3Rfc3VjY2VzcyhzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyAgICAgICAgICAgIHdpdGggdGVzdF91dGlsLmltcG9ydF9zdGF0ZShtZXRhX3BhdGg9W3NlbGYuRmFrZU1ldGFGaW5kZXJdKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChuYW1lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSkpCisKKyMgICAgZGVmIHRlc3Rfc3VjY2Vzc19wYXRoKHNlbGYpOgorIyAgICAgICAgIyBTZWFyY2hpbmcgb24gYSBwYXRoIHNob3VsZCB3b3JrLgorIyAgICAgICAgbmFtZSA9ICdzb21lX21vZCcKKyMgICAgICAgIHBhdGggPSAncGF0aCB0byBzb21lIHBsYWNlJworIyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudW5jYWNoZShuYW1lKToKKyMgICAgICAgICAgICB3aXRoIHRlc3RfdXRpbC5pbXBvcnRfc3RhdGUobWV0YV9wYXRoPVtzZWxmLkZha2VNZXRhRmluZGVyXSk6CisjICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG5hbWUsIHBhdGgsIE5vbmUpLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYudXRpbC5maW5kX3NwZWMobmFtZSwgcGF0aCkpCisKKyAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOgorICAgICAgICAjIE5vbmUgaXMgcmV0dXJuZWQgdXBvbiBmYWlsdXJlIHRvIGZpbmQgYSBsb2FkZXIuCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYudXRpbC5maW5kX3NwZWMoJ25ldmVyZ29pbmd0b2ZpbmR0aGlzbW9kdWxlJykpCisKKyAgICBkZWYgdGVzdF9maW5kX3N1Ym1vZHVsZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBzdWJuYW1lID0gJ2hhbScKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudGVtcF9tb2R1bGUobmFtZSwgcGtnPVRydWUpIGFzIHBrZ19kaXI6CisgICAgICAgICAgICBmdWxsbmFtZSwgXyA9IHRlc3RfdXRpbC5zdWJtb2R1bGUobmFtZSwgc3VibmFtZSwgcGtnX2RpcikKKyAgICAgICAgICAgIHNwZWMgPSBzZWxmLnV0aWwuZmluZF9zcGVjKGZ1bGxuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzcGVjLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmdWxsbmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKyAgICAgICAgICAgICMgRW5zdXJlIHN1Y2Nlc3NpdmUgY2FsbHMgYmVoYXZlIHRoZSBzYW1lLgorICAgICAgICAgICAgc3BlY19hZ2FpbiA9IHNlbGYudXRpbC5maW5kX3NwZWMoZnVsbG5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwZWNfYWdhaW4sIHNwZWMpCisKKyAgICBkZWYgdGVzdF9maW5kX3N1Ym1vZHVsZV9wYXJlbnRfYWxyZWFkeV9pbXBvcnRlZChzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBzdWJuYW1lID0gJ2hhbScKKyAgICAgICAgd2l0aCB0ZXN0X3V0aWwudGVtcF9tb2R1bGUobmFtZSwgcGtnPVRydWUpIGFzIHBrZ19kaXI6CisgICAgICAgICAgICBzZWxmLmluaXQuaW1wb3J0X21vZHVsZShuYW1lKQorICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB0ZXN0X3V0aWwuc3VibW9kdWxlKG5hbWUsIHN1Ym5hbWUsIHBrZ19kaXIpCisgICAgICAgICAgICBzcGVjID0gc2VsZi51dGlsLmZpbmRfc3BlYyhmdWxsbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3BlYywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZnVsbG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICAjIEVuc3VyZSBzdWNjZXNzaXZlIGNhbGxzIGJlaGF2ZSB0aGUgc2FtZS4KKyAgICAgICAgICAgIHNwZWNfYWdhaW4gPSBzZWxmLnV0aWwuZmluZF9zcGVjKGZ1bGxuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjX2FnYWluLCBzcGVjKQorCisgICAgZGVmIHRlc3RfZmluZF9yZWxhdGl2ZV9tb2R1bGUoc2VsZik6CisgICAgICAgIG5hbWUgPSAnc3BhbScKKyAgICAgICAgc3VibmFtZSA9ICdoYW0nCisgICAgICAgIHdpdGggdGVzdF91dGlsLnRlbXBfbW9kdWxlKG5hbWUsIHBrZz1UcnVlKSBhcyBwa2dfZGlyOgorICAgICAgICAgICAgZnVsbG5hbWUsIF8gPSB0ZXN0X3V0aWwuc3VibW9kdWxlKG5hbWUsIHN1Ym5hbWUsIHBrZ19kaXIpCisgICAgICAgICAgICByZWxuYW1lID0gJy4nICsgc3VibmFtZQorICAgICAgICAgICAgc3BlYyA9IHNlbGYudXRpbC5maW5kX3NwZWMocmVsbmFtZSwgbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc3BlYywgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZnVsbG5hbWUsIHNvcnRlZChzeXMubW9kdWxlcykpCisgICAgICAgICAgICAjIEVuc3VyZSBzdWNjZXNzaXZlIGNhbGxzIGJlaGF2ZSB0aGUgc2FtZS4KKyAgICAgICAgICAgIHNwZWNfYWdhaW4gPSBzZWxmLnV0aWwuZmluZF9zcGVjKGZ1bGxuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGVjX2FnYWluLCBzcGVjKQorCisgICAgZGVmIHRlc3RfZmluZF9yZWxhdGl2ZV9tb2R1bGVfbWlzc2luZ19wYWNrYWdlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3NwYW0nCisgICAgICAgIHN1Ym5hbWUgPSAnaGFtJworICAgICAgICB3aXRoIHRlc3RfdXRpbC50ZW1wX21vZHVsZShuYW1lLCBwa2c9VHJ1ZSkgYXMgcGtnX2RpcjoKKyAgICAgICAgICAgIGZ1bGxuYW1lLCBfID0gdGVzdF91dGlsLnN1Ym1vZHVsZShuYW1lLCBzdWJuYW1lLCBwa2dfZGlyKQorICAgICAgICAgICAgcmVsbmFtZSA9ICcuJyArIHN1Ym5hbWUKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLmZpbmRfc3BlYyhyZWxuYW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihuYW1lLCBzb3J0ZWQoc3lzLm1vZHVsZXMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihmdWxsbmFtZSwgc29ydGVkKHN5cy5tb2R1bGVzKSkKKworCitjbGFzcyBGcm96ZW5fRmluZFNwZWNUZXN0cyhGaW5kU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IGZyb3plbl9pbml0CisgICAgbWFjaGluZXJ5ID0gZnJvemVuX21hY2hpbmVyeQorICAgIHV0aWwgPSBmcm96ZW5fdXRpbAorCitjbGFzcyBTb3VyY2VfRmluZFNwZWNUZXN0cyhGaW5kU3BlY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgaW5pdCA9IHNvdXJjZV9pbml0CisgICAgbWFjaGluZXJ5ID0gc291cmNlX21hY2hpbmVyeQorICAgIHV0aWwgPSBzb3VyY2VfdXRpbAorCisKK2NsYXNzIE1hZ2ljTnVtYmVyVGVzdHM6CisKKyAgICBkZWYgdGVzdF9sZW5ndGgoc2VsZik6CisgICAgICAgICMgU2hvdWxkIGJlIDQgYnl0ZXMuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlbGYudXRpbC5NQUdJQ19OVU1CRVIpLCA0KQorCisgICAgZGVmIHRlc3RfaW5jb3Jwb3JhdGVzX3JuKHNlbGYpOgorICAgICAgICAjIFRoZSBtYWdpYyBudW1iZXIgdXNlcyBcclxuIHRvIGNvbWUgb3V0IHdyb25nIHdoZW4gc3BsaXR0aW5nIG9uIGxpbmVzLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi51dGlsLk1BR0lDX05VTUJFUi5lbmRzd2l0aChiJ1xyXG4nKSkKKworRnJvemVuX01hZ2ljTnVtYmVyVGVzdHMsIFNvdXJjZV9NYWdpY051bWJlclRlc3RzID0gdGVzdF91dGlsLnRlc3RfYm90aCgKKyAgICAgICAgTWFnaWNOdW1iZXJUZXN0cywgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKKworCitjbGFzcyBQRVAzMTQ3VGVzdHM6CisKKyAgICAiIiJUZXN0cyBvZiBQRVAgMzE0Ny1yZWxhdGVkIGZ1bmN0aW9uczogY2FjaGVfZnJvbV9zb3VyY2UgYW5kIHNvdXJjZV9mcm9tX2NhY2hlLiIiIgorCisgICAgdGFnID0gc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZworCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBpcyBub3QgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZyBub3QgYmUgTm9uZScpCisgICAgZGVmIHRlc3RfY2FjaGVfZnJvbV9zb3VyY2Uoc2VsZik6CisgICAgICAgICMgR2l2ZW4gdGhlIHBhdGggdG8gYSAucHkgZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvIGl0cyBQRVAgMzE0NworICAgICAgICAjIGRlZmluZWQgLnB5YyBmaWxlIChpLmUuIHVuZGVyIF9fcHljYWNoZV9fKS4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAncXV4LnB5JykKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXV4Lnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgVHJ1ZSksIGV4cGVjdCkKKworICAgIGRlZiB0ZXN0X2NhY2hlX2Zyb21fc291cmNlX25vX2NhY2hlX3RhZyhzZWxmKToKKyAgICAgICAgIyBObyBjYWNoZSB0YWcgbWVhbnMgTm90SW1wbGVtZW50ZWRFcnJvci4KKyAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihzeXMuaW1wbGVtZW50YXRpb24sICdjYWNoZV90YWcnLCBOb25lKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCd3aGF0ZXZlci5weScpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9ub19kb3Qoc2VsZik6CisgICAgICAgICMgRGlyZWN0b3J5IHdpdGggYSBkb3QsIGZpbGVuYW1lIHdpdGhvdXQgZG90LgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28uYmFyJywgJ2ZpbGUnKQorICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ2Zvby5iYXInLCAnX19weWNhY2hlX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGV7fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFRydWUpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9vcHRpbWl6ZWQoc2VsZik6CisgICAgICAgICMgR2l2ZW4gdGhlIHBhdGggdG8gYSAucHkgZmlsZSwgcmV0dXJuIHRoZSBwYXRoIHRvIGl0cyBQRVAgMzE0NworICAgICAgICAjIGRlZmluZWQgLnB5byBmaWxlIChpLmUuIHVuZGVyIF9fcHljYWNoZV9fKS4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignZm9vJywgJ2JhcicsICdiYXonLCAncXV4LnB5JykKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXV4Lnt9LnB5bycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgRmFsc2UpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9jd2Qoc2VsZik6CisgICAgICAgIHBhdGggPSAnZm9vLnB5JworICAgICAgICBleHBlY3QgPSBvcy5wYXRoLmpvaW4oJ19fcHljYWNoZV9fJywgJ2Zvby57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHBhdGgsIFRydWUpLCBleHBlY3QpCisKKyAgICBkZWYgdGVzdF9jYWNoZV9mcm9tX3NvdXJjZV9vdmVycmlkZShzZWxmKToKKyAgICAgICAgIyBXaGVuIGRlYnVnX292ZXJyaWRlIGlzIG5vdCBOb25lLCBpdCBjYW4gYmUgYW55IHRydWUtaXNoIG9yIGZhbHNlLWlzaAorICAgICAgICAjIHZhbHVlLgorICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2Jhei5weScpCisgICAgICAgIHBhcnRpYWxfZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Jhei57fS5weScuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgW10pLCBwYXJ0aWFsX2V4cGVjdCArICdvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UocGF0aCwgWzE3XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbF9leHBlY3QgKyAnYycpCisgICAgICAgICMgSG93ZXZlciBpZiB0aGUgYm9vbC1pc2huZXNzIGNhbid0IGJlIGRldGVybWluZWQsIHRoZSBleGNlcHRpb24KKyAgICAgICAgIyBwcm9wYWdhdGVzLgorICAgICAgICBjbGFzcyBCZWFyaXNoOgorICAgICAgICAgICAgZGVmIF9fYm9vbF9fKHNlbGYpOiByYWlzZSBSdW50aW1lRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgc2VsZi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCcvZm9vL2Jhci9iYXoucHknLCBCZWFyaXNoKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5zZXAgPT0gJ1xcJyBhbmQgb3MuYWx0c2VwID09ICcvJywKKyAgICAgICAgICAgICAgICAgICAgICd0ZXN0IG1lYW5pbmdmdWwgb25seSB3aGVyZSBvcy5hbHRzZXAgaXMgZGVmaW5lZCcpCisgICAgZGVmIHRlc3Rfc2VwX2FsdHNlcF9hbmRfc2VwX2NhY2hlX2Zyb21fc291cmNlKHNlbGYpOgorICAgICAgICAjIFdpbmRvd3MgcGF0aCBhbmQgUEVQIDMxNDcgd2hlcmUgc2VwIGlzIHJpZ2h0IG9mIGFsdHNlcC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgnXFxmb29cXGJhclxcYmF6L3F1eC5weScsIFRydWUpLAorICAgICAgICAgICAgJ1xcZm9vXFxiYXJcXGJhelxcX19weWNhY2hlX19cXHF1eC57fS5weWMnLmZvcm1hdChzZWxmLnRhZykpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIGlzIG5vdCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnIHRvIG5vdCBiZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ05vbmUnKQorICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlKHNlbGYpOgorICAgICAgICAjIEdpdmVuIHRoZSBwYXRoIHRvIGEgUEVQIDMxNDcgZGVmaW5lZCAucHljIGZpbGUsIHJldHVybiB0aGUgcGF0aCB0bworICAgICAgICAjIGl0cyBzb3VyY2UuICBUaGlzIHRlc3RzIHRoZSBnb29kIHBhdGguCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oJ2ZvbycsICdiYXInLCAnYmF6JywgJ19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAncXV4Lnt9LnB5YycuZm9ybWF0KHNlbGYudGFnKSkKKyAgICAgICAgZXhwZWN0ID0gb3MucGF0aC5qb2luKCdmb28nLCAnYmFyJywgJ2JheicsICdxdXgucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZShwYXRoKSwgZXhwZWN0KQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfbm9fY2FjaGVfdGFnKHNlbGYpOgorICAgICAgICAjIElmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgTm9uZSwgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvci4KKyAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbignYmxhaCcsICdfX3B5Y2FjaGVfXycsICd3aGF0ZXZlci5weWMnKQorICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKHN5cy5pbXBsZW1lbnRhdGlvbiwgJ2NhY2hlX3RhZycsIE5vbmUpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUocGF0aCkKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX2JhZF9wYXRoKHNlbGYpOgorICAgICAgICAjIFdoZW4gdGhlIHBhdGggdG8gYSBweWMgZmlsZSBpcyBub3QgaW4gUEVQIDMxNDcgZm9ybWF0LCBhIFZhbHVlRXJyb3IKKyAgICAgICAgIyBpcyByYWlzZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLCAnL2Zvby9iYXIvYmF6cXV4LnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV9ub19zbGFzaChzZWxmKToKKyAgICAgICAgIyBObyBzbGFzaGVzIGF0IGFsbCBpbiBwYXRoIC0+IFZhbHVlRXJyb3IKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoCisgICAgICAgICAgICBWYWx1ZUVycm9yLCBzZWxmLnV0aWwuc291cmNlX2Zyb21fY2FjaGUsICdmb28uY3B5dGhvbi0zMi5weWMnKQorCisgICAgZGVmIHRlc3Rfc291cmNlX2Zyb21fY2FjaGVfdG9vX2Zld19kb3RzKHNlbGYpOgorICAgICAgICAjIFRvbyBmZXcgZG90cyBpbiBmaW5hbCBwYXRoIGNvbXBvbmVudCAtPiBWYWx1ZUVycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAorICAgICAgICAgICAgVmFsdWVFcnJvciwgc2VsZi51dGlsLnNvdXJjZV9mcm9tX2NhY2hlLCAnX19weWNhY2hlX18vZm9vLnB5YycpCisKKyAgICBkZWYgdGVzdF9zb3VyY2VfZnJvbV9jYWNoZV90b29fbWFueV9kb3RzKHNlbGYpOgorICAgICAgICAjIFRvbyBtYW55IGRvdHMgaW4gZmluYWwgcGF0aCBjb21wb25lbnQgLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwKKyAgICAgICAgICAgICdfX3B5Y2FjaGVfXy9mb28uY3B5dGhvbi0zMi5mb28ucHljJykKKworICAgIGRlZiB0ZXN0X3NvdXJjZV9mcm9tX2NhY2hlX25vX19weWNhY2hlX18oc2VsZik6CisgICAgICAgICMgQW5vdGhlciBwcm9ibGVtIHdpdGggdGhlIHBhdGggLT4gVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygKKyAgICAgICAgICAgIFZhbHVlRXJyb3IsIHNlbGYudXRpbC5zb3VyY2VfZnJvbV9jYWNoZSwKKyAgICAgICAgICAgICcvZm9vL2Jhci9mb28uY3B5dGhvbi0zMi5mb28ucHljJykKKworRnJvemVuX1BFUDMxNDdUZXN0cywgU291cmNlX1BFUDMxNDdUZXN0cyA9IHRlc3RfdXRpbC50ZXN0X2JvdGgoCisgICAgICAgIFBFUDMxNDdUZXN0cywKKyAgICAgICAgdXRpbD1bZnJvemVuX3V0aWwsIHNvdXJjZV91dGlsXSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3dpbmRvd3MucHkgYi9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi90ZXN0X3dpbmRvd3MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTZiNGFkYwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3Rlc3Rfd2luZG93cy5weQpAQCAtMCwwICsxLDI5IEBACitmcm9tIC4gaW1wb3J0IHV0aWwKK2Zyb3plbl9tYWNoaW5lcnksIHNvdXJjZV9tYWNoaW5lcnkgPSB1dGlsLmltcG9ydF9pbXBvcnRsaWIoJ2ltcG9ydGxpYi5tYWNoaW5lcnknKQorCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnd2luJyksICdyZXF1aXJlcyBXaW5kb3dzJykKK2NsYXNzIFdpbmRvd3NSZWdpc3RyeUZpbmRlclRlc3RzOgorCisgICAgIyBYWFggTmVlZCBhIHRlc3QgdGhhdCBmaW5kcyB0aGUgc3BlYyB2aWEgdGhlIHJlZ2lzdHJ5LgorCisgICAgZGVmIHRlc3RfZmluZF9zcGVjX21pc3Npbmcoc2VsZik6CisgICAgICAgIHNwZWMgPSBzZWxmLm1hY2hpbmVyeS5XaW5kb3dzUmVnaXN0cnlGaW5kZXIuZmluZF9zcGVjKCdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzcGVjLCBOb25lKQorCisgICAgZGVmIHRlc3RfZmluZF9tb2R1bGVfbWlzc2luZyhzZWxmKToKKyAgICAgICAgbG9hZGVyID0gc2VsZi5tYWNoaW5lcnkuV2luZG93c1JlZ2lzdHJ5RmluZGVyLmZpbmRfbW9kdWxlKCdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhsb2FkZXIsIE5vbmUpCisKKworY2xhc3MgRnJvemVuX1dpbmRvd3NSZWdpc3RyeUZpbmRlclRlc3RzKFdpbmRvd3NSZWdpc3RyeUZpbmRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYWNoaW5lcnkgPSBmcm96ZW5fbWFjaGluZXJ5CisKKworY2xhc3MgU291cmNlX1dpbmRvd3NSZWdpc3RyeUZpbmRlclRlc3RzKFdpbmRvd3NSZWdpc3RyeUZpbmRlclRlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYWNoaW5lcnkgPSBzb3VyY2VfbWFjaGluZXJ5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5IGIvTGliL3Rlc3QvdGVzdF9pbXBvcnRsaWIvdXRpbC5weQppbmRleCBlZjMyZjdkLi44ODVjZWMzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2ltcG9ydGxpYi91dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW1wb3J0bGliL3V0aWwucHkKQEAgLTEsOSArMSwzMSBAQAogZnJvbSBjb250ZXh0bGliIGltcG9ydCBjb250ZXh0bWFuYWdlcgotaW1wb3J0IGltcAorZnJvbSBpbXBvcnRsaWIgaW1wb3J0IHV0aWwsIGludmFsaWRhdGVfY2FjaGVzCiBpbXBvcnQgb3MucGF0aAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcworCisKK2RlZiBpbXBvcnRfaW1wb3J0bGliKG1vZHVsZV9uYW1lKToKKyAgICAiIiJJbXBvcnQgYSBtb2R1bGUgZnJvbSBpbXBvcnRsaWIgYm90aCB3LyBhbmQgdy9vIF9mcm96ZW5faW1wb3J0bGliLiIiIgorICAgIGZyZXNoID0gKCdpbXBvcnRsaWInLCkgaWYgJy4nIGluIG1vZHVsZV9uYW1lIGVsc2UgKCkKKyAgICBmcm96ZW4gPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUobW9kdWxlX25hbWUpCisgICAgc291cmNlID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKG1vZHVsZV9uYW1lLCBmcmVzaD1mcmVzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tlZD0oJ19mcm96ZW5faW1wb3J0bGliJywpKQorICAgIHJldHVybiBmcm96ZW4sIHNvdXJjZQorCisKK2RlZiB0ZXN0X2JvdGgodGVzdF9jbGFzcywgKiprd2FyZ3MpOgorICAgIGZyb3plbl90ZXN0cyA9IHR5cGVzLm5ld19jbGFzcygnRnJvemVuXycrdGVzdF9jbGFzcy5fX25hbWVfXywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRlc3RfY2xhc3MsIHVuaXR0ZXN0LlRlc3RDYXNlKSkKKyAgICBzb3VyY2VfdGVzdHMgPSB0eXBlcy5uZXdfY2xhc3MoJ1NvdXJjZV8nK3Rlc3RfY2xhc3MuX19uYW1lX18sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0ZXN0X2NsYXNzLCB1bml0dGVzdC5UZXN0Q2FzZSkpCisgICAgZnJvemVuX3Rlc3RzLl9fbW9kdWxlX18gPSBzb3VyY2VfdGVzdHMuX19tb2R1bGVfXyA9IHRlc3RfY2xhc3MuX19tb2R1bGVfXworICAgIGZvciBhdHRyLCAoZnJvemVuX3ZhbHVlLCBzb3VyY2VfdmFsdWUpIGluIGt3YXJncy5pdGVtcygpOgorICAgICAgICBzZXRhdHRyKGZyb3plbl90ZXN0cywgYXR0ciwgZnJvemVuX3ZhbHVlKQorICAgICAgICBzZXRhdHRyKHNvdXJjZV90ZXN0cywgYXR0ciwgc291cmNlX3ZhbHVlKQorICAgIHJldHVybiBmcm96ZW5fdGVzdHMsIHNvdXJjZV90ZXN0cwogCiAKIENBU0VfSU5TRU5TSVRJVkVfRlMgPSBUcnVlCkBAIC0yNCw2ICs0NiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXF1aXJlcyBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZXN5c3RlbSIpKHRlc3QpCiAKIAorZGVmIHN1Ym1vZHVsZShwYXJlbnQsIG5hbWUsIHBrZ19kaXIsIGNvbnRlbnQ9JycpOgorICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGtnX2RpciwgbmFtZSArICcucHknKQorICAgIHdpdGggb3BlbihwYXRoLCAndycpIGFzIHN1YmZpbGU6CisgICAgICAgIHN1YmZpbGUud3JpdGUoY29udGVudCkKKyAgICByZXR1cm4gJ3t9Lnt9Jy5mb3JtYXQocGFyZW50LCBuYW1lKSwgcGF0aAorCisKIEBjb250ZXh0bWFuYWdlcgogZGVmIHVuY2FjaGUoKm5hbWVzKToKICAgICAiIiJVbmNhY2hlIGEgbW9kdWxlIGZyb20gc3lzLm1vZHVsZXMuCkBAIC00OSw2ICs3OCwzMSBAQAogICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIAorCitAY29udGV4dG1hbmFnZXIKK2RlZiB0ZW1wX21vZHVsZShuYW1lLCBjb250ZW50PScnLCAqLCBwa2c9RmFsc2UpOgorICAgIGNvbmZsaWN0cyA9IFtuIGZvciBuIGluIHN5cy5tb2R1bGVzIGlmIG4ucGFydGl0aW9uKCcuJylbMF0gPT0gbmFtZV0KKyAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoTm9uZSkgYXMgY3dkOgorICAgICAgICB3aXRoIHVuY2FjaGUobmFtZSwgKmNvbmZsaWN0cyk6CisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuRGlyc09uU3lzUGF0aChjd2QpOgorICAgICAgICAgICAgICAgIGludmFsaWRhdGVfY2FjaGVzKCkKKworICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gb3MucGF0aC5qb2luKGN3ZCwgbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBwa2c6CisgICAgICAgICAgICAgICAgICAgIG1vZHBhdGggPSBvcy5wYXRoLmpvaW4obG9jYXRpb24sICdfX2luaXRfXy5weScpCisgICAgICAgICAgICAgICAgICAgIG9zLm1rZGlyKG5hbWUpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbW9kcGF0aCA9IGxvY2F0aW9uICsgJy5weScKKyAgICAgICAgICAgICAgICAgICAgaWYgY29udGVudCBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIG1vZHVsZSBmaWxlIGdldHMgY3JlYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQgPSAnJworICAgICAgICAgICAgICAgIGlmIGNvbnRlbnQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgICMgbm90IGEgbmFtZXNwYWNlIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG1vZHBhdGgsICd3JykgYXMgbW9kZmlsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGZpbGUud3JpdGUoY29udGVudCkKKyAgICAgICAgICAgICAgICB5aWVsZCBsb2NhdGlvbgorCisKIEBjb250ZXh0bWFuYWdlcgogZGVmIGltcG9ydF9zdGF0ZSgqKmt3YXJncyk6CiAgICAgIiIiQ29udGV4dCBtYW5hZ2VyIHRvIG1hbmFnZSB0aGUgdmFyaW91cyBpbXBvcnRlcnMgYW5kIHN0b3JlZCBzdGF0ZSBpbiB0aGUKQEAgLTgwLDkgKzEzNCw5IEBACiAgICAgICAgICAgICBzZXRhdHRyKHN5cywgYXR0ciwgdmFsdWUpCiAKIAotY2xhc3MgbW9ja19tb2R1bGVzOgorY2xhc3MgX0ltcG9ydGVyTW9jazoKIAotICAgICIiIkEgbW9jayBpbXBvcnRlci9sb2FkZXIuIiIiCisgICAgIiIiQmFzZSBjbGFzcyB0byBoZWxwIHdpdGggY3JlYXRpbmcgaW1wb3J0ZXIgbW9ja3MuIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgKm5hbWVzLCBtb2R1bGVfY29kZT17fSk6CiAgICAgICAgIHNlbGYubW9kdWxlcyA9IHt9CkBAIC05OCw3ICsxNTIsNyBAQAogICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBuYW1lLnJzcGxpdCgnLicsIDEpWzBdCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHBhY2thZ2UgPSBpbXBvcnRfbmFtZQotICAgICAgICAgICAgbW9kdWxlID0gaW1wLm5ld19tb2R1bGUoaW1wb3J0X25hbWUpCisgICAgICAgICAgICBtb2R1bGUgPSB0eXBlcy5Nb2R1bGVUeXBlKGltcG9ydF9uYW1lKQogICAgICAgICAgICAgbW9kdWxlLl9fbG9hZGVyX18gPSBzZWxmCiAgICAgICAgICAgICBtb2R1bGUuX19maWxlX18gPSAnPG1vY2sgX19maWxlX18+JwogICAgICAgICAgICAgbW9kdWxlLl9fcGFja2FnZV9fID0gcGFja2FnZQpAQCAtMTEyLDYgKzE2NiwxOSBAQAogICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBuYW1lKToKICAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlc1tuYW1lXQogCisgICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKKyAgICAgICAgc2VsZi5fdW5jYWNoZSA9IHVuY2FjaGUoKnNlbGYubW9kdWxlcy5rZXlzKCkpCisgICAgICAgIHNlbGYuX3VuY2FjaGUuX19lbnRlcl9fKCkKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjX2luZm8pOgorICAgICAgICBzZWxmLl91bmNhY2hlLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpCisKKworY2xhc3MgbW9ja19tb2R1bGVzKF9JbXBvcnRlck1vY2spOgorCisgICAgIiIiSW1wb3J0ZXIgbW9jayB1c2luZyBQRVAgMzAyIEFQSXMuIiIiCisKICAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSk6CiAgICAgICAgIGlmIGZ1bGxuYW1lIG5vdCBpbiBzZWxmLm1vZHVsZXM6CiAgICAgICAgICAgICByZXR1cm4gTm9uZQpAQCAtMTMxLDEwICsxOTgsMjggQEAKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIHJldHVybiBzZWxmLm1vZHVsZXNbZnVsbG5hbWVdCiAKLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICBzZWxmLl91bmNhY2hlID0gdW5jYWNoZSgqc2VsZi5tb2R1bGVzLmtleXMoKSkKLSAgICAgICAgc2VsZi5fdW5jYWNoZS5fX2VudGVyX18oKQotICAgICAgICByZXR1cm4gc2VsZgorY2xhc3MgbW9ja19zcGVjKF9JbXBvcnRlck1vY2spOgogCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICpleGNfaW5mbyk6Ci0gICAgICAgIHNlbGYuX3VuY2FjaGUuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSkKKyAgICAiIiJJbXBvcnRlciBtb2NrIHVzaW5nIFBFUCA0NTEgQVBJcy4iIiIKKworICAgIGRlZiBmaW5kX3NwZWMoc2VsZiwgZnVsbG5hbWUsIHBhdGg9Tm9uZSwgcGFyZW50PU5vbmUpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLm1vZHVsZXNbZnVsbG5hbWVdCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGlzX3BhY2thZ2UgPSBoYXNhdHRyKG1vZHVsZSwgJ19fcGF0aF9fJykKKyAgICAgICAgc3BlYyA9IHV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oCisgICAgICAgICAgICAgICAgZnVsbG5hbWUsIG1vZHVsZS5fX2ZpbGVfXywgbG9hZGVyPXNlbGYsCisgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9Z2V0YXR0cihtb2R1bGUsICdfX3BhdGhfXycsIE5vbmUpKQorICAgICAgICByZXR1cm4gc3BlYworCisgICAgZGVmIGNyZWF0ZV9tb2R1bGUoc2VsZiwgc3BlYyk6CisgICAgICAgIGlmIHNwZWMubmFtZSBub3QgaW4gc2VsZi5tb2R1bGVzOgorICAgICAgICAgICAgcmFpc2UgSW1wb3J0RXJyb3IKKyAgICAgICAgcmV0dXJuIHNlbGYubW9kdWxlc1tzcGVjLm5hbWVdCisKKyAgICBkZWYgZXhlY19tb2R1bGUoc2VsZiwgbW9kdWxlKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5tb2R1bGVfY29kZVttb2R1bGUuX19zcGVjX18ubmFtZV0oKQorICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2luZGV4LnB5IGIvTGliL3Rlc3QvdGVzdF9pbmRleC5weQppbmRleCA4Nzg1NzExLi5hMmFjMzIxIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2luZGV4LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW5kZXgucHkKQEAgLTgxLDcgKzgxLDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgICAgIGJhZF9pbnQgPSBCYWRJbnQoKQotICAgICAgICBuID0gb3BlcmF0b3IuaW5kZXgoYmFkX2ludCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBuID0gb3BlcmF0b3IuaW5kZXgoYmFkX2ludCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAxKQogCiAgICAgICAgIGJhZF9pbnQgPSBCYWRJbnQyKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weSBiL0xpYi90ZXN0L3Rlc3RfaW5zcGVjdC5weQppbmRleCA1Y2JlYzliLi4xYTEyNGI1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2luc3BlY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pbnNwZWN0LnB5CkBAIC0xLDIyICsxLDM1IEBACitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGluc3BlY3QKK2ltcG9ydCBpbworaW1wb3J0IGxpbmVjYWNoZQoraW1wb3J0IG9zCitmcm9tIG9zLnBhdGggaW1wb3J0IG5vcm1jYXNlCitpbXBvcnQgX3BpY2tsZQogaW1wb3J0IHJlCitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdHlwZXMKK2ltcG9ydCB0ZXh0d3JhcAoraW1wb3J0IHVuaWNvZGVkYXRhCiBpbXBvcnQgdW5pdHRlc3QKLWltcG9ydCBpbnNwZWN0Ci1pbXBvcnQgbGluZWNhY2hlCi1pbXBvcnQgZGF0ZXRpbWUKLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IG9zCi1pbXBvcnQgc2h1dGlsCi1mcm9tIG9zLnBhdGggaW1wb3J0IG5vcm1jYXNlCitpbXBvcnQgdW5pdHRlc3QubW9jawogCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIERpcnNPblN5c1BhdGgKK3RyeToKKyAgICBmcm9tIGNvbmN1cnJlbnQuZnV0dXJlcyBpbXBvcnQgVGhyZWFkUG9vbEV4ZWN1dG9yCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgVGhyZWFkUG9vbEV4ZWN1dG9yID0gTm9uZQogCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIERpcnNPblN5c1BhdGgsIGNweXRob25fb25seQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IE1JU1NJTkdfQ19ET0NTVFJJTkdTCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCiBmcm9tIHRlc3QgaW1wb3J0IGluc3BlY3RfZm9kZGVyIGFzIG1vZAogZnJvbSB0ZXN0IGltcG9ydCBpbnNwZWN0X2ZvZGRlcjIgYXMgbW9kMgogCi0jIEMgbW9kdWxlIGZvciB0ZXN0X2ZpbmRzb3VyY2VfYmluYXJ5Ci1pbXBvcnQgdW5pY29kZWRhdGEKK2Zyb20gdGVzdC50ZXN0X2ltcG9ydCBpbXBvcnQgX3JlYWR5X3RvX2ltcG9ydAorCiAKICMgRnVuY3Rpb25zIHRlc3RlZCBpbiB0aGlzIHN1aXRlOgogIyBpc21vZHVsZSwgaXNjbGFzcywgaXNtZXRob2QsIGlzZnVuY3Rpb24sIGlzdHJhY2ViYWNrLCBpc2ZyYW1lLCBpc2NvZGUsCkBAIC02Myw2ICs3NiwxMCBAQAogICAgIGZvciBpIGluIHJhbmdlKDIpOgogICAgICAgICB5aWVsZCBpCiAKK2NsYXNzIEVxdWFsc1RvQWxsOgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCiBjbGFzcyBUZXN0UHJlZGljYXRlcyhJc1Rlc3RCYXNlKToKICAgICBkZWYgdGVzdF9zaXh0ZWVuKHNlbGYpOgogICAgICAgICBjb3VudCA9IGxlbihbeCBmb3IgeCBpbiBkaXIoaW5zcGVjdCkgaWYgeC5zdGFydHN3aXRoKCdpcycpXSkKQEAgLTEyMCw3ICsxMzcsNiBAQAogICAgIGRlZiB0ZXN0X2dldF9zbG90X21lbWJlcnMoc2VsZik6CiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIF9fc2xvdHNfXyA9ICgiYSIsICJiIikKLQogICAgICAgICB4ID0gQygpCiAgICAgICAgIHguYSA9IDQyCiAgICAgICAgIG1lbWJlcnMgPSBkaWN0KGluc3BlY3QuZ2V0bWVtYmVycyh4KSkKQEAgLTMxMCw2ICszMjYsMTYgQEAKICAgICBkZWYgdGVzdF9nZXRmaWxlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0ZmlsZShtb2QuU3R1cGlkR2l0KSwgbW9kLl9fZmlsZV9fKQogCisgICAgZGVmIHRlc3RfZ2V0ZmlsZV9jbGFzc193aXRob3V0X21vZHVsZShzZWxmKToKKyAgICAgICAgY2xhc3MgQ00odHlwZSk6CisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX21vZHVsZV9fKGNscyk6CisgICAgICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IKKyAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9Q00pOgorICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpbnNwZWN0LmdldGZpbGUoQykKKwogICAgIGRlZiB0ZXN0X2dldG1vZHVsZV9yZWN1cnNpb24oc2VsZik6CiAgICAgICAgIGZyb20gdHlwZXMgaW1wb3J0IE1vZHVsZVR5cGUKICAgICAgICAgbmFtZSA9ICdfX2luc3BlY3RfZHVtbXknCkBAIC00MTMsMTkgKzQzOSwyMCBAQAogICAgIGRlZiB0ZXN0X21ldGhvZF9pbl9keW5hbWljX2NsYXNzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFNvdXJjZUVxdWFsKG1vZDIubWV0aG9kX2luX2R5bmFtaWNfY2xhc3MsIDk1LCA5NykKIAotICAgIEB1bml0dGVzdC5za2lwSWYoCi0gICAgICAgIG5vdCBoYXNhdHRyKHVuaWNvZGVkYXRhLCAnX19maWxlX18nKSBvcgotICAgICAgICAgICAgdW5pY29kZWRhdGEuX19maWxlX19bLTQ6XSBpbiAoIi5weWMiLCAiLnB5byIpLAotICAgICAgICAidW5pY29kZWRhdGEgaXMgbm90IGFuIGV4dGVybmFsIGJpbmFyeSBtb2R1bGUiKQorICAgICMgVGhpcyBzaG91bGQgbm90IHNraXAgZm9yIENQeXRob24sIGJ1dCBtaWdodCBvbiBhIHJlcGFja2FnZWQgcHl0aG9uIHdoZXJlCisgICAgIyB1bmljb2RlZGF0YSBpcyBub3QgYW4gZXh0ZXJuYWwgbW9kdWxlLCBvciBvbiBweXB5LgorICAgIEB1bml0dGVzdC5za2lwSWYobm90IGhhc2F0dHIodW5pY29kZWRhdGEsICdfX2ZpbGVfXycpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlZGF0YS5fX2ZpbGVfXy5lbmRzd2l0aCgnLnB5JyksCisgICAgICAgICAgICAgICAgICAgICAidW5pY29kZWRhdGEgaXMgbm90IGFuIGV4dGVybmFsIGJpbmFyeSBtb2R1bGUiKQogICAgIGRlZiB0ZXN0X2ZpbmRzb3VyY2VfYmluYXJ5KHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgdW5pY29kZWRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgdW5pY29kZWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCB1bmljb2RlZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgaW5zcGVjdC5maW5kc291cmNlLCB1bmljb2RlZGF0YSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRzb3VyY2VfY29kZV9pbl9saW5lY2FjaGUoc2VsZik6CiAgICAgICAgIGxpbmVzID0gWyJ4PTEiXQogICAgICAgICBjbyA9IGNvbXBpbGUobGluZXNbMF0sICJfZHluYW1pY2FsbHlfY3JlYXRlZF9maWxlIiwgImV4ZWMiKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmZpbmRzb3VyY2UsIGNvKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBpbnNwZWN0LmdldHNvdXJjZSwgY28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZmluZHNvdXJjZSwgY28pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGluc3BlY3QuZ2V0c291cmNlLCBjbykKICAgICAgICAgbGluZWNhY2hlLmNhY2hlW2NvLmNvX2ZpbGVuYW1lXSA9ICgxLCBOb25lLCBsaW5lcywgY28uY29fZmlsZW5hbWUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5maW5kc291cmNlKGNvKSwgKGxpbmVzLDApKQpAQCAtNDYzLDEzICs0OTAsMTMgQEAKICAgICBBIGJyb2tlbiBkYXRhIGRlc2NyaXB0b3IuIFNlZSBidWcgIzE3ODUuCiAgICAgIiIiCiAgICAgZGVmIF9fZ2V0X18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldF9fIGRhdGEgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIGRhdGEgZGVzY3JpcHRvciIpCiAKICAgICBkZWYgX19zZXRfXygqYXJncyk6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgogCiAgICAgZGVmIF9fZ2V0YXR0cl9fKCphcmdzKToKLSAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoInNob3VsZCBub3QgX19nZXRhdHRyX18gZGF0YSBkZXNjcmlwdG9ycyIpCisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yKCJicm9rZW4gZGF0YSBkZXNjcmlwdG9yIikKIAogCiBjbGFzcyBfQnJva2VuTWV0aG9kRGVzY3JpcHRvcihvYmplY3QpOgpAQCAtNDc3LDEwICs1MDQsMTAgQEAKICAgICBBIGJyb2tlbiBtZXRob2QgZGVzY3JpcHRvci4gU2VlIGJ1ZyAjMTc4NS4KICAgICAiIiIKICAgICBkZWYgX19nZXRfXygqYXJncyk6Ci0gICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKCJzaG91bGQgbm90IF9fZ2V0X18gbWV0aG9kIGRlc2NyaXB0b3JzIikKKyAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImJyb2tlbiBtZXRob2QgZGVzY3JpcHRvciIpCiAKICAgICBkZWYgX19nZXRhdHRyX18oKmFyZ3MpOgotICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigic2hvdWxkIG5vdCBfX2dldGF0dHJfXyBtZXRob2QgZGVzY3JpcHRvcnMiKQorICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiYnJva2VuIG1ldGhvZCBkZXNjcmlwdG9yIikKIAogCiAjIEhlbHBlciBmb3IgdGVzdGluZyBjbGFzc2lmeV9jbGFzc19hdHRycy4KQEAgLTU1OSw2ICs1ODYsOTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd29ubHlhcmdzX2U9WydhcmcnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZWQ9JygqLCBhcmcpJykKIAorICAgIGRlZiB0ZXN0X2FyZ3NwZWNfYXBpX2lnbm9yZXNfd3JhcHBlZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyMDY4NDogbG93IGxldmVsIGludHJvc3BlY3Rpb24gQVBJIG11c3QgaWdub3JlIF9fd3JhcHBlZF9fCisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMobW9kLnNwYW0pCisgICAgICAgIGRlZiBoYW0oeCwgeSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgICMgQmFzaWMgY2hlY2sKKyAgICAgICAgc2VsZi5hc3NlcnRBcmdTcGVjRXF1YWxzKGhhbSwgWyd4JywgJ3knXSwgZm9ybWF0dGVkPScoeCwgeSknKQorICAgICAgICBzZWxmLmFzc2VydEZ1bGxBcmdTcGVjRXF1YWxzKGhhbSwgWyd4JywgJ3knXSwgZm9ybWF0dGVkPScoeCwgeSknKQorICAgICAgICBzZWxmLmFzc2VydEZ1bGxBcmdTcGVjRXF1YWxzKGZ1bmN0b29scy5wYXJ0aWFsKGhhbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyd4JywgJ3knXSwgZm9ybWF0dGVkPScoeCwgeSknKQorICAgICAgICAjIE90aGVyIHZhcmlhbnRzCisgICAgICAgIGRlZiBjaGVja19tZXRob2QoZik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEFyZ1NwZWNFcXVhbHMoZiwgWydzZWxmJywgJ3gnLCAneSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlZD0nKHNlbGYsIHgsIHkpJykKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMobW9kLnNwYW0pCisgICAgICAgICAgICBkZWYgaGFtKHNlbGYsIHgsIHkpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHBoYW0gPSBmdW5jdG9vbHMucGFydGlhbG1ldGhvZChoYW0pCisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKG1vZC5zcGFtKQorICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsIHgsIHkpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2hlY2tfbWV0aG9kKEMoKSkKKyAgICAgICAgY2hlY2tfbWV0aG9kKEMuaGFtKQorICAgICAgICBjaGVja19tZXRob2QoQygpLmhhbSkKKyAgICAgICAgY2hlY2tfbWV0aG9kKEMucGhhbSkKKyAgICAgICAgY2hlY2tfbWV0aG9kKEMoKS5waGFtKQorCisgICAgICAgIGNsYXNzIENfbmV3OgorICAgICAgICAgICAgQGZ1bmN0b29scy53cmFwcyhtb2Quc3BhbSkKKyAgICAgICAgICAgIGRlZiBfX25ld19fKHNlbGYsIHgsIHkpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2hlY2tfbWV0aG9kKENfbmV3KQorCisgICAgICAgIGNsYXNzIENfaW5pdDoKKyAgICAgICAgICAgIEBmdW5jdG9vbHMud3JhcHMobW9kLnNwYW0pCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgeCwgeSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjaGVja19tZXRob2QoQ19pbml0KQorCisgICAgZGVmIHRlc3RfZ2V0ZnVsbGFyZ3NwZWNfc2lnbmF0dXJlX2F0dHIoc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNwYW1fcGFyYW0gPSBpbnNwZWN0LlBhcmFtZXRlcignc3BhbScsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgdGVzdC5fX3NpZ25hdHVyZV9fID0gaW5zcGVjdC5TaWduYXR1cmUocGFyYW1ldGVycz0oc3BhbV9wYXJhbSwpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RnVsbEFyZ1NwZWNFcXVhbHModGVzdCwgYXJnc19lPVsnc3BhbSddLCBmb3JtYXR0ZWQ9JyhzcGFtKScpCisKKyAgICBkZWYgdGVzdF9nZXRmdWxsYXJnc3BlY19zaWduYXR1cmVfYW5ub3Moc2VsZik6CisgICAgICAgIGRlZiB0ZXN0KGE6J3NwYW0nKSAtPiAnaGFtJzogcGFzcworICAgICAgICBzcGVjID0gaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyh0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QuX19hbm5vdGF0aW9uc19fLCBzcGVjLmFubm90YXRpb25zKQorCisgICAgICAgIGRlZiB0ZXN0KCk6IHBhc3MKKyAgICAgICAgc3BlYyA9IGluc3BlY3QuZ2V0ZnVsbGFyZ3NwZWModGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0Ll9fYW5ub3RhdGlvbnNfXywgc3BlYy5hbm5vdGF0aW9ucykKKworICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9nZXRmdWxsYXJnc3BlY19idWlsdGluX21ldGhvZHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RnVsbEFyZ1NwZWNFcXVhbHMoX3BpY2tsZS5QaWNrbGVyLmR1bXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc19lPVsnc2VsZicsICdvYmonXSwgZm9ybWF0dGVkPScoc2VsZiwgb2JqKScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGdWxsQXJnU3BlY0VxdWFscyhfcGlja2xlLlBpY2tsZXIoaW8uQnl0ZXNJTygpKS5kdW1wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3NfZT1bJ3NlbGYnLCAnb2JqJ10sIGZvcm1hdHRlZD0nKHNlbGYsIG9iaiknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RnVsbEFyZ1NwZWNFcXVhbHMoCisgICAgICAgICAgICAgb3Muc3RhdCwKKyAgICAgICAgICAgICBhcmdzX2U9WydwYXRoJ10sCisgICAgICAgICAgICAga3dvbmx5YXJnc19lPVsnZGlyX2ZkJywgJ2ZvbGxvd19zeW1saW5rcyddLAorICAgICAgICAgICAgIGt3b25seWRlZmF1bHRzX2U9eydkaXJfZmQnOiBOb25lLCAnZm9sbG93X3N5bWxpbmtzJzogVHJ1ZX0sCisgICAgICAgICAgICAgZm9ybWF0dGVkPScocGF0aCwgKiwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKScpCisKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X2dldGZ1bGxhZ3JzcGVjX2J1aWx0aW5fZnVuYyhzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICBidWlsdGluID0gX3Rlc3RjYXBpLmRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzCisgICAgICAgIHNwZWMgPSBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKGJ1aWx0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BlYy5kZWZhdWx0c1swXSwgJ2F2b2NhZG8nKQorCisgICAgQGNweXRob25fb25seQorICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9nZXRmdWxsYWdyc3BlY19idWlsdGluX2Z1bmNfbm9fc2lnbmF0dXJlKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIGJ1aWx0aW4gPSBfdGVzdGNhcGkuZG9jc3RyaW5nX25vX3NpZ25hdHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpbnNwZWN0LmdldGZ1bGxhcmdzcGVjKGJ1aWx0aW4pCiAKICAgICBkZWYgdGVzdF9nZXRhcmdzcGVjX21ldGhvZChzZWxmKToKICAgICAgICAgY2xhc3MgQShvYmplY3QpOgpAQCAtNTg4LDYgKzcwNSwxMCBAQAogICAgICAgICAgICAgbWQgPSBfQnJva2VuTWV0aG9kRGVzY3JpcHRvcigpCiAKICAgICAgICAgYXR0cnMgPSBhdHRyc193b19vYmpzKEEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ19fbmV3X18nLCAnbWV0aG9kJywgb2JqZWN0KSwgYXR0cnMsICdtaXNzaW5nIF9fbmV3X18nKQorICAgICAgICBzZWxmLmFzc2VydEluKCgnX19pbml0X18nLCAnbWV0aG9kJywgb2JqZWN0KSwgYXR0cnMsICdtaXNzaW5nIF9faW5pdF9fJykKKwogICAgICAgICBzZWxmLmFzc2VydEluKCgncycsICdzdGF0aWMgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBzdGF0aWMgbWV0aG9kJykKICAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2MnLCAnY2xhc3MgbWV0aG9kJywgQSksIGF0dHJzLCAnbWlzc2luZyBjbGFzcyBtZXRob2QnKQogICAgICAgICBzZWxmLmFzc2VydEluKCgncCcsICdwcm9wZXJ0eScsIEEpLCBhdHRycywgJ21pc3NpbmcgcHJvcGVydHknKQpAQCAtNjUwLDYgKzc3MSwxMDMgQEAKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoYnVpbHRpbiwgdHlwZSk6CiAgICAgICAgICAgICAgICAgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhidWlsdGluKQogCisgICAgZGVmIHRlc3RfY2xhc3NpZnlfRHluYW1pY0NsYXNzQXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2hhbSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc3BhbScKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBWQShtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgaGFtKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnZWdncycKKyAgICAgICAgc2hvdWxkX2ZpbmRfZGNhID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2hhbScsICdkYXRhJywgVkEsIFZBLl9fZGljdF9fWydoYW0nXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZF9kY2EsIGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnMoVkEpKQorICAgICAgICBzaG91bGRfZmluZF9nYSA9IGluc3BlY3QuQXR0cmlidXRlKCdoYW0nLCAnZGF0YScsIE1ldGEsICdzcGFtJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzaG91bGRfZmluZF9nYSwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhWQSkpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9vdmVycmlkZXNfYm9vbChzZWxmKToKKyAgICAgICAgY2xhc3MgTm9Cb29sKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Cb29sKCkKKworICAgICAgICAgICAgZGVmIF9fYm9vbF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICJUaGlzIG9iamVjdCBkb2VzIG5vdCBzcGVjaWZ5IGEgYm9vbGVhbiB2YWx1ZSIpCisKKyAgICAgICAgY2xhc3MgSGFzTkIob2JqZWN0KToKKyAgICAgICAgICAgIGRkID0gTm9Cb29sKCkKKworICAgICAgICBzaG91bGRfZmluZF9hdHRyID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ2RkJywgJ2RhdGEnLCBIYXNOQiwgSGFzTkIuZGQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2hvdWxkX2ZpbmRfYXR0ciwgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhIYXNOQikpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9tZXRhY2xhc3NfY2xhc3NfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZmlzaCA9ICdzbGFwJworICAgICAgICAgICAgZGVmIF9fZGlyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAnZmlzaCddCisgICAgICAgIGNsYXNzIENsYXNzKG1ldGFjbGFzcz1NZXRhKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2hvdWxkX2ZpbmQgPSBpbnNwZWN0LkF0dHJpYnV0ZSgnZmlzaCcsICdkYXRhJywgTWV0YSwgJ3NsYXAnKQorICAgICAgICBzZWxmLmFzc2VydEluKHNob3VsZF9maW5kLCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKENsYXNzKSkKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ0JPT00nXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nQk9PTSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiA0MgorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cihuYW1lKQorICAgICAgICBjbGFzcyBDbGFzcyhtZXRhY2xhc3M9TWV0YSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNob3VsZF9maW5kID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ0JPT00nLCAnZGF0YScsIE1ldGEsIDQyKQorICAgICAgICBzZWxmLmFzc2VydEluKHNob3VsZF9maW5kLCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKENsYXNzKSkKKworICAgIGRlZiB0ZXN0X2NsYXNzaWZ5X1ZpcnR1YWxBdHRyaWJ1dGVfbXVsdGlfY2xhc3NlcyhzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YTEodHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX21vZHVsZV9fJywgJ19fbmFtZV9fJywgJ29uZSddCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSdvbmUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMQorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIE1ldGEyKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0d28nXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0ndHdvJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMyhNZXRhMSwgTWV0YTIpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gbGlzdChzb3J0ZWQoc2V0KFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndGhyZWUnXSArCisgICAgICAgICAgICAgICAgICAgIE1ldGExLl9fZGlyX18oY2xzKSArIE1ldGEyLl9fZGlyX18oY2xzKSkpKQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0ndGhyZWUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMworICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGNsYXNzIENsYXNzMShtZXRhY2xhc3M9TWV0YTEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBDbGFzczIoQ2xhc3MxLCBtZXRhY2xhc3M9TWV0YTMpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHNob3VsZF9maW5kMSA9IGluc3BlY3QuQXR0cmlidXRlKCdvbmUnLCAnZGF0YScsIE1ldGExLCAxKQorICAgICAgICBzaG91bGRfZmluZDIgPSBpbnNwZWN0LkF0dHJpYnV0ZSgndHdvJywgJ2RhdGEnLCBNZXRhMiwgMikKKyAgICAgICAgc2hvdWxkX2ZpbmQzID0gaW5zcGVjdC5BdHRyaWJ1dGUoJ3RocmVlJywgJ2RhdGEnLCBNZXRhMywgMykKKyAgICAgICAgY2NhID0gaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycyhDbGFzczIpCisgICAgICAgIGZvciBzZiBpbiAoc2hvdWxkX2ZpbmQxLCBzaG91bGRfZmluZDIsIHNob3VsZF9maW5kMyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNmLCBjY2EpCisKKyAgICBkZWYgdGVzdF9jbGFzc2lmeV9jbGFzc19hdHRyc193aXRoX2J1Z2d5X2RpcihzZWxmKToKKyAgICAgICAgY2xhc3MgTSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbmFtZV9fJywgJ21pc3NpbmcnXQorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgYXR0cnMgPSBbYVswXSBmb3IgYSBpbiBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKEMpXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtaXNzaW5nJywgYXR0cnMpCisKICAgICBkZWYgdGVzdF9nZXRtZW1iZXJzX2Rlc2NyaXB0b3JzKHNlbGYpOgogICAgICAgICBjbGFzcyBBKG9iamVjdCk6CiAgICAgICAgICAgICBkZCA9IF9Ccm9rZW5EYXRhRGVzY3JpcHRvcigpCkBAIC02OTMsNiArOTExLDI4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oKCdmJywgYi5mKSwgaW5zcGVjdC5nZXRtZW1iZXJzKGIpKQogICAgICAgICBzZWxmLmFzc2VydEluKCgnZicsIGIuZiksIGluc3BlY3QuZ2V0bWVtYmVycyhiLCBpbnNwZWN0LmlzbWV0aG9kKSkKIAorICAgIGRlZiB0ZXN0X2dldG1lbWJlcnNfVmlydHVhbEF0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhjbHMsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2VnZ3MnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NjcmFtYmxlZCcKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBBKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIEB0eXBlcy5EeW5hbWljQ2xhc3NBdHRyaWJ1dGUKKyAgICAgICAgICAgIGRlZiBlZ2dzKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiAnc3BhbScKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2VnZ3MnLCAnc2NyYW1ibGVkJyksIGluc3BlY3QuZ2V0bWVtYmVycyhBKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigoJ2VnZ3MnLCAnc3BhbScpLCBpbnNwZWN0LmdldG1lbWJlcnMoQSgpKSkKKworICAgIGRlZiB0ZXN0X2dldG1lbWJlcnNfd2l0aF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJ10KKyAgICAgICAgY2xhc3MgQyhtZXRhY2xhc3M9TSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGF0dHJzID0gW2FbMF0gZm9yIGEgaW4gaW5zcGVjdC5nZXRtZW1iZXJzKEMpXQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtaXNzaW5nJywgYXR0cnMpCisKIAogX2dsb2JhbF9yZWYgPSBvYmplY3QoKQogY2xhc3MgVGVzdEdldENsb3N1cmVWYXJzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTk4OSw2ICsxMjI5LDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFeGNlcHRpb24oZjMsICcxLCAyJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEV4Y2VwdGlvbihmMywgJzEsIDIsIGE9MSwgYj0yJykKIAorICAgICAgICAjIGlzc3VlICMyMDgxNjogZ2V0Y2FsbGFyZ3MoKSBmYWlscyB0byBpdGVyYXRlIG92ZXIgbm9uLWV4aXN0ZW50CisgICAgICAgICMga3dvbmx5ZGVmYXVsdHMgYW5kIHJhaXNlcyBhIHdyb25nIFR5cGVFcnJvcgorICAgICAgICBkZWYgZjUoKiwgYSk6IHBhc3MKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtaXNzaW5nIDEgcmVxdWlyZWQga2V5d29yZC1vbmx5Jyk6CisgICAgICAgICAgICBpbnNwZWN0LmdldGNhbGxhcmdzKGY1KQorCisKKyAgICAgICAgIyBpc3N1ZTIwODE3OgorICAgICAgICBkZWYgZjYoYSwgYiwgYyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICInYScsICdiJyBhbmQgJ2MnIik6CisgICAgICAgICAgICBpbnNwZWN0LmdldGNhbGxhcmdzKGY2KQorCiBjbGFzcyBUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzKFRlc3RHZXRjYWxsYXJnc0Z1bmN0aW9ucyk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CkBAIC0xMDgwLDYgKzEzMzQsMTUgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMoVGhpbmcsICd4JyksIFRoaW5nLngpCiAKKyAgICBkZWYgdGVzdF9jbGFzc1ZpcnR1YWxBdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGNsYXNzIFRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICBAdHlwZXMuRHluYW1pY0NsYXNzQXR0cmlidXRlCisgICAgICAgICAgICBkZWYgeChzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5feAorICAgICAgICAgICAgX3ggPSBvYmplY3QoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyhUaGluZywgJ3gnKSwgVGhpbmcuX19kaWN0X19bJ3gnXSkKKwogICAgIGRlZiB0ZXN0X2luaGVyaXRlZF9jbGFzc2F0dHJpYnV0ZShzZWxmKToKICAgICAgICAgY2xhc3MgVGhpbmcob2JqZWN0KToKICAgICAgICAgICAgIHggPSBvYmplY3QoKQpAQCAtMTM5MCwxMSArMTY1MywxMyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFMoKSksICcoKScpCiAKLSAgICAgICAgZGVmIHRlc3QocG8sIHBrLCAqYXJncywga28sICoqa3dhcmdzKToKKyAgICAgICAgZGVmIHRlc3QocG8sIHBrLCBwb2Q9NDIsIHBrZD0xMDAsICphcmdzLCBrbywgKiprd2FyZ3MpOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KQogICAgICAgICBwbyA9IHNpZy5wYXJhbWV0ZXJzWydwbyddLnJlcGxhY2Uoa2luZD1QLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgcG9kID0gc2lnLnBhcmFtZXRlcnNbJ3BvZCddLnJlcGxhY2Uoa2luZD1QLlBPU0lUSU9OQUxfT05MWSkKICAgICAgICAgcGsgPSBzaWcucGFyYW1ldGVyc1sncGsnXQorICAgICAgICBwa2QgPSBzaWcucGFyYW1ldGVyc1sncGtkJ10KICAgICAgICAgYXJncyA9IHNpZy5wYXJhbWV0ZXJzWydhcmdzJ10KICAgICAgICAga28gPSBzaWcucGFyYW1ldGVyc1sna28nXQogICAgICAgICBrd2FyZ3MgPSBzaWcucGFyYW1ldGVyc1sna3dhcmdzJ10KQEAgLTE0MTcsNiArMTY4MiwxNSBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2R1cGxpY2F0ZSBwYXJhbWV0ZXIgbmFtZScpOgogICAgICAgICAgICAgUygocG8sIHBrLCBhcmdzLCBrd2FyZ3MyLCBrbykpCiAKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQnKToKKyAgICAgICAgICAgIFMoKHBvZCwgcG8pKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnZm9sbG93cyBkZWZhdWx0IGFyZ3VtZW50Jyk6CisgICAgICAgICAgICBTKChwbywgcGtkLCBwaykpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdmb2xsb3dzIGRlZmF1bHQgYXJndW1lbnQnKToKKyAgICAgICAgICAgIFMoKHBrZCwgcGspKQorCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2ltbXV0YWJpbGl0eShzZWxmKToKICAgICAgICAgZGVmIHRlc3QoYSk6CiAgICAgICAgICAgICBwYXNzCkBAIC0xNDYxLDE5ICsxNzM1LDEwMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIGludCwgInZhcl9rZXl3b3JkIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogCi0gICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2J1aWx0aW5fZnVuY3Rpb24oc2VsZik6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbm90IHN1cHBvcnRlZCBieSBzaWduYXR1cmUnKToKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKHR5cGUpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbm90IHN1cHBvcnRlZCBieSBzaWduYXR1cmUnKToKLSAgICAgICAgICAgICMgc3VwcG9ydCBmb3IgJ3dyYXBwZXJfZGVzY3JpcHRvcicKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKHR5cGUuX19jYWxsX18pCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbm90IHN1cHBvcnRlZCBieSBzaWduYXR1cmUnKToKLSAgICAgICAgICAgICMgc3VwcG9ydCBmb3IgJ21ldGhvZC13cmFwcGVyJwotICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUobWluLl9fY2FsbF9fKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm8gc2lnbmF0dXJlIGZvdW5kIGZvciBidWlsdGluIGZ1bmN0aW9uJyk6Ci0gICAgICAgICAgICAjIHN1cHBvcnQgZm9yICdtZXRob2Qtd3JhcHBlcicKLSAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKG1pbikKKyAgICBAY3B5dGhvbl9vbmx5CisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9idWlsdGlucyhzZWxmKToKKyAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorCisgICAgICAgIGRlZiB0ZXN0X3VuYm91bmRfbWV0aG9kKG8pOgorICAgICAgICAgICAgIiIiVXNlIHRoaXMgdG8gdGVzdCB1bmJvdW5kIG1ldGhvZHMgKHRoaW5ncyB0aGF0IHNob3VsZCBoYXZlIGEgc2VsZikiIiIKKyAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKG8pCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzaWduYXR1cmUsIGluc3BlY3QuU2lnbmF0dXJlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChzaWduYXR1cmUucGFyYW1ldGVycy52YWx1ZXMoKSlbMF0ubmFtZSwgJ3NlbGYnKQorICAgICAgICAgICAgcmV0dXJuIHNpZ25hdHVyZQorCisgICAgICAgIGRlZiB0ZXN0X2NhbGxhYmxlKG8pOgorICAgICAgICAgICAgIiIiVXNlIHRoaXMgdG8gdGVzdCBib3VuZCBtZXRob2RzIG9yIG5vcm1hbCBjYWxsYWJsZXMgKHRoaW5ncyB0aGF0IGRvbid0IGV4cGVjdCBzZWxmKSIiIgorICAgICAgICAgICAgc2lnbmF0dXJlID0gaW5zcGVjdC5zaWduYXR1cmUobykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNpZ25hdHVyZSwgaW5zcGVjdC5TaWduYXR1cmUpKQorICAgICAgICAgICAgaWYgc2lnbmF0dXJlLnBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChsaXN0KHNpZ25hdHVyZS5wYXJhbWV0ZXJzLnZhbHVlcygpKVswXS5uYW1lLCAnc2VsZicpCisgICAgICAgICAgICByZXR1cm4gc2lnbmF0dXJlCisKKyAgICAgICAgc2lnbmF0dXJlID0gdGVzdF9jYWxsYWJsZShfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX3dpdGhfZGVmYXVsdHMpCisgICAgICAgIGRlZiBwKG5hbWUpOiByZXR1cm4gc2lnbmF0dXJlLnBhcmFtZXRlcnNbbmFtZV0uZGVmYXVsdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ3MnKSwgJ2F2b2NhZG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ2InKSwgYidieXRlcycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnZCcpLCAzLjE0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ2knKSwgMzUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnbicpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ3QnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwKCdmJyksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ2xvY2FsJyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCgnc3lzJyksIHN5cy5tYXhzaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAoJ2V4cCcpLCBzeXMubWF4c2l6ZSAtIDEpCisKKyAgICAgICAgdGVzdF9jYWxsYWJsZShvYmplY3QpCisKKyAgICAgICAgIyBub3JtYWwgbWV0aG9kCisgICAgICAgICMgKFB5TWV0aG9kRGVzY3JfVHlwZSwgIm1ldGhvZF9kZXNjcmlwdG9yIikKKyAgICAgICAgdGVzdF91bmJvdW5kX21ldGhvZChfcGlja2xlLlBpY2tsZXIuZHVtcCkKKyAgICAgICAgZCA9IF9waWNrbGUuUGlja2xlcihpby5TdHJpbmdJTygpKQorICAgICAgICB0ZXN0X2NhbGxhYmxlKGQuZHVtcCkKKworICAgICAgICAjIHN0YXRpYyBtZXRob2QKKyAgICAgICAgdGVzdF9jYWxsYWJsZShzdHIubWFrZXRyYW5zKQorICAgICAgICB0ZXN0X2NhbGxhYmxlKCdhYmMnLm1ha2V0cmFucykKKworICAgICAgICAjIGNsYXNzIG1ldGhvZAorICAgICAgICB0ZXN0X2NhbGxhYmxlKGRpY3QuZnJvbWtleXMpCisgICAgICAgIHRlc3RfY2FsbGFibGUoe30uZnJvbWtleXMpCisKKyAgICAgICAgIyB3cmFwcGVyIGFyb3VuZCBzbG90IChQeVdyYXBwZXJEZXNjcl9UeXBlLCAid3JhcHBlcl9kZXNjcmlwdG9yIikKKyAgICAgICAgdGVzdF91bmJvdW5kX21ldGhvZCh0eXBlLl9fY2FsbF9fKQorICAgICAgICB0ZXN0X3VuYm91bmRfbWV0aG9kKGludC5fX2FkZF9fKQorICAgICAgICB0ZXN0X2NhbGxhYmxlKCgzKS5fX2FkZF9fKQorCisgICAgICAgICMgX1B5TWV0aG9kV3JhcHBlcl9UeXBlCisgICAgICAgICMgc3VwcG9ydCBmb3IgJ21ldGhvZC13cmFwcGVyJworICAgICAgICB0ZXN0X2NhbGxhYmxlKG1pbi5fX2NhbGxfXykKKworICAgICAgICAjIFRoaXMgZG9lc24ndCB3b3JrIG5vdy4KKyAgICAgICAgIyAoV2UgZG9uJ3QgaGF2ZSBhIHZhbGlkIHNpZ25hdHVyZSBmb3IgInR5cGUiIGluIDMuNCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJubyBzaWduYXR1cmUgZm91bmQiKToKKyAgICAgICAgICAgIGNsYXNzIFRoaXNXb3Jrc05vdzoKKyAgICAgICAgICAgICAgICBfX2NhbGxfXyA9IHR5cGUKKyAgICAgICAgICAgIHRlc3RfY2FsbGFibGUoVGhpc1dvcmtzTm93KCkpCisKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGlzc3VlICMyMDc4NgorICAgICAgICB0ZXN0X3VuYm91bmRfbWV0aG9kKGRpY3QuX19kZWxpdGVtX18pCisgICAgICAgIHRlc3RfdW5ib3VuZF9tZXRob2QocHJvcGVydHkuX19kZWxldGVfXykKKworCisgICAgQGNweXRob25fb25seQorICAgIEB1bml0dGVzdC5za2lwSWYoTUlTU0lOR19DX0RPQ1NUUklOR1MsCisgICAgICAgICAgICAgICAgICAgICAiU2lnbmF0dXJlIGluZm9ybWF0aW9uIGZvciBidWlsdGlucyByZXF1aXJlcyBkb2NzdHJpbmdzIikKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fZGVjb3JhdGVkX2J1aWx0aW5zKHNlbGYpOgorICAgICAgICBpbXBvcnQgX3Rlc3RjYXBpCisgICAgICAgIGZ1bmMgPSBfdGVzdGNhcGkuZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX3dpdGhfZGVmYXVsdHMKKworICAgICAgICBkZWYgZGVjb3JhdG9yKGZ1bmMpOgorICAgICAgICAgICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQorICAgICAgICAgICAgZGVmIHdyYXBwZXIoKmFyZ3MsICoqa3dhcmdzKSAtPiBpbnQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXIKKworICAgICAgICBkZWNvcmF0ZWRfZnVuYyA9IGRlY29yYXRvcihmdW5jKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZnVuYyksCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoZGVjb3JhdGVkX2Z1bmMpKQorCisgICAgQGNweXRob25fb25seQorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9idWlsdGluc19ub19zaWduYXR1cmUoc2VsZik6CisgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdubyBzaWduYXR1cmUgZm91bmQgZm9yIGJ1aWx0aW4nKToKKyAgICAgICAgICAgIGluc3BlY3Quc2lnbmF0dXJlKF90ZXN0Y2FwaS5kb2NzdHJpbmdfbm9fc2lnbmF0dXJlKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX25vbl9mdW5jdGlvbihzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ2lzIG5vdCBhIGNhbGxhYmxlIG9iamVjdCcpOgpAQCAtMTQ4MiwxNCArMTgzNywxMjEgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ2lzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicpOgogICAgICAgICAgICAgaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9mdW5jdGlvbig0MikKIAotICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9tZXRob2Qoc2VsZik6Ci0gICAgICAgIGNsYXNzIFRlc3Q6Ci0gICAgICAgICAgICBkZWYgZm9vKHNlbGYsIGFyZzEsIGFyZzI9MSkgLT4gaW50OgorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9mcm9tX2J1aWx0aW5fZXJyb3JzKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnaXMgbm90IGEgUHl0aG9uIGJ1aWx0aW4nKToKKyAgICAgICAgICAgIGluc3BlY3QuU2lnbmF0dXJlLmZyb21fYnVpbHRpbig0MikKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9mcm9tX2Z1bmN0aW9ubGlrZV9vYmplY3Qoc2VsZik6CisgICAgICAgIGRlZiBmdW5jKGEsYiwgKmFyZ3MsIGt3b25seT1UcnVlLCBrd29ubHlyZXEsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBmdW5jbGlrZToKKyAgICAgICAgICAgICMgSGFzIHRvIGJlIGNhbGxhYmxlLCBhbmQgaGF2ZSBjb3JyZWN0CisgICAgICAgICAgICAjIF9fY29kZV9fLCBfX2Fubm90YXRpb25zX18sIF9fZGVmYXVsdHNfXywgX19uYW1lX18sCisgICAgICAgICAgICAjIGFuZCBfX2t3ZGVmYXVsdHNfXyBhdHRyaWJ1dGVzCisKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5jKToKKyAgICAgICAgICAgICAgICBzZWxmLl9fbmFtZV9fID0gZnVuYy5fX25hbWVfXworICAgICAgICAgICAgICAgIHNlbGYuX19jb2RlX18gPSBmdW5jLl9fY29kZV9fCisgICAgICAgICAgICAgICAgc2VsZi5fX2Fubm90YXRpb25zX18gPSBmdW5jLl9fYW5ub3RhdGlvbnNfXworICAgICAgICAgICAgICAgIHNlbGYuX19kZWZhdWx0c19fID0gZnVuYy5fX2RlZmF1bHRzX18KKyAgICAgICAgICAgICAgICBzZWxmLl9fa3dkZWZhdWx0c19fID0gZnVuYy5fX2t3ZGVmYXVsdHNfXworICAgICAgICAgICAgICAgIHNlbGYuZnVuYyA9IGZ1bmMKKworICAgICAgICAgICAgZGVmIF9fY2FsbF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZnVuYygqYXJncywgKiprd2FyZ3MpCisKKyAgICAgICAgc2lnX2Z1bmMgPSBpbnNwZWN0LlNpZ25hdHVyZS5mcm9tX2Z1bmN0aW9uKGZ1bmMpCisKKyAgICAgICAgc2lnX2Z1bmNsaWtlID0gaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9mdW5jdGlvbihmdW5jbGlrZShmdW5jKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzaWdfZnVuY2xpa2UsIHNpZ19mdW5jKQorCisgICAgICAgIHNpZ19mdW5jbGlrZSA9IGluc3BlY3Quc2lnbmF0dXJlKGZ1bmNsaWtlKGZ1bmMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZ19mdW5jbGlrZSwgc2lnX2Z1bmMpCisKKyAgICAgICAgIyBJZiBvYmplY3QgaXMgbm90IGEgZHVjayB0eXBlIG9mIGZ1bmN0aW9uLCB0aGVuCisgICAgICAgICMgc2lnbmF0dXJlIHdpbGwgdHJ5IHRvIGdldCBhIHNpZ25hdHVyZSBmb3IgaXRzICdfX2NhbGxfXycKKyAgICAgICAgIyBtZXRob2QKKyAgICAgICAgZmwgPSBmdW5jbGlrZShmdW5jKQorICAgICAgICBkZWwgZmwuX19kZWZhdWx0c19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoZmwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhcmdzJywgLi4uLCAuLi4sICJ2YXJfcG9zaXRpb25hbCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgInZhcl9rZXl3b3JkIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworICAgICAgICAjIFRlc3Qgd2l0aCBjeXRob24tbGlrZSBidWlsdGluczoKKyAgICAgICAgX29yaWdfaXNkZXNjID0gaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3IKKyAgICAgICAgZGVmIF9pc2Rlc2Mob2JqKToKKyAgICAgICAgICAgIGlmIGhhc2F0dHIob2JqLCAnX2J1aWx0aW5tb2NrJyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgICAgIHJldHVybiBfb3JpZ19pc2Rlc2Mob2JqKQorCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaCgnaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3InLCBfaXNkZXNjKToKKyAgICAgICAgICAgIGJ1aWx0aW5fZnVuYyA9IGZ1bmNsaWtlKGZ1bmMpCisgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IG91ciBtb2NrIHNldHVwIGlzIHdvcmtpbmcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3IoYnVpbHRpbl9mdW5jKSkKKyAgICAgICAgICAgIGJ1aWx0aW5fZnVuYy5fYnVpbHRpbm1vY2sgPSBUcnVlCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5pc21ldGhvZGRlc2NyaXB0b3IoYnVpbHRpbl9mdW5jKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoYnVpbHRpbl9mdW5jKSwgc2lnX2Z1bmMpCisKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfZnVuY3Rpb25saWtlX2NsYXNzKHNlbGYpOgorICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBkdWNrIHR5cGUgZnVuY3Rpb24tbGlrZSBvYmplY3RzLAorICAgICAgICAjIG5vdCBjbGFzc2VzLgorCisgICAgICAgIGRlZiBmdW5jKGEsYiwgKmFyZ3MsIGt3b25seT1UcnVlLCBrd29ubHlyZXEsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBjbGFzcyBmdW5jbGlrZToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXJrZXIpOgogICAgICAgICAgICAgICAgIHBhc3MKIAotICAgICAgICBtZXRoID0gVGVzdCgpLmZvbworICAgICAgICAgICAgX19uYW1lX18gPSBmdW5jLl9fbmFtZV9fCisgICAgICAgICAgICBfX2NvZGVfXyA9IGZ1bmMuX19jb2RlX18KKyAgICAgICAgICAgIF9fYW5ub3RhdGlvbnNfXyA9IGZ1bmMuX19hbm5vdGF0aW9uc19fCisgICAgICAgICAgICBfX2RlZmF1bHRzX18gPSBmdW5jLl9fZGVmYXVsdHNfXworICAgICAgICAgICAgX19rd2RlZmF1bHRzX18gPSBmdW5jLl9fa3dkZWZhdWx0c19fCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShtZXRoKSwKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ2lzIG5vdCBhIFB5dGhvbiBmdW5jdGlvbicpOgorICAgICAgICAgICAgaW5zcGVjdC5TaWduYXR1cmUuZnJvbV9mdW5jdGlvbihmdW5jbGlrZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShmdW5jbGlrZSkpLCAnKG1hcmtlciknKQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX21ldGhvZChzZWxmKToKKyAgICAgICAgY2xhc3MgVGVzdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXygqYXJncyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIG0xKHNlbGYsIGFyZzEsIGFyZzI9MSkgLT4gaW50OgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGRlZiBtMigqYXJncyk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgZGVmIF9fY2FsbF9fKCosIGEpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKFRlc3QoKS5tMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2FyZzEnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhcmcyJywgMSwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoVGVzdCgpLm0yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYXJncycsIC4uLiwgLi4uLCAidmFyX3Bvc2l0aW9uYWwiKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoVGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2FyZ3MnLCAuLi4sIC4uLiwgInZhcl9wb3NpdGlvbmFsIiksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ2ludmFsaWQgbWV0aG9kIHNpZ25hdHVyZScpOgorICAgICAgICAgICAgc2VsZi5zaWduYXR1cmUoVGVzdCgpKQorCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3dyYXBwZWRfYm91bmRfbWV0aG9kKHNlbGYpOgorICAgICAgICAjIElzc3VlIDI0Mjk4CisgICAgICAgIGNsYXNzIFRlc3Q6CisgICAgICAgICAgICBkZWYgbTEoc2VsZiwgYXJnMSwgYXJnMj0xKSAtPiBpbnQ6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKFRlc3QoKS5tMSkKKyAgICAgICAgZGVmIG0xZCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKG0xZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2FyZzEnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhcmcyJywgMSwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQpKQpAQCAtMTUzMyw2ICsxOTk1LDggQEAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfb25fcGFydGlhbChzZWxmKToKICAgICAgICAgZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKIAorICAgICAgICBQYXJhbWV0ZXIgPSBpbnNwZWN0LlBhcmFtZXRlcgorCiAgICAgICAgIGRlZiB0ZXN0KCk6CiAgICAgICAgICAgICBwYXNzCiAKQEAgLTE1NjgsMTUgKzIwMzIsMjIgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwodGVzdCwgYj0xLCBjPTIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAxLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIDEsIC4uLiwgImtleXdvcmRfb25seSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdjJywgMiwgLi4uLCAia2V5d29yZF9vbmx5IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwodGVzdCwgMCwgYj0xLCBjPTIpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIDEsIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdiJywgMSwgLi4uLCAia2V5d29yZF9vbmx5IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAyLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZCcsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IiksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZCcsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUocGFydGlhbCh0ZXN0LCBhPTEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIDEsIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgLi4uLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgImtleXdvcmRfb25seSIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAogICAgICAgICBkZWYgdGVzdChhLCAqYXJncywgYiwgKiprd2FyZ3MpOgpAQCAtMTU4OCwxMyArMjA1OSwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgInZhcl9rZXl3b3JkIikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUocGFydGlhbCh0ZXN0LCBhPTEpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIDEsIC4uLiwgImtleXdvcmRfb25seSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgLi4uLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCAuLi4sICJ2YXJfa2V5d29yZCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwodGVzdCwgMSwgMiwgMykpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhcmdzJywgLi4uLCAuLi4sICJ2YXJfcG9zaXRpb25hbCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgLi4uLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgna3dhcmdzJywgLi4uLCAuLi4sICJ2YXJfa2V5d29yZCIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAotCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUocGFydGlhbCh0ZXN0LCAxLCAyLCAzLCB0ZXN0PVRydWUpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYXJncycsIC4uLiwgLi4uLCAidmFyX3Bvc2l0aW9uYWwiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IiksCkBAIC0xNjQxLDcgKzIxMTcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIGEKICAgICAgICAgX2ZvbyA9IHBhcnRpYWwocGFydGlhbChmb28sIGE9MTApLCBhPTIwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKF9mb28pLAotICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgMjAsIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAyMCwgLi4uLCAia2V5d29yZF9vbmx5IiksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKICAgICAgICAgIyBjaGVjayB0aGF0IHdlIGRvbid0IGhhdmUgYW55IHNpZGUtZWZmZWN0cyBpbiBzaWduYXR1cmUoKSwKICAgICAgICAgIyBhbmQgdGhlIHBhcnRpYWwgb2JqZWN0IGlzIHN0aWxsIGZ1bmN0aW9uaW5nCkBAIC0xNjUwLDQyICsyMTI2LDExOSBAQAogICAgICAgICBkZWYgZm9vKGEsIGIsIGMpOgogICAgICAgICAgICAgcmV0dXJuIGEsIGIsIGMKICAgICAgICAgX2ZvbyA9IHBhcnRpYWwocGFydGlhbChmb28sIDEsIGI9MjApLCBiPTMwKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoX2ZvbyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2InLCAzMCwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIDMwLCAuLi4sICJrZXl3b3JkX29ubHkiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsIC4uLiwgLi4uLCAia2V5d29yZF9vbmx5IikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9mb28oYz0xMCksICgxLCAzMCwgMTApKQotICAgICAgICBfZm9vID0gcGFydGlhbChfZm9vLCAyKSAjIG5vdyAnYicgaGFzIHR3byB2YWx1ZXMgLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBvc2l0aW9uYWwgYW5kIGtleXdvcmQKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJoYXMgaW5jb3JyZWN0IGFyZ3VtZW50cyIpOgotICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoX2ZvbykKIAogICAgICAgICBkZWYgZm9vKGEsIGIsIGMsICosIGQpOgogICAgICAgICAgICAgcmV0dXJuIGEsIGIsIGMsIGQKICAgICAgICAgX2ZvbyA9IHBhcnRpYWwocGFydGlhbChmb28sIGQ9MjAsIGM9MjApLCBiPTEwLCBkPTMwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKF9mb28pLAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYicsIDEwLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsIDIwLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZCcsIDMwLCAuLi4sICJrZXl3b3JkX29ubHkiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2InLCAxMCwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAyMCwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAzMCwgLi4uLCAia2V5d29yZF9vbmx5IiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKF9mb28pLmJpbmQoYT0yMDAsIGI9MTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMjAwLCAxMSwgMjAsIDMwKSkKIAogICAgICAgICBkZWYgZm9vKGE9MSwgYj0yLCBjPTMpOgogICAgICAgICAgICAgcmV0dXJuIGEsIGIsIGMKLSAgICAgICAgX2ZvbyA9IHBhcnRpYWwoZm9vLCBhPTEwLCBjPTEzKQotICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKF9mb28pLmJpbmQoMTEpCisgICAgICAgIF9mb28gPSBwYXJ0aWFsKGZvbywgYz0xMykgIyAoYT0xLCBiPTIsICosIGM9MTMpCisKKyAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKGE9MTEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZvbygqYmEuYXJncywgKipiYS5rd2FyZ3MpLCAoMTEsIDIsIDEzKSkKKwogICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKF9mb28pLmJpbmQoMTEsIDEyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9mb28oKmJhLmFyZ3MsICoqYmEua3dhcmdzKSwgKDExLCAxMiwgMTMpKQorCiAgICAgICAgIGJhID0gaW5zcGVjdC5zaWduYXR1cmUoX2ZvbykuYmluZCgxMSwgYj0xMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZm9vKCpiYS5hcmdzLCAqKmJhLmt3YXJncyksICgxMSwgMTIsIDEzKSkKKwogICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKF9mb28pLmJpbmQoYj0xMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZm9vKCpiYS5hcmdzLCAqKmJhLmt3YXJncyksICgxMCwgMTIsIDEzKSkKLSAgICAgICAgX2ZvbyA9IHBhcnRpYWwoX2ZvbywgYj0xMCkKLSAgICAgICAgYmEgPSBpbnNwZWN0LnNpZ25hdHVyZShfZm9vKS5iaW5kKDEyLCAxNCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZm9vKCpiYS5hcmdzLCAqKmJhLmt3YXJncyksICgxMiwgMTQsIDEzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZm9vKCpiYS5hcmdzLCAqKmJhLmt3YXJncyksICgxLCAxMiwgMTMpKQorCisgICAgICAgIF9mb28gPSBwYXJ0aWFsKF9mb28sIGI9MTAsIGM9MjApCisgICAgICAgIGJhID0gaW5zcGVjdC5zaWduYXR1cmUoX2ZvbykuYmluZCgxMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZm9vKCpiYS5hcmdzLCAqKmJhLmt3YXJncyksICgxMiwgMTAsIDIwKSkKKworCisgICAgICAgIGRlZiBmb28oYSwgYiwgYywgZCwgKiprd2FyZ3MpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZShmb28pCisgICAgICAgIHBhcmFtcyA9IHNpZy5wYXJhbWV0ZXJzLmNvcHkoKQorICAgICAgICBwYXJhbXNbJ2EnXSA9IHBhcmFtc1snYSddLnJlcGxhY2Uoa2luZD1QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorICAgICAgICBwYXJhbXNbJ2InXSA9IHBhcmFtc1snYiddLnJlcGxhY2Uoa2luZD1QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorICAgICAgICBmb28uX19zaWduYXR1cmVfXyA9IGluc3BlY3QuU2lnbmF0dXJlKHBhcmFtcy52YWx1ZXMoKSkKKyAgICAgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUoZm9vKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzaWcpLCAnKGEsIGIsIC8sIGMsIGQsICoqa3dhcmdzKScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKGZvbywgMSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdiJywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29ubHknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vcl9rZXl3b3JkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2QnLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb3Jfa2V5d29yZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgJ3Zhcl9rZXl3b3JkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKGZvbywgMSwgMikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdjJywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29yX2tleXdvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZCcsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vcl9rZXl3b3JkJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgLi4uLCAndmFyX2tleXdvcmQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwoZm9vLCAxLCAyLCAzKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2QnLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb3Jfa2V5d29yZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdrd2FyZ3MnLCAuLi4sIC4uLiwgJ3Zhcl9rZXl3b3JkJykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShwYXJ0aWFsKGZvbywgMSwgMiwgYz0zKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2MnLCAzLCAuLi4sICdrZXl3b3JkX29ubHknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZCcsIC4uLiwgLi4uLCAna2V5d29yZF9vbmx5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgLi4uLCAndmFyX2tleXdvcmQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKHBhcnRpYWwoZm9vLCAxLCBjPTMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYicsIC4uLiwgLi4uLCAncG9zaXRpb25hbF9vbmx5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2MnLCAzLCAuLi4sICdrZXl3b3JkX29ubHknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnZCcsIC4uLiwgLi4uLCAna2V5d29yZF9vbmx5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2t3YXJncycsIC4uLiwgLi4uLCAndmFyX2tleXdvcmQnKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9wYXJ0aWFsbWV0aG9kKHNlbGYpOgorICAgICAgICBmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbG1ldGhvZAorCisgICAgICAgIGNsYXNzIFNwYW06CisgICAgICAgICAgICBkZWYgdGVzdCgpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGhhbSA9IHBhcnRpYWxtZXRob2QodGVzdCkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgImhhcyBpbmNvcnJlY3QgYXJndW1lbnRzIik6CisgICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShTcGFtLmhhbSkKKworICAgICAgICBjbGFzcyBTcGFtOgorICAgICAgICAgICAgZGVmIHRlc3QoaXQsIGEsICosIGMpIC0+ICdzcGFtJzoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBoYW0gPSBwYXJ0aWFsbWV0aG9kKHRlc3QsIGM9MSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKFNwYW0uaGFtKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnaXQnLCAuLi4sIC4uLiwgJ3Bvc2l0aW9uYWxfb3Jfa2V5d29yZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29yX2tleXdvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsIDEsIC4uLiwgJ2tleXdvcmRfb25seScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW0nKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2lnbmF0dXJlKFNwYW0oKS5oYW0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdhJywgLi4uLCAuLi4sICdwb3NpdGlvbmFsX29yX2tleXdvcmQnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnYycsIDEsIC4uLiwgJ2tleXdvcmRfb25seScpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NwYW0nKSkKKworICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9mYWtlX3BhcnRpYWxtZXRob2Qoc2VsZik6CisgICAgICAgIGRlZiBmb28oYSk6IHBhc3MKKyAgICAgICAgZm9vLl9wYXJ0aWFsbWV0aG9kID0gJ3NwYW0nCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKGZvbykpLCAnKGEpJykKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9kZWNvcmF0ZWQoc2VsZik6CiAgICAgICAgIGltcG9ydCBmdW5jdG9vbHMKQEAgLTE3MzYsNiArMjI4OSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICgoKCdiJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pKQogCisgICAgICAgICMgVGVzdCB3ZSBoYW5kbGUgX19zaWduYXR1cmVfXyBwYXJ0d2F5IGRvd24gdGhlIHdyYXBwZXIgc3RhY2sKKyAgICAgICAgZGVmIHdyYXBwZWRfZm9vX2NhbGwoKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd3JhcHBlZF9mb29fY2FsbC5fX3dyYXBwZWRfXyA9IEZvby5fX2NhbGxfXworCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUod3JhcHBlZF9mb29fY2FsbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2EnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiJywgLi4uLCAuLi4sICJwb3NpdGlvbmFsX29yX2tleXdvcmQiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKwogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9jbGFzcyhzZWxmKToKICAgICAgICAgY2xhc3MgQzoKICAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBhKToKQEAgLTE4MTcsNiArMjM4MSw0OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdiYXInLCAyLCAuLi4sICJrZXl3b3JkX29ubHkiKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKE1JU1NJTkdfQ19ET0NTVFJJTkdTLAorICAgICAgICAgICAgICAgICAgICAgIlNpZ25hdHVyZSBpbmZvcm1hdGlvbiBmb3IgYnVpbHRpbnMgcmVxdWlyZXMgZG9jc3RyaW5ncyIpCisgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2NsYXNzX3dpdGhvdXRfaW5pdChzZWxmKToKKyAgICAgICAgIyBUZXN0IGNsYXNzZXMgd2l0aG91dCB1c2VyLWRlZmluZWQgX19pbml0X18gb3IgX19uZXdfXworICAgICAgICBjbGFzcyBDOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKEMpKSwgJygpJykKKyAgICAgICAgY2xhc3MgRChDKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShEKSksICcoKScpCisKKyAgICAgICAgIyBUZXN0IG1ldGEtY2xhc3NlcyB3aXRob3V0IHVzZXItZGVmaW5lZCBfX2luaXRfXyBvciBfX25ld19fCisgICAgICAgIGNsYXNzIEModHlwZSk6IHBhc3MKKyAgICAgICAgY2xhc3MgRChDKTogcGFzcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgImNhbGxhYmxlLippcyBub3Qgc3VwcG9ydGVkIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKEMpLCBOb25lKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgImNhbGxhYmxlLippcyBub3Qgc3VwcG9ydGVkIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKEQpLCBOb25lKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihNSVNTSU5HX0NfRE9DU1RSSU5HUywKKyAgICAgICAgICAgICAgICAgICAgICJTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zIHJlcXVpcmVzIGRvY3N0cmluZ3MiKQorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9idWlsdGluX2NsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShfcGlja2xlLlBpY2tsZXIpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKGZpbGUsIHByb3RvY29sPU5vbmUsIGZpeF9pbXBvcnRzPVRydWUpJykKKworICAgICAgICBjbGFzcyBQKF9waWNrbGUuUGlja2xlcik6IHBhc3MKKyAgICAgICAgY2xhc3MgRW1wdHlUcmFpdDogcGFzcworICAgICAgICBjbGFzcyBQMihFbXB0eVRyYWl0LCBQKTogcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbnNwZWN0LnNpZ25hdHVyZShQKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmaWxlLCBwcm90b2NvbD1Ob25lLCBmaXhfaW1wb3J0cz1UcnVlKScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGluc3BlY3Quc2lnbmF0dXJlKFAyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmaWxlLCBwcm90b2NvbD1Ob25lLCBmaXhfaW1wb3J0cz1UcnVlKScpCisKKyAgICAgICAgY2xhc3MgUDMoUDIpOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHNwYW0pOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoUDMpKSwgJyhzcGFtKScpCisKKyAgICAgICAgY2xhc3MgTWV0YVAodHlwZSk6CisgICAgICAgICAgICBkZWYgX19jYWxsX18oY2xzLCBmb28sIGJhcik6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBQNChQMiwgbWV0YWNsYXNzPU1ldGFQKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUoUDQpKSwgJyhmb28sIGJhciknKQorCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2NhbGxhYmxlX29iamVjdHMoc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbzoKICAgICAgICAgICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBhKToKQEAgLTE4MzgsMTggKzI0NDUsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKIAotICAgICAgICBjbGFzcyBUb0ZhaWw6Ci0gICAgICAgICAgICBfX2NhbGxfXyA9IHR5cGUKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICJub3Qgc3VwcG9ydGVkIGJ5IHNpZ25hdHVyZSIpOgotICAgICAgICAgICAgaW5zcGVjdC5zaWduYXR1cmUoVG9GYWlsKCkpCi0KLQogICAgICAgICBjbGFzcyBXcmFwcGVkOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBXcmFwcGVkLl9fd3JhcHBlZF9fID0gbGFtYmRhIGE6IE5vbmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShXcmFwcGVkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCgnYScsIC4uLiwgLi4uLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKSkKKyAgICAgICAgIyB3cmFwcGVyIGxvb3A6CisgICAgICAgIFdyYXBwZWQuX193cmFwcGVkX18gPSBXcmFwcGVkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBzZWxmLnNpZ25hdHVyZShXcmFwcGVkKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX29uX2xhbWJkYXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zaWduYXR1cmUoKGxhbWJkYSBhPTEwOiBhKSksCkBAIC0xODU4LDQ3ICsyNDYzLDYyIEBACiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfZXF1YWxpdHkoc2VsZik6CiAgICAgICAgIGRlZiBmb28oYSwgKiwgYjppbnQpIC0+IGZsb2F0OiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IEVxdWFsc1RvQWxsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSAhPSBFcXVhbHNUb0FsbCgpKQogCiAgICAgICAgIGRlZiBiYXIoYSwgKiwgYjppbnQpIC0+IGZsb2F0OiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICAgICAgZGVmIGJhcihhLCAqLCBiOmludCkgLT4gaW50OiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pID09IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICAgICAgZGVmIGJhcihhLCAqLCBiOmludCk6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShmb28pLCBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKIAogICAgICAgICBkZWYgYmFyKGEsICosIGI6aW50PTQyKSAtPiBmbG9hdDogcGFzcwotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGZvbyksIGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSAhPSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogCiAgICAgICAgIGRlZiBiYXIoYSwgKiwgYykgLT4gZmxvYXQ6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShmb28pLCBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKIAogICAgICAgICBkZWYgYmFyKGEsIGI6aW50KSAtPiBmbG9hdDogcGFzcwotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGluc3BlY3Quc2lnbmF0dXJlKGZvbyksIGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSAhPSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQogICAgICAgICBkZWYgc3BhbShiOmludCwgYSkgLT4gZmxvYXQ6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShzcGFtKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShzcGFtKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoc3BhbSkgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKIAogICAgICAgICBkZWYgZm9vKCosIGEsIGIsIGMpOiBwYXNzCiAgICAgICAgIGRlZiBiYXIoKiwgYywgYiwgYSk6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShmb28pLCBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKIAogICAgICAgICBkZWYgZm9vKCosIGE9MSwgYiwgYyk6IHBhc3MKICAgICAgICAgZGVmIGJhcigqLCBjLCBiLCBhPTEpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICAgICAgZGVmIGZvbyhwb3MsICosIGE9MSwgYiwgYyk6IHBhc3MKICAgICAgICAgZGVmIGJhcihwb3MsICosIGMsIGIsIGE9MSk6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShmb28pLCBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSA9PSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKIAogICAgICAgICBkZWYgZm9vKHBvcywgKiwgYSwgYiwgYyk6IHBhc3MKICAgICAgICAgZGVmIGJhcihwb3MsICosIGMsIGIsIGE9MSk6IHBhc3MKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChpbnNwZWN0LnNpZ25hdHVyZShmb28pLCBpbnNwZWN0LnNpZ25hdHVyZShiYXIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgIT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKIAogICAgICAgICBkZWYgZm9vKHBvcywgKmFyZ3MsIGE9NDIsIGIsIGMsICoqa3dhcmdzOmludCk6IHBhc3MKICAgICAgICAgZGVmIGJhcihwb3MsICphcmdzLCBjLCBiLCBhPTQyLCAqKmt3YXJnczppbnQpOiBwYXNzCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5zcGVjdC5zaWduYXR1cmUoZm9vKSwgaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGluc3BlY3Quc2lnbmF0dXJlKGZvbykgPT0gaW5zcGVjdC5zaWduYXR1cmUoYmFyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShpbnNwZWN0LnNpZ25hdHVyZShmb28pICE9IGluc3BlY3Quc2lnbmF0dXJlKGJhcikpCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfdW5oYXNoYWJsZShzZWxmKToKICAgICAgICAgZGVmIGZvbyhhKTogcGFzcwpAQCAtMTkyMyw2ICsyNTQzLDcgQEAKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9zdHJfcG9zaXRpb25hbF9vbmx5KHNlbGYpOgogICAgICAgICBQID0gaW5zcGVjdC5QYXJhbWV0ZXIKKyAgICAgICAgUyA9IGluc3BlY3QuU2lnbmF0dXJlCiAKICAgICAgICAgZGVmIHRlc3QoYV9wbywgKiwgYiwgKiprd2FyZ3MpOgogICAgICAgICAgICAgcmV0dXJuIGFfcG8sIGt3YXJncwpAQCAtMTkzMywxNCArMjU1NCwyMCBAQAogICAgICAgICB0ZXN0Ll9fc2lnbmF0dXJlX18gPSBzaWcucmVwbGFjZShwYXJhbWV0ZXJzPW5ld19wYXJhbXMpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUodGVzdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICcoPGFfcG8+LCAqLCBiLCAqKmt3YXJncyknKQorICAgICAgICAgICAgICAgICAgICAgICAgICcoYV9wbywgLywgKiwgYiwgKiprd2FyZ3MpJykKIAotICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KQotICAgICAgICBuZXdfcGFyYW1zID0gbGlzdChzaWcucGFyYW1ldGVycy52YWx1ZXMoKSkKLSAgICAgICAgbmV3X3BhcmFtc1swXSA9IG5ld19wYXJhbXNbMF0ucmVwbGFjZShuYW1lPU5vbmUpCi0gICAgICAgIHRlc3QuX19zaWduYXR1cmVfXyA9IHNpZy5yZXBsYWNlKHBhcmFtZXRlcnM9bmV3X3BhcmFtcykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW5zcGVjdC5zaWduYXR1cmUodGVzdCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICcoPDA+LCAqLCBiLCAqKmt3YXJncyknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihTKHBhcmFtZXRlcnM9W1AoJ2ZvbycsIFAuUE9TSVRJT05BTF9PTkxZKV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKGZvbywgLyknKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKFMocGFyYW1ldGVycz1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAoJ2ZvbycsIFAuUE9TSVRJT05BTF9PTkxZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCgnYmFyJywgUC5WQVJfS0VZV09SRCldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgJyhmb28sIC8sICoqYmFyKScpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoUyhwYXJhbWV0ZXJzPVsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUCgnZm9vJywgUC5QT1NJVElPTkFMX09OTFkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQKCdiYXInLCBQLlZBUl9QT1NJVElPTkFMKV0pKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnKGZvbywgLywgKmJhciknKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3JlcGxhY2VfYW5ubyhzZWxmKToKICAgICAgICAgZGVmIHRlc3QoKSAtPiA0MjoKQEAgLTE5NTUsNiArMjU4MiwyMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpZy5yZXR1cm5fYW5ub3RhdGlvbiwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2lnLCBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KSkKIAorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9vbl9tYW5nbGVkX3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGNsYXNzIFNwYW06CisgICAgICAgICAgICBkZWYgZm9vKHNlbGYsIF9fcDE6MT0yLCAqLCBfX3AyOjI9Myk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBIYW0oU3BhbSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShTcGFtLmZvbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ3NlbGYnLCAuLi4sIC4uLiwgInBvc2l0aW9uYWxfb3Jfa2V5d29yZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdfU3BhbV9fcDEnLCAyLCAxLCAicG9zaXRpb25hbF9vcl9rZXl3b3JkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ19TcGFtX19wMicsIDMsIDIsICJrZXl3b3JkX29ubHkiKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnNpZ25hdHVyZShTcGFtLmZvbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zaWduYXR1cmUoSGFtLmZvbykpCisKIAogY2xhc3MgVGVzdFBhcmFtZXRlck9iamVjdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3BhcmFtZXRlcl9raW5kcyhzZWxmKToKQEAgLTE5NzksMTAgKzI2MjIsMTMgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdub3QgYSB2YWxpZCBwYXJhbWV0ZXIgbmFtZScpOgogICAgICAgICAgICAgaW5zcGVjdC5QYXJhbWV0ZXIoJzEnLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlZBUl9LRVlXT1JEKQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub24tcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCAnbmFtZSBtdXN0IGJlIGEgc3RyJyk6CiAgICAgICAgICAgICBpbnNwZWN0LlBhcmFtZXRlcihOb25lLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLlZBUl9LRVlXT1JEKQogCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzIG5vdCBhIHZhbGlkIHBhcmFtZXRlciBuYW1lJyk6CisgICAgICAgICAgICBpbnNwZWN0LlBhcmFtZXRlcignJCcsIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuVkFSX0tFWVdPUkQpCisKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdjYW5ub3QgaGF2ZSBkZWZhdWx0IHZhbHVlcycpOgogICAgICAgICAgICAgaW5zcGVjdC5QYXJhbWV0ZXIoJ2EnLCBkZWZhdWx0PTQyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1pbnNwZWN0LlBhcmFtZXRlci5WQVJfS0VZV09SRCkKQEAgLTIwMDIsMTEgKzI2NDgsMTcgQEAKICAgICAgICAgUCA9IGluc3BlY3QuUGFyYW1ldGVyCiAgICAgICAgIHAgPSBQKCdmb28nLCBkZWZhdWx0PTQyLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHApCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwID09IHApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocCAhPSBwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPT0gNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwICE9IDQyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocCA9PSBFcXVhbHNUb0FsbCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgIT0gRXF1YWxzVG9BbGwoKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFAoJ2ZvbycsIGRlZmF1bHQ9NDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kPWluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwID09IFAoJ2ZvbycsIGRlZmF1bHQ9NDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1pbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgIT0gUCgnZm9vJywgZGVmYXVsdD00MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZD1pbnNwZWN0LlBhcmFtZXRlci5LRVlXT1JEX09OTFkpKQogCiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX3BhcmFtZXRlcl91bmhhc2hhYmxlKHNlbGYpOgogICAgICAgICBwID0gaW5zcGVjdC5QYXJhbWV0ZXIoJ2ZvbycsIGRlZmF1bHQ9NDIsCkBAIC0yMDMxLDcgKzI2ODMsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAyLm5hbWUsICdiYXInKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHAyLCBwKQogCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnbm90IGEgdmFsaWQgcGFyYW1ldGVyIG5hbWUnKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSBpcyBhIHJlcXVpcmVkIGF0dHJpYnV0ZScpOgogICAgICAgICAgICAgcDIgPSBwMi5yZXBsYWNlKG5hbWU9cDIuZW1wdHkpCiAKICAgICAgICAgcDIgPSBwMi5yZXBsYWNlKG5hbWU9J2ZvbycsIGRlZmF1bHQ9Tm9uZSkKQEAgLTIwNTMsMTQgKzI3MDYsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMiwgcCkKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9wYXJhbWV0ZXJfcG9zaXRpb25hbF9vbmx5KHNlbGYpOgotICAgICAgICBwID0gaW5zcGVjdC5QYXJhbWV0ZXIoTm9uZSwga2luZD1pbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnPD4nKQotCi0gICAgICAgIHAgPSBwLnJlcGxhY2UobmFtZT0nMScpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnPDE+JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgJ25hbWUgbXVzdCBiZSBhIHN0cicpOgorICAgICAgICAgICAgaW5zcGVjdC5QYXJhbWV0ZXIoTm9uZSwga2luZD1pbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCiAKICAgICBkZWYgdGVzdF9zaWduYXR1cmVfcGFyYW1ldGVyX2ltbXV0YWJpbGl0eShzZWxmKToKLSAgICAgICAgcCA9IGluc3BlY3QuUGFyYW1ldGVyKE5vbmUsIGtpbmQ9aW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZKQorICAgICAgICBwID0gaW5zcGVjdC5QYXJhbWV0ZXIoJ3NwYW0nLCBraW5kPWluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSkKIAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKICAgICAgICAgICAgIHAuZm9vID0gJ2JhcicKQEAgLTIyNTgsNiArMjkwOCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FsbCh0ZXN0LCAxLCAyLCA0LCA1LCBiYXI9NiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsIDIsIDQsIDUsIDYsIHt9KSkKIAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuY2FsbCh0ZXN0LCAxLCAyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgMiwgMywgNDIsIDUwLCB7fSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNhbGwodGVzdCwgMSwgMiwgZm9vPTQsIGJhcj01KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoMSwgMiwgMywgNCwgNSwge30pKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJidXQgd2FzIHBhc3NlZCBhcyBhIGtleXdvcmQiKToKKyAgICAgICAgICAgIHNlbGYuY2FsbCh0ZXN0LCAxLCAyLCBmb289NCwgYmFyPTUsIGNfcG89MTApCisKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgInBhcmFtZXRlciBpcyBwb3NpdGlvbmFsIG9ubHkiKToKICAgICAgICAgICAgIHNlbGYuY2FsbCh0ZXN0LCAxLCAyLCBjX3BvPTQpCiAKQEAgLTIyNzQsNiArMjkzMywyMiBAQAogICAgICAgICBiYSA9IHNpZy5iaW5kKDEsIHNlbGY9MiwgYj0zKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhLmFyZ3MsICgxLCAyLCAzKSkKIAorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9iaW5kX3ZhcmFyZ19uYW1lKHNlbGYpOgorICAgICAgICBkZWYgdGVzdChhLCAqYXJncyk6CisgICAgICAgICAgICByZXR1cm4gYSwgYXJncworICAgICAgICBzaWcgPSBpbnNwZWN0LnNpZ25hdHVyZSh0ZXN0KQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsICJ0b28gbWFueSBrZXl3b3JkIGFyZ3VtZW50cyIpOgorICAgICAgICAgICAgc2lnLmJpbmQoYT0wLCBhcmdzPTEpCisKKyAgICAgICAgZGVmIHRlc3QoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBhcmdzLCBrd2FyZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNhbGwodGVzdCwgYXJncz0xKSwgKCgpLCB7J2FyZ3MnOiAxfSkpCisKKyAgICAgICAgc2lnID0gaW5zcGVjdC5zaWduYXR1cmUodGVzdCkKKyAgICAgICAgYmEgPSBzaWcuYmluZChhcmdzPTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmEuYXJndW1lbnRzLCB7J2t3YXJncyc6IHsnYXJncyc6IDF9fSkKKwogCiBjbGFzcyBUZXN0Qm91bmRBcmd1bWVudHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9ib3VuZF9hcmd1bWVudHNfdW5oYXNoYWJsZShzZWxmKToKQEAgLTIyODYsMTkgKzI5NjEsMjIzIEBACiAgICAgZGVmIHRlc3Rfc2lnbmF0dXJlX2JvdW5kX2FyZ3VtZW50c19lcXVhbGl0eShzZWxmKToKICAgICAgICAgZGVmIGZvbyhhKTogcGFzcwogICAgICAgICBiYSA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykuYmluZCgxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhLCBiYSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhID09IGJhKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJhICE9IGJhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmEgPT0gRXF1YWxzVG9BbGwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYSAhPSBFcXVhbHNUb0FsbCgpKQogCiAgICAgICAgIGJhMiA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykuYmluZCgxKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJhLCBiYTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYSA9PSBiYTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmEgIT0gYmEyKQogCiAgICAgICAgIGJhMyA9IGluc3BlY3Quc2lnbmF0dXJlKGZvbykuYmluZCgyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGJhLCBiYTMpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYmEgPT0gYmEzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmEgIT0gYmEzKQogICAgICAgICBiYTMuYXJndW1lbnRzWydhJ10gPSAxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmEsIGJhMykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhID09IGJhMykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShiYSAhPSBiYTMpCiAKICAgICAgICAgZGVmIGJhcihiKTogcGFzcwogICAgICAgICBiYTQgPSBpbnNwZWN0LnNpZ25hdHVyZShiYXIpLmJpbmQoMSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChiYSwgYmE0KQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJhID09IGJhNCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGJhICE9IGJhNCkKKworCitjbGFzcyBUZXN0U2lnbmF0dXJlUHJpdmF0ZUhlbHBlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9nZXRfYm91bmRfcGFyYW0oc2VsZik6CisgICAgICAgIGdldHRlciA9IGluc3BlY3QuX3NpZ25hdHVyZV9nZXRfYm91bmRfcGFyYW0KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldHRlcignKCRzZWxmKScpLCAnc2VsZicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0dGVyKCcoJHNlbGYsIG9iaiknKSwgJ3NlbGYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldHRlcignKCRjbHMsIC8sIG9iaiknKSwgJ2NscycpCisKKyAgICBkZWYgX3N0cmlwX25vbl9weXRob25fc3ludGF4KHNlbGYsIGlucHV0LAorICAgICAgICBjbGVhbl9zaWduYXR1cmUsIHNlbGZfcGFyYW1ldGVyLCBsYXN0X3Bvc2l0aW9uYWxfb25seSk6CisgICAgICAgIGNvbXB1dGVkX2NsZWFuX3NpZ25hdHVyZSwgXAorICAgICAgICAgICAgY29tcHV0ZWRfc2VsZl9wYXJhbWV0ZXIsIFwKKyAgICAgICAgICAgIGNvbXB1dGVkX2xhc3RfcG9zaXRpb25hbF9vbmx5ID0gXAorICAgICAgICAgICAgaW5zcGVjdC5fc2lnbmF0dXJlX3N0cmlwX25vbl9weXRob25fc3ludGF4KGlucHV0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXB1dGVkX2NsZWFuX3NpZ25hdHVyZSwgY2xlYW5fc2lnbmF0dXJlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXB1dGVkX3NlbGZfcGFyYW1ldGVyLCBzZWxmX3BhcmFtZXRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21wdXRlZF9sYXN0X3Bvc2l0aW9uYWxfb25seSwgbGFzdF9wb3NpdGlvbmFsX29ubHkpCisKKyAgICBkZWYgdGVzdF9zaWduYXR1cmVfc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoc2VsZik6CisgICAgICAgIHNlbGYuX3N0cmlwX25vbl9weXRob25fc3ludGF4KAorICAgICAgICAgICAgIigkbW9kdWxlLCAvLCBwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgIiArCisgICAgICAgICAgICAgICAgImVmZmVjdGl2ZV9pZHM9RmFsc2UsXG4gICAgICAgZm9sbG93X3N5bWxpbmtzPVRydWUpIiwKKyAgICAgICAgICAgICIobW9kdWxlLCBwYXRoLCBtb2RlLCAqLCBkaXJfZmQ9Tm9uZSwgIiArCisgICAgICAgICAgICAgICAgImVmZmVjdGl2ZV9pZHM9RmFsc2UsIGZvbGxvd19zeW1saW5rcz1UcnVlKSIsCisgICAgICAgICAgICAwLAorICAgICAgICAgICAgMCkKKworICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgICIoJG1vZHVsZSwgd29yZCwgc2FsdCwgLykiLAorICAgICAgICAgICAgIihtb2R1bGUsIHdvcmQsIHNhbHQpIiwKKyAgICAgICAgICAgIDAsCisgICAgICAgICAgICAyKQorCisgICAgICAgIHNlbGYuX3N0cmlwX25vbl9weXRob25fc3ludGF4KAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSwgLykiLAorICAgICAgICAgICAgIih4LCB5PU5vbmUsIHo9Tm9uZSkiLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIDIpCisKKyAgICAgICAgc2VsZi5fc3RyaXBfbm9uX3B5dGhvbl9zeW50YXgoCisgICAgICAgICAgICAiKHgsIHk9Tm9uZSwgej1Ob25lKSIsCisgICAgICAgICAgICAiKHgsIHk9Tm9uZSwgej1Ob25lKSIsCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgTm9uZSkKKworICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgICIoeCxcbiAgICB5PU5vbmUsXG4gICAgICB6ID0gTm9uZSAgKSIsCisgICAgICAgICAgICAiKHgsIHk9Tm9uZSwgej1Ob25lKSIsCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgTm9uZSkKKworICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgICIiLAorICAgICAgICAgICAgIiIsCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgTm9uZSkKKworICAgICAgICBzZWxmLl9zdHJpcF9ub25fcHl0aG9uX3N5bnRheCgKKyAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICBOb25lLAorICAgICAgICAgICAgTm9uZSwKKyAgICAgICAgICAgIE5vbmUpCisKKworY2xhc3MgVGVzdFVud3JhcCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF91bndyYXBfb25lKHNlbGYpOgorICAgICAgICBkZWYgZnVuYyhhLCBiKToKKyAgICAgICAgICAgIHJldHVybiBhICsgYgorICAgICAgICB3cmFwcGVyID0gZnVuY3Rvb2xzLmxydV9jYWNoZShtYXhzaXplPTIwKShmdW5jKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3BlY3QudW53cmFwKHdyYXBwZXIpLCBmdW5jKQorCisgICAgZGVmIHRlc3RfdW53cmFwX3NldmVyYWwoc2VsZik6CisgICAgICAgIGRlZiBmdW5jKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIHdyYXBwZXIgPSBmdW5jCisgICAgICAgIGZvciBfXyBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKHdyYXBwZXIpCisgICAgICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh3cmFwcGVyLl9fd3JhcHBlZF9fLCBmdW5jKQorICAgICAgICBzZWxmLmFzc2VydElzKGluc3BlY3QudW53cmFwKHdyYXBwZXIpLCBmdW5jKQorCisgICAgZGVmIHRlc3Rfc3RvcChzZWxmKToKKyAgICAgICAgZGVmIGZ1bmMxKGEsIGIpOgorICAgICAgICAgICAgcmV0dXJuIGEgKyBiCisgICAgICAgIEBmdW5jdG9vbHMud3JhcHMoZnVuYzEpCisgICAgICAgIGRlZiBmdW5jMigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBAZnVuY3Rvb2xzLndyYXBzKGZ1bmMyKQorICAgICAgICBkZWYgd3JhcHBlcigpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmdW5jMi5zdG9wX2hlcmUgPSAxCisgICAgICAgIHVud3JhcHBlZCA9IGluc3BlY3QudW53cmFwKHdyYXBwZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3A9KGxhbWJkYSBmOiBoYXNhdHRyKGYsICJzdG9wX2hlcmUiKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW53cmFwcGVkLCBmdW5jMikKKworICAgIGRlZiB0ZXN0X2N5Y2xlKHNlbGYpOgorICAgICAgICBkZWYgZnVuYzEoKTogcGFzcworICAgICAgICBmdW5jMS5fX3dyYXBwZWRfXyA9IGZ1bmMxCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnd3JhcHBlciBsb29wJyk6CisgICAgICAgICAgICBpbnNwZWN0LnVud3JhcChmdW5jMSkKKworICAgICAgICBkZWYgZnVuYzIoKTogcGFzcworICAgICAgICBmdW5jMi5fX3dyYXBwZWRfXyA9IGZ1bmMxCisgICAgICAgIGZ1bmMxLl9fd3JhcHBlZF9fID0gZnVuYzIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICd3cmFwcGVyIGxvb3AnKToKKyAgICAgICAgICAgIGluc3BlY3QudW53cmFwKGZ1bmMxKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgJ3dyYXBwZXIgbG9vcCcpOgorICAgICAgICAgICAgaW5zcGVjdC51bndyYXAoZnVuYzIpCisKKyAgICBkZWYgdGVzdF91bmhhc2hhYmxlKHNlbGYpOgorICAgICAgICBkZWYgZnVuYygpOiBwYXNzCisgICAgICAgIGZ1bmMuX193cmFwcGVkX18gPSBOb25lCisgICAgICAgIGNsYXNzIEM6CisgICAgICAgICAgICBfX2hhc2hfXyA9IE5vbmUKKyAgICAgICAgICAgIF9fd3JhcHBlZF9fID0gZnVuYworICAgICAgICBzZWxmLmFzc2VydElzTm9uZShpbnNwZWN0LnVud3JhcChDKCkpKQorCitjbGFzcyBUZXN0TWFpbih1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3Rfb25seV9zb3VyY2Uoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ2luc3BlY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bml0dGVzdCcpCisgICAgICAgIGxpbmVzID0gb3V0LmRlY29kZSgpLnNwbGl0bGluZXMoKQorICAgICAgICAjIGlnbm9yZSB0aGUgZmluYWwgbmV3bGluZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWzotMV0sIGluc3BlY3QuZ2V0c291cmNlKG1vZHVsZSkuc3BsaXRsaW5lcygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYicnKQorCisgICAgZGVmIHRlc3RfY3VzdG9tX2dldGF0dHIoc2VsZik6CisgICAgICAgIGRlZiBmb28oKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9vLl9fc2lnbmF0dXJlX18gPSA0MgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpbnNwZWN0LnNpZ25hdHVyZShmb28pCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKFRocmVhZFBvb2xFeGVjdXRvciBpcyBOb25lLAorICAgICAgICAgICAgJ3RocmVhZHMgcmVxdWlyZWQgdG8gdGVzdCBfX3F1YWxuYW1lX18gZm9yIHNvdXJjZSBmaWxlcycpCisgICAgZGVmIHRlc3RfcXVhbG5hbWVfc291cmNlKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctbScsICdpbnNwZWN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uY3VycmVudC5mdXR1cmVzOlRocmVhZFBvb2xFeGVjdXRvcicpCisgICAgICAgIGxpbmVzID0gb3V0LmRlY29kZSgpLnNwbGl0bGluZXMoKQorICAgICAgICAjIGlnbm9yZSB0aGUgZmluYWwgbmV3bGluZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzWzotMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgaW5zcGVjdC5nZXRzb3VyY2UoVGhyZWFkUG9vbEV4ZWN1dG9yKS5zcGxpdGxpbmVzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJycpCisKKyAgICBkZWYgdGVzdF9idWlsdGlucyhzZWxmKToKKyAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoJ3VuaXR0ZXN0JykKKyAgICAgICAgXywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ2luc3BlY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzJykKKyAgICAgICAgbGluZXMgPSBlcnIuZGVjb2RlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZXMsIFsiQ2FuJ3QgZ2V0IGluZm8gZm9yIGJ1aWx0aW4gbW9kdWxlcy4iXSkKKworICAgIGRlZiB0ZXN0X2RldGFpbHMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi5pbXBvcnRfbW9kdWxlKCd1bml0dGVzdCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1tJywgJ2luc3BlY3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bml0dGVzdCcsICctLWRldGFpbHMnKQorICAgICAgICBvdXRwdXQgPSBvdXQuZGVjb2RlKCkKKyAgICAgICAgIyBKdXN0IGEgcXVpY2sgc2FuaXR5IGNoZWNrIG9uIHRoZSBvdXRwdXQKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19uYW1lX18sIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUuX19maWxlX18sIG91dHB1dCkKKyAgICAgICAgaWYgbm90IHN5cy5mbGFncy5vcHRpbWl6ZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obW9kdWxlLl9fY2FjaGVkX18sIG91dHB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGInJykKKworCitjbGFzcyBUZXN0UmVsb2FkKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIHNyY19iZWZvcmUgPSB0ZXh0d3JhcC5kZWRlbnQoIiIiXAorZGVmIGZvbygpOgorICAgIHByaW50KCJCbGEiKQorICAgICIiIikKKworICAgIHNyY19hZnRlciA9IHRleHR3cmFwLmRlZGVudCgiIiJcCitkZWYgZm9vKCk6CisgICAgcHJpbnQoIk9oIG5vISIpCisgICAgIiIiKQorCisgICAgZGVmIGFzc2VydEluc3BlY3RFcXVhbChzZWxmLCBwYXRoLCBzb3VyY2UpOgorICAgICAgICBpbnNwZWN0ZWRfc3JjID0gaW5zcGVjdC5nZXRzb3VyY2Uoc291cmNlKQorICAgICAgICB3aXRoIG9wZW4ocGF0aCkgYXMgc3JjOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzcmMucmVhZCgpLnNwbGl0bGluZXMoVHJ1ZSksCisgICAgICAgICAgICAgICAgaW5zcGVjdGVkX3NyYy5zcGxpdGxpbmVzKFRydWUpCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9nZXRzb3VyY2VfcmVsb2FkKHNlbGYpOgorICAgICAgICAjIHNlZSBpc3N1ZSAxMjE4MjM0CisgICAgICAgIHdpdGggX3JlYWR5X3RvX2ltcG9ydCgncmVsb2FkX2J1ZycsIHNlbGYuc3JjX2JlZm9yZSkgYXMgKG5hbWUsIHBhdGgpOgorICAgICAgICAgICAgbW9kdWxlID0gaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5zcGVjdEVxdWFsKHBhdGgsIG1vZHVsZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihwYXRoLCAndycpIGFzIHNyYzoKKyAgICAgICAgICAgICAgICBzcmMud3JpdGUoc2VsZi5zcmNfYWZ0ZXIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluc3BlY3RFcXVhbChwYXRoLCBtb2R1bGUpCiAKIAogZGVmIHRlc3RfbWFpbigpOgpAQCAtMjMwOCw3ICszMTg3LDggQEAKICAgICAgICAgVGVzdEdldGNhbGxhcmdzRnVuY3Rpb25zLCBUZXN0R2V0Y2FsbGFyZ3NNZXRob2RzLAogICAgICAgICBUZXN0R2V0Y2FsbGFyZ3NVbmJvdW5kTWV0aG9kcywgVGVzdEdldGF0dHJTdGF0aWMsIFRlc3RHZXRHZW5lcmF0b3JTdGF0ZSwKICAgICAgICAgVGVzdE5vRU9MLCBUZXN0U2lnbmF0dXJlT2JqZWN0LCBUZXN0U2lnbmF0dXJlQmluZCwgVGVzdFBhcmFtZXRlck9iamVjdCwKLSAgICAgICAgVGVzdEJvdW5kQXJndW1lbnRzLCBUZXN0R2V0Q2xvc3VyZVZhcnMKKyAgICAgICAgVGVzdEJvdW5kQXJndW1lbnRzLCBUZXN0U2lnbmF0dXJlUHJpdmF0ZUhlbHBlcnMsIFRlc3RHZXRDbG9zdXJlVmFycywKKyAgICAgICAgVGVzdFVud3JhcCwgVGVzdE1haW4sIFRlc3RSZWxvYWQKICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2ludC5weSBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CmluZGV4IGM0ODk1MTAuLjQ5MDZlNDYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaW50LnB5CkBAIC0yNCw2ICsyNCw5IEBACiAgICAgICAgICgiXHUwMjAwIiwgVmFsdWVFcnJvcikKIF0KIAorY2xhc3MgSW50U3ViY2xhc3MoaW50KToKKyAgICBwYXNzCisKIGNsYXNzIEludFRlc3RDYXNlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKQEAgLTIyOCw2ICsyMzEsNDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpbnQsIGJhc2U9MTApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaW50LCBiYXNlPTApCiAKKyAgICBkZWYgdGVzdF9pbnRfYmFzZV9saW1pdHMoc2VsZik6CisgICAgICAgICIiIlRlc3RpbmcgdGhlIHN1cHBvcnRlZCBsaW1pdHMgb2YgdGhlIGludCgpIGJhc2UgcGFyYW1ldGVyLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMCcsIDUpLCAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgMSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIDM3KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgLTkwOSkgICMgQW4gb2xkIG1hZ2ljIHZhbHVlIGJhc2UgZnJvbSBQeXRob24gMi4KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIGJhc2U9MC0oMioqMjM0KSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGludCgnMCcsIGJhc2U9MioqMjM0KQorICAgICAgICAjIEJhc2VzIDIgdGhyb3VnaCAzNiBhcmUgc3VwcG9ydGVkLgorICAgICAgICBmb3IgYmFzZSBpbiByYW5nZSgyLDM3KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcwJywgYmFzZT1iYXNlKSwgMCkKKworICAgIGRlZiB0ZXN0X2ludF9iYXNlX2JhZF90eXBlcyhzZWxmKToKKyAgICAgICAgIiIiTm90IGludGVnZXIgdHlwZXMgYXJlIG5vdCB2YWxpZCBiYXNlczsgaXNzdWUxNjc3Mi4iIiIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgaW50KCcwJywgNS41KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzAnLCA1LjApCisKKyAgICBkZWYgdGVzdF9pbnRfYmFzZV9pbmRleGFibGUoc2VsZik6CisgICAgICAgIGNsYXNzIE15SW5kZXhhYmxlKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisgICAgICAgICMgQ2hlY2sgb3V0IG9mIHJhbmdlIGJhc2VzLgorICAgICAgICBmb3IgYmFzZSBpbiAyKioxMDAsIC0yKioxMDAsIDEsIDM3OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBpbnQoJzQzJywgYmFzZSkKKworICAgICAgICAjIENoZWNrIGluLXJhbmdlIGJhc2VzLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCgnMTAxJywgYmFzZT1NeUluZGV4YWJsZSgyKSksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KCcxMDEnLCBiYXNlPU15SW5kZXhhYmxlKDEwKSksIDEwMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoJzEwMScsIGJhc2U9TXlJbmRleGFibGUoMzYpKSwgMSArIDM2KioyKQorCiAgICAgZGVmIHRlc3Rfbm9uX251bWVyaWNfaW5wdXRfdHlwZXMoc2VsZik6CiAgICAgICAgICMgVGVzdCBwb3NzaWJsZSBub24tbnVtZXJpYyB0eXBlcyBmb3IgdGhlIGFyZ3VtZW50IHgsIGluY2x1ZGluZwogICAgICAgICAjIHN1YmNsYXNzZXMgb2YgdGhlIGV4cGxpY2l0bHkgZG9jdW1lbnRlZCBhY2NlcHRlZCB0eXBlcy4KQEAgLTIzNSwxNiArMjc5LDQwIEBACiAgICAgICAgIGNsYXNzIEN1c3RvbUJ5dGVzKGJ5dGVzKTogcGFzcwogICAgICAgICBjbGFzcyBDdXN0b21CeXRlQXJyYXkoYnl0ZWFycmF5KTogcGFzcwogCi0gICAgICAgIHZhbHVlcyA9IFtiJzEwMCcsCi0gICAgICAgICAgICAgICAgICBieXRlYXJyYXkoYicxMDAnKSwKLSAgICAgICAgICAgICAgICAgIEN1c3RvbVN0cignMTAwJyksCi0gICAgICAgICAgICAgICAgICBDdXN0b21CeXRlcyhiJzEwMCcpLAotICAgICAgICAgICAgICAgICAgQ3VzdG9tQnl0ZUFycmF5KGInMTAwJyldCisgICAgICAgIGZhY3RvcmllcyA9IFsKKyAgICAgICAgICAgIGJ5dGVzLAorICAgICAgICAgICAgYnl0ZWFycmF5LAorICAgICAgICAgICAgbGFtYmRhIGI6IEN1c3RvbVN0cihiLmRlY29kZSgpKSwKKyAgICAgICAgICAgIEN1c3RvbUJ5dGVzLAorICAgICAgICAgICAgQ3VzdG9tQnl0ZUFycmF5LAorICAgICAgICAgICAgbWVtb3J5dmlldywKKyAgICAgICAgXQorICAgICAgICB0cnk6CisgICAgICAgICAgICBmcm9tIGFycmF5IGltcG9ydCBhcnJheQorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmYWN0b3JpZXMuYXBwZW5kKGxhbWJkYSBiOiBhcnJheSgnQicsIGIpKQogCi0gICAgICAgIGZvciB4IGluIHZhbHVlczoKLSAgICAgICAgICAgIG1zZyA9ICd4IGhhcyB0eXBlICVzJyAlIHR5cGUoeCkuX19uYW1lX18KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHgpLCAxMDAsIG1zZz1tc2cpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludCh4LCAyKSwgNCwgbXNnPW1zZykKKyAgICAgICAgZm9yIGYgaW4gZmFjdG9yaWVzOgorICAgICAgICAgICAgeCA9IGYoYicxMDAnKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodHlwZSh4KSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoeCksIDEwMCkKKyAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHgsIChzdHIsIGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoeCwgMiksIDQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgbXNnID0gImNhbid0IGNvbnZlcnQgbm9uLXN0cmluZyIKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFR5cGVFcnJvciwgbXNnKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCh4LCAyKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAnaW52YWxpZCBsaXRlcmFsJyk6CisgICAgICAgICAgICAgICAgICAgIGludChmKGInQScgKiAweDEwKSkKKworICAgIGRlZiB0ZXN0X2ludF9tZW1vcnl2aWV3KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChtZW1vcnl2aWV3KGInMTIzJylbMTozXSksIDIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChtZW1vcnl2aWV3KGInMTIzXHgwMCcpWzE6M10pLCAyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQobWVtb3J5dmlldyhiJzEyMyAnKVsxOjNdKSwgMjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KG1lbW9yeXZpZXcoYicxMjNBJylbMTozXSksIDIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGludChtZW1vcnl2aWV3KGInMTIzNCcpWzE6M10pLCAyMykKIAogICAgIGRlZiB0ZXN0X3N0cmluZ19mbG9hdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgaW50LCAnMS4yJykKQEAgLTM1OSwyMCArNDI3LDI3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKIAogICAgICAgICBiYWRfaW50ID0gQmFkSW50KCkKLSAgICAgICAgbiA9IGludChiYWRfaW50KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIG4gPSBpbnQoYmFkX2ludCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAxKQogCiAgICAgICAgIGJhZF9pbnQgPSBCYWRJbnQyKCkKLSAgICAgICAgbiA9IGludChiYWRfaW50KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIG4gPSBpbnQoYmFkX2ludCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAxKQogCiAgICAgICAgIGJhZF9pbnQgPSBUcnVuY1JldHVybnNCYWRJbnQoKQotICAgICAgICBuID0gaW50KGJhZF9pbnQpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgbiA9IGludChiYWRfaW50KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG4sIDEpCiAKICAgICAgICAgZ29vZF9pbnQgPSBUcnVuY1JldHVybnNJbnRTdWJjbGFzcygpCiAgICAgICAgIG4gPSBpbnQoZ29vZF9pbnQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKG4pLCBib29sKQorICAgICAgICBuID0gSW50U3ViY2xhc3MoZ29vZF9pbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobiwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKG4pLCBJbnRTdWJjbGFzcykKIAogICAgIGRlZiB0ZXN0X2Vycm9yX21lc3NhZ2Uoc2VsZik6CiAgICAgICAgIGRlZiBjaGVjayhzLCBiYXNlPU5vbmUpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pby5weSBiL0xpYi90ZXN0L3Rlc3RfaW8ucHkKaW5kZXggNGI0OWQzMy4uODZjZjhlMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pby5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lvLnB5CkBAIC0xNSw3ICsxNSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBXaGVuIHdyaXRpbmcgdGVzdHMgZm9yIGlvLCBpdCdzIGltcG9ydGFudCB0byB0ZXN0IGJvdGggdGhlIEMgYW5kIFB5dGhvbgogIyBpbXBsZW1lbnRhdGlvbnMuIFRoaXMgaXMgdXN1YWxseSBkb25lIGJ5IHdyaXRpbmcgYSBiYXNlIHRlc3QgdGhhdCByZWZlcnMgdG8KLSMgdGhlIHR5cGUgaXQgaXMgdGVzdGluZyBhcyBhIGF0dHJpYnV0ZS4gVGhlbiBpdCBwcm92aWRlcyBjdXN0b20gc3ViY2xhc3NlcyB0bworIyB0aGUgdHlwZSBpdCBpcyB0ZXN0aW5nIGFzIGFuIGF0dHJpYnV0ZS4gVGhlbiBpdCBwcm92aWRlcyBjdXN0b20gc3ViY2xhc3NlcyB0bwogIyB0ZXN0IGJvdGggaW1wbGVtZW50YXRpb25zLiBUaGlzIGZpbGUgaGFzIGxvdHMgb2YgZXhhbXBsZXMuCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCkBAIC0zNSw2ICszNSw3IEBACiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBkZXF1ZSwgVXNlckxpc3QKIGZyb20gaXRlcnRvb2xzIGltcG9ydCBjeWNsZSwgY291bnQKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIHJ1bl9weXRob25fdW50aWxfZW5kCiAKIGltcG9ydCBjb2RlY3MKIGltcG9ydCBpbyAgIyBDIGltcGxlbWVudGF0aW9uIG9mIGlvCkBAIC0xNjQsNyArMTY1LDcgQEAKICAgICBkZWYgY2xvc2Uoc2VsZik6CiAgICAgICAgIGlmIG5vdCBzZWxmLmNsb3NlZDoKICAgICAgICAgICAgIHNlbGYuY2xvc2VkID0gMQotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogCiBjbGFzcyBDQ2xvc2VGYWlsdXJlSU8oQ2xvc2VGYWlsdXJlSU8sIGlvLlJhd0lPQmFzZSk6CiAgICAgcGFzcwpAQCAtNDUyLDcgKzQ1Myw3IEBACiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiYWIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnRlbGwoKSwgMykKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJhIikgYXMgZjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLnRlbGwoKSA+IDApCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZi50ZWxsKCksIDApCiAKICAgICBkZWYgdGVzdF9kZXN0cnVjdG9yKHNlbGYpOgogICAgICAgICByZWNvcmQgPSBbXQpAQCAtNTcyLDcgKzU3Myw3IEBACiAgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCiAgICAgICAgICAgICBkZWwgZgogICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCksIHdyKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgInJiIikgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGIiYWJjeHh4IikKIApAQCAtNTkyLDEzICs1OTMsNDQgQEAKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oemVybywgInIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgZi5yZWFkKQogCi0gICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6Ci0gICAgICAgIGYgPSBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJ3YiIsIGJ1ZmZlcmluZz0wKQorICAgIGRlZiBjaGVja19mbHVzaF9lcnJvcl9vbl9jbG9zZShzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZmlsZSBpcyBjbG9zZWQgZGVzcGl0ZSBmYWlsZWQgZmx1c2gKKyAgICAgICAgIyBhbmQgdGhhdCBmbHVzaCgpIGlzIGNhbGxlZCBiZWZvcmUgZmlsZSBjbG9zZWQuCisgICAgICAgIGYgPSBzZWxmLm9wZW4oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBjbG9zZWQgPSBbXQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCkKKyAgICAgICAgICAgIGNsb3NlZFs6XSA9IFtmLmNsb3NlZF0KKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoKQogICAgICAgICBmLmZsdXNoID0gYmFkX2ZsdXNoCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGYuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgZi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbG9zZWQpICAgICAgIyBmbHVzaCgpIGNhbGxlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsb3NlZFswXSkgICMgZmx1c2goKSBjYWxsZWQgYmVmb3JlIGZpbGUgY2xvc2VkCisgICAgICAgIGYuZmx1c2ggPSBsYW1iZGE6IE5vbmUgICMgYnJlYWsgcmVmZXJlbmNlIGxvb3AKKworICAgIGRlZiB0ZXN0X2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIHJhdyBmaWxlCisgICAgICAgICMgSXNzdWUgIzU3MDA6IGlvLkZpbGVJTyBjYWxscyBmbHVzaCgpIGFmdGVyIGZpbGUgY2xvc2VkCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc3VwcG9ydC5URVNURk4sICd3YicsIGJ1ZmZlcmluZz0wKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQpCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfZXJyb3Jfb25fY2xvc2UoZmQsICd3YicsIGJ1ZmZlcmluZz0wKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQpCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfZXJyb3Jfb25fY2xvc2UoZmQsICd3YicsIGJ1ZmZlcmluZz0wLCBjbG9zZWZkPUZhbHNlKQorICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgIyBidWZmZXJlZCBpbworICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHN1cHBvcnQuVEVTVEZOLCAnd2InKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQpCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfZXJyb3Jfb25fY2xvc2UoZmQsICd3YicpCisgICAgICAgIGZkID0gb3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgb3MuT19XUk9OTFl8b3MuT19DUkVBVCkKKyAgICAgICAgc2VsZi5jaGVja19mbHVzaF9lcnJvcl9vbl9jbG9zZShmZCwgJ3diJywgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICMgdGV4dCBpbworICAgICAgICBzZWxmLmNoZWNrX2ZsdXNoX2Vycm9yX29uX2Nsb3NlKHN1cHBvcnQuVEVTVEZOLCAndycpCisgICAgICAgIGZkID0gb3Mub3BlbihzdXBwb3J0LlRFU1RGTiwgb3MuT19XUk9OTFl8b3MuT19DUkVBVCkKKyAgICAgICAgc2VsZi5jaGVja19mbHVzaF9lcnJvcl9vbl9jbG9zZShmZCwgJ3cnKQorICAgICAgICBmZCA9IG9zLm9wZW4oc3VwcG9ydC5URVNURk4sIG9zLk9fV1JPTkxZfG9zLk9fQ1JFQVQpCisgICAgICAgIHNlbGYuY2hlY2tfZmx1c2hfZXJyb3Jfb25fY2xvc2UoZmQsICd3JywgY2xvc2VmZD1GYWxzZSkKKyAgICAgICAgb3MuY2xvc2UoZmQpCiAKICAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIndiIiwgYnVmZmVyaW5nPTApCkBAIC02NTIsNiArNjg0LDIwIEBACiAgICAgICAgICAgICBmaWxlaW8uY2xvc2UoKQogICAgICAgICAgICAgZjIucmVhZGxpbmUoKQogCisgICAgZGVmIHRlc3Rfbm9uYnVmZmVyZWRfdGV4dGlvKHNlbGYpOgorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlKSBhcyByZWNvcmRlZDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAndycsIGJ1ZmZlcmluZz0wKQorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWNvcmRlZCwgW10pCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX25ld2xpbmUoc2VsZik6CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUpIGFzIHJlY29yZGVkOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICd3JywgbmV3bGluZT0naW52YWxpZCcpCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlY29yZGVkLCBbXSkKKwogCiBjbGFzcyBDSU9UZXN0KElPVGVzdCk6CiAKQEAgLTY3MSw3ICs3MTcsNyBAQAogICAgICAgICBkZWwgTXlJTwogICAgICAgICBkZWwgb2JqCiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cigpLCB3cikKIAogY2xhc3MgUHlJT1Rlc3QoSU9UZXN0KToKICAgICBwYXNzCkBAIC02ODYsNiArNzMyLDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyhidWYuZGV0YWNoKCksIHJhdykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmLmRldGFjaCkKIAorICAgICAgICByZXByKGJ1ZikgICMgU2hvdWxkIHN0aWxsIHdvcmsKKwogICAgIGRlZiB0ZXN0X2ZpbGVubyhzZWxmKToKICAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKQEAgLTc1Nyw3ICs4MDUsNyBAQAogICAgICAgICBpZiBzOgogICAgICAgICAgICAgIyBUaGUgZGVzdHJ1Y3RvciAqbWF5KiBoYXZlIHByaW50ZWQgYW4gdW5yYWlzYWJsZSBlcnJvciwgY2hlY2sgaXQKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMuc3BsaXRsaW5lcygpKSwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBJT0Vycm9yOiAiKSwgcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0YXJ0c3dpdGgoIkV4Y2VwdGlvbiBPU0Vycm9yOiAiKSwgcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLmVuZHN3aXRoKCIgaWdub3JlZCIpLCBzKQogCiAgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKQEAgLTc3MSwyOSArODE5LDU2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihiKSwgIjwlcyBuYW1lPWInZHVtbXknPiIgJSBjbHNuYW1lKQogCiAgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGJ1ZmZlcmVkIGZpbGUgaXMgY2xvc2VkIGRlc3BpdGUgZmFpbGVkIGZsdXNoCisgICAgICAgICMgYW5kIHRoYXQgZmx1c2goKSBpcyBjYWxsZWQgYmVmb3JlIGZpbGUgY2xvc2VkLgogICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGNsb3NlZCA9IFtdCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgY2xvc2VkWzpdID0gW2IuY2xvc2VkLCByYXcuY2xvc2VkXQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIHJhdy5mbHVzaCA9IGJhZF9mbHVzaAogICAgICAgICBiID0gc2VsZi50cChyYXcpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYi5jbG9zZSkgIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYi5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyYXcuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY2xvc2VkKSAgICAgICMgZmx1c2goKSBjYWxsZWQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjbG9zZWRbMF0pICAjIGZsdXNoKCkgY2FsbGVkIGJlZm9yZSBmaWxlIGNsb3NlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsb3NlZFsxXSkKKyAgICAgICAgcmF3LmZsdXNoID0gbGFtYmRhOiBOb25lICAjIGJyZWFrIHJlZmVyZW5jZSBsb29wCiAKICAgICBkZWYgdGVzdF9jbG9zZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdmbHVzaCcpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdmbHVzaCcpCiAgICAgICAgIGRlZiBiYWRfY2xvc2UoKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2Nsb3NlJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2Nsb3NlJykKICAgICAgICAgcmF3LmNsb3NlID0gYmFkX2Nsb3NlCiAgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKICAgICAgICAgYi5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAogICAgICAgICAgICAgYi5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5hcmdzLCAoJ2Nsb3NlJywpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXywgT1NFcnJvcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhjZXB0aW9uLl9fY29udGV4dF9fLmFyZ3MsICgnZmx1c2gnLCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5jbG9zZWQpCiAKKyAgICBkZWYgdGVzdF9ub25ub3JtYWxpemVkX2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTY3NworICAgICAgICByYXcgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGRlZiBiYWRfZmx1c2goKToKKyAgICAgICAgICAgIHJhaXNlIG5vbl9leGlzdGluZ19mbHVzaAorICAgICAgICBkZWYgYmFkX2Nsb3NlKCk6CisgICAgICAgICAgICByYWlzZSBub25fZXhpc3RpbmdfY2xvc2UKKyAgICAgICAgcmF3LmNsb3NlID0gYmFkX2Nsb3NlCisgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKKyAgICAgICAgYi5mbHVzaCA9IGJhZF9mbHVzaAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE5hbWVFcnJvcikgYXMgZXJyOiAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgICAgICBiLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm9uX2V4aXN0aW5nX2Nsb3NlJywgc3RyKGVyci5leGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXywgTmFtZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEluKCdub25fZXhpc3RpbmdfZmx1c2gnLCBzdHIoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYi5jbG9zZWQpCisKICAgICBkZWYgdGVzdF9tdWx0aV9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBiID0gc2VsZi50cChyYXcpCkBAIC04MjgsNiArOTAzLDE0IEBACiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihidWZpbyksIHNpemUgKyBidWZzaXplMikKIAorICAgIEBzdXBwb3J0LmNweXRob25fb25seQorICAgIGRlZiB0ZXN0X2J1ZmZlcl9mcmVlaW5nKHNlbGYpIDoKKyAgICAgICAgYnVmc2l6ZSA9IDQwOTYKKyAgICAgICAgcmF3aW8gPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbywgYnVmZmVyX3NpemU9YnVmc2l6ZSkKKyAgICAgICAgc2l6ZSA9IHN5cy5nZXRzaXplb2YoYnVmaW8pIC0gYnVmc2l6ZQorICAgICAgICBidWZpby5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihidWZpbyksIHNpemUpCiAKIGNsYXNzIEJ1ZmZlcmVkUmVhZGVyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSwgQ29tbW9uQnVmZmVyZWRUZXN0cyk6CiAgICAgcmVhZF9tb2RlID0gInJiIgpAQCAtOTg3LDExICsxMDcwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5hcHBlbmQoZSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKSBmb3IgeCBpbiByYW5nZSgyMCldCi0gICAgICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICAgICAgdC5zdGFydCgpCi0gICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKSAjIHlpZWxkCi0gICAgICAgICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuc3RhcnRfdGhyZWFkcyh0aHJlYWRzKToKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKSAjIHlpZWxkCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnJvcnMsCiAgICAgICAgICAgICAgICAgICAgICJ0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgd2VyZSBjYXVnaHQ6ICVyIiAlIGVycm9ycykKICAgICAgICAgICAgICAgICBzID0gYicnLmpvaW4ocmVzdWx0cykKQEAgLTEwMTIsOCArMTA5Miw4IEBACiAgICAgZGVmIHRlc3RfbWlzYmVoYXZlZF9pbyhzZWxmKToKICAgICAgICAgcmF3aW8gPSBzZWxmLk1pc2JlaGF2ZWRSYXdJTygoYiJhYmMiLCBiImQiLCBiImVmZyIpKQogICAgICAgICBidWZpbyA9IHNlbGYudHAocmF3aW8pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnNlZWssIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIGJ1ZmlvLnRlbGwpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnNlZWssIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGJ1ZmlvLnRlbGwpCiAKICAgICBkZWYgdGVzdF9ub19leHRyYW5lb3VzX3JlYWQoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzk1NTA7IHdoZW4gdGhlIHJhdyBJTyBvYmplY3QgaGFzIHNhdGlzZmllZCB0aGUgcmVhZCByZXF1ZXN0LApAQCAtMTAzNSw2ICsxMTE1LDE0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIGZvciB7fToge30gIT0gMCIuZm9ybWF0KG4sIHJhd2lvLl9leHRyYW5lb3VzX3JlYWRzKSkKIAorICAgIGRlZiB0ZXN0X3JlYWRfb25fY2xvc2VkKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMzc5NgorICAgICAgICBiID0gaW8uQnVmZmVyZWRSZWFkZXIoaW8uQnl0ZXNJTyhiIjEyIikpCisgICAgICAgIGIucmVhZCgxKQorICAgICAgICBiLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYi5wZWVrKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBiLnJlYWQxLCAxKQorCiAKIGNsYXNzIENCdWZmZXJlZFJlYWRlclRlc3QoQnVmZmVyZWRSZWFkZXJUZXN0LCBTaXplb2ZUZXN0KToKICAgICB0cCA9IGlvLkJ1ZmZlcmVkUmVhZGVyCkBAIC0xMDY0LDE4ICsxMTUyLDE5IEBACiAgICAgICAgIGJ1ZmlvID0gc2VsZi50cChyYXdpbykKICAgICAgICAgIyBfcHlpby5CdWZmZXJlZFJlYWRlciBzZWVtcyB0byBpbXBsZW1lbnQgcmVhZGluZyBkaWZmZXJlbnQsIHNvIHRoYXQKICAgICAgICAgIyBjaGVja2luZyB0aGlzIGlzIG5vdCBzbyBlYXN5LgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5yZWFkLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgYnVmaW8ucmVhZCwgMTApCiAKICAgICBkZWYgdGVzdF9nYXJiYWdlX2NvbGxlY3Rpb24oc2VsZik6CiAgICAgICAgICMgQyBCdWZmZXJlZFJlYWRlciBvYmplY3RzIGFyZSBjb2xsZWN0ZWQuCiAgICAgICAgICMgVGhlIFB5dGhvbiB2ZXJzaW9uIGhhcyBfX2RlbF9fLCBzbyBpdCBlbmRzIGludG8gZ2MuZ2FyYmFnZSBpbnN0ZWFkCi0gICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQotICAgICAgICBmID0gc2VsZi50cChyYXdpbykKLSAgICAgICAgZi5mID0gZgotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCi0gICAgICAgIGRlbCBmCi0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSZXNvdXJjZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQorICAgICAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBmLmYgPSBmCisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgICAgICBkZWwgZgorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSwgd3IpCiAKICAgICBkZWYgdGVzdF9hcmdzX2Vycm9yKHNlbGYpOgogICAgICAgICAjIElzc3VlICMxNzI3NQpAQCAtMTMwOSwxMSArMTM5OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKGUpCiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgICAgIHRocmVhZHMgPSBbdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikgZm9yIHggaW4gcmFuZ2UoMjApXQotICAgICAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikgIyB5aWVsZAotICAgICAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN0YXJ0X3RocmVhZHModGhyZWFkcyk6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMikgIyB5aWVsZAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICAidGhlIGZvbGxvd2luZyBleGNlcHRpb25zIHdlcmUgY2F1Z2h0OiAlciIgJSBlcnJvcnMpCiAgICAgICAgICAgICAgICAgYnVmaW8uY2xvc2UoKQpAQCAtMTMyNyw5ICsxNDEzLDkgQEAKICAgICBkZWYgdGVzdF9taXNiZWhhdmVkX2lvKHNlbGYpOgogICAgICAgICByYXdpbyA9IHNlbGYuTWlzYmVoYXZlZFJhd0lPKCkKICAgICAgICAgYnVmaW8gPSBzZWxmLnRwKHJhd2lvLCA1KQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby5zZWVrLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby50ZWxsKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBidWZpby53cml0ZSwgYiJhYmNkZWYiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby5zZWVrLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby50ZWxsKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBidWZpby53cml0ZSwgYiJhYmNkZWYiKQogCiAgICAgZGVmIHRlc3RfbWF4X2J1ZmZlcl9zaXplX3JlbW92YWwoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKQEAgLTEzMzgsMTEgKzE0MjQsMTEgQEAKICAgICBkZWYgdGVzdF93cml0ZV9lcnJvcl9vbl9jbG9zZShzZWxmKToKICAgICAgICAgcmF3ID0gc2VsZi5Nb2NrUmF3SU8oKQogICAgICAgICBkZWYgYmFkX3dyaXRlKGIpOgotICAgICAgICAgICAgcmFpc2UgSU9FcnJvcigpCisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCkKICAgICAgICAgcmF3LndyaXRlID0gYmFkX3dyaXRlCiAgICAgICAgIGIgPSBzZWxmLnRwKHJhdykKICAgICAgICAgYi53cml0ZShiJ3NwYW0nKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBiLmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGIuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGIuY2xvc2VkKQogCiAKQEAgLTEzNzMsMTQgKzE0NTksMTUgQEAKICAgICAgICAgIyBDIEJ1ZmZlcmVkV3JpdGVyIG9iamVjdHMgYXJlIGNvbGxlY3RlZCwgYW5kIGNvbGxlY3RpbmcgdGhlbSBmbHVzaGVzCiAgICAgICAgICMgYWxsIGRhdGEgdG8gZGlzay4KICAgICAgICAgIyBUaGUgUHl0aG9uIHZlcnNpb24gaGFzIF9fZGVsX18sIHNvIGl0IGVuZHMgaW50byBnYy5nYXJiYWdlIGluc3RlYWQKLSAgICAgICAgcmF3aW8gPSBzZWxmLkZpbGVJTyhzdXBwb3J0LlRFU1RGTiwgIncrYiIpCi0gICAgICAgIGYgPSBzZWxmLnRwKHJhd2lvKQotICAgICAgICBmLndyaXRlKGIiMTIzeHh4IikKLSAgICAgICAgZi54ID0gZgotICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGYpCi0gICAgICAgIGRlbCBmCi0gICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cigpIGlzIE5vbmUsIHdyKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCcnLCBSZXNvdXJjZVdhcm5pbmcpKToKKyAgICAgICAgICAgIHJhd2lvID0gc2VsZi5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3K2IiKQorICAgICAgICAgICAgZiA9IHNlbGYudHAocmF3aW8pCisgICAgICAgICAgICBmLndyaXRlKGIiMTIzeHh4IikKKyAgICAgICAgICAgIGYueCA9IGYKKyAgICAgICAgICAgIHdyID0gd2Vha3JlZi5yZWYoZikKKyAgICAgICAgICAgIGRlbCBmCisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cigpLCB3cikKICAgICAgICAgd2l0aCBzZWxmLm9wZW4oc3VwcG9ydC5URVNURk4sICJyYiIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIjEyM3h4eCIpCiAKQEAgLTE0MjYsMTQgKzE1MTMsMTQgQEAKICAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLnRwLCBOb3RSZWFkYWJsZSgpLCBzZWxmLk1vY2tSYXdJTygpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLnRwLCBOb3RSZWFkYWJsZSgpLCBzZWxmLk1vY2tSYXdJTygpKQogCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Jfd2l0aF9ub3Rfd3JpdGVhYmxlKHNlbGYpOgogICAgICAgICBjbGFzcyBOb3RXcml0ZWFibGUoTW9ja1Jhd0lPKToKICAgICAgICAgICAgIGRlZiB3cml0YWJsZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzZWxmLnRwLCBzZWxmLk1vY2tSYXdJTygpLCBOb3RXcml0ZWFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi50cCwgc2VsZi5Nb2NrUmF3SU8oKSwgTm90V3JpdGVhYmxlKCkpCiAKICAgICBkZWYgdGVzdF9yZWFkKHNlbGYpOgogICAgICAgICBwYWlyID0gc2VsZi50cChzZWxmLkJ5dGVzSU8oYiJhYmNkZWYiKSwgc2VsZi5Nb2NrUmF3SU8oKSkKQEAgLTE1MDMsNiArMTU5MCw1MyBAQAogICAgICAgICBwYWlyLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIuY2xvc2VkKQogCisgICAgZGVmIHRlc3RfcmVhZGVyX2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICBkZWYgcmVhZGVyX2Nsb3NlKCk6CisgICAgICAgICAgICByZWFkZXJfbm9uX2V4aXN0aW5nCisgICAgICAgIHJlYWRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgcmVhZGVyLmNsb3NlID0gcmVhZGVyX2Nsb3NlCisgICAgICAgIHdyaXRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgcGFpciA9IHNlbGYudHAocmVhZGVyLCB3cml0ZXIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBwYWlyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigncmVhZGVyX25vbl9leGlzdGluZycsIHN0cihlcnIuZXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhaXIuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlYWRlci5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3cml0ZXIuY2xvc2VkKQorCisgICAgZGVmIHRlc3Rfd3JpdGVyX2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICBkZWYgd3JpdGVyX2Nsb3NlKCk6CisgICAgICAgICAgICB3cml0ZXJfbm9uX2V4aXN0aW5nCisgICAgICAgIHJlYWRlciA9IHNlbGYuTW9ja1Jhd0lPKCkKKyAgICAgICAgd3JpdGVyID0gc2VsZi5Nb2NrUmF3SU8oKQorICAgICAgICB3cml0ZXIuY2xvc2UgPSB3cml0ZXJfY2xvc2UKKyAgICAgICAgcGFpciA9IHNlbGYudHAocmVhZGVyLCB3cml0ZXIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTmFtZUVycm9yKSBhcyBlcnI6CisgICAgICAgICAgICBwYWlyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignd3JpdGVyX25vbl9leGlzdGluZycsIHN0cihlcnIuZXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwYWlyLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlYWRlci5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod3JpdGVyLmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X3JlYWRlcl93cml0ZXJfY2xvc2VfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CisgICAgICAgIGRlZiByZWFkZXJfY2xvc2UoKToKKyAgICAgICAgICAgIHJlYWRlcl9ub25fZXhpc3RpbmcKKyAgICAgICAgZGVmIHdyaXRlcl9jbG9zZSgpOgorICAgICAgICAgICAgd3JpdGVyX25vbl9leGlzdGluZworICAgICAgICByZWFkZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIHJlYWRlci5jbG9zZSA9IHJlYWRlcl9jbG9zZQorICAgICAgICB3cml0ZXIgPSBzZWxmLk1vY2tSYXdJTygpCisgICAgICAgIHdyaXRlci5jbG9zZSA9IHdyaXRlcl9jbG9zZQorICAgICAgICBwYWlyID0gc2VsZi50cChyZWFkZXIsIHdyaXRlcikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGVycjoKKyAgICAgICAgICAgIHBhaXIuY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdyZWFkZXJfbm9uX2V4aXN0aW5nJywgc3RyKGVyci5leGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXywgTmFtZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEluKCd3cml0ZXJfbm9uX2V4aXN0aW5nJywgc3RyKGVyci5leGNlcHRpb24uX19jb250ZXh0X18pKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhaXIuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlYWRlci5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod3JpdGVyLmNsb3NlZCkKKwogICAgIGRlZiB0ZXN0X2lzYXR0eShzZWxmKToKICAgICAgICAgY2xhc3MgU2VsZWN0YWJsZUlzQXR0eShNb2NrUmF3SU8pOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlzYXR0eSk6CkBAIC0xOTYxLDYgKzIwOTUsMTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Ll9faW5pdF9fLCBiLCBuZXdsaW5lPTQyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0Ll9faW5pdF9fLCBiLCBuZXdsaW5lPSd4eXp6eScpCiAKKyAgICBkZWYgdGVzdF91bmluaXRpYWxpemVkKHNlbGYpOgorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyLl9fbmV3X18oc2VsZi5UZXh0SU9XcmFwcGVyKQorICAgICAgICBkZWwgdAorICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyLl9fbmV3X18oc2VsZi5UZXh0SU9XcmFwcGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHJlcHIsIHQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoKFZhbHVlRXJyb3IsIEF0dHJpYnV0ZUVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndW5pbml0aWFsaXplZHxoYXMgbm8gYXR0cmlidXRlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LnJlYWQsIDApCisgICAgICAgIHQuX19pbml0X18oc2VsZi5Nb2NrUmF3SU8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnJlYWQoMCksICcnKQorCiAgICAgZGVmIHRlc3Rfbm9uX3RleHRfZW5jb2RpbmdfY29kZWNzX2FyZV9yZWplY3RlZChzZWxmKToKICAgICAgICAgIyBFbnN1cmUgdGhlIGNvbnN0cnVjdG9yIGNvbXBsYWlucyBpZiBwYXNzZWQgYSBjb2RlYyB0aGF0IGlzbid0CiAgICAgICAgICMgbWFya2VkIGFzIGEgdGV4dCBlbmNvZGluZwpAQCAtMTk2OCw3ICsyMTEzLDcgQEAKICAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCiAgICAgICAgIGIgPSBzZWxmLkJ1ZmZlcmVkV3JpdGVyKHIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChMb29rdXBFcnJvciwgImlzIG5vdCBhIHRleHQgZW5jb2RpbmciKToKLSAgICAgICAgICAgIHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iaGV4X2NvZGVjIikKKyAgICAgICAgICAgIHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iaGV4IikKIAogICAgIGRlZiB0ZXN0X2RldGFjaChzZWxmKToKICAgICAgICAgciA9IHNlbGYuQnl0ZXNJTygpCkBAIC0xOTgzLDYgKzIxMjgsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmdldHZhbHVlKCksIGIiaG93ZHkiKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0LmRldGFjaCkKIAorICAgICAgICAjIE9wZXJhdGlvbnMgaW5kZXBlbmRlbnQgb2YgdGhlIGRldGFjaGVkIHN0cmVhbSBzaG91bGQgc3RpbGwgd29yaworICAgICAgICByZXByKHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5lbmNvZGluZywgImFzY2lpIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmVycm9ycywgInN0cmljdCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5saW5lX2J1ZmZlcmluZykKKwogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIHJhdyA9IHNlbGYuQnl0ZXNJTygiaGVsbG8iLmVuY29kZSgidXRmLTgiKSkKICAgICAgICAgYiA9IHNlbGYuQnVmZmVyZWRSZWFkZXIocmF3KQpAQCAtMjAwMCw2ICsyMTUxLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICI8JXMuVGV4dElPV3JhcHBlciBuYW1lPWInZHVtbXknIG1vZGU9J3InIGVuY29kaW5nPSd1dGYtOCc+IiAlIG1vZG5hbWUpCiAKKyAgICAgICAgdC5idWZmZXIuZGV0YWNoKCkKKyAgICAgICAgcmVwcih0KSAgIyBTaG91bGQgbm90IHJhaXNlIGFuIGV4Y2VwdGlvbgorCiAgICAgZGVmIHRlc3RfbGluZV9idWZmZXJpbmcoc2VsZik6CiAgICAgICAgIHIgPSBzZWxmLkJ5dGVzSU8oKQogICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyLCAxMDAwKQpAQCAtMjA0NSw3ICsyMTk5LDcgQEAKICAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0idXRmLTgiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZW5jb2RpbmcsICJ1dGYtOCIpCiAgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuZW5jb2RpbmcgaXMgbm90IE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHQuZW5jb2RpbmcpCiAgICAgICAgIGNvZGVjcy5sb29rdXAodC5lbmNvZGluZykKIAogICAgIGRlZiB0ZXN0X2VuY29kaW5nX2Vycm9yc19yZWFkaW5nKHNlbGYpOgpAQCAtMjIxNSw3ICsyMzY5LDcgQEAKICAgICAgICAgaWYgczoKICAgICAgICAgICAgICMgVGhlIGRlc3RydWN0b3IgKm1heSogaGF2ZSBwcmludGVkIGFuIHVucmFpc2FibGUgZXJyb3IsIGNoZWNrIGl0CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzLnNwbGl0bGluZXMoKSksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gSU9FcnJvcjogIiksIHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJFeGNlcHRpb24gT1NFcnJvcjogIiksIHMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5lbmRzd2l0aCgiIGlnbm9yZWQiKSwgcykKIAogICAgICMgU3lzdGVtYXRpYyB0ZXN0cyBvZiB0aGUgdGV4dCBJL08gQVBJCkBAIC0yMjg3LDcgKzI0NDEsNyBAQAogICAgICAgICBmLnNlZWsoMCkKICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZSwgIlx4ZmZcbiIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBmLnRlbGwpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBmLnRlbGwpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi50ZWxsKCksIHAyKQogICAgICAgICBmLmNsb3NlKCkKIApAQCAtMjM5MSw3ICsyNTQ1LDcgQEAKICAgICAgICAgICAgIGRlZiByZWFkYWJsZShzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgdHh0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKFVuUmVhZGFibGUoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdHh0LnJlYWQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHR4dC5yZWFkKQogCiAgICAgZGVmIHRlc3RfcmVhZF9vbmVfYnlfb25lKHNlbGYpOgogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKGIiQUFcclxuQkIiKSkKQEAgLTI1MzQsNiArMjY4OCwxOSBAQAogICAgICAgICAgICAgd2l0aCBzZWxmLm9wZW4oZmlsZW5hbWUsICdyYicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2JiYnp6eicuZW5jb2RlKGNoYXJzZXQpKQogCisgICAgZGVmIHRlc3Rfc2Vla19hcHBlbmRfYm9tKHNlbGYpOgorICAgICAgICAjIFNhbWUgdGVzdCwgYnV0IGZpcnN0IHNlZWsgdG8gdGhlIHN0YXJ0IGFuZCB0aGVuIHRvIHRoZSBlbmQKKyAgICAgICAgZmlsZW5hbWUgPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICBmb3IgY2hhcnNldCBpbiAoJ3V0Zi04LXNpZycsICd1dGYtMTYnLCAndXRmLTMyJyk6CisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3cnLCBlbmNvZGluZz1jaGFyc2V0KSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoJ2FhYScpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ2EnLCBlbmNvZGluZz1jaGFyc2V0KSBhcyBmOgorICAgICAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgICAgIGYuc2VlaygwLCBzZWxmLlNFRUtfRU5EKQorICAgICAgICAgICAgICAgIGYud3JpdGUoJ3h4eCcpCisgICAgICAgICAgICB3aXRoIHNlbGYub3BlbihmaWxlbmFtZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnYWFheHh4Jy5lbmNvZGUoY2hhcnNldCkpCisKICAgICBkZWYgdGVzdF9lcnJvcnNfcHJvcGVydHkoc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZXJyb3JzLCAic3RyaWN0IikKQEAgLTI1NTAsMjYgKzI3MTcsNjQgQEAKICAgICAgICAgICAgICAgICB0ZXh0ID0gIlRocmVhZCUwM2RcbiIgJSBuCiAgICAgICAgICAgICAgICAgZXZlbnQud2FpdCgpCiAgICAgICAgICAgICAgICAgZi53cml0ZSh0ZXh0KQotICAgICAgICAgICAgdGhyZWFkcyA9IFt0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGEgbj14OiBydW4obikpCisgICAgICAgICAgICB0aHJlYWRzID0gW3RocmVhZGluZy5UaHJlYWQodGFyZ2V0PXJ1biwgYXJncz0oeCwpKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgeCBpbiByYW5nZSgyMCldCi0gICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKQotICAgICAgICAgICAgZXZlbnQuc2V0KCkKLSAgICAgICAgICAgIGZvciB0IGluIHRocmVhZHM6Ci0gICAgICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5zdGFydF90aHJlYWRzKHRocmVhZHMsIGV2ZW50LnNldCk6CisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAyKQogICAgICAgICB3aXRoIHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTikgYXMgZjoKICAgICAgICAgICAgIGNvbnRlbnQgPSBmLnJlYWQoKQogICAgICAgICAgICAgZm9yIG4gaW4gcmFuZ2UoMjApOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudC5jb3VudCgiVGhyZWFkJTAzZFxuIiAlIG4pLCAxKQogCiAgICAgZGVmIHRlc3RfZmx1c2hfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRleHQgZmlsZSBpcyBjbG9zZWQgZGVzcGl0ZSBmYWlsZWQgZmx1c2gKKyAgICAgICAgIyBhbmQgdGhhdCBmbHVzaCgpIGlzIGNhbGxlZCBiZWZvcmUgZmlsZSBjbG9zZWQuCiAgICAgICAgIHR4dCA9IHNlbGYuVGV4dElPV3JhcHBlcihzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSksIGVuY29kaW5nPSJhc2NpaSIpCisgICAgICAgIGNsb3NlZCA9IFtdCiAgICAgICAgIGRlZiBiYWRfZmx1c2goKToKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoKQorICAgICAgICAgICAgY2xvc2VkWzpdID0gW3R4dC5jbG9zZWQsIHR4dC5idWZmZXIuY2xvc2VkXQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgICAgIHR4dC5mbHVzaCA9IGJhZF9mbHVzaAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCB0eHQuY2xvc2UpICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdHh0LmNsb3NlKSAjIGV4Y2VwdGlvbiBub3Qgc3dhbGxvd2VkCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0eHQuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodHh0LmJ1ZmZlci5jbG9zZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjbG9zZWQpICAgICAgIyBmbHVzaCgpIGNhbGxlZAorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGNsb3NlZFswXSkgICMgZmx1c2goKSBjYWxsZWQgYmVmb3JlIGZpbGUgY2xvc2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY2xvc2VkWzFdKQorICAgICAgICB0eHQuZmx1c2ggPSBsYW1iZGE6IE5vbmUgICMgYnJlYWsgcmVmZXJlbmNlIGxvb3AKKworICAgIGRlZiB0ZXN0X2Nsb3NlX2Vycm9yX29uX2Nsb3NlKHNlbGYpOgorICAgICAgICBidWZmZXIgPSBzZWxmLkJ5dGVzSU8oc2VsZi50ZXN0ZGF0YSkKKyAgICAgICAgZGVmIGJhZF9mbHVzaCgpOgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignZmx1c2gnKQorICAgICAgICBkZWYgYmFkX2Nsb3NlKCk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdjbG9zZScpCisgICAgICAgIGJ1ZmZlci5jbG9zZSA9IGJhZF9jbG9zZQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQuZmx1c2ggPSBiYWRfZmx1c2gKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBlcnI6ICMgZXhjZXB0aW9uIG5vdCBzd2FsbG93ZWQKKyAgICAgICAgICAgIHR4dC5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmV4Y2VwdGlvbi5hcmdzLCAoJ2Nsb3NlJywpKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXywgT1NFcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXhjZXB0aW9uLl9fY29udGV4dF9fLmFyZ3MsICgnZmx1c2gnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHh0LmNsb3NlZCkKKworICAgIGRlZiB0ZXN0X25vbm5vcm1hbGl6ZWRfY2xvc2VfZXJyb3Jfb25fY2xvc2Uoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxNjc3CisgICAgICAgIGJ1ZmZlciA9IHNlbGYuQnl0ZXNJTyhzZWxmLnRlc3RkYXRhKQorICAgICAgICBkZWYgYmFkX2ZsdXNoKCk6CisgICAgICAgICAgICByYWlzZSBub25fZXhpc3RpbmdfZmx1c2gKKyAgICAgICAgZGVmIGJhZF9jbG9zZSgpOgorICAgICAgICAgICAgcmFpc2Ugbm9uX2V4aXN0aW5nX2Nsb3NlCisgICAgICAgIGJ1ZmZlci5jbG9zZSA9IGJhZF9jbG9zZQorICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZz0iYXNjaWkiKQorICAgICAgICB0eHQuZmx1c2ggPSBiYWRfZmx1c2gKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGVycjogIyBleGNlcHRpb24gbm90IHN3YWxsb3dlZAorICAgICAgICAgICAgdHh0LmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbignbm9uX2V4aXN0aW5nX2Nsb3NlJywgc3RyKGVyci5leGNlcHRpb24pKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXywgTmFtZUVycm9yKQorICAgICAgICBzZWxmLmFzc2VydEluKCdub25fZXhpc3RpbmdfZmx1c2gnLCBzdHIoZXJyLmV4Y2VwdGlvbi5fX2NvbnRleHRfXykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHh0LmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X211bHRpX2Nsb3NlKHNlbGYpOgogICAgICAgICB0eHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoc2VsZi5CeXRlc0lPKHNlbGYudGVzdGRhdGEpLCBlbmNvZGluZz0iYXNjaWkiKQpAQCAtMjYxMCw2ICsyODE1LDM4IEBACiAgICAgICAgIHR4dC53cml0ZSgnNScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicnLmpvaW4ocmF3Ll93cml0ZV9zdGFjayksIGInMTIzXG40NScpCiAKKyAgICBkZWYgdGVzdF9idWZpb193cml0ZV90aHJvdWdoKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTM5Njogd3JpdGVfdGhyb3VnaD1UcnVlIGRvZXNuJ3QgZm9yY2UgYSBmbHVzaCgpCisgICAgICAgICMgb24gdGhlIHVuZGVybHlpbmcgYmluYXJ5IGJ1ZmZlcmVkIG9iamVjdC4KKyAgICAgICAgZmx1c2hfY2FsbGVkLCB3cml0ZV9jYWxsZWQgPSBbXSwgW10KKyAgICAgICAgY2xhc3MgQnVmZmVyZWRXcml0ZXIoc2VsZi5CdWZmZXJlZFdyaXRlcik6CisgICAgICAgICAgICBkZWYgZmx1c2goc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICAgICBmbHVzaF9jYWxsZWQuYXBwZW5kKFRydWUpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuZmx1c2goKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZGVmIHdyaXRlKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICAgICAgd3JpdGVfY2FsbGVkLmFwcGVuZChUcnVlKQorICAgICAgICAgICAgICAgIHJldHVybiBzdXBlcigpLndyaXRlKCphcmdzLCAqKmt3YXJncykKKworICAgICAgICByYXdpbyA9IHNlbGYuQnl0ZXNJTygpCisgICAgICAgIGRhdGEgPSBiImEiCisgICAgICAgIGJ1ZmlvID0gQnVmZmVyZWRXcml0ZXIocmF3aW8sIGxlbihkYXRhKSoyKQorICAgICAgICB0ZXh0aW8gPSBzZWxmLlRleHRJT1dyYXBwZXIoYnVmaW8sIGVuY29kaW5nPSdhc2NpaScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZV90aHJvdWdoPVRydWUpCisgICAgICAgICMgd3JpdGUgdG8gdGhlIGJ1ZmZlcmVkIGlvIGJ1dCBkb24ndCBvdmVyZmxvdyB0aGUgYnVmZmVyCisgICAgICAgIHRleHQgPSBkYXRhLmRlY29kZSgnYXNjaWknKQorICAgICAgICB0ZXh0aW8ud3JpdGUodGV4dCkKKworICAgICAgICAjIGJ1ZmZlci5mbHVzaCBpcyBub3QgY2FsbGVkIHdpdGggd3JpdGVfdGhyb3VnaD1UcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmx1c2hfY2FsbGVkKQorICAgICAgICAjIGJ1ZmZlci53cml0ZSAqaXMqIGNhbGxlZCB3aXRoIHdyaXRlX3Rocm91Z2g9VHJ1ZQorICAgICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLmdldHZhbHVlKCksIGIiIikgIyBubyBmbHVzaAorCisgICAgICAgIHdyaXRlX2NhbGxlZCA9IFtdICMgcmVzZXQKKyAgICAgICAgdGV4dGlvLndyaXRlKHRleHQgKiAxMCkgIyB0b3RhbCBjb250ZW50IGlzIGxhcmdlciB0aGFuIGJ1ZmlvIGJ1ZmZlcgorICAgICAgICBzZWxmLmFzc2VydFRydWUod3JpdGVfY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhd2lvLmdldHZhbHVlKCksIGRhdGEgKiAxMSkgIyBhbGwgZmx1c2hlZAorCiAgICAgZGVmIHRlc3RfcmVhZF9ub25ieXRlcyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMTcxMDYKICAgICAgICAgIyBDcmFzaCB3aGVuIHVuZGVybHlpbmcgcmVhZCgpIHJldHVybnMgbm9uLWJ5dGVzCkBAIC0yNjI0LDExICsyODYxLDExIEBACiAgICAgICAgICMgSXNzdWUgIzE3MTA2CiAgICAgICAgICMgQnlwYXNzIHRoZSBlYXJseSBlbmNvZGluZyBjaGVjayBhZGRlZCBpbiBpc3N1ZSAyMDQwNAogICAgICAgICBkZWYgX21ha2VfaWxsZWdhbF93cmFwcGVyKCk6Ci0gICAgICAgICAgICBxdW9wcmkgPSBjb2RlY3MubG9va3VwKCJxdW9wcmlfY29kZWMiKQorICAgICAgICAgICAgcXVvcHJpID0gY29kZWNzLmxvb2t1cCgicXVvcHJpIikKICAgICAgICAgICAgIHF1b3ByaS5faXNfdGV4dF9lbmNvZGluZyA9IFRydWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0ID0gc2VsZi5UZXh0SU9XcmFwcGVyKHNlbGYuQnl0ZXNJTyhiJ2FhYWFhYScpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3bGluZT0nXG4nLCBlbmNvZGluZz0icXVvcHJpX2NvZGVjIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2xpbmU9J1xuJywgZW5jb2Rpbmc9InF1b3ByaSIpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHF1b3ByaS5faXNfdGV4dF9lbmNvZGluZyA9IEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gdApAQCAtMjY0MCw4ICsyODc3LDYxIEBACiAgICAgICAgIHQgPSBfbWFrZV9pbGxlZ2FsX3dyYXBwZXIoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQucmVhZCkKIAorICAgIGRlZiBfY2hlY2tfY3JlYXRlX2F0X3NodXRkb3duKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgIyBJc3N1ZSAjMjAwMzc6IGNyZWF0aW5nIGEgVGV4dElPV3JhcHBlciBhdCBzaHV0ZG93bgorICAgICAgICAjIHNob3VsZG4ndCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIuCisgICAgICAgIGlvbW9kID0gc2VsZi5pby5fX25hbWVfXworICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBjb2RlY3MKKyAgICAgICAgICAgIGltcG9ydCB7aW9tb2R9IGFzIGlvCisKKyAgICAgICAgICAgICMgQXZvaWQgbG9va2luZyB1cCBjb2RlY3MgYXQgc2h1dGRvd24KKyAgICAgICAgICAgIGNvZGVjcy5sb29rdXAoJ3V0Zi04JykKKworICAgICAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYnVmID0gaW8uQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIGlvLlRleHRJT1dyYXBwZXIoc2VsZi5idWYsICoqe2t3YXJnc30pCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJvayIpCisgICAgICAgICAgICBjID0gQygpCisgICAgICAgICAgICAiIiIuZm9ybWF0KGlvbW9kPWlvbW9kLCBrd2FyZ3M9a3dhcmdzKQorICAgICAgICByZXR1cm4gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBjb2RlKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2F0X3NodXRkb3duX3dpdGhvdXRfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYuX2NoZWNrX2NyZWF0ZV9hdF9zaHV0ZG93bigpCisgICAgICAgIGlmIGVycjoKKyAgICAgICAgICAgICMgQ2FuIGVycm9yIG91dCB3aXRoIGEgUnVudGltZUVycm9yIGlmIHRoZSBtb2R1bGUgc3RhdGUKKyAgICAgICAgICAgICMgaXNuJ3QgZm91bmQuCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuc2h1dGRvd25fZXJyb3IsIGVyci5kZWNvZGUoKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9rIiwgb3V0LmRlY29kZSgpLnN0cmlwKCkpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfYXRfc2h1dGRvd25fd2l0aF9lbmNvZGluZyhzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi5fY2hlY2tfY3JlYXRlX2F0X3NodXRkb3duKGVuY29kaW5nPSd1dGYtOCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM9J3N0cmljdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvayIsIG91dC5kZWNvZGUoKS5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfaXNzdWUyMjg0OShzZWxmKToKKyAgICAgICAgY2xhc3MgRihvYmplY3QpOgorICAgICAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOiByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOiByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZGVmIHNlZWthYmxlKHNlbGYpOiByZXR1cm4gVHJ1ZQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLlRleHRJT1dyYXBwZXIoRigpLCBlbmNvZGluZz0ndXRmLTgnKQorICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgRi50ZWxsID0gbGFtYmRhIHg6IDAKKyAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihGKCksIGVuY29kaW5nPSd1dGYtOCcpCisKIAogY2xhc3MgQ1RleHRJT1dyYXBwZXJUZXN0KFRleHRJT1dyYXBwZXJUZXN0KToKKyAgICBpbyA9IGlvCisgICAgc2h1dGRvd25fZXJyb3IgPSAiUnVudGltZUVycm9yOiBjb3VsZCBub3QgZmluZCBpbyBtb2R1bGUgc3RhdGUiCiAKICAgICBkZWYgdGVzdF9pbml0aWFsaXphdGlvbihzZWxmKToKICAgICAgICAgciA9IHNlbGYuQnl0ZXNJTyhiIlx4YzNceGE5XG5cbiIpCkBAIC0yNjUyLDE5ICsyOTQyLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHQuX19pbml0X18sIGIsIG5ld2xpbmU9J3h5enp5JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdC5yZWFkKQogCisgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIuX19uZXdfXyhzZWxmLlRleHRJT1dyYXBwZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbiwgcmVwciwgdCkKKwogICAgIGRlZiB0ZXN0X2dhcmJhZ2VfY29sbGVjdGlvbihzZWxmKToKICAgICAgICAgIyBDIFRleHRJT1dyYXBwZXIgb2JqZWN0cyBhcmUgY29sbGVjdGVkLCBhbmQgY29sbGVjdGluZyB0aGVtIGZsdXNoZXMKICAgICAgICAgIyBhbGwgZGF0YSB0byBkaXNrLgogICAgICAgICAjIFRoZSBQeXRob24gdmVyc2lvbiBoYXMgX19kZWxfXywgc28gaXQgZW5kcyBpbiBnYy5nYXJiYWdlIGluc3RlYWQuCi0gICAgICAgIHJhd2lvID0gaW8uRmlsZUlPKHN1cHBvcnQuVEVTVEZOLCAid2IiKQotICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyYXdpbykKLSAgICAgICAgdCA9IHNlbGYuVGV4dElPV3JhcHBlcihiLCBlbmNvZGluZz0iYXNjaWkiKQotICAgICAgICB0LndyaXRlKCI0NTZkZWYiKQotICAgICAgICB0LnggPSB0Ci0gICAgICAgIHdyID0gd2Vha3JlZi5yZWYodCkKLSAgICAgICAgZGVsIHQKLSAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdyKCkgaXMgTm9uZSwgd3IpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgcmF3aW8gPSBpby5GaWxlSU8oc3VwcG9ydC5URVNURk4sICJ3YiIpCisgICAgICAgICAgICBiID0gc2VsZi5CdWZmZXJlZFdyaXRlcihyYXdpbykKKyAgICAgICAgICAgIHQgPSBzZWxmLlRleHRJT1dyYXBwZXIoYiwgZW5jb2Rpbmc9ImFzY2lpIikKKyAgICAgICAgICAgIHQud3JpdGUoIjQ1NmRlZiIpCisgICAgICAgICAgICB0LnggPSB0CisgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKHQpCisgICAgICAgICAgICBkZWwgdAorICAgICAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSwgd3IpCiAgICAgICAgIHdpdGggc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgYiI0NTZkZWYiKQogCkBAIC0yNjg0LDcgKzI5NzgsOSBAQAogCiAKIGNsYXNzIFB5VGV4dElPV3JhcHBlclRlc3QoVGV4dElPV3JhcHBlclRlc3QpOgotICAgIHBhc3MKKyAgICBpbyA9IHB5aW8KKyAgICAjc2h1dGRvd25fZXJyb3IgPSAiTG9va3VwRXJyb3I6IHVua25vd24gZW5jb2Rpbmc6IGFzY2lpIgorICAgIHNodXRkb3duX2Vycm9yID0gIlR5cGVFcnJvcjogJ05vbmVUeXBlJyBvYmplY3QgaXMgbm90IGl0ZXJhYmxlIgogCiAKIGNsYXNzIEluY3JlbWVudGFsTmV3bGluZURlY29kZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTI4MTAsNyArMzEwNiw3IEBACiAgICAgZGVmIHRlc3RfX19hbGxfXyhzZWxmKToKICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5pby5fX2FsbF9fOgogICAgICAgICAgICAgb2JqID0gZ2V0YXR0cihzZWxmLmlvLCBuYW1lLCBOb25lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iaiBpcyBub3QgTm9uZSwgbmFtZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKG9iaiwgbmFtZSkKICAgICAgICAgICAgIGlmIG5hbWUgPT0gIm9wZW4iOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICBlbGlmICJlcnJvciIgaW4gbmFtZS5sb3dlcigpIG9yIG5hbWUgPT0gIlVuc3VwcG9ydGVkT3BlcmF0aW9uIjoKQEAgLTI4MjMsNyArMzExOSw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5tb2RlLCAid2IiKQogICAgICAgICBmLmNsb3NlKCkKIAotICAgICAgICBmID0gc2VsZi5vcGVuKHN1cHBvcnQuVEVTVEZOLCAiVSIpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygoJycsIERlcHJlY2F0aW9uV2FybmluZykpOgorICAgICAgICAgICAgZiA9IHNlbGYub3BlbihzdXBwb3J0LlRFU1RGTiwgIlUiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYubmFtZSwgICAgICAgICAgICBzdXBwb3J0LlRFU1RGTikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmJ1ZmZlci5uYW1lLCAgICAgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5idWZmZXIucmF3Lm5hbWUsIHN1cHBvcnQuVEVTVEZOKQpAQCAtMjg5OSw3ICszMTk2LDcgQEAKICAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihjKQogICAgICAgICBkZWwgYywgYgogICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQotICAgICAgICBzZWxmLmFzc2VydFRydWUod3IoKSBpcyBOb25lLCB3cikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSwgd3IpCiAKICAgICBkZWYgdGVzdF9hYmNzKHNlbGYpOgogICAgICAgICAjIFRlc3QgdGhlIHZpc2libGUgYmFzZSBjbGFzc2VzIGFyZSBBQkNzLgpAQCAtMjk1Myw3ICszMjUwLDcgQEAKICAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xlYW51cF9mZHMpCkBAIC0zMDUxLDcgKzMzNDgsNyBAQAogICAgICAgICAgICAgcmVjZWl2ZWQgKz0gaXRlcihyZi5yZWFkLCBOb25lKQogCiAgICAgICAgIHNlbnQsIHJlY2VpdmVkID0gYicnLmpvaW4oc2VudCksIGInJy5qb2luKHJlY2VpdmVkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VudCA9PSByZWNlaXZlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZW50LCByZWNlaXZlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdmLmNsb3NlZCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJmLmNsb3NlZCkKIApAQCAtMzA3NSw3ICszMzcyLDYgQEAKIAogY2xhc3MgQ01pc2NJT1Rlc3QoTWlzY0lPVGVzdCk6CiAgICAgaW8gPSBpbwotICAgIHNodXRkb3duX2Vycm9yID0gIlJ1bnRpbWVFcnJvcjogY291bGQgbm90IGZpbmQgaW8gbW9kdWxlIHN0YXRlIgogCiAgICAgZGVmIHRlc3RfcmVhZGludG9fYnVmZmVyX292ZXJmbG93KHNlbGYpOgogICAgICAgICAjIElzc3VlICMxODAyNQpAQCAtMzA4Niw5ICszMzgyLDUxIEBACiAgICAgICAgIGIgPSBieXRlYXJyYXkoMikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYnVmaW8ucmVhZGludG8sIGIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiBjaGVja19kYWVtb25fdGhyZWFkc19zaHV0ZG93bl9kZWFkbG9jayhzZWxmLCBzdHJlYW1fbmFtZSk6CisgICAgICAgICMgSXNzdWUgIzIzMzA5OiBkZWFkbG9ja3MgYXQgc2h1dGRvd24gc2hvdWxkIGJlIGF2b2lkZWQgd2hlbiBhCisgICAgICAgICMgZGFlbW9uIHRocmVhZCBhbmQgdGhlIG1haW4gdGhyZWFkIGJvdGggd3JpdGUgdG8gYSBmaWxlLgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIGZpbGUgPSBzeXMue3N0cmVhbV9uYW1lfQorCisgICAgICAgICAgICBkZWYgcnVuKCk6CisgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgZmlsZS53cml0ZSgnLicpCisgICAgICAgICAgICAgICAgICAgIGZpbGUuZmx1c2goKQorCisgICAgICAgICAgICB0aHJlYWQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW4pCisgICAgICAgICAgICB0aHJlYWQuZGFlbW9uID0gVHJ1ZQorICAgICAgICAgICAgdGhyZWFkLnN0YXJ0KCkKKworICAgICAgICAgICAgdGltZS5zbGVlcCgwLjUpCisgICAgICAgICAgICBmaWxlLndyaXRlKCchJykKKyAgICAgICAgICAgIGZpbGUuZmx1c2goKQorICAgICAgICAgICAgIiIiLmZvcm1hdF9tYXAobG9jYWxzKCkpCisgICAgICAgIHJlcywgXyA9IHJ1bl9weXRob25fdW50aWxfZW5kKCItYyIsIGNvZGUpCisgICAgICAgIGVyciA9IHJlcy5lcnIuZGVjb2RlKCkKKyAgICAgICAgaWYgcmVzLnJjICE9IDA6CisgICAgICAgICAgICAjIEZhaWx1cmU6IHNob3VsZCBiZSBhIGZhdGFsIGVycm9yCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJGYXRhbCBQeXRob24gZXJyb3I6IGNvdWxkIG5vdCBhY3F1aXJlIGxvY2sgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIDxfaW8uQnVmZmVyZWRXcml0ZXIgbmFtZT0nPHtzdHJlYW1fbmFtZX0+Jz4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAiYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24sIHBvc3NpYmx5IGR1ZSB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJkYWVtb24gdGhyZWFkcyIuZm9ybWF0X21hcChsb2NhbHMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGVycikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyLnN0cmlwKCcuIScpKQorCisgICAgZGVmIHRlc3RfZGFlbW9uX3RocmVhZHNfc2h1dGRvd25fc3Rkb3V0X2RlYWRsb2NrKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2RhZW1vbl90aHJlYWRzX3NodXRkb3duX2RlYWRsb2NrKCdzdGRvdXQnKQorCisgICAgZGVmIHRlc3RfZGFlbW9uX3RocmVhZHNfc2h1dGRvd25fc3RkZXJyX2RlYWRsb2NrKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2RhZW1vbl90aHJlYWRzX3NodXRkb3duX2RlYWRsb2NrKCdzdGRlcnInKQorCisKIGNsYXNzIFB5TWlzY0lPVGVzdChNaXNjSU9UZXN0KToKICAgICBpbyA9IHB5aW8KLSAgICBzaHV0ZG93bl9lcnJvciA9ICJMb29rdXBFcnJvcjogdW5rbm93biBlbmNvZGluZzogYXNjaWkiCiAKIAogQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICdQT1NJWCBzaWduYWxzIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKQEAgLTMxMjEsMTYgKzM0NTksMTkgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2lvID0gc2VsZi5pby5vcGVuKHcsICoqZmRvcGVuX2t3YXJncykKICAgICAgICAgICAgIHQuc3RhcnQoKQotICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCiAgICAgICAgICAgICAjIEZpbGwgdGhlIHBpcGUgZW5vdWdoIHRoYXQgdGhlIHdyaXRlIHdpbGwgYmUgYmxvY2tpbmcuCiAgICAgICAgICAgICAjIEl0IHdpbGwgYmUgaW50ZXJydXB0ZWQgYnkgdGhlIHRpbWVyIGFybWVkIGFib3ZlLiAgU2luY2UgdGhlCiAgICAgICAgICAgICAjIG90aGVyIHRocmVhZCBoYXMgcmVhZCBvbmUgYnl0ZSwgdGhlIGxvdy1sZXZlbCB3cml0ZSB3aWxsCiAgICAgICAgICAgICAjIHJldHVybiB3aXRoIGEgc3VjY2Vzc2Z1bCAocGFydGlhbCkgcmVzdWx0IHJhdGhlciB0aGFuIGFuIEVJTlRSLgogICAgICAgICAgICAgIyBUaGUgYnVmZmVyZWQgSU8gbGF5ZXIgbXVzdCBjaGVjayBmb3IgcGVuZGluZyBzaWduYWwKICAgICAgICAgICAgICMgaGFuZGxlcnMsIHdoaWNoIGluIHRoaXMgY2FzZSB3aWxsIGludm9rZSBhbGFybV9pbnRlcnJ1cHQoKS4KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lvLndyaXRlLCBpdGVtICogKHN1cHBvcnQuUElQRV9NQVhfU0laRSAvLyBsZW4oaXRlbSkgKyAxKSkKLSAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICBzaWduYWwuYWxhcm0oMSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFplcm9EaXZpc2lvbkVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgd2lvLndyaXRlKGl0ZW0gKiAoc3VwcG9ydC5QSVBFX01BWF9TSVpFIC8vIGxlbihpdGVtKSArIDEpKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzaWduYWwuYWxhcm0oMCkKKyAgICAgICAgICAgICAgICB0LmpvaW4oKQogICAgICAgICAgICAgIyBXZSBnb3Qgb25lIGJ5dGUsIGdldCBhbm90aGVyIG9uZSBhbmQgY2hlY2sgdGhhdCBpdCBpc24ndCBhCiAgICAgICAgICAgICAjIHJlcGVhdCBvZiB0aGUgZmlyc3Qgb25lLgogICAgICAgICAgICAgcmVhZF9yZXN1bHRzLmFwcGVuZChvcy5yZWFkKHIsIDEpKQpAQCAtMzE0Myw3ICszNDg0LDcgQEAKICAgICAgICAgICAgICMgYnVmZmVyLCBhbmQgYmxvY2sgYWdhaW4uCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2lvLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKQEAgLTMxNTMsNiArMzQ5NCw4IEBACiAgICAgZGVmIHRlc3RfaW50ZXJydXB0ZWRfd3JpdGVfYnVmZmVyZWQoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2tfaW50ZXJydXB0ZWRfd3JpdGUoYiJ4eSIsIGIieHkiLCBtb2RlPSJ3YiIpCiAKKyAgICAjIElzc3VlICMyMjMzMTogVGhlIHRlc3QgaGFuZ3Mgb24gRnJlZUJTRCA3LjIKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19mcmVlYnNkX3ZlcnNpb24oOCkKICAgICBkZWYgdGVzdF9pbnRlcnJ1cHRlZF93cml0ZV90ZXh0KHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2ludGVycnVwdGVkX3dyaXRlKCJ4eSIsIGIieHkiLCBtb2RlPSJ3IiwgZW5jb2Rpbmc9ImFzY2lpIikKIApAQCAtMzIzNiwxMSArMzU3OSwxNiBAQAogICAgICAgICAjIHJlY2VpdmVkIChmb3JjaW5nIGEgZmlyc3QgRUlOVFIgaW4gd3JpdGUoKSkuCiAgICAgICAgIHJlYWRfcmVzdWx0cyA9IFtdCiAgICAgICAgIHdyaXRlX2ZpbmlzaGVkID0gRmFsc2UKKyAgICAgICAgZXJyb3IgPSBOb25lCiAgICAgICAgIGRlZiBfcmVhZCgpOgotICAgICAgICAgICAgd2hpbGUgbm90IHdyaXRlX2ZpbmlzaGVkOgotICAgICAgICAgICAgICAgIHdoaWxlIHIgaW4gc2VsZWN0LnNlbGVjdChbcl0sIFtdLCBbXSwgMS4wKVswXToKLSAgICAgICAgICAgICAgICAgICAgcyA9IG9zLnJlYWQociwgMTAyNCkKLSAgICAgICAgICAgICAgICAgICAgcmVhZF9yZXN1bHRzLmFwcGVuZChzKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdoaWxlIG5vdCB3cml0ZV9maW5pc2hlZDoKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgciBpbiBzZWxlY3Quc2VsZWN0KFtyXSwgW10sIFtdLCAxLjApWzBdOgorICAgICAgICAgICAgICAgICAgICAgICAgcyA9IG9zLnJlYWQociwgMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfcmVzdWx0cy5hcHBlbmQocykKKyAgICAgICAgICAgIGV4Y2VwdCBCYXNlRXhjZXB0aW9uIGFzIGV4YzoKKyAgICAgICAgICAgICAgICBub25sb2NhbCBlcnJvcgorICAgICAgICAgICAgICAgIGVycm9yID0gZXhjCiAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1fcmVhZCkKICAgICAgICAgdC5kYWVtb24gPSBUcnVlCiAgICAgICAgIGRlZiBhbGFybTEoc2lnLCBmcmFtZSk6CkBAIC0zMjYxLDYgKzM2MDksOCBAQAogICAgICAgICAgICAgd2lvLmZsdXNoKCkKICAgICAgICAgICAgIHdyaXRlX2ZpbmlzaGVkID0gVHJ1ZQogICAgICAgICAgICAgdC5qb2luKCkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZXJyb3IpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE4sIHN1bShsZW4oeCkgZm9yIHggaW4gcmVhZF9yZXN1bHRzKSkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHdyaXRlX2ZpbmlzaGVkID0gVHJ1ZQpAQCAtMzI3MSw3ICszNjIxLDcgQEAKICAgICAgICAgICAgICMgYnVmZmVyLCBhbmQgY291bGQgYmxvY2sgKGluIGNhc2Ugb2YgZmFpbHVyZSkuCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgd2lvLmNsb3NlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gIT0gZXJybm8uRUJBREY6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkgYi9MaWIvdGVzdC90ZXN0X2lvY3RsLnB5CmluZGV4IDUzMWM5YWYuLmVmZTlmNTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaW9jdGwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pb2N0bC5weQpAQCAtOCw3ICs4LDcgQEAKIAogdHJ5OgogICAgIHR0eSA9IG9wZW4oIi9kZXYvdHR5IiwgInJiIikKLWV4Y2VwdCBJT0Vycm9yOgorZXhjZXB0IE9TRXJyb3I6CiAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlVuYWJsZSB0byBvcGVuIC9kZXYvdHR5IikKIGVsc2U6CiAgICAgIyBTa2lwIGlmIGFub3RoZXIgcHJvY2VzcyBpcyBpbiBmb3JlZ3JvdW5kCkBAIC04Niw4ICs4Niw2IEBACiAgICAgICAgICAgICBvcy5jbG9zZShtZmQpCiAgICAgICAgICAgICBvcy5jbG9zZShzZmQpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoSW9jdGxUZXN0cykKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9pcGFkZHJlc3MucHkgYi9MaWIvdGVzdC90ZXN0X2lwYWRkcmVzcy5weQppbmRleCA1YmZjZjQxLi45NWUzZjA0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2lwYWRkcmVzcy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2lwYWRkcmVzcy5weQpAQCAtNyw5ICs3LDExIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCByZQogaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBvcGVyYXRvcgogaW1wb3J0IGlwYWRkcmVzcwogCisKIGNsYXNzIEJhc2VUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIyBPbmUgYmlnIGNoYW5nZSBpbiBpcGFkZHJlc3Mgb3ZlciB0aGUgb3JpZ2luYWwgaXBhZGRyIG1vZHVsZSBpcwogICAgICMgZXJyb3IgcmVwb3J0aW5nIHRoYXQgdHJpZXMgdG8gYXNzdW1lIHVzZXJzICpkb24ndCBrbm93IHRoZSBydWxlcyoKQEAgLTUyLDE3ICs1NCwxOCBAQAogICAgIGRlZiBhc3NlcnRBZGRyZXNzRXJyb3Ioc2VsZiwgZGV0YWlscywgKmFyZ3MpOgogICAgICAgICAiIiJFbnN1cmUgYSBjbGVhbiBBZGRyZXNzVmFsdWVFcnJvciIiIgogICAgICAgICByZXR1cm4gc2VsZi5hc3NlcnRDbGVhbkVycm9yKGlwYWRkcmVzcy5BZGRyZXNzVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMsICphcmdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbHMsICphcmdzKQogCiAgICAgZGVmIGFzc2VydE5ldG1hc2tFcnJvcihzZWxmLCBkZXRhaWxzLCAqYXJncyk6CiAgICAgICAgICIiIkVuc3VyZSBhIGNsZWFuIE5ldG1hc2tWYWx1ZUVycm9yIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmFzc2VydENsZWFuRXJyb3IoaXBhZGRyZXNzLk5ldG1hc2tWYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLCAqYXJncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWxzLCAqYXJncykKIAogICAgIGRlZiBhc3NlcnRJbnN0YW5jZXNFcXVhbChzZWxmLCBsaHMsIHJocyk6CiAgICAgICAgICIiIkNoZWNrIGNvbnN0cnVjdG9yIGFyZ3VtZW50cyBwcm9kdWNlIGVxdWl2YWxlbnQgaW5zdGFuY2VzIiIiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mYWN0b3J5KGxocyksIHNlbGYuZmFjdG9yeShyaHMpKQogCisKIGNsYXNzIENvbW1vblRlc3RNaXhpbjoKIAogICAgIGRlZiB0ZXN0X2VtcHR5X2FkZHJlc3Moc2VsZik6CkBAIC0xMTUsNiArMTE4LDcgQEAKICAgICAgICAgYXNzZXJ0QmFkTGVuZ3RoKDMpCiAgICAgICAgIGFzc2VydEJhZExlbmd0aCg1KQogCisKIGNsYXNzIENvbW1vblRlc3RNaXhpbl92NihDb21tb25UZXN0TWl4aW4pOgogCiAgICAgZGVmIHRlc3RfbGVhZGluZ196ZXJvcyhzZWxmKToKQEAgLTE5NSw3ICsxOTksNyBAQAogICAgIGRlZiB0ZXN0X2VtcHR5X29jdGV0KHNlbGYpOgogICAgICAgICBkZWYgYXNzZXJ0QmFkT2N0ZXQoYWRkcik6CiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0QWRkcmVzc0Vycm9yKCJFbXB0eSBvY3RldCBub3QgcGVybWl0dGVkIGluICVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyKToKICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuSVB2NEFkZHJlc3MoYWRkcikKIAogICAgICAgICBhc3NlcnRCYWRPY3RldCgiNDIuLjQyLjQyIikKQEAgLTQ0Myw2ICs0NDcsNyBAQAogY2xhc3MgSW50ZXJmYWNlVGVzdENhc2VfdjQoQmFzZVRlc3RDYXNlLCBOZXRtYXNrVGVzdE1peGluX3Y0KToKICAgICBmYWN0b3J5ID0gaXBhZGRyZXNzLklQdjRJbnRlcmZhY2UKIAorCiBjbGFzcyBOZXR3b3JrVGVzdENhc2VfdjQoQmFzZVRlc3RDYXNlLCBOZXRtYXNrVGVzdE1peGluX3Y0KToKICAgICBmYWN0b3J5ID0gaXBhZGRyZXNzLklQdjROZXR3b3JrCiAKQEAgLTQ5Niw5ICs1MDEsMTEgQEAKICAgICAgICAgYXNzZXJ0QmFkTmV0bWFzaygiOjoxIiwgInB1ZGRpbmciKQogICAgICAgICBhc3NlcnRCYWROZXRtYXNrKCI6OiIsICI6OiIpCiAKKwogY2xhc3MgSW50ZXJmYWNlVGVzdENhc2VfdjYoQmFzZVRlc3RDYXNlLCBOZXRtYXNrVGVzdE1peGluX3Y2KToKICAgICBmYWN0b3J5ID0gaXBhZGRyZXNzLklQdjZJbnRlcmZhY2UKIAorCiBjbGFzcyBOZXR3b3JrVGVzdENhc2VfdjYoQmFzZVRlc3RDYXNlLCBOZXRtYXNrVGVzdE1peGluX3Y2KToKICAgICBmYWN0b3J5ID0gaXBhZGRyZXNzLklQdjZOZXR3b3JrCiAKQEAgLTUyMiw2ICs1MjksMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWN0b3J5RXJyb3IoaXBhZGRyZXNzLmlwX25ldHdvcmssICJuZXR3b3JrIikKIAogCitAZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nCitjbGFzcyBMYXJnZXN0T2JqZWN0OgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgTGFyZ2VzdE9iamVjdCkKKyAgICBkZWYgX19sdF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKK0BmdW5jdG9vbHMudG90YWxfb3JkZXJpbmcKK2NsYXNzIFNtYWxsZXN0T2JqZWN0OgorICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gaXNpbnN0YW5jZShvdGhlciwgU21hbGxlc3RPYmplY3QpCisgICAgZGVmIF9fZ3RfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiBGYWxzZQorCiBjbGFzcyBDb21wYXJpc29uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgdjRhZGRyID0gaXBhZGRyZXNzLklQdjRBZGRyZXNzKDEpCkBAIC01NzUsNiArNTk2LDI4IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGxocyA8PSByaHMpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYW1iZGE6IGxocyA+PSByaHMpCiAKKyAgICBkZWYgdGVzdF9mb3JlaWduX3R5cGVfb3JkZXJpbmcoc2VsZik6CisgICAgICAgIG90aGVyID0gb2JqZWN0KCkKKyAgICAgICAgc21hbGxlc3QgPSBTbWFsbGVzdE9iamVjdCgpCisgICAgICAgIGxhcmdlc3QgPSBMYXJnZXN0T2JqZWN0KCkKKyAgICAgICAgZm9yIG9iaiBpbiBzZWxmLm9iamVjdHM6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgb2JqIDwgb3RoZXIKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgICAgICBvYmogPiBvdGhlcgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIG9iaiA8PSBvdGhlcgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIG9iaiA+PSBvdGhlcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iaiA8IGxhcmdlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9iaiA+IGxhcmdlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqIDw9IGxhcmdlc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9iaiA+PSBsYXJnZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvYmogPCBzbWFsbGVzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvYmogPiBzbWFsbGVzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob2JqIDw9IHNtYWxsZXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iaiA+PSBzbWFsbGVzdCkKKwogICAgIGRlZiB0ZXN0X21peGVkX3R5cGVfa2V5KHNlbGYpOgogICAgICAgICAjIHdpdGggZ2V0X21peGVkX3R5cGVfa2V5LCB5b3UgY2FuIHNvcnQgYWRkcmVzc2VzIGFuZCBuZXR3b3JrLgogICAgICAgICB2NF9vcmRlcmVkID0gW3NlbGYudjRhZGRyLCBzZWxmLnY0bmV0LCBzZWxmLnY0aW50Zl0KQEAgLTU5NSw3ICs2MzgsNyBAQAogICAgICAgICB2NGFkZHIgPSBpcGFkZHJlc3MuaXBfYWRkcmVzcygnMS4xLjEuMScpCiAgICAgICAgIHY0bmV0ID0gaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEuMS4xLjEnKQogICAgICAgICB2NmFkZHIgPSBpcGFkZHJlc3MuaXBfYWRkcmVzcygnOjoxJykKLSAgICAgICAgdjZuZXQgPSBpcGFkZHJlc3MuaXBfYWRkcmVzcygnOjoxJykKKyAgICAgICAgdjZuZXQgPSBpcGFkZHJlc3MuaXBfbmV0d29yaygnOjoxJykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHY0YWRkci5fX2x0X18sIHY2YWRkcikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2NGFkZHIuX19ndF9fLCB2NmFkZHIpCkBAIC02MDgsNyArNjUxLDYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB2Nm5ldC5fX2d0X18sIHY0bmV0KQogCiAKLQogY2xhc3MgSXBhZGRyVW5pdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTExOCw3ICsxMTYwLDcgQEAKICAgICAgICAgIyB0ZXN0IGEgLzI0IGlzIHN1bW1hcml6ZWQgcHJvcGVybHkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1bW1hcml6ZShpcDEsIGlwMikpWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxLjEuMS4wLzI0JykpCi0gICAgICAgICMgdGVzdCBhbiAgSVB2NCByYW5nZSB0aGF0IGlzbid0IG9uIGEgbmV0d29yayBieXRlIGJvdW5kYXJ5CisgICAgICAgICMgdGVzdCBhbiBJUHY0IHJhbmdlIHRoYXQgaXNuJ3Qgb24gYSBuZXR3b3JrIGJ5dGUgYm91bmRhcnkKICAgICAgICAgaXAyID0gaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzEuMS4xLjgnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VtbWFyaXplKGlwMSwgaXAyKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgW2lwYWRkcmVzcy5pcF9uZXR3b3JrKCcxLjEuMS4wLzI5JyksCkBAIC0xMTMxLDcgKzExNzMsNyBAQAogCiAgICAgICAgIGlwMSA9IGlwYWRkcmVzcy5pcF9hZGRyZXNzKCcxOjonKQogICAgICAgICBpcDIgPSBpcGFkZHJlc3MuaXBfYWRkcmVzcygnMTpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmJykKLSAgICAgICAgIyB0ZXN0IGEgSVB2NiBpcyBzdW1hbXJpemVkIHByb3Blcmx5CisgICAgICAgICMgdGVzdCBhbiBJUHY2IGlzIHN1bW1hcml6ZWQgcHJvcGVybHkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1bW1hcml6ZShpcDEsIGlwMikpWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxOjovMTYnKSkKICAgICAgICAgIyB0ZXN0IGFuIElQdjYgcmFuZ2UgdGhhdCBpc24ndCBvbiBhIG5ldHdvcmsgYnl0ZSBib3VuZGFyeQpAQCAtMTI0MywxMCArMTI4NSwxMCBAQAogICAgICAgICB1bnNvcnRlZCA9IFtpcDQsIGlwMSwgaXAzLCBpcDJdCiAgICAgICAgIHVuc29ydGVkLnNvcnQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZCwgdW5zb3J0ZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaXAxLl9fbHRfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzEwLjEwLjEwLjAnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBpcDIuX19sdF9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfYWRkcmVzcygnMTAuMTAuMTAuMCcpKQorICAgICAgICBzZWxmLmFzc2VydElzKGlwMS5fX2x0X18oaXBhZGRyZXNzLmlwX2FkZHJlc3MoJzEwLjEwLjEwLjAnKSksCisgICAgICAgICAgICAgICAgICAgICAgTm90SW1wbGVtZW50ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoaXAyLl9fbHRfXyhpcGFkZHJlc3MuaXBfYWRkcmVzcygnMTAuMTAuMTAuMCcpKSwKKyAgICAgICAgICAgICAgICAgICAgICBOb3RJbXBsZW1lbnRlZCkKIAogICAgICAgICAjIDw9LCA+PQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEuMS4xLjEnKSA8PQpAQCAtMTM1OCw2ICsxNDAwLDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoCiAgICAgICAgICAgICAgICAgJzEyNy40Mi4wLjAvMTYnKS5pc19sb29wYmFjaykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEyOC4wLjAuMCcpLmlzX2xvb3BiYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxMDAuNjQuMC4wLzEwJykuaXNfcHJpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzEwMC42NC4wLjAvMTAnKS5pc19nbG9iYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCcxOTIuMC4yLjEyOC8yNScpLmlzX3ByaXZhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMTkyLjAuMy4wLzI0JykuaXNfZ2xvYmFsKQogCiAgICAgICAgICMgdGVzdCBhZGRyZXNzZXMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfYWRkcmVzcygnMC4wLjAuMCcpLmlzX3Vuc3BlY2lmaWVkKQpAQCAtMTQyMyw2ICsxNDczLDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRmFsc2UsIGlwYWRkcmVzcy5pcF9uZXR3b3JrKCc6OjEnKS5pc191bnNwZWNpZmllZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChGYWxzZSwgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzo6LzEyNycpLmlzX3Vuc3BlY2lmaWVkKQogCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3MuaXBfbmV0d29yaygnMjAwMTo6MS8xMjgnKS5pc19wcml2YXRlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzLmlwX25ldHdvcmsoJzIwMDo6MS8xMjgnKS5pc19nbG9iYWwpCiAgICAgICAgICMgdGVzdCBhZGRyZXNzZXMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBpcGFkZHJlc3MuaXBfYWRkcmVzcygnZmZmZjo6JykuaXNfbXVsdGljYXN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIGlwYWRkcmVzcy5pcF9hZGRyZXNzKDIqKjEyOCAtIDEpLmlzX211bHRpY2FzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfaXRlci5weSBiL0xpYi90ZXN0L3Rlc3RfaXRlci5weQppbmRleCA0M2Y4ZTE1Li5hYmM0MDhmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2l0ZXIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9pdGVyLnB5CkBAIC0xLDUgKzEsNiBAQAogIyBUZXN0IGl0ZXJhdG9ycy4KIAoraW1wb3J0IHN5cwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBURVNURk4sIHVubGluaywgY3B5dGhvbl9vbmx5CiBpbXBvcnQgcGlja2xlCkBAIC00OCw2ICs0OSwxMCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgSW5kZXhFcnJvcgogCitjbGFzcyBVbmxpbWl0ZWRTZXF1ZW5jZUNsYXNzOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgcmV0dXJuIGkKKwogIyBNYWluIHRlc3Qgc3VpdGUKIAogY2xhc3MgVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNzYsMjIgKzgxLDIzIEBACiAKICAgICAjIEhlbHBlciB0byBjaGVjayBwaWNrbGFiaWxpdHkKICAgICBkZWYgY2hlY2tfcGlja2xlKHNlbGYsIGl0b3JnLCBzZXEpOgotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0b3JnKQotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICAjIENhbm5vdCBhc3NlcnQgdHlwZSBlcXVhbGl0eSBiZWNhdXNlIGRpY3QgaXRlcmF0b3JzIHVucGlja2xlIGFzIGxpc3QKLSAgICAgICAgIyBpdGVyYXRvcnMuCi0gICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5hYmMuSXRlcmF0b3IpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXEpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZywgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgIyBDYW5ub3QgYXNzZXJ0IHR5cGUgZXF1YWxpdHkgYmVjYXVzZSBkaWN0IGl0ZXJhdG9ycyB1bnBpY2tsZSBhcyBsaXN0CisgICAgICAgICAgICAjIGl0ZXJhdG9ycy4KKyAgICAgICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShpdCwgY29sbGVjdGlvbnMuYWJjLkl0ZXJhdG9yKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIHNlcSkKIAotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBuZXh0KGl0KQotICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgIHJldHVybgotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBzZXFbMTpdKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIHNlcVsxOl0pCiAKICAgICAjIFRlc3QgYmFzaWMgdXNlIG9mIGl0ZXIoKSBmdW5jdGlvbgogICAgIGRlZiB0ZXN0X2l0ZXJfYmFzaWMoc2VsZik6CkBAIC05MTgsNiArOTI0LDI2IEBACiAgICAgICAgIGxzdC5leHRlbmQoZ2VuKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGxzdCksIDc2MCkKIAorICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9pdGVyX292ZXJmbG93KHNlbGYpOgorICAgICAgICAjIFRlc3QgZm9yIHRoZSBpc3N1ZSAyMjkzOQorICAgICAgICBpdCA9IGl0ZXIoVW5saW1pdGVkU2VxdWVuY2VDbGFzcygpKQorICAgICAgICAjIE1hbnVhbGx5IHNldCBgaXRfaW5kZXhgIHRvIFBZX1NTSVpFX1RfTUFYLTIgd2l0aG91dCBhIGxvb3AKKyAgICAgICAgaXQuX19zZXRzdGF0ZV9fKHN5cy5tYXhzaXplIC0gMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgc3lzLm1heHNpemUgLSAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCBzeXMubWF4c2l6ZSAtIDEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICBuZXh0KGl0KQorICAgICAgICAjIENoZWNrIHRoYXQgT3ZlcmZsb3cgZXJyb3IgaXMgYWx3YXlzIHJhaXNlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgbmV4dChpdCkKKworICAgIGRlZiB0ZXN0X2l0ZXJfbmVnX3NldHN0YXRlKHNlbGYpOgorICAgICAgICBpdCA9IGl0ZXIoVW5saW1pdGVkU2VxdWVuY2VDbGFzcygpKQorICAgICAgICBpdC5fX3NldHN0YXRlX18oLTQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAxKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVGVzdENhc2UpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkgYi9MaWIvdGVzdC90ZXN0X2l0ZXJsZW4ucHkKaW5kZXggOTEwMWY2Yy4uMTUyZjVmYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9pdGVybGVuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlcmxlbi5weQpAQCAtNDUsMzEgKzQ1LDIxIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gaXRlcnRvb2xzIGltcG9ydCByZXBlYXQKIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlcXVlCi1mcm9tIGJ1aWx0aW5zIGltcG9ydCBsZW4gYXMgX2xlbgorZnJvbSBvcGVyYXRvciBpbXBvcnQgbGVuZ3RoX2hpbnQKIAogbiA9IDEwCiAKLWRlZiBsZW4ob2JqKToKLSAgICB0cnk6Ci0gICAgICAgIHJldHVybiBfbGVuKG9iaikKLSAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIG5vdGU6IHRoaXMgaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKLSAgICAgICAgICAgICMgZG9uJ3QgcmVseSBvbiBpdCBpbiB5b3VyIG93biBwcm9ncmFtcwotICAgICAgICAgICAgcmV0dXJuIG9iai5fX2xlbmd0aF9oaW50X18oKQotICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IKIAogY2xhc3MgVGVzdEludmFyaWFudFdpdGhvdXRNdXRhdGlvbnM6CiAKICAgICBkZWYgdGVzdF9pbnZhcmlhbnQoc2VsZik6CiAgICAgICAgIGl0ID0gc2VsZi5pdAogICAgICAgICBmb3IgaSBpbiByZXZlcnNlZChyYW5nZSgxLCBuKzEpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBpKQogICAgICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKIGNsYXNzIFRlc3RUZW1wb3JhcmlseUltbXV0YWJsZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucyk6CiAKQEAgLTc4LDEyICs2OCwxMiBAQAogICAgICAgICAjIGxlbmd0aCBpbW11dGFiaWxpdHkgIGR1cmluZyBpdGVyYXRpb24KIAogICAgICAgICBpdCA9IHNlbGYuaXQKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbikKICAgICAgICAgbmV4dChpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCBuLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuLTEpCiAgICAgICAgIHNlbGYubXV0YXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCBuZXh0LCBpdCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oaXQpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgMCkKIAogIyMgLS0tLS0tLSBDb25jcmV0ZSBUeXBlIFRlc3RzIC0tLS0tLS0KIApAQCAtOTIsMTAgKzgyLDYgQEAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYuaXQgPSByZXBlYXQoTm9uZSwgbikKIAotICAgIGRlZiB0ZXN0X25vX2xlbl9mb3JfaW5maW5pdGVfcmVwZWF0KHNlbGYpOgotICAgICAgICAjIFRoZSByZXBlYXQoKSBvYmplY3QgY2FuIGFsc28gYmUgaW5maW5pdGUKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsZW4sIHJlcGVhdChOb25lKSkKLQogY2xhc3MgVGVzdFhyYW5nZShUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgpAQCAtMTY3LDE0ICsxNTMsMTUgQEAKICAgICAgICAgaXQgPSBpdGVyKGQpCiAgICAgICAgIG5leHQoaXQpCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpCiAgICAgICAgIGQuYXBwZW5kKG4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0xKSAgIyBncm93IHdpdGggYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMSkgICMgZ3JvdyB3aXRoIGFwcGVuZAogICAgICAgICBkWzE6XSA9IFtdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKQogICAgICAgICBkLmV4dGVuZChyYW5nZSgyMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCisKIAogY2xhc3MgVGVzdExpc3RSZXZlcnNlZChUZXN0SW52YXJpYW50V2l0aG91dE11dGF0aW9ucywgdW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xODYsMzIgKzE3Myw0MSBAQAogICAgICAgICBpdCA9IHJldmVyc2VkKGQpCiAgICAgICAgIG5leHQoaXQpCiAgICAgICAgIG5leHQoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbmd0aF9oaW50KGl0KSwgbiAtIDIpCiAgICAgICAgIGQuYXBwZW5kKG4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgbi0yKSAgIyBpZ25vcmUgYXBwZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuZ3RoX2hpbnQoaXQpLCBuIC0gMikgICMgaWdub3JlIGFwcGVuZAogICAgICAgICBkWzE6XSA9IFtdCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIFtdKSAgIyBjb25maXJtIGludmFyaWFudAogICAgICAgICBkLmV4dGVuZChyYW5nZSgyMCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGl0KSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW5ndGhfaGludChpdCksIDApCiAKICMjIC0tIENoZWNrIHRvIG1ha2Ugc3VyZSBleGNlcHRpb25zIGFyZSBub3Qgc3VwcHJlc3NlZCBieSBfX2xlbmd0aF9oaW50X18oKQogCiAKIGNsYXNzIEJhZExlbihvYmplY3QpOgotICAgIGRlZiBfX2l0ZXJfXyhzZWxmKTogcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGl0ZXIocmFuZ2UoMTApKQorCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGVsbG8nKQogCisKIGNsYXNzIEJhZExlbmd0aEhpbnQob2JqZWN0KToKLSAgICBkZWYgX19pdGVyX18oc2VsZik6IHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBpdGVyKHJhbmdlKDEwKSkKKwogICAgIGRlZiBfX2xlbmd0aF9oaW50X18oc2VsZik6CiAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignaGVsbG8nKQogCisKIGNsYXNzIE5vbmVMZW5ndGhIaW50KG9iamVjdCk6Ci0gICAgZGVmIF9faXRlcl9fKHNlbGYpOiByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaXRlcihyYW5nZSgxMCkpCisKICAgICBkZWYgX19sZW5ndGhfaGludF9fKHNlbGYpOgotICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKKwogCiBjbGFzcyBUZXN0TGVuZ3RoSGludEV4Y2VwdGlvbnModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2l0ZXJ0b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CmluZGV4IDM1MzkxYzkuLjk5MzQzOGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfaXRlcnRvb2xzLnB5CkBAIC0xLDcgKzEsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gaXRlcnRvb2xzIGltcG9ydCAqCi1mcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CitpbXBvcnQgd2Vha3JlZgogZnJvbSBkZWNpbWFsIGltcG9ydCBEZWNpbWFsCiBmcm9tIGZyYWN0aW9ucyBpbXBvcnQgRnJhY3Rpb24KIGltcG9ydCBzeXMKQEAgLTEwLDYgKzEwLDggQEAKIGltcG9ydCBjb3B5CiBpbXBvcnQgcGlja2xlCiBmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlCitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0CiBtYXhzaXplID0gc3VwcG9ydC5NQVhfUHlfc3NpemVfdAogbWluc2l6ZSA9IC1tYXhzaXplLTEKIApAQCAtNzIsOSArNzQsMTIgQEAKIGRlZiB1bmRlcnRlbih4KToKICAgICByZXR1cm4geDwxMAogCitwaWNrbGVjb3BpZXJzID0gW2xhbWJkYSBzLCBwcm90bz1wcm90bzogcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhzLCBwcm90bykpCisgICAgICAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpXQorCiBjbGFzcyBUZXN0QmFzaWNPcHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHBpY2tsZXRlc3Qoc2VsZiwgaXQsIHN0b3A9NCwgdGFrZT0xLCBjb21wYXJlPU5vbmUpOgorICAgIGRlZiBwaWNrbGV0ZXN0KHNlbGYsIHByb3RvY29sLCBpdCwgc3RvcD00LCB0YWtlPTEsIGNvbXBhcmU9Tm9uZSk6CiAgICAgICAgICIiIlRlc3QgdGhhdCBhbiBpdGVyYXRvciBpcyB0aGUgc2FtZSBhZnRlciBwaWNrbGluZywgYWxzbyB3aGVuIHBhcnQtY29uc3VtZWQiIiIKICAgICAgICAgZGVmIGV4cGFuZChpdCwgaT0wKToKICAgICAgICAgICAgICMgUmVjdXJzaXZlbHkgZXhwYW5kIGl0ZXJhYmxlcywgd2l0aGluIHNlbnNpYmxlIGJvdW5kcwpAQCAtODksNyArOTQsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFtleHBhbmQoZSwgaSsxKSBmb3IgZSBpbiBsXQogCiAgICAgICAgICMgVGVzdCB0aGUgaW5pdGlhbCBjb3B5IGFnYWluc3QgdGhlIG9yaWdpbmFsCi0gICAgICAgIGR1bXAgPSBwaWNrbGUuZHVtcHMoaXQpCisgICAgICAgIGR1bXAgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvY29sKQogICAgICAgICBpMiA9IHBpY2tsZS5sb2FkcyhkdW1wKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXQpLCB0eXBlKGkyKSkKICAgICAgICAgYSwgYiA9IGV4cGFuZChpdCksIGV4cGFuZChpMikKQEAgLTEwNyw3ICsxMTIsNyBAQAogICAgICAgICAgICAgICAgIHRvb2sgKz0gMQogICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKICAgICAgICAgICAgIHBhc3MgI2luIGNhc2UgdGhlcmUgaXMgbGVzcyBkYXRhIHRoYW4gJ3Rha2UnCi0gICAgICAgIGR1bXAgPSBwaWNrbGUuZHVtcHMoaTMpCisgICAgICAgIGR1bXAgPSBwaWNrbGUuZHVtcHMoaTMsIHByb3RvY29sKQogICAgICAgICBpNCA9IHBpY2tsZS5sb2FkcyhkdW1wKQogICAgICAgICBhLCBiID0gZXhwYW5kKGkzKSwgZXhwYW5kKGk0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEsIGIpCkBAIC0xNDEsNyArMTQ2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBbMiwgMTYsIDE0NCwgNzIwLCA1MDQwLCAwLCAwLCAwLCAwLCAwXSkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgogICAgICAgICAgICAgbGlzdChhY2N1bXVsYXRlKHMsIGNocikpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHVuYXJ5LW9wZXJhdGlvbgotICAgICAgICBzZWxmLnBpY2tsZXRlc3QoYWNjdW11bGF0ZShyYW5nZSgxMCkpKSAgICAgICAgICAgICAgICAgICAgICAjIHRlc3QgcGlja2xpbmcKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGFjY3VtdWxhdGUocmFuZ2UoMTApKSkgICAgICAgICAgICMgdGVzdCBwaWNrbGluZwogCiAgICAgZGVmIHRlc3RfY2hhaW4oc2VsZik6CiAKQEAgLTE2Niw5ICsxNzIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxpc3QsIGNoYWluLmZyb21faXRlcmFibGUoWzIsIDNdKSkKIAogICAgIGRlZiB0ZXN0X2NoYWluX3JlZHVjaWJsZShzZWxmKToKLSAgICAgICAgb3BlcmF0b3JzID0gW2NvcHkuZGVlcGNvcHksCi0gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgczogcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhzKSldCi0gICAgICAgIGZvciBvcGVyIGluIG9wZXJhdG9yczoKKyAgICAgICAgZm9yIG9wZXIgaW4gW2NvcHkuZGVlcGNvcHldICsgcGlja2xlY29waWVyczoKICAgICAgICAgICAgIGl0ID0gY2hhaW4oJ2FiYycsICdkZWYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9wZXIoaXQpKSwgbGlzdCgnYWJjZGVmJykpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAnYScpCkBAIC0xNzcsNyArMTgxLDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvcGVyKGNoYWluKCcnKSkpLCBbXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSg0LCBvcGVyKGNoYWluKCdhYmMnLCAnZGVmJykpKSwgbGlzdCgnYWJjZCcpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsaXN0LCBvcGVyKGNoYWluKDIsIDMpKSkKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGNoYWluKCdhYmMnLCAnZGVmJyksIGNvbXBhcmU9bGlzdCgnYWJjZGVmJykpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCBjaGFpbignYWJjJywgJ2RlZicpLCBjb21wYXJlPWxpc3QoJ2FiY2RlZicpKQogCiAgICAgZGVmIHRlc3RfY29tYmluYXRpb25zKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbWJpbmF0aW9ucywgJ2FiYycpICAgICAgICMgbWlzc2luZyByIGFyZ3VtZW50CkBAIC0xODUsNyArMTkwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21iaW5hdGlvbnMsIE5vbmUpICAgICAgICAjIHBvb2wgaXMgbm90IGl0ZXJhYmxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGNvbWJpbmF0aW9ucywgJ2FiYycsIC0yKSAgIyByIGlzIG5lZ2F0aXZlCiAKLSAgICAgICAgZm9yIG9wIGluIChsYW1iZGEgYTphLCBsYW1iZGEgYTpwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGEpKSk6CisgICAgICAgIGZvciBvcCBpbiBbbGFtYmRhIGE6YV0gKyBwaWNrbGVjb3BpZXJzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9wKGNvbWJpbmF0aW9ucygnYWJjJywgMzIpKSksIFtdKSAgICAgIyByID4gbgogCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob3AoY29tYmluYXRpb25zKCdBQkNEJywgMikpKSwKQEAgLTI1Niw3ICsyNjEsOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGNvbWJpbmF0aW9uczIodmFsdWVzLCByKSkpICMgbWF0Y2hlcyBzZWNvbmQgcHVyZSBweXRob24gdmVyc2lvbgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KGNvbWJpbmF0aW9uczModmFsdWVzLCByKSkpICMgbWF0Y2hlcyBzZWNvbmQgcHVyZSBweXRob24gdmVyc2lvbgogCi0gICAgICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGNvbWJpbmF0aW9ucyh2YWx1ZXMsIHIpKSAgICAgICAgICAgICAgICAgIyB0ZXN0IHBpY2tsaW5nCisgICAgICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgY29tYmluYXRpb25zKHZhbHVlcywgcikpICAgICAgIyB0ZXN0IHBpY2tsaW5nCiAKICAgICBAc3VwcG9ydC5iaWdhZGRyc3BhY2V0ZXN0CiAgICAgZGVmIHRlc3RfY29tYmluYXRpb25zX292ZXJmbG93KHNlbGYpOgpAQCAtMjc2LDcgKzI4Miw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3dyLCBOb25lKSAgICAgICAgIyBwb29sIGlzIG5vdCBpdGVyYWJsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjd3IsICdhYmMnLCAtMikgICMgciBpcyBuZWdhdGl2ZQogCi0gICAgICAgIGZvciBvcCBpbiAobGFtYmRhIGE6YSwgbGFtYmRhIGE6cGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhhKSkpOgorICAgICAgICBmb3Igb3AgaW4gW2xhbWJkYSBhOmFdICsgcGlja2xlY29waWVyczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvcChjd3IoJ0FCQycsIDIpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ0EnLCdBJyksICgnQScsJ0InKSwgKCdBJywnQycpLCAoJ0InLCdCJyksICgnQicsJ0MnKSwgKCdDJywnQycpXSkKICAgICAgICAgICAgIHRlc3RJbnRlcm1lZGlhdGUgPSBjd3IoJ0FCQycsIDIpCkBAIC0zNDIsNyArMzQ4LDggQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChjd3IxKHZhbHVlcywgcikpKSAgICAgICAgICMgbWF0Y2hlcyBmaXJzdCBwdXJlIHB5dGhvbiB2ZXJzaW9uCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGxpc3QoY3dyMih2YWx1ZXMsIHIpKSkgICAgICAgICAjIG1hdGNoZXMgc2Vjb25kIHB1cmUgcHl0aG9uIHZlcnNpb24KIAotICAgICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChjd3IodmFsdWVzLHIpKSAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IHBpY2tsaW5nCisgICAgICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgY3dyKHZhbHVlcyxyKSkgICAgICAgICAgICAgICAjIHRlc3QgcGlja2xpbmcKIAogICAgIEBzdXBwb3J0LmJpZ2FkZHJzcGFjZXRlc3QKICAgICBkZWYgdGVzdF9jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudF9vdmVyZmxvdyhzZWxmKToKQEAgLTQxNiwxNCArNDIzLDE1IEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBsaXN0KHBlcm11dGF0aW9ucyh2YWx1ZXMsIE5vbmUpKSkgIyB0ZXN0IHIgYXMgTm9uZQogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgbGlzdChwZXJtdXRhdGlvbnModmFsdWVzKSkpICAgICAgICMgdGVzdCBkZWZhdWx0IHIKIAotICAgICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwZXJtdXRhdGlvbnModmFsdWVzLCByKSkgICAgICAgICAgICAgICAgIyB0ZXN0IHBpY2tsaW5nCisgICAgICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgcGVybXV0YXRpb25zKHZhbHVlcywgcikpICAgICAjIHRlc3QgcGlja2xpbmcKIAogICAgIEBzdXBwb3J0LmJpZ2FkZHJzcGFjZXRlc3QKICAgICBkZWYgdGVzdF9wZXJtdXRhdGlvbnNfb3ZlcmZsb3coc2VsZik6CiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKE92ZXJmbG93RXJyb3IsIE1lbW9yeUVycm9yKSk6CiAgICAgICAgICAgICBwZXJtdXRhdGlvbnMoIkEiLCAyKiozMCkKIAotICAgIEBzdXBwb3J0LmltcGxfZGV0YWlsKCJ0dXBsZSByZXN1c2UgaXMgQ1B5dGhvbiBzcGVjaWZpYyIpCisgICAgQHN1cHBvcnQuaW1wbF9kZXRhaWwoInR1cGxlIHJldXNlIGlzIHNwZWNpZmljIHRvIENQeXRob24iKQogICAgIGRlZiB0ZXN0X3Blcm11dGF0aW9uc190dXBsZV9yZXVzZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2V0KG1hcChpZCwgcGVybXV0YXRpb25zKCdhYmNkZScsIDMpKSkpLCAxKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxlbihzZXQobWFwKGlkLCBsaXN0KHBlcm11dGF0aW9ucygnYWJjZGUnLCAzKSkpKSksIDEpCkBAIC00NzgsNyArNDg2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjb21wcmVzcywgcmFuZ2UoNiksIE5vbmUpICAgICAgIyB0b28gbWFueSBhcmdzCiAKICAgICAgICAgIyBjaGVjayBjb3B5LCBkZWVwY29weSwgcGlja2xlCi0gICAgICAgIGZvciBvcCBpbiAobGFtYmRhIGE6Y29weS5jb3B5KGEpLCBsYW1iZGEgYTpjb3B5LmRlZXBjb3B5KGEpLCBsYW1iZGEgYTpwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGEpKSk6CisgICAgICAgIGZvciBvcCBpbiBbbGFtYmRhIGE6Y29weS5jb3B5KGEpLCBsYW1iZGEgYTpjb3B5LmRlZXBjb3B5KGEpXSArIHBpY2tsZWNvcGllcnM6CiAgICAgICAgICAgICBmb3IgZGF0YSwgc2VsZWN0b3JzLCByZXN1bHQxLCByZXN1bHQyIGluIFsKICAgICAgICAgICAgICAgICAoJ0FCQ0RFRicsIFsxLDAsMSwwLDEsMV0sICdBQ0VGJywgJ0NFRicpLAogICAgICAgICAgICAgICAgICgnQUJDREVGJywgWzAsMCwwLDAsMCwwXSwgJycsICcnKSwKQEAgLTUyOSw3ICs1MzcsOCBAQAogICAgICAgICAgICAgYyA9IGNvdW50KHZhbHVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGNvcHkuY29weShjKSksIHZhbHVlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGNvcHkuZGVlcGNvcHkoYykpLCB2YWx1ZSkKLSAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChjb3VudCh2YWx1ZSkpCisgICAgICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGNvdW50KHZhbHVlKSkKIAogICAgICAgICAjY2hlY2sgcHJvcGVyIGludGVybmFsIGVycm9yIGhhbmRsaW5nIGZvciBsYXJnZSAic3RlcCcgc2l6ZXMKICAgICAgICAgY291bnQoMSwgbWF4c2l6ZSs1KTsgc3lzLmV4Y19pbmZvKCkKQEAgLTU3Niw3ICs1ODUsOCBAQAogICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgIHIyID0gKCdjb3VudCglciwgJXIpJyAlIChpLCBqKSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHIxLCByMikKLSAgICAgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QoY291bnQoaSwgaikpCisgICAgICAgICAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgY291bnQoaSwgaikpCiAKICAgICBkZWYgdGVzdF9jeWNsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDEwLCBjeWNsZSgnYWJjJykpLCBsaXN0KCdhYmNhYmNhYmNhJykpCkBAIC01OTIsMTAgKzYwMiwxNiBAQAogICAgICAgICAjYW4gaW50ZXJuYWwgaXRlcmF0b3IKICAgICAgICAgI3NlbGYuYXNzZXJ0RXF1YWwodGFrZSgxMCwgY29weS5jb3B5KGMpKSwgbGlzdCgnYmNhYmNhYmNhYicpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMTAsIGNvcHkuZGVlcGNvcHkoYykpLCBsaXN0KCdiY2FiY2FiY2FiJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgxMCwgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjKSkpLCBsaXN0KCdiY2FiY2FiY2FiJykpCi0gICAgICAgIG5leHQoYykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YWtlKDEwLCBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGMpKSksIGxpc3QoJ2NhYmNhYmNhYmMnKSkKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGN5Y2xlKCdhYmMnKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMTAsIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYywgcHJvdG8pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QoJ2JjYWJjYWJjYWInKSkKKyAgICAgICAgICAgIG5leHQoYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgxMCwgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhjLCBwcm90bykpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCgnY2FiY2FiY2FiYycpKQorICAgICAgICAgICAgbmV4dChjKQorICAgICAgICAgICAgbmV4dChjKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgY3ljbGUoJ2FiYycpKQogCiAgICAgZGVmIHRlc3RfZ3JvdXBieShzZWxmKToKICAgICAgICAgIyBDaGVjayB3aGV0aGVyIGl0IGFjY2VwdHMgYXJndW1lbnRzIGNvcnJlY3RseQpAQCAtNjE2LDEyICs2MzIsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBkdXApCiAKICAgICAgICAgIyBDaGVjayBub3JtYWwgcGlja2xlZAotICAgICAgICBkdXAgPSBbXQotICAgICAgICBmb3IgaywgZyBpbiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGdyb3VwYnkocywgdGVzdFIpKSk6Ci0gICAgICAgICAgICBmb3IgZWxlbSBpbiBnOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgZWxlbVswXSkKLSAgICAgICAgICAgICAgICBkdXAuYXBwZW5kKGVsZW0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgZHVwKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGR1cCA9IFtdCisgICAgICAgICAgICBmb3IgaywgZyBpbiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGdyb3VwYnkocywgdGVzdFIpLCBwcm90bykpOgorICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIGc6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgZWxlbVswXSkKKyAgICAgICAgICAgICAgICAgICAgZHVwLmFwcGVuZChlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBkdXApCiAKICAgICAgICAgIyBDaGVjayBuZXN0ZWQgY2FzZQogICAgICAgICBkdXAgPSBbXQpAQCAtNjM0LDE0ICs2NTEsMTUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBkdXApCiAKICAgICAgICAgIyBDaGVjayBuZXN0ZWQgYW5kIHBpY2tsZWQKLSAgICAgICAgZHVwID0gW10KLSAgICAgICAgZm9yIGssIGcgaW4gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhncm91cGJ5KHMsIHRlc3RSKSkpOgotICAgICAgICAgICAgZm9yIGlrLCBpZyBpbiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGdyb3VwYnkoZywgdGVzdFIyKSkpOgotICAgICAgICAgICAgICAgIGZvciBlbGVtIGluIGlnOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIGVsZW1bMF0pCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWssIGVsZW1bMl0pCi0gICAgICAgICAgICAgICAgICAgIGR1cC5hcHBlbmQoZWxlbSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBkdXApCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZHVwID0gW10KKyAgICAgICAgICAgIGZvciBrLCBnIGluIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoZ3JvdXBieShzLCB0ZXN0UiksIHByb3RvKSk6CisgICAgICAgICAgICAgICAgZm9yIGlrLCBpZyBpbiBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGdyb3VwYnkoZywgdGVzdFIyKSwgcHJvdG8pKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIGVsZW0gaW4gaWc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGssIGVsZW1bMF0pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGlrLCBlbGVtWzJdKQorICAgICAgICAgICAgICAgICAgICAgICAgZHVwLmFwcGVuZChlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCBkdXApCiAKIAogICAgICAgICAjIENoZWNrIGNhc2Ugd2hlcmUgaW5uZXIgaXRlcmF0b3IgaXMgbm90IHVzZWQKQEAgLTY4MCw3ICs2OTgsNyBAQAogICAgICAgICAjIGl0ZXIuX19uZXh0X18gZmFpbHVyZSBvbiBpbm5lciBvYmplY3QKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhwZWN0ZWRFcnJvciwgZ3VscCwgZGVsYXllZF9yYWlzZSgxKSkKIAotICAgICAgICAjIF9fY21wX18gZmFpbHVyZQorICAgICAgICAjIF9fZXFfXyBmYWlsdXJlCiAgICAgICAgIGNsYXNzIER1bW15Q21wOgogICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBkc3QpOgogICAgICAgICAgICAgICAgIHJhaXNlIEV4cGVjdGVkRXJyb3IKQEAgLTcyMywxMiArNzQxLDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmNvcHkoYykpLCBhbnMpCiAgICAgICAgIGMgPSBmaWx0ZXIoaXNFdmVuLCByYW5nZSg2KSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvcHkuZGVlcGNvcHkoYykpLCBhbnMpCi0gICAgICAgIGMgPSBmaWx0ZXIoaXNFdmVuLCByYW5nZSg2KSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYykpKSwgYW5zKQotICAgICAgICBuZXh0KGMpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGMpKSksIGFuc1sxOl0pCi0gICAgICAgIGMgPSBmaWx0ZXIoaXNFdmVuLCByYW5nZSg2KSkKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGMpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgYyA9IGZpbHRlcihpc0V2ZW4sIHJhbmdlKDYpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoYywgcHJvdG8pKSksIGFucykKKyAgICAgICAgICAgIG5leHQoYykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGMsIHByb3RvKSkpLCBhbnNbMTpdKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGMgPSBmaWx0ZXIoaXNFdmVuLCByYW5nZSg2KSkKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgYykKIAogICAgIGRlZiB0ZXN0X2ZpbHRlcmZhbHNlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZmlsdGVyZmFsc2UoaXNFdmVuLCByYW5nZSg2KSkpLCBbMSwzLDVdKQpAQCAtNzQwLDcgKzc2MCw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZmlsdGVyZmFsc2UsIGxhbWJkYSB4OngsIHJhbmdlKDYpLCA3KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGZpbHRlcmZhbHNlLCBpc0V2ZW4sIDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbmV4dCwgZmlsdGVyZmFsc2UocmFuZ2UoNiksIHJhbmdlKDYpKSkKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGZpbHRlcmZhbHNlKGlzRXZlbiwgcmFuZ2UoNikpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgZmlsdGVyZmFsc2UoaXNFdmVuLCByYW5nZSg2KSkpCiAKICAgICBkZWYgdGVzdF96aXAoc2VsZik6CiAgICAgICAgICMgWFhYIFRoaXMgaXMgcmF0aGVyIHNpbGx5IG5vdyB0aGF0IGJ1aWx0aW4gemlwKCkgY2FsbHMgemlwKCkuLi4KQEAgLTc3MiwxNSArNzkzLDE4IEBACiAgICAgICAgIGFucyA9IFsoeCx5KSBmb3IgeCwgeSBpbiBjb3B5LmRlZXBjb3B5KHppcCgnYWJjJyxjb3VudCgpKSldCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5zLCBbKCdhJywgMCksICgnYicsIDEpLCAoJ2MnLCAyKV0pCiAKLSAgICAgICAgYW5zID0gWyh4LHkpIGZvciB4LCB5IGluIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoemlwKCdhYmMnLGNvdW50KCkpKSldCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5zLCBbKCdhJywgMCksICgnYicsIDEpLCAoJ2MnLCAyKV0pCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgYW5zID0gWyh4LHkpIGZvciB4LCB5IGluIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoemlwKCdhYmMnLGNvdW50KCkpLCBwcm90bykpXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbnMsIFsoJ2EnLCAwKSwgKCdiJywgMSksICgnYycsIDIpXSkKIAotICAgICAgICB0ZXN0SW50ZXJtZWRpYXRlID0gemlwKCdhYmMnLGNvdW50KCkpCi0gICAgICAgIG5leHQodGVzdEludGVybWVkaWF0ZSkKLSAgICAgICAgYW5zID0gWyh4LHkpIGZvciB4LCB5IGluIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHModGVzdEludGVybWVkaWF0ZSkpXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFucywgWygnYicsIDEpLCAoJ2MnLCAyKV0pCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgdGVzdEludGVybWVkaWF0ZSA9IHppcCgnYWJjJyxjb3VudCgpKQorICAgICAgICAgICAgbmV4dCh0ZXN0SW50ZXJtZWRpYXRlKQorICAgICAgICAgICAgYW5zID0gWyh4LHkpIGZvciB4LCB5IGluIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHModGVzdEludGVybWVkaWF0ZSwgcHJvdG8pKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYW5zLCBbKCdiJywgMSksICgnYycsIDIpXSkKIAotICAgICAgICBzZWxmLnBpY2tsZXRlc3QoemlwKCdhYmMnLCBjb3VudCgpKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIHppcCgnYWJjJywgY291bnQoKSkpCiAKICAgICBkZWYgdGVzdF96aXBsb25nZXN0KHNlbGYpOgogICAgICAgICBmb3IgYXJncyBpbiBbCkBAIC04MzIsMTAgKzg1NiwxMSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWN0LmZyb21rZXlzKGlkcykpLCBsZW4oaWRzKSkKIAogICAgIGRlZiB0ZXN0X3ppcF9sb25nZXN0X3BpY2tsaW5nKHNlbGYpOgotICAgICAgICBzZWxmLnBpY2tsZXRlc3QoemlwX2xvbmdlc3QoImFiYyIsICJkZWYiKSkKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHppcF9sb25nZXN0KCJhYmMiLCAiZGVmZ2giKSkKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHppcF9sb25nZXN0KCJhYmMiLCAiZGVmZ2giLCBmaWxsdmFsdWU9MSkpCi0gICAgICAgIHNlbGYucGlja2xldGVzdCh6aXBfbG9uZ2VzdCgiIiwgImRlZmdoIikpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCB6aXBfbG9uZ2VzdCgiYWJjIiwgImRlZiIpKQorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCB6aXBfbG9uZ2VzdCgiYWJjIiwgImRlZmdoIikpCisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIHppcF9sb25nZXN0KCJhYmMiLCAiZGVmZ2giLCBmaWxsdmFsdWU9MSkpCisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIHppcF9sb25nZXN0KCIiLCAiZGVmZ2giKSkKIAogICAgIGRlZiB0ZXN0X2J1Z183MjQ0KHNlbGYpOgogCkBAIC05NTcsNyArOTgyLDggQEAKICAgICAgICAgICAgIF06CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29weS5jb3B5KHByb2R1Y3QoKmFyZ3MpKSksIHJlc3VsdCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmRlZXBjb3B5KHByb2R1Y3QoKmFyZ3MpKSksIHJlc3VsdCkKLSAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm9kdWN0KCphcmdzKSkKKyAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgcHJvZHVjdCgqYXJncykpCiAKICAgICBkZWYgdGVzdF9wcm9kdWN0X2lzc3VlXzI1MDIxKHNlbGYpOgogICAgICAgICAjIHRlc3QgdGhhdCBpbmRpY2VzIGFyZSBwcm9wZXJseSBjbGFtcGVkIHRvIHRoZSBsZW5ndGggb2YgdGhlIHR1cGxlcwpAQCAtOTkyLDcgKzEwMTgsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGMpLCAnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFrZSgyLCBjb3B5LmNvcHkoYykpLCBsaXN0KCdhJyAqIDIpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRha2UoMiwgY29weS5kZWVwY29weShjKSksIGxpc3QoJ2EnICogMikpCi0gICAgICAgIHNlbGYucGlja2xldGVzdChyZXBlYXQob2JqZWN0PSdhJywgdGltZXM9MTApKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgcmVwZWF0KG9iamVjdD0nYScsIHRpbWVzPTEwKSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdF93aXRoX25lZ2F0aXZlX3RpbWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocmVwZWF0KCdhJywgLTEpKSwgInJlcGVhdCgnYScsIDApIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHJlcGVhdCgnYScsIC0yKSksICJyZXBlYXQoJ2EnLCAwKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyZXBlYXQoJ2EnLCB0aW1lcz0tMSkpLCAicmVwZWF0KCdhJywgMCkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocmVwZWF0KCdhJywgdGltZXM9LTIpKSwgInJlcGVhdCgnYScsIDApIikKIAogICAgIGRlZiB0ZXN0X21hcChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG1hcChvcGVyYXRvci5wb3csIHJhbmdlKDMpLCByYW5nZSgxLDcpKSksCkBAIC0xMDIwLDggKzEwNTMsOSBAQAogICAgICAgICBjID0gbWFwKHR1cGxlaXplLCAnYWJjJywgY291bnQoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvcHkuZGVlcGNvcHkoYykpLCBhbnMpCiAKLSAgICAgICAgYyA9IG1hcCh0dXBsZWl6ZSwgJ2FiYycsIGNvdW50KCkpCi0gICAgICAgIHNlbGYucGlja2xldGVzdChjKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGMgPSBtYXAodHVwbGVpemUsICdhYmMnLCBjb3VudCgpKQorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCBjKQogCiAgICAgZGVmIHRlc3Rfc3Rhcm1hcChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN0YXJtYXAob3BlcmF0b3IucG93LCB6aXAocmFuZ2UoMyksIHJhbmdlKDEsNykpKSksCkBAIC0xMDQ2LDggKzEwODAsOSBAQAogICAgICAgICBjID0gc3Rhcm1hcChvcGVyYXRvci5wb3csIHppcChyYW5nZSgzKSwgcmFuZ2UoMSw3KSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmRlZXBjb3B5KGMpKSwgYW5zKQogCi0gICAgICAgIGMgPSBzdGFybWFwKG9wZXJhdG9yLnBvdywgemlwKHJhbmdlKDMpLCByYW5nZSgxLDcpKSkKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGMpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgYyA9IHN0YXJtYXAob3BlcmF0b3IucG93LCB6aXAocmFuZ2UoMyksIHJhbmdlKDEsNykpKQorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCBjKQogCiAgICAgZGVmIHRlc3RfaXNsaWNlKHNlbGYpOgogICAgICAgICBmb3IgYXJncyBpbiBbICAgICAgICAgICMgaXNsaWNlKGFyZ3MpIHNob3VsZCBhZ3JlZSB3aXRoIHJhbmdlKGFyZ3MpCkBAIC0xMTEyLDcgKzExNDcsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChyYW5nZSgqYXJncykpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvcHkuZGVlcGNvcHkoaXNsaWNlKHJhbmdlKDEwMCksICphcmdzKSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHJhbmdlKCphcmdzKSkpCi0gICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QoaXNsaWNlKHJhbmdlKDEwMCksICphcmdzKSkKKyAgICAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgaXNsaWNlKHJhbmdlKDEwMCksICphcmdzKSkKKworICAgICAgICAjIElzc3VlICMyMTMyMTogY2hlY2sgc291cmNlIGl0ZXJhdG9yIGlzIG5vdCByZWZlcmVuY2VkCisgICAgICAgICMgZnJvbSBpc2xpY2UoKSBhZnRlciB0aGUgbGF0dGVyIGhhcyBiZWVuIGV4aGF1c3RlZAorICAgICAgICBpdCA9ICh4IGZvciB4IGluICgxLCAyKSkKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihpdCkKKyAgICAgICAgaXQgPSBpc2xpY2UoaXQsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHdyKCkpCisgICAgICAgIGxpc3QoaXQpICMgZXhoYXVzdCB0aGUgaXRlcmF0b3IKKyAgICAgICAgc3VwcG9ydC5nY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSkKIAogICAgIGRlZiB0ZXN0X3Rha2V3aGlsZShzZWxmKToKICAgICAgICAgZGF0YSA9IFsxLCAzLCA1LCAyMCwgMiwgNCwgNiwgOF0KQEAgLTExMzEsNyArMTE3Nyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmNvcHkodGFrZXdoaWxlKHVuZGVydGVuLCBkYXRhKSkpLCBbMSwgMywgNV0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmRlZXBjb3B5KHRha2V3aGlsZSh1bmRlcnRlbiwgZGF0YSkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFsxLCAzLCA1XSkKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHRha2V3aGlsZSh1bmRlcnRlbiwgZGF0YSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCB0YWtld2hpbGUodW5kZXJ0ZW4sIGRhdGEpKQogCiAgICAgZGVmIHRlc3RfZHJvcHdoaWxlKHNlbGYpOgogICAgICAgICBkYXRhID0gWzEsIDMsIDUsIDIwLCAyLCA0LCA2LCA4XQpAQCAtMTE0Nyw3ICsxMTk0LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvcHkuY29weShkcm9wd2hpbGUodW5kZXJ0ZW4sIGRhdGEpKSksIFsyMCwgMiwgNCwgNiwgOF0pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChjb3B5LmRlZXBjb3B5KGRyb3B3aGlsZSh1bmRlcnRlbiwgZGF0YSkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgIFsyMCwgMiwgNCwgNiwgOF0pCi0gICAgICAgIHNlbGYucGlja2xldGVzdChkcm9wd2hpbGUodW5kZXJ0ZW4sIGRhdGEpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgZHJvcHdoaWxlKHVuZGVydGVuLCBkYXRhKSkKIAogICAgIGRlZiB0ZXN0X3RlZShzZWxmKToKICAgICAgICAgbiA9IDIwMApAQCAtMTIzMCw3ICsxMjc4LDcgQEAKIAogICAgICAgICAjIHRlc3QgdGhhdCB0ZWUgb2JqZWN0cyBhcmUgd2VhayByZWZlcmVuY2FibGUKICAgICAgICAgYSwgYiA9IHRlZShyYW5nZSgxMCkpCi0gICAgICAgIHAgPSBwcm94eShhKQorICAgICAgICBwID0gd2Vha3JlZi5wcm94eShhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocCwgJ19fY2xhc3NfXycpLCB0eXBlKGIpKQogICAgICAgICBkZWwgYQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSZWZlcmVuY2VFcnJvciwgZ2V0YXR0ciwgcCwgJ19fY2xhc3NfXycpCkBAIC0xMjkxLDE2ICsxMzM5LDIxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChiKSwgbG9uZ19hbnNbNjA6XSkKIAogICAgICAgICAjIGNoZWNrIHBpY2tsZQotICAgICAgICBzZWxmLnBpY2tsZXRlc3QoaXRlcih0ZWUoJ2FiYycpKSkKLSAgICAgICAgYSwgYiA9IHRlZSgnYWJjJykKLSAgICAgICAgc2VsZi5waWNrbGV0ZXN0KGEsIGNvbXBhcmU9YW5zKQotICAgICAgICBzZWxmLnBpY2tsZXRlc3QoYiwgY29tcGFyZT1hbnMpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5waWNrbGV0ZXN0KHByb3RvLCBpdGVyKHRlZSgnYWJjJykpKQorICAgICAgICAgICAgYSwgYiA9IHRlZSgnYWJjJykKKyAgICAgICAgICAgIHNlbGYucGlja2xldGVzdChwcm90bywgYSwgY29tcGFyZT1hbnMpCisgICAgICAgICAgICBzZWxmLnBpY2tsZXRlc3QocHJvdG8sIGIsIGNvbXBhcmU9YW5zKQogCiAgICAgIyBJc3N1ZSAxMzQ1NDogQ3Jhc2ggd2hlbiBkZWxldGluZyBiYWNrd2FyZCBpdGVyYXRvciBmcm9tIHRlZSgpCiAgICAgZGVmIHRlc3RfdGVlX2RlbF9iYWNrd2FyZChzZWxmKToKICAgICAgICAgZm9yd2FyZCwgYmFja3dhcmQgPSB0ZWUocmVwZWF0KE5vbmUsIDIwMDAwMDAwKSkKLSAgICAgICAgYW55KGZvcndhcmQpICAjIGV4aGF1c3QgdGhlIGl0ZXJhdG9yCi0gICAgICAgIGRlbCBiYWNrd2FyZAorICAgICAgICB0cnk6CisgICAgICAgICAgICBhbnkoZm9yd2FyZCkgICMgZXhoYXVzdCB0aGUgaXRlcmF0b3IKKyAgICAgICAgICAgIGRlbCBiYWNrd2FyZAorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBkZWwgZm9yd2FyZCwgYmFja3dhcmQKKyAgICAgICAgICAgIHJhaXNlCiAKICAgICBkZWYgdGVzdF9TdG9wSXRlcmF0aW9uKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCB6aXAoKSkKQEAgLTEzMzQsMTEgKzEzODcsMTQgQEAKICAgICAgICAgIyBjaGVjayBjb3B5LCBkZWVwY29weSwgcGlja2xlCiAgICAgICAgIGRhdGEgPSBbMSwgMiwgMywgNCwgNV0KICAgICAgICAgYWNjdW11bGF0ZWQgPSBbMSwgMywgNiwgMTAsIDE1XQotICAgICAgICBpdCA9IGFjY3VtdWxhdGUoZGF0YSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhpdCkpKSwgYWNjdW11bGF0ZWRbOl0pCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgaXQgPSBhY2N1bXVsYXRlKGRhdGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pKSksIGFjY3VtdWxhdGVkWzpdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKGl0LCBwcm90bykpKSwgYWNjdW11bGF0ZWRbMTpdKQorICAgICAgICBpdCA9IGFjY3VtdWxhdGUoZGF0YSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMoaXQpKSksIGFjY3VtdWxhdGVkWzE6XSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvcHkuZGVlcGNvcHkoaXQpKSwgYWNjdW11bGF0ZWRbMTpdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29weS5jb3B5KGl0KSksIGFjY3VtdWxhdGVkWzE6XSkKIApAQCAtMTc1OCw5ICsxODE0LDE1IEBACiBjbGFzcyBMZW5ndGhUcmFuc3BhcmVuY3kodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfcmVwZWF0KHNlbGYpOgotICAgICAgICBmcm9tIHRlc3QudGVzdF9pdGVybGVuIGltcG9ydCBsZW4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVwZWF0KE5vbmUsIDUwKSksIDUwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxlbiwgcmVwZWF0KE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCA1MCkpLCA1MCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChyZXBlYXQoTm9uZSwgMCkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lKSwgMTIpLCAxMikKKworICAgIGRlZiB0ZXN0X3JlcGVhdF93aXRoX25lZ2F0aXZlX3RpbWVzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCAtMSkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCAtMikpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCB0aW1lcz0tMSkpLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KHJlcGVhdChOb25lLCB0aW1lcz0tMikpLCAwKQogCiBjbGFzcyBSZWdyZXNzaW9uVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCkBAIC0xODM3LDYgKzE4OTksNDQgQEAKICAgICAgICAgICAgICAgICAjIHdlIGV4cGVjdCB0eXBlIGVycm9ycyBiZWNhdXNlIG9mIHdyb25nIGFyZ3VtZW50IGNvdW50CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiZG9lcyBub3QgdGFrZSBrZXl3b3JkIGFyZ3VtZW50cyIsIGVyci5hcmdzWzBdKQogCitAc3VwcG9ydC5jcHl0aG9uX29ubHkKK2NsYXNzIFNpemVvZlRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zc2l6ZV90ID0gc3RydWN0LmNhbGNzaXplKCduJykKKworICAgIGNoZWNrX3NpemVvZiA9IHN1cHBvcnQuY2hlY2tfc2l6ZW9mCisKKyAgICBkZWYgdGVzdF9wcm9kdWN0X3NpemVvZihzZWxmKToKKyAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCczUGknKQorICAgICAgICBjaGVjayA9IHNlbGYuY2hlY2tfc2l6ZW9mCisgICAgICAgIGNoZWNrKHByb2R1Y3QoJ2FiJywgJzEyJyksIGJhc2VzaXplICsgMiAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2socHJvZHVjdCgqKCgnYWJjJywpICogMTApKSwgYmFzZXNpemUgKyAxMCAqIHNlbGYuc3NpemVfdCkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc19zaXplb2Yoc2VsZik6CisgICAgICAgIGJhc2VzaXplID0gc3VwcG9ydC5jYWxjb2Jqc2l6ZSgnM1BuaScpCisgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgY2hlY2soY29tYmluYXRpb25zKCdhYmNkJywgMyksIGJhc2VzaXplICsgMyAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2soY29tYmluYXRpb25zKHJhbmdlKDEwKSwgNCksIGJhc2VzaXplICsgNCAqIHNlbGYuc3NpemVfdCkKKworICAgIGRlZiB0ZXN0X2NvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50X3NpemVvZihzZWxmKToKKyAgICAgICAgY3dyID0gY29tYmluYXRpb25zX3dpdGhfcmVwbGFjZW1lbnQKKyAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCczUG5pJykKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgorICAgICAgICBjaGVjayhjd3IoJ2FiY2QnLCAzKSwgYmFzZXNpemUgKyAzICogc2VsZi5zc2l6ZV90KQorICAgICAgICBjaGVjayhjd3IocmFuZ2UoMTApLCA0KSwgYmFzZXNpemUgKyA0ICogc2VsZi5zc2l6ZV90KQorCisgICAgZGVmIHRlc3RfcGVybXV0YXRpb25zX3NpemVvZihzZWxmKToKKyAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCc0UG5pJykKKyAgICAgICAgY2hlY2sgPSBzZWxmLmNoZWNrX3NpemVvZgorICAgICAgICBjaGVjayhwZXJtdXRhdGlvbnMoJ2FiY2QnKSwKKyAgICAgICAgICAgICAgYmFzZXNpemUgKyA0ICogc2VsZi5zc2l6ZV90ICsgNCAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2socGVybXV0YXRpb25zKCdhYmNkJywgMyksCisgICAgICAgICAgICAgIGJhc2VzaXplICsgNCAqIHNlbGYuc3NpemVfdCArIDMgKiBzZWxmLnNzaXplX3QpCisgICAgICAgIGNoZWNrKHBlcm11dGF0aW9ucygnYWJjZGUnLCAzKSwKKyAgICAgICAgICAgICAgYmFzZXNpemUgKyA1ICogc2VsZi5zc2l6ZV90ICsgMyAqIHNlbGYuc3NpemVfdCkKKyAgICAgICAgY2hlY2socGVybXV0YXRpb25zKHJhbmdlKDEwKSwgNCksCisgICAgICAgICAgICAgIGJhc2VzaXplICsgMTAgKiBzZWxmLnNzaXplX3QgKyA0ICogc2VsZi5zc2l6ZV90KQorCiAKIGxpYnJlZnRlc3QgPSAiIiIgRG9jdGVzdCBmb3IgZXhhbXBsZXMgaW4gdGhlIGxpYnJhcnkgcmVmZXJlbmNlOiBsaWJpdGVydG9vbHMudGV4CiAKQEAgLTE5ODgsNiArMjA4OCwxOSBAQAogLi4uICAgICAjIHVuaXF1ZV9qdXN0c2VlbignQUJCQ2NBRCcsIHN0ci5sb3dlcikgLS0+IEEgQiBDIEEgRAogLi4uICAgICByZXR1cm4gbWFwKG5leHQsIG1hcChpdGVtZ2V0dGVyKDEpLCBncm91cGJ5KGl0ZXJhYmxlLCBrZXkpKSkKIAorPj4+IGRlZiBmaXJzdF90cnVlKGl0ZXJhYmxlLCBkZWZhdWx0PUZhbHNlLCBwcmVkPU5vbmUpOgorLi4uICAgICAnJydSZXR1cm5zIHRoZSBmaXJzdCB0cnVlIHZhbHVlIGluIHRoZSBpdGVyYWJsZS4KKy4uLgorLi4uICAgICBJZiBubyB0cnVlIHZhbHVlIGlzIGZvdW5kLCByZXR1cm5zICpkZWZhdWx0KgorLi4uCisuLi4gICAgIElmICpwcmVkKiBpcyBub3QgTm9uZSwgcmV0dXJucyB0aGUgZmlyc3QgaXRlbQorLi4uICAgICBmb3Igd2hpY2ggcHJlZChpdGVtKSBpcyB0cnVlLgorLi4uCisuLi4gICAgICcnJworLi4uICAgICAjIGZpcnN0X3RydWUoW2EsYixjXSwgeCkgLS0+IGEgb3IgYiBvciBjIG9yIHgKKy4uLiAgICAgIyBmaXJzdF90cnVlKFthLGJdLCB4LCBmKSAtLT4gYSBpZiBmKGEpIGVsc2UgYiBpZiBmKGIpIGVsc2UgeAorLi4uICAgICByZXR1cm4gbmV4dChmaWx0ZXIocHJlZCwgaXRlcmFibGUpLCBkZWZhdWx0KQorCiBUaGlzIGlzIG5vdCBwYXJ0IG9mIHRoZSBleGFtcGxlcyBidXQgaXQgdGVzdHMgdG8gbWFrZSBzdXJlIHRoZSBkZWZpbml0aW9ucwogcGVyZm9ybSBhcyBwdXJwb3J0ZWQuCiAKQEAgLTIwNjUsNiArMjE3OCw5IEBACiA+Pj4gbGlzdCh1bmlxdWVfanVzdHNlZW4oJ0FCQkNjQUQnLCBzdHIubG93ZXIpKQogWydBJywgJ0InLCAnQycsICdBJywgJ0QnXQogCis+Pj4gZmlyc3RfdHJ1ZSgnQUJDMERFRjEnLCAnOScsIHN0ci5pc2RpZ2l0KQorJzAnCisKICIiIgogCiBfX3Rlc3RfXyA9IHsnbGlicmVmdGVzdCcgOiBsaWJyZWZ0ZXN0fQpAQCAtMjA3Miw3ICsyMTg4LDggQEAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKICAgICB0ZXN0X2NsYXNzZXMgPSAoVGVzdEJhc2ljT3BzLCBUZXN0VmFyaW91c0l0ZXJhdG9yQXJncywgVGVzdEdDLAogICAgICAgICAgICAgICAgICAgICBSZWdyZXNzaW9uVGVzdHMsIExlbmd0aFRyYW5zcGFyZW5jeSwKLSAgICAgICAgICAgICAgICAgICAgU3ViY2xhc3NXaXRoS3dhcmdzVGVzdCwgVGVzdEV4YW1wbGVzKQorICAgICAgICAgICAgICAgICAgICBTdWJjbGFzc1dpdGhLd2FyZ3NUZXN0LCBUZXN0RXhhbXBsZXMsCisgICAgICAgICAgICAgICAgICAgIFNpemVvZlRlc3QpCiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKIAogICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9qc29uL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL19faW5pdF9fLnB5CmluZGV4IGY5OTRmOWIuLjJjZjEwMzIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfanNvbi9fX2luaXRfXy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2pzb24vX19pbml0X18ucHkKQEAgLTQyLDIzICs0MiwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdfanNvbicpCiAKIAotaGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLQotZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgotICAgIHN1aXRlID0gYWRkaXRpb25hbF90ZXN0cygpCi0gICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCi0gICAgZm9yIGZuIGluIG9zLmxpc3RkaXIoaGVyZSk6Ci0gICAgICAgIGlmIGZuLnN0YXJ0c3dpdGgoInRlc3QiKSBhbmQgZm4uZW5kc3dpdGgoIi5weSIpOgotICAgICAgICAgICAgbW9kbmFtZSA9ICJ0ZXN0LnRlc3RfanNvbi4iICsgZm5bOi0zXQotICAgICAgICAgICAgX19pbXBvcnRfXyhtb2RuYW1lKQotICAgICAgICAgICAgbW9kdWxlID0gc3lzLm1vZHVsZXNbbW9kbmFtZV0KLSAgICAgICAgICAgIHN1aXRlLmFkZFRlc3RzKGxvYWRlci5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkpCi0gICAgcmV0dXJuIHN1aXRlCi0KLWRlZiBhZGRpdGlvbmFsX3Rlc3RzKCk6CitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIF8sIHBhdHRlcm4pOgogICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKICAgICBmb3IgbW9kIGluIChqc29uLCBqc29uLmVuY29kZXIsIGpzb24uZGVjb2Rlcik6CiAgICAgICAgIHN1aXRlLmFkZFRlc3QoZG9jdGVzdC5Eb2NUZXN0U3VpdGUobW9kKSkKICAgICBzdWl0ZS5hZGRUZXN0KFRlc3RQeVRlc3QoJ3Rlc3RfcHlqc29uJykpCiAgICAgc3VpdGUuYWRkVGVzdChUZXN0Q1Rlc3QoJ3Rlc3RfY2pzb24nKSkKLSAgICByZXR1cm4gc3VpdGUKKworICAgIHBrZ19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgcmV0dXJuIHN1cHBvcnQubG9hZF9wYWNrYWdlX3Rlc3RzKHBrZ19kaXIsIGxvYWRlciwgc3VpdGUsIHBhdHRlcm4pCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9kZWNvZGUucHkKaW5kZXggMTcyNDVlYi4uNTkxYjJlMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZGVjb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2RlY29kZS5weQpAQCAtMSw1ICsxLDUgQEAKIGltcG9ydCBkZWNpbWFsCi1mcm9tIGlvIGltcG9ydCBTdHJpbmdJTworZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8sIEJ5dGVzSU8KIGZyb20gY29sbGVjdGlvbnMgaW1wb3J0IE9yZGVyZWREaWN0CiBmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CiAKQEAgLTcwLDYgKzcwLDI3IEBACiAgICAgICAgIG1zZyA9ICdlc2NhcGUnCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgbXNnLCBzZWxmLmxvYWRzLCBzKQogCisgICAgZGVmIHRlc3RfaW52YWxpZF9pbnB1dF90eXBlKHNlbGYpOgorICAgICAgICBtc2cgPSAndGhlIEpTT04gb2JqZWN0IG11c3QgYmUgc3RyJworICAgICAgICBmb3IgdmFsdWUgaW4gWzEsIDMuMTQsIGInYnl0ZXMnLCBiJ1x4ZmZceDAwJywgW10sIHt9LCBOb25lXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2csIHNlbGYubG9hZHMsIHZhbHVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVHlwZUVycm9yLCBtc2cpOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoQnl0ZXNJTyhiJ1sxLDIsM10nKSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ193aXRoX3V0ZjhfYm9tKHNlbGYpOgorICAgICAgICAjIHNlZSAjMTg5NTgKKyAgICAgICAgYm9tX2pzb24gPSAiWzEsMiwzXSIuZW5jb2RlKCd1dGYtOC1zaWcnKS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHNlbGYubG9hZHMoYm9tX2pzb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ0JPTScsIHN0cihjbS5leGNlcHRpb24pKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgc2VsZi5qc29uLmxvYWQoU3RyaW5nSU8oYm9tX2pzb24pKQorICAgICAgICBzZWxmLmFzc2VydEluKCdCT00nLCBzdHIoY20uZXhjZXB0aW9uKSkKKyAgICAgICAgIyBtYWtlIHN1cmUgdGhhdCB0aGUgQk9NIGlzIG5vdCBkZXRlY3RlZCBpbiB0aGUgbWlkZGxlIG9mIGEgc3RyaW5nCisgICAgICAgIGJvbV9pbl9zdHIgPSAnInt9IicuZm9ybWF0KCcnLmVuY29kZSgndXRmLTgtc2lnJykuZGVjb2RlKCd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoYm9tX2luX3N0ciksICdcdWZlZmYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuanNvbi5sb2FkKFN0cmluZ0lPKGJvbV9pbl9zdHIpKSwgJ1x1ZmVmZicpCisKICAgICBkZWYgdGVzdF9uZWdhdGl2ZV9pbmRleChzZWxmKToKICAgICAgICAgZCA9IHNlbGYuanNvbi5KU09ORGVjb2RlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGQucmF3X2RlY29kZSwgJ2EnKjQyLCAtNTAwMDApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9lbnVtLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW51bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGY0MTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZW51bS5weQpAQCAtMCwwICsxLDEyMCBAQAorZnJvbSBlbnVtIGltcG9ydCBFbnVtLCBJbnRFbnVtCitmcm9tIG1hdGggaW1wb3J0IGlzbmFuCitmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CisKK1NNQUxMID0gMQorQklHID0gMTw8MzIKK0hVR0UgPSAxPDw2NAorUkVBTExZX0hVR0UgPSAxPDw5NgorCitjbGFzcyBCaWdOdW0oSW50RW51bSk6CisgICAgc21hbGwgPSBTTUFMTAorICAgIGJpZyA9IEJJRworICAgIGh1Z2UgPSBIVUdFCisgICAgcmVhbGx5X2h1Z2UgPSBSRUFMTFlfSFVHRQorCitFID0gMi43MTgyODEKK1BJID0gMy4xNDE1OTMKK1RBVSA9IDIgKiBQSQorCitjbGFzcyBGbG9hdE51bShmbG9hdCwgRW51bSk6CisgICAgZSA9IEUKKyAgICBwaSA9IFBJCisgICAgdGF1ID0gVEFVCisKK0lORiA9IGZsb2F0KCdpbmYnKQorTkVHX0lORiA9IGZsb2F0KCctaW5mJykKK05BTiA9IGZsb2F0KCduYW4nKQorCitjbGFzcyBXaWVyZE51bShmbG9hdCwgRW51bSk6CisgICAgaW5mID0gSU5GCisgICAgbmVnX2luZiA9IE5FR19JTkYKKyAgICBuYW4gPSBOQU4KKworY2xhc3MgVGVzdEVudW06CisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgIGZvciBlbnVtIGluIEZsb2F0TnVtOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGVudW0pLCByZXByKGVudW0udmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKworICAgIGRlZiB0ZXN0X3dlaXJkX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgZm9yIGVudW0sIGV4cGVjdGVkIGluIHppcChXaWVyZE51bSwgKCdJbmZpbml0eScsICctSW5maW5pdHknLCAnTmFOJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGVudW0pLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGlmIG5vdCBpc25hbihlbnVtKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSwgZW51bSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzbmFuKGZsb2F0KHNlbGYuZHVtcHMoZW51bSkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4oc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGVudW0pKSkpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBmb3IgZW51bSBpbiBCaWdOdW06CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZHVtcHMoZW51bSksIHN0cihlbnVtLnZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZW51bSkpLCBlbnVtKQorCisgICAgZGVmIHRlc3RfbGlzdChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmR1bXBzKGxpc3QoQmlnTnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKFtTTUFMTCwgQklHLCBIVUdFLCBSRUFMTFlfSFVHRV0pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KEJpZ051bSkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KEJpZ051bSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhsaXN0KEZsb2F0TnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RyKFtFLCBQSSwgVEFVXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGxpc3QoRmxvYXROdW0pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChGbG9hdE51bSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSksCisgICAgICAgICAgICAgICAgICAgICAgICAnW0luZmluaXR5LCAtSW5maW5pdHksIE5hTl0nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9hZHMoc2VsZi5kdW1wcyhsaXN0KFdpZXJkTnVtKSkpWzoyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0KFdpZXJkTnVtKVs6Ml0pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc25hbihzZWxmLmxvYWRzKHNlbGYuZHVtcHMobGlzdChXaWVyZE51bSkpKVsyXSkpCisKKyAgICBkZWYgdGVzdF9kaWN0X2tleXMoc2VsZik6CisgICAgICAgIHMsIGIsIGgsIHIgPSBCaWdOdW0KKyAgICAgICAgZSwgcCwgdCA9IEZsb2F0TnVtCisgICAgICAgIGksIGosIG4gPSBXaWVyZE51bQorICAgICAgICBkID0geworICAgICAgICAgICAgczondGlueScsIGI6J2xhcmdlJywgaDonbGFyZ2VyJywgcjonbGFyZ2VzdCcsCisgICAgICAgICAgICBlOiJFdWxlcidzIG51bWJlciIsIHA6J3BpJywgdDondGF1JywKKyAgICAgICAgICAgIGk6J0luZmluaXR5JywgajonLUluZmluaXR5JywgbjonTmFOJywKKyAgICAgICAgICAgIH0KKyAgICAgICAgbmQgPSBzZWxmLmxvYWRzKHNlbGYuZHVtcHMoZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKFNNQUxMKV0sICd0aW55JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtzdHIoQklHKV0sICdsYXJnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKEhVR0UpXSwgJ2xhcmdlcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbc3RyKFJFQUxMWV9IVUdFKV0sICdsYXJnZXN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKEUpXSwgIkV1bGVyJ3MgbnVtYmVyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFtyZXByKFBJKV0sICdwaScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbcmVwcihUQVUpXSwgJ3RhdScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ0luZmluaXR5J10sICdJbmZpbml0eScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJy1JbmZpbml0eSddLCAnLUluZmluaXR5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnTmFOJ10sICdOYU4nKQorCisgICAgZGVmIHRlc3RfZGljdF92YWx1ZXMoc2VsZik6CisgICAgICAgIGQgPSBkaWN0KAorICAgICAgICAgICAgICAgIHRpbnk9QmlnTnVtLnNtYWxsLAorICAgICAgICAgICAgICAgIGxhcmdlPUJpZ051bS5iaWcsCisgICAgICAgICAgICAgICAgbGFyZ2VyPUJpZ051bS5odWdlLAorICAgICAgICAgICAgICAgIGxhcmdlc3Q9QmlnTnVtLnJlYWxseV9odWdlLAorICAgICAgICAgICAgICAgIGU9RmxvYXROdW0uZSwKKyAgICAgICAgICAgICAgICBwaT1GbG9hdE51bS5waSwKKyAgICAgICAgICAgICAgICB0YXU9RmxvYXROdW0udGF1LAorICAgICAgICAgICAgICAgIGk9V2llcmROdW0uaW5mLAorICAgICAgICAgICAgICAgIGo9V2llcmROdW0ubmVnX2luZiwKKyAgICAgICAgICAgICAgICBuPVdpZXJkTnVtLm5hbiwKKyAgICAgICAgICAgICAgICApCisgICAgICAgIG5kID0gc2VsZi5sb2FkcyhzZWxmLmR1bXBzKGQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWyd0aW55J10sIFNNQUxMKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydsYXJnZSddLCBCSUcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ2xhcmdlciddLCBIVUdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydsYXJnZXN0J10sIFJFQUxMWV9IVUdFKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydlJ10sIEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmRbJ3BpJ10sIFBJKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWyd0YXUnXSwgVEFVKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5kWydpJ10sIElORikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZFsnaiddLCBORUdfSU5GKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNuYW4obmRbJ24nXSkpCisKK2NsYXNzIFRlc3RQeUVudW0oVGVzdEVudW0sIFB5VGVzdCk6IHBhc3MKK2NsYXNzIFRlc3RDRW51bShUZXN0RW51bSwgQ1Rlc3QpOiBwYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfZmFpbC5weQppbmRleCAzZGQ4NzdhLi43Y2FhZmRiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9mYWlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2ZhaWwucHkKQEAgLTEsNCArMSw1IEBACiBmcm9tIHRlc3QudGVzdF9qc29uIGltcG9ydCBQeVRlc3QsIENUZXN0CitpbXBvcnQgcmUKIAogIyAyMDA3LTEwLTA1CiBKU09ORE9DUyA9IFsKQEAgLTEwMCw2ICsxMDEsOTQgQEAKICAgICAgICAgI1RoaXMgaXMgZm9yIHB5dGhvbiBlbmNvZGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kdW1wcywgZGF0YSwgaW5kZW50PVRydWUpCiAKKyAgICBkZWYgdGVzdF90cnVuY2F0ZWRfaW5wdXQoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJycsICdFeHBlY3RpbmcgdmFsdWUnLCAwKSwKKyAgICAgICAgICAgICgnWycsICdFeHBlY3RpbmcgdmFsdWUnLCAxKSwKKyAgICAgICAgICAgICgnWzQyJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgMyksCisgICAgICAgICAgICAoJ1s0MiwnLCAnRXhwZWN0aW5nIHZhbHVlJywgNCksCisgICAgICAgICAgICAoJ1siJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgnWyJzcGFtIicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCdbInNwYW0iLCcsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgneycsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3siJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtIicsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDcpLAorICAgICAgICAgICAgKCd7InNwYW0iOicsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDEwKSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0MiwnLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDExKSwKKyAgICAgICAgXQorICAgICAgICB0ZXN0X2Nhc2VzICs9IFsKKyAgICAgICAgICAgICgnIicsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMCksCisgICAgICAgICAgICAoJyJzcGFtJywgJ1VudGVybWluYXRlZCBzdHJpbmcgc3RhcnRpbmcgYXQnLCAwKSwKKyAgICAgICAgXQorICAgICAgICBmb3IgZGF0YSwgbXNnLCBpZHggaW4gdGVzdF9jYXNlczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICByJ157MH06IGxpbmUgMSBjb2x1bW4gezF9IFwoY2hhciB7Mn1cKScuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICByZS5lc2NhcGUobXNnKSwgaWR4ICsgMSwgaWR4KSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfdW5leHBlY3RlZF9kYXRhKHNlbGYpOgorICAgICAgICB0ZXN0X2Nhc2VzID0gWworICAgICAgICAgICAgKCdbLCcsICdFeHBlY3RpbmcgdmFsdWUnLCAxKSwKKyAgICAgICAgICAgICgneyJzcGFtIjpbfScsICdFeHBlY3RpbmcgdmFsdWUnLCA5KSwKKyAgICAgICAgICAgICgnWzQyOicsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDMpLAorICAgICAgICAgICAgKCdbNDIgInNwYW0iJywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNCksCisgICAgICAgICAgICAoJ1s0MixdJywgJ0V4cGVjdGluZyB2YWx1ZScsIDQpLAorICAgICAgICAgICAgKCd7InNwYW0iOls0Mn0nLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMSksCisgICAgICAgICAgICAoJ1siXScsICdVbnRlcm1pbmF0ZWQgc3RyaW5nIHN0YXJ0aW5nIGF0JywgMSksCisgICAgICAgICAgICAoJ1sic3BhbSI6JywgIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1sic3BhbSIsXScsICdFeHBlY3RpbmcgdmFsdWUnLCA4KSwKKyAgICAgICAgICAgICgnezonLCAnRXhwZWN0aW5nIHByb3BlcnR5IG5hbWUgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3RlcycsIDEpLAorICAgICAgICAgICAgKCd7LCcsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ3s0MicsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMSksCisgICAgICAgICAgICAoJ1t7XScsICdFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzJywgMiksCisgICAgICAgICAgICAoJ3sic3BhbSIsJywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ3sic3BhbSJ9JywgIkV4cGVjdGluZyAnOicgZGVsaW1pdGVyIiwgNyksCisgICAgICAgICAgICAoJ1t7InNwYW0iXScsICJFeHBlY3RpbmcgJzonIGRlbGltaXRlciIsIDgpLAorICAgICAgICAgICAgKCd7InNwYW0iOn0nLCAnRXhwZWN0aW5nIHZhbHVlJywgOCksCisgICAgICAgICAgICAoJ1t7InNwYW0iOl0nLCAnRXhwZWN0aW5nIHZhbHVlJywgOSksCisgICAgICAgICAgICAoJ3sic3BhbSI6NDIgImhhbSInLCAiRXhwZWN0aW5nICcsJyBkZWxpbWl0ZXIiLCAxMSksCisgICAgICAgICAgICAoJ1t7InNwYW0iOjQyXScsICJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIDExKSwKKyAgICAgICAgICAgICgneyJzcGFtIjo0Mix9JywgJ0V4cGVjdGluZyBwcm9wZXJ0eSBuYW1lIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMnLCAxMSksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIG1zZywgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideezB9OiBsaW5lIDEgY29sdW1uIHsxfSBcKGNoYXIgezJ9XCknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGlkeCksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKKworICAgIGRlZiB0ZXN0X2V4dHJhX2RhdGEoc2VsZik6CisgICAgICAgIHRlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJ1tdXScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJ3t9fScsICdFeHRyYSBkYXRhJywgMiksCisgICAgICAgICAgICAoJ1tdLFtdJywgJ0V4dHJhIGRhdGEnLCAyKSwKKyAgICAgICAgICAgICgne30se30nLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICBdCisgICAgICAgIHRlc3RfY2FzZXMgKz0gWworICAgICAgICAgICAgKCc0Miwic3BhbSInLCAnRXh0cmEgZGF0YScsIDIpLAorICAgICAgICAgICAgKCcic3BhbSIsNDInLCAnRXh0cmEgZGF0YScsIDYpLAorICAgICAgICBdCisgICAgICAgIGZvciBkYXRhLCBtc2csIGlkeCBpbiB0ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgIHInXnswfTogbGluZSAxIGNvbHVtbiB7MX0gLSBsaW5lIDEgY29sdW1uIHsyfScKKyAgICAgICAgICAgICAgICByJyBcKGNoYXIgezN9IC0gezR9XCknLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmUuZXNjYXBlKG1zZyksIGlkeCArIDEsIGxlbihkYXRhKSArIDEsIGlkeCwgbGVuKGRhdGEpKSwKKyAgICAgICAgICAgICAgICBzZWxmLmxvYWRzLCBkYXRhKQorCisgICAgZGVmIHRlc3RfbGluZWNvbChzZWxmKToKKyAgICAgICAgdGVzdF9jYXNlcyA9IFsKKyAgICAgICAgICAgICgnIScsIDEsIDEsIDApLAorICAgICAgICAgICAgKCcgIScsIDEsIDIsIDEpLAorICAgICAgICAgICAgKCdcbiEnLCAyLCAxLCAxKSwKKyAgICAgICAgICAgICgnXG4gIFxuXG4gICAgICEnLCA0LCA2LCAxMCksCisgICAgICAgIF0KKyAgICAgICAgZm9yIGRhdGEsIGxpbmUsIGNvbCwgaWR4IGluIHRlc3RfY2FzZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgcideRXhwZWN0aW5nIHZhbHVlOiBsaW5lIHswfSBjb2x1bW4gezF9JworICAgICAgICAgICAgICAgIHInIFwoY2hhciB7Mn1cKSQnLmZvcm1hdChsaW5lLCBjb2wsIGlkeCksCisgICAgICAgICAgICAgICAgc2VsZi5sb2FkcywgZGF0YSkKIAogY2xhc3MgVGVzdFB5RmFpbChUZXN0RmFpbCwgUHlUZXN0KTogcGFzcwogY2xhc3MgVGVzdENGYWlsKFRlc3RGYWlsLCBDVGVzdCk6IHBhc3MKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weSBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X2luZGVudC5weQppbmRleCBhNGQ0ZDIwLi5lMDc4NTZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9pbmRlbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3RfaW5kZW50LnB5CkBAIC0zMiw2ICszMiw4IEBACiAgICAgICAgIGQxID0gc2VsZi5kdW1wcyhoKQogICAgICAgICBkMiA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQogICAgICAgICBkMyA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PSdcdCcsIHNvcnRfa2V5cz1UcnVlLCBzZXBhcmF0b3JzPSgnLCcsICc6ICcpKQorICAgICAgICBkNCA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PTIsIHNvcnRfa2V5cz1UcnVlKQorICAgICAgICBkNSA9IHNlbGYuZHVtcHMoaCwgaW5kZW50PSdcdCcsIHNvcnRfa2V5cz1UcnVlKQogCiAgICAgICAgIGgxID0gc2VsZi5sb2FkcyhkMSkKICAgICAgICAgaDIgPSBzZWxmLmxvYWRzKGQyKQpAQCAtNDIsNiArNDQsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgzLCBoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQyLCBleHBlY3QuZXhwYW5kdGFicygyKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkMywgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQ0LCBkMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkNSwgZDMpCiAKICAgICBkZWYgdGVzdF9pbmRlbnQwKHNlbGYpOgogICAgICAgICBoID0gezM6IDF9CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9zZXBhcmF0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9qc29uL3Rlc3Rfc2VwYXJhdG9ycy5weQppbmRleCA4NGEyYmU5Li44Y2E1MTc0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2pzb24vdGVzdF9zZXBhcmF0b3JzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfanNvbi90ZXN0X3NlcGFyYXRvcnMucHkKQEAgLTM5LDYgKzM5LDEyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaDIsIGgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZDIsIGV4cGVjdCkKIAorICAgIGRlZiB0ZXN0X2lsbGVnYWxfc2VwYXJhdG9ycyhzZWxmKToKKyAgICAgICAgaCA9IHsxOiAyLCAzOiA0fQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZHVtcHMsIGgsIHNlcGFyYXRvcnM9KGInLCAnLCAnOiAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmR1bXBzLCBoLCBzZXBhcmF0b3JzPSgnLCAnLCBiJzogJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5kdW1wcywgaCwgc2VwYXJhdG9ycz0oYicsICcsIGInOiAnKSkKKwogCiBjbGFzcyBUZXN0UHlTZXBhcmF0b3JzKFRlc3RTZXBhcmF0b3JzLCBQeVRlc3QpOiBwYXNzCiBjbGFzcyBUZXN0Q1NlcGFyYXRvcnMoVGVzdFNlcGFyYXRvcnMsIENUZXN0KTogcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9rZXl3b3JkLnB5IGIvTGliL3Rlc3QvdGVzdF9rZXl3b3JkLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOTlmNTIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmQucHkKQEAgLTAsMCArMSwxMzggQEAKK2ltcG9ydCBrZXl3b3JkCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IGZpbGVjbXAKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHN1YnByb2Nlc3MKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCB0ZXh0d3JhcAorCitLRVlXT1JEX0ZJTEUgICAgICAgICAgICAgPSBzdXBwb3J0LmZpbmRmaWxlKCdrZXl3b3JkLnB5JykKK0dSQU1NQVJfRklMRSAgICAgICAgICAgICA9IG9zLnBhdGguam9pbihvcy5wYXRoLnNwbGl0KF9fZmlsZV9fKVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLi4nLCAnLi4nLCAnUHl0aG9uJywgJ2dyYW1pbml0LmMnKQorVEVTVF9QWV9GSUxFICAgICAgICAgICAgID0gJ2tleXdvcmRfdGVzdC5weScKK0dSQU1NQVJfVEVTVF9GSUxFICAgICAgICA9ICdncmFtaW5pdF90ZXN0LmMnCitQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMgPSAnbWluaW1hbF9rZXl3b3JkLnB5JworTk9ORVhJU1RFTlRfRklMRSAgICAgICAgID0gJ25vdF9oZXJlLnR4dCcKKworCitjbGFzcyBUZXN0X2lza2V5d29yZCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdHJ1ZV9pc19hX2tleXdvcmQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrZXl3b3JkLmlza2V5d29yZCgnVHJ1ZScpKQorCisgICAgZGVmIHRlc3RfdXBwZXJjYXNlX3RydWVfaXNfbm90X2Ffa2V5d29yZChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrZXl3b3JkLmlza2V5d29yZCgnVFJVRScpKQorCisgICAgZGVmIHRlc3Rfbm9uZV92YWx1ZV9pc19ub3RfYV9rZXl3b3JkKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGtleXdvcmQuaXNrZXl3b3JkKE5vbmUpKQorCisgICAgIyBUaGlzIGlzIHByb2JhYmx5IGFuIGFjY2lkZW50IG9mIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBidXQgc2hvdWxkIGJlCisgICAgIyBwcmVzZXJ2ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgICAgZGVmIHRlc3RfY2hhbmdpbmdfdGhlX2t3bGlzdF9kb2VzX25vdF9hZmZlY3RfaXNrZXl3b3JkKHNlbGYpOgorICAgICAgICBvbGRsaXN0ID0ga2V5d29yZC5rd2xpc3QKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNldGF0dHIsIGtleXdvcmQsICdrd2xpc3QnLCBvbGRsaXN0KQorICAgICAgICBrZXl3b3JkLmt3bGlzdCA9IFsnaXRzJywgJ2FsbCcsICdlZ2dzJywgJ2JlYW5zJywgJ2FuZCcsICdhJywgJ3NsaWNlJ10KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrZXl3b3JkLmlza2V5d29yZCgnZWdncycpKQorCisKK2NsYXNzIFRlc3RLZXl3b3JkR2VuZXJhdGlvbih1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX2NvcHlfZmlsZV93aXRob3V0X2dlbmVyYXRlZF9rZXl3b3JkcyhzZWxmLCBzb3VyY2VfZmlsZSwgZGVzdF9maWxlKToKKyAgICAgICAgd2l0aCBvcGVuKHNvdXJjZV9maWxlLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIGxpbmVzID0gZnAucmVhZGxpbmVzKCkKKyAgICAgICAgbmwgPSBsaW5lc1swXVtsZW4obGluZXNbMF0uc3RyaXAoKSk6XQorICAgICAgICB3aXRoIG9wZW4oZGVzdF9maWxlLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIGZwLndyaXRlbGluZXMobGluZXNbOmxpbmVzLmluZGV4KGIiIy0tc3RhcnQga2V5d29yZHMtLSIgKyBubCkgKyAxXSkKKyAgICAgICAgICAgIGZwLndyaXRlbGluZXMobGluZXNbbGluZXMuaW5kZXgoYiIjLS1lbmQga2V5d29yZHMtLSIgKyBubCk6XSkKKworICAgIGRlZiBfZ2VuZXJhdGVfa2V5d29yZHMoc2VsZiwgZ3JhbW1hcl9maWxlLCB0YXJnZXRfa2V5d29yZF9weV9maWxlKToKKyAgICAgICAgcHJvYyA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS0VZV09SRF9GSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hcl9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2tleXdvcmRfcHlfZmlsZV0sIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHN0ZGVyciA9IHByb2MuY29tbXVuaWNhdGUoKVsxXQorICAgICAgICByZXR1cm4gcHJvYy5yZXR1cm5jb2RlLCBzdGRlcnIKKworICAgIEB1bml0dGVzdC5za2lwSWYobm90IG9zLnBhdGguZXhpc3RzKEdSQU1NQVJfRklMRSksCisgICAgICAgICAgICAgICAgICAgICAndGVzdCBvbmx5IHdvcmtzIGZyb20gc291cmNlIGJ1aWxkIGRpcmVjdG9yeScpCisgICAgZGVmIHRlc3RfcmVhbF9ncmFtbWFyX2FuZF9rZXl3b3JkX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX2NvcHlfZmlsZV93aXRob3V0X2dlbmVyYXRlZF9rZXl3b3JkcyhLRVlXT1JEX0ZJTEUsIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZmlsZWNtcC5jbXAoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgwLCBiJycpLCBzZWxmLl9nZW5lcmF0ZV9rZXl3b3JkcyhHUkFNTUFSX0ZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfUFlfRklMRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChLRVlXT1JEX0ZJTEUsIFRFU1RfUFlfRklMRSkpCisKKyAgICBkZWYgdGVzdF9ncmFtbWFyKHNlbGYpOgorICAgICAgICBzZWxmLl9jb3B5X2ZpbGVfd2l0aG91dF9nZW5lcmF0ZWRfa2V5d29yZHMoS0VZV09SRF9GSUxFLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgVEVTVF9QWV9GSUxFKQorICAgICAgICB3aXRoIG9wZW4oR1JBTU1BUl9URVNUX0ZJTEUsICd3JykgYXMgZnA6CisgICAgICAgICAgICAjIFNvbWUgb2YgdGhlc2UgYXJlIHByb2JhYmx5IGltcGxlbWVudGF0aW9uIGFjY2lkZW50cy4KKyAgICAgICAgICAgIGZwLndyaXRlbGluZXModGV4dHdyYXAuZGVkZW50KCIiIlwKKyAgICAgICAgICAgICAgICB7MiwgMX0sCisgICAgICAgICAgICAgICAgICAgIHsxMSwgImVuY29kaW5nX2RlY2wiLCAwLCAyLCBzdGF0ZXNfNzksCisgICAgICAgICAgICAgICAgICAgICAiXDAwMFwwMDBcMDQwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwIgorICAgICAgICAgICAgICAgICAgICAgIlwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMFwwMDBcMDAwXDAwMCJ9LAorICAgICAgICAgICAgICAgICAgICB7MSwgImplbGxvIn0sCisgICAgICAgICAgICAgICAgICAgIHszMjYsIDB9LAorICAgICAgICAgICAgICAgICAgICB7MSwgInR1cm5pcCJ9LAorICAgICAgICAgICAgICAgIFx0ezEsICJUaGlzIG9uZSBpcyB0YWIgaW5kZW50ZWQiCisgICAgICAgICAgICAgICAgICAgIHsyNzgsIDB9LAorICAgICAgICAgICAgICAgICAgICB7MSwgImNyYXp5IGJ1dCBsZWdhbCIKKyAgICAgICAgICAgICAgICAiYWxzbyBsZWdhbCIgezEsICIKKyAgICAgICAgICAgICAgICAgICAgezEsICJjb250aW51ZSJ9LAorICAgICAgICAgICAgICAgICAgIHsxLCAibGVtb24ifSwKKyAgICAgICAgICAgICAgICAgICAgIHsxLCAidG9tYXRvIn0sCisgICAgICAgICAgICAgICAgezEsICJ3aWdpaSJ9LAorICAgICAgICAgICAgICAgICAgICB7MSwgJ25vIGdvb2QnfQorICAgICAgICAgICAgICAgICAgICB7MjgzLCAwfSwKKyAgICAgICAgICAgICAgICAgICAgezEsICAidG9vIG1hbnkgc3BhY2VzIn0iIiIpKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIEdSQU1NQVJfVEVTVF9GSUxFKQorICAgICAgICBzZWxmLl9nZW5lcmF0ZV9rZXl3b3JkcyhHUkFNTUFSX1RFU1RfRklMRSwgVEVTVF9QWV9GSUxFKQorICAgICAgICBleHBlY3RlZCA9IFsKKyAgICAgICAgICAgICIgICAgICAgICdUaGlzIG9uZSBpcyB0YWIgaW5kZW50ZWQnLCIsCisgICAgICAgICAgICAiICAgICAgICAnYWxzbyBsZWdhbCcsIiwKKyAgICAgICAgICAgICIgICAgICAgICdjb250aW51ZScsIiwKKyAgICAgICAgICAgICIgICAgICAgICdjcmF6eSBidXQgbGVnYWwnLCIsCisgICAgICAgICAgICAiICAgICAgICAnamVsbG8nLCIsCisgICAgICAgICAgICAiICAgICAgICAnbGVtb24nLCIsCisgICAgICAgICAgICAiICAgICAgICAndG9tYXRvJywiLAorICAgICAgICAgICAgIiAgICAgICAgJ3R1cm5pcCcsIiwKKyAgICAgICAgICAgICIgICAgICAgICd3aWdpaScsIiwKKyAgICAgICAgICAgIF0KKyAgICAgICAgd2l0aCBvcGVuKFRFU1RfUFlfRklMRSkgYXMgZnA6CisgICAgICAgICAgICBsaW5lcyA9IGZwLnJlYWQoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgc3RhcnQgPSBsaW5lcy5pbmRleCgiIy0tc3RhcnQga2V5d29yZHMtLSIpICsgMQorICAgICAgICBlbmQgPSBsaW5lcy5pbmRleCgiIy0tZW5kIGtleXdvcmRzLS0iKQorICAgICAgICBhY3R1YWwgPSBsaW5lc1tzdGFydDplbmRdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2VtcHR5X2dyYW1tYXJfcmVzdWx0c19pbl9ub19rZXl3b3JkcyhzZWxmKToKKyAgICAgICAgc2VsZi5fY29weV9maWxlX3dpdGhvdXRfZ2VuZXJhdGVkX2tleXdvcmRzKEtFWVdPUkRfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX0ZJTEVfV0lUSE9VVF9LRVlXT1JEUykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBQWV9GSUxFX1dJVEhPVVRfS0VZV09SRFMpCisgICAgICAgIHNodXRpbC5jb3B5ZmlsZShLRVlXT1JEX0ZJTEUsIFRFU1RfUFlfRklMRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBURVNUX1BZX0ZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDAsIGInJyksIHNlbGYuX2dlbmVyYXRlX2tleXdvcmRzKG9zLmRldm51bGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFU1RfUFlfRklMRSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmaWxlY21wLmNtcChURVNUX1BZX0ZJTEUsIFBZX0ZJTEVfV0lUSE9VVF9LRVlXT1JEUykpCisKKyAgICBkZWYgdGVzdF9rZXl3b3Jkc19weV93aXRob3V0X21hcmtlcnNfcHJvZHVjZXNfZXJyb3Ioc2VsZik6CisgICAgICAgIHJjLCBzdGRlcnIgPSBzZWxmLl9nZW5lcmF0ZV9rZXl3b3Jkcyhvcy5kZXZudWxsLCBvcy5kZXZudWxsKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHN0ZGVyciwgYidkb2VzIG5vdCBjb250YWluIGZvcm1hdCBtYXJrZXJzJykKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfZ3JhbW1hcl9maWxlX3Byb2R1Y2VzX2Vycm9yKHNlbGYpOgorICAgICAgICByYywgc3RkZXJyID0gc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMoTk9ORVhJU1RFTlRfRklMRSwgS0VZV09SRF9GSUxFKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KHN0ZGVyciwgYicoP21zKScgKyBOT05FWElTVEVOVF9GSUxFLmVuY29kZSgpKQorCisgICAgZGVmIHRlc3RfbWlzc2luZ19rZXl3b3Jkc19weV9maWxlX3Byb2R1Y2VzX2Vycm9yKHNlbGYpOgorICAgICAgICByYywgc3RkZXJyID0gc2VsZi5fZ2VuZXJhdGVfa2V5d29yZHMob3MuZGV2bnVsbCwgTk9ORVhJU1RFTlRfRklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChzdGRlcnIsIGInKD9tcyknICsgTk9ORVhJU1RFTlRfRklMRS5lbmNvZGUoKSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weSBiL0xpYi90ZXN0L3Rlc3Rfa2V5d29yZG9ubHlhcmcucHkKaW5kZXggNmMyZmYwMC4uN2YzMTVkNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9rZXl3b3Jkb25seWFyZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2tleXdvcmRvbmx5YXJnLnB5CkBAIC0xNzQsNiArMTc0LDE4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIF9fYQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFgoKS5mKCksIDQyKQogCisgICAgZGVmIHRlc3RfZGVmYXVsdF9ldmFsdWF0aW9uX29yZGVyKHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAxNjk2NworICAgICAgICBhID0gNDIKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGVycjoKKyAgICAgICAgICAgIGRlZiBmKHY9YSwgeD1iLCAqLCB5PWMsIHo9ZCk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIuZXhjZXB0aW9uKSwgIm5hbWUgJ2InIGlzIG5vdCBkZWZpbmVkIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGVycjoKKyAgICAgICAgICAgIGYgPSBsYW1iZGEgdj1hLCB4PWIsICosIHk9Yywgej1kOiBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyci5leGNlcHRpb24pLCAibmFtZSAnYicgaXMgbm90IGRlZmluZWQiKQorCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoS2V5d29yZE9ubHlBcmdUZXN0Q2FzZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9rcXVldWUucHkgYi9MaWIvdGVzdC90ZXN0X2txdWV1ZS5weQppbmRleCBlNWU2MDU4Li5mNzliZDg5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2txdWV1ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X2txdWV1ZS5weQpAQCAtODYsNiArODYsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldiwgZXYpCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXYsIG90aGVyKQogCisgICAgICAgICMgSXNzdWUgMTE5NzMKKyAgICAgICAgYmlnbnVtID0gMHhmZmZmCisgICAgICAgIGV2ID0gc2VsZWN0LmtldmVudCgwLCAxLCBiaWdudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuaWRlbnQsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmlsdGVyLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmZsYWdzLCBiaWdudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmZsYWdzLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2LmRhdGEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYudWRhdGEsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYsIGV2KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGV2LCBvdGhlcikKKworICAgICAgICAjIElzc3VlIDExOTczCisgICAgICAgIGJpZ251bSA9IDB4ZmZmZmZmZmYKKyAgICAgICAgZXYgPSBzZWxlY3Qua2V2ZW50KDAsIDEsIDIsIGJpZ251bSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5pZGVudCwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi5maWx0ZXIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmxhZ3MsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZmZsYWdzLCBiaWdudW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXYuZGF0YSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldi51ZGF0YSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldiwgZXYpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoZXYsIG90aGVyKQorCisKICAgICBkZWYgdGVzdF9xdWV1ZV9ldmVudChzZWxmKToKICAgICAgICAgc2VydmVyU29ja2V0ID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgIHNlcnZlclNvY2tldC5iaW5kKCgnMTI3LjAuMC4xJywgMCkpCkBAIC05NCw3ICsxMTksNyBAQAogICAgICAgICBjbGllbnQuc2V0YmxvY2tpbmcoRmFsc2UpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNsaWVudC5jb25uZWN0KCgnMTI3LjAuMC4xJywgc2VydmVyU29ja2V0LmdldHNvY2tuYW1lKClbMV0pKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuYXJnc1swXSwgZXJybm8uRUlOUFJPR1JFU1MpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIkNvbm5lY3Qgc2hvdWxkIGhhdmUgcmFpc2VkIEVJTlBST0dSRVNTIikKQEAgLTE4NSw2ICsyMTAsMzMgQEAKICAgICAgICAgYi5jbG9zZSgpCiAgICAgICAgIGtxLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2Nsb3NlKHNlbGYpOgorICAgICAgICBvcGVuX2ZpbGUgPSBvcGVuKF9fZmlsZV9fLCAicmIiKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3Blbl9maWxlLmNsb3NlKQorICAgICAgICBmZCA9IG9wZW5fZmlsZS5maWxlbm8oKQorICAgICAgICBrcXVldWUgPSBzZWxlY3Qua3F1ZXVlKCkKKworICAgICAgICAjIHRlc3QgZmlsZW5vKCkgbWV0aG9kIGFuZCBjbG9zZWQgYXR0cmlidXRlCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShrcXVldWUuZmlsZW5vKCksIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShrcXVldWUuY2xvc2VkKQorCisgICAgICAgICMgdGVzdCBjbG9zZSgpCisgICAgICAgIGtxdWV1ZS5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShrcXVldWUuY2xvc2VkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBrcXVldWUuZmlsZW5vKQorCisgICAgICAgICMgY2xvc2UoKSBjYW4gYmUgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCisgICAgICAgIGtxdWV1ZS5jbG9zZSgpCisKKyAgICAgICAgIyBvcGVyYXRpb25zIG11c3QgZmFpbCB3aXRoIFZhbHVlRXJyb3IoIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIC4uLiIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGtxdWV1ZS5jb250cm9sLCBOb25lLCA0KQorCisgICAgZGVmIHRlc3RfZmRfbm9uX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBrcXVldWUgPSBzZWxlY3Qua3F1ZXVlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGtxdWV1ZS5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoa3F1ZXVlLmZpbGVubygpKSwgRmFsc2UpCisKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RLUXVldWUpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGFyZ2VmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkKaW5kZXggNjNlZTY5Ny4uNWIyNzZlNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sYXJnZWZpbGUucHkKQEAgLTE1OSw3ICsxNTksNyBAQAogICAgICAgICAgICAgIyBTZWVraW5nIGlzIG5vdCBlbm91Z2ggb2YgYSB0ZXN0OiB5b3UgbXVzdCB3cml0ZSBhbmQgZmx1c2gsIHRvbyEKICAgICAgICAgICAgIGYud3JpdGUoYid4JykKICAgICAgICAgICAgIGYuZmx1c2goKQotICAgICAgICBleGNlcHQgKElPRXJyb3IsIE92ZXJmbG93RXJyb3IpOgorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIE92ZXJmbG93RXJyb3IpOgogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGFyZ2VmaWxlIHN1cHBvcnQiKQogICAgICAgICBmaW5hbGx5OgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9saWIydG8zLnB5IGIvTGliL3Rlc3QvdGVzdF9saWIydG8zLnB5CmluZGV4IGRmNGMzN2IuLjVlYWE1MTYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGliMnRvMy5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xpYjJ0bzMucHkKQEAgLTEsMjIgKzEsNSBAQAotIyBTa2lwcGluZyB0ZXN0X3BhcnNlciBhbmQgdGVzdF9hbGxfZml4ZXJzCi0jIGJlY2F1c2Ugb2YgcnVubmluZwotZnJvbSBsaWIydG8zLnRlc3RzIGltcG9ydCAodGVzdF9maXhlcnMsIHRlc3RfcHl0cmVlLCB0ZXN0X3V0aWwsIHRlc3RfcmVmYWN0b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3BhcnNlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfbWFpbiBhcyB0ZXN0X21haW5fKQorZnJvbSBsaWIydG8zLnRlc3RzIGltcG9ydCBsb2FkX3Rlc3RzCiBpbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKLQotZGVmIHN1aXRlKCk6Ci0gICAgdGVzdHMgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotICAgIGZvciBtIGluICh0ZXN0X2ZpeGVycywgdGVzdF9weXRyZWUsIHRlc3RfdXRpbCwgdGVzdF9yZWZhY3RvciwgdGVzdF9wYXJzZXIsCi0gICAgICAgICAgICAgIHRlc3RfbWFpbl8pOgotICAgICAgICB0ZXN0cy5hZGRUZXN0cyhsb2FkZXIubG9hZFRlc3RzRnJvbU1vZHVsZShtKSkKLSAgICByZXR1cm4gdGVzdHMKLQotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChzdWl0ZSgpKQotCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbGluZWNhY2hlLnB5IGIvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKaW5kZXggNWZlMDU1NC4uNzkxNTdkZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9saW5lY2FjaGUucHkKQEAgLTEyNiw4ICsxMjYsMjEgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUsIGdldGxpbmUoc291cmNlX25hbWUsIGluZGV4ICsgMSkpCiAgICAgICAgICAgICAgICAgc291cmNlX2xpc3QuYXBwZW5kKGxpbmUpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChMaW5lQ2FjaGVUZXN0cykKKyAgICBkZWYgdGVzdF9tZW1vcnllcnJvcihzZWxmKToKKyAgICAgICAgbGluZXMgPSBsaW5lY2FjaGUuZ2V0bGluZXMoRklMRU5BTUUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsaW5lcykKKyAgICAgICAgZGVmIHJhaXNlX21lbW9yeWVycm9yKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICByYWlzZSBNZW1vcnlFcnJvcgorICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKGxpbmVjYWNoZSwgJ3VwZGF0ZWNhY2hlJywgcmFpc2VfbWVtb3J5ZXJyb3IpOgorICAgICAgICAgICAgbGluZXMyID0gbGluZWNhY2hlLmdldGxpbmVzKEZJTEVOQU1FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzMiwgbGluZXMpCisKKyAgICAgICAgbGluZWNhY2hlLmNsZWFyY2FjaGUoKQorICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKGxpbmVjYWNoZSwgJ3VwZGF0ZWNhY2hlJywgcmFpc2VfbWVtb3J5ZXJyb3IpOgorICAgICAgICAgICAgbGluZXMzID0gbGluZWNhY2hlLmdldGxpbmVzKEZJTEVOQU1FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVzMywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZWNhY2hlLmdldGxpbmVzKEZJTEVOQU1FKSwgbGluZXMpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9saXN0LnB5IGIvTGliL3Rlc3QvdGVzdF9saXN0LnB5CmluZGV4IDVkZjI3ZDMuLjNiOTQ3MDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbGlzdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X2xpc3QucHkKQEAgLTc0LDI5ICs3NCwzMSBAQAogICAgICAgICAjIFVzZXJsaXN0IGl0ZXJhdG9ycyBkb24ndCBzdXBwb3J0IHBpY2tsaW5nIHlldCBzaW5jZQogICAgICAgICAjIHRoZXkgYXJlIGJhc2VkIG9uIGdlbmVyYXRvcnMuCiAgICAgICAgIGRhdGEgPSBzZWxmLnR5cGUydGVzdChbNCwgNSwgNiwgN10pCi0gICAgICAgIGl0ID0gaXRvcmcgPSBpdGVyKGRhdGEpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QoZGF0YSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgaXQgPSBpdG9yZyA9IGl0ZXIoZGF0YSkKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChpdCksIHNlbGYudHlwZTJ0ZXN0KGRhdGEpKQogCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIG5leHQoaXQpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChkYXRhKVsxOl0pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgbmV4dChpdCkKKyAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR5cGUydGVzdChpdCksIHNlbGYudHlwZTJ0ZXN0KGRhdGEpWzE6XSkKIAogICAgIGRlZiB0ZXN0X3JldmVyc2VkX3BpY2tsZShzZWxmKToKICAgICAgICAgZGF0YSA9IHNlbGYudHlwZTJ0ZXN0KFs0LCA1LCA2LCA3XSkKLSAgICAgICAgaXQgPSBpdG9yZyA9IHJldmVyc2VkKGRhdGEpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QocmV2ZXJzZWQoZGF0YSkpKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIGl0ID0gaXRvcmcgPSByZXZlcnNlZChkYXRhKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QocmV2ZXJzZWQoZGF0YSkpKQogCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIG5leHQoaXQpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChyZXZlcnNlZChkYXRhKSlbMTpdKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChyZXZlcnNlZChkYXRhKSlbMTpdKQogCiAgICAgZGVmIHRlc3Rfbm9fY29tZGF0X2ZvbGRpbmcoc2VsZik6CiAgICAgICAgICMgSXNzdWUgODg0NzogSW4gdGhlIFBHTyBidWlsZCwgdGhlIE1TVkMgbGlua2VyJ3MgQ09NREFUIGZvbGRpbmcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9jYWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKaW5kZXggNzYzNDdiNy4uOTM2OWEyNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb2NhbGUucHkKQEAgLTM3MSw3ICszNzEsOCBAQAogCiAgICAgZGVmIHRlc3RfbG9jYWxlX2FsaWFzKHNlbGYpOgogICAgICAgICBmb3IgbG9jYWxlbmFtZSwgYWxpYXMgaW4gbG9jYWxlLmxvY2FsZV9hbGlhcy5pdGVtcygpOgotICAgICAgICAgICAgc2VsZi5jaGVjayhsb2NhbGVuYW1lLCBhbGlhcykKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGxvY2FsZT0obG9jYWxlbmFtZSwgYWxpYXMpKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrKGxvY2FsZW5hbWUsIGFsaWFzKQogCiAgICAgZGVmIHRlc3RfZW1wdHkoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJycsICcnKQpAQCAtMzgzLDYgKzM4NCw3IEBACiAgICAgZGVmIHRlc3RfZW5nbGlzaChzZWxmKToKICAgICAgICAgc2VsZi5jaGVjaygnZW4nLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnRU4nLCAnZW5fVVMuSVNPODg1OS0xJykKKyAgICAgICAgc2VsZi5jaGVjaygnZW4uaXNvODg1OTEnLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMnLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fdXMnLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fR0InLCAnZW5fR0IuSVNPODg1OS0xJykKQEAgLTM5MSw3ICszOTMsMTAgQEAKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVM6VVRGLTgnLCAnZW5fVVMuVVRGLTgnKQogICAgICAgICBzZWxmLmNoZWNrKCdlbl9VUy5JU084ODU5LTEnLCAnZW5fVVMuSVNPODg1OS0xJykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuVVMtQVNDSUknLCAnZW5fVVMuSVNPODg1OS0xJykKKyAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuODg1OTEnLCAnZW5fVVMuSVNPODg1OS0xJykKKyAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuODg1OTE1JywgJ2VuX1VTLklTTzg4NTktMTUnKQogICAgICAgICBzZWxmLmNoZWNrKCdlbmdsaXNoJywgJ2VuX0VOLklTTzg4NTktMScpCisgICAgICAgIHNlbGYuY2hlY2soJ2VuZ2xpc2hfdWsuYXNjaWknLCAnZW5fR0IuSVNPODg1OS0xJykKIAogICAgIGRlZiB0ZXN0X2h5cGhlbmF0ZWRfZW5jb2Rpbmcoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ2F6X0FaLmlzbzg4NTk5ZScsICdhel9BWi5JU084ODU5LTlFJykKQEAgLTQxMSwxNCArNDE2LDE2IEBACiAgICAgZGVmIHRlc3RfZXVyb19tb2RpZmllcihzZWxmKToKICAgICAgICAgc2VsZi5jaGVjaygnZGVfREVAZXVybycsICdkZV9ERS5JU084ODU5LTE1JykKICAgICAgICAgc2VsZi5jaGVjaygnZW5fVVMuSVNPODg1OS0xNUBldXJvJywgJ2VuX1VTLklTTzg4NTktMTUnKQorICAgICAgICBzZWxmLmNoZWNrKCdkZV9ERS51dGY4QGV1cm8nLCAnZGVfREUuVVRGLTgnKQogCiAgICAgZGVmIHRlc3RfbGF0aW5fbW9kaWZpZXIoc2VsZik6CiAgICAgICAgIHNlbGYuY2hlY2soJ2JlX0JZLlVURi04QGxhdGluJywgJ2JlX0JZLlVURi04QGxhdGluJykKICAgICAgICAgc2VsZi5jaGVjaygnc3JfUlMuVVRGLThAbGF0aW4nLCAnc3JfUlMuVVRGLThAbGF0aW4nKQorICAgICAgICBzZWxmLmNoZWNrKCdzcl9SUy5VVEYtOEBsYXRuJywgJ3NyX1JTLlVURi04QGxhdGluJykKIAogICAgIGRlZiB0ZXN0X3ZhbGVuY2lhX21vZGlmaWVyKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrKCdjYV9FUy5VVEYtOEB2YWxlbmNpYScsICdjYV9FUy5VVEYtOEB2YWxlbmNpYScpCi0gICAgICAgIHNlbGYuY2hlY2soJ2NhX0VTQHZhbGVuY2lhJywgJ2NhX0VTLklTTzg4NTktMUB2YWxlbmNpYScpCisgICAgICAgIHNlbGYuY2hlY2soJ2NhX0VTQHZhbGVuY2lhJywgJ2NhX0VTLklTTzg4NTktMTVAdmFsZW5jaWEnKQogICAgICAgICBzZWxmLmNoZWNrKCdjYUB2YWxlbmNpYScsICdjYV9FUy5JU084ODU5LTFAdmFsZW5jaWEnKQogCiAgICAgZGVmIHRlc3RfZGV2YW5hZ2FyaV9tb2RpZmllcihzZWxmKToKQEAgLTQzNSw2ICs0NDIsMzkgQEAKICAgICAgICAgc2VsZi5jaGVjaygnc2RfSU4nLCAnc2RfSU4uVVRGLTgnKQogICAgICAgICBzZWxmLmNoZWNrKCdzZCcsICdzZF9JTi5VVEYtOCcpCiAKKyAgICBkZWYgdGVzdF9ldWNfZW5jb2Rpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmV1YycsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmV1Y2pwJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygna29fa3IuZXVjJywgJ2tvX0tSLmV1Y0tSJykKKyAgICAgICAgc2VsZi5jaGVjaygna29fa3IuZXVja3InLCAna29fS1IuZXVjS1InKQorICAgICAgICBzZWxmLmNoZWNrKCd6aF9jbi5ldWMnLCAnemhfQ04uZXVjQ04nKQorICAgICAgICBzZWxmLmNoZWNrKCd6aF90dy5ldWMnLCAnemhfVFcuZXVjVFcnKQorICAgICAgICBzZWxmLmNoZWNrKCd6aF90dy5ldWN0dycsICd6aF9UVy5ldWNUVycpCisKKyAgICBkZWYgdGVzdF9qYXBhbmVzZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygnamEnLCAnamFfSlAuZXVjSlAnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYS5qaXMnLCAnamFfSlAuSklTNycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phLnNqaXMnLCAnamFfSlAuU0pJUycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuYWplYycsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmV1YycsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmV1Y2pwJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuaXNvLTIwMjItanAnLCAnamFfSlAuSklTNycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLmlzbzIwMjJqcCcsICdqYV9KUC5KSVM3JykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuamlzJywgJ2phX0pQLkpJUzcnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5qaXM3JywgJ2phX0pQLkpJUzcnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYV9qcC5tc2NvZGUnLCAnamFfSlAuU0pJUycpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLnBjaycsICdqYV9KUC5TSklTJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAuc2ppcycsICdqYV9KUC5TSklTJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFfanAudWppcycsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phX2pwLnV0ZjgnLCAnamFfSlAuVVRGLTgnKQorICAgICAgICBzZWxmLmNoZWNrKCdqYXBhbicsICdqYV9KUC5ldWNKUCcpCisgICAgICAgIHNlbGYuY2hlY2soJ2phcGFuZXNlJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFwYW5lc2UtZXVjJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFwYW5lc2UuZXVjJywgJ2phX0pQLmV1Y0pQJykKKyAgICAgICAgc2VsZi5jaGVjaygnamFwYW5lc2Uuc2ppcycsICdqYV9KUC5TSklTJykKKyAgICAgICAgc2VsZi5jaGVjaygnanBfanAnLCAnamFfSlAuZXVjSlAnKQorCiAKIGNsYXNzIFRlc3RNaXNjZWxsYW5lb3VzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9nZXRwcmVmZXJyZWRlbmNvZGluZyhzZWxmKToKQEAgLTQ3MSw3ICs1MTEsNyBAQAogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgndGVzdCBuZWVkcyBUdXJraXNoIGxvY2FsZScpCiAgICAgICAgIGxvYyA9IGxvY2FsZS5nZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFKQogICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgcHJpbnQoJ2dvdCBsb2NhbGUgJWEnICUgKGxvYywpKQorICAgICAgICAgICAgcHJpbnQoJ3Rlc3Rpbmcgd2l0aCAlYScgJSAobG9jLCksIGVuZD0nICcsIGZsdXNoPVRydWUpCiAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX0NUWVBFLCBsb2MpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9jLCBsb2NhbGUuZ2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSkpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weSBiL0xpYi90ZXN0L3Rlc3RfbG9nZ2luZy5weQppbmRleCBmMzQxNzJhLi5iMTdmNWU1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvZ2dpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb2dnaW5nLnB5CkBAIC0yNCw2ICsyNCw3IEBACiBpbXBvcnQgbG9nZ2luZy5jb25maWcKIAogaW1wb3J0IGNvZGVjcworaW1wb3J0IGNvbmZpZ3BhcnNlcgogaW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgaW8KQEAgLTM4LDggKzM5LDEwIEBACiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKGNhcHR1cmVkX3N0ZG91dCwgcnVuX3dpdGhfbG9jYWxlLCBydW5fdW5pdHRlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLCByZXF1aXJlc196bGliLCBUZXN0SGFuZGxlciwgTWF0Y2hlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gsIHJlcXVpcmVzX3psaWIsIFRlc3RIYW5kbGVyLCBNYXRjaGVyLCBIT1NULAorICAgICAgICAgICAgICAgICAgICAgICAgICBzd2FwX2F0dHIpCiBpbXBvcnQgdGV4dHdyYXAKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTU2LDMwICs1OSwyNyBAQAogICAgIGltcG9ydCBzbXRwZAogICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZSwgcGFyc2VfcXMKICAgICBmcm9tIHNvY2tldHNlcnZlciBpbXBvcnQgKFRocmVhZGluZ1VEUFNlcnZlciwgRGF0YWdyYW1SZXF1ZXN0SGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1RDUFNlcnZlciwgU3RyZWFtUmVxdWVzdEhhbmRsZXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaHJlYWRpbmdUQ1BTZXJ2ZXIsIFN0cmVhbVJlcXVlc3RIYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhyZWFkaW5nVW5peFN0cmVhbVNlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRocmVhZGluZ1VuaXhEYXRhZ3JhbVNlcnZlcikKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiB0cnk6Ci0gICAgaW1wb3J0IHdpbjMyZXZ0bG9nCisgICAgaW1wb3J0IHdpbjMyZXZ0bG9nLCB3aW4zMmV2dGxvZ3V0aWwsIHB5d2ludHlwZXMKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICB3aW4zMmV2dGxvZyA9IE5vbmUKLXRyeToKLSAgICBpbXBvcnQgd2luMzJldnRsb2d1dGlsCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgd2luMzJldnRsb2d1dGlsID0gTm9uZQotICAgIHdpbjMyZXZ0bG9nID0gTm9uZQorICAgIHdpbjMyZXZ0bG9nID0gd2luMzJldnRsb2d1dGlsID0gcHl3aW50eXBlcyA9IE5vbmUKKwogdHJ5OgogICAgIGltcG9ydCB6bGliCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgcGFzcwogCi0KIGNsYXNzIEJhc2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgICIiIkJhc2UgY2xhc3MgZm9yIGxvZ2dpbmcgdGVzdHMuIiIiCiAKICAgICBsb2dfZm9ybWF0ID0gIiUobmFtZSlzIC0+ICUobGV2ZWxuYW1lKXM6ICUobWVzc2FnZSlzIgotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3Ll0rKSAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcdy5dKykgLT4gKFx3Kyk6IChcZCspJCIKICAgICBtZXNzYWdlX251bSA9IDAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTkxLDcgKzkxLDggQEAKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcnMgPSBsb2dnaW5nLl9oYW5kbGVycy5jb3B5KCkKICAgICAgICAgICAgIHNlbGYuc2F2ZWRfaGFuZGxlcl9saXN0ID0gbG9nZ2luZy5faGFuZGxlckxpc3RbOl0KICAgICAgICAgICAgIHNlbGYuc2F2ZWRfbG9nZ2VycyA9IHNhdmVkX2xvZ2dlcnMgPSBsb2dnZXJfZGljdC5jb3B5KCkKLSAgICAgICAgICAgIHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMgPSBsb2dnaW5nLl9sZXZlbE5hbWVzLmNvcHkoKQorICAgICAgICAgICAgc2VsZi5zYXZlZF9uYW1lX3RvX2xldmVsID0gbG9nZ2luZy5fbmFtZVRvTGV2ZWwuY29weSgpCisgICAgICAgICAgICBzZWxmLnNhdmVkX2xldmVsX3RvX25hbWUgPSBsb2dnaW5nLl9sZXZlbFRvTmFtZS5jb3B5KCkKICAgICAgICAgICAgIHNlbGYubG9nZ2VyX3N0YXRlcyA9IGxvZ2dlcl9zdGF0ZXMgPSB7fQogICAgICAgICAgICAgZm9yIG5hbWUgaW4gc2F2ZWRfbG9nZ2VyczoKICAgICAgICAgICAgICAgICBsb2dnZXJfc3RhdGVzW25hbWVdID0gZ2V0YXR0cihzYXZlZF9sb2dnZXJzW25hbWVdLApAQCAtMTMzLDggKzEzNCwxMCBAQAogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnNldExldmVsKHNlbGYub3JpZ2luYWxfbG9nZ2luZ19sZXZlbCkKICAgICAgICAgbG9nZ2luZy5fYWNxdWlyZUxvY2soKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBsb2dnaW5nLl9sZXZlbE5hbWVzLmNsZWFyKCkKLSAgICAgICAgICAgIGxvZ2dpbmcuX2xldmVsTmFtZXMudXBkYXRlKHNlbGYuc2F2ZWRfbGV2ZWxfbmFtZXMpCisgICAgICAgICAgICBsb2dnaW5nLl9sZXZlbFRvTmFtZS5jbGVhcigpCisgICAgICAgICAgICBsb2dnaW5nLl9sZXZlbFRvTmFtZS51cGRhdGUoc2VsZi5zYXZlZF9sZXZlbF90b19uYW1lKQorICAgICAgICAgICAgbG9nZ2luZy5fbmFtZVRvTGV2ZWwuY2xlYXIoKQorICAgICAgICAgICAgbG9nZ2luZy5fbmFtZVRvTGV2ZWwudXBkYXRlKHNlbGYuc2F2ZWRfbmFtZV90b19sZXZlbCkKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLmNsZWFyKCkKICAgICAgICAgICAgIGxvZ2dpbmcuX2hhbmRsZXJzLnVwZGF0ZShzZWxmLnNhdmVkX2hhbmRsZXJzKQogICAgICAgICAgICAgbG9nZ2luZy5faGFuZGxlckxpc3RbOl0gPSBzZWxmLnNhdmVkX2hhbmRsZXJfbGlzdApAQCAtMTQ4LDEyICsxNTEsMTIgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvZ2dpbmcuX3JlbGVhc2VMb2NrKCkKIAotICAgIGRlZiBhc3NlcnRfbG9nX2xpbmVzKHNlbGYsIGV4cGVjdGVkX3ZhbHVlcywgc3RyZWFtPU5vbmUpOgorICAgIGRlZiBhc3NlcnRfbG9nX2xpbmVzKHNlbGYsIGV4cGVjdGVkX3ZhbHVlcywgc3RyZWFtPU5vbmUsIHBhdD1Ob25lKToKICAgICAgICAgIiIiTWF0Y2ggdGhlIGNvbGxlY3RlZCBsb2cgbGluZXMgYWdhaW5zdCB0aGUgcmVndWxhciBleHByZXNzaW9uCiAgICAgICAgIHNlbGYuZXhwZWN0ZWRfbG9nX3BhdCwgYW5kIGNvbXBhcmUgdGhlIGV4dHJhY3RlZCBncm91cCB2YWx1ZXMgdG8KICAgICAgICAgdGhlIGV4cGVjdGVkX3ZhbHVlcyBsaXN0IG9mIHR1cGxlcy4iIiIKICAgICAgICAgc3RyZWFtID0gc3RyZWFtIG9yIHNlbGYuc3RyZWFtCi0gICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoc2VsZi5leHBlY3RlZF9sb2dfcGF0KQorICAgICAgICBwYXQgPSByZS5jb21waWxlKHBhdCBvciBzZWxmLmV4cGVjdGVkX2xvZ19wYXQpCiAgICAgICAgIGFjdHVhbF9saW5lcyA9IHN0cmVhbS5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihhY3R1YWxfbGluZXMpLCBsZW4oZXhwZWN0ZWRfdmFsdWVzKSkKICAgICAgICAgZm9yIGFjdHVhbCwgZXhwZWN0ZWQgaW4gemlwKGFjdHVhbF9saW5lcywgZXhwZWN0ZWRfdmFsdWVzKToKQEAgLTMwNyw2ICszMTAsMTAgQEAKICAgICAgICAgICAgICgnSU5GLkJBRFBBUkVOVCcsICdJTkZPJywgJzQnKSwKICAgICAgICAgXSkKIAorICAgIGRlZiB0ZXN0X3JlZ3Jlc3Npb25fMjIzODYoc2VsZik6CisgICAgICAgICIiIlNlZSBpc3N1ZSAjMjIzODYgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiIiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobG9nZ2luZy5nZXRMZXZlbE5hbWUoJ0lORk8nKSwgbG9nZ2luZy5JTkZPKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKGxvZ2dpbmcuSU5GTyksICdJTkZPJykKIAogY2xhc3MgQmFzaWNGaWx0ZXJUZXN0KEJhc2VUZXN0KToKIApAQCAtNDI4LDcgKzQzNSw3IEBACiAgICAgIiIiVGVzdCB2YXJpb3VzIGZpbHRlcmluZyBwb3NzaWJpbGl0aWVzIHdpdGggY3VzdG9tIGxvZ2dpbmcgbGV2ZWxzLiIiIgogCiAgICAgIyBTa2lwIHRoZSBsb2dnZXIgbmFtZSBncm91cC4KLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChbXHddKyk6IChbXGRdKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKQEAgLTU1OCw3ICs1NjUsNyBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaC5mYWNpbGl0eSwgaC5MT0dfVVNFUikKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaC51bml4c29ja2V0KQogICAgICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjogIyBzeXNsb2dkIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOiAjIHN5c2xvZ2QgbWlnaHQgbm90IGJlIGF2YWlsYWJsZQogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZm9yIG1ldGhvZCBpbiAoJ0dFVCcsICdQT1NUJywgJ1BVVCcpOgogICAgICAgICAgICAgaWYgbWV0aG9kID09ICdQVVQnOgpAQCAtNTgzLDYgKzU5MCw3IEBACiAgICAgICAgICAgICBmb3IgXyBpbiByYW5nZSh0cmllcyk6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRpb25fdGltZSA9IHRpbWUudGltZSgpCiAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDA0ICogcmFuZG9tLnJhbmRpbnQoMCwgNCkpCkBAIC01OTAsNiArNTk4LDkgQEAKICAgICAgICAgZGVsX2NvdW50ID0gNTAwCiAgICAgICAgIGxvZ19jb3VudCA9IDUwMAogCisgICAgICAgIHNlbGYuaGFuZGxlX3RpbWUgPSBOb25lCisgICAgICAgIHNlbGYuZGVsZXRpb25fdGltZSA9IE5vbmUKKwogICAgICAgICBmb3IgZGVsYXkgaW4gKEZhbHNlLCBUcnVlKToKICAgICAgICAgICAgIGZkLCBmbiA9IHRlbXBmaWxlLm1rc3RlbXAoJy5sb2cnLCAndGVzdF9sb2dnaW5nLTMtJykKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQpAQCAtNjAzLDcgKzYxNCwxNCBAQAogICAgICAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKGxvZ19jb3VudCk6CiAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMDUpCiAgICAgICAgICAgICAgICAgICAgIHIgPSBsb2dnaW5nLm1ha2VMb2dSZWNvcmQoeydtc2cnOiAndGVzdGluZycgfSkKLSAgICAgICAgICAgICAgICAgICAgaC5oYW5kbGUocikKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfdGltZSA9IHRpbWUudGltZSgpCisgICAgICAgICAgICAgICAgICAgICAgICBoLmhhbmRsZShyKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ0RlbGV0ZWQgYXQgJXMsICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcGVuZWQgYXQgJXMnICUgKHNlbGYuZGVsZXRpb25fdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3RpbWUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgcmVtb3Zlci5qb2luKCkKICAgICAgICAgICAgICAgICBoLmNsb3NlKCkKQEAgLTY0NSw0MSArNjYzLDYgQEAKICMgLS0gaWYgaXQgcHJvdmVzIHRvIGJlIG9mIHdpZGVyIHV0aWxpdHkgdGhhbiBqdXN0IHRlc3RfbG9nZ2luZwogCiBpZiB0aHJlYWRpbmc6Ci0gICAgY2xhc3MgVGVzdFNNVFBDaGFubmVsKHNtdHBkLlNNVFBDaGFubmVsKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMgZGVyaXZlZCBjbGFzcyBoYXMgaGFkIHRvIGJlIGNyZWF0ZWQgYmVjYXVzZSBzbXRwZCBkb2VzIG5vdAotICAgICAgICBzdXBwb3J0IHVzZSBvZiBjdXN0b20gY2hhbm5lbCBtYXBzLCBhbHRob3VnaCB0aGV5IGFyZSBhbGxvd2VkIGJ5Ci0gICAgICAgIGFzeW5jb3JlJ3MgZGVzaWduLiBJc3N1ZSAjMTE5NTkgaGFzIGJlZW4gcmFpc2VkIHRvIGFkZHJlc3MgdGhpcywKLSAgICAgICAgYW5kIGlmIHJlc29sdmVkIHNhdGlzZmFjdG9yaWx5LCBzb21lIG9mIHRoaXMgY29kZSBjYW4gYmUgcmVtb3ZlZC4KLSAgICAgICAgIiIiCi0gICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzZXJ2ZXIsIGNvbm4sIGFkZHIsIHNvY2ttYXApOgotICAgICAgICAgICAgYXN5bmNoYXQuYXN5bmNfY2hhdC5fX2luaXRfXyhzZWxmLCBjb25uLCBzb2NrbWFwKQotICAgICAgICAgICAgc2VsZi5zbXRwX3NlcnZlciA9IHNlcnZlcgotICAgICAgICAgICAgc2VsZi5jb25uID0gY29ubgotICAgICAgICAgICAgc2VsZi5hZGRyID0gYWRkcgotICAgICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJlY2VpdmVkX2xpbmVzID0gW10KLSAgICAgICAgICAgIHNlbGYuc210cF9zdGF0ZSA9IHNlbGYuQ09NTUFORAotICAgICAgICAgICAgc2VsZi5zZWVuX2dyZWV0aW5nID0gJycKLSAgICAgICAgICAgIHNlbGYubWFpbGZyb20gPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJjcHR0b3MgPSBbXQotICAgICAgICAgICAgc2VsZi5yZWNlaXZlZF9kYXRhID0gJycKLSAgICAgICAgICAgIHNlbGYuZnFkbiA9IHNvY2tldC5nZXRmcWRuKCkKLSAgICAgICAgICAgIHNlbGYubnVtX2J5dGVzID0gMAotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNlbGYucGVlciA9IGNvbm4uZ2V0cGVlcm5hbWUoKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgIyBhIHJhY2UgY29uZGl0aW9uICBtYXkgb2NjdXIgaWYgdGhlIG90aGVyIGVuZCBpcyBjbG9zaW5nCi0gICAgICAgICAgICAgICAgIyBiZWZvcmUgd2UgY2FuIGdldCB0aGUgcGVlcm5hbWUKLSAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBpZiBlcnIuYXJnc1swXSAhPSBlcnJuby5FTk9UQ09OTjoKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgICAgICAgICByZXR1cm4KLSAgICAgICAgICAgIHNlbGYucHVzaCgnMjIwICVzICVzJyAlIChzZWxmLmZxZG4sIHNtdHBkLl9fdmVyc2lvbl9fKSkKLSAgICAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYidcclxuJykKLSAgICAgICAgICAgIHNlbGYuZXh0ZW5kZWRfc210cCA9IEZhbHNlCi0KLQogICAgIGNsYXNzIFRlc3RTTVRQU2VydmVyKHNtdHBkLlNNVFBTZXJ2ZXIpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBjbGFzcyBpbXBsZW1lbnRzIGEgdGVzdCBTTVRQIHNlcnZlci4KQEAgLTcwMCwzNyArNjgzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICA6ZnVuYzpgYXN5bmNvcmUubG9vcGAuIFRoaXMgYXZvaWRzIGNoYW5naW5nIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgOm1vZDpgYXN5bmNvcmVgIG1vZHVsZSdzIGdsb2JhbCBzdGF0ZS4KICAgICAgICAgIiIiCi0gICAgICAgIGNoYW5uZWxfY2xhc3MgPSBUZXN0U01UUENoYW5uZWwKIAogICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgYWRkciwgaGFuZGxlciwgcG9sbF9pbnRlcnZhbCwgc29ja21hcCk6Ci0gICAgICAgICAgICBzZWxmLl9sb2NhbGFkZHIgPSBhZGRyCi0gICAgICAgICAgICBzZWxmLl9yZW1vdGVhZGRyID0gTm9uZQotICAgICAgICAgICAgc2VsZi5kYXRhX3NpemVfbGltaXQgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnNvY2ttYXAgPSBzb2NrbWFwCi0gICAgICAgICAgICBhc3luY29yZS5kaXNwYXRjaGVyLl9faW5pdF9fKHNlbGYsIG1hcD1zb2NrbWFwKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgICAgICAgICAgc29jay5zZXRibG9ja2luZygwKQotICAgICAgICAgICAgICAgIHNlbGYuc2V0X3NvY2tldChzb2NrLCBtYXA9c29ja21hcCkKLSAgICAgICAgICAgICAgICAjIHRyeSB0byByZS11c2UgYSBzZXJ2ZXIgcG9ydCBpZiBwb3NzaWJsZQotICAgICAgICAgICAgICAgIHNlbGYuc2V0X3JldXNlX2FkZHIoKQotICAgICAgICAgICAgICAgIHNlbGYuYmluZChhZGRyKQotICAgICAgICAgICAgICAgIHNlbGYucG9ydCA9IHNvY2suZ2V0c29ja25hbWUoKVsxXQotICAgICAgICAgICAgICAgIHNlbGYubGlzdGVuKDUpCi0gICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgc2VsZi5jbG9zZSgpCi0gICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIHNtdHBkLlNNVFBTZXJ2ZXIuX19pbml0X18oc2VsZiwgYWRkciwgTm9uZSwgbWFwPXNvY2ttYXApCisgICAgICAgICAgICBzZWxmLnBvcnQgPSBzZWxmLnNvY2tldC5nZXRzb2NrbmFtZSgpWzFdCiAgICAgICAgICAgICBzZWxmLl9oYW5kbGVyID0gaGFuZGxlcgogICAgICAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQogICAgICAgICAgICAgc2VsZi5wb2xsX2ludGVydmFsID0gcG9sbF9pbnRlcnZhbAogCi0gICAgICAgIGRlZiBoYW5kbGVfYWNjZXB0ZWQoc2VsZiwgY29ubiwgYWRkcik6Ci0gICAgICAgICAgICAiIiIKLSAgICAgICAgICAgIFJlZGVmaW5lZCBvbmx5IGJlY2F1c2UgdGhlIGJhc2UgY2xhc3MgZG9lcyBub3QgcGFzcyBpbiBhCi0gICAgICAgICAgICBtYXAsIGZvcmNpbmcgdXNlIG9mIGEgZ2xvYmFsIGluIDptb2Q6YGFzeW5jb3JlYC4KLSAgICAgICAgICAgICIiIgotICAgICAgICAgICAgY2hhbm5lbCA9IHNlbGYuY2hhbm5lbF9jbGFzcyhzZWxmLCBjb25uLCBhZGRyLCBzZWxmLnNvY2ttYXApCi0KICAgICAgICAgZGVmIHByb2Nlc3NfbWVzc2FnZShzZWxmLCBwZWVyLCBtYWlsZnJvbSwgcmNwdHRvcywgZGF0YSk6CiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIERlbGVnYXRlcyB0byB0aGUgaGFuZGxlciBwYXNzZWQgaW4gdG8gdGhlIHNlcnZlcidzIGNvbnN0cnVjdG9yLgpAQCAtNzYxLDggKzcyMSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOmZ1bmM6YGFzeW5jb3JlLmxvb3BgLgogICAgICAgICAgICAgIiIiCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgYXN5bmNvcmUubG9vcChwb2xsX2ludGVydmFsLCBtYXA9c2VsZi5zb2NrbWFwKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvcjoKKyAgICAgICAgICAgICAgICBhc3luY29yZS5sb29wKHBvbGxfaW50ZXJ2YWwsIG1hcD1zZWxmLl9tYXApCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAjIE9uIEZyZWVCU0QgOCwgY2xvc2luZyB0aGUgc2VydmVyIHJlcGVhdGFibHkKICAgICAgICAgICAgICAgICAjIHJhaXNlcyB0aGlzIGVycm9yLiBXZSBzd2FsbG93IGl0IGlmIHRoZQogICAgICAgICAgICAgICAgICMgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4KQEAgLTg2OSw3ICs4MjksNyBAQAogICAgICAgICAgICAgICAgIHNvY2ssIGFkZHIgPSBzZWxmLnNvY2tldC5hY2NlcHQoKQogICAgICAgICAgICAgICAgIGlmIHNlbGYuc3NsY3R4OgogICAgICAgICAgICAgICAgICAgICBzb2NrID0gc2VsZi5zc2xjdHgud3JhcF9zb2NrZXQoc29jaywgc2VydmVyX3NpZGU9VHJ1ZSkKLSAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAgICAgIyBzb2NrZXQgZXJyb3JzIGFyZSBzaWxlbmNlZCBieSB0aGUgY2FsbGVyLCBwcmludCB0aGVtIGhlcmUKICAgICAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJHb3QgYW4gZXJyb3I6XG4lc1xuIiAlIGUpCiAgICAgICAgICAgICAgICAgcmFpc2UKQEAgLTkzNSw3ICs4OTUsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiBkYXRhOgogICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cGVyKERlbGVnYXRpbmdVRFBSZXF1ZXN0SGFuZGxlciwgc2VsZikuZmluaXNoKCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi5zZXJ2ZXIuX2Nsb3NlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKIApAQCAtOTUzLDYgKzkxMywxMyBAQAogICAgICAgICAgICAgc3VwZXIoVGVzdFVEUFNlcnZlciwgc2VsZikuc2VydmVyX2Nsb3NlKCkKICAgICAgICAgICAgIHNlbGYuX2Nsb3NlZCA9IFRydWUKIAorICAgIGlmIGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpOgorICAgICAgICBjbGFzcyBUZXN0VW5peFN0cmVhbVNlcnZlcihUZXN0VENQU2VydmVyKToKKyAgICAgICAgICAgIGFkZHJlc3NfZmFtaWx5ID0gc29ja2V0LkFGX1VOSVgKKworICAgICAgICBjbGFzcyBUZXN0VW5peERhdGFncmFtU2VydmVyKFRlc3RVRFBTZXJ2ZXIpOgorICAgICAgICAgICAgYWRkcmVzc19mYW1pbHkgPSBzb2NrZXQuQUZfVU5JWAorCiAjIC0gZW5kIG9mIHNlcnZlcl9oZWxwZXIgc2VjdGlvbgogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQpAQCAtOTYwLDE1ICs5MjcsMTUgQEAKICAgICBUSU1FT1VUID0gOC4wCiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgIHNvY2ttYXAgPSB7fQotICAgICAgICBzZXJ2ZXIgPSBUZXN0U01UUFNlcnZlcigoJ2xvY2FsaG9zdCcsIDApLCBzZWxmLnByb2Nlc3NfbWVzc2FnZSwgMC4wMDEsCisgICAgICAgIHNlcnZlciA9IFRlc3RTTVRQU2VydmVyKChIT1NULCAwKSwgc2VsZi5wcm9jZXNzX21lc3NhZ2UsIDAuMDAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbWFwKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQotICAgICAgICBhZGRyID0gKCdsb2NhbGhvc3QnLCBzZXJ2ZXIucG9ydCkKKyAgICAgICAgYWRkciA9IChIT1NULCBzZXJ2ZXIucG9ydCkKICAgICAgICAgaCA9IGxvZ2dpbmcuaGFuZGxlcnMuU01UUEhhbmRsZXIoYWRkciwgJ21lJywgJ3lvdScsICdMb2cnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0PXNlbGYuVElNRU9VVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLnRvYWRkcnMsIFsneW91J10pCiAgICAgICAgIHNlbGYubWVzc2FnZXMgPSBbXQotICAgICAgICByID0gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKHsnbXNnJzogJ0hlbGxvJ30pCisgICAgICAgIHIgPSBsb2dnaW5nLm1ha2VMb2dSZWNvcmQoeydtc2cnOiAnSGVsbG8gXHUyNzEzJ30pCiAgICAgICAgIHNlbGYuaGFuZGxlZCA9IHRocmVhZGluZy5FdmVudCgpCiAgICAgICAgIGguaGFuZGxlKHIpCiAgICAgICAgIHNlbGYuaGFuZGxlZC53YWl0KHNlbGYuVElNRU9VVCkgICMgMTQzMTQ6IGRvbid0IHdhaXQgZm9yZXZlcgpAQCAtOTc5LDcgKzk0Niw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFpbGZyb20sICdtZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmNwdHRvcywgWyd5b3UnXSkKICAgICAgICAgc2VsZi5hc3NlcnRJbignXG5TdWJqZWN0OiBMb2dcbicsIGRhdGEpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkYXRhLmVuZHN3aXRoKCdcblxuSGVsbG8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRhdGEuZW5kc3dpdGgoJ1xuXG5IZWxsbyBcdTI3MTMnKSkKICAgICAgICAgaC5jbG9zZSgpCiAKICAgICBkZWYgcHJvY2Vzc19tZXNzYWdlKHNlbGYsICphcmdzKToKQEAgLTk5MSw3ICs5NTgsNyBAQAogICAgICIiIlRlc3RzIGZvciB0aGUgTWVtb3J5SGFuZGxlci4iIiIKIAogICAgICMgRG8gbm90IGJvdGhlciB3aXRoIGEgbG9nZ2VyIG5hbWUgZ3JvdXAuCi0gICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXltcdy5dKyAtPiAoW1x3XSspOiAoW1xkXSspJCIKKyAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCkBAIC0xMDQ0LDcgKzEwMTEsNyBAQAogCiAgICAgIiIiUmVhZGluZyBsb2dnaW5nIGNvbmZpZyBmcm9tIGEgLmluaS1zdHlsZSBjb25maWcgZmlsZS4iIiIKIAotICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oW1x3XSspIFwrXCsgKFtcd10rKSQiCisgICAgZXhwZWN0ZWRfbG9nX3BhdCA9IHIiXihcdyspIFwrXCsgKFx3KykkIgogCiAgICAgIyBjb25maWcwIGlzIGEgc3RhbmRhcmQgY29uZmlndXJhdGlvbi4KICAgICBjb25maWcwID0gIiIiCkBAIC0xMjkyLDYgKzEyNTksMjQgQEAKICAgICAgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBpcyBlbXB0eS4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSkKIAorICAgIGRlZiB0ZXN0X2NvbmZpZzBfdXNpbmdfY3Bfb2soc2VsZik6CisgICAgICAgICMgQSBzaW1wbGUgY29uZmlnIGZpbGUgd2hpY2ggb3ZlcnJpZGVzIHRoZSBkZWZhdWx0IHNldHRpbmdzLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIGZpbGUgPSBpby5TdHJpbmdJTyh0ZXh0d3JhcC5kZWRlbnQoc2VsZi5jb25maWcwKSkKKyAgICAgICAgICAgIGNwID0gY29uZmlncGFyc2VyLkNvbmZpZ1BhcnNlcigpCisgICAgICAgICAgICBjcC5yZWFkX2ZpbGUoZmlsZSkKKyAgICAgICAgICAgIGxvZ2dpbmcuY29uZmlnLmZpbGVDb25maWcoY3ApCisgICAgICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigpCisgICAgICAgICAgICAjIFdvbid0IG91dHB1dCBhbnl0aGluZworICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgICMgT3V0cHV0cyBhIG1lc3NhZ2UKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfbG9nX2xpbmVzKFsKKyAgICAgICAgICAgICAgICAoJ0VSUk9SJywgJzInKSwKKyAgICAgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCisgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCisKICAgICBkZWYgdGVzdF9jb25maWcxX29rKHNlbGYsIGNvbmZpZz1jb25maWcxKToKICAgICAgICAgIyBBIGNvbmZpZyBmaWxlIGRlZmluaW5nIGEgc3ViLXBhcnNlciBhcyB3ZWxsLgogICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKQEAgLTEzODEsNyArMTM2Niw3IEBACiAKICAgICBkZWYgdGVzdF9sb2dnZXJfZGlzYWJsaW5nKHNlbGYpOgogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKLSAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ2ZvbycpCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdzb21lX3ByaXN0aW5lX2xvZ2dlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobG9nZ2VyLmRpc2FibGVkKQogICAgICAgICBzZWxmLmFwcGx5X2NvbmZpZyhzZWxmLmRpc2FibGVfdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxvZ2dlci5kaXNhYmxlZCkKQEAgLTEzOTQsMTcgKzEzNzksMjMgQEAKIAogICAgICIiIlRlc3QgZm9yIFNvY2tldEhhbmRsZXIgb2JqZWN0cy4iIiIKIAorICAgIGlmIHRocmVhZGluZzoKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFRDUFNlcnZlcgorICAgICAgICBhZGRyZXNzID0gKCdsb2NhbGhvc3QnLCAwKQorCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICAiIiJTZXQgdXAgYSBUQ1Agc2VydmVyIHRvIHJlY2VpdmUgbG9nIG1lc3NhZ2VzLCBhbmQgYSBTb2NrZXRIYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VENQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX3NvY2tldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX3NvY2tldCwgMC4wMSkKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VydmVyLnJlYWR5LndhaXQoKQotICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuU29ja2V0SGFuZGxlcignbG9jYWxob3N0JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpCisgICAgICAgIGhjbHMgPSBsb2dnaW5nLmhhbmRsZXJzLlNvY2tldEhhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscygnbG9jYWxob3N0Jywgc2VydmVyLnBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBOb25lKQogICAgICAgICBzZWxmLmxvZ19vdXRwdXQgPSAnJwogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuc29ja19oZGxyKQpAQCAtMTQ0NCwzNSArMTQzNSw3MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYubG9nX291dHB1dCwgInNwYW1cbmVnZ3NcbiIpCiAKICAgICBkZWYgdGVzdF9ub3NlcnZlcihzZWxmKToKKyAgICAgICAgIyBBdm9pZCB0aW1pbmctcmVsYXRlZCBmYWlsdXJlcyBkdWUgdG8gU29ja2V0SGFuZGxlcidzIG93biBoYXJkLXdpcmVkCisgICAgICAgICMgb25lLXNlY29uZCB0aW1lb3V0IG9uIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigpIChpc3N1ZSAjMTYyNjQpLgorICAgICAgICBzZWxmLnNvY2tfaGRsci5yZXRyeVN0YXJ0ID0gMi41CiAgICAgICAgICMgS2lsbCB0aGUgc2VydmVyCiAgICAgICAgIHNlbGYuc2VydmVyLnN0b3AoMi4wKQotICAgICAgICAjVGhlIGxvZ2dpbmcgY2FsbCBzaG91bGQgdHJ5IHRvIGNvbm5lY3QsIHdoaWNoIHNob3VsZCBmYWlsCisgICAgICAgICMgVGhlIGxvZ2dpbmcgY2FsbCBzaG91bGQgdHJ5IHRvIGNvbm5lY3QsIHdoaWNoIHNob3VsZCBmYWlsCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignRGVsaWJlcmF0ZSBtaXN0YWtlJykKICAgICAgICAgZXhjZXB0IFJ1bnRpbWVFcnJvcjoKICAgICAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIuZXhjZXB0aW9uKCdOZXZlciBzZW50JykKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5lcnJvcignTmV2ZXIgc2VudCwgZWl0aGVyJykKICAgICAgICAgbm93ID0gdGltZS50aW1lKCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSA+IG5vdykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSwgbm93KQogICAgICAgICB0aW1lLnNsZWVwKHNlbGYuc29ja19oZGxyLnJldHJ5VGltZSAtIG5vdyArIDAuMDAxKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmVycm9yKCdOb3IgdGhpcycpCiAKK2RlZiBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpOgorICAgIGZkLCBmbiA9IHRlbXBmaWxlLm1rc3RlbXAocHJlZml4PSd0ZXN0X2xvZ2dpbmdfJywgc3VmZml4PScuc29jaycpCisgICAgb3MuY2xvc2UoZmQpCisgICAgIyBqdXN0IG5lZWQgYSBuYW1lIC0gZmlsZSBjYW4ndCBiZSBwcmVzZW50LCBvciB3ZSdsbCBnZXQgYW4KKyAgICAjICdhZGRyZXNzIGFscmVhZHkgaW4gdXNlJyBlcnJvci4KKyAgICBvcy5yZW1vdmUoZm4pCisgICAgcmV0dXJuIGZuCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpLCAiVW5peCBzb2NrZXRzIHJlcXVpcmVkIikKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ1RocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCitjbGFzcyBVbml4U29ja2V0SGFuZGxlclRlc3QoU29ja2V0SGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgU29ja2V0SGFuZGxlciB3aXRoIHVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZyBhbmQgaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIik6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVbml4U3RyZWFtU2VydmVyCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgICMgb3ZlcnJpZGUgdGhlIGRlZmluaXRpb24gaW4gdGhlIGJhc2UgY2xhc3MKKyAgICAgICAgc2VsZi5hZGRyZXNzID0gX2dldF90ZW1wX2RvbWFpbl9zb2NrZXQoKQorICAgICAgICBTb2NrZXRIYW5kbGVyVGVzdC5zZXRVcChzZWxmKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBTb2NrZXRIYW5kbGVyVGVzdC50ZWFyRG93bihzZWxmKQorICAgICAgICBvcy5yZW1vdmUoc2VsZi5hZGRyZXNzKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgRGF0YWdyYW1IYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAKICAgICAiIiJUZXN0IGZvciBEYXRhZ3JhbUhhbmRsZXIuIiIiCiAKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVRFBTZXJ2ZXIKKyAgICAgICAgYWRkcmVzcyA9ICgnbG9jYWxob3N0JywgMCkKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiU2V0IHVwIGEgVURQIHNlcnZlciB0byByZWNlaXZlIGxvZyBtZXNzYWdlcywgYW5kIGEgRGF0YWdyYW1IYW5kbGVyCiAgICAgICAgIHBvaW50aW5nIHRvIHRoYXQgc2VydmVyJ3MgYWRkcmVzcyBhbmQgcG9ydC4iIiIKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKLSAgICAgICAgYWRkciA9ICgnbG9jYWxob3N0JywgMCkKLSAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0VURQU2VydmVyKGFkZHIsIHNlbGYuaGFuZGxlX2RhdGFncmFtLCAwLjAxKQorICAgICAgICBzZWxmLnNlcnZlciA9IHNlcnZlciA9IHNlbGYuc2VydmVyX2NsYXNzKHNlbGYuYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhhbmRsZV9kYXRhZ3JhbSwgMC4wMSkKICAgICAgICAgc2VydmVyLnN0YXJ0KCkKICAgICAgICAgc2VydmVyLnJlYWR5LndhaXQoKQotICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuRGF0YWdyYW1IYW5kbGVyKCdsb2NhbGhvc3QnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlci5wb3J0KQorICAgICAgICBoY2xzID0gbG9nZ2luZy5oYW5kbGVycy5EYXRhZ3JhbUhhbmRsZXIKKyAgICAgICAgaWYgaXNpbnN0YW5jZShzZXJ2ZXIuc2VydmVyX2FkZHJlc3MsIHR1cGxlKToKKyAgICAgICAgICAgIHNlbGYuc29ja19oZGxyID0gaGNscygnbG9jYWxob3N0Jywgc2VydmVyLnBvcnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnNvY2tfaGRsciA9IGhjbHMoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCBOb25lKQogICAgICAgICBzZWxmLmxvZ19vdXRwdXQgPSAnJwogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLnJlbW92ZUhhbmRsZXIoc2VsZi5yb290X2xvZ2dlci5oYW5kbGVyc1swXSkKICAgICAgICAgc2VsZi5yb290X2xvZ2dlci5hZGRIYW5kbGVyKHNlbGYuc29ja19oZGxyKQpAQCAtMTUwNSwyMyArMTUzMSw0NiBAQAogICAgICAgICBzZWxmLmhhbmRsZWQud2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2dfb3V0cHV0LCAic3BhbVxuZWdnc1xuIikKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIiksICJVbml4IHNvY2tldHMgcmVxdWlyZWQiKQorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFVuaXhEYXRhZ3JhbUhhbmRsZXJUZXN0KERhdGFncmFtSGFuZGxlclRlc3QpOgorCisgICAgIiIiVGVzdCBmb3IgRGF0YWdyYW1IYW5kbGVyIHVzaW5nIFVuaXggc29ja2V0cy4iIiIKKworICAgIGlmIHRocmVhZGluZyBhbmQgaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIik6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVbml4RGF0YWdyYW1TZXJ2ZXIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyBvdmVycmlkZSB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgYmFzZSBjbGFzcworICAgICAgICBzZWxmLmFkZHJlc3MgPSBfZ2V0X3RlbXBfZG9tYWluX3NvY2tldCgpCisgICAgICAgIERhdGFncmFtSGFuZGxlclRlc3Quc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgRGF0YWdyYW1IYW5kbGVyVGVzdC50ZWFyRG93bihzZWxmKQorICAgICAgICBvcy5yZW1vdmUoc2VsZi5hZGRyZXNzKQogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgU3lzTG9nSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogCiAgICAgIiIiVGVzdCBmb3IgU3lzTG9nSGFuZGxlciB1c2luZyBVRFAuIiIiCiAKKyAgICBpZiB0aHJlYWRpbmc6CisgICAgICAgIHNlcnZlcl9jbGFzcyA9IFRlc3RVRFBTZXJ2ZXIKKyAgICAgICAgYWRkcmVzcyA9ICgnbG9jYWxob3N0JywgMCkKKwogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiU2V0IHVwIGEgVURQIHNlcnZlciB0byByZWNlaXZlIGxvZyBtZXNzYWdlcywgYW5kIGEgU3lzTG9nSGFuZGxlcgogICAgICAgICBwb2ludGluZyB0byB0aGF0IHNlcnZlcidzIGFkZHJlc3MgYW5kIHBvcnQuIiIiCiAgICAgICAgIEJhc2VUZXN0LnNldFVwKHNlbGYpCi0gICAgICAgIGFkZHIgPSAoJ2xvY2FsaG9zdCcsIDApCi0gICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gVGVzdFVEUFNlcnZlcihhZGRyLCBzZWxmLmhhbmRsZV9kYXRhZ3JhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDEpCisgICAgICAgIHNlbGYuc2VydmVyID0gc2VydmVyID0gc2VsZi5zZXJ2ZXJfY2xhc3Moc2VsZi5hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaGFuZGxlX2RhdGFncmFtLCAwLjAxKQogICAgICAgICBzZXJ2ZXIuc3RhcnQoKQogICAgICAgICBzZXJ2ZXIucmVhZHkud2FpdCgpCi0gICAgICAgIHNlbGYuc2xfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuU3lzTG9nSGFuZGxlcigoJ2xvY2FsaG9zdCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyLnBvcnQpKQorICAgICAgICBoY2xzID0gbG9nZ2luZy5oYW5kbGVycy5TeXNMb2dIYW5kbGVyCisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VydmVyLnNlcnZlcl9hZGRyZXNzLCB0dXBsZSk6CisgICAgICAgICAgICBzZWxmLnNsX2hkbHIgPSBoY2xzKCgnbG9jYWxob3N0Jywgc2VydmVyLnBvcnQpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zbF9oZGxyID0gaGNscyhzZXJ2ZXIuc2VydmVyX2FkZHJlc3MpCiAgICAgICAgIHNlbGYubG9nX291dHB1dCA9ICcnCiAgICAgICAgIHNlbGYucm9vdF9sb2dnZXIucmVtb3ZlSGFuZGxlcihzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzWzBdKQogICAgICAgICBzZWxmLnJvb3RfbG9nZ2VyLmFkZEhhbmRsZXIoc2VsZi5zbF9oZGxyKQpAQCAtMTU1Nyw0MSArMTYwNiwyOCBAQAogICAgICAgICBzZWxmLmhhbmRsZWQud2FpdCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5sb2dfb3V0cHV0LCBiJzwxMT5oXHhjM1x4YTRtLXNwXHhjM1x4YTRtJykKIAorQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIiksICJVbml4IHNvY2tldHMgcmVxdWlyZWQiKQorQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKK2NsYXNzIFVuaXhTeXNMb2dIYW5kbGVyVGVzdChTeXNMb2dIYW5kbGVyVGVzdCk6CisKKyAgICAiIiJUZXN0IGZvciBTeXNMb2dIYW5kbGVyIHdpdGggVW5peCBzb2NrZXRzLiIiIgorCisgICAgaWYgdGhyZWFkaW5nIGFuZCBoYXNhdHRyKHNvY2tldCwgIkFGX1VOSVgiKToKKyAgICAgICAgc2VydmVyX2NsYXNzID0gVGVzdFVuaXhEYXRhZ3JhbVNlcnZlcgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIG92ZXJyaWRlIHRoZSBkZWZpbml0aW9uIGluIHRoZSBiYXNlIGNsYXNzCisgICAgICAgIHNlbGYuYWRkcmVzcyA9IF9nZXRfdGVtcF9kb21haW5fc29ja2V0KCkKKyAgICAgICAgU3lzTG9nSGFuZGxlclRlc3Quc2V0VXAoc2VsZikKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgU3lzTG9nSGFuZGxlclRlc3QudGVhckRvd24oc2VsZikKKyAgICAgICAgb3MucmVtb3ZlKHNlbGYuYWRkcmVzcykKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3ModGhyZWFkaW5nLCAnVGhyZWFkaW5nIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEhUVFBIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAgICAgIiIiVGVzdCBmb3IgSFRUUEhhbmRsZXIuIiIiCiAKLSAgICBQRU1GSUxFID0gIiIiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQotTUlJQ1hRSUJBQUtCZ1FER1Q0eFM1cjkxcmJMSlFLMm5VRGVuQmhCRzZxRmsrYlZPanVBR0MvTFNIbEFvQm52RwotelFHM2FnT0crZTdjNXoyWFQ4bTJrdE9STHFHM0U0bVltYnhneWhEcnpQNmVpMkFuYytwc3ptbnhQb0szUHVoNQotYVhWK1hLdDBiVTBDMW0yK0FDbUdHSjB0M1A0MDhhcnQ4Mm5PeEJ3OFpIZ0lnOUR0cDZ4SVVDeU9xd0lEQVFBQgotQW9HQkFKRlRuRmJvYUtoNWVVckl6am1OcktzRzQ0akV5eSt2V3ZITi9GZ1NDNGwxMDNIeGhtV2l1TDVMdjNmNwotMHRNcDF0WDdENnh2SHdJRzlWV3Z5S2IvQ3E5ckpzRGlibURWSU9zbG5PV2VRaEcrWHdKeWl0UjBwcS9LbEpJQgotNUxqT1JjQnc3OTVvS1dPQWk2UmNPYjFPTjU5dHlzRUZZaEFHUU85azZWTDYyMWdSQWtFQS9HYitZWFVMTHBicwotcGlYTjNxNHpjSHplYVZBTm82OXRVWjZUamFRcU1lVHhFNHRPWU0wRzBab1NlSEVkYVA1OUFPWkdLWFhOR1NReQotMnovTWRkY1lHUUpCQU1rakxTWUlwT0xKWTExamE4T3d3c3dGRzJoRXpIZTBjUzliem8rK1IvamMxYkhBNVIwWQotaTZ2QTVpUGkrd29wUEZ2cHl0ZEJvbDdVdUVCZTV4WnJ4V01DUVFDV3hFTFJIaVAyeVdwRWVMSjNnR0R6b1hNTgotUHlkV2poUmp1N0J4M0F6a1R0ZitENmxhd3oxK2VHVHVFc3M1aTBKS0JrTUV3dnduTjJzMWNlK0V1RjRKQWtCYgotRTk2aDFsQXprVlc1T0FmWU9QWThSQ1BBOTBaTy9ob3lnN1BwU3hSMEVDdURyZ0VSUjhnWEllWVVZZmVqQmtFYQotcmFiNENmUm9WSktLTTI4WXEveFpBa0J2dXE2NzBKUkN3T2dmVVRkd3c3V3BkT1FCWVBrelFjY3NLTkNzbFFXOAotL0R5VzZ5MDZvUXVzU0VOVXZ5blQ2ZHIzTEp4dC9OZ1pQaFpYMitrMWVZRFYKLS0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCi0tLS0tLUJFR0lOIENFUlRJRklDQVRFLS0tLS0KLU1JSUNHekNDQVlTZ0F3SUJBZ0lKQUlxODRhMlEvT3ZsTUEwR0NTcUdTSWIzRFFFQkJRVUFNQlF4RWpBUUJnTlYKLUJBTVRDV3h2WTJGc2FHOXpkREFlRncweE1UQTFNakV4TURJek16TmFGdzAzTlRBek1qRXdNelUxTVRkYU1CUXgKLUVqQVFCZ05WQkFNVENXeHZZMkZzYUc5emREQ0JuekFOQmdrcWhraUc5dzBCQVFFRkFBT0JqUUF3Z1lrQ2dZRUEKLXhrK01VdWEvZGEyeXlVQ3RwMUEzcHdZUVJ1cWhaUG0xVG83Z0JndnkwaDVRS0FaN3hzMEJ0Mm9EaHZudTNPYzkKLWwwL0p0cExUa1M2aHR4T0ptSm04WU1vUTY4eitub3RnSjNQcWJNNXA4VDZDdHo3b2VXbDFmbHlyZEcxTkF0WnQKLXZnQXBoaGlkTGR6K05QR3E3Zk5wenNRY1BHUjRDSVBRN2Flc1NGQXNqcXNDQXdFQUFhTjFNSE13SFFZRFZSME8KLUJCWUVGTFdhVVBPNk43ZWZHaXVvUzlpM0RWWWNVd24wTUVRR0ExVWRJd1E5TUR1QUZMV2FVUE82TjdlZkdpdW8KLVM5aTNEVlljVXduMG9SaWtGakFVTVJJd0VBWURWUVFERXdsc2IyTmhiR2h2YzNTQ0NRQ0t2T0d0a1B6cjVUQU0KLUJnTlZIUk1FQlRBREFRSC9NQTBHQ1NxR1NJYjNEUUVCQlFVQUE0R0JBTUs1d2hQakxOUUsxSXZ2azg4b3FKcXEKLTRmODg5T3dpa0dQMGVVaE9CaGJGbHNacytqcTVZWkMyVXpIeitldnpLQmxnQVAxdTRsUC9jQjg1Q25qdldxTSsKLTFjL2x5d0ZIUTZIT2REZVExTDcydFNZTXJOT0c0WE5tTG4waDdyeDZHb1RVN2RjRlJmc2VhaEJDcThtdjBJRHQKLUlSYlRwdmxIV1Bqc1N2SHowWk9ICi0tLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tIiIiCi0KICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICIiIlNldCB1cCBhbiBIVFRQIHNlcnZlciB0byByZWNlaXZlIGxvZyBtZXNzYWdlcywgYW5kIGEgSFRUUEhhbmRsZXIKICAgICAgICAgcG9pbnRpbmcgdG8gdGhhdCBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBwb3J0LiIiIgpAQCAtMTYyMSwxNyArMTY1NywxOCBAQAogICAgICAgICAgICAgaWYgc2VjdXJlOgogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHNzbAotICAgICAgICAgICAgICAgICAgICBmZCwgZm4gPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCi0gICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBmOgotICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShzZWxmLlBFTUZJTEUpCi0gICAgICAgICAgICAgICAgICAgIHNzbGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCi0gICAgICAgICAgICAgICAgICAgIHNzbGN0eC5sb2FkX2NlcnRfY2hhaW4oZm4pCi0gICAgICAgICAgICAgICAgICAgIG9zLnVubGluayhmbikKICAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHNzbGN0eCA9IE5vbmUKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBoZXJlID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgICAgICAgICAgICAgICAgICBsb2NhbGhvc3RfY2VydCA9IG9zLnBhdGguam9pbihoZXJlLCAia2V5Y2VydC5wZW0iKQorICAgICAgICAgICAgICAgICAgICBzc2xjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgICAgICAgICBzc2xjdHgubG9hZF9jZXJ0X2NoYWluKGxvY2FsaG9zdF9jZXJ0KQorCisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChjYWZpbGU9bG9jYWxob3N0X2NlcnQpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNzbGN0eCA9IE5vbmUKKyAgICAgICAgICAgICAgICBjb250ZXh0ID0gTm9uZQogICAgICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBzZXJ2ZXIgPSBUZXN0SFRUUFNlcnZlcihhZGRyLCBzZWxmLmhhbmRsZV9yZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMDEsIHNzbGN0eD1zc2xjdHgpCiAgICAgICAgICAgICBzZXJ2ZXIuc3RhcnQoKQpAQCAtMTYzOSw3ICsxNjc2LDggQEAKICAgICAgICAgICAgIGhvc3QgPSAnbG9jYWxob3N0OiVkJyAlIHNlcnZlci5zZXJ2ZXJfcG9ydAogICAgICAgICAgICAgc2VjdXJlX2NsaWVudCA9IHNlY3VyZSBhbmQgc3NsY3R4CiAgICAgICAgICAgICBzZWxmLmhfaGRsciA9IGxvZ2dpbmcuaGFuZGxlcnMuSFRUUEhhbmRsZXIoaG9zdCwgJy9mcm9iJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmU9c2VjdXJlX2NsaWVudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN1cmU9c2VjdXJlX2NsaWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PWNvbnRleHQpCiAgICAgICAgICAgICBzZWxmLmxvZ19kYXRhID0gTm9uZQogICAgICAgICAgICAgcm9vdF9sb2dnZXIuYWRkSGFuZGxlcihzZWxmLmhfaGRscikKIApAQCAtMTc3OSw3ICsxODE3LDcgQEAKICAgICAgICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGgpCiAgICAgICAgICAgICBzID0gc3RyZWFtLmdldHZhbHVlKCkKICAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuZmluZCgiVXNlcldhcm5pbmc6IEknbSB3YXJuaW5nIHlvdS4uLlxuIikgPiAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHMuZmluZCgiVXNlcldhcm5pbmc6IEknbSB3YXJuaW5nIHlvdS4uLlxuIiksIDApCiAKICAgICAgICAgICAgICNTZWUgaWYgYW4gZXhwbGljaXQgZmlsZSB1c2VzIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbgogICAgICAgICAgICAgYV9maWxlID0gaW8uU3RyaW5nSU8oKQpAQCAtMTgxNyw3ICsxODU1LDcgQEAKIAogICAgICIiIlJlYWRpbmcgbG9nZ2luZyBjb25maWcgZnJvbSBhIGRpY3Rpb25hcnkuIiIiCiAKLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeKFtcd10rKSBcK1wrIChbXHddKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl4oXHcrKSBcK1wrIChcdyspJCIKIAogICAgICMgY29uZmlnMCBpcyBhIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb24uCiAgICAgY29uZmlnMCA9IHsKQEAgLTIzODksNiArMjQyNywzMiBAQAogICAgICAgICB9LAogICAgIH0KIAorICAgICMgQXMgY29uZmlnMCwgYnV0IHdpdGggcHJvcGVydGllcworICAgIGNvbmZpZzE0ID0geworICAgICAgICAndmVyc2lvbic6IDEsCisgICAgICAgICdmb3JtYXR0ZXJzJzogeworICAgICAgICAgICAgJ2Zvcm0xJyA6IHsKKyAgICAgICAgICAgICAgICAnZm9ybWF0JyA6ICclKGxldmVsbmFtZSlzICsrICUobWVzc2FnZSlzJywKKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdoYW5kbGVycycgOiB7CisgICAgICAgICAgICAnaGFuZDEnIDogeworICAgICAgICAgICAgICAgICdjbGFzcycgOiAnbG9nZ2luZy5TdHJlYW1IYW5kbGVyJywKKyAgICAgICAgICAgICAgICAnZm9ybWF0dGVyJyA6ICdmb3JtMScsCisgICAgICAgICAgICAgICAgJ2xldmVsJyA6ICdOT1RTRVQnLAorICAgICAgICAgICAgICAgICdzdHJlYW0nICA6ICdleHQ6Ly9zeXMuc3Rkb3V0JywKKyAgICAgICAgICAgICAgICAnLic6IHsKKyAgICAgICAgICAgICAgICAgICAgJ2Zvbyc6ICdiYXInLAorICAgICAgICAgICAgICAgICAgICAndGVybWluYXRvcic6ICchXG4nLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgIH0sCisgICAgICAgICdyb290JyA6IHsKKyAgICAgICAgICAgICdsZXZlbCcgOiAnV0FSTklORycsCisgICAgICAgICAgICAnaGFuZGxlcnMnIDogWydoYW5kMSddLAorICAgICAgICB9LAorICAgIH0KKwogICAgIG91dF9vZl9vcmRlciA9IHsKICAgICAgICAgInZlcnNpb24iOiAxLAogICAgICAgICAiZm9ybWF0dGVycyI6IHsKQEAgLTI2NTYsMTEgKzI3MjAsMjAgQEAKICAgICBkZWYgdGVzdF9jb25maWcxM19mYWlsdXJlKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb24sIHNlbGYuYXBwbHlfY29uZmlnLCBzZWxmLmNvbmZpZzEzKQogCisgICAgZGVmIHRlc3RfY29uZmlnMTRfb2soc2VsZik6CisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5hcHBseV9jb25maWcoc2VsZi5jb25maWcxNCkKKyAgICAgICAgICAgIGggPSBsb2dnaW5nLl9oYW5kbGVyc1snaGFuZDEnXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmZvbywgJ2JhcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGgudGVybWluYXRvciwgJyFcbicpCisgICAgICAgICAgICBsb2dnaW5nLndhcm5pbmcoJ0V4Y2xhbWF0aW9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXRwdXQuZ2V0dmFsdWUoKS5lbmRzd2l0aCgnRXhjbGFtYXRpb24hXG4nKSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgJ2xpc3RlbigpIG5lZWRzIHRocmVhZGluZyB0byB3b3JrJykKLSAgICBkZWYgc2V0dXBfdmlhX2xpc3RlbmVyKHNlbGYsIHRleHQpOgorICAgIGRlZiBzZXR1cF92aWFfbGlzdGVuZXIoc2VsZiwgdGV4dCwgdmVyaWZ5PU5vbmUpOgogICAgICAgICB0ZXh0ID0gdGV4dC5lbmNvZGUoInV0Zi04IikKICAgICAgICAgIyBBc2sgZm9yIGEgcmFuZG9tbHkgYXNzaWduZWQgcG9ydCAoYnkgdXNpbmcgcG9ydCAwKQotICAgICAgICB0ID0gbG9nZ2luZy5jb25maWcubGlzdGVuKDApCisgICAgICAgIHQgPSBsb2dnaW5nLmNvbmZpZy5saXN0ZW4oMCwgdmVyaWZ5KQogICAgICAgICB0LnN0YXJ0KCkKICAgICAgICAgdC5yZWFkeS53YWl0KCkKICAgICAgICAgIyBOb3cgZ2V0IHRoZSBwb3J0IGFsbG9jYXRlZApAQCAtMjcyMCw2ICsyNzkzLDY5IEBACiAgICAgICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgaXMgZW1wdHkuCiAgICAgICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoW10pCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiB0ZXN0X2xpc3Rlbl92ZXJpZnkoc2VsZik6CisKKyAgICAgICAgZGVmIHZlcmlmeV9mYWlsKHN0dWZmKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZGVmIHZlcmlmeV9yZXZlcnNlKHN0dWZmKToKKyAgICAgICAgICAgIHJldHVybiBzdHVmZls6Oi0xXQorCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICB0b19zZW5kID0gdGV4dHdyYXAuZGVkZW50KENvbmZpZ0ZpbGVUZXN0LmNvbmZpZzEpCisgICAgICAgICMgRmlyc3QsIHNwZWNpZnkgYSB2ZXJpZmljYXRpb24gZnVuY3Rpb24gdGhhdCB3aWxsIGZhaWwuCisgICAgICAgICMgV2UgZXhwZWN0IHRvIHNlZSBubyBvdXRwdXQsIHNpbmNlIG91ciBjb25maWd1cmF0aW9uCisgICAgICAgICMgbmV2ZXIgdG9vayBlZmZlY3QuCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgorICAgICAgICAgICAgc2VsZi5zZXR1cF92aWFfbGlzdGVuZXIodG9fc2VuZCwgdmVyaWZ5X2ZhaWwpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbXSwgc3RyZWFtPW91dHB1dCkKKyAgICAgICAgIyBPcmlnaW5hbCBsb2dnZXIgb3V0cHV0IGhhcyB0aGUgc3R1ZmYgd2UgbG9nZ2VkLgorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICBdLCBwYXQ9ciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiKQorCisgICAgICAgICMgTm93LCBwZXJmb3JtIG5vIHZlcmlmaWNhdGlvbi4gT3VyIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgIyBzaG91bGQgdGFrZSBlZmZlY3QuCisKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXRwdXQ6CisgICAgICAgICAgICBzZWxmLnNldHVwX3ZpYV9saXN0ZW5lcih0b19zZW5kKSAgICAjIG5vIHZlcmlmeSBjYWxsYWJsZSBzcGVjaWZpZWQKKyAgICAgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJjb21waWxlci5wYXJzZXIiKQorICAgICAgICAgICAgIyBCb3RoIHdpbGwgb3V0cHV0IGEgbWVzc2FnZQorICAgICAgICAgICAgbG9nZ2VyLmluZm8oc2VsZi5uZXh0X21lc3NhZ2UoKSkKKyAgICAgICAgICAgIGxvZ2dlci5lcnJvcihzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzMnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnNCcpLAorICAgICAgICBdLCBzdHJlYW09b3V0cHV0KQorICAgICAgICAjIE9yaWdpbmFsIGxvZ2dlciBvdXRwdXQgc3RpbGwgaGFzIHRoZSBzdHVmZiB3ZSBsb2dnZWQgYmVmb3JlLgorICAgICAgICBzZWxmLmFzc2VydF9sb2dfbGluZXMoWworICAgICAgICAgICAgKCdJTkZPJywgJzEnKSwKKyAgICAgICAgICAgICgnRVJST1InLCAnMicpLAorICAgICAgICBdLCBwYXQ9ciJeW1x3Ll0rIC0+IChcdyspOiAoXGQrKSQiKQorCisgICAgICAgICMgTm93LCBwZXJmb3JtIHZlcmlmaWNhdGlvbiB3aGljaCB0cmFuc2Zvcm1zIHRoZSBieXRlcy4KKworICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuc2V0dXBfdmlhX2xpc3RlbmVyKHRvX3NlbmRbOjotMV0sIHZlcmlmeV9yZXZlcnNlKQorICAgICAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoImNvbXBpbGVyLnBhcnNlciIpCisgICAgICAgICAgICAjIEJvdGggd2lsbCBvdXRwdXQgYSBtZXNzYWdlCisgICAgICAgICAgICBsb2dnZXIuaW5mbyhzZWxmLm5leHRfbWVzc2FnZSgpKQorICAgICAgICAgICAgbG9nZ2VyLmVycm9yKHNlbGYubmV4dF9tZXNzYWdlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnNScpLAorICAgICAgICAgICAgKCdFUlJPUicsICc2JyksCisgICAgICAgIF0sIHN0cmVhbT1vdXRwdXQpCisgICAgICAgICMgT3JpZ2luYWwgbG9nZ2VyIG91dHB1dCBzdGlsbCBoYXMgdGhlIHN0dWZmIHdlIGxvZ2dlZCBiZWZvcmUuCisgICAgICAgIHNlbGYuYXNzZXJ0X2xvZ19saW5lcyhbCisgICAgICAgICAgICAoJ0lORk8nLCAnMScpLAorICAgICAgICAgICAgKCdFUlJPUicsICcyJyksCisgICAgICAgIF0sIHBhdD1yIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIpCisKICAgICBkZWYgdGVzdF9vdXRfb2Zfb3JkZXIoc2VsZik6CiAgICAgICAgIHNlbGYuYXBwbHlfY29uZmlnKHNlbGYub3V0X29mX29yZGVyKQogICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5nZXRMb2dnZXIoJ215bW9kdWxlJykuaGFuZGxlcnNbMF0KQEAgLTI3NzksMTQgKzI5MTUsMTQgQEAKICAgICAgICAgbDIgPSBsb2dnaW5nLmdldExvZ2dlcignZGVmLmdoaScpCiAgICAgICAgIGMxID0gci5nZXRDaGlsZCgneHl6JykKICAgICAgICAgYzIgPSByLmdldENoaWxkKCd1dncueHl6JykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMxIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd4eXonKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGMyIGlzIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd1dncueHl6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzEsIGxvZ2dpbmcuZ2V0TG9nZ2VyKCd4eXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMiwgbG9nZ2luZy5nZXRMb2dnZXIoJ3V2dy54eXonKSkKICAgICAgICAgYzEgPSBsMS5nZXRDaGlsZCgnZGVmJykKICAgICAgICAgYzIgPSBjMS5nZXRDaGlsZCgnZ2hpJykKICAgICAgICAgYzMgPSBsMS5nZXRDaGlsZCgnZGVmLmdoaScpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMSBpcyBsb2dnaW5nLmdldExvZ2dlcignYWJjLmRlZicpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoYzIgaXMgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjMiBpcyBjMykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMSwgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhjMiwgbG9nZ2luZy5nZXRMb2dnZXIoJ2FiYy5kZWYuZ2hpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoYzIsIGMzKQogCiAKIGNsYXNzIERlcml2ZWRMb2dSZWNvcmQobG9nZ2luZy5Mb2dSZWNvcmQpOgpAQCAtMjgyOSw3ICsyOTY1LDcgQEAKIAogY2xhc3MgUXVldWVIYW5kbGVyVGVzdChCYXNlVGVzdCk6CiAgICAgIyBEbyBub3QgYm90aGVyIHdpdGggYSBsb2dnZXIgbmFtZSBncm91cC4KLSAgICBleHBlY3RlZF9sb2dfcGF0ID0gciJeW1x3Ll0rIC0+IChbXHddKyk6IChbXGRdKykkIgorICAgIGV4cGVjdGVkX2xvZ19wYXQgPSByIl5bXHcuXSsgLT4gKFx3Kyk6IChcZCspJCIKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgQmFzZVRlc3Quc2V0VXAoc2VsZikKQEAgLTMxMjMsMTMgKzMyNTksMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMCAtIHJlbGVhc2UnLCBzZWxmLmNhbGxlZFstMV0pCiAKICAgICBkZWYgdGVzdF93aXRoX2lvZXJyb3JfaW5fYWNxdWlyZShzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdhY3F1aXJlJywgSU9FcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdhY3F1aXJlJywgT1NFcnJvcikKIAogICAgIGRlZiB0ZXN0X3dpdGhfaW9lcnJvcl9pbl9mbHVzaChzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdmbHVzaCcsIElPRXJyb3IpCisgICAgICAgIHNlbGYuX3Rlc3Rfd2l0aF9mYWlsdXJlX2luX21ldGhvZCgnZmx1c2gnLCBPU0Vycm9yKQogCiAgICAgZGVmIHRlc3Rfd2l0aF9pb2Vycm9yX2luX2Nsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3dpdGhfZmFpbHVyZV9pbl9tZXRob2QoJ2Nsb3NlJywgSU9FcnJvcikKKyAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdjbG9zZScsIE9TRXJyb3IpCiAKICAgICBkZWYgdGVzdF93aXRoX3ZhbHVlZXJyb3JfaW5fYWNxdWlyZShzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF93aXRoX2ZhaWx1cmVfaW5fbWV0aG9kKCdhY3F1aXJlJywgVmFsdWVFcnJvcikKQEAgLTMyMzUsNiArMzM3MSwyNSBAQAogICAgICAgICBsb2dnaW5nLnNldExvZ2dlckNsYXNzKGxvZ2dpbmcuTG9nZ2VyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvZ2dpbmcuZ2V0TG9nZ2VyQ2xhc3MoKSwgbG9nZ2luZy5Mb2dnZXIpCiAKKyAgICBkZWYgdGVzdF9sb2dnaW5nX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMDAzNworICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBsb2dnaW5nCisKKyAgICAgICAgICAgIGNsYXNzIEE6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInNvbWUgZXJyb3IiKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5leGNlcHRpb24oImV4Y2VwdGlvbiBpbiBfX2RlbF9fIikKKworICAgICAgICAgICAgYSA9IEEoKSIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJleGNlcHRpb24gaW4gX19kZWxfXyIsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiVmFsdWVFcnJvcjogc29tZSBlcnJvciIsIGVycikKKworCiBjbGFzcyBMb2dSZWNvcmRUZXN0KEJhc2VUZXN0KToKICAgICBkZWYgdGVzdF9zdHJfcmVwKHNlbGYpOgogICAgICAgICByID0gbG9nZ2luZy5tYWtlTG9nUmVjb3JkKHt9KQpAQCAtMzM1Miw2ICszNTA3LDEyIEBACiAgICAgICAgICAgICAgICAgIkVSUk9SOnJvb3Q6TG9nIGFuIGVycm9yIikKIAogICAgIGRlZiB0ZXN0X2ZpbGVuYW1lKHNlbGYpOgorCisgICAgICAgIGRlZiBjbGVhbnVwKGgxLCBoMiwgZm4pOgorICAgICAgICAgICAgaDEuY2xvc2UoKQorICAgICAgICAgICAgaDIuY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorCiAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9J3Rlc3QubG9nJykKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2dnaW5nLnJvb3QuaGFuZGxlcnMpLCAxKQpAQCAtMzM1OSwxNyArMzUyMCwyMyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaGFuZGxlciwgbG9nZ2luZy5GaWxlSGFuZGxlcikKIAogICAgICAgICBleHBlY3RlZCA9IGxvZ2dpbmcuRmlsZUhhbmRsZXIoJ3Rlc3QubG9nJywgJ2EnKQotICAgICAgICBzZWxmLmFkZENsZWFudXAoZXhwZWN0ZWQuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5zdHJlYW0ubW9kZSwgZXhwZWN0ZWQuc3RyZWFtLm1vZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5zdHJlYW0ubmFtZSwgZXhwZWN0ZWQuc3RyZWFtLm5hbWUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwLCBoYW5kbGVyLCBleHBlY3RlZCwgJ3Rlc3QubG9nJykKIAogICAgIGRlZiB0ZXN0X2ZpbGVtb2RlKHNlbGYpOgorCisgICAgICAgIGRlZiBjbGVhbnVwKGgxLCBoMiwgZm4pOgorICAgICAgICAgICAgaDEuY2xvc2UoKQorICAgICAgICAgICAgaDIuY2xvc2UoKQorICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQorCiAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoZmlsZW5hbWU9J3Rlc3QubG9nJywgZmlsZW1vZGU9J3diJykKIAogICAgICAgICBoYW5kbGVyID0gbG9nZ2luZy5yb290LmhhbmRsZXJzWzBdCiAgICAgICAgIGV4cGVjdGVkID0gbG9nZ2luZy5GaWxlSGFuZGxlcigndGVzdC5sb2cnLCAnd2InKQotICAgICAgICBzZWxmLmFkZENsZWFudXAoZXhwZWN0ZWQuY2xvc2UpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlci5zdHJlYW0ubW9kZSwgZXhwZWN0ZWQuc3RyZWFtLm1vZGUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwLCBoYW5kbGVyLCBleHBlY3RlZCwgJ3Rlc3QubG9nJykKIAogICAgIGRlZiB0ZXN0X3N0cmVhbShzZWxmKToKICAgICAgICAgc3RyZWFtID0gaW8uU3RyaW5nSU8oKQpAQCAtMzQxOSw2ICszNTg2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXJzPWhhbmRsZXJzKQogICAgICAgICBhc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbG9nZ2luZy5iYXNpY0NvbmZpZywgc3RyZWFtPXN0cmVhbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM9aGFuZGxlcnMpCisgICAgICAgICMgSXNzdWUgMjMyMDc6IHRlc3QgZm9yIGludmFsaWQga3dhcmdzCisgICAgICAgIGFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nLmJhc2ljQ29uZmlnLCBsb2dsZXZlbD1sb2dnaW5nLklORk8pCisgICAgICAgICMgU2hvdWxkIHBvcCBib3RoIGZpbGVuYW1lIGFuZCBmaWxlbW9kZSBldmVuIGlmIGZpbGVuYW1lIGlzIE5vbmUKKyAgICAgICAgbG9nZ2luZy5iYXNpY0NvbmZpZyhmaWxlbmFtZT1Ob25lLCBmaWxlbW9kZT0nYScpCiAKICAgICBkZWYgdGVzdF9oYW5kbGVycyhzZWxmKToKICAgICAgICAgaGFuZGxlcnMgPSBbCkBAIC0zNTc0LDE4ICszNzQ1LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4Yy5fX2NsYXNzX18sIGV4YywgZXhjLl9fdHJhY2ViYWNrX18pKQogCiAgICAgZGVmIHRlc3RfbG9nX2ludmFsaWRfbGV2ZWxfd2l0aF9yYWlzZShzZWxmKToKLSAgICAgICAgb2xkX3JhaXNlID0gbG9nZ2luZy5yYWlzZUV4Y2VwdGlvbnMKLSAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNldGF0dHIsIGxvZ2dpbmcsICdyYWlzZUV4ZWNwdGlvbnMnLCBvbGRfcmFpc2UpCi0KLSAgICAgICAgbG9nZ2luZy5yYWlzZUV4Y2VwdGlvbnMgPSBUcnVlCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5sb2dnZXIubG9nLCAnMTAnLCAndGVzdCBtZXNzYWdlJykKKyAgICAgICAgd2l0aCBzd2FwX2F0dHIobG9nZ2luZywgJ3JhaXNlRXhjZXB0aW9ucycsIFRydWUpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmxvZ2dlci5sb2csICcxMCcsICd0ZXN0IG1lc3NhZ2UnKQogCiAgICAgZGVmIHRlc3RfbG9nX2ludmFsaWRfbGV2ZWxfbm9fcmFpc2Uoc2VsZik6Ci0gICAgICAgIG9sZF9yYWlzZSA9IGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZXRhdHRyLCBsb2dnaW5nLCAncmFpc2VFeGVjcHRpb25zJywgb2xkX3JhaXNlKQotCi0gICAgICAgIGxvZ2dpbmcucmFpc2VFeGNlcHRpb25zID0gRmFsc2UKLSAgICAgICAgc2VsZi5sb2dnZXIubG9nKCcxMCcsICd0ZXN0IG1lc3NhZ2UnKSAgIyBubyBleGNlcHRpb24gaGFwcGVucworICAgICAgICB3aXRoIHN3YXBfYXR0cihsb2dnaW5nLCAncmFpc2VFeGNlcHRpb25zJywgRmFsc2UpOgorICAgICAgICAgICAgc2VsZi5sb2dnZXIubG9nKCcxMCcsICd0ZXN0IG1lc3NhZ2UnKSAgIyBubyBleGNlcHRpb24gaGFwcGVucwogCiAgICAgZGVmIHRlc3RfZmluZF9jYWxsZXJfd2l0aF9zdGFja19pbmZvKHNlbGYpOgogICAgICAgICBjYWxsZWQgPSBbXQpAQCAtMzgyNSw2ICszOTkwLDYzIEBACiAgICAgICAgIGFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsb2dnaW5nLmhhbmRsZXJzLlRpbWVkUm90YXRpbmdGaWxlSGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm4sICdXNycsIGRlbGF5PVRydWUpCiAKKyAgICBkZWYgdGVzdF9jb21wdXRlX3JvbGxvdmVyX2RhaWx5X2F0dGltZShzZWxmKToKKyAgICAgICAgY3VycmVudFRpbWUgPSAwCisgICAgICAgIGF0VGltZSA9IGRhdGV0aW1lLnRpbWUoMTIsIDAsIDApCisgICAgICAgIHJoID0gbG9nZ2luZy5oYW5kbGVycy5UaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXIoCisgICAgICAgICAgICBzZWxmLmZuLCB3aGVuPSdNSUROSUdIVCcsIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIHV0Yz1UcnVlLAorICAgICAgICAgICAgYXRUaW1lPWF0VGltZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKGN1cnJlbnRUaW1lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGN1cnJlbnRUaW1lICsgMTIgKiA2MCAqIDYwKQorCisgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIoY3VycmVudFRpbWUgKyAxMyAqIDYwICogNjApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgY3VycmVudFRpbWUgKyAzNiAqIDYwICogNjApCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICByaC5jbG9zZSgpCisKKyAgICAjQHVuaXR0ZXN0LnNraXBJZihUcnVlLCAnVGVtcG9yYXJpbHkgc2tpcHBlZCB3aGlsZSBmYWlsdXJlcyBpbnZlc3RpZ2F0ZWQuJykKKyAgICBkZWYgdGVzdF9jb21wdXRlX3JvbGxvdmVyX3dlZWtseV9hdHRpbWUoc2VsZik6CisgICAgICAgIGN1cnJlbnRUaW1lID0gaW50KHRpbWUudGltZSgpKQorICAgICAgICB0b2RheSA9IGN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUgJSA4NjQwMAorCisgICAgICAgIGF0VGltZSA9IGRhdGV0aW1lLnRpbWUoMTIsIDAsIDApCisKKyAgICAgICAgd2RheSA9IHRpbWUuZ210aW1lKHRvZGF5KS50bV93ZGF5CisgICAgICAgIGZvciBkYXkgaW4gcmFuZ2UoNyk6CisgICAgICAgICAgICByaCA9IGxvZ2dpbmcuaGFuZGxlcnMuVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyKAorICAgICAgICAgICAgICAgIHNlbGYuZm4sIHdoZW49J1clZCcgJSBkYXksIGludGVydmFsPTEsIGJhY2t1cENvdW50PTAsIHV0Yz1UcnVlLAorICAgICAgICAgICAgICAgIGF0VGltZT1hdFRpbWUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgd2RheSA+IGRheToKKyAgICAgICAgICAgICAgICAgICAgIyBUaGUgcm9sbG92ZXIgZGF5IGhhcyBhbHJlYWR5IHBhc3NlZCB0aGlzIHdlZWssIHNvIHdlCisgICAgICAgICAgICAgICAgICAgICMgZ28gb3ZlciBpbnRvIG5leHQgd2VlaworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICg3IC0gd2RheSArIGRheSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCA9IChkYXkgLSB3ZGF5KQorICAgICAgICAgICAgICAgICMgQXQgdGhpcyBwb2ludCBleHBlY3RlZCBpcyBpbiBkYXlzIGZyb20gbm93LCBjb252ZXJ0IHRvIHNlY29uZHMKKyAgICAgICAgICAgICAgICBleHBlY3RlZCAqPSAyNCAqIDYwICogNjAKKyAgICAgICAgICAgICAgICAjIEFkZCBpbiB0aGUgcm9sbG92ZXIgdGltZQorICAgICAgICAgICAgICAgIGV4cGVjdGVkICs9IDEyICogNjAgKiA2MAorICAgICAgICAgICAgICAgICMgQWRkIGluIGFkanVzdG1lbnQgZm9yIHRvZGF5CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgKz0gdG9kYXkKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSByaC5jb21wdXRlUm9sbG92ZXIodG9kYXkpCisgICAgICAgICAgICAgICAgaWYgYWN0dWFsICE9IGV4cGVjdGVkOgorICAgICAgICAgICAgICAgICAgICBwcmludCgnZmFpbGVkIGluIHRpbWV6b25lOiAlZCcgJSB0aW1lLnRpbWV6b25lKQorICAgICAgICAgICAgICAgICAgICBwcmludCgnbG9jYWwgdmFyczogJXMnICUgbG9jYWxzKCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorICAgICAgICAgICAgICAgIGlmIGRheSA9PSB3ZGF5OgorICAgICAgICAgICAgICAgICAgICAjIGdvZXMgaW50byBmb2xsb3dpbmcgd2VlaworICAgICAgICAgICAgICAgICAgICBleHBlY3RlZCArPSA3ICogMjQgKiA2MCAqIDYwCisgICAgICAgICAgICAgICAgYWN0dWFsID0gcmguY29tcHV0ZVJvbGxvdmVyKHRvZGF5ICsgMTMgKiA2MCAqIDYwKQorICAgICAgICAgICAgICAgIGlmIGFjdHVhbCAhPSBleHBlY3RlZDoKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2ZhaWxlZCBpbiB0aW1lem9uZTogJWQnICUgdGltZS50aW1lem9uZSkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQoJ2xvY2FsIHZhcnM6ICVzJyAlIGxvY2FscygpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgcmguY2xvc2UoKQorCisKIGRlZiBzZWNzKCoqa3cpOgogICAgIHJldHVybiBkYXRldGltZS50aW1lZGVsdGEoKiprdykgLy8gZGF0ZXRpbWUudGltZWRlbHRhKHNlY29uZHM9MSkKIApAQCAtMzg3MiwxOCArNDA5NCwyNSBAQAogICAgIHNldGF0dHIoVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyVGVzdCwgInRlc3RfY29tcHV0ZV9yb2xsb3Zlcl8lcyIgJSB3aGVuLCB0ZXN0X2NvbXB1dGVfcm9sbG92ZXIpCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3Mod2luMzJldnRsb2csICd3aW4zMmV2dGxvZy93aW4zMmV2dGxvZ3V0aWwgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorQHVuaXR0ZXN0LnNraXBVbmxlc3Mod2luMzJldnRsb2csICd3aW4zMmV2dGxvZy93aW4zMmV2dGxvZ3V0aWwvcHl3aW50eXBlcyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiBjbGFzcyBOVEV2ZW50TG9nSGFuZGxlclRlc3QoQmFzZVRlc3QpOgogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICBsb2d0eXBlID0gJ0FwcGxpY2F0aW9uJwogICAgICAgICBlbGggPSB3aW4zMmV2dGxvZy5PcGVuRXZlbnRMb2coTm9uZSwgbG9ndHlwZSkKICAgICAgICAgbnVtX3JlY3MgPSB3aW4zMmV2dGxvZy5HZXROdW1iZXJPZkV2ZW50TG9nUmVjb3JkcyhlbGgpCi0gICAgICAgIGggPSBsb2dnaW5nLmhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyKCd0ZXN0X2xvZ2dpbmcnKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGggPSBsb2dnaW5nLmhhbmRsZXJzLk5URXZlbnRMb2dIYW5kbGVyKCd0ZXN0X2xvZ2dpbmcnKQorICAgICAgICBleGNlcHQgcHl3aW50eXBlcy5lcnJvciBhcyBlOgorICAgICAgICAgICAgaWYgZS53aW5lcnJvciA9PSA1OiAgIyBhY2Nlc3MgZGVuaWVkCisgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ0luc3VmZmljaWVudCBwcml2aWxlZ2VzIHRvIHJ1biB0ZXN0JykKKyAgICAgICAgICAgIHJhaXNlCisKICAgICAgICAgciA9IGxvZ2dpbmcubWFrZUxvZ1JlY29yZCh7J21zZyc6ICdUZXN0IExvZyBNZXNzYWdlJ30pCiAgICAgICAgIGguaGFuZGxlKHIpCiAgICAgICAgIGguY2xvc2UoKQogICAgICAgICAjIE5vdyBzZWUgaWYgdGhlIGV2ZW50IGlzIHJlY29yZGVkCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudW1fcmVjcyA8IHdpbjMyZXZ0bG9nLkdldE51bWJlck9mRXZlbnRMb2dSZWNvcmRzKGVsaCkpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhudW1fcmVjcywgd2luMzJldnRsb2cuR2V0TnVtYmVyT2ZFdmVudExvZ1JlY29yZHMoZWxoKSkKICAgICAgICAgZmxhZ3MgPSB3aW4zMmV2dGxvZy5FVkVOVExPR19CQUNLV0FSRFNfUkVBRCB8IFwKICAgICAgICAgICAgICAgICB3aW4zMmV2dGxvZy5FVkVOVExPR19TRVFVRU5USUFMX1JFQUQKICAgICAgICAgZm91bmQgPSBGYWxzZQpAQCAtMzkxNiw3ICs0MTQ1LDggQEAKICAgICAgICAgICAgICAgICAgU01UUEhhbmRsZXJUZXN0LCBGaWxlSGFuZGxlclRlc3QsIFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0LAogICAgICAgICAgICAgICAgICBMYXN0UmVzb3J0VGVzdCwgTG9nUmVjb3JkVGVzdCwgRXhjZXB0aW9uVGVzdCwKICAgICAgICAgICAgICAgICAgU3lzTG9nSGFuZGxlclRlc3QsIEhUVFBIYW5kbGVyVGVzdCwgTlRFdmVudExvZ0hhbmRsZXJUZXN0LAotICAgICAgICAgICAgICAgICBUaW1lZFJvdGF0aW5nRmlsZUhhbmRsZXJUZXN0CisgICAgICAgICAgICAgICAgIFRpbWVkUm90YXRpbmdGaWxlSGFuZGxlclRlc3QsIFVuaXhTb2NrZXRIYW5kbGVyVGVzdCwKKyAgICAgICAgICAgICAgICAgVW5peERhdGFncmFtSGFuZGxlclRlc3QsIFVuaXhTeXNMb2dIYW5kbGVyVGVzdAogICAgICAgICAgICAgICAgICkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9uZy5weSBiL0xpYi90ZXN0L3Rlc3RfbG9uZy5weQppbmRleCAzZjljMWUyLi41YjllMzdhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb25nLnB5CkBAIC03LDE1ICs3LDYgQEAKIGltcG9ydCBtYXRoCiBpbXBvcnQgYXJyYXkKIAotIyBVc2VkIGZvciBsYXp5IGZvcm1hdHRpbmcgb2YgZmFpbHVyZSBtZXNzYWdlcwotY2xhc3MgRnJtKG9iamVjdCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgotICAgICAgICBzZWxmLmZvcm1hdCA9IGZvcm1hdAotICAgICAgICBzZWxmLmFyZ3MgPSBhcmdzCi0KLSAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIHNlbGYuZm9ybWF0ICUgc2VsZi5hcmdzCi0KICMgU0hJRlQgc2hvdWxkIG1hdGNoIHRoZSB2YWx1ZSBpbiBsb25naW50cmVwci5oIGZvciBiZXN0IHRlc3RpbmcuCiBTSElGVCA9IHN5cy5pbnRfaW5mby5iaXRzX3Blcl9kaWdpdAogQkFTRSA9IDIgKiogU0hJRlQKQEAgLTE2MywxNyArMTU0LDE4IEBACiAKICAgICBkZWYgY2hlY2tfZGl2aXNpb24oc2VsZiwgeCwgeSk6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBxLCByID0gZGl2bW9kKHgsIHkpCi0gICAgICAgIHEyLCByMiA9IHgvL3ksIHgleQotICAgICAgICBwYWIsIHBiYSA9IHgqeSwgeSp4Ci0gICAgICAgIGVxKHBhYiwgcGJhLCBGcm0oIm11bHRpcGxpY2F0aW9uIGRvZXMgbm90IGNvbW11dGUgZm9yICVyIGFuZCAlciIsIHgsIHkpKQotICAgICAgICBlcShxLCBxMiwgRnJtKCJkaXZtb2QgcmV0dXJucyBkaWZmZXJlbnQgcXVvdGllbnQgdGhhbiAvIGZvciAlciBhbmQgJXIiLCB4LCB5KSkKLSAgICAgICAgZXEociwgcjIsIEZybSgiZGl2bW9kIHJldHVybnMgZGlmZmVyZW50IG1vZCB0aGFuICUlIGZvciAlciBhbmQgJXIiLCB4LCB5KSkKLSAgICAgICAgZXEoeCwgcSp5ICsgciwgRnJtKCJ4ICE9IHEqeSArIHIgYWZ0ZXIgZGl2bW9kIG9uIHg9JXIsIHk9JXIiLCB4LCB5KSkKLSAgICAgICAgaWYgeSA+IDA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8PSByIDwgeSwgRnJtKCJiYWQgbW9kIGZyb20gZGl2bW9kIG9uICVyIGFuZCAlciIsIHgsIHkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgPCByIDw9IDAsIEZybSgiYmFkIG1vZCBmcm9tIGRpdm1vZCBvbiAlciBhbmQgJXIiLCB4LCB5KSkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeD14LCB5PXkpOgorICAgICAgICAgICAgcSwgciA9IGRpdm1vZCh4LCB5KQorICAgICAgICAgICAgcTIsIHIyID0geC8veSwgeCV5CisgICAgICAgICAgICBwYWIsIHBiYSA9IHgqeSwgeSp4CisgICAgICAgICAgICBlcShwYWIsIHBiYSwgIm11bHRpcGxpY2F0aW9uIGRvZXMgbm90IGNvbW11dGUiKQorICAgICAgICAgICAgZXEocSwgcTIsICJkaXZtb2QgcmV0dXJucyBkaWZmZXJlbnQgcXVvdGllbnQgdGhhbiAvIikKKyAgICAgICAgICAgIGVxKHIsIHIyLCAiZGl2bW9kIHJldHVybnMgZGlmZmVyZW50IG1vZCB0aGFuICUiKQorICAgICAgICAgICAgZXEoeCwgcSp5ICsgciwgInggIT0gcSp5ICsgciBhZnRlciBkaXZtb2QiKQorICAgICAgICAgICAgaWYgeSA+IDA6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPD0gciA8IHksICJiYWQgbW9kIGZyb20gZGl2bW9kIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHkgPCByIDw9IDAsICJiYWQgbW9kIGZyb20gZGl2bW9kIikKIAogICAgIGRlZiB0ZXN0X2RpdmlzaW9uKHNlbGYpOgogICAgICAgICBkaWdpdHMgPSBsaXN0KHJhbmdlKDEsIE1BWERJR0lUUysxKSkgKyBsaXN0KHJhbmdlKEtBUkFUU1VCQV9DVVRPRkYsCkBAIC0yMjgsNzIgKzIyMCw2MyBAQAogICAgICAgICAgICAgZm9yIGJiaXRzIGluIGJpdHM6CiAgICAgICAgICAgICAgICAgaWYgYmJpdHMgPCBhYml0czoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgICAgICBiID0gKDEgPDwgYmJpdHMpIC0gMQotICAgICAgICAgICAgICAgIHggPSBhICogYgotICAgICAgICAgICAgICAgIHkgPSAoKDEgPDwgKGFiaXRzICsgYmJpdHMpKSAtCi0gICAgICAgICAgICAgICAgICAgICAoMSA8PCBhYml0cykgLQotICAgICAgICAgICAgICAgICAgICAgKDEgPDwgYmJpdHMpICsKLSAgICAgICAgICAgICAgICAgICAgIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LCB5LAotICAgICAgICAgICAgICAgICAgICBGcm0oImJhZCByZXN1bHQgZm9yIGEqYjogYT0lciwgYj0lciwgeD0lciwgeT0lciIsIGEsIGIsIHgsIHkpKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGFiaXRzPWFiaXRzLCBiYml0cz1iYml0cyk6CisgICAgICAgICAgICAgICAgICAgIGIgPSAoMSA8PCBiYml0cykgLSAxCisgICAgICAgICAgICAgICAgICAgIHggPSBhICogYgorICAgICAgICAgICAgICAgICAgICB5ID0gKCgxIDw8IChhYml0cyArIGJiaXRzKSkgLQorICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IGFiaXRzKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgYmJpdHMpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAxKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCiAKICAgICBkZWYgY2hlY2tfYml0b3BfaWRlbnRpdGllc18xKHNlbGYsIHgpOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgZXEoeCAmIDAsIDAsIEZybSgieCAmIDAgIT0gMCBmb3IgeD0lciIsIHgpKQotICAgICAgICBlcSh4IHwgMCwgeCwgRnJtKCJ4IHwgMCAhPSB4IGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKHggXiAwLCB4LCBGcm0oInggXiAwICE9IHggZm9yIHg9JXIiLCB4KSkKLSAgICAgICAgZXEoeCAmIC0xLCB4LCBGcm0oInggJiAtMSAhPSB4IGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKHggfCAtMSwgLTEsIEZybSgieCB8IC0xICE9IC0xIGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKHggXiAtMSwgfngsIEZybSgieCBeIC0xICE9IH54IGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKHgsIH5+eCwgRnJtKCJ4ICE9IH5+eCBmb3IgeD0lciIsIHgpKQotICAgICAgICBlcSh4ICYgeCwgeCwgRnJtKCJ4ICYgeCAhPSB4IGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKHggfCB4LCB4LCBGcm0oInggfCB4ICE9IHggZm9yIHg9JXIiLCB4KSkKLSAgICAgICAgZXEoeCBeIHgsIDAsIEZybSgieCBeIHggIT0gMCBmb3IgeD0lciIsIHgpKQotICAgICAgICBlcSh4ICYgfngsIDAsIEZybSgieCAmIH54ICE9IDAgZm9yIHg9JXIiLCB4KSkKLSAgICAgICAgZXEoeCB8IH54LCAtMSwgRnJtKCJ4IHwgfnggIT0gLTEgZm9yIHg9JXIiLCB4KSkKLSAgICAgICAgZXEoeCBeIH54LCAtMSwgRnJtKCJ4IF4gfnggIT0gLTEgZm9yIHg9JXIiLCB4KSkKLSAgICAgICAgZXEoLXgsIDEgKyB+eCwgRnJtKCJub3QgLXggPT0gMSArIH54IGZvciB4PSVyIiwgeCkpCi0gICAgICAgIGVxKC14LCB+KHgtMSksIEZybSgibm90IC14ID09IH4oeC0xKSBmb3J4ID0lciIsIHgpKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh4PXgpOgorICAgICAgICAgICAgZXEoeCAmIDAsIDApCisgICAgICAgICAgICBlcSh4IHwgMCwgeCkKKyAgICAgICAgICAgIGVxKHggXiAwLCB4KQorICAgICAgICAgICAgZXEoeCAmIC0xLCB4KQorICAgICAgICAgICAgZXEoeCB8IC0xLCAtMSkKKyAgICAgICAgICAgIGVxKHggXiAtMSwgfngpCisgICAgICAgICAgICBlcSh4LCB+fngpCisgICAgICAgICAgICBlcSh4ICYgeCwgeCkKKyAgICAgICAgICAgIGVxKHggfCB4LCB4KQorICAgICAgICAgICAgZXEoeCBeIHgsIDApCisgICAgICAgICAgICBlcSh4ICYgfngsIDApCisgICAgICAgICAgICBlcSh4IHwgfngsIC0xKQorICAgICAgICAgICAgZXEoeCBeIH54LCAtMSkKKyAgICAgICAgICAgIGVxKC14LCAxICsgfngpCisgICAgICAgICAgICBlcSgteCwgfih4LTEpKQogICAgICAgICBmb3IgbiBpbiByYW5nZSgyKlNISUZUKToKICAgICAgICAgICAgIHAyID0gMiAqKiBuCi0gICAgICAgICAgICBlcSh4IDw8IG4gPj4gbiwgeCwKLSAgICAgICAgICAgICAgICBGcm0oInggPDwgbiA+PiBuICE9IHggZm9yIHg9JXIsIG49JXIiLCAoeCwgbikpKQotICAgICAgICAgICAgZXEoeCAvLyBwMiwgeCA+PiBuLAotICAgICAgICAgICAgICAgIEZybSgieCAvLyBwMiAhPSB4ID4+IG4gZm9yIHg9JXIgbj0lciBwMj0lciIsICh4LCBuLCBwMikpKQotICAgICAgICAgICAgZXEoeCAqIHAyLCB4IDw8IG4sCi0gICAgICAgICAgICAgICAgRnJtKCJ4ICogcDIgIT0geCA8PCBuIGZvciB4PSVyIG49JXIgcDI9JXIiLCAoeCwgbiwgcDIpKSkKLSAgICAgICAgICAgIGVxKHggJiAtcDIsIHggPj4gbiA8PCBuLAotICAgICAgICAgICAgICAgIEZybSgibm90IHggJiAtcDIgPT0geCA+PiBuIDw8IG4gZm9yIHg9JXIgbj0lciBwMj0lciIsICh4LCBuLCBwMikpKQotICAgICAgICAgICAgZXEoeCAmIC1wMiwgeCAmIH4ocDIgLSAxKSwKLSAgICAgICAgICAgICAgICBGcm0oIm5vdCB4ICYgLXAyID09IHggJiB+KHAyIC0gMSkgZm9yIHg9JXIgbj0lciBwMj0lciIsICh4LCBuLCBwMikpKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeD14LCBuPW4sIHAyPXAyKToKKyAgICAgICAgICAgICAgICBlcSh4IDw8IG4gPj4gbiwgeCkKKyAgICAgICAgICAgICAgICBlcSh4IC8vIHAyLCB4ID4+IG4pCisgICAgICAgICAgICAgICAgZXEoeCAqIHAyLCB4IDw8IG4pCisgICAgICAgICAgICAgICAgZXEoeCAmIC1wMiwgeCA+PiBuIDw8IG4pCisgICAgICAgICAgICAgICAgZXEoeCAmIC1wMiwgeCAmIH4ocDIgLSAxKSkKIAogICAgIGRlZiBjaGVja19iaXRvcF9pZGVudGl0aWVzXzIoc2VsZiwgeCwgeSk6CiAgICAgICAgIGVxID0gc2VsZi5hc3NlcnRFcXVhbAotICAgICAgICBlcSh4ICYgeSwgeSAmIHgsIEZybSgieCAmIHkgIT0geSAmIHggZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQotICAgICAgICBlcSh4IHwgeSwgeSB8IHgsIEZybSgieCB8IHkgIT0geSB8IHggZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQotICAgICAgICBlcSh4IF4geSwgeSBeIHgsIEZybSgieCBeIHkgIT0geSBeIHggZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQotICAgICAgICBlcSh4IF4geSBeIHgsIHksIEZybSgieCBeIHkgXiB4ICE9IHkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQotICAgICAgICBlcSh4ICYgeSwgfih+eCB8IH55KSwgRnJtKCJ4ICYgeSAhPSB+KH54IHwgfnkpIGZvciB4PSVyLCB5PSVyIiwgKHgsIHkpKSkKLSAgICAgICAgZXEoeCB8IHksIH4ofnggJiB+eSksIEZybSgieCB8IHkgIT0gfih+eCAmIH55KSBmb3IgeD0lciwgeT0lciIsICh4LCB5KSkpCi0gICAgICAgIGVxKHggXiB5LCAoeCB8IHkpICYgfih4ICYgeSksCi0gICAgICAgICAgICAgRnJtKCJ4IF4geSAhPSAoeCB8IHkpICYgfih4ICYgeSkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQotICAgICAgICBlcSh4IF4geSwgKHggJiB+eSkgfCAofnggJiB5KSwKLSAgICAgICAgICAgICBGcm0oInggXiB5ID09ICh4ICYgfnkpIHwgKH54ICYgeSkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQotICAgICAgICBlcSh4IF4geSwgKHggfCB5KSAmICh+eCB8IH55KSwKLSAgICAgICAgICAgICBGcm0oInggXiB5ID09ICh4IHwgeSkgJiAofnggfCB+eSkgZm9yIHg9JXIsIHk9JXIiLCAoeCwgeSkpKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCh4PXgsIHk9eSk6CisgICAgICAgICAgICBlcSh4ICYgeSwgeSAmIHgpCisgICAgICAgICAgICBlcSh4IHwgeSwgeSB8IHgpCisgICAgICAgICAgICBlcSh4IF4geSwgeSBeIHgpCisgICAgICAgICAgICBlcSh4IF4geSBeIHgsIHkpCisgICAgICAgICAgICBlcSh4ICYgeSwgfih+eCB8IH55KSkKKyAgICAgICAgICAgIGVxKHggfCB5LCB+KH54ICYgfnkpKQorICAgICAgICAgICAgZXEoeCBeIHksICh4IHwgeSkgJiB+KHggJiB5KSkKKyAgICAgICAgICAgIGVxKHggXiB5LCAoeCAmIH55KSB8ICh+eCAmIHkpKQorICAgICAgICAgICAgZXEoeCBeIHksICh4IHwgeSkgJiAofnggfCB+eSkpCiAKICAgICBkZWYgY2hlY2tfYml0b3BfaWRlbnRpdGllc18zKHNlbGYsIHgsIHksIHopOgogICAgICAgICBlcSA9IHNlbGYuYXNzZXJ0RXF1YWwKLSAgICAgICAgZXEoKHggJiB5KSAmIHosIHggJiAoeSAmIHopLAotICAgICAgICAgICAgIEZybSgiKHggJiB5KSAmIHogIT0geCAmICh5ICYgeikgZm9yIHg9JXIsIHk9JXIsIHo9JXIiLCAoeCwgeSwgeikpKQotICAgICAgICBlcSgoeCB8IHkpIHwgeiwgeCB8ICh5IHwgeiksCi0gICAgICAgICAgICAgRnJtKCIoeCB8IHkpIHwgeiAhPSB4IHwgKHkgfCB6KSBmb3IgeD0lciwgeT0lciwgej0lciIsICh4LCB5LCB6KSkpCi0gICAgICAgIGVxKCh4IF4geSkgXiB6LCB4IF4gKHkgXiB6KSwKLSAgICAgICAgICAgICBGcm0oIih4IF4geSkgXiB6ICE9IHggXiAoeSBeIHopIGZvciB4PSVyLCB5PSVyLCB6PSVyIiwgKHgsIHksIHopKSkKLSAgICAgICAgZXEoeCAmICh5IHwgeiksICh4ICYgeSkgfCAoeCAmIHopLAotICAgICAgICAgICAgIEZybSgieCAmICh5IHwgeikgIT0gKHggJiB5KSB8ICh4ICYgeikgZm9yIHg9JXIsIHk9JXIsIHo9JXIiLCAoeCwgeSwgeikpKQotICAgICAgICBlcSh4IHwgKHkgJiB6KSwgKHggfCB5KSAmICh4IHwgeiksCi0gICAgICAgICAgICAgRnJtKCJ4IHwgKHkgJiB6KSAhPSAoeCB8IHkpICYgKHggfCB6KSBmb3IgeD0lciwgeT0lciwgej0lciIsICh4LCB5LCB6KSkpCisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHg9eCwgeT15LCB6PXopOgorICAgICAgICAgICAgZXEoKHggJiB5KSAmIHosIHggJiAoeSAmIHopKQorICAgICAgICAgICAgZXEoKHggfCB5KSB8IHosIHggfCAoeSB8IHopKQorICAgICAgICAgICAgZXEoKHggXiB5KSBeIHosIHggXiAoeSBeIHopKQorICAgICAgICAgICAgZXEoeCAmICh5IHwgeiksICh4ICYgeSkgfCAoeCAmIHopKQorICAgICAgICAgICAgZXEoeCB8ICh5ICYgeiksICh4IHwgeSkgJiAoeCB8IHopKQogCiAgICAgZGVmIHRlc3RfYml0b3BfaWRlbnRpdGllcyhzZWxmKToKICAgICAgICAgZm9yIHggaW4gc3BlY2lhbDoKQEAgLTMyNCwxMSArMzA3LDExIEBACiAgICAgZGVmIGNoZWNrX2Zvcm1hdF8xKHNlbGYsIHgpOgogICAgICAgICBmb3IgYmFzZSwgbWFwcGVyIGluICgyLCBiaW4pLCAoOCwgb2N0KSwgKDEwLCBzdHIpLCAoMTAsIHJlcHIpLCAoMTYsIGhleCk6CiAgICAgICAgICAgICBnb3QgPSBtYXBwZXIoeCkKLSAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5zbG93X2Zvcm1hdCh4LCBiYXNlKQotICAgICAgICAgICAgbXNnID0gRnJtKCIlcyByZXR1cm5lZCAlciBidXQgZXhwZWN0ZWQgJXIgZm9yICVyIiwKLSAgICAgICAgICAgICAgICBtYXBwZXIuX19uYW1lX18sIGdvdCwgZXhwZWN0ZWQsIHgpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdvdCwgZXhwZWN0ZWQsIG1zZykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGdvdCwgMCksIHgsIEZybSgnaW50KCIlcyIsIDApICE9ICVyJywgZ290LCB4KSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHg9eCwgbWFwcGVyPW1hcHBlci5fX25hbWVfXyk6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLnNsb3dfZm9ybWF0KHgsIGJhc2UpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnb3QsIGV4cGVjdGVkKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZ290PWdvdCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbnQoZ290LCAwKSwgeCkKIAogICAgIGRlZiB0ZXN0X2Zvcm1hdChzZWxmKToKICAgICAgICAgZm9yIHggaW4gc3BlY2lhbDoKQEAgLTYyNywxNCArNjEwLDE1IEBACiAgICAgICAgICAgICBmb3IgeSBpbiBjYXNlczoKICAgICAgICAgICAgICAgICBSeSA9IFJhdCh5KQogICAgICAgICAgICAgICAgIFJjbXAgPSAoUnggPiBSeSkgLSAoUnggPCBSeSkKLSAgICAgICAgICAgICAgICB4eWNtcCA9ICh4ID4geSkgLSAoeCA8IHkpCi0gICAgICAgICAgICAgICAgZXEoUmNtcCwgeHljbXAsIEZybSgiJXIgJXIgJWQgJWQiLCB4LCB5LCBSY21wLCB4eWNtcCkpCi0gICAgICAgICAgICAgICAgZXEoeCA9PSB5LCBSY21wID09IDAsIEZybSgiJXIgPT0gJXIgJWQiLCB4LCB5LCBSY21wKSkKLSAgICAgICAgICAgICAgICBlcSh4ICE9IHksIFJjbXAgIT0gMCwgRnJtKCIlciAhPSAlciAlZCIsIHgsIHksIFJjbXApKQotICAgICAgICAgICAgICAgIGVxKHggPCB5LCBSY21wIDwgMCwgRnJtKCIlciA8ICVyICVkIiwgeCwgeSwgUmNtcCkpCi0gICAgICAgICAgICAgICAgZXEoeCA8PSB5LCBSY21wIDw9IDAsIEZybSgiJXIgPD0gJXIgJWQiLCB4LCB5LCBSY21wKSkKLSAgICAgICAgICAgICAgICBlcSh4ID4geSwgUmNtcCA+IDAsIEZybSgiJXIgPiAlciAlZCIsIHgsIHksIFJjbXApKQotICAgICAgICAgICAgICAgIGVxKHggPj0geSwgUmNtcCA+PSAwLCBGcm0oIiVyID49ICVyICVkIiwgeCwgeSwgUmNtcCkpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeD14LCB5PXksIFJjbXA9UmNtcCk6CisgICAgICAgICAgICAgICAgICAgIHh5Y21wID0gKHggPiB5KSAtICh4IDwgeSkKKyAgICAgICAgICAgICAgICAgICAgZXEoUmNtcCwgeHljbXApCisgICAgICAgICAgICAgICAgICAgIGVxKHggPT0geSwgUmNtcCA9PSAwKQorICAgICAgICAgICAgICAgICAgICBlcSh4ICE9IHksIFJjbXAgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZXEoeCA8IHksIFJjbXAgPCAwKQorICAgICAgICAgICAgICAgICAgICBlcSh4IDw9IHksIFJjbXAgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgZXEoeCA+IHksIFJjbXAgPiAwKQorICAgICAgICAgICAgICAgICAgICBlcSh4ID49IHksIFJjbXAgPj0gMCkKIAogICAgIGRlZiB0ZXN0X19mb3JtYXRfXyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb3JtYXQoMTIzNDU2Nzg5LCAnZCcpLCAnMTIzNDU2Nzg5JykKQEAgLTEwNzksNyArMTA2Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgyNTYpLnRvX2J5dGVzLCAxLCAnYmlnJywgc2lnbmVkPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsICgyNTYpLnRvX2J5dGVzLCAxLCAnbGl0dGxlJywgc2lnbmVkPUZhbHNlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoMjU2KS50b19ieXRlcywgMSwgJ2xpdHRsZScsIHNpZ25lZD1UcnVlKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoLTEpLnRvX2J5dGVzLCAyLCAnYmlnJywgc2lnbmVkPUZhbHNlKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKC0xKS50b19ieXRlcywgMiwgJ2JpZycsIHNpZ25lZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgKC0xKS50b19ieXRlcywgMiwgJ2xpdHRsZScsIHNpZ25lZD1GYWxzZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoMCkudG9fYnl0ZXMoMCwgJ2JpZycpLCBiJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKDEpLnRvX2J5dGVzKDUsICdiaWcnKSwgYidceDAwXHgwMFx4MDBceDAwXHgwMScpCkBAIC0xMjM1LDYgKzEyMTksMTMgQEAKICAgICAgICAgZm9yIG4gaW4gbWFwKGludCwgaW50ZWdlcnMpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuLCAwKQogCisgICAgZGVmIHRlc3Rfc2hpZnRfYm9vbChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjE0MjI6IGVuc3VyZSB0aGF0IGJvb2wgPDwgaW50IGFuZCBib29sID4+IGludCByZXR1cm4gaW50CisgICAgICAgIGZvciB2YWx1ZSBpbiAoVHJ1ZSwgRmFsc2UpOgorICAgICAgICAgICAgZm9yIHNoaWZ0IGluICgwLCAyKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUodmFsdWUgPDwgc2hpZnQpLCBpbnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHZhbHVlID4+IHNoaWZ0KSwgaW50KQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChMb25nVGVzdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbHptYS5weSBiL0xpYi90ZXN0L3Rlc3RfbHptYS5weQppbmRleCAxNjBiMGU4Li4wN2ZhZGJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2x6bWEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sem1hLnB5CkBAIC0yMjAsMTAgKzIyMCwxMSBAQAogICAgICMgUGlja2xpbmcgcmFpc2VzIGFuIGV4Y2VwdGlvbjsgdGhlcmUncyBubyB3YXkgdG8gc2VyaWFsaXplIGFuIGx6bWFfc3RyZWFtLgogCiAgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6Ci0gICAgICAgICAgICBwaWNrbGUuZHVtcHMoTFpNQUNvbXByZXNzb3IoKSkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgotICAgICAgICAgICAgcGlja2xlLmR1bXBzKExaTUFEZWNvbXByZXNzb3IoKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKExaTUFDb21wcmVzc29yKCksIHByb3RvKQorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyhMWk1BRGVjb21wcmVzc29yKCksIHByb3RvKQogCiAKIGNsYXNzIENvbXByZXNzRGVjb21wcmVzc0Z1bmN0aW9uVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzgzLDYgKzM4NCw4IEBACiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTygpLCAidyIpIGFzIGY6CiAgICAgICAgICAgICBwYXNzCisgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTygpLCAieCIpIGFzIGY6CisgICAgICAgICAgICBwYXNzCiAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTygpLCAiYSIpIGFzIGY6CiAgICAgICAgICAgICBwYXNzCiAKQEAgLTQxMCwxMyArNDEzLDI5IEBACiAgICAgICAgICAgICB3aXRoIExaTUFGaWxlKFRFU1RGTiwgImFiIik6CiAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIHRlc3RfaW5pdF93aXRoX3hfbW9kZShzZWxmKToKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgVEVTVEZOKQorICAgICAgICBmb3IgbW9kZSBpbiAoIngiLCAieGIiKToKKyAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICB3aXRoIExaTUFGaWxlKFRFU1RGTiwgbW9kZSk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlRXhpc3RzRXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoVEVTVEZOLCBtb2RlKToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworCiAgICAgZGVmIHRlc3RfaW5pdF9iYWRfbW9kZShzZWxmKToKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICgzLCAieCIpKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgIiIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAieCIpCisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAieHQiKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgIngrIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWiksICJyeCIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFopLCAid3giKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgTFpNQUZpbGUoQnl0ZXNJTyhDT01QUkVTU0VEX1haKSwgInJ0IikKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKQEAgLTY5OCw2ICs3MTcsMjAgQEAKICAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKENPTVBSRVNTRURfWFpbOjEyOF0pKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCkKIAorICAgIGRlZiB0ZXN0X3JlYWRfdHJ1bmNhdGVkKHNlbGYpOgorICAgICAgICAjIERyb3Agc3RyZWFtIGZvb3RlcjogQ1JDICg0IGJ5dGVzKSwgaW5kZXggc2l6ZSAoNCBieXRlcyksCisgICAgICAgICMgZmxhZ3MgKDIgYnl0ZXMpIGFuZCBtYWdpYyBudW1iZXIgKDIgYnl0ZXMpLgorICAgICAgICB0cnVuY2F0ZWQgPSBDT01QUkVTU0VEX1haWzotMTJdCisgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWQpKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IsIGYucmVhZCkKKyAgICAgICAgd2l0aCBMWk1BRmlsZShCeXRlc0lPKHRydW5jYXRlZCkpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZChsZW4oSU5QVVQpKSwgSU5QVVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorICAgICAgICAjIEluY29tcGxldGUgMTItYnl0ZSBoZWFkZXIuCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEyKToKKyAgICAgICAgICAgIHdpdGggTFpNQUZpbGUoQnl0ZXNJTyh0cnVuY2F0ZWRbOmldKSkgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgZi5yZWFkLCAxKQorCiAgICAgZGVmIHRlc3RfcmVhZF9iYWRfYXJncyhzZWxmKToKICAgICAgICAgZiA9IExaTUFGaWxlKEJ5dGVzSU8oQ09NUFJFU1NFRF9YWikpCiAgICAgICAgIGYuY2xvc2UoKQpAQCAtMTA0MSw4ICsxMDc0LDYgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGx6bWEub3BlbihURVNURk4sICIiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgIngiKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgbHptYS5vcGVuKFRFU1RGTiwgInJidCIpCiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICBsem1hLm9wZW4oVEVTVEZOLCAicmIiLCBlbmNvZGluZz0idXRmLTgiKQpAQCAtMTA5MSw2ICsxMTIyLDE2IEBACiAgICAgICAgICAgICB3aXRoIGx6bWEub3BlbihiaW8sICJydCIsIG5ld2xpbmU9IlxyIikgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZGxpbmVzKCksIFt0ZXh0XSkKIAorICAgIGRlZiB0ZXN0X3hfbW9kZShzZWxmKToKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHVubGluaywgVEVTVEZOKQorICAgICAgICBmb3IgbW9kZSBpbiAoIngiLCAieGIiLCAieHQiKToKKyAgICAgICAgICAgIHVubGluayhURVNURk4pCisgICAgICAgICAgICB3aXRoIGx6bWEub3BlbihURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRmlsZUV4aXN0c0Vycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIGx6bWEub3BlbihURVNURk4sIG1vZGUpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisKIAogY2xhc3MgTWlzY2VsbGFuZW91c1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9tYWNwYXRoLnB5CmluZGV4IGFlNGU1NjQuLjIyZjg0OTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWFjcGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X21hY3BhdGgucHkKQEAgLTQ5LDE2ICs0OSw0MCBAQAogICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CiAgICAgICAgIGpvaW4gPSBtYWNwYXRoLmpvaW4KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCdhJywgJ2InKSwgJzphOmInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJzphJywgJ2InKSwgJzphOmInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJzphOicsICdiJyksICc6YTpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCc6YTo6JywgJ2InKSwgJzphOjpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCc6YScsICc6OmInKSwgJzphOjpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCdhJywgJzonKSwgJzphOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbignYTonLCAnOicpLCAnYTonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJ2EnLCAnJyksICc6YTonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJ2E6JywgJycpLCAnYTonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJycsICcnKSwgJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbignJywgJ2E6YicpLCAnYTpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCcnLCAnYScsICdiJyksICc6YTpiJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKCdhOmInLCAnYycpLCAnYTpiOmMnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJ2E6YicsICc6YycpLCAnYTpiOmMnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJ2EnLCAnOmInLCAnOmMnKSwgJzphOmI6YycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbignYScsICdiOicpLCAnYjonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oJ2E6JywgJ2I6JyksICdiOicpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInYScsIGInYicpLCBiJzphOmInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oYic6YScsIGInYicpLCBiJzphOmInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oYic6YTonLCBiJ2InKSwgYic6YTpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInOmE6OicsIGInYicpLCBiJzphOjpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInOmEnLCBiJzo6YicpLCBiJzphOjpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInYScsIGInOicpLCBiJzphOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJ2E6JywgYic6JyksIGInYTonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oYidhJywgYicnKSwgYic6YTonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oYidhOicsIGInJyksIGInYTonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGpvaW4oYicnLCBiJycpLCBiJycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJycsIGInYTpiJyksIGInYTpiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInJywgYidhJywgYidiJyksIGInOmE6YicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJ2E6YicsIGInYycpLCBiJ2E6YjpjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInYTpiJywgYic6YycpLCBiJ2E6YjpjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInYScsIGInOmInLCBiJzpjJyksIGInOmE6YjpjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChqb2luKGInYScsIGInYjonKSwgYidiOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoam9pbihiJ2E6JywgYidiOicpLCBiJ2I6JykKIAogICAgIGRlZiB0ZXN0X3NwbGl0ZXh0KHNlbGYpOgogICAgICAgICBzcGxpdGV4dCA9IG1hY3BhdGguc3BsaXRleHQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFpbGJveC5weQppbmRleCA1ZTllMzBhLi4wOTkxZjc0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21haWxib3gucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYWlsYm94LnB5CkBAIC0zMDAsNyArMzAwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2l0ZXJrZXlzKHNlbGYpOgogICAgICAgICAjIEdldCBrZXlzIHVzaW5nIGl0ZXJrZXlzKCkKLSAgICAgICAgc2VsZi5fY2hlY2tfaXRlcmF0aW9uKHNlbGYuX2JveC5rZXlzLCBkb19rZXlzPVRydWUsIGRvX3ZhbHVlcz1GYWxzZSkKKyAgICAgICAgc2VsZi5fY2hlY2tfaXRlcmF0aW9uKHNlbGYuX2JveC5pdGVya2V5cywgZG9fa2V5cz1UcnVlLCBkb192YWx1ZXM9RmFsc2UpCiAKICAgICBkZWYgdGVzdF9rZXlzKHNlbGYpOgogICAgICAgICAjIEdldCBrZXlzIHVzaW5nIGtleXMoKQpAQCAtMzA4LDcgKzMwOCw3IEBACiAKICAgICBkZWYgdGVzdF9pdGVydmFsdWVzKHNlbGYpOgogICAgICAgICAjIEdldCB2YWx1ZXMgdXNpbmcgaXRlcnZhbHVlcygpCi0gICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3gudmFsdWVzLCBkb19rZXlzPUZhbHNlLAorICAgICAgICBzZWxmLl9jaGVja19pdGVyYXRpb24oc2VsZi5fYm94Lml0ZXJ2YWx1ZXMsIGRvX2tleXM9RmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb192YWx1ZXM9VHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CkBAIC0zMjIsNyArMzIyLDcgQEAKIAogICAgIGRlZiB0ZXN0X2l0ZXJpdGVtcyhzZWxmKToKICAgICAgICAgIyBHZXQga2V5cyBhbmQgdmFsdWVzIHVzaW5nIGl0ZXJpdGVtcygpCi0gICAgICAgIHNlbGYuX2NoZWNrX2l0ZXJhdGlvbihzZWxmLl9ib3guaXRlbXMsIGRvX2tleXM9VHJ1ZSwKKyAgICAgICAgc2VsZi5fY2hlY2tfaXRlcmF0aW9uKHNlbGYuX2JveC5pdGVyaXRlbXMsIGRvX2tleXM9VHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX3ZhbHVlcz1UcnVlKQogCiAgICAgZGVmIHRlc3RfaXRlbXMoc2VsZik6CkBAIC01NjQsMTIgKzU2NCwxMiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2RlbGl0ZW1fXygnJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LmRpc2NhcmQoJycpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX3NldGl0ZW1fXygnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5pdGVya2V5cygpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5rZXlzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94LmtleXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gudmFsdWVzKCkuX19uZXh0X18oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3guaXRlcnZhbHVlcygpLl9fbmV4dF9fKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Ll9faXRlcl9fKCkuX19uZXh0X18oKSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgbGFtYmRhOiBib3gudmFsdWVzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIGxhbWJkYTogYm94Lml0ZW1zKCkubmV4dCgpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5pdGVyaXRlbXMoKS5fX25leHRfXygpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5pdGVtcygpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5nZXQoJycpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCBsYW1iZGE6IGJveC5fX2dldGl0ZW1fXygnJykpCkBAIC01OTYsNyArNTk2LDcgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgVGVzdE1haWxib3guc2V0VXAoc2VsZikKLSAgICAgICAgaWYgb3MubmFtZSBpbiAoJ250JywgJ29zMicpIG9yIHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJzoKKyAgICAgICAgaWYgKG9zLm5hbWUgPT0gJ250Jykgb3IgKHN5cy5wbGF0Zm9ybSA9PSAnY3lnd2luJyk6CiAgICAgICAgICAgICBzZWxmLl9ib3guY29sb24gPSAnIScKIAogICAgIGRlZiBhc3NlcnRNYWlsYm94RW1wdHkoc2VsZik6CkBAIC0xMDIwLDcgKzEwMjAsNyBAQAogICAgICAgICBtdGltZSA9IG9zLnBhdGguZ2V0bXRpbWUoc2VsZi5fcGF0aCkKICAgICAgICAgc2VsZi5fYm94ID0gc2VsZi5fZmFjdG9yeShzZWxmLl9wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzZWxmLl9ib3gpLCAzKQotICAgICAgICBmb3Iga2V5IGluIHNlbGYuX2JveC5rZXlzKCk6CisgICAgICAgIGZvciBrZXkgaW4gc2VsZi5fYm94Lml0ZXJrZXlzKCk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNlbGYuX2JveC5nZXRfc3RyaW5nKGtleSksIHZhbHVlcykKICAgICAgICAgc2VsZi5fYm94LmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtdGltZSwgb3MucGF0aC5nZXRtdGltZShzZWxmLl9wYXRoKSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weSBiL0xpYi90ZXN0L3Rlc3RfbWFyc2hhbC5weQppbmRleCAwYjE0MTM3Li45MDNlMTJjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21hcnNoYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tYXJzaGFsLnB5CkBAIC03LDYgKzcsMTEgQEAKIGltcG9ydCBvcwogaW1wb3J0IHR5cGVzCiAKK3RyeToKKyAgICBpbXBvcnQgX3Rlc3RjYXBpCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgX3Rlc3RjYXBpID0gTm9uZQorCiBjbGFzcyBIZWxwZXJNaXhpbjoKICAgICBkZWYgaGVscGVyKHNlbGYsIHNhbXBsZSwgKmV4dHJhKToKICAgICAgICAgbmV3ID0gbWFyc2hhbC5sb2FkcyhtYXJzaGFsLmR1bXBzKHNhbXBsZSwgKmV4dHJhKSkKQEAgLTIyLDM3ICsyNywxMyBAQAogCiBjbGFzcyBJbnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgSGVscGVyTWl4aW4pOgogICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6Ci0gICAgICAgICMgVGVzdCB0aGUgZnVsbCByYW5nZSBvZiBQeXRob24gaW50cy4KLSAgICAgICAgbiA9IHN5cy5tYXhzaXplCisgICAgICAgICMgVGVzdCBhIHJhbmdlIG9mIFB5dGhvbiBpbnRzIGxhcmdlciB0aGFuIHRoZSBtYWNoaW5lIHdvcmQgc2l6ZS4KKyAgICAgICAgbiA9IHN5cy5tYXhzaXplICoqIDIKICAgICAgICAgd2hpbGUgbjoKICAgICAgICAgICAgIGZvciBleHBlY3RlZCBpbiAoLW4sIG4pOgogICAgICAgICAgICAgICAgIHNlbGYuaGVscGVyKGV4cGVjdGVkKQogICAgICAgICAgICAgbiA9IG4gPj4gMQogCi0gICAgZGVmIHRlc3RfaW50NjQoc2VsZik6Ci0gICAgICAgICMgU2ltdWxhdGUgaW50IG1hcnNoYWxpbmcgb24gYSA2NC1iaXQgYm94LiAgVGhpcyBpcyBtb3N0IGludGVyZXN0aW5nIGlmCi0gICAgICAgICMgd2UncmUgcnVubmluZyB0aGUgdGVzdCBvbiBhIDMyLWJpdCBib3gsIG9mIGNvdXJzZS4KLQotICAgICAgICBkZWYgdG9fbGl0dGxlX2VuZGlhbl9zdHJpbmcodmFsdWUsIG5ieXRlcyk6Ci0gICAgICAgICAgICBiID0gYnl0ZWFycmF5KCkKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG5ieXRlcyk6Ci0gICAgICAgICAgICAgICAgYi5hcHBlbmQodmFsdWUgJiAweGZmKQotICAgICAgICAgICAgICAgIHZhbHVlID4+PSA4Ci0gICAgICAgICAgICByZXR1cm4gYgotCi0gICAgICAgIG1heGludDY0ID0gKDEgPDwgNjMpIC0gMQotICAgICAgICBtaW5pbnQ2NCA9IC1tYXhpbnQ2NC0xCi0KLSAgICAgICAgZm9yIGJhc2UgaW4gbWF4aW50NjQsIG1pbmludDY0LCAtbWF4aW50NjQsIC0obWluaW50NjQgPj4gMSk6Ci0gICAgICAgICAgICB3aGlsZSBiYXNlOgotICAgICAgICAgICAgICAgIHMgPSBiJ0knICsgdG9fbGl0dGxlX2VuZGlhbl9zdHJpbmcoYmFzZSwgOCkKLSAgICAgICAgICAgICAgICBnb3QgPSBtYXJzaGFsLmxvYWRzKHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiYXNlLCBnb3QpCi0gICAgICAgICAgICAgICAgaWYgYmFzZSA9PSAtMTogICMgYSBmaXhlZC1wb2ludCBmb3Igc2hpZnRpbmcgcmlnaHQgMQotICAgICAgICAgICAgICAgICAgICBiYXNlID0gMAotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGJhc2UgPj49IDEKLQogICAgIGRlZiB0ZXN0X2Jvb2woc2VsZik6CiAgICAgICAgIGZvciBiIGluIChUcnVlLCBGYWxzZSk6CiAgICAgICAgICAgICBzZWxmLmhlbHBlcihiKQpAQCAtMTk5LDEwICsxODAsMTQgQEAKICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIHRlc3RfbG9hZHNfcmVjdXJzaW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xvYWRzXzJ4X2NvZGUoc2VsZik6CiAgICAgICAgIHMgPSBiJ2MnICsgKGInWCcgKiA0KjQpICsgYid7JyAqIDIqKjIwCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZHMsIHMpCiAKKyAgICBkZWYgdGVzdF9sb2Fkc19yZWN1cnNpb24oc2VsZik6CisgICAgICAgIHMgPSBiJ2MnICsgKGInWCcgKiA0KjUpICsgYid7JyAqIDIqKjIwCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZHMsIHMpCisKICAgICBkZWYgdGVzdF9yZWN1cnNpb25fbGltaXQoc2VsZik6CiAgICAgICAgICMgQ3JlYXRlIGEgZGVlcGx5IG5lc3RlZCBzdHJ1Y3R1cmUuCiAgICAgICAgIGhlYWQgPSBsYXN0ID0gW10KQEAgLTI4MCwxNSArMjY1LDIwIEBACiAKICAgICBkZWYgdGVzdF9iYWRfcmVhZGVyKHNlbGYpOgogICAgICAgICBjbGFzcyBCYWRSZWFkZXIoaW8uQnl0ZXNJTyk6Ci0gICAgICAgICAgICBkZWYgcmVhZChzZWxmLCBuPS0xKToKLSAgICAgICAgICAgICAgICBiID0gc3VwZXIoKS5yZWFkKG4pCisgICAgICAgICAgICBkZWYgcmVhZGludG8oc2VsZiwgYnVmKToKKyAgICAgICAgICAgICAgICBuID0gc3VwZXIoKS5yZWFkaW50byhidWYpCiAgICAgICAgICAgICAgICAgaWYgbiBpcyBub3QgTm9uZSBhbmQgbiA+IDQ6Ci0gICAgICAgICAgICAgICAgICAgIGIgKz0gYicgJyAqIDEwKio2Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGIKKyAgICAgICAgICAgICAgICAgICAgbiArPSAxMCoqNgorICAgICAgICAgICAgICAgIHJldHVybiBuCiAgICAgICAgIGZvciB2YWx1ZSBpbiAoMS4wLCAxaiwgYicwMTIzNDU2Nzg5JywgJzAxMjM0NTY3ODknKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG1hcnNoYWwubG9hZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJhZFJlYWRlcihtYXJzaGFsLmR1bXBzKHZhbHVlKSkpCiAKKyAgICBkZWYgX3Rlc3RfZW9mKHNlbGYpOgorICAgICAgICBkYXRhID0gbWFyc2hhbC5kdW1wcygoImhlbGxvIiwgImRvbGx5IiwgTm9uZSkpCisgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihkYXRhKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFT0ZFcnJvciwgbWFyc2hhbC5sb2FkcywgZGF0YVswOiBpXSkKKwogTEFSR0VfU0laRSA9IDIqKjMxCiBwb2ludGVyX3NpemUgPSA4IGlmIHN5cy5tYXhzaXplID4gMHhGRkZGRkZGRiBlbHNlIDQKIApAQCAtMzMzLDE4ICszMjMsMjA0IEBACiAgICAgZGVmIHRlc3RfYnl0ZWFycmF5KHNlbGYsIHNpemUpOgogICAgICAgICBzZWxmLmNoZWNrX3VubWFyc2hhbGxhYmxlKGJ5dGVhcnJheShzaXplKSkKIAorZGVmIENvbGxlY3RPYmplY3RJRHMoaWRzLCBvYmopOgorICAgICIiIkNvbGxlY3Qgb2JqZWN0IGlkcyBzZWVuIGluIGEgc3RydWN0dXJlIiIiCisgICAgaWYgaWQob2JqKSBpbiBpZHM6CisgICAgICAgIHJldHVybgorICAgIGlkcy5hZGQoaWQob2JqKSkKKyAgICBpZiBpc2luc3RhbmNlKG9iaiwgKGxpc3QsIHR1cGxlLCBzZXQsIGZyb3plbnNldCkpOgorICAgICAgICBmb3IgZSBpbiBvYmo6CisgICAgICAgICAgICBDb2xsZWN0T2JqZWN0SURzKGlkcywgZSkKKyAgICBlbGlmIGlzaW5zdGFuY2Uob2JqLCBkaWN0KToKKyAgICAgICAgZm9yIGssIHYgaW4gb2JqLml0ZW1zKCk6CisgICAgICAgICAgICBDb2xsZWN0T2JqZWN0SURzKGlkcywgaykKKyAgICAgICAgICAgIENvbGxlY3RPYmplY3RJRHMoaWRzLCB2KQorICAgIHJldHVybiBsZW4oaWRzKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoSW50VGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBDb2RlVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFpbmVyVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQnVnc1Rlc3RDYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgIExhcmdlVmFsdWVzVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICApCitjbGFzcyBJbnN0YW5jaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIEhlbHBlck1peGluKToKKyAgICBpbnRvYmogPSAxMjMzMjEKKyAgICBmbG9hdG9iaiA9IDEuMjM0NQorICAgIHN0cm9iaiA9ICJhYmNkZSIqMworICAgIGRpY3RvYmogPSB7ImhlbGxvIjpmbG9hdG9iaiwgImdvb2RieWUiOmZsb2F0b2JqLCBmbG9hdG9iajoiaGVsbG8ifQorCisgICAgZGVmIGhlbHBlcjMoc2VsZiwgcnNhbXBsZSwgcmVjdXJzaXZlPUZhbHNlLCBzaW1wbGU9RmFsc2UpOgorICAgICAgICAjd2UgaGF2ZSB0d28gaW5zdGFuY2VzCisgICAgICAgIHNhbXBsZSA9IChyc2FtcGxlLCByc2FtcGxlKQorCisgICAgICAgIG4wID0gQ29sbGVjdE9iamVjdElEcyhzZXQoKSwgc2FtcGxlKQorCisgICAgICAgIHMzID0gbWFyc2hhbC5kdW1wcyhzYW1wbGUsIDMpCisgICAgICAgIG4zID0gQ29sbGVjdE9iamVjdElEcyhzZXQoKSwgbWFyc2hhbC5sb2FkcyhzMykpCisKKyAgICAgICAgI3NhbWUgbnVtYmVyIG9mIGluc3RhbmNlcyBnZW5lcmF0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMywgbjApCisKKyAgICAgICAgaWYgbm90IHJlY3Vyc2l2ZToKKyAgICAgICAgICAgICNjYW4gY29tcGFyZSB3aXRoIHZlcnNpb24gMgorICAgICAgICAgICAgczIgPSBtYXJzaGFsLmR1bXBzKHNhbXBsZSwgMikKKyAgICAgICAgICAgIG4yID0gQ29sbGVjdE9iamVjdElEcyhzZXQoKSwgbWFyc2hhbC5sb2FkcyhzMikpCisgICAgICAgICAgICAjb2xkIGZvcm1hdCBnZW5lcmF0ZWQgbW9yZSBpbnN0YW5jZXMKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihuMiwgbjApCisKKyAgICAgICAgICAgICNpZiBjb21wbGV4IG9iamVjdHMgYXJlIGluIHRoZXJlLCBvbGQgZm9ybWF0IGlzIGxhcmdlcgorICAgICAgICAgICAgaWYgbm90IHNpbXBsZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIobGVuKHMyKSwgbGVuKHMzKSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobGVuKHMyKSwgbGVuKHMzKSkKKworICAgIGRlZiB0ZXN0SW50KHNlbGYpOgorICAgICAgICBzZWxmLmhlbHBlcihzZWxmLmludG9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuaW50b2JqLCBzaW1wbGU9VHJ1ZSkKKworICAgIGRlZiB0ZXN0RmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuaGVscGVyKHNlbGYuZmxvYXRvYmopCisgICAgICAgIHNlbGYuaGVscGVyMyhzZWxmLmZsb2F0b2JqKQorCisgICAgZGVmIHRlc3RTdHIoc2VsZik6CisgICAgICAgIHNlbGYuaGVscGVyKHNlbGYuc3Ryb2JqKQorICAgICAgICBzZWxmLmhlbHBlcjMoc2VsZi5zdHJvYmopCisKKyAgICBkZWYgdGVzdERpY3Qoc2VsZik6CisgICAgICAgIHNlbGYuaGVscGVyKHNlbGYuZGljdG9iaikKKyAgICAgICAgc2VsZi5oZWxwZXIzKHNlbGYuZGljdG9iaikKKworICAgIGRlZiB0ZXN0TW9kdWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oX19maWxlX18sICJyYiIpIGFzIGY6CisgICAgICAgICAgICBjb2RlID0gZi5yZWFkKCkKKyAgICAgICAgaWYgX19maWxlX18uZW5kc3dpdGgoIi5weSIpOgorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoY29kZSwgX19maWxlX18sICJleGVjIikKKyAgICAgICAgc2VsZi5oZWxwZXIoY29kZSkKKyAgICAgICAgc2VsZi5oZWxwZXIzKGNvZGUpCisKKyAgICBkZWYgdGVzdFJlY3Vyc2lvbihzZWxmKToKKyAgICAgICAgZCA9IGRpY3Qoc2VsZi5kaWN0b2JqKQorICAgICAgICBkWyJzZWxmIl0gPSBkCisgICAgICAgIHNlbGYuaGVscGVyMyhkLCByZWN1cnNpdmU9VHJ1ZSkKKyAgICAgICAgbCA9IFtzZWxmLmRpY3RvYmpdCisgICAgICAgIGwuYXBwZW5kKGwpCisgICAgICAgIHNlbGYuaGVscGVyMyhsLCByZWN1cnNpdmU9VHJ1ZSkKKworY2xhc3MgQ29tcGF0aWJpbGl0eVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgX3Rlc3Qoc2VsZiwgdmVyc2lvbik6CisgICAgICAgIHdpdGggb3BlbihfX2ZpbGVfXywgInJiIikgYXMgZjoKKyAgICAgICAgICAgIGNvZGUgPSBmLnJlYWQoKQorICAgICAgICBpZiBfX2ZpbGVfXy5lbmRzd2l0aCgiLnB5Iik6CisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShjb2RlLCBfX2ZpbGVfXywgImV4ZWMiKQorICAgICAgICBkYXRhID0gbWFyc2hhbC5kdW1wcyhjb2RlLCB2ZXJzaW9uKQorICAgICAgICBtYXJzaGFsLmxvYWRzKGRhdGEpCisKKyAgICBkZWYgdGVzdDBUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMCkKKworICAgIGRlZiB0ZXN0MVRvMyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgxKQorCisgICAgZGVmIHRlc3QyVG8zKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KDIpCisKKyAgICBkZWYgdGVzdDNUbzMoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3QoMykKKworY2xhc3MgSW50ZXJuaW5nVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIEhlbHBlck1peGluKToKKyAgICBzdHJvYmogPSAidGhpcyBpcyBhbiBpbnRlcm5lZCBzdHJpbmciCisgICAgc3Ryb2JqID0gc3lzLmludGVybihzdHJvYmopCisKKyAgICBkZWYgdGVzdEludGVybihzZWxmKToKKyAgICAgICAgcyA9IG1hcnNoYWwubG9hZHMobWFyc2hhbC5kdW1wcyhzZWxmLnN0cm9iaikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgc2VsZi5zdHJvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQocyksIGlkKHNlbGYuc3Ryb2JqKSkKKyAgICAgICAgczIgPSBzeXMuaW50ZXJuKHMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaWQoczIpLCBpZChzKSkKKworICAgIGRlZiB0ZXN0Tm9JbnRlcm4oc2VsZik6CisgICAgICAgIHMgPSBtYXJzaGFsLmxvYWRzKG1hcnNoYWwuZHVtcHMoc2VsZi5zdHJvYmosIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMsIHNlbGYuc3Ryb2JqKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMpLCBpZChzZWxmLnN0cm9iaikpCisgICAgICAgIHMyID0gc3lzLmludGVybihzKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGlkKHMyKSwgaWQocykpCisKK0BzdXBwb3J0LmNweXRob25fb25seQorQHVuaXR0ZXN0LnNraXBVbmxlc3MoX3Rlc3RjYXBpLCAncmVxdWlyZXMgX3Rlc3RjYXBpJykKK2NsYXNzIENBUElfVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UsIEhlbHBlck1peGluKToKKworICAgIGRlZiB0ZXN0X3dyaXRlX2xvbmdfdG9fZmlsZShzZWxmKToKKyAgICAgICAgZm9yIHYgaW4gcmFuZ2UobWFyc2hhbC52ZXJzaW9uICsgMSk6CisgICAgICAgICAgICBfdGVzdGNhcGkucHltYXJzaGFsX3dyaXRlX2xvbmdfdG9fZmlsZSgweDEyMzQ1Njc4LCBzdXBwb3J0LlRFU1RGTiwgdikKKyAgICAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJ1x4NzhceDU2XHgzNFx4MTInKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfb2JqZWN0X3RvX2ZpbGUoc2VsZik6CisgICAgICAgIG9iaiA9ICgnXHUyMGFjJywgYidhYmMnLCAxMjMsIDQ1LjYsIDcrOGosICdsb25nIGxpbmUgJyoxMDAwKQorICAgICAgICBmb3IgdiBpbiByYW5nZShtYXJzaGFsLnZlcnNpb24gKyAxKToKKyAgICAgICAgICAgIF90ZXN0Y2FwaS5weW1hcnNoYWxfd3JpdGVfb2JqZWN0X3RvX2ZpbGUob2JqLCBzdXBwb3J0LlRFU1RGTiwgdikKKyAgICAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXJzaGFsLmxvYWRzKGRhdGEpLCBvYmopCisKKyAgICBkZWYgdGVzdF9yZWFkX3Nob3J0X2Zyb21fZmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiJ1x4MzRceDEyeHh4eCcpCisgICAgICAgIHIsIHAgPSBfdGVzdGNhcGkucHltYXJzaGFsX3JlYWRfc2hvcnRfZnJvbV9maWxlKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCAweDEyMzQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgMikKKworICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGInXHgxMicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgorICAgICAgICAgICAgX3Rlc3RjYXBpLnB5bWFyc2hhbF9yZWFkX3Nob3J0X2Zyb21fZmlsZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc3VwcG9ydC51bmxpbmsoc3VwcG9ydC5URVNURk4pCisKKyAgICBkZWYgdGVzdF9yZWFkX2xvbmdfZnJvbV9maWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGInXHg3OFx4NTZceDM0XHgxMnh4eHgnKQorICAgICAgICByLCBwID0gX3Rlc3RjYXBpLnB5bWFyc2hhbF9yZWFkX2xvbmdfZnJvbV9maWxlKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCAweDEyMzQ1Njc4KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIDQpCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiJ1x4NTZceDM0XHgxMicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgorICAgICAgICAgICAgX3Rlc3RjYXBpLnB5bWFyc2hhbF9yZWFkX2xvbmdfZnJvbV9maWxlKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X3JlYWRfbGFzdF9vYmplY3RfZnJvbV9maWxlKHNlbGYpOgorICAgICAgICBvYmogPSAoJ1x1MjBhYycsIGInYWJjJywgMTIzLCA0NS42LCA3KzhqKQorICAgICAgICBmb3IgdiBpbiByYW5nZShtYXJzaGFsLnZlcnNpb24gKyAxKToKKyAgICAgICAgICAgIGRhdGEgPSBtYXJzaGFsLmR1bXBzKG9iaiwgdikKKyAgICAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGEgKyBiJ3h4eHgnKQorICAgICAgICAgICAgciwgcCA9IF90ZXN0Y2FwaS5weW1hcnNoYWxfcmVhZF9sYXN0X29iamVjdF9mcm9tX2ZpbGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwociwgb2JqKQorCisgICAgICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhWzoxXSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRU9GRXJyb3IpOgorICAgICAgICAgICAgICAgIF90ZXN0Y2FwaS5weW1hcnNoYWxfcmVhZF9sYXN0X29iamVjdF9mcm9tX2ZpbGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgIGRlZiB0ZXN0X3JlYWRfb2JqZWN0X2Zyb21fZmlsZShzZWxmKToKKyAgICAgICAgb2JqID0gKCdcdTIwYWMnLCBiJ2FiYycsIDEyMywgNDUuNiwgNys4aikKKyAgICAgICAgZm9yIHYgaW4gcmFuZ2UobWFyc2hhbC52ZXJzaW9uICsgMSk6CisgICAgICAgICAgICBkYXRhID0gbWFyc2hhbC5kdW1wcyhvYmosIHYpCisgICAgICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShkYXRhICsgYid4eHh4JykKKyAgICAgICAgICAgIHIsIHAgPSBfdGVzdGNhcGkucHltYXJzaGFsX3JlYWRfb2JqZWN0X2Zyb21fZmlsZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLCBvYmopCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIGxlbihkYXRhKSkKKworICAgICAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YVs6MV0pCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yKToKKyAgICAgICAgICAgICAgICBfdGVzdGNhcGkucHltYXJzaGFsX3JlYWRfb2JqZWN0X2Zyb21fZmlsZShzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeWlvLnB5CmluZGV4IDRmYTlhMTkuLjdjZTk1YjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfbWVtb3J5aW8ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tZW1vcnlpby5weQpAQCAtMzY2LDEzICszNjYsMTQgQEAKICAgICAgICAgIyB0aGUgbW9kdWxlLWxldmVsLgogICAgICAgICBpbXBvcnQgX19tYWluX18KICAgICAgICAgUGlja2xlVGVzdE1lbUlPLl9fbW9kdWxlX18gPSAnX19tYWluX18nCisgICAgICAgIFBpY2tsZVRlc3RNZW1JTy5fX3F1YWxuYW1lX18gPSBQaWNrbGVUZXN0TWVtSU8uX19uYW1lX18KICAgICAgICAgX19tYWluX18uUGlja2xlVGVzdE1lbUlPID0gUGlja2xlVGVzdE1lbUlPCiAgICAgICAgIHN1Ym1lbWlvID0gUGlja2xlVGVzdE1lbUlPKGJ1ZiwgODApCiAgICAgICAgIHN1Ym1lbWlvLnNlZWsoMikKIAogICAgICAgICAjIFdlIG9ubHkgc3VwcG9ydCBwaWNrbGUgcHJvdG9jb2wgMiBhbmQgb253YXJkIHNpbmNlIHdlIHVzZSBleHRlbmRlZAogICAgICAgICAjIF9fcmVkdWNlX18gQVBJIG9mIFBFUCAzMDcgdG8gcHJvdmlkZSBwaWNrbGluZyBzdXBwb3J0LgotICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UoMiwgcGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKICAgICAgICAgICAgIGZvciBvYmogaW4gKG1lbWlvLCBzdWJtZW1pbyk6CiAgICAgICAgICAgICAgICAgb2JqMiA9IHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMob2JqLCBwcm90b2NvbD1wcm90bykpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmouZ2V0dmFsdWUoKSwgb2JqMi5nZXR2YWx1ZSgpKQpAQCAtMzk3LDE0ICszOTgsMTkgQEAKICAgICAgICAgIyByYWlzZXMgYSBCdWZmZXJFcnJvci4KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQnVmZmVyRXJyb3IsIG1lbWlvLndyaXRlLCBiJ3gnICogMTAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhCdWZmZXJFcnJvciwgbWVtaW8udHJ1bmNhdGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEJ1ZmZlckVycm9yLCBtZW1pby5jbG9zZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtZW1pby5jbG9zZWQpCiAgICAgICAgICMgTXV0YXRpbmcgdGhlIGJ1ZmZlciB1cGRhdGVzIHRoZSBCeXRlc0lPCiAgICAgICAgIGJ1ZlszOjZdID0gYiJhYmMiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnl0ZXMoYnVmKSwgYiIxMjNhYmM3ODkwIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZW1pby5nZXR2YWx1ZSgpLCBiIjEyM2FiYzc4OTAiKQotICAgICAgICAjIEFmdGVyIHRoZSBidWZmZXIgZ2V0cyByZWxlYXNlZCwgd2UgY2FuIHJlc2l6ZSB0aGUgQnl0ZXNJTyBhZ2FpbgorICAgICAgICAjIEFmdGVyIHRoZSBidWZmZXIgZ2V0cyByZWxlYXNlZCwgd2UgY2FuIHJlc2l6ZSBhbmQgY2xvc2UgdGhlIEJ5dGVzSU8KKyAgICAgICAgIyBhZ2FpbgogICAgICAgICBkZWwgYnVmCiAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCiAgICAgICAgIG1lbWlvLnRydW5jYXRlKCkKKyAgICAgICAgbWVtaW8uY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5nZXRidWZmZXIpCiAKIAogY2xhc3MgUHlCeXRlc0lPVGVzdChNZW1vcnlUZXN0TWl4aW4sIE1lbW9yeVNlZWtUZXN0TWl4aW4sCkBAIC01MjAsMTIgKzUyNiwxMiBAQAogICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3NlZWsoc2VsZik6CiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgMywgMSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgbWVtaW8uc2VlaywgLTMsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsIG1lbWlvLnNlZWssIC0xLCAyKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAxLCAxKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBtZW1pby5zZWVrLCAxLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAtMSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgMywgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbWVtaW8uc2VlaywgLTMsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1lbWlvLnNlZWssIC0xLCAyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAxLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBtZW1pby5zZWVrLCAxLCAyKQogCiAgICAgZGVmIHRlc3RfdGV4dGlvX3Byb3BlcnRpZXMoc2VsZik6CiAgICAgICAgIG1lbWlvID0gc2VsZi5pb2NsYXNzKCkKQEAgLTY4Nyw3ICs2OTMsOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdGF0ZSksIDMpCiAgICAgICAgIGJ5dGVhcnJheShzdGF0ZVswXSkgIyBDaGVjayBpZiBzdGF0ZVswXSBzdXBwb3J0cyB0aGUgYnVmZmVyIGludGVyZmFjZS4KICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0YXRlWzFdLCBpbnQpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHN0YXRlWzJdLCBkaWN0KSBvciBzdGF0ZVsyXSBpcyBOb25lKQorICAgICAgICBpZiBzdGF0ZVsyXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsyXSwgZGljdCkKICAgICAgICAgbWVtaW8uY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBtZW1pby5fX2dldHN0YXRlX18pCiAKQEAgLTc0Myw3ICs3NTAsOCBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbMF0sIHN0cikKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN0YXRlWzFdLCBzdHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdGF0ZVsyXSwgaW50KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzdGF0ZVszXSwgZGljdCkgb3Igc3RhdGVbM10gaXMgTm9uZSkKKyAgICAgICAgaWYgc3RhdGVbM10gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RhdGVbM10sIGRpY3QpCiAgICAgICAgIG1lbWlvLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgbWVtaW8uX19nZXRzdGF0ZV9fKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkgYi9MaWIvdGVzdC90ZXN0X21lbW9yeXZpZXcucHkKaW5kZXggYmYwZWFhZC4uNGJjMzEzMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tZW1vcnl2aWV3LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWVtb3J5dmlldy5weQpAQCAtMzUyLDYgKzM1MiwzNiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhMWzBdLCBiKQogCisgICAgZGVmIHRlc3RfcmV2ZXJzZWQoc2VsZik6CisgICAgICAgIGZvciB0cCBpbiBzZWxmLl90eXBlczoKKyAgICAgICAgICAgIGIgPSB0cChzZWxmLl9zb3VyY2UpCisgICAgICAgICAgICBtID0gc2VsZi5fdmlldyhiKQorICAgICAgICAgICAgYXNsaXN0ID0gbGlzdChyZXZlcnNlZChtLnRvbGlzdCgpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChtKSksIGFzbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChtKSksIGxpc3QobVs6Oi0xXSkpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTIyNjY4KHNlbGYpOgorICAgICAgICBhID0gYXJyYXkuYXJyYXkoJ0gnLCBbMjU2LCAyNTYsIDI1NiwgMjU2XSkKKyAgICAgICAgeCA9IG1lbW9yeXZpZXcoYSkKKyAgICAgICAgbSA9IHguY2FzdCgnQicpCisgICAgICAgIGIgPSBtLmNhc3QoJ0gnKQorICAgICAgICBjID0gYlswOjJdCisgICAgICAgIGQgPSBtZW1vcnl2aWV3KGIpCisKKyAgICAgICAgZGVsIGIKKyAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjWzBdLCAyNTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFswXSwgMjU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMuZm9ybWF0LCAiSCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC5mb3JtYXQsICJIIikKKyAKKyAgICAgICAgXyA9IG0uY2FzdCgnSScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY1swXSwgMjU2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbMF0sIDI1NikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjLmZvcm1hdCwgIkgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGQuZm9ybWF0LCAiSCIpCisKKwogIyBWYXJpYXRpb25zIG9uIHNvdXJjZSBvYmplY3RzIGZvciB0aGUgYnVmZmVyOiBieXRlcy1saWtlIG9iamVjdHMsIHRoZW4gYXJyYXlzCiAjIHdpdGggaXRlbXNpemUgPiAxLgogIyBOT1RFOiBzdXBwb3J0IGZvciBtdWx0aS1kaW1lbnNpb25hbCBvYmplY3RzIGlzIHVuaW1wbGVtZW50ZWQuCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkgYi9MaWIvdGVzdC90ZXN0X21pbmlkb20ucHkKaW5kZXggMTEzYzdmZC4uZjY0ZjQzOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9taW5pZG9tLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbWluaWRvbS5weQpAQCAtMSw1ICsxLDYgQEAKICMgdGVzdCBmb3IgeG1sLmRvbS5taW5pZG9tCiAKK2ltcG9ydCBjb3B5CiBpbXBvcnQgcGlja2xlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBmaW5kZmlsZQogaW1wb3J0IHVuaXR0ZXN0CkBAIC0xMSw2ICsxMiwxMyBAQAogCiAKIHRzdGZpbGUgPSBmaW5kZmlsZSgidGVzdC54bWwiLCBzdWJkaXI9InhtbHRlc3RkYXRhIikKK3NhbXBsZSA9ICgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0ndXMtYXNjaWknPz5cbiIKKyAgICAgICAgICAiPCFET0NUWVBFIGRvYyBQVUJMSUMgJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9wdWJsaWMnIgorICAgICAgICAgICIgJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9zeXN0ZW0nIFtcbiIKKyAgICAgICAgICAiICA8IUVMRU1FTlQgZSBFTVBUWT5cbiIKKyAgICAgICAgICAiICA8IUVOVElUWSBlbnQgU1lTVEVNICdodHRwOi8veG1sLnB5dGhvbi5vcmcvZW50aXR5Jz5cbiIKKyAgICAgICAgICAiXT48ZG9jIGF0dHI9J3ZhbHVlJz4gdGV4dFxuIgorICAgICAgICAgICI8P3BpIHNhbXBsZT8+IDwhLS0gY29tbWVudCAtLT4gPGUvPiA8L2RvYz4iKQogCiAjIFRoZSB0ZXN0cyBvZiBEb2N1bWVudFR5cGUgaW1wb3J0aW5nIHVzZSB0aGVzZSBoZWxwZXJzIHRvIGNvbnN0cnVjdAogIyB0aGUgZG9jdW1lbnRzIHRvIHdvcmsgd2l0aCwgc2luY2Ugbm90IGFsbCBET00gYnVpbGRlcnMgYWN0dWFsbHkKQEAgLTQ5LDggKzU3LDE0IEBACiAgICAgICAgIHQgPSBub2RlLndob2xlVGV4dAogICAgICAgICBzZWxmLmNvbmZpcm0odCA9PSBzLCAibG9va2luZyBmb3IgJXIsIGZvdW5kICVyIiAlIChzLCB0KSkKIAotICAgIGRlZiB0ZXN0UGFyc2VGcm9tRmlsZShzZWxmKToKLSAgICAgICAgd2l0aCBvcGVuKHRzdGZpbGUpIGFzIGZpbGU6CisgICAgZGVmIHRlc3RQYXJzZUZyb21CaW5hcnlGaWxlKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4odHN0ZmlsZSwgJ3JiJykgYXMgZmlsZToKKyAgICAgICAgICAgIGRvbSA9IHBhcnNlKGZpbGUpCisgICAgICAgICAgICBkb20udW5saW5rKCkKKyAgICAgICAgICAgIHNlbGYuY29uZmlybShpc2luc3RhbmNlKGRvbSwgRG9jdW1lbnQpKQorCisgICAgZGVmIHRlc3RQYXJzZUZyb21UZXh0RmlsZShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHRzdGZpbGUsICdyJywgZW5jb2Rpbmc9J2lzby04ODU5LTEnKSBhcyBmaWxlOgogICAgICAgICAgICAgZG9tID0gcGFyc2UoZmlsZSkKICAgICAgICAgICAgIGRvbS51bmxpbmsoKQogICAgICAgICAgICAgc2VsZi5jb25maXJtKGlzaW5zdGFuY2UoZG9tLCBEb2N1bWVudCkpCkBAIC0zNjAsNiArMzc0LDE1IEBACiAgICAgICAgICAgICAgICAgYW5kIGVsLmdldEF0dHJpYnV0ZSgic3BhbTIiKSA9PSAiYmFtMiIpCiAgICAgICAgIGRvbS51bmxpbmsoKQogCisgICAgZGVmIHRlc3RHZXRBdHRyTGlzdChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHRlc3RHZXRBdHRyVmFsdWVzKHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdEdldEF0dHJMZW5ndGgoc2VsZik6CisgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0R2V0QXR0cmlidXRlKHNlbGYpOgogICAgICAgICBkb20gPSBEb2N1bWVudCgpCiAgICAgICAgIGNoaWxkID0gZG9tLmFwcGVuZENoaWxkKApAQCAtMzgwLDYgKzQwMyw4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hpbGQyLmdldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnB5dGhvbi5vcmciLCAibWlzc2luZyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICcnKQogCisgICAgZGVmIHRlc3RHZXRBdHRyaWJ1dGVOb2RlKHNlbGYpOiBwYXNzCisKICAgICBkZWYgdGVzdEdldEVsZW1lbnRzQnlUYWdOYW1lTlMoc2VsZik6CiAgICAgICAgIGQ9IiIiPGZvbyB4bWxuczptaW5pZG9tPSdodHRwOi8vcHl4bWwuc2YubmV0L21pbmlkb20nPgogICAgICAgICA8bWluaWRvbTpteWVsZW0vPgpAQCAtNDUwLDYgKzQ3NSw4IEBACiAgICAgICAgIHNlbGYuY29uZmlybShzdHIobm9kZSkgPT0gcmVwcihub2RlKSkKICAgICAgICAgZG9tLnVubGluaygpCiAKKyAgICBkZWYgdGVzdFRleHROb2RlUmVwcihzZWxmKTogcGFzcworCiAgICAgZGVmIHRlc3RXcml0ZVhNTChzZWxmKToKICAgICAgICAgc3RyID0gJzw/eG1sIHZlcnNpb249IjEuMCIgPz48YSBiPSJjIi8+JwogICAgICAgICBkb20gPSBwYXJzZVN0cmluZyhzdHIpCkBAIC01MTMsNiArNTQwLDE0IEBACiAgICAgICAgICAgICAgICAgYW5kIHBpLmxvY2FsTmFtZSBpcyBOb25lCiAgICAgICAgICAgICAgICAgYW5kIHBpLm5hbWVzcGFjZVVSSSA9PSB4bWwuZG9tLkVNUFRZX05BTUVTUEFDRSkKIAorICAgIGRlZiB0ZXN0UHJvY2Vzc2luZ0luc3RydWN0aW9uUmVwcihzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RUZXh0UmVwcihzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RXcml0ZVRleHQoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0RG9jdW1lbnRFbGVtZW50KHNlbGYpOiBwYXNzCisKICAgICBkZWYgdGVzdFRvb01hbnlEb2N1bWVudEVsZW1lbnRzKHNlbGYpOgogICAgICAgICBkb2MgPSBwYXJzZVN0cmluZygiPGRvYy8+IikKICAgICAgICAgZWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCJleHRyYSIpCkBAIC01MjEsNiArNTU2LDI2IEBACiAgICAgICAgIGVsZW0udW5saW5rKCkKICAgICAgICAgZG9jLnVubGluaygpCiAKKyAgICBkZWYgdGVzdENyZWF0ZUVsZW1lbnROUyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RDcmVhdGVBdHRyaWJ1dGVOUyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZShzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZVN0cmluZyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RDb21tZW50KHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0SXRlbShzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEl0ZW1zKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0SXRlbU5TKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEF0dHJMaXN0S2V5cyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdEtleXNOUyhzZWxmKTogcGFzcworCiAgICAgZGVmIHRlc3RSZW1vdmVOYW1lZEl0ZW0oc2VsZik6CiAgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8ZG9jIGE9JycvPiIpCiAgICAgICAgIGUgPSBkb2MuZG9jdW1lbnRFbGVtZW50CkBAIC01NDAsNiArNTk1LDMwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbC5kb20uTm90Rm91bmRFcnIsIGF0dHJzLnJlbW92ZU5hbWVkSXRlbU5TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3htbC5weXRob24ub3JnLyIsICJiIikKIAorICAgIGRlZiB0ZXN0QXR0ckxpc3RWYWx1ZXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RMZW5ndGgoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0QXR0ckxpc3RfX2dldGl0ZW1fXyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RBdHRyTGlzdF9fc2V0aXRlbV9fKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFNldEF0dHJWYWx1ZWFuZE5vZGVWYWx1ZShzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RQYXJzZUVsZW1lbnQoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VBdHRyaWJ1dGVzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlRWxlbWVudE5hbWVzcGFjZXMoc2VsZik6IHBhc3MKKworICAgIGRlZiB0ZXN0UGFyc2VBdHRyaWJ1dGVOYW1lc3BhY2VzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdFBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9ucyhzZWxmKTogcGFzcworCisgICAgZGVmIHRlc3RDaGlsZE5vZGVzKHNlbGYpOiBwYXNzCisKKyAgICBkZWYgdGVzdEZpcnN0Q2hpbGQoc2VsZik6IHBhc3MKKwogICAgIGRlZiB0ZXN0SGFzQ2hpbGROb2RlcyhzZWxmKToKICAgICAgICAgZG9tID0gcGFyc2VTdHJpbmcoIjxkb2M+PGZvby8+PC9kb2M+IikKICAgICAgICAgZG9jID0gZG9tLmRvY3VtZW50RWxlbWVudApAQCAtMTM5NSw1MiArMTQ3NCw1NSBAQAogICAgICAgICBzZWxmLmNvbmZpcm0oZS5pc1NhbWVOb2RlKGRvYy5nZXRFbGVtZW50QnlJZCgidyIpKQogICAgICAgICAgICAgICAgIGFuZCBhMi5pc0lkKQogCi0gICAgZGVmIHRlc3RQaWNrbGVkRG9jdW1lbnQoc2VsZik6Ci0gICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSd1cy1hc2NpaSc/PlxuIgotICAgICAgICAgICAgICAgICAgICAiPCFET0NUWVBFIGRvYyBQVUJMSUMgJ2h0dHA6Ly94bWwucHl0aG9uLm9yZy9wdWJsaWMnIgotICAgICAgICAgICAgICAgICAgICAiICdodHRwOi8veG1sLnB5dGhvbi5vcmcvc3lzdGVtJyBbXG4iCi0gICAgICAgICAgICAgICAgICAgICIgIDwhRUxFTUVOVCBlIEVNUFRZPlxuIgotICAgICAgICAgICAgICAgICAgICAiICA8IUVOVElUWSBlbnQgU1lTVEVNICdodHRwOi8veG1sLnB5dGhvbi5vcmcvZW50aXR5Jz5cbiIKLSAgICAgICAgICAgICAgICAgICAgIl0+PGRvYyBhdHRyPSd2YWx1ZSc+IHRleHRcbiIKLSAgICAgICAgICAgICAgICAgICAgIjw/cGkgc2FtcGxlPz4gPCEtLSBjb21tZW50IC0tPiA8ZS8+IDwvZG9jPiIpCi0gICAgICAgIHMgPSBwaWNrbGUuZHVtcHMoZG9jKQotICAgICAgICBkb2MyID0gcGlja2xlLmxvYWRzKHMpCisgICAgZGVmIGFzc2VydF9yZWN1cnNpdmVfZXF1YWwoc2VsZiwgZG9jLCBkb2MyKToKICAgICAgICAgc3RhY2sgPSBbKGRvYywgZG9jMildCiAgICAgICAgIHdoaWxlIHN0YWNrOgogICAgICAgICAgICAgbjEsIG4yID0gc3RhY2sucG9wKCkKLSAgICAgICAgICAgIHNlbGYuY29uZmlybShuMS5ub2RlVHlwZSA9PSBuMi5ub2RlVHlwZQotICAgICAgICAgICAgICAgICAgICBhbmQgbGVuKG4xLmNoaWxkTm9kZXMpID09IGxlbihuMi5jaGlsZE5vZGVzKQotICAgICAgICAgICAgICAgICAgICBhbmQgbjEubm9kZU5hbWUgPT0gbjIubm9kZU5hbWUKLSAgICAgICAgICAgICAgICAgICAgYW5kIG5vdCBuMS5pc1NhbWVOb2RlKG4yKQotICAgICAgICAgICAgICAgICAgICBhbmQgbm90IG4yLmlzU2FtZU5vZGUobjEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5ub2RlVHlwZSwgbjIubm9kZVR5cGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuMS5jaGlsZE5vZGVzKSwgbGVuKG4yLmNoaWxkTm9kZXMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuMS5ub2RlTmFtZSwgbjIubm9kZU5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG4xLmlzU2FtZU5vZGUobjIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShuMi5pc1NhbWVOb2RlKG4xKSkKICAgICAgICAgICAgIGlmIG4xLm5vZGVUeXBlID09IE5vZGUuRE9DVU1FTlRfVFlQRV9OT0RFOgogICAgICAgICAgICAgICAgIGxlbihuMS5lbnRpdGllcykKICAgICAgICAgICAgICAgICBsZW4objIuZW50aXRpZXMpCiAgICAgICAgICAgICAgICAgbGVuKG4xLm5vdGF0aW9ucykKICAgICAgICAgICAgICAgICBsZW4objIubm90YXRpb25zKQotICAgICAgICAgICAgICAgIHNlbGYuY29uZmlybShsZW4objEuZW50aXRpZXMpID09IGxlbihuMi5lbnRpdGllcykKLSAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBsZW4objEubm90YXRpb25zKSA9PSBsZW4objIubm90YXRpb25zKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihuMS5lbnRpdGllcyksIGxlbihuMi5lbnRpdGllcykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4objEubm90YXRpb25zKSwgbGVuKG4yLm5vdGF0aW9ucykpCiAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKG4xLm5vdGF0aW9ucykpOgogICAgICAgICAgICAgICAgICAgICAjIFhYWCB0aGlzIGxvb3AgYm9keSBkb2Vzbid0IHNlZW0gdG8gYmUgZXhlY3V0ZWQ/CiAgICAgICAgICAgICAgICAgICAgIG5vMSA9IG4xLm5vdGF0aW9ucy5pdGVtKGkpCiAgICAgICAgICAgICAgICAgICAgIG5vMiA9IG4xLm5vdGF0aW9ucy5pdGVtKGkpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlybShubzEubmFtZSA9PSBubzIubmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBubzEucHVibGljSWQgPT0gbm8yLnB1YmxpY0lkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIG5vMS5zeXN0ZW1JZCA9PSBubzIuc3lzdGVtSWQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm8xLm5hbWUsIG5vMi5uYW1lKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vMS5wdWJsaWNJZCwgbm8yLnB1YmxpY0lkKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vMS5zeXN0ZW1JZCwgbm8yLnN5c3RlbUlkKQogICAgICAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoKG5vMSwgbm8yKSkKICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4objEuZW50aXRpZXMpKToKICAgICAgICAgICAgICAgICAgICAgZTEgPSBuMS5lbnRpdGllcy5pdGVtKGkpCiAgICAgICAgICAgICAgICAgICAgIGUyID0gbjIuZW50aXRpZXMuaXRlbShpKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpcm0oZTEubm90YXRpb25OYW1lID09IGUyLm5vdGF0aW9uTmFtZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlMS5wdWJsaWNJZCA9PSBlMi5wdWJsaWNJZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBlMS5zeXN0ZW1JZCA9PSBlMi5zeXN0ZW1JZCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5ub3RhdGlvbk5hbWUsIGUyLm5vdGF0aW9uTmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5wdWJsaWNJZCwgZTIucHVibGljSWQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTEuc3lzdGVtSWQsIGUyLnN5c3RlbUlkKQogICAgICAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoKGUxLCBlMikpCiAgICAgICAgICAgICBpZiBuMS5ub2RlVHlwZSAhPSBOb2RlLkRPQ1VNRU5UX05PREU6Ci0gICAgICAgICAgICAgICAgc2VsZi5jb25maXJtKG4xLm93bmVyRG9jdW1lbnQuaXNTYW1lTm9kZShkb2MpCi0gICAgICAgICAgICAgICAgICAgICAgICBhbmQgbjIub3duZXJEb2N1bWVudC5pc1NhbWVOb2RlKGRvYzIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShuMS5vd25lckRvY3VtZW50LmlzU2FtZU5vZGUoZG9jKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobjIub3duZXJEb2N1bWVudC5pc1NhbWVOb2RlKGRvYzIpKQogICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKG4xLmNoaWxkTm9kZXMpKToKICAgICAgICAgICAgICAgICBzdGFjay5hcHBlbmQoKG4xLmNoaWxkTm9kZXNbaV0sIG4yLmNoaWxkTm9kZXNbaV0pKQogCisgICAgZGVmIHRlc3RQaWNrbGVkRG9jdW1lbnQoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKHNhbXBsZSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDIsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBzID0gcGlja2xlLmR1bXBzKGRvYywgcHJvdG8pCisgICAgICAgICAgICBkb2MyID0gcGlja2xlLmxvYWRzKHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydF9yZWN1cnNpdmVfZXF1YWwoZG9jLCBkb2MyKQorCisgICAgZGVmIHRlc3REZWVwY29waWVkRG9jdW1lbnQoc2VsZik6CisgICAgICAgIGRvYyA9IHBhcnNlU3RyaW5nKHNhbXBsZSkKKyAgICAgICAgZG9jMiA9IGNvcHkuZGVlcGNvcHkoZG9jKQorICAgICAgICBzZWxmLmFzc2VydF9yZWN1cnNpdmVfZXF1YWwoZG9jLCBkb2MyKQorCiAgICAgZGVmIHRlc3RTZXJpYWxpemVDb21tZW50Tm9kZVdpdGhEb3VibGVIeXBoZW4oc2VsZik6CiAgICAgICAgIGRvYyA9IGNyZWF0ZV9kb2Nfd2l0aG91dF9kb2N0eXBlKCkKICAgICAgICAgZG9jLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVDb21tZW50KCJmb28tLWJhciIpKQpAQCAtMTQ1Myw2ICsxNTM1LDEwIEBACiAgICAgICAgIGRvYzIgPSBwYXJzZVN0cmluZyhkb2MudG94bWwoKSkKICAgICAgICAgc2VsZi5jb25maXJtKGRvYzIubmFtZXNwYWNlVVJJID09IHhtbC5kb20uRU1QVFlfTkFNRVNQQUNFKQogCisgICAgZGVmIHRlc3RFeGNlcHRpb25PblNwYWNlc0luWE1MTlNWYWx1ZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFZhbHVlRXJyb3IsICdVbnN1cHBvcnRlZCBzeW50YXgnKToKKyAgICAgICAgICAgIHBhcnNlU3RyaW5nKCc8ZWxlbWVudCB4bWxuczphYmM9Imh0dHA6YWJjLmNvbS9kZSBmIGcvaGkvaiBrIj48YWJjOmZvbyAvPjwvZWxlbWVudD4nKQorCiAgICAgZGVmIHRlc3REb2NSZW1vdmVDaGlsZChzZWxmKToKICAgICAgICAgZG9jID0gcGFyc2UodHN0ZmlsZSkKICAgICAgICAgdGl0bGVfdGFnID0gZG9jLmRvY3VtZW50RWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiVElUTEUiKVswXQpAQCAtMTQ2Miw2ICsxNTQ4LDEzIEBACiAgICAgICAgIG51bV9jaGlsZHJlbl9hZnRlciA9IGxlbihkb2MuY2hpbGROb2RlcykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG51bV9jaGlsZHJlbl9hZnRlciA9PSBudW1fY2hpbGRyZW5fYmVmb3JlIC0gMSkKIAorICAgIGRlZiB0ZXN0UHJvY2Vzc2luZ0luc3RydWN0aW9uTmFtZUVycm9yKHNlbGYpOgorICAgICAgICAjIHdyb25nIHZhcmlhYmxlIGluIC5ub2RlVmFsdWUgcHJvcGVydHkgd2lsbAorICAgICAgICAjIGxlYWQgdG8gIk5hbWVFcnJvcjogbmFtZSAnZGF0YScgaXMgbm90IGRlZmluZWQiCisgICAgICAgIGRvYyA9IHBhcnNlKHRzdGZpbGUpCisgICAgICAgIHBpID0gZG9jLmNyZWF0ZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigieSIsICJ6IikKKyAgICAgICAgcGkubm9kZVZhbHVlID0gImNyYXNoIgorCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KE1pbmlkb21UZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X21tYXAucHkgYi9MaWIvdGVzdC90ZXN0X21tYXAucHkKaW5kZXggODk5ZGY4ZC4uYWQ5M2E1OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tbWFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbW1hcC5weQpAQCAtMSwxMSArMSwxMiBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZSwgdW5saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlcywgXzJHLCBfNEcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVzLCBfMkcsIF80RywgZ2NfY29sbGVjdCwgY3B5dGhvbl9vbmx5KQogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHN5cworaW1wb3J0IHdlYWtyZWYKIAogIyBTa2lwIHRlc3QgaWYgd2UgY2FuJ3QgaW1wb3J0IG1tYXAuCiBtbWFwID0gaW1wb3J0X21vZHVsZSgnbW1hcCcpCkBAIC0yNDUsNyArMjQ2LDcgQEAKIAogICAgIGRlZiB0ZXN0X2JhZF9maWxlX2Rlc2Moc2VsZik6CiAgICAgICAgICMgVHJ5IG9wZW5pbmcgYSBiYWQgZmlsZSBkZXNjcmlwdG9yLi4uCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1tYXAuZXJyb3IsIG1tYXAubW1hcCwgLTIsIDQwOTYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1tYXAubW1hcCwgLTIsIDQwOTYpCiAKICAgICBkZWYgdGVzdF90b3VnaGVyX2ZpbmQoc2VsZik6CiAgICAgICAgICMgRG8gYSB0b3VnaGVyIC5maW5kKCkgdGVzdC4gIFNGIGJ1ZyA1MTU5NDMgcG9pbnRlZCBvdXQgdGhhdCwgaW4gMi4yLApAQCAtNjM4LDYgKzYzOSwxNSBAQAogICAgICAgICBtMi5jbG9zZSgpCiAgICAgICAgIG0xLmNsb3NlKCkKIAorICAgIEBjcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdudCcsICdyZXF1aXJlcyBXaW5kb3dzJykKKyAgICBkZWYgdGVzdF9zaXplb2Yoc2VsZik6CisgICAgICAgIG0xID0gbW1hcC5tbWFwKC0xLCAxMDApCisgICAgICAgIHRhZ25hbWUgPSAiZm9vIgorICAgICAgICBtMiA9IG1tYXAubW1hcCgtMSwgMTAwLCB0YWduYW1lPXRhZ25hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLmdldHNpemVvZihtMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmdldHNpemVvZihtMSkgKyBsZW4odGFnbmFtZSkgKyAxKQorCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAnbnQnLCAncmVxdWlyZXMgV2luZG93cycpCiAgICAgZGVmIHRlc3RfY3Jhc2hlcl9vbl93aW5kb3dzKHNlbGYpOgogICAgICAgICAjIFNob3VsZCBub3QgY3Jhc2ggKElzc3VlIDE3MzM5ODYpCkBAIC02NTUsNyArNjY1LDcgQEAKICAgICAgICAgbSA9IG1tYXAubW1hcChmLmZpbGVubygpLCAwKQogICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgbS5yZXNpemUoMCkgIyB3aWxsIHJhaXNlIFdpbmRvd3NFcnJvcgorICAgICAgICAgICAgbS5yZXNpemUoMCkgIyB3aWxsIHJhaXNlIE9TRXJyb3IKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwogICAgICAgICB0cnk6CkBAIC02NzEsNyArNjgxLDcgQEAKICAgICAgICAgIyBwYXJhbWV0ZXJzIHRvIF9nZXRfb3NmaGFuZGxlLgogICAgICAgICBzID0gc29ja2V0LnNvY2tldCgpCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMobW1hcC5lcnJvcik6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIG0gPSBtbWFwLm1tYXAocy5maWxlbm8oKSwgMTApCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBzLmNsb3NlKCkKQEAgLTY4MiwxNCArNjkyLDIzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmNsb3NlZCkKIAogICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcl9leGNlcHRpb24oc2VsZik6Ci0gICAgICAgICMgVGVzdCB0aGF0IHRoZSBJT0Vycm9yIGdldHMgcGFzc2VkIHRocm91Z2gKKyAgICAgICAgIyBUZXN0IHRoYXQgdGhlIE9TRXJyb3IgZ2V0cyBwYXNzZWQgdGhyb3VnaAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbikgYXMgZXhjOgogICAgICAgICAgICAgd2l0aCBtbWFwLm1tYXAoLTEsIDEwKSBhcyBtOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIElPRXJyb3IsCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBleGNlcHRpb24gcmFpc2VkIGluIGNvbnRleHQgbWFuYWdlciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtLmNsb3NlZCwgImNvbnRleHQgbWFuYWdlciBmYWlsZWQiKQogCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgIyBDaGVjayBtbWFwIG9iamVjdHMgYXJlIHdlYWtyZWZhYmxlCisgICAgICAgIG1tID0gbW1hcC5tbWFwKC0xLCAxNikKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihtbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBtbSkKKyAgICAgICAgZGVsIG1tCisgICAgICAgIGdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKIGNsYXNzIExhcmdlTW1hcFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTcwNyw4ICs3MjYsMTEgQEAKICAgICAgICAgICAgIGYuc2VlayhudW1femVyb2VzKQogICAgICAgICAgICAgZi53cml0ZSh0YWlsKQogICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgT3ZlcmZsb3dFcnJvcik6Ci0gICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBPdmVyZmxvd0Vycm9yKToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBmLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImZpbGVzeXN0ZW0gZG9lcyBub3QgaGF2ZSBsYXJnZWZpbGUgc3VwcG9ydCIpCiAgICAgICAgIHJldHVybiBmCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbW9kdWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKaW5kZXggZTVhMjUyNS4uMTIzMDI5MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9tb2R1bGUucHkKQEAgLTEsNiArMSw4IEBACiAjIFRlc3QgdGhlIG1vZHVsZSB0eXBlCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB3ZWFrcmVmCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBnY19jb2xsZWN0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCiBpbXBvcnQgc3lzCiBNb2R1bGVUeXBlID0gdHlwZShzeXMpCkBAIC0zMyw3ICszNSwxMiBAQAogICAgICAgICBmb28gPSBNb2R1bGVUeXBlKCJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZGljdF9fLCB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogTm9uZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fbG9hZGVyX18sIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoZm9vLl9fcGFja2FnZV9fLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzKGZvby5fX3NwZWNfXywgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X2FzY2lpX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBBU0NJSSBkb2NzdHJpbmcKQEAgLTQxLDcgKzQ4LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19uYW1lX18sICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MifSkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2xvYWRlcl9fIjogTm9uZSwgIl9fcGFja2FnZV9fIjogTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fc3BlY19fIjogTm9uZX0pCiAKICAgICBkZWYgdGVzdF91bmljb2RlX2RvY3N0cmluZyhzZWxmKToKICAgICAgICAgIyBVbmljb2RlIGRvY3N0cmluZwpAQCAtNDksNyArNTgsOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX25hbWVfXywgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLl9fZG9jX18sICJmb29kb2NcdTEyMzQiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RpY3RfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICB7Il9fbmFtZV9fIjogImZvbyIsICJfX2RvY19fIjogImZvb2RvY1x1MTIzNCJ9KQorICAgICAgICAgICAgICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jXHUxMjM0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbG9hZGVyX18iOiBOb25lLCAiX19wYWNrYWdlX18iOiBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zcGVjX18iOiBOb25lfSkKIAogICAgIGRlZiB0ZXN0X3JlaW5pdChzZWxmKToKICAgICAgICAgIyBSZWluaXRpYWxpemF0aW9uIHNob3VsZCBub3QgcmVwbGFjZSB0aGUgX19kaWN0X18KQEAgLTYxLDEwICs3MiwxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvby5fX2RvY19fLCAiZm9vZG9jIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uYmFyLCA0MikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28uX19kaWN0X18sCi0gICAgICAgICAgICAgIHsiX19uYW1lX18iOiAiZm9vIiwgIl9fZG9jX18iOiAiZm9vZG9jIiwgImJhciI6IDQyfSkKKyAgICAgICAgICAgICAgeyJfX25hbWVfXyI6ICJmb28iLCAiX19kb2NfXyI6ICJmb29kb2MiLCAiYmFyIjogNDIsCisgICAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IE5vbmUsICJfX3BhY2thZ2VfXyI6IE5vbmUsICJfX3NwZWNfXyI6IE5vbmV9KQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZm9vLl9fZGljdF9fIGlzIGQpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCiAgICAgZGVmIHRlc3RfZG9udF9jbGVhcl9kaWN0KHNlbGYpOgogICAgICAgICAjIFNlZSBpc3N1ZSA3MTQwLgogICAgICAgICBkZWYgZigpOgpAQCAtODksNiArMTAwLDE0IEBACiAgICAgICAgIGdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRlc3Ryb3llZCwgWzFdKQogCisgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKKyAgICAgICAgbSA9IE1vZHVsZVR5cGUoImZvbyIpCisgICAgICAgIHdyID0gd2Vha3JlZi5yZWYobSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBtKQorICAgICAgICBkZWwgbQorICAgICAgICBnY19jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfbWluaW1hbChzZWxmKToKICAgICAgICAgIyByZXBycyB3aGVuIG1vZHVsZXMgaGF2ZSBubyBfX2ZpbGVfXywgX19uYW1lX18sIG9yIF9fbG9hZGVyX18KICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCkBAIC0xMTAsMTMgKzEyOSwxOSBAQAogICAgICAgICBtLl9fZmlsZV9fID0gJy90bXAvZm9vLnB5JwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobSksICI8bW9kdWxlICc/JyBmcm9tICcvdG1wL2Zvby5weSc+IikKIAorICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfbG9hZGVyX2FzX05vbmUoc2VsZik6CisgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQorICAgICAgICBhc3NlcnQgbS5fX2xvYWRlcl9fIGlzIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG0pLCAiPG1vZHVsZSAnZm9vJz4iKQorCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9iYXJlX2xvYWRlcl9idXRfbm9fbmFtZShzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCiAgICAgICAgIGRlbCBtLl9fbmFtZV9fCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gQmFyZUxvYWRlcgorICAgICAgICBsb2FkZXJfcmVwciA9IHJlcHIoQmFyZUxvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkJhcmVMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoe30pPiIuZm9ybWF0KGxvYWRlcl9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfZnVsbF9sb2FkZXJfYnV0X25vX25hbWUoc2VsZik6CiAgICAgICAgICMgbS5fX2xvYWRlcl9fLm1vZHVsZV9yZXByKCkgd2lsbCBmYWlsIGJlY2F1c2UgdGhlIG1vZHVsZSBoYXMgbm8KQEAgLTEyNiwxNSArMTUxLDE3IEBACiAgICAgICAgIGRlbCBtLl9fbmFtZV9fCiAgICAgICAgICMgWWVzLCBhIGNsYXNzIG5vdCBhbiBpbnN0YW5jZS4KICAgICAgICAgbS5fX2xvYWRlcl9fID0gRnVsbExvYWRlcgorICAgICAgICBsb2FkZXJfcmVwciA9IHJlcHIoRnVsbExvYWRlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkZ1bGxMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICc/JyAoe30pPiIuZm9ybWF0KGxvYWRlcl9yZXByKSkKIAogICAgIGRlZiB0ZXN0X21vZHVsZV9yZXByX3dpdGhfYmFyZV9sb2FkZXIoc2VsZik6CiAgICAgICAgIG0gPSBNb2R1bGVUeXBlKCdmb28nKQogICAgICAgICAjIFllcywgYSBjbGFzcyBub3QgYW4gaW5zdGFuY2UuCiAgICAgICAgIG0uX19sb2FkZXJfXyA9IEJhcmVMb2FkZXIKKyAgICAgICAgbW9kdWxlX3JlcHIgPSByZXByKEJhcmVMb2FkZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICByZXByKG0pLCAiPG1vZHVsZSAnZm9vJyAoPGNsYXNzICd0ZXN0LnRlc3RfbW9kdWxlLkJhcmVMb2FkZXInPik+IikKKyAgICAgICAgICAgIHJlcHIobSksICI8bW9kdWxlICdmb28nICh7fSk+Ii5mb3JtYXQobW9kdWxlX3JlcHIpKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlX3JlcHJfd2l0aF9mdWxsX2xvYWRlcihzZWxmKToKICAgICAgICAgbSA9IE1vZHVsZVR5cGUoJ2ZvbycpCkBAIC0xNjQsOCArMTkxLDI1IEBACiAKICAgICBkZWYgdGVzdF9tb2R1bGVfcmVwcl9zb3VyY2Uoc2VsZik6CiAgICAgICAgIHIgPSByZXByKHVuaXR0ZXN0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbOjI1XSwgIjxtb2R1bGUgJ3VuaXR0ZXN0JyBmcm9tICciKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJbLTEzOl0sICJfX2luaXRfXy5weSc+IikKKyAgICAgICAgc3RhcnRzX3dpdGggPSAiPG1vZHVsZSAndW5pdHRlc3QnIGZyb20gJyIKKyAgICAgICAgZW5kc193aXRoID0gIl9faW5pdF9fLnB5Jz4iCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocls6bGVuKHN0YXJ0c193aXRoKV0sIHN0YXJ0c193aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7IXJ9IGRvZXMgbm90IHN0YXJ0IHdpdGggeyFyfScuZm9ybWF0KHIsIHN0YXJ0c193aXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy1sZW4oZW5kc193aXRoKTpdLCBlbmRzX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3shcn0gZG9lcyBub3QgZW5kIHdpdGggeyFyfScuZm9ybWF0KHIsIGVuZHNfd2l0aCkpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfZmluYWxpemF0aW9uX2F0X3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIE1vZHVsZSBnbG9iYWxzIGFuZCBidWlsdGlucyBzaG91bGQgc3RpbGwgYmUgYXZhaWxhYmxlIGR1cmluZyBzaHV0ZG93bgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsICJmcm9tIHRlc3QgaW1wb3J0IGZpbmFsX2EiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGVycikKKyAgICAgICAgbGluZXMgPSBvdXQuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KGxpbmVzKSwgeworICAgICAgICAgICAgYiJ4ID0gYSIsCisgICAgICAgICAgICBiInggPSBiIiwKKyAgICAgICAgICAgIGIiZmluYWxfYS54ID0gYSIsCisgICAgICAgICAgICBiImZpbmFsX2IueCA9IGIiLAorICAgICAgICAgICAgYiJsZW4gPSBsZW4iLAorICAgICAgICAgICAgYiJzaHV0aWwucm10cmVlID0gcm10cmVlIn0pCiAKICAgICAjIGZyb3plbiBhbmQgbmFtZXNwYWNlIG1vZHVsZSByZXBycyBhcmUgdGVzdGVkIGluIGltcG9ydGxpYi4KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tb2R1bGVmaW5kZXIucHkgYi9MaWIvdGVzdC90ZXN0X21vZHVsZWZpbmRlci5weQppbmRleCBlZDMwZDZmLi40YzQ5ZTlhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X21vZHVsZWZpbmRlci5weQorKysgYi9MaWIvdGVzdC90ZXN0X21vZHVsZWZpbmRlci5weQpAQCAtMjQ1LDExICsyNDUsMTIgQEAKIAogCiBjbGFzcyBNb2R1bGVGaW5kZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgX2RvX3Rlc3Qoc2VsZiwgaW5mbywgcmVwb3J0PUZhbHNlKToKKyAgICBkZWYgX2RvX3Rlc3Qoc2VsZiwgaW5mbywgcmVwb3J0PUZhbHNlLCBkZWJ1Zz0wLCByZXBsYWNlX3BhdGhzPVtdKToKICAgICAgICAgaW1wb3J0X3RoaXMsIG1vZHVsZXMsIG1pc3NpbmcsIG1heWJlX21pc3NpbmcsIHNvdXJjZSA9IGluZm8KICAgICAgICAgY3JlYXRlX3BhY2thZ2Uoc291cmNlKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBtZiA9IG1vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIocGF0aD1URVNUX1BBVEgpCisgICAgICAgICAgICBtZiA9IG1vZHVsZWZpbmRlci5Nb2R1bGVGaW5kZXIocGF0aD1URVNUX1BBVEgsIGRlYnVnPWRlYnVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcGxhY2VfcGF0aHM9cmVwbGFjZV9wYXRocykKICAgICAgICAgICAgIG1mLmltcG9ydF9ob29rKGltcG9ydF90aGlzKQogICAgICAgICAgICAgaWYgcmVwb3J0OgogICAgICAgICAgICAgICAgIG1mLnJlcG9ydCgpCkBAIC0zMDgsOSArMzA5LDE2IEBACiAgICAgICAgIG9zLnJlbW92ZShzb3VyY2VfcGF0aCkKICAgICAgICAgc2VsZi5fZG9fdGVzdChieXRlY29kZV90ZXN0KQogCisgICAgZGVmIHRlc3RfcmVwbGFjZV9wYXRocyhzZWxmKToKKyAgICAgICAgb2xkX3BhdGggPSBvcy5wYXRoLmpvaW4oVEVTVF9ESVIsICdhJywgJ21vZHVsZS5weScpCisgICAgICAgIG5ld19wYXRoID0gb3MucGF0aC5qb2luKFRFU1RfRElSLCAnYScsICdzcGFtLnB5JykKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIG91dHB1dDoKKyAgICAgICAgICAgIHNlbGYuX2RvX3Rlc3QobWF5YmVfdGVzdCwgZGVidWc9MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZV9wYXRocz1bKG9sZF9wYXRoLCBuZXdfcGF0aCldKQorICAgICAgICBvdXRwdXQgPSBvdXRwdXQuZ2V0dmFsdWUoKQorICAgICAgICBleHBlY3RlZCA9ICJjb19maWxlbmFtZSAlciBjaGFuZ2VkIHRvICVyIiAlIChvbGRfcGF0aCwgbmV3X3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oZXhwZWN0ZWQsIG91dHB1dCkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KE1vZHVsZUZpbmRlclRlc3QpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5IGIvTGliL3Rlc3QvdGVzdF9tdWx0aWJ5dGVjb2RlYy5weQppbmRleCA2ODg5MTg0Li4yOTI5Zjk4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X211bHRpYnl0ZWNvZGVjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfbXVsdGlieXRlY29kZWMucHkKQEAgLTQ0LDYgKzQ0LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGRlYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgYidhcHBsZVx4OTJoYW1ceDkzc3BhbScsICd0ZXN0LmNqa3Rlc3QnKQogCisgICAgZGVmIHRlc3RfZXJyb3JjYWxsYmFja19jdXN0b21faWdub3JlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMzIxNTogTWVtb3J5RXJyb3Igd2l0aCBjdXN0b20gZXJyb3IgaGFuZGxlcnMgYW5kIG11bHRpYnl0ZSBjb2RlY3MKKyAgICAgICAgZGF0YSA9IDEwMCAqICJcdWRjMDAiCisgICAgICAgIGNvZGVjcy5yZWdpc3Rlcl9lcnJvcigidGVzdC5pZ25vcmUiLCBjb2RlY3MuaWdub3JlX2Vycm9ycykKKyAgICAgICAgZm9yIGVuYyBpbiBBTExfQ0pLRU5DT0RJTkdTOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLmVuY29kZShlbmMsICJ0ZXN0Lmlnbm9yZSIpLCBiJycpCisKICAgICBkZWYgdGVzdF9jb2RpbmdzcGVjKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmb3IgZW5jIGluIEFMTF9DSktFTkNPRElOR1M6CkBAIC04MCw3ICs4Nyw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW5jb2Rlci5yZXNldCgpLCBOb25lKQogCiAgICAgZGVmIHRlc3Rfc3RhdGVmdWwoc2VsZik6Ci0gICAgICAgICMgamlzeDAyMTMgZW5jb2RlciBpcyBzdGF0ZWZ1bCBmb3IgYSBmZXcgY29kZXBvaW50cy4gZWcpCisgICAgICAgICMgamlzeDAyMTMgZW5jb2RlciBpcyBzdGF0ZWZ1bCBmb3IgYSBmZXcgY29kZSBwb2ludHMuIGVnKQogICAgICAgICAjICAgVSswMEU2ID0+IEE5REMKICAgICAgICAgIyAgIFUrMDBFNiBVKzAzMDAgPT4gQUJDNAogICAgICAgICAjICAgVSswMzAwID0+IEFCREMKQEAgLTE3NSw1NyArMTgyLDI4IEBACiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4pCiAKIGNsYXNzIFRlc3RfU3RyZWFtV3JpdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBpZiBsZW4oJ1xVMDAwMTIzNDUnKSA9PSAyOiAjIFVDUzIKLSAgICAgICAgZGVmIHRlc3RfZ2IxODAzMChzZWxmKToKLSAgICAgICAgICAgIHM9IGlvLkJ5dGVzSU8oKQotICAgICAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ2diMTgwMzAnKShzKQotICAgICAgICAgICAgYy53cml0ZSgnMTIzJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyMycpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1JykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4OTA3XHg5NTknKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMF0pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceDkwN1x4OTU5JykKLSAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzFdICsgJ1xVMDAwMTIzNDUnICsgJ1x1YWMwMFx1MDBhYycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceDkwN1x4OTU5XHg5MDdceDk1OVx4OTA3XHg5NTlceDgyN1x4Y2Y1XHg4MTBceDg1MScpCi0gICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDkwN1x4OTU5XHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgYy5yZXNldCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4OTA3XHg5NTlceDkwN1x4OTU5XHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKKyAgICBkZWYgdGVzdF9nYjE4MDMwKHNlbGYpOgorICAgICAgICBzPSBpby5CeXRlc0lPKCkKKyAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ2diMTgwMzAnKShzKQorICAgICAgICBjLndyaXRlKCcxMjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQorICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHg5MDdceDk1OScpCisgICAgICAgIGMud3JpdGUoJ1x1YWMwMFx1MDBhYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgICAgIGInMTIzXHg5MDdceDk1OVx4ODI3XHhjZjVceDgxMFx4ODUxJykKIAotICAgICAgICBkZWYgdGVzdF91dGZfOChzZWxmKToKLSAgICAgICAgICAgIHM9IGlvLkJ5dGVzSU8oKQotICAgICAgICAgICAgYyA9IGNvZGVjcy5nZXR3cml0ZXIoJ3V0Zi04JykocykKLSAgICAgICAgICAgIGMud3JpdGUoJzEyMycpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQotICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NScpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjNceGYwXHg5Mlx4OGRceDg1JykKLQotICAgICAgICAgICAgIyBQeXRob24gdXRmLTggY29kZWMgY2FuJ3QgYnVmZmVyIHN1cnJvZ2F0ZSBwYWlycyB5ZXQuCi0gICAgICAgICAgICBpZiAwOgotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzBdKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLCBiJzEyM1x4ZjBceDkyXHg4ZFx4ODUnKQotICAgICAgICAgICAgICAgIGMud3JpdGUoJ1xVMDAwMTIzNDUnWzFdICsgJ1xVMDAwMTIzNDUnICsgJ1x1YWMwMFx1MDBhYycpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjJykKLSAgICAgICAgICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1J1swXSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODUnCi0gICAgICAgICAgICAgICAgICAgIGInXHhlYVx4YjBceDgwXHhjMlx4YWMnKQotICAgICAgICAgICAgICAgIGMucmVzZXQoKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICBiJzEyM1x4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1XHhmMFx4OTJceDhkXHg4NScKLSAgICAgICAgICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhY1x4ZWRceGEwXHg4OCcpCi0gICAgICAgICAgICAgICAgYy53cml0ZSgnXFUwMDAxMjM0NSdbMV0pCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIGInMTIzXHhmMFx4OTJceDhkXHg4NVx4ZjBceDkyXHg4ZFx4ODVceGYwXHg5Mlx4OGRceDg1JwotICAgICAgICAgICAgICAgICAgICBiJ1x4ZWFceGIwXHg4MFx4YzJceGFjXHhlZFx4YTBceDg4XHhlZFx4YmRceDg1JykKLQotICAgIGVsc2U6ICMgVUNTNAotICAgICAgICBwYXNzCisgICAgZGVmIHRlc3RfdXRmXzgoc2VsZik6CisgICAgICAgIHM9IGlvLkJ5dGVzSU8oKQorICAgICAgICBjID0gY29kZWNzLmdldHdyaXRlcigndXRmLTgnKShzKQorICAgICAgICBjLndyaXRlKCcxMjMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZ2V0dmFsdWUoKSwgYicxMjMnKQorICAgICAgICBjLndyaXRlKCdcVTAwMDEyMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLmdldHZhbHVlKCksIGInMTIzXHhmMFx4OTJceDhkXHg4NScpCisgICAgICAgIGMud3JpdGUoJ1x1YWMwMFx1MDBhYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5nZXR2YWx1ZSgpLAorICAgICAgICAgICAgYicxMjNceGYwXHg5Mlx4OGRceDg1JworICAgICAgICAgICAgYidceGVhXHhiMFx4ODBceGMyXHhhYycpCiAKICAgICBkZWYgdGVzdF9zdHJlYW13cml0ZXJfc3Ryd3JpdGUoc2VsZik6CiAgICAgICAgIHMgPSBpby5CeXRlc0lPKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmsucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZjRlNzUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3JrLnB5CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcKKwordGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcuaW5zdGFsbF90ZXN0c19pbl9tb2R1bGVfZGljdChnbG9iYWxzKCksICdmb3JrJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmtzZXJ2ZXIucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5M2EwNGEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyLnB5CkBAIC0wLDAgKzEsNyBAQAoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcKKwordGVzdC5fdGVzdF9tdWx0aXByb2Nlc3NpbmcuaW5zdGFsbF90ZXN0c19pbl9tb2R1bGVfZGljdChnbG9iYWxzKCksICdmb3Jrc2VydmVyJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbXVsdGlwcm9jZXNzaW5nX21haW5faGFuZGxpbmcucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19tYWluX2hhbmRsaW5nLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNWY3ODIKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19tYWluX2hhbmRsaW5nLnB5CkBAIC0wLDAgKzEsMjg5IEBACisjIHRlc3RzIF9fbWFpbl9fIG1vZHVsZSBoYW5kbGluZyBpbiBtdWx0aXByb2Nlc3NpbmcKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorIyBTa2lwIHRlc3RzIGlmIF90aHJlYWQgb3IgX211bHRpcHJvY2Vzc2luZyB3YXNuJ3QgYnVpbHQuCitzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190aHJlYWQnKQorc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCdfbXVsdGlwcm9jZXNzaW5nJykKKworaW1wb3J0IGltcG9ydGxpYgoraW1wb3J0IGltcG9ydGxpYi5tYWNoaW5lcnkKK2ltcG9ydCB6aXBpbXBvcnQKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHN5cworaW1wb3J0IG9zCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHB5X2NvbXBpbGUKKworZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0ICgKKyAgICBtYWtlX3BrZywgbWFrZV9zY3JpcHQsIG1ha2VfemlwX3BrZywgbWFrZV96aXBfc2NyaXB0LAorICAgIGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZSwgdGVtcF9kaXIsCisgICAgc3Bhd25fcHl0aG9uLCBraWxsX3B5dGhvbikKKworIyBMb29rIHVwIHdoaWNoIHN0YXJ0IG1ldGhvZHMgYXJlIGF2YWlsYWJsZSB0byB0ZXN0CitpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCitBVkFJTEFCTEVfU1RBUlRfTUVUSE9EUyA9IHNldChtdWx0aXByb2Nlc3NpbmcuZ2V0X2FsbF9zdGFydF9tZXRob2RzKCkpCisKKyMgSXNzdWUgIzIyMzMyOiBTa2lwIHRlc3RzIGlmIHNlbV9vcGVuIGltcGxlbWVudGF0aW9uIGlzIGJyb2tlbi4KK3N1cHBvcnQuaW1wb3J0X21vZHVsZSgnbXVsdGlwcm9jZXNzaW5nLnN5bmNocm9uaXplJykKKwordmVyYm9zZSA9IHN1cHBvcnQudmVyYm9zZQorCit0ZXN0X3NvdXJjZSA9ICIiIlwKKyMgbXVsdGlwcm9jZXNzaW5nIGluY2x1ZGVzIGFsbCBzb3J0cyBvZiBzaGVuYW5pZ2FucyB0byBtYWtlIF9fbWFpbl9fCisjIGF0dHJpYnV0ZXMgYWNjZXNzaWJsZSBpbiB0aGUgc3VicHJvY2VzcyBpbiBhIHBpY2tsZSBjb21wYXRpYmxlIHdheS4KKworIyBXZSBydW4gdGhlICJkb2Vzbid0IHdvcmsgaW4gdGhlIGludGVyYWN0aXZlIGludGVycHJldGVyIiBleGFtcGxlIGZyb20KKyMgdGhlIGRvY3MgdG8gbWFrZSBzdXJlIGl0ICpkb2VzKiB3b3JrIGZyb20gYW4gZXhlY3V0ZWQgX19tYWluX18sCisjIHJlZ2FyZGxlc3Mgb2YgdGhlIGludm9jYXRpb24gbWVjaGFuaXNtCisKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCitmcm9tIG11bHRpcHJvY2Vzc2luZyBpbXBvcnQgUG9vbCwgc2V0X3N0YXJ0X21ldGhvZAorCisjIFdlIHVzZSB0aGlzIF9fbWFpbl9fIGRlZmluZWQgZnVuY3Rpb24gaW4gdGhlIG1hcCBjYWxsIGJlbG93IGluIG9yZGVyIHRvCisjIGNoZWNrIHRoYXQgbXVsdGlwcm9jZXNzaW5nIGluIGNvcnJlY3RseSBydW5uaW5nIHRoZSB1bmd1YXJkZWQKKyMgY29kZSBpbiBjaGlsZCBwcm9jZXNzZXMgYW5kIHRoZW4gbWFraW5nIGl0IGF2YWlsYWJsZSBhcyBfX21haW5fXworZGVmIGYoeCk6CisgICAgcmV0dXJuIHgqeAorCisjIENoZWNrIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydHMKK2lmICJjaGVja19zaWJsaW5nIiBpbiBfX2ZpbGVfXzoKKyAgICAjIFdlJ3JlIGluc2lkZSBhIHBhY2thZ2UgYW5kIG5vdCBpbiBhIF9fbWFpbl9fLnB5IGZpbGUKKyAgICAjIHNvIG1ha2Ugc3VyZSBleHBsaWNpdCByZWxhdGl2ZSBpbXBvcnRzIHdvcmsgY29ycmVjdGx5CisgICAgZnJvbSAuIGltcG9ydCBzaWJsaW5nCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgc3RhcnRfbWV0aG9kID0gc3lzLmFyZ3ZbMV0KKyAgICBzZXRfc3RhcnRfbWV0aG9kKHN0YXJ0X21ldGhvZCkKKyAgICBwID0gUG9vbCg1KQorICAgIHJlc3VsdHMgPSBbXQorICAgIHAubWFwX2FzeW5jKGYsIFsxLCAyLCAzXSwgY2FsbGJhY2s9cmVzdWx0cy5leHRlbmQpCisgICAgZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDEwICMgdXAgdG8gMTAgcyB0byByZXBvcnQgdGhlIHJlc3VsdHMKKyAgICB3aGlsZSBub3QgcmVzdWx0czoKKyAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICBpZiB0aW1lLnRpbWUoKSA+IGRlYWRsaW5lOgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcmVzdWx0cyIpCisgICAgcmVzdWx0cy5zb3J0KCkKKyAgICBwcmludChzdGFydF9tZXRob2QsICItPiIsIHJlc3VsdHMpCisiIiIKKwordGVzdF9zb3VyY2VfbWFpbl9za2lwcGVkX2luX2NoaWxkcmVuID0gIiIiXAorIyBfX21haW5fXy5weSBmaWxlcyBoYXZlIGFuIGltcGxpZWQgImlmIF9fbmFtZV9fID09ICdfX21haW5fXyciIHNvCisjIG11bHRpcHJvY2Vzc2luZyBzaG91bGQgYWx3YXlzIHNraXAgcnVubmluZyB0aGVtIGluIGNoaWxkIHByb2Nlc3NlcworCisjIFRoaXMgbWVhbnMgd2UgY2FuJ3QgdXNlIF9fbWFpbl9fIGRlZmluZWQgZnVuY3Rpb25zIGluIGNoaWxkIHByb2Nlc3NlcywKKyMgc28gd2UganVzdCB1c2UgImludCIgYXMgYSBwYXNzdGhyb3VnaCBvcGVyYXRpb24gYmVsb3cKKworaWYgX19uYW1lX18gIT0gIl9fbWFpbl9fIjoKKyAgICByYWlzZSBSdW50aW1lRXJyb3IoIlNob3VsZCBvbmx5IGJlIGNhbGxlZCBhcyBfX21haW5fXyEiKQorCitpbXBvcnQgc3lzCitpbXBvcnQgdGltZQorZnJvbSBtdWx0aXByb2Nlc3NpbmcgaW1wb3J0IFBvb2wsIHNldF9zdGFydF9tZXRob2QKKworc3RhcnRfbWV0aG9kID0gc3lzLmFyZ3ZbMV0KK3NldF9zdGFydF9tZXRob2Qoc3RhcnRfbWV0aG9kKQorcCA9IFBvb2woNSkKK3Jlc3VsdHMgPSBbXQorcC5tYXBfYXN5bmMoaW50LCBbMSwgNCwgOV0sIGNhbGxiYWNrPXJlc3VsdHMuZXh0ZW5kKQorZGVhZGxpbmUgPSB0aW1lLnRpbWUoKSArIDEwICMgdXAgdG8gMTAgcyB0byByZXBvcnQgdGhlIHJlc3VsdHMKK3doaWxlIG5vdCByZXN1bHRzOgorICAgIHRpbWUuc2xlZXAoMC4wNSkKKyAgICBpZiB0aW1lLnRpbWUoKSA+IGRlYWRsaW5lOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIlRpbWVkIG91dCB3YWl0aW5nIGZvciByZXN1bHRzIikKK3Jlc3VsdHMuc29ydCgpCitwcmludChzdGFydF9tZXRob2QsICItPiIsIHJlc3VsdHMpCisiIiIKKworIyBUaGVzZSBoZWxwZXJzIHdlcmUgY29waWVkIGZyb20gdGVzdF9jbWRfbGluZV9zY3JpcHQgJiB0d2Vha2VkIGEgYml0Li4uCisKK2RlZiBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXRlc3Rfc291cmNlLCBvbWl0X3N1ZmZpeD1GYWxzZSk6CisgICAgdG9fcmV0dXJuID0gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgb21pdF9zdWZmaXgpCisgICAgIyBIYWNrIHRvIGNoZWNrIGV4cGxpY2l0IHJlbGF0aXZlIGltcG9ydHMKKyAgICBpZiBzY3JpcHRfYmFzZW5hbWUgPT0gImNoZWNrX3NpYmxpbmciOgorICAgICAgICBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCAic2libGluZyIsICIiKQorICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgcmV0dXJuIHRvX3JldHVybgorCitkZWYgX21ha2VfdGVzdF96aXBfcGtnKHppcF9kaXIsIHppcF9iYXNlbmFtZSwgcGtnX25hbWUsIHNjcmlwdF9iYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXRlc3Rfc291cmNlLCBkZXB0aD0xKToKKyAgICB0b19yZXR1cm4gPSBtYWtlX3ppcF9wa2coemlwX2RpciwgemlwX2Jhc2VuYW1lLCBwa2dfbmFtZSwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2UsIGRlcHRoKQorICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCisgICAgcmV0dXJuIHRvX3JldHVybgorCisjIFRoZXJlJ3Mgbm8gZWFzeSB3YXkgdG8gcGFzcyB0aGUgc2NyaXB0IGRpcmVjdG9yeSBpbiB0byBnZXQKKyMgLW0gdG8gd29yayAoYXZvaWRpbmcgdGhhdCBpcyB0aGUgd2hvbGUgcG9pbnQgb2YgbWFraW5nCisjIGRpcmVjdG9yaWVzIGFuZCB6aXBmaWxlcyBleGVjdXRhYmxlISkKKyMgU28gd2UgZmFrZSBpdCBmb3IgdGVzdGluZyBwdXJwb3NlcyB3aXRoIGEgY3VzdG9tIGxhdW5jaCBzY3JpcHQKK2xhdW5jaF9zb3VyY2UgPSAiIiJcCitpbXBvcnQgc3lzLCBvcy5wYXRoLCBydW5weQorc3lzLnBhdGguaW5zZXJ0KDAsICVzKQorcnVucHkuX3J1bl9tb2R1bGVfYXNfbWFpbiglcikKKyIiIgorCitkZWYgX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIG1vZHVsZV9uYW1lLCBwYXRoPU5vbmUpOgorICAgIGlmIHBhdGggaXMgTm9uZToKKyAgICAgICAgcGF0aCA9ICJvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIgorICAgIGVsc2U6CisgICAgICAgIHBhdGggPSByZXByKHBhdGgpCisgICAgc291cmNlID0gbGF1bmNoX3NvdXJjZSAlIChwYXRoLCBtb2R1bGVfbmFtZSkKKyAgICB0b19yZXR1cm4gPSBtYWtlX3NjcmlwdChzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsIHNvdXJjZSkKKyAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQorICAgIHJldHVybiB0b19yZXR1cm4KKworY2xhc3MgTXVsdGlQcm9jZXNzaW5nQ21kTGluZU1peGluKCk6CisgICAgbWF4RGlmZiA9IE5vbmUgIyBTaG93IGZ1bGwgdHJhY2ViYWNrcyBvbiBzdWJwcm9jZXNzIGZhaWx1cmUKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5zdGFydF9tZXRob2Qgbm90IGluIEFWQUlMQUJMRV9TVEFSVF9NRVRIT0RTOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiJXIgc3RhcnQgbWV0aG9kIG5vdCBhdmFpbGFibGUiICUgc2VsZi5zdGFydF9tZXRob2QpCisKKyAgICBkZWYgX2NoZWNrX291dHB1dChzZWxmLCBzY3JpcHRfbmFtZSwgZXhpdF9jb2RlLCBvdXQsIGVycik6CisgICAgICAgIGlmIHZlcmJvc2UgPiAxOgorICAgICAgICAgICAgcHJpbnQoIk91dHB1dCBmcm9tIHRlc3Qgc2NyaXB0ICVyOiIgJSBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHByaW50KHJlcHIob3V0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGl0X2NvZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLmRlY29kZSgndXRmLTgnKSwgJycpCisgICAgICAgIGV4cGVjdGVkX3Jlc3VsdHMgPSAiJXMgLT4gWzEsIDQsIDldIiAlIHNlbGYuc3RhcnRfbWV0aG9kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmRlY29kZSgndXRmLTgnKS5zdHJpcCgpLCBleHBlY3RlZF9yZXN1bHRzKQorCisgICAgZGVmIF9jaGVja19zY3JpcHQoc2VsZiwgc2NyaXB0X25hbWUsICpjbWRfbGluZV9zd2l0Y2hlcyk6CisgICAgICAgIGlmIG5vdCBfX2RlYnVnX186CisgICAgICAgICAgICBjbWRfbGluZV9zd2l0Y2hlcyArPSAoJy0nICsgJ08nICogc3lzLmZsYWdzLm9wdGltaXplLCkKKyAgICAgICAgcnVuX2FyZ3MgPSBjbWRfbGluZV9zd2l0Y2hlcyArIChzY3JpcHRfbmFtZSwgc2VsZi5zdGFydF9tZXRob2QpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soKnJ1bl9hcmdzLCBfX2lzb2xhdGVkPUZhbHNlKQorICAgICAgICBzZWxmLl9jaGVja19vdXRwdXQoc2NyaXB0X25hbWUsIHJjLCBvdXQsIGVycikKKworICAgIGRlZiB0ZXN0X2Jhc2ljX3NjcmlwdChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lKQorCisgICAgZGVmIHRlc3RfYmFzaWNfc2NyaXB0X25vX3N1ZmZpeChzZWxmKToKKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdzY3JpcHQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbWl0X3N1ZmZpeD1UcnVlKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lKQorCisgICAgZGVmIHRlc3RfaXB5dGhvbl93b3JrYXJvdW5kKHNlbGYpOgorICAgICAgICAjIFNvbWUgdmVyc2lvbnMgb2YgdGhlIElQeXRob24gbGF1bmNoIHNjcmlwdCBhcmUgbWlzc2luZyB0aGUKKyAgICAgICAgIyBfX25hbWVfXyA9ICJfX21haW5fXyIgZ3VhcmQsIGFuZCBtdWx0aXByb2Nlc3NpbmcgaGFzIGxvbmcgaGFkCisgICAgICAgICMgYSB3b3JrYXJvdW5kIGZvciB0aGF0IGNhc2UKKyAgICAgICAgIyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2lweXRob24vaXB5dGhvbi9pc3N1ZXMvNDY5OAorICAgICAgICBzb3VyY2UgPSB0ZXN0X3NvdXJjZV9tYWluX3NraXBwZWRfaW5fY2hpbGRyZW4KKyAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsICdpcHl0aG9uJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNjcmlwdF9ub19zdWZmaXggPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnaXB5dGhvbicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbWl0X3N1ZmZpeD1UcnVlKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9ub19zdWZmaXgpCisKKyAgICBkZWYgdGVzdF9zY3JpcHRfY29tcGlsZWQoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnc2NyaXB0JykKKyAgICAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQorICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgcHljX2ZpbGUgPSBzdXBwb3J0Lm1ha2VfbGVnYWN5X3B5YyhzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChweWNfZmlsZSkKKworICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyKQorCisgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2NvbXBpbGVkKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNjcmlwdF9uYW1lLCBkb3JhaXNlPVRydWUpCisgICAgICAgICAgICBvcy5yZW1vdmUoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBweWNfZmlsZSA9IHN1cHBvcnQubWFrZV9sZWdhY3lfcHljKHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIpCisKKyAgICBkZWYgdGVzdF96aXBmaWxlKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBfbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCAnX19tYWluX18nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U9c291cmNlKQorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsIHNjcmlwdF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lKQorCisgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKKyAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgJ19fbWFpbl9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLCBjb21waWxlZF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lKQorCisgICAgZGVmIHRlc3RfbW9kdWxlX2luX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ2NoZWNrX3NpYmxpbmcnKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0X3BrZy5jaGVja19zaWJsaW5nJykKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChsYXVuY2hfbmFtZSkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9pbl9wYWNrYWdlX2luX3ppcGZpbGUoc2VsZik6CisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gX21ha2VfdGVzdF96aXBfcGtnKHNjcmlwdF9kaXIsICd0ZXN0X3ppcCcsICd0ZXN0X3BrZycsICdzY3JpcHQnKQorICAgICAgICAgICAgbGF1bmNoX25hbWUgPSBfbWFrZV9sYXVuY2hfc2NyaXB0KHNjcmlwdF9kaXIsICdsYXVuY2gnLCAndGVzdF9wa2cuc2NyaXB0JywgemlwX25hbWUpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUpCisKKyAgICBkZWYgdGVzdF9tb2R1bGVfaW5fc3VicGFja2FnZV9pbl96aXBmaWxlKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHppcF9uYW1lLCBydW5fbmFtZSA9IF9tYWtlX3Rlc3RfemlwX3BrZyhzY3JpcHRfZGlyLCAndGVzdF96aXAnLCAndGVzdF9wa2cnLCAnc2NyaXB0JywgZGVwdGg9MikKKyAgICAgICAgICAgIGxhdW5jaF9uYW1lID0gX21ha2VfbGF1bmNoX3NjcmlwdChzY3JpcHRfZGlyLCAnbGF1bmNoJywgJ3Rlc3RfcGtnLnRlc3RfcGtnLnNjcmlwdCcsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGxhdW5jaF9uYW1lKQorCisgICAgZGVmIHRlc3RfcGFja2FnZShzZWxmKToKKyAgICAgICAgc291cmNlID0gc2VsZi5tYWluX2luX2NoaWxkcmVuX3NvdXJjZQorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIHBrZ19kaXIgPSBvcy5wYXRoLmpvaW4oc2NyaXB0X2RpciwgJ3Rlc3RfcGtnJykKKyAgICAgICAgICAgIG1ha2VfcGtnKHBrZ19kaXIpCisgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IF9tYWtlX3Rlc3Rfc2NyaXB0KHBrZ19kaXIsICdfX21haW5fXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1zb3VyY2UpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUpCisKKyAgICBkZWYgdGVzdF9wYWNrYWdlX2NvbXBpbGVkKHNlbGYpOgorICAgICAgICBzb3VyY2UgPSBzZWxmLm1haW5faW5fY2hpbGRyZW5fc291cmNlCisgICAgICAgIHdpdGggdGVtcF9kaXIoKSBhcyBzY3JpcHRfZGlyOgorICAgICAgICAgICAgcGtnX2RpciA9IG9zLnBhdGguam9pbihzY3JpcHRfZGlyLCAndGVzdF9wa2cnKQorICAgICAgICAgICAgbWFrZV9wa2cocGtnX2RpcikKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gX21ha2VfdGVzdF9zY3JpcHQocGtnX2RpciwgJ19fbWFpbl9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlPXNvdXJjZSkKKyAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgIHB5Y19maWxlID0gc3VwcG9ydC5tYWtlX2xlZ2FjeV9weWMoc2NyaXB0X25hbWUpCisgICAgICAgICAgICBsYXVuY2hfbmFtZSA9IF9tYWtlX2xhdW5jaF9zY3JpcHQoc2NyaXB0X2RpciwgJ2xhdW5jaCcsICd0ZXN0X3BrZycpCisgICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQobGF1bmNoX25hbWUpCisKKyMgVGVzdCBhbGwgc3VwcG9ydGVkIHN0YXJ0IG1ldGhvZHMgKHNldHVwQ2xhc3Mgc2tpcHMgYXMgYXBwcm9wcmlhdGUpCisKK2NsYXNzIFNwYXduQ21kTGluZVRlc3QoTXVsdGlQcm9jZXNzaW5nQ21kTGluZU1peGluLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc3RhcnRfbWV0aG9kID0gJ3NwYXduJworICAgIG1haW5faW5fY2hpbGRyZW5fc291cmNlID0gdGVzdF9zb3VyY2VfbWFpbl9za2lwcGVkX2luX2NoaWxkcmVuCisKK2NsYXNzIEZvcmtDbWRMaW5lVGVzdChNdWx0aVByb2Nlc3NpbmdDbWRMaW5lTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGFydF9tZXRob2QgPSAnZm9yaycKKyAgICBtYWluX2luX2NoaWxkcmVuX3NvdXJjZSA9IHRlc3Rfc291cmNlCisKK2NsYXNzIEZvcmtTZXJ2ZXJDbWRMaW5lVGVzdChNdWx0aVByb2Nlc3NpbmdDbWRMaW5lTWl4aW4sIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzdGFydF9tZXRob2QgPSAnZm9ya3NlcnZlcicKKyAgICBtYWluX2luX2NoaWxkcmVuX3NvdXJjZSA9IHRlc3Rfc291cmNlX21haW5fc2tpcHBlZF9pbl9jaGlsZHJlbgorCitkZWYgdGVhckRvd25Nb2R1bGUoKToKKyAgICBzdXBwb3J0LnJlYXBfY2hpbGRyZW4oKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24ucHkgYi9MaWIvdGVzdC90ZXN0X211bHRpcHJvY2Vzc2luZ19zcGF3bi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzRhZTllCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24ucHkKQEAgLTAsMCArMSw3IEBACitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZworCit0ZXN0Ll90ZXN0X211bHRpcHJvY2Vzc2luZy5pbnN0YWxsX3Rlc3RzX2luX21vZHVsZV9kaWN0KGdsb2JhbHMoKSwgJ3NwYXduJykKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weSBiL0xpYi90ZXN0L3Rlc3Rfbm50cGxpYi5weQppbmRleCAxZDUyNzEzLi5hZTM2MThmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X25udHBsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ubnRwbGliLnB5CkBAIC04LDYgKzgsNyBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBmcm9tIG5udHBsaWIgaW1wb3J0IE5OVFAsIEdyb3VwSW5mbwogaW1wb3J0IG5udHBsaWIKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKIHRyeToKICAgICBpbXBvcnQgc3NsCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0yNjYsNyArMjY3LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZXJ2ZXIuaGVscCgpCi0gICAgICAgICAgICBleGNlcHQgKHNvY2tldC5lcnJvciwgRU9GRXJyb3IpOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvcik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCkBAIC0zNzAsNiArMzcxLDE0IEBACiAgICAgICAgIHJldHVybiBuCiAKIAorZGVmIG1ha2VfbW9ja19maWxlKGhhbmRsZXIpOgorICAgIHNpbyA9IF9OTlRQU2VydmVySU8oaGFuZGxlcikKKyAgICAjIFVzaW5nIEJ1ZmZlcmVkUldQYWlyIGluc3RlYWQgb2YgQnVmZmVyZWRSYW5kb20gZW5zdXJlcyB0aGUgZmlsZQorICAgICMgaXNuJ3Qgc2Vla2FibGUuCisgICAgZmlsZSA9IGlvLkJ1ZmZlcmVkUldQYWlyKHNpbywgc2lvKQorICAgIHJldHVybiAoc2lvLCBmaWxlKQorCisKIGNsYXNzIE1vY2tlZE5OVFBUZXN0c01peGluOgogICAgICMgT3ZlcnJpZGUgaW4gZGVyaXZlZCBjbGFzc2VzCiAgICAgaGFuZGxlcl9jbGFzcyA9IE5vbmUKQEAgLTM4NCwxMCArMzkzLDcgQEAKIAogICAgIGRlZiBtYWtlX3NlcnZlcihzZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICBzZWxmLmhhbmRsZXIgPSBzZWxmLmhhbmRsZXJfY2xhc3MoKQotICAgICAgICBzZWxmLnNpbyA9IF9OTlRQU2VydmVySU8oc2VsZi5oYW5kbGVyKQotICAgICAgICAjIFVzaW5nIEJ1ZmZlcmVkUldQYWlyIGluc3RlYWQgb2YgQnVmZmVyZWRSYW5kb20gZW5zdXJlcyB0aGUgZmlsZQotICAgICAgICAjIGlzbid0IHNlZWthYmxlLgotICAgICAgICBmaWxlID0gaW8uQnVmZmVyZWRSV1BhaXIoc2VsZi5zaW8sIHNlbGYuc2lvKQorICAgICAgICBzZWxmLnNpbywgZmlsZSA9IG1ha2VfbW9ja19maWxlKHNlbGYuaGFuZGxlcikKICAgICAgICAgc2VsZi5zZXJ2ZXIgPSBubnRwbGliLl9OTlRQQmFzZShmaWxlLCAndGVzdC5zZXJ2ZXInLCAqYXJncywgKiprd2FyZ3MpCiAgICAgICAgIHJldHVybiBzZWxmLnNlcnZlcgogCkBAIC0xNDEyLDExICsxNDE4LDEwOCBAQAogICAgIGRlZiB0ZXN0X3NzbF9zdXBwb3J0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihubnRwbGliLCAnTk5UUF9TU0wnKSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3RzID0gW01pc2NUZXN0cywgTk5UUHYxVGVzdHMsIE5OVFB2MlRlc3RzLCBDYXBzQWZ0ZXJMb2dpbk5OVFB2MlRlc3RzLAotICAgICAgICAgICAgU2VuZFJlYWRlck5OVFB2MlRlc3RzLCBOZXR3b3JrZWROTlRQVGVzdHMsIE5ldHdvcmtlZE5OVFBfU1NMVGVzdHNdCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQorCitjbGFzcyBQdWJsaWNBUElUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiRW5zdXJlcyB0aGF0IHRoZSBjb3JyZWN0IHZhbHVlcyBhcmUgZXhwb3NlZCBpbiB0aGUgcHVibGljIEFQSS4iIiIKKworICAgIGRlZiB0ZXN0X21vZHVsZV9hbGxfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihubnRwbGliLCAnX19hbGxfXycpKQorICAgICAgICB0YXJnZXRfYXBpID0gWydOTlRQJywgJ05OVFBFcnJvcicsICdOTlRQUmVwbHlFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAgJ05OVFBUZW1wb3JhcnlFcnJvcicsICdOTlRQUGVybWFuZW50RXJyb3InLAorICAgICAgICAgICAgICAgICAgICAgICdOTlRQUHJvdG9jb2xFcnJvcicsICdOTlRQRGF0YUVycm9yJywgJ2RlY29kZV9oZWFkZXInXQorICAgICAgICBpZiBzc2wgaXMgbm90IE5vbmU6CisgICAgICAgICAgICB0YXJnZXRfYXBpLmFwcGVuZCgnTk5UUF9TU0wnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChubnRwbGliLl9fYWxsX18pLCBzZXQodGFyZ2V0X2FwaSkpCisKK2NsYXNzIE1vY2tTb2NrZXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdHMgaW52b2x2aW5nIGEgbW9jayBzb2NrZXQgb2JqZWN0CisKKyAgICBVc2VkIHdoZXJlIHRoZSBfTk5UUFNlcnZlcklPIGZpbGUgb2JqZWN0IGlzIG5vdCBlbm91Z2guIiIiCisKKyAgICBubnRwX2NsYXNzID0gbm50cGxpYi5OTlRQCisKKyAgICBkZWYgY2hlY2tfY29uc3RydWN0b3JfZXJyb3JfY29uZGl0aW9ucygKKyAgICAgICAgICAgIHNlbGYsIGhhbmRsZXJfY2xhc3MsCisgICAgICAgICAgICBleHBlY3RlZF9lcnJvcl90eXBlLCBleHBlY3RlZF9lcnJvcl9tc2csCisgICAgICAgICAgICBsb2dpbj1Ob25lLCBwYXNzd29yZD1Ob25lKToKKworICAgICAgICBjbGFzcyBtb2NrX3NvY2tldF9tb2R1bGU6CisgICAgICAgICAgICBkZWYgY3JlYXRlX2Nvbm5lY3Rpb24oYWRkcmVzcywgdGltZW91dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE1vY2tTb2NrZXQoKQorCisgICAgICAgIGNsYXNzIE1vY2tTb2NrZXQ6CisgICAgICAgICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICAgICAgbm9ubG9jYWwgc29ja2V0X2Nsb3NlZAorICAgICAgICAgICAgICAgIHNvY2tldF9jbG9zZWQgPSBUcnVlCisKKyAgICAgICAgICAgIGRlZiBtYWtlZmlsZShzb2NrZXQsIG1vZGUpOgorICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBoYW5kbGVyX2NsYXNzKCkKKyAgICAgICAgICAgICAgICBfLCBmaWxlID0gbWFrZV9tb2NrX2ZpbGUoaGFuZGxlcikKKyAgICAgICAgICAgICAgICBmaWxlcy5hcHBlbmQoZmlsZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlsZQorCisgICAgICAgIHNvY2tldF9jbG9zZWQgPSBGYWxzZQorICAgICAgICBmaWxlcyA9IFtdCisgICAgICAgIHdpdGggcGF0Y2goJ25udHBsaWIuc29ja2V0JywgbW9ja19zb2NrZXRfbW9kdWxlKSwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoZXhwZWN0ZWRfZXJyb3JfdHlwZSwgZXhwZWN0ZWRfZXJyb3JfbXNnKToKKyAgICAgICAgICAgIHNlbGYubm50cF9jbGFzcygnZHVtbXknLCB1c2VyPWxvZ2luLCBwYXNzd29yZD1wYXNzd29yZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2tldF9jbG9zZWQpCisgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuY2xvc2VkKQorCisgICAgZGVmIHRlc3RfYmFkX3dlbGNvbWUoc2VsZik6CisgICAgICAgICNUZXN0IGEgYmFkIHdlbGNvbWUgbWVzc2FnZQorICAgICAgICBjbGFzcyBIYW5kbGVyKE5OVFB2MUhhbmRsZXIpOgorICAgICAgICAgICAgd2VsY29tZSA9ICdCYWQgV2VsY29tZScKKyAgICAgICAgc2VsZi5jaGVja19jb25zdHJ1Y3Rvcl9lcnJvcl9jb25kaXRpb25zKAorICAgICAgICAgICAgSGFuZGxlciwgbm50cGxpYi5OTlRQUHJvdG9jb2xFcnJvciwgSGFuZGxlci53ZWxjb21lKQorCisgICAgZGVmIHRlc3Rfc2VydmljZV90ZW1wb3JhcmlseV91bmF2YWlsYWJsZShzZWxmKToKKyAgICAgICAgI1Rlc3Qgc2VydmljZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZQorICAgICAgICBjbGFzcyBIYW5kbGVyKE5OVFB2MUhhbmRsZXIpOgorICAgICAgICAgICAgd2VsY29tZSA9ICc0MDAgU2VydmljZSB0ZW1wb3JhcmlseSB1bmF2aWxhYmxlJworICAgICAgICBzZWxmLmNoZWNrX2NvbnN0cnVjdG9yX2Vycm9yX2NvbmRpdGlvbnMoCisgICAgICAgICAgICBIYW5kbGVyLCBubnRwbGliLk5OVFBUZW1wb3JhcnlFcnJvciwgSGFuZGxlci53ZWxjb21lKQorCisgICAgZGVmIHRlc3Rfc2VydmljZV9wZXJtYW5lbnRseV91bmF2YWlsYWJsZShzZWxmKToKKyAgICAgICAgI1Rlc3Qgc2VydmljZSBwZXJtYW5lbnRseSB1bmF2YWlsYWJsZQorICAgICAgICBjbGFzcyBIYW5kbGVyKE5OVFB2MUhhbmRsZXIpOgorICAgICAgICAgICAgd2VsY29tZSA9ICc1MDIgU2VydmljZSBwZXJtYW5lbnRseSB1bmF2aWxhYmxlJworICAgICAgICBzZWxmLmNoZWNrX2NvbnN0cnVjdG9yX2Vycm9yX2NvbmRpdGlvbnMoCisgICAgICAgICAgICBIYW5kbGVyLCBubnRwbGliLk5OVFBQZXJtYW5lbnRFcnJvciwgSGFuZGxlci53ZWxjb21lKQorCisgICAgZGVmIHRlc3RfYmFkX2NhcGFiaWxpdGllcyhzZWxmKToKKyAgICAgICAgI1Rlc3QgYSBiYWQgY2FwYWJpbGl0aWVzIHJlc3BvbnNlCisgICAgICAgIGNsYXNzIEhhbmRsZXIoTk5UUHYxSGFuZGxlcik6CisgICAgICAgICAgICBkZWYgaGFuZGxlX0NBUEFCSUxJVElFUyhzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnB1c2hfbGl0KGNhcGFiaWxpdGllc19yZXNwb25zZSkKKyAgICAgICAgY2FwYWJpbGl0aWVzX3Jlc3BvbnNlID0gJzIwMSBiYWQgY2FwYWJpbGl0eScKKyAgICAgICAgc2VsZi5jaGVja19jb25zdHJ1Y3Rvcl9lcnJvcl9jb25kaXRpb25zKAorICAgICAgICAgICAgSGFuZGxlciwgbm50cGxpYi5OTlRQUmVwbHlFcnJvciwgY2FwYWJpbGl0aWVzX3Jlc3BvbnNlKQorCisgICAgZGVmIHRlc3RfbG9naW5fYWJvcnRlZChzZWxmKToKKyAgICAgICAgI1Rlc3QgYSBiYWQgYXV0aGluZm8gcmVzcG9uc2UKKyAgICAgICAgbG9naW4gPSAndEBlLmNvbScKKyAgICAgICAgcGFzc3dvcmQgPSAncHl0aG9uJworICAgICAgICBjbGFzcyBIYW5kbGVyKE5OVFB2MUhhbmRsZXIpOgorICAgICAgICAgICAgZGVmIGhhbmRsZV9BVVRISU5GTyhzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAgICAgc2VsZi5wdXNoX2xpdChhdXRoaW5mb19yZXNwb25zZSkKKyAgICAgICAgYXV0aGluZm9fcmVzcG9uc2UgPSAnNTAzIE1lY2hhbmlzbSBub3QgcmVjb2duaXplZCcKKyAgICAgICAgc2VsZi5jaGVja19jb25zdHJ1Y3Rvcl9lcnJvcl9jb25kaXRpb25zKAorICAgICAgICAgICAgSGFuZGxlciwgbm50cGxpYi5OTlRQUGVybWFuZW50RXJyb3IsIGF1dGhpbmZvX3Jlc3BvbnNlLAorICAgICAgICAgICAgbG9naW4sIHBhc3N3b3JkKQorCitjbGFzcyBieXBhc3NfY29udGV4dDoKKyAgICAiIiJCeXBhc3MgZW5jcnlwdGlvbiBhbmQgYWN0dWFsIFNTTCBtb2R1bGUiIiIKKyAgICBkZWYgd3JhcF9zb2NrZXQoc29jaywgKiphcmdzKToKKyAgICAgICAgcmV0dXJuIHNvY2sKKworQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLCAncmVxdWlyZXMgU1NMIHN1cHBvcnQnKQorY2xhc3MgTW9ja1NzbFRlc3RzKE1vY2tTb2NrZXRUZXN0cyk6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBubnRwX2NsYXNzKCpwb3MsICoqa3cpOgorICAgICAgICByZXR1cm4gbm50cGxpYi5OTlRQX1NTTCgqcG9zLCBzc2xfY29udGV4dD1ieXBhc3NfY29udGV4dCwgKiprdykKIAogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkgYi9MaWIvdGVzdC90ZXN0X25vcm1hbGl6YXRpb24ucHkKaW5kZXggMjhlZGUzNC4uNWRhYzVkYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9ub3JtYWxpemF0aW9uLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfbm9ybWFsaXphdGlvbi5weQpAQCAtNyw3ICs3LDcgQEAKIGZyb20gdW5pY29kZWRhdGEgaW1wb3J0IG5vcm1hbGl6ZSwgdW5pZGF0YV92ZXJzaW9uCiAKIFRFU1REQVRBRklMRSA9ICJOb3JtYWxpemF0aW9uVGVzdC50eHQiCi1URVNUREFUQVVSTCA9ICJodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8iICsgdW5pZGF0YV92ZXJzaW9uICsgIi91Y2QvIiArIFRFU1REQVRBRklMRQorVEVTVERBVEFVUkwgPSAiaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC91bmljb2RlLyIgKyB1bmlkYXRhX3ZlcnNpb24gKyAiLyIgKyBURVNUREFUQUZJTEUKIAogZGVmIGNoZWNrX3ZlcnNpb24odGVzdGZpbGUpOgogICAgIGhkciA9IHRlc3RmaWxlLnJlYWRsaW5lKCkKQEAgLTQzLDcgKzQzLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdGRhdGEgPSBvcGVuX3VybHJlc291cmNlKFRFU1REQVRBVVJMLCBlbmNvZGluZz0idXRmLTgiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPWNoZWNrX3ZlcnNpb24pCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIFRFU1REQVRBVVJMKQogICAgICAgICBzZWxmLmFkZENsZWFudXAodGVzdGRhdGEuY2xvc2UpCiAgICAgICAgIGZvciBsaW5lIGluIHRlc3RkYXRhOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9udHBhdGgucHkgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQppbmRleCBlOWUxZDcxLi5kYWNkZGRlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X250cGF0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X250cGF0aC5weQpAQCAtMjM3LDYgKzIzNyw3IEBACiAgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCIlP2JhciUiKScsICIlP2JhciUiKQogICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdmFycygiJWZvbyUlYmFyIiknLCAiYmFyJWJhciIpCiAgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCJcJyVmb28lXCclYmFyIiknLCAiXCclZm9vJVwnJWJhciIpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR2YXJzKCJiYXJcJyVmb28lIiknLCAiYmFyXCclZm9vJSIpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LkZTX05PTkFTQ0lJLCAnbmVlZCBzdXBwb3J0LkZTX05PTkFTQ0lJJykKICAgICBkZWYgdGVzdF9leHBhbmR2YXJzX25vbmFzY2lpKHNlbGYpOgpAQCAtMjU4LDYgKzI1OSw0MSBAQAogICAgICAgICAgICAgY2hlY2soJyVzcGFtJWJhcicsICclc2JhcicgJSBub25hc2NpaSkKICAgICAgICAgICAgIGNoZWNrKCcle30lYmFyJy5mb3JtYXQobm9uYXNjaWkpLCAnaGFtJXNiYXInICUgbm9uYXNjaWkpCiAKKyAgICBkZWYgdGVzdF9leHBhbmR1c2VyKHNlbGYpOgorICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ0ZXN0IiknLCAndGVzdCcpCisKKyAgICAgICAgd2l0aCBzdXBwb3J0LkVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnY6CisgICAgICAgICAgICBlbnYuY2xlYXIoKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifnRlc3QiKScsICd+dGVzdCcpCisKKyAgICAgICAgICAgIGVudlsnSE9NRVBBVEgnXSA9ICdlcmljXFxpZGxlJworICAgICAgICAgICAgZW52WydIT01FRFJJVkUnXSA9ICdDOlxcJworICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifnRlc3QiKScsICdDOlxcZXJpY1xcdGVzdCcpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+IiknLCAnQzpcXGVyaWNcXGlkbGUnKQorCisgICAgICAgICAgICBkZWwgZW52WydIT01FRFJJVkUnXQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifnRlc3QiKScsICdlcmljXFx0ZXN0JykKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn4iKScsICdlcmljXFxpZGxlJykKKworICAgICAgICAgICAgZW52LmNsZWFyKCkKKyAgICAgICAgICAgIGVudlsnVVNFUlBST0ZJTEUnXSA9ICdDOlxcZXJpY1xcaWRsZScKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn50ZXN0IiknLCAnQzpcXGVyaWNcXHRlc3QnKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifiIpJywgJ0M6XFxlcmljXFxpZGxlJykKKworICAgICAgICAgICAgZW52LmNsZWFyKCkKKyAgICAgICAgICAgIGVudlsnSE9NRSddID0gJ0M6XFxpZGxlXFxlcmljJworICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifnRlc3QiKScsICdDOlxcaWRsZVxcdGVzdCcpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+IiknLCAnQzpcXGlkbGVcXGVyaWMnKQorCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+dGVzdFxcZm9vXFxiYXIiKScsCisgICAgICAgICAgICAgICAgICAgJ0M6XFxpZGxlXFx0ZXN0XFxmb29cXGJhcicpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5leHBhbmR1c2VyKCJ+dGVzdC9mb28vYmFyIiknLAorICAgICAgICAgICAgICAgICAgICdDOlxcaWRsZVxcdGVzdC9mb28vYmFyJykKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLmV4cGFuZHVzZXIoIn5cXGZvb1xcYmFyIiknLAorICAgICAgICAgICAgICAgICAgICdDOlxcaWRsZVxcZXJpY1xcZm9vXFxiYXInKQorICAgICAgICAgICAgdGVzdGVyKCdudHBhdGguZXhwYW5kdXNlcigifi9mb28vYmFyIiknLAorICAgICAgICAgICAgICAgICAgICdDOlxcaWRsZVxcZXJpYy9mb28vYmFyJykKKwogICAgIGRlZiB0ZXN0X2Fic3BhdGgoc2VsZik6CiAgICAgICAgICMgbnRwYXRoLmFic3BhdGgoKSBjYW4gb25seSBiZSB1c2VkIG9uIGEgc3lzdGVtIHdpdGggdGhlICJudCIgbW9kdWxlCiAgICAgICAgICMgKHJlYXNvbmFibHkpLCBzbyB3ZSBwcm90ZWN0IHRoaXMgdGVzdCB3aXRoICJpbXBvcnQgbnQiLiAgVGhpcyBhbGxvd3MKQEAgLTI3MSwxMyArMzA3LDE0IEBACiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdudCBtb2R1bGUgbm90IGF2YWlsYWJsZScpCiAKICAgICBkZWYgdGVzdF9yZWxwYXRoKHNlbGYpOgotICAgICAgICBjdXJyZW50ZGlyID0gb3MucGF0aC5zcGxpdChvcy5nZXRjd2QoKSlbLTFdCiAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEiKScsICdhJykKICAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aChvcy5wYXRoLmFic3BhdGgoImEiKSknLCAnYScpCiAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEvYiIpJywgJ2FcXGInKQogICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCIuLi9hL2IiKScsICcuLlxcYVxcYicpCi0gICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEiLCAiLi4vYiIpJywgJy4uXFwnK2N1cnJlbnRkaXIrJ1xcYScpCi0gICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEvYiIsICIuLi9jIiknLCAnLi5cXCcrY3VycmVudGRpcisnXFxhXFxiJykKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHN1cHBvcnQuVEVTVEZOKSBhcyBjd2RfZGlyOgorICAgICAgICAgICAgY3VycmVudGRpciA9IG9zLnBhdGguYmFzZW5hbWUoY3dkX2RpcikKKyAgICAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEiLCAiLi4vYiIpJywgJy4uXFwnK2N1cnJlbnRkaXIrJ1xcYScpCisgICAgICAgICAgICB0ZXN0ZXIoJ250cGF0aC5yZWxwYXRoKCJhL2IiLCAiLi4vYyIpJywgJy4uXFwnK2N1cnJlbnRkaXIrJ1xcYVxcYicpCiAgICAgICAgIHRlc3RlcignbnRwYXRoLnJlbHBhdGgoImEiLCAiYi9jIiknLCAnLi5cXC4uXFxhJykKICAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiYzovZm9vL2Jhci9iYXQiLCAiYzoveC95IiknLCAnLi5cXC4uXFxmb29cXGJhclxcYmF0JykKICAgICAgICAgdGVzdGVyKCdudHBhdGgucmVscGF0aCgiLy9jb25reS9tb3VudHBvaW50L2EiLCAiLy9jb25reS9tb3VudHBvaW50L2IvYyIpJywgJy4uXFwuLlxcYScpCkBAIC0zMDYsNiArMzQzLDQwIEBACiAgICAgICAgICAgICAgICAgICAgICMgZGlhbG9ncyAoIzQ4MDQpCiAgICAgICAgICAgICAgICAgICAgIG50cGF0aC5zYW1lb3BlbmZpbGUoLTEsIC0xKQogCisgICAgZGVmIHRlc3RfaXNtb3VudChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KCJjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiQzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoImM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIkM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoIlxcXFwuXFxjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXC5cXEM6XFwiKSkKKworICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJjOlxcIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIkM6XFwiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiYzovIikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudChiIkM6LyIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcLlxcYzpcXCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcLlxcQzpcXCIpKQorCisgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2RpcigpIGFzIGQ6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGQpKQorCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBNYWtlIHN1cmUgdGhlIGN1cnJlbnQgZm9sZGVyIGlzbid0IHRoZSByb290IGZvbGRlcgorICAgICAgICAgICAgIyAob3IgYW55IG90aGVyIHZvbHVtZSByb290KS4gVGhlIGRyaXZlLXJlbGF0aXZlCisgICAgICAgICAgICAjIGxvY2F0aW9ucyBiZWxvdyBjYW5ub3QgdGhlbiByZWZlciB0byBtb3VudCBwb2ludHMKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGRyaXZlLCBwYXRoID0gbnRwYXRoLnNwbGl0ZHJpdmUoc3lzLmV4ZWN1dGFibGUpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChvcy5wYXRoLmRpcm5hbWUoc3lzLmV4ZWN1dGFibGUpKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG50cGF0aC5pc21vdW50KGRyaXZlLmxvd2VyKCkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobnRwYXRoLmlzbW91bnQoZHJpdmUudXBwZXIoKSkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXGxvY2FsaG9zdFxcYyQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShudHBhdGguaXNtb3VudCgiXFxcXGxvY2FsaG9zdFxcYyRcXCIpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnRwYXRoLmlzbW91bnQoYiJcXFxcbG9jYWxob3N0XFxjJCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG50cGF0aC5pc21vdW50KGIiXFxcXGxvY2FsaG9zdFxcYyRcXCIpKQogCiBjbGFzcyBOdENvbW1vblRlc3QodGVzdF9nZW5lcmljcGF0aC5Db21tb25UZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgcGF0aG1vZHVsZSA9IG50cGF0aApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5IGIvTGliL3Rlc3QvdGVzdF9vcGVucHR5LnB5CmluZGV4IDYzODQzNzAuLjQ3ODUxMDcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3BlbnB0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZW5wdHkucHkKQEAgLTQsNyArNCw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0CiAKIGlmIG5vdCBoYXNhdHRyKG9zLCAib3BlbnB0eSIpOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJObyBvcGVucHR5KCkgYXZhaWxhYmxlLiIpCisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLm9wZW5wdHkoKSBub3QgYXZhaWxhYmxlLiIpCiAKIAogY2xhc3MgT3BlbnB0eVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weSBiL0xpYi90ZXN0L3Rlc3Rfb3BlcmF0b3IucHkKaW5kZXggZmE2MDhiOS4uYWI1OGE5OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9vcGVyYXRvci5weQorKysgYi9MaWIvdGVzdC90ZXN0X29wZXJhdG9yLnB5CkBAIC0xLDggKzEsMTAgQEAKLWltcG9ydCBvcGVyYXRvcgogaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCitweV9vcGVyYXRvciA9IHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgnb3BlcmF0b3InLCBibG9ja2VkPVsnX29wZXJhdG9yJ10pCitjX29wZXJhdG9yID0gc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCdvcGVyYXRvcicsIGZyZXNoPVsnX29wZXJhdG9yJ10pCisKIGNsYXNzIFNlcTE6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CiAgICAgICAgIHNlbGYubHN0ID0gbHN0CkBAIC0zMiw4ICszNCw5IEBACiAgICAgICAgIHJldHVybiBvdGhlciAqIHNlbGYubHN0CiAKIAotY2xhc3MgT3BlcmF0b3JUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBPcGVyYXRvclRlc3RDYXNlOgogICAgIGRlZiB0ZXN0X2x0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHQsIDFqLCAyaikKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5sdCgxLCAwKSkKQEAgLTQ0LDYgKzQ3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmx0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9sZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxlLCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3BlcmF0b3IubGUoMSwgMCkpCkBAIC01NCw2ICs1OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZXEoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTY3LDYgKzcyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5lcSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfbmUoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IKQEAgLTgwLDYgKzg2LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm5lKDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9nZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdlLCAxaiwgMmopCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5nZSgxLCAwKSkKQEAgLTkwLDYgKzk3LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5nZSgxLCAyLjApKQogCiAgICAgZGVmIHRlc3RfZ3Qoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5ndCwgMWosIDJqKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZ3QoMSwgMCkpCkBAIC0xMDAsMjIgKzEwOCwyNiBAQAogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmd0KDEsIDIuMCkpCiAKICAgICBkZWYgdGVzdF9hYnMoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hYnMpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWJzLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmFicygtMSksIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuYWJzKDEpLCAxKQogCiAgICAgZGVmIHRlc3RfYWRkKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuYWRkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFkZCwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmFkZCgzLCA0KSA9PSA3KQogCiAgICAgZGVmIHRlc3RfYml0d2lzZV9hbmQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5hbmRfKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmFuZF8sIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5hbmRfKDB4ZiwgMHhhKSA9PSAweGEpCiAKICAgICBkZWYgdGVzdF9jb25jYXQoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5jb25jYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY29uY2F0LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29uY2F0KCdweScsICd0aG9uJykgPT0gJ3B5dGhvbicpCkBAIC0xMjUsMTIgKzEzNywxNCBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbmNhdCwgMTMsIDI5KQogCiAgICAgZGVmIHRlc3RfY291bnRPZihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvdW50T2YpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuY291bnRPZiwgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmNvdW50T2YoWzEsIDIsIDEsIDMsIDEsIDRdLCAzKSA9PSAxKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY291bnRPZihbMSwgMiwgMSwgMywgMSwgNF0sIDUpID09IDApCiAKICAgICBkZWYgdGVzdF9kZWxpdGVtKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBbNCwgMywgMiwgMV0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5kZWxpdGVtLCBhKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmRlbGl0ZW0sIGEsIE5vbmUpCkBAIC0xMzgsMzMgKzE1MiwzOSBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoYSA9PSBbNCwgMiwgMV0pCiAKICAgICBkZWYgdGVzdF9mbG9vcmRpdihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCA1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmZsb29yZGl2LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuZmxvb3JkaXYoNSwgMikgPT0gMikKIAogICAgIGRlZiB0ZXN0X3RydWVkaXYoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci50cnVlZGl2LCA1KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnRydWVkaXYsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci50cnVlZGl2KDUsIDIpID09IDIuNSkKIAogICAgIGRlZiB0ZXN0X2dldGl0ZW0oc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IHJhbmdlKDEwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmdldGl0ZW0pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuZ2V0aXRlbSwgYSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLmdldGl0ZW0oYSwgMikgPT0gMikKIAogICAgIGRlZiB0ZXN0X2luZGV4T2Yoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pbmRleE9mKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmluZGV4T2YsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pbmRleE9mKFs0LCAzLCAyLCAxXSwgMykgPT0gMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3BlcmF0b3IuaW5kZXhPZiwgWzQsIDMsIDIsIDFdLCAwKQogCiAgICAgZGVmIHRlc3RfaW52ZXJ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaW52ZXJ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmludmVydCwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pbnYoNCksIC01KQogCiAgICAgZGVmIHRlc3RfbHNoaWZ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubHNoaWZ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmxzaGlmdCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5sc2hpZnQoNSwgMSkgPT0gMTApCkBAIC0xNzIsMTYgKzE5MiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBvcGVyYXRvci5sc2hpZnQsIDIsIC0xKQogCiAgICAgZGVmIHRlc3RfbW9kKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubW9kKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1vZCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tb2QoNSwgMikgPT0gMSkKIAogICAgIGRlZiB0ZXN0X211bChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm11bCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5tdWwsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5tdWwoNSwgMikgPT0gMTApCiAKICAgICBkZWYgdGVzdF9uZWcoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5uZWcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IubmVnLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLm5lZyg1KSwgLTUpCkBAIC0xOTAsMTEgKzIxMywxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLm5lZygtMCksIDApCiAKICAgICBkZWYgdGVzdF9iaXR3aXNlX29yKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iub3JfKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm9yXywgTm9uZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wZXJhdG9yLm9yXygweGEsIDB4NSkgPT0gMHhmKQogCiAgICAgZGVmIHRlc3RfcG9zKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG9zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnBvcywgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5wb3MoNSksIDUpCkBAIC0yMDMsMTQgKzIyOCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLnBvcygtMCksIDApCiAKICAgICBkZWYgdGVzdF9wb3coc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3cpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLnBvdygzLDUpLCAzKio1KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9fcG93X18oMyw1KSwgMyoqNSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5wb3csIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucG93LCAxLCAyLCAzKQogCiAgICAgZGVmIHRlc3RfcnNoaWZ0KHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IucnNoaWZ0KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgTm9uZSwgNDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5yc2hpZnQoNSwgMSkgPT0gMikKQEAgLTIxOCwxMiArMjQ0LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9wZXJhdG9yLnJzaGlmdCwgMiwgLTEpCiAKICAgICBkZWYgdGVzdF9jb250YWlucyhzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLmNvbnRhaW5zLCBOb25lLCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3BlcmF0b3IuY29udGFpbnMocmFuZ2UoNCksIDIpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9wZXJhdG9yLmNvbnRhaW5zKHJhbmdlKDQpLCA1KSkKIAogICAgIGRlZiB0ZXN0X3NldGl0ZW0oc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9IGxpc3QocmFuZ2UoMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zZXRpdGVtLCBhLCBOb25lLCBOb25lKQpAQCAtMjMyLDExICsyNjAsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgb3BlcmF0b3Iuc2V0aXRlbSwgYSwgNCwgMikKIAogICAgIGRlZiB0ZXN0X3N1YihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnN1YikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5zdWIsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5zdWIoNSwgMikgPT0gMykKIAogICAgIGRlZiB0ZXN0X3RydXRoKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGNsYXNzIEMob2JqZWN0KToKICAgICAgICAgICAgIGRlZiBfX2Jvb2xfXyhzZWxmKToKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcgpAQCAtMjQ4LDExICsyNzgsMTMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci50cnV0aChbXSkpCiAKICAgICBkZWYgdGVzdF9iaXR3aXNlX3hvcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLnhvcikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci54b3IsIE5vbmUsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci54b3IoMHhiLCAweGMpID09IDB4NykKIAogICAgIGRlZiB0ZXN0X2lzKHNlbGYpOgorICAgICAgICBvcGVyYXRvciA9IHNlbGYubW9kdWxlCiAgICAgICAgIGEgPSBiID0gJ3h5enBkcScKICAgICAgICAgYyA9IGFbOjNdICsgYlszOl0KICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcGVyYXRvci5pc18pCkBAIC0yNjAsNiArMjkyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcGVyYXRvci5pc18oYSxjKSkKIAogICAgIGRlZiB0ZXN0X2lzX25vdChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBhID0gYiA9ICd4eXpwZHEnCiAgICAgICAgIGMgPSBhWzozXSArIGJbMzpdCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3BlcmF0b3IuaXNfbm90KQpAQCAtMjY3LDYgKzMwMCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcGVyYXRvci5pc19ub3QoYSxjKSkKIAogICAgIGRlZiB0ZXN0X2F0dHJnZXR0ZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgYSA9IEEoKQpAQCAtMzE2LDYgKzM1MCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZihhKSwgKCdhcnRodXInLCAndGhvbWFzJywgJ2pvaG5zb24nKSkKIAogICAgIGRlZiB0ZXN0X2l0ZW1nZXR0ZXIoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKICAgICAgICAgYSA9ICdBQkNERScKICAgICAgICAgZiA9IG9wZXJhdG9yLml0ZW1nZXR0ZXIoMikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAnQycpCkBAIC0zNTAsMTIgKzM4NSwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLml0ZW1nZXR0ZXIoMiwgJ3gnLCA1KSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X21ldGhvZGNhbGxlcihzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9wZXJhdG9yLm1ldGhvZGNhbGxlcikKICAgICAgICAgY2xhc3MgQToKICAgICAgICAgICAgIGRlZiBmb28oc2VsZiwgKmFyZ3MsICoqa3dkcyk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF0gKyBhcmdzWzFdCiAgICAgICAgICAgICBkZWYgYmFyKHNlbGYsIGY9NDIpOgogICAgICAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgICAgICBkZWYgYmF6KCphcmdzLCAqKmt3ZHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBrd2RzWyduYW1lJ10sIGt3ZHNbJ3NlbGYnXQogICAgICAgICBhID0gQSgpCiAgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2ZvbycpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IsIGYsIGEpCkBAIC0zNjYsOCArNDA0LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZiwgYSwgYSkKICAgICAgICAgZiA9IG9wZXJhdG9yLm1ldGhvZGNhbGxlcignYmFyJywgZj01KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoYSksIDUpCisgICAgICAgIGYgPSBvcGVyYXRvci5tZXRob2RjYWxsZXIoJ2JheicsIG5hbWU9J3NwYW0nLCBzZWxmPSdlZ2dzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKGEpLCAoJ3NwYW0nLCAnZWdncycpKQogCiAgICAgZGVmIHRlc3RfaW5wbGFjZShzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQogICAgICAgICBjbGFzcyBDKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19pYWRkX18gICAgIChzZWxmLCBvdGhlcik6IHJldHVybiAiaWFkZCIKICAgICAgICAgICAgIGRlZiBfX2lhbmRfXyAgICAgKHNlbGYsIG90aGVyKTogcmV0dXJuICJpYW5kIgpAQCAtMzk2LDM3ICs0MzcsNDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5pdHJ1ZWRpdiAoYywgNSksICJpdHJ1ZWRpdiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaXhvciAgICAgKGMsIDUpLCAiaXhvciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuaWNvbmNhdCAgKGMsIGMpLCAiaWFkZCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pYWRkX18gICAgIChjLCA1KSwgImlhZGQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faWFuZF9fICAgICAoYywgNSksICJpYW5kIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lmbG9vcmRpdl9fKGMsIDUpLCAiaWZsb29yZGl2IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lsc2hpZnRfXyAgKGMsIDUpLCAiaWxzaGlmdCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pbW9kX18gICAgIChjLCA1KSwgImltb2QiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faW11bF9fICAgICAoYywgNSksICJpbXVsIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lvcl9fICAgICAgKGMsIDUpLCAiaW9yIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2lwb3dfXyAgICAgKGMsIDUpLCAiaXBvdyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IuX19pcnNoaWZ0X18gIChjLCA1KSwgImlyc2hpZnQiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXN1Yl9fICAgICAoYywgNSksICJpc3ViIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2l0cnVlZGl2X18gKGMsIDUpLCAiaXRydWVkaXYiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLl9faXhvcl9fICAgICAoYywgNSksICJpeG9yIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5fX2ljb25jYXRfXyAgKGMsIGMpLCAiaWFkZCIpCiAKLWRlZiB0ZXN0X21haW4odmVyYm9zZT1Ob25lKToKLSAgICBpbXBvcnQgc3lzCi0gICAgdGVzdF9jbGFzc2VzID0gKAotICAgICAgICBPcGVyYXRvclRlc3RDYXNlLAotICAgICkKKyAgICBkZWYgdGVzdF9sZW5ndGhfaGludChzZWxmKToKKyAgICAgICAgb3BlcmF0b3IgPSBzZWxmLm1vZHVsZQorICAgICAgICBjbGFzcyBYKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQogCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RfY2xhc3NlcykKKyAgICAgICAgICAgIGRlZiBfX2xlbmd0aF9oaW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgaWYgdHlwZShzZWxmLnZhbHVlKSBpcyB0eXBlOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBzZWxmLnZhbHVlCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKIAotICAgICMgdmVyaWZ5IHJlZmVyZW5jZSBjb3VudGluZwotICAgIGlmIHZlcmJvc2UgYW5kIGhhc2F0dHIoc3lzLCAiZ2V0dG90YWxyZWZjb3VudCIpOgotICAgICAgICBpbXBvcnQgZ2MKLSAgICAgICAgY291bnRzID0gW05vbmVdICogNQotICAgICAgICBmb3IgaSBpbiByYW5nZShsZW4oY291bnRzKSk6Ci0gICAgICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdF9jbGFzc2VzKQotICAgICAgICAgICAgZ2MuY29sbGVjdCgpCi0gICAgICAgICAgICBjb3VudHNbaV0gPSBzeXMuZ2V0dG90YWxyZWZjb3VudCgpCi0gICAgICAgIHByaW50KGNvdW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChbXSwgMiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3BlcmF0b3IubGVuZ3RoX2hpbnQoaXRlcihbMSwgMiwgM10pKSwgMykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoMikpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoTm90SW1wbGVtZW50ZWQpLCA0KSwgNCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcGVyYXRvci5sZW5ndGhfaGludChYKFR5cGVFcnJvciksIDEyKSwgMTIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aF9oaW50KFgoImFiYyIpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgb3BlcmF0b3IubGVuZ3RoX2hpbnQoWCgtMikpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoTG9va3VwRXJyb3IpOgorICAgICAgICAgICAgb3BlcmF0b3IubGVuZ3RoX2hpbnQoWChMb29rdXBFcnJvcikpCisKKyAgICBkZWYgdGVzdF9kdW5kZXJfaXNfb3JpZ2luYWwoc2VsZik6CisgICAgICAgIG9wZXJhdG9yID0gc2VsZi5tb2R1bGUKKworICAgICAgICBuYW1lcyA9IFtuYW1lIGZvciBuYW1lIGluIGRpcihvcGVyYXRvcikgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgnXycpXQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIG9yaWcgPSBnZXRhdHRyKG9wZXJhdG9yLCBuYW1lKQorICAgICAgICAgICAgZHVuZGVyID0gZ2V0YXR0cihvcGVyYXRvciwgJ19fJyArIG5hbWUuc3RyaXAoJ18nKSArICdfXycsIE5vbmUpCisgICAgICAgICAgICBpZiBkdW5kZXI6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhkdW5kZXIsIG9yaWcpCisKK2NsYXNzIFB5T3BlcmF0b3JUZXN0Q2FzZShPcGVyYXRvclRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gcHlfb3BlcmF0b3IKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoY19vcGVyYXRvciwgJ3JlcXVpcmVzIF9vcGVyYXRvcicpCitjbGFzcyBDT3BlcmF0b3JUZXN0Q2FzZShPcGVyYXRvclRlc3RDYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgbW9kdWxlID0gY19vcGVyYXRvcgogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF9vcHRwYXJzZS5weQppbmRleCBlYWVlNTA0Li43NjIxYzI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29wdHBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3B0cGFyc2UucHkKQEAgLTM5NSw2ICszOTUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLnBhcnNlci5yZW1vdmVfb3B0aW9uLCAoJ2ZvbycsKSwgTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWVFcnJvciwgIm5vIHN1Y2ggb3B0aW9uICdmb28nIikKIAorICAgIEBzdXBwb3J0LmltcGxfZGV0YWlsKCdSZWxpZXMgb24gc3lzLmdldHJlZmNvdW50JywgY3B5dGhvbj1UcnVlKQogICAgIGRlZiB0ZXN0X3JlZmxlYWsoc2VsZik6CiAgICAgICAgICMgSWYgYW4gT3B0aW9uUGFyc2VyIGlzIGNhcnJ5aW5nIGFyb3VuZCBhIHJlZmVyZW5jZSB0byBhIGxhcmdlCiAgICAgICAgICMgb2JqZWN0LCB2YXJpb3VzIGN5Y2xlcyBjYW4gcHJldmVudCBpdCBmcm9tIGJlaW5nIEdDJ2QgaW4KQEAgLTczMCw3ICs3MzEsNyBAQAogICAgIGRlZiB0ZXN0X3Nob3J0X2FuZF9sb25nX29wdGlvbl9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAieHl6IiwgIi0tZm9vIiwgImJhciJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogJ3h5eicsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9zcGxpdF9sb25nX29wdGlvbl9hcHBlbmQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi0tZm9vPWJhciIsICItYiIsICIxMjMiLCAiLS1mb28iLCAiYmF6Il0sCkBAIC03NDAsMTUgKzc0MSwxNSBAQAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9zcGxpdF9vbmVfcG9zaXRpb25hbF9hcmcoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UGFyc2VPSyhbIi1hIiwgImZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICJmb28iLCAnYm9vJzogTm9uZSwgJ2Zvbyc6IE5vbmV9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJiYXIiXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbImJhciJdKQogCiAgICAgZGVmIHRlc3Rfc2hvcnRfb3B0aW9uX2NvbnN1bWVzX3NlcGFyYXRvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWEiLCAiLS0iLCAiZm9vIiwgImJhciJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgeydhJzogIi0tIiwgJ2Jvbyc6IE5vbmUsICdmb28nOiBOb25lfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiZm9vIiwgImJhciJdKQogICAgICAgICBzZWxmLmFzc2VydFBhcnNlT0soWyItYSIsICItLSIsICItLWZvbyIsICJiYXIiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsnYSc6ICItLSIsICdib28nOiBOb25lLCAnZm9vJzogWyJiYXIiXX0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBbXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSkKIAogICAgIGRlZiB0ZXN0X3Nob3J0X29wdGlvbl9qb2luZWRfYW5kX3NlcGFyYXRvcihzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRQYXJzZU9LKFsiLWFiIiwgIi0tIiwgIi0tZm9vIiwgImJhciJdLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9vcmRlcmVkX2RpY3QucHkgYi9MaWIvdGVzdC90ZXN0X29yZGVyZWRfZGljdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDNlMzA5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9vcmRlcmVkX2RpY3QucHkKQEAgLTAsMCArMSwzMDIgQEAKK2ltcG9ydCBjb250ZXh0bGliCitpbXBvcnQgY29weQoraW1wb3J0IHBpY2tsZQorZnJvbSByYW5kb20gaW1wb3J0IHNodWZmbGUKK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgT3JkZXJlZERpY3QKK2Zyb20gY29sbGVjdGlvbnMuYWJjIGltcG9ydCBNdXRhYmxlTWFwcGluZworZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzLCBzdXBwb3J0CisKKworY2xhc3MgVGVzdE9yZGVyZWREaWN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2luaXQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMildLCBOb25lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncworICAgICAgICBwYWlycyA9IFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKE9yZGVyZWREaWN0KGRpY3QocGFpcnMpKS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAjIGRpY3QgaW5wdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQoT3JkZXJlZERpY3QoKipkaWN0KHBhaXJzKSkuaXRlbXMoKSksIHBhaXJzKSAgICAgICAgICMga3dkcyBpbnB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoT3JkZXJlZERpY3QocGFpcnMpLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgIyBwYWlycyBpbnB1dAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgOSksICgnZCcsIDQpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGM9MywgZT01KS5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICMgbWl4ZWQgaW5wdXQKKworICAgICAgICAjIG1ha2Ugc3VyZSBubyBwb3NpdGlvbmFsIGFyZ3MgY29uZmxpY3Qgd2l0aCBwb3NzaWJsZSBrd2RhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChPcmRlcmVkRGljdChzZWxmPTQyKS5pdGVtcygpKSwgWygnc2VsZicsIDQyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChPcmRlcmVkRGljdChvdGhlcj00MikuaXRlbXMoKSksIFsoJ290aGVyJywgNDIpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBPcmRlcmVkRGljdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgT3JkZXJlZERpY3QsICgpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBPcmRlcmVkRGljdC5fX2luaXRfXykKKworICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IGRpcmVjdCBjYWxscyB0byBfX2luaXRfXyBkbyBub3QgY2xlYXIgcHJldmlvdXMgY29udGVudHMKKyAgICAgICAgZCA9IE9yZGVyZWREaWN0KFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0NCksICgnZScsIDU1KV0pCisgICAgICAgIGQuX19pbml0X18oWygnZScsIDUpLCAoJ2YnLCA2KV0sIGc9NywgZD00KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5pdGVtcygpKSwKKyAgICAgICAgICAgIFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpLCAoJ2cnLCA3KV0pCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIE9yZGVyZWREaWN0KCkudXBkYXRlKFsoJ2EnLCAxKSwgKCdiJywgMildLCBOb25lKSAgICAgICAgICAgICAgICAgICAgICAgICMgdG9vIG1hbnkgYXJncworICAgICAgICBwYWlycyA9IFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSldCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUoZGljdChwYWlycykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG9kLml0ZW1zKCkpLCBwYWlycykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRpY3QgaW5wdXQKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZSgqKmRpY3QocGFpcnMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBrd2RzIGlucHV0CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUocGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHBhaXJzIGlucHV0CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgOSksICgnZCcsIDQpXSwgYz0zLCBlPTUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIG1peGVkIGlucHV0CisKKyAgICAgICAgIyBJc3N1ZSA5MTM3OiBOYW1lZCBhcmd1bWVudCBjYWxsZWQgJ290aGVyJyBvciAnc2VsZicKKyAgICAgICAgIyBzaG91bGRuJ3QgYmUgdHJlYXRlZCBzcGVjaWFsbHkuCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUoc2VsZj0yMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdzZWxmJywgMjMpXSkKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kLnVwZGF0ZShvdGhlcj17fSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kLml0ZW1zKCkpLCBbKCdvdGhlcicsIHt9KV0pCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZC51cGRhdGUocmVkPTUsIGJsdWU9Niwgb3RoZXI9Nywgc2VsZj04KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvcnRlZChsaXN0KG9kLml0ZW1zKCkpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdibHVlJywgNiksICgnb3RoZXInLCA3KSwgKCdyZWQnLCA1KSwgKCdzZWxmJywgOCldKQorCisgICAgICAgICMgTWFrZSBzdXJlIHRoYXQgZGlyZWN0IGNhbGxzIHRvIHVwZGF0ZSBkbyBub3QgY2xlYXIgcHJldmlvdXMgY29udGVudHMKKyAgICAgICAgIyBhZGQgdGhhdCB1cGRhdGVzIGl0ZW1zIGFyZSBub3QgbW92ZWQgdG8gdGhlIGVuZAorICAgICAgICBkID0gT3JkZXJlZERpY3QoWygnYScsIDEpLCAoJ2InLCAyKSwgKCdjJywgMyksICgnZCcsIDQ0KSwgKCdlJywgNTUpXSkKKyAgICAgICAgZC51cGRhdGUoWygnZScsIDUpLCAoJ2YnLCA2KV0sIGc9NywgZD00KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5pdGVtcygpKSwKKyAgICAgICAgICAgIFsoJ2EnLCAxKSwgKCdiJywgMiksICgnYycsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpLCAoJ2cnLCA3KV0pCisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBPcmRlcmVkRGljdCgpLnVwZGF0ZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgT3JkZXJlZERpY3QoKS51cGRhdGUsICgpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBPcmRlcmVkRGljdC51cGRhdGUpCisKKyAgICBkZWYgdGVzdF9hYmMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShPcmRlcmVkRGljdCgpLCBNdXRhYmxlTWFwcGluZykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoT3JkZXJlZERpY3QsIE11dGFibGVNYXBwaW5nKSkKKworICAgIGRlZiB0ZXN0X2NsZWFyKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIGxlbihwYWlycykpCisgICAgICAgIG9kLmNsZWFyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQorCisgICAgZGVmIHRlc3RfZGVsaXRlbShzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgZGVsIG9kWydhJ10KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYScsIG9kKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIGRlbCBvZFsnYSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnNbOjJdICsgcGFpcnNbMzpdKQorCisgICAgZGVmIHRlc3Rfc2V0aXRlbShzZWxmKToKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChbKCdkJywgMSksICgnYicsIDIpLCAoJ2MnLCAzKSwgKCdhJywgNCksICgnZScsIDUpXSkKKyAgICAgICAgb2RbJ2MnXSA9IDEwICAgICAgICAgICAjIGV4aXN0aW5nIGVsZW1lbnQKKyAgICAgICAgb2RbJ2YnXSA9IDIwICAgICAgICAgICAjIG5ldyBlbGVtZW50CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBbKCdkJywgMSksICgnYicsIDIpLCAoJ2MnLCAxMCksICgnYScsIDQpLCAoJ2UnLCA1KSwgKCdmJywgMjApXSkKKworICAgIGRlZiB0ZXN0X2l0ZXJhdG9ycyhzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgW3RbMF0gZm9yIHQgaW4gcGFpcnNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2Qua2V5cygpKSwgW3RbMF0gZm9yIHQgaW4gcGFpcnNdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QudmFsdWVzKCkpLCBbdFsxXSBmb3IgdCBpbiBwYWlyc10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKSwgcGFpcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyZXZlcnNlZChvZCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFt0WzBdIGZvciB0IGluIHJldmVyc2VkKHBhaXJzKV0pCisKKyAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICB3aGlsZSBwYWlyczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9waXRlbSgpLCBwYWlycy5wb3AoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBvZC5wb3BpdGVtKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob2QpLCAwKQorCisgICAgZGVmIHRlc3RfcG9wKHNlbGYpOgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzaHVmZmxlKHBhaXJzKQorICAgICAgICB3aGlsZSBwYWlyczoKKyAgICAgICAgICAgIGssIHYgPSBwYWlycy5wb3AoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvZC5wb3AoayksIHYpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpOgorICAgICAgICAgICAgb2QucG9wKCd4eXonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihvZCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2QucG9wKGssIDEyMzQ1KSwgMTIzNDUpCisKKyAgICAgICAgIyBtYWtlIHN1cmUgcG9wIHN0aWxsIHdvcmtzIHdoZW4gX19taXNzaW5nX18gaXMgZGVmaW5lZAorICAgICAgICBjbGFzcyBNaXNzaW5nKE9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIG0gPSBNaXNzaW5nKGE9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLnBvcCgnYicsIDUpLCA1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0ucG9wKCdhJywgNiksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5wb3AoJ2EnLCA2KSwgNikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBtLnBvcCgnYScpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgc2h1ZmZsZShwYWlycykKKyAgICAgICAgb2QxID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIG9kMiA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kMSwgb2QyKSAgICAgICAgICAjIHNhbWUgb3JkZXIgaW1wbGllcyBlcXVhbGl0eQorICAgICAgICBwYWlycyA9IHBhaXJzWzI6XSArIHBhaXJzWzoyXQorICAgICAgICBvZDIgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChvZDEsIG9kMikgICAgICAgIyBkaWZmZXJlbnQgb3JkZXIgaW1wbGllcyBpbmVxdWFsaXR5CisgICAgICAgICMgY29tcGFyaXNvbiB0byByZWd1bGFyIGRpY3QgaXMgbm90IG9yZGVyIHNlbnNpdGl2ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9kMSwgZGljdChvZDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3Qob2QyKSwgb2QxKQorICAgICAgICAjIGRpZmZlcmVudCBsZW5ndGggaW1wbGllZCBpbmVxdWFsaXR5CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob2QxLCBPcmRlcmVkRGljdChwYWlyc1s6LTFdKSkKKworICAgIGRlZiB0ZXN0X2NvcHlpbmcoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBvcmRlcmVkIGRpY3RzIGFyZSBjb3B5YWJsZSwgZGVlcGNvcHlhYmxlLCBwaWNrbGFibGUsCisgICAgICAgICMgYW5kIGhhdmUgYSByZXByL2V2YWwgcm91bmQtdHJpcAorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICBkZWYgY2hlY2soZHVwKToKKyAgICAgICAgICAgIG1zZyA9ICJcbmNvcHk6ICVzXG5vZDogJXMiICUgKGR1cCwgb2QpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KGR1cCwgb2QsIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZHVwLCBvZCkKKyAgICAgICAgY2hlY2sob2QuY29weSgpKQorICAgICAgICBjaGVjayhjb3B5LmNvcHkob2QpKQorICAgICAgICBjaGVjayhjb3B5LmRlZXBjb3B5KG9kKSkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90bz1wcm90byk6CisgICAgICAgICAgICAgICAgY2hlY2socGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgcHJvdG8pKSkKKyAgICAgICAgY2hlY2soZXZhbChyZXByKG9kKSkpCisgICAgICAgIHVwZGF0ZV90ZXN0ID0gT3JkZXJlZERpY3QoKQorICAgICAgICB1cGRhdGVfdGVzdC51cGRhdGUob2QpCisgICAgICAgIGNoZWNrKHVwZGF0ZV90ZXN0KQorICAgICAgICBjaGVjayhPcmRlcmVkRGljdChvZCkpCisKKyAgICBkZWYgdGVzdF95YW1sX2xpbmthZ2Uoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgX19yZWR1Y2VfXyBpcyBzZXR1cCBpbiBhIHdheSB0aGF0IHN1cHBvcnRzIFB5WUFNTCdzIGR1bXAoKSBmZWF0dXJlLgorICAgICAgICAjIEluIHlhbWwsIGxpc3RzIGFyZSBuYXRpdmUgYnV0IHR1cGxlcyBhcmUgbm90LgorICAgICAgICBwYWlycyA9IFsoJ2MnLCAxKSwgKCdiJywgMiksICgnYScsIDMpLCAoJ2QnLCA0KSwgKCdlJywgNSksICgnZicsIDYpXQorICAgICAgICBvZCA9IE9yZGVyZWREaWN0KHBhaXJzKQorICAgICAgICAjIHlhbWwuZHVtcChvZCkgLS0+CisgICAgICAgICMgJyEhcHl0aG9uL29iamVjdC9hcHBseTpfX21haW5fXy5PcmRlcmVkRGljdFxuLSAtIFthLCAxXVxuICAtIFtiLCAyXVxuJworICAgICAgICBzZWxmLmFzc2VydFRydWUoYWxsKHR5cGUocGFpcik9PWxpc3QgZm9yIHBhaXIgaW4gb2QuX19yZWR1Y2VfXygpWzFdKSkKKworICAgIGRlZiB0ZXN0X3JlZHVjZV9ub3RfdG9vX2ZhdChzZWxmKToKKyAgICAgICAgIyBkbyBub3Qgc2F2ZSBpbnN0YW5jZSBkaWN0aW9uYXJ5IGlmIG5vdCBuZWVkZWQKKyAgICAgICAgcGFpcnMgPSBbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0KKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChwYWlycykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUob2QuX19yZWR1Y2VfXygpWzJdKQorICAgICAgICBvZC54ID0gMTAKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUob2QuX19yZWR1Y2VfXygpWzJdKQorCisgICAgZGVmIHRlc3RfcGlja2xlX3JlY3Vyc2l2ZShzZWxmKToKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdCgpCisgICAgICAgIG9kWzFdID0gb2QKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKC0xLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZHVwID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhvZCwgcHJvdG8pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChkdXAsIG9kKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGR1cC5rZXlzKCkpLCBbMV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGR1cFsxXSwgZHVwKQorCisgICAgZGVmIHRlc3RfcmVwcihzZWxmKToKKyAgICAgICAgb2QgPSBPcmRlcmVkRGljdChbKCdjJywgMSksICgnYicsIDIpLCAoJ2EnLCAzKSwgKCdkJywgNCksICgnZScsIDUpLCAoJ2YnLCA2KV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihvZCksCisgICAgICAgICAgICAiT3JkZXJlZERpY3QoWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildKSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXByKG9kKSksIG9kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIoT3JkZXJlZERpY3QoKSksICJPcmRlcmVkRGljdCgpIikKKworICAgIGRlZiB0ZXN0X3JlcHJfcmVjdXJzaXZlKHNlbGYpOgorICAgICAgICAjIFNlZSBpc3N1ZSAjOTgyNgorICAgICAgICBvZCA9IE9yZGVyZWREaWN0LmZyb21rZXlzKCdhYmMnKQorICAgICAgICBvZFsneCddID0gb2QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG9kKSwKKyAgICAgICAgICAgICJPcmRlcmVkRGljdChbKCdhJywgTm9uZSksICgnYicsIE5vbmUpLCAoJ2MnLCBOb25lKSwgKCd4JywgLi4uKV0pIikKKworICAgIGRlZiB0ZXN0X3NldGRlZmF1bHQoc2VsZik6CisgICAgICAgIHBhaXJzID0gWygnYycsIDEpLCAoJ2InLCAyKSwgKCdhJywgMyksICgnZCcsIDQpLCAoJ2UnLCA1KSwgKCdmJywgNildCisgICAgICAgIHNodWZmbGUocGFpcnMpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QocGFpcnMpCisgICAgICAgIHBhaXJfb3JkZXIgPSBsaXN0KG9kLml0ZW1zKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Quc2V0ZGVmYXVsdCgnYScsIDEwKSwgMykKKyAgICAgICAgIyBtYWtlIHN1cmUgb3JkZXIgZGlkbid0IGNoYW5nZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIHBhaXJfb3JkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2Quc2V0ZGVmYXVsdCgneCcsIDEwKSwgMTApCisgICAgICAgICMgbWFrZSBzdXJlICd4JyBpcyBhZGRlZCB0byB0aGUgZW5kCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZC5pdGVtcygpKVstMV0sICgneCcsIDEwKSkKKworICAgICAgICAjIG1ha2Ugc3VyZSBzZXRkZWZhdWx0IHN0aWxsIHdvcmtzIHdoZW4gX19taXNzaW5nX18gaXMgZGVmaW5lZAorICAgICAgICBjbGFzcyBNaXNzaW5nKE9yZGVyZWREaWN0KToKKyAgICAgICAgICAgIGRlZiBfX21pc3NpbmdfXyhzZWxmLCBrZXkpOgorICAgICAgICAgICAgICAgIHJldHVybiAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTWlzc2luZygpLnNldGRlZmF1bHQoNSwgOSksIDkpCisKKyAgICBkZWYgdGVzdF9yZWluc2VydChzZWxmKToKKyAgICAgICAgIyBHaXZlbiBpbnNlcnQgYSwgaW5zZXJ0IGIsIGRlbGV0ZSBhLCByZS1pbnNlcnQgYSwKKyAgICAgICAgIyB2ZXJpZnkgdGhhdCBhIGlzIG5vdyBsYXRlciB0aGFuIGIuCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKQorICAgICAgICBvZFsnYSddID0gMQorICAgICAgICBvZFsnYiddID0gMgorICAgICAgICBkZWwgb2RbJ2EnXQorICAgICAgICBvZFsnYSddID0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QuaXRlbXMoKSksIFsoJ2InLCAyKSwgKCdhJywgMSldKQorCisgICAgZGVmIHRlc3RfbW92ZV90b19lbmQoc2VsZik6CisgICAgICAgIG9kID0gT3JkZXJlZERpY3QuZnJvbWtleXMoJ2FiY2RlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnYWJjZGUnKSkKKyAgICAgICAgb2QubW92ZV90b19lbmQoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdhYmRlYycpKQorICAgICAgICBvZC5tb3ZlX3RvX2VuZCgnYycsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChvZCksIGxpc3QoJ2NhYmRlJykpCisgICAgICAgIG9kLm1vdmVfdG9fZW5kKCdjJywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG9kKSwgbGlzdCgnY2FiZGUnKSkKKyAgICAgICAgb2QubW92ZV90b19lbmQoJ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qob2QpLCBsaXN0KCdjYWJkZScpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yKToKKyAgICAgICAgICAgIG9kLm1vdmVfdG9fZW5kKCd4JykKKworICAgIGRlZiB0ZXN0X3NpemVvZihzZWxmKToKKyAgICAgICAgIyBXaW1weSB0ZXN0OiBKdXN0IHZlcmlmeSB0aGUgcmVwb3J0ZWQgc2l6ZSBpcyBsYXJnZXIgdGhhbiBhIHJlZ3VsYXIgZGljdAorICAgICAgICBkID0gZGljdChhPTEpCisgICAgICAgIG9kID0gT3JkZXJlZERpY3QoKipkKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoc3lzLmdldHNpemVvZihvZCksIHN5cy5nZXRzaXplb2YoZCkpCisKKyAgICBkZWYgdGVzdF9vdmVycmlkZV91cGRhdGUoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgc3ViY2xhc3NlcyBjYW4gb3ZlcnJpZGUgdXBkYXRlKCkgd2l0aG91dCBicmVha2luZyBfX2luaXRfXygpCisgICAgICAgIGNsYXNzIE15T0QoT3JkZXJlZERpY3QpOgorICAgICAgICAgICAgZGVmIHVwZGF0ZShzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oKQorICAgICAgICBpdGVtcyA9IFsoJ2EnLCAxKSwgKCdjJywgMyksICgnYicsIDIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoTXlPRChpdGVtcykuaXRlbXMoKSksIGl0ZW1zKQorCitjbGFzcyBHZW5lcmFsTWFwcGluZ1Rlc3RzKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKyAgICB0eXBlMnRlc3QgPSBPcmRlcmVkRGljdAorCisgICAgZGVmIHRlc3RfcG9waXRlbShzZWxmKToKKyAgICAgICAgZCA9IHNlbGYuX2VtcHR5X21hcHBpbmcoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZC5wb3BpdGVtKQorCitjbGFzcyBNeU9yZGVyZWREaWN0KE9yZGVyZWREaWN0KToKKyAgICBwYXNzCisKK2NsYXNzIFN1YmNsYXNzTWFwcGluZ1Rlc3RzKG1hcHBpbmdfdGVzdHMuQmFzaWNUZXN0TWFwcGluZ1Byb3RvY29sKToKKyAgICB0eXBlMnRlc3QgPSBNeU9yZGVyZWREaWN0CisKKyAgICBkZWYgdGVzdF9wb3BpdGVtKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5fZW1wdHlfbWFwcGluZygpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBkLnBvcGl0ZW0pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkgYi9MaWIvdGVzdC90ZXN0X29zLnB5CmluZGV4IDU2MzA5YmYuLmUyOWIwZDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfb3MucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9vcy5weQpAQCAtMiwyOCArMiwzMiBAQAogIyBkb2VzIGFkZCB0ZXN0cyBmb3IgYSBmZXcgZnVuY3Rpb25zIHdoaWNoIGhhdmUgYmVlbiBkZXRlcm1pbmVkIHRvIGJlIG1vcmUKICMgcG9ydGFibGUgdGhhbiB0aGV5IGhhZCBiZWVuIHRob3VnaHQgdG8gYmUuCiAKLWltcG9ydCBvcwotaW1wb3J0IGVycm5vCi1pbXBvcnQgdW5pdHRlc3QKLWltcG9ydCB3YXJuaW5ncwotaW1wb3J0IHN5cwotaW1wb3J0IHNpZ25hbAotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB0aW1lCi1pbXBvcnQgc2h1dGlsCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBhc3luY2hhdAoraW1wb3J0IGFzeW5jb3JlCitpbXBvcnQgY29kZWNzCiBpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGRlY2ltYWwKK2ltcG9ydCBlcnJubworaW1wb3J0IGZyYWN0aW9ucworaW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IGxvY2FsZQogaW1wb3J0IG1tYXAKK2ltcG9ydCBvcworaW1wb3J0IHBpY2tsZQogaW1wb3J0IHBsYXRmb3JtCiBpbXBvcnQgcmUKLWltcG9ydCB1dWlkCi1pbXBvcnQgYXN5bmNvcmUKLWltcG9ydCBhc3luY2hhdAoraW1wb3J0IHNodXRpbAoraW1wb3J0IHNpZ25hbAogaW1wb3J0IHNvY2tldAotaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHN0YXQKLWltcG9ydCBsb2NhbGUKLWltcG9ydCBjb2RlY3MKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitpbXBvcnQgc3lzY29uZmlnCitpbXBvcnQgdGltZQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdXVpZAoraW1wb3J0IHdhcm5pbmdzCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIHRyeToKICAgICBpbXBvcnQgdGhyZWFkaW5nCiBleGNlcHQgSW1wb3J0RXJyb3I6CkBAIC0zMiwxOSArMzYsMTMgQEAKICAgICBpbXBvcnQgcmVzb3VyY2UKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICByZXNvdXJjZSA9IE5vbmUKK3RyeToKKyAgICBpbXBvcnQgZmNudGwKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBmY250bCA9IE5vbmUKIAogZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2sKIAotd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgotICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQotICAgIG9zLnN0YXRfZmxvYXRfdGltZXMoVHJ1ZSkKLXN0ID0gb3Muc3RhdChfX2ZpbGVfXykKLXN0YXRfc3VwcG9ydHNfc3Vic2Vjb25kID0gKAotICAgICMgY2hlY2sgaWYgZmxvYXQgYW5kIGludCB0aW1lc3RhbXBzIGFyZSBkaWZmZXJlbnQKLSAgICAoc3Quc3RfYXRpbWUgIT0gc3RbN10pCi0gICAgb3IgKHN0LnN0X210aW1lICE9IHN0WzhdKQotICAgIG9yIChzdC5zdF9jdGltZSAhPSBzdFs5XSkpCi0KICMgRGV0ZWN0IHdoZXRoZXIgd2UncmUgb24gYSBMaW51eCBzeXN0ZW0gdGhhdCB1c2VzIHRoZSAobm93IG91dGRhdGVkCiAjIGFuZCB1bm1haW50YWluZWQpIGxpbnV4dGhyZWFkcyB0aHJlYWRpbmcgbGlicmFyeS4gIFRoZXJlJ3MgYW4gaXNzdWUKICMgd2hlbiBjb21iaW5pbmcgbGludXh0aHJlYWRzIHdpdGggYSBmYWlsZWQgZXhlY3YgY2FsbDogc2VlCkBAIC02MCw3ICs1OCw3IEBACiAjIFRlc3RzIGNyZWF0aW5nIFRFU1RGTgogY2xhc3MgRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHN1cHBvcnQuVEVTVEZOKToKKyAgICAgICAgaWYgb3MucGF0aC5sZXhpc3RzKHN1cHBvcnQuVEVTVEZOKToKICAgICAgICAgICAgIG9zLnVubGluayhzdXBwb3J0LlRFU1RGTikKICAgICB0ZWFyRG93biA9IHNldFVwCiAKQEAgLTE2NCw2ICsxNjIsMTkgQEAKICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTjIsICdyJykgYXMgZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICIxIikKIAorICAgIGRlZiB0ZXN0X29wZW5fa2V5d29yZHMoc2VsZik6CisgICAgICAgIGYgPSBvcy5vcGVuKHBhdGg9X19maWxlX18sIGZsYWdzPW9zLk9fUkRPTkxZLCBtb2RlPTBvNzc3LAorICAgICAgICAgICAgZGlyX2ZkPU5vbmUpCisgICAgICAgIG9zLmNsb3NlKGYpCisKKyAgICBkZWYgdGVzdF9zeW1saW5rX2tleXdvcmRzKHNlbGYpOgorICAgICAgICBzeW1saW5rID0gc3VwcG9ydC5nZXRfYXR0cmlidXRlKG9zLCAic3ltbGluayIpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5bWxpbmsoc3JjPSd0YXJnZXQnLCBkc3Q9c3VwcG9ydC5URVNURk4sCisgICAgICAgICAgICAgICAgdGFyZ2V0X2lzX2RpcmVjdG9yeT1GYWxzZSwgZGlyX2ZkPU5vbmUpCisgICAgICAgIGV4Y2VwdCAoTm90SW1wbGVtZW50ZWRFcnJvciwgT1NFcnJvcik6CisgICAgICAgICAgICBwYXNzICAjIE5vIE9TIHN1cHBvcnQgb3IgdW5wcml2aWxlZ2VkIHVzZXIKKwogCiAjIFRlc3QgYXR0cmlidXRlcyBvbiByZXR1cm4gdmFsdWVzIGZyb20gb3MuKnN0YXQqIGZhbWlseS4KIGNsYXNzIFN0YXRBdHRyaWJ1dGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yNTYsNiArMjY3LDE2IEBACiAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKICAgICAgICAgICAgIHNlbGYuY2hlY2tfc3RhdF9hdHRyaWJ1dGVzKGZuYW1lKQogCisgICAgZGVmIHRlc3Rfc3RhdF9yZXN1bHRfcGlja2xlKHNlbGYpOgorICAgICAgICByZXN1bHQgPSBvcy5zdGF0KHNlbGYuZm5hbWUpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhyZXN1bHQsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3N0YXRfcmVzdWx0JywgcCkKKyAgICAgICAgICAgIGlmIHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInY29zXG5zdGF0X3Jlc3VsdFxuJywgcCkKKyAgICAgICAgICAgIHVucGlja2xlZCA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHVucGlja2xlZCkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzdGF0dmZzJyksICd0ZXN0IG5lZWRzIG9zLnN0YXR2ZnMoKScpCiAgICAgZGVmIHRlc3Rfc3RhdHZmc19hdHRyaWJ1dGVzKHNlbGYpOgogICAgICAgICB0cnk6CkBAIC0yNjMsNyArMjg0LDcgQEAKICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgT24gQXRoZU9TLCBnbGliYyBhbHdheXMgcmV0dXJucyBFTk9TWVMKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgotICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2dsaWJjIGFsd2F5cyByZXR1cm5zIEVOT1NZUyBvbiBBdGhlT1MnKQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLnN0YXR2ZnMoKSBmYWlsZWQgd2l0aCBFTk9TWVMnKQogCiAgICAgICAgICMgTWFrZSBzdXJlIGRpcmVjdCBhY2Nlc3Mgd29ya3MKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZl9iZnJlZSwgcmVzdWx0WzNdKQpAQCAtMzAwLDE4NyArMzIxLDMyIEBACiAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAKLSAgICBkZWYgdGVzdF91dGltZV9kaXIoc2VsZik6Ci0gICAgICAgIGRlbHRhID0gMTAwMDAwMAotICAgICAgICBzdCA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pCi0gICAgICAgICMgcm91bmQgdG8gaW50LCBiZWNhdXNlIHNvbWUgc3lzdGVtcyBtYXkgc3VwcG9ydCBzdWItc2Vjb25kCi0gICAgICAgICMgdGltZSBzdGFtcHMgaW4gc3RhdCwgYnV0IG5vdCBpbiB1dGltZS4KLSAgICAgICAgb3MudXRpbWUoc3VwcG9ydC5URVNURk4sIChzdC5zdF9hdGltZSwgaW50KHN0LnN0X210aW1lLWRlbHRhKSkpCi0gICAgICAgIHN0MiA9IG9zLnN0YXQoc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3QyLnN0X210aW1lLCBpbnQoc3Quc3RfbXRpbWUtZGVsdGEpKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzdGF0dmZzJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZWQgb3Muc3RhdHZmcygpIikKKyAgICBkZWYgdGVzdF9zdGF0dmZzX3Jlc3VsdF9waWNrbGUoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlc3VsdCA9IG9zLnN0YXR2ZnMoc2VsZi5mbmFtZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICMgT24gQXRoZU9TLCBnbGliYyBhbHdheXMgcmV0dXJucyBFTk9TWVMKKyAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1lTOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ29zLnN0YXR2ZnMoKSBmYWlsZWQgd2l0aCBFTk9TWVMnKQogCi0gICAgZGVmIF90ZXN0X3V0aW1lKHNlbGYsIGZpbGVuYW1lLCBhdHRyLCB1dGltZSwgZGVsdGEpOgotICAgICAgICAjIElzc3VlICMxMzMyNyByZW1vdmVkIHRoZSByZXF1aXJlbWVudCB0byBwYXNzIE5vbmUgYXMgdGhlCi0gICAgICAgICMgc2Vjb25kIGFyZ3VtZW50LiBDaGVjayB0aGF0IHRoZSBwcmV2aW91cyBtZXRob2RzIG9mIHBhc3NpbmcKLSAgICAgICAgIyBhIHRpbWUgdHVwbGUgb3IgTm9uZSB3b3JrIGluIGFkZGl0aW9uIHRvIG5vIGFyZ3VtZW50LgotICAgICAgICBzdDAgPSBvcy5zdGF0KGZpbGVuYW1lKQotICAgICAgICAjIERvZXNuJ3Qgc2V0IGFueXRoaW5nIG5ldywgYnV0IHNldHMgdGhlIHRpbWUgdHVwbGUgd2F5Ci0gICAgICAgIHV0aW1lKGZpbGVuYW1lLCAoYXR0cihzdDAsICJzdF9hdGltZSIpLCBhdHRyKHN0MCwgInN0X210aW1lIikpKQotICAgICAgICAjIFNldHRpbmcgdGhlIHRpbWUgdG8gdGhlIHRpbWUgeW91IGp1c3QgcmVhZCwgdGhlbiByZWFkaW5nIGFnYWluLAotICAgICAgICAjIHNob3VsZCBhbHdheXMgcmV0dXJuIGV4YWN0bHkgdGhlIHNhbWUgdGltZXMuCi0gICAgICAgIHN0MSA9IG9zLnN0YXQoZmlsZW5hbWUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cihzdDAsICJzdF9tdGltZSIpLCBhdHRyKHN0MSwgInN0X210aW1lIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cihzdDAsICJzdF9hdGltZSIpLCBhdHRyKHN0MSwgInN0X2F0aW1lIikpCi0gICAgICAgICMgU2V0IHRvIHRoZSBjdXJyZW50IHRpbWUgaW4gdGhlIG9sZCBleHBsaWNpdCB3YXkuCi0gICAgICAgIG9zLnV0aW1lKGZpbGVuYW1lLCBOb25lKQotICAgICAgICBzdDIgPSBvcy5zdGF0KHN1cHBvcnQuVEVTVEZOKQotICAgICAgICAjIFNldCB0byB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBuZXcgd2F5Ci0gICAgICAgIG9zLnV0aW1lKGZpbGVuYW1lKQotICAgICAgICBzdDMgPSBvcy5zdGF0KGZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKGF0dHIoc3QyLCAic3RfbXRpbWUiKSwgYXR0cihzdDMsICJzdF9tdGltZSIpLCBkZWx0YT1kZWx0YSkKLQotICAgIGRlZiB0ZXN0X3V0aW1lKHNlbGYpOgotICAgICAgICBkZWYgdXRpbWUoZmlsZSwgdGltZXMpOgotICAgICAgICAgICAgcmV0dXJuIG9zLnV0aW1lKGZpbGUsIHRpbWVzKQotICAgICAgICBzZWxmLl90ZXN0X3V0aW1lKHNlbGYuZm5hbWUsIGdldGF0dHIsIHV0aW1lLCAxMCkKLSAgICAgICAgc2VsZi5fdGVzdF91dGltZShzdXBwb3J0LlRFU1RGTiwgZ2V0YXR0ciwgdXRpbWUsIDEwKQotCi0KLSAgICBkZWYgX3Rlc3RfdXRpbWVfbnMoc2VsZiwgc2V0X3RpbWVzX25zLCB0ZXN0X2Rpcj1UcnVlKToKLSAgICAgICAgZGVmIGdldGF0dHJfbnMobywgYXR0cik6Ci0gICAgICAgICAgICByZXR1cm4gZ2V0YXR0cihvLCBhdHRyICsgIl9ucyIpCi0gICAgICAgIHRlbl9zID0gMTAgKiAxMDAwICogMTAwMCAqIDEwMDAKLSAgICAgICAgc2VsZi5fdGVzdF91dGltZShzZWxmLmZuYW1lLCBnZXRhdHRyX25zLCBzZXRfdGltZXNfbnMsIHRlbl9zKQotICAgICAgICBpZiB0ZXN0X2RpcjoKLSAgICAgICAgICAgIHNlbGYuX3Rlc3RfdXRpbWUoc3VwcG9ydC5URVNURk4sIGdldGF0dHJfbnMsIHNldF90aW1lc19ucywgdGVuX3MpCi0KLSAgICBkZWYgdGVzdF91dGltZV9ucyhzZWxmKToKLSAgICAgICAgZGVmIHV0aW1lX25zKGZpbGUsIHRpbWVzKToKLSAgICAgICAgICAgIHJldHVybiBvcy51dGltZShmaWxlLCBucz10aW1lcykKLSAgICAgICAgc2VsZi5fdGVzdF91dGltZV9ucyh1dGltZV9ucykKLQotICAgIHJlcXVpcmVzX3V0aW1lX2Rpcl9mZCA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnV0aW1lIGluIG9zLnN1cHBvcnRzX2Rpcl9mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcl9mZCBzdXBwb3J0IGZvciB1dGltZSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LiIpCi0gICAgcmVxdWlyZXNfdXRpbWVfZmQgPSB1bml0dGVzdC5za2lwVW5sZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy51dGltZSBpbiBvcy5zdXBwb3J0c19mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZkIHN1cHBvcnQgZm9yIHV0aW1lIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuIikKLSAgICByZXF1aXJlc191dGltZV9ub2ZvbGxvd19zeW1saW5rcyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnV0aW1lIGluIG9zLnN1cHBvcnRzX2ZvbGxvd19zeW1saW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd19zeW1saW5rcyBzdXBwb3J0IGZvciB1dGltZSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LiIpCi0KLSAgICBAcmVxdWlyZXNfdXRpbWVfbm9mb2xsb3dfc3ltbGlua3MKLSAgICBkZWYgdGVzdF9sdXRpbWVzX25zKHNlbGYpOgotICAgICAgICBkZWYgbHV0aW1lc19ucyhmaWxlLCB0aW1lcyk6Ci0gICAgICAgICAgICByZXR1cm4gb3MudXRpbWUoZmlsZSwgbnM9dGltZXMsIGZvbGxvd19zeW1saW5rcz1GYWxzZSkKLSAgICAgICAgc2VsZi5fdGVzdF91dGltZV9ucyhsdXRpbWVzX25zKQotCi0gICAgQHJlcXVpcmVzX3V0aW1lX2ZkCi0gICAgZGVmIHRlc3RfZnV0aW1lc19ucyhzZWxmKToKLSAgICAgICAgZGVmIGZ1dGltZXNfbnMoZmlsZSwgdGltZXMpOgotICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGUsICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICAgICAgb3MudXRpbWUoZi5maWxlbm8oKSwgbnM9dGltZXMpCi0gICAgICAgIHNlbGYuX3Rlc3RfdXRpbWVfbnMoZnV0aW1lc19ucywgdGVzdF9kaXI9RmFsc2UpCi0KLSAgICBkZWYgX3V0aW1lX2ludmFsaWRfYXJndW1lbnRzKHNlbGYsIG5hbWUsIGFyZyk6Ci0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6Ci0gICAgICAgICAgICBnZXRhdHRyKG9zLCBuYW1lKShhcmcsICg1LCA1KSwgbnM9KDUsIDUpKQotCi0gICAgZGVmIHRlc3RfdXRpbWVfaW52YWxpZF9hcmd1bWVudHMoc2VsZik6Ci0gICAgICAgIHNlbGYuX3V0aW1lX2ludmFsaWRfYXJndW1lbnRzKCd1dGltZScsIHNlbGYuZm5hbWUpCi0KLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN0YXRfc3VwcG9ydHNfc3Vic2Vjb25kLAotICAgICAgICAgICAgICAgICAgICAgICAgICJvcy5zdGF0KCkgZG9lc24ndCBoYXMgYSBzdWJzZWNvbmQgcmVzb2x1dGlvbiIpCi0gICAgZGVmIF90ZXN0X3V0aW1lX3N1YnNlY29uZChzZWxmLCBzZXRfdGltZV9mdW5jKToKLSAgICAgICAgYXNlYywgYW1zZWMgPSAxLCA5MDEKLSAgICAgICAgYXRpbWUgPSBhc2VjICsgYW1zZWMgKiAxZS0zCi0gICAgICAgIG1zZWMsIG1tc2VjID0gMiwgOTAxCi0gICAgICAgIG10aW1lID0gbXNlYyArIG1tc2VjICogMWUtMwotICAgICAgICBmaWxlbmFtZSA9IHNlbGYuZm5hbWUKLSAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsICgwLCAwKSkKLSAgICAgICAgc2V0X3RpbWVfZnVuYyhmaWxlbmFtZSwgYXRpbWUsIG10aW1lKQotICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6Ci0gICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKLSAgICAgICAgICAgIG9zLnN0YXRfZmxvYXRfdGltZXMoVHJ1ZSkKLSAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGVuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEFsbW9zdEVxdWFsKHN0LnN0X2F0aW1lLCBhdGltZSwgcGxhY2VzPTMpCi0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoc3Quc3RfbXRpbWUsIG10aW1lLCBwbGFjZXM9MykKLQotICAgIGRlZiB0ZXN0X3V0aW1lX3N1YnNlY29uZChzZWxmKToKLSAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBhdGltZSwgbXRpbWUpOgotICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIChhdGltZSwgbXRpbWUpKQotICAgICAgICBzZWxmLl90ZXN0X3V0aW1lX3N1YnNlY29uZChzZXRfdGltZSkKLQotICAgIEByZXF1aXJlc191dGltZV9mZAotICAgIGRlZiB0ZXN0X2Z1dGltZXNfc3Vic2Vjb25kKHNlbGYpOgotICAgICAgICBkZWYgc2V0X3RpbWUoZmlsZW5hbWUsIGF0aW1lLCBtdGltZSk6Ci0gICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICAgICAgb3MudXRpbWUoZi5maWxlbm8oKSwgdGltZXM9KGF0aW1lLCBtdGltZSkpCi0gICAgICAgIHNlbGYuX3Rlc3RfdXRpbWVfc3Vic2Vjb25kKHNldF90aW1lKQotCi0gICAgQHJlcXVpcmVzX3V0aW1lX2ZkCi0gICAgZGVmIHRlc3RfZnV0aW1lbnNfc3Vic2Vjb25kKHNlbGYpOgotICAgICAgICBkZWYgc2V0X3RpbWUoZmlsZW5hbWUsIGF0aW1lLCBtdGltZSk6Ci0gICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3YiIpIGFzIGY6Ci0gICAgICAgICAgICAgICAgb3MudXRpbWUoZi5maWxlbm8oKSwgdGltZXM9KGF0aW1lLCBtdGltZSkpCi0gICAgICAgIHNlbGYuX3Rlc3RfdXRpbWVfc3Vic2Vjb25kKHNldF90aW1lKQotCi0gICAgQHJlcXVpcmVzX3V0aW1lX2Rpcl9mZAotICAgIGRlZiB0ZXN0X2Z1dGltZXNhdF9zdWJzZWNvbmQoc2VsZik6Ci0gICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSwgYXRpbWUsIG10aW1lKToKLSAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5wYXRoLmRpcm5hbWUoZmlsZW5hbWUpCi0gICAgICAgICAgICBkaXJmZCA9IG9zLm9wZW4oZGlybmFtZSwgb3MuT19SRE9OTFkpCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MudXRpbWUob3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSksIGRpcl9mZD1kaXJmZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXM9KGF0aW1lLCBtdGltZSkpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKGRpcmZkKQotICAgICAgICBzZWxmLl90ZXN0X3V0aW1lX3N1YnNlY29uZChzZXRfdGltZSkKLQotICAgIEByZXF1aXJlc191dGltZV9ub2ZvbGxvd19zeW1saW5rcwotICAgIGRlZiB0ZXN0X2x1dGltZXNfc3Vic2Vjb25kKHNlbGYpOgotICAgICAgICBkZWYgc2V0X3RpbWUoZmlsZW5hbWUsIGF0aW1lLCBtdGltZSk6Ci0gICAgICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgKGF0aW1lLCBtdGltZSksIGZvbGxvd19zeW1saW5rcz1GYWxzZSkKLSAgICAgICAgc2VsZi5fdGVzdF91dGltZV9zdWJzZWNvbmQoc2V0X3RpbWUpCi0KLSAgICBAcmVxdWlyZXNfdXRpbWVfZGlyX2ZkCi0gICAgZGVmIHRlc3RfdXRpbWVuc2F0X3N1YnNlY29uZChzZWxmKToKLSAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBhdGltZSwgbXRpbWUpOgotICAgICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguZGlybmFtZShmaWxlbmFtZSkKLSAgICAgICAgICAgIGRpcmZkID0gb3Mub3BlbihkaXJuYW1lLCBvcy5PX1JET05MWSkKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBvcy51dGltZShvcy5wYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSwgZGlyX2ZkPWRpcmZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcz0oYXRpbWUsIG10aW1lKSkKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2xvc2UoZGlyZmQpCi0gICAgICAgIHNlbGYuX3Rlc3RfdXRpbWVfc3Vic2Vjb25kKHNldF90aW1lKQotCi0gICAgIyBSZXN0cmljdCB0ZXN0cyB0byBXaW4zMiwgc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIG90aGVyCi0gICAgIyBzeXN0ZW1zIHN1cHBvcnQgY2VudGlzZWNvbmRzCi0gICAgZGVmIGdldF9maWxlX3N5c3RlbShwYXRoKToKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6Ci0gICAgICAgICAgICByb290ID0gb3MucGF0aC5zcGxpdGRyaXZlKG9zLnBhdGguYWJzcGF0aChwYXRoKSlbMF0gKyAnXFwnCi0gICAgICAgICAgICBpbXBvcnQgY3R5cGVzCi0gICAgICAgICAgICBrZXJuZWwzMiA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIKLSAgICAgICAgICAgIGJ1ZiA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoIiIsIDEwMCkKLSAgICAgICAgICAgIGlmIGtlcm5lbDMyLkdldFZvbHVtZUluZm9ybWF0aW9uVyhyb290LCBOb25lLCAwLCBOb25lLCBOb25lLCBOb25lLCBidWYsIGxlbihidWYpKToKLSAgICAgICAgICAgICAgICByZXR1cm4gYnVmLnZhbHVlCi0KLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhnZXRfZmlsZV9zeXN0ZW0oc3VwcG9ydC5URVNURk4pID09ICJOVEZTIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZXMgTlRGUyIpCi0gICAgZGVmIHRlc3RfMTU2NTE1MChzZWxmKToKLSAgICAgICAgdDEgPSAxMTU5MTk1MDM5LjI1Ci0gICAgICAgIG9zLnV0aW1lKHNlbGYuZm5hbWUsICh0MSwgdDEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQoc2VsZi5mbmFtZSkuc3RfbXRpbWUsIHQxKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0X2ZpbGVfc3lzdGVtKHN1cHBvcnQuVEVTVEZOKSA9PSAiTlRGUyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVzIE5URlMiKQotICAgIGRlZiB0ZXN0X2xhcmdlX3RpbWUoc2VsZik6Ci0gICAgICAgIHQxID0gNTAwMDAwMDAwMCAjIHNvbWUgZGF5IGluIDIxMjgKLSAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSwgKHQxLCB0MSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChzZWxmLmZuYW1lKS5zdF9tdGltZSwgdDEpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhyZXN1bHQsIHByb3RvKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3N0YXR2ZnNfcmVzdWx0JywgcCkKKyAgICAgICAgICAgIGlmIHByb3RvIDwgNDoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInY29zXG5zdGF0dmZzX3Jlc3VsdFxuJywgcCkKKyAgICAgICAgICAgIHVucGlja2xlZCA9IHBpY2tsZS5sb2FkcyhwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHVucGlja2xlZCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luMzIgc3BlY2lmaWMgdGVzdHMiKQogICAgIGRlZiB0ZXN0XzE2ODY0NzUoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgYW4gb3BlbiBmaWxlIGNhbiBiZSBzdGF0J2VkCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnN0YXQociJjOlxwYWdlZmlsZS5zeXMiKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yIGFzIGU6Ci0gICAgICAgICAgICBpZiBlLmVycm5vID09IDI6ICMgZmlsZSBkb2VzIG5vdCBleGlzdDsgY2Fubm90IHJ1biB0ZXN0Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdChyJ2M6XHBhZ2VmaWxlLnN5cyBkb2VzIG5vdCBleGlzdCcpCisgICAgICAgIGV4Y2VwdCBGaWxlTm90Rm91bmRFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QocidjOlxwYWdlZmlsZS5zeXMgZG9lcyBub3QgZXhpc3QnKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJDb3VsZCBub3Qgc3RhdCBwYWdlZmlsZS5zeXMiKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCkBAIC00OTcsNiArMzYzLDIwMiBAQAogICAgICAgICAgICAgb3Muc3RhdChyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5leGNlcHRpb24uZXJybm8sIGVycm5vLkVCQURGKQogCisKK2NsYXNzIFV0aW1lVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5kaXJuYW1lID0gc3VwcG9ydC5URVNURk4KKyAgICAgICAgc2VsZi5mbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLmRpcm5hbWUsICJmMSIpCisKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQucm10cmVlLCBzZWxmLmRpcm5hbWUpCisgICAgICAgIG9zLm1rZGlyKHNlbGYuZGlybmFtZSkKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuZm5hbWUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgZnAud3JpdGUoYiJBQkMiKQorCisgICAgICAgIGRlZiByZXN0b3JlX2Zsb2F0X3RpbWVzKHN0YXRlKToKKyAgICAgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIERlcHJlY2F0aW9uV2FybmluZykKKworICAgICAgICAgICAgICAgIG9zLnN0YXRfZmxvYXRfdGltZXMoc3RhdGUpCisKKyAgICAgICAgIyBlbnN1cmUgdGhhdCBzdF9hdGltZSBhbmQgc3RfbXRpbWUgYXJlIGZsb2F0CisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgRGVwcmVjYXRpb25XYXJuaW5nKQorCisgICAgICAgICAgICBvbGRfZmxvYXRfdGltZXMgPSBvcy5zdGF0X2Zsb2F0X3RpbWVzKC0xKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc3RvcmVfZmxvYXRfdGltZXMsIG9sZF9mbG9hdF90aW1lcykKKworICAgICAgICAgICAgb3Muc3RhdF9mbG9hdF90aW1lcyhUcnVlKQorCisgICAgZGVmIHN1cHBvcnRfc3Vic2Vjb25kKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgIyBIZXVyaXN0aWMgdG8gY2hlY2sgaWYgdGhlIGZpbGVzeXN0ZW0gc3VwcG9ydHMgdGltZXN0YW1wIHdpdGgKKyAgICAgICAgIyBzdWJzZWNvbmQgcmVzb2x1dGlvbjogY2hlY2sgaWYgZmxvYXQgYW5kIGludCB0aW1lc3RhbXBzIGFyZSBkaWZmZXJlbnQKKyAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gKChzdC5zdF9hdGltZSAhPSBzdFs3XSkKKyAgICAgICAgICAgICAgICBvciAoc3Quc3RfbXRpbWUgIT0gc3RbOF0pCisgICAgICAgICAgICAgICAgb3IgKHN0LnN0X2N0aW1lICE9IHN0WzldKSkKKworICAgIGRlZiBfdGVzdF91dGltZShzZWxmLCBzZXRfdGltZSwgZmlsZW5hbWU9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBmaWxlbmFtZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gc2VsZi5mbmFtZQorCisgICAgICAgIHN1cHBvcnRfc3Vic2Vjb25kID0gc2VsZi5zdXBwb3J0X3N1YnNlY29uZChmaWxlbmFtZSkKKyAgICAgICAgaWYgc3VwcG9ydF9zdWJzZWNvbmQ6CisgICAgICAgICAgICAjIFRpbWVzdGFtcCB3aXRoIGEgcmVzb2x1dGlvbiBvZiAxIG1pY3Jvc2Vjb25kICgxMF4tNikuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBDIGludGVybmFsIGZ1bmN0aW9uIHVzZWQgYnkgb3MudXRpbWUoKQorICAgICAgICAgICAgIyBkZXBlbmRzIG9uIHRoZSBwbGF0Zm9ybTogMSBzZWMsIDEgdXMsIDEgbnMuIFdyaXRpbmcgYSBwb3J0YWJsZQorICAgICAgICAgICAgIyB0ZXN0IHdpdGggYSByZXNvbHV0aW9uIG9mIDEgbnMgcmVxdWlyZXMgbW9yZSB3b3JrOgorICAgICAgICAgICAgIyBzZWUgdGhlIGlzc3VlICMxNTc0NS4KKyAgICAgICAgICAgIGF0aW1lX25zID0gMTAwMjAwMzAwMCAgICMgMS4wMDIwMDMgc2Vjb25kcworICAgICAgICAgICAgbXRpbWVfbnMgPSA0MDA1MDA2MDAwICAgIyA0LjAwNTAwNiBzZWNvbmRzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHVzZSBhIHJlc29sdXRpb24gb2YgMSBzZWNvbmQKKyAgICAgICAgICAgIGF0aW1lX25zID0gNSAqIDEwKio5CisgICAgICAgICAgICBtdGltZV9ucyA9IDggKiAxMCoqOQorCisgICAgICAgIHNldF90aW1lKGZpbGVuYW1lLCAoYXRpbWVfbnMsIG10aW1lX25zKSkKKyAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGVuYW1lKQorCisgICAgICAgIGlmIHN1cHBvcnRfc3Vic2Vjb25kOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzdC5zdF9hdGltZSwgYXRpbWVfbnMgKiAxZS05LCBkZWx0YT0xZS02KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzdC5zdF9tdGltZSwgbXRpbWVfbnMgKiAxZS05LCBkZWx0YT0xZS02KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdC5zdF9hdGltZSwgYXRpbWVfbnMgKiAxZS05KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdC5zdF9tdGltZSwgbXRpbWVfbnMgKiAxZS05KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LnN0X2F0aW1lX25zLCBhdGltZV9ucykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdC5zdF9tdGltZV9ucywgbXRpbWVfbnMpCisKKyAgICBkZWYgdGVzdF91dGltZShzZWxmKToKKyAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBucyk6CisgICAgICAgICAgICAjIHRlc3QgdGhlIG5zIGtleXdvcmQgcGFyYW1ldGVyCisgICAgICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgbnM9bnMpCisgICAgICAgIHNlbGYuX3Rlc3RfdXRpbWUoc2V0X3RpbWUpCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIG5zX3RvX3NlYyhucyk6CisgICAgICAgICMgQ29udmVydCBhIG51bWJlciBvZiBuYW5vc2Vjb25kIChpbnQpIHRvIGEgbnVtYmVyIG9mIHNlY29uZHMgKGZsb2F0KS4KKyAgICAgICAgIyBSb3VuZCB0b3dhcmRzIGluZmluaXR5IGJ5IGFkZGluZyAwLjUgbmFub3NlY29uZCB0byBhdm9pZCByb3VuZGluZworICAgICAgICAjIGlzc3VlLCBvcy51dGltZSgpIHJvdW5kcyB0b3dhcmRzIG1pbnVzIGluZmluaXR5LgorICAgICAgICByZXR1cm4gKG5zICogMWUtOSkgKyAwLjVlLTkKKworICAgIGRlZiB0ZXN0X3V0aW1lX2J5X2luZGV4ZWQoc2VsZik6CisgICAgICAgICMgcGFzcyB0aW1lcyBhcyBmbG9hdGluZyBwb2ludCBzZWNvbmRzIGFzIHRoZSBzZWNvbmQgaW5kZXhlZCBwYXJhbWV0ZXIKKyAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBucyk6CisgICAgICAgICAgICBhdGltZV9ucywgbXRpbWVfbnMgPSBucworICAgICAgICAgICAgYXRpbWUgPSBzZWxmLm5zX3RvX3NlYyhhdGltZV9ucykKKyAgICAgICAgICAgIG10aW1lID0gc2VsZi5uc190b19zZWMobXRpbWVfbnMpCisgICAgICAgICAgICAjIHRlc3QgdXRpbWVuc2F0KHRpbWVzcGVjKSwgdXRpbWVzKHRpbWV2YWwpLCB1dGltZSh1dGltYnVmKQorICAgICAgICAgICAgIyBvciB1dGltZSh0aW1lX3QpCisgICAgICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgKGF0aW1lLCBtdGltZSkpCisgICAgICAgIHNlbGYuX3Rlc3RfdXRpbWUoc2V0X3RpbWUpCisKKyAgICBkZWYgdGVzdF91dGltZV9ieV90aW1lcyhzZWxmKToKKyAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBucyk6CisgICAgICAgICAgICBhdGltZV9ucywgbXRpbWVfbnMgPSBucworICAgICAgICAgICAgYXRpbWUgPSBzZWxmLm5zX3RvX3NlYyhhdGltZV9ucykKKyAgICAgICAgICAgIG10aW1lID0gc2VsZi5uc190b19zZWMobXRpbWVfbnMpCisgICAgICAgICAgICAjIHRlc3QgdGhlIHRpbWVzIGtleXdvcmQgcGFyYW1ldGVyCisgICAgICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgdGltZXM9KGF0aW1lLCBtdGltZSkpCisgICAgICAgIHNlbGYuX3Rlc3RfdXRpbWUoc2V0X3RpbWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy51dGltZSBpbiBvcy5zdXBwb3J0c19mb2xsb3dfc3ltbGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZvbGxvd19zeW1saW5rcyBzdXBwb3J0IGZvciB1dGltZSByZXF1aXJlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImZvciB0aGlzIHRlc3QuIikKKyAgICBkZWYgdGVzdF91dGltZV9ub2ZvbGxvd19zeW1saW5rcyhzZWxmKToKKyAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBucyk6CisgICAgICAgICAgICAjIHVzZSBmb2xsb3dfc3ltbGlua3M9RmFsc2UgdG8gdGVzdCB1dGltZW5zYXQodGltZXNwZWMpCisgICAgICAgICAgICAjIG9yIGx1dGltZXModGltZXZhbCkKKyAgICAgICAgICAgIG9zLnV0aW1lKGZpbGVuYW1lLCBucz1ucywgZm9sbG93X3N5bWxpbmtzPUZhbHNlKQorICAgICAgICBzZWxmLl90ZXN0X3V0aW1lKHNldF90aW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MudXRpbWUgaW4gb3Muc3VwcG9ydHNfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgImZkIHN1cHBvcnQgZm9yIHV0aW1lIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuIikKKyAgICBkZWYgdGVzdF91dGltZV9mZChzZWxmKToKKyAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBucyk6CisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGZwOgorICAgICAgICAgICAgICAgICMgdXNlIGEgZmlsZSBkZXNjcmlwdG9yIHRvIHRlc3QgZnV0aW1lbnModGltZXNwZWMpCisgICAgICAgICAgICAgICAgIyBvciBmdXRpbWVzKHRpbWV2YWwpCisgICAgICAgICAgICAgICAgb3MudXRpbWUoZnAuZmlsZW5vKCksIG5zPW5zKQorICAgICAgICBzZWxmLl90ZXN0X3V0aW1lKHNldF90aW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MudXRpbWUgaW4gb3Muc3VwcG9ydHNfZGlyX2ZkLAorICAgICAgICAgICAgICAgICAgICAgICAgICJkaXJfZmQgc3VwcG9ydCBmb3IgdXRpbWUgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4iKQorICAgIGRlZiB0ZXN0X3V0aW1lX2Rpcl9mZChzZWxmKToKKyAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBucyk6CisgICAgICAgICAgICBkaXJuYW1lLCBuYW1lID0gb3MucGF0aC5zcGxpdChmaWxlbmFtZSkKKyAgICAgICAgICAgIGRpcmZkID0gb3Mub3BlbihkaXJuYW1lLCBvcy5PX1JET05MWSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAjIHBhc3MgZGlyX2ZkIHRvIHRlc3QgdXRpbWVuc2F0KHRpbWVzcGVjKSBvciBmdXRpbWVzYXQodGltZXZhbCkKKyAgICAgICAgICAgICAgICBvcy51dGltZShuYW1lLCBkaXJfZmQ9ZGlyZmQsIG5zPW5zKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShkaXJmZCkKKyAgICAgICAgc2VsZi5fdGVzdF91dGltZShzZXRfdGltZSkKKworICAgIGRlZiB0ZXN0X3V0aW1lX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lLCBucyk6CisgICAgICAgICAgICAjIHRlc3QgY2FsbGluZyBvcy51dGltZSgpIG9uIGEgZGlyZWN0b3J5CisgICAgICAgICAgICBvcy51dGltZShmaWxlbmFtZSwgbnM9bnMpCisgICAgICAgIHNlbGYuX3Rlc3RfdXRpbWUoc2V0X3RpbWUsIGZpbGVuYW1lPXNlbGYuZGlybmFtZSkKKworICAgIGRlZiBfdGVzdF91dGltZV9jdXJyZW50KHNlbGYsIHNldF90aW1lKToKKyAgICAgICAgIyBHZXQgdGhlIHN5c3RlbSBjbG9jaworICAgICAgICBjdXJyZW50ID0gdGltZS50aW1lKCkKKworICAgICAgICAjIENhbGwgb3MudXRpbWUoKSB0byBzZXQgdGhlIHRpbWVzdGFtcCB0byB0aGUgY3VycmVudCBzeXN0ZW0gY2xvY2sKKyAgICAgICAgc2V0X3RpbWUoc2VsZi5mbmFtZSkKKworICAgICAgICBpZiBub3Qgc2VsZi5zdXBwb3J0X3N1YnNlY29uZChzZWxmLmZuYW1lKToKKyAgICAgICAgICAgIGRlbHRhID0gMS4wCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIE9uIFdpbmRvd3MsIHRoZSB1c3VhbCByZXNvbHV0aW9uIG9mIHRpbWUudGltZSgpIGlzIDE1LjYgbXMKKyAgICAgICAgICAgIGRlbHRhID0gMC4wMjAKKyAgICAgICAgc3QgPSBvcy5zdGF0KHNlbGYuZm5hbWUpCisgICAgICAgIG1zZyA9ICgic3RfdGltZT0lciwgY3VycmVudD0lciwgZHQ9JXIiCisgICAgICAgICAgICAgICAlIChzdC5zdF9tdGltZSwgY3VycmVudCwgc3Quc3RfbXRpbWUgLSBjdXJyZW50KSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChzdC5zdF9tdGltZSwgY3VycmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YT1kZWx0YSwgbXNnPW1zZykKKworICAgIGRlZiB0ZXN0X3V0aW1lX2N1cnJlbnQoc2VsZik6CisgICAgICAgIGRlZiBzZXRfdGltZShmaWxlbmFtZSk6CisgICAgICAgICAgICAjIFNldCB0byB0aGUgY3VycmVudCB0aW1lIGluIHRoZSBuZXcgd2F5CisgICAgICAgICAgICBvcy51dGltZShzZWxmLmZuYW1lKQorICAgICAgICBzZWxmLl90ZXN0X3V0aW1lX2N1cnJlbnQoc2V0X3RpbWUpCisKKyAgICBkZWYgdGVzdF91dGltZV9jdXJyZW50X29sZChzZWxmKToKKyAgICAgICAgZGVmIHNldF90aW1lKGZpbGVuYW1lKToKKyAgICAgICAgICAgICMgU2V0IHRvIHRoZSBjdXJyZW50IHRpbWUgaW4gdGhlIG9sZCBleHBsaWNpdCB3YXkuCisgICAgICAgICAgICBvcy51dGltZShzZWxmLmZuYW1lLCBOb25lKQorICAgICAgICBzZWxmLl90ZXN0X3V0aW1lX2N1cnJlbnQoc2V0X3RpbWUpCisKKyAgICBkZWYgZ2V0X2ZpbGVfc3lzdGVtKHNlbGYsIHBhdGgpOgorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHJvb3QgPSBvcy5wYXRoLnNwbGl0ZHJpdmUob3MucGF0aC5hYnNwYXRoKHBhdGgpKVswXSArICdcXCcKKyAgICAgICAgICAgIGltcG9ydCBjdHlwZXMKKyAgICAgICAgICAgIGtlcm5lbDMyID0gY3R5cGVzLndpbmRsbC5rZXJuZWwzMgorICAgICAgICAgICAgYnVmID0gY3R5cGVzLmNyZWF0ZV91bmljb2RlX2J1ZmZlcigiIiwgMTAwKQorICAgICAgICAgICAgb2sgPSBrZXJuZWwzMi5HZXRWb2x1bWVJbmZvcm1hdGlvblcocm9vdCwgTm9uZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIGxlbihidWYpKQorICAgICAgICAgICAgaWYgb2s6CisgICAgICAgICAgICAgICAgcmV0dXJuIGJ1Zi52YWx1ZQorICAgICAgICAjIHJldHVybiBOb25lIGlmIHRoZSBmaWxlc3lzdGVtIGlzIHVua25vd24KKworICAgIGRlZiB0ZXN0X2xhcmdlX3RpbWUoc2VsZik6CisgICAgICAgICMgTWFueSBmaWxlc3lzdGVtcyBhcmUgbGltaXRlZCB0byB0aGUgeWVhciAyMDM4LiBBdCBsZWFzdCwgdGhlIHRlc3QKKyAgICAgICAgIyBwYXNzIHdpdGggTlRGUyBmaWxlc3lzdGVtLgorICAgICAgICBpZiBzZWxmLmdldF9maWxlX3N5c3RlbShzZWxmLmRpcm5hbWUpICE9ICJOVEZTIjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInJlcXVpcmVzIE5URlMiKQorCisgICAgICAgIGxhcmdlID0gNTAwMDAwMDAwMCAgICMgc29tZSBkYXkgaW4gMjEyOAorICAgICAgICBvcy51dGltZShzZWxmLmZuYW1lLCAobGFyZ2UsIGxhcmdlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHNlbGYuZm5hbWUpLnN0X210aW1lLCBsYXJnZSkKKworICAgIGRlZiB0ZXN0X3V0aW1lX2ludmFsaWRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICAjIHNlY29uZHMgYW5kIG5hbm9zZWNvbmRzIHBhcmFtZXRlcnMgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgb3MudXRpbWUoc2VsZi5mbmFtZSwgKDUsIDUpLCBucz0oNSwgNSkpCisKKwogZnJvbSB0ZXN0IGltcG9ydCBtYXBwaW5nX3Rlc3RzCiAKIGNsYXNzIEVudmlyb25UZXN0cyhtYXBwaW5nX3Rlc3RzLkJhc2ljVGVzdE1hcHBpbmdQcm90b2NvbCk6CkBAIC02NTgsOSArNzIwLDE3IEBACiBjbGFzcyBXYWxrVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIGZvciBvcy53YWxrKCkuIiIiCiAKKyAgICAjIFdyYXBwZXIgdG8gaGlkZSBtaW5vciBkaWZmZXJlbmNlcyBiZXR3ZWVuIG9zLndhbGsgYW5kIG9zLmZ3YWxrCisgICAgIyB0byB0ZXN0cyBib3RoIGZ1bmN0aW9ucyB3aXRoIHRoZSBzYW1lIGNvZGUgYmFzZQorICAgIGRlZiB3YWxrKHNlbGYsIGRpcmVjdG9yeSwgdG9wZG93bj1UcnVlLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpOgorICAgICAgICB3YWxrX2l0ID0gb3Mud2FsayhkaXJlY3RvcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcGRvd249dG9wZG93biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93bGlua3M9Zm9sbG93X3N5bWxpbmtzKQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gd2Fsa19pdDoKKyAgICAgICAgICAgIHlpZWxkIChyb290LCBkaXJzLCBmaWxlcykKKwogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgaW1wb3J0IG9zCi0gICAgICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgorICAgICAgICBqb2luID0gb3MucGF0aC5qb2luCiAKICAgICAgICAgIyBCdWlsZDoKICAgICAgICAgIyAgICAgVEVTVEZOLwpAQCAtNjc1LDM2ICs3NDUsMzkgQEAKICAgICAgICAgIyAgICAgICAgICAgYnJva2VuX2xpbmsKICAgICAgICAgIyAgICAgICBURVNUMi8KICAgICAgICAgIyAgICAgICAgIHRtcDQgICAgICAgICAgICAgIGEgbG9uZSBmaWxlCi0gICAgICAgIHdhbGtfcGF0aCA9IGpvaW4oc3VwcG9ydC5URVNURk4sICJURVNUMSIpCi0gICAgICAgIHN1YjFfcGF0aCA9IGpvaW4od2Fsa19wYXRoLCAiU1VCMSIpCi0gICAgICAgIHN1YjExX3BhdGggPSBqb2luKHN1YjFfcGF0aCwgIlNVQjExIikKLSAgICAgICAgc3ViMl9wYXRoID0gam9pbih3YWxrX3BhdGgsICJTVUIyIikKLSAgICAgICAgdG1wMV9wYXRoID0gam9pbih3YWxrX3BhdGgsICJ0bXAxIikKLSAgICAgICAgdG1wMl9wYXRoID0gam9pbihzdWIxX3BhdGgsICJ0bXAyIikKKyAgICAgICAgc2VsZi53YWxrX3BhdGggPSBqb2luKHN1cHBvcnQuVEVTVEZOLCAiVEVTVDEiKQorICAgICAgICBzZWxmLnN1YjFfcGF0aCA9IGpvaW4oc2VsZi53YWxrX3BhdGgsICJTVUIxIikKKyAgICAgICAgc2VsZi5zdWIxMV9wYXRoID0gam9pbihzZWxmLnN1YjFfcGF0aCwgIlNVQjExIikKKyAgICAgICAgc3ViMl9wYXRoID0gam9pbihzZWxmLndhbGtfcGF0aCwgIlNVQjIiKQorICAgICAgICB0bXAxX3BhdGggPSBqb2luKHNlbGYud2Fsa19wYXRoLCAidG1wMSIpCisgICAgICAgIHRtcDJfcGF0aCA9IGpvaW4oc2VsZi5zdWIxX3BhdGgsICJ0bXAyIikKICAgICAgICAgdG1wM19wYXRoID0gam9pbihzdWIyX3BhdGgsICJ0bXAzIikKLSAgICAgICAgbGlua19wYXRoID0gam9pbihzdWIyX3BhdGgsICJsaW5rIikKKyAgICAgICAgc2VsZi5saW5rX3BhdGggPSBqb2luKHN1YjJfcGF0aCwgImxpbmsiKQogICAgICAgICB0Ml9wYXRoID0gam9pbihzdXBwb3J0LlRFU1RGTiwgIlRFU1QyIikKICAgICAgICAgdG1wNF9wYXRoID0gam9pbihzdXBwb3J0LlRFU1RGTiwgIlRFU1QyIiwgInRtcDQiKQotICAgICAgICBsaW5rX3BhdGggPSBqb2luKHN1YjJfcGF0aCwgImxpbmsiKQogICAgICAgICBicm9rZW5fbGlua19wYXRoID0gam9pbihzdWIyX3BhdGgsICJicm9rZW5fbGluayIpCiAKICAgICAgICAgIyBDcmVhdGUgc3R1ZmYuCi0gICAgICAgIG9zLm1ha2VkaXJzKHN1YjExX3BhdGgpCisgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuc3ViMTFfcGF0aCkKICAgICAgICAgb3MubWFrZWRpcnMoc3ViMl9wYXRoKQogICAgICAgICBvcy5tYWtlZGlycyh0Ml9wYXRoKQorCiAgICAgICAgIGZvciBwYXRoIGluIHRtcDFfcGF0aCwgdG1wMl9wYXRoLCB0bXAzX3BhdGgsIHRtcDRfcGF0aDoKICAgICAgICAgICAgIGYgPSBvcGVuKHBhdGgsICJ3IikKICAgICAgICAgICAgIGYud3JpdGUoIkknbSAiICsgcGF0aCArICIgYW5kIHByb3VkIG9mIGl0LiAgQmxhbWUgdGVzdF9vcy5cbiIpCiAgICAgICAgICAgICBmLmNsb3NlKCkKLSAgICAgICAgaWYgc3VwcG9ydC5jYW5fc3ltbGluaygpOgotICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmFic3BhdGgodDJfcGF0aCksIGxpbmtfcGF0aCkKLSAgICAgICAgICAgIG9zLnN5bWxpbmsoJ2Jyb2tlbicsIGJyb2tlbl9saW5rX3BhdGgsIFRydWUpCi0gICAgICAgICAgICBzdWIyX3RyZWUgPSAoc3ViMl9wYXRoLCBbImxpbmsiXSwgWyJicm9rZW5fbGluayIsICJ0bXAzIl0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzdWIyX3RyZWUgPSAoc3ViMl9wYXRoLCBbXSwgWyJ0bXAzIl0pCiAKKyAgICAgICAgaWYgc3VwcG9ydC5jYW5fc3ltbGluaygpOgorICAgICAgICAgICAgb3Muc3ltbGluayhvcy5wYXRoLmFic3BhdGgodDJfcGF0aCksIHNlbGYubGlua19wYXRoKQorICAgICAgICAgICAgb3Muc3ltbGluaygnYnJva2VuJywgYnJva2VuX2xpbmtfcGF0aCwgVHJ1ZSkKKyAgICAgICAgICAgIHNlbGYuc3ViMl90cmVlID0gKHN1YjJfcGF0aCwgWyJsaW5rIl0sIFsiYnJva2VuX2xpbmsiLCAidG1wMyJdKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5zdWIyX3RyZWUgPSAoc3ViMl9wYXRoLCBbXSwgWyJ0bXAzIl0pCisKKyAgICBkZWYgdGVzdF93YWxrX3RvcGRvd24oc2VsZik6CiAgICAgICAgICMgV2FsayB0b3AtZG93bi4KLSAgICAgICAgYWxsID0gbGlzdChvcy53YWxrKHdhbGtfcGF0aCkpCisgICAgICAgIGFsbCA9IGxpc3Qob3Mud2FsayhzZWxmLndhbGtfcGF0aCkpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWxsKSwgNCkKICAgICAgICAgIyBXZSBjYW4ndCBrbm93IHdoaWNoIG9yZGVyIFNVQjEgYW5kIFNVQjIgd2lsbCBhcHBlYXIgaW4uCiAgICAgICAgICMgTm90IGZsaXBwZWQ6ICBURVNURk4sIFNVQjEsIFNVQjExLCBTVUIyCkBAIC03MTIsMjYgKzc4NSwzMiBAQAogICAgICAgICBmbGlwcGVkID0gYWxsWzBdWzFdWzBdICE9ICJTVUIxIgogICAgICAgICBhbGxbMF1bMV0uc29ydCgpCiAgICAgICAgIGFsbFszIC0gMiAqIGZsaXBwZWRdWy0xXS5zb3J0KCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMF0sICh3YWxrX3BhdGgsIFsiU1VCMSIsICJTVUIyIl0sIFsidG1wMSJdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMSArIGZsaXBwZWRdLCAoc3ViMV9wYXRoLCBbIlNVQjExIl0sIFsidG1wMiJdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMiArIGZsaXBwZWRdLCAoc3ViMTFfcGF0aCwgW10sIFtdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMyAtIDIgKiBmbGlwcGVkXSwgc3ViMl90cmVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFswXSwgKHNlbGYud2Fsa19wYXRoLCBbIlNVQjEiLCAiU1VCMiJdLCBbInRtcDEiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzEgKyBmbGlwcGVkXSwgKHNlbGYuc3ViMV9wYXRoLCBbIlNVQjExIl0sIFsidG1wMiJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMiArIGZsaXBwZWRdLCAoc2VsZi5zdWIxMV9wYXRoLCBbXSwgW10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFszIC0gMiAqIGZsaXBwZWRdLCBzZWxmLnN1YjJfdHJlZSkKIAorICAgIGRlZiB0ZXN0X3dhbGtfcHJ1bmUoc2VsZik6CiAgICAgICAgICMgUHJ1bmUgdGhlIHNlYXJjaC4KICAgICAgICAgYWxsID0gW10KLSAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsod2Fsa19wYXRoKToKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIHNlbGYud2FsayhzZWxmLndhbGtfcGF0aCk6CiAgICAgICAgICAgICBhbGwuYXBwZW5kKChyb290LCBkaXJzLCBmaWxlcykpCiAgICAgICAgICAgICAjIERvbid0IGRlc2NlbmQgaW50byBTVUIxLgogICAgICAgICAgICAgaWYgJ1NVQjEnIGluIGRpcnM6CiAgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgdGhpcyBhbHNvIG11dGF0ZXMgdGhlIGRpcnMgd2UgYXBwZW5kZWQgdG8gYWxsIQogICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKCdTVUIxJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWxsKSwgMikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMF0sICh3YWxrX3BhdGgsIFsiU1VCMiJdLCBbInRtcDEiXSkpCi0gICAgICAgIGFsbFsxXVstMV0uc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzFdLCBzdWIyX3RyZWUpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYWxsKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYud2Fsa19wYXRoLCBbIlNVQjIiXSwgWyJ0bXAxIl0pKQorCisgICAgICAgIGFsbFsxXVstMV0uc29ydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzFdLCBzZWxmLnN1YjJfdHJlZSkKKworICAgIGRlZiB0ZXN0X3dhbGtfYm90dG9tX3VwKHNlbGYpOgogICAgICAgICAjIFdhbGsgYm90dG9tLXVwLgotICAgICAgICBhbGwgPSBsaXN0KG9zLndhbGsod2Fsa19wYXRoLCB0b3Bkb3duPUZhbHNlKSkKKyAgICAgICAgYWxsID0gbGlzdChzZWxmLndhbGsoc2VsZi53YWxrX3BhdGgsIHRvcGRvd249RmFsc2UpKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGFsbCksIDQpCiAgICAgICAgICMgV2UgY2FuJ3Qga25vdyB3aGljaCBvcmRlciBTVUIxIGFuZCBTVUIyIHdpbGwgYXBwZWFyIGluLgogICAgICAgICAjIE5vdCBmbGlwcGVkOiAgU1VCMTEsIFNVQjEsIFNVQjIsIFRFU1RGTgpAQCAtNzM5LDIwICs4MTgsMjggQEAKICAgICAgICAgZmxpcHBlZCA9IGFsbFszXVsxXVswXSAhPSAiU1VCMSIKICAgICAgICAgYWxsWzNdWzFdLnNvcnQoKQogICAgICAgICBhbGxbMiAtIDIgKiBmbGlwcGVkXVstMV0uc29ydCgpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzNdLCAod2Fsa19wYXRoLCBbIlNVQjEiLCAiU1VCMiJdLCBbInRtcDEiXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsW2ZsaXBwZWRdLCAoc3ViMTFfcGF0aCwgW10sIFtdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbZmxpcHBlZCArIDFdLCAoc3ViMV9wYXRoLCBbIlNVQjExIl0sIFsidG1wMiJdKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbMiAtIDIgKiBmbGlwcGVkXSwgc3ViMl90cmVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFsbFszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi53YWxrX3BhdGgsIFsiU1VCMSIsICJTVUIyIl0sIFsidG1wMSJdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbZmxpcHBlZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYuc3ViMTFfcGF0aCwgW10sIFtdKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhbGxbZmxpcHBlZCArIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLnN1YjFfcGF0aCwgWyJTVUIxMSJdLCBbInRtcDIiXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxsWzIgLSAyICogZmxpcHBlZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdWIyX3RyZWUpCiAKLSAgICAgICAgaWYgc3VwcG9ydC5jYW5fc3ltbGluaygpOgotICAgICAgICAgICAgIyBXYWxrLCBmb2xsb3dpbmcgc3ltbGlua3MuCi0gICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayh3YWxrX3BhdGgsIGZvbGxvd2xpbmtzPVRydWUpOgotICAgICAgICAgICAgICAgIGlmIHJvb3QgPT0gbGlua19wYXRoOgotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcnMsIFtdKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzLCBbInRtcDQiXSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgZm9sbG93IHN5bWxpbmsgd2l0aCBmb2xsb3dsaW5rcz1UcnVlIikKKyAgICBkZWYgdGVzdF93YWxrX3N5bWxpbmsoc2VsZik6CisgICAgICAgIGlmIG5vdCBzdXBwb3J0LmNhbl9zeW1saW5rKCk6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZWVkIHN5bWxpbmsgc3VwcG9ydCIpCisKKyAgICAgICAgIyBXYWxrLCBmb2xsb3dpbmcgc3ltbGlua3MuCisgICAgICAgIHdhbGtfaXQgPSBzZWxmLndhbGsoc2VsZi53YWxrX3BhdGgsIGZvbGxvd19zeW1saW5rcz1UcnVlKQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gd2Fsa19pdDoKKyAgICAgICAgICAgIGlmIHJvb3QgPT0gc2VsZi5saW5rX3BhdGg6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzLCBbXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVzLCBbInRtcDQiXSkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJEaWRuJ3QgZm9sbG93IHN5bWxpbmsgd2l0aCBmb2xsb3dsaW5rcz1UcnVlIikKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgIyBUZWFyIGV2ZXJ5dGhpbmcgZG93bi4gIFRoaXMgaXMgYSBkZWNlbnQgdXNlIGZvciBib3R0b20tdXAgb24KQEAgLTc3NSw2ICs4NjIsMTQgQEAKIGNsYXNzIEZ3YWxrVGVzdHMoV2Fsa1Rlc3RzKToKICAgICAiIiJUZXN0cyBmb3Igb3MuZndhbGsoKS4iIiIKIAorICAgIGRlZiB3YWxrKHNlbGYsIGRpcmVjdG9yeSwgdG9wZG93bj1UcnVlLCBmb2xsb3dfc3ltbGlua3M9RmFsc2UpOgorICAgICAgICB3YWxrX2l0ID0gb3MuZndhbGsoZGlyZWN0b3J5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wZG93bj10b3Bkb3duLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9sbG93X3N5bWxpbmtzPWZvbGxvd19zeW1saW5rcykKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzLCByb290X2ZkIGluIHdhbGtfaXQ6CisgICAgICAgICAgICB5aWVsZCAocm9vdCwgZGlycywgZmlsZXMpCisKKwogICAgIGRlZiBfY29tcGFyZV90b193YWxrKHNlbGYsIHdhbGtfa3dhcmdzLCBmd2Fsa19rd2FyZ3MpOgogICAgICAgICAiIiIKICAgICAgICAgY29tcGFyZSB3aXRoIHdhbGsoKSByZXN1bHRzLgpAQCAtODc2LDYgKzk3MSwyMCBAQAogICAgICAgICBvcy5tYWtlZGlycyhwYXRoLCBtb2RlPW1vZGUsIGV4aXN0X29rPVRydWUpCiAgICAgICAgIG9zLnVtYXNrKG9sZF9tYXNrKQogCisgICAgICAgICMgSXNzdWUgIzI1NTgzOiBBIGRyaXZlIHJvb3QgY291bGQgcmFpc2UgUGVybWlzc2lvbkVycm9yIG9uIFdpbmRvd3MKKyAgICAgICAgb3MubWFrZWRpcnMob3MucGF0aC5hYnNwYXRoKCcvJyksIGV4aXN0X29rPVRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnY2hvd24nKSwgJ3Rlc3QgbmVlZHMgb3MuY2hvd24nKQorICAgIGRlZiB0ZXN0X2Nob3duX3VpZF9naWRfYXJndW1lbnRzX211c3RfYmVfaW5kZXgoc2VsZik6CisgICAgICAgIHN0YXQgPSBvcy5zdGF0KHN1cHBvcnQuVEVTVEZOKQorICAgICAgICB1aWQgPSBzdGF0LnN0X3VpZAorICAgICAgICBnaWQgPSBzdGF0LnN0X2dpZAorICAgICAgICBmb3IgdmFsdWUgaW4gKC0xLjAsIC0xaiwgZGVjaW1hbC5EZWNpbWFsKC0xKSwgZnJhY3Rpb25zLkZyYWN0aW9uKC0yLCAyKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLmNob3duLCBzdXBwb3J0LlRFU1RGTiwgdmFsdWUsIGdpZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgb3MuY2hvd24sIHN1cHBvcnQuVEVTVEZOLCB1aWQsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShvcy5jaG93bihzdXBwb3J0LlRFU1RGTiwgdWlkLCBnaWQpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShvcy5jaG93bihzdXBwb3J0LlRFU1RGTiwgLTEsIC0xKSkKKwogICAgIGRlZiB0ZXN0X2V4aXN0X29rX3NfaXNnaWRfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCAnZGlyMScpCiAgICAgICAgIFNfSVNHSUQgPSBzdGF0LlNfSVNHSUQKQEAgLTEwMDcsNiArMTExNiwxMiBAQAogICAgICAgICBkYXRhMiA9IHNlbGYuZ2V0X3VyYW5kb21fc3VicHJvY2VzcygxNikKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChkYXRhMSwgZGF0YTIpCiAKKworSEFWRV9HRVRFTlRST1BZID0gKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignSEFWRV9HRVRFTlRST1BZJykgPT0gMSkKKworQHVuaXR0ZXN0LnNraXBJZihIQVZFX0dFVEVOVFJPUFksCisgICAgICAgICAgICAgICAgICJnZXRlbnRyb3B5KCkgZG9lcyBub3QgdXNlIGEgZmlsZSBkZXNjcmlwdG9yIikKK2NsYXNzIFVSYW5kb21GRFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhyZXNvdXJjZSwgInRlc3QgcmVxdWlyZXMgdGhlIHJlc291cmNlIG1vZHVsZSIpCiAgICAgZGVmIHRlc3RfdXJhbmRvbV9mYWlsdXJlKHNlbGYpOgogICAgICAgICAjIENoZWNrIHVyYW5kb20oKSBmYWlsaW5nIHdoZW4gaXQgaXMgbm90IGFibGUgdG8gb3BlbiAvZGV2L3JhbmRvbS4KQEAgLTEwMzAsNiArMTE0NSw0OSBAQAogICAgICAgICAgICAgIiIiCiAgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKIAorICAgIGRlZiB0ZXN0X3VyYW5kb21fZmRfY2xvc2VkKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTIwNzogdXJhbmRvbSgpIHNob3VsZCByZW9wZW4gaXRzIGZkIHRvIC9kZXYvdXJhbmRvbSBpZgorICAgICAgICAjIGNsb3NlZC4KKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIG9zLnVyYW5kb20oNCkKKyAgICAgICAgICAgIG9zLmNsb3NlcmFuZ2UoMywgMjU2KQorICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUob3MudXJhbmRvbSg0KSkKKyAgICAgICAgICAgICIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctU2MnLCBjb2RlKQorCisgICAgZGVmIHRlc3RfdXJhbmRvbV9mZF9yZW9wZW5lZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjEyMDc6IHVyYW5kb20oKSBzaG91bGQgZGV0ZWN0IGl0cyBmZCB0byAvZGV2L3VyYW5kb20KKyAgICAgICAgIyBjaGFuZ2VkIHRvIHNvbWV0aGluZyBlbHNlLCBhbmQgcmVvcGVuIGl0LgorICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGIieCIgKiAyNTYpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcworICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgb3MudXJhbmRvbSg0KQorICAgICAgICAgICAgZm9yIGZkIGluIHJhbmdlKDMsIDI1Nik6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgRm91bmQgdGhlIHVyYW5kb20gZmQgKFhYWCBob3BlZnVsbHkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBvcy5jbG9zZXJhbmdlKDMsIDI1NikKKyAgICAgICAgICAgIHdpdGggb3Blbih7VEVTVEZOIXJ9LCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIG9zLmR1cDIoZi5maWxlbm8oKSwgZmQpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUob3MudXJhbmRvbSg0KSkKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmJ1ZmZlci53cml0ZShvcy51cmFuZG9tKDQpKQorICAgICAgICAgICAgIiIiLmZvcm1hdChURVNURk49c3VwcG9ydC5URVNURk4pCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soJy1TYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91dCksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwob3V0WzA6NF0sIG91dFs0OjhdKQorICAgICAgICByYywgb3V0MiwgZXJyMiA9IGFzc2VydF9weXRob25fb2soJy1TYycsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG91dDIpLCA4KQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG91dDIsIG91dCkKKwogCiBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgogZGVmIF9leGVjdnBlX21vY2t1cChkZWZwYXRoPU5vbmUpOgpAQCAtMTEzMiwyNyArMTI5MCwyNyBAQAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW4zMiBzcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBXaW4zMkVycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW5hbWUsIHN1cHBvcnQuVEVTVEZOLCBzdXBwb3J0LlRFU1RGTisiLmJhayIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnJlbmFtZSwgc3VwcG9ydC5URVNURk4sIHN1cHBvcnQuVEVTVEZOKyIuYmFrIikKIAogICAgIGRlZiB0ZXN0X3JlbW92ZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5yZW1vdmUsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5yZW1vdmUsIHN1cHBvcnQuVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfY2hkaXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2hkaXIsIHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5jaGRpciwgc3VwcG9ydC5URVNURk4pCiAKICAgICBkZWYgdGVzdF9ta2RpcihzZWxmKToKICAgICAgICAgZiA9IG9wZW4oc3VwcG9ydC5URVNURk4sICJ3IikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBvcy5ta2Rpciwgc3VwcG9ydC5URVNURk4pCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5ta2Rpciwgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBmLmNsb3NlKCkKICAgICAgICAgICAgIG9zLnVubGluayhzdXBwb3J0LlRFU1RGTikKIAogICAgIGRlZiB0ZXN0X3V0aW1lKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIG9zLnV0aW1lLCBzdXBwb3J0LlRFU1RGTiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MudXRpbWUsIHN1cHBvcnQuVEVTVEZOLCBOb25lKQogCiAgICAgZGVmIHRlc3RfY2htb2Qoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3MuY2htb2QsIHN1cHBvcnQuVEVTVEZOLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5jaG1vZCwgc3VwcG9ydC5URVNURk4sIDApCiAKIGNsYXNzIFRlc3RJbnZhbGlkRkQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNpbmdsZXMgPSBbImZjaGRpciIsICJkdXAiLCAiZmRvcGVuIiwgImZkYXRhc3luYyIsICJmc3RhdCIsCkBAIC0xMTczLDcgKzEzMzEsNyBAQAogICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmVycm5vLCBlcnJuby5FQkFERikKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIgZGlkbid0IHJhaXNlIGEgT1NFcnJvciB3aXRoIGEgYmFkIGZpbGUgZGVzY3JpcHRvciIKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiJXIgZGlkbid0IHJhaXNlIGFuIE9TRXJyb3Igd2l0aCBhIGJhZCBmaWxlIGRlc2NyaXB0b3IiCiAgICAgICAgICAgICAgICAgICAgICAgJSBmKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2lzYXR0eScpLCAndGVzdCBuZWVkcyBvcy5pc2F0dHkoKScpCkBAIC0xMjg2LDQxICsxNDQ0LDU3IEBACiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHVpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXR1aWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0dWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHVpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldHVpZCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0dWlkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0Z2lkKCknKQogICAgIGRlZiB0ZXN0X3NldGdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0Z2lkLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0Z2lkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRnaWQsIDE8PDMyKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldGV1aWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0ZXVpZCgpJykKICAgICBkZWYgdGVzdF9zZXRldWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldGV1aWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRldWlkLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRldWlkLCAxPDwzMikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRlZ2lkJyksICd0ZXN0IG5lZWRzIG9zLnNldGVnaWQoKScpCiAgICAgZGVmIHRlc3Rfc2V0ZWdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0ZWdpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9zLnNldGVnaWQsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldGVnaWQsIDE8PDMyKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJldWlkKCknKQogICAgIGRlZiB0ZXN0X3NldHJldWlkKHNlbGYpOgogICAgICAgICBpZiBvcy5nZXR1aWQoKSAhPSAwOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMob3MuZXJyb3IsIG9zLnNldHJldWlkLCAwLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Muc2V0cmV1aWQsIDAsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIG9zLnNldHJldWlkLCAxPDwzMiwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmV1aWQsIDAsIDE8PDMyKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3NldHJldWlkJyksICd0ZXN0IG5lZWRzIG9zLnNldHJldWlkKCknKQorICAgIGRlZiB0ZXN0X3NldHJldWlkX25lZzEoc2VsZik6CisgICAgICAgICMgTmVlZHMgdG8gYWNjZXB0IC0xLiAgV2UgcnVuIHRoaXMgaW4gYSBzdWJwcm9jZXNzIHRvIGF2b2lkCisgICAgICAgICMgYWx0ZXJpbmcgdGhlIHRlc3QgcnVubmVyJ3MgcHJvY2VzcyBzdGF0ZSAoaXNzdWU4MDQ1KS4KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IG9zLHN5cztvcy5zZXRyZXVpZCgtMSwtMSk7c3lzLmV4aXQoMCknXSkKKwogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdzZXRyZWdpZCcpLCAndGVzdCBuZWVkcyBvcy5zZXRyZWdpZCgpJykKICAgICBkZWYgdGVzdF9zZXRyZWdpZChzZWxmKToKICAgICAgICAgaWYgb3MuZ2V0dWlkKCkgIT0gMCBhbmQgbm90IEhBVkVfV0hFRUxfR1JPVVA6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhvcy5lcnJvciwgb3Muc2V0cmVnaWQsIDAsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBvcy5zZXRyZWdpZCwgMCwgMCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgb3Muc2V0cmVnaWQsIDE8PDMyLCAwKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBvcy5zZXRyZWdpZCwgMCwgMTw8MzIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnc2V0cmVnaWQnKSwgJ3Rlc3QgbmVlZHMgb3Muc2V0cmVnaWQoKScpCisgICAgZGVmIHRlc3Rfc2V0cmVnaWRfbmVnMShzZWxmKToKKyAgICAgICAgIyBOZWVkcyB0byBhY2NlcHQgLTEuICBXZSBydW4gdGhpcyBpbiBhIHN1YnByb2Nlc3MgdG8gYXZvaWQKKyAgICAgICAgIyBhbHRlcmluZyB0aGUgdGVzdCBydW5uZXIncyBwcm9jZXNzIHN0YXRlIChpc3N1ZTgwNDUpLgorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgb3Msc3lzO29zLnNldHJlZ2lkKC0xLC0xKTtzeXMuZXhpdCgwKSddKQorCiBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiUG9zaXggc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgUGVwMzgzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKQEAgLTE0ODYsNyArMTY2MCw3IEBACiAgICAgICAgICAgICBvcy5raWxsKHByb2MucGlkLCBzaWduYWwuU0lHSU5UKQogICAgICAgICAgICAgc2VsZi5mYWlsKCJzdWJwcm9jZXNzIGRpZCBub3Qgc3RvcCBvbiB7fSIuZm9ybWF0KG5hbWUpKQogCi0gICAgQHVuaXR0ZXN0LnNraXAoInN1YnByb2Nlc3NlcyBhcmVuJ3QgaW5oZXJpdGluZyBDVFJMK0MgcHJvcGVydHkiKQorICAgIEB1bml0dGVzdC5za2lwKCJzdWJwcm9jZXNzZXMgYXJlbid0IGluaGVyaXRpbmcgQ3RybCtDIHByb3BlcnR5IikKICAgICBkZWYgdGVzdF9DVFJMX0NfRVZFTlQoc2VsZik6CiAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcwogICAgICAgICBpbXBvcnQgY3R5cGVzCkBAIC0xNDk5LDcgKzE2NzMsNyBAQAogICAgICAgICBTZXRDb25zb2xlQ3RybEhhbmRsZXIucmVzdHlwZSA9IHdpbnR5cGVzLkJPT0wKIAogICAgICAgICAjIENhbGxpbmcgdGhpcyB3aXRoIE5VTEwgYW5kIEZBTFNFIGNhdXNlcyB0aGUgY2FsbGluZyBwcm9jZXNzIHRvCi0gICAgICAgICMgaGFuZGxlIENUUkwrQywgcmF0aGVyIHRoYW4gaWdub3JlIGl0LiBUaGlzIHByb3BlcnR5IGlzIGluaGVyaXRlZAorICAgICAgICAjIGhhbmRsZSBDdHJsK0MsIHJhdGhlciB0aGFuIGlnbm9yZSBpdC4gVGhpcyBwcm9wZXJ0eSBpcyBpbmhlcml0ZWQKICAgICAgICAgIyBieSBzdWJwcm9jZXNzZXMuCiAgICAgICAgIFNldENvbnNvbGVDdHJsSGFuZGxlcihOVUxMLCAwKQogCkBAIC0xNTEwLDYgKzE2ODQsNTIgQEAKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKK2NsYXNzIFdpbjMyTGlzdGRpclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0IGxpc3RkaXIgb24gV2luZG93cy4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5jcmVhdGVkX3BhdGhzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMik6CisgICAgICAgICAgICBkaXJfbmFtZSA9ICdTVUIlZCcgJSBpCisgICAgICAgICAgICBkaXJfcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgZGlyX25hbWUpCisgICAgICAgICAgICBmaWxlX25hbWUgPSAnRklMRSVkJyAlIGkKKyAgICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgZmlsZV9uYW1lKQorICAgICAgICAgICAgb3MubWFrZWRpcnMoZGlyX3BhdGgpCisgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZV9wYXRoLCAndycpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiSSdtICVzIGFuZCBwcm91ZCBvZiBpdC4gQmxhbWUgdGVzdF9vcy5cbiIgJSBmaWxlX3BhdGgpCisgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMuZXh0ZW5kKFtkaXJfbmFtZSwgZmlsZV9uYW1lXSkKKyAgICAgICAgc2VsZi5jcmVhdGVkX3BhdGhzLnNvcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzaHV0aWwucm10cmVlKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3RfbGlzdGRpcl9ub19leHRlbmRlZF9wYXRoKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHdoZW4gdGhlIHBhdGggaXMgbm90IGFuICJleHRlbmRlZCIgcGF0aC4iIiIKKyAgICAgICAgIyB1bmljb2RlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgc29ydGVkKG9zLmxpc3RkaXIoc3VwcG9ydC5URVNURk4pKSwKKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMpCisgICAgICAgICMgYnl0ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBzb3J0ZWQob3MubGlzdGRpcihvcy5mc2VuY29kZShzdXBwb3J0LlRFU1RGTikpKSwKKyAgICAgICAgICAgICAgICBbb3MuZnNlbmNvZGUocGF0aCkgZm9yIHBhdGggaW4gc2VsZi5jcmVhdGVkX3BhdGhzXSkKKworICAgIGRlZiB0ZXN0X2xpc3RkaXJfZXh0ZW5kZWRfcGF0aChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB3aGVuIHRoZSBwYXRoIHN0YXJ0cyB3aXRoICdcXFxcP1xcJy4iIiIKKyAgICAgICAgIyBTZWU6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS93aW5kb3dzL2Rlc2t0b3AvYWEzNjUyNDcodj12cy44NSkuYXNweCNtYXhwYXRoCisgICAgICAgICMgdW5pY29kZQorICAgICAgICBwYXRoID0gJ1xcXFw/XFwnICsgb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKHBhdGgpKSwKKyAgICAgICAgICAgICAgICBzZWxmLmNyZWF0ZWRfcGF0aHMpCisgICAgICAgICMgYnl0ZXMKKyAgICAgICAgcGF0aCA9IGInXFxcXD9cXCcgKyBvcy5mc2VuY29kZShvcy5wYXRoLmFic3BhdGgoc3VwcG9ydC5URVNURk4pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHNvcnRlZChvcy5saXN0ZGlyKHBhdGgpKSwKKyAgICAgICAgICAgICAgICBbb3MuZnNlbmNvZGUocGF0aCkgZm9yIHBhdGggaW4gc2VsZi5jcmVhdGVkX3BhdGhzXSkKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gIndpbjMyIiwgIldpbjMyIHNwZWNpZmljIHRlc3RzIikKIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKIGNsYXNzIFdpbjMyU3ltbGlua1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmaWxlbGluayA9ICdmaWxlbGlua3Rlc3QnCkBAIC0xOTQ3LDYgKzIxNjcsMTQgQEAKICAgICAgICAgICAgIG9zLnNlbmRmaWxlKHNlbGYuc29ja25vLCBzZWxmLmZpbGVubywgLTEsIDQwOTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5WQUwpCiAKKyAgICBkZWYgdGVzdF9rZXl3b3JkcyhzZWxmKToKKyAgICAgICAgIyBLZXl3b3JkIGFyZ3VtZW50cyBzaG91bGQgYmUgc3VwcG9ydGVkCisgICAgICAgIG9zLnNlbmRmaWxlKG91dD1zZWxmLnNvY2tubywgb2Zmc2V0PTAsIGNvdW50PTQwOTYsCisgICAgICAgICAgICAqKnsnaW4nOiBzZWxmLmZpbGVub30pCisgICAgICAgIGlmIHNlbGYuU1VQUE9SVF9IRUFERVJTX1RSQUlMRVJTOgorICAgICAgICAgICAgb3Muc2VuZGZpbGUoc2VsZi5zb2Nrbm8sIHNlbGYuZmlsZW5vLCBvZmZzZXQ9MCwgY291bnQ9NDA5NiwKKyAgICAgICAgICAgICAgICBoZWFkZXJzPSgpLCB0cmFpbGVycz0oKSwgZmxhZ3M9MCkKKwogICAgICMgLS0tIGhlYWRlcnMgLyB0cmFpbGVycyB0ZXN0cwogCiAgICAgQHJlcXVpcmVzX2hlYWRlcnNfdHJhaWxlcnMKQEAgLTIxNzQsMjMgKzI0MDIsMjE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIGFjdHVhbCkKIAogCitjbGFzcyBPU0Vycm9yVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgY2xhc3MgU3RyKHN0cik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5ieXRlc19maWxlbmFtZXMgPSBbXQorICAgICAgICBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzID0gW10KKyAgICAgICAgaWYgc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkZWNvZGVkID0gc3VwcG9ydC5URVNURk5fVU5FTkNPREFCTEUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRlY29kZWQgPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLmFwcGVuZChkZWNvZGVkKQorICAgICAgICBzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLmFwcGVuZChTdHIoZGVjb2RlZCkpCisgICAgICAgIGlmIHN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZW5jb2RlZCA9IHN1cHBvcnQuVEVTVEZOX1VOREVDT0RBQkxFCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBlbmNvZGVkID0gb3MuZnNlbmNvZGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYnl0ZXNfZmlsZW5hbWVzLmFwcGVuZChlbmNvZGVkKQorICAgICAgICBzZWxmLmJ5dGVzX2ZpbGVuYW1lcy5hcHBlbmQobWVtb3J5dmlldyhlbmNvZGVkKSkKKworICAgICAgICBzZWxmLmZpbGVuYW1lcyA9IHNlbGYuYnl0ZXNfZmlsZW5hbWVzICsgc2VsZi51bmljb2RlX2ZpbGVuYW1lcworCisgICAgZGVmIHRlc3Rfb3NlcnJvcl9maWxlbmFtZShzZWxmKToKKyAgICAgICAgZnVuY3MgPSBbCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmNoZGlyLCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmNobW9kLCAwbzc3NyksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmxzdGF0LCksCisgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLm9wZW4sIG9zLk9fUkRPTkxZKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Mucm1kaXIsKSwKKyAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3Muc3RhdCwpLAorICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy51bmxpbmssKSwKKyAgICAgICAgXQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gIndpbjMyIjoKKyAgICAgICAgICAgIGZ1bmNzLmV4dGVuZCgoCisgICAgICAgICAgICAgICAgKHNlbGYuYnl0ZXNfZmlsZW5hbWVzLCBvcy5yZW5hbWUsIGIiZHN0IiksCisgICAgICAgICAgICAgICAgKHNlbGYuYnl0ZXNfZmlsZW5hbWVzLCBvcy5yZXBsYWNlLCBiImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZW5hbWUsICJkc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi51bmljb2RlX2ZpbGVuYW1lcywgb3MucmVwbGFjZSwgImRzdCIpLAorICAgICAgICAgICAgICAgICMgSXNzdWUgIzE2NDE0OiBEb24ndCB0ZXN0IHVuZGVjb2RhYmxlIG5hbWVzIHdpdGggbGlzdGRpcigpCisgICAgICAgICAgICAgICAgIyBiZWNhdXNlIG9mIGEgV2luZG93cyBidWcuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgV2l0aCB0aGUgQU5TSSBjb2RlIHBhZ2UgOTMyLCBvcy5saXN0ZGlyKGInXHhlNycpIHJldHVybiBhbgorICAgICAgICAgICAgICAgICMgZW1wdHkgbGlzdCAoaW5zdGVhZCBvZiBmYWlsaW5nKSwgd2hlcmVhcyBvcy5saXN0ZGlyKGInXHhmZicpCisgICAgICAgICAgICAgICAgIyByYWlzZXMgYSBGaWxlTm90Rm91bmRFcnJvci4gSXQgbG9va3MgbGlrZSBhIFdpbmRvd3MgYnVnOgorICAgICAgICAgICAgICAgICMgYidceGU3JyBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QsIEZpbmRGaXJzdEZpbGVBKGInXHhlNycpCisgICAgICAgICAgICAgICAgIyBmYWlscyB3aXRoIEVSUk9SX0ZJTEVfTk9UX0ZPVU5EICgyKSwgaW5zdGVhZCBvZgorICAgICAgICAgICAgICAgICMgRVJST1JfUEFUSF9OT1RfRk9VTkQgKDMpLgorICAgICAgICAgICAgICAgIChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5saXN0ZGlyLCksCisgICAgICAgICAgICApKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmxpc3RkaXIsKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnJlbmFtZSwgImRzdCIpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MucmVwbGFjZSwgImRzdCIpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImNob3duIik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaG93biwgMCwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsY2hvd24iKToKKyAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmxjaG93biwgMCwgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJ0cnVuY2F0ZSIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MudHJ1bmNhdGUsIDApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hmbGFncyIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MuY2hmbGFncywgMCkpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJsY2hmbGFncyIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNoZmxhZ3MsIDApKQorICAgICAgICBpZiBoYXNhdHRyKG9zLCAiY2hyb290Iik6CisgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5jaHJvb3QsKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxpbmsiKToKKyAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5ieXRlc19maWxlbmFtZXMsIG9zLmxpbmssIGIiZHN0IikpCisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5saW5rLCAiZHN0IikpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZ1bmNzLmFwcGVuZCgoc2VsZi5maWxlbmFtZXMsIG9zLmxpbmssICJkc3QiKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxpc3R4YXR0ciIpOgorICAgICAgICAgICAgZnVuY3MuZXh0ZW5kKCgKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLmxpc3R4YXR0ciwpLAorICAgICAgICAgICAgICAgIChzZWxmLmZpbGVuYW1lcywgb3MuZ2V0eGF0dHIsICJ1c2VyLnRlc3QiKSwKKyAgICAgICAgICAgICAgICAoc2VsZi5maWxlbmFtZXMsIG9zLnNldHhhdHRyLCAidXNlci50ZXN0IiwgYid1c2VyJyksCisgICAgICAgICAgICAgICAgKHNlbGYuZmlsZW5hbWVzLCBvcy5yZW1vdmV4YXR0ciwgInVzZXIudGVzdCIpLAorICAgICAgICAgICAgKSkKKyAgICAgICAgaWYgaGFzYXR0cihvcywgImxjaG1vZCIpOgorICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLmZpbGVuYW1lcywgb3MubGNobW9kLCAwbzc3NykpCisgICAgICAgIGlmIGhhc2F0dHIob3MsICJyZWFkbGluayIpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICAgICAgZnVuY3MuYXBwZW5kKChzZWxmLnVuaWNvZGVfZmlsZW5hbWVzLCBvcy5yZWFkbGluaywpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmdW5jcy5hcHBlbmQoKHNlbGYuZmlsZW5hbWVzLCBvcy5yZWFkbGluaywpKQorCisgICAgICAgIGZvciBmaWxlbmFtZXMsIGZ1bmMsICpmdW5jX2FyZ3MgaW4gZnVuY3M6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlbmFtZXM6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBmdW5jKG5hbWUsICpmdW5jX2FyZ3MpCisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGVyci5maWxlbmFtZSwgbmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5vIGV4Y2VwdGlvbiB0aHJvd24gYnkge30iLmZvcm1hdChmdW5jKSkKKworY2xhc3MgQ1BVQ291bnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfY3B1X2NvdW50KHNlbGYpOgorICAgICAgICBjcHVzID0gb3MuY3B1X2NvdW50KCkKKyAgICAgICAgaWYgY3B1cyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShjcHVzLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoY3B1cywgMCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBDUFVzIikKKworCitjbGFzcyBGREluaGVyaXRhbmNlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2dldF9zZXRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkKSwgRmFsc2UpCisKKyAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9nZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBGYWxzZSkKKworICAgICAgICAjIGNsZWFyIEZEX0NMT0VYRUMgZmxhZworICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQorICAgICAgICBmbGFncyAmPSB+ZmNudGwuRkRfQ0xPRVhFQworICAgICAgICBmY250bC5mY250bChmZCwgZmNudGwuRl9TRVRGRCwgZmxhZ3MpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmQpLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3Rfc2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIGZkID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmNudGwuZmNudGwoZmQsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQywKKyAgICAgICAgICAgICAgICAgICAgICAgICBmY250bC5GRF9DTE9FWEVDKQorCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZCwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmY250bC5mY250bChmZCwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgIDApCisKKyAgICBkZWYgdGVzdF9vcGVuKHNlbGYpOgorICAgICAgICBmZCA9IG9zLm9wZW4oX19maWxlX18sIG9zLk9fUkRPTkxZKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZCksIEZhbHNlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3BpcGUnKSwgIm5lZWQgb3MucGlwZSgpIikKKyAgICBkZWYgdGVzdF9waXBlKHNlbGYpOgorICAgICAgICByZmQsIHdmZCA9IG9zLnBpcGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIHJmZCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3ZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHJmZCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZSh3ZmQpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2R1cChzZWxmKToKKyAgICAgICAgZmQxID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQxKQorCisgICAgICAgIGZkMiA9IG9zLmR1cChmZDEpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZDIpLCBGYWxzZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdkdXAyJyksICJuZWVkIG9zLmR1cDIoKSIpCisgICAgZGVmIHRlc3RfZHVwMihzZWxmKToKKyAgICAgICAgZmQgPSBvcy5vcGVuKF9fZmlsZV9fLCBvcy5PX1JET05MWSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKKworICAgICAgICAjIGluaGVyaXRhYmxlIGJ5IGRlZmF1bHQKKyAgICAgICAgZmQyID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmR1cDIoZmQsIGZkMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGZkMiksIFRydWUpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBvcy5jbG9zZShmZDIpCisKKyAgICAgICAgIyBmb3JjZSBub24taW5oZXJpdGFibGUKKyAgICAgICAgZmQzID0gb3Mub3BlbihfX2ZpbGVfXywgb3MuT19SRE9OTFkpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLmR1cDIoZmQsIGZkMywgaW5oZXJpdGFibGU9RmFsc2UpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLmdldF9pbmhlcml0YWJsZShmZDMpLCBGYWxzZSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKGZkMykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdvcGVucHR5JyksICJuZWVkIG9zLm9wZW5wdHkoKSIpCisgICAgZGVmIHRlc3Rfb3BlbnB0eShzZWxmKToKKyAgICAgICAgbWFzdGVyX2ZkLCBzbGF2ZV9mZCA9IG9zLm9wZW5wdHkoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIG1hc3Rlcl9mZCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBzbGF2ZV9mZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKHNsYXZlX2ZkKSwgRmFsc2UpCisKKwogQHN1cHBvcnQucmVhcF90aHJlYWRzCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIEZpbGVUZXN0cywKICAgICAgICAgU3RhdEF0dHJpYnV0ZVRlc3RzLAorICAgICAgICBVdGltZVRlc3RzLAogICAgICAgICBFbnZpcm9uVGVzdHMsCiAgICAgICAgIFdhbGtUZXN0cywKICAgICAgICAgRndhbGtUZXN0cywKICAgICAgICAgTWFrZWRpclRlc3RzLAogICAgICAgICBEZXZOdWxsVGVzdHMsCiAgICAgICAgIFVSYW5kb21UZXN0cywKKyAgICAgICAgVVJhbmRvbUZEVGVzdHMsCiAgICAgICAgIEV4ZWNUZXN0cywKICAgICAgICAgV2luMzJFcnJvclRlc3RzLAogICAgICAgICBUZXN0SW52YWxpZEZELAogICAgICAgICBQb3NpeFVpZEdpZFRlc3RzLAogICAgICAgICBQZXAzODNUZXN0cywKICAgICAgICAgV2luMzJLaWxsVGVzdHMsCisgICAgICAgIFdpbjMyTGlzdGRpclRlc3RzLAogICAgICAgICBXaW4zMlN5bWxpbmtUZXN0cywKICAgICAgICAgTm9uTG9jYWxTeW1saW5rVGVzdHMsCiAgICAgICAgIEZTRW5jb2RpbmdUZXN0cywKQEAgLTIyMDMsNyArMjYyNSwxMCBAQAogICAgICAgICBFeHRlbmRlZEF0dHJpYnV0ZVRlc3RzLAogICAgICAgICBXaW4zMkRlcHJlY2F0ZWRCeXRlc0FQSSwKICAgICAgICAgVGVybXNpemVUZXN0cywKKyAgICAgICAgT1NFcnJvclRlc3RzLAogICAgICAgICBSZW1vdmVEaXJzVGVzdHMsCisgICAgICAgIENQVUNvdW50VGVzdHMsCisgICAgICAgIEZESW5oZXJpdGFuY2VUZXN0cywKICAgICApCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5IGIvTGliL3Rlc3QvdGVzdF9vc3NhdWRpb2Rldi5weQppbmRleCAzOTA4YTA1Li5jOWUyYTI0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X29zc2F1ZGlvZGV2LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfb3NzYXVkaW9kZXYucHkKQEAgLTQ0LDcgKzQ0LDcgQEAKICAgICBkZWYgcGxheV9zb3VuZF9maWxlKHNlbGYsIGRhdGEsIHJhdGUsIHNzaXplLCBuY2hhbm5lbHMpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBkc3AgPSBvc3NhdWRpb2Rldi5vcGVuKCd3JykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PREVWLCBlcnJuby5FQlVTWSk6CiAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QobXNnKQpAQCAtMTkwLDcgKzE5MCw3IEBACiBkZWYgdGVzdF9tYWluKCk6CiAgICAgdHJ5OgogICAgICAgICBkc3AgPSBvc3NhdWRpb2Rldi5vcGVuKCd3JykKLSAgICBleGNlcHQgKG9zc2F1ZGlvZGV2LmVycm9yLCBJT0Vycm9yKSBhcyBtc2c6CisgICAgZXhjZXB0IChvc3NhdWRpb2Rldi5lcnJvciwgT1NFcnJvcikgYXMgbXNnOgogICAgICAgICBpZiBtc2cuYXJnc1swXSBpbiAoZXJybm8uRUFDQ0VTLCBlcnJuby5FTk9FTlQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FTk9ERVYsIGVycm5vLkVCVVNZKToKICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KG1zZykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGF0aGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcGF0aGxpYi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDk4ZjI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9wYXRobGliLnB5CkBAIC0wLDAgKzEsMTkyNiBAQAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgaW8KK2ltcG9ydCBvcworaW1wb3J0IGVycm5vCitpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHBpY2tsZQoraW1wb3J0IHNodXRpbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN0YXQKK2ltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQoraW1wb3J0IHVuaXR0ZXN0Citmcm9tIGNvbnRleHRsaWIgaW1wb3J0IGNvbnRleHRtYW5hZ2VyCisKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorVEVTVEZOID0gc3VwcG9ydC5URVNURk4KKwordHJ5OgorICAgIGltcG9ydCBncnAsIHB3ZAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGdycCA9IHB3ZCA9IE5vbmUKKworCitjbGFzcyBfQmFzZUZsYXZvdXJUZXN0KG9iamVjdCk6CisKKyAgICBkZWYgX2NoZWNrX3BhcnNlX3BhcnRzKHNlbGYsIGFyZywgZXhwZWN0ZWQpOgorICAgICAgICBmID0gc2VsZi5mbGF2b3VyLnBhcnNlX3BhcnRzCisgICAgICAgIHNlcCA9IHNlbGYuZmxhdm91ci5zZXAKKyAgICAgICAgYWx0c2VwID0gc2VsZi5mbGF2b3VyLmFsdHNlcAorICAgICAgICBhY3R1YWwgPSBmKFt4LnJlcGxhY2UoJy8nLCBzZXApIGZvciB4IGluIGFyZ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3RlZCkKKyAgICAgICAgaWYgYWx0c2VwOgorICAgICAgICAgICAgYWN0dWFsID0gZihbeC5yZXBsYWNlKCcvJywgYWx0c2VwKSBmb3IgeCBpbiBhcmddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcGFyc2VfcGFydHNfY29tbW9uKHNlbGYpOgorICAgICAgICBjaGVjayA9IHNlbGYuX2NoZWNrX3BhcnNlX3BhcnRzCisgICAgICAgIHNlcCA9IHNlbGYuZmxhdm91ci5zZXAKKyAgICAgICAgIyBVbmFuY2hvcmVkIHBhcnRzCisgICAgICAgIGNoZWNrKFtdLCAgICAgICAgICAgICAgICAgICAoJycsICcnLCBbXSkpCisgICAgICAgIGNoZWNrKFsnYSddLCAgICAgICAgICAgICAgICAoJycsICcnLCBbJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnYS8nXSwgICAgICAgICAgICAgICAoJycsICcnLCBbJ2EnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdiJ10sICAgICAgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgIyBFeHBhbnNpb24KKyAgICAgICAgY2hlY2soWydhL2InXSwgICAgICAgICAgICAgICgnJywgJycsIFsnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJ2EvYi8nXSwgICAgICAgICAgICAgKCcnLCAnJywgWydhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdiL2MnLCAnZCddLCAgICAoJycsICcnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgICMgQ29sbGFwc2luZyBhbmQgc3RyaXBwaW5nIGV4Y2VzcyBzbGFzaGVzCisgICAgICAgIGNoZWNrKFsnYScsICdiLy9jJywgJ2QnXSwgICAoJycsICcnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgIGNoZWNrKFsnYScsICdiL2MvJywgJ2QnXSwgICAoJycsICcnLCBbJ2EnLCAnYicsICdjJywgJ2QnXSkpCisgICAgICAgICMgRWxpbWluYXRpbmcgc3RhbmRhbG9uZSBkb3RzCisgICAgICAgIGNoZWNrKFsnLiddLCAgICAgICAgICAgICAgICAoJycsICcnLCBbXSkpCisgICAgICAgIGNoZWNrKFsnLicsICcuJywgJ2InXSwgICAgICAoJycsICcnLCBbJ2InXSkpCisgICAgICAgIGNoZWNrKFsnYScsICcuJywgJ2InXSwgICAgICAoJycsICcnLCBbJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWydhJywgJy4nLCAnLiddLCAgICAgICgnJywgJycsIFsnYSddKSkKKyAgICAgICAgIyBUaGUgZmlyc3QgcGFydCBpcyBhbmNob3JlZAorICAgICAgICBjaGVjayhbJy9hL2InXSwgICAgICAgICAgICAgKCcnLCBzZXAsIFtzZXAsICdhJywgJ2InXSkpCisgICAgICAgIGNoZWNrKFsnL2EnLCAnYiddLCAgICAgICAgICAoJycsIHNlcCwgW3NlcCwgJ2EnLCAnYiddKSkKKyAgICAgICAgY2hlY2soWycvYS8nLCAnYiddLCAgICAgICAgICgnJywgc2VwLCBbc2VwLCAnYScsICdiJ10pKQorICAgICAgICAjIElnbm9yaW5nIHBhcnRzIGJlZm9yZSBhbiBhbmNob3JlZCBwYXJ0CisgICAgICAgIGNoZWNrKFsnYScsICcvYicsICdjJ10sICAgICAoJycsIHNlcCwgW3NlcCwgJ2InLCAnYyddKSkKKyAgICAgICAgY2hlY2soWydhJywgJy9iJywgJy9jJ10sICAgICgnJywgc2VwLCBbc2VwLCAnYyddKSkKKworCitjbGFzcyBQb3NpeEZsYXZvdXJUZXN0KF9CYXNlRmxhdm91clRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBmbGF2b3VyID0gcGF0aGxpYi5fcG9zaXhfZmxhdm91cgorCisgICAgZGVmIHRlc3RfcGFyc2VfcGFydHMoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfcGFyc2VfcGFydHMKKyAgICAgICAgIyBDb2xsYXBzaW5nIG9mIGV4Y2VzcyBsZWFkaW5nIHNsYXNoZXMsIGV4Y2VwdCBmb3IgdGhlIGRvdWJsZS1zbGFzaAorICAgICAgICAjIHNwZWNpYWwgY2FzZS4KKyAgICAgICAgY2hlY2soWycvL2EnLCAnYiddLCAgICAgICAgICAgICAoJycsICcvLycsIFsnLy8nLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy8vL2EnLCAnYiddLCAgICAgICAgICAgICgnJywgJy8nLCBbJy8nLCAnYScsICdiJ10pKQorICAgICAgICBjaGVjayhbJy8vLy9hJywgJ2InXSwgICAgICAgICAgICgnJywgJy8nLCBbJy8nLCAnYScsICdiJ10pKQorICAgICAgICAjIFBhdGhzIHdoaWNoIGxvb2sgbGlrZSBOVCBwYXRocyBhcmVuJ3QgdHJlYXRlZCBzcGVjaWFsbHkKKyAgICAgICAgY2hlY2soWydjOmEnXSwgICAgICAgICAgICAgICAgICAoJycsICcnLCBbJ2M6YSddKSkKKyAgICAgICAgY2hlY2soWydjOlxcYSddLCAgICAgICAgICAgICAgICAoJycsICcnLCBbJ2M6XFxhJ10pKQorICAgICAgICBjaGVjayhbJ1xcYSddLCAgICAgICAgICAgICAgICAgICgnJywgJycsIFsnXFxhJ10pKQorCisgICAgZGVmIHRlc3Rfc3BsaXRyb290KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mbGF2b3VyLnNwbGl0cm9vdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJycpLCAoJycsICcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYScpLCAoJycsICcnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2EvYicpLCAoJycsICcnLCAnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYS9iLycpLCAoJycsICcnLCAnYS9iLycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy9hJyksICgnJywgJy8nLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy9hL2InKSwgKCcnLCAnLycsICdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvYS9iLycpLCAoJycsICcvJywgJ2EvYi8nKSkKKyAgICAgICAgIyBUaGUgcm9vdCBpcyBjb2xsYXBzZWQgd2hlbiB0aGVyZSBhcmUgcmVkdW5kYW50IHNsYXNoZXMKKyAgICAgICAgIyBleGNlcHQgd2hlbiB0aGVyZSBhcmUgZXhhY3RseSB0d28gbGVhZGluZyBzbGFzaGVzLCB3aGljaAorICAgICAgICAjIGlzIGEgc3BlY2lhbCBjYXNlIGluIFBPU0lYLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJy8vYScpLCAoJycsICcvLycsICdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignLy8vYScpLCAoJycsICcvJywgJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCcvLy9hL2InKSwgKCcnLCAnLycsICdhL2InKSkKKyAgICAgICAgIyBQYXRocyB3aGljaCBsb29rIGxpa2UgTlQgcGF0aHMgYXJlbid0IHRyZWF0ZWQgc3BlY2lhbGx5CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzovYS9iJyksICgnJywgJycsICdjOi9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXC9hL2InKSwgKCcnLCAnJywgJ1xcL2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcYVxcYicpLCAoJycsICcnLCAnXFxhXFxiJykpCisKKworY2xhc3MgTlRGbGF2b3VyVGVzdChfQmFzZUZsYXZvdXJUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZmxhdm91ciA9IHBhdGhsaWIuX3dpbmRvd3NfZmxhdm91cgorCisgICAgZGVmIHRlc3RfcGFyc2VfcGFydHMoc2VsZik6CisgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfcGFyc2VfcGFydHMKKyAgICAgICAgIyBGaXJzdCBwYXJ0IGlzIGFuY2hvcmVkCisgICAgICAgIGNoZWNrKFsnYzonXSwgICAgICAgICAgICAgICAgICAgKCdjOicsICcnLCBbJ2M6J10pKQorICAgICAgICBjaGVjayhbJ2M6LyddLCAgICAgICAgICAgICAgICAgICgnYzonLCAnXFwnLCBbJ2M6XFwnXSkpCisgICAgICAgIGNoZWNrKFsnLyddLCAgICAgICAgICAgICAgICAgICAgKCcnLCAnXFwnLCBbJ1xcJ10pKQorICAgICAgICBjaGVjayhbJ2M6YSddLCAgICAgICAgICAgICAgICAgICgnYzonLCAnJywgWydjOicsICdhJ10pKQorICAgICAgICBjaGVjayhbJ2M6L2EnXSwgICAgICAgICAgICAgICAgICgnYzonLCAnXFwnLCBbJ2M6XFwnLCAnYSddKSkKKyAgICAgICAgY2hlY2soWycvYSddLCAgICAgICAgICAgICAgICAgICAoJycsICdcXCcsIFsnXFwnLCAnYSddKSkKKyAgICAgICAgIyBVTkMgcGF0aHMKKyAgICAgICAgY2hlY2soWycvL2EvYiddLCAgICAgICAgICAgICAgICAoJ1xcXFxhXFxiJywgJ1xcJywgWydcXFxcYVxcYlxcJ10pKQorICAgICAgICBjaGVjayhbJy8vYS9iLyddLCAgICAgICAgICAgICAgICgnXFxcXGFcXGInLCAnXFwnLCBbJ1xcXFxhXFxiXFwnXSkpCisgICAgICAgIGNoZWNrKFsnLy9hL2IvYyddLCAgICAgICAgICAgICAgKCdcXFxcYVxcYicsICdcXCcsIFsnXFxcXGFcXGJcXCcsICdjJ10pKQorICAgICAgICAjIFNlY29uZCBwYXJ0IGlzIGFuY2hvcmVkLCBzbyB0aGF0IHRoZSBmaXJzdCBwYXJ0IGlzIGlnbm9yZWQKKyAgICAgICAgY2hlY2soWydhJywgJ1o6YicsICdjJ10sICAgICAgICAoJ1o6JywgJycsIFsnWjonLCAnYicsICdjJ10pKQorICAgICAgICBjaGVjayhbJ2EnLCAnWjovYicsICdjJ10sICAgICAgICgnWjonLCAnXFwnLCBbJ1o6XFwnLCAnYicsICdjJ10pKQorICAgICAgICAjIFVOQyBwYXRocworICAgICAgICBjaGVjayhbJ2EnLCAnLy9iL2MnLCAnZCddLCAgICAgICgnXFxcXGJcXGMnLCAnXFwnLCBbJ1xcXFxiXFxjXFwnLCAnZCddKSkKKyAgICAgICAgIyBDb2xsYXBzaW5nIGFuZCBzdHJpcHBpbmcgZXhjZXNzIHNsYXNoZXMKKyAgICAgICAgY2hlY2soWydhJywgJ1o6Ly9iLy9jLycsICdkLyddLCAoJ1o6JywgJ1xcJywgWydaOlxcJywgJ2InLCAnYycsICdkJ10pKQorICAgICAgICAjIFVOQyBwYXRocworICAgICAgICBjaGVjayhbJ2EnLCAnLy9iL2MvLycsICdkJ10sICAgICgnXFxcXGJcXGMnLCAnXFwnLCBbJ1xcXFxiXFxjXFwnLCAnZCddKSkKKyAgICAgICAgIyBFeHRlbmRlZCBwYXRocworICAgICAgICBjaGVjayhbJy8vPy9jOi8nXSwgICAgICAgICAgICAgICgnXFxcXD9cXGM6JywgJ1xcJywgWydcXFxcP1xcYzpcXCddKSkKKyAgICAgICAgY2hlY2soWycvLz8vYzovYSddLCAgICAgICAgICAgICAoJ1xcXFw/XFxjOicsICdcXCcsIFsnXFxcXD9cXGM6XFwnLCAnYSddKSkKKyAgICAgICAgY2hlY2soWycvLz8vYzovYScsICcvYiddLCAgICAgICAoJ1xcXFw/XFxjOicsICdcXCcsIFsnXFxcXD9cXGM6XFwnLCAnYiddKSkKKyAgICAgICAgIyBFeHRlbmRlZCBVTkMgcGF0aHMgKGZvcm1hdCBpcyAiXFw/XFVOQ1xzZXJ2ZXJcc2hhcmUiKQorICAgICAgICBjaGVjayhbJy8vPy9VTkMvYi9jJ10sICAgICAgICAgICgnXFxcXD9cXFVOQ1xcYlxcYycsICdcXCcsIFsnXFxcXD9cXFVOQ1xcYlxcY1xcJ10pKQorICAgICAgICBjaGVjayhbJy8vPy9VTkMvYi9jL2QnXSwgICAgICAgICgnXFxcXD9cXFVOQ1xcYlxcYycsICdcXCcsIFsnXFxcXD9cXFVOQ1xcYlxcY1xcJywgJ2QnXSkpCisgICAgICAgICMgU2Vjb25kIHBhcnQgaGFzIGEgcm9vdCBidXQgbm90IGRyaXZlCisgICAgICAgIGNoZWNrKFsnYScsICcvYicsICdjJ10sICAgICAgICAgKCcnLCAnXFwnLCBbJ1xcJywgJ2InLCAnYyddKSkKKyAgICAgICAgY2hlY2soWydaOi9hJywgJy9iJywgJ2MnXSwgICAgICAoJ1o6JywgJ1xcJywgWydaOlxcJywgJ2InLCAnYyddKSkKKyAgICAgICAgY2hlY2soWycvLz8vWjovYScsICcvYicsICdjJ10sICAoJ1xcXFw/XFxaOicsICdcXCcsIFsnXFxcXD9cXFo6XFwnLCAnYicsICdjJ10pKQorCisgICAgZGVmIHRlc3Rfc3BsaXRyb290KHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mbGF2b3VyLnNwbGl0cm9vdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJycpLCAoJycsICcnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYScpLCAoJycsICcnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2FcXGInKSwgKCcnLCAnJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXGEnKSwgKCcnLCAnXFwnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcYVxcYicpLCAoJycsICdcXCcsICdhXFxiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignYzphXFxiJyksICgnYzonLCAnJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOlxcYVxcYicpLCAoJ2M6JywgJ1xcJywgJ2FcXGInKSkKKyAgICAgICAgIyBSZWR1bmRhbnQgc2xhc2hlcyBpbiB0aGUgcm9vdCBhcmUgY29sbGFwc2VkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGEnKSwgKCcnLCAnXFwnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ1xcXFxcXGEvYicpLCAoJycsICdcXCcsICdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdjOlxcXFxhJyksICgnYzonLCAnXFwnLCAnYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoJ2M6XFxcXFxcYS9iJyksICgnYzonLCAnXFwnLCAnYS9iJykpCisgICAgICAgICMgVmFsaWQgVU5DIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGFcXGInKSwgKCdcXFxcYVxcYicsICdcXCcsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYVxcYlxcJyksICgnXFxcXGFcXGInLCAnXFwnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZignXFxcXGFcXGJcXGNcXGQnKSwgKCdcXFxcYVxcYicsICdcXCcsICdjXFxkJykpCisgICAgICAgICMgVGhlc2UgYXJlIG5vbi1VTkMgcGF0aHMgKGFjY29yZGluZyB0byBudHBhdGgucHkgYW5kIHRlc3RfbnRwYXRoKQorICAgICAgICAjIEhvd2V2ZXIsIGNvbW1hbmQuY29tIHNheXMgc3VjaCBwYXRocyBhcmUgaW52YWxpZCwgc28gaXQncworICAgICAgICAjIGRpZmZpY3VsdCB0byBrbm93IHdoYXQgdGhlIHJpZ2h0IHNlbWFudGljcyBhcmUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcXFxhXFxiJyksICgnJywgJ1xcJywgJ2FcXGInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCdcXFxcYScpLCAoJycsICdcXCcsICdhJykpCisKKworIworIyBUZXN0cyBmb3IgdGhlIHB1cmUgY2xhc3NlcworIworCitjbGFzcyBfQmFzZVB1cmVQYXRoVGVzdChvYmplY3QpOgorCisgICAgIyBrZXlzIGFyZSBjYW5vbmljYWwgcGF0aHMsIHZhbHVlcyBhcmUgbGlzdCBvZiB0dXBsZXMgb2YgYXJndW1lbnRzCisgICAgIyBzdXBwb3NlZCB0byBwcm9kdWNlIGVxdWFsIHBhdGhzCisgICAgZXF1aXZhbGVuY2VzID0geworICAgICAgICAnYS9iJzogWworICAgICAgICAgICAgKCdhJywgJ2InKSwgKCdhLycsICdiJyksICgnYScsICdiLycpLCAoJ2EvJywgJ2IvJyksCisgICAgICAgICAgICAoJ2EvYi8nLCksICgnYS8vYicsKSwgKCdhLy9iLy8nLCksCisgICAgICAgICAgICAjIGVtcHR5IGNvbXBvbmVudHMgZ2V0IHJlbW92ZWQKKyAgICAgICAgICAgICgnJywgJ2EnLCAnYicpLCAoJ2EnLCAnJywgJ2InKSwgKCdhJywgJ2InLCAnJyksCisgICAgICAgICAgICBdLAorICAgICAgICAnL2IvYy9kJzogWworICAgICAgICAgICAgKCdhJywgJy9iL2MnLCAnZCcpLCAoJ2EnLCAnLy8vYi8vYycsICdkLycpLAorICAgICAgICAgICAgKCcvYScsICcvYi9jJywgJ2QnKSwKKyAgICAgICAgICAgICMgZW1wdHkgY29tcG9uZW50cyBnZXQgcmVtb3ZlZAorICAgICAgICAgICAgKCcvJywgJ2InLCAnJywgJ2MvZCcpLCAoJy8nLCAnJywgJ2IvYy9kJyksICgnJywgJy9iL2MvZCcpLAorICAgICAgICAgICAgXSwKKyAgICB9CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscygnYScpCisgICAgICAgIHNlbGYuZmxhdm91ciA9IHAuX2ZsYXZvdXIKKyAgICAgICAgc2VsZi5zZXAgPSBzZWxmLmZsYXZvdXIuc2VwCisgICAgICAgIHNlbGYuYWx0c2VwID0gc2VsZi5mbGF2b3VyLmFsdHNlcAorCisgICAgZGVmIHRlc3RfY29uc3RydWN0b3JfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocCwgUCkKKyAgICAgICAgUCgnYScsICdiJywgJ2MnKQorICAgICAgICBQKCcvYScsICdiJywgJ2MnKQorICAgICAgICBQKCdhL2IvYycpCisgICAgICAgIFAoJy9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChQKCdhJykpLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChQKCdhJyksICdiJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoUCgnYScpLCBQKCdiJykpLCBQKCdhL2InKSkKKworICAgIGRlZiBfY2hlY2tfc3RyX3N1YmNsYXNzKHNlbGYsICphcmdzKToKKyAgICAgICAgIyBJc3N1ZSAjMjExMjc6IGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgYSBQdXJlUGF0aCBvYmplY3QKKyAgICAgICAgIyBmcm9tIGFuIHN0ciBzdWJjbGFzcyBpbnN0YW5jZSwgYW5kIGl0IHRoZW4gZ2V0cyBjb252ZXJ0ZWQgdG8KKyAgICAgICAgIyBhIHB1cmUgc3RyIG9iamVjdC4KKyAgICAgICAgY2xhc3MgU3RyU3ViY2xhc3Moc3RyKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCooU3RyU3ViY2xhc3MoeCkgZm9yIHggaW4gYXJncykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCgqYXJncykpCisgICAgICAgIGZvciBwYXJ0IGluIHAucGFydHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocGFydCksIHN0cikKKworICAgIGRlZiB0ZXN0X3N0cl9zdWJjbGFzc19jb21tb24oc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCcuJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdhJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdhL2IudHh0JykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCcvYS9iLnR4dCcpCisKKyAgICBkZWYgdGVzdF9qb2luX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2InKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdhL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocHApLCB0eXBlKHApKQorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ2MnLCAnZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jL2QnKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKFAoJ2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnYS9iL2MnKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCcvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy9jJykpCisKKyAgICBkZWYgdGVzdF9kaXZfY29tbW9uKHNlbGYpOgorICAgICAgICAjIEJhc2ljYWxseSB0aGUgc2FtZSBhcyBqb2lucGF0aCgpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnYS9iJykKKyAgICAgICAgcHAgPSBwIC8gJ2MnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShwcCksIHR5cGUocCkpCisgICAgICAgIHBwID0gcCAvICdjL2QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jL2QnKSkKKyAgICAgICAgcHAgPSBwIC8gJ2MnIC8gJ2QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jL2QnKSkKKyAgICAgICAgcHAgPSAnYycgLyBwIC8gJ2QnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2MvYS9iL2QnKSkKKyAgICAgICAgcHAgPSBwIC8gUCgnYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ2EvYi9jJykpCisgICAgICAgIHBwID0gcC8gJy9jJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvYycpKQorCisgICAgZGVmIF9jaGVja19zdHIoc2VsZiwgZXhwZWN0ZWQsIGFyZ3MpOgorICAgICAgICBwID0gc2VsZi5jbHMoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBleHBlY3RlZC5yZXBsYWNlKCcvJywgc2VsZi5zZXApKQorCisgICAgZGVmIHRlc3Rfc3RyX2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBDYW5vbmljYWxpemVkIHBhdGhzIHJvdW5kdHJpcAorICAgICAgICBmb3IgcGF0aHN0ciBpbiAoJ2EnLCAnYS9iJywgJ2EvYi9jJywgJy8nLCAnL2EvYicsICcvYS9iL2MnKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX3N0cihwYXRoc3RyLCAocGF0aHN0ciwpKQorICAgICAgICAjIFNwZWNpYWwgY2FzZSBmb3IgdGhlIGVtcHR5IHBhdGgKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyKCcuJywgKCcnLCkpCisgICAgICAgICMgT3RoZXIgdGVzdHMgZm9yIHN0cigpIGFyZSBpbiB0ZXN0X2VxdWl2YWxlbmNlcygpCisKKyAgICBkZWYgdGVzdF9hc19wb3NpeF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBmb3IgcGF0aHN0ciBpbiAoJ2EnLCAnYS9iJywgJ2EvYi9jJywgJy8nLCAnL2EvYicsICcvYS9iL2MnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUChwYXRoc3RyKS5hc19wb3NpeCgpLCBwYXRoc3RyKQorICAgICAgICAjIE90aGVyIHRlc3RzIGZvciBhc19wb3NpeCgpIGFyZSBpbiB0ZXN0X2VxdWl2YWxlbmNlcygpCisKKyAgICBkZWYgdGVzdF9hc19ieXRlc19jb21tb24oc2VsZik6CisgICAgICAgIHNlcCA9IG9zLmZzZW5jb2RlKHNlbGYuc2VwKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlcyhQKCdhL2InKSksIGInYScgKyBzZXAgKyBiJ2InKQorCisgICAgZGVmIHRlc3RfYXNfdXJpX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCdhJykuYXNfdXJpKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIFAoKS5hc191cmkoKQorCisgICAgZGVmIHRlc3RfcmVwcl9jb21tb24oc2VsZik6CisgICAgICAgIGZvciBwYXRoc3RyIGluICgnYScsICdhL2InLCAnYS9iL2MnLCAnLycsICcvYS9iJywgJy9hL2IvYycpOgorICAgICAgICAgICAgcCA9IHNlbGYuY2xzKHBhdGhzdHIpCisgICAgICAgICAgICBjbHNuYW1lID0gcC5fX2NsYXNzX18uX19uYW1lX18KKyAgICAgICAgICAgIHIgPSByZXByKHApCisgICAgICAgICAgICAjIFRoZSByZXByKCkgaXMgaW4gdGhlIGZvcm0gQ2xhc3NOYW1lKCJmb3J3YXJkLXNsYXNoZXMgcGF0aCIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoci5zdGFydHN3aXRoKGNsc25hbWUgKyAnKCcpLCByKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHIuZW5kc3dpdGgoJyknKSwgcikKKyAgICAgICAgICAgIGlubmVyID0gcltsZW4oY2xzbmFtZSkgKyAxIDogLTFdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoaW5uZXIpLCBwLmFzX3Bvc2l4KCkpCisgICAgICAgICAgICAjIFRoZSByZXByKCkgcm91bmR0cmlwcworICAgICAgICAgICAgcSA9IGV2YWwociwgcGF0aGxpYi5fX2RpY3RfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMocS5fX2NsYXNzX18sIHAuX19jbGFzc19fKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCBwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHEpLCByKQorCisgICAgZGVmIHRlc3RfZXFfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJyksIFAoJ2EnLCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2EvYicpLCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYS9iJyksIFAoJy9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCdhL2InKSwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJy9hL2InKSwgUCgnLycpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoKSwgUCgnLycpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoKSwgIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgpLCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCksIGludCkKKworICAgIGRlZiB0ZXN0X21hdGNoX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EnKS5tYXRjaCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EnKS5tYXRjaCwgJy4nKQorICAgICAgICAjIFNpbXBsZSByZWxhdGl2ZSBwYXR0ZXJuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdiLnB5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2EvYi5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvYS9iLnB5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhLnB5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiL3B5JykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYS5weScpLm1hdGNoKCdiLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weS9jJykubWF0Y2goJ2IucHknKSkKKyAgICAgICAgIyBXaWxjYXJkIHJlbGF0aXZlIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2IucHknKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYS9iLnB5JykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hL2IucHknKS5tYXRjaCgnKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHljJykubWF0Y2goJyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdiLi9weScpLm1hdGNoKCcqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weS9jJykubWF0Y2goJyoucHknKSkKKyAgICAgICAgIyBNdWx0aS1wYXJ0IHJlbGF0aXZlIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2FiL2MucHknKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2QvYWIvYy5weScpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYS5weScpLm1hdGNoKCdhKi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2RhYi9jLnB5JykubWF0Y2goJ2EqLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhYi9jLnB5L2QnKS5tYXRjaCgnYSovKi5weScpKQorICAgICAgICAjIEFic29sdXRlIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EvYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hL2IucHknKS5tYXRjaCgnLyoucHknKSkKKyAgICAgICAgIyBNdWx0aS1wYXJ0IGFic29sdXRlIHBhdHRlcm4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy9hL2IucHknKS5tYXRjaCgnL2EvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hYi5weScpLm1hdGNoKCcvYS8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnL2EvYi9jLnB5JykubWF0Y2goJy9hLyoucHknKSkKKworICAgIGRlZiB0ZXN0X29yZGVyaW5nX2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBPcmRlcmluZyBpcyB0dXBsZS1hbGlrZQorICAgICAgICBkZWYgYXNzZXJ0TGVzcyhhLCBiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGIsIGEpCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBhID0gUCgnYScpCisgICAgICAgIGIgPSBQKCdhL2InKQorICAgICAgICBjID0gUCgnYWJjJykKKyAgICAgICAgZCA9IFAoJ2InKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGIpCisgICAgICAgIGFzc2VydExlc3MoYSwgYykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBkKQorICAgICAgICBhc3NlcnRMZXNzKGIsIGMpCisgICAgICAgIGFzc2VydExlc3MoYywgZCkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIGEgPSBQKCcvYScpCisgICAgICAgIGIgPSBQKCcvYS9iJykKKyAgICAgICAgYyA9IFAoJy9hYmMnKQorICAgICAgICBkID0gUCgnL2InKQorICAgICAgICBhc3NlcnRMZXNzKGEsIGIpCisgICAgICAgIGFzc2VydExlc3MoYSwgYykKKyAgICAgICAgYXNzZXJ0TGVzcyhhLCBkKQorICAgICAgICBhc3NlcnRMZXNzKGIsIGMpCisgICAgICAgIGFzc2VydExlc3MoYywgZCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgUCgpIDwge30KKworICAgIGRlZiB0ZXN0X3BhcnRzX2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBgcGFydHNgIHJldHVybnMgYSB0dXBsZQorICAgICAgICBzZXAgPSBzZWxmLnNlcAorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ2EnLCAnYicpKQorICAgICAgICAjIFRoZSBvYmplY3QgZ2V0cyByZXVzZWQKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwYXJ0cywgcC5wYXJ0cykKKyAgICAgICAgIyBXaGVuIHRoZSBwYXRoIGlzIGFic29sdXRlLCB0aGUgYW5jaG9yIGlzIGEgc2VwYXJhdGUgcGFydAorICAgICAgICBwID0gUCgnL2EvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoc2VwLCAnYScsICdiJykpCisKKyAgICBkZWYgdGVzdF9lcXVpdmFsZW5jZXMoc2VsZik6CisgICAgICAgIGZvciBrLCB0dXBsZXMgaW4gc2VsZi5lcXVpdmFsZW5jZXMuaXRlbXMoKToKKyAgICAgICAgICAgIGNhbm9uID0gay5yZXBsYWNlKCcvJywgc2VsZi5zZXApCisgICAgICAgICAgICBwb3NpeCA9IGsucmVwbGFjZShzZWxmLnNlcCwgJy8nKQorICAgICAgICAgICAgaWYgY2Fub24gIT0gcG9zaXg6CisgICAgICAgICAgICAgICAgdHVwbGVzID0gdHVwbGVzICsgWworICAgICAgICAgICAgICAgICAgICB0dXBsZShwYXJ0LnJlcGxhY2UoJy8nLCBzZWxmLnNlcCkgZm9yIHBhcnQgaW4gdCkKKyAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gdHVwbGVzCisgICAgICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgICAgICB0dXBsZXMuYXBwZW5kKChwb3NpeCwgKSkKKyAgICAgICAgICAgIHBjYW5vbiA9IHNlbGYuY2xzKGNhbm9uKQorICAgICAgICAgICAgZm9yIHQgaW4gdHVwbGVzOgorICAgICAgICAgICAgICAgIHAgPSBzZWxmLmNscygqdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIHBjYW5vbiwgImZhaWxlZCB3aXRoIGFyZ3Mge30iLmZvcm1hdCh0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2gocCksIGhhc2gocGNhbm9uKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgY2Fub24pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmFzX3Bvc2l4KCksIHBvc2l4KQorCisgICAgZGVmIHRlc3RfcGFyZW50X2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBSZWxhdGl2ZQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudCwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LCBQKCdhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCkpCisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgcCA9IFAoJy9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJy9hL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJy9hJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCcvJykpCisKKyAgICBkZWYgdGVzdF9wYXJlbnRzX2NvbW1vbihzZWxmKToKKyAgICAgICAgIyBSZWxhdGl2ZQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ2EvYi9jJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJ2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMl0sIFAoJy4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCdhL2InKSwgUCgnYScpLCBQKCcuJyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWy0xXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzNdCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHBhclswXSA9IHAKKyAgICAgICAgIyBBbmNob3JlZAorICAgICAgICBwID0gUCgnL2EvYi9jJykKKyAgICAgICAgcGFyID0gcC5wYXJlbnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHBhciksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzBdLCBQKCcvYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyWzFdLCBQKCcvYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsyXSwgUCgnLycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJy9hL2InKSwgUCgnL2EnKSwgUCgnLycpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclszXQorCisgICAgZGVmIHRlc3RfZHJpdmVfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5kcml2ZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLmRyaXZlLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5kcml2ZSwgJycpCisKKyAgICBkZWYgdGVzdF9yb290X2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlcCA9IHNlbGYuc2VwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iJykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLnJvb3QsIHNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykucm9vdCwgc2VwKQorCisgICAgZGVmIHRlc3RfYW5jaG9yX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlcCA9IHNlbGYuc2VwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuYW5jaG9yLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5hbmNob3IsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5hbmNob3IsIHNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykuYW5jaG9yLCBzZXApCisKKyAgICBkZWYgdGVzdF9uYW1lX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLicpLm5hbWUsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLy4nKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5JykubmFtZSwgJ2IucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IucHknKS5uYW1lLCAnYi5weScpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhfY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4uJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IvLicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5Jykuc3VmZml4LCAnLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnB5Jykuc3VmZml4LCAnLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhLy5oZ3JjJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS8uaGdyYycpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hLy5oZy5yYycpLnN1ZmZpeCwgJy5yYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnRhci5neicpLnN1ZmZpeCwgJy5neicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvU29tZSBuYW1lLiBFbmRpbmcgd2l0aCBhIGRvdC4nKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4LCAnJykKKworICAgIGRlZiB0ZXN0X3N1ZmZpeGVzX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLy4nKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5Jykuc3VmZml4ZXMsIFsnLnB5J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhncmMnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvLmhncmMnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IudGFyLmd6Jykuc3VmZml4ZXMsIFsnLnRhcicsICcuZ3onXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKworICAgIGRlZiB0ZXN0X3N0ZW1fY29tbW9uKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcnKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcuJykuc3RlbSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLi4nKS5zdGVtLCAnLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2InKS5zdGVtLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5Jykuc3RlbSwgJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhncmMnKS5zdGVtLCAnLmhncmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvLmhnLnJjJykuc3RlbSwgJy5oZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnRhci5neicpLnN0ZW0sICdiLnRhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykKKworICAgIGRlZiB0ZXN0X3dpdGhfbmFtZV9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJy9hL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYS9iLnB5Jykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCdhL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnL2EvZC54bWwnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL0RvdCBlbmRpbmcuJykud2l0aF9uYW1lKCdkLnhtbCcpLCBQKCdhL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvRG90IGVuZGluZy4nKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJy9hL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJycpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLicpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLycpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9uYW1lLCAnL2MnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX25hbWUsICdjLycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2EvYicpLndpdGhfbmFtZSwgJ2MvZCcpCisKKyAgICBkZWYgdGVzdF93aXRoX3N1ZmZpeF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYi5weScpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnL2EvYi5neicpKQorICAgICAgICAjIFN0cmlwcGluZyBzdWZmaXgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL2IucHknKS53aXRoX3N1ZmZpeCgnJyksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2InKS53aXRoX3N1ZmZpeCgnJyksIFAoJy9hL2InKSkKKyAgICAgICAgIyBQYXRoIGRvZXNuJ3QgaGF2ZSBhICJmaWxlbmFtZSIgY29tcG9uZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLicpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgIyBJbnZhbGlkIHN1ZmZpeAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX3N1ZmZpeCwgJ2d6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcvJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcvLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICdjL2QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdhL2InKS53aXRoX3N1ZmZpeCwgJy5jLy5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcuLy5kJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYS9iJykud2l0aF9zdWZmaXgsICcuZC8uJykKKworICAgIGRlZiB0ZXN0X3JlbGF0aXZlX3RvX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdhL2InKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHAucmVsYXRpdmVfdG8pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcC5yZWxhdGl2ZV90bywgYidhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoKSksIFAoJ2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJycpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2EnKSksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdhJyksIFAoJ2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdhLycpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdhL2InKSksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdhL2InKSwgUCgpKQorICAgICAgICAjIFdpdGggc2V2ZXJhbCBhcmdzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYScsICdiJyksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdhL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdhL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL2EnKSkKKyAgICAgICAgcCA9IFAoJy9hL2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnLycpKSwgUCgnYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnLycpLCBQKCdhL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy9hJykpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnL2EnKSwgUCgnYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy9hLycpLCBQKCdiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvYS9iJykpLCBQKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnL2EvYicpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9hL2IvYycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvYS9jJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2EnKSkKKworICAgIGRlZiB0ZXN0X3BpY2tsaW5nX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCcvYS9iJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMocCwgcHJvdG8pCisgICAgICAgICAgICBwcCA9IHBpY2tsZS5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHBwLl9fY2xhc3NfXywgcC5fX2NsYXNzX18pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYXNoKHBwKSwgaGFzaChwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHBwKSwgc3RyKHApKQorCisKK2NsYXNzIFB1cmVQb3NpeFBhdGhUZXN0KF9CYXNlUHVyZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5QdXJlUG9zaXhQYXRoCisKKyAgICBkZWYgdGVzdF9yb290KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvYS9iJykucm9vdCwgJy8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vL2EvYicpLnJvb3QsICcvJykKKyAgICAgICAgIyBQT1NJWCBzcGVjaWFsIGNhc2UgZm9yIHR3byBsZWFkaW5nIHNsYXNoZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYicpLnJvb3QsICcvLycpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYS9iJyksIFAoJ0EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hJyksIFAoJy8vL2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChQKCcvYScpLCBQKCcvL2EnKSkKKworICAgIGRlZiB0ZXN0X2FzX3VyaShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLycpLmFzX3VyaSgpLCAnZmlsZTovLy8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy9hL2IuYycpLmFzX3VyaSgpLCAnZmlsZTovLy9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYiUjYycpLmFzX3VyaSgpLCAnZmlsZTovLy9hL2IlMjUlMjNjJykKKworICAgIGRlZiB0ZXN0X2FzX3VyaV9ub25fYXNjaWkoc2VsZik6CisgICAgICAgIGZyb20gdXJsbGliLnBhcnNlIGltcG9ydCBxdW90ZV9mcm9tX2J5dGVzCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICB0cnk6CisgICAgICAgICAgICBvcy5mc2VuY29kZSgnXHhlOScpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJcXHhlOSBjYW5ub3QgYmUgZW5jb2RlZCB0byB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnL2EvYlx4ZTknKS5hc191cmkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovLy9hL2InICsgcXVvdGVfZnJvbV9ieXRlcyhvcy5mc2VuY29kZSgnXHhlOScpKSkKKworICAgIGRlZiB0ZXN0X21hdGNoKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdBLnB5JykubWF0Y2goJ2EuUFknKSkKKworICAgIGRlZiB0ZXN0X2lzX2Fic29sdXRlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCkuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCdhL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnL2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iJykuaXNfYWJzb2x1dGUoKSkKKworICAgIGRlZiB0ZXN0X2lzX3Jlc2VydmVkKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnLycpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy9mb28vYmFyJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnL2Rldi9jb24vUFJOL05VTCcpLmlzX3Jlc2VydmVkKCkpCisKKyAgICBkZWYgdGVzdF9qb2luKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJy8vYScpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJy8vYS9iJykpCisgICAgICAgIHBwID0gUCgnL2EnKS5qb2lucGF0aCgnLy9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9jJykpCisgICAgICAgIHBwID0gUCgnLy9hJykuam9pbnBhdGgoJy9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnL2MnKSkKKworICAgIGRlZiB0ZXN0X2RpdihzZWxmKToKKyAgICAgICAgIyBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgam9pbnBhdGgoKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJy8vYScpCisgICAgICAgIHBwID0gcCAvICdiJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2EvYicpKQorICAgICAgICBwcCA9IFAoJy9hJykgLyAnLy9jJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCcvL2MnKSkKKyAgICAgICAgcHAgPSBQKCcvL2EnKSAvICcvYycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnL2MnKSkKKworCitjbGFzcyBQdXJlV2luZG93c1BhdGhUZXN0KF9CYXNlUHVyZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5QdXJlV2luZG93c1BhdGgKKworICAgIGVxdWl2YWxlbmNlcyA9IF9CYXNlUHVyZVBhdGhUZXN0LmVxdWl2YWxlbmNlcy5jb3B5KCkKKyAgICBlcXVpdmFsZW5jZXMudXBkYXRlKHsKKyAgICAgICAgJ2M6YSc6IFsgKCdjOicsICdhJyksICgnYzonLCAnYS8nKSwgKCcvJywgJ2M6JywgJ2EnKSBdLAorICAgICAgICAnYzovYSc6IFsKKyAgICAgICAgICAgICgnYzovJywgJ2EnKSwgKCdjOicsICcvJywgJ2EnKSwgKCdjOicsICcvYScpLAorICAgICAgICAgICAgKCcveicsICdjOi8nLCAnYScpLCAoJy8veC95JywgJ2M6LycsICdhJyksCisgICAgICAgICAgICBdLAorICAgICAgICAnLy9hL2IvJzogWyAoJy8vYS9iJywpIF0sCisgICAgICAgICcvL2EvYi9jJzogWworICAgICAgICAgICAgKCcvL2EvYicsICdjJyksICgnLy9hL2IvJywgJ2MnKSwKKyAgICAgICAgICAgIF0sCisgICAgfSkKKworICAgIGRlZiB0ZXN0X3N0cihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdhL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnYVxcYlxcYycpCisgICAgICAgIHAgPSBzZWxmLmNscygnYzovYS9iL2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgJ2M6XFxhXFxiXFxjJykKKyAgICAgICAgcCA9IHNlbGYuY2xzKCcvL2EvYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnXFxcXGFcXGJcXCcpCisgICAgICAgIHAgPSBzZWxmLmNscygnLy9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnXFxcXGFcXGJcXGMnKQorICAgICAgICBwID0gc2VsZi5jbHMoJy8vYS9iL2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCAnXFxcXGFcXGJcXGNcXGQnKQorCisgICAgZGVmIHRlc3Rfc3RyX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ2M6JykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdjOmEnKQorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ2M6YVxcYi50eHQnKQorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ2M6XFwnKQorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ2M6XFxhJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdjOlxcYVxcYi50eHQnKQorICAgICAgICBzZWxmLl9jaGVja19zdHJfc3ViY2xhc3MoJ1xcXFxzb21lXFxzaGFyZScpCisgICAgICAgIHNlbGYuX2NoZWNrX3N0cl9zdWJjbGFzcygnXFxcXHNvbWVcXHNoYXJlXFxhJykKKyAgICAgICAgc2VsZi5fY2hlY2tfc3RyX3N1YmNsYXNzKCdcXFxcc29tZVxcc2hhcmVcXGFcXGIudHh0JykKKworICAgIGRlZiB0ZXN0X2VxKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLCBQKCdjOmEvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2M6JywgJ2EnLCAnYicpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKFAoJ2M6YS9iJyksIFAoJ2Q6YS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnYzphL2InKSwgUCgnYzovYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoUCgnL2EvYicpLCBQKCdjOi9hL2InKSkKKyAgICAgICAgIyBDYXNlLWluc2Vuc2l0aXZpdHkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdhL0InKSwgUCgnQS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnQzphL0InKSwgUCgnYzpBL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL1NvbWUvU0hBUkUvYS9CJyksIFAoJy8vc29tRS9zaGFyZS9BL2InKSkKKworICAgIGRlZiB0ZXN0X2FzX3VyaShzZWxmKToKKyAgICAgICAgZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0IHF1b3RlX2Zyb21fYnl0ZXMKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBQKCcvYS9iJykuYXNfdXJpKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIFAoJ2M6YS9iJykuYXNfdXJpKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IuYycpLmFzX3VyaSgpLCAnZmlsZTovLy9jOi9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJSNjJykuYXNfdXJpKCksICdmaWxlOi8vL2M6L2EvYiUyNSUyM2MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYlx4ZTknKS5hc191cmkoKSwgJ2ZpbGU6Ly8vYzovYS9iJUMzJUE5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL3NvbWUvc2hhcmUvJykuYXNfdXJpKCksICdmaWxlOi8vc29tZS9zaGFyZS8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vc29tZS9zaGFyZS9hL2IuYycpLmFzX3VyaSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmaWxlOi8vc29tZS9zaGFyZS9hL2IuYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9zb21lL3NoYXJlL2EvYiUjY1x4ZTknKS5hc191cmkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZTovL3NvbWUvc2hhcmUvYS9iJTI1JTIzYyVDMyVBOScpCisKKyAgICBkZWYgdGVzdF9tYXRjaF9jb21tb24oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICAjIEFic29sdXRlIHBhdHRlcm5zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9iLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9iLnB5JykubWF0Y2goJ2M6Ki5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnYzovYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnZDovYi5weScpLm1hdGNoKCdjOi8qLnB5JykpICAjIHdyb25nIGRyaXZlCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2IucHknKS5tYXRjaCgnYzoqLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzpiLnB5JykubWF0Y2goJy8qLnB5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzpiLnB5JykubWF0Y2goJ2M6LyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYi5weScpLm1hdGNoKCdjOioucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYi5weScpLm1hdGNoKCdjOi8qLnB5JykpCisgICAgICAgICMgVU5DIHBhdHRlcm5zCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCcvL3NvbWUvc2hhcmUvYS5weScpLm1hdGNoKCcvKi5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9zb21lL3NoYXJlL2EucHknKS5tYXRjaCgnLy9zb21lL3NoYXJlLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvL290aGVyL3NoYXJlL2EucHknKS5tYXRjaCgnLy9zb21lL3NoYXJlLyoucHknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvL3NvbWUvc2hhcmUvYS9iLnB5JykubWF0Y2goJy8vc29tZS9zaGFyZS8qLnB5JykpCisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdCLnB5JykubWF0Y2goJ2IuUFknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2EvQi5QeScpLm1hdGNoKCdDOi9BLyoucFknKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vU29tZS9TaGFyZS9CLlB5JykubWF0Y2goJy8vc29tRS9zaGFyRS8qLnBZJykpCisKKyAgICBkZWYgdGVzdF9vcmRlcmluZ19jb21tb24oc2VsZik6CisgICAgICAgICMgQ2FzZS1pbnNlbnNpdGl2aXR5CisgICAgICAgIGRlZiBhc3NlcnRPcmRlcmVkRXF1YWwoYSwgYik6CisgICAgICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChhLCBiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoYiwgYSkKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdjOkEvYicpCisgICAgICAgIHEgPSBQKCdDOmEvQicpCisgICAgICAgIGFzc2VydE9yZGVyZWRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPCBxKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAgPiBxKQorICAgICAgICBwID0gUCgnLy9zb21lL1NoYXJlL0EvYicpCisgICAgICAgIHEgPSBQKCcvL1NvbWUvU0hBUkUvYS9CJykKKyAgICAgICAgYXNzZXJ0T3JkZXJlZEVxdWFsKHAsIHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocCA8IHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocCA+IHEpCisKKyAgICBkZWYgdGVzdF9wYXJ0cyhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCdjOmEvYicpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ2M6JywgJ2EnLCAnYicpKQorICAgICAgICBwID0gUCgnYzovYS9iJykKKyAgICAgICAgcGFydHMgPSBwLnBhcnRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFydHMsICgnYzpcXCcsICdhJywgJ2InKSkKKyAgICAgICAgcCA9IFAoJy8vYS9iL2MvZCcpCisgICAgICAgIHBhcnRzID0gcC5wYXJ0cworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnRzLCAoJ1xcXFxhXFxiXFwnLCAnYycsICdkJykpCisKKyAgICBkZWYgdGVzdF9wYXJlbnQoc2VsZik6CisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCd6OmEvYi9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudCwgUCgnejphL2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJ3o6YScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6JykpCisgICAgICAgIHAgPSBQKCd6Oi9hL2IvYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJ3o6L2EvYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudCwgUCgnejovYScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQsIFAoJ3o6LycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LCBQKCd6Oi8nKSkKKyAgICAgICAgcCA9IFAoJy8vYS9iL2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQsIFAoJy8vYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBhcmVudC5wYXJlbnQsIFAoJy8vYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wYXJlbnQucGFyZW50LnBhcmVudCwgUCgnLy9hL2InKSkKKworICAgIGRlZiB0ZXN0X3BhcmVudHMoc2VsZik6CisgICAgICAgICMgQW5jaG9yZWQKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKCd6OmEvYi8nKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJ3o6YScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhclsxXSwgUCgnejonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBhciksIFtQKCd6OmEnKSwgUCgnejonKV0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvcik6CisgICAgICAgICAgICBwYXJbMl0KKyAgICAgICAgcCA9IFAoJ3o6L2EvYi8nKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJ3o6L2EnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJ3o6LycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGFyKSwgW1AoJ3o6L2EnKSwgUCgnejovJyldKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEluZGV4RXJyb3IpOgorICAgICAgICAgICAgcGFyWzJdCisgICAgICAgIHAgPSBQKCcvL2EvYi9jL2QnKQorICAgICAgICBwYXIgPSBwLnBhcmVudHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocGFyKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMF0sIFAoJy8vYS9iL2MnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJbMV0sIFAoJy8vYS9iJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXIpLCBbUCgnLy9hL2IvYycpLCBQKCcvL2EvYicpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIHBhclsyXQorCisgICAgZGVmIHRlc3RfZHJpdmUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5kcml2ZSwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5kcml2ZSwgJ2M6JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2IvJykuZHJpdmUsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9hL2InKS5kcml2ZSwgJ1xcXFxhXFxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5kcml2ZSwgJ1xcXFxhXFxiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi9jL2QnKS5kcml2ZSwgJ1xcXFxhXFxiJykKKworICAgIGRlZiB0ZXN0X3Jvb3Qoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6Jykucm9vdCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS5yb290LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iJykucm9vdCwgJ1xcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYi8nKS5yb290LCAnXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iL2MvZCcpLnJvb3QsICdcXCcpCisKKyAgICBkZWYgdGVzdF9hbmNob3Ioc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6JykuYW5jaG9yLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuYW5jaG9yLCAnYzonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6LycpLmFuY2hvciwgJ2M6XFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi8nKS5hbmNob3IsICdjOlxcJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCcvL2EvYicpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iLycpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vYS9iL2MvZCcpLmFuY2hvciwgJ1xcXFxhXFxiXFwnKQorCisgICAgZGVmIHRlc3RfbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5uYW1lLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLm5hbWUsICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL2InKS5uYW1lLCAnYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS5uYW1lLCAnYi5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5JykubmFtZSwgJ2IucHknKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwJykubmFtZSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAvYS9iJykubmFtZSwgJ2InKQorCisgICAgZGVmIHRlc3Rfc3VmZml4KHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iJykuc3VmZml4LCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN1ZmZpeCwgJy5weScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5Jykuc3VmZml4LCAnLnB5JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvLmhncmMnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdWZmaXgsICcucmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvLmhnLnJjJykuc3VmZml4LCAnLnJjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi50YXIuZ3onKS5zdWZmaXgsICcuZ3onKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeCwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAnKS5zdWZmaXgsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJy8vTXkucHkvU2hhcmUucGhwL2EvYicpLnN1ZmZpeCwgJycpCisKKyAgICBkZWYgdGVzdF9zdWZmaXhlcyhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYi5weScpLnN1ZmZpeGVzLCBbJy5weSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGdyYycpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZ3JjJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdWZmaXhlcywgWycucmMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hLy5oZy5yYycpLnN1ZmZpeGVzLCBbJy5yYyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnRhci5neicpLnN1ZmZpeGVzLCBbJy50YXInLCAnLmd6J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAnKS5zdWZmaXhlcywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnLy9NeS5weS9TaGFyZS5waHAvYS9iJykuc3VmZml4ZXMsIFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN1ZmZpeGVzLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi9hL1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykuc3VmZml4ZXMsIFtdKQorCisgICAgZGVmIHRlc3Rfc3RlbShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzonKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi4nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi4uJykuc3RlbSwgJy4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOi8nKS5zdGVtLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYicpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi5weScpLnN0ZW0sICdiJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvLmhncmMnKS5zdGVtLCAnLmhncmMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS8uaGcucmMnKS5zdGVtLCAnLmhnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChQKCdjOmEvYi50YXIuZ3onKS5zdGVtLCAnYi50YXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Tb21lIG5hbWUuIEVuZGluZyB3aXRoIGEgZG90LicpLnN0ZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1NvbWUgbmFtZS4gRW5kaW5nIHdpdGggYSBkb3QuJykKKworICAgIGRlZiB0ZXN0X3dpdGhfbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2InKS53aXRoX25hbWUoJ2QueG1sJyksIFAoJ2M6YS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzovYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzphL2QueG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9Eb3QgZW5kaW5nLicpLndpdGhfbmFtZSgnZC54bWwnKSwgUCgnYzovYS9kLnhtbCcpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOicpLndpdGhfbmFtZSwgJ2QueG1sJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzovJykud2l0aF9uYW1lLCAnZC54bWwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCcvL015L1NoYXJlJykud2l0aF9uYW1lLCAnZC54bWwnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfbmFtZSwgJ2Q6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX25hbWUsICdkOmUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfbmFtZSwgJ2Q6L2UnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfbmFtZSwgJy8vTXkvU2hhcmUnKQorCisgICAgZGVmIHRlc3Rfd2l0aF9zdWZmaXgoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6YS9iJykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOmEvYi5neicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFAoJ2M6L2EvYicpLndpdGhfc3VmZml4KCcuZ3onKSwgUCgnYzovYS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzphL2IucHknKS53aXRoX3N1ZmZpeCgnLmd6JyksIFAoJ2M6YS9iLmd6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoUCgnYzovYS9iLnB5Jykud2l0aF9zdWZmaXgoJy5neicpLCBQKCdjOi9hL2IuZ3onKSkKKyAgICAgICAgIyBQYXRoIGRvZXNuJ3QgaGF2ZSBhICJmaWxlbmFtZSIgY29tcG9uZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLicpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLycpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnLy9NeS9TaGFyZScpLndpdGhfc3VmZml4LCAnLmd6JykKKyAgICAgICAgIyBJbnZhbGlkIHN1ZmZpeAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnZ3onKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnLycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdcXCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdjOicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICcvLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJ1xcLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJ2M6Lmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJ2MvZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFAoJ2M6YS9iJykud2l0aF9zdWZmaXgsICdjXFxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgUCgnYzphL2InKS53aXRoX3N1ZmZpeCwgJy5jL2QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBQKCdjOmEvYicpLndpdGhfc3VmZml4LCAnLmNcXGQnKQorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfdG8oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnQzpGb28vQmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6JykpLCBQKCdGb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzonKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzpmb08nKSksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6Zm9PJyksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6Zm9PLycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6Zm9PL2JhUicpKSwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6Zm9PL2JhUicpLCBQKCkpCisgICAgICAgICMgVW5yZWxhdGVkIHBhdGhzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ2Q6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy9Gb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnQzovRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6Rm9vL0Jhci9CYXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnQzpGb28vQmF6JykpCisgICAgICAgIHAgPSBQKCdDOi9Gb28vQmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6JykpLCBQKCcvRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJ2M6JyksIFAoJy9Gb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHAucmVsYXRpdmVfdG8oUCgnYzonKSkpLCAnXFxGb29cXEJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHAucmVsYXRpdmVfdG8oJ2M6JykpLCAnXFxGb29cXEJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCdjOi8nKSksIFAoJ0Zvby9CYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOi8nKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnYzovZm9PJykpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOi9mb08nKSwgUCgnQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnYzovZm9PLycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJ2M6L2ZvTy9iYVInKSksIFAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCdjOi9mb08vYmFSJyksIFAoKSkKKyAgICAgICAgIyBVbnJlbGF0ZWQgcGF0aHMKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnQzovQmF6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6L0Zvby9CYXIvQmF6JykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJ0M6L0Zvby9CYXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnQzpGb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnZDonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnZDovJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy8nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnL0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvL0MvRm9vJykpCisgICAgICAgICMgVU5DIHBhdGhzCisgICAgICAgIHAgPSBQKCcvL1NlcnZlci9TaGFyZS9Gb28vQmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKFAoJy8vc0VydmVyL3NIYXJlJykpLCBQKCdGb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90bygnLy9zRXJ2ZXIvc0hhcmUnKSwgUCgnRm9vL0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy8vc0VydmVyL3NIYXJlLycpLCBQKCdGb28vQmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZWxhdGl2ZV90byhQKCcvL3NFcnZlci9zSGFyZS9Gb28nKSksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy8vc0VydmVyL3NIYXJlL0ZvbycpLCBQKCdCYXInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnJlbGF0aXZlX3RvKCcvL3NFcnZlci9zSGFyZS9Gb28vJyksIFAoJ0JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oUCgnLy9zRXJ2ZXIvc0hhcmUvRm9vL0JhcicpKSwgUCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmVsYXRpdmVfdG8oJy8vc0VydmVyL3NIYXJlL0Zvby9CYXInKSwgUCgpKQorICAgICAgICAjIFVucmVsYXRlZCBwYXRocworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCcvU2VydmVyL1NoYXJlL0ZvbycpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLnJlbGF0aXZlX3RvLCBQKCdjOi9TZXJ2ZXIvU2hhcmUvRm9vJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAucmVsYXRpdmVfdG8sIFAoJy8vei9TaGFyZS9Gb28nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZWxhdGl2ZV90bywgUCgnLy9TZXJ2ZXIvei9Gb28nKSkKKworICAgIGRlZiB0ZXN0X2lzX2Fic29sdXRlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgIyBVbmRlciBOVCwgb25seSBwYXRocyB3aXRoIGJvdGggYSBkcml2ZSBhbmQgYSByb290IGFyZSBhYnNvbHV0ZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJy9hJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQKCcvYS9iLycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzonKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAoJ2M6YScpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUCgnYzphL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6LycpLmlzX2Fic29sdXRlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShQKCdjOi9hJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJ2M6L2EvYi8nKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICAjIFVOQyBwYXRocyBhcmUgYWJzb2x1dGUgYnkgZGVmaW5pdGlvbgorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hL2InKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hL2IvJykuaXNfYWJzb2x1dGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAoJy8vYS9iL2MnKS5pc19hYnNvbHV0ZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoUCgnLy9hL2IvYy9kJykuaXNfYWJzb2x1dGUoKSkKKworICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnQzovYS9iJykKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCd4L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdDOi9hL2IveC95JykpCisgICAgICAgIHBwID0gcC5qb2lucGF0aCgnL3gveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ0M6L3gveScpKQorICAgICAgICAjIEpvaW5pbmcgd2l0aCBhIGRpZmZlcmVudCBkcml2ZSA9PiB0aGUgZmlyc3QgcGF0aCBpcyBpZ25vcmVkLCBldmVuCisgICAgICAgICMgaWYgdGhlIHNlY29uZCBwYXRoIGlzIHJlbGF0aXZlLgorICAgICAgICBwcCA9IHAuam9pbnBhdGgoJ0Q6eC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnRDp4L3knKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdEOi94L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdEOi94L3knKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCcvL2hvc3Qvc2hhcmUveC95JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcCwgUCgnLy9ob3N0L3NoYXJlL3gveScpKQorICAgICAgICAjIEpvaW5pbmcgd2l0aCB0aGUgc2FtZSBkcml2ZSA9PiB0aGUgZmlyc3QgcGF0aCBpcyBhcHBlbmRlZCB0byBpZgorICAgICAgICAjIHRoZSBzZWNvbmQgcGF0aCBpcyByZWxhdGl2ZS4KKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjOngveScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHAsIFAoJ0M6L2EvYi94L3knKSkKKyAgICAgICAgcHAgPSBwLmpvaW5wYXRoKCdjOi94L3knKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLCBQKCdDOi94L3knKSkKKworICAgIGRlZiB0ZXN0X2RpdihzZWxmKToKKyAgICAgICAgIyBCYXNpY2FsbHkgdGhlIHNhbWUgYXMgam9pbnBhdGgoKQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoJ0M6L2EvYicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICd4L3knLCBQKCdDOi9hL2IveC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICd4JyAvICd5JywgUCgnQzovYS9iL3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnL3gveScsIFAoJ0M6L3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnL3gnIC8gJ3knLCBQKCdDOi94L3knKSkKKyAgICAgICAgIyBKb2luaW5nIHdpdGggYSBkaWZmZXJlbnQgZHJpdmUgPT4gdGhlIGZpcnN0IHBhdGggaXMgaWdub3JlZCwgZXZlbgorICAgICAgICAjIGlmIHRoZSBzZWNvbmQgcGF0aCBpcyByZWxhdGl2ZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ0Q6eC95JywgUCgnRDp4L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ0Q6JyAvICd4L3knLCBQKCdEOngveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnRDoveC95JywgUCgnRDoveC95JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdEOicgLyAnL3gveScsIFAoJ0Q6L3gveScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAgLyAnLy9ob3N0L3NoYXJlL3gveScsIFAoJy8vaG9zdC9zaGFyZS94L3knKSkKKyAgICAgICAgIyBKb2luaW5nIHdpdGggdGhlIHNhbWUgZHJpdmUgPT4gdGhlIGZpcnN0IHBhdGggaXMgYXBwZW5kZWQgdG8gaWYKKyAgICAgICAgIyB0aGUgc2Vjb25kIHBhdGggaXMgcmVsYXRpdmUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCAvICdjOngveScsIFAoJ0M6L2EvYi94L3knKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwIC8gJ2M6L3gveScsIFAoJ0M6L3gveScpKQorCisgICAgZGVmIHRlc3RfaXNfcmVzZXJ2ZWQoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcnKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCBQKCcvJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgUCgnL2Zvby9iYXInKS5pc19yZXNlcnZlZCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIFAoJ2NvbicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoVHJ1ZSwgUCgnTlVMJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdOVUwudHh0JykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdjb20xJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdjb205LmJhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJ2Jhci5jb205JykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdscHQxJykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBQKCdscHQ5LmJhcicpLmlzX3Jlc2VydmVkKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJ2Jhci5scHQ5JykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgIyBPbmx5IHRoZSBsYXN0IGNvbXBvbmVudCBtYXR0ZXJzCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJ2M6L05VTC9jb24vYmF6JykuaXNfcmVzZXJ2ZWQoKSkKKyAgICAgICAgIyBVTkMgcGF0aHMgYXJlIG5ldmVyIHJlc2VydmVkCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy8vbXkvc2hhcmUvbnVsL2Nvbi9hdXgnKS5pc19yZXNlcnZlZCgpKQorCisKK2NsYXNzIFB1cmVQYXRoVGVzdChfQmFzZVB1cmVQYXRoVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGNscyA9IHBhdGhsaWIuUHVyZVBhdGgKKworICAgIGRlZiB0ZXN0X2NvbmNyZXRlX2NsYXNzKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoJ2EnKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksCisgICAgICAgICAgICBwYXRobGliLlB1cmVXaW5kb3dzUGF0aCBpZiBvcy5uYW1lID09ICdudCcgZWxzZSBwYXRobGliLlB1cmVQb3NpeFBhdGgpCisKKyAgICBkZWYgdGVzdF9kaWZmZXJlbnRfZmxhdm91cnNfdW5lcXVhbChzZWxmKToKKyAgICAgICAgcCA9IHBhdGhsaWIuUHVyZVBvc2l4UGF0aCgnYScpCisgICAgICAgIHEgPSBwYXRobGliLlB1cmVXaW5kb3dzUGF0aCgnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocCwgcSkKKworICAgIGRlZiB0ZXN0X2RpZmZlcmVudF9mbGF2b3Vyc191bm9yZGVyZWQoc2VsZik6CisgICAgICAgIHAgPSBwYXRobGliLlB1cmVQb3NpeFBhdGgoJ2EnKQorICAgICAgICBxID0gcGF0aGxpYi5QdXJlV2luZG93c1BhdGgoJ2EnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwIDwgcQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBwIDw9IHEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcCA+IHEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcCA+PSBxCisKKworIworIyBUZXN0cyBmb3IgdGhlIGNvbmNyZXRlIGNsYXNzZXMKKyMKKworIyBNYWtlIHN1cmUgYW55IHN5bWJvbGljIGxpbmtzIGluIHRoZSBiYXNlIHRlc3QgcGF0aCBhcmUgcmVzb2x2ZWQKK0JBU0UgPSBvcy5wYXRoLnJlYWxwYXRoKFRFU1RGTikKK2pvaW4gPSBsYW1iZGEgKng6IG9zLnBhdGguam9pbihCQVNFLCAqeCkKK3JlbF9qb2luID0gbGFtYmRhICp4OiBvcy5wYXRoLmpvaW4oVEVTVEZOLCAqeCkKKworZGVmIHN5bWxpbmtfc2tpcF9yZWFzb24oKToKKyAgICBpZiBub3QgcGF0aGxpYi5zdXBwb3J0c19zeW1saW5rczoKKyAgICAgICAgcmV0dXJuICJubyBzeXN0ZW0gc3VwcG9ydCBmb3Igc3ltbGlua3MiCisgICAgdHJ5OgorICAgICAgICBvcy5zeW1saW5rKF9fZmlsZV9fLCBCQVNFKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgIHJldHVybiBzdHIoZSkKKyAgICBlbHNlOgorICAgICAgICBzdXBwb3J0LnVubGluayhCQVNFKQorICAgIHJldHVybiBOb25lCisKK3N5bWxpbmtfc2tpcF9yZWFzb24gPSBzeW1saW5rX3NraXBfcmVhc29uKCkKKworb25seV9udCA9IHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lICE9ICdudCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0IHJlcXVpcmVzIGEgV2luZG93cy1jb21wYXRpYmxlIHN5c3RlbScpCitvbmx5X3Bvc2l4ID0gdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgPT0gJ250JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgcmVxdWlyZXMgYSBQT1NJWC1jb21wYXRpYmxlIHN5c3RlbScpCit3aXRoX3N5bWxpbmtzID0gdW5pdHRlc3Quc2tpcElmKHN5bWxpbmtfc2tpcF9yZWFzb24sIHN5bWxpbmtfc2tpcF9yZWFzb24pCisKKworQG9ubHlfcG9zaXgKK2NsYXNzIFBvc2l4UGF0aEFzUHVyZVRlc3QoUHVyZVBvc2l4UGF0aFRlc3QpOgorICAgIGNscyA9IHBhdGhsaWIuUG9zaXhQYXRoCisKK0Bvbmx5X250CitjbGFzcyBXaW5kb3dzUGF0aEFzUHVyZVRlc3QoUHVyZVdpbmRvd3NQYXRoVGVzdCk6CisgICAgY2xzID0gcGF0aGxpYi5XaW5kb3dzUGF0aAorCisKK2NsYXNzIF9CYXNlUGF0aFRlc3Qob2JqZWN0KToKKyAgICAiIiJUZXN0cyBmb3IgdGhlIEZTLWFjY2Vzc2luZyBmdW5jdGlvbmFsaXRpZXMgb2YgdGhlIFBhdGggY2xhc3Nlcy4iIiIKKworICAgICMgKEJBU0UpCisgICAgIyAgfAorICAgICMgIHwtLSBicm9rZW5MaW5rIC0+IG5vbi1leGlzdGluZworICAgICMgIHwtLSBkaXJBCisgICAgIyAgfCAgIGAtLSBsaW5rQyAtPiAuLi9kaXJCCisgICAgIyAgfC0tIGRpckIKKyAgICAjICB8ICAgfC0tIGZpbGVCCisgICAgIyAgfCAgIGAtLSBsaW5rRCAtPiAuLi9kaXJCCisgICAgIyAgfC0tIGRpckMKKyAgICAjICB8ICAgfC0tIGRpckQKKyAgICAjICB8ICAgfCAgIGAtLSBmaWxlRAorICAgICMgIHwgICBgLS0gZmlsZUMKKyAgICAjICB8LS0gZGlyRSAgIyBObyBwZXJtaXNzaW9ucworICAgICMgIHwtLSBmaWxlQQorICAgICMgIHwtLSBsaW5rQSAtPiBmaWxlQQorICAgICMgIGAtLSBsaW5rQiAtPiBkaXJCCisgICAgIworCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgb3MuY2htb2Qoam9pbignZGlyRScpLCAwbzc3NykKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKEJBU0UpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQorICAgICAgICBvcy5ta2RpcihCQVNFKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJBJykpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oJ2RpckInKSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyQycpKQorICAgICAgICBvcy5ta2Rpcihqb2luKCdkaXJDJywgJ2RpckQnKSkKKyAgICAgICAgb3MubWtkaXIoam9pbignZGlyRScpKQorICAgICAgICB3aXRoIG9wZW4oam9pbignZmlsZUEnKSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJ0aGlzIGlzIGZpbGUgQVxuIikKKyAgICAgICAgd2l0aCBvcGVuKGpvaW4oJ2RpckInLCAnZmlsZUInKSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJ0aGlzIGlzIGZpbGUgQlxuIikKKyAgICAgICAgd2l0aCBvcGVuKGpvaW4oJ2RpckMnLCAnZmlsZUMnKSwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiJ0aGlzIGlzIGZpbGUgQ1xuIikKKyAgICAgICAgd2l0aCBvcGVuKGpvaW4oJ2RpckMnLCAnZGlyRCcsICdmaWxlRCcpLCAnd2InKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShiInRoaXMgaXMgZmlsZSBEXG4iKQorICAgICAgICBvcy5jaG1vZChqb2luKCdkaXJFJyksIDApCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgIyBSZWxhdGl2ZSBzeW1saW5rcworICAgICAgICAgICAgb3Muc3ltbGluaygnZmlsZUEnLCBqb2luKCdsaW5rQScpKQorICAgICAgICAgICAgb3Muc3ltbGluaygnbm9uLWV4aXN0aW5nJywgam9pbignYnJva2VuTGluaycpKQorICAgICAgICAgICAgc2VsZi5kaXJsaW5rKCdkaXJCJywgam9pbignbGlua0InKSkKKyAgICAgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJy4uJywgJ2RpckInKSwgam9pbignZGlyQScsICdsaW5rQycpKQorICAgICAgICAgICAgIyBUaGlzIG9uZSBnb2VzIHVwd2FyZHMsIGNyZWF0aW5nIGEgbG9vcAorICAgICAgICAgICAgc2VsZi5kaXJsaW5rKG9zLnBhdGguam9pbignLi4nLCAnZGlyQicpLCBqb2luKCdkaXJCJywgJ2xpbmtEJykpCisKKyAgICBpZiBvcy5uYW1lID09ICdudCc6CisgICAgICAgICMgV29ya2Fyb3VuZCBmb3IgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTEzNzcyCisgICAgICAgIGRlZiBkaXJsaW5rKHNlbGYsIHNyYywgZGVzdCk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCwgdGFyZ2V0X2lzX2RpcmVjdG9yeT1UcnVlKQorICAgIGVsc2U6CisgICAgICAgIGRlZiBkaXJsaW5rKHNlbGYsIHNyYywgZGVzdCk6CisgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZGVzdCkKKworICAgIGRlZiBhc3NlcnRTYW1lKHNlbGYsIHBhdGhfYSwgcGF0aF9iKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguc2FtZWZpbGUoc3RyKHBhdGhfYSksIHN0cihwYXRoX2IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlciBhbmQgJXIgZG9uJ3QgcG9pbnQgdG8gdGhlIHNhbWUgZmlsZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGhfYSwgcGF0aF9iKSkKKworICAgIGRlZiBhc3NlcnRGaWxlTm90Rm91bmQoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhGaWxlTm90Rm91bmRFcnJvcikgYXMgY206CisgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKworICAgIGRlZiBfdGVzdF9jd2Qoc2VsZiwgcCk6CisgICAgICAgIHEgPSBzZWxmLmNscyhvcy5nZXRjd2QoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgc3RyKHEpKQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUocCksIHR5cGUocSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2Fic29sdXRlKCkpCisKKyAgICBkZWYgdGVzdF9jd2Qoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscy5jd2QoKQorICAgICAgICBzZWxmLl90ZXN0X2N3ZChwKQorCisgICAgZGVmIHRlc3RfZW1wdHlfcGF0aChzZWxmKToKKyAgICAgICAgIyBUaGUgZW1wdHkgcGF0aCBwb2ludHMgdG8gJy4nCisgICAgICAgIHAgPSBzZWxmLmNscygnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKSwgb3Muc3RhdCgnLicpKQorCisgICAgZGVmIHRlc3RfZXhpc3RzKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCBwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKFRydWUsIChwIC8gJ2RpckEnKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdmaWxlQScpLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydElzKEZhbHNlLCAocCAvICdmaWxlQScgLyAnYmFoJykuZXhpc3RzKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQScpLmV4aXN0cygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQicpLmV4aXN0cygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhUcnVlLCAocCAvICdsaW5rQicgLyAnZmlsZUInKS5leGlzdHMoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIChwIC8gJ2xpbmtBJyAvICdiYWgnKS5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhGYWxzZSwgKHAgLyAnZm9vJykuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoRmFsc2UsIFAoJy94eXp6eScpLmV4aXN0cygpKQorCisgICAgZGVmIHRlc3Rfb3Blbl9jb21tb24oc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICB3aXRoIChwIC8gJ2ZpbGVBJykub3BlbigncicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZiwgaW8uVGV4dElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksICJ0aGlzIGlzIGZpbGUgQVxuIikKKyAgICAgICAgd2l0aCAocCAvICdmaWxlQScpLm9wZW4oJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmLCBpby5CdWZmZXJlZElPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisgICAgICAgIHdpdGggKHAgLyAnZmlsZUEnKS5vcGVuKCdyYicsIGJ1ZmZlcmluZz0wKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGYsIGlvLlJhd0lPQmFzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCkuc3RyaXAoKSwgYiJ0aGlzIGlzIGZpbGUgQSIpCisKKyAgICBkZWYgdGVzdF9pdGVyZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLml0ZXJkaXIoKQorICAgICAgICBwYXRocyA9IHNldChpdCkKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ2RpckEnLCAnZGlyQicsICdkaXJDJywgJ2RpckUnLCAnZmlsZUEnXQorICAgICAgICBpZiBub3Qgc3ltbGlua19za2lwX3JlYXNvbjoKKyAgICAgICAgICAgIGV4cGVjdGVkICs9IFsnbGlua0EnLCAnbGlua0InLCAnYnJva2VuTGluayddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0aHMsIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9pdGVyZGlyX3N5bWxpbmsoc2VsZik6CisgICAgICAgICMgX19pdGVyX18gb24gYSBzeW1saW5rIHRvIGEgZGlyZWN0b3J5CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFLCAnbGlua0InKQorICAgICAgICBwYXRocyA9IHNldChwLml0ZXJkaXIoKSkKKyAgICAgICAgZXhwZWN0ZWQgPSB7IFAoQkFTRSwgJ2xpbmtCJywgcSkgZm9yIHEgaW4gWydmaWxlQicsICdsaW5rRCddIH0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXRocywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9pdGVyZGlyX25vZGlyKHNlbGYpOgorICAgICAgICAjIF9faXRlcl9fIG9uIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIGRpcmVjdG9yeQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG5leHQocC5pdGVyZGlyKCkpCisgICAgICAgICMgRU5PRU5UIG9yIEVJTlZBTCB1bmRlciBXaW5kb3dzLCBFTk9URElSIG90aGVyd2lzZQorICAgICAgICAjIChzZWUgaXNzdWUgIzEyODAyKQorICAgICAgICBzZWxmLmFzc2VydEluKGNtLmV4Y2VwdGlvbi5lcnJubywgKGVycm5vLkVOT1RESVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8uRU5PRU5ULCBlcnJuby5FSU5WQUwpKQorCisgICAgZGVmIHRlc3RfZ2xvYl9jb21tb24oc2VsZik6CisgICAgICAgIGRlZiBfY2hlY2soZ2xvYiwgZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoZ2xvYiksIHsgUChCQVNFLCBxKSBmb3IgcSBpbiBleHBlY3RlZCB9KQorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgaXQgPSBwLmdsb2IoImZpbGVBIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5JdGVyYXRvcikKKyAgICAgICAgX2NoZWNrKGl0LCBbImZpbGVBIl0pCisgICAgICAgIF9jaGVjayhwLmdsb2IoImZpbGVCIiksIFtdKQorICAgICAgICBfY2hlY2socC5nbG9iKCJkaXIqL2ZpbGUqIiksIFsiZGlyQi9maWxlQiIsICJkaXJDL2ZpbGVDIl0pCisgICAgICAgIGlmIHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqQSIpLCBbJ2RpckEnLCAnZmlsZUEnXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipBIiksIFsnZGlyQScsICdmaWxlQScsICdsaW5rQSddKQorICAgICAgICBpZiBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKkIvKiIpLCBbJ2RpckIvZmlsZUInXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLmdsb2IoIipCLyoiKSwgWydkaXJCL2ZpbGVCJywgJ2RpckIvbGlua0QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xpbmtCL2ZpbGVCJywgJ2xpbmtCL2xpbmtEJ10pCisgICAgICAgIGlmIHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBfY2hlY2socC5nbG9iKCIqL2ZpbGVCIiksIFsnZGlyQi9maWxlQiddKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX2NoZWNrKHAuZ2xvYigiKi9maWxlQiIpLCBbJ2RpckIvZmlsZUInLCAnbGlua0IvZmlsZUInXSkKKworICAgIGRlZiB0ZXN0X3JnbG9iX2NvbW1vbihzZWxmKToKKyAgICAgICAgZGVmIF9jaGVjayhnbG9iLCBleHBlY3RlZCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChnbG9iKSwgeyBQKEJBU0UsIHEpIGZvciBxIGluIGV4cGVjdGVkIH0pCisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUChCQVNFKQorICAgICAgICBpdCA9IHAucmdsb2IoImZpbGVBIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5JdGVyYXRvcikKKyAgICAgICAgX2NoZWNrKGl0LCBbImZpbGVBIl0pCisgICAgICAgIF9jaGVjayhwLnJnbG9iKCJmaWxlQiIpLCBbImRpckIvZmlsZUIiXSkKKyAgICAgICAgX2NoZWNrKHAucmdsb2IoIiovZmlsZUEiKSwgW10pCisgICAgICAgIGlmIHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBfY2hlY2socC5yZ2xvYigiKi9maWxlQiIpLCBbImRpckIvZmlsZUIiXSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIF9jaGVjayhwLnJnbG9iKCIqL2ZpbGVCIiksIFsiZGlyQi9maWxlQiIsICJkaXJCL2xpbmtEL2ZpbGVCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlua0IvZmlsZUIiLCAiZGlyQS9saW5rQy9maWxlQiJdKQorICAgICAgICBfY2hlY2socC5yZ2xvYigiZmlsZSoiKSwgWyJmaWxlQSIsICJkaXJCL2ZpbGVCIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlyQy9maWxlQyIsICJkaXJDL2RpckQvZmlsZUQiXSkKKyAgICAgICAgcCA9IFAoQkFTRSwgImRpckMiKQorICAgICAgICBfY2hlY2socC5yZ2xvYigiZmlsZSoiKSwgWyJkaXJDL2ZpbGVDIiwgImRpckMvZGlyRC9maWxlRCJdKQorICAgICAgICBfY2hlY2socC5yZ2xvYigiKi8qIiksIFsiZGlyQy9kaXJEL2ZpbGVEIl0pCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X3JnbG9iX3N5bWxpbmtfbG9vcChzZWxmKToKKyAgICAgICAgIyBEb24ndCBnZXQgZm9vbGVkIGJ5IHN5bWxpbmsgbG9vcHMgKElzc3VlICMyNjAxMikKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UpCisgICAgICAgIGdpdmVuID0gc2V0KHAucmdsb2IoJyonKSkKKyAgICAgICAgZXhwZWN0ID0geydicm9rZW5MaW5rJywKKyAgICAgICAgICAgICAgICAgICdkaXJBJywgJ2RpckEvbGlua0MnLAorICAgICAgICAgICAgICAgICAgJ2RpckInLCAnZGlyQi9maWxlQicsICdkaXJCL2xpbmtEJywKKyAgICAgICAgICAgICAgICAgICdkaXJDJywgJ2RpckMvZGlyRCcsICdkaXJDL2RpckQvZmlsZUQnLCAnZGlyQy9maWxlQycsCisgICAgICAgICAgICAgICAgICAnZGlyRScsCisgICAgICAgICAgICAgICAgICAnZmlsZUEnLAorICAgICAgICAgICAgICAgICAgJ2xpbmtBJywKKyAgICAgICAgICAgICAgICAgICdsaW5rQicsCisgICAgICAgICAgICAgICAgICB9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2l2ZW4sIHtwIC8geCBmb3IgeCBpbiBleHBlY3R9KQorCisgICAgZGVmIHRlc3RfZ2xvYl9kb3Rkb3Qoc2VsZik6CisgICAgICAgICMgIi4uIiBpcyBub3Qgc3BlY2lhbCBpbiBnbG9icworICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLiIpKSwgeyBQKEJBU0UsICIuLiIpIH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHAuZ2xvYigiZGlyQS8uLi9maWxlKiIpKSwgeyBQKEJBU0UsICJkaXJBLy4uL2ZpbGVBIikgfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCIuLi94eXp6eSIpKSwgc2V0KCkpCisKKyAgICBkZWYgX2NoZWNrX3Jlc29sdmVfcmVsYXRpdmUoc2VsZiwgcCwgZXhwZWN0ZWQpOgorICAgICAgICBxID0gcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxLCBleHBlY3RlZCkKKworICAgIGRlZiBfY2hlY2tfcmVzb2x2ZV9hYnNvbHV0ZShzZWxmLCBwLCBleHBlY3RlZCk6CisgICAgICAgIHEgPSBwLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEsIGV4cGVjdGVkKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UsICdmb28nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKKyAgICAgICAgIyBUaGVzZSBhcmUgYWxsIHJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBwKQorICAgICAgICBwID0gUChCQVNFLCAnbGlua0EnKQorICAgICAgICBzZWxmLl9jaGVja19yZXNvbHZlX3JlbGF0aXZlKHAsIFAoQkFTRSwgJ2ZpbGVBJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJBJywgJ2xpbmtDJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgIHAgPSBQKEJBU0UsICdkaXJCJywgJ2xpbmtEJywgJ2ZpbGVCJykKKyAgICAgICAgc2VsZi5fY2hlY2tfcmVzb2x2ZV9yZWxhdGl2ZShwLCBQKEJBU0UsICdkaXJCJywgJ2ZpbGVCJykpCisgICAgICAgICMgTm93IGNyZWF0ZSBhYnNvbHV0ZSBzeW1saW5rcworICAgICAgICBkID0gdGVtcGZpbGUubWtkdGVtcChzdWZmaXg9Jy1kaXJEJykKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQucm10cmVlLCBkKQorICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguam9pbihkKSwgam9pbignZGlyQScsICdsaW5rWCcpKQorICAgICAgICBvcy5zeW1saW5rKGpvaW4oJ2RpckInKSwgb3MucGF0aC5qb2luKGQsICdsaW5rWScpKQorICAgICAgICBwID0gUChCQVNFLCAnZGlyQScsICdsaW5rWCcsICdsaW5rWScsICdmaWxlQicpCisgICAgICAgIHNlbGYuX2NoZWNrX3Jlc29sdmVfYWJzb2x1dGUocCwgUChCQVNFLCAnZGlyQicsICdmaWxlQicpKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2RvdChzZWxmKToKKyAgICAgICAgIyBTZWUgaHR0cHM6Ly9iaXRidWNrZXQub3JnL3BpdHJvdS9wYXRobGliL2lzc3VlLzkvcGF0aHJlc29sdmUtZmFpbHMtb24tY29tcGxleC1zeW1saW5rcworICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5kaXJsaW5rKCcuJywgam9pbignMCcpKQorICAgICAgICBzZWxmLmRpcmxpbmsob3MucGF0aC5qb2luKCcwJywgJzAnKSwgam9pbignMScpKQorICAgICAgICBzZWxmLmRpcmxpbmsob3MucGF0aC5qb2luKCcxJywgJzEnKSwgam9pbignMicpKQorICAgICAgICBxID0gcCAvICcyJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHEucmVzb2x2ZSgpLCBwKQorCisgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIGl0ID0gcC5pdGVyZGlyKCkKKyAgICAgICAgaXQyID0gcC5pdGVyZGlyKCkKKyAgICAgICAgbmV4dChpdDIpCisgICAgICAgIHdpdGggcDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgIyBJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBwYXRoCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBuZXh0LCBpdDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHAub3BlbikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcC5yZXNvbHZlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLmFic29sdXRlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwLl9fZW50ZXJfXykKKworICAgIGRlZiB0ZXN0X2NobW9kKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkgLyAnZmlsZUEnCisgICAgICAgIG1vZGUgPSBwLnN0YXQoKS5zdF9tb2RlCisgICAgICAgICMgQ2xlYXIgd3JpdGFibGUgYml0CisgICAgICAgIG5ld19tb2RlID0gbW9kZSAmIH4wbzIyMgorICAgICAgICBwLmNobW9kKG5ld19tb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3RhdCgpLnN0X21vZGUsIG5ld19tb2RlKQorICAgICAgICAjIFNldCB3cml0YWJsZSBiaXQKKyAgICAgICAgbmV3X21vZGUgPSBtb2RlIHwgMG8yMjIKKyAgICAgICAgcC5jaG1vZChuZXdfbW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnN0YXQoKS5zdF9tb2RlLCBuZXdfbW9kZSkKKworICAgICMgWFhYIGFsc28gbmVlZCBhIHRlc3QgZm9yIGxjaG1vZAorCisgICAgZGVmIHRlc3Rfc3RhdChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5zdGF0KCksIHN0KQorICAgICAgICAjIENoYW5nZSBmaWxlIG1vZGUgYnkgZmxpcHBpbmcgd3JpdGUgYml0CisgICAgICAgIHAuY2htb2Qoc3Quc3RfbW9kZSBeIDBvMjIyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocC5jaG1vZCwgc3Quc3RfbW9kZSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwLnN0YXQoKSwgc3QpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X2xzdGF0KHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkvICdsaW5rQScKKyAgICAgICAgc3QgPSBwLnN0YXQoKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHN0LCBwLmxzdGF0KCkpCisKKyAgICBkZWYgdGVzdF9sc3RhdF9ub3N5bWxpbmsoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgc3QgPSBwLnN0YXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LCBwLmxzdGF0KCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhwd2QsICJ0aGUgcHdkIG1vZHVsZSBpcyBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCisgICAgZGVmIHRlc3Rfb3duZXIoc2VsZik6CisgICAgICAgIHAgPSBzZWxmLmNscyhCQVNFKSAvICdmaWxlQScKKyAgICAgICAgdWlkID0gcC5zdGF0KCkuc3RfdWlkCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG5hbWUgPSBwd2QuZ2V0cHd1aWQodWlkKS5wd19uYW1lCisgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoCisgICAgICAgICAgICAgICAgInVzZXIgJWQgZG9lc24ndCBoYXZlIGFuIGVudHJ5IGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UiICUgdWlkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIHAub3duZXIoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGdycCwgInRoZSBncnAgbW9kdWxlIGlzIG5lZWRlZCBmb3IgdGhpcyB0ZXN0IikKKyAgICBkZWYgdGVzdF9ncm91cChzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBnaWQgPSBwLnN0YXQoKS5zdF9naWQKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbmFtZSA9IGdycC5nZXRncmdpZChnaWQpLmdyX25hbWUKKyAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKKyAgICAgICAgICAgICAgICAiZ3JvdXAgJWQgZG9lc24ndCBoYXZlIGFuIGVudHJ5IGluIHRoZSBzeXN0ZW0gZGF0YWJhc2UiICUgZ2lkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5hbWUsIHAuZ3JvdXAoKSkKKworICAgIGRlZiB0ZXN0X3VubGluayhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2ZpbGVBJworICAgICAgICBwLnVubGluaygpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHAuc3RhdCkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC51bmxpbmspCisKKyAgICBkZWYgdGVzdF9ybWRpcihzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpIC8gJ2RpckEnCisgICAgICAgIGZvciBxIGluIHAuaXRlcmRpcigpOgorICAgICAgICAgICAgcS51bmxpbmsoKQorICAgICAgICBwLnJtZGlyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICBzZWxmLmFzc2VydEZpbGVOb3RGb3VuZChwLnVubGluaykKKworICAgIGRlZiB0ZXN0X3JlbmFtZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ2ZpbGVBJworICAgICAgICBzaXplID0gcC5zdGF0KCkuc3Rfc2l6ZQorICAgICAgICAjIFJlbmFtaW5nIHRvIGFub3RoZXIgcGF0aAorICAgICAgICBxID0gUCAvICdkaXJBJyAvICdmaWxlQUEnCisgICAgICAgIHAucmVuYW1lKHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5zdGF0KCkuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICAjIFJlbmFtaW5nIHRvIGEgc3RyIG9mIGEgcmVsYXRpdmUgcGF0aAorICAgICAgICByID0gcmVsX2pvaW4oJ2ZpbGVBQUEnKQorICAgICAgICBxLnJlbmFtZShyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocikuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocS5zdGF0KQorCisgICAgZGVmIHRlc3RfcmVwbGFjZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ2ZpbGVBJworICAgICAgICBzaXplID0gcC5zdGF0KCkuc3Rfc2l6ZQorICAgICAgICAjIFJlcGxhY2luZyBhIG5vbi1leGlzdGluZyBwYXRoCisgICAgICAgIHEgPSBQIC8gJ2RpckEnIC8gJ2ZpbGVBQScKKyAgICAgICAgcC5yZXBsYWNlKHEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocS5zdGF0KCkuc3Rfc2l6ZSwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGaWxlTm90Rm91bmQocC5zdGF0KQorICAgICAgICAjIFJlcGxhY2luZyBhbm90aGVyIChleGlzdGluZykgcGF0aAorICAgICAgICByID0gcmVsX2pvaW4oJ2RpckInLCAnZmlsZUInKQorICAgICAgICBxLnJlcGxhY2UocikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHIpLnN0X3NpemUsIHNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RmlsZU5vdEZvdW5kKHEuc3RhdCkKKworICAgIGRlZiB0ZXN0X3RvdWNoX2NvbW1vbihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHAgPSBQIC8gJ25ld2ZpbGVBJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuZXhpc3RzKCkpCisgICAgICAgIHAudG91Y2goKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc3QgPSBwLnN0YXQoKQorICAgICAgICBvbGRfbXRpbWUgPSBzdC5zdF9tdGltZQorICAgICAgICBvbGRfbXRpbWVfbnMgPSBzdC5zdF9tdGltZV9ucworICAgICAgICAjIFJld2luZCB0aGUgbXRpbWUgc3VmZmljaWVudGx5IGZhciBpbiB0aGUgcGFzdCB0byB3b3JrIGFyb3VuZAorICAgICAgICAjIGZpbGVzeXN0ZW0tc3BlY2lmaWMgdGltZXN0YW1wIGdyYW51bGFyaXR5LgorICAgICAgICBvcy51dGltZShzdHIocCksIChvbGRfbXRpbWUgLSAxMCwgb2xkX210aW1lIC0gMTApKQorICAgICAgICAjIFRoZSBmaWxlIG10aW1lIHNob3VsZCBiZSByZWZyZXNoZWQgYnkgY2FsbGluZyB0b3VjaCgpIGFnYWluCisgICAgICAgIHAudG91Y2goKQorICAgICAgICBzdCA9IHAuc3RhdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0LnN0X210aW1lX25zLCBvbGRfbXRpbWVfbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHN0LnN0X210aW1lLCBvbGRfbXRpbWUpCisgICAgICAgICMgTm93IHdpdGggZXhpc3Rfb2s9RmFsc2UKKyAgICAgICAgcCA9IFAgLyAnbmV3ZmlsZUInCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgcC50b3VjaChtb2RlPTBvNzAwLCBleGlzdF9vaz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHAudG91Y2gsIGV4aXN0X29rPUZhbHNlKQorCisgICAgZGVmIHRlc3RfdG91Y2hfbm9jaGFuZ2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBwID0gUCAvICdmaWxlQScKKyAgICAgICAgcC50b3VjaCgpCisgICAgICAgIHdpdGggcC5vcGVuKCdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLnN0cmlwKCksIGIidGhpcyBpcyBmaWxlIEEiKQorCisgICAgZGVmIHRlc3RfbWtkaXIoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBwID0gUCAvICduZXdkaXJBJworICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHAuZXhpc3RzKCkpCisgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5leGlzdHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuaXNfZGlyKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICBwLm1rZGlyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVFWElTVCkKKworICAgIGRlZiB0ZXN0X21rZGlyX3BhcmVudHMoc2VsZik6CisgICAgICAgICMgQ3JlYXRpbmcgYSBjaGFpbiBvZiBkaXJlY3RvcmllcworICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ25ld2RpckInLCAnbmV3ZGlyQycpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocC5leGlzdHMoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHAubWtkaXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQorICAgICAgICBwLm1rZGlyKHBhcmVudHM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZXhpc3RzKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmlzX2RpcigpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgcC5ta2RpcihwYXJlbnRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FRVhJU1QpCisgICAgICAgICMgdGVzdCBgbW9kZWAgYXJnCisgICAgICAgIG1vZGUgPSBzdGF0LlNfSU1PREUocC5zdGF0KCkuc3RfbW9kZSkgIyBkZWZhdWx0IG1vZGUKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UsICduZXdkaXJEJywgJ25ld2RpckUnKQorICAgICAgICBwLm1rZGlyKDBvNTU1LCBwYXJlbnRzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmV4aXN0cygpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocC5pc19kaXIoKSkKKyAgICAgICAgaWYgb3MubmFtZSAhPSAnbnQnOgorICAgICAgICAgICAgIyB0aGUgZGlyZWN0b3J5J3MgcGVybWlzc2lvbnMgZm9sbG93IHRoZSBtb2RlIGFyZ3VtZW50CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShwLnN0YXQoKS5zdF9tb2RlKSwgMG83NTU1ICYgbW9kZSkKKyAgICAgICAgIyB0aGUgcGFyZW50J3MgcGVybWlzc2lvbnMgZm9sbG93IHRoZSBkZWZhdWx0IHByb2Nlc3Mgc2V0dGluZ3MKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUocC5wYXJlbnQuc3RhdCgpLnN0X21vZGUpLCBtb2RlKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9zeW1saW5rX3RvKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgdGFyZ2V0ID0gUCAvICdmaWxlQScKKyAgICAgICAgIyBTeW1saW5raW5nIGEgcGF0aCB0YXJnZXQKKyAgICAgICAgbGluayA9IFAgLyAnZGlyQScgLyAnbGlua0FBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmsuc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGxpbmsubHN0YXQoKSwgdGFyZ2V0LnN0YXQoKSkKKyAgICAgICAgIyBTeW1saW5raW5nIGEgc3RyIHRhcmdldAorICAgICAgICBsaW5rID0gUCAvICdkaXJBJyAvICdsaW5rQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8oc3RyKHRhcmdldCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxpbmsuaXNfZGlyKCkpCisgICAgICAgICMgU3ltbGlua2luZyB0byBhIGRpcmVjdG9yeQorICAgICAgICB0YXJnZXQgPSBQIC8gJ2RpckInCisgICAgICAgIGxpbmsgPSBQIC8gJ2RpckEnIC8gJ2xpbmtBQUFBJworICAgICAgICBsaW5rLnN5bWxpbmtfdG8odGFyZ2V0LCB0YXJnZXRfaXNfZGlyZWN0b3J5PVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluay5zdGF0KCksIHRhcmdldC5zdGF0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobGluay5sc3RhdCgpLCB0YXJnZXQuc3RhdCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGluay5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxpc3QobGluay5pdGVyZGlyKCkpKQorCisgICAgZGVmIHRlc3RfaXNfZGlyKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2RpckEnKS5pc19kaXIoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2RpcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2RpcigpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJyAvICdiYWgnKS5pc19kaXIoKSkKKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2xpbmtBJykuaXNfZGlyKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0InKS5pc19kaXIoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAvICdicm9rZW5MaW5rJykuaXNfZGlyKCkpCisKKyAgICBkZWYgdGVzdF9pc19maWxlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2ZpbGVBJykuaXNfZmlsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2RpckEnKS5pc19maWxlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfZmlsZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJyAvICdiYWgnKS5pc19maWxlKCkpCisgICAgICAgIGlmIG5vdCBzeW1saW5rX3NraXBfcmVhc29uOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKChQIC8gJ2xpbmtBJykuaXNfZmlsZSgpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdsaW5rQicpLmlzX2ZpbGUoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAvICdicm9rZW5MaW5rJykuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfaXNfc3ltbGluayhzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19zeW1saW5rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19zeW1saW5rKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnIC8gJ2JhaCcpLmlzX3N5bWxpbmsoKSkKKyAgICAgICAgaWYgbm90IHN5bWxpbmtfc2tpcF9yZWFzb246CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0EnKS5pc19zeW1saW5rKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAgLyAnbGlua0InKS5pc19zeW1saW5rKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoKFAvICdicm9rZW5MaW5rJykuaXNfc3ltbGluaygpKQorCisgICAgZGVmIHRlc3RfaXNfZmlmb19mYWxzZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnKS5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2ZpZm8oKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdub24tZXhpc3RpbmcnKS5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZmlsZUEnIC8gJ2JhaCcpLmlzX2ZpZm8oKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJta2ZpZm8iKSwgIm9zLm1rZmlmbygpIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF9pc19maWZvX3RydWUoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFLCAnbXlmaWZvJykKKyAgICAgICAgb3MubWtmaWZvKHN0cihQKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfZmlmbygpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWxlKCkpCisKKyAgICBkZWYgdGVzdF9pc19zb2NrZXRfZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX3NvY2tldCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJyAvICdiYWgnKS5pc19zb2NrZXQoKSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQUZfVU5JWCIpLCAiVW5peCBzb2NrZXRzIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF9pc19zb2NrZXRfdHJ1ZShzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UsICdteXNvY2snKQorICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfVU5JWCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc29jay5jbG9zZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc29jay5iaW5kKHN0cihQKSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIGlmICJBRl9VTklYIHBhdGggdG9vIGxvbmciIGluIHN0cihlKToKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW5ub3QgYmluZCBVbml4IHNvY2tldDogIiArIHN0cihlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfc29ja2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWZvKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoUC5pc19maWxlKCkpCisKKyAgICBkZWYgdGVzdF9pc19ibG9ja19kZXZpY2VfZmFsc2Uoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscyhCQVNFKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJykuaXNfYmxvY2tfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ25vbi1leGlzdGluZycpLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKChQIC8gJ2ZpbGVBJyAvICdiYWgnKS5pc19ibG9ja19kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX2ZhbHNlKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnZGlyQScpLmlzX2NoYXJfZGV2aWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoKFAgLyAnbm9uLWV4aXN0aW5nJykuaXNfY2hhcl9kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgoUCAvICdmaWxlQScgLyAnYmFoJykuaXNfY2hhcl9kZXZpY2UoKSkKKworICAgIGRlZiB0ZXN0X2lzX2NoYXJfZGV2aWNlX3RydWUoc2VsZik6CisgICAgICAgICMgVW5kZXIgVW5peCwgL2Rldi9udWxsIHNob3VsZCBnZW5lcmFsbHkgYmUgYSBjaGFyIGRldmljZQorICAgICAgICBQID0gc2VsZi5jbHMoJy9kZXYvbnVsbCcpCisgICAgICAgIGlmIG5vdCBQLmV4aXN0cygpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiL2Rldi9udWxsIHJlcXVpcmVkIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKFAuaXNfY2hhcl9kZXZpY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShQLmlzX2Jsb2NrX2RldmljZSgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKFAuaXNfZmlsZSgpKQorCisgICAgZGVmIHRlc3RfcGlja2xpbmdfY29tbW9uKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSwgJ2ZpbGVBJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBkdW1wZWQgPSBwaWNrbGUuZHVtcHMocCwgcHJvdG8pCisgICAgICAgICAgICBwcCA9IHBpY2tsZS5sb2FkcyhkdW1wZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwLnN0YXQoKSwgcC5zdGF0KCkpCisKKyAgICBkZWYgdGVzdF9wYXJ0c19pbnRlcm5pbmcoc2VsZik6CisgICAgICAgIFAgPSBzZWxmLmNscworICAgICAgICBwID0gUCgnL3Vzci9iaW4vZm9vJykKKyAgICAgICAgcSA9IFAoJy91c3IvbG9jYWwvYmluJykKKyAgICAgICAgIyAndXNyJworICAgICAgICBzZWxmLmFzc2VydElzKHAucGFydHNbMV0sIHEucGFydHNbMV0pCisgICAgICAgICMgJ2JpbicKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwLnBhcnRzWzJdLCBxLnBhcnRzWzNdKQorCisgICAgZGVmIF9jaGVja19jb21wbGV4X3N5bWxpbmtzKHNlbGYsIGxpbmswX3RhcmdldCk6CisgICAgICAgICMgVGVzdCBzb2x2aW5nIGEgbm9uLWxvb3BpbmcgY2hhaW4gb2Ygc3ltbGlua3MgKGlzc3VlICMxOTg4NykKKyAgICAgICAgUCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJ2xpbmswJywgJ2xpbmswJyksIGpvaW4oJ2xpbmsxJykpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJ2xpbmsxJywgJ2xpbmsxJyksIGpvaW4oJ2xpbmsyJykpCisgICAgICAgIHNlbGYuZGlybGluayhvcy5wYXRoLmpvaW4oJ2xpbmsyJywgJ2xpbmsyJyksIGpvaW4oJ2xpbmszJykpCisgICAgICAgIHNlbGYuZGlybGluayhsaW5rMF90YXJnZXQsIGpvaW4oJ2xpbmswJykpCisKKyAgICAgICAgIyBSZXNvbHZlIGFic29sdXRlIHBhdGhzCisgICAgICAgIHAgPSAoUCAvICdsaW5rMCcpLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICBwID0gKFAgLyAnbGluazEnKS5yZXNvbHZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKyAgICAgICAgcCA9IChQIC8gJ2xpbmsyJykucmVzb2x2ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisgICAgICAgIHAgPSAoUCAvICdsaW5rMycpLnJlc29sdmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorCisgICAgICAgICMgUmVzb2x2ZSByZWxhdGl2ZSBwYXRocworICAgICAgICBvbGRfcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLmNoZGlyKEJBU0UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscygnbGluazAnKS5yZXNvbHZlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICAgICAgcCA9IHNlbGYuY2xzKCdsaW5rMScpLnJlc29sdmUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLCBQKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocCksIEJBU0UpCisgICAgICAgICAgICBwID0gc2VsZi5jbHMoJ2xpbmsyJykucmVzb2x2ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAsIFApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihwKSwgQkFTRSkKKyAgICAgICAgICAgIHAgPSBzZWxmLmNscygnbGluazMnKS5yZXNvbHZlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocCwgUCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHApLCBCQVNFKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X2NvbXBsZXhfc3ltbGlua3NfYWJzb2x1dGUoc2VsZik6CisgICAgICAgIHNlbGYuX2NoZWNrX2NvbXBsZXhfc3ltbGlua3MoQkFTRSkKKworICAgIEB3aXRoX3N5bWxpbmtzCisgICAgZGVmIHRlc3RfY29tcGxleF9zeW1saW5rc19yZWxhdGl2ZShzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY29tcGxleF9zeW1saW5rcygnLicpCisKKyAgICBAd2l0aF9zeW1saW5rcworICAgIGRlZiB0ZXN0X2NvbXBsZXhfc3ltbGlua3NfcmVsYXRpdmVfZG90X2RvdChzZWxmKToKKyAgICAgICAgc2VsZi5fY2hlY2tfY29tcGxleF9zeW1saW5rcyhvcy5wYXRoLmpvaW4oJ2RpckEnLCAnLi4nKSkKKworCitjbGFzcyBQYXRoVGVzdChfQmFzZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5QYXRoCisKKyAgICBkZWYgdGVzdF9jb25jcmV0ZV9jbGFzcyhzZWxmKToKKyAgICAgICAgcCA9IHNlbGYuY2xzKCdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHApLAorICAgICAgICAgICAgcGF0aGxpYi5XaW5kb3dzUGF0aCBpZiBvcy5uYW1lID09ICdudCcgZWxzZSBwYXRobGliLlBvc2l4UGF0aCkKKworICAgIGRlZiB0ZXN0X3Vuc3VwcG9ydGVkX2ZsYXZvdXIoc2VsZik6CisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBhdGhsaWIuUG9zaXhQYXRoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcGF0aGxpYi5XaW5kb3dzUGF0aCkKKworCitAb25seV9wb3NpeAorY2xhc3MgUG9zaXhQYXRoVGVzdChfQmFzZVBhdGhUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgY2xzID0gcGF0aGxpYi5Qb3NpeFBhdGgKKworICAgIGRlZiBfY2hlY2tfc3ltbGlua19sb29wKHNlbGYsICphcmdzKToKKyAgICAgICAgcGF0aCA9IHNlbGYuY2xzKCphcmdzKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICBwcmludChwYXRoLnJlc29sdmUoKSkKKworICAgIGRlZiB0ZXN0X29wZW5fbW9kZShzZWxmKToKKyAgICAgICAgb2xkX21hc2sgPSBvcy51bWFzaygwKQorICAgICAgICBzZWxmLmFkZENsZWFudXAob3MudW1hc2ssIG9sZF9tYXNrKQorICAgICAgICBwID0gc2VsZi5jbHMoQkFTRSkKKyAgICAgICAgd2l0aCAocCAvICduZXdfZmlsZScpLm9wZW4oJ3diJyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCduZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG82NjYpCisgICAgICAgIG9zLnVtYXNrKDBvMDIyKQorICAgICAgICB3aXRoIChwIC8gJ290aGVyX25ld19maWxlJykub3Blbignd2InKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc3QgPSBvcy5zdGF0KGpvaW4oJ290aGVyX25ld19maWxlJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0LnN0X21vZGUpLCAwbzY0NCkKKworICAgIGRlZiB0ZXN0X3RvdWNoX21vZGUoc2VsZik6CisgICAgICAgIG9sZF9tYXNrID0gb3MudW1hc2soMCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnVtYXNrLCBvbGRfbWFzaykKKyAgICAgICAgcCA9IHNlbGYuY2xzKEJBU0UpCisgICAgICAgIChwIC8gJ25ld19maWxlJykudG91Y2goKQorICAgICAgICBzdCA9IG9zLnN0YXQoam9pbignbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNjY2KQorICAgICAgICBvcy51bWFzaygwbzAyMikKKyAgICAgICAgKHAgLyAnb3RoZXJfbmV3X2ZpbGUnKS50b3VjaCgpCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCdvdGhlcl9uZXdfZmlsZScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdC5zdF9tb2RlKSwgMG82NDQpCisgICAgICAgIChwIC8gJ21hc2tlZF9uZXdfZmlsZScpLnRvdWNoKG1vZGU9MG83NTApCisgICAgICAgIHN0ID0gb3Muc3RhdChqb2luKCdtYXNrZWRfbmV3X2ZpbGUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3Quc3RfbW9kZSksIDBvNzUwKQorCisgICAgQHdpdGhfc3ltbGlua3MKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2xvb3Aoc2VsZik6CisgICAgICAgICMgTG9vcCBkZXRlY3Rpb24gZm9yIGJyb2tlbiBzeW1saW5rcyB1bmRlciBQT1NJWAorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgIyBMb29wcyB3aXRoIHJlbGF0aXZlIHN5bWxpbmtzCisgICAgICAgIG9zLnN5bWxpbmsoJ2xpbmtYL2luc2lkZScsIGpvaW4oJ2xpbmtYJykpCisgICAgICAgIHNlbGYuX2NoZWNrX3N5bWxpbmtfbG9vcChCQVNFLCAnbGlua1gnKQorICAgICAgICBvcy5zeW1saW5rKCdsaW5rWScsIGpvaW4oJ2xpbmtZJykpCisgICAgICAgIHNlbGYuX2NoZWNrX3N5bWxpbmtfbG9vcChCQVNFLCAnbGlua1knKQorICAgICAgICBvcy5zeW1saW5rKCdsaW5rWi8uLi9saW5rWicsIGpvaW4oJ2xpbmtaJykpCisgICAgICAgIHNlbGYuX2NoZWNrX3N5bWxpbmtfbG9vcChCQVNFLCAnbGlua1onKQorICAgICAgICAjIExvb3BzIHdpdGggYWJzb2x1dGUgc3ltbGlua3MKKyAgICAgICAgb3Muc3ltbGluayhqb2luKCdsaW5rVS9pbnNpZGUnKSwgam9pbignbGlua1UnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rVScpCisgICAgICAgIG9zLnN5bWxpbmsoam9pbignbGlua1YnKSwgam9pbignbGlua1YnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rVicpCisgICAgICAgIG9zLnN5bWxpbmsoam9pbignbGlua1cvLi4vbGlua1cnKSwgam9pbignbGlua1cnKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc3ltbGlua19sb29wKEJBU0UsICdsaW5rVycpCisKKyAgICBkZWYgdGVzdF9nbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgZ2l2ZW4gPSBzZXQocC5nbG9iKCJGSUxFYSIpKQorICAgICAgICBleHBlY3QgPSBzZXQoKSBpZiBub3Qgc3VwcG9ydC5mc19pc19jYXNlX2luc2Vuc2l0aXZlKEJBU0UpIGVsc2UgZ2l2ZW4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnaXZlbiwgZXhwZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChwLmdsb2IoIkZJTEVhKiIpKSwgc2V0KCkpCisKKyAgICBkZWYgdGVzdF9yZ2xvYihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UsICJkaXJDIikKKyAgICAgICAgZ2l2ZW4gPSBzZXQocC5yZ2xvYigiRklMRWQiKSkKKyAgICAgICAgZXhwZWN0ID0gc2V0KCkgaWYgbm90IHN1cHBvcnQuZnNfaXNfY2FzZV9pbnNlbnNpdGl2ZShCQVNFKSBlbHNlIGdpdmVuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2l2ZW4sIGV4cGVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5yZ2xvYigiRklMRWQqIikpLCBzZXQoKSkKKworCitAb25seV9udAorY2xhc3MgV2luZG93c1BhdGhUZXN0KF9CYXNlUGF0aFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbHMgPSBwYXRobGliLldpbmRvd3NQYXRoCisKKyAgICBkZWYgdGVzdF9nbG9iKHNlbGYpOgorICAgICAgICBQID0gc2VsZi5jbHMKKyAgICAgICAgcCA9IFAoQkFTRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5nbG9iKCJGSUxFYSIpKSwgeyBQKEJBU0UsICJmaWxlQSIpIH0pCisKKyAgICBkZWYgdGVzdF9yZ2xvYihzZWxmKToKKyAgICAgICAgUCA9IHNlbGYuY2xzCisgICAgICAgIHAgPSBQKEJBU0UsICJkaXJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQocC5yZ2xvYigiRklMRWQiKSksIHsgUChCQVNFLCAiZGlyQy9kaXJEL2ZpbGVEIikgfSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZGIucHkgYi9MaWIvdGVzdC90ZXN0X3BkYi5weQppbmRleCAwMzA4NGU0Li4zNTA0NGFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BkYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BkYi5weQpAQCAtMSw5ICsxLDkgQEAKICMgQSB0ZXN0IHN1aXRlIGZvciBwZGI7IG5vdCB2ZXJ5IGNvbXByZWhlbnNpdmUgYXQgdGhlIG1vbWVudC4KIAogaW1wb3J0IGRvY3Rlc3QKLWltcG9ydCBpbXAKIGltcG9ydCBwZGIKIGltcG9ydCBzeXMKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHRleHR3cmFwCkBAIC0yMDUsNyArMjA1LDggQEAKICAgICAuLi4gICAgICdlbmFibGUgMScsCiAgICAgLi4uICAgICAnY2xlYXIgMScsCiAgICAgLi4uICAgICAnY29tbWFuZHMgMicsCi0gICAgLi4uICAgICAncHJpbnQgNDInLAorICAgIC4uLiAgICAgJ3AgIjQyIicsCisgICAgLi4uICAgICAncHJpbnQoIjQyIiwgNyo2KScsICAgICAjIElzc3VlIDE4NzY0IChub3QgYWJvdXQgYnJlYWtwb2ludHMpCiAgICAgLi4uICAgICAnZW5kJywKICAgICAuLi4gICAgICdjb250aW51ZScsICAjIHdpbGwgc3RvcCBhdCBicmVha3BvaW50IDIgKGxpbmUgNCkKICAgICAuLi4gICAgICdjbGVhcicsICAgICAjIGNsZWFyIGFsbCEKQEAgLTI1MiwxMSArMjUzLDEzIEBACiAgICAgKFBkYikgY2xlYXIgMQogICAgIERlbGV0ZWQgYnJlYWtwb2ludCAxIGF0IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfYnJlYWtwb2ludF9jb21tYW5kc1swXT46MwogICAgIChQZGIpIGNvbW1hbmRzIDIKLSAgICAoY29tKSBwcmludCA0MgorICAgIChjb20pIHAgIjQyIgorICAgIChjb20pIHByaW50KCI0MiIsIDcqNikKICAgICAoY29tKSBlbmQKICAgICAoUGRiKSBjb250aW51ZQogICAgIDEKLSAgICA0MgorICAgICc0MicKKyAgICA0MiA0MgogICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9icmVha3BvaW50X2NvbW1hbmRzWzBdPig0KXRlc3RfZnVuY3Rpb24oKQogICAgIC0+IHByaW50KDIpCiAgICAgKFBkYikgY2xlYXIKQEAgLTQ2NCw3ICs0NjcsNyBAQAogCiAKICMgTW9kdWxlIGZvciB0ZXN0aW5nIHNraXBwaW5nIG9mIG1vZHVsZSB0aGF0IG1ha2VzIGEgY2FsbGJhY2sKLW1vZCA9IGltcC5uZXdfbW9kdWxlKCdtb2R1bGVfdG9fc2tpcCcpCittb2QgPSB0eXBlcy5Nb2R1bGVUeXBlKCdtb2R1bGVfdG9fc2tpcCcpCiBleGVjKCdkZWYgZm9vX3BvbnkoY2FsbGJhY2spOiB4ID0gMTsgY2FsbGJhY2soKTsgcmV0dXJuIE5vbmUnLCBtb2QuX19kaWN0X18pCiAKIApAQCAtNTk3LDYgKzYwMCwzMTcgQEAKICAgICAoUGRiKSBjb250aW51ZQogICAgICIiIgogCitkZWYgdGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnQoKToKKyAgICAiIiJUZXN0IHRoYXQgcGRiIHN0b3BzIGFmdGVyIGEgbmV4dC91bnRpbC9yZXR1cm4gaXNzdWVkIGF0IGEgcmV0dXJuIGRlYnVnIGV2ZW50LgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uXzIoKToKKyAgICAuLi4gICAgIHggPSAxCisgICAgLi4uICAgICB4ID0gMgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uXzIoKQorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb25fMigpCisgICAgLi4uICAgICBlbmQgPSAxCisKKyAgICA+Pj4gZnJvbSBiZGIgaW1wb3J0IEJyZWFrcG9pbnQKKyAgICA+Pj4gQnJlYWtwb2ludC5uZXh0ID0gMQorICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ2JyZWFrIHRlc3RfZnVuY3Rpb25fMicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnbmV4dCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAndW50aWwnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdyZXR1cm4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3JldHVybicsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMV0+KDMpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAoUGRiKSBicmVhayB0ZXN0X2Z1bmN0aW9uXzIKKyAgICBCcmVha3BvaW50IDEgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFswXT46MQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigyKXRlc3RfZnVuY3Rpb25fMigpCisgICAgLT4geCA9IDEKKyAgICAoUGRiKSByZXR1cm4KKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzBdPigzKXRlc3RfZnVuY3Rpb25fMigpLT5Ob25lCisgICAgLT4geCA9IDIKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHVudGlsCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfbmV4dF91bnRpbF9yZXR1cm5fYXRfcmV0dXJuX2V2ZW50WzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRlc3RfZnVuY3Rpb25fMigpCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDIpdGVzdF9mdW5jdGlvbl8yKCkKKyAgICAtPiB4ID0gMQorICAgIChQZGIpIHJldHVybgorICAgIC0tUmV0dXJuLS0KKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9uZXh0X3VudGlsX3JldHVybl9hdF9yZXR1cm5fZXZlbnRbMF0+KDMpdGVzdF9mdW5jdGlvbl8yKCktPk5vbmUKKyAgICAtPiB4ID0gMgorICAgIChQZGIpIHJldHVybgorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X25leHRfdW50aWxfcmV0dXJuX2F0X3JldHVybl9ldmVudFsxXT4oNil0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBlbmQgPSAxCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yKCk6CisgICAgIiIiVGVzdGluZyBza2lwIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzIGZvciAibmV4dCIgY29tbWFuZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKyAgICAuLi4gICAgIHlpZWxkIDIKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgaXQgPSB0ZXN0X2dlbigpCisgICAgLi4uICAgICB0cnk6CisgICAgLi4uICAgICAgICAgaWYgbmV4dChpdCkgIT0gMDoKKyAgICAuLi4gICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IKKyAgICAuLi4gICAgICAgICBuZXh0KGl0KQorICAgIC4uLiAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb24gYXMgZXg6CisgICAgLi4uICAgICAgICAgaWYgZXgudmFsdWUgIT0gMToKKyAgICAuLi4gICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IKKyAgICAuLi4gICAgIHByaW50KCJmaW5pc2hlZCIpCisKKyAgICA+Pj4gd2l0aCBQZGJUZXN0SW5wdXQoWydzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBpdCA9IHRlc3RfZ2VuKCkKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHRyeToKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGlmIG5leHQoaXQpICE9IDA6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigxKXRlc3RfZ2VuKCkKKyAgICAtPiBkZWYgdGVzdF9nZW4oKToKKyAgICAoUGRiKSBuZXh0CisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzBdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB5aWVsZCAwCisgICAgKFBkYikgbmV4dAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgLS1SZXR1cm4tLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMyl0ZXN0X2dlbigpLT4xCisgICAgLT4gcmV0dXJuIDEKKyAgICAoUGRiKSBzdGVwCisgICAgU3RvcEl0ZXJhdGlvbjogMQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIGNvbnRpbnVlCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJyZXR1cm4iIGNvbW1hbmQKKworICAgID4+PiBkZWYgdGVzdF9nZW4oKToKKyAgICAuLi4gICAgIHlpZWxkIDAKKyAgICAuLi4gICAgIHJldHVybiAxCisgICAgLi4uICAgICB5aWVsZCAyCisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGl0ID0gdGVzdF9nZW4oKQorICAgIC4uLiAgICAgdHJ5OgorICAgIC4uLiAgICAgICAgIGlmIG5leHQoaXQpICE9IDA6CisgICAgLi4uICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgLi4uICAgICAgICAgbmV4dChpdCkKKyAgICAuLi4gICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uIGFzIGV4OgorICAgIC4uLiAgICAgICAgIGlmIGV4LnZhbHVlICE9IDE6CisgICAgLi4uICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yCisgICAgLi4uICAgICBwcmludCgiZmluaXNoZWQiKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAncmV0dXJuJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdzdGVwJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGl0ID0gdGVzdF9nZW4oKQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB0cnk6CisgICAgKFBkYikgc3RlcAorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9yZXR1cm5fY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGlmIG5leHQoaXQpICE9IDA6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMF0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHJldHVybgorICAgIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oNyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBuZXh0KGl0KQorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfcmV0dXJuX2NvbW1hbmRfZm9yX2dlbmVyYXRvclsxXT4oOCl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBleGNlcHQgU3RvcEl0ZXJhdGlvbiBhcyBleDoKKyAgICAoUGRiKSBzdGVwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3JldHVybl9jb21tYW5kX2Zvcl9nZW5lcmF0b3JbMV0+KDkpdGVzdF9mdW5jdGlvbigpCisgICAgLT4gaWYgZXgudmFsdWUgIT0gMToKKyAgICAoUGRiKSBjb250aW51ZQorICAgIGZpbmlzaGVkCisgICAgIiIiCisKK2RlZiB0ZXN0X3BkYl91bnRpbF9jb21tYW5kX2Zvcl9nZW5lcmF0b3IoKToKKyAgICAiIiJUZXN0aW5nIG5vIHVud2luZG5nIHN0YWNrIG9uIHlpZWxkIGZvciBnZW5lcmF0b3JzCisgICAgICAgZm9yICJ1bnRpbCIgY29tbWFuZCBpZiB0YXJnZXQgYnJlYWtwb2luZyBpcyBub3QgcmVhY2hlZAorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgeWllbGQgMQorICAgIC4uLiAgICAgeWllbGQgMgorCisgICAgPj4+IGRlZiB0ZXN0X2Z1bmN0aW9uKCk6CisgICAgLi4uICAgICBpbXBvcnQgcGRiOyBwZGIuUGRiKG5vc2lnaW50PVRydWUpLnNldF90cmFjZSgpCisgICAgLi4uICAgICBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgICAgIHByaW50KGkpCisgICAgLi4uICAgICBwcmludCgiZmluaXNoZWQiKQorCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAndW50aWwgNCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnc3RlcCcsCisgICAgLi4uICAgICAgICAgICAgICAgICAgICAnY29udGludWUnXSk6CisgICAgLi4uICAgICB0ZXN0X2Z1bmN0aW9uKCkKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgc3RlcAorICAgIC0tQ2FsbC0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oMSl0ZXN0X2dlbigpCisgICAgLT4gZGVmIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgdW50aWwgNAorICAgIDAKKyAgICAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oNCl0ZXN0X2dlbigpCisgICAgLT4geWllbGQgMgorICAgIChQZGIpIHN0ZXAKKyAgICAtLVJldHVybi0tCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX3VudGlsX2NvbW1hbmRfZm9yX2dlbmVyYXRvclswXT4oNCl0ZXN0X2dlbigpLT4yCisgICAgLT4geWllbGQgMgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfdW50aWxfY29tbWFuZF9mb3JfZ2VuZXJhdG9yWzFdPig0KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHByaW50KGkpCisgICAgKFBkYikgY29udGludWUKKyAgICAyCisgICAgZmluaXNoZWQKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3AoKToKKyAgICAiIiJUaGUgbmV4dCBjb21tYW5kIG9uIHJldHVybmluZyBmcm9tIGEgZ2VuZXJhdG9yIGNvbnRyb2xlZCBieSBhIGZvciBsb29wLgorCisgICAgPj4+IGRlZiB0ZXN0X2dlbigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKworICAgID4+PiBkZWYgdGVzdF9mdW5jdGlvbigpOgorICAgIC4uLiAgICAgaW1wb3J0IHBkYjsgcGRiLlBkYihub3NpZ2ludD1UcnVlKS5zZXRfdHJhY2UoKQorICAgIC4uLiAgICAgZm9yIGkgaW4gdGVzdF9nZW4oKToKKyAgICAuLi4gICAgICAgICBwcmludCgndmFsdWUnLCBpKQorICAgIC4uLiAgICAgeCA9IDEyMworCisgICAgPj4+IHdpdGggUGRiVGVzdElucHV0KFsnYnJlYWsgdGVzdF9nZW4nLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICduZXh0JywKKyAgICAuLi4gICAgICAgICAgICAgICAgICAgICdjb250aW51ZSddKToKKyAgICAuLi4gICAgIHRlc3RfZnVuY3Rpb24oKQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzFdPigzKXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgKFBkYikgYnJlYWsgdGVzdF9nZW4KKyAgICBCcmVha3BvaW50IDYgYXQgPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfaW5fZ2VuZXJhdG9yX2Zvcl9sb29wWzBdPjoxCisgICAgKFBkYikgY29udGludWUKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFswXT4oMil0ZXN0X2dlbigpCisgICAgLT4geWllbGQgMAorICAgIChQZGIpIG5leHQKKyAgICB2YWx1ZSAwCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9pbl9nZW5lcmF0b3JfZm9yX2xvb3BbMF0+KDMpdGVzdF9nZW4oKQorICAgIC0+IHJldHVybiAxCisgICAgKFBkYikgbmV4dAorICAgIEludGVybmFsIFN0b3BJdGVyYXRpb246IDEKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFsxXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX2luX2dlbmVyYXRvcl9mb3JfbG9vcFsxXT4oNSl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiB4ID0gMTIzCisgICAgKFBkYikgY29udGludWUKKyAgICAiIiIKKworZGVmIHRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvcigpOgorICAgICIiIlRoZSBuZXh0IGNvbW1hbmQgaW4gYSBnZW5lcmF0b3Igd2l0aCBhIHN1Yml0ZXJhdG9yLgorCisgICAgPj4+IGRlZiB0ZXN0X3N1YmdlbmVyYXRvcigpOgorICAgIC4uLiAgICAgeWllbGQgMAorICAgIC4uLiAgICAgcmV0dXJuIDEKKworICAgID4+PiBkZWYgdGVzdF9nZW4oKToKKyAgICAuLi4gICAgIHggPSB5aWVsZCBmcm9tIHRlc3Rfc3ViZ2VuZXJhdG9yKCkKKyAgICAuLi4gICAgIHJldHVybiB4CisKKyAgICA+Pj4gZGVmIHRlc3RfZnVuY3Rpb24oKToKKyAgICAuLi4gICAgIGltcG9ydCBwZGI7IHBkYi5QZGIobm9zaWdpbnQ9VHJ1ZSkuc2V0X3RyYWNlKCkKKyAgICAuLi4gICAgIGZvciBpIGluIHRlc3RfZ2VuKCk6CisgICAgLi4uICAgICAgICAgcHJpbnQoJ3ZhbHVlJywgaSkKKyAgICAuLi4gICAgIHggPSAxMjMKKworICAgID4+PiB3aXRoIFBkYlRlc3RJbnB1dChbJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ3N0ZXAnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ25leHQnLAorICAgIC4uLiAgICAgICAgICAgICAgICAgICAgJ2NvbnRpbnVlJ10pOgorICAgIC4uLiAgICAgdGVzdF9mdW5jdGlvbigpCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsyXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHN0ZXAKKyAgICAtLUNhbGwtLQorICAgID4gPGRvY3Rlc3QgdGVzdC50ZXN0X3BkYi50ZXN0X3BkYl9uZXh0X2NvbW1hbmRfc3ViaXRlcmF0b3JbMV0+KDEpdGVzdF9nZW4oKQorICAgIC0+IGRlZiB0ZXN0X2dlbigpOgorICAgIChQZGIpIHN0ZXAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzFdPigyKXRlc3RfZ2VuKCkKKyAgICAtPiB4ID0geWllbGQgZnJvbSB0ZXN0X3N1YmdlbmVyYXRvcigpCisgICAgKFBkYikgbmV4dAorICAgIHZhbHVlIDAKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzFdPigzKXRlc3RfZ2VuKCkKKyAgICAtPiByZXR1cm4geAorICAgIChQZGIpIG5leHQKKyAgICBJbnRlcm5hbCBTdG9wSXRlcmF0aW9uOiAxCisgICAgPiA8ZG9jdGVzdCB0ZXN0LnRlc3RfcGRiLnRlc3RfcGRiX25leHRfY29tbWFuZF9zdWJpdGVyYXRvclsyXT4oMyl0ZXN0X2Z1bmN0aW9uKCkKKyAgICAtPiBmb3IgaSBpbiB0ZXN0X2dlbigpOgorICAgIChQZGIpIG5leHQKKyAgICA+IDxkb2N0ZXN0IHRlc3QudGVzdF9wZGIudGVzdF9wZGJfbmV4dF9jb21tYW5kX3N1Yml0ZXJhdG9yWzJdPig1KXRlc3RfZnVuY3Rpb24oKQorICAgIC0+IHggPSAxMjMKKyAgICAoUGRiKSBjb250aW51ZQorICAgICIiIgorCiAKIGNsYXNzIFBkYlRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNjA2LDYgKzkyMCw3IEBACiAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3cnKSBhcyBmOgogICAgICAgICAgICAgZi53cml0ZSh0ZXh0d3JhcC5kZWRlbnQoc2NyaXB0KSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQucm10cmVlLCAnX19weWNhY2hlX18nKQogICAgICAgICBjbWQgPSBbc3lzLmV4ZWN1dGFibGUsICctbScsICdwZGInLCBmaWxlbmFtZV0KICAgICAgICAgc3Rkb3V0ID0gc3RkZXJyID0gTm9uZQogICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oY21kLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLApAQCAtNjE3LDYgKzkzMiwzNiBAQAogICAgICAgICBzdGRlcnIgPSBzdGRlcnIgYW5kIGJ5dGVzLmRlY29kZShzdGRlcnIpCiAgICAgICAgIHJldHVybiBzdGRvdXQsIHN0ZGVycgogCisgICAgZGVmIF9hc3NlcnRfZmluZF9mdW5jdGlvbihzZWxmLCBmaWxlX2NvbnRlbnQsIGZ1bmNfbmFtZSwgZXhwZWN0ZWQpOgorICAgICAgICBmaWxlX2NvbnRlbnQgPSB0ZXh0d3JhcC5kZWRlbnQoZmlsZV9jb250ZW50KQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgZi53cml0ZShmaWxlX2NvbnRlbnQpCisKKyAgICAgICAgZXhwZWN0ZWQgPSBOb25lIGlmIG5vdCBleHBlY3RlZCBlbHNlICgKKyAgICAgICAgICAgIGV4cGVjdGVkWzBdLCBzdXBwb3J0LlRFU1RGTiwgZXhwZWN0ZWRbMV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBleHBlY3RlZCwgcGRiLmZpbmRfZnVuY3Rpb24oZnVuY19uYW1lLCBzdXBwb3J0LlRFU1RGTikpCisKKyAgICBkZWYgdGVzdF9maW5kX2Z1bmN0aW9uX2VtcHR5X2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKCcnLCAnZm9vJywgTm9uZSkKKworICAgIGRlZiB0ZXN0X2ZpbmRfZnVuY3Rpb25fZm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuX2Fzc2VydF9maW5kX2Z1bmN0aW9uKAorICAgICAgICAgICAgIiIiXAorICAgICAgICAgICAgZGVmIGZvbygpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIGJhcigpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICAgICAgZGVmIHF1dXgoKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICAnYmFyJywKKyAgICAgICAgICAgICgnYmFyJywgNCksCisgICAgICAgICkKKwogICAgIGRlZiB0ZXN0X2lzc3VlNzk2NChzZWxmKToKICAgICAgICAgIyBvcGVuIHRoZSBmaWxlIGFzIGJpbmFyeSBzbyB3ZSBjYW4gZm9yY2UgXHJcbiBuZXdsaW5lCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3diJykgYXMgZjoKQEAgLTY5OCw2ICsxMDQzLDE4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0Vycm9yJywgc3Rkb3V0LmRlY29kZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJHb3QgYW4gZXJyb3IgcnVubmluZyB0ZXN0IHNjcmlwdCB1bmRlciBQREIiKQogCisgICAgZGVmIHRlc3RfaXNzdWUxNjE4MChzZWxmKToKKyAgICAgICAgIyBBIHN5bnRheCBlcnJvciBpbiB0aGUgZGVidWdnZWUuCisgICAgICAgIHNjcmlwdCA9ICJkZWYgZjogcGFzc1xuIgorICAgICAgICBjb21tYW5kcyA9ICcnCisgICAgICAgIGV4cGVjdGVkID0gIlN5bnRheEVycm9yOiIKKyAgICAgICAgc3Rkb3V0LCBzdGRlcnIgPSBzZWxmLnJ1bl9wZGIoc2NyaXB0LCBjb21tYW5kcykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgc3Rkb3V0LAorICAgICAgICAgICAgJ1xuXG5FeHBlY3RlZDpcbnt9XG5Hb3Q6XG57fVxuJworICAgICAgICAgICAgJ0ZhaWwgdG8gaGFuZGxlIGEgc3ludGF4IGVycm9yIGluIHRoZSBkZWJ1Z2dlZS4nCisgICAgICAgICAgICAuZm9ybWF0KGV4cGVjdGVkLCBzdGRvdXQpKQorCisKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHN1cHBvcnQudW5saW5rKHN1cHBvcnQuVEVTVEZOKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlZXBob2xlci5weSBiL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CmluZGV4IDFjYWNkZWEuLjUwMjU3OTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVlcGhvbGVyLnB5CkBAIC01LDQ0ICs1LDI4IEBACiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gbWF0aCBpbXBvcnQgY29weXNpZ24KIAotZGVmIGRpc2Fzc2VtYmxlKGZ1bmMpOgotICAgIGYgPSBTdHJpbmdJTygpCi0gICAgdG1wID0gc3lzLnN0ZG91dAotICAgIHN5cy5zdGRvdXQgPSBmCi0gICAgdHJ5OgotICAgICAgICBkaXMuZGlzKGZ1bmMpCi0gICAgZmluYWxseToKLSAgICAgICAgc3lzLnN0ZG91dCA9IHRtcAotICAgIHJlc3VsdCA9IGYuZ2V0dmFsdWUoKQotICAgIGYuY2xvc2UoKQotICAgIHJldHVybiByZXN1bHQKK2Zyb20gdGVzdC5ieXRlY29kZV9oZWxwZXIgaW1wb3J0IEJ5dGVjb2RlVGVzdENhc2UKIAotZGVmIGRpc19zaW5nbGUobGluZSk6Ci0gICAgcmV0dXJuIGRpc2Fzc2VtYmxlKGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKSkKLQotCi1jbGFzcyBUZXN0VHJhbmZvcm1zKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIFRlc3RUcmFuZm9ybXMoQnl0ZWNvZGVUZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF91bm90KHNlbGYpOgogICAgICAgICAjIFVOQVJZX05PVCBQT1BfSlVNUF9JRl9GQUxTRSAgLS0+ICBQT1BfSlVNUF9JRl9UUlVFJwogICAgICAgICBkZWYgdW5vdCh4KToKICAgICAgICAgICAgIGlmIG5vdCB4ID09IDI6CiAgICAgICAgICAgICAgICAgZGVsIHgKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUodW5vdCkKLSAgICAgICAgZm9yIGVsZW0gaW4gKCdVTkFSWV9OT1QnLCAnUE9QX0pVTVBfSUZfRkFMU0UnKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oZWxlbSwgYXNtKQotICAgICAgICBmb3IgZWxlbSBpbiAoJ1BPUF9KVU1QX0lGX1RSVUUnLCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKHVub3QsICdVTkFSWV9OT1QnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUodW5vdCwgJ1BPUF9KVU1QX0lGX0ZBTFNFJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKHVub3QsICdQT1BfSlVNUF9JRl9UUlVFJykKIAogICAgIGRlZiB0ZXN0X2VsaW1faW52ZXJzaW9uX29mX2lzX29yX2luKHNlbGYpOgotICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJ25vdCBhIGlzIGInLCAnKGlzIG5vdCknLCksCi0gICAgICAgICAgICAoJ25vdCBhIGluIGInLCAnKG5vdCBpbiknLCksCi0gICAgICAgICAgICAoJ25vdCBhIGlzIG5vdCBiJywgJyhpcyknLCksCi0gICAgICAgICAgICAoJ25vdCBhIG5vdCBpbiBiJywgJyhpbiknLCksCisgICAgICAgIGZvciBsaW5lLCBjbXBfb3AgaW4gKAorICAgICAgICAgICAgKCdub3QgYSBpcyBiJywgJ2lzIG5vdCcsKSwKKyAgICAgICAgICAgICgnbm90IGEgaW4gYicsICdub3QgaW4nLCksCisgICAgICAgICAgICAoJ25vdCBhIGlzIG5vdCBiJywgJ2lzJywpLAorICAgICAgICAgICAgKCdub3QgYSBub3QgaW4gYicsICdpbicsKSwKICAgICAgICAgICAgICk6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGxpbmUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKGVsZW0sIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnQ09NUEFSRV9PUCcsIGNtcF9vcCkKIAogICAgIGRlZiB0ZXN0X2dsb2JhbF9hc19jb25zdGFudChzZWxmKToKICAgICAgICAgIyBMT0FEX0dMT0JBTCBOb25lL1RydWUvRmFsc2UgIC0tPiAgTE9BRF9DT05TVCBOb25lL1RydWUvRmFsc2UKQEAgLTU2LDE3ICs0MCwxNCBAQAogICAgICAgICBkZWYgaCh4KToKICAgICAgICAgICAgIEZhbHNlCiAgICAgICAgICAgICByZXR1cm4geAotICAgICAgICBmb3IgZnVuYywgbmFtZSBpbiAoKGYsICdOb25lJyksIChnLCAnVHJ1ZScpLCAoaCwgJ0ZhbHNlJykpOgotICAgICAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZnVuYykKLSAgICAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9HTE9CQUwnLCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBmb3IgZWxlbSBpbiAoJ0xPQURfQ09OU1QnLCAnKCcrbmFtZSsnKScpOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQorICAgICAgICBmb3IgZnVuYywgZWxlbSBpbiAoKGYsIE5vbmUpLCAoZywgVHJ1ZSksIChoLCBGYWxzZSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGZ1bmMsICdMT0FEX0dMT0JBTCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoZnVuYywgJ0xPQURfQ09OU1QnLCBlbGVtKQogICAgICAgICBkZWYgZigpOgogICAgICAgICAgICAgJ0FkZGluZyBhIGRvY3N0cmluZyBtYWRlIHRoaXMgdGVzdCBmYWlsIGluIFB5Mi41LjAnCiAgICAgICAgICAgICByZXR1cm4gTm9uZQotICAgICAgICBzZWxmLmFzc2VydEluKCdMT0FEX0NPTlNUJywgZGlzYXNzZW1ibGUoZikpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0xPQURfR0xPQkFMJywgZGlzYXNzZW1ibGUoZikpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnTE9BRF9HTE9CQUwnKQorICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoZiwgJ0xPQURfQ09OU1QnLCBOb25lKQogCiAgICAgZGVmIHRlc3Rfd2hpbGVfb25lKHNlbGYpOgogICAgICAgICAjIFNraXAgb3ZlcjogIExPQURfQ09OU1QgdHJ1ZWNvbnN0ICBQT1BfSlVNUF9JRl9GQUxTRSB4eApAQCAtNzQsMTEgKzU1LDEwIEBACiAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJldHVybiBsaXN0Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCiAgICAgICAgIGZvciBlbGVtIGluICgnTE9BRF9DT05TVCcsICdQT1BfSlVNUF9JRl9GQUxTRScpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihlbGVtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgZWxlbSkKICAgICAgICAgZm9yIGVsZW0gaW4gKCdKVU1QX0FCU09MVVRFJywpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoZiwgZWxlbSkKIAogICAgIGRlZiB0ZXN0X3BhY2tfdW5wYWNrKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCkBAIC04NiwyOCArNjYsMzAgQEAKICAgICAgICAgICAgICgnYSwgYiA9IGEsIGInLCAnUk9UX1RXTycsKSwKICAgICAgICAgICAgICgnYSwgYiwgYyA9IGEsIGIsIGMnLCAnUk9UX1RIUkVFJywpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfVFVQTEUnLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTlBBQ0tfVFVQTEUnLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCcnLCdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsIGVsZW0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1RVUExFJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnVU5QQUNLX1RVUExFJykKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfdHVwbGVzX29mX2NvbnN0YW50cyhzZWxmKToKICAgICAgICAgZm9yIGxpbmUsIGVsZW0gaW4gKAotICAgICAgICAgICAgKCdhID0gMSwyLDMnLCAnKCgxLCAyLCAzKSknKSwKLSAgICAgICAgICAgICgnKCJhIiwiYiIsImMiKScsICIoKCdhJywgJ2InLCAnYycpKSIpLAotICAgICAgICAgICAgKCdhLGIsYyA9IDEsMiwzJywgJygoMSwgMiwgMykpJyksCi0gICAgICAgICAgICAoJyhOb25lLCAxLCBOb25lKScsICcoKE5vbmUsIDEsIE5vbmUpKScpLAotICAgICAgICAgICAgKCcoKDEsIDIpLCAzLCA0KScsICcoKCgxLCAyKSwgMywgNCkpJyksCisgICAgICAgICAgICAoJ2EgPSAxLDIsMycsICgxLCAyLCAzKSksCisgICAgICAgICAgICAoJygiYSIsImIiLCJjIiknLCAoJ2EnLCAnYicsICdjJykpLAorICAgICAgICAgICAgKCdhLGIsYyA9IDEsMiwzJywgKDEsIDIsIDMpKSwKKyAgICAgICAgICAgICgnKE5vbmUsIDEsIE5vbmUpJywgKE5vbmUsIDEsIE5vbmUpKSwKKyAgICAgICAgICAgICgnKCgxLCAyKSwgMywgNCknLCAoKDEsIDIpLCAzLCA0KSksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsJycsJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCVUlMRF9UVVBMRScpCiAKICAgICAgICAgIyBMb25nIHR1cGxlcyBzaG91bGQgYmUgZm9sZGVkIHRvby4KLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZShyZXByKHR1cGxlKHJhbmdlKDEwMDAwKSkpKQorICAgICAgICBjb2RlID0gY29tcGlsZShyZXByKHR1cGxlKHJhbmdlKDEwMDAwKSkpLCcnLCdzaW5nbGUnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JVSUxEX1RVUExFJykKICAgICAgICAgIyBPbmUgTE9BRF9DT05TVCBmb3IgdGhlIHR1cGxlLCBvbmUgZm9yIHRoZSBOb25lIHJldHVybiB2YWx1ZQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5jb3VudCgnTE9BRF9DT05TVCcpLCAyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9UVVBMRScsIGFzbSkKKyAgICAgICAgbG9hZF9jb25zdHMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ0xPQURfQ09OU1QnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsb2FkX2NvbnN0cyksIDIpCiAKICAgICAgICAgIyBCdWcgMTA1MzgxOTogIFR1cGxlIG9mIGNvbnN0YW50cyBtaXNpZGVudGlmaWVkIHdoZW4gcHJlc2VudGVkIHdpdGg6CiAgICAgICAgICMgLiAuIC4gb3Bjb2RlX3dpdGhfYXJnIDEwMCAgIHVuYXJ5X29wY29kZSAgIEJVSUxEX1RVUExFIDEgIC4gLiAuCkBAIC0xMjksMTQgKzExMSwxNCBAQAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfbGlzdHNfb2ZfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCiAgICAgICAgICAgICAjIGluL25vdCBpbiBjb25zdGFudHMgd2l0aCBCVUlMRF9MSVNUIHNob3VsZCBiZSBmb2xkZWQgdG8gYSB0dXBsZToKLSAgICAgICAgICAgICgnYSBpbiBbMSwyLDNdJywgJygxLCAyLCAzKScpLAotICAgICAgICAgICAgKCdhIG5vdCBpbiBbImEiLCJiIiwiYyJdJywgIigoJ2EnLCAnYicsICdjJykpIiksCi0gICAgICAgICAgICAoJ2EgaW4gW05vbmUsIDEsIE5vbmVdJywgJygoTm9uZSwgMSwgTm9uZSkpJyksCi0gICAgICAgICAgICAoJ2Egbm90IGluIFsoMSwgMiksIDMsIDRdJywgJygoKDEsIDIpLCAzLCA0KSknKSwKKyAgICAgICAgICAgICgnYSBpbiBbMSwyLDNdJywgKDEsIDIsIDMpKSwKKyAgICAgICAgICAgICgnYSBub3QgaW4gWyJhIiwiYiIsImMiXScsICgnYScsICdiJywgJ2MnKSksCisgICAgICAgICAgICAoJ2EgaW4gW05vbmUsIDEsIE5vbmVdJywgKE5vbmUsIDEsIE5vbmUpKSwKKyAgICAgICAgICAgICgnYSBub3QgaW4gWygxLCAyKSwgMywgNF0nLCAoKDEsIDIpLCAzLCA0KSksCiAgICAgICAgICAgICApOgotICAgICAgICAgICAgYXNtID0gZGlzX3NpbmdsZShsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbGVtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCVUlMRF9MSVNUJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfTElTVCcpCiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX3NldHNfb2ZfY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCkBAIC0xNDcsMTggKzEyOSw5IEBACiAgICAgICAgICAgICAoJ2Egbm90IGluIHsoMSwgMiksIDMsIDR9JywgZnJvemVuc2V0KHsoMSwgMiksIDMsIDR9KSksCiAgICAgICAgICAgICAoJ2EgaW4gezEsIDIsIDMsIDMsIDIsIDF9JywgZnJvemVuc2V0KHsxLCAyLCAzfSkpLAogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JVSUxEX1NFVCcsIGFzbSkKLQotICAgICAgICAgICAgIyBWZXJpZnkgdGhhdCB0aGUgZnJvemVuc2V0ICdlbGVtJyBpcyBpbiB0aGUgZGlzYXNzZW1ibHkKLSAgICAgICAgICAgICMgVGhlIG9yZGVyaW5nIG9mIHRoZSBlbGVtZW50cyBpbiByZXByKCBmcm96ZW5zZXQgKSBpc24ndAotICAgICAgICAgICAgIyBndWFyYW50ZWVkLCBzbyB3ZSBqdW1wIHRocm91Z2ggc29tZSBob29wcyB0byBlbnN1cmUgdGhhdCB3ZSBoYXZlCi0gICAgICAgICAgICAjIHRoZSBmcm96ZW5zZXQgd2UgZXhwZWN0OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZnJvemVuc2V0JywgYXNtKQotICAgICAgICAgICAgIyBFeHRyYWN0IHRoZSBmcm96ZW5zZXQgbGl0ZXJhbCBmcm9tIHRoZSBkaXNhc3NlbWJseToKLSAgICAgICAgICAgIG0gPSByZS5tYXRjaChyJy4qKGZyb3plbnNldFwoey4qfVwpKS4qJywgYXNtLCByZS5ET1RBTEwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChtLmdyb3VwKDEpKSwgZWxlbSkKKyAgICAgICAgICAgIGNvZGUgPSBjb21waWxlKGxpbmUsICcnLCAnc2luZ2xlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShjb2RlLCAnQlVJTERfU0VUJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIGVsZW0pCiAKICAgICAgICAgIyBFbnN1cmUgdGhhdCB0aGUgcmVzdWx0aW5nIGNvZGUgYWN0dWFsbHkgd29ya3M6CiAgICAgICAgIGRlZiBmKGEpOgpAQCAtMTc2LDk4ICsxNDksMTAzIEBACiAKICAgICBkZWYgdGVzdF9mb2xkaW5nX29mX2Jpbm9wc19vbl9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnYSA9IDIrMys0JywgJyg5KScpLCAgICAgICAgICAgICAgICAgICAjIGNoYWluZWQgZm9sZAotICAgICAgICAgICAgKCciQCIqNCcsICIoJ0BAQEAnKSIpLCAgICAgICAgICAgICAgICAgICMgY2hlY2sgc3RyaW5nIG9wcwotICAgICAgICAgICAgKCdhPSJhYmMiICsgImRlZiInLCAiKCdhYmNkZWYnKSIpLCAgICAgICMgY2hlY2sgc3RyaW5nIG9wcwotICAgICAgICAgICAgKCdhID0gMyoqNCcsICcoODEpJyksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHBvd2VyCi0gICAgICAgICAgICAoJ2EgPSAzKjQnLCAnKDEyKScpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgbXVsdGlwbHkKLSAgICAgICAgICAgICgnYSA9IDEzLy80JywgJygzKScpLCAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBmbG9vciBkaXZpZGUKLSAgICAgICAgICAgICgnYSA9IDE0JTQnLCAnKDIpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtb2R1bG8KLSAgICAgICAgICAgICgnYSA9IDIrMycsICcoNSknKSwgICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBhZGQKLSAgICAgICAgICAgICgnYSA9IDEzLTQnLCAnKDkpJyksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBzdWJ0cmFjdAotICAgICAgICAgICAgKCdhID0gKDEyLDEzKVsxXScsICcoMTMpJyksICAgICAgICAgICAgICMgYmluYXJ5IHN1YnNjcgotICAgICAgICAgICAgKCdhID0gMTMgPDwgMicsICcoNTIpJyksICAgICAgICAgICAgICAgICMgYmluYXJ5IGxzaGlmdAotICAgICAgICAgICAgKCdhID0gMTMgPj4gMicsICcoMyknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHJzaGlmdAotICAgICAgICAgICAgKCdhID0gMTMgJiA3JywgJyg1KScpLCAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFuZAotICAgICAgICAgICAgKCdhID0gMTMgXiA3JywgJygxMCknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IHhvcgotICAgICAgICAgICAgKCdhID0gMTMgfCA3JywgJygxNSknKSwgICAgICAgICAgICAgICAgICMgYmluYXJ5IG9yCisgICAgICAgICAgICAoJ2EgPSAyKzMrNCcsIDkpLCAgICAgICAgICAgICAgICAgICAjIGNoYWluZWQgZm9sZAorICAgICAgICAgICAgKCciQCIqNCcsICdAQEBAJyksICAgICAgICAgICAgICAgICAgIyBjaGVjayBzdHJpbmcgb3BzCisgICAgICAgICAgICAoJ2E9ImFiYyIgKyAiZGVmIicsICdhYmNkZWYnKSwgICAgICAjIGNoZWNrIHN0cmluZyBvcHMKKyAgICAgICAgICAgICgnYSA9IDMqKjQnLCA4MSksICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IHBvd2VyCisgICAgICAgICAgICAoJ2EgPSAzKjQnLCAxMiksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtdWx0aXBseQorICAgICAgICAgICAgKCdhID0gMTMvLzQnLCAzKSwgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgZmxvb3IgZGl2aWRlCisgICAgICAgICAgICAoJ2EgPSAxNCU0JywgMiksICAgICAgICAgICAgICAgICAgICAjIGJpbmFyeSBtb2R1bG8KKyAgICAgICAgICAgICgnYSA9IDIrMycsIDUpLCAgICAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFkZAorICAgICAgICAgICAgKCdhID0gMTMtNCcsIDkpLCAgICAgICAgICAgICAgICAgICAgIyBiaW5hcnkgc3VidHJhY3QKKyAgICAgICAgICAgICgnYSA9ICgxMiwxMylbMV0nLCAxMyksICAgICAgICAgICAgICMgYmluYXJ5IHN1YnNjcgorICAgICAgICAgICAgKCdhID0gMTMgPDwgMicsIDUyKSwgICAgICAgICAgICAgICAgIyBiaW5hcnkgbHNoaWZ0CisgICAgICAgICAgICAoJ2EgPSAxMyA+PiAyJywgMyksICAgICAgICAgICAgICAgICAjIGJpbmFyeSByc2hpZnQKKyAgICAgICAgICAgICgnYSA9IDEzICYgNycsIDUpLCAgICAgICAgICAgICAgICAgICMgYmluYXJ5IGFuZAorICAgICAgICAgICAgKCdhID0gMTMgXiA3JywgMTApLCAgICAgICAgICAgICAgICAgIyBiaW5hcnkgeG9yCisgICAgICAgICAgICAoJ2EgPSAxMyB8IDcnLCAxNSksICAgICAgICAgICAgICAgICAjIGJpbmFyeSBvcgogICAgICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfJywgYXNtKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUobGluZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgZWxlbSkKKyAgICAgICAgICAgIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhjb2RlKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdCSU5BUllfJykpCiAKICAgICAgICAgIyBWZXJpZnkgdGhhdCB1bmZvbGRhYmxlcyBhcmUgc2tpcHBlZAotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCdhPTIrImIiJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignKDIpJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ2InKSIsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJ2E9MisiYiInLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsICdiJykKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IGxhcmdlIHNlcXVlbmNlcyBkbyBub3QgcmVzdWx0IGZyb20gZm9sZGluZwotICAgICAgICBhc20gPSBkaXNfc2luZ2xlKCdhPSJ4IioxMDAwJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignKDEwMDApJywgYXNtKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnYT0ieCIqMTAwMCcsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgMTAwMCkKIAogICAgIGRlZiB0ZXN0X2JpbmFyeV9zdWJzY3Jfb25fdW5pY29kZShzZWxmKToKICAgICAgICAgIyB2YWxpZCBjb2RlIGdldCBvcHRpbWl6ZWQKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnImZvbyJbMF0nKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ2YnKSIsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX1NVQlNDUicsIGFzbSkKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnIlx1MDA2MVx1ZmZmZiJbMV0nKQotICAgICAgICBzZWxmLmFzc2VydEluKCIoJ1xcdWZmZmYnKSIsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX1NVQlNDUicsIGFzbSkKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnIlxVMDAwMTIzNDVhYmNkZWYiWzNdJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbigiKCdjJykiLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0JJTkFSWV9TVUJTQ1InLCBhc20pCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciZm9vIlswXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdMT0FEX0NPTlNUJywgJ2YnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwgJ0JJTkFSWV9TVUJTQ1InKQorICAgICAgICBjb2RlID0gY29tcGlsZSgnIlx1MDA2MVx1ZmZmZiJbMV0nLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsICdcdWZmZmYnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoY29kZSwnQklOQVJZX1NVQlNDUicpCisKKyAgICAgICAgIyBXaXRoIFBFUCAzOTMsIG5vbi1CTVAgY2hhciBnZXQgb3B0aW1pemVkCisgICAgICAgIGNvZGUgPSBjb21waWxlKCciXFUwMDAxMjM0NSJbMF0nLCAnJywgJ3NpbmdsZScpCisgICAgICAgIHNlbGYuYXNzZXJ0SW5CeXRlY29kZShjb2RlLCAnTE9BRF9DT05TVCcsICdcVTAwMDEyMzQ1JykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGNvZGUsICdCSU5BUllfU1VCU0NSJykKIAogICAgICAgICAjIGludmFsaWQgY29kZSBkb2Vzbid0IGdldCBvcHRpbWl6ZWQKICAgICAgICAgIyBvdXQgb2YgcmFuZ2UKLSAgICAgICAgYXNtID0gZGlzX3NpbmdsZSgnImZ1dSJbMTBdJykKLSAgICAgICAgc2VsZi5hc3NlcnRJbignQklOQVJZX1NVQlNDUicsIGFzbSkKKyAgICAgICAgY29kZSA9IGNvbXBpbGUoJyJmdXUiWzEwXScsICcnLCAnc2luZ2xlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsICdCSU5BUllfU1VCU0NSJykKIAogICAgIGRlZiB0ZXN0X2ZvbGRpbmdfb2ZfdW5hcnlvcHNfb25fY29uc3RhbnRzKHNlbGYpOgogICAgICAgICBmb3IgbGluZSwgZWxlbSBpbiAoCi0gICAgICAgICAgICAoJy0wLjUnLCAnKC0wLjUpJyksICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBuZWdhdGl2ZQotICAgICAgICAgICAgKCctMC4wJywgJygtMC4wKScpLCAgICAgICAgICAgICAgICAgICAgICMgLTAuMAotICAgICAgICAgICAgKCctKDEuMC0xLjApJywnKC0wLjApJyksICAgICAgICAgICAgICAgICMgLTAuMCBhZnRlciBmb2xkaW5nCi0gICAgICAgICAgICAoJy0wJywgJygwKScpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtMAotICAgICAgICAgICAgKCd+LTInLCAnKDEpJyksICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgaW52ZXJ0Ci0gICAgICAgICAgICAoJysxJywgJygxKScpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBwb3NpdGl2ZQorICAgICAgICAgICAgKCctMC41JywgLTAuNSksICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBuZWdhdGl2ZQorICAgICAgICAgICAgKCctMC4wJywgLTAuMCksICAgICAgICAgICAgICAgICAgICAgIyAtMC4wCisgICAgICAgICAgICAoJy0oMS4wLTEuMCknLCAtMC4wKSwgICAgICAgICAgICAgICAjIC0wLjAgYWZ0ZXIgZm9sZGluZworICAgICAgICAgICAgKCctMCcsIDApLCAgICAgICAgICAgICAgICAgICAgICAgICAgIyAtMAorICAgICAgICAgICAgKCd+LTInLCAxKSwgICAgICAgICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKKyAgICAgICAgICAgICgnKzEnLCAxKSwgICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5hcnkgcG9zaXRpdmUKICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ1VOQVJZXycpKQogCiAgICAgICAgICMgQ2hlY2sgdGhhdCAtMC4wIHdvcmtzIGFmdGVyIG1hcnNoYWxpbmcKICAgICAgICAgZGVmIG5lZ3plcm8oKToKICAgICAgICAgICAgIHJldHVybiAtKDEuMC0xLjApCiAKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignVU5BUllfJywgZGlzYXNzZW1ibGUobmVnemVybykpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjb3B5c2lnbigxLjAsIG5lZ3plcm8oKSkgPCAwKQorICAgICAgICBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoY29kZSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdVTkFSWV8nKSkKIAogICAgICAgICAjIFZlcmlmeSB0aGF0IHVuZm9sZGFibGVzIGFyZSBza2lwcGVkCi0gICAgICAgIGZvciBsaW5lLCBlbGVtIGluICgKLSAgICAgICAgICAgICgnLSJhYmMiJywgIignYWJjJykiKSwgICAgICAgICAgICAgICAgICAjIHVuYXJ5IG5lZ2F0aXZlCi0gICAgICAgICAgICAoJ34iYWJjIicsICIoJ2FiYycpIiksICAgICAgICAgICAgICAgICAgIyB1bmFyeSBpbnZlcnQKKyAgICAgICAgZm9yIGxpbmUsIGVsZW0sIG9wbmFtZSBpbiAoCisgICAgICAgICAgICAoJy0iYWJjIicsICdhYmMnLCAnVU5BUllfTkVHQVRJVkUnKSwKKyAgICAgICAgICAgICgnfiJhYmMiJywgJ2FiYycsICdVTkFSWV9JTlZFUlQnKSwKICAgICAgICAgKToKLSAgICAgICAgICAgIGFzbSA9IGRpc19zaW5nbGUobGluZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbSwgYXNtLCBhc20pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEluKCdVTkFSWV8nLCBhc20pCisgICAgICAgICAgICBjb2RlID0gY29tcGlsZShsaW5lLCAnJywgJ3NpbmdsZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluQnl0ZWNvZGUoY29kZSwgJ0xPQURfQ09OU1QnLCBlbGVtKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbkJ5dGVjb2RlKGNvZGUsIG9wbmFtZSkKIAogICAgIGRlZiB0ZXN0X2VsaW1fZXh0cmFfcmV0dXJuKHNlbGYpOgogICAgICAgICAjIFJFVFVSTiBMT0FEX0NPTlNUIE5vbmUgUkVUVVJOICAtLT4gIFJFVFVSTgogICAgICAgICBkZWYgZih4KToKICAgICAgICAgICAgIHJldHVybiB4Ci0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0xPQURfQ09OU1QnLCBhc20pCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJyhOb25lKScsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnTE9BRF9DT05TVCcsIE5vbmUpCisgICAgICAgIHJldHVybnMgPSBbaW5zdHIgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGYpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGluc3RyLm9wbmFtZSA9PSAnUkVUVVJOX1ZBTFVFJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmV0dXJucyksIDEpCiAKICAgICBkZWYgdGVzdF9lbGltX2p1bXBfdG9fcmV0dXJuKHNlbGYpOgogICAgICAgICAjIEpVTVBfRk9SV0FSRCB0byBSRVRVUk4gLS0+ICBSRVRVUk4KICAgICAgICAgZGVmIGYoY29uZCwgdHJ1ZV92YWx1ZSwgZmFsc2VfdmFsdWUpOgogICAgICAgICAgICAgcmV0dXJuIHRydWVfdmFsdWUgaWYgY29uZCBlbHNlIGZhbHNlX3ZhbHVlCi0gICAgICAgIGFzbSA9IGRpc2Fzc2VtYmxlKGYpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ0pVTVBfRk9SV0FSRCcsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9BQlNPTFVURScsIGFzbSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhc20uc3BsaXQoKS5jb3VudCgnUkVUVVJOX1ZBTFVFJyksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9GT1JXQVJEJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0FCU09MVVRFJykKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMikKIAogICAgIGRlZiB0ZXN0X2VsaW1fanVtcF9hZnRlcl9yZXR1cm4xKHNlbGYpOgogICAgICAgICAjIEVsaW1pbmF0ZSBkZWFkIGNvZGU6IGp1bXBzIGltbWVkaWF0ZWx5IGFmdGVyIHJldHVybnMgY2FuJ3QgYmUgcmVhY2hlZApAQCAtMjgwLDQ4ICsyNTgsNTMgQEAKICAgICAgICAgICAgICAgICBpZiBjb25kMTogcmV0dXJuIDQKICAgICAgICAgICAgICAgICByZXR1cm4gNQogICAgICAgICAgICAgcmV0dXJuIDYKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignSlVNUF9GT1JXQVJEJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0FCU09MVVRFJywgYXNtKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdSRVRVUk5fVkFMVUUnKSwgNikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdKVU1QX0ZPUldBUkQnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluQnl0ZWNvZGUoZiwgJ0pVTVBfQUJTT0xVVEUnKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ1JFVFVSTl9WQUxVRSddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJldHVybnMpLCA2KQogCiAgICAgZGVmIHRlc3RfZWxpbV9qdW1wX2FmdGVyX3JldHVybjIoc2VsZik6CiAgICAgICAgICMgRWxpbWluYXRlIGRlYWQgY29kZToganVtcHMgaW1tZWRpYXRlbHkgYWZ0ZXIgcmV0dXJucyBjYW4ndCBiZSByZWFjaGVkCiAgICAgICAgIGRlZiBmKGNvbmQxLCBjb25kMik6CiAgICAgICAgICAgICB3aGlsZSAxOgogICAgICAgICAgICAgICAgIGlmIGNvbmQxOiByZXR1cm4gNAotICAgICAgICBhc20gPSBkaXNhc3NlbWJsZShmKQotICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdKVU1QX0ZPUldBUkQnLCBhc20pCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW5CeXRlY29kZShmLCAnSlVNUF9GT1JXQVJEJykKICAgICAgICAgIyBUaGVyZSBzaG91bGQgYmUgb25lIGp1bXAgZm9yIHRoZSB3aGlsZSBsb29wLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzbS5zcGxpdCgpLmNvdW50KCdKVU1QX0FCU09MVVRFJyksIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNtLnNwbGl0KCkuY291bnQoJ1JFVFVSTl9WQUxVRScpLCAyKQorICAgICAgICByZXR1cm5zID0gW2luc3RyIGZvciBpbnN0ciBpbiBkaXMuZ2V0X2luc3RydWN0aW9ucyhmKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpbnN0ci5vcG5hbWUgPT0gJ0pVTVBfQUJTT0xVVEUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMSkKKyAgICAgICAgcmV0dXJucyA9IFtpbnN0ciBmb3IgaW5zdHIgaW4gZGlzLmdldF9pbnN0cnVjdGlvbnMoZikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgaW5zdHIub3BuYW1lID09ICdSRVRVUk5fVkFMVUUnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXR1cm5zKSwgMikKIAogICAgIGRlZiB0ZXN0X21ha2VfZnVuY3Rpb25fZG9lc250X2JhaWwoc2VsZik6CiAgICAgICAgIGRlZiBmKCk6CiAgICAgICAgICAgICBkZWYgZygpLT4xKzE6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgcmV0dXJuIGcKLSAgICAgICAgYXNtID0gZGlzYXNzZW1ibGUoZikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQklOQVJZX0FERCcsIGFzbSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbkJ5dGVjb2RlKGYsICdCSU5BUllfQUREJykKIAogICAgIGRlZiB0ZXN0X2NvbnN0YW50X2ZvbGRpbmcoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzExMjQ0OiBhZ2dyZXNzaXZlIGNvbnN0YW50IGZvbGRpbmcuCiAgICAgICAgIGV4cHJzID0gWwotICAgICAgICAgICAgIjMgKiAtNSIsCi0gICAgICAgICAgICAiLTMgKiA1IiwKLSAgICAgICAgICAgICIyICogKDMgKiA0KSIsCi0gICAgICAgICAgICAiKDIgKiAzKSAqIDQiLAotICAgICAgICAgICAgIigtMSwgMiwgMykiLAotICAgICAgICAgICAgIigxLCAtMiwgMykiLAotICAgICAgICAgICAgIigxLCAyLCAtMykiLAotICAgICAgICAgICAgIigxLCAyLCAtMykgKiA2IiwKLSAgICAgICAgICAgICJsYW1iZGEgeDogeCBpbiB7KDMgKiAtNSkgKyAoLTEgLSA2KSwgKDEsIC0yLCAzKSAqIDIsIE5vbmV9IiwKKyAgICAgICAgICAgICczICogLTUnLAorICAgICAgICAgICAgJy0zICogNScsCisgICAgICAgICAgICAnMiAqICgzICogNCknLAorICAgICAgICAgICAgJygyICogMykgKiA0JywKKyAgICAgICAgICAgICcoLTEsIDIsIDMpJywKKyAgICAgICAgICAgICcoMSwgLTIsIDMpJywKKyAgICAgICAgICAgICcoMSwgMiwgLTMpJywKKyAgICAgICAgICAgICcoMSwgMiwgLTMpICogNicsCisgICAgICAgICAgICAnbGFtYmRhIHg6IHggaW4geygzICogLTUpICsgKC0xIC0gNiksICgxLCAtMiwgMykgKiAyLCBOb25lfScsCiAgICAgICAgIF0KICAgICAgICAgZm9yIGUgaW4gZXhwcnM6Ci0gICAgICAgICAgICBhc20gPSBkaXNfc2luZ2xlKGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdVTkFSWV8nLCBhc20sIGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdCSU5BUllfJywgYXNtLCBlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignQlVJTERfJywgYXNtLCBlKQorICAgICAgICAgICAgY29kZSA9IGNvbXBpbGUoZSwgJycsICdzaW5nbGUnKQorICAgICAgICAgICAgZm9yIGluc3RyIGluIGRpcy5nZXRfaW5zdHJ1Y3Rpb25zKGNvZGUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ1VOQVJZXycpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5zdHIub3BuYW1lLnN0YXJ0c3dpdGgoJ0JJTkFSWV8nKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGluc3RyLm9wbmFtZS5zdGFydHN3aXRoKCdCVUlMRF8nKSkKKwogCiBjbGFzcyBUZXN0QnVnbGV0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTM0Myw3ICszMjYsNyBAQAogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KCp0ZXN0X2NsYXNzZXMpCiAKICAgICAjIHZlcmlmeSByZWZlcmVuY2UgY291bnRpbmcKLSAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgImdldHRvdGFscmVmY291bnQiKToKKyAgICBpZiB2ZXJib3NlIGFuZCBoYXNhdHRyKHN5cywgJ2dldHRvdGFscmVmY291bnQnKToKICAgICAgICAgaW1wb3J0IGdjCiAgICAgICAgIGNvdW50cyA9IFtOb25lXSAqIDUKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UobGVuKGNvdW50cykpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNDcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQppbmRleCA3ZjEwNDcyLi5iODVhMjZhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI0Ny5weQpAQCAtMTUsMTIgKzE1LDE0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtb2R1bGUuZGlnZXN0X3NpemUgaXMgTm9uZSBvciBtb2R1bGUuZGlnZXN0X3NpemUgPiAwKQogICAgICAgICBzZWxmLmNoZWNrX29iamVjdChtb2R1bGUubmV3LCBtb2R1bGUuZGlnZXN0X3NpemUsIGtleSkKIAotICAgIGRlZiBjaGVja19vYmplY3Qoc2VsZiwgY2xzLCBkaWdlc3Rfc2l6ZSwga2V5KToKKyAgICBkZWYgY2hlY2tfb2JqZWN0KHNlbGYsIGNscywgZGlnZXN0X3NpemUsIGtleSwgZGlnZXN0bW9kPU5vbmUpOgogICAgICAgICBpZiBrZXkgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBvYmoxID0gY2xzKGtleSkKLSAgICAgICAgICAgIG9iajIgPSBjbHMoa2V5LCBiJ3N0cmluZycpCi0gICAgICAgICAgICBoMSA9IGNscyhrZXksIGInc3RyaW5nJykuZGlnZXN0KCkKLSAgICAgICAgICAgIG9iajMgPSBjbHMoa2V5KQorICAgICAgICAgICAgaWYgZGlnZXN0bW9kIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgZGlnZXN0bW9kID0gbWQ1CisgICAgICAgICAgICBvYmoxID0gY2xzKGtleSwgZGlnZXN0bW9kPWRpZ2VzdG1vZCkKKyAgICAgICAgICAgIG9iajIgPSBjbHMoa2V5LCBiJ3N0cmluZycsIGRpZ2VzdG1vZD1kaWdlc3Rtb2QpCisgICAgICAgICAgICBoMSA9IGNscyhrZXksIGInc3RyaW5nJywgZGlnZXN0bW9kPWRpZ2VzdG1vZCkuZGlnZXN0KCkKKyAgICAgICAgICAgIG9iajMgPSBjbHMoa2V5LCBkaWdlc3Rtb2Q9ZGlnZXN0bW9kKQogICAgICAgICAgICAgb2JqMy51cGRhdGUoYidzdHJpbmcnKQogICAgICAgICAgICAgaDIgPSBvYmozLmRpZ2VzdCgpCiAgICAgICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjYzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjRhZTM4Ni4uMDAwMDAwMAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weQorKysgL2Rldi9udWxsCkBAIC0xLDgwICswLDAgQEAKLSMgLSotIGNvZGluZzoga29pOC1yIC0qLQotCi1pbXBvcnQgdW5pdHRlc3QKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotCi1jbGFzcyBQRVAyNjNUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiB0ZXN0X3BlcDI2MyhzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgICLwydTPziIuZW5jb2RlKCJ1dGYtOCIpLAotICAgICAgICAgICAgYidceGQwXHg5Zlx4ZDBceGI4XHhkMVx4ODJceGQwXHhiZVx4ZDBceGJkJwotICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCi0gICAgICAgICAgICAiXPAiLmVuY29kZSgidXRmLTgiKSwKLSAgICAgICAgICAgIGInXFxceGQwXHg5ZicKLSAgICAgICAgKQotCi0gICAgZGVmIHRlc3RfY29tcGlsZXN0cmluZyhzZWxmKToKLSAgICAgICAgIyBzZWUgIzE4ODIKLSAgICAgICAgYyA9IGNvbXBpbGUoYiJcbiMgY29kaW5nOiB1dGYtOFxudSA9ICdceGMzXHhiMydcbiIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWyd1J10sICdceGYzJykKLQotICAgIGRlZiB0ZXN0X2lzc3VlMjMwMShzZWxmKToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgY29tcGlsZShiIiMgY29kaW5nOiBjcDkzMlxucHJpbnQgJ1x4OTRceDRlJyIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIHY6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHYudGV4dCwgInByaW50ICdcdTVlNzQnXG4iKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCkKLQotICAgIGRlZiB0ZXN0X2lzc3VlNDYyNihzZWxmKToKLSAgICAgICAgYyA9IGNvbXBpbGUoIiMgY29kaW5nPWxhdGluLTFcblx1MDBjNiA9ICdcdTAwYzYnIiwgImR1bW15IiwgImV4ZWMiKQotICAgICAgICBkID0ge30KLSAgICAgICAgZXhlYyhjLCBkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ1x4YzYnXSwgJ1x4YzYnKQotCi0gICAgZGVmIHRlc3RfaXNzdWUzMjk3KHNlbGYpOgotICAgICAgICBjID0gY29tcGlsZSgiYSwgYiA9ICdcVTAwMDEwMTBGJywgJ1xcVTAwMDEwMTBGJyIsICJkdW1teSIsICJleGVjIikKLSAgICAgICAgZCA9IHt9Ci0gICAgICAgIGV4ZWMoYywgZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydhJ10sIGRbJ2InXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZFsnYSddKSwgbGVuKGRbJ2InXSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNjaWkoZFsnYSddKSwgYXNjaWkoZFsnYiddKSkKLQotICAgIGRlZiB0ZXN0X2lzc3VlNzgyMChzZWxmKToKLSAgICAgICAgIyBFbnN1cmUgdGhhdCBjaGVja19ib20oKSByZXN0b3JlcyBhbGwgYnl0ZXMgaW4gdGhlIHJpZ2h0IG9yZGVyIGlmCi0gICAgICAgICMgY2hlY2tfYm9tKCkgZmFpbHMgaW4gcHlkZWJ1ZyBtb2RlOiBhIGJ1ZmZlciBzdGFydHMgd2l0aCB0aGUgZmlyc3QKLSAgICAgICAgIyBieXRlIG9mIGEgdmFsaWQgQk9NLCBidXQgbmV4dCBieXRlcyBhcmUgZGlmZmVyZW50Ci0KLSAgICAgICAgIyBvbmUgYnl0ZSBpbiBjb21tb24gd2l0aCB0aGUgVVRGLTE2LUxFIEJPTQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgYidceGZmXHgyMCcpCi0KLSAgICAgICAgIyB0d28gYnl0ZXMgaW4gY29tbW9uIHdpdGggdGhlIFVURi04IEJPTQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXZhbCwgYidceGVmXHhiYlx4MjAnKQotCi0gICAgZGVmIHRlc3RfZXJyb3JfbWVzc2FnZShzZWxmKToKLSAgICAgICAgY29tcGlsZShiJyMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmZcbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogdXRmLTggLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2Zha2UnKToKLSAgICAgICAgICAgIGNvbXBpbGUoYicjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2lzby04ODU5LTE1Jyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCi0gICAgICAgICAgICAgICAgICAgICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnQk9NJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBpc28tODg1OS0xNSAtKi1cbicsCi0gICAgICAgICAgICAgICAgICAgICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnZmFrZScpOgotICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFN5bnRheEVycm9yLCAnQk9NJyk6Ci0gICAgICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQotCi0KLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQRVAyNjNUZXN0KQotCi1pZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNzcucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQppbmRleCA0YjE2Y2JiLi45OGM3MTZiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI3Ny5weQpAQCAtNTYsMTcgKzU2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuaWNvZGUtZnJpZW5kbHkgZmlsZXN5c3RlbSBlbmNvZGluZyIpCiAKIAotIyBEZXN0cm95IGRpcmVjdG9yeSBkaXJuYW1lIGFuZCBhbGwgZmlsZXMgdW5kZXIgaXQsIHRvIG9uZSBsZXZlbC4KLWRlZiBkZWx0cmVlKGRpcm5hbWUpOgotICAgICMgRG9uJ3QgaGlkZSBsZWdpdGltYXRlIGVycm9yczogIGlmIG9uZSBvZiB0aGVzZSBzdWNrZXJzIGV4aXN0cywgaXQncwotICAgICMgYW4gZXJyb3IgaWYgd2UgY2FuJ3QgcmVtb3ZlIGl0LgotICAgIGlmIG9zLnBhdGguZXhpc3RzKGRpcm5hbWUpOgotICAgICAgICAjIG11c3QgcGFzcyB1bmljb2RlIHRvIG9zLmxpc3RkaXIoKSBzbyB3ZSBnZXQgYmFjayB1bmljb2RlIHJlc3VsdHMuCi0gICAgICAgIGZvciBmbmFtZSBpbiBvcy5saXN0ZGlyKHN0cihkaXJuYW1lKSk6Ci0gICAgICAgICAgICBvcy51bmxpbmsob3MucGF0aC5qb2luKGRpcm5hbWUsIGZuYW1lKSkKLSAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKLQotCiBjbGFzcyBVbmljb2RlRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBmaWxlcyA9IHNldChmaWxlbmFtZXMpCiAgICAgbm9ybWFsX2Zvcm0gPSBOb25lCkBAIC03Niw2ICs2NSw4IEBACiAgICAgICAgICAgICBvcy5ta2RpcihzdXBwb3J0LlRFU1RGTikKICAgICAgICAgZXhjZXB0IEZpbGVFeGlzdHNFcnJvcjoKICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQucm10cmVlLCBzdXBwb3J0LlRFU1RGTikKKwogICAgICAgICBmaWxlcyA9IHNldCgpCiAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmlsZXM6CiAgICAgICAgICAgICBuYW1lID0gb3MucGF0aC5qb2luKHN1cHBvcnQuVEVTVEZOLCBzZWxmLm5vcm0obmFtZSkpCkBAIC04NSw5ICs3Niw2IEBACiAgICAgICAgICAgICBmaWxlcy5hZGQobmFtZSkKICAgICAgICAgc2VsZi5maWxlcyA9IGZpbGVzCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGRlbHRyZWUoc3VwcG9ydC5URVNURk4pCi0KICAgICBkZWYgbm9ybShzZWxmLCBzKToKICAgICAgICAgaWYgc2VsZi5ub3JtYWxfZm9ybToKICAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUoc2VsZi5ub3JtYWxfZm9ybSwgcykKQEAgLTk5LDEwICs4Nyw2IEBACiAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoZXhwZWN0ZWRfZXhjZXB0aW9uKSBhcyBjOgogICAgICAgICAgICAgZm4oZmlsZW5hbWUpCiAgICAgICAgIGV4Y19maWxlbmFtZSA9IGMuZXhjZXB0aW9uLmZpbGVuYW1lCi0gICAgICAgICMgbGlzdGRpciBtYXkgYXBwZW5kIGEgd2lsZGNhcmQgdG8gdGhlIGZpbGVuYW1lCi0gICAgICAgIGlmIGZuIGlzIG9zLmxpc3RkaXIgYW5kIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgZXhjX2ZpbGVuYW1lLCBfLCB3aWxkY2FyZCA9IGV4Y19maWxlbmFtZS5ycGFydGl0aW9uKG9zLnNlcCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lsZGNhcmQsICcqLionKQogICAgICAgICBpZiBjaGVja19maWxlbmFtZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjX2ZpbGVuYW1lLCBmaWxlbmFtZSwgIkZ1bmN0aW9uICclcyglYSkgZmFpbGVkICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndpdGggYmFkIGZpbGVuYW1lIGluIHRoZSBleGNlcHRpb246ICVhIiAlCkBAIC0xNzQsMTcgKzE1OCwxMSBAQAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeShzZWxmKToKICAgICAgICAgZGlybmFtZSA9IG9zLnBhdGguam9pbihzdXBwb3J0LlRFU1RGTiwgJ0dyXHhmY1x4ZGYtXHU2NmU4XHU2NmU5XHU2NmViJykKICAgICAgICAgZmlsZW5hbWUgPSAnXHhkZi1cdTY2ZThcdTY2ZTlcdTY2ZWInCi0gICAgICAgIG9sZHdkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKLSAgICAgICAgb3MuY2hkaXIoZGlybmFtZSkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QoZGlybmFtZSk6CiAgICAgICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICd3YicpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgoZmlsZW5hbWUgKyAnXG4nKS5lbmNvZGUoInV0Zi04IikpCiAgICAgICAgICAgICBvcy5hY2Nlc3MoZmlsZW5hbWUsb3MuUl9PSykKICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlbmFtZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKG9sZHdkKQotICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAogCiBjbGFzcyBVbmljb2RlTkZDRmlsZVRlc3RzKFVuaWNvZGVGaWxlVGVzdHMpOgpAQCAtMjA0LDE2ICsxODIsMTMgQEAKIAogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdHJ5OgotICAgICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgIFVuaWNvZGVGaWxlVGVzdHMsCi0gICAgICAgICAgICBVbmljb2RlTkZDRmlsZVRlc3RzLAotICAgICAgICAgICAgVW5pY29kZU5GREZpbGVUZXN0cywKLSAgICAgICAgICAgIFVuaWNvZGVORktDRmlsZVRlc3RzLAotICAgICAgICAgICAgVW5pY29kZU5GS0RGaWxlVGVzdHMsCi0gICAgICAgICkKLSAgICBmaW5hbGx5OgotICAgICAgICBkZWx0cmVlKHN1cHBvcnQuVEVTVEZOKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAorICAgICAgICBVbmljb2RlRmlsZVRlc3RzLAorICAgICAgICBVbmljb2RlTkZDRmlsZVRlc3RzLAorICAgICAgICBVbmljb2RlTkZERmlsZVRlc3RzLAorICAgICAgICBVbmljb2RlTkZLQ0ZpbGVUZXN0cywKKyAgICAgICAgVW5pY29kZU5GS0RGaWxlVGVzdHMsCisgICAgKQogCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDI5Mi5weSBiL0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CmluZGV4IDZkYThkMmUuLmZkNTI1NmMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMjkyLnB5CkBAIC0yNiw2ICsyNiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy5zdWJzdGl0dXRlKGRpY3Qod2hvPSd0aW0nLCB3aGF0PSdoYW0nKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpbSBsaWtlcyB0byBlYXQgYSBiYWcgb2YgaGFtIHdvcnRoICQxMDAnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5zdWJzdGl0dXRlLCBkaWN0KHdobz0ndGltJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgVGVtcGxhdGUuc3Vic3RpdHV0ZSkKIAogICAgIGRlZiB0ZXN0X3JlZ3VsYXJfdGVtcGxhdGVzX3dpdGhfYnJhY2VzKHNlbGYpOgogICAgICAgICBzID0gVGVtcGxhdGUoJyR3aG8gbGlrZXMgJHt3aGF0fSBmb3IgJHttZWFsfScpCkBAIC0xOTgsNiArMTk5LDkgQEAKICAgICAgICAgZXEocy5zdWJzdGl0dXRlKGRpY3QobWFwcGluZz0nb25lJyksIG1hcHBpbmc9J3R3bycpLAogICAgICAgICAgICAndGhlIG1hcHBpbmcgaXMgdHdvJykKIAorICAgICAgICBzID0gVGVtcGxhdGUoJ3RoZSBzZWxmIGlzICRzZWxmJykKKyAgICAgICAgZXEocy5zdWJzdGl0dXRlKHNlbGY9J2Jvem8nKSwgJ3RoZSBzZWxmIGlzIGJvem8nKQorCiAgICAgZGVmIHRlc3Rfa2V5d29yZF9hcmd1bWVudHNfc2FmZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCkBAIC0yMTYsNiArMjIwLDkgQEAKICAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgcy5zdWJzdGl0dXRlLCBkLCB7fSkKICAgICAgICAgcmFpc2VzKFR5cGVFcnJvciwgcy5zYWZlX3N1YnN0aXR1dGUsIGQsIHt9KQogCisgICAgICAgIHMgPSBUZW1wbGF0ZSgndGhlIHNlbGYgaXMgJHNlbGYnKQorICAgICAgICBlcShzLnNhZmVfc3Vic3RpdHV0ZShzZWxmPSdib3pvJyksICd0aGUgc2VsZiBpcyBib3pvJykKKwogICAgIGRlZiB0ZXN0X2RlbGltaXRlcl9vdmVycmlkZShzZWxmKToKICAgICAgICAgZXEgPSBzZWxmLmFzc2VydEVxdWFsCiAgICAgICAgIHJhaXNlcyA9IHNlbGYuYXNzZXJ0UmFpc2VzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BlcDMxNTEucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDMxNTEucHkKaW5kZXggMjc5MmMxMC4uN2Q0YTVkOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzMTUxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGVwMzE1MS5weQpAQCAtMTU3LDggKzE1Nyw2IEBACiAgICAgICAgIGUuY2hhcmFjdGVyc193cml0dGVuID0gNQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuY2hhcmFjdGVyc193cml0dGVuLCA1KQogCi0gICAgIyBYWFggVk1TRXJyb3Igbm90IHRlc3RlZAotCiAKIGNsYXNzIEV4cGxpY2l0U3ViY2xhc3NpbmdUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAzNTIucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQppbmRleCA1NThjZGI1Li43Yzk4YzQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDM1Mi5weQpAQCAtMSw3ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgd2FybmluZ3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QKIGltcG9ydCBvcwogZnJvbSBwbGF0Zm9ybSBpbXBvcnQgc3lzdGVtIGFzIHBsYXRmb3JtX3N5c3RlbQogCkBAIC0xODAsOCArMTc5LDYgQEAKICAgICAgICAgIyBDYXRjaGluZyBhIHN0cmluZyBpcyBiYWQuCiAgICAgICAgIHNlbGYuY2F0Y2hfZmFpbHMoInNwYW0iKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KEV4Y2VwdGlvbkNsYXNzVGVzdHMsIFVzYWdlVGVzdHMpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGVwMzgwLnB5IGIvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKaW5kZXggNGE0M2I3ZC4uNjkxOTRkZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wZXAzODAucHkKQEAgLTk5Myw2ICs5OTMsMjUgQEAKICAgICAgICAgICAgIGRlbCBpbm5lcl9nZW4KICAgICAgICAgICAgIGdjX2NvbGxlY3QoKQogCisgICAgZGVmIHRlc3Rfc2VuZF90dXBsZV93aXRoX2N1c3RvbV9nZW5lcmF0b3Ioc2VsZik6CisgICAgICAgICMgU2VlIGlzc3VlICMyMTIwOS4KKyAgICAgICAgY2xhc3MgTXlHZW46CisgICAgICAgICAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgIGRlZiBzZW5kKHNlbGYsIHdoYXQpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIHYKKyAgICAgICAgICAgICAgICB2ID0gd2hhdAorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgdiA9IHlpZWxkIGZyb20gTXlHZW4oKQorICAgICAgICBnID0gb3V0ZXIoKQorICAgICAgICBuZXh0KGcpCisgICAgICAgIHYgPSBOb25lCisgICAgICAgIGcuc2VuZCgoMSwgMiwgMywgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgKDEsIDIsIDMsIDQpKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xlLnB5IGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKaW5kZXggZmJlOTZhYy4uZjZkOWNjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGUucHkKQEAgLTEsOSArMSwxNiBAQAorZnJvbSBfY29tcGF0X3BpY2tsZSBpbXBvcnQgKElNUE9SVF9NQVBQSU5HLCBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfTUFQUElORywgUkVWRVJTRV9OQU1FX01BUFBJTkcpCitpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBpbwogaW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgc3RydWN0CitpbXBvcnQgc3lzCiAKK2ltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKK2Zyb20gdGVzdC5waWNrbGV0ZXN0ZXIgaW1wb3J0IEFic3RyYWN0VW5waWNrbGVUZXN0cwogZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQaWNrbGVUZXN0cwogZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQaWNrbGVNb2R1bGVUZXN0cwogZnJvbSB0ZXN0LnBpY2tsZXRlc3RlciBpbXBvcnQgQWJzdHJhY3RQZXJzaXN0ZW50UGlja2xlclRlc3RzCkBAIC0yMiw2ICsyOSwyMiBAQAogICAgIHBhc3MKIAogCitjbGFzcyBQeVVucGlja2xlclRlc3RzKEFic3RyYWN0VW5waWNrbGVUZXN0cyk6CisKKyAgICB1bnBpY2tsZXIgPSBwaWNrbGUuX1VucGlja2xlcgorICAgIGJhZF9zdGFja19lcnJvcnMgPSAoSW5kZXhFcnJvciwpCisgICAgYmFkX21hcmtfZXJyb3JzID0gKEluZGV4RXJyb3IsIHBpY2tsZS5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgIFR5cGVFcnJvciwgQXR0cmlidXRlRXJyb3IsIEVPRkVycm9yKQorICAgIHRydW5jYXRlZF9lcnJvcnMgPSAocGlja2xlLlVucGlja2xpbmdFcnJvciwgRU9GRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdC5lcnJvciwgSW5kZXhFcnJvciwgSW1wb3J0RXJyb3IpCisKKyAgICBkZWYgbG9hZHMoc2VsZiwgYnVmLCAqKmt3ZHMpOgorICAgICAgICBmID0gaW8uQnl0ZXNJTyhidWYpCisgICAgICAgIHUgPSBzZWxmLnVucGlja2xlcihmLCAqKmt3ZHMpCisgICAgICAgIHJldHVybiB1LmxvYWQoKQorCisKIGNsYXNzIFB5UGlja2xlclRlc3RzKEFic3RyYWN0UGlja2xlVGVzdHMpOgogCiAgICAgcGlja2xlciA9IHBpY2tsZS5fUGlja2xlcgpAQCAtNDAsMTAgKzYzLDE3IEBACiAgICAgICAgIHJldHVybiB1LmxvYWQoKQogCiAKLWNsYXNzIEluTWVtb3J5UGlja2xlVGVzdHMoQWJzdHJhY3RQaWNrbGVUZXN0cywgQmlnbWVtUGlja2xlVGVzdHMpOgorY2xhc3MgSW5NZW1vcnlQaWNrbGVUZXN0cyhBYnN0cmFjdFBpY2tsZVRlc3RzLCBBYnN0cmFjdFVucGlja2xlVGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZ21lbVBpY2tsZVRlc3RzKToKIAogICAgIHBpY2tsZXIgPSBwaWNrbGUuX1BpY2tsZXIKICAgICB1bnBpY2tsZXIgPSBwaWNrbGUuX1VucGlja2xlcgorICAgIGJhZF9zdGFja19lcnJvcnMgPSAocGlja2xlLlVucGlja2xpbmdFcnJvciwgSW5kZXhFcnJvcikKKyAgICBiYWRfbWFya19lcnJvcnMgPSAocGlja2xlLlVucGlja2xpbmdFcnJvciwgSW5kZXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgVHlwZUVycm9yLCBBdHRyaWJ1dGVFcnJvciwgRU9GRXJyb3IpCisgICAgdHJ1bmNhdGVkX2Vycm9ycyA9IChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBFT0ZFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZUVycm9yLCBWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0LmVycm9yLCBJbmRleEVycm9yLCBJbXBvcnRFcnJvcikKIAogICAgIGRlZiBkdW1wcyhzZWxmLCBhcmcsIHByb3RvY29sPU5vbmUpOgogICAgICAgICByZXR1cm4gcGlja2xlLmR1bXBzKGFyZywgcHJvdG9jb2wpCkBAIC04MywxOCArMTEzLDI5IEBACiAKIAogY2xhc3MgUHlEaXNwYXRjaFRhYmxlVGVzdHMoQWJzdHJhY3REaXNwYXRjaFRhYmxlVGVzdHMpOgorCiAgICAgcGlja2xlcl9jbGFzcyA9IHBpY2tsZS5fUGlja2xlcgorCiAgICAgZGVmIGdldF9kaXNwYXRjaF90YWJsZShzZWxmKToKICAgICAgICAgcmV0dXJuIHBpY2tsZS5kaXNwYXRjaF90YWJsZS5jb3B5KCkKIAogCiBjbGFzcyBQeUNoYWluRGlzcGF0Y2hUYWJsZVRlc3RzKEFic3RyYWN0RGlzcGF0Y2hUYWJsZVRlc3RzKToKKwogICAgIHBpY2tsZXJfY2xhc3MgPSBwaWNrbGUuX1BpY2tsZXIKKwogICAgIGRlZiBnZXRfZGlzcGF0Y2hfdGFibGUoc2VsZik6CiAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5DaGFpbk1hcCh7fSwgcGlja2xlLmRpc3BhdGNoX3RhYmxlKQogCiAKIGlmIGhhc19jX2ltcGxlbWVudGF0aW9uOgorICAgIGNsYXNzIENVbnBpY2tsZXJUZXN0cyhQeVVucGlja2xlclRlc3RzKToKKyAgICAgICAgdW5waWNrbGVyID0gX3BpY2tsZS5VbnBpY2tsZXIKKyAgICAgICAgYmFkX3N0YWNrX2Vycm9ycyA9IChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCkKKyAgICAgICAgYmFkX21hcmtfZXJyb3JzID0gKEVPRkVycm9yLCkKKyAgICAgICAgdHJ1bmNhdGVkX2Vycm9ycyA9IChwaWNrbGUuVW5waWNrbGluZ0Vycm9yLCBFT0ZFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVFcnJvciwgVmFsdWVFcnJvcikKKwogICAgIGNsYXNzIENQaWNrbGVyVGVzdHMoUHlQaWNrbGVyVGVzdHMpOgogICAgICAgICBwaWNrbGVyID0gX3BpY2tsZS5QaWNrbGVyCiAgICAgICAgIHVucGlja2xlciA9IF9waWNrbGUuVW5waWNrbGVyCkBAIC0xMzQsMTcgKzE3NSwyNDUgQEAKICAgICAgICAgZGVmIGdldF9kaXNwYXRjaF90YWJsZShzZWxmKToKICAgICAgICAgICAgIHJldHVybiBjb2xsZWN0aW9ucy5DaGFpbk1hcCh7fSwgcGlja2xlLmRpc3BhdGNoX3RhYmxlKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgY2xhc3MgU2l6ZW9mVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICBjaGVja19zaXplb2YgPSBzdXBwb3J0LmNoZWNrX3NpemVvZgorCisgICAgICAgIGRlZiB0ZXN0X3BpY2tsZXIoc2VsZik6CisgICAgICAgICAgICBiYXNlc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJzVQMm4zaTJuM2lQJykKKyAgICAgICAgICAgIHAgPSBfcGlja2xlLlBpY2tsZXIoaW8uQnl0ZXNJTygpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvYmplY3QuX19zaXplb2ZfXyhwKSwgYmFzZXNpemUpCisgICAgICAgICAgICBNVF9zaXplID0gc3RydWN0LmNhbGNzaXplKCczblAwbicpCisgICAgICAgICAgICBNRV9zaXplID0gc3RydWN0LmNhbGNzaXplKCdQbjBQJykKKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgICAgIGNoZWNrKHAsIGJhc2VzaXplICsKKyAgICAgICAgICAgICAgICBNVF9zaXplICsgOCAqIE1FX3NpemUgKyAgIyBNaW5pbWFsIG1lbW8gdGFibGUgc2l6ZS4KKyAgICAgICAgICAgICAgICBzeXMuZ2V0c2l6ZW9mKGIneCcqNDA5NikpICAjIE1pbmltYWwgd3JpdGUgYnVmZmVyIHNpemUuCisgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSg2KToKKyAgICAgICAgICAgICAgICBwLmR1bXAoY2hyKGkpKQorICAgICAgICAgICAgY2hlY2socCwgYmFzZXNpemUgKworICAgICAgICAgICAgICAgIE1UX3NpemUgKyAzMiAqIE1FX3NpemUgKyAgIyBTaXplIG9mIG1lbW8gdGFibGUgcmVxdWlyZWQgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc2F2ZSByZWZlcmVuY2VzIHRvIDYgb2JqZWN0cy4KKyAgICAgICAgICAgICAgICAwKSAgIyBXcml0ZSBidWZmZXIgaXMgY2xlYXJlZCBhZnRlciBldmVyeSBkdW1wKCkuCisKKyAgICAgICAgZGVmIHRlc3RfdW5waWNrbGVyKHNlbGYpOgorICAgICAgICAgICAgYmFzZXNpemUgPSBzdXBwb3J0LmNhbGNvYmpzaXplKCcyUG4yUCAyUDJuMmk1UCAyUDNuNlAybjJpJykKKyAgICAgICAgICAgIHVucGlja2xlciA9IF9waWNrbGUuVW5waWNrbGVyCisgICAgICAgICAgICBQID0gc3RydWN0LmNhbGNzaXplKCdQJykgICMgU2l6ZSBvZiBtZW1vIHRhYmxlIGVudHJ5LgorICAgICAgICAgICAgbiA9IHN0cnVjdC5jYWxjc2l6ZSgnbicpICAjIFNpemUgb2YgbWFyayB0YWJsZSBlbnRyeS4KKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5jaGVja19zaXplb2YKKyAgICAgICAgICAgIGZvciBlbmNvZGluZyBpbiAnQVNDSUknLCAnVVRGLTE2JywgJ2xhdGluLTEnOgorICAgICAgICAgICAgICAgIGZvciBlcnJvcnMgaW4gJ3N0cmljdCcsICdyZXBsYWNlJzoKKyAgICAgICAgICAgICAgICAgICAgdSA9IHVucGlja2xlcihpby5CeXRlc0lPKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz1lcnJvcnMpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob2JqZWN0Ll9fc2l6ZW9mX18odSksIGJhc2VzaXplKQorICAgICAgICAgICAgICAgICAgICBjaGVjayh1LCBiYXNlc2l6ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyICogUCArICAjIE1pbmltYWwgbWVtbyB0YWJsZSBzaXplLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZW5jb2RpbmcpICsgMSArIGxlbihlcnJvcnMpICsgMSkKKworICAgICAgICAgICAgc3Rkc2l6ZSA9IGJhc2VzaXplICsgbGVuKCdBU0NJSScpICsgMSArIGxlbignc3RyaWN0JykgKyAxCisgICAgICAgICAgICBkZWYgY2hlY2tfdW5waWNrbGVyKGRhdGEsIG1lbW9fc2l6ZSwgbWFya3Nfc2l6ZSk6CisgICAgICAgICAgICAgICAgZHVtcCA9IHBpY2tsZS5kdW1wcyhkYXRhKQorICAgICAgICAgICAgICAgIHUgPSB1bnBpY2tsZXIoaW8uQnl0ZXNJTyhkdW1wKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykKKyAgICAgICAgICAgICAgICB1LmxvYWQoKQorICAgICAgICAgICAgICAgIGNoZWNrKHUsIHN0ZHNpemUgKyBtZW1vX3NpemUgKiBQICsgbWFya3Nfc2l6ZSAqIG4pCisKKyAgICAgICAgICAgIGNoZWNrX3VucGlja2xlcigwLCAzMiwgMCkKKyAgICAgICAgICAgICMgMjAgaXMgbWluaW1hbCBub24tZW1wdHkgbWFyayBzdGFjayBzaXplLgorICAgICAgICAgICAgY2hlY2tfdW5waWNrbGVyKFswXSAqIDEwMCwgMzIsIDIwKQorICAgICAgICAgICAgIyAxMjggaXMgbWVtbyB0YWJsZSBzaXplIHJlcXVpcmVkIHRvIHNhdmUgcmVmZXJlbmNlcyB0byAxMDAgb2JqZWN0cy4KKyAgICAgICAgICAgIGNoZWNrX3VucGlja2xlcihbY2hyKGkpIGZvciBpIGluIHJhbmdlKDEwMCldLCAxMjgsIDIwKQorICAgICAgICAgICAgZGVmIHJlY3Vyc2UoZGVlcCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IDAKKyAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShkZWVwKToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtkYXRhLCBkYXRhXQorICAgICAgICAgICAgICAgIHJldHVybiBkYXRhCisgICAgICAgICAgICBjaGVja191bnBpY2tsZXIocmVjdXJzZSgwKSwgMzIsIDApCisgICAgICAgICAgICBjaGVja191bnBpY2tsZXIocmVjdXJzZSgxKSwgMzIsIDIwKQorICAgICAgICAgICAgY2hlY2tfdW5waWNrbGVyKHJlY3Vyc2UoMjApLCAzMiwgNTgpCisgICAgICAgICAgICBjaGVja191bnBpY2tsZXIocmVjdXJzZSg1MCksIDY0LCA1OCkKKyAgICAgICAgICAgIGNoZWNrX3VucGlja2xlcihyZWN1cnNlKDEwMCksIDEyOCwgMTM0KQorCisgICAgICAgICAgICB1ID0gdW5waWNrbGVyKGlvLkJ5dGVzSU8ocGlja2xlLmR1bXBzKCdhJywgMCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZz0nQVNDSUknLCBlcnJvcnM9J3N0cmljdCcpCisgICAgICAgICAgICB1LmxvYWQoKQorICAgICAgICAgICAgY2hlY2sodSwgc3Rkc2l6ZSArIDMyICogUCArIDIgKyAxKQorCisKK0FMVF9JTVBPUlRfTUFQUElORyA9IHsKKyAgICAoJ19lbGVtZW50dHJlZScsICd4bWwuZXRyZWUuRWxlbWVudFRyZWUnKSwKKyAgICAoJ2NQaWNrbGUnLCAncGlja2xlJyksCit9CisKK0FMVF9OQU1FX01BUFBJTkcgPSB7CisgICAgKCdfX2J1aWx0aW5fXycsICdiYXNlc3RyaW5nJywgJ2J1aWx0aW5zJywgJ3N0cicpLAorICAgICgnZXhjZXB0aW9ucycsICdTdGFuZGFyZEVycm9yJywgJ2J1aWx0aW5zJywgJ0V4Y2VwdGlvbicpLAorICAgICgnVXNlckRpY3QnLCAnVXNlckRpY3QnLCAnY29sbGVjdGlvbnMnLCAnVXNlckRpY3QnKSwKKyAgICAoJ3NvY2tldCcsICdfc29ja2V0b2JqZWN0JywgJ3NvY2tldCcsICdTb2NrZXRUeXBlJyksCit9CisKK2RlZiBtYXBwaW5nKG1vZHVsZSwgbmFtZSk6CisgICAgaWYgKG1vZHVsZSwgbmFtZSkgaW4gTkFNRV9NQVBQSU5HOgorICAgICAgICBtb2R1bGUsIG5hbWUgPSBOQU1FX01BUFBJTkdbKG1vZHVsZSwgbmFtZSldCisgICAgZWxpZiBtb2R1bGUgaW4gSU1QT1JUX01BUFBJTkc6CisgICAgICAgIG1vZHVsZSA9IElNUE9SVF9NQVBQSU5HW21vZHVsZV0KKyAgICByZXR1cm4gbW9kdWxlLCBuYW1lCisKK2RlZiByZXZlcnNlX21hcHBpbmcobW9kdWxlLCBuYW1lKToKKyAgICBpZiAobW9kdWxlLCBuYW1lKSBpbiBSRVZFUlNFX05BTUVfTUFQUElORzoKKyAgICAgICAgbW9kdWxlLCBuYW1lID0gUkVWRVJTRV9OQU1FX01BUFBJTkdbKG1vZHVsZSwgbmFtZSldCisgICAgZWxpZiBtb2R1bGUgaW4gUkVWRVJTRV9JTVBPUlRfTUFQUElORzoKKyAgICAgICAgbW9kdWxlID0gUkVWRVJTRV9JTVBPUlRfTUFQUElOR1ttb2R1bGVdCisgICAgcmV0dXJuIG1vZHVsZSwgbmFtZQorCitkZWYgZ2V0bW9kdWxlKG1vZHVsZSk6CisgICAgdHJ5OgorICAgICAgICByZXR1cm4gc3lzLm1vZHVsZXNbbW9kdWxlXQorICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgX19pbXBvcnRfXyhtb2R1bGUpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvciBhcyBleGM6CisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQoIkNhbid0IGltcG9ydCBtb2R1bGUgJXI6ICVzIiAlIChtb2R1bGUsIGV4YykpCisgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcgorICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHByaW50KGV4YykKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIHJldHVybiBzeXMubW9kdWxlc1ttb2R1bGVdCisKK2RlZiBnZXRhdHRyaWJ1dGUobW9kdWxlLCBuYW1lKToKKyAgICBvYmogPSBnZXRtb2R1bGUobW9kdWxlKQorICAgIGZvciBuIGluIG5hbWUuc3BsaXQoJy4nKToKKyAgICAgICAgb2JqID0gZ2V0YXR0cihvYmosIG4pCisgICAgcmV0dXJuIG9iagorCitkZWYgZ2V0X2V4Y2VwdGlvbnMobW9kKToKKyAgICBmb3IgbmFtZSBpbiBkaXIobW9kKToKKyAgICAgICAgYXR0ciA9IGdldGF0dHIobW9kLCBuYW1lKQorICAgICAgICBpZiBpc2luc3RhbmNlKGF0dHIsIHR5cGUpIGFuZCBpc3N1YmNsYXNzKGF0dHIsIEJhc2VFeGNlcHRpb24pOgorICAgICAgICAgICAgeWllbGQgbmFtZSwgYXR0cgorCitjbGFzcyBDb21wYXRQaWNrbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaW1wb3J0KHNlbGYpOgorICAgICAgICBtb2R1bGVzID0gc2V0KElNUE9SVF9NQVBQSU5HLnZhbHVlcygpKQorICAgICAgICBtb2R1bGVzIHw9IHNldChSRVZFUlNFX0lNUE9SVF9NQVBQSU5HKQorICAgICAgICBtb2R1bGVzIHw9IHttb2R1bGUgZm9yIG1vZHVsZSwgbmFtZSBpbiBSRVZFUlNFX05BTUVfTUFQUElOR30KKyAgICAgICAgbW9kdWxlcyB8PSB7bW9kdWxlIGZvciBtb2R1bGUsIG5hbWUgaW4gTkFNRV9NQVBQSU5HLnZhbHVlcygpfQorICAgICAgICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZ2V0bW9kdWxlKG1vZHVsZSkKKyAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICBkZWYgdGVzdF9pbXBvcnRfbWFwcGluZyhzZWxmKToKKyAgICAgICAgZm9yIG1vZHVsZTMsIG1vZHVsZTIgaW4gUkVWRVJTRV9JTVBPUlRfTUFQUElORy5pdGVtcygpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKG1vZHVsZTMsIG1vZHVsZTIpKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGdldG1vZHVsZShtb2R1bGUzKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIGlmIG1vZHVsZTNbOjFdICE9ICdfJzoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihtb2R1bGUyLCBJTVBPUlRfTUFQUElORykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChJTVBPUlRfTUFQUElOR1ttb2R1bGUyXSwgbW9kdWxlMykKKworICAgIGRlZiB0ZXN0X25hbWVfbWFwcGluZyhzZWxmKToKKyAgICAgICAgZm9yIChtb2R1bGUzLCBuYW1lMyksIChtb2R1bGUyLCBuYW1lMikgaW4gUkVWRVJTRV9OQU1FX01BUFBJTkcuaXRlbXMoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCgobW9kdWxlMywgbmFtZTMpLCAobW9kdWxlMiwgbmFtZTIpKSk6CisgICAgICAgICAgICAgICAgaWYgKG1vZHVsZTIsIG5hbWUyKSA9PSAoJ2V4Y2VwdGlvbnMnLCAnT1NFcnJvcicpOgorICAgICAgICAgICAgICAgICAgICBhdHRyID0gZ2V0YXR0cmlidXRlKG1vZHVsZTMsIG5hbWUzKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhhdHRyLCBPU0Vycm9yKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBtb2R1bGUsIG5hbWUgPSBtYXBwaW5nKG1vZHVsZTIsIG5hbWUyKQorICAgICAgICAgICAgICAgICAgICBpZiBtb2R1bGUzWzoxXSAhPSAnXyc6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChtb2R1bGUsIG5hbWUpLCAobW9kdWxlMywgbmFtZTMpKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBhdHRyID0gZ2V0YXR0cmlidXRlKG1vZHVsZTMsIG5hbWUzKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHJpYnV0ZShtb2R1bGUsIG5hbWUpLCBhdHRyKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZV9pbXBvcnRfbWFwcGluZyhzZWxmKToKKyAgICAgICAgZm9yIG1vZHVsZTIsIG1vZHVsZTMgaW4gSU1QT1JUX01BUFBJTkcuaXRlbXMoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KChtb2R1bGUyLCBtb2R1bGUzKSk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBnZXRtb2R1bGUobW9kdWxlMykKKyAgICAgICAgICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBwcmludChleGMpCisgICAgICAgICAgICAgICAgaWYgKChtb2R1bGUyLCBtb2R1bGUzKSBub3QgaW4gQUxUX0lNUE9SVF9NQVBQSU5HIGFuZAorICAgICAgICAgICAgICAgICAgICBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HLmdldChtb2R1bGUzLCBOb25lKSAhPSBtb2R1bGUyKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIChtMywgbjMpLCAobTIsIG4yKSBpbiBSRVZFUlNFX05BTUVfTUFQUElORy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1vZHVsZTMsIG1vZHVsZTIpID09IChtMywgbTIpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ05vIHJldmVyc2UgbWFwcGluZyBmcm9tICVyIHRvICVyJyAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vZHVsZTMsIG1vZHVsZTIpKQorICAgICAgICAgICAgICAgIG1vZHVsZSA9IFJFVkVSU0VfSU1QT1JUX01BUFBJTkcuZ2V0KG1vZHVsZTMsIG1vZHVsZTMpCisgICAgICAgICAgICAgICAgbW9kdWxlID0gSU1QT1JUX01BUFBJTkcuZ2V0KG1vZHVsZSwgbW9kdWxlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kdWxlLCBtb2R1bGUzKQorCisgICAgZGVmIHRlc3RfcmV2ZXJzZV9uYW1lX21hcHBpbmcoc2VsZik6CisgICAgICAgIGZvciAobW9kdWxlMiwgbmFtZTIpLCAobW9kdWxlMywgbmFtZTMpIGluIE5BTUVfTUFQUElORy5pdGVtcygpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKChtb2R1bGUyLCBuYW1lMiksIChtb2R1bGUzLCBuYW1lMykpKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIGF0dHIgPSBnZXRhdHRyaWJ1dGUobW9kdWxlMywgbmFtZTMpCisgICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgbW9kdWxlLCBuYW1lID0gcmV2ZXJzZV9tYXBwaW5nKG1vZHVsZTMsIG5hbWUzKQorICAgICAgICAgICAgICAgIGlmIChtb2R1bGUyLCBuYW1lMiwgbW9kdWxlMywgbmFtZTMpIG5vdCBpbiBBTFRfTkFNRV9NQVBQSU5HOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChtb2R1bGUsIG5hbWUpLCAobW9kdWxlMiwgbmFtZTIpKQorICAgICAgICAgICAgICAgIG1vZHVsZSwgbmFtZSA9IG1hcHBpbmcobW9kdWxlLCBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKG1vZHVsZSwgbmFtZSksIChtb2R1bGUzLCBuYW1lMykpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb25zKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcHBpbmcoJ2V4Y2VwdGlvbnMnLCAnU3RhbmRhcmRFcnJvcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYnVpbHRpbnMnLCAnRXhjZXB0aW9uJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFwcGluZygnZXhjZXB0aW9ucycsICdFeGNlcHRpb24nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2J1aWx0aW5zJywgJ0V4Y2VwdGlvbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmVyc2VfbWFwcGluZygnYnVpbHRpbnMnLCAnRXhjZXB0aW9uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdleGNlcHRpb25zJywgJ0V4Y2VwdGlvbicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hcHBpbmcoJ2V4Y2VwdGlvbnMnLCAnT1NFcnJvcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYnVpbHRpbnMnLCAnT1NFcnJvcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmVyc2VfbWFwcGluZygnYnVpbHRpbnMnLCAnT1NFcnJvcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnZXhjZXB0aW9ucycsICdPU0Vycm9yJykpCisKKyAgICAgICAgZm9yIG5hbWUsIGV4YyBpbiBnZXRfZXhjZXB0aW9ucyhidWlsdGlucyk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBleGMgaW4gKEJsb2NraW5nSU9FcnJvciwgUmVzb3VyY2VXYXJuaW5nKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBleGMgaXMgbm90IE9TRXJyb3IgYW5kIGlzc3ViY2xhc3MoZXhjLCBPU0Vycm9yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXZlcnNlX21hcHBpbmcoJ2J1aWx0aW5zJywgbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdleGNlcHRpb25zJywgJ09TRXJyb3InKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmVyc2VfbWFwcGluZygnYnVpbHRpbnMnLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2V4Y2VwdGlvbnMnLCBuYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXBwaW5nKCdleGNlcHRpb25zJywgbmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCdidWlsdGlucycsIG5hbWUpKQorCisgICAgZGVmIHRlc3RfbXVsdGlwcm9jZXNzaW5nX2V4Y2VwdGlvbnMoc2VsZik6CisgICAgICAgIG1vZHVsZSA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnbXVsdGlwcm9jZXNzaW5nLmNvbnRleHQnKQorICAgICAgICBmb3IgbmFtZSwgZXhjIGluIGdldF9leGNlcHRpb25zKG1vZHVsZSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuYW1lKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldmVyc2VfbWFwcGluZygnbXVsdGlwcm9jZXNzaW5nLmNvbnRleHQnLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnbXVsdGlwcm9jZXNzaW5nJywgbmFtZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtYXBwaW5nKCdtdWx0aXByb2Nlc3NpbmcnLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnbXVsdGlwcm9jZXNzaW5nLmNvbnRleHQnLCBuYW1lKSkKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdHMgPSBbUGlja2xlVGVzdHMsIFB5UGlja2xlclRlc3RzLCBQeVBlcnNQaWNrbGVyVGVzdHMsCi0gICAgICAgICAgICAgUHlEaXNwYXRjaFRhYmxlVGVzdHMsIFB5Q2hhaW5EaXNwYXRjaFRhYmxlVGVzdHNdCisgICAgdGVzdHMgPSBbUGlja2xlVGVzdHMsIFB5VW5waWNrbGVyVGVzdHMsIFB5UGlja2xlclRlc3RzLCBQeVBlcnNQaWNrbGVyVGVzdHMsCisgICAgICAgICAgICAgUHlEaXNwYXRjaFRhYmxlVGVzdHMsIFB5Q2hhaW5EaXNwYXRjaFRhYmxlVGVzdHMsCisgICAgICAgICAgICAgQ29tcGF0UGlja2xlVGVzdHNdCiAgICAgaWYgaGFzX2NfaW1wbGVtZW50YXRpb246Ci0gICAgICAgIHRlc3RzLmV4dGVuZChbQ1BpY2tsZXJUZXN0cywgQ1BlcnNQaWNrbGVyVGVzdHMsCisgICAgICAgIHRlc3RzLmV4dGVuZChbQ1VucGlja2xlclRlc3RzLCBDUGlja2xlclRlc3RzLCBDUGVyc1BpY2tsZXJUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICBDRHVtcFBpY2tsZV9Mb2FkUGlja2xlLCBEdW1wUGlja2xlX0NMb2FkUGlja2xlLAogICAgICAgICAgICAgICAgICAgICAgIFB5UGlja2xlclVucGlja2xlck9iamVjdFRlc3RzLAogICAgICAgICAgICAgICAgICAgICAgIENQaWNrbGVyVW5waWNrbGVyT2JqZWN0VGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgQ0Rpc3BhdGNoVGFibGVUZXN0cywgQ0NoYWluRGlzcGF0Y2hUYWJsZVRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgIEluTWVtb3J5UGlja2xlVGVzdHNdKQorICAgICAgICAgICAgICAgICAgICAgIEluTWVtb3J5UGlja2xlVGVzdHMsIFNpemVvZlRlc3RzXSkKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCiAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChwaWNrbGUpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkgYi9MaWIvdGVzdC90ZXN0X3BpY2tsZXRvb2xzLnB5CmluZGV4IGQzN2FjMjYuLmJiZTY4NzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGlja2xldG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9waWNrbGV0b29scy5weQpAQCAtMSwzICsxLDQgQEAKK2ltcG9ydCBzdHJ1Y3QKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBwaWNrbGV0b29scwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC0xNSw2ICsxNiw0OCBAQAogICAgICMgVGVzdCByZWxpZXMgb24gcHJlY2lzZSBvdXRwdXQgb2YgZHVtcHMoKQogICAgIHRlc3RfcGlja2xlX3RvXzJ4ID0gTm9uZQogCisgICAgZGVmIHRlc3Rfb3B0aW1pemVfbG9uZ19iaW5nZXQoc2VsZik6CisgICAgICAgIGRhdGEgPSBbc3RyKGkpIGZvciBpIGluIHJhbmdlKDI1NyldCisgICAgICAgIGRhdGEuYXBwZW5kKGRhdGFbLTFdKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMoZGF0YSwgcHJvdG8pCisgICAgICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bnBpY2tsZWRbLTFdLCB1bnBpY2tsZWRbLTJdKQorCisgICAgICAgICAgICBwaWNrbGVkMiA9IHBpY2tsZXRvb2xzLm9wdGltaXplKHBpY2tsZWQpCisgICAgICAgICAgICB1bnBpY2tsZWQyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQyLCBkYXRhKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh1bnBpY2tsZWQyWy0xXSwgdW5waWNrbGVkMlstMl0pCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHBpY2tsZS5MT05HX0JJTkdFVCwgcGlja2xlZDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKHBpY2tsZS5MT05HX0JJTlBVVCwgcGlja2xlZDIpCisKKyAgICBkZWYgdGVzdF9vcHRpbWl6ZV9iaW5wdXRfYW5kX21lbW9pemUoc2VsZik6CisgICAgICAgIHBpY2tsZWQgPSAoYidceDgwXHgwNFx4OTVceDE1XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgICAgICAgICBiJ11ceDk0KFx4OGNceDA0c3BhbXFceDAxXHg4Y1x4MDNoYW1ceDk0aFx4MDJlLicpCisgICAgICAgICMgICAgMDogXHg4MCBQUk9UTyAgICAgIDQKKyAgICAgICAgIyAgICAyOiBceDk1IEZSQU1FICAgICAgMjEKKyAgICAgICAgIyAgIDExOiBdICAgIEVNUFRZX0xJU1QKKyAgICAgICAgIyAgIDEyOiBceDk0IE1FTU9JWkUKKyAgICAgICAgIyAgIDEzOiAoICAgIE1BUksKKyAgICAgICAgIyAgIDE0OiBceDhjICAgICBTSE9SVF9CSU5VTklDT0RFICdzcGFtJworICAgICAgICAjICAgMjA6IHEgICAgICAgIEJJTlBVVCAgICAgMQorICAgICAgICAjICAgMjI6IFx4OGMgICAgIFNIT1JUX0JJTlVOSUNPREUgJ2hhbScKKyAgICAgICAgIyAgIDI3OiBceDk0ICAgICBNRU1PSVpFCisgICAgICAgICMgICAyODogaCAgICAgICAgQklOR0VUICAgICAyCisgICAgICAgICMgICAzMDogZSAgICAgICAgQVBQRU5EUyAgICAoTUFSSyBhdCAxMykKKyAgICAgICAgIyAgIDMxOiAuICAgIFNUT1AKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwaWNrbGUuQklOUFVULCBwaWNrbGVkKQorICAgICAgICB1bnBpY2tsZWQgPSBwaWNrbGUubG9hZHMocGlja2xlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIFsnc3BhbScsICdoYW0nLCAnaGFtJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW5waWNrbGVkWzFdLCB1bnBpY2tsZWRbMl0pCisKKyAgICAgICAgcGlja2xlZDIgPSBwaWNrbGV0b29scy5vcHRpbWl6ZShwaWNrbGVkKQorICAgICAgICB1bnBpY2tsZWQyID0gcGlja2xlLmxvYWRzKHBpY2tsZWQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZDIsIFsnc3BhbScsICdoYW0nLCAnaGFtJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXModW5waWNrbGVkMlsxXSwgdW5waWNrbGVkMlsyXSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwaWNrbGUuQklOUFVULCBwaWNrbGVkMikKKwogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoT3B0aW1pemVkUGlja2xlVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BrZy5weSBiL0xpYi90ZXN0L3Rlc3RfcGtnLnB5CmluZGV4IDM1NWVmZTcuLjk4ODMwMDAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtnLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGtnLnB5CkBAIC0xOTksMTQgKzE5OSwxNCBAQAogICAgICAgICBpbXBvcnQgdDUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ1KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdmb28nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RyaW5nJywgJ3Q1J10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdmb28nLCAnc3RyaW5nJywgJ3Q1J10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NS5mb28pKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ3N0cmluZyddKQorICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19zcGVjX18nLCAnc3RyaW5nJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZml4ZGlyKGRpcih0NS5zdHJpbmcpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsICdfX2xvYWRlcl9fJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ3NwYW0nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fc3BlY19fJywgJ3NwYW0nXSkKIAogICAgIGRlZiB0ZXN0XzYoc2VsZik6CiAgICAgICAgIGhpZXIgPSBbCkBAIC0yMjIsMTQgKzIyMiwxNSBAQAogICAgICAgICBpbXBvcnQgdDYKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2FsbF9fJywgJ19fY2FjaGVkX18nLCAnX19kb2NfXycsICdfX2ZpbGVfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX2xvYWRlcl9fJywgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fc3BlY19fJ10pCiAgICAgICAgIHMgPSAiIiIKICAgICAgICAgICAgIGltcG9ydCB0NgogICAgICAgICAgICAgZnJvbSB0NiBpbXBvcnQgKgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHQ2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19hbGxfXycsICdfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbG9hZGVyX18nLCAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fcGF0aF9fJywgJ2VnZ3MnLCAnaGFtJywgJ3NwYW0nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfX3BhdGhfXycsICdfX3NwZWNfXycsICdlZ2dzJywgJ2hhbScsICdzcGFtJ10pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpcigpLCBbJ2VnZ3MnLCAnaGFtJywgJ3NlbGYnLCAnc3BhbScsICd0NiddKQogICAgICAgICAgICAgIiIiCiAgICAgICAgIHNlbGYucnVuX2NvZGUocykKQEAgLTI1NiwxOCArMjU3LDE5IEBACiAgICAgICAgIGltcG9ydCB0NyBhcyB0YXMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHRhcykpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ19fc3BlY19fJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCiAgICAgICAgIGZyb20gdDcgaW1wb3J0IHN1YiBhcyBzdWJwYXIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaXhkaXIoZGlyKHN1YnBhcikpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnX19jYWNoZWRfXycsICdfX2RvY19fJywgJ19fZmlsZV9fJywgJ19fbG9hZGVyX18nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAnX19uYW1lX18nLCAnX19wYWNrYWdlX18nLCAnX19wYXRoX18nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJ19fbmFtZV9fJywgJ19fcGFja2FnZV9fJywgJ19fcGF0aF9fJywgJ19fc3BlY19fJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3ViKQogICAgICAgICBmcm9tIHQ3LnN1YiBpbXBvcnQgc3Vic3ViIGFzIHN1YnN1YnN1YgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpeGRpcihkaXIoc3Vic3Vic3ViKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydfX2NhY2hlZF9fJywgJ19fZG9jX18nLCAnX19maWxlX18nLCAnX19sb2FkZXJfXycsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdzcGFtJ10pCisgICAgICAgICAgICAgICAgICAgICAgICAgICdfX25hbWVfXycsICdfX3BhY2thZ2VfXycsICdfX3BhdGhfXycsICdfX3NwZWNfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdzcGFtJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodDcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3ViKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN1YnN1YikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtnaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKaW5kZXggYTg0MjZiNS4uMzcwYjJhYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wa2dpbXBvcnQucHkKQEAgLTYsNyArNiw3IEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIGltcCBpbXBvcnQgY2FjaGVfZnJvbV9zb3VyY2UKK2Zyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IGNhY2hlX2Zyb21fc291cmNlCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjcmVhdGVfZW1wdHlfZmlsZQogCiBjbGFzcyBUZXN0SW1wb3J0KHVuaXR0ZXN0LlRlc3RDYXNlKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weSBiL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQppbmRleCBmZDA2NjE0Li5lMGM4NjM1ZGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcGtndXRpbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BrZ3V0aWwucHkKQEAgLTEsMTIgKzEsMTMgQEAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHVubG9hZCwgY2hlY2tfd2FybmluZ3MKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBydW5fdW5pdHRlc3QsIHVubG9hZCwgY2hlY2tfd2FybmluZ3MsIENsZWFuSW1wb3J0CiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKLWltcG9ydCBpbXAKIGltcG9ydCBpbXBvcnRsaWIKK2Zyb20gaW1wb3J0bGliLnV0aWwgaW1wb3J0IHNwZWNfZnJvbV9maWxlX2xvY2F0aW9uCiBpbXBvcnQgcGtndXRpbAogaW1wb3J0IG9zCiBpbXBvcnQgb3MucGF0aAogaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB6aXBmaWxlCiAKQEAgLTEwMywyMyArMTA0LDIwIEBACiBjbGFzcyBQa2d1dGlsUEVQMzAyVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgY2xhc3MgTXlUZXN0TG9hZGVyKG9iamVjdCk6Ci0gICAgICAgIGRlZiBsb2FkX21vZHVsZShzZWxmLCBmdWxsbmFtZSk6Ci0gICAgICAgICAgICAjIENyZWF0ZSBhbiBlbXB0eSBtb2R1bGUKLSAgICAgICAgICAgIG1vZCA9IHN5cy5tb2R1bGVzLnNldGRlZmF1bHQoZnVsbG5hbWUsIGltcC5uZXdfbW9kdWxlKGZ1bGxuYW1lKSkKLSAgICAgICAgICAgIG1vZC5fX2ZpbGVfXyA9ICI8JXM+IiAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCi0gICAgICAgICAgICBtb2QuX19sb2FkZXJfXyA9IHNlbGYKLSAgICAgICAgICAgICMgTWFrZSBpdCBhIHBhY2thZ2UKLSAgICAgICAgICAgIG1vZC5fX3BhdGhfXyA9IFtdCisgICAgICAgIGRlZiBleGVjX21vZHVsZShzZWxmLCBtb2QpOgogICAgICAgICAgICAgIyBDb3VudCBob3cgbWFueSB0aW1lcyB0aGUgbW9kdWxlIGlzIHJlbG9hZGVkCi0gICAgICAgICAgICBtb2QuX19kaWN0X19bJ2xvYWRzJ10gPSBtb2QuX19kaWN0X18uZ2V0KCdsb2FkcycsMCkgKyAxCi0gICAgICAgICAgICByZXR1cm4gbW9kCisgICAgICAgICAgICBtb2QuX19kaWN0X19bJ2xvYWRzJ10gPSBtb2QuX19kaWN0X18uZ2V0KCdsb2FkcycsIDApICsgMQogCiAgICAgICAgIGRlZiBnZXRfZGF0YShzZWxmLCBwYXRoKToKICAgICAgICAgICAgIHJldHVybiAiSGVsbG8sIHdvcmxkISIKIAogICAgIGNsYXNzIE15VGVzdEltcG9ydGVyKG9iamVjdCk6Ci0gICAgICAgIGRlZiBmaW5kX21vZHVsZShzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgICAgIHJldHVybiBQa2d1dGlsUEVQMzAyVGVzdHMuTXlUZXN0TG9hZGVyKCkKKyAgICAgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBmdWxsbmFtZSwgcGF0aD1Ob25lLCB0YXJnZXQ9Tm9uZSk6CisgICAgICAgICAgICBsb2FkZXIgPSBQa2d1dGlsUEVQMzAyVGVzdHMuTXlUZXN0TG9hZGVyKCkKKyAgICAgICAgICAgIHJldHVybiBzcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihmdWxsbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPCVzPicgJSBsb2FkZXIuX19jbGFzc19fLl9fbmFtZV9fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1sb2FkZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlX3NlYXJjaF9sb2NhdGlvbnM9W10pCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHN5cy5tZXRhX3BhdGguaW5zZXJ0KDAsIHNlbGYuTXlUZXN0SW1wb3J0ZXIoKSkKQEAgLTIwMCw2ICsxOTgsOCBAQAogICAgICAgICBkaXJuYW1lID0gc2VsZi5jcmVhdGVfaW5pdChwa2duYW1lKQogICAgICAgICBwYXRoaXRlbSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBwa2duYW1lKQogICAgICAgICBmdWxsbmFtZSA9ICd7fS57fScuZm9ybWF0KHBrZ25hbWUsIG1vZG5hbWUpCisgICAgICAgIHN5cy5tb2R1bGVzLnBvcChmdWxsbmFtZSwgTm9uZSkKKyAgICAgICAgc3lzLm1vZHVsZXMucG9wKHBrZ25hbWUsIE5vbmUpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY3JlYXRlX3N1Ym1vZHVsZShkaXJuYW1lLCBwa2duYW1lLCBtb2RuYW1lLCAwKQogCkBAIC0yMDgsMTEgKzIwOCwxOSBAQAogICAgICAgICAgICAgaW1wb3J0ZXJzID0gbGlzdChpdGVyX2ltcG9ydGVycyhmdWxsbmFtZSkpCiAgICAgICAgICAgICBleHBlY3RlZF9pbXBvcnRlciA9IGdldF9pbXBvcnRlcihwYXRoaXRlbSkKICAgICAgICAgICAgIGZvciBmaW5kZXIgaW4gaW1wb3J0ZXJzOgorICAgICAgICAgICAgICAgIHNwZWMgPSBwa2d1dGlsLl9nZXRfc3BlYyhmaW5kZXIsIGZ1bGxuYW1lKQorICAgICAgICAgICAgICAgIGxvYWRlciA9IHNwZWMubG9hZGVyCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBsb2FkZXIgPSBsb2FkZXIubG9hZGVyCisgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAjIEZvciBub3cgd2Ugc3RpbGwgYWxsb3cgcmF3IGxvYWRlcnMgZnJvbQorICAgICAgICAgICAgICAgICAgICAjIGZpbmRfbW9kdWxlKCkuCisgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZmluZGVyLCBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmaW5kZXIsIGV4cGVjdGVkX2ltcG9ydGVyKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmaW5kZXIuZmluZF9tb2R1bGUoZnVsbG5hbWUpLAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShsb2FkZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlcikKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShmaW5kZXIuZmluZF9tb2R1bGUocGtnbmFtZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGtndXRpbC5fZ2V0X3NwZWMoZmluZGVyLCBwa2duYW1lKSkKIAogICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvcik6CiAgICAgICAgICAgICAgICAgbGlzdChpdGVyX2ltcG9ydGVycygnaW52YWxpZC5tb2R1bGUnKSkKQEAgLTIyMiw4ICsyMzAsMTEgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZGlybmFtZSkKICAgICAgICAgICAgIGRlbCBzeXMucGF0aFswXQotICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzWydzcGFtJ10KLSAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snc3BhbS5lZ2dzJ10KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3NwYW0nXQorICAgICAgICAgICAgICAgIGRlbCBzeXMubW9kdWxlc1snc3BhbS5lZ2dzJ10KKyAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCiAKIAogICAgIGRlZiB0ZXN0X21peGVkX25hbWVzcGFjZShzZWxmKToKQEAgLTMyMyw2ICszMzQsNTYgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHBrZ3V0aWwuZ2V0X2xvYWRlcigidGVzdC5zdXBwb3J0IikpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3Lndhcm5pbmdzKSwgMCkKIAorICAgIGRlZiB0ZXN0X2dldF9sb2FkZXJfaGFuZGxlc19taXNzaW5nX2xvYWRlcl9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGdsb2JhbCBfX2xvYWRlcl9fCisgICAgICAgIHRoaXNfbG9hZGVyID0gX19sb2FkZXJfXworICAgICAgICBkZWwgX19sb2FkZXJfXworICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCkgYXMgdzoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwa2d1dGlsLmdldF9sb2FkZXIoX19uYW1lX18pKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgX19sb2FkZXJfXyA9IHRoaXNfbG9hZGVyCisKKyAgICBkZWYgdGVzdF9nZXRfbG9hZGVyX2hhbmRsZXNfbWlzc2luZ19zcGVjX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBtb2QgPSB0eXBlKHN5cykobmFtZSkKKyAgICAgICAgZGVsIG1vZC5fX3NwZWNfXworICAgICAgICB3aXRoIENsZWFuSW1wb3J0KG5hbWUpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2QKKyAgICAgICAgICAgIGxvYWRlciA9IHBrZ3V0aWwuZ2V0X2xvYWRlcihuYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCisKKyAgICBkZWYgdGVzdF9nZXRfbG9hZGVyX2hhbmRsZXNfc3BlY19hdHRyaWJ1dGVfbm9uZShzZWxmKToKKyAgICAgICAgbmFtZSA9ICdzcGFtJworICAgICAgICBtb2QgPSB0eXBlKHN5cykobmFtZSkKKyAgICAgICAgbW9kLl9fc3BlY19fID0gTm9uZQorICAgICAgICB3aXRoIENsZWFuSW1wb3J0KG5hbWUpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBtb2QKKyAgICAgICAgICAgIGxvYWRlciA9IHBrZ3V0aWwuZ2V0X2xvYWRlcihuYW1lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShsb2FkZXIpCisKKyAgICBkZWYgdGVzdF9nZXRfbG9hZGVyX05vbmVfaW5fc3lzX21vZHVsZXMoc2VsZik6CisgICAgICAgIG5hbWUgPSAndG90YWxseSBib2d1cycKKyAgICAgICAgc3lzLm1vZHVsZXNbbmFtZV0gPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGxvYWRlciA9IHBrZ3V0aWwuZ2V0X2xvYWRlcihuYW1lKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHN5cy5tb2R1bGVzW25hbWVdCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvYWRlcikKKworICAgIGRlZiB0ZXN0X2ZpbmRfbG9hZGVyX21pc3NpbmdfbW9kdWxlKHNlbGYpOgorICAgICAgICBuYW1lID0gJ3RvdGFsbHkgYm9ndXMnCisgICAgICAgIGxvYWRlciA9IHBrZ3V0aWwuZmluZF9sb2FkZXIobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9hZGVyKQorCisgICAgZGVmIHRlc3RfZmluZF9sb2FkZXJfYXZvaWRzX2VtdWxhdGlvbihzZWxmKToKKyAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwa2d1dGlsLmZpbmRfbG9hZGVyKCJzeXMiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHBrZ3V0aWwuZmluZF9sb2FkZXIoIm9zIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShwa2d1dGlsLmZpbmRfbG9hZGVyKCJ0ZXN0LnN1cHBvcnQiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcud2FybmluZ3MpLCAwKQorCiAgICAgZGVmIHRlc3RfZ2V0X2ltcG9ydGVyX2F2b2lkc19lbXVsYXRpb24oc2VsZik6CiAgICAgICAgICMgV2UgdXNlIGFuIGlsbGVnYWwgcGF0aCBzbyAqbm9uZSogb2YgdGhlIHBhdGggaG9va3Mgc2hvdWxkIGZpcmUKICAgICAgICAgd2l0aCBjaGVja193YXJuaW5ncygpIGFzIHc6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wbGlzdGxpYi5weQppbmRleCA5ZTg2YjNkLi5mZWY5ZjM5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BsaXN0bGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcGxpc3RsaWIucHkKQEAgLTEsOTQgKzEsOTUgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIENvcHlyaWdodCAoQykgMjAwMy0yMDEzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHBsaXN0bGliCiBpbXBvcnQgb3MKIGltcG9ydCBkYXRldGltZQoraW1wb3J0IGNvZGVjcworaW1wb3J0IGJpbmFzY2lpCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBzdHJ1Y3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwogCitBTExfRk9STUFUUz0ocGxpc3RsaWIuRk1UX1hNTCwgcGxpc3RsaWIuRk1UX0JJTkFSWSkKIAotIyBUaGlzIHRlc3QgZGF0YSB3YXMgZ2VuZXJhdGVkIHRocm91Z2ggQ29jb2EncyBOU0RpY3Rpb25hcnkgY2xhc3MKLVRFU1REQVRBID0gYiIiIjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iIFwKLSJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0gICAgICAgIDxrZXk+YURhdGU8L2tleT4KLSAgICAgICAgPGRhdGU+MjAwNC0xMC0yNlQxMDozMzozM1o8L2RhdGU+Ci0gICAgICAgIDxrZXk+YURpY3Q8L2tleT4KLSAgICAgICAgPGRpY3Q+Ci0gICAgICAgICAgICAgICAgPGtleT5hRmFsc2VWYWx1ZTwva2V5PgotICAgICAgICAgICAgICAgIDxmYWxzZS8+Ci0gICAgICAgICAgICAgICAgPGtleT5hVHJ1ZVZhbHVlPC9rZXk+Ci0gICAgICAgICAgICAgICAgPHRydWUvPgotICAgICAgICAgICAgICAgIDxrZXk+YVVuaWNvZGVWYWx1ZTwva2V5PgotICAgICAgICAgICAgICAgIDxzdHJpbmc+TVx4YzNceGE0c3NpZywgTWFceGMzXHg5Zjwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxrZXk+YW5vdGhlclN0cmluZzwva2V5PgotICAgICAgICAgICAgICAgIDxzdHJpbmc+Jmx0O2hlbGxvICZhbXA7ICdoaScgdGhlcmUhJmd0Ozwvc3RyaW5nPgotICAgICAgICAgICAgICAgIDxrZXk+ZGVlcGVyRGljdDwva2V5PgotICAgICAgICAgICAgICAgIDxkaWN0PgotICAgICAgICAgICAgICAgICAgICAgICAgPGtleT5hPC9rZXk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xNzwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yjwva2V5PgotICAgICAgICAgICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxrZXk+Yzwva2V5PgotICAgICAgICAgICAgICAgICAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4yPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nPnRleHQ8L3N0cmluZz4KLSAgICAgICAgICAgICAgICAgICAgICAgIDwvYXJyYXk+Ci0gICAgICAgICAgICAgICAgPC9kaWN0PgotICAgICAgICA8L2RpY3Q+Ci0gICAgICAgIDxrZXk+YUZsb2F0PC9rZXk+Ci0gICAgICAgIDxyZWFsPjAuNTwvcmVhbD4KLSAgICAgICAgPGtleT5hTGlzdDwva2V5PgotICAgICAgICA8YXJyYXk+Ci0gICAgICAgICAgICAgICAgPHN0cmluZz5BPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgPHN0cmluZz5CPC9zdHJpbmc+Ci0gICAgICAgICAgICAgICAgPGludGVnZXI+MTI8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgPHJlYWw+MzIuNTwvcmVhbD4KLSAgICAgICAgICAgICAgICA8YXJyYXk+Ci0gICAgICAgICAgICAgICAgICAgICAgICA8aW50ZWdlcj4xPC9pbnRlZ2VyPgotICAgICAgICAgICAgICAgICAgICAgICAgPGludGVnZXI+MjwvaW50ZWdlcj4KLSAgICAgICAgICAgICAgICAgICAgICAgIDxpbnRlZ2VyPjM8L2ludGVnZXI+Ci0gICAgICAgICAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPGtleT5hU3RyaW5nPC9rZXk+Ci0gICAgICAgIDxzdHJpbmc+RG9vZGFoPC9zdHJpbmc+Ci0gICAgICAgIDxrZXk+YW5FbXB0eURpY3Q8L2tleT4KLSAgICAgICAgPGRpY3QvPgotICAgICAgICA8a2V5PmFuRW1wdHlMaXN0PC9rZXk+Ci0gICAgICAgIDxhcnJheS8+Ci0gICAgICAgIDxrZXk+YW5JbnQ8L2tleT4KLSAgICAgICAgPGludGVnZXI+NzI4PC9pbnRlZ2VyPgotICAgICAgICA8a2V5Pm5lc3RlZERhdGE8L2tleT4KLSAgICAgICAgPGFycmF5PgotICAgICAgICAgICAgICAgIDxkYXRhPgotICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXp4c2IzUnpJRzltSUdKcGJtRnllU0JuZFc1cgotICAgICAgICAgICAgICAgIFBnQUJBZ004Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNQotICAgICAgICAgICAgICAgIElHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTBjeUJ2WmlCaQotICAgICAgICAgICAgICAgIGFXNWhjbmtnWjNWdWF6NEFBUUlEUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSegotICAgICAgICAgICAgICAgIElHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRAotICAgICAgICAgICAgICAgIFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQotICAgICAgICAgICAgICAgIDwvZGF0YT4KLSAgICAgICAgPC9hcnJheT4KLSAgICAgICAgPGtleT5zb21lRGF0YTwva2V5PgotICAgICAgICA8ZGF0YT4KLSAgICAgICAgUEdKcGJtRnllU0JuZFc1clBnPT0KLSAgICAgICAgPC9kYXRhPgotICAgICAgICA8a2V5PnNvbWVNb3JlRGF0YTwva2V5PgotICAgICAgICA8ZGF0YT4KLSAgICAgICAgUEd4dmRITWdiMllnWW1sdVlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTTgKLSAgICAgICAgYkc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHMKLSAgICAgICAgYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHYKLSAgICAgICAgZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbmRXNXJQZ0FCQWdNOGJHOTAKLSAgICAgICAgY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFBHeHZkSE1nYjJZZ1ltbHVZWEo1SUdkMWJtcytBQUVDQXc9PQotICAgICAgICA8L2RhdGE+Ci0gICAgICAgIDxrZXk+XHhjM1x4ODViZW5yYWE8L2tleT4KLSAgICAgICAgPHN0cmluZz5UaGF0IHdhcyBhIHVuaWNvZGUga2V5Ljwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KLSIiIi5yZXBsYWNlKGIiICIgKiA4LCBiIlx0IikgICMgQXBwbGUgYXMgd2VsbCBhcyBwbGlzdGxpYi5weSBvdXRwdXQgaGFyZCB0YWJzCisjIFRoZSB0ZXN0ZGF0YSBpcyBnZW5lcmF0ZWQgdXNpbmcgTWFjL1Rvb2xzL3BsaXN0bGliX2dlbmVyYXRlX3Rlc3RkYXRhLnB5CisjICh3aGljaCB1c2luZyBQeU9iakMgdG8gY29udHJvbCB0aGUgQ29jb2EgY2xhc3NlcyBmb3IgZ2VuZXJhdGluZyBwbGlzdHMpCitURVNUREFUQT17CisgICAgcGxpc3RsaWIuRk1UX1hNTDogYmluYXNjaWkuYTJiX2Jhc2U2NChiJycnCisgICAgICAgIFBEOTRiV3dnZG1WeWMybHZiajBpTVM0d0lpQmxibU52WkdsdVp6MGlWVlJHTFRnaVB6NEtQQ0ZFVDBOVQorICAgICAgICBXVkJGSUhCc2FYTjBJRkJWUWt4SlF5QWlMUzh2UVhCd2JHVXZMMFJVUkNCUVRFbFRWQ0F4TGpBdkwwVk8KKyAgICAgICAgSWlBaWFIUjBjRG92TDNkM2R5NWhjSEJzWlM1amIyMHZSRlJFY3k5UWNtOXdaWEowZVV4cGMzUXRNUzR3CisgICAgICAgIExtUjBaQ0krQ2p4d2JHbHpkQ0IyWlhKemFXOXVQU0l4TGpBaVBnbzhaR2xqZEQ0S0NUeHJaWGsrWVVKcAorICAgICAgICBaMGx1ZER3dmEyVjVQZ29KUEdsdWRHVm5aWEkrT1RJeU16TTNNakF6TmpnMU5EYzNOVGMyTkR3dmFXNTAKKyAgICAgICAgWldkbGNqNEtDVHhyWlhrK1lVSnBaMGx1ZERJOEwydGxlVDRLQ1R4cGJuUmxaMlZ5UGpreU1qTXpOekl3CisgICAgICAgIE16WTROVFEzTnpVNE5USThMMmx1ZEdWblpYSStDZ2s4YTJWNVBtRkVZWFJsUEM5clpYaytDZ2s4WkdGMAorICAgICAgICBaVDR5TURBMExURXdMVEkyVkRFd09qTXpPak16V2p3dlpHRjBaVDRLQ1R4clpYaytZVVJwWTNROEwydGwKKyAgICAgICAgZVQ0S0NUeGthV04wUGdvSkNUeHJaWGsrWVVaaGJITmxWbUZzZFdVOEwydGxlVDRLQ1FrOFptRnNjMlV2CisgICAgICAgIFBnb0pDVHhyWlhrK1lWUnlkV1ZXWVd4MVpUd3ZhMlY1UGdvSkNUeDBjblZsTHo0S0NRazhhMlY1UG1GVgorICAgICAgICBibWxqYjJSbFZtRnNkV1U4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QazNEcEhOemFXY3NJRTFodzU4OEwzTjAKKyAgICAgICAgY21sdVp6NEtDUWs4YTJWNVBtRnViM1JvWlhKVGRISnBibWM4TDJ0bGVUNEtDUWs4YzNSeWFXNW5QaVpzCisgICAgICAgIGREdG9aV3hzYnlBbVlXMXdPeUFuYUdrbklIUm9aWEpsSVNabmREczhMM04wY21sdVp6NEtDUWs4YTJWNQorICAgICAgICBQbVJsWlhCbGNrUnBZM1E4TDJ0bGVUNEtDUWs4WkdsamRENEtDUWtKUEd0bGVUNWhQQzlyWlhrK0Nna0oKKyAgICAgICAgQ1R4cGJuUmxaMlZ5UGpFM1BDOXBiblJsWjJWeVBnb0pDUWs4YTJWNVBtSThMMnRsZVQ0S0NRa0pQSEpsCisgICAgICAgIFlXdytNekl1TlR3dmNtVmhiRDRLQ1FrSlBHdGxlVDVqUEM5clpYaytDZ2tKQ1R4aGNuSmhlVDRLQ1FrSgorICAgICAgICBDVHhwYm5SbFoyVnlQakU4TDJsdWRHVm5aWEkrQ2drSkNRazhhVzUwWldkbGNqNHlQQzlwYm5SbFoyVnkKKyAgICAgICAgUGdvSkNRa0pQSE4wY21sdVp6NTBaWGgwUEM5emRISnBibWMrQ2drSkNUd3ZZWEp5WVhrK0Nna0pQQzlrCisgICAgICAgIGFXTjBQZ29KUEM5a2FXTjBQZ29KUEd0bGVUNWhSbXh2WVhROEwydGxlVDRLQ1R4eVpXRnNQakF1TlR3dgorICAgICAgICBjbVZoYkQ0S0NUeHJaWGsrWVV4cGMzUThMMnRsZVQ0S0NUeGhjbkpoZVQ0S0NRazhjM1J5YVc1blBrRTgKKyAgICAgICAgTDNOMGNtbHVaejRLQ1FrOGMzUnlhVzVuUGtJOEwzTjBjbWx1Wno0S0NRazhhVzUwWldkbGNqNHhNand2CisgICAgICAgIGFXNTBaV2RsY2o0S0NRazhjbVZoYkQ0ek1pNDFQQzl5WldGc1Bnb0pDVHhoY25KaGVUNEtDUWtKUEdsdQorICAgICAgICBkR1ZuWlhJK01Ud3ZhVzUwWldkbGNqNEtDUWtKUEdsdWRHVm5aWEkrTWp3dmFXNTBaV2RsY2o0S0NRa0oKKyAgICAgICAgUEdsdWRHVm5aWEkrTXp3dmFXNTBaV2RsY2o0S0NRazhMMkZ5Y21GNVBnb0pQQzloY25KaGVUNEtDVHhyCisgICAgICAgIFpYaytZVTVsWjJGMGFYWmxRbWxuU1c1MFBDOXJaWGsrQ2drOGFXNTBaV2RsY2o0dE9EQXdNREF3TURBdworICAgICAgICBNREE4TDJsdWRHVm5aWEkrQ2drOGEyVjVQbUZPWldkaGRHbDJaVWx1ZER3dmEyVjVQZ29KUEdsdWRHVm4KKyAgICAgICAgWlhJK0xUVThMMmx1ZEdWblpYSStDZ2s4YTJWNVBtRlRkSEpwYm1jOEwydGxlVDRLQ1R4emRISnBibWMrCisgICAgICAgIFJHOXZaR0ZvUEM5emRISnBibWMrQ2drOGEyVjVQbUZ1Ulcxd2RIbEVhV04wUEM5clpYaytDZ2s4WkdsagorICAgICAgICBkQzgrQ2drOGEyVjVQbUZ1Ulcxd2RIbE1hWE4wUEM5clpYaytDZ2s4WVhKeVlYa3ZQZ29KUEd0bGVUNWgKKyAgICAgICAgYmtsdWREd3ZhMlY1UGdvSlBHbHVkR1ZuWlhJK056STRQQzlwYm5SbFoyVnlQZ29KUEd0bGVUNXVaWE4wCisgICAgICAgIFpXUkVZWFJoUEM5clpYaytDZ2s4WVhKeVlYaytDZ2tKUEdSaGRHRStDZ2tKVUVkNGRtUklUV2RpTWxsbgorICAgICAgICBXVzFzZFZsWVNqVkpSMlF4WW0xekswRkJSVU5CZW5oellqTlNla2xIT1cxSlIwcHdZbTFHZVdWVFFtNWsKKyAgICAgICAgVnpWeUNna0pVR2RCUWtGblRUaGlSemt3WTNsQ2RscHBRbWxoVnpWb1kyNXJaMW96Vm5WaGVqUkJRVkZKCisgICAgICAgIFJGQkhlSFprU0UxbllqSlpaMWx0YkhWWldFbzFDZ2tKU1Vka01XSnRjeXRCUVVWRFFYcDRjMkl6VW5wSgorICAgICAgICBSemx0U1VkS2NHSnRSbmxsVTBKdVpGYzFjbEJuUVVKQlowMDRZa2M1TUdONVFuWmFhVUpwQ2drSllWYzEKKyAgICAgICAgYUdOdWEyZGFNMVoxWVhvMFFVRlJTVVJRUjNoMlpFaE5aMkl5V1dkWmJXeDFXVmhLTlVsSFpERmliWE1yCisgICAgICAgIFFVRkZRMEY2ZUhOaU0xSjZDZ2tKU1VjNWJVbEhTbkJpYlVaNVpWTkNibVJYTlhKUVowRkNRV2ROT0dKSAorICAgICAgICBPVEJqZVVKMldtbENhV0ZYTldoamJtdG5Xak5XZFdGNk5FRkJVVWxFQ2drSlVFZDRkbVJJVFdkaU1sbG4KKyAgICAgICAgV1cxc2RWbFlTalZKUjJReFltMXpLMEZCUlVOQmR6MDlDZ2tKUEM5a1lYUmhQZ29KUEM5aGNuSmhlVDRLCisgICAgICAgIENUeHJaWGsrYzI5dFpVUmhkR0U4TDJ0bGVUNEtDVHhrWVhSaFBnb0pVRWRLY0dKdFJubGxVMEp1WkZjMQorICAgICAgICBjbEJuUFQwS0NUd3ZaR0YwWVQ0S0NUeHJaWGsrYzI5dFpVMXZjbVZFWVhSaFBDOXJaWGsrQ2drOFpHRjAKKyAgICAgICAgWVQ0S0NWQkhlSFprU0UxbllqSlpaMWx0YkhWWldFbzFTVWRrTVdKdGN5dEJRVVZEUVhwNGMySXpVbnBKCisgICAgICAgIFJ6bHRTVWRLY0dKdFJubGxVMEp1WkZjMWNsQm5RVUpCWjAwNENnbGlSemt3WTNsQ2RscHBRbWxoVnpWbworICAgICAgICBZMjVyWjFvelZuVmhlalJCUVZGSlJGQkhlSFprU0UxbllqSlpaMWx0YkhWWldFbzFTVWRrTVdKdGN5dEIKKyAgICAgICAgUVVWRFFYcDRjd29KWWpOU2VrbEhPVzFKUjBwd1ltMUdlV1ZUUW01a1Z6VnlVR2RCUWtGblRUaGlSemt3CisgICAgICAgIFkzbENkbHBwUW1saFZ6Vm9ZMjVyWjFvelZuVmhlalJCUVZGSlJGQkhlSFlLQ1dSSVRXZGlNbGxuV1cxcworICAgICAgICBkVmxZU2pWSlIyUXhZbTF6SzBGQlJVTkJlbmh6WWpOU2VrbEhPVzFKUjBwd1ltMUdlV1ZUUW01a1Z6VnkKKyAgICAgICAgVUdkQlFrRm5UVGhpUnprd0NnbGplVUoyV21sQ2FXRlhOV2hqYm10bldqTldkV0Y2TkVGQlVVbEVVRWQ0CisgICAgICAgIGRtUklUV2RpTWxsbldXMXNkVmxZU2pWSlIyUXhZbTF6SzBGQlJVTkJkejA5Q2drOEwyUmhkR0UrQ2drOAorICAgICAgICBhMlY1UHNPRlltVnVjbUZoUEM5clpYaytDZ2s4YzNSeWFXNW5QbFJvWVhRZ2QyRnpJR0VnZFc1cFkyOWsKKyAgICAgICAgWlNCclpYa3VQQzl6ZEhKcGJtYytDand2WkdsamRENEtQQzl3YkdsemRENEsnJycpLAorICAgIHBsaXN0bGliLkZNVF9CSU5BUlk6IGJpbmFzY2lpLmEyYl9iYXNlNjQoYicnJworICAgICAgICBZbkJzYVhOME1ERGZFQkFCQWdNRUJRWUhDQWtLQ3d3TkRnOFFFUklURkNncEx6QXhNak0wTlRjMk9GZGgKKyAgICAgICAgUW1sblNXNTBXR0ZDYVdkSmJuUXlWV0ZFWVhSbFZXRkVhV04wVm1GR2JHOWhkRlZoVEdsemRGOFFEMkZPCisgICAgICAgIFpXZGhkR2wyWlVKcFowbHVkRnhoVG1WbllYUnBkbVZKYm5SWFlWTjBjbWx1WjF0aGJrVnRjSFI1UkdsagorICAgICAgICBkRnRoYmtWdGNIUjVUR2x6ZEZWaGJrbHVkRnB1WlhOMFpXUkVZWFJoV0hOdmJXVkVZWFJoWEhOdmJXVk4KKyAgICAgICAgYjNKbFJHRjBZV2NBeFFCaUFHVUFiZ0J5QUdFQVlSTi8vLy8vLy8vLzFCUUFBQUFBQUFBQUFJQUFBQUFBCisgICAgICAgIEFBQXNNMEdjdVgzMEFBQUExUlVXRnhnWkdoc2NIUjViWVVaaGJITmxWbUZzZFdWYVlWUnlkV1ZXWVd4MQorICAgICAgICBaVjFoVlc1cFkyOWtaVlpoYkhWbFhXRnViM1JvWlhKVGRISnBibWRhWkdWbGNHVnlSR2xqZEFnSmF3Qk4KKyAgICAgICAgQU9RQWN3QnpBR2tBWndBc0FDQUFUUUJoQU45ZkVCVThhR1ZzYkc4Z0ppQW5hR2tuSUhSb1pYSmxJVDdUCisgICAgICAgIEh5QWhJaU1rVVdGUllsRmpFQkVqUUVCQUFBQUFBQUNqSlNZbkVBRVFBbFIwWlhoMEl6L2dBQUFBQUFBQQorICAgICAgICBwU29yTENNdFVVRlJRaEFNb3lVbUxoQURFLy8vLysxZm9PQUFFLy8vLy8vLy8vLzdWa1J2YjJSaGFOQ2cKKyAgICAgICAgRVFMWW9UWlBFUG84Ykc5MGN5QnZaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1CisgICAgICAgIFlYSjVJR2QxYm1zK0FBRUNBenhzYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdgorICAgICAgICBaaUJpYVc1aGNua2daM1Z1YXo0QUFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHMKKyAgICAgICAgYjNSeklHOW1JR0pwYm1GeWVTQm5kVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBCisgICAgICAgIEFRSURQR3h2ZEhNZ2IyWWdZbWx1WVhKNUlHZDFibXMrQUFFQ0F6eHNiM1J6SUc5bUlHSnBibUZ5ZVNCbgorICAgICAgICBkVzVyUGdBQkFnTThiRzkwY3lCdlppQmlhVzVoY25rZ1ozVnVhejRBQVFJRFRUeGlhVzVoY25rZ1ozVnUKKyAgICAgICAgYXo1ZkVCZFVhR0YwSUhkaGN5QmhJSFZ1YVdOdlpHVWdhMlY1TGdBSUFDc0FNd0E4QUVJQVNBQlBBRlVBCisgICAgICAgIFp3QjBBSHdBaUFDVUFKb0FwUUN1QUxzQXlnRFRBT1FBN1FENEFRUUJEd0VkQVNzQk5nRTNBVGdCVHdGbgorICAgICAgICBBVzRCY0FGeUFYUUJkZ0YvQVlNQmhRR0hBWXdCbFFHYkFaMEJud0doQWFVQnB3R3dBYmtCd0FIQkFjSUIKKyAgICAgICAgeFFISEFzUUMwZ0FBQUFBQUFBSUJBQUFBQUFBQUFEa0FBQUFBQUFBQUFBQUFBQUFBQUFMcycnJyksCit9CiAKIAogY2xhc3MgVGVzdFBsaXN0bGliKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTk5LDEyICsxMDAsMTYgQEAKICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgcGFzcwogCi0gICAgZGVmIF9jcmVhdGUoc2VsZik6CisgICAgZGVmIF9jcmVhdGUoc2VsZiwgZm10PU5vbmUpOgogICAgICAgICBwbCA9IGRpY3QoCiAgICAgICAgICAgICBhU3RyaW5nPSJEb29kYWgiLAogICAgICAgICAgICAgYUxpc3Q9WyJBIiwgIkIiLCAxMiwgMzIuNSwgWzEsIDIsIDNdXSwKICAgICAgICAgICAgIGFGbG9hdCA9IDAuNSwKICAgICAgICAgICAgIGFuSW50ID0gNzI4LAorICAgICAgICAgICAgYUJpZ0ludCA9IDIgKiogNjMgLSA0NCwKKyAgICAgICAgICAgIGFCaWdJbnQyID0gMiAqKiA2MyArIDQ0LAorICAgICAgICAgICAgYU5lZ2F0aXZlSW50ID0gLTUsCisgICAgICAgICAgICBhTmVnYXRpdmVCaWdJbnQgPSAtODAwMDAwMDAwMDAsCiAgICAgICAgICAgICBhRGljdD1kaWN0KAogICAgICAgICAgICAgICAgIGFub3RoZXJTdHJpbmc9IjxoZWxsbyAmICdoaScgdGhlcmUhPiIsCiAgICAgICAgICAgICAgICAgYVVuaWNvZGVWYWx1ZT0nTVx4ZTRzc2lnLCBNYVx4ZGYnLApAQCAtMTEyLDkgKzExNyw5IEBACiAgICAgICAgICAgICAgICAgYUZhbHNlVmFsdWU9RmFsc2UsCiAgICAgICAgICAgICAgICAgZGVlcGVyRGljdD1kaWN0KGE9MTcsIGI9MzIuNSwgYz1bMSwgMiwgInRleHQiXSksCiAgICAgICAgICAgICApLAotICAgICAgICAgICAgc29tZURhdGEgPSBwbGlzdGxpYi5EYXRhKGIiPGJpbmFyeSBndW5rPiIpLAotICAgICAgICAgICAgc29tZU1vcmVEYXRhID0gcGxpc3RsaWIuRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwKSwKLSAgICAgICAgICAgIG5lc3RlZERhdGEgPSBbcGxpc3RsaWIuRGF0YShiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwKV0sCisgICAgICAgICAgICBzb21lRGF0YSA9IGIiPGJpbmFyeSBndW5rPiIsCisgICAgICAgICAgICBzb21lTW9yZURhdGEgPSBiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwLAorICAgICAgICAgICAgbmVzdGVkRGF0YSA9IFtiIjxsb3RzIG9mIGJpbmFyeSBndW5rPlwwXDFcMlwzIiAqIDEwXSwKICAgICAgICAgICAgIGFEYXRlID0gZGF0ZXRpbWUuZGF0ZXRpbWUoMjAwNCwgMTAsIDI2LCAxMCwgMzMsIDMzKSwKICAgICAgICAgICAgIGFuRW1wdHlEaWN0ID0gZGljdCgpLAogICAgICAgICAgICAgYW5FbXB0eUxpc3QgPSBsaXN0KCkKQEAgLTEyOSw0OSArMTM0LDIyMCBAQAogCiAgICAgZGVmIHRlc3RfaW8oc2VsZik6CiAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgc3VwcG9ydC5URVNURk4pCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAnd2InKSBhcyBmcDoKKyAgICAgICAgICAgIHBsaXN0bGliLmR1bXAocGwsIGZwKQorCisgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3JiJykgYXMgZnA6CisgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKGZwKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSkKIAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgcGxpc3RsaWIuZHVtcCwgcGwsICdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBwbGlzdGxpYi5sb2FkLCAnZmlsZW5hbWUnKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF90eXBlKHNlbGYpOgorICAgICAgICBwbCA9IFsgb2JqZWN0KCkgXQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBsaXN0bGliLmR1bXBzLCBwbCwgZm10PWZtdCkKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgZm9yIHBsIGluIFswLCAyKio4LTEsIDIqKjgsIDIqKjE2LTEsIDIqKjE2LCAyKiozMi0xLCAyKiozMiwKKyAgICAgICAgICAgICAgICAgICAyKio2My0xLCAyKio2NC0xLCAxLCAtMioqNjNdOgorICAgICAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwbD1wbCwgZm10PWZtdCk6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZHMoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBsMiwgaW50KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsLCBwbDIpCisgICAgICAgICAgICAgICAgICAgIGRhdGEyID0gcGxpc3RsaWIuZHVtcHMocGwyLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGRhdGEyKQorCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICBmb3IgcGwgaW4gKDIgKiogNjQgKyAxLCAyICoqIDEyNy0xLCAtMioqNjQsIC0yICoqIDEyNyk6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocGw9cGwsIGZtdD1mbXQpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBwbGlzdGxpYi5kdW1wcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGwsIGZtdD1mbXQpCisKICAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKICAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBkYXRhID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwpCi0gICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhkYXRhKQorICAgICAgICBkYXRhID0gcGxpc3RsaWIuZHVtcHMocGwpCisgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SXNJbnN0YW5jZShwbCwgcGxpc3RsaWIuX0ludGVybmFsRGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQotICAgICAgICBkYXRhMiA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsMikKKyAgICAgICAgZGF0YTIgPSBwbGlzdGxpYi5kdW1wcyhwbDIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZGF0YTIpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9hcnJheShzZWxmKToKLSAgICAgICAgZGF0YSA9IFtbW1tbW1tbeyd0ZXN0JzogcGxpc3RsaWIuRGF0YShiJ2FhYWFhYScpfV1dXV1dXV1dCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKGRhdGEpKSwgZGF0YSkKKyAgICAgICAgZGF0YSA9IFtbW1tbW1tbeyd0ZXN0JzogYidhYWFhYWEnfV1dXV1dXV1dCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHMoZGF0YSkpLCBkYXRhKQogCiAgICAgZGVmIHRlc3RfaW5kZW50YXRpb25fZGljdChzZWxmKToKLSAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IHsnMyc6IHsnNCc6IHsnNSc6IHsnNic6IHsnNyc6IHsnOCc6IHsnOSc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX19fX19fX19fQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcyhwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhkYXRhKSksIGRhdGEpCisgICAgICAgIGRhdGEgPSB7JzEnOiB7JzInOiB7JzMnOiB7JzQnOiB7JzUnOiB7JzYnOiB7JzcnOiB7JzgnOiB7JzknOiBiJ2FhYWFhYSd9fX19fX19fX0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyhkYXRhKSksIGRhdGEpCiAKICAgICBkZWYgdGVzdF9pbmRlbnRhdGlvbl9kaWN0X21peChzZWxmKToKLSAgICAgICAgZGF0YSA9IHsnMSc6IHsnMic6IFt7JzMnOiBbW1tbW3sndGVzdCc6IHBsaXN0bGliLkRhdGEoYidhYWFhYWEnKX1dXV1dXX1dfX0KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMoZGF0YSkpLCBkYXRhKQorICAgICAgICBkYXRhID0geycxJzogeycyJzogW3snMyc6IFtbW1tbeyd0ZXN0JzogYidhYWFhYWEnfV1dXV1dfV19fQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLmxvYWRzKHBsaXN0bGliLmR1bXBzKGRhdGEpKSwgZGF0YSkKIAogICAgIGRlZiB0ZXN0X2FwcGxlZm9ybWF0dGluZyhzZWxmKToKLSAgICAgICAgcGwgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoVEVTVERBVEEpCi0gICAgICAgIGRhdGEgPSBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcyhwbCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBURVNUREFUQSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICBmb3IgdXNlX2J1aWx0aW5fdHlwZXMgaW4gKFRydWUsIEZhbHNlKToKKyAgICAgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCwgdXNlX2J1aWx0aW5fdHlwZXM9dXNlX2J1aWx0aW5fdHlwZXMpOgorICAgICAgICAgICAgICAgICAgICBwbCA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0sCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcykKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIFRFU1REQVRBW2ZtdF0sCisgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorCiAKICAgICBkZWYgdGVzdF9hcHBsZWZvcm1hdHRpbmdmcm9tbGl0ZXJhbChzZWxmKToKLSAgICAgICAgcGwgPSBzZWxmLl9jcmVhdGUoKQotICAgICAgICBwbDIgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMoVEVTVERBVEEpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGljdChwbCksIGRpY3QocGwyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCisgICAgICAgIGZvciBmbXQgaW4gQUxMX0ZPUk1BVFM6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10KToKKyAgICAgICAgICAgICAgICBwbCA9IHNlbGYuX2NyZWF0ZShmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0sIGZtdD1mbXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpLAorICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKFRFU1REQVRBW2ZtdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpLAorICAgICAgICAgICAgICAgICAgICAiZ2VuZXJhdGVkIGRhdGEgd2FzIG5vdCBpZGVudGljYWwgdG8gQXBwbGUncyBvdXRwdXQiKQogCiAgICAgZGVmIHRlc3RfYnl0ZXNpbyhzZWxmKToKLSAgICAgICAgZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTwotICAgICAgICBiID0gQnl0ZXNJTygpCi0gICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKCkKLSAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbCwgYikKLSAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0KEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgYiA9IEJ5dGVzSU8oKQorICAgICAgICAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKGZtdD1mbXQpCisgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcChwbCwgYiwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkKEJ5dGVzSU8oYi5nZXR2YWx1ZSgpKSwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3QocGwpLCBkaWN0KHBsMikpCisgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZChCeXRlc0lPKGIuZ2V0dmFsdWUoKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorCisgICAgZGVmIHRlc3Rfa2V5c29ydF9ieXRlc2lvKHNlbGYpOgorICAgICAgICBwbCA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgcGxbJ2InXSA9IDEKKyAgICAgICAgcGxbJ2EnXSA9IDIKKyAgICAgICAgcGxbJ2MnXSA9IDMKKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgZm9yIHNvcnRfa2V5cyBpbiAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQsIHNvcnRfa2V5cz1zb3J0X2tleXMpOgorICAgICAgICAgICAgICAgICAgICBiID0gQnl0ZXNJTygpCisKKyAgICAgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcChwbCwgYiwgZm10PWZtdCwgc29ydF9rZXlzPXNvcnRfa2V5cykKKyAgICAgICAgICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIubG9hZChCeXRlc0lPKGIuZ2V0dmFsdWUoKSksCisgICAgICAgICAgICAgICAgICAgICAgICBkaWN0X3R5cGU9Y29sbGVjdGlvbnMuT3JkZXJlZERpY3QpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICAgICAgICAgICAgICBpZiBzb3J0X2tleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYScsICdiJywgJ2MnXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwbDIua2V5cygpKSwgWydiJywgJ2EnLCAnYyddKQorCisgICAgZGVmIHRlc3Rfa2V5c29ydChzZWxmKToKKyAgICAgICAgcGwgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHBsWydiJ10gPSAxCisgICAgICAgIHBsWydhJ10gPSAyCisgICAgICAgIHBsWydjJ10gPSAzCisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIGZvciBzb3J0X2tleXMgaW4gKEZhbHNlLCBUcnVlKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmbXQ9Zm10LCBzb3J0X2tleXM9c29ydF9rZXlzKToKKyAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10LCBzb3J0X2tleXM9c29ydF9rZXlzKQorICAgICAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhLCBkaWN0X3R5cGU9Y29sbGVjdGlvbnMuT3JkZXJlZERpY3QpCisKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorICAgICAgICAgICAgICAgICAgICBpZiBzb3J0X2tleXM6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGwyLmtleXMoKSksIFsnYScsICdiJywgJ2MnXSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwbDIua2V5cygpKSwgWydiJywgJ2EnLCAnYyddKQorCisgICAgZGVmIHRlc3Rfa2V5c19ub19zdHJpbmcoc2VsZik6CisgICAgICAgIHBsID0geyA0MjogJ2FOdW1iZXInIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwbGlzdGxpYi5kdW1wcywgcGwsIGZtdD1mbXQpCisKKyAgICAgICAgICAgICAgICBiID0gQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwbGlzdGxpYi5kdW1wLCBwbCwgYiwgZm10PWZtdCkKKworICAgIGRlZiB0ZXN0X3NraXBrZXlzKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgIDQyOiAnYU51bWJlcicsCisgICAgICAgICAgICAnc25ha2UnOiAnYVdvcmQnLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcygKKyAgICAgICAgICAgICAgICAgICAgcGwsIGZtdD1mbXQsIHNraXBrZXlzPVRydWUsIHNvcnRfa2V5cz1GYWxzZSkKKworICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsnc25ha2UnOiAnYVdvcmQnfSkKKworICAgICAgICAgICAgICAgIGZwID0gQnl0ZXNJTygpCisgICAgICAgICAgICAgICAgcGxpc3RsaWIuZHVtcCgKKyAgICAgICAgICAgICAgICAgICAgcGwsIGZwLCBmbXQ9Zm10LCBza2lwa2V5cz1UcnVlLCBzb3J0X2tleXM9RmFsc2UpCisgICAgICAgICAgICAgICAgZGF0YSA9IGZwLmdldHZhbHVlKCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhmcC5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7J3NuYWtlJzogJ2FXb3JkJ30pCisKKyAgICBkZWYgdGVzdF90dXBsZV9tZW1iZXJzKHNlbGYpOgorICAgICAgICBwbCA9IHsKKyAgICAgICAgICAgICdmaXJzdCc6ICgxLCAyKSwKKyAgICAgICAgICAgICdzZWNvbmQnOiAoMSwgMiksCisgICAgICAgICAgICAndGhpcmQnOiAoMywgNCksCisgICAgICAgIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsKKyAgICAgICAgICAgICAgICAgICAgJ2ZpcnN0JzogWzEsIDJdLAorICAgICAgICAgICAgICAgICAgICAnc2Vjb25kJzogWzEsIDJdLAorICAgICAgICAgICAgICAgICAgICAndGhpcmQnOiBbMywgNF0sCisgICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHBsMlsnZmlyc3QnXSwgcGwyWydzZWNvbmQnXSkKKworICAgIGRlZiB0ZXN0X2xpc3RfbWVtYmVycyhzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICAnZmlyc3QnOiBbMSwgMl0sCisgICAgICAgICAgICAnc2Vjb25kJzogWzEsIDJdLAorICAgICAgICAgICAgJ3RoaXJkJzogWzMsIDRdLAorICAgICAgICB9CisKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBwbGlzdGxpYi5kdW1wcyhwbCwgZm10PWZtdCkKKyAgICAgICAgICAgICAgICBwbDIgPSBwbGlzdGxpYi5sb2FkcyhkYXRhKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGwyLCB7CisgICAgICAgICAgICAgICAgICAgICdmaXJzdCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3NlY29uZCc6IFsxLCAyXSwKKyAgICAgICAgICAgICAgICAgICAgJ3RoaXJkJzogWzMsIDRdLAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChwbDJbJ2ZpcnN0J10sIHBsMlsnc2Vjb25kJ10pCisKKyAgICBkZWYgdGVzdF9kaWN0X21lbWJlcnMoc2VsZik6CisgICAgICAgIHBsID0geworICAgICAgICAgICAgJ2ZpcnN0JzogeydhJzogMX0sCisgICAgICAgICAgICAnc2Vjb25kJzogeydhJzogMX0sCisgICAgICAgICAgICAndGhpcmQnOiB7J2InOiAyIH0sCisgICAgICAgIH0KKworICAgICAgICBmb3IgZm10IGluIEFMTF9GT1JNQVRTOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm10PWZtdCk6CisgICAgICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLmR1bXBzKHBsLCBmbXQ9Zm10KQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHsKKyAgICAgICAgICAgICAgICAgICAgJ2ZpcnN0JzogeydhJzogMX0sCisgICAgICAgICAgICAgICAgICAgICdzZWNvbmQnOiB7J2EnOiAxfSwKKyAgICAgICAgICAgICAgICAgICAgJ3RoaXJkJzogeydiJzogMiB9LAorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdChwbDJbJ2ZpcnN0J10sIHBsMlsnc2Vjb25kJ10pCiAKICAgICBkZWYgdGVzdF9jb250cm9sY2hhcmFjdGVycyhzZWxmKToKICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTI4KToKQEAgLTE3OSwyNSArMzU1LDI3IEBACiAgICAgICAgICAgICB0ZXN0U3RyaW5nID0gInN0cmluZyBjb250YWluaW5nICVzIiAlIGMKICAgICAgICAgICAgIGlmIGkgPj0gMzIgb3IgYyBpbiAiXHJcblx0IjoKICAgICAgICAgICAgICAgICAjIFxyLCBcbiBhbmQgXHQgYXJlIHRoZSBvbmx5IGxlZ2FsIGNvbnRyb2wgY2hhcnMgaW4gWE1MCi0gICAgICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXModGVzdFN0cmluZykKKyAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wcyh0ZXN0U3RyaW5nLCBmbXQ9cGxpc3RsaWIuRk1UX1hNTCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0VG9CeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGlzdGxpYi5kdW1wcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0U3RyaW5nKQogCiAgICAgZGVmIHRlc3Rfbm9uZGljdHJvb3Qoc2VsZik6Ci0gICAgICAgIHRlc3QxID0gImFiYyIKLSAgICAgICAgdGVzdDIgPSBbMSwgMiwgMywgImFiYyJdCi0gICAgICAgIHJlc3VsdDEgPSBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMocGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXModGVzdDEpKQotICAgICAgICByZXN1bHQyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHRlc3QyKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MSwgcmVzdWx0MSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MiwgcmVzdWx0MikKKyAgICAgICAgZm9yIGZtdCBpbiBBTExfRk9STUFUUzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZtdD1mbXQpOgorICAgICAgICAgICAgICAgIHRlc3QxID0gImFiYyIKKyAgICAgICAgICAgICAgICB0ZXN0MiA9IFsxLCAyLCAzLCAiYWJjIl0KKyAgICAgICAgICAgICAgICByZXN1bHQxID0gcGxpc3RsaWIubG9hZHMocGxpc3RsaWIuZHVtcHModGVzdDEsIGZtdD1mbXQpKQorICAgICAgICAgICAgICAgIHJlc3VsdDIgPSBwbGlzdGxpYi5sb2FkcyhwbGlzdGxpYi5kdW1wcyh0ZXN0MiwgZm10PWZtdCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXN0MSwgcmVzdWx0MSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3QyLCByZXN1bHQyKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZGFycmF5KHNlbGYpOgogICAgICAgICBmb3IgaSBpbiBbIjxrZXk+a2V5IGluc2lkZSBhbiBhcnJheTwva2V5PiIsCiAgICAgICAgICAgICAgICAgICAiPGtleT5rZXkgaW5zaWRlIGFuIGFycmF5Mjwva2V5PjxyZWFsPjM8L3JlYWw+IiwKICAgICAgICAgICAgICAgICAgICI8dHJ1ZS8+PGtleT5rZXkgaW5zaWRlIGFuIGFycmF5Mzwva2V5PiJdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzLAorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjxwbGlzdD48YXJyYXk+JXM8L2FycmF5PjwvcGxpc3Q+IiVpKS5lbmNvZGUoKSkKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRkaWN0KHNlbGYpOgpAQCAtMjA2LDIyICszODQsMTQyIEBACiAgICAgICAgICAgICAgICAgICAiPHN0cmluZz5taXNzaW5nIGtleTwvc3RyaW5nPiIsCiAgICAgICAgICAgICAgICAgICAiPGtleT5rMTwva2V5PjxzdHJpbmc+djE8L3N0cmluZz48cmVhbD41LjM8L3JlYWw+IgogICAgICAgICAgICAgICAgICAgIjxrZXk+azE8L2tleT48a2V5PmsyPC9rZXk+PHN0cmluZz5kb3VibGUga2V5PC9zdHJpbmc+Il06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5sb2FkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiPHBsaXN0PjxkaWN0PiVzPC9kaWN0PjwvcGxpc3Q+IiVpKS5lbmNvZGUoKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCI8cGxpc3Q+PGFycmF5PjxkaWN0PiVzPC9kaWN0PjwvYXJyYXk+PC9wbGlzdD4iJWkpLmVuY29kZSgpKQogCiAgICAgZGVmIHRlc3RfaW52YWxpZGludGVnZXIoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLnJlYWRQbGlzdEZyb21CeXRlcywKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcGxpc3RsaWIubG9hZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiPHBsaXN0PjxpbnRlZ2VyPm5vdCBpbnRlZ2VyPC9pbnRlZ2VyPjwvcGxpc3Q+IikKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRyZWFsKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwbGlzdGxpYi5yZWFkUGxpc3RGcm9tQnl0ZXMsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBsaXN0bGliLmxvYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiIjxwbGlzdD48aW50ZWdlcj5ub3QgcmVhbDwvaW50ZWdlcj48L3BsaXN0PiIpCiAKKyAgICBkZWYgdGVzdF94bWxfZW5jb2RpbmdzKHNlbGYpOgorICAgICAgICBiYXNlID0gVEVTVERBVEFbcGxpc3RsaWIuRk1UX1hNTF0KKworICAgICAgICBmb3IgeG1sX2VuY29kaW5nLCBlbmNvZGluZywgYm9tIGluIFsKKyAgICAgICAgICAgICAgICAgICAgKGIndXRmLTgnLCAndXRmLTgnLCBjb2RlY3MuQk9NX1VURjgpLAorICAgICAgICAgICAgICAgICAgICAoYid1dGYtMTYnLCAndXRmLTE2LWxlJywgY29kZWNzLkJPTV9VVEYxNl9MRSksCisgICAgICAgICAgICAgICAgICAgIChiJ3V0Zi0xNicsICd1dGYtMTYtYmUnLCBjb2RlY3MuQk9NX1VURjE2X0JFKSwKKyAgICAgICAgICAgICAgICAgICAgIyBFeHBhdCBkb2VzIG5vdCBzdXBwb3J0IFVURi0zMgorICAgICAgICAgICAgICAgICAgICAjKGIndXRmLTMyJywgJ3V0Zi0zMi1sZScsIGNvZGVjcy5CT01fVVRGMzJfTEUpLAorICAgICAgICAgICAgICAgICAgICAjKGIndXRmLTMyJywgJ3V0Zi0zMi1iZScsIGNvZGVjcy5CT01fVVRGMzJfQkUpLAorICAgICAgICAgICAgICAgIF06CisKKyAgICAgICAgICAgIHBsID0gc2VsZi5fY3JlYXRlKGZtdD1wbGlzdGxpYi5GTVRfWE1MKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jb2Rpbmc9ZW5jb2RpbmcpOgorICAgICAgICAgICAgICAgIGRhdGEgPSBiYXNlLnJlcGxhY2UoYidVVEYtOCcsIHhtbF9lbmNvZGluZykKKyAgICAgICAgICAgICAgICBkYXRhID0gYm9tICsgZGF0YS5kZWNvZGUoJ3V0Zi04JykuZW5jb2RlKGVuY29kaW5nKQorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLmxvYWRzKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWN0KHBsKSwgZGljdChwbDIpKQorCisgICAgZGVmIHRlc3Rfbm9uc3RhbmRhcmRfcmVmc19zaXplKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMTUzODogUmVmcyBhbmQgb2Zmc2V0cyBhcmUgMjQtYml0IGludGVnZXJzCisgICAgICAgIGRhdGEgPSAoYidicGxpc3QwMCcKKyAgICAgICAgICAgICAgICBiJ1x4ZDFceDAwXHgwMFx4MDFceDAwXHgwMFx4MDJRYVFiJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDA4XHgwMFx4MDBceDBmXHgwMFx4MDBceDExJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwM1x4MDMnCisgICAgICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMycKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MTMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsaXN0bGliLmxvYWRzKGRhdGEpLCB7J2EnOiAnYid9KQorCisKK2NsYXNzIFRlc3RQbGlzdGxpYkRlcHJlY2F0ZWQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2lvX2RlcHJlY2F0ZWQoc2VsZik6CisgICAgICAgIHBsX2luID0geworICAgICAgICAgICAgJ2tleSc6IDQyLAorICAgICAgICAgICAgJ3N1Yic6IHsKKyAgICAgICAgICAgICAgICAna2V5JzogOSwKKyAgICAgICAgICAgICAgICAnYWx0JzogJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAnZGF0YSc6IGInYnVmZmVyJywKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBwbF9vdXQgPSBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KHsKKyAgICAgICAgICAgICdrZXknOiA0MiwKKyAgICAgICAgICAgICdzdWInOiBwbGlzdGxpYi5fSW50ZXJuYWxEaWN0KHsKKyAgICAgICAgICAgICAgICAna2V5JzogOSwKKyAgICAgICAgICAgICAgICAnYWx0JzogJ3ZhbHVlJywKKyAgICAgICAgICAgICAgICAnZGF0YSc6IHBsaXN0bGliLkRhdGEoYididWZmZXInKSwKKyAgICAgICAgICAgIH0pCisgICAgICAgIH0pCisKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBwbGlzdGxpYi53cml0ZVBsaXN0KHBsX2luLCBzdXBwb3J0LlRFU1RGTikKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChzdXBwb3J0LlRFU1RGTikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsX291dCwgcGwyKQorCisgICAgICAgIG9zLnVubGluayhzdXBwb3J0LlRFU1RGTikKKworICAgICAgICB3aXRoIG9wZW4oc3VwcG9ydC5URVNURk4sICd3YicpIGFzIGZwOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICAgICAgcGxpc3RsaWIud3JpdGVQbGlzdChwbF9pbiwgZnApCisKKyAgICAgICAgd2l0aCBvcGVuKHN1cHBvcnQuVEVTVEZOLCAncmInKSBhcyBmcDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIHBsMiA9IHBsaXN0bGliLnJlYWRQbGlzdChmcCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBsX291dCwgcGwyKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZGVwcmVjYXRlZChzZWxmKToKKyAgICAgICAgcGwgPSB7CisgICAgICAgICAgICAna2V5JzogNDIsCisgICAgICAgICAgICAnc3ViJzogeworICAgICAgICAgICAgICAgICdrZXknOiA5LAorICAgICAgICAgICAgICAgICdhbHQnOiAndmFsdWUnLAorICAgICAgICAgICAgICAgICdkYXRhJzogYididWZmZXInLAorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgZGF0YSA9IHBsaXN0bGliLndyaXRlUGxpc3RUb0J5dGVzKHBsKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgcGwyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKGRhdGEpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHBsMiwgcGxpc3RsaWIuX0ludGVybmFsRGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwbDIsIHBsaXN0bGliLl9JbnRlcm5hbERpY3QoCisgICAgICAgICAgICBrZXk9NDIsCisgICAgICAgICAgICBzdWI9cGxpc3RsaWIuX0ludGVybmFsRGljdCgKKyAgICAgICAgICAgICAgICBrZXk9OSwKKyAgICAgICAgICAgICAgICBhbHQ9J3ZhbHVlJywKKyAgICAgICAgICAgICAgICBkYXRhPXBsaXN0bGliLkRhdGEoYididWZmZXInKSwKKyAgICAgICAgICAgICkKKyAgICAgICAgKSkKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgIGRhdGEyID0gcGxpc3RsaWIud3JpdGVQbGlzdFRvQnl0ZXMocGwyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGRhdGEyKQorCisgICAgZGVmIHRlc3RfZGF0YW9iamVjdF9kZXByZWNhdGVkKHNlbGYpOgorICAgICAgICBpbl9kYXRhID0geyAna2V5JzogcGxpc3RsaWIuRGF0YShiJ2hlbGxvJykgfQorICAgICAgICBvdXRfZGF0YSA9IHsgJ2tleSc6IGInaGVsbG8nIH0KKworICAgICAgICBidWYgPSBwbGlzdGxpYi5kdW1wcyhpbl9kYXRhKQorCisgICAgICAgIGN1ciA9IHBsaXN0bGliLmxvYWRzKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXIsIG91dF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGN1ciwgaW5fZGF0YSkKKworICAgICAgICBjdXIgPSBwbGlzdGxpYi5sb2FkcyhidWYsIHVzZV9idWlsdGluX3R5cGVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGN1ciwgb3V0X2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3VyLCBpbl9kYXRhKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgY3VyID0gcGxpc3RsaWIucmVhZFBsaXN0RnJvbUJ5dGVzKGJ1ZikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChjdXIsIG91dF9kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN1ciwgaW5fZGF0YSkKKwogCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFBsaXN0bGliKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQbGlzdGxpYiwgVGVzdFBsaXN0bGliRGVwcmVjYXRlZCkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb2xsLnB5IGIvTGliL3Rlc3QvdGVzdF9wb2xsLnB5CmluZGV4IGEwN2E3MTkuLmEwYTMzMmIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcG9sbC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BvbGwucHkKQEAgLTEsNiArMSw3IEBACiAjIFRlc3QgY2FzZSBmb3IgdGhlIG9zLnBvbGwoKSBmdW5jdGlvbgogCiBpbXBvcnQgb3MKK2ltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgc2VsZWN0CiB0cnk6CkBAIC0xNCw3ICsxNSw3IEBACiB0cnk6CiAgICAgc2VsZWN0LnBvbGwKIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LnBvbGwgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF9wb2xsIikKKyAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgic2VsZWN0LnBvbGwgbm90IGRlZmluZWQiKQogCiAKIGRlZiBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBmbGFnKToKQEAgLTc1LDEzICs3NiwxMSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmcywgW01TR10gKiBOVU1fUElQRVMpCiAKLSAgICBkZWYgcG9sbF91bml0X3Rlc3RzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3BvbGxfdW5pdF90ZXN0cyhzZWxmKToKICAgICAgICAgIyByZXR1cm5zIE5WQUwgZm9yIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yCi0gICAgICAgIEZEID0gNDIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3MuY2xvc2UoRkQpCi0gICAgICAgIGV4Y2VwdCBPU0Vycm9yOgotICAgICAgICAgICAgcGFzcworICAgICAgICBGRCwgdyA9IG9zLnBpcGUoKQorICAgICAgICBvcy5jbG9zZShGRCkKKyAgICAgICAgb3MuY2xvc2UodykKICAgICAgICAgcCA9IHNlbGVjdC5wb2xsKCkKICAgICAgICAgcC5yZWdpc3RlcihGRCkKICAgICAgICAgciA9IHAucG9sbCgpCkBAIC0xMjQsNyArMTIzLDkgQEAKIAogICAgIGRlZiB0ZXN0X3BvbGwyKHNlbGYpOgogICAgICAgICBjbWQgPSAnZm9yIGkgaW4gMCAxIDIgMyA0IDUgNiA3IDggOTsgZG8gZWNobyB0ZXN0aW5nLi4uOyBzbGVlcCAxOyBkb25lJwotICAgICAgICBwID0gb3MucG9wZW4oY21kLCAncicpCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2l6ZT0wKQorICAgICAgICBwID0gcHJvYy5zdGRvdXQKICAgICAgICAgcG9sbHN0ZXIgPSBzZWxlY3QucG9sbCgpCiAgICAgICAgIHBvbGxzdGVyLnJlZ2lzdGVyKCBwLCBzZWxlY3QuUE9MTElOICkKICAgICAgICAgZm9yIHRvdXQgaW4gKDAsIDEwMDAsIDIwMDAsIDQwMDAsIDgwMDAsIDE2MDAwKSArICgtMSwpKjEwOgpAQCAtMTM0LDcgKzEzNSw3IEBACiAgICAgICAgICAgICBmZCwgZmxhZ3MgPSBmZGxpc3RbMF0KICAgICAgICAgICAgIGlmIGZsYWdzICYgc2VsZWN0LlBPTExIVVA6CiAgICAgICAgICAgICAgICAgbGluZSA9IHAucmVhZGxpbmUoKQotICAgICAgICAgICAgICAgIGlmIGxpbmUgIT0gIiI6CisgICAgICAgICAgICAgICAgaWYgbGluZSAhPSBiIiI6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyb3I6IHBpcGUgc2VlbXMgdG8gYmUgY2xvc2VkLCBidXQgc3RpbGwgcmV0dXJucyBkYXRhJykKICAgICAgICAgICAgICAgICBjb250aW51ZQogCkBAIC0xNDIsNiArMTQzLDcgQEAKICAgICAgICAgICAgICAgICBsaW5lID0gcC5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lLCBiJ3Rlc3RpbmcuLi5cbicpCiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdVbmV4cGVjdGVkIHJldHVybiB2YWx1ZSBmcm9tIHNlbGVjdC5wb2xsOiAlcycgJSBmZGxpc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3Blbi5weQppbmRleCAyMjVlNDFmLi4xMTZiM2RkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BvcGVuLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcG9wZW4ucHkKQEAgLTU3LDYgKzU3LDEwIEBACiAgICAgICAgIHdpdGggb3MucG9wZW4oImVjaG8gaGVsbG8iKSBhcyBmOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGYpLCBbImhlbGxvXG4iXSkKIAorICAgIGRlZiB0ZXN0X2tleXdvcmRzKHNlbGYpOgorICAgICAgICB3aXRoIG9zLnBvcGVuKGNtZD0iZXhpdCAwIiwgbW9kZT0idyIsIGJ1ZmZlcmluZz0tMSk6CisgICAgICAgICAgICBwYXNzCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQb3BlblRlc3QpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9wbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKaW5kZXggNTgwOWJlNi4uOGEzYzlmNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3BsaWIucHkKQEAgLTE4LDYgKzE4LDE2IEBACiBIT1NUID0gdGVzdF9zdXBwb3J0LkhPU1QKIFBPUlQgPSAwCiAKK1NVUFBPUlRTX1NTTCA9IEZhbHNlCitpZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6CisgICAgaW1wb3J0IHNzbAorCisgICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQorICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydDMucGVtIikKKyAgICBDQUZJTEUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSBvciBvcy5jdXJkaXIsICJweWNhY2VydC5wZW0iKQorCityZXF1aXJlc19zc2wgPSBza2lwVW5sZXNzKFNVUFBPUlRTX1NTTCwgJ1NTTCBub3Qgc3VwcG9ydGVkJykKKwogIyB0aGUgZHVtbXkgZGF0YSByZXR1cm5lZCBieSBzZXJ2ZXIgd2hlbiBMSVNUIGFuZCBSRVRSIGNvbW1hbmRzIGFyZSBpc3N1ZWQKIExJU1RfUkVTUCA9IGInMSAxXHJcbjIgMlxyXG4zIDNcclxuNCA0XHJcbjUgNVxyXG4uXHJcbicKIFJFVFJfUkVTUCA9IGIiIiJGcm9tOiBwb3N0bWFzdGVyQHB5dGhvbi5vcmdcCkBAIC0zMywxMSArNDMsMTUgQEAKIAogY2xhc3MgRHVtbXlQT1AzSGFuZGxlcihhc3luY2hhdC5hc3luY19jaGF0KToKIAorICAgIENBUEFTID0geydVSURMJzogW10sICdJTVBMRU1FTlRBVElPTic6IFsncHl0aG9uLXRlc3RsaWItcG9wLXNlcnZlciddfQorCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbm4pOgogICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0Ll9faW5pdF9fKHNlbGYsIGNvbm4pCiAgICAgICAgIHNlbGYuc2V0X3Rlcm1pbmF0b3IoYiJcclxuIikKICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQogICAgICAgICBzZWxmLnB1c2goJytPSyBkdW1teSBwb3AzIHNlcnZlciByZWFkeS4gPHRpbWVzdGFtcD4nKQorICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBGYWxzZQorICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IEZhbHNlCiAKICAgICBkZWYgY29sbGVjdF9pbmNvbWluZ19kYXRhKHNlbGYsIGRhdGEpOgogICAgICAgICBzZWxmLmluX2J1ZmZlci5hcHBlbmQoZGF0YSkKQEAgLTExMiw2ICsxMjYsNjUgQEAKICAgICAgICAgc2VsZi5wdXNoKCcrT0sgY2xvc2luZy4nKQogICAgICAgICBzZWxmLmNsb3NlX3doZW5fZG9uZSgpCiAKKyAgICBkZWYgX2dldF9jYXBhcyhzZWxmKToKKyAgICAgICAgX2NhcGFzID0gZGljdChzZWxmLkNBUEFTKQorICAgICAgICBpZiBub3Qgc2VsZi50bHNfYWN0aXZlIGFuZCBTVVBQT1JUU19TU0w6CisgICAgICAgICAgICBfY2FwYXNbJ1NUTFMnXSA9IFtdCisgICAgICAgIHJldHVybiBfY2FwYXMKKworICAgIGRlZiBjbWRfY2FwYShzZWxmLCBhcmcpOgorICAgICAgICBzZWxmLnB1c2goJytPSyBDYXBhYmlsaXR5IGxpc3QgZm9sbG93cycpCisgICAgICAgIGlmIHNlbGYuX2dldF9jYXBhcygpOgorICAgICAgICAgICAgZm9yIGNhcCwgcGFyYW1zIGluIHNlbGYuX2dldF9jYXBhcygpLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgX2xuID0gW2NhcF0KKyAgICAgICAgICAgICAgICBpZiBwYXJhbXM6CisgICAgICAgICAgICAgICAgICAgIF9sbi5leHRlbmQocGFyYW1zKQorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnICcuam9pbihfbG4pKQorICAgICAgICBzZWxmLnB1c2goJy4nKQorCisgICAgaWYgU1VQUE9SVFNfU1NMOgorCisgICAgICAgIGRlZiBjbWRfc3RscyhzZWxmLCBhcmcpOgorICAgICAgICAgICAgaWYgc2VsZi50bHNfYWN0aXZlIGlzIEZhbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicpCisgICAgICAgICAgICAgICAgdGxzX3NvY2sgPSBzc2wud3JhcF9zb2NrZXQoc2VsZi5zb2NrZXQsIGNlcnRmaWxlPUNFUlRGSUxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9zaWRlPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9faGFuZHNoYWtlX29uX2Nvbm5lY3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcHJlc3NfcmFnZ2VkX2VvZnM9RmFsc2UpCisgICAgICAgICAgICAgICAgc2VsZi5kZWxfY2hhbm5lbCgpCisgICAgICAgICAgICAgICAgc2VsZi5zZXRfc29ja2V0KHRsc19zb2NrKQorICAgICAgICAgICAgICAgIHNlbGYudGxzX2FjdGl2ZSA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IFRydWUKKyAgICAgICAgICAgICAgICBzZWxmLmluX2J1ZmZlciA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5fZG9fdGxzX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucHVzaCgnLUVSUiBDb21tYW5kIG5vdCBwZXJtaXR0ZWQgd2hlbiBUTFMgYWN0aXZlJykKKworICAgICAgICBkZWYgX2RvX3Rsc19oYW5kc2hha2Uoc2VsZik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdID09IGVycm5vLkVDT05OQUJPUlRFRDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi50bHNfYWN0aXZlID0gVHJ1ZQorICAgICAgICAgICAgICAgIHNlbGYudGxzX3N0YXJ0aW5nID0gRmFsc2UKKworICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLnRsc19zdGFydGluZzoKKyAgICAgICAgICAgICAgICBzZWxmLl9kb190bHNfaGFuZHNoYWtlKCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBhc3luY2hhdC5hc3luY19jaGF0LmhhbmRsZV9yZWFkKHNlbGYpCisgICAgICAgICAgICAgICAgZXhjZXB0IHNzbC5TU0xFT0ZFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVfY2xvc2UoKQogCiBjbGFzcyBEdW1teVBPUDNTZXJ2ZXIoYXN5bmNvcmUuZGlzcGF0Y2hlciwgdGhyZWFkaW5nLlRocmVhZCk6CiAKQEAgLTIzNiwxOSArMzA5LDQyIEBACiAgICAgICAgIHNlbGYuY2xpZW50LnVpZGwoKQogICAgICAgICBzZWxmLmNsaWVudC51aWRsKCdmb28nKQogCisgICAgZGVmIHRlc3RfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJ0lNUExFTUVOVEFUSU9OJyBpbiBjYXBhLmtleXMoKSkKKwogICAgIGRlZiB0ZXN0X3F1aXQoc2VsZik6CiAgICAgICAgIHJlc3AgPSBzZWxmLmNsaWVudC5xdWl0KCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3ApCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LnNvY2spCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHNlbGYuY2xpZW50LmZpbGUpCiAKKyAgICBAcmVxdWlyZXNfc3NsCisgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnU1RMUycgaW4gY2FwYS5rZXlzKCkpCiAKLVNVUFBPUlRTX1NTTCA9IEZhbHNlCi1pZiBoYXNhdHRyKHBvcGxpYiwgJ1BPUDNfU1NMJyk6Ci0gICAgaW1wb3J0IHNzbAorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzKHNlbGYpOgorICAgICAgICBleHBlY3RlZCA9IGInK09LIEJlZ2luIFRMUyBuZWdvdGlhdGlvbicKKyAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3AsIGV4cGVjdGVkKQogCi0gICAgU1VQUE9SVFNfU1NMID0gVHJ1ZQotICAgIENFUlRGSUxFID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykgb3Igb3MuY3VyZGlyLCAia2V5Y2VydC5wZW0iKQorICAgIEByZXF1aXJlc19zc2wKKyAgICBkZWYgdGVzdF9zdGxzX2NvbnRleHQoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gYicrT0sgQmVnaW4gVExTIG5lZ290aWF0aW9uJworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0FGSUxFKQorICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3NsLkNlcnRpZmljYXRlRXJyb3IpOgorICAgICAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoY29udGV4dD1jdHgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDMoImxvY2FsaG9zdCIsIHNlbGYuc2VydmVyLnBvcnQsIHRpbWVvdXQ9MykKKyAgICAgICAgcmVzcCA9IHNlbGYuY2xpZW50LnN0bHMoY29udGV4dD1jdHgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzcCwgZXhwZWN0ZWQpCisKKworaWYgU1VQUE9SVFNfU1NMOgogCiAgICAgY2xhc3MgRHVtbXlQT1AzX1NTTEhhbmRsZXIoRHVtbXlQT1AzSGFuZGxlcik6CiAKQEAgLTI2MCwzNSArMzU2LDEzIEBACiAgICAgICAgICAgICBzZWxmLmRlbF9jaGFubmVsKCkKICAgICAgICAgICAgIHNlbGYuc2V0X3NvY2tldChzc2xfc29ja2V0KQogICAgICAgICAgICAgIyBNdXN0IHRyeSBoYW5kc2hha2UgYmVmb3JlIGNhbGxpbmcgcHVzaCgpCi0gICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gVHJ1ZQotICAgICAgICAgICAgc2VsZi5fZG9fc3NsX2hhbmRzaGFrZSgpCisgICAgICAgICAgICBzZWxmLnRsc19hY3RpdmUgPSBUcnVlCisgICAgICAgICAgICBzZWxmLnRsc19zdGFydGluZyA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX2RvX3Rsc19oYW5kc2hha2UoKQogICAgICAgICAgICAgc2VsZi5zZXRfdGVybWluYXRvcihiIlxyXG4iKQogICAgICAgICAgICAgc2VsZi5pbl9idWZmZXIgPSBbXQogICAgICAgICAgICAgc2VsZi5wdXNoKCcrT0sgZHVtbXkgcG9wMyBzZXJ2ZXIgcmVhZHkuIDx0aW1lc3RhbXA+JykKIAotICAgICAgICBkZWYgX2RvX3NzbF9oYW5kc2hha2Uoc2VsZik6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5zb2NrZXQuZG9faGFuZHNoYWtlKCkKLSAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgIGlmIGVyci5hcmdzWzBdIGluIChzc2wuU1NMX0VSUk9SX1dBTlRfUkVBRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NsLlNTTF9FUlJPUl9XQU5UX1dSSVRFKToKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICAgICAgZWxpZiBlcnIuYXJnc1swXSA9PSBzc2wuU1NMX0VSUk9SX0VPRjoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlX2Nsb3NlKCkKLSAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGVfY2xvc2UoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9zc2xfYWNjZXB0aW5nID0gRmFsc2UKLQotICAgICAgICBkZWYgaGFuZGxlX3JlYWQoc2VsZik6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zc2xfYWNjZXB0aW5nOgotICAgICAgICAgICAgICAgIHNlbGYuX2RvX3NzbF9oYW5kc2hha2UoKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBEdW1teVBPUDNIYW5kbGVyLmhhbmRsZV9yZWFkKHNlbGYpCi0KLXJlcXVpcmVzX3NzbCA9IHNraXBVbmxlc3MoU1VQUE9SVFNfU1NMLCAnU1NMIG5vdCBzdXBwb3J0ZWQnKQogCiBAcmVxdWlyZXNfc3NsCiBjbGFzcyBUZXN0UE9QM19TU0xDbGFzcyhUZXN0UE9QM0NsYXNzKToKQEAgLTMwNiwyMCArMzgwLDYwIEBACiAgICAgZGVmIHRlc3RfY29udGV4dChzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBwb3BsaWIuUE9QM19TU0wsIHNlbGYuc2VydmVyLmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGNlcnRmaWxlPUNFUlRGSUxFLCBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlcnZlci5wb3J0LCBjZXJ0ZmlsZT1DRVJURklMRSwgY29udGV4dD1jdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHBvcGxpYi5QT1AzX1NTTCwgc2VsZi5zZXJ2ZXIuaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXIucG9ydCwga2V5ZmlsZT1DRVJURklMRSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyLnBvcnQsIGtleWZpbGU9Q0VSVEZJTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydGZpbGU9Q0VSVEZJTEUsIGNvbnRleHQ9Y3R4KQogCiAgICAgICAgIHNlbGYuY2xpZW50LnF1aXQoKQogICAgICAgICBzZWxmLmNsaWVudCA9IHBvcGxpYi5QT1AzX1NTTChzZWxmLnNlcnZlci5ob3N0LCBzZWxmLnNlcnZlci5wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PWN0eCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0PWN0eCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuY2xpZW50LnNvY2ssIHNzbC5TU0xTb2NrZXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5jbGllbnQuc29jay5jb250ZXh0LCBjdHgpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaWVudC5ub29wKCkuc3RhcnRzd2l0aChiJytPSycpKQogCisgICAgZGVmIHRlc3Rfc3RscyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocG9wbGliLmVycm9yX3Byb3RvLCBzZWxmLmNsaWVudC5zdGxzKQorCisgICAgdGVzdF9zdGxzX2NvbnRleHQgPSB0ZXN0X3N0bHMKKworICAgIGRlZiB0ZXN0X3N0bHNfY2FwYShzZWxmKToKKyAgICAgICAgY2FwYSA9IHNlbGYuY2xpZW50LmNhcGEoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKCdTVExTJyBpbiBjYXBhLmtleXMoKSkKKworCitAcmVxdWlyZXNfc3NsCitjbGFzcyBUZXN0UE9QM19UTFNDbGFzcyhUZXN0UE9QM0NsYXNzKToKKyAgICAjIHJlcGVhdCBwcmV2aW91cyB0ZXN0cyBieSB1c2luZyBwb3BsaWIuUE9QMy5zdGxzKCkKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBEdW1teVBPUDNTZXJ2ZXIoKEhPU1QsIFBPUlQpKQorICAgICAgICBzZWxmLnNlcnZlci5zdGFydCgpCisgICAgICAgIHNlbGYuY2xpZW50ID0gcG9wbGliLlBPUDMoc2VsZi5zZXJ2ZXIuaG9zdCwgc2VsZi5zZXJ2ZXIucG9ydCwgdGltZW91dD0zKQorICAgICAgICBzZWxmLmNsaWVudC5zdGxzKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgaWYgc2VsZi5jbGllbnQuZmlsZSBpcyBub3QgTm9uZSBhbmQgc2VsZi5jbGllbnQuc29jayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNsaWVudC5xdWl0KCkKKyAgICAgICAgICAgIGV4Y2VwdCBwb3BsaWIuZXJyb3JfcHJvdG86CisgICAgICAgICAgICAgICAgIyBoYXBwZW5zIGluIHRoZSB0ZXN0X3Rvb19sb25nX2xpbmVzIGNhc2U7IHRoZSBvdmVybG9uZworICAgICAgICAgICAgICAgICMgcmVzcG9uc2Ugd2lsbCBiZSB0cmVhdGVkIGFzIHJlc3BvbnNlIHRvIFFVSVQgYW5kIHJhaXNlCisgICAgICAgICAgICAgICAgIyB0aGlzIGV4Y2VwdGlvbgorICAgICAgICAgICAgICAgIHNlbGYuY2xpZW50LmNsb3NlKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisKKyAgICBkZWYgdGVzdF9zdGxzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhwb3BsaWIuZXJyb3JfcHJvdG8sIHNlbGYuY2xpZW50LnN0bHMpCisKKyAgICB0ZXN0X3N0bHNfY29udGV4dCA9IHRlc3Rfc3RscworCisgICAgZGVmIHRlc3Rfc3Rsc19jYXBhKHNlbGYpOgorICAgICAgICBjYXBhID0gc2VsZi5jbGllbnQuY2FwYSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYidTVExTJyBpbiBjYXBhLmtleXMoKSkKKwogCiBjbGFzcyBUZXN0VGltZW91dHMoVGVzdENhc2UpOgogCkBAIC0zNzcsNyArNDkxLDcgQEAKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHRlc3RzID0gW1Rlc3RQT1AzQ2xhc3MsIFRlc3RUaW1lb3V0cywKLSAgICAgICAgICAgICBUZXN0UE9QM19TU0xDbGFzc10KKyAgICAgICAgICAgICBUZXN0UE9QM19TU0xDbGFzcywgVGVzdFBPUDNfVExTQ2xhc3NdCiAgICAgdGhyZWFkX2luZm8gPSB0ZXN0X3N1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKICAgICB0cnk6CiAgICAgICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wb3NpeC5weSBiL0xpYi90ZXN0L3Rlc3RfcG9zaXgucHkKaW5kZXggNWMwOWViZi4uZDc2Nzk4OSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3NpeC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Bvc2l4LnB5CkBAIC00NDMsNiArNDQzLDQ0IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoc3RhdC5TX0lTRklGTyhwb3NpeC5zdGF0KHN1cHBvcnQuVEVTVEZOKS5zdF9tb2RlKSkKIAorICAgICAgICAjIEtleXdvcmQgYXJndW1lbnRzIGFyZSBhbHNvIHN1cHBvcnRlZAorICAgICAgICBzdXBwb3J0LnVubGluayhzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcG9zaXgubWtub2QocGF0aD1zdXBwb3J0LlRFU1RGTiwgbW9kZT1tb2RlLCBkZXZpY2U9MCwKKyAgICAgICAgICAgICAgICBkaXJfZmQ9Tm9uZSkKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZS5lcnJubywgKGVycm5vLkVQRVJNLCBlcnJuby5FSU5WQUwpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ3N0YXQnKSwgJ3Rlc3QgbmVlZHMgcG9zaXguc3RhdCgpJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHBvc2l4LCAnbWFrZWRldicpLCAndGVzdCBuZWVkcyBwb3NpeC5tYWtlZGV2KCknKQorICAgIGRlZiB0ZXN0X21ha2VkZXYoc2VsZik6CisgICAgICAgIHN0ID0gcG9zaXguc3RhdChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgZGV2ID0gc3Quc3RfZGV2CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShkZXYsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZGV2LCAwKQorCisgICAgICAgIG1ham9yID0gcG9zaXgubWFqb3IoZGV2KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWFqb3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWFqb3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXgubWFqb3IoZGV2KSwgbWFqb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWFqb3IsIGZsb2F0KGRldikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWFqb3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSwgcG9zaXgubWFqb3IsIC0xKQorCisgICAgICAgIG1pbm9yID0gcG9zaXgubWlub3IoZGV2KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWlub3IsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWlub3IsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXgubWlub3IoZGV2KSwgbWlub3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWlub3IsIGZsb2F0KGRldikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWlub3IpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSwgcG9zaXgubWlub3IsIC0xKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocG9zaXgubWFrZWRldihtYWpvciwgbWlub3IpLCBkZXYpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXgubWFrZWRldiwgZmxvYXQobWFqb3IpLCBtaW5vcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwb3NpeC5tYWtlZGV2LCBtYWpvciwgZmxvYXQobWlub3IpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4Lm1ha2VkZXYsIG1ham9yKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4Lm1ha2VkZXYpCisKICAgICBkZWYgX3Rlc3RfYWxsX2Nob3duX2NvbW1vbihzZWxmLCBjaG93bl9mdW5jLCBmaXJzdF9wYXJhbSwgc3RhdF9mdW5jKToKICAgICAgICAgIiIiQ29tbW9uIGNvZGUgZm9yIGNob3duLCBmY2hvd24gYW5kIGxjaG93biB0ZXN0cy4iIiIKICAgICAgICAgZGVmIGNoZWNrX3N0YXQodWlkLCBnaWQpOgpAQCAtNjAzLDggKzY0MSwxMCBAQAogICAgICAgICByLCB3ID0gb3MucGlwZTIob3MuT19DTE9FWEVDfG9zLk9fTk9OQkxPQ0spCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwociwgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoZmNudGwuZmNudGwodywgZmNudGwuRl9HRVRGRCkgJiBmY250bC5GRF9DTE9FWEVDKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLmdldF9pbmhlcml0YWJsZShyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5nZXRfaW5oZXJpdGFibGUodykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bChyLCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmY250bC5mY250bCh3LCBmY250bC5GX0dFVEZMKSAmIG9zLk9fTk9OQkxPQ0spCiAgICAgICAgICMgdHJ5IHJlYWRpbmcgZnJvbSBhbiBlbXB0eSBwaXBlOiB0aGlzIHNob3VsZCBmYWlsLCBub3QgYmxvY2sKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3MucmVhZCwgciwgMSkKICAgICAgICAgIyB0cnkgYSB3cml0ZSBiaWcgZW5vdWdoIHRvIGZpbGwtdXAgdGhlIHBpcGU6IHRoaXMgc2hvdWxkIGVpdGhlcgpAQCAtNjUyLDcgKzY5Miw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0LnN0X2ZsYWdzIHwgc3RhdC5VRl9JTU1VVEFCTEUsIG5ld19zdC5zdF9mbGFncykKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBmZCA9IG9wZW4odGFyZ2V0X2ZpbGUsICd3KycpCi0gICAgICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUuZXJybm8sIGVycm5vLkVQRVJNKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgcG9zaXguY2hmbGFncyh0YXJnZXRfZmlsZSwgc3Quc3RfZmxhZ3MpCkBAIC03MTAsNDEgKzc1MCwzOSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihwb3NpeCwgJ2dldGN3ZCcpLCAndGVzdCBuZWVkcyBwb3NpeC5nZXRjd2QoKScpCiAgICAgZGVmIHRlc3RfZ2V0Y3dkX2xvbmdfcGF0aG5hbWVzKHNlbGYpOgotICAgICAgICBpZiBoYXNhdHRyKHBvc2l4LCAnZ2V0Y3dkJyk6Ci0gICAgICAgICAgICBkaXJuYW1lID0gJ2dldGN3ZC10ZXN0LWRpcmVjdG9yeS0wMTIzNDU2Nzg5YWJjZGVmLTAxMjM0NTY3ODkwYWJjZGVmJwotICAgICAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGJhc2VfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChzdXBwb3J0LlRFU1RGTikgKyAnLmdldGN3ZCcKKyAgICAgICAgZGlybmFtZSA9ICdnZXRjd2QtdGVzdC1kaXJlY3RvcnktMDEyMzQ1Njc4OWFiY2RlZi0wMTIzNDU2Nzg5MGFiY2RlZicKKyAgICAgICAgY3VyZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICAgICAgYmFzZV9wYXRoID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICcuZ2V0Y3dkJwogCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoYmFzZV9wYXRoKQotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKLSAgICAgICAgICAgIGV4Y2VwdDoKLSMgICAgICAgICAgICAgICBKdXN0IHJldHVybmluZyBub3RoaW5nIGluc3RlYWQgb2YgdGhlIFNraXBUZXN0IGV4Y2VwdGlvbiwKLSMgICAgICAgICAgICAgICBiZWNhdXNlIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLgotIyAgICAgICAgICAgICAgIElzIHRoYXQgb2s/Ci0jICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCi0gICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLm1rZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgICAgIG9zLmNoZGlyKGJhc2VfcGF0aCkKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgIyAgSnVzdCByZXR1cm5pbmcgbm90aGluZyBpbnN0ZWFkIG9mIHRoZSBTa2lwVGVzdCBleGNlcHRpb24sIGJlY2F1c2UKKyAgICAgICAgICAgICMgIHRoZSB0ZXN0IHJlc3VsdHMgaW4gRXJyb3IgaW4gdGhhdCBjYXNlLiAgSXMgdGhhdCBvaz8KKyAgICAgICAgICAgICMgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBmb3IgdGVzdGluZyIpCisgICAgICAgICAgICByZXR1cm4KIAotICAgICAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5ta2RpcihkaXJuYW1lKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgibWtkaXIgY2Fubm90IGNyZWF0ZSBkaXJlY3Rvcnkgc3VmZmljaWVudGx5IGRlZXAgZm9yIGdldGN3ZCB0ZXN0IikKKyAgICAgICAgICAgIGRlZiBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCA9IDApOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJta2RpciBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBzdWZmaWNpZW50bHkgZGVlcCBmb3IgZ2V0Y3dkIHRlc3QiKQogCi0gICAgICAgICAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUpCi0gICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLmdldGN3ZCgpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBjdXJyZW50X3BhdGhfbGVuZ3RoIDwgMTAyNzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCi0gICAgICAgICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBvcy5jaGRpcignLi4nKQotICAgICAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKKyAgICAgICAgICAgICAgICBvcy5jaGRpcihkaXJuYW1lKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgY3VycmVudF9wYXRoX2xlbmd0aCA8IDEwMjc6CisgICAgICAgICAgICAgICAgICAgICAgICBfY3JlYXRlX2FuZF9kb19nZXRjd2QoZGlybmFtZSwgY3VycmVudF9wYXRoX2xlbmd0aCArIGxlbihkaXJuYW1lKSArIDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgb3MuY2hkaXIoJy4uJykKKyAgICAgICAgICAgICAgICAgICAgb3Mucm1kaXIoZGlybmFtZSkKIAotICAgICAgICAgICAgICAgIF9jcmVhdGVfYW5kX2RvX2dldGN3ZChkaXJuYW1lKQorICAgICAgICAgICAgX2NyZWF0ZV9hbmRfZG9fZ2V0Y3dkKGRpcm5hbWUpCiAKLSAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgb3MuY2hkaXIoY3VyZGlyKQotICAgICAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNoZGlyKGN1cmRpcikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKGJhc2VfcGF0aCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocG9zaXgsICdnZXRncm91cGxpc3QnKSwgInRlc3QgbmVlZHMgcG9zaXguZ2V0Z3JvdXBsaXN0KCkiKQogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocHdkLCAnZ2V0cHd1aWQnKSwgInRlc3QgbmVlZHMgcHdkLmdldHB3dWlkKCkiKQpAQCAtNzU3LDcgKzc5NSw3IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZ2V0ZWdpZCcpLCAidGVzdCBuZWVkcyBvcy5nZXRlZ2lkKCkiKQogICAgIGRlZiB0ZXN0X2dldGdyb3VwcyhzZWxmKToKLSAgICAgICAgd2l0aCBvcy5wb3BlbignaWQgLUcnKSBhcyBpZGc6CisgICAgICAgIHdpdGggb3MucG9wZW4oJ2lkIC1HIDI+L2Rldi9udWxsJykgYXMgaWRnOgogICAgICAgICAgICAgZ3JvdXBzID0gaWRnLnJlYWQoKS5zdHJpcCgpCiAgICAgICAgICAgICByZXQgPSBpZGcuY2xvc2UoKQogCkBAIC03NjgsNyArODA2LDcgQEAKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAgICAgaW1wb3J0IHN5c2NvbmZpZwogICAgICAgICAgICAgZHQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpIG9yICcxMC4wJwotICAgICAgICAgICAgaWYgZmxvYXQoZHQpIDwgMTAuNjoKKyAgICAgICAgICAgIGlmIHR1cGxlKGludChuKSBmb3IgbiBpbiBkdC5zcGxpdCgnLicpWzA6Ml0pIDwgKDEwLCA2KToKICAgICAgICAgICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiZ2V0Z3JvdXBzKDIpIGlzIGJyb2tlbiBwcmlvciB0byAxMC42IikKIAogICAgICAgICAjICdpZCAtRycgYW5kICdvcy5nZXRncm91cHMoKScgc2hvdWxkIHJldHVybiB0aGUgc2FtZQpAQCAtMTEyMSw2ICsxMTU5LDYwIEBACiAgICAgICAgICAgICAgICAgIyBodHRwOi8vbGlzdHMuZnJlZWJzZC5vcmcvcGlwZXJtYWlsL2ZyZWVic2QtYW1kNjQvMjAxMi1KYW51YXJ5LzAxNDMzMi5odG1sCiAgICAgICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIk9TRXJyb3IgcmFpc2VkISIpCiAKKyAgICBkZWYgdGVzdF9wYXRoX2Vycm9yMihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlc3QgZnVuY3Rpb25zIHRoYXQgY2FsbCBwYXRoX2Vycm9yMigpLCBwcm92aWRpbmcgdHdvIGZpbGVuYW1lcyBpbiB0aGVpciBleGNlcHRpb25zLgorICAgICAgICAiIiIKKyAgICAgICAgZm9yIG5hbWUgaW4gKCJyZW5hbWUiLCAicmVwbGFjZSIsICJsaW5rIik6CisgICAgICAgICAgICBmdW5jdGlvbiA9IGdldGF0dHIob3MsIG5hbWUsIE5vbmUpCisgICAgICAgICAgICBpZiBmdW5jdGlvbiBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGZvciBkc3QgaW4gKCJub29kbHkyIiwgc3VwcG9ydC5URVNURk4pOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24oJ2RvZXNub3RleGlzdGZpbGVuYW1lJywgZHN0KQorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIidkb2Vzbm90ZXhpc3RmaWxlbmFtZScgLT4gJ3t9JyIuZm9ybWF0KGRzdCksIHN0cihlKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJObyB2YWxpZCBwYXRoX2Vycm9yMigpIHRlc3QgZm9yIG9zLiIgKyBuYW1lKQorCisgICAgZGVmIHRlc3RfcGF0aF93aXRoX251bGxfY2hhcmFjdGVyKHNlbGYpOgorICAgICAgICBmbiA9IHN1cHBvcnQuVEVTVEZOCisgICAgICAgIGZuX3dpdGhfTlVMID0gZm4gKyAnXDAnCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgZm4pCisgICAgICAgIHN1cHBvcnQudW5saW5rKGZuKQorICAgICAgICBmZCA9IE5vbmUKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgICAgIGZkID0gb3Mub3Blbihmbl93aXRoX05VTCwgb3MuT19XUk9OTFkgfCBvcy5PX0NSRUFUKSAjIHJhaXNlcworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgaWYgZmQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoZm4pKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG9zLm1rZGlyLCBmbl93aXRoX05VTCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmbikpCisgICAgICAgIG9wZW4oZm4sICd3YicpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBvcy5zdGF0LCBmbl93aXRoX05VTCkKKworICAgIGRlZiB0ZXN0X3BhdGhfd2l0aF9udWxsX2J5dGUoc2VsZik6CisgICAgICAgIGZuID0gb3MuZnNlbmNvZGUoc3VwcG9ydC5URVNURk4pCisgICAgICAgIGZuX3dpdGhfTlVMID0gZm4gKyBiJ1wwJworICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZuKQorICAgICAgICBzdXBwb3J0LnVubGluayhmbikKKyAgICAgICAgZmQgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgZmQgPSBvcy5vcGVuKGZuX3dpdGhfTlVMLCBvcy5PX1dST05MWSB8IG9zLk9fQ1JFQVQpICMgcmFpc2VzCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBmZCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBvcy5jbG9zZShmZCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmbikpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIG9zLm1rZGlyLCBmbl93aXRoX05VTCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmbikpCisgICAgICAgIG9wZW4oZm4sICd3YicpLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgb3Muc3RhdCwgZm5fd2l0aF9OVUwpCisKIGNsYXNzIFBvc2l4R3JvdXBzVGVzdGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcG9zaXhwYXRoLnB5IGIvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKaW5kZXggMGU3ZDg2Ni4uMWQ0NTk2ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wb3NpeHBhdGgucHkKQEAgLTU3LDIxICs1NywxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvc2l4cGF0aC5qb2luKGIiL2Zvby8iLCBiImJhci8iLCBiImJhei8iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBiIi9mb28vYmFyL2Jhei8iKQogCi0gICAgICAgIGRlZiBjaGVja19lcnJvcl9tc2cobGlzdF9vZl9hcmdzLCBtc2cpOgotICAgICAgICAgICAgIiIiQ2hlY2sgcG9zaXhwYXRoLmpvaW4gcmFpc2VzIGZyaWVuZGx5IFR5cGVFcnJvcnMuIiIiCi0gICAgICAgICAgICBmb3IgYXJncyBpbiAoaXRlbSBmb3IgcGVybSBpbiBsaXN0X29mX2FyZ3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpdGVtIGluIGl0ZXJ0b29scy5wZXJtdXRhdGlvbnMocGVybSkpOgotICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKLSAgICAgICAgICAgICAgICAgICAgcG9zaXhwYXRoLmpvaW4oKmFyZ3MpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIGNtLmV4Y2VwdGlvbi5hcmdzWzBdKQotCi0gICAgICAgIGNoZWNrX2Vycm9yX21zZyhbW2InYnl0ZXMnLCAnc3RyJ10sIFtieXRlYXJyYXkoYidieXRlcycpLCAnc3RyJ11dLAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IG1peCBzdHJpbmdzIGFuZCBieXRlcyBpbiBwYXRoIGNvbXBvbmVudHMuIikKKyAgICBkZWYgdGVzdF9qb2luX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBDaGVjayBwb3NpeHBhdGguam9pbiByYWlzZXMgZnJpZW5kbHkgVHlwZUVycm9ycy4KKyAgICAgICAgZXJybXNnID0gIkNhbid0IG1peCBzdHJpbmdzIGFuZCBieXRlcyBpbiBwYXRoIGNvbXBvbmVudHMiCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyk6CisgICAgICAgICAgICBwb3NpeHBhdGguam9pbihiJ2J5dGVzJywgJ3N0cicpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUeXBlRXJyb3IsIGVycm1zZyk6CisgICAgICAgICAgICBwb3NpeHBhdGguam9pbignc3RyJywgYidieXRlcycpCiAgICAgICAgICMgcmVncmVzc2lvbiwgc2VlICMxNTM3NwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcikgYXMgY206CiAgICAgICAgICAgICBwb3NpeHBhdGguam9pbihOb25lLCAnc3RyJykKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCgiQ2FuJ3QgbWl4IHN0cmluZ3MgYW5kIGJ5dGVzIGluIHBhdGggY29tcG9uZW50cy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtLmV4Y2VwdGlvbi5hcmdzWzBdKQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzWzBdLCBlcnJtc2cpCiAKICAgICBkZWYgdGVzdF9zcGxpdChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwb3NpeHBhdGguc3BsaXQoIi9mb28vYmFyIiksICgiL2ZvbyIsICJiYXIiKSkKQEAgLTE4Niw2MyArMTgyLDYgQEAKICAgICAgICAgICAgIGlmIG5vdCBmLmNsb3NlKCk6CiAgICAgICAgICAgICAgICAgZi5jbG9zZSgpCiAKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIF9jcmVhdGVfZmlsZShmaWxlbmFtZSk6Ci0gICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgJ3diJykgYXMgZjoKLSAgICAgICAgICAgIGYud3JpdGUoYidmb28nKQotCi0gICAgZGVmIHRlc3Rfc2FtZWZpbGUoc2VsZik6Ci0gICAgICAgIHRlc3RfZm4gPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4sIHRlc3RfZm4pKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHBvc2l4cGF0aC5zYW1lZmlsZSkKLQotICAgIEB1bml0dGVzdC5za2lwSWYoCi0gICAgICAgIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCd3aW4nKSwKLSAgICAgICAgInBvc2l4cGF0aC5zYW1lZmlsZSBkb2VzIG5vdCB3b3JrIG9uIGxpbmtzIGluIFdpbmRvd3MiKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICJzeW1saW5rIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIk1pc3Npbmcgc3ltbGluayBpbXBsZW1lbnRhdGlvbiIpCi0gICAgZGVmIHRlc3Rfc2FtZWZpbGVfb25fbGlua3Moc2VsZik6Ci0gICAgICAgIHRlc3RfZm4xID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgdGVzdF9mbjIgPSBzdXBwb3J0LlRFU1RGTiArICIyIgotICAgICAgICBzZWxmLl9jcmVhdGVfZmlsZSh0ZXN0X2ZuMSkKLQotICAgICAgICBvcy5zeW1saW5rKHRlc3RfZm4xLCB0ZXN0X2ZuMikKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lZmlsZSh0ZXN0X2ZuMSwgdGVzdF9mbjIpKQotICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCi0KLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocG9zaXhwYXRoLnNhbWVmaWxlKHRlc3RfZm4xLCB0ZXN0X2ZuMikpCi0KLQotICAgIGRlZiB0ZXN0X3NhbWVzdGF0KHNlbGYpOgotICAgICAgICB0ZXN0X2ZuID0gc3VwcG9ydC5URVNURk4gKyAiMSIKLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbikKLSAgICAgICAgdGVzdF9mbnMgPSBbdGVzdF9mbl0qMgotICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lc3RhdCgqc3RhdHMpKQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZigKLSAgICAgICAgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpLAotICAgICAgICAicG9zaXhwYXRoLnNhbWVzdGF0IGRvZXMgbm90IHdvcmsgb24gbGlua3MgaW4gV2luZG93cyIpCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgInN5bWxpbmsiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBzeW1saW5rIGltcGxlbWVudGF0aW9uIikKLSAgICBkZWYgdGVzdF9zYW1lc3RhdF9vbl9saW5rcyhzZWxmKToKLSAgICAgICAgdGVzdF9mbjEgPSBzdXBwb3J0LlRFU1RGTiArICIxIgotICAgICAgICB0ZXN0X2ZuMiA9IHN1cHBvcnQuVEVTVEZOICsgIjIiCi0gICAgICAgIHNlbGYuX2NyZWF0ZV9maWxlKHRlc3RfZm4xKQotICAgICAgICB0ZXN0X2ZucyA9ICh0ZXN0X2ZuMSwgdGVzdF9mbjIpCi0gICAgICAgIG9zLnN5bWxpbmsoKnRlc3RfZm5zKQotICAgICAgICBzdGF0cyA9IG1hcChvcy5zdGF0LCB0ZXN0X2ZucykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBvc2l4cGF0aC5zYW1lc3RhdCgqc3RhdHMpKQotICAgICAgICBvcy5yZW1vdmUodGVzdF9mbjIpCi0KLSAgICAgICAgc2VsZi5fY3JlYXRlX2ZpbGUodGVzdF9mbjIpCi0gICAgICAgIHN0YXRzID0gbWFwKG9zLnN0YXQsIHRlc3RfZm5zKQotICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBvc2l4cGF0aC5zYW1lc3RhdCgqc3RhdHMpKQotCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcG9zaXhwYXRoLnNhbWVzdGF0KQotCiAgICAgZGVmIHRlc3RfaXNtb3VudChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJcyhwb3NpeHBhdGguaXNtb3VudCgiLyIpLCBUcnVlKQogICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CkBAIC0zODksNyArMzI4LDYgQEAKICAgICAgICAgIyBCdWcgIzkzMDAyNCwgcmV0dXJuIHRoZSBwYXRoIHVuY2hhbmdlZCBpZiB3ZSBnZXQgaW50byBhbiBpbmZpbml0ZQogICAgICAgICAjIHN5bWxpbmsgbG9vcC4KICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb2xkX3BhdGggPSBhYnNwYXRoKCcuJykKICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOLCBBQlNURk4pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiksIEFCU1RGTikKIApAQCAtNDE1LDEwICszNTMsOSBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChBQlNURk4rImMiKSwgQUJTVEZOKyJjIikKIAogICAgICAgICAgICAgIyBUZXN0IHVzaW5nIHJlbGF0aXZlIHBhdGggYXMgd2VsbC4KLSAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSksIEFCU1RGTikKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jaGFuZ2VfY3dkKGRpcm5hbWUoQUJTVEZOKSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlbmFtZShBQlNURk4pKSwgQUJTVEZOKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4pCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4rIjEiKQogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoQUJTVEZOKyIyIikKQEAgLTQ0Niw3ICszODMsNiBAQAogICAgIEBza2lwX2lmX0FCU1RGTl9jb250YWluc19iYWNrc2xhc2gKICAgICBkZWYgdGVzdF9yZWFscGF0aF9kZWVwX3JlY3Vyc2lvbihzZWxmKToKICAgICAgICAgZGVwdGggPSAxMAotICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4pCiAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZShkZXB0aCk6CkBAIC00NTUsMTAgKzM5MSw5IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKEFCU1RGTiArICcvJWQnICUgZGVwdGgpLCBBQlNURk4pCiAKICAgICAgICAgICAgICMgVGVzdCB1c2luZyByZWxhdGl2ZSBwYXRoIGFzIHdlbGwuCi0gICAgICAgICAgICBvcy5jaGRpcihBQlNURk4pCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKCclZCcgJSBkZXB0aCksIEFCU1RGTikKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jaGFuZ2VfY3dkKEFCU1RGTik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aCgnJWQnICUgZGVwdGgpLCBBQlNURk4pCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoICsgMSk6CiAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoQUJTVEZOICsgJy8lZCcgJSBpKQogICAgICAgICAgICAgc2FmZV9ybWRpcihBQlNURk4pCkBAIC00NzIsMTUgKzQwNywxMyBAQAogICAgICAgICAjIC91c3IvZG9jIHdpdGggJ2RvYycgYmVpbmcgYSBzeW1saW5rIHRvIC91c3Ivc2hhcmUvZG9jLiBXZSBjYWxsCiAgICAgICAgICMgcmVhbHBhdGgoImEiKS4gVGhpcyBzaG91bGQgcmV0dXJuIC91c3Ivc2hhcmUvZG9jL2EvLgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvbGRfcGF0aCA9IGFic3BhdGgoJy4nKQogICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOKQogICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi95IikKICAgICAgICAgICAgIG9zLnN5bWxpbmsoQUJTVEZOICsgIi95IiwgQUJTVEZOICsgIi9rIikKIAotICAgICAgICAgICAgb3MuY2hkaXIoQUJTVEZOICsgIi9rIikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoImEiKSwgQUJTVEZOICsgIi95L2EiKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QoQUJTVEZOICsgIi9rIik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aCgiYSIpLCBBQlNURk4gKyAiL3kvYSIpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKEFCU1RGTiArICIvayIpCiAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIveSIpCiAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTikKQEAgLTQ5Nyw3ICs0MzAsNiBAQAogICAgICAgICAjIGFuZCBhIHN5bWJvbGljIGxpbmsgJ2xpbmsteScgcG9pbnRpbmcgdG8gJ3knIGluIGRpcmVjdG9yeSAnYScsCiAgICAgICAgICMgdGhlbiByZWFscGF0aCgibGluay15Ly4uIikgc2hvdWxkIHJldHVybiAnaycsIG5vdCAnYScuCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIG9sZF9wYXRoID0gYWJzcGF0aCgnLicpCiAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4pCiAgICAgICAgICAgICBvcy5ta2RpcihBQlNURk4gKyAiL2siKQogICAgICAgICAgICAgb3MubWtkaXIoQUJTVEZOICsgIi9rL3kiKQpAQCAtNTA2LDExICs0MzgsMTAgQEAKICAgICAgICAgICAgICMgQWJzb2x1dGUgcGF0aC4KICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoQUJTVEZOICsgIi9saW5rLXkvLi4iKSwgQUJTVEZOICsgIi9rIikKICAgICAgICAgICAgICMgUmVsYXRpdmUgcGF0aC4KLSAgICAgICAgICAgIG9zLmNoZGlyKGRpcm5hbWUoQUJTVEZOKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSArICIvbGluay15Ly4uIiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFCU1RGTiArICIvayIpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChkaXJuYW1lKEFCU1RGTikpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZW5hbWUoQUJTVEZOKSArICIvbGluay15Ly4uIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQlNURk4gKyAiL2siKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX3BhdGgpCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhBQlNURk4gKyAiL2xpbmsteSIpCiAgICAgICAgICAgICBzYWZlX3JtZGlyKEFCU1RGTiArICIvay95IikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOICsgIi9rIikKQEAgLTUyNCwxNyArNDU1LDE0IEBACiAgICAgICAgICMgbXVzdCBiZSByZXNvbHZlZCB0b28uCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb2xkX3BhdGggPSBhYnNwYXRoKCcuJykKICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTikKICAgICAgICAgICAgIG9zLm1rZGlyKEFCU1RGTiArICIvayIpCiAgICAgICAgICAgICBvcy5zeW1saW5rKEFCU1RGTiwgQUJTVEZOICsgImxpbmsiKQotICAgICAgICAgICAgb3MuY2hkaXIoZGlybmFtZShBQlNURk4pKQotCi0gICAgICAgICAgICBiYXNlID0gYmFzZW5hbWUoQUJTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlICsgImxpbmsiKSwgQUJTVEZOKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZWFscGF0aChiYXNlICsgImxpbmsvayIpLCBBQlNURk4gKyAiL2siKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QoZGlybmFtZShBQlNURk4pKToKKyAgICAgICAgICAgICAgICBiYXNlID0gYmFzZW5hbWUoQUJTVEZOKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVhbHBhdGgoYmFzZSArICJsaW5rIiksIEFCU1RGTikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWxwYXRoKGJhc2UgKyAibGluay9rIiksIEFCU1RGTiArICIvayIpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfcGF0aCkKICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKEFCU1RGTiArICJsaW5rIikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOICsgIi9rIikKICAgICAgICAgICAgIHNhZmVfcm1kaXIoQUJTVEZOKQpAQCAtNTk1LDExICs1MjMsNiBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgb3MuZ2V0Y3dkYiA9IHJlYWxfZ2V0Y3dkYgogCi0gICAgZGVmIHRlc3Rfc2FtZW9wZW5maWxlKHNlbGYpOgotICAgICAgICBmbmFtZSA9IHN1cHBvcnQuVEVTVEZOICsgIjEiCi0gICAgICAgIHdpdGggb3BlbihmbmFtZSwgIndiIikgYXMgYSwgb3BlbihmbmFtZSwgIndiIikgYXMgYjoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwb3NpeHBhdGguc2FtZW9wZW5maWxlKGEuZmlsZW5vKCksIGIuZmlsZW5vKCkpKQotCiAKIGNsYXNzIFBvc2l4Q29tbW9uVGVzdCh0ZXN0X2dlbmVyaWNwYXRoLkNvbW1vblRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBwYXRobW9kdWxlID0gcG9zaXhwYXRoCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3BwcmludC5weSBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CmluZGV4IGE4NTI5OGUuLjE4MGRkYjAgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHByaW50LnB5CkBAIC0xLDMgKzEsNSBAQAorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKwogaW1wb3J0IHBwcmludAogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CkBAIC01Niw3ICs1OCw4IEBACiAgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IC5pc3JlY3Vyc2l2ZSgpIGFuZCAuaXNyZWFkYWJsZSgpIHcvbyByZWN1cnNpb24KICAgICAgICAgcHAgPSBwcHJpbnQuUHJldHR5UHJpbnRlcigpCi0gICAgICAgIGZvciBzYWZlIGluICgyLCAyLjAsIDJqLCAiYWJjIiwgWzNdLCAoMiwyKSwgezM6IDN9LCAieWFkZGF5YWRkYSIsCisgICAgICAgIGZvciBzYWZlIGluICgyLCAyLjAsIDJqLCAiYWJjIiwgWzNdLCAoMiwyKSwgezM6IDN9LCBiImRlZiIsCisgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoYiJnaGkiKSwgVHJ1ZSwgRmFsc2UsIE5vbmUsIC4uLiwKICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYSwgc2VsZi5iKToKICAgICAgICAgICAgICMgbW9kdWxlLWxldmVsIGNvbnZlbmllbmNlIGZ1bmN0aW9ucwogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShwcHJpbnQuaXNyZWN1cnNpdmUoc2FmZSksCkBAIC0xMjYsMjEgKzEyOSwyMyBAQAogICAgICAgICAjIGl0IHNvcnRlZCBhIGRpY3QgZGlzcGxheSBpZiBhbmQgb25seSBpZiB0aGUgZGlzcGxheSByZXF1aXJlZAogICAgICAgICAjIG11bHRpcGxlIGxpbmVzLiAgRm9yIHRoYXQgcmVhc29uLCBkaWN0cyB3aXRoIG1vcmUgdGhhbiBvbmUgZWxlbWVudAogICAgICAgICAjIGFyZW4ndCB0ZXN0ZWQgaGVyZS4KLSAgICAgICAgZm9yIHNpbXBsZSBpbiAoMCwgMCwgMCswaiwgMC4wLCAiIiwgYiIiLAorICAgICAgICBmb3Igc2ltcGxlIGluICgwLCAwLCAwKzBqLCAwLjAsICIiLCBiIiIsIGJ5dGVhcnJheSgpLAogICAgICAgICAgICAgICAgICAgICAgICAoKSwgdHVwbGUyKCksIHR1cGxlMygpLAogICAgICAgICAgICAgICAgICAgICAgICBbXSwgbGlzdDIoKSwgbGlzdDMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2V0KCksIHNldDIoKSwgc2V0MygpLAogICAgICAgICAgICAgICAgICAgICAgICBmcm96ZW5zZXQoKSwgZnJvemVuc2V0MigpLCBmcm96ZW5zZXQzKCksCiAgICAgICAgICAgICAgICAgICAgICAgIHt9LCBkaWN0MigpLCBkaWN0MygpLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUsIHBwcmludCwKLSAgICAgICAgICAgICAgICAgICAgICAgLTYsIC02LCAtNi02aiwgLTEuNSwgIngiLCBiIngiLCAoMywpLCBbM10sIHszOiA2fSwKKyAgICAgICAgICAgICAgICAgICAgICAgLTYsIC02LCAtNi02aiwgLTEuNSwgIngiLCBiIngiLCBieXRlYXJyYXkoYiJ4IiksCisgICAgICAgICAgICAgICAgICAgICAgICgzLCksIFszXSwgezM6IDZ9LAogICAgICAgICAgICAgICAgICAgICAgICAoMSwyKSwgWzMsNF0sIHs1OiA2fSwKICAgICAgICAgICAgICAgICAgICAgICAgdHVwbGUyKCgxLDIpKSwgdHVwbGUzKCgxLDIpKSwgdHVwbGUzKHJhbmdlKDEwMCkpLAogICAgICAgICAgICAgICAgICAgICAgICBbMyw0XSwgbGlzdDIoWzMsNF0pLCBsaXN0MyhbMyw0XSksIGxpc3QzKHJhbmdlKDEwMCkpLAogICAgICAgICAgICAgICAgICAgICAgICBzZXQoezd9KSwgc2V0Mih7N30pLCBzZXQzKHs3fSksCiAgICAgICAgICAgICAgICAgICAgICAgIGZyb3plbnNldCh7OH0pLCBmcm96ZW5zZXQyKHs4fSksIGZyb3plbnNldDMoezh9KSwKICAgICAgICAgICAgICAgICAgICAgICAgZGljdDIoezU6IDZ9KSwgZGljdDMoezU6IDZ9KSwKLSAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2UoMTAsIC0xMSwgLTEpCisgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlKDEwLCAtMTEsIC0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgVHJ1ZSwgRmFsc2UsIE5vbmUsIC4uLiwKICAgICAgICAgICAgICAgICAgICAgICApOgogICAgICAgICAgICAgbmF0aXZlID0gcmVwcihzaW1wbGUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBwcmludC5wZm9ybWF0KHNpbXBsZSksIG5hdGl2ZSkKQEAgLTUzMCw2ICs1MzUsNTcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChkaWN0LmZyb21rZXlzKGtleXMsIDApKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAneyVyOiAwLCAlcjogMH0nICUgdHVwbGUoc29ydGVkKGtleXMsIGtleT1pZCkpKQogCisgICAgZGVmIHRlc3Rfc3RyX3dyYXAoc2VsZik6CisgICAgICAgICMgcHByaW50IHRyaWVzIHRvIHdyYXAgc3RyaW5ncyBpbnRlbGxpZ2VudGx5CisgICAgICAgIGZveCA9ICd0aGUgcXVpY2sgYnJvd24gZm94IGp1bXBlZCBvdmVyIGEgbGF6eSBkb2cnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoZm94LCB3aWR0aD0yMCksICIiIlwKKygndGhlIHF1aWNrICcKKyAnYnJvd24gZm94ICcKKyAnanVtcGVkIG92ZXIgYSAnCisgJ2xhenkgZG9nJykiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHByaW50LnBmb3JtYXQoeydhJzogMSwgJ2InOiBmb3gsICdjJzogMn0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9MjYpLCAiIiJcCit7J2EnOiAxLAorICdiJzogJ3RoZSBxdWljayBicm93biAnCisgICAgICAnZm94IGp1bXBlZCBvdmVyICcKKyAgICAgICdhIGxhenkgZG9nJywKKyAnYyc6IDJ9IiIiKQorICAgICAgICAjIFdpdGggc29tZSBzcGVjaWFsIGNoYXJhY3RlcnMKKyAgICAgICAgIyAtIFxuIGFsd2F5cyB0cmlnZ2VycyBhIG5ldyBsaW5lIGluIHRoZSBwcHJpbnQKKyAgICAgICAgIyAtIFx0IGFuZCBcbiBhcmUgZXNjYXBlZAorICAgICAgICAjIC0gbm9uLUFTQ0lJIGlzIGFsbG93ZWQKKyAgICAgICAgIyAtIGFuIGFwb3N0cm9waGUgZG9lc24ndCBkaXNydXB0IHRoZSBwcHJpbnQKKyAgICAgICAgc3BlY2lhbCA9ICJQb3J0b25zIGRpeCBib25zIFwid2hpc2t5c1wiXG7DoCBsJ2F2b2NhdCBnb3VqYXRcdCBxdWkgZnVtYWl0IGF1IHpvbyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChzcGVjaWFsLCB3aWR0aD0yMSksICIiIlwKKygnUG9ydG9ucyBkaXggJworICdib25zICJ3aGlza3lzIlxcbicKKyAiw6AgbCdhdm9jYXQgIgorICdnb3VqYXRcXHQgcXVpICcKKyAnZnVtYWl0IGF1IHpvbycpIiIiKQorICAgICAgICAjIEFuIHVud3JhcHBhYmxlIHN0cmluZyBpcyBmb3JtYXR0ZWQgYXMgaXRzIHJlcHIKKyAgICAgICAgdW53cmFwcGFibGUgPSAieCIgKiAxMDAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCh1bndyYXBwYWJsZSwgd2lkdGg9ODApLCByZXByKHVud3JhcHBhYmxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdCgnJyksICInJyIpCisgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgcHByaW50IGlzIGEgdXNhYmxlIHJlcHIKKyAgICAgICAgc3BlY2lhbCAqPSAxMAorICAgICAgICBmb3Igd2lkdGggaW4gcmFuZ2UoMywgNDApOgorICAgICAgICAgICAgZm9ybWF0dGVkID0gcHByaW50LnBmb3JtYXQoc3BlY2lhbCwgd2lkdGg9d2lkdGgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZm9ybWF0dGVkKSwgc3BlY2lhbCkKKyAgICAgICAgICAgIGZvcm1hdHRlZCA9IHBwcmludC5wZm9ybWF0KFtzcGVjaWFsXSAqIDIsIHdpZHRoPXdpZHRoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmFsKGZvcm1hdHRlZCksIFtzcGVjaWFsXSAqIDIpCisKKyAgICBkZWYgdGVzdF9jb21wYWN0KHNlbGYpOgorICAgICAgICBvID0gKFtsaXN0KHJhbmdlKGkgKiBpKSkgZm9yIGkgaW4gcmFuZ2UoNSldICsKKyAgICAgICAgICAgICBbbGlzdChyYW5nZShpKSkgZm9yIGkgaW4gcmFuZ2UoNildKQorICAgICAgICBleHBlY3RlZCA9ICIiIlwKK1tbXSwgWzBdLCBbMCwgMSwgMiwgM10sCisgWzAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdLAorIFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywKKyAgMTQsIDE1XSwKKyBbXSwgWzBdLCBbMCwgMV0sIFswLCAxLCAyXSwgWzAsIDEsIDIsIDNdLAorIFswLCAxLCAyLCAzLCA0XV0iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcHJpbnQucGZvcm1hdChvLCB3aWR0aD00OCwgY29tcGFjdD1UcnVlKSwgZXhwZWN0ZWQpCisKIAogY2xhc3MgRG90dGVkUHJldHR5UHJpbnRlcihwcHJpbnQuUHJldHR5UHJpbnRlcik6CiAKQEAgLTU0NCw5ICs2MDAsNSBAQAogICAgICAgICAgICAgICAgIHNlbGYsIG9iamVjdCwgY29udGV4dCwgbWF4bGV2ZWxzLCBsZXZlbCkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChRdWVyeVRlc3RDYXNlKQotCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkgYi9MaWIvdGVzdC90ZXN0X3ByaW50LnB5CmluZGV4IDlkNmRiZWEuLjdlZWEzNDkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJpbnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9wcmludC5weQpAQCAtMSw2MiArMSw1NSBAQAotIiIiVGVzdCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcHJpbnQgZnVuY3Rpb24uCi0iIiIKLQotIyBJbiAyLjYsIHRoaXMgZ2l2ZXMgdXMgdGhlIGJlaGF2aW9yIHdlIHdhbnQuICBJbiAzLjAsIGl0IGhhcwotIyAgbm8gZnVuY3Rpb24sIGJ1dCBpdCBzdGlsbCBtdXN0IHBhcnNlIGNvcnJlY3RseS4KLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgcHJpbnRfZnVuY3Rpb24KLQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiAKLXRyeToKLSAgICAjIDMueAotICAgIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyAyLngKLSAgICBmcm9tIFN0cmluZ0lPIGltcG9ydCBTdHJpbmdJTworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIE5vdERlZmluZWQgPSBvYmplY3QoKQogCiAjIEEgZGlzcGF0Y2ggdGFibGUgYWxsIDggY29tYmluYXRpb25zIG9mIHByb3ZpZGluZwotIyAgc2VwLCBlbmQsIGFuZCBmaWxlCisjIHNlcCwgZW5kLCBhbmQgZmlsZS4KICMgSSB1c2UgdGhpcyBtYWNoaW5lcnkgc28gdGhhdCBJJ20gbm90IGp1c3QgcGFzc2luZyBkZWZhdWx0Ci0jICB2YWx1ZXMgdG8gcHJpbnQsIEknbSBlaXRoZXIgcGFzc2luZyBvciBub3QgcGFzc2luZyBpbiB0aGUKLSMgIGFyZ3VtZW50cworIyB2YWx1ZXMgdG8gcHJpbnQsIEknbSBlaXRoZXIgcGFzc2luZyBvciBub3QgcGFzc2luZyBpbiB0aGUKKyMgYXJndW1lbnRzLgogZGlzcGF0Y2ggPSB7CiAgICAgKEZhbHNlLCBGYWxzZSwgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KCphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludCgqYXJncyksCiAgICAgKEZhbHNlLCBGYWxzZSwgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZmlsZT1maWxlLCAqYXJncyksCiAgICAgKEZhbHNlLCBUcnVlLCAgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KGVuZD1lbmQsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChlbmQ9ZW5kLCAqYXJncyksCiAgICAgKEZhbHNlLCBUcnVlLCAgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCiAgICAgKFRydWUsICBGYWxzZSwgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCAqYXJncyksCiAgICAgKFRydWUsICBGYWxzZSwgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZmlsZT1maWxlLCAqYXJncyksCisgICAgICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZmlsZT1maWxlLCAqYXJncyksCiAgICAgKFRydWUsICBUcnVlLCAgRmFsc2UpOgotICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsICphcmdzKSwKKyAgICAgICAgbGFtYmRhIGFyZ3MsIHNlcCwgZW5kLCBmaWxlOiBwcmludChzZXA9c2VwLCBlbmQ9ZW5kLCAqYXJncyksCiAgICAgKFRydWUsICBUcnVlLCAgVHJ1ZSk6Ci0gICAgIGxhbWJkYSBhcmdzLCBzZXAsIGVuZCwgZmlsZTogcHJpbnQoc2VwPXNlcCwgZW5kPWVuZCwgZmlsZT1maWxlLCAqYXJncyksCi0gICAgfQorICAgICAgICBsYW1iZGEgYXJncywgc2VwLCBlbmQsIGZpbGU6IHByaW50KHNlcD1zZXAsIGVuZD1lbmQsIGZpbGU9ZmlsZSwgKmFyZ3MpLAorfQorCiAKICMgQ2xhc3MgdXNlZCB0byB0ZXN0IF9fc3RyX18gYW5kIHByaW50CiBjbGFzcyBDbGFzc1dpdGhfX3N0cl9fOgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4KToKICAgICAgICAgc2VsZi54ID0geAorCiAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLngKIAotY2xhc3MgVGVzdFByaW50KHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGFyZ3MsCi0gICAgICAgICAgICBzZXA9Tm90RGVmaW5lZCwgZW5kPU5vdERlZmluZWQsIGZpbGU9Tm90RGVmaW5lZCk6Ci0gICAgICAgICMgQ2FwdHVyZSBzeXMuc3Rkb3V0IGluIGEgU3RyaW5nSU8uICBDYWxsIHByaW50IHdpdGggYXJncywKLSAgICAgICAgIyAgYW5kIHdpdGggc2VwLCBlbmQsIGFuZCBmaWxlLCBpZiB0aGV5J3JlIGRlZmluZWQuICBSZXN1bHQKLSAgICAgICAgIyAgbXVzdCBtYXRjaCBleHBlY3RlZC4KIAotICAgICAgICAjIExvb2sgdXAgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiBpZiBzZXAsIGVuZCwgYW5kIGZpbGUKLSAgICAgICAgIyAgYXJlIGRlZmluZWQKK2NsYXNzIFRlc3RQcmludCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVGVzdCBjb3JyZWN0IG9wZXJhdGlvbiBvZiB0aGUgcHJpbnQgZnVuY3Rpb24uIiIiCisKKyAgICBkZWYgY2hlY2soc2VsZiwgZXhwZWN0ZWQsIGFyZ3MsCisgICAgICAgICAgICAgIHNlcD1Ob3REZWZpbmVkLCBlbmQ9Tm90RGVmaW5lZCwgZmlsZT1Ob3REZWZpbmVkKToKKyAgICAgICAgIyBDYXB0dXJlIHN5cy5zdGRvdXQgaW4gYSBTdHJpbmdJTy4gIENhbGwgcHJpbnQgd2l0aCBhcmdzLAorICAgICAgICAjIGFuZCB3aXRoIHNlcCwgZW5kLCBhbmQgZmlsZSwgaWYgdGhleSdyZSBkZWZpbmVkLiAgUmVzdWx0CisgICAgICAgICMgbXVzdCBtYXRjaCBleHBlY3RlZC4KKworICAgICAgICAjIExvb2sgdXAgdGhlIGFjdHVhbCBmdW5jdGlvbiB0byBjYWxsLCBiYXNlZCBvbiBpZiBzZXAsIGVuZCwKKyAgICAgICAgIyBhbmQgZmlsZSBhcmUgZGVmaW5lZC4KICAgICAgICAgZm4gPSBkaXNwYXRjaFsoc2VwIGlzIG5vdCBOb3REZWZpbmVkLAogICAgICAgICAgICAgICAgICAgICAgICBlbmQgaXMgbm90IE5vdERlZmluZWQsCiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUgaXMgbm90IE5vdERlZmluZWQpXQpAQCAtNjksNyArNjIsNyBAQAogICAgIGRlZiB0ZXN0X3ByaW50KHNlbGYpOgogICAgICAgICBkZWYgeChleHBlY3RlZCwgYXJncywgc2VwPU5vdERlZmluZWQsIGVuZD1Ob3REZWZpbmVkKToKICAgICAgICAgICAgICMgUnVuIHRoZSB0ZXN0IDIgd2F5czogbm90IHVzaW5nIGZpbGUsIGFuZCB1c2luZwotICAgICAgICAgICAgIyAgZmlsZSBkaXJlY3RlZCB0byBhIFN0cmluZ0lPCisgICAgICAgICAgICAjIGZpbGUgZGlyZWN0ZWQgdG8gYSBTdHJpbmdJTy4KIAogICAgICAgICAgICAgc2VsZi5jaGVjayhleHBlY3RlZCwgYXJncywgc2VwPXNlcCwgZW5kPWVuZCkKIApAQCAtMTAxLDExICs5NCw2IEBACiAgICAgICAgIHgoJypcbicsIChDbGFzc1dpdGhfX3N0cl9fKCcqJyksKSkKICAgICAgICAgeCgnYWJjIDFcbicsIChDbGFzc1dpdGhfX3N0cl9fKCdhYmMnKSwgMSkpCiAKLSMgICAgICAgICMgMi54IHVuaWNvZGUgdGVzdHMKLSMgICAgICAgIHgodScxIDJcbicsICgnMScsIHUnMicpKQotIyAgICAgICAgeCh1J3VcMTIzNFxuJywgKHUndVwxMjM0JywpKQotIyAgICAgICAgeCh1JyAgYWJjIDFcbicsICgnICcsIENsYXNzV2l0aF9fc3RyX18odSdhYmMnKSwgMSkpCi0KICAgICAgICAgIyBlcnJvcnMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwcmludCwgJycsIHNlcD0zKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHByaW50LCAnJywgZW5kPTMpCkBAIC0xMTMsMTIgKzEwMSwxNCBAQAogCiAgICAgZGVmIHRlc3RfcHJpbnRfZmx1c2goc2VsZik6CiAgICAgICAgICMgb3BlcmF0aW9uIG9mIHRoZSBmbHVzaCBmbGFnCi0gICAgICAgIGNsYXNzIGZpbGVsaWtlKCk6CisgICAgICAgIGNsYXNzIGZpbGVsaWtlOgogICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICAgICAgICAgIHNlbGYud3JpdHRlbiA9ICcnCiAgICAgICAgICAgICAgICAgc2VsZi5mbHVzaGVkID0gMAorCiAgICAgICAgICAgICBkZWYgd3JpdGUoc2VsZiwgc3RyKToKICAgICAgICAgICAgICAgICBzZWxmLndyaXR0ZW4gKz0gc3RyCisKICAgICAgICAgICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICAgICAgICAgICBzZWxmLmZsdXNoZWQgKz0gMQogCkBAIC0xMzAsMTUgKzEyMCwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZmx1c2hlZCwgMikKIAogICAgICAgICAjIGVuc3VyZSBleGNlcHRpb25zIGZyb20gZmx1c2ggYXJlIHBhc3NlZCB0aHJvdWdoCi0gICAgICAgIGNsYXNzIG5vZmx1c2goKToKKyAgICAgICAgY2xhc3Mgbm9mbHVzaDoKICAgICAgICAgICAgIGRlZiB3cml0ZShzZWxmLCBzdHIpOgogICAgICAgICAgICAgICAgIHBhc3MKKwogICAgICAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHByaW50LCAxLCBmaWxlPW5vZmx1c2goKSwgZmx1c2g9VHJ1ZSkKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RQcmludCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5IGIvTGliL3Rlc3QvdGVzdF9wcm9maWxlLnB5CmluZGV4IGNkN2VjNTguLjFmYzNjNDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHJvZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Byb2ZpbGUucHkKQEAgLTMsOSArMywxMSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IHBzdGF0cwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgb3MKIGZyb20gZGlmZmxpYiBpbXBvcnQgdW5pZmllZF9kaWZmCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdAorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcnVuX3VuaXR0ZXN0LCB1bmxpbmsKK2Zyb20gY29udGV4dGxpYiBpbXBvcnQgY29udGV4dG1hbmFnZXIKIAogaW1wb3J0IHByb2ZpbGUKIGZyb20gdGVzdC5wcm9maWxlZSBpbXBvcnQgdGVzdGZ1bmMsIHRpbWVyCkBAIC0xNCw5ICsxNiwxMyBAQAogY2xhc3MgUHJvZmlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgcHJvZmlsZXJjbGFzcyA9IHByb2ZpbGUuUHJvZmlsZQorICAgIHByb2ZpbGVybW9kdWxlID0gcHJvZmlsZQogICAgIG1ldGhvZG5hbWVzID0gWydwcmludF9zdGF0cycsICdwcmludF9jYWxsZXJzJywgJ3ByaW50X2NhbGxlZXMnXQogICAgIGV4cGVjdGVkX21heF9vdXRwdXQgPSAnOjAobWF4KScKIAorICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdW5saW5rKFRFU1RGTikKKwogICAgIGRlZiBnZXRfZXhwZWN0ZWRfb3V0cHV0KHNlbGYpOgogICAgICAgICByZXR1cm4gX1Byb2ZpbGVPdXRwdXQKIApAQCAtNzQsNiArODAsMTkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5leHBlY3RlZF9tYXhfb3V0cHV0LCByZXMsCiAgICAgICAgICAgICAgICAgIlByb2ZpbGluZyB7MCFyfSBkaWRuJ3QgcmVwb3J0IG1heDpcbnsxfSIuZm9ybWF0KHN0bXQsIHJlcykpCiAKKyAgICBkZWYgdGVzdF9ydW4oc2VsZik6CisgICAgICAgIHdpdGggc2lsZW50KCk6CisgICAgICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bigiaW50KCcxJykiKQorICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bigiaW50KCcxJykiLCBmaWxlbmFtZT1URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhURVNURk4pKQorCisgICAgZGVmIHRlc3RfcnVuY3R4KHNlbGYpOgorICAgICAgICB3aXRoIHNpbGVudCgpOgorICAgICAgICAgICAgc2VsZi5wcm9maWxlcm1vZHVsZS5ydW5jdHgoInRlc3RmdW5jKCkiLCBnbG9iYWxzKCksIGxvY2FscygpKQorICAgICAgICBzZWxmLnByb2ZpbGVybW9kdWxlLnJ1bmN0eCgidGVzdGZ1bmMoKSIsIGdsb2JhbHMoKSwgbG9jYWxzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWU9VEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoVEVTVEZOKSkKKwogCiBkZWYgcmVnZW5lcmF0ZV9leHBlY3RlZF9vdXRwdXQoZmlsZW5hbWUsIGNscyk6CiAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5yc3RyaXAoJ2NvJykKQEAgLTk1LDYgKzExNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICBtZXRob2QsIHJlc3VsdHNbaSsxXSkpCiAgICAgICAgIGYud3JpdGUoJ1xuaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjpcbiAgICBtYWluKClcbicpCiAKK0Bjb250ZXh0bWFuYWdlcgorZGVmIHNpbGVudCgpOgorICAgIHN0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICB0cnk6CisgICAgICAgIHN5cy5zdGRvdXQgPSBTdHJpbmdJTygpCisgICAgICAgIHlpZWxkCisgICAgZmluYWxseToKKyAgICAgICAgc3lzLnN0ZG91dCA9IHN0ZG91dAogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFByb2ZpbGVUZXN0KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wcm9wZXJ0eS5weSBiL0xpYi90ZXN0L3Rlc3RfcHJvcGVydHkucHkKaW5kZXggOTZlZWI4OC4uY2VlNzIwMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9wcm9wZXJ0eS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Byb3BlcnR5LnB5CkBAIC0xNDAsOSArMTQwLDkgQEAKICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBwcm9wZXJ0eSdzIF9faXNhYnN0cmFjdG1ldGhvZF9fIGRlc2NyaXB0b3IgZG9lcyB0aGUKICAgICAgICAgIyByaWdodCB0aGluZyB3aGVuIHByZXNlbnRlZCB3aXRoIGEgdmFsdWUgdGhhdCBmYWlscyB0cnV0aCB0ZXN0aW5nOgogICAgICAgICBjbGFzcyBOb3RCb29sKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19ub256ZXJvX18oc2VsZik6CisgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigpCi0gICAgICAgICAgICBfX2xlbl9fID0gX19ub256ZXJvX18KKyAgICAgICAgICAgIF9fbGVuX18gPSBfX2Jvb2xfXwogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgY2xhc3MgQyhvYmplY3QpOgogICAgICAgICAgICAgICAgIGRlZiBmb28oc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B0eS5weSBiL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CmluZGV4IDI5Mjk3ZjguLjg5MTY4NjEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHR5LnB5CkBAIC0xODcsNyArMTg3LDcgQEAKICAgICAgICAgICAgICMjZGVidWcoIlJlYWRpbmcgZnJvbSBtYXN0ZXJfZmQgbm93IHRoYXQgdGhlIGNoaWxkIGhhcyBleGl0ZWQiKQogICAgICAgICAgICAgIyN0cnk6CiAgICAgICAgICAgICAjIyAgICBzMSA9IG9zLnJlYWQobWFzdGVyX2ZkLCAxMDI0KQotICAgICAgICAgICAgIyNleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICAjI2V4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyMgICAgcGFzcwogICAgICAgICAgICAgIyNlbHNlOgogICAgICAgICAgICAgIyMgICAgcmFpc2UgVGVzdEZhaWxlZCgiUmVhZCBmcm9tIG1hc3Rlcl9mZCBkaWQgbm90IHJhaXNlIGV4Y2VwdGlvbiIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3B5X2NvbXBpbGUucHkKaW5kZXggZjNjMWE2YS4uYzFmZDRmNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weV9jb21waWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcHlfY29tcGlsZS5weQpAQCAtMSwxMSArMSwxNCBAQAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgb3MKIGltcG9ydCBweV9jb21waWxlCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3RhdAoraW1wb3J0IHN5cwogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBzY3JpcHRfaGVscGVyCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKwogCiBjbGFzcyBQeUNvbXBpbGVUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTEzLDcgKzE2LDcgQEAKICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgc2VsZi5zb3VyY2VfcGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmRpcmVjdG9yeSwgJ190ZXN0LnB5JykKICAgICAgICAgc2VsZi5weWNfcGF0aCA9IHNlbGYuc291cmNlX3BhdGggKyAnYycKLSAgICAgICAgc2VsZi5jYWNoZV9wYXRoID0gaW1wLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCisgICAgICAgIHNlbGYuY2FjaGVfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHNlbGYuc291cmNlX3BhdGgpCiAgICAgICAgIHNlbGYuY3dkX2RyaXZlID0gb3MucGF0aC5zcGxpdGRyaXZlKG9zLmdldGN3ZCgpKVswXQogICAgICAgICAjIEluIHRoZXNlIHRlc3RzIHdlIGNvbXB1dGUgcmVsYXRpdmUgcGF0aHMuICBXaGVuIHVzaW5nIFdpbmRvd3MsIHRoZQogICAgICAgICAjIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgcGF0aCBhbmQgdGhlICdzZWxmLnNvdXJjZV9wYXRoJyBtaWdodCBiZQpAQCAtMzUsMTYgKzM4LDM0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhzZWxmLnB5Y19wYXRoKSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhzZWxmLmNhY2hlX3BhdGgpKQogCisgICAgZGVmIHRlc3RfZG9fbm90X292ZXJ3cml0ZV9zeW1saW5rcyhzZWxmKToKKyAgICAgICAgIyBJbiB0aGUgZmFjZSBvZiBhIGNmaWxlIGFyZ3VtZW50IGJlaW5nIGEgc3ltbGluaywgYmFpbCBvdXQuCisgICAgICAgICMgSXNzdWUgIzE3MjIyCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLnN5bWxpbmsoc2VsZi5weWNfcGF0aCArICcuYWN0dWFsJywgc2VsZi5weWNfcGF0aCkKKyAgICAgICAgZXhjZXB0IChOb3RJbXBsZW1lbnRlZEVycm9yLCBPU0Vycm9yKToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25lZWQgdG8gYmUgYWJsZSB0byBjcmVhdGUgYSBzeW1saW5rIGZvciBhIGZpbGUnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYXNzZXJ0IG9zLnBhdGguaXNsaW5rKHNlbGYucHljX3BhdGgpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHNlbGYuc291cmNlX3BhdGgsIHNlbGYucHljX3BhdGgpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5kZXZudWxsKSBvciBvcy5wYXRoLmlzZmlsZShvcy5kZXZudWxsKSwKKyAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBvcy5kZXZudWxsIGFuZCBmb3IgaXQgdG8gYmUgYSBub24tcmVndWxhciBmaWxlJykKKyAgICBkZWYgdGVzdF9kb19ub3Rfb3ZlcndyaXRlX25vbnJlZ3VsYXJfZmlsZXMoc2VsZik6CisgICAgICAgICMgSW4gdGhlIGZhY2Ugb2YgYSBjZmlsZSBhcmd1bWVudCBiZWluZyBhIG5vbi1yZWd1bGFyIGZpbGUsIGJhaWwgb3V0LgorICAgICAgICAjIElzc3VlICMxNzIyMgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVFeGlzdHNFcnJvcik6CisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgb3MuZGV2bnVsbCkKKwogICAgIGRlZiB0ZXN0X2NhY2hlX3BhdGgoc2VsZik6CiAgICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShzZWxmLnNvdXJjZV9wYXRoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIAogICAgIGRlZiB0ZXN0X2N3ZChzZWxmKToKLSAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIoc2VsZi5kaXJlY3RvcnkpCi0gICAgICAgIHB5X2NvbXBpbGUuY29tcGlsZShvcy5wYXRoLmJhc2VuYW1lKHNlbGYuc291cmNlX3BhdGgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5iYXNlbmFtZShzZWxmLnB5Y19wYXRoKSkKLSAgICAgICAgb3MuY2hkaXIoY3dkKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChzZWxmLmRpcmVjdG9yeSk6CisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUob3MucGF0aC5iYXNlbmFtZShzZWxmLnNvdXJjZV9wYXRoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmJhc2VuYW1lKHNlbGYucHljX3BhdGgpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoc2VsZi5weWNfcGF0aCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHMoc2VsZi5jYWNoZV9wYXRoKSkKIApAQCAtNTQsOCArNzUsNDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYucHljX3BhdGgpKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHNlbGYuY2FjaGVfcGF0aCkpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQeUNvbXBpbGVUZXN0cykKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIob3MsICdnZXRldWlkJykgYW5kIG9zLmdldGV1aWQoKSA9PSAwLAorICAgICAgICAgICAgICAgICAgICAgJ25vbi1yb290IHVzZXIgcmVxdWlyZWQnKQorICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLAorICAgICAgICAgICAgICAgICAgICAgJ2Nhbm5vdCBjb250cm9sIGRpcmVjdG9yeSBwZXJtaXNzaW9ucyBvbiBXaW5kb3dzJykKKyAgICBkZWYgdGVzdF9leGNlcHRpb25zX3Byb3BhZ2F0ZShzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCBleGNlcHRpb25zIHJhaXNlZCB0aGFua3MgdG8gaXNzdWVzIHdpdGggd3JpdGluZworICAgICAgICAjIGJ5dGVjb2RlLgorICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzI0NAorICAgICAgICBtb2RlID0gb3Muc3RhdChzZWxmLmRpcmVjdG9yeSkKKyAgICAgICAgb3MuY2htb2Qoc2VsZi5kaXJlY3RvcnksIHN0YXQuU19JUkVBRCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoc2VsZi5zb3VyY2VfcGF0aCwgc2VsZi5weWNfcGF0aCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNobW9kKHNlbGYuZGlyZWN0b3J5LCBtb2RlLnN0X21vZGUpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nKHNlbGYpOgorICAgICAgICBiYWRfY29kaW5nID0gb3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdiYWRfY29kaW5nMi5weScpCisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHB5X2NvbXBpbGUuY29tcGlsZShiYWRfY29kaW5nLCBkb3JhaXNlPUZhbHNlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cygKKyAgICAgICAgICAgIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGJhZF9jb2RpbmcpKSkKKworICAgIGRlZiB0ZXN0X2RvdWJsZV9kb3Rfbm9fY2xvYmJlcihzZWxmKToKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjI5NjYKKyAgICAgICAgIyBweV9jb21waWxlIGZvby5iYXIucHkgLT4gX19weWNhY2hlX18vZm9vLmNweXRob24tMzQucHljCisgICAgICAgIHdlaXJkX3BhdGggPSBvcy5wYXRoLmpvaW4oc2VsZi5kaXJlY3RvcnksICdmb28uYmFyLnB5JykKKyAgICAgICAgY2FjaGVfcGF0aCA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKHdlaXJkX3BhdGgpCisgICAgICAgIHB5Y19wYXRoID0gd2VpcmRfcGF0aCArICdjJworICAgICAgICBoZWFkLCB0YWlsID0gb3MucGF0aC5zcGxpdChjYWNoZV9wYXRoKQorICAgICAgICBwZW51bHRpbWF0ZV90YWlsID0gb3MucGF0aC5iYXNlbmFtZShoZWFkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgb3MucGF0aC5qb2luKHBlbnVsdGltYXRlX3RhaWwsIHRhaWwpLAorICAgICAgICAgICAgb3MucGF0aC5qb2luKAorICAgICAgICAgICAgICAgICdfX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgJ2Zvby5iYXIue30ucHljJy5mb3JtYXQoc3lzLmltcGxlbWVudGF0aW9uLmNhY2hlX3RhZykpKQorICAgICAgICB3aXRoIG9wZW4od2VpcmRfcGF0aCwgJ3cnKSBhcyBmaWxlOgorICAgICAgICAgICAgZmlsZS53cml0ZSgneCA9IDEyM1xuJykKKyAgICAgICAgcHlfY29tcGlsZS5jb21waWxlKHdlaXJkX3BhdGgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhjYWNoZV9wYXRoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhweWNfcGF0aCkpCisKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWNsYnIucHkgYi9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQppbmRleCBlODM5ODllLi4zOWViNjVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5Y2xici5weQpAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ3B5Y2xicicpCiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2FzdCcpCiAgICAgICAgIHNlbGYuY2hlY2tNb2R1bGUoJ2RvY3Rlc3QnLCBpZ25vcmU9KCJUZXN0UmVzdWx0cyIsICJfU3Bvb2ZPdXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRG9jVGVzdENhc2UiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRvY1Rlc3RDYXNlIiwgJ19Eb2NUZXN0U3VpdGUnKSkKICAgICAgICAgc2VsZi5jaGVja01vZHVsZSgnZGlmZmxpYicsIGlnbm9yZT0oIk1hdGNoIiwpKQogCiAgICAgZGVmIHRlc3RfZGVjb3JhdG9ycyhzZWxmKToKQEAgLTE1OCw4ICsxNTgsOCBAQAogICAgICAgICBjbSgncmFuZG9tJywgaWdub3JlPSgnUmFuZG9tJywpKSAgIyBmcm9tIF9yYW5kb20gaW1wb3J0IFJhbmRvbSBhcyBDb3JlR2VuZXJhdG9yCiAgICAgICAgIGNtKCdjZ2knLCBpZ25vcmU9KCdsb2cnLCkpICAgICAgIyBzZXQgd2l0aCA9IGluIG1vZHVsZQogICAgICAgICBjbSgncGlja2xlJykKLSAgICAgICAgY20oJ2FpZmMnLCBpZ25vcmU9KCdvcGVuZnAnLCkpICAjIHNldCB3aXRoID0gaW4gbW9kdWxlCi0gICAgICAgIGNtKCdzcmVfcGFyc2UnLCBpZ25vcmU9KCdkdW1wJywpKSAjIGZyb20gc3JlX2NvbnN0YW50cyBpbXBvcnQgKgorICAgICAgICBjbSgnYWlmYycsIGlnbm9yZT0oJ29wZW5mcCcsICdfYWlmY19wYXJhbXMnKSkgICMgc2V0IHdpdGggPSBpbiBtb2R1bGUKKyAgICAgICAgY20oJ3NyZV9wYXJzZScsIGlnbm9yZT0oJ2R1bXAnLCAnZ3JvdXBzJykpICMgZnJvbSBzcmVfY29uc3RhbnRzIGltcG9ydCAqOyBwcm9wZXJ0eQogICAgICAgICBjbSgncGRiJykKICAgICAgICAgY20oJ3B5ZG9jJykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weSBiL0xpYi90ZXN0L3Rlc3RfcHlkb2MucHkKaW5kZXggY2U0NmQ2MC4uMzQzZGQyMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9weWRvYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3B5ZG9jLnB5CkBAIC0zLDE1ICszLDIxIEBACiBpbXBvcnQgYnVpbHRpbnMKIGltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgZGlmZmxpYgoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgaW5zcGVjdAogaW1wb3J0IHB5ZG9jCitpbXBvcnQgcHlfY29tcGlsZQogaW1wb3J0IGtleXdvcmQKK2ltcG9ydCBfcGlja2xlCiBpbXBvcnQgcGtndXRpbAogaW1wb3J0IHJlCitpbXBvcnQgc3RhdAogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRlc3Quc3VwcG9ydAogaW1wb3J0IHRpbWUKK2ltcG9ydCB0eXBlcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdXJsbGliLnBhcnNlCiBpbXBvcnQgeG1sLmV0cmVlCiBpbXBvcnQgdGV4dHdyYXAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCkBAIC0yMCw3ICsyNiw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKAogICAgIFRFU1RGTiwgcm10cmVlLAogICAgIHJlYXBfY2hpbGRyZW4sIHJlYXBfdGhyZWFkcywgY2FwdHVyZWRfb3V0cHV0LCBjYXB0dXJlZF9zdGRvdXQsCi0gICAgY2FwdHVyZWRfc3RkZXJyLCB1bmxpbmsKKyAgICBjYXB0dXJlZF9zdGRlcnIsIHVubGluaywgcmVxdWlyZXNfZG9jc3RyaW5ncwogKQogZnJvbSB0ZXN0IGltcG9ydCBweWRvY19tb2QKIApAQCAtMjksOSArMzUsOSBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKIAotIyBKdXN0IGluIGNhc2Ugc3lzLm1vZHVsZXNbInRlc3QiXSBoYXMgdGhlIG9wdGlvbmFsIGF0dHJpYnV0ZSBfX2xvYWRlcl9fLgotaWYgaGFzYXR0cihweWRvY19tb2QsICJfX2xvYWRlcl9fIik6Ci0gICAgZGVsIHB5ZG9jX21vZC5fX2xvYWRlcl9fCitjbGFzcyBub25hc2NpaToKKyAgICAn0KbQtSDQvdC1INC70LDRgtC40L3QuNGG0Y8nCisgICAgcGFzcwogCiBpZiB0ZXN0LnN1cHBvcnQuSEFWRV9ET0NTVFJJTkdTOgogICAgIGV4cGVjdGVkX2RhdGFfZG9jc3RyaW5ncyA9ICgKQEAgLTQ5LDYgKzU1LDcgQEAKICAgICBidWlsdGlucy5vYmplY3QKICAgICAgICAgQQogICAgICAgICBCCisgICAgICAgIEMKIFx4MjBceDIwXHgyMFx4MjAKICAgICBjbGFzcyBBKGJ1aWx0aW5zLm9iamVjdCkKICAgICAgfCAgSGVsbG8gYW5kIGdvb2RieWUKQEAgLTc2LDYgKzgzLDI2IEBACiAgICAgIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCBoZXJlOgogICAgICB8XHgyMFx4MjAKICAgICAgfCAgTk9fTUVBTklORyA9ICdlZ2dzJworXHgyMFx4MjBceDIwXHgyMAorICAgIGNsYXNzIEMoYnVpbHRpbnMub2JqZWN0KQorICAgICB8ICBNZXRob2RzIGRlZmluZWQgaGVyZToKKyAgICAgfFx4MjBceDIwCisgICAgIHwgIGdldF9hbnN3ZXIoc2VsZikKKyAgICAgfCAgICAgIFJldHVybiBzYXlfbm8oKQorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgaXNfaXRfdHJ1ZShzZWxmKQorICAgICB8ICAgICAgUmV0dXJuIHNlbGYuZ2V0X2Fuc3dlcigpCisgICAgIHxceDIwXHgyMAorICAgICB8ICBzYXlfbm8oc2VsZikKKyAgICAgfFx4MjBceDIwCisgICAgIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgfCAgRGF0YSBkZXNjcmlwdG9ycyBkZWZpbmVkIGhlcmU6CisgICAgIHxceDIwXHgyMAorICAgICB8ICBfX2RpY3RfXworICAgICB8ICAgICAgZGljdGlvbmFyeSBmb3IgaW5zdGFuY2UgdmFyaWFibGVzIChpZiBkZWZpbmVkKQorICAgICB8XHgyMFx4MjAKKyAgICAgfCAgX193ZWFrcmVmX18KKyAgICAgfCAgICAgIGxpc3Qgb2Ygd2VhayByZWZlcmVuY2VzIHRvIHRoZSBvYmplY3QgKGlmIGRlZmluZWQpCiAKIEZVTkNUSU9OUwogICAgIGRvY19mdW5jKCkKQEAgLTEyNiw2ICsxNTMsNyBAQAogPGRsPgogPGR0Pjxmb250IGZhY2U9ImhlbHZldGljYSwgYXJpYWwiPjxhIGhyZWY9InRlc3QucHlkb2NfbW9kLmh0bWwjQSI+QTwvYT4KIDwvZm9udD48L2R0PjxkdD48Zm9udCBmYWNlPSJoZWx2ZXRpY2EsIGFyaWFsIj48YSBocmVmPSJ0ZXN0LnB5ZG9jX21vZC5odG1sI0IiPkI8L2E+Cis8L2ZvbnQ+PC9kdD48ZHQ+PGZvbnQgZmFjZT0iaGVsdmV0aWNhLCBhcmlhbCI+PGEgaHJlZj0idGVzdC5weWRvY19tb2QuaHRtbCNDIj5DPC9hPgogPC9mb250PjwvZHQ+PC9kbD4KIDwvZGQ+CiA8L2RsPgpAQCAtMTY3LDYgKzE5NSwyOCBAQAogRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6PGJyPgogPGRsPjxkdD48c3Ryb25nPk5PX01FQU5JTkc8L3N0cm9uZz4gPSAnZWdncyc8L2RsPgogCis8L3RkPjwvdHI+PC90YWJsZT4gPHA+Cis8dGFibGUgd2lkdGg9IjEwMCUlIiBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTIgYm9yZGVyPTAgc3VtbWFyeT0ic2VjdGlvbiI+Cis8dHIgYmdjb2xvcj0iI2ZmYzhkOCI+Cis8dGQgY29sc3Bhbj0zIHZhbGlnbj1ib3R0b20+Jm5ic3A7PGJyPgorPGZvbnQgY29sb3I9IiMwMDAwMDAiIGZhY2U9ImhlbHZldGljYSwgYXJpYWwiPjxhIG5hbWU9IkMiPmNsYXNzIDxzdHJvbmc+Qzwvc3Ryb25nPjwvYT4oPGEgaHJlZj0iYnVpbHRpbnMuaHRtbCNvYmplY3QiPmJ1aWx0aW5zLm9iamVjdDwvYT4pPC9mb250PjwvdGQ+PC90cj4KK1x4MjBceDIwXHgyMFx4MjAKKzx0cj48dGQgYmdjb2xvcj0iI2ZmYzhkOCI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOzwvdHQ+PC90ZD48dGQ+Jm5ic3A7PC90ZD4KKzx0ZCB3aWR0aD0iMTAwJSUiPk1ldGhvZHMgZGVmaW5lZCBoZXJlOjxicj4KKzxkbD48ZHQ+PGEgbmFtZT0iQy1nZXRfYW5zd2VyIj48c3Ryb25nPmdldF9hbnN3ZXI8L3N0cm9uZz48L2E+KHNlbGYpPC9kdD48ZGQ+PHR0PlJldHVybiZuYnNwOzxhIGhyZWY9IiNDLXNheV9ubyI+c2F5X25vPC9hPigpPC90dD48L2RkPjwvZGw+CisKKzxkbD48ZHQ+PGEgbmFtZT0iQy1pc19pdF90cnVlIj48c3Ryb25nPmlzX2l0X3RydWU8L3N0cm9uZz48L2E+KHNlbGYpPC9kdD48ZGQ+PHR0PlJldHVybiZuYnNwO3NlbGYuPGEgaHJlZj0iI0MtZ2V0X2Fuc3dlciI+Z2V0X2Fuc3dlcjwvYT4oKTwvdHQ+PC9kZD48L2RsPgorCis8ZGw+PGR0PjxhIG5hbWU9IkMtc2F5X25vIj48c3Ryb25nPnNheV9ubzwvc3Ryb25nPjwvYT4oc2VsZik8L2R0PjwvZGw+CisKKzxocj4KK0RhdGEgZGVzY3JpcHRvcnMgZGVmaW5lZCBoZXJlOjxicj4KKzxkbD48ZHQ+PHN0cm9uZz5fX2RpY3RfXzwvc3Ryb25nPjwvZHQ+Cis8ZGQ+PHR0PmRpY3Rpb25hcnkmbmJzcDtmb3ImbmJzcDtpbnN0YW5jZSZuYnNwO3ZhcmlhYmxlcyZuYnNwOyhpZiZuYnNwO2RlZmluZWQpPC90dD48L2RkPgorPC9kbD4KKzxkbD48ZHQ+PHN0cm9uZz5fX3dlYWtyZWZfXzwvc3Ryb25nPjwvZHQ+Cis8ZGQ+PHR0Pmxpc3QmbmJzcDtvZiZuYnNwO3dlYWsmbmJzcDtyZWZlcmVuY2VzJm5ic3A7dG8mbmJzcDt0aGUmbmJzcDtvYmplY3QmbmJzcDsoaWYmbmJzcDtkZWZpbmVkKTwvdHQ+PC9kZD4KKzwvZGw+CiA8L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48cD4KIDx0YWJsZSB3aWR0aD0iMTAwJSUiIGNlbGxzcGFjaW5nPTAgY2VsbHBhZGRpbmc9MiBib3JkZXI9MCBzdW1tYXJ5PSJzZWN0aW9uIj4KIDx0ciBiZ2NvbG9yPSIjZWVhYTc3Ij4KQEAgLTIxMiw2ICsyNjIsNzUgQEAKICMgb3V0cHV0IHBhdHRlcm4gZm9yIG1vZHVsZSB3aXRoIGJhZCBpbXBvcnRzCiBiYWRpbXBvcnRfcGF0dGVybiA9ICJwcm9ibGVtIGluICVzIC0gSW1wb3J0RXJyb3I6IE5vIG1vZHVsZSBuYW1lZCAlciIKIAorZXhwZWN0ZWRfZHluYW1pY2F0dHJpYnV0ZV9wYXR0ZXJuID0gIiIiCitIZWxwIG9uIGNsYXNzIERBIGluIG1vZHVsZSAlczoKKworY2xhc3MgREEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgZGVzY3JpcHRvcnMgZGVmaW5lZCBoZXJlOgorIHxceDIwXHgyMAorIHwgIF9fZGljdF9fJXMKKyB8XHgyMFx4MjAKKyB8ICBfX3dlYWtyZWZfXyVzCisgfFx4MjBceDIwCisgfCAgaGFtCisgfFx4MjBceDIwCisgfCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YToKKyB8XHgyMFx4MjAKKyB8ICBoYW0gPSAnc3BhbScKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjEgPSAiIiIKK0hlbHAgb24gY2xhc3MgQ2xhc3MgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzcyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBpbmhlcml0ZWQgZnJvbSBNZXRhOgorIHxceDIwXHgyMAorIHwgIExJRkUgPSA0MgorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMiA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczEgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczEoYnVpbHRpbnMub2JqZWN0KQorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIiIiLnN0cmlwKCkKKworZXhwZWN0ZWRfdmlydHVhbGF0dHJpYnV0ZV9wYXR0ZXJuMyA9ICIiIgorSGVscCBvbiBjbGFzcyBDbGFzczIgaW4gbW9kdWxlICVzOgorCitjbGFzcyBDbGFzczIoQ2xhc3MxKQorIHwgIE1ldGhvZCByZXNvbHV0aW9uIG9yZGVyOgorIHwgICAgICBDbGFzczIKKyB8ICAgICAgQ2xhc3MxCisgfCAgICAgIGJ1aWx0aW5zLm9iamVjdAorIHxceDIwXHgyMAorIHwgIERhdGEgYW5kIG90aGVyIGF0dHJpYnV0ZXMgaW5oZXJpdGVkIGZyb20gTWV0YTE6CisgfFx4MjBceDIwCisgfCAgb25lID0gMQorIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEzOgorIHxceDIwXHgyMAorIHwgIHRocmVlID0gMworIHxceDIwXHgyMAorIHwgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyB8ICBEYXRhIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGluaGVyaXRlZCBmcm9tIE1ldGEyOgorIHxceDIwXHgyMAorIHwgIHR3byA9IDIKKyIiIi5zdHJpcCgpCisKK2V4cGVjdGVkX21pc3NpbmdhdHRyaWJ1dGVfcGF0dGVybiA9ICIiIgorSGVscCBvbiBjbGFzcyBDIGluIG1vZHVsZSAlczoKKworY2xhc3MgQyhidWlsdGlucy5vYmplY3QpCisgfCAgRGF0YSBhbmQgb3RoZXIgYXR0cmlidXRlcyBkZWZpbmVkIGhlcmU6CisgfFx4MjBceDIwCisgfCAgaGVyZSA9ICdwcmVzZW50IScKKyIiIi5zdHJpcCgpCisKIGRlZiBydW5fcHlkb2MobW9kdWxlX25hbWUsICphcmdzLCAqKmVudik6CiAgICAgIiIiCiAgICAgUnVucyBweWRvYyBvbiB0aGUgc3BlY2lmaWVkIG1vZHVsZS4gUmV0dXJucyB0aGUgc3RyaXBwZWQKQEAgLTI4NCw2ICs0MDMsMTMgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHBrZ3V0aWwud2Fsa19wYWNrYWdlcyA9IHdhbGtfcGFja2FnZXMKIAorICAgIGRlZiBjYWxsX3VybF9oYW5kbGVyKHNlbGYsIHVybCwgZXhwZWN0ZWRfdGl0bGUpOgorICAgICAgICB0ZXh0ID0gcHlkb2MuX3VybF9oYW5kbGVyKHVybCwgInRleHQvaHRtbCIpCisgICAgICAgIHJlc3VsdCA9IGdldF9odG1sX3RpdGxlKHRleHQpCisgICAgICAgICMgQ2hlY2sgdGhlIHRpdGxlIHRvIGVuc3VyZSBhbiB1bmV4cGVjdGVkIGVycm9yIHBhZ2Ugd2FzIG5vdCByZXR1cm5lZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWRfdGl0bGUsIHRleHQpCisgICAgICAgIHJldHVybiB0ZXh0CisKIAogY2xhc3MgUHlkb2NEb2NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMjkxLDE0ICs0MTcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfaHRtbF9kb2Moc2VsZik6CiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY19odG1sKHB5ZG9jX21vZCkKICAgICAgICAgbW9kX2ZpbGUgPSBpbnNwZWN0LmdldGFic2ZpbGUocHlkb2NfbW9kKQotICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgIGltcG9ydCBudHVybDJwYXRoCi0gICAgICAgICAgICBtb2RfdXJsID0gbnR1cmwycGF0aC5wYXRobmFtZTJ1cmwobW9kX2ZpbGUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBtb2RfdXJsID0gbW9kX2ZpbGUKKyAgICAgICAgbW9kX3VybCA9IHVybGxpYi5wYXJzZS5xdW90ZShtb2RfZmlsZSkKICAgICAgICAgZXhwZWN0ZWRfaHRtbCA9IGV4cGVjdGVkX2h0bWxfcGF0dGVybiAlICgKICAgICAgICAgICAgICAgICAgICAgICAgIChtb2RfdXJsLCBtb2RfZmlsZSwgZG9jX2xvYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfaHRtbF9kYXRhX2RvY3N0cmluZ3MpCkBAIC0zMTAsNiArNDMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfdGV4dF9kb2Moc2VsZik6CiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY190ZXh0KHB5ZG9jX21vZCkKICAgICAgICAgZXhwZWN0ZWRfdGV4dCA9IGV4cGVjdGVkX3RleHRfcGF0dGVybiAlICgKQEAgLTMyMCwxMSArNDQ0LDI5IEBACiAgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQogCisgICAgZGVmIHRlc3RfdGV4dF9lbnVtX21lbWJlcl93aXRoX3ZhbHVlX3plcm8oc2VsZik6CisgICAgICAgICMgVGVzdCBpc3N1ZSAjMjA2NTQgdG8gZW5zdXJlIGVudW0gbWVtYmVyIHdpdGggdmFsdWUgMCBjYW4gYmUKKyAgICAgICAgIyBkaXNwbGF5ZWQuIEl0IHVzZWQgdG8gdGhyb3cgS2V5RXJyb3I6ICd6ZXJvJy4KKyAgICAgICAgaW1wb3J0IGVudW0KKyAgICAgICAgY2xhc3MgQmluYXJ5SW50ZWdlcihlbnVtLkludEVudW0pOgorICAgICAgICAgICAgemVybyA9IDAKKyAgICAgICAgICAgIG9uZSA9IDEKKyAgICAgICAgZG9jID0gcHlkb2MucmVuZGVyX2RvYyhCaW5hcnlJbnRlZ2VyKQorICAgICAgICBzZWxmLmFzc2VydEluKCc8QmluYXJ5SW50ZWdlci56ZXJvOiAwPicsIGRvYykKKwogICAgIGRlZiB0ZXN0X2lzc3VlODIyNShzZWxmKToKICAgICAgICAgIyBUZXN0IGlzc3VlODIyNSB0byBlbnN1cmUgbm8gZG9jIGxpbmsgYXBwZWFycyBmb3IgeG1sLmV0cmVlCiAgICAgICAgIHJlc3VsdCwgZG9jX2xvYyA9IGdldF9weWRvY190ZXh0KHhtbC5ldHJlZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkb2NfbG9jLCAiIiwgIk1PRFVMRSBET0NTIGluY29ycmVjdGx5IGluY2x1ZGVzIGEgbGluayIpCiAKKyAgICBkZWYgdGVzdF9nZXRwYWdlcl93aXRoX3N0ZGluX25vbmUoc2VsZik6CisgICAgICAgIHByZXZpb3VzX3N0ZGluID0gc3lzLnN0ZGluCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IE5vbmUKKyAgICAgICAgICAgIHB5ZG9jLmdldHBhZ2VyKCkgIyBTaG91bGRuJ3QgZmFpbC4KKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHN5cy5zdGRpbiA9IHByZXZpb3VzX3N0ZGluCisKICAgICBkZWYgdGVzdF9ub25fc3RyX25hbWUoc2VsZik6CiAgICAgICAgICMgaXNzdWUxNDYzOAogICAgICAgICAjIFRyZWF0IGlsbGVnYWwgKG5vbi1zdHIpIG5hbWUgbGlrZSBubyBuYW1lCkBAIC0zNDMsNiArNDg1LDEzIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhwZWN0ZWQsIHJlc3VsdCwKICAgICAgICAgICAgICJkb2N1bWVudGF0aW9uIGZvciBtaXNzaW5nIG1vZHVsZSBmb3VuZCIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgJ0RvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtT08gYW5kIGFib3ZlJykKKyAgICBkZWYgdGVzdF9ub3RfYXNjaWkoc2VsZik6CisgICAgICAgIHJlc3VsdCA9IHJ1bl9weWRvYygndGVzdC50ZXN0X3B5ZG9jLm5vbmFzY2lpJywgUFlUSE9OSU9FTkNPRElORz0nYXNjaWknKQorICAgICAgICBlbmNvZGVkID0gbm9uYXNjaWkuX19kb2NfXy5lbmNvZGUoJ2FzY2lpJywgJ2JhY2tzbGFzaHJlcGxhY2UnKQorICAgICAgICBzZWxmLmFzc2VydEluKGVuY29kZWQsIHJlc3VsdCkKKwogICAgIGRlZiB0ZXN0X2lucHV0X3N0cmlwKHNlbGYpOgogICAgICAgICBtaXNzaW5nX21vZHVsZSA9ICIgdGVzdC5pX2FtX25vdF9oZXJlICIKICAgICAgICAgcmVzdWx0ID0gc3RyKHJ1bl9weWRvYyhtaXNzaW5nX21vZHVsZSksICdhc2NpaScpCkBAIC0zNjYsNiArNTE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICdEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZScpCiAgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAogICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCiAgICAgZGVmIHRlc3RfaGVscF9vdXRwdXRfcmVkaXJlY3Qoc2VsZik6CiAgICAgICAgICMgaXNzdWUgOTQwMjg2LCBpZiBvdXRwdXQgaXMgc2V0IGluIEhlbHBlciwgdGhlbiBhbGwgb3V0cHV0IGZyb20KICAgICAgICAgIyBIZWxwZXIuaGVscCBzaG91bGQgYmUgcmVkaXJlY3RlZApAQCAtNDIxLDYgKzU3MSw1MiBAQAogICAgICAgICAgICAgc3lub3BzaXMgPSBweWRvYy5zeW5vcHNpcyhURVNURk4sIHt9KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeW5vcHNpcywgJ2xpbmUgMTogaFx4ZTknKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICdEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU9PIGFuZCBhYm92ZScpCisgICAgZGVmIHRlc3Rfc3lub3BzaXNfc291cmNlbGVzcyhzZWxmKToKKyAgICAgICAgZXhwZWN0ZWQgPSBvcy5fX2RvY19fLnNwbGl0bGluZXMoKVswXQorICAgICAgICBmaWxlbmFtZSA9IG9zLl9fY2FjaGVkX18KKyAgICAgICAgc3lub3BzaXMgPSBweWRvYy5zeW5vcHNpcyhmaWxlbmFtZSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5bm9wc2lzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3N5bm9wc2lzX3NvdXJjZWxlc3NfZW1wdHlfZG9jKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2N3ZCgpIGFzIHRlc3RfZGlyOgorICAgICAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKHRlc3RfZGlyLCAnZm9vbW9kNDIucHknKQorICAgICAgICAgICAgY2FjaGVkX3BhdGggPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShpbml0X3BhdGgpCisgICAgICAgICAgICB3aXRoIG9wZW4oaW5pdF9wYXRoLCAndycpIGFzIGZvYmo6CisgICAgICAgICAgICAgICAgZm9iai53cml0ZSgiZm9vID0gMSIpCisgICAgICAgICAgICBweV9jb21waWxlLmNvbXBpbGUoaW5pdF9wYXRoKQorICAgICAgICAgICAgc3lub3BzaXMgPSBweWRvYy5zeW5vcHNpcyhpbml0X3BhdGgsIHt9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc3lub3BzaXMpCisgICAgICAgICAgICBzeW5vcHNpc19jYWNoZWQgPSBweWRvYy5zeW5vcHNpcyhjYWNoZWRfcGF0aCwge30pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzeW5vcHNpc19jYWNoZWQpCisKKyAgICBkZWYgdGVzdF9zcGxpdGRvY193aXRoX2Rlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICBleGFtcGxlX3N0cmluZyA9ICJJIEFtIEEgRG9jXG5cblxuSGVyZSBpcyBteSBkZXNjcmlwdGlvbiIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweWRvYy5zcGxpdGRvYyhleGFtcGxlX3N0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdJIEFtIEEgRG9jJywgJ1xuSGVyZSBpcyBteSBkZXNjcmlwdGlvbicpKQorCisgICAgZGVmIHRlc3RfaXNfb2JqZWN0X29yX21ldGhvZChzZWxmKToKKyAgICAgICAgZG9jID0gcHlkb2MuRG9jKCkKKyAgICAgICAgIyBCb3VuZCBNZXRob2QKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB5ZG9jLl9pc19zb21lX21ldGhvZChkb2MuZmFpbCkpCisgICAgICAgICMgTWV0aG9kIERlc2NyaXB0b3IKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHB5ZG9jLl9pc19zb21lX21ldGhvZChpbnQuX19hZGRfXykpCisgICAgICAgICMgU3RyaW5nCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocHlkb2MuX2lzX3NvbWVfbWV0aG9kKCJJIGFtIG5vdCBhIG1ldGhvZCIpKQorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZV93aGVuX25vdF9wYWNrYWdlKHNlbGYpOgorICAgICAgICB3aXRoIHRlc3Quc3VwcG9ydC50ZW1wX2N3ZCgpIGFzIHRlc3RfZGlyOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShweWRvYy5pc3BhY2thZ2UodGVzdF9kaXIpKQorCisgICAgZGVmIHRlc3RfaXNfcGFja2FnZV93aGVuX2lzX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnRlbXBfY3dkKCkgYXMgdGVzdF9kaXI6CisgICAgICAgICAgICBpbml0X3BhdGggPSBvcy5wYXRoLmpvaW4odGVzdF9kaXIsICdfX2luaXRfXy5weScpCisgICAgICAgICAgICBvcGVuKGluaXRfcGF0aCwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocHlkb2MuaXNwYWNrYWdlKHRlc3RfZGlyKSkKKyAgICAgICAgICAgIG9zLnJlbW92ZShpbml0X3BhdGgpCisKICAgICBkZWYgdGVzdF9hbGxtZXRob2RzKHNlbGYpOgogICAgICAgICAjIGlzc3VlIDE3NDc2OiBhbGxtZXRob2RzIHdhcyBubyBsb25nZXIgcmV0dXJuaW5nIHVuYm91bmQgbWV0aG9kcy4KICAgICAgICAgIyBUaGlzIHRlc3QgaXMgYSBiaXQgZnJhZ2lsZSBpbiB0aGUgZmFjZSBvZiBjaGFuZ2VzIHRvIG9iamVjdCBhbmQgdHlwZSwKQEAgLTQ1MSw2ICs2NDcsNyBAQAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi50ZXN0X2RpciA9IG9zLm1rZGlyKFRFU1RGTikKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJtdHJlZSwgVEVTVEZOKQorICAgICAgICBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKQogCiAgICAgZGVmIHRlc3RfYmFkaW1wb3J0KHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdHMgdGhlIGZpeCBmb3IgaXNzdWUgNTIzMCwgd2hlcmUgaWYgcHlkb2MgZm91bmQgdGhlIG1vZHVsZQpAQCAtNTA5LDYgKzcwNiw5NCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCAnJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZ2V0dmFsdWUoKSwgJycpCiAKKyAgICBkZWYgdGVzdF9hcHJvcG9zX2VtcHR5X2RvYyhzZWxmKToKKyAgICAgICAgcGtnZGlyID0gb3MucGF0aC5qb2luKFRFU1RGTiwgJ3dhbGtwa2cnKQorICAgICAgICBvcy5ta2Rpcihwa2dkaXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChybXRyZWUsIHBrZ2RpcikKKyAgICAgICAgaW5pdF9wYXRoID0gb3MucGF0aC5qb2luKHBrZ2RpciwgJ19faW5pdF9fLnB5JykKKyAgICAgICAgd2l0aCBvcGVuKGluaXRfcGF0aCwgJ3cnKSBhcyBmb2JqOgorICAgICAgICAgICAgZm9iai53cml0ZSgiZm9vID0gMSIpCisgICAgICAgIGN1cnJlbnRfbW9kZSA9IHN0YXQuU19JTU9ERShvcy5zdGF0KHBrZ2Rpcikuc3RfbW9kZSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2htb2QocGtnZGlyLCBjdXJyZW50X21vZGUgJiB+c3RhdC5TX0lFWEVDKQorICAgICAgICAgICAgd2l0aCBzZWxmLnJlc3RyaWN0X3dhbGtfcGFja2FnZXMocGF0aD1bVEVTVEZOXSksIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHN0ZG91dDoKKyAgICAgICAgICAgICAgICBweWRvYy5hcHJvcG9zKCcnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignd2Fsa3BrZycsIHN0ZG91dC5nZXR2YWx1ZSgpKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2htb2QocGtnZGlyLCBjdXJyZW50X21vZGUpCisKKyAgICBkZWYgdGVzdF91cmxfc2VhcmNoX3BhY2thZ2VfZXJyb3Ioc2VsZik6CisgICAgICAgICMgVVJMIGhhbmRsZXIgc2VhcmNoIHNob3VsZCBjb3BlIHdpdGggcGFja2FnZXMgdGhhdCByYWlzZSBleGNlcHRpb25zCisgICAgICAgIHBrZ2RpciA9IG9zLnBhdGguam9pbihURVNURk4sICJ0ZXN0X2Vycm9yX3BhY2thZ2UiKQorICAgICAgICBvcy5ta2Rpcihwa2dkaXIpCisgICAgICAgIGluaXQgPSBvcy5wYXRoLmpvaW4ocGtnZGlyLCAiX19pbml0X18ucHkiKQorICAgICAgICB3aXRoIG9wZW4oaW5pdCwgInd0IiwgZW5jb2Rpbmc9ImFzY2lpIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoIiIicmFpc2UgVmFsdWVFcnJvcigib3VjaCIpXG4iIiIpCisgICAgICAgIHdpdGggc2VsZi5yZXN0cmljdF93YWxrX3BhY2thZ2VzKHBhdGg9W1RFU1RGTl0pOgorICAgICAgICAgICAgIyBQYWNrYWdlIGhhcyB0byBiZSBpbXBvcnRhYmxlIGZvciB0aGUgZXJyb3IgdG8gaGF2ZSBhbnkgZWZmZWN0CisgICAgICAgICAgICBzYXZlZF9wYXRocyA9IHR1cGxlKHN5cy5wYXRoKQorICAgICAgICAgICAgc3lzLnBhdGguaW5zZXJ0KDAsIFRFU1RGTikKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgIm91Y2giKToKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IHRlc3RfZXJyb3JfcGFja2FnZSAgIyBTYW5pdHkgY2hlY2sKKworICAgICAgICAgICAgICAgIHRleHQgPSBzZWxmLmNhbGxfdXJsX2hhbmRsZXIoInNlYXJjaD9rZXk9dGVzdF9lcnJvcl9wYWNrYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgIlB5ZG9jOiBTZWFyY2ggUmVzdWx0cyIpCisgICAgICAgICAgICAgICAgZm91bmQgPSAoJzxhIGhyZWY9InRlc3RfZXJyb3JfcGFja2FnZS5odG1sIj4nCisgICAgICAgICAgICAgICAgICAgICd0ZXN0X2Vycm9yX3BhY2thZ2U8L2E+JykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGZvdW5kLCB0ZXh0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzeXMucGF0aFs6XSA9IHNhdmVkX3BhdGhzCisKKyAgICBAdW5pdHRlc3Quc2tpcCgnY2F1c2VzIHVuZGVzaXJlYWJsZSBzaWRlLWVmZmVjdHMgKCMyMDEyOCknKQorICAgIGRlZiB0ZXN0X21vZHVsZXMoc2VsZik6CisgICAgICAgICMgU2VlIEhlbHBlci5saXN0bW9kdWxlcygpLgorICAgICAgICBudW1faGVhZGVyX2xpbmVzID0gMgorICAgICAgICBudW1fbW9kdWxlX2xpbmVzX21pbiA9IDUgICMgUGxheWluZyBpdCBzYWZlLgorICAgICAgICBudW1fZm9vdGVyX2xpbmVzID0gMworICAgICAgICBleHBlY3RlZCA9IG51bV9oZWFkZXJfbGluZXMgKyBudW1fbW9kdWxlX2xpbmVzX21pbiArIG51bV9mb290ZXJfbGluZXMKKworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoJ21vZHVsZXMnKQorICAgICAgICByZXN1bHQgPSBvdXRwdXQuZ2V0dmFsdWUoKS5zdHJpcCgpCisgICAgICAgIG51bV9saW5lcyA9IGxlbihyZXN1bHQuc3BsaXRsaW5lcygpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bV9saW5lcywgZXhwZWN0ZWQpCisKKyAgICBAdW5pdHRlc3Quc2tpcCgnY2F1c2VzIHVuZGVzaXJlYWJsZSBzaWRlLWVmZmVjdHMgKCMyMDEyOCknKQorICAgIGRlZiB0ZXN0X21vZHVsZXNfc2VhcmNoKHNlbGYpOgorICAgICAgICAjIFNlZSBIZWxwZXIubGlzdG1vZHVsZXMoKS4KKyAgICAgICAgZXhwZWN0ZWQgPSAncHlkb2MgLSAnCisKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBoZWxwX2lvOgorICAgICAgICAgICAgaGVscGVyKCdtb2R1bGVzIHB5ZG9jJykKKyAgICAgICAgcmVzdWx0ID0gaGVscF9pby5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJbihleHBlY3RlZCwgcmVzdWx0KQorCisgICAgQHVuaXR0ZXN0LnNraXAoJ3NvbWUgYnVpbGRib3RzIGFyZSBub3QgY29vcGVyYXRpbmcgKCMyMDEyOCknKQorICAgIGRlZiB0ZXN0X21vZHVsZXNfc2VhcmNoX2J1aWx0aW4oc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gJ2djIC0gJworCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgaGVscF9pbzoKKyAgICAgICAgICAgIGhlbHBlcignbW9kdWxlcyBnYXJiYWdlJykKKyAgICAgICAgcmVzdWx0ID0gaGVscF9pby5nZXR2YWx1ZSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC5zdGFydHN3aXRoKGV4cGVjdGVkKSkKKworICAgIGRlZiB0ZXN0X2ltcG9ydGZpbGUoc2VsZik6CisgICAgICAgIGxvYWRlZF9weWRvYyA9IHB5ZG9jLmltcG9ydGZpbGUocHlkb2MuX19maWxlX18pCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChsb2FkZWRfcHlkb2MsIHB5ZG9jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZF9weWRvYy5fX25hbWVfXywgJ3B5ZG9jJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2FkZWRfcHlkb2MuX19maWxlX18sIHB5ZG9jLl9fZmlsZV9fKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxvYWRlZF9weWRvYy5fX3NwZWNfXywgcHlkb2MuX19zcGVjX18pCisKIAogY2xhc3MgVGVzdERlc2NyaXB0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTUzNiw3ICs4MjEsNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB5ZG9jLnJlbmRlcl9kb2MobmFtZSkKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZpbmRpbmcgdGhlIGRvYyBvZiB7IXJ9IGZhaWxlZCcuZm9ybWF0KG8pKQorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmluZGluZyB0aGUgZG9jIG9mIHshcn0gZmFpbGVkJy5mb3JtYXQobmFtZSkpCiAKICAgICAgICAgZm9yIG5hbWUgaW4gKCdub3RidWlsdGlucycsICdzdHJycicsICdzdHJyLnRyYW5zbGF0ZScsCiAgICAgICAgICAgICAgICAgICAgICAnc3RyLnRycnJyYW5zbGF0ZScsICdidWlsdGlucy5zdHJycicsCkBAIC01NDQsNiArODI5LDQyIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShweWRvYy5sb2NhdGUobmFtZSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbXBvcnRFcnJvciwgcHlkb2MucmVuZGVyX2RvYywgbmFtZSkKIAorICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2dldF9zdW1tYXJ5X2xpbmUobyk6CisgICAgICAgIHRleHQgPSBweWRvYy5wbGFpbihweWRvYy5yZW5kZXJfZG9jKG8pKQorICAgICAgICBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJykKKyAgICAgICAgYXNzZXJ0IGxlbihsaW5lcykgPj0gMgorICAgICAgICByZXR1cm4gbGluZXNbMl0KKworICAgICMgdGhlc2Ugc2hvdWxkIGluY2x1ZGUgInNlbGYiCisgICAgZGVmIHRlc3RfdW5ib3VuZF9weXRob25fbWV0aG9kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9zdW1tYXJ5X2xpbmUodGV4dHdyYXAuVGV4dFdyYXBwZXIud3JhcCksCisgICAgICAgICAgICAid3JhcChzZWxmLCB0ZXh0KSIpCisKKyAgICBAcmVxdWlyZXNfZG9jc3RyaW5ncworICAgIGRlZiB0ZXN0X3VuYm91bmRfYnVpbHRpbl9tZXRob2Qoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZ2V0X3N1bW1hcnlfbGluZShfcGlja2xlLlBpY2tsZXIuZHVtcCksCisgICAgICAgICAgICAiZHVtcChzZWxmLCBvYmosIC8pIikKKworICAgICMgdGhlc2Ugbm8gbG9uZ2VyIGluY2x1ZGUgInNlbGYiCisgICAgZGVmIHRlc3RfYm91bmRfcHl0aG9uX21ldGhvZChzZWxmKToKKyAgICAgICAgdCA9IHRleHR3cmFwLlRleHRXcmFwcGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9nZXRfc3VtbWFyeV9saW5lKHQud3JhcCksCisgICAgICAgICAgICAid3JhcCh0ZXh0KSBtZXRob2Qgb2YgdGV4dHdyYXAuVGV4dFdyYXBwZXIgaW5zdGFuY2UiKQorCisgICAgQHJlcXVpcmVzX2RvY3N0cmluZ3MKKyAgICBkZWYgdGVzdF9ib3VuZF9idWlsdGluX21ldGhvZChzZWxmKToKKyAgICAgICAgcyA9IFN0cmluZ0lPKCkKKyAgICAgICAgcCA9IF9waWNrbGUuUGlja2xlcihzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9zdW1tYXJ5X2xpbmUocC5kdW1wKSwKKyAgICAgICAgICAgICJkdW1wKG9iaiwgLykgbWV0aG9kIG9mIF9waWNrbGUuUGlja2xlciBpbnN0YW5jZSIpCisKKyAgICAjIHRoaXMgc2hvdWxkICpuZXZlciogaW5jbHVkZSBzZWxmIQorICAgIEByZXF1aXJlc19kb2NzdHJpbmdzCisgICAgZGVmIHRlc3RfbW9kdWxlX2xldmVsX2NhbGxhYmxlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2dldF9zdW1tYXJ5X2xpbmUob3Muc3RhdCksCisgICAgICAgICAgICAic3RhdChwYXRoLCAqLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpIikKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgUHlkb2NTZXJ2ZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTYwMCwxNiArOTIxLDEyIEBACiAKICAgICAgICAgd2l0aCBzZWxmLnJlc3RyaWN0X3dhbGtfcGFja2FnZXMoKToKICAgICAgICAgICAgIGZvciB1cmwsIHRpdGxlIGluIHJlcXVlc3RzOgotICAgICAgICAgICAgICAgIHRleHQgPSBweWRvYy5fdXJsX2hhbmRsZXIodXJsLCAidGV4dC9odG1sIikKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBnZXRfaHRtbF90aXRsZSh0ZXh0KQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB0aXRsZSwgdGV4dCkKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxfdXJsX2hhbmRsZXIodXJsLCB0aXRsZSkKIAogICAgICAgICAgICAgcGF0aCA9IHN0cmluZy5fX2ZpbGVfXwogICAgICAgICAgICAgdGl0bGUgPSAiUHlkb2M6IGdldGZpbGUgIiArIHBhdGgKICAgICAgICAgICAgIHVybCA9ICJnZXRmaWxlP2tleT0iICsgcGF0aAotICAgICAgICAgICAgdGV4dCA9IHB5ZG9jLl91cmxfaGFuZGxlcih1cmwsICJ0ZXh0L2h0bWwiKQotICAgICAgICAgICAgcmVzdWx0ID0gZ2V0X2h0bWxfdGl0bGUodGV4dCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCB0aXRsZSkKKyAgICAgICAgICAgIHNlbGYuY2FsbF91cmxfaGFuZGxlcih1cmwsIHRpdGxlKQogCiAKIGNsYXNzIFRlc3RIZWxwZXIodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNjE3LDYgKzkzNCwxMzYgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQocHlkb2MuSGVscGVyLmtleXdvcmRzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQoa2V5d29yZC5rd2xpc3QpKQogCitjbGFzcyBQeWRvY1dpdGhNZXRhQ2xhc3Nlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X0R5bmFtaWNDbGFzc0F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgY2xhc3MgTWV0YSh0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09ICdoYW0nOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NwYW0nCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgREEobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgQHR5cGVzLkR5bmFtaWNDbGFzc0F0dHJpYnV0ZQorICAgICAgICAgICAgZGVmIGhhbShzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gJ2VnZ3MnCisgICAgICAgIGV4cGVjdGVkX3RleHRfZGF0YV9kb2NzdHJpbmdzID0gdHVwbGUoJ1xuIHwgICAgICAnICsgcyBpZiBzIGVsc2UgJycKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHMgaW4gZXhwZWN0ZWRfZGF0YV9kb2NzdHJpbmdzKQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoREEpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF9keW5hbWljYXR0cmlidXRlX3BhdHRlcm4gJSAoCisgICAgICAgICAgICAgICAgKF9fbmFtZV9fLCkgKyBleHBlY3RlZF90ZXh0X2RhdGFfZG9jc3RyaW5nc1s6Ml0pCisgICAgICAgIHJlc3VsdCA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0ICE9IGV4cGVjdGVkX3RleHQ6CisgICAgICAgICAgICBwcmludF9kaWZmcyhleHBlY3RlZF90ZXh0LCByZXN1bHQpCisgICAgICAgICAgICBzZWxmLmZhaWwoIm91dHB1dHMgYXJlIG5vdCBlcXVhbCwgc2VlIGRpZmYgYWJvdmUiKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAorICAgICAgICAgICAgICAgICAgICAgJ3RyYWNlIGZ1bmN0aW9uIGludHJvZHVjZXMgX19sb2NhbHNfXyB1bmV4cGVjdGVkbHknKQorICAgIGRlZiB0ZXN0X3ZpcnR1YWxDbGFzc0F0dHJpYnV0ZVdpdGhPbmVNZXRhKHNlbGYpOgorICAgICAgICBjbGFzcyBNZXRhKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdMSUZFJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J0xJRkUnOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gNDIKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHIobmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MobWV0YWNsYXNzPU1ldGEpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MpCisgICAgICAgIGV4cGVjdGVkX3RleHQgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4xICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKKyAgICBAdW5pdHRlc3Quc2tpcElmKGhhc2F0dHIoc3lzLCAnZ2V0dHJhY2UnKSBhbmQgc3lzLmdldHRyYWNlKCksCisgICAgICAgICAgICAgICAgICAgICAndHJhY2UgZnVuY3Rpb24gaW50cm9kdWNlcyBfX2xvY2Fsc19fIHVuZXhwZWN0ZWRseScpCisgICAgZGVmIHRlc3RfdmlydHVhbENsYXNzQXR0cmlidXRlV2l0aFR3b01ldGEoc2VsZik6CisgICAgICAgIGNsYXNzIE1ldGExKHR5cGUpOgorICAgICAgICAgICAgZGVmIF9fZGlyX18oY2xzKToKKyAgICAgICAgICAgICAgICByZXR1cm4gWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICdvbmUnXQorICAgICAgICAgICAgZGVmIF9fZ2V0YXR0cl9fKHNlbGYsIG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG5hbWUgPT0nb25lJzoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDEKKyAgICAgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJfXyhuYW1lKQorICAgICAgICBjbGFzcyBNZXRhMih0eXBlKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIFsnX19jbGFzc19fJywgJ19fbW9kdWxlX18nLCAnX19uYW1lX18nLCAndHdvJ10KKyAgICAgICAgICAgIGRlZiBfX2dldGF0dHJfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lID09J3R3byc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAyCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgTWV0YTMoTWV0YTEsIE1ldGEyKToKKyAgICAgICAgICAgIGRlZiBfX2Rpcl9fKGNscyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxpc3Qoc29ydGVkKHNldCgKKyAgICAgICAgICAgICAgICAgICAgWydfX2NsYXNzX18nLCAnX19tb2R1bGVfXycsICdfX25hbWVfXycsICd0aHJlZSddICsKKyAgICAgICAgICAgICAgICAgICAgTWV0YTEuX19kaXJfXyhjbHMpICsgTWV0YTIuX19kaXJfXyhjbHMpKSkpCisgICAgICAgICAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSA9PSd0aHJlZSc6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAzCisgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKCkuX19nZXRhdHRyX18obmFtZSkKKyAgICAgICAgY2xhc3MgQ2xhc3MxKG1ldGFjbGFzcz1NZXRhMSk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGNsYXNzIENsYXNzMihDbGFzczEsIG1ldGFjbGFzcz1NZXRhMyk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZhaWwxID0gZmFpbDIgPSBGYWxzZQorICAgICAgICBvdXRwdXQgPSBTdHJpbmdJTygpCisgICAgICAgIGhlbHBlciA9IHB5ZG9jLkhlbHBlcihvdXRwdXQ9b3V0cHV0KQorICAgICAgICBoZWxwZXIoQ2xhc3MxKQorICAgICAgICBleHBlY3RlZF90ZXh0MSA9IGV4cGVjdGVkX3ZpcnR1YWxhdHRyaWJ1dGVfcGF0dGVybjIgJSBfX25hbWVfXworICAgICAgICByZXN1bHQxID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQxICE9IGV4cGVjdGVkX3RleHQxOgorICAgICAgICAgICAgcHJpbnRfZGlmZnMoZXhwZWN0ZWRfdGV4dDEsIHJlc3VsdDEpCisgICAgICAgICAgICBmYWlsMSA9IFRydWUKKyAgICAgICAgb3V0cHV0ID0gU3RyaW5nSU8oKQorICAgICAgICBoZWxwZXIgPSBweWRvYy5IZWxwZXIob3V0cHV0PW91dHB1dCkKKyAgICAgICAgaGVscGVyKENsYXNzMikKKyAgICAgICAgZXhwZWN0ZWRfdGV4dDIgPSBleHBlY3RlZF92aXJ0dWFsYXR0cmlidXRlX3BhdHRlcm4zICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0MiA9IG91dHB1dC5nZXR2YWx1ZSgpLnN0cmlwKCkKKyAgICAgICAgaWYgcmVzdWx0MiAhPSBleHBlY3RlZF90ZXh0MjoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQyLCByZXN1bHQyKQorICAgICAgICAgICAgZmFpbDIgPSBUcnVlCisgICAgICAgIGlmIGZhaWwxIG9yIGZhaWwyOgorICAgICAgICAgICAgc2VsZi5mYWlsKCJvdXRwdXRzIGFyZSBub3QgZXF1YWwsIHNlZSBkaWZmIGFib3ZlIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLmZsYWdzLm9wdGltaXplID49IDIsCisgICAgICAgICAgICAgICAgICAgICAiRG9jc3RyaW5ncyBhcmUgb21pdHRlZCB3aXRoIC1PMiBhbmQgYWJvdmUiKQorICAgIEB1bml0dGVzdC5za2lwSWYoaGFzYXR0cihzeXMsICdnZXR0cmFjZScpIGFuZCBzeXMuZ2V0dHJhY2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICd0cmFjZSBmdW5jdGlvbiBpbnRyb2R1Y2VzIF9fbG9jYWxzX18gdW5leHBlY3RlZGx5JykKKyAgICBkZWYgdGVzdF9idWdneV9kaXIoc2VsZik6CisgICAgICAgIGNsYXNzIE0odHlwZSk6CisgICAgICAgICAgICBkZWYgX19kaXJfXyhjbHMpOgorICAgICAgICAgICAgICAgIHJldHVybiBbJ19fY2xhc3NfXycsICdfX25hbWVfXycsICdtaXNzaW5nJywgJ2hlcmUnXQorICAgICAgICBjbGFzcyBDKG1ldGFjbGFzcz1NKToKKyAgICAgICAgICAgIGhlcmUgPSAncHJlc2VudCEnCisgICAgICAgIG91dHB1dCA9IFN0cmluZ0lPKCkKKyAgICAgICAgaGVscGVyID0gcHlkb2MuSGVscGVyKG91dHB1dD1vdXRwdXQpCisgICAgICAgIGhlbHBlcihDKQorICAgICAgICBleHBlY3RlZF90ZXh0ID0gZXhwZWN0ZWRfbWlzc2luZ2F0dHJpYnV0ZV9wYXR0ZXJuICUgX19uYW1lX18KKyAgICAgICAgcmVzdWx0ID0gb3V0cHV0LmdldHZhbHVlKCkuc3RyaXAoKQorICAgICAgICBpZiByZXN1bHQgIT0gZXhwZWN0ZWRfdGV4dDoKKyAgICAgICAgICAgIHByaW50X2RpZmZzKGV4cGVjdGVkX3RleHQsIHJlc3VsdCkKKyAgICAgICAgICAgIHNlbGYuZmFpbCgib3V0cHV0cyBhcmUgbm90IGVxdWFsLCBzZWUgZGlmZiBhYm92ZSIpCisKKyAgICBkZWYgdGVzdF9yZXNvbHZlX2ZhbHNlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMzAwODogcHlkb2MgZW51bS57LEludH1FbnVtIGZhaWxlZAorICAgICAgICAjIGJlY2F1c2UgYm9vbChlbnVtLkVudW0pIGlzIEZhbHNlLgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIGhlbHBfaW86CisgICAgICAgICAgICBweWRvYy5oZWxwKCdlbnVtLkVudW0nKQorICAgICAgICBoZWxwdGV4dCA9IGhlbHBfaW8uZ2V0dmFsdWUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdjbGFzcyBFbnVtJywgaGVscHRleHQpCisKKwogQHJlYXBfdGhyZWFkcwogZGVmIHRlc3RfbWFpbigpOgogICAgIHRyeToKQEAgLTYyNiw2ICsxMDczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeWRvY1NlcnZlclRlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlkb2NVcmxIYW5kbGVyVGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0SGVscGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5ZG9jV2l0aE1ldGFDbGFzc2VzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICBmaW5hbGx5OgogICAgICAgICByZWFwX2NoaWxkcmVuKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weSBiL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weQppbmRleCA3OWM0Y2ZmLi44ZWM4MDhiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5CkBAIC0yLDcgKzIsMTEgQEAKICMgaGFuZGxlciwgYXJlIG9ic2N1cmUgYW5kIHVuaGVscGZ1bC4KIAogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0cmFjZWJhY2sKIAogZnJvbSB4bWwucGFyc2VycyBpbXBvcnQgZXhwYXQKIGZyb20geG1sLnBhcnNlcnMuZXhwYXQgaW1wb3J0IGVycm9ycwpAQCAtMTMsMjIgKzE3LDQ3IEBACiBjbGFzcyBTZXRBdHRyaWJ1dGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYucGFyc2VyID0gZXhwYXQuUGFyc2VyQ3JlYXRlKG5hbWVzcGFjZV9zZXBhcmF0b3I9JyEnKQotICAgICAgICBzZWxmLnNldF9nZXRfcGFpcnMgPSBbCi0gICAgICAgICAgICBbMCwgMF0sCi0gICAgICAgICAgICBbMSwgMV0sCi0gICAgICAgICAgICBbMiwgMV0sCi0gICAgICAgICAgICBbMCwgMF0sCi0gICAgICAgICAgICBdCisKKyAgICBkZWYgdGVzdF9idWZmZXJfdGV4dChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhcnNlci5idWZmZXJfdGV4dCwgRmFsc2UpCisgICAgICAgIGZvciB4IGluIDAsIDEsIDIsIDA6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5idWZmZXJfdGV4dCA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIuYnVmZmVyX3RleHQsIGJvb2woeCkpCisKKyAgICBkZWYgdGVzdF9uYW1lc3BhY2VfcHJlZml4ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIubmFtZXNwYWNlX3ByZWZpeGVzLCBGYWxzZSkKKyAgICAgICAgZm9yIHggaW4gMCwgMSwgMiwgMDoKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLm5hbWVzcGFjZV9wcmVmaXhlcyA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIubmFtZXNwYWNlX3ByZWZpeGVzLCBib29sKHgpKQogCiAgICAgZGVmIHRlc3Rfb3JkZXJlZF9hdHRyaWJ1dGVzKHNlbGYpOgotICAgICAgICBmb3IgeCwgeSBpbiBzZWxmLnNldF9nZXRfcGFpcnM6CisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzLCBGYWxzZSkKKyAgICAgICAgZm9yIHggaW4gMCwgMSwgMiwgMDoKICAgICAgICAgICAgIHNlbGYucGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IHgKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5wYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzLCB5KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMsIGJvb2woeCkpCiAKICAgICBkZWYgdGVzdF9zcGVjaWZpZWRfYXR0cmlidXRlcyhzZWxmKToKLSAgICAgICAgZm9yIHgsIHkgaW4gc2VsZi5zZXRfZ2V0X3BhaXJzOgorICAgICAgICBzZWxmLmFzc2VydElzKHNlbGYucGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzLCBGYWxzZSkKKyAgICAgICAgZm9yIHggaW4gMCwgMSwgMiwgMDoKICAgICAgICAgICAgIHNlbGYucGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0geAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcywgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMsIGJvb2woeCkpCisKKyAgICBkZWYgdGVzdF9zcGVjaWZpZWRfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcywgRmFsc2UpCisgICAgICAgIGZvciB4IGluIDAsIDEsIDIsIDA6CisgICAgICAgICAgICBzZWxmLnBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IHgKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc2VsZi5wYXJzZXIuc3BlY2lmaWVkX2F0dHJpYnV0ZXMsIGJvb2woeCkpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2F0dHJpYnV0ZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5wYXJzZXIucmV0dXJuc191bmljb2RlID0gMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucGFyc2VyLnJldHVybnNfdW5pY29kZQorCisgICAgICAgICMgSXNzdWUgIzI1MDE5CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2V0YXR0ciwgc2VsZi5wYXJzZXIsIHJhbmdlKDB4RiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5wYXJzZXIuX19zZXRhdHRyX18sIHJhbmdlKDB4RiksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZ2V0YXR0ciwgc2VsZi5wYXJzZXIsIHJhbmdlKDB4RikpCiAKIAogZGF0YSA9IGInJydcCkBAIC0yMzYsNiArMjY1LDE4IEBACiAgICAgICAgIG9wZXJhdGlvbnMgPSBvdXQub3V0CiAgICAgICAgIHNlbGYuX3ZlcmlmeV9wYXJzZV9vdXRwdXQob3BlcmF0aW9ucykKIAorICAgIGRlZiB0ZXN0X3BhcnNlX2FnYWluKHNlbGYpOgorICAgICAgICBwYXJzZXIgPSBleHBhdC5QYXJzZXJDcmVhdGUoKQorICAgICAgICBmaWxlID0gQnl0ZXNJTyhkYXRhKQorICAgICAgICBwYXJzZXIuUGFyc2VGaWxlKGZpbGUpCisgICAgICAgICMgSXNzdWUgNjY3NjogZW5zdXJlIGEgbWVhbmluZ2Z1bCBleGNlcHRpb24gaXMgcmFpc2VkIHdoZW4gYXR0ZW1wdGluZworICAgICAgICAjIHRvIHBhcnNlIG1vcmUgdGhhbiBvbmUgWE1MIGRvY3VtZW50IHBlciB4bWxwYXJzZXIgaW5zdGFuY2UsCisgICAgICAgICMgYSBsaW1pdGF0aW9uIG9mIHRoZSBFeHBhdCBsaWJyYXJ5LgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4cGF0LmVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHBhcnNlci5QYXJzZUZpbGUoZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBhdC5FcnJvclN0cmluZyhjbS5leGNlcHRpb24uY29kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGF0LmVycm9ycy5YTUxfRVJST1JfRklOSVNIRUQpCisKIGNsYXNzIE5hbWVzcGFjZVNlcGFyYXRvclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0X2xlZ2FsKHNlbGYpOgogICAgICAgICAjIFRlc3RzIHRoYXQgbWFrZSBzdXJlIHdlIGdldCBlcnJvcnMgd2hlbiB0aGUgbmFtZXNwYWNlX3NlcGFyYXRvciB2YWx1ZQpAQCAtNDA3LDcgKzQ0OCwxMSBAQAogICAgIGRlZiBTdGFydEVsZW1lbnRIYW5kbGVyKHNlbGYsIG5hbWUsIGF0dHJzKToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKG5hbWUpCiAKLSAgICBkZWYgdGVzdChzZWxmKToKKyAgICBkZWYgY2hlY2tfdHJhY2ViYWNrX2VudHJ5KHNlbGYsIGVudHJ5LCBmaWxlbmFtZSwgZnVuY25hbWUpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoZW50cnlbMF0pLCBmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeVsyXSwgZnVuY25hbWUpCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CiAgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCiAgICAgICAgIHBhcnNlci5TdGFydEVsZW1lbnRIYW5kbGVyID0gc2VsZi5TdGFydEVsZW1lbnRIYW5kbGVyCiAgICAgICAgIHRyeToKQEAgLTQxNyw2ICs0NjIsMTcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5hcmdzWzBdLCAnYScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBSdW50aW1lRXJyb3IgZm9yIGVsZW1lbnQgJ2EnLCBidXQiICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGZvdW5kICVyIiAlIGUuYXJnc1swXSkKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgdHJhY2ViYWNrIGNvbnRhaW5zIHRoZSByZWxldmFudCBsaW5lIGluIHB5ZXhwYXQuYworICAgICAgICAgICAgZW50cmllcyA9IHRyYWNlYmFjay5leHRyYWN0X3RiKGUuX190cmFjZWJhY2tfXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGVudHJpZXMpLCAzKQorICAgICAgICAgICAgc2VsZi5jaGVja190cmFjZWJhY2tfZW50cnkoZW50cmllc1swXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0ZXN0X3B5ZXhwYXQucHkiLCAidGVzdF9leGNlcHRpb24iKQorICAgICAgICAgICAgc2VsZi5jaGVja190cmFjZWJhY2tfZW50cnkoZW50cmllc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJweWV4cGF0LmMiLCAiU3RhcnRFbGVtZW50IikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfdHJhY2ViYWNrX2VudHJ5KGVudHJpZXNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGVzdF9weWV4cGF0LnB5IiwgIlN0YXJ0RWxlbWVudEhhbmRsZXIiKQorICAgICAgICAgICAgaWYgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2NhbGxfd2l0aF9mcmFtZSgiU3RhcnRFbGVtZW50IicsIGVudHJpZXNbMV1bM10pCiAKIAogIyBUZXN0IEN1cnJlbnQqIG1lbWJlcnM6CkBAIC00ODQsMTEgKzU0MCwxNCBAQAogICAgIGRlZiB0ZXN0X3dyb25nX3NpemUoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IGV4cGF0LlBhcnNlckNyZWF0ZSgpCiAgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKLSAgICAgICAgZGVmIGYoc2l6ZSk6Ci0gICAgICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSBzaXplCi0KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZiwgLTEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGYsIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSAtMQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gMAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICBwYXJzZXIuYnVmZmVyX3NpemUgPSBzeXMubWF4c2l6ZSArIDEKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgcGFyc2VyLmJ1ZmZlcl9zaXplID0gNTEyLjAKIAogICAgIGRlZiB0ZXN0X3VuY2hhbmdlZF9zaXplKHNlbGYpOgogICAgICAgICB4bWwxID0gYiI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSdpc284ODU5Jz8+PHM+IiArIGInYScgKiA1MTIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcXVvcHJpLnB5IGIvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKaW5kZXggNTgzZmQ0NS4uOTI1MTFmYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9xdW9wcmkucHkKQEAgLTEzOCw2ICsxMzgsMTMgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvcHJpLmRlY29kZXN0cmluZyhlKSwgcCkKIAogICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KKyAgICBkZWYgdGVzdF9kZWNvZGVzdHJpbmdfZG91YmxlX2VxdWFscyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyMTUxMSAtIEVuc3VyZSB0aGF0IGJ5dGUgc3RyaW5nIGlzIGNvbXBhcmVkIHRvIGJ5dGUgc3RyaW5nCisgICAgICAgICMgaW5zdGVhZCBvZiBpbnQgYnl0ZSB2YWx1ZQorICAgICAgICBkZWNvZGVkX3ZhbHVlLCBlbmNvZGVkX3ZhbHVlID0gKGIiMTIzPWZvdXIiLCBiIjEyMz09Zm91ciIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocXVvcHJpLmRlY29kZXN0cmluZyhlbmNvZGVkX3ZhbHVlKSwgZGVjb2RlZF92YWx1ZSkKKworICAgIEB3aXRocHl0aG9uaW1wbGVtZW50YXRpb24KICAgICBkZWYgdGVzdF9pZGVtcG90ZW50X3N0cmluZyhzZWxmKToKICAgICAgICAgZm9yIHAsIGUgaW4gc2VsZi5TVFJJTkdTOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxdW9wcmkuZGVjb2Rlc3RyaW5nKHF1b3ByaS5lbmNvZGVzdHJpbmcoZSkpLCBlKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yYW5kb20ucHkgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQppbmRleCBhNDc1MjA3Li40YjUyMzJmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JhbmRvbS5weQpAQCAtMSw4ICsxLDEwIEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC5tb2NrCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdGltZQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHdhcm5pbmdzCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgcGFydGlhbAogZnJvbSBtYXRoIGltcG9ydCBsb2csIGV4cCwgcGksIGZzdW0sIHNpbgogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKQEAgLTQ0LDYgKzQ2LDQ4IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5nZW4uc2VlZCwgMSwgMiwgMywgNCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0eXBlKHNlbGYuZ2VuKSwgW10pCiAKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLl91cmFuZG9tJykgIyBvcy51cmFuZG9tCisgICAgZGVmIHRlc3Rfc2VlZF93aGVuX3JhbmRvbW5lc3Nfc291cmNlX25vdF9mb3VuZChzZWxmLCB1cmFuZG9tX21vY2spOgorICAgICAgICAjIFJhbmRvbS5zZWVkKCkgdXNlcyB0aW1lLnRpbWUoKSB3aGVuIGFuIG9wZXJhdGluZyBzeXN0ZW0gc3BlY2lmaWMKKyAgICAgICAgIyByYW5kb21uZXNzIHNvdXJjZSBpcyBub3QgZm91bmQuIFRvIHRlc3QgdGhpcyBvbiBtYWNoaW5lcyB3ZXJlIGl0CisgICAgICAgICMgZXhpc3RzLCBydW4gdGhlIGFib3ZlIHRlc3QsIHRlc3Rfc2VlZGFyZ3MoKSwgYWdhaW4gYWZ0ZXIgbW9ja2luZworICAgICAgICAjIG9zLnVyYW5kb20oKSBzbyB0aGF0IGl0IHJhaXNlcyB0aGUgZXhjZXB0aW9uIGV4cGVjdGVkIHdoZW4gdGhlCisgICAgICAgICMgcmFuZG9tbmVzcyBzb3VyY2UgaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgdXJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gTm90SW1wbGVtZW50ZWRFcnJvcgorICAgICAgICBzZWxmLnRlc3Rfc2VlZGFyZ3MoKQorCisgICAgZGVmIHRlc3Rfc2h1ZmZsZShzZWxmKToKKyAgICAgICAgc2h1ZmZsZSA9IHNlbGYuZ2VuLnNodWZmbGUKKyAgICAgICAgbHN0ID0gW10KKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHN0LCBbXSkKKyAgICAgICAgbHN0ID0gWzM3XQorICAgICAgICBzaHVmZmxlKGxzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsc3QsIFszN10pCisgICAgICAgIHNlcXMgPSBbbGlzdChyYW5nZShuKSkgZm9yIG4gaW4gcmFuZ2UoMTApXQorICAgICAgICBzaHVmZmxlZF9zZXFzID0gW2xpc3QocmFuZ2UobikpIGZvciBuIGluIHJhbmdlKDEwKV0KKyAgICAgICAgZm9yIHNodWZmbGVkX3NlcSBpbiBzaHVmZmxlZF9zZXFzOgorICAgICAgICAgICAgc2h1ZmZsZShzaHVmZmxlZF9zZXEpCisgICAgICAgIGZvciAoc2VxLCBzaHVmZmxlZF9zZXEpIGluIHppcChzZXFzLCBzaHVmZmxlZF9zZXFzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHNlcSksIGxlbihzaHVmZmxlZF9zZXEpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXQoc2VxKSwgc2V0KHNodWZmbGVkX3NlcSkpCisgICAgICAgICMgVGhlIGFib3ZlIHRlc3RzIGFsbCB3b3VsZCBwYXNzIGlmIHRoZSBzaHVmZmxlIHdhcyBhCisgICAgICAgICMgbm8tb3AuIFRoZSBmb2xsb3dpbmcgbm9uLWRldGVybWluaXN0aWMgdGVzdCBjb3ZlcnMgdGhhdC4gIEl0CisgICAgICAgICMgYXNzZXJ0cyB0aGF0IHRoZSBzaHVmZmxlZCBzZXF1ZW5jZSBvZiAxMDAwIGRpc3RpbmN0IGVsZW1lbnRzCisgICAgICAgICMgbXVzdCBiZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgb25lLiBBbHRob3VnaCB0aGVyZSBpcworICAgICAgICAjIG1hdGhlbWF0aWNhbGx5IGEgbm9uLXplcm8gcHJvYmFiaWxpdHkgdGhhdCB0aGlzIGNvdWxkCisgICAgICAgICMgYWN0dWFsbHkgaGFwcGVuIGluIGEgZ2VudWluZWx5IHJhbmRvbSBzaHVmZmxlLCBpdCBpcworICAgICAgICAjIGNvbXBsZXRlbHkgbmVnbGlnaWJsZSwgZ2l2ZW4gdGhhdCB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlCisgICAgICAgICMgcGVybXV0YXRpb25zIG9mIDEwMDAgb2JqZWN0cyBpcyAxMDAwISAoZmFjdG9yaWFsIG9mIDEwMDApLAorICAgICAgICAjIHdoaWNoIGlzIGNvbnNpZGVyYWJseSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIG9mIGF0b21zIGluIHRoZQorICAgICAgICAjIHVuaXZlcnNlLi4uCisgICAgICAgIGxzdCA9IGxpc3QocmFuZ2UoMTAwMCkpCisgICAgICAgIHNodWZmbGVkX2xzdCA9IGxpc3QocmFuZ2UoMTAwMCkpCisgICAgICAgIHNodWZmbGUoc2h1ZmZsZWRfbHN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUobHN0ICE9IHNodWZmbGVkX2xzdCkKKyAgICAgICAgc2h1ZmZsZShsc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsc3QgIT0gc2h1ZmZsZWRfbHN0KQorCiAgICAgZGVmIHRlc3RfY2hvaWNlKHNlbGYpOgogICAgICAgICBjaG9pY2UgPSBzZWxmLmdlbi5jaG9pY2UKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKQEAgLTYzLDYgKzEwNyw4IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih1bmlxKSwgaykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh1bmlxIDw9IHNldChwb3B1bGF0aW9uKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdlbi5zYW1wbGUoW10sIDApLCBbXSkgICMgdGVzdCBlZGdlIGNhc2UgTj09az09MAorICAgICAgICAjIEV4Y2VwdGlvbiByYWlzZWQgaWYgc2l6ZSBvZiBzYW1wbGUgZXhjZWVkcyB0aGF0IG9mIHBvcHVsYXRpb24KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc2VsZi5nZW4uc2FtcGxlLCBwb3B1bGF0aW9uLCBOKzEpCiAKICAgICBkZWYgdGVzdF9zYW1wbGVfZGlzdHJpYnV0aW9uKHNlbGYpOgogICAgICAgICAjIEZvciB0aGUgZW50aXJlIGFsbG93YWJsZSByYW5nZSBvZiAwIDw9IGsgPD0gTiwgdmFsaWRhdGUgdGhhdApAQCAtMTEzLDExICsxNTksMTIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeTEsIHkyKQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIHN0YXRlID0gcGlja2xlLmR1bXBzKHNlbGYuZ2VuKQotICAgICAgICBvcmlnc2VxID0gW3NlbGYuZ2VuLnJhbmRvbSgpIGZvciBpIGluIHJhbmdlKDEwKV0KLSAgICAgICAgbmV3Z2VuID0gcGlja2xlLmxvYWRzKHN0YXRlKQotICAgICAgICByZXN0b3JlZHNlcSA9IFtuZXdnZW4ucmFuZG9tKCkgZm9yIGkgaW4gcmFuZ2UoMTApXQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9yaWdzZXEsIHJlc3RvcmVkc2VxKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHN0YXRlID0gcGlja2xlLmR1bXBzKHNlbGYuZ2VuLCBwcm90bykKKyAgICAgICAgICAgIG9yaWdzZXEgPSBbc2VsZi5nZW4ucmFuZG9tKCkgZm9yIGkgaW4gcmFuZ2UoMTApXQorICAgICAgICAgICAgbmV3Z2VuID0gcGlja2xlLmxvYWRzKHN0YXRlKQorICAgICAgICAgICAgcmVzdG9yZWRzZXEgPSBbbmV3Z2VuLnJhbmRvbSgpIGZvciBpIGluIHJhbmdlKDEwKV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3JpZ3NlcSwgcmVzdG9yZWRzZXEpCiAKICAgICBkZWYgdGVzdF9idWdfMTcyNzc4MChzZWxmKToKICAgICAgICAgIyB2ZXJpZnkgdGhhdCB2ZXJzaW9uLTItcGlja2xlcyBjYW4gYmUgbG9hZGVkCkBAIC0xNjksNyArMjE2LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmdlbi5nYXVzc19uZXh0LCBOb25lKQogCiAgICAgZGVmIHRlc3RfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHBpY2tsZS5kdW1wcywgc2VsZi5nZW4pCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoTm90SW1wbGVtZW50ZWRFcnJvciwgcGlja2xlLmR1bXBzLCBzZWxmLmdlbiwgcHJvdG8pCiAKICAgICBkZWYgdGVzdF81M19iaXRzX3Blcl9mbG9hdChzZWxmKToKICAgICAgICAgIyBUaGlzIHNob3VsZCBwYXNzIHdoZW5ldmVyIGEgQyBkb3VibGUgaGFzIDUzIGJpdCBwcmVjaXNpb24uCkBAIC0yMDMsNiArMjUxLDI1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNldChyYW5nZShzdGFydCxzdG9wKSksCiAgICAgICAgICAgICAgICAgc2V0KFtzZWxmLmdlbi5yYW5kcmFuZ2Uoc3RhcnQsc3RvcCkgZm9yIGkgaW4gcmFuZ2UoMTAwKV0pKQogCisgICAgZGVmIHRlc3RfcmFuZHJhbmdlX25vbnVuaXRfc3RlcChzZWxmKToKKyAgICAgICAgcmludCA9IHNlbGYuZ2VuLnJhbmRyYW5nZSgwLCAxMCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihyaW50LCAoMCwgMiwgNCwgNiwgOCkpCisgICAgICAgIHJpbnQgPSBzZWxmLmdlbi5yYW5kcmFuZ2UoMCwgMiwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyaW50LCAwKQorCisgICAgZGVmIHRlc3RfcmFuZHJhbmdlX2Vycm9ycyhzZWxmKToKKyAgICAgICAgcmFpc2VzID0gcGFydGlhbChzZWxmLmFzc2VydFJhaXNlcywgVmFsdWVFcnJvciwgc2VsZi5nZW4ucmFuZHJhbmdlKQorICAgICAgICAjIEVtcHR5IHJhbmdlCisgICAgICAgIHJhaXNlcygzLCAzKQorICAgICAgICByYWlzZXMoLTcyMSkKKyAgICAgICAgcmFpc2VzKDAsIDEwMCwgLTEyKQorICAgICAgICAjIE5vbi1pbnRlZ2VyIHN0YXJ0L3N0b3AKKyAgICAgICAgcmFpc2VzKDMuMTQxNTkpCisgICAgICAgIHJhaXNlcygwLCAyLjcxODI4KQorICAgICAgICAjIFplcm8gYW5kIG5vbi1pbnRlZ2VyIHN0ZXAKKyAgICAgICAgcmFpc2VzKDAsIDQyLCAwKQorICAgICAgICByYWlzZXMoMCwgNDIsIDMuMTQxNTkpCisKICAgICBkZWYgdGVzdF9nZW5yYW5kYml0cyhzZWxmKToKICAgICAgICAgIyBWZXJpZnkgcmFuZ2VzCiAgICAgICAgIGZvciBrIGluIHJhbmdlKDEsIDEwMDApOgpAQCAtMjcxLDYgKzMzOCwyMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKCdhJywpKjYyNSwgTm9uZSkpCiAgICAgICAgICMgTGFzdCBlbGVtZW50IHMvYiBhbiBpbnQgYWxzbwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZ2VuLnNldHN0YXRlLCAoMiwgKDAsKSo2MjQrKCdhJywpLCBOb25lKSkKKyAgICAgICAgIyBMYXN0IGVsZW1lbnQgcy9iIGJldHdlZW4gMCBhbmQgNjI0CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgIHNlbGYuZ2VuLnNldHN0YXRlKCgyLCAoMSwpKjYyNCsoNjI1LCksIE5vbmUpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKSk6CisgICAgICAgICAgICBzZWxmLmdlbi5zZXRzdGF0ZSgoMiwgKDEsKSo2MjQrKC0xLCksIE5vbmUpKQorCisgICAgICAgICMgTGl0dGxlIHRyaWNrIHRvIG1ha2UgInR1cGxlKHggJSAoMioqMzIpIGZvciB4IGluIGludGVybmFsc3RhdGUpIgorICAgICAgICAjIHJhaXNlIFZhbHVlRXJyb3IuIEkgY2Fubm90IHRoaW5rIG9mIGEgc2ltcGxlIHdheSB0byBhY2hpZXZlIHRoaXMsIHNvCisgICAgICAgICMgSSBhbSBvcHRpbmcgZm9yIHVzaW5nIGEgZ2VuZXJhdG9yIGFzIHRoZSBtaWRkbGUgYXJndW1lbnQgb2Ygc2V0c3RhdGUKKyAgICAgICAgIyB3aGljaCBhdHRlbXB0cyB0byBjYXN0IGEgTmFOIHRvIGludGVnZXIuCisgICAgICAgIHN0YXRlX3ZhbHVlcyA9IHNlbGYuZ2VuLmdldHN0YXRlKClbMV0KKyAgICAgICAgc3RhdGVfdmFsdWVzID0gbGlzdChzdGF0ZV92YWx1ZXMpCisgICAgICAgIHN0YXRlX3ZhbHVlc1stMV0gPSBmbG9hdCgnbmFuJykKKyAgICAgICAgc3RhdGUgPSAoaW50KHgpIGZvciB4IGluIHN0YXRlX3ZhbHVlcykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmdlbi5zZXRzdGF0ZSwgKDIsIHN0YXRlLCBOb25lKSkKIAogICAgIGRlZiB0ZXN0X3JlZmVyZW5jZUltcGxlbWVudGF0aW9uKHNlbGYpOgogICAgICAgICAjIENvbXBhcmUgdGhlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIHJlc3VsdHMgZnJvbSB0aGUgb3JpZ2luYWwKQEAgLTQxMSw2ICs0OTMsMzggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaywgbnVtYml0cykgICAgICAgICMgbm90ZSB0aGUgc3Ryb25nZXIgYXNzZXJ0aW9uCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoMioqayA+IG4gPiAyKiooay0xKSkgICAjIG5vdGUgdGhlIHN0cm9uZ2VyIGFzc2VydGlvbgogCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20ucmFuZG9tJykKKyAgICBkZWYgdGVzdF9yYW5kYmVsb3dfb3ZlcnJpZGVuX3JhbmRvbShzZWxmLCByYW5kb21fbW9jayk6CisgICAgICAgICMgUmFuZG9tLl9yYW5kYmVsb3coKSBjYW4gb25seSB1c2UgcmFuZG9tKCkgd2hlbiB0aGUgYnVpbHQtaW4gb25lCisgICAgICAgICMgaGFzIGJlZW4gb3ZlcnJpZGRlbiBidXQgbm8gbmV3IGdldHJhbmRiaXRzKCkgbWV0aG9kIHdhcyBzdXBwbGllZC4KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSByYW5kb20uU3lzdGVtUmFuZG9tKCkucmFuZG9tCisgICAgICAgIG1heHNpemUgPSAxPDxyYW5kb20uQlBGCisgICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToKKyAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgVXNlcldhcm5pbmcpCisgICAgICAgICAgICAjIFBvcHVsYXRpb24gcmFuZ2UgdG9vIGxhcmdlIChuID49IG1heHNpemUpCisgICAgICAgICAgICBzZWxmLmdlbi5fcmFuZGJlbG93KG1heHNpemUrMSwgbWF4c2l6ZSA9IG1heHNpemUpCisgICAgICAgIHNlbGYuZ2VuLl9yYW5kYmVsb3coNTY0MCwgbWF4c2l6ZSA9IG1heHNpemUpCisKKyAgICAgICAgIyBUaGlzIG1pZ2h0IGJlIGdvaW5nIHRvbyBmYXIgdG8gdGVzdCBhIHNpbmdsZSBsaW5lLCBidXQgYmVjYXVzZSBvZiBvdXIKKyAgICAgICAgIyBub2JsZSBhaW0gb2YgYWNoaWV2aW5nIDEwMCUgdGVzdCBjb3ZlcmFnZSB3ZSBuZWVkIHRvIHdyaXRlIGEgY2FzZSBpbgorICAgICAgICAjIHdoaWNoIHRoZSBmb2xsb3dpbmcgbGluZSBpbiBSYW5kb20uX3JhbmRiZWxvdygpIGdldHMgZXhlY3V0ZWQ6CisgICAgICAgICMKKyAgICAgICAgIyByZW0gPSBtYXhzaXplICUgbgorICAgICAgICAjIGxpbWl0ID0gKG1heHNpemUgLSByZW0pIC8gbWF4c2l6ZQorICAgICAgICAjIHIgPSByYW5kb20oKQorICAgICAgICAjIHdoaWxlIHIgPj0gbGltaXQ6CisgICAgICAgICMgICAgIHIgPSByYW5kb20oKSAjIDw9PSAqVGhpcyBsaW5lKiA8PT08CisgICAgICAgICMKKyAgICAgICAgIyBUaGVyZWZvcmUsIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSB3aGlsZSBsb29wIGlzIGV4ZWN1dGVkIGF0IGxlYXN0CisgICAgICAgICMgb25jZSwgd2UgbmVlZCB0byBtb2NrIHJhbmRvbSgpIHNvIHRoYXQgaXQgcmV0dXJucyBhIG51bWJlciBncmVhdGVyCisgICAgICAgICMgdGhhbiAnbGltaXQnIHRoZSBmaXJzdCB0aW1lIGl0IGdldHMgY2FsbGVkLgorCisgICAgICAgIG4gPSA0MgorICAgICAgICBlcHNpbG9uID0gMC4wMQorICAgICAgICBsaW1pdCA9IChtYXhzaXplIC0gKG1heHNpemUgJSBuKSkgLyBtYXhzaXplCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gW2xpbWl0ICsgZXBzaWxvbiwgbGltaXQgLSBlcHNpbG9uXQorICAgICAgICBzZWxmLmdlbi5fcmFuZGJlbG93KG4sIG1heHNpemUgPSBtYXhzaXplKQorCiAgICAgZGVmIHRlc3RfcmFuZHJhbmdlX2J1Z18xNTkwODkxKHNlbGYpOgogICAgICAgICBzdGFydCA9IDEwMDAwMDAwMDAwMDAKICAgICAgICAgc3RvcCA9IC0xMDAwMDAwMDAwMDAwMDAwMDAwMDAKQEAgLTQ5NSw3ICs2MDksNyBAQAogICAgICAgICBmb3IgdmFyaWF0ZSwgYXJncywgZXhwZWN0ZWQgaW4gWwogICAgICAgICAgICAgICAgIChnLnVuaWZvcm0sICgxMC4wLCAxMC4wKSwgMTAuMCksCiAgICAgICAgICAgICAgICAgKGcudHJpYW5ndWxhciwgKDEwLjAsIDEwLjApLCAxMC4wKSwKLSAgICAgICAgICAgICAgICAjKGcudHJpYW5ndWxhciwgKDEwLjAsIDEwLjAsIDEwLjApLCAxMC4wKSwKKyAgICAgICAgICAgICAgICAoZy50cmlhbmd1bGFyLCAoMTAuMCwgMTAuMCwgMTAuMCksIDEwLjApLAogICAgICAgICAgICAgICAgIChnLmV4cG92YXJpYXRlLCAoZmxvYXQoJ2luZicpLCksIDAuMCksCiAgICAgICAgICAgICAgICAgKGcudm9ubWlzZXN2YXJpYXRlLCAoMy4wLCBmbG9hdCgnaW5mJykpLCAzLjApLAogICAgICAgICAgICAgICAgIChnLmdhdXNzLCAoMTAuMCwgMC4wKSwgMTAuMCksCkBAIC01MjgsNiArNjQyLDEwNiBAQAogICAgICAgICByYW5kb20udm9ubWlzZXN2YXJpYXRlKDAsIDFlMTUpCiAgICAgICAgIHJhbmRvbS52b25taXNlc3ZhcmlhdGUoMCwgMWUxMDApCiAKKyAgICBkZWYgdGVzdF9nYW1tYXZhcmlhdGVfZXJyb3JzKHNlbGYpOgorICAgICAgICAjIEJvdGggYWxwaGEgYW5kIGJldGEgbXVzdCBiZSA+IDAuMAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByYW5kb20uZ2FtbWF2YXJpYXRlLCAtMSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgMCwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgMiwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcmFuZG9tLmdhbW1hdmFyaWF0ZSwgMSwgLTMpCisKKyAgICBAdW5pdHRlc3QubW9jay5wYXRjaCgncmFuZG9tLlJhbmRvbS5yYW5kb20nKQorICAgIGRlZiB0ZXN0X2dhbW1hdmFyaWF0ZV9mdWxsX2NvZGVfY292ZXJhZ2Uoc2VsZiwgcmFuZG9tX21vY2spOgorICAgICAgICAjIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgcG9zc2liaWxpdGllcyBpbiB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbgorICAgICAgICAjIG9mIHJhbmRvbS5nYW1tYXZhcmlhdGUoKSwgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiAnYWxwaGEnLiBXaGF0IHdlCisgICAgICAgICMgYXJlIGdvaW5nIHRvIGRvIGhlcmUgaXMgdG8gZml4IHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkgcmFuZG9tKCkgdG8KKyAgICAgICAgIyBnZW5lcmF0ZSB0ZXN0IGNhc2VzIHRoYXQgcHJvdmlkZSAxMDAlIGxpbmUgY292ZXJhZ2Ugb2YgdGhlIG1ldGhvZC4KKworICAgICAgICAjICMxOiBhbHBoYSA+IDEuMDogd2Ugd2FudCB0aGUgZmlyc3QgcmFuZG9tIG51bWJlciB0byBiZSBvdXRzaWRlIHRoZQorICAgICAgICAjIFsxZS03LCAuOTk5OTk5OV0gcmFuZ2UsIHNvIHRoYXQgdGhlIGNvbnRpbnVlIHN0YXRlbWVudCBleGVjdXRlcworICAgICAgICAjIG9uY2UuIFRoZSB2YWx1ZXMgb2YgdTEgYW5kIHUyIHdpbGwgYmUgMC41IGFuZCAwLjMsIHJlc3BlY3RpdmVseS4KKyAgICAgICAgcmFuZG9tX21vY2suc2lkZV9lZmZlY3QgPSBbMWUtOCwgMC41LCAwLjNdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZSgxLjEsIDIuMykKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXR1cm5lZF92YWx1ZSwgMi41MykKKworICAgICAgICAjICMyOiBhbHBoYSA9PSAxOiBmaXJzdCByYW5kb20gbnVtYmVyIGxlc3MgdGhhbiAxZS03IHRvIHRoYXQgdGhlIGJvZHkKKyAgICAgICAgIyBvZiB0aGUgd2hpbGUgbG9vcCBleGVjdXRlcyBvbmNlLiBUaGVuIHJhbmRvbS5yYW5kb20oKSByZXR1cm5zIDAuNDUsCisgICAgICAgICMgd2hpY2ggY2F1c2VzIHdoaWxlIHRvIHN0b3AgbG9vcGluZyBhbmQgdGhlIGFsZ29yaXRobSB0byB0ZXJtaW5hdGUuCisgICAgICAgIHJhbmRvbV9tb2NrLnNpZGVfZWZmZWN0ID0gWzFlLTgsIDAuNDVdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZSgxLjAsIDMuMTQpCisgICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwocmV0dXJuZWRfdmFsdWUsIDIuNTA3MzE0MTY2MTIzODAzKQorCisgICAgICAgICMgIzM6IDAgPCBhbHBoYSA8IDEuIFRoaXMgaXMgdGhlIG1vc3QgY29tcGxleCByZWdpb24gb2YgY29kZSB0byBjb3ZlciwKKyAgICAgICAgIyBhcyB0aGVyZSBhcmUgbXVsdGlwbGUgaWYtZWxzZSBzdGF0ZW1lbnRzLiBMZXQncyB0YWtlIGEgbG9vayBhdCB0aGUKKyAgICAgICAgIyBzb3VyY2UgY29kZSwgYW5kIGRldGVybWluZSB0aGUgdmFsdWVzIHRoYXQgd2UgbmVlZCBhY2NvcmRpbmdseToKKyAgICAgICAgIworICAgICAgICAjIHdoaWxlIDE6CisgICAgICAgICMgICAgIHUgPSByYW5kb20oKQorICAgICAgICAjICAgICBiID0gKF9lICsgYWxwaGEpL19lCisgICAgICAgICMgICAgIHAgPSBiKnUKKyAgICAgICAgIyAgICAgaWYgcCA8PSAxLjA6ICMgPD09PSAoQSkKKyAgICAgICAgIyAgICAgICAgIHggPSBwICoqICgxLjAvYWxwaGEpCisgICAgICAgICMgICAgIGVsc2U6ICMgPD09PSAoQikKKyAgICAgICAgIyAgICAgICAgIHggPSAtX2xvZygoYi1wKS9hbHBoYSkKKyAgICAgICAgIyAgICAgdTEgPSByYW5kb20oKQorICAgICAgICAjICAgICBpZiBwID4gMS4wOiAjIDw9PT0gKEMpCisgICAgICAgICMgICAgICAgICBpZiB1MSA8PSB4ICoqIChhbHBoYSAtIDEuMCk6ICMgPD09PSAoRCkKKyAgICAgICAgIyAgICAgICAgICAgICBicmVhaworICAgICAgICAjICAgICBlbGlmIHUxIDw9IF9leHAoLXgpOiAjIDw9PT0gKEUpCisgICAgICAgICMgICAgICAgICBicmVhaworICAgICAgICAjIHJldHVybiB4ICogYmV0YQorICAgICAgICAjCisgICAgICAgICMgRmlyc3QsIHdlIHdhbnQgKEEpIHRvIGJlIFRydWUuIEZvciB0aGF0IHdlIG5lZWQgdGhhdDoKKyAgICAgICAgIyBiKnJhbmRvbSgpIDw9IDEuMAorICAgICAgICAjIHIxID0gcmFuZG9tKCkgPD0gMS4wIC8gYgorICAgICAgICAjCisgICAgICAgICMgV2Ugbm93IGdldCB0byB0aGUgc2Vjb25kIGlmLWVsc2UgYnJhbmNoLCBhbmQgaGVyZSwgc2luY2UgcCA8PSAxLjAsCisgICAgICAgICMgKEMpIGlzIEZhbHNlIGFuZCB3ZSB0YWtlIHRoZSBlbGlmIGJyYW5jaCwgKEUpLiBGb3IgaXQgdG8gYmUgVHJ1ZSwKKyAgICAgICAgIyBzbyB0aGF0IHRoZSBicmVhayBpcyBleGVjdXRlZCwgd2UgbmVlZCB0aGF0OgorICAgICAgICAjIHIyID0gcmFuZG9tKCkgPD0gX2V4cCgteCkKKyAgICAgICAgIyByMiA8PSBfZXhwKC0ocCAqKiAoMS4wL2FscGhhKSkpCisgICAgICAgICMgcjIgPD0gX2V4cCgtKChiKnIxKSAqKiAoMS4wL2FscGhhKSkpCisKKyAgICAgICAgX2UgPSByYW5kb20uX2UKKyAgICAgICAgX2V4cCA9IHJhbmRvbS5fZXhwCisgICAgICAgIF9sb2cgPSByYW5kb20uX2xvZworICAgICAgICBhbHBoYSA9IDAuMzUKKyAgICAgICAgYmV0YSA9IDEuNDUKKyAgICAgICAgYiA9IChfZSArIGFscGhhKS9fZQorICAgICAgICBlcHNpbG9uID0gMC4wMQorCisgICAgICAgIHIxID0gMC44ODU5Mjk2NDQxNTY2ICMgMS4wIC8gYgorICAgICAgICByMiA9IDAuMzY3ODc5NDQxMTcxNCAjIF9leHAoLSgoYipyMSkgKiogKDEuMC9hbHBoYSkpKQorCisgICAgICAgICMgVGhlc2UgZm91ciAicmFuZG9tIiB2YWx1ZXMgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgdHJhY2U6CisgICAgICAgICMgKEEpIFRydWUsIChFKSBGYWxzZSAtLT4gW25leHQgaXRlcmF0aW9uIG9mIHdoaWxlXQorICAgICAgICAjIChBKSBUcnVlLCAoRSkgVHJ1ZSAtLT4gW3doaWxlIGxvb3AgYnJlYWtzXQorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFtyMSwgcjIgKyBlcHNpbG9uLCByMSwgcjJdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZShhbHBoYSwgYmV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXR1cm5lZF92YWx1ZSwgMS40NDk5OTk5OTk5OTk3NTQ0KQorCisgICAgICAgICMgTGV0J3Mgbm93IG1ha2UgKEEpIGJlIEZhbHNlLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB3aGVuIHdlIGdldCB0byB0aGUKKyAgICAgICAgIyBzZWNvbmQgaWYtZWxzZSAncCcgaXMgZ3JlYXRlciB0aGFuIDEsIHNvIChDKSBldmFsdWF0ZXMgdG8gVHJ1ZS4gV2UKKyAgICAgICAgIyBub3cgZW5jb3VudGVyIGEgc2Vjb25kIGlmIHN0YXRlbWVudCwgKEQpLCB3aGljaCBpbiBvcmRlciB0byBleGVjdXRlCisgICAgICAgICMgbXVzdCBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uOgorICAgICAgICAjIHIyIDw9IHggKiogKGFscGhhIC0gMS4wKQorICAgICAgICAjIHIyIDw9ICgtX2xvZygoYi1wKS9hbHBoYSkpICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgIyByMiA8PSAoLV9sb2coKGItKGIqcjEpKS9hbHBoYSkpICoqIChhbHBoYSAtIDEuMCkKKyAgICAgICAgcjEgPSAwLjg5NTkyOTY0NDE1NjYgIyAoMS4wIC8gYikgKyBlcHNpbG9uIC0tIHNvIHRoYXQgKEEpIGlzIEZhbHNlCisgICAgICAgIHIyID0gMC45NDQ1NDAwNDA4ODk4MTQxCisKKyAgICAgICAgIyBBbmQgdGhlc2UgZm91ciB2YWx1ZXMgcmVzdWx0IGluIHRoZSBmb2xsb3dpbmcgdHJhY2U6CisgICAgICAgICMgKEIpIGFuZCAoQykgVHJ1ZSwgKEQpIEZhbHNlIC0tPiBbbmV4dCBpdGVyYXRpb24gb2Ygd2hpbGVdCisgICAgICAgICMgKEIpIGFuZCAoQykgVHJ1ZSwgKEQpIFRydWUgW3doaWxlIGxvb3AgYnJlYWtzXQorICAgICAgICByYW5kb21fbW9jay5zaWRlX2VmZmVjdCA9IFtyMSwgcjIgKyBlcHNpbG9uLCByMSwgcjJdCisgICAgICAgIHJldHVybmVkX3ZhbHVlID0gcmFuZG9tLmdhbW1hdmFyaWF0ZShhbHBoYSwgYmV0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChyZXR1cm5lZF92YWx1ZSwgMS41ODMwMzQ5NTYxNzYwNzgxKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ3JhbmRvbS5SYW5kb20uZ2FtbWF2YXJpYXRlJykKKyAgICBkZWYgdGVzdF9iZXRhdmFyaWF0ZV9yZXR1cm5femVybyhzZWxmLCBnYW1tYXZhcmlhdGVfbW9jayk6CisgICAgICAgICMgYmV0YXZhcmlhdGUoKSByZXR1cm5zIHplcm8gd2hlbiB0aGUgR2FtbWEgZGlzdHJpYnV0aW9uCisgICAgICAgICMgdGhhdCBpdCB1c2VzIGludGVybmFsbHkgcmV0dXJucyB0aGlzIHNhbWUgdmFsdWUuCisgICAgICAgIGdhbW1hdmFyaWF0ZV9tb2NrLnJldHVybl92YWx1ZSA9IDAuMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuMCwgcmFuZG9tLmJldGF2YXJpYXRlKDIuNzE4MjgsIDMuMTQxNTkpKQogCiBjbGFzcyBUZXN0TW9kdWxlKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdE1hZ2ljQ29uc3RhbnRzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yYW5nZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmFuZ2UucHkKaW5kZXggYWFiOThhYi4uMmRiY2ViYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yYW5nZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JhbmdlLnB5CkBAIC0zMTMsNyArMzEzLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCByYW5nZSwgSU4oKSkKIAogICAgICAgICAjIFRlc3QgdXNlIG9mIHVzZXItZGVmaW5lZCBjbGFzc2VzIGluIHNsaWNlIGluZGljZXMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgxMClbOkkoNSldKSwgbGlzdChyYW5nZSg1KSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmFuZ2UoMTApWzpJKDUpXSwgcmFuZ2UoNSkpCiAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgogICAgICAgICAgICAgcmFuZ2UoMCwgMTApWzpJWCgpXQpAQCAtMzUzLDkgKzM1MywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgKDEzLCAyMSwgMyksICgtMiwgMiwgMiksICgyKio2NSwgMioqNjUrMildCiAgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgogICAgICAgICAgICAgZm9yIHQgaW4gdGVzdGNhc2VzOgotICAgICAgICAgICAgICAgIHIgPSByYW5nZSgqdCkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QocGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhyLCBwcm90bykpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QocikpCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QocHJvdG89cHJvdG8sIHRlc3Q9dCk6CisgICAgICAgICAgICAgICAgICAgIHIgPSByYW5nZSgqdCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHMociwgcHJvdG8pKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdChyKSkKIAogICAgIGRlZiB0ZXN0X2l0ZXJhdG9yX3BpY2tsaW5nKHNlbGYpOgogICAgICAgICB0ZXN0Y2FzZXMgPSBbKDEzLCksICgwLCAxMSksICgtMjIsIDEwKSwgKDIwLCAzLCAtMSksCkBAIC0zNjUsNyArMzY2LDcgQEAKICAgICAgICAgICAgICAgICBpdCA9IGl0b3JnID0gaXRlcihyYW5nZSgqdCkpCiAgICAgICAgICAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoKnQpKQogCi0gICAgICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKKyAgICAgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKICAgICAgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpdCksIGRhdGEpCkBAIC0zNzUsMzMgKzM3NiwzNSBAQAogICAgICAgICAgICAgICAgICAgICBuZXh0KGl0KQogICAgICAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICAgICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCisgICAgICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCwgcHJvdG8pCiAgICAgICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaXQpLCBkYXRhWzE6XSkKIAogICAgIGRlZiB0ZXN0X2V4aGF1c3RlZF9pdGVyYXRvcl9waWNrbGluZyhzZWxmKToKLSAgICAgICAgciA9IHJhbmdlKDIqKjY1LCAyKio2NSsyKQotICAgICAgICBpID0gaXRlcihyKQotICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgciA9IG5leHQoaSkKLSAgICAgICAgICAgIGlmIHIgPT0gMioqNjUrMToKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGkpCi0gICAgICAgIGkyID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChpMiksIFtdKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHIgPSByYW5nZSgyKio2NSwgMioqNjUrMikKKyAgICAgICAgICAgIGkgPSBpdGVyKHIpCisgICAgICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgICAgIHIgPSBuZXh0KGkpCisgICAgICAgICAgICAgICAgaWYgciA9PSAyKio2NSsxOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpLCBwcm90bykKKyAgICAgICAgICAgIGkyID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaSksIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGkyKSwgW10pCiAKICAgICBkZWYgdGVzdF9sYXJnZV9leGhhdXN0ZWRfaXRlcmF0b3JfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIHIgPSByYW5nZSgyMCkKLSAgICAgICAgaSA9IGl0ZXIocikKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIHIgPSBuZXh0KGkpCi0gICAgICAgICAgICBpZiByID09IDE5OgotICAgICAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaSkKLSAgICAgICAgaTIgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGkpLCBbXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGkyKSwgW10pCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgciA9IHJhbmdlKDIwKQorICAgICAgICAgICAgaSA9IGl0ZXIocikKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgciA9IG5leHQoaSkKKyAgICAgICAgICAgICAgICBpZiByID09IDE5OgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpLCBwcm90bykKKyAgICAgICAgICAgIGkyID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoaSksIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGkyKSwgW10pCiAKICAgICBkZWYgdGVzdF9vZGRfYnVnKHNlbGYpOgogICAgICAgICAjIFRoaXMgdXNlZCB0byByYWlzZSBhICJTeXN0ZW1FcnJvcjogTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciIKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmUucHkgYi9MaWIvdGVzdC90ZXN0X3JlLnB5CmluZGV4IDU0NjZiMjAuLjczNDhhZjMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZS5weQpAQCAtMSwxMiArMSwxNSBAQAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHZlcmJvc2UsIHJ1bl91bml0dGVzdCwgZ2NfY29sbGVjdCwgYmlnbWVtdGVzdCwgXzJHLCBcCiAgICAgICAgIGNweXRob25fb25seSwgY2FwdHVyZWRfc3Rkb3V0CiBpbXBvcnQgaW8KK2ltcG9ydCBsb2NhbGUKIGltcG9ydCByZQogZnJvbSByZSBpbXBvcnQgU2Nhbm5lcgoraW1wb3J0IHNyZV9jb21waWxlCiBpbXBvcnQgc3JlX2NvbnN0YW50cwogaW1wb3J0IHN5cwogaW1wb3J0IHN0cmluZwogaW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHdlYWtyZWYgaW1wb3J0IHByb3h5CiAKICMgTWlzYyB0ZXN0cyBmcm9tIFRpbSBQZXRlcnMnIHJlLmRvYwpAQCAtMTUsMTAgKzE4LDI2IEBACiAjIHdoYXQgeW91J3JlIGRvaW5nLiBTb21lIG9mIHRoZXNlIHRlc3RzIHdlcmUgY2FyZWZ1bGx5IG1vZGVsZWQgdG8KICMgY292ZXIgbW9zdCBvZiB0aGUgY29kZS4KIAotaW1wb3J0IHVuaXR0ZXN0CitjbGFzcyBTKHN0cik6CisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgcmV0dXJuIFMoc3VwZXIoKS5fX2dldGl0ZW1fXyhpbmRleCkpCisKK2NsYXNzIEIoYnl0ZXMpOgorICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIHJldHVybiBCKHN1cGVyKCkuX19nZXRpdGVtX18oaW5kZXgpKQogCiBjbGFzcyBSZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBhc3NlcnRUeXBlZEVxdWFsKHNlbGYsIGFjdHVhbCwgZXhwZWN0LCBtc2c9Tm9uZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWN0dWFsLCBleHBlY3QsIG1zZykKKyAgICAgICAgZGVmIHJlY3Vyc2UoYWN0dWFsLCBleHBlY3QpOgorICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3QsICh0dXBsZSwgbGlzdCkpOgorICAgICAgICAgICAgICAgIGZvciB4LCB5IGluIHppcChhY3R1YWwsIGV4cGVjdCk6CisgICAgICAgICAgICAgICAgICAgIHJlY3Vyc2UoeCwgeSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKGFjdHVhbCksIHR5cGUoZXhwZWN0KSwgbXNnKQorICAgICAgICByZWN1cnNlKGFjdHVhbCwgZXhwZWN0KQorCiAgICAgZGVmIHRlc3Rfa2VlcF9idWZmZXIoc2VsZik6CiAgICAgICAgICMgU2VlIGJ1ZyAxNDIxMgogICAgICAgICBiID0gYnl0ZWFycmF5KGIneCcpCkBAIC00MSwxOCArNjAsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goJ3gqJywgJ2F4eCcpLnNwYW4oKSwgKDAsIDApKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigwKSwgKDEsIDMpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgneCsnLCAnYXh4Jykuc3BhbigpLCAoMSwgMykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKCd4JywgJ2FhYScpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5zZWFyY2goJ3gnLCAnYWFhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EqJywgJ3h4eCcpLnNwYW4oMCksICgwLCAwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYSonLCAneHh4Jykuc3BhbigpLCAoMCwgMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ3gqJywgJ3h4eGEnKS5zcGFuKDApLCAoMCwgMykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ3gqJywgJ3h4eGEnKS5zcGFuKCksICgwLCAzKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnYSsnLCAneHh4JyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdhKycsICd4eHgnKSkKIAogICAgIGRlZiBidW1wX251bShzZWxmLCBtYXRjaG9iaik6CiAgICAgICAgIGludF92YWx1ZSA9IGludChtYXRjaG9iai5ncm91cCgwKSkKICAgICAgICAgcmV0dXJuIHN0cihpbnRfdmFsdWUgKyAxKQogCiAgICAgZGVmIHRlc3RfYmFzaWNfcmVfc3ViKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKCd5JywgJ2EnLCAneHl6JyksICd4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKCd5JywgUygnYScpLCBTKCd4eXonKSksICd4YXonKQorICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3ViKGIneScsIGInYScsIGIneHl6JyksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBCKGInYScpLCBCKGIneHl6JykpLCBiJ3hheicpCisgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zdWIoYid5JywgYnl0ZWFycmF5KGInYScpLCBieXRlYXJyYXkoYid4eXonKSksIGIneGF6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnN1YihiJ3knLCBtZW1vcnl2aWV3KGInYScpLCBtZW1vcnl2aWV3KGIneHl6JykpLCBiJ3hheicpCisgICAgICAgIGZvciB5IGluICgiXHhlMCIsICJcdTA0MzAiLCAiXFUwMDAxZDQ5YyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoeSwgJ2EnLCAneCVzeicgJSB5KSwgJ3hheicpCisKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIoIig/aSliKyIsICJ4IiwgImJiYmIgQkJCQiIpLCAneCB4JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWIocidcZCsnLCBzZWxmLmJ1bXBfbnVtLCAnMDguMiAtMiAyM3g5OXknKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAnOS4zIC0zIDI0eDEwMHknKQpAQCAtMjEwLDEwICsyMzgsMjkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zdWJuKCJiKiIsICJ4IiwgInh5eiIsIDIpLCAoJ3h4eHl6JywgMikpCiAKICAgICBkZWYgdGVzdF9yZV9zcGxpdChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOiIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICcnLCAnYyddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNwbGl0KCI6KiIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICdjJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KikiLCAiOmE6Yjo6YyIpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOjonLCAnYyddKQorICAgICAgICBmb3Igc3RyaW5nIGluICI6YTpiOjpjIiwgUygiOmE6Yjo6YyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KCI6Iiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJycsICdhJywgJ2InLCAnJywgJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdCgiOioiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJ2EnLCAnYicsICdjJ10pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuc3BsaXQoIig6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOjonLCAnYyddKQorICAgICAgICBmb3Igc3RyaW5nIGluIChiIjphOmI6OmMiLCBCKGIiOmE6Yjo6YyIpLCBieXRlYXJyYXkoYiI6YTpiOjpjIiksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiI6YTpiOjpjIikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLnNwbGl0KGIiOiIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2InJywgYidhJywgYidiJywgYicnLCBiJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChiIjoqIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYicnLCBiJ2EnLCBiJ2InLCBiJ2MnXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5zcGxpdChiIig6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiJycsIGInOicsIGInYScsIGInOicsIGInYicsIGInOjonLCBiJ2MnXSkKKyAgICAgICAgZm9yIGEsIGIsIGMgaW4gKCJceGUwXHhkZlx4ZTciLCAiXHUwNDMwXHUwNDMxXHUwNDMyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJcVTAwMDFkNDljXFUwMDAxZDQ5ZVxVMDAwMWQ0YjUiKToKKyAgICAgICAgICAgIHN0cmluZyA9ICI6JXM6JXM6OiVzIiAlIChhLCBiLCBjKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOiIsIHN0cmluZyksIFsnJywgYSwgYiwgJycsIGNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiOioiLCBzdHJpbmcpLCBbJycsIGEsIGIsIGNdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zcGxpdCgiKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCBhLCAnOicsIGIsICc6OicsIGNdKQorCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig/OjoqKSIsICI6YTpiOjpjIiksIFsnJywgJ2EnLCAnYicsICdjJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc3BsaXQoIig6KSoiLCAiOmE6Yjo6YyIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnJywgJzonLCAnYScsICc6JywgJ2InLCAnOicsICdjJ10pCkBAIC0yMzUsMjIgKzI4Miw1MyBAQAogCiAgICAgZGVmIHRlc3RfcmVfZmluZGFsbChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCI6KyIsICJhYmMiKSwgW10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiOisiLCAiYTpiOjpjOjo6ZCIpLCBbIjoiLCAiOjoiLCAiOjo6Il0pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKDorKSIsICJhOmI6OmM6OjpkIiksIFsiOiIsICI6OiIsICI6OjoiXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5maW5kYWxsKCIoOikoOiopIiwgImE6Yjo6Yzo6OmQiKSwgWygiOiIsICIiKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiOiIsICI6IiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIjoiLCAiOjoiKV0pCisgICAgICAgIGZvciBzdHJpbmcgaW4gImE6Yjo6Yzo6OmQiLCBTKCJhOmI6OmM6OjpkIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbCgiOisiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiOiIsICI6OiIsICI6OjoiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHlwZWRFcXVhbChyZS5maW5kYWxsKCIoOispIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbIjoiLCAiOjoiLCAiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbCgiKDopKDoqKSIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygiOiIsICIiKSwgKCI6IiwgIjoiKSwgKCI6IiwgIjo6IildKQorICAgICAgICBmb3Igc3RyaW5nIGluIChiImE6Yjo6Yzo6OmQiLCBCKGIiYTpiOjpjOjo6ZCIpLCBieXRlYXJyYXkoYiJhOmI6OmM6OjpkIiksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYiJhOmI6OmM6OjpkIikpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoYiI6KyIsIHN0cmluZyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2IiOiIsIGIiOjoiLCBiIjo6OiJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUeXBlZEVxdWFsKHJlLmZpbmRhbGwoYiIoOispIiwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYiI6IiwgYiI6OiIsIGIiOjo6Il0pCisgICAgICAgICAgICBzZWxmLmFzc2VydFR5cGVkRXF1YWwocmUuZmluZGFsbChiIig6KSg6KikiLCBzdHJpbmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsoYiI6IiwgYiIiKSwgKGIiOiIsIGIiOiIpLCAoYiI6IiwgYiI6OiIpXSkKKyAgICAgICAgZm9yIHggaW4gKCJceGUwIiwgIlx1MDQzMCIsICJcVTAwMDFkNDljIik6CisgICAgICAgICAgICB4eCA9IHggKiAyCisgICAgICAgICAgICB4eHggPSB4ICogMworICAgICAgICAgICAgc3RyaW5nID0gImElc2Ilc2Mlc2QiICUgKHgsIHh4LCB4eHgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIiVzKyIgJSB4LCBzdHJpbmcpLCBbeCwgeHgsIHh4eF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwoIiglcyspIiAlIHgsIHN0cmluZyksIFt4LCB4eCwgeHh4XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZmluZGFsbCgiKCVzKSglcyopIiAlICh4LCB4KSwgc3RyaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyh4LCAiIiksICh4LCB4KSwgKHgsIHh4KV0pCiAKICAgICBkZWYgdGVzdF9idWdfMTE3NjEyKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZpbmRhbGwociIoYXwoYikpIiwgImFiYSIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsoImEiLCAiIiksKCJiIiwgImIiKSwoImEiLCAiIildKQogCiAgICAgZGVmIHRlc3RfcmVfbWF0Y2goc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EnLCAnYScpLmdyb3VwcygpLCAoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKGEpJywgJ2EnKS5ncm91cHMoKSwgKCdhJywpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgwKSwgJ2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgxKSwgJ2EnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpJywgJ2EnKS5ncm91cCgxLCAxKSwgKCdhJywgJ2EnKSkKKyAgICAgICAgZm9yIHN0cmluZyBpbiAnYScsIFMoJ2EnKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ2EnLCBzdHJpbmcpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXBzKCksICgnYScsKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXAoMCksICdhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXAoMSksICdhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyhhKScsIHN0cmluZykuZ3JvdXAoMSwgMSksICgnYScsICdhJykpCisgICAgICAgIGZvciBzdHJpbmcgaW4gYidhJywgQihiJ2EnKSwgYnl0ZWFycmF5KGInYScpLCBtZW1vcnl2aWV3KGInYScpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJ2EnLCBzdHJpbmcpLmdyb3VwcygpLCAoKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwcygpLCAoYidhJywpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiJyhhKScsIHN0cmluZykuZ3JvdXAoMCksIGInYScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKGInKGEpJywgc3RyaW5nKS5ncm91cCgxKSwgYidhJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goYicoYSknLCBzdHJpbmcpLmdyb3VwKDEsIDEpLCAoYidhJywgYidhJykpCisgICAgICAgIGZvciBhIGluICgiXHhlMCIsICJcdTA0MzAiLCAiXFUwMDAxZDQ5YyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChhLCBhKS5ncm91cHMoKSwgKCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwcygpLCAoYSwpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnKCVzKScgJSBhLCBhKS5ncm91cCgwKSwgYSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJyglcyknICUgYSwgYSkuZ3JvdXAoMSksIGEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCcoJXMpJyAlIGEsIGEpLmdyb3VwKDEsIDEpLCAoYSwgYSkpCiAKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnKChhKXwoYikpKGMpPycpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCdhJykuZ3JvdXBzKCksICgnYScsICdhJywgTm9uZSwgTm9uZSkpCkBAIC0yNzIsMTMgKzM1MCw0MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCAnYicsIE5vbmUpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnYWMnKS5ncm91cCgxLCAnYjInLCAzKSwgKCdhJywgTm9uZSwgJ2MnKSkKIAorICAgIGRlZiB0ZXN0X3JlX2Z1bGxtYXRjaChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAxNjIwMzogUHJvcG9zYWw6IGFkZCByZS5mdWxsbWF0Y2goKSBtZXRob2QuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYSIsICJhIikuc3BhbigpLCAoMCwgMSkpCisgICAgICAgIGZvciBzdHJpbmcgaW4gImFiIiwgUygiYWIiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYXxhYiIsIHN0cmluZykuc3BhbigpLCAoMCwgMikpCisgICAgICAgIGZvciBzdHJpbmcgaW4gYiJhYiIsIEIoYiJhYiIpLCBieXRlYXJyYXkoYiJhYiIpLCBtZW1vcnl2aWV3KGIiYWIiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKGJyImF8YWIiLCBzdHJpbmcpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBmb3IgYSwgYiBpbiAiXHhlMFx4ZGYiLCAiXHUwNDMwXHUwNDMxIiwgIlxVMDAwMWQ0OWNcVTAwMDFkNDllIjoKKyAgICAgICAgICAgIHIgPSByIiVzfCVzIiAlIChhLCBhICsgYikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIsIGEgKyBiKS5zcGFuKCksICgwLCAyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociIuKj8kIiwgImFiYyIpLnNwYW4oKSwgKDAsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyIi4qPyIsICJhYmMiKS5zcGFuKCksICgwLCAzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5mdWxsbWF0Y2gociJhLio/YiIsICJhYiIpLnNwYW4oKSwgKDAsIDIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEuKj9iIiwgImFiYiIpLnNwYW4oKSwgKDAsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImEuKj9iIiwgImF4eGIiKS5zcGFuKCksICgwLCA0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYSsiLCAiYWIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuZnVsbG1hdGNoKHIiYWJjJCIsICJhYmNcbiIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5mdWxsbWF0Y2gociJhYmNcWiIsICJhYmNcbiIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5mdWxsbWF0Y2gociIoP20pYWJjJCIsICJhYmNcbiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmZ1bGxtYXRjaChyImFiKD89YyljZCIsICJhYmNkIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiYWIoPzw9YiljZCIsICJhYmNkIikuc3BhbigpLCAoMCwgNCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKHIiKD89YXxhYilhYiIsICJhYiIpLnNwYW4oKSwgKDAsIDIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICByZS5jb21waWxlKHIiYmMiKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyIi4qPyQiKS5mdWxsbWF0Y2goImFiY2QiLCBwb3M9MSwgZW5kcG9zPTMpLnNwYW4oKSwgKDEsIDMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgcmUuY29tcGlsZShyIi4qPyIpLmZ1bGxtYXRjaCgiYWJjZCIsIHBvcz0xLCBlbmRwb3M9Mykuc3BhbigpLCAoMSwgMykpCisKICAgICBkZWYgdGVzdF9yZV9ncm91cHJlZl9leGlzdHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJyhhKScpLmdyb3VwcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnKCcsICdhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJ2EnKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXihcKCk/KFteKCldKykoPygxKVwpKSQnLCAnYSknKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXihcKCk/KFteKCldKykoPygxKVwpKSQnLCAnKGEnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goJ14oXCgpPyhbXigpXSspKD8oMSlcKSkkJywgJ2EpJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCdeKFwoKT8oW14oKV0rKSg/KDEpXCkpJCcsICcoYScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCdeKD86KGEpfGMpKCg/KDEpYnxkKSkkJywgJ2FiJykuZ3JvdXBzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgJ2InKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgnXig/OihhKXxjKSgoPygxKWJ8ZCkpJCcsICdjZCcpLmdyb3VwcygpLApAQCAtMjk0LDggKzQwMiw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgJ2InLCAnYycpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAubWF0Y2goJ2FkJykuZ3JvdXBzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCdhJywgTm9uZSwgJ2QnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hdGNoKCdhYmQnKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLm1hdGNoKCdhYycpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwLm1hdGNoKCdhYmQnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocC5tYXRjaCgnYWMnKSkKIAogCiAgICAgZGVmIHRlc3RfcmVfZ3JvdXByZWYoc2VsZik6CkBAIC0zMDMsOCArNDExLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3wnLCAnYScpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMT8kJywgJ2EnKS5ncm91cHMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJ2EnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oXHwpPyhbXigpXSspXDEkJywgJ2F8JyksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKFx8KT8oW14oKV0rKVwxJCcsICd8YScpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ14oXHwpPyhbXigpXSspXDEkJywgJ2F8JykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInXihcfCk/KFteKCldKylcMSQnLCAnfGEnKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJ14oPzooYSl8YykoXDEpJCcsICdhYScpLmdyb3VwcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnYScsICdhJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocideKD86KGEpfGMpKFwxKT8kJywgJ2MnKS5ncm91cHMoKSwKQEAgLTMyMiwxMCArNDMwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBmaXJzdCBzZWNvbmQgZmlyc3QiKQogCiAgICAgZGVmIHRlc3RfcmVwZWF0X21pbm1heChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MX0kIiwgImFiYyIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxfT8kIiwgImFiYyIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDJ9JCIsICJhYmMiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSwyfT8kIiwgImFiYyIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXihcdyl7MX0kIiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXihcdyl7MX0/JCIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl4oXHcpezEsMn0kIiwgImFiYyIpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaCgiXihcdyl7MSwyfT8kIiwgImFiYyIpKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezN9JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeKFx3KXsxLDN9JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQpAQCAtMzM2LDIyICs0NDQsMjIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXihcdyl7MSw0fT8kIiwgImFiYyIpLmdyb3VwKDEpLCAiYyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl4oXHcpezMsNH0/JCIsICJhYmMiKS5ncm91cCgxKSwgImMiKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezF9JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXnh7MX0/JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiXnh7MSwyfSQiLCAieHh4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIl54ezEsMn0/JCIsICJ4eHgiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl54ezF9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl54ezF9PyQiLCAieHh4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCJeeHsxLDJ9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goIl54ezEsMn0/JCIsICJ4eHgiKSkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHszfSQiLCAieHh4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezEsM30kIiwgInh4eCIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDR9JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7Myw0fT8kIiwgInh4eCIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHszfT8kIiwgInh4eCIpLCBOb25lKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCJeeHsxLDN9PyQiLCAieHh4IiksIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocmUubWF0Y2goIl54ezEsNH0/JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7Myw0fT8kIiwgInh4eCIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIl54ezN9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDN9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDR9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHszLDR9PyQiLCAieHh4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgiXnh7M30/JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHsxLDN9PyQiLCAieHh4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgiXnh7MSw0fT8kIiwgInh4eCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIl54ezMsNH0/JCIsICJ4eHgiKSkKIAotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJeeHt9JCIsICJ4eHgiKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5tYXRjaCgiXnh7fSQiLCAieHt9IiksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKCJeeHt9JCIsICJ4eHgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKCJeeHt9JCIsICJ4e30iKSkKIAogICAgIGRlZiB0ZXN0X2dldGF0dHIoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZSgiKD9pKShhKShiKSIpLnBhdHRlcm4sICIoP2kpKGEpKGIpIikKQEAgLTM2NSw3ICs0NzMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSkiLCAiYSIpLmVuZHBvcywgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5zdHJpbmcsICJhIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEpIiwgImEiKS5yZWdzLCAoKDAsIDEpLCAoMCwgMSkpKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHJlLm1hdGNoKCIoYSkiLCAiYSIpLnJlLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goIihhKSIsICJhIikucmUpCiAKICAgICBkZWYgdGVzdF9zcGVjaWFsX2VzY2FwZXMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGIoYi4pXGIiLApAQCAtMzczLDI5ICs0ODEsMzcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiKS5ncm91cCgxKSwgImJ4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiLCByZS5BU0NJSSkuZ3JvdXAoMSksICJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuQVNDSUkpLmdyb3VwKDEpLCAiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxiKGIuKVxiIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFiY2QgYWJjIGJjZCBieCIsIHJlLkxPQ0FMRSkuZ3JvdXAoMSksICJieCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXEIoYi4pXEIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJjIGJjZCBiYyBhYnhkIiwgcmUuTE9DQUxFKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiLCByZS5VTklDT0RFKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiLCByZS5VTklDT0RFKS5ncm91cCgxKSwgImJ4IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeYWJjJCIsICJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJhYmMiLCByZS5NKS5ncm91cCgwKSwgImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYihiLilcYiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmNkIGFiYyBiY2QgYngiKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcQihiLilcQiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYmMgYmNkIGJjIGFieGQiKS5ncm91cCgxKSwgImJ4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJeYWJjJCIsICJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksICJhYmMiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIl5cQWFiY1xaJCIsICJhYmMiLCByZS5NKS5ncm91cCgwKSwgImFiYyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuc2VhcmNoKHIiXlxBYWJjXFokIiwgIlxuYWJjXG4iLCByZS5NKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXGIoYi4pXGIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY2QgYWJjIGJjZCBieCIpLmdyb3VwKDEpLCBiImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXEIoYi4pXEIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiYyBiY2QgYmMgYWJ4ZCIpLmdyb3VwKDEpLCBiImJ4IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXGIoYi4pXGIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiImFiY2QgYWJjIGJjZCBieCIsIHJlLkxPQ0FMRSkuZ3JvdXAoMSksIGIiYngiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChiciJcQihiLilcQiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIiYWJjIGJjZCBiYyBhYnhkIiwgcmUuTE9DQUxFKS5ncm91cCgxKSwgYiJieCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKGJyIl5hYmMkIiwgYiJcbmFiY1xuIiwgcmUuTSkuZ3JvdXAoMCksIGIiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXlxBYWJjXFokIiwgYiJhYmMiLCByZS5NKS5ncm91cCgwKSwgYiJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5zZWFyY2goYnIiXlxBYWJjXFokIiwgYiJcbmFiY1xuIiwgcmUuTSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuc2VhcmNoKHIiXGRcRFx3XFdcc1xTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjFhYSEgYSIpLmdyb3VwKDApLCAiMWFhISBhIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2goYnIiXGRcRFx3XFdcc1xTIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYiIxYWEhIGEiKS5ncm91cCgwKSwgYiIxYWEhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxkXERcd1xXXHNcUyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxYWEhIGEiLCByZS5BU0NJSSkuZ3JvdXAoMCksICIxYWEhIGEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxkXERcd1xXXHNcUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxYWEhIGEiLCByZS5MT0NBTEUpLmdyb3VwKDApLCAiMWFhISBhIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcZFxEXHdcV1xzXFMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMWFhISBhIiwgcmUuVU5JQ09ERSkuZ3JvdXAoMCksICIxYWEhIGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChiciJcZFxEXHdcV1xzXFMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiIjFhYSEgYSIsIHJlLkxPQ0FMRSkuZ3JvdXAoMCksIGIiMWFhISBhIikKIAogICAgIGRlZiB0ZXN0X3N0cmluZ19ib3VuZGFyaWVzKHNlbGYpOgogICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTA3MTMKQEAgLTQwOSwxMCArNTI1LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmUubWF0Y2gociJcQiIsICJhYmMiKSkKICAgICAgICAgIyBIb3dldmVyLCBhbiBlbXB0eSBzdHJpbmcgY29udGFpbnMgbm8gd29yZCBib3VuZGFyaWVzLCBhbmQgYWxzbyBubwogICAgICAgICAjIG5vbi1ib3VuZGFyaWVzLgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaChyIlxCIiwgIiIpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5zZWFyY2gociJcQiIsICIiKSkKICAgICAgICAgIyBUaGlzIG9uZSBpcyBxdWVzdGlvbmFibGUgYW5kIGRpZmZlcmVudCBmcm9tIHRoZSBwZXJscmUgYmVoYXZpb3VyLAogICAgICAgICAjIGJ1dCBkZXNjcmliZXMgY3VycmVudCBiZWhhdmlvci4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5zZWFyY2gociJcYiIsICIiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUuc2VhcmNoKHIiXGIiLCAiIikpCiAgICAgICAgICMgQSBzaW5nbGUgd29yZC1jaGFyYWN0ZXIgc3RyaW5nIGhhcyB0d28gYm91bmRhcmllcywgYnV0IG5vCiAgICAgICAgICMgbm9uLWJvdW5kYXJ5IGdhcHMuCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlLmZpbmRhbGwociJcYiIsICJhIikpLCAyKQpAQCAtNDI2LDE3ICs1NDIsMTQgQEAKICAgICBkZWYgdGVzdF9iaWdjaGFyc2V0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoW1x1MjIyMlx1MjIyM10pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUyMjIyIikuZ3JvdXAoMSksICJcdTIyMjIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoW1x1MjIyMlx1MjIyM10pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHUyMjIyIiwgcmUuVU5JQ09ERSkuZ3JvdXAoMSksICJcdTIyMjIiKQogICAgICAgICByID0gJ1slc10nICUgJycuam9pbihtYXAoY2hyLCByYW5nZSgyNTYsIDIqKjE2LCAyNTUpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcdWZmMDEiLCByZS5VTklDT0RFKS5ncm91cCgpLCAiXHVmZjAxIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyLCAiXHVmZjAxIikuZ3JvdXAoKSwgIlx1ZmYwMSIpCiAKICAgICBkZWYgdGVzdF9iaWdfY29kZXNpemUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzExNjAKICAgICAgICAgciA9IHJlLmNvbXBpbGUoJ3wnLmpvaW4oKCclZCcleCBmb3IgeCBpbiByYW5nZSgxMDAwMCkpKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoci5tYXRjaCgnMTAwMCcpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyLm1hdGNoKCc5OTk5JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLm1hdGNoKCcxMDAwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyLm1hdGNoKCc5OTk5JykpCiAKICAgICBkZWYgdGVzdF9hbnlhbGwoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goImEuYiIsICJhXG5iIiwgcmUuRE9UQUxMKS5ncm91cCgwKSwKQEAgLTQ0NCw3ICs1NTcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCJhLipiIiwgImFcblxuYiIsIHJlLkRPVEFMTCkuZ3JvdXAoMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgImFcblxuYiIpCiAKLSAgICBkZWYgdGVzdF9ub25fY29uc3VtaW5nKHNlbGYpOgorICAgIGRlZiB0ZXN0X2xvb2thaGVhZChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiKGEoPz1cc1teYV0pKSIsICJhIGIiKS5ncm91cCgxKSwgImEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSg/PVxzW15hXSopKSIsICJhIGIiKS5ncm91cCgxKSwgImEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKCIoYSg/PVxzW2FiY10pKSIsICJhIGIiKS5ncm91cCgxKSwgImEiKQpAQCAtNDU4LDkgKzU3MSw0MCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGEpKD8hXHNcMSkiLCAiYSBiIikuZ3JvdXAoMSksICJhIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhKSg/IVxzKGFiY3xhKSkiLCAiYSBiIikuZ3JvdXAoMSksICJhIikKIAorICAgICAgICAjIEdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKGEpYig/PVwxKWEnLCAnYWJhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKGEpYig/PVwxKWMnLCAnYWJhYycpKQorICAgICAgICAjIE5hbWVkIGdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKD9QPGc+YSliKD89KD9QPWcpKWEnLCAnYWJhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD9QPGc+YSliKD89KD9QPWcpKWMnLCAnYWJhYycpKQorICAgICAgICAjIENvbmRpdGlvbmFsIGdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKD86KGEpfCh4KSliKD89KD8oMil4fGMpKWMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKD86KGEpfCh4KSliKD89KD8oMiljfHgpKWMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJyg/OihhKXwoeCkpYig/PSg/KDIpeHxjKSljJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJyg/OihhKXwoeCkpYig/PSg/KDEpYnx4KSljJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocicoPzooYSl8KHgpKWIoPz0oPygxKWN8eCkpYycsICdhYmMnKSkKKyAgICAgICAgIyBHcm91cCB1c2VkIGJlZm9yZSBkZWZpbmVkLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocicoYSliKD89KD8oMil4fGMpKShjKScsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2gocicoYSliKD89KD8oMilifHgpKShjKScsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInKGEpYig/PSg/KDEpY3x4KSkoYyknLCAnYWJjJykpCisKKyAgICBkZWYgdGVzdF9sb29rYmVoaW5kKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidhYig/PD1iKWMnLCAnYWJjJykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInYWIoPzw9YyljJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ2FiKD88IWIpYycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInYWIoPzwhYyljJywgJ2FiYycpKQorICAgICAgICAjIEdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywgcmUuY29tcGlsZSwgcicoYSlhKD88PVwxKWMnKQorICAgICAgICAjIE5hbWVkIGdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywgcmUuY29tcGlsZSwgcicoP1A8Zz5hKWEoPzw9KD9QPWcpKWMnKQorICAgICAgICAjIENvbmRpdGlvbmFsIGdyb3VwIHJlZmVyZW5jZS4KKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhSdW50aW1lV2FybmluZywgcmUuY29tcGlsZSwgcicoYSliKD88PSg/KDEpYnx4KSljJykKKyAgICAgICAgIyBHcm91cCB1c2VkIGJlZm9yZSBkZWZpbmVkLgorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKFJ1bnRpbWVXYXJuaW5nLCByZS5jb21waWxlLCByJyhhKWIoPzw9KD8oMilifHgpKShjKScpCisKICAgICBkZWYgdGVzdF9pZ25vcmVfY2FzZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiImFiYyIsIGIiQUJDIiwgcmUuSSkuZ3JvdXAoMCksIGIiQUJDIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyIihhXHNbXmFdKSIsICJhIGIiLCByZS5JKS5ncm91cCgxKSwgImEgYiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoYVxzW15hXSopIiwgImEgYmIiLCByZS5JKS5ncm91cCgxKSwgImEgYmIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHIiKGFcc1thYmNdKSIsICJhIGIiLCByZS5JKS5ncm91cCgxKSwgImEgYiIpCkBAIC00NzAsNiArNjE0LDc2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoKGEpXHMoYWJjfGEpKSIsICJhIGEiLCByZS5JKS5ncm91cCgxKSwgImEgYSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoKGEpXHMoYWJjfGEpKikiLCAiYSBhYSIsIHJlLkkpLmdyb3VwKDEpLCAiYSBhYSIpCiAKKyAgICAgICAgYXNzZXJ0ICdcdTIxMmEnLmxvd2VyKCkgPT0gJ2snICMgJ+KEqicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInSycsICdcdTIxMmEnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInaycsICdcdTIxMmEnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInXHUyMTJhJywgJ0snLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInXHUyMTJhJywgJ2snLCByZS5JKSkKKyAgICAgICAgYXNzZXJ0ICdcdTAxN2YnLnVwcGVyKCkgPT0gJ1MnICMgJ8W/JworICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidTJywgJ1x1MDE3ZicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidzJywgJ1x1MDE3ZicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidcdTAxN2YnLCAnUycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidcdTAxN2YnLCAncycsIHJlLkkpKQorICAgICAgICBhc3NlcnQgJ1x1ZmIwNScudXBwZXIoKSA9PSAnXHVmYjA2Jy51cHBlcigpID09ICdTVCcgIyAn76yFJywgJ++shicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInXHVmYjA1JywgJ1x1ZmIwNicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidcdWZiMDYnLCAnXHVmYjA1JywgcmUuSSkpCisKKyAgICBkZWYgdGVzdF9pZ25vcmVfY2FzZV9zZXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOUFdJywgJ0EnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5YV0nLCAnYScsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbMTlhXScsICdBJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOUFdJywgJ2EnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyJ1sxOUFdJywgYidBJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChicidbMTlhXScsIGInYScsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnInWzE5YV0nLCBiJ0EnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyJ1sxOUFdJywgYidhJywgcmUuSSkpCisgICAgICAgIGFzc2VydCAnXHUyMTJhJy5sb3dlcigpID09ICdrJyAjICfihKonCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOUtdJywgJ1x1MjEyYScsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbMTlrXScsICdcdTIxMmEnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5XHUyMTJhXScsICdLJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOVx1MjEyYV0nLCAnaycsIHJlLkkpKQorICAgICAgICBhc3NlcnQgJ1x1MDE3ZicudXBwZXIoKSA9PSAnUycgIyAnxb8nCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOVNdJywgJ1x1MDE3ZicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbMTlzXScsICdcdTAxN2YnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5XHUwMTdmXScsICdTJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1sxOVx1MDE3Zl0nLCAncycsIHJlLkkpKQorICAgICAgICBhc3NlcnQgJ1x1ZmIwNScudXBwZXIoKSA9PSAnXHVmYjA2Jy51cHBlcigpID09ICdTVCcgIyAn76yFJywgJ++shicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5XHVmYjA1XScsICdcdWZiMDYnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInWzE5XHVmYjA2XScsICdcdWZiMDUnLCByZS5JKSkKKworICAgIGRlZiB0ZXN0X2lnbm9yZV9jYXNlX3JhbmdlKHNlbGYpOgorICAgICAgICAjIElzc3VlcyAjMzUxMSwgIzE3MzgxLgorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbOS1hXScsICdfJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInWzktQV0nLCAnXycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnInWzktYV0nLCBiJ18nLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYnInWzktQV0nLCBiJ18nLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x4YzAtXHhkZV0nLCAnXHhkNycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ1tceGMwLVx4ZGVdJywgJ1x4ZjcnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x4ZTAtXHhmZV0nLCAnXHhmNycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZS5tYXRjaChyJ1tceGUwLVx4ZmVdJywgJ1x4ZDcnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1MDQzMC1cdTA0NWZdJywgJ1x1MDQ1MCcsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXHUwNDMwLVx1MDQ1Zl0nLCAnXHUwNDAwJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tcdTA0MDAtXHUwNDJmXScsICdcdTA0NTAnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1MDQwMC1cdTA0MmZdJywgJ1x1MDQwMCcsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXFUwMDAxMDQyOC1cVTAwMDEwNDRmXScsICdcVTAwMDEwNDI4JywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tcVTAwMDEwNDI4LVxVMDAwMTA0NGZdJywgJ1xVMDAwMTA0MDAnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1xVMDAwMTA0MDAtXFUwMDAxMDQyN10nLCAnXFUwMDAxMDQyOCcsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXFUwMDAxMDQwMC1cVTAwMDEwNDI3XScsICdcVTAwMDEwNDAwJywgcmUuSSkpCisKKyAgICAgICAgYXNzZXJ0ICdcdTIxMmEnLmxvd2VyKCkgPT0gJ2snICMgJ+KEqicKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW0otTV0nLCAnXHUyMTJhJywgcmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tqLW1dJywgJ1x1MjEyYScsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXHUyMTI5LVx1MjEyYl0nLCAnSycsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbXHUyMTI5LVx1MjEyYl0nLCAnaycsIHJlLkkpKQorICAgICAgICBhc3NlcnQgJ1x1MDE3ZicudXBwZXIoKSA9PSAnUycgIyAnxb8nCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tSLVRdJywgJ1x1MDE3ZicsIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gocidbci10XScsICdcdTAxN2YnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1MDE3ZS1cdTAxODBdJywgJ1MnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1MDE3ZS1cdTAxODBdJywgJ3MnLCByZS5JKSkKKyAgICAgICAgYXNzZXJ0ICdcdWZiMDUnLnVwcGVyKCkgPT0gJ1x1ZmIwNicudXBwZXIoKSA9PSAnU1QnICMgJ++shScsICfvrIYnCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyJ1tcdWZiMDQtXHVmYjA1XScsICdcdWZiMDYnLCByZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHInW1x1ZmIwNi1cdWZiMDddJywgJ1x1ZmIwNScsIHJlLkkpKQorCiAgICAgZGVmIHRlc3RfY2F0ZWdvcnkoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gociIoXHMpIiwgIiAiKS5ncm91cCgxKSwgIiAiKQogCkBAIC00ODAsNyArNjk0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3JlLmdldGxvd2VyKG9yZCgnQScpLCByZS5VTklDT0RFKSwgb3JkKCdhJykpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaCgiYWJjIiwgIkFCQyIsIHJlLkkpLmdyb3VwKDApLCAiQUJDIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChiImFiYyIsIGIiQUJDIiwgcmUuSSkuZ3JvdXAoMCksIGIiQUJDIikKIAogICAgIGRlZiB0ZXN0X25vdF9saXRlcmFsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLnNlYXJjaCgiXHMoW15hXSkiLCAiIGIiKS5ncm91cCgxKSwgImIiKQpAQCAtNTQ3LDExICs3NjEsMTUgQEAKICAgICAgICAgcmVzID0gcmUuZmluZGFsbChyZS5lc2NhcGUoJ1x1MjYyMCcuZW5jb2RlKCd1dGYtOCcpKSwgYikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzKSwgMikKIAotICAgIGRlZiBwaWNrbGVfdGVzdChzZWxmLCBwaWNrbGUpOgotICAgICAgICBvbGRwYXQgPSByZS5jb21waWxlKCdhKD86YnwoY3xlKXsxLDJ9P3xkKSs/KC4pJykKLSAgICAgICAgcyA9IHBpY2tsZS5kdW1wcyhvbGRwYXQpCi0gICAgICAgIG5ld3BhdCA9IHBpY2tsZS5sb2FkcyhzKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9sZHBhdCwgbmV3cGF0KQorICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgorICAgICAgICBpbXBvcnQgcGlja2xlCisgICAgICAgIG9sZHBhdCA9IHJlLmNvbXBpbGUoJ2EoPzpifChjfGUpezEsMn0/fGQpKz8oLiknLCByZS5VTklDT0RFKQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMob2xkcGF0LCBwcm90bykKKyAgICAgICAgICAgIG5ld3BhdCA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdwYXQsIG9sZHBhdCkKKyAgICAgICAgIyBjdXJyZW50IHBpY2tsZSBleHBlY3RzIHRoZSBfY29tcGlsZSgpIHJlY29uc3RydWN0b3IgaW4gcmUgbW9kdWxlCisgICAgICAgIGZyb20gcmUgaW1wb3J0IF9jb21waWxlCiAKICAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuSSwgcmUuSUdOT1JFQ0FTRSkKQEAgLTU2MiwyOSArNzgwLDI5IEBACiAKICAgICBkZWYgdGVzdF9mbGFncyhzZWxmKToKICAgICAgICAgZm9yIGZsYWcgaW4gW3JlLkksIHJlLk0sIHJlLlgsIHJlLlMsIHJlLkxdOgotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChyZS5jb21waWxlKCdecGF0dGVybiQnLCBmbGFnKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5jb21waWxlKCdecGF0dGVybiQnLCBmbGFnKSkKIAogICAgIGRlZiB0ZXN0X3NyZV9jaGFyYWN0ZXJfbGl0ZXJhbHMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIFswLCA4LCAxNiwgMzIsIDY0LCAxMjcsIDEyOCwgMjU1LCAyNTYsIDB4RkZGRiwgMHgxMDAwMCwgMHgxMEZGRkZdOgogICAgICAgICAgICAgaWYgaSA8IDI1NjoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlwlMDNvIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcJTAzbzAiICUgaSwgY2hyKGkpKyIwIikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcJTAzbzgiICUgaSwgY2hyKGkpKyI4IikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJceCUwMngiICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlx4JTAyeDAiICUgaSwgY2hyKGkpKyIwIikpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJceCUwMnh6IiAlIGksIGNocihpKSsieiIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwlMDNvIiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXCUwM28wIiAlIGksIGNocihpKSsiMCIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlwlMDNvOCIgJSBpLCBjaHIoaSkrIjgiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJceCUwMngiICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJceCUwMngwIiAlIGksIGNocihpKSsiMCIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIlx4JTAyeHoiICUgaSwgY2hyKGkpKyJ6IikpCiAgICAgICAgICAgICBpZiBpIDwgMHgxMDAwMDoKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlx1JTA0eCIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiXHUlMDR4MCIgJSBpLCBjaHIoaSkrIjAiKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlx1JTA0eHoiICUgaSwgY2hyKGkpKyJ6IikpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlxVJTA4eCIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcVSUwOHgwIiAlIGksIGNocihpKSsiMCIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcVSUwOHh6IiAlIGksIGNocihpKSsieiIpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlwwIiwgIlwwMDAiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcMDgiLCAiXDAwMDgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcMDEiLCAiXDAwMSIpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIlwwMTgiLCAiXDAwMTgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJcNTY3IiwgY2hyKDBvMTY3KSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXHUlMDR4IiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXHUlMDR4MCIgJSBpLCBjaHIoaSkrIjAiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcdSUwNHh6IiAlIGksIGNocihpKSsieiIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXFUlMDh4IiAlIGksIGNocihpKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcVSUwOHgwIiAlIGksIGNocihpKSsiMCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXFUlMDh4eiIgJSBpLCBjaHIoaSkrInoiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDAiLCAiXDAwMCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcMDgiLCAiXDAwMDgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDAxIiwgIlwwMDEiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiXDAxOCIsICJcMDAxOCIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJcNTY3IiwgY2hyKDBvMTY3KSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJcOTExIiwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJceDEiLCAiIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCByIlx4MXoiLCAiIikKQEAgLTU5NywyMiArODE1LDIyIEBACiAgICAgZGVmIHRlc3Rfc3JlX2NoYXJhY3Rlcl9jbGFzc19saXRlcmFscyhzZWxmKToKICAgICAgICAgZm9yIGkgaW4gWzAsIDgsIDE2LCAzMiwgNjQsIDEyNywgMTI4LCAyNTUsIDI1NiwgMHhGRkZGLCAweDEwMDAwLCAweDEwRkZGRl06CiAgICAgICAgICAgICBpZiBpIDwgMjU2OgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1wlb10iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcJW84XSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1wlMDNvXSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1wlMDNvMF0iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcJTAzbzhdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXHglMDJ4XSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1x4JTAyeDBdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2gociJbXHglMDJ4el0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXCVvXSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcJW84XSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcJTAzb10iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXCUwM28wXSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcJTAzbzhdIiAlIGksIGNocihpKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1x4JTAyeF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXHglMDJ4MF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXHglMDJ4el0iICUgaSwgY2hyKGkpKSkKICAgICAgICAgICAgIGlmIGkgPCAweDEwMDAwOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1x1JTA0eF0iICUgaSwgY2hyKGkpKSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcdSUwNHgwXSIgJSBpLCBjaHIoaSkpKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1x1JTA0eHpdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcVSUwOHhdIiAlIGksIGNocihpKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcVSUwOHgwXSIgJSBpLCBjaHIoaSkrIjAiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKHIiW1xVJTA4eHpdIiAlIGksIGNocihpKSsieiIpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChyIltcVTAwMDFkNDljLVxVMDAwMWQ0YjVdIiwgIlxVMDAwMWQ0OWUiKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2gociJbXHUlMDR4XSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcdSUwNHgwXSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcdSUwNHh6XSIgJSBpLCBjaHIoaSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1xVJTA4eF0iICUgaSwgY2hyKGkpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcVSUwOHgwXSIgJSBpLCBjaHIoaSkrIjAiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChyIltcVSUwOHh6XSIgJSBpLCBjaHIoaSkrInoiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKHIiW1xVMDAwMWQ0OWMtXFUwMDAxZDRiNV0iLCAiXFUwMDAxZDQ5ZSIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIHIiW1w5MTFdIiwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgciJbXHgxel0iLCAiIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCByIltcdTEyM3pdIiwgIiIpCkBAIC02MjEsMzcgKzgzOSwzNyBAQAogCiAgICAgZGVmIHRlc3Rfc3JlX2J5dGVfbGl0ZXJhbHMoc2VsZik6CiAgICAgICAgIGZvciBpIGluIFswLCA4LCAxNiwgMzIsIDY0LCAxMjcsIDEyOCwgMjU1XToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIlwlMDNvIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIlwlMDNvMCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiIjAiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIlwlMDNvOCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiIjgiKSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLm1hdGNoKChyIlx4JTAyeCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJceCUwMngwIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pK2IiMCIpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiXHglMDJ4eiIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiInoiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXHUiLCBiJ3UnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXFUiLCBiJ1UnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXDAiLCBiIlwwMDAiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXDA4IiwgYiJcMDAwOCIpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChiciJcMDEiLCBiIlwwMDEiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXDAxOCIsIGIiXDAwMTgiKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiXDU2NyIsIGJ5dGVzKFswbzE2N10pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJcJTAzbyIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiXCUwM28wIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pK2IiMCIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIlwlMDNvOCIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiIjgiKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJceCUwMngiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIlx4JTAyeDAiICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkrYiIwIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiXHglMDJ4eiIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKStiInoiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlx1IiwgYid1JykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiciJcVSIsIGInVScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXDAiLCBiIlwwMDAiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlwwOCIsIGIiXDAwMDgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlwwMSIsIGIiXDAwMSIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiXDAxOCIsIGIiXDAwMTgiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGJyIlw1NjciLCBieXRlcyhbMG8xNjddKSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgYnIiXDkxMSIsIGIiIikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCBiciJceDEiLCBiIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgYnIiXHgxeiIsIGIiIikKIAogICAgIGRlZiB0ZXN0X3NyZV9ieXRlX2NsYXNzX2xpdGVyYWxzKHNlbGYpOgogICAgICAgICBmb3IgaSBpbiBbMCwgOCwgMTYsIDMyLCA2NCwgMTI3LCAxMjgsIDI1NV06Ci0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXCVvXSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXCVvOF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1wlMDNvXSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXCUwM28wXSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXCUwM284XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXHglMDJ4XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCi0gICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaCgociJbXHglMDJ4MF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goKHIiW1x4JTAyeHpdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUubWF0Y2goYnIiW1x1XSIsIGIndScpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5tYXRjaChiciJbXFVdIiwgYidVJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgYnIiW1w5MTFdIiwgIiIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yLCByZS5tYXRjaCwgYnIiW1x4MXpdIiwgIiIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1wlb10iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIltcJW84XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1wlMDNvXSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1wlMDNvMF0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKChyIltcJTAzbzhdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJbXHglMDJ4XSIgJSBpKS5lbmNvZGUoKSwgYnl0ZXMoW2ldKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goKHIiW1x4JTAyeDBdIiAlIGkpLmVuY29kZSgpLCBieXRlcyhbaV0pKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaCgociJbXHglMDJ4el0iICUgaSkuZW5jb2RlKCksIGJ5dGVzKFtpXSkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiW1x1XSIsIGIndScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYnIiW1xVXSIsIGInVScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhyZS5lcnJvciwgcmUubWF0Y2gsIGJyIltcOTExXSIsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMocmUuZXJyb3IsIHJlLm1hdGNoLCBiciJbXHgxel0iLCBiIiIpCiAKICAgICBkZWYgdGVzdF9idWdfMTEzMjU0KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpfChiKScsICdiJykuc3RhcnQoMSksIC0xKQpAQCAtNjYwLDcgKzg3OCw3IEBACiAKICAgICBkZWYgdGVzdF9idWdfNTI3MzcxKHNlbGYpOgogICAgICAgICAjIGJ1ZyBkZXNjcmliZWQgaW4gcGF0Y2hlcyA1MjczNzEvNjcyNDkxCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2gocicoYSk/YScsJ2EnKS5sYXN0aW5kZXgsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLm1hdGNoKHInKGEpP2EnLCdhJykubGFzdGluZGV4KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLm1hdGNoKHInKGEpKGIpP2InLCdhYicpLmxhc3RpbmRleCwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZS5tYXRjaChyJyg/UDxhPmEpKD9QPGI+Yik/YicsJ2FiJykubGFzdGdyb3VwLCAnYScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUubWF0Y2goIig/UDxhPmEoYikpIiwgImFiIikubGFzdGdyb3VwLCAnYScpCkBAIC03MTcsNyArOTM1LDcgQEAKICAgICAgICAgICAgIChyIlxzKyIsIE5vbmUpLAogICAgICAgICAgICAgXSkKIAotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHNjYW5uZXIuc2Nhbm5lci5zY2FubmVyKCIiKS5wYXR0ZXJuLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2Nhbm5lci5zY2FubmVyLnNjYW5uZXIoIiIpLnBhdHRlcm4pCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2FubmVyLnNjYW4oInN1bSA9IDMqZm9vICsgMzEyLjUwICsgYmFyIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKFsnc3VtJywgJ29wPScsIDMsICdvcConLCAnZm9vJywgJ29wKycsIDMxMi41LApAQCAtNzYyLDcgKzk4MCw3IEBACiAgICAgICAgICMgYnVnIDc2NDU0OCwgcmUuY29tcGlsZSgpIGJhcmZzIG9uIHN0ci91bmljb2RlIHN1YmNsYXNzZXMKICAgICAgICAgY2xhc3MgbXlfdW5pY29kZShzdHIpOiBwYXNzCiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUobXlfdW5pY29kZSgiYWJjIikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCJ4eXoiKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKCJ4eXoiKSkKIAogICAgIGRlZiB0ZXN0X2ZpbmRpdGVyKHNlbGYpOgogICAgICAgICBpdGVyID0gcmUuZmluZGl0ZXIociI6KyIsICJhOmI6OmM6OjpkIikKQEAgLTc5MCwxMSArMTAwOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIFsiOjoiLCAiOjoiXSkKIAogICAgIGRlZiB0ZXN0X2J1Z185MjYwNzUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5jb21waWxlKCdidWdfOTI2MDc1JykgaXMgbm90Ci0gICAgICAgICAgICAgICAgICAgICByZS5jb21waWxlKGInYnVnXzkyNjA3NScpKQorICAgICAgICBzZWxmLmFzc2VydElzTm90KHJlLmNvbXBpbGUoJ2J1Z185MjYwNzUnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZS5jb21waWxlKGInYnVnXzkyNjA3NScpKQogCiAgICAgZGVmIHRlc3RfYnVnXzkzMTg0OChzZWxmKToKLSAgICAgICAgcGF0dGVybiA9IGV2YWwoJyJbXHUwMDJFXHUzMDAyXHVGRjBFXHVGRjYxXSInKQorICAgICAgICBwYXR0ZXJuID0gIltcdTAwMkVcdTMwMDJcdUZGMEVcdUZGNjFdIgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUocGF0dGVybikuc3BsaXQoImEuYi5jIiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgWydhJywnYicsJ2MnXSkKIApAQCAtODA1LDcgKzEwMjMsNyBAQAogCiAgICAgICAgIHNjYW5uZXIgPSByZS5jb21waWxlKHIiXHMiKS5zY2FubmVyKCJhIGIiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNjYW5uZXIuc2VhcmNoKCkuc3BhbigpLCAoMSwgMikpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2Nhbm5lci5zZWFyY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc2Nhbm5lci5zZWFyY2goKSkKIAogICAgIGRlZiB0ZXN0X2J1Z184MTcyMzQoc2VsZik6CiAgICAgICAgIGl0ZXIgPSByZS5maW5kaXRlcihyIi4qIiwgImFzZGYiKQpAQCAtODM5LDcgKzEwNTcsNyBAQAogICAgICAgICBpbXBvcnQgYXJyYXkKICAgICAgICAgZm9yIHR5cGVjb2RlIGluICdiQnVoSGlJbExmZCc6CiAgICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkodHlwZWNvZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUoYiJibGEiKS5tYXRjaChhKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlLmNvbXBpbGUoYiJibGEiKS5tYXRjaChhKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuY29tcGlsZShiIiIpLm1hdGNoKGEpLmdyb3VwcygpLCAoKSkKIAogICAgIGRlZiB0ZXN0X2lubGluZV9mbGFncyhzZWxmKToKQEAgLTg0OSwyNyArMTA2NywyNyBAQAogCiAgICAgICAgIHAgPSByZS5jb21waWxlKHVwcGVyX2NoYXIsIHJlLkkgfCByZS5VKQogICAgICAgICBxID0gcC5tYXRjaChsb3dlcl9jaGFyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxKQogCiAgICAgICAgIHAgPSByZS5jb21waWxlKGxvd2VyX2NoYXIsIHJlLkkgfCByZS5VKQogICAgICAgICBxID0gcC5tYXRjaCh1cHBlcl9jaGFyKQotICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHEsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShxKQogCiAgICAgICAgIHAgPSByZS5jb21waWxlKCcoP2kpJyArIHVwcGVyX2NoYXIsIHJlLlUpCiAgICAgICAgIHEgPSBwLm1hdGNoKGxvd2VyX2NoYXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHEpCiAKICAgICAgICAgcCA9IHJlLmNvbXBpbGUoJyg/aSknICsgbG93ZXJfY2hhciwgcmUuVSkKICAgICAgICAgcSA9IHAubWF0Y2godXBwZXJfY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSkKIAogICAgICAgICBwID0gcmUuY29tcGlsZSgnKD9pdSknICsgdXBwZXJfY2hhcikKICAgICAgICAgcSA9IHAubWF0Y2gobG93ZXJfY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSkKIAogICAgICAgICBwID0gcmUuY29tcGlsZSgnKD9pdSknICsgbG93ZXJfY2hhcikKICAgICAgICAgcSA9IHAubWF0Y2godXBwZXJfY2hhcikKLSAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChxLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocSkKIAogICAgIGRlZiB0ZXN0X2RvbGxhcl9tYXRjaGVzX3R3aWNlKHNlbGYpOgogICAgICAgICAiJCBtYXRjaGVzIHRoZSBlbmQgb2Ygc3RyaW5nLCBhbmQganVzdCBiZWZvcmUgdGhlIHRlcm1pbmF0aW5nIFxuIgpAQCAtOTAwLDIzICsxMTE4LDIzIEBACiAgICAgICAgICMgU3RyaW5nIHBhdHRlcm5zCiAgICAgICAgIGZvciBmbGFncyBpbiAoMCwgcmUuVU5JQ09ERSk6CiAgICAgICAgICAgICBwYXQgPSByZS5jb21waWxlKCdceGMwJywgZmxhZ3MgfCByZS5JR05PUkVDQVNFKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChwYXQubWF0Y2goJ1x4ZTAnKSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwYXQubWF0Y2goJ1x4ZTAnKSkKICAgICAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoJ1x3JywgZmxhZ3MpCi0gICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBhdC5tYXRjaCgnXHhlMCcpLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhdC5tYXRjaCgnXHhlMCcpKQogICAgICAgICBwYXQgPSByZS5jb21waWxlKCdceGMwJywgcmUuQVNDSUkgfCByZS5JR05PUkVDQVNFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnXHhlMCcpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXQubWF0Y2goJ1x4ZTAnKSkKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnKD9hKVx4YzAnLCByZS5JR05PUkVDQVNFKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdC5tYXRjaCgnXHhlMCcpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXQubWF0Y2goJ1x4ZTAnKSkKICAgICAgICAgcGF0ID0gcmUuY29tcGlsZSgnXHcnLCByZS5BU0NJSSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goJ1x4ZTAnKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKCdceGUwJykpCiAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoJyg/YSlcdycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGF0Lm1hdGNoKCdceGUwJyksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhdC5tYXRjaCgnXHhlMCcpKQogICAgICAgICAjIEJ5dGVzIHBhdHRlcm5zCiAgICAgICAgIGZvciBmbGFncyBpbiAoMCwgcmUuQVNDSUkpOgotICAgICAgICAgICAgcGF0ID0gcmUuY29tcGlsZShiJ1x4YzAnLCByZS5JR05PUkVDQVNFKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goYidceGUwJyksIE5vbmUpCi0gICAgICAgICAgICBwYXQgPSByZS5jb21waWxlKGInXHcnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXQubWF0Y2goYidceGUwJyksIE5vbmUpCisgICAgICAgICAgICBwYXQgPSByZS5jb21waWxlKGInXHhjMCcsIGZsYWdzIHwgcmUuSUdOT1JFQ0FTRSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHBhdC5tYXRjaChiJ1x4ZTAnKSkKKyAgICAgICAgICAgIHBhdCA9IHJlLmNvbXBpbGUoYidcdycsIGZsYWdzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGF0Lm1hdGNoKGInXHhlMCcpKQogICAgICAgICAjIEluY29tcGF0aWJpbGl0aWVzCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHJlLmNvbXBpbGUsIGInXHcnLCByZS5VTklDT0RFKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCByZS5jb21waWxlLCBiJyg/dSlcdycpCkBAIC05NTYsMTEgKzExNzQsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBfc3JlLmNvbXBpbGUsIHt9LCAwLCBbXSkKIAogICAgIGRlZiB0ZXN0X3NlYXJjaF9kb3RfdW5pY29kZShzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzYWJjLScpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNceGU5LScpKQotICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNcdTIwYWMtJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1xVMDAxMGZmZmYtJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1x4ZTlcdTIwYWNcVTAwMTBmZmZmLScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzYWJjLScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUuc2VhcmNoKCIxMjMuKi0iLCAnMTIzXHhlOS0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1x1MjBhYy0nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLnNlYXJjaCgiMTIzLiotIiwgJzEyM1xVMDAxMGZmZmYtJykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5zZWFyY2goIjEyMy4qLSIsICcxMjNceGU5XHUyMGFjXFUwMDEwZmZmZi0nKSkKIAogICAgIGRlZiB0ZXN0X2NvbXBpbGUoc2VsZik6CiAgICAgICAgICMgVGVzdCByZXR1cm4gdmFsdWUgd2hlbiBnaXZlbiBzdHJpbmcgYW5kIHBhdHRlcm4gYXMgcGFyYW1ldGVyCkBAIC0xMDUzLDYgKzEyNzEsMjggQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlLmNvbXBpbGUocGF0dGVybiwgcmUuUykuZmluZGFsbChiJ3h5eicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2IneHl6J10sIG1zZz1wYXR0ZXJuKQogCisgICAgZGVmIHRlc3RfbWF0Y2hfcmVwcihzZWxmKToKKyAgICAgICAgZm9yIHN0cmluZyBpbiAnW2FicmFjYWRhYnJhXScsIFMoJ1thYnJhY2FkYWJyYV0nKToKKyAgICAgICAgICAgIG0gPSByZS5zZWFyY2gocicoLispKC4qPylcMScsIHN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtKSwgIjwlcy4lcyBvYmplY3Q7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW49KDEsIDEyKSwgbWF0Y2g9J2FicmFjYWRhYnJhJz4iICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGUobSkuX19tb2R1bGVfXywgdHlwZShtKS5fX3F1YWxuYW1lX18pKQorICAgICAgICBmb3Igc3RyaW5nIGluIChiJ1thYnJhY2FkYWJyYV0nLCBCKGInW2FicmFjYWRhYnJhXScpLAorICAgICAgICAgICAgICAgICAgICAgICBieXRlYXJyYXkoYidbYWJyYWNhZGFicmFdJyksCisgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeXZpZXcoYidbYWJyYWNhZGFicmFdJykpOgorICAgICAgICAgICAgbSA9IHJlLnNlYXJjaChyYicoLispKC4qPylcMScsIHN0cmluZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihtKSwgIjwlcy4lcyBvYmplY3Q7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW49KDEsIDEyKSwgbWF0Y2g9YidhYnJhY2FkYWJyYSc+IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKG0pLl9fbW9kdWxlX18sIHR5cGUobSkuX19xdWFsbmFtZV9fKSkKKworICAgICAgICBmaXJzdCwgc2Vjb25kID0gbGlzdChyZS5maW5kaXRlcigiKGFhKXwoYmIpIiwgImFhIGJiIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihmaXJzdCksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW49KDAsIDIpLCBtYXRjaD0nYWEnPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKHNlY29uZCkuX19tb2R1bGVfXywgdHlwZShmaXJzdCkuX19xdWFsbmFtZV9fKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHNlY29uZCksICI8JXMuJXMgb2JqZWN0OyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW49KDMsIDUpLCBtYXRjaD0nYmInPiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlKHNlY29uZCkuX19tb2R1bGVfXywgdHlwZShzZWNvbmQpLl9fcXVhbG5hbWVfXykpCisKIAogICAgIGRlZiB0ZXN0X2J1Z18yNTM3KHNlbGYpOgogICAgICAgICAjIGlzc3VlIDI1Mzc6IGVtcHR5IHN1Ym1hdGNoZXMKQEAgLTEwNjUsMTYgKzEzMDUsMzMgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZ3JvdXAoMiksICJ5IikKIAogICAgIGRlZiB0ZXN0X2RlYnVnX2ZsYWcoc2VsZik6CisgICAgICAgIHBhdCA9IHInKFwuKSg/OltjaF18cHkpKD8oMSkkfDogKScKICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXQ6Ci0gICAgICAgICAgICByZS5jb21waWxlKCdmb28nLCByZS5ERUJVRykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgWydsaXRlcmFsIDEwMiAnLCAnbGl0ZXJhbCAxMTEgJywgJ2xpdGVyYWwgMTExICddKQorICAgICAgICAgICAgcmUuY29tcGlsZShwYXQsIHJlLkRFQlVHKQorICAgICAgICBkdW1wID0gJycnXAorc3VicGF0dGVybiAxCisgIGxpdGVyYWwgNDYKK3N1YnBhdHRlcm4gTm9uZQorICBicmFuY2gKKyAgICBpbgorICAgICAgbGl0ZXJhbCA5OQorICAgICAgbGl0ZXJhbCAxMDQKKyAgb3IKKyAgICBsaXRlcmFsIDExMgorICAgIGxpdGVyYWwgMTIxCitzdWJwYXR0ZXJuIE5vbmUKKyAgZ3JvdXByZWZfZXhpc3RzIDEKKyAgICBhdCBhdF9lbmQKKyAgZWxzZQorICAgIGxpdGVyYWwgNTgKKyAgICBsaXRlcmFsIDMyCisnJycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgZHVtcCkKICAgICAgICAgIyBEZWJ1ZyBvdXRwdXQgaXMgb3V0cHV0IGFnYWluIGV2ZW4gYSBzZWNvbmQgdGltZSAoYnlwYXNzaW5nCiAgICAgICAgICMgdGhlIGNhY2hlIC0tIGlzc3VlICMyMDQyNikuCiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0OgotICAgICAgICAgICAgcmUuY29tcGlsZSgnZm9vJywgcmUuREVCVUcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpLAotICAgICAgICAgICAgICAgICAgICAgICAgIFsnbGl0ZXJhbCAxMDIgJywgJ2xpdGVyYWwgMTExICcsICdsaXRlcmFsIDExMSAnXSkKKyAgICAgICAgICAgIHJlLmNvbXBpbGUocGF0LCByZS5ERUJVRykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuZ2V0dmFsdWUoKSwgZHVtcCkKIAogICAgIGRlZiB0ZXN0X2tleXdvcmRfcGFyYW1ldGVycyhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjMjAyODM6IEFjY2VwdGluZyB0aGUgc3RyaW5nIGtleXdvcmQgcGFyYW1ldGVyLgpAQCAtMTA4Miw2ICsxMzM5LDggQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHBhdC5tYXRjaChzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTcsIGVuZHBvcz0xMCkuc3BhbigpLCAoNywgOSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBwYXQuZnVsbG1hdGNoKHN0cmluZz0nYWJyYWNhZGFicmEnLCBwb3M9NywgZW5kcG9zPTkpLnNwYW4oKSwgKDcsIDkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAogICAgICAgICAgICAgcGF0LnNlYXJjaChzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTMsIGVuZHBvcz0xMCkuc3BhbigpLCAoNywgOSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICBwYXQuZmluZGFsbChzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTMsIGVuZHBvcz0xMCksIFsnYWInXSkKQEAgLTEwOTIsNTYgKzEzNTEsMTc0IEBACiAgICAgICAgICAgICBwYXQuc2Nhbm5lcihzdHJpbmc9J2FicmFjYWRhYnJhJywgcG9zPTMsIGVuZHBvcz0xMCkuc2VhcmNoKCkuc3BhbigpLAogICAgICAgICAgICAgKDcsIDkpKQogCisgICAgZGVmIHRlc3RfYnVnXzIwOTk4KHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMDk5ODogRnVsbG1hdGNoIG9mIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybgorICAgICAgICAjIHdpdGggaWdub3JlIGNhc2UuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmUuZnVsbG1hdGNoKCdbYS1jXSsnLCAnQUJDJywgcmUuSSkuc3BhbigpLCAoMCwgMykpCiAKLWRlZiBydW5fcmVfdGVzdHMoKToKLSAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKLSAgICBpZiB2ZXJib3NlOgotICAgICAgICBwcmludCgnUnVubmluZyByZV90ZXN0cyB0ZXN0IHN1aXRlJykKLSAgICBlbHNlOgotICAgICAgICAjIFRvIHNhdmUgdGltZSwgb25seSBydW4gdGhlIGZpcnN0IGFuZCBsYXN0IDEwIHRlc3RzCi0gICAgICAgICN0ZXN0cyA9IHRlc3RzWzoxMF0gKyB0ZXN0c1stMTA6XQotICAgICAgICBwYXNzCi0KLSAgICBmb3IgdCBpbiB0ZXN0czoKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHBhdHRlcm4gPSBzID0gb3V0Y29tZSA9IHJlcGwgPSBleHBlY3RlZCA9IE5vbmUKLSAgICAgICAgaWYgbGVuKHQpID09IDU6Ci0gICAgICAgICAgICBwYXR0ZXJuLCBzLCBvdXRjb21lLCByZXBsLCBleHBlY3RlZCA9IHQKLSAgICAgICAgZWxpZiBsZW4odCkgPT0gMzoKLSAgICAgICAgICAgIHBhdHRlcm4sIHMsIG91dGNvbWUgPSB0Ci0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUZXN0IHR1cGxlcyBzaG91bGQgaGF2ZSAzIG9yIDUgZmllbGRzJywgdCkKLQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4pCi0gICAgICAgIGV4Y2VwdCByZS5lcnJvcjoKLSAgICAgICAgICAgIGlmIG91dGNvbWUgPT0gU1lOVEFYX0VSUk9SOiBwYXNzICAjIEV4cGVjdGVkIGEgc3ludGF4IGVycm9yCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHByaW50KCc9PT0gU3ludGF4IGVycm9yOicsIHQpCi0gICAgICAgIGV4Y2VwdCBLZXlib2FyZEludGVycnVwdDogcmFpc2UgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcHJpbnQoJyoqKiBVbmV4cGVjdGVkIGVycm9yICoqKicsIHQpCi0gICAgICAgICAgICBpZiB2ZXJib3NlOgotICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3Rkb3V0KQotICAgICAgICBlbHNlOgorICAgIGRlZiB0ZXN0X2xvY2FsZV9jYWNoaW5nKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjQxMAorICAgICAgICBvbGRsb2NhbGUgPSBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGxvY2FsZS5zZXRsb2NhbGUsIGxvY2FsZS5MQ19DVFlQRSwgb2xkbG9jYWxlKQorICAgICAgICBmb3IgbG9jIGluICdlbl9VUy5pc284ODU5MScsICdlbl9VUy51dGY4JzoKICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSwgbG9jKQorICAgICAgICAgICAgZXhjZXB0IGxvY2FsZS5FcnJvcjoKKyAgICAgICAgICAgICAgICAjIFVuc3VwcG9ydGVkIGxvY2FsZSBvbiB0aGlzIHN5c3RlbQorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3Rlc3QgbmVlZHMgJXMgbG9jYWxlJyAlIGxvYykKKworICAgICAgICByZS5wdXJnZSgpCisgICAgICAgIHNlbGYuY2hlY2tfZW5fVVNfaXNvODg1OTEoKQorICAgICAgICBzZWxmLmNoZWNrX2VuX1VTX3V0ZjgoKQorICAgICAgICByZS5wdXJnZSgpCisgICAgICAgIHNlbGYuY2hlY2tfZW5fVVNfdXRmOCgpCisgICAgICAgIHNlbGYuY2hlY2tfZW5fVVNfaXNvODg1OTEoKQorCisgICAgZGVmIGNoZWNrX2VuX1VTX2lzbzg4NTkxKHNlbGYpOgorICAgICAgICBsb2NhbGUuc2V0bG9jYWxlKGxvY2FsZS5MQ19DVFlQRSwgJ2VuX1VTLmlzbzg4NTkxJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInXHhjNVx4ZTUnLCBiJ1x4YzVceGU1JywgcmUuTHxyZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInXHhjNScsIGInXHhlNScsIHJlLkx8cmUuSSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZS5tYXRjaChiJ1x4ZTUnLCBiJ1x4YzUnLCByZS5MfHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYicoP0xpKVx4YzVceGU1JywgYidceGM1XHhlNScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmUubWF0Y2goYicoP0xpKVx4YzUnLCBiJ1x4ZTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInKD9MaSlceGU1JywgYidceGM1JykpCisKKyAgICBkZWYgY2hlY2tfZW5fVVNfdXRmOChzZWxmKToKKyAgICAgICAgbG9jYWxlLnNldGxvY2FsZShsb2NhbGUuTENfQ1RZUEUsICdlbl9VUy51dGY4JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInXHhjNVx4ZTUnLCBiJ1x4YzVceGU1JywgcmUuTHxyZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYidceGM1JywgYidceGU1JywgcmUuTHxyZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYidceGU1JywgYidceGM1JywgcmUuTHxyZS5JKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlLm1hdGNoKGInKD9MaSlceGM1XHhlNScsIGInXHhjNVx4ZTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYicoP0xpKVx4YzUnLCBiJ1x4ZTUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocmUubWF0Y2goYicoP0xpKVx4ZTUnLCBiJ1x4YzUnKSkKKworCitjbGFzcyBQYXR0ZXJuUmVwclRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgY2hlY2soc2VsZiwgcGF0dGVybiwgZXhwZWN0ZWQpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocmUuY29tcGlsZShwYXR0ZXJuKSksIGV4cGVjdGVkKQorCisgICAgZGVmIGNoZWNrX2ZsYWdzKHNlbGYsIHBhdHRlcm4sIGZsYWdzLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihyZS5jb21waWxlKHBhdHRlcm4sIGZsYWdzKSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3Rfd2l0aG91dF9mbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjaygncmFuZG9tIHBhdHRlcm4nLAorICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicpIikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9mbGFnKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIHJlLklHTk9SRUNBU0UsCisgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCByZS5JR05PUkVDQVNFKSIpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9mbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCByZS5JfHJlLlN8cmUuWCwKKyAgICAgICAgICAgICJyZS5jb21waWxlKCdyYW5kb20gcGF0dGVybicsICIKKyAgICAgICAgICAgICJyZS5JR05PUkVDQVNFfHJlLkRPVEFMTHxyZS5WRVJCT1NFKSIpCisKKyAgICBkZWYgdGVzdF91bmljb2RlX2ZsYWcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuVSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nKSIpCisgICAgICAgIHNlbGYuY2hlY2tfZmxhZ3MoJ3JhbmRvbSBwYXR0ZXJuJywgcmUuSXxyZS5TfHJlLlUsCisgICAgICAgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJ3JhbmRvbSBwYXR0ZXJuJywgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5JR05PUkVDQVNFfHJlLkRPVEFMTCkiKQorCisgICAgZGVmIHRlc3RfaW5saW5lX2ZsYWdzKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrKCcoP2kpcGF0dGVybicsCisgICAgICAgICAgICAgICAgICAgInJlLmNvbXBpbGUoJyg/aSlwYXR0ZXJuJywgcmUuSUdOT1JFQ0FTRSkiKQorCisgICAgZGVmIHRlc3RfdW5rbm93bl9mbGFncyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19mbGFncygncmFuZG9tIHBhdHRlcm4nLCAweDEyMzAwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCAweDEyMzAwMCkiKQorICAgICAgICBzZWxmLmNoZWNrX2ZsYWdzKCdyYW5kb20gcGF0dGVybicsIDB4MTIzMDAwfHJlLkksCisgICAgICAgICAgICAicmUuY29tcGlsZSgncmFuZG9tIHBhdHRlcm4nLCByZS5JR05PUkVDQVNFfDB4MTIzMDAwKSIpCisKKyAgICBkZWYgdGVzdF9ieXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVjayhiJ2J5dGVzIHBhdHRlcm4nLAorICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKGInYnl0ZXMgcGF0dGVybicpIikKKyAgICAgICAgc2VsZi5jaGVja19mbGFncyhiJ2J5dGVzIHBhdHRlcm4nLCByZS5BLAorICAgICAgICAgICAgICAgICAgICAgICAgICJyZS5jb21waWxlKGInYnl0ZXMgcGF0dGVybicsIHJlLkFTQ0lJKSIpCisKKyAgICBkZWYgdGVzdF9xdW90ZXMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2soJ3JhbmRvbSAiZG91YmxlIHF1b3RlZCIgcGF0dGVybicsCisgICAgICAgICAgICAnJydyZS5jb21waWxlKCdyYW5kb20gImRvdWJsZSBxdW90ZWQiIHBhdHRlcm4nKScnJykKKyAgICAgICAgc2VsZi5jaGVjaygicmFuZG9tICdzaW5nbGUgcXVvdGVkJyBwYXR0ZXJuIiwKKyAgICAgICAgICAgICcnJ3JlLmNvbXBpbGUoInJhbmRvbSAnc2luZ2xlIHF1b3RlZCcgcGF0dGVybiIpJycnKQorICAgICAgICBzZWxmLmNoZWNrKCcnJ2JvdGggJ3NpbmdsZScgYW5kICJkb3VibGUiIHF1b3RlcycnJywKKyAgICAgICAgICAgICcnJ3JlLmNvbXBpbGUoJ2JvdGggXFwnc2luZ2xlXFwnIGFuZCAiZG91YmxlIiBxdW90ZXMnKScnJykKKworICAgIGRlZiB0ZXN0X2xvbmdfcGF0dGVybihzZWxmKToKKyAgICAgICAgcGF0dGVybiA9ICdWZXJ5ICVzcGF0dGVybicgJSAoJ2xvbmcgJyAqIDEwMDApCisgICAgICAgIHIgPSByZXByKHJlLmNvbXBpbGUocGF0dGVybikpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhsZW4ociksIDMwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWzozMF0sICJyZS5jb21waWxlKCdWZXJ5IGxvbmcgbG9uZyBsb24iKQorICAgICAgICByID0gcmVwcihyZS5jb21waWxlKHBhdHRlcm4sIHJlLkkpKQorICAgICAgICBzZWxmLmFzc2VydExlc3MobGVuKHIpLCAzMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocls6MzBdLCAicmUuY29tcGlsZSgnVmVyeSBsb25nIGxvbmcgbG9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyWy0xNjpdLCAiLCByZS5JR05PUkVDQVNFKSIpCisKKworY2xhc3MgSW1wbGVtZW50YXRpb25UZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUZXN0IGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIHJlIG1vZHVsZS4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X292ZXJsYXBfdGFibGUoc2VsZik6CisgICAgICAgIGYgPSBzcmVfY29tcGlsZS5fZ2VuZXJhdGVfb3ZlcmxhcF90YWJsZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoIiIpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCJhIiksIFswXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCJhYmNkIiksIFswLCAwLCAwLCAwXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCJhYWFhIiksIFswLCAxLCAyLCAzXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCJhYmFiYmEiKSwgWzAsIDAsIDEsIDIsIDAsIDFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoImFiY2FiZGFjIiksIFswLCAwLCAwLCAxLCAyLCAwLCAxLCAwXSkKKworCitjbGFzcyBFeHRlcm5hbFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X3JlX2JlbmNobWFya3Moc2VsZik6CisgICAgICAgICdyZV90ZXN0cyBiZW5jaG1hcmtzJworICAgICAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IGJlbmNobWFya3MKKyAgICAgICAgZm9yIHBhdHRlcm4sIHMgaW4gYmVuY2htYXJrczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBhdHRlcm49cGF0dGVybiwgc3RyaW5nPXMpOgorICAgICAgICAgICAgICAgIHAgPSByZS5jb21waWxlKHBhdHRlcm4pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuc2VhcmNoKHMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLm1hdGNoKHMpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLmZ1bGxtYXRjaChzKSkKKyAgICAgICAgICAgICAgICBzMiA9ICcgJyoxMDAwMCArIHMgKyAnICcqMTAwMDAKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocC5zZWFyY2goczIpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShwLm1hdGNoKHMyLCAxMDAwMCkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAubWF0Y2goczIsIDEwMDAwLCAxMDAwMCArIGxlbihzKSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHAuZnVsbG1hdGNoKHMyLCAxMDAwMCwgMTAwMDAgKyBsZW4ocykpKQorCisgICAgZGVmIHRlc3RfcmVfdGVzdHMoc2VsZik6CisgICAgICAgICdyZV90ZXN0cyB0ZXN0IHN1aXRlJworICAgICAgICBmcm9tIHRlc3QucmVfdGVzdHMgaW1wb3J0IHRlc3RzLCBTVUNDRUVELCBGQUlMLCBTWU5UQVhfRVJST1IKKyAgICAgICAgZm9yIHQgaW4gdGVzdHM6CisgICAgICAgICAgICBwYXR0ZXJuID0gcyA9IG91dGNvbWUgPSByZXBsID0gZXhwZWN0ZWQgPSBOb25lCisgICAgICAgICAgICBpZiBsZW4odCkgPT0gNToKKyAgICAgICAgICAgICAgICBwYXR0ZXJuLCBzLCBvdXRjb21lLCByZXBsLCBleHBlY3RlZCA9IHQKKyAgICAgICAgICAgIGVsaWYgbGVuKHQpID09IDM6CisgICAgICAgICAgICAgICAgcGF0dGVybiwgcywgb3V0Y29tZSA9IHQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGVzdCB0dXBsZXMgc2hvdWxkIGhhdmUgMyBvciA1IGZpZWxkcycsIHQpCisKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHBhdHRlcm49cGF0dGVybiwgc3RyaW5nPXMpOgorICAgICAgICAgICAgICAgIGlmIG91dGNvbWUgPT0gU1lOVEFYX0VSUk9SOiAgIyBFeHBlY3RlZCBhIHN5bnRheCBlcnJvcgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHJlLmVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlLmNvbXBpbGUocGF0dGVybikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUocGF0dGVybikKICAgICAgICAgICAgICAgICByZXN1bHQgPSBvYmouc2VhcmNoKHMpCi0gICAgICAgICAgICBleGNlcHQgcmUuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgICAgIHByaW50KCc9PT0gVW5leHBlY3RlZCBleGNlcHRpb24nLCB0LCByZXByKG1zZykpCi0gICAgICAgICAgICBpZiBvdXRjb21lID09IFNZTlRBWF9FUlJPUjoKLSAgICAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBhIHN5bnRheCBlcnJvcjsgZm9yZ2V0IGl0LgotICAgICAgICAgICAgICAgIHBhc3MKLSAgICAgICAgICAgIGVsaWYgb3V0Y29tZSA9PSBGQUlMOgotICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOiBwYXNzICAgIyBObyBtYXRjaCwgYXMgZXhwZWN0ZWQKLSAgICAgICAgICAgICAgICBlbHNlOiBwcmludCgnPT09IFN1Y2NlZWRlZCBpbmNvcnJlY3RseScsIHQpCi0gICAgICAgICAgICBlbGlmIG91dGNvbWUgPT0gU1VDQ0VFRDoKLSAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgb3V0Y29tZSA9PSBGQUlMOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZXN1bHQsICdTdWNjZWVkZWQgaW5jb3JyZWN0bHknKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCwgJ0ZhaWxlZCBpbmNvcnJlY3RseScpCiAgICAgICAgICAgICAgICAgICAgICMgTWF0Y2hlZCwgYXMgZXhwZWN0ZWQsIHNvIG5vdyB3ZSBjb21wdXRlIHRoZQogICAgICAgICAgICAgICAgICAgICAjIHJlc3VsdCBzdHJpbmcgYW5kIGNvbXBhcmUgaXQgdG8gb3VyIGV4cGVjdGVkIHJlc3VsdC4KICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCA9IHJlc3VsdC5zcGFuKDApCi0gICAgICAgICAgICAgICAgICAgIHZhcmRpY3Q9eydmb3VuZCc6IHJlc3VsdC5ncm91cCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyb3Vwcyc6IHJlc3VsdC5ncm91cCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxhZ3MnOiByZXN1bHQucmUuZmxhZ3N9CisgICAgICAgICAgICAgICAgICAgIHZhcmRpY3QgPSB7J2ZvdW5kJzogcmVzdWx0Lmdyb3VwKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdncm91cHMnOiByZXN1bHQuZ3JvdXAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmxhZ3MnOiByZXN1bHQucmUuZmxhZ3N9CiAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDEsIDEwMCk6CiAgICAgICAgICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2kgPSByZXN1bHQuZ3JvdXAoaSkKQEAgLTExNTksMTIgKzE1MzYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2kgPSAiRXJyb3IiCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJkaWN0W2ldID0gZ2kKLSAgICAgICAgICAgICAgICAgICAgcmVwbCA9IGV2YWwocmVwbCwgdmFyZGljdCkKLSAgICAgICAgICAgICAgICAgICAgaWYgcmVwbCAhPSBleHBlY3RlZDoKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCc9PT0gZ3JvdXBpbmcgZXJyb3InLCB0LCBlbmQ9JyAnKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQocmVwcihyZXBsKSArICcgc2hvdWxkIGJlICcgKyByZXByKGV4cGVjdGVkKSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnPT09IEZhaWxlZCBpbmNvcnJlY3RseScsIHQpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZhbChyZXBsLCB2YXJkaWN0KSwgZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dyb3VwaW5nIGVycm9yJykKIAogICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCB3aXRoIGJvdGggcGF0dGVybiBhbmQgc3RyaW5nIGNvbnZlcnRlZCB0bwogICAgICAgICAgICAgICAgICMgYnl0ZXMsIGFuZCBjaGVjayB0aGF0IGl0IHN0aWxsIHN1Y2NlZWRzLgpAQCAtMTE3NSw1NSArMTU0OCwzOSBAQAogICAgICAgICAgICAgICAgICAgICAjIHNraXAgbm9uLWFzY2lpIHRlc3RzCiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdieXRlcyBwYXR0ZXJuIG1hdGNoJyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBicGF0ID0gcmUuY29tcGlsZShicGF0KQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJz09PSBGYWlscyBvbiBieXRlcyBwYXR0ZXJuIGNvbXBpbGUnLCB0KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmVyYm9zZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sucHJpbnRfZXhjKGZpbGU9c3lzLnN0ZG91dCkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3Jlc3VsdCA9IGJwYXQuc2VhcmNoKGJzKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYnl0ZXNfcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoJz09PSBGYWlscyBvbiBieXRlcyBwYXR0ZXJuIG1hdGNoJywgdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShicGF0LnNlYXJjaChicykpCiAKICAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggd2l0aCB0aGUgc2VhcmNoIGFyZWEgbGltaXRlZCB0byB0aGUgZXh0ZW50CiAgICAgICAgICAgICAgICAgIyBvZiB0aGUgbWF0Y2ggYW5kIHNlZSBpZiBpdCBzdGlsbCBzdWNjZWVkcy4gIFxCIHdpbGwKICAgICAgICAgICAgICAgICAjIGJyZWFrIChiZWNhdXNlIGl0IHdvbid0IG1hdGNoIGF0IHRoZSBlbmQgb3Igc3RhcnQgb2YgYQogICAgICAgICAgICAgICAgICMgc3RyaW5nKSwgc28gd2UnbGwgaWdub3JlIHBhdHRlcm5zIHRoYXQgZmVhdHVyZSBpdC4KLQotICAgICAgICAgICAgICAgIGlmIHBhdHRlcm5bOjJdICE9ICdcXEInIGFuZCBwYXR0ZXJuWy0yOl0gIT0gJ1xcQicgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZXN1bHQgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUocGF0dGVybikKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzLCByZXN1bHQuc3RhcnQoMCksIHJlc3VsdC5lbmQoMCkgKyAxKQotICAgICAgICAgICAgICAgICAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCc9PT0gRmFpbGVkIG9uIHJhbmdlLWxpbWl0ZWQgbWF0Y2gnLCB0KQorICAgICAgICAgICAgICAgIGlmIChwYXR0ZXJuWzoyXSAhPSByJ1xCJyBhbmQgcGF0dGVyblstMjpdICE9IHInXEInCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlc3VsdCBpcyBub3QgTm9uZSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdyYW5nZS1saW1pdGVkIG1hdGNoJyk6CisgICAgICAgICAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4pCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqLnNlYXJjaChzLCBzdGFydCwgZW5kICsgMSkpCiAKICAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggd2l0aCBJR05PUkVDQVNFIGVuYWJsZWQsIGFuZCBjaGVjayB0aGF0IGl0CiAgICAgICAgICAgICAgICAgIyBzdGlsbCBzdWNjZWVkcy4KLSAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLklHTk9SRUNBU0UpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzKQotICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnPT09IEZhaWxzIG9uIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2gnLCB0KQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCdjYXNlLWluc2Vuc2l0aXZlIG1hdGNoJyk6CisgICAgICAgICAgICAgICAgICAgIG9iaiA9IHJlLmNvbXBpbGUocGF0dGVybiwgcmUuSUdOT1JFQ0FTRSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9iai5zZWFyY2gocykpCiAKICAgICAgICAgICAgICAgICAjIFRyeSB0aGUgbWF0Y2ggd2l0aCBMT0NBTEUgZW5hYmxlZCwgYW5kIGNoZWNrIHRoYXQgaXQKICAgICAgICAgICAgICAgICAjIHN0aWxsIHN1Y2NlZWRzLgogICAgICAgICAgICAgICAgIGlmICcoP3UpJyBub3QgaW4gcGF0dGVybjoKLSAgICAgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5MT0NBTEUpCi0gICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG9iai5zZWFyY2gocykKLSAgICAgICAgICAgICAgICAgICAgaWYgcmVzdWx0IGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgnPT09IEZhaWxzIG9uIGxvY2FsZS1zZW5zaXRpdmUgbWF0Y2gnLCB0KQorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgnbG9jYWxlLXNlbnNpdGl2ZSBtYXRjaCcpOgorICAgICAgICAgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5MT0NBTEUpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqLnNlYXJjaChzKSkKIAogICAgICAgICAgICAgICAgICMgVHJ5IHRoZSBtYXRjaCB3aXRoIFVOSUNPREUgbG9jYWxlIGVuYWJsZWQsIGFuZCBjaGVjawogICAgICAgICAgICAgICAgICMgdGhhdCBpdCBzdGlsbCBzdWNjZWVkcy4KLSAgICAgICAgICAgICAgICBvYmogPSByZS5jb21waWxlKHBhdHRlcm4sIHJlLlVOSUNPREUpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gb2JqLnNlYXJjaChzKQotICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBwcmludCgnPT09IEZhaWxzIG9uIHVuaWNvZGUtc2Vuc2l0aXZlIG1hdGNoJywgdCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgndW5pY29kZS1zZW5zaXRpdmUgbWF0Y2gnKToKKyAgICAgICAgICAgICAgICAgICAgb2JqID0gcmUuY29tcGlsZShwYXR0ZXJuLCByZS5VTklDT0RFKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob2JqLnNlYXJjaChzKSkKIAogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFJlVGVzdHMpCi0gICAgcnVuX3JlX3Rlc3RzKCkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weSBiL0xpYi90ZXN0L3Rlc3RfcmVhZGxpbmUucHkKaW5kZXggNTQ4M2RkMy4uMGIyYjBhNSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9yZWFkbGluZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3JlYWRsaW5lLnB5CkBAIC0xLDIxICsxLDI0IEBACiAiIiIKIFZlcnkgbWluaW1hbCB1bml0dGVzdHMgZm9yIHBhcnRzIG9mIHRoZSByZWFkbGluZSBtb2R1bGUuCi0KLVRoZXNlIHRlc3RzIHdlcmUgYWRkZWQgdG8gY2hlY2sgdGhhdCB0aGUgbGliZWRpdCBlbXVsYXRpb24gb24gT1NYIGFuZAotdGhlICJyZWFsIiByZWFkbGluZSBoYXZlIHRoZSBzYW1lIGludGVyZmFjZSBmb3IgaGlzdG9yeSBtYW5pcHVsYXRpb24uIFRoYXQncwotd2h5IHRoZSB0ZXN0cyBjb3ZlciBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UuCiAiIiIKK2ltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBpbXBvcnRfbW9kdWxlCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCiAjIFNraXAgdGVzdHMgaWYgdGhlcmUgaXMgbm8gcmVhZGxpbmUgbW9kdWxlCiByZWFkbGluZSA9IGltcG9ydF9tb2R1bGUoJ3JlYWRsaW5lJykKIAogY2xhc3MgVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24gKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiIKKyAgICBUaGVzZSB0ZXN0cyB3ZXJlIGFkZGVkIHRvIGNoZWNrIHRoYXQgdGhlIGxpYmVkaXQgZW11bGF0aW9uIG9uIE9TWCBhbmQgdGhlCisgICAgInJlYWwiIHJlYWRsaW5lIGhhdmUgdGhlIHNhbWUgaW50ZXJmYWNlIGZvciBoaXN0b3J5IG1hbmlwdWxhdGlvbi4gVGhhdCdzCisgICAgd2h5IHRoZSB0ZXN0cyBjb3ZlciBvbmx5IGEgc21hbGwgc3Vic2V0IG9mIHRoZSBpbnRlcmZhY2UuCisgICAgIiIiCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBoYXNhdHRyKHJlYWRsaW5lLCAnY2xlYXJfaGlzdG9yeScpLAotICAgICAgICAgICAgICAgICAgICAgIlRoZSBoaXN0b3J5IHVwZGF0ZSB0ZXN0IGNhbm5vdCBiZSBydW4gYmVjYXVzZSB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgImNsZWFyX2hpc3RvcnkgbWV0aG9kIGlzIG5vdCBhdmFpbGFibGUuIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHJlYWRsaW5lLCAiY2xlYXJfaGlzdG9yeSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgaGlzdG9yeSB1cGRhdGUgdGVzdCBjYW5ub3QgYmUgcnVuIGJlY2F1c2UgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY2xlYXJfaGlzdG9yeSBtZXRob2QgaXMgbm90IGF2YWlsYWJsZS4iKQogICAgIGRlZiB0ZXN0SGlzdG9yeVVwZGF0ZXMoc2VsZik6CiAgICAgICAgIHJlYWRsaW5lLmNsZWFyX2hpc3RvcnkoKQogCkBAIC00MCw4ICs0MywyMiBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRsaW5lLmdldF9jdXJyZW50X2hpc3RvcnlfbGVuZ3RoKCksIDEpCiAKIAorY2xhc3MgVGVzdFJlYWRsaW5lKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIEB1bml0dGVzdC5za2lwSWYocmVhZGxpbmUuX1JFQURMSU5FX1ZFUlNJT04gPCAweDA2MDAKKyAgICAgICAgICAgICAgICAgICAgIGFuZCAibGliZWRpdCIgbm90IGluIHJlYWRsaW5lLl9fZG9jX18sCisgICAgICAgICAgICAgICAgICAgICAibm90IHN1cHBvcnRlZCBpbiB0aGlzIGxpYnJhcnkgdmVyc2lvbiIpCisgICAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTk4ODQ6IEVuc3VyZSB0aGF0IHRoZSBBTlNJIHNlcXVlbmNlICJcMDMzWzEwMzRoIiBpcyBub3QKKyAgICAgICAgIyB3cml0dGVuIGludG8gc3Rkb3V0IHdoZW4gdGhlIHJlYWRsaW5lIG1vZHVsZSBpcyBpbXBvcnRlZCBhbmQgc3Rkb3V0CisgICAgICAgICMgaXMgcmVkaXJlY3RlZCB0byBhIHBpcGUuCisgICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCByZWFkbGluZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEVSTT0neHRlcm0tMjU2Y29sb3InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYicnKQorCisKIGRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGVzdEhpc3RvcnlNYW5pcHVsYXRpb24pCisgICAgcnVuX3VuaXR0ZXN0KFRlc3RIaXN0b3J5TWFuaXB1bGF0aW9uLCBUZXN0UmVhZGxpbmUpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVncnRlc3QucHkgYi9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzOThhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3JlZ3J0ZXN0LnB5CkBAIC0wLDAgKzEsMjc1IEBACisiIiIKK1Rlc3RzIG9mIHJlZ3J0ZXN0LnB5LgorIiIiCisKK2ltcG9ydCBhcmdwYXJzZQoraW1wb3J0IGZhdWx0aGFuZGxlcgoraW1wb3J0IGdldG9wdAoraW1wb3J0IG9zLnBhdGgKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCByZWdydGVzdCwgc3VwcG9ydAorCitjbGFzcyBQYXJzZUFyZ3NUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICAiIiJUZXN0IHJlZ3J0ZXN0J3MgYXJndW1lbnQgcGFyc2luZy4iIiIKKworICAgIGRlZiBjaGVja0Vycm9yKHNlbGYsIGFyZ3MsIG1zZyk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnIsIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgcmVncnRlc3QuX3BhcnNlX2FyZ3MoYXJncykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihtc2csIGVyci5nZXR2YWx1ZSgpKQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLWgnLCAnLS1oZWxwJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBvdXQsIFwKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgICAgICByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCdSdW4gUHl0aG9uIHJlZ3Jlc3Npb24gdGVzdHMuJywgb3V0LmdldHZhbHVlKCkpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKGZhdWx0aGFuZGxlciwgJ2R1bXBfdHJhY2ViYWNrX2xhdGVyJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgImZhdWx0aGFuZGxlci5kdW1wX3RyYWNlYmFja19sYXRlcigpIHJlcXVpcmVkIikKKyAgICBkZWYgdGVzdF90aW1lb3V0KHNlbGYpOgorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS10aW1lb3V0JywgJzQuMiddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnRpbWVvdXQsIDQuMikKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10aW1lb3V0J10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICBzZWxmLmNoZWNrRXJyb3IoWyctLXRpbWVvdXQnLCAnZm9vJ10sICdpbnZhbGlkIGZsb2F0IHZhbHVlJykKKworICAgIGRlZiB0ZXN0X3dhaXQoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXdhaXQnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLndhaXQpCisKKyAgICBkZWYgdGVzdF9zbGF2ZWFyZ3Moc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXNsYXZlYXJncycsICdbW10sIHt9XSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnNsYXZlYXJncywgJ1tbXSwge31dJykKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS1zbGF2ZWFyZ3MnXSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9zdGFydChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVMnLCAnLS1zdGFydCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnN0YXJ0LCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfdmVyYm9zZShzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy12J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMSkKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy12dnYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAzKQorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFsnLS12ZXJib3NlJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMSkKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tdmVyYm9zZSddICogMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAzKQorICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnZlcmJvc2UsIDApCisKKyAgICBkZWYgdGVzdF92ZXJib3NlMihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXcnLCAnLS12ZXJib3NlMic6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy52ZXJib3NlMikKKworICAgIGRlZiB0ZXN0X3ZlcmJvc2UzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctVycsICctLXZlcmJvc2UzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnZlcmJvc2UzKQorCisgICAgZGVmIHRlc3RfcXVpZXQoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1xJywgJy0tcXVpZXQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3Rfc2xvdyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW8nLCAnLS1zbG93JzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLnByaW50X3Nsb3cpCisKKyAgICBkZWYgdGVzdF9oZWFkZXIoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLWhlYWRlciddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuaGVhZGVyKQorCisgICAgZGVmIHRlc3RfcmFuZG9taXplKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctcicsICctLXJhbmRvbWl6ZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5yYW5kb21pemUpCisKKyAgICBkZWYgdGVzdF9yYW5kc2VlZChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcmFuZHNlZWQnLCAnMTIzNDUnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5yYW5kb21fc2VlZCwgMTIzNDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5yYW5kb21pemUpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tcmFuZHNlZWQnXSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbJy0tcmFuZHNlZWQnLCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9mcm9tZmlsZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLWYnLCAnLS1mcm9tZmlsZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdmb28nXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmZyb21maWxlLCAnZm9vJykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJywgJy1zJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9leGNsdWRlKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICcteCcsICctLWV4Y2x1ZGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuZXhjbHVkZSkKKworICAgIGRlZiB0ZXN0X3NpbmdsZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXMnLCAnLS1zaW5nbGUnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMuc2luZ2xlKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnLWYnLCAnZm9vJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9tYXRjaChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW0nLCAnLS1tYXRjaCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdwYXR0ZXJuJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5tYXRjaF90ZXN0cywgJ3BhdHRlcm4nKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9mYWlsZmFzdChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUcnLCAnLS1mYWlsZmFzdCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICctdiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mYWlsZmFzdCkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICctVyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5mYWlsZmFzdCkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICctRy8tLWZhaWxmYXN0IG5lZWRzIGVpdGhlciAtdiBvciAtVycpCisKKyAgICBkZWYgdGVzdF91c2Uoc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy11JywgJy0tdXNlJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2d1aSxuZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy51c2VfcmVzb3VyY2VzLCBbJ2d1aScsICduZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnZ3VpLG5vbmUsbmV0d29yayddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgWyduZXR3b3JrJ10pCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSBsaXN0KHJlZ3J0ZXN0LlJFU09VUkNFX05BTUVTKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkLnJlbW92ZSgnZ3VpJykKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICdhbGwsLWd1aSddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudXNlX3Jlc291cmNlcywgZXhwZWN0ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdCwgJ2ZvbyddLCAnaW52YWxpZCByZXNvdXJjZScpCisKKyAgICBkZWYgdGVzdF9tZW1saW1pdChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLU0nLCAnLS1tZW1saW1pdCc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc0RyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMubWVtbGltaXQsICc0RycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHRdLCAnZXhwZWN0ZWQgb25lIGFyZ3VtZW50JykKKworICAgIGRlZiB0ZXN0X3Rlc3RkaXIoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXRlc3RkaXInLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudGVzdGRpciwgb3MucGF0aC5qb2luKHN1cHBvcnQuU0FWRURDV0QsICdmb28nKSkKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS10ZXN0ZGlyJ10sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorCisgICAgZGVmIHRlc3RfcnVubGVha3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1MJywgJy0tcnVubGVha3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucnVubGVha3MpCisKKyAgICBkZWYgdGVzdF9odW50cmxlYWtzKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctUicsICctLWh1bnRybGVha3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnOiddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuaHVudHJsZWFrcywgKDUsIDQsICdyZWZsb2cudHh0JykpCisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnNjonXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmh1bnRybGVha3MsICg2LCA0LCAncmVmbG9nLnR4dCcpKQorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzozJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNSwgMywgJ3JlZmxvZy50eHQnKSkKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHQsICc2OjM6bGVha3MubG9nJ10pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy5odW50cmxlYWtzLCAoNiwgMywgJ2xlYWtzLmxvZycpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICc2J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkcyAyIG9yIDMgY29sb24tc2VwYXJhdGVkIGFyZ3VtZW50cycpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb286J10sICdpbnZhbGlkIGh1bnRybGVha3MgdmFsdWUnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnNjpmb28nXSwgJ2ludmFsaWQgaHVudHJsZWFrcyB2YWx1ZScpCisKKyAgICBkZWYgdGVzdF9tdWx0aXByb2Nlc3Moc2VsZik6CisgICAgICAgIGZvciBvcHQgaW4gJy1qJywgJy0tbXVsdGlwcm9jZXNzJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJzInXSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnVzZV9tcCwgMikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrRXJyb3IoW29wdF0sICdleHBlY3RlZCBvbmUgYXJndW1lbnQnKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0LCAnZm9vJ10sICdpbnZhbGlkIGludCB2YWx1ZScpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1UJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1sJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICcyJywgJy1NJywgJzRHJ10sICJkb24ndCBnbyB0b2dldGhlciIpCisKKyAgICBkZWYgdGVzdF9jb3ZlcmFnZShzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLVQnLCAnLS1jb3ZlcmFnZSc6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChvcHQ9b3B0KToKKyAgICAgICAgICAgICAgICBucyA9IHJlZ3J0ZXN0Ll9wYXJzZV9hcmdzKFtvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy50cmFjZSkKKworICAgIGRlZiB0ZXN0X2NvdmVyZGlyKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctRCcsICctLWNvdmVyZGlyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdCwgJ2ZvbyddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMuY292ZXJkaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3VwcG9ydC5TQVZFRENXRCwgJ2ZvbycpKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisKKyAgICBkZWYgdGVzdF9ub2NvdmVyZGlyKHNlbGYpOgorICAgICAgICBmb3Igb3B0IGluICctTicsICctLW5vY292ZXJkaXInOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShucy5jb3ZlcmRpcikKKworICAgIGRlZiB0ZXN0X3RocmVzaG9sZChzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLXQnLCAnLS10aHJlc2hvbGQnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0LCAnMTAwMCddKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudGhyZXNob2xkLCAxMDAwKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tFcnJvcihbb3B0XSwgJ2V4cGVjdGVkIG9uZSBhcmd1bWVudCcpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja0Vycm9yKFtvcHQsICdmb28nXSwgJ2ludmFsaWQgaW50IHZhbHVlJykKKworICAgIGRlZiB0ZXN0X25vd2luZG93cyhzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLW4nLCAnLS1ub3dpbmRvd3MnOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3Qob3B0PW9wdCk6CisgICAgICAgICAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobnMubm93aW5kb3dzKQorCisgICAgZGVmIHRlc3RfZm9yZXZlcihzZWxmKToKKyAgICAgICAgZm9yIG9wdCBpbiAnLUYnLCAnLS1mb3JldmVyJzoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9wdD1vcHQpOgorICAgICAgICAgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoW29wdF0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmZvcmV2ZXIpCisKKworICAgIGRlZiB0ZXN0X3VucmVjb2duaXplZF9hcmd1bWVudChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja0Vycm9yKFsnLS14eHgnXSwgJ3VzYWdlOicpCisKKyAgICBkZWYgdGVzdF9sb25nX29wdGlvbl9fcGFydGlhbChzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcXVpJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5xdWlldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorCisgICAgZGVmIHRlc3RfdHdvX29wdGlvbnMoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXF1aWV0JywgJy0tZXhjbHVkZSddKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobnMucXVpZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMudmVyYm9zZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5zLmV4Y2x1ZGUpCisKKyAgICBkZWYgdGVzdF9vcHRpb25fd2l0aF9lbXB0eV9zdHJpbmdfdmFsdWUoc2VsZik6CisgICAgICAgIG5zID0gcmVncnRlc3QuX3BhcnNlX2FyZ3MoWyctLXN0YXJ0JywgJyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLnN0YXJ0LCAnJykKKworICAgIGRlZiB0ZXN0X2FyZyhzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJ2ZvbyddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmFyZ3MsIFsnZm9vJ10pCisKKyAgICBkZWYgdGVzdF9vcHRpb25fYW5kX2FyZyhzZWxmKToKKyAgICAgICAgbnMgPSByZWdydGVzdC5fcGFyc2VfYXJncyhbJy0tcXVpZXQnLCAnZm9vJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShucy5xdWlldCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChucy52ZXJib3NlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5zLmFyZ3MsIFsnZm9vJ10pCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfcmVwcmxpYi5weQppbmRleCBjMjMzYjFkLi5hZTY3ZjA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JlcHJsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9yZXBybGliLnB5CkBAIC0zLDExICszLDExIEBACiAgIE5pY2sgTWF0aGV3c29uCiAiIiIKIAotaW1wb3J0IGltcAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgcnVuX3VuaXR0ZXN0LCBjcmVhdGVfZW1wdHlfZmlsZSwgdmVyYm9zZQpAQCAtMjQ4LDcgKzI0OCw4IEBACiAgICAgICAgIHNvdXJjZV9wYXRoX2xlbiArPSAyICogKGxlbihzZWxmLmxvbmduYW1lKSArIDEpCiAgICAgICAgICMgYSBwYXRoIHNlcGFyYXRvciArIGBtb2R1bGVfbmFtZWAgKyAiLnB5IgogICAgICAgICBzb3VyY2VfcGF0aF9sZW4gKz0gbGVuKG1vZHVsZV9uYW1lKSArIDEgKyBsZW4oIi5weSIpCi0gICAgICAgIGNhY2hlZF9wYXRoX2xlbiA9IHNvdXJjZV9wYXRoX2xlbiArIGxlbihpbXAuY2FjaGVfZnJvbV9zb3VyY2UoIngucHkiKSkgLSBsZW4oIngucHkiKQorICAgICAgICBjYWNoZWRfcGF0aF9sZW4gPSAoc291cmNlX3BhdGhfbGVuICsKKyAgICAgICAgICAgIGxlbihpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZSgieC5weSIpKSAtIGxlbigieC5weSIpKQogICAgICAgICBpZiBvcy5uYW1lID09ICdudCcgYW5kIGNhY2hlZF9wYXRoX2xlbiA+PSAyNTg6CiAgICAgICAgICAgICAjIFVuZGVyIFdpbmRvd3MsIHRoZSBtYXggcGF0aCBsZW4gaXMgMjYwIGluY2x1ZGluZyBDJ3MgdGVybWluYXRpbmcKICAgICAgICAgICAgICMgTlVMIGNoYXJhY3Rlci4KQEAgLTI1OSw2ICsyNjAsNyBAQAogICAgICAgICAgICAgcHJpbnQoImNhY2hlZF9wYXRoX2xlbiA9IiwgY2FjaGVkX3BhdGhfbGVuKQogCiAgICAgZGVmIHRlc3RfbW9kdWxlKHNlbGYpOgorICAgICAgICBzZWxmLm1heERpZmYgPSBOb25lCiAgICAgICAgIHNlbGYuX2NoZWNrX3BhdGhfbGltaXRhdGlvbnMoc2VsZi5wa2duYW1lKQogICAgICAgICBjcmVhdGVfZW1wdHlfZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5zdWJwa2duYW1lLCBzZWxmLnBrZ25hbWUgKyAnLnB5JykpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5IGIvTGliL3Rlc3QvdGVzdF9yZXNvdXJjZS5weQppbmRleCAwY2Y2MWNiLi4yZWNhZTBmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Jlc291cmNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfcmVzb3VyY2UucHkKQEAgLTEsMyArMSw2IEBACitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IHN5cworaW1wb3J0IG9zCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHRpbWUKQEAgLTYxLDcgKzY0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDUpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoLjEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi5mbHVzaCgpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBsaW1pdF9zZXQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICAgICAgaWYgbGltaXRfc2V0OgpAQCAtMTI5LDYgKzEzMiwzMyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocGFnZXNpemUsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGFnZXNpemUsIDApCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMucGxhdGZvcm0gPT0gJ2xpbnV4JywgJ3Rlc3QgcmVxdWlyZXMgTGludXgnKQorICAgIGRlZiB0ZXN0X2xpbnV4X2NvbnN0YW50cyhzZWxmKToKKyAgICAgICAgZm9yIGF0dHIgaW4gWydNU0dRVUVVRScsICdOSUNFJywgJ1JUUFJJTycsICdSVFRJTUUnLCAnU0lHUEVORElORyddOgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLnN1cHByZXNzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2V0YXR0cihyZXNvdXJjZSwgJ1JMSU1JVF8nICsgYXR0ciksIGludCkKKworICAgIEBzdXBwb3J0LnJlcXVpcmVzX2ZyZWVic2RfdmVyc2lvbig5KQorICAgIGRlZiB0ZXN0X2ZyZWVic2RfY29udGFudHMoc2VsZik6CisgICAgICAgIGZvciBhdHRyIGluIFsnU1dBUCcsICdTQlNJWkUnLCAnTlBUUyddOgorICAgICAgICAgICAgd2l0aCBjb250ZXh0bGliLnN1cHByZXNzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZ2V0YXR0cihyZXNvdXJjZSwgJ1JMSU1JVF8nICsgYXR0ciksIGludCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIocmVzb3VyY2UsICdwcmxpbWl0JyksICdubyBwcmxpbWl0JykKKyAgICBAc3VwcG9ydC5yZXF1aXJlc19saW51eF92ZXJzaW9uKDIsIDYsIDM2KQorICAgIGRlZiB0ZXN0X3BybGltaXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVzb3VyY2UucHJsaW1pdCkKKyAgICAgICAgaWYgb3MuZ2V0ZXVpZCgpICE9IDA6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhQZXJtaXNzaW9uRXJyb3IsIHJlc291cmNlLnBybGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCByZXNvdXJjZS5STElNSVRfQVMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFByb2Nlc3NMb29rdXBFcnJvciwgcmVzb3VyY2UucHJsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIHJlc291cmNlLlJMSU1JVF9BUykKKyAgICAgICAgbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0FTKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc291cmNlLnBybGltaXQoMCwgcmVzb3VyY2UuUkxJTUlUX0FTKSwgbGltaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzb3VyY2UucHJsaW1pdCgwLCByZXNvdXJjZS5STElNSVRfQVMsIGxpbWl0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdCkKKworCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUmVzb3VyY2VUZXN0KQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9ybGNvbXBsZXRlci5weQppbmRleCAxMWE3YmQyLi4wYjM5MThiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JsY29tcGxldGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfcmxjb21wbGV0ZXIucHkKQEAgLTEsNCArMSwzIEBACi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IGJ1aWx0aW5zCiBpbXBvcnQgcmxjb21wbGV0ZXIKQEAgLTY1LDkgKzY0LDQ4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgWydlZ2cue30oJy5mb3JtYXQoeCkgZm9yIHggaW4gZGlyKHN0cikKICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgeC5zdGFydHN3aXRoKCdzJyldKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdFJsY29tcGxldGVyKQorICAgIGRlZiB0ZXN0X2V4Y2Vzc2l2ZV9nZXRhdHRyKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSBnZXRhdHRyKCkgaXMgaW52b2tlZCBubyBtb3JlIHRoYW4gb25jZSBwZXIgYXR0cmlidXRlCisgICAgICAgIGNsYXNzIEZvbzoKKyAgICAgICAgICAgIGNhbGxzID0gMAorICAgICAgICAgICAgQHByb3BlcnR5CisgICAgICAgICAgICBkZWYgYmFyKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuY2FsbHMgKz0gMQorICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGYgPSBGb28oKQorICAgICAgICBjb21wbGV0ZXIgPSBybGNvbXBsZXRlci5Db21wbGV0ZXIoZGljdChmPWYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnZi5iJywgMCksICdmLmJhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5jYWxscywgMSkKKworICAgIGRlZiB0ZXN0X2NvbXBsZXRlKHNlbGYpOgorICAgICAgICBjb21wbGV0ZXIgPSBybGNvbXBsZXRlci5Db21wbGV0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnJywgMCksICdcdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxldGVyLmNvbXBsZXRlKCdhJywgMCksICdhbmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnYScsIDEpLCAnYXMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnYXMnLCAyKSwgJ2Fzc2VydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxldGVyLmNvbXBsZXRlKCdhbicsIDApLCAnYW5kJykKKworICAgIGRlZiB0ZXN0X2R1cGxpY2F0ZV9nbG9iYWxzKHNlbGYpOgorICAgICAgICBuYW1lc3BhY2UgPSB7CisgICAgICAgICAgICAnRmFsc2UnOiBOb25lLCAgIyBLZXl3b3JkIHZzIGJ1aWx0aW4gdnMgbmFtZXNwYWNlCisgICAgICAgICAgICAnYXNzZXJ0JzogTm9uZSwgICMgS2V5d29yZCB2cyBuYW1lc3BhY2UKKyAgICAgICAgICAgICd0cnknOiBsYW1iZGE6IE5vbmUsICAjIEtleXdvcmQgdnMgY2FsbGFibGUKKyAgICAgICAgICAgICdtZW1vcnl2aWV3JzogTm9uZSwgICMgQ2FsbGFibGUgYnVpbHRpbiB2cyBub24tY2FsbGFibGUKKyAgICAgICAgICAgICdFbGxpcHNpcyc6IGxhbWJkYTogTm9uZSwgICMgTm9uLWNhbGxhYmxlIGJ1aWx0aW4gdnMgY2FsbGFibGUKKyAgICAgICAgfQorICAgICAgICBjb21wbGV0ZXIgPSBybGNvbXBsZXRlci5Db21wbGV0ZXIobmFtZXNwYWNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnRmFsc2UnLCAwKSwgJ0ZhbHNlJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29tcGxldGVyLmNvbXBsZXRlKCdGYWxzZScsIDEpKSAgIyBObyBkdXBsaWNhdGVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxldGVyLmNvbXBsZXRlKCdhc3NlcnQnLCAwKSwgJ2Fzc2VydCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbXBsZXRlci5jb21wbGV0ZSgnYXNzZXJ0JywgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29tcGxldGVyLmNvbXBsZXRlKCd0cnknLCAwKSwgJ3RyeScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbXBsZXRlci5jb21wbGV0ZSgndHJ5JywgMSkpCisgICAgICAgICMgTm8gb3BlbmluZyBicmFja2V0ICIoIiBiZWNhdXNlIHdlIG92ZXJyb2RlIHRoZSBidWlsdC1pbiBjbGFzcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnbWVtb3J5dmlldycsIDApLCAnbWVtb3J5dmlldycpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbXBsZXRlci5jb21wbGV0ZSgnbWVtb3J5dmlldycsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbXBsZXRlci5jb21wbGV0ZSgnRWxsaXBzaXMnLCAwKSwgJ0VsbGlwc2lzKCcpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGNvbXBsZXRlci5jb21wbGV0ZSgnRWxsaXBzaXMnLCAxKSkKIAogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5IGIvTGliL3Rlc3QvdGVzdF9yb2JvdHBhcnNlci5weQppbmRleCBlYmM4MTljLi5kMDEyNjZmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3JvYm90cGFyc2VyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfcm9ib3RwYXJzZXIucHkKQEAgLTQsNiArNCwxMiBAQAogZnJvbSB1cmxsaWIuZXJyb3IgaW1wb3J0IFVSTEVycm9yLCBIVFRQRXJyb3IKIGZyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSBodHRwLnNlcnZlciBpbXBvcnQgQmFzZUhUVFBSZXF1ZXN0SGFuZGxlciwgSFRUUFNlcnZlcgordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKIAogY2xhc3MgUm9ib3RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGluZGV4PU5vbmUsIHBhcnNlcj1Ob25lLCB1cmw9Tm9uZSwgZ29vZD1Ob25lLCBhZ2VudD1Ob25lKToKQEAgLTI0NywzMyArMjUzLDUyIEBACiBSb2JvdFRlc3QoMTYsIGRvYywgZ29vZCwgYmFkKQogCiAKLWNsYXNzIE5ldHdvcmtUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBSb2JvdEhhbmRsZXIoQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CisKKyAgICBkZWYgZG9fR0VUKHNlbGYpOgorICAgICAgICBzZWxmLnNlbmRfZXJyb3IoNDAzLCAiRm9yYmlkZGVuIGFjY2VzcyIpCisKKyAgICBkZWYgbG9nX21lc3NhZ2Uoc2VsZiwgZm9ybWF0LCAqYXJncyk6CisgICAgICAgIHBhc3MKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICd0aHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCitjbGFzcyBQYXNzd29yZFByb3RlY3RlZFNpdGVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuc2VydmVyID0gSFRUUFNlcnZlcigoc3VwcG9ydC5IT1NULCAwKSwgUm9ib3RIYW5kbGVyKQorCisgICAgICAgIHNlbGYudCA9IHRocmVhZGluZy5UaHJlYWQoCisgICAgICAgICAgICBuYW1lPSdIVFRQU2VydmVyIHNlcnZpbmcnLAorICAgICAgICAgICAgdGFyZ2V0PXNlbGYuc2VydmVyLnNlcnZlX2ZvcmV2ZXIsCisgICAgICAgICAgICAjIFNob3J0IHBvbGwgaW50ZXJ2YWwgdG8gbWFrZSB0aGUgdGVzdCBmaW5pc2ggcXVpY2tseS4KKyAgICAgICAgICAgICMgVGltZSBiZXR3ZWVuIHJlcXVlc3RzIGlzIHNob3J0IGVub3VnaCB0aGF0IHdlIHdvbid0IHdha2UKKyAgICAgICAgICAgICMgdXAgc3B1cmlvdXNseSB0b28gbWFueSB0aW1lcy4KKyAgICAgICAgICAgIGt3YXJncz17J3BvbGxfaW50ZXJ2YWwnOjAuMDF9KQorICAgICAgICBzZWxmLnQuZGFlbW9uID0gVHJ1ZSAgIyBJbiBjYXNlIHRoaXMgZnVuY3Rpb24gcmFpc2VzLgorICAgICAgICBzZWxmLnQuc3RhcnQoKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzZWxmLnNlcnZlci5zaHV0ZG93bigpCisgICAgICAgIHNlbGYudC5qb2luKCkKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc2VydmVyX2Nsb3NlKCkKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICBzZWxmLnRlc3RQYXNzd29yZFByb3RlY3RlZFNpdGUoKQogCiAgICAgZGVmIHRlc3RQYXNzd29yZFByb3RlY3RlZFNpdGUoc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucmVxdWlyZXMoJ25ldHdvcmsnKQotICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KCdtdWVibGVzbW9yYWxlZGEuY29tJyk6Ci0gICAgICAgICAgICB1cmwgPSAnaHR0cDovL211ZWJsZXNtb3JhbGVkYS5jb20nCi0gICAgICAgICAgICByb2JvdHNfdXJsID0gdXJsICsgIi9yb2JvdHMudHh0IgotICAgICAgICAgICAgIyBGaXJzdCBjaGVjayB0aGUgVVJMIGlzIHVzYWJsZSBmb3Igb3VyIHB1cnBvc2VzLCBzaW5jZSB0aGUKLSAgICAgICAgICAgICMgdGVzdCBzaXRlIGlzIGEgYml0IGZsYWt5LgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHVybG9wZW4ocm9ib3RzX3VybCkKLSAgICAgICAgICAgIGV4Y2VwdCBIVFRQRXJyb3IgYXMgZToKLSAgICAgICAgICAgICAgICBpZiBlLmNvZGUgbm90IGluIHs0MDEsIDQwM306Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXIgc2hvdWxkIHJldHVybiBhIDQwMSBvciA0MDMgSFRUUCBlcnJvciwgbm90ICVyIgotICAgICAgICAgICAgICAgICAgICAgICAgJSAocm9ib3RzX3VybCwgZS5jb2RlKSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKLSAgICAgICAgICAgICAgICAgICAgIiVyIHNob3VsZCByZXR1cm4gYSA0MDEgb3IgNDAzIEhUVFAgZXJyb3IsIG5vdCBzdWNjZWVkIgotICAgICAgICAgICAgICAgICAgICAlIChyb2JvdHNfdXJsKSkKLSAgICAgICAgICAgIHBhcnNlciA9IHVybGxpYi5yb2JvdHBhcnNlci5Sb2JvdEZpbGVQYXJzZXIoKQotICAgICAgICAgICAgcGFyc2VyLnNldF91cmwodXJsKQotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHBhcnNlci5yZWFkKCkKLSAgICAgICAgICAgIGV4Y2VwdCBVUkxFcnJvcjoKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCclcyBpcyB1bmF2YWlsYWJsZScgJSB1cmwpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhcnNlci5jYW5fZmV0Y2goIioiLCByb2JvdHNfdXJsKSwgRmFsc2UpCisgICAgICAgIGFkZHIgPSBzZWxmLnNlcnZlci5zZXJ2ZXJfYWRkcmVzcworICAgICAgICB1cmwgPSAnaHR0cDovLycgKyBzdXBwb3J0LkhPU1QgKyAnOicgKyBzdHIoYWRkclsxXSkKKyAgICAgICAgcm9ib3RzX3VybCA9IHVybCArICIvcm9ib3RzLnR4dCIKKyAgICAgICAgcGFyc2VyID0gdXJsbGliLnJvYm90cGFyc2VyLlJvYm90RmlsZVBhcnNlcigpCisgICAgICAgIHBhcnNlci5zZXRfdXJsKHVybCkKKyAgICAgICAgcGFyc2VyLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHBhcnNlci5jYW5fZmV0Y2goIioiLCByb2JvdHNfdXJsKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJyVzJyAlIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fCisKK2NsYXNzIE5ldHdvcmtUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBAdW5pdHRlc3Quc2tpcCgnZG9lcyBub3QgaGFuZGxlIHRoZSBnemlwIGVuY29kaW5nIGRlbGl2ZXJlZCBieSBweWRvdG9yZycpCiAgICAgZGVmIHRlc3RQeXRob25Pcmcoc2VsZik6CkBAIC0yODgsOCArMzEzLDggQEAKIGRlZiBsb2FkX3Rlc3RzKGxvYWRlciwgc3VpdGUsIHBhdHRlcm4pOgogICAgIHN1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKE5ldHdvcmtUZXN0Q2FzZSkKICAgICBzdWl0ZS5hZGRUZXN0KHRlc3RzKQorICAgIHN1aXRlLmFkZFRlc3QoUGFzc3dvcmRQcm90ZWN0ZWRTaXRlVGVzdENhc2UoKSkKICAgICByZXR1cm4gc3VpdGUKIAogaWYgX19uYW1lX189PSdfX21haW5fXyc6Ci0gICAgc3VwcG9ydC51c2VfcmVzb3VyY2VzID0gWyduZXR3b3JrJ10KICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkgYi9MaWIvdGVzdC90ZXN0X3J1bnB5LnB5CmluZGV4IDJkZGJhMzQuLjc4NmI4MTMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfcnVucHkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9ydW5weS5weQpAQCAtNSw3ICs1LDcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCByZQogaW1wb3J0IHRlbXBmaWxlCi1pbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgaW1wb3J0bGliLCBpbXBvcnRsaWIubWFjaGluZXJ5LCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHB5X2NvbXBpbGUKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoCiAgICAgZm9yZ2V0LCBtYWtlX2xlZ2FjeV9weWMsIHJ1bl91bml0dGVzdCwgdW5sb2FkLCB2ZXJib3NlLCBub190cmFjaW5nLApAQCAtNDcsNiArNDcsNyBAQAogICAgICJfX2NhY2hlZF9fIjogTm9uZSwKICAgICAiX19wYWNrYWdlX18iOiBOb25lLAogICAgICJfX2RvY19fIjogTm9uZSwKKyAgICAiX19zcGVjX18iOiBOb25lCiB9CiBleGFtcGxlX25hbWVzcGFjZSA9ICB7CiAgICAgInN5cyI6IHN5cywKQEAgLTY3LDExICs2OCwxOSBAQAogICAgICMgdGVzdGluZyBvY2N1cnMgYXQgdGhvc2UgdXBwZXIgbGF5ZXJzIGFzIHdlbGwsIG5vdCBqdXN0IGF0IHRoZSB1dGlsaXR5CiAgICAgIyBsYXllcgogCisgICAgIyBGaWd1cmluZyBvdXQgdGhlIGxvYWRlciBkZXRhaWxzIGluIGFkdmFuY2UgaXMgaGFyZCB0byBkbywgc28gd2Ugc2tpcAorICAgICMgY2hlY2tpbmcgdGhlIGZ1bGwgZGV0YWlscyBvZiBsb2FkZXIgYW5kIGxvYWRlcl9zdGF0ZQorICAgIENIRUNLRURfU1BFQ19BVFRSSUJVVEVTID0gWyJuYW1lIiwgInBhcmVudCIsICJvcmlnaW4iLCAiY2FjaGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGFzX2xvY2F0aW9uIiwgInN1Ym1vZHVsZV9zZWFyY2hfbG9jYXRpb25zIl0KKwogICAgIGRlZiBhc3NlcnROYW1lc3BhY2VNYXRjaGVzKHNlbGYsIHJlc3VsdF9ucywgZXhwZWN0ZWRfbnMpOgogICAgICAgICAiIiJDaGVjayB0d28gbmFtZXNwYWNlcyBtYXRjaC4KIAogICAgICAgICAgICBJZ25vcmVzIGFueSB1bnNwZWNpZmllZCBpbnRlcnByZXRlciBjcmVhdGVkIG5hbWVzCiAgICAgICAgICIiIgorICAgICAgICAjIEF2b2lkIHNpZGUgZWZmZWN0cworICAgICAgICByZXN1bHRfbnMgPSByZXN1bHRfbnMuY29weSgpCisgICAgICAgIGV4cGVjdGVkX25zID0gZXhwZWN0ZWRfbnMuY29weSgpCiAgICAgICAgICMgSW1wbHMgYXJlIHBlcm1pdHRlZCB0byBhZGQgZXh0cmEgbmFtZXMsIHNvIGZpbHRlciB0aGVtIG91dAogICAgICAgICBmb3IgayBpbiBsaXN0KHJlc3VsdF9ucyk6CiAgICAgICAgICAgICBpZiBrLnN0YXJ0c3dpdGgoIl9fIikgYW5kIGsuZW5kc3dpdGgoIl9fIik6CkBAIC03OSw3ICs4OCwyNSBAQAogICAgICAgICAgICAgICAgICAgICByZXN1bHRfbnMucG9wKGspCiAgICAgICAgICAgICAgICAgaWYgayBub3QgaW4gZXhwZWN0ZWRfbnNbIm5lc3RlZCJdOgogICAgICAgICAgICAgICAgICAgICByZXN1bHRfbnNbIm5lc3RlZCJdLnBvcChrKQotICAgICAgICAjIERvbid0IHVzZSBkaXJlY3QgZGljdCBjb21wYXJpc29uIC0gdGhlIGRpZmZzIGFyZSB0b28gaGFyZCB0byBkZWJ1ZworICAgICAgICAjIFNwZWMgZXF1YWxpdHkgaW5jbHVkZXMgdGhlIGxvYWRlciwgc28gd2UgdGFrZSB0aGUgc3BlYyBvdXQgb2YgdGhlCisgICAgICAgICMgcmVzdWx0IG5hbWVzcGFjZSBhbmQgY2hlY2sgdGhhdCBzZXBhcmF0ZWx5CisgICAgICAgIHJlc3VsdF9zcGVjID0gcmVzdWx0X25zLnBvcCgiX19zcGVjX18iKQorICAgICAgICBleHBlY3RlZF9zcGVjID0gZXhwZWN0ZWRfbnMucG9wKCJfX3NwZWNfXyIpCisgICAgICAgIGlmIGV4cGVjdGVkX3NwZWMgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlc3VsdF9zcGVjKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBJZiBhbiBleHBlY3RlZCBsb2FkZXIgaXMgc2V0LCB3ZSBqdXN0IGNoZWNrIHdlIGdvdCB0aGUgcmlnaHQKKyAgICAgICAgICAgICMgdHlwZSwgcmF0aGVyIHRoYW4gY2hlY2tpbmcgZm9yIGZ1bGwgZXF1YWxpdHkKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkX3NwZWMubG9hZGVyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyZXN1bHRfc3BlYy5sb2FkZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZShleHBlY3RlZF9zcGVjLmxvYWRlcikpCisgICAgICAgICAgICBmb3IgYXR0ciBpbiBzZWxmLkNIRUNLRURfU1BFQ19BVFRSSUJVVEVTOgorICAgICAgICAgICAgICAgIGsgPSAiX19zcGVjX18uIiArIGF0dHIKKyAgICAgICAgICAgICAgICBhY3R1YWwgPSAoaywgZ2V0YXR0cihyZXN1bHRfc3BlYywgYXR0cikpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoaywgZ2V0YXR0cihleHBlY3RlZF9zcGVjLCBhdHRyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisgICAgICAgICMgRm9yIHRoZSByZXN0LCB3ZSBzdGlsbCBkb24ndCB1c2UgZGlyZWN0IGRpY3QgY29tcGFyaXNvbiBvbiB0aGUKKyAgICAgICAgIyBuYW1lc3BhY2UsIGFzIHRoZSBkaWZmcyBhcmUgdG9vIGhhcmQgdG8gZGVidWcgaWYgYW55dGhpbmcgYnJlYWtzCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHJlc3VsdF9ucyksIHNldChleHBlY3RlZF9ucykpCiAgICAgICAgIGZvciBrIGluIHJlc3VsdF9uczoKICAgICAgICAgICAgIGFjdHVhbCA9IChrLCByZXN1bHRfbnNba10pCkBAIC0xMzAsMTIgKzE1NywxNiBAQAogICAgICAgICBtb2RfZm5hbWUgPSAiU29tZSBvdGhlciBub25zZW5zZSIKICAgICAgICAgbW9kX2xvYWRlciA9ICJOb3cgeW91J3JlIGp1c3QgYmVpbmcgc2lsbHkiCiAgICAgICAgIG1vZF9wYWNrYWdlID0gJycgIyBUcmVhdCBhcyBhIHRvcCBsZXZlbCBtb2R1bGUKKyAgICAgICAgbW9kX3NwZWMgPSBpbXBvcnRsaWIubWFjaGluZXJ5Lk1vZHVsZVNwZWMobW9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbj1tb2RfZm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlcj1tb2RfbG9hZGVyKQogICAgICAgICBleHBlY3RlZF9ucyA9IGV4YW1wbGVfbmFtZXNwYWNlLmNvcHkoKQogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogbW9kX25hbWUsCiAgICAgICAgICAgICAiX19maWxlX18iOiBtb2RfZm5hbWUsCiAgICAgICAgICAgICAiX19sb2FkZXJfXyI6IG1vZF9sb2FkZXIsCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiBtb2RfcGFja2FnZSwKKyAgICAgICAgICAgICJfX3NwZWNfXyI6IG1vZF9zcGVjLAogICAgICAgICAgICAgInJ1bl9hcmd2MCI6IG1vZF9mbmFtZSwKICAgICAgICAgICAgICJydW5fbmFtZV9pbl9zeXNfbW9kdWxlcyI6IFRydWUsCiAgICAgICAgICAgICAibW9kdWxlX2luX3N5c19tb2R1bGVzIjogVHJ1ZSwKQEAgLTE0NCw5ICsxNzUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIF9ydW5fbW9kdWxlX2NvZGUoZXhhbXBsZV9zb3VyY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2dsb2JhbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9mbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9sb2FkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfcGFja2FnZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZF9zcGVjKQogICAgICAgICBzZWxmLmNoZWNrX2NvZGVfZXhlY3V0aW9uKGNyZWF0ZV9ucywgZXhwZWN0ZWRfbnMpCiAKICMgVE9ETzogVXNlIHNlbGYuYWRkQ2xlYW51cCB0byBnZXQgcmlkIG9mIGEgbG90IG9mIHRyeS1maW5hbGx5IGJsb2NrcwpAQCAtMTc2LDMxICsyMDUsNDMgQEAKICAgICBkZWYgdGVzdF9saWJyYXJ5X21vZHVsZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChydW5fbW9kdWxlKCJydW5weSIpWyJfX25hbWVfXyJdLCAicnVucHkiKQogCi0gICAgZGVmIF9hZGRfcGtnX2RpcihzZWxmLCBwa2dfZGlyKToKKyAgICBkZWYgX2FkZF9wa2dfZGlyKHNlbGYsIHBrZ19kaXIsIG5hbWVzcGFjZT1GYWxzZSk6CiAgICAgICAgIG9zLm1rZGlyKHBrZ19kaXIpCisgICAgICAgIGlmIG5hbWVzcGFjZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCiAgICAgICAgIHBrZ19mbmFtZSA9IG9zLnBhdGguam9pbihwa2dfZGlyLCAiX19pbml0X18ucHkiKQogICAgICAgICBjcmVhdGVfZW1wdHlfZmlsZShwa2dfZm5hbWUpCiAgICAgICAgIHJldHVybiBwa2dfZm5hbWUKIAotICAgIGRlZiBfbWFrZV9wa2coc2VsZiwgc291cmNlLCBkZXB0aCwgbW9kX2Jhc2U9InJ1bnB5X3Rlc3QiKToKKyAgICBkZWYgX21ha2VfcGtnKHNlbGYsIHNvdXJjZSwgZGVwdGgsIG1vZF9iYXNlPSJydW5weV90ZXN0IiwKKyAgICAgICAgICAgICAgICAgICAgICosIG5hbWVzcGFjZT1GYWxzZSwgcGFyZW50X25hbWVzcGFjZXM9RmFsc2UpOgorICAgICAgICAjIEVuZm9yY2UgYSBjb3VwbGUgb2YgaW50ZXJuYWwgc2FuaXR5IGNoZWNrcyBvbiB0ZXN0IGNhc2VzCisgICAgICAgIGlmIChuYW1lc3BhY2Ugb3IgcGFyZW50X25hbWVzcGFjZXMpIGFuZCBub3QgZGVwdGg6CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoIkNhbid0IG1hcmsgdG9wIGxldmVsIG1vZHVsZSBhcyBhICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZXNwYWNlIHBhY2thZ2UiKQogICAgICAgICBwa2dfbmFtZSA9ICJfX3J1bnB5X3BrZ19fIgogICAgICAgICB0ZXN0X2ZuYW1lID0gbW9kX2Jhc2Urb3MuZXh0c2VwKyJweSIKICAgICAgICAgcGtnX2RpciA9IHN1Yl9kaXIgPSBvcy5wYXRoLnJlYWxwYXRoKHRlbXBmaWxlLm1rZHRlbXAoKSkKICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIFBhY2thZ2UgdHJlZSBpbjoiLCBzdWJfZGlyKQogICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgcGtnX2RpcikKICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIFVwZGF0ZWQgc3lzLnBhdGg6Iiwgc3lzLnBhdGhbMF0pCi0gICAgICAgIGZvciBpIGluIHJhbmdlKGRlcHRoKToKLSAgICAgICAgICAgIHN1Yl9kaXIgPSBvcy5wYXRoLmpvaW4oc3ViX2RpciwgcGtnX25hbWUpCi0gICAgICAgICAgICBwa2dfZm5hbWUgPSBzZWxmLl9hZGRfcGtnX2RpcihzdWJfZGlyKQotICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCIgIE5leHQgbGV2ZWwgaW46Iiwgc3ViX2RpcikKLSAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBDcmVhdGVkOiIsIHBrZ19mbmFtZSkKKyAgICAgICAgaWYgZGVwdGg6CisgICAgICAgICAgICBuYW1lc3BhY2VfZmxhZ3MgPSBbcGFyZW50X25hbWVzcGFjZXNdICogZGVwdGgKKyAgICAgICAgICAgIG5hbWVzcGFjZV9mbGFnc1stMV0gPSBuYW1lc3BhY2UKKyAgICAgICAgICAgIGZvciBuYW1lc3BhY2VfZmxhZyBpbiBuYW1lc3BhY2VfZmxhZ3M6CisgICAgICAgICAgICAgICAgc3ViX2RpciA9IG9zLnBhdGguam9pbihzdWJfZGlyLCBwa2dfbmFtZSkKKyAgICAgICAgICAgICAgICBwa2dfZm5hbWUgPSBzZWxmLl9hZGRfcGtnX2RpcihzdWJfZGlyLCBuYW1lc3BhY2VfZmxhZykKKyAgICAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIiAgTmV4dCBsZXZlbCBpbjoiLCBzdWJfZGlyKQorICAgICAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBDcmVhdGVkOiIsIHBrZ19mbmFtZSkKICAgICAgICAgbW9kX2ZuYW1lID0gb3MucGF0aC5qb2luKHN1Yl9kaXIsIHRlc3RfZm5hbWUpCiAgICAgICAgIG1vZF9maWxlID0gb3Blbihtb2RfZm5hbWUsICJ3IikKICAgICAgICAgbW9kX2ZpbGUud3JpdGUoc291cmNlKQogICAgICAgICBtb2RfZmlsZS5jbG9zZSgpCiAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiICBDcmVhdGVkOiIsIG1vZF9mbmFtZSkKICAgICAgICAgbW9kX25hbWUgPSAocGtnX25hbWUrIi4iKSpkZXB0aCArIG1vZF9iYXNlCi0gICAgICAgIHJldHVybiBwa2dfZGlyLCBtb2RfZm5hbWUsIG1vZF9uYW1lCisgICAgICAgIG1vZF9zcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24obW9kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kX2ZuYW1lKQorICAgICAgICByZXR1cm4gcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMKIAogICAgIGRlZiBfZGVsX3BrZyhzZWxmLCB0b3AsIGRlcHRoLCBtb2RfbmFtZSk6CiAgICAgICAgIGZvciBlbnRyeSBpbiBsaXN0KHN5cy5tb2R1bGVzKToKQEAgLTIzMCwxOSArMjcxLDI5IEBACiAgICAgZGVmIF9maXhfbnNfZm9yX2xlZ2FjeV9weWMoc2VsZiwgbnMsIGFsdGVyX3N5cyk6CiAgICAgICAgIGNoYXJfdG9fYWRkID0gImMiIGlmIF9fZGVidWdfXyBlbHNlICJvIgogICAgICAgICBuc1siX19maWxlX18iXSArPSBjaGFyX3RvX2FkZAorICAgICAgICBuc1siX19jYWNoZWRfXyJdID0gbnNbIl9fZmlsZV9fIl0KKyAgICAgICAgc3BlYyA9IG5zWyJfX3NwZWNfXyJdCisgICAgICAgIG5ld19zcGVjID0gaW1wb3J0bGliLnV0aWwuc3BlY19mcm9tX2ZpbGVfbG9jYXRpb24oc3BlYy5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zWyJfX2ZpbGVfXyJdKQorICAgICAgICBuc1siX19zcGVjX18iXSA9IG5ld19zcGVjCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIG5zWyJydW5fYXJndjAiXSArPSBjaGFyX3RvX2FkZAogCiAKLSAgICBkZWYgX2NoZWNrX21vZHVsZShzZWxmLCBkZXB0aCwgYWx0ZXJfc3lzPUZhbHNlKToKLSAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSA9ICgKLSAgICAgICAgICAgICAgIHNlbGYuX21ha2VfcGtnKGV4YW1wbGVfc291cmNlLCBkZXB0aCkpCisgICAgZGVmIF9jaGVja19tb2R1bGUoc2VsZiwgZGVwdGgsIGFsdGVyX3N5cz1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLCBuYW1lc3BhY2U9RmFsc2UsIHBhcmVudF9uYW1lc3BhY2VzPUZhbHNlKToKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9bmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X25hbWVzcGFjZXM9cGFyZW50X25hbWVzcGFjZXMpKQogICAgICAgICBmb3JnZXQobW9kX25hbWUpCiAgICAgICAgIGV4cGVjdGVkX25zID0gZXhhbXBsZV9uYW1lc3BhY2UuY29weSgpCiAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKKyAgICAgICAgICAgICJfX2NhY2hlZF9fIjogbW9kX3NwZWMuY2FjaGVkLAogICAgICAgICAgICAgIl9fcGFja2FnZV9fIjogbW9kX25hbWUucnBhcnRpdGlvbigiLiIpWzBdLAorICAgICAgICAgICAgIl9fc3BlY19fIjogbW9kX3NwZWMsCiAgICAgICAgIH0pCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CkBAIC0yNjksMTYgKzMyMCwyMSBAQAogICAgICAgICAgICAgc2VsZi5fZGVsX3BrZyhwa2dfZGlyLCBkZXB0aCwgbW9kX25hbWUpCiAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiTW9kdWxlIGV4ZWN1dGVkIHN1Y2Nlc3NmdWxseSIpCiAKLSAgICBkZWYgX2NoZWNrX3BhY2thZ2Uoc2VsZiwgZGVwdGgsIGFsdGVyX3N5cz1GYWxzZSk6Ci0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCi0gICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgsICJfX21haW5fXyIpKQorICAgIGRlZiBfY2hlY2tfcGFja2FnZShzZWxmLCBkZXB0aCwgYWx0ZXJfc3lzPUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAqLCBuYW1lc3BhY2U9RmFsc2UsIHBhcmVudF9uYW1lc3BhY2VzPUZhbHNlKToKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMgPSAoCisgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhleGFtcGxlX3NvdXJjZSwgZGVwdGgsICJfX21haW5fXyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U9bmFtZXNwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50X25hbWVzcGFjZXM9cGFyZW50X25hbWVzcGFjZXMpKQogICAgICAgICBwa2dfbmFtZSA9IG1vZF9uYW1lLnJwYXJ0aXRpb24oIi4iKVswXQogICAgICAgICBmb3JnZXQobW9kX25hbWUpCiAgICAgICAgIGV4cGVjdGVkX25zID0gZXhhbXBsZV9uYW1lc3BhY2UuY29weSgpCiAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CiAgICAgICAgICAgICAiX19uYW1lX18iOiBtb2RfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IG1vZF9mbmFtZSwKKyAgICAgICAgICAgICJfX2NhY2hlZF9fIjogaW1wb3J0bGliLnV0aWwuY2FjaGVfZnJvbV9zb3VyY2UobW9kX2ZuYW1lKSwKICAgICAgICAgICAgICJfX3BhY2thZ2VfXyI6IHBrZ19uYW1lLAorICAgICAgICAgICAgIl9fc3BlY19fIjogbW9kX3NwZWMsCiAgICAgICAgIH0pCiAgICAgICAgIGlmIGFsdGVyX3N5czoKICAgICAgICAgICAgIGV4cGVjdGVkX25zLnVwZGF0ZSh7CkBAIC0zMzQsNyArMzkwLDcgQEAKIGZyb20gLiBpbXBvcnQgc2libGluZwogZnJvbSAuLnVuY2xlLmNvdXNpbiBpbXBvcnQgbmVwaGV3CiAiIiIKLSAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSA9ICgKKyAgICAgICAgcGtnX2RpciwgbW9kX2ZuYW1lLCBtb2RfbmFtZSwgbW9kX3NwZWMgPSAoCiAgICAgICAgICAgICAgICBzZWxmLl9tYWtlX3BrZyhjb250ZW50cywgZGVwdGgpKQogICAgICAgICBpZiBydW5fbmFtZSBpcyBOb25lOgogICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZSA9IG1vZF9uYW1lCkBAIC0zNzMsMTEgKzQyOSwzMSBAQAogICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19tb2R1bGUoZGVwdGgpCiAKKyAgICBkZWYgdGVzdF9ydW5fbW9kdWxlX2luX25hbWVzcGFjZV9wYWNrYWdlKHNlbGYpOgorICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMSwgNCk6CisgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aCkKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX21vZHVsZShkZXB0aCwgbmFtZXNwYWNlPVRydWUsIHBhcmVudF9uYW1lc3BhY2VzPVRydWUpCisKICAgICBkZWYgdGVzdF9ydW5fcGFja2FnZShzZWxmKToKICAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgogICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCiAgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoKQogCisgICAgZGVmIHRlc3RfcnVuX3BhY2thZ2VfaW5fbmFtZXNwYWNlX3BhY2thZ2Uoc2VsZik6CisgICAgICAgIGZvciBkZXB0aCBpbiByYW5nZSgxLCA0KToKKyAgICAgICAgICAgIGlmIHZlcmJvc2UgPiAxOiBwcmludCgiVGVzdGluZyBwYWNrYWdlIGRlcHRoOiIsIGRlcHRoKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfcGFja2FnZShkZXB0aCwgcGFyZW50X25hbWVzcGFjZXM9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3J1bl9uYW1lc3BhY2VfcGFja2FnZShzZWxmKToKKyAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgorICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCisgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoLCBuYW1lc3BhY2U9VHJ1ZSkKKworICAgIGRlZiB0ZXN0X3J1bl9uYW1lc3BhY2VfcGFja2FnZV9pbl9uYW1lc3BhY2VfcGFja2FnZShzZWxmKToKKyAgICAgICAgZm9yIGRlcHRoIGluIHJhbmdlKDEsIDQpOgorICAgICAgICAgICAgaWYgdmVyYm9zZSA+IDE6IHByaW50KCJUZXN0aW5nIHBhY2thZ2UgZGVwdGg6IiwgZGVwdGgpCisgICAgICAgICAgICBzZWxmLl9jaGVja19wYWNrYWdlKGRlcHRoLCBuYW1lc3BhY2U9VHJ1ZSwgcGFyZW50X25hbWVzcGFjZXM9VHJ1ZSkKKwogICAgIGRlZiB0ZXN0X3J1bl9tb2R1bGVfYWx0ZXJfc3lzKHNlbGYpOgogICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoNCk6CiAgICAgICAgICAgICBpZiB2ZXJib3NlID4gMTogcHJpbnQoIlRlc3RpbmcgcGFja2FnZSBkZXB0aDoiLCBkZXB0aCkKQEAgLTQwMSwxNCArNDc3LDE2IEBACiAgICAgZGVmIHRlc3RfcnVuX25hbWUoc2VsZik6CiAgICAgICAgIGRlcHRoID0gMQogICAgICAgICBydW5fbmFtZSA9ICJBbmQgbm93IGZvciBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQiCi0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjID0gKAogICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coZXhhbXBsZV9zb3VyY2UsIGRlcHRoKSkKICAgICAgICAgZm9yZ2V0KG1vZF9uYW1lKQogICAgICAgICBleHBlY3RlZF9ucyA9IGV4YW1wbGVfbmFtZXNwYWNlLmNvcHkoKQogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogcnVuX25hbWUsCiAgICAgICAgICAgICAiX19maWxlX18iOiBtb2RfZm5hbWUsCisgICAgICAgICAgICAiX19jYWNoZWRfXyI6IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKG1vZF9mbmFtZSksCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiBtb2RfbmFtZS5ycGFydGl0aW9uKCIuIilbMF0sCisgICAgICAgICAgICAiX19zcGVjX18iOiBtb2Rfc3BlYywKICAgICAgICAgfSkKICAgICAgICAgZGVmIGNyZWF0ZV9ucyhpbml0X2dsb2JhbHMpOgogICAgICAgICAgICAgcmV0dXJuIHJ1bl9tb2R1bGUobW9kX25hbWUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUpCkBAIC00MzcsNyArNTE1LDcgQEAKICAgICAgICAgcGtnX25hbWUgPSAiLiIuam9pbihbYmFzZV9uYW1lXSAqIG1heF9kZXB0aCkKICAgICAgICAgZXhwZWN0ZWRfcGFja2FnZXMuYWRkKHBrZ19uYW1lKQogICAgICAgICBleHBlY3RlZF9tb2R1bGVzLmFkZChwa2dfbmFtZSArICIucnVucHlfdGVzdCIpCi0gICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUgPSAoCisgICAgICAgIHBrZ19kaXIsIG1vZF9mbmFtZSwgbW9kX25hbWUsIG1vZF9zcGVjID0gKAogICAgICAgICAgICAgICAgc2VsZi5fbWFrZV9wa2coIiIsIG1heF9kZXB0aCkpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzZWxmLl9kZWxfcGtnLCBwa2dfZGlyLCBtYXhfZGVwdGgsIG1vZF9uYW1lKQogICAgICAgICBmb3IgZGVwdGggaW4gcmFuZ2UoMiwgbWF4X2RlcHRoKzEpOgpAQCAtNDU1LDIxICs1MzMsMzkgQEAKIGNsYXNzIFJ1blBhdGhUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSwgQ29kZUV4ZWN1dGlvbk1peGluKToKICAgICAiIiJVbml0IHRlc3RzIGZvciBydW5weS5ydW5fcGF0aCIiIgogCi0gICAgZGVmIF9tYWtlX3Rlc3Rfc2NyaXB0KHNlbGYsIHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlPU5vbmUpOgorICAgIGRlZiBfbWFrZV90ZXN0X3NjcmlwdChzZWxmLCBzY3JpcHRfZGlyLCBzY3JpcHRfYmFzZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZT1Ob25lLCBvbWl0X3N1ZmZpeD1GYWxzZSk6CiAgICAgICAgIGlmIHNvdXJjZSBpcyBOb25lOgogICAgICAgICAgICAgc291cmNlID0gZXhhbXBsZV9zb3VyY2UKLSAgICAgICAgcmV0dXJuIG1ha2Vfc2NyaXB0KHNjcmlwdF9kaXIsIHNjcmlwdF9iYXNlbmFtZSwgc291cmNlKQorICAgICAgICByZXR1cm4gbWFrZV9zY3JpcHQoc2NyaXB0X2Rpciwgc2NyaXB0X2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlLCBvbWl0X3N1ZmZpeCkKIAogICAgIGRlZiBfY2hlY2tfc2NyaXB0KHNlbGYsIHNjcmlwdF9uYW1lLCBleHBlY3RlZF9uYW1lLCBleHBlY3RlZF9maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2FyZ3YwKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9hcmd2MCwgbW9kX25hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3Rfc3BlYz1UcnVlLCBjaGVja19sb2FkZXI9VHJ1ZSk6CiAgICAgICAgICMgRmlyc3QgY2hlY2sgaXMgd2l0aG91dCBydW5fbmFtZQogICAgICAgICBkZWYgY3JlYXRlX25zKGluaXRfZ2xvYmFscyk6CiAgICAgICAgICAgICByZXR1cm4gcnVuX3BhdGgoc2NyaXB0X25hbWUsIGluaXRfZ2xvYmFscykKICAgICAgICAgZXhwZWN0ZWRfbnMgPSBleGFtcGxlX25hbWVzcGFjZS5jb3B5KCkKKyAgICAgICAgaWYgbW9kX25hbWUgaXMgTm9uZToKKyAgICAgICAgICAgIHNwZWNfbmFtZSA9IGV4cGVjdGVkX25hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNwZWNfbmFtZSA9IG1vZF9uYW1lCisgICAgICAgIGlmIGV4cGVjdF9zcGVjOgorICAgICAgICAgICAgbW9kX3NwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihzcGVjX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkX2ZpbGUpCisgICAgICAgICAgICBtb2RfY2FjaGVkID0gbW9kX3NwZWMuY2FjaGVkCisgICAgICAgICAgICBpZiBub3QgY2hlY2tfbG9hZGVyOgorICAgICAgICAgICAgICAgIG1vZF9zcGVjLmxvYWRlciA9IE5vbmUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG1vZF9zcGVjID0gbW9kX2NhY2hlZCA9IE5vbmUKKwogICAgICAgICBleHBlY3RlZF9ucy51cGRhdGUoewogICAgICAgICAgICAgIl9fbmFtZV9fIjogZXhwZWN0ZWRfbmFtZSwKICAgICAgICAgICAgICJfX2ZpbGVfXyI6IGV4cGVjdGVkX2ZpbGUsCisgICAgICAgICAgICAiX19jYWNoZWRfXyI6IG1vZF9jYWNoZWQsCiAgICAgICAgICAgICAiX19wYWNrYWdlX18iOiAiIiwKKyAgICAgICAgICAgICJfX3NwZWNfXyI6IG1vZF9zcGVjLAogICAgICAgICAgICAgInJ1bl9hcmd2MCI6IGV4cGVjdGVkX2FyZ3YwLAogICAgICAgICAgICAgInJ1bl9uYW1lX2luX3N5c19tb2R1bGVzIjogVHJ1ZSwKICAgICAgICAgICAgICJtb2R1bGVfaW5fc3lzX21vZHVsZXMiOiBUcnVlLApAQCAtNDc5LDYgKzU3NSwxMiBAQAogICAgICAgICBydW5fbmFtZSA9ICJwcm92ZS5pc3N1ZTE1MjMwLmlzLmZpeGVkIgogICAgICAgICBkZWYgY3JlYXRlX25zKGluaXRfZ2xvYmFscyk6CiAgICAgICAgICAgICByZXR1cm4gcnVuX3BhdGgoc2NyaXB0X25hbWUsIGluaXRfZ2xvYmFscywgcnVuX25hbWUpCisgICAgICAgIGlmIGV4cGVjdF9zcGVjIGFuZCBtb2RfbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgbW9kX3NwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihydW5fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfZmlsZSkKKyAgICAgICAgICAgIGlmIG5vdCBjaGVja19sb2FkZXI6CisgICAgICAgICAgICAgICAgbW9kX3NwZWMubG9hZGVyID0gTm9uZQorICAgICAgICAgICAgZXhwZWN0ZWRfbnNbIl9fc3BlY19fIl0gPSBtb2Rfc3BlYwogICAgICAgICBleHBlY3RlZF9uc1siX19uYW1lX18iXSA9IHJ1bl9uYW1lCiAgICAgICAgIGV4cGVjdGVkX25zWyJfX3BhY2thZ2VfXyJdID0gcnVuX25hbWUucnBhcnRpdGlvbigiLiIpWzBdCiAgICAgICAgIHNlbGYuY2hlY2tfY29kZV9leGVjdXRpb24oY3JlYXRlX25zLCBleHBlY3RlZF9ucykKQEAgLTQ5Miw3ICs1OTQsMTUgQEAKICAgICAgICAgICAgIG1vZF9uYW1lID0gJ3NjcmlwdCcKICAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSkKICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfbmFtZSwgIjxydW5fcGF0aD4iLCBzY3JpcHRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgZXhwZWN0X3NwZWM9RmFsc2UpCisKKyAgICBkZWYgdGVzdF9iYXNpY19zY3JpcHRfbm9fc3VmZml4KHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKKyAgICAgICAgICAgIG1vZF9uYW1lID0gJ3NjcmlwdCcKKyAgICAgICAgICAgIHNjcmlwdF9uYW1lID0gc2VsZi5fbWFrZV90ZXN0X3NjcmlwdChzY3JpcHRfZGlyLCBtb2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbWl0X3N1ZmZpeD1UcnVlKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9uYW1lLCAiPHJ1bl9wYXRoPiIsIHNjcmlwdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9uYW1lLCBleHBlY3Rfc3BlYz1GYWxzZSkKIAogICAgIGRlZiB0ZXN0X3NjcmlwdF9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01MDEsMTQgKzYxMSwxNCBAQAogICAgICAgICAgICAgY29tcGlsZWRfbmFtZSA9IHB5X2NvbXBpbGUuY29tcGlsZShzY3JpcHRfbmFtZSwgZG9yYWlzZT1UcnVlKQogICAgICAgICAgICAgb3MucmVtb3ZlKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KGNvbXBpbGVkX25hbWUsICI8cnVuX3BhdGg+IiwgY29tcGlsZWRfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlZF9uYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUsIGV4cGVjdF9zcGVjPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKICAgICAgICAgICAgIG1vZF9uYW1lID0gJ19fbWFpbl9fJwogICAgICAgICAgICAgc2NyaXB0X25hbWUgPSBzZWxmLl9tYWtlX3Rlc3Rfc2NyaXB0KHNjcmlwdF9kaXIsIG1vZF9uYW1lKQogICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHNjcmlwdF9kaXIsICI8cnVuX3BhdGg+Iiwgc2NyaXB0X25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0X2RpcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfZGlyLCBtb2RfbmFtZT1tb2RfbmFtZSkKIAogICAgIGRlZiB0ZXN0X2RpcmVjdG9yeV9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01MTksNyArNjI5LDcgQEAKICAgICAgICAgICAgIGlmIG5vdCBzeXMuZG9udF93cml0ZV9ieXRlY29kZToKICAgICAgICAgICAgICAgICBsZWdhY3lfcHljID0gbWFrZV9sZWdhY3lfcHljKHNjcmlwdF9uYW1lKQogICAgICAgICAgICAgICAgIHNlbGYuX2NoZWNrX3NjcmlwdChzY3JpcHRfZGlyLCAiPHJ1bl9wYXRoPiIsIGxlZ2FjeV9weWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdF9kaXIsIG1vZF9uYW1lPW1vZF9uYW1lKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5X2Vycm9yKHNlbGYpOgogICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgc2NyaXB0X2RpcjoKQEAgLTUzMyw3ICs2NDMsOCBAQAogICAgICAgICAgICAgbW9kX25hbWUgPSAnX19tYWluX18nCiAgICAgICAgICAgICBzY3JpcHRfbmFtZSA9IHNlbGYuX21ha2VfdGVzdF9zY3JpcHQoc2NyaXB0X2RpciwgbW9kX25hbWUpCiAgICAgICAgICAgICB6aXBfbmFtZSwgZm5hbWUgPSBtYWtlX3ppcF9zY3JpcHQoc2NyaXB0X2RpciwgJ3Rlc3RfemlwJywgc2NyaXB0X25hbWUpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsICI8cnVuX3BhdGg+IiwgZm5hbWUsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1tb2RfbmFtZSwgY2hlY2tfbG9hZGVyPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfemlwZmlsZV9jb21waWxlZChzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01NDIsNyArNjUzLDggQEAKICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUgPSBweV9jb21waWxlLmNvbXBpbGUoc2NyaXB0X25hbWUsIGRvcmFpc2U9VHJ1ZSkKICAgICAgICAgICAgIHppcF9uYW1lLCBmbmFtZSA9IG1ha2VfemlwX3NjcmlwdChzY3JpcHRfZGlyLCAndGVzdF96aXAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVkX25hbWUpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zY3JpcHQoemlwX25hbWUsICI8cnVuX3BhdGg+IiwgZm5hbWUsIHppcF9uYW1lKQorICAgICAgICAgICAgc2VsZi5fY2hlY2tfc2NyaXB0KHppcF9uYW1lLCAiPHJ1bl9wYXRoPiIsIGZuYW1lLCB6aXBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RfbmFtZT1tb2RfbmFtZSwgY2hlY2tfbG9hZGVyPUZhbHNlKQogCiAgICAgZGVmIHRlc3RfemlwZmlsZV9lcnJvcihzZWxmKToKICAgICAgICAgd2l0aCB0ZW1wX2RpcigpIGFzIHNjcmlwdF9kaXI6CkBAIC01NzUsMTIgKzY4Nyw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFsncyddLCAibm9uLUFTQ0lJOiBoXHhlOSIpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdCgKLSAgICAgICAgICAgICAgICAgRXhlY3V0aW9uTGF5ZXJUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgUnVuTW9kdWxlVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgIFJ1blBhdGhUZXN0Q2FzZQotICAgICAgICAgICAgICAgICApCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2F4LnB5IGIvTGliL3Rlc3QvdGVzdF9zYXgucHkKaW5kZXggY2ZhMThmNy4uOTBmMzAxNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zYXgucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zYXgucHkKQEAgLTEwLDE2ICsxMCwxNyBAQAogICAgICMgZG9uJ3QgdHJ5IHRvIHRlc3QgdGhpcyBtb2R1bGUgaWYgd2UgY2Fubm90IGNyZWF0ZSBhIHBhcnNlcgogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJubyBYTUwgcGFyc2VycyBhdmFpbGFibGUiKQogZnJvbSB4bWwuc2F4LnNheHV0aWxzIGltcG9ydCBYTUxHZW5lcmF0b3IsIGVzY2FwZSwgdW5lc2NhcGUsIHF1b3RlYXR0ciwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTUxGaWx0ZXJCYXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhNTEZpbHRlckJhc2UsIHByZXBhcmVfaW5wdXRfc291cmNlCiBmcm9tIHhtbC5zYXguZXhwYXRyZWFkZXIgaW1wb3J0IGNyZWF0ZV9wYXJzZXIKIGZyb20geG1sLnNheC5oYW5kbGVyIGltcG9ydCBmZWF0dXJlX25hbWVzcGFjZXMKIGZyb20geG1sLnNheC54bWxyZWFkZXIgaW1wb3J0IElucHV0U291cmNlLCBBdHRyaWJ1dGVzSW1wbCwgQXR0cmlidXRlc05TSW1wbAogZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTywgU3RyaW5nSU8KIGltcG9ydCBjb2RlY3MKK2ltcG9ydCBnYwogaW1wb3J0IG9zLnBhdGgKIGltcG9ydCBzaHV0aWwKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGZpbmRmaWxlLCBydW5fdW5pdHRlc3QKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBmaW5kZmlsZSwgcnVuX3VuaXR0ZXN0LCBURVNURk4KIAogVEVTVF9YTUxGSUxFID0gZmluZGZpbGUoInRlc3QueG1sIiwgc3ViZGlyPSJ4bWx0ZXN0ZGF0YSIpCiBURVNUX1hNTEZJTEVfT1VUID0gZmluZGZpbGUoInRlc3QueG1sLm91dCIsIHN1YmRpcj0ieG1sdGVzdGRhdGEiKQpAQCAtOTUsNiArOTYsMTI2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnNbImF0dHIiXSwgInZhbCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXR0cnMuZ2V0UU5hbWVCeU5hbWUoImF0dHIiKSwgImF0dHIiKQogCisKK2RlZiB4bWxfc3RyKGRvYywgZW5jb2Rpbmc9Tm9uZSk6CisgICAgaWYgZW5jb2RpbmcgaXMgTm9uZToKKyAgICAgICAgcmV0dXJuIGRvYworICAgIHJldHVybiAnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iJXMiPz5cbiVzJyAlIChlbmNvZGluZywgZG9jKQorCitkZWYgeG1sX2J5dGVzKGRvYywgZW5jb2RpbmcsIGRlY2xfZW5jb2Rpbmc9Li4uKToKKyAgICBpZiBkZWNsX2VuY29kaW5nIGlzIC4uLjoKKyAgICAgICAgZGVjbF9lbmNvZGluZyA9IGVuY29kaW5nCisgICAgcmV0dXJuIHhtbF9zdHIoZG9jLCBkZWNsX2VuY29kaW5nKS5lbmNvZGUoZW5jb2RpbmcsICd4bWxjaGFycmVmcmVwbGFjZScpCisKK2RlZiBtYWtlX3htbF9maWxlKGRvYywgZW5jb2RpbmcsIGRlY2xfZW5jb2Rpbmc9Li4uKToKKyAgICBpZiBkZWNsX2VuY29kaW5nIGlzIC4uLjoKKyAgICAgICAgZGVjbF9lbmNvZGluZyA9IGVuY29kaW5nCisgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3cnLCBlbmNvZGluZz1lbmNvZGluZywgZXJyb3JzPSd4bWxjaGFycmVmcmVwbGFjZScpIGFzIGY6CisgICAgICAgIGYud3JpdGUoeG1sX3N0cihkb2MsIGRlY2xfZW5jb2RpbmcpKQorCisKK2NsYXNzIFBhcnNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGF0YSA9ICc8bW9uZXkgdmFsdWU9IiRceGEzXHUyMGFjXFUwMDAxMDE3YiI+JFx4YTNcdTIwYWNcVTAwMDEwMTdiPC9tb25leT4nCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHN1cHBvcnQudW5saW5rKFRFU1RGTikKKworICAgIGRlZiBjaGVja19wYXJzZShzZWxmLCBmKToKKyAgICAgICAgZnJvbSB4bWwuc2F4IGltcG9ydCBwYXJzZQorICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHBhcnNlKGYsIFhNTEdlbmVyYXRvcihyZXN1bHQsICd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfc3RyKHNlbGYuZGF0YSwgJ3V0Zi04JykpCisKKyAgICBkZWYgdGVzdF9wYXJzZV90ZXh0KHNlbGYpOgorICAgICAgICBlbmNvZGluZ3MgPSAoJ3VzLWFzY2lpJywgJ2lzby04ODU5LTEnLCAndXRmLTgnLAorICAgICAgICAgICAgICAgICAgICAgJ3V0Zi0xNicsICd1dGYtMTZsZScsICd1dGYtMTZiZScpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBlbmNvZGluZ3M6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKFN0cmluZ0lPKHhtbF9zdHIoc2VsZi5kYXRhLCBlbmNvZGluZykpKQorICAgICAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3InLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKGYpCisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKFN0cmluZ0lPKHNlbGYuZGF0YSkpCisgICAgICAgICAgICBtYWtlX3htbF9maWxlKHNlbGYuZGF0YSwgZW5jb2RpbmcsIE5vbmUpCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncicsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKworICAgIGRlZiB0ZXN0X3BhcnNlX2J5dGVzKHNlbGYpOgorICAgICAgICAjIFVURi04IGlzIGRlZmF1bHQgZW5jb2RpbmcsIFVTLUFTQ0lJIGlzIGNvbXBhdGlibGUgd2l0aCBVVEYtOCwKKyAgICAgICAgIyBVVEYtMTYgaXMgYXV0b2RldGVjdGVkCisgICAgICAgIGVuY29kaW5ncyA9ICgndXMtYXNjaWknLCAndXRmLTgnLCAndXRmLTE2JywgJ3V0Zi0xNmxlJywgJ3V0Zi0xNmJlJykKKyAgICAgICAgZm9yIGVuY29kaW5nIGluIGVuY29kaW5nczoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoQnl0ZXNJTyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCBlbmNvZGluZykpKQorICAgICAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsIGVuY29kaW5nKQorICAgICAgICAgICAgc2VsZi5jaGVja19wYXJzZShURVNURk4pCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoQnl0ZXNJTyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCBlbmNvZGluZywgTm9uZSkpKQorICAgICAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsIGVuY29kaW5nLCBOb25lKQorICAgICAgICAgICAgc2VsZi5jaGVja19wYXJzZShURVNURk4pCisgICAgICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKyAgICAgICAgIyBhY2NlcHQgVVRGLTggd2l0aCBCT00KKyAgICAgICAgc2VsZi5jaGVja19wYXJzZShCeXRlc0lPKHhtbF9ieXRlcyhzZWxmLmRhdGEsICd1dGYtOC1zaWcnLCAndXRmLTgnKSkpCisgICAgICAgIG1ha2VfeG1sX2ZpbGUoc2VsZi5kYXRhLCAndXRmLTgtc2lnJywgJ3V0Zi04JykKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZShURVNURk4pCisgICAgICAgIHdpdGggb3BlbihURVNURk4sICdyYicpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKGYpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoQnl0ZXNJTyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCAndXRmLTgtc2lnJywgTm9uZSkpKQorICAgICAgICBtYWtlX3htbF9maWxlKHNlbGYuZGF0YSwgJ3V0Zi04LXNpZycsIE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoVEVTVEZOKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgc2VsZi5jaGVja19wYXJzZShmKQorICAgICAgICAjIGFjY2VwdCBkYXRhIHdpdGggZGVjbGFyZWQgZW5jb2RpbmcKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZShCeXRlc0lPKHhtbF9ieXRlcyhzZWxmLmRhdGEsICdpc28tODg1OS0xJykpKQorICAgICAgICBtYWtlX3htbF9maWxlKHNlbGYuZGF0YSwgJ2lzby04ODU5LTEnKQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKFRFU1RGTikKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKyAgICAgICAgIyBmYWlsIG9uIG5vbi1VVEYtOCBpbmNvbXBhdGlibGUgZGF0YSB3aXRob3V0IGRlY2xhcmVkIGVuY29kaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU0FYRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoQnl0ZXNJTyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCAnaXNvLTg4NTktMScsIE5vbmUpKSkKKyAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsICdpc28tODg1OS0xJywgTm9uZSkKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgndW5jbG9zZWQgZmlsZScsIFJlc291cmNlV2FybmluZykpOgorICAgICAgICAgICAgIyBYWFggRmFpbGVkIHBhcnNlciBsZWFrcyBhbiBvcGVuZWQgZmlsZS4KKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU0FYRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlKFRFU1RGTikKKyAgICAgICAgICAgICMgQ29sbGVjdCBsZWFrZWQgZmlsZS4KKyAgICAgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICB3aXRoIG9wZW4oVEVTVEZOLCAncmInKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTQVhFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2UoZikKKworICAgIGRlZiB0ZXN0X3BhcnNlX0lucHV0U291cmNlKHNlbGYpOgorICAgICAgICAjIGFjY2VwdCBkYXRhIHdpdGhvdXQgZGVjbGFyZWQgYnV0IHdpdGggZXhwbGljaXRseSBzcGVjaWZpZWQgZW5jb2RpbmcKKyAgICAgICAgbWFrZV94bWxfZmlsZShzZWxmLmRhdGEsICdpc28tODg1OS0xJywgTm9uZSkKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGlucHV0ID0gSW5wdXRTb3VyY2UoKQorICAgICAgICAgICAgaW5wdXQuc2V0Qnl0ZVN0cmVhbShmKQorICAgICAgICAgICAgaW5wdXQuc2V0RW5jb2RpbmcoJ2lzby04ODU5LTEnKQorICAgICAgICAgICAgc2VsZi5jaGVja19wYXJzZShpbnB1dCkKKworICAgIGRlZiBjaGVja19wYXJzZVN0cmluZyhzZWxmLCBzKToKKyAgICAgICAgZnJvbSB4bWwuc2F4IGltcG9ydCBwYXJzZVN0cmluZworICAgICAgICByZXN1bHQgPSBTdHJpbmdJTygpCisgICAgICAgIHBhcnNlU3RyaW5nKHMsIFhNTEdlbmVyYXRvcihyZXN1bHQsICd1dGYtOCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfc3RyKHNlbGYuZGF0YSwgJ3V0Zi04JykpCisKKyAgICBkZWYgdGVzdF9wYXJzZVN0cmluZ19ieXRlcyhzZWxmKToKKyAgICAgICAgIyBVVEYtOCBpcyBkZWZhdWx0IGVuY29kaW5nLCBVUy1BU0NJSSBpcyBjb21wYXRpYmxlIHdpdGggVVRGLTgsCisgICAgICAgICMgVVRGLTE2IGlzIGF1dG9kZXRlY3RlZAorICAgICAgICBlbmNvZGluZ3MgPSAoJ3VzLWFzY2lpJywgJ3V0Zi04JywgJ3V0Zi0xNicsICd1dGYtMTZsZScsICd1dGYtMTZiZScpCisgICAgICAgIGZvciBlbmNvZGluZyBpbiBlbmNvZGluZ3M6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlU3RyaW5nKHhtbF9ieXRlcyhzZWxmLmRhdGEsIGVuY29kaW5nKSkKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcGFyc2VTdHJpbmcoeG1sX2J5dGVzKHNlbGYuZGF0YSwgZW5jb2RpbmcsIE5vbmUpKQorICAgICAgICAjIGFjY2VwdCBVVEYtOCB3aXRoIEJPTQorICAgICAgICBzZWxmLmNoZWNrX3BhcnNlU3RyaW5nKHhtbF9ieXRlcyhzZWxmLmRhdGEsICd1dGYtOC1zaWcnLCAndXRmLTgnKSkKKyAgICAgICAgc2VsZi5jaGVja19wYXJzZVN0cmluZyh4bWxfYnl0ZXMoc2VsZi5kYXRhLCAndXRmLTgtc2lnJywgTm9uZSkpCisgICAgICAgICMgYWNjZXB0IGRhdGEgd2l0aCBkZWNsYXJlZCBlbmNvZGluZworICAgICAgICBzZWxmLmNoZWNrX3BhcnNlU3RyaW5nKHhtbF9ieXRlcyhzZWxmLmRhdGEsICdpc28tODg1OS0xJykpCisgICAgICAgICMgZmFpbCBvbiBub24tVVRGLTggaW5jb21wYXRpYmxlIGRhdGEgd2l0aG91dCBkZWNsYXJlZCBlbmNvZGluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFNBWEV4Y2VwdGlvbik6CisgICAgICAgICAgICBzZWxmLmNoZWNrX3BhcnNlU3RyaW5nKHhtbF9ieXRlcyhzZWxmLmRhdGEsICdpc28tODg1OS0xJywgTm9uZSkpCisKIGNsYXNzIE1ha2VQYXJzZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYWtlX3BhcnNlcjIoc2VsZik6CiAgICAgICAgICMgQ3JlYXRpbmcgcGFyc2VycyBzZXZlcmFsIHRpbWVzIGluIGEgcm93IHNob3VsZCBzdWNjZWVkLgpAQCAtMTcyLDYgKzI5Myw2MCBAQAogICAgICAgICBwID0gbWFrZV9wYXJzZXIoWyd4bWwucGFyc2Vycy5ub19zdWNoX3BhcnNlciddKQogCiAKK2NsYXNzIFByZXBhcmVJbnB1dFNvdXJjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGUgPSBzdXBwb3J0LlRFU1RGTgorICAgICAgICB3aXRoIG9wZW4oc2VsZi5maWxlLCAidyIpIGFzIHRtcDoKKyAgICAgICAgICAgIHRtcC53cml0ZSgiVGhpcyB3YXMgcmVhZCBmcm9tIGEgZmlsZS4iKQorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBzdXBwb3J0LnVubGluayhzZWxmLmZpbGUpCisKKyAgICBkZWYgbWFrZV9ieXRlX3N0cmVhbShzZWxmKToKKyAgICAgICAgcmV0dXJuIEJ5dGVzSU8oYiJUaGlzIGlzIGEgYnl0ZSBzdHJlYW0uIikKKworICAgIGRlZiBjaGVja0NvbnRlbnQoc2VsZiwgc3RyZWFtLCBjb250ZW50KToKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdE5vbmUoc3RyZWFtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cmVhbS5yZWFkKCksIGNvbnRlbnQpCisgICAgICAgIHN0cmVhbS5jbG9zZSgpCisKKworICAgIGRlZiB0ZXN0X2J5dGVfc3RyZWFtKHNlbGYpOgorICAgICAgICAjIElmIHRoZSBzb3VyY2UgaXMgYW4gSW5wdXRTb3VyY2UgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY2hhcmFjdGVyCisgICAgICAgICMgc3RyZWFtIGJ1dCBkb2VzIGhhdmUgYSBieXRlIHN0cmVhbSwgdXNlIHRoZSBieXRlIHN0cmVhbS4KKyAgICAgICAgc3JjID0gSW5wdXRTb3VyY2Uoc2VsZi5maWxlKQorICAgICAgICBzcmMuc2V0Qnl0ZVN0cmVhbShzZWxmLm1ha2VfYnl0ZV9zdHJlYW0oKSkKKyAgICAgICAgcHJlcCA9IHByZXBhcmVfaW5wdXRfc291cmNlKHNyYykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJlcC5nZXRDaGFyYWN0ZXJTdHJlYW0oKSkKKyAgICAgICAgc2VsZi5jaGVja0NvbnRlbnQocHJlcC5nZXRCeXRlU3RyZWFtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVGhpcyBpcyBhIGJ5dGUgc3RyZWFtLiIpCisKKyAgICBkZWYgdGVzdF9zeXN0ZW1faWQoc2VsZik6CisgICAgICAgICMgSWYgdGhlIHNvdXJjZSBpcyBhbiBJbnB1dFNvdXJjZSB0aGF0IGhhcyBuZWl0aGVyIGEgY2hhcmFjdGVyCisgICAgICAgICMgc3RyZWFtIG5vciBhIGJ5dGUgc3RyZWFtLCBvcGVuIHRoZSBzeXN0ZW0gSUQuCisgICAgICAgIHNyYyA9IElucHV0U291cmNlKHNlbGYuZmlsZSkKKyAgICAgICAgcHJlcCA9IHByZXBhcmVfaW5wdXRfc291cmNlKHNyYykKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJlcC5nZXRDaGFyYWN0ZXJTdHJlYW0oKSkKKyAgICAgICAgc2VsZi5jaGVja0NvbnRlbnQocHJlcC5nZXRCeXRlU3RyZWFtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVGhpcyB3YXMgcmVhZCBmcm9tIGEgZmlsZS4iKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nKHNlbGYpOgorICAgICAgICAjIElmIHRoZSBzb3VyY2UgaXMgYSBzdHJpbmcsIHVzZSBpdCBhcyBhIHN5c3RlbSBJRCBhbmQgb3BlbiBpdC4KKyAgICAgICAgcHJlcCA9IHByZXBhcmVfaW5wdXRfc291cmNlKHNlbGYuZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJlcC5nZXRDaGFyYWN0ZXJTdHJlYW0oKSkKKyAgICAgICAgc2VsZi5jaGVja0NvbnRlbnQocHJlcC5nZXRCeXRlU3RyZWFtKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGIiVGhpcyB3YXMgcmVhZCBmcm9tIGEgZmlsZS4iKQorCisgICAgZGVmIHRlc3RfYmluYXJ5X2ZpbGUoc2VsZik6CisgICAgICAgICMgSWYgdGhlIHNvdXJjZSBpcyBhIGJpbmFyeSBmaWxlLWxpa2Ugb2JqZWN0LCB1c2UgaXQgYXMgYSBieXRlCisgICAgICAgICMgc3RyZWFtLgorICAgICAgICBwcmVwID0gcHJlcGFyZV9pbnB1dF9zb3VyY2Uoc2VsZi5tYWtlX2J5dGVfc3RyZWFtKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHByZXAuZ2V0Q2hhcmFjdGVyU3RyZWFtKCkpCisgICAgICAgIHNlbGYuY2hlY2tDb250ZW50KHByZXAuZ2V0Qnl0ZVN0cmVhbSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBiIlRoaXMgaXMgYSBieXRlIHN0cmVhbS4iKQorCisKICMgPT09PT0gWE1MR2VuZXJhdG9yCiAKIGNsYXNzIFhtbGdlblRlc3Q6CkBAIC02MjIsNyArNzk3LDcgQEAKIAogICAgICMgPT09PT0gWE1MUmVhZGVyIHN1cHBvcnQKIAotICAgIGRlZiB0ZXN0X2V4cGF0X2ZpbGUoc2VsZik6CisgICAgZGVmIHRlc3RfZXhwYXRfYmluYXJ5X2ZpbGUoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQogICAgICAgICByZXN1bHQgPSBCeXRlc0lPKCkKICAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKQEAgLTYzMyw4ICs4MDgsMTkgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCiAKKyAgICBkZWYgdGVzdF9leHBhdF90ZXh0X2ZpbGUoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICByZXN1bHQgPSBCeXRlc0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICB3aXRoIG9wZW4oVEVTVF9YTUxGSUxFLCAncnQnLCBlbmNvZGluZz0naXNvLTg4NTktMScpIGFzIGY6CisgICAgICAgICAgICBwYXJzZXIucGFyc2UoZikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCisKICAgICBAcmVxdWlyZXNfbm9uYXNjaWlfZmlsZW5hbWVzCi0gICAgZGVmIHRlc3RfZXhwYXRfZmlsZV9ub25hc2NpaShzZWxmKToKKyAgICBkZWYgdGVzdF9leHBhdF9iaW5hcnlfZmlsZV9ub25hc2NpaShzZWxmKToKICAgICAgICAgZm5hbWUgPSBzdXBwb3J0LlRFU1RGTl9VTklDT0RFCiAgICAgICAgIHNodXRpbC5jb3B5ZmlsZShURVNUX1hNTEZJTEUsIGZuYW1lKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIGZuYW1lKQpAQCAtNjQ0LDcgKzgzMCwzMSBAQAogICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQogCiAgICAgICAgIHBhcnNlci5zZXRDb250ZW50SGFuZGxlcih4bWxnZW4pCi0gICAgICAgIHBhcnNlci5wYXJzZShvcGVuKGZuYW1lKSkKKyAgICAgICAgcGFyc2VyLnBhcnNlKG9wZW4oZm5hbWUsICdyYicpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmdldHZhbHVlKCksIHhtbF90ZXN0X291dCkKKworICAgIGRlZiB0ZXN0X2V4cGF0X2JpbmFyeV9maWxlX2J5dGVzX25hbWUoc2VsZik6CisgICAgICAgIGZuYW1lID0gb3MuZnNlbmNvZGUoVEVTVF9YTUxGSUxFKQorICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKKyAgICAgICAgcmVzdWx0ID0gQnl0ZXNJTygpCisgICAgICAgIHhtbGdlbiA9IFhNTEdlbmVyYXRvcihyZXN1bHQpCisKKyAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKHhtbGdlbikKKyAgICAgICAgd2l0aCBvcGVuKGZuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgcGFyc2VyLnBhcnNlKGYpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZ2V0dmFsdWUoKSwgeG1sX3Rlc3Rfb3V0KQorCisgICAgZGVmIHRlc3RfZXhwYXRfYmluYXJ5X2ZpbGVfaW50X25hbWUoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGNyZWF0ZV9wYXJzZXIoKQorICAgICAgICByZXN1bHQgPSBCeXRlc0lPKCkKKyAgICAgICAgeG1sZ2VuID0gWE1MR2VuZXJhdG9yKHJlc3VsdCkKKworICAgICAgICBwYXJzZXIuc2V0Q29udGVudEhhbmRsZXIoeG1sZ2VuKQorICAgICAgICB3aXRoIG9wZW4oVEVTVF9YTUxGSUxFLCAncmInKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBvcGVuKGYuZmlsZW5vKCksICdyYicsIGNsb3NlZmQ9RmFsc2UpIGFzIGYyOgorICAgICAgICAgICAgICAgIHBhcnNlci5wYXJzZShmMikKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCiAKQEAgLTgwMiw3ICsxMDEyLDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5nZXR2YWx1ZSgpLCB4bWxfdGVzdF9vdXQpCiAKLSAgICBkZWYgdGVzdF9leHBhdF9pbnBzb3VyY2Vfc3RyZWFtKHNlbGYpOgorICAgIGRlZiB0ZXN0X2V4cGF0X2lucHNvdXJjZV9ieXRlX3N0cmVhbShzZWxmKToKICAgICAgICAgcGFyc2VyID0gY3JlYXRlX3BhcnNlcigpCiAgICAgICAgIHJlc3VsdCA9IEJ5dGVzSU8oKQogICAgICAgICB4bWxnZW4gPSBYTUxHZW5lcmF0b3IocmVzdWx0KQpAQCAtOTE2LDYgKzExMjYsOCBAQAogICAgICAgICBwYXJzZXIgPSBjcmVhdGVfcGFyc2VyKCkKICAgICAgICAgcGFyc2VyLnNldENvbnRlbnRIYW5kbGVyKENvbnRlbnRIYW5kbGVyKCkpICMgZG8gbm90aGluZwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTQVhQYXJzZUV4Y2VwdGlvbiwgcGFyc2VyLnBhcnNlLCBTdHJpbmdJTygiPGZvbz4iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJzZXIuZ2V0Q29sdW1uTnVtYmVyKCksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyc2VyLmdldExpbmVOdW1iZXIoKSwgMSkKIAogICAgIGRlZiB0ZXN0X3NheF9wYXJzZV9leGNlcHRpb25fc3RyKHNlbGYpOgogICAgICAgICAjIHBhc3MgdmFyaW91cyB2YWx1ZXMgZnJvbSBhIGxvY2F0b3IgdG8gdGhlIFNBWFBhcnNlRXhjZXB0aW9uIHRvCkBAIC05OTMsNyArMTIwNSw5IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoTWFrZVBhcnNlclRlc3QsCisgICAgICAgICAgICAgICAgIFBhcnNlVGVzdCwKICAgICAgICAgICAgICAgICAgU2F4dXRpbHNUZXN0LAorICAgICAgICAgICAgICAgICBQcmVwYXJlSW5wdXRTb3VyY2VUZXN0LAogICAgICAgICAgICAgICAgICBTdHJpbmdYbWxnZW5UZXN0LAogICAgICAgICAgICAgICAgICBCeXRlc1htbGdlblRlc3QsCiAgICAgICAgICAgICAgICAgIFdyaXRlclhtbGdlblRlc3QsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5IGIvTGliL3Rlc3QvdGVzdF9zY2hlZC5weQppbmRleCA3OWZhN2QzLi5mZThlNzg1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NjaGVkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NoZWQucHkKQEAgLTE5NSw4ICsxOTUsNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGwsIFtdKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0Q2FzZSkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc2NvcGUucHkKaW5kZXggMjZjZTA0Mi4uYjMyNTU0NSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zY29wZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3Njb3BlLnB5CkBAIC03MTUsNiArNzE1LDE5IEBACiAgICAgICAgIGRlZiBiKCk6CiAgICAgICAgICAgICBnbG9iYWwgYQogCisgICAgZGVmIHRlc3RDbGFzc05hbWVzcGFjZU92ZXJyaWRlc0Nsb3N1cmUoc2VsZik6CisgICAgICAgICMgU2VlICMxNzg1My4KKyAgICAgICAgeCA9IDQyCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBsb2NhbHMoKVsieCJdID0gNDMKKyAgICAgICAgICAgIHkgPSB4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWC55LCA0MykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIGxvY2FscygpWyJ4Il0gPSA0MworICAgICAgICAgICAgZGVsIHgKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNhdHRyKFgsICJ4IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgNDIpCisKICAgICBAY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RDZWxsTGVhayhzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNzkyNy4KQEAgLTc0MywxMCArNzU2LDYgQEAKICAgICAgICAgZGVsIHRlc3RlcgogICAgICAgICBzZWxmLmFzc2VydElzTm9uZShyZWYoKSkKIAotICAgIGRlZiB0ZXN0X19DbGFzc19fR2xvYmFsKHNlbGYpOgotICAgICAgICBzID0gImNsYXNzIFg6XG4gICAgZ2xvYmFsIF9fY2xhc3NfX1xuICAgIGRlZiBmKHNlbGYpOiBzdXBlcigpIgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgZXhlYywgcykKLQogCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KFNjb3BlVGVzdHMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NjcmlwdF9oZWxwZXIucHkgYi9MaWIvdGVzdC90ZXN0X3NjcmlwdF9oZWxwZXIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcyZDZhNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2NyaXB0X2hlbHBlci5weQpAQCAtMCwwICsxLDExMCBAQAorIiIiVW5pdHRlc3RzIGZvciB0ZXN0LnNjcmlwdF9oZWxwZXIuICBXaG8gdGVzdHMgdGhlIHRlc3QgaGVscGVyPyIiIgorCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzY3JpcHRfaGVscGVyCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKKworCitjbGFzcyBUZXN0U2NyaXB0SGVscGVyKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9weXRob25fb2soc2VsZik6CisgICAgICAgIHQgPSBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fb2soJy1jJywgJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDApJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgwLCB0WzBdLCAncmV0dXJuIGNvZGUgd2FzIG5vdCAwJykKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9weXRob25fZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBJIGRpZG4ndCBpbXBvcnQgdGhlIHN5cyBtb2R1bGUgc28gdGhpcyBjaGlsZCB3aWxsIGZhaWwuCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9mYWlsdXJlKCctYycsICdzeXMuZXhpdCgwKScpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoMCwgcmMsICdyZXR1cm4gY29kZSBzaG91bGQgbm90IGJlIDAnKQorCisgICAgZGVmIHRlc3RfYXNzZXJ0X3B5dGhvbl9va19yYWlzZXMoc2VsZik6CisgICAgICAgICMgSSBkaWRuJ3QgaW1wb3J0IHRoZSBzeXMgbW9kdWxlIHNvIHRoaXMgY2hpbGQgd2lsbCBmYWlsLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBlcnJvcl9jb250ZXh0OgorICAgICAgICAgICAgc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCctYycsICdzeXMuZXhpdCgwKScpCisgICAgICAgIGVycm9yX21zZyA9IHN0cihlcnJvcl9jb250ZXh0LmV4Y2VwdGlvbikKKyAgICAgICAgc2VsZi5hc3NlcnRJbignY29tbWFuZCBsaW5lIHdhczonLCBlcnJvcl9tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N5cy5leGl0KDApJywgZXJyb3JfbXNnLCBtc2c9J3VuZXhwZWN0ZWQgY29tbWFuZCBsaW5lJykKKworICAgIGRlZiB0ZXN0X2Fzc2VydF9weXRob25fZmFpbHVyZV9yYWlzZXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGVycm9yX2NvbnRleHQ6CisgICAgICAgICAgICBzY3JpcHRfaGVscGVyLmFzc2VydF9weXRob25fZmFpbHVyZSgnLWMnLCAnaW1wb3J0IHN5czsgc3lzLmV4aXQoMCknKQorICAgICAgICBlcnJvcl9tc2cgPSBzdHIoZXJyb3JfY29udGV4dC5leGNlcHRpb24pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1Byb2Nlc3MgcmV0dXJuIGNvZGUgaXMgMCwnLCBlcnJvcl9tc2cpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ltcG9ydCBzeXM7IHN5cy5leGl0KDApJywgZXJyb3JfbXNnLAorICAgICAgICAgICAgICAgICAgICAgIG1zZz0ndW5leHBlY3RlZCBjb21tYW5kIGxpbmUuJykKKworICAgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLlBvcGVuJykKKyAgICBkZWYgdGVzdF9hc3NlcnRfcHl0aG9uX2lzb2xhdGVkX3doZW5fZW52X25vdF9yZXF1aXJlZChzZWxmLCBtb2NrX3BvcGVuKToKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzY3JpcHRfaGVscGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdfaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1GYWxzZSkgYXMgbW9ja19pcmVfZnVuYzoKKyAgICAgICAgICAgIG1vY2tfcG9wZW4uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoJ2JhaWwgb3V0IG9mIHVuaXR0ZXN0JykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGVscGVyLl9hc3NlcnRfcHl0aG9uKFRydWUsICctYycsICdOb25lJykKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhaWwgb3V0IG9mIHVuaXR0ZXN0JywgZXJyLmFyZ3NbMF0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDEsIG1vY2tfcG9wZW4uY2FsbF9jb3VudCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbW9ja19pcmVfZnVuYy5jYWxsX2NvdW50KQorICAgICAgICAgICAgcG9wZW5fY29tbWFuZCA9IG1vY2tfcG9wZW4uY2FsbF9hcmdzWzBdWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGVjdXRhYmxlLCBwb3Blbl9jb21tYW5kWzBdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignTm9uZScsIHBvcGVuX2NvbW1hbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCctSScsIHBvcGVuX2NvbW1hbmQpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCctRScsIHBvcGVuX2NvbW1hbmQpICAjIC1JIG92ZXJyaWRlcyB0aGlzCisKKyAgICBAbW9jay5wYXRjaCgnc3VicHJvY2Vzcy5Qb3BlbicpCisgICAgZGVmIHRlc3RfYXNzZXJ0X3B5dGhvbl9ub3RfaXNvbGF0ZWRfd2hlbl9lbnZfaXNfcmVxdWlyZWQoc2VsZiwgbW9ja19wb3Blbik6CisgICAgICAgICIiIkVuc3VyZSB0aGF0IC1JIGlzIG5vdCBwYXNzZWQgd2hlbiB0aGUgZW52aXJvbm1lbnQgaXMgcmVxdWlyZWQuIiIiCisgICAgICAgIHdpdGggbW9jay5wYXRjaC5vYmplY3Qoc2NyaXB0X2hlbHBlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9VHJ1ZSkgYXMgbW9ja19pcmVfZnVuYzoKKyAgICAgICAgICAgIG1vY2tfcG9wZW4uc2lkZV9lZmZlY3QgPSBSdW50aW1lRXJyb3IoJ2JhaWwgb3V0IG9mIHVuaXR0ZXN0JykKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzY3JpcHRfaGVscGVyLl9hc3NlcnRfcHl0aG9uKFRydWUsICctYycsICdOb25lJykKKyAgICAgICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2JhaWwgb3V0IG9mIHVuaXR0ZXN0JywgZXJyLmFyZ3NbMF0pCisgICAgICAgICAgICBwb3Blbl9jb21tYW5kID0gbW9ja19wb3Blbi5jYWxsX2FyZ3NbMF1bMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJy1JJywgcG9wZW5fY29tbWFuZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJy1FJywgcG9wZW5fY29tbWFuZCkKKworCitjbGFzcyBUZXN0U2NyaXB0SGVscGVyRW52aXJvbm1lbnQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIkNvZGUgY292ZXJhZ2UgZm9yIF9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpLiIiIgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICAgICAgaGFzYXR0cihzY3JpcHRfaGVscGVyLCAnX19jYWNoZWRfaW50ZXJwX3JlcXVpcmVzX2Vudmlyb25tZW50JykpCisgICAgICAgICMgUmVzZXQgdGhlIHByaXZhdGUgY2FjaGVkIHN0YXRlLgorICAgICAgICBzY3JpcHRfaGVscGVyLl9fZGljdF9fWydfX2NhY2hlZF9pbnRlcnBfcmVxdWlyZXNfZW52aXJvbm1lbnQnXSA9IE5vbmUKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgIyBSZXNldCB0aGUgcHJpdmF0ZSBjYWNoZWQgc3RhdGUuCisgICAgICAgIHNjcmlwdF9oZWxwZXIuX19kaWN0X19bJ19fY2FjaGVkX2ludGVycF9yZXF1aXJlc19lbnZpcm9ubWVudCddID0gTm9uZQorCisgICAgQG1vY2sucGF0Y2goJ3N1YnByb2Nlc3MuY2hlY2tfY2FsbCcpCisgICAgZGVmIHRlc3RfaW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnRfdHJ1ZShzZWxmLCBtb2NrX2NoZWNrX2NhbGwpOgorICAgICAgICBtb2NrX2NoZWNrX2NhbGwuc2lkZV9lZmZlY3QgPSBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvcignJywgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzY3JpcHRfaGVscGVyLl9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtb2NrX2NoZWNrX2NhbGwuY2FsbF9jb3VudCkKKworICAgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLmNoZWNrX2NhbGwnKQorICAgIGRlZiB0ZXN0X2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50X2ZhbHNlKHNlbGYsIG1vY2tfY2hlY2tfY2FsbCk6CisgICAgICAgICMgVGhlIG1vY2tlZCBzdWJwcm9jZXNzLmNoZWNrX2NhbGwgZmFrZXMgYSBuby1lcnJvciBwcm9jZXNzLgorICAgICAgICBzY3JpcHRfaGVscGVyLl9pbnRlcnByZXRlcl9yZXF1aXJlc19lbnZpcm9ubWVudCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtb2NrX2NoZWNrX2NhbGwuY2FsbF9jb3VudCkKKworICAgIEBtb2NrLnBhdGNoKCdzdWJwcm9jZXNzLmNoZWNrX2NhbGwnKQorICAgIGRlZiB0ZXN0X2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50X2RldGFpbHMoc2VsZiwgbW9ja19jaGVja19jYWxsKToKKyAgICAgICAgc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNjcmlwdF9oZWxwZXIuX2ludGVycHJldGVyX3JlcXVpcmVzX2Vudmlyb25tZW50KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBtb2NrX2NoZWNrX2NhbGwuY2FsbF9jb3VudCkKKyAgICAgICAgY2hlY2tfY2FsbF9jb21tYW5kID0gbW9ja19jaGVja19jYWxsLmNhbGxfYXJnc1swXVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5leGVjdXRhYmxlLCBjaGVja19jYWxsX2NvbW1hbmRbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJy1FJywgY2hlY2tfY2FsbF9jb21tYW5kKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NlbGVjdC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CmluZGV4IGRkYjlhMGYuLjhmOWExYzkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0LnB5CkBAIC01LDcgKzUsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIAotQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm1bOjNdIGluICgnd2luJywgJ29zMicsICdyaXNjb3MnKSwKK0B1bml0dGVzdC5za2lwSWYoKHN5cy5wbGF0Zm9ybVs6M109PSd3aW4nKSwKICAgICAgICAgICAgICAgICAgImNhbid0IGVhc2lseSB0ZXN0IG9uIHRoaXMgc3lzdGVtIikKIGNsYXNzIFNlbGVjdFRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtMzIsNyArMzIsNyBAQAogICAgICAgICAgICAgZnAuY2xvc2UoKQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGVjdC5zZWxlY3QoW2ZkXSwgW10sIFtdLCAwKQotICAgICAgICAgICAgZXhjZXB0IHNlbGVjdC5lcnJvciBhcyBlcnI6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuZXJybm8sIGVycm5vLkVCQURGKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImV4Y2VwdGlvbiBub3QgcmFpc2VkIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0b3JzLnB5IGIvTGliL3Rlc3QvdGVzdF9zZWxlY3RvcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhjZDk0OAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2VsZWN0b3JzLnB5CkBAIC0wLDAgKzEsNDkwIEBACitpbXBvcnQgZXJybm8KK2ltcG9ydCBvcworaW1wb3J0IHJhbmRvbQoraW1wb3J0IHNlbGVjdG9ycworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHNvY2tldAoraW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCitmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGltZSBpbXBvcnQgc2xlZXAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHVuaXR0ZXN0Lm1vY2sKK3RyeToKKyAgICBmcm9tIHRpbWUgaW1wb3J0IG1vbm90b25pYyBhcyB0aW1lCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIHRpbWUKK3RyeToKKyAgICBpbXBvcnQgcmVzb3VyY2UKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICByZXNvdXJjZSA9IE5vbmUKKworCitpZiBoYXNhdHRyKHNvY2tldCwgJ3NvY2tldHBhaXInKToKKyAgICBzb2NrZXRwYWlyID0gc29ja2V0LnNvY2tldHBhaXIKK2Vsc2U6CisgICAgZGVmIHNvY2tldHBhaXIoZmFtaWx5PXNvY2tldC5BRl9JTkVULCB0eXBlPXNvY2tldC5TT0NLX1NUUkVBTSwgcHJvdG89MCk6CisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKSBhcyBsOgorICAgICAgICAgICAgbC5iaW5kKChzdXBwb3J0LkhPU1QsIDApKQorICAgICAgICAgICAgbC5saXN0ZW4oMykKKyAgICAgICAgICAgIGMgPSBzb2NrZXQuc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgYy5jb25uZWN0KGwuZ2V0c29ja25hbWUoKSkKKyAgICAgICAgICAgICAgICBjYWRkciA9IGMuZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGEsIGFkZHIgPSBsLmFjY2VwdCgpCisgICAgICAgICAgICAgICAgICAgICMgY2hlY2sgdGhhdCB3ZSd2ZSBnb3QgdGhlIGNvcnJlY3QgY2xpZW50CisgICAgICAgICAgICAgICAgICAgIGlmIGFkZHIgPT0gY2FkZHI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYywgYQorICAgICAgICAgICAgICAgICAgICBhLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIGMuY2xvc2UoKQorICAgICAgICAgICAgICAgIHJhaXNlCisKKworZGVmIGZpbmRfcmVhZHlfbWF0Y2hpbmcocmVhZHksIGZsYWcpOgorICAgIG1hdGNoID0gW10KKyAgICBmb3Iga2V5LCBldmVudHMgaW4gcmVhZHk6CisgICAgICAgIGlmIGV2ZW50cyAmIGZsYWc6CisgICAgICAgICAgICBtYXRjaC5hcHBlbmQoa2V5LmZpbGVvYmopCisgICAgcmV0dXJuIG1hdGNoCisKKworY2xhc3MgQmFzZVNlbGVjdG9yVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIG1ha2Vfc29ja2V0cGFpcihzZWxmKToKKyAgICAgICAgcmQsIHdyID0gc29ja2V0cGFpcigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZC5jbG9zZSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHdyLmNsb3NlKQorICAgICAgICByZXR1cm4gcmQsIHdyCisKKyAgICBkZWYgdGVzdF9yZWdpc3RlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAga2V5ID0gcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsICJkYXRhIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGtleSwgc2VsZWN0b3JzLlNlbGVjdG9yS2V5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5maWxlb2JqLCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkuZmQsIHJkLmZpbGVubygpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5ldmVudHMsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleS5kYXRhLCAiZGF0YSIpCisKKyAgICAgICAgIyByZWdpc3RlciBhbiB1bmtub3duIGV2ZW50CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMucmVnaXN0ZXIsIDAsIDk5OTk5OSkKKworICAgICAgICAjIHJlZ2lzdGVyIGFuIGludmFsaWQgRkQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yZWdpc3RlciwgLTEwLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKworICAgICAgICAjIHJlZ2lzdGVyIHR3aWNlCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnJlZ2lzdGVyLCByZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyByZWdpc3RlciB0aGUgc2FtZSBGRCwgYnV0IHdpdGggYSBkaWZmZXJlbnQgb2JqZWN0CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnJlZ2lzdGVyLCByZC5maWxlbm8oKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICBkZWYgdGVzdF91bnJlZ2lzdGVyKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorCisgICAgICAgICMgdW5yZWdpc3RlciBhbiB1bmtub3duIGZpbGUgb2JqCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLnVucmVnaXN0ZXIsIDk5OTk5OSkKKworICAgICAgICAjIHVucmVnaXN0ZXIgdHdpY2UKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMudW5yZWdpc3RlciwgcmQpCisKKyAgICBkZWYgdGVzdF91bnJlZ2lzdGVyX2FmdGVyX2ZkX2Nsb3NlKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisgICAgICAgIHIsIHcgPSByZC5maWxlbm8oKSwgd3IuZmlsZW5vKCkKKyAgICAgICAgcy5yZWdpc3RlcihyLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3LCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgIHJkLmNsb3NlKCkKKyAgICAgICAgd3IuY2xvc2UoKQorICAgICAgICBzLnVucmVnaXN0ZXIocikKKyAgICAgICAgcy51bnJlZ2lzdGVyKHcpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICJyZXF1aXJlcyBwb3NpeCIpCisgICAgZGVmIHRlc3RfdW5yZWdpc3Rlcl9hZnRlcl9mZF9jbG9zZV9hbmRfcmV1c2Uoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKyAgICAgICAgciwgdyA9IHJkLmZpbGVubygpLCB3ci5maWxlbm8oKQorICAgICAgICBzLnJlZ2lzdGVyKHIsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzLnJlZ2lzdGVyKHcsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgcmQyLCB3cjIgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisgICAgICAgIHJkLmNsb3NlKCkKKyAgICAgICAgd3IuY2xvc2UoKQorICAgICAgICBvcy5kdXAyKHJkMi5maWxlbm8oKSwgcikKKyAgICAgICAgb3MuZHVwMih3cjIuZmlsZW5vKCksIHcpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBzLnVucmVnaXN0ZXIocikKKyAgICAgICAgcy51bnJlZ2lzdGVyKHcpCisKKyAgICBkZWYgdGVzdF91bnJlZ2lzdGVyX2FmdGVyX3NvY2tldF9jbG9zZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICByZC5jbG9zZSgpCisgICAgICAgIHdyLmNsb3NlKCkKKyAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorICAgICAgICBzLnVucmVnaXN0ZXIod3IpCisKKyAgICBkZWYgdGVzdF9tb2RpZnkoc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorCisgICAgICAgICMgbW9kaWZ5IGV2ZW50cworICAgICAgICBrZXkyID0gcy5tb2RpZnkocmQsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChrZXkuZXZlbnRzLCBrZXkyLmV2ZW50cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkyLCBzLmdldF9rZXkocmQpKQorCisgICAgICAgIHMudW5yZWdpc3RlcihyZCkKKworICAgICAgICAjIG1vZGlmeSBkYXRhCisgICAgICAgIGQxID0gb2JqZWN0KCkKKyAgICAgICAgZDIgPSBvYmplY3QoKQorCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCBkMSkKKyAgICAgICAga2V5MiA9IHMubW9kaWZ5KHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgZDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LmV2ZW50cywga2V5Mi5ldmVudHMpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoa2V5LmRhdGEsIGtleTIuZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChrZXkyLCBzLmdldF9rZXkocmQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleTIuZGF0YSwgZDIpCisKKyAgICAgICAgIyBtb2RpZnkgdW5rbm93biBmaWxlIG9iagorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5tb2RpZnksIDk5OTk5OSwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisKKyAgICAgICAgIyBtb2RpZnkgdXNlIGEgc2hvcnRjdXQKKyAgICAgICAgZDMgPSBvYmplY3QoKQorICAgICAgICBzLnJlZ2lzdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKyAgICAgICAgcy51bnJlZ2lzdGVyID0gdW5pdHRlc3QubW9jay5Nb2NrKCkKKworICAgICAgICBzLm1vZGlmeShyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQsIGQzKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMucmVnaXN0ZXIuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHMudW5yZWdpc3Rlci5jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9jbG9zZShzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICBtYXBwaW5nID0gcy5nZXRfbWFwKCkKKyAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisKKyAgICAgICAgcy5jbG9zZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBzLmdldF9rZXksIHJkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCB3cikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIG1hcHBpbmcuX19nZXRpdGVtX18sIHJkKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgbWFwcGluZy5fX2dldGl0ZW1fXywgd3IpCisKKyAgICBkZWYgdGVzdF9nZXRfa2V5KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBrZXkgPSBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCwgImRhdGEiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGtleSwgcy5nZXRfa2V5KHJkKSkKKworICAgICAgICAjIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgOTk5OTk5KQorCisgICAgZGVmIHRlc3RfZ2V0X21hcChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAga2V5cyA9IHMuZ2V0X21hcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoa2V5cykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzKSwgW10pCisgICAgICAgIGtleSA9IHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFELCAiZGF0YSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmQsIGtleXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoa2V5LCBrZXlzW3JkXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oa2V5cyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChrZXlzKSwgW3JkLmZpbGVubygpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGtleXMudmFsdWVzKCkpLCBba2V5XSkKKworICAgICAgICAjIHVua25vd24gZmlsZSBvYmoKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBrZXlzWzk5OTk5OV0KKworICAgICAgICAjIFJlYWQtb25seSBtYXBwaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBrZXlzW3JkXQorCisgICAgZGVmIHRlc3Rfc2VsZWN0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIHJkLCB3ciA9IHNlbGYubWFrZV9zb2NrZXRwYWlyKCkKKworICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgd3Jfa2V5ID0gcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorCisgICAgICAgIHJlc3VsdCA9IHMuc2VsZWN0KCkKKyAgICAgICAgZm9yIGtleSwgZXZlbnRzIGluIHJlc3VsdDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGtleSwgc2VsZWN0b3JzLlNlbGVjdG9yS2V5KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShldmVudHMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGV2ZW50cyAmIH4oc2VsZWN0b3JzLkVWRU5UX1JFQUQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9XUklURSkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbKHdyX2tleSwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKV0sIHJlc3VsdCkKKworICAgIGRlZiB0ZXN0X2NvbnRleHRfbWFuYWdlcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAgd2l0aCBzIGFzIHNlbDoKKyAgICAgICAgICAgIHNlbC5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgICAgICBzZWwucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgcy5nZXRfa2V5LCByZCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIHMuZ2V0X2tleSwgd3IpCisKKyAgICBkZWYgdGVzdF9maWxlbm8oc2VsZik6CisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCisKKyAgICAgICAgaWYgaGFzYXR0cihzLCAnZmlsZW5vJyk6CisgICAgICAgICAgICBmZCA9IHMuZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGZkLCBpbnQpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoZmQsIDApCisKKyAgICBkZWYgdGVzdF9zZWxlY3RvcihzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICBOVU1fU09DS0VUUyA9IDEyCisgICAgICAgIE1TRyA9IGIiIFRoaXMgaXMgYSB0ZXN0LiIKKyAgICAgICAgTVNHX0xFTiA9IGxlbihNU0cpCisgICAgICAgIHJlYWRlcnMgPSBbXQorICAgICAgICB3cml0ZXJzID0gW10KKyAgICAgICAgcjJ3ID0ge30KKyAgICAgICAgdzJyID0ge30KKworICAgICAgICBmb3IgaSBpbiByYW5nZShOVU1fU09DS0VUUyk6CisgICAgICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisgICAgICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgIHMucmVnaXN0ZXIod3IsIHNlbGVjdG9ycy5FVkVOVF9XUklURSkKKyAgICAgICAgICAgIHJlYWRlcnMuYXBwZW5kKHJkKQorICAgICAgICAgICAgd3JpdGVycy5hcHBlbmQod3IpCisgICAgICAgICAgICByMndbcmRdID0gd3IKKyAgICAgICAgICAgIHcyclt3cl0gPSByZAorCisgICAgICAgIGJ1ZnMgPSBbXQorCisgICAgICAgIHdoaWxlIHdyaXRlcnM6CisgICAgICAgICAgICByZWFkeSA9IHMuc2VsZWN0KCkKKyAgICAgICAgICAgIHJlYWR5X3dyaXRlcnMgPSBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBpZiBub3QgcmVhZHlfd3JpdGVyczoKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIm5vIHNvY2tldHMgcmVhZHkgZm9yIHdyaXRpbmciKQorICAgICAgICAgICAgd3IgPSByYW5kb20uY2hvaWNlKHJlYWR5X3dyaXRlcnMpCisgICAgICAgICAgICB3ci5zZW5kKE1TRykKKworICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApOgorICAgICAgICAgICAgICAgIHJlYWR5ID0gcy5zZWxlY3QoKQorICAgICAgICAgICAgICAgIHJlYWR5X3JlYWRlcnMgPSBmaW5kX3JlYWR5X21hdGNoaW5nKHJlYWR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgICAgIGlmIHJlYWR5X3JlYWRlcnM6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgIyB0aGVyZSBtaWdodCBiZSBhIGRlbGF5IGJldHdlZW4gdGhlIHdyaXRlIHRvIHRoZSB3cml0ZSBlbmQgYW5kCisgICAgICAgICAgICAgICAgIyB0aGUgcmVhZCBlbmQgaXMgcmVwb3J0ZWQgcmVhZHkKKyAgICAgICAgICAgICAgICBzbGVlcCgwLjEpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgibm8gc29ja2V0cyByZWFkeSBmb3IgcmVhZGluZyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFt3MnJbd3JdXSwgcmVhZHlfcmVhZGVycykKKyAgICAgICAgICAgIHJkID0gcmVhZHlfcmVhZGVyc1swXQorICAgICAgICAgICAgYnVmID0gcmQucmVjdihNU0dfTEVOKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYnVmKSwgTVNHX0xFTikKKyAgICAgICAgICAgIGJ1ZnMuYXBwZW5kKGJ1ZikKKyAgICAgICAgICAgIHMudW5yZWdpc3RlcihyMndbcmRdKQorICAgICAgICAgICAgcy51bnJlZ2lzdGVyKHJkKQorICAgICAgICAgICAgd3JpdGVycy5yZW1vdmUocjJ3W3JkXSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGJ1ZnMsIFtNU0ddICogTlVNX1NPQ0tFVFMpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInLAorICAgICAgICAgICAgICAgICAgICAgJ3NlbGVjdC5zZWxlY3QoKSBjYW5ub3QgYmUgdXNlZCB3aXRoIGVtcHR5IGZkIHNldHMnKQorICAgIGRlZiB0ZXN0X2VtcHR5X3NlbGVjdChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjMwMDk6IE1ha2Ugc3VyZSBFcG9sbFNlbGVjdG9yLnNlbGVjdCgpIHdvcmtzIHdoZW4gbm8gRkQgaXMKKyAgICAgICAgIyByZWdpc3RlcmVkLgorICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuc2VsZWN0KHRpbWVvdXQ9MCksIFtdKQorCisgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAgcy5yZWdpc3Rlcih3ciwgc2VsZWN0b3JzLkVWRU5UX1dSSVRFKQorICAgICAgICB0ID0gdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgbGVuKHMuc2VsZWN0KDApKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4ocy5zZWxlY3QoLTEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHRpbWUoKSAtIHQsIDAuNSkKKworICAgICAgICBzLnVucmVnaXN0ZXIod3IpCisgICAgICAgIHMucmVnaXN0ZXIocmQsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICB0ID0gdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zZWxlY3QoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zZWxlY3QoLTEpKQorICAgICAgICBzZWxmLmFzc2VydExlc3ModGltZSgpIC0gdCwgMC41KQorCisgICAgICAgIHQwID0gdGltZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5zZWxlY3QoMSkpCisgICAgICAgIHQxID0gdGltZSgpCisgICAgICAgIGR0ID0gdDEgLSB0MAorICAgICAgICAjIFRvbGVyYXRlIDIuMCBzZWNvbmRzIGZvciB2ZXJ5IHNsb3cgYnVpbGRib3RzCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwLjggPD0gZHQgPD0gMi4wLCBkdCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2lnbmFsLCAiYWxhcm0iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2lnbmFsLmFsYXJtKCkgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCIpCisgICAgZGVmIHRlc3Rfc2VsZWN0X2ludGVycnVwdChzZWxmKToKKyAgICAgICAgcyA9IHNlbGYuU0VMRUNUT1IoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKKworICAgICAgICByZCwgd3IgPSBzZWxmLm1ha2Vfc29ja2V0cGFpcigpCisKKyAgICAgICAgb3JpZ19hbHJtX2hhbmRsZXIgPSBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBsYW1iZGEgKmFyZ3M6IE5vbmUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaWduYWwuc2lnbmFsLCBzaWduYWwuU0lHQUxSTSwgb3JpZ19hbHJtX2hhbmRsZXIpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaWduYWwuYWxhcm0sIDApCisKKyAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisKKyAgICAgICAgcy5yZWdpc3RlcihyZCwgc2VsZWN0b3JzLkVWRU5UX1JFQUQpCisgICAgICAgIHQgPSB0aW1lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzLnNlbGVjdCgyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzKHRpbWUoKSAtIHQsIDIuNSkKKworCitjbGFzcyBTY2FsYWJsZVNlbGVjdG9yTWl4SW46CisKKyAgICAjIHNlZSBpc3N1ZSAjMTg5NjMgZm9yIHdoeSBpdCdzIHNraXBwZWQgb24gb2xkZXIgT1MgWCB2ZXJzaW9ucworICAgIEBzdXBwb3J0LnJlcXVpcmVzX21hY192ZXIoMTAsIDUpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MocmVzb3VyY2UsICJUZXN0IG5lZWRzIHJlc291cmNlIG1vZHVsZSIpCisgICAgZGVmIHRlc3RfYWJvdmVfZmRfc2V0c2l6ZShzZWxmKToKKyAgICAgICAgIyBBIHNjYWxhYmxlIGltcGxlbWVudGF0aW9uIHNob3VsZCBoYXZlIG5vIHByb2JsZW0gd2l0aCBtb3JlIHRoYW4KKyAgICAgICAgIyBGRF9TRVRTSVpFIGZpbGUgZGVzY3JpcHRvcnMuIFNpbmNlIHdlIGRvbid0IGtub3cgdGhlIHZhbHVlLCB3ZSBqdXN0CisgICAgICAgICMgdHJ5IHRvIHNldCB0aGUgc29mdCBSTElNSVRfTk9GSUxFIHRvIHRoZSBoYXJkIFJMSU1JVF9OT0ZJTEUgY2VpbGluZy4KKyAgICAgICAgc29mdCwgaGFyZCA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFKQorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX05PRklMRSwgKGhhcmQsIGhhcmQpKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHJlc291cmNlLnNldHJsaW1pdCwgcmVzb3VyY2UuUkxJTUlUX05PRklMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc29mdCwgaGFyZCkpCisgICAgICAgICAgICBOVU1fRkRTID0gbWluKGhhcmQsIDIqKjE2KQorICAgICAgICBleGNlcHQgKE9TRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgTlVNX0ZEUyA9IHNvZnQKKworICAgICAgICAjIGd1YXJkIGZvciBhbHJlYWR5IGFsbG9jYXRlZCBGRHMgKHN0ZGluLCBzdGRvdXQuLi4pCisgICAgICAgIE5VTV9GRFMgLT0gMzIKKworICAgICAgICBzID0gc2VsZi5TRUxFQ1RPUigpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQorCisgICAgICAgIGZvciBpIGluIHJhbmdlKE5VTV9GRFMgLy8gMik6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmQsIHdyID0gc2VsZi5tYWtlX3NvY2tldHBhaXIoKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgICAgICAgICAgIyB0b28gbWFueSBGRHMsIHNraXAgLSBub3RlIHRoYXQgd2Ugc2hvdWxkIG9ubHkgY2F0Y2ggRU1GSUxFCisgICAgICAgICAgICAgICAgIyBoZXJlLCBidXQgYXBwYXJlbnRseSAqQlNEIGFuZCBTb2xhcmlzIGNhbiBmYWlsIHVwb24gY29ubmVjdCgpCisgICAgICAgICAgICAgICAgIyBvciBiaW5kKCkgd2l0aCBFQUREUk5PVEFWQUlMLCBzbyBsZXQncyBiZSBzYWZlCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiRkQgbGltaXQgcmVhY2hlZCIpCisKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzLnJlZ2lzdGVyKHJkLCBzZWxlY3RvcnMuRVZFTlRfUkVBRCkKKyAgICAgICAgICAgICAgICBzLnJlZ2lzdGVyKHdyLCBzZWxlY3RvcnMuRVZFTlRfV1JJVEUpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRU5PU1BDOgorICAgICAgICAgICAgICAgICAgICAjIHRoaXMgY2FuIGJlIHJhaXNlZCBieSBlcG9sbCBpZiB3ZSBnbyBvdmVyCisgICAgICAgICAgICAgICAgICAgICMgZnMuZXBvbGwubWF4X3VzZXJfd2F0Y2hlcyBzeXNjdGwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiRkQgbGltaXQgcmVhY2hlZCIpCisgICAgICAgICAgICAgICAgcmFpc2UKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKE5VTV9GRFMgLy8gMiwgbGVuKHMuc2VsZWN0KCkpKQorCisKK2NsYXNzIERlZmF1bHRTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlKToKKworICAgIFNFTEVDVE9SID0gc2VsZWN0b3JzLkRlZmF1bHRTZWxlY3RvcgorCisKK2NsYXNzIFNlbGVjdFNlbGVjdG9yVGVzdENhc2UoQmFzZVNlbGVjdG9yVGVzdENhc2UpOgorCisgICAgU0VMRUNUT1IgPSBzZWxlY3RvcnMuU2VsZWN0U2VsZWN0b3IKKworCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLlBvbGxTZWxlY3RvciIpCitjbGFzcyBQb2xsU2VsZWN0b3JUZXN0Q2FzZShCYXNlU2VsZWN0b3JUZXN0Q2FzZSwgU2NhbGFibGVTZWxlY3Rvck1peEluKToKKworICAgIFNFTEVDVE9SID0gZ2V0YXR0cihzZWxlY3RvcnMsICdQb2xsU2VsZWN0b3InLCBOb25lKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc2VsZWN0b3JzLCAnRXBvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IiKQorY2xhc3MgRXBvbGxTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlLCBTY2FsYWJsZVNlbGVjdG9yTWl4SW4pOgorCisgICAgU0VMRUNUT1IgPSBnZXRhdHRyKHNlbGVjdG9ycywgJ0Vwb2xsU2VsZWN0b3InLCBOb25lKQorCisgICAgZGVmIHRlc3RfcmVnaXN0ZXJfZmlsZShzZWxmKToKKyAgICAgICAgIyBlcG9sbCg3KSByZXR1cm5zIEVQRVJNIHdoZW4gZ2l2ZW4gYSBmaWxlIHRvIHdhdGNoCisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgd2l0aCB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yKToKKyAgICAgICAgICAgICAgICBzLnJlZ2lzdGVyKGYsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICAgICAgIyB0aGUgU2VsZWN0b3JLZXkgaGFzIGJlZW4gcmVtb3ZlZAorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICAgICAgcy5nZXRfa2V5KGYpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzZWxlY3RvcnMsICdLcXVldWVTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLktxdWV1ZVNlbGVjdG9yKSIpCitjbGFzcyBLcXVldWVTZWxlY3RvclRlc3RDYXNlKEJhc2VTZWxlY3RvclRlc3RDYXNlLCBTY2FsYWJsZVNlbGVjdG9yTWl4SW4pOgorCisgICAgU0VMRUNUT1IgPSBnZXRhdHRyKHNlbGVjdG9ycywgJ0txdWV1ZVNlbGVjdG9yJywgTm9uZSkKKworICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2JhZF9mZChzZWxmKToKKyAgICAgICAgIyBhIGZpbGUgZGVzY3JpcHRvciB0aGF0J3MgYmVlbiBjbG9zZWQgc2hvdWxkIHJhaXNlIGFuIE9TRXJyb3IKKyAgICAgICAgIyB3aXRoIEVCQURGCisgICAgICAgIHMgPSBzZWxmLlNFTEVDVE9SKCkKKyAgICAgICAgYmFkX2YgPSBzdXBwb3J0Lm1ha2VfYmFkX2ZkKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHMucmVnaXN0ZXIoYmFkX2YsIHNlbGVjdG9ycy5FVkVOVF9SRUFEKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRUJBREYpCisgICAgICAgICMgdGhlIFNlbGVjdG9yS2V5IGhhcyBiZWVuIHJlbW92ZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvcik6CisgICAgICAgICAgICBzLmdldF9rZXkoYmFkX2YpCisKKworZGVmIHRlc3RfbWFpbigpOgorICAgIHRlc3RzID0gW0RlZmF1bHRTZWxlY3RvclRlc3RDYXNlLCBTZWxlY3RTZWxlY3RvclRlc3RDYXNlLAorICAgICAgICAgICAgIFBvbGxTZWxlY3RvclRlc3RDYXNlLCBFcG9sbFNlbGVjdG9yVGVzdENhc2UsCisgICAgICAgICAgICAgS3F1ZXVlU2VsZWN0b3JUZXN0Q2FzZV0KKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHMpCisgICAgc3VwcG9ydC5yZWFwX2NoaWxkcmVuKCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CmluZGV4IGMwYmNhMmYuLmYwODRlYmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2V0LnB5CkBAIC0yMzEsMjkgKzIzMSwzMCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnMsIGR1cCwgIiVzICE9ICVzIiAlIChzZWxmLnMsIGR1cCkpCiAgICAgICAgICAgICBpZiB0eXBlKHNlbGYucykgbm90IGluIChzZXQsIGZyb3plbnNldCk6CiAgICAgICAgICAgICAgICAgc2VsZi5zLnggPSAxMAotICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoc2VsZi5zKQorICAgICAgICAgICAgICAgIHAgPSBwaWNrbGUuZHVtcHMoc2VsZi5zLCBpKQogICAgICAgICAgICAgICAgIGR1cCA9IHBpY2tsZS5sb2FkcyhwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zLngsIGR1cC54KQogCiAgICAgZGVmIHRlc3RfaXRlcmF0b3JfcGlja2xpbmcoc2VsZik6Ci0gICAgICAgIGl0b3JnID0gaXRlcihzZWxmLnMpCi0gICAgICAgIGRhdGEgPSBzZWxmLnRoZXR5cGUoc2VsZi5zKQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0b3JnKQotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICAjIFNldCBpdGVyYXRvcnMgdW5waWNrbGUgYXMgbGlzdCBpdGVyYXRvcnMgZHVlIHRvIHRoZQotICAgICAgICAjIHVuZGVmaW5lZCBvcmRlciBvZiBzZXQgaXRlbXMuCi0gICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKGl0LCBjb2xsZWN0aW9ucy5hYmMuSXRlcmF0b3IpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZShpdCksIGRhdGEpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgaXRvcmcgPSBpdGVyKHNlbGYucykKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLnRoZXR5cGUoc2VsZi5zKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZywgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgIyBTZXQgaXRlcmF0b3JzIHVucGlja2xlIGFzIGxpc3QgaXRlcmF0b3JzIGR1ZSB0byB0aGUKKyAgICAgICAgICAgICMgdW5kZWZpbmVkIG9yZGVyIG9mIHNldCBpdGVtcy4KKyAgICAgICAgICAgICMgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaXQsIGNvbGxlY3Rpb25zLmFiYy5JdGVyYXRvcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50aGV0eXBlKGl0KSwgZGF0YSkKIAotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkcm9wID0gbmV4dChpdCkKLSAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICByZXR1cm4KLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdCkKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRoZXR5cGUoaXQpLCBkYXRhIC0gc2VsZi50aGV0eXBlKChkcm9wLCkpKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBkcm9wID0gbmV4dChpdCkKKyAgICAgICAgICAgIGV4Y2VwdCBTdG9wSXRlcmF0aW9uOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGhldHlwZShpdCksIGRhdGEgLSBzZWxmLnRoZXR5cGUoKGRyb3AsKSkpCiAKICAgICBkZWYgdGVzdF9kZWVwY29weShzZWxmKToKICAgICAgICAgY2xhc3MgVHJhY2VyOgpAQCAtODQ4LDE1ICs4NDksMTQgQEAKICAgICAgICAgZm9yIHYgaW4gc2VsZi5zZXQ6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKHYsIHNlbGYudmFsdWVzKQogICAgICAgICBzZXRpdGVyID0gaXRlcihzZWxmLnNldCkKLSAgICAgICAgIyBub3RlOiBfX2xlbmd0aF9oaW50X18gaXMgYW4gaW50ZXJuYWwgdW5kb2N1bWVudGVkIEFQSSwKLSAgICAgICAgIyBkb24ndCByZWx5IG9uIGl0IGluIHlvdXIgb3duIHByb2dyYW1zCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0aXRlci5fX2xlbmd0aF9oaW50X18oKSwgbGVuKHNlbGYuc2V0KSkKIAogICAgIGRlZiB0ZXN0X3BpY2tsaW5nKHNlbGYpOgotICAgICAgICBwID0gcGlja2xlLmR1bXBzKHNlbGYuc2V0KQotICAgICAgICBjb3B5ID0gcGlja2xlLmxvYWRzKHApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zZXQsIGNvcHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiVzICE9ICVzIiAlIChzZWxmLnNldCwgY29weSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcCA9IHBpY2tsZS5kdW1wcyhzZWxmLnNldCwgcHJvdG8pCisgICAgICAgICAgICBjb3B5ID0gcGlja2xlLmxvYWRzKHApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc2V0LCBjb3B5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgIT0gJXMiICUgKHNlbGYuc2V0LCBjb3B5KSkKIAogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xNzMxLDYgKzE3MzEsMTcgQEAKICAgICAgICAgYmVfYmFkID0gVHJ1ZQogICAgICAgICBzZXQxLnN5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZShkaWN0MikKIAorICAgIGRlZiB0ZXN0X2l0ZXJfYW5kX211dGF0ZShzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjQ1ODEKKyAgICAgICAgcyA9IHNldChyYW5nZSgxMDApKQorICAgICAgICBzLmNsZWFyKCkKKyAgICAgICAgcy51cGRhdGUocmFuZ2UoMTAwKSkKKyAgICAgICAgc2kgPSBpdGVyKHMpCisgICAgICAgIHMuY2xlYXIoKQorICAgICAgICBhID0gbGlzdChyYW5nZSgxMDApKQorICAgICAgICBzLnVwZGF0ZShyYW5nZSgxMDApKQorICAgICAgICBsaXN0KHNpKQorCiAjIEFwcGxpY2F0aW9uIHRlc3RzIChiYXNlZCBvbiBEYXZpZCBFcHBzdGVpbidzIGdyYXBoIHJlY2lwZXMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIGRlZiBwb3dlcnNldChVKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2hlbHZlLnB5IGIvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKaW5kZXggMTNjMTI2NS4uYmQ1MWQ4NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaGVsdmUucHkKQEAgLTE0OCw2ICsxNDgsMTkgQEAKICAgICAgICAgcDIgPSBkW2VuY29kZWRrZXldCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocDEsIHAyKSAgIyBXcml0ZSBjcmVhdGVzIG5ldyBvYmplY3QgaW4gc3RvcmUKIAorICAgIGRlZiB0ZXN0X3dpdGgoc2VsZik6CisgICAgICAgIGQxID0ge30KKyAgICAgICAgd2l0aCBzaGVsdmUuU2hlbGYoZDEsIHByb3RvY29sPTIsIHdyaXRlYmFjaz1GYWxzZSkgYXMgczoKKyAgICAgICAgICAgIHNbJ2tleTEnXSA9IFsxLDIsMyw0XQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzWydrZXkxJ10sIFsxLDIsMyw0XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHMpLCAxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBsZW4sIHMpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNbJ2tleTEnXQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgnQ2xvc2VkIHNoZWxmIHNob3VsZCBub3QgZmluZCBhIGtleScpCiAKIGZyb20gdGVzdCBpbXBvcnQgbWFwcGluZ190ZXN0cwogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NodXRpbC5weSBiL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CmluZGV4IGMzZmI4YTcuLmQyZDRkMDMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2h1dGlsLnB5CkBAIC0xLDYgKzEsNyBAQAogIyBDb3B5cmlnaHQgKEMpIDIwMDMgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KIAogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdW5pdHRlc3QubW9jawogaW1wb3J0IHNodXRpbAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgc3lzCkBAIC0xMCwxNSArMTEsMTMgQEAKIGltcG9ydCBlcnJubwogaW1wb3J0IGZ1bmN0b29scwogaW1wb3J0IHN1YnByb2Nlc3MKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTgotZnJvbSBvcy5wYXRoIGltcG9ydCBzcGxpdGRyaXZlCi1mcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlLCBzcGF3bgotZnJvbSBzaHV0aWwgaW1wb3J0IChfbWFrZV90YXJiYWxsLCBfbWFrZV96aXBmaWxlLCBtYWtlX2FyY2hpdmUsCitmcm9tIGNvbnRleHRsaWIgaW1wb3J0IEV4aXRTdGFjaworZnJvbSBzaHV0aWwgaW1wb3J0IChtYWtlX2FyY2hpdmUsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0LCB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBnZXRfYXJjaGl2ZV9mb3JtYXRzLCBFcnJvciwgdW5wYWNrX2FyY2hpdmUsCiAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3VucGFja19mb3JtYXQsIFJlZ2lzdHJ5RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCwgZ2V0X3VucGFja19mb3JtYXRzKQorICAgICAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyX3VucGFja19mb3JtYXQsIGdldF91bnBhY2tfZm9ybWF0cywKKyAgICAgICAgICAgICAgICAgICAgU2FtZUZpbGVFcnJvcikKIGltcG9ydCB0YXJmaWxlCiBpbXBvcnQgd2FybmluZ3MKIApAQCAtNDQsNyArNDMsNyBAQAogICAgIGltcG9ydCB6aXBmaWxlCiAgICAgWklQX1NVUFBPUlQgPSBUcnVlCiBleGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgWklQX1NVUFBPUlQgPSBmaW5kX2V4ZWN1dGFibGUoJ3ppcCcpCisgICAgWklQX1NVUFBPUlQgPSBzaHV0aWwud2hpY2goJ3ppcCcpCiAKIGRlZiBfZmFrZV9yZW5hbWUoKmFyZ3MsICoqa3dhcmdzKToKICAgICAjIFByZXRlbmQgdGhlIGRlc3RpbmF0aW9uIHBhdGggaXMgb24gYSBkaWZmZXJlbnQgZmlsZXN5c3RlbS4KQEAgLTg1LDYgKzg0LDE4IEBACiAgICAgd2l0aCBvcGVuKHBhdGgsICdyYicgaWYgYmluYXJ5IGVsc2UgJ3InKSBhcyBmcDoKICAgICAgICAgcmV0dXJuIGZwLnJlYWQoKQogCitkZWYgcmxpc3RkaXIocGF0aCk6CisgICAgcmVzID0gW10KKyAgICBmb3IgbmFtZSBpbiBzb3J0ZWQob3MubGlzdGRpcihwYXRoKSk6CisgICAgICAgIHAgPSBvcy5wYXRoLmpvaW4ocGF0aCwgbmFtZSkKKyAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwKSBhbmQgbm90IG9zLnBhdGguaXNsaW5rKHApOgorICAgICAgICAgICAgcmVzLmFwcGVuZChuYW1lICsgJy8nKQorICAgICAgICAgICAgZm9yIG4gaW4gcmxpc3RkaXIocCk6CisgICAgICAgICAgICAgICAgcmVzLmFwcGVuZChuYW1lICsgJy8nICsgbikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQobmFtZSkKKyAgICByZXR1cm4gcmVzCisKIAogY2xhc3MgVGVzdFNodXRpbCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTExNSw3ICsxMjYsOSBAQAogICAgICAgICB3cml0ZV9maWxlKG9zLnBhdGguam9pbih2aWN0aW0sICdzb21lZmlsZScpLCAnZm9vJykKICAgICAgICAgdmljdGltID0gb3MuZnNlbmNvZGUodmljdGltKQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodmljdGltLCBieXRlcykKLSAgICAgICAgc2h1dGlsLnJtdHJlZSh2aWN0aW0pCisgICAgICAgIHdpbiA9IChvcy5uYW1lID09ICdudCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpIGlmIHdpbiBlbHNlIEV4aXRTdGFjaygpOgorICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh2aWN0aW0pCiAKICAgICBAc3VwcG9ydC5za2lwX3VubGVzc19zeW1saW5rCiAgICAgZGVmIHRlc3Rfcm10cmVlX2ZhaWxzX29uX3N5bWxpbmsoc2VsZik6CkBAIC03NDYsMTMgKzc1OSwyNyBAQAogICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjX2RpciwgZHN0X2RpcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KHNyY19kaXIpLnN0X21vZGUsIG9zLnN0YXQoZHN0X2Rpcikuc3RfbW9kZSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KG9zLnBhdGguam9pbihzcmNfZGlyLCAncGVybWlzc2l2ZS50eHQnKSkuc3RfbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcy5zdGF0KG9zLnBhdGguam9pbihkc3RfZGlyLCAncGVybWlzc2l2ZS50eHQnKSkuc3RfbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Blcm1pc3NpdmUudHh0JykpLnN0X21vZGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3Muc3RhdChvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ3Jlc3RyaWN0aXZlLnR4dCcpKS5zdF9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQob3MucGF0aC5qb2luKGRzdF9kaXIsICdyZXN0cmljdGl2ZS50eHQnKSkuc3RfbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ3Jlc3RyaWN0aXZlLnR4dCcpKS5zdF9tb2RlKQogICAgICAgICByZXN0cmljdGl2ZV9zdWJkaXJfZHN0ID0gb3MucGF0aC5qb2luKGRzdF9kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5zcGxpdChyZXN0cmljdGl2ZV9zdWJkaXIpWzFdKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyKS5zdF9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN0YXQocmVzdHJpY3RpdmVfc3ViZGlyX2RzdCkuc3RfbW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdChyZXN0cmljdGl2ZV9zdWJkaXJfZHN0KS5zdF9tb2RlKQorCisgICAgQHVuaXR0ZXN0Lm1vY2sucGF0Y2goJ29zLmNobW9kJykKKyAgICBkZWYgdGVzdF9jb3B5dHJlZV93aW5lcnJvcihzZWxmLCBtb2NrX3BhdGNoKToKKyAgICAgICAgIyBXaGVuIGNvcHlpbmcgdG8gVkZBVCwgY29weXN0YXQoKSByYWlzZXMgT1NFcnJvci4gT24gV2luZG93cywgdGhlCisgICAgICAgICMgZXhjZXB0aW9uIG9iamVjdCBoYXMgYSBtZWFuaW5nZnVsICd3aW5lcnJvcicgYXR0cmlidXRlLCBidXQgbm90CisgICAgICAgICMgb24gb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMuIERvIG5vdCBhc3N1bWUgJ3dpbmVycm9yJyBpcyBzZXQuCisgICAgICAgIHNyY19kaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKKyAgICAgICAgZHN0X2RpciA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS5ta2R0ZW1wKCksICdkZXN0aW5hdGlvbicpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzaHV0aWwucm10cmVlLCBzcmNfZGlyKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2h1dGlsLnJtdHJlZSwgb3MucGF0aC5kaXJuYW1lKGRzdF9kaXIpKQorCisgICAgICAgIG1vY2tfcGF0Y2guc2lkZV9lZmZlY3QgPSBQZXJtaXNzaW9uRXJyb3IoJ2thLWJvb20nKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNodXRpbC5FcnJvcik6CisgICAgICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjX2RpciwgZHN0X2RpcikKIAogICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSA9PSAnbnQnLCAndGVtcG9yYXJpbHkgZGlzYWJsZWQgb24gV2luZG93cycpCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2xpbmsnKSwgJ3JlcXVpcmVzIG9zLmxpbmsnKQpAQCAtNzY1LDcgKzc5Miw3IEBACiAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAndycpIGFzIGY6CiAgICAgICAgICAgICAgICAgZi53cml0ZSgnY2hlZGRhcicpCiAgICAgICAgICAgICBvcy5saW5rKHNyYywgZHN0KQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLkVycm9yLCBzaHV0aWwuY29weWZpbGUsIHNyYywgZHN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2h1dGlsLlNhbWVGaWxlRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCiAgICAgICAgICAgICB3aXRoIG9wZW4oc3JjLCAncicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnJlYWQoKSwgJ2NoZWRkYXInKQogICAgICAgICAgICAgb3MucmVtb3ZlKGRzdCkKQEAgLTc4NSw3ICs4MTIsNyBAQAogICAgICAgICAgICAgIyB0byBURVNURk4vVEVTVEZOL2NoZWVzZSwgd2hpbGUgaXQgc2hvdWxkIHBvaW50IGF0CiAgICAgICAgICAgICAjIFRFU1RGTi9jaGVlc2UuCiAgICAgICAgICAgICBvcy5zeW1saW5rKCdjaGVlc2UnLCBkc3QpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuRXJyb3IsIHNodXRpbC5jb3B5ZmlsZSwgc3JjLCBkc3QpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuU2FtZUZpbGVFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmMsIGRzdCkKICAgICAgICAgICAgIHdpdGggb3BlbihzcmMsICdyJykgYXMgZjoKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCAnY2hlZGRhcicpCiAgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQpAQCAtODc2LDYgKzkwMywyNiBAQAogICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjX2RpciwgZHN0X2Rpciwgc3ltbGlua3M9VHJ1ZSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigndGVzdC50eHQnLCBvcy5saXN0ZGlyKGRzdF9kaXIpKQogCisgICAgQHN1cHBvcnQuc2tpcF91bmxlc3Nfc3ltbGluaworICAgIGRlZiB0ZXN0X2NvcHl0cmVlX3N5bWxpbmtfZGlyKHNlbGYpOgorICAgICAgICBzcmNfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgZHN0X2RpciA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2Rlc3RpbmF0aW9uJykKKyAgICAgICAgb3MubWtkaXIob3MucGF0aC5qb2luKHNyY19kaXIsICdyZWFsX2RpcicpKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNyY19kaXIsICdyZWFsX2RpcicsICd0ZXN0LnR4dCcpLCAndycpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBvcy5zeW1saW5rKG9zLnBhdGguam9pbihzcmNfZGlyLCAncmVhbF9kaXInKSwKKyAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oc3JjX2RpciwgJ2xpbmtfdG9fZGlyJyksCisgICAgICAgICAgICAgICAgICAgdGFyZ2V0X2lzX2RpcmVjdG9yeT1UcnVlKQorCisgICAgICAgIHNodXRpbC5jb3B5dHJlZShzcmNfZGlyLCBkc3RfZGlyLCBzeW1saW5rcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmlzbGluayhvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ2xpbmtfdG9fZGlyJykpKQorICAgICAgICBzZWxmLmFzc2VydEluKCd0ZXN0LnR4dCcsIG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGRzdF9kaXIsICdsaW5rX3RvX2RpcicpKSkKKworICAgICAgICBkc3RfZGlyID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpLCAnZGVzdGluYXRpb24yJykKKyAgICAgICAgc2h1dGlsLmNvcHl0cmVlKHNyY19kaXIsIGRzdF9kaXIsIHN5bWxpbmtzPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzbGluayhvcy5wYXRoLmpvaW4oZHN0X2RpciwgJ2xpbmtfdG9fZGlyJykpKQorICAgICAgICBzZWxmLmFzc2VydEluKCd0ZXN0LnR4dCcsIG9zLmxpc3RkaXIob3MucGF0aC5qb2luKGRzdF9kaXIsICdsaW5rX3RvX2RpcicpKSkKKwogICAgIGRlZiBfY29weV9maWxlKHNlbGYsIG1ldGhvZCk6CiAgICAgICAgIGZuYW1lID0gJ3Rlc3QudHh0JwogICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQpAQCAtOTE0LDEzOSArOTYxLDE2NiBAQAogICAgIEByZXF1aXJlc196bGliCiAgICAgZGVmIHRlc3RfbWFrZV90YXJiYWxsKHNlbGYpOgogICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB0YXIKLSAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgd3JpdGVfZmlsZSgodG1wZGlyLCAnZmlsZTEnKSwgJ3h4eCcpCi0gICAgICAgIHdyaXRlX2ZpbGUoKHRtcGRpciwgJ2ZpbGUyJyksICd4eHgnKQotICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4odG1wZGlyLCAnc3ViJykpCi0gICAgICAgIHdyaXRlX2ZpbGUoKHRtcGRpciwgJ3N1YicsICdmaWxlMycpLCAneHh4JykKKyAgICAgICAgcm9vdF9kaXIsIGJhc2VfZGlyID0gc2VsZi5fY3JlYXRlX2ZpbGVzKCcnKQogCiAgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICAjIGZvcmNlIHNodXRpbCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeQogICAgICAgICBvcy5ybWRpcih0bXBkaXIyKQotICAgICAgICB1bml0dGVzdC5za2lwVW5sZXNzKHNwbGl0ZHJpdmUodG1wZGlyKVswXSA9PSBzcGxpdGRyaXZlKHRtcGRpcjIpWzBdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb3VyY2UgYW5kIHRhcmdldCBzaG91bGQgYmUgb24gc2FtZSBkcml2ZSIpCisgICAgICAgICMgd29ya2luZyB3aXRoIHJlbGF0aXZlIHBhdGhzCisgICAgICAgIHdvcmtfZGlyID0gb3MucGF0aC5kaXJuYW1lKHRtcGRpcjIpCisgICAgICAgIHJlbF9iYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5iYXNlbmFtZSh0bXBkaXIyKSwgJ2FyY2hpdmUnKQogCi0gICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCi0KLSAgICAgICAgIyB3b3JraW5nIHdpdGggcmVsYXRpdmUgcGF0aHMgdG8gYXZvaWQgdGFyIHdhcm5pbmdzCi0gICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5jaGRpcih0bXBkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoc3BsaXRkcml2ZShiYXNlX25hbWUpWzFdLCAnLicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZCh3b3JrX2Rpcik6CisgICAgICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmFic3BhdGgocmVsX2Jhc2VfbmFtZSkKKyAgICAgICAgICAgIHRhcmJhbGwgPSBtYWtlX2FyY2hpdmUocmVsX2Jhc2VfbmFtZSwgJ2d6dGFyJywgcm9vdF9kaXIsICcuJykKIAogICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKLSAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcudGFyLmd6JwotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyYmFsbCwgYmFzZV9uYW1lICsgJy50YXIuZ3onKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUodGFyYmFsbCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXJmaWxlLmlzX3RhcmZpbGUodGFyYmFsbCkpCisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcmJhbGwsICdyOmd6JykgYXMgdGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwodGYuZ2V0bmFtZXMoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJy4nLCAnLi9zdWInLCAnLi9zdWIyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4vZmlsZTEnLCAnLi9maWxlMicsICcuL3N1Yi9maWxlMyddKQogCiAgICAgICAgICMgdHJ5aW5nIGFuIHVuY29tcHJlc3NlZCBvbmUKLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKLSAgICAgICAgb2xkX2RpciA9IG9zLmdldGN3ZCgpCi0gICAgICAgIG9zLmNoZGlyKHRtcGRpcikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgX21ha2VfdGFyYmFsbChzcGxpdGRyaXZlKGJhc2VfbmFtZSlbMV0sICcuJywgY29tcHJlc3M9Tm9uZSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCi0gICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhcicKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZCh3b3JrX2Rpcik6CisgICAgICAgICAgICB0YXJiYWxsID0gbWFrZV9hcmNoaXZlKHJlbF9iYXNlX25hbWUsICd0YXInLCByb290X2RpciwgJy4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmJhbGwsIGJhc2VfbmFtZSArICcudGFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHRhcmJhbGwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodGFyZmlsZS5pc190YXJmaWxlKHRhcmJhbGwpKQorICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJiYWxsLCAncicpIGFzIHRmOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKHRmLmdldG5hbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWycuJywgJy4vc3ViJywgJy4vc3ViMicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy4vZmlsZTEnLCAnLi9maWxlMicsICcuL3N1Yi9maWxlMyddKQogCiAgICAgZGVmIF90YXJpbmZvKHNlbGYsIHBhdGgpOgotICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4ocGF0aCkKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHRhcmZpbGUub3BlbihwYXRoKSBhcyB0YXI6CiAgICAgICAgICAgICBuYW1lcyA9IHRhci5nZXRuYW1lcygpCiAgICAgICAgICAgICBuYW1lcy5zb3J0KCkKICAgICAgICAgICAgIHJldHVybiB0dXBsZShuYW1lcykKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHRhci5jbG9zZSgpCiAKLSAgICBkZWYgX2NyZWF0ZV9maWxlcyhzZWxmKToKKyAgICBkZWYgX2NyZWF0ZV9maWxlcyhzZWxmLCBiYXNlX2Rpcj0nZGlzdCcpOgogICAgICAgICAjIGNyZWF0aW5nIHNvbWV0aGluZyB0byB0YXIKLSAgICAgICAgdG1wZGlyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgZGlzdCA9IG9zLnBhdGguam9pbih0bXBkaXIsICdkaXN0JykKLSAgICAgICAgb3MubWtkaXIoZGlzdCkKKyAgICAgICAgcm9vdF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBkaXN0ID0gb3MucGF0aC5qb2luKHJvb3RfZGlyLCBiYXNlX2RpcikKKyAgICAgICAgb3MubWFrZWRpcnMoZGlzdCwgZXhpc3Rfb2s9VHJ1ZSkKICAgICAgICAgd3JpdGVfZmlsZSgoZGlzdCwgJ2ZpbGUxJyksICd4eHgnKQogICAgICAgICB3cml0ZV9maWxlKChkaXN0LCAnZmlsZTInKSwgJ3h4eCcpCiAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihkaXN0LCAnc3ViJykpCiAgICAgICAgIHdyaXRlX2ZpbGUoKGRpc3QsICdzdWInLCAnZmlsZTMnKSwgJ3h4eCcpCiAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihkaXN0LCAnc3ViMicpKQotICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHRtcGRpcjIsICdhcmNoaXZlJykKLSAgICAgICAgcmV0dXJuIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lCisgICAgICAgIGlmIGJhc2VfZGlyOgorICAgICAgICAgICAgd3JpdGVfZmlsZSgocm9vdF9kaXIsICdvdXRlcicpLCAneHh4JykKKyAgICAgICAgcmV0dXJuIHJvb3RfZGlyLCBiYXNlX2RpcgogCiAgICAgQHJlcXVpcmVzX3psaWIKLSAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhmaW5kX2V4ZWN1dGFibGUoJ3RhcicpIGFuZCBmaW5kX2V4ZWN1dGFibGUoJ2d6aXAnKSwKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzaHV0aWwud2hpY2goJ3RhcicpLAogICAgICAgICAgICAgICAgICAgICAgICAgICdOZWVkIHRoZSB0YXIgY29tbWFuZCB0byBydW4nKQogICAgIGRlZiB0ZXN0X3RhcmZpbGVfdnNfdGFyKHNlbGYpOgotICAgICAgICB0bXBkaXIsIHRtcGRpcjIsIGJhc2VfbmFtZSA9ICBzZWxmLl9jcmVhdGVfZmlsZXMoKQotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MuY2hkaXIob2xkX2RpcikKKyAgICAgICAgcm9vdF9kaXIsIGJhc2VfZGlyID0gc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpLCAnYXJjaGl2ZScpCisgICAgICAgIHRhcmJhbGwgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnZ3p0YXInLCByb290X2RpciwgYmFzZV9kaXIpCiAKICAgICAgICAgIyBjaGVjayBpZiB0aGUgY29tcHJlc3NlZCB0YXJiYWxsIHdhcyBjcmVhdGVkCi0gICAgICAgIHRhcmJhbGwgPSBiYXNlX25hbWUgKyAnLnRhci5neicKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmJhbGwsIGJhc2VfbmFtZSArICcudGFyLmd6JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHRhcmJhbGwpKQogCiAgICAgICAgICMgbm93IGNyZWF0ZSBhbm90aGVyIHRhcmJhbGwgdXNpbmcgYHRhcmAKLSAgICAgICAgdGFyYmFsbDIgPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnYXJjaGl2ZTIudGFyLmd6JykKLSAgICAgICAgdGFyX2NtZCA9IFsndGFyJywgJy1jZicsICdhcmNoaXZlMi50YXInLCAnZGlzdCddCi0gICAgICAgIGd6aXBfY21kID0gWydnemlwJywgJy1mOScsICdhcmNoaXZlMi50YXInXQotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHM6Ci0gICAgICAgICAgICAgICAgc3Bhd24odGFyX2NtZCkKLSAgICAgICAgICAgICAgICBzcGF3bihnemlwX2NtZCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKG9sZF9kaXIpCisgICAgICAgIHRhcmJhbGwyID0gb3MucGF0aC5qb2luKHJvb3RfZGlyLCAnYXJjaGl2ZTIudGFyJykKKyAgICAgICAgdGFyX2NtZCA9IFsndGFyJywgJy1jZicsICdhcmNoaXZlMi50YXInLCBiYXNlX2Rpcl0KKyAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKHRhcl9jbWQsIGN3ZD1yb290X2RpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHRhcmJhbGwyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHRhcmJhbGwyKSkKICAgICAgICAgIyBsZXQncyBjb21wYXJlIGJvdGggdGFyYmFsbHMKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl90YXJpbmZvKHRhcmJhbGwpLCBzZWxmLl90YXJpbmZvKHRhcmJhbGwyKSkKIAogICAgICAgICAjIHRyeWluZyBhbiB1bmNvbXByZXNzZWQgb25lCi0gICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbih0bXBkaXIyLCAnYXJjaGl2ZScpCi0gICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5jaGRpcih0bXBkaXIpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIF9tYWtlX3RhcmJhbGwoYmFzZV9uYW1lLCAnZGlzdCcsIGNvbXByZXNzPU5vbmUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQotICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXInCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKyAgICAgICAgdGFyYmFsbCA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyYmFsbCwgYmFzZV9uYW1lICsgJy50YXInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUodGFyYmFsbCkpCiAKICAgICAgICAgIyBub3cgZm9yIGEgZHJ5X3J1bgotICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQotICAgICAgICBvbGRfZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIodG1wZGlyKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLCBkcnlfcnVuPVRydWUpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQotICAgICAgICB0YXJiYWxsID0gYmFzZV9uYW1lICsgJy50YXInCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyh0YXJiYWxsKSkKKyAgICAgICAgdGFyYmFsbCA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd0YXInLCByb290X2RpciwgYmFzZV9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJ5X3J1bj1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmJhbGwsIGJhc2VfbmFtZSArICcudGFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHRhcmJhbGwpKQogCiAgICAgQHJlcXVpcmVzX3psaWIKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhaSVBfU1VQUE9SVCwgJ05lZWQgemlwIHN1cHBvcnQgdG8gcnVuJykKICAgICBkZWYgdGVzdF9tYWtlX3ppcGZpbGUoc2VsZik6Ci0gICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHRhcgotICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICB3cml0ZV9maWxlKCh0bXBkaXIsICdmaWxlMScpLCAneHh4JykKLSAgICAgICAgd3JpdGVfZmlsZSgodG1wZGlyLCAnZmlsZTInKSwgJ3h4eCcpCisgICAgICAgICMgY3JlYXRpbmcgc29tZXRoaW5nIHRvIHppcAorICAgICAgICByb290X2RpciwgYmFzZV9kaXIgPSBzZWxmLl9jcmVhdGVfZmlsZXMoKQogCiAgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICAjIGZvcmNlIHNodXRpbCB0byBjcmVhdGUgdGhlIGRpcmVjdG9yeQogICAgICAgICBvcy5ybWRpcih0bXBkaXIyKQotICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4odG1wZGlyMiwgJ2FyY2hpdmUnKQotICAgICAgICBfbWFrZV96aXBmaWxlKGJhc2VfbmFtZSwgdG1wZGlyKQorICAgICAgICAjIHdvcmtpbmcgd2l0aCByZWxhdGl2ZSBwYXRocworICAgICAgICB3b3JrX2RpciA9IG9zLnBhdGguZGlybmFtZSh0bXBkaXIyKQorICAgICAgICByZWxfYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKG9zLnBhdGguYmFzZW5hbWUodG1wZGlyMiksICdhcmNoaXZlJykKIAotICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKLSAgICAgICAgdGFyYmFsbCA9IGJhc2VfbmFtZSArICcuemlwJwotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHModGFyYmFsbCkpCisgICAgICAgIHdpdGggc3VwcG9ydC5jaGFuZ2VfY3dkKHdvcmtfZGlyKToKKyAgICAgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguYWJzcGF0aChyZWxfYmFzZV9uYW1lKQorICAgICAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKHJlbF9iYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIpCiAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIGJhc2VfbmFtZSArICcuemlwJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmaWxlLmlzX3ppcGZpbGUocmVzKSkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUocmVzKSBhcyB6ZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q291bnRFcXVhbCh6Zi5uYW1lbGlzdCgpLAorICAgICAgICAgICAgICAgICAgICBbJ2Rpc3QvJywgJ2Rpc3Qvc3ViLycsICdkaXN0L3N1YjIvJywKKyAgICAgICAgICAgICAgICAgICAgICdkaXN0L2ZpbGUxJywgJ2Rpc3QvZmlsZTInLCAnZGlzdC9zdWIvZmlsZTMnXSkKKworICAgIEByZXF1aXJlc196bGliCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoWklQX1NVUFBPUlQsICdOZWVkIHppcCBzdXBwb3J0IHRvIHJ1bicpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc2h1dGlsLndoaWNoKCd6aXAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnTmVlZCB0aGUgemlwIGNvbW1hbmQgdG8gcnVuJykKKyAgICBkZWYgdGVzdF96aXBmaWxlX3ZzX3ppcChzZWxmKToKKyAgICAgICAgcm9vdF9kaXIsIGJhc2VfZGlyID0gc2VsZi5fY3JlYXRlX2ZpbGVzKCkKKyAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpLCAnYXJjaGl2ZScpCisgICAgICAgIGFyY2hpdmUgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnemlwJywgcm9vdF9kaXIsIGJhc2VfZGlyKQorCisgICAgICAgICMgY2hlY2sgaWYgWklQIGZpbGUgIHdhcyBjcmVhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJjaGl2ZSwgYmFzZV9uYW1lICsgJy56aXAnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoYXJjaGl2ZSkpCisKKyAgICAgICAgIyBub3cgY3JlYXRlIGFub3RoZXIgWklQIGZpbGUgdXNpbmcgYHppcGAKKyAgICAgICAgYXJjaGl2ZTIgPSBvcy5wYXRoLmpvaW4ocm9vdF9kaXIsICdhcmNoaXZlMi56aXAnKQorICAgICAgICB6aXBfY21kID0gWyd6aXAnLCAnLXEnLCAnLXInLCAnYXJjaGl2ZTIuemlwJywgYmFzZV9kaXJdCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCh6aXBfY21kLCBjd2Q9cm9vdF9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5ERVZOVUxMKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShhcmNoaXZlMikpCisgICAgICAgICMgbGV0J3MgY29tcGFyZSBib3RoIFpJUCBmaWxlcworICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShhcmNoaXZlKSBhcyB6ZjoKKyAgICAgICAgICAgIG5hbWVzID0gemYubmFtZWxpc3QoKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShhcmNoaXZlMikgYXMgemY6CisgICAgICAgICAgICBuYW1lczIgPSB6Zi5uYW1lbGlzdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKG5hbWVzKSwgc29ydGVkKG5hbWVzMikpCisKKyAgICBAcmVxdWlyZXNfemxpYgorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKFpJUF9TVVBQT1JULCAnTmVlZCB6aXAgc3VwcG9ydCB0byBydW4nKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHNodXRpbC53aGljaCgndW56aXAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnTmVlZCB0aGUgdW56aXAgY29tbWFuZCB0byBydW4nKQorICAgIGRlZiB0ZXN0X3VuemlwX3ppcGZpbGUoc2VsZik6CisgICAgICAgIHJvb3RfZGlyLCBiYXNlX2RpciA9IHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2FyY2hpdmUnKQorICAgICAgICBhcmNoaXZlID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2RpcikKKworICAgICAgICAjIGNoZWNrIGlmIFpJUCBmaWxlICB3YXMgY3JlYXRlZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyY2hpdmUsIGJhc2VfbmFtZSArICcuemlwJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKGFyY2hpdmUpKQorCisgICAgICAgICMgbm93IGNoZWNrIHRoZSBaSVAgZmlsZSB1c2luZyBgdW56aXAgLXRgCisgICAgICAgIHppcF9jbWQgPSBbJ3VuemlwJywgJy10JywgYXJjaGl2ZV0KKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2Qocm9vdF9kaXIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KHppcF9jbWQsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgZGV0YWlscyA9IGV4Yy5vdXRwdXQuZGVjb2RlKGVycm9ycz0icmVwbGFjZSIpCisgICAgICAgICAgICAgICAgbXNnID0gInt9XG5cbioqVW56aXAgT3V0cHV0Kipcbnt9IgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbChtc2cuZm9ybWF0KGV4YywgZGV0YWlscykpCiAKICAgICBkZWYgdGVzdF9tYWtlX2FyY2hpdmUoc2VsZik6CiAgICAgICAgIHRtcGRpciA9IHNlbGYubWtkdGVtcCgpCkBAIC0xMDYzLDQwICsxMTM3LDM3IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBncm91cCA9IG93bmVyID0gJ3Jvb3QnCiAKLSAgICAgICAgYmFzZV9kaXIsIHJvb3RfZGlyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKLSAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpICwgJ2FyY2hpdmUnKQorICAgICAgICByb290X2RpciwgYmFzZV9kaXIgPSBzZWxmLl9jcmVhdGVfZmlsZXMoKQorICAgICAgICBiYXNlX25hbWUgPSBvcy5wYXRoLmpvaW4oc2VsZi5ta2R0ZW1wKCksICdhcmNoaXZlJykKICAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3ppcCcsIHJvb3RfZGlyLCBiYXNlX2Rpciwgb3duZXI9b3duZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cD1ncm91cCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHJlcykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShyZXMpKQogCiAgICAgICAgIHJlcyA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsICd6aXAnLCByb290X2RpciwgYmFzZV9kaXIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVzKSkKIAogICAgICAgICByZXMgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAndGFyJywgcm9vdF9kaXIsIGJhc2VfZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3duZXI9b3duZXIsIGdyb3VwPWdyb3VwKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocmVzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguaXNmaWxlKHJlcykpCiAKICAgICAgICAgcmVzID0gbWFrZV9hcmNoaXZlKGJhc2VfbmFtZSwgJ3RhcicsIHJvb3RfZGlyLCBiYXNlX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPSdramhramhramcnLCBncm91cD0nb2lob2hvaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhyZXMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUocmVzKSkKIAogCiAgICAgQHJlcXVpcmVzX3psaWIKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhVSURfR0lEX1NVUFBPUlQsICJSZXF1aXJlcyBncnAgYW5kIHB3ZCBzdXBwb3J0IikKICAgICBkZWYgdGVzdF90YXJmaWxlX3Jvb3Rfb3duZXIoc2VsZik6Ci0gICAgICAgIHRtcGRpciwgdG1wZGlyMiwgYmFzZV9uYW1lID0gIHNlbGYuX2NyZWF0ZV9maWxlcygpCi0gICAgICAgIG9sZF9kaXIgPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5jaGRpcih0bXBkaXIpCisgICAgICAgIHJvb3RfZGlyLCBiYXNlX2RpciA9IHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGJhc2VfbmFtZSA9IG9zLnBhdGguam9pbihzZWxmLm1rZHRlbXAoKSwgJ2FyY2hpdmUnKQogICAgICAgICBncm91cCA9IGdycC5nZXRncmdpZCgwKVswXQogICAgICAgICBvd25lciA9IHB3ZC5nZXRwd3VpZCgwKVswXQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBhcmNoaXZlX25hbWUgPSBfbWFrZV90YXJiYWxsKGJhc2VfbmFtZSwgJ2Rpc3QnLCBjb21wcmVzcz1Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lcj1vd25lciwgZ3JvdXA9Z3JvdXApCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihvbGRfZGlyKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChyb290X2Rpcik6CisgICAgICAgICAgICBhcmNoaXZlX25hbWUgPSBtYWtlX2FyY2hpdmUoYmFzZV9uYW1lLCAnZ3p0YXInLCByb290X2RpciwgJ2Rpc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyPW93bmVyLCBncm91cD1ncm91cCkKIAogICAgICAgICAjIGNoZWNrIGlmIHRoZSBjb21wcmVzc2VkIHRhcmJhbGwgd2FzIGNyZWF0ZWQKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGFyY2hpdmVfbmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZShhcmNoaXZlX25hbWUpKQogCiAgICAgICAgICMgbm93IGNoZWNrcyB0aGUgcmlnaHRzCiAgICAgICAgIGFyY2hpdmUgPSB0YXJmaWxlLm9wZW4oYXJjaGl2ZV9uYW1lKQpAQCAtMTEyMiw2ICsxMTkzLDIxIEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB1bnJlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KCd4eHgnKQogCisgICAgZGVmIHRlc3RfbWFrZV90YXJmaWxlX2luX2N1cmRpcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjEyODAKKyAgICAgICAgcm9vdF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChyb290X2Rpcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ha2VfYXJjaGl2ZSgndGVzdCcsICd0YXInKSwgJ3Rlc3QudGFyJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZSgndGVzdC50YXInKSkKKworICAgIEByZXF1aXJlc196bGliCisgICAgZGVmIHRlc3RfbWFrZV96aXBmaWxlX2luX2N1cmRpcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjEyODAKKyAgICAgICAgcm9vdF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChyb290X2Rpcik6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1ha2VfYXJjaGl2ZSgndGVzdCcsICd6aXAnKSwgJ3Rlc3QuemlwJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZmlsZSgndGVzdC56aXAnKSkKKwogICAgIGRlZiB0ZXN0X3JlZ2lzdGVyX2FyY2hpdmVfZm9ybWF0KHNlbGYpOgogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQsICd4eHgnLCAxKQpAQCAtMTEzOCw0MCArMTIyNCwyOCBAQAogICAgICAgICBmb3JtYXRzID0gW25hbWUgZm9yIG5hbWUsIHBhcmFtcyBpbiBnZXRfYXJjaGl2ZV9mb3JtYXRzKCldCiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3h4eCcsIGZvcm1hdHMpCiAKLSAgICBkZWYgX2NvbXBhcmVfZGlycyhzZWxmLCBkaXIxLCBkaXIyKToKLSAgICAgICAgIyBjaGVjayB0aGF0IGRpcjEgYW5kIGRpcjIgYXJlIGVxdWl2YWxlbnQsCi0gICAgICAgICMgcmV0dXJuIHRoZSBkaWZmCi0gICAgICAgIGRpZmYgPSBbXQotICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhkaXIxKToKLSAgICAgICAgICAgIGZvciBmaWxlXyBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKHJvb3QsIGZpbGVfKQotICAgICAgICAgICAgICAgIHRhcmdldF9wYXRoID0gb3MucGF0aC5qb2luKGRpcjIsIG9zLnBhdGguc3BsaXQocGF0aClbLTFdKQotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0YXJnZXRfcGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIGRpZmYuYXBwZW5kKGZpbGVfKQotICAgICAgICByZXR1cm4gZGlmZgotCiAgICAgQHJlcXVpcmVzX3psaWIKICAgICBkZWYgdGVzdF91bnBhY2tfYXJjaGl2ZShzZWxmKToKICAgICAgICAgZm9ybWF0cyA9IFsndGFyJywgJ2d6dGFyJywgJ3ppcCddCiAgICAgICAgIGlmIEJaMl9TVVBQT1JURUQ6CiAgICAgICAgICAgICBmb3JtYXRzLmFwcGVuZCgnYnp0YXInKQogCisgICAgICAgIHJvb3RfZGlyLCBiYXNlX2RpciA9IHNlbGYuX2NyZWF0ZV9maWxlcygpCisgICAgICAgIGV4cGVjdGVkID0gcmxpc3RkaXIocm9vdF9kaXIpCisgICAgICAgIGV4cGVjdGVkLnJlbW92ZSgnb3V0ZXInKQogICAgICAgICBmb3IgZm9ybWF0IGluIGZvcm1hdHM6Ci0gICAgICAgICAgICB0bXBkaXIgPSBzZWxmLm1rZHRlbXAoKQotICAgICAgICAgICAgYmFzZV9kaXIsIHJvb3RfZGlyLCBiYXNlX25hbWUgPSAgc2VsZi5fY3JlYXRlX2ZpbGVzKCkKLSAgICAgICAgICAgIHRtcGRpcjIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICAgICAgYmFzZV9uYW1lID0gb3MucGF0aC5qb2luKHNlbGYubWtkdGVtcCgpLCAnYXJjaGl2ZScpCiAgICAgICAgICAgICBmaWxlbmFtZSA9IG1ha2VfYXJjaGl2ZShiYXNlX25hbWUsIGZvcm1hdCwgcm9vdF9kaXIsIGJhc2VfZGlyKQogCiAgICAgICAgICAgICAjIGxldCdzIHRyeSB0byB1bnBhY2sgaXQgbm93CisgICAgICAgICAgICB0bXBkaXIyID0gc2VsZi5ta2R0ZW1wKCkKICAgICAgICAgICAgIHVucGFja19hcmNoaXZlKGZpbGVuYW1lLCB0bXBkaXIyKQotICAgICAgICAgICAgZGlmZiA9IHNlbGYuX2NvbXBhcmVfZGlycyh0bXBkaXIsIHRtcGRpcjIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpZmYsIFtdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChybGlzdGRpcih0bXBkaXIyKSwgZXhwZWN0ZWQpCiAKICAgICAgICAgICAgICMgYW5kIGFnYWluLCB0aGlzIHRpbWUgd2l0aCB0aGUgZm9ybWF0IHNwZWNpZmllZAogICAgICAgICAgICAgdG1wZGlyMyA9IHNlbGYubWtkdGVtcCgpCiAgICAgICAgICAgICB1bnBhY2tfYXJjaGl2ZShmaWxlbmFtZSwgdG1wZGlyMywgZm9ybWF0PWZvcm1hdCkKLSAgICAgICAgICAgIGRpZmYgPSBzZWxmLl9jb21wYXJlX2RpcnModG1wZGlyLCB0bXBkaXIzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLCBbXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmxpc3RkaXIodG1wZGlyMyksIGV4cGVjdGVkKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzaHV0aWwuUmVhZEVycm9yLCB1bnBhY2tfYXJjaGl2ZSwgVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1bnBhY2tfYXJjaGl2ZSwgVEVTVEZOLCBmb3JtYXQ9J3h4eCcpCiAKQEAgLTEyOTMsNiArMTM2NywxNiBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMocnYpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfZmlsZShzcmNfZmlsZSksIHJlYWRfZmlsZShkc3RfZmlsZSkpCiAKKyAgICBkZWYgdGVzdF9jb3B5ZmlsZV9zYW1lX2ZpbGUoc2VsZik6CisgICAgICAgICMgY29weWZpbGUoKSBzaG91bGQgcmFpc2UgU2FtZUZpbGVFcnJvciBpZiB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbgorICAgICAgICAjIGFyZSB0aGUgc2FtZS4KKyAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNyY19maWxlID0gb3MucGF0aC5qb2luKHNyY19kaXIsICdmb28nKQorICAgICAgICB3cml0ZV9maWxlKHNyY19maWxlLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU2FtZUZpbGVFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmNfZmlsZSwgc3JjX2ZpbGUpCisgICAgICAgICMgQnV0IEVycm9yIHNob3VsZCB3b3JrIHRvbywgdG8gc3RheSBiYWNrd2FyZCBjb21wYXRpYmxlLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCBzcmNfZmlsZSwgc3JjX2ZpbGUpCisKICAgICBkZWYgdGVzdF9jb3B5dHJlZV9yZXR1cm5fdmFsdWUoc2VsZik6CiAgICAgICAgICMgY29weXRyZWUgcmV0dXJucyBpdHMgZGVzdGluYXRpb24gcGF0aC4KICAgICAgICAgc3JjX2RpciA9IHNlbGYubWtkdGVtcCgpCkBAIC0xNjAxLDcgKzE2ODUsNyBAQAogICAgICAgICAgICAgc2VsZi5fZXhpdGVkX3dpdGggPSBleGNfdHlwZSwgZXhjX3ZhbCwgZXhjX3RiCiAgICAgICAgICAgICBpZiBzZWxmLl9yYWlzZV9pbl9leGl0OgogICAgICAgICAgICAgICAgIHNlbGYuX3JhaXNlZCA9IFRydWUKLSAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJDYW5ub3QgY2xvc2UiKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoIkNhbm5vdCBjbG9zZSIpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc3VwcHJlc3NfYXRfZXhpdAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgpAQCAtMTYxNSwxMiArMTY5OSwxMiBAQAogICAgIGRlZiB0ZXN0X3dfc291cmNlX29wZW5fZmFpbHMoc2VsZik6CiAgICAgICAgIGRlZiBfb3BlbihmaWxlbmFtZSwgbW9kZT0ncicpOgogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ3NyY2ZpbGUnOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0Nhbm5vdCBvcGVuICJzcmNmaWxlIicpCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcignQ2Fubm90IG9wZW4gInNyY2ZpbGUiJykKICAgICAgICAgICAgIGFzc2VydCAwICAjIHNob3VsZG4ndCByZWFjaCBoZXJlLgogCiAgICAgICAgIHNlbGYuX3NldF9zaHV0aWxfb3Blbihfb3BlbikKIAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJT0Vycm9yLCBzaHV0aWwuY29weWZpbGUsICdzcmNmaWxlJywgJ2Rlc3RmaWxlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCiAKICAgICBkZWYgdGVzdF93X2Rlc3Rfb3Blbl9mYWlscyhzZWxmKToKIApAQCAtMTYzMCwxNCArMTcxNCwxNCBAQAogICAgICAgICAgICAgaWYgZmlsZW5hbWUgPT0gJ3NyY2ZpbGUnOgogICAgICAgICAgICAgICAgIHJldHVybiBzcmNmaWxlCiAgICAgICAgICAgICBpZiBmaWxlbmFtZSA9PSAnZGVzdGZpbGUnOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInKQorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInKQogICAgICAgICAgICAgYXNzZXJ0IDAgICMgc2hvdWxkbid0IHJlYWNoIGhlcmUuCiAKICAgICAgICAgc2VsZi5fc2V0X3NodXRpbF9vcGVuKF9vcGVuKQogCiAgICAgICAgIHNodXRpbC5jb3B5ZmlsZSgnc3JjZmlsZScsICdkZXN0ZmlsZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgSU9FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIE9TRXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMV0uYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Nhbm5vdCBvcGVuICJkZXN0ZmlsZSInLCkpCiAKQEAgLTE2NTksNyArMTc0Myw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX2VudGVyZWQpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZXN0ZmlsZS5fcmFpc2VkKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMF0gaXMgSU9FcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNyY2ZpbGUuX2V4aXRlZF93aXRoWzBdIGlzIE9TRXJyb3IpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZmlsZS5fZXhpdGVkX3dpdGhbMV0uYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0Nhbm5vdCBjbG9zZScsKSkKIApAQCAtMTY3Nyw3ICsxNzYxLDcgQEAKIAogICAgICAgICBzZWxmLl9zZXRfc2h1dGlsX29wZW4oX29wZW4pCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlLCAnc3JjZmlsZScsICdkZXN0ZmlsZScpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzcmNmaWxlLl9lbnRlcmVkKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoZGVzdGZpbGUuX2VudGVyZWQpCkBAIC0xNzQ4LDkgKzE4MzIsMjMgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0U2h1dGlsLCBUZXN0TW92ZSwgVGVzdENvcHlGaWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1zaXplVGVzdHMsIFRlc3RXaGljaCkKK2NsYXNzIFB1YmxpY0FQSVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJFbnN1cmVzIHRoYXQgdGhlIGNvcnJlY3QgdmFsdWVzIGFyZSBleHBvc2VkIGluIHRoZSBwdWJsaWMgQVBJLiIiIgorCisgICAgZGVmIHRlc3RfbW9kdWxlX2FsbF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNodXRpbCwgJ19fYWxsX18nKSkKKyAgICAgICAgdGFyZ2V0X2FwaSA9IFsnY29weWZpbGVvYmonLCAnY29weWZpbGUnLCAnY29weW1vZGUnLCAnY29weXN0YXQnLAorICAgICAgICAgICAgICAgICAgICAgICdjb3B5JywgJ2NvcHkyJywgJ2NvcHl0cmVlJywgJ21vdmUnLCAncm10cmVlJywgJ0Vycm9yJywKKyAgICAgICAgICAgICAgICAgICAgICAnU3BlY2lhbEZpbGVFcnJvcicsICdFeGVjRXJyb3InLCAnbWFrZV9hcmNoaXZlJywKKyAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2FyY2hpdmVfZm9ybWF0cycsICdyZWdpc3Rlcl9hcmNoaXZlX2Zvcm1hdCcsCisgICAgICAgICAgICAgICAgICAgICAgJ3VucmVnaXN0ZXJfYXJjaGl2ZV9mb3JtYXQnLCAnZ2V0X3VucGFja19mb3JtYXRzJywKKyAgICAgICAgICAgICAgICAgICAgICAncmVnaXN0ZXJfdW5wYWNrX2Zvcm1hdCcsICd1bnJlZ2lzdGVyX3VucGFja19mb3JtYXQnLAorICAgICAgICAgICAgICAgICAgICAgICd1bnBhY2tfYXJjaGl2ZScsICdpZ25vcmVfcGF0dGVybnMnLCAnY2hvd24nLCAnd2hpY2gnLAorICAgICAgICAgICAgICAgICAgICAgICdnZXRfdGVybWluYWxfc2l6ZScsICdTYW1lRmlsZUVycm9yJ10KKyAgICAgICAgaWYgaGFzYXR0cihvcywgJ3N0YXR2ZnMnKSBvciBvcy5uYW1lID09ICdudCc6CisgICAgICAgICAgICB0YXJnZXRfYXBpLmFwcGVuZCgnZGlza191c2FnZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KHNodXRpbC5fX2FsbF9fKSwgc2V0KHRhcmdldF9hcGkpKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2lnbmFsLnB5IGIvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkKaW5kZXggMTkxZDRjZi4uNzRmNzRhZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zaWduYWwucHkKQEAgLTE1LDkgKzE1LDYgQEAKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCiAKLWlmIHN5cy5wbGF0Zm9ybSBpbiAoJ29zMicsICdyaXNjb3MnKToKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2FuJ3QgdGVzdCBzaWduYWwgb24gJXMiICUgc3lzLnBsYXRmb3JtKQotCiAKIGNsYXNzIEhhbmRsZXJCQ2FsbGVkKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpAQCAtMzYsNyArMzMsNyBAQAogZGVmIGlnbm9yaW5nX2VpbnRyKF9fZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBfX2Z1bmMoKmFyZ3MsICoqa3dhcmdzKQotICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yIGFzIGU6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FSU5UUjoKICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgIHJldHVybiBOb25lCkBAIC0yNzgsNiArMjc1LDU3IEBACiAKICAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlKQogCisgICAgZGVmIHRlc3Rfd2FrZXVwX3dyaXRlX2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNjEwNTogd3JpdGUoKSBlcnJvcnMgaW4gdGhlIEMgc2lnbmFsIGhhbmRsZXIgc2hvdWxkIG5vdAorICAgICAgICAjIHBhc3Mgc2lsZW50bHkuCisgICAgICAgICMgVXNlIGEgc3VicHJvY2VzcyB0byBoYXZlIG9ubHkgb25lIHRocmVhZC4KKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgIGltcG9ydCBlcnJubworICAgICAgICBpbXBvcnQgZmNudGwKKyAgICAgICAgaW1wb3J0IG9zCisgICAgICAgIGltcG9ydCBzaWduYWwKKyAgICAgICAgaW1wb3J0IHN5cworICAgICAgICBpbXBvcnQgdGltZQorICAgICAgICBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3RkZXJyCisKKyAgICAgICAgZGVmIGhhbmRsZXIoc2lnbnVtLCBmcmFtZSk6CisgICAgICAgICAgICAxLzAKKworICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdBTFJNLCBoYW5kbGVyKQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIGZsYWdzID0gZmNudGwuZmNudGwociwgZmNudGwuRl9HRVRGTCwgMCkKKyAgICAgICAgZmNudGwuZmNudGwociwgZmNudGwuRl9TRVRGTCwgZmxhZ3MgfCBvcy5PX05PTkJMT0NLKQorCisgICAgICAgICMgU2V0IHdha2V1cF9mZCBhIHJlYWQtb25seSBmaWxlIGRlc2NyaXB0b3IgdG8gdHJpZ2dlciB0aGUgZXJyb3IKKyAgICAgICAgc2lnbmFsLnNldF93YWtldXBfZmQocikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9zdGRlcnIoKSBhcyBlcnI6CisgICAgICAgICAgICAgICAgc2lnbmFsLmFsYXJtKDEpCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCg1LjApCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgICMgQW4gaWdub3JlZCBleGNlcHRpb24gc2hvdWxkIGhhdmUgYmVlbiBwcmludGVkIG91dCBvbiBzdGRlcnIKKyAgICAgICAgICAgIGVyciA9IGVyci5nZXR2YWx1ZSgpCisgICAgICAgICAgICBpZiAoJ0V4Y2VwdGlvbiBpZ25vcmVkIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRvIHRoZSBzaWduYWwgd2FrZXVwIGZkJworICAgICAgICAgICAgICAgIG5vdCBpbiBlcnIpOgorICAgICAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKGVycikKKyAgICAgICAgICAgIGlmICgnT1NFcnJvcjogW0Vycm5vICVkXScgJSBlcnJuby5FQkFERikgbm90IGluIGVycjoKKyAgICAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihlcnIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigiWmVyb0RpdmlzaW9uRXJyb3Igbm90IHJhaXNlZCIpCisgICAgICAgICIiIgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG9zLndyaXRlKHIsIGIneCcpCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiT1MgZG9lc24ndCByZXBvcnQgd3JpdGUoKSBlcnJvciBvbiB0aGUgcmVhZCBlbmQgb2YgYSBwaXBlIikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIG9zLmNsb3NlKHIpCisgICAgICAgICAgICBvcy5jbG9zZSh3KQorCisgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKwogICAgIGRlZiB0ZXN0X3dha2V1cF9mZF9lYXJseShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja193YWtldXAoIiIiZGVmIHRlc3QoKToKICAgICAgICAgICAgIGltcG9ydCBzZWxlY3QKQEAgLTMxNSwxMCArMzYzLDEwIEBACiAgICAgICAgICAgICAjIFdlIGF0dGVtcHQgdG8gZ2V0IGEgc2lnbmFsIGR1cmluZyB0aGUgc2VsZWN0IGNhbGwKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzZWxlY3Quc2VsZWN0KFtyZWFkXSwgW10sIFtdLCBUSU1FT1VUX0ZVTEwpCi0gICAgICAgICAgICBleGNlcHQgc2VsZWN0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oInNlbGVjdC5lcnJvciBub3QgcmFpc2VkIikKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIk9TRXJyb3Igbm90IHJhaXNlZCIpCiAgICAgICAgICAgICBhZnRlcl90aW1lID0gdGltZS50aW1lKCkKICAgICAgICAgICAgIGR0ID0gYWZ0ZXJfdGltZSAtIGJlZm9yZV90aW1lCiAgICAgICAgICAgICBpZiBkdCA+PSBUSU1FT1VUX0hBTEY6CkBAIC00MDYsNyArNDU0LDcgQEAKICAgICAgICAgICAgICAgICBzdGRvdXQgPSBmaXJzdF9saW5lICsgc3Rkb3V0CiAgICAgICAgICAgICAgICAgZXhpdGNvZGUgPSBwcm9jZXNzLndhaXQoKQogICAgICAgICAgICAgICAgIGlmIGV4aXRjb2RlIG5vdCBpbiAoMiwgMyk6Ci0gICAgICAgICAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiQ2hpbGQgZXJyb3IgKGV4aXQgY29kZSAlcyk6ICVzIgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNoaWxkIGVycm9yIChleGl0IGNvZGUgJXMpOiAlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGV4aXRjb2RlLCBzdGRvdXQpKQogICAgICAgICAgICAgICAgIHJldHVybiAoZXhpdGNvZGUgPT0gMykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zaXRlLnB5IGIvTGliL3Rlc3QvdGVzdF9zaXRlLnB5CmluZGV4IGYzYmQxNjguLmY3MWNmNzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2l0ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NpdGUucHkKQEAgLTIzMCwxMSArMjMwLDcgQEAKICAgICAgICAgc2l0ZS5QUkVGSVhFUyA9IFsneG94byddCiAgICAgICAgIGRpcnMgPSBzaXRlLmdldHNpdGVwYWNrYWdlcygpCiAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnb3MyZW14JywgJ3Jpc2NvcycpOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGlycyksIDEpCi0gICAgICAgICAgICB3YW50ZWQgPSBvcy5wYXRoLmpvaW4oJ3hveG8nLCAnTGliJywgJ3NpdGUtcGFja2FnZXMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXJzWzBdLCB3YW50ZWQpCi0gICAgICAgIGVsaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiBhbmQKICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcigiUFlUSE9ORlJBTUVXT1JLIikpOgogICAgICAgICAgICAgIyBPUyBYIGZyYW1ld29yayBidWlsZHMKICAgICAgICAgICAgIHNpdGUuUFJFRklYRVMgPSBbJ1B5dGhvbi5mcmFtZXdvcmsnXQpAQCAtNDE2LDggKzQxMiwxMSBAQAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2l0ZWN1c3RvbWl6ZSBub3QgaW1wb3J0ZWQgYXV0b21hdGljYWxseSIpCiAKICAgICBAdGVzdC5zdXBwb3J0LnJlcXVpcmVzX3Jlc291cmNlKCduZXR3b3JrJykKKyAgICBAdGVzdC5zdXBwb3J0LnN5c3RlbV9tdXN0X3ZhbGlkYXRlX2NlcnQKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzeXMudmVyc2lvbl9pbmZvWzNdID09ICdmaW5hbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ29ubHkgZm9yIHJlbGVhc2VkIHZlcnNpb25zJykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHVybGxpYi5yZXF1ZXN0LCAiSFRUUFNIYW5kbGVyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ25lZWQgU1NMIHN1cHBvcnQgdG8gZG93bmxvYWQgbGljZW5zZScpCiAgICAgZGVmIHRlc3RfbGljZW5zZV9leGlzdHNfYXRfdXJsKHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCBpcyBhIGJpdCBmcmFnaWxlIHNpbmNlIGl0IGRlcGVuZHMgb24gdGhlIGZvcm1hdCBvZiB0aGUKICAgICAgICAgIyBzdHJpbmcgZGlzcGxheWVkIGJ5IGxpY2Vuc2UgaW4gdGhlIGFic2VuY2Ugb2YgYSBMSUNFTlNFIGZpbGUuCkBAIC00MzIsNSArNDMxLDM5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgMjAwLCBtc2c9IkNhbid0IGZpbmQgIiArIHVybCkKIAogCitjbGFzcyBTdGFydHVwSW1wb3J0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlc3Rfc3RhcnR1cF9pbXBvcnRzKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdHMgY2hlY2tzIHdoaWNoIG1vZHVsZXMgYXJlIGxvYWRlZCBieSBQeXRob24gd2hlbiBpdAorICAgICAgICAjIGluaXRpYWxseSBzdGFydHMgdXBvbiBzdGFydHVwLgorICAgICAgICBwb3BlbiA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAnLUknLCAnLXYnLCAnLWMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzOyBwcmludChzZXQoc3lzLm1vZHVsZXMpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcG9wZW4uY29tbXVuaWNhdGUoKQorICAgICAgICBzdGRvdXQgPSBzdGRvdXQuZGVjb2RlKCd1dGYtOCcpCisgICAgICAgIHN0ZGVyciA9IHN0ZGVyci5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgbW9kdWxlcyA9IGV2YWwoc3Rkb3V0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3NpdGUnLCBtb2R1bGVzKQorCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE5MjA1CisgICAgICAgIHJlX21vZHMgPSB7J3JlJywgJ19zcmUnLCAnc3JlX2NvbXBpbGUnLCAnc3JlX2NvbnN0YW50cycsICdzcmVfcGFyc2UnfQorICAgICAgICAjIF9vc3hfc3VwcG9ydCB1c2VzIHRoZSByZSBtb2R1bGUgaW4gbWFueSBwbGFjcworICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG1vZHVsZXMuaW50ZXJzZWN0aW9uKHJlX21vZHMpLCBzdGRlcnIpCisgICAgICAgICMgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTk1NDgKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbG9jYWxlJywgbW9kdWxlcywgc3RkZXJyKQorICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gJ2Rhcndpbic6CisgICAgICAgICAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTIwOQorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignY29weXJlZycsIG1vZHVsZXMsIHN0ZGVycikKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTkyMTg+CisgICAgICAgIGNvbGxlY3Rpb25fbW9kcyA9IHsnX2NvbGxlY3Rpb25zJywgJ2NvbGxlY3Rpb25zJywgJ2Z1bmN0b29scycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVhcHEnLCAnaXRlcnRvb2xzJywgJ2tleXdvcmQnLCAnb3BlcmF0b3InLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcHJsaWInLCAndHlwZXMnLCAnd2Vha3JlZicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfS5kaWZmZXJlbmNlKHN5cy5idWlsdGluX21vZHVsZV9uYW1lcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2R1bGVzLmludGVyc2VjdGlvbihjb2xsZWN0aW9uX21vZHMpLCBzdGRlcnIpCisKKwogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkgYi9MaWIvdGVzdC90ZXN0X3NsaWNlLnB5CmluZGV4IDJkZjkyNzEuLjFlZDcxZjkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc2xpY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zbGljZS5weQpAQCAtNCw4ICs0LDcwIEBACiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gcGlja2xlIGltcG9ydCBsb2FkcywgZHVtcHMKIAoraW1wb3J0IGl0ZXJ0b29scworaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgc3lzCiAKKworZGVmIGV2YWx1YXRlX3NsaWNlX2luZGV4KGFyZyk6CisgICAgIiIiCisgICAgSGVscGVyIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYSBzbGljZSBhcmd1bWVudCB0byBhbiBpbnRlZ2VyLCBhbmQgcmFpc2UKKyAgICBUeXBlRXJyb3Igd2l0aCBhIHN1aXRhYmxlIG1lc3NhZ2Ugb24gZmFpbHVyZS4KKworICAgICIiIgorICAgIGlmIGhhc2F0dHIoYXJnLCAnX19pbmRleF9fJyk6CisgICAgICAgIHJldHVybiBvcGVyYXRvci5pbmRleChhcmcpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVHlwZUVycm9yKAorICAgICAgICAgICAgInNsaWNlIGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciAiCisgICAgICAgICAgICAiTm9uZSBvciBoYXZlIGFuIF9faW5kZXhfXyBtZXRob2QiKQorCitkZWYgc2xpY2VfaW5kaWNlcyhzbGljZSwgbGVuZ3RoKToKKyAgICAiIiIKKyAgICBSZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBzbGljZS5pbmRpY2VzIG1ldGhvZC4KKworICAgICIiIgorICAgICMgQ29tcHV0ZSBzdGVwIGFuZCBsZW5ndGggYXMgaW50ZWdlcnMuCisgICAgbGVuZ3RoID0gb3BlcmF0b3IuaW5kZXgobGVuZ3RoKQorICAgIHN0ZXAgPSAxIGlmIHNsaWNlLnN0ZXAgaXMgTm9uZSBlbHNlIGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0ZXApCisKKyAgICAjIFJhaXNlIFZhbHVlRXJyb3IgZm9yIG5lZ2F0aXZlIGxlbmd0aCBvciB6ZXJvIHN0ZXAuCisgICAgaWYgbGVuZ3RoIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibGVuZ3RoIHNob3VsZCBub3QgYmUgbmVnYXRpdmUiKQorICAgIGlmIHN0ZXAgPT0gMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpCisKKyAgICAjIEZpbmQgbG93ZXIgYW5kIHVwcGVyIGJvdW5kcyBmb3Igc3RhcnQgYW5kIHN0b3AuCisgICAgbG93ZXIgPSAtMSBpZiBzdGVwIDwgMCBlbHNlIDAKKyAgICB1cHBlciA9IGxlbmd0aCAtIDEgaWYgc3RlcCA8IDAgZWxzZSBsZW5ndGgKKworICAgICMgQ29tcHV0ZSBzdGFydC4KKyAgICBpZiBzbGljZS5zdGFydCBpcyBOb25lOgorICAgICAgICBzdGFydCA9IHVwcGVyIGlmIHN0ZXAgPCAwIGVsc2UgbG93ZXIKKyAgICBlbHNlOgorICAgICAgICBzdGFydCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0YXJ0KQorICAgICAgICBzdGFydCA9IG1heChzdGFydCArIGxlbmd0aCwgbG93ZXIpIGlmIHN0YXJ0IDwgMCBlbHNlIG1pbihzdGFydCwgdXBwZXIpCisKKyAgICAjIENvbXB1dGUgc3RvcC4KKyAgICBpZiBzbGljZS5zdG9wIGlzIE5vbmU6CisgICAgICAgIHN0b3AgPSBsb3dlciBpZiBzdGVwIDwgMCBlbHNlIHVwcGVyCisgICAgZWxzZToKKyAgICAgICAgc3RvcCA9IGV2YWx1YXRlX3NsaWNlX2luZGV4KHNsaWNlLnN0b3ApCisgICAgICAgIHN0b3AgPSBtYXgoc3RvcCArIGxlbmd0aCwgbG93ZXIpIGlmIHN0b3AgPCAwIGVsc2UgbWluKHN0b3AsIHVwcGVyKQorCisgICAgcmV0dXJuIHN0YXJ0LCBzdG9wLCBzdGVwCisKKworIyBDbGFzcyBwcm92aWRpbmcgYW4gX19pbmRleF9fIG1ldGhvZC4gIFVzZWQgZm9yIHRlc3Rpbmcgc2xpY2UuaW5kaWNlcy4KKworY2xhc3MgTXlJbmRleGFibGUob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLnZhbHVlID0gdmFsdWUKKworICAgIGRlZiBfX2luZGV4X18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKwogY2xhc3MgU2xpY2VUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgpAQCAtMTgsNyArODAsOCBAQAogICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IGNsZWFyaW5nIG9mIFNGIGJ1ZyAjODAwNzk2CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgaGFzaCwgc2xpY2UoNSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2xpY2UoNSkuX19oYXNoX18pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDUpLl9faGFzaF9fKCkKIAogICAgIGRlZiB0ZXN0X2NtcChzZWxmKToKICAgICAgICAgczEgPSBzbGljZSgxLCAyLCAzKQpAQCAtNzUsNiArMTM4LDIyIEBACiAgICAgICAgIHMgPSBzbGljZShvYmopCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnN0b3AgaXMgb2JqKQogCisgICAgZGVmIGNoZWNrX2luZGljZXMoc2VsZiwgc2xpY2UsIGxlbmd0aCk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFjdHVhbCA9IHNsaWNlLmluZGljZXMobGVuZ3RoKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGFjdHVhbCA9ICJ2YWx1ZWVycm9yIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBleHBlY3RlZCA9IHNsaWNlX2luZGljZXMoc2xpY2UsIGxlbmd0aCkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgICBleHBlY3RlZCA9ICJ2YWx1ZWVycm9yIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKKyAgICAgICAgaWYgbGVuZ3RoID49IDAgYW5kIHNsaWNlLnN0ZXAgIT0gMDoKKyAgICAgICAgICAgIGFjdHVhbCA9IHJhbmdlKCpzbGljZS5pbmRpY2VzKGxlbmd0aCkpCisgICAgICAgICAgICBleHBlY3RlZCA9IHJhbmdlKGxlbmd0aClbc2xpY2VdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpCisKICAgICBkZWYgdGVzdF9pbmRpY2VzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUgICAgICAgICAgICkuaW5kaWNlcygxMCksICgwLCAxMCwgIDEpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKE5vbmUsICBOb25lLCAgMikuaW5kaWNlcygxMCksICgwLCAxMCwgIDIpKQpAQCAtMTA4LDcgKzE4Nyw0MSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChyYW5nZSgxMCkpWzo6c3lzLm1heHNpemUgLSAxXSwgWzBdKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNsaWNlKE5vbmUpLmluZGljZXMsIDE8PDEwMCkKKyAgICAgICAgIyBDaGVjayBhIHZhcmlldHkgb2Ygc3RhcnQsIHN0b3AsIHN0ZXAgYW5kIGxlbmd0aCB2YWx1ZXMsIGluY2x1ZGluZworICAgICAgICAjIHZhbHVlcyBleGNlZWRpbmcgc3lzLm1heHNpemUgKHNlZSBpc3N1ZSAjMTQ3OTQpLgorICAgICAgICB2YWxzID0gW05vbmUsIC0yKioxMDAsIC0yKiozMCwgLTUzLCAtNywgLTEsIDAsIDEsIDcsIDUzLCAyKiozMCwgMioqMTAwXQorICAgICAgICBsZW5ndGhzID0gWzAsIDEsIDcsIDUzLCAyKiozMCwgMioqMTAwXQorICAgICAgICBmb3Igc2xpY2VfYXJncyBpbiBpdGVydG9vbHMucHJvZHVjdCh2YWxzLCByZXBlYXQ9Myk6CisgICAgICAgICAgICBzID0gc2xpY2UoKnNsaWNlX2FyZ3MpCisgICAgICAgICAgICBmb3IgbGVuZ3RoIGluIGxlbmd0aHM6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19pbmRpY2VzKHMsIGxlbmd0aCkKKyAgICAgICAgc2VsZi5jaGVja19pbmRpY2VzKHNsaWNlKDAsIDEwLCAxKSwgLTMpCisKKyAgICAgICAgIyBOZWdhdGl2ZSBsZW5ndGggc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKE5vbmUpLmluZGljZXMoLTEpCisKKyAgICAgICAgIyBaZXJvIHN0ZXAgc2hvdWxkIHJhaXNlIFZhbHVlRXJyb3IKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLCAwKS5pbmRpY2VzKDUpCisKKyAgICAgICAgIyBVc2luZyBhIHN0YXJ0LCBzdG9wIG9yIHN0ZXAgb3IgbGVuZ3RoIHRoYXQgY2FuJ3QgYmUgaW50ZXJwcmV0ZWQgYXMgYW4KKyAgICAgICAgIyBpbnRlZ2VyIHNob3VsZCBnaXZlIGEgVHlwZUVycm9yIC4uLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLjAsIDEwLCAxKS5pbmRpY2VzKDUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNsaWNlKDAsIDEwLjAsIDEpLmluZGljZXMoNSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2xpY2UoMCwgMTAsIDEuMCkuaW5kaWNlcyg1KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzbGljZSgwLCAxMCwgMSkuaW5kaWNlcyg1LjApCisKKyAgICAgICAgIyAuLi4gYnV0IGl0IHNob3VsZCBiZSBmaW5lIHRvIHVzZSBhIGN1c3RvbSBjbGFzcyB0aGF0IHByb3ZpZGVzIGluZGV4LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNsaWNlKDAsIDEwLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoTXlJbmRleGFibGUoMCksIDEwLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgTXlJbmRleGFibGUoMTApLCAxKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIE15SW5kZXhhYmxlKDEpKS5pbmRpY2VzKDUpLCAoMCwgNSwgMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2xpY2UoMCwgMTAsIDEpLmluZGljZXMoTXlJbmRleGFibGUoNSkpLCAoMCwgNSwgMSkpCiAKICAgICBkZWYgdGVzdF9zZXRzbGljZV93aXRob3V0X2dldHNsaWNlKHNlbGYpOgogICAgICAgICB0bXAgPSBbXQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5IGIvTGliL3Rlc3QvdGVzdF9zbXRwbGliLnB5CmluZGV4IDNiYmM2YjcuLjk1YTlkYmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc210cGxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NtdHBsaWIucHkKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLnNvdXJjZV9hZGRyZXNzLCAoJzEyNy4wLjAuMScsIHBvcnQpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbXRwLmxvY2FsX2hvc3RuYW1lLCAnbG9jYWxob3N0JykKICAgICAgICAgICAgIHNtdHAucXVpdCgpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBlLmVycm5vID09IGVycm5vLkVBRERSSU5VU0U6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgiY291bGRuJ3QgYmluZCB0byBwb3J0ICVkIiAlIHBvcnQpCiAgICAgICAgICAgICByYWlzZQpAQCAtNTI0LDEyICs1MjQsNiBAQAogCiBjbGFzcyBOb25Db25uZWN0aW5nVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzbXRwbGliLnNvY2tldCA9IG1vY2tfc29ja2V0Ci0KLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNtdHBsaWIuc29ja2V0ID0gc29ja2V0Ci0KICAgICBkZWYgdGVzdE5vdENvbm5lY3RlZChzZWxmKToKICAgICAgICAgIyBUZXN0IHZhcmlvdXMgb3BlcmF0aW9ucyBvbiBhbiB1bmNvbm5lY3RlZCBTTVRQIG9iamVjdCB0aGF0CiAgICAgICAgICMgc2hvdWxkIHJhaXNlIGV4Y2VwdGlvbnMgKGF0IHByZXNlbnQgdGhlIGF0dGVtcHQgaW4gU01UUC5zZW5kCkBAIC01NDEsMTAgKzUzNSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBzbXRwLnNlbmQsICd0ZXN0IG1zZycpCiAKICAgICBkZWYgdGVzdE5vbm51bWVyaWNQb3J0KHNlbGYpOgotICAgICAgICAjIGNoZWNrIHRoYXQgbm9uLW51bWVyaWMgcG9ydCByYWlzZXMgc29ja2V0LmVycm9yCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1vY2tfc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgICMgY2hlY2sgdGhhdCBub24tbnVtZXJpYyBwb3J0IHJhaXNlcyBPU0Vycm9yCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNtdHBsaWIuU01UUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsaG9zdCIsICJib2d1cyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKG1vY2tfc29ja2V0LmVycm9yLCBzbXRwbGliLlNNVFAsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNtdHBsaWIuU01UUCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgImxvY2FsaG9zdDpib2d1cyIpCiAKIApAQCAtNjI1LDYgKzYxOSw3IEBACiAgICAgZGF0YV9yZXNwb25zZSA9IE5vbmUKICAgICByY3B0X2NvdW50ID0gMAogICAgIHJzZXRfY291bnQgPSAwCisgICAgZGlzY29ubmVjdCA9IDAKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHRyYV9mZWF0dXJlcywgKmFyZ3MsICoqa3cpOgogICAgICAgICBzZWxmLl9leHRyYWZlYXR1cmVzID0gJycuam9pbigKQEAgLTY5MCw2ICs2ODUsOCBAQAogICAgICAgICAgICAgc3VwZXIoKS5zbXRwX01BSUwoYXJnKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi5wdXNoKHNlbGYubWFpbF9yZXNwb25zZSkKKyAgICAgICAgICAgIGlmIHNlbGYuZGlzY29ubmVjdDoKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlX3doZW5fZG9uZSgpCiAKICAgICBkZWYgc210cF9SQ1BUKHNlbGYsIGFyZyk6CiAgICAgICAgIGlmIHNlbGYucmNwdF9yZXNwb25zZSBpcyBOb25lOgpAQCAtODUyLDYgKzg0OSwzMCBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzaW1fYXV0aF9jcmVkZW50aWFsc1snY3JhbS1tZDUnXSwgc3RyKGVycikpCiAgICAgICAgIHNtdHAuY2xvc2UoKQogCisgICAgZGVmIHRlc3RBVVRIX211bHRpcGxlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBtdWx0aXBsZSBhdXRoZW50aWNhdGlvbiBtZXRob2RzIGFyZSB0cmllZC4KKyAgICAgICAgc2VsZi5zZXJ2LmFkZF9mZWF0dXJlKCJBVVRIIEJPR1VTIFBMQUlOIExPR0lOIENSQU0tTUQ1IikKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorICAgICAgICB0cnk6IHNtdHAubG9naW4oc2ltX2F1dGhbMF0sIHNpbV9hdXRoWzFdKQorICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQQXV0aGVudGljYXRpb25FcnJvciBhcyBlcnI6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNpbV9hdXRoX2xvZ2luX3Bhc3N3b3JkLCBzdHIoZXJyKSkKKyAgICAgICAgc210cC5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF9xdWl0X3Jlc2V0c19ncmVldGluZyhzZWxmKToKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfaG9zdG5hbWU9J2xvY2FsaG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dD0xNSkKKyAgICAgICAgY29kZSwgbWVzc2FnZSA9IHNtdHAuZWhsbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29kZSwgMjUwKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzaXplJywgc210cC5lc210cF9mZWF0dXJlcykKKyAgICAgICAgc210cC5xdWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignc2l6ZScsIHNtdHAuZXNtdHBfZmVhdHVyZXMpCisgICAgICAgIHNtdHAuY29ubmVjdChIT1NULCBzZWxmLnBvcnQpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ3NpemUnLCBzbXRwLmVzbXRwX2ZlYXR1cmVzKQorICAgICAgICBzbXRwLmVobG9fb3JfaGVsb19pZl9uZWVkZWQoKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzaXplJywgc210cC5lc210cF9mZWF0dXJlcykKKyAgICAgICAgc210cC5xdWl0KCkKKwogICAgIGRlZiB0ZXN0X3dpdGhfc3RhdGVtZW50KHNlbGYpOgogICAgICAgICB3aXRoIHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQpIGFzIHNtdHA6CiAgICAgICAgICAgICBjb2RlLCBtZXNzYWdlID0gc210cC5ub29wKCkKQEAgLTg3Miw2ICs4OTMsMTYgQEAKICAgICAjVE9ETzogYWRkIHRlc3RzIGZvciBjb3JyZWN0IEFVVEggbWV0aG9kIGZhbGxiYWNrIG5vdyB0aGF0IHRoZQogICAgICN0ZXN0IGluZnJhc3RydWN0dXJlIGNhbiBzdXBwb3J0IGl0LgogCisgICAgIyBJc3N1ZSAxNzQ5ODogbWFrZSBzdXJlIF9yc2V0IGRvZXMgbm90IHJhaXNlIFNNVFBTZXJ2ZXJEaXNjb25uZWN0ZWQgZXhjZXB0aW9uCisgICAgZGVmIHRlc3RfX3Jlc3RfZnJvbV9tYWlsX2NtZChzZWxmKToKKyAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQorICAgICAgICBzbXRwLm5vb3AoKQorICAgICAgICBzZWxmLnNlcnYuX1NNVFBjaGFubmVsLm1haWxfcmVzcG9uc2UgPSAnNDUxIFJlcXVlc3RlZCBhY3Rpb24gYWJvcnRlZCcKKyAgICAgICAgc2VsZi5zZXJ2Ll9TTVRQY2hhbm5lbC5kaXNjb25uZWN0ID0gVHJ1ZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNtdHBsaWIuU01UUFNlbmRlclJlZnVzZWQpOgorICAgICAgICAgICAgc210cC5zZW5kbWFpbCgnSm9obicsICdTYWxseScsICd0ZXN0IG1lc3NhZ2UnKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzbXRwLnNvY2spCisKICAgICAjIElzc3VlIDU3MTM6IG1ha2Ugc3VyZSBjbG9zZSwgbm90IHJzZXQsIGlzIGNhbGxlZCBpZiB3ZSBnZXQgYSA0MjEgZXJyb3IKICAgICBkZWYgdGVzdF80MjFfZnJvbV9tYWlsX2NtZChzZWxmKToKICAgICAgICAgc210cCA9IHNtdHBsaWIuU01UUChIT1NULCBzZWxmLnBvcnQsIGxvY2FsX2hvc3RuYW1lPSdsb2NhbGhvc3QnLCB0aW1lb3V0PTE1KQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5IGIvTGliL3Rlc3QvdGVzdF9zbXRwbmV0LnB5CmluZGV4IGU5N2NmMzYuLjE1NjU0ZjIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc210cG5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NtdHBuZXQucHkKQEAgLTEsMjMgKzEsMzUgQEAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgc210cGxpYgoraW1wb3J0IHNvY2tldAogCiBzc2wgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNzbCIpCiAKIHN1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQogCitkZWYgY2hlY2tfc3NsX3ZlcmlmaXkoaG9zdCwgcG9ydCk6CisgICAgY29udGV4dCA9IHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkKKyAgICB3aXRoIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoaG9zdCwgcG9ydCkpIGFzIHNvY2s6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNvY2sgPSBjb250ZXh0LndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9ob3N0bmFtZT1ob3N0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKIAogY2xhc3MgU210cFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHRlc3RTZXJ2ZXIgPSAnc210cC5nbWFpbC5jb20nCi0gICAgcmVtb3RlUG9ydCA9IDI1Ci0gICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgcmVtb3RlUG9ydCA9IDU4NwogCiAgICAgZGVmIHRlc3RfY29ubmVjdF9zdGFydHRscyhzZWxmKToKICAgICAgICAgc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHNlbGYudGVzdFNlcnZlcik6CiAgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFAoc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VydmVyLnN0YXJ0dGxzKGNvbnRleHQ9c2VsZi5jb250ZXh0KQorICAgICAgICAgICAgICAgIHNlcnZlci5zdGFydHRscyhjb250ZXh0PWNvbnRleHQpCiAgICAgICAgICAgICBleGNlcHQgc210cGxpYi5TTVRQRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICAgICAgaWYgZS5hcmdzWzBdID09ICdTVEFSVFRMUyBleHRlbnNpb24gbm90IHN1cHBvcnRlZCBieSBzZXJ2ZXIuJzoKICAgICAgICAgICAgICAgICAgICAgdW5pdHRlc3Quc2tpcChlLmFyZ3NbMF0pCkBAIC0zMCw3ICs0Miw2IEBACiBjbGFzcyBTbXRwU1NMVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgdGVzdFNlcnZlciA9ICdzbXRwLmdtYWlsLmNvbScKICAgICByZW1vdGVQb3J0ID0gNDY1Ci0gICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCiAKICAgICBkZWYgdGVzdF9jb25uZWN0KHNlbGYpOgogICAgICAgICBzdXBwb3J0LmdldF9hdHRyaWJ1dGUoc210cGxpYiwgJ1NNVFBfU1NMJykKQEAgLTQ3LDkgKzU4LDIzIEBACiAgICAgICAgICAgICBzZXJ2ZXIucXVpdCgpCiAKICAgICBkZWYgdGVzdF9jb25uZWN0X3VzaW5nX3NzbGNvbnRleHQoc2VsZik6CisgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQogICAgICAgICBzdXBwb3J0LmdldF9hdHRyaWJ1dGUoc210cGxpYiwgJ1NNVFBfU1NMJykKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldChzZWxmLnRlc3RTZXJ2ZXIpOgotICAgICAgICAgICAgc2VydmVyID0gc210cGxpYi5TTVRQX1NTTChzZWxmLnRlc3RTZXJ2ZXIsIHNlbGYucmVtb3RlUG9ydCwgY29udGV4dD1zZWxmLmNvbnRleHQpCisgICAgICAgICAgICBzZXJ2ZXIgPSBzbXRwbGliLlNNVFBfU1NMKHNlbGYudGVzdFNlcnZlciwgc2VsZi5yZW1vdGVQb3J0LCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgICAgICBzZXJ2ZXIuZWhsbygpCisgICAgICAgICAgICBzZXJ2ZXIucXVpdCgpCisKKyAgICBkZWYgdGVzdF9jb25uZWN0X3VzaW5nX3NzbGNvbnRleHRfdmVyaWZpZWQoc2VsZik6CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi50ZXN0U2VydmVyKToKKyAgICAgICAgICAgIGNhbl92ZXJpZnkgPSBjaGVja19zc2xfdmVyaWZpeShzZWxmLnRlc3RTZXJ2ZXIsIHNlbGYucmVtb3RlUG9ydCkKKyAgICAgICAgICAgIGlmIG5vdCBjYW5fdmVyaWZ5OgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlNTTCBjZXJ0aWZpY2F0ZSBjYW4ndCBiZSB2ZXJpZmllZCIpCisKKyAgICAgICAgc3VwcG9ydC5nZXRfYXR0cmlidXRlKHNtdHBsaWIsICdTTVRQX1NTTCcpCisgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoc2VsZi50ZXN0U2VydmVyKToKKyAgICAgICAgICAgIHNlcnZlciA9IHNtdHBsaWIuU01UUF9TU0woc2VsZi50ZXN0U2VydmVyLCBzZWxmLnJlbW90ZVBvcnQsIGNvbnRleHQ9Y29udGV4dCkKICAgICAgICAgICAgIHNlcnZlci5laGxvKCkKICAgICAgICAgICAgIHNlcnZlci5xdWl0KCkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zbmRoZHIucHkgYi9MaWIvdGVzdC90ZXN0X3NuZGhkci5weQppbmRleCAxMDA0Njg4Li41ZTBhYmUwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NuZGhkci5weQorKysgYi9MaWIvdGVzdC90ZXN0X3NuZGhkci5weQpAQCAtMTIsNyArMTIsNyBAQAogICAgICAgICAgICAgKCdzbmRoZHIuaGNvbScsICgnaGNvbScsIDIyMDUwLjAsIDEsIC0xLCA4KSksCiAgICAgICAgICAgICAoJ3NuZGhkci5zbmR0JywgKCdzbmR0JywgNDQxMDAsIDEsIDUsIDgpKSwKICAgICAgICAgICAgICgnc25kaGRyLnZvYycsICgndm9jJywgMCwgMSwgLTEsIDgpKSwKLSAgICAgICAgICAgICgnc25kaGRyLndhdicsICgnd2F2JywgNDQxMDAsIDIsIC0xLCAxNikpLAorICAgICAgICAgICAgKCdzbmRoZHIud2F2JywgKCd3YXYnLCA0NDEwMCwgMiwgNSwgMTYpKSwKICAgICAgICAgKToKICAgICAgICAgICAgIGZpbGVuYW1lID0gZmluZGZpbGUoZmlsZW5hbWUsIHN1YmRpcj0ic25kaGRyZGF0YSIpCiAgICAgICAgICAgICB3aGF0ID0gc25kaGRyLndoYXQoZmlsZW5hbWUpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldC5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CmluZGV4IGVlNGFlYTMuLjE0MGI0YmUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0LnB5CkBAIC0xLDkgKzEsOSBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdW5pdHRlc3QuY2FzZSBpbXBvcnQgX0V4cGVjdGVkRmFpbHVyZQogCiBpbXBvcnQgZXJybm8KIGltcG9ydCBpbworaW1wb3J0IGl0ZXJ0b29scwogaW1wb3J0IHNvY2tldAogaW1wb3J0IHNlbGVjdAogaW1wb3J0IHRlbXBmaWxlCkBAIC0yMSwxMyArMjEsMTMgQEAKIGltcG9ydCBwaWNrbGUKIGltcG9ydCBzdHJ1Y3QKIHRyeToKLSAgICBpbXBvcnQgZmNudGwKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBmY250bCA9IEZhbHNlCi10cnk6CiAgICAgaW1wb3J0IG11bHRpcHJvY2Vzc2luZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIG11bHRpcHJvY2Vzc2luZyA9IEZhbHNlCit0cnk6CisgICAgaW1wb3J0IGZjbnRsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZmNudGwgPSBOb25lCiAKIEhPU1QgPSBzdXBwb3J0LkhPU1QKIE1TRyA9ICdNaWNoYWVsIEdpbGZpeCB3YXMgaGVyZVx1MTIzNFxyXG4nLmVuY29kZSgndXRmLTgnKSAjIyB0ZXN0IHVuaWNvZGUgc3RyaW5nIGFuZCBjYXJyaWFnZSByZXR1cm4KQEAgLTM4LDEyICszOCwxNyBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZCA9IE5vbmUKICAgICB0aHJlYWRpbmcgPSBOb25lCit0cnk6CisgICAgaW1wb3J0IF9zb2NrZXQKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICBfc29ja2V0ID0gTm9uZQorCiAKIGRlZiBfaGF2ZV9zb2NrZXRfY2FuKCk6CiAgICAgIiIiQ2hlY2sgd2hldGhlciBDQU4gc29ja2V0cyBhcmUgc3VwcG9ydGVkIG9uIHRoaXMgaG9zdC4iIiIKICAgICB0cnk6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCi0gICAgZXhjZXB0IChBdHRyaWJ1dGVFcnJvciwgc29ja2V0LmVycm9yLCBPU0Vycm9yKToKKyAgICBleGNlcHQgKEF0dHJpYnV0ZUVycm9yLCBPU0Vycm9yKToKICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgZWxzZToKICAgICAgICAgcy5jbG9zZSgpCkBAIC0xMTgsMTIgKzEyMyw0MiBAQAogICAgIGludGVyZmFjZSA9ICd2Y2FuMCcKICAgICBidWZzaXplID0gMTI4CiAKKyAgICAiIiJUaGUgQ0FOIGZyYW1lIHN0cnVjdHVyZSBpcyBkZWZpbmVkIGluIDxsaW51eC9jYW4uaD46CisKKyAgICBzdHJ1Y3QgY2FuX2ZyYW1lIHsKKyAgICAgICAgY2FuaWRfdCBjYW5faWQ7ICAvKiAzMiBiaXQgQ0FOX0lEICsgRUZGL1JUUi9FUlIgZmxhZ3MgKi8KKyAgICAgICAgX191OCAgICBjYW5fZGxjOyAvKiBkYXRhIGxlbmd0aCBjb2RlOiAwIC4uIDggKi8KKyAgICAgICAgX191OCAgICBkYXRhWzhdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKKyAgICB9OworICAgICIiIgorICAgIGNhbl9mcmFtZV9mbXQgPSAiPUlCM3g4cyIKKyAgICBjYW5fZnJhbWVfc2l6ZSA9IHN0cnVjdC5jYWxjc2l6ZShjYW5fZnJhbWVfZm10KQorCisgICAgIiIiVGhlIEJyb2FkY2FzdCBNYW5hZ2VtZW50IENvbW1hbmQgZnJhbWUgc3RydWN0dXJlIGlzIGRlZmluZWQKKyAgICBpbiA8bGludXgvY2FuL2JjbS5oPjoKKworICAgIHN0cnVjdCBiY21fbXNnX2hlYWQgeworICAgICAgICBfX3UzMiBvcGNvZGU7CisgICAgICAgIF9fdTMyIGZsYWdzOworICAgICAgICBfX3UzMiBjb3VudDsKKyAgICAgICAgc3RydWN0IHRpbWV2YWwgaXZhbDEsIGl2YWwyOworICAgICAgICBjYW5pZF90IGNhbl9pZDsKKyAgICAgICAgX191MzIgbmZyYW1lczsKKyAgICAgICAgc3RydWN0IGNhbl9mcmFtZSBmcmFtZXNbMF07CisgICAgfQorCisgICAgYGJjbV9tc2dfaGVhZGAgbXVzdCBiZSA4IGJ5dGVzIGFsaWduZWQgYmVjYXVzZSBvZiB0aGUgYGZyYW1lc2AgbWVtYmVyIChzZWUKKyAgICBgc3RydWN0IGNhbl9mcmFtZWAgZGVmaW5pdGlvbikuIE11c3QgdXNlIG5hdGl2ZSBub3Qgc3RhbmRhcmQgdHlwZXMgZm9yIHBhY2tpbmcuCisgICAgIiIiCisgICAgYmNtX2NtZF9tc2dfZm10ID0gIkAzSTRsMkkiCisgICAgYmNtX2NtZF9tc2dfZm10ICs9ICJ4IiAqIChzdHJ1Y3QuY2FsY3NpemUoYmNtX2NtZF9tc2dfZm10KSAlIDgpCisKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgIHNlbGYucyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuQ0FOX1JBVykKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNlbGYucy5jbG9zZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zLmJpbmQoKHNlbGYuaW50ZXJmYWNlLCkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbmV0d29yayBpbnRlcmZhY2UgYCVzYCBkb2VzIG5vdCBleGlzdCcgJQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnRlcmZhY2UpCiAKQEAgLTIzOSw5ICsyNzQsNiBAQAogICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJ0ZXN0X2Z1bmMgbXVzdCBiZSBhIGNhbGxhYmxlIGZ1bmN0aW9uIikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGVzdF9mdW5jKCkKLSAgICAgICAgZXhjZXB0IF9FeHBlY3RlZEZhaWx1cmU6Ci0gICAgICAgICAgICAjIFdlIGRlbGliZXJhdGVseSBpZ25vcmUgZXhwZWN0ZWQgZmFpbHVyZXMKLSAgICAgICAgICAgIHBhc3MKICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHNlbGYucXVldWUucHV0KGUpCiAgICAgICAgIGZpbmFsbHk6CkBAIC0yOTIsNyArMzI0LDcgQEAKICAgICAgICAgc2VsZi5jbGkgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX1JBVywgc29ja2V0LkNBTl9SQVcpCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYuY2xpLmJpbmQoKHNlbGYuaW50ZXJmYWNlLCkpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgIyBza2lwVGVzdCBzaG91bGQgbm90IGJlIGNhbGxlZCBoZXJlLCBhbmQgd2lsbCBiZSBjYWxsZWQgaW4gdGhlCiAgICAgICAgICAgICAjIHNlcnZlciBpbnN0ZWFkCiAgICAgICAgICAgICBwYXNzCkBAIC01NDAsMTEgKzU3Miw3IEBACiBjbGFzcyBJbmV0NlRlc3RCYXNlKEluZXRUZXN0QmFzZSk6CiAgICAgIiIiQmFzZSBjbGFzcyBmb3IgSVB2NiBzb2NrZXQgdGVzdHMuIiIiCiAKLSAgICAjIERvbid0IHVzZSAibG9jYWxob3N0IiBoZXJlIC0gaXQgbWF5IG5vdCBoYXZlIGFuIElQdjYgYWRkcmVzcwotICAgICMgYXNzaWduZWQgdG8gaXQgYnkgZGVmYXVsdCAoZS5nLiBpbiAvZXRjL2hvc3RzKSwgYW5kIGlmIHNvbWVvbmUKLSAgICAjIGhhcyBhc3NpZ25lZCBpdCBhbiBJUHY0LW1hcHBlZCBhZGRyZXNzLCB0aGVuIGl0J3MgdW5saWtlbHkgdG8KLSAgICAjIHdvcmsgd2l0aCB0aGUgZnVsbCBJUHY2IEFQSS4KLSAgICBob3N0ID0gIjo6MSIKKyAgICBob3N0ID0gc3VwcG9ydC5IT1NUdjYKIAogY2xhc3MgVURQNlRlc3RCYXNlKEluZXQ2VGVzdEJhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIFVEUC1vdmVyLUlQdjYgdGVzdHMuIiIiCkBAIC02MDUsNyArNjMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIG9iaiBpbiBhcmdzXQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzID0gc29ja2V0LnNvY2tldCgqY2FsbGFyZ3MpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgICMgWFhYOiBjaGVjayBlcnJubz8KICAgICAgICAgICAgIGVyciA9IHN0cihlKQogICAgICAgICBlbHNlOgpAQCAtNjIxLDEwICs2NDksMzkgQEAKIAogY2xhc3MgR2VuZXJhbE1vZHVsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiB0ZXN0X1NvY2tldFR5cGVfaXNfc29ja2V0b2JqZWN0KHNlbGYpOgorICAgICAgICBpbXBvcnQgX3NvY2tldAorICAgICAgICBzZWxmLmFzc2VydFRydWUoc29ja2V0LlNvY2tldFR5cGUgaXMgX3NvY2tldC5zb2NrZXQpCisgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHMsIHNvY2tldC5Tb2NrZXRUeXBlKQorICAgICAgICBzLmNsb3NlKCkKKwogICAgIGRlZiB0ZXN0X3JlcHIoc2VsZik6CiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCi0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChzLmNsb3NlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUocmVwcihzKS5zdGFydHN3aXRoKCI8c29ja2V0LnNvY2tldCBvYmplY3QiKSkKKyAgICAgICAgd2l0aCBzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignZmQ9JWknICUgcy5maWxlbm8oKSwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2ZhbWlseT0lcycgJSBzb2NrZXQuQUZfSU5FVCwgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3R5cGU9JXMnICUgc29ja2V0LlNPQ0tfU1RSRUFNLCByZXByKHMpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigncHJvdG89MCcsIHJlcHIocykpCisgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdyYWRkcicsIHJlcHIocykpCisgICAgICAgICAgICBzLmJpbmQoKCcxMjcuMC4wLjEnLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2xhZGRyJywgcmVwcihzKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3RyKHMuZ2V0c29ja25hbWUoKSksIHJlcHIocykpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ1tjbG9zZWRdJywgcmVwcihzKSkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbGFkZHInLCByZXByKHMpKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoX3NvY2tldCBpcyBub3QgTm9uZSwgJ25lZWQgX3NvY2tldCBtb2R1bGUnKQorICAgIGRlZiB0ZXN0X2Nzb2NrZXRfcmVwcihzZWxmKToKKyAgICAgICAgcyA9IF9zb2NrZXQuc29ja2V0KF9zb2NrZXQuQUZfSU5FVCwgX3NvY2tldC5TT0NLX1NUUkVBTSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZXhwZWN0ZWQgPSAoJzxzb2NrZXQgb2JqZWN0LCBmZD0lcywgZmFtaWx5PSVzLCB0eXBlPSVzLCBwcm90bz0lcz4nCisgICAgICAgICAgICAgICAgICAgICAgICAlIChzLmZpbGVubygpLCBzLmZhbWlseSwgcy50eXBlLCBzLnByb3RvKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihzKSwgZXhwZWN0ZWQpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzLmNsb3NlKCkKKyAgICAgICAgZXhwZWN0ZWQgPSAoJzxzb2NrZXQgb2JqZWN0LCBmZD0tMSwgZmFtaWx5PSVzLCB0eXBlPSVzLCBwcm90bz0lcz4nCisgICAgICAgICAgICAgICAgICAgICUgKHMuZmFtaWx5LCBzLnR5cGUsIHMucHJvdG8pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIocyksIGV4cGVjdGVkKQogCiAgICAgZGVmIHRlc3Rfd2Vha3JlZihzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKQEAgLTY0MiwxNSArNjk5LDE1IEBACiAgICAgZGVmIHRlc3RTb2NrZXRFcnJvcihzZWxmKToKICAgICAgICAgIyBUZXN0aW5nIHNvY2tldCBtb2R1bGUgZXhjZXB0aW9ucwogICAgICAgICBtc2cgPSAiRXJyb3IgcmFpc2luZyBzb2NrZXQgZXhjZXB0aW9uICglcykuIgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuZXJyb3InKToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdPU0Vycm9yJyk6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgbXNnPW1zZyAlICdzb2NrZXQuaGVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuaGVycm9yCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBtc2c9bXNnICUgJ3NvY2tldC5nYWllcnJvcicpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1tc2cgJSAnc29ja2V0LmdhaWVycm9yJyk6CiAgICAgICAgICAgICByYWlzZSBzb2NrZXQuZ2FpZXJyb3IKIAogICAgIGRlZiB0ZXN0U2VuZHRvRXJyb3JzKHNlbGYpOgotICAgICAgICAjIFRlc3RpbmcgdGhhdCBzZW5kdG8gZG9lbnMndCBtYXNrcyBmYWlsdXJlcy4gU2VlICMxMDE2OS4KKyAgICAgICAgIyBUZXN0aW5nIHRoYXQgc2VuZHRvIGRvZXNuJ3QgbWFza3MgZmFpbHVyZXMuIFNlZSAjMTAxNjkuCiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMuY2xvc2UpCiAgICAgICAgIHMuYmluZCgoJycsIDApKQpAQCAtNzA5LDEzICs3NjYsMTMgQEAKICAgICAgICAgaG9zdG5hbWUgPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpcCA9IHNvY2tldC5nZXRob3N0YnluYW1lKGhvc3RuYW1lKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25hbWUgbG9va3VwIGZhaWx1cmUnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaXAuZmluZCgnLicpID49IDAsICJFcnJvciByZXNvbHZpbmcgaG9zdCB0byBpcC4iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBobmFtZSwgYWxpYXNlcywgaXBhZGRycyA9IHNvY2tldC5nZXRob3N0YnlhZGRyKGlwKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgYSBzaW1pbGFyIHByb2JsZW0gYXMgYWJvdmU7IHNraXAgdGhpcyB0ZXN0CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduYW1lIGxvb2t1cCBmYWlsdXJlJykKICAgICAgICAgYWxsX2hvc3RfbmFtZXMgPSBbaG9zdG5hbWUsIGhuYW1lXSArIGFsaWFzZXMKQEAgLTcyMywxMyArNzgwLDI3IEBACiAgICAgICAgIGlmIG5vdCBmcWhuIGluIGFsbF9ob3N0X25hbWVzOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJFcnJvciB0ZXN0aW5nIGhvc3QgcmVzb2x1dGlvbiBtZWNoYW5pc21zLiAoZnFkbjogJXMsIGFsbDogJXMpIiAlIChmcWhuLCByZXByKGFsbF9ob3N0X25hbWVzKSkpCiAKKyAgICBkZWYgdGVzdF9ob3N0X3Jlc29sdXRpb24oc2VsZik6CisgICAgICAgIGZvciBhZGRyIGluIFsnMC4xLjEufjEnLCAnMSsuMS4xLjEnLCAnOjoxcScsICc6OjE6OjInLAorICAgICAgICAgICAgICAgICAgICAgJzE6MToxOjE6MToxOjE6MToxJ106CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuZ2V0aG9zdGJ5bmFtZSwgYWRkcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5nZXRob3N0YnlhZGRyLCBhZGRyKQorCisgICAgICAgIGZvciBhZGRyIGluIFtzdXBwb3J0LkhPU1QsICcxMC4wLjAuMScsICcyNTUuMjU1LjI1NS4yNTUnXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ja2V0LmdldGhvc3RieW5hbWUoYWRkciksIGFkZHIpCisKKyAgICAgICAgIyB3ZSBkb24ndCB0ZXN0IHN1cHBvcnQuSE9TVHY2IGJlY2F1c2UgdGhlcmUncyBhIGNoYW5jZSBpdCBkb2Vzbid0IGhhdmUKKyAgICAgICAgIyBhIG1hdGNoaW5nIG5hbWUgZW50cnkgKGUuZy4gJ2lwNi1sb2NhbGhvc3QnKQorICAgICAgICBmb3IgaG9zdCBpbiBbc3VwcG9ydC5IT1NUXToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oaG9zdCwgc29ja2V0LmdldGhvc3RieWFkZHIoaG9zdClbMl0pCisKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ3NldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5zZXRob3N0bmFtZSgpIikKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgJ2dldGhvc3RuYW1lJyksICJ0ZXN0IG5lZWRzIHNvY2tldC5nZXRob3N0bmFtZSgpIikKICAgICBkZWYgdGVzdF9zZXRob3N0bmFtZShzZWxmKToKICAgICAgICAgb2xkaG4gPSBzb2NrZXQuZ2V0aG9zdG5hbWUoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0aG9zdG5hbWUoJ25ldycpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIGlmIGUuZXJybm8gPT0gZXJybm8uRVBFUk06CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidGVzdCBzaG91bGQgYmUgcnVuIGFzIHJvb3QiKQogICAgICAgICAgICAgZWxzZToKQEAgLTc2Myw4ICs4MzQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuaWZfbmFtZWluZGV4KCkgbm90IGF2YWlsYWJsZS4nKQogICAgIGRlZiB0ZXN0SW52YWxpZEludGVyZmFjZU5hbWVJbmRleChzZWxmKToKICAgICAgICAgIyB0ZXN0IG5vbmV4aXN0ZW50IGludGVyZmFjZSBpbmRleC9uYW1lCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAwKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2tldC5pZl9uYW1ldG9pbmRleCwgJ19ERUFEQkVFRicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNvY2tldC5pZl9pbmRleHRvbmFtZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29ja2V0LmlmX25hbWV0b2luZGV4LCAnX0RFQURCRUVGJykKICAgICAgICAgIyB0ZXN0IHdpdGggaW52YWxpZCB2YWx1ZXMKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzb2NrZXQuaWZfbmFtZXRvaW5kZXgsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc29ja2V0LmlmX2luZGV4dG9uYW1lLCAnX0RFQURCRUVGJykKQEAgLTc4Niw3ICs4NTcsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICAjIE9uIHNvbWUgdmVyc2lvbnMsIHRoaXMgY3Jhc2hlcyB0aGUgaW50ZXJwcmV0ZXIuCiAgICAgICAgICAgICBzb2NrZXQuZ2V0bmFtZWluZm8oKCd4JywgMCwgMCwgMCksIDApCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3ROdG9IKHNlbGYpOgpAQCAtODIyLDcgKzg5Myw3IEBACiAgICAgICAgICMgRmluZCBvbmUgc2VydmljZSB0aGF0IGV4aXN0cywgdGhlbiBjaGVjayBhbGwgdGhlIHJlbGF0ZWQgaW50ZXJmYWNlcy4KICAgICAgICAgIyBJJ3ZlIG9yZGVyZWQgdGhpcyBieSBwcm90b2NvbHMgdGhhdCBoYXZlIGJvdGggYSB0Y3AgYW5kIHVkcAogICAgICAgICAjIHByb3RvY29sLCBhdCBsZWFzdCBmb3IgbW9kZXJuIExpbnV4ZXMuCi0gICAgICAgIGlmIChzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgoJ2ZyZWVic2QnLCAnbmV0YnNkJykpCisgICAgICAgIGlmIChzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgoJ2ZyZWVic2QnLCAnbmV0YnNkJywgJ2dudWtmcmVlYnNkJykpCiAgICAgICAgICAgICBvciBzeXMucGxhdGZvcm0gaW4gKCdsaW51eCcsICdkYXJ3aW4nKSk6CiAgICAgICAgICAgICAjIGF2b2lkIHRoZSAnZWNobycgc2VydmljZSBvbiB0aGlzIHBsYXRmb3JtLCBhcyB0aGVyZSBpcyBhbgogICAgICAgICAgICAgIyBhc3N1bXB0aW9uIGJyZWFraW5nIG5vbi1zdGFuZGFyZCBwb3J0L3Byb3RvY29sIGVudHJ5CkBAIC04MzMsMTcgKzkwNCwxNyBAQAogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHBvcnQgPSBzb2NrZXQuZ2V0c2VydmJ5bmFtZShzZXJ2aWNlLCAndGNwJykKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcgorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgogICAgICAgICAjIFRyeSBzYW1lIGNhbGwgd2l0aCBvcHRpb25hbCBwcm90b2NvbCBvbWl0dGVkCiAgICAgICAgIHBvcnQyID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSkKICAgICAgICAgZXEocG9ydCwgcG9ydDIpCiAgICAgICAgICMgVHJ5IHVkcCwgYnV0IGRvbid0IGJhcmYgaWYgaXQgZG9lc24ndCBleGlzdAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB1ZHBwb3J0ID0gc29ja2V0LmdldHNlcnZieW5hbWUoc2VydmljZSwgJ3VkcCcpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgdWRwcG9ydCA9IE5vbmUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGVxKHVkcHBvcnQsIHBvcnQpCkBAIC04OTksNyArOTcwLDcgQEAKICAgICAgICAgZyA9IGxhbWJkYSBhOiBpbmV0X3B0b24oQUZfSU5FVCwgYSkKIAogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGZ1bmMsYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZnVuYywgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInXHgwMFx4MDBceDAwXHgwMCcsIGYoJzAuMC4wLjAnKSkKQEAgLTkzMiw5ICsxMDAzLDE3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnSVB2NiBub3QgYXZhaWxhYmxlJykKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGltcG9ydCBuZWVkZWQgc3ltYm9scyBmcm9tIHNvY2tldCcpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW5ldF9wdG9uKEFGX0lORVQ2LCAnOjonKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBpZiBlLndpbmVycm9yID09IDEwMDIyOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdJUHY2IG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQnKQorCiAgICAgICAgIGYgPSBsYW1iZGEgYTogaW5ldF9wdG9uKEFGX0lORVQ2LCBhKQogICAgICAgICBhc3NlcnRJbnZhbGlkID0gbGFtYmRhIGE6IHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgKHNvY2tldC5lcnJvciwgVmFsdWVFcnJvciksIGYsIGEKKyAgICAgICAgICAgIChPU0Vycm9yLCBWYWx1ZUVycm9yKSwgZiwgYQogICAgICAgICApCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiJ1x4MDAnICogMTYsIGYoJzo6JykpCkBAIC05ODMsNyArMTA2Miw3IEBACiAgICAgICAgIGZyb20gc29ja2V0IGltcG9ydCBpbmV0X250b2EgYXMgZiwgaW5ldF9udG9wLCBBRl9JTkVUCiAgICAgICAgIGcgPSBsYW1iZGEgYTogaW5ldF9udG9wKEFGX0lORVQsIGEpCiAgICAgICAgIGFzc2VydEludmFsaWQgPSBsYW1iZGEgZnVuYyxhOiBzZWxmLmFzc2VydFJhaXNlcygKLSAgICAgICAgICAgIChzb2NrZXQuZXJyb3IsIFZhbHVlRXJyb3IpLCBmdW5jLCBhCisgICAgICAgICAgICAoT1NFcnJvciwgVmFsdWVFcnJvciksIGZ1bmMsIGEKICAgICAgICAgKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzEuMC4xLjAnLCBmKGInXHgwMVx4MDBceDAxXHgwMCcpKQpAQCAtMTAxMCw5ICsxMDg5LDE3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnSVB2NiBub3QgYXZhaWxhYmxlJykKICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOgogICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnY291bGQgbm90IGltcG9ydCBuZWVkZWQgc3ltYm9scyBmcm9tIHNvY2tldCcpCisKKyAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICJ3aW4zMiI6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCBiJ1x4MDAnICogMTYpCisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGUud2luZXJyb3IgPT0gMTAwMjI6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ0lQdjYgbWlnaHQgbm90IGJlIHN1cHBvcnRlZCcpCisKICAgICAgICAgZiA9IGxhbWJkYSBhOiBpbmV0X250b3AoQUZfSU5FVDYsIGEpCiAgICAgICAgIGFzc2VydEludmFsaWQgPSBsYW1iZGEgYTogc2VsZi5hc3NlcnRSYWlzZXMoCi0gICAgICAgICAgICAoc29ja2V0LmVycm9yLCBWYWx1ZUVycm9yKSwgZiwgYQorICAgICAgICAgICAgKE9TRXJyb3IsIFZhbHVlRXJyb3IpLCBmLCBhCiAgICAgICAgICkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc6OicsIGYoYidceDAwJyAqIDE2KSkKQEAgLTEwNDAsNyArMTEyNyw3IEBACiAgICAgICAgICMgQXQgbGVhc3QgZm9yIGVDb3MuICBUaGlzIGlzIHJlcXVpcmVkIGZvciB0aGUgUy8zOTAgdG8gcGFzcy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbXlfaXBfYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgUHJvYmFibHkgbmFtZSBsb29rdXAgd2Fzbid0IHNldCB1cCByaWdodDsgc2tpcCB0aGlzIHRlc3QKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ25hbWUgbG9va3VwIGZhaWx1cmUnKQogICAgICAgICBzZWxmLmFzc2VydEluKG5hbWVbMF0sICgiMC4wLjAuMCIsIG15X2lwX2FkZHIpLCAnJXMgaW52YWxpZCcgJSBuYW1lWzBdKQpAQCAtMTA2NywyOCArMTE1NCw0MSBAQAogICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzb2NrLnNldHRpbWVvdXQoMSkKICAgICAgICAgc29jay5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kLCBiInNwYW0iKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrLnNlbmQsIGIic3BhbSIpCiAKICAgICBkZWYgdGVzdE5ld0F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgICMgdGVzdGluZyAuZmFtaWx5LCAudHlwZSBhbmQgLnByb3RvY29sCisKICAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmZhbWlseSwgc29ja2V0LkFGX0lORVQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay50eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGlmIGhhc2F0dHIoc29ja2V0LCAnU09DS19DTE9FWEVDJyk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHNvY2sudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tldC5TT0NLX1NUUkVBTSB8IHNvY2tldC5TT0NLX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrZXQuU09DS19TVFJFQU0pKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnR5cGUsIHNvY2tldC5TT0NLX1NUUkVBTSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLnByb3RvLCAwKQogICAgICAgICBzb2NrLmNsb3NlKCkKIAogICAgIGRlZiB0ZXN0X2dldHNvY2thZGRyYXJnKHNlbGYpOgotICAgICAgICBob3N0ID0gJzAuMC4wLjAnCisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHNvY2suY2xvc2UpCiAgICAgICAgIHBvcnQgPSBzdXBwb3J0LmZpbmRfdW51c2VkX3BvcnQoKQogICAgICAgICBiaWdfcG9ydCA9IHBvcnQgKyA2NTUzNgogICAgICAgICBuZWdfcG9ydCA9IHBvcnQgLSA2NTUzNgotICAgICAgICBzb2NrID0gc29ja2V0LnNvY2tldCgpCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2suYmluZCwgKGhvc3QsIGJpZ19wb3J0KSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2suYmluZCwgKGhvc3QsIG5lZ19wb3J0KSkKLSAgICAgICAgICAgIHNvY2suYmluZCgoaG9zdCwgcG9ydCkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzb2NrLmNsb3NlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc29jay5iaW5kLCAoSE9TVCwgYmlnX3BvcnQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzb2NrLmJpbmQsIChIT1NULCBuZWdfcG9ydCkpCisgICAgICAgICMgU2luY2UgZmluZF91bnVzZWRfcG9ydCgpIGlzIGluaGVyZW50bHkgc3ViamVjdCB0byByYWNlIGNvbmRpdGlvbnMsIHdlCisgICAgICAgICMgY2FsbCBpdCBhIGNvdXBsZSB0aW1lcyBpZiBuZWNlc3NhcnkuCisgICAgICAgIGZvciBpIGluIGl0ZXJ0b29scy5jb3VudCgpOgorICAgICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgc29jay5iaW5kKChIT1NULCBwb3J0KSkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgaWYgZS5lcnJubyAhPSBlcnJuby5FQUREUklOVVNFIG9yIGkgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgYnJlYWsKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gIm50IiwgIldpbmRvd3Mgc3BlY2lmaWMiKQogICAgIGRlZiB0ZXN0X3NvY2tfaW9jdGwoc2VsZik6CkBAIC0xMTI2LDkgKzEyMjYsMTIgQEAKICAgICAgICAgc29ja2V0LmdldGFkZHJpbmZvKEhPU1QsIDgwKQogICAgICAgICBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSkKICAgICAgICAgIyB0ZXN0IGZhbWlseSBhbmQgc29ja3R5cGUgZmlsdGVycwotICAgICAgICBpbmZvcyA9IHNvY2tldC5nZXRhZGRyaW5mbyhIT1NULCBOb25lLCBzb2NrZXQuQUZfSU5FVCkKLSAgICAgICAgZm9yIGZhbWlseSwgXywgXywgXywgXyBpbiBpbmZvczoKKyAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgODAsIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pCisgICAgICAgIGZvciBmYW1pbHksIHR5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihmYW1pbHkpLCAnQWRkcmVzc0ZhbWlseS5BRl9JTkVUJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHlwZSksICdTb2NrZXRLaW5kLlNPQ0tfU1RSRUFNJykKICAgICAgICAgaW5mb3MgPSBzb2NrZXQuZ2V0YWRkcmluZm8oSE9TVCwgTm9uZSwgMCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBmb3IgXywgc29ja3R5cGUsIF8sIF8sIF8gaW4gaW5mb3M6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNvY2t0eXBlLCBzb2NrZXQuU09DS19TVFJFQU0pCkBAIC0xMTc2LDE3ICsxMjc5LDE2IEBACiAKICAgICBkZWYgdGVzdF9nZXRuYW1laW5mbyhzZWxmKToKICAgICAgICAgIyBvbmx5IElQIGFkZHJlc3NlcyBhcmUgYWxsb3dlZAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywgKCdtYWlsLnB5dGhvbi5vcmcnLDApLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrZXQuZ2V0bmFtZWluZm8sICgnbWFpbC5weXRob24ub3JnJywwKSwgMCkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgnbmV0d29yaycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICduZXR3b3JrIGlzIG5vdCBlbmFibGVkJykKICAgICBkZWYgdGVzdF9pZG5hKHNlbGYpOgotICAgICAgICAjIENoZWNrIGZvciBpbnRlcm5ldCBhY2Nlc3MgYmVmb3JlIHJ1bm5pbmcgdGVzdCAoaXNzdWUgIzEyODA0KS4KLSAgICAgICAgdHJ5OgorICAgICAgICAjIENoZWNrIGZvciBpbnRlcm5ldCBhY2Nlc3MgYmVmb3JlIHJ1bm5pbmcgdGVzdAorICAgICAgICAjIChpc3N1ZSAjMTI4MDQsIGlzc3VlICMyNTEzOCkuCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoJ3B5dGhvbi5vcmcnKToKICAgICAgICAgICAgIHNvY2tldC5nZXRob3N0YnluYW1lKCdweXRob24ub3JnJykKLSAgICAgICAgZXhjZXB0IHNvY2tldC5nYWllcnJvciBhcyBlOgotICAgICAgICAgICAgaWYgZS5lcnJubyA9PSBzb2NrZXQuRUFJX05PREFUQToKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdpbnRlcm5ldCBhY2Nlc3MgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisKICAgICAgICAgIyB0aGVzZSBzaG91bGQgYWxsIGJlIHN1Y2Nlc3NmdWwKICAgICAgICAgZG9tYWluID0gJ9C40YHQv9GL0YLQsNC90LjQtS5weXRob250ZXN0Lm5ldCcKICAgICAgICAgc29ja2V0LmdldGhvc3RieW5hbWUoZG9tYWluKQpAQCAtMTI3Miw2ICsxMzc0LDExIEBACiAgICAgICAgIHdpdGggc29jazoKICAgICAgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgcGlja2xlLmR1bXBzLCBzb2NrLCBwcm90b2NvbCkKKyAgICAgICAgZm9yIHByb3RvY29sIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmYW1pbHkgPSBwaWNrbGUubG9hZHMocGlja2xlLmR1bXBzKHNvY2tldC5BRl9JTkVULCBwcm90b2NvbCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhbWlseSwgc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICB0eXBlID0gcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhzb2NrZXQuU09DS19TVFJFQU0sIHByb3RvY29sKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZSwgc29ja2V0LlNPQ0tfU1RSRUFNKQogCiAgICAgZGVmIHRlc3RfbGlzdGVuX2JhY2tsb2coc2VsZik6CiAgICAgICAgIGZvciBiYWNrbG9nIGluIDAsIC0xOgpAQCAtMTI5MiwxMCArMTM5OSwzMSBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN1cHBvcnQuSVBWNl9FTkFCTEVELCAnSVB2NiByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCiAgICAgZGVmIHRlc3RfZmxvd2luZm8oc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNvY2tldC5nZXRuYW1laW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKCc6OjEnLDAsIDB4ZmZmZmZmZmYpLCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAoc3VwcG9ydC5IT1NUdjYsIDAsIDB4ZmZmZmZmZmYpLCAwKQogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQ2LCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzLmJpbmQsICgnOjoxJywgMCwgLTEwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHMuYmluZCwgKHN1cHBvcnQuSE9TVHY2LCAwLCAtMTApKQogCisgICAgZGVmIHRlc3Rfc3RyX2Zvcl9lbnVtcyhzZWxmKToKKyAgICAgICAgIyBNYWtlIHN1cmUgdGhhdCB0aGUgQUZfKiBhbmQgU09DS18qIGNvbnN0YW50cyBoYXZlIGVudW0tbGlrZSBzdHJpbmcKKyAgICAgICAgIyByZXBycy4KKyAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzLmZhbWlseSksICdBZGRyZXNzRmFtaWx5LkFGX0lORVQnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIocy50eXBlKSwgJ1NvY2tldEtpbmQuU09DS19TVFJFQU0nKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICdudCcsICdXaWxsIG5vdCB3b3JrIG9uIFdpbmRvd3MnKQorICAgIGRlZiB0ZXN0X3Vrbm93bl9zb2NrZXRfZmFtaWx5X3JlcHIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHdoZW4gY3JlYXRlZCB3aXRoIGEgZmFtaWx5IHRoYXQncyBub3Qgb25lIG9mIHRoZSBrbm93bgorICAgICAgICAjIEFGXyovU09DS18qIGNvbnN0YW50cywgc29ja2V0LmZhbWlseSBqdXN0IHJldHVybnMgdGhlIG51bWJlci4KKyAgICAgICAgIworICAgICAgICAjIFRvIGRvIHRoaXMgd2UgZm9vbCBzb2NrZXQuc29ja2V0IGludG8gYmVsaWV2aW5nIGl0IGFscmVhZHkgaGFzIGFuCisgICAgICAgICMgb3BlbiBmZCBiZWNhdXNlIG9uIHRoaXMgcGF0aCBpdCBkb2Vzbid0IGFjdHVhbGx5IHZlcmlmeSB0aGUgZmFtaWx5IGFuZAorICAgICAgICAjIHR5cGUgYW5kIHBvcHVsYXRlcyB0aGUgc29ja2V0IG9iamVjdC4KKyAgICAgICAgIworICAgICAgICAjIE9uIFdpbmRvd3MgdGhpcyB0cmljayB3b24ndCB3b3JrLCBzbyB0aGUgdGVzdCBpcyBza2lwcGVkLgorICAgICAgICBmZCwgXyA9IHRlbXBmaWxlLm1rc3RlbXAoKQorICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoZmFtaWx5PTQyNDI0LCB0eXBlPTEzMzMxLCBmaWxlbm89ZmQpIGFzIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMuZmFtaWx5LCA0MjQyNCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocy50eXBlLCAxMzMzMSkKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9TT0NLRVRfQ0FOLCAnU29ja2V0Q2FuIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljQ0FOVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xMzA1LDEwICsxNDMzLDM1IEBACiAgICAgICAgIHNvY2tldC5QRl9DQU4KICAgICAgICAgc29ja2V0LkNBTl9SQVcKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RCQ01Db25zdGFudHMoc2VsZik6CisgICAgICAgIHNvY2tldC5DQU5fQkNNCisKKyAgICAgICAgIyBvcGNvZGVzCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NFVFVQICAgICAjIGNyZWF0ZSAoY3ljbGljKSB0cmFuc21pc3Npb24gdGFzaworICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9ERUxFVEUgICAgIyByZW1vdmUgKGN5Y2xpYykgdHJhbnNtaXNzaW9uIHRhc2sKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfUkVBRCAgICAgICMgcmVhZCBwcm9wZXJ0aWVzIG9mIChjeWNsaWMpIHRyYW5zbWlzc2lvbiB0YXNrCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1RYX1NFTkQgICAgICAjIHNlbmQgb25lIENBTiBmcmFtZQorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9TRVRVUCAgICAgIyBjcmVhdGUgUlggY29udGVudCBmaWx0ZXIgc3Vic2NyaXB0aW9uCisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX0RFTEVURSAgICAjIHJlbW92ZSBSWCBjb250ZW50IGZpbHRlciBzdWJzY3JpcHRpb24KKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfUkVBRCAgICAgICMgcmVhZCBwcm9wZXJ0aWVzIG9mIFJYIGNvbnRlbnQgZmlsdGVyIHN1YnNjcmlwdGlvbgorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9UWF9TVEFUVVMgICAgIyByZXBseSB0byBUWF9SRUFEIHJlcXVlc3QKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fVFhfRVhQSVJFRCAgICMgbm90aWZpY2F0aW9uIG9uIHBlcmZvcm1lZCB0cmFuc21pc3Npb25zIChjb3VudD0wKQorICAgICAgICBzb2NrZXQuQ0FOX0JDTV9SWF9TVEFUVVMgICAgIyByZXBseSB0byBSWF9SRUFEIHJlcXVlc3QKKyAgICAgICAgc29ja2V0LkNBTl9CQ01fUlhfVElNRU9VVCAgICMgY3ljbGljIG1lc3NhZ2UgaXMgYWJzZW50CisgICAgICAgIHNvY2tldC5DQU5fQkNNX1JYX0NIQU5HRUQgICAjIHVwZGF0ZWQgQ0FOIGZyYW1lIChkZXRlY3RlZCBjb250ZW50IGNoYW5nZSkKKwogICAgIGRlZiB0ZXN0Q3JlYXRlU29ja2V0KHNlbGYpOgogICAgICAgICB3aXRoIHNvY2tldC5zb2NrZXQoc29ja2V0LlBGX0NBTiwgc29ja2V0LlNPQ0tfUkFXLCBzb2NrZXQuQ0FOX1JBVykgYXMgczoKICAgICAgICAgICAgIHBhc3MKIAorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX0JDTSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdzb2NrZXQuQ0FOX0JDTSByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LicpCisgICAgZGVmIHRlc3RDcmVhdGVCQ01Tb2NrZXQoc2VsZik6CisgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19ER1JBTSwgc29ja2V0LkNBTl9CQ00pIGFzIHM6CisgICAgICAgICAgICBwYXNzCisKICAgICBkZWYgdGVzdEJpbmRBbnkoc2VsZik6CiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgogICAgICAgICAgICAgcy5iaW5kKCgnJywgKSkKQEAgLTEzMTYsNyArMTQ2OSw3IEBACiAgICAgZGVmIHRlc3RUb29Mb25nSW50ZXJmYWNlTmFtZShzZWxmKToKICAgICAgICAgIyBtb3N0IHN5c3RlbXMgbGltaXQgSUZOQU1TSVogdG8gMTYsIHRha2UgMTAyNCB0byBiZSBzdXJlCiAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldChzb2NrZXQuUEZfQ0FOLCBzb2NrZXQuU09DS19SQVcsIHNvY2tldC5DQU5fUkFXKSBhcyBzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChzb2NrZXQuZXJyb3IsICdpbnRlcmZhY2UgbmFtZSB0b28gbG9uZycsCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KE9TRXJyb3IsICdpbnRlcmZhY2UgbmFtZSB0b28gbG9uZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuYmluZCwgKCd4JyAqIDEwMjQsKSkKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAiQ0FOX1JBV19MT09QQkFDSyIpLApAQCAtMTM0NCwxNiArMTQ5Nyw2IEBACiBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWQsICdUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQogY2xhc3MgQ0FOVGVzdChUaHJlYWRlZENBTlNvY2tldFRlc3QpOgogCi0gICAgIiIiVGhlIENBTiBmcmFtZSBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCBpbiA8bGludXgvY2FuLmg+OgotCi0gICAgc3RydWN0IGNhbl9mcmFtZSB7Ci0gICAgICAgIGNhbmlkX3QgY2FuX2lkOyAgLyogMzIgYml0IENBTl9JRCArIEVGRi9SVFIvRVJSIGZsYWdzICovCi0gICAgICAgIF9fdTggICAgY2FuX2RsYzsgLyogZGF0YSBsZW5ndGggY29kZTogMCAuLiA4ICovCi0gICAgICAgIF9fdTggICAgZGF0YVs4XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Ci0gICAgfTsKLSAgICAiIiIKLSAgICBjYW5fZnJhbWVfZm10ID0gIj1JQjN4OHMiCi0KICAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT0ncnVuVGVzdCcpOgogICAgICAgICBUaHJlYWRlZENBTlNvY2tldFRlc3QuX19pbml0X18oc2VsZiwgbWV0aG9kTmFtZT1tZXRob2ROYW1lKQogCkBAIC0xNDAyLDYgKzE1NDUsNDYgQEAKICAgICAgICAgc2VsZi5jZjIgPSBzZWxmLmJ1aWxkX2Nhbl9mcmFtZSgweDEyLCBiJ1x4OTlceDIyXHgzMycpCiAgICAgICAgIHNlbGYuY2xpLnNlbmQoc2VsZi5jZjIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkNBTl9CQ00iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0LkNBTl9CQ00gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiBfdGVzdEJDTShzZWxmKToKKyAgICAgICAgY2YsIGFkZHIgPSBzZWxmLmNsaS5yZWN2ZnJvbShzZWxmLmJ1ZnNpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jZiwgY2YpCisgICAgICAgIGNhbl9pZCwgY2FuX2RsYywgZGF0YSA9IHNlbGYuZGlzc2VjdF9jYW5fZnJhbWUoY2YpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5jYW5faWQsIGNhbl9pZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmRhdGEsIGRhdGEpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIkNBTl9CQ00iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnc29ja2V0LkNBTl9CQ00gcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4nKQorICAgIGRlZiB0ZXN0QkNNKHNlbGYpOgorICAgICAgICBiY20gPSBzb2NrZXQuc29ja2V0KHNvY2tldC5QRl9DQU4sIHNvY2tldC5TT0NLX0RHUkFNLCBzb2NrZXQuQ0FOX0JDTSkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGJjbS5jbG9zZSkKKyAgICAgICAgYmNtLmNvbm5lY3QoKHNlbGYuaW50ZXJmYWNlLCkpCisgICAgICAgIHNlbGYuY2FuX2lkID0gMHgxMjMKKyAgICAgICAgc2VsZi5kYXRhID0gYnl0ZXMoWzB4YzAsIDB4ZmYsIDB4ZWVdKQorICAgICAgICBzZWxmLmNmID0gc2VsZi5idWlsZF9jYW5fZnJhbWUoc2VsZi5jYW5faWQsIHNlbGYuZGF0YSkKKyAgICAgICAgb3Bjb2RlID0gc29ja2V0LkNBTl9CQ01fVFhfU0VORAorICAgICAgICBmbGFncyA9IDAKKyAgICAgICAgY291bnQgPSAwCisgICAgICAgIGl2YWwxX3NlY29uZHMgPSBpdmFsMV91c2VjID0gaXZhbDJfc2Vjb25kcyA9IGl2YWwyX3VzZWMgPSAwCisgICAgICAgIGJjbV9jYW5faWQgPSAweDAyMjIKKyAgICAgICAgbmZyYW1lcyA9IDEKKyAgICAgICAgYXNzZXJ0IGxlbihzZWxmLmNmKSA9PSAxNgorICAgICAgICBoZWFkZXIgPSBzdHJ1Y3QucGFjayhzZWxmLmJjbV9jbWRfbXNnX2ZtdCwKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLAorICAgICAgICAgICAgICAgICAgICBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgY291bnQsCisgICAgICAgICAgICAgICAgICAgIGl2YWwxX3NlY29uZHMsCisgICAgICAgICAgICAgICAgICAgIGl2YWwxX3VzZWMsCisgICAgICAgICAgICAgICAgICAgIGl2YWwyX3NlY29uZHMsCisgICAgICAgICAgICAgICAgICAgIGl2YWwyX3VzZWMsCisgICAgICAgICAgICAgICAgICAgIGJjbV9jYW5faWQsCisgICAgICAgICAgICAgICAgICAgIG5mcmFtZXMsCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgaGVhZGVyX3BsdXNfZnJhbWUgPSBoZWFkZXIgKyBzZWxmLmNmCisgICAgICAgIGJ5dGVzX3NlbnQgPSBiY20uc2VuZChoZWFkZXJfcGx1c19mcmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChieXRlc19zZW50LCBsZW4oaGVhZGVyX3BsdXNfZnJhbWUpKQorCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKEhBVkVfU09DS0VUX1JEUywgJ1JEUyBzb2NrZXRzIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QuJykKIGNsYXNzIEJhc2ljUkRTVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNjI0LDcgKzE4MDcsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYsIGZpbGVubykKICAgICAgICAgIyBjbGlfY29ubiBjYW5ub3QgYmUgdXNlZCBhbnltb3JlLi4uCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNsaV9jb25uLl9jbG9zZWQpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCiAgICAgICAgIHNlbGYuY2xpX2Nvbm4uY2xvc2UoKQogICAgICAgICAjIC4uLmJ1dCB3ZSBjYW4gY3JlYXRlIGFub3RoZXIgc29ja2V0IHVzaW5nIHRoZSAoc3RpbGwgb3BlbikKICAgICAgICAgIyBmaWxlIGRlc2NyaXB0b3IKQEAgLTE5OTMsNyArMjE3Niw3IEBACiAgICAgZGVmIF90ZXN0U2VuZG1zZ0V4Y2Vzc0Ntc2dSZWplY3Qoc2VsZik6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvY2tldCwgIkNNU0dfU1BBQ0UiKToKICAgICAgICAgICAgICMgQ2FuIG9ubHkgc2VuZCBvbmUgaXRlbQotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgICAgICBzZWxmLnNlbmRtc2dUb1NlcnZlcihbTVNHXSwgWygwLCAwLCBiIiIpLCAoMCwgMCwgYiIiKV0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShjbS5leGNlcHRpb24uZXJybm8pCiAgICAgICAgIHNlbGYuc2VuZFRvU2VydmVyKGIiZG9uZSIpCkBAIC0yMDA0LDcgKzIxODcsNyBAQAogCiAgICAgZGVmIF90ZXN0U2VuZG1zZ0FmdGVyQ2xvc2Uoc2VsZik6CiAgICAgICAgIHNlbGYuY2xpX3NvY2suY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuc2VuZG1zZ1RvU2VydmVyLCBbTVNHXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5zZW5kbXNnVG9TZXJ2ZXIsIFtNU0ddKQogCiAKIGNsYXNzIFNlbmRtc2dTdHJlYW1UZXN0cyhTZW5kbXNnVGVzdHMpOgpAQCAtMjAzNyw3ICsyMjIwLDcgQEAKICAgICAjIExpbnV4IHN1cHBvcnRzIE1TR19ET05UV0FJVCB3aGVuIHNlbmRpbmcsIGJ1dCBpbiBnZW5lcmFsLCBpdAogICAgICMgb25seSB3b3JrcyB3aGVuIHJlY2VpdmluZy4gIENvdWxkIGFkZCBvdGhlciBwbGF0Zm9ybXMgaWYgdGhleQogICAgICMgc3VwcG9ydCBpdCB0b28uCi0gICAgQHNraXBXaXRoQ2xpZW50SWYoc3lzLnBsYXRmb3JtIG5vdCBpbiB7ImxpbnV4MiJ9LAorICAgIEBza2lwV2l0aENsaWVudElmKHN5cy5wbGF0Zm9ybSBub3QgaW4geyJsaW51eCJ9LAogICAgICAgICAgICAgICAgICAgICAgICJNU0dfRE9OVFdBSVQgbm90IGtub3duIHRvIHdvcmsgb24gdGhpcyBwbGF0Zm9ybSB3aGVuICIKICAgICAgICAgICAgICAgICAgICAgICAic2VuZGluZyIpCiAgICAgZGVmIHRlc3RTZW5kbXNnRG9udFdhaXQoc2VsZik6CkBAIC0yMDQ4LDcgKzIyMzEsNyBAQAogICAgIEB0ZXN0U2VuZG1zZ0RvbnRXYWl0LmNsaWVudF9za2lwCiAgICAgZGVmIF90ZXN0U2VuZG1zZ0RvbnRXYWl0KHNlbGYpOgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VuZG1zZ1RvU2VydmVyKFtiImEiKjUxMl0sIFtdLCBzb2NrZXQuTVNHX0RPTlRXQUlUKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihjbS5leGNlcHRpb24uZXJybm8sCkBAIC0yMDY4LDkgKzIyNTEsOSBAQAogICAgICAgICBwYXNzCiAKICAgICBkZWYgX3Rlc3RTZW5kbXNnTm9EZXN0QWRkcihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNlbGYuY2xpX3NvY2suc2VuZG1zZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgW01TR10pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfc29jay5zZW5kbXNnLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9zb2NrLnNlbmRtc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtNU0ddLCBbXSwgMCwgTm9uZSkKIAogCkBAIC0yMTU2LDcgKzIzMzksNyBAQAogICAgIGRlZiB0ZXN0UmVjdm1zZ0FmdGVyQ2xvc2Uoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCByZWN2bXNnW19pbnRvXSgpIGZhaWxzIG9uIGEgY2xvc2VkIHNvY2tldC4KICAgICAgICAgc2VsZi5zZXJ2X3NvY2suY2xvc2UoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNlbGYuZG9SZWN2bXNnLCBzZWxmLnNlcnZfc29jaywgMTAyNCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5kb1JlY3Ztc2csIHNlbGYuc2Vydl9zb2NrLCAxMDI0KQogCiAgICAgZGVmIF90ZXN0UmVjdm1zZ0FmdGVyQ2xvc2Uoc2VsZik6CiAgICAgICAgIHBhc3MKQEAgLTI1NTcsNiArMjc0MCw3IEBACiAgICAgICAgIHNlbGYuY3JlYXRlQW5kU2VuZEZEcygxKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gImRhcndpbiIsICJza2lwcGluZywgc2VlIGlzc3VlICMxMjk1OCIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYWl4IiksICJza2lwcGluZywgc2VlIGlzc3VlICMyMjM5NyIpCiAgICAgQHJlcXVpcmVBdHRycyhzb2NrZXQsICJDTVNHX1NQQUNFIikKICAgICBkZWYgdGVzdEZEUGFzc1NlcGFyYXRlKHNlbGYpOgogICAgICAgICAjIFBhc3MgdHdvIEZEcyBpbiB0d28gc2VwYXJhdGUgYXJyYXlzLiAgQXJyYXlzIG1heSBiZSBjb21iaW5lZApAQCAtMjU2Nyw2ICsyNzUxLDcgQEAKIAogICAgIEB0ZXN0RkRQYXNzU2VwYXJhdGUuY2xpZW50X3NraXAKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAiZGFyd2luIiwgInNraXBwaW5nLCBzZWUgaXNzdWUgIzEyOTU4IikKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCJhaXgiKSwgInNraXBwaW5nLCBzZWUgaXNzdWUgIzIyMzk3IikKICAgICBkZWYgX3Rlc3RGRFBhc3NTZXBhcmF0ZShzZWxmKToKICAgICAgICAgZmQwLCBmZDEgPSBzZWxmLm5ld0ZEcygyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtMjU3OSw2ICsyNzY0LDcgQEAKICAgICAgICAgICAgIGxlbihNU0cpKQogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gImRhcndpbiIsICJza2lwcGluZywgc2VlIGlzc3VlICMxMjk1OCIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYWl4IiksICJza2lwcGluZywgc2VlIGlzc3VlICMyMjM5NyIpCiAgICAgQHJlcXVpcmVBdHRycyhzb2NrZXQsICJDTVNHX1NQQUNFIikKICAgICBkZWYgdGVzdEZEUGFzc1NlcGFyYXRlTWluU3BhY2Uoc2VsZik6CiAgICAgICAgICMgUGFzcyB0d28gRkRzIGluIHR3byBzZXBhcmF0ZSBhcnJheXMsIHJlY2VpdmluZyB0aGVtIGludG8gdGhlCkBAIC0yNTkxLDYgKzI3NzcsNyBAQAogCiAgICAgQHRlc3RGRFBhc3NTZXBhcmF0ZU1pblNwYWNlLmNsaWVudF9za2lwCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gPT0gImRhcndpbiIsICJza2lwcGluZywgc2VlIGlzc3VlICMxMjk1OCIpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYWl4IiksICJza2lwcGluZywgc2VlIGlzc3VlICMyMjM5NyIpCiAgICAgZGVmIF90ZXN0RkRQYXNzU2VwYXJhdGVNaW5TcGFjZShzZWxmKToKICAgICAgICAgZmQwLCBmZDEgPSBzZWxmLm5ld0ZEcygyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKApAQCAtMjYwNyw3ICsyNzk0LDcgQEAKICAgICAgICAgIyBjYWxsIGZhaWxzLCBqdXN0IHNlbmQgbXNnIHdpdGggbm8gYW5jaWxsYXJ5IGRhdGEuCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG5ieXRlcyA9IHNlbGYuc2VuZG1zZ1RvU2VydmVyKFttc2ddLCBhbmNkYXRhKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICAjIENoZWNrIHRoYXQgaXQgd2FzIHRoZSBzeXN0ZW0gY2FsbCB0aGF0IGZhaWxlZAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGUuZXJybm8sIGludCkKICAgICAgICAgICAgIG5ieXRlcyA9IHNlbGYuc2VuZG1zZ1RvU2VydmVyKFttc2ddKQpAQCAtMjk4NSw3ICszMTcyLDcgQEAKICAgICAgICAgICAgICAgICAgIGFycmF5LmFycmF5KCJpIiwgW3NlbGYudHJhZmZpY19jbGFzc10pLnRvYnl0ZXMoKSArIGIiXHgwMCIpLAogICAgICAgICAgICAgICAgICAoc29ja2V0LklQUFJPVE9fSVBWNiwgc29ja2V0LklQVjZfSE9QTElNSVQsCiAgICAgICAgICAgICAgICAgICBhcnJheS5hcnJheSgiaSIsIFtzZWxmLmhvcF9saW1pdF0pKV0pCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlLmVycm5vLCBpbnQpCiAgICAgICAgICAgICBuYnl0ZXMgPSBzZWxmLnNlbmRtc2dUb1NlcnZlcigKICAgICAgICAgICAgICAgICBbTVNHXSwKQEAgLTM0NDMsMTAgKzM2MzAsMTAgQEAKICAgICAgICAgc2VsZi5zZXJ2LnNldHRpbWVvdXQoc2VsZi50aW1lb3V0KQogCiAgICAgZGVmIGNoZWNrSW50ZXJydXB0ZWRSZWN2KHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncykgcmFpc2VzIHNvY2tldC5lcnJvciB3aXRoIGFuCisgICAgICAgICMgQ2hlY2sgdGhhdCBmdW5jKCphcmdzLCAqKmt3YXJncykgcmFpc2VzIE9TRXJyb3Igd2l0aCBhbgogICAgICAgICAjIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwuCiAgICAgICAgIHNlbGYuc2V0QWxhcm0oc2VsZi5hbGFybV90aW1lKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKICAgICAgICAgc2VsZi5hc3NlcnROb3RJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbiwgc29ja2V0LnRpbWVvdXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FSU5UUikKQEAgLTM1MDMsOSArMzY5MCw5IEBACiAKICAgICBkZWYgY2hlY2tJbnRlcnJ1cHRlZFNlbmQoc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKICAgICAgICAgIyBDaGVjayB0aGF0IGZ1bmMoKmFyZ3MsICoqa3dhcmdzKSwgcnVuIGluIGEgbG9vcCwgcmFpc2VzCi0gICAgICAgICMgc29ja2V0LmVycm9yIHdpdGggYW4gZXJybm8gb2YgRUlOVFIgd2hlbiBpbnRlcnJ1cHRlZCBieSBhCisgICAgICAgICMgT1NFcnJvciB3aXRoIGFuIGVycm5vIG9mIEVJTlRSIHdoZW4gaW50ZXJydXB0ZWQgYnkgYQogICAgICAgICAjIHNpZ25hbC4KLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgICAgICBzZWxmLnNldEFsYXJtKHNlbGYuYWxhcm1fdGltZSkKICAgICAgICAgICAgICAgICBmdW5jKCphcmdzLCAqKmt3YXJncykKQEAgLTM2MDQsNyArMzc5MSw3IEBACiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIHNldHRpbmcgbm9uLWJsb2NraW5nIG1vZGUuIikKQEAgLTM2MzksNyArMzgyNiw3IEBACiAgICAgICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5zZXJ2LmFjY2VwdCgpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBlbmQgPSB0aW1lLnRpbWUoKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoKGVuZCAtIHN0YXJ0KSA8IDEuMCwgIkVycm9yIGNyZWF0aW5nIHdpdGggbm9uLWJsb2NraW5nIG1vZGUuIikKQEAgLTM2NjksMTMgKzM4NTYsMTQgQEAKICAgICAgICAgc2VsZi5zZXJ2LnNldGJsb2NraW5nKDApCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGNvbm4sIGFkZHIgPSBzZWxmLnNlcnYuYWNjZXB0KCkKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoIkVycm9yIHRyeWluZyB0byBkbyBub24tYmxvY2tpbmcgYWNjZXB0LiIpCiAgICAgICAgIHJlYWQsIHdyaXRlLCBlcnIgPSBzZWxlY3Quc2VsZWN0KFtzZWxmLnNlcnZdLCBbXSwgW10pCiAgICAgICAgIGlmIHNlbGYuc2VydiBpbiByZWFkOgogICAgICAgICAgICAgY29ubiwgYWRkciA9IHNlbGYuc2Vydi5hY2NlcHQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoY29ubi5nZXR0aW1lb3V0KCkpCiAgICAgICAgICAgICBjb25uLmNsb3NlKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXJyb3IgdHJ5aW5nIHRvIGRvIGFjY2VwdCBhZnRlciBzZWxlY3QuIikKQEAgLTM2OTksNyArMzg4Nyw3IEBACiAgICAgICAgIGNvbm4uc2V0YmxvY2tpbmcoMCkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbXNnID0gY29ubi5yZWN2KGxlbihNU0cpKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiRXJyb3IgdHJ5aW5nIHRvIGRvIG5vbi1ibG9ja2luZyByZWN2LiIpCkBAIC0zNzgyLDcgKzM5NzAsNyBAQAogICAgICAgICAjIEZpcnN0IHJlYWQgcmFpc2VzIGEgdGltZW91dAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQudGltZW91dCwgc2VsZi5yZWFkX2ZpbGUucmVhZCwgMSkKICAgICAgICAgIyBTZWNvbmQgcmVhZCBpcyBkaXNhbGxvd2VkCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY3R4OgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGN0eDoKICAgICAgICAgICAgIHNlbGYucmVhZF9maWxlLnJlYWQoMSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigiY2Fubm90IHJlYWQgZnJvbSB0aW1lZCBvdXQgb2JqZWN0Iiwgc3RyKGN0eC5leGNlcHRpb24pKQogCkBAIC0zODc0LDcgKzQwNjIsNyBAQAogICAgICAgICBzZWxmLnJlYWRfZmlsZS5jbG9zZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNlbGYucmVhZF9maWxlLmZpbGVubykKICAgICAgICAgc2VsZi5jbGlfY29ubi5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfY29ubi5nZXRzb2NrbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc2VsZi5jbGlfY29ubi5nZXRzb2NrbmFtZSkKIAogICAgIGRlZiBfdGVzdFJlYWxDbG9zZShzZWxmKToKICAgICAgICAgcGFzcwpAQCAtMzkxMSw3ICs0MDk5LDcgQEAKIAogICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgX3JhaXNlX2VpbnRyKCk6Ci0gICAgICAgIHJhaXNlIHNvY2tldC5lcnJvcihlcnJuby5FSU5UUiwgImludGVycnVwdGVkIikKKyAgICAgICAgcmFpc2UgT1NFcnJvcihlcnJuby5FSU5UUiwgImludGVycnVwdGVkIikKIAogICAgIGRlZiBfdGV4dGlvd3JhcF9tb2NrX3NvY2tldChzZWxmLCBtb2NrLCBidWZmZXJpbmc9LTEpOgogICAgICAgICByYXcgPSBzb2NrZXQuU29ja2V0SU8obW9jaywgInIiKQpAQCAtNDAyMyw3ICs0MjExLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtc2csIHNlbGYucmVhZF9tc2cpCiAgICAgICAgICMgLi4udW50aWwgdGhlIGZpbGUgaXMgaXRzZWxmIGNsb3NlZAogICAgICAgICBzZWxmLnJlYWRfZmlsZS5jbG9zZSgpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc2VsZi5jbGlfY29ubi5yZWN2LCAxMDI0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzZWxmLmNsaV9jb25uLnJlY3YsIDEwMjQpCiAKICAgICBkZWYgX3Rlc3RNYWtlZmlsZUNsb3NlKHNlbGYpOgogICAgICAgICBzZWxmLndyaXRlX2ZpbGUud3JpdGUoc2VsZi53cml0ZV9tc2cpCkBAIC00MTcyLDcgKzQzNjAsNyBAQAogICAgICAgICBwb3J0ID0gc3VwcG9ydC5maW5kX3VudXNlZF9wb3J0KCkKICAgICAgICAgY2xpID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoY2xpLmNsb3NlKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjbGkuY29ubmVjdCgoSE9TVCwgcG9ydCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmVycm5vLCBlcnJuby5FQ09OTlJFRlVTRUQpCiAKQEAgLTQxODAsNyArNDM2OCw3IEBACiAgICAgICAgICMgSXNzdWUgIzk3OTI6IGVycm9ycyByYWlzZWQgYnkgY3JlYXRlX2Nvbm5lY3Rpb24oKSBzaG91bGQgaGF2ZQogICAgICAgICAjIGEgcHJvcGVyIGVycm5vIGF0dHJpYnV0ZS4KICAgICAgICAgcG9ydCA9IHN1cHBvcnQuZmluZF91bnVzZWRfcG9ydCgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yKSBhcyBjbToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yKSBhcyBjbToKICAgICAgICAgICAgIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbigoSE9TVCwgcG9ydCkpCiAKICAgICAgICAgIyBJc3N1ZSAjMTYyNTc6IGNyZWF0ZV9jb25uZWN0aW9uKCkgY2FsbHMgZ2V0YWRkcmluZm8oKSBhZ2FpbnN0CkBAIC00MzI4LDcgKzQ1MTYsNyBAQAogICAgICAgICAgICAgZm9vID0gc2VsZi5zZXJ2LmFjY2VwdCgpCiAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHRpbWVvdXQgaW5zdGVhZCBvZiBlcnJvciAoVENQKSIpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgb2sgPSBUcnVlCiAgICAgICAgIGV4Y2VwdDoKICAgICAgICAgICAgIHNlbGYuZmFpbCgiY2F1Z2h0IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIChUQ1ApIikKQEAgLTQzODUsNyArNDU3Myw3IEBACiAgICAgICAgICAgICBmb28gPSBzZWxmLnNlcnYucmVjdigxMDI0KQogICAgICAgICBleGNlcHQgc29ja2V0LnRpbWVvdXQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB0aW1lb3V0IGluc3RlYWQgb2YgZXJyb3IgKFVEUCkiKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIG9rID0gVHJ1ZQogICAgICAgICBleGNlcHQ6CiAgICAgICAgICAgICBzZWxmLmZhaWwoImNhdWdodCB1bmV4cGVjdGVkIGV4Y2VwdGlvbiAoVURQKSIpCkBAIC00Mzk1LDEwICs0NTgzLDEwIEBACiBjbGFzcyBUZXN0RXhjZXB0aW9ucyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdEV4Y2VwdGlvblRyZWUoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5lcnJvciwgRXhjZXB0aW9uKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmhlcnJvciwgc29ja2V0LmVycm9yKSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmdhaWVycm9yLCBzb2NrZXQuZXJyb3IpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhzb2NrZXQudGltZW91dCwgc29ja2V0LmVycm9yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3MoT1NFcnJvciwgRXhjZXB0aW9uKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzc3ViY2xhc3Moc29ja2V0LmhlcnJvciwgT1NFcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC5nYWllcnJvciwgT1NFcnJvcikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShpc3N1YmNsYXNzKHNvY2tldC50aW1lb3V0LCBPU0Vycm9yKSkKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICdsaW51eCcsICdMaW51eCBzcGVjaWZpYyB0ZXN0JykKIGNsYXNzIFRlc3RMaW51eEFic3RyYWN0TmFtZXNwYWNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQ0MjUsNyArNDYxMyw3IEBACiAgICAgZGVmIHRlc3ROYW1lT3ZlcmZsb3coc2VsZik6CiAgICAgICAgIGFkZHJlc3MgPSAiXHgwMCIgKyAiaCIgKiBzZWxmLlVOSVhfUEFUSF9NQVgKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9VTklYLCBzb2NrZXQuU09DS19TVFJFQU0pIGFzIHM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHMuYmluZCwgYWRkcmVzcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHMuYmluZCwgYWRkcmVzcykKIAogICAgIGRlZiB0ZXN0U3RyTmFtZShzZWxmKToKICAgICAgICAgIyBDaGVjayB0aGF0IGFuIGFic3RyYWN0IG5hbWUgY2FuIGJlIHBhc3NlZCBhcyBhIHN0cmluZy4KQEAgLTQ0NjMsNyArNDY1MSw3IEBACiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBzdHIoZSkgPT0gIkFGX1VOSVggcGF0aCB0b28gbG9uZyI6CiAgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgKLSAgICAgICAgICAgICAgICAgICAgIlBhdGhuYW1lIHswIWF9IGlzIHRvbyBsb25nIHRvIHNlcnZlIGFzIGEgQUZfVU5JWCBwYXRoIgorICAgICAgICAgICAgICAgICAgICAiUGF0aG5hbWUgezAhYX0gaXMgdG9vIGxvbmcgdG8gc2VydmUgYXMgYW4gQUZfVU5JWCBwYXRoIgogICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHBhdGgpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZQpAQCAtNDY4Miw3ICs0ODcwLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKICAgICAgICAgIyBleGNlcHRpb24gaW5zaWRlIHdpdGggYmxvY2sKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKIAogICAgIGRlZiB0ZXN0Q3JlYXRlQ29ubmVjdGlvbkJhc2Uoc2VsZik6CkBAIC00NzEwLDE5ICs0ODk4LDc2IEBACiAgICAgICAgIHdpdGggc29ja2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHJlc3MpIGFzIHNvY2s6CiAgICAgICAgICAgICBzb2NrLmNsb3NlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNvY2suX2Nsb3NlZCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzb2NrLnNlbmRhbGwsIGInZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc29jay5zZW5kYWxsLCBiJ2ZvbycpCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX0NMT0VYRUMiKSwKLSAgICAgICAgICAgICAgICAgICAgICJTT0NLX0NMT0VYRUMgbm90IGRlZmluZWQiKQotQHVuaXR0ZXN0LnNraXBVbmxlc3MoZmNudGwsICJtb2R1bGUgZmNudGwgbm90IGF2YWlsYWJsZSIpCi1jbGFzcyBDbG9leGVjQ29uc3RhbnRUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIEluaGVyaXRhbmNlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzb2NrZXQsICJTT0NLX0NMT0VYRUMiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU09DS19DTE9FWEVDIG5vdCBkZWZpbmVkIikKICAgICBAc3VwcG9ydC5yZXF1aXJlc19saW51eF92ZXJzaW9uKDIsIDYsIDI4KQogICAgIGRlZiB0ZXN0X1NPQ0tfQ0xPRVhFQyhzZWxmKToKICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0LlNPQ0tfU1RSRUFNIHwgc29ja2V0LlNPQ0tfQ0xPRVhFQykgYXMgczoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzLnR5cGUgJiBzb2NrZXQuU09DS19DTE9FWEVDKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZjbnRsLmZjbnRsKHMsIGZjbnRsLkZfR0VURkQpICYgZmNudGwuRkRfQ0xPRVhFQykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uocy5nZXRfaW5oZXJpdGFibGUoKSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRfaW5oZXJpdGFibGUoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2R1cChzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBuZXdzb2NrID0gc29jay5kdXAoKQorICAgICAgICAgICAgc29jay5jbG9zZSgpCisgICAgICAgICAgICB3aXRoIG5ld3NvY2s6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXdzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X3NldF9pbmhlcml0YWJsZShzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShUcnVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBUcnVlKQorCisgICAgICAgICAgICBzb2NrLnNldF9pbmhlcml0YWJsZShGYWxzZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKGZjbnRsIGlzIE5vbmUsICJuZWVkIGZjbnRsIikKKyAgICBkZWYgdGVzdF9nZXRfaW5oZXJpdGFibGVfY2xvZXhlYyhzZWxmKToKKyAgICAgICAgc29jayA9IHNvY2tldC5zb2NrZXQoKQorICAgICAgICB3aXRoIHNvY2s6CisgICAgICAgICAgICBmZCA9IHNvY2suZmlsZW5vKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29jay5nZXRfaW5oZXJpdGFibGUoKSwgRmFsc2UpCisKKyAgICAgICAgICAgICMgY2xlYXIgRkRfQ0xPRVhFQyBmbGFnCisgICAgICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKQorICAgICAgICAgICAgZmxhZ3MgJj0gfmZjbnRsLkZEX0NMT0VYRUMKKyAgICAgICAgICAgIGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX1NFVEZELCBmbGFncykKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb2NrLmdldF9pbmhlcml0YWJsZSgpLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihmY250bCBpcyBOb25lLCAibmVlZCBmY250bCIpCisgICAgZGVmIHRlc3Rfc2V0X2luaGVyaXRhYmxlX2Nsb2V4ZWMoc2VsZik6CisgICAgICAgIHNvY2sgPSBzb2NrZXQuc29ja2V0KCkKKyAgICAgICAgd2l0aCBzb2NrOgorICAgICAgICAgICAgZmQgPSBzb2NrLmZpbGVubygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZjbnRsLkZEX0NMT0VYRUMpCisKKyAgICAgICAgICAgIHNvY2suc2V0X2luaGVyaXRhYmxlKFRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZjbnRsLmZjbnRsKGZkLCBmY250bC5GX0dFVEZEKSAmIGZjbnRsLkZEX0NMT0VYRUMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApCisKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIoc29ja2V0LCAic29ja2V0cGFpciIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJuZWVkIHNvY2tldC5zb2NrZXRwYWlyKCkiKQorICAgIGRlZiB0ZXN0X3NvY2tldHBhaXIoc2VsZik6CisgICAgICAgIHMxLCBzMiA9IHNvY2tldC5zb2NrZXRwYWlyKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHMxLmNsb3NlKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoczIuY2xvc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoczEuZ2V0X2luaGVyaXRhYmxlKCksIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMyLmdldF9pbmhlcml0YWJsZSgpLCBGYWxzZSkKIAogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNvY2tldCwgIlNPQ0tfTk9OQkxPQ0siKSwKQEAgLTQ4OTEsNyArNTEzNiw3IEBACiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQXR0cmlidXRlc1Rlc3QsCiAgICAgICAgIE5ldHdvcmtDb25uZWN0aW9uQmVoYXZpb3VyVGVzdCwKICAgICAgICAgQ29udGV4dE1hbmFnZXJzVGVzdCwKLSAgICAgICAgQ2xvZXhlY0NvbnN0YW50VGVzdCwKKyAgICAgICAgSW5oZXJpdGFuY2VUZXN0LAogICAgICAgICBOb25ibG9ja0NvbnN0YW50VGVzdAogICAgIF0pCiAgICAgdGVzdHMuYXBwZW5kKEJhc2ljU29ja2V0UGFpclRlc3QpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NvY2tldHNlcnZlci5weSBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CmluZGV4IDU5ZDhlNWQuLjMyNWQ0ODUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc29ja2V0c2VydmVyLnB5CkBAIC0zLDcgKzMsNiBAQAogIiIiCiAKIGltcG9ydCBjb250ZXh0bGliCi1pbXBvcnQgaW1wCiBpbXBvcnQgb3MKIGltcG9ydCBzZWxlY3QKIGltcG9ydCBzaWduYWwKQEAgLTI5LDcgKzI4LDcgQEAKIEhBVkVfVU5JWF9TT0NLRVRTID0gaGFzYXR0cihzb2NrZXQsICJBRl9VTklYIikKIHJlcXVpcmVzX3VuaXhfc29ja2V0cyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9VTklYX1NPQ0tFVFMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlcyBVbml4IHNvY2tldHMnKQotSEFWRV9GT1JLSU5HID0gaGFzYXR0cihvcywgImZvcmsiKSBhbmQgb3MubmFtZSAhPSAib3MyIgorSEFWRV9GT1JLSU5HID0gaGFzYXR0cihvcywgImZvcmsiKQogcmVxdWlyZXNfZm9ya2luZyA9IHVuaXR0ZXN0LnNraXBVbmxlc3MoSEFWRV9GT1JLSU5HLCAncmVxdWlyZXMgZm9ya2luZycpCiAKIGRlZiBzaWduYWxfYWxhcm0obik6CkBAIC04NSw3ICs4NCw3IEBACiAgICAgICAgIGZvciBmbiBpbiBzZWxmLnRlc3RfZmlsZXM6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MucmVtb3ZlKGZuKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBzZWxmLnRlc3RfZmlsZXNbOl0gPSBbXQogCkBAIC05NiwyMSArOTUsNyBAQAogICAgICAgICAgICAgIyBYWFg6IFdlIG5lZWQgYSB3YXkgdG8gdGVsbCBBRl9VTklYIHRvIHBpY2sgaXRzIG93biBuYW1lCiAgICAgICAgICAgICAjIGxpa2UgQUZfSU5FVCBwcm92aWRlcyBwb3J0PT0wLgogICAgICAgICAgICAgZGlyID0gTm9uZQotICAgICAgICAgICAgaWYgb3MubmFtZSA9PSAnb3MyJzoKLSAgICAgICAgICAgICAgICBkaXIgPSAnXHNvY2tldCcKICAgICAgICAgICAgIGZuID0gdGVtcGZpbGUubWt0ZW1wKHByZWZpeD0ndW5peF9zb2NrZXQuJywgZGlyPWRpcikKLSAgICAgICAgICAgIGlmIG9zLm5hbWUgPT0gJ29zMic6Ci0gICAgICAgICAgICAgICAgIyBBRl9VTklYIHNvY2tldCBuYW1lcyBvbiBPUy8yIHJlcXVpcmUgYSBzcGVjaWZpYyBwcmVmaXgKLSAgICAgICAgICAgICAgICAjIHdoaWNoIGNhbid0IGluY2x1ZGUgYSBkcml2ZSBsZXR0ZXIgYW5kIG11c3QgYWxzbyB1c2UKLSAgICAgICAgICAgICAgICAjIGJhY2tzbGFzaGVzIGFzIGRpcmVjdG9yeSBzZXBhcmF0b3JzCi0gICAgICAgICAgICAgICAgaWYgZm5bMV0gPT0gJzonOgotICAgICAgICAgICAgICAgICAgICBmbiA9IGZuWzI6XQotICAgICAgICAgICAgICAgIGlmIGZuWzBdIGluIChvcy5zZXAsIG9zLmFsdHNlcCk6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm5bMTpdCi0gICAgICAgICAgICAgICAgaWYgb3Muc2VwID09ICcvJzoKLSAgICAgICAgICAgICAgICAgICAgZm4gPSBmbi5yZXBsYWNlKG9zLnNlcCwgb3MuYWx0c2VwKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGZuID0gZm4ucmVwbGFjZShvcy5hbHRzZXAsIG9zLnNlcCkKICAgICAgICAgICAgIHNlbGYudGVzdF9maWxlcy5hcHBlbmQoZm4pCiAgICAgICAgICAgICByZXR1cm4gZm4KIApAQCAtMTU5LDYgKzE0NCw3IEBACiAgICAgICAgIHNlcnZlci5zaHV0ZG93bigpCiAgICAgICAgIHQuam9pbigpCiAgICAgICAgIHNlcnZlci5zZXJ2ZXJfY2xvc2UoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKC0xLCBzZXJ2ZXIuc29ja2V0LmZpbGVubygpKQogICAgICAgICBpZiB2ZXJib3NlOiBwcmludCgiZG9uZSIpCiAKICAgICBkZWYgc3RyZWFtX2V4YW1pbmUoc2VsZiwgcHJvdG8sIGFkZHIpOgpAQCAtMzE2LDEzICszMDIsMjkgQEAKICAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICBzLnNlcnZlcl9jbG9zZSgpCiAKKyAgICBkZWYgdGVzdF90Y3BzZXJ2ZXJfYmluZF9sZWFrKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjQzNTogdGhlIHNlcnZlciBzb2NrZXQgd291bGRuJ3QgYmUgY2xvc2VkIGlmIGJpbmQoKS9saXN0ZW4oKQorICAgICAgICAjIGZhaWxlZC4KKyAgICAgICAgIyBDcmVhdGUgbWFueSBzZXJ2ZXJzIGZvciB3aGljaCBiaW5kKCkgd2lsbCBmYWlsLCB0byBzZWUgaWYgdGhpcyByZXN1bHQKKyAgICAgICAgIyBpbiBGRCBleGhhdXN0aW9uLgorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMDI0KToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvcik6CisgICAgICAgICAgICAgICAgc29ja2V0c2VydmVyLlRDUFNlcnZlcigoSE9TVCwgLTEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0c2VydmVyLlN0cmVhbVJlcXVlc3RIYW5kbGVyKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgaWYgaW1wLmxvY2tfaGVsZCgpOgotICAgICAgICAjIElmIHRoZSBpbXBvcnQgbG9jayBpcyBoZWxkLCB0aGUgdGhyZWFkcyB3aWxsIGhhbmcKLSAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoImNhbid0IHJ1biB3aGVuIGltcG9ydCBsb2NrIGlzIGhlbGQiKQogCi0gICAgdGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdChTb2NrZXRTZXJ2ZXJUZXN0KQorY2xhc3MgTWlzY1Rlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0ZXN0X2FsbChzZWxmKToKKyAgICAgICAgIyBvYmplY3RzIGRlZmluZWQgaW4gdGhlIG1vZHVsZSBzaG91bGQgYmUgaW4gX19hbGxfXworICAgICAgICBleHBlY3RlZCA9IFtdCisgICAgICAgIGZvciBuYW1lIGluIGRpcihzb2NrZXRzZXJ2ZXIpOgorICAgICAgICAgICAgaWYgbm90IG5hbWUuc3RhcnRzd2l0aCgnXycpOgorICAgICAgICAgICAgICAgIG1vZF9vYmplY3QgPSBnZXRhdHRyKHNvY2tldHNlcnZlciwgbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBnZXRhdHRyKG1vZF9vYmplY3QsICdfX21vZHVsZV9fJywgTm9uZSkgPT0gJ3NvY2tldHNlcnZlcic6CisgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkLmFwcGVuZChuYW1lKQorICAgICAgICBzZWxmLmFzc2VydENvdW50RXF1YWwoc29ja2V0c2VydmVyLl9fYWxsX18sIGV4cGVjdGVkKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF9zb3VyY2VfZW5jb2RpbmcucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlhN2M1NgotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3Rfc291cmNlX2VuY29kaW5nLnB5CkBAIC0wLDAgKzEsMTQ2IEBACisjIC0qLSBjb2Rpbmc6IGtvaTgtciAtKi0KKworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCB1bmxpbmssIHVubG9hZCwgcm10cmVlCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgb3MKK2ltcG9ydCBzeXMKK2ltcG9ydCBzdWJwcm9jZXNzCisKK2NsYXNzIFNvdXJjZUVuY29kaW5nVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9wZXAyNjMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAi8MnUz84iLmVuY29kZSgidXRmLTgiKSwKKyAgICAgICAgICAgIGInXHhkMFx4OWZceGQwXHhiOFx4ZDFceDgyXHhkMFx4YmVceGQwXHhiZCcKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgIlzwIi5lbmNvZGUoInV0Zi04IiksCisgICAgICAgICAgICBiJ1xcXHhkMFx4OWYnCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2NvbXBpbGVzdHJpbmcoc2VsZik6CisgICAgICAgICMgc2VlICMxODgyCisgICAgICAgIGMgPSBjb21waWxlKGIiXG4jIGNvZGluZzogdXRmLThcbnUgPSAnXHhjM1x4YjMnXG4iLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsndSddLCAnXHhmMycpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTIzMDEoc2VsZik6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvbXBpbGUoYiIjIGNvZGluZzogY3A5MzJcbnByaW50ICdceDk0XHg0ZSciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGV4Y2VwdCBTeW50YXhFcnJvciBhcyB2OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LnRleHQsICJwcmludCAnXHU1ZTc0J1xuIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZmFpbCgpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTQ2MjYoc2VsZik6CisgICAgICAgIGMgPSBjb21waWxlKCIjIGNvZGluZz1sYXRpbi0xXG5cdTAwYzYgPSAnXHUwMGM2JyIsICJkdW1teSIsICJleGVjIikKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGV4ZWMoYywgZCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkWydceGM2J10sICdceGM2JykKKworICAgIGRlZiB0ZXN0X2lzc3VlMzI5NyhzZWxmKToKKyAgICAgICAgYyA9IGNvbXBpbGUoImEsIGIgPSAnXFUwMDAxMDEwRicsICdcXFUwMDAxMDEwRiciLCAiZHVtbXkiLCAiZXhlYyIpCisgICAgICAgIGQgPSB7fQorICAgICAgICBleGVjKGMsIGQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFsnYSddLCBkWydiJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRbJ2EnXSksIGxlbihkWydiJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFzY2lpKGRbJ2EnXSksIGFzY2lpKGRbJ2InXSkpCisKKyAgICBkZWYgdGVzdF9pc3N1ZTc4MjAoc2VsZik6CisgICAgICAgICMgRW5zdXJlIHRoYXQgY2hlY2tfYm9tKCkgcmVzdG9yZXMgYWxsIGJ5dGVzIGluIHRoZSByaWdodCBvcmRlciBpZgorICAgICAgICAjIGNoZWNrX2JvbSgpIGZhaWxzIGluIHB5ZGVidWcgbW9kZTogYSBidWZmZXIgc3RhcnRzIHdpdGggdGhlIGZpcnN0CisgICAgICAgICMgYnl0ZSBvZiBhIHZhbGlkIEJPTSwgYnV0IG5leHQgYnl0ZXMgYXJlIGRpZmZlcmVudAorCisgICAgICAgICMgb25lIGJ5dGUgaW4gY29tbW9uIHdpdGggdGhlIFVURi0xNi1MRSBCT00KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGInXHhmZlx4MjAnKQorCisgICAgICAgICMgdHdvIGJ5dGVzIGluIGNvbW1vbiB3aXRoIHRoZSBVVEYtOCBCT00KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIGV2YWwsIGInXHhlZlx4YmJceDIwJykKKworICAgIGRlZiB0ZXN0XzIwNzMxKHNlbGYpOgorICAgICAgICBzdWIgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2RpbmcyMDczMS5weScpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgIGVyciA9IHN1Yi5jb21tdW5pY2F0ZSgpWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3ViLnJldHVybmNvZGUsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidTeW50YXhFcnJvcicsIGVycikKKworICAgIGRlZiB0ZXN0X2Vycm9yX21lc3NhZ2Uoc2VsZik6CisgICAgICAgIGNvbXBpbGUoYicjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICBjb21waWxlKGInXHhlZlx4YmJceGJmXG4nLCAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdmYWtlJyk6CisgICAgICAgICAgICBjb21waWxlKGInIyAtKi0gY29kaW5nOiBmYWtlIC0qLVxuJywgJ2R1bW15JywgJ2V4ZWMnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdpc28tODg1OS0xNScpOgorICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLAorICAgICAgICAgICAgICAgICAgICAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ0JPTScpOgorICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogaXNvLTg4NTktMTUgLSotXG4nLAorICAgICAgICAgICAgICAgICAgICAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ2Zha2UnKToKKyAgICAgICAgICAgIGNvbXBpbGUoYidceGVmXHhiYlx4YmYjIC0qLSBjb2Rpbmc6IGZha2UgLSotXG4nLCAnZHVtbXknLCAnZXhlYycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ0JPTScpOgorICAgICAgICAgICAgY29tcGlsZShiJ1x4ZWZceGJiXHhiZiMgLSotIGNvZGluZzogZmFrZSAtKi1cbicsICdkdW1teScsICdleGVjJykKKworICAgIGRlZiB0ZXN0X2JhZF9jb2Rpbmcoc2VsZik6CisgICAgICAgIG1vZHVsZV9uYW1lID0gJ2JhZF9jb2RpbmcnCisgICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCisKKyAgICBkZWYgdGVzdF9iYWRfY29kaW5nMihzZWxmKToKKyAgICAgICAgbW9kdWxlX25hbWUgPSAnYmFkX2NvZGluZzInCisgICAgICAgIHNlbGYudmVyaWZ5X2JhZF9tb2R1bGUobW9kdWxlX25hbWUpCisKKyAgICBkZWYgdmVyaWZ5X2JhZF9tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgX19pbXBvcnRfXywgJ3Rlc3QuJyArIG1vZHVsZV9uYW1lKQorCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pCisgICAgICAgIGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHBhdGgsIG1vZHVsZV9uYW1lICsgJy5weScpCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CisgICAgICAgICAgICBieXRlcyA9IGZwLnJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgY29tcGlsZSwgYnl0ZXMsIGZpbGVuYW1lLCAnZXhlYycpCisKKyAgICBkZWYgdGVzdF9leGVjX3ZhbGlkX2NvZGluZyhzZWxmKToKKyAgICAgICAgZCA9IHt9CisgICAgICAgIGV4ZWMoYicjIGNvZGluZzogY3A5NDlcbmEgPSAiXHhhYVx4YTciXG4nLCBkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRbJ2EnXSwgJ1x1MzA0NycpCisKKyAgICBkZWYgdGVzdF9maWxlX3BhcnNlKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTEzNDogYWxsIGVuY29kaW5ncyBvdXRzaWRlIGxhdGluLTEgYW5kIHV0Zi04IGZhaWwgb24KKyAgICAgICAgIyBtdWx0aWxpbmUgc3RyaW5ncyBhbmQgbG9uZyBsaW5lcyAoPjUxMiBjb2x1bW5zKQorICAgICAgICB1bmxvYWQoVEVTVEZOKQorICAgICAgICBmaWxlbmFtZSA9IFRFU1RGTiArICIucHkiCisgICAgICAgIGYgPSBvcGVuKGZpbGVuYW1lLCAidyIsIGVuY29kaW5nPSJjcDEyNTIiKQorICAgICAgICBzeXMucGF0aC5pbnNlcnQoMCwgb3MuY3VyZGlyKQorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aXRoIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZSgiIyAtKi0gY29kaW5nOiBjcDEyNTIgLSotXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIicnJ0Egc2hvcnQgc3RyaW5nXG4iKQorICAgICAgICAgICAgICAgIGYud3JpdGUoIicnJ1xuIikKKyAgICAgICAgICAgICAgICBmLndyaXRlKCInQSB2ZXJ5IGxvbmcgc3RyaW5nICVzJ1xuIiAlICgiWCIgKiAxMDAwKSkKKworICAgICAgICAgICAgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkKKyAgICAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCisgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUpCisgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAiYyIpCisgICAgICAgICAgICB1bmxpbmsoZmlsZW5hbWUgKyAibyIpCisgICAgICAgICAgICB1bmxvYWQoVEVTVEZOKQorICAgICAgICAgICAgcm10cmVlKCdfX3B5Y2FjaGVfXycpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9mcm9tX3N0cmluZyhzZWxmKToKKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTYyODkKKyAgICAgICAgaW5wdXQgPSAiIyBjb2Rpbmc6IGFzY2lpXG5cTntTTk9XTUFOfSIuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IpIGFzIGM6CisgICAgICAgICAgICBjb21waWxlKGlucHV0LCAiPHN0cmluZz4iLCAiZXhlYyIpCisgICAgICAgIGV4cGVjdGVkID0gIidhc2NpaScgY29kZWMgY2FuJ3QgZGVjb2RlIGJ5dGUgMHhlMiBpbiBwb3NpdGlvbiAxNjogIiBcCisgICAgICAgICAgICAgICAgICAgIm9yZGluYWwgbm90IGluIHJhbmdlKDEyOCkiCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjLmV4Y2VwdGlvbi5hcmdzWzBdLnN0YXJ0c3dpdGgoZXhwZWN0ZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNnPWMuZXhjZXB0aW9uLmFyZ3NbMF0pCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3B3ZC5weSBiL0xpYi90ZXN0L3Rlc3Rfc3B3ZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWE3YWIxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF9zcHdkLnB5CkBAIC0wLDAgKzEsNjAgQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKworc3B3ZCA9IHN1cHBvcnQuaW1wb3J0X21vZHVsZSgnc3B3ZCcpCisKKworQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2dldGV1aWQnKSBhbmQgb3MuZ2V0ZXVpZCgpID09IDAsCisgICAgICAgICAgICAgICAgICAgICAncm9vdCBwcml2aWxlZ2VzIHJlcXVpcmVkJykKK2NsYXNzIFRlc3RTcHdkUm9vdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9nZXRzcGFsbChzZWxmKToKKyAgICAgICAgZW50cmllcyA9IHNwd2QuZ2V0c3BhbGwoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cmllcywgbGlzdCkKKyAgICAgICAgZm9yIGVudHJ5IGluIGVudHJpZXM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnksIHNwd2Quc3RydWN0X3Nwd2QpCisKKyAgICBkZWYgdGVzdF9nZXRzcG5hbShzZWxmKToKKyAgICAgICAgZW50cmllcyA9IHNwd2QuZ2V0c3BhbGwoKQorICAgICAgICBpZiBub3QgZW50cmllczoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ2VtcHR5IHNoYWRvdyBwYXNzd29yZCBkYXRhYmFzZScpCisgICAgICAgIHJhbmRvbV9uYW1lID0gZW50cmllc1swXS5zcF9uYW1wCisgICAgICAgIGVudHJ5ID0gc3B3ZC5nZXRzcG5hbShyYW5kb21fbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LCBzcHdkLnN0cnVjdF9zcHdkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX25hbXAsIHJhbmRvbV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX25hbXAsIGVudHJ5WzBdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX25hbXAsIGVudHJ5LnNwX25hbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LnNwX3B3ZHAsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9wd2RwLCBlbnRyeVsxXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9wd2RwLCBlbnRyeS5zcF9wd2QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeS5zcF9sc3RjaGcsIGludCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlbnRyeS5zcF9sc3RjaGcsIGVudHJ5WzJdKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZW50cnkuc3BfbWluLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfbWluLCBlbnRyeVszXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LnNwX21heCwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX21heCwgZW50cnlbNF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeS5zcF93YXJuLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3Bfd2FybiwgZW50cnlbNV0pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeS5zcF9pbmFjdCwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX2luYWN0LCBlbnRyeVs2XSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVudHJ5LnNwX2V4cGlyZSwgaW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVudHJ5LnNwX2V4cGlyZSwgZW50cnlbN10pCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbnRyeS5zcF9mbGFnLCBpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZW50cnkuc3BfZmxhZywgZW50cnlbOF0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IpIGFzIGN4OgorICAgICAgICAgICAgc3B3ZC5nZXRzcG5hbSgnaW52YWxpZCB1c2VyIG5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjeC5leGNlcHRpb24pLCAiJ2dldHNwbmFtKCk6IG5hbWUgbm90IGZvdW5kJyIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3B3ZC5nZXRzcG5hbSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzcHdkLmdldHNwbmFtLCAwKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNwd2QuZ2V0c3BuYW0sIHJhbmRvbV9uYW1lLCAwKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBieXRlc19uYW1lID0gb3MuZnNlbmNvZGUocmFuZG9tX25hbWUpCisgICAgICAgIGV4Y2VwdCBVbmljb2RlRW5jb2RlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNwd2QuZ2V0c3BuYW0sIGJ5dGVzX25hbWUpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3NsLnB5IGIvTGliL3Rlc3QvdGVzdF9zc2wucHkKaW5kZXggNmZmMmM3Zi4uMTllZjM1NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zc2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zc2wucHkKQEAgLTYsNiArNiw3IEBACiBpbXBvcnQgc29ja2V0CiBpbXBvcnQgc2VsZWN0CiBpbXBvcnQgdGltZQoraW1wb3J0IGRhdGV0aW1lCiBpbXBvcnQgZ2MKIGltcG9ydCBvcwogaW1wb3J0IGVycm5vCkBAIC0yMCwxMyArMjEsNyBAQAogCiBzc2wgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoInNzbCIpCiAKLVBST1RPQ09MUyA9IFsKLSAgICBzc2wuUFJPVE9DT0xfU1NMdjMsCi0gICAgc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxCi1dCi1pZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYyJyk6Ci0gICAgUFJPVE9DT0xTLmFwcGVuZChzc2wuUFJPVE9DT0xfU1NMdjIpCi0KK1BST1RPQ09MUyA9IHNvcnRlZChzc2wuX1BST1RPQ09MX05BTUVTKQogSE9TVCA9IHN1cHBvcnQuSE9TVAogCiBkZWYgZGF0YV9maWxlKCpuYW1lKToKQEAgLTQ4LDggKzQzLDE4IEBACiBLRVlfUEFTU1dPUkQgPSAic29tZXBhc3MiCiBDQVBBVEggPSBkYXRhX2ZpbGUoImNhcGF0aCIpCiBCWVRFU19DQVBBVEggPSBvcy5mc2VuY29kZShDQVBBVEgpCitDQUZJTEVfTkVVUk9OSU8gPSBkYXRhX2ZpbGUoImNhcGF0aCIsICI0ZTEyOTVhMy4wIikKIENBRklMRV9DQUNFUlQgPSBkYXRhX2ZpbGUoImNhcGF0aCIsICI1ZWQzNmY5OS4wIikKIAorCisjIGVtcHR5IENSTAorQ1JMRklMRSA9IGRhdGFfZmlsZSgicmV2b2NhdGlvbi5jcmwiKQorCisjIFR3byBrZXlzIGFuZCBjZXJ0cyBzaWduZWQgYnkgdGhlIHNhbWUgQ0EgKGZvciBTTkkgdGVzdHMpCitTSUdORURfQ0VSVEZJTEUgPSBkYXRhX2ZpbGUoImtleWNlcnQzLnBlbSIpCitTSUdORURfQ0VSVEZJTEUyID0gZGF0YV9maWxlKCJrZXljZXJ0NC5wZW0iKQorU0lHTklOR19DQSA9IGRhdGFfZmlsZSgicHljYWNlcnQucGVtIikKKwogUkVNT1RFX0hPU1QgPSAic2VsZi1zaWduZWQucHl0aG9udGVzdC5uZXQiCiBSRU1PVEVfUk9PVF9DRVJUID0gZGF0YV9maWxlKCJzZWxmc2lnbmVkX3B5dGhvbnRlc3Rkb3RuZXQucGVtIikKIApAQCAtNjAsOSArNjUsMTAgQEAKIE5PS0lBQ0VSVCA9IGRhdGFfZmlsZSgibm9raWEucGVtIikKIE5VTExCWVRFQ0VSVCA9IGRhdGFfZmlsZSgibnVsbGJ5dGVjZXJ0LnBlbSIpCiAKLURIRklMRSA9IGRhdGFfZmlsZSgiZGg1MTIucGVtIikKK0RIRklMRSA9IGRhdGFfZmlsZSgiZGgxMDI0LnBlbSIpCiBCWVRFU19ESEZJTEUgPSBvcy5mc2VuY29kZShESEZJTEUpCiAKKwogZGVmIGhhbmRsZV9lcnJvcihwcmVmaXgpOgogICAgIGV4Y19mb3JtYXQgPSAnICcuam9pbih0cmFjZWJhY2suZm9ybWF0X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCkpKQogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTc2LDYgKzgyLDIzIEBACiAgICAgIyAwLjkuN2ggb3IgaGlnaGVyCiAgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgNywgOCwgMTUpCiAKK2RlZiBoYXZlX3ZlcmlmeV9mbGFncygpOgorICAgICMgMC45Ljggb3IgaGlnaGVyCisgICAgcmV0dXJuIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTyA+PSAoMCwgOSwgOCwgMCwgMTUpCisKK2RlZiBhc24xdGltZShjZXJ0X3RpbWUpOgorICAgICMgU29tZSB2ZXJzaW9ucyBvZiBPcGVuU1NMIGlnbm9yZSBzZWNvbmRzLCBzZWUgIzE4MjA3CisgICAgIyAwLjkuOC5pCisgICAgaWYgc3NsLl9PUEVOU1NMX0FQSV9WRVJTSU9OID09ICgwLCA5LCA4LCA5LCAxNSk6CisgICAgICAgIGZtdCA9ICIlYiAlZCAlSDolTTolUyAlWSBHTVQiCisgICAgICAgIGR0ID0gZGF0ZXRpbWUuZGF0ZXRpbWUuc3RycHRpbWUoY2VydF90aW1lLCBmbXQpCisgICAgICAgIGR0ID0gZHQucmVwbGFjZShzZWNvbmQ9MCkKKyAgICAgICAgY2VydF90aW1lID0gZHQuc3RyZnRpbWUoZm10KQorICAgICAgICAjICVkIGFkZHMgbGVhZGluZyB6ZXJvIGJ1dCBBU04xX1RJTUVfcHJpbnQoKSB1c2VzIGxlYWRpbmcgc3BhY2UKKyAgICAgICAgaWYgY2VydF90aW1lWzRdID09ICIwIjoKKyAgICAgICAgICAgIGNlcnRfdGltZSA9IGNlcnRfdGltZVs6NF0gKyAiICIgKyBjZXJ0X3RpbWVbNTpdCisKKyAgICByZXR1cm4gY2VydF90aW1lCiAKICMgSXNzdWUgIzk0MTU6IFVidW50dSBoaWphY2tzIHRoZWlyIE9wZW5TU0wgYW5kIGZvcmNlZnVsbHkgZGlzYWJsZXMgU1NMdjIKIGRlZiBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsKGZ1bmMpOgpAQCAtOTMsMTQgKzExNiwxMiBAQAogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBmdW5jCiAKK25lZWRzX3NuaSA9IHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLkhBU19TTkksICJTTkkgc3VwcG9ydCBuZWVkZWQgZm9yIHRoaXMgdGVzdCIpCisKIAogY2xhc3MgQmFzaWNTb2NrZXRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9jb25zdGFudHMoc2VsZik6Ci0gICAgICAgICNzc2wuUFJPVE9DT0xfU1NMdjIKLSAgICAgICAgc3NsLlBST1RPQ09MX1NTTHYyMwotICAgICAgICBzc2wuUFJPVE9DT0xfU1NMdjMKLSAgICAgICAgc3NsLlBST1RPQ09MX1RMU3YxCiAgICAgICAgIHNzbC5DRVJUX05PTkUKICAgICAgICAgc3NsLkNFUlRfT1BUSU9OQUwKICAgICAgICAgc3NsLkNFUlRfUkVRVUlSRUQKQEAgLTEzMyw4ICsxNTQsOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuUkFORF9ieXRlcywgLTUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHNzbC5SQU5EX3BzZXVkb19ieXRlcywgLTUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuUkFORF9lZ2QsIDEpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLlJBTkRfZWdkLCAnZm9vJywgMSkKKyAgICAgICAgaWYgaGFzYXR0cihzc2wsICdSQU5EX2VnZCcpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuUkFORF9lZ2QsIDEpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5SQU5EX2VnZCwgJ2ZvbycsIDEpCiAgICAgICAgIHNzbC5SQU5EX2FkZCgidGhpcyBpcyBhIHJhbmRvbSBzdHJpbmciLCA3NS4wKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgcG9zaXgnKQpAQCAtMTgyLDggKzIwNCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24nKSwpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdjb21tb25OYW1lJywgJ2xvY2FsaG9zdCcpLCkpCiAgICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnbm90QWZ0ZXInXSwgJ09jdCAgNSAyMzowMTo1NiAyMDIwIEdNVCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnbm90QmVmb3JlJ10sICdPY3QgIDggMjM6MDE6NTYgMjAxMCBHTVQnKQorICAgICAgICAjIE5vdGUgdGhlIG5leHQgdGhyZWUgYXNzZXJ0cyB3aWxsIGZhaWwgaWYgdGhlIGtleXMgYXJlIHJlZ2VuZXJhdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnbm90QWZ0ZXInXSwgYXNuMXRpbWUoJ09jdCAgNSAyMzowMTo1NiAyMDIwIEdNVCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBbJ25vdEJlZm9yZSddLCBhc24xdGltZSgnT2N0ICA4IDIzOjAxOjU2IDIwMTAgR01UJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnc2VyaWFsTnVtYmVyJ10sICdEN0M3MzgxOTE5QUZDMjRFJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydzdWJqZWN0J10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoJ2NvdW50cnlOYW1lJywgJ1hZJyksKSwKQEAgLTIwMSw2ICsyMjQsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAoKCdETlMnLCAncHJvamVjdHMuZGV2ZWxvcGVyLm5va2lhLmNvbScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAoJ0ROUycsICdwcm9qZWN0cy5mb3J1bS5ub2tpYS5jb20nKSkKICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgIyBleHRyYSBPQ1NQIGFuZCBBSUEgZmllbGRzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocFsnT0NTUCddLCAoJ2h0dHA6Ly9vY3NwLnZlcmlzaWduLmNvbScsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydjYUlzc3VlcnMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly9TVlJJbnRsLUczLWFpYS52ZXJpc2lnbi5jb20vU1ZSSW50bEczLmNlcicsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwWydjcmxEaXN0cmlidXRpb25Qb2ludHMnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly9TVlJJbnRsLUczLWNybC52ZXJpc2lnbi5jb20vU1ZSSW50bEczLmNybCcsKSkKIAogICAgIGRlZiB0ZXN0X3BhcnNlX2NlcnRfQ1ZFXzIwMTNfNDIzOChzZWxmKToKICAgICAgICAgcCA9IHNzbC5fc3NsLl90ZXN0X2RlY29kZV9jZXJ0KE5VTExCWVRFQ0VSVCkKQEAgLTI1MywyMiArMjgyLDI2IEBACiAgICAgICAgICMgU29tZSBzYW5pdHkgY2hlY2tzIGZvbGxvdwogICAgICAgICAjID49IDAuOQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChuLCAweDkwMDAwMCkKLSAgICAgICAgIyA8IDIuMAotICAgICAgICBzZWxmLmFzc2VydExlc3MobiwgMHgyMDAwMDAwMCkKKyAgICAgICAgIyA8IDMuMAorICAgICAgICBzZWxmLmFzc2VydExlc3MobiwgMHgzMDAwMDAwMCkKICAgICAgICAgbWFqb3IsIG1pbm9yLCBmaXgsIHBhdGNoLCBzdGF0dXMgPSB0CiAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG1ham9yLCAwKQotICAgICAgICBzZWxmLmFzc2VydExlc3MobWFqb3IsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhtYWpvciwgMykKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwobWlub3IsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhtaW5vciwgMjU2KQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChmaXgsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhmaXgsIDI1NikKICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGF0Y2gsIDApCi0gICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHBhdGNoLCAyNikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwocGF0Y2gsIDYzKQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzdGF0dXMsIDApCiAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHN0YXR1cywgMTUpCi0gICAgICAgICMgVmVyc2lvbiBzdHJpbmcgYXMgcmV0dXJuZWQgYnkgT3BlblNTTCwgdGhlIGZvcm1hdCBtaWdodCBjaGFuZ2UKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHMuc3RhcnRzd2l0aCgiT3BlblNTTCB7OmR9Lns6ZH0uezpkfSIuZm9ybWF0KG1ham9yLCBtaW5vciwgZml4KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAocywgdCkpCisgICAgICAgICMgVmVyc2lvbiBzdHJpbmcgYXMgcmV0dXJuZWQgYnkge09wZW4sTGlicmV9U1NMLCB0aGUgZm9ybWF0IG1pZ2h0IGNoYW5nZQorICAgICAgICBpZiAiTGlicmVTU0wiIGluIHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJMaWJyZVNTTCB7OmR9Lns6ZH0iLmZvcm1hdChtYWpvciwgbWlub3IpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocywgdCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUocy5zdGFydHN3aXRoKCJPcGVuU1NMIHs6ZH0uezpkfS57OmR9Ii5mb3JtYXQobWFqb3IsIG1pbm9yLCBmaXgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocywgdCkpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9yZWZjeWNsZShzZWxmKToKQEAgLTI4MywxNSArMzE2LDE1IEBACiAKICAgICBkZWYgdGVzdF93cmFwcGVkX3VuY29ubmVjdGVkKHNlbGYpOgogICAgICAgICAjIE1ldGhvZHMgb24gYW4gdW5jb25uZWN0ZWQgU1NMU29ja2V0IHByb3BhZ2F0ZSB0aGUgb3JpZ2luYWwKLSAgICAgICAgIyBzb2NrZXQuZXJyb3IgcmFpc2UgYnkgdGhlIHVuZGVybHlpbmcgc29ja2V0IG9iamVjdC4KKyAgICAgICAgIyBPU0Vycm9yIHJhaXNlIGJ5IHRoZSB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QuCiAgICAgICAgIHMgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKQogICAgICAgICB3aXRoIHNzbC53cmFwX3NvY2tldChzKSBhcyBzczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdiwgMSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHNvY2tldC5lcnJvciwgc3MucmVjdl9pbnRvLCBieXRlYXJyYXkoYid4JykpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnJlY3Zmcm9tLCAxKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc29ja2V0LmVycm9yLCBzcy5yZWN2ZnJvbV9pbnRvLCBieXRlYXJyYXkoYid4JyksIDEpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnNlbmQsIGIneCcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzb2NrZXQuZXJyb3IsIHNzLnNlbmR0bywgYid4JywgKCcwLjAuMC4wJywgMCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5yZWN2LCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgc3MucmVjdl9pbnRvLCBieXRlYXJyYXkoYid4JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5yZWN2ZnJvbSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnJlY3Zmcm9tX2ludG8sIGJ5dGVhcnJheShiJ3gnKSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHNzLnNlbmQsIGIneCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBzcy5zZW5kdG8sIGIneCcsICgnMC4wLjAuMCcsIDApKQogCiAgICAgZGVmIHRlc3RfdGltZW91dChzZWxmKToKICAgICAgICAgIyBJc3N1ZSAjODUyNDogd2hlbiBjcmVhdGluZyBhbiBTU0wgc29ja2V0LCB0aGUgdGltZW91dCBvZiB0aGUKQEAgLTMxNiwxNSArMzQ5LDE1IEBACiAgICAgICAgIHdpdGggc3NsLndyYXBfc29ja2V0KHNvY2ssIHNlcnZlcl9zaWRlPVRydWUsIGNlcnRmaWxlPUNFUlRGSUxFKSBhcyBzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAiY2FuJ3QgY29ubmVjdCBpbiBzZXJ2ZXItc2lkZSBtb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCwgKEhPU1QsIDgwODApKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKICAgICAgICAgICAgICAgICBzc2wud3JhcF9zb2NrZXQoc29jaywgY2VydGZpbGU9V1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKICAgICAgICAgICAgICAgICBzc2wud3JhcF9zb2NrZXQoc29jaywgY2VydGZpbGU9Q0VSVEZJTEUsIGtleWZpbGU9V1JPTkdDRVJUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PRU5UKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgogICAgICAgICAgICAgd2l0aCBzb2NrZXQuc29ja2V0KCkgYXMgc29jazoKICAgICAgICAgICAgICAgICBzc2wud3JhcF9zb2NrZXQoc29jaywgY2VydGZpbGU9V1JPTkdDRVJULCBrZXlmaWxlPVdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKQEAgLTQ5Niw2ICs1MjksMTE0IEBACiAgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQogICAgICAgICBzZWxmLmFzc2VydEluKHIsIHN0cihjbS53YXJuaW5nLmFyZ3NbMF0pKQogCisgICAgZGVmIHRlc3RfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKHNlbGYpOgorICAgICAgICBwYXRocyA9IHNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwYXRocyksIDYpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwYXRocywgc3NsLkRlZmF1bHRWZXJpZnlQYXRocykKKworICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudlsiU1NMX0NFUlRfRElSIl0gPSBDQVBBVEgKKyAgICAgICAgICAgIGVudlsiU1NMX0NFUlRfRklMRSJdID0gQ0VSVEZJTEUKKyAgICAgICAgICAgIHBhdGhzID0gc3NsLmdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGhzLmNhZmlsZSwgQ0VSVEZJTEUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhdGhzLmNhcGF0aCwgQ0FQQVRIKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIHNwZWNpZmljIikKKyAgICBkZWYgdGVzdF9lbnVtX2NlcnRpZmljYXRlcyhzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNzbC5lbnVtX2NlcnRpZmljYXRlcygiQ0EiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNzbC5lbnVtX2NlcnRpZmljYXRlcygiUk9PVCIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3NsLmVudW1fY2VydGlmaWNhdGVzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhXaW5kb3dzRXJyb3IsIHNzbC5lbnVtX2NlcnRpZmljYXRlcywgIiIpCisKKyAgICAgICAgdHJ1c3Rfb2lkcyA9IHNldCgpCisgICAgICAgIGZvciBzdG9yZW5hbWUgaW4gKCJDQSIsICJST09UIik6CisgICAgICAgICAgICBzdG9yZSA9IHNzbC5lbnVtX2NlcnRpZmljYXRlcyhzdG9yZW5hbWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3RvcmUsIGxpc3QpCisgICAgICAgICAgICBmb3IgZWxlbWVudCBpbiBzdG9yZToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZWxlbWVudCwgdHVwbGUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZWxlbWVudCksIDMpCisgICAgICAgICAgICAgICAgY2VydCwgZW5jLCB0cnVzdCA9IGVsZW1lbnQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY2VydCwgYnl0ZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihlbmMsIHsieDUwOV9hc24iLCAicGtjc183X2FzbiJ9KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0cnVzdCwgKHNldCwgYm9vbCkpCisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh0cnVzdCwgc2V0KToKKyAgICAgICAgICAgICAgICAgICAgdHJ1c3Rfb2lkcy51cGRhdGUodHJ1c3QpCisKKyAgICAgICAgc2VydmVyQXV0aCA9ICIxLjMuNi4xLjUuNS43LjMuMSIKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZXJ2ZXJBdXRoLCB0cnVzdF9vaWRzKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJXaW5kb3dzIHNwZWNpZmljIikKKyAgICBkZWYgdGVzdF9lbnVtX2NybHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzc2wuZW51bV9jcmxzKCJDQSIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNzbC5lbnVtX2NybHMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgc3NsLmVudW1fY3JscywgIiIpCisKKyAgICAgICAgY3JscyA9IHNzbC5lbnVtX2NybHMoIkNBIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNybHMsIGxpc3QpCisgICAgICAgIGZvciBlbGVtZW50IGluIGNybHM6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZWxlbWVudCwgdHVwbGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlbGVtZW50KSwgMikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShlbGVtZW50WzBdLCBieXRlcykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZWxlbWVudFsxXSwgeyJ4NTA5X2FzbiIsICJwa2NzXzdfYXNuIn0pCisKKworICAgIGRlZiB0ZXN0X2FzbjFvYmplY3Qoc2VsZik6CisgICAgICAgIGV4cGVjdGVkID0gKDEyOSwgJ3NlcnZlckF1dGgnLCAnVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24nLAorICAgICAgICAgICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjEnKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdCgnMS4zLjYuMS41LjUuNy4zLjEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLm5pZCwgMTI5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbC5zaG9ydG5hbWUsICdzZXJ2ZXJBdXRoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2YWwubG9uZ25hbWUsICdUTFMgV2ViIFNlcnZlciBBdXRoZW50aWNhdGlvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLm9pZCwgJzEuMy42LjEuNS41LjcuMy4xJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbCwgc3NsLl9BU04xT2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuX0FTTjFPYmplY3QsICdzZXJ2ZXJBdXRoJykKKworICAgICAgICB2YWwgPSBzc2wuX0FTTjFPYmplY3QuZnJvbW5pZCgxMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsLCBleHBlY3RlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHZhbCwgc3NsLl9BU04xT2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuX0FTTjFPYmplY3QuZnJvbW5pZCwgLTEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLCAidW5rbm93biBOSUQgMTAwMDAwIik6CisgICAgICAgICAgICBzc2wuX0FTTjFPYmplY3QuZnJvbW5pZCgxMDAwMDApCisgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMDApOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG9iaiA9IHNzbC5fQVNOMU9iamVjdC5mcm9tbmlkKGkpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvYmoubmlkLCBpbnQpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iai5zaG9ydG5hbWUsIHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob2JqLmxvbmduYW1lLCBzdHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG9iai5vaWQsIChzdHIsIHR5cGUoTm9uZSkpKQorCisgICAgICAgIHZhbCA9IHNzbC5fQVNOMU9iamVjdC5mcm9tbmFtZSgnVExTIFdlYiBTZXJ2ZXIgQXV0aGVudGljYXRpb24nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbCwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2YWwsIHNzbC5fQVNOMU9iamVjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuX0FTTjFPYmplY3QuZnJvbW5hbWUoJ3NlcnZlckF1dGgnKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLl9BU04xT2JqZWN0LmZyb21uYW1lKCcxLjMuNi4xLjUuNS43LjMuMScpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVmFsdWVFcnJvciwgInVua25vd24gb2JqZWN0ICdzZXJ2ZXJhdXRoJyIpOgorICAgICAgICAgICAgc3NsLl9BU04xT2JqZWN0LmZyb21uYW1lKCdzZXJ2ZXJhdXRoJykKKworICAgIGRlZiB0ZXN0X3B1cnBvc2VfZW51bShzZWxmKToKKyAgICAgICAgdmFsID0gc3NsLl9BU04xT2JqZWN0KCcxLjMuNi4xLjUuNS43LjMuMScpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzc2wuUHVycG9zZS5TRVJWRVJfQVVUSCwgc3NsLl9BU04xT2JqZWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRILCB2YWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgubmlkLCAxMjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEguc2hvcnRuYW1lLCAnc2VydmVyQXV0aCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgub2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzEuMy42LjEuNS41LjcuMy4xJykKKworICAgICAgICB2YWwgPSBzc2wuX0FTTjFPYmplY3QoJzEuMy42LjEuNS41LjcuMy4yJykKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNzbC5QdXJwb3NlLkNMSUVOVF9BVVRILCBzc2wuX0FTTjFPYmplY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgsIHZhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5DTElFTlRfQVVUSC5uaWQsIDEzMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5DTElFTlRfQVVUSC5zaG9ydG5hbWUsICdjbGllbnRBdXRoJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzc2wuUHVycG9zZS5DTElFTlRfQVVUSC5vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMS4zLjYuMS41LjUuNy4zLjInKQorCiAgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfZHRscyhzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKQogICAgICAgICBzZWxmLmFkZENsZWFudXAocy5jbG9zZSkKQEAgLTUxMiwxMSArNjUzLDggQEAKIAogICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgZGVmIHRlc3RfY29uc3RydWN0b3Ioc2VsZik6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKLSAgICAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MikKLSAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKLSAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYzKQotICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGZvciBwcm90b2NvbCBpbiBQUk9UT0NPTFM6CisgICAgICAgICAgICBzc2wuU1NMQ29udGV4dChwcm90b2NvbCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzc2wuU1NMQ29udGV4dCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgc3NsLlNTTENvbnRleHQsIC0xKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzc2wuU1NMQ29udGV4dCwgNDIpCkBAIC01MzcsMjMgKzY3NSwyNCBAQAogICAgIEBza2lwX2lmX2Jyb2tlbl91YnVudHVfc3NsCiAgICAgZGVmIHRlc3Rfb3B0aW9ucyhzZWxmKToKICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQotICAgICAgICAjIE9QX0FMTCB8IE9QX05PX1NTTHYyIGlzIHRoZSBkZWZhdWx0IHZhbHVlCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3NsLk9QX0FMTCB8IHNzbC5PUF9OT19TU0x2MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjdHgub3B0aW9ucykKLSAgICAgICAgY3R4Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYzCisgICAgICAgICMgT1BfQUxMIHwgT1BfTk9fU1NMdjIgfCBPUF9OT19TU0x2MyBpcyB0aGUgZGVmYXVsdCB2YWx1ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5PUF9BTEwgfCBzc2wuT1BfTk9fU1NMdjIgfCBzc2wuT1BfTk9fU1NMdjMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMpCisgICAgICAgIGN0eC5vcHRpb25zIHw9IHNzbC5PUF9OT19UTFN2MQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5PUF9BTEwgfCBzc2wuT1BfTk9fU1NMdjIgfCBzc2wuT1BfTk9fU1NMdjMgfCBzc2wuT1BfTk9fVExTdjEsCisgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMpCiAgICAgICAgIGlmIGNhbl9jbGVhcl9vcHRpb25zKCk6CiAgICAgICAgICAgICBjdHgub3B0aW9ucyA9IChjdHgub3B0aW9ucyAmIH5zc2wuT1BfTk9fU1NMdjIpIHwgc3NsLk9QX05PX1RMU3YxCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNzbC5PUF9BTEwgfCBzc2wuT1BfTk9fVExTdjEgfCBzc2wuT1BfTk9fU1NMdjMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5vcHRpb25zKQogICAgICAgICAgICAgY3R4Lm9wdGlvbnMgPSAwCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGN0eC5vcHRpb25zKQorICAgICAgICAgICAgIyBVYnVudHUgaGFzIE9QX05PX1NTTHYzIGZvcmNlZCBvbiBieSBkZWZhdWx0CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIGN0eC5vcHRpb25zICYgfnNzbC5PUF9OT19TU0x2MykKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CiAgICAgICAgICAgICAgICAgY3R4Lm9wdGlvbnMgPSAwCiAKLSAgICBkZWYgdGVzdF92ZXJpZnkoc2VsZik6CisgICAgZGVmIHRlc3RfdmVyaWZ5X21vZGUoc2VsZik6CiAgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKICAgICAgICAgIyBEZWZhdWx0IHZhbHVlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQpAQCAtNTY4LDEzICs3MDcsMzMgQEAKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKICAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IDQyCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXZlX3ZlcmlmeV9mbGFncygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ2ZXJpZnlfZmxhZ3MgbmVlZCBPcGVuU1NMID4gMC45LjgiKQorICAgIGRlZiB0ZXN0X3ZlcmlmeV9mbGFncyhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAjIGRlZmF1bHQgdmFsdWUKKyAgICAgICAgdGYgPSBnZXRhdHRyKHNzbCwgIlZFUklGWV9YNTA5X1RSVVNURURfRklSU1QiLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfREVGQVVMVCB8IHRmKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYpCisgICAgICAgIGN0eC52ZXJpZnlfZmxhZ3MgPSBzc2wuVkVSSUZZX0NSTF9DSEVDS19DSEFJTgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfZmxhZ3MsIHNzbC5WRVJJRllfQ1JMX0NIRUNLX0NIQUlOKQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9ERUZBVUxUCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9mbGFncywgc3NsLlZFUklGWV9ERUZBVUxUKQorICAgICAgICAjIHN1cHBvcnRzIGFueSB2YWx1ZQorICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRiB8IHNzbC5WRVJJRllfWDUwOV9TVFJJQ1QKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgudmVyaWZ5X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNzbC5WRVJJRllfQ1JMX0NIRUNLX0xFQUYgfCBzc2wuVkVSSUZZX1g1MDlfU1RSSUNUKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBjdHgudmVyaWZ5X2ZsYWdzID0gTm9uZQorCiAgICAgZGVmIHRlc3RfbG9hZF9jZXJ0X2NoYWluKHNlbGYpOgogICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCiAgICAgICAgICMgQ29tYmluZWQga2V5IGFuZCBjZXJ0IGluIGEgc2luZ2xlIGZpbGUKLSAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKKyAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSwga2V5ZmlsZT1Ob25lKQogICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKENFUlRGSUxFLCBrZXlmaWxlPUNFUlRGSUxFKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2NlcnRfY2hhaW4sIGtleWZpbGU9Q0VSVEZJTEUpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcikgYXMgY206CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWluKFdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIlBFTSBsaWIiKToKQEAgLTY1OCw4ICs4MTcsOCBAQAogICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKEJZVEVTX0NFUlRGSUxFKQogICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZmlsZT1CWVRFU19DRVJURklMRSwgY2FwYXRoPU5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zLCBOb25lLCBOb25lKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpIGFzIGNtOgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMsIE5vbmUsIE5vbmUsIE5vbmUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CiAgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKFdST05HQ0VSVCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uZXJybm8sIGVycm5vLkVOT0VOVCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIlBFTSBsaWIiKToKQEAgLTY3MCw2ICs4MjksNjQgQEAKICAgICAgICAgIyBJc3N1ZSAjMTA5ODk6IGNyYXNoIGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgdHlwZSBpcyBpbnZhbGlkCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucywgTm9uZSwgVHJ1ZSkKIAorICAgIGRlZiB0ZXN0X2xvYWRfdmVyaWZ5X2NhZGF0YShzZWxmKToKKyAgICAgICAgIyB0ZXN0IGNhZGF0YQorICAgICAgICB3aXRoIG9wZW4oQ0FGSUxFX0NBQ0VSVCkgYXMgZjoKKyAgICAgICAgICAgIGNhY2VydF9wZW0gPSBmLnJlYWQoKQorICAgICAgICBjYWNlcnRfZGVyID0gc3NsLlBFTV9jZXJ0X3RvX0RFUl9jZXJ0KGNhY2VydF9wZW0pCisgICAgICAgIHdpdGggb3BlbihDQUZJTEVfTkVVUk9OSU8pIGFzIGY6CisgICAgICAgICAgICBuZXVyb25pb19wZW0gPSBmLnJlYWQoKQorICAgICAgICBuZXVyb25pb19kZXIgPSBzc2wuUEVNX2NlcnRfdG9fREVSX2NlcnQobmV1cm9uaW9fcGVtKQorCisgICAgICAgICMgdGVzdCBQRU0KKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMCkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y2FjZXJ0X3BlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDEpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPW5ldXJvbmlvX3BlbSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpWyJ4NTA5X2NhIl0sIDIpCisgICAgICAgICMgY2VydCBhbHJlYWR5IGluIGhhc2ggdGFibGUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9bmV1cm9uaW9fcGVtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKworICAgICAgICAjIGNvbWJpbmVkCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY29tYmluZWQgPSAiXG4iLmpvaW4oKGNhY2VydF9wZW0sIG5ldXJvbmlvX3BlbSkpCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWNvbWJpbmVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKworICAgICAgICAjIHdpdGgganVuayBhcm91bmQgdGhlIGNlcnRzCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY29tYmluZWQgPSBbImhlYWQiLCBjYWNlcnRfcGVtLCAib3RoZXIiLCBuZXVyb25pb19wZW0sICJhZ2FpbiIsCisgICAgICAgICAgICAgICAgICAgIG5ldXJvbmlvX3BlbSwgInRhaWwiXQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT0iXG4iLmpvaW4oY29tYmluZWQpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKworICAgICAgICAjIHRlc3QgREVSCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y2FjZXJ0X2RlcikKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9bmV1cm9uaW9fZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKyAgICAgICAgIyBjZXJ0IGFscmVhZHkgaW4gaGFzaCB0YWJsZQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1jYWNlcnRfZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKClbIng1MDlfY2EiXSwgMikKKworICAgICAgICAjIGNvbWJpbmVkCisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY29tYmluZWQgPSBiIiIuam9pbigoY2FjZXJ0X2RlciwgbmV1cm9uaW9fZGVyKSkKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhjYWRhdGE9Y29tYmluZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKVsieDUwOV9jYSJdLCAyKQorCisgICAgICAgICMgZXJyb3IgY2FzZXMKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMsIGNhZGF0YT1vYmplY3QpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KHNzbC5TU0xFcnJvciwgIm5vIHN0YXJ0IGxpbmUiKToKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPSJicm9rZW4iKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLCAibm90IGVub3VnaCBkYXRhIik6CisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1iImJyb2tlbiIpCisKKwogICAgIGRlZiB0ZXN0X2xvYWRfZGhfcGFyYW1zKHNlbGYpOgogICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCiAgICAgICAgIGN0eC5sb2FkX2RoX3BhcmFtcyhESEZJTEUpCkBAIC03MTcsNiArOTM0LDIwMSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdHguc2V0X2VjZGhfY3VydmUsICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBjdHguc2V0X2VjZGhfY3VydmUsIGIiZm9vIikKIAorICAgIEBuZWVkc19zbmkKKyAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2soc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKworICAgICAgICAjIHNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrIGV4cGVjdHMgYSBjYWxsYWJsZSwgb3IgTm9uZQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLCAiIikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2ssIGN0eCkKKworICAgICAgICBkZWYgZHVtbXljYWxsYmFjayhzb2NrLCBzZXJ2ZXJuYW1lLCBjdHgpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjdHguc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soTm9uZSkKKyAgICAgICAgY3R4LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGR1bW15Y2FsbGJhY2spCisKKyAgICBAbmVlZHNfc25pCisgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrX3JlZmN5Y2xlKHNlbGYpOgorICAgICAgICAjIFJlZmVyZW5jZSBjeWNsZXMgdGhyb3VnaCB0aGUgc2VydmVybmFtZSBjYWxsYmFjayBhcmUgZGV0ZWN0ZWQKKyAgICAgICAgIyBhbmQgY2xlYXJlZC4KKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBkZWYgZHVtbXljYWxsYmFjayhzb2NrLCBzZXJ2ZXJuYW1lLCBjdHgsIGN5Y2xlPWN0eCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGN0eC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhkdW1teWNhbGxiYWNrKQorICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGN0eCkKKyAgICAgICAgZGVsIGN0eCwgZHVtbXljYWxsYmFjaworICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh3cigpLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2VydF9zdG9yZV9zdGF0cyhzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCksCisgICAgICAgICAgICB7J3g1MDlfY2EnOiAwLCAnY3JsJzogMCwgJ3g1MDknOiAwfSkKKyAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLAorICAgICAgICAgICAgeyd4NTA5X2NhJzogMCwgJ2NybCc6IDAsICd4NTA5JzogMH0pCisgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDAsICdjcmwnOiAwLCAneDUwOSc6IDF9KQorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENBRklMRV9DQUNFUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwKKyAgICAgICAgICAgIHsneDUwOV9jYSc6IDEsICdjcmwnOiAwLCAneDUwOSc6IDJ9KQorCisgICAgZGVmIHRlc3RfZ2V0X2NhX2NlcnRzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLCBbXSkKKyAgICAgICAgIyBDRVJURklMRSBpcyBub3QgZmxhZ2dlZCBhcyBYNTA5djMgQmFzaWMgQ29uc3RyYWludHM6IENBOlRSVUUKKyAgICAgICAgY3R4LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhDRVJURklMRSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguZ2V0X2NhX2NlcnRzKCksIFtdKQorICAgICAgICAjIGJ1dCBDQUZJTEVfQ0FDRVJUIGlzIGEgQ0EgY2VydAorICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKENBRklMRV9DQUNFUlQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cygpLAorICAgICAgICAgICAgW3snaXNzdWVyJzogKCgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUm9vdCBDQScpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgnb3JnYW5pemF0aW9uYWxVbml0TmFtZScsICdodHRwOi8vd3d3LmNhY2VydC5vcmcnKSwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgoJ2NvbW1vbk5hbWUnLCAnQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eScpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCgnZW1haWxBZGRyZXNzJywgJ3N1cHBvcnRAY2FjZXJ0Lm9yZycpLCkpLAorICAgICAgICAgICAgICAnbm90QWZ0ZXInOiBhc24xdGltZSgnTWFyIDI5IDEyOjI5OjQ5IDIwMzMgR01UJyksCisgICAgICAgICAgICAgICdub3RCZWZvcmUnOiBhc24xdGltZSgnTWFyIDMwIDEyOjI5OjQ5IDIwMDMgR01UJyksCisgICAgICAgICAgICAgICdzZXJpYWxOdW1iZXInOiAnMDAnLAorICAgICAgICAgICAgICAnY3JsRGlzdHJpYnV0aW9uUG9pbnRzJzogKCdodHRwczovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwnLCksCisgICAgICAgICAgICAgICdzdWJqZWN0JzogKCgoJ29yZ2FuaXphdGlvbk5hbWUnLCAnUm9vdCBDQScpLCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgoJ29yZ2FuaXphdGlvbmFsVW5pdE5hbWUnLCAnaHR0cDovL3d3dy5jYWNlcnQub3JnJyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnY29tbW9uTmFtZScsICdDQSBDZXJ0IFNpZ25pbmcgQXV0aG9yaXR5JyksKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKCgnZW1haWxBZGRyZXNzJywgJ3N1cHBvcnRAY2FjZXJ0Lm9yZycpLCkpLAorICAgICAgICAgICAgICAndmVyc2lvbic6IDN9XSkKKworICAgICAgICB3aXRoIG9wZW4oQ0FGSUxFX0NBQ0VSVCkgYXMgZjoKKyAgICAgICAgICAgIHBlbSA9IGYucmVhZCgpCisgICAgICAgIGRlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwZW0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmdldF9jYV9jZXJ0cyhUcnVlKSwgW2Rlcl0pCisKKyAgICBkZWYgdGVzdF9sb2FkX2RlZmF1bHRfY2VydHMoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKHNzbC5QdXJwb3NlLlNFUlZFUl9BVVRIKQorICAgICAgICBjdHgubG9hZF9kZWZhdWx0X2NlcnRzKCkKKworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoc3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMsIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cywgJ1NFUlZFUl9BVVRIJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtID09ICJ3aW4zMiIsICJub3QtV2luZG93cyBzcGVjaWZpYyIpCisgICAgZGVmIHRlc3RfbG9hZF9kZWZhdWx0X2NlcnRzX2VudihzZWxmKToKKyAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKKyAgICAgICAgICAgIGVudlsiU1NMX0NFUlRfRElSIl0gPSBDQVBBVEgKKyAgICAgICAgICAgIGVudlsiU1NMX0NFUlRfRklMRSJdID0gQ0VSVEZJTEUKKyAgICAgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHguY2VydF9zdG9yZV9zdGF0cygpLCB7ImNybCI6IDAsICJ4NTA5IjogMSwgIng1MDlfY2EiOiAwfSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiV2luZG93cyBzcGVjaWZpYyIpCisgICAgZGVmIHRlc3RfbG9hZF9kZWZhdWx0X2NlcnRzX2Vudl93aW5kb3dzKHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIGN0eC5sb2FkX2RlZmF1bHRfY2VydHMoKQorICAgICAgICBzdGF0cyA9IGN0eC5jZXJ0X3N0b3JlX3N0YXRzKCkKKworICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9ESVIiXSA9IENBUEFUSAorICAgICAgICAgICAgZW52WyJTU0xfQ0VSVF9GSUxFIl0gPSBDRVJURklMRQorICAgICAgICAgICAgY3R4LmxvYWRfZGVmYXVsdF9jZXJ0cygpCisgICAgICAgICAgICBzdGF0c1sieDUwOSJdICs9IDEKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LmNlcnRfc3RvcmVfc3RhdHMoKSwgc3RhdHMpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZGVmYXVsdF9jb250ZXh0KHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfUkVRVUlSRUQpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdHguY2hlY2tfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGN0eC5vcHRpb25zICYgZ2V0YXR0cihzc2wsICJPUF9OT19DT01QUkVTU0lPTiIsIDApLAorICAgICAgICAgICAgZ2V0YXR0cihzc2wsICJPUF9OT19DT01QUkVTU0lPTiIsIDApLAorICAgICAgICApCisKKyAgICAgICAgd2l0aCBvcGVuKFNJR05JTkdfQ0EpIGFzIGY6CisgICAgICAgICAgICBjYWRhdGEgPSBmLnJlYWQoKQorICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChjYWZpbGU9U0lHTklOR19DQSwgY2FwYXRoPUNBUEFUSCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FkYXRhPWNhZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY3R4Lm9wdGlvbnMgJiBnZXRhdHRyKHNzbCwgIk9QX05PX0NPTVBSRVNTSU9OIiwgMCksCisgICAgICAgICAgICBnZXRhdHRyKHNzbCwgIk9QX05PX0NPTVBSRVNTSU9OIiwgMCksCisgICAgICAgICkKKworICAgICAgICBjdHggPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChzc2wuUHVycG9zZS5DTElFTlRfQVVUSCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgucHJvdG9jb2wsIHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjdHgub3B0aW9ucyAmIGdldGF0dHIoc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKSwKKyAgICAgICAgICAgIGdldGF0dHIoc3NsLCAiT1BfTk9fQ09NUFJFU1NJT04iLCAwKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgY3R4Lm9wdGlvbnMgJiBnZXRhdHRyKHNzbCwgIk9QX1NJTkdMRV9ESF9VU0UiLCAwKSwKKyAgICAgICAgICAgIGdldGF0dHIoc3NsLCAiT1BfU0lOR0xFX0RIX1VTRSIsIDApLAorICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBjdHgub3B0aW9ucyAmIGdldGF0dHIoc3NsLCAiT1BfU0lOR0xFX0VDREhfVVNFIiwgMCksCisgICAgICAgICAgICBnZXRhdHRyKHNzbCwgIk9QX1NJTkdMRV9FQ0RIX1VTRSIsIDApLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHNlbGYpOgorICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4Lm9wdGlvbnMgJiBzc2wuT1BfTk9fU1NMdjIsIHNzbC5PUF9OT19TU0x2MikKKworICAgICAgICBjdHggPSBzc2wuX2NyZWF0ZV9zdGRsaWJfY29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9OT05FKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5vcHRpb25zICYgc3NsLk9QX05PX1NTTHYyLCBzc2wuT1BfTk9fU1NMdjIpCisKKyAgICAgICAgY3R4ID0gc3NsLl9jcmVhdGVfc3RkbGliX2NvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X3JlcXM9c3NsLkNFUlRfUkVRVUlSRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2hvc3RuYW1lPVRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnZlcmlmeV9tb2RlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN0eC5jaGVja19ob3N0bmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgICAgIGN0eCA9IHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KHB1cnBvc2U9c3NsLlB1cnBvc2UuQ0xJRU5UX0FVVEgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY3R4LnByb3RvY29sLCBzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC52ZXJpZnlfbW9kZSwgc3NsLkNFUlRfTk9ORSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdHgub3B0aW9ucyAmIHNzbC5PUF9OT19TU0x2Miwgc3NsLk9QX05PX1NTTHYyKQorCisgICAgZGVmIHRlc3RfY2hlY2tfaG9zdG5hbWUoc2VsZik6CisgICAgICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisKKyAgICAgICAgIyBSZXF1aXJlcyBDRVJUX1JFUVVJUkVEIG9yIENFUlRfT1BUSU9OQUwKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisgICAgICAgIGN0eC5jaGVja19ob3N0bmFtZSA9IFRydWUKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGN0eC5jaGVja19ob3N0bmFtZSkKKworICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9PUFRJT05BTAorICAgICAgICBjdHguY2hlY2tfaG9zdG5hbWUgPSBUcnVlCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjdHguY2hlY2tfaG9zdG5hbWUpCisKKyAgICAgICAgIyBDYW5ub3Qgc2V0IENFUlRfTk9ORSB3aXRoIGNoZWNrX2hvc3RuYW1lIGVuYWJsZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX05PTkUKKyAgICAgICAgY3R4LmNoZWNrX2hvc3RuYW1lID0gRmFsc2UKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShjdHguY2hlY2tfaG9zdG5hbWUpCisKIAogY2xhc3MgU1NMRXJyb3JUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTg3NiwxMSArMTI4OCw4IEBACiAgICAgICAgICAgICAjIFNhbWUgd2l0aCBhIHNlcnZlciBob3N0bmFtZQogICAgICAgICAgICAgcyA9IGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX2hvc3RuYW1lPVJFTU9URV9IT1NUKQotICAgICAgICAgICAgaWYgc3NsLkhBU19TTkk6Ci0gICAgICAgICAgICAgICAgcy5jb25uZWN0KChSRU1PVEVfSE9TVCwgNDQzKSkKLSAgICAgICAgICAgICAgICBzLmNsb3NlKCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5jb25uZWN0LCAoUkVNT1RFX0hPU1QsIDQ0MykpCisgICAgICAgICAgICBzLmNvbm5lY3QoKFJFTU9URV9IT1NULCA0NDMpKQorICAgICAgICAgICAgcy5jbG9zZSgpCiAgICAgICAgICAgICAjIFRoaXMgc2hvdWxkIGZhaWwgYmVjYXVzZSB3ZSBoYXZlIG5vIHZlcmlmaWNhdGlvbiBjZXJ0cwogICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKICAgICAgICAgICAgIHMgPSBjdHgud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCkpCkBAIC05MjYsNiArMTMzNSwyOCBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBzLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X2Nvbm5lY3RfY2FkYXRhKHNlbGYpOgorICAgICAgICB3aXRoIG9wZW4oUkVNT1RFX1JPT1RfQ0VSVCkgYXMgZjoKKyAgICAgICAgICAgIHBlbSA9IGYucmVhZCgpCisgICAgICAgIGRlciA9IHNzbC5QRU1fY2VydF90b19ERVJfY2VydChwZW0pCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoUkVNT1RFX0hPU1QpOgorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhZGF0YT1wZW0pCisgICAgICAgICAgICB3aXRoIGN0eC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUKSkgYXMgczoKKyAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKFJFTU9URV9IT1NULCA0NDMpKQorICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCkKKworICAgICAgICAgICAgIyBzYW1lIHdpdGggREVSCisgICAgICAgICAgICBjdHggPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY3R4LnZlcmlmeV9tb2RlID0gc3NsLkNFUlRfUkVRVUlSRUQKKyAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FkYXRhPWRlcikKKyAgICAgICAgICAgIHdpdGggY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKSBhcyBzOgorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoUkVNT1RFX0hPU1QsIDQ0MykpCisgICAgICAgICAgICAgICAgY2VydCA9IHMuZ2V0cGVlcmNlcnQoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0KQorCiAgICAgQHVuaXR0ZXN0LnNraXBJZihvcy5uYW1lID09ICJudCIsICJDYW4ndCB1c2UgYSBzb2NrZXQgYXMgYSBmaWxlIHVuZGVyIFdpbmRvd3MiKQogICAgIGRlZiB0ZXN0X21ha2VmaWxlX2Nsb3NlKHNlbGYpOgogICAgICAgICAjIElzc3VlICM1MjM4OiBjcmVhdGluZyBhIGZpbGUtbGlrZSBvYmplY3Qgd2l0aCBtYWtlZmlsZSgpIHNob3VsZG4ndApAQCAtMTA0Myw2ICsxNDc0LDM2IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHMuY2xvc2UoKQogCisgICAgZGVmIHRlc3RfZ2V0X2NhX2NlcnRzX2NhcGF0aChzZWxmKToKKyAgICAgICAgIyBjYXBhdGggY2VydHMgYXJlIGxvYWRlZCBvbiByZXF1ZXN0CisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoUkVNT1RFX0hPU1QpOgorICAgICAgICAgICAgY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGN0eC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjdHgubG9hZF92ZXJpZnlfbG9jYXRpb25zKGNhcGF0aD1DQVBBVEgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGN0eC5nZXRfY2FfY2VydHMoKSwgW10pCisgICAgICAgICAgICBzID0gY3R4LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpKQorICAgICAgICAgICAgcy5jb25uZWN0KChSRU1PVEVfSE9TVCwgNDQzKSkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oY3R4LmdldF9jYV9jZXJ0cygpKSwgMSkKKworICAgIEBuZWVkc19zbmkKKyAgICBkZWYgdGVzdF9jb250ZXh0X3NldGdldChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHRoZSBjb250ZXh0IG9mIGEgY29ubmVjdGVkIHNvY2tldCBjYW4gYmUgcmVwbGFjZWQuCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoUkVNT1RFX0hPU1QpOgorICAgICAgICAgICAgY3R4MSA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFN2MSkKKyAgICAgICAgICAgIGN0eDIgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQpCisgICAgICAgICAgICB3aXRoIGN0eDEud3JhcF9zb2NrZXQocykgYXMgc3M6CisgICAgICAgICAgICAgICAgc3MuY29ubmVjdCgoUkVNT1RFX0hPU1QsIDQ0MykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzcy5jb250ZXh0LCBjdHgxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuX3NzbG9iai5jb250ZXh0LCBjdHgxKQorICAgICAgICAgICAgICAgIHNzLmNvbnRleHQgPSBjdHgyCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhzcy5jb250ZXh0LCBjdHgyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3MuX3NzbG9iai5jb250ZXh0LCBjdHgyKQogCiB0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwpAQCAtMTE3MCw3ICsxNjMxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiIHNlcnZlcjogcmVhZCAlciAoJXMpLCBzZW5kaW5nIGJhY2sgJXIgKCVzKS4uLlxuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKG1zZywgY3R5cGUsIG1zZy5sb3dlcigpLCBjdHlwZSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShtc2cubG93ZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnNlcnZlci5jaGF0dHk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlX2Vycm9yKCJUZXN0IHNlcnZlciBmYWlsdXJlOlxuIikKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xvc2UoKQpAQCAtMTI4MCw3ICsxNzQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGVycjoKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXJyLmFyZ3NbMF0gPT0gZXJybm8uRUNPTk5BQk9SVEVEOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZV9jbG9zZSgpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0xMzg0LDE5ICsxODQ1LDE5IEBACiAgICAgICAgICAgICBleGNlcHQgc3NsLlNTTEVycm9yIGFzIHg6CiAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcblNTTEVycm9yIGlzICVzXG4iICUgeC5hcmdzWzFdKQotICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyB4OgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuc29ja2V0LmVycm9yIGlzICVzXG4iICUgeC5hcmdzWzFdKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgeDoKKyAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG5PU0Vycm9yIGlzICVzXG4iICUgeC5hcmdzWzFdKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgeDoKICAgICAgICAgICAgICAgICBpZiB4LmVycm5vICE9IGVycm5vLkVOT0VOVDoKICAgICAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6Ci0gICAgICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxJT0Vycm9yIGlzICVzXG4iICUgc3RyKHgpKQorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcT1NFcnJvciBpcyAlc1xuIiAlIHN0cih4KSkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoIlVzZSBvZiBpbnZhbGlkIGNlcnQgc2hvdWxkIGhhdmUgZmFpbGVkISIpCiAKICAgICBkZWYgc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwgaW5kYXRhPWIiRk9PXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9RmFsc2UsIHNuaV9uYW1lPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgTGF1bmNoIGEgc2VydmVyLCBjb25uZWN0IGEgY2xpZW50IHRvIGl0IGFuZCB0cnkgdmFyaW91cyByZWFkcwogICAgICAgICBhbmQgd3JpdGVzLgpAQCAtMTQwNiw3ICsxODY3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1jaGF0dHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uY2hhdHR5PUZhbHNlKQogICAgICAgICB3aXRoIHNlcnZlcjoKLSAgICAgICAgICAgIHdpdGggY2xpZW50X2NvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgd2l0aCBjbGllbnRfY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT1zbmlfbmFtZSkgYXMgczoKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKICAgICAgICAgICAgICAgICBmb3IgYXJnIGluIFtpbmRhdGEsIGJ5dGVhcnJheShpbmRhdGEpLCBtZW1vcnl2aWV3KGluZGF0YSldOgogICAgICAgICAgICAgICAgICAgICBpZiBjb25uZWN0aW9uY2hhdHR5OgpAQCAtMTQzMCw2ICsxODkyLDcgQEAKICAgICAgICAgICAgICAgICBzdGF0cy51cGRhdGUoewogICAgICAgICAgICAgICAgICAgICAnY29tcHJlc3Npb24nOiBzLmNvbXByZXNzaW9uKCksCiAgICAgICAgICAgICAgICAgICAgICdjaXBoZXInOiBzLmNpcGhlcigpLAorICAgICAgICAgICAgICAgICAgICAncGVlcmNlcnQnOiBzLmdldHBlZXJjZXJ0KCksCiAgICAgICAgICAgICAgICAgICAgICdjbGllbnRfbnBuX3Byb3RvY29sJzogcy5zZWxlY3RlZF9ucG5fcHJvdG9jb2woKQogICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCkBAIC0xNDU1LDEyICsxOTE4LDE1IEBACiAgICAgICAgIGNsaWVudF9jb250ZXh0Lm9wdGlvbnMgfD0gY2xpZW50X29wdGlvbnMKICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzZXJ2ZXJfcHJvdG9jb2wpCiAgICAgICAgIHNlcnZlcl9jb250ZXh0Lm9wdGlvbnMgfD0gc2VydmVyX29wdGlvbnMKKworICAgICAgICAjIE5PVEU6IHdlIG11c3QgZW5hYmxlICJBTEwiIGNpcGhlcnMgb24gdGhlIGNsaWVudCwgb3RoZXJ3aXNlIGFuCisgICAgICAgICMgU1NMdjIzIGNsaWVudCB3aWxsIHNlbmQgYW4gU1NMdjMgaGVsbG8gKHJhdGhlciB0aGFuIFNTTHYyKQorICAgICAgICAjIHN0YXJ0aW5nIGZyb20gT3BlblNTTCAxLjAuMCAoc2VlIGlzc3VlICM4MzIyKS4KKyAgICAgICAgaWYgY2xpZW50X2NvbnRleHQucHJvdG9jb2wgPT0gc3NsLlBST1RPQ09MX1NTTHYyMzoKKyAgICAgICAgICAgIGNsaWVudF9jb250ZXh0LnNldF9jaXBoZXJzKCJBTEwiKQorCiAgICAgICAgIGZvciBjdHggaW4gKGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCk6CiAgICAgICAgICAgICBjdHgudmVyaWZ5X21vZGUgPSBjZXJ0c3JlcXMKLSAgICAgICAgICAgICMgTk9URTogd2UgbXVzdCBlbmFibGUgIkFMTCIgY2lwaGVycywgb3RoZXJ3aXNlIGFuIFNTTHYyMyBjbGllbnQKLSAgICAgICAgICAgICMgd2lsbCBzZW5kIGFuIFNTTHYzIGhlbGxvIChyYXRoZXIgdGhhbiBTU0x2Mikgc3RhcnRpbmcgZnJvbQotICAgICAgICAgICAgIyBPcGVuU1NMIDEuMC4wIChzZWUgaXNzdWUgIzgzMjIpLgotICAgICAgICAgICAgY3R4LnNldF9jaXBoZXJzKCJBTEwiKQogICAgICAgICAgICAgY3R4LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKICAgICAgICAgICAgIGN0eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCiAgICAgICAgIHRyeToKQEAgLTE0NzEsNyArMTkzNyw3IEBACiAgICAgICAgIGV4Y2VwdCBzc2wuU1NMRXJyb3I6CiAgICAgICAgICAgICBpZiBleHBlY3Rfc3VjY2VzczoKICAgICAgICAgICAgICAgICByYWlzZQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGU6CiAgICAgICAgICAgICBpZiBleHBlY3Rfc3VjY2VzcyBvciBlLmVycm5vICE9IGVycm5vLkVDT05OUkVTRVQ6CiAgICAgICAgICAgICAgICAgcmFpc2UKICAgICAgICAgZWxzZToKQEAgLTE0OTAsMTAgKzE5NTYsMTEgQEAKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCiAgICAgICAgICAgICBmb3IgcHJvdG9jb2wgaW4gUFJPVE9DT0xTOgotICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChwcm90b2NvbCkKLSAgICAgICAgICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKLSAgICAgICAgICAgICAgICBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY29udGV4dCwgY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChwcm90b2NvbD1zc2wuX1BST1RPQ09MX05BTUVTW3Byb3RvY29sXSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChwcm90b2NvbCkKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9wYXJhbXNfdGVzdChjb250ZXh0LCBjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsIGNvbm5lY3Rpb25jaGF0dHk9VHJ1ZSkKIAogICAgICAgICBkZWYgdGVzdF9nZXRwZWVyY2VydChzZWxmKToKICAgICAgICAgICAgIGlmIHN1cHBvcnQudmVyYm9zZToKQEAgLTE1MDQsOCArMTk3MSwxNCBAQAogICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCiAgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1jb250ZXh0LCBjaGF0dHk9RmFsc2UpCiAgICAgICAgICAgICB3aXRoIHNlcnZlcjoKLSAgICAgICAgICAgICAgICBzID0gY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpCisgICAgICAgICAgICAgICAgcyA9IGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvX2hhbmRzaGFrZV9vbl9jb25uZWN0PUZhbHNlKQogICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICMgZ2V0cGVlcmNlcnQoKSByYWlzZSBWYWx1ZUVycm9yIHdoaWxlIHRoZSBoYW5kc2hha2UgaXNuJ3QKKyAgICAgICAgICAgICAgICAjIGRvbmUuCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgcy5kb19oYW5kc2hha2UoKQogICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY2VydCwgIkNhbid0IGdldCBwZWVyIGNlcnRpZmljYXRlLiIpCiAgICAgICAgICAgICAgICAgY2lwaGVyID0gcy5jaXBoZXIoKQpAQCAtMTUyNyw2ICsyMDAwLDg3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRMZXNzKGJlZm9yZSwgYWZ0ZXIpCiAgICAgICAgICAgICAgICAgcy5jbG9zZSgpCiAKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGF2ZV92ZXJpZnlfZmxhZ3MoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmVyaWZ5X2ZsYWdzIG5lZWQgT3BlblNTTCA+IDAuOS44IikKKyAgICAgICAgZGVmIHRlc3RfY3JsX2NoZWNrKHNlbGYpOgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKworICAgICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFKQorCisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyhTSUdOSU5HX0NBKQorICAgICAgICAgICAgdGYgPSBnZXRhdHRyKHNzbCwgIlZFUklGWV9YNTA5X1RSVVNURURfRklSU1QiLCAwKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZXh0LnZlcmlmeV9mbGFncywgc3NsLlZFUklGWV9ERUZBVUxUIHwgdGYpCisKKyAgICAgICAgICAgICMgVkVSSUZZX0RFRkFVTFQgc2hvdWxkIHBhc3MKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCkpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgICAgICBjZXJ0ID0gcy5nZXRwZWVyY2VydCgpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShjZXJ0LCAiQ2FuJ3QgZ2V0IHBlZXIgY2VydGlmaWNhdGUuIikKKworICAgICAgICAgICAgIyBWRVJJRllfQ1JMX0NIRUNLX0xFQUYgd2l0aG91dCBhIGxvYWRlZCBDUkwgZmlsZSBmYWlscworICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfZmxhZ3MgfD0gc3NsLlZFUklGWV9DUkxfQ0hFQ0tfTEVBRgorCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLlNTTEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNlcnRpZmljYXRlIHZlcmlmeSBmYWlsZWQiKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorCisgICAgICAgICAgICAjIG5vdyBsb2FkIGEgQ1JMIGZpbGUuIFRoZSBDUkwgZmlsZSBpcyBzaWduZWQgYnkgdGhlIENBLgorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ1JMRklMRSkKKworICAgICAgICAgICAgc2VydmVyID0gVGhyZWFkZWRFY2hvU2VydmVyKGNvbnRleHQ9c2VydmVyX2NvbnRleHQsIGNoYXR0eT1UcnVlKQorICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQorCisgICAgICAgIGRlZiB0ZXN0X2NoZWNrX2hvc3RuYW1lKHNlbGYpOgorICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgorICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQud3JpdGUoIlxuIikKKworICAgICAgICAgICAgc2VydmVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oU0lHTkVEX0NFUlRGSUxFKQorCisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjb250ZXh0LmNoZWNrX2hvc3RuYW1lID0gVHJ1ZQorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU0lHTklOR19DQSkKKworICAgICAgICAgICAgIyBjb3JyZWN0IGhvc3RuYW1lIHNob3VsZCB2ZXJpZnkKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggY29udGV4dC53cmFwX3NvY2tldChzb2NrZXQuc29ja2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9ob3N0bmFtZT0ibG9jYWxob3N0IikgYXMgczoKKyAgICAgICAgICAgICAgICAgICAgcy5jb25uZWN0KChIT1NULCBzZXJ2ZXIucG9ydCkpCisgICAgICAgICAgICAgICAgICAgIGNlcnQgPSBzLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNlcnQsICJDYW4ndCBnZXQgcGVlciBjZXJ0aWZpY2F0ZS4iKQorCisgICAgICAgICAgICAjIGluY29ycmVjdCBob3N0bmFtZSBzaG91bGQgcmFpc2UgYW4gZXhjZXB0aW9uCisgICAgICAgICAgICBzZXJ2ZXIgPSBUaHJlYWRlZEVjaG9TZXJ2ZXIoY29udGV4dD1zZXJ2ZXJfY29udGV4dCwgY2hhdHR5PVRydWUpCisgICAgICAgICAgICB3aXRoIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfaG9zdG5hbWU9ImludmFsaWQiKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoc3NsLkNlcnRpZmljYXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgJ2ludmFsaWQnIGRvZXNuJ3QgbWF0Y2ggJ2xvY2FsaG9zdCciKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorCisgICAgICAgICAgICAjIG1pc3Npbmcgc2VydmVyX2hvc3RuYW1lIGFyZyBzaG91bGQgY2F1c2UgYW4gZXhjZXB0aW9uLCB0b28KKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PXNlcnZlcl9jb250ZXh0LCBjaGF0dHk9VHJ1ZSkKKyAgICAgICAgICAgIHdpdGggc2VydmVyOgorICAgICAgICAgICAgICAgIHdpdGggc29ja2V0LnNvY2tldCgpIGFzIHM6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoZWNrX2hvc3RuYW1lIHJlcXVpcmVzIHNlcnZlcl9ob3N0bmFtZSIpOgorICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC53cmFwX3NvY2tldChzKQorCiAgICAgICAgIGRlZiB0ZXN0X2VtcHR5X2NlcnQoc2VsZik6CiAgICAgICAgICAgICAiIiJDb25uZWN0aW5nIHdpdGggYW4gZW1wdHkgY2VydCBmaWxlIiIiCiAgICAgICAgICAgICBiYWRfY2VydF90ZXN0KG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pIG9yIG9zLmN1cmRpciwKQEAgLTE1NDUsNyArMjA5OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFka2V5LnBlbSIpKQogCiAgICAgICAgIGRlZiB0ZXN0X3J1ZGVfc2h1dGRvd24oc2VsZik6Ci0gICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBJT0Vycm9yCisgICAgICAgICAgICAiIiJBIGJydXRhbCBzaHV0ZG93biBvZiBhbiBTU0wgc2VydmVyIHNob3VsZCByYWlzZSBhbiBPU0Vycm9yCiAgICAgICAgICAgICBpbiB0aGUgY2xpZW50IHdoZW4gYXR0ZW1wdGluZyBoYW5kc2hha2UuCiAgICAgICAgICAgICAiIiIKICAgICAgICAgICAgIGxpc3RlbmVyX3JlYWR5ID0gdGhyZWFkaW5nLkV2ZW50KCkKQEAgLTE1NzMsNyArMjEyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGxpc3RlbmVyX2dvbmUud2FpdCgpCiAgICAgICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgICAgIHNzbF9zb2NrID0gc3NsLndyYXBfc29ja2V0KGMpCi0gICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnY29ubmVjdGluZyB0byBjbG9zZWQgU1NMIHNvY2tldCBzaG91bGQgaGF2ZSBmYWlsZWQnKQpAQCAtMTU5Niw3ICsyMTUwLDggQEAKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MiwgVHJ1ZSwgc3NsLkNFUlRfT1BUSU9OQUwpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Miwgc3NsLlBST1RPQ09MX1NTTHYyMywgRmFsc2UpCi0gICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MycpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQogICAgICAgICAgICAgIyBTU0x2MjMgY2xpZW50IHdpdGggc3BlY2lmaWMgU1NMIG9wdGlvbnMKICAgICAgICAgICAgIGlmIG5vX3NzbHYyX2ltcGxpZXNfc3NsdjNfaGVsbG8oKToKQEAgLTE2MTYsMjYgKzIxNzEsMzAgQEAKICAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIsIFRydWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IChzc2wuU1NMRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgeDoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyB4OgogICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZmFpbHMgb24gc29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuU1NMICgwLjkuN2wsIGZvciBpbnN0YW5jZSkKICAgICAgICAgICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgogICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIFNTTDIgY2xpZW50IHRvIFNTTDIzIHNlcnZlciB0ZXN0IHVuZXhwZWN0ZWRseSBmYWlsZWQ6XG4gJXNcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIHN0cih4KSkKLSAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYzJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYyMywgVHJ1ZSkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUpCiAKLSAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MycpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlLCBzc2wuQ0VSVF9PUFRJT05BTCkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBUcnVlLCBzc2wuQ0VSVF9PUFRJT05BTCkKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjIzLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUsIHNzbC5DRVJUX09QVElPTkFMKQogCi0gICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjMnKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYzLCBGYWxzZSwgc3NsLkNFUlRfUkVRVUlSRUQpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1NTTHYyMywgVHJ1ZSwgc3NsLkNFUlRfUkVRVUlSRUQpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxLCBUcnVlLCBzc2wuQ0VSVF9SRVFVSVJFRCkKIAogICAgICAgICAgICAgIyBTZXJ2ZXIgd2l0aCBzcGVjaWZpYyBTU0wgb3B0aW9ucwotICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UsCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYzJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX29wdGlvbnM9c3NsLk9QX05PX1NTTHYzKQogICAgICAgICAgICAgIyBXaWxsIGNob29zZSBUTFN2MQogICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIFRydWUsCkBAIC0xNjQ1LDYgKzIyMDQsOCBAQAogCiAKICAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3BlblNTTCBpcyBjb21waWxlZCB3aXRob3V0IFNTTHYzIHN1cHBvcnQiKQogICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF9zc2x2MyhzZWxmKToKICAgICAgICAgICAgICIiIkNvbm5lY3RpbmcgdG8gYW4gU1NMdjMgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucyIiIgogICAgICAgICAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgpAQCAtMTY1OSw4ICsyMjIwLDggQEAKICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9UTFN2MSwgRmFsc2UpCiAgICAgICAgICAgICBpZiBub19zc2x2Ml9pbXBsaWVzX3NzbHYzX2hlbGxvKCk6CiAgICAgICAgICAgICAgICAgIyBObyBTU0x2MiA9PiBjbGllbnQgd2lsbCB1c2UgYW4gU1NMdjMgaGVsbG8gb24gcmVjZW50IE9wZW5TU0xzCi0gICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2Mywgc3NsLlBST1RPQ09MX1NTTHYyMywgVHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50X29wdGlvbnM9c3NsLk9QX05PX1NTTHYyKQorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfU1NMdjMsIHNzbC5QUk9UT0NPTF9TU0x2MjMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZhbHNlLCBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjIpCiAKICAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKICAgICAgICAgZGVmIHRlc3RfcHJvdG9jb2xfdGxzdjEoc2VsZik6CkBAIC0xNjcyLDEwICsyMjMzLDU2IEBACiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjEsIFRydWUsIHNzbC5DRVJUX1JFUVVJUkVEKQogICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgogICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9TU0x2MiwgRmFsc2UpCi0gICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MycpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjEsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UpCiAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjEpCiAKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzc2wsICJQUk9UT0NPTF9UTFN2MV8xIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUTFMgdmVyc2lvbiAxLjEgbm90IHN1cHBvcnRlZC4iKQorICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF90bHN2MV8xKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhIFRMU3YxLjEgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgIFRlc3RpbmcgYWdhaW5zdCBvbGRlciBUTFMgdmVyc2lvbnMuIiIiCisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjFfMSwgVHJ1ZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjInKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzEsIHNzbC5QUk9UT0NPTF9TU0x2MiwgRmFsc2UpCisgICAgICAgICAgICBpZiBoYXNhdHRyKHNzbCwgJ1BST1RPQ09MX1NTTHYzJyk6CisgICAgICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjMsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfU1NMdjIzLCBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRfb3B0aW9ucz1zc2wuT1BfTk9fVExTdjFfMSkKKworICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9TU0x2MjMsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBUcnVlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBzc2wuUFJPVE9DT0xfVExTdjEsIEZhbHNlKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MSwgc3NsLlBST1RPQ09MX1RMU3YxXzEsIEZhbHNlKQorCisKKyAgICAgICAgQHNraXBfaWZfYnJva2VuX3VidW50dV9zc2wKKyAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzc2wsICJQUk9UT0NPTF9UTFN2MV8yIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUTFMgdmVyc2lvbiAxLjIgbm90IHN1cHBvcnRlZC4iKQorICAgICAgICBkZWYgdGVzdF9wcm90b2NvbF90bHN2MV8yKHNlbGYpOgorICAgICAgICAgICAgIiIiQ29ubmVjdGluZyB0byBhIFRMU3YxLjIgc2VydmVyIHdpdGggdmFyaW91cyBjbGllbnQgb3B0aW9ucy4KKyAgICAgICAgICAgICAgIFRlc3RpbmcgYWdhaW5zdCBvbGRlciBUTFMgdmVyc2lvbnMuIiIiCisgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorICAgICAgICAgICAgdHJ5X3Byb3RvY29sX2NvbWJvKHNzbC5QUk9UT0NPTF9UTFN2MV8yLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgVHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfb3B0aW9ucz1zc2wuT1BfTk9fU1NMdjN8c3NsLk9QX05PX1NTTHYyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19TU0x2M3xzc2wuT1BfTk9fU1NMdjIsKQorICAgICAgICAgICAgaWYgaGFzYXR0cihzc2wsICdQUk9UT0NPTF9TU0x2MicpOgorICAgICAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMiwgc3NsLlBST1RPQ09MX1NTTHYyLCBGYWxzZSkKKyAgICAgICAgICAgIGlmIGhhc2F0dHIoc3NsLCAnUFJPVE9DT0xfU1NMdjMnKToKKyAgICAgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9TU0x2MywgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9TU0x2MjMsIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudF9vcHRpb25zPXNzbC5PUF9OT19UTFN2MV8yKQorCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1NTTHYyMywgc3NsLlBST1RPQ09MX1RMU3YxXzIsIFRydWUpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9UTFN2MSwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxLCBzc2wuUFJPVE9DT0xfVExTdjFfMiwgRmFsc2UpCisgICAgICAgICAgICB0cnlfcHJvdG9jb2xfY29tYm8oc3NsLlBST1RPQ09MX1RMU3YxXzIsIHNzbC5QUk9UT0NPTF9UTFN2MV8xLCBGYWxzZSkKKyAgICAgICAgICAgIHRyeV9wcm90b2NvbF9jb21ibyhzc2wuUFJPVE9DT0xfVExTdjFfMSwgc3NsLlBST1RPQ09MX1RMU3YxXzIsIEZhbHNlKQorCiAgICAgICAgIGRlZiB0ZXN0X3N0YXJ0dGxzKHNlbGYpOgogICAgICAgICAgICAgIiIiU3dpdGNoaW5nIGZyb20gY2xlYXIgdGV4dCB0byBlbmNyeXB0ZWQgYW5kIGJhY2sgYWdhaW4uIiIiCiAgICAgICAgICAgICBtc2dzID0gKGIibXNnIDEiLCBiIk1TRyAyIiwgYiJTVEFSVFRMUyIsIGIiTVNHIDMiLCBiIm1zZyA0IiwgYiJFTkRUTFMiLCBiIm1zZyA1IiwgYiJtc2cgNiIpCkBAIC0xNzM2LDcgKzIzNDMsNyBAQAogCiAgICAgICAgIGRlZiB0ZXN0X3NvY2tldHNlcnZlcihzZWxmKToKICAgICAgICAgICAgICIiIlVzaW5nIGEgU29ja2V0U2VydmVyIHRvIGNyZWF0ZSBhbmQgbWFuYWdlIFNTTCBjb25uZWN0aW9ucy4iIiIKLSAgICAgICAgICAgIHNlcnZlciA9IG1ha2VfaHR0cHNfc2VydmVyKHNlbGYsIENFUlRGSUxFKQorICAgICAgICAgICAgc2VydmVyID0gbWFrZV9odHRwc19zZXJ2ZXIoc2VsZiwgY2VydGZpbGU9Q0VSVEZJTEUpCiAgICAgICAgICAgICAjIHRyeSB0byBjb25uZWN0CiAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC53cml0ZSgnXG4nKQpAQCAtMTc0NCw5ICsyMzUxLDEwIEBACiAgICAgICAgICAgICAgICAgZDEgPSBmLnJlYWQoKQogICAgICAgICAgICAgZDIgPSAnJwogICAgICAgICAgICAgIyBub3cgZmV0Y2ggdGhlIHNhbWUgZGF0YSBmcm9tIHRoZSBIVFRQUyBzZXJ2ZXIKLSAgICAgICAgICAgIHVybCA9ICdodHRwczovLyVzOiVkLyVzJyAlICgKLSAgICAgICAgICAgICAgICBIT1NULCBzZXJ2ZXIucG9ydCwgb3MucGF0aC5zcGxpdChDRVJURklMRSlbMV0pCi0gICAgICAgICAgICBmID0gdXJsbGliLnJlcXVlc3QudXJsb3Blbih1cmwpCisgICAgICAgICAgICB1cmwgPSAnaHR0cHM6Ly9sb2NhbGhvc3Q6JWQvJXMnICUgKAorICAgICAgICAgICAgICAgIHNlcnZlci5wb3J0LCBvcy5wYXRoLnNwbGl0KENFUlRGSUxFKVsxXSkKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChjYWZpbGU9Q0VSVEZJTEUpCisgICAgICAgICAgICBmID0gdXJsbGliLnJlcXVlc3QudXJsb3Blbih1cmwsIGNvbnRleHQ9Y29udGV4dCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkbGVuID0gZi5pbmZvKCkuZ2V0KCJjb250ZW50LWxlbmd0aCIpCiAgICAgICAgICAgICAgICAgaWYgZGxlbiBhbmQgKGludChkbGVuKSA+IDApOgpAQCAtMTk5Miw2ICsyNjAwLDIwIEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVtb3RlLCBzc2wuU1NMU29ja2V0KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwZWVyLCBjbGllbnRfYWRkcikKIAorICAgICAgICBkZWYgdGVzdF9nZXRwZWVyY2VydF9lbm90Y29ubihzZWxmKToKKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgc29jazoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBzb2NrLmdldHBlZXJjZXJ0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PVENPTk4pCisKKyAgICAgICAgZGVmIHRlc3RfZG9faGFuZHNoYWtlX2Vub3Rjb25uKHNlbGYpOgorICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCisgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzb2NrOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHNvY2suZG9faGFuZHNoYWtlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5lcnJubywgZXJybm8uRU5PVENPTk4pCisKICAgICAgICAgZGVmIHRlc3RfZGVmYXVsdF9jaXBoZXJzKHNlbGYpOgogICAgICAgICAgICAgY29udGV4dCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9TU0x2MjMpCiAgICAgICAgICAgICB0cnk6CkBAIC0yMDAzLDEwICsyNjI1LDI3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2xfdmVyc2lvbj1zc2wuUFJPVE9DT0xfU1NMdjIzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PUZhbHNlKSBhcyBzZXJ2ZXI6CiAgICAgICAgICAgICAgICAgd2l0aCBjb250ZXh0LndyYXBfc29ja2V0KHNvY2tldC5zb2NrZXQoKSkgYXMgczoKLSAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoT1NFcnJvciwgc3NsLlNTTEVycm9yKSk6CisgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvcik6CiAgICAgICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oIm5vIHNoYXJlZCBjaXBoZXIiLCBzdHIoc2VydmVyLmNvbm5fZXJyb3JzWzBdKSkKIAorICAgICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzc2wuSEFTX0VDREgsICJ0ZXN0IHJlcXVpcmVzIEVDREgtZW5hYmxlZCBPcGVuU1NMIikKKyAgICAgICAgZGVmIHRlc3RfZGVmYXVsdF9lY2RoX2N1cnZlKHNlbGYpOgorICAgICAgICAgICAgIyBJc3N1ZSAjMjEwMTU6IGVsbGlwdGljIGN1cnZlLWJhc2VkIERpZmZpZSBIZWxsbWFuIGtleSBleGNoYW5nZQorICAgICAgICAgICAgIyBzaG91bGQgYmUgZW5hYmxlZCBieSBkZWZhdWx0IG9uIFNTTCBjb250ZXh0cy4KKyAgICAgICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQorICAgICAgICAgICAgY29udGV4dC5sb2FkX2NlcnRfY2hhaW4oQ0VSVEZJTEUpCisgICAgICAgICAgICAjIFByaW9yIHRvIE9wZW5TU0wgMS4wLjAsIEVDREggY2lwaGVycyBoYXZlIHRvIGJlIGVuYWJsZWQKKyAgICAgICAgICAgICMgZXhwbGljaXRseSB1c2luZyB0aGUgJ0VDQ2RyYWZ0JyBjaXBoZXIgYWxpYXMuICBPdGhlcndpc2UsCisgICAgICAgICAgICAjIG91ciBkZWZhdWx0IGNpcGhlciBsaXN0IHNob3VsZCBwcmVmZXIgRUNESC1iYXNlZCBjaXBoZXJzCisgICAgICAgICAgICAjIGF1dG9tYXRpY2FsbHkuCisgICAgICAgICAgICBpZiBzc2wuT1BFTlNTTF9WRVJTSU9OX0lORk8gPCAoMSwgMCwgMCk6CisgICAgICAgICAgICAgICAgY29udGV4dC5zZXRfY2lwaGVycygiRUNDZHJhZnQ6RUNESCIpCisgICAgICAgICAgICB3aXRoIFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PWNvbnRleHQpIGFzIHNlcnZlcjoKKyAgICAgICAgICAgICAgICB3aXRoIGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoKEhPU1QsIHNlcnZlci5wb3J0KSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigiRUNESCIsIHMuY2lwaGVyKClbMF0pCisKICAgICAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoInRscy11bmlxdWUiIGluIHNzbC5DSEFOTkVMX0JJTkRJTkdfVFlQRVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIndGxzLXVuaXF1ZScgY2hhbm5lbCBiaW5kaW5nIG5vdCBhdmFpbGFibGUiKQogICAgICAgICBkZWYgdGVzdF90bHNfdW5pcXVlX2NoYW5uZWxfYmluZGluZyhzZWxmKToKQEAgLTIxMzYsNiArMjc3NSwxMjQgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHN0YXRzWydzZXJ2ZXJfbnBuX3Byb3RvY29scyddKSBlbHNlICdub3RoaW5nJwogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VydmVyX3Jlc3VsdCwgZXhwZWN0ZWQsIG1zZyAlIChzZXJ2ZXJfcmVzdWx0LCAic2VydmVyIikpCiAKKyAgICAgICAgZGVmIHNuaV9jb250ZXh0cyhzZWxmKToKKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQubG9hZF9jZXJ0X2NoYWluKFNJR05FRF9DRVJURklMRSkKKyAgICAgICAgICAgIG90aGVyX2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBvdGhlcl9jb250ZXh0LmxvYWRfY2VydF9jaGFpbihTSUdORURfQ0VSVEZJTEUyKQorICAgICAgICAgICAgY2xpZW50X2NvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfVExTdjEpCisgICAgICAgICAgICBjbGllbnRfY29udGV4dC52ZXJpZnlfbW9kZSA9IHNzbC5DRVJUX1JFUVVJUkVECisgICAgICAgICAgICBjbGllbnRfY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoU0lHTklOR19DQSkKKyAgICAgICAgICAgIHJldHVybiBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQKKworICAgICAgICBkZWYgY2hlY2tfY29tbW9uX25hbWUoc2VsZiwgc3RhdHMsIG5hbWUpOgorICAgICAgICAgICAgY2VydCA9IHN0YXRzWydwZWVyY2VydCddCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCgoJ2NvbW1vbk5hbWUnLCBuYW1lKSwpLCBjZXJ0WydzdWJqZWN0J10pCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2soc2VsZik6CisgICAgICAgICAgICBjYWxscyA9IFtdCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQgPSBzZWxmLnNuaV9jb250ZXh0cygpCisKKyAgICAgICAgICAgIGRlZiBzZXJ2ZXJuYW1lX2NiKHNzbF9zb2NrLCBzZXJ2ZXJfbmFtZSwgaW5pdGlhbF9jb250ZXh0KToKKyAgICAgICAgICAgICAgICBjYWxscy5hcHBlbmQoKHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpKQorICAgICAgICAgICAgICAgIGlmIHNlcnZlcl9uYW1lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICAgICBzc2xfc29jay5jb250ZXh0ID0gb3RoZXJfY29udGV4dAorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VydmVybmFtZV9jYikKKworICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhdHR5PVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgICMgVGhlIGhvc3RuYW1lIHdhcyBmZXRjaGVkIHByb3Blcmx5LCBhbmQgdGhlIGNlcnRpZmljYXRlIHdhcworICAgICAgICAgICAgIyBjaGFuZ2VkIGZvciB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFsoInN1cGVybWVzc2FnZSIsIHNlcnZlcl9jb250ZXh0KV0pCisgICAgICAgICAgICAjIENFUlRGSUxFNCB3YXMgc2VsZWN0ZWQKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29tbW9uX25hbWUoc3RhdHMsICdmYWtlaG9zdG5hbWUnKQorCisgICAgICAgICAgICBjYWxscyA9IFtdCisgICAgICAgICAgICAjIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBzZXJ2ZXJfbmFtZT1Ob25lCisgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPU5vbmUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbKE5vbmUsIHNlcnZlcl9jb250ZXh0KV0pCisgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbW1vbl9uYW1lKHN0YXRzLCAnbG9jYWxob3N0JykKKworICAgICAgICAgICAgIyBDaGVjayBkaXNhYmxpbmcgdGhlIGNhbGxiYWNrCisgICAgICAgICAgICBjYWxscyA9IFtdCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhOb25lKQorCisgICAgICAgICAgICBzdGF0cyA9IHNlcnZlcl9wYXJhbXNfdGVzdChjbGllbnRfY29udGV4dCwgc2VydmVyX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9VHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuaV9uYW1lPSdub3RmdW5ueScpCisgICAgICAgICAgICAjIENlcnRpZmljYXRlIGRpZG4ndCBjaGFuZ2UKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29tbW9uX25hbWUoc3RhdHMsICdsb2NhbGhvc3QnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW10pCisKKyAgICAgICAgQG5lZWRzX3NuaQorICAgICAgICBkZWYgdGVzdF9zbmlfY2FsbGJhY2tfYWxlcnQoc2VsZik6CisgICAgICAgICAgICAjIFJldHVybmluZyBhIFRMUyBhbGVydCBpcyByZWZsZWN0ZWQgdG8gdGhlIGNvbm5lY3RpbmcgY2xpZW50CisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQgPSBzZWxmLnNuaV9jb250ZXh0cygpCisKKyAgICAgICAgICAgIGRlZiBjYl9yZXR1cm5pbmdfYWxlcnQoc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIHJldHVybiBzc2wuQUxFUlRfREVTQ1JJUFRJT05fQUNDRVNTX0RFTklFRAorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soY2JfcmV0dXJuaW5nX2FsZXJ0KQorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNzbC5TU0xFcnJvcikgYXMgY206CisgICAgICAgICAgICAgICAgc3RhdHMgPSBzZXJ2ZXJfcGFyYW1zX3Rlc3QoY2xpZW50X2NvbnRleHQsIHNlcnZlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXR0eT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmlfbmFtZT0nc3VwZXJtZXNzYWdlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLnJlYXNvbiwgJ1RMU1YxX0FMRVJUX0FDQ0VTU19ERU5JRUQnKQorCisgICAgICAgIEBuZWVkc19zbmkKKyAgICAgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrX3JhaXNpbmcoc2VsZik6CisgICAgICAgICAgICAjIFJhaXNpbmcgZmFpbHMgdGhlIGNvbm5lY3Rpb24gd2l0aCBhIFRMUyBoYW5kc2hha2UgZmFpbHVyZSBhbGVydC4KKyAgICAgICAgICAgIHNlcnZlcl9jb250ZXh0LCBvdGhlcl9jb250ZXh0LCBjbGllbnRfY29udGV4dCA9IHNlbGYuc25pX2NvbnRleHRzKCkKKworICAgICAgICAgICAgZGVmIGNiX3JhaXNpbmcoc3NsX3NvY2ssIHNlcnZlcl9uYW1lLCBpbml0aWFsX2NvbnRleHQpOgorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgc2VydmVyX2NvbnRleHQuc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soY2JfcmFpc2luZykKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpIGFzIGNtLCBcCisgICAgICAgICAgICAgICAgIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J3N1cGVybWVzc2FnZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZWFzb24sICdTU0xWM19BTEVSVF9IQU5EU0hBS0VfRkFJTFVSRScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJaZXJvRGl2aXNpb25FcnJvciIsIHN0ZGVyci5nZXR2YWx1ZSgpKQorCisgICAgICAgIEBuZWVkc19zbmkKKyAgICAgICAgZGVmIHRlc3Rfc25pX2NhbGxiYWNrX3dyb25nX3JldHVybl90eXBlKHNlbGYpOgorICAgICAgICAgICAgIyBSZXR1cm5pbmcgdGhlIHdyb25nIHJldHVybiB0eXBlIHRlcm1pbmF0ZXMgdGhlIFRMUyBjb25uZWN0aW9uCisgICAgICAgICAgICAjIHdpdGggYW4gaW50ZXJuYWwgZXJyb3IgYWxlcnQuCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dCwgb3RoZXJfY29udGV4dCwgY2xpZW50X2NvbnRleHQgPSBzZWxmLnNuaV9jb250ZXh0cygpCisKKyAgICAgICAgICAgIGRlZiBjYl93cm9uZ19yZXR1cm5fdHlwZShzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICAgICAgcmV0dXJuICJmb28iCisgICAgICAgICAgICBzZXJ2ZXJfY29udGV4dC5zZXRfc2VydmVybmFtZV9jYWxsYmFjayhjYl93cm9uZ19yZXR1cm5fdHlwZSkKKworICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzc2wuU1NMRXJyb3IpIGFzIGNtLCBcCisgICAgICAgICAgICAgICAgIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyOgorICAgICAgICAgICAgICAgIHN0YXRzID0gc2VydmVyX3BhcmFtc190ZXN0KGNsaWVudF9jb250ZXh0LCBzZXJ2ZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGF0dHk9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25pX25hbWU9J3N1cGVybWVzc2FnZScpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5yZWFzb24sICdUTFNWMV9BTEVSVF9JTlRFUk5BTF9FUlJPUicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJUeXBlRXJyb3IiLCBzdGRlcnIuZ2V0dmFsdWUoKSkKKworICAgICAgICBkZWYgdGVzdF9yZWFkX3dyaXRlX2FmdGVyX2Nsb3NlX3JhaXNlc192YWx1ZXJyb3Ioc2VsZik6CisgICAgICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1NTTHYyMykKKyAgICAgICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAorICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoQ0VSVEZJTEUpCisgICAgICAgICAgICBjb250ZXh0LmxvYWRfY2VydF9jaGFpbihDRVJURklMRSkKKyAgICAgICAgICAgIHNlcnZlciA9IFRocmVhZGVkRWNob1NlcnZlcihjb250ZXh0PWNvbnRleHQsIGNoYXR0eT1GYWxzZSkKKworICAgICAgICAgICAgd2l0aCBzZXJ2ZXI6CisgICAgICAgICAgICAgICAgcyA9IGNvbnRleHQud3JhcF9zb2NrZXQoc29ja2V0LnNvY2tldCgpKQorICAgICAgICAgICAgICAgIHMuY29ubmVjdCgoSE9TVCwgc2VydmVyLnBvcnQpKQorICAgICAgICAgICAgICAgIHMuY2xvc2UoKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgcy5yZWFkLCAxMDI0KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHMud3JpdGUsIGInaGVsbG8nKQorCiAKIGRlZiB0ZXN0X21haW4odmVyYm9zZT1GYWxzZSk6CiAgICAgaWYgc3VwcG9ydC52ZXJib3NlOgpAQCAtMjE1NSwxMCArMjkxMiwxNiBAQAogICAgICAgICAgICAgKHNzbC5PUEVOU1NMX1ZFUlNJT04sIHNzbC5PUEVOU1NMX1ZFUlNJT05fSU5GTykpCiAgICAgICAgIHByaW50KCIgICAgICAgICAgdW5kZXIgJXMiICUgcGxhdCkKICAgICAgICAgcHJpbnQoIiAgICAgICAgICBIQVNfU05JID0gJXIiICUgc3NsLkhBU19TTkkpCisgICAgICAgIHByaW50KCIgICAgICAgICAgT1BfQUxMID0gMHglOHgiICUgc3NsLk9QX0FMTCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcHJpbnQoIiAgICAgICAgICBPUF9OT19UTFN2MV8xID0gMHglOHgiICUgc3NsLk9QX05PX1RMU3YxXzEpCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKIAogICAgIGZvciBmaWxlbmFtZSBpbiBbCiAgICAgICAgIENFUlRGSUxFLCBSRU1PVEVfUk9PVF9DRVJULCBCWVRFU19DRVJURklMRSwKICAgICAgICAgT05MWUNFUlQsIE9OTFlLRVksIEJZVEVTX09OTFlDRVJULCBCWVRFU19PTkxZS0VZLAorICAgICAgICBTSUdORURfQ0VSVEZJTEUsIFNJR05FRF9DRVJURklMRTIsIFNJR05JTkdfQ0EsCiAgICAgICAgIEJBRENFUlQsIEJBREtFWSwgRU1QVFlDRVJUXToKICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGZpbGVuYW1lKToKICAgICAgICAgICAgIHJhaXNlIHN1cHBvcnQuVGVzdEZhaWxlZCgiQ2FuJ3QgcmVhZCBjZXJ0aWZpY2F0ZSBmaWxlICVyIiAlIGZpbGVuYW1lKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdGF0LnB5IGIvTGliL3Rlc3QvdGVzdF9zdGF0LnB5CmluZGV4IGViM2YwN2EuLmFmNmNlZDQgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0YXQucHkKQEAgLTEsOSArMSwxMyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgb3MKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgaW1wb3J0X2ZyZXNoX21vZHVsZQotaW1wb3J0IHN0YXQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIGltcG9ydF9mcmVzaF9tb2R1bGUKIAotY2xhc3MgVGVzdEZpbGVtb2RlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2Nfc3RhdCA9IGltcG9ydF9mcmVzaF9tb2R1bGUoJ3N0YXQnLCBmcmVzaD1bJ19zdGF0J10pCitweV9zdGF0ID0gaW1wb3J0X2ZyZXNoX21vZHVsZSgnc3RhdCcsIGJsb2NrZWQ9Wydfc3RhdCddKQorCitjbGFzcyBUZXN0RmlsZW1vZGU6CisgICAgc3RhdG1vZCA9IE5vbmUKKwogICAgIGZpbGVfZmxhZ3MgPSB7J1NGX0FQUEVORCcsICdTRl9BUkNISVZFRCcsICdTRl9JTU1VVEFCTEUnLCAnU0ZfTk9VTkxJTksnLAogICAgICAgICAgICAgICAgICAgJ1NGX1NOQVBTSE9UJywgJ1VGX0FQUEVORCcsICdVRl9DT01QUkVTU0VEJywgJ1VGX0hJRERFTicsCiAgICAgICAgICAgICAgICAgICAnVUZfSU1NVVRBQkxFJywgJ1VGX05PRFVNUCcsICdVRl9OT1VOTElOSycsICdVRl9PUEFRVUUnfQpAQCAtNjMsMTcgKzY3LDE3IEBACiAgICAgICAgICAgICBzdF9tb2RlID0gb3MubHN0YXQoZm5hbWUpLnN0X21vZGUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN0X21vZGUgPSBvcy5zdGF0KGZuYW1lKS5zdF9tb2RlCi0gICAgICAgIG1vZGVzdHIgPSBzdGF0LmZpbGVtb2RlKHN0X21vZGUpCisgICAgICAgIG1vZGVzdHIgPSBzZWxmLnN0YXRtb2QuZmlsZW1vZGUoc3RfbW9kZSkKICAgICAgICAgcmV0dXJuIHN0X21vZGUsIG1vZGVzdHIKIAogICAgIGRlZiBhc3NlcnRTX0lTKHNlbGYsIG5hbWUsIG1vZGUpOgogICAgICAgICAjIHRlc3QgZm9ybWF0LCBsc3RyaXAgaXMgZm9yIFNfSUZJRk8KLSAgICAgICAgZm10ID0gZ2V0YXR0cihzdGF0LCAiU19JRiIgKyBuYW1lLmxzdHJpcCgiRiIpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JRk1UKG1vZGUpLCBmbXQpCisgICAgICAgIGZtdCA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCAiU19JRiIgKyBuYW1lLmxzdHJpcCgiRiIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lGTVQobW9kZSksIGZtdCkKICAgICAgICAgIyB0ZXN0IHRoYXQganVzdCBvbmUgZnVuY3Rpb24gcmV0dXJucyB0cnVlCiAgICAgICAgIHRlc3RuYW1lID0gIlNfSVMiICsgbmFtZQogICAgICAgICBmb3IgZnVuY25hbWUgaW4gc2VsZi5mb3JtYXRfZnVuY3M6Ci0gICAgICAgICAgICBmdW5jID0gZ2V0YXR0cihzdGF0LCBmdW5jbmFtZSwgTm9uZSkKKyAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwgZnVuY25hbWUsIE5vbmUpCiAgICAgICAgICAgICBpZiBmdW5jIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgaWYgZnVuY25hbWUgPT0gdGVzdG5hbWU6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoZnVuY25hbWUpCkBAIC05MSwzNSArOTUsMzUgQEAKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy1yd3gtLS0tLS0nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRTX0lTKCJSRUciLCBzdF9tb2RlKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuU19JUldYVSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5zdGF0bW9kLlNfSU1PREUoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lSV1hVKQogCiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvMDcwKQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyLCAnLS0tLXJ3eC0tLScpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JTU9ERShzdF9tb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdC5TX0lSV1hHKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zdGF0bW9kLlNfSVJXWEcpCiAKICAgICAgICAgICAgIG9zLmNobW9kKFRFU1RGTiwgMG8wMDcpCiAgICAgICAgICAgICBzdF9tb2RlLCBtb2Rlc3RyID0gc2VsZi5nZXRfbW9kZSgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vZGVzdHIsICctLS0tLS0tcnd4JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdC5TX0lNT0RFKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSVJXWE8pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lNT0RFKHN0X21vZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnN0YXRtb2QuU19JUldYTykKIAogICAgICAgICAgICAgb3MuY2htb2QoVEVTVEZOLCAwbzQ0NCkKICAgICAgICAgICAgIHN0X21vZGUsIG1vZGVzdHIgPSBzZWxmLmdldF9tb2RlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0U19JUygiUkVHIiwgc3RfbW9kZSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9kZXN0ciwgJy1yLS1yLS1yLS0nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0LlNfSU1PREUoc3RfbW9kZSksIDBvNDQ0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnN0YXRtb2QuU19JTU9ERShzdF9tb2RlKSwgMG80NDQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcy5jaG1vZChURVNURk4sIDBvNzAwKQogICAgICAgICAgICAgc3RfbW9kZSwgbW9kZXN0ciA9IHNlbGYuZ2V0X21vZGUoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2Rlc3RyWzozXSwgJy1ydycpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFNfSVMoIlJFRyIsIHN0X21vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXQuU19JRk1UKHN0X21vZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LlNfSUZSRUcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuc3RhdG1vZC5TX0lGTVQoc3RfbW9kZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc3RhdG1vZC5TX0lGUkVHKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICBvcy5ta2RpcihURVNURk4pCkBAIC0xNjUsMjUgKzE2OSwzNCBAQAogCiAgICAgZGVmIHRlc3RfbW9kdWxlX2F0dHJpYnV0ZXMoc2VsZik6CiAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIHNlbGYuc3RhdF9zdHJ1Y3QuaXRlbXMoKToKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhbHVlLCBtb2R2YWx1ZSwga2V5KQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBzZWxmLnBlcm1pc3Npb25fYml0cy5pdGVtcygpOgotICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFsdWUsIG1vZHZhbHVlLCBrZXkpCiAgICAgICAgIGZvciBrZXkgaW4gc2VsZi5maWxlX2ZsYWdzOgotICAgICAgICAgICAgbW9kdmFsdWUgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzZWxmLnN0YXRtb2QsIGtleSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShtb2R2YWx1ZSwgaW50KQogICAgICAgICBmb3Iga2V5IGluIHNlbGYuZm9ybWF0czoKLSAgICAgICAgICAgIG1vZHZhbHVlID0gZ2V0YXR0cihzdGF0LCBrZXkpCisgICAgICAgICAgICBtb2R2YWx1ZSA9IGdldGF0dHIoc2VsZi5zdGF0bW9kLCBrZXkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobW9kdmFsdWUsIGludCkKICAgICAgICAgZm9yIGtleSBpbiBzZWxmLmZvcm1hdF9mdW5jczoKLSAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHN0YXQsIGtleSkKKyAgICAgICAgICAgIGZ1bmMgPSBnZXRhdHRyKHNlbGYuc3RhdG1vZCwga2V5KQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNhbGxhYmxlKGZ1bmMpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKDApLCAwKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGVzdEZpbGVtb2RlKQorY2xhc3MgVGVzdEZpbGVtb2RlQ1N0YXQoVGVzdEZpbGVtb2RlLCB1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgc3RhdG1vZCA9IGNfc3RhdAorCisgICAgZm9ybWF0cyA9IFRlc3RGaWxlbW9kZS5mb3JtYXRzIHwgeydTX0lGRE9PUicsICdTX0lGUE9SVCcsICdTX0lGV0hUJ30KKyAgICBmb3JtYXRfZnVuY3MgPSBUZXN0RmlsZW1vZGUuZm9ybWF0X2Z1bmNzIHwgeydTX0lTRE9PUicsICdTX0lTUE9SVCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnU19JU1dIVCd9CisKKworY2xhc3MgVGVzdEZpbGVtb2RlUHlTdGF0KFRlc3RGaWxlbW9kZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHN0YXRtb2QgPSBweV9zdGF0CisKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5IGIvTGliL3Rlc3QvdGVzdF9zdGF0aXN0aWNzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwODlhZTgKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3N0YXRpc3RpY3MucHkKQEAgLTAsMCArMSwxODQwIEBACisiIiJUZXN0IHN1aXRlIGZvciBzdGF0aXN0aWNzIG1vZHVsZSwgaW5jbHVkaW5nIGhlbHBlciBOdW1lcmljVGVzdENhc2UgYW5kCithcHByb3hfZXF1YWwgZnVuY3Rpb24uCisKKyIiIgorCitpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBkZWNpbWFsCitpbXBvcnQgZG9jdGVzdAoraW1wb3J0IG1hdGgKK2ltcG9ydCByYW5kb20KK2ltcG9ydCBzeXMKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKK2Zyb20gZnJhY3Rpb25zIGltcG9ydCBGcmFjdGlvbgorCisKKyMgTW9kdWxlIHRvIGJlIHRlc3RlZC4KK2ltcG9ydCBzdGF0aXN0aWNzCisKKworIyA9PT0gSGVscGVyIGZ1bmN0aW9ucyBhbmQgY2xhc3MgPT09CisKK2RlZiBfbmFuX2VxdWFsKGEsIGIpOgorICAgICIiIlJldHVybiBUcnVlIGlmIGEgYW5kIGIgYXJlIGJvdGggdGhlIHNhbWUga2luZCBvZiBOQU4uCisKKyAgICA+Pj4gX25hbl9lcXVhbChEZWNpbWFsKCdOQU4nKSwgRGVjaW1hbCgnTkFOJykpCisgICAgVHJ1ZQorICAgID4+PiBfbmFuX2VxdWFsKERlY2ltYWwoJ3NOQU4nKSwgRGVjaW1hbCgnc05BTicpKQorICAgIFRydWUKKyAgICA+Pj4gX25hbl9lcXVhbChEZWNpbWFsKCdOQU4nKSwgRGVjaW1hbCgnc05BTicpKQorICAgIEZhbHNlCisgICAgPj4+IF9uYW5fZXF1YWwoRGVjaW1hbCg0MiksIERlY2ltYWwoJ05BTicpKQorICAgIEZhbHNlCisKKyAgICA+Pj4gX25hbl9lcXVhbChmbG9hdCgnTkFOJyksIGZsb2F0KCdOQU4nKSkKKyAgICBUcnVlCisgICAgPj4+IF9uYW5fZXF1YWwoZmxvYXQoJ05BTicpLCAwLjUpCisgICAgRmFsc2UKKworICAgID4+PiBfbmFuX2VxdWFsKGZsb2F0KCdOQU4nKSwgRGVjaW1hbCgnTkFOJykpCisgICAgRmFsc2UKKworICAgIE5BTiBwYXlsb2FkcyBhcmUgbm90IGNvbXBhcmVkLgorICAgICIiIgorICAgIGlmIHR5cGUoYSkgaXMgbm90IHR5cGUoYik6CisgICAgICAgIHJldHVybiBGYWxzZQorICAgIGlmIGlzaW5zdGFuY2UoYSwgZmxvYXQpOgorICAgICAgICByZXR1cm4gbWF0aC5pc25hbihhKSBhbmQgbWF0aC5pc25hbihiKQorICAgIGFleHAgPSBhLmFzX3R1cGxlKClbMl0KKyAgICBiZXhwID0gYi5hc190dXBsZSgpWzJdCisgICAgcmV0dXJuIChhZXhwID09IGJleHApIGFuZCAoYWV4cCBpbiAoJ24nLCAnTicpKSAgIyBCb3RoIE5BTiBvciBib3RoIHNOQU4uCisKKworZGVmIF9jYWxjX2Vycm9ycyhhY3R1YWwsIGV4cGVjdGVkKToKKyAgICAiIiJSZXR1cm4gdGhlIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvcnMgYmV0d2VlbiB0d28gbnVtYmVycy4KKworICAgID4+PiBfY2FsY19lcnJvcnMoMTAwLCA3NSkKKyAgICAoMjUsIDAuMjUpCisgICAgPj4+IF9jYWxjX2Vycm9ycygxMDAsIDEwMCkKKyAgICAoMCwgMC4wKQorCisgICAgUmV0dXJucyB0aGUgKGFic29sdXRlIGVycm9yLCByZWxhdGl2ZSBlcnJvcikgYmV0d2VlbiB0aGUgdHdvIGFyZ3VtZW50cy4KKyAgICAiIiIKKyAgICBiYXNlID0gbWF4KGFicyhhY3R1YWwpLCBhYnMoZXhwZWN0ZWQpKQorICAgIGFic19lcnIgPSBhYnMoYWN0dWFsIC0gZXhwZWN0ZWQpCisgICAgcmVsX2VyciA9IGFic19lcnIvYmFzZSBpZiBiYXNlIGVsc2UgZmxvYXQoJ2luZicpCisgICAgcmV0dXJuIChhYnNfZXJyLCByZWxfZXJyKQorCisKK2RlZiBhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTFlLTEyLCByZWw9MWUtNyk6CisgICAgIiIiYXBwcm94X2VxdWFsKHgsIHkgWywgdG9sIFssIHJlbF1dKSA9PiBUcnVlfEZhbHNlCisKKyAgICBSZXR1cm4gVHJ1ZSBpZiBudW1iZXJzIHggYW5kIHkgYXJlIGFwcHJveGltYXRlbHkgZXF1YWwsIHRvIHdpdGhpbiBzb21lCisgICAgbWFyZ2luIG9mIGVycm9yLCBvdGhlcndpc2UgcmV0dXJuIEZhbHNlLiBOdW1iZXJzIHdoaWNoIGNvbXBhcmUgZXF1YWwKKyAgICB3aWxsIGFsc28gY29tcGFyZSBhcHByb3hpbWF0ZWx5IGVxdWFsLgorCisgICAgeCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIHkgaWYgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGlzIGxlc3MgdGhhbgorICAgIGFuIGFic29sdXRlIGVycm9yIHRvbCBvciBhIHJlbGF0aXZlIGVycm9yIHJlbCwgd2hpY2hldmVyIGlzIGJpZ2dlci4KKworICAgIElmIGdpdmVuLCBib3RoIHRvbCBhbmQgcmVsIG11c3QgYmUgZmluaXRlLCBub24tbmVnYXRpdmUgbnVtYmVycy4gSWYgbm90CisgICAgZ2l2ZW4sIGRlZmF1bHQgdmFsdWVzIGFyZSB0b2w9MWUtMTIgYW5kIHJlbD0xZS03LgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxLjI1ODksIDEuMjU4NywgdG9sPTAuMDAwMywgcmVsPTApCisgICAgVHJ1ZQorICAgID4+PiBhcHByb3hfZXF1YWwoMS4yNTg5LCAxLjI1ODcsIHRvbD0wLjAwMDEsIHJlbD0wKQorICAgIEZhbHNlCisKKyAgICBBYnNvbHV0ZSBlcnJvciBpcyBkZWZpbmVkIGFzIGFicyh4LXkpOyBpZiB0aGF0IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0bworICAgIHRvbCwgeCBhbmQgeSBhcmUgY29uc2lkZXJlZCBhcHByb3hpbWF0ZWx5IGVxdWFsLgorCisgICAgUmVsYXRpdmUgZXJyb3IgaXMgZGVmaW5lZCBhcyBhYnMoKHgteSkveCkgb3IgYWJzKCh4LXkpL3kpLCB3aGljaGV2ZXIgaXMKKyAgICBzbWFsbGVyLCBwcm92aWRlZCB4IG9yIHkgYXJlIG5vdCB6ZXJvLiBJZiB0aGF0IGZpZ3VyZSBpcyBsZXNzIHRoYW4gb3IKKyAgICBlcXVhbCB0byByZWwsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgIENvbXBsZXggbnVtYmVycyBhcmUgbm90IGRpcmVjdGx5IHN1cHBvcnRlZC4gSWYgeW91IHdpc2ggdG8gY29tcGFyZSB0bworICAgIGNvbXBsZXggbnVtYmVycywgZXh0cmFjdCB0aGVpciByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMgYW5kIGNvbXBhcmUgdGhlbQorICAgIGluZGl2aWR1YWxseS4KKworICAgIE5BTnMgYWx3YXlzIGNvbXBhcmUgdW5lcXVhbCwgZXZlbiB3aXRoIHRoZW1zZWx2ZXMuIEluZmluaXRpZXMgY29tcGFyZQorICAgIGFwcHJveGltYXRlbHkgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIHNpZ24gKGJvdGggcG9zaXRpdmUgb3IgYm90aAorICAgIG5lZ2F0aXZlKS4gSW5maW5pdGllcyB3aXRoIGRpZmZlcmVudCBzaWducyBjb21wYXJlIHVuZXF1YWw7IHNvIGRvCisgICAgY29tcGFyaXNvbnMgb2YgaW5maW5pdGllcyB3aXRoIGZpbml0ZSBudW1iZXJzLgorICAgICIiIgorICAgIGlmIHRvbCA8IDAgb3IgcmVsIDwgMDoKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignZXJyb3IgdG9sZXJhbmNlcyBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpCisgICAgIyBOQU5zIGFyZSBuZXZlciBlcXVhbCB0byBhbnl0aGluZywgYXBwcm94aW1hdGVseSBvciBvdGhlcndpc2UuCisgICAgaWYgbWF0aC5pc25hbih4KSBvciBtYXRoLmlzbmFuKHkpOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAjIE51bWJlcnMgd2hpY2ggY29tcGFyZSBlcXVhbCBhbHNvIGNvbXBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKyAgICBpZiB4ID09IHk6CisgICAgICAgICMgVGhpcyBpbmNsdWRlcyB0aGUgY2FzZSBvZiB0d28gaW5maW5pdGllcyB3aXRoIHRoZSBzYW1lIHNpZ24uCisgICAgICAgIHJldHVybiBUcnVlCisgICAgaWYgbWF0aC5pc2luZih4KSBvciBtYXRoLmlzaW5mKHkpOgorICAgICAgICAjIFRoaXMgaW5jbHVkZXMgdGhlIGNhc2Ugb2YgdHdvIGluZmluaXRpZXMgb2Ygb3Bwb3NpdGUgc2lnbiwgb3IKKyAgICAgICAgIyBvbmUgaW5maW5pdHkgYW5kIG9uZSBmaW5pdGUgbnVtYmVyLgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAjIFR3byBmaW5pdGUgbnVtYmVycy4KKyAgICBhY3R1YWxfZXJyb3IgPSBhYnMoeCAtIHkpCisgICAgYWxsb3dlZF9lcnJvciA9IG1heCh0b2wsIHJlbCptYXgoYWJzKHgpLCBhYnMoeSkpKQorICAgIHJldHVybiBhY3R1YWxfZXJyb3IgPD0gYWxsb3dlZF9lcnJvcgorCisKKyMgVGhpcyBjbGFzcyBleGlzdHMgb25seSBhcyBzb21ld2hlcmUgdG8gc3RpY2sgYSBkb2NzdHJpbmcgY29udGFpbmluZworIyBkb2N0ZXN0cy4gVGhlIGZvbGxvd2luZyBkb2NzdHJpbmcgYW5kIHRlc3RzIHdlcmUgb3JpZ2luYWxseSBpbiBhIHNlcGFyYXRlCisjIG1vZHVsZS4gTm93IHRoYXQgaXQgaGFzIGJlZW4gbWVyZ2VkIGluIGhlcmUsIEkgbmVlZCBzb21ld2hlcmUgdG8gaGFuZyB0aGUuCisjIGRvY3N0cmluZy4gVWx0aW1hdGVseSwgdGhpcyBjbGFzcyB3aWxsIGRpZSwgYW5kIHRoZSBpbmZvcm1hdGlvbiBiZWxvdyB3aWxsCisjIGVpdGhlciBiZWNvbWUgcmVkdW5kYW50LCBvciBiZSBtb3ZlZCBpbnRvIG1vcmUgYXBwcm9wcmlhdGUgcGxhY2VzLgorY2xhc3MgX0RvTm90aGluZzoKKyAgICAiIiIKKyAgICBXaGVuIGRvaW5nIG51bWVyaWMgd29yaywgZXNwZWNpYWxseSB3aXRoIGZsb2F0cywgZXhhY3QgZXF1YWxpdHkgaXMgb2Z0ZW4KKyAgICBub3Qgd2hhdCB5b3Ugd2FudC4gRHVlIHRvIHJvdW5kLW9mZiBlcnJvciwgaXQgaXMgb2Z0ZW4gYSBiYWQgaWRlYSB0byB0cnkKKyAgICB0byBjb21wYXJlIGZsb2F0cyB3aXRoIGVxdWFsaXR5LiBJbnN0ZWFkIHRoZSB1c3VhbCBwcm9jZWR1cmUgaXMgdG8gdGVzdAorICAgIHRoZW0gd2l0aCBzb21lIChob3BlZnVsbHkgc21hbGwhKSBhbGxvd2FuY2UgZm9yIGVycm9yLgorCisgICAgVGhlIGBgYXBwcm94X2VxdWFsYGAgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGVpdGhlciBhbiBhYnNvbHV0ZQorICAgIGVycm9yIHRvbGVyYW5jZSwgb3IgYSByZWxhdGl2ZSBlcnJvciwgb3IgYm90aC4KKworICAgIEFic29sdXRlIGVycm9yIHRvbGVyYW5jZXMgYXJlIHNpbXBsZSwgYnV0IHlvdSBuZWVkIHRvIGtub3cgdGhlIG1hZ25pdHVkZQorICAgIG9mIHRoZSBxdWFudGl0aWVzIGJlaW5nIGNvbXBhcmVkOgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDUsIDEyLjM0NiwgdG9sPTFlLTMpCisgICAgVHJ1ZQorICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1ZTYsIDEyLjM0NmU2LCB0b2w9MWUtMykgICMgdG9sIGlzIHRvbyBzbWFsbC4KKyAgICBGYWxzZQorCisgICAgUmVsYXRpdmUgZXJyb3JzIGFyZSBtb3JlIHN1aXRhYmxlIHdoZW4gdGhlIHZhbHVlcyB5b3UgYXJlIGNvbXBhcmluZyBjYW4KKyAgICB2YXJ5IGluIG1hZ25pdHVkZToKKworICAgID4+PiBhcHByb3hfZXF1YWwoMTIuMzQ1LCAxMi4zNDYsIHJlbD0xZS00KQorICAgIFRydWUKKyAgICA+Pj4gYXBwcm94X2VxdWFsKDEyLjM0NWU2LCAxMi4zNDZlNiwgcmVsPTFlLTQpCisgICAgVHJ1ZQorCisgICAgYnV0IGEgbmFpdmUgaW1wbGVtZW50YXRpb24gb2YgcmVsYXRpdmUgZXJyb3IgdGVzdGluZyBjYW4gcnVuIGludG8gdHJvdWJsZQorICAgIGFyb3VuZCB6ZXJvLgorCisgICAgSWYgeW91IHN1cHBseSBib3RoIGFuIGFic29sdXRlIHRvbGVyYW5jZSBhbmQgYSByZWxhdGl2ZSBlcnJvciwgdGhlCisgICAgY29tcGFyaXNvbiBzdWNjZWVkcyBpZiBlaXRoZXIgaW5kaXZpZHVhbCB0ZXN0IHN1Y2NlZWRzOgorCisgICAgPj4+IGFwcHJveF9lcXVhbCgxMi4zNDVlNiwgMTIuMzQ2ZTYsIHRvbD0xZS0zLCByZWw9MWUtNCkKKyAgICBUcnVlCisKKyAgICAiIiIKKyAgICBwYXNzCisKKworCisjIFdlIHByZWZlciB0aGlzIGZvciB0ZXN0aW5nIG51bWVyaWMgdmFsdWVzIHRoYXQgbWF5IG5vdCBiZSBleGFjdGx5IGVxdWFsLAorIyBhbmQgYXZvaWQgdXNpbmcgVGVzdENhc2UuYXNzZXJ0QWxtb3N0RXF1YWwsIGJlY2F1c2UgaXQgc3Vja3MgOi0pCisKK2NsYXNzIE51bWVyaWNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiVW5pdCB0ZXN0IGNsYXNzIGZvciBudW1lcmljIHdvcmsuCisKKyAgICBUaGlzIHN1YmNsYXNzZXMgVGVzdENhc2UuIEluIGFkZGl0aW9uIHRvIHRoZSBzdGFuZGFyZCBtZXRob2QKKyAgICBgYFRlc3RDYXNlLmFzc2VydEFsbW9zdEVxdWFsYGAsICBgYGFzc2VydEFwcHJveEVxdWFsYGAgaXMgcHJvdmlkZWQuCisgICAgIiIiCisgICAgIyBCeSBkZWZhdWx0LCB3ZSBleHBlY3QgZXhhY3QgZXF1YWxpdHksIHVubGVzcyBvdmVycmlkZGVuLgorICAgIHRvbCA9IHJlbCA9IDAKKworICAgIGRlZiBhc3NlcnRBcHByb3hFcXVhbCgKKyAgICAgICAgICAgIHNlbGYsIGZpcnN0LCBzZWNvbmQsIHRvbD1Ob25lLCByZWw9Tm9uZSwgbXNnPU5vbmUKKyAgICAgICAgICAgICk6CisgICAgICAgICIiIlRlc3QgcGFzc2VzIGlmIGBgZmlyc3RgYCBhbmQgYGBzZWNvbmRgYCBhcmUgYXBwcm94aW1hdGVseSBlcXVhbC4KKworICAgICAgICBUaGlzIHRlc3QgcGFzc2VzIGlmIGBgZmlyc3RgYCBhbmQgYGBzZWNvbmRgYCBhcmUgZXF1YWwgdG8KKyAgICAgICAgd2l0aGluIGBgdG9sYGAsIGFuIGFic29sdXRlIGVycm9yLCBvciBgYHJlbGBgLCBhIHJlbGF0aXZlIGVycm9yLgorCisgICAgICAgIElmIGVpdGhlciBgYHRvbGBgIG9yIGBgcmVsYGAgYXJlIE5vbmUgb3Igbm90IGdpdmVuLCB0aGV5IGRlZmF1bHQgdG8KKyAgICAgICAgdGVzdCBhdHRyaWJ1dGVzIG9mIHRoZSBzYW1lIG5hbWUgKGJ5IGRlZmF1bHQsIDApLgorCisgICAgICAgIFRoZSBvYmplY3RzIG1heSBiZSBlaXRoZXIgbnVtYmVycywgb3Igc2VxdWVuY2VzIG9mIG51bWJlcnMuIFNlcXVlbmNlcworICAgICAgICBhcmUgdGVzdGVkIGVsZW1lbnQtYnktZWxlbWVudC4KKworICAgICAgICA+Pj4gY2xhc3MgTXlUZXN0KE51bWVyaWNUZXN0Q2FzZSk6CisgICAgICAgIC4uLiAgICAgZGVmIHRlc3RfbnVtYmVyKHNlbGYpOgorICAgICAgICAuLi4gICAgICAgICB4ID0gMS4wLzYKKyAgICAgICAgLi4uICAgICAgICAgeSA9IHN1bShbeF0qNikKKyAgICAgICAgLi4uICAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbCh5LCAxLjAsIHRvbD0xZS0xNSkKKyAgICAgICAgLi4uICAgICBkZWYgdGVzdF9zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgLi4uICAgICAgICAgYSA9IFsxLjAwMSwgMS4wMDFlLTEwLCAxLjAwMWUxMF0KKyAgICAgICAgLi4uICAgICAgICAgYiA9IFsxLjAsIDFlLTEwLCAxZTEwXQorICAgICAgICAuLi4gICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKGEsIGIsIHJlbD0xZS0zKQorICAgICAgICAuLi4KKyAgICAgICAgPj4+IGltcG9ydCB1bml0dGVzdAorICAgICAgICA+Pj4gZnJvbSBpbyBpbXBvcnQgU3RyaW5nSU8gICMgU3VwcHJlc3MgdGVzdCBydW5uZXIgb3V0cHV0LgorICAgICAgICA+Pj4gc3VpdGUgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkubG9hZFRlc3RzRnJvbVRlc3RDYXNlKE15VGVzdCkKKyAgICAgICAgPj4+IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHN0cmVhbT1TdHJpbmdJTygpKS5ydW4oc3VpdGUpCisgICAgICAgIDx1bml0dGVzdC5ydW5uZXIuVGV4dFRlc3RSZXN1bHQgcnVuPTIgZXJyb3JzPTAgZmFpbHVyZXM9MD4KKworICAgICAgICAiIiIKKyAgICAgICAgaWYgdG9sIGlzIE5vbmU6CisgICAgICAgICAgICB0b2wgPSBzZWxmLnRvbAorICAgICAgICBpZiByZWwgaXMgTm9uZToKKyAgICAgICAgICAgIHJlbCA9IHNlbGYucmVsCisgICAgICAgIGlmICgKKyAgICAgICAgICAgICAgICBpc2luc3RhbmNlKGZpcnN0LCBjb2xsZWN0aW9ucy5TZXF1ZW5jZSkgYW5kCisgICAgICAgICAgICAgICAgaXNpbnN0YW5jZShzZWNvbmQsIGNvbGxlY3Rpb25zLlNlcXVlbmNlKQorICAgICAgICAgICAgKToKKyAgICAgICAgICAgIGNoZWNrID0gc2VsZi5fY2hlY2tfYXBwcm94X3NlcQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgY2hlY2sgPSBzZWxmLl9jaGVja19hcHByb3hfbnVtCisgICAgICAgIGNoZWNrKGZpcnN0LCBzZWNvbmQsIHRvbCwgcmVsLCBtc2cpCisKKyAgICBkZWYgX2NoZWNrX2FwcHJveF9zZXEoc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIG1zZyk6CisgICAgICAgIGlmIGxlbihmaXJzdCkgIT0gbGVuKHNlY29uZCk6CisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICgKKyAgICAgICAgICAgICAgICAic2VxdWVuY2VzIGRpZmZlciBpbiBsZW5ndGg6ICVkIGl0ZW1zICE9ICVkIGl0ZW1zIgorICAgICAgICAgICAgICAgICUgKGxlbihmaXJzdCksIGxlbihzZWNvbmQpKQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdE1lc3NhZ2UobXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisgICAgICAgIGZvciBpLCAoYSxlKSBpbiBlbnVtZXJhdGUoemlwKGZpcnN0LCBzZWNvbmQpKToKKyAgICAgICAgICAgIHNlbGYuX2NoZWNrX2FwcHJveF9udW0oYSwgZSwgdG9sLCByZWwsIG1zZywgaSkKKworICAgIGRlZiBfY2hlY2tfYXBwcm94X251bShzZWxmLCBmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgbXNnLCBpZHg9Tm9uZSk6CisgICAgICAgIGlmIGFwcHJveF9lcXVhbChmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCk6CisgICAgICAgICAgICAjIFRlc3QgcGFzc2VzLiBSZXR1cm4gZWFybHksIHdlIGFyZSBkb25lLgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgIyBPdGhlcndpc2Ugd2UgZmFpbGVkLgorICAgICAgICBzdGFuZGFyZE1zZyA9IHNlbGYuX21ha2Vfc3RkX2Vycl9tc2coZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCkKKyAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQorICAgICAgICByYWlzZSBzZWxmLmZhaWx1cmVFeGNlcHRpb24obXNnKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfbWFrZV9zdGRfZXJyX21zZyhmaXJzdCwgc2Vjb25kLCB0b2wsIHJlbCwgaWR4KToKKyAgICAgICAgIyBDcmVhdGUgdGhlIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgZm9yIGFwcHJveF9lcXVhbCBmYWlsdXJlcy4KKyAgICAgICAgYXNzZXJ0IGZpcnN0ICE9IHNlY29uZAorICAgICAgICB0ZW1wbGF0ZSA9ICgKKyAgICAgICAgICAgICcgICVyICE9ICVyXG4nCisgICAgICAgICAgICAnICB2YWx1ZXMgZGlmZmVyIGJ5IG1vcmUgdGhhbiB0b2w9JXIgYW5kIHJlbD0lclxuJworICAgICAgICAgICAgJyAgLT4gYWJzb2x1dGUgZXJyb3IgPSAlclxuJworICAgICAgICAgICAgJyAgLT4gcmVsYXRpdmUgZXJyb3IgPSAlcicKKyAgICAgICAgICAgICkKKyAgICAgICAgaWYgaWR4IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaGVhZGVyID0gJ251bWVyaWMgc2VxdWVuY2VzIGZpcnN0IGRpZmZlciBhdCBpbmRleCAlZC5cbicgJSBpZHgKKyAgICAgICAgICAgIHRlbXBsYXRlID0gaGVhZGVyICsgdGVtcGxhdGUKKyAgICAgICAgIyBDYWxjdWxhdGUgYWN0dWFsIGVycm9yczoKKyAgICAgICAgYWJzX2VyciwgcmVsX2VyciA9IF9jYWxjX2Vycm9ycyhmaXJzdCwgc2Vjb25kKQorICAgICAgICByZXR1cm4gdGVtcGxhdGUgJSAoZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGFic19lcnIsIHJlbF9lcnIpCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT0KKyMgPT09IFRlc3QgdGhlIGhlbHBlcnMgPT09CisjID09PT09PT09PT09PT09PT09PT09PT09PQorCisKKyMgLS0tIFRlc3RzIGZvciBhcHByb3hfZXF1YWwgLS0tCisKK2NsYXNzIEFwcHJveEVxdWFsU3ltbWV0cnlUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3Qgc3ltbWV0cnkgb2YgYXBwcm94X2VxdWFsLgorCisgICAgZGVmIHRlc3RfcmVsYXRpdmVfc3ltbWV0cnkoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBhcHByb3hfZXF1YWwgdHJlYXRzIHJlbGF0aXZlIGVycm9yIHN5bW1ldHJpY2FsbHkuCisgICAgICAgICMgKGEtYikvYSBpcyB1c3VhbGx5IG5vdCBlcXVhbCB0byAoYS1iKS9iLiBFbnN1cmUgdGhhdCB0aGlzCisgICAgICAgICMgZG9lc24ndCBtYXR0ZXIuCisgICAgICAgICMKKyAgICAgICAgIyAgIE5vdGU6IHRoZSByZWFzb24gZm9yIHRoaXMgdGVzdCBpcyB0aGF0IGFuIGVhcmx5IHZlcnNpb24KKyAgICAgICAgIyAgIG9mIGFwcHJveF9lcXVhbCB3YXMgbm90IHN5bW1ldHJpYy4gQSByZWxhdGl2ZSBlcnJvciB0ZXN0CisgICAgICAgICMgICB3b3VsZCBwYXNzLCBvciBmYWlsLCBkZXBlbmRpbmcgb24gd2hpY2ggdmFsdWUgd2FzIHBhc3NlZAorICAgICAgICAjICAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgICAgICAjCisgICAgICAgIGFyZ3MxID0gWzI0NTYsIDM3LjgsIC0xMi40NSwgRGVjaW1hbCgnMi41NCcpLCBGcmFjdGlvbigxNywgNTQpXQorICAgICAgICBhcmdzMiA9IFsyNDU5LCAzNy4yLCAtMTIuNDEsIERlY2ltYWwoJzIuNTknKSwgRnJhY3Rpb24oMTUsIDU0KV0KKyAgICAgICAgYXNzZXJ0IGxlbihhcmdzMSkgPT0gbGVuKGFyZ3MyKQorICAgICAgICBmb3IgYSwgYiBpbiB6aXAoYXJnczEsIGFyZ3MyKToKKyAgICAgICAgICAgIHNlbGYuZG9fcmVsYXRpdmVfc3ltbWV0cnkoYSwgYikKKworICAgIGRlZiBkb19yZWxhdGl2ZV9zeW1tZXRyeShzZWxmLCBhLCBiKToKKyAgICAgICAgYSwgYiA9IG1pbihhLCBiKSwgbWF4KGEsIGIpCisgICAgICAgIGFzc2VydCBhIDwgYgorICAgICAgICBkZWx0YSA9IGIgLSBhICAjIFRoZSBhYnNvbHV0ZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHZhbHVlcy4KKyAgICAgICAgcmVsX2VycjEsIHJlbF9lcnIyID0gYWJzKGRlbHRhL2EpLCBhYnMoZGVsdGEvYikKKyAgICAgICAgIyBDaG9vc2UgYW4gZXJyb3IgbWFyZ2luIGhhbGZ3YXkgYmV0d2VlbiB0aGUgdHdvLgorICAgICAgICByZWwgPSAocmVsX2VycjEgKyByZWxfZXJyMikvMgorICAgICAgICAjIE5vdyBzZWUgdGhhdCB2YWx1ZXMgYSBhbmQgYiBjb21wYXJlIGFwcHJveCBlcXVhbCByZWdhcmRsZXNzIG9mCisgICAgICAgICMgd2hpY2ggaXMgZ2l2ZW4gZmlyc3QuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoYSwgYiwgdG9sPTAsIHJlbD1yZWwpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGIsIGEsIHRvbD0wLCByZWw9cmVsKSkKKworICAgIGRlZiB0ZXN0X3N5bW1ldHJ5KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhcHByb3hfZXF1YWwoYSwgYikgPT0gYXBwcm94X2VxdWFsKGIsIGEpCisgICAgICAgIGFyZ3MgPSBbLTIzLCAtMiwgNSwgMTA3LCA5MzU2OF0KKyAgICAgICAgZGVsdGEgPSAyCisgICAgICAgIGZvciBhIGluIGFyZ3M6CisgICAgICAgICAgICBmb3IgdHlwZV8gaW4gKGludCwgZmxvYXQsIERlY2ltYWwsIEZyYWN0aW9uKToKKyAgICAgICAgICAgICAgICB4ID0gdHlwZV8oYSkqMTAwCisgICAgICAgICAgICAgICAgeSA9IHggKyBkZWx0YQorICAgICAgICAgICAgICAgIHIgPSBhYnMoZGVsdGEvbWF4KHgsIHkpKQorICAgICAgICAgICAgICAgICMgVGhlcmUgYXJlIGZpdmUgY2FzZXMgdG8gY2hlY2s6CisgICAgICAgICAgICAgICAgIyAxKSBhY3R1YWwgZXJyb3IgPD0gdG9sLCA8PSByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLCByZWw9cikKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhKzEsIHJlbD0yKnIpCisgICAgICAgICAgICAgICAgIyAyKSBhY3R1YWwgZXJyb3IgPiB0b2wsID4gcmVsCisgICAgICAgICAgICAgICAgc2VsZi5kb19zeW1tZXRyeV90ZXN0KHgsIHksIHRvbD1kZWx0YS0xLCByZWw9ci8yKQorICAgICAgICAgICAgICAgICMgMykgYWN0dWFsIGVycm9yIDw9IHRvbCwgPiByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLCByZWw9ci8yKQorICAgICAgICAgICAgICAgICMgNCkgYWN0dWFsIGVycm9yID4gdG9sLCA8PSByZWwKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeSwgdG9sPWRlbHRhLTEsIHJlbD1yKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9ZGVsdGEtMSwgcmVsPTIqcikKKyAgICAgICAgICAgICAgICAjIDUpIGV4YWN0IGVxdWFsaXR5IHRlc3QKKyAgICAgICAgICAgICAgICBzZWxmLmRvX3N5bW1ldHJ5X3Rlc3QoeCwgeCwgdG9sPTAsIHJlbD0wKQorICAgICAgICAgICAgICAgIHNlbGYuZG9fc3ltbWV0cnlfdGVzdCh4LCB5LCB0b2w9MCwgcmVsPTApCisKKyAgICBkZWYgZG9fc3ltbWV0cnlfdGVzdChzZWxmLCBhLCBiLCB0b2wsIHJlbCk6CisgICAgICAgIHRlbXBsYXRlID0gImFwcHJveF9lcXVhbCBjb21wYXJpc29ucyBkb24ndCBtYXRjaCBmb3IgJXIiCisgICAgICAgIGZsYWcxID0gYXBwcm94X2VxdWFsKGEsIGIsIHRvbCwgcmVsKQorICAgICAgICBmbGFnMiA9IGFwcHJveF9lcXVhbChiLCBhLCB0b2wsIHJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbGFnMSwgZmxhZzIsIHRlbXBsYXRlLmZvcm1hdCgoYSwgYiwgdG9sLCByZWwpKSkKKworCitjbGFzcyBBcHByb3hFcXVhbEV4YWN0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IHRoZSBhcHByb3hfZXF1YWwgZnVuY3Rpb24gd2l0aCBleGFjdGx5IGVxdWFsIHZhbHVlcy4KKyAgICAjIEVxdWFsIHZhbHVlcyBzaG91bGQgY29tcGFyZSBhcyBhcHByb3hpbWF0ZWx5IGVxdWFsLgorICAgICMgVGVzdCBjYXNlcyBmb3IgZXhhY3RseSBlcXVhbCB2YWx1ZXMsIHdoaWNoIHNob3VsZCBjb21wYXJlIGFwcHJveAorICAgICMgZXF1YWwgcmVnYXJkbGVzcyBvZiB0aGUgZXJyb3IgdG9sZXJhbmNlcyBnaXZlbi4KKworICAgIGRlZiBkb19leGFjdGx5X2VxdWFsX3Rlc3Qoc2VsZiwgeCwgdG9sLCByZWwpOgorICAgICAgICByZXN1bHQgPSBhcHByb3hfZXF1YWwoeCwgeCwgdG9sPXRvbCwgcmVsPXJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCwgJ2VxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgeCkKKyAgICAgICAgcmVzdWx0ID0gYXBwcm94X2VxdWFsKC14LCAteCwgdG9sPXRvbCwgcmVsPXJlbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdCwgJ2VxdWFsaXR5IGZhaWx1cmUgZm9yIHg9JXInICUgLXgpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIGludCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIGZvciBuIGluIFs0MiwgMTk3NDAsIDE0OTc0LCAyMzAsIDE3OTUsIDcwMDI0NSwgMzY1ODddOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QobiwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCBmbG9hdCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwuCisgICAgICAgIGZvciB4IGluIFswLjQyLCAxLjk3NDAsIDE0OTcuNCwgMjMuMCwgMTc5LjUsIDcwLjAyNDUsIDM2LjU4N106CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCh4LCAwLCAwKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIEZyYWN0aW9uIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbC4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGZvciBmIGluIFtGKDEsIDIpLCBGKDApLCBGKDUsIDMpLCBGKDksIDcpLCBGKDM1LCAzNiksIEYoMywgNyldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoZiwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIERlY2ltYWwgdmFsdWVzIGFyZSBleGFjdGx5IGVxdWFsLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBmb3IgZCBpbiBtYXAoRCwgIjguMiAzMS4yNzQgOTEyLjA0IDE2Ljc0NSAxLjIwNDciLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoZCwgMCwgMCkKKworICAgIGRlZiB0ZXN0X2V4YWN0bHlfZXF1YWxfYWJzb2x1dGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVxdWFsIHZhbHVlcyBhcmUgZXhhY3RseSBlcXVhbCB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgbiBpbiBbMTYsIDEwMTMsIDEzNzIsIDExOTgsIDk3MSwgNF06CisgICAgICAgICAgICAjIFRlc3QgYXMgaW50cy4KKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KG4sIDAuMDEsIDApCisgICAgICAgICAgICAjIFRlc3QgYXMgZmxvYXRzLgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3Qobi8xMCwgMC4wMSwgMCkKKyAgICAgICAgICAgICMgVGVzdCBhcyBGcmFjdGlvbnMuCisgICAgICAgICAgICBmID0gRnJhY3Rpb24obiwgMTIzNCkKKyAgICAgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KGYsIDAuMDEsIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX2Fic29sdXRlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgZXF1YWwgRGVjaW1hbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoRGVjaW1hbCgiMy41NzEiKSwgRGVjaW1hbCgiMC4wMSIpLCAwKQorICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCgtRGVjaW1hbCgiODEuMzk3MSIpLCBEZWNpbWFsKCIwLjAxIiksIDApCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X2VxdWFsX3JlbGF0aXZlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGV4YWN0bHkgZXF1YWwgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbODM0NywgMTAxLjMsIC03OTEwLjI4LCBGcmFjdGlvbig1LCAyMSldOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoeCwgMCwgMC4wMSkKKyAgICAgICAgc2VsZi5kb19leGFjdGx5X2VxdWFsX3Rlc3QoRGVjaW1hbCgiMTEuNjgiKSwgMCwgRGVjaW1hbCgiMC4wMSIpKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV9lcXVhbF9ib3RoKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBlcXVhbCB2YWx1ZXMgYXJlIGVxdWFsIHdoZW4gYm90aCB0b2wgYW5kIHJlbCBhcmUgZ2l2ZW4uCisgICAgICAgIGZvciB4IGluIFs0MTAxNywgMTYuNzQyLCAtODEzLjAyLCBGcmFjdGlvbigzLCA4KV06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfZXF1YWxfdGVzdCh4LCAwLjEsIDAuMDEpCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIHNlbGYuZG9fZXhhY3RseV9lcXVhbF90ZXN0KEQoIjcuMiIpLCBEKCIwLjEiKSwgRCgiMC4wMSIpKQorCisKK2NsYXNzIEFwcHJveEVxdWFsVW5lcXVhbFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVW5lcXVhbCB2YWx1ZXMgc2hvdWxkIGNvbXBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlcy4KKyAgICAjIFRlc3QgY2FzZXMgZm9yIHVuZXF1YWwgdmFsdWVzLCB3aXRoIGV4YWN0IGVxdWFsaXR5IHRlc3QuCisKKyAgICBkZWYgZG9fZXhhY3RseV91bmVxdWFsX3Rlc3Qoc2VsZiwgeCk6CisgICAgICAgIGZvciBhIGluICh4LCAteCk6CisgICAgICAgICAgICByZXN1bHQgPSBhcHByb3hfZXF1YWwoYSwgYSsxLCB0b2w9MCwgcmVsPTApCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlc3VsdCwgJ2luZXF1YWxpdHkgZmFpbHVyZSBmb3IgeD0lcicgJSBhKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCB1bmVxdWFsIGludCB2YWx1ZXMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgZm9yIG4gaW4gWzk1MSwgNTcyMzA1LCA0NzgsIDkxNywgMTcyNDBdOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChuKQorCisgICAgZGVmIHRlc3RfZXhhY3RseV91bmVxdWFsX2Zsb2F0cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHVuZXF1YWwgZmxvYXQgdmFsdWVzIGFyZSB1bmVxdWFsIHdpdGggemVybyBlcnJvciB0b2xlcmFuY2UuCisgICAgICAgIGZvciB4IGluIFs5LjUxLCA1NzIzLjA1LCA0Ny44LCA5LjE3LCAxNy4yNF06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KHgpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X3VuZXF1YWxfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB1bmVxdWFsIEZyYWN0aW9ucyBhcmUgdW5lcXVhbCB3aXRoIHplcm8gZXJyb3IgdG9sZXJhbmNlLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZm9yIGYgaW4gW0YoMSwgNSksIEYoNywgOSksIEYoMTIsIDExKSwgRigxMDEsIDk5MDIzKV06CisgICAgICAgICAgICBzZWxmLmRvX2V4YWN0bHlfdW5lcXVhbF90ZXN0KGYpCisKKyAgICBkZWYgdGVzdF9leGFjdGx5X3VuZXF1YWxfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHVuZXF1YWwgRGVjaW1hbHMgYXJlIHVuZXF1YWwgd2l0aCB6ZXJvIGVycm9yIHRvbGVyYW5jZS4KKyAgICAgICAgZm9yIGQgaW4gbWFwKERlY2ltYWwsICIzLjE0MTUgMjk4LjEyIDMuNDcgMTguOTk2IDAuMDAyNDUiLnNwbGl0KCkpOgorICAgICAgICAgICAgc2VsZi5kb19leGFjdGx5X3VuZXF1YWxfdGVzdChkKQorCisKK2NsYXNzIEFwcHJveEVxdWFsSW5leGFjdFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgSW5leGFjdCB0ZXN0IGNhc2VzIGZvciBhcHByb3hfZXJyb3IuCisgICAgIyBUZXN0IGNhc2VzIHdoZW4gY29tcGFyaW5nIHR3byB2YWx1ZXMgdGhhdCBhcmUgbm90IGV4YWN0bHkgZXF1YWwuCisKKyAgICAjID09PSBBYnNvbHV0ZSBlcnJvciB0ZXN0cyA9PT0KKworICAgIGRlZiBkb19hcHByb3hfZXF1YWxfYWJzX3Rlc3Qoc2VsZiwgeCwgZGVsdGEpOgorICAgICAgICB0ZW1wbGF0ZSA9ICJUZXN0IGZhaWx1cmUgZm9yIHg9eyFyfSwgeT17IXJ9IgorICAgICAgICBmb3IgeSBpbiAoeCArIGRlbHRhLCB4IC0gZGVsdGEpOgorICAgICAgICAgICAgbXNnID0gdGVtcGxhdGUuZm9ybWF0KHgsIHkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKHgsIHksIHRvbD0yKmRlbHRhLCByZWw9MCksIG1zZykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKHgsIHksIHRvbD1kZWx0YS8yLCByZWw9MCksIG1zZykKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgaW50cyB3aXRoIGFuIGFic29sdXRlIGVycm9yLgorICAgICAgICBmb3IgbiBpbiBbLTEwNzM3LCAtMTk3NSwgLTcsIC0yLCAwLCAxLCA5LCAzNywgNDIzLCA5ODc0LCAyMzc4OTExMF06CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChuLCAxMCkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KG4sIDIpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYWJzb2x1dGVfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgZmxvYXRzIHdpdGggYW4gYWJzb2x1dGUgZXJyb3IuCisgICAgICAgIGZvciB4IGluIFstMjg0LjEyNiwgLTk3LjEsIC0zLjQsIC0yLjE1LCAwLjUsIDEuMCwgNy44LCA0LjIzLCAzODE3LjRdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoeCwgMS41KQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoeCwgMC4wMSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KHgsIDAuMDAwMSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9hYnNvbHV0ZV9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBGcmFjdGlvbnMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZGVsdGEgPSBGcmFjdGlvbigxLCAyOSkKKyAgICAgICAgbnVtZXJhdG9ycyA9IFstODQsIC0xNSwgLTIsIC0xLCAwLCAxLCA1LCAxNywgMjMsIDM0LCA3MV0KKyAgICAgICAgZm9yIGYgaW4gKEZyYWN0aW9uKG4sIDI5KSBmb3IgbiBpbiBudW1lcmF0b3JzKToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KGYsIGRlbHRhKQorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfYWJzX3Rlc3QoZiwgZmxvYXQoZGVsdGEpKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2Fic29sdXRlX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYXBwcm94aW1hdGUgZXF1YWxpdHkgb2YgRGVjaW1hbHMgd2l0aCBhbiBhYnNvbHV0ZSBlcnJvci4KKyAgICAgICAgZGVsdGEgPSBEZWNpbWFsKCIwLjAxIikKKyAgICAgICAgZm9yIGQgaW4gbWFwKERlY2ltYWwsICIxLjAgMy41IDM2LjA4IDYxLjc5IDc5MTIuMzY0OCIuc3BsaXQoKSk6CisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9hYnNfdGVzdChkLCBkZWx0YSkKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX2Fic190ZXN0KC1kLCBkZWx0YSkKKworICAgIGRlZiB0ZXN0X2Nyb3NzX3plcm8oc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgdGhlIGNhc2Ugb2YgdGhlIHR3byB2YWx1ZXMgaGF2aW5nIG9wcG9zaXRlIHNpZ25zLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDFlLTUsIC0xZS01LCB0b2w9MWUtNCwgcmVsPTApKQorCisgICAgIyA9PT0gUmVsYXRpdmUgZXJyb3IgdGVzdHMgPT09CisKKyAgICBkZWYgZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHNlbGYsIHgsIGRlbHRhKToKKyAgICAgICAgdGVtcGxhdGUgPSAiVGVzdCBmYWlsdXJlIGZvciB4PXshcn0sIHk9eyFyfSIKKyAgICAgICAgZm9yIHkgaW4gKHgqKDErZGVsdGEpLCB4KigxLWRlbHRhKSk6CisgICAgICAgICAgICBtc2cgPSB0ZW1wbGF0ZS5mb3JtYXQoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTAsIHJlbD0yKmRlbHRhKSwgbXNnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwoeCwgeSwgdG9sPTAsIHJlbD1kZWx0YS8yKSwgbXNnKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX3JlbGF0aXZlX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBpbnRzIHdpdGggYSByZWxhdGl2ZSBlcnJvci4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg2NCwgNDcsIHRvbD0wLCByZWw9MC4zNikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoNjQsIDQ3LCB0b2w9MCwgcmVsPTAuMzcpKQorICAgICAgICAjIC0tLQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKDQ0OSwgNTEyLCB0b2w9MCwgcmVsPTAuMTI1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbCg0NDgsIDUxMiwgdG9sPTAsIHJlbD0wLjEyNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKDQ0NywgNTEyLCB0b2w9MCwgcmVsPTAuMTI1KSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9mbG9hdHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBmbG9hdHMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBmb3IgeCBpbiBbLTE3OC4zNCwgLTAuMSwgMC4xLCAxLjAsIDM2Ljk3LCAyODQ3LjEzNiwgOTE0NS4wNzRdOgorICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoeCwgMC4wMikKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KHgsIDAuMDAwMSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9yZWxhdGl2ZV9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBGcmFjdGlvbnMgd2l0aCBhIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGVsdGEgPSBGcmFjdGlvbigzLCA4KQorICAgICAgICBmb3IgZiBpbiBbRigzLCA4NCksIEYoMTcsIDMwKSwgRig0OSwgNTApLCBGKDkyLCA4NSldOgorICAgICAgICAgICAgZm9yIGQgaW4gKGRlbHRhLCBmbG9hdChkZWx0YSkpOgorICAgICAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KGYsIGQpCisgICAgICAgICAgICAgICAgc2VsZi5kb19hcHByb3hfZXF1YWxfcmVsX3Rlc3QoLWYsIGQpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfcmVsYXRpdmVfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBhcHByb3hpbWF0ZSBlcXVhbGl0eSBvZiBEZWNpbWFscyB3aXRoIGEgcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIGZvciBkIGluIG1hcChEZWNpbWFsLCAiMC4wMiAxLjAgNS43IDEzLjY3IDk0LjEzOCA5MTAyNy45MzIxIi5zcGxpdCgpKToKKyAgICAgICAgICAgIHNlbGYuZG9fYXBwcm94X2VxdWFsX3JlbF90ZXN0KGQsIERlY2ltYWwoIjAuMDAxIikpCisgICAgICAgICAgICBzZWxmLmRvX2FwcHJveF9lcXVhbF9yZWxfdGVzdCgtZCwgRGVjaW1hbCgiMC4wNSIpKQorCisgICAgIyA9PT0gQm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IgdGVzdHMgPT09CisKKyAgICAjIFRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvIGNvbnNpZGVyOgorICAgICMgICAxKSBhY3R1YWwgZXJyb3IgPD0gYm90aCBhYnNvbHV0ZSBhbmQgcmVsYXRpdmUgZXJyb3IKKyAgICAjICAgMikgYWN0dWFsIGVycm9yIDw9IGFic29sdXRlIGVycm9yIGJ1dCA+IHJlbGF0aXZlIGVycm9yCisgICAgIyAgIDMpIGFjdHVhbCBlcnJvciA8PSByZWxhdGl2ZSBlcnJvciBidXQgPiBhYnNvbHV0ZSBlcnJvcgorICAgICMgICA0KSBhY3R1YWwgZXJyb3IgPiBib3RoIGFic29sdXRlIGFuZCByZWxhdGl2ZSBlcnJvcgorCisgICAgZGVmIGRvX2NoZWNrX2JvdGgoc2VsZiwgYSwgYiwgdG9sLCByZWwsIHRvbF9mbGFnLCByZWxfZmxhZyk6CisgICAgICAgIGNoZWNrID0gc2VsZi5hc3NlcnRUcnVlIGlmIHRvbF9mbGFnIGVsc2Ugc2VsZi5hc3NlcnRGYWxzZQorICAgICAgICBjaGVjayhhcHByb3hfZXF1YWwoYSwgYiwgdG9sPXRvbCwgcmVsPTApKQorICAgICAgICBjaGVjayA9IHNlbGYuYXNzZXJ0VHJ1ZSBpZiByZWxfZmxhZyBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD0wLCByZWw9cmVsKSkKKyAgICAgICAgY2hlY2sgPSBzZWxmLmFzc2VydFRydWUgaWYgKHRvbF9mbGFnIG9yIHJlbF9mbGFnKSBlbHNlIHNlbGYuYXNzZXJ0RmFsc2UKKyAgICAgICAgY2hlY2soYXBwcm94X2VxdWFsKGEsIGIsIHRvbD10b2wsIHJlbD1yZWwpKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgxKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwNCwgMy44ZS00LCBUcnVlLCBUcnVlKQorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoLTcuMzg3LCAtNy4zODYsIDAuMDAyLCAwLjAwMDIsIFRydWUsIFRydWUpCisKKyAgICBkZWYgdGVzdF9hcHByb3hfZXF1YWxfYm90aDIoc2VsZik6CisgICAgICAgICMgVGVzdCBhY3R1YWwgZXJyb3IgPD0gYWJzb2x1dGUgZXJyb3IgYnV0ID4gcmVsYXRpdmUgZXJyb3IuCisgICAgICAgIHNlbGYuZG9fY2hlY2tfYm90aCg3Ljk1NSwgNy45NTIsIDAuMDA0LCAzLjdlLTQsIFRydWUsIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYXBwcm94X2VxdWFsX2JvdGgzKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWN0dWFsIGVycm9yIDw9IHJlbGF0aXZlIGVycm9yIGJ1dCA+IGFic29sdXRlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoNy45NTUsIDcuOTUyLCAwLjAwMSwgMy44ZS00LCBGYWxzZSwgVHJ1ZSkKKworICAgIGRlZiB0ZXN0X2FwcHJveF9lcXVhbF9ib3RoNChzZWxmKToKKyAgICAgICAgIyBUZXN0IGFjdHVhbCBlcnJvciA+IGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlIGVycm9yLgorICAgICAgICBzZWxmLmRvX2NoZWNrX2JvdGgoMi43OCwgMi43NSwgMC4wMSwgMC4wMDEsIEZhbHNlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5kb19jaGVja19ib3RoKDk3MS40NCwgOTcxLjQ3LCAwLjAyLCAzZS01LCBGYWxzZSwgRmFsc2UpCisKKworY2xhc3MgQXBwcm94RXF1YWxTcGVjaWFsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBhcHByb3hfZXF1YWwgd2l0aCBOQU5zIGFuZCBJTkZzIGFuZCB6ZXJvZXMuCisKKyAgICBkZWYgdGVzdF9pbmYoc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgaW5mID0gdHlwZV8oJ2luZicpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKGluZiwgaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwoaW5mLCBpbmYsIDAsIDApKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChpbmYsIGluZiwgMSwgMC4wMSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoYXBwcm94X2VxdWFsKC1pbmYsIC1pbmYpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhcHByb3hfZXF1YWwoaW5mLCAtaW5mKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXBwcm94X2VxdWFsKGluZiwgMTAwMCkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgIGZvciB0eXBlXyBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgbmFuID0gdHlwZV8oJ25hbicpCisgICAgICAgICAgICBmb3Igb3RoZXIgaW4gKG5hbiwgdHlwZV8oJ2luZicpLCAxMDAwKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFwcHJveF9lcXVhbChuYW4sIG90aGVyKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0X3plcm9lcyhzZWxmKToKKyAgICAgICAgbnplcm8gPSBtYXRoLmNvcHlzaWduKDAuMCwgLTEpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhcHByb3hfZXF1YWwobnplcm8sIDAuMCwgdG9sPTAuMSwgcmVsPTAuMSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX3plcm9lcyhzZWxmKToKKyAgICAgICAgbnplcm8gPSBEZWNpbWFsKCItMC4wIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFwcHJveF9lcXVhbChuemVybywgRGVjaW1hbCgwKSwgdG9sPTAuMSwgcmVsPTAuMSkpCisKKworY2xhc3MgVGVzdEFwcHJveEVxdWFsRXJyb3JzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgZXJyb3IgY29uZGl0aW9ucyBvZiBhcHByb3hfZXF1YWwuCisKKyAgICBkZWYgdGVzdF9iYWRfdG9sKHNlbGYpOgorICAgICAgICAjIFRlc3QgbmVnYXRpdmUgdG9sIHJhaXNlcy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgYXBwcm94X2VxdWFsLCAxMDAsIDEwMCwgLTEsIDAuMSkKKworICAgIGRlZiB0ZXN0X2JhZF9yZWwoc2VsZik6CisgICAgICAgICMgVGVzdCBuZWdhdGl2ZSByZWwgcmFpc2VzLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBhcHByb3hfZXF1YWwsIDEwMCwgMTAwLCAxLCAtMC4xKQorCisKKyMgLS0tIFRlc3RzIGZvciBOdW1lcmljVGVzdENhc2UgLS0tCisKKyMgVGhlIGZvcm1hdHRpbmcgcm91dGluZSB0aGF0IGdlbmVyYXRlcyB0aGUgZXJyb3IgbWVzc2FnZXMgaXMgY29tcGxleCBlbm91Z2gKKyMgdGhhdCBpdCB0b28gbmVlZHMgdGVzdGluZy4KKworY2xhc3MgVGVzdE51bWVyaWNUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUaGUgZXhhY3Qgd29yZGluZyBvZiBOdW1lcmljVGVzdENhc2UgZXJyb3IgbWVzc2FnZXMgaXMgKm5vdCogZ3VhcmFudGVlZCwKKyAgICAjIGJ1dCB3ZSBuZWVkIHRvIGdpdmUgdGhlbSBzb21lIHNvcnQgb2YgdGVzdCB0byBlbnN1cmUgdGhhdCB0aGV5IGFyZQorICAgICMgZ2VuZXJhdGVkIGNvcnJlY3RseS4gQXMgYSBjb21wcm9taXNlLCB3ZSBsb29rIGZvciBzcGVjaWZpYyBzdWJzdHJpbmdzCisgICAgIyB0aGF0IGFyZSBleHBlY3RlZCB0byBiZSBmb3VuZCBldmVuIGlmIHRoZSBvdmVyYWxsIGVycm9yIG1lc3NhZ2UgY2hhbmdlcy4KKworICAgIGRlZiBkb190ZXN0KHNlbGYsIGFyZ3MpOgorICAgICAgICBhY3R1YWxfbXNnID0gTnVtZXJpY1Rlc3RDYXNlLl9tYWtlX3N0ZF9lcnJfbXNnKCphcmdzKQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZ2VuZXJhdGVfc3Vic3RyaW5ncygqYXJncykKKyAgICAgICAgZm9yIHN1YnN0cmluZyBpbiBleHBlY3RlZDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oc3Vic3RyaW5nLCBhY3R1YWxfbXNnKQorCisgICAgZGVmIHRlc3RfbnVtZXJpY3Rlc3RjYXNlX2lzX3Rlc3RjYXNlKHNlbGYpOgorICAgICAgICAjIEVuc3VyZSB0aGF0IE51bWVyaWNUZXN0Q2FzZSBhY3R1YWxseSBpcyBhIFRlc3RDYXNlLgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNzdWJjbGFzcyhOdW1lcmljVGVzdENhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKSkKKworICAgIGRlZiB0ZXN0X2Vycm9yX21zZ19udW1lcmljKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkIGZvciBudW1lcmljIGNvbXBhcmlzb25zLgorICAgICAgICBhcmdzID0gKDIuNSwgNC4wLCAwLjUsIDAuMjUsIE5vbmUpCisgICAgICAgIHNlbGYuZG9fdGVzdChhcmdzKQorCisgICAgZGVmIHRlc3RfZXJyb3JfbXNnX3NlcXVlbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhlIGVycm9yIG1lc3NhZ2UgZ2VuZXJhdGVkIGZvciBzZXF1ZW5jZSBjb21wYXJpc29ucy4KKyAgICAgICAgYXJncyA9ICgzLjc1LCA4LjI1LCAxLjI1LCAwLjUsIDcpCisgICAgICAgIHNlbGYuZG9fdGVzdChhcmdzKQorCisgICAgZGVmIGdlbmVyYXRlX3N1YnN0cmluZ3Moc2VsZiwgZmlyc3QsIHNlY29uZCwgdG9sLCByZWwsIGlkeCk6CisgICAgICAgICIiIlJldHVybiBzdWJzdHJpbmdzIHdlIGV4cGVjdCB0byBzZWUgaW4gZXJyb3IgbWVzc2FnZXMuIiIiCisgICAgICAgIGFic19lcnIsIHJlbF9lcnIgPSBfY2FsY19lcnJvcnMoZmlyc3QsIHNlY29uZCkKKyAgICAgICAgc3Vic3RyaW5ncyA9IFsKKyAgICAgICAgICAgICAgICAndG9sPSVyJyAlIHRvbCwKKyAgICAgICAgICAgICAgICAncmVsPSVyJyAlIHJlbCwKKyAgICAgICAgICAgICAgICAnYWJzb2x1dGUgZXJyb3IgPSAlcicgJSBhYnNfZXJyLAorICAgICAgICAgICAgICAgICdyZWxhdGl2ZSBlcnJvciA9ICVyJyAlIHJlbF9lcnIsCisgICAgICAgICAgICAgICAgXQorICAgICAgICBpZiBpZHggaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdWJzdHJpbmdzLmFwcGVuZCgnZGlmZmVyIGF0IGluZGV4ICVkJyAlIGlkeCkKKyAgICAgICAgcmV0dXJuIHN1YnN0cmluZ3MKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIyA9PT0gVGVzdHMgZm9yIHRoZSBzdGF0aXN0aWNzIG1vZHVsZSA9PT0KKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworY2xhc3MgR2xvYmFsc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1vZHVsZSA9IHN0YXRpc3RpY3MKKyAgICBleHBlY3RlZF9tZXRhZGF0YSA9IFsiX19kb2NfXyIsICJfX2FsbF9fIl0KKworICAgIGRlZiB0ZXN0X21ldGEoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBtZXRhZGF0YS4KKyAgICAgICAgZm9yIG1ldGEgaW4gc2VsZi5leHBlY3RlZF9tZXRhZGF0YToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHNlbGYubW9kdWxlLCBtZXRhKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgbm90IHByZXNlbnQiICUgbWV0YSkKKworICAgIGRlZiB0ZXN0X2NoZWNrX2FsbChzZWxmKToKKyAgICAgICAgIyBDaGVjayBldmVyeXRoaW5nIGluIF9fYWxsX18gZXhpc3RzIGFuZCBpcyBwdWJsaWMuCisgICAgICAgIG1vZHVsZSA9IHNlbGYubW9kdWxlCisgICAgICAgIGZvciBuYW1lIGluIG1vZHVsZS5fX2FsbF9fOgorICAgICAgICAgICAgIyBObyBwcml2YXRlIG5hbWVzIGluIF9fYWxsX186CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5hbWUuc3RhcnRzd2l0aCgiXyIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpdmF0ZSBuYW1lICIlcyIgaW4gX19hbGxfXycgJSBuYW1lKQorICAgICAgICAgICAgIyBBbmQgYW55dGhpbmcgaW4gX19hbGxfXyBtdXN0IGV4aXN0OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIobW9kdWxlLCBuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWlzc2luZyBuYW1lICIlcyIgaW4gX19hbGxfXycgJSBuYW1lKQorCisKK2NsYXNzIERvY1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtT08gYW5kIGFib3ZlIikKKyAgICBkZWYgdGVzdF9kb2NfdGVzdHMoc2VsZik6CisgICAgICAgIGZhaWxlZCwgdHJpZWQgPSBkb2N0ZXN0LnRlc3Rtb2Qoc3RhdGlzdGljcykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKHRyaWVkLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZhaWxlZCwgMCkKKworY2xhc3MgU3RhdGlzdGljc0Vycm9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfaGFzX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgZXJybXNnID0gKAorICAgICAgICAgICAgICAgICJFeHBlY3RlZCBTdGF0aXN0aWNzRXJyb3IgdG8gYmUgYSBWYWx1ZUVycm9yLCBidXQgZ290IGEiCisgICAgICAgICAgICAgICAgIiBzdWJjbGFzcyBvZiAlciBpbnN0ZWFkLiIKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKHN0YXRpc3RpY3MsICdTdGF0aXN0aWNzRXJyb3InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICAgICAgICAgIGlzc3ViY2xhc3Moc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIFZhbHVlRXJyb3IpLAorICAgICAgICAgICAgICAgIGVycm1zZyAlIHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLl9fYmFzZV9fCisgICAgICAgICAgICAgICAgKQorCisKKyMgPT09IFRlc3RzIGZvciBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zID09PQorCitjbGFzcyBFeGFjdFJhdGlvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9leGFjdF9yYXRpbyB1dGlsaXR5LgorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICBmb3IgaSBpbiAoLTIwLCAtMywgMCwgNSwgOTksIDEwKioyMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKGkpLCAoaSwgMSkpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbihzZWxmKToKKyAgICAgICAgbnVtZXJhdG9ycyA9ICgtNSwgMSwgMTIsIDM4KQorICAgICAgICBmb3IgbiBpbiBudW1lcmF0b3JzOgorICAgICAgICAgICAgZiA9IEZyYWN0aW9uKG4sIDM3KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9leGFjdF9yYXRpbyhmKSwgKG4sIDM3KSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKDAuMTI1KSwgKDEsIDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvKDEuMTI1KSwgKDksIDgpKQorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0xMDAsIDEwMCkgZm9yIF8gaW4gcmFuZ2UoMTAwKV0KKyAgICAgICAgZm9yIHggaW4gZGF0YToKKyAgICAgICAgICAgIG51bSwgZGVuID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oeCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgbnVtL2RlbikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWwoc2VsZik6CisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIF9leGFjdF9yYXRpbyA9IHN0YXRpc3RpY3MuX2V4YWN0X3JhdGlvCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2V4YWN0X3JhdGlvKEQoIjAuMTI1IikpLCAoMTI1LCAxMDAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfZXhhY3RfcmF0aW8oRCgiMTIuMzQ1IikpLCAoMTIzNDUsIDEwMDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9leGFjdF9yYXRpbyhEKCItMS45OCIpKSwgKC0xOTgsIDEwMCkpCisKKyAgICBkZWYgdGVzdF9pbmYoc2VsZik6CisgICAgICAgIElORiA9IGZsb2F0KCJJTkYiKQorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgY2xhc3MgTXlEZWNpbWFsKERlY2ltYWwpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBmb3IgaW5mIGluIChJTkYsIC1JTkYpOgorICAgICAgICAgICAgZm9yIHR5cGVfIGluIChmbG9hdCwgTXlGbG9hdCwgRGVjaW1hbCwgTXlEZWNpbWFsKToKKyAgICAgICAgICAgICAgICB4ID0gdHlwZV8oaW5mKQorICAgICAgICAgICAgICAgIHJhdGlvID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8oeCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJhdGlvLCAoeCwgTm9uZSkpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJhdGlvWzBdKSwgdHlwZV8pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYocmF0aW9bMF0pKQorCisgICAgZGVmIHRlc3RfZmxvYXRfbmFuKHNlbGYpOgorICAgICAgICBOQU4gPSBmbG9hdCgiTkFOIikKKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGZvciBuYW4gaW4gKE5BTiwgTXlGbG9hdChOQU4pKToKKyAgICAgICAgICAgIHJhdGlvID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8obmFuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNuYW4ocmF0aW9bMF0pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhyYXRpb1sxXSwgTm9uZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShyYXRpb1swXSksIHR5cGUobmFuKSkKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxfbmFuKHNlbGYpOgorICAgICAgICBOQU4gPSBEZWNpbWFsKCJOQU4iKQorICAgICAgICBzTkFOID0gRGVjaW1hbCgic05BTiIpCisgICAgICAgIGNsYXNzIE15RGVjaW1hbChEZWNpbWFsKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZm9yIG5hbiBpbiAoTkFOLCBNeURlY2ltYWwoTkFOKSwgc05BTiwgTXlEZWNpbWFsKHNOQU4pKToKKyAgICAgICAgICAgIHJhdGlvID0gc3RhdGlzdGljcy5fZXhhY3RfcmF0aW8obmFuKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9uYW5fZXF1YWwocmF0aW9bMF0sIG5hbikpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHJhdGlvWzFdLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHJhdGlvWzBdKSwgdHlwZShuYW4pKQorCisKK2NsYXNzIERlY2ltYWxUb1JhdGlvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBUZXN0IF9kZWNpbWFsX3RvX3JhdGlvIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICBkZWYgdGVzdF9pbmZpbml0eShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgSU5GcyBhcmUgaGFuZGxlZCBjb3JyZWN0bHkuCisgICAgICAgIGluZiA9IERlY2ltYWwoJ0lORicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhpbmYpLCAoaW5mLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9kZWNpbWFsX3RvX3JhdGlvKC1pbmYpLCAoLWluZiwgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5BTnMgYXJlIGhhbmRsZWQgY29ycmVjdGx5LgorICAgICAgICBmb3IgbmFuIGluIChEZWNpbWFsKCdOQU4nKSwgRGVjaW1hbCgnc05BTicpKToKKyAgICAgICAgICAgIG51bSwgZGVuID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhuYW4pCisgICAgICAgICAgICAjIEJlY2F1c2UgTkFOcyBhbHdheXMgY29tcGFyZSBub24tZXF1YWwsIHdlIGNhbm5vdCB1c2UgYXNzZXJ0RXF1YWwuCisgICAgICAgICAgICAjIE5vciBjYW4gd2UgdXNlIGFuIGlkZW50aXR5IHRlc3QsIGFzIHdlIGRvbid0IGd1YXJhbnRlZSBhbnl0aGluZworICAgICAgICAgICAgIyBhYm91dCB0aGUgb2JqZWN0IGlkZW50aXR5LgorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKF9uYW5fZXF1YWwobnVtLCBuYW4pKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhkZW4sIE5vbmUpCisKKyAgICBkZWYgdGVzdF9zaWduKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2lnbiBpcyBjYWxjdWxhdGVkIGNvcnJlY3RseS4KKyAgICAgICAgbnVtYmVycyA9IFtEZWNpbWFsKCI5Ljg3NjVlMTIiKSwgRGVjaW1hbCgiOS44NzY1ZS0xMiIpXQorICAgICAgICBmb3IgZCBpbiBudW1iZXJzOgorICAgICAgICAgICAgIyBGaXJzdCB0ZXN0IHBvc2l0aXZlIGRlY2ltYWxzLgorICAgICAgICAgICAgYXNzZXJ0IGQgPiAwCisgICAgICAgICAgICBudW0sIGRlbiA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKG51bSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkZW4sIDApCisgICAgICAgICAgICAjIFRoZW4gdGVzdCBuZWdhdGl2ZSBkZWNpbWFscy4KKyAgICAgICAgICAgIG51bSwgZGVuID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbygtZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKG51bSwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihkZW4sIDApCisKKyAgICBkZWYgdGVzdF9uZWdhdGl2ZV9leHBvbmVudChzZWxmKToKKyAgICAgICAgIyBUZXN0IHJlc3VsdCB3aGVuIHRoZSBleHBvbmVudCBpcyBuZWdhdGl2ZS4KKyAgICAgICAgdCA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMC4xMjM0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDEyMzQsIDEwMDAwKSkKKworICAgIGRlZiB0ZXN0X3Bvc2l0aXZlX2V4cG9uZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgcmVzdWx0cyB3aGVuIHRoZSBleHBvbmVudCBpcyBwb3NpdGl2ZS4KKyAgICAgICAgdCA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMS4yMzRlNyIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQsICgxMjM0MDAwMCwgMSkpCisKKyAgICBkZWYgdGVzdF9yZWdyZXNzaW9uXzIwNTM2KHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWUgMjA1MzYuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDUzNgorICAgICAgICB0ID0gc3RhdGlzdGljcy5fZGVjaW1hbF90b19yYXRpbyhEZWNpbWFsKCIxZTIiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCAoMTAwLCAxKSkKKyAgICAgICAgdCA9IHN0YXRpc3RpY3MuX2RlY2ltYWxfdG9fcmF0aW8oRGVjaW1hbCgiMS40N2U1IikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodCwgKDE0NzAwMCwgMSkpCisKKworY2xhc3MgSXNGaW5pdGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIFRlc3QgX2lzZmluaXRlIHByaXZhdGUgZnVuY3Rpb24uCisKKyAgICBkZWYgdGVzdF9maW5pdGUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZpbml0ZSBudW1iZXJzIGFyZSByZWNvZ25pc2VkIGFzIGZpbml0ZS4KKyAgICAgICAgZm9yIHggaW4gKDUsIEZyYWN0aW9uKDEsIDMpLCAyLjUsIERlY2ltYWwoIjUuNSIpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdGF0aXN0aWNzLl9pc2Zpbml0ZSh4KSkKKworICAgIGRlZiB0ZXN0X2luZmluaXR5KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBJTkZzIGFyZSBub3QgcmVjb2duaXNlZCBhcyBmaW5pdGUuCisgICAgICAgIGZvciB4IGluIChmbG9hdCgiaW5mIiksIERlY2ltYWwoImluZiIpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc3RhdGlzdGljcy5faXNmaW5pdGUoeCkpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IE5BTnMgYXJlIG5vdCByZWNvZ25pc2VkIGFzIGZpbml0ZS4KKyAgICAgICAgZm9yIHggaW4gKGZsb2F0KCJuYW4iKSwgRGVjaW1hbCgiTkFOIiksIERlY2ltYWwoInNOQU4iKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHN0YXRpc3RpY3MuX2lzZmluaXRlKHgpKQorCisKK2NsYXNzIENvZXJjZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGF0IHByaXZhdGUgZnVuY3Rpb24gX2NvZXJjZSBjb3JyZWN0bHkgZGVhbHMgd2l0aCB0eXBlcy4KKworICAgICMgVGhlIGNvZXJjaW9uIHJ1bGVzIGFyZSBjdXJyZW50bHkgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLCBhbHRob3VnaCBhdAorICAgICMgc29tZSBwb2ludCB0aGF0IHNob3VsZCBjaGFuZ2UuIFRoZSB0ZXN0cyBhbmQgY29tbWVudHMgaGVyZSBkZWZpbmUgdGhlCisgICAgIyBjb3JyZWN0IGltcGxlbWVudGF0aW9uLgorCisgICAgIyBQcmUtY29uZGl0aW9ucyBvZiBfY29lcmNlOgorICAgICMKKyAgICAjICAgLSBUaGUgZmlyc3QgdGltZSBfc3VtIGNhbGxzIF9jb2VyY2UsIHRoZQorICAgICMgICAtIGNvZXJjZShULCBTKSB3aWxsIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGJvb2wgYXMgdGhlIGZpcnN0IGFyZ3VtZW50OworICAgICMgICAgIHRoaXMgaXMgYSBwcmUtY29uZGl0aW9uLCBndWFyZGVkIHdpdGggYW4gYXNzZXJ0aW9uLgorCisgICAgIworICAgICMgICAtIGNvZXJjZShULCBUKSB3aWxsIGFsd2F5cyByZXR1cm4gVDsgd2UgYXNzdW1lIFQgaXMgYSB2YWxpZCBudW1lcmljCisgICAgIyAgICAgdHlwZS4gVmlvbGF0ZSB0aGlzIGFzc3VtcHRpb24gYXQgeW91ciBvd24gcmlzay4KKyAgICAjCisgICAgIyAgIC0gQXBhcnQgZnJvbSBhcyBhYm92ZSwgYm9vbCBpcyB0cmVhdGVkIGFzIGlmIGl0IHdlcmUgYWN0dWFsbHkgaW50LgorICAgICMKKyAgICAjICAgLSBjb2VyY2UoaW50LCBYKSBhbmQgY29lcmNlKFgsIGludCkgcmV0dXJuIFguCisgICAgIyAgIC0KKyAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgorICAgICAgICAjIGJvb2wgaXMgc29tZXdoYXQgc3BlY2lhbCwgZHVlIHRvIHRoZSBwcmUtY29uZGl0aW9uIHRoYXQgaXQgaXMKKyAgICAgICAgIyBuZXZlciBnaXZlbiBhcyB0aGUgZmlyc3QgYXJndW1lbnQgdG8gX2NvZXJjZSwgYW5kIHRoYXQgaXQgY2Fubm90CisgICAgICAgICMgYmUgc3ViY2xhc3NlZC4gU28gd2UgdGVzdCBpdCBzcGVjaWFsbHkuCisgICAgICAgIGZvciBUIGluIChpbnQsIGZsb2F0LCBGcmFjdGlvbiwgRGVjaW1hbCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHN0YXRpc3RpY3MuX2NvZXJjZShULCBib29sKSwgVCkKKyAgICAgICAgICAgIGNsYXNzIE15Q2xhc3MoVCk6IHBhc3MKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RhdGlzdGljcy5fY29lcmNlKE15Q2xhc3MsIGJvb2wpLCBNeUNsYXNzKQorCisgICAgZGVmIGFzc2VydENvZXJjZVRvKHNlbGYsIEEsIEIpOgorICAgICAgICAiIiJBc3NlcnQgdGhhdCB0eXBlIEEgY29lcmNlcyB0byBCLiIiIgorICAgICAgICBzZWxmLmFzc2VydElzKHN0YXRpc3RpY3MuX2NvZXJjZShBLCBCKSwgQikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzdGF0aXN0aWNzLl9jb2VyY2UoQiwgQSksIEIpCisKKyAgICBkZWYgY2hlY2tfY29lcmNlX3RvKHNlbGYsIEEsIEIpOgorICAgICAgICAiIiJDaGVja3MgdGhhdCB0eXBlIEEgY29lcmNlcyB0byBCLCBpbmNsdWRpbmcgc3ViY2xhc3Nlcy4iIiIKKyAgICAgICAgIyBBc3NlcnQgdGhhdCB0eXBlIEEgaXMgY29lcmNlZCB0byBCLgorICAgICAgICBzZWxmLmFzc2VydENvZXJjZVRvKEEsIEIpCisgICAgICAgICMgU3ViY2xhc3NlcyBvZiBBIGFyZSBhbHNvIGNvZXJjZWQgdG8gQi4KKyAgICAgICAgY2xhc3MgU3ViY2xhc3NPZkEoQSk6IHBhc3MKKyAgICAgICAgc2VsZi5hc3NlcnRDb2VyY2VUbyhTdWJjbGFzc09mQSwgQikKKyAgICAgICAgIyBBLCBhbmQgc3ViY2xhc3NlcyBvZiBBLCBhcmUgY29lcmNlZCB0byBzdWJjbGFzc2VzIG9mIEIuCisgICAgICAgIGNsYXNzIFN1YmNsYXNzT2ZCKEIpOiBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0Q29lcmNlVG8oQSwgU3ViY2xhc3NPZkIpCisgICAgICAgIHNlbGYuYXNzZXJ0Q29lcmNlVG8oU3ViY2xhc3NPZkEsIFN1YmNsYXNzT2ZCKQorCisgICAgZGVmIGFzc2VydENvZXJjZVJhaXNlcyhzZWxmLCBBLCBCKToKKyAgICAgICAgIiIiQXNzZXJ0IHRoYXQgY29lcmNpbmcgQSB0byBCLCBvciB2aWNlIHZlcnNhLCByYWlzZXMgVHlwZUVycm9yLiIiIgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0YXRpc3RpY3MuX2NvZXJjZSwgKEEsIEIpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0YXRpc3RpY3MuX2NvZXJjZSwgKEIsIEEpKQorCisgICAgZGVmIGNoZWNrX3R5cGVfY29lcmNpb25zKHNlbGYsIFQpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHR5cGUgVCBjb2VyY2VzIGNvcnJlY3RseSB3aXRoIHN1YmNsYXNzZXMgb2YgaXRzZWxmLiIiIgorICAgICAgICBhc3NlcnQgVCBpcyBub3QgYm9vbAorICAgICAgICAjIENvZXJjaW5nIGEgdHlwZSB3aXRoIGl0c2VsZiByZXR1cm5zIHRoZSBzYW1lIHR5cGUuCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3RhdGlzdGljcy5fY29lcmNlKFQsIFQpLCBUKQorICAgICAgICAjIENvZXJjaW5nIGEgdHlwZSB3aXRoIGEgc3ViY2xhc3Mgb2YgaXRzZWxmIHJldHVybnMgdGhlIHN1YmNsYXNzLgorICAgICAgICBjbGFzcyBVKFQpOiBwYXNzCisgICAgICAgIGNsYXNzIFYoVCk6IHBhc3MKKyAgICAgICAgY2xhc3MgVyhVKTogcGFzcworICAgICAgICBmb3IgdHlwIGluIChVLCBWLCBXKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29lcmNlVG8oVCwgdHlwKQorICAgICAgICBzZWxmLmFzc2VydENvZXJjZVRvKFUsIFcpCisgICAgICAgICMgQ29lcmNpbmcgdHdvIHN1YmNsYXNzZXMgdGhhdCBhcmVuJ3QgcGFyZW50L2NoaWxkIGlzIGFuIGVycm9yLgorICAgICAgICBzZWxmLmFzc2VydENvZXJjZVJhaXNlcyhVLCBWKQorICAgICAgICBzZWxmLmFzc2VydENvZXJjZVJhaXNlcyhWLCBXKQorCisgICAgZGVmIHRlc3RfaW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgaW50IGNvZXJjZXMgY29ycmVjdGx5LgorICAgICAgICBzZWxmLmNoZWNrX3R5cGVfY29lcmNpb25zKGludCkKKyAgICAgICAgZm9yIHR5cCBpbiAoZmxvYXQsIEZyYWN0aW9uLCBEZWNpbWFsKToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29lcmNlX3RvKGludCwgdHlwKQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb24oc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCBGcmFjdGlvbiBjb2VyY2VzIGNvcnJlY3RseS4KKyAgICAgICAgc2VsZi5jaGVja190eXBlX2NvZXJjaW9ucyhGcmFjdGlvbikKKyAgICAgICAgc2VsZi5jaGVja19jb2VyY2VfdG8oRnJhY3Rpb24sIGZsb2F0KQorCisgICAgZGVmIHRlc3RfZGVjaW1hbChzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IERlY2ltYWwgY29lcmNlcyBjb3JyZWN0bHkuCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9jb2VyY2lvbnMoRGVjaW1hbCkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoYXQgZmxvYXQgY29lcmNlcyBjb3JyZWN0bHkuCisgICAgICAgIHNlbGYuY2hlY2tfdHlwZV9jb2VyY2lvbnMoZmxvYXQpCisKKyAgICBkZWYgdGVzdF9ub25fbnVtZXJpY190eXBlcyhzZWxmKToKKyAgICAgICAgZm9yIGJhZF90eXBlIGluIChzdHIsIGxpc3QsIHR5cGUoTm9uZSksIHR1cGxlLCBkaWN0KToKKyAgICAgICAgICAgIGZvciBnb29kX3R5cGUgaW4gKGludCwgZmxvYXQsIEZyYWN0aW9uLCBEZWNpbWFsKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvZXJjZVJhaXNlcyhnb29kX3R5cGUsIGJhZF90eXBlKQorCisgICAgZGVmIHRlc3RfaW5jb21wYXRpYmxlX3R5cGVzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBpbmNvbXBhdGlibGUgdHlwZXMgcmFpc2UuCisgICAgICAgIGZvciBUIGluIChmbG9hdCwgRnJhY3Rpb24pOgorICAgICAgICAgICAgY2xhc3MgTXlTdWJjbGFzcyhUKTogcGFzcworICAgICAgICAgICAgc2VsZi5hc3NlcnRDb2VyY2VSYWlzZXMoVCwgRGVjaW1hbCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29lcmNlUmFpc2VzKE15U3ViY2xhc3MsIERlY2ltYWwpCisKKworY2xhc3MgQ29udmVydFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgICMgVGVzdCBwcml2YXRlIF9jb252ZXJ0IGZ1bmN0aW9uLgorCisgICAgZGVmIGNoZWNrX2V4YWN0X2VxdWFsKHNlbGYsIHgsIHkpOgorICAgICAgICAiIiJDaGVjayB0aGF0IHggZXF1YWxzIHksIGFuZCBoYXMgdGhlIHNhbWUgdHlwZSBhcyB3ZWxsLiIiIgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgsIHkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZSh4KSwgdHlwZSh5KSkKKworICAgIGRlZiB0ZXN0X2ludChzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvbnZlcnNpb25zIHRvIGludC4KKyAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoRnJhY3Rpb24oNzEpLCBpbnQpCisgICAgICAgIHNlbGYuY2hlY2tfZXhhY3RfZXF1YWwoeCwgNzEpCisgICAgICAgIGNsYXNzIE15SW50KGludCk6IHBhc3MKKyAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoRnJhY3Rpb24oMTcpLCBNeUludCkKKyAgICAgICAgc2VsZi5jaGVja19leGFjdF9lcXVhbCh4LCBNeUludCgxNykpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbihzZWxmKToKKyAgICAgICAgIyBUZXN0IGNvbnZlcnNpb25zIHRvIEZyYWN0aW9uLgorICAgICAgICB4ID0gc3RhdGlzdGljcy5fY29udmVydChGcmFjdGlvbig5NSwgOTkpLCBGcmFjdGlvbikKKyAgICAgICAgc2VsZi5jaGVja19leGFjdF9lcXVhbCh4LCBGcmFjdGlvbig5NSwgOTkpKQorICAgICAgICBjbGFzcyBNeUZyYWN0aW9uKEZyYWN0aW9uKToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICB4ID0gc3RhdGlzdGljcy5fY29udmVydChGcmFjdGlvbig3MSwgMTMpLCBNeUZyYWN0aW9uKQorICAgICAgICBzZWxmLmNoZWNrX2V4YWN0X2VxdWFsKHgsIE15RnJhY3Rpb24oNzEsIDEzKSkKKworICAgIGRlZiB0ZXN0X2Zsb2F0KHNlbGYpOgorICAgICAgICAjIFRlc3QgY29udmVyc2lvbnMgdG8gZmxvYXQuCisgICAgICAgIHggPSBzdGF0aXN0aWNzLl9jb252ZXJ0KEZyYWN0aW9uKC0xLCAyKSwgZmxvYXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXhhY3RfZXF1YWwoeCwgLTAuNSkKKyAgICAgICAgY2xhc3MgTXlGbG9hdChmbG9hdCk6CisgICAgICAgICAgICBkZWYgX190cnVlZGl2X18oc2VsZiwgb3RoZXIpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyhzdXBlcigpLl9fdHJ1ZWRpdl9fKG90aGVyKSkKKyAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoRnJhY3Rpb24oOSwgOCksIE15RmxvYXQpCisgICAgICAgIHNlbGYuY2hlY2tfZXhhY3RfZXF1YWwoeCwgTXlGbG9hdCgxLjEyNSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsKHNlbGYpOgorICAgICAgICAjIFRlc3QgY29udmVyc2lvbnMgdG8gRGVjaW1hbC4KKyAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoRnJhY3Rpb24oMSwgNDApLCBEZWNpbWFsKQorICAgICAgICBzZWxmLmNoZWNrX2V4YWN0X2VxdWFsKHgsIERlY2ltYWwoIjAuMDI1IikpCisgICAgICAgIGNsYXNzIE15RGVjaW1hbChEZWNpbWFsKToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX19jbGFzc19fKHN1cGVyKCkuX190cnVlZGl2X18ob3RoZXIpKQorICAgICAgICB4ID0gc3RhdGlzdGljcy5fY29udmVydChGcmFjdGlvbigtMTUsIDE2KSwgTXlEZWNpbWFsKQorICAgICAgICBzZWxmLmNoZWNrX2V4YWN0X2VxdWFsKHgsIE15RGVjaW1hbCgiLTAuOTM3NSIpKQorCisgICAgZGVmIHRlc3RfaW5mKHNlbGYpOgorICAgICAgICBmb3IgSU5GIGluIChmbG9hdCgnaW5mJyksIERlY2ltYWwoJ2luZicpKToKKyAgICAgICAgICAgIGZvciBpbmYgaW4gKElORiwgLUlORik6CisgICAgICAgICAgICAgICAgeCA9IHN0YXRpc3RpY3MuX2NvbnZlcnQoaW5mLCB0eXBlKGluZikpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja19leGFjdF9lcXVhbCh4LCBpbmYpCisKKyAgICBkZWYgdGVzdF9uYW4oc2VsZik6CisgICAgICAgIGZvciBuYW4gaW4gKGZsb2F0KCduYW4nKSwgRGVjaW1hbCgnTkFOJyksIERlY2ltYWwoJ3NOQU4nKSk6CisgICAgICAgICAgICB4ID0gc3RhdGlzdGljcy5fY29udmVydChuYW4sIHR5cGUobmFuKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShfbmFuX2VxdWFsKHgsIG5hbikpCisKKworIyA9PT0gVGVzdHMgZm9yIHB1YmxpYyBmdW5jdGlvbnMgPT09CisKK2NsYXNzIFVuaXZhcmlhdGVDb21tb25NaXhpbjoKKyAgICAjIENvbW1vbiB0ZXN0cyBmb3IgbW9zdCB1bml2YXJpYXRlIGZ1bmN0aW9ucyB0aGF0IHRha2UgYSBkYXRhIGFyZ3VtZW50LgorCisgICAgZGVmIHRlc3Rfbm9fYXJncyhzZWxmKToKKyAgICAgICAgIyBGYWlsIGlmIGdpdmVuIG5vIGFyZ3VtZW50cy4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9kYXRhKHNlbGYpOgorICAgICAgICAjIEZhaWwgd2hlbiB0aGUgZGF0YSBhcmd1bWVudCAoZmlyc3QgYXJndW1lbnQpIGlzIGVtcHR5LgorICAgICAgICBmb3IgZW1wdHkgaW4gKFtdLCAoKSwgaXRlcihbXSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZW1wdHkpCisKKyAgICBkZWYgcHJlcGFyZV9kYXRhKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gaW50IGRhdGEgZm9yIHZhcmlvdXMgdGVzdHMuIiIiCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgd2hpbGUgZGF0YSA9PSBzb3J0ZWQoZGF0YSk6CisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIHRlc3Rfbm9faW5wbGFjZV9tb2RpZmljYXRpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGl0cyBpbnB1dCBkYXRhLgorICAgICAgICBkYXRhID0gc2VsZi5wcmVwYXJlX2RhdGEoKQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpICE9IDEgICMgTmVjZXNzYXJ5IHRvIGF2b2lkIGluZmluaXRlIGxvb3AuCisgICAgICAgIGFzc2VydCBkYXRhICE9IHNvcnRlZChkYXRhKQorICAgICAgICBzYXZlZCA9IGRhdGFbOl0KKyAgICAgICAgYXNzZXJ0IGRhdGEgaXMgbm90IHNhdmVkCisgICAgICAgIF8gPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRMaXN0RXF1YWwoZGF0YSwgc2F2ZWQsICJkYXRhIGhhcyBiZWVuIG1vZGlmaWVkIikKKworICAgIGRlZiB0ZXN0X29yZGVyX2RvZXNudF9tYXR0ZXIoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSBvcmRlciBvZiBkYXRhIHBvaW50cyBkb2Vzbid0IGNoYW5nZSB0aGUgcmVzdWx0LgorCisgICAgICAgICMgQ0FVVElPTjogZHVlIHRvIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycywgdGhlIHJlc3VsdCBhY3R1YWxseQorICAgICAgICAjIG1heSBkZXBlbmQgb24gdGhlIG9yZGVyLiBDb25zaWRlciB0aGlzIHRlc3QgcmVwcmVzZW50aW5nIGFuIGlkZWFsLgorICAgICAgICAjIFRvIGF2b2lkIHRoaXMgdGVzdCBmYWlsaW5nLCBvbmx5IHRlc3Qgd2l0aCBleGFjdCB2YWx1ZXMgc3VjaCBhcyBpbnRzCisgICAgICAgICMgb3IgRnJhY3Rpb25zLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDMsIDMsIDQsIDUsIDZdKjEwMAorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBhY3R1YWwgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3RlZCwgYWN0dWFsKQorCisgICAgZGVmIHRlc3RfdHlwZV9vZl9kYXRhX2NvbGxlY3Rpb24oc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IHRoZSB0eXBlIG9mIGl0ZXJhYmxlIGRhdGEgZG9lc24ndCBlZmZlY3QgdGhlIHJlc3VsdC4KKyAgICAgICAgY2xhc3MgTXlMaXN0KGxpc3QpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBjbGFzcyBNeVR1cGxlKHR1cGxlKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZGVmIGdlbmVyYXRvcihkYXRhKToKKyAgICAgICAgICAgIHJldHVybiAob2JqIGZvciBvYmogaW4gZGF0YSkKKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgZm9yIGtpbmQgaW4gKGxpc3QsIHR1cGxlLCBpdGVyLCBNeUxpc3QsIE15VHVwbGUsIGdlbmVyYXRvcik6CisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoa2luZChkYXRhKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3JhbmdlX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGZ1bmN0aW9ucyB3b3JrIHdpdGggcmFuZ2Ugb2JqZWN0cy4KKyAgICAgICAgZGF0YSA9IHJhbmdlKDIwLCA1MCwgMykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMobGlzdChkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYmFkX2FyZ190eXBlcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZnVuY3Rpb24gcmFpc2VzIHdoZW4gZ2l2ZW4gZGF0YSBvZiB0aGUgd3JvbmcgdHlwZS4KKworICAgICAgICAjIERvbid0IHJvbGwgdGhlIGZvbGxvd2luZyBpbnRvIGEgbG9vcCBsaWtlIHRoaXM6CisgICAgICAgICMgICBmb3IgYmFkIGluIGxpc3Rfb2ZfYmFkOgorICAgICAgICAjICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoYmFkKQorICAgICAgICAjCisgICAgICAgICMgU2luY2UgYXNzZXJ0UmFpc2VzIGRvZXNuJ3Qgc2hvdyB0aGUgYXJndW1lbnRzIHRoYXQgY2F1c2VkIHRoZSB0ZXN0CisgICAgICAgICMgZmFpbHVyZSwgaXQgaXMgdmVyeSBkaWZmaWN1bHQgdG8gZGVidWcgdGhlc2UgdGVzdCBmYWlsdXJlcyB3aGVuIHRoZQorICAgICAgICAjIGZvbGxvd2luZyBhcmUgaW4gYSBsb29wLgorICAgICAgICBzZWxmLmNoZWNrX2Zvcl90eXBlX2Vycm9yKE5vbmUpCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoMjMpCisgICAgICAgIHNlbGYuY2hlY2tfZm9yX3R5cGVfZXJyb3IoNDIuMCkKKyAgICAgICAgc2VsZi5jaGVja19mb3JfdHlwZV9lcnJvcihvYmplY3QoKSkKKworICAgIGRlZiBjaGVja19mb3JfdHlwZV9lcnJvcihzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCAqYXJncykKKworICAgIGRlZiB0ZXN0X3R5cGVfb2ZfZGF0YV9lbGVtZW50KHNlbGYpOgorICAgICAgICAjIENoZWNrIHRoZSB0eXBlIG9mIGRhdGEgZWxlbWVudHMgZG9lc24ndCBhZmZlY3QgdGhlIG51bWVyaWMgcmVzdWx0LgorICAgICAgICAjIFRoaXMgaXMgYSB3ZWFrZXIgdGVzdCB0aGFuIFVuaXZhcmlhdGVUeXBlTWl4aW4udGVzdFR5cGVzQ29uc2VydmVkLAorICAgICAgICAjIGJlY2F1c2UgaXQgY2hlY2tzIHRoZSBudW1lcmljIHJlc3VsdCBieSBlcXVhbGl0eSwgYnV0IG5vdCBieSB0eXBlLgorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3RydWVkaXZfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19hZGRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX2FkZF9fKG90aGVyKSkKKyAgICAgICAgICAgIF9fcmFkZF9fID0gX19hZGRfXworCisgICAgICAgIHJhdyA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMocmF3KQorICAgICAgICBmb3Iga2luZCBpbiAoZmxvYXQsIE15RmxvYXQsIERlY2ltYWwsIEZyYWN0aW9uKToKKyAgICAgICAgICAgIGRhdGEgPSBba2luZCh4KSBmb3IgeCBpbiByYXddCisgICAgICAgICAgICByZXN1bHQgPSB0eXBlKGV4cGVjdGVkKShzZWxmLmZ1bmMoZGF0YSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhwZWN0ZWQpCisKKworY2xhc3MgVW5pdmFyaWF0ZVR5cGVNaXhpbjoKKyAgICAiIiJNaXhpbiBjbGFzcyBmb3IgdHlwZS1jb25zZXJ2aW5nIGZ1bmN0aW9ucy4KKworICAgIFRoaXMgbWl4aW4gY2xhc3MgaG9sZHMgdGVzdChzKSBmb3IgZnVuY3Rpb25zIHdoaWNoIGNvbnNlcnZlIHRoZSB0eXBlIG9mCisgICAgaW5kaXZpZHVhbCBkYXRhIHBvaW50cy4gRS5nLiB0aGUgbWVhbiBvZiBhIGxpc3Qgb2YgRnJhY3Rpb25zIHNob3VsZCBpdHNlbGYKKyAgICBiZSBhIEZyYWN0aW9uLgorCisgICAgTm90IGFsbCB0ZXN0cyB0byBkbyB3aXRoIHR5cGVzIG5lZWQgZ28gaW4gdGhpcyBjbGFzcy4gT25seSB0aG9zZSB0aGF0CisgICAgcmVseSBvbiB0aGUgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBzYW1lIHR5cGUgYXMgaXRzIGlucHV0IGRhdGEuCisgICAgIiIiCisgICAgZGVmIHRlc3RfdHlwZXNfY29uc2VydmVkKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBmdW5jdGlvbnMga2VlcHMgdGhlIHNhbWUgdHlwZSBhcyB0aGVpciBkYXRhIHBvaW50cy4KKyAgICAgICAgIyAoRXhjbHVkZXMgbWl4ZWQgZGF0YSB0eXBlcy4pIFRoaXMgb25seSB0ZXN0cyB0aGUgdHlwZSBvZiB0aGUgcmV0dXJuCisgICAgICAgICMgcmVzdWx0LCBub3QgdGhlIHZhbHVlLgorICAgICAgICBjbGFzcyBNeUZsb2F0KGZsb2F0KToKKyAgICAgICAgICAgIGRlZiBfX3RydWVkaXZfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3RydWVkaXZfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19zdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3N1Yl9fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX3JzdWJfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3JzdWJfXyhvdGhlcikpCisgICAgICAgICAgICBkZWYgX19wb3dfXyhzZWxmLCBvdGhlcik6CisgICAgICAgICAgICAgICAgcmV0dXJuIHR5cGUoc2VsZikoc3VwZXIoKS5fX3Bvd19fKG90aGVyKSkKKyAgICAgICAgICAgIGRlZiBfX2FkZF9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgICAgICAgICByZXR1cm4gdHlwZShzZWxmKShzdXBlcigpLl9fYWRkX18ob3RoZXIpKQorICAgICAgICAgICAgX19yYWRkX18gPSBfX2FkZF9fCisKKyAgICAgICAgZGF0YSA9IHNlbGYucHJlcGFyZV9kYXRhKCkKKyAgICAgICAgZm9yIGtpbmQgaW4gKGZsb2F0LCBEZWNpbWFsLCBGcmFjdGlvbiwgTXlGbG9hdCk6CisgICAgICAgICAgICBkID0gW2tpbmQoeCkgZm9yIHggaW4gZGF0YV0KKyAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHJlc3VsdCksIGtpbmQpCisKKworY2xhc3MgVGVzdFN1bUNvbW1vbihVbml2YXJpYXRlQ29tbW9uTWl4aW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgQ29tbW9uIHRlc3QgY2FzZXMgZm9yIHN0YXRpc3RpY3MuX3N1bSgpIGZ1bmN0aW9uLgorCisgICAgIyBUaGlzIHRlc3Qgc3VpdGUgbG9va3Mgb25seSBhdCB0aGUgbnVtZXJpYyB2YWx1ZSByZXR1cm5lZCBieSBfc3VtLAorICAgICMgYWZ0ZXIgY29udmVyc2lvbiB0byB0aGUgYXBwcm9wcmlhdGUgdHlwZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIGRlZiBzaW1wbGlmaWVkX3N1bSgqYXJncyk6CisgICAgICAgICAgICBULCB2YWx1ZSwgbiA9IHN0YXRpc3RpY3MuX3N1bSgqYXJncykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aXN0aWNzLl9jb2VyY2UodmFsdWUsIFQpCisgICAgICAgIHNlbGYuZnVuYyA9IHNpbXBsaWZpZWRfc3VtCisKKworY2xhc3MgVGVzdFN1bShOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdCBjYXNlcyBmb3Igc3RhdGlzdGljcy5fc3VtKCkgZnVuY3Rpb24uCisKKyAgICAjIFRoZXNlIHRlc3RzIGxvb2sgYXQgdGhlIGVudGlyZSB0aHJlZSB2YWx1ZSB0dXBsZSByZXR1cm5lZCBieSBfc3VtLgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLl9zdW0KKworICAgIGRlZiB0ZXN0X2VtcHR5X2RhdGEoc2VsZik6CisgICAgICAgICMgT3ZlcnJpZGUgdGVzdCBmb3IgZW1wdHkgZGF0YS4KKyAgICAgICAgZm9yIGRhdGEgaW4gKFtdLCAoKSwgaXRlcihbXSkpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIChpbnQsIEZyYWN0aW9uKDApLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIzKSwgKGludCwgRnJhY3Rpb24oMjMpLCAwKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDIuMyksIChmbG9hdCwgRnJhY3Rpb24oMi4zKSwgMCkpCisKKyAgICBkZWYgdGVzdF9pbnRzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbMSwgNSwgMywgLTQsIC04LCAyMCwgNDIsIDFdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50LCBGcmFjdGlvbig2MCksIDgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhbNCwgMiwgMywgLTgsIDddLCAxMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoaW50LCBGcmFjdGlvbigxMDA4KSwgNSkpCisKKyAgICBkZWYgdGVzdF9mbG9hdHMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFswLjI1XSoyMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0LCBGcmFjdGlvbig1LjApLCAyMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFswLjEyNSwgMC4yNSwgMC41LCAwLjc1XSwgMS41KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQsIEZyYWN0aW9uKDMuMTI1KSwgNCkpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFtGcmFjdGlvbigxLCAxMDAwKV0qNTAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoRnJhY3Rpb24sIEZyYWN0aW9uKDEsIDIpLCA1MDApKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgiMC4wMDEiKSwgRCgiNS4yNDYiKSwgRCgiMS43MDIiKSwgRCgiLTAuMDI1IiksCisgICAgICAgICAgICAgICAgRCgiMy45NzQiKSwgRCgiMi4zMjgiKSwgRCgiNC42MTciKSwgRCgiMi44NDMiKSwKKyAgICAgICAgICAgICAgICBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChEZWNpbWFsLCBEZWNpbWFsKCIyMC42ODYiKSwgOCkpCisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3dpdGhfbWF0aF9mc3VtKHNlbGYpOgorICAgICAgICAjIENvbXBhcmUgd2l0aCB0aGUgbWF0aC5mc3VtIGZ1bmN0aW9uLgorICAgICAgICAjIElkZWFsbHkgd2Ugb3VnaHQgdG8gZ2V0IHRoZSBleGFjdCBzYW1lIHJlc3VsdCwgYnV0IHNvbWV0aW1lcworICAgICAgICAjIHdlIGRpZmZlciBieSBhIHZlcnkgc2xpZ2h0IGFtb3VudCA6LSgKKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMTAwLCAxMDAwKSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChmbG9hdChzZWxmLmZ1bmMoZGF0YSlbMV0pLCBtYXRoLmZzdW0oZGF0YSksIHJlbD0yZS0xNikKKworICAgIGRlZiB0ZXN0X3N0YXJ0X2FyZ3VtZW50KHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCB0aGUgb3B0aW9uYWwgc3RhcnQgYXJndW1lbnQgd29ya3MgY29ycmVjdGx5LgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKDEsIDEwMDApIGZvciBfIGluIHJhbmdlKDEwMCldCisgICAgICAgIHQgPSBzZWxmLmZ1bmMoZGF0YSlbMV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0KzQyLCBzZWxmLmZ1bmMoZGF0YSwgNDIpWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQtMjMsIHNlbGYuZnVuYyhkYXRhLCAtMjMpWzFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQrRnJhY3Rpb24oMWUyMCksIHNlbGYuZnVuYyhkYXRhLCAxZTIwKVsxXSkKKworICAgIGRlZiB0ZXN0X3N0cmluZ3NfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2Ygc3RyaW5ncyBzaG91bGQgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzXSwgJzk5OScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgMywgJzk5OSddKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfZmFpbChzZWxmKToKKyAgICAgICAgIyBTdW0gb2YgYnl0ZXMgc2hvdWxkIGZhaWwuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBbMSwgMiwgM10sIGInOTk5JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLCAzLCBiJzk5OSddKQorCisgICAgZGVmIHRlc3RfbWl4ZWRfc3VtKHNlbGYpOgorICAgICAgICAjIE1peGVkIGlucHV0IHR5cGVzIGFyZSBub3QgKGN1cnJlbnRseSkgYWxsb3dlZC4KKyAgICAgICAgIyBDaGVjayB0aGF0IG1peGVkIGRhdGEgdHlwZXMgZmFpbC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzZWxmLmZ1bmMsIFsxLCAyLjAsIERlY2ltYWwoMSldKQorICAgICAgICAjIEFuZCBzbyBkb2VzIG1peGVkIHN0YXJ0IGFyZ3VtZW50LgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuZnVuYywgWzEsIDIuMF0sIERlY2ltYWwoMSkpCisKKworY2xhc3MgU3VtVG9ydHVyZVRlc3QoTnVtZXJpY1Rlc3RDYXNlKToKKyAgICBkZWYgdGVzdF90b3J0dXJlKHNlbGYpOgorICAgICAgICAjIFRpbSBQZXRlcnMnIHRvcnR1cmUgdGVzdCBmb3Igc3VtLCBhbmQgdmFyaWFudHMgb2Ygc2FtZS4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLl9zdW0oWzEsIDFlMTAwLCAxLCAtMWUxMDBdKjEwMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZmxvYXQsIEZyYWN0aW9uKDIwMDAwLjApLCA0MDAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5fc3VtKFsxZTEwMCwgMSwgMSwgLTFlMTAwXSoxMDAwMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgKGZsb2F0LCBGcmFjdGlvbigyMDAwMC4wKSwgNDAwMDApKQorICAgICAgICBULCBudW0sIGNvdW50ID0gc3RhdGlzdGljcy5fc3VtKFsxZS0xMDAsIDEsIDFlLTEwMCwgLTFdKjEwMDAwKQorICAgICAgICBzZWxmLmFzc2VydElzKFQsIGZsb2F0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvdW50LCA0MDAwMCkKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChmbG9hdChudW0pLCAyLjBlLTk2LCByZWw9NWUtMTYpCisKKworY2xhc3MgU3VtU3BlY2lhbFZhbHVlcyhOdW1lcmljVGVzdENhc2UpOgorICAgICMgVGVzdCB0aGF0IHN1bSB3b3JrcyBjb3JyZWN0bHkgd2l0aCBJRUVFLTc1NCBzcGVjaWFsIHZhbHVlcy4KKworICAgIGRlZiB0ZXN0X25hbihzZWxmKToKKyAgICAgICAgZm9yIHR5cGVfIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBuYW4gPSB0eXBlXygnbmFuJykKKyAgICAgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgbmFuLCAyXSlbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShyZXN1bHQpLCB0eXBlXykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgY2hlY2tfaW5maW5pdHkoc2VsZiwgeCwgaW5mKToKKyAgICAgICAgIiIiQ2hlY2sgeCBpcyBhbiBpbmZpbml0eSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBzaWduIGFzIGluZi4iIiIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYoeCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZSh4KSwgdHlwZShpbmYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHggPiAwLCBpbmYgPiAwKQorICAgICAgICBhc3NlcnQgeCA9PSBpbmYKKworICAgIGRlZiBkb190ZXN0X2luZihzZWxmLCBpbmYpOgorICAgICAgICAjIEFkZGluZyBhIHNpbmdsZSBpbmZpbml0eSBnaXZlcyBpbmZpbml0eS4KKyAgICAgICAgcmVzdWx0ID0gc3RhdGlzdGljcy5fc3VtKFsxLCAyLCBpbmYsIDNdKVsxXQorICAgICAgICBzZWxmLmNoZWNrX2luZmluaXR5KHJlc3VsdCwgaW5mKQorICAgICAgICAjIEFkZGluZyB0d28gaW5maW5pdGllcyBvZiB0aGUgc2FtZSBzaWduIGFsc28gZ2l2ZXMgaW5maW5pdHkuCisgICAgICAgIHJlc3VsdCA9IHN0YXRpc3RpY3MuX3N1bShbMSwgMiwgaW5mLCAzLCBpbmYsIDRdKVsxXQorICAgICAgICBzZWxmLmNoZWNrX2luZmluaXR5KHJlc3VsdCwgaW5mKQorCisgICAgZGVmIHRlc3RfZmxvYXRfaW5mKHNlbGYpOgorICAgICAgICBpbmYgPSBmbG9hdCgnaW5mJykKKyAgICAgICAgZm9yIHNpZ24gaW4gKCsxLCAtMSk6CisgICAgICAgICAgICBzZWxmLmRvX3Rlc3RfaW5mKHNpZ24qaW5mKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9pbmYoc2VsZik6CisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGZvciBzaWduIGluICgrMSwgLTEpOgorICAgICAgICAgICAgc2VsZi5kb190ZXN0X2luZihzaWduKmluZikKKworICAgIGRlZiB0ZXN0X2Zsb2F0X21pc21hdGNoZWRfaW5mcyhzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgYWRkaW5nIHR3byBpbmZpbml0aWVzIG9mIG9wcG9zaXRlIHNpZ24gZ2l2ZXMgYSBOQU4uCisgICAgICAgIGluZiA9IGZsb2F0KCdpbmYnKQorICAgICAgICByZXN1bHQgPSBzdGF0aXN0aWNzLl9zdW0oWzEsIDIsIGluZiwgMywgLWluZiwgNF0pWzFdCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX2V4dGVuZGVkY29udGV4dF9taXNtYXRjaGVkX2luZnNfdG9fbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIERlY2ltYWwgSU5GcyB3aXRoIG9wcG9zaXRlIHNpZ24gcmV0dXJucyBOQU4uCisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGRhdGEgPSBbMSwgMiwgaW5mLCAzLCAtaW5mLCA0XQorICAgICAgICB3aXRoIGRlY2ltYWwubG9jYWxjb250ZXh0KGRlY2ltYWwuRXh0ZW5kZWRDb250ZXh0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHN0YXRpc3RpY3MuX3N1bShkYXRhKVsxXSkpCisKKyAgICBkZWYgdGVzdF9kZWNpbWFsX2Jhc2ljY29udGV4dF9taXNtYXRjaGVkX2luZnNfdG9fbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgYWRkaW5nIERlY2ltYWwgSU5GcyB3aXRoIG9wcG9zaXRlIHNpZ24gcmFpc2VzIEludmFsaWRPcGVyYXRpb24uCisgICAgICAgIGluZiA9IERlY2ltYWwoJ2luZicpCisgICAgICAgIGRhdGEgPSBbMSwgMiwgaW5mLCAzLCAtaW5mLCA0XQorICAgICAgICB3aXRoIGRlY2ltYWwubG9jYWxjb250ZXh0KGRlY2ltYWwuQmFzaWNDb250ZXh0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRlY2ltYWwuSW52YWxpZE9wZXJhdGlvbiwgc3RhdGlzdGljcy5fc3VtLCBkYXRhKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbF9zbmFuX3JhaXNlcyhzZWxmKToKKyAgICAgICAgIyBBZGRpbmcgc05BTiBzaG91bGQgcmFpc2UgSW52YWxpZE9wZXJhdGlvbi4KKyAgICAgICAgc05BTiA9IERlY2ltYWwoJ3NOQU4nKQorICAgICAgICBkYXRhID0gWzEsIHNOQU4sIDJdCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGRlY2ltYWwuSW52YWxpZE9wZXJhdGlvbiwgc3RhdGlzdGljcy5fc3VtLCBkYXRhKQorCisKKyMgPT09IFRlc3RzIGZvciBhdmVyYWdlcyA9PT0KKworY2xhc3MgQXZlcmFnZU1peGluKFVuaXZhcmlhdGVDb21tb25NaXhpbik6CisgICAgIyBNaXhpbiBjbGFzcyBob2xkaW5nIGNvbW1vbiB0ZXN0cyBmb3IgYXZlcmFnZXMuCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgQXZlcmFnZSBvZiBhIHNpbmdsZSB2YWx1ZSBpcyB0aGUgdmFsdWUgaXRzZWxmLgorICAgICAgICBmb3IgeCBpbiAoMjMsIDQyLjUsIDEuM2UxNSwgRnJhY3Rpb24oMTUsIDE5KSwgRGVjaW1hbCgnMC4yOCcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKFt4XSksIHgpCisKKyAgICBkZWYgdGVzdF9yZXBlYXRlZF9zaW5nbGVfdmFsdWUoc2VsZik6CisgICAgICAgICMgVGhlIGF2ZXJhZ2Ugb2YgYSBzaW5nbGUgcmVwZWF0ZWQgdmFsdWUgaXMgdGhlIHZhbHVlIGl0c2VsZi4KKyAgICAgICAgZm9yIHggaW4gKDMuNSwgMTcsIDIuNWUxNSwgRnJhY3Rpb24oNjEsIDY3KSwgRGVjaW1hbCgnNC45NzEyJykpOgorICAgICAgICAgICAgZm9yIGNvdW50IGluICgyLCA1LCAxMCwgMjApOgorICAgICAgICAgICAgICAgIGRhdGEgPSBbeF0qY291bnQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgeCkKKworCitjbGFzcyBUZXN0TWVhbihOdW1lcmljVGVzdENhc2UsIEF2ZXJhZ2VNaXhpbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lYW4KKworICAgIGRlZiB0ZXN0X3RvcnR1cmVfcGVwKHNlbGYpOgorICAgICAgICAjICJUb3J0dXJlIFRlc3QiIGZyb20gUEVQLTQ1MC4KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoWzFlMTAwLCAxLCAzLCAtMWUxMDBdKSwgMSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW50cy4KKyAgICAgICAgZGF0YSA9IFswLCAxLCAyLCAzLCAzLCAzLCA0LCA1LCA1LCA2LCA3LCA3LCA3LCA3LCA4LCA5XQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNC44MTI1KQorCisgICAgZGVmIHRlc3RfZmxvYXRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGZsb2F0cy4KKyAgICAgICAgZGF0YSA9IFsxNy4yNSwgMTkuNzUsIDIwLjAsIDIxLjUsIDIxLjc1LCAyMy4yNSwgMjUuMTI1LCAyNy41XQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMjIuMDE1NjI1KQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggaW50cy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCIxLjYzNCIpLCBEKCIyLjUxNyIpLCBEKCIzLjkxMiIpLCBEKCI0LjA3MiIpLCBEKCI1LjgxMyIpXQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgiMy41ODk2IikpCisKKyAgICBkZWYgdGVzdF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWFuIHdpdGggRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDIpLCBGKDIsIDMpLCBGKDMsIDQpLCBGKDQsIDUpLCBGKDUsIDYpLCBGKDYsIDcpLCBGKDcsIDgpXQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigxNDc5LCAxOTYwKSkKKworICAgIGRlZiB0ZXN0X2luZihzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lYW4gd2l0aCBpbmZpbml0aWVzLgorICAgICAgICByYXcgPSBbMSwgMywgNSwgNywgOV0gICMgVXNlIG9ubHkgaW50cywgdG8gYXZvaWQgVHlwZUVycm9yIGxhdGVyLgorICAgICAgICBmb3Iga2luZCBpbiAoZmxvYXQsIERlY2ltYWwpOgorICAgICAgICAgICAgZm9yIHNpZ24gaW4gKDEsIC0xKToKKyAgICAgICAgICAgICAgICBpbmYgPSBraW5kKCJpbmYiKSpzaWduCisgICAgICAgICAgICAgICAgZGF0YSA9IHJhdyArIFtpbmZdCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG1hdGguaXNpbmYocmVzdWx0KSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgaW5mKQorCisgICAgZGVmIHRlc3RfbWlzbWF0Y2hlZF9pbmZzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIGluZmluaXRpZXMgb2Ygb3Bwb3NpdGUgc2lnbi4KKyAgICAgICAgZGF0YSA9IFsyLCA0LCA2LCBmbG9hdCgnaW5mJyksIDEsIDMsIDUsIGZsb2F0KCctaW5mJyldCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobWF0aC5pc25hbihyZXN1bHQpKQorCisgICAgZGVmIHRlc3RfbmFuKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVhbiB3aXRoIE5BTnMuCisgICAgICAgIHJhdyA9IFsxLCAzLCA1LCA3LCA5XSAgIyBVc2Ugb25seSBpbnRzLCB0byBhdm9pZCBUeXBlRXJyb3IgbGF0ZXIuCisgICAgICAgIGZvciBraW5kIGluIChmbG9hdCwgRGVjaW1hbCk6CisgICAgICAgICAgICBpbmYgPSBraW5kKCJuYW4iKQorICAgICAgICAgICAgZGF0YSA9IHJhdyArIFtpbmZdCisgICAgICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShtYXRoLmlzbmFuKHJlc3VsdCkpCisKKyAgICBkZWYgdGVzdF9iaWdfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IGFkZGluZyBhIGxhcmdlIGNvbnN0YW50IHRvIGV2ZXJ5IGRhdGEgcG9pbnQuCisgICAgICAgIGMgPSAxZTkKKyAgICAgICAgZGF0YSA9IFszLjQsIDQuNSwgNC45LCA2LjcsIDYuOCwgNy4yLCA4LjAsIDguMSwgOS40XQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhkYXRhKSArIGMKKyAgICAgICAgYXNzZXJ0IGV4cGVjdGVkICE9IGMKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKFt4K2MgZm9yIHggaW4gZGF0YV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2RvdWJsZWRfZGF0YShzZWxmKToKKyAgICAgICAgIyBNZWFuIG9mIFthLGIsYy4uLnpdIHNob3VsZCBiZSBzYW1lIGFzIGZvciBbYSxhLGIsYixjLGMuLi56LHpdLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0zLCA1KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgYWN0dWFsID0gc2VsZi5mdW5jKGRhdGEqMikKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChhY3R1YWwsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfcmVncmVzc2lvbl8yMDU2MShzZWxmKToKKyAgICAgICAgIyBSZWdyZXNzaW9uIHRlc3QgZm9yIGlzc3VlIDIwNTYxLgorICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjA1NjEKKyAgICAgICAgZCA9IERlY2ltYWwoJzFlNCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdGlzdGljcy5tZWFuKFtkXSksIGQpCisKKyAgICBkZWYgdGVzdF9yZWdyZXNzaW9uXzI1MTc3KHNlbGYpOgorICAgICAgICAjIFJlZ3Jlc3Npb24gdGVzdCBmb3IgaXNzdWUgMjUxNzcuCisgICAgICAgICMgRW5zdXJlIHZlcnkgYmlnIGFuZCB2ZXJ5IHNtYWxsIGZsb2F0cyBkb24ndCBvdmVyZmxvdy4KKyAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTI1MTc3LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MubWVhbigKKyAgICAgICAgICAgIFs4Ljk4ODQ2NTY3NDMxMTU3OWUrMzA3LCA4Ljk4ODQ2NTY3NDMxMTU4ZSszMDddKSwKKyAgICAgICAgICAgIDguOTg4NDY1Njc0MzExNThlKzMwNykKKyAgICAgICAgYmlnID0gOC45ODg0NjU2NzQzMTE1OGUrMzA3CisgICAgICAgIHRpbnkgPSA1ZS0zMjQKKyAgICAgICAgZm9yIG4gaW4gKDIsIDMsIDUsIDIwMCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MubWVhbihbYmlnXSpuKSwgYmlnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0aXN0aWNzLm1lYW4oW3RpbnldKm4pLCB0aW55KQorCisKK2NsYXNzIFRlc3RNZWRpYW4oTnVtZXJpY1Rlc3RDYXNlLCBBdmVyYWdlTWl4aW4pOgorICAgICMgQ29tbW9uIHRlc3RzIGZvciBtZWRpYW4gYW5kIGFsbCBtZWRpYW4uKiBmdW5jdGlvbnMuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbgorCisgICAgZGVmIHByZXBhcmVfZGF0YShzZWxmKToKKyAgICAgICAgIiIiT3ZlcmxvYWQgbWV0aG9kIGZyb20gVW5pdmFyaWF0ZUNvbW1vbk1peGluLiIiIgorICAgICAgICBkYXRhID0gc3VwZXIoKS5wcmVwYXJlX2RhdGEoKQorICAgICAgICBpZiBsZW4oZGF0YSklMiAhPSAxOgorICAgICAgICAgICAgZGF0YS5hcHBlbmQoMikKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiB0ZXN0X2V2ZW5faW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIGludCBkYXRhIHBvaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMy41KQorCisgICAgZGVmIHRlc3Rfb2RkX2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd2l0aCBhbiBvZGQgbnVtYmVyIG9mIGludCBkYXRhIHBvaW50cy4KKyAgICAgICAgZGF0YSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA5XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNCkKKworICAgIGRlZiB0ZXN0X29kZF9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMywgNykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KSwgRig2LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoMSwgMikpCisKKyAgICBkZWYgdGVzdF9vZGRfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4gd29ya3Mgd2l0aCBhbiBvZGQgbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzIuNScpLCBEKCczLjEnKSwgRCgnNC4yJyksIEQoJzUuNycpLCBEKCc1LjgnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzQuMicpKQorCisgICAgZGVmIHRlc3RfZXZlbl9kZWNpbWFscyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbiB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzEuMicpLCBEKCcyLjUnKSwgRCgnMy4xJyksIEQoJzQuMicpLCBEKCc1LjcnKSwgRCgnNS44JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBEKCczLjY1JykpCisKKworY2xhc3MgVGVzdE1lZGlhbkRhdGFUeXBlKE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0IGNvbnNlcnZhdGlvbiBvZiBkYXRhIGVsZW1lbnQgdHlwZSBmb3IgbWVkaWFuLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW4KKworICAgIGRlZiBwcmVwYXJlX2RhdGEoc2VsZik6CisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDE1KSkKKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDEKKyAgICAgICAgd2hpbGUgZGF0YSA9PSBzb3J0ZWQoZGF0YSk6CisgICAgICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICByZXR1cm4gZGF0YQorCisKK2NsYXNzIFRlc3RNZWRpYW5Mb3coVGVzdE1lZGlhbiwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1lZGlhbl9sb3cKKworICAgIGRlZiB0ZXN0X2V2ZW5faW50cyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9sb3cgd2l0aCBhbiBldmVuIG51bWJlciBvZiBpbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzKQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fbG93IHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDEsIDcpLCBGKDIsIDcpLCBGKDMsIDcpLCBGKDQsIDcpLCBGKDUsIDcpLCBGKDYsIDcpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRigzLCA3KSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fbG93IHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnMS4xJyksIEQoJzIuMicpLCBEKCczLjMnKSwgRCgnNC40JyksIEQoJzUuNScpLCBEKCc2LjYnKV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEQoJzMuMycpKQorCisKK2NsYXNzIFRlc3RNZWRpYW5IaWdoKFRlc3RNZWRpYW4sIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy5tZWRpYW5faGlnaAorCisgICAgZGVmIHRlc3RfZXZlbl9pbnRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2hpZ2ggd2l0aCBhbiBldmVuIG51bWJlciBvZiBpbnRzLgorICAgICAgICBkYXRhID0gWzEsIDIsIDMsIDQsIDUsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0KQorCisgICAgZGVmIHRlc3RfZXZlbl9mcmFjdGlvbnMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5faGlnaCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIEZyYWN0aW9ucy4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA3KSwgRigyLCA3KSwgRigzLCA3KSwgRig0LCA3KSwgRig1LCA3KSwgRig2LCA3KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIEYoNCwgNykpCisKKyAgICBkZWYgdGVzdF9ldmVuX2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgbWVkaWFuX2hpZ2ggd29ya3Mgd2l0aCBhbiBldmVuIG51bWJlciBvZiBEZWNpbWFscy4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCcxLjEnKSwgRCgnMi4yJyksIEQoJzMuMycpLCBEKCc0LjQnKSwgRCgnNS41JyksIEQoJzYuNicpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgRCgnNC40JykpCisKKworY2xhc3MgVGVzdE1lZGlhbkdyb3VwZWQoVGVzdE1lZGlhbik6CisgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkLgorICAgICMgRG9lc24ndCBjb25zZXJ2ZSBkYXRhIGVsZW1lbnQgdHlwZXMsIHNvIGRvbid0IHVzZSBUZXN0TWVkaWFuVHlwZS4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MubWVkaWFuX2dyb3VwZWQKKworICAgIGRlZiB0ZXN0X29kZF9udW1iZXJfcmVwZWF0ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4uZ3JvdXBlZCB3aXRoIHJlcGVhdGVkIG1lZGlhbiB2YWx1ZXMuCisgICAgICAgIGRhdGEgPSBbMTIsIDEzLCAxNCwgMTQsIDE0LCAxNSwgMTVdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAxNCkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzEyLCAxMywgMTQsIDE0LCAxNCwgMTQsIDE1XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgMTMuODc1KQorICAgICAgICAjLS0tCisgICAgICAgIGRhdGEgPSBbNSwgMTAsIDEwLCAxNSwgMjAsIDIwLCAyMCwgMjAsIDI1LCAyNSwgMzBdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDUpLCAxOS4zNzUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFsxNiwgMTgsIDE4LCAxOCwgMTgsIDIwLCAyMCwgMjAsIDIyLCAyMiwgMjIsIDI0LCAyNCwgMjYsIDI4XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyKSwgMjAuNjY2NjY2NjcsIHRvbD0xZS04KQorCisgICAgZGVmIHRlc3RfZXZlbl9udW1iZXJfcmVwZWF0ZWQoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW4uZ3JvdXBlZCB3aXRoIHJlcGVhdGVkIG1lZGlhbiB2YWx1ZXMuCisgICAgICAgIGRhdGEgPSBbNSwgMTAsIDEwLCAxNSwgMjAsIDIwLCAyMCwgMjUsIDI1LCAzMF0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgc2VsZi5hc3NlcnRBcHByb3hFcXVhbChzZWxmLmZ1bmMoZGF0YSwgNSksIDE5LjE2NjY2NjY3LCB0b2w9MWUtOCkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzIsIDMsIDQsIDQsIDQsIDVdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjgzMzMzMzMzLCB0b2w9MWUtOCkKKyAgICAgICAgIy0tLQorICAgICAgICBkYXRhID0gWzIsIDMsIDMsIDQsIDQsIDQsIDUsIDUsIDUsIDUsIDYsIDZdCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA0LjUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFszLCA0LCA0LCA0LCA1LCA1LCA1LCA1LCA2LCA2XQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNC43NSkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSBtZXRob2QgZnJvbSBBdmVyYWdlTWl4aW4uCisgICAgICAgICMgWWV0IGFnYWluLCBmYWlsdXJlIG9mIG1lZGlhbl9ncm91cGVkIHRvIGNvbnNlcnZlIHRoZSBkYXRhIHR5cGUKKyAgICAgICAgIyBjYXVzZXMgbWUgaGVhZGFjaGVzIDotKAorICAgICAgICBmb3IgeCBpbiAoNS4zLCA2OCwgNC4zZTE3LCBGcmFjdGlvbigyOSwgMTAxKSwgRGVjaW1hbCgnMzIuOTcxNCcpKToKKyAgICAgICAgICAgIGZvciBjb3VudCBpbiAoMiwgNSwgMTAsIDIwKToKKyAgICAgICAgICAgICAgICBkYXRhID0gW3hdKmNvdW50CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGZsb2F0KHgpKQorCisgICAgZGVmIHRlc3Rfb2RkX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gb2RkIG51bWJlciBvZiBGcmFjdGlvbnMuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoNSwgNCksIEYoOSwgNCksIEYoMTMsIDQpLCBGKDEzLCA0KSwgRigxNywgNCldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAxCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAzLjApCisKKyAgICBkZWYgdGVzdF9ldmVuX2ZyYWN0aW9ucyhzZWxmKToKKyAgICAgICAgIyBUZXN0IG1lZGlhbl9ncm91cGVkIHdvcmtzIHdpdGggYW4gZXZlbiBudW1iZXIgb2YgRnJhY3Rpb25zLgorICAgICAgICBGID0gRnJhY3Rpb24KKyAgICAgICAgZGF0YSA9IFtGKDUsIDQpLCBGKDksIDQpLCBGKDEzLCA0KSwgRigxMywgNCksIEYoMTcsIDQpLCBGKDE3LCA0KV0KKyAgICAgICAgYXNzZXJ0IGxlbihkYXRhKSUyID09IDAKKyAgICAgICAgcmFuZG9tLnNodWZmbGUoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIDMuMjUpCisKKyAgICBkZWYgdGVzdF9vZGRfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIG9kZCBudW1iZXIgb2YgRGVjaW1hbHMuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgnNS41JyksIEQoJzYuNScpLCBEKCc2LjUnKSwgRCgnNy41JyksIEQoJzguNScpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMQorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNi43NSkKKworICAgIGRlZiB0ZXN0X2V2ZW5fZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3b3JrcyB3aXRoIGFuIGV2ZW4gbnVtYmVyIG9mIERlY2ltYWxzLgorICAgICAgICBEID0gRGVjaW1hbAorICAgICAgICBkYXRhID0gW0QoJzUuNScpLCBEKCc1LjUnKSwgRCgnNi41JyksIEQoJzYuNScpLCBEKCc3LjUnKSwgRCgnOC41JyldCisgICAgICAgIGFzc2VydCBsZW4oZGF0YSklMiA9PSAwCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCA2LjUpCisgICAgICAgICMtLS0KKyAgICAgICAgZGF0YSA9IFtEKCc1LjUnKSwgRCgnNS41JyksIEQoJzYuNScpLCBEKCc3LjUnKSwgRCgnNy41JyksIEQoJzguNScpXQorICAgICAgICBhc3NlcnQgbGVuKGRhdGEpJTIgPT0gMAorICAgICAgICByYW5kb20uc2h1ZmZsZShkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgNy4wKQorCisgICAgZGVmIHRlc3RfaW50ZXJ2YWwoc2VsZik6CisgICAgICAgICMgVGVzdCBtZWRpYW5fZ3JvdXBlZCB3aXRoIGludGVydmFsIGFyZ3VtZW50LgorICAgICAgICBkYXRhID0gWzIuMjUsIDIuNSwgMi41LCAyLjc1LCAyLjc1LCAzLjAsIDMuMCwgMy4yNSwgMy41LCAzLjc1XQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAwLjI1KSwgMi44NzUpCisgICAgICAgIGRhdGEgPSBbMi4yNSwgMi41LCAyLjUsIDIuNzUsIDIuNzUsIDIuNzUsIDMuMCwgMy4wLCAzLjI1LCAzLjUsIDMuNzVdCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwoc2VsZi5mdW5jKGRhdGEsIDAuMjUpLCAyLjgzMzMzMzMzLCB0b2w9MWUtOCkKKyAgICAgICAgZGF0YSA9IFsyMjAsIDIyMCwgMjQwLCAyNjAsIDI2MCwgMjYwLCAyNjAsIDI4MCwgMjgwLCAzMDAsIDMyMCwgMzQwXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZnVuYyhkYXRhLCAyMCksIDI2NS4wKQorCisKK2NsYXNzIFRlc3RNb2RlKE51bWVyaWNUZXN0Q2FzZSwgQXZlcmFnZU1peGluLCBVbml2YXJpYXRlVHlwZU1peGluKToKKyAgICAjIFRlc3QgY2FzZXMgZm9yIHRoZSBkaXNjcmV0ZSB2ZXJzaW9uIG9mIG1vZGUuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLm1vZGUKKworICAgIGRlZiBwcmVwYXJlX2RhdGEoc2VsZik6CisgICAgICAgICIiIk92ZXJsb2FkIG1ldGhvZCBmcm9tIFVuaXZhcmlhdGVDb21tb25NaXhpbi4iIiIKKyAgICAgICAgIyBNYWtlIHN1cmUgdGVzdCBkYXRhIGhhcyBleGFjdGx5IG9uZSBtb2RlLgorICAgICAgICByZXR1cm4gWzEsIDEsIDEsIDEsIDMsIDQsIDcsIDksIDAsIDgsIDJdCisKKyAgICBkZWYgdGVzdF9yYW5nZV9kYXRhKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIHRlc3QgZnJvbSBVbml2YXJpYXRlQ29tbW9uTWl4aW4uCisgICAgICAgIGRhdGEgPSByYW5nZSgyMCwgNTAsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIGRhdGEpCisKKyAgICBkZWYgdGVzdF9ub21pbmFsX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCBtb2RlIHdpdGggbm9taW5hbCBkYXRhLgorICAgICAgICBkYXRhID0gJ2FiY2JkYicKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksICdiJykKKyAgICAgICAgZGF0YSA9ICdmZSBmaSBmbyBmdW0gZmkgZmknLnNwbGl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksICdmaScpCisKKyAgICBkZWYgdGVzdF9kaXNjcmV0ZV9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSB3aXRoIGRpc2NyZXRlIG51bWVyaWMgZGF0YS4KKyAgICAgICAgZGF0YSA9IGxpc3QocmFuZ2UoMTApKQorICAgICAgICBmb3IgaSBpbiByYW5nZSgxMCk6CisgICAgICAgICAgICBkID0gZGF0YSArIFtpXQorICAgICAgICAgICAgcmFuZG9tLnNodWZmbGUoZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGQpLCBpKQorCisgICAgZGVmIHRlc3RfYmltb2RhbF9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgbW9kZSB3aXRoIGJpbW9kYWwgZGF0YS4KKyAgICAgICAgZGF0YSA9IFsxLCAxLCAyLCAyLCAyLCAyLCAzLCA0LCA1LCA2LCA2LCA2LCA2LCA3LCA4LCA5LCA5XQorICAgICAgICBhc3NlcnQgZGF0YS5jb3VudCgyKSA9PSBkYXRhLmNvdW50KDYpID09IDQKKyAgICAgICAgIyBDaGVjayBmb3IgYW4gZXhjZXB0aW9uLgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdGF0aXN0aWNzLlN0YXRpc3RpY3NFcnJvciwgc2VsZi5mdW5jLCBkYXRhKQorCisgICAgZGVmIHRlc3RfdW5pcXVlX2RhdGFfZmFpbHVyZShzZWxmKToKKyAgICAgICAgIyBUZXN0IG1vZGUgZXhjZXB0aW9uIHdoZW4gZGF0YSBwb2ludHMgYXJlIGFsbCB1bmlxdWUuCisgICAgICAgIGRhdGEgPSBsaXN0KHJhbmdlKDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworICAgIGRlZiB0ZXN0X25vbmVfZGF0YShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgbW9kZSByYWlzZXMgVHlwZUVycm9yIGlmIGdpdmVuIE5vbmUgYXMgZGF0YS4KKworICAgICAgICAjIFRoaXMgdGVzdCBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgbW9kZSB1c2VzCisgICAgICAgICMgY29sbGVjdGlvbnMuQ291bnRlciwgd2hpY2ggYWNjZXB0cyBOb25lIGFuZCByZXR1cm5zIGFuIGVtcHR5IGRpY3QuCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5mdW5jLCBOb25lKQorCisgICAgZGVmIHRlc3RfY291bnRlcl9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBhIENvdW50ZXIgaXMgdHJlYXRlZCBsaWtlIGFueSBvdGhlciBpdGVyYWJsZS4KKyAgICAgICAgZGF0YSA9IGNvbGxlY3Rpb25zLkNvdW50ZXIoWzEsIDEsIDEsIDJdKQorICAgICAgICAjIFNpbmNlIHRoZSBrZXlzIG9mIHRoZSBjb3VudGVyIGFyZSB0cmVhdGVkIGFzIGRhdGEgcG9pbnRzLCBub3QgdGhlCisgICAgICAgICMgY291bnRzLCB0aGlzIHNob3VsZCByYWlzZS4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgZGF0YSkKKworCisKKyMgPT09IFRlc3RzIGZvciB2YXJpYW5jZXMgYW5kIHN0YW5kYXJkIGRldmlhdGlvbnMgPT09CisKK2NsYXNzIFZhcmlhbmNlU3RkZXZNaXhpbihVbml2YXJpYXRlQ29tbW9uTWl4aW4pOgorICAgICMgTWl4aW4gY2xhc3MgaG9sZGluZyBjb21tb24gdGVzdHMgZm9yIHZhcmlhbmNlIGFuZCBzdGQgZGV2LgorCisgICAgIyBTdWJjbGFzc2VzIHNob3VsZCBpbmhlcml0IGZyb20gdGhpcyBiZWZvcmUgTnVtZXJpY1Rlc3RDbGFzcywgaW4gb3JkZXIKKyAgICAjIHRvIHNlZSB0aGUgcmVsIGF0dHJpYnV0ZSBiZWxvdy4gU2VlIHRlc3RTaGlmdERhdGEgZm9yIGFuIGV4cGxhbmF0aW9uLgorCisgICAgcmVsID0gMWUtMTIKKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBEZXZpYXRpb24gb2YgYSBzaW5nbGUgdmFsdWUgaXMgemVyby4KKyAgICAgICAgZm9yIHggaW4gKDExLCAxOS44LCA0LjZlMTQsIEZyYWN0aW9uKDIxLCAzNCksIERlY2ltYWwoJzguMzkyJykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoW3hdKSwgMCkKKworICAgIGRlZiB0ZXN0X3JlcGVhdGVkX3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBUaGUgZGV2aWF0aW9uIG9mIGEgc2luZ2xlIHJlcGVhdGVkIHZhbHVlIGlzIHplcm8uCisgICAgICAgIGZvciB4IGluICg3LjIsIDQ5LCA4LjFlMTUsIEZyYWN0aW9uKDMsIDcpLCBEZWNpbWFsKCc2Mi40ODAyJykpOgorICAgICAgICAgICAgZm9yIGNvdW50IGluICgyLCAzLCA1LCAxNSk6CisgICAgICAgICAgICAgICAgZGF0YSA9IFt4XSpjb3VudAorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCAwKQorCisgICAgZGVmIHRlc3RfZG9tYWluX2Vycm9yX3JlZ3Jlc3Npb24oc2VsZik6CisgICAgICAgICMgUmVncmVzc2lvbiB0ZXN0IGZvciBhIGRvbWFpbiBlcnJvciBleGNlcHRpb24uCisgICAgICAgICMgKFRoYW5rcyB0byBHZXJlbXkgQ29uZHJhLikKKyAgICAgICAgZGF0YSA9IFswLjEyMzQ1Njc4OTAxMjM0NV0qMTAwMDAKKyAgICAgICAgIyBBbGwgdGhlIGl0ZW1zIGFyZSBpZGVudGljYWwsIHNvIHZhcmlhbmNlIHNob3VsZCBiZSBleGFjdGx5IHplcm8uCisgICAgICAgICMgV2UgYWxsb3cgc29tZSBzbWFsbCByb3VuZC1vZmYgZXJyb3IsIGJ1dCBub3QgbXVjaC4KKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0QXBwcm94RXF1YWwocmVzdWx0LCAwLjAsIHRvbD01ZS0xNykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocmVzdWx0LCAwKSAgIyBBIG5lZ2F0aXZlIHJlc3VsdCBtdXN0IGZhaWwuCisKKyAgICBkZWYgdGVzdF9zaGlmdF9kYXRhKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzaGlmdGluZyB0aGUgZGF0YSBieSBhIGNvbnN0YW50IGFtb3VudCBkb2VzIG5vdCBhZmZlY3QKKyAgICAgICAgIyB0aGUgdmFyaWFuY2Ugb3Igc3RkZXYuIE9yIGF0IGxlYXN0IG5vdCBtdWNoLgorCisgICAgICAgICMgRHVlIHRvIHJvdW5kaW5nLCB0aGlzIHRlc3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYW4gaWRlYWwuIFdlIGFsbG93CisgICAgICAgICMgc29tZSB0b2xlcmFuY2UgYXdheSBmcm9tICJubyBjaGFuZ2UgYXQgYWxsIiBieSBzZXR0aW5nIHRvbCBhbmQvb3IgcmVsCisgICAgICAgICMgYXR0cmlidXRlcy4gU3ViY2xhc3NlcyBtYXkgc2V0IHRpZ2h0ZXIgb3IgbG9vc2VyIGVycm9yIHRvbGVyYW5jZXMuCisgICAgICAgIHJhdyA9IFsxLjAzLCAxLjI3LCAxLjk0LCAyLjA0LCAyLjU4LCAzLjE0LCA0Ljc1LCA0Ljk4LCA1LjQyLCA2Ljc4XQorICAgICAgICBleHBlY3RlZCA9IHNlbGYuZnVuYyhyYXcpCisgICAgICAgICMgRG9uJ3Qgc2V0IHNoaWZ0IHRvbyBoaWdoLCB0aGUgYmlnZ2VyIGl0IGlzLCB0aGUgbW9yZSByb3VuZGluZyBlcnJvci4KKyAgICAgICAgc2hpZnQgPSAxZTUKKyAgICAgICAgZGF0YSA9IFt4ICsgc2hpZnQgZm9yIHggaW4gcmF3XQorICAgICAgICBzZWxmLmFzc2VydEFwcHJveEVxdWFsKHNlbGYuZnVuYyhkYXRhKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zaGlmdF9kYXRhX2V4YWN0KHNlbGYpOgorICAgICAgICAjIExpa2UgdGVzdF9zaGlmdF9kYXRhLCBidXQgcmVzdWx0IGlzIGFsd2F5cyBleGFjdC4KKyAgICAgICAgcmF3ID0gWzEsIDMsIDMsIDQsIDUsIDcsIDksIDEwLCAxMSwgMTZdCisgICAgICAgIGFzc2VydCBhbGwoeD09aW50KHgpIGZvciB4IGluIHJhdykKKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMocmF3KQorICAgICAgICBzaGlmdCA9IDEwKio5CisgICAgICAgIGRhdGEgPSBbeCArIHNoaWZ0IGZvciB4IGluIHJhd10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfaXRlcl9saXN0X3NhbWUoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGl0ZXIgZGF0YSBhbmQgbGlzdCBkYXRhIGdpdmUgdGhlIHNhbWUgcmVzdWx0LgorCisgICAgICAgICMgVGhpcyBpcyBhbiBleHBsaWNpdCB0ZXN0IHRoYXQgaXRlcmF0b3JzIGFuZCBsaXN0cyBhcmUgdHJlYXRlZCB0aGUKKyAgICAgICAgIyBzYW1lOyBqdXN0aWZpY2F0aW9uIGZvciB0aGlzIHRlc3Qgb3ZlciBhbmQgYWJvdmUgdGhlIHNpbWlsYXIgdGVzdAorICAgICAgICAjIGluIFVuaXZhcmlhdGVDb21tb25NaXhpbiBpcyB0aGF0IGFuIGVhcmxpZXIgZGVzaWduIGhhZCB2YXJpYW5jZSBhbmQKKyAgICAgICAgIyBmcmllbmRzIHN3YXAgYmV0d2VlbiBvbmUtIGFuZCB0d28tcGFzcyBhbGdvcml0aG1zLCB3aGljaCB3b3VsZAorICAgICAgICAjIHNvbWV0aW1lcyBnaXZlIGRpZmZlcmVudCByZXN1bHRzLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0zLCA4KSBmb3IgXyBpbiByYW5nZSgxMDAwKV0KKyAgICAgICAgZXhwZWN0ZWQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoaXRlcihkYXRhKSksIGV4cGVjdGVkKQorCisKK2NsYXNzIFRlc3RQVmFyaWFuY2UoVmFyaWFuY2VTdGRldk1peGluLCBOdW1lcmljVGVzdENhc2UsIFVuaXZhcmlhdGVUeXBlTWl4aW4pOgorICAgICMgVGVzdHMgZm9yIHBvcHVsYXRpb24gdmFyaWFuY2UuCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmZ1bmMgPSBzdGF0aXN0aWNzLnB2YXJpYW5jZQorCisgICAgZGVmIHRlc3RfZXhhY3RfdW5pZm9ybShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoZSB2YXJpYW5jZSBhZ2FpbnN0IGFuIGV4YWN0IHJlc3VsdCBmb3IgdW5pZm9ybSBkYXRhLgorICAgICAgICBkYXRhID0gbGlzdChyYW5nZSgxMDAwMCkpCisgICAgICAgIHJhbmRvbS5zaHVmZmxlKGRhdGEpCisgICAgICAgIGV4cGVjdGVkID0gKDEwMDAwKioyIC0gMSkvMTIgICMgRXhhY3QgdmFsdWUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBwb3B1bGF0aW9uIHZhcmlhbmNlIHdpdGggaW50IGRhdGEuCisgICAgICAgIGRhdGEgPSBbNCwgNywgMTMsIDE2XQorICAgICAgICBleGFjdCA9IDIyLjUKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4YWN0KQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3QgcG9wdWxhdGlvbiB2YXJpYW5jZSB3aXRoIEZyYWN0aW9uIGRhdGEuCisgICAgICAgIEYgPSBGcmFjdGlvbgorICAgICAgICBkYXRhID0gW0YoMSwgNCksIEYoMSwgNCksIEYoMywgNCksIEYoNywgNCldCisgICAgICAgIGV4YWN0ID0gRigzLCA4KQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBGcmFjdGlvbikKKworICAgIGRlZiB0ZXN0X2RlY2ltYWxzKHNlbGYpOgorICAgICAgICAjIFRlc3QgcG9wdWxhdGlvbiB2YXJpYW5jZSB3aXRoIERlY2ltYWwgZGF0YS4KKyAgICAgICAgRCA9IERlY2ltYWwKKyAgICAgICAgZGF0YSA9IFtEKCIxMi4xIiksIEQoIjEyLjIiKSwgRCgiMTIuNSIpLCBEKCIxMi45IildCisgICAgICAgIGV4YWN0ID0gRCgnMC4wOTY4NzUnKQorICAgICAgICByZXN1bHQgPSBzZWxmLmZ1bmMoZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGV4YWN0KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBEZWNpbWFsKQorCisKK2NsYXNzIFRlc3RWYXJpYW5jZShWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSwgVW5pdmFyaWF0ZVR5cGVNaXhpbik6CisgICAgIyBUZXN0cyBmb3Igc2FtcGxlIHZhcmlhbmNlLgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc2VsZi5mdW5jID0gc3RhdGlzdGljcy52YXJpYW5jZQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX3ZhbHVlKHNlbGYpOgorICAgICAgICAjIE92ZXJyaWRlIG1ldGhvZCBmcm9tIFZhcmlhbmNlU3RkZXZNaXhpbi4KKyAgICAgICAgZm9yIHggaW4gKDM1LCAyNC43LCA4LjJlMTUsIEZyYWN0aW9uKDE5LCAzMCksIERlY2ltYWwoJzQuMjA4NCcpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHN0YXRpc3RpY3MuU3RhdGlzdGljc0Vycm9yLCBzZWxmLmZ1bmMsIFt4XSkKKworICAgIGRlZiB0ZXN0X2ludHMoc2VsZik6CisgICAgICAgICMgVGVzdCBzYW1wbGUgdmFyaWFuY2Ugd2l0aCBpbnQgZGF0YS4KKyAgICAgICAgZGF0YSA9IFs0LCA3LCAxMywgMTZdCisgICAgICAgIGV4YWN0ID0gMzAKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4YWN0KQorCisgICAgZGVmIHRlc3RfZnJhY3Rpb25zKHNlbGYpOgorICAgICAgICAjIFRlc3Qgc2FtcGxlIHZhcmlhbmNlIHdpdGggRnJhY3Rpb24gZGF0YS4KKyAgICAgICAgRiA9IEZyYWN0aW9uCisgICAgICAgIGRhdGEgPSBbRigxLCA0KSwgRigxLCA0KSwgRigzLCA0KSwgRig3LCA0KV0KKyAgICAgICAgZXhhY3QgPSBGKDEsIDIpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZnVuYyhkYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgZXhhY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIEZyYWN0aW9uKQorCisgICAgZGVmIHRlc3RfZGVjaW1hbHMoc2VsZik6CisgICAgICAgICMgVGVzdCBzYW1wbGUgdmFyaWFuY2Ugd2l0aCBEZWNpbWFsIGRhdGEuCisgICAgICAgIEQgPSBEZWNpbWFsCisgICAgICAgIGRhdGEgPSBbRCgyKSwgRCgyKSwgRCg3KSwgRCg5KV0KKyAgICAgICAgZXhhY3QgPSA0KkQoJzkuNScpL0QoMykKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5mdW5jKGRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleGFjdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHJlc3VsdCwgRGVjaW1hbCkKKworCitjbGFzcyBUZXN0UFN0ZGV2KFZhcmlhbmNlU3RkZXZNaXhpbiwgTnVtZXJpY1Rlc3RDYXNlKToKKyAgICAjIFRlc3RzIGZvciBwb3B1bGF0aW9uIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3MucHN0ZGV2CisKKyAgICBkZWYgdGVzdF9jb21wYXJlX3RvX3ZhcmlhbmNlKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBzdGRldiBpcywgaW4gZmFjdCwgdGhlIHNxdWFyZSByb290IG9mIHZhcmlhbmNlLgorICAgICAgICBkYXRhID0gW3JhbmRvbS51bmlmb3JtKC0xNywgMjQpIGZvciBfIGluIHJhbmdlKDEwMDApXQorICAgICAgICBleHBlY3RlZCA9IG1hdGguc3FydChzdGF0aXN0aWNzLnB2YXJpYW5jZShkYXRhKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZ1bmMoZGF0YSksIGV4cGVjdGVkKQorCisKK2NsYXNzIFRlc3RTdGRldihWYXJpYW5jZVN0ZGV2TWl4aW4sIE51bWVyaWNUZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBmb3Igc2FtcGxlIHN0YW5kYXJkIGRldmlhdGlvbi4KKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYuZnVuYyA9IHN0YXRpc3RpY3Muc3RkZXYKKworICAgIGRlZiB0ZXN0X3NpbmdsZV92YWx1ZShzZWxmKToKKyAgICAgICAgIyBPdmVycmlkZSBtZXRob2QgZnJvbSBWYXJpYW5jZVN0ZGV2TWl4aW4uCisgICAgICAgIGZvciB4IGluICg4MSwgMjAzLjc0LCAzLjllMTQsIEZyYWN0aW9uKDUsIDIxKSwgRGVjaW1hbCgnMzUuNzE5JykpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc3RhdGlzdGljcy5TdGF0aXN0aWNzRXJyb3IsIHNlbGYuZnVuYywgW3hdKQorCisgICAgZGVmIHRlc3RfY29tcGFyZV90b192YXJpYW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgc3RkZXYgaXMsIGluIGZhY3QsIHRoZSBzcXVhcmUgcm9vdCBvZiB2YXJpYW5jZS4KKyAgICAgICAgZGF0YSA9IFtyYW5kb20udW5pZm9ybSgtMiwgOSkgZm9yIF8gaW4gcmFuZ2UoMTAwMCldCisgICAgICAgIGV4cGVjdGVkID0gbWF0aC5zcXJ0KHN0YXRpc3RpY3MudmFyaWFuY2UoZGF0YSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mdW5jKGRhdGEpLCBleHBlY3RlZCkKKworCisjID09PSBSdW4gdGVzdHMgPT09CisKK2RlZiBsb2FkX3Rlc3RzKGxvYWRlciwgdGVzdHMsIGlnbm9yZSk6CisgICAgIiIiVXNlZCBmb3IgZG9jdGVzdC91bml0dGVzdCBpbnRlZ3JhdGlvbi4iIiIKKyAgICB0ZXN0cy5hZGRUZXN0cyhkb2N0ZXN0LkRvY1Rlc3RTdWl0ZSgpKQorICAgIHJldHVybiB0ZXN0cworCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJmdGltZS5weQppbmRleCA0ZjM5Y2M3Li43NzJjZDA2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmZ0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RyZnRpbWUucHkKQEAgLTE4MiwxNSArMTgyLDE1IEBACiAgICAgYSBkYXRlIGJlZm9yZSAxOTAwIGlzIHBhc3NlZCB3aXRoIGEgZm9ybWF0IHN0cmluZyBjb250YWluaW5nICIleSIKICAgICAiIiIKIAotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiT25seSBhcHBsaWVzIHRvIFdpbmRvd3MiKQotICAgIGRlZiB0ZXN0X3lfYmVmb3JlXzE5MDBfd2luKHNlbGYpOgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgotICAgICAgICAgICAgdGltZS5zdHJmdGltZSgiJXkiLCAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkpCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiLCAiRG9lc24ndCBhcHBseSBvbiBXaW5kb3dzIikKLSAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwX25vbndpbihzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKLSAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDE4OTksIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjk5IikKKyAgICBkZWYgdGVzdF95X2JlZm9yZV8xOTAwKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxMzY3NCwgIzE5NjM0CisgICAgICAgIHQgPSAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkKKyAgICAgICAgaWYgKHN5cy5wbGF0Zm9ybSA9PSAid2luMzIiCisgICAgICAgIG9yIHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCgiYWl4IiwgInN1bm9zIiwgInNvbGFyaXMiKSkpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgICAgICB0aW1lLnN0cmZ0aW1lKCIleSIsIHQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRpbWUuc3RyZnRpbWUoIiV5IiwgdCksICI5OSIpCiAKICAgICBkZWYgdGVzdF95XzE5MDAoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCkBAIC0yMDAsOCArMjAwLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKICAgICAgICAgICAgIHRpbWUuc3RyZnRpbWUoIiV5IiwgKDIwMTMsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDApKSwgIjEzIikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cmZ0aW1lVGVzdCwgWTE5MDBUZXN0cykKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQppbmRleCBjMmJkZmRiLi41Nzk2M2JmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmluZy5weQpAQCAtMzEsNiArMzEsMzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJmb28iKSwgImZvbyIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiZm9vezB9IiwgImJhciIpLCAiZm9vYmFyIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCJmb297MX17MH0tezF9IiwgImJhciIsIDYpLCAiZm9vNmJhci02IikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBmbXQuZm9ybWF0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHN0cmluZy5Gb3JtYXR0ZXIuZm9ybWF0KQorCisgICAgZGVmIHRlc3RfZm9ybWF0X2tleXdvcmRfYXJndW1lbnRzKHNlbGYpOgorICAgICAgICBmbXQgPSBzdHJpbmcuRm9ybWF0dGVyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbXQuZm9ybWF0KCIte2FyZ30tIiwgYXJnPSd0ZXN0JyksICctdGVzdC0nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhLZXlFcnJvciwgZm10LmZvcm1hdCwgIi17YXJnfS0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoIi17c2VsZn0tIiwgc2VsZj0ndGVzdCcpLCAnLXRlc3QtJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoS2V5RXJyb3IsIGZtdC5mb3JtYXQsICIte3NlbGZ9LSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgiLXtmb3JtYXRfc3RyaW5nfS0iLCBmb3JtYXRfc3RyaW5nPSd0ZXN0JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJy10ZXN0LScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCBmbXQuZm9ybWF0LCAiLXtmb3JtYXRfc3RyaW5nfS0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoYXJnPSd0ZXN0JywgZm9ybWF0X3N0cmluZz0iLXthcmd9LSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICctdGVzdC0nKQorCisgICAgZGVmIHRlc3RfYXV0b19udW1iZXJpbmcoc2VsZik6CisgICAgICAgIGZtdCA9IHN0cmluZy5Gb3JtYXR0ZXIoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoJ2Zvb3t9e30nLCAnYmFyJywgNiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2Zvb3t9e30nLmZvcm1hdCgnYmFyJywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgnZm9vezF9e251bX17MX0nLCBOb25lLCAnYmFyJywgbnVtPTYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdmb297MX17bnVtfXsxfScuZm9ybWF0KE5vbmUsICdiYXInLCBudW09NikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgnezpee319JywgJ2JhcicsIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICd7Ol57fX0nLmZvcm1hdCgnYmFyJywgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm10LmZvcm1hdCgnezpee319IHt9JywgJ2JhcicsIDYsICdYJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6Xnt9fSB7fScuZm9ybWF0KCdiYXInLCA2LCAnWCcpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZtdC5mb3JtYXQoJ3s6XntwYWR9fXt9JywgJ2ZvbycsICdiYXInLCBwYWQ9NiksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3s6XntwYWR9fXt9Jy5mb3JtYXQoJ2ZvbycsICdiYXInLCBwYWQ9NikpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGZtdC5mb3JtYXQoJ2Zvb3sxfXt9JywgJ2JhcicsIDYpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGZtdC5mb3JtYXQoJ2Zvb3t9ezF9JywgJ2JhcicsIDYpCiAKICAgICBkZWYgdGVzdF9jb252ZXJzaW9uX3NwZWNpZmllcnMoc2VsZik6CiAgICAgICAgIGZtdCA9IHN0cmluZy5Gb3JtYXR0ZXIoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJpbmdwcmVwLnB5CmluZGV4IGFhNzEyMjEuLmU3NjM2MzUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RyaW5ncHJlcC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cmluZ3ByZXAucHkKQEAgLTEsNSArMSw1IEBACiAjIFRvIGZ1bGx5IHRlc3QgdGhpcyBtb2R1bGUsIHdlIHdvdWxkIG5lZWQgYSBjb3B5IG9mIHRoZSBzdHJpbmdwcmVwIHRhYmxlcy4KLSMgU2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGVtLCB0aGlzIHRlc3QgY2hlY2tzIG9ubHkgYSBmZXcgY29kZXBvaW50cy4KKyMgU2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGVtLCB0aGlzIHRlc3QgY2hlY2tzIG9ubHkgYSBmZXcgY29kZSBwb2ludHMuCiAKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJwdGltZS5weQppbmRleCAxM2E3MmQ0Li5jMWRkMTk1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnB0aW1lLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RycHRpbWUucHkKQEAgLTQsNiArNCw3IEBACiBpbXBvcnQgdGltZQogaW1wb3J0IGxvY2FsZQogaW1wb3J0IHJlCitpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZSBhcyBkYXRldGltZV9kYXRlCkBAIC0zMjQsOSArMzI1LDEwIEBACiAgICAgICAgIHR6X25hbWUgPSB0aW1lLnR6bmFtZVswXQogICAgICAgICBpZiB0el9uYW1lLnVwcGVyKCkgaW4gKCJVVEMiLCAiR01UIik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCduZWVkIG5vbi1VVEMvR01UIHRpbWV6b25lJykKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3JpZ2luYWxfdHpuYW1lID0gdGltZS50em5hbWUKLSAgICAgICAgICAgIG9yaWdpbmFsX2RheWxpZ2h0ID0gdGltZS5kYXlsaWdodAorCisgICAgICAgIHdpdGggc3VwcG9ydC5zd2FwX2F0dHIodGltZSwgJ3R6bmFtZScsICh0el9uYW1lLCB0el9uYW1lKSksIFwKKyAgICAgICAgICAgICBzdXBwb3J0LnN3YXBfYXR0cih0aW1lLCAnZGF5bGlnaHQnLCAxKSwgXAorICAgICAgICAgICAgIHN1cHBvcnQuc3dhcF9hdHRyKHRpbWUsICd0enNldCcsIGxhbWJkYTogTm9uZSk6CiAgICAgICAgICAgICB0aW1lLnR6bmFtZSA9ICh0el9uYW1lLCB0el9uYW1lKQogICAgICAgICAgICAgdGltZS5kYXlsaWdodCA9IDEKICAgICAgICAgICAgIHR6X3ZhbHVlID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHR6X25hbWUsICIlWiIpWzhdCkBAIC0zMzQsOSArMzM2LDYgQEAKICAgICAgICAgICAgICAgICAgICAgIiVzIGxlYWQgdG8gYSB0aW1lem9uZSB2YWx1ZSBvZiAlcyBpbnN0ZWFkIG9mIC0xIHdoZW4gIgogICAgICAgICAgICAgICAgICAgICAidGltZS5kYXlsaWdodCBzZXQgdG8gJXMgYW5kIHBhc3NpbmcgaW4gJXMiICUKICAgICAgICAgICAgICAgICAgICAgKHRpbWUudHpuYW1lLCB0el92YWx1ZSwgdGltZS5kYXlsaWdodCwgdHpfbmFtZSkpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICB0aW1lLnR6bmFtZSA9IG9yaWdpbmFsX3R6bmFtZQotICAgICAgICAgICAgdGltZS5kYXlsaWdodCA9IG9yaWdpbmFsX2RheWxpZ2h0CiAKICAgICBkZWYgdGVzdF9kYXRlX3RpbWUoc2VsZik6CiAgICAgICAgICMgVGVzdCAlYyBkaXJlY3RpdmUKQEAgLTQ5NCw2ICs0OTMsMjQgQEAKICAgICAgICAgdGVzdF9oZWxwZXIoKDIwMDYsIDEyLCAzMSksICJMYXN0IFN1bmRheSBvZiAyMDA2IikKICAgICAgICAgdGVzdF9oZWxwZXIoKDIwMDYsIDEyLCAyNCksICJTZWNvbmQgdG8gbGFzdCBTdW5kYXkgb2YgMjAwNiIpCiAKKyAgICBkZWYgdGVzdF93ZWVrXzAoc2VsZik6CisgICAgICAgIGRlZiBjaGVjayh2YWx1ZSwgZm9ybWF0LCAqZXhwZWN0ZWQpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUodmFsdWUsIGZvcm1hdClbOi0xXSwgZXhwZWN0ZWQpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMCcsICclWSAlVSAldycsIDIwMTQsIDEyLCAyOCwgMCwgMCwgMCwgNiwgLTMpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMCcsICclWSAlVyAldycsIDIwMTUsIDEsIDQsIDAsIDAsIDAsIDYsIDQpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMScsICclWSAlVSAldycsIDIwMTQsIDEyLCAyOSwgMCwgMCwgMCwgMCwgLTIpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMScsICclWSAlVyAldycsIDIwMTQsIDEyLCAyOSwgMCwgMCwgMCwgMCwgLTIpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMicsICclWSAlVSAldycsIDIwMTQsIDEyLCAzMCwgMCwgMCwgMCwgMSwgLTEpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMicsICclWSAlVyAldycsIDIwMTQsIDEyLCAzMCwgMCwgMCwgMCwgMSwgLTEpCisgICAgICAgIGNoZWNrKCcyMDE1IDAgMycsICclWSAlVSAldycsIDIwMTQsIDEyLCAzMSwgMCwgMCwgMCwgMiwgMCkKKyAgICAgICAgY2hlY2soJzIwMTUgMCAzJywgJyVZICVXICV3JywgMjAxNCwgMTIsIDMxLCAwLCAwLCAwLCAyLCAwKQorICAgICAgICBjaGVjaygnMjAxNSAwIDQnLCAnJVkgJVUgJXcnLCAyMDE1LCAxLCAxLCAwLCAwLCAwLCAzLCAxKQorICAgICAgICBjaGVjaygnMjAxNSAwIDQnLCAnJVkgJVcgJXcnLCAyMDE1LCAxLCAxLCAwLCAwLCAwLCAzLCAxKQorICAgICAgICBjaGVjaygnMjAxNSAwIDUnLCAnJVkgJVUgJXcnLCAyMDE1LCAxLCAyLCAwLCAwLCAwLCA0LCAyKQorICAgICAgICBjaGVjaygnMjAxNSAwIDUnLCAnJVkgJVcgJXcnLCAyMDE1LCAxLCAyLCAwLCAwLCAwLCA0LCAyKQorICAgICAgICBjaGVjaygnMjAxNSAwIDYnLCAnJVkgJVUgJXcnLCAyMDE1LCAxLCAzLCAwLCAwLCAwLCA1LCAzKQorICAgICAgICBjaGVjaygnMjAxNSAwIDYnLCAnJVkgJVcgJXcnLCAyMDE1LCAxLCAzLCAwLCAwLCAwLCA1LCAzKQorCiAKIGNsYXNzIENhY2hlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgdGhhdCBjYWNoaW5nIHdvcmtzIHByb3Blcmx5LiIiIgpAQCAtNTMwLDcgKzU0Nyw3IEBACiAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSgiMTAiLCAiJWQiKQogICAgICAgICBzZWxmLmFzc2VydElzTm90KGxvY2FsZV90aW1lX2lkLCBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZS5sb2NhbGVfdGltZSkKIAotICAgIGRlZiB0ZXN0X1RpbWVSRV9yZWNyZWF0aW9uKHNlbGYpOgorICAgIGRlZiB0ZXN0X1RpbWVSRV9yZWNyZWF0aW9uX2xvY2FsZShzZWxmKToKICAgICAgICAgIyBUaGUgVGltZVJFIGluc3RhbmNlIHNob3VsZCBiZSByZWNyZWF0ZWQgdXBvbiBjaGFuZ2luZyB0aGUgbG9jYWxlLgogICAgICAgICBsb2NhbGVfaW5mbyA9IGxvY2FsZS5nZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUpCiAgICAgICAgIHRyeToKQEAgLTU1OSw2ICs1NzYsMzMgQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGxvY2FsZS5zZXRsb2NhbGUobG9jYWxlLkxDX1RJTUUsIGxvY2FsZV9pbmZvKQogCisgICAgQHN1cHBvcnQucnVuX3dpdGhfdHooJ1NURC0xRFNUJykKKyAgICBkZWYgdGVzdF9UaW1lUkVfcmVjcmVhdGlvbl90aW1lem9uZShzZWxmKToKKyAgICAgICAgIyBUaGUgVGltZVJFIGluc3RhbmNlIHNob3VsZCBiZSByZWNyZWF0ZWQgdXBvbiBjaGFuZ2luZyB0aGUgdGltZXpvbmUuCisgICAgICAgIG9sZHR6bmFtZSA9IHRpbWUudHpuYW1lCisgICAgICAgIHRtID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUudHpuYW1lWzBdLCAnJVonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRtLnRtX2lzZHN0LCAwKQorICAgICAgICB0bSA9IF9zdHJwdGltZS5fc3RycHRpbWVfdGltZSh0aW1lLnR6bmFtZVsxXSwgJyVaJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0bS50bV9pc2RzdCwgMSkKKyAgICAgICAgIyBHZXQgaWQgb2YgY3VycmVudCBjYWNoZSBvYmplY3QuCisgICAgICAgIGZpcnN0X3RpbWVfcmUgPSBfc3RycHRpbWUuX1RpbWVSRV9jYWNoZQorICAgICAgICAjIENoYW5nZSB0aGUgdGltZXpvbmUgYW5kIGZvcmNlIGEgcmVjcmVhdGlvbiBvZiB0aGUgY2FjaGUuCisgICAgICAgIG9zLmVudmlyb25bJ1RaJ10gPSAnRVNUKzA1RURULE0zLjIuMCxNMTEuMS4wJworICAgICAgICB0aW1lLnR6c2V0KCkKKyAgICAgICAgdG0gPSBfc3RycHRpbWUuX3N0cnB0aW1lX3RpbWUodGltZS50em5hbWVbMF0sICclWicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG0udG1faXNkc3QsIDApCisgICAgICAgIHRtID0gX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKHRpbWUudHpuYW1lWzFdLCAnJVonKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRtLnRtX2lzZHN0LCAxKQorICAgICAgICAjIEdldCB0aGUgbmV3IGNhY2hlIG9iamVjdCdzIGlkLgorICAgICAgICBzZWNvbmRfdGltZV9yZSA9IF9zdHJwdGltZS5fVGltZVJFX2NhY2hlCisgICAgICAgICMgVGhleSBzaG91bGQgbm90IGJlIGVxdWFsLgorICAgICAgICBzZWxmLmFzc2VydElzTm90KGZpcnN0X3RpbWVfcmUsIHNlY29uZF90aW1lX3JlKQorICAgICAgICAjIE1ha2Ugc3VyZSBvbGQgbmFtZXMgbm8gbG9uZ2VyIGFjY2VwdGVkLgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgX3N0cnB0aW1lLl9zdHJwdGltZV90aW1lKG9sZHR6bmFtZVswXSwgJyVaJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIF9zdHJwdGltZS5fc3RycHRpbWVfdGltZShvbGR0em5hbWVbMV0sICclWicpCisKIAogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ0b2QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQppbmRleCBjNTk3OWZjLi40MWI2ZTVmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnRvZC5weQpAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJleHBlY3RlZCBWYWx1ZUVycm9yIgogCi0gICAgQHRlc3Quc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9dGVzdC5zdXBwb3J0Ll8yRysxMCwgbWVtdXNlPTQsIGRyeV9ydW49RmFsc2UpCisgICAgQHRlc3Quc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9dGVzdC5zdXBwb3J0Ll8yRysxMCwgbWVtdXNlPTMsIGRyeV9ydW49RmFsc2UpCiAgICAgZGVmIHRlc3Rfb3ZlcnNpemVkX2RpZ2l0X3N0cmluZ3Moc2VsZiwgbWF4c2l6ZSk6CiAgICAgICAgICMgSW5wdXQgc3RyaW5nIHdob3NlIGxlbmd0aCBkb2Vzbid0IGZpdCBpbiBhbiBJTlQuCiAgICAgICAgIHMgPSAiMS4iICsgIjEiICogbWF4c2l6ZQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3QucHkgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQppbmRleCA1MGNhZTA1Li4wMTA3ZWViIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N0cnVjdC5weQpAQCAtMSw0ICsxLDYgQEAKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IGFiYwogaW1wb3J0IGFycmF5CitpbXBvcnQgb3BlcmF0b3IKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHN5cwpAQCAtNiw3ICs4LDYgQEAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBJU0JJR0VORElBTiA9IHN5cy5ieXRlb3JkZXIgPT0gImJpZyIKLUlTMzJCSVQgPSBzeXMubWF4c2l6ZSA9PSAweDdmZmZmZmZmCiAKIGludGVnZXJfY29kZXMgPSAnYicsICdCJywgJ2gnLCAnSCcsICdpJywgJ0knLCAnbCcsICdMJywgJ3EnLCAnUScsICduJywgJ04nCiBieXRlb3JkZXJzID0gJycsICdAJywgJz0nLCAnPCcsICc+JywgJyEnCkBAIC00ODksNyArNDkwLDcgQEAKICAgICBkZWYgdGVzdF9ib29sKHNlbGYpOgogICAgICAgICBjbGFzcyBFeHBsb2RpbmdCb29sKG9iamVjdCk6CiAgICAgICAgICAgICBkZWYgX19ib29sX18oc2VsZik6Ci0gICAgICAgICAgICAgICAgcmFpc2UgSU9FcnJvcgorICAgICAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IKICAgICAgICAgZm9yIHByZWZpeCBpbiB0dXBsZSgiPD4hPSIpKygnJywpOgogICAgICAgICAgICAgZmFsc2UgPSAoKSwgW10sIFtdLCAnJywgMAogICAgICAgICAgICAgdHJ1ZSA9IFsxXSwgJ3Rlc3QnLCA1LCAtMSwgMHhmZmZmZmZmZisxLCAweGZmZmZmZmZmLzIKQEAgLTUyMCwxMCArNTIxLDEwIEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdHJ1Y3QucGFjayhwcmVmaXggKyAnPycsIEV4cGxvZGluZ0Jvb2woKSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIElPRXJyb3I6IHN0cnVjdC5wYWNrKCVyLCAiCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBPU0Vycm9yOiBzdHJ1Y3QucGFjayglciwgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwbG9kaW5nQm9vbCgpKSIgJSAocHJlZml4ICsgJz8nKSkKIAogICAgICAgICBmb3IgYyBpbiBbYidceDAxJywgYidceDdmJywgYidceGZmJywgYidceDBmJywgYidceGYwJ106CkBAIC01MzYsMTAgKzUzNyw2IEBACiAgICAgICAgIGh1Z2Vjb3VudDIgPSAne31ie31IJy5mb3JtYXQoc3lzLm1heHNpemUvLzIsIHN5cy5tYXhzaXplLy8yKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IsIHN0cnVjdC5jYWxjc2l6ZSwgaHVnZWNvdW50MikKIAotICAgIGlmIElTMzJCSVQ6Ci0gICAgICAgIGRlZiB0ZXN0X2NyYXNoZXIoc2VsZik6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhNZW1vcnlFcnJvciwgc3RydWN0LnBhY2ssICIzNTc5MTM5NDFiIiwgImEiKQotCiAgICAgZGVmIHRlc3RfdHJhaWxpbmdfY291bnRlcihzZWxmKToKICAgICAgICAgc3RvcmUgPSBhcnJheS5hcnJheSgnYicsIGInICcqMTAwKQogCkBAIC01NzYsNyArNTczLDcgQEAKICAgICAgICAgIyBUaGUgc2l6ZSBvZiAnUHlTdHJ1Y3RPYmplY3QnCiAgICAgICAgIHRvdGFsc2l6ZSA9IHN1cHBvcnQuY2FsY29ianNpemUoJzJuM1AnKQogICAgICAgICAjIFRoZSBzaXplIHRha2VuIHVwIGJ5IHRoZSAnZm9ybWF0Y29kZScgZHluYW1pYyBhcnJheQotICAgICAgICB0b3RhbHNpemUgKz0gc3RydWN0LmNhbGNzaXplKCdQMm4wUCcpICogKG51bWJlcl9vZl9jb2RlcyArIDEpCisgICAgICAgIHRvdGFsc2l6ZSArPSBzdHJ1Y3QuY2FsY3NpemUoJ1AzbjBQJykgKiAobnVtYmVyX29mX2NvZGVzICsgMSkKICAgICAgICAgc3VwcG9ydC5jaGVja19zaXplb2Yoc2VsZiwgc3RydWN0LlN0cnVjdChmb3JtYXRfc3RyKSwgdG90YWxzaXplKQogCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CkBAIC01ODcsMTQgKzU4NCw4NCBAQAogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignQicgKiAxMjM0LCAxMjM0KQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignZmQnLCAyKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZigneHh4eHh4eHh4eHh4eHgnLCAwKQotICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTAwSCcsIDEwMCkKKyAgICAgICAgc2VsZi5jaGVja19zaXplb2YoJzEwMEgnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMTg3cycsIDEpCiAgICAgICAgIHNlbGYuY2hlY2tfc2l6ZW9mKCcyMHAnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMHMnLCAxKQogICAgICAgICBzZWxmLmNoZWNrX3NpemVvZignMGMnLCAwKQogCisKK2NsYXNzIFVucGFja0l0ZXJhdG9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIiIiCisgICAgVGVzdHMgZm9yIGl0ZXJhdGl2ZSB1bnBhY2tpbmcgKHN0cnVjdC5TdHJ1Y3QuaXRlcl91bnBhY2spLgorICAgICIiIgorCisgICAgZGVmIHRlc3RfY29uc3RydWN0KHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrX2l0ZXJhdG9yKGl0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdCwgYWJjLkl0ZXJhdG9yKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0LCBhYmMuSXRlcmFibGUpCisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+aWJjcCcpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhiIiIpCisgICAgICAgIF9jaGVja19pdGVyYXRvcihpdCkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIiMTIzNDU2NyIpCisgICAgICAgIF9jaGVja19pdGVyYXRvcihpdCkKKyAgICAgICAgIyBXcm9uZyBieXRlcyBsZW5ndGgKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIjEyMzQ1NiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIxMjM0NTY3OCIpCisgICAgICAgICMgWmVyby1sZW5ndGggc3RydWN0CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+JykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdHJ1Y3QuZXJyb3IpOgorICAgICAgICAgICAgcy5pdGVyX3VucGFjayhiIiIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc3RydWN0LmVycm9yKToKKyAgICAgICAgICAgIHMuaXRlcl91bnBhY2soYiIxMiIpCisKKyAgICBkZWYgdGVzdF9pdGVyYXRlKHNlbGYpOgorICAgICAgICBzID0gc3RydWN0LlN0cnVjdCgnPklCJykKKyAgICAgICAgYiA9IGJ5dGVzKHJhbmdlKDEsIDE2KSkKKyAgICAgICAgaXQgPSBzLml0ZXJfdW5wYWNrKGIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDAxMDIwMzA0LCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDYwNzA4MDksIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MGIwYzBkMGUsIDE1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorCisgICAgZGVmIHRlc3RfYXJiaXRyYXJ5X2J1ZmZlcihzZWxmKToKKyAgICAgICAgcyA9IHN0cnVjdC5TdHJ1Y3QoJz5JQicpCisgICAgICAgIGIgPSBieXRlcyhyYW5nZSgxLCAxMSkpCisgICAgICAgIGl0ID0gcy5pdGVyX3VucGFjayhtZW1vcnl2aWV3KGIpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwMTAyMDMwNCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobmV4dChpdCksICgweDA2MDcwODA5LCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKworICAgIGRlZiB0ZXN0X2xlbmd0aF9oaW50KHNlbGYpOgorICAgICAgICBsaCA9IG9wZXJhdG9yLmxlbmd0aF9oaW50CisgICAgICAgIHMgPSBzdHJ1Y3QuU3RydWN0KCc+SUInKQorICAgICAgICBiID0gYnl0ZXMocmFuZ2UoMSwgMTYpKQorICAgICAgICBpdCA9IHMuaXRlcl91bnBhY2soYikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDMpCisgICAgICAgIG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGgoaXQpLCAyKQorICAgICAgICBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMSkKKyAgICAgICAgbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaChpdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN0b3BJdGVyYXRpb24sIG5leHQsIGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxoKGl0KSwgMCkKKworICAgIGRlZiB0ZXN0X21vZHVsZV9mdW5jKHNlbGYpOgorICAgICAgICAjIFNhbml0eSBjaGVjayBmb3IgdGhlIGdsb2JhbCBzdHJ1Y3QuaXRlcl91bnBhY2soKQorICAgICAgICBpdCA9IHN0cnVjdC5pdGVyX3VucGFjaygnPklCJywgYnl0ZXMocmFuZ2UoMSwgMTEpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChuZXh0KGl0KSwgKDB4MDEwMjAzMDQsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5leHQoaXQpLCAoMHgwNjA3MDgwOSwgMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uLCBuZXh0LCBpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3RvcEl0ZXJhdGlvbiwgbmV4dCwgaXQpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFN0cnVjdFRlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoX19uYW1lX18pCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdGVzdF9tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5IGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKaW5kZXggYTg5ZTk1NS4uMzUzZDBlYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdHJ1Y3RzZXEucHkKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgIyBvcy5zdGF0KCkgZ2l2ZXMgYSBjb21wbGljYXRlZCBzdHJ1Y3Qgc2VxdWVuY2UuCiAgICAgICAgIHN0ID0gb3Muc3RhdChfX2ZpbGVfXykKICAgICAgICAgcmVwID0gcmVwcihzdCkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlcC5zdGFydHN3aXRoKG9zLm5hbWUgKyAiLnN0YXRfcmVzdWx0IikpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXAuc3RhcnRzd2l0aCgib3Muc3RhdF9yZXN1bHQiKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbigic3RfbW9kZT0iLCByZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2lubz0iLCByZXApCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oInN0X2Rldj0iLCByZXApCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkgYi9MaWIvdGVzdC90ZXN0X3N1YnByb2Nlc3MucHkKaW5kZXggZjVhNzBhMy4uNDcxOWNjMCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdWJwcm9jZXNzLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VicHJvY2Vzcy5weQpAQCAtMTEsNiArMTEsNyBAQAogaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGltZQogaW1wb3J0IHJlCitpbXBvcnQgc2VsZWN0b3JzCiBpbXBvcnQgc3lzY29uZmlnCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBzZWxlY3QKQEAgLTE5LDEwICsyMCw2IEBACiBpbXBvcnQgdGV4dHdyYXAKIAogdHJ5OgotICAgIGltcG9ydCByZXNvdXJjZQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIHJlc291cmNlID0gTm9uZQotdHJ5OgogICAgIGltcG9ydCB0aHJlYWRpbmcKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICB0aHJlYWRpbmcgPSBOb25lCkBAIC00MCwxNiArMzcsNiBAQAogICAgIFNFVEJJTkFSWSA9ICcnCiAKIAotdHJ5OgotICAgIG1rc3RlbXAgPSB0ZW1wZmlsZS5ta3N0ZW1wCi1leGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgIyB0ZW1wZmlsZS5ta3N0ZW1wIGlzIG5vdCBhdmFpbGFibGUKLSAgICBkZWYgbWtzdGVtcCgpOgotICAgICAgICAiIiJSZXBsYWNlbWVudCBmb3IgbWtzdGVtcCwgY2FsbGluZyBta3RlbXAuIiIiCi0gICAgICAgIGZuYW1lID0gdGVtcGZpbGUubWt0ZW1wKCkKLSAgICAgICAgcmV0dXJuIG9zLm9wZW4oZm5hbWUsIG9zLk9fUkRXUnxvcy5PX0NSRUFUKSwgZm5hbWUKLQotCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIyBUcnkgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB3ZSBoYXZlIHNvIHRoaXMgdGVzdApAQCAtMTYyLDggKzE0OSwyOCBAQAogICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ0JERkwnLCBvdXRwdXQpCiAKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkaW5fYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGNhbiBiZSBjYWxsZWQgd2l0aCBzdGRpbiBzZXQgdG8gYSBmaWxlCisgICAgICAgIHRmID0gdGVtcGZpbGUuVGVtcG9yYXJ5RmlsZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh0Zi5jbG9zZSkKKyAgICAgICAgdGYud3JpdGUoYidwZWFyJykKKyAgICAgICAgdGYuc2VlaygwKQorICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3Rkb3V0LndyaXRlKHN5cy5zdGRpbi5yZWFkKCkudXBwZXIoKSkiXSwKKyAgICAgICAgICAgICAgICBzdGRpbj10ZikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BFQVInLCBvdXRwdXQpCisKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfaW5wdXRfYXJnKHNlbGYpOgorICAgICAgICAjIGNoZWNrX291dHB1dCgpIGNhbiBiZSBjYWxsZWQgd2l0aCBpbnB1dCBzZXQgdG8gYSBzdHJpbmcKKyAgICAgICAgb3V0cHV0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCisgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLAorICAgICAgICAgICAgICAgICAiaW1wb3J0IHN5czsgc3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZCgpLnVwcGVyKCkpIl0sCisgICAgICAgICAgICAgICAgaW5wdXQ9YidwZWFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BFQVInLCBvdXRwdXQpCisKICAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3Rkb3V0X2FyZyhzZWxmKToKLSAgICAgICAgIyBjaGVja19vdXRwdXQoKSBmdW5jdGlvbiBzdGRlcnIgcmVkaXJlY3RlZCB0byBzdGRvdXQKKyAgICAgICAgIyBjaGVja19vdXRwdXQoKSByZWZ1c2VzIHRvIGFjY2VwdCAnc3Rkb3V0JyBhcmd1bWVudAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICBvdXRwdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAicHJpbnQoJ3dpbGwgbm90IGJlIHJ1bicpIl0sCkBAIC0xNzEsNiArMTc4LDIwIEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igd2hlbiBzdGRvdXQgYXJnIHN1cHBsaWVkLiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ3N0ZG91dCcsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCiAKKyAgICBkZWYgdGVzdF9jaGVja19vdXRwdXRfc3RkaW5fd2l0aF9pbnB1dF9hcmcoc2VsZik6CisgICAgICAgICMgY2hlY2tfb3V0cHV0KCkgcmVmdXNlcyB0byBhY2NlcHQgJ3N0ZGluJyB3aXRoICdpbnB1dCcKKyAgICAgICAgdGYgPSB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKCkKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRmLmNsb3NlKQorICAgICAgICB0Zi53cml0ZShiJ3BlYXInKQorICAgICAgICB0Zi5zZWVrKDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcikgYXMgYzoKKyAgICAgICAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsICJwcmludCgnd2lsbCBub3QgYmUgcnVuJykiXSwKKyAgICAgICAgICAgICAgICAgICAgc3RkaW49dGYsIGlucHV0PWInaGFyZScpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igd2hlbiBzdGRpbiBhbmQgaW5wdXQgYXJncyBzdXBwbGllZC4iKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzdGRpbicsIGMuZXhjZXB0aW9uLmFyZ3NbMF0pCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJ2lucHV0JywgYy5leGNlcHRpb24uYXJnc1swXSkKKwogICAgIGRlZiB0ZXN0X2NoZWNrX291dHB1dF90aW1lb3V0KHNlbGYpOgogICAgICAgICAjIGNoZWNrX291dHB1dCgpIGZ1bmN0aW9uIHdpdGggdGltZW91dCBhcmcKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzdWJwcm9jZXNzLlRpbWVvdXRFeHBpcmVkKSBhcyBjOgpAQCAtMjg2LDExICszMDcsOCBAQAogICAgICAgICAjIE5vcm1hbGl6ZSBhbiBleHBlY3RlZCBjd2QgKGZvciBUcnU2NCBzdXBwb3J0KS4KICAgICAgICAgIyBXZSBjYW4ndCB1c2Ugb3MucGF0aC5yZWFscGF0aCBzaW5jZSBpdCBkb2Vzbid0IGV4cGFuZCBUcnU2NCB7bWVtYn0KICAgICAgICAgIyBzdHJpbmdzLiAgU2VlIGJ1ZyAjMTA2MzU3MS4KLSAgICAgICAgb3JpZ2luYWxfY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIoY3dkKQotICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICBvcy5jaGRpcihvcmlnaW5hbF9jd2QpCi0gICAgICAgIHJldHVybiBjd2QKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNoYW5nZV9jd2QoY3dkKToKKyAgICAgICAgICAgIHJldHVybiBvcy5nZXRjd2QoKQogCiAgICAgIyBGb3IgdXNlIGluIHRoZSB0ZXN0X2N3ZCogdGVzdHMgYmVsb3cuCiAgICAgZGVmIF9zcGxpdF9weXRob25fcGF0aChzZWxmKToKQEAgLTc1NSw2ICs3NzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml2ZXJzYWxfbmV3bGluZXM9MSkKICAgICAgICAgcC5zdGRpbi53cml0ZSgibGluZTFcbiIpCisgICAgICAgIHAuc3RkaW4uZmx1c2goKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuc3Rkb3V0LnJlYWRsaW5lKCksICJsaW5lMVxuIikKICAgICAgICAgcC5zdGRpbi53cml0ZSgibGluZTNcbiIpCiAgICAgICAgIHAuc3RkaW4uY2xvc2UoKQpAQCAtODUzLDggKzg3Miw5IEBACiAgICAgICAgICMKICAgICAgICAgIyBVVEYtMTYgYW5kIFVURi0zMi1CRSBhcmUgc3VmZmljaWVudCB0byBjaGVjayBib3RoIHdpdGggQk9NIGFuZAogICAgICAgICAjIHdpdGhvdXQsIGFuZCBVVEYtMTYgYW5kIFVURi0zMi4KKyAgICAgICAgaW1wb3J0IF9ib290bG9jYWxlCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiBbJ3V0Zi0xNicsICd1dGYtMzItYmUnXToKLSAgICAgICAgICAgIG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZworICAgICAgICAgICAgb2xkX2dldHByZWZlcnJlZGVuY29kaW5nID0gX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcKICAgICAgICAgICAgICMgSW5kaXJlY3RseSB2aWEgaW8uVGV4dElPV3JhcHBlciwgUG9wZW4oKSBkZWZhdWx0cyB0bwogICAgICAgICAgICAgIyBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoRmFsc2UpIGFuZCBlYXJsaWVyIGluIFB5dGhvbiAzLjIgdG8KICAgICAgICAgICAgICMgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nKCkuCkBAIC04NjUsNyArODg1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcpCiAgICAgICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCAnLWMnLCBjb2RlXQogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IGdldHByZWZlcnJlZGVuY29kaW5nCisgICAgICAgICAgICAgICAgX2Jvb3Rsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBnZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgICAgICMgV2Ugc2V0IHN0ZGluIHRvIGJlIG5vbi1Ob25lIGJlY2F1c2UsIGFzIG9mIHRoaXMgd3JpdGluZywKICAgICAgICAgICAgICAgICAjIGEgZGlmZmVyZW50IGNvZGUgcGF0aCBpcyB1c2VkIHdoZW4gdGhlIG51bWJlciBvZiBwaXBlcyBpcwogICAgICAgICAgICAgICAgICMgemVybyBvciBvbmUuCkBAIC04NzQsNyArODk0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKICAgICAgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHBvcGVuLmNvbW11bmljYXRlKGlucHV0PScnKQogICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgPSBvbGRfZ2V0cHJlZmVycmVkZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBfYm9vdGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyA9IG9sZF9nZXRwcmVmZXJyZWRlbmNvZGluZwogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsICcxXG4yXG4zXG40JykKIAogICAgIGRlZiB0ZXN0X25vX2xlYWtpbmcoc2VsZik6CkBAIC05NzUsNiArOTk1LDM5IEBACiAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInBhc3MiXSwgYnVmc2l6ZT1Ob25lKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAud2FpdCgpLCAwKQogCisgICAgZGVmIF90ZXN0X2J1ZnNpemVfZXF1YWxfb25lKHNlbGYsIGxpbmUsIGV4cGVjdGVkLCB1bml2ZXJzYWxfbmV3bGluZXMpOgorICAgICAgICAjIHN1YnByb2Nlc3MgbWF5IGRlYWRsb2NrIHdpdGggYnVmc2l6ZT0xLCBzZWUgaXNzdWUgIzIxMzMyCisgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICJpbXBvcnQgc3lzOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLnN0ZG91dC53cml0ZShzeXMuc3RkaW4ucmVhZGxpbmUoKSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzeXMuc3Rkb3V0LmZsdXNoKCkiXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5ERVZOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmc2l6ZT0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pdmVyc2FsX25ld2xpbmVzPXVuaXZlcnNhbF9uZXdsaW5lcykgYXMgcDoKKyAgICAgICAgICAgIHAuc3RkaW4ud3JpdGUobGluZSkgIyBleHBlY3QgdGhhdCBpdCBmbHVzaGVzIHRoZSBsaW5lIGluIHRleHQgbW9kZQorICAgICAgICAgICAgb3MuY2xvc2UocC5zdGRpbi5maWxlbm8oKSkgIyBjbG9zZSBpdCB3aXRob3V0IGZsdXNoaW5nIHRoZSBidWZmZXIKKyAgICAgICAgICAgIHJlYWRfbGluZSA9IHAuc3Rkb3V0LnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBwLnN0ZGluLmNsb3NlKCkKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIHAuc3RkaW4gPSBOb25lCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5yZXR1cm5jb2RlLCAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlYWRfbGluZSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9idWZzaXplX2VxdWFsX29uZV90ZXh0X21vZGUoc2VsZik6CisgICAgICAgICMgbGluZSBpcyBmbHVzaGVkIGluIHRleHQgbW9kZSB3aXRoIGJ1ZnNpemU9MS4KKyAgICAgICAgIyB3ZSBzaG91bGQgZ2V0IHRoZSBmdWxsIGxpbmUgaW4gcmV0dXJuCisgICAgICAgIGxpbmUgPSAibGluZVxuIgorICAgICAgICBzZWxmLl90ZXN0X2J1ZnNpemVfZXF1YWxfb25lKGxpbmUsIGxpbmUsIHVuaXZlcnNhbF9uZXdsaW5lcz1UcnVlKQorCisgICAgZGVmIHRlc3RfYnVmc2l6ZV9lcXVhbF9vbmVfYmluYXJ5X21vZGUoc2VsZik6CisgICAgICAgICMgbGluZSBpcyBub3QgZmx1c2hlZCBpbiBiaW5hcnkgbW9kZSB3aXRoIGJ1ZnNpemU9MS4KKyAgICAgICAgIyB3ZSBzaG91bGQgZ2V0IGVtcHR5IHJlc3BvbnNlCisgICAgICAgIGxpbmUgPSBiJ2xpbmUnICsgb3MubGluZXNlcC5lbmNvZGUoKSAjIGFzc3VtZSBhc2NpaS1iYXNlZCBsb2NhbGUKKyAgICAgICAgc2VsZi5fdGVzdF9idWZzaXplX2VxdWFsX29uZShsaW5lLCBiJycsIHVuaXZlcnNhbF9uZXdsaW5lcz1GYWxzZSkKKwogICAgIGRlZiB0ZXN0X2xlYWtpbmdfZmRzX29uX2Vycm9yKHNlbGYpOgogICAgICAgICAjIHNlZSBidWcgIzUxNzk6IFBvcGVuIGxlYWtzIGZpbGUgZGVzY3JpcHRvcnMgdG8gUElQRXMgaWYKICAgICAgICAgIyB0aGUgY2hpbGQgZmFpbHMgdG8gZXhlY3V0ZTsgdGhpcyB3aWxsIGV2ZW50dWFsbHkgZXhoYXVzdApAQCAtOTgyLDggKzEwMzUsNyBAQAogICAgICAgICAjIHZhbHVlIGZvciB0aGF0IGxpbWl0LCBidXQgV2luZG93cyBoYXMgMjA0OCwgc28gd2UgbG9vcAogICAgICAgICAjIDEwMjQgdGltZXMgKGVhY2ggY2FsbCBsZWFrZWQgdHdvIGZkcykuCiAgICAgICAgIGZvciBpIGluIHJhbmdlKDEwMjQpOgotICAgICAgICAgICAgIyBXaW5kb3dzIHJhaXNlcyBJT0Vycm9yLiAgT3RoZXJzIHJhaXNlIE9TRXJyb3IuCi0gICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVudmlyb25tZW50RXJyb3IpIGFzIGM6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbihbJ25vbmV4aXN0aW5nX2lfaG9wZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCkBAIC0xMDIxLDYgKzEwNzMsNTkgQEAKICAgICAgICAgICAgIGlmIGV4YyBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICByYWlzZSBleGMKIAorICAgIEB1bml0dGVzdC5za2lwSWYodGhyZWFkaW5nIGlzIE5vbmUsICJ0aHJlYWRpbmcgcmVxdWlyZWQiKQorICAgIGRlZiB0ZXN0X3RocmVhZHNhZmVfd2FpdChzZWxmKToKKyAgICAgICAgIiIiSXNzdWUyMTI5MTogUG9wZW4ud2FpdCgpIG5lZWRzIHRvIGJlIHRocmVhZHNhZmUgZm9yIHJldHVybmNvZGUuIiIiCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgdGltZTsgdGltZS5zbGVlcCgxMiknXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jLnJldHVybmNvZGUsIE5vbmUpCisgICAgICAgIHJlc3VsdHMgPSBbXQorCisgICAgICAgIGRlZiBraWxsX3Byb2NfdGltZXJfdGhyZWFkKCk6CisgICAgICAgICAgICByZXN1bHRzLmFwcGVuZCgoJ3RocmVhZC1zdGFydC1wb2xsLXJlc3VsdCcsIHByb2MucG9sbCgpKSkKKyAgICAgICAgICAgICMgdGVybWluYXRlIGl0IGZyb20gdGhlIHRocmVhZCBhbmQgd2FpdCBmb3IgdGhlIHJlc3VsdC4KKyAgICAgICAgICAgIHByb2Mua2lsbCgpCisgICAgICAgICAgICBwcm9jLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKCd0aHJlYWQtYWZ0ZXIta2lsbC1hbmQtd2FpdCcsIHByb2MucmV0dXJuY29kZSkpCisgICAgICAgICAgICAjIHRoaXMgd2FpdCBzaG91bGQgYmUgYSBuby1vcCBnaXZlbiB0aGUgYWJvdmUuCisgICAgICAgICAgICBwcm9jLndhaXQoKQorICAgICAgICAgICAgcmVzdWx0cy5hcHBlbmQoKCd0aHJlYWQtYWZ0ZXItc2Vjb25kLXdhaXQnLCBwcm9jLnJldHVybmNvZGUpKQorCisgICAgICAgICMgVGhpcyBpcyBhIHRpbWluZyBzZW5zaXRpdmUgdGVzdCwgdGhlIGZhaWx1cmUgbW9kZSBpcworICAgICAgICAjIHRyaWdnZXJlZCB3aGVuIGJvdGggdGhlIG1haW4gdGhyZWFkIGFuZCB0aGlzIHRocmVhZCBhcmUgaW4KKyAgICAgICAgIyB0aGUgd2FpdCgpIGNhbGwgYXQgb25jZS4gIFRoZSBkZWxheSBoZXJlIGlzIHRvIGFsbG93IHRoZQorICAgICAgICAjIG1haW4gdGhyZWFkIHRvIG1vc3QgbGlrZWx5IGJlIGJsb2NrZWQgaW4gaXRzIHdhaXQoKSBjYWxsLgorICAgICAgICB0ID0gdGhyZWFkaW5nLlRpbWVyKDAuMiwga2lsbF9wcm9jX3RpbWVyX3RocmVhZCkKKyAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgaWYgbXN3aW5kb3dzOgorICAgICAgICAgICAgZXhwZWN0ZWRfZXJyb3Jjb2RlID0gMQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBTaG91bGQgYmUgLTkgYmVjYXVzZSBvZiB0aGUgcHJvYy5raWxsKCkgZnJvbSB0aGUgdGhyZWFkLgorICAgICAgICAgICAgZXhwZWN0ZWRfZXJyb3Jjb2RlID0gLTkKKworICAgICAgICAjIFdhaXQgZm9yIHRoZSBwcm9jZXNzIHRvIGZpbmlzaDsgdGhlIHRocmVhZCBzaG91bGQga2lsbCBpdAorICAgICAgICAjIGxvbmcgYmVmb3JlIGl0IGZpbmlzaGVzIG9uIGl0cyBvd24uICBTdXBwbHlpbmcgYSB0aW1lb3V0CisgICAgICAgICMgdHJpZ2dlcnMgYSBkaWZmZXJlbnQgY29kZSBwYXRoIGZvciBiZXR0ZXIgY292ZXJhZ2UuCisgICAgICAgIHByb2Mud2FpdCh0aW1lb3V0PTIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2MucmV0dXJuY29kZSwgZXhwZWN0ZWRfZXJyb3Jjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0idW5leHBlY3RlZCByZXN1bHQgaW4gd2FpdCBmcm9tIG1haW4gdGhyZWFkIikKKworICAgICAgICAjIFRoaXMgc2hvdWxkIGJlIGEgbm8tb3Agd2l0aCBubyBjaGFuZ2UgaW4gcmV0dXJuY29kZS4KKyAgICAgICAgcHJvYy53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwcm9jLnJldHVybmNvZGUsIGV4cGVjdGVkX2Vycm9yY29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9InVuZXhwZWN0ZWQgcmVzdWx0IGluIHNlY29uZCBtYWluIHdhaXQuIikKKworICAgICAgICB0LmpvaW4oKQorICAgICAgICAjIEVuc3VyZSB0aGF0IGFsbCBvZiB0aGUgdGhyZWFkIHJlc3VsdHMgYXJlIGFzIGV4cGVjdGVkLgorICAgICAgICAjIFdoZW4gYSByYWNlIGNvbmRpdGlvbiBvY2N1cnMgaW4gd2FpdCgpLCB0aGUgcmV0dXJuY29kZSBjb3VsZAorICAgICAgICAjIGJlIHNldCBieSB0aGUgd3JvbmcgdGhyZWFkIHRoYXQgZG9lc24ndCBhY3R1YWxseSBoYXZlIGl0CisgICAgICAgICMgbGVhZGluZyB0byBhbiBpbmNvcnJlY3QgdmFsdWUuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWygndGhyZWFkLXN0YXJ0LXBvbGwtcmVzdWx0JywgTm9uZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICgndGhyZWFkLWFmdGVyLWtpbGwtYW5kLXdhaXQnLCBleHBlY3RlZF9lcnJvcmNvZGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAoJ3RocmVhZC1hZnRlci1zZWNvbmQtd2FpdCcsIGV4cGVjdGVkX2Vycm9yY29kZSldLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMpCisKICAgICBkZWYgdGVzdF9pc3N1ZTg3ODAoc2VsZik6CiAgICAgICAgICMgRW5zdXJlIHRoYXQgc3Rkb3V0IGlzIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQKICAgICAgICAgIyBpZiBzdGRvdXQ9UElQRSBpcyBub3QgdXNlZApAQCAtMTAzNSw5ICsxMTQwLDkgQEAKICAgICBkZWYgdGVzdF9oYW5kbGVzX2Nsb3NlZF9vbl9leGNlcHRpb24oc2VsZik6CiAgICAgICAgICMgSWYgQ3JlYXRlUHJvY2VzcyBleGl0cyB3aXRoIGFuIGVycm9yLCBlbnN1cmUgdGhlCiAgICAgICAgICMgZHVwbGljYXRlIG91dHB1dCBoYW5kbGVzIGFyZSByZWxlYXNlZAotICAgICAgICBpZmhhbmRsZSwgaWZuYW1lID0gbWtzdGVtcCgpCi0gICAgICAgIG9maGFuZGxlLCBvZm5hbWUgPSBta3N0ZW1wKCkKLSAgICAgICAgZWZoYW5kbGUsIGVmbmFtZSA9IG1rc3RlbXAoKQorICAgICAgICBpZmhhbmRsZSwgaWZuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCisgICAgICAgIG9maGFuZGxlLCBvZm5hbWUgPSB0ZW1wZmlsZS5ta3N0ZW1wKCkKKyAgICAgICAgZWZoYW5kbGUsIGVmbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzdWJwcm9jZXNzLlBvcGVuIChbIioiXSwgc3RkaW49aWZoYW5kbGUsIHN0ZG91dD1vZmhhbmRsZSwKICAgICAgICAgICAgICAgc3RkZXJyPWVmaGFuZGxlKQpAQCAtMTExNCw0NyArMTIxOSw2IEBACiAgICAgICAgIGZkc19hZnRlcl9leGNlcHRpb24gPSBvcy5saXN0ZGlyKGZkX2RpcmVjdG9yeSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmZHNfYmVmb3JlX3BvcGVuLCBmZHNfYWZ0ZXJfZXhjZXB0aW9uKQogCi0KLSMgY29udGV4dCBtYW5hZ2VyCi1jbGFzcyBfU3VwcHJlc3NDb3JlRmlsZXMob2JqZWN0KToKLSAgICAiIiJUcnkgdG8gcHJldmVudCBjb3JlIGZpbGVzIGZyb20gYmVpbmcgY3JlYXRlZC4iIiIKLSAgICBvbGRfbGltaXQgPSBOb25lCi0KLSAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgotICAgICAgICAiIiJUcnkgdG8gc2F2ZSBwcmV2aW91cyB1bGltaXQsIHRoZW4gc2V0IGl0IHRvICgwLCAwKS4iIiIKLSAgICAgICAgaWYgcmVzb3VyY2UgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgc2VsZi5vbGRfbGltaXQgPSByZXNvdXJjZS5nZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX0NPUkUpCi0gICAgICAgICAgICAgICAgcmVzb3VyY2Uuc2V0cmxpbWl0KHJlc291cmNlLlJMSU1JVF9DT1JFLCAoMCwgMCkpCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgIyBDaGVjayBpZiB0aGUgJ0NyYXNoIFJlcG9ydGVyJyBvbiBPU1ggd2FzIGNvbmZpZ3VyZWQKLSAgICAgICAgICAgICMgaW4gJ0RldmVsb3BlcicgbW9kZSBhbmQgd2FybiB0aGF0IGl0IHdpbGwgZ2V0IHRyaWdnZXJlZAotICAgICAgICAgICAgIyB3aGVuIGl0IGlzLgotICAgICAgICAgICAgIwotICAgICAgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGlzIGNvbnRleHQgbWFuYWdlciBpcyB1c2VkIGluIHRlc3RzCi0gICAgICAgICAgICAjIHRoYXQgbWlnaHQgdHJpZ2dlciB0aGUgbmV4dCBtYW5hZ2VyLgotICAgICAgICAgICAgdmFsdWUgPSBzdWJwcm9jZXNzLlBvcGVuKFsnL3Vzci9iaW4vZGVmYXVsdHMnLCAncmVhZCcsCi0gICAgICAgICAgICAgICAgICAgICdjb20uYXBwbGUuQ3Jhc2hSZXBvcnRlcicsICdEaWFsb2dUeXBlJ10sCi0gICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpLmNvbW11bmljYXRlKClbMF0KLSAgICAgICAgICAgIGlmIHZhbHVlLnN0cmlwKCkgPT0gYidkZXZlbG9wZXInOgotICAgICAgICAgICAgICAgIHByaW50KCJ0aGlzIHRlc3RzIHRyaWdnZXJzIHRoZSBDcmFzaCBSZXBvcnRlciwgIgotICAgICAgICAgICAgICAgICAgICAgICJ0aGF0IGlzIGludGVudGlvbmFsIiwgZW5kPScnKQotICAgICAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotCi0gICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKLSAgICAgICAgIiIiUmV0dXJuIGNvcmUgZmlsZSBiZWhhdmlvciB0byBkZWZhdWx0LiIiIgotICAgICAgICBpZiBzZWxmLm9sZF9saW1pdCBpcyBOb25lOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGlmIHJlc291cmNlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfQ09SRSwgc2VsZi5vbGRfbGltaXQpCi0gICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIHJlc291cmNlLmVycm9yKToKLSAgICAgICAgICAgICAgICBwYXNzCi0KLQogQHVuaXR0ZXN0LnNraXBJZihtc3dpbmRvd3MsICJQT1NJWCBzcGVjaWZpYyB0ZXN0cyIpCiBjbGFzcyBQT1NJWFByb2Nlc3NUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgogCkBAIC0xMjQzLDcgKzEzMDcsNyBAQAogCiAgICAgZGVmIHRlc3RfcnVuX2Fib3J0KHNlbGYpOgogICAgICAgICAjIHJldHVybmNvZGUgaGFuZGxlcyBzaWduYWwgdGVybWluYXRpb24KLSAgICAgICAgd2l0aCBfU3VwcHJlc3NDb3JlRmlsZXMoKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IG9zOyBvcy5hYm9ydCgpJ10pCiAgICAgICAgICAgICBwLndhaXQoKQpAQCAtMTI2Niw3ICsxMzMwLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPXJhaXNlX2l0KQotICAgICAgICBleGNlcHQgUnVudGltZUVycm9yIGFzIGU6CisgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvciBhcyBlOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKAogICAgICAgICAgICAgICAgICAgICBzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MsCiAgICAgICAgICAgICAgICAgICAgICJFeHBlY3RlZCBhIFZhbHVlRXJyb3IgZnJvbSB0aGUgcHJlZXhlY19mbiIpCkBAIC0xMzA2LDkgKzEzNzAsMTAgQEAKICAgICAgICAgIiIiSXNzdWUxNjE0MDogRG9uJ3QgZG91YmxlIGNsb3NlIHBpcGVzIG9uIHByZWV4ZWMgZXJyb3IuIiIiCiAKICAgICAgICAgZGVmIHJhaXNlX2l0KCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImZvcmNlIHRoZSBfZXhlY3V0ZV9jaGlsZCgpIGVycnBpcGVfZGF0YSBwYXRoLiIpCisgICAgICAgICAgICByYWlzZSBzdWJwcm9jZXNzLlN1YnByb2Nlc3NFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgImZvcmNlIHRoZSBfZXhlY3V0ZV9jaGlsZCgpIGVycnBpcGVfZGF0YSBwYXRoLiIpCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHN1YnByb2Nlc3MuU3VicHJvY2Vzc0Vycm9yKToKICAgICAgICAgICAgIHNlbGYuX1Rlc3RFeGVjdXRlQ2hpbGRQb3BlbigKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgInBhc3MiXSwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGluPXN1YnByb2Nlc3MuUElQRSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKQEAgLTEzNTEsOSArMTQxNiwyNyBAQAogICAgICAgICAgICAgaWYgbm90IGVuYWJsZWQ6CiAgICAgICAgICAgICAgICAgZ2MuZGlzYWJsZSgpCiAKKyAgICBAdW5pdHRlc3Quc2tpcElmKAorICAgICAgICBzeXMucGxhdGZvcm0gPT0gJ2RhcndpbicsICdzZXRybGltaXQoKSBzZWVtcyB0byBmYWlsIG9uIE9TIFgnKQorICAgIGRlZiB0ZXN0X3ByZWV4ZWNfZm9ya19mYWlsdXJlKHNlbGYpOgorICAgICAgICAjIFRoZSBpbnRlcm5hbCBjb2RlIGRpZCBub3QgcHJlc2VydmUgdGhlIHByZXZpb3VzIGV4Y2VwdGlvbiB3aGVuCisgICAgICAgICMgcmUtZW5hYmxpbmcgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZyb20gcmVzb3VyY2UgaW1wb3J0IGdldHJsaW1pdCwgc2V0cmxpbWl0LCBSTElNSVRfTlBST0MKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yIGFzIGVycjoKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoZXJyKSAgIyBSTElNSVRfTlBST0MgaXMgc3BlY2lmaWMgdG8gTGludXggYW5kIEJTRAorICAgICAgICBsaW1pdHMgPSBnZXRybGltaXQoUkxJTUlUX05QUk9DKQorICAgICAgICBbXywgaGFyZF0gPSBsaW1pdHMKKyAgICAgICAgc2V0cmxpbWl0KFJMSU1JVF9OUFJPQywgKDAsIGhhcmQpKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc2V0cmxpbWl0LCBSTElNSVRfTlBST0MsIGxpbWl0cykKKyAgICAgICAgIyBGb3JraW5nIHNob3VsZCByYWlzZSBFQUdBSU4sIHRyYW5zbGF0ZWQgdG8gQmxvY2tpbmdJT0Vycm9yCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQmxvY2tpbmdJT0Vycm9yKToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2FsbChbc3lzLmV4ZWN1dGFibGUsICctYycsICcnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPWxhbWJkYTogTm9uZSkKKwogICAgIGRlZiB0ZXN0X2FyZ3Nfc3RyaW5nKHNlbGYpOgogICAgICAgICAjIGFyZ3MgaXMgYSBzdHJpbmcKLSAgICAgICAgZmQsIGZuYW1lID0gbWtzdGVtcCgpCisgICAgICAgIGZkLCBmbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoKQogICAgICAgICAjIHJlb3BlbiBpbiB0ZXh0IG1vZGUKICAgICAgICAgd2l0aCBvcGVuKGZkLCAidyIsIGVycm9ycz0ic3Vycm9nYXRlZXNjYXBlIikgYXMgZm9iajoKICAgICAgICAgICAgIGZvYmoud3JpdGUoIiMhL2Jpbi9zaFxuIikKQEAgLTEzOTgsNyArMTQ4MSw3IEBACiAKICAgICBkZWYgdGVzdF9jYWxsX3N0cmluZyhzZWxmKToKICAgICAgICAgIyBjYWxsKCkgZnVuY3Rpb24gd2l0aCBzdHJpbmcgYXJndW1lbnQgb24gVU5JWAotICAgICAgICBmZCwgZm5hbWUgPSBta3N0ZW1wKCkKKyAgICAgICAgZmQsIGZuYW1lID0gdGVtcGZpbGUubWtzdGVtcCgpCiAgICAgICAgICMgcmVvcGVuIGluIHRleHQgbW9kZQogICAgICAgICB3aXRoIG9wZW4oZmQsICJ3IiwgZXJyb3JzPSJzdXJyb2dhdGVlc2NhcGUiKSBhcyBmb2JqOgogICAgICAgICAgICAgZm9iai53cml0ZSgiIyEvYmluL3NoXG4iKQpAQCAtMTUwNywxNiArMTU5MCwyOCBAQAogICAgICAgICAjIFRlcm1pbmF0aW5nIGEgZGVhZCBwcm9jZXNzCiAgICAgICAgIHNlbGYuX2tpbGxfZGVhZF9wcm9jZXNzKCd0ZXJtaW5hdGUnKQogCisgICAgZGVmIF9zYXZlX2ZkcyhzZWxmLCBzYXZlX2Zkcyk6CisgICAgICAgIGZkcyA9IFtdCisgICAgICAgIGZvciBmZCBpbiBzYXZlX2ZkczoKKyAgICAgICAgICAgIGluaGVyaXRhYmxlID0gb3MuZ2V0X2luaGVyaXRhYmxlKGZkKQorICAgICAgICAgICAgc2F2ZWQgPSBvcy5kdXAoZmQpCisgICAgICAgICAgICBmZHMuYXBwZW5kKChmZCwgc2F2ZWQsIGluaGVyaXRhYmxlKSkKKyAgICAgICAgcmV0dXJuIGZkcworCisgICAgZGVmIF9yZXN0b3JlX2ZkcyhzZWxmLCBmZHMpOgorICAgICAgICBmb3IgZmQsIHNhdmVkLCBpbmhlcml0YWJsZSBpbiBmZHM6CisgICAgICAgICAgICBvcy5kdXAyKHNhdmVkLCBmZCwgaW5oZXJpdGFibGU9aW5oZXJpdGFibGUpCisgICAgICAgICAgICBvcy5jbG9zZShzYXZlZCkKKwogICAgIGRlZiBjaGVja19jbG9zZV9zdGRfZmRzKHNlbGYsIGZkcyk6CiAgICAgICAgICMgSXNzdWUgIzk5MDU6IHRlc3QgdGhhdCBzdWJwcm9jZXNzIHBpcGVzIHN0aWxsIHdvcmsgcHJvcGVybHkgd2l0aAogICAgICAgICAjIHNvbWUgc3RhbmRhcmQgZmRzIGNsb3NlZAogICAgICAgICBzdGRpbiA9IDAKLSAgICAgICAgbmV3ZmRzID0gW10KLSAgICAgICAgZm9yIGEgaW4gZmRzOgotICAgICAgICAgICAgYiA9IG9zLmR1cChhKQotICAgICAgICAgICAgbmV3ZmRzLmFwcGVuZChiKQotICAgICAgICAgICAgaWYgYSA9PSAwOgotICAgICAgICAgICAgICAgIHN0ZGluID0gYgorICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhmZHMpCisgICAgICAgIGZvciBmZCwgc2F2ZWQsIGluaGVyaXRhYmxlIGluIHNhdmVkX2ZkczoKKyAgICAgICAgICAgIGlmIGZkID09IDA6CisgICAgICAgICAgICAgICAgc3RkaW4gPSBzYXZlZAorICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGZvciBmZCBpbiBmZHM6CiAgICAgICAgICAgICAgICAgb3MuY2xvc2UoZmQpCkBAIC0xNTMxLDEwICsxNjI2LDcgQEAKICAgICAgICAgICAgIGVyciA9IHN1cHBvcnQuc3RyaXBfcHl0aG9uX3N0ZGVycihlcnIpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChvdXQsIGVyciksIChiJ2FwcGxlJywgYidvcmFuZ2UnKSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZvciBiLCBhIGluIHppcChuZXdmZHMsIGZkcyk6Ci0gICAgICAgICAgICAgICAgb3MuZHVwMihiLCBhKQotICAgICAgICAgICAgZm9yIGIgaW4gbmV3ZmRzOgotICAgICAgICAgICAgICAgIG9zLmNsb3NlKGIpCisgICAgICAgICAgICBzZWxmLl9yZXN0b3JlX2ZkcyhzYXZlZF9mZHMpCiAKICAgICBkZWYgdGVzdF9jbG9zZV9mZF8wKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2Nsb3NlX3N0ZF9mZHMoWzBdKQpAQCAtMTU4Miw3ICsxNjc0LDcgQEAKIAogICAgIGRlZiB0ZXN0X3JlbWFwcGluZ19zdGRfZmRzKHNlbGYpOgogICAgICAgICAjIG9wZW4gdXAgc29tZSB0ZW1wb3JhcnkgZmlsZXMKLSAgICAgICAgdGVtcHMgPSBbbWtzdGVtcCgpIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICB0ZW1wcyA9IFt0ZW1wZmlsZS5ta3N0ZW1wKCkgZm9yIGkgaW4gcmFuZ2UoMyldCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlbXBfZmRzID0gW2ZkIGZvciBmZCwgZm5hbWUgaW4gdGVtcHNdCiAKQEAgLTE1OTUsNyArMTY4Nyw3IEBACiAgICAgICAgICAgICBvcy5sc2Vlayh0ZW1wX2Zkc1sxXSwgMCwgMCkKIAogICAgICAgICAgICAgIyBtb3ZlIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzIG91dCBvZiB0aGUgd2F5Ci0gICAgICAgICAgICBzYXZlZF9mZHMgPSBbb3MuZHVwKGZkKSBmb3IgZmQgaW4gcmFuZ2UoMyldCisgICAgICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhyYW5nZSgzKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgZmlsZSBvYmplY3RzIG92ZXIgdGhlIHN0YW5kYXJkIGZkJ3MKICAgICAgICAgICAgICAgICBmb3IgZmQsIHRlbXBfZmQgaW4gZW51bWVyYXRlKHRlbXBfZmRzKToKQEAgLTE2MTEsMTAgKzE3MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICBzdGRlcnI9dGVtcF9mZHNbMF0pCiAgICAgICAgICAgICAgICAgcC53YWl0KCkKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgIyByZXN0b3JlIHRoZSBvcmlnaW5hbCBmZCdzIHVuZGVybmVhdGggc3lzLnN0ZGluLCBldGMuCi0gICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgICAgICAgICBmb3IgZmQgaW4gdGVtcF9mZHM6CiAgICAgICAgICAgICAgICAgb3MubHNlZWsoZmQsIDAsIDApCkBAIC0xNjMwLDcgKzE3MTksNyBAQAogCiAgICAgZGVmIGNoZWNrX3N3YXBfZmRzKHNlbGYsIHN0ZGluX25vLCBzdGRvdXRfbm8sIHN0ZGVycl9ubyk6CiAgICAgICAgICMgb3BlbiB1cCBzb21lIHRlbXBvcmFyeSBmaWxlcwotICAgICAgICB0ZW1wcyA9IFtta3N0ZW1wKCkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIHRlbXBzID0gW3RlbXBmaWxlLm1rc3RlbXAoKSBmb3IgaSBpbiByYW5nZSgzKV0KICAgICAgICAgdGVtcF9mZHMgPSBbZmQgZm9yIGZkLCBmbmFtZSBpbiB0ZW1wc10KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyB1bmxpbmsgdGhlIGZpbGVzIC0tIHdlIHdvbid0IG5lZWQgdG8gcmVvcGVuIHRoZW0KQEAgLTE2MzgsNyArMTcyNyw3IEBACiAgICAgICAgICAgICAgICAgb3MudW5saW5rKGZuYW1lKQogCiAgICAgICAgICAgICAjIHNhdmUgYSBjb3B5IG9mIHRoZSBzdGFuZGFyZCBmaWxlIGRlc2NyaXB0b3JzCi0gICAgICAgICAgICBzYXZlZF9mZHMgPSBbb3MuZHVwKGZkKSBmb3IgZmQgaW4gcmFuZ2UoMyldCisgICAgICAgICAgICBzYXZlZF9mZHMgPSBzZWxmLl9zYXZlX2ZkcyhyYW5nZSgzKSkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAjIGR1cGxpY2F0ZSB0aGUgdGVtcCBmaWxlcyBvdmVyIHRoZSBzdGFuZGFyZCBmZCdzIDAsIDEsIDIKICAgICAgICAgICAgICAgICBmb3IgZmQsIHRlbXBfZmQgaW4gZW51bWVyYXRlKHRlbXBfZmRzKToKQEAgLTE2NjQsOSArMTc1Myw3IEBACiAgICAgICAgICAgICAgICAgb3V0ID0gb3MucmVhZChzdGRvdXRfbm8sIDEwMjQpCiAgICAgICAgICAgICAgICAgZXJyID0gc3VwcG9ydC5zdHJpcF9weXRob25fc3RkZXJyKG9zLnJlYWQoc3RkZXJyX25vLCAxMDI0KSkKICAgICAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICAgICAgZm9yIHN0ZCwgc2F2ZWQgaW4gZW51bWVyYXRlKHNhdmVkX2Zkcyk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLmR1cDIoc2F2ZWQsIHN0ZCkKLSAgICAgICAgICAgICAgICAgICAgb3MuY2xvc2Uoc2F2ZWQpCisgICAgICAgICAgICAgICAgc2VsZi5fcmVzdG9yZV9mZHMoc2F2ZWRfZmRzKQogCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYiJnb3QgU1RESU4iKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiZXJyIikKQEAgLTE2OTgsNDAgKzE3ODUsNDcgQEAKICAgICAgICAgICAgICMgUHVyZSBQeXRob24gaW1wbGVtZW50YXRpb25zIGtlZXBzIHRoZSBtZXNzYWdlCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZShzdWJwcm9jZXNzLl9wb3NpeHN1YnByb2Nlc3MpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlcnIpLCAic3Vycm9nYXRlOlx1RENmZiIpCi0gICAgICAgIGV4Y2VwdCBSdW50aW1lRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgIyBfcG9zaXhzdWJwcm9jZXNzIHVzZXMgYSBkZWZhdWx0IG1lc3NhZ2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHN1YnByb2Nlc3MuX3Bvc2l4c3VicHJvY2VzcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGVyciksICJFeGNlcHRpb24gb2NjdXJyZWQgaW4gcHJlZXhlY19mbi4iKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgc2VsZi5mYWlsKCJFeHBlY3RlZCBWYWx1ZUVycm9yIG9yIFJ1bnRpbWVFcnJvciIpCisgICAgICAgICAgICBzZWxmLmZhaWwoIkV4cGVjdGVkIFZhbHVlRXJyb3Igb3Igc3VicHJvY2Vzcy5TdWJwcm9jZXNzRXJyb3IiKQogCiAgICAgZGVmIHRlc3RfdW5kZWNvZGFibGVfZW52KHNlbGYpOgogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiAoKCd0ZXN0JywgJ2FiY1x1RENGRicpLCAoJ3Rlc3RcdURDRkYnLCAnNDInKSk6CisgICAgICAgICAgICBlbmNvZGVkX3ZhbHVlID0gdmFsdWUuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQorCiAgICAgICAgICAgICAjIHRlc3Qgc3RyIHdpdGggc3Vycm9nYXRlcwogICAgICAgICAgICAgc2NyaXB0ID0gImltcG9ydCBvczsgcHJpbnQoYXNjaWkob3MuZ2V0ZW52KCVzKSkpIiAlIHJlcHIoa2V5KQogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKICAgICAgICAgICAgIGVudltrZXldID0gdmFsdWUKLSAgICAgICAgICAgICMgVXNlIEMgbG9jYWxlIHRvIGdldCBhc2NpaSBmb3IgdGhlIGxvY2FsZSBlbmNvZGluZyB0byBmb3JjZQorICAgICAgICAgICAgIyBVc2UgQyBsb2NhbGUgdG8gZ2V0IEFTQ0lJIGZvciB0aGUgbG9jYWxlIGVuY29kaW5nIHRvIGZvcmNlCiAgICAgICAgICAgICAjIHN1cnJvZ2F0ZS1lc2NhcGluZyBvZiBceEZGIGluIHRoZSBjaGlsZCBwcm9jZXNzOyBvdGhlcndpc2UgaXQgY2FuCiAgICAgICAgICAgICAjIGJlIGRlY29kZWQgYXMtaXMgaWYgdGhlIGRlZmF1bHQgbG9jYWxlIGlzIGxhdGluLTEuCiAgICAgICAgICAgICBlbnZbJ0xDX0FMTCddID0gJ0MnCisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiYWl4Iik6CisgICAgICAgICAgICAgICAgIyBPbiBBSVgsIHRoZSBDIGxvY2FsZSB1c2VzIHRoZSBMYXRpbjEgZW5jb2RpbmcKKyAgICAgICAgICAgICAgICBkZWNvZGVkX3ZhbHVlID0gZW5jb2RlZF92YWx1ZS5kZWNvZGUoImxhdGluMSIsICJzdXJyb2dhdGVlc2NhcGUiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIE9uIG90aGVyIFVOSVhlcywgdGhlIEMgbG9jYWxlIHVzZXMgdGhlIEFTQ0lJIGVuY29kaW5nCisgICAgICAgICAgICAgICAgZGVjb2RlZF92YWx1ZSA9IHZhbHVlCiAgICAgICAgICAgICBzdGRvdXQgPSBzdWJwcm9jZXNzLmNoZWNrX291dHB1dCgKICAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICItYyIsIHNjcmlwdF0sCiAgICAgICAgICAgICAgICAgZW52PWVudikKICAgICAgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoYidcblxyJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkodmFsdWUpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQuZGVjb2RlKCdhc2NpaScpLCBhc2NpaShkZWNvZGVkX3ZhbHVlKSkKIAogICAgICAgICAgICAgIyB0ZXN0IGJ5dGVzCiAgICAgICAgICAgICBrZXkgPSBrZXkuZW5jb2RlKCJhc2NpaSIsICJzdXJyb2dhdGVlc2NhcGUiKQotICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5lbmNvZGUoImFzY2lpIiwgInN1cnJvZ2F0ZWVzY2FwZSIpCiAgICAgICAgICAgICBzY3JpcHQgPSAiaW1wb3J0IG9zOyBwcmludChhc2NpaShvcy5nZXRlbnZiKCVzKSkpIiAlIHJlcHIoa2V5KQogICAgICAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKLSAgICAgICAgICAgIGVudltrZXldID0gdmFsdWUKKyAgICAgICAgICAgIGVudltrZXldID0gZW5jb2RlZF92YWx1ZQogICAgICAgICAgICAgc3Rkb3V0ID0gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoCiAgICAgICAgICAgICAgICAgW3N5cy5leGVjdXRhYmxlLCAiLWMiLCBzY3JpcHRdLAogICAgICAgICAgICAgICAgIGVudj1lbnYpCiAgICAgICAgICAgICBzdGRvdXQgPSBzdGRvdXQucnN0cmlwKGInXG5ccicpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dC5kZWNvZGUoJ2FzY2lpJyksIGFzY2lpKHZhbHVlKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmRlY29kZSgnYXNjaWknKSwgYXNjaWkoZW5jb2RlZF92YWx1ZSkpCiAKICAgICBkZWYgdGVzdF9ieXRlc19wcm9ncmFtKHNlbGYpOgogICAgICAgICBhYnNfcHJvZ3JhbSA9IG9zLmZzZW5jb2RlKHN5cy5leGVjdXRhYmxlKQpAQCAtMTgzMywxMCArMTkyNywxMyBAQAogICAgICAgICBvcGVuX2ZkcyA9IHNldChmZHMpCiAgICAgICAgICMgYWRkIGEgYnVuY2ggbW9yZSBmZHMKICAgICAgICAgZm9yIF8gaW4gcmFuZ2UoOSk6Ci0gICAgICAgICAgICBmZCA9IG9zLm9wZW4oIi9kZXYvbnVsbCIsIG9zLk9fUkRPTkxZKQorICAgICAgICAgICAgZmQgPSBvcy5vcGVuKG9zLmRldm51bGwsIG9zLk9fUkRPTkxZKQogICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCBmZCkKICAgICAgICAgICAgIG9wZW5fZmRzLmFkZChmZCkKIAorICAgICAgICBmb3IgZmQgaW4gb3Blbl9mZHM6CisgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisKICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCBmZF9zdGF0dXNdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBjbG9zZV9mZHM9RmFsc2UpCiAgICAgICAgIG91dHB1dCwgaWdub3JlZCA9IHAuY29tbXVuaWNhdGUoKQpAQCAtMTg2Nyw2ICsxOTY0LDg2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIlNvbWUgZmRzIG5vdCBpbiBwYXNzX2ZkcyB3ZXJlIGxlZnQgb3BlbiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4oMSwgcmVtYWluaW5nX2ZkcywgIlN1YnByb2Nlc3MgZmFpbGVkIikKIAorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgiZnJlZWJzZCIpIGFuZAorICAgICAgICAgICAgICAgICAgICAgb3Muc3RhdCgiL2RldiIpLnN0X2RldiA9PSBvcy5zdGF0KCIvZGV2L2ZkIikuc3RfZGV2LAorICAgICAgICAgICAgICAgICAgICAgIlJlcXVpcmVzIGZkZXNjZnMgbW91bnRlZCBvbiAvZGV2L2ZkIG9uIEZyZWVCU0QuIikKKyAgICBkZWYgdGVzdF9jbG9zZV9mZHNfd2hlbl9tYXhfZmRfaXNfbG93ZXJlZChzZWxmKToKKyAgICAgICAgIiIiQ29uZmlybSB0aGF0IGlzc3VlMjE2MTggaXMgZml4ZWQgKG1heSBmYWlsIHVuZGVyIHZhbGdyaW5kKS4iIiIKKyAgICAgICAgZmRfc3RhdHVzID0gc3VwcG9ydC5maW5kZmlsZSgiZmRfc3RhdHVzLnB5Iiwgc3ViZGlyPSJzdWJwcm9jZXNzZGF0YSIpCisKKyAgICAgICAgIyBUaGlzIGxhdW5jaGVzIHRoZSBtZWF0IG9mIHRoZSB0ZXN0IGluIGEgY2hpbGQgcHJvY2VzcyB0bworICAgICAgICAjIGF2b2lkIG1lc3Npbmcgd2l0aCB0aGUgbGFyZ2VyIHVuaXR0ZXN0IHByb2Nlc3NlcyBtYXhpbXVtCisgICAgICAgICMgbnVtYmVyIG9mIGZpbGUgZGVzY3JpcHRvcnMuCisgICAgICAgICMgIFRoaXMgcHJvY2VzcyBsYXVuY2hlczoKKyAgICAgICAgIyAgKy0tPiBQcm9jZXNzIHRoYXQgbG93ZXJzIGl0cyBSTElNSVRfTk9GSUxFIGFmdHIgc2V0dGluZyB1cAorICAgICAgICAjICAgIGEgYnVuY2ggb2YgaGlnaCBvcGVuIGZkcyBhYm92ZSB0aGUgbmV3IGxvd2VyIHJsaW1pdC4KKyAgICAgICAgIyAgICBUaG9zZSBhcmUgcmVwb3J0ZWQgdmlhIHN0ZG91dCBiZWZvcmUgbGF1bmNoaW5nIGEgbmV3CisgICAgICAgICMgICAgcHJvY2VzcyB3aXRoIGNsb3NlX2Zkcz1GYWxzZSB0byBydW4gdGhlIGFjdHVhbCB0ZXN0OgorICAgICAgICAjICAgICstLT4gVGhlIFRFU1Q6IFRoaXMgb25lIGxhdW5jaGVzIGEgZmRfc3RhdHVzLnB5CisgICAgICAgICMgICAgICBzdWJwcm9jZXNzIHdpdGggY2xvc2VfZmRzPVRydWUgc28gd2UgY2FuIGZpbmQgb3V0IGlmCisgICAgICAgICMgICAgICBhbnkgb2YgdGhlIGZkcyBhYm92ZSB0aGUgbG93ZXJlZCBybGltaXQgYXJlIHN0aWxsIG9wZW4uCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgdGV4dHdyYXAuZGVkZW50KAorICAgICAgICAnJycKKyAgICAgICAgaW1wb3J0IG9zLCByZXNvdXJjZSwgc3VicHJvY2Vzcywgc3lzLCB0ZXh0d3JhcAorICAgICAgICBvcGVuX2ZkcyA9IHNldCgpCisgICAgICAgICMgQWRkIGEgYnVuY2ggbW9yZSBmZHMgdG8gcGFzcyBkb3duLgorICAgICAgICBmb3IgXyBpbiByYW5nZSg0MCk6CisgICAgICAgICAgICBmZCA9IG9zLm9wZW4ob3MuZGV2bnVsbCwgb3MuT19SRE9OTFkpCisgICAgICAgICAgICBvcGVuX2Zkcy5hZGQoZmQpCisKKyAgICAgICAgIyBMZWF2ZSBhIHR3byBwYWlycyBvZiBsb3cgb25lcyBhdmFpbGFibGUgZm9yIHVzZSBieSB0aGUKKyAgICAgICAgIyBpbnRlcm5hbCBjaGlsZCBlcnJvciBwaXBlIGFuZCB0aGUgc3Rkb3V0IHBpcGUuCisgICAgICAgICMgV2UgYWxzbyBsZWF2ZSAxMCBtb3JlIG9wZW4gYXMgc29tZSBQeXRob24gYnVpbGRib3RzIHJ1biBpbnRvCisgICAgICAgICMgInRvbyBtYW55IG9wZW4gZmlsZXMiIGVycm9ycyBkdXJpbmcgdGhlIHRlc3QgaWYgd2UgZG8gbm90LgorICAgICAgICBmb3IgZmQgaW4gc29ydGVkKG9wZW5fZmRzKVs6MTRdOgorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgICAgICBvcGVuX2Zkcy5yZW1vdmUoZmQpCisKKyAgICAgICAgZm9yIGZkIGluIG9wZW5fZmRzOgorICAgICAgICAgICAgI3NlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmQpCisgICAgICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoZmQsIFRydWUpCisKKyAgICAgICAgbWF4X2ZkX29wZW4gPSBtYXgob3Blbl9mZHMpCisKKyAgICAgICAgIyBDb21tdW5pY2F0ZSB0aGUgb3Blbl9mZHMgdG8gdGhlIHBhcmVudCB1bml0dGVzdC5UZXN0Q2FzZSBwcm9jZXNzLgorICAgICAgICBwcmludCgnLCcuam9pbihtYXAoc3RyLCBzb3J0ZWQob3Blbl9mZHMpKSkpCisgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQorCisgICAgICAgIHJsaW1fY3VyLCBybGltX21heCA9IHJlc291cmNlLmdldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFKQorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIDI5IGlzIGxvd2VyIHRoYW4gdGhlIGhpZ2hlc3QgZmRzIHdlIGFyZSBsZWF2aW5nIG9wZW4uCisgICAgICAgICAgICByZXNvdXJjZS5zZXRybGltaXQocmVzb3VyY2UuUkxJTUlUX05PRklMRSwgKDI5LCBybGltX21heCkpCisgICAgICAgICAgICAjIExhdW5jaCBhIG5ldyBQeXRob24gaW50ZXJwcmV0ZXIgd2l0aCBvdXIgbG93IGZkIHJsaW1fY3VyIHRoYXQKKyAgICAgICAgICAgICMgaW5oZXJpdHMgb3BlbiBmZHMgYWJvdmUgdGhhdCBsaW1pdC4gIEl0IHRoZW4gdXNlcyBzdWJwcm9jZXNzCisgICAgICAgICAgICAjIHdpdGggY2xvc2VfZmRzPVRydWUgdG8gZ2V0IGEgcmVwb3J0IG9mIG9wZW4gZmRzIGluIHRoZSBjaGlsZC4KKyAgICAgICAgICAgICMgQW4gZXhwbGljaXQgbGlzdCBvZiBmZHMgdG8gY2hlY2sgaXMgcGFzc2VkIHRvIGZkX3N0YXR1cy5weSBhcworICAgICAgICAgICAgIyBsZXR0aW5nIGZkX3N0YXR1cyByZWx5IG9uIGl0cyBkZWZhdWx0IGxvZ2ljIHdvdWxkIG1pc3MgdGhlCisgICAgICAgICAgICAjIGZkcyBhYm92ZSBybGltX2N1ciBhcyBpdCBub3JtYWxseSBvbmx5IGNoZWNrcyB1cCB0byB0aGF0IGxpbWl0LgorICAgICAgICAgICAgc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgICAgICBbc3lzLmV4ZWN1dGFibGUsICctYycsCisgICAgICAgICAgICAgICAgIHRleHR3cmFwLmRlZGVudCgiIiIKKyAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzdWJwcm9jZXNzLCBzeXMKKyAgICAgICAgICAgICAgICAgICAgIHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAlcl0gKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyKHgpIGZvciB4IGluIHJhbmdlKHttYXhfZmR9KV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlX2Zkcz1UcnVlKS53YWl0KCkKKyAgICAgICAgICAgICAgICAgICAgICIiIi5mb3JtYXQobWF4X2ZkPW1heF9mZF9vcGVuKzEpKV0sCisgICAgICAgICAgICAgICAgY2xvc2VfZmRzPUZhbHNlKS53YWl0KCkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJlc291cmNlLnNldHJsaW1pdChyZXNvdXJjZS5STElNSVRfTk9GSUxFLCAocmxpbV9jdXIsIHJsaW1fbWF4KSkKKyAgICAgICAgJycnICUgZmRfc3RhdHVzKV0sIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpCisKKyAgICAgICAgb3V0cHV0LCB1bnVzZWRfc3RkZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIG91dHB1dF9saW5lcyA9IG91dHB1dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ob3V0cHV0X2xpbmVzKSwgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGV4YWN0bHkgdHdvIGxpbmVzIG9mIG91dHB1dDpcbiVyIiAlIG91dHB1dCkKKyAgICAgICAgb3BlbmVkX2ZkcyA9IHNldChtYXAoaW50LCBvdXRwdXRfbGluZXNbMF0uc3RyaXAoKS5zcGxpdChiJywnKSkpCisgICAgICAgIHJlbWFpbmluZ19mZHMgPSBzZXQobWFwKGludCwgb3V0cHV0X2xpbmVzWzFdLnN0cmlwKCkuc3BsaXQoYicsJykpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVtYWluaW5nX2ZkcyAmIG9wZW5lZF9mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJTb21lIGZkcyB3ZXJlIGxlZnQgb3Blbi4iKQorCisKICAgICAjIE1hYyBPUyBYIFRpZ2VyICgxMC40KSBoYXMgYSBrZXJuZWwgYnVnOiBzb21ldGltZXMsIHRoZSBmaWxlCiAgICAgIyBkZXNjcmlwdG9yIG9mIGEgcGlwZSBjbG9zZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIGlzIHZhbGlkIGluIHRoZQogICAgICMgY2hpbGQgcHJvY2VzcyBhY2NvcmRpbmcgdG8gZnN0YXQoKSwgYnV0IHRoZSBtb2RlIG9mIHRoZSBmaWxlCkBAIC0xODgxLDYgKzIwNTgsOCBAQAogICAgICAgICAgICAgZmRzID0gb3MucGlwZSgpCiAgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MuY2xvc2UsIGZkc1swXSkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgZmRzWzFdKQorICAgICAgICAgICAgb3Muc2V0X2luaGVyaXRhYmxlKGZkc1swXSwgVHJ1ZSkKKyAgICAgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShmZHNbMV0sIFRydWUpCiAgICAgICAgICAgICBvcGVuX2Zkcy51cGRhdGUoZmRzKQogCiAgICAgICAgIGZvciBmZCBpbiBvcGVuX2ZkczoKQEAgLTE5MDMsNiArMjA4MiwzMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPUZhbHNlLCBwYXNzX2Zkcz0oZmQsICkpKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbignb3ZlcnJpZGluZyBjbG9zZV9mZHMnLCBzdHIoY29udGV4dC53YXJuaW5nKSkKIAorICAgIGRlZiB0ZXN0X3Bhc3NfZmRzX2luaGVyaXRhYmxlKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSBzdXBwb3J0LmZpbmRmaWxlKCJmZF9zdGF0dXMucHkiLCBzdWJkaXI9InN1YnByb2Nlc3NkYXRhIikKKworICAgICAgICBpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgaW5oZXJpdGFibGUpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBvcy5zZXRfaW5oZXJpdGFibGUoaW5oZXJpdGFibGUsIFRydWUpCisgICAgICAgIG9zLnNldF9pbmhlcml0YWJsZShub25faW5oZXJpdGFibGUsIEZhbHNlKQorICAgICAgICBwYXNzX2ZkcyA9IChpbmhlcml0YWJsZSwgbm9uX2luaGVyaXRhYmxlKQorICAgICAgICBhcmdzID0gW3N5cy5leGVjdXRhYmxlLCBzY3JpcHRdCisgICAgICAgIGFyZ3MgKz0gbGlzdChtYXAoc3RyLCBwYXNzX2ZkcykpCisKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NfZmRzPXBhc3NfZmRzKQorICAgICAgICBvdXRwdXQsIGlnbm9yZWQgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgZmRzID0gc2V0KG1hcChpbnQsIG91dHB1dC5zcGxpdChiJywnKSkpCisKKyAgICAgICAgIyB0aGUgaW5oZXJpdGFibGUgZmlsZSBkZXNjcmlwdG9yIG11c3QgYmUgaW5oZXJpdGVkLCBzbyBpdHMgaW5oZXJpdGFibGUKKyAgICAgICAgIyBmbGFnIG11c3QgYmUgc2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzIGFmdGVyIGZvcmsoKSBhbmQgYmVmb3JlIGV4ZWMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkcywgc2V0KHBhc3NfZmRzKSwgIm91dHB1dD0lYSIgJSBvdXRwdXQpCisKKyAgICAgICAgIyBpbmhlcml0YWJsZSBmbGFnIG11c3Qgbm90IGJlIGNoYW5nZWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MuZ2V0X2luaGVyaXRhYmxlKGluaGVyaXRhYmxlKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUobm9uX2luaGVyaXRhYmxlKSwgRmFsc2UpCisKICAgICBkZWYgdGVzdF9zdGRvdXRfc3RkaW5fYXJlX3NpbmdsZV9pbm91dF9mZChzZWxmKToKICAgICAgICAgd2l0aCBpby5vcGVuKG9zLmRldm51bGwsICJyKyIpIGFzIGlub3V0OgogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oW3N5cy5leGVjdXRhYmxlLCAiLWMiLCAiaW1wb3J0IHN5czsgc3lzLmV4aXQoMCkiXSwKQEAgLTE5OTAsNyArMjE5NSw3IEBACiAgICAgICAgICMgbGV0IHNvbWUgdGltZSBmb3IgdGhlIHByb2Nlc3MgdG8gZXhpdCwgYW5kIGNyZWF0ZSBhIG5ldyBQb3BlbjogdGhpcwogICAgICAgICAjIHNob3VsZCB0cmlnZ2VyIHRoZSB3YWl0KCkgb2YgcAogICAgICAgICB0aW1lLnNsZWVwKDAuMikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFbnZpcm9ubWVudEVycm9yKSBhcyBjOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpIGFzIGM6CiAgICAgICAgICAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oWydub25leGlzdGluZ19pX2hvcGUnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2M6CkBAIC0yMDE2LDYgKzIyMjEsMzkgQEAKIAogICAgICAgICBzZWxmLmFzc2VydE5vdEluKGZkLCByZW1haW5pbmdfZmRzKQogCisgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CisgICAgZGVmIHRlc3RfZm9ya19leGVjKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjI5MDogZm9ya19leGVjKCkgbXVzdCBub3QgY3Jhc2ggb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorICAgICAgICAjIG9yIG90aGVyIGVycm9ycworICAgICAgICBpbXBvcnQgX3Bvc2l4c3VicHJvY2VzcworICAgICAgICBnY19lbmFibGVkID0gZ2MuaXNlbmFibGVkKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBVc2UgYSBwcmVleGVjIGZ1bmN0aW9uIGFuZCBlbmFibGUgdGhlIGdhcmJhZ2UgY29sbGVjdG9yCisgICAgICAgICAgICAjIHRvIGZvcmNlIGZvcmtfZXhlYygpIHRvIHJlLWVuYWJsZSB0aGUgZ2FyYmFnZSBjb2xsZWN0b3IKKyAgICAgICAgICAgICMgb24gZXJyb3IuCisgICAgICAgICAgICBmdW5jID0gbGFtYmRhOiBOb25lCisgICAgICAgICAgICBnYy5lbmFibGUoKQorCisgICAgICAgICAgICBleGVjdXRhYmxlX2xpc3QgPSAiZXhlYyIgICAjIGVycm9yOiBtdXN0IGJlIGEgc2VxdWVuY2UKKworICAgICAgICAgICAgZm9yIGFyZ3MsIGV4ZV9saXN0LCBjd2QsIGVudl9saXN0IGluICgKKyAgICAgICAgICAgICAgICAoMTIzLCAgICAgIFtiImV4ZSJdLCBOb25lLCBbYiJlbnYiXSksCisgICAgICAgICAgICAgICAgKFtiImFyZyJdLCAxMjMsICAgICAgTm9uZSwgW2IiZW52Il0pLAorICAgICAgICAgICAgICAgIChbYiJhcmciXSwgW2IiZXhlIl0sIDEyMywgIFtiImVudiJdKSwKKyAgICAgICAgICAgICAgICAoW2IiYXJnIl0sIFtiImV4ZSJdLCBOb25lLCAxMjMpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICAgICAgICAgIF9wb3NpeHN1YnByb2Nlc3MuZm9ya19leGVjKAorICAgICAgICAgICAgICAgICAgICAgICAgYXJncywgZXhlX2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICBUcnVlLCBbXSwgY3dkLCBlbnZfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAtMSwgLTEsIC0xLAorICAgICAgICAgICAgICAgICAgICAgICAgMSwgMiwgMywgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFRydWUsIFRydWUsIGZ1bmMpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBpZiBub3QgZ2NfZW5hYmxlZDoKKyAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKworCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKG1zd2luZG93cywgIldpbmRvd3Mgc3BlY2lmaWMgdGVzdHMiKQogY2xhc3MgV2luMzJQcm9jZXNzVGVzdENhc2UoQmFzZVRlc3RDYXNlKToKQEAgLTIxNzUsMTUgKzI0MTMsMTYgQEAKICAgICAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3MoZ2V0YXR0cihzdWJwcm9jZXNzLCAnX2hhc19wb2xsJywgRmFsc2UpLAotICAgICAgICAgICAgICAgICAgICAgInBvbGwgc3lzdGVtIGNhbGwgbm90IHN1cHBvcnRlZCIpCitAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKHNlbGVjdG9ycywgJ1BvbGxTZWxlY3RvcicpLAorICAgICAgICAgICAgICAgICAgICAgIlRlc3QgbmVlZHMgc2VsZWN0b3JzLlBvbGxTZWxlY3RvciIpCiBjbGFzcyBQcm9jZXNzVGVzdENhc2VOb1BvbGwoUHJvY2Vzc1Rlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1YnByb2Nlc3MuX2hhc19wb2xsID0gRmFsc2UKKyAgICAgICAgc2VsZi5vcmlnX3NlbGVjdG9yID0gc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvcgorICAgICAgICBzdWJwcm9jZXNzLl9Qb3BlblNlbGVjdG9yID0gc2VsZWN0b3JzLlNlbGVjdFNlbGVjdG9yCiAgICAgICAgIFByb2Nlc3NUZXN0Q2FzZS5zZXRVcChzZWxmKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzdWJwcm9jZXNzLl9oYXNfcG9sbCA9IFRydWUKKyAgICAgICAgc3VicHJvY2Vzcy5fUG9wZW5TZWxlY3RvciA9IHNlbGYub3JpZ19zZWxlY3RvcgogICAgICAgICBQcm9jZXNzVGVzdENhc2UudGVhckRvd24oc2VsZikKIAogCkBAIC0yMjExLDcgKzI0NTAsNyBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgZiwgZm5hbWUgPSBta3N0ZW1wKCIucHkiLCAidGUgc3QiKQorICAgICAgICBmLCBmbmFtZSA9IHRlbXBmaWxlLm1rc3RlbXAoIi5weSIsICJ0ZSBzdCIpCiAgICAgICAgIHNlbGYuZm5hbWUgPSBmbmFtZS5sb3dlciAoKQogICAgICAgICBvcy53cml0ZShmLCBiImltcG9ydCBzeXM7IgogICAgICAgICAgICAgICAgICAgICBiInN5cy5zdGRvdXQud3JpdGUoJyVkICVzJyAlIChsZW4oc3lzLmFyZ3YpLCBbYS5sb3dlciAoKSBmb3IgYSBpbiBzeXMuYXJndl0pKSIKQEAgLTIyODcsNiArMjUyNiwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpIGFzIHByb2M6CiAgICAgICAgICAgICAgICAgcGFzcwogCisgICAgZGVmIHRlc3RfYnJva2VuX3BpcGVfY2xlYW51cChzZWxmKToKKyAgICAgICAgIiIiQnJva2VuIHBpcGUgZXJyb3Igc2hvdWxkIG5vdCBwcmV2ZW50IHdhaXQoKSAoSXNzdWUgMjE2MTkpIiIiCisgICAgICAgIHByb2MgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgJy1jJywgJ3Bhc3MnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkaW49c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZzaXplPXN1cHBvcnQuUElQRV9NQVhfU0laRSoyKQorICAgICAgICBwcm9jID0gcHJvYy5fX2VudGVyX18oKQorICAgICAgICAjIFByZXBhcmUgdG8gc2VuZCBlbm91Z2ggZGF0YSB0byBvdmVyZmxvdyBhbnkgT1MgcGlwZSBidWZmZXJpbmcgYW5kCisgICAgICAgICMgZ3VhcmFudGVlIGEgYnJva2VuIHBpcGUgZXJyb3IuIERhdGEgaXMgaGVsZCBpbiBCdWZmZXJlZFdyaXRlcgorICAgICAgICAjIGJ1ZmZlciB1bnRpbCBjbG9zZWQuCisgICAgICAgIHByb2Muc3RkaW4ud3JpdGUoYid4JyAqIHN1cHBvcnQuUElQRV9NQVhfU0laRSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocHJvYy5yZXR1cm5jb2RlKQorICAgICAgICAjIEVQSVBFIGV4cGVjdGVkIHVuZGVyIFBPU0lYOyBFSU5WQUwgdW5kZXIgV2luZG93cworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBwcm9jLl9fZXhpdF9fLCBOb25lLCBOb25lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2MucmV0dXJuY29kZSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHByb2Muc3RkaW4uY2xvc2VkKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB1bml0X3Rlc3RzID0gKFByb2Nlc3NUZXN0Q2FzZSwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkgYi9MaWIvdGVzdC90ZXN0X3N1bmF1LnB5CmluZGV4IDE2NTUzMTcuLjBmNDEzNGUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3VuYXUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdW5hdS5weQpAQCAtMSw2ICsxLDcgQEAKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4KIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0IGltcG9ydCBhdWRpb3Rlc3RzCitmcm9tIGF1ZGlvb3AgaW1wb3J0IGJ5dGVzd2FwCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VuYXUKIApAQCAtNDYsNiArNDcsMzEgQEAKICAgICAgICIiIikKIAogCitjbGFzcyBTdW5hdVBDTTI0VGVzdChTdW5hdVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20yNC5hdScKKyAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKKyAgICBuY2hhbm5lbHMgPSAyCisgICAgc2FtcHdpZHRoID0gMworICAgIGZyYW1lcmF0ZSA9IDExMDI1CisgICAgbmZyYW1lcyA9IDQ4CisgICAgY29tcHR5cGUgPSAnTk9ORScKKyAgICBjb21wbmFtZSA9ICdub3QgY29tcHJlc3NlZCcKKyAgICBmcmFtZXMgPSBieXRlcy5mcm9taGV4KCIiIlwKKyAgICAgIDAyMkQ2NUZGRUI5RCA0QjVBMEYwMEZBNTQgMzExM0MzMDRFRTJCIDgwRENENjA4NDMwMyBcCisgICAgICBDQkRFQzAwNkIyNjEgNDhBOTk4MDNGMkY4IEJGRTgyNDAxQjA3RCAwMzZCRkJGRTdCNUQgXAorICAgICAgQjg1NzU2RkEzRUM5IEI0QjA1NUYzNTAyQiAyOTk4MzBFQkNCNjIgMUE1Q0E3RTZEOTlBIFwKKyAgICAgIEVERkEzRUU0OTFCRCBDNjI1RUJFMjc4ODQgMEUwNUE5RTBCNkNGIEVGMjkyOUUwMjkyMiBcCisgICAgICA1NzU4RDhFMjcwNjcgRkIzNTU3RTgzRTE2IDEzNzdCRkVGODQwMiBEODJDNUJGNzI3MkEgXAorICAgICAgOTc4RjE2RkI3NzQ1IEY1Rjg2NUZDMTAxMyAwODY2MzVGQjlDNEUgREYzMEZDRkI0MEVFIFwKKyAgICAgIDExN0ZFMEZBMzQzOCAzRUU2QjhGQjVBQzMgQkM3N0EzRkNCMkY0IDY2RDZEQUZGNUYzMiBcCisgICAgICBDRjEzQjkwNDEyNzUgNDMxRDY5MDk3QThDIEMxQkI2MDBFQzc0RSA1MTIwQjkxMkEyQkEgXAorICAgICAgRUVERjY0MTc1NEMwIDgyMDcwMDE2NjRCNyA3RkZGRkYxNDQ1M0YgODAwMDAwMTI5NEU2IFwKKyAgICAgIDQ5OUMxQjBFQjNCMiA1MkI3M0UwREJDQTAgRUZCMkIyMEY1RkQ4IENFM0NEQjBGQkUxMiBcCisgICAgICBFNEI0OUMwQ0VBMkQgNjM0NEE4MEE1QTdDIDA4QzhGRTBBMUZGRSAyQkI5ODYwQjBBMEUgXAorICAgICAgNTE0ODZGMEU0NEUxIDhCQ0M2NDExM0IwNSBCNkY0RUMwRUVCMzYgNDQxMzE3MEE1QjQ4IFwKKyAgICAgICIiIikKKworCiBjbGFzcyBTdW5hdVBDTTMyVGVzdChTdW5hdVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBzbmRmaWxlbmFtZSA9ICdwbHVjay1wY20zMi5hdScKICAgICBzbmRmaWxlbmZyYW1lcyA9IDMzMDcKQEAgLTg5LDcgKzExNSw3IEBACiAgICAgICBFNTA0MENCQyA2MTdDMEEzQyAwOEJDMEEzQyAyQzdDMEIzQyA1MTdDMEUzQyA4QTg0MTBGQyBCNjg0MEVCQyA0NTdDMEEzQyBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDIoZnJhbWVzKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDIpCiAKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3VuZHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKaW5kZXggODgwOGM0Ny4uZTk5Y2E5ZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zdW5kcnkucHkKQEAgLTEsMTkgKzEsMjYgQEAKICIiIkRvIGEgbWluaW1hbCB0ZXN0IG9mIGFsbCB0aGUgbW9kdWxlcyB0aGF0IGFyZW4ndCBvdGhlcndpc2UgdGVzdGVkLiIiIgotCi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2ltcG9ydCBpbXBvcnRsaWIKIGltcG9ydCBzeXMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogaW1wb3J0IHVuaXR0ZXN0CiAKIGNsYXNzIFRlc3RVbnRlc3RlZE1vZHVsZXModW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X2F0X2xlYXN0X2ltcG9ydF91bnRlc3RlZF9tb2R1bGVzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3VudGVzdGVkX21vZHVsZXNfY2FuX2JlX2ltcG9ydGVkKHNlbGYpOgorICAgICAgICB1bnRlc3RlZCA9ICgnYmRiJywgJ2VuY29kaW5ncycsICdmb3JtYXR0ZXInLAorICAgICAgICAgICAgICAgICAgICAnbnR1cmwycGF0aCcsICd0YWJuYW5ueScpCiAgICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncyhxdWlldD1UcnVlKToKLSAgICAgICAgICAgIGltcG9ydCBiZGIKLSAgICAgICAgICAgIGltcG9ydCBjZ2l0YgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gdW50ZXN0ZWQ6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ3Rlc3QudGVzdF97fScuZm9ybWF0KG5hbWUpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCB1bml0dGVzdC5Ta2lwVGVzdDoKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUobmFtZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ3t9IGhhcyB0ZXN0cyBldmVuIHRob3VnaCB0ZXN0X3N1bmRyeSBjbGFpbXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ290aGVyd2lzZScuZm9ybWF0KG5hbWUpKQogCiAgICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmJjcHBjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jY29tcGlsZXIKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY3lnd2luY2NvbXBpbGVyCi0gICAgICAgICAgICBpbXBvcnQgZGlzdHV0aWxzLmVteGNjb21waWxlcgogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5maWxlbGlzdAogICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ3dpbicpOgogICAgICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMubXN2Y2NvbXBpbGVyCkBAIC0zOSwyNiArNDYsMTQgQEAKICAgICAgICAgICAgIGltcG9ydCBkaXN0dXRpbHMuY29tbWFuZC5zZGlzdAogICAgICAgICAgICAgaW1wb3J0IGRpc3R1dGlscy5jb21tYW5kLnVwbG9hZAogCi0gICAgICAgICAgICBpbXBvcnQgZW5jb2RpbmdzCi0gICAgICAgICAgICBpbXBvcnQgZm9ybWF0dGVyCiAgICAgICAgICAgICBpbXBvcnQgaHRtbC5lbnRpdGllcwotICAgICAgICAgICAgaW1wb3J0IGtleXdvcmQKLSAgICAgICAgICAgIGltcG9ydCBtYWlsY2FwCi0gICAgICAgICAgICBpbXBvcnQgbnR1cmwycGF0aAotICAgICAgICAgICAgaW1wb3J0IG9zMmVteHBhdGgKLSAgICAgICAgICAgIGltcG9ydCBwc3RhdHMKLSAgICAgICAgICAgIGltcG9ydCBweV9jb21waWxlCi0gICAgICAgICAgICBpbXBvcnQgc25kaGRyCi0gICAgICAgICAgICBpbXBvcnQgdGFibmFubnkKKwogICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIGltcG9ydCB0dHkgICAgICMgbm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzCisgICAgICAgICAgICAgICAgaW1wb3J0IHR0eSAgIyBOb3QgYXZhaWxhYmxlIG9uIFdpbmRvd3MKICAgICAgICAgICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2U6CiAgICAgICAgICAgICAgICAgICAgIHByaW50KCJza2lwcGluZyB0dHkiKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0VW50ZXN0ZWRNb2R1bGVzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5IGIvTGliL3Rlc3QvdGVzdF9zdXBlci5weQppbmRleCAxZTI3MmVlLi4zN2ZjMmQ5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N1cGVyLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwZXIucHkKQEAgLTQ0LDYgKzQ0LDExIEBACiAKIGNsYXNzIFRlc3RTdXBlcih1bml0dGVzdC5UZXN0Q2FzZSk6CiAKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgVGhpcyBmaXhlcyB0aGUgZGFtYWdlIHRoYXQgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyBkb2VzLgorICAgICAgICBub25sb2NhbCBfX2NsYXNzX18KKyAgICAgICAgX19jbGFzc19fID0gVGVzdFN1cGVyCisKICAgICBkZWYgdGVzdF9iYXNpY3Nfd29ya2luZyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChEKCkuZigpLCAnQUJDRCcpCiAKQEAgLTgxLDggKzg2LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEUoKS5mKCksICdBRScpCiAKLSAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCi0gICAgZGVmIHRlc3RfX19jbGFzc19fX3NldChzZWxmKToKKyAgICBkZWYgdGVzdF92YXJpb3VzX19fY2xhc3NfX19wYXRob2xvZ2llcyhzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzEyMzcwCiAgICAgICAgIGNsYXNzIFgoQSk6CiAgICAgICAgICAgICBkZWYgZihzZWxmKToKQEAgLTkxLDYgKzk1LDMxIEBACiAgICAgICAgIHggPSBYKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4LmYoKSwgJ0EnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX19jbGFzc19fLCA0MTMpCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICB4ID0gX19jbGFzc19fCisgICAgICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgICAgIF9fY2xhc3NfXworICAgICAgICBzZWxmLmFzc2VydElzKFgueCwgdHlwZShzZWxmKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhOYW1lRXJyb3IpIGFzIGU6CisgICAgICAgICAgICBleGVjKCIiImNsYXNzIFg6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAgICAgX19jbGFzc19fIiIiLCBnbG9iYWxzKCksIHt9KQorICAgICAgICBzZWxmLmFzc2VydElzKHR5cGUoZS5leGNlcHRpb24pLCBOYW1lRXJyb3IpICMgTm90IFVuYm91bmRMb2NhbEVycm9yCisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBnbG9iYWwgX19jbGFzc19fCisgICAgICAgICAgICBfX2NsYXNzX18gPSA0MgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBfX2NsYXNzX18KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChnbG9iYWxzKClbIl9fY2xhc3NfXyJdLCA0MikKKyAgICAgICAgZGVsIGdsb2JhbHMoKVsiX19jbGFzc19fIl0KKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiX19jbGFzc19fIiwgWC5fX2RpY3RfXykKKyAgICAgICAgY2xhc3MgWDoKKyAgICAgICAgICAgIG5vbmxvY2FsIF9fY2xhc3NfXworICAgICAgICAgICAgX19jbGFzc19fID0gNDIKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgX19jbGFzc19fCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX19jbGFzc19fLCA0MikKIAogICAgIGRlZiB0ZXN0X19fY2xhc3NfX19pbnN0YW5jZW1ldGhvZChzZWxmKToKICAgICAgICAgIyBTZWUgaXNzdWUgIzE0ODU3CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkgYi9MaWIvdGVzdC90ZXN0X3N1cHBvcnQucHkKaW5kZXggY2I2Zjg0ZS4uMDNjZTlkMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3VwcG9ydC5weQpAQCAtNjksNiArNjksNyBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZGVsIHN5cy5wYXRoWzBdCiAgICAgICAgICAgICBzdXBwb3J0LnVubGluayhtb2RfZmlsZW5hbWUpCisgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSgnX19weWNhY2hlX18nKQogCiAgICAgZGVmIHRlc3RfSE9TVChzZWxmKToKICAgICAgICAgcyA9IHNvY2tldC5zb2NrZXQoKQpAQCAtMzA0LDYgKzMwNSw3IEBACiAgICAgIyBhcmdzX2Zyb21faW50ZXJwcmV0ZXJfZmxhZ3MKICAgICAjIGNhbl9zeW1saW5rCiAgICAgIyBza2lwX3VubGVzc19zeW1saW5rCisgICAgIyBTdXBwcmVzc0NyYXNoUmVwb3J0CiAKIAogZGVmIHRlc3RfbWFpbigpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeW50YXgucHkgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQppbmRleCA1OTI2YjY5Li5hOWQzNjI4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5bnRheC5weQpAQCAtMzMsNyArMzMsNyBAQAogCiA+Pj4gTm9uZSA9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLVN5bnRheEVycm9yOiBhc3NpZ25tZW50IHRvIGtleXdvcmQKK1N5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8ga2V5d29yZAogCiBJdCdzIGEgc3ludGF4IGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgdHVwbGUuICBXaHkgaXNuJ3QgaXQgYW4KIGVycm9yIHRvIGFzc2lnbiB0byB0aGUgZW1wdHkgbGlzdD8gIEl0IHdpbGwgYWx3YXlzIHJhaXNlIHNvbWUgZXJyb3IgYXQKQEAgLTIzMyw3ICsyMzMsNyBAQAogU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBnZW5lcmF0b3IgZXhwcmVzc2lvbgogPj4+IE5vbmUgKz0gMQogVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotU3ludGF4RXJyb3I6IGFzc2lnbm1lbnQgdG8ga2V5d29yZAorU3ludGF4RXJyb3I6IGNhbid0IGFzc2lnbiB0byBrZXl3b3JkCiA+Pj4gZigpICs9IDEKIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKIFN5bnRheEVycm9yOiBjYW4ndCBhc3NpZ24gdG8gZnVuY3Rpb24gY2FsbApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9zeXMucHkgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQppbmRleCBmNzY4ZTliLi5iN2RkYmU5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5cy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5cy5weQpAQCAtNyw2ICs3LDkgQEAKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgZ2MKK2ltcG9ydCBzeXNjb25maWcKK2ltcG9ydCBwbGF0Zm9ybQogCiAjIGNvdW50IHRoZSBudW1iZXIgb2YgdGVzdCBydW5zLCB1c2VkIHRvIGNyZWF0ZSB1bmlxdWUKICMgc3RyaW5ncyB0byBpbnRlcm4gaW4gdGVzdF9pbnRlcm4oKQpAQCAtMTk0LDkgKzE5NywxMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRyZWN1cnNpb25saW1pdCgpLCAxMDAwMCkKICAgICAgICAgc3lzLnNldHJlY3Vyc2lvbmxpbWl0KG9sZGxpbWl0KQogCi0gICAgQHVuaXR0ZXN0LnNraXBJZihoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpLAotICAgICAgICAgICAgICAgICAgICAgJ2ZhdGFsIGVycm9yIGlmIHJ1biB3aXRoIGEgdHJhY2UgZnVuY3Rpb24nKQogICAgIGRlZiB0ZXN0X3JlY3Vyc2lvbmxpbWl0X3JlY292ZXJ5KHNlbGYpOgorICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ2dldHRyYWNlJykgYW5kIHN5cy5nZXR0cmFjZSgpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnZmF0YWwgZXJyb3IgaWYgcnVuIHdpdGggYSB0cmFjZSBmdW5jdGlvbicpCisKICAgICAgICAgIyBOT1RFOiB0aGlzIHRlc3QgaXMgc2xpZ2h0bHkgZnJhZ2lsZSBpbiB0aGF0IGl0IGRlcGVuZHMgb24gdGhlIGN1cnJlbnQKICAgICAgICAgIyByZWN1cnNpb24gY291bnQgd2hlbiBleGVjdXRpbmcgdGhlIHRlc3QgYmVpbmcgbG93IGVub3VnaCBzbyBhcyB0bwogICAgICAgICAjIHRyaWdnZXIgdGhlIHJlY3Vyc2lvbiByZWNvdmVyeSBkZXRlY3Rpb24gaW4gdGhlIF9QeV9NYWtlRW5kUmVjQ2hlY2sKQEAgLTIyNyw3ICsyMzEsNyBAQAogCiAgICAgICAgICAgICBzeXMuc2V0cmVjdXJzaW9ubGltaXQoJWQpCiAgICAgICAgICAgICBmKCkiIiIpCi0gICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LnN1cHByZXNzX2NyYXNoX3BvcHVwKCk6CisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKICAgICAgICAgICAgIGZvciBpIGluICg1MCwgMTAwMCk6CiAgICAgICAgICAgICAgICAgc3ViID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICctYycsIGNvZGUgJSBpXSwKICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKQEAgLTQwOCw3ICs0MTIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoc3lzLmludF9pbmZvLnNpemVvZl9kaWdpdCksIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oZXh2ZXJzaW9uLCBpbnQpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc3lzLmhhc2hfaW5mbyksIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5oYXNoX2luZm8pLCA5KQogICAgICAgICBzZWxmLmFzc2VydExlc3Moc3lzLmhhc2hfaW5mby5tb2R1bHVzLCAyKipzeXMuaGFzaF9pbmZvLndpZHRoKQogICAgICAgICAjIHN5cy5oYXNoX2luZm8ubW9kdWx1cyBzaG91bGQgYmUgYSBwcmltZTsgd2UgZG8gYSBxdWljawogICAgICAgICAjIHByb2JhYmxlIHByaW1hbGl0eSB0ZXN0IChkb2Vzbid0IGV4Y2x1ZGUgdGhlIHBvc3NpYmlsaXR5IG9mCkBAIC00MjMsNiArNDI3LDIyIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzeXMuaGFzaF9pbmZvLmluZiwgaW50KQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLmhhc2hfaW5mby5uYW4sIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5oYXNoX2luZm8uaW1hZywgaW50KQorICAgICAgICBhbGdvID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCJQeV9IQVNIX0FMR09SSVRITSIpCisgICAgICAgIGlmIHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtIGluIHsiZm52IiwgInNpcGhhc2gyNCJ9OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuaGFzaF9pbmZvLmhhc2hfYml0cywgezMyLCA2NH0pCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKHN5cy5oYXNoX2luZm8uc2VlZF9iaXRzLCB7MzIsIDY0LCAxMjh9KQorCisgICAgICAgICAgICBpZiBhbGdvID09IDE6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSwgInNpcGhhc2gyNCIpCisgICAgICAgICAgICBlbGlmIGFsZ28gPT0gMjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5oYXNoX2luZm8uYWxnb3JpdGhtLCAiZm52IikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzeXMuaGFzaF9pbmZvLmFsZ29yaXRobSwgeyJmbnYiLCAic2lwaGFzaDI0In0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFBZX0hBU0hfRVhURVJOQUwKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYWxnbywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc3lzLmhhc2hfaW5mby5jdXRvZmYsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzeXMuaGFzaF9pbmZvLmN1dG9mZiwgOCkKIAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3lzLm1heHNpemUsIGludCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHN5cy5tYXh1bmljb2RlLCBpbnQpCkBAIC00NjAsNyArNDgwLDcgQEAKICAgICBkZWYgdGVzdF90aHJlYWRfaW5mbyhzZWxmKToKICAgICAgICAgaW5mbyA9IHN5cy50aHJlYWRfaW5mbwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbmZvKSwgMykKLSAgICAgICAgc2VsZi5hc3NlcnRJbihpbmZvLm5hbWUsICgnbnQnLCAnb3MyJywgJ3B0aHJlYWQnLCAnc29sYXJpcycsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEluKGluZm8ubmFtZSwgKCdudCcsICdwdGhyZWFkJywgJ3NvbGFyaXMnLCBOb25lKSkKICAgICAgICAgc2VsZi5hc3NlcnRJbihpbmZvLmxvY2ssICgnc2VtYXBob3JlJywgJ211dGV4K2NvbmQnLCBOb25lKSkKIAogICAgIGRlZiB0ZXN0XzQzNTgxKHNlbGYpOgpAQCAtNDkzLDEzICs1MTMsMzQgQEAKICAgICAgICAgYXR0cnMgPSAoImRlYnVnIiwKICAgICAgICAgICAgICAgICAgImluc3BlY3QiLCAiaW50ZXJhY3RpdmUiLCAib3B0aW1pemUiLCAiZG9udF93cml0ZV9ieXRlY29kZSIsCiAgICAgICAgICAgICAgICAgICJub191c2VyX3NpdGUiLCAibm9fc2l0ZSIsICJpZ25vcmVfZW52aXJvbm1lbnQiLCAidmVyYm9zZSIsCi0gICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIpCisgICAgICAgICAgICAgICAgICJieXRlc193YXJuaW5nIiwgInF1aWV0IiwgImhhc2hfcmFuZG9taXphdGlvbiIsICJpc29sYXRlZCIpCiAgICAgICAgIGZvciBhdHRyIGluIGF0dHJzOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoc3lzLmZsYWdzLCBhdHRyKSwgYXR0cikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShnZXRhdHRyKHN5cy5mbGFncywgYXR0cikpLCBpbnQsIGF0dHIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXByKHN5cy5mbGFncykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHN5cy5mbGFncyksIGxlbihhdHRycykpCiAKKyAgICBkZWYgYXNzZXJ0X3JhaXNlX29uX25ld19zeXNfdHlwZShzZWxmLCBzeXNfYXR0cik6CisgICAgICAgICMgVXNlcnMgYXJlIGludGVudGlvbmFsbHkgcHJldmVudGVkIGZyb20gY3JlYXRpbmcgbmV3IGluc3RhbmNlcyBvZgorICAgICAgICAjIHN5cy5mbGFncywgc3lzLnZlcnNpb25faW5mbywgYW5kIHN5cy5nZXR3aW5kb3dzdmVyc2lvbi4KKyAgICAgICAgYXR0cl90eXBlID0gdHlwZShzeXNfYXR0cikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgYXR0cl90eXBlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgYXR0cl90eXBlLl9fbmV3X18oYXR0cl90eXBlKQorCisgICAgZGVmIHRlc3Rfc3lzX2ZsYWdzX25vX2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X3JhaXNlX29uX25ld19zeXNfdHlwZShzeXMuZmxhZ3MpCisKKyAgICBkZWYgdGVzdF9zeXNfdmVyc2lvbl9pbmZvX25vX2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X3JhaXNlX29uX25ld19zeXNfdHlwZShzeXMudmVyc2lvbl9pbmZvKQorCisgICAgZGVmIHRlc3Rfc3lzX2dldHdpbmRvd3N2ZXJzaW9uX25vX2luc3RhbnRpYXRpb24oc2VsZik6CisgICAgICAgICMgU2tpcCBpZiBub3QgYmVpbmcgcnVuIG9uIFdpbmRvd3MuCisgICAgICAgIHRlc3Quc3VwcG9ydC5nZXRfYXR0cmlidXRlKHN5cywgImdldHdpbmRvd3N2ZXJzaW9uIikKKyAgICAgICAgc2VsZi5hc3NlcnRfcmFpc2Vfb25fbmV3X3N5c190eXBlKHN5cy5nZXR3aW5kb3dzdmVyc2lvbigpKQorCisgICAgQHRlc3Quc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9jbGVhcl90eXBlX2NhY2hlKHNlbGYpOgogICAgICAgICBzeXMuX2NsZWFyX3R5cGVfY2FjaGUoKQogCkBAIC01MjIsNiArNTYzLDQyIEBACiAgICAgICAgIG91dCA9IHAuY29tbXVuaWNhdGUoKVswXS5zdHJpcCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJz8nKQogCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gImFzY2lpIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsICdwcmludChjaHIoMHhhMikpJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIG91dCwgZXJyID0gcC5jb21tdW5pY2F0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYidVbmljb2RlRW5jb2RlRXJyb3I6JywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKHJiIidceGEyJyIsIGVycikKKworICAgICAgICBlbnZbIlBZVEhPTklPRU5DT0RJTkciXSA9ICJhc2NpaToiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGEyKSknXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW52PWVudikKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1VuaWNvZGVFbmNvZGVFcnJvcjonLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmIiJ1x4YTInIiwgZXJyKQorCisgICAgICAgIGVudlsiUFlUSE9OSU9FTkNPRElORyJdID0gIjpzdXJyb2dhdGVlc2NhcGUiCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFtzeXMuZXhlY3V0YWJsZSwgIi1jIiwgJ3ByaW50KGNocigweGRjYmQpKSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBlbnY9ZW52KQorICAgICAgICBvdXQgPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYidceGJkJykKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAncmVxdWlyZXMgT1Mgc3VwcG9ydCBvZiBub24tQVNDSUkgZW5jb2RpbmdzJykKKyAgICBkZWYgdGVzdF9pb2VuY29kaW5nX25vbmFzY2lpKHNlbGYpOgorICAgICAgICBlbnYgPSBkaWN0KG9zLmVudmlyb24pCisKKyAgICAgICAgZW52WyJQWVRIT05JT0VOQ09ESU5HIl0gPSAiIgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3Blbihbc3lzLmV4ZWN1dGFibGUsICItYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmludCglYSknICUgdGVzdC5zdXBwb3J0LkZTX05PTkFTQ0lJXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgZW52PWVudikKKyAgICAgICAgb3V0ID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIG9zLmZzZW5jb2RlKHRlc3Quc3VwcG9ydC5GU19OT05BU0NJSSkpCisKICAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5iYXNlX3ByZWZpeCAhPSBzeXMucHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgJ1Rlc3QgaXMgbm90IHZlbnYtY29tcGF0aWJsZScpCiAgICAgZGVmIHRlc3RfZXhlY3V0YWJsZShzZWxmKToKQEAgLTU4Miw2ICs2NTksNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5pbXBsZW1lbnRhdGlvbi5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5pbXBsZW1lbnRhdGlvbi5uYW1lLmxvd2VyKCkpCiAKKyAgICBAdGVzdC5zdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2RlYnVnbWFsbG9jc3RhdHMoc2VsZik6CiAgICAgICAgICMgVGVzdCBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKQogICAgICAgICBmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawpAQCAtNTg5LDYgKzY2NywzOSBAQAogICAgICAgICByZXQsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygqYXJncykKICAgICAgICAgc2VsZi5hc3NlcnRJbihiImZyZWUgUHlEaWN0T2JqZWN0cyIsIGVycikKIAorICAgICAgICAjIFRoZSBmdW5jdGlvbiBoYXMgbm8gcGFyYW1ldGVyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLl9kZWJ1Z21hbGxvY3N0YXRzLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihzeXMsICJnZXRhbGxvY2F0ZWRibG9ja3MiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic3lzLmdldGFsbG9jYXRlZGJsb2NrcyB1bmF2YWlsYWJsZSBvbiB0aGlzIGJ1aWxkIikKKyAgICBkZWYgdGVzdF9nZXRhbGxvY2F0ZWRibG9ja3Moc2VsZik6CisgICAgICAgICMgU29tZSBzYW5pdHkgY2hlY2tzCisgICAgICAgIHdpdGhfcHltYWxsb2MgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1dJVEhfUFlNQUxMT0MnKQorICAgICAgICBhID0gc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShhKSwgaW50KQorICAgICAgICBpZiB3aXRoX3B5bWFsbG9jOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGEsIDApCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFdoZW4gV0lUSF9QWU1BTExPQyBpc24ndCBhdmFpbGFibGUsIHdlIGRvbid0IGtub3cgYW55dGhpbmcKKyAgICAgICAgICAgICMgYWJvdXQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb246IHRoZSBmdW5jdGlvbiBtaWdodAorICAgICAgICAgICAgIyByZXR1cm4gMCBvciBzb21ldGhpbmcgZ3JlYXRlci4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKGEsIDApCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgV2hpbGUgd2UgY291bGQgaW1hZ2luZSBhIFB5dGhvbiBzZXNzaW9uIHdoZXJlIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICMgbXVsdGlwbGUgYnVmZmVyIG9iamVjdHMgd291bGQgZXhjZWVkIHRoZSBzaGFyaW5nIG9mIHJlZmVyZW5jZXMsCisgICAgICAgICAgICAjIGl0IGlzIHVubGlrZWx5IHRvIGhhcHBlbiBpbiBhIG5vcm1hbCB0ZXN0IHJ1bi4KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhhLCBzeXMuZ2V0dG90YWxyZWZjb3VudCgpKQorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICAjIGdldHRvdGFscmVmY291bnQoKSBub3QgYXZhaWxhYmxlCisgICAgICAgICAgICBwYXNzCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBiID0gc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKGIsIGEpCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBjID0gc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYywgcmFuZ2UoYiAtIDUwLCBiICsgNTApKQorCisKIEB0ZXN0LnN1cHBvcnQuY3B5dGhvbl9vbmx5CiBjbGFzcyBTaXplb2ZUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKIApAQCAtNjE0LDYgKzcyNSwzNyBAQAogICAgICAgICAjIGJ1dCBsaXN0cyBhcmUKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKFtdKSwgdnNpemUoJ1BuJykgKyBnY19oZWFkZXJfc2l6ZSkKIAorICAgIGRlZiB0ZXN0X2Vycm9ycyhzZWxmKToKKyAgICAgICAgY2xhc3MgQmFkU2l6ZW9mOgorICAgICAgICAgICAgZGVmIF9fc2l6ZW9mX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzeXMuZ2V0c2l6ZW9mLCBCYWRTaXplb2YoKSkKKworICAgICAgICBjbGFzcyBJbnZhbGlkU2l6ZW9mOgorICAgICAgICAgICAgZGVmIF9fc2l6ZW9mX18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzeXMuZ2V0c2l6ZW9mLCBJbnZhbGlkU2l6ZW9mKCkpCisgICAgICAgIHNlbnRpbmVsID0gWyJzZW50aW5lbCJdCisgICAgICAgIHNlbGYuYXNzZXJ0SXMoc3lzLmdldHNpemVvZihJbnZhbGlkU2l6ZW9mKCksIHNlbnRpbmVsKSwgc2VudGluZWwpCisKKyAgICAgICAgY2xhc3MgRmxvYXRTaXplb2Y6CisgICAgICAgICAgICBkZWYgX19zaXplb2ZfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gNC41CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc3lzLmdldHNpemVvZiwgRmxvYXRTaXplb2YoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhzeXMuZ2V0c2l6ZW9mKEZsb2F0U2l6ZW9mKCksIHNlbnRpbmVsKSwgc2VudGluZWwpCisKKyAgICAgICAgY2xhc3MgT3ZlcmZsb3dTaXplb2YoaW50KToKKyAgICAgICAgICAgIGRlZiBfX3NpemVvZl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnQoc2VsZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzeXMuZ2V0c2l6ZW9mKE92ZXJmbG93U2l6ZW9mKHN5cy5tYXhzaXplKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc3lzLm1heHNpemUgKyBzZWxmLmdjX2hlYWRzaXplKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IpOgorICAgICAgICAgICAgc3lzLmdldHNpemVvZihPdmVyZmxvd1NpemVvZihzeXMubWF4c2l6ZSArIDEpKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgc3lzLmdldHNpemVvZihPdmVyZmxvd1NpemVvZigtMSkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFZhbHVlRXJyb3IsIE92ZXJmbG93RXJyb3IpKToKKyAgICAgICAgICAgIHN5cy5nZXRzaXplb2YoT3ZlcmZsb3dTaXplb2YoLXN5cy5tYXhzaXplIC0gMSkpCisKICAgICBkZWYgdGVzdF9kZWZhdWx0KHNlbGYpOgogICAgICAgICBzaXplID0gdGVzdC5zdXBwb3J0LmNhbGN2b2Jqc2l6ZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5nZXRzaXplb2YoVHJ1ZSksIHNpemUoJycpICsgc2VsZi5sb25nZGlnaXQpCkBAIC02MzQsOSArNzc2LDEyIEBACiAgICAgICAgIHNhbXBsZXMgPSBbYicnLCBiJ3UnKjEwMDAwMF0KICAgICAgICAgZm9yIHNhbXBsZSBpbiBzYW1wbGVzOgogICAgICAgICAgICAgeCA9IGJ5dGVhcnJheShzYW1wbGUpCi0gICAgICAgICAgICBjaGVjayh4LCB2c2l6ZSgnaW5QJykgKyB4Ll9fYWxsb2NfXygpKQorICAgICAgICAgICAgY2hlY2soeCwgdnNpemUoJ24yUGknKSArIHguX19hbGxvY19fKCkpCiAgICAgICAgICMgYnl0ZWFycmF5X2l0ZXJhdG9yCiAgICAgICAgIGNoZWNrKGl0ZXIoYnl0ZWFycmF5KCkpLCBzaXplKCduUCcpKQorICAgICAgICAjIGJ5dGVzCisgICAgICAgIGNoZWNrKGInJywgdnNpemUoJ24nKSArIDEpCisgICAgICAgIGNoZWNrKGIneCcgKiAxMCwgdnNpemUoJ24nKSArIDExKQogICAgICAgICAjIGNlbGwKICAgICAgICAgZGVmIGdldF9jZWxsKCk6CiAgICAgICAgICAgICB4ID0gNDIKQEAgLTcxMyw3ICs4NTgsNyBAQAogICAgICAgICBuZnJlZXMgPSBsZW4oeC5mX2NvZGUuY29fZnJlZXZhcnMpCiAgICAgICAgIGV4dHJhcyA9IHguZl9jb2RlLmNvX3N0YWNrc2l6ZSArIHguZl9jb2RlLmNvX25sb2NhbHMgK1wKICAgICAgICAgICAgICAgICAgIG5jZWxscyArIG5mcmVlcyAtIDEKLSAgICAgICAgY2hlY2soeCwgdnNpemUoJzEyUDNpJyArIENPX01BWEJMT0NLUyonM2knICsgJ1AnICsgZXh0cmFzKidQJykpCisgICAgICAgIGNoZWNrKHgsIHZzaXplKCcxMlAzaWMnICsgQ09fTUFYQkxPQ0tTKiczaScgKyAnUCcgKyBleHRyYXMqJ1AnKSkKICAgICAgICAgIyBmdW5jdGlvbgogICAgICAgICBkZWYgZnVuYygpOiBwYXNzCiAgICAgICAgIGNoZWNrKGZ1bmMsIHNpemUoJzEyUCcpKQpAQCAtNzU2LDEwICs5MDEsOCBAQAogICAgICAgICBjaGVjayhpbnQoUHlMb25nX0JBU0UpLCB2c2l6ZSgnJykgKyAyKnNlbGYubG9uZ2RpZ2l0KQogICAgICAgICBjaGVjayhpbnQoUHlMb25nX0JBU0UqKjItMSksIHZzaXplKCcnKSArIDIqc2VsZi5sb25nZGlnaXQpCiAgICAgICAgIGNoZWNrKGludChQeUxvbmdfQkFTRSoqMiksIHZzaXplKCcnKSArIDMqc2VsZi5sb25nZGlnaXQpCi0gICAgICAgICMgbWVtb3J5dmlldwotICAgICAgICBjaGVjayhtZW1vcnl2aWV3KGInJyksIHNpemUoJ1BuaW4gMlAybjJpNVAgM2NQbicpKQogICAgICAgICAjIG1vZHVsZQotICAgICAgICBjaGVjayh1bml0dGVzdCwgc2l6ZSgnUG5QJykpCisgICAgICAgIGNoZWNrKHVuaXR0ZXN0LCBzaXplKCdQblBQUCcpKQogICAgICAgICAjIE5vbmUKICAgICAgICAgY2hlY2soTm9uZSwgc2l6ZSgnJykpCiAgICAgICAgICMgTm90SW1wbGVtZW50ZWRUeXBlCkBAIC04MTMsMTEgKzk1NiwxMSBAQAogICAgICAgICBjaGVjaygoMSwyLDMpLCB2c2l6ZSgnJykgKyAzKnNlbGYuUCkKICAgICAgICAgIyB0eXBlCiAgICAgICAgICMgc3RhdGljIHR5cGU6IFB5VHlwZU9iamVjdAotICAgICAgICBzID0gdnNpemUoJ1AybjE1UGw0UG45UG4xMVBJJykKKyAgICAgICAgcyA9IHZzaXplKCdQMm4xNVBsNFBuOVBuMTFQSVAnKQogICAgICAgICBjaGVjayhpbnQsIHMpCiAgICAgICAgICMgKFB5VHlwZU9iamVjdCArIFB5TnVtYmVyTWV0aG9kcyArIFB5TWFwcGluZ01ldGhvZHMgKwogICAgICAgICAjICBQeVNlcXVlbmNlTWV0aG9kcyArIFB5QnVmZmVyUHJvY3MgKyA0UCkKLSAgICAgICAgcyA9IHZzaXplKCdQMm4xNVBsNFBuOVBuMTFQSScpICsgc3RydWN0LmNhbGNzaXplKCczNFAgM1AgMTBQIDJQIDRQJykKKyAgICAgICAgcyA9IHZzaXplKCdQMm4xNVBsNFBuOVBuMTFQSVAnKSArIHN0cnVjdC5jYWxjc2l6ZSgnMzRQIDNQIDEwUCAyUCA0UCcpCiAgICAgICAgICMgU2VwYXJhdGUgYmxvY2sgZm9yIFB5RGljdEtleXNPYmplY3Qgd2l0aCA0IGVudHJpZXMKICAgICAgICAgcyArPSBzdHJ1Y3QuY2FsY3NpemUoIjJuUG4iKSArIDQqc3RydWN0LmNhbGNzaXplKCJuMlAiKQogICAgICAgICAjIGNsYXNzCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5c19zZXR0cmFjZS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5CmluZGV4IGYwYjBiODIuLmFlOGY4NDUgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3lzX3NldHRyYWNlLnB5CkBAIC01NzksNiArNTc5LDE1IEBACiBqdW1wX2luX25lc3RlZF9maW5hbGx5Lmp1bXAgPSAoNCwgOSkKIGp1bXBfaW5fbmVzdGVkX2ZpbmFsbHkub3V0cHV0ID0gWzIsIDldCiAKK2RlZiBqdW1wX2luZmluaXRlX3doaWxlX2xvb3Aob3V0cHV0KToKKyAgICBvdXRwdXQuYXBwZW5kKDEpCisgICAgd2hpbGUgMToKKyAgICAgICAgb3V0cHV0LmFwcGVuZCgyKQorICAgIG91dHB1dC5hcHBlbmQoMykKKworanVtcF9pbmZpbml0ZV93aGlsZV9sb29wLmp1bXAgPSAoMywgNCkKK2p1bXBfaW5maW5pdGVfd2hpbGVfbG9vcC5vdXRwdXQgPSBbMSwgM10KKwogIyBUaGUgc2Vjb25kIHNldCBvZiAnanVtcCcgdGVzdHMgYXJlIGZvciB0aGluZ3MgdGhhdCBhcmUgbm90IGFsbG93ZWQ6CiAKIGRlZiBub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMob3V0cHV0KToKQEAgLTc1NSw2ICs3NjQsOCBAQAogICAgICAgICBzZWxmLnJ1bl90ZXN0KGp1bXBfdG9fc2FtZV9saW5lKQogICAgIGRlZiB0ZXN0XzA3X2p1bXBfaW5fbmVzdGVkX2ZpbmFsbHkoc2VsZik6CiAgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9pbl9uZXN0ZWRfZmluYWxseSkKKyAgICBkZWYgdGVzdF9qdW1wX2luZmluaXRlX3doaWxlX2xvb3Aoc2VsZik6CisgICAgICAgIHNlbGYucnVuX3Rlc3QoanVtcF9pbmZpbml0ZV93aGlsZV9sb29wKQogICAgIGRlZiB0ZXN0XzA4X25vX2p1bXBfdG9vX2Zhcl9mb3J3YXJkcyhzZWxmKToKICAgICAgICAgc2VsZi5ydW5fdGVzdChub19qdW1wX3Rvb19mYXJfZm9yd2FyZHMpCiAgICAgZGVmIHRlc3RfMDlfbm9fanVtcF90b29fZmFyX2JhY2t3YXJkcyhzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc3lzY29uZmlnLnB5IGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKaW5kZXggMDNmNjdmZC4uOGVkNzI5YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zeXNjb25maWcucHkKQEAgLTUsOCArNSw4IEBACiBpbXBvcnQgc2h1dGlsCiBmcm9tIGNvcHkgaW1wb3J0IGNvcHkKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIFRFU1RGTiwgdW5saW5rLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIHNraXBfdW5sZXNzX3N5bWxpbmspCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCB1bmxpbmssIGNoZWNrX3dhcm5pbmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQsIHNraXBfdW5sZXNzX3N5bWxpbmssIGNoYW5nZV9jd2QpCiAKIGltcG9ydCBzeXNjb25maWcKIGZyb20gc3lzY29uZmlnIGltcG9ydCAoZ2V0X3BhdGhzLCBnZXRfcGxhdGZvcm0sIGdldF9jb25maWdfdmFycywKQEAgLTIzNCw3ICsyMzQsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoY29uZmlnX2gpLCBjb25maWdfaCkKIAogICAgIGRlZiB0ZXN0X2dldF9zY2hlbWVfbmFtZXMoc2VsZik6Ci0gICAgICAgIHdhbnRlZCA9ICgnbnQnLCAnbnRfdXNlcicsICdvczInLCAnb3MyX2hvbWUnLCAnb3N4X2ZyYW1ld29ya191c2VyJywKKyAgICAgICAgd2FudGVkID0gKCdudCcsICdudF91c2VyJywgJ29zeF9mcmFtZXdvcmtfdXNlcicsCiAgICAgICAgICAgICAgICAgICAncG9zaXhfaG9tZScsICdwb3NpeF9wcmVmaXgnLCAncG9zaXhfdXNlcicpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ2V0X3NjaGVtZV9uYW1lcygpLCB3YW50ZWQpCiAKQEAgLTMwNSwxNCArMzA1LDEzIEBACiAgICAgICAgIGlmICdNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQnIGluIGVudjoKICAgICAgICAgICAgIGRlbCBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnLCAndycpIGFzIGRldm51bGxfZnA6Ci0gICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbCi0gICAgICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAotICAgICAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCi0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAotICAgICAgICAgICAgICAgIHN0ZGVycj1kZXZudWxsX2ZwLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKKyAgICAgICAgICAgICAgICBzeXMuZXhlY3V0YWJsZSwgJy1jJywKKyAgICAgICAgICAgICAgICAnaW1wb3J0IHN5c2NvbmZpZzsgcHJpbnQoc3lzY29uZmlnLmdldF9wbGF0Zm9ybSgpKScsCisgICAgICAgICAgICBdLAorICAgICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICBlbnY9ZW52KQogICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKICAgICAgICAgdGVzdF9wbGF0Zm9ybSA9IHRlc3RfcGxhdGZvcm0uZGVjb2RlKCd1dGYtOCcpCiAgICAgICAgIHN0YXR1cyA9IHAud2FpdCgpCkBAIC0zMjUsMjAgKzMyNCwxOSBAQAogICAgICAgICBlbnYgPSBvcy5lbnZpcm9uLmNvcHkoKQogICAgICAgICBlbnZbJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCddID0gJzEwLjEnCiAKLSAgICAgICAgd2l0aCBvcGVuKCcvZGV2L251bGwnKSBhcyBkZXZfbnVsbDoKLSAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsKLSAgICAgICAgICAgICAgICAgICAgc3lzLmV4ZWN1dGFibGUsICctYycsCi0gICAgICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCi0gICAgICAgICAgICAgICAgc3RkZXJyPWRldl9udWxsLAotICAgICAgICAgICAgICAgIGVudj1lbnYpCi0gICAgICAgICAgICB0ZXN0X3BsYXRmb3JtID0gcC5jb21tdW5pY2F0ZSgpWzBdLnN0cmlwKCkKLSAgICAgICAgICAgIHRlc3RfcGxhdGZvcm0gPSB0ZXN0X3BsYXRmb3JtLmRlY29kZSgndXRmLTgnKQotICAgICAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKKyAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWworICAgICAgICAgICAgICAgIHN5cy5leGVjdXRhYmxlLCAnLWMnLAorICAgICAgICAgICAgICAgICdpbXBvcnQgc3lzY29uZmlnOyBwcmludChzeXNjb25maWcuZ2V0X3BsYXRmb3JtKCkpJywKKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLAorICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuREVWTlVMTCwKKyAgICAgICAgICAgIGVudj1lbnYpCisgICAgICAgIHRlc3RfcGxhdGZvcm0gPSBwLmNvbW11bmljYXRlKClbMF0uc3RyaXAoKQorICAgICAgICB0ZXN0X3BsYXRmb3JtID0gdGVzdF9wbGF0Zm9ybS5kZWNvZGUoJ3V0Zi04JykKKyAgICAgICAgc3RhdHVzID0gcC53YWl0KCkKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0dXMsIDApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15X3BsYXRmb3JtLCB0ZXN0X3BsYXRmb3JtKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChteV9wbGF0Zm9ybSwgdGVzdF9wbGF0Zm9ybSkKIAogICAgIGRlZiB0ZXN0X3NyY2RpcihzZWxmKToKICAgICAgICAgIyBTZWUgSXNzdWVzICMxNTMyMiwgIzE1MzY0LgpAQCAtMzYzLDE0ICszNjEsMzAgQEAKICAgICAgICAgIyBzcmNkaXIgc2hvdWxkIGJlIGluZGVwZW5kZW50IG9mIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5CiAgICAgICAgICMgU2VlIElzc3VlcyAjMTUzMjIsICMxNTM2NC4KICAgICAgICAgc3JjZGlyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKQotICAgICAgICBjd2QgPSBvcy5nZXRjd2QoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5jaGRpcignLi4nKQorICAgICAgICB3aXRoIGNoYW5nZV9jd2Qob3MucGFyZGlyKToKICAgICAgICAgICAgIHNyY2RpcjIgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihjd2QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3JjZGlyLCBzcmNkaXIyKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ0VYVF9TVUZGSVgnKSBpcyBOb25lLAorICAgICAgICAgICAgICAgICAgICAgJ0VYVF9TVUZGSVggcmVxdWlyZWQgZm9yIHRoaXMgdGVzdCcpCisgICAgZGVmIHRlc3RfU09fZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhciwgJ1NPJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykgaXMgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgICdFWFRfU1VGRklYIHJlcXVpcmVkIGZvciB0aGlzIHRlc3QnKQorICAgIGRlZiB0ZXN0X1NPX3ZhbHVlKHNlbGYpOgorICAgICAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdFWFRfU1VGRklYJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignRVhUX1NVRkZJWCcpIGlzIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAnRVhUX1NVRkZJWCByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0JykKKyAgICBkZWYgdGVzdF9TT19pbl92YXJzKHNlbGYpOgorICAgICAgICB2YXJzID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFycygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHZhcnNbJ1NPJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodmFyc1snU08nXSwgdmFyc1snRVhUX1NVRkZJWCddKQorCiAKIGNsYXNzIE1ha2VmaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weSBiL0xpYi90ZXN0L3Rlc3Rfc3lzbG9nLnB5CmluZGV4IDRlNzYyMWU1Li5iN2ZkMmJkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3N5c2xvZy5weQpAQCAtMzIsNiArMzIsMTAgQEAKICAgICBkZWYgdGVzdF9sb2dfdXB0byhzZWxmKToKICAgICAgICAgc3lzbG9nLkxPR19VUFRPKHN5c2xvZy5MT0dfSU5GTykKIAorICAgIGRlZiB0ZXN0X29wZW5sb2dfbm9hcmdzKHNlbGYpOgorICAgICAgICBzeXNsb2cub3BlbmxvZygpCisgICAgICAgIHN5c2xvZy5zeXNsb2coJ3Rlc3QgbWVzc2FnZSBmcm9tIHB5dGhvbiB0ZXN0X3N5c2xvZycpCisKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChfX25hbWVfXykKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5IGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CmluZGV4IDY4ZmU2MDguLjMwOTFjZTcgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKQEAgLTEsMTMgKzEsMTIgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IGlvCi1pbXBvcnQgc2h1dGlsCiBmcm9tIGhhc2hsaWIgaW1wb3J0IG1kNQogCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0YXJmaWxlCiAKLWZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0LCBzY3JpcHRfaGVscGVyCiAKICMgQ2hlY2sgZm9yIG91ciBjb21wcmVzc2lvbiBtb2R1bGVzLgogdHJ5OgpAQCAtMjcsMTEgKzI2LDEzIEBACiAgICAgcmV0dXJuIG1kNShkYXRhKS5oZXhkaWdlc3QoKQogCiBURU1QRElSID0gb3MucGF0aC5hYnNwYXRoKHN1cHBvcnQuVEVTVEZOKSArICItdGFyZGlyIgordGFyZXh0ZGlyID0gVEVNUERJUiArICctZXh0cmFjdC10ZXN0JwogdGFybmFtZSA9IHN1cHBvcnQuZmluZGZpbGUoInRlc3R0YXIudGFyIikKIGd6aXBuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyLnRhci5neiIpCiBiejJuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyLnRhci5iejIiKQogeHpuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyLnRhci54eiIpCiB0bXBuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0bXAudGFyIikKK2RvdGxlc3NuYW1lID0gb3MucGF0aC5qb2luKFRFTVBESVIsICJ0ZXN0dGFyIikKIAogbWQ1X3JlZ3R5cGUgPSAiNjVmNDc3YzgxOGFkOWUxNWY3ZmVhYjBjNmQzNzc0MmYiCiBtZDVfc3BhcnNlID0gImE1NGZiYzRjYTRmNDM5OWE5MGUxYjI3MTY0MDEyZmM2IgpAQCAtMjcxLDcgKzI3Miw3IEBACiAgICAgICAgICMgP3J3LXItLXItLSB0YXJmaWxlL3RhcmZpbGUgICAgIDcwMTEgMjAwMy0wMS0wNiAwNzoxOTo0MyB1c3Rhci9jb250dHlwZQogICAgICAgICAjID9ydy1yLS1yLS0gdGFyZmlsZS90YXJmaWxlICAgICA3MDExIDIwMDMtMDEtMDYgMDc6MTk6NDMgdXN0YXIvcmVndHlwZQogICAgICAgICAjIC4uLgotICAgICAgICBzZWxmLmFzc2VydFJlZ2V4KG91dCwgKGJyJy1ydy1yLS1yLS0gdGFyZmlsZS90YXJmaWxlXHMrNzAxMSAnCisgICAgICAgIHNlbGYuYXNzZXJ0UmVnZXgob3V0LCAoYnInXD9ydy1yLS1yLS0gdGFyZmlsZS90YXJmaWxlXHMrNzAxMSAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnInXGR7NH0tXGRcZC1cZFxkXHMrXGRcZDpcZFxkOlxkXGQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyJ3VzdGFyL1x3K3R5cGUgP1xyP1xuJykgKiAyKQogICAgICAgICAjIE1ha2Ugc3VyZSBpdCBwcmludHMgdGhlIHNvdXJjZSBvZiBsaW5rIHdpdGggdmVyYm9zZSBmbGFnCkBAIC0zMTksMTIgKzMyMCw3IEBACiAgICAgZGVmIHRlc3Rfbm9uX2V4aXN0ZW50X3RhcmZpbGUoc2VsZik6CiAgICAgICAgICMgVGVzdCBmb3IgaXNzdWUxMTUxMzogcHJldmVudCBub24tZXhpc3RlbnQgZ3ppcHBlZCB0YXJmaWxlcyByYWlzaW5nCiAgICAgICAgICMgbXVsdGlwbGUgZXhjZXB0aW9ucy4KLSAgICAgICAgdGVzdCA9ICd4eHgnCi0gICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInIGFuZCAnfCcgaW4gc2VsZi5tb2RlOgotICAgICAgICAgICAgIyBJc3N1ZSAjMjAzODQ6IE9uIFdpbmRvd3Mgb3Mub3BlbigpIGVycm9yIG1lc3NhZ2UgZG9lc24ndAotICAgICAgICAgICAgIyBjb250YWluIGZpbGUgbmFtZS4KLSAgICAgICAgICAgIHRlc3QgPSAnJwotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRmlsZU5vdEZvdW5kRXJyb3IsIHRlc3QpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRmlsZU5vdEZvdW5kRXJyb3IsICJ4eHgiKToKICAgICAgICAgICAgIHRhcmZpbGUub3BlbigieHh4Iiwgc2VsZi5tb2RlKQogCiAgICAgZGVmIHRlc3RfbnVsbF90YXJmaWxlKHNlbGYpOgpAQCAtMzUzLDEyICszNDksNDEgQEAKICAgICAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAorICAgIGRlZiB0ZXN0X3ByZW1hdHVyZV9lbmRfb2ZfYXJjaGl2ZShzZWxmKToKKyAgICAgICAgZm9yIHNpemUgaW4gKDUxMiwgNjAwLCAxMDI0LCAxMjAwKToKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3OiIpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICB0ID0gdGFyZmlsZS5UYXJJbmZvKCJmb28iKQorICAgICAgICAgICAgICAgIHQuc2l6ZSA9IDEwMjQKKyAgICAgICAgICAgICAgICB0YXIuYWRkZmlsZSh0LCBpby5CeXRlc0lPKGIiYSIgKiAxMDI0KSkKKworICAgICAgICAgICAgd2l0aCBvcGVuKHRtcG5hbWUsICJyK2IiKSBhcyBmb2JqOgorICAgICAgICAgICAgICAgIGZvYmoudHJ1bmNhdGUoc2l6ZSkKKworICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCh0YXJmaWxlLlJlYWRFcnJvciwgInVuZXhwZWN0ZWQgZW5kIG9mIGRhdGEiKToKKyAgICAgICAgICAgICAgICAgICAgZm9yIHQgaW4gdGFyOgorICAgICAgICAgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0bXBuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdCA9IHRhci5uZXh0KCkKKworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCh0YXJmaWxlLlJlYWRFcnJvciwgInVuZXhwZWN0ZWQgZW5kIG9mIGRhdGEiKToKKyAgICAgICAgICAgICAgICAgICAgdGFyLmV4dHJhY3QodCwgVEVNUERJUikKKworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleCh0YXJmaWxlLlJlYWRFcnJvciwgInVuZXhwZWN0ZWQgZW5kIG9mIGRhdGEiKToKKyAgICAgICAgICAgICAgICAgICAgdGFyLmV4dHJhY3RmaWxlKHQpLnJlYWQoKQogCiBjbGFzcyBNaXNjUmVhZFRlc3RCYXNlKENvbW1vblJlYWRUZXN0KToKKyAgICBkZWYgcmVxdWlyZXNfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHBhc3MKKwogICAgIGRlZiB0ZXN0X25vX25hbWVfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHNlbGYucmVxdWlyZXNfbmFtZV9hdHRyaWJ1dGUoKQogICAgICAgICB3aXRoIG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKSBhcyBmb2JqOgotICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5uYW1lLCBvcy5wYXRoLmFic3BhdGgoZm9iai5uYW1lKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb2JqLm5hbWUsIHN0cikKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGZpbGVvYmo9Zm9iaiwgbW9kZT1zZWxmLm1vZGUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodGFyLm5hbWUsIHN0cikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5uYW1lLCBvcy5wYXRoLmFic3BhdGgoZm9iai5uYW1lKSkKIAogICAgIGRlZiB0ZXN0X25vX25hbWVfYXR0cmlidXRlKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKSBhcyBmb2JqOgpAQCAtMzY2LDcgKzM5MSw3IEBACiAgICAgICAgIGZvYmogPSBpby5CeXRlc0lPKGRhdGEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBmb2JqLCAibmFtZSIpCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3BlbihmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5uYW1lLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh0YXIubmFtZSkKIAogICAgIGRlZiB0ZXN0X2VtcHR5X25hbWVfYXR0cmlidXRlKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4oc2VsZi50YXJuYW1lLCAicmIiKSBhcyBmb2JqOgpAQCAtMzc0LDcgKzM5OSwyNSBAQAogICAgICAgICBmb2JqID0gaW8uQnl0ZXNJTyhkYXRhKQogICAgICAgICBmb2JqLm5hbWUgPSAiIgogICAgICAgICB3aXRoIHRhcmZpbGUub3BlbihmaWxlb2JqPWZvYmosIG1vZGU9c2VsZi5tb2RlKSBhcyB0YXI6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5uYW1lLCBOb25lKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodGFyLm5hbWUpCisKKyAgICBkZWYgdGVzdF9pbnRfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgICMgSXNzdWUgMjEwNDQ6IHRhcmZpbGUub3BlbigpIHNob3VsZCBoYW5kbGUgZmlsZW9iaiB3aXRoIGFuIGludGVnZXIKKyAgICAgICAgIyAnbmFtZScgYXR0cmlidXRlLgorICAgICAgICBmZCA9IG9zLm9wZW4oc2VsZi50YXJuYW1lLCBvcy5PX1JET05MWSkKKyAgICAgICAgd2l0aCBvcGVuKGZkLCAncmInKSBhcyBmb2JqOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvYmoubmFtZSwgaW50KQorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHRhci5uYW1lKQorCisgICAgZGVmIHRlc3RfYnl0ZXNfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHNlbGYucmVxdWlyZXNfbmFtZV9hdHRyaWJ1dGUoKQorICAgICAgICB0YXJuYW1lID0gb3MuZnNlbmNvZGUoc2VsZi50YXJuYW1lKQorICAgICAgICB3aXRoIG9wZW4odGFybmFtZSwgJ3JiJykgYXMgZm9iajoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb2JqLm5hbWUsIGJ5dGVzKQorICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4oZmlsZW9iaj1mb2JqLCBtb2RlPXNlbGYubW9kZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh0YXIubmFtZSwgYnl0ZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIubmFtZSwgb3MucGF0aC5hYnNwYXRoKGZvYmoubmFtZSkpCiAKICAgICBkZWYgdGVzdF9pbGxlZ2FsX21vZGVfYXJnKHNlbGYpOgogICAgICAgICB3aXRoIG9wZW4odG1wbmFtZSwgJ3diJyk6CkBAIC00NTksMTYgKzUwMiwxNiBAQAogICAgICAgICAjIFRlc3QgaGFyZGxpbmsgZXh0cmFjdGlvbiAoZS5nLiBidWcgIzg1NzI5NykuCiAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVycm9ybGV2ZWw9MSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpIGFzIHRhcjoKICAgICAgICAgICAgIHRhci5leHRyYWN0KCJ1c3Rhci9yZWd0eXBlIiwgVEVNUERJUikKLSAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5yZW1vdmUsIG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvcmVndHlwZSIpKQorICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3JlZ3R5cGUiKSkKIAogICAgICAgICAgICAgdGFyLmV4dHJhY3QoInVzdGFyL2xua3R5cGUiLCBURU1QRElSKQotICAgICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLnJlbW92ZSwgb3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9sbmt0eXBlIikpCisgICAgICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvbG5rdHlwZSIpKQogICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURU1QRElSLCAidXN0YXIvbG5rdHlwZSIpLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtZDVzdW0oZGF0YSksIG1kNV9yZWd0eXBlKQogCiAgICAgICAgICAgICB0YXIuZXh0cmFjdCgidXN0YXIvc3ltdHlwZSIsIFRFTVBESVIpCi0gICAgICAgICAgICBzZWxmLmFkZENsZWFudXAob3MucmVtb3ZlLCBvcy5wYXRoLmpvaW4oVEVNUERJUiwgInVzdGFyL3N5bXR5cGUiKSkKKyAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgb3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9zeW10eXBlIikpCiAgICAgICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKFRFTVBESVIsICJ1c3Rhci9zeW10eXBlIiksICJyYiIpIGFzIGY6CiAgICAgICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1kNXN1bShkYXRhKSwgbWQ1X3JlZ3R5cGUpCkBAIC01MDEsNyArNTQ0LDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubXRpbWUsIGZpbGVfbXRpbWUsIGVycm1zZykKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHRhci5jbG9zZSgpCi0gICAgICAgICAgICBzaHV0aWwucm10cmVlKERJUikKKyAgICAgICAgICAgIHN1cHBvcnQucm10cmVlKERJUikKIAogICAgIGRlZiB0ZXN0X2V4dHJhY3RfZGlyZWN0b3J5KHNlbGYpOgogICAgICAgICBkaXJ0eXBlID0gInVzdGFyL2RpcnR5cGUiCkBAIC01MTYsNyArNTU5LDcgQEAKICAgICAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gIT0gIndpbjMyIjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5zdGF0KGV4dHJhY3RlZCkuc3RfbW9kZSAmIDBvNzc3LCAwbzc1NSkKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoRElSKQorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUoRElSKQogCiAgICAgZGVmIHRlc3RfaW5pdF9jbG9zZV9mb2JqKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3MzQxOiBDbG9zZSB0aGUgaW50ZXJuYWwgZmlsZSBvYmplY3QgaW4gdGhlIFRhckZpbGUKQEAgLTU1MiwxMSArNTk1LDExIEBACiAgICAgcGFzcwogCiBjbGFzcyBCejJNaXNjUmVhZFRlc3QoQnoyVGVzdCwgTWlzY1JlYWRUZXN0QmFzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGRlZiB0ZXN0X25vX25hbWVfYXJndW1lbnQoc2VsZik6CisgICAgZGVmIHJlcXVpcmVzX25hbWVfYXR0cmlidXRlKHNlbGYpOgogICAgICAgICBzZWxmLnNraXBUZXN0KCJCWjJGaWxlIGhhdmUgbm8gbmFtZSBhdHRyaWJ1dGUiKQogCiBjbGFzcyBMem1hTWlzY1JlYWRUZXN0KEx6bWFUZXN0LCBNaXNjUmVhZFRlc3RCYXNlLCB1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgZGVmIHRlc3Rfbm9fbmFtZV9hcmd1bWVudChzZWxmKToKKyAgICBkZWYgcmVxdWlyZXNfbmFtZV9hdHRyaWJ1dGUoc2VsZik6CiAgICAgICAgIHNlbGYuc2tpcFRlc3QoIkxaTUFGaWxlIGhhdmUgbm8gbmFtZSBhdHRyaWJ1dGUiKQogCiAKQEAgLTg4MCw3ICs5MjMsNyBAQAogICAgICAgICAgICAgICAgIGZvYmouc2Vlayg0MDk2KQogICAgICAgICAgICAgICAgIGZvYmoudHJ1bmNhdGUoKQogICAgICAgICAgICAgcyA9IG9zLnN0YXQobmFtZSkKLSAgICAgICAgICAgIG9zLnJlbW92ZShuYW1lKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsobmFtZSkKICAgICAgICAgICAgIHJldHVybiBzLnN0X2Jsb2NrcyA9PSAwCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTEwMTMsNyArMTA1Niw3IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5ybWRpcihwYXRoKQorICAgICAgICAgICAgc3VwcG9ydC5ybWRpcihwYXRoKQogCiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgImxpbmsiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAiTWlzc2luZyBoYXJkbGluayBpbXBsZW1lbnRhdGlvbiIpCkBAIC0xMDMzLDggKzEwNzYsOCBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MucmVtb3ZlKHRhcmdldCkKLSAgICAgICAgICAgIG9zLnJlbW92ZShsaW5rKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGFyZ2V0KQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsobGluaykKIAogICAgIEBzdXBwb3J0LnNraXBfdW5sZXNzX3N5bWxpbmsKICAgICBkZWYgdGVzdF9zeW1saW5rX3NpemUoc2VsZik6CkBAIC0xMDQ4LDcgKzEwOTEsNyBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MucmVtb3ZlKHBhdGgpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayhwYXRoKQogCiAgICAgZGVmIHRlc3RfYWRkX3NlbGYoc2VsZik6CiAgICAgICAgICMgVGVzdCBmb3IgIzEyNTcyNTUuCkBAIC0xMDYxLDEwICsxMTA0LDggQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmdldG5hbWVzKCksIFtdLAogICAgICAgICAgICAgICAgICAgICAiYWRkZWQgdGhlIGFyY2hpdmUgdG8gaXRzZWxmIikKIAotICAgICAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIG9zLmNoZGlyKFRFTVBESVIpCi0gICAgICAgICAgICB0YXIuYWRkKGRzdG5hbWUpCi0gICAgICAgICAgICBvcy5jaGRpcihjd2QpCisgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChURU1QRElSKToKKyAgICAgICAgICAgICAgICB0YXIuYWRkKGRzdG5hbWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRuYW1lcygpLCBbXSwKICAgICAgICAgICAgICAgICAgICAgImFkZGVkIHRoZSBhcmNoaXZlIHRvIGl0c2VsZiIpCiAgICAgICAgIGZpbmFsbHk6CkBAIC0xMDk1LDcgKzExMzYsNyBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGVtcGRpcikKIAogICAgIGRlZiB0ZXN0X2ZpbHRlcihzZWxmKToKICAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbihURU1QRElSLCAiZmlsdGVyIikKQEAgLTExMzEsNyArMTE3Miw3IEBACiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCiAgICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBzaHV0aWwucm10cmVlKHRlbXBkaXIpCisgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSh0ZW1wZGlyKQogCiAgICAgIyBHdWFyYW50ZWUgdGhhdCBzdG9yZWQgcGF0aG5hbWVzIGFyZSBub3QgbW9kaWZpZWQuIERvbid0CiAgICAgIyByZW1vdmUgLi8gb3IgLi4vIG9yIGRvdWJsZSBzbGFzaGVzLiBTdGlsbCBtYWtlIGFic29sdXRlCkBAIC0xMTU5LDkgKzEyMDAsOSBAQAogICAgICAgICAgICAgdGFyLmNsb3NlKCkKIAogICAgICAgICBpZiBub3QgZGlyOgotICAgICAgICAgICAgb3MucmVtb3ZlKGZvbykKKyAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKGZvbykKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIG9zLnJtZGlyKGZvbykKKyAgICAgICAgICAgIHN1cHBvcnQucm1kaXIoZm9vKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5uYW1lLCBjbXBfcGF0aCBvciBwYXRoLnJlcGxhY2Uob3Muc2VwLCAiLyIpKQogCkBAIC0xMTkyLDggKzEyMzMsOCBAQAogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICB0YXIuY2xvc2UoKQogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgb3MudW5saW5rKHRlbXBhcmNoaXZlKQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSh0ZW1wZGlyKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGVtcGFyY2hpdmUpCisgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSh0ZW1wZGlyKQogCiAgICAgZGVmIHRlc3RfcGF0aG5hbWVzKHNlbGYpOgogICAgICAgICBzZWxmLl90ZXN0X3BhdGhuYW1lKCJmb28iKQpAQCAtMTIyMSw5ICsxMjYyLDcgQEAKIAogICAgIGRlZiB0ZXN0X2N3ZChzZWxmKToKICAgICAgICAgIyBUZXN0IGFkZGluZyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KLSAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgb3MuY2hkaXIoVEVNUERJUikKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIHN1cHBvcnQuY2hhbmdlX2N3ZChURU1QRElSKToKICAgICAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBzZWxmLm1vZGUpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgdGFyLmFkZCgiLiIpCkBAIC0xMjM3LDggKzEyNzYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQubmFtZS5zdGFydHN3aXRoKCIuLyIpLCB0Lm5hbWUpCiAgICAgICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgICAgIHRhci5jbG9zZSgpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBvcy5jaGRpcihjd2QpCiAKICAgICBkZWYgdGVzdF9vcGVuX25vbndyaXRhYmxlX2ZpbGVvYmooc2VsZik6CiAgICAgICAgIGZvciBleGN0eXBlIGluIE9TRXJyb3IsIEVPRkVycm9yLCBSdW50aW1lRXJyb3I6CkBAIC0xMjkzLDcgKzEzMzAsNyBAQAogICAgICAgICAjIFRlc3QgZm9yIGlzc3VlICM4NDY0OiBDcmVhdGUgZmlsZXMgd2l0aCBjb3JyZWN0CiAgICAgICAgICMgcGVybWlzc2lvbnMuCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHRtcG5hbWUpOgotICAgICAgICAgICAgb3MucmVtb3ZlKHRtcG5hbWUpCisgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQogCiAgICAgICAgIG9yaWdpbmFsX3VtYXNrID0gb3MudW1hc2soMG8wMjIpCiAgICAgICAgIHRyeToKQEAgLTE2NDcsNyArMTY4NCw3IEBACiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLnRhcm5hbWUgPSB0bXBuYW1lCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYudGFybmFtZSk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUoc2VsZi50YXJuYW1lKQorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoc2VsZi50YXJuYW1lKQogCiAgICAgZGVmIF9jcmVhdGVfdGVzdHRhcihzZWxmLCBtb2RlPSJ3OiIpOgogICAgICAgICB3aXRoIHRhcmZpbGUub3Blbih0YXJuYW1lLCBlbmNvZGluZz0iaXNvODg1OS0xIikgYXMgc3JjOgpAQCAtMTgyMiw2ICsxODU5LDEwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZmlsZS5udGkoYiJceGZmXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpLAogICAgICAgICAgICAgICAgICAgICAgICAgIC0weDEwMDAwMDAwMDAwMDAwMCkKIAorICAgICAgICAjIElzc3VlIDI0NTE0OiBUZXN0IGlmIGVtcHR5IG51bWJlciBmaWVsZHMgYXJlIGNvbnZlcnRlZCB0byB6ZXJvLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmZpbGUubnRpKGIiXDAiKSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJmaWxlLm50aShiIiAgICAgICBcMCIpLCAwKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVfbnVtYmVyX2ZpZWxkcyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJmaWxlLml0bigxKSwgYiIwMDAwMDAxXHgwMCIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyZmlsZS5pdG4oMG83Nzc3Nzc3KSwgYiI3Nzc3Nzc3XHgwMCIpCkBAIC0xODQ3LDYgKzE4ODgsMTg2IEBACiAgICAgICAgICAgICB0YXJmaWxlLml0bigweDEwMDAwMDAwMDAwLCA2LCB0YXJmaWxlLkdOVV9GT1JNQVQpCiAKIAorY2xhc3MgQ29tbWFuZExpbmVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiB0YXJmaWxlY21kKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNjcmlwdF9oZWxwZXIuYXNzZXJ0X3B5dGhvbl9vaygnLW0nLCAndGFyZmlsZScsICphcmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiprd2FyZ3MpCisgICAgICAgIHJldHVybiBvdXQucmVwbGFjZShvcy5saW5lc2VwLmVuY29kZSgpLCBiJ1xuJykKKworICAgIGRlZiB0YXJmaWxlY21kX2ZhaWx1cmUoc2VsZiwgKmFyZ3MpOgorICAgICAgICByZXR1cm4gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX2ZhaWx1cmUoJy1tJywgJ3RhcmZpbGUnLCAqYXJncykKKworICAgIGRlZiBtYWtlX3NpbXBsZV90YXJmaWxlKHNlbGYsIHRhcl9uYW1lKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyksCisgICAgICAgICAgICAgICAgIHN1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLW5vLWNvZGluZy1jb29raWUtJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbmQtdXRmOC1ib20tc2lnLW9ubHkudHh0JyldCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChzdXBwb3J0LnVubGluaywgdGFyX25hbWUpCisgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lLCAndycpIGFzIHRmOgorICAgICAgICAgICAgZm9yIHRhcmRhdGEgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgdGYuYWRkKHRhcmRhdGEsIGFyY25hbWU9b3MucGF0aC5iYXNlbmFtZSh0YXJkYXRhKSkKKworICAgIGRlZiB0ZXN0X3Rlc3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgZm9yIHRhcl9uYW1lIGluIHRlc3R0YXJuYW1lczoKKyAgICAgICAgICAgIGZvciBvcHQgaW4gJy10JywgJy0tdGVzdCc6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgdGFyX25hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKworICAgIGRlZiB0ZXN0X3Rlc3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLXQnLCB0YXJfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGInaXMgYSB0YXIgYXJjaGl2ZS5cbicsIG91dCkKKworICAgIGRlZiB0ZXN0X3Rlc3RfY29tbWFuZF9pbnZhbGlkX2ZpbGUoc2VsZik6CisgICAgICAgIHppcG5hbWUgPSBzdXBwb3J0LmZpbmRmaWxlKCd6aXBkaXIuemlwJykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2VsZi50YXJmaWxlY21kX2ZhaWx1cmUoJy10JywgemlwbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBpcyBub3QgYSB0YXIgYXJjaGl2ZS4nLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCisKKyAgICAgICAgZm9yIHRhcl9uYW1lIGluIHRlc3R0YXJuYW1lczoKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KHRhcl9uYW1lPXRhcl9uYW1lKToKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGFyX25hbWUsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHRtcG5hbWUsICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICBmLndyaXRlKGRhdGFbOjUxMV0pCisgICAgICAgICAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctdCcsIHRtcG5hbWUpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDEpCisgICAgICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodG1wbmFtZSkKKworICAgIGRlZiB0ZXN0X2xpc3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgZm9yIHRhcl9uYW1lIGluIHRlc3R0YXJuYW1lczoKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyB0OgorICAgICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lLCAncicpIGFzIHRmOgorICAgICAgICAgICAgICAgICAgICB0Zi5saXN0KHZlcmJvc2U9RmFsc2UpCisgICAgICAgICAgICBleHBlY3RlZCA9IHQuZ2V0dmFsdWUoKS5lbmNvZGUoJ2FzY2lpJywgJ2JhY2tzbGFzaHJlcGxhY2UnKQorICAgICAgICAgICAgZm9yIG9wdCBpbiAnLWwnLCAnLS1saXN0JzoKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCB0YXJfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlUSE9OSU9FTkNPRElORz0nYXNjaWknKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X2xpc3RfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmb3IgdGFyX25hbWUgaW4gdGVzdHRhcm5hbWVzOgorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZG91dCgpIGFzIHQ6CisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFyX25hbWUsICdyJykgYXMgdGY6CisgICAgICAgICAgICAgICAgICAgIHRmLmxpc3QodmVyYm9zZT1UcnVlKQorICAgICAgICAgICAgZXhwZWN0ZWQgPSB0LmdldHZhbHVlKCkuZW5jb2RlKCdhc2NpaScsICdiYWNrc2xhc2hyZXBsYWNlJykKKyAgICAgICAgICAgIGZvciBvcHQgaW4gJy12JywgJy0tdmVyYm9zZSc6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgJy1sJywgdGFyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZVEhPTklPRU5DT0RJTkc9J2FzY2lpJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9saXN0X2NvbW1hbmRfaW52YWxpZF9maWxlKHNlbGYpOgorICAgICAgICB6aXBuYW1lID0gc3VwcG9ydC5maW5kZmlsZSgnemlwZGlyLnppcCcpCisgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctbCcsIHppcG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgaXMgbm90IGEgdGFyIGFyY2hpdmUuJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmQoc2VsZik6CisgICAgICAgIGZpbGVzID0gW3N1cHBvcnQuZmluZGZpbGUoJ3Rva2VuaXplX3Rlc3RzLnR4dCcpLAorICAgICAgICAgICAgICAgICBzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy1uby1jb2RpbmctY29va2llLScKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYW5kLXV0ZjgtYm9tLXNpZy1vbmx5LnR4dCcpXQorICAgICAgICBmb3Igb3B0IGluICctYycsICctLWNyZWF0ZSc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgb3V0ID0gc2VsZi50YXJmaWxlY21kKG9wdCwgdG1wbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odG1wbmFtZSkgYXMgdGFyOgorICAgICAgICAgICAgICAgICAgICB0YXIuZ2V0bWVtYmVycygpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIHN1cHBvcnQudW5saW5rKHRtcG5hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF92ZXJib3NlKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgZm9yIG9wdCBpbiAnLXYnLCAnLS12ZXJib3NlJzoKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWMnLCB0bXBuYW1lLCAqZmlsZXMpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJyBmaWxlIGNyZWF0ZWQuJywgb3V0KQorICAgICAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRtcG5hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0bXBuYW1lKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2NvbW1hbmRfZG90bGVzc19maWxlbmFtZShzZWxmKToKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCBkb3RsZXNzbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKGRvdGxlc3NuYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoZG90bGVzc25hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9kb3Rfc3RhcnRlZF9maWxlbmFtZShzZWxmKToKKyAgICAgICAgdGFyX25hbWUgPSBvcy5wYXRoLmpvaW4oVEVNUERJUiwgIi50ZXN0dGFyIikKKyAgICAgICAgZmlsZXMgPSBbc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMudHh0JyldCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWMnLCB0YXJfbmFtZSwgKmZpbGVzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIHdpdGggdGFyZmlsZS5vcGVuKHRhcl9uYW1lKSBhcyB0YXI6CisgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsodGFyX25hbWUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY29tbWFuZF9jb21wcmVzc2VkKHNlbGYpOgorICAgICAgICBmaWxlcyA9IFtzdXBwb3J0LmZpbmRmaWxlKCd0b2tlbml6ZV90ZXN0cy50eHQnKSwKKyAgICAgICAgICAgICAgICAgc3VwcG9ydC5maW5kZmlsZSgndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FuZC11dGY4LWJvbS1zaWctb25seS50eHQnKV0KKyAgICAgICAgZm9yIGZpbGV0eXBlIGluIChHemlwVGVzdCwgQnoyVGVzdCwgTHptYVRlc3QpOgorICAgICAgICAgICAgaWYgbm90IGZpbGV0eXBlLm9wZW46CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICB0YXJfbmFtZSA9IHRtcG5hbWUgKyAnLicgKyBmaWxldHlwZS5zdWZmaXgKKyAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQoJy1jJywgdGFyX25hbWUsICpmaWxlcykKKyAgICAgICAgICAgICAgICB3aXRoIGZpbGV0eXBlLnRhcm9wZW4odGFyX25hbWUpIGFzIHRhcjoKKyAgICAgICAgICAgICAgICAgICAgdGFyLmdldG1lbWJlcnMoKQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnVubGluayh0YXJfbmFtZSkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3RfY29tbWFuZChzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3NpbXBsZV90YXJmaWxlKHRtcG5hbWUpCisgICAgICAgIGZvciBvcHQgaW4gJy1lJywgJy0tZXh0cmFjdCc6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnRlbXBfY3dkKHRhcmV4dGRpcik6CisgICAgICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZChvcHQsIHRtcG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX3ZlcmJvc2Uoc2VsZik6CisgICAgICAgIHNlbGYubWFrZV9zaW1wbGVfdGFyZmlsZSh0bXBuYW1lKQorICAgICAgICBmb3Igb3B0IGluICctdicsICctLXZlcmJvc2UnOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgICAgICBvdXQgPSBzZWxmLnRhcmZpbGVjbWQob3B0LCAnLWUnLCB0bXBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgZmlsZSBpcyBleHRyYWN0ZWQuJywgb3V0KQorICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBzdXBwb3J0LnJtdHJlZSh0YXJleHRkaXIpCisKKyAgICBkZWYgdGVzdF9leHRyYWN0X2NvbW1hbmRfZGlmZmVyZW50X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3NpbXBsZV90YXJmaWxlKHRtcG5hbWUpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC50ZW1wX2N3ZCh0YXJleHRkaXIpOgorICAgICAgICAgICAgICAgIG91dCA9IHNlbGYudGFyZmlsZWNtZCgnLWUnLCB0bXBuYW1lLCAnc3BhbWRpcicpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3VwcG9ydC5ybXRyZWUodGFyZXh0ZGlyKQorCisgICAgZGVmIHRlc3RfZXh0cmFjdF9jb21tYW5kX2ludmFsaWRfZmlsZShzZWxmKToKKyAgICAgICAgemlwbmFtZSA9IHN1cHBvcnQuZmluZGZpbGUoJ3ppcGRpci56aXAnKQorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9jd2QodGFyZXh0ZGlyKToKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IHNlbGYudGFyZmlsZWNtZF9mYWlsdXJlKCctZScsIHppcG5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oYicgaXMgbm90IGEgdGFyIGFyY2hpdmUuJywgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAxKQorCisKIGNsYXNzIENvbnRleHRNYW5hZ2VyVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgdGVzdF9iYXNpYyhzZWxmKToKQEAgLTE4NTUsMjAgKzIwNzYsMjAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHRhci5jbG9zZWQsICJjb250ZXh0IG1hbmFnZXIgZmFpbGVkIikKIAogICAgIGRlZiB0ZXN0X2Nsb3NlZChzZWxmKToKLSAgICAgICAgIyBUaGUgX19lbnRlcl9fKCkgbWV0aG9kIGlzIHN1cHBvc2VkIHRvIHJhaXNlIElPRXJyb3IKKyAgICAgICAgIyBUaGUgX19lbnRlcl9fKCkgbWV0aG9kIGlzIHN1cHBvc2VkIHRvIHJhaXNlIE9TRXJyb3IKICAgICAgICAgIyBpZiB0aGUgVGFyRmlsZSBvYmplY3QgaXMgYWxyZWFkeSBjbG9zZWQuCiAgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lKQogICAgICAgICB0YXIuY2xvc2UoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IpOgogICAgICAgICAgICAgd2l0aCB0YXI6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNlbGYpOgotICAgICAgICAjIFRlc3QgaWYgdGhlIElPRXJyb3IgZXhjZXB0aW9uIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5LgorICAgICAgICAjIFRlc3QgaWYgdGhlIE9TRXJyb3IgZXhjZXB0aW9uIGlzIHBhc3NlZCB0aHJvdWdoIHByb3Blcmx5LgogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbikgYXMgZXhjOgogICAgICAgICAgICAgd2l0aCB0YXJmaWxlLm9wZW4odGFybmFtZSkgYXMgdGFyOgotICAgICAgICAgICAgICAgIHJhaXNlIElPRXJyb3IKLSAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGV4Yy5leGNlcHRpb24sIElPRXJyb3IsCisgICAgICAgICAgICAgICAgcmFpc2UgT1NFcnJvcgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXhjLmV4Y2VwdGlvbiwgT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cm9uZyBleGNlcHRpb24gcmFpc2VkIGluIGNvbnRleHQgbWFuYWdlciIpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0YXIuY2xvc2VkLCAiY29udGV4dCBtYW5hZ2VyIGZhaWxlZCIpCiAKQEAgLTE5NzQsNiArMjE5NSw4IEBACiAgICAgc3VwcG9ydC51bmxpbmsoVEVNUERJUikKICAgICBvcy5tYWtlZGlycyhURU1QRElSKQogCisgICAgZ2xvYmFsIHRlc3R0YXJuYW1lcworICAgIHRlc3R0YXJuYW1lcyA9IFt0YXJuYW1lXQogICAgIHdpdGggb3Blbih0YXJuYW1lLCAicmIiKSBhcyBmb2JqOgogICAgICAgICBkYXRhID0gZm9iai5yZWFkKCkKIApAQCAtMTk4MSwxMiArMjIwNCwxMyBAQAogICAgIGZvciBjIGluIEd6aXBUZXN0LCBCejJUZXN0LCBMem1hVGVzdDoKICAgICAgICAgaWYgYy5vcGVuOgogICAgICAgICAgICAgc3VwcG9ydC51bmxpbmsoYy50YXJuYW1lKQorICAgICAgICAgICAgdGVzdHRhcm5hbWVzLmFwcGVuZChjLnRhcm5hbWUpCiAgICAgICAgICAgICB3aXRoIGMub3BlbihjLnRhcm5hbWUsICJ3YiIpIGFzIHRhcjoKICAgICAgICAgICAgICAgICB0YXIud3JpdGUoZGF0YSkKIAogZGVmIHRlYXJEb3duTW9kdWxlKCk6CiAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVNUERJUik6Ci0gICAgICAgIHNodXRpbC5ybXRyZWUoVEVNUERJUikKKyAgICAgICAgc3VwcG9ydC5ybXRyZWUoVEVNUERJUikKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGNsLnB5IGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKaW5kZXggNTIyNmVlNi4uYjY1NjU2MyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90Y2wucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90Y2wucHkKQEAgLTEsNCArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCByZQoraW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CkBAIC03LDcgKzksNyBAQAogX3RraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKIAogIyBNYWtlIHN1cmUgdGtpbnRlci5fZml4IHJ1bnMgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudAotc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd0a2ludGVyJykKK3RraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXInKQogCiBmcm9tIHRraW50ZXIgaW1wb3J0IFRjbAogZnJvbSBfdGtpbnRlciBpbXBvcnQgVGNsRXJyb3IKQEAgLTE3LDI3ICsxOSwyMiBAQAogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIElOVF9NQVggPSBQWV9TU0laRV9UX01BWCA9IHN5cy5tYXhzaXplCiAKLXRjbF92ZXJzaW9uID0gX3RraW50ZXIuVENMX1ZFUlNJT04uc3BsaXQoJy4nKQotdHJ5OgotICAgIGZvciBpIGluIHJhbmdlKGxlbih0Y2xfdmVyc2lvbikpOgotICAgICAgICB0Y2xfdmVyc2lvbltpXSA9IGludCh0Y2xfdmVyc2lvbltpXSkKLWV4Y2VwdCBWYWx1ZUVycm9yOgotICAgIHBhc3MKLXRjbF92ZXJzaW9uID0gdHVwbGUodGNsX3ZlcnNpb24pCit0Y2xfdmVyc2lvbiA9IHR1cGxlKG1hcChpbnQsIF90a2ludGVyLlRDTF9WRVJTSU9OLnNwbGl0KCcuJykpKQogCiBfdGtfcGF0Y2hsZXZlbCA9IE5vbmUKIGRlZiBnZXRfdGtfcGF0Y2hsZXZlbCgpOgogICAgIGdsb2JhbCBfdGtfcGF0Y2hsZXZlbAogICAgIGlmIF90a19wYXRjaGxldmVsIGlzIE5vbmU6CiAgICAgICAgIHRjbCA9IFRjbCgpCi0gICAgICAgIHBhdGNobGV2ZWwgPSBbXQotICAgICAgICBmb3IgeCBpbiB0Y2wuY2FsbCgnaW5mbycsICdwYXRjaGxldmVsJykuc3BsaXQoJy4nKToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB4ID0gaW50KHgsIDEwKQotICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICAgICAgeCA9IC0xCi0gICAgICAgICAgICBwYXRjaGxldmVsLmFwcGVuZCh4KQotICAgICAgICBfdGtfcGF0Y2hsZXZlbCA9IHR1cGxlKHBhdGNobGV2ZWwpCisgICAgICAgIHBhdGNobGV2ZWwgPSB0Y2wuY2FsbCgnaW5mbycsICdwYXRjaGxldmVsJykKKyAgICAgICAgbSA9IHJlLmZ1bGxtYXRjaChyJyhcZCspXC4oXGQrKShbYWIuXSkoXGQrKScsIHBhdGNobGV2ZWwpCisgICAgICAgIG1ham9yLCBtaW5vciwgcmVsZWFzZWxldmVsLCBzZXJpYWwgPSBtLmdyb3VwcygpCisgICAgICAgIG1ham9yLCBtaW5vciwgc2VyaWFsID0gaW50KG1ham9yKSwgaW50KG1pbm9yKSwgaW50KHNlcmlhbCkKKyAgICAgICAgcmVsZWFzZWxldmVsID0geydhJzogJ2FscGhhJywgJ2InOiAnYmV0YScsICcuJzogJ2ZpbmFsJ31bcmVsZWFzZWxldmVsXQorICAgICAgICBpZiByZWxlYXNlbGV2ZWwgPT0gJ2ZpbmFsJzoKKyAgICAgICAgICAgIF90a19wYXRjaGxldmVsID0gbWFqb3IsIG1pbm9yLCBzZXJpYWwsIHJlbGVhc2VsZXZlbCwgMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgX3RrX3BhdGNobGV2ZWwgPSBtYWpvciwgbWlub3IsIDAsIHJlbGVhc2VsZXZlbCwgc2VyaWFsCiAgICAgcmV0dXJuIF90a19wYXRjaGxldmVsCiAKIApAQCAtMTMzLDYgKzEzMCw2OCBAQAogICAgICAgICB0Y2wgPSBzZWxmLmludGVycAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcix0Y2wudW5zZXR2YXIsJ2EnKQogCisgICAgZGVmIGdldF9pbnRlZ2VycyhzZWxmKToKKyAgICAgICAgaW50ZWdlcnMgPSAoMCwgMSwgLTEsIDIqKjMxLTEsIC0yKiozMSkKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDQpOiAgIyB3aWRlSW50IHdhcyBhZGRlZCBpbiBUY2wgOC40CisgICAgICAgICAgICBpbnRlZ2VycyArPSAoMioqMzEsIC0yKiozMS0xLCAyKio2My0xLCAtMioqNjMpCisgICAgICAgICMgYmlnbnVtIHdhcyBhZGRlZCBpbiBUY2wgOC41LCBidXQgaXRzIHN1cHBvcnQgaXMgYWJsZSBvbmx5IHNpbmNlIDguNS44CisgICAgICAgIGlmIChnZXRfdGtfcGF0Y2hsZXZlbCgpID49ICg4LCA2LCAwLCAnZmluYWwnKSBvcgorICAgICAgICAgICAgKDgsIDUsIDgpIDw9IGdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNikpOgorICAgICAgICAgICAgaW50ZWdlcnMgKz0gKDIqKjYzLCAtMioqNjMtMSwgMioqMTAwMCwgLTIqKjEwMDApCisgICAgICAgIHJldHVybiBpbnRlZ2VycworCisgICAgZGVmIHRlc3RfZ2V0aW50KHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycC50aworICAgICAgICBmb3IgaSBpbiBzZWxmLmdldF9pbnRlZ2VycygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0aW50KCcgJWQgJyAlIGkpLCBpKQorICAgICAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGludCgnICUjbyAnICUgaSksIGkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5nZXRpbnQoKCcgJSNvICcgJSBpKS5yZXBsYWNlKCdvJywgJycpKSwgaSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGludCgnICUjeCAnICUgaSksIGkpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uIDwgKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wuZ2V0aW50LCBzdHIoMioqMTAwMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGNsLmdldGludCg0MiksIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRpbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGludCwgJzQyJywgJzEwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0aW50LCBiJzQyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0aW50LCA0Mi4wKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmdldGludCwgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBWYWx1ZUVycm9yLCBUY2xFcnJvciksCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRjbC5nZXRpbnQsICc0MlwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFVuaWNvZGVFbmNvZGVFcnJvciwgVmFsdWVFcnJvciwgVGNsRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2wuZ2V0aW50LCAnNDJcdWQ4MDAnKQorCisgICAgZGVmIHRlc3RfZ2V0ZG91YmxlKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycC50aworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRjbC5nZXRkb3VibGUoJyA0MiAnKSwgNDIuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0ZG91YmxlKCcgNDIuNSAnKSwgNDIuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Y2wuZ2V0ZG91YmxlKDQyLjUpLCA0Mi41KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRkb3VibGUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGRvdWJsZSwgJzQyLjUnLCAnMTAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHRjbC5nZXRkb3VibGUsIGInNDIuNScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGRvdWJsZSwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wuZ2V0ZG91YmxlLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIFZhbHVlRXJyb3IsIFRjbEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGNsLmdldGRvdWJsZSwgJzQyLjVcMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChVbmljb2RlRW5jb2RlRXJyb3IsIFZhbHVlRXJyb3IsIFRjbEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGNsLmdldGRvdWJsZSwgJzQyLjVcdWQ4MDAnKQorCisgICAgZGVmIHRlc3RfZ2V0Ym9vbGVhbihzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAudGsKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Y2wuZ2V0Ym9vbGVhbignb24nKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Y2wuZ2V0Ym9vbGVhbignMScpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHRjbC5nZXRib29sZWFuKDQyKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0Y2wuZ2V0Ym9vbGVhbigwKSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGJvb2xlYW4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGJvb2xlYW4sICdvbicsICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0Y2wuZ2V0Ym9vbGVhbiwgYidvbicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGNsLmdldGJvb2xlYW4sIDEuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHRjbC5nZXRib29sZWFuLCAnYScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIFZhbHVlRXJyb3IsIFRjbEVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGNsLmdldGJvb2xlYW4sICdvblwwJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoKFVuaWNvZGVFbmNvZGVFcnJvciwgVmFsdWVFcnJvciwgVGNsRXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2wuZ2V0Ym9vbGVhbiwgJ29uXHVkODAwJykKKwogICAgIGRlZiB0ZXN0RXZhbEZpbGUoc2VsZik6CiAgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwCiAgICAgICAgIHdpdGggb3BlbihzdXBwb3J0LlRFU1RGTiwgJ3cnKSBhcyBmOgpAQCAtMTg4LDExICsyNDcsMTAgQEAKIAogICAgICAgICB3aXRoIHN1cHBvcnQuRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudjoKICAgICAgICAgICAgIGVudi51bnNldCgiVENMX0xJQlJBUlkiKQotICAgICAgICAgICAgZiA9IG9zLnBvcGVuKCclcyAtYyAiaW1wb3J0IHRraW50ZXI7IHByaW50KHRraW50ZXIpIicgJSAodW5jX25hbWUsKSkKKyAgICAgICAgICAgIHN0ZG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KAorICAgICAgICAgICAgICAgICAgICBbdW5jX25hbWUsICctYycsICdpbXBvcnQgdGtpbnRlcjsgcHJpbnQodGtpbnRlciknXSkKIAotICAgICAgICBzZWxmLmFzc2VydEluKCd0a2ludGVyJywgZi5yZWFkKCkpCi0gICAgICAgICMgZXhpdCBjb2RlIG11c3QgYmUgemVybwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuY2xvc2UoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihiJ3RraW50ZXInLCBzdGRvdXQpCiAKICAgICBkZWYgdGVzdF9leHByc3RyaW5nKHNlbGYpOgogICAgICAgICB0Y2wgPSBzZWxmLmludGVycApAQCAtMjI2LDcgKzI4NCw3IEBACiAgICAgICAgIGNoZWNrKCciYVx4YmRcdTIwYWMiJywgJ2FceGJkXHUyMGFjJykKICAgICAgICAgY2hlY2sociciYVx4YmRcdTIwYWMiJywgJ2FceGJkXHUyMGFjJykKICAgICAgICAgY2hlY2sociciYVwwYiInLCAnYVx4MDBiJykKLSAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6ICAjIGJpZ251bSB3YXMgYWRkZWQgaW4gVGNsIDguNQogICAgICAgICAgICAgY2hlY2soJzIqKjY0Jywgc3RyKDIqKjY0KSkKIAogICAgIGRlZiB0ZXN0X2V4cHJkb3VibGUoc2VsZik6CkBAIC0yNTgsNyArMzE2LDcgQEAKICAgICAgICAgY2hlY2soJ1tzdHJpbmcgbGVuZ3RoICJhXHhiZFx1MjBhYyJdJywgMy4wKQogICAgICAgICBjaGVjayhyJ1tzdHJpbmcgbGVuZ3RoICJhXHhiZFx1MjBhYyJdJywgMy4wKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmV4cHJkb3VibGUsICciYWJjIicpCi0gICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKICAgICAgICAgICAgIGNoZWNrKCcyKio2NCcsIGZsb2F0KDIqKjY0KSkKIAogICAgIGRlZiB0ZXN0X2V4cHJsb25nKHNlbGYpOgpAQCAtMjkwLDcgKzM0OCw3IEBACiAgICAgICAgIGNoZWNrKCdbc3RyaW5nIGxlbmd0aCAiYVx4YmRcdTIwYWMiXScsIDMpCiAgICAgICAgIGNoZWNrKHInW3N0cmluZyBsZW5ndGggImFceGJkXHUyMGFjIl0nLCAzKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmV4cHJsb25nLCAnImFiYyInKQotICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KTogICMgYmlnbnVtIHdhcyBhZGRlZCBpbiBUY2wgOC41CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmV4cHJsb25nLCAnMioqNjQnKQogCiAgICAgZGVmIHRlc3RfZXhwcmJvb2xlYW4oc2VsZik6CkBAIC0zMzEsOSArMzg5LDQyIEBACiAgICAgICAgIGNoZWNrKCdbc3RyaW5nIGxlbmd0aCAiYVx4YmRcdTIwYWMiXScsIFRydWUpCiAgICAgICAgIGNoZWNrKHInW3N0cmluZyBsZW5ndGggImFceGJkXHUyMGFjIl0nLCBUcnVlKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgdGNsLmV4cHJib29sZWFuLCAnImFiYyInKQotICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KTogICMgYmlnbnVtIHdhcyBhZGRlZCBpbiBUY2wgOC41CiAgICAgICAgICAgICBjaGVjaygnMioqNjQnLCBUcnVlKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3ModGNsX3ZlcnNpb24gPj0gKDgsIDUpLCAncmVxdWlyZXMgVGNsIHZlcnNpb24gPj0gOC41JykKKyAgICBkZWYgdGVzdF9ib29sZWFucyhzZWxmKToKKyAgICAgICAgdGNsID0gc2VsZi5pbnRlcnAKKyAgICAgICAgZGVmIGNoZWNrKGV4cHIsIGV4cGVjdGVkKToKKyAgICAgICAgICAgIHJlc3VsdCA9IHRjbC5jYWxsKCdleHByJywgZXhwcikKKyAgICAgICAgICAgIGlmIHRjbC53YW50b2JqZWN0cygpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBleHBlY3RlZCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBpbnQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ocmVzdWx0LCAoZXhwciwgc3RyKGludChleHBlY3RlZCkpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBzdHIpCisgICAgICAgIGNoZWNrKCd0cnVlJywgVHJ1ZSkKKyAgICAgICAgY2hlY2soJ3llcycsIFRydWUpCisgICAgICAgIGNoZWNrKCdvbicsIFRydWUpCisgICAgICAgIGNoZWNrKCdmYWxzZScsIEZhbHNlKQorICAgICAgICBjaGVjaygnbm8nLCBGYWxzZSkKKyAgICAgICAgY2hlY2soJ29mZicsIEZhbHNlKQorICAgICAgICBjaGVjaygnMSA8IDInLCBUcnVlKQorICAgICAgICBjaGVjaygnMSA+IDInLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2V4cHJfYmlnbnVtKHNlbGYpOgorICAgICAgICB0Y2wgPSBzZWxmLmludGVycAorICAgICAgICBmb3IgaSBpbiBzZWxmLmdldF9pbnRlZ2VycygpOgorICAgICAgICAgICAgcmVzdWx0ID0gdGNsLmNhbGwoJ2V4cHInLCBzdHIoaSkpCisgICAgICAgICAgICBpZiBzZWxmLndhbnRvYmplY3RzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBpKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHQsIGludCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIHN0cihpKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBzdHIpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uIDwgKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCB0Y2wuY2FsbCwgJ2V4cHInLCBzdHIoMioqMTAwMCkpCisKICAgICBkZWYgdGVzdF9wYXNzaW5nX3ZhbHVlcyhzZWxmKToKICAgICAgICAgZGVmIHBhc3NWYWx1ZSh2YWx1ZSk6CiAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbnRlcnAuY2FsbCgnc2V0JywgJ18nLCB2YWx1ZSkKQEAgLTM0NSwxMCArNDM2LDE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKCdzdHJceDAwaW5nJyksICdzdHJceDAwaW5nJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoJ3N0clx4MDBpbmdceGJkJyksICdzdHJceDAwaW5nXHhiZCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKCdzdHJceDAwaW5nXHUyMGFjJyksICdzdHJceDAwaW5nXHUyMGFjJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoYidzdHJceDAwaW5nJyksICdzdHJceDAwaW5nJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoYidzdHJceGMwXHg4MGluZycpLCAnc3RyXHgwMGluZycpCi0gICAgICAgIGZvciBpIGluICgwLCAxLCAtMSwgMioqMzEtMSwgLTIqKjMxKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoYidzdHJceDAwaW5nJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJceDAwaW5nJyBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UgJ3N0clx4MDBpbmcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhc3NWYWx1ZShiJ3N0clx4YzBceDgwaW5nJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgYidzdHJceGMwXHg4MGluZycgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICdzdHJceGMwXHg4MGluZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKGInc3RyXHhiZGluZycpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGInc3RyXHhiZGluZycgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICdzdHJceGJkaW5nJykKKyAgICAgICAgZm9yIGkgaW4gc2VsZi5nZXRfaW50ZWdlcnMoKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKGkpLCBpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZSBzdHIoaSkpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uIDwgKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKDIqKjEwMDApLCBzdHIoMioqMTAwMCkpCiAgICAgICAgIGZvciBmIGluICgwLjAsIDEuMCwgLTEuMCwgMS8zLAogICAgICAgICAgICAgICAgICAgc3lzLmZsb2F0X2luZm8ubWluLCBzeXMuZmxvYXRfaW5mby5tYXgsCiAgICAgICAgICAgICAgICAgICAtc3lzLmZsb2F0X2luZm8ubWluLCAtc3lzLmZsb2F0X2luZm8ubWF4KToKQEAgLTM2MiwxMCArNDU5LDkgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKGZsb2F0KCdpbmYnKSksIGZsb2F0KCdpbmYnKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFzc1ZhbHVlKC1mbG9hdCgnaW5mJykpLCAtZmxvYXQoJ2luZicpKQogICAgICAgICBlbHNlOgotICAgICAgICAgICAgZiA9IGZsb2F0KHBhc3NWYWx1ZShmbG9hdCgnbmFuJykpKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmLCBmKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdChwYXNzVmFsdWUoZmxvYXQoJ2luZicpKSksIGZsb2F0KCdpbmYnKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQocGFzc1ZhbHVlKC1mbG9hdCgnaW5mJykpKSwgLWZsb2F0KCdpbmYnKSkKKyAgICAgICAgICAgICMgWFhYIE5hTiByZXByZXNlbnRhdGlvbiBjYW4gYmUgbm90IHBhcnNhYmxlIGJ5IGZsb2F0KCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXNzVmFsdWUoKDEsICcyJywgKDMuNCwpKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKDEsICcyJywgKDMuNCwpKSBpZiBzZWxmLndhbnRvYmplY3RzIGVsc2UgJzEgMiAzLjQnKQogCkBAIC0zNzcsNDIgKzQ3Myw0OCBAQAogICAgICAgICAgICAgcmV0dXJuIGFyZwogICAgICAgICBzZWxmLmludGVycC5jcmVhdGVjb21tYW5kKCd0ZXN0ZnVuYycsIHRlc3RmdW5jKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoc2VsZi5pbnRlcnAudGsuZGVsZXRlY29tbWFuZCwgJ3Rlc3RmdW5jJykKLSAgICAgICAgZGVmIGNoZWNrKHZhbHVlLCBleHBlY3RlZCwgZXE9c2VsZi5hc3NlcnRFcXVhbCk6CisgICAgICAgIGRlZiBjaGVjayh2YWx1ZSwgZXhwZWN0ZWQ9Tm9uZSwgKiwgZXE9c2VsZi5hc3NlcnRFcXVhbCk6CisgICAgICAgICAgICBpZiBleHBlY3RlZCBpcyBOb25lOgorICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdmFsdWUKKyAgICAgICAgICAgIG5vbmxvY2FsIHJlc3VsdAorICAgICAgICAgICAgcmVzdWx0ID0gTm9uZQogICAgICAgICAgICAgciA9IHNlbGYuaW50ZXJwLmNhbGwoJ3Rlc3RmdW5jJywgdmFsdWUpCiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocmVzdWx0LCBzdHIpCiAgICAgICAgICAgICBlcShyZXN1bHQsIGV4cGVjdGVkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHIsIHN0cikKICAgICAgICAgICAgIGVxKHIsIGV4cGVjdGVkKQogICAgICAgICBkZWYgZmxvYXRfZXEoYWN0dWFsLCBleHBlY3RlZCk6Ci0gICAgICAgICAgICBleHBlY3RlZCA9IGZsb2F0KGV4cGVjdGVkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChmbG9hdChhY3R1YWwpLCBleHBlY3RlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGE9YWJzKGV4cGVjdGVkKSAqIDFlLTEwKQotICAgICAgICBkZWYgbmFuX2VxKGFjdHVhbCwgZXhwZWN0ZWQpOgotICAgICAgICAgICAgYWN0dWFsID0gZmxvYXQoYWN0dWFsKQotICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChhY3R1YWwsIGFjdHVhbCkKIAogICAgICAgICBjaGVjayhUcnVlLCAnMScpCiAgICAgICAgIGNoZWNrKEZhbHNlLCAnMCcpCi0gICAgICAgIGNoZWNrKCdzdHJpbmcnLCAnc3RyaW5nJykKLSAgICAgICAgY2hlY2soJ3N0cmluZ1x4YmQnLCAnc3RyaW5nXHhiZCcpCi0gICAgICAgIGNoZWNrKCdzdHJpbmdcdTIwYWMnLCAnc3RyaW5nXHUyMGFjJykKKyAgICAgICAgY2hlY2soJ3N0cmluZycpCisgICAgICAgIGNoZWNrKCdzdHJpbmdceGJkJykKKyAgICAgICAgY2hlY2soJ3N0cmluZ1x1MjBhYycpCisgICAgICAgIGNoZWNrKCcnKQogICAgICAgICBjaGVjayhiJ3N0cmluZycsICdzdHJpbmcnKQotICAgICAgICBjaGVjayhiJ3N0cmluZ1x4ZTJceDgyXHhhYycsICdzdHJpbmdcdTIwYWMnKQotICAgICAgICBjaGVjaygnc3RyXHgwMGluZycsICdzdHJceDAwaW5nJykKLSAgICAgICAgY2hlY2soJ3N0clx4MDBpbmdceGJkJywgJ3N0clx4MDBpbmdceGJkJykKLSAgICAgICAgY2hlY2soJ3N0clx4MDBpbmdcdTIwYWMnLCAnc3RyXHgwMGluZ1x1MjBhYycpCi0gICAgICAgIGNoZWNrKGInc3RyXHhjMFx4ODBpbmcnLCAnc3RyXHgwMGluZycpCi0gICAgICAgIGNoZWNrKGInc3RyXHhjMFx4ODBpbmdceGUyXHg4Mlx4YWMnLCAnc3RyXHgwMGluZ1x1MjBhYycpCi0gICAgICAgIGZvciBpIGluICgwLCAxLCAtMSwgMioqMzEtMSwgLTIqKjMxKToKKyAgICAgICAgY2hlY2soYidzdHJpbmdceGUyXHg4Mlx4YWMnLCAnc3RyaW5nXHhlMlx4ODJceGFjJykKKyAgICAgICAgY2hlY2soYidzdHJpbmdceGJkJywgJ3N0cmluZ1x4YmQnKQorICAgICAgICBjaGVjayhiJycsICcnKQorICAgICAgICBjaGVjaygnc3RyXHgwMGluZycpCisgICAgICAgIGNoZWNrKCdzdHJceDAwaW5nXHhiZCcpCisgICAgICAgIGNoZWNrKCdzdHJceDAwaW5nXHUyMGFjJykKKyAgICAgICAgY2hlY2soYidzdHJceDAwaW5nJywgJ3N0clx4MDBpbmcnKQorICAgICAgICBjaGVjayhiJ3N0clx4YzBceDgwaW5nJywgJ3N0clx4YzBceDgwaW5nJykKKyAgICAgICAgY2hlY2soYidzdHJceGMwXHg4MGluZ1x4ZTJceDgyXHhhYycsICdzdHJceGMwXHg4MGluZ1x4ZTJceDgyXHhhYycpCisgICAgICAgIGZvciBpIGluIHNlbGYuZ2V0X2ludGVnZXJzKCk6CiAgICAgICAgICAgICBjaGVjayhpLCBzdHIoaSkpCisgICAgICAgIGlmIHRjbF92ZXJzaW9uIDwgKDgsIDUpOiAgIyBiaWdudW0gd2FzIGFkZGVkIGluIFRjbCA4LjUKKyAgICAgICAgICAgIGNoZWNrKDIqKjEwMDAsIHN0cigyKioxMDAwKSkKICAgICAgICAgZm9yIGYgaW4gKDAuMCwgMS4wLCAtMS4wKToKICAgICAgICAgICAgIGNoZWNrKGYsIHJlcHIoZikpCiAgICAgICAgIGZvciBmIGluICgxLzMuMCwgc3lzLmZsb2F0X2luZm8ubWluLCBzeXMuZmxvYXRfaW5mby5tYXgsCiAgICAgICAgICAgICAgICAgICAtc3lzLmZsb2F0X2luZm8ubWluLCAtc3lzLmZsb2F0X2luZm8ubWF4KToKLSAgICAgICAgICAgIGNoZWNrKGYsIGYsIGVxPWZsb2F0X2VxKQotICAgICAgICBjaGVjayhmbG9hdCgnaW5mJyksICdJbmYnLCBlcT1mbG9hdF9lcSkKLSAgICAgICAgY2hlY2soLWZsb2F0KCdpbmYnKSwgJy1JbmYnLCBlcT1mbG9hdF9lcSkKLSAgICAgICAgY2hlY2soZmxvYXQoJ25hbicpLCAnTmFOJywgZXE9bmFuX2VxKQorICAgICAgICAgICAgY2hlY2soZiwgZXE9ZmxvYXRfZXEpCisgICAgICAgIGNoZWNrKGZsb2F0KCdpbmYnKSwgZXE9ZmxvYXRfZXEpCisgICAgICAgIGNoZWNrKC1mbG9hdCgnaW5mJyksIGVxPWZsb2F0X2VxKQorICAgICAgICAjIFhYWCBOYU4gcmVwcmVzZW50YXRpb24gY2FuIGJlIG5vdCBwYXJzYWJsZSBieSBmbG9hdCgpCiAgICAgICAgIGNoZWNrKCgpLCAnJykKICAgICAgICAgY2hlY2soKDEsICgyLCksICgzLCA0KSwgJzUgNicsICgpKSwgJzEgMiB7MyA0fSB7NSA2fSB7fScpCiAKQEAgLTQ0Nyw5ICs1NDksOSBAQAogICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi53YW50b2JqZWN0cyBvciBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDUpOgogICAgICAgICAgICAgICAgICMgQmVmb3JlIDguNS41IGRpY3RzIHdlcmUgY29udmVydGVkIHRvIGxpc3RzIHRocm91Z2ggc3RyaW5nCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoJzEyJywgJ1x1MjBhYycsICdcdTIwYWMnLCAnMy40JykKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgnMTInLCAnXHUyMGFjJywgJ1x4ZTJceDgyXHhhYycsICczLjQnKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgxMiwgJ1x1MjBhYycsICdcdTIwYWMnLCAoMy40LCkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSkKICAgICAgICAgICAgIHRlc3RjYXNlcyArPSBbCiAgICAgICAgICAgICAgICAgKGNhbGwoJ2RpY3QnLCAnY3JlYXRlJywgMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKSwKQEAgLTQ5NCw5ICs1OTYsOSBAQAogICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CiAgICAgICAgICAgICBpZiBub3Qgc2VsZi53YW50b2JqZWN0cyBvciBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDUpOgogICAgICAgICAgICAgICAgICMgQmVmb3JlIDguNS41IGRpY3RzIHdlcmUgY29udmVydGVkIHRvIGxpc3RzIHRocm91Z2ggc3RyaW5nCi0gICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoJzEyJywgJ1x1MjBhYycsICdcdTIwYWMnLCAnMy40JykKKyAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgnMTInLCAnXHUyMGFjJywgJ1x4ZTJceDgyXHhhYycsICczLjQnKQogICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBleHBlY3RlZCA9ICgxMiwgJ1x1MjBhYycsICdcdTIwYWMnLCAoMy40LCkpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSAoMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSkKICAgICAgICAgICAgIHRlc3RjYXNlcyArPSBbCiAgICAgICAgICAgICAgICAgKGNhbGwoJ2RpY3QnLCAnY3JlYXRlJywgMTIsICdcdTIwYWMnLCBiJ1x4ZTJceDgyXHhhYycsICgzLjQsKSksCiAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkKSwKQEAgLTUwNCwzOSArNjA2LDQwIEBACiAgICAgICAgIGZvciBhcmcsIHJlcyBpbiB0ZXN0Y2FzZXM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0KGFyZyksIHJlcywgbXNnPWFyZykKIAotICAgIGRlZiB0ZXN0X21lcmdlKHNlbGYpOgotICAgICAgICB3aXRoIHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKCdtZXJnZSBpcyBkZXByZWNhdGVkJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIG1lcmdlID0gc2VsZi5pbnRlcnAudGsubWVyZ2UKLSAgICAgICAgICAgIGNhbGwgPSBzZWxmLmludGVycC50ay5jYWxsCi0gICAgICAgICAgICB0ZXN0Y2FzZXMgPSBbCi0gICAgICAgICAgICAgICAgKCgpLCAnJyksCi0gICAgICAgICAgICAgICAgKCgnYScsKSwgJ2EnKSwKLSAgICAgICAgICAgICAgICAoKDIsKSwgJzInKSwKLSAgICAgICAgICAgICAgICAoKCcnLCksICd7fScpLAotICAgICAgICAgICAgICAgICgneycsICdcXHsnKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJ2InLCAnYycpLCAnYSBiIGMnKSwKLSAgICAgICAgICAgICAgICAoKCcgJywgJ1x0JywgJ1xyJywgJ1xuJyksICd7IH0ge1x0fSB7XHJ9IHtcbn0nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgJyAnLCAnYycpLCAnYSB7IH0gYycpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAn4oKsJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAnXFUwMDAxMDRhMicpLCAnYSBcVTAwMDEwNGEyJyksCi0gICAgICAgICAgICAgICAgKCgnYScsIGInXHhlMlx4ODJceGFjJyksICdhIOKCrCcpLAotICAgICAgICAgICAgICAgICgoJ2EnLCAoJ2InLCAnYycpKSwgJ2Ege2IgY30nKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMiksICdhIDInKSwKLSAgICAgICAgICAgICAgICAoKCdhJywgMy40KSwgJ2EgMy40JyksCi0gICAgICAgICAgICAgICAgKCgnYScsICgyLCAzLjQpKSwgJ2EgezIgMy40fScpLAotICAgICAgICAgICAgICAgICgoKSwgJycpLAotICAgICAgICAgICAgICAgICgoY2FsbCgnbGlzdCcsIDEsICcyJywgKDMuNCwpKSwpLCAnezEgMiAzLjR9JyksCi0gICAgICAgICAgICBdCi0gICAgICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6Ci0gICAgICAgICAgICAgICAgdGVzdGNhc2VzICs9IFsKLSAgICAgICAgICAgICAgICAgICAgKChjYWxsKCdkaWN0JywgJ2NyZWF0ZScsIDEyLCAnXHUyMGFjJywgYidceGUyXHg4Mlx4YWMnLCAoMy40LCkpLCksCi0gICAgICAgICAgICAgICAgICAgICAnezEyIOKCrCDigqwgMy40fScpLAotICAgICAgICAgICAgICAgIF0KLSAgICAgICAgICAgIGZvciBhcmdzLCByZXMgaW4gdGVzdGNhc2VzOgotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVyZ2UoKmFyZ3MpLCByZXMsIG1zZz1hcmdzKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZURlY29kZUVycm9yLCBtZXJnZSwgYidceDgwJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFbmNvZGVFcnJvciwgbWVyZ2UsICdcdWRjODAnKQorICAgIGRlZiB0ZXN0X3NwbGl0ZGljdChzZWxmKToKKyAgICAgICAgc3BsaXRkaWN0ID0gdGtpbnRlci5fc3BsaXRkaWN0CisgICAgICAgIHRjbCA9IHNlbGYuaW50ZXJwLnRrCisKKyAgICAgICAgYXJnID0gJy1hIHsxIDIgM30gLXNvbWV0aGluZyBmb28gc3RhdHVzIHt9JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0ZGljdCh0Y2wsIGFyZywgRmFsc2UpLAorICAgICAgICAgICAgeyctYSc6ICcxIDIgMycsICctc29tZXRoaW5nJzogJ2ZvbycsICdzdGF0dXMnOiAnJ30pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRkaWN0KHRjbCwgYXJnKSwKKyAgICAgICAgICAgIHsnYSc6ICcxIDIgMycsICdzb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICcnfSkKKworICAgICAgICBhcmcgPSAoJy1hJywgKDEsIDIsIDMpLCAnLXNvbWV0aGluZycsICdmb28nLCAnc3RhdHVzJywgJ3t9JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRpY3QodGNsLCBhcmcsIEZhbHNlKSwKKyAgICAgICAgICAgIHsnLWEnOiAoMSwgMiwgMyksICctc29tZXRoaW5nJzogJ2ZvbycsICdzdGF0dXMnOiAne30nfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRpY3QodGNsLCBhcmcpLAorICAgICAgICAgICAgeydhJzogKDEsIDIsIDMpLCAnc29tZXRoaW5nJzogJ2ZvbycsICdzdGF0dXMnOiAne30nfSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNwbGl0ZGljdCwgdGNsLCAnLWEgYiAtYyAnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IsIHNwbGl0ZGljdCwgdGNsLCAoJy1hJywgJ2InLCAnLWMnKSkKKworICAgICAgICBhcmcgPSB0Y2wuY2FsbCgnbGlzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnLWEnLCAoMSwgMiwgMyksICctc29tZXRoaW5nJywgJ2ZvbycsICdzdGF0dXMnLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRpY3QodGNsLCBhcmcpLAorICAgICAgICAgICAgeydhJzogKDEsIDIsIDMpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZSAnMSAyIDMnLAorICAgICAgICAgICAgICdzb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICcnfSkKKworICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgICAgICBhcmcgPSB0Y2wuY2FsbCgnZGljdCcsICdjcmVhdGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJy1hJywgKDEsIDIsIDMpLCAnLXNvbWV0aGluZycsICdmb28nLCAnc3RhdHVzJywgKCkpCisgICAgICAgICAgICBpZiBub3Qgc2VsZi53YW50b2JqZWN0cyBvciBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDUpOgorICAgICAgICAgICAgICAgICMgQmVmb3JlIDguNS41IGRpY3RzIHdlcmUgY29udmVydGVkIHRvIGxpc3RzIHRocm91Z2ggc3RyaW5nCisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J2EnOiAnMSAyIDMnLCAnc29tZXRoaW5nJzogJ2ZvbycsICdzdGF0dXMnOiAnJ30KKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZXhwZWN0ZWQgPSB7J2EnOiAoMSwgMiwgMyksICdzb21ldGhpbmcnOiAnZm9vJywgJ3N0YXR1cyc6ICcnfQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGRpY3QodGNsLCBhcmcpLCBleHBlY3RlZCkKIAogCiBjbGFzcyBCaWdtZW1UY2xUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTU0NywxMCArNjUwLDM1IEBACiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoSU5UX01BWCA8IFBZX1NTSVpFX1RfTUFYLCAibmVlZHMgVUlOVF9NQVggPCBTSVpFX01BWCIpCiAgICAgQHN1cHBvcnQuYmlnbWVtdGVzdChzaXplPUlOVF9NQVggKyAxLCBtZW11c2U9NSwgZHJ5X3J1bj1GYWxzZSkKLSAgICBkZWYgdGVzdF9odWdlX3N0cmluZyhzZWxmLCBzaXplKToKKyAgICBkZWYgdGVzdF9odWdlX3N0cmluZ19jYWxsKHNlbGYsIHNpemUpOgogICAgICAgICB2YWx1ZSA9ICcgJyAqIHNpemUKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuY2FsbCwgJ3NldCcsICdfJywgdmFsdWUpCiAKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhJTlRfTUFYIDwgUFlfU1NJWkVfVF9NQVgsICJuZWVkcyBVSU5UX01BWCA8IFNJWkVfTUFYIikKKyAgICBAc3VwcG9ydC5iaWdtZW10ZXN0KHNpemU9SU5UX01BWCArIDEsIG1lbXVzZT05LCBkcnlfcnVuPUZhbHNlKQorICAgIGRlZiB0ZXN0X2h1Z2Vfc3RyaW5nX2J1aWx0aW5zKHNlbGYsIHNpemUpOgorICAgICAgICB2YWx1ZSA9ICcxJyArICcgJyAqIHNpemUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAudGsuZ2V0aW50LCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAudGsuZ2V0ZG91YmxlLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAudGsuZ2V0Ym9vbGVhbiwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmV2YWwsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5ldmFsZmlsZSwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLnJlY29yZCwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmFkZGVycm9yaW5mbywgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLnNldHZhciwgdmFsdWUsICd4JywgJ2EnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5zZXR2YXIsICd4JywgdmFsdWUsICdhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAudW5zZXR2YXIsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC51bnNldHZhciwgJ3gnLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuYWRkZXJyb3JpbmZvLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuZXhwcnN0cmluZywgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmV4cHJsb25nLCB2YWx1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgc2VsZi5pbnRlcnAuZXhwcmJvb2xlYW4sIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5zcGxpdGxpc3QsIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzZWxmLmludGVycC5zcGxpdCwgdmFsdWUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmNyZWF0ZWNvbW1hbmQsIHZhbHVlLCBtYXgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHNlbGYuaW50ZXJwLmRlbGV0ZWNvbW1hbmQsIHZhbHVlKQorCiAKIGRlZiBzZXRVcE1vZHVsZSgpOgogICAgIGlmIHN1cHBvcnQudmVyYm9zZToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGVsbmV0bGliLnB5IGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKaW5kZXggYzlmMmNjYi4uZWUxYzM1NyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90ZWxuZXRsaWIucHkKQEAgLTEsMTAgKzEsOSBAQAogaW1wb3J0IHNvY2tldAotaW1wb3J0IHNlbGVjdAoraW1wb3J0IHNlbGVjdG9ycwogaW1wb3J0IHRlbG5ldGxpYgogaW1wb3J0IHRpbWUKIGltcG9ydCBjb250ZXh0bGliCiAKLWltcG9ydCB1bml0dGVzdAogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogdGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQpAQCAtMTEyLDQwICsxMTEsMzcgQEAKICAgICAgICAgc2VsZi5fbWVzc2FnZXMgKz0gb3V0LmdldHZhbHVlKCkKICAgICAgICAgcmV0dXJuCiAKLWRlZiBtb2NrX3NlbGVjdCgqc19hcmdzKToKLSAgICBibG9jayA9IEZhbHNlCi0gICAgZm9yIGwgaW4gc19hcmdzOgotICAgICAgICBmb3IgZm9iIGluIGw6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZvYiwgVGVsbmV0QWxpa2UpOgotICAgICAgICAgICAgICAgIGJsb2NrID0gZm9iLnNvY2suYmxvY2sKLSAgICBpZiBibG9jazoKLSAgICAgICAgcmV0dXJuIFtbXSwgW10sIFtdXQotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybiBzX2FyZ3MKLQotY2xhc3MgTW9ja1BvbGxlcihvYmplY3QpOgotICAgIHRlc3RfY2FzZSA9IE5vbmUgICMgU2V0IGR1cmluZyBUZXN0Q2FzZSBzZXRVcC4KK2NsYXNzIE1vY2tTZWxlY3RvcihzZWxlY3RvcnMuQmFzZVNlbGVjdG9yKToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzID0gW10KKyAgICAgICAgc2VsZi5rZXlzID0ge30KIAotICAgIGRlZiByZWdpc3RlcihzZWxmLCBmZCwgZXZlbnRtYXNrKToKLSAgICAgICAgc2VsZi50ZXN0X2Nhc2UuYXNzZXJ0VHJ1ZShoYXNhdHRyKGZkLCAnZmlsZW5vJyksIGZkKQotICAgICAgICBzZWxmLnRlc3RfY2FzZS5hc3NlcnRFcXVhbChldmVudG1hc2ssIHNlbGVjdC5QT0xMSU58c2VsZWN0LlBPTExQUkkpCi0gICAgICAgIHNlbGYuX2ZpbGVfb2Jqcy5hcHBlbmQoZmQpCisgICAgQHByb3BlcnR5CisgICAgZGVmIHJlc29sdXRpb24oc2VsZik6CisgICAgICAgIHJldHVybiAxZS0zCiAKLSAgICBkZWYgcG9sbChzZWxmLCB0aW1lb3V0PU5vbmUpOgorICAgIGRlZiByZWdpc3RlcihzZWxmLCBmaWxlb2JqLCBldmVudHMsIGRhdGE9Tm9uZSk6CisgICAgICAgIGtleSA9IHNlbGVjdG9ycy5TZWxlY3RvcktleShmaWxlb2JqLCAwLCBldmVudHMsIGRhdGEpCisgICAgICAgIHNlbGYua2V5c1tmaWxlb2JqXSA9IGtleQorICAgICAgICByZXR1cm4ga2V5CisKKyAgICBkZWYgdW5yZWdpc3RlcihzZWxmLCBmaWxlb2JqKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cy5wb3AoZmlsZW9iaikKKworICAgIGRlZiBzZWxlY3Qoc2VsZiwgdGltZW91dD1Ob25lKToKICAgICAgICAgYmxvY2sgPSBGYWxzZQotICAgICAgICBmb3IgZm9iIGluIHNlbGYuX2ZpbGVfb2JqczoKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZm9iLCBUZWxuZXRBbGlrZSk6Ci0gICAgICAgICAgICAgICAgYmxvY2sgPSBmb2Iuc29jay5ibG9jaworICAgICAgICBmb3IgZmlsZW9iaiBpbiBzZWxmLmtleXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZpbGVvYmosIFRlbG5ldEFsaWtlKToKKyAgICAgICAgICAgICAgICBibG9jayA9IGZpbGVvYmouc29jay5ibG9jaworICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIGJsb2NrOgogICAgICAgICAgICAgcmV0dXJuIFtdCiAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gemlwKHNlbGYuX2ZpbGVfb2JqcywgW3NlbGVjdC5QT0xMSU5dKmxlbihzZWxmLl9maWxlX29ianMpKQorICAgICAgICAgICAgcmV0dXJuIFsoa2V5LCBrZXkuZXZlbnRzKSBmb3Iga2V5IGluIHNlbGYua2V5cy52YWx1ZXMoKV0KIAotICAgIGRlZiB1bnJlZ2lzdGVyKHNlbGYsIGZkKToKLSAgICAgICAgc2VsZi5fZmlsZV9vYmpzLnJlbW92ZShmZCkKKyAgICBkZWYgZ2V0X21hcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYua2V5cworCiAKIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCiBkZWYgdGVzdF9zb2NrZXQocmVhZHMpOgpAQCAtMTU5LDcgKzE1NSw3IEBACiAgICAgICAgIHNvY2tldC5jcmVhdGVfY29ubmVjdGlvbiA9IG9sZF9jb25uCiAgICAgcmV0dXJuCiAKLWRlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlLCB1c2VfcG9sbD1Ob25lKToKK2RlZiB0ZXN0X3RlbG5ldChyZWFkcz0oKSwgY2xzPVRlbG5ldEFsaWtlKToKICAgICAnJycgcmV0dXJuIGEgdGVsbmV0bGliLlRlbG5ldCBvYmplY3QgdGhhdCB1c2VzIGEgU29ja2V0U3R1YiB3aXRoCiAgICAgICAgIHJlYWRzIHF1ZXVlZCB1cCB0byBiZSByZWFkICcnJwogICAgIGZvciB4IGluIHJlYWRzOgpAQCAtMTY3LDI5ICsxNjMsMTQgQEAKICAgICB3aXRoIHRlc3Rfc29ja2V0KHJlYWRzKToKICAgICAgICAgdGVsbmV0ID0gY2xzKCdkdW1teScsIDApCiAgICAgICAgIHRlbG5ldC5fbWVzc2FnZXMgPSAnJyAjIGRlYnVnbGV2ZWwgb3V0cHV0Ci0gICAgICAgIGlmIHVzZV9wb2xsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgaWYgdXNlX3BvbGwgYW5kIG5vdCB0ZWxuZXQuX2hhc19wb2xsOgotICAgICAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCdzZWxlY3QucG9sbCgpIHJlcXVpcmVkLicpCi0gICAgICAgICAgICB0ZWxuZXQuX2hhc19wb2xsID0gdXNlX3BvbGwKICAgICByZXR1cm4gdGVsbmV0CiAKLQogY2xhc3MgRXhwZWN0QW5kUmVhZFRlc3RDYXNlKFRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYub2xkX3NlbGVjdCA9IHNlbGVjdC5zZWxlY3QKLSAgICAgICAgc2VsZWN0LnNlbGVjdCA9IG1vY2tfc2VsZWN0Ci0gICAgICAgIHNlbGYub2xkX3BvbGwgPSBGYWxzZQotICAgICAgICBpZiBoYXNhdHRyKHNlbGVjdCwgJ3BvbGwnKToKLSAgICAgICAgICAgIHNlbGYub2xkX3BvbGwgPSBzZWxlY3QucG9sbAotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBNb2NrUG9sbGVyCi0gICAgICAgICAgICBNb2NrUG9sbGVyLnRlc3RfY2FzZSA9IHNlbGYKLQorICAgICAgICBzZWxmLm9sZF9zZWxlY3RvciA9IHRlbG5ldGxpYi5fVGVsbmV0U2VsZWN0b3IKKyAgICAgICAgdGVsbmV0bGliLl9UZWxuZXRTZWxlY3RvciA9IE1vY2tTZWxlY3RvcgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgaWYgc2VsZi5vbGRfcG9sbDoKLSAgICAgICAgICAgIE1vY2tQb2xsZXIudGVzdF9jYXNlID0gTm9uZQotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBzZWxmLm9sZF9wb2xsCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBzZWxmLm9sZF9zZWxlY3QKLQorICAgICAgICB0ZWxuZXRsaWIuX1RlbG5ldFNlbGVjdG9yID0gc2VsZi5vbGRfc2VsZWN0b3IKIAogY2xhc3MgUmVhZFRlc3RzKEV4cGVjdEFuZFJlYWRUZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfcmVhZF91bnRpbChzZWxmKToKQEAgLTIwOCwyMiArMTg5LDYgQEAKICAgICAgICAgZGF0YSA9IHRlbG5ldC5yZWFkX3VudGlsKGInbWF0Y2gnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdCkKIAotICAgIGRlZiB0ZXN0X3JlYWRfdW50aWxfd2l0aF9wb2xsKHNlbGYpOgotICAgICAgICAiIiJVc2Ugc2VsZWN0LnBvbGwoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIGRhdGEgPSB0ZWxuZXQucmVhZF91bnRpbChiJ21hdGNoJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQotCi0gICAgZGVmIHRlc3RfcmVhZF91bnRpbF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LnJlYWRfdW50aWwoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPUZhbHNlKQotICAgICAgICBpZiBzZWxmLm9sZF9wb2xsOgotICAgICAgICAgICAgc2VsZWN0LnBvbGwgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBwb2xsKCkgY2FsbC4nKQotICAgICAgICBkYXRhID0gdGVsbmV0LnJlYWRfdW50aWwoYidtYXRjaCcpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKIAogICAgIGRlZiB0ZXN0X3JlYWRfYWxsKHNlbGYpOgogICAgICAgICAiIiIKQEAgLTQyNywyMyArMzkyLDYgQEAKICAgICAgICAgKF8sXyxkYXRhKSA9IHRlbG5ldC5leHBlY3QoW2InbWF0Y2gnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCBiJycuam9pbih3YW50WzotMV0pKQogCi0gICAgZGVmIHRlc3RfZXhwZWN0X3dpdGhfcG9sbChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5wb2xsKCkgdG8gaW1wbGVtZW50IHRlbG5ldC5leHBlY3QoKS4iIiIKLSAgICAgICAgd2FudCA9IFtiJ3gnICogMTAsIGInbWF0Y2gnLCBiJ3knICogMTBdCi0gICAgICAgIHRlbG5ldCA9IHRlc3RfdGVsbmV0KHdhbnQsIHVzZV9wb2xsPVRydWUpCi0gICAgICAgIHNlbGVjdC5zZWxlY3QgPSBsYW1iZGEgKl86IHNlbGYuZmFpbCgndW5leHBlY3RlZCBzZWxlY3QoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQotICAgIGRlZiB0ZXN0X2V4cGVjdF93aXRoX3NlbGVjdChzZWxmKToKLSAgICAgICAgIiIiVXNlIHNlbGVjdC5zZWxlY3QoKSB0byBpbXBsZW1lbnQgdGVsbmV0LmV4cGVjdCgpLiIiIgotICAgICAgICB3YW50ID0gW2IneCcgKiAxMCwgYidtYXRjaCcsIGIneScgKiAxMF0KLSAgICAgICAgdGVsbmV0ID0gdGVzdF90ZWxuZXQod2FudCwgdXNlX3BvbGw9RmFsc2UpCi0gICAgICAgIGlmIHNlbGYub2xkX3BvbGw6Ci0gICAgICAgICAgICBzZWxlY3QucG9sbCA9IGxhbWJkYSAqXzogc2VsZi5mYWlsKCd1bmV4cGVjdGVkIHBvbGwoKSBjYWxsLicpCi0gICAgICAgIChfLF8sZGF0YSkgPSB0ZWxuZXQuZXhwZWN0KFtiJ21hdGNoJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgYicnLmpvaW4od2FudFs6LTFdKSkKLQogCiBkZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoR2VuZXJhbFRlc3RzLCBSZWFkVGVzdHMsIFdyaXRlVGVzdHMsIE9wdGlvblRlc3RzLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGVtcGZpbGUucHkKaW5kZXggNWE5NzAzNS4uNjY0MTI5OCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90ZW1wZmlsZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RlbXBmaWxlLnB5CkBAIC05LDYgKzksNyBAQAogaW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IHdlYWtyZWYKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNjcmlwdF9oZWxwZXIKQEAgLTM3LDcgKzM4LDcgQEAKICMgQ29tbW9uIGZ1bmN0aW9uYWxpdHkuCiBjbGFzcyBCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgc3RyX2NoZWNrID0gcmUuY29tcGlsZShyIlthLXpBLVowLTlfLV17Nn0kIikKKyAgICBzdHJfY2hlY2sgPSByZS5jb21waWxlKHIiXlthLXowLTlfLV17OH0kIikKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5fd2FybmluZ3NfbWFuYWdlciA9IHN1cHBvcnQuY2hlY2tfd2FybmluZ3MoKQpAQCAtNjQsNyArNjUsNyBAQAogCiAgICAgICAgIG5iYXNlID0gbmJhc2VbbGVuKHByZSk6bGVuKG5iYXNlKS1sZW4oc3VmKV0KICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuc3RyX2NoZWNrLm1hdGNoKG5iYXNlKSwKLSAgICAgICAgICAgICAgICAgICAgICJyYW5kb20gc3RyaW5nICclcycgZG9lcyBub3QgbWF0Y2ggL15bYS16QS1aMC05Xy1dezZ9JC8iCisgICAgICAgICAgICAgICAgICAgICAicmFuZG9tIHN0cmluZyAnJXMnIGRvZXMgbm90IG1hdGNoIF5bYS16MC05Xy1dezh9JCIKICAgICAgICAgICAgICAgICAgICAgICUgbmJhc2UpCiAKIApAQCAtMTUzLDcgKzE1NCw3IEBACiAgICAgICAgICAgICAgICAgIyB2aWEgYW55IGJ1Z3MgYWJvdmUKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIG9zLmtpbGwocGlkLCBzaWduYWwuU0lHS0lMTCkKLSAgICAgICAgICAgICAgICBleGNlcHQgRW52aXJvbm1lbnRFcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgb3MuY2xvc2UocmVhZF9mZCkKICAgICAgICAgICAgIG9zLmNsb3NlKHdyaXRlX2ZkKQpAQCAtMTkyLDcgKzE5Myw3IEBACiAKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIG9zLmVycm9yKToKKyAgICAgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgogICAgICAgICAgICAgICAgIGRpcm5hbWUgPSBvcy5jdXJkaXIKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihkaXJuYW1lLCBjYW5kKQpAQCAtMjczLDcgKzI3NCwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IGl0ZXIobmFtZXMpKQogCiAKLWNsYXNzIFRlc3RNa3N0ZW1wSW5uZXIoQmFzZVRlc3RDYXNlKToKK2NsYXNzIFRlc3RCYWRUZW1wZGlyOgorCisgICAgZGVmIHRlc3RfcmVhZF9vbmx5X2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgd2l0aCBfaW5zaWRlX2VtcHR5X3RlbXBfZGlyKCk6CisgICAgICAgICAgICBvbGRtb2RlID0gbW9kZSA9IG9zLnN0YXQodGVtcGZpbGUudGVtcGRpcikuc3RfbW9kZQorICAgICAgICAgICAgbW9kZSAmPSB+KHN0YXQuU19JV1VTUiB8IHN0YXQuU19JV0dSUCB8IHN0YXQuU19JV09USCkKKyAgICAgICAgICAgIG9zLmNobW9kKHRlbXBmaWxlLnRlbXBkaXIsIG1vZGUpCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgb3MuYWNjZXNzKHRlbXBmaWxlLnRlbXBkaXIsIG9zLldfT0spOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJjYW4ndCBzZXQgdGhlIGRpcmVjdG9yeSByZWFkLW9ubHkiKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUGVybWlzc2lvbkVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX3RlbXAoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MubGlzdGRpcih0ZW1wZmlsZS50ZW1wZGlyKSwgW10pCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLmNobW9kKHRlbXBmaWxlLnRlbXBkaXIsIG9sZG1vZGUpCisKKyAgICBkZWYgdGVzdF9ub25leGlzdGluZ19kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHdpdGggX2luc2lkZV9lbXB0eV90ZW1wX2RpcigpOgorICAgICAgICAgICAgdGVtcGRpciA9IG9zLnBhdGguam9pbih0ZW1wZmlsZS50ZW1wZGlyLCAnbm9uZXhpc3RlbnQnKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cih0ZW1wZmlsZSwgJ3RlbXBkaXInLCB0ZW1wZGlyKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEZpbGVOb3RGb3VuZEVycm9yKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5tYWtlX3RlbXAoKQorCisgICAgZGVmIHRlc3Rfbm9uX2RpcmVjdG9yeShzZWxmKToKKyAgICAgICAgd2l0aCBfaW5zaWRlX2VtcHR5X3RlbXBfZGlyKCk6CisgICAgICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5qb2luKHRlbXBmaWxlLnRlbXBkaXIsICdmaWxlJykKKyAgICAgICAgICAgIG9wZW4odGVtcGRpciwgJ3diJykuY2xvc2UoKQorICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cih0ZW1wZmlsZSwgJ3RlbXBkaXInLCB0ZW1wZGlyKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChOb3RBRGlyZWN0b3J5RXJyb3IsIEZpbGVOb3RGb3VuZEVycm9yKSk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYubWFrZV90ZW1wKCkKKworCitjbGFzcyBUZXN0TWtzdGVtcElubmVyKFRlc3RCYWRUZW1wZGlyLCBCYXNlVGVzdENhc2UpOgogICAgICIiIlRlc3QgdGhlIGludGVybmFsIGZ1bmN0aW9uIF9ta3N0ZW1wX2lubmVyLiIiIgogCiAgICAgY2xhc3MgbWtzdGVtcGVkOgpAQCAtMzMyLDcgKzM2NSw3IEBACiAgICAgICAgIGZpbGUgPSBzZWxmLmRvX2NyZWF0ZSgpCiAgICAgICAgIG1vZGUgPSBzdGF0LlNfSU1PREUob3Muc3RhdChmaWxlLm5hbWUpLnN0X21vZGUpCiAgICAgICAgIGV4cGVjdGVkID0gMG82MDAKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCAnb3MyZW14Jyk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKICAgICAgICAgICAgICMgcmVwbGljYXRlIHRoZSAndXNlcicgYml0cy4KICAgICAgICAgICAgIHVzZXIgPSBleHBlY3RlZCA+PiA2CkBAIC0zNDksNiArMzgyLDcgQEAKICAgICAgICAgICAgIHY9InEiCiAKICAgICAgICAgZmlsZSA9IHNlbGYuZG9fY3JlYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5nZXRfaW5oZXJpdGFibGUoZmlsZS5mZCksIEZhbHNlKQogICAgICAgICBmZCA9ICIlZCIgJSBmaWxlLmZkCiAKICAgICAgICAgdHJ5OgpAQCAtMzY1LDcgKzM5OSw3IEBACiAgICAgICAgICMgT24gV2luZG93cyBhIHNwYXduKiAvcGF0aC8gd2l0aCBlbWJlZGRlZCBzcGFjZXMgc2hvdWxkbid0IGJlIHF1b3RlZCwKICAgICAgICAgIyBidXQgYW4gYXJnIHdpdGggZW1iZWRkZWQgc3BhY2VzIHNob3VsZCBiZSBkZWNvcmF0ZWQgd2l0aCBkb3VibGUKICAgICAgICAgIyBxdW90ZXMgb24gZWFjaCBlbmQKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtIGluICgnd2luMzInLCk6CisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICAgICAgZGVjb3JhdGVkID0gJyIlcyInICUgc3lzLmV4ZWN1dGFibGUKICAgICAgICAgICAgIHRlc3RlciA9ICciJXMiJyAlIHRlc3RlcgogICAgICAgICBlbHNlOgpAQCAtMzg3LDcgKzQyMSw3IEBACiAgICAgICAgIG9zLmxzZWVrKGYuZmQsIDAsIG9zLlNFRUtfU0VUKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQoZi5mZCwgMjApLCBiImJsYXQiKQogCi0gICAgZGVmIGRlZmF1bHRfbWtzdGVtcF9pbm5lcihzZWxmKToKKyAgICBkZWYgbWFrZV90ZW1wKHNlbGYpOgogICAgICAgICByZXR1cm4gdGVtcGZpbGUuX21rc3RlbXBfaW5uZXIodGVtcGZpbGUuZ2V0dGVtcGRpcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGZpbGUudGVtcGxhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJywKQEAgLTM5OCwxMSArNDMyLDExIEBACiAgICAgICAgICMgdGhlIGNob3NlbiBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICAgICAgIHdpdGggX2luc2lkZV9lbXB0eV90ZW1wX2RpcigpLCBcCiAgICAgICAgICAgICAgX21vY2tfY2FuZGlkYXRlX25hbWVzKCdhYWEnLCAnYWFhJywgJ2JiYicpOgotICAgICAgICAgICAgKGZkMSwgbmFtZTEpID0gc2VsZi5kZWZhdWx0X21rc3RlbXBfaW5uZXIoKQorICAgICAgICAgICAgKGZkMSwgbmFtZTEpID0gc2VsZi5tYWtlX3RlbXAoKQogICAgICAgICAgICAgb3MuY2xvc2UoZmQxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUxLmVuZHN3aXRoKCdhYWEnKSkKIAotICAgICAgICAgICAgKGZkMiwgbmFtZTIpID0gc2VsZi5kZWZhdWx0X21rc3RlbXBfaW5uZXIoKQorICAgICAgICAgICAgKGZkMiwgbmFtZTIpID0gc2VsZi5tYWtlX3RlbXAoKQogICAgICAgICAgICAgb3MuY2xvc2UoZmQyKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUyLmVuZHN3aXRoKCdiYmInKSkKIApAQCAtNDE0LDcgKzQ0OCw3IEBACiAgICAgICAgICAgICBkaXIgPSB0ZW1wZmlsZS5ta2R0ZW1wKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXIuZW5kc3dpdGgoJ2FhYScpKQogCi0gICAgICAgICAgICAoZmQsIG5hbWUpID0gc2VsZi5kZWZhdWx0X21rc3RlbXBfaW5uZXIoKQorICAgICAgICAgICAgKGZkLCBuYW1lKSA9IHNlbGYubWFrZV90ZW1wKCkKICAgICAgICAgICAgIG9zLmNsb3NlKGZkKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWUuZW5kc3dpdGgoJ2JiYicpKQogCkBAIC00NzUsNiArNTA5LDIwIEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGEgaXMgYikKIAorICAgIGRlZiB0ZXN0X2Nhc2Vfc2Vuc2l0aXZlKHNlbGYpOgorICAgICAgICAjIGdldHRlbXBkaXIgc2hvdWxkIG5vdCBmbGF0dGVuIGl0cyBjYXNlCisgICAgICAgICMgZXZlbiBvbiBhIGNhc2UtaW5zZW5zaXRpdmUgZmlsZSBzeXN0ZW0KKyAgICAgICAgY2FzZV9zZW5zaXRpdmVfdGVtcGRpciA9IHRlbXBmaWxlLm1rZHRlbXAoIi1UZW1wIikKKyAgICAgICAgX3RlbXBkaXIsIHRlbXBmaWxlLnRlbXBkaXIgPSB0ZW1wZmlsZS50ZW1wZGlyLCBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHdpdGggc3VwcG9ydC5FbnZpcm9ubWVudFZhckd1YXJkKCkgYXMgZW52OgorICAgICAgICAgICAgICAgICMgRmFrZSB0aGUgZmlyc3QgZW52IHZhciB3aGljaCBpcyBjaGVja2VkIGFzIGEgY2FuZGlkYXRlCisgICAgICAgICAgICAgICAgZW52WyJUTVBESVIiXSA9IGNhc2Vfc2Vuc2l0aXZlX3RlbXBkaXIKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlbXBmaWxlLmdldHRlbXBkaXIoKSwgY2FzZV9zZW5zaXRpdmVfdGVtcGRpcikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHRlbXBmaWxlLnRlbXBkaXIgPSBfdGVtcGRpcgorICAgICAgICAgICAgc3VwcG9ydC5ybWRpcihjYXNlX3NlbnNpdGl2ZV90ZW1wZGlyKQorCiAKIGNsYXNzIFRlc3RNa3N0ZW1wKEJhc2VUZXN0Q2FzZSk6CiAgICAgIiIiVGVzdCBta3N0ZW1wKCkuIiIiCkBAIC01MTIsOSArNTYwLDEyIEBACiAgICAgICAgICAgICBvcy5ybWRpcihkaXIpCiAKIAotY2xhc3MgVGVzdE1rZHRlbXAoQmFzZVRlc3RDYXNlKToKK2NsYXNzIFRlc3RNa2R0ZW1wKFRlc3RCYWRUZW1wZGlyLCBCYXNlVGVzdENhc2UpOgogICAgICIiIlRlc3QgbWtkdGVtcCgpLiIiIgogCisgICAgZGVmIG1ha2VfdGVtcChzZWxmKToKKyAgICAgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAoKQorCiAgICAgZGVmIGRvX2NyZWF0ZShzZWxmLCBkaXI9Tm9uZSwgcHJlPSIiLCBzdWY9IiIpOgogICAgICAgICBpZiBkaXIgaXMgTm9uZToKICAgICAgICAgICAgIGRpciA9IHRlbXBmaWxlLmdldHRlbXBkaXIoKQpAQCAtNTYzLDcgKzYxNCw3IEBACiAgICAgICAgICAgICBtb2RlID0gc3RhdC5TX0lNT0RFKG9zLnN0YXQoZGlyKS5zdF9tb2RlKQogICAgICAgICAgICAgbW9kZSAmPSAwbzc3NyAjIE1hc2sgb2ZmIHN0aWNreSBiaXRzIGluaGVyaXRlZCBmcm9tIC90bXAKICAgICAgICAgICAgIGV4cGVjdGVkID0gMG83MDAKLSAgICAgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSBpbiAoJ3dpbjMyJywgJ29zMmVteCcpOgorICAgICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSdzIG5vIGRpc3RpbmN0aW9uIGFtb25nICd1c2VyJywgJ2dyb3VwJyBhbmQgJ3dvcmxkJzsKICAgICAgICAgICAgICAgICAjIHJlcGxpY2F0ZSB0aGUgJ3VzZXInIGJpdHMuCiAgICAgICAgICAgICAgICAgdXNlciA9IGV4cGVjdGVkID4+IDYKQEAgLTY5MSw2ICs3NDIsMTkgQEAKICAgICAgICAgICAgICMgTm8gcmVmZXJlbmNlIGN5Y2xlIHdhcyBjcmVhdGVkLgogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3IoKSkKIAorICAgIGRlZiB0ZXN0X2l0ZXIoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIzNzAwOiBnZXR0aW5nIGl0ZXJhdG9yIGZyb20gYSB0ZW1wb3JhcnkgZmlsZSBzaG91bGQga2VlcAorICAgICAgICAjIGl0IGFsaXZlIGFzIGxvbmcgYXMgaXQncyBiZWluZyBpdGVyYXRlZCBvdmVyCisgICAgICAgIGxpbmVzID0gW2Inc3BhbVxuJywgYidlZ2dzXG4nLCBiJ2JlYW5zXG4nXQorICAgICAgICBkZWYgbWFrZV9maWxlKCk6CisgICAgICAgICAgICBmID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKG1vZGU9J3crYicpCisgICAgICAgICAgICBmLndyaXRlKGInJy5qb2luKGxpbmVzKSkKKyAgICAgICAgICAgIGYuc2VlaygwKQorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgZm9yIGksIGwgaW4gZW51bWVyYXRlKG1ha2VfZmlsZSgpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobCwgbGluZXNbaV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaSwgbGVuKGxpbmVzKSAtIDEpCisKICAgICBkZWYgdGVzdF9jcmVhdGVzX25hbWVkKHNlbGYpOgogICAgICAgICAjIE5hbWVkVGVtcG9yYXJ5RmlsZSBjcmVhdGVzIGZpbGVzIHdpdGggbmFtZXMKICAgICAgICAgZiA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgpCkBAIC03NDMsNiArODA3LDE5IEBACiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB1c2VfY2xvc2VkKQogCisgICAgZGVmIHRlc3Rfbm9fbGVha19mZChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjEwNTg6IGRvbid0IGxlYWsgZmlsZSBkZXNjcmlwdG9yIHdoZW4gaW8ub3BlbigpIGZhaWxzCisgICAgICAgIGNsb3NlZCA9IFtdCisgICAgICAgIG9zX2Nsb3NlID0gb3MuY2xvc2UKKyAgICAgICAgZGVmIGNsb3NlKGZkKToKKyAgICAgICAgICAgIGNsb3NlZC5hcHBlbmQoZmQpCisgICAgICAgICAgICBvc19jbG9zZShmZCkKKworICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmNsb3NlJywgc2lkZV9lZmZlY3Q9Y2xvc2UpOgorICAgICAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCdpby5vcGVuJywgc2lkZV9lZmZlY3Q9VmFsdWVFcnJvcik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGNsb3NlZCksIDEpCisKICAgICAjIEhvdyB0byB0ZXN0IHRoZSBtb2RlIGFuZCBidWZzaXplIHBhcmFtZXRlcnM/CiAKIApAQCAtMTA0Niw2ICsxMTIzLDIwIEBACiAgICAgICAgICAgICByb3VuZHRyaXAoIlx1MDM5QiIsICJ3KyIsIGVuY29kaW5nPSJ1dGYtMTYiKQogICAgICAgICAgICAgcm91bmR0cmlwKCJmb29cclxuIiwgIncrIiwgbmV3bGluZT0iIikKIAorICAgICAgICBkZWYgdGVzdF9ub19sZWFrX2ZkKHNlbGYpOgorICAgICAgICAgICAgIyBJc3N1ZSAjMjEwNTg6IGRvbid0IGxlYWsgZmlsZSBkZXNjcmlwdG9yIHdoZW4gaW8ub3BlbigpIGZhaWxzCisgICAgICAgICAgICBjbG9zZWQgPSBbXQorICAgICAgICAgICAgb3NfY2xvc2UgPSBvcy5jbG9zZQorICAgICAgICAgICAgZGVmIGNsb3NlKGZkKToKKyAgICAgICAgICAgICAgICBjbG9zZWQuYXBwZW5kKGZkKQorICAgICAgICAgICAgICAgIG9zX2Nsb3NlKGZkKQorCisgICAgICAgICAgICB3aXRoIG1vY2sucGF0Y2goJ29zLmNsb3NlJywgc2lkZV9lZmZlY3Q9Y2xvc2UpOgorICAgICAgICAgICAgICAgIHdpdGggbW9jay5wYXRjaCgnaW8ub3BlbicsIHNpZGVfZWZmZWN0PVZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0ZW1wZmlsZS5UZW1wb3JhcnlGaWxlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihjbG9zZWQpLCAxKQorCisKIAogIyBIZWxwZXIgZm9yIHRlc3RfZGVsX29uX3NodXRkb3duCiBjbGFzcyBOdWxsZWRNb2R1bGVzOgpAQCAtMTEzOSw4ICsxMjMwLDkgQEAKICAgICBkZWYgdGVzdF9kZWxfb25fc2h1dGRvd24oc2VsZik6CiAgICAgICAgICMgQSBUZW1wb3JhcnlEaXJlY3RvcnkgbWF5IGJlIGNsZWFuZWQgdXAgZHVyaW5nIHNodXRkb3duCiAgICAgICAgIHdpdGggc2VsZi5kb19jcmVhdGUoKSBhcyBkaXI6Ci0gICAgICAgICAgICBmb3IgbW9kIGluICgnb3MnLCAnc2h1dGlsJywgJ3N5cycsICd0ZW1wZmlsZScsICd3YXJuaW5ncycpOgorICAgICAgICAgICAgZm9yIG1vZCBpbiAoJ2J1aWx0aW5zJywgJ29zJywgJ3NodXRpbCcsICdzeXMnLCAndGVtcGZpbGUnLCAnd2FybmluZ3MnKToKICAgICAgICAgICAgICAgICBjb2RlID0gIiIiaWYgVHJ1ZToKKyAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGJ1aWx0aW5zCiAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBvcwogICAgICAgICAgICAgICAgICAgICBpbXBvcnQgc2h1dGlsCiAgICAgICAgICAgICAgICAgICAgIGltcG9ydCBzeXMKQEAgLTExNjUsNiArMTI1NywzMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZW1wb3JhcnlEaXJlY3RvcnkgJXMgZXhpc3RzIGFmdGVyIGNsZWFudXAiICUgdG1wX25hbWUpCiAgICAgICAgICAgICAgICAgZXJyID0gZXJyLmRlY29kZSgndXRmLTgnLCAnYmFja3NsYXNocmVwbGFjZScpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiRXhjZXB0aW9uICIsIGVycikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJSZXNvdXJjZVdhcm5pbmc6IEltcGxpY2l0bHkgY2xlYW5pbmcgdXAiLCBlcnIpCisKKyAgICBkZWYgdGVzdF9leGl0X29uX3NodXRkb3duKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyMjQyNworICAgICAgICB3aXRoIHNlbGYuZG9fY3JlYXRlKCkgYXMgZGlyOgorICAgICAgICAgICAgY29kZSA9ICIiImlmIFRydWU6CisgICAgICAgICAgICAgICAgaW1wb3J0IHN5cworICAgICAgICAgICAgICAgIGltcG9ydCB0ZW1wZmlsZQorICAgICAgICAgICAgICAgIGltcG9ydCB3YXJuaW5ncworCisgICAgICAgICAgICAgICAgZGVmIGdlbmVyYXRvcigpOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeShkaXI9e2RpciFyfSkgYXMgdG1wOgorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgdG1wCisgICAgICAgICAgICAgICAgZyA9IGdlbmVyYXRvcigpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5idWZmZXIud3JpdGUobmV4dChnKS5lbmNvZGUoKSkKKworICAgICAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1SZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICAgICAgIiIiLmZvcm1hdChkaXI9ZGlyKQorICAgICAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgICAgICB0bXBfbmFtZSA9IG91dC5kZWNvZGUoKS5zdHJpcCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHRtcF9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJUZW1wb3JhcnlEaXJlY3RvcnkgJXMgZXhpc3RzIGFmdGVyIGNsZWFudXAiICUgdG1wX25hbWUpCisgICAgICAgICAgICBlcnIgPSBlcnIuZGVjb2RlKCd1dGYtOCcsICdiYWNrc2xhc2hyZXBsYWNlJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkV4Y2VwdGlvbiAiLCBlcnIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEluKCJSZXNvdXJjZVdhcm5pbmc6IEltcGxpY2l0bHkgY2xlYW5pbmcgdXAiLCBlcnIpCiAKICAgICBkZWYgdGVzdF93YXJuaW5nc19vbl9jbGVhbnVwKHNlbGYpOgogICAgICAgICAjIFJlc291cmNlV2FybmluZyB3aWxsIGJlIHRyaWdnZXJlZCBieSBfX2RlbF9fCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5IGIvTGliL3Rlc3QvdGVzdF90ZXh0d3JhcC5weQppbmRleCBjODZmNWNmLi5lYTdjMDg5IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RleHR3cmFwLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGV4dHdyYXAucHkKQEAgLTksOSArOSw4IEBACiAjCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKLWZyb20gdGV4dHdyYXAgaW1wb3J0IFRleHRXcmFwcGVyLCB3cmFwLCBmaWxsLCBkZWRlbnQsIGluZGVudAorZnJvbSB0ZXh0d3JhcCBpbXBvcnQgVGV4dFdyYXBwZXIsIHdyYXAsIGZpbGwsIGRlZGVudCwgaW5kZW50LCBzaG9ydGVuCiAKIAogY2xhc3MgQmFzZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTQzMCw2ICs0MjksOTAgQEAKICAgICAgICAgc2VsZi5jaGVja193cmFwKHRleHQsIDcsIFsiYWEgXHhlNFx4ZTQtIiwgIlx4ZTRceGU0Il0pCiAKIAorY2xhc3MgTWF4TGluZXNUZXN0Q2FzZShCYXNlVGVzdENhc2UpOgorICAgIHRleHQgPSAiSGVsbG8gdGhlcmUsIGhvdyBhcmUgeW91IHRoaXMgZmluZSBkYXk/ICBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgIGRlZiB0ZXN0X3NpbXBsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MCkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBbLi4uXSJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIFsuLi5dIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MikKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBtYXhfbGluZXM9MSkKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIHRoZXJlLCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImhvdyBhcmUgeW91IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcyBmaW5lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZGF5PyAgSSdtIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZ2xhZCB0byBoZWFyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaXQhIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9NikKKworICAgIGRlZiB0ZXN0X3NwYWNlcyhzZWxmKToKKyAgICAgICAgIyBzdHJpcCBzcGFjZXMgYmVmb3JlIHBsYWNlaG9sZGVyCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz00KQorICAgICAgICAjIHBsYWNlaG9sZGVyIGF0IHRoZSBzdGFydCBvZiBsaW5lCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDYsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiWy4uLl0iXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1heF9saW5lcz0yKQorICAgICAgICAjIGZpbmFsIHNwYWNlcworICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0ICsgJyAnICogMTAsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWyJIZWxsbyB0aGVyZSwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICJob3cgYXJlIHlvdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZmluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImRheT8gIEknbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImdsYWQgdG8gaGVhciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIml0ISJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTYpCisKKyAgICBkZWYgdGVzdF9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgMTIsCisgICAgICAgICAgICAgICAgICAgICAgICBbIkhlbGxvLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPScuLi4nKQorICAgICAgICBzZWxmLmNoZWNrX3dyYXAoc2VsZi50ZXh0LCAxMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFsiSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiaG93IGFyZS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nLi4uJykKKyAgICAgICAgIyBsb25nIHBsYWNlaG9sZGVyIGFuZCBpbmRlbnRhdGlvbgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgd3JhcChzZWxmLnRleHQsIDE2LCBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgIG1heF9saW5lcz0xLCBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHdyYXAoc2VsZi50ZXh0LCAxNiwgc3Vic2VxdWVudF9pbmRlbnQ9JyAgICAnLAorICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MiwgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgICAgSGVsbG8gdGhlcmUsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiICBbdHJ1bmNhdGVkXS4uLiJdLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFsX2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAnLAorICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JyBbdHJ1bmNhdGVkXS4uLicpCisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDE2LAorICAgICAgICAgICAgICAgICAgICAgICAgWyIgIFt0cnVuY2F0ZWRdLi4uIl0sCisgICAgICAgICAgICAgICAgICAgICAgICBtYXhfbGluZXM9MSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxfaW5kZW50PScgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50X2luZGVudD0nICAgICcsCisgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0nIFt0cnVuY2F0ZWRdLi4uJykKKyAgICAgICAgc2VsZi5jaGVja193cmFwKHNlbGYudGV4dCwgODAsIFtzZWxmLnRleHRdLCBwbGFjZWhvbGRlcj0nLicgKiAxMDAwKQorCisKIGNsYXNzIExvbmdXb3JkVGVzdENhc2UgKEJhc2VUZXN0Q2FzZSk6CiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLndyYXBwZXIgPSBUZXh0V3JhcHBlcigpCkBAIC00OTAsNiArNTczLDE0IEBACiAgICAgICAgIHJlc3VsdCA9IHdyYXAoc2VsZi50ZXh0LCB3aWR0aD0zMCwgYnJlYWtfbG9uZ193b3Jkcz0wKQogICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQogCisgICAgZGVmIHRlc3RfbWF4X2xpbmVzX2xvbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfd3JhcChzZWxmLnRleHQsIDEyLAorICAgICAgICAgICAgICAgICAgICAgICAgWydEaWQgeW91IHNheSAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICcic3VwZXJjYWxpZnInLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhZ2lsaXN0aWNleHAnLAorICAgICAgICAgICAgICAgICAgICAgICAgICdbLi4uXSddLAorICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2xpbmVzPTQpCisKIAogY2xhc3MgSW5kZW50VGVzdENhc2VzKEJhc2VUZXN0Q2FzZSk6CiAKQEAgLTY0MSw2ICs3MzIsMTEgQEAKICAgICAgICAgZXhwZWN0ID0gImhlbGxvIHRoZXJlXG4gIGhvdyBhcmUgeW91PyIKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKIAorICAgICAgICAjIHRlc3QgbWFyZ2luIGlzIHNtYWxsZXIgdGhhbiBzbWFsbGVzdCBpbmRlbnQKKyAgICAgICAgdGV4dCA9ICIgIFx0aGVsbG8gdGhlcmVcbiAgIFx0aG93IGFyZSB5b3U/XG4gXHRJJ20gZmluZSwgdGhhbmtzIgorICAgICAgICBleHBlY3QgPSAiIFx0aGVsbG8gdGhlcmVcbiAgXHRob3cgYXJlIHlvdT9cblx0SSdtIGZpbmUsIHRoYW5rcyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleHBlY3QsIGRlZGVudCh0ZXh0KSkKKwogCiAjIFRlc3QgdGV4dHdyYXAuaW5kZW50CiBjbGFzcyBJbmRlbnRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC03NzcsMTIgKzg3Myw2MiBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmRlbnQodGV4dCwgcHJlZml4LCBwcmVkaWNhdGUpLCBleHBlY3QpCiAKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFdyYXBUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvbmdXb3JkVGVzdENhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRlbnRUZXN0Q2FzZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWRlbnRUZXN0Q2FzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGVudFRlc3RDYXNlKQorY2xhc3MgU2hvcnRlblRlc3RDYXNlKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgY2hlY2tfc2hvcnRlbihzZWxmLCB0ZXh0LCB3aWR0aCwgZXhwZWN0LCAqKmt3YXJncyk6CisgICAgICAgIHJlc3VsdCA9IHNob3J0ZW4odGV4dCwgd2lkdGgsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmNoZWNrKHJlc3VsdCwgZXhwZWN0KQorCisgICAgZGVmIHRlc3Rfc2ltcGxlKHNlbGYpOgorICAgICAgICAjIFNpbXBsZSBjYXNlOiBqdXN0IHdvcmRzLCBzcGFjZXMsIGFuZCBhIGJpdCBvZiBwdW5jdHVhdGlvbgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTgsICJIZWxsbyB0aGVyZSwgWy4uLl0iKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpLCB0ZXh0KQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpIC0gMSwKKyAgICAgICAgICAgICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIgorICAgICAgICAgICAgIkknbSBnbGFkIHRvIFsuLi5dIikKKworICAgIGRlZiB0ZXN0X3BsYWNlaG9sZGVyKHNlbGYpOgorICAgICAgICB0ZXh0ID0gIkhlbGxvIHRoZXJlLCBob3cgYXJlIHlvdSB0aGlzIGZpbmUgZGF5PyBJJ20gZ2xhZCB0byBoZWFyIGl0ISIKKworICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgMTcsICJIZWxsbyB0aGVyZSwkJCIsIHBsYWNlaG9sZGVyPSckJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxOCwgIkhlbGxvIHRoZXJlLCBob3ckJCIsIHBsYWNlaG9sZGVyPSckJCcpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCAxOCwgIkhlbGxvIHRoZXJlLCAkJCIsIHBsYWNlaG9sZGVyPScgJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpLCB0ZXh0LCBwbGFjZWhvbGRlcj0nJCQnKQorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgbGVuKHRleHQpIC0gMSwKKyAgICAgICAgICAgICJIZWxsbyB0aGVyZSwgaG93IGFyZSB5b3UgdGhpcyBmaW5lIGRheT8gIgorICAgICAgICAgICAgIkknbSBnbGFkIHRvIGhlYXIkJCIsIHBsYWNlaG9sZGVyPSckJCcpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiIiwgNiwgIiIpCisKKyAgICBkZWYgdGVzdF93aGl0ZXNwYWNlKHNlbGYpOgorICAgICAgICAjIFdoaXRlc3BhY2UgY29sbGFwc2luZworICAgICAgICB0ZXh0ID0gIiIiCisgICAgICAgICAgICBUaGlzIGlzIGEgIHBhcmFncmFwaCB0aGF0ICBhbHJlYWR5IGhhcworICAgICAgICAgICAgbGluZSBicmVha3MgYW5kIFx0IHRhYnMgdG9vLiIiIgorICAgICAgICBzZWxmLmNoZWNrX3Nob3J0ZW4odGV4dCwgNjIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGlzIGEgcGFyYWdyYXBoIHRoYXQgYWxyZWFkeSBoYXMgbGluZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJicmVha3MgYW5kIHRhYnMgdG9vLiIpCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbih0ZXh0LCA2MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYSBwYXJhZ3JhcGggdGhhdCBhbHJlYWR5IGhhcyBsaW5lICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJyZWFrcyBhbmQgWy4uLl0iKQorCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiaGVsbG8gICAgICB3b3JsZCEgICIsIDEyLCAiaGVsbG8gd29ybGQhIikKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJoZWxsbyAgICAgIHdvcmxkISAgIiwgMTEsICJoZWxsbyBbLi4uXSIpCisgICAgICAgICMgVGhlIGxlYWRpbmcgc3BhY2UgaXMgdHJpbW1lZCBmcm9tIHRoZSBwbGFjZWhvbGRlcgorICAgICAgICAjIChpdCB3b3VsZCBiZSB1Z2x5IG90aGVyd2lzZSkuCisgICAgICAgIHNlbGYuY2hlY2tfc2hvcnRlbigiaGVsbG8gICAgICB3b3JsZCEgICIsIDEwLCAiWy4uLl0iKQorCisgICAgZGVmIHRlc3Rfd2lkdGhfdG9vX3NtYWxsX2Zvcl9wbGFjZWhvbGRlcihzZWxmKToKKyAgICAgICAgc2hvcnRlbigieCIgKiAyMCwgd2lkdGg9OCwgcGxhY2Vob2xkZXI9IiguLi4uLi4pIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIHNob3J0ZW4oIngiICogMjAsIHdpZHRoPTgsIHBsYWNlaG9sZGVyPSIoLi4uLi4uLikiKQorCisgICAgZGVmIHRlc3RfZmlyc3Rfd29yZF90b29fbG9uZ19idXRfcGxhY2Vob2xkZXJfZml0cyhzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19zaG9ydGVuKCJIZWxsb28iLCA1LCAiWy4uLl0iKQorCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKaW5kZXggNTQzNzI4MS4uNjE0NDkwMSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWQucHkKQEAgLTY4LDcgKzY4LDcgQEAKICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUoMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aHJlYWQuc3RhY2tfc2l6ZSgpLCAwLCAic3RhY2tfc2l6ZSBub3QgcmVzZXQgdG8gZGVmYXVsdCIpCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKG9zLm5hbWUgbm90IGluICgibnQiLCAib3MyIiwgInBvc2l4IiksICd0ZXN0IG1lYW50IGZvciBudCwgb3MyLCBhbmQgcG9zaXgnKQorICAgIEB1bml0dGVzdC5za2lwSWYob3MubmFtZSBub3QgaW4gKCJudCIsICJwb3NpeCIpLCAndGVzdCBtZWFudCBmb3IgbnQgYW5kIHBvc2l4JykKICAgICBkZWYgdGVzdF9udF9hbmRfcG9zaXhfc3RhY2tfc2l6ZShzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgdGhyZWFkLnN0YWNrX3NpemUoNDA5NikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWRfaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKaW5kZXggNmMyOTY1Yi4uNGJlNjE1YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRlZF9pbXBvcnQucHkKQEAgLTUsMTUgKzUsMTYgQEAKICMgY29tcGxhaW5zIHNldmVyYWwgdGltZXMgYWJvdXQgbW9kdWxlIHJhbmRvbSBoYXZpbmcgbm8gYXR0cmlidXRlCiAjIHJhbmRyYW5nZSwgYW5kIHRoZW4gUHl0aG9uIGhhbmdzLgogCitpbXBvcnQgX2ltcCBhcyBpbXAKIGltcG9ydCBvcwotaW1wb3J0IGltcAogaW1wb3J0IGltcG9ydGxpYgogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKIGltcG9ydCBzaHV0aWwKIGltcG9ydCB1bml0dGVzdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0ICgKLSAgICB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlLCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgcmVhcF90aHJlYWRzLCBmb3JnZXQsIHVubGluaykKKyAgICB2ZXJib3NlLCBpbXBvcnRfbW9kdWxlLCBydW5fdW5pdHRlc3QsIFRFU1RGTiwgcmVhcF90aHJlYWRzLAorICAgIGZvcmdldCwgdW5saW5rLCBybXRyZWUsIHN0YXJ0X3RocmVhZHMpCiB0aHJlYWRpbmcgPSBpbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCiBkZWYgdGFzayhOLCBkb25lLCBkb25lX3Rhc2tzLCBlcnJvcnMpOgpAQCAtNTcsNyArNTgsNyBAQAogfQogCiBjbGFzcyBGaW5kZXI6Ci0gICAgIiIiQSBkdW1teSBmaW5kZXIgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIGl0cyBmaW5kX21vZHVsZSgpCisgICAgIiIiQSBkdW1teSBmaW5kZXIgdG8gZGV0ZWN0IGNvbmN1cnJlbnQgYWNjZXNzIHRvIGl0cyBmaW5kX3NwZWMoKQogICAgIG1ldGhvZC4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTY1LDggKzY2LDggQEAKICAgICAgICAgc2VsZi54ID0gMAogICAgICAgICBzZWxmLmxvY2sgPSB0aHJlYWRpbmcuTG9jaygpCiAKLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToKLSAgICAgICAgIyBTaW11bGF0ZSBzb21lIHRocmVhZC11bnNhZmUgYmVoYXZpb3VyLiBJZiBjYWxscyB0byBmaW5kX21vZHVsZSgpCisgICAgZGVmIGZpbmRfc3BlYyhzZWxmLCBuYW1lLCBwYXRoPU5vbmUsIHRhcmdldD1Ob25lKToKKyAgICAgICAgIyBTaW11bGF0ZSBzb21lIHRocmVhZC11bnNhZmUgYmVoYXZpb3VyLiBJZiBjYWxscyB0byBmaW5kX3NwZWMoKQogICAgICAgICAjIGFyZSBwcm9wZXJseSBzZXJpYWxpemVkLCBgeGAgd2lsbCBlbmQgdXAgdGhlIHNhbWUgYXMgYG51bWNhbGxzYC4KICAgICAgICAgIyBPdGhlcndpc2Ugbm90LgogICAgICAgICBhc3NlcnQgaW1wLmxvY2tfaGVsZCgpCkBAIC04MCw3ICs4MSw3IEBACiAgICAgIiIiQSBkdW1teSBmaW5kZXIgd2hpY2ggZmx1c2hlcyBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZSB3aGVuIGl0IGdldHMKICAgICBjYWxsZWQuIiIiCiAKLSAgICBkZWYgZmluZF9tb2R1bGUoc2VsZiwgbmFtZSwgcGF0aD1Ob25lKToKKyAgICBkZWYgZmluZF9zcGVjKHNlbGYsIG5hbWUsIHBhdGg9Tm9uZSwgdGFyZ2V0PU5vbmUpOgogICAgICAgICBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS5jbGVhcigpCiAKIApAQCAtMTE0LDEwICsxMTUsMTAgQEAKICAgICAgICAgICAgIGVycm9ycyA9IFtdCiAgICAgICAgICAgICBkb25lX3Rhc2tzID0gW10KICAgICAgICAgICAgIGRvbmUuY2xlYXIoKQotICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoTik6Ci0gICAgICAgICAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXRhc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncz0oTiwgZG9uZSwgZG9uZV90YXNrcywgZXJyb3JzLCkpCi0gICAgICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB3aXRoIHN0YXJ0X3RocmVhZHModGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9dGFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3M9KE4sIGRvbmUsIGRvbmVfdGFza3MsIGVycm9ycywpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKE4pKToKKyAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZG9uZS53YWl0KDYwKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyb3JzKQogICAgICAgICAgICAgaWYgdmVyYm9zZToKQEAgLTE0NSwxMyArMTQ2LDEzIEBACiAgICAgICAgICMgZGVkaWNhdGVkIG1ldGFfcGF0aCBlbnRyeS4KICAgICAgICAgZmx1c2hpbmdfZmluZGVyID0gRmx1c2hpbmdGaW5kZXIoKQogICAgICAgICBkZWYgcGF0aF9ob29rKHBhdGgpOgotICAgICAgICAgICAgZmluZGVyLmZpbmRfbW9kdWxlKCcnKQorICAgICAgICAgICAgZmluZGVyLmZpbmRfc3BlYygnJykKICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yCiAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmluc2VydCgwLCBwYXRoX2hvb2spCiAgICAgICAgIHN5cy5tZXRhX3BhdGguYXBwZW5kKGZsdXNoaW5nX2ZpbmRlcikKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgIyBGbHVzaCB0aGUgY2FjaGUgYSBmaXJzdCB0aW1lCi0gICAgICAgICAgICBmbHVzaGluZ19maW5kZXIuZmluZF9tb2R1bGUoJycpCisgICAgICAgICAgICBmbHVzaGluZ19maW5kZXIuZmluZF9zcGVjKCcnKQogICAgICAgICAgICAgbnVtdGVzdHMgPSBzZWxmLmNoZWNrX3BhcmFsbGVsX21vZHVsZV9pbml0KCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihmaW5kZXIubnVtY2FsbHMsIDApCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbmRlci54LCBmaW5kZXIubnVtY2FsbHMpCkBAIC0yMjIsNiArMjIzLDcgQEAKICAgICAgICAgICAgIGYud3JpdGUoY29kZS5lbmNvZGUoJ3V0Zi04JykpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1bmxpbmssIGZpbGVuYW1lKQogICAgICAgICBzZWxmLmFkZENsZWFudXAoZm9yZ2V0LCBURVNURk4pCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChybXRyZWUsICdfX3B5Y2FjaGVfXycpCiAgICAgICAgIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpCiAgICAgICAgIF9faW1wb3J0X18oVEVTVEZOKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3RocmVhZGVkdGVtcGZpbGUucHkKaW5kZXggMmRmZDNhMC4uYjc0MjAzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRlZHRlbXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkZWR0ZW1wZmlsZS5weQpAQCAtMTgsNyArMTgsNyBAQAogCiBpbXBvcnQgdGVtcGZpbGUKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHRocmVhZGluZ19zZXR1cCwgdGhyZWFkaW5nX2NsZWFudXAsIHJ1bl91bml0dGVzdCwgaW1wb3J0X21vZHVsZQorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHN0YXJ0X3RocmVhZHMsIGltcG9ydF9tb2R1bGUKIHRocmVhZGluZyA9IGltcG9ydF9tb2R1bGUoJ3RocmVhZGluZycpCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBpbwpAQCAtNDYsMzMgKzQ2LDE3IEBACiAKIGNsYXNzIFRocmVhZGVkVGVtcEZpbGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgdGVzdF9tYWluKHNlbGYpOgotICAgICAgICB0aHJlYWRzID0gW10KLSAgICAgICAgdGhyZWFkX2luZm8gPSB0aHJlYWRpbmdfc2V0dXAoKQotCi0gICAgICAgIGZvciBpIGluIHJhbmdlKE5VTV9USFJFQURTKToKLSAgICAgICAgICAgIHQgPSBUZW1wRmlsZUdyZWVkeSgpCi0gICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQotICAgICAgICAgICAgdC5zdGFydCgpCi0KLSAgICAgICAgc3RhcnRFdmVudC5zZXQoKQotCi0gICAgICAgIG9rID0gMAotICAgICAgICBlcnJvcnMgPSBbXQotICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgotICAgICAgICAgICAgdC5qb2luKCkKLSAgICAgICAgICAgIG9rICs9IHQub2tfY291bnQKLSAgICAgICAgICAgIGlmIHQuZXJyb3JfY291bnQ6Ci0gICAgICAgICAgICAgICAgZXJyb3JzLmFwcGVuZChzdHIodC5uYW1lKSArIHN0cih0LmVycm9ycy5nZXR2YWx1ZSgpKSkKLQotICAgICAgICB0aHJlYWRpbmdfY2xlYW51cCgqdGhyZWFkX2luZm8pCisgICAgICAgIHRocmVhZHMgPSBbVGVtcEZpbGVHcmVlZHkoKSBmb3IgaSBpbiByYW5nZShOVU1fVEhSRUFEUyldCisgICAgICAgIHdpdGggc3RhcnRfdGhyZWFkcyh0aHJlYWRzLCBzdGFydEV2ZW50LnNldCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIG9rID0gc3VtKHQub2tfY291bnQgZm9yIHQgaW4gdGhyZWFkcykKKyAgICAgICAgZXJyb3JzID0gW3N0cih0Lm5hbWUpICsgc3RyKHQuZXJyb3JzLmdldHZhbHVlKCkpCisgICAgICAgICAgICAgICAgICBmb3IgdCBpbiB0aHJlYWRzIGlmIHQuZXJyb3JfY291bnRdCiAKICAgICAgICAgbXNnID0gIkVycm9yczogZXJyb3JzICVkIG9rICVkXG4lcyIgJSAobGVuKGVycm9ycyksIG9rLAogICAgICAgICAgICAgJ1xuJy5qb2luKGVycm9ycykpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyb3JzLCBbXSwgbXNnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9rLCBOVU1fVEhSRUFEUyAqIEZJTEVTX1BFUl9USFJFQUQpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoVGhyZWFkZWRUZW1wRmlsZVRlc3QpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKaW5kZXggMTFjODk3OS4uNGI3NWVhNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aHJlYWRpbmcucHkKQEAgLTQsNyArNCw3IEBACiAKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCB2ZXJib3NlLCBzdHJpcF9weXRob25fc3RkZXJyLCBpbXBvcnRfbW9kdWxlLCBjcHl0aG9uX29ubHkKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaywgYXNzZXJ0X3B5dGhvbl9mYWlsdXJlCiAKIGltcG9ydCByYW5kb20KIGltcG9ydCByZQpAQCAtMTUsMTUgKzE1LDE5IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB3ZWFrcmVmCiBpbXBvcnQgb3MKLWZyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKIGltcG9ydCBzdWJwcm9jZXNzCi10cnk6Ci0gICAgaW1wb3J0IF90ZXN0Y2FwaQotZXhjZXB0IEltcG9ydEVycm9yOgotICAgIF90ZXN0Y2FwaSA9IE5vbmUKIAogZnJvbSB0ZXN0IGltcG9ydCBsb2NrX3Rlc3RzCiAKKworIyBCZXR3ZWVuIGZvcmsoKSBhbmQgZXhlYygpLCBvbmx5IGFzeW5jLXNhZmUgZnVuY3Rpb25zIGFyZSBhbGxvd2VkIChpc3N1ZXMKKyMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKKyMgcHJvYmxlbXMgd2l0aCBzb21lIG9wZXJhdGluZyBzeXN0ZW1zIChpc3N1ZSAjMzg2Myk6IHNraXAgcHJvYmxlbWF0aWMgdGVzdHMKKyMgb24gcGxhdGZvcm1zIGtub3duIHRvIGJlaGF2ZSBiYWRseS4KK3BsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKKyAgICAgICAgICAgICAgICAgICAgICdocC11eDExJykKKworCiAjIEEgdHJpdmlhbCBtdXRhYmxlIGNvdW50ZXIuCiBjbGFzcyBDb3VudGVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgpAQCAtMTAzLDcgKzEwNyw3IEBACiAgICAgICAgIGlmIHZlcmJvc2U6CiAgICAgICAgICAgICBwcmludCgnd2FpdGluZyBmb3IgYWxsIHRhc2tzIHRvIGNvbXBsZXRlJykKICAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgIHQuam9pbihOVU1UQVNLUykKKyAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobm90IHQuaXNfYWxpdmUoKSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwodC5pZGVudCwgMCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodC5pZGVudCBpcyBOb25lKQpAQCAtNDcxLDYgKzQ3NSwxMjcgQEAKICAgICAgICAgICAgICAgICBwaWQsIHN0YXR1cyA9IG9zLndhaXRwaWQocGlkLCAwKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQogCisgICAgZGVmIHRlc3RfbWFpbl90aHJlYWQoc2VsZik6CisgICAgICAgIG1haW4gPSB0aHJlYWRpbmcubWFpbl90aHJlYWQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haW4ubmFtZSwgJ01haW5UaHJlYWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haW4uaWRlbnQsIHRocmVhZGluZy5jdXJyZW50X3RocmVhZCgpLmlkZW50KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1haW4uaWRlbnQsIHRocmVhZGluZy5nZXRfaWRlbnQoKSkKKworICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbCh0aHJlYWRpbmcubWFpbl90aHJlYWQoKS5pZGVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgIHRoID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZikKKyAgICAgICAgdGguc3RhcnQoKQorICAgICAgICB0aC5qb2luKCkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJ0ZXN0IG5lZWRzIG9zLmZvcmsoKSIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ3dhaXRwaWQnKSwgInRlc3QgbmVlZHMgb3Mud2FpdHBpZCgpIikKKyAgICBkZWYgdGVzdF9tYWluX3RocmVhZF9hZnRlcl9mb3JrKHNlbGYpOgorICAgICAgICBjb2RlID0gIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBvcywgdGhyZWFkaW5nCisKKyAgICAgICAgICAgIHBpZCA9IG9zLmZvcmsoKQorICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgbWFpbiA9IHRocmVhZGluZy5tYWluX3RocmVhZCgpCisgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5uYW1lKQorICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgICAgICAgICAgcHJpbnQobWFpbi5pZGVudCA9PSB0aHJlYWRpbmcuZ2V0X2lkZW50KCkpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLndhaXRwaWQocGlkLCAwKQorICAgICAgICAiIiIKKyAgICAgICAgXywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIGNvZGUpCisgICAgICAgIGRhdGEgPSBvdXQuZGVjb2RlKCkucmVwbGFjZSgnXHInLCAnJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIsIGIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAiTWFpblRocmVhZFxuVHJ1ZVxuVHJ1ZVxuIikKKworICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgInRlc3QgbmVlZHMgb3MuZm9yaygpIikKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnd2FpdHBpZCcpLCAidGVzdCBuZWVkcyBvcy53YWl0cGlkKCkiKQorICAgIGRlZiB0ZXN0X21haW5fdGhyZWFkX2FmdGVyX2ZvcmtfZnJvbV9ub25tYWluX3RocmVhZChzZWxmKToKKyAgICAgICAgY29kZSA9ICIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MsIHRocmVhZGluZywgc3lzCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgICAgICAgICAgaWYgcGlkID09IDA6CisgICAgICAgICAgICAgICAgICAgIG1haW4gPSB0aHJlYWRpbmcubWFpbl90aHJlYWQoKQorICAgICAgICAgICAgICAgICAgICBwcmludChtYWluLm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmN1cnJlbnRfdGhyZWFkKCkuaWRlbnQpCisgICAgICAgICAgICAgICAgICAgIHByaW50KG1haW4uaWRlbnQgPT0gdGhyZWFkaW5nLmdldF9pZGVudCgpKQorICAgICAgICAgICAgICAgICAgICAjIHN0ZG91dCBpcyBmdWxseSBidWZmZXJlZCBiZWNhdXNlIG5vdCBhIHR0eSwKKyAgICAgICAgICAgICAgICAgICAgIyB3ZSBoYXZlIHRvIGZsdXNoIGJlZm9yZSBleGl0LgorICAgICAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcy53YWl0cGlkKHBpZCwgMCkKKworICAgICAgICAgICAgdGggPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mKQorICAgICAgICAgICAgdGguc3RhcnQoKQorICAgICAgICAgICAgdGguam9pbigpCisgICAgICAgICIiIgorICAgICAgICBfLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgZGF0YSA9IG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgYiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsICJUaHJlYWQtMVxuVHJ1ZVxuVHJ1ZVxuIikKKworICAgIGRlZiB0ZXN0X3RzdGF0ZV9sb2NrKHNlbGYpOgorICAgICAgICAjIFRlc3QgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsIG9mIFRocmVhZCBvYmplY3RzLgorICAgICAgICBzdGFydGVkID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgZmluaXNoID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc3RhcnRlZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgIyBUaGUgdHN0YXRlIGxvY2sgaXMgTm9uZSB1bnRpbCB0aGUgdGhyZWFkIGlzIHN0YXJ0ZWQKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModC5fdHN0YXRlX2xvY2ssIE5vbmUpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydFRydWUodC5pc19hbGl2ZSgpKQorICAgICAgICAjIFRoZSB0c3RhdGUgbG9jayBjYW4ndCBiZSBhY3F1aXJlZCB3aGVuIHRoZSB0aHJlYWQgaXMgcnVubmluZworICAgICAgICAjIChvciBzdXNwZW5kZWQpLgorICAgICAgICB0c3RhdGVfbG9jayA9IHQuX3RzdGF0ZV9sb2NrCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHN0YXRlX2xvY2suYWNxdWlyZSh0aW1lb3V0PTApLCBGYWxzZSkKKyAgICAgICAgZmluaXNoLnJlbGVhc2UoKQorICAgICAgICAjIFdoZW4gdGhlIHRocmVhZCBlbmRzLCB0aGUgc3RhdGVfbG9jayBjYW4gYmUgc3VjY2Vzc2Z1bGx5CisgICAgICAgICMgYWNxdWlyZWQuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0c3RhdGVfbG9jay5hY3F1aXJlKHRpbWVvdXQ9NSksIEZhbHNlKQorICAgICAgICAjIEJ1dCBpc19hbGl2ZSgpIGlzIHN0aWxsIFRydWU6ICB3ZSBob2xkIF90c3RhdGVfbG9jayBub3csIHdoaWNoCisgICAgICAgICMgcHJldmVudHMgaXNfYWxpdmUoKSBmcm9tIGtub3dpbmcgdGhlIHRocmVhZCdzIGVuZC1vZi1saWZlIEMgY29kZQorICAgICAgICAjIGlzIGRvbmUuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0LmlzX2FsaXZlKCkpCisgICAgICAgICMgTGV0IGlzX2FsaXZlKCkgZmluZCBvdXQgdGhlIEMgY29kZSBpcyBkb25lLgorICAgICAgICB0c3RhdGVfbG9jay5yZWxlYXNlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSh0LmlzX2FsaXZlKCkpCisgICAgICAgICMgQW5kIHZlcmlmeSB0aGUgdGhyZWFkIGRpc3Bvc2VkIG9mIF90c3RhdGVfbG9jay4KKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHQuX3RzdGF0ZV9sb2NrIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9yZXByX3N0b3BwZWQoc2VsZik6CisgICAgICAgICMgVmVyaWZ5IHRoYXQgInN0b3BwZWQiIHNob3dzIHVwIGluIHJlcHIoVGhyZWFkKSBhcHByb3ByaWF0ZWx5LgorICAgICAgICBzdGFydGVkID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgZmluaXNoID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrKCkKKyAgICAgICAgc3RhcnRlZC5hY3F1aXJlKCkKKyAgICAgICAgZmluaXNoLmFjcXVpcmUoKQorICAgICAgICBkZWYgZigpOgorICAgICAgICAgICAgc3RhcnRlZC5yZWxlYXNlKCkKKyAgICAgICAgICAgIGZpbmlzaC5hY3F1aXJlKCkKKyAgICAgICAgdCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpCisgICAgICAgIHQuc3RhcnQoKQorICAgICAgICBzdGFydGVkLmFjcXVpcmUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJzdGFydGVkIiwgcmVwcih0KSkKKyAgICAgICAgZmluaXNoLnJlbGVhc2UoKQorICAgICAgICAjICJzdG9wcGVkIiBzaG91bGQgYXBwZWFyIGluIHRoZSByZXByIGluIGEgcmVhc29uYWJsZSBhbW91bnQgb2YgdGltZS4KKyAgICAgICAgIyBJbXBsZW1lbnRhdGlvbiBkZXRhaWw6ICBhcyBvZiB0aGlzIHdyaXRpbmcsIHRoYXQncyB0cml2aWFsbHkgdHJ1ZQorICAgICAgICAjIGlmIC5qb2luKCkgaXMgY2FsbGVkLCBhbmQgYWxtb3N0IHRyaXZpYWxseSB0cnVlIGlmIC5pc19hbGl2ZSgpIGlzCisgICAgICAgICMgY2FsbGVkLiAgVGhlIGRldGFpbCB3ZSdyZSB0ZXN0aW5nIGhlcmUgaXMgdGhhdCAic3RvcHBlZCIgc2hvd3MgdXAKKyAgICAgICAgIyAiYWxsIG9uIGl0cyBvd24iLgorICAgICAgICBMT09LSU5HX0ZPUiA9ICJzdG9wcGVkIgorICAgICAgICBmb3IgaSBpbiByYW5nZSg1MDApOgorICAgICAgICAgICAgaWYgTE9PS0lOR19GT1IgaW4gcmVwcih0KToKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICBzZWxmLmFzc2VydEluKExPT0tJTkdfRk9SLCByZXByKHQpKSAjIHdlIHdhaXRlZCBhdCBsZWFzdCA1IHNlY29uZHMKIAogICAgIGRlZiB0ZXN0X0JvdW5kZWRTZW1hcGhvcmVfbGltaXQoc2VsZik6CiAgICAgICAgICMgQm91bmRlZFNlbWFwaG9yZSBzaG91bGQgcmFpc2UgVmFsdWVFcnJvciBpZiByZWxlYXNlZCB0b28gb2Z0ZW4uCkBAIC00OTAsMTQgKzYxNSw0OCBAQAogICAgICAgICAgICAgICAgIHQuam9pbigpCiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBicy5yZWxlYXNlKQogCi1jbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bihCYXNlVGVzdENhc2UpOgorICAgIEBjcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9mcmFtZV90c3RhdGVfdHJhY2luZyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ0MzI6IENyYXNoIHdoZW4gYSBnZW5lcmF0b3IgaXMgY3JlYXRlZCBpbiBhIEMgdGhyZWFkIHRoYXQgaXMKKyAgICAgICAgIyBkZXN0cm95ZWQgd2hpbGUgdGhlIGdlbmVyYXRvciBpcyBzdGlsbCB1c2VkLiBUaGUgaXNzdWUgd2FzIHRoYXQgYQorICAgICAgICAjIGdlbmVyYXRvciBjb250YWlucyBhIGZyYW1lLCBhbmQgdGhlIGZyYW1lIGtlcHQgYSByZWZlcmVuY2UgdG8gdGhlCisgICAgICAgICMgUHl0aG9uIHN0YXRlIG9mIHRoZSBkZXN0cm95ZWQgQyB0aHJlYWQuIFRoZSBjcmFzaCBvY2N1cnMgd2hlbiBhIHRyYWNlCisgICAgICAgICMgZnVuY3Rpb24gaXMgc2V0dXAuCiAKLSAgICAjIEJldHdlZW4gZm9yaygpIGFuZCBleGVjKCksIG9ubHkgYXN5bmMtc2FmZSBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgKGlzc3VlcwotICAgICMgIzEyMzE2IGFuZCAjMTE4NzApLCBhbmQgZm9yaygpIGZyb20gYSB3b3JrZXIgdGhyZWFkIGlzIGtub3duIHRvIHRyaWdnZXIKLSAgICAjIHByb2JsZW1zIHdpdGggc29tZSBvcGVyYXRpbmcgc3lzdGVtcyAoaXNzdWUgIzM4NjMpOiBza2lwIHByb2JsZW1hdGljIHRlc3RzCi0gICAgIyBvbiBwbGF0Zm9ybXMga25vd24gdG8gYmVoYXZlIGJhZGx5LgotICAgIHBsYXRmb3Jtc190b19za2lwID0gKCdmcmVlYnNkNCcsICdmcmVlYnNkNScsICdmcmVlYnNkNicsICduZXRic2Q1JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAnb3MyZW14JywgJ2hwLXV4MTEnKQorICAgICAgICBkZWYgbm9vcF90cmFjZShmcmFtZSwgZXZlbnQsIGFyZyk6CisgICAgICAgICAgICAjIG5vIG9wZXJhdGlvbgorICAgICAgICAgICAgcmV0dXJuIG5vb3BfdHJhY2UKKworICAgICAgICBkZWYgZ2VuZXJhdG9yKCk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIHlpZWxkICJnZW5lcmF0b3IiCisKKyAgICAgICAgZGVmIGNhbGxiYWNrKCk6CisgICAgICAgICAgICBpZiBjYWxsYmFjay5nZW4gaXMgTm9uZToKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5nZW4gPSBnZW5lcmF0b3IoKQorICAgICAgICAgICAgcmV0dXJuIG5leHQoY2FsbGJhY2suZ2VuKQorICAgICAgICBjYWxsYmFjay5nZW4gPSBOb25lCisKKyAgICAgICAgb2xkX3RyYWNlID0gc3lzLmdldHRyYWNlKCkKKyAgICAgICAgc3lzLnNldHRyYWNlKG5vb3BfdHJhY2UpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgICMgSW5zdGFsbCBhIHRyYWNlIGZ1bmN0aW9uCisgICAgICAgICAgICB0aHJlYWRpbmcuc2V0dHJhY2Uobm9vcF90cmFjZSkKKworICAgICAgICAgICAgIyBDcmVhdGUgYSBnZW5lcmF0b3IgaW4gYSBDIHRocmVhZCB3aGljaCBleGl0cyBhZnRlciB0aGUgY2FsbAorICAgICAgICAgICAgaW1wb3J0IF90ZXN0Y2FwaQorICAgICAgICAgICAgX3Rlc3RjYXBpLmNhbGxfaW5fdGVtcG9yYXJ5X2NfdGhyZWFkKGNhbGxiYWNrKQorCisgICAgICAgICAgICAjIENhbGwgdGhlIGdlbmVyYXRvciBpbiBhIGRpZmZlcmVudCBQeXRob24gdGhyZWFkLCBjaGVjayB0aGF0IHRoZQorICAgICAgICAgICAgIyBnZW5lcmF0b3IgZGlkbid0IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGRlc3Ryb3llZCB0aHJlYWQgc3RhdGUKKyAgICAgICAgICAgIGZvciB0ZXN0IGluIHJhbmdlKDMpOgorICAgICAgICAgICAgICAgICMgVGhlIHRyYWNlIGZ1bmN0aW9uIGlzIHN0aWxsIGNhbGxlZCBoZXJlCisgICAgICAgICAgICAgICAgY2FsbGJhY2soKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc3lzLnNldHRyYWNlKG9sZF90cmFjZSkKKworCitjbGFzcyBUaHJlYWRKb2luT25TaHV0ZG93bihCYXNlVGVzdENhc2UpOgogCiAgICAgZGVmIF9ydW5fYW5kX2pvaW4oc2VsZiwgc2NyaXB0KToKICAgICAgICAgc2NyaXB0ID0gIiIiaWYgMToKQEAgLTU3MCwxNDQgKzcyOSw4IEBACiAgICAgICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fcnVuX2FuZF9qb2luKHNjcmlwdCkKIAotICAgIGRlZiBhc3NlcnRTY3JpcHRIYXNPdXRwdXQoc2VsZiwgc2NyaXB0LCBleHBlY3RlZF9vdXRwdXQpOgotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIHNjcmlwdCkKLSAgICAgICAgZGF0YSA9IG91dC5kZWNvZGUoKS5yZXBsYWNlKCdccicsICcnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGV4cGVjdGVkX291dHB1dCkKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIob3MsICdmb3JrJyksICJuZWVkcyBvcy5mb3JrKCkiKQogICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtIGluIHBsYXRmb3Jtc190b19za2lwLCAiZHVlIHRvIGtub3duIE9TIGJ1ZyIpCi0gICAgZGVmIHRlc3RfNF9qb2luaW5nX2Fjcm9zc19mb3JrX2luX3dvcmtlcl90aHJlYWQoc2VsZik6Ci0gICAgICAgICMgVGhlcmUgdXNlZCB0byBiZSBhIHBvc3NpYmxlIGRlYWRsb2NrIHdoZW4gZm9ya2luZyBmcm9tIGEgY2hpbGQKLSAgICAgICAgIyB0aHJlYWQuICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTY2NDMuCi0KLSAgICAgICAgIyBUaGUgc2NyaXB0IHRha2VzIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0gICAgICAgICMgLSBUaGUgbWFpbiB0aHJlYWQgaW4gdGhlIHBhcmVudCBwcm9jZXNzIHN0YXJ0cyBhIG5ldyB0aHJlYWQgYW5kIHRoZW4KLSAgICAgICAgIyAgIHRyaWVzIHRvIGpvaW4gaXQuCi0gICAgICAgICMgLSBUaGUgam9pbiBvcGVyYXRpb24gYWNxdWlyZXMgdGhlIExvY2sgaW5zaWRlIHRoZSB0aHJlYWQncyBfYmxvY2sKLSAgICAgICAgIyAgIENvbmRpdGlvbi4gIChTZWUgdGhyZWFkaW5nLnB5OlRocmVhZC5qb2luKCkuKQotICAgICAgICAjIC0gV2Ugc3R1YiBvdXQgdGhlIGFjcXVpcmUgbWV0aG9kIG9uIHRoZSBjb25kaXRpb24gdG8gZm9yY2UgaXQgdG8gd2FpdAotICAgICAgICAjICAgdW50aWwgdGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBBQ1FVSVJFRCBIRVJFKQotICAgICAgICAjIC0gVGhlIGNoaWxkIHRocmVhZCBmb3Jrcy4gIChTZWUgTE9DSyBIRUxEIGFuZCBXT1JLRVIgVEhSRUFEIEZPUktTCi0gICAgICAgICMgICBIRVJFKQotICAgICAgICAjIC0gVGhlIG1haW4gdGhyZWFkIG9mIHRoZSBwYXJlbnQgcHJvY2VzcyBlbnRlcnMgQ29uZGl0aW9uLndhaXQoKSwKLSAgICAgICAgIyAgIHdoaWNoIHJlbGVhc2VzIHRoZSBsb2NrIG9uIHRoZSBjaGlsZCB0aHJlYWQuCi0gICAgICAgICMgLSBUaGUgY2hpbGQgcHJvY2VzcyByZXR1cm5zLiAgV2l0aG91dCB0aGUgbmVjZXNzYXJ5IGZpeCwgd2hlbiB0aGUKLSAgICAgICAgIyAgIG1haW4gdGhyZWFkIG9mIHRoZSBjaGlsZCBwcm9jZXNzICh3aGljaCB1c2VkIHRvIGJlIHRoZSBjaGlsZCB0aHJlYWQKLSAgICAgICAgIyAgIGluIHRoZSBwYXJlbnQgcHJvY2VzcykgYXR0ZW1wdHMgdG8gZXhpdCwgaXQgd2lsbCB0cnkgdG8gYWNxdWlyZSB0aGUKLSAgICAgICAgIyAgIGxvY2sgaW4gdGhlIFRocmVhZC5fYmxvY2sgQ29uZGl0aW9uIG9iamVjdCBhbmQgaGFuZywgYmVjYXVzZSB0aGUKLSAgICAgICAgIyAgIGxvY2sgd2FzIGhlbGQgYWNyb3NzIHRoZSBmb3JrLgotCi0gICAgICAgIHNjcmlwdCA9ICIiImlmIDE6Ci0gICAgICAgICAgICBpbXBvcnQgb3MsIHRpbWUsIHRocmVhZGluZwotCi0gICAgICAgICAgICBmaW5pc2hfam9pbiA9IEZhbHNlCi0gICAgICAgICAgICBzdGFydF9mb3JrID0gRmFsc2UKLQotICAgICAgICAgICAgZGVmIHdvcmtlcigpOgotICAgICAgICAgICAgICAgICMgV2FpdCB1bnRpbCB0aGlzIHRocmVhZCdzIGxvY2sgaXMgYWNxdWlyZWQgYmVmb3JlIGZvcmtpbmcgdG8KLSAgICAgICAgICAgICAgICAjIGNyZWF0ZSB0aGUgZGVhZGxvY2suCi0gICAgICAgICAgICAgICAgZ2xvYmFsIGZpbmlzaF9qb2luCi0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgICAgICAjIExPQ0sgSEVMRDogTWFpbiB0aHJlYWQgaG9sZHMgbG9jayBhY3Jvc3MgdGhpcyBjYWxsLgotICAgICAgICAgICAgICAgIGNoaWxkcGlkID0gb3MuZm9yaygpCi0gICAgICAgICAgICAgICAgZmluaXNoX2pvaW4gPSBUcnVlCi0gICAgICAgICAgICAgICAgaWYgY2hpbGRwaWQgIT0gMDoKLSAgICAgICAgICAgICAgICAgICAgIyBQYXJlbnQgcHJvY2VzcyBqdXN0IHdhaXRzIGZvciBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgb3Mud2FpdHBpZChjaGlsZHBpZCwgMCkKLSAgICAgICAgICAgICAgICAjIENoaWxkIHByb2Nlc3Mgc2hvdWxkIGp1c3QgcmV0dXJuLgotCi0gICAgICAgICAgICB3ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9d29ya2VyKQotCi0gICAgICAgICAgICAjIFN0dWIgb3V0IHRoZSBwcml2YXRlIGNvbmRpdGlvbiB2YXJpYWJsZSdzIGxvY2sgYWNxdWlyZSBtZXRob2QuCi0gICAgICAgICAgICAjIFRoaXMgYWNxdWlyZXMgdGhlIGxvY2sgYW5kIHRoZW4gd2FpdHMgdW50aWwgdGhlIGNoaWxkIGhhcyBmb3JrZWQKLSAgICAgICAgICAgICMgYmVmb3JlIHJldHVybmluZywgd2hpY2ggd2lsbCByZWxlYXNlIHRoZSBsb2NrIHNvb24gYWZ0ZXIuICBJZgotICAgICAgICAgICAgIyBzb21lb25lIGVsc2UgdHJpZXMgdG8gZml4IHRoaXMgdGVzdCBjYXNlIGJ5IGFjcXVpcmluZyB0aGlzIGxvY2sKLSAgICAgICAgICAgICMgYmVmb3JlIGZvcmtpbmcgaW5zdGVhZCBvZiByZXNldHRpbmcgaXQsIHRoZSB0ZXN0IGNhc2Ugd2lsbAotICAgICAgICAgICAgIyBkZWFkbG9jayB3aGVuIGl0IHNob3VsZG4ndC4KLSAgICAgICAgICAgIGNvbmRpdGlvbiA9IHcuX2Jsb2NrCi0gICAgICAgICAgICBvcmlnX2FjcXVpcmUgPSBjb25kaXRpb24uYWNxdWlyZQotICAgICAgICAgICAgY2FsbF9jb3VudF9sb2NrID0gdGhyZWFkaW5nLkxvY2soKQotICAgICAgICAgICAgY2FsbF9jb3VudCA9IDAKLSAgICAgICAgICAgIGRlZiBteV9hY3F1aXJlKCk6Ci0gICAgICAgICAgICAgICAgZ2xvYmFsIGNhbGxfY291bnQKLSAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yawotICAgICAgICAgICAgICAgIG9yaWdfYWNxdWlyZSgpICAjIExPQ0sgQUNRVUlSRUQgSEVSRQotICAgICAgICAgICAgICAgIHN0YXJ0X2ZvcmsgPSBUcnVlCi0gICAgICAgICAgICAgICAgaWYgY2FsbF9jb3VudCA9PSAwOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSBub3QgZmluaXNoX2pvaW46Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpICAjIFdPUktFUiBUSFJFQUQgRk9SS1MgSEVSRQotICAgICAgICAgICAgICAgIHdpdGggY2FsbF9jb3VudF9sb2NrOgotICAgICAgICAgICAgICAgICAgICBjYWxsX2NvdW50ICs9IDEKLSAgICAgICAgICAgIGNvbmRpdGlvbi5hY3F1aXJlID0gbXlfYWNxdWlyZQotCi0gICAgICAgICAgICB3LnN0YXJ0KCkKLSAgICAgICAgICAgIHcuam9pbigpCi0gICAgICAgICAgICBwcmludCgnZW5kIG9mIG1haW4nKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIHNlbGYuYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNjcmlwdCwgImVuZCBvZiBtYWluXG4iKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKLSAgICBkZWYgdGVzdF81X2NsZWFyX3dhaXRlcl9sb2Nrc190b19hdm9pZF9jcmFzaChzZWxmKToKLSAgICAgICAgIyBDaGVjayB0aGF0IGEgc3Bhd25lZCB0aHJlYWQgdGhhdCBmb3JrcyBkb2Vzbid0IHNlZ2ZhdWx0IG9uIGNlcnRhaW4KLSAgICAgICAgIyBwbGF0Zm9ybXMsIG5hbWVseSBPUyBYLiAgVGhpcyB1c2VkIHRvIGhhcHBlbiBpZiB0aGVyZSB3YXMgYSB3YWl0ZXIKLSAgICAgICAgIyBsb2NrIGluIHRoZSB0aHJlYWQncyBjb25kaXRpb24gdmFyaWFibGUncyB3YWl0ZXJzIGxpc3QuICBFdmVuIHRob3VnaAotICAgICAgICAjIHdlIGtub3cgdGhlIGxvY2sgd2lsbCBiZSBoZWxkIGFjcm9zcyB0aGUgZm9yaywgaXQgaXMgbm90IHNhZmUgdG8KLSAgICAgICAgIyByZWxlYXNlIGxvY2tzIGhlbGQgYWNyb3NzIGZvcmtzIG9uIGFsbCBwbGF0Zm9ybXMsIHNvIHJlbGVhc2luZyB0aGUKLSAgICAgICAgIyB3YWl0ZXIgbG9jayBjYXVzZWQgYSBzZWdmYXVsdCBvbiBPUyBYLiAgRnVydGhlcm1vcmUsIHNpbmNlIGxvY2tzIG9uCi0gICAgICAgICMgT1MgWCBhcmUgKGFzIG9mIHRoaXMgd3JpdGluZykgaW1wbGVtZW50ZWQgd2l0aCBhIG11dGV4ICsgY29uZGl0aW9uCi0gICAgICAgICMgdmFyaWFibGUgaW5zdGVhZCBvZiBhIHNlbWFwaG9yZSwgd2hpbGUgd2Uga25vdyB0aGF0IHRoZSBQeXRob24tbGV2ZWwKLSAgICAgICAgIyBsb2NrIHdpbGwgYmUgYWNxdWlyZWQsIHdlIGNhbid0IGtub3cgaWYgdGhlIGludGVybmFsIG11dGV4IHdpbGwgYmUKLSAgICAgICAgIyBhY3F1aXJlZCBhdCB0aGUgdGltZSBvZiB0aGUgZm9yay4KLQotICAgICAgICBzY3JpcHQgPSAiIiJpZiBUcnVlOgotICAgICAgICAgICAgaW1wb3J0IG9zLCB0aW1lLCB0aHJlYWRpbmcKLQotICAgICAgICAgICAgc3RhcnRfZm9yayA9IEZhbHNlCi0KLSAgICAgICAgICAgIGRlZiB3b3JrZXIoKToKLSAgICAgICAgICAgICAgICAjIFdhaXQgdW50aWwgdGhlIG1haW4gdGhyZWFkIGhhcyBhdHRlbXB0ZWQgdG8gam9pbiB0aGlzIHRocmVhZAotICAgICAgICAgICAgICAgICMgYmVmb3JlIGNvbnRpbnVpbmcuCi0gICAgICAgICAgICAgICAgd2hpbGUgbm90IHN0YXJ0X2Zvcms6Ci0gICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKLSAgICAgICAgICAgICAgICBjaGlsZHBpZCA9IG9zLmZvcmsoKQotICAgICAgICAgICAgICAgIGlmIGNoaWxkcGlkICE9IDA6Ci0gICAgICAgICAgICAgICAgICAgICMgUGFyZW50IHByb2Nlc3MganVzdCB3YWl0cyBmb3IgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgIChjcGlkLCByYykgPSBvcy53YWl0cGlkKGNoaWxkcGlkLCAwKQotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgY3BpZCA9PSBjaGlsZHBpZAotICAgICAgICAgICAgICAgICAgICBhc3NlcnQgcmMgPT0gMAotICAgICAgICAgICAgICAgICAgICBwcmludCgnZW5kIG9mIHdvcmtlciB0aHJlYWQnKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICMgQ2hpbGQgcHJvY2VzcyBzaG91bGQganVzdCByZXR1cm4uCi0gICAgICAgICAgICAgICAgICAgIHBhc3MKLQotICAgICAgICAgICAgdyA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PXdvcmtlcikKLQotICAgICAgICAgICAgIyBTdHViIG91dCB0aGUgcHJpdmF0ZSBjb25kaXRpb24gdmFyaWFibGUncyBfcmVsZWFzZV9zYXZlIG1ldGhvZC4KLSAgICAgICAgICAgICMgVGhpcyByZWxlYXNlcyB0aGUgY29uZGl0aW9uJ3MgbG9jayBhbmQgZmxpcHMgdGhlIGdsb2JhbCB0aGF0Ci0gICAgICAgICAgICAjIGNhdXNlcyB0aGUgd29ya2VyIHRvIGZvcmsuICBBdCB0aGlzIHBvaW50LCB0aGUgcHJvYmxlbWF0aWMgd2FpdGVyCi0gICAgICAgICAgICAjIGxvY2sgaGFzIGJlZW4gYWNxdWlyZWQgb25jZSBieSB0aGUgd2FpdGVyIGFuZCBoYXMgYmVlbiBwdXQgb250bwotICAgICAgICAgICAgIyB0aGUgd2FpdGVycyBsaXN0LgotICAgICAgICAgICAgY29uZGl0aW9uID0gdy5fYmxvY2sKLSAgICAgICAgICAgIG9yaWdfcmVsZWFzZV9zYXZlID0gY29uZGl0aW9uLl9yZWxlYXNlX3NhdmUKLSAgICAgICAgICAgIGRlZiBteV9yZWxlYXNlX3NhdmUoKToKLSAgICAgICAgICAgICAgICBnbG9iYWwgc3RhcnRfZm9yawotICAgICAgICAgICAgICAgIG9yaWdfcmVsZWFzZV9zYXZlKCkKLSAgICAgICAgICAgICAgICAjIFdhaXRlciBsb2NrIGhlbGQgaGVyZSwgY29uZGl0aW9uIGxvY2sgcmVsZWFzZWQuCi0gICAgICAgICAgICAgICAgc3RhcnRfZm9yayA9IFRydWUKLSAgICAgICAgICAgIGNvbmRpdGlvbi5fcmVsZWFzZV9zYXZlID0gbXlfcmVsZWFzZV9zYXZlCi0KLSAgICAgICAgICAgIHcuc3RhcnQoKQotICAgICAgICAgICAgdy5qb2luKCkKLSAgICAgICAgICAgIHByaW50KCdlbmQgb2YgbWFpbiB0aHJlYWQnKQotICAgICAgICAgICAgIiIiCi0gICAgICAgIG91dHB1dCA9ICJlbmQgb2Ygd29ya2VyIHRocmVhZFxuZW5kIG9mIG1haW4gdGhyZWFkXG4iCi0gICAgICAgIHNlbGYuYXNzZXJ0U2NyaXB0SGFzT3V0cHV0KHNjcmlwdCwgb3V0cHV0KQotCi0gICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gcGxhdGZvcm1zX3RvX3NraXAsICJkdWUgdG8ga25vd24gT1MgYnVnIikKLSAgICBkZWYgdGVzdF82X2RhZW1vbl90aHJlYWRzKHNlbGYpOgorICAgIGRlZiB0ZXN0XzRfZGFlbW9uX3RocmVhZHMoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgdGhhdCBhIGRhZW1vbiB0aHJlYWQgY2Fubm90IGNyYXNoIHRoZSBpbnRlcnByZXRlciBvbiBzaHV0ZG93bgogICAgICAgICAjIGJ5IG1hbmlwdWxhdGluZyBpbnRlcm5hbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIGJlaW5nIGRpc3Bvc2VkIG9mIGluCiAgICAgICAgICMgdGhlIG1haW4gdGhyZWFkLgpAQCAtNzczLDQ1ICs3OTYsMTExIEBACiAgICAgICAgIGZvciB0IGluIHRocmVhZHM6CiAgICAgICAgICAgICB0LmpvaW4oKQogCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaGFzYXR0cihvcywgJ2ZvcmsnKSwgIm5lZWRzIG9zLmZvcmsoKSIpCisgICAgZGVmIHRlc3RfY2xlYXJfdGhyZWFkc19zdGF0ZXNfYWZ0ZXJfZm9yayhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTcwOTQ6IGNoZWNrIHRoYXQgdGhyZWFkcyBzdGF0ZXMgYXJlIGNsZWFyZWQgYWZ0ZXIgZm9yaygpCisKKyAgICAgICAgIyBzdGFydCBhIGJ1bmNoIG9mIHRocmVhZHMKKyAgICAgICAgdGhyZWFkcyA9IFtdCisgICAgICAgIGZvciBpIGluIHJhbmdlKDE2KToKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1sYW1iZGEgOiB0aW1lLnNsZWVwKDAuMykpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorICAgICAgICAgICAgdC5zdGFydCgpCisKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIHBpZCA9PSAwOgorICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRocmVhZHMgc3RhdGVzIGhhdmUgYmVlbiBjbGVhcmVkCisgICAgICAgICAgICBpZiBsZW4oc3lzLl9jdXJyZW50X2ZyYW1lcygpKSA9PSAxOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDApCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIG9zLl9leGl0KDEpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfLCBzdGF0dXMgPSBvcy53YWl0cGlkKHBpZCwgMCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMCwgc3RhdHVzKQorCisgICAgICAgIGZvciB0IGluIHRocmVhZHM6CisgICAgICAgICAgICB0LmpvaW4oKQorCisKK2NsYXNzIFN1YmludGVycFRocmVhZGluZ1Rlc3RzKEJhc2VUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF90aHJlYWRzX2pvaW4oc2VsZik6CisgICAgICAgICMgTm9uLWRhZW1vbiB0aHJlYWRzIHNob3VsZCBiZSBqb2luZWQgYXQgc3ViaW50ZXJwcmV0ZXIgc2h1dGRvd24KKyAgICAgICAgIyAoaXNzdWUgIzE4ODA4KQorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgIyBTbGVlcCBhIGJpdCBzbyB0aGF0IHRoZSB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyB3aGVuCisgICAgICAgICAgICAgICAgIyBQeV9FbmRJbnRlcnByZXRlciBpcyBjYWxsZWQuCisgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjA1KQorICAgICAgICAgICAgICAgIG9zLndyaXRlKCVkLCBiIngiKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9Zikuc3RhcnQoKQorICAgICAgICAgICAgIiIiICUgKHcsKQorICAgICAgICByZXQgPSB0ZXN0LnN1cHBvcnQucnVuX2luX3N1YmludGVycChjb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldCwgMCkKKyAgICAgICAgIyBUaGUgdGhyZWFkIHdhcyBqb2luZWQgcHJvcGVybHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3MucmVhZChyLCAxKSwgYiJ4IikKKworICAgIGRlZiB0ZXN0X3RocmVhZHNfam9pbl8yKHNlbGYpOgorICAgICAgICAjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIGRlbGF5IGdldHMgaW50cm9kdWNlZCBhZnRlciB0aGUgdGhyZWFkJ3MKKyAgICAgICAgIyBQeXRob24gY29kZSByZXR1cm5lZCBidXQgYmVmb3JlIHRoZSB0aHJlYWQgc3RhdGUgaXMgZGVsZXRlZC4KKyAgICAgICAgIyBUbyBhY2hpZXZlIHRoaXMsIHdlIHJlZ2lzdGVyIGEgdGhyZWFkLWxvY2FsIG9iamVjdCB3aGljaCBzbGVlcHMKKyAgICAgICAgIyBhIGJpdCB3aGVuIGRlYWxsb2NhdGVkLgorICAgICAgICByLCB3ID0gb3MucGlwZSgpCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChvcy5jbG9zZSwgcikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKG9zLmNsb3NlLCB3KQorICAgICAgICBjb2RlID0gciIiImlmIDE6CisgICAgICAgICAgICBpbXBvcnQgb3MKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIGNsYXNzIFNsZWVwZXI6CisgICAgICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wNSkKKworICAgICAgICAgICAgdGxzID0gdGhyZWFkaW5nLmxvY2FsKCkKKworICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIFNsZWVwIGEgYml0IHNvIHRoYXQgdGhlIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDUpCisgICAgICAgICAgICAgICAgdGxzLnggPSBTbGVlcGVyKCkKKyAgICAgICAgICAgICAgICBvcy53cml0ZSglZCwgYiJ4IikKKyAgICAgICAgICAgIHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIiAlICh3LCkKKyAgICAgICAgcmV0ID0gdGVzdC5zdXBwb3J0LnJ1bl9pbl9zdWJpbnRlcnAoY29kZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXQsIDApCisgICAgICAgICMgVGhlIHRocmVhZCB3YXMgam9pbmVkIHByb3Blcmx5LgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnJlYWQociwgMSksIGIieCIpCisKICAgICBAY3B5dGhvbl9vbmx5Ci0gICAgQHVuaXR0ZXN0LnNraXBJZihfdGVzdGNhcGkgaXMgTm9uZSwgIm5lZWQgX3Rlc3RjYXBpIG1vZHVsZSIpCi0gICAgZGVmIHRlc3RfZnJhbWVfdHN0YXRlX3RyYWNpbmcoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NDMyOiBDcmFzaCB3aGVuIGEgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgaW4gYSBDIHRocmVhZCB0aGF0IGlzCi0gICAgICAgICMgZGVzdHJveWVkIHdoaWxlIHRoZSBnZW5lcmF0b3IgaXMgc3RpbGwgdXNlZC4gVGhlIGlzc3VlIHdhcyB0aGF0IGEKLSAgICAgICAgIyBnZW5lcmF0b3IgY29udGFpbnMgYSBmcmFtZSwgYW5kIHRoZSBmcmFtZSBrZXB0IGEgcmVmZXJlbmNlIHRvIHRoZQotICAgICAgICAjIFB5dGhvbiBzdGF0ZSBvZiB0aGUgZGVzdHJveWVkIEMgdGhyZWFkLiBUaGUgY3Jhc2ggb2NjdXJzIHdoZW4gYSB0cmFjZQotICAgICAgICAjIGZ1bmN0aW9uIGlzIHNldHVwLgorICAgIGRlZiB0ZXN0X2RhZW1vbl90aHJlYWRzX2ZhdGFsX2Vycm9yKHNlbGYpOgorICAgICAgICBzdWJpbnRlcnBfY29kZSA9IHIiIiJpZiAxOgorICAgICAgICAgICAgaW1wb3J0IG9zCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgICAgICBpbXBvcnQgdGltZQogCi0gICAgICAgIGRlZiBub29wX3RyYWNlKGZyYW1lLCBldmVudCwgYXJnKToKLSAgICAgICAgICAgICMgbm8gb3BlcmF0aW9uCi0gICAgICAgICAgICByZXR1cm4gbm9vcF90cmFjZQorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgZGFlbW9uIHRocmVhZCBpcyBzdGlsbCBydW5uaW5nIHdoZW4KKyAgICAgICAgICAgICAgICAjIFB5X0VuZEludGVycHJldGVyIGlzIGNhbGxlZC4KKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDEwKQorICAgICAgICAgICAgdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9ZiwgZGFlbW9uPVRydWUpLnN0YXJ0KCkKKyAgICAgICAgICAgICIiIgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgMToKKyAgICAgICAgICAgIGltcG9ydCBfdGVzdGNhcGkKIAotICAgICAgICBkZWYgZ2VuZXJhdG9yKCk6Ci0gICAgICAgICAgICB3aGlsZSAxOgotICAgICAgICAgICAgICAgIHlpZWxkICJnZW5lcmVhdG9yIgotCi0gICAgICAgIGRlZiBjYWxsYmFjaygpOgotICAgICAgICAgICAgaWYgY2FsbGJhY2suZ2VuIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2suZ2VuID0gZ2VuZXJhdG9yKCkKLSAgICAgICAgICAgIHJldHVybiBuZXh0KGNhbGxiYWNrLmdlbikKLSAgICAgICAgY2FsbGJhY2suZ2VuID0gTm9uZQotCi0gICAgICAgIG9sZF90cmFjZSA9IHN5cy5nZXR0cmFjZSgpCi0gICAgICAgIHN5cy5zZXR0cmFjZShub29wX3RyYWNlKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICAjIEluc3RhbGwgYSB0cmFjZSBmdW5jdGlvbgotICAgICAgICAgICAgdGhyZWFkaW5nLnNldHRyYWNlKG5vb3BfdHJhY2UpCi0KLSAgICAgICAgICAgICMgQ3JlYXRlIGEgZ2VuZXJhdG9yIGluIGEgQyB0aHJlYWQgd2hpY2ggZXhpdHMgYWZ0ZXIgdGhlIGNhbGwKLSAgICAgICAgICAgIF90ZXN0Y2FwaS5jYWxsX2luX3RlbXBvcmFyeV9jX3RocmVhZChjYWxsYmFjaykKLQotICAgICAgICAgICAgIyBDYWxsIHRoZSBnZW5lcmF0b3IgaW4gYSBkaWZmZXJlbnQgUHl0aG9uIHRocmVhZCwgY2hlY2sgdGhhdCB0aGUKLSAgICAgICAgICAgICMgZ2VuZXJhdG9yIGRpZG4ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBkZXN0cm95ZWQgdGhyZWFkIHN0YXRlCi0gICAgICAgICAgICBmb3IgdGVzdCBpbiByYW5nZSgzKToKLSAgICAgICAgICAgICAgICAjIFRoZSB0cmFjZSBmdW5jdGlvbiBpcyBzdGlsbCBjYWxsZWQgaGVyZQotICAgICAgICAgICAgICAgIGNhbGxiYWNrKCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHN5cy5zZXR0cmFjZShvbGRfdHJhY2UpCisgICAgICAgICAgICBfdGVzdGNhcGkucnVuX2luX3N1YmludGVycCglcikKKyAgICAgICAgICAgICIiIiAlIChzdWJpbnRlcnBfY29kZSwpCisgICAgICAgIHdpdGggdGVzdC5zdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgiLWMiLCBzY3JpcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oIkZhdGFsIFB5dGhvbiBlcnJvcjogUHlfRW5kSW50ZXJwcmV0ZXI6ICIKKyAgICAgICAgICAgICAgICAgICAgICAibm90IHRoZSBsYXN0IHRocmVhZCIsIGVyci5kZWNvZGUoKSkKIAogCiBjbGFzcyBUaHJlYWRpbmdFeGNlcHRpb25UZXN0cyhCYXNlVGVzdENhc2UpOgpAQCAtODcyLDYgKzk2MSw4OCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAucmV0dXJuY29kZSwgMCwgIlVuZXhwZWN0ZWQgZXJyb3I6ICIgKyBzdGRlcnIuZGVjb2RlKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YSwgZXhwZWN0ZWRfb3V0cHV0KQogCisgICAgZGVmIHRlc3RfcHJpbnRfZXhjZXB0aW9uKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgVHJ1ZToKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgZGVmIHJ1bigpOgorICAgICAgICAgICAgICAgIGdsb2JhbCBydW5uaW5nCisgICAgICAgICAgICAgICAgcnVubmluZyA9IFRydWUKKyAgICAgICAgICAgICAgICB3aGlsZSBydW5uaW5nOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB3aGlsZSBub3QgcnVubmluZzoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICBydW5uaW5nID0gRmFsc2UKKyAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgICAgICAiIiIKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygiLWMiLCBzY3JpcHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoKQorICAgICAgICBzZWxmLmFzc2VydEluKCJFeGNlcHRpb24gaW4gdGhyZWFkIiwgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6IiwgZXJyKQorICAgICAgICBzZWxmLmFzc2VydEluKCJaZXJvRGl2aXNpb25FcnJvciIsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiVW5oYW5kbGVkIGV4Y2VwdGlvbiIsIGVycikKKworICAgIGRlZiB0ZXN0X3ByaW50X2V4Y2VwdGlvbl9zdGRlcnJfaXNfbm9uZV8xKHNlbGYpOgorICAgICAgICBzY3JpcHQgPSByIiIiaWYgVHJ1ZToKKyAgICAgICAgICAgIGltcG9ydCBzeXMKKyAgICAgICAgICAgIGltcG9ydCB0aHJlYWRpbmcKKyAgICAgICAgICAgIGltcG9ydCB0aW1lCisKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgZGVmIHJ1bigpOgorICAgICAgICAgICAgICAgIGdsb2JhbCBydW5uaW5nCisgICAgICAgICAgICAgICAgcnVubmluZyA9IFRydWUKKyAgICAgICAgICAgICAgICB3aGlsZSBydW5uaW5nOgorICAgICAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICAgICAgMS8wCisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9cnVuKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB3aGlsZSBub3QgcnVubmluZzoKKyAgICAgICAgICAgICAgICB0aW1lLnNsZWVwKDAuMDEpCisgICAgICAgICAgICBzeXMuc3RkZXJyID0gTm9uZQorICAgICAgICAgICAgcnVubmluZyA9IEZhbHNlCisgICAgICAgICAgICB0LmpvaW4oKQorICAgICAgICAgICAgIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgc2NyaXB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQorICAgICAgICBlcnIgPSBlcnIuZGVjb2RlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiRXhjZXB0aW9uIGluIHRocmVhZCIsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOiIsIGVycikKKyAgICAgICAgc2VsZi5hc3NlcnRJbigiWmVyb0RpdmlzaW9uRXJyb3IiLCBlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIlVuaGFuZGxlZCBleGNlcHRpb24iLCBlcnIpCisKKyAgICBkZWYgdGVzdF9wcmludF9leGNlcHRpb25fc3RkZXJyX2lzX25vbmVfMihzZWxmKToKKyAgICAgICAgc2NyaXB0ID0gciIiImlmIFRydWU6CisgICAgICAgICAgICBpbXBvcnQgc3lzCisgICAgICAgICAgICBpbXBvcnQgdGhyZWFkaW5nCisgICAgICAgICAgICBpbXBvcnQgdGltZQorCisgICAgICAgICAgICBydW5uaW5nID0gRmFsc2UKKyAgICAgICAgICAgIGRlZiBydW4oKToKKyAgICAgICAgICAgICAgICBnbG9iYWwgcnVubmluZworICAgICAgICAgICAgICAgIHJ1bm5pbmcgPSBUcnVlCisgICAgICAgICAgICAgICAgd2hpbGUgcnVubmluZzoKKyAgICAgICAgICAgICAgICAgICAgdGltZS5zbGVlcCgwLjAxKQorICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgc3lzLnN0ZGVyciA9IE5vbmUKKyAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1ydW4pCisgICAgICAgICAgICB0LnN0YXJ0KCkKKyAgICAgICAgICAgIHdoaWxlIG5vdCBydW5uaW5nOgorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4wMSkKKyAgICAgICAgICAgIHJ1bm5pbmcgPSBGYWxzZQorICAgICAgICAgICAgdC5qb2luKCkKKyAgICAgICAgICAgICIiIgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCItYyIsIHNjcmlwdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiVW5oYW5kbGVkIGV4Y2VwdGlvbiIsIGVyci5kZWNvZGUoKSkKKworCiBjbGFzcyBUaW1lclRlc3RzKEJhc2VUZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RocmVhZGluZ19sb2NhbC5weSBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CmluZGV4IGM4ODZhMjUuLmM3ZjM5NGMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGhyZWFkaW5nX2xvY2FsLnB5CkBAIC02NCwxNCArNjQsOSBAQAogICAgICAgICAgICAgIyBTaW1wbHkgY2hlY2sgdGhhdCB0aGUgdmFyaWFibGUgaXMgY29ycmVjdGx5IHNldAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsb2NhbC54LCBpKQogCi0gICAgICAgIHRocmVhZHM9IFtdCi0gICAgICAgIGZvciBpIGluIHJhbmdlKDEwKToKLSAgICAgICAgICAgIHQgPSB0aHJlYWRpbmcuVGhyZWFkKHRhcmdldD1mLCBhcmdzPShpLCkpCi0gICAgICAgICAgICB0LnN0YXJ0KCkKLSAgICAgICAgICAgIHRocmVhZHMuYXBwZW5kKHQpCi0KLSAgICAgICAgZm9yIHQgaW4gdGhyZWFkczoKLSAgICAgICAgICAgIHQuam9pbigpCisgICAgICAgIHdpdGggc3VwcG9ydC5zdGFydF90aHJlYWRzKHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PWYsIGFyZ3M9KGksKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMTApKToKKyAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiB0ZXN0X2Rlcml2ZWRfY3ljbGVfZGVhbGxvYyhzZWxmKToKICAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlNjk5MApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5IGIvTGliL3Rlc3QvdGVzdF90aHJlYWRzaWduYWxzLnB5CmluZGV4IGY5NzVhNzUuLjlkOTI3NDIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdGhyZWFkc2lnbmFscy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RocmVhZHNpZ25hbHMucHkKQEAgLTgsNyArOCw3IEBACiB0aHJlYWQgPSBpbXBvcnRfbW9kdWxlKCdfdGhyZWFkJykKIGltcG9ydCB0aW1lCiAKLWlmIHN5cy5wbGF0Zm9ybVs6M10gaW4gKCd3aW4nLCAnb3MyJykgb3Igc3lzLnBsYXRmb3JtPT0ncmlzY29zJzoKK2lmIChzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nKToKICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgiQ2FuJ3QgdGVzdCBzaWduYWwgb24gJXMiICUgc3lzLnBsYXRmb3JtKQogCiBwcm9jZXNzX3BpZCA9IG9zLmdldHBpZCgpCkBAIC03NCw2ICs3NCw5IEBACiAKICAgICBAdW5pdHRlc3Quc2tpcElmKFVTSU5HX1BUSFJFQURfQ09ORCwKICAgICAgICAgICAgICAgICAgICAgICdQT1NJWCBjb25kaXRpb24gdmFyaWFibGVzIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCcpCisgICAgIyBJc3N1ZSAjMjA1NjQ6IHNlbV90aW1lZHdhaXQoKSBjYW5ub3QgYmUgaW50ZXJydXB0ZWQgb24gT3BlbkJTRAorICAgIEB1bml0dGVzdC5za2lwSWYoc3lzLnBsYXRmb3JtLnN0YXJ0c3dpdGgoJ29wZW5ic2QnKSwKKyAgICAgICAgICAgICAgICAgICAgICdsb2NrIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBvbiBPcGVuQlNEJykKICAgICBkZWYgdGVzdF9sb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKHNlbGYpOgogICAgICAgICAjIE1pbWljIHJlY2VpdmluZyBhIFNJR0lOVCAoS2V5Ym9hcmRJbnRlcnJ1cHQpIHdpdGggU0lHQUxSTSB3aGlsZSBzdHVjawogICAgICAgICAjIGluIGEgZGVhZGxvY2suCkBAIC05Nyw2ICsxMDAsOSBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihVU0lOR19QVEhSRUFEX0NPTkQsCiAgICAgICAgICAgICAgICAgICAgICAnUE9TSVggY29uZGl0aW9uIHZhcmlhYmxlcyBjYW5ub3QgYmUgaW50ZXJydXB0ZWQnKQorICAgICMgSXNzdWUgIzIwNTY0OiBzZW1fdGltZWR3YWl0KCkgY2Fubm90IGJlIGludGVycnVwdGVkIG9uIE9wZW5CU0QKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybS5zdGFydHN3aXRoKCdvcGVuYnNkJyksCisgICAgICAgICAgICAgICAgICAgICAnbG9jayBjYW5ub3QgYmUgaW50ZXJydXB0ZWQgb24gT3BlbkJTRCcpCiAgICAgZGVmIHRlc3RfcmxvY2tfYWNxdWlyZV9pbnRlcnJ1cHRpb24oc2VsZik6CiAgICAgICAgICMgTWltaWMgcmVjZWl2aW5nIGEgU0lHSU5UIChLZXlib2FyZEludGVycnVwdCkgd2l0aCBTSUdBTFJNIHdoaWxlIHN0dWNrCiAgICAgICAgICMgaW4gYSBkZWFkbG9jay4KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZS5weQppbmRleCAxYTRkODczLi5iZTdkZGNjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lLnB5CkBAIC0xNCw2ICsxNCw4IEBACiBTSVpFT0ZfSU5UID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdTSVpFT0ZfSU5UJykgb3IgNAogVElNRV9NQVhZRUFSID0gKDEgPDwgOCAqIFNJWkVPRl9JTlQgLSAxKSAtIDEKIFRJTUVfTUlOWUVBUiA9IC1USU1FX01BWFlFQVIgLSAxCitfUHlUaW1lX1JPVU5EX0RPV04gPSAwCitfUHlUaW1lX1JPVU5EX1VQID0gMQogCiAKIGNsYXNzIFRpbWVUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0yMjYsNyArMjI4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0aW1lLmN0aW1lKHQpLCAnU3VuIFNlcCAxNiAwMTowMzo1MiAxOTczJykKICAgICAgICAgdCA9IHRpbWUubWt0aW1lKCgyMDAwLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAtMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGltZS5jdGltZSh0KSwgJ1NhdCBKYW4gIDEgMDA6MDA6MDAgMjAwMCcpCi0gICAgICAgIGZvciB5ZWFyIGluIFstMTAwLCAxMDAsIDEwMDAsIDIwMDAsIDEwMDAwXToKKyAgICAgICAgZm9yIHllYXIgaW4gWy0xMDAsIDEwMCwgMTAwMCwgMjAwMCwgMjA1MCwgMTAwMDBdOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHRlc3R2YWwgPSB0aW1lLm1rdGltZSgoeWVhciwgMSwgMTApICsgKDAsKSo2KQogICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBPdmVyZmxvd0Vycm9yKToKQEAgLTM0NCw2ICszNDYsMTMgQEAKICAgICBkZWYgdGVzdF9ta3RpbWUoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzE3MjY2ODcKICAgICAgICAgZm9yIHQgaW4gKC0yLCAtMSwgMCwgMSk6CisgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0uc3RhcnRzd2l0aCgnYWl4JykgYW5kIHQgPT0gLTE6CisgICAgICAgICAgICAgICAgIyBJc3N1ZSAjMTExODgsICMxOTc0ODogbWt0aW1lKCkgcmV0dXJucyAtMSBvbiBlcnJvci4gT24gTGludXgsCisgICAgICAgICAgICAgICAgIyB0aGUgdG1fd2RheSBmaWVsZCBpcyB1c2VkIGFzIGEgc2VudGluZWwgKCkgdG8gZGV0ZWN0IGlmIC0xIGlzCisgICAgICAgICAgICAgICAgIyByZWFsbHkgYW4gZXJyb3Igb3IgYSB2YWxpZCB0aW1lc3RhbXAuIE9uIEFJWCwgdG1fd2RheSBpcworICAgICAgICAgICAgICAgICMgdW5jaGFuZ2VkIGV2ZW4gb24gc3VjY2VzcyBhbmQgc28gY2Fubm90IGJlIHVzZWQgYXMgYQorICAgICAgICAgICAgICAgICMgc2VudGluZWwuCisgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICB0dCA9IHRpbWUubG9jYWx0aW1lKHQpCiAgICAgICAgICAgICBleGNlcHQgKE92ZXJmbG93RXJyb3IsIE9TRXJyb3IpOgpAQCAtMzcxLDYgKzM4MCwxNCBAQAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGhhc2F0dHIodGltZSwgJ21vbm90b25pYycpLAogICAgICAgICAgICAgICAgICAgICAgICAgICduZWVkIHRpbWUubW9ub3RvbmljJykKICAgICBkZWYgdGVzdF9tb25vdG9uaWMoc2VsZik6CisgICAgICAgICMgbW9ub3RvbmljKCkgc2hvdWxkIG5vdCBnbyBiYWNrd2FyZAorICAgICAgICB0aW1lcyA9IFt0aW1lLm1vbm90b25pYygpIGZvciBuIGluIHJhbmdlKDEwMCldCisgICAgICAgIHQxID0gdGltZXNbMF0KKyAgICAgICAgZm9yIHQyIGluIHRpbWVzWzE6XToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHQyLCB0MSwgInRpbWVzPSVzIiAlIHRpbWVzKQorICAgICAgICAgICAgdDEgPSB0MgorCisgICAgICAgICMgbW9ub3RvbmljKCkgaW5jbHVkZXMgdGltZSBlbGFwc2VkIGR1cmluZyBhIHNsZWVwCiAgICAgICAgIHQxID0gdGltZS5tb25vdG9uaWMoKQogICAgICAgICB0aW1lLnNsZWVwKDAuNSkKICAgICAgICAgdDIgPSB0aW1lLm1vbm90b25pYygpCkBAIC0zNzksNiArMzk2LDcgQEAKICAgICAgICAgIyBJc3N1ZSAjMjAxMDE6IE9uIHNvbWUgV2luZG93cyBtYWNoaW5lcywgZHQgbWF5IGJlIHNsaWdodGx5IGxvdwogICAgICAgICBzZWxmLmFzc2VydFRydWUoMC40NSA8PSBkdCA8PSAxLjAsIGR0KQogCisgICAgICAgICMgbW9ub3RvbmljKCkgaXMgYSBtb25vdG9uaWMgYnV0IG5vbiBhZGp1c3RhYmxlIGNsb2NrCiAgICAgICAgIGluZm8gPSB0aW1lLmdldF9jbG9ja19pbmZvKCdtb25vdG9uaWMnKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoaW5mby5tb25vdG9uaWMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoaW5mby5hZGp1c3RhYmxlKQpAQCAtNTc2LDU4ICs1OTQsMTE2IEBACiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfdGltZV90KHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgcHl0aW1lX29iamVjdF90b190aW1lX3QKLSAgICAgICAgZm9yIG9iaiwgdGltZV90IGluICgKLSAgICAgICAgICAgICgwLCAwKSwKLSAgICAgICAgICAgICgtMSwgLTEpLAotICAgICAgICAgICAgKC0xLjAsIC0xKSwKLSAgICAgICAgICAgICgtMS45LCAtMSksCi0gICAgICAgICAgICAoMS4wLCAxKSwKLSAgICAgICAgICAgICgxLjksIDEpLAorICAgICAgICBmb3Igb2JqLCB0aW1lX3QsIHJuZCBpbiAoCisgICAgICAgICAgICAjIFJvdW5kIHRvd2FyZHMgemVybworICAgICAgICAgICAgKDAsIDAsIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEsIC0xLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjAsIC0xLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjksIC0xLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDEuMCwgMSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgxLjksIDEsIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAjIFJvdW5kIGF3YXkgZnJvbSB6ZXJvCisgICAgICAgICAgICAoMCwgMCwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEsIC0xLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMS4wLCAtMSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuOSwgLTIsIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDEuMCwgMSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMS45LCAyLCBfUHlUaW1lX1JPVU5EX1VQKSwKICAgICAgICAgKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lX3Qob2JqKSwgdGltZV90KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweXRpbWVfb2JqZWN0X3RvX3RpbWVfdChvYmosIHJuZCksIHRpbWVfdCkKIAorICAgICAgICBybmQgPSBfUHlUaW1lX1JPVU5EX0RPV04KICAgICAgICAgZm9yIGludmFsaWQgaW4gc2VsZi5pbnZhbGlkX3ZhbHVlczoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsIHB5dGltZV9vYmplY3RfdG9fdGltZV90LCBpbnZhbGlkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB5dGltZV9vYmplY3RfdG9fdGltZV90LCBpbnZhbGlkLCBybmQpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90aW1ldmFsKHNlbGYpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgcHl0aW1lX29iamVjdF90b190aW1ldmFsCi0gICAgICAgIGZvciBvYmosIHRpbWV2YWwgaW4gKAotICAgICAgICAgICAgKDAsICgwLCAwKSksCi0gICAgICAgICAgICAoLTEsICgtMSwgMCkpLAotICAgICAgICAgICAgKC0xLjAsICgtMSwgMCkpLAotICAgICAgICAgICAgKDFlLTYsICgwLCAxKSksCi0gICAgICAgICAgICAoLTFlLTYsICgtMSwgOTk5OTk5KSksCi0gICAgICAgICAgICAoLTEuMiwgKC0yLCA4MDAwMDApKSwKLSAgICAgICAgICAgICgxLjEyMzQ1NjAsICgxLCAxMjM0NTYpKSwKLSAgICAgICAgICAgICgxLjEyMzQ1NjksICgxLCAxMjM0NTYpKSwKLSAgICAgICAgICAgICgtMS4xMjM0NTYwLCAoLTIsIDg3NjU0NCkpLAotICAgICAgICAgICAgKC0xLjEyMzQ1NjEsICgtMiwgODc2NTQzKSksCisgICAgICAgIGZvciBvYmosIHRpbWV2YWwsIHJuZCBpbiAoCisgICAgICAgICAgICAjIFJvdW5kIHRvd2FyZHMgemVybworICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMSwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMS4wLCAoLTEsIDApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDFlLTYsICgwLCAxKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgxZS03LCAoMCwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTFlLTYsICgtMSwgOTk5OTk5KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMWUtNywgKC0xLCA5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgwLjk5OTk5OTksICgwLCA5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDAuMDAwMDA0MSwgKDAsIDQpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDEuMTIzNDU2MCwgKDEsIDEyMzQ1NiksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoMS4xMjM0NTY5LCAoMSwgMTIzNDU2KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMC4wMDAwMDQwLCAoLTEsIDk5OTk5NiksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTAuMDAwMDA0MSwgKC0xLCA5OTk5OTUpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjEyMzQ1NjAsICgtMiwgODc2NTQ0KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTYxLCAoLTIsIDg3NjU0MyksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAjIFJvdW5kIGF3YXkgZnJvbSB6ZXJvCisgICAgICAgICAgICAoMCwgKDAsIDApLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMSwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuMCwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMWUtNiwgKDAsIDEpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgxZS03LCAoMCwgMSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xZS02LCAoLTEsIDk5OTk5OSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xZS03LCAoLTEsIDk5OTk5OSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMC45OTk5OTk5LCAoMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDAuMDAwMDA0MSwgKDAsIDUpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgxLjEyMzQ1NjAsICgxLCAxMjM0NTcpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgxLjEyMzQ1NjksICgxLCAxMjM0NTcpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMC4wMDAwMDQwLCAoLTEsIDk5OTk5NiksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0wLjAwMDAwNDEsICgtMSwgOTk5OTk1KSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuMTIzNDU2MCwgKC0yLCA4NzY1NDQpLCBfUHlUaW1lX1JPVU5EX1VQKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTYxLCAoLTIsIDg3NjU0MyksIF9QeVRpbWVfUk9VTkRfVVApLAogICAgICAgICApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwob2JqKSwgdGltZXZhbCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmosIHJvdW5kPXJuZCwgdGltZXZhbD10aW1ldmFsKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5dGltZV9vYmplY3RfdG9fdGltZXZhbChvYmosIHJuZCksIHRpbWV2YWwpCiAKKyAgICAgICAgcm5kID0gX1B5VGltZV9ST1VORF9ET1dOCiAgICAgICAgIGZvciBpbnZhbGlkIGluIHNlbGYuaW52YWxpZF92YWx1ZXM6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBweXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwsIGludmFsaWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHl0aW1lX29iamVjdF90b190aW1ldmFsLCBpbnZhbGlkLCBybmQpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF90aW1lc3BlYyhzZWxmKToKICAgICAgICAgZnJvbSBfdGVzdGNhcGkgaW1wb3J0IHB5dGltZV9vYmplY3RfdG9fdGltZXNwZWMKLSAgICAgICAgZm9yIG9iaiwgdGltZXNwZWMgaW4gKAotICAgICAgICAgICAgKDAsICgwLCAwKSksCi0gICAgICAgICAgICAoLTEsICgtMSwgMCkpLAotICAgICAgICAgICAgKC0xLjAsICgtMSwgMCkpLAotICAgICAgICAgICAgKDFlLTksICgwLCAxKSksCi0gICAgICAgICAgICAoLTFlLTksICgtMSwgOTk5OTk5OTk5KSksCi0gICAgICAgICAgICAoLTEuMiwgKC0yLCA4MDAwMDAwMDApKSwKLSAgICAgICAgICAgICgxLjEyMzQ1Njc4OTAsICgxLCAxMjM0NTY3ODkpKSwKLSAgICAgICAgICAgICgxLjEyMzQ1Njc4OTksICgxLCAxMjM0NTY3ODkpKSwKLSAgICAgICAgICAgICgtMS4xMjM0NTY3ODkwLCAoLTIsIDg3NjU0MzIxMSkpLAotICAgICAgICAgICAgKC0xLjEyMzQ1Njc4OTEsICgtMiwgODc2NTQzMjEwKSksCisgICAgICAgIGZvciBvYmosIHRpbWVzcGVjLCBybmQgaW4gKAorICAgICAgICAgICAgIyBSb3VuZCB0b3dhcmRzIHplcm8KKyAgICAgICAgICAgICgwLCAoMCwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEuMCwgKC0xLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgxZS05LCAoMCwgMSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoMWUtMTAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMWUtOSwgKC0xLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xZS0xMCwgKC0xLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwMDAwKSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgwLjk5OTk5OTk5OTksICgwLCA5OTk5OTk5OTkpLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5MCwgKDEsIDEyMzQ1Njc4OSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoMS4xMjM0NTY3ODk5LCAoMSwgMTIzNDU2Nzg5KSwgX1B5VGltZV9ST1VORF9ET1dOKSwKKyAgICAgICAgICAgICgtMS4xMjM0NTY3ODkwLCAoLTIsIDg3NjU0MzIxMSksIF9QeVRpbWVfUk9VTkRfRE9XTiksCisgICAgICAgICAgICAoLTEuMTIzNDU2Nzg5MSwgKC0yLCA4NzY1NDMyMTApLCBfUHlUaW1lX1JPVU5EX0RPV04pLAorICAgICAgICAgICAgIyBSb3VuZCBhd2F5IGZyb20gemVybworICAgICAgICAgICAgKDAsICgwLCAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjAsICgtMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDFlLTksICgwLCAxKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMWUtMTAsICgwLCAxKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTFlLTksICgtMSwgOTk5OTk5OTk5KSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTFlLTEwLCAoLTEsIDk5OTk5OTk5OSksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjIsICgtMiwgODAwMDAwMDAwKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoMC45OTk5OTk5OTk5LCAoMSwgMCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5MCwgKDEsIDEyMzQ1Njc5MCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKDEuMTIzNDU2Nzg5OSwgKDEsIDEyMzQ1Njc5MCksIF9QeVRpbWVfUk9VTkRfVVApLAorICAgICAgICAgICAgKC0xLjEyMzQ1Njc4OTAsICgtMiwgODc2NTQzMjExKSwgX1B5VGltZV9ST1VORF9VUCksCisgICAgICAgICAgICAoLTEuMTIzNDU2Nzg5MSwgKC0yLCA4NzY1NDMyMTApLCBfUHlUaW1lX1JPVU5EX1VQKSwKICAgICAgICAgKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lc3BlYyhvYmopLCB0aW1lc3BlYykKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KG9iaj1vYmosIHJvdW5kPXJuZCwgdGltZXNwZWM9dGltZXNwZWMpOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHl0aW1lX29iamVjdF90b190aW1lc3BlYyhvYmosIHJuZCksIHRpbWVzcGVjKQogCisgICAgICAgIHJuZCA9IF9QeVRpbWVfUk9VTkRfRE9XTgogICAgICAgICBmb3IgaW52YWxpZCBpbiBzZWxmLmludmFsaWRfdmFsdWVzOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT3ZlcmZsb3dFcnJvciwgcHl0aW1lX29iamVjdF90b190aW1lc3BlYywgaW52YWxpZCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE92ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBweXRpbWVfb2JqZWN0X3RvX3RpbWVzcGVjLCBpbnZhbGlkLCBybmQpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyh0aW1lLl9TVFJVQ1RfVE1fSVRFTVMgPT0gMTEsICJuZWVkcyB0bV96b25lIHN1cHBvcnQiKQogICAgIGRlZiB0ZXN0X2xvY2FsdGltZV90aW1lem9uZShzZWxmKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZWl0LnB5IGIvTGliL3Rlc3QvdGVzdF90aW1laXQucHkKaW5kZXggNjI1ZmI4ZC4uOTE4YTI5NCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90aW1laXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1laXQucHkKQEAgLTczLDkgKzczLDIxIEBACiAKICAgICBkZWYgdGVzdF90aW1lcl9pbnZhbGlkX3N0bXQoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRpbWVpdC5UaW1lciwgc3RtdD1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzdG10PSdyZXR1cm4nKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzdG10PSd5aWVsZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCB0aW1laXQuVGltZXIsIHN0bXQ9J3lpZWxkIGZyb20gKCknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzdG10PSdicmVhaycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCB0aW1laXQuVGltZXIsIHN0bXQ9J2NvbnRpbnVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHRpbWVpdC5UaW1lciwgc3RtdD0nZnJvbSB0aW1laXQgaW1wb3J0IConKQogCiAgICAgZGVmIHRlc3RfdGltZXJfaW52YWxpZF9zZXR1cChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD1Ob25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD0ncmV0dXJuJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHRpbWVpdC5UaW1lciwgc2V0dXA9J3lpZWxkJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHRpbWVpdC5UaW1lciwgc2V0dXA9J3lpZWxkIGZyb20gKCknKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD0nYnJlYWsnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD0nY29udGludWUnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhTeW50YXhFcnJvciwgdGltZWl0LlRpbWVyLCBzZXR1cD0nZnJvbSB0aW1laXQgaW1wb3J0IConKQogCiAgICAgZmFrZV9zZXR1cCA9ICJpbXBvcnQgdGltZWl0OyB0aW1laXQuX2Zha2VfdGltZXIuc2V0dXAoKSIKICAgICBmYWtlX3N0bXQgPSAiaW1wb3J0IHRpbWVpdDsgdGltZWl0Ll9mYWtlX3RpbWVyLmluYygpIgpAQCAtMTEyLDYgKzEyNCw5IEBACiAgICAgZGVmIHRlc3RfdGltZWl0X2NhbGxhYmxlX3N0bXQoc2VsZik6CiAgICAgICAgIHNlbGYudGltZWl0KHNlbGYuZmFrZV9jYWxsYWJsZV9zdG10LCBzZWxmLmZha2Vfc2V0dXAsIG51bWJlcj0zKQogCisgICAgZGVmIHRlc3RfdGltZWl0X2NhbGxhYmxlX3NldHVwKHNlbGYpOgorICAgICAgICBzZWxmLnRpbWVpdChzZWxmLmZha2Vfc3RtdCwgc2VsZi5mYWtlX2NhbGxhYmxlX3NldHVwLCBudW1iZXI9MykKKwogICAgIGRlZiB0ZXN0X3RpbWVpdF9jYWxsYWJsZV9zdG10X2FuZF9zZXR1cChzZWxmKToKICAgICAgICAgc2VsZi50aW1laXQoc2VsZi5mYWtlX2NhbGxhYmxlX3N0bXQsCiAgICAgICAgICAgICAgICAgc2VsZi5mYWtlX2NhbGxhYmxlX3NldHVwLCBudW1iZXI9MykKQEAgLTE2MSw2ICsxNzYsMTAgQEAKICAgICAgICAgc2VsZi5yZXBlYXQoc2VsZi5mYWtlX2NhbGxhYmxlX3N0bXQsIHNlbGYuZmFrZV9zZXR1cCwKICAgICAgICAgICAgICAgICByZXBlYXQ9MywgbnVtYmVyPTUpCiAKKyAgICBkZWYgdGVzdF9yZXBlYXRfY2FsbGFibGVfc2V0dXAoc2VsZik6CisgICAgICAgIHNlbGYucmVwZWF0KHNlbGYuZmFrZV9zdG10LCBzZWxmLmZha2VfY2FsbGFibGVfc2V0dXAsCisgICAgICAgICAgICAgICAgcmVwZWF0PTMsIG51bWJlcj01KQorCiAgICAgZGVmIHRlc3RfcmVwZWF0X2NhbGxhYmxlX3N0bXRfYW5kX3NldHVwKHNlbGYpOgogICAgICAgICBzZWxmLnJlcGVhdChzZWxmLmZha2VfY2FsbGFibGVfc3RtdCwgc2VsZi5mYWtlX2NhbGxhYmxlX3NldHVwLAogICAgICAgICAgICAgICAgIHJlcGVhdD0zLCBudW1iZXI9NSkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weSBiL0xpYi90ZXN0L3Rlc3RfdGltZW91dC5weQppbmRleCBkY2YyMDFiLi43MDNjNDNhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RpbWVvdXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90aW1lb3V0LnB5CkBAIC0yMDcsNyArMjA3LDcgQEAKICAgICAgICAgICAgIHNvY2suY29ubmVjdCgod2hpdGVob2xlKSkKICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgogICAgICAgICAgICAgcGFzcwotICAgICAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgIGlmIGVyci5lcnJubyA9PSBlcnJuby5FQ09OTlJFRlVTRUQ6CiAgICAgICAgICAgICAgICAgc2tpcCA9IEZhbHNlCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RrLnB5IGIvTGliL3Rlc3QvdGVzdF90ay5weQppbmRleCA3NTUxYTdmLi42MjcyOWYwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RrLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdGsucHkKQEAgLTYsMjAgKzYsMTMgQEAKIHN1cHBvcnQuaW1wb3J0X2ZyZXNoX21vZHVsZSgndGtpbnRlcicpCiAKICMgU2tpcCB0ZXN0IGlmIHRrIGNhbm5vdCBiZSBpbml0aWFsaXplZC4KLWZyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IGNoZWNrX3RrX2F2YWlsYWJpbGl0eQotY2hlY2tfdGtfYXZhaWxhYmlsaXR5KCkKK3N1cHBvcnQucmVxdWlyZXMoJ2d1aScpCiAKIGZyb20gdGtpbnRlci50ZXN0IGltcG9ydCBydW50a3Rlc3RzCiAKLWRlZiB0ZXN0X21haW4oZW5hYmxlX2d1aT1GYWxzZSk6Ci0gICAgaWYgZW5hYmxlX2d1aToKLSAgICAgICAgaWYgc3VwcG9ydC51c2VfcmVzb3VyY2VzIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCi0gICAgICAgIGVsaWYgJ2d1aScgbm90IGluIHN1cHBvcnQudXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcy5hcHBlbmQoJ2d1aScpCi0KK2RlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKICAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyh0ZXh0PUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdGtpbnRlciddKSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oZW5hYmxlX2d1aT1UcnVlKQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5IGIvTGliL3Rlc3QvdGVzdF90b2tlbml6ZS5weQppbmRleCAzODYxMWE3Li40MGIwYzkwIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3Rva2VuaXplLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9rZW5pemUucHkKQEAgLTEsMjAgKzEsNDQgQEAKLWRvY3Rlc3RzID0gIiIiCi1UZXN0cyBmb3IgdGhlIHRva2VuaXplIG1vZHVsZS4KK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0b2tlbml6ZSBpbXBvcnQgKHRva2VuaXplLCBfdG9rZW5pemUsIHVudG9rZW5pemUsIE5VTUJFUiwgTkFNRSwgT1AsCisgICAgICAgICAgICAgICAgICAgICBTVFJJTkcsIEVORE1BUktFUiwgRU5DT0RJTkcsIHRva19uYW1lLCBkZXRlY3RfZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBvcGVuIGFzIHRva2VuaXplX29wZW4sIFVudG9rZW5pemVyKQorZnJvbSBpbyBpbXBvcnQgQnl0ZXNJTworZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UsIG1vY2sKK2ltcG9ydCBvcworaW1wb3J0IHRva2VuCiAKLVRoZSB0ZXN0cyBjYW4gYmUgcmVhbGx5IHNpbXBsZS4gR2l2ZW4gYSBzbWFsbCBmcmFnbWVudCBvZiBzb3VyY2UKLWNvZGUsIHByaW50IG91dCBhIHRhYmxlIHdpdGggdG9rZW5zLiBUaGUgRU5ETUFSS0VSIGlzIG9taXR0ZWQgZm9yCi1icmV2aXR5LgogCi0gICAgPj4+IGR1bXBfdG9rZW5zKCIxICsgMSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKK2NsYXNzIFRva2VuaXplVGVzdChUZXN0Q2FzZSk6CisgICAgIyBUZXN0cyBmb3IgdGhlIHRva2VuaXplIG1vZHVsZS4KKworICAgICMgVGhlIHRlc3RzIGNhbiBiZSByZWFsbHkgc2ltcGxlLiBHaXZlbiBhIHNtYWxsIGZyYWdtZW50IG9mIHNvdXJjZQorICAgICMgY29kZSwgcHJpbnQgb3V0IGEgdGFibGUgd2l0aCB0b2tlbnMuIFRoZSBFTkRNQVJLRVIgaXMgb21pdHRlZCBmb3IKKyAgICAjIGJyZXZpdHkuCisKKyAgICBkZWYgY2hlY2tfdG9rZW5pemUoc2VsZiwgcywgZXhwZWN0ZWQpOgorICAgICAgICAjIEZvcm1hdCB0aGUgdG9rZW5zIGluIHMgaW4gYSB0YWJsZSBmb3JtYXQuCisgICAgICAgICMgVGhlIEVORE1BUktFUiBpcyBvbWl0dGVkLgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmID0gQnl0ZXNJTyhzLmVuY29kZSgndXRmLTgnKSkKKyAgICAgICAgZm9yIHR5cGUsIHRva2VuLCBzdGFydCwgZW5kLCBsaW5lIGluIHRva2VuaXplKGYucmVhZGxpbmUpOgorICAgICAgICAgICAgaWYgdHlwZSA9PSBFTkRNQVJLRVI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHR5cGUgPSB0b2tfbmFtZVt0eXBlXQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiICAgICUodHlwZSktMTAuMTBzICUodG9rZW4pLTEzLjEzciAlKHN0YXJ0KXMgJShlbmQpcyIgJQorICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHMoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgWyIgICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkiXSArCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQucnN0cmlwKCkuc3BsaXRsaW5lcygpKQorCisgICAgZGVmIHRlc3RfYmFzaWMoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjEgKyAxIiwgIiIiXAogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDQpICgxLCA1KQotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJpZiBGYWxzZTpcXG4iCi0gICAgLi4uICAgICAgICAgICAgICIgICAgIyBOTFxcbiIKLSAgICAuLi4gICAgICAgICAgICAgIiAgICBUcnVlID0gRmFsc2UgIyBORVdMSU5FXFxuIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiaWYgRmFsc2U6XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAjIE5MXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBUcnVlID0gRmFsc2UgIyBORVdMSU5FXG4iLCAiIiJcCiAgICAgTkFNRSAgICAgICAnaWYnICAgICAgICAgICgxLCAwKSAoMSwgMikKICAgICBOQU1FICAgICAgICdGYWxzZScgICAgICAgKDEsIDMpICgxLCA4KQogICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgOCkgKDEsIDkpCkBAIC0yOCwxMTIgKzUyLDQ4IEBACiAgICAgQ09NTUVOVCAgICAnIyBORVdMSU5FJyAgICgzLCAxNykgKDMsIDI2KQogICAgIE5FV0xJTkUgICAgJ1xcbicgICAgICAgICAgKDMsIDI2KSAoMywgMjcpCiAgICAgREVERU5UICAgICAnJyAgICAgICAgICAgICg0LCAwKSAoNCwgMCkKKyAgICAiIiIpCisgICAgICAgIGluZGVudF9lcnJvcl9maWxlID0gYiIiIlwKK2RlZiBrKHgpOgorICAgIHggKz0gMgorICB4ICs9IDUKKyIiIgorICAgICAgICByZWFkbGluZSA9IEJ5dGVzSU8oaW5kZW50X2Vycm9yX2ZpbGUpLnJlYWRsaW5lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChJbmRlbnRhdGlvbkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuaW5kZW50IGRvZXMgbm90IG1hdGNoIGFueSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3V0ZXIgaW5kZW50YXRpb24gbGV2ZWwiKToKKyAgICAgICAgICAgIGZvciB0b2sgaW4gdG9rZW5pemUocmVhZGxpbmUpOgorICAgICAgICAgICAgICAgIHBhc3MKIAotICAgID4+PiBpbmRlbnRfZXJyb3JfZmlsZSA9IFwiIiIKLSAgICAuLi4gZGVmIGsoeCk6Ci0gICAgLi4uICAgICB4ICs9IDIKLSAgICAuLi4gICB4ICs9IDUKLSAgICAuLi4gXCIiIgotICAgID4+PiByZWFkbGluZSA9IEJ5dGVzSU8oaW5kZW50X2Vycm9yX2ZpbGUuZW5jb2RlKCd1dGYtOCcpKS5yZWFkbGluZQotICAgID4+PiBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lKTogcGFzcwotICAgIFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKLSAgICAgICAgLi4uCi0gICAgSW5kZW50YXRpb25FcnJvcjogdW5pbmRlbnQgZG9lcyBub3QgbWF0Y2ggYW55IG91dGVyIGluZGVudGF0aW9uIGxldmVsCi0KLVRoZXJlIGFyZSBzb21lIHN0YW5kYXJkIGZvcm1hdHRpbmcgcHJhY3RpY2VzIHRoYXQgYXJlIGVhc3kgdG8gZ2V0IHJpZ2h0LgotCi0gICAgPj4+IHJvdW5kdHJpcCgiaWYgeCA9PSAxOlxcbiIKLSAgICAuLi4gICAgICAgICAgICIgICAgcHJpbnQoeClcXG4iKQotICAgIFRydWUKLQotICAgID4+PiByb3VuZHRyaXAoIiMgVGhpcyBpcyBhIGNvbW1lbnRcXG4jIFRoaXMgYWxzbyIpCi0gICAgVHJ1ZQotCi1Tb21lIHBlb3BsZSB1c2UgZGlmZmVyZW50IGZvcm1hdHRpbmcgY29udmVudGlvbnMsIHdoaWNoIG1ha2VzCi11bnRva2VuaXplIGEgbGl0dGxlIHRyaWNraWVyLiBOb3RlIHRoYXQgdGhpcyB0ZXN0IGludm9sdmVzIHRyYWlsaW5nCi13aGl0ZXNwYWNlIGFmdGVyIHRoZSBjb2xvbi4gTm90ZSB0aGF0IHdlIHVzZSBoZXggZXNjYXBlcyB0byBtYWtlIHRoZQotdHdvIHRyYWlsaW5nIGJsYW5rcyBhcHBhcmVudCBpbiB0aGUgZXhwZWN0ZWQgb3V0cHV0LgotCi0gICAgPj4+IHJvdW5kdHJpcCgiaWYgeCA9PSAxIDogXFxuIgotICAgIC4uLiAgICAgICAgICAgIiAgcHJpbnQoeClcXG4iKQotICAgIFRydWUKLQotICAgID4+PiBmID0gc3VwcG9ydC5maW5kZmlsZSgidG9rZW5pemVfdGVzdHMudHh0IikKLSAgICA+Pj4gcm91bmR0cmlwKG9wZW4oZiwgJ3JiJykpCi0gICAgVHJ1ZQotCi0gICAgPj4+IHJvdW5kdHJpcCgiaWYgeCA9PSAxOlxcbiIKLSAgICAuLi4gICAgICAgICAgICIgICAgIyBBIGNvbW1lbnQgYnkgaXRzZWxmLlxcbiIKLSAgICAuLi4gICAgICAgICAgICIgICAgcHJpbnQoeCkgIyBDb21tZW50IGhlcmUsIHRvby5cXG4iCi0gICAgLi4uICAgICAgICAgICAiICAgICMgQW5vdGhlciBjb21tZW50LlxcbiIKLSAgICAuLi4gICAgICAgICAgICJhZnRlcl9pZiA9IFRydWVcXG4iKQotICAgIFRydWUKLQotICAgID4+PiByb3VuZHRyaXAoImlmICh4ICMgVGhlIGNvbW1lbnRzIG5lZWQgdG8gZ28gaW4gdGhlIHJpZ2h0IHBsYWNlXFxuIgotICAgIC4uLiAgICAgICAgICAgIiAgICA9PSAxKTpcXG4iCi0gICAgLi4uICAgICAgICAgICAiICAgIHByaW50KCd4PT0xJylcXG4iKQotICAgIFRydWUKLQotICAgID4+PiByb3VuZHRyaXAoImNsYXNzIFRlc3Q6ICMgQSBjb21tZW50IGhlcmVcXG4iCi0gICAgLi4uICAgICAgICAgICAiICAjIEEgY29tbWVudCB3aXRoIHdlaXJkIGluZGVudFxcbiIKLSAgICAuLi4gICAgICAgICAgICIgIGFmdGVyX2NvbSA9IDVcXG4iCi0gICAgLi4uICAgICAgICAgICAiICBkZWYgeChtKTogcmV0dXJuIG0qNSAjIGEgb25lIGxpbmVyXFxuIgotICAgIC4uLiAgICAgICAgICAgIiAgZGVmIHkobSk6ICMgQSB3aGl0ZXNwYWNlIGFmdGVyIHRoZSBjb2xvblxcbiIKLSAgICAuLi4gICAgICAgICAgICIgICAgIHJldHVybiB5KjQgIyAzLXNwYWNlIGluZGVudFxcbiIpCi0gICAgVHJ1ZQotCi1Tb21lIGVycm9yLWhhbmRsaW5nIGNvZGUKLQotICAgID4+PiByb3VuZHRyaXAoInRyeTogaW1wb3J0IHNvbWVtb2R1bGVcXG4iCi0gICAgLi4uICAgICAgICAgICAiZXhjZXB0IEltcG9ydEVycm9yOiAjIGNvbW1lbnRcXG4iCi0gICAgLi4uICAgICAgICAgICAiICAgIHByaW50KCdDYW4gbm90IGltcG9ydCcgIyBjb21tZW50MlxcbikiCi0gICAgLi4uICAgICAgICAgICAiZWxzZTogICBwcmludCgnTG9hZGVkJylcXG4iKQotICAgIFRydWUKLQotQmFsYW5jaW5nIGNvbnRpbnVhdGlvbgotCi0gICAgPj4+IHJvdW5kdHJpcCgiYSA9ICgzLDQsIFxcbiIKLSAgICAuLi4gICAgICAgICAgICI1LDYpXFxuIgotICAgIC4uLiAgICAgICAgICAgInkgPSBbMywgNCxcXG4iCi0gICAgLi4uICAgICAgICAgICAiNV1cXG4iCi0gICAgLi4uICAgICAgICAgICAieiA9IHsnYSc6IDUsXFxuIgotICAgIC4uLiAgICAgICAgICAgIidiJzoxNSwgJ2MnOlRydWV9XFxuIgotICAgIC4uLiAgICAgICAgICAgInggPSBsZW4oeSkgKyA1IC0gYVtcXG4iCi0gICAgLi4uICAgICAgICAgICAiM10gLSBhWzJdXFxuIgotICAgIC4uLiAgICAgICAgICAgIisgbGVuKHopIC0geltcXG4iCi0gICAgLi4uICAgICAgICAgICAiJ2InXVxcbiIpCi0gICAgVHJ1ZQotCi1PcmRpbmFyeSBpbnRlZ2VycyBhbmQgYmluYXJ5IG9wZXJhdG9ycwotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCIweGZmIDw9IDI1NSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9pbnQoc2VsZik6CisgICAgICAgICMgT3JkaW5hcnkgaW50ZWdlcnMgYW5kIGJpbmFyeSBvcGVyYXRvcnMKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiMHhmZiA8PSAyNTUiLCAiIiJcCiAgICAgTlVNQkVSICAgICAnMHhmZicgICAgICAgICgxLCAwKSAoMSwgNCkKICAgICBPUCAgICAgICAgICc8PScgICAgICAgICAgKDEsIDUpICgxLCA3KQogICAgIE5VTUJFUiAgICAgJzI1NScgICAgICAgICAoMSwgOCkgKDEsIDExKQotICAgID4+PiBkdW1wX3Rva2VucygiMGIxMCA8PSAyNTUiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCIwYjEwIDw9IDI1NSIsICIiIlwKICAgICBOVU1CRVIgICAgICcwYjEwJyAgICAgICAgKDEsIDApICgxLCA0KQogICAgIE9QICAgICAgICAgJzw9JyAgICAgICAgICAoMSwgNSkgKDEsIDcpCiAgICAgTlVNQkVSICAgICAnMjU1JyAgICAgICAgICgxLCA4KSAoMSwgMTEpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCIwbzEyMyA8PSAwTzEyMyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjBvMTIzIDw9IDBPMTIzIiwgIiIiXAogICAgIE5VTUJFUiAgICAgJzBvMTIzJyAgICAgICAoMSwgMCkgKDEsIDUpCiAgICAgT1AgICAgICAgICAnPD0nICAgICAgICAgICgxLCA2KSAoMSwgOCkKICAgICBOVU1CRVIgICAgICcwTzEyMycgICAgICAgKDEsIDkpICgxLCAxNCkKLSAgICA+Pj4gZHVtcF90b2tlbnMoIjEyMzQ1NjcgPiB+MHgxNSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjEyMzQ1NjcgPiB+MHgxNSIsICIiIlwKICAgICBOVU1CRVIgICAgICcxMjM0NTY3JyAgICAgKDEsIDApICgxLCA3KQogICAgIE9QICAgICAgICAgJz4nICAgICAgICAgICAoMSwgOCkgKDEsIDkpCiAgICAgT1AgICAgICAgICAnficgICAgICAgICAgICgxLCAxMCkgKDEsIDExKQogICAgIE5VTUJFUiAgICAgJzB4MTUnICAgICAgICAoMSwgMTEpICgxLCAxNSkKLSAgICA+Pj4gZHVtcF90b2tlbnMoIjIxMzQ1NjggIT0gMTIzMTUxNSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjIxMzQ1NjggIT0gMTIzMTUxNSIsICIiIlwKICAgICBOVU1CRVIgICAgICcyMTM0NTY4JyAgICAgKDEsIDApICgxLCA3KQogICAgIE9QICAgICAgICAgJyE9JyAgICAgICAgICAoMSwgOCkgKDEsIDEwKQogICAgIE5VTUJFUiAgICAgJzEyMzE1MTUnICAgICAoMSwgMTEpICgxLCAxOCkKLSAgICA+Pj4gZHVtcF90b2tlbnMoIigtMTI0NTYxLTEpICYgMjAwMDAwMDAwIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiKC0xMjQ1NjEtMSkgJiAyMDAwMDAwMDAiLCAiIiJcCiAgICAgT1AgICAgICAgICAnKCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDEpICgxLCAyKQogICAgIE5VTUJFUiAgICAgJzEyNDU2MScgICAgICAoMSwgMikgKDEsIDgpCkBAIC0xNDIsOTMgKzEwMiw5MyBAQAogICAgIE9QICAgICAgICAgJyknICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKICAgICBPUCAgICAgICAgICcmJyAgICAgICAgICAgKDEsIDEyKSAoMSwgMTMpCiAgICAgTlVNQkVSICAgICAnMjAwMDAwMDAwJyAgICgxLCAxNCkgKDEsIDIzKQotICAgID4+PiBkdW1wX3Rva2VucygiMHhkZWFkYmVlZiAhPSAtMSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjB4ZGVhZGJlZWYgIT0gLTEiLCAiIiJcCiAgICAgTlVNQkVSICAgICAnMHhkZWFkYmVlZicgICgxLCAwKSAoMSwgMTApCiAgICAgT1AgICAgICAgICAnIT0nICAgICAgICAgICgxLCAxMSkgKDEsIDEzKQogICAgIE9QICAgICAgICAgJy0nICAgICAgICAgICAoMSwgMTQpICgxLCAxNSkKICAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCIweGRlYWRjMGRlICYgMTIzNDUiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCIweGRlYWRjMGRlICYgMTIzNDUiLCAiIiJcCiAgICAgTlVNQkVSICAgICAnMHhkZWFkYzBkZScgICgxLCAwKSAoMSwgMTApCiAgICAgT1AgICAgICAgICAnJicgICAgICAgICAgICgxLCAxMSkgKDEsIDEyKQogICAgIE5VTUJFUiAgICAgJzEyMzQ1JyAgICAgICAoMSwgMTMpICgxLCAxOCkKLSAgICA+Pj4gZHVtcF90b2tlbnMoIjB4RkYgJiAweDE1IHwgMTIzNCIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIjB4RkYgJiAweDE1IHwgMTIzNCIsICIiIlwKICAgICBOVU1CRVIgICAgICcweEZGJyAgICAgICAgKDEsIDApICgxLCA0KQogICAgIE9QICAgICAgICAgJyYnICAgICAgICAgICAoMSwgNSkgKDEsIDYpCiAgICAgTlVNQkVSICAgICAnMHgxNScgICAgICAgICgxLCA3KSAoMSwgMTEpCiAgICAgT1AgICAgICAgICAnfCcgICAgICAgICAgICgxLCAxMikgKDEsIDEzKQogICAgIE5VTUJFUiAgICAgJzEyMzQnICAgICAgICAoMSwgMTQpICgxLCAxOCkKKyAgICAiIiIpCiAKLUxvbmcgaW50ZWdlcnMKLQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDAiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfbG9uZyhzZWxmKToKKyAgICAgICAgIyBMb25nIGludGVnZXJzCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAwIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBOVU1CRVIgICAgICcwJyAgICAgICAgICAgKDEsIDQpICgxLCA1KQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDB4ZmZmZmZmZmZmZmYiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gMHhmZmZmZmZmZmZmZiIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgTlVNQkVSICAgICAnMHhmZmZmZmZmZmZmICgxLCA0KSAoMSwgMTcpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMTIzMTQxMjQyMTUxMjUxNjE2MTEwIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IDEyMzE0MTI0MjE1MTI1MTYxNjExMCIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgTlVNQkVSICAgICAnMTIzMTQxMjQyMTUxICgxLCA0KSAoMSwgMjUpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gLTE1OTIxNTkwMjE1MDEyNTkxIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IC0xNTkyMTU5MDIxNTAxMjU5MSIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgT1AgICAgICAgICAnLScgICAgICAgICAgICgxLCA0KSAoMSwgNSkKICAgICBOVU1CRVIgICAgICcxNTkyMTU5MDIxNTAgKDEsIDUpICgxLCAyMikKKyAgICAiIiIpCiAKLUZsb2F0aW5nIHBvaW50IG51bWJlcnMKLQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDMuMTQxNTkiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CisgICAgICAgICMgRmxvYXRpbmcgcG9pbnQgbnVtYmVycworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gMy4xNDE1OSIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgTlVNQkVSICAgICAnMy4xNDE1OScgICAgICgxLCA0KSAoMSwgMTEpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMzE0MTU5LiIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAzMTQxNTkuIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBOVU1CRVIgICAgICczMTQxNTkuJyAgICAgKDEsIDQpICgxLCAxMSkKLSAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAuMzE0MTU5IikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IC4zMTQxNTkiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJy4zMTQxNTknICAgICAoMSwgNCkgKDEsIDExKQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDNlMTQxNTkiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gM2UxNDE1OSIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgTlVNQkVSICAgICAnM2UxNDE1OScgICAgICgxLCA0KSAoMSwgMTEpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gM0UxMjMiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gM0UxMjMiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJzNFMTIzJyAgICAgICAoMSwgNCkgKDEsIDkpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4K3kgPSAzZS0xMjMwIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCt5ID0gM2UtMTIzMCIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMSkgKDEsIDIpCiAgICAgTkFNRSAgICAgICAneScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDQpICgxLCA1KQogICAgIE5VTUJFUiAgICAgJzNlLTEyMzAnICAgICAoMSwgNikgKDEsIDEzKQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDMuMTRlMTU5IikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IDMuMTRlMTU5IiwgIiIiXAogICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBOVU1CRVIgICAgICczLjE0ZTE1OScgICAgKDEsIDQpICgxLCAxMikKKyAgICAiIiIpCiAKLVN0cmluZyBsaXRlcmFscwotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gJyc7IHkgPSBcXFwiXFxcIiIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9zdHJpbmcoc2VsZik6CisgICAgICAgICMgU3RyaW5nIGxpdGVyYWxzCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAnJzsgeSA9IFwiXCIiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIFNUUklORyAgICAgIicnIiAgICAgICAgICAoMSwgNCkgKDEsIDYpCkBAIC0yMzYsOCArMTk2LDggQEAKICAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDEsIDgpICgxLCA5KQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKICAgICBTVFJJTkcgICAgICciIicgICAgICAgICAgKDEsIDEyKSAoMSwgMTQpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gJ1xcXCInOyB5ID0gXFxcIidcXFwiIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9ICdcIic7IHkgPSBcIidcIiIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgU1RSSU5HICAgICAnXFwnIlxcJycgICAgICAgKDEsIDQpICgxLCA3KQpAQCAtMjQ1LDI5ICsyMDUsMjkgQEAKICAgICBOQU1FICAgICAgICd5JyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDExKSAoMSwgMTIpCiAgICAgU1RSSU5HICAgICAnIlxcJyInICAgICAgICAoMSwgMTMpICgxLCAxNikKLSAgICA+Pj4gZHVtcF90b2tlbnMoInggPSBcXFwiZG9lc24ndCBcXFwic2hyaW5rXFxcIiwgZG9lcyBpdFxcXCIiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gXCJkb2Vzbid0IFwic2hyaW5rXCIsIGRvZXMgaXRcIiIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgU1RSSU5HICAgICAnImRvZXNuXFwndCAiJyAoMSwgNCkgKDEsIDE0KQogICAgIE5BTUUgICAgICAgJ3NocmluaycgICAgICAoMSwgMTQpICgxLCAyMCkKICAgICBTVFJJTkcgICAgICciLCBkb2VzIGl0IicgKDEsIDIwKSAoMSwgMzEpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gJ2FiYycgKyAnQUJDJyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAnYWJjJyArICdBQkMnIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ3gnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBTVFJJTkcgICAgICInYWJjJyIgICAgICAgKDEsIDQpICgxLCA5KQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKICAgICBTVFJJTkcgICAgICInQUJDJyIgICAgICAgKDEsIDEyKSAoMSwgMTcpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCd5ID0gIkFCQyIgKyAiQUJDIicpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoJ3kgPSAiQUJDIiArICJBQkMiJywgIiIiXAogICAgIE5BTUUgICAgICAgJ3knICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBTVFJJTkcgICAgICciQUJDIicgICAgICAgKDEsIDQpICgxLCA5KQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKICAgICBTVFJJTkcgICAgICciQUJDIicgICAgICAgKDEsIDEyKSAoMSwgMTcpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gcidhYmMnICsgcidBQkMnICsgUidBQkMnICsgUidBQkMnIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IHInYWJjJyArIHInQUJDJyArIFInQUJDJyArIFInQUJDJyIsICIiIlwKICAgICBOQU1FICAgICAgICd4JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgMikgKDEsIDMpCiAgICAgU1RSSU5HICAgICAicidhYmMnIiAgICAgICgxLCA0KSAoMSwgMTApCkBAIC0yNzcsOCArMjM3LDggQEAKICAgICBTVFJJTkcgICAgICJSJ0FCQyciICAgICAgKDEsIDIyKSAoMSwgMjgpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOSkgKDEsIDMwKQogICAgIFNUUklORyAgICAgIlInQUJDJyIgICAgICAoMSwgMzEpICgxLCAzNykKLSAgICA+Pj4gZHVtcF90b2tlbnMoJ3kgPSByImFiYyIgKyByIkFCQyIgKyBSIkFCQyIgKyBSIkFCQyInKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCd5ID0gciJhYmMiICsgciJBQkMiICsgUiJBQkMiICsgUiJBQkMiJywgIiIiXAogICAgIE5BTUUgICAgICAgJ3knICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCAyKSAoMSwgMykKICAgICBTVFJJTkcgICAgICdyImFiYyInICAgICAgKDEsIDQpICgxLCAxMCkKQEAgLTI4OCwzMCArMjQ4LDMwIEBACiAgICAgU1RSSU5HICAgICAnUiJBQkMiJyAgICAgICgxLCAyMikgKDEsIDI4KQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgMjkpICgxLCAzMCkKICAgICBTVFJJTkcgICAgICdSIkFCQyInICAgICAgKDEsIDMxKSAoMSwgMzcpCisgICAgIiIiKQogCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ1J2FiYycgKyBVJ2FiYyciKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInUnYWJjJyArIFUnYWJjJyIsICIiIlwKICAgICBTVFJJTkcgICAgICJ1J2FiYyciICAgICAgKDEsIDApICgxLCA2KQogICAgIE9QICAgICAgICAgJysnICAgICAgICAgICAoMSwgNykgKDEsIDgpCiAgICAgU1RSSU5HICAgICAiVSdhYmMnIiAgICAgICgxLCA5KSAoMSwgMTUpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCd1ImFiYyIgKyBVImFiYyInKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCd1ImFiYyIgKyBVImFiYyInLCAiIiJcCiAgICAgU1RSSU5HICAgICAndSJhYmMiJyAgICAgICgxLCAwKSAoMSwgNikKICAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQogICAgIFNUUklORyAgICAgJ1UiYWJjIicgICAgICAoMSwgOSkgKDEsIDE1KQorICAgICIiIikKIAotICAgID4+PiBkdW1wX3Rva2VucygiYidhYmMnICsgQidhYmMnIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJiJ2FiYycgKyBCJ2FiYyciLCAiIiJcCiAgICAgU1RSSU5HICAgICAiYidhYmMnIiAgICAgICgxLCAwKSAoMSwgNikKICAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQogICAgIFNUUklORyAgICAgIkInYWJjJyIgICAgICAoMSwgOSkgKDEsIDE1KQotICAgID4+PiBkdW1wX3Rva2VucygnYiJhYmMiICsgQiJhYmMiJykKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgICIiIikKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgnYiJhYmMiICsgQiJhYmMiJywgIiIiXAogICAgIFNUUklORyAgICAgJ2IiYWJjIicgICAgICAoMSwgMCkgKDEsIDYpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA3KSAoMSwgOCkKICAgICBTVFJJTkcgICAgICdCImFiYyInICAgICAgKDEsIDkpICgxLCAxNSkKLSAgICA+Pj4gZHVtcF90b2tlbnMoImJyJ2FiYycgKyBiUidhYmMnICsgQnInYWJjJyArIEJSJ2FiYyciKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJicidhYmMnICsgYlInYWJjJyArIEJyJ2FiYycgKyBCUidhYmMnIiwgIiIiXAogICAgIFNUUklORyAgICAgImJyJ2FiYyciICAgICAoMSwgMCkgKDEsIDcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKICAgICBTVFJJTkcgICAgICJiUidhYmMnIiAgICAgKDEsIDEwKSAoMSwgMTcpCkBAIC0zMTksOCArMjc5LDggQEAKICAgICBTVFJJTkcgICAgICJCcidhYmMnIiAgICAgKDEsIDIwKSAoMSwgMjcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOCkgKDEsIDI5KQogICAgIFNUUklORyAgICAgIkJSJ2FiYyciICAgICAoMSwgMzApICgxLCAzNykKLSAgICA+Pj4gZHVtcF90b2tlbnMoJ2JyImFiYyIgKyBiUiJhYmMiICsgQnIiYWJjIiArIEJSImFiYyInKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCdiciJhYmMiICsgYlIiYWJjIiArIEJyImFiYyIgKyBCUiJhYmMiJywgIiIiXAogICAgIFNUUklORyAgICAgJ2JyImFiYyInICAgICAoMSwgMCkgKDEsIDcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKICAgICBTVFJJTkcgICAgICdiUiJhYmMiJyAgICAgKDEsIDEwKSAoMSwgMTcpCkBAIC0zMjgsOCArMjg4LDggQEAKICAgICBTVFJJTkcgICAgICdCciJhYmMiJyAgICAgKDEsIDIwKSAoMSwgMjcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOCkgKDEsIDI5KQogICAgIFNUUklORyAgICAgJ0JSImFiYyInICAgICAoMSwgMzApICgxLCAzNykKLSAgICA+Pj4gZHVtcF90b2tlbnMoInJiJ2FiYycgKyByQidhYmMnICsgUmInYWJjJyArIFJCJ2FiYyciKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJyYidhYmMnICsgckInYWJjJyArIFJiJ2FiYycgKyBSQidhYmMnIiwgIiIiXAogICAgIFNUUklORyAgICAgInJiJ2FiYyciICAgICAoMSwgMCkgKDEsIDcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKICAgICBTVFJJTkcgICAgICJyQidhYmMnIiAgICAgKDEsIDEwKSAoMSwgMTcpCkBAIC0zMzcsOCArMjk3LDggQEAKICAgICBTVFJJTkcgICAgICJSYidhYmMnIiAgICAgKDEsIDIwKSAoMSwgMjcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCAyOCkgKDEsIDI5KQogICAgIFNUUklORyAgICAgIlJCJ2FiYyciICAgICAoMSwgMzApICgxLCAzNykKLSAgICA+Pj4gZHVtcF90b2tlbnMoJ3JiImFiYyIgKyByQiJhYmMiICsgUmIiYWJjIiArIFJCImFiYyInKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCdyYiJhYmMiICsgckIiYWJjIiArIFJiImFiYyIgKyBSQiJhYmMiJywgIiIiXAogICAgIFNUUklORyAgICAgJ3JiImFiYyInICAgICAoMSwgMCkgKDEsIDcpCiAgICAgT1AgICAgICAgICAnKycgICAgICAgICAgICgxLCA4KSAoMSwgOSkKICAgICBTVFJJTkcgICAgICdyQiJhYmMiJyAgICAgKDEsIDEwKSAoMSwgMTcpCkBAIC0zNDYsMTEgKzMwNiwxMCBAQAogICAgIFNUUklORyAgICAgJ1JiImFiYyInICAgICAoMSwgMjApICgxLCAyNykKICAgICBPUCAgICAgICAgICcrJyAgICAgICAgICAgKDEsIDI4KSAoMSwgMjkpCiAgICAgU1RSSU5HICAgICAnUkIiYWJjIicgICAgICgxLCAzMCkgKDEsIDM3KQorICAgICIiIikKIAotT3BlcmF0b3JzCi0KLSAgICA+Pj4gZHVtcF90b2tlbnMoImRlZiBkMjIoYSwgYiwgYz0yLCBkPTIsICprKTogcGFzcyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9mdW5jdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiZGVmIGQyMihhLCBiLCBjPTIsIGQ9MiwgKmspOiBwYXNzIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCiAgICAgTkFNRSAgICAgICAnZDIyJyAgICAgICAgICgxLCA0KSAoMSwgNykKICAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDcpICgxLCA4KQpAQCAtMzcxLDggKzMzMCw4IEBACiAgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgxLCAyNikgKDEsIDI3KQogICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgMjcpICgxLCAyOCkKICAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDEsIDI5KSAoMSwgMzMpCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJkZWYgZDAxdl8oYT0xLCAqaywgKip3KTogcGFzcyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICAiIiIpCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImRlZiBkMDF2XyhhPTEsICprLCAqKncpOiBwYXNzIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCiAgICAgTkFNRSAgICAgICAnZDAxdl8nICAgICAgICgxLCA0KSAoMSwgOSkKICAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDkpICgxLCAxMCkKQEAgLTM4OCwxMiArMzQ3LDEyIEBACiAgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgxLCAyMikgKDEsIDIzKQogICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMSwgMjMpICgxLCAyNCkKICAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDEsIDI1KSAoMSwgMjkpCisgICAgIiIiKQogCi1Db21wYXJpc29uCi0KLSAgICA+Pj4gZHVtcF90b2tlbnMoImlmIDEgPCAxID4gMSA9PSAxID49IDUgPD0gMHgxNSA8PSAweDEyICE9ICIgKwotICAgIC4uLiAgICAgICAgICAgICAiMSBhbmQgNSBpbiAxIG5vdCBpbiAxIGlzIDEgb3IgNSBpcyBub3QgMTogcGFzcyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9jb21wYXJpc29uKHNlbGYpOgorICAgICAgICAjIENvbXBhcmlzb24KKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiaWYgMSA8IDEgPiAxID09IDEgPj0gNSA8PSAweDE1IDw9IDB4MTIgIT0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIGFuZCA1IGluIDEgbm90IGluIDEgaXMgMSBvciA1IGlzIG5vdCAxOiBwYXNzIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ2lmJyAgICAgICAgICAoMSwgMCkgKDEsIDIpCiAgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAzKSAoMSwgNCkKICAgICBPUCAgICAgICAgICc8JyAgICAgICAgICAgKDEsIDUpICgxLCA2KQpAQCAtNDI2LDExICszODUsMTEgQEAKICAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDgxKSAoMSwgODIpCiAgICAgT1AgICAgICAgICAnOicgICAgICAgICAgICgxLCA4MikgKDEsIDgzKQogICAgIE5BTUUgICAgICAgJ3Bhc3MnICAgICAgICAoMSwgODQpICgxLCA4OCkKKyAgICAiIiIpCiAKLVNoaWZ0Ci0KLSAgICA+Pj4gZHVtcF90b2tlbnMoInggPSAxIDw8IDEgPj4gNSIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF9zaGlmdChzZWxmKToKKyAgICAgICAgIyBTaGlmdAorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCJ4ID0gMSA8PCAxID4+IDUiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCkBAIC00MzgsMTEgKzM5NywxMSBAQAogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgOSkgKDEsIDEwKQogICAgIE9QICAgICAgICAgJz4+JyAgICAgICAgICAoMSwgMTEpICgxLCAxMykKICAgICBOVU1CRVIgICAgICc1JyAgICAgICAgICAgKDEsIDE0KSAoMSwgMTUpCisgICAgIiIiKQogCi1BZGRpdGl2ZQotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJ4ID0gMSAtIHkgKyAxNSAtIDEgKyAweDEyNCArIHogKyBhWzVdIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgIGRlZiB0ZXN0X2FkZGl0aXZlKHNlbGYpOgorICAgICAgICAjIEFkZGl0aXZlCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoInggPSAxIC0geSArIDE1IC0gMSArIDB4MTI0ICsgeiArIGFbNV0iLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCkBAIC00NjEsMTEgKzQyMCwxMSBAQAogICAgIE9QICAgICAgICAgJ1snICAgICAgICAgICAoMSwgMzQpICgxLCAzNSkKICAgICBOVU1CRVIgICAgICc1JyAgICAgICAgICAgKDEsIDM1KSAoMSwgMzYpCiAgICAgT1AgICAgICAgICAnXScgICAgICAgICAgICgxLCAzNikgKDEsIDM3KQorICAgICIiIikKIAotTXVsdGlwbGljYXRpdmUKLQotICAgID4+PiBkdW1wX3Rva2VucygieCA9IDEvLzEqMS81KjEyJTB4MTIiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfbXVsdGlwbGljYXRpdmUoc2VsZik6CisgICAgICAgICMgTXVsdGlwbGljYXRpdmUKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgieCA9IDEvLzEqMS81KjEyJTB4MTIiLCAiIiJcCiAgICAgTkFNRSAgICAgICAneCcgICAgICAgICAgICgxLCAwKSAoMSwgMSkKICAgICBPUCAgICAgICAgICc9JyAgICAgICAgICAgKDEsIDIpICgxLCAzKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgNCkgKDEsIDUpCkBAIC00NzksMTEgKzQzOCwxMSBAQAogICAgIE5VTUJFUiAgICAgJzEyJyAgICAgICAgICAoMSwgMTMpICgxLCAxNSkKICAgICBPUCAgICAgICAgICclJyAgICAgICAgICAgKDEsIDE1KSAoMSwgMTYpCiAgICAgTlVNQkVSICAgICAnMHgxMicgICAgICAgICgxLCAxNikgKDEsIDIwKQorICAgICIiIikKIAotVW5hcnkKLQotICAgID4+PiBkdW1wX3Rva2VucygifjEgXiAxICYgMSB8MSBeIC0xIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgIGRlZiB0ZXN0X3VuYXJ5KHNlbGYpOgorICAgICAgICAjIFVuYXJ5CisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoIn4xIF4gMSAmIDEgfDEgXiAtMSIsICIiIlwKICAgICBPUCAgICAgICAgICd+JyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMSkgKDEsIDIpCiAgICAgT1AgICAgICAgICAnXicgICAgICAgICAgICgxLCAzKSAoMSwgNCkKQEAgLTQ5NSw4ICs0NTQsOCBAQAogICAgIE9QICAgICAgICAgJ14nICAgICAgICAgICAoMSwgMTQpICgxLCAxNSkKICAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDE2KSAoMSwgMTcpCiAgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxNykgKDEsIDE4KQotICAgID4+PiBkdW1wX3Rva2VucygiLTEqMS8xKzEqMS8vMSAtIC0tLTEqKjEiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgIiIiKQorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCItMSoxLzErMSoxLy8xIC0gLS0tMSoqMSIsICIiIlwKICAgICBPUCAgICAgICAgICctJyAgICAgICAgICAgKDEsIDApICgxLCAxKQogICAgIE5VTUJFUiAgICAgJzEnICAgICAgICAgICAoMSwgMSkgKDEsIDIpCiAgICAgT1AgICAgICAgICAnKicgICAgICAgICAgICgxLCAyKSAoMSwgMykKQEAgLTUxNiwxMSArNDc1LDExIEBACiAgICAgTlVNQkVSICAgICAnMScgICAgICAgICAgICgxLCAxOSkgKDEsIDIwKQogICAgIE9QICAgICAgICAgJyoqJyAgICAgICAgICAoMSwgMjApICgxLCAyMikKICAgICBOVU1CRVIgICAgICcxJyAgICAgICAgICAgKDEsIDIyKSAoMSwgMjMpCisgICAgIiIiKQogCi1TZWxlY3RvcgotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJpbXBvcnQgc3lzLCB0aW1lXFxueCA9IHN5cy5tb2R1bGVzWyd0aW1lJ10udGltZSgpIikKLSAgICBFTkNPRElORyAgICd1dGYtOCcgICAgICAgKDAsIDApICgwLCAwKQorICAgIGRlZiB0ZXN0X3NlbGVjdG9yKHNlbGYpOgorICAgICAgICAjIFNlbGVjdG9yCisgICAgICAgIHNlbGYuY2hlY2tfdG9rZW5pemUoImltcG9ydCBzeXMsIHRpbWVcbnggPSBzeXMubW9kdWxlc1sndGltZSddLnRpbWUoKSIsICIiIlwKICAgICBOQU1FICAgICAgICdpbXBvcnQnICAgICAgKDEsIDApICgxLCA2KQogICAgIE5BTUUgICAgICAgJ3N5cycgICAgICAgICAoMSwgNykgKDEsIDEwKQogICAgIE9QICAgICAgICAgJywnICAgICAgICAgICAoMSwgMTApICgxLCAxMSkKQEAgLTUzOCwxMSArNDk3LDExIEBACiAgICAgTkFNRSAgICAgICAndGltZScgICAgICAgICgyLCAyNCkgKDIsIDI4KQogICAgIE9QICAgICAgICAgJygnICAgICAgICAgICAoMiwgMjgpICgyLCAyOSkKICAgICBPUCAgICAgICAgICcpJyAgICAgICAgICAgKDIsIDI5KSAoMiwgMzApCisgICAgIiIiKQogCi1NZXRob2RzCi0KLSAgICA+Pj4gZHVtcF90b2tlbnMoIkBzdGF0aWNtZXRob2RcXG5kZWYgZm9vKHgseSk6IHBhc3MiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfbWV0aG9kKHNlbGYpOgorICAgICAgICAjIE1ldGhvZHMKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiQHN0YXRpY21ldGhvZFxuZGVmIGZvbyh4LHkpOiBwYXNzIiwgIiIiXAogICAgIE9QICAgICAgICAgJ0AnICAgICAgICAgICAoMSwgMCkgKDEsIDEpCiAgICAgTkFNRSAgICAgICAnc3RhdGljbWV0aG9kICgxLCAxKSAoMSwgMTMpCiAgICAgTkVXTElORSAgICAnXFxuJyAgICAgICAgICAoMSwgMTMpICgxLCAxNCkKQEAgLTU1NSw1MiArNTE0LDEzIEBACiAgICAgT1AgICAgICAgICAnKScgICAgICAgICAgICgyLCAxMSkgKDIsIDEyKQogICAgIE9QICAgICAgICAgJzonICAgICAgICAgICAoMiwgMTIpICgyLCAxMykKICAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDIsIDE0KSAoMiwgMTgpCisgICAgIiIiKQogCi1CYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb24sIGV4Y2VwdCBmb3IgY29tbWVudHMKLQotICAgID4+PiByb3VuZHRyaXAoIng9MStcXFxcbiIKLSAgICAuLi4gICAgICAgICAgICIxXFxuIgotICAgIC4uLiAgICAgICAgICAgIiMgVGhpcyBpcyBhIGNvbW1lbnRcXFxcbiIKLSAgICAuLi4gICAgICAgICAgICIjIFRoaXMgYWxzb1xcbiIpCi0gICAgVHJ1ZQotICAgID4+PiByb3VuZHRyaXAoIiMgQ29tbWVudCBcXFxcbnggPSAwIikKLSAgICBUcnVlCi0KLVR3byBzdHJpbmcgbGl0ZXJhbHMgb24gdGhlIHNhbWUgbGluZQotCi0gICAgPj4+IHJvdW5kdHJpcCgiJycgJyciKQotICAgIFRydWUKLQotVGVzdCByb3VuZHRyaXAgb24gcmFuZG9tIHB5dGhvbiBtb2R1bGVzLgotcGFzcyB0aGUgJy11Y3B1JyBvcHRpb24gdG8gcHJvY2VzcyB0aGUgZnVsbCBkaXJlY3RvcnkuCi0KLSAgICA+Pj4gaW1wb3J0IHJhbmRvbQotICAgID4+PiB0ZW1wZGlyID0gb3MucGF0aC5kaXJuYW1lKGYpIG9yIG9zLmN1cmRpcgotICAgID4+PiB0ZXN0ZmlsZXMgPSBnbG9iLmdsb2Iob3MucGF0aC5qb2luKHRlbXBkaXIsICJ0ZXN0Ki5weSIpKQotCi1Ub2tlbml6ZSBpcyBicm9rZW4gb24gdGVzdF9wZXAzMTMxLnB5IGJlY2F1c2UgcmVndWxhciBleHByZXNzaW9ucyBhcmUKLWJyb2tlbiBvbiB0aGUgb2JzY3VyZSB1bmljb2RlIGlkZW50aWZpZXJzIGluIGl0LiAqc2lnaCoKLVdpdGggcm91bmR0cmlwIGV4dGVuZGVkIHRvIHRlc3QgdGhlIDUtdHVwbGUgbW9kZSBvZiAgdW50b2tlbml6ZSwKLTcgbW9yZSB0ZXN0ZmlsZXMgZmFpbC4gIFJlbW92ZSB0aGVtIGFsc28gdW50aWwgdGhlIGZhaWx1cmUgaXMgZGlhZ25vc2VkLgotCi0gICAgPj4+IHRlc3RmaWxlcy5yZW1vdmUob3MucGF0aC5qb2luKHRlbXBkaXIsICJ0ZXN0X3BlcDMxMzEucHkiKSkKLSAgICA+Pj4gZm9yIGYgaW4gKCdidWZmZXInLCAnYnVpbHRpbicsICdmaWxlaW8nLCAnaW5zcGVjdCcsICdvcycsICdwbGF0Zm9ybScsICdzeXMnKToKLSAgICAuLi4gICAgIHRlc3RmaWxlcy5yZW1vdmUob3MucGF0aC5qb2luKHRlbXBkaXIsICJ0ZXN0XyVzLnB5IikgJSBmKQotICAgIC4uLgotICAgID4+PiBpZiBub3Qgc3VwcG9ydC5pc19yZXNvdXJjZV9lbmFibGVkKCJjcHUiKToKLSAgICAuLi4gICAgIHRlc3RmaWxlcyA9IHJhbmRvbS5zYW1wbGUodGVzdGZpbGVzLCAxMCkKLSAgICAuLi4KLSAgICA+Pj4gZm9yIHRlc3RmaWxlIGluIHRlc3RmaWxlczoKLSAgICAuLi4gICAgIGlmIG5vdCByb3VuZHRyaXAob3Blbih0ZXN0ZmlsZSwgJ3JiJykpOgotICAgIC4uLiAgICAgICAgIHByaW50KCJSb3VuZHRyaXAgZmFpbGVkIGZvciBmaWxlICVzIiAlIHRlc3RmaWxlKQotICAgIC4uLiAgICAgICAgIGJyZWFrCi0gICAgLi4uIGVsc2U6IFRydWUKLSAgICBUcnVlCi0KLUV2aWwgdGFicwotCi0gICAgPj4+IGR1bXBfdG9rZW5zKCJkZWYgZigpOlxcblxcdGlmIHhcXG4gICAgICAgIFxcdHBhc3MiKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3RfdGFicyhzZWxmKToKKyAgICAgICAgIyBFdmlsIHRhYnMKKyAgICAgICAgc2VsZi5jaGVja190b2tlbml6ZSgiZGVmIGYoKTpcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXHRpZiB4XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgICAgXHRwYXNzIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ2RlZicgICAgICAgICAoMSwgMCkgKDEsIDMpCiAgICAgTkFNRSAgICAgICAnZicgICAgICAgICAgICgxLCA0KSAoMSwgNSkKICAgICBPUCAgICAgICAgICcoJyAgICAgICAgICAgKDEsIDUpICgxLCA2KQpAQCAtNjE1LDExICs1MzUsMTEgQEAKICAgICBOQU1FICAgICAgICdwYXNzJyAgICAgICAgKDMsIDkpICgzLCAxMykKICAgICBERURFTlQgICAgICcnICAgICAgICAgICAgKDQsIDApICg0LCAwKQogICAgIERFREVOVCAgICAgJycgICAgICAgICAgICAoNCwgMCkgKDQsIDApCisgICAgIiIiKQogCi1Ob24tYXNjaWkgaWRlbnRpZmllcnMKLQotICAgID4+PiBkdW1wX3Rva2Vucygiw5ZydGVyID0gJ3BsYWNlcydcXG5ncsO8biA9ICdncmVlbiciKQotICAgIEVOQ09ESU5HICAgJ3V0Zi04JyAgICAgICAoMCwgMCkgKDAsIDApCisgICAgZGVmIHRlc3Rfbm9uX2FzY2lpX2lkZW50aWZpZXJzKHNlbGYpOgorICAgICAgICAjIE5vbi1hc2NpaSBpZGVudGlmaWVycworICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCLDlnJ0ZXIgPSAncGxhY2VzJ1xuZ3LDvG4gPSAnZ3JlZW4nIiwgIiIiXAogICAgIE5BTUUgICAgICAgJ8OWcnRlcicgICAgICAgKDEsIDApICgxLCA1KQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMSwgNikgKDEsIDcpCiAgICAgU1RSSU5HICAgICAiJ3BsYWNlcyciICAgICgxLCA4KSAoMSwgMTYpCkBAIC02MjcsMTEgKzU0NywxMSBAQAogICAgIE5BTUUgICAgICAgJ2dyw7xuJyAgICAgICAgKDIsIDApICgyLCA0KQogICAgIE9QICAgICAgICAgJz0nICAgICAgICAgICAoMiwgNSkgKDIsIDYpCiAgICAgU1RSSU5HICAgICAiJ2dyZWVuJyIgICAgICgyLCA3KSAoMiwgMTQpCisgICAgIiIiKQogCi1MZWdhY3kgdW5pY29kZSBsaXRlcmFsczoKLQotICAgID4+PiBkdW1wX3Rva2Vucygiw5ZydGVyID0gdSdwbGFjZXMnXFxuZ3LDvG4gPSBVJ2dyZWVuJyIpCi0gICAgRU5DT0RJTkcgICAndXRmLTgnICAgICAgICgwLCAwKSAoMCwgMCkKKyAgICBkZWYgdGVzdF91bmljb2RlKHNlbGYpOgorICAgICAgICAjIExlZ2FjeSB1bmljb2RlIGxpdGVyYWxzOgorICAgICAgICBzZWxmLmNoZWNrX3Rva2VuaXplKCLDlnJ0ZXIgPSB1J3BsYWNlcydcbmdyw7xuID0gVSdncmVlbiciLCAiIiJcCiAgICAgTkFNRSAgICAgICAnw5ZydGVyJyAgICAgICAoMSwgMCkgKDEsIDUpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgxLCA2KSAoMSwgNykKICAgICBTVFJJTkcgICAgICJ1J3BsYWNlcyciICAgKDEsIDgpICgxLCAxNykKQEAgLTYzOSw4OSArNTU5LDEwIEBACiAgICAgTkFNRSAgICAgICAnZ3LDvG4nICAgICAgICAoMiwgMCkgKDIsIDQpCiAgICAgT1AgICAgICAgICAnPScgICAgICAgICAgICgyLCA1KSAoMiwgNikKICAgICBTVFJJTkcgICAgICJVJ2dyZWVuJyIgICAgKDIsIDcpICgyLCAxNSkKLSIiIgorICAgICIiIikKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Ci1mcm9tIHRva2VuaXplIGltcG9ydCAodG9rZW5pemUsIF90b2tlbml6ZSwgdW50b2tlbml6ZSwgTlVNQkVSLCBOQU1FLCBPUCwKLSAgICAgICAgICAgICAgICAgICAgIFNUUklORywgRU5ETUFSS0VSLCBFTkNPRElORywgdG9rX25hbWUsIGRldGVjdF9lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgIG9wZW4gYXMgdG9rZW5pemVfb3BlbiwgVW50b2tlbml6ZXIpCi1mcm9tIGlvIGltcG9ydCBCeXRlc0lPCi1mcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQotaW1wb3J0IG9zLCBzeXMsIGdsb2IKLWltcG9ydCB0b2tlbgogCi1kZWYgZHVtcF90b2tlbnMocyk6Ci0gICAgIiIiUHJpbnQgb3V0IHRoZSB0b2tlbnMgaW4gcyBpbiBhIHRhYmxlIGZvcm1hdC4KLQotICAgIFRoZSBFTkRNQVJLRVIgaXMgb21pdHRlZC4KLSAgICAiIiIKLSAgICBmID0gQnl0ZXNJTyhzLmVuY29kZSgndXRmLTgnKSkKLSAgICBmb3IgdHlwZSwgdG9rZW4sIHN0YXJ0LCBlbmQsIGxpbmUgaW4gdG9rZW5pemUoZi5yZWFkbGluZSk6Ci0gICAgICAgIGlmIHR5cGUgPT0gRU5ETUFSS0VSOgotICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgdHlwZSA9IHRva19uYW1lW3R5cGVdCi0gICAgICAgIHByaW50KCIlKHR5cGUpLTEwLjEwcyAlKHRva2VuKS0xMy4xM3IgJShzdGFydClzICUoZW5kKXMiICUgbG9jYWxzKCkpCi0KLWRlZiByb3VuZHRyaXAoZik6Ci0gICAgIiIiCi0gICAgVGVzdCByb3VuZHRyaXAgZm9yIGB1bnRva2VuaXplYC4gYGZgIGlzIGFuIG9wZW4gZmlsZSBvciBhIHN0cmluZy4KLSAgICBUaGUgc291cmNlIGNvZGUgaW4gZiBpcyB0b2tlbml6ZWQgdG8gYm90aCA1LSBhbmQgMi10dXBsZXMuCi0gICAgQm90aCBzZXF1ZW5jZXMgYXJlIGNvbnZlcnRlZCBiYWNrIHRvIHNvdXJjZSBjb2RlIHZpYQotICAgIHRva2VuaXplLnVudG9rZW5pemUoKSwgYW5kIHRoZSBsYXR0ZXIgdG9rZW5pemVkIGFnYWluIHRvIDItdHVwbGVzLgotICAgIFRoZSB0ZXN0IGZhaWxzIGlmIHRoZSAzIHBhaXIgdG9rZW5pemF0aW9ucyBkbyBub3QgbWF0Y2guCi0KLSAgICBXaGVuIHVudG9rZW5pemUgYnVncyBhcmUgZml4ZWQsIHVudG9rZW5pemUgd2l0aCA1LXR1cGxlcyBzaG91bGQKLSAgICByZXByb2R1Y2UgY29kZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBiYWNrc2xhc2ggY29udGludWF0aW9uCi0gICAgZm9sbG93aW5nIHNwYWNlcy4gIEEgcHJvcGVyIHRlc3Qgc2hvdWxkIHRlc3QgdGhpcy4KLQotICAgIFRoaXMgZnVuY3Rpb24gd291bGQgYmUgbW9yZSB1c2VmdWwgZm9yIGNvcnJlY3RpbmcgYnVncyBpZiBpdCByZXBvcnRlZAotICAgIHRoZSBmaXJzdCBwb2ludCBvZiBmYWlsdXJlLCBsaWtlIGFzc2VydEVxdWFsLCByYXRoZXIgdGhhbiBqdXN0Ci0gICAgcmV0dXJuaW5nIEZhbHNlIC0tIG9yIGlmIGl0IHdlcmUgb25seSB1c2VkIGluIHVuaXR0ZXN0cyBhbmQgbm90Ci0gICAgZG9jdGVzdCBhbmQgYWN0dWFsbHkgdXNlZCBhc3NlcnRFcXVhbC4KLSAgICAiIiIKLSAgICAjIEdldCBzb3VyY2UgY29kZSBhbmQgb3JpZ2luYWwgdG9rZW5pemF0aW9ucwotICAgIGlmIGlzaW5zdGFuY2UoZiwgc3RyKToKLSAgICAgICAgY29kZSA9IGYuZW5jb2RlKCd1dGYtOCcpCi0gICAgZWxzZToKLSAgICAgICAgY29kZSA9IGYucmVhZCgpCi0gICAgICAgIGYuY2xvc2UoKQotICAgIHJlYWRsaW5lID0gaXRlcihjb2RlLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpLl9fbmV4dF9fCi0gICAgdG9rZW5zNSA9IGxpc3QodG9rZW5pemUocmVhZGxpbmUpKQotICAgIHRva2VuczIgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuczVdCi0gICAgIyBSZXByb2R1Y2UgdG9rZW5zMiBmcm9tIHBhaXJzCi0gICAgYnl0ZXNfZnJvbTIgPSB1bnRva2VuaXplKHRva2VuczIpCi0gICAgcmVhZGxpbmUyID0gaXRlcihieXRlc19mcm9tMi5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKS5fX25leHRfXwotICAgIHRva2VuczJfZnJvbTIgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lMildCi0gICAgIyBSZXByb2R1Y2UgdG9rZW5zMiBmcm9tIDUtdHVwbGVzCi0gICAgYnl0ZXNfZnJvbTUgPSB1bnRva2VuaXplKHRva2VuczUpCi0gICAgcmVhZGxpbmU1ID0gaXRlcihieXRlc19mcm9tNS5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpKS5fX25leHRfXwotICAgIHRva2VuczJfZnJvbTUgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lNSldCi0gICAgIyBDb21wYXJlIDMgdmVyc2lvbnMKLSAgICByZXR1cm4gdG9rZW5zMiA9PSB0b2tlbnMyX2Zyb20yID09IHRva2VuczJfZnJvbTUKLQotIyBUaGlzIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgZG9jcywgc2V0IHVwIGFzIGEgZG9jdGVzdC4KIGRlZiBkZWNpc3RtdChzKToKLSAgICAiIiJTdWJzdGl0dXRlIERlY2ltYWxzIGZvciBmbG9hdHMgaW4gYSBzdHJpbmcgb2Ygc3RhdGVtZW50cy4KLQotICAgID4+PiBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKLSAgICA+Pj4gcyA9ICdwcmludCgrMjEuM2UtNSotLjEyMzQvODEuNyknCi0gICAgPj4+IGRlY2lzdG10KHMpCi0gICAgInByaW50ICgrRGVjaW1hbCAoJzIxLjNlLTUnKSotRGVjaW1hbCAoJy4xMjM0JykvRGVjaW1hbCAoJzgxLjcnKSkiCi0KLSAgICBUaGUgZm9ybWF0IG9mIHRoZSBleHBvbmVudCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgcGxhdGZvcm0gQyBsaWJyYXJ5LgotICAgIEtub3duIGNhc2VzIGFyZSAiZS0wMDciIChXaW5kb3dzKSBhbmQgImUtMDciIChub3QgV2luZG93cykuICBTaW5jZQotICAgIHdlJ3JlIG9ubHkgc2hvd2luZyAxMSBkaWdpdHMsIGFuZCB0aGUgMTJ0aCBpc24ndCBjbG9zZSB0byA1LCB0aGUKLSAgICByZXN0IG9mIHRoZSBvdXRwdXQgc2hvdWxkIGJlIHBsYXRmb3JtLWluZGVwZW5kZW50LgotCi0gICAgPj4+IGV4ZWMocykgI2RvY3Rlc3Q6ICtFTExJUFNJUwotICAgIC0zLjIxNzE2MDM0MjcuLi5lLTAuLi43Ci0KLSAgICBPdXRwdXQgZnJvbSBjYWxjdWxhdGlvbnMgd2l0aCBEZWNpbWFsIHNob3VsZCBiZSBpZGVudGljYWwgYWNyb3NzIGFsbAotICAgIHBsYXRmb3Jtcy4KLQotICAgID4+PiBleGVjKGRlY2lzdG10KHMpKQotICAgIC0zLjIxNzE2MDM0MjcxNzI1ODI2MTkzMzkwNDUyOUUtNwotICAgICIiIgogICAgIHJlc3VsdCA9IFtdCiAgICAgZyA9IHRva2VuaXplKEJ5dGVzSU8ocy5lbmNvZGUoJ3V0Zi04JykpLnJlYWRsaW5lKSAgICMgdG9rZW5pemUgdGhlIHN0cmluZwogICAgIGZvciB0b2tudW0sIHRva3ZhbCwgXywgXywgXyAgaW4gZzoKQEAgLTczNiw2ICs1NzcsMjggQEAKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKHRva251bSwgdG9rdmFsKSkKICAgICByZXR1cm4gdW50b2tlbml6ZShyZXN1bHQpLmRlY29kZSgndXRmLTgnKQogCitjbGFzcyBUZXN0TWlzYyhUZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9kZWNpc3RtdChzZWxmKToKKyAgICAgICAgIyBTdWJzdGl0dXRlIERlY2ltYWxzIGZvciBmbG9hdHMgaW4gYSBzdHJpbmcgb2Ygc3RhdGVtZW50cy4KKyAgICAgICAgIyBUaGlzIGlzIGFuIGV4YW1wbGUgZnJvbSB0aGUgZG9jcy4KKworICAgICAgICBmcm9tIGRlY2ltYWwgaW1wb3J0IERlY2ltYWwKKyAgICAgICAgcyA9ICcrMjEuM2UtNSotLjEyMzQvODEuNycKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkZWNpc3RtdChzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiK0RlY2ltYWwgKCcyMS4zZS01JykqLURlY2ltYWwgKCcuMTIzNCcpL0RlY2ltYWwgKCc4MS43JykiKQorCisgICAgICAgICMgVGhlIGZvcm1hdCBvZiB0aGUgZXhwb25lbnQgaXMgaW5oZXJpdGVkIGZyb20gdGhlIHBsYXRmb3JtIEMgbGlicmFyeS4KKyAgICAgICAgIyBLbm93biBjYXNlcyBhcmUgImUtMDA3IiAoV2luZG93cykgYW5kICJlLTA3IiAobm90IFdpbmRvd3MpLiAgU2luY2UKKyAgICAgICAgIyB3ZSdyZSBvbmx5IHNob3dpbmcgMTEgZGlnaXRzLCBhbmQgdGhlIDEydGggaXNuJ3QgY2xvc2UgdG8gNSwgdGhlCisgICAgICAgICMgcmVzdCBvZiB0aGUgb3V0cHV0IHNob3VsZCBiZSBwbGF0Zm9ybS1pbmRlcGVuZGVudC4KKyAgICAgICAgc2VsZi5hc3NlcnRSZWdleChyZXByKGV2YWwocykpLCAnLTMuMjE3MTYwMzQyN1swLTldKmUtMCs3JykKKworICAgICAgICAjIE91dHB1dCBmcm9tIGNhbGN1bGF0aW9ucyB3aXRoIERlY2ltYWwgc2hvdWxkIGJlIGlkZW50aWNhbCBhY3Jvc3MgYWxsCisgICAgICAgICMgcGxhdGZvcm1zLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2YWwoZGVjaXN0bXQocykpLAorICAgICAgICAgICAgICAgICAgICAgICAgIERlY2ltYWwoJy0zLjIxNzE2MDM0MjcxNzI1ODI2MTkzMzkwNDUyOUUtNycpKQorCiAKIGNsYXNzIFRlc3RUb2tlbml6ZXJBZGhlcmVzVG9QZXAwMjYzKFRlc3RDYXNlKToKICAgICAiIiIKQEAgLTc0NCwxMSArNjA3LDExIEBACiAKICAgICBkZWYgX3Rlc3RGaWxlKHNlbGYsIGZpbGVuYW1lKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCBmaWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIHJvdW5kdHJpcChvcGVuKHBhdGgsICdyYicpKQorICAgICAgICBUZXN0Um91bmR0cmlwLmNoZWNrX3JvdW5kdHJpcChzZWxmLCBvcGVuKHBhdGgsICdyYicpKQogCiAgICAgZGVmIHRlc3RfdXRmOF9jb2RpbmdfY29va2llX2FuZF9ub191dGY4X2JvbShzZWxmKToKICAgICAgICAgZiA9ICd0b2tlbml6ZV90ZXN0cy11dGY4LWNvZGluZy1jb29raWUtYW5kLW5vLXV0ZjgtYm9tLXNpZy50eHQnCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLl90ZXN0RmlsZShmKSkKKyAgICAgICAgc2VsZi5fdGVzdEZpbGUoZikKIAogICAgIGRlZiB0ZXN0X2xhdGluMV9jb2RpbmdfY29va2llX2FuZF91dGY4X2JvbShzZWxmKToKICAgICAgICAgIiIiCkBAIC03NjMsMTEgKzYyNiwxMSBAQAogCiAgICAgZGVmIHRlc3Rfbm9fY29kaW5nX2Nvb2tpZV9hbmRfdXRmOF9ib20oc2VsZik6CiAgICAgICAgIGYgPSAndG9rZW5pemVfdGVzdHMtbm8tY29kaW5nLWNvb2tpZS1hbmQtdXRmOC1ib20tc2lnLW9ubHkudHh0JwotICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5fdGVzdEZpbGUoZikpCisgICAgICAgIHNlbGYuX3Rlc3RGaWxlKGYpCiAKICAgICBkZWYgdGVzdF91dGY4X2NvZGluZ19jb29raWVfYW5kX3V0ZjhfYm9tKHNlbGYpOgogICAgICAgICBmID0gJ3Rva2VuaXplX3Rlc3RzLXV0ZjgtY29kaW5nLWNvb2tpZS1hbmQtdXRmOC1ib20tc2lnLnR4dCcKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuX3Rlc3RGaWxlKGYpKQorICAgICAgICBzZWxmLl90ZXN0RmlsZShmKQogCiAgICAgZGVmIHRlc3RfYmFkX2NvZGluZ19jb29raWUoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5bnRheEVycm9yLCBzZWxmLl90ZXN0RmlsZSwgJ2JhZF9jb2RpbmcucHknKQpAQCAtMTA1OCw2ICs5MjEsMTMgQEAKICAgICAgICAgICAgIGlucyA9IEJ1bmsobGluZXMsIHBhdGgpCiAgICAgICAgICAgICBkZXRlY3RfZW5jb2RpbmcoaW5zLnJlYWRsaW5lKQogCisgICAgZGVmIHRlc3Rfb3Blbl9lcnJvcihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMjM4NDA6IG9wZW4oKSBtdXN0IGNsb3NlIHRoZSBiaW5hcnkgZmlsZSBvbiBlcnJvcgorICAgICAgICBtID0gQnl0ZXNJTyhiJyNjb2Rpbmc6eHh4JykKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCd0b2tlbml6ZS5fYnVpbHRpbl9vcGVuJywgcmV0dXJuX3ZhbHVlPW0pOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3ludGF4RXJyb3IsIHRva2VuaXplX29wZW4sICdmb29iYXInKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobS5jbG9zZWQpCisKIAogY2xhc3MgVGVzdFRva2VuaXplKFRlc3RDYXNlKToKIApAQCAtMTA2Niw3ICs5MzYsNyBAQAogICAgICAgICBlbmNvZGluZyA9IG9iamVjdCgpCiAgICAgICAgIGVuY29kaW5nX3VzZWQgPSBOb25lCiAgICAgICAgIGRlZiBtb2NrX2RldGVjdF9lbmNvZGluZyhyZWFkbGluZSk6Ci0gICAgICAgICAgICByZXR1cm4gZW5jb2RpbmcsIFsnZmlyc3QnLCAnc2Vjb25kJ10KKyAgICAgICAgICAgIHJldHVybiBlbmNvZGluZywgW2InZmlyc3QnLCBiJ3NlY29uZCddCiAKICAgICAgICAgZGVmIG1vY2tfX3Rva2VuaXplKHJlYWRsaW5lLCBlbmNvZGluZyk6CiAgICAgICAgICAgICBub25sb2NhbCBlbmNvZGluZ191c2VkCkBAIC0xMDg1LDcgKzk1NSw3IEBACiAgICAgICAgICAgICBjb3VudGVyICs9IDEKICAgICAgICAgICAgIGlmIGNvdW50ZXIgPT0gNToKICAgICAgICAgICAgICAgICByZXR1cm4gYicnCi0gICAgICAgICAgICByZXR1cm4gY291bnRlcgorICAgICAgICAgICAgcmV0dXJuIHN0cihjb3VudGVyKS5lbmNvZGUoKQogCiAgICAgICAgIG9yaWdfZGV0ZWN0X2VuY29kaW5nID0gdG9rZW5pemVfbW9kdWxlLmRldGVjdF9lbmNvZGluZwogICAgICAgICBvcmlnX190b2tlbml6ZSA9IHRva2VuaXplX21vZHVsZS5fdG9rZW5pemUKQEAgLTEwOTMsNyArOTYzLDggQEAKICAgICAgICAgdG9rZW5pemVfbW9kdWxlLl90b2tlbml6ZSA9IG1vY2tfX3Rva2VuaXplCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHJlc3VsdHMgPSB0b2tlbml6ZShtb2NrX3JlYWRsaW5lKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJlc3VsdHMpLCBbJ2ZpcnN0JywgJ3NlY29uZCcsIDEsIDIsIDMsIDRdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHJlc3VsdHMpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYidmaXJzdCcsIGInc2Vjb25kJywgYicxJywgYicyJywgYiczJywgYic0J10pCiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICB0b2tlbml6ZV9tb2R1bGUuZGV0ZWN0X2VuY29kaW5nID0gb3JpZ19kZXRlY3RfZW5jb2RpbmcKICAgICAgICAgICAgIHRva2VuaXplX21vZHVsZS5fdG9rZW5pemUgPSBvcmlnX190b2tlbml6ZQpAQCAtMTE3Nyw2ICsxMDQ4LDcgQEAKICAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE2MTUyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXhhY3RUeXBlRXF1YWwoJ0AgICAgICAgICAgJywgdG9rZW4uQVQpCiAKKwogY2xhc3MgVW50b2tlbml6ZVRlc3QoVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfYmFkX2lucHV0X29yZGVyKHNlbGYpOgpAQCAtMTIwMiw3ICsxMDc0LDcgQEAKICAgICAgICAgdS5wcmV2X3JvdyA9IDIKICAgICAgICAgdS5hZGRfd2hpdGVzcGFjZSgoNCwgNCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodS50b2tlbnMsIFsnXFxcbicsICdcXFxuXFxcbicsICcgICAgJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyb3VuZHRyaXAoJ2FcbiAgYlxuICAgIGNcbiAgXFxcbiAgY1xuJykpCisgICAgICAgIFRlc3RSb3VuZHRyaXAuY2hlY2tfcm91bmR0cmlwKHNlbGYsICdhXG4gIGJcbiAgICBjXG4gIFxcXG4gIGNcbicpCiAKICAgICBkZWYgdGVzdF9pdGVyX2NvbXBhdChzZWxmKToKICAgICAgICAgdSA9IFVudG9rZW5pemVyKCkKQEAgLTEyMTgsMTYgKzEwOTAsMTQ3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW50b2tlbml6ZShpdGVyKHRva2VucykpLCBiJ0hlbGxvICcpCiAKIAotX190ZXN0X18gPSB7ImRvY3Rlc3RzIiA6IGRvY3Rlc3RzLCAnZGVjaXN0bXQnOiBkZWNpc3RtdH0KK2NsYXNzIFRlc3RSb3VuZHRyaXAoVGVzdENhc2UpOgogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3Rva2VuaXplCi0gICAgc3VwcG9ydC5ydW5fZG9jdGVzdCh0ZXN0X3Rva2VuaXplLCBUcnVlKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RUb2tlbml6ZXJBZGhlcmVzVG9QZXAwMjYzKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RfVG9rZW5pemUpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdERldGVjdEVuY29kaW5nKQotICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFRlc3RUb2tlbml6ZSkKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVbnRva2VuaXplVGVzdCkKKyAgICBkZWYgY2hlY2tfcm91bmR0cmlwKHNlbGYsIGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGVzdCByb3VuZHRyaXAgZm9yIGB1bnRva2VuaXplYC4gYGZgIGlzIGFuIG9wZW4gZmlsZSBvciBhIHN0cmluZy4KKyAgICAgICAgVGhlIHNvdXJjZSBjb2RlIGluIGYgaXMgdG9rZW5pemVkIHRvIGJvdGggNS0gYW5kIDItdHVwbGVzLgorICAgICAgICBCb3RoIHNlcXVlbmNlcyBhcmUgY29udmVydGVkIGJhY2sgdG8gc291cmNlIGNvZGUgdmlhCisgICAgICAgIHRva2VuaXplLnVudG9rZW5pemUoKSwgYW5kIHRoZSBsYXR0ZXIgdG9rZW5pemVkIGFnYWluIHRvIDItdHVwbGVzLgorICAgICAgICBUaGUgdGVzdCBmYWlscyBpZiB0aGUgMyBwYWlyIHRva2VuaXphdGlvbnMgZG8gbm90IG1hdGNoLgorCisgICAgICAgIFdoZW4gdW50b2tlbml6ZSBidWdzIGFyZSBmaXhlZCwgdW50b2tlbml6ZSB3aXRoIDUtdHVwbGVzIHNob3VsZAorICAgICAgICByZXByb2R1Y2UgY29kZSB0aGF0IGRvZXMgbm90IGNvbnRhaW4gYSBiYWNrc2xhc2ggY29udGludWF0aW9uCisgICAgICAgIGZvbGxvd2luZyBzcGFjZXMuICBBIHByb3BlciB0ZXN0IHNob3VsZCB0ZXN0IHRoaXMuCisgICAgICAgICIiIgorICAgICAgICAjIEdldCBzb3VyY2UgY29kZSBhbmQgb3JpZ2luYWwgdG9rZW5pemF0aW9ucworICAgICAgICBpZiBpc2luc3RhbmNlKGYsIHN0cik6CisgICAgICAgICAgICBjb2RlID0gZi5lbmNvZGUoJ3V0Zi04JykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvZGUgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIHJlYWRsaW5lID0gaXRlcihjb2RlLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpLl9fbmV4dF9fCisgICAgICAgIHRva2VuczUgPSBsaXN0KHRva2VuaXplKHJlYWRsaW5lKSkKKyAgICAgICAgdG9rZW5zMiA9IFt0b2tbOjJdIGZvciB0b2sgaW4gdG9rZW5zNV0KKyAgICAgICAgIyBSZXByb2R1Y2UgdG9rZW5zMiBmcm9tIHBhaXJzCisgICAgICAgIGJ5dGVzX2Zyb20yID0gdW50b2tlbml6ZSh0b2tlbnMyKQorICAgICAgICByZWFkbGluZTIgPSBpdGVyKGJ5dGVzX2Zyb20yLnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpLl9fbmV4dF9fCisgICAgICAgIHRva2VuczJfZnJvbTIgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lMildCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zMl9mcm9tMiwgdG9rZW5zMikKKyAgICAgICAgIyBSZXByb2R1Y2UgdG9rZW5zMiBmcm9tIDUtdHVwbGVzCisgICAgICAgIGJ5dGVzX2Zyb201ID0gdW50b2tlbml6ZSh0b2tlbnM1KQorICAgICAgICByZWFkbGluZTUgPSBpdGVyKGJ5dGVzX2Zyb201LnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkpLl9fbmV4dF9fCisgICAgICAgIHRva2VuczJfZnJvbTUgPSBbdG9rWzoyXSBmb3IgdG9rIGluIHRva2VuaXplKHJlYWRsaW5lNSldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodG9rZW5zMl9mcm9tNSwgdG9rZW5zMikKKworICAgIGRlZiB0ZXN0X3JvdW5kdHJpcChzZWxmKToKKyAgICAgICAgIyBUaGVyZSBhcmUgc29tZSBzdGFuZGFyZCBmb3JtYXR0aW5nIHByYWN0aWNlcyB0aGF0IGFyZSBlYXN5IHRvIGdldCByaWdodC4KKworICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiaWYgeCA9PSAxOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHByaW50KHgpXG4iKQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiIyBUaGlzIGlzIGEgY29tbWVudFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIyBUaGlzIGFsc28iKQorCisgICAgICAgICMgU29tZSBwZW9wbGUgdXNlIGRpZmZlcmVudCBmb3JtYXR0aW5nIGNvbnZlbnRpb25zLCB3aGljaCBtYWtlcworICAgICAgICAjIHVudG9rZW5pemUgYSBsaXR0bGUgdHJpY2tpZXIuIE5vdGUgdGhhdCB0aGlzIHRlc3QgaW52b2x2ZXMgdHJhaWxpbmcKKyAgICAgICAgIyB3aGl0ZXNwYWNlIGFmdGVyIHRoZSBjb2xvbi4gTm90ZSB0aGF0IHdlIHVzZSBoZXggZXNjYXBlcyB0byBtYWtlIHRoZQorICAgICAgICAjIHR3byB0cmFpbGluZyBibGFua3MgYXBwYXJlbnQgaW4gdGhlIGV4cGVjdGVkIG91dHB1dC4KKworICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgiaWYgeCA9PSAxIDogXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHByaW50KHgpXG4iKQorICAgICAgICBmbiA9IHN1cHBvcnQuZmluZGZpbGUoInRva2VuaXplX3Rlc3RzLnR4dCIpCisgICAgICAgIHdpdGggb3BlbihmbiwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKGYpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJpZiB4ID09IDE6XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIyBBIGNvbW1lbnQgYnkgaXRzZWxmLlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHByaW50KHgpICMgQ29tbWVudCBoZXJlLCB0b28uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIyBBbm90aGVyIGNvbW1lbnQuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhZnRlcl9pZiA9IFRydWVcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJpZiAoeCAjIFRoZSBjb21tZW50cyBuZWVkIHRvIGdvIGluIHRoZSByaWdodCBwbGFjZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgID09IDEpOlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIHByaW50KCd4PT0xJylcbiIpCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJjbGFzcyBUZXN0OiAjIEEgY29tbWVudCBoZXJlXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICMgQSBjb21tZW50IHdpdGggd2VpcmQgaW5kZW50XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIGFmdGVyX2NvbSA9IDVcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZGVmIHgobSk6IHJldHVybiBtKjUgIyBhIG9uZSBsaW5lclxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBkZWYgeShtKTogIyBBIHdoaXRlc3BhY2UgYWZ0ZXIgdGhlIGNvbG9uXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIHJldHVybiB5KjQgIyAzLXNwYWNlIGluZGVudFxuIikKKworICAgICAgICAjIFNvbWUgZXJyb3ItaGFuZGxpbmcgY29kZQorICAgICAgICBzZWxmLmNoZWNrX3JvdW5kdHJpcCgidHJ5OiBpbXBvcnQgc29tZW1vZHVsZVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0IEltcG9ydEVycm9yOiAjIGNvbW1lbnRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBwcmludCgnQ2FuIG5vdCBpbXBvcnQnICMgY29tbWVudDJcbikiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbHNlOiAgIHByaW50KCdMb2FkZWQnKVxuIikKKworICAgIGRlZiB0ZXN0X2NvbnRpbnVhdGlvbihzZWxmKToKKyAgICAgICAgIyBCYWxhbmNpbmcgY29udGludWF0aW9uCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCJhID0gKDMsNCwgXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1LDYpXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ5ID0gWzMsIDQsXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI1XVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieiA9IHsnYSc6IDUsXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInYic6MTUsICdjJzpUcnVlfVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieCA9IGxlbih5KSArIDUgLSBhW1xuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiM10gLSBhWzJdXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIrIGxlbih6KSAtIHpbXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICInYiddXG4iKQorCisgICAgZGVmIHRlc3RfYmFja3NsYXNoX2NvbnRpbnVhdGlvbihzZWxmKToKKyAgICAgICAgIyBCYWNrc2xhc2ggbWVhbnMgbGluZSBjb250aW51YXRpb24sIGV4Y2VwdCBmb3IgY29tbWVudHMKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIng9MStcXFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMVxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIyBUaGlzIGlzIGEgY29tbWVudFxcXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjIFRoaXMgYWxzb1xuIikKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoIiMgQ29tbWVudCBcXFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieCA9IDAiKQorCisgICAgZGVmIHRlc3Rfc3RyaW5nX2NvbmNhdGVuYXRpb24oc2VsZik6CisgICAgICAgICMgVHdvIHN0cmluZyBsaXRlcmFscyBvbiB0aGUgc2FtZSBsaW5lCisgICAgICAgIHNlbGYuY2hlY2tfcm91bmR0cmlwKCInJyAnJyIpCisKKyAgICBkZWYgdGVzdF9yYW5kb21fZmlsZXMoc2VsZik6CisgICAgICAgICMgVGVzdCByb3VuZHRyaXAgb24gcmFuZG9tIHB5dGhvbiBtb2R1bGVzLgorICAgICAgICAjIHBhc3MgdGhlICctdWNwdScgb3B0aW9uIHRvIHByb2Nlc3MgdGhlIGZ1bGwgZGlyZWN0b3J5LgorCisgICAgICAgIGltcG9ydCBnbG9iLCByYW5kb20KKyAgICAgICAgZm4gPSBzdXBwb3J0LmZpbmRmaWxlKCJ0b2tlbml6ZV90ZXN0cy50eHQiKQorICAgICAgICB0ZW1wZGlyID0gb3MucGF0aC5kaXJuYW1lKGZuKSBvciBvcy5jdXJkaXIKKyAgICAgICAgdGVzdGZpbGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbih0ZW1wZGlyLCAidGVzdCoucHkiKSkKKworICAgICAgICAjIFRva2VuaXplIGlzIGJyb2tlbiBvbiB0ZXN0X3BlcDMxMzEucHkgYmVjYXVzZSByZWd1bGFyIGV4cHJlc3Npb25zIGFyZQorICAgICAgICAjIGJyb2tlbiBvbiB0aGUgb2JzY3VyZSB1bmljb2RlIGlkZW50aWZpZXJzIGluIGl0LiAqc2lnaCoKKyAgICAgICAgIyBXaXRoIHJvdW5kdHJpcCBleHRlbmRlZCB0byB0ZXN0IHRoZSA1LXR1cGxlIG1vZGUgb2YgIHVudG9rZW5pemUsCisgICAgICAgICMgNyBtb3JlIHRlc3RmaWxlcyBmYWlsLiAgUmVtb3ZlIHRoZW0gYWxzbyB1bnRpbCB0aGUgZmFpbHVyZSBpcyBkaWFnbm9zZWQuCisKKyAgICAgICAgdGVzdGZpbGVzLnJlbW92ZShvcy5wYXRoLmpvaW4odGVtcGRpciwgInRlc3RfcGVwMzEzMS5weSIpKQorICAgICAgICBmb3IgZiBpbiAoJ2J1ZmZlcicsICdidWlsdGluJywgJ2ZpbGVpbycsICdpbnNwZWN0JywgJ29zJywgJ3BsYXRmb3JtJywgJ3N5cycpOgorICAgICAgICAgICAgdGVzdGZpbGVzLnJlbW92ZShvcy5wYXRoLmpvaW4odGVtcGRpciwgInRlc3RfJXMucHkiKSAlIGYpCisKKyAgICAgICAgaWYgbm90IHN1cHBvcnQuaXNfcmVzb3VyY2VfZW5hYmxlZCgiY3B1Iik6CisgICAgICAgICAgICB0ZXN0ZmlsZXMgPSByYW5kb20uc2FtcGxlKHRlc3RmaWxlcywgMTApCisKKyAgICAgICAgZm9yIHRlc3RmaWxlIGluIHRlc3RmaWxlczoKKyAgICAgICAgICAgIHdpdGggb3Blbih0ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmaWxlPXRlc3RmaWxlKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoZikKKworCisgICAgZGVmIHJvdW5kdHJpcChzZWxmLCBjb2RlKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShjb2RlLCBzdHIpOgorICAgICAgICAgICAgY29kZSA9IGNvZGUuZW5jb2RlKCd1dGYtOCcpCisgICAgICAgIHJldHVybiB1bnRva2VuaXplKHRva2VuaXplKEJ5dGVzSU8oY29kZSkucmVhZGxpbmUpKS5kZWNvZGUoJ3V0Zi04JykKKworICAgIGRlZiB0ZXN0X2luZGVudGF0aW9uX3NlbWFudGljc19yZXRhaW5lZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIEVuc3VyZSB0aGF0IGFsdGhvdWdoIHdoaXRlc3BhY2UgbWlnaHQgYmUgbXV0YXRlZCBpbiBhIHJvdW5kdHJpcCwKKyAgICAgICAgdGhlIHNlbWFudGljIG1lYW5pbmcgb2YgdGhlIGluZGVudGF0aW9uIHJlbWFpbnMgY29uc2lzdGVudC4KKyAgICAgICAgIiIiCisgICAgICAgIGNvZGUgPSAiaWYgRmFsc2U6XG5cdHg9M1xuXHR4PTNcbiIKKyAgICAgICAgY29kZWxpbmVzID0gc2VsZi5yb3VuZHRyaXAoY29kZSkuc3BsaXQoJ1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2RlbGluZXNbMV0sIGNvZGVsaW5lc1syXSkKKyAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoY29kZSkKKwogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL19faW5pdF9fLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNGM4NzI2Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy9fX2luaXRfXy5weQpAQCAtMCwwICsxLDI1IEBACisiIiJTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBzY3JpcHRzIGluIHRoZSBUb29scyBkaXJlY3RvcnkuIiIiCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IGltcG9ydGxpYgorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIGZubWF0Y2ggaW1wb3J0IGZubWF0Y2gKKworYmFzZXBhdGggPSBvcy5wYXRoLmRpcm5hbWUoICAgICAgICAgICAgICAgICAjIDxzcmMvaW5zdGFsbCBkaXI+CisgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKCAgICAgICAgICAgICAgICAjIExpYgorICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmRpcm5hbWUoICAgICAgICAgICAgICAgICMgdGVzdAorICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpKSAgICAjIHRlc3RfdG9vbHMKKwordG9vbHNkaXIgPSBvcy5wYXRoLmpvaW4oYmFzZXBhdGgsICdUb29scycpCitzY3JpcHRzZGlyID0gb3MucGF0aC5qb2luKHRvb2xzZGlyLCAnc2NyaXB0cycpCisKK2RlZiBza2lwX2lmX21pc3NpbmcoKToKKyAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzY3JpcHRzZGlyKToKKyAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NjcmlwdHMgZGlyZWN0b3J5IGNvdWxkIG5vdCBiZSBmb3VuZCcpCisKK2RlZiBpbXBvcnRfdG9vbCh0b29sbmFtZSk6CisgICAgd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgoc2NyaXB0c2Rpcik6CisgICAgICAgIHJldHVybiBpbXBvcnRsaWIuaW1wb3J0X21vZHVsZSh0b29sbmFtZSkKKworZGVmIGxvYWRfdGVzdHMoKmFyZ3MpOgorICAgIHJldHVybiBzdXBwb3J0LmxvYWRfcGFja2FnZV90ZXN0cyhvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAqYXJncykKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvX19tYWluX18ucHkgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL19fbWFpbl9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2ZjEzZTUKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsNCBAQAorZnJvbSB0ZXN0LnRlc3RfdG9vbHMgaW1wb3J0IGxvYWRfdGVzdHMKK2ltcG9ydCB1bml0dGVzdAorCit1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9ncHJvZjJodG1sLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X2dwcm9mMmh0bWwucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ1YTJhOAotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9ncHJvZjJodG1sLnB5CkBAIC0wLDAgKzEsMzYgQEAKKyIiIlRlc3RzIGZvciB0aGUgZ3Byb2YyaHRtbCBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgaW1wb3J0bGliCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKK2ltcG9ydCB0ZW1wZmlsZQorCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2Rpciwgc2tpcF9pZl9taXNzaW5nLCBpbXBvcnRfdG9vbAorCitza2lwX2lmX21pc3NpbmcoKQorCitjbGFzcyBHcHJvZjJodG1sVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmdwcm9mID0gaW1wb3J0X3Rvb2woJ2dwcm9mMmh0bWwnKQorICAgICAgICBvbGRhcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgZGVmIGZpeHVwKCk6CisgICAgICAgICAgICBzeXMuYXJndiA9IG9sZGFyZ3YKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGZpeHVwKQorICAgICAgICBzeXMuYXJndiA9IFtdCisKKyAgICBkZWYgdGVzdF9ncHJvZihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ1MDg6IHRoaXMgdXNlZCB0byBmYWlsIHdpdGggYW4gTmFtZUVycm9yLgorICAgICAgICB3aXRoIG1vY2sucGF0Y2gub2JqZWN0KHNlbGYuZ3Byb2YsICd3ZWJicm93c2VyJykgYXMgd21vY2ssIFwKKyAgICAgICAgICAgICAgICB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkoKSBhcyB0bXBkaXI6CisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbih0bXBkaXIsICdhYmMnKQorICAgICAgICAgICAgb3BlbihmbiwgJ3cnKS5jbG9zZSgpCisgICAgICAgICAgICBzeXMuYXJndiA9IFsnZ3Byb2YyaHRtbCcsIGZuXQorICAgICAgICAgICAgc2VsZi5ncHJvZi5tYWluKCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdtb2NrLm9wZW4uY2FsbGVkKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfbWQ1c3VtLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X21kNXN1bS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OWVhMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X21kNXN1bS5weQpAQCAtMCwwICsxLDc3IEBACisiIiJUZXN0cyBmb3IgdGhlIG1kNXN1bSBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIGFzc2VydF9weXRob25fZmFpbHVyZQorCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2RpciwgaW1wb3J0X3Rvb2wsIHNraXBfaWZfbWlzc2luZworCitza2lwX2lmX21pc3NpbmcoKQorCitjbGFzcyBNRDVTdW1UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLnNjcmlwdCA9IG9zLnBhdGguam9pbihzY3JpcHRzZGlyLCAnbWQ1c3VtLnB5JykKKyAgICAgICAgb3MubWtkaXIoc3VwcG9ydC5URVNURk4pCisgICAgICAgIGNscy5mb2RkZXIgPSBvcy5wYXRoLmpvaW4oc3VwcG9ydC5URVNURk4sICdtZDVzdW0uZm9kZGVyJykKKyAgICAgICAgd2l0aCBvcGVuKGNscy5mb2RkZXIsICd3YicpIGFzIGY6CisgICAgICAgICAgICBmLndyaXRlKGInbWQ1c3VtXHJcbnRlc3QgZmlsZVxyXG4nKQorICAgICAgICBjbHMuZm9kZGVyX21kNSA9IGInZDM4ZGFlMmViMWFiMzQ2YTI5MmVmNjg1MGY5ZTFhMGQnCisgICAgICAgIGNscy5mb2RkZXJfdGV4dG1vZGVfbWQ1ID0gYidhOGIwNzg5NGUyY2EzZjJhNGMzMDk0MDY1ZmE2ZTBhNScKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiB0ZWFyRG93bkNsYXNzKGNscyk6CisgICAgICAgIHN1cHBvcnQucm10cmVlKHN1cHBvcnQuVEVTVEZOKQorCisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgICAgICBvdXQuc3RhcnRzd2l0aChiJ2Q0MWQ4Y2Q5OGYwMGIyMDRlOTgwMDk5OGVjZjg0MjdlIDxzdGRpbj4nKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShlcnIpCisKKyAgICBkZWYgdGVzdF9jaGVja3N1bV9mb2RkZXIoc2VsZik6CisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soc2VsZi5zY3JpcHQsIHNlbGYuZm9kZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICBzZWxmLmFzc2VydFRydWUob3V0LnN0YXJ0c3dpdGgoc2VsZi5mb2RkZXJfbWQ1KSkKKyAgICAgICAgZm9yIHBhcnQgaW4gc2VsZi5mb2RkZXIuc3BsaXQob3MucGF0aC5zZXApOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJ0LmVuY29kZSgpLCBvdXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZXJyKQorCisgICAgZGVmIHRlc3RfZGFzaF9sKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLWwnLCBzZWxmLmZvZGRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyYywgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihzZWxmLmZvZGRlcl9tZDUsIG91dCkKKyAgICAgICAgcGFydHMgPSBzZWxmLmZvZGRlci5zcGxpdChvcy5wYXRoLnNlcCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihwYXJ0c1stMV0uZW5jb2RlKCksIG91dCkKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbihwYXJ0c1stMl0uZW5jb2RlKCksIG91dCkKKworICAgIGRlZiB0ZXN0X2Rhc2hfdChzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgJy10Jywgc2VsZi5mb2RkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvdXQuc3RhcnRzd2l0aChzZWxmLmZvZGRlcl90ZXh0bW9kZV9tZDUpKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKHNlbGYuZm9kZGVyX21kNSwgb3V0KQorCisgICAgZGVmIHRlc3RfZGFzaF9zKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLXMnLCAnNTEyJywgc2VsZi5mb2RkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oc2VsZi5mb2RkZXJfbWQ1LCBvdXQpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZV9maWxlcyhzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgc2VsZi5mb2RkZXIsIHNlbGYuZm9kZGVyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJjLCAwKQorICAgICAgICBsaW5lcyA9IG91dC5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4obGluZXMpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCpsaW5lcykKKworICAgIGRlZiB0ZXN0X3VzYWdlKHNlbGYpOgorICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoc2VsZi5zY3JpcHQsICctaCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmMsIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlcihlcnIsIGInJykKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3BkZXBzLnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3BkZXBzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MWZhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcGRlcHMucHkKQEAgLTAsMCArMSwzNCBAQAorIiIiVGVzdHMgZm9yIHRoZSBwZGVwcyBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0ZW1wZmlsZQorZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CisKK2Zyb20gdGVzdC50ZXN0X3Rvb2xzIGltcG9ydCBzY3JpcHRzZGlyLCBza2lwX2lmX21pc3NpbmcsIGltcG9ydF90b29sCisKK3NraXBfaWZfbWlzc2luZygpCisKKworY2xhc3MgUGRlcHNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhzZWxmKToKKyAgICAgICAgc2VsZi5wZGVwcyA9IGltcG9ydF90b29sKCdwZGVwcycpCisKKyAgICBkZWYgdGVzdF9wcm9jZXNzX2Vycm9ycyhzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTQ0OTI6IG1faW1wb3J0Lm1hdGNoKGxpbmUpIGNhbiBiZSBOb25lLgorICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIHRtcGRpcjoKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHRtcGRpciwgJ2ZvbycpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICd3JykgYXMgc3RyZWFtOgorICAgICAgICAgICAgICAgIHN0cmVhbS53cml0ZSgiIyEvdGhpcy93aWxsL2ZhaWwiKQorICAgICAgICAgICAgc2VsZi5wZGVwcy5wcm9jZXNzKGZuLCB7fSkKKworICAgIGRlZiB0ZXN0X2ludmVyc2VfYXR0cmlidXRlX2Vycm9yKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNDQ5MjogdGhpcyB1c2VkIHRvIGZhaWwgd2l0aCBhbiBBdHRyaWJ1dGVFcnJvci4KKyAgICAgICAgc2VsZi5wZGVwcy5pbnZlcnNlKHsnYSc6IFtdfSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90b29scy5weSBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9waW5kZW50LnB5CnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIExpYi90ZXN0L3Rlc3RfdG9vbHMucHkKcmVuYW1lIHRvIExpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9waW5kZW50LnB5CmluZGV4IGY5NzE1MTUuLjE0YTBhYTIgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdG9vbHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3BpbmRlbnQucHkKQEAgLTEsNDIgKzEsMTYgQEAKLSIiIlRlc3RzIGZvciBzY3JpcHRzIGluIHRoZSBUb29scyBkaXJlY3RvcnkuCi0KLVRoaXMgZmlsZSBjb250YWlucyByZWdyZXNzaW9uIHRlc3RzIGZvciBzb21lIG9mIHRoZSBzY3JpcHRzIGZvdW5kIGluIHRoZQotVG9vbHMgZGlyZWN0b3J5IG9mIGEgUHl0aG9uIGNoZWNrb3V0IG9yIHRhcmJhbGwsIHN1Y2ggYXMgcmVpbmRlbnQucHkuCi0iIiIKKyIiIlRlc3RzIGZvciB0aGUgcGluZGVudCBzY3JpcHQgaW4gdGhlIFRvb2xzIGRpcmVjdG9yeS4iIiIKIAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCi1pbXBvcnQgaW1wb3J0bGliLm1hY2hpbmVyeQogaW1wb3J0IHVuaXR0ZXN0Ci1mcm9tIHVuaXR0ZXN0IGltcG9ydCBtb2NrCi1pbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3VicHJvY2VzcwotaW1wb3J0IHN5c2NvbmZpZwotaW1wb3J0IHRlbXBmaWxlCiBpbXBvcnQgdGV4dHdyYXAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAotZnJvbSB0ZXN0LnNjcmlwdF9oZWxwZXIgaW1wb3J0IGFzc2VydF9weXRob25fb2ssIHRlbXBfZGlyCitmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vawogCi1pZiBub3Qgc3lzY29uZmlnLmlzX3B5dGhvbl9idWlsZCgpOgotICAgICMgWFhYIHNvbWUgaW5zdGFsbGVycyBkbyBjb250YWluIHRoZSB0b29scywgc2hvdWxkIHdlIGRldGVjdCB0aGF0Ci0gICAgIyBhbmQgcnVuIHRoZSB0ZXN0cyBpbiB0aGF0IGNhc2UgdG9vPwotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCd0ZXN0IGlycmVsZXZhbnQgZm9yIGFuIGluc3RhbGxlZCBQeXRob24nKQorZnJvbSB0ZXN0LnRlc3RfdG9vbHMgaW1wb3J0IHNjcmlwdHNkaXIsIHNraXBfaWZfbWlzc2luZwogCi1iYXNlcGF0aCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICdUb29scycpCi1zY3JpcHRzZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCAnc2NyaXB0cycpCi0KLQotY2xhc3MgUmVpbmRlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0gICAgc2NyaXB0ID0gb3MucGF0aC5qb2luKHNjcmlwdHNkaXIsICdyZWluZGVudC5weScpCi0KLSAgICBkZWYgdGVzdF9ub2FyZ3Moc2VsZik6Ci0gICAgICAgIGFzc2VydF9weXRob25fb2soc2VsZi5zY3JpcHQpCi0KLSAgICBkZWYgdGVzdF9oZWxwKHNlbGYpOgotICAgICAgICByYywgb3V0LCBlcnIgPSBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0LCAnLWgnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dCwgYicnKQotICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoZXJyLCBiJycpCitza2lwX2lmX21pc3NpbmcoKQogCiAKIGNsYXNzIFBpbmRlbnRUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC02MCw3ICszNCw3IEBACiAKICAgICBkZWYgdGVzdF9zZWxmdGVzdChzZWxmKToKICAgICAgICAgc2VsZi5tYXhEaWZmID0gTm9uZQotICAgICAgICB3aXRoIHRlbXBfZGlyKCkgYXMgZGlyZWN0b3J5OgorICAgICAgICB3aXRoIHN1cHBvcnQudGVtcF9kaXIoKSBhcyBkaXJlY3Rvcnk6CiAgICAgICAgICAgICBkYXRhX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyZWN0b3J5LCAnX3Rlc3QucHknKQogICAgICAgICAgICAgd2l0aCBvcGVuKHNlbGYuc2NyaXB0KSBhcyBmOgogICAgICAgICAgICAgICAgIGNsb3NlZCA9IGYucmVhZCgpCkBAIC0zNjEsMTA0ICszMzUsNSBAQAogICAgICAgICBzZWxmLnBpbmRlbnRfdGVzdChjbGVhbiwgY2xvc2VkKQogCiAKLWNsYXNzIFRlc3RTdW5kcnlTY3JpcHRzKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICAjIEF0IGxlYXN0IG1ha2Ugc3VyZSB0aGUgcmVzdCBkb24ndCBoYXZlIHN5bnRheCBlcnJvcnMuICBXaGVuIHRlc3RzIGFyZQotICAgICMgYWRkZWQgZm9yIGEgc2NyaXB0IGl0IHNob3VsZCBiZSBhZGRlZCB0byB0aGUgd2hpdGVsaXN0IGJlbG93LgotCi0gICAgIyBzY3JpcHRzIHRoYXQgaGF2ZSBpbmRlcGVuZGVudCB0ZXN0cy4KLSAgICB3aGl0ZWxpc3QgPSBbJ3JlaW5kZW50LnB5JywgJ3BkZXBzLnB5JywgJ2dwcm9mMmh0bWwnXQotICAgICMgc2NyaXB0cyB0aGF0IGNhbid0IGJlIGltcG9ydGVkIHdpdGhvdXQgcnVubmluZwotICAgIGJsYWNrbGlzdCA9IFsnbWFrZV9jdHlwZS5weSddCi0gICAgIyBzY3JpcHRzIHRoYXQgdXNlIHdpbmRvd3Mtb25seSBtb2R1bGVzCi0gICAgd2luZG93c19vbmx5ID0gWyd3aW5fYWRkMnBhdGgucHknXQotICAgICMgYmxhY2tsaXN0ZWQgZm9yIG90aGVyIHJlYXNvbnMKLSAgICBvdGhlciA9IFsnYW5hbHl6ZV9keHAucHknXQotCi0gICAgc2tpcGxpc3QgPSBibGFja2xpc3QgKyB3aGl0ZWxpc3QgKyB3aW5kb3dzX29ubHkgKyBvdGhlcgotCi0gICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBjbSA9IHN1cHBvcnQuRGlyc09uU3lzUGF0aChzY3JpcHRzZGlyKQotICAgICAgICBjbS5fX2VudGVyX18oKQotICAgICAgICBzZWxmLmFkZENsZWFudXAoY20uX19leGl0X18pCi0KLSAgICBkZWYgdGVzdF9zdW5kcnkoc2VsZik6Ci0gICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHNjcmlwdHNkaXIpOgotICAgICAgICAgICAgaWYgZm4uZW5kc3dpdGgoJy5weScpIGFuZCBmbiBub3QgaW4gc2VsZi5za2lwbGlzdDoKLSAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKGZuWzotM10pCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wbGF0Zm9ybSAhPSAid2luMzIiLCAiV2luZG93cy1vbmx5IHRlc3QiKQotICAgIGRlZiB0ZXN0X3N1bmRyeV93aW5kb3dzKHNlbGYpOgotICAgICAgICBmb3IgZm4gaW4gc2VsZi53aW5kb3dzX29ubHk6Ci0gICAgICAgICAgICBfX2ltcG9ydF9fKGZuWzotM10pCi0KLSAgICBAdW5pdHRlc3Quc2tpcElmKG5vdCBzdXBwb3J0LnRocmVhZGluZywgInRlc3QgcmVxdWlyZXMgX3RocmVhZCBtb2R1bGUiKQotICAgIGRlZiB0ZXN0X2FuYWx5emVfZHhwX2ltcG9ydChzZWxmKToKLSAgICAgICAgaWYgaGFzYXR0cihzeXMsICdnZXRkeHAnKToKLSAgICAgICAgICAgIGltcG9ydCBhbmFseXplX2R4cAotICAgICAgICBlbHNlOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgotICAgICAgICAgICAgICAgIGltcG9ydCBhbmFseXplX2R4cAotCi0KLWNsYXNzIFBkZXBzVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHNldFVwQ2xhc3Moc2VsZik6Ci0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2NyaXB0c2RpciwgJ3BkZXBzLnB5JykKLSAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5Tb3VyY2VGaWxlTG9hZGVyKCdwZGVwcycsIHBhdGgpCi0gICAgICAgIHNlbGYucGRlcHMgPSBsb2FkZXIubG9hZF9tb2R1bGUoKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIHRlYXJEb3duQ2xhc3Moc2VsZik6Ci0gICAgICAgIGlmICdwZGVwcycgaW4gc3lzLm1vZHVsZXM6Ci0gICAgICAgICAgICBkZWwgc3lzLm1vZHVsZXNbJ3BkZXBzJ10KLQotICAgIGRlZiB0ZXN0X3Byb2Nlc3NfZXJyb3JzKHNlbGYpOgotICAgICAgICAjIElzc3VlICMxNDQ5MjogbV9pbXBvcnQubWF0Y2gobGluZSkgY2FuIGJlIE5vbmUuCi0gICAgICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZGlyOgotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnZm9vJykKLSAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3cnKSBhcyBzdHJlYW06Ci0gICAgICAgICAgICAgICAgc3RyZWFtLndyaXRlKCIjIS90aGlzL3dpbGwvZmFpbCIpCi0gICAgICAgICAgICBzZWxmLnBkZXBzLnByb2Nlc3MoZm4sIHt9KQotCi0gICAgZGVmIHRlc3RfaW52ZXJzZV9hdHRyaWJ1dGVfZXJyb3Ioc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NDkyOiB0aGlzIHVzZWQgdG8gZmFpbCB3aXRoIGFuIEF0dHJpYnV0ZUVycm9yLgotICAgICAgICBzZWxmLnBkZXBzLmludmVyc2UoeydhJzogW119KQotCi0KLWNsYXNzIEdwcm9mMmh0bWxUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4oc2NyaXB0c2RpciwgJ2dwcm9mMmh0bWwucHknKQotICAgICAgICBsb2FkZXIgPSBpbXBvcnRsaWIubWFjaGluZXJ5LlNvdXJjZUZpbGVMb2FkZXIoJ2dwcm9mMmh0bWwnLCBwYXRoKQotICAgICAgICBzZWxmLmdwcm9mID0gbG9hZGVyLmxvYWRfbW9kdWxlKCkKLSAgICAgICAgb2xkYXJndiA9IHN5cy5hcmd2Ci0gICAgICAgIGRlZiBmaXh1cCgpOgotICAgICAgICAgICAgc3lzLmFyZ3YgPSBvbGRhcmd2Ci0gICAgICAgIHNlbGYuYWRkQ2xlYW51cChmaXh1cCkKLSAgICAgICAgc3lzLmFyZ3YgPSBbXQotCi0gICAgZGVmIHRlc3RfZ3Byb2Yoc2VsZik6Ci0gICAgICAgICMgSXNzdWUgIzE0NTA4OiB0aGlzIHVzZWQgdG8gZmFpbCB3aXRoIGFuIE5hbWVFcnJvci4KLSAgICAgICAgd2l0aCBtb2NrLnBhdGNoLm9iamVjdChzZWxmLmdwcm9mLCAnd2ViYnJvd3NlcicpIGFzIHdtb2NrLCBcCi0gICAgICAgICAgICAgICAgdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KCkgYXMgdG1wZGlyOgotICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4odG1wZGlyLCAnYWJjJykKLSAgICAgICAgICAgIG9wZW4oZm4sICd3JykuY2xvc2UoKQotICAgICAgICAgICAgc3lzLmFyZ3YgPSBbJ2dwcm9mMmh0bWwnLCBmbl0KLSAgICAgICAgICAgIHNlbGYuZ3Byb2YubWFpbigpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh3bW9jay5vcGVuLmNhbGxlZCkKLQotCi0jIFJ1biB0aGUgdGVzdHMgaW4gVG9vbHMvcGFyc2VyL3Rlc3RfdW5wYXJzZS5weQotd2l0aCBzdXBwb3J0LkRpcnNPblN5c1BhdGgob3MucGF0aC5qb2luKGJhc2VwYXRoLCAncGFyc2VyJykpOgotICAgIGZyb20gdGVzdF91bnBhcnNlIGltcG9ydCBVbnBhcnNlVGVzdENhc2UKLSAgICBmcm9tIHRlc3RfdW5wYXJzZSBpbXBvcnQgRGlyZWN0b3J5VGVzdENhc2UKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKltvYmogZm9yIG9iaiBpbiBnbG9iYWxzKCkudmFsdWVzKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG9iaiwgdHlwZSldKQotCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcmVpbmRlbnQucHkgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfcmVpbmRlbnQucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjZWJmNwotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF9yZWluZGVudC5weQpAQCAtMCwwICsxLDI4IEBACisiIiJUZXN0cyBmb3Igc2NyaXB0cyBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCitUaGlzIGZpbGUgY29udGFpbnMgcmVncmVzc2lvbiB0ZXN0cyBmb3Igc29tZSBvZiB0aGUgc2NyaXB0cyBmb3VuZCBpbiB0aGUKK1Rvb2xzIGRpcmVjdG9yeSBvZiBhIFB5dGhvbiBjaGVja291dCBvciB0YXJiYWxsLCBzdWNoIGFzIHJlaW5kZW50LnB5LgorIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHRlc3Quc2NyaXB0X2hlbHBlciBpbXBvcnQgYXNzZXJ0X3B5dGhvbl9vaworCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2Rpciwgc2tpcF9pZl9taXNzaW5nCisKK3NraXBfaWZfbWlzc2luZygpCisKK2NsYXNzIFJlaW5kZW50VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHNjcmlwdCA9IG9zLnBhdGguam9pbihzY3JpcHRzZGlyLCAncmVpbmRlbnQucHknKQorCisgICAgZGVmIHRlc3Rfbm9hcmdzKHNlbGYpOgorICAgICAgICBhc3NlcnRfcHl0aG9uX29rKHNlbGYuc2NyaXB0KQorCisgICAgZGVmIHRlc3RfaGVscChzZWxmKToKKyAgICAgICAgcmMsIG91dCwgZXJyID0gYXNzZXJ0X3B5dGhvbl9vayhzZWxmLnNjcmlwdCwgJy1oJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyKGVyciwgYicnKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3Rfc3VuZHJ5LnB5IGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3N1bmRyeS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWU1NDFiCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90b29scy90ZXN0X3N1bmRyeS5weQpAQCAtMCwwICsxLDUzIEBACisiIiJUZXN0cyBmb3Igc2NyaXB0cyBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCitUaGlzIGZpbGUgY29udGFpbnMgZXh0cmVtZWx5IGJhc2ljIHJlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBzY3JpcHRzIGZvdW5kIGluCit0aGUgVG9vbHMgZGlyZWN0b3J5IG9mIGEgUHl0aG9uIGNoZWNrb3V0IG9yIHRhcmJhbGwgd2hpY2ggZG9uJ3QgaGF2ZSBzZXBhcmF0ZQordGVzdHMgb2YgdGhlaXIgb3duLCBzdWNoIGFzIGgycHkucHkuCisiIiIKKworaW1wb3J0IG9zCitpbXBvcnQgc3lzCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorCitmcm9tIHRlc3QudGVzdF90b29scyBpbXBvcnQgc2NyaXB0c2RpciwgaW1wb3J0X3Rvb2wsIHNraXBfaWZfbWlzc2luZworCitza2lwX2lmX21pc3NpbmcoKQorCitjbGFzcyBUZXN0U3VuZHJ5U2NyaXB0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIyBBdCBsZWFzdCBtYWtlIHN1cmUgdGhlIHJlc3QgZG9uJ3QgaGF2ZSBzeW50YXggZXJyb3JzLiAgV2hlbiB0ZXN0cyBhcmUKKyAgICAjIGFkZGVkIGZvciBhIHNjcmlwdCBpdCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHdoaXRlbGlzdCBiZWxvdy4KKworICAgICMgc2NyaXB0cyB0aGF0IGhhdmUgaW5kZXBlbmRlbnQgdGVzdHMuCisgICAgd2hpdGVsaXN0ID0gWydyZWluZGVudCcsICdwZGVwcycsICdncHJvZjJodG1sJywgJ21kNXN1bSddCisgICAgIyBzY3JpcHRzIHRoYXQgY2FuJ3QgYmUgaW1wb3J0ZWQgd2l0aG91dCBydW5uaW5nCisgICAgYmxhY2tsaXN0ID0gWydtYWtlX2N0eXBlJ10KKyAgICAjIHNjcmlwdHMgdGhhdCB1c2Ugd2luZG93cy1vbmx5IG1vZHVsZXMKKyAgICB3aW5kb3dzX29ubHkgPSBbJ3dpbl9hZGQycGF0aCddCisgICAgIyBibGFja2xpc3RlZCBmb3Igb3RoZXIgcmVhc29ucworICAgIG90aGVyID0gWydhbmFseXplX2R4cCddCisKKyAgICBza2lwbGlzdCA9IGJsYWNrbGlzdCArIHdoaXRlbGlzdCArIHdpbmRvd3Nfb25seSArIG90aGVyCisKKyAgICBkZWYgdGVzdF9zdW5kcnkoc2VsZik6CisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHNjcmlwdHNkaXIpOgorICAgICAgICAgICAgbmFtZSA9IGZuWzotM10KKyAgICAgICAgICAgIGlmIGZuLmVuZHN3aXRoKCcucHknKSBhbmQgbmFtZSBub3QgaW4gc2VsZi5za2lwbGlzdDoKKyAgICAgICAgICAgICAgICBpbXBvcnRfdG9vbChuYW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gIT0gIndpbjMyIiwgIldpbmRvd3Mtb25seSB0ZXN0IikKKyAgICBkZWYgdGVzdF9zdW5kcnlfd2luZG93cyhzZWxmKToKKyAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi53aW5kb3dzX29ubHk6CisgICAgICAgICAgICBpbXBvcnRfdG9vbChuYW1lKQorCisgICAgQHVuaXR0ZXN0LnNraXBJZihub3Qgc3VwcG9ydC50aHJlYWRpbmcsICJ0ZXN0IHJlcXVpcmVzIF90aHJlYWQgbW9kdWxlIikKKyAgICBkZWYgdGVzdF9hbmFseXplX2R4cF9pbXBvcnQoc2VsZik6CisgICAgICAgIGlmIGhhc2F0dHIoc3lzLCAnZ2V0ZHhwJyk6CisgICAgICAgICAgICBpbXBvcnRfdG9vbCgnYW5hbHl6ZV9keHAnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIGltcG9ydF90b29sKCdhbmFseXplX2R4cCcpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3BhcnNlci90ZXN0X3VucGFyc2UucHkgYi9MaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfdW5wYXJzZS5weQpzaW1pbGFyaXR5IGluZGV4IDk0JQpyZW5hbWUgZnJvbSBUb29scy9wYXJzZXIvdGVzdF91bnBhcnNlLnB5CnJlbmFtZSB0byBMaWIvdGVzdC90ZXN0X3Rvb2xzL3Rlc3RfdW5wYXJzZS5weQppbmRleCBiZTg0NDAwLi45NzZhNmM1IDEwMDY0NAotLS0gYS9Ub29scy9wYXJzZXIvdGVzdF91bnBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdG9vbHMvdGVzdF91bnBhcnNlLnB5CkBAIC0xLDEyICsxLDIyIEBACisiIiJUZXN0cyBmb3IgdGhlIHVucGFyc2UucHkgc2NyaXB0IGluIHRoZSBUb29scy9wYXJzZXIgZGlyZWN0b3J5LiIiIgorCiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIGltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgcmFuZG9tCiBpbXBvcnQgdG9rZW5pemUKLWltcG9ydCB1bnBhcnNlCiBpbXBvcnQgYXN0CiAKK2Zyb20gdGVzdC50ZXN0X3Rvb2xzIGltcG9ydCBiYXNlcGF0aCwgdG9vbHNkaXIsIHNraXBfaWZfbWlzc2luZworCitza2lwX2lmX21pc3NpbmcoKQorCitwYXJzZXJfcGF0aCA9IG9zLnBhdGguam9pbih0b29sc2RpciwgInBhcnNlciIpCisKK3dpdGggdGVzdC5zdXBwb3J0LkRpcnNPblN5c1BhdGgocGFyc2VyX3BhdGgpOgorICAgIGltcG9ydCB1bnBhcnNlCisKIGRlZiByZWFkX3B5ZmlsZShmaWxlbmFtZSk6CiAgICAgIiIiUmVhZCBhbmQgcmV0dXJuIHRoZSBjb250ZW50cyBvZiBhIFB5dGhvbiBzb3VyY2UgZmlsZSAoYXMgYQogICAgIHN0cmluZyksIHRha2luZyBpbnRvIGFjY291bnQgdGhlIGZpbGUgZW5jb2RpbmcuIiIiCkBAIC0yNDksMTEgKzI1OSwxMCBAQAogCiAgICAgZGVmIHRlc3RfZmlsZXMoc2VsZik6CiAgICAgICAgICMgZ2V0IG5hbWVzIG9mIGZpbGVzIHRvIHRlc3QKLSAgICAgICAgZGlzdF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgb3MucGFyZGlyLCBvcy5wYXJkaXIpCiAKICAgICAgICAgbmFtZXMgPSBbXQogICAgICAgICBmb3IgZCBpbiBzZWxmLnRlc3RfZGlyZWN0b3JpZXM6Ci0gICAgICAgICAgICB0ZXN0X2RpciA9IG9zLnBhdGguam9pbihkaXN0X2RpciwgZCkKKyAgICAgICAgICAgIHRlc3RfZGlyID0gb3MucGF0aC5qb2luKGJhc2VwYXRoLCBkKQogICAgICAgICAgICAgZm9yIG4gaW4gb3MubGlzdGRpcih0ZXN0X2Rpcik6CiAgICAgICAgICAgICAgICAgaWYgbi5lbmRzd2l0aCgnLnB5JykgYW5kIG5vdCBuLnN0YXJ0c3dpdGgoJ2JhZCcpOgogICAgICAgICAgICAgICAgICAgICBuYW1lcy5hcHBlbmQob3MucGF0aC5qb2luKHRlc3RfZGlyLCBuKSkKQEAgLTI2OSw4ICsyNzgsNSBAQAogICAgICAgICAgICAgc2VsZi5jaGVja19yb3VuZHRyaXAoc291cmNlKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KFVucGFyc2VUZXN0Q2FzZSwgRGlyZWN0b3J5VGVzdENhc2UpCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkgYi9MaWIvdGVzdC90ZXN0X3RyYWNlLnB5CmluZGV4IDFjZWM3MTAuLmVlMzM5ODYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHJhY2UucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZS5weQpAQCAtMSw4ICsxLDcgQEAKIGltcG9ydCBvcwogaW1wb3J0IGlvCiBpbXBvcnQgc3lzCi1mcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKHJ1bl91bml0dGVzdCwgVEVTVEZOLCBybXRyZWUsIHVubGluaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXB0dXJlZF9zdGRvdXQpCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOLCBybXRyZWUsIHVubGluaywgY2FwdHVyZWRfc3Rkb3V0CiBpbXBvcnQgdW5pdHRlc3QKIAogaW1wb3J0IHRyYWNlCkBAIC0yOTcsNyArMjk2LDggQEAKICAgICAgICAgdW5saW5rKFRFU1RGTikKIAogICAgIGRlZiBfY292ZXJhZ2Uoc2VsZiwgdHJhY2VyLAotICAgICAgICAgICAgICAgICAgY21kPSdmcm9tIHRlc3QgaW1wb3J0IHRlc3RfcHByaW50OyB0ZXN0X3BwcmludC50ZXN0X21haW4oKScpOgorICAgICAgICAgICAgICAgICAgY21kPSdpbXBvcnQgdGVzdC5zdXBwb3J0LCB0ZXN0LnRlc3RfcHByaW50OycKKyAgICAgICAgICAgICAgICAgICAgICAndGVzdC5zdXBwb3J0LnJ1bl91bml0dGVzdCh0ZXN0LnRlc3RfcHByaW50LlF1ZXJ5VGVzdENhc2UpJyk6CiAgICAgICAgIHRyYWNlci5ydW4oY21kKQogICAgICAgICByID0gdHJhY2VyLnJlc3VsdHMoKQogICAgICAgICByLndyaXRlX3Jlc3VsdHMoc2hvd19taXNzaW5nPVRydWUsIHN1bW1hcnk9VHJ1ZSwgY292ZXJkaXI9VEVTVEZOKQpAQCAtNDA3LDkgKzQwNyw1IEBACiAgICAgICAgICAgICB0cmFjZS5maW5kX2V4ZWN1dGFibGVfbGluZW5vcyhmZC5uYW1lKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBydW5fdW5pdHRlc3QoX19uYW1lX18pCi0KLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90cmFjZWJhY2sucHkgYi9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQppbmRleCBjMzhjNjViLi5kNmM5ZGYyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQorKysgYi9MaWIvdGVzdC90ZXN0X3RyYWNlYmFjay5weQpAQCAtMTcyLDMyICsxNzIsMTAxIEBACiAKIGNsYXNzIFRyYWNlYmFja0Zvcm1hdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAorICAgIGRlZiBzb21lX2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgcmFpc2UgS2V5RXJyb3IoJ2JsYWgnKQorCiAgICAgQGNweXRob25fb25seQotICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgZGVmIGNoZWNrX3RyYWNlYmFja19mb3JtYXQoc2VsZiwgY2xlYW51cF9mdW5jPU5vbmUpOgogICAgICAgICBmcm9tIF90ZXN0Y2FwaSBpbXBvcnQgdHJhY2ViYWNrX3ByaW50CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIEtleUVycm9yKCdibGFoJykKKyAgICAgICAgICAgIHNlbGYuc29tZV9leGNlcHRpb24oKQogICAgICAgICBleGNlcHQgS2V5RXJyb3I6CiAgICAgICAgICAgICB0eXBlXywgdmFsdWUsIHRiID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgIGlmIGNsZWFudXBfZnVuYyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAjIENsZWFyIHRoZSBpbm5lciBmcmFtZXMsIG5vdCB0aGlzIG9uZQorICAgICAgICAgICAgICAgIGNsZWFudXBfZnVuYyh0Yi50Yl9uZXh0KQogICAgICAgICAgICAgdHJhY2ViYWNrX2ZtdCA9ICdUcmFjZWJhY2sgKG1vc3QgcmVjZW50IGNhbGwgbGFzdCk6XG4nICsgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnLmpvaW4odHJhY2ViYWNrLmZvcm1hdF90Yih0YikpCiAgICAgICAgICAgICBmaWxlXyA9IFN0cmluZ0lPKCkKICAgICAgICAgICAgIHRyYWNlYmFja19wcmludCh0YiwgZmlsZV8pCiAgICAgICAgICAgICBweXRob25fZm10ICA9IGZpbGVfLmdldHZhbHVlKCkKKyAgICAgICAgICAgICMgQ2FsbCBhbGwgX3RiIGFuZCBfZXhjIGZ1bmN0aW9ucworICAgICAgICAgICAgd2l0aCBjYXB0dXJlZF9vdXRwdXQoInN0ZGVyciIpIGFzIHRic3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YikKKyAgICAgICAgICAgIHRiZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF90Yih0YiwgZmlsZT10YmZpbGUpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX291dHB1dCgic3RkZXJyIikgYXMgZXhjc3RkZXJyOgorICAgICAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoKQorICAgICAgICAgICAgZXhjZm10ID0gdHJhY2ViYWNrLmZvcm1hdF9leGMoKQorICAgICAgICAgICAgZXhjZmlsZSA9IFN0cmluZ0lPKCkKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1leGNmaWxlKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmFpc2UgRXJyb3IoInVuYWJsZSB0byBjcmVhdGUgdGVzdCB0cmFjZWJhY2sgc3RyaW5nIikKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IFB5dGhvbiBhbmQgdGhlIHRyYWNlYmFjayBtb2R1bGUgZm9ybWF0IHRoZSBzYW1lIHRoaW5nCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrX2ZtdCwgcHl0aG9uX2ZtdCkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfdGIgZnVuYyBvdXRwdXQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YnN0ZGVyci5nZXR2YWx1ZSgpLCB0YmZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgIyBOb3cgdmVyaWZ5IHRoZSBfZXhjIGZ1bmMgb3V0cHV0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhjc3RkZXJyLmdldHZhbHVlKCksIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChleGNmbXQsIGV4Y2ZpbGUuZ2V0dmFsdWUoKSkKIAogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHRoZSB0cmFjZWJhY2sgaXMgcHJvcGVybHkgaW5kZW50ZWQuCiAgICAgICAgIHRiX2xpbmVzID0gcHl0aG9uX2ZtdC5zcGxpdGxpbmVzKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odGJfbGluZXMpLCAzKQotICAgICAgICBiYW5uZXIsIGxvY2F0aW9uLCBzb3VyY2VfbGluZSA9IHRiX2xpbmVzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRiX2xpbmVzKSwgNSkKKyAgICAgICAgYmFubmVyID0gdGJfbGluZXNbMF0KKyAgICAgICAgbG9jYXRpb24sIHNvdXJjZV9saW5lID0gdGJfbGluZXNbLTI6XQogICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFubmVyLnN0YXJ0c3dpdGgoJ1RyYWNlYmFjaycpKQogICAgICAgICBzZWxmLmFzc2VydFRydWUobG9jYXRpb24uc3RhcnRzd2l0aCgnICBGaWxlJykpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzb3VyY2VfbGluZS5zdGFydHN3aXRoKCcgICAgcmFpc2UnKSkKIAorICAgIGRlZiB0ZXN0X3RyYWNlYmFja19mb3JtYXQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfdHJhY2ViYWNrX2Zvcm1hdCgpCisKKyAgICBkZWYgdGVzdF90cmFjZWJhY2tfZm9ybWF0X3dpdGhfY2xlYXJlZF9mcmFtZXMoc2VsZik6CisgICAgICAgICMgQ2hlY2sgdGhhdCB0cmFjZWJhY2sgZm9ybWF0dGluZyBhbHNvIHdvcmtzIHdpdGggYSBjbGVhcigpZWQgZnJhbWUKKyAgICAgICAgZGVmIGNsZWFudXBfdGIodGIpOgorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBzZWxmLmNoZWNrX3RyYWNlYmFja19mb3JtYXQoY2xlYW51cF90YikKKworICAgIGRlZiB0ZXN0X3N0YWNrX2Zvcm1hdChzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgX3N0YWNrIGZ1bmN0aW9ucy4gTm90ZSB3ZSBoYXZlIHRvIHVzZSBfZ2V0ZnJhbWUoMSkgdG8KKyAgICAgICAgIyBjb21wYXJlIHRoZW0gd2l0aG91dCB0aGlzIGZyYW1lIGFwcGVhcmluZyBpbiB0aGUgb3V0cHV0CisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdHN0ZGVycjoKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpKQorICAgICAgICBzdGZpbGUgPSBTdHJpbmdJTygpCisgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjayhzeXMuX2dldGZyYW1lKDEpLCBmaWxlPXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHN0ZGVyci5nZXR2YWx1ZSgpLCBzdGZpbGUuZ2V0dmFsdWUoKSkKKworICAgICAgICBzdGZtdCA9IHRyYWNlYmFjay5mb3JtYXRfc3RhY2soc3lzLl9nZXRmcmFtZSgxKSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0c3RkZXJyLmdldHZhbHVlKCksICIiLmpvaW4oc3RmbXQpKQorCisgICAgZGVmIHRlc3RfcHJpbnRfc3RhY2soc2VsZik6CisgICAgICAgIGRlZiBwcm4oKToKKyAgICAgICAgICAgIHRyYWNlYmFjay5wcmludF9zdGFjaygpCisgICAgICAgIHdpdGggY2FwdHVyZWRfb3V0cHV0KCJzdGRlcnIiKSBhcyBzdGRlcnI6CisgICAgICAgICAgICBwcm4oKQorICAgICAgICBsaW5lbm8gPSBwcm4uX19jb2RlX18uY29fZmlyc3RsaW5lbm8KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRlcnIuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKClbLTQ6XSwgWworICAgICAgICAgICAgJyAgRmlsZSAiJXMiLCBsaW5lICVkLCBpbiB0ZXN0X3ByaW50X3N0YWNrJyAlIChfX2ZpbGVfXywgbGluZW5vKzMpLAorICAgICAgICAgICAgJyAgICBwcm4oKScsCisgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluIHBybicgJSAoX19maWxlX18sIGxpbmVubysxKSwKKyAgICAgICAgICAgICcgICAgdHJhY2ViYWNrLnByaW50X3N0YWNrKCknLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3RfZm9ybWF0X3N0YWNrKHNlbGYpOgorICAgICAgICBkZWYgZm10KCk6CisgICAgICAgICAgICByZXR1cm4gdHJhY2ViYWNrLmZvcm1hdF9zdGFjaygpCisgICAgICAgIHJlc3VsdCA9IGZtdCgpCisgICAgICAgIGxpbmVubyA9IGZtdC5fX2NvZGVfXy5jb19maXJzdGxpbmVubworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMjpdLCBbCisgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluIHRlc3RfZm9ybWF0X3N0YWNrXG4nCisgICAgICAgICAgICAnICAgIHJlc3VsdCA9IGZtdCgpXG4nICUgKF9fZmlsZV9fLCBsaW5lbm8rMiksCisgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluIGZtdFxuJworICAgICAgICAgICAgJyAgICByZXR1cm4gdHJhY2ViYWNrLmZvcm1hdF9zdGFjaygpXG4nICUgKF9fZmlsZV9fLCBsaW5lbm8rMSksCisgICAgICAgIF0pCisKIAogY2F1c2VfbWVzc2FnZSA9ICgKICAgICAiXG5UaGUgYWJvdmUgZXhjZXB0aW9uIHdhcyB0aGUgZGlyZWN0IGNhdXNlICIKQEAgLTM3MCw2ICs0MzksNDYgQEAKICAgICAgICAgcmV0dXJuIHMuZ2V0dmFsdWUoKQogCiAKK2NsYXNzIE1pc2NUcmFjZWJhY2tDYXNlcyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgIworICAgICMgQ2hlY2sgbm9uLXByaW50aW5nIGZ1bmN0aW9ucyBpbiB0cmFjZWJhY2sgbW9kdWxlCisgICAgIworCisgICAgZGVmIHRlc3RfY2xlYXIoc2VsZik6CisgICAgICAgIGRlZiBvdXRlcigpOgorICAgICAgICAgICAgbWlkZGxlKCkKKyAgICAgICAgZGVmIG1pZGRsZSgpOgorICAgICAgICAgICAgaW5uZXIoKQorICAgICAgICBkZWYgaW5uZXIoKToKKyAgICAgICAgICAgIGkgPSAxCisgICAgICAgICAgICAxLzAKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBvdXRlcigpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHR5cGVfLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQorCisgICAgICAgICMgSW5pdGlhbCBhc3NlcnRpb246IHRoZXJlJ3Mgb25lIGxvY2FsIGluIHRoZSBpbm5lciBmcmFtZS4KKyAgICAgICAgaW5uZXJfZnJhbWUgPSB0Yi50Yl9uZXh0LnRiX25leHQudGJfbmV4dC50Yl9mcmFtZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihpbm5lcl9mcmFtZS5mX2xvY2FscyksIDEpCisKKyAgICAgICAgIyBDbGVhciB0cmFjZWJhY2sgZnJhbWVzCisgICAgICAgIHRyYWNlYmFjay5jbGVhcl9mcmFtZXModGIpCisKKyAgICAgICAgIyBMb2NhbCB2YXJpYWJsZSBkaWN0IHNob3VsZCBub3cgYmUgZW1wdHkuCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGlubmVyX2ZyYW1lLmZfbG9jYWxzKSwgMCkKKworICAgIGRlZiB0ZXN0X2V4dHJhY3Rfc3RhY2soc2VsZik6CisgICAgICAgIGRlZiBleHRyYWN0KCk6CisgICAgICAgICAgICByZXR1cm4gdHJhY2ViYWNrLmV4dHJhY3Rfc3RhY2soKQorICAgICAgICByZXN1bHQgPSBleHRyYWN0KCkKKyAgICAgICAgbGluZW5vID0gZXh0cmFjdC5fX2NvZGVfXy5jb19maXJzdGxpbmVubworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFstMjpdLCBbCisgICAgICAgICAgICAoX19maWxlX18sIGxpbmVubysyLCAndGVzdF9leHRyYWN0X3N0YWNrJywgJ3Jlc3VsdCA9IGV4dHJhY3QoKScpLAorICAgICAgICAgICAgKF9fZmlsZV9fLCBsaW5lbm8rMSwgJ2V4dHJhY3QnLCAncmV0dXJuIHRyYWNlYmFjay5leHRyYWN0X3N0YWNrKCknKSwKKyAgICAgICAgXSkKKworCiBkZWYgdGVzdF9tYWluKCk6CiAgICAgcnVuX3VuaXR0ZXN0KF9fbmFtZV9fKQogCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3RyYWNlbWFsbG9jLnB5IGIvTGliL3Rlc3QvdGVzdF90cmFjZW1hbGxvYy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGNjYWIyCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3Rlc3QvdGVzdF90cmFjZW1hbGxvYy5weQpAQCAtMCwwICsxLDgzMCBAQAoraW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IHRyYWNlbWFsbG9jCitpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QubW9jayBpbXBvcnQgcGF0Y2gKK2Zyb20gdGVzdC5zY3JpcHRfaGVscGVyIGltcG9ydCBhc3NlcnRfcHl0aG9uX29rLCBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUKK2Zyb20gdGVzdCBpbXBvcnQgc2NyaXB0X2hlbHBlciwgc3VwcG9ydAordHJ5OgorICAgIGltcG9ydCB0aHJlYWRpbmcKK2V4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICB0aHJlYWRpbmcgPSBOb25lCisKK0VNUFRZX1NUUklOR19TSVpFID0gc3lzLmdldHNpemVvZihiJycpCisKK2RlZiBnZXRfZnJhbWVzKG5mcmFtZSwgbGluZW5vX2RlbHRhKToKKyAgICBmcmFtZXMgPSBbXQorICAgIGZyYW1lID0gc3lzLl9nZXRmcmFtZSgxKQorICAgIGZvciBpbmRleCBpbiByYW5nZShuZnJhbWUpOgorICAgICAgICBjb2RlID0gZnJhbWUuZl9jb2RlCisgICAgICAgIGxpbmVubyA9IGZyYW1lLmZfbGluZW5vICsgbGluZW5vX2RlbHRhCisgICAgICAgIGZyYW1lcy5hcHBlbmQoKGNvZGUuY29fZmlsZW5hbWUsIGxpbmVubykpCisgICAgICAgIGxpbmVub19kZWx0YSA9IDAKKyAgICAgICAgZnJhbWUgPSBmcmFtZS5mX2JhY2sKKyAgICAgICAgaWYgZnJhbWUgaXMgTm9uZToKKyAgICAgICAgICAgIGJyZWFrCisgICAgcmV0dXJuIHR1cGxlKGZyYW1lcykKKworZGVmIGFsbG9jYXRlX2J5dGVzKHNpemUpOgorICAgIG5mcmFtZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWJhY2tfbGltaXQoKQorICAgIGJ5dGVzX2xlbiA9IChzaXplIC0gRU1QVFlfU1RSSU5HX1NJWkUpCisgICAgZnJhbWVzID0gZ2V0X2ZyYW1lcyhuZnJhbWUsIDEpCisgICAgZGF0YSA9IGIneCcgKiBieXRlc19sZW4KKyAgICByZXR1cm4gZGF0YSwgdHJhY2VtYWxsb2MuVHJhY2ViYWNrKGZyYW1lcykKKworZGVmIGNyZWF0ZV9zbmFwc2hvdHMoKToKKyAgICB0cmFjZWJhY2tfbGltaXQgPSAyCisKKyAgICByYXdfdHJhY2VzID0gWworICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICgyLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisKKyAgICAgICAgKDY2LCAoKCdiLnB5JywgMSksKSksCisKKyAgICAgICAgKDcsICgoJzx1bmtub3duPicsIDApLCkpLAorICAgIF0KKyAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLlNuYXBzaG90KHJhd190cmFjZXMsIHRyYWNlYmFja19saW1pdCkKKworICAgIHJhd190cmFjZXMyID0gWworICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorCisgICAgICAgICgyLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisgICAgICAgICg1MDAwLCAoKCdhLnB5JywgNSksICgnYi5weScsIDQpKSksCisKKyAgICAgICAgKDQwMCwgKCgnYy5weScsIDU3OCksKSksCisgICAgXQorICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLlNuYXBzaG90KHJhd190cmFjZXMyLCB0cmFjZWJhY2tfbGltaXQpCisKKyAgICByZXR1cm4gKHNuYXBzaG90LCBzbmFwc2hvdDIpCisKK2RlZiBmcmFtZShmaWxlbmFtZSwgbGluZW5vKToKKyAgICByZXR1cm4gdHJhY2VtYWxsb2MuX0ZyYW1lKChmaWxlbmFtZSwgbGluZW5vKSkKKworZGVmIHRyYWNlYmFjaygqZnJhbWVzKToKKyAgICByZXR1cm4gdHJhY2VtYWxsb2MuVHJhY2ViYWNrKGZyYW1lcykKKworZGVmIHRyYWNlYmFja19saW5lbm8oZmlsZW5hbWUsIGxpbmVubyk6CisgICAgcmV0dXJuIHRyYWNlYmFjaygoZmlsZW5hbWUsIGxpbmVubykpCisKK2RlZiB0cmFjZWJhY2tfZmlsZW5hbWUoZmlsZW5hbWUpOgorICAgIHJldHVybiB0cmFjZWJhY2tfbGluZW5vKGZpbGVuYW1lLCAwKQorCisKK2NsYXNzIFRlc3RUcmFjZW1hbGxvY0VuYWJsZWQodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgaWYgdHJhY2VtYWxsb2MuaXNfdHJhY2luZygpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgidHJhY2VtYWxsb2MgbXVzdCBiZSBzdG9wcGVkIGJlZm9yZSB0aGUgdGVzdCIpCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RhcnQoMSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisKKyAgICBkZWYgdGVzdF9nZXRfdHJhY2VtYWxsb2NfbWVtb3J5KHNlbGYpOgorICAgICAgICBkYXRhID0gW2FsbG9jYXRlX2J5dGVzKDEyMykgZm9yIGNvdW50IGluIHJhbmdlKDEwMDApXQorICAgICAgICBzaXplID0gdHJhY2VtYWxsb2MuZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNpemUsIDApCisKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgc2l6ZTIgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZTIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzc0VxdWFsKHNpemUyLCBzaXplKQorCisgICAgZGVmIHRlc3RfZ2V0X29iamVjdF90cmFjZWJhY2soc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIG9ial9zaXplID0gMTIzNDUKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZWJhY2ssIG9ial90cmFjZWJhY2spCisKKyAgICBkZWYgdGVzdF9zZXRfdHJhY2ViYWNrX2xpbWl0KHNlbGYpOgorICAgICAgICBvYmpfc2l6ZSA9IDEwCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRyYWNlbWFsbG9jLnN0YXJ0LCAtMSkKKworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RhcnQoMTApCisgICAgICAgIG9iajIsIG9iajJfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iajIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRyYWNlYmFjayksIDEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqMl90cmFjZWJhY2spCisKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDEpCisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKG9ial9zaXplKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZW1hbGxvYy5nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHRyYWNlYmFjayksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2ViYWNrLCBvYmpfdHJhY2ViYWNrKQorCisgICAgZGVmIGZpbmRfdHJhY2Uoc2VsZiwgdHJhY2VzLCB0cmFjZWJhY2spOgorICAgICAgICBmb3IgdHJhY2UgaW4gdHJhY2VzOgorICAgICAgICAgICAgaWYgdHJhY2VbMV0gPT0gdHJhY2ViYWNrLl9mcmFtZXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIHRyYWNlCisKKyAgICAgICAgc2VsZi5mYWlsKCJ0cmFjZSBub3QgZm91bmQiKQorCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlcyhzZWxmKToKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgb2JqX3NpemUgPSAxMjM0NQorICAgICAgICBvYmosIG9ial90cmFjZWJhY2sgPSBhbGxvY2F0ZV9ieXRlcyhvYmpfc2l6ZSkKKworICAgICAgICB0cmFjZXMgPSB0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpCisgICAgICAgIHRyYWNlID0gc2VsZi5maW5kX3RyYWNlKHRyYWNlcywgb2JqX3RyYWNlYmFjaykKKworICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodHJhY2UsIHR1cGxlKQorICAgICAgICBzaXplLCB0cmFjZWJhY2sgPSB0cmFjZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNpemUsIG9ial9zaXplKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjaywgb2JqX3RyYWNlYmFjay5fZnJhbWVzKQorCisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlbWFsbG9jLl9nZXRfdHJhY2VzKCksIFtdKQorCisgICAgZGVmIHRlc3RfZ2V0X3RyYWNlc19pbnRlcm5fdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICAjIGR1bW15IHdyYXBwZXJzIHRvIGdldCBtb3JlIHVzZWZ1bCBhbmQgaWRlbnRpY2FsIGZyYW1lcyBpbiB0aGUgdHJhY2ViYWNrCisgICAgICAgIGRlZiBhbGxvY2F0ZV9ieXRlczIoc2l6ZSk6CisgICAgICAgICAgICByZXR1cm4gYWxsb2NhdGVfYnl0ZXMoc2l6ZSkKKyAgICAgICAgZGVmIGFsbG9jYXRlX2J5dGVzMyhzaXplKToKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZV9ieXRlczIoc2l6ZSkKKyAgICAgICAgZGVmIGFsbG9jYXRlX2J5dGVzNChzaXplKToKKyAgICAgICAgICAgIHJldHVybiBhbGxvY2F0ZV9ieXRlczMoc2l6ZSkKKworICAgICAgICAjIEVuc3VyZSB0aGF0IHR3byBpZGVudGljYWwgdHJhY2ViYWNrcyBhcmUgbm90IGR1cGxpY2F0ZWQKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHRyYWNlbWFsbG9jLnN0YXJ0KDQpCisgICAgICAgIG9ial9zaXplID0gMTIzCisgICAgICAgIG9iajEsIG9iajFfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXM0KG9ial9zaXplKQorICAgICAgICBvYmoyLCBvYmoyX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzNChvYmpfc2l6ZSkKKworICAgICAgICB0cmFjZXMgPSB0cmFjZW1hbGxvYy5fZ2V0X3RyYWNlcygpCisKKyAgICAgICAgdHJhY2UxID0gc2VsZi5maW5kX3RyYWNlKHRyYWNlcywgb2JqMV90cmFjZWJhY2spCisgICAgICAgIHRyYWNlMiA9IHNlbGYuZmluZF90cmFjZSh0cmFjZXMsIG9iajJfdHJhY2ViYWNrKQorICAgICAgICBzaXplMSwgdHJhY2ViYWNrMSA9IHRyYWNlMQorICAgICAgICBzaXplMiwgdHJhY2ViYWNrMiA9IHRyYWNlMgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFjazIsIHRyYWNlYmFjazEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHJhY2ViYWNrMiwgdHJhY2ViYWNrMSkKKworICAgIGRlZiB0ZXN0X2dldF90cmFjZWRfbWVtb3J5KHNlbGYpOgorICAgICAgICAjIFB5dGhvbiBhbGxvY2F0ZXMgc29tZSBpbnRlcm5hbHMgb2JqZWN0cywgc28gdGhlIHRlc3QgbXVzdCB0b2xlcmF0ZQorICAgICAgICAjIGEgc21hbGwgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBleHBlY3RlZCBzaXplIGFuZCB0aGUgcmVhbCB1c2FnZQorICAgICAgICBtYXhfZXJyb3IgPSAyMDQ4CisKKyAgICAgICAgIyBhbGxvY2F0ZSBvbmUgb2JqZWN0CisgICAgICAgIG9ial9zaXplID0gMTAyNCAqIDEwMjQKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHNpemUsIHBlYWtfc2l6ZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSwgb2JqX3NpemUpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHBlYWtfc2l6ZSwgc2l6ZSkKKworICAgICAgICBzZWxmLmFzc2VydExlc3NFcXVhbChzaXplIC0gb2JqX3NpemUsIG1heF9lcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRMZXNzRXF1YWwocGVha19zaXplIC0gc2l6ZSwgbWF4X2Vycm9yKQorCisgICAgICAgICMgZGVzdHJveSB0aGUgb2JqZWN0CisgICAgICAgIG9iaiA9IE5vbmUKKyAgICAgICAgc2l6ZTIsIHBlYWtfc2l6ZTIgPSB0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpCisgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhzaXplMiwgc2l6ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSAtIHNpemUyLCBvYmpfc2l6ZSAtIG1heF9lcnJvcikKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwocGVha19zaXplMiwgcGVha19zaXplKQorCisgICAgICAgICMgY2xlYXJfdHJhY2VzKCkgbXVzdCByZXNldCB0cmFjZWQgbWVtb3J5IGNvdW50ZXJzCisgICAgICAgIHRyYWNlbWFsbG9jLmNsZWFyX3RyYWNlcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2VtYWxsb2MuZ2V0X3RyYWNlZF9tZW1vcnkoKSwgKDAsIDApKQorCisgICAgICAgICMgYWxsb2NhdGUgYW5vdGhlciBvYmplY3QKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHNpemUsIHBlYWtfc2l6ZSA9IHRyYWNlbWFsbG9jLmdldF90cmFjZWRfbWVtb3J5KCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2l6ZSwgb2JqX3NpemUpCisKKyAgICAgICAgIyBzdG9wKCkgYWxzbyByZXNldHMgdHJhY2VkIG1lbW9yeSBjb3VudGVycworICAgICAgICB0cmFjZW1hbGxvYy5zdG9wKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZW1hbGxvYy5nZXRfdHJhY2VkX21lbW9yeSgpLCAoMCwgMCkpCisKKyAgICBkZWYgdGVzdF9jbGVhcl90cmFjZXMoc2VsZik6CisgICAgICAgIG9iaiwgb2JqX3RyYWNlYmFjayA9IGFsbG9jYXRlX2J5dGVzKDEyMykKKyAgICAgICAgdHJhY2ViYWNrID0gdHJhY2VtYWxsb2MuZ2V0X29iamVjdF90cmFjZWJhY2sob2JqKQorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0cmFjZWJhY2spCisKKyAgICAgICAgdHJhY2VtYWxsb2MuY2xlYXJfdHJhY2VzKCkKKyAgICAgICAgdHJhY2ViYWNrMiA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodHJhY2ViYWNrMikKKworICAgIGRlZiB0ZXN0X2lzX3RyYWNpbmcoc2VsZik6CisgICAgICAgIHRyYWNlbWFsbG9jLnN0b3AoKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSkKKworICAgICAgICB0cmFjZW1hbGxvYy5zdGFydCgpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdChzZWxmKToKKyAgICAgICAgb2JqLCBzb3VyY2UgPSBhbGxvY2F0ZV9ieXRlcygxMjMpCisKKyAgICAgICAgIyB0YWtlIGEgc25hcHNob3QKKyAgICAgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKworICAgICAgICAjIHdyaXRlIG9uIGRpc2sKKyAgICAgICAgc25hcHNob3QuZHVtcChzdXBwb3J0LlRFU1RGTikKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHN1cHBvcnQudW5saW5rLCBzdXBwb3J0LlRFU1RGTikKKworICAgICAgICAjIGxvYWQgZnJvbSBkaXNrCisgICAgICAgIHNuYXBzaG90MiA9IHRyYWNlbWFsbG9jLlNuYXBzaG90LmxvYWQoc3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QyLnRyYWNlcywgc25hcHNob3QudHJhY2VzKQorCisgICAgICAgICMgdHJhY2VtYWxsb2MgbXVzdCBiZSB0cmFjaW5nIG1lbW9yeSBhbGxvY2F0aW9ucyB0byB0YWtlIGEgc25hcHNob3QKKyAgICAgICAgdHJhY2VtYWxsb2Muc3RvcCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJhbGxvY2F0aW9ucyB0byB0YWtlIGEgc25hcHNob3QiKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3Rfc2F2ZV9hdHRyKHNlbGYpOgorICAgICAgICAjIHRha2UgYSBzbmFwc2hvdCB3aXRoIGEgbmV3IGF0dHJpYnV0ZQorICAgICAgICBzbmFwc2hvdCA9IHRyYWNlbWFsbG9jLnRha2Vfc25hcHNob3QoKQorICAgICAgICBzbmFwc2hvdC50ZXN0X2F0dHIgPSAibmV3IgorICAgICAgICBzbmFwc2hvdC5kdW1wKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgICMgbG9hZCgpIHNob3VsZCByZWNyZWF0ZXMgdGhlIGF0dHJpYnV0ZQorICAgICAgICBzbmFwc2hvdDIgPSB0cmFjZW1hbGxvYy5TbmFwc2hvdC5sb2FkKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90Mi50ZXN0X2F0dHIsICJuZXciKQorCisgICAgZGVmIGZvcmtfY2hpbGQoc2VsZik6CisgICAgICAgIGlmIG5vdCB0cmFjZW1hbGxvYy5pc190cmFjaW5nKCk6CisgICAgICAgICAgICByZXR1cm4gMgorCisgICAgICAgIG9ial9zaXplID0gMTIzNDUKKyAgICAgICAgb2JqLCBvYmpfdHJhY2ViYWNrID0gYWxsb2NhdGVfYnl0ZXMob2JqX3NpemUpCisgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jLmdldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICAgICAgaWYgdHJhY2ViYWNrIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gMworCisgICAgICAgICMgZXZlcnl0aGluZyBpcyBmaW5lCisgICAgICAgIHJldHVybiAwCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhoYXNhdHRyKG9zLCAnZm9yaycpLCAnbmVlZCBvcy5mb3JrKCknKQorICAgIGRlZiB0ZXN0X2Zvcmsoc2VsZik6CisgICAgICAgICMgY2hlY2sgdGhhdCB0cmFjZW1hbGxvYyBpcyBzdGlsbCB3b3JraW5nIGFmdGVyIGZvcmsKKyAgICAgICAgcGlkID0gb3MuZm9yaygpCisgICAgICAgIGlmIG5vdCBwaWQ6CisgICAgICAgICAgICAjIGNoaWxkCisgICAgICAgICAgICBleGl0Y29kZSA9IDEKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBleGl0Y29kZSA9IHNlbGYuZm9ya19jaGlsZCgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIG9zLl9leGl0KGV4aXRjb2RlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcGlkMiwgc3RhdHVzID0gb3Mud2FpdHBpZChwaWQsIDApCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MuV0lGRVhJVEVEKHN0YXR1cykpCisgICAgICAgICAgICBleGl0Y29kZSA9IG9zLldFWElUU1RBVFVTKHN0YXR1cykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXhpdGNvZGUsIDApCisKKworY2xhc3MgVGVzdFNuYXBzaG90KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtYXhEaWZmID0gNDAwMAorCisgICAgZGVmIHRlc3RfY3JlYXRlX3NuYXBzaG90KHNlbGYpOgorICAgICAgICByYXdfdHJhY2VzID0gWyg1LCAoKCdhLnB5JywgMiksKSldCisKKyAgICAgICAgd2l0aCBjb250ZXh0bGliLkV4aXRTdGFjaygpIGFzIHN0YWNrOgorICAgICAgICAgICAgc3RhY2suZW50ZXJfY29udGV4dChwYXRjaC5vYmplY3QodHJhY2VtYWxsb2MsICdpc190cmFjaW5nJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1UcnVlKSkKKyAgICAgICAgICAgIHN0YWNrLmVudGVyX2NvbnRleHQocGF0Y2gub2JqZWN0KHRyYWNlbWFsbG9jLCAnZ2V0X3RyYWNlYmFja19saW1pdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU9NSkpCisgICAgICAgICAgICBzdGFjay5lbnRlcl9jb250ZXh0KHBhdGNoLm9iamVjdCh0cmFjZW1hbGxvYywgJ19nZXRfdHJhY2VzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZT1yYXdfdHJhY2VzKSkKKworICAgICAgICAgICAgc25hcHNob3QgPSB0cmFjZW1hbGxvYy50YWtlX3NuYXBzaG90KCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QudHJhY2ViYWNrX2xpbWl0LCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc25hcHNob3QudHJhY2VzKSwgMSkKKyAgICAgICAgICAgIHRyYWNlID0gc25hcHNob3QudHJhY2VzWzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlLnNpemUsIDUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0cmFjZS50cmFjZWJhY2spLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0cmFjZS50cmFjZWJhY2tbMF0uZmlsZW5hbWUsICdhLnB5JykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHJhY2UudHJhY2ViYWNrWzBdLmxpbmVubywgMikKKworICAgIGRlZiB0ZXN0X2ZpbHRlcl90cmFjZXMoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgZmlsdGVyMSA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImIucHkiKQorICAgICAgICBmaWx0ZXIyID0gdHJhY2VtYWxsb2MuRmlsdGVyKFRydWUsICJhLnB5IiwgMikKKyAgICAgICAgZmlsdGVyMyA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYS5weSIsIDUpCisKKyAgICAgICAgb3JpZ2luYWxfdHJhY2VzID0gbGlzdChzbmFwc2hvdC50cmFjZXMuX3RyYWNlcykKKworICAgICAgICAjIGV4Y2x1ZGUgYi5weQorICAgICAgICBzbmFwc2hvdDMgPSBzbmFwc2hvdC5maWx0ZXJfdHJhY2VzKChmaWx0ZXIxLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3QzLnRyYWNlcy5fdHJhY2VzLCBbCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMiwgKCgnYS5weScsIDUpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDcsICgoJzx1bmtub3duPicsIDApLCkpLAorICAgICAgICBdKQorCisgICAgICAgICMgZmlsdGVyX3RyYWNlcygpIG11c3Qgbm90IHRvdWNoIHRoZSBvcmlnaW5hbCBzbmFwc2hvdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90LnRyYWNlcy5fdHJhY2VzLCBvcmlnaW5hbF90cmFjZXMpCisKKyAgICAgICAgIyBvbmx5IGluY2x1ZGUgdHdvIGxpbmVzIG9mIGEucHkKKyAgICAgICAgc25hcHNob3Q0ID0gc25hcHNob3QzLmZpbHRlcl90cmFjZXMoKGZpbHRlcjIsIGZpbHRlcjMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNuYXBzaG90NC50cmFjZXMuX3RyYWNlcywgWworICAgICAgICAgICAgKDEwLCAoKCdhLnB5JywgMiksICgnYi5weScsIDQpKSksCisgICAgICAgICAgICAoMTAsICgoJ2EucHknLCAyKSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgICAgICgxMCwgKCgnYS5weScsIDIpLCAoJ2IucHknLCA0KSkpLAorICAgICAgICAgICAgKDIsICgoJ2EucHknLCA1KSwgKCdiLnB5JywgNCkpKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIE5vIGZpbHRlcjoganVzdCBkdXBsaWNhdGUgdGhlIHNuYXBzaG90CisgICAgICAgIHNuYXBzaG90NSA9IHNuYXBzaG90LmZpbHRlcl90cmFjZXMoKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3Qoc25hcHNob3Q1LCBzbmFwc2hvdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzbmFwc2hvdDUudHJhY2VzLCBzbmFwc2hvdC50cmFjZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25hcHNob3Q1LnRyYWNlcywgc25hcHNob3QudHJhY2VzKQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc25hcHNob3QuZmlsdGVyX3RyYWNlcywgZmlsdGVyMSkKKworICAgIGRlZiB0ZXN0X3NuYXBzaG90X2dyb3VwX2J5X2xpbmUoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgdGJfMCA9IHRyYWNlYmFja19saW5lbm8oJzx1bmtub3duPicsIDApCisgICAgICAgIHRiX2FfMiA9IHRyYWNlYmFja19saW5lbm8oJ2EucHknLCAyKQorICAgICAgICB0Yl9hXzUgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgNSkKKyAgICAgICAgdGJfYl8xID0gdHJhY2ViYWNrX2xpbmVubygnYi5weScsIDEpCisgICAgICAgIHRiX2NfNTc4ID0gdHJhY2ViYWNrX2xpbmVubygnYy5weScsIDU3OCkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlIGFuZCBsaW5lCisgICAgICAgIHN0YXRzMSA9IHNuYXBzaG90LnN0YXRpc3RpY3MoJ2xpbmVubycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMxLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYl8xLCA2NiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV8yLCAzMCwgMyksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV81LCAyLCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlIGFuZCBsaW5lICgyKQorICAgICAgICBzdGF0czIgPSBzbmFwc2hvdDIuc3RhdGlzdGljcygnbGluZW5vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGF0czIsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9hXzUsIDUwMDIsIDIpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2NfNTc4LCA0MDAsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2FfMiwgMzAsIDMpLAorICAgICAgICBdKQorCisgICAgICAgICMgc3RhdHMgZGlmZiBwZXIgZmlsZSBhbmQgbGluZQorICAgICAgICBzdGF0aXN0aWNzID0gc25hcHNob3QyLmNvbXBhcmVfdG8oc25hcHNob3QsICdsaW5lbm8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRpc3RpY3MsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYV81LCA1MDAyLCA1MDAwLCAyLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfY181NzgsIDQwMCwgNDAwLCAxLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYl8xLCAwLCAtNjYsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfMCwgMCwgLTcsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGJfYV8yLCAzMCwgMCwgMywgMCksCisgICAgICAgIF0pCisKKyAgICBkZWYgdGVzdF9zbmFwc2hvdF9ncm91cF9ieV9maWxlKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHRiXzAgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJzx1bmtub3duPicpCisgICAgICAgIHRiX2EgPSB0cmFjZWJhY2tfZmlsZW5hbWUoJ2EucHknKQorICAgICAgICB0Yl9iID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdiLnB5JykKKyAgICAgICAgdGJfYyA9IHRyYWNlYmFja19maWxlbmFtZSgnYy5weScpCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZQorICAgICAgICBzdGF0czEgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdmaWxlbmFtZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMxLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYiwgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2EsIDMyLCA0KSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl8wLCA3LCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlICgyKQorICAgICAgICBzdGF0czIgPSBzbmFwc2hvdDIuc3RhdGlzdGljcygnZmlsZW5hbWUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2EsIDUwMzIsIDUpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiX2MsIDQwMCwgMSksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBkaWZmIHBlciBmaWxlCisgICAgICAgIGRpZmYgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ2ZpbGVuYW1lJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaWZmLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2EsIDUwMzIsIDUwMDAsIDUsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl9jLCA0MDAsIDQwMCwgMSwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWNEaWZmKHRiX2IsIDAsIC02NiwgMCwgLTEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0Yl8wLCAwLCAtNywgMCwgLTEpLAorICAgICAgICBdKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfdHJhY2ViYWNrKHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisKKyAgICAgICAgIyBzdGF0cyBwZXIgZmlsZQorICAgICAgICB0YjEgPSB0cmFjZWJhY2soKCdhLnB5JywgMiksICgnYi5weScsIDQpKQorICAgICAgICB0YjIgPSB0cmFjZWJhY2soKCdhLnB5JywgNSksICgnYi5weScsIDQpKQorICAgICAgICB0YjMgPSB0cmFjZWJhY2soKCdiLnB5JywgMSkpCisgICAgICAgIHRiNCA9IHRyYWNlYmFjaygoJzx1bmtub3duPicsIDApKQorICAgICAgICBzdGF0czEgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCd0cmFjZWJhY2snKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzMSwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMywgNjYsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiMSwgMzAsIDMpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiNCwgNywgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIyLCAyLCAxKSwKKyAgICAgICAgXSkKKworICAgICAgICAjIHN0YXRzIHBlciBmaWxlICgyKQorICAgICAgICB0YjUgPSB0cmFjZWJhY2soKCdjLnB5JywgNTc4KSkKKyAgICAgICAgc3RhdHMyID0gc25hcHNob3QyLnN0YXRpc3RpY3MoJ3RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMyLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIyLCA1MDAyLCAyKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0YjUsIDQwMCwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGIxLCAzMCwgMyksCisgICAgICAgIF0pCisKKyAgICAgICAgIyBzdGF0cyBkaWZmIHBlciBmaWxlCisgICAgICAgIGRpZmYgPSBzbmFwc2hvdDIuY29tcGFyZV90byhzbmFwc2hvdCwgJ3RyYWNlYmFjaycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGlmZiwgWworICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjIsIDUwMDIsIDUwMDAsIDIsIDEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjUsIDQwMCwgNDAwLCAxLCAxKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGIzLCAwLCAtNjYsIDAsIC0xKSwKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpY0RpZmYodGI0LCAwLCAtNywgMCwgLTEpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljRGlmZih0YjEsIDMwLCAwLCAzLCAwKSwKKyAgICAgICAgXSkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdC5zdGF0aXN0aWNzLCAndHJhY2ViYWNrJywgY3VtdWxhdGl2ZT1UcnVlKQorCisgICAgZGVmIHRlc3Rfc25hcHNob3RfZ3JvdXBfYnlfY3VtdWxhdGl2ZShzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0Yl8wID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCc8dW5rbm93bj4nKQorICAgICAgICB0Yl9hID0gdHJhY2ViYWNrX2ZpbGVuYW1lKCdhLnB5JykKKyAgICAgICAgdGJfYiA9IHRyYWNlYmFja19maWxlbmFtZSgnYi5weScpCisgICAgICAgIHRiX2FfMiA9IHRyYWNlYmFja19saW5lbm8oJ2EucHknLCAyKQorICAgICAgICB0Yl9hXzUgPSB0cmFjZWJhY2tfbGluZW5vKCdhLnB5JywgNSkKKyAgICAgICAgdGJfYl8xID0gdHJhY2ViYWNrX2xpbmVubygnYi5weScsIDEpCisgICAgICAgIHRiX2JfNCA9IHRyYWNlYmFja19saW5lbm8oJ2IucHknLCA0KQorCisgICAgICAgICMgcGVyIGZpbGUKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdmaWxlbmFtZScsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RhdHMsIFsKKyAgICAgICAgICAgIHRyYWNlbWFsbG9jLlN0YXRpc3RpYyh0Yl9iLCA5OCwgNSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYSwgMzIsIDQpLAorICAgICAgICAgICAgdHJhY2VtYWxsb2MuU3RhdGlzdGljKHRiXzAsIDcsIDEpLAorICAgICAgICBdKQorCisgICAgICAgICMgcGVyIGxpbmUKKyAgICAgICAgc3RhdHMgPSBzbmFwc2hvdC5zdGF0aXN0aWNzKCdsaW5lbm8nLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXRzLCBbCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYl8xLCA2NiwgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYl80LCAzMiwgNCksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV8yLCAzMCwgMyksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfMCwgNywgMSksCisgICAgICAgICAgICB0cmFjZW1hbGxvYy5TdGF0aXN0aWModGJfYV81LCAyLCAxKSwKKyAgICAgICAgXSkKKworICAgIGRlZiB0ZXN0X3RyYWNlX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICB0cmFjZSA9IHNuYXBzaG90LnRyYWNlc1swXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cih0cmFjZSksICdhLnB5OjI6IDEwIEInKQorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZS50cmFjZWJhY2sKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIodHJhY2ViYWNrKSwgJ2EucHk6MicpCisgICAgICAgIGZyYW1lID0gdHJhY2ViYWNrWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGZyYW1lKSwgJ2EucHk6MicpCisKKyAgICBkZWYgdGVzdF9zdGF0aXN0aWNfZm9ybWF0KHNlbGYpOgorICAgICAgICBzbmFwc2hvdCwgc25hcHNob3QyID0gY3JlYXRlX3NuYXBzaG90cygpCisgICAgICAgIHN0YXRzID0gc25hcHNob3Quc3RhdGlzdGljcygnbGluZW5vJykKKyAgICAgICAgc3RhdCA9IHN0YXRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHN0YXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdiLnB5OjE6IHNpemU9NjYgQiwgY291bnQ9MSwgYXZlcmFnZT02NiBCJykKKworICAgIGRlZiB0ZXN0X3N0YXRpc3RpY19kaWZmX2Zvcm1hdChzZWxmKToKKyAgICAgICAgc25hcHNob3QsIHNuYXBzaG90MiA9IGNyZWF0ZV9zbmFwc2hvdHMoKQorICAgICAgICBzdGF0cyA9IHNuYXBzaG90Mi5jb21wYXJlX3RvKHNuYXBzaG90LCAnbGluZW5vJykKKyAgICAgICAgc3RhdCA9IHN0YXRzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHN0YXQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdhLnB5OjU6IHNpemU9NTAwMiBCICgrNTAwMCBCKSwgY291bnQ9MiAoKzEpLCBhdmVyYWdlPTI1MDEgQicpCisKKyAgICBkZWYgdGVzdF9zbGljZXMoc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzbmFwc2hvdC50cmFjZXNbOjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzbmFwc2hvdC50cmFjZXNbMF0sIHNuYXBzaG90LnRyYWNlc1sxXSkpCisKKyAgICAgICAgdHJhY2ViYWNrID0gc25hcHNob3QudHJhY2VzWzBdLnRyYWNlYmFjaworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRyYWNlYmFja1s6Ml0sCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRyYWNlYmFja1swXSwgdHJhY2ViYWNrWzFdKSkKKworICAgIGRlZiB0ZXN0X2Zvcm1hdF90cmFjZWJhY2soc2VsZik6CisgICAgICAgIHNuYXBzaG90LCBzbmFwc2hvdDIgPSBjcmVhdGVfc25hcHNob3RzKCkKKyAgICAgICAgZGVmIGdldGxpbmUoZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgICAgICByZXR1cm4gJyAgPCVzLCAlcz4nICUgKGZpbGVuYW1lLCBsaW5lbm8pCisgICAgICAgIHdpdGggdW5pdHRlc3QubW9jay5wYXRjaCgndHJhY2VtYWxsb2MubGluZWNhY2hlLmdldGxpbmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZV9lZmZlY3Q9Z2V0bGluZSk6CisgICAgICAgICAgICB0YiA9IHNuYXBzaG90LnRyYWNlc1swXS50cmFjZWJhY2sKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGIuZm9ybWF0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICBGaWxlICJhLnB5IiwgbGluZSAyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgPGEucHksIDI+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgIEZpbGUgImIucHkiLCBsaW5lIDQnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyAgICA8Yi5weSwgND4nXSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Yi5mb3JtYXQobGltaXQ9MSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnICBGaWxlICJhLnB5IiwgbGluZSAyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcgICAgPGEucHksIDI+J10pCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGIuZm9ybWF0KGxpbWl0PS0xKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW10pCisKKworY2xhc3MgVGVzdEZpbHRlcnModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIG1heERpZmYgPSAyMDQ4CisKKyAgICBkZWYgdGVzdF9maWx0ZXJfYXR0cmlidXRlcyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IGRlZmF1bHQgdmFsdWVzCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5pbmNsdXNpdmUsIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZi5saW5lbm8pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5hbGxfZnJhbWVzLCBGYWxzZSkKKworICAgICAgICAjIHRlc3QgY3VzdG9tIHZhbHVlcworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAidGVzdC5weSIsIDEyMywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmluY2x1c2l2ZSwgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5maWxlbmFtZV9wYXR0ZXJuLCAidGVzdC5weSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5saW5lbm8sIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsbF9mcmFtZXMsIFRydWUpCisKKyAgICAgICAgIyBwYXJhbWV0ZXJzIHBhc3NlZCBieSBrZXl3b3JkCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoaW5jbHVzaXZlPUZhbHNlLCBmaWxlbmFtZV9wYXR0ZXJuPSJ0ZXN0LnB5IiwgbGluZW5vPTEyMywgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuaW5jbHVzaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmZpbGVuYW1lX3BhdHRlcm4sICJ0ZXN0LnB5IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmxpbmVubywgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxsX2ZyYW1lcywgVHJ1ZSkKKworICAgICAgICAjIHJlYWQtb25seSBhdHRyaWJ1dGUKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIHNldGF0dHIsIGYsICJmaWxlbmFtZV9wYXR0ZXJuIiwgImFiYyIpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2goc2VsZik6CisgICAgICAgICMgZmlsdGVyIHdpdGhvdXQgbGluZSBudW1iZXIKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgIyBmaWx0ZXIgd2l0aCBsaW5lIG51bWJlciA+IDAKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYWJjIiwgNSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImFiYyIsIDUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDEwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDApKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAxMCkpCisKKyAgICAgICAgIyBmaWx0ZXIgd2l0aCBsaW5lIG51bWJlciAwCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImFiYyIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiYWJjIiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoImFiYyIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJhYmMiLCAwKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCJhYmMiLCAxMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF9mcmFtZSgiMTIzNTYiLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX2ZyYW1lKCIxMjM1NiIsIDUpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfZnJhbWUoIjEyMzU2IiwgMTApKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBkZWYgZm5tYXRjaChpbmNsdXNpdmUsIGZpbGVuYW1lLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoaW5jbHVzaXZlLCBwYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGYuX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCAwKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKFRydWUsICJhYmMiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChUcnVlLCAiMTIzNTYiLCAiYWJjIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChUcnVlLCAiPHVua25vd24+IiwgImFiYyIpKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChGYWxzZSwgImFiYyIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goRmFsc2UsICIxMjM1NiIsICJhYmMiKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goRmFsc2UsICI8dW5rbm93bj4iLCAiYWJjIikpCisKKyAgICBkZWYgdGVzdF9maWx0ZXJfbWF0Y2hfZmlsZW5hbWVfam9rZXIoc2VsZik6CisgICAgICAgIGRlZiBmbm1hdGNoKGZpbGVuYW1lLCBwYXR0ZXJuKToKKyAgICAgICAgICAgIGZpbHRlciA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCBwYXR0ZXJuKQorICAgICAgICAgICAgcmV0dXJuIGZpbHRlci5fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIDApCisKKyAgICAgICAgIyBlbXB0eSBzdHJpbmcKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnJywgJ2FiYycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnJywgJyonKSkKKworICAgICAgICAjIG5vICoKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhYmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmMnLCAnYWJjZCcpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiYycsICdkZWYnKSkKKworICAgICAgICAjIGEqCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhYmMnLCAnYSonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhYmMqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2IqJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjJywgJ2FiY2QqJykpCisKKyAgICAgICAgIyBhKmIKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiYycsICdhKmMnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2RjeCcsICdhKmN4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJiJywgJ2EqYycpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FiY2RjZScsICdhKmN4JykpCisKKyAgICAgICAgIyBhKmIqYworICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYWJjZGUnLCAnYSpjKmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FiY2JkZWZlZycsICdhKmJkKmVnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYWJjZGQnLCAnYSpjKmUnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhYmNiZGVmZWYnLCAnYSpiZCplZycpKQorCisgICAgICAgICMgcmVwbGFjZSAucHljIGFuZCAucHlvIHN1ZmZpeCB3aXRoIC5weQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weW8nLCAnYS5weScpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5YycpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weScsICdhLnB5bycpKQorCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgICMgY2FzZSBpbnNlbnNpdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2FCQycsICdBQmMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhQmNEZScsICdBYipkRScpKQorCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2goJ2EuUFlPJywgJ2EucHknKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmbm1hdGNoKCdhLnB5JywgJ2EuUFlDJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjYXNlIHNlbnNpdGl2ZQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhQkMnLCAnQUJjJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2FCY0RlJywgJ0FiKmRFJykpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5weWMnLCAnYS5QWScpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKCdhLlBZTycsICdhLnB5JykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2goJ2EucHknLCAnYS5QWUMnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaCgnYS5QWScsICdhLnB5bycpKQorCisgICAgICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgICAgICMgbm9ybWFsaXplIGFsdGVybmF0ZSBzZXBhcmF0b3IgIi8iIHRvIHRoZSBzdGFuZGFyZCBzZXBhcmF0b3IgIlwiCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2EvYicsIHInYVxiJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2FcYicsIHInYS9iJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZm5tYXRjaChyJ2EvYlxjJywgcidhXGIvYycpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZubWF0Y2gocidhL2IvYycsIHInYVxiXGMnKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlIHNlcGFyYXRvcgorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmbm1hdGNoKHInYS9iJywgcidhXGInKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2FcYicsIHInYS9iJykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGZubWF0Y2gocidhL2JcYycsIHInYVxiL2MnKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm5tYXRjaChyJ2EvYi9jJywgcidhXGJcYycpKQorCisgICAgZGVmIHRlc3RfZmlsdGVyX21hdGNoX3RyYWNlKHNlbGYpOgorICAgICAgICB0MSA9ICgoImEucHkiLCAyKSwgKCJiLnB5IiwgMykpCisgICAgICAgIHQyID0gKCgiYi5weSIsIDQpLCAoImIucHkiLCA1KSkKKyAgICAgICAgdDMgPSAoKCJjLnB5IiwgNSksICgnPHVua25vd24+JywgMCkpCisgICAgICAgIHVua25vd24gPSAoKCc8dW5rbm93bj4nLCAwKSwpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiYi5weSIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoVHJ1ZSwgImIucHkiLCBhbGxfZnJhbWVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisgICAgICAgIGYgPSB0cmFjZW1hbGxvYy5GaWx0ZXIoRmFsc2UsICJiLnB5IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgImIucHkiLCBhbGxfZnJhbWVzPUZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh1bmtub3duKSkKKworICAgICAgICBmID0gdHJhY2VtYWxsb2MuRmlsdGVyKEZhbHNlLCAiPHVua25vd24+IiwgYWxsX2ZyYW1lcz1GYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZi5fbWF0Y2hfdHJhY2ViYWNrKHQzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihUcnVlLCAiPHVua25vd24+IiwgYWxsX2ZyYW1lcz1UcnVlKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHQyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodW5rbm93bikpCisKKyAgICAgICAgZiA9IHRyYWNlbWFsbG9jLkZpbHRlcihGYWxzZSwgIjx1bmtub3duPiIsIGFsbF9mcmFtZXM9VHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYuX21hdGNoX3RyYWNlYmFjayh0MSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmLl9tYXRjaF90cmFjZWJhY2sodDIpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGYuX21hdGNoX3RyYWNlYmFjayh0MykpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZi5fbWF0Y2hfdHJhY2ViYWNrKHVua25vd24pKQorCisKK2NsYXNzIFRlc3RDb21tYW5kTGluZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfZW52X3Zhcl9kaXNhYmxlZF9ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICAjIG5vdCB0cmFjaW5nIGJ5IGRlZmF1bHQKKyAgICAgICAgY29kZSA9ICdpbXBvcnQgdHJhY2VtYWxsb2M7IHByaW50KHRyYWNlbWFsbG9jLmlzX3RyYWNpbmcoKSknCisgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1jJywgY29kZSkKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ0ZhbHNlJykKKworICAgIEB1bml0dGVzdC5za2lwSWYoc2NyaXB0X2hlbHBlci5faW50ZXJwcmV0ZXJfcmVxdWlyZXNfZW52aXJvbm1lbnQoKSwKKyAgICAgICAgICAgICAgICAgICAgICdDYW5ub3QgcnVuIC1FIHRlc3RzIHdoZW4gUFlUSE9OIGVudiB2YXJzIGFyZSByZXF1aXJlZC4nKQorICAgIGRlZiB0ZXN0X2Vudl92YXJfaWdub3JlZF93aXRoX0Uoc2VsZik6CisgICAgICAgICIiIlBZVEhPTiogZW52aXJvbm1lbnQgdmFyaWFibGVzIG11c3QgYmUgaWdub3JlZCB3aGVuIC1FIGlzIHByZXNlbnQuIiIiCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5pc190cmFjaW5nKCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctRScsICctYycsIGNvZGUsIFBZVEhPTlRSQUNFTUFMTE9DPScxJykKKyAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LCBiJ0ZhbHNlJykKKworICAgIGRlZiB0ZXN0X2Vudl92YXJfZW5hYmxlZF9hdF9zdGFydHVwKHNlbGYpOgorICAgICAgICAjIHRyYWNpbmcgYXQgc3RhcnR1cAorICAgICAgICBjb2RlID0gJ2ltcG9ydCB0cmFjZW1hbGxvYzsgcHJpbnQodHJhY2VtYWxsb2MuaXNfdHJhY2luZygpKScKKyAgICAgICAgb2ssIHN0ZG91dCwgc3RkZXJyID0gYXNzZXJ0X3B5dGhvbl9vaygnLWMnLCBjb2RlLCBQWVRIT05UUkFDRU1BTExPQz0nMScpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYidUcnVlJykKKworICAgIGRlZiB0ZXN0X2Vudl9saW1pdChzZWxmKToKKyAgICAgICAgIyBzdGFydCBhbmQgc2V0IHRoZSBudW1iZXIgb2YgZnJhbWVzCisgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkpJworICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX29rKCctYycsIGNvZGUsIFBZVEhPTlRSQUNFTUFMTE9DPScxMCcpCisgICAgICAgIHN0ZG91dCA9IHN0ZG91dC5yc3RyaXAoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYicxMCcpCisKKyAgICBkZWYgdGVzdF9lbnZfdmFyX2ludmFsaWQoc2VsZik6CisgICAgICAgIGZvciBuZnJhbWUgaW4gKC0xLCAwLCAyKiozMCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChuZnJhbWU9bmZyYW1lKToKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuU3VwcHJlc3NDcmFzaFJlcG9ydCgpOgorICAgICAgICAgICAgICAgICAgICBvaywgc3Rkb3V0LCBzdGRlcnIgPSBhc3NlcnRfcHl0aG9uX2ZhaWx1cmUoCisgICAgICAgICAgICAgICAgICAgICAgICAnLWMnLCAncGFzcycsCisgICAgICAgICAgICAgICAgICAgICAgICBQWVRIT05UUkFDRU1BTExPQz1zdHIobmZyYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJ1BZVEhPTlRSQUNFTUFMTE9DOiBpbnZhbGlkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiJ251bWJlciBvZiBmcmFtZXMnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycikKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9ucyhzZWxmKToKKyAgICAgICAgZm9yIHhvcHRpb25zLCBuZnJhbWUgaW4gKAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYycsIDEpLAorICAgICAgICAgICAgKCd0cmFjZW1hbGxvYz0xJywgMSksCisgICAgICAgICAgICAoJ3RyYWNlbWFsbG9jPTE1JywgMTUpLAorICAgICAgICApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoeG9wdGlvbnM9eG9wdGlvbnMsIG5mcmFtZT1uZnJhbWUpOgorICAgICAgICAgICAgICAgIGNvZGUgPSAnaW1wb3J0IHRyYWNlbWFsbG9jOyBwcmludCh0cmFjZW1hbGxvYy5nZXRfdHJhY2ViYWNrX2xpbWl0KCkpJworICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soJy1YJywgeG9wdGlvbnMsICctYycsIGNvZGUpCisgICAgICAgICAgICAgICAgc3Rkb3V0ID0gc3Rkb3V0LnJzdHJpcCgpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGRvdXQsIHN0cihuZnJhbWUpLmVuY29kZSgnYXNjaWknKSkKKworICAgIGRlZiB0ZXN0X3N5c194b3B0aW9uc19pbnZhbGlkKHNlbGYpOgorICAgICAgICBmb3IgbmZyYW1lIGluICgtMSwgMCwgMioqMzApOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QobmZyYW1lPW5mcmFtZSk6CisgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LlN1cHByZXNzQ3Jhc2hSZXBvcnQoKToKKyAgICAgICAgICAgICAgICAgICAgYXJncyA9ICgnLVgnLCAndHJhY2VtYWxsb2M9JXMnICUgbmZyYW1lLCAnLWMnLCAncGFzcycpCisgICAgICAgICAgICAgICAgICAgIG9rLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fZmFpbHVyZSgqYXJncykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiJy1YIHRyYWNlbWFsbG9jPU5GUkFNRTogaW52YWxpZCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYidudW1iZXIgb2YgZnJhbWVzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnIpCisKKyAgICBkZWYgdGVzdF9weW1lbV9hbGxvYzAoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIxNjM5OiBDaGVjayB0aGF0IFB5TWVtX01hbGxvYygwKSB3aXRoIHRyYWNlbWFsbG9jIGVuYWJsZWQKKyAgICAgICAgIyBkb2VzIG5vdCBjcmFzaC4KKyAgICAgICAgY29kZSA9ICdpbXBvcnQgX3Rlc3RjYXBpOyBfdGVzdGNhcGkudGVzdF9weW1lbV9hbGxvYzAoKTsgMScKKyAgICAgICAgYXNzZXJ0X3B5dGhvbl9vaygnLVgnLCAndHJhY2VtYWxsb2MnLCAnLWMnLCBjb2RlKQorCisKK2RlZiB0ZXN0X21haW4oKToKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgKKyAgICAgICAgVGVzdFRyYWNlbWFsbG9jRW5hYmxlZCwKKyAgICAgICAgVGVzdFNuYXBzaG90LAorICAgICAgICBUZXN0RmlsdGVycywKKyAgICAgICAgVGVzdENvbW1hbmRMaW5lLAorICAgICkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weSBiL0xpYi90ZXN0L3Rlc3RfdHRrX2d1aW9ubHkucHkKaW5kZXggM2EzNDU5Yi4uZmNkZWRhYyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF90dGtfZ3Vpb25seS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3R0a19ndWlvbmx5LnB5CkBAIC02LDM1ICs2LDMyIEBACiBzdXBwb3J0LmltcG9ydF9tb2R1bGUoJ190a2ludGVyJykKIAogIyBNYWtlIHN1cmUgdGtpbnRlci5fZml4IHJ1bnMgdG8gc2V0IHVwIHRoZSBlbnZpcm9ubWVudAotc3VwcG9ydC5pbXBvcnRfZnJlc2hfbW9kdWxlKCd0a2ludGVyJykKK3RraW50ZXIgPSBzdXBwb3J0LmltcG9ydF9mcmVzaF9tb2R1bGUoJ3RraW50ZXInKQogCiAjIFNraXAgdGVzdCBpZiB0ayBjYW5ub3QgYmUgaW5pdGlhbGl6ZWQuCi1mcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBjaGVja190a19hdmFpbGFiaWxpdHkKLWNoZWNrX3RrX2F2YWlsYWJpbGl0eSgpCitzdXBwb3J0LnJlcXVpcmVzKCdndWknKQogCiBmcm9tIF90a2ludGVyIGltcG9ydCBUY2xFcnJvcgogZnJvbSB0a2ludGVyIGltcG9ydCB0dGsKIGZyb20gdGtpbnRlci50ZXN0IGltcG9ydCBydW50a3Rlc3RzCi1mcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBnZXRfdGtfcm9vdAogCityb290ID0gTm9uZQogdHJ5OgotICAgIHR0ay5CdXR0b24oKQorICAgIHJvb3QgPSB0a2ludGVyLlRrKCkKKyAgICBidXR0b24gPSB0dGsuQnV0dG9uKHJvb3QpCisgICAgYnV0dG9uLmRlc3Ryb3koKQorICAgIGRlbCBidXR0b24KIGV4Y2VwdCBUY2xFcnJvciBhcyBtc2c6CiAgICAgIyBhc3N1bWluZyB0dGsgaXMgbm90IGF2YWlsYWJsZQogICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJ0dGsgbm90IGF2YWlsYWJsZTogJXMiICUgbXNnKQorZmluYWxseToKKyAgICBpZiByb290IGlzIG5vdCBOb25lOgorICAgICAgICByb290LmRlc3Ryb3koKQorICAgIGRlbCByb290CiAKLWRlZiB0ZXN0X21haW4oZW5hYmxlX2d1aT1GYWxzZSk6Ci0gICAgaWYgZW5hYmxlX2d1aToKLSAgICAgICAgaWYgc3VwcG9ydC51c2VfcmVzb3VyY2VzIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdXBwb3J0LnVzZV9yZXNvdXJjZXMgPSBbJ2d1aSddCi0gICAgICAgIGVsaWYgJ2d1aScgbm90IGluIHN1cHBvcnQudXNlX3Jlc291cmNlczoKLSAgICAgICAgICAgIHN1cHBvcnQudXNlX3Jlc291cmNlcy5hcHBlbmQoJ2d1aScpCi0KLSAgICB0cnk6Ci0gICAgICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KAotICAgICAgICAgICAgICAgICpydW50a3Rlc3RzLmdldF90ZXN0cyh0ZXh0PUZhbHNlLCBwYWNrYWdlcz1bJ3Rlc3RfdHRrJ10pKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIGdldF90a19yb290KCkuZGVzdHJveSgpCitkZWYgdGVzdF9tYWluKCk6CisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCisgICAgICAgICAgICAqcnVudGt0ZXN0cy5nZXRfdGVzdHModGV4dD1GYWxzZSwgcGFja2FnZXM9Wyd0ZXN0X3R0ayddKSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oZW5hYmxlX2d1aT1UcnVlKQorICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5IGIvTGliL3Rlc3QvdGVzdF90dXBsZS5weQppbmRleCBlNDE3MTFjLi41MTg3NWExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3R1cGxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdHVwbGUucHkKQEAgLTE2OSwyOSArMTY5LDMxIEBACiAgICAgICAgICMgVXNlcmxpc3QgaXRlcmF0b3JzIGRvbid0IHN1cHBvcnQgcGlja2xpbmcgeWV0IHNpbmNlCiAgICAgICAgICMgdGhleSBhcmUgYmFzZWQgb24gZ2VuZXJhdG9ycy4KICAgICAgICAgZGF0YSA9IHNlbGYudHlwZTJ0ZXN0KFs0LCA1LCA2LCA3XSkKLSAgICAgICAgaXRvcmcgPSBpdGVyKGRhdGEpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXRvcmcpCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHlwZShpdG9yZyksIHR5cGUoaXQpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QoZGF0YSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgaXRvcmcgPSBpdGVyKGRhdGEpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0b3JnLCBwcm90bykKKyAgICAgICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR5cGUoaXRvcmcpLCB0eXBlKGl0KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChkYXRhKSkKIAotICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQotICAgICAgICBuZXh0KGl0KQotICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QoZGF0YSlbMTpdKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChkYXRhKVsxOl0pCiAKICAgICBkZWYgdGVzdF9yZXZlcnNlZF9waWNrbGUoc2VsZik6CiAgICAgICAgIGRhdGEgPSBzZWxmLnR5cGUydGVzdChbNCwgNSwgNiwgN10pCi0gICAgICAgIGl0b3JnID0gcmV2ZXJzZWQoZGF0YSkKLSAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZykKLSAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChyZXZlcnNlZChkYXRhKSkpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgaXRvcmcgPSByZXZlcnNlZChkYXRhKQorICAgICAgICAgICAgZCA9IHBpY2tsZS5kdW1wcyhpdG9yZywgcHJvdG8pCisgICAgICAgICAgICBpdCA9IHBpY2tsZS5sb2FkcyhkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKGl0b3JnKSwgdHlwZShpdCkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHlwZTJ0ZXN0KGl0KSwgc2VsZi50eXBlMnRlc3QocmV2ZXJzZWQoZGF0YSkpKQogCi0gICAgICAgIGl0ID0gcGlja2xlLmxvYWRzKGQpCi0gICAgICAgIG5leHQoaXQpCi0gICAgICAgIGQgPSBwaWNrbGUuZHVtcHMoaXQpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChyZXZlcnNlZChkYXRhKSlbMTpdKQorICAgICAgICAgICAgaXQgPSBwaWNrbGUubG9hZHMoZCkKKyAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBkID0gcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50eXBlMnRlc3QoaXQpLCBzZWxmLnR5cGUydGVzdChyZXZlcnNlZChkYXRhKSlbMTpdKQogCiAgICAgZGVmIHRlc3Rfbm9fY29tZGF0X2ZvbGRpbmcoc2VsZik6CiAgICAgICAgICMgSXNzdWUgODg0NzogSW4gdGhlIFBHTyBidWlsZCwgdGhlIE1TVkMgbGlua2VyJ3MgQ09NREFUIGZvbGRpbmcKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkgYi9MaWIvdGVzdC90ZXN0X3R5cGVzLnB5CmluZGV4IDNlZTRjNmIuLjg0OWNiYTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdHlwZXMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90eXBlcy5weQpAQCAtMiw2ICsyLDcgQEAKIAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcnVuX3dpdGhfbG9jYWxlCiBpbXBvcnQgY29sbGVjdGlvbnMKK2ltcG9ydCBwaWNrbGUKIGltcG9ydCBsb2NhbGUKIGltcG9ydCBzeXMKIGltcG9ydCB0eXBlcwpAQCAtMTA3Nyw5ICsxMDc4LDE5IEBACiAgICAgICAgIG5zMiA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCiAgICAgICAgIG5zMi54ID0gInNwYW0iCiAgICAgICAgIG5zMi5feSA9IDUKKyAgICAgICAgbmFtZSA9ICJuYW1lc3BhY2UiCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksICJuYW1lc3BhY2Uodz0zLCB4PTEsIHk9MikiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMyKSwgIm5hbWVzcGFjZShfeT01LCB4PSdzcGFtJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwgIntuYW1lfSh3PTMsIHg9MSwgeT0yKSIuZm9ybWF0KG5hbWU9bmFtZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLCAie25hbWV9KF95PTUsIHg9J3NwYW0nKSIuZm9ybWF0KG5hbWU9bmFtZSkpCisKKyAgICBkZWYgdGVzdF9lcXVhbChzZWxmKToKKyAgICAgICAgbnMxID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKHg9MSkKKyAgICAgICAgbnMyID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkKKyAgICAgICAgbnMyLnggPSAxCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKSwgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMxLCBuczIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwobnMyLCB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoKSkKIAogICAgIGRlZiB0ZXN0X25lc3RlZChzZWxmKToKICAgICAgICAgbnMxID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKGE9MSwgYj0yKQpAQCAtMTExNywxMSArMTEyOCwxMiBAQAogICAgICAgICBuczEuc3BhbSA9IG5zMQogICAgICAgICBuczIuc3BhbSA9IG5zMwogICAgICAgICBuczMuc3BhbSA9IG5zMgorICAgICAgICBuYW1lID0gIm5hbWVzcGFjZSIKKyAgICAgICAgcmVwcjEgPSAie25hbWV9KGM9J2Nvb2tpZScsIHNwYW09e25hbWV9KC4uLikpIi5mb3JtYXQobmFtZT1uYW1lKQorICAgICAgICByZXByMiA9ICJ7bmFtZX0oc3BhbT17bmFtZX0oc3BhbT17bmFtZX0oLi4uKSwgeD0xKSkiLmZvcm1hdChuYW1lPW5hbWUpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKG5zMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWVzcGFjZShjPSdjb29raWUnLCBzcGFtPW5hbWVzcGFjZSguLi4pKSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lc3BhY2Uoc3BhbT1uYW1lc3BhY2Uoc3BhbT1uYW1lc3BhY2UoLi4uKSwgeD0xKSkiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcHIobnMxKSwgcmVwcjEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcihuczIpLCByZXByMikKIAogICAgIGRlZiB0ZXN0X2FzX2RpY3Qoc2VsZik6CiAgICAgICAgIG5zID0gdHlwZXMuU2ltcGxlTmFtZXNwYWNlKHNwYW09J3NwYW1zcGFtc3BhbScpCkBAIC0xMTQ0LDYgKzExNTYsMzUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHNwYW0pLCBTcGFtKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZhcnMoc3BhbSksIHsnaGFtJzogOCwgJ2VnZ3MnOiA5fSkKIAorICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKKyAgICAgICAgbnMgPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoYnJlYWtmYXN0PSJzcGFtIiwgbHVuY2g9InNwYW0iKQorCisgICAgICAgIGZvciBwcm90b2NvbCBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcG5hbWUgPSAicHJvdG9jb2wge30iLmZvcm1hdChwcm90b2NvbCkKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBuc19waWNrbGVkID0gcGlja2xlLmR1bXBzKG5zLCBwcm90b2NvbCkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IocG5hbWUpIGZyb20gZQorICAgICAgICAgICAgbnNfcm91bmR0cmlwID0gcGlja2xlLmxvYWRzKG5zX3BpY2tsZWQpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobnMsIG5zX3JvdW5kdHJpcCwgcG5hbWUpCisKKyAgICBkZWYgdGVzdF9mYWtlX25hbWVzcGFjZV9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMyNDI1NzogSW5jb3JyZWN0IHVzZSBvZiBQeU9iamVjdF9Jc0luc3RhbmNlKCkgY2F1c2VkCisgICAgICAgICMgU3lzdGVtRXJyb3IuCisgICAgICAgIGNsYXNzIEZha2VTaW1wbGVOYW1lc3BhY2Uoc3RyKToKKyAgICAgICAgICAgIF9fY2xhc3NfXyA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpID09IEZha2VTaW1wbGVOYW1lc3BhY2UoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpICE9IEZha2VTaW1wbGVOYW1lc3BhY2UoKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkgPCBGYWtlU2ltcGxlTmFtZXNwYWNlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgdHlwZXMuU2ltcGxlTmFtZXNwYWNlKCkgPD0gRmFrZVNpbXBsZU5hbWVzcGFjZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpID4gRmFrZVNpbXBsZU5hbWVzcGFjZSgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpID49IEZha2VTaW1wbGVOYW1lc3BhY2UoKQorCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBydW5fdW5pdHRlc3QoVHlwZXNUZXN0cywgTWFwcGluZ1Byb3h5VGVzdHMsIENsYXNzQ3JlYXRpb25UZXN0cywKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdWNuLnB5IGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKaW5kZXggZGU3MTY4MC4uMWUwN2Y2NiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91Y24ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91Y24ucHkKQEAgLTE3MiwxMiArMTcyLDEyIEBACiAKICAgICBkZWYgdGVzdF9uYW1lZF9zZXF1ZW5jZXNfZnVsbChzZWxmKToKICAgICAgICAgIyBDaGVjayBhbGwgdGhlIG5hbWVkIHNlcXVlbmNlcwotICAgICAgICB1cmwgPSAoImh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLyVzL3VjZC9OYW1lZFNlcXVlbmNlcy50eHQiICUKKyAgICAgICAgdXJsID0gKCJodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3VuaWNvZGUvJXMvTmFtZWRTZXF1ZW5jZXMudHh0IiAlCiAgICAgICAgICAgICAgICB1bmljb2RlZGF0YS51bmlkYXRhX3ZlcnNpb24pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RkYXRhID0gc3VwcG9ydC5vcGVuX3VybHJlc291cmNlKHVybCwgZW5jb2Rpbmc9InV0Zi04IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrPWNoZWNrX3ZlcnNpb24pCi0gICAgICAgIGV4Y2VwdCAoSU9FcnJvciwgSFRUUEV4Y2VwdGlvbik6CisgICAgICAgIGV4Y2VwdCAoT1NFcnJvciwgSFRUUEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJDb3VsZCBub3QgcmV0cmlldmUgIiArIHVybCkKICAgICAgICAgc2VsZi5hZGRDbGVhbnVwKHRlc3RkYXRhLmNsb3NlKQogICAgICAgICBmb3IgbGluZSBpbiB0ZXN0ZGF0YToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQppbmRleCBlZjBmZDFjLi5mMDQ2OTM4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CkBAIC03LDYgKzcsNyBAQAogIiIiIyIKIGltcG9ydCBfc3RyaW5nCiBpbXBvcnQgY29kZWNzCitpbXBvcnQgaXRlcnRvb2xzCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBpbXBvcnQgdW5pdHRlc3QKQEAgLTMxLDYgKzMyLDE5IEBACiAgICAgICAgIHJldHVybiBOb25lCiBjb2RlY3MucmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKQogCitkZWYgZHVwbGljYXRlX3N0cmluZyh0ZXh0KToKKyAgICAiIiIKKyAgICBUcnkgdG8gZ2V0IGEgZnJlc2ggY2xvbmUgb2YgdGhlIHNwZWNpZmllZCB0ZXh0OgorICAgIG5ldyBvYmplY3Qgd2l0aCBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgorCisgICAgVGhpcyBpcyBhIGJlc3QtZWZmb3J0OiBsYXRpbjEgc2luZ2xlIGxldHRlcnMgYW5kIHRoZSBlbXB0eQorICAgIHN0cmluZyAoJycpIGFyZSBzaW5nbGV0b25zIGFuZCBjYW5ub3QgYmUgY2xvbmVkLgorICAgICIiIgorICAgIHJldHVybiB0ZXh0LmVuY29kZSgpLmRlY29kZSgpCisKK2NsYXNzIFN0clN1YmNsYXNzKHN0cik6CisgICAgcGFzcworCiBjbGFzcyBVbmljb2RlVGVzdChzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdCwKICAgICAgICAgc3RyaW5nX3Rlc3RzLk1peGluU3RyVW5pY29kZVVzZXJTdHJpbmdUZXN0LAogICAgICAgICBzdHJpbmdfdGVzdHMuTWl4aW5TdHJVbmljb2RlVGVzdCwKQEAgLTE2OSw2ICsxODMsMTkgQEAKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMywgJ2FhYScsICdjb3VudCcsICAnYScsIC0xMCkKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMiwgJ2FhYScsICdjb3VudCcsICAnYScsIDAsIC0xKQogICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCgwLCAnYWFhJywgJ2NvdW50JywgICdhJywgMCwgLTEwKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwLCAnXHUwMTAyJyArICdhJyAqIDEwLCAnY291bnQnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMCwgJ1xVMDAxMDAzMDQnICsgJ2EnICogMTAsICdjb3VudCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwLCAnXFUwMDEwMDMwNCcgKyAnXHUwMTAyJyAqIDEwLCAnY291bnQnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhJyAqIDEwLCAnY291bnQnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhJyAqIDEwLCAnY291bnQnLCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnXHUwMTAyJyAqIDEwLCAnY291bnQnLCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMCwgJ1x1MDEwMicgKyAnYV8nICogMTAsICdjb3VudCcsICdhXycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMCwgJ1xVMDAxMDAzMDQnICsgJ2FfJyAqIDEwLCAnY291bnQnLCAnYV8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTAsICdcVTAwMTAwMzA0JyArICdcdTAxMDJfJyAqIDEwLCAnY291bnQnLCAnXHUwMTAyXycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYScgKiAxMCwgJ2NvdW50JywgJ2FcdTAxMDInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ2EnICogMTAsICdjb3VudCcsICdhXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnXHUwMTAyJyAqIDEwLCAnY291bnQnLCAnXHUwMTAyXFUwMDEwMDMwNCcpCiAKICAgICBkZWYgdGVzdF9maW5kKHNlbGYpOgogICAgICAgICBzdHJpbmdfdGVzdHMuQ29tbW9uVGVzdC50ZXN0X2ZpbmQoc2VsZikKQEAgLTE4Nyw2ICsyMTQsMTkgQEAKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICdoZWxsbycuZmluZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCAnaGVsbG8nLmZpbmQsIDQyKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1x1MDEwMicgKiAxMDAgKyAnYScsICdmaW5kJywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTAwLCAnXFUwMDEwMDMwNCcgKiAxMDAgKyAnYScsICdmaW5kJywgJ2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTAwLCAnXFUwMDEwMDMwNCcgKiAxMDAgKyAnXHUwMTAyJywgJ2ZpbmQnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYScgKiAxMDAsICdmaW5kJywgJ1x1MDEwMicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2EnICogMTAwLCAnZmluZCcsICdcVTAwMTAwMzA0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnXHUwMTAyJyAqIDEwMCwgJ2ZpbmQnLCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMDAsICdcdTAxMDInICogMTAwICsgJ2FfJywgJ2ZpbmQnLCAnYV8nKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMTAwLCAnXFUwMDEwMDMwNCcgKiAxMDAgKyAnYV8nLCAnZmluZCcsICdhXycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMDAsICdcVTAwMTAwMzA0JyAqIDEwMCArICdcdTAxMDJfJywgJ2ZpbmQnLCAnXHUwMTAyXycpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2EnICogMTAwLCAnZmluZCcsICdhXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYScgKiAxMDAsICdmaW5kJywgJ2FcVTAwMTAwMzA0JykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnXHUwMTAyJyAqIDEwMCwgJ2ZpbmQnLCAnXHUwMTAyXFUwMDEwMDMwNCcpCiAKICAgICBkZWYgdGVzdF9yZmluZChzZWxmKToKICAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9yZmluZChzZWxmKQpAQCAtMjAyLDYgKzI0MiwxOSBAQAogICAgICAgICBzZWxmLmNoZWNrZXF1YWxub2ZpeCg5LCAgICdhYmNkZWZnaGlhYmMnLCAncmZpbmQnLCAnYWJjJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoMTIsICAnYWJjZGVmZ2hpYWJjJywgJ3JmaW5kJywgJycpCiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KDEyLCAnYWJjZGVmZ2hpYWJjJywgJ3JmaW5kJywgICcnKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhJyArICdcdTAxMDInICogMTAwLCAncmZpbmQnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYScgKyAnXFUwMDEwMDMwNCcgKiAxMDAsICdyZmluZCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdcdTAxMDInICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmZpbmQnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKC0xLCAnYScgKiAxMDAsICdyZmluZCcsICdcdTAxMDInKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdhJyAqIDEwMCwgJ3JmaW5kJywgJ1xVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdcdTAxMDInICogMTAwLCAncmZpbmQnLCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnX2EnICsgJ1x1MDEwMicgKiAxMDAsICdyZmluZCcsICdfYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnX2EnICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmZpbmQnLCAnX2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ19cdTAxMDInICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmZpbmQnLCAnX1x1MDEwMicpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2EnICogMTAwLCAncmZpbmQnLCAnXHUwMTAyYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgtMSwgJ2EnICogMTAwLCAncmZpbmQnLCAnXFUwMDEwMDMwNGEnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoLTEsICdcdTAxMDInICogMTAwLCAncmZpbmQnLCAnXFUwMDEwMDMwNFx1MDEwMicpCiAKICAgICBkZWYgdGVzdF9pbmRleChzZWxmKToKICAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9pbmRleChzZWxmKQpAQCAtMjEzLDYgKzI2NiwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAnYWJjZGVmZ2hpYWInLmluZGV4LCAgJ2FiYycsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLmluZGV4LCAgJ2doaScsIDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLmluZGV4LCAgJ2doaScsIC0xKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1x1MDEwMicgKiAxMDAgKyAnYScsICdpbmRleCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1xVMDAxMDAzMDQnICogMTAwICsgJ2EnLCAnaW5kZXgnLCAnYScpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMDAsICdcVTAwMTAwMzA0JyAqIDEwMCArICdcdTAxMDInLCAnaW5kZXgnLCAnXHUwMTAyJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKCdhJyAqIDEwMCkuaW5kZXgsICdcdTAxMDInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ2EnICogMTAwKS5pbmRleCwgJ1xVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ1x1MDEwMicgKiAxMDApLmluZGV4LCAnXFUwMDEwMDMwNCcpCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgxMDAsICdcdTAxMDInICogMTAwICsgJ2FfJywgJ2luZGV4JywgJ2FfJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1xVMDAxMDAzMDQnICogMTAwICsgJ2FfJywgJ2luZGV4JywgJ2FfJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDEwMCwgJ1xVMDAxMDAzMDQnICogMTAwICsgJ1x1MDEwMl8nLCAnaW5kZXgnLCAnXHUwMTAyXycpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgnYScgKiAxMDApLmluZGV4LCAnYVx1MDEwMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgnYScgKiAxMDApLmluZGV4LCAnYVxVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ1x1MDEwMicgKiAxMDApLmluZGV4LCAnXHUwMTAyXFUwMDEwMDMwNCcpCiAKICAgICBkZWYgdGVzdF9yaW5kZXgoc2VsZik6CiAgICAgICAgIHN0cmluZ190ZXN0cy5Db21tb25UZXN0LnRlc3RfcmluZGV4KHNlbGYpCkBAIC0yMjYsNiArMjkyLDE5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdkZWZnaGlhYmMnLnJpbmRleCwgICdhYmMnLCAwLCAtMSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgJ2FiY2RlZmdoaScucmluZGV4LCAgJ2doaScsIDAsIDgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICdhYmNkZWZnaGknLnJpbmRleCwgICdnaGknLCAwLCAtMSkKKyAgICAgICAgIyB0ZXN0IG1peGVkIGtpbmRzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgwLCAnYScgKyAnXHUwMTAyJyAqIDEwMCwgJ3JpbmRleCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdhJyArICdcVTAwMTAwMzA0JyAqIDEwMCwgJ3JpbmRleCcsICdhJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdcdTAxMDInICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmluZGV4JywgJ1x1MDEwMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgnYScgKiAxMDApLnJpbmRleCwgJ1x1MDEwMicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICgnYScgKiAxMDApLnJpbmRleCwgJ1xVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ1x1MDEwMicgKiAxMDApLnJpbmRleCwgJ1xVMDAxMDAzMDQnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ19hJyArICdcdTAxMDInICogMTAwLCAncmluZGV4JywgJ19hJykKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKDAsICdfYScgKyAnXFUwMDEwMDMwNCcgKiAxMDAsICdyaW5kZXgnLCAnX2EnKQorICAgICAgICBzZWxmLmNoZWNrZXF1YWwoMCwgJ19cdTAxMDInICsgJ1xVMDAxMDAzMDQnICogMTAwLCAncmluZGV4JywgJ19cdTAxMDInKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ2EnICogMTAwKS5yaW5kZXgsICdcdTAxMDJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgKCdhJyAqIDEwMCkucmluZGV4LCAnXFUwMDEwMDMwNGEnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAoJ1x1MDEwMicgKiAxMDApLnJpbmRleCwgJ1xVMDAxMDAzMDRcdTAxMDInKQogCiAgICAgZGVmIHRlc3RfbWFrZXRyYW5zX3RyYW5zbGF0ZShzZWxmKToKICAgICAgICAgIyB0aGVzZSB3b3JrIHdpdGggcGxhaW4gdHJhbnNsYXRlKCkKQEAgLTI2Niw2ICszNDUsNjkgQEAKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgJy8vJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoWydhJywgJ2InLCAnYycsICdkJ10sICdhLy9iLy9jLy9kJywgJ3NwbGl0JywgJy8vJykKICAgICAgICAgc2VsZi5jaGVja2VxdWFsbm9maXgoWydlbmRjYXNlICcsICcnXSwgJ2VuZGNhc2UgdGVzdCcsICdzcGxpdCcsICd0ZXN0JykKKyAgICAgICAgIyB0ZXN0IG1peGVkIGtpbmRzCisgICAgICAgIGZvciBsZWZ0LCByaWdodCBpbiAoJ2JhJywgJ1x1MDEwMVx1MDEwMCcsICdcVTAwMDEwMzAxXFUwMDAxMDMwMCcpOgorICAgICAgICAgICAgbGVmdCAqPSA5CisgICAgICAgICAgICByaWdodCAqPSA5CisgICAgICAgICAgICBmb3IgZGVsaW0gaW4gKCdjJywgJ1x1MDEwMicsICdcVTAwMDEwMzAyJyk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFtsZWZ0ICsgcmlnaHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgcmlnaHQsICdzcGxpdCcsIGRlbGltKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChbbGVmdCwgcmlnaHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgZGVsaW0gKyByaWdodCwgJ3NwbGl0JywgZGVsaW0pCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFtsZWZ0ICsgcmlnaHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgcmlnaHQsICdzcGxpdCcsIGRlbGltICogMikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW2xlZnQsIHJpZ2h0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICogMiArIHJpZ2h0LCAnc3BsaXQnLCBkZWxpbSAqMikKKworICAgIGRlZiB0ZXN0X3JzcGxpdChzZWxmKToKKyAgICAgICAgc3RyaW5nX3Rlc3RzLkNvbW1vblRlc3QudGVzdF9yc3BsaXQoc2VsZikKKyAgICAgICAgIyB0ZXN0IG1peGVkIGtpbmRzCisgICAgICAgIGZvciBsZWZ0LCByaWdodCBpbiAoJ2JhJywgJ1x1MDEwMVx1MDEwMCcsICdcVTAwMDEwMzAxXFUwMDAxMDMwMCcpOgorICAgICAgICAgICAgbGVmdCAqPSA5CisgICAgICAgICAgICByaWdodCAqPSA5CisgICAgICAgICAgICBmb3IgZGVsaW0gaW4gKCdjJywgJ1x1MDEwMicsICdcVTAwMDEwMzAyJyk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKFtsZWZ0ICsgcmlnaHRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0ICsgcmlnaHQsICdyc3BsaXQnLCBkZWxpbSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW2xlZnQsIHJpZ2h0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICsgcmlnaHQsICdyc3BsaXQnLCBkZWxpbSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW2xlZnQgKyByaWdodF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyByaWdodCwgJ3JzcGxpdCcsIGRlbGltICogMikKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoW2xlZnQsIHJpZ2h0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICogMiArIHJpZ2h0LCAncnNwbGl0JywgZGVsaW0gKjIpCisKKyAgICBkZWYgdGVzdF9wYXJ0aXRpb24oc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X3BhcnRpdGlvbihzZWxmKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnQUJDREVGR0gnLCAnJywgJycpLCAnQUJDREVGR0gnLCAncGFydGl0aW9uJywgJ1x1NDIwMCcpCisgICAgICAgIGZvciBsZWZ0LCByaWdodCBpbiAoJ2JhJywgJ1x1MDEwMVx1MDEwMCcsICdcVTAwMDEwMzAxXFUwMDAxMDMwMCcpOgorICAgICAgICAgICAgbGVmdCAqPSA5CisgICAgICAgICAgICByaWdodCAqPSA5CisgICAgICAgICAgICBmb3IgZGVsaW0gaW4gKCdjJywgJ1x1MDEwMicsICdcVTAwMDEwMzAyJyk6CisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKChsZWZ0ICsgcmlnaHQsICcnLCAnJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyByaWdodCwgJ3BhcnRpdGlvbicsIGRlbGltKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgobGVmdCwgZGVsaW0sIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICsgcmlnaHQsICdwYXJ0aXRpb24nLCBkZWxpbSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKGxlZnQgKyByaWdodCwgJycsICcnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIHJpZ2h0LCAncGFydGl0aW9uJywgZGVsaW0gKiAyKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgobGVmdCwgZGVsaW0gKiAyLCByaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyBkZWxpbSAqIDIgKyByaWdodCwgJ3BhcnRpdGlvbicsIGRlbGltICogMikKKworICAgIGRlZiB0ZXN0X3JwYXJ0aXRpb24oc2VsZik6CisgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X3JwYXJ0aXRpb24oc2VsZikKKyAgICAgICAgIyB0ZXN0IG1peGVkIGtpbmRzCisgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgoJycsICcnLCAnQUJDREVGR0gnKSwgJ0FCQ0RFRkdIJywgJ3JwYXJ0aXRpb24nLCAnXHU0MjAwJykKKyAgICAgICAgZm9yIGxlZnQsIHJpZ2h0IGluICgnYmEnLCAnXHUwMTAxXHUwMTAwJywgJ1xVMDAwMTAzMDFcVTAwMDEwMzAwJyk6CisgICAgICAgICAgICBsZWZ0ICo9IDkKKyAgICAgICAgICAgIHJpZ2h0ICo9IDkKKyAgICAgICAgICAgIGZvciBkZWxpbSBpbiAoJ2MnLCAnXHUwMTAyJywgJ1xVMDAwMTAzMDInKToKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwoKCcnLCAnJywgbGVmdCArIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIHJpZ2h0LCAncnBhcnRpdGlvbicsIGRlbGltKQorICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbCgobGVmdCwgZGVsaW0sIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICsgcmlnaHQsICdycGFydGl0aW9uJywgZGVsaW0pCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKCgnJywgJycsIGxlZnQgKyByaWdodCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyByaWdodCwgJ3JwYXJ0aXRpb24nLCBkZWxpbSAqIDIpCisgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKChsZWZ0LCBkZWxpbSAqIDIsIHJpZ2h0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICogMiArIHJpZ2h0LCAncnBhcnRpdGlvbicsIGRlbGltICogMikKIAogICAgIGRlZiB0ZXN0X2pvaW4oc2VsZik6CiAgICAgICAgIHN0cmluZ190ZXN0cy5NaXhpblN0clVuaWNvZGVVc2VyU3RyaW5nVGVzdC50ZXN0X2pvaW4oc2VsZikKQEAgLTI5Myw2ICs0MzUsMjIgQEAKICAgICAgICAgIyBtZXRob2QgY2FsbCBmb3J3YXJkZWQgZnJvbSBzdHIgaW1wbGVtZW50YXRpb24gYmVjYXVzZSBvZiB1bmljb2RlIGFyZ3VtZW50CiAgICAgICAgIHNlbGYuY2hlY2tlcXVhbG5vZml4KCdvbmVAdHdvIXRocmVlIScsICdvbmUhdHdvIXRocmVlIScsICdyZXBsYWNlJywgJyEnLCAnQCcsIDEpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3JlcGxhY2UnLnJlcGxhY2UsICJyIiwgNDIpCisgICAgICAgICMgdGVzdCBtaXhlZCBraW5kcworICAgICAgICBmb3IgbGVmdCwgcmlnaHQgaW4gKCdiYScsICdcdTAxMDFcdTAxMDAnLCAnXFUwMDAxMDMwMVxVMDAwMTAzMDAnKToKKyAgICAgICAgICAgIGxlZnQgKj0gOQorICAgICAgICAgICAgcmlnaHQgKj0gOQorICAgICAgICAgICAgZm9yIGRlbGltIGluICgnYycsICdcdTAxMDInLCAnXFUwMDAxMDMwMicpOgorICAgICAgICAgICAgICAgIGZvciByZXBsIGluICgnZCcsICdcdTAxMDMnLCAnXFUwMDAxMDMwMycpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwobGVmdCArIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIHJpZ2h0LCAncmVwbGFjZScsIGRlbGltLCByZXBsKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrZXF1YWwobGVmdCArIHJlcGwgKyByaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyBkZWxpbSArIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGxhY2UnLCBkZWxpbSwgcmVwbCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja2VxdWFsKGxlZnQgKyByaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQgKyByaWdodCwgJ3JlcGxhY2UnLCBkZWxpbSAqIDIsIHJlcGwpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hlY2tlcXVhbChsZWZ0ICsgcmVwbCArIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCArIGRlbGltICogMiArIHJpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcGxhY2UnLCBkZWxpbSAqIDIsIHJlcGwpCiAKICAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKICAgICBkZWYgdGVzdF9yZXBsYWNlX2lkKHNlbGYpOgpAQCAtNjY1LDcgKzgyMywxNSBAQAogICAgIEBzdXBwb3J0LmNweXRob25fb25seQogICAgIGRlZiB0ZXN0X2Nhc2Vfb3BlcmF0aW9uX292ZXJmbG93KHNlbGYpOgogICAgICAgICAjIElzc3VlICMyMjY0MwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCAoIsO8IiooMioqMzIvLzEyICsgMSkpLnVwcGVyKQorICAgICAgICBzaXplID0gMioqMzIvLzEyICsgMQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzID0gIsO8IiAqIHNpemUKKyAgICAgICAgZXhjZXB0IE1lbW9yeUVycm9yOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgnbm8gZW5vdWdoIG1lbW9yeSAoJS4wZiBNaUIgcmVxdWlyZWQpJyAlIChzaXplIC8gMioqMjApKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPdmVyZmxvd0Vycm9yLCBzLnVwcGVyKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZGVsIHMKIAogICAgIGRlZiB0ZXN0X2NvbnRhaW5zKHNlbGYpOgogICAgICAgICAjIFRlc3RpbmcgVW5pY29kZSBjb250YWlucyBtZXRob2QKQEAgLTY5Nyw2ICs4NjMsMTQgQEAKICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignYXNkZicsICcnKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgImFiYyIuX19jb250YWluc19fKQorICAgICAgICAjIHRlc3QgbWl4ZWQga2luZHMKKyAgICAgICAgZm9yIGZpbGwgaW4gKCdhJywgJ1x1MDEwMCcsICdcVTAwMDEwMzAwJyk6CisgICAgICAgICAgICBmaWxsICo9IDkKKyAgICAgICAgICAgIGZvciBkZWxpbSBpbiAoJ2MnLCAnXHUwMTAyJywgJ1xVMDAwMTAzMDInKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGRlbGltLCBmaWxsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4oZGVsaW0sIGZpbGwgKyBkZWxpbSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKGRlbGltICogMiwgZmlsbCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRlbGltICogMiwgZmlsbCArIGRlbGltICogMikKIAogICAgIGRlZiB0ZXN0X2lzc3VlMTgxODMoc2VsZik6CiAgICAgICAgICdcVTAwMDEwMDAwXFUwMDEwMDAwMCcubG93ZXIoKQpAQCAtODQwLDYgKzEwMTQsMjcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6MTAwMDB9Jy5mb3JtYXQoJycpLCAnICcgKiAxMDAwMCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6MTAwMDAwMDB9Jy5mb3JtYXQoJycpLCAnICcgKiAxMDAwMDAwMCkKIAorICAgICAgICAjIGlzc3VlIDEyNTQ2OiB1c2UgXHgwMCBhcyBhIGZpbGwgY2hhcmFjdGVyCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDA8NnN9Jy5mb3JtYXQoJ2ZvbycpLCAnZm9vXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMTw2c30nLmZvcm1hdCgnZm9vJyksICdmb29ceDAxXHgwMVx4MDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAwXjZzfScuZm9ybWF0KCdmb28nKSwgJ1x4MDBmb29ceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl42c30nLmZvcm1hdCgnZm9vJyksICcgZm9vICAnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDA8Nn0nLmZvcm1hdCgzKSwgJzNceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDE8Nn0nLmZvcm1hdCgzKSwgJzNceDAxXHgwMVx4MDFceDAxXHgwMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOlx4MDBeNn0nLmZvcm1hdCgzKSwgJ1x4MDBceDAwM1x4MDBceDAwXHgwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOjw2fScuZm9ybWF0KDMpLCAnMyAgICAgJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAwPDZ9Jy5mb3JtYXQoMy4xNCksICczLjE0XHgwMFx4MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAxPDZ9Jy5mb3JtYXQoMy4xNCksICczLjE0XHgwMVx4MDEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpceDAwXjZ9Jy5mb3JtYXQoMy4xNCksICdceDAwMy4xNFx4MDAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeNn0nLmZvcm1hdCgzLjE0KSwgJyAzLjE0ICcpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMDwxMn0nLmZvcm1hdCgzKzIuMGopLCAnKDMrMmopXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMTwxMn0nLmZvcm1hdCgzKzIuMGopLCAnKDMrMmopXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XHgwMF4xMn0nLmZvcm1hdCgzKzIuMGopLCAnXHgwMFx4MDBceDAwKDMrMmopXHgwMFx4MDBceDAwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6XjEyfScuZm9ybWF0KDMrMi4waiksICcgICAoMysyaikgICAnKQorCiAgICAgICAgICMgZm9ybWF0IHNwZWNpZmllcnMgZm9yIHVzZXIgZGVmaW5lZCB0eXBlCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOmFiY30nLmZvcm1hdChDKCkpLCAnYWJjJykKIApAQCAtODY5LDExICsxMDY0LDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnezA6ZH0nLmZvcm1hdChHKCdkYXRhJykpLCAnRyhkYXRhKScpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swIXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJ3N0cmluZyBpcyBkYXRhJykKIAotICAgICAgICBtc2cgPSAnb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIGlzIGRlcHJlY2F0ZWQnCi0gICAgICAgIHdpdGggc3VwcG9ydC5jaGVja193YXJuaW5ncygobXNnLCBEZXByZWNhdGlvbldhcm5pbmcpKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOl4xMH0nLmZvcm1hdChFKCdkYXRhJykpLCAnIEUoZGF0YSkgICcpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCd7MDpeMTBzfScuZm9ybWF0KEUoJ2RhdGEnKSksICcgRShkYXRhKSAgJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3swOj4xNXN9Jy5mb3JtYXQoRygnZGF0YScpKSwgJyBzdHJpbmcgaXMgZGF0YScpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOl4xMH0nLmZvcm1hdCwgRSgnZGF0YScpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsICd7MDpeMTBzfScuZm9ybWF0LCBFKCdkYXRhJykpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgJ3swOj4xNXN9Jy5mb3JtYXQsIEcoJ2RhdGEnKSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7MDpkYXRlOiAlWS0lbS0lZH0iLmZvcm1hdChJKHllYXI9MjAwNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aD04LApAQCAtOTA5LDcgKzExMDIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCAiezAiLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInswLn0iLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswLn0iLmZvcm1hdCwgMCkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgInswW30iLmZvcm1hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswW30iLmZvcm1hdCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgInswW30iLmZvcm1hdCwgW10pCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCAgICJ7MF19Ii5mb3JtYXQpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7MC5bXX0iLmZvcm1hdCwgMCkKQEAgLTk2MSw2ICsxMTU0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgJycpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgie1t7fV19Ii5mb3JtYXQoeyJ7fSI6IDV9KSwgIjUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJ7W3t9XX0iLmZvcm1hdCh7Int9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbe119Ii5mb3JtYXQoeyJ7IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbfV19Ii5mb3JtYXQoeyJ9IiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbW119Ii5mb3JtYXQoeyJbIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIntbIV19Ii5mb3JtYXQoeyIhIiA6ICJhIn0pLCAiYSIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXt9Yn0iLmZvcm1hdCwgNDIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsICJ7YXtifSIuZm9ybWF0LCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgIntbfSIuZm9ybWF0LCA0MikKKwogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIweHs6MHs6ZH1YfSIuZm9ybWF0KDB4MCwxNiksICIweDAwMDAwMDAwMDAwMDAwMDAiKQogCiAgICAgZGVmIHRlc3RfZm9ybWF0X21hcChzZWxmKToKQEAgLTExMTQsNiArMTMxNiw2NyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclLjFzJyAlICJhXHhlOVx1MjBhYyIsICdhJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJS4ycycgJSAiYVx4ZTlcdTIwYWMiLCAnYVx4ZTknKQogCisgICAgICAgICNpc3N1ZSAxOTk5NQorICAgICAgICBjbGFzcyBQc3VlZG9JbnQ6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgdmFsdWUpOgorICAgICAgICAgICAgICAgIHNlbGYudmFsdWUgPSBpbnQodmFsdWUpCisgICAgICAgICAgICBkZWYgX19pbnRfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICAgICAgZGVmIF9faW5kZXhfXyhzZWxmKToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICBjbGFzcyBQc3VlZG9GbG9hdDoKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSk6CisgICAgICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGZsb2F0KHZhbHVlKQorICAgICAgICAgICAgZGVmIF9faW50X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludChzZWxmLnZhbHVlKQorICAgICAgICBwaSA9IFBzdWVkb0Zsb2F0KDMuMTQxNSkKKyAgICAgICAgbGV0dGVyX20gPSBQc3VlZG9JbnQoMTA5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcleCcgJSA0MiwgJzJhJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJVgnICUgMTUsICdGJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJW8nICUgOSwgJzExJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJWMnICUgMTA5LCAnbScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJyV4JyAlIGxldHRlcl9tLCAnNmQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclWCcgJSBsZXR0ZXJfbSwgJzZEJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnJW8nICUgbGV0dGVyX20sICcxNTUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCclYycgJSBsZXR0ZXJfbSwgJ20nKQorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgJyV4Jy5fX21vZF9fLCBwaSksCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCAnJXgnLl9fbW9kX18sIDMuMTQpLAorICAgICAgICBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZywgJyVYJy5fX21vZF9fLCAyLjExKSwKKyAgICAgICAgc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcsICclbycuX19tb2RfXywgMS43OSksCisgICAgICAgIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nLCAnJWMnLl9fbW9kX18sIHBpKSwKKworICAgIGRlZiB0ZXN0X2Zvcm1hdHRpbmdfd2l0aF9lbnVtKHNlbGYpOgorICAgICAgICAjIGlzc3VlMTg3ODAKKyAgICAgICAgaW1wb3J0IGVudW0KKyAgICAgICAgY2xhc3MgRmxvYXQoZmxvYXQsIGVudW0uRW51bSk6CisgICAgICAgICAgICBQSSA9IDMuMTQxNTkyNgorICAgICAgICBjbGFzcyBJbnQoZW51bS5JbnRFbnVtKToKKyAgICAgICAgICAgIElERVMgPSAxNQorICAgICAgICBjbGFzcyBTdHIoc3RyLCBlbnVtLkVudW0pOgorICAgICAgICAgICAgQUJDID0gJ2FiYycKKyAgICAgICAgIyBUZXN0aW5nIFVuaWNvZGUgZm9ybWF0dGluZyBzdHJpbmdzLi4uCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiVzLCAlcyIgJSAoU3RyLkFCQywgU3RyLkFCQyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ci5BQkMsIFN0ci5BQkMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCIlcywgJXMsICVkLCAlaSwgJXUsICVmLCAlNS4yZiIgJQorICAgICAgICAgICAgICAgICAgICAgICAgKFN0ci5BQkMsIFN0ci5BQkMsCisgICAgICAgICAgICAgICAgICAgICAgICAgSW50LklERVMsIEludC5JREVTLCBJbnQuSURFUywKKyAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdC5QSSwgRmxvYXQuUEkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICdTdHIuQUJDLCBTdHIuQUJDLCAxNSwgMTUsIDE1LCAzLjE0MTU5MywgIDMuMTQnKQorCisgICAgICAgICMgZm9ybWF0dGluZyBqb2JzIGRlbGVnYXRlZCBmcm9tIHRoZSBzdHJpbmcgaW1wbGVtZW50YXRpb246CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKXMuLi4nICUgeydmb28nOlN0ci5BQkN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5TdHIuQUJDLi4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pcy4uLicgJSB7J2Zvbyc6SW50LklERVN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi5JbnQuSURFUy4uLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJy4uLiUoZm9vKWkuLi4nICUgeydmb28nOkludC5JREVTfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylkLi4uJyAlIHsnZm9vJzpJbnQuSURFU30sCisgICAgICAgICAgICAgICAgICAgICAgICAgJy4uLjE1Li4uJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnLi4uJShmb28pdS4uLicgJSB7J2Zvbyc6SW50LklERVMsICdkZWYnOkZsb2F0LlBJfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLi4uMTUuLi4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcuLi4lKGZvbylmLi4uJyAlIHsnZm9vJzpGbG9hdC5QSSwnZGVmJzoxMjN9LAorICAgICAgICAgICAgICAgICAgICAgICAgICcuLi4zLjE0MTU5My4uLicpCisKICAgICBkZWYgdGVzdF9mb3JtYXR0aW5nX2h1Z2VfcHJlY2lzaW9uKHNlbGYpOgogICAgICAgICBmb3JtYXRfc3RyaW5nID0gIiUue31mIi5mb3JtYXQoc3lzLm1heHNpemUgKyAxKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgpAQCAtMTE1MiwxMSArMTQxNSw4IEBACiAgICAgICAgICAgICAndW5pY29kZSByZW1haW5zIHVuaWNvZGUnCiAgICAgICAgICkKIAotICAgICAgICBjbGFzcyBVbmljb2RlU3ViY2xhc3Moc3RyKToKLSAgICAgICAgICAgIHBhc3MKLQogICAgICAgICBmb3IgdGV4dCBpbiAoJ2FzY2lpJywgJ1x4ZTknLCAnXHUyMGFjJywgJ1xVMDAxMEZGRkYnKToKLSAgICAgICAgICAgIHN1YmNsYXNzID0gVW5pY29kZVN1YmNsYXNzKHRleHQpCisgICAgICAgICAgICBzdWJjbGFzcyA9IFN0clN1YmNsYXNzKHRleHQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihzdWJjbGFzcyksIHRleHQpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzdWJjbGFzcyksIGxlbih0ZXh0KSkKICAgICAgICAgICAgIGlmIHRleHQgPT0gJ2FzY2lpJzoKQEAgLTEyNzIsNyArMTUzMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYicrMkFIYWI5emUtJy5kZWNvZGUoJ3V0Zi03JyksICdcdUQ4MDFcVTAwMGFiY2RlJykKIAogICAgICAgICAjIElzc3VlICMyMjQyOiBjcmFzaCBvbiBzb21lIFdpbmRvd3MvTVNWQyB2ZXJzaW9ucwotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInK1x4YzEnLmRlY29kZSgndXRmLTcnKSwgJ1x4YzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGInK1x4YzEnLmRlY29kZSgndXRmLTcnLCAnaWdub3JlJyksICcnKQogCiAgICAgICAgICMgRGlyZWN0IGVuY29kZWQgY2hhcmFjdGVycwogICAgICAgICBzZXRfZCA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OScoKSwtLi86PyIKQEAgLTEzNDEsOSArMTYwMSw5IEBACiAgICAgZGVmIHRlc3RfdXRmOF9kZWNvZGVfaW52YWxpZF9zZXF1ZW5jZXMoc2VsZik6CiAgICAgICAgICMgY29udGludWF0aW9uIGJ5dGVzIGluIGEgc2VxdWVuY2Ugb2YgMiwgMywgb3IgNCBieXRlcwogICAgICAgICBjb250aW51YXRpb25fYnl0ZXMgPSBbYnl0ZXMoW3hdKSBmb3IgeCBpbiByYW5nZSgweDgwLCAweEMwKV0KLSAgICAgICAgIyBzdGFydCBieXRlcyBvZiBhIDItYnl0ZSBzZXF1ZW5jZSBlcXVpdmFsZW50IHRvIGNvZGVwb2ludHMgPCAweDdGCisgICAgICAgICMgc3RhcnQgYnl0ZXMgb2YgYSAyLWJ5dGUgc2VxdWVuY2UgZXF1aXZhbGVudCB0byBjb2RlIHBvaW50cyA8IDB4N0YKICAgICAgICAgaW52YWxpZF8yQl9zZXFfc3RhcnRfYnl0ZXMgPSBbYnl0ZXMoW3hdKSBmb3IgeCBpbiByYW5nZSgweEMwLCAweEMyKV0KLSAgICAgICAgIyBzdGFydCBieXRlcyBvZiBhIDQtYnl0ZSBzZXF1ZW5jZSBlcXVpdmFsZW50IHRvIGNvZGVwb2ludHMgPiAweDEwRkZGRgorICAgICAgICAjIHN0YXJ0IGJ5dGVzIG9mIGEgNC1ieXRlIHNlcXVlbmNlIGVxdWl2YWxlbnQgdG8gY29kZSBwb2ludHMgPiAweDEwRkZGRgogICAgICAgICBpbnZhbGlkXzRCX3NlcV9zdGFydF9ieXRlcyA9IFtieXRlcyhbeF0pIGZvciB4IGluIHJhbmdlKDB4RjUsIDB4RjgpXQogICAgICAgICBpbnZhbGlkX3N0YXJ0X2J5dGVzID0gKAogICAgICAgICAgICAgY29udGludWF0aW9uX2J5dGVzICsgaW52YWxpZF8yQl9zZXFfc3RhcnRfYnl0ZXMgKwpAQCAtMTcxNCw2ICsxOTc0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCBzdHIsIGInQW5kclwyMDIgeCcsICdhc2NpaScsICdzdHJpY3QnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ0FuZHJcMjAyIHgnLCAnYXNjaWknLCAnaWdub3JlJyksICJBbmRyIHgiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihiJ0FuZHJcMjAyIHgnLCAnYXNjaWknLCAncmVwbGFjZScpLCAnQW5kclx1RkZGRCB4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoYidcMjAyIHgnLCAnYXNjaWknLCAncmVwbGFjZScpLCAnXHVGRkZEIHgnKQogCiAgICAgICAgICMgRXJyb3IgaGFuZGxpbmcgKHVua25vd24gY2hhcmFjdGVyIG5hbWVzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiXFxOe2Zvb314eCIuZGVjb2RlKCJ1bmljb2RlLWVzY2FwZSIsICJpZ25vcmUiKSwgInh4IikKQEAgLTE3OTQsMTAgKzIwNTUsMTAgQEAKICAgICAgICAgIyAwLTEyNwogICAgICAgICBzID0gYnl0ZXMocmFuZ2UoMTI4KSkKICAgICAgICAgZm9yIGVuY29kaW5nIGluICgKLSAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLAorICAgICAgICAgICAgJ2NwMDM3JywgJ2NwMTAyNicsICdjcDI3MycsCiAgICAgICAgICAgICAnY3A0MzcnLCAnY3A1MDAnLCAnY3A3MjAnLCAnY3A3MzcnLCAnY3A3NzUnLCAnY3A4NTAnLAogICAgICAgICAgICAgJ2NwODUyJywgJ2NwODU1JywgJ2NwODU4JywgJ2NwODYwJywgJ2NwODYxJywgJ2NwODYyJywKLSAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsCisgICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLCAnY3AxMTI1JywKICAgICAgICAgICAgICdpc284ODU5XzEwJywgJ2lzbzg4NTlfMTMnLCAnaXNvODg1OV8xNCcsICdpc284ODU5XzE1JywKICAgICAgICAgICAgICdpc284ODU5XzInLCAnaXNvODg1OV8zJywgJ2lzbzg4NTlfNCcsICdpc284ODU5XzUnLCAnaXNvODg1OV82JywKICAgICAgICAgICAgICdpc284ODU5XzcnLCAnaXNvODg1OV85JywgJ2tvaThfcicsICdsYXRpbl8xJywKQEAgLTE4MjIsMTAgKzIwODMsMTAgQEAKICAgICAgICAgIyAxMjgtMjU1CiAgICAgICAgIHMgPSBieXRlcyhyYW5nZSgxMjgsIDI1NikpCiAgICAgICAgIGZvciBlbmNvZGluZyBpbiAoCi0gICAgICAgICAgICAnY3AwMzcnLCAnY3AxMDI2JywKKyAgICAgICAgICAgICdjcDAzNycsICdjcDEwMjYnLCAnY3AyNzMnLAogICAgICAgICAgICAgJ2NwNDM3JywgJ2NwNTAwJywgJ2NwNzIwJywgJ2NwNzM3JywgJ2NwNzc1JywgJ2NwODUwJywKICAgICAgICAgICAgICdjcDg1MicsICdjcDg1NScsICdjcDg1OCcsICdjcDg2MCcsICdjcDg2MScsICdjcDg2MicsCi0gICAgICAgICAgICAnY3A4NjMnLCAnY3A4NjUnLCAnY3A4NjYnLAorICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwMTEyNScsCiAgICAgICAgICAgICAnaXNvODg1OV8xMCcsICdpc284ODU5XzEzJywgJ2lzbzg4NTlfMTQnLCAnaXNvODg1OV8xNScsCiAgICAgICAgICAgICAnaXNvODg1OV8yJywgJ2lzbzg4NTlfNCcsICdpc284ODU5XzUnLAogICAgICAgICAgICAgJ2lzbzg4NTlfOScsICdrb2k4X3InLCAnbGF0aW5fMScsCkBAIC0xODg4LDY0ICsyMTQ5LDI5IEBACiAgICAgICAgICAgICBzZWxmLmZhaWwoIlNob3VsZCBoYXZlIHJhaXNlZCBVbmljb2RlRGVjb2RlRXJyb3IiKQogCiAgICAgZGVmIHRlc3RfY29udmVyc2lvbihzZWxmKToKLSAgICAgICAgIyBNYWtlIHN1cmUgX191bmljb2RlX18oKSB3b3JrcyBwcm9wZXJseQotICAgICAgICBjbGFzcyBGb28wOgorICAgICAgICAjIE1ha2Ugc3VyZSBfX3N0cl9fKCkgd29ya3MgcHJvcGVybHkKKyAgICAgICAgY2xhc3MgT2JqZWN0VG9TdHI6CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKIAotICAgICAgICBjbGFzcyBGb28xOgorICAgICAgICBjbGFzcyBTdHJTdWJjbGFzc1RvU3RyKHN0cik6CiAgICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKIAotICAgICAgICBjbGFzcyBGb28yKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKLQotICAgICAgICBjbGFzcyBGb28zKG9iamVjdCk6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKLQotICAgICAgICBjbGFzcyBGb280KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKLQotICAgICAgICBjbGFzcyBGb281KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvbyIKLQotICAgICAgICBjbGFzcyBGb282KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvb3MiCi0KLSAgICAgICAgICAgIGRlZiBfX3N0cl9fKHNlbGYpOgotICAgICAgICAgICAgICAgIHJldHVybiAiZm9vdSIKLQotICAgICAgICBjbGFzcyBGb283KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvb3MiCi0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gImZvb3UiCi0KLSAgICAgICAgY2xhc3MgRm9vOChzdHIpOgorICAgICAgICBjbGFzcyBTdHJTdWJjbGFzc1RvU3RyU3ViY2xhc3Moc3RyKToKICAgICAgICAgICAgIGRlZiBfX25ld19fKGNscywgY29udGVudD0iIik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ci5fX25ld19fKGNscywgMipjb250ZW50KQogICAgICAgICAgICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKIAotICAgICAgICBjbGFzcyBGb285KHN0cik6Ci0gICAgICAgICAgICBkZWYgX19zdHJfXyhzZWxmKToKLSAgICAgICAgICAgICAgICByZXR1cm4gIm5vdCB1bmljb2RlIgotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzAoKSksICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb28xKCkpLCAiZm9vIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vMigpKSwgImZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzMoKSksICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb280KCJiYXIiKSksICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb281KCJiYXIiKSksICJmb28iKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihGb282KCJiYXIiKSksICJmb291IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoRm9vNygiYmFyIikpLCAiZm9vdSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzgoImZvbyIpKSwgImZvb2ZvbyIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKEZvbzkoImZvbyIpKSwgIm5vdCB1bmljb2RlIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoT2JqZWN0VG9TdHIoKSksICJmb28iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihTdHJTdWJjbGFzc1RvU3RyKCJiYXIiKSksICJmb28iKQorICAgICAgICBzID0gc3RyKFN0clN1YmNsYXNzVG9TdHJTdWJjbGFzcygiZm9vIikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgImZvb2ZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModHlwZShzKSwgU3RyU3ViY2xhc3NUb1N0clN1YmNsYXNzKQorICAgICAgICBzID0gU3RyU3ViY2xhc3MoU3RyU3ViY2xhc3NUb1N0clN1YmNsYXNzKCJmb28iKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiZm9vZm9vIikKKyAgICAgICAgc2VsZi5hc3NlcnRJcyh0eXBlKHMpLCBTdHJTdWJjbGFzcykKIAogICAgIGRlZiB0ZXN0X3VuaWNvZGVfcmVwcihzZWxmKToKICAgICAgICAgY2xhc3MgczE6CkBAIC0yMDY4LDEzICsyMjk0LDgyIEBACiAgICAgICAgIGNoZWNrX2Zvcm1hdCgnJWFiYycsCiAgICAgICAgICAgICAgICAgICAgICBiJyUlJXMnLCBiJ2FiYycpCiAKLSAgICAgICAgIyB0ZXN0ICVTCi0gICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1cdTIwYWNBQkMiLAotICAgICAgICAgICAgICAgICAgICAgYidyZXByPSVTJywgJ1x1MjBhY0FCQycpCisgICAgICAgICMgdHJ1bmNhdGVkIHN0cmluZworICAgICAgICBjaGVja19mb3JtYXQoJ2FiYycsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM3MnLCBiJ2FiY2RlZicpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgnYWJjW1x1ZmZmZCcsCisgICAgICAgICAgICAgICAgICAgICBiJyUuNXMnLCAnYWJjW1x1MjBhY10nLmVuY29kZSgndXRmOCcpKQorICAgICAgICBjaGVja19mb3JtYXQoIidcXHUyMGFjQUJDJyIsCisgICAgICAgICAgICAgICAgICAgICBiJyVBJywgJ1x1MjBhY0FCQycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgiJ1xcdTIwIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJS41QScsICdcdTIwYWNBQkNERUYnKQorICAgICAgICBjaGVja19mb3JtYXQoIidcdTIwYWNBQkMnIiwKKyAgICAgICAgICAgICAgICAgICAgIGInJVInLCAnXHUyMGFjQUJDJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCInXHUyMGFjQSIsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1InLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1MnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1UnLCAnXHUyMGFjQUJDREVGJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdcdTIwYWNBQicsCisgICAgICAgICAgICAgICAgICAgICBiJyUuM1YnLCAnXHUyMGFjQUJDREVGJywgTm9uZSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCdhYmNbXHVmZmZkJywKKyAgICAgICAgICAgICAgICAgICAgIGInJS41VicsIE5vbmUsICdhYmNbXHUyMGFjXScuZW5jb2RlKCd1dGY4JykpCiAKLSAgICAgICAgIyB0ZXN0ICVSCi0gICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0nXHUyMGFjQUJDJyIsCi0gICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JVInLCAnXHUyMGFjQUJDJykKKyAgICAgICAgIyBmb2xsb3dpbmcgdGVzdHMgY29tZXMgZnJvbSAjNzMzMAorICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVTCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVTJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yUycsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJTJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlUgorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgJ2FiYyciLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU4UicsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9J2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjNSJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICdhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuM1InLCAnYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVBCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICAnYWJjJyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JThBJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0nYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSUuM0EnLCAnYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgJ2FiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4zQScsICdhYmMnKQorCisgICAgICAgICMgdGVzdCB3aWR0aCBtb2RpZmllciBhbmQgcHJlY2lzaW9uIG1vZGlmaWVyIHdpdGggJXMKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgYWJjIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNXMnLCBiJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4ycycsIGInYWJjJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPSAgIGFiIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lNS4ycycsIGInYWJjJykKKworICAgICAgICAjIHRlc3Qgd2lkdGggbW9kaWZpZXIgYW5kIHByZWNpc2lvbiBtb2RpZmllciB3aXRoICVVCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gIGFiYyIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTVVJywgJ2FiYycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVScsICdhYmMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgYWIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJVJywgJ2FiYycpCisKKyAgICAgICAgIyB0ZXN0IHdpZHRoIG1vZGlmaWVyIGFuZCBwcmVjaXNpb24gbW9kaWZpZXIgd2l0aCAlVgorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICBhYmMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VicsICdhYmMnLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj1hYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JS4yVicsICdhYmMnLCBiJzEyMycpCisgICAgICAgIGNoZWNrX2Zvcm1hdCgicmVwcj0gICBhYiIsCisgICAgICAgICAgICAgICAgICAgICBiJ3JlcHI9JTUuMlYnLCAnYWJjJywgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAxMjMiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1VicsIE5vbmUsIGInMTIzJykKKyAgICAgICAgY2hlY2tfZm9ybWF0KCJyZXByPTEyIiwKKyAgICAgICAgICAgICAgICAgICAgIGIncmVwcj0lLjJWJywgTm9uZSwgYicxMjMnKQorICAgICAgICBjaGVja19mb3JtYXQoInJlcHI9ICAgMTIiLAorICAgICAgICAgICAgICAgICAgICAgYidyZXByPSU1LjJWJywgTm9uZSwgYicxMjMnKQogCiAgICAgICAgICMgdGVzdCBpbnRlZ2VyIGZvcm1hdHMgKCVpLCAlZCwgJXUpCiAgICAgICAgIGNoZWNrX2Zvcm1hdCgnMDEwJywKQEAgLTIxMjUsOCArMjQyMCw4IEBACiAgICAgICAgICAgICAgICAgICAgICBiJyUwMTBpJywgY19pbnQoMTIzKSkKICAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCksCiAgICAgICAgICAgICAgICAgICAgICBiJyUxMDBpJywgY19pbnQoMTIzKSkKLSAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDMwMCwgJzAnKSwKLSAgICAgICAgICAgICAgICAgICAgIGInJS4zMDBpJywgY19pbnQoMTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDBpJywgY19pbnQoMTIzKSkKICAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDgwLCAnMCcpLnJqdXN0KDEwMCksCiAgICAgICAgICAgICAgICAgICAgICBiJyUxMDAuODBpJywgY19pbnQoMTIzKSkKIApAQCAtMjEzNCw4ICsyNDI5LDggQEAKICAgICAgICAgICAgICAgICAgICAgIGInJTAxMHUnLCBjX3VpbnQoMTIzKSkKICAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCksCiAgICAgICAgICAgICAgICAgICAgICBiJyUxMDB1JywgY191aW50KDEyMykpCi0gICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgzMDAsICcwJyksCi0gICAgICAgICAgICAgICAgICAgICBiJyUuMzAwdScsIGNfdWludCgxMjMpKQorICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwLCAnMCcpLAorICAgICAgICAgICAgICAgICAgICAgYiclLjEwMHUnLCBjX3VpbnQoMTIzKSkKICAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDgwLCAnMCcpLnJqdXN0KDEwMCksCiAgICAgICAgICAgICAgICAgICAgICBiJyUxMDAuODB1JywgY191aW50KDEyMykpCiAKQEAgLTIxNDMsOCArMjQzOCw4IEBACiAgICAgICAgICAgICAgICAgICAgICBiJyUwMTB4JywgY19pbnQoMHgxMjMpKQogICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoMTAwKSwKICAgICAgICAgICAgICAgICAgICAgIGInJTEwMHgnLCBjX2ludCgweDEyMykpCi0gICAgICAgIGNoZWNrX2Zvcm1hdCgnMTIzJy5yanVzdCgzMDAsICcwJyksCi0gICAgICAgICAgICAgICAgICAgICBiJyUuMzAweCcsIGNfaW50KDB4MTIzKSkKKyAgICAgICAgY2hlY2tfZm9ybWF0KCcxMjMnLnJqdXN0KDEwMCwgJzAnKSwKKyAgICAgICAgICAgICAgICAgICAgIGInJS4xMDB4JywgY19pbnQoMHgxMjMpKQogICAgICAgICBjaGVja19mb3JtYXQoJzEyMycucmp1c3QoODAsICcwJykucmp1c3QoMTAwKSwKICAgICAgICAgICAgICAgICAgICAgIGInJTEwMC44MHgnLCBjX2ludCgweDEyMykpCiAKQEAgLTIzMDMsNiArMjU5OCw4MCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoYWJjLCBhYmNkZWYpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhYmNkZWYuZGVjb2RlKCd1bmljb2RlX2ludGVybmFsJyksIHRleHQpCiAKKyAgICBkZWYgdGVzdF9jb21wYXJlKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxNzYxNQorICAgICAgICBOID0gMTAKKyAgICAgICAgYXNjaWkgPSAnYScgKiBOCisgICAgICAgIGFzY2lpMiA9ICd6JyAqIE4KKyAgICAgICAgbGF0aW4gPSAnXHg4MCcgKiBOCisgICAgICAgIGxhdGluMiA9ICdceGZmJyAqIE4KKyAgICAgICAgYm1wID0gJ1x1MDEwMCcgKiBOCisgICAgICAgIGJtcDIgPSAnXHVmZmZmJyAqIE4KKyAgICAgICAgYXN0cmFsID0gJ1xVMDAxMDAwMDAnICogTgorICAgICAgICBhc3RyYWwyID0gJ1xVMDAxMGZmZmYnICogTgorICAgICAgICBzdHJpbmdzID0gKAorICAgICAgICAgICAgYXNjaWksIGFzY2lpMiwKKyAgICAgICAgICAgIGxhdGluLCBsYXRpbjIsCisgICAgICAgICAgICBibXAsIGJtcDIsCisgICAgICAgICAgICBhc3RyYWwsIGFzdHJhbDIpCisgICAgICAgIGZvciB0ZXh0MSwgdGV4dDIgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhzdHJpbmdzLCAyKToKKyAgICAgICAgICAgIGVxdWFsID0gKHRleHQxIGlzIHRleHQyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0ZXh0MSA9PSB0ZXh0MiwgZXF1YWwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRleHQxICE9IHRleHQyLCBub3QgZXF1YWwpCisKKyAgICAgICAgICAgIGlmIGVxdWFsOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh0ZXh0MSA8PSB0ZXh0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodGV4dDEgPj0gdGV4dDIpCisKKyAgICAgICAgICAgICAgICAjIHRleHQxIGlzIHRleHQyOiBkdXBsaWNhdGUgc3RyaW5ncyB0byBza2lwIHRoZSAic3RyMSA9PSBzdHIyIgorICAgICAgICAgICAgICAgICMgb3B0aW1pemF0aW9uIGluIHVuaWNvZGVfY29tcGFyZV9lcSgpIGFuZCByZWFsbHkgY29tcGFyZQorICAgICAgICAgICAgICAgICMgY2hhcmFjdGVyIHBlciBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBjb3B5MSA9IGR1cGxpY2F0ZV9zdHJpbmcodGV4dDEpCisgICAgICAgICAgICAgICAgY29weTIgPSBkdXBsaWNhdGVfc3RyaW5nKHRleHQyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY29weTEsIGNvcHkyKQorCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkxID09IGNvcHkyKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoY29weTEgIT0gY29weTIpCisKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29weTEgPD0gY29weTIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNvcHkyID49IGNvcHkyKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhc2NpaSA8IGJtcCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzY2lpIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzY2lpID49IGFzY2lpMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc2NpaSA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYXNjaWkgPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluIDwgbGF0aW4yKQorICAgICAgICBzZWxmLmFzc2VydFRydWUobGF0aW4gPCBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShsYXRpbiA8IGFzdHJhbCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGxhdGluID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGxhdGluID49IGxhdGluMikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShsYXRpbiA+PSBibXApCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UobGF0aW4gPj0gYXN0cmFsKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgYXNjaWkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoYm1wIDwgbGF0aW4pCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShibXAgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wIDwgYXN0cmFsKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGFzY2lpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYm1wID49IGxhdGluKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGJtcCA+PSBhc3RyYWwpCisKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShhc3RyYWwgPCBibXAyKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYXN0cmFsIDwgYXN0cmFsMikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBhc2NpaSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBsYXRpbikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGFzdHJhbCA+PSBibXAyKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGFzdHJhbCA+PSBhc3RyYWwyKQorCiAgICAgQHN1cHBvcnQuY3B5dGhvbl9vbmx5CiAgICAgZGVmIHRlc3RfcGVwMzkzX3V0ZjhfY2FjaGluZ19idWcoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzI1NzA5OiBQcm9ibGVtIHdpdGggc3RyaW5nIGNvbmNhdGVuYXRpb24gYW5kIHV0Zi04IGNhY2hlCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGVfZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5CmluZGV4IGZhYThkYTMuLmU0NzA5YTEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZV9maWxlLnB5CkBAIC01LDcgKzUsNyBAQAogaW1wb3J0IHVuaWNvZGVkYXRhCiAKIGltcG9ydCB1bml0dGVzdAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChydW5fdW5pdHRlc3QsIHJtdHJlZSwKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAocnVuX3VuaXR0ZXN0LCBybXRyZWUsIGNoYW5nZV9jd2QsCiAgICAgVEVTVEZOX0VOQ09ESU5HLCBURVNURk5fVU5JQ09ERSwgVEVTVEZOX1VORU5DT0RBQkxFLCBjcmVhdGVfZW1wdHlfZmlsZSkKIAogaWYgbm90IG9zLnBhdGguc3VwcG9ydHNfdW5pY29kZV9maWxlbmFtZXM6CkBAIC04MiwxMyArODIsMTEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvcy5wYXRoLmV4aXN0cyhmaWxlbmFtZTIgKyAnLm5ldycpKQogCiAgICAgZGVmIF9kb19kaXJlY3Rvcnkoc2VsZiwgbWFrZV9uYW1lLCBjaGRpcl9uYW1lKToKLSAgICAgICAgY3dkID0gb3MuZ2V0Y3dkKCkKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihtYWtlX25hbWUpOgogICAgICAgICAgICAgcm10cmVlKG1ha2VfbmFtZSkKICAgICAgICAgb3MubWtkaXIobWFrZV9uYW1lKQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5jaGRpcihjaGRpcl9uYW1lKQotICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBjaGFuZ2VfY3dkKGNoZGlyX25hbWUpOgogICAgICAgICAgICAgICAgIGN3ZF9yZXN1bHQgPSBvcy5nZXRjd2QoKQogICAgICAgICAgICAgICAgIG5hbWVfcmVzdWx0ID0gbWFrZV9uYW1lCiAKQEAgLTk2LDggKzk0LDYgQEAKICAgICAgICAgICAgICAgICBuYW1lX3Jlc3VsdCA9IHVuaWNvZGVkYXRhLm5vcm1hbGl6ZSgiTkZEIiwgbmFtZV9yZXN1bHQpCiAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9zLnBhdGguYmFzZW5hbWUoY3dkX3Jlc3VsdCksbmFtZV9yZXN1bHQpCi0gICAgICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgICAgIG9zLmNoZGlyKGN3ZCkKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIG9zLnJtZGlyKG1ha2VfbmFtZSkKIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weSBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZWRhdGEucHkKaW5kZXggOTlhYTAwMy4uNzA3YjMwZSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlZGF0YS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGVkYXRhLnB5CkBAIC0yMSw3ICsyMSw3IEBACiBjbGFzcyBVbmljb2RlTWV0aG9kc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgIyB1cGRhdGUgdGhpcywgaWYgdGhlIGRhdGFiYXNlIGNoYW5nZXMKLSAgICBleHBlY3RlZGNoZWNrc3VtID0gJ2JmN2E3OGYxYTUzMjQyMWI1MDMzNjAwMTAyZTIzYTkyMDQ0ZGJiYTknCisgICAgZXhwZWN0ZWRjaGVja3N1bSA9ICdlNzRlODc4ZGU3MWI2ZTc4MGZmYWMyNzE3ODVjM2NiNThmNjI1MWYzJwogCiAgICAgZGVmIHRlc3RfbWV0aG9kX2NoZWNrc3VtKHNlbGYpOgogICAgICAgICBoID0gaGFzaGxpYi5zaGExKCkKQEAgLTgwLDcgKzgwLDcgQEAKIGNsYXNzIFVuaWNvZGVGdW5jdGlvbnNUZXN0KFVuaWNvZGVEYXRhYmFzZVRlc3QpOgogCiAgICAgIyB1cGRhdGUgdGhpcywgaWYgdGhlIGRhdGFiYXNlIGNoYW5nZXMKLSAgICBleHBlY3RlZGNoZWNrc3VtID0gJzE3ZmUyZjEyYjc4OGU0ZmZmNTQ3OWI0NjljNDQwNGJiNmVjZjg0MWYnCisgICAgZXhwZWN0ZWRjaGVja3N1bSA9ICdmMGI3NGQyNjc3NjMzMWNjN2JkYzNhNDY5OGYwMzdkNzNmMmNlZTJiJwogICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX2NoZWNrc3VtKHNlbGYpOgogICAgICAgICBkYXRhID0gW10KICAgICAgICAgaCA9IGhhc2hsaWIuc2hhMSgpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CmluZGV4IDNiODdmYTMuLjg3MTcxZTkgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliLnB5CkBAIC03LDggKzcsMTAgQEAKIGltcG9ydCBlbWFpbC5tZXNzYWdlCiBpbXBvcnQgaW8KIGltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCBwYXRjaAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgb3MKK2ltcG9ydCBzc2wKIGltcG9ydCBzeXMKIGltcG9ydCB0ZW1wZmlsZQogZnJvbSBudHVybDJwYXRoIGltcG9ydCB1cmwycGF0aG5hbWUsIHBhdGhuYW1lMnVybApAQCAtMTYsNiArMTgsNyBAQAogZnJvbSBiYXNlNjQgaW1wb3J0IGI2NGVuY29kZQogaW1wb3J0IGNvbGxlY3Rpb25zCiAKKwogZGVmIGhleGVzY2FwZShjaGFyKToKICAgICAiIiJFc2NhcGUgY2hhciBhcyBSRkMgMjM5NiBzcGVjaWZpZXMiIiIKICAgICBoZXhfcmVwciA9IGhleChvcmQoY2hhcikpWzI6XS51cHBlcigpCkBAIC00Niw0OCArNDksNzMgQEAKICAgICAgICAgcmV0dXJuIG9wZW5lci5vcGVuKHVybCwgZGF0YSkKIAogCitkZWYgZmFrZWh0dHAoZmFrZWRhdGEpOgorICAgIGNsYXNzIEZha2VTb2NrZXQoaW8uQnl0ZXNJTyk6CisgICAgICAgIGlvX3JlZnMgPSAxCisKKyAgICAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6CisgICAgICAgICAgICBGYWtlSFRUUENvbm5lY3Rpb24uYnVmID0gZGF0YQorCisgICAgICAgIGRlZiBtYWtlZmlsZShzZWxmLCAqYXJncywgKiprd2RzKToKKyAgICAgICAgICAgIHNlbGYuaW9fcmVmcyArPSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZgorCisgICAgICAgIGRlZiByZWFkKHNlbGYsIGFtdD1Ob25lKToKKyAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgorICAgICAgICAgICAgICAgIHJldHVybiBiIiIKKyAgICAgICAgICAgIHJldHVybiBpby5CeXRlc0lPLnJlYWQoc2VsZiwgYW10KQorCisgICAgICAgIGRlZiByZWFkbGluZShzZWxmLCBsZW5ndGg9Tm9uZSk6CisgICAgICAgICAgICBpZiBzZWxmLmNsb3NlZDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYiIiCisgICAgICAgICAgICByZXR1cm4gaW8uQnl0ZXNJTy5yZWFkbGluZShzZWxmLCBsZW5ndGgpCisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5pb19yZWZzIC09IDEKKyAgICAgICAgICAgIGlmIHNlbGYuaW9fcmVmcyA9PSAwOgorICAgICAgICAgICAgICAgIGlvLkJ5dGVzSU8uY2xvc2Uoc2VsZikKKworICAgIGNsYXNzIEZha2VIVFRQQ29ubmVjdGlvbihodHRwLmNsaWVudC5IVFRQQ29ubmVjdGlvbik6CisKKyAgICAgICAgIyBidWZmZXIgdG8gc3RvcmUgZGF0YSBmb3IgdmVyaWZpY2F0aW9uIGluIHVybG9wZW4gdGVzdHMuCisgICAgICAgIGJ1ZiA9IE5vbmUKKyAgICAgICAgZmFrZXNvY2sgPSBGYWtlU29ja2V0KGZha2VkYXRhKQorCisgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgorICAgICAgICAgICAgc2VsZi5zb2NrID0gc2VsZi5mYWtlc29jaworCisgICAgcmV0dXJuIEZha2VIVFRQQ29ubmVjdGlvbgorCisKIGNsYXNzIEZha2VIVFRQTWl4aW4ob2JqZWN0KToKICAgICBkZWYgZmFrZWh0dHAoc2VsZiwgZmFrZWRhdGEpOgotICAgICAgICBjbGFzcyBGYWtlU29ja2V0KGlvLkJ5dGVzSU8pOgotICAgICAgICAgICAgaW9fcmVmcyA9IDEKLQotICAgICAgICAgICAgZGVmIHNlbmRhbGwoc2VsZiwgZGF0YSk6Ci0gICAgICAgICAgICAgICAgRmFrZUhUVFBDb25uZWN0aW9uLmJ1ZiA9IGRhdGEKLQotICAgICAgICAgICAgZGVmIG1ha2VmaWxlKHNlbGYsICphcmdzLCAqKmt3ZHMpOgotICAgICAgICAgICAgICAgIHNlbGYuaW9fcmVmcyArPSAxCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYKLQotICAgICAgICAgICAgZGVmIHJlYWQoc2VsZiwgYW10PU5vbmUpOgotICAgICAgICAgICAgICAgIGlmIHNlbGYuY2xvc2VkOgotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYiIiCi0gICAgICAgICAgICAgICAgcmV0dXJuIGlvLkJ5dGVzSU8ucmVhZChzZWxmLCBhbXQpCi0KLSAgICAgICAgICAgIGRlZiByZWFkbGluZShzZWxmLCBsZW5ndGg9Tm9uZSk6Ci0gICAgICAgICAgICAgICAgaWYgc2VsZi5jbG9zZWQ6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBiIiIKLSAgICAgICAgICAgICAgICByZXR1cm4gaW8uQnl0ZXNJTy5yZWFkbGluZShzZWxmLCBsZW5ndGgpCi0KLSAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgICAgICAgICBzZWxmLmlvX3JlZnMgLT0gMQotICAgICAgICAgICAgICAgIGlmIHNlbGYuaW9fcmVmcyA9PSAwOgotICAgICAgICAgICAgICAgICAgICBpby5CeXRlc0lPLmNsb3NlKHNlbGYpCi0KLSAgICAgICAgY2xhc3MgRmFrZUhUVFBDb25uZWN0aW9uKGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uKToKLQotICAgICAgICAgICAgIyBidWZmZXIgdG8gc3RvcmUgZGF0YSBmb3IgdmVyaWZpY2F0aW9uIGluIHVybG9wZW4gdGVzdHMuCi0gICAgICAgICAgICBidWYgPSBOb25lCi0KLSAgICAgICAgICAgIGRlZiBjb25uZWN0KHNlbGYpOgotICAgICAgICAgICAgICAgIHNlbGYuc29jayA9IEZha2VTb2NrZXQoZmFrZWRhdGEpCi0KICAgICAgICAgc2VsZi5fY29ubmVjdGlvbl9jbGFzcyA9IGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uCi0gICAgICAgIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uID0gRmFrZUhUVFBDb25uZWN0aW9uCisgICAgICAgIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uID0gZmFrZWh0dHAoZmFrZWRhdGEpCiAKICAgICBkZWYgdW5mYWtlaHR0cChzZWxmKToKICAgICAgICAgaHR0cC5jbGllbnQuSFRUUENvbm5lY3Rpb24gPSBzZWxmLl9jb25uZWN0aW9uX2NsYXNzCiAKIAorY2xhc3MgRmFrZUZUUE1peGluKG9iamVjdCk6CisgICAgZGVmIGZha2VmdHAoc2VsZik6CisgICAgICAgIGNsYXNzIEZha2VGdHBXcmFwcGVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgIHVzZXIsIHBhc3N3ZCwgaG9zdCwgcG9ydCwgZGlycywgdGltZW91dD1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgcGVyc2lzdGVudD1UcnVlKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgIGRlZiByZXRyZmlsZShzZWxmLCBmaWxlLCB0eXBlKToKKyAgICAgICAgICAgICAgICByZXR1cm4gaW8uQnl0ZXNJTygpLCAwCisKKyAgICAgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgc2VsZi5fZnRwd3JhcHBlcl9jbGFzcyA9IHVybGxpYi5yZXF1ZXN0LmZ0cHdyYXBwZXIKKyAgICAgICAgdXJsbGliLnJlcXVlc3QuZnRwd3JhcHBlciA9IEZha2VGdHBXcmFwcGVyCisKKyAgICBkZWYgdW5mYWtlZnRwKHNlbGYpOgorICAgICAgICB1cmxsaWIucmVxdWVzdC5mdHB3cmFwcGVyID0gc2VsZi5fZnRwd3JhcHBlcl9jbGFzcworCisKIGNsYXNzIHVybG9wZW5fRmlsZVRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAiIiJUZXN0IHVybG9wZW4oKSBvcGVuaW5nIGEgdGVtcG9yYXJ5IGZpbGUuCiAKQEAgLTIwNyw3ICsyMzUsNyBAQAogICAgICAgICAgICAgc2VsZi5lbnYudW5zZXQoJ0hUVFBfUFJPWFknKQogCiAKLWNsYXNzIHVybG9wZW5fSHR0cFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBGYWtlSFRUUE1peGluKToKK2NsYXNzIHVybG9wZW5fSHR0cFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlLCBGYWtlSFRUUE1peGluLCBGYWtlRlRQTWl4aW4pOgogICAgICIiIlRlc3QgdXJsb3BlbigpIG9wZW5pbmcgYSBmYWtlIGh0dHAgY29ubmVjdGlvbi4iIiIKIAogICAgIGRlZiBjaGVja19yZWFkKHNlbGYsIHZlcik6CkBAIC0yNTEsNyArMjc5LDcgQEAKICAgICAgICAgc2VsZi5jaGVja19yZWFkKGIiMS4xIikKIAogICAgIGRlZiB0ZXN0X3JlYWRfYm9ndXMoc2VsZik6Ci0gICAgICAgICMgdXJsb3BlbigpIHNob3VsZCByYWlzZSBJT0Vycm9yIGZvciBtYW55IGVycm9yIGNvZGVzLgorICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgT1NFcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KICAgICAgICAgc2VsZi5mYWtlaHR0cChiJycnSFRUUC8xLjEgNDAxIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkCiBEYXRlOiBXZWQsIDAyIEphbiAyMDA4IDAzOjAzOjU0IEdNVAogU2VydmVyOiBBcGFjaGUvMS4zLjMzIChEZWJpYW4gR05VL0xpbnV4KSBtb2Rfc3NsLzIuOC4yMiBPcGVuU1NMLzAuOS43ZQpAQCAtMjU5LDEyICsyODcsMTIgQEAKIENvbnRlbnQtVHlwZTogdGV4dC9odG1sOyBjaGFyc2V0PWlzby04ODU5LTEKICcnJykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9weXRob24ub3JnLyIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB1cmxvcGVuLCAiaHR0cDovL3B5dGhvbi5vcmcvIikKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHNlbGYudW5mYWtlaHR0cCgpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkX3JlZGlyZWN0KHNlbGYpOgotICAgICAgICAjIHVybG9wZW4oKSBzaG91bGQgcmFpc2UgSU9FcnJvciBmb3IgbWFueSBlcnJvciBjb2Rlcy4KKyAgICAgICAgIyB1cmxvcGVuKCkgc2hvdWxkIHJhaXNlIE9TRXJyb3IgZm9yIG1hbnkgZXJyb3IgY29kZXMuCiAgICAgICAgIHNlbGYuZmFrZWh0dHAoYicnJ0hUVFAvMS4xIDMwMiBGb3VuZAogRGF0ZTogV2VkLCAwMiBKYW4gMjAwOCAwMzowMzo1NCBHTVQKIFNlcnZlcjogQXBhY2hlLzEuMy4zMyAoRGViaWFuIEdOVS9MaW51eCkgbW9kX3NzbC8yLjguMjIgT3BlblNTTC8wLjkuN2UKQEAgLTI3OSwxOSArMzA3LDIwIEBACiAgICAgICAgICAgICBzZWxmLnVuZmFrZWh0dHAoKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfc29ja2V0KHNlbGYpOgotICAgICAgICAjIHVybG9wZW4oKSByYWlzZXMgSU9FcnJvciBpZiB0aGUgdW5kZXJseWluZyBzb2NrZXQgZG9lcyBub3Qgc2VuZCBhbnkKKyAgICAgICAgIyB1cmxvcGVuKCkgcmFpc2VzIE9TRXJyb3IgaWYgdGhlIHVuZGVybHlpbmcgc29ja2V0IGRvZXMgbm90IHNlbmQgYW55CiAgICAgICAgICMgZGF0YS4gKCMxNjgwMjMwKQogICAgICAgICBzZWxmLmZha2VodHRwKGInJykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9zb21ldGhpbmciKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgdXJsb3BlbiwgImh0dHA6Ly9zb21ldGhpbmciKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi51bmZha2VodHRwKCkKIAogICAgIGRlZiB0ZXN0X21pc3NpbmdfbG9jYWxmaWxlKHNlbGYpOgogICAgICAgICAjIFRlc3QgZm9yICMxMDgzNgotICAgICAgICAjIDMuMyAtIFVSTEVycm9yIGlzIG5vdCBjYXB0dXJlZCwgZXhwbGljaXQgSU9FcnJvciBpcyByYWlzZWQuCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvcik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLlVSTEVycm9yKSBhcyBlOgogICAgICAgICAgICAgdXJsb3BlbignZmlsZTovL2xvY2FsaG9zdC9hL2ZpbGUvd2hpY2gvZG9lc25vdC9leGlzdHMucHknKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24uZmlsZW5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShlLmV4Y2VwdGlvbi5yZWFzb24pCiAKICAgICBkZWYgdGVzdF9maWxlX25vdGV4aXN0cyhzZWxmKToKICAgICAgICAgZmQsIHRtcF9maWxlID0gdGVtcGZpbGUubWtzdGVtcCgpCkBAIC0zMDQsMjAgKzMzMywzMCBAQAogICAgICAgICAgICAgb3MuY2xvc2UoZmQpCiAgICAgICAgICAgICBvcy51bmxpbmsodG1wX2ZpbGUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uob3MucGF0aC5leGlzdHModG1wX2ZpbGUpKQotICAgICAgICAjIDMuMyAtIElPRXJyb3IgaW5zdGVhZCBvZiBVUkxFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcik6CiAgICAgICAgICAgICB1cmxvcGVuKHRtcF9maWxldXJsKQogCiAgICAgZGVmIHRlc3RfZnRwX25vaG9zdChzZWxmKToKICAgICAgICAgdGVzdF9mdHBfdXJsID0gJ2Z0cDovLy9wYXRoJwotICAgICAgICAjIDMuMyAtIElPRXJyb3IgaW5zdGVhZCBvZiBVUkxFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcikgYXMgZToKICAgICAgICAgICAgIHVybG9wZW4odGVzdF9mdHBfdXJsKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGUuZXhjZXB0aW9uLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24ucmVhc29uKQogCiAgICAgZGVmIHRlc3RfZnRwX25vbmV4aXN0aW5nKHNlbGYpOgotICAgICAgICAjIDMuMyAtIElPRXJyb3IgaW5zdGVhZCBvZiBVUkxFcnJvcgotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHVybGxpYi5lcnJvci5VUkxFcnJvcikgYXMgZToKICAgICAgICAgICAgIHVybG9wZW4oJ2Z0cDovL2xvY2FsaG9zdC9hL2ZpbGUvd2hpY2gvZG9lc25vdC9leGlzdHMucHknKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGUuZXhjZXB0aW9uLmZpbGVuYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZS5leGNlcHRpb24ucmVhc29uKQorCisgICAgQHBhdGNoLm9iamVjdCh1cmxsaWIucmVxdWVzdCwgJ01BWEZUUENBQ0hFJywgMCkKKyAgICBkZWYgdGVzdF9mdHBfY2FjaGVfcHJ1bmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5mYWtlZnRwKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgdXJsbGliLnJlcXVlc3QuZnRwY2FjaGVbJ3Rlc3QnXSA9IHVybGxpYi5yZXF1ZXN0LmZ0cHdyYXBwZXIoJ3VzZXInLCAncGFzcycsICdsb2NhbGhvc3QnLCAyMSwgW10pCisgICAgICAgICAgICB1cmxvcGVuKCdmdHA6Ly9sb2NhbGhvc3QnKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi51bmZha2VmdHAoKQogCiAKICAgICBkZWYgdGVzdF91c2VycGFzc19pbnVybChzZWxmKToKQEAgLTM1NCw2ICszOTMsODYgQEAKICAgICAgICAgd2l0aCBzdXBwb3J0LmNoZWNrX3dhcm5pbmdzKCgnJyxEZXByZWNhdGlvbldhcm5pbmcpKToKICAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lcigpCiAKKyAgICBkZWYgdGVzdF9jYWZpbGVfYW5kX2NvbnRleHQoc2VsZik6CisgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dCgpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICB1cmxsaWIucmVxdWVzdC51cmxvcGVuKAorICAgICAgICAgICAgICAgICJodHRwczovL2xvY2FsaG9zdCIsIGNhZmlsZT0iL25vbmV4aXN0ZW50L3BhdGgiLCBjb250ZXh0PWNvbnRleHQKKyAgICAgICAgICAgICkKKworY2xhc3MgdXJsb3Blbl9EYXRhVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgICIiIlRlc3QgdXJsb3BlbigpIG9wZW5pbmcgYSBkYXRhIFVSTC4iIiIKKworICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgIyB0ZXh0IGNvbnRhaW5pbmcgVVJMIHNwZWNpYWwtIGFuZCB1bmljb2RlLWNoYXJhY3RlcnMKKyAgICAgICAgc2VsZi50ZXh0ID0gInRlc3QgZGF0YSBVUkxzIDo7LCU9JiBcdTAwZjYgXHUwMGM0ICIKKyAgICAgICAgIyAyeDEgcGl4ZWwgUkdCIFBORyBpbWFnZSB3aXRoIG9uZSBibGFjayBhbmQgb25lIHdoaXRlIHBpeGVsCisgICAgICAgIHNlbGYuaW1hZ2UgPSAoCisgICAgICAgICAgICBiJ1x4ODlQTkdcclxuXHgxYVxuXHgwMFx4MDBceDAwXHJJSERSXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwXHgwMCcKKyAgICAgICAgICAgIGInXHgwMVx4MDhceDAyXHgwMFx4MDBceDAwe0BceGU4XHhkZFx4MDBceDAwXHgwMFx4MDFzUkdCXHgwMFx4YWUnCisgICAgICAgICAgICBiJ1x4Y2VceDFjXHhlOVx4MDBceDAwXHgwMFx4MGZJREFUXHgwOFx4ZDdjYGBgXHhmOFx4ZmZceGZmP1x4MDAnCisgICAgICAgICAgICBiJ1x4MDZceDAxXHgwMlx4ZmVcbm8vXHgxZVx4MDBceDAwXHgwMFx4MDBJRU5EXHhhZUJgXHg4MicpCisKKyAgICAgICAgc2VsZi50ZXh0X3VybCA9ICgKKyAgICAgICAgICAgICJkYXRhOnRleHQvcGxhaW47Y2hhcnNldD1VVEYtOCx0ZXN0JTIwZGF0YSUyMFVSTHMlMjAlM0ElM0IlMkMlMjUlMyIKKyAgICAgICAgICAgICJEJTI2JTIwJUMzJUI2JTIwJUMzJTg0JTIwIikKKyAgICAgICAgc2VsZi50ZXh0X3VybF9iYXNlNjQgPSAoCisgICAgICAgICAgICAiZGF0YTp0ZXh0L3BsYWluO2NoYXJzZXQ9SVNPLTg4NTktMTtiYXNlNjQsZEdWemRDQmtZWFJoSUZWU1RITWdPanMiCisgICAgICAgICAgICAic0pUMG1JUFlneENBJTNEIikKKyAgICAgICAgIyBiYXNlNjQgZW5jb2RlZCBkYXRhIFVSTCB0aGF0IGNvbnRhaW5zIGlnbm9yYWJsZSBzcGFjZXMsCisgICAgICAgICMgc3VjaCBhcyAiXG4iLCAiICIsICIlMEEiLCBhbmQgIiUyMCIuCisgICAgICAgIHNlbGYuaW1hZ2VfdXJsID0gKAorICAgICAgICAgICAgImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUlBQUFBQkNBSUFBQUI3XG4iCisgICAgICAgICAgICAiUU9qZEFBQUFBWE5TUjBJQXJzNGM2UUFBQUE5SlJFRlVDTmRqJTBBWUdCZyUyQlAvL1B3QUdBUUwlMkJDbTggIgorICAgICAgICAgICAgInZIZ0FBQUFCSlJVNUVya0pnZ2clM0QlM0QlMEElMjAiKQorCisgICAgICAgIHNlbGYudGV4dF91cmxfcmVzcCA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oc2VsZi50ZXh0X3VybCkKKyAgICAgICAgc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcCA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oCisgICAgICAgICAgICBzZWxmLnRleHRfdXJsX2Jhc2U2NCkKKyAgICAgICAgc2VsZi5pbWFnZV91cmxfcmVzcCA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oc2VsZi5pbWFnZV91cmwpCisKKyAgICBkZWYgdGVzdF9pbnRlcmZhY2Uoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIG9iamVjdCByZXR1cm5lZCBieSB1cmxvcGVuKCkgaGFzIHRoZSBzcGVjaWZpZWQgbWV0aG9kcworICAgICAgICBmb3IgYXR0ciBpbiAoInJlYWQiLCAicmVhZGxpbmUiLCAicmVhZGxpbmVzIiwKKyAgICAgICAgICAgICAgICAgICAgICJjbG9zZSIsICJpbmZvIiwgImdldHVybCIsICJnZXRjb2RlIiwgIl9faXRlcl9fIik6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLnRleHRfdXJsX3Jlc3AsIGF0dHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgdXJsb3BlbigpIGxhY2tzICVzIGF0dHJpYnV0ZSIgJQorICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHIpCisKKyAgICBkZWYgdGVzdF9pbmZvKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50ZXh0X3VybF9yZXNwLmluZm8oKSwgZW1haWwubWVzc2FnZS5NZXNzYWdlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfYmFzZTY0X3Jlc3AuaW5mbygpLmdldF9wYXJhbXMoKSwKKyAgICAgICAgICAgIFsoJ3RleHQvcGxhaW4nLCAnJyksICgnY2hhcnNldCcsICdJU08tODg1OS0xJyldKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW1hZ2VfdXJsX3Jlc3AuaW5mbygpWydjb250ZW50LWxlbmd0aCddLAorICAgICAgICAgICAgc3RyKGxlbihzZWxmLmltYWdlKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnJlcXVlc3QudXJsb3BlbigiZGF0YTosIikuaW5mbygpLmdldF9wYXJhbXMoKSwKKyAgICAgICAgICAgIFsoJ3RleHQvcGxhaW4nLCAnJyksICgnY2hhcnNldCcsICdVUy1BU0NJSScpXSkKKworICAgIGRlZiB0ZXN0X2dldHVybChzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnRleHRfdXJsX3Jlc3AuZ2V0dXJsKCksIHNlbGYudGV4dF91cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcC5nZXR1cmwoKSwKKyAgICAgICAgICAgIHNlbGYudGV4dF91cmxfYmFzZTY0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuaW1hZ2VfdXJsX3Jlc3AuZ2V0dXJsKCksIHNlbGYuaW1hZ2VfdXJsKQorCisgICAgZGVmIHRlc3RfcmVhZF90ZXh0KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudGV4dF91cmxfcmVzcC5yZWFkKCkuZGVjb2RlKAorICAgICAgICAgICAgZGljdChzZWxmLnRleHRfdXJsX3Jlc3AuaW5mbygpLmdldF9wYXJhbXMoKSlbJ2NoYXJzZXQnXSksIHNlbGYudGV4dCkKKworICAgIGRlZiB0ZXN0X3JlYWRfdGV4dF9iYXNlNjQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50ZXh0X3VybF9iYXNlNjRfcmVzcC5yZWFkKCkuZGVjb2RlKAorICAgICAgICAgICAgZGljdChzZWxmLnRleHRfdXJsX2Jhc2U2NF9yZXNwLmluZm8oKS5nZXRfcGFyYW1zKCkpWydjaGFyc2V0J10pLAorICAgICAgICAgICAgc2VsZi50ZXh0KQorCisgICAgZGVmIHRlc3RfcmVhZF9pbWFnZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmltYWdlX3VybF9yZXNwLnJlYWQoKSwgc2VsZi5pbWFnZSkKKworICAgIGRlZiB0ZXN0X21pc3NpbmdfY29tbWEoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsdXJsbGliLnJlcXVlc3QudXJsb3BlbiwnZGF0YTp0ZXh0L3BsYWluJykKKworICAgIGRlZiB0ZXN0X2ludmFsaWRfYmFzZTY0X2RhdGEoc2VsZik6CisgICAgICAgICMgbWlzc2luZyBwYWRkaW5nIGNoYXJhY3RlcgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLHVybGxpYi5yZXF1ZXN0LnVybG9wZW4sJ2RhdGE6O2Jhc2U2NCxDZz0nKQorCiBjbGFzcyB1cmxyZXRyaWV2ZV9GaWxlVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3QgdXJsbGliLnVybHJldHJpZXZlKCkgb24gbG9jYWwgZmlsZXMiIiIKIApAQCAtNDE3LDcgKzUzNiw3IEBACiAgICAgICAgIHJlc3VsdCA9IHVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlKCJmaWxlOiVzIiAlIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdFswXSwgc3VwcG9ydC5URVNURk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZXN1bHRbMV0sIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkaWQgbm90IGdldCBhIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSBpbnN0YW5jZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGlkIG5vdCBnZXQgYW4gZW1haWwubWVzc2FnZS5NZXNzYWdlIGluc3RhbmNlICIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcyBzZWNvbmQgcmV0dXJuZWQgdmFsdWUiKQogCiAgICAgZGVmIHRlc3RfY29weShzZWxmKToKQEAgLTExODgsMjEgKzEzMDcsNiBAQAogY2xhc3MgVXRpbGl0eV9UZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgIiIiVGVzdGNhc2UgdG8gdGVzdCB0aGUgdmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucyBpbiB0aGUgdXJsbGliLiIiIgogCi0gICAgZGVmIHRlc3Rfc3BsaXRwYXNzd2Qoc2VsZik6Ci0gICAgICAgICIiIlNvbWUgb2YgcGFzc3dvcmQgZXhhbXBsZXMgYXJlIG5vdCBzZW5zaWJsZSwgYnV0IGl0IGlzIGFkZGVkIHRvCi0gICAgICAgIGNvbmZpcm1pbmcgdG8gUkZDMjYxNyBhbmQgYWRkcmVzc2luZyBpc3N1ZTQ2NzUuCi0gICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhYicpLHVybGxpYi5wYXJzZS5zcGxpdHBhc3N3ZCgndXNlcjphYicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXG5iJyksdXJsbGliLnBhcnNlLnNwbGl0cGFzc3dkKCd1c2VyOmFcbmInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVx0YicpLHVybGxpYi5wYXJzZS5zcGxpdHBhc3N3ZCgndXNlcjphXHRiJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2FccmInKSx1cmxsaWIucGFyc2Uuc3BsaXRwYXNzd2QoJ3VzZXI6YVxyYicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlcicsICdhXGZiJyksdXJsbGliLnBhcnNlLnNwbGl0cGFzc3dkKCd1c2VyOmFcZmInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYVx2YicpLHVybGxpYi5wYXJzZS5zcGxpdHBhc3N3ZCgndXNlcjphXHZiJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKCd1c2VyJywgJ2E6YicpLHVybGxpYi5wYXJzZS5zcGxpdHBhc3N3ZCgndXNlcjphOmInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXInLCAnYSBiJyksdXJsbGliLnBhcnNlLnNwbGl0cGFzc3dkKCd1c2VyOmEgYicpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndXNlciAyJywgJ2FiJyksdXJsbGliLnBhcnNlLnNwbGl0cGFzc3dkKCd1c2VyIDI6YWInKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoJ3VzZXIrMScsICdhK2InKSx1cmxsaWIucGFyc2Uuc3BsaXRwYXNzd2QoJ3VzZXIrMTphK2InKSkKLQogICAgIGRlZiB0ZXN0X3RoaXNob3N0KHNlbGYpOgogICAgICAgICAiIiJUZXN0IHRoZSB1cmxsaWIucmVxdWVzdC50aGlzaG9zdCB1dGlsaXR5IGZ1bmN0aW9uIHJldHVybnMgYSB0dXBsZSIiIgogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UodXJsbGliLnJlcXVlc3QudGhpc2hvc3QoKSwgdHVwbGUpCkBAIC0xMzA0LDYgKzE0MDgsNyBAQAogIyAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnRwLmZ0cC5zb2NrLmdldHRpbWVvdXQoKSwgMzApCiAjICAgICAgICAgZnRwLmNsb3NlKCkKIAorCiBjbGFzcyBSZXF1ZXN0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlVuaXQgdGVzdHMgZm9yIHVybGxpYi5yZXF1ZXN0LlJlcXVlc3QuIiIiCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMi5weQppbmRleCBkMDY5MTM5Li43ZDQxZWExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIyLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGVzdCBpbXBvcnQgdGVzdF91cmxsaWIKIAogaW1wb3J0IG9zCiBpbXBvcnQgaW8KQEAgLTEwLDggKzExLDEwIEBACiBpbXBvcnQgdXJsbGliLnJlcXVlc3QKICMgVGhlIHByb3h5IGJ5cGFzcyBtZXRob2QgaW1wb3J0ZWQgYmVsb3cgaGFzIGxvZ2ljIHNwZWNpZmljIHRvIHRoZSBPU1gKICMgcHJveHkgY29uZmlnIGRhdGEgc3RydWN0dXJlIGJ1dCBpcyB0ZXN0YWJsZSBvbiBhbGwgcGxhdGZvcm1zLgotZnJvbSB1cmxsaWIucmVxdWVzdCBpbXBvcnQgUmVxdWVzdCwgT3BlbmVyRGlyZWN0b3IsIF9wcm94eV9ieXBhc3NfbWFjb3N4X3N5c2NvbmYKK2Zyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IFJlcXVlc3QsIE9wZW5lckRpcmVjdG9yLCBfcGFyc2VfcHJveHksIF9wcm94eV9ieXBhc3NfbWFjb3N4X3N5c2NvbmYKK2Zyb20gdXJsbGliLnBhcnNlIGltcG9ydCB1cmxwYXJzZQogaW1wb3J0IHVybGxpYi5lcnJvcgoraW1wb3J0IGh0dHAuY2xpZW50CiAKICMgWFhYCiAjIFJlcXVlc3QKQEAgLTQxLDcgKzQ0LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdXJsbGliLnJlcXVlc3QudXJsb3BlbiwgJ2JvZ3VzIHVybCcpCiAKICAgICAgICAgIyBYWFggTmFtZSBoYWNraW5nIHRvIGdldCB0aGlzIHRvIHdvcmsgb24gV2luZG93cy4KLSAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgodXJsbGliLnJlcXVlc3QuX19maWxlX18pLnJlcGxhY2UoJ1xcJywgJy8nKQorICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aCh1cmxsaWIucmVxdWVzdC5fX2ZpbGVfXykucmVwbGFjZShvcy5zZXAsICcvJykKIAogICAgICAgICBpZiBvcy5uYW1lID09ICdudCc6CiAgICAgICAgICAgICBmaWxlX3VybCA9ICJmaWxlOi8vLyVzIiAlIGZuYW1lCkBAIC0xMTgsNiArMTIxLDE1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlcS5nZXRfaGVhZGVyKCJOb3QtdGhlcmUiKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2hlYWRlcigiTm90LXRoZXJlIiwgImRlZmF1bHQiKSwgImRlZmF1bHQiKQogCisgICAgICAgIHJlcS5yZW1vdmVfaGVhZGVyKCJTcGFtLWVnZ3MiKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlcS5oYXNfaGVhZGVyKCJTcGFtLWVnZ3MiKSkKKworICAgICAgICByZXEuYWRkX3VucmVkaXJlY3RlZF9oZWFkZXIoIlVucmVkaXJlY3RlZC1zcGFtIiwgIkVnZ3MiKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVxLmhhc19oZWFkZXIoIlVucmVkaXJlY3RlZC1zcGFtIikpCisKKyAgICAgICAgcmVxLnJlbW92ZV9oZWFkZXIoIlVucmVkaXJlY3RlZC1zcGFtIikKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXEuaGFzX2hlYWRlcigiVW5yZWRpcmVjdGVkLXNwYW0iKSkKKwogCiAgICAgZGVmIHRlc3RfcGFzc3dvcmRfbWFuYWdlcihzZWxmKToKICAgICAgICAgbWdyID0gdXJsbGliLnJlcXVlc3QuSFRUUFBhc3N3b3JkTWdyKCkKQEAgLTMxMSw4ICszMjMsNyBAQAogICAgICAgICBpZiBib2R5OgogICAgICAgICAgICAgc2VsZi5kYXRhID0gYm9keQogICAgICAgICBpZiBzZWxmLnJhaXNlX29uX2VuZGhlYWRlcnM6Ci0gICAgICAgICAgICBpbXBvcnQgc29ja2V0Ci0gICAgICAgICAgICByYWlzZSBzb2NrZXQuZXJyb3IoKQorICAgICAgICAgICAgcmFpc2UgT1NFcnJvcigpCiAgICAgZGVmIGdldHJlc3BvbnNlKHNlbGYpOgogICAgICAgICByZXR1cm4gTW9ja0hUVFBSZXNwb25zZShNb2NrRmlsZSgpLCB7fSwgMjAwLCAiT0siKQogCkBAIC01OTcsMjcgKzYwOCw2IEBACiAgICAgICAgICAgICAgICAgaWYgYXJnc1sxXSBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFyZ3NbMV0sIE1vY2tSZXNwb25zZSkKIAotICAgIGRlZiB0ZXN0X21ldGhvZF9kZXByZWNhdGlvbnMoc2VsZik6Ci0gICAgICAgIHJlcSA9IFJlcXVlc3QoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20iKQotCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmFkZF9kYXRhKCJkYXRhIikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X2RhdGEoKQotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKLSAgICAgICAgICAgIHJlcS5oYXNfZGF0YSgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF9ob3N0KCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X3NlbGVjdG9yKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuaXNfdW52ZXJpZmlhYmxlKCkKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6Ci0gICAgICAgICAgICByZXEuZ2V0X29yaWdpbl9yZXFfaG9zdCgpCi0gICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgotICAgICAgICAgICAgcmVxLmdldF90eXBlKCkKLQotCiBkZWYgc2FuZXBhdGhuYW1lMnVybChwYXRoKToKICAgICB0cnk6CiAgICAgICAgIHBhdGguZW5jb2RlKCJ1dGYtOCIpCkBAIC02OTAsNyArNjgwLDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW50KGhlYWRlcnNbIkNvbnRlbnQtbGVuZ3RoIl0pLCBsZW4oZGF0YSkpCiAKICAgICBkZWYgdGVzdF9maWxlKHNlbGYpOgotICAgICAgICBpbXBvcnQgZW1haWwudXRpbHMsIHNvY2tldAorICAgICAgICBpbXBvcnQgZW1haWwudXRpbHMKICAgICAgICAgaCA9IHVybGxpYi5yZXF1ZXN0LkZpbGVIYW5kbGVyKCkKICAgICAgICAgbyA9IGgucGFyZW50ID0gTW9ja09wZW5lcigpCiAKQEAgLTczNyw2ICs3MjcsNyBAQAogICAgICAgICBmb3IgdXJsIGluIFsKICAgICAgICAgICAgICJmaWxlOi8vbG9jYWxob3N0OjgwJXMiICUgdXJscGF0aCwKICAgICAgICAgICAgICJmaWxlOi8vL2ZpbGVfZG9lc19ub3RfZXhpc3QudHh0IiwKKyAgICAgICAgICAgICJmaWxlOi8vbm90LWEtbG9jYWwtaG9zdC5jb20vL2Rpci9maWxlLnR4dCIsCiAgICAgICAgICAgICAiZmlsZTovLyVzOjgwJXMvJXMiICUgKHNvY2tldC5nZXRob3N0YnluYW1lKCdsb2NhbGhvc3QnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZ2V0Y3dkKCksIFRFU1RGTiksCiAgICAgICAgICAgICAiZmlsZTovL3NvbWVyYW5kb21ob3N0Lm9udGhlaW50ZXJuZXQuY29tJXMvJXMiICUKQEAgLTgxMiw3ICs4MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJGb28iLCAiYmFyIiksICgiU3BhbSIsICJlZ2dzIildKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChodHRwLmRhdGEsIGRhdGEpCiAKLSAgICAgICAgIyBjaGVjayBzb2NrZXQuZXJyb3IgY29udmVydGVkIHRvIFVSTEVycm9yCisgICAgICAgICMgY2hlY2sgT1NFcnJvciBjb252ZXJ0ZWQgdG8gVVJMRXJyb3IKICAgICAgICAgaHR0cC5yYWlzZV9vbl9lbmRoZWFkZXJzID0gVHJ1ZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh1cmxsaWIuZXJyb3IuVVJMRXJyb3IsIGguZG9fb3BlbiwgaHR0cCwgcmVxKQogCkBAIC05MTcsNiArOTA4LDM2IEBACiAgICAgICAgICAgICBwX2RzX3JlcSA9IGguZG9fcmVxdWVzdF8oZHNfcmVxKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwX2RzX3JlcS51bnJlZGlyZWN0ZWRfaGRyc1siSG9zdCJdLCJleGFtcGxlLmNvbSIpCiAKKyAgICBkZWYgdGVzdF9mdWxsX3VybF9zZXR0ZXIoc2VsZik6CisgICAgICAgICMgQ2hlY2tzIHRvIGVuc3VyZSB0aGF0IGNvbXBvbmVudHMgYXJlIHNldCBjb3JyZWN0bHkgYWZ0ZXIgc2V0dGluZyB0aGUKKyAgICAgICAgIyBmdWxsX3VybCBvZiBhIFJlcXVlc3Qgb2JqZWN0CisKKyAgICAgICAgdXJscyA9IFsKKyAgICAgICAgICAgICdodHRwOi8vZXhhbXBsZS5jb20/Zm9vPWJhciNiYXonLAorICAgICAgICAgICAgJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyJnNwYW09ZWdncyNiYXNoJywKKyAgICAgICAgICAgICdodHRwOi8vZXhhbXBsZS5jb20nLAorICAgICAgICBdCisKKyAgICAgICAgIyB0ZXN0aW5nIGEgcmV1c2FibGUgcmVxdWVzdCBpbnN0YW5jZSwgYnV0IHRoZSB1cmwgcGFyYW1ldGVyIGlzCisgICAgICAgICMgcmVxdWlyZWQsIHNvIGp1c3QgdXNlIGEgZHVtbXkgb25lIHRvIGluc3RhbnRpYXRlCisgICAgICAgIHIgPSBSZXF1ZXN0KCdodHRwOi8vZXhhbXBsZS5jb20nKQorICAgICAgICBmb3IgdXJsIGluIHVybHM6CisgICAgICAgICAgICByLmZ1bGxfdXJsID0gdXJsCisgICAgICAgICAgICBwYXJzZWQgPSB1cmxwYXJzZSh1cmwpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5nZXRfZnVsbF91cmwoKSwgdXJsKQorICAgICAgICAgICAgIyBmdWxsX3VybCBzZXR0ZXIgdXNlcyBzcGxpdHRhZyB0byBzcGxpdCBpbnRvIGNvbXBvbmVudHMuCisgICAgICAgICAgICAjIHNwbGl0dGFnIHNldHMgdGhlIGZyYWdtZW50IGFzIE5vbmUgd2hpbGUgdXJscGFyc2Ugc2V0cyBpdCB0byAnJworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyLmZyYWdtZW50IG9yICcnLCBwYXJzZWQuZnJhZ21lbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybHBhcnNlKHIuZ2V0X2Z1bGxfdXJsKCkpLnF1ZXJ5LCBwYXJzZWQucXVlcnkpCisKKyAgICBkZWYgdGVzdF9mdWxsX3VybF9kZWxldGVyKHNlbGYpOgorICAgICAgICByID0gUmVxdWVzdCgnaHR0cDovL3d3dy5leGFtcGxlLmNvbScpCisgICAgICAgIGRlbCByLmZ1bGxfdXJsCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHIuZnVsbF91cmwpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHIuZnJhZ21lbnQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoci5zZWxlY3RvciwgJycpCisKICAgICBkZWYgdGVzdF9maXhwYXRoX2luX3dlaXJkdXJscyhzZWxmKToKICAgICAgICAgIyBJc3N1ZTQ0OTM6IHVybGxpYjIgdG8gc3VwcGx5ICcvJyB3aGVuIHRvIHVybHMgd2hlcmUgcGF0aCBkb2VzIG5vdAogICAgICAgICAjIHN0YXJ0IHdpdGgnLycKQEAgLTEzNzQsNiArMTM5NSwzMyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihodHRwX2hhbmRsZXIucmVxdWVzdHMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGh0dHBfaGFuZGxlci5yZXF1ZXN0c1swXS5oYXNfaGVhZGVyKGF1dGhfaGVhZGVyKSkKIAorICAgIGRlZiB0ZXN0X2h0dHBfY2xvc2VkKHNlbGYpOgorICAgICAgICAiIiJUZXN0IHRoZSBjb25uZWN0aW9uIGlzIGNsZWFuZWQgdXAgd2hlbiB0aGUgcmVzcG9uc2UgaXMgY2xvc2VkIiIiCisgICAgICAgIGZvciAodHJhbnNmZXIsIGRhdGEpIGluICgKKyAgICAgICAgICAgICgiQ29ubmVjdGlvbjogY2xvc2UiLCBiImRhdGEiKSwKKyAgICAgICAgICAgICgiVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWQiLCBiIjRcclxuZGF0YVxyXG4wXHJcblxyXG4iKSwKKyAgICAgICAgICAgICgiQ29udGVudC1MZW5ndGg6IDQiLCBiImRhdGEiKSwKKyAgICAgICAgKToKKyAgICAgICAgICAgIGhlYWRlciA9ICJIVFRQLzEuMSAyMDAgT0tcclxue31cclxuXHJcbiIuZm9ybWF0KHRyYW5zZmVyKQorICAgICAgICAgICAgY29ubiA9IHRlc3RfdXJsbGliLmZha2VodHRwKGhlYWRlci5lbmNvZGUoKSArIGRhdGEpCisgICAgICAgICAgICBoYW5kbGVyID0gdXJsbGliLnJlcXVlc3QuQWJzdHJhY3RIVFRQSGFuZGxlcigpCisgICAgICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZHVtbXkvIikKKyAgICAgICAgICAgIHJlcS50aW1lb3V0ID0gTm9uZQorICAgICAgICAgICAgd2l0aCBoYW5kbGVyLmRvX29wZW4oY29ubiwgcmVxKSBhcyByZXNwOgorICAgICAgICAgICAgICAgIHJlc3AucmVhZCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoY29ubi5mYWtlc29jay5jbG9zZWQsCisgICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24gbm90IGNsb3NlZCB3aXRoIHshcn0iLmZvcm1hdCh0cmFuc2ZlcikpCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX2Nsb3NlZChzZWxmKToKKyAgICAgICAgIiIiVGVzdCB0aGUgY29ubmVjdGlvbiBpcyBjbGVhbmVkIHVwIGFmdGVyIGFuIGludmFsaWQgcmVzcG9uc2UiIiIKKyAgICAgICAgY29ubiA9IHRlc3RfdXJsbGliLmZha2VodHRwKGIiIikKKyAgICAgICAgaGFuZGxlciA9IHVybGxpYi5yZXF1ZXN0LkFic3RyYWN0SFRUUEhhbmRsZXIoKQorICAgICAgICByZXEgPSBSZXF1ZXN0KCJodHRwOi8vZHVtbXkvIikKKyAgICAgICAgcmVxLnRpbWVvdXQgPSBOb25lCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoaHR0cC5jbGllbnQuQmFkU3RhdHVzTGluZSk6CisgICAgICAgICAgICBoYW5kbGVyLmRvX29wZW4oY29ubiwgcmVxKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoY29ubi5mYWtlc29jay5jbG9zZWQsICJDb25uZWN0aW9uIG5vdCBjbG9zZWQiKQorCiAKIGNsYXNzIE1pc2NUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTE0MTgsNiArMTQ2NiwyMiBAQAogICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBNeUhUVFBIYW5kbGVyKQogICAgICAgICBzZWxmLm9wZW5lcl9oYXNfaGFuZGxlcihvLCBNeU90aGVySFRUUEhhbmRsZXIpCiAKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhzdXBwb3J0LmlzX3Jlc291cmNlX2VuYWJsZWQoJ25ldHdvcmsnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdCByZXF1aXJlcyBuZXR3b3JrIGFjY2VzcycpCisgICAgZGVmIHRlc3RfaXNzdWUxNjQ2NChzZWxmKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKToKKyAgICAgICAgICAgIG9wZW5lciA9IHVybGxpYi5yZXF1ZXN0LmJ1aWxkX29wZW5lcigpCisgICAgICAgICAgICByZXF1ZXN0ID0gdXJsbGliLnJlcXVlc3QuUmVxdWVzdCgiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChOb25lLCByZXF1ZXN0LmRhdGEpCisKKyAgICAgICAgICAgIG9wZW5lci5vcGVuKHJlcXVlc3QsICIxIi5lbmNvZGUoInVzLWFzY2lpIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMSIsIHJlcXVlc3QuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEiLCByZXF1ZXN0LmdldF9oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIikpCisKKyAgICAgICAgICAgIG9wZW5lci5vcGVuKHJlcXVlc3QsICIxMjM0NTY3ODkwIi5lbmNvZGUoInVzLWFzY2lpIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIiMTIzNDU2Nzg5MCIsIHJlcXVlc3QuZGF0YSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIjEwIiwgcmVxdWVzdC5nZXRfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpKQorCiAgICAgZGVmIHRlc3RfSFRUUEVycm9yX2ludGVyZmFjZShzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIElzc3VlIDEzMjExIHJldmVhbHMgdGhhdCBIVFRQRXJyb3IgZGlkbid0IGltcGxlbWVudCB0aGUgVVJMRXJyb3IKQEAgLTE0MjksMjMgKzE0OTMsNjggQEAKICAgICAgICAgZXJyID0gdXJsbGliLmVycm9yLkhUVFBFcnJvcih1cmwsIGNvZGUsIG1zZywgaGRycywgZnApCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVyciwgJ3JlYXNvbicpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5yZWFzb24sICdzb21ldGhpbmcgYmFkIGhhcHBlbmVkJykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAnaGRycycpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5oZHJzLCAnQ29udGVudC1MZW5ndGg6IDQyJykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGhhc2F0dHIoZXJyLCAnaGVhZGVycycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyci5oZWFkZXJzLCAnQ29udGVudC1MZW5ndGg6IDQyJykKICAgICAgICAgZXhwZWN0ZWRfZXJybXNnID0gJ0hUVFAgRXJyb3IgJXM6ICVzJyAlIChlcnIuY29kZSwgZXJyLm1zZykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoZXJyKSwgZXhwZWN0ZWRfZXJybXNnKQogCisgICAgZGVmIHRlc3RfcGFyc2VfcHJveHkoc2VsZik6CisgICAgICAgIHBhcnNlX3Byb3h5X3Rlc3RfY2FzZXMgPSBbCisgICAgICAgICAgICAoJ3Byb3h5LmV4YW1wbGUuY29tJywKKyAgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tJykpLAorICAgICAgICAgICAgKCdwcm94eS5leGFtcGxlLmNvbTozMTI4JywKKyAgICAgICAgICAgICAoTm9uZSwgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKSksCisgICAgICAgICAgICAoJ3Byb3h5LmV4YW1wbGUuY29tJywgKE5vbmUsIE5vbmUsIE5vbmUsICdwcm94eS5leGFtcGxlLmNvbScpKSwKKyAgICAgICAgICAgICgncHJveHkuZXhhbXBsZS5jb206MzEyOCcsCisgICAgICAgICAgICAgKE5vbmUsIE5vbmUsIE5vbmUsICdwcm94eS5leGFtcGxlLmNvbTozMTI4JykpLAorICAgICAgICAgICAgIyBUaGUgYXV0aG9yaXR5IGNvbXBvbmVudCBtYXkgb3B0aW9uYWxseSBpbmNsdWRlIHVzZXJpbmZvCisgICAgICAgICAgICAjIChhc3N1bWVkIHRvIGJlICMgdXNlcm5hbWU6cGFzc3dvcmQpOgorICAgICAgICAgICAgKCdqb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb20nLAorICAgICAgICAgICAgIChOb25lLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykpLAorICAgICAgICAgICAgKCdqb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb206MzEyOCcsCisgICAgICAgICAgICAgKE5vbmUsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb206MzEyOCcpKSwKKyAgICAgICAgICAgICNFeGFtcGxlcyB3aXRoIFVSTFMKKyAgICAgICAgICAgICgnaHR0cDovL3Byb3h5LmV4YW1wbGUuY29tLycsCisgICAgICAgICAgICAgKCdodHRwJywgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tJykpLAorICAgICAgICAgICAgKCdodHRwOi8vcHJveHkuZXhhbXBsZS5jb206MzEyOC8nLAorICAgICAgICAgICAgICgnaHR0cCcsIE5vbmUsIE5vbmUsICdwcm94eS5leGFtcGxlLmNvbTozMTI4JykpLAorICAgICAgICAgICAgKCdodHRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tLycsCisgICAgICAgICAgICAgKCdodHRwJywgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbScpKSwKKyAgICAgICAgICAgICgnaHR0cDovL2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbTozMTI4JywKKyAgICAgICAgICAgICAoJ2h0dHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKSksCisgICAgICAgICAgICAjIEV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGF1dGhvcml0eSBpcyBpZ25vcmVkCisgICAgICAgICAgICAoJ2Z0cDovL2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbS9ydWJiaXNoOjMxMjgnLAorICAgICAgICAgICAgICgnZnRwJywgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbScpKSwKKyAgICAgICAgICAgICMgVGVzdCBmb3Igbm8gdHJhaWxpbmcgJy8nIGNhc2UKKyAgICAgICAgICAgICgnaHR0cDovL2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbScsCisgICAgICAgICAgICAgKCdodHRwJywgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbScpKQorICAgICAgICBdCisKKyAgICAgICAgZm9yIHRjLCBleHBlY3RlZCBpbiBwYXJzZV9wcm94eV90ZXN0X2Nhc2VzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChfcGFyc2VfcHJveHkodGMpLCBleHBlY3RlZCkKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBfcGFyc2VfcHJveHksICdmaWxlOi9mdHAuZXhhbXBsZS5jb20nKSwKIAogY2xhc3MgUmVxdWVzdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBjbGFzcyBQdXRSZXF1ZXN0KFJlcXVlc3QpOgorICAgICAgICBtZXRob2Q9J1BVVCcKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc2VsZi5nZXQgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iKQogICAgICAgICBzZWxmLnBvc3QgPSBSZXF1ZXN0KCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkYXRhIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzPXsiWC1UZXN0IjogInRlc3QifSkKKyAgICAgICAgc2VsZi5oZWFkID0gUmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwgbWV0aG9kPSdIRUFEJykKKyAgICAgICAgc2VsZi5wdXQgPSBzZWxmLlB1dFJlcXVlc3QoImh0dHA6Ly93d3cucHl0aG9uLm9yZy9+amVyZW15LyIpCisgICAgICAgIHNlbGYuZm9yY2VfcG9zdCA9IHNlbGYuUHV0UmVxdWVzdCgiaHR0cDovL3d3dy5weXRob24ub3JnL35qZXJlbXkvIiwKKyAgICAgICAgICAgIG1ldGhvZD0iUE9TVCIpCiAKICAgICBkZWYgdGVzdF9tZXRob2Qoc2VsZik6CiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBPU1QiLCBzZWxmLnBvc3QuZ2V0X21ldGhvZCgpKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJHRVQiLCBzZWxmLmdldC5nZXRfbWV0aG9kKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkhFQUQiLCBzZWxmLmhlYWQuZ2V0X21ldGhvZCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQVVQiLCBzZWxmLnB1dC5nZXRfbWV0aG9kKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIlBPU1QiLCBzZWxmLmZvcmNlX3Bvc3QuZ2V0X21ldGhvZCgpKQogCiAgICAgZGVmIHRlc3RfZGF0YShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmdldC5kYXRhKQpAQCAtMTQ1NCw2ICsxNTYzLDI1IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmdldC5kYXRhKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJQT1NUIiwgc2VsZi5nZXQuZ2V0X21ldGhvZCgpKQogCisgICAgIyBpc3N1ZSAxNjQ2NAorICAgICMgaWYgd2UgY2hhbmdlIGRhdGEgd2UgbmVlZCB0byByZW1vdmUgY29udGVudC1sZW5ndGggaGVhZGVyCisgICAgIyAoY2F1c2UgaXQncyBtb3N0IHByb2JhYmx5IGNhbGN1bGF0ZWQgZm9yIHByZXZpb3VzIHZhbHVlKQorICAgIGRlZiB0ZXN0X3NldHRpbmdfZGF0YV9zaG91bGRfcmVtb3ZlX2NvbnRlbnRfbGVuZ3RoKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorICAgICAgICBzZWxmLmdldC5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiQ29udGVudC1sZW5ndGgiLCA0MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg0Miwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnNbIkNvbnRlbnQtbGVuZ3RoIl0pCisgICAgICAgIHNlbGYuZ2V0LmRhdGEgPSAic3BhbSIKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbigiQ29udGVudC1sZW5ndGgiLCBzZWxmLmdldC51bnJlZGlyZWN0ZWRfaGRycykKKworICAgICMgaXNzdWUgMTc0ODUgc2FtZSBmb3IgZGVsZXRpbmcgZGF0YS4KKyAgICBkZWYgdGVzdF9kZWxldGluZ19kYXRhX3Nob3VsZF9yZW1vdmVfY29udGVudF9sZW5ndGgoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oIkNvbnRlbnQtbGVuZ3RoIiwgc2VsZi5nZXQudW5yZWRpcmVjdGVkX2hkcnMpCisgICAgICAgIHNlbGYuZ2V0LmRhdGEgPSAnZm9vJworICAgICAgICBzZWxmLmdldC5hZGRfdW5yZWRpcmVjdGVkX2hlYWRlcigiQ29udGVudC1sZW5ndGgiLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDMsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzWyJDb250ZW50LWxlbmd0aCJdKQorICAgICAgICBkZWwgc2VsZi5nZXQuZGF0YQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCJDb250ZW50LWxlbmd0aCIsIHNlbGYuZ2V0LnVucmVkaXJlY3RlZF9oZHJzKQorCiAgICAgZGVmIHRlc3RfZ2V0X2Z1bGxfdXJsKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvfmplcmVteS8iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0LmdldF9mdWxsX3VybCgpKQpAQCAtMTQ5NSwzMyArMTYyMywxNCBAQAogICAgICAgICByZXEgPSBSZXF1ZXN0KHVybCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXEuZ2V0X2Z1bGxfdXJsKCksIHVybCkKIAotICAgIGRlZiB0ZXN0X0hUVFBFcnJvcl9pbnRlcmZhY2VfY2FsbChzZWxmKToKLSAgICAgICAgIiIiCi0gICAgICAgIElzc3VlIDE1NzAxIC0gSFRUUEVycm9yIGludGVyZmFjZSBoYXMgaW5mbyBtZXRob2QgYXZhaWxhYmxlIGZyb20gVVJMRXJyb3IKLSAgICAgICAgIiIiCi0gICAgICAgIGVyciA9IHVybGxpYi5yZXF1ZXN0LkhUVFBFcnJvcihtc2c9InNvbWV0aGluZyBiYWQgaGFwcGVuZWQiLCB1cmw9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZT1Ob25lLCBoZHJzPSdDb250ZW50LUxlbmd0aDo0MicsIGZwPU5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKGVyciwgJ3JlYXNvbicpKQotICAgICAgICBhc3NlcnQgaGFzYXR0cihlcnIsICdyZWFzb24nKQotICAgICAgICBhc3NlcnQgaGFzYXR0cihlcnIsICdpbmZvJykKLSAgICAgICAgYXNzZXJ0IGNhbGxhYmxlKGVyci5pbmZvKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBlcnIuaW5mbygpCi0gICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgICAgIHNlbGYuZmFpbCgnZXJyLmluZm8gY2FsbCBmYWlsZWQuJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlcnIuaW5mbygpLCAiQ29udGVudC1MZW5ndGg6NDIiKQorICAgIGRlZiB0ZXN0X3VybF9mdWxsdXJsX2dldF9mdWxsX3VybChzZWxmKToKKyAgICAgICAgdXJscyA9IFsnaHR0cDovL2RvY3MucHl0aG9uLm9yZycsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91cmxsaWIyLmh0bWwjT0snLAorICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvP3FzPXF1ZXJ5I2ZyYWdtZW50PXRydWUnIF0KKyAgICAgICAgZm9yIHVybCBpbiB1cmxzOgorICAgICAgICAgICAgcmVxID0gUmVxdWVzdCh1cmwpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcS5nZXRfZnVsbF91cmwoKSwgcmVxLmZ1bGxfdXJsKQogCi1kZWYgdGVzdF9tYWluKHZlcmJvc2U9Tm9uZSk6Ci0gICAgZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3VybGxpYjIKLSAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHRlc3RfdXJsbGliMiwgdmVyYm9zZSkKLSAgICBzdXBwb3J0LnJ1bl9kb2N0ZXN0KHVybGxpYi5yZXF1ZXN0LCB2ZXJib3NlKQotICAgIHRlc3RzID0gKFRyaXZpYWxUZXN0cywKLSAgICAgICAgICAgICBPcGVuZXJEaXJlY3RvclRlc3RzLAotICAgICAgICAgICAgIEhhbmRsZXJUZXN0cywKLSAgICAgICAgICAgICBNaXNjVGVzdHMsCi0gICAgICAgICAgICAgUmVxdWVzdFRlc3RzLAotICAgICAgICAgICAgIFJlcXVlc3RIZHJzVGVzdHMpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnRlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbih2ZXJib3NlPVRydWUpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYjJfbG9jYWxuZXQucHkKaW5kZXggMzFjNjM4Zi4uMDY1MGFhMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91cmxsaWIyX2xvY2FsbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMl9sb2NhbG5ldC5weQpAQCAtMSwzICsxLDQgQEAKK2ltcG9ydCBiYXNlNjQKIGltcG9ydCBvcwogaW1wb3J0IGVtYWlsCiBpbXBvcnQgdXJsbGliLnBhcnNlCkBAIC01LDkgKzYsMTUgQEAKIGltcG9ydCBodHRwLnNlcnZlcgogaW1wb3J0IHVuaXR0ZXN0CiBpbXBvcnQgaGFzaGxpYgorCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKKwogdGhyZWFkaW5nID0gc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd0aHJlYWRpbmcnKQogCit0cnk6CisgICAgaW1wb3J0IHNzbAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIHNzbCA9IE5vbmUKIAogaGVyZSA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKICMgU2VsZi1zaWduZWQgY2VydCBmaWxlIGZvciAnbG9jYWxob3N0JwpAQCAtMTUsNiArMjIsNyBAQAogIyBTZWxmLXNpZ25lZCBjZXJ0IGZpbGUgZm9yICdmYWtlaG9zdG5hbWUnCiBDRVJUX2Zha2Vob3N0bmFtZSA9IG9zLnBhdGguam9pbihoZXJlLCAna2V5Y2VydDIucGVtJykKIAorCiAjIExvb3BiYWNrIGh0dHAgc2VydmVyIGluZnJhc3RydWN0dXJlCiAKIGNsYXNzIExvb3BiYWNrSHR0cFNlcnZlcihodHRwLnNlcnZlci5IVFRQU2VydmVyKToKQEAgLTUzLDE0ICs2MSwxMSBAQAogICAgICAgICByZXF1ZXN0X2hhbmRsZXIucHJvdG9jb2xfdmVyc2lvbiA9ICJIVFRQLzEuMCIKICAgICAgICAgc2VsZi5odHRwZCA9IExvb3BiYWNrSHR0cFNlcnZlcigoIjEyNy4wLjAuMSIsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RfaGFuZGxlcikKLSAgICAgICAgI3ByaW50ICJTZXJ2aW5nIEhUVFAgb24gJXMgcG9ydCAlcyIgJSAoc2VsZi5odHRwZC5zZXJ2ZXJfbmFtZSwKLSAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5odHRwZC5zZXJ2ZXJfcG9ydCkKICAgICAgICAgc2VsZi5wb3J0ID0gc2VsZi5odHRwZC5zZXJ2ZXJfcG9ydAogCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgICIiIlN0b3BzIHRoZSB3ZWJzZXJ2ZXIgaWYgaXQncyBjdXJyZW50bHkgcnVubmluZy4iIiIKIAotICAgICAgICAjIFNldCB0aGUgc3RvcCBmbGFnLgogICAgICAgICBzZWxmLl9zdG9wX3NlcnZlciA9IFRydWUKIAogICAgICAgICBzZWxmLmpvaW4oKQpAQCAtMTkzLDYgKzE5OCw0OSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZXR1cm5fYXV0aF9jaGFsbGVuZ2UocmVxdWVzdF9oYW5kbGVyKQogICAgICAgICAgICAgcmV0dXJuIFRydWUKIAorCitjbGFzcyBCYXNpY0F1dGhIYW5kbGVyKGh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIpOgorICAgICIiIkhhbmRsZXIgZm9yIHBlcmZvcm1pbmcgYmFzaWMgYXV0aGVudGljYXRpb24uIiIiCisgICAgIyBTZXJ2ZXIgc2lkZSB2YWx1ZXMKKyAgICBVU0VSID0gJ3Rlc3RVc2VyJworICAgIFBBU1NXRCA9ICd0ZXN0UGFzcycKKyAgICBSRUFMTSA9ICdUZXN0JworICAgIFVTRVJfUEFTU1dEID0gIiVzOiVzIiAlIChVU0VSLCBQQVNTV0QpCisgICAgRU5DT0RFRF9BVVRIID0gYmFzZTY0LmI2NGVuY29kZShVU0VSX1BBU1NXRC5lbmNvZGUoJ2FzY2lpJykpLmRlY29kZSgnYXNjaWknKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGh0dHAuc2VydmVyLkJhc2VIVFRQUmVxdWVzdEhhbmRsZXIuX19pbml0X18oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGxvZ19tZXNzYWdlKHNlbGYsIGZvcm1hdCwgKmFyZ3MpOgorICAgICAgICAjIFN1cHByZXNzIGNvbnNvbGUgbG9nIG1lc3NhZ2UKKyAgICAgICAgcGFzcworCisgICAgZGVmIGRvX0hFQUQoc2VsZik6CisgICAgICAgIHNlbGYuc2VuZF9yZXNwb25zZSgyMDApCisgICAgICAgIHNlbGYuc2VuZF9oZWFkZXIoIkNvbnRlbnQtdHlwZSIsICJ0ZXh0L2h0bWwiKQorICAgICAgICBzZWxmLmVuZF9oZWFkZXJzKCkKKworICAgIGRlZiBkb19BVVRISEVBRChzZWxmKToKKyAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDQwMSkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiV1dXLUF1dGhlbnRpY2F0ZSIsICJCYXNpYyByZWFsbT1cIiVzXCIiICUgc2VsZi5SRUFMTSkKKyAgICAgICAgc2VsZi5zZW5kX2hlYWRlcigiQ29udGVudC10eXBlIiwgInRleHQvaHRtbCIpCisgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorCisgICAgZGVmIGRvX0dFVChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGVhZGVycy5nZXQoIkF1dGhvcml6YXRpb24iLCAiIik6CisgICAgICAgICAgICBzZWxmLmRvX0FVVEhIRUFEKCkKKyAgICAgICAgICAgIHNlbGYud2ZpbGUud3JpdGUoYiJObyBBdXRoIGhlYWRlciByZWNlaXZlZCIpCisgICAgICAgIGVsaWYgc2VsZi5oZWFkZXJzLmdldCgKKyAgICAgICAgICAgICAgICAiQXV0aG9yaXphdGlvbiIsICIiKSA9PSAiQmFzaWMgIiArIHNlbGYuRU5DT0RFRF9BVVRIOgorICAgICAgICAgICAgc2VsZi5zZW5kX3Jlc3BvbnNlKDIwMCkKKyAgICAgICAgICAgIHNlbGYuZW5kX2hlYWRlcnMoKQorICAgICAgICAgICAgc2VsZi53ZmlsZS53cml0ZShiIkl0IHdvcmtzIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgUmVxdWVzdCBVbmF1dGhvcml6ZWQKKyAgICAgICAgICAgIHNlbGYuZG9fQVVUSEhFQUQoKQorCisKKwogIyBQcm94eSB0ZXN0IGluZnJhc3RydWN0dXJlCiAKIGNsYXNzIEZha2VQcm94eUhhbmRsZXIoaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlcik6CkBAIC0yMjgsNiArMjc2LDQ0IEBACiAKICMgVGVzdCBjYXNlcwogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICJUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4iKQorY2xhc3MgQmFzaWNBdXRoVGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgorICAgIFVTRVIgPSAidGVzdFVzZXIiCisgICAgUEFTU1dEID0gInRlc3RQYXNzIgorICAgIElOQ09SUkVDVF9QQVNTV0QgPSAiSW5jb3JyZWN0IgorICAgIFJFQUxNID0gIlRlc3QiCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKEJhc2ljQXV0aFRlc3RzLCBzZWxmKS5zZXRVcCgpCisgICAgICAgICMgV2l0aCBCYXNpYyBBdXRoZW50aWNhdGlvbgorICAgICAgICBkZWYgaHR0cF9zZXJ2ZXJfd2l0aF9iYXNpY19hdXRoX2hhbmRsZXIoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgIHJldHVybiBCYXNpY0F1dGhIYW5kbGVyKCphcmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5zZXJ2ZXIgPSBMb29wYmFja0h0dHBTZXJ2ZXJUaHJlYWQoaHR0cF9zZXJ2ZXJfd2l0aF9iYXNpY19hdXRoX2hhbmRsZXIpCisgICAgICAgIHNlbGYuc2VydmVyX3VybCA9ICdodHRwOi8vMTI3LjAuMC4xOiVzJyAlIHNlbGYuc2VydmVyLnBvcnQKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RhcnQoKQorICAgICAgICBzZWxmLnNlcnZlci5yZWFkeS53YWl0KCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zZXJ2ZXIuc3RvcCgpCisgICAgICAgIHN1cGVyKEJhc2ljQXV0aFRlc3RzLCBzZWxmKS50ZWFyRG93bigpCisKKyAgICBkZWYgdGVzdF9iYXNpY19hdXRoX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGFoID0gdXJsbGliLnJlcXVlc3QuSFRUUEJhc2ljQXV0aEhhbmRsZXIoKQorICAgICAgICBhaC5hZGRfcGFzc3dvcmQoc2VsZi5SRUFMTSwgc2VsZi5zZXJ2ZXJfdXJsLCBzZWxmLlVTRVIsIHNlbGYuUEFTU1dEKQorICAgICAgICB1cmxsaWIucmVxdWVzdC5pbnN0YWxsX29wZW5lcih1cmxsaWIucmVxdWVzdC5idWlsZF9vcGVuZXIoYWgpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUodXJsbGliLnJlcXVlc3QudXJsb3BlbihzZWxmLnNlcnZlcl91cmwpKQorICAgICAgICBleGNlcHQgdXJsbGliLmVycm9yLkhUVFBFcnJvcjoKKyAgICAgICAgICAgIHNlbGYuZmFpbCgiQmFzaWMgYXV0aCBmYWlsZWQgZm9yIHRoZSB1cmw6ICVzIiwgc2VsZi5zZXJ2ZXJfdXJsKQorCisgICAgZGVmIHRlc3RfYmFzaWNfYXV0aF9odHRwZXJyb3Ioc2VsZik6CisgICAgICAgIGFoID0gdXJsbGliLnJlcXVlc3QuSFRUUEJhc2ljQXV0aEhhbmRsZXIoKQorICAgICAgICBhaC5hZGRfcGFzc3dvcmQoc2VsZi5SRUFMTSwgc2VsZi5zZXJ2ZXJfdXJsLCBzZWxmLlVTRVIsIHNlbGYuSU5DT1JSRUNUX1BBU1NXRCkKKyAgICAgICAgdXJsbGliLnJlcXVlc3QuaW5zdGFsbF9vcGVuZXIodXJsbGliLnJlcXVlc3QuYnVpbGRfb3BlbmVyKGFoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModXJsbGliLmVycm9yLkhUVFBFcnJvciwgdXJsbGliLnJlcXVlc3QudXJsb3Blbiwgc2VsZi5zZXJ2ZXJfdXJsKQorCisKK0B1bml0dGVzdC5za2lwVW5sZXNzKHRocmVhZGluZywgIlRocmVhZGluZyByZXF1aXJlZCBmb3IgdGhpcyB0ZXN0LiIpCiBjbGFzcyBQcm94eUF1dGhUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgVVJMID0gImh0dHA6Ly9sb2NhbGhvc3QiCiAKQEAgLTI0MCw2ICszMjYsNyBAQAogICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIgPSBEaWdlc3RBdXRoSGFuZGxlcigpCiAgICAgICAgIHNlbGYuZGlnZXN0X2F1dGhfaGFuZGxlci5zZXRfdXNlcnMoe3NlbGYuVVNFUjogc2VsZi5QQVNTV0R9KQogICAgICAgICBzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIuc2V0X3JlYWxtKHNlbGYuUkVBTE0pCisgICAgICAgICMgV2l0aCBEaWdlc3QgQXV0aGVudGljYXRpb24uCiAgICAgICAgIGRlZiBjcmVhdGVfZmFrZV9wcm94eV9oYW5kbGVyKCphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgICAgICByZXR1cm4gRmFrZVByb3h5SGFuZGxlcihzZWxmLmRpZ2VzdF9hdXRoX2hhbmRsZXIsICphcmdzLCAqKmt3YXJncykKIApAQCAtMzM5LDYgKzQyNiw3IEBACiAgICAgcmV0dXJuIEZha2VIVFRQUmVxdWVzdEhhbmRsZXIKIAogCitAdW5pdHRlc3Quc2tpcFVubGVzcyh0aHJlYWRpbmcsICJUaHJlYWRpbmcgcmVxdWlyZWQgZm9yIHRoaXMgdGVzdC4iKQogY2xhc3MgVGVzdFVybG9wZW4odW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4gdXNpbmcgdGhlIG5ldHdvcmsuCiAKQEAgLTM4NywxNCArNDc1LDE0IEBACiAgICAgICAgIGhhbmRsZXIucG9ydCA9IHBvcnQKICAgICAgICAgcmV0dXJuIGhhbmRsZXIKIAotICAgIGRlZiBzdGFydF9odHRwc19zZXJ2ZXIoc2VsZiwgcmVzcG9uc2VzPU5vbmUsIGNlcnRmaWxlPUNFUlRfbG9jYWxob3N0KToKKyAgICBkZWYgc3RhcnRfaHR0cHNfc2VydmVyKHNlbGYsIHJlc3BvbnNlcz1Ob25lLCAqKmt3YXJncyk6CiAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHVybGxpYi5yZXF1ZXN0LCAnSFRUUFNIYW5kbGVyJyk6CiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdzc2wgc3VwcG9ydCByZXF1aXJlZCcpCiAgICAgICAgIGZyb20gdGVzdC5zc2xfc2VydmVycyBpbXBvcnQgbWFrZV9odHRwc19zZXJ2ZXIKICAgICAgICAgaWYgcmVzcG9uc2VzIGlzIE5vbmU6CiAgICAgICAgICAgICByZXNwb25zZXMgPSBbKDIwMCwgW10sIGIid2UgY2FyZSBhIGJpdCIpXQogICAgICAgICBoYW5kbGVyID0gR2V0UmVxdWVzdEhhbmRsZXIocmVzcG9uc2VzKQotICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBjZXJ0ZmlsZT1jZXJ0ZmlsZSwgaGFuZGxlcl9jbGFzcz1oYW5kbGVyKQorICAgICAgICBzZXJ2ZXIgPSBtYWtlX2h0dHBzX3NlcnZlcihzZWxmLCBoYW5kbGVyX2NsYXNzPWhhbmRsZXIsICoqa3dhcmdzKQogICAgICAgICBoYW5kbGVyLnBvcnQgPSBzZXJ2ZXIucG9ydAogICAgICAgICByZXR1cm4gaGFuZGxlcgogCkBAIC00NTcsMTIgKzU0NSwxMiBAQAogCiAgICAgZGVmIHRlc3RfaHR0cHMoc2VsZik6CiAgICAgICAgIGhhbmRsZXIgPSBzZWxmLnN0YXJ0X2h0dHBzX3NlcnZlcigpCi0gICAgICAgIGRhdGEgPSBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzL2JpemFycmUiICUgaGFuZGxlci5wb3J0KQorICAgICAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoY2FmaWxlPUNFUlRfbG9jYWxob3N0KQorICAgICAgICBkYXRhID0gc2VsZi51cmxvcGVuKCJodHRwczovL2xvY2FsaG9zdDolcy9iaXphcnJlIiAlIGhhbmRsZXIucG9ydCwgY29udGV4dD1jb250ZXh0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEsIGIid2UgY2FyZSBhIGJpdCIpCiAKICAgICBkZWYgdGVzdF9odHRwc193aXRoX2NhZmlsZShzZWxmKToKICAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfaHR0cHNfc2VydmVyKGNlcnRmaWxlPUNFUlRfbG9jYWxob3N0KQotICAgICAgICBpbXBvcnQgc3NsCiAgICAgICAgICMgR29vZCBjZXJ0CiAgICAgICAgIGRhdGEgPSBzZWxmLnVybG9wZW4oImh0dHBzOi8vbG9jYWxob3N0OiVzL2JpemFycmUiICUgaGFuZGxlci5wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhZmlsZT1DRVJUX2xvY2FsaG9zdCkKQEAgLTQ4NCw2ICs1NzIsMjIgQEAKICAgICAgICAgICAgIHNlbGYudXJsb3BlbigiaHR0cHM6Ly9sb2NhbGhvc3Q6JXMvYml6YXJyZSIgJSBoYW5kbGVyLnBvcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2FkZWZhdWx0PVRydWUpCiAKKyAgICBkZWYgdGVzdF9odHRwc19zbmkoc2VsZik6CisgICAgICAgIGlmIHNzbCBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic3NsIG1vZHVsZSByZXF1aXJlZCIpCisgICAgICAgIGlmIG5vdCBzc2wuSEFTX1NOSToKKyAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIlNOSSBzdXBwb3J0IHJlcXVpcmVkIGluIE9wZW5TU0wiKQorICAgICAgICBzbmlfbmFtZSA9IE5vbmUKKyAgICAgICAgZGVmIGNiX3NuaShzc2xfc29jaywgc2VydmVyX25hbWUsIGluaXRpYWxfY29udGV4dCk6CisgICAgICAgICAgICBub25sb2NhbCBzbmlfbmFtZQorICAgICAgICAgICAgc25pX25hbWUgPSBzZXJ2ZXJfbmFtZQorICAgICAgICBjb250ZXh0ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU3YxKQorICAgICAgICBjb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKGNiX3NuaSkKKyAgICAgICAgaGFuZGxlciA9IHNlbGYuc3RhcnRfaHR0cHNfc2VydmVyKGNvbnRleHQ9Y29udGV4dCwgY2VydGZpbGU9Q0VSVF9sb2NhbGhvc3QpCisgICAgICAgIGNvbnRleHQgPSBzc2wuY3JlYXRlX2RlZmF1bHRfY29udGV4dChjYWZpbGU9Q0VSVF9sb2NhbGhvc3QpCisgICAgICAgIHNlbGYudXJsb3BlbigiaHR0cHM6Ly9sb2NhbGhvc3Q6JXMiICUgaGFuZGxlci5wb3J0LCBjb250ZXh0PWNvbnRleHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc25pX25hbWUsICJsb2NhbGhvc3QiKQorCiAgICAgZGVmIHRlc3Rfc2VuZGluZ19oZWFkZXJzKHNlbGYpOgogICAgICAgICBoYW5kbGVyID0gc2VsZi5zdGFydF9zZXJ2ZXIoKQogICAgICAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KCJodHRwOi8vbG9jYWxob3N0OiVzLyIgJSBoYW5kbGVyLnBvcnQsCkBAIC01MzAsNyArNjM0LDcgQEAKICAgICAgICAgIyBzbyB3ZSBydW4gdGhlIHRlc3Qgb25seSB3aGVuIC11bmV0d29yay8tdWFsbCBpcyBzcGVjaWZpZWQgdG8KICAgICAgICAgIyBtaXRpZ2F0ZSB0aGUgcHJvYmxlbSBhIGJpdCAoc2VlICMxNzU2NCkKICAgICAgICAgc3VwcG9ydC5yZXF1aXJlcygnbmV0d29yaycpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgR2l2ZW4gdGhhdCBib3RoIFZlcmlTaWduIGFuZCB2YXJpb3VzIElTUHMgaGF2ZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoZSBwYXN0IG9yIGFyZSBwcmVzZW50bHkgaGlqYWNraW5nIHZhcmlvdXMgaW52YWxpZAogICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbWFpbiBuYW1lIHJlcXVlc3RzIGluIGFuIGF0dGVtcHQgdG8gYm9vc3QgdHJhZmZpYwpAQCAtNTcxLDkgKzY3NSwxNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZGV4ICsgMSwgbGVuKGxpbmVzKSkKIAogCi1Ac3VwcG9ydC5yZWFwX3RocmVhZHMKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChQcm94eUF1dGhUZXN0cywgVGVzdFVybG9wZW4pCit0aHJlYWRzX2tleSA9IE5vbmUKKworZGVmIHNldFVwTW9kdWxlKCk6CisgICAgIyBTdG9yZSB0aGUgdGhyZWFkaW5nX3NldHVwIGluIGEga2V5IGFuZCBlbnN1cmUgdGhhdCBpdCBpcyBjbGVhbmVkIHVwCisgICAgIyBpbiB0aGUgdGVhckRvd24KKyAgICBnbG9iYWwgdGhyZWFkc19rZXkKKyAgICB0aHJlYWRzX2tleSA9IHN1cHBvcnQudGhyZWFkaW5nX3NldHVwKCkKKworZGVmIHRlYXJEb3duTW9kdWxlKCk6CisgICAgaWYgdGhyZWFkc19rZXk6CisgICAgICAgIHN1cHBvcnQudGhyZWFkaW5nX2NsZWFudXAodGhyZWFkc19rZXkpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weSBiL0xpYi90ZXN0L3Rlc3RfdXJsbGliMm5ldC5weQppbmRleCBmNjE4ZWNmLi4xN2Y5ZDFiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYjJuZXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91cmxsaWIybmV0LnB5CkBAIC03LDEwICs3LDggQEAKIGltcG9ydCB1cmxsaWIuZXJyb3IKIGltcG9ydCB1cmxsaWIucmVxdWVzdAogaW1wb3J0IHN5cwotdHJ5OgotICAgIGltcG9ydCBzc2wKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBzc2wgPSBOb25lCisKK3N1cHBvcnQucmVxdWlyZXMoIm5ldHdvcmsiKQogCiBUSU1FT1VUID0gNjAgICMgc2Vjb25kcwogCkBAIC04MSw3ICs3OSw3IEBACiAgICAgZGVmIHRlc3RfY2xvc2Uoc2VsZik6CiAgICAgICAgICMgY2FsbGluZyAuY2xvc2UoKSBvbiB1cmxsaWIyJ3MgcmVzcG9uc2Ugb2JqZWN0cyBzaG91bGQgY2xvc2UgdGhlCiAgICAgICAgICMgdW5kZXJseWluZyBzb2NrZXQKLSAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgogICAgICAgICAgICAgcmVzcG9uc2UgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCkKICAgICAgICAgICAgIHNvY2sgPSByZXNwb25zZS5mcApAQCAtMTAxLDExICs5OSw5IEBACiAKICAgICBkZWYgdGVzdF9mdHAoc2VsZik6CiAgICAgICAgIHVybHMgPSBbCi0gICAgICAgICAgICAnZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9SRUFETUUnLAotICAgICAgICAgICAgJ2Z0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvbm9uLWV4aXN0ZW50LWZpbGUnLAotICAgICAgICAgICAgIydmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGVlbm94L2tlcm5lbC90ZXN0JywKLSAgICAgICAgICAgICdmdHA6Ly9nYXRla2VlcGVyLnJlc2VhcmNoLmNvbXBhcS5jb20vcHViL0RFQy9TUkMnCi0gICAgICAgICAgICAgICAgJy9yZXNlYXJjaC1yZXBvcnRzLzAwUkVBRE1FLUxlZ2FsLVJ1bGVzLVJlZ3MnLAorICAgICAgICAgICAgJ2Z0cDovL2Z0cC5kZWJpYW4ub3JnL2RlYmlhbi9SRUFETUUnLAorICAgICAgICAgICAgKCdmdHA6Ly9mdHAuZGViaWFuLm9yZy9kZWJpYW4vbm9uLWV4aXN0ZW50LWZpbGUnLAorICAgICAgICAgICAgIE5vbmUsIHVybGxpYi5lcnJvci5VUkxFcnJvciksCiAgICAgICAgICAgICBdCiAgICAgICAgIHNlbGYuX3Rlc3RfdXJscyh1cmxzLCBzZWxmLl9leHRyYV9oYW5kbGVycygpKQogCkBAIC0xNjIsNiArMTU4LDE0IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcy5nZXR1cmwoKSwKICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly93d3cucHl0aG9udGVzdC5uZXQvaW5kZXguaHRtbCNmcmFnIikKIAorICAgIGRlZiB0ZXN0X3JlZGlyZWN0X3VybF93aXRoZnJhZyhzZWxmKToKKyAgICAgICAgcmVkaXJlY3RfdXJsX3dpdGhfZnJhZyA9ICJodHRwOi8vd3d3LnB5dGhvbnRlc3QubmV0L3JlZGlyL3dpdGhfZnJhZy8iCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQocmVkaXJlY3RfdXJsX3dpdGhfZnJhZyk6CisgICAgICAgICAgICByZXEgPSB1cmxsaWIucmVxdWVzdC5SZXF1ZXN0KHJlZGlyZWN0X3VybF93aXRoX2ZyYWcpCisgICAgICAgICAgICByZXMgPSB1cmxsaWIucmVxdWVzdC51cmxvcGVuKHJlcSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLmdldHVybCgpLAorICAgICAgICAgICAgICAgICAgICAiaHR0cDovL3d3dy5weXRob250ZXN0Lm5ldC9lbHNld2hlcmUvI2ZyYWciKQorCiAgICAgZGVmIHRlc3RfY3VzdG9tX2hlYWRlcnMoc2VsZik6CiAgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CkBAIC0yMDUsMzkgKzIwOSwzNCBAQAogICAgICAgICAgICAgdXJsb3BlbiA9IF93cmFwX3dpdGhfcmV0cnlfdGhyaWNlKHVybG9wZW4sIHVybGxpYi5lcnJvci5VUkxFcnJvcikKIAogICAgICAgICBmb3IgdXJsIGluIHVybHM6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKHVybCwgdHVwbGUpOgotICAgICAgICAgICAgICAgIHVybCwgcmVxLCBleHBlY3RlZF9lcnIgPSB1cmwKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmVxID0gZXhwZWN0ZWRfZXJyID0gTm9uZQotCi0gICAgICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6Ci0gICAgICAgICAgICAgICAgZGVidWcodXJsKQotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgZiA9IHVybG9wZW4odXJsLCByZXEsIFRJTUVPVVQpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3IgYXMgZXJyOgotICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhlcnIpCi0gICAgICAgICAgICAgICAgICAgIGlmIGV4cGVjdGVkX2VycjoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiRGlkbid0IGdldCBleHBlY3RlZCBlcnJvcihzKSAlcyBmb3IgJXMgJXMsIGdvdCAlczogJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXhwZWN0ZWRfZXJyLCB1cmwsIHJlcSwgdHlwZShlcnIpLCBlcnIpKQotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGVyciwgZXhwZWN0ZWRfZXJyLCBtc2cpCi0gICAgICAgICAgICAgICAgZXhjZXB0IHVybGxpYi5lcnJvci5VUkxFcnJvciBhcyBlcnI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXJyWzBdLCBzb2NrZXQudGltZW91dCk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiPHRpbWVvdXQ6ICVzPiIgJSB1cmwsIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodXJsPXVybCk6CisgICAgICAgICAgICAgICAgaWYgaXNpbnN0YW5jZSh1cmwsIHR1cGxlKToKKyAgICAgICAgICAgICAgICAgICAgdXJsLCByZXEsIGV4cGVjdGVkX2VyciA9IHVybAogICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlcSA9IGV4cGVjdGVkX2VyciA9IE5vbmUKKworICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQodXJsKToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBzdXBwb3J0LnRpbWVfb3V0LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuc29ja2V0X3BlZXJfcmVzZXQsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydC5pb2Vycm9yX3BlZXJfcmVzZXQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gZi5yZWFkKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygicmVhZCAlZCBieXRlcyIgJSBsZW4oYnVmKSkKLSAgICAgICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC50aW1lb3V0OgotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQoIjx0aW1lb3V0OiAlcz4iICUgdXJsLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQotICAgICAgICAgICAgZGVidWcoIioqKioqKioqIG5leHQgdXJsIGNvbWluZyB1cC4uLiIpCi0gICAgICAgICAgICB0aW1lLnNsZWVwKDAuMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGYgPSB1cmxvcGVuKHVybCwgcmVxLCBUSU1FT1VUKQorICAgICAgICAgICAgICAgICAgICAjIHVybGxpYi5lcnJvci5VUkxFcnJvciBpcyBhIHN1YmNsYXNzIG9mIE9TRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZXhwZWN0ZWRfZXJyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyA9ICgiRGlkbid0IGdldCBleHBlY3RlZCBlcnJvcihzKSAlcyBmb3IgJXMgJXMsIGdvdCAlczogJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4cGVjdGVkX2VyciwgdXJsLCByZXEsIHR5cGUoZXJyKSwgZXJyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZXJyLCBleHBlY3RlZF9lcnIsIG1zZykKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQudGltZV9vdXQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuc29ja2V0X3BlZXJfcmVzZXQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuaW9lcnJvcl9wZWVyX3Jlc2V0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYgPSBmLnJlYWQoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZygicmVhZCAlZCBieXRlcyIgJSBsZW4oYnVmKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBzb2NrZXQudGltZW91dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgiPHRpbWVvdXQ6ICVzPiIgJSB1cmwsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgICAgICAgICAgICAgIGYuY2xvc2UoKQorICAgICAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQogCiAgICAgZGVmIF9leHRyYV9oYW5kbGVycyhzZWxmKToKICAgICAgICAgaGFuZGxlcnMgPSBbXQpAQCAtMjUzLDcgKzI1Miw3IEBACiBjbGFzcyBUaW1lb3V0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3RfaHR0cF9iYXNpYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkpCi0gICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCwgdGltZW91dD1Ob25lKToKICAgICAgICAgICAgIHUgPSBfdXJsb3Blbl93aXRoX3JldHJ5KHVybCkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1LmNsb3NlKQpAQCAtMjYxLDcgKzI2MCw3IEBACiAKICAgICBkZWYgdGVzdF9odHRwX2RlZmF1bHRfdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkpCi0gICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCiAgICAgICAgICAgICB0cnk6CkBAIC0yNzMsNyArMjcyLDcgQEAKIAogICAgIGRlZiB0ZXN0X2h0dHBfbm9fdGltZW91dChzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkpCi0gICAgICAgIHVybCA9ICJodHRwOi8vd3d3LnB5dGhvbi5vcmciCisgICAgICAgIHVybCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tIgogICAgICAgICB3aXRoIHN1cHBvcnQudHJhbnNpZW50X2ludGVybmV0KHVybCk6CiAgICAgICAgICAgICBzb2NrZXQuc2V0ZGVmYXVsdHRpbWVvdXQoNjApCiAgICAgICAgICAgICB0cnk6CkBAIC0yODQsMTMgKzI4MywxMyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUodS5mcC5yYXcuX3NvY2suZ2V0dGltZW91dCgpKQogCiAgICAgZGVmIHRlc3RfaHR0cF90aW1lb3V0KHNlbGYpOgotICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnIgorICAgICAgICB1cmwgPSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbSIKICAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCh1cmwpOgogICAgICAgICAgICAgdSA9IF91cmxvcGVuX3dpdGhfcmV0cnkodXJsLCB0aW1lb3V0PTEyMCkKICAgICAgICAgICAgIHNlbGYuYWRkQ2xlYW51cCh1LmNsb3NlKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1LmZwLnJhdy5fc29jay5nZXR0aW1lb3V0KCksIDEyMCkKIAotICAgIEZUUF9IT1NUID0gImZ0cDovL2Z0cC5taXJyb3IubmwvcHViL2dudS8iCisgICAgRlRQX0hPU1QgPSAnZnRwOi8vZnRwLmRlYmlhbi5vcmcvZGViaWFuLycKIAogICAgIGRlZiB0ZXN0X2Z0cF9iYXNpYyhzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoc29ja2V0LmdldGRlZmF1bHR0aW1lb3V0KCkpCkBAIC0zMjgsMzUgKzMyNyw1IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHUuZnAuZnAucmF3Ll9zb2NrLmdldHRpbWVvdXQoKSwgNjApCiAKIAotQHVuaXR0ZXN0LnNraXBVbmxlc3Moc3NsLCAicmVxdWlyZXMgU1NMIHN1cHBvcnQiKQotY2xhc3MgSFRUUFNUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgdGVzdF9zbmkoc2VsZik6Ci0gICAgICAgIHNlbGYuc2tpcFRlc3QoInRlc3QgZGlzYWJsZWQgLSB0ZXN0IHNlcnZlciBuZWVkZWQiKQotICAgICAgICAjIENoZWNrcyB0aGF0IFNlcnZlciBOYW1lIEluZGljYXRpb24gd29ya3MsIGlmIHN1cHBvcnRlZCBieSB0aGUKLSAgICAgICAgIyBPcGVuU1NMIGxpbmtlZCB0by4KLSAgICAgICAgIyBUaGUgc3NsIG1vZHVsZSBpdHNlbGYgZG9lc24ndCBoYXZlIHNlcnZlci1zaWRlIHN1cHBvcnQgZm9yIFNOSSwKLSAgICAgICAgIyBzbyB3ZSByZWx5IG9uIGEgdGhpcmQtcGFydHkgdGVzdCBzaXRlLgotICAgICAgICBleHBlY3Rfc25pID0gc3NsLkhBU19TTkkKLSAgICAgICAgd2l0aCBzdXBwb3J0LnRyYW5zaWVudF9pbnRlcm5ldCgiWFhYIik6Ci0gICAgICAgICAgICB1ID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiWFhYIikKLSAgICAgICAgICAgIGNvbnRlbnRzID0gdS5yZWFkYWxsKCkKLSAgICAgICAgICAgIGlmIGV4cGVjdF9zbmk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIkdyZWF0IiwgY29udGVudHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiIlVuZm9ydHVuYXRlbHkiLCBjb250ZW50cykKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbihiIkdyZWF0IiwgY29udGVudHMpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihiIlVuZm9ydHVuYXRlbHkiLCBjb250ZW50cykKLQotCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgc3VwcG9ydC5yZXF1aXJlcygibmV0d29yayIpCi0gICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQXV0aFRlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIEhUVFBTVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgT3RoZXJOZXR3b3JrVGVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ2xvc2VTb2NrZXRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgIFRpbWVvdXRUZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICkKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWJfcmVzcG9uc2UucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYl9yZXNwb25zZS5weQppbmRleCBmZGQzMzI1Li4wZWI1OTQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYl9yZXNwb25zZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYl9yZXNwb25zZS5weQpAQCAtMSw0MiArMSw1OSBAQAogIiIiVW5pdCB0ZXN0cyBmb3IgY29kZSBpbiB1cmxsaWIucmVzcG9uc2UuIiIiCiAKLWltcG9ydCB0ZXN0LnN1cHBvcnQKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCB0ZW1wZmlsZQogaW1wb3J0IHVybGxpYi5yZXNwb25zZQogaW1wb3J0IHVuaXR0ZXN0CiAKLWNsYXNzIFRlc3RGaWxlKG9iamVjdCk6Ci0KLSAgICBkZWYgX19pbml0X18oc2VsZik6Ci0gICAgICAgIHNlbGYuY2xvc2VkID0gRmFsc2UKLQotICAgIGRlZiByZWFkKHNlbGYsIGJ5dGVzKToKLSAgICAgICAgcGFzcwotCi0gICAgZGVmIHJlYWRsaW5lKHNlbGYpOgotICAgICAgICBwYXNzCi0KLSAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYuY2xvc2VkID0gVHJ1ZQotCi1jbGFzcyBUZXN0YWRkYmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICAjIFRPRE8oamh5bHRvbik6IFdyaXRlIHRlc3RzIGZvciBvdGhlciBmdW5jdGlvbmFsaXR5IG9mIGFkZGJhc2UoKQorY2xhc3MgVGVzdFJlc3BvbnNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKIAogICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5mcCA9IFRlc3RGaWxlKCkKLSAgICAgICAgc2VsZi5hZGRiYXNlID0gdXJsbGliLnJlc3BvbnNlLmFkZGJhc2Uoc2VsZi5mcCkKKyAgICAgICAgc2VsZi5zb2NrID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKQorICAgICAgICBzZWxmLmZwID0gc2VsZi5zb2NrLm1ha2VmaWxlKCdyYicpCisgICAgICAgIHNlbGYudGVzdF9oZWFkZXJzID0geyJIb3N0IjogInd3dy5weXRob24ub3JnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvbm5lY3Rpb24iOiAiY2xvc2UifQogCiAgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgYWRkYmFzZSA9IHVybGxpYi5yZXNwb25zZS5hZGRiYXNlKHNlbGYuZnApCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGFkZGJhc2UsIHRlbXBmaWxlLl9UZW1wb3JhcnlGaWxlV3JhcHBlcikKKwogICAgICAgICBkZWYgZigpOgotICAgICAgICAgICAgd2l0aCBzZWxmLmFkZGJhc2UgYXMgc3BhbToKKyAgICAgICAgICAgIHdpdGggYWRkYmFzZSBhcyBzcGFtOgogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLmZwLmNsb3NlZCkKICAgICAgICAgZigpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZwLmNsb3NlZCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZikKIAotZGVmIHRlc3RfbWFpbigpOgotICAgIHRlc3Quc3VwcG9ydC5ydW5fdW5pdHRlc3QoVGVzdGFkZGJhc2UpCisgICAgZGVmIHRlc3RfYWRkY2xvc2Vob29rKHNlbGYpOgorICAgICAgICBjbG9zZWhvb2tfY2FsbGVkID0gRmFsc2UKKworICAgICAgICBkZWYgY2xvc2Vob29rKCk6CisgICAgICAgICAgICBub25sb2NhbCBjbG9zZWhvb2tfY2FsbGVkCisgICAgICAgICAgICBjbG9zZWhvb2tfY2FsbGVkID0gVHJ1ZQorCisgICAgICAgIGNsb3NlaG9vayA9IHVybGxpYi5yZXNwb25zZS5hZGRjbG9zZWhvb2soc2VsZi5mcCwgY2xvc2Vob29rKQorICAgICAgICBjbG9zZWhvb2suY2xvc2UoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmZwLmNsb3NlZCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGNsb3NlaG9va19jYWxsZWQpCisKKyAgICBkZWYgdGVzdF9hZGRpbmZvKHNlbGYpOgorICAgICAgICBpbmZvID0gdXJsbGliLnJlc3BvbnNlLmFkZGluZm8oc2VsZi5mcCwgc2VsZi50ZXN0X2hlYWRlcnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mby5pbmZvKCksIHNlbGYudGVzdF9oZWFkZXJzKQorCisgICAgZGVmIHRlc3RfYWRkaW5mb3VybChzZWxmKToKKyAgICAgICAgdXJsID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZyIKKyAgICAgICAgY29kZSA9IDIwMAorICAgICAgICBpbmZvdXJsID0gdXJsbGliLnJlc3BvbnNlLmFkZGluZm91cmwoc2VsZi5mcCwgc2VsZi50ZXN0X2hlYWRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsIGNvZGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb3VybC5pbmZvKCksIHNlbGYudGVzdF9oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm91cmwuZ2V0dXJsKCksIHVybCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvdXJsLmdldGNvZGUoKSwgY29kZSkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc2VsZi5zb2NrLmNsb3NlKCkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICB0ZXN0X21haW4oKQorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF91cmxsaWJuZXQucHkgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQppbmRleCAzMWI2MWYxLi40MmViYjZlIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3VybGxpYm5ldC5weQpAQCAtMTAsNiArMTAsOCBAQAogaW1wb3J0IHRpbWUKIAogCitzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKKwogY2xhc3MgVVJMVGltZW91dFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICMgWFhYIHRoaXMgdGVzdCBkb2Vzbid0IHNlZW0gdG8gdGVzdCBhbnl0aGluZyB1c2VmdWwuCiAKQEAgLTIyLDggKzI0LDggQEAKICAgICAgICAgc29ja2V0LnNldGRlZmF1bHR0aW1lb3V0KE5vbmUpCiAKICAgICBkZWYgdGVzdFVSTHJlYWQoc2VsZik6Ci0gICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInd3dy5weXRob24ub3JnIik6Ci0gICAgICAgICAgICBmID0gdXJsbGliLnJlcXVlc3QudXJsb3BlbigiaHR0cDovL3d3dy5weXRob24ub3JnLyIpCisgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoInd3dy5leGFtcGxlLmNvbSIpOgorICAgICAgICAgICAgZiA9IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikKICAgICAgICAgICAgIHggPSBmLnJlYWQoKQogCiAKQEAgLTM2LDcgKzM4LDcgQEAKICAgICBmb3IgdHJhbnNwYXJlbnQgcmVkaXJlY3Rpb24gaGF2ZSBiZWVuIHdyaXR0ZW4uCiAKICAgICBzZXRVcCBpcyBub3QgdXNlZCBmb3IgYWx3YXlzIGNvbnN0cnVjdGluZyBhIGNvbm5lY3Rpb24gdG8KLSAgICBodHRwOi8vd3d3LnB5dGhvbi5vcmcvIHNpbmNlIHRoZXJlIGEgZmV3IHRlc3RzIHRoYXQgZG9uJ3QgdXNlIHRoYXQgYWRkcmVzcworICAgIGh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIHNpbmNlIHRoZXJlIGEgZmV3IHRlc3RzIHRoYXQgZG9uJ3QgdXNlIHRoYXQgYWRkcmVzcwogICAgIGFuZCBtYWtpbmcgYSBjb25uZWN0aW9uIGlzIGV4cGVuc2l2ZSBlbm91Z2ggdG8gd2FycmFudCBtaW5pbWl6aW5nIHVubmVlZGVkCiAgICAgY29ubmVjdGlvbnMuCiAKQEAgLTU0LDcgKzU2LDcgQEAKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFNpbXBsZSB0ZXN0IGV4cGVjdGVkIHRvIHBhc3MuCi0gICAgICAgIHdpdGggc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikgYXMgb3Blbl91cmw6CisgICAgICAgIHdpdGggc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpIGFzIG9wZW5fdXJsOgogICAgICAgICAgICAgZm9yIGF0dHIgaW4gKCJyZWFkIiwgInJlYWRsaW5lIiwgInJlYWRsaW5lcyIsICJmaWxlbm8iLCAiY2xvc2UiLAogICAgICAgICAgICAgICAgICAgICAgICAgICJpbmZvIiwgImdldHVybCIpOgogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNhdHRyKG9wZW5fdXJsLCBhdHRyKSwgIm9iamVjdCByZXR1cm5lZCBmcm9tICIKQEAgLTYzLDcgKzY1LDcgQEAKIAogICAgIGRlZiB0ZXN0X3JlYWRsaW5lcyhzZWxmKToKICAgICAgICAgIyBUZXN0IGJvdGggcmVhZGxpbmUgYW5kIHJlYWRsaW5lcy4KLSAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iKSBhcyBvcGVuX3VybDoKKyAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikgYXMgb3Blbl91cmw6CiAgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uob3Blbl91cmwucmVhZGxpbmUoKSwgYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRsaW5lIGRpZCBub3QgcmV0dXJuIGEgc3RyaW5nIikKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcGVuX3VybC5yZWFkbGluZXMoKSwgbGlzdCwKQEAgLTcxLDcgKzczLDcgQEAKIAogICAgIGRlZiB0ZXN0X2luZm8oc2VsZik6CiAgICAgICAgICMgVGVzdCAnaW5mbycuCi0gICAgICAgIHdpdGggc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikgYXMgb3Blbl91cmw6CisgICAgICAgIHdpdGggc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpIGFzIG9wZW5fdXJsOgogICAgICAgICAgICAgaW5mb19vYmogPSBvcGVuX3VybC5pbmZvKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvX29iaiwgZW1haWwubWVzc2FnZS5NZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgcmV0dXJuZWQgYnkgJ2luZm8nIGlzIG5vdCBhbiAiCkBAIC04MCwxNiArODIsMTcgQEAKIAogICAgIGRlZiB0ZXN0X2dldHVybChzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgc2FtZSBVUkwgYXMgb3BlbmVkIGlzIHJldHVybmVkIGJ5IGdldHVybC4KLSAgICAgICAgVVJMID0gImh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvIgorICAgICAgICBVUkwgPSAiaHR0cDovL3d3dy5leGFtcGxlLmNvbS8iCiAgICAgICAgIHdpdGggc2VsZi51cmxvcGVuKFVSTCkgYXMgb3Blbl91cmw6CiAgICAgICAgICAgICBnb3R0ZW5fdXJsID0gb3Blbl91cmwuZ2V0dXJsKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZ290dGVuX3VybCwgVVJMKQogCiAgICAgZGVmIHRlc3RfZ2V0Y29kZShzZWxmKToKICAgICAgICAgIyB0ZXN0IGdldGNvZGUoKSB3aXRoIHRoZSBmYW5jeSBvcGVuZXIgdG8gZ2V0IDQwNCBlcnJvciBjb2RlcwotICAgICAgICBVUkwgPSAiaHR0cDovL3d3dy5weXRob24ub3JnL1hYWGludmFsaWRYWFgiCisgICAgICAgIFVSTCA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tL1hYWGludmFsaWRYWFgiCiAgICAgICAgIHdpdGggc3VwcG9ydC50cmFuc2llbnRfaW50ZXJuZXQoVVJMKToKLSAgICAgICAgICAgIG9wZW5fdXJsID0gdXJsbGliLnJlcXVlc3QuRmFuY3lVUkxvcGVuZXIoKS5vcGVuKFVSTCkKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJucyhEZXByZWNhdGlvbldhcm5pbmcpOgorICAgICAgICAgICAgICAgIG9wZW5fdXJsID0gdXJsbGliLnJlcXVlc3QuRmFuY3lVUkxvcGVuZXIoKS5vcGVuKFVSTCkKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBjb2RlID0gb3Blbl91cmwuZ2V0Y29kZSgpCiAgICAgICAgICAgICBmaW5hbGx5OgpAQCAtMTAxLDcgKzEwNCw3IEBACiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMucGxhdGZvcm0gaW4gKCd3aW4zMicsKSwgJ25vdCBhcHByb3ByaWF0ZSBmb3IgV2luZG93cycpCiAgICAgZGVmIHRlc3RfZmlsZW5vKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSBmZCByZXR1cm5lZCBieSBmaWxlbm8gaXMgdmFsaWQuCi0gICAgICAgIHdpdGggc2VsZi51cmxvcGVuKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIiwgdGltZW91dD1Ob25lKSBhcyBvcGVuX3VybDoKKyAgICAgICAgd2l0aCBzZWxmLnVybG9wZW4oImh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8iLCB0aW1lb3V0PU5vbmUpIGFzIG9wZW5fdXJsOgogICAgICAgICAgICAgZmQgPSBvcGVuX3VybC5maWxlbm8oKQogICAgICAgICAgICAgd2l0aCBvcy5mZG9wZW4oZmQsICdyYicpIGFzIGY6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYucmVhZCgpLCAicmVhZGluZyBmcm9tIGZpbGUgY3JlYXRlZCB1c2luZyBmZCAiCkBAIC0xMjEsMTYgKzEyNCwxNSBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgIyBUaGlzIGhhcHBlbnMgd2l0aCBzb21lIG92ZXJ6ZWFsb3VzIEROUyBwcm92aWRlcnMgc3VjaCBhcyBPcGVuRE5TCiAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCIlciBzaG91bGQgbm90IHJlc29sdmUgZm9yIHRlc3QgdG8gd29yayIgJSBib2d1c19kb21haW4pCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKElPRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgU0YgcGF0Y2ggODA5OTE1OiAgSW4gU2VwIDIwMDMsIFZlcmlTaWduIHN0YXJ0ZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBoaWdoamFja2luZyBpbnZhbGlkIC5jb20gYW5kIC5uZXQgYWRkcmVzc2VzIHRvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgYm9vc3QgdHJhZmZpYyB0byB0aGVpciBvd24gc2l0ZS4gIFRoaXMgdGVzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0ZWQgZmFpbGluZyB0aGVuLiAgT25lIGhvcGVzIHRoZSAuaW52YWxpZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRvbWFpbiB3aWxsIGJlIHNwYXJlZCB0byBzZXJ2ZSBpdHMgZGVmaW5lZAotICAgICAgICAgICAgICAgICAgICAgICAgICAjIHB1cnBvc2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICMgdXJsbGliLnVybG9wZW4sICJodHRwOi8vd3d3LnNhZGZsa2pzYXNhZGYuY29tLyIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vc2FkZmxranNhc2YuaS5udmFsaS5kLyIpCisgICAgICAgIGZhaWx1cmVfZXhwbGFuYXRpb24gPSAoJ29wZW5pbmcgYW4gaW52YWxpZCBVUkwgZGlkIG5vdCByYWlzZSBPU0Vycm9yOyAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhbiBiZSBjYXVzZWQgYnkgYSBicm9rZW4gRE5TIHNlcnZlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyhlLmcuIHJldHVybnMgNDA0IG9yIGhpamFja3MgcGFnZSknKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG1zZz1mYWlsdXJlX2V4cGxhbmF0aW9uKToKKyAgICAgICAgICAgICMgU0YgcGF0Y2ggODA5OTE1OiAgSW4gU2VwIDIwMDMsIFZlcmlTaWduIHN0YXJ0ZWQgaGlnaGphY2tpbmcKKyAgICAgICAgICAgICMgaW52YWxpZCAuY29tIGFuZCAubmV0IGFkZHJlc3NlcyB0byBib29zdCB0cmFmZmljIHRvIHRoZWlyIG93bgorICAgICAgICAgICAgIyBzaXRlLiAgVGhpcyB0ZXN0IHN0YXJ0ZWQgZmFpbGluZyB0aGVuLiAgT25lIGhvcGVzIHRoZSAuaW52YWxpZAorICAgICAgICAgICAgIyBkb21haW4gd2lsbCBiZSBzcGFyZWQgdG8gc2VydmUgaXRzIGRlZmluZWQgcHVycG9zZS4KKyAgICAgICAgICAgIHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oImh0dHA6Ly9zYWRmbGtqc2FzZi5pLm52YWxpLmQvIikKIAogCiBjbGFzcyB1cmxyZXRyaWV2ZU5ldHdvcmtUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNDgsNyArMTUwLDcgQEAKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgogICAgICAgICAjIFRlc3QgYmFzaWMgZnVuY3Rpb25hbGl0eS4KLSAgICAgICAgd2l0aCBzZWxmLnVybHJldHJpZXZlKCJodHRwOi8vd3d3LnB5dGhvbi5vcmcvIikgYXMgKGZpbGVfbG9jYXRpb24sIGluZm8pOgorICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIikgYXMgKGZpbGVfbG9jYXRpb24sIGluZm8pOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVfbG9jYXRpb24pLCAiZmlsZSBsb2NhdGlvbiByZXR1cm5lZCBieSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHVybHJldHJpZXZlIGlzIG5vdCBhIHZhbGlkIHBhdGgiKQogICAgICAgICAgICAgd2l0aCBvcGVuKGZpbGVfbG9jYXRpb24sICdyYicpIGFzIGY6CkBAIC0xNTcsNyArMTU5LDcgQEAKIAogICAgIGRlZiB0ZXN0X3NwZWNpZmllZF9wYXRoKHNlbGYpOgogICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHNwZWNpZnlpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBmaWxlIHRvIHdyaXRlIHRvIHdvcmtzLgotICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cucHl0aG9uLm9yZy8iLAorICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoImh0dHA6Ly93d3cuZXhhbXBsZS5jb20vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQuVEVTVEZOKSBhcyAoZmlsZV9sb2NhdGlvbiwgaW5mbyk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZpbGVfbG9jYXRpb24sIHN1cHBvcnQuVEVTVEZOKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKGZpbGVfbG9jYXRpb24pKQpAQCAtMTY2LDExICsxNjgsMTEgQEAKIAogICAgIGRlZiB0ZXN0X2hlYWRlcihzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgaGVhZGVyIHJldHVybmVkIGFzIDJuZCB2YWx1ZSBmcm9tIHVybHJldHJpZXZlIGlzIGdvb2QuCi0gICAgICAgIHdpdGggc2VsZi51cmxyZXRyaWV2ZSgiaHR0cDovL3d3dy5weXRob24ub3JnLyIpIGFzIChmaWxlX2xvY2F0aW9uLCBpbmZvKToKKyAgICAgICAgd2l0aCBzZWxmLnVybHJldHJpZXZlKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpIGFzIChmaWxlX2xvY2F0aW9uLCBpbmZvKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvLCBlbWFpbC5tZXNzYWdlLk1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluZm8gaXMgbm90IGFuIGluc3RhbmNlIG9mIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZSIpCiAKLSAgICBsb2dvID0gImh0dHA6Ly93d3cucHl0aG9uLm9yZy9zdGF0aWMvY29tbXVuaXR5X2xvZ29zL3B5dGhvbi1sb2dvLW1hc3Rlci12My1UTS5wbmciCisgICAgbG9nbyA9ICJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIKIAogICAgIGRlZiB0ZXN0X2RhdGFfaGVhZGVyKHNlbGYpOgogICAgICAgICB3aXRoIHNlbGYudXJscmV0cmlldmUoc2VsZi5sb2dvKSBhcyAoZmlsZV9sb2NhdGlvbiwgZmlsZWhlYWRlcnMpOgpAQCAtMjA3LDExICsyMDksNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiID49IHRvdGFsIHNpemUgaW4gJXMiICUgcmVjb3Jkc19yZXByKQogCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJlcXVpcmVzKCduZXR3b3JrJykKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVUkxUaW1lb3V0VGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1cmxvcGVuTmV0d29ya1Rlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgIHVybHJldHJpZXZlTmV0d29ya1Rlc3RzKQotCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgotICAgIHRlc3RfbWFpbigpCisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5IGIvTGliL3Rlc3QvdGVzdF91cmxwYXJzZS5weQppbmRleCBkNjdjZjI1Li4xNzc1ZWYzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3VybHBhcnNlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXJscGFyc2UucHkKQEAgLTEsNCArMSwzIEBACi1mcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHVybGxpYi5wYXJzZQogCkBAIC02NjQsNiArNjYzLDQ3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodXJsbGliLnBhcnNlLnVybHBhcnNlKGIieC1uZXdzY2hlbWU6Ly9mb28uY29tL3N0dWZmP3F1ZXJ5IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGIneC1uZXdzY2hlbWUnLCBiJ2Zvby5jb20nLCBiJy9zdHVmZicsIGInJywgYidxdWVyeScsIGInJykpCiAKKyAgICBkZWYgdGVzdF9kZWZhdWx0X3NjaGVtZShzZWxmKToKKyAgICAgICAgIyBFeGVyY2lzZSB0aGUgc2NoZW1lIHBhcmFtZXRlciBvZiB1cmxwYXJzZSgpIGFuZCB1cmxzcGxpdCgpCisgICAgICAgIGZvciBmdW5jIGluICh1cmxsaWIucGFyc2UudXJscGFyc2UsIHVybGxpYi5wYXJzZS51cmxzcGxpdCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmdW5jdGlvbj1mdW5jKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmdW5jKCJodHRwOi8vZXhhbXBsZS5uZXQvIiwgImZ0cCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2NoZW1lLCAiaHR0cCIpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYyhiImh0dHA6Ly9leGFtcGxlLm5ldC8iLCBiImZ0cCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2NoZW1lLCBiImh0dHAiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygicGF0aCIsICJmdHAiKS5zY2hlbWUsICJmdHAiKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuYygicGF0aCIsIHNjaGVtZT0iZnRwIikuc2NoZW1lLCAiZnRwIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoYiJwYXRoIiwgc2NoZW1lPWIiZnRwIikuc2NoZW1lLCBiImZ0cCIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKCJwYXRoIikuc2NoZW1lLCAiIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmMoYiJwYXRoIikuc2NoZW1lLCBiIiIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKGIicGF0aCIsICIiKS5zY2hlbWUsIGIiIikKKworICAgIGRlZiB0ZXN0X3BhcnNlX2ZyYWdtZW50cyhzZWxmKToKKyAgICAgICAgIyBFeGVyY2lzZSB0aGUgYWxsb3dfZnJhZ21lbnRzIHBhcmFtZXRlciBvZiB1cmxwYXJzZSgpIGFuZCB1cmxzcGxpdCgpCisgICAgICAgIHRlc3RzID0gKAorICAgICAgICAgICAgKCJodHRwOiNmcmFnIiwgInBhdGgiKSwKKyAgICAgICAgICAgICgiLy9leGFtcGxlLm5ldCNmcmFnIiwgInBhdGgiKSwKKyAgICAgICAgICAgICgiaW5kZXguaHRtbCNmcmFnIiwgInBhdGgiKSwKKyAgICAgICAgICAgICgiO2E9YiNmcmFnIiwgInBhcmFtcyIpLAorICAgICAgICAgICAgKCI/YT1iI2ZyYWciLCAicXVlcnkiKSwKKyAgICAgICAgICAgICgiI2ZyYWciLCAicGF0aCIpLAorICAgICAgICApCisgICAgICAgIGZvciB1cmwsIGF0dHIgaW4gdGVzdHM6CisgICAgICAgICAgICBmb3IgZnVuYyBpbiAodXJsbGliLnBhcnNlLnVybHBhcnNlLCB1cmxsaWIucGFyc2UudXJsc3BsaXQpOgorICAgICAgICAgICAgICAgIGlmIGF0dHIgPT0gInBhcmFtcyIgYW5kIGZ1bmMgaXMgdXJsbGliLnBhcnNlLnVybHNwbGl0OgorICAgICAgICAgICAgICAgICAgICBhdHRyID0gInBhdGgiCisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QodXJsPXVybCwgZnVuY3Rpb249ZnVuYyk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGZ1bmModXJsLCBhbGxvd19mcmFnbWVudHM9RmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmZyYWdtZW50LCAiIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGdldGF0dHIocmVzdWx0LCBhdHRyKS5lbmRzd2l0aCgiI2ZyYWciKSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHVybCwgIiIsIEZhbHNlKS5mcmFnbWVudCwgIiIpCisKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZnVuYyh1cmwsIGFsbG93X2ZyYWdtZW50cz1UcnVlKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5mcmFnbWVudCwgImZyYWciKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGdldGF0dHIocmVzdWx0LCBhdHRyKS5lbmRzd2l0aCgiZnJhZyIpKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZ1bmModXJsLCAiIiwgVHJ1ZSkuZnJhZ21lbnQsICJmcmFnIikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jKHVybCkuZnJhZ21lbnQsICJmcmFnIikKKwogICAgIGRlZiB0ZXN0X21peGVkX3R5cGVzX3JlamVjdGVkKHNlbGYpOgogICAgICAgICAjIFNldmVyYWwgZnVuY3Rpb25zIHRoYXQgcHJvY2VzcyBlaXRoZXIgc3RyaW5ncyBvciBBU0NJSSBlbmNvZGVkIGJ5dGVzCiAgICAgICAgICMgYWNjZXB0IG11bHRpcGxlIGFyZ3VtZW50cy4gQ2hlY2sgdGhleSByZWplY3QgbWl4ZWQgdHlwZSBpbnB1dApAQCAtNzQ5LDUyICs3ODksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycz0iaWdub3JlIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIFsoJ2tleScsICdcdTAxNDEtJyldKQogCi0gICAgZGVmIHRlc3Rfc3BsaXRwb3J0KHNlbGYpOgotICAgICAgICBzcGxpdHBvcnQgPSB1cmxsaWIucGFyc2Uuc3BsaXRwb3J0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwb3J0KCdwYXJyb3Q6ODgnKSwgKCdwYXJyb3QnLCAnODgnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBvcnQoJ3BhcnJvdCcpLCAoJ3BhcnJvdCcsIE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgncGFycm90OicpLCAoJ3BhcnJvdCcsIE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgnMTI3LjAuMC4xJyksICgnMTI3LjAuMC4xJywgTm9uZSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwb3J0KCdwYXJyb3Q6Y2hlZXNlJyksICgncGFycm90OmNoZWVzZScsIE5vbmUpKQotCi0gICAgZGVmIHRlc3Rfc3BsaXRucG9ydChzZWxmKToKLSAgICAgICAgc3BsaXRucG9ydCA9IHVybGxpYi5wYXJzZS5zcGxpdG5wb3J0Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90Ojg4JyksICgncGFycm90JywgODgpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJ3BhcnJvdCcpLCAoJ3BhcnJvdCcsIC0xKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCdwYXJyb3QnLCA1NSksICgncGFycm90JywgNTUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJ3BhcnJvdDonKSwgKCdwYXJyb3QnLCAtMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90OicsIDU1KSwgKCdwYXJyb3QnLCA1NSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgnMTI3LjAuMC4xJyksICgnMTI3LjAuMC4xJywgLTEpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJzEyNy4wLjAuMScsIDU1KSwgKCcxMjcuMC4wLjEnLCA1NSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90OmNoZWVzZScpLCAoJ3BhcnJvdCcsIE5vbmUpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJ3BhcnJvdDpjaGVlc2UnLCA1NSksICgncGFycm90JywgTm9uZSkpCi0KLSAgICBkZWYgdGVzdF9zcGxpdHF1ZXJ5KHNlbGYpOgotICAgICAgICAjIE5vcm1hbCBjYXNlcyBhcmUgZXhlcmNpc2VkIGJ5IG90aGVyIHRlc3RzOyBlbnN1cmUgdGhhdCB3ZSBhbHNvCi0gICAgICAgICMgY2F0Y2ggY2FzZXMgd2l0aCBubyBwb3J0IHNwZWNpZmllZCAodGVzdGNhc2UgZW5zdXJpbmcgY292ZXJhZ2UpCi0gICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS5zcGxpdHF1ZXJ5KCdodHRwOi8vcHl0aG9uLm9yZy9mYWtlP2Zvbz1iYXInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKCdodHRwOi8vcHl0aG9uLm9yZy9mYWtlJywgJ2Zvbz1iYXInKSkKLSAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnNwbGl0cXVlcnkoJ2h0dHA6Ly9weXRob24ub3JnL2Zha2U/Zm9vPWJhcj8nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKCdodHRwOi8vcHl0aG9uLm9yZy9mYWtlP2Zvbz1iYXInLCAnJykpCi0gICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS5zcGxpdHF1ZXJ5KCdodHRwOi8vcHl0aG9uLm9yZy9mYWtlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsICgnaHR0cDovL3B5dGhvbi5vcmcvZmFrZScsIE5vbmUpKQotCi0gICAgZGVmIHRlc3Rfc3BsaXR2YWx1ZShzZWxmKToKLSAgICAgICAgIyBOb3JtYWwgY2FzZXMgYXJlIGV4ZXJjaXNlZCBieSBvdGhlciB0ZXN0czsgdGVzdCBwYXRob2xvZ2ljYWwgY2FzZXMKLSAgICAgICAgIyB3aXRoIG5vIGtleS92YWx1ZSBwYWlycy4gKHRlc3RjYXNlIGVuc3VyaW5nIGNvdmVyYWdlKQotICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2Uuc3BsaXR2YWx1ZSgnZm9vPWJhcicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAoJ2ZvbycsICdiYXInKSkKLSAgICAgICAgcmVzdWx0ID0gdXJsbGliLnBhcnNlLnNwbGl0dmFsdWUoJ2Zvbz0nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKCdmb28nLCAnJykpCi0gICAgICAgIHJlc3VsdCA9IHVybGxpYi5wYXJzZS5zcGxpdHZhbHVlKCdmb29iYXInKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgKCdmb29iYXInLCBOb25lKSkKLQotICAgIGRlZiB0ZXN0X3RvX2J5dGVzKHNlbGYpOgotICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2UudG9fYnl0ZXMoJ2h0dHA6Ly93d3cucHl0aG9uLm9yZycpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnaHR0cDovL3d3dy5weXRob24ub3JnJykKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1cmxsaWIucGFyc2UudG9fYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbWVkaVx1MDBlNnZhbCcpCi0KICAgICBkZWYgdGVzdF91cmxlbmNvZGVfc2VxdWVuY2VzKHNlbGYpOgogICAgICAgICAjIE90aGVyIHRlc3RzIGluY2lkZW50YWxseSB1cmxlbmNvZGUgdGhpbmdzOyB0ZXN0IG5vbi1jb3ZlcmVkIGNhc2VzOgogICAgICAgICAjIFNlcXVlbmNlIGFuZCBvYmplY3QgdmFsdWVzLgpAQCAtODYzLDkgKzg1NywxMzkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwMS5wYXRoLCAnODYzLTEyMzQnKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAxLnBhcmFtcywgJ3Bob25lLWNvbnRleHQ9KzEtOTE0LTU1NScpCiAKKyAgICBkZWYgdGVzdF9RdW90ZXJfcmVwcihzZWxmKToKKyAgICAgICAgcXVvdGVyID0gdXJsbGliLnBhcnNlLlF1b3Rlcih1cmxsaWIucGFyc2UuX0FMV0FZU19TQUZFKQorICAgICAgICBzZWxmLmFzc2VydEluKCdRdW90ZXInLCByZXByKHF1b3RlcikpCiAKLWRlZiB0ZXN0X21haW4oKToKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChVcmxQYXJzZVRlc3RDYXNlKQorCitjbGFzcyBVdGlsaXR5X1Rlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAiIiJUZXN0Y2FzZSB0byB0ZXN0IHRoZSB2YXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGluIHRoZSB1cmxsaWIuIiIiCisgICAgIyBJbiBQeXRob24gMiB0aGlzIHRlc3QgY2xhc3Mgd2FzIGluIHRlc3RfdXJsbGliLgorCisgICAgZGVmIHRlc3Rfc3BsaXR0eXBlKHNlbGYpOgorICAgICAgICBzcGxpdHR5cGUgPSB1cmxsaWIucGFyc2Uuc3BsaXR0eXBlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR0eXBlKCd0eXBlOm9wYXF1ZXN0cmluZycpLCAoJ3R5cGUnLCAnb3BhcXVlc3RyaW5nJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR0eXBlKCdvcGFxdWVzdHJpbmcnKSwgKE5vbmUsICdvcGFxdWVzdHJpbmcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHR5cGUoJzpvcGFxdWVzdHJpbmcnKSwgKE5vbmUsICc6b3BhcXVlc3RyaW5nJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR0eXBlKCd0eXBlOicpLCAoJ3R5cGUnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR0eXBlKCd0eXBlOm9wYXF1ZTpzdHJpbmcnKSwgKCd0eXBlJywgJ29wYXF1ZTpzdHJpbmcnKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0aG9zdChzZWxmKToKKyAgICAgICAgc3BsaXRob3N0ID0gdXJsbGliLnBhcnNlLnNwbGl0aG9zdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0aG9zdCgnLy93d3cuZXhhbXBsZS5vcmc6ODAvZm9vL2Jhci9iYXouaHRtbCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnd3d3LmV4YW1wbGUub3JnOjgwJywgJy9mb28vYmFyL2Jhei5odG1sJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRob3N0KCcvL3d3dy5leGFtcGxlLm9yZzo4MCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnd3d3LmV4YW1wbGUub3JnOjgwJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0aG9zdCgnL2Zvby9iYXIvYmF6Lmh0bWwnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoTm9uZSwgJy9mb28vYmFyL2Jhei5odG1sJykpCisKKyAgICBkZWYgdGVzdF9zcGxpdHVzZXIoc2VsZik6CisgICAgICAgIHNwbGl0dXNlciA9IHVybGxpYi5wYXJzZS5zcGxpdHVzZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHVzZXIoJ1VzZXI6UGFzc0B3d3cucHl0aG9uLm9yZzowODAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ1VzZXI6UGFzcycsICd3d3cucHl0aG9uLm9yZzowODAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHVzZXIoJ0B3d3cucHl0aG9uLm9yZzowODAnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJycsICd3d3cucHl0aG9uLm9yZzowODAnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHVzZXIoJ3d3dy5weXRob24ub3JnOjA4MCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgIChOb25lLCAnd3d3LnB5dGhvbi5vcmc6MDgwJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR1c2VyKCdVc2VyOlBhc3NAJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdVc2VyOlBhc3MnLCAnJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR1c2VyKCdVc2VyQGV4YW1wbGUuY29tOlBhc3NAd3d3LnB5dGhvbi5vcmc6MDgwJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdVc2VyQGV4YW1wbGUuY29tOlBhc3MnLCAnd3d3LnB5dGhvbi5vcmc6MDgwJykpCisKKyAgICBkZWYgdGVzdF9zcGxpdHBhc3N3ZChzZWxmKToKKyAgICAgICAgIyBTb21lIG9mIHRoZSBwYXNzd29yZCBleGFtcGxlcyBhcmUgbm90IHNlbnNpYmxlLCBidXQgaXQgaXMgYWRkZWQgdG8KKyAgICAgICAgIyBjb25maXJtaW5nIHRvIFJGQzI2MTcgYW5kIGFkZHJlc3NpbmcgaXNzdWU0Njc1LgorICAgICAgICBzcGxpdHBhc3N3ZCA9IHVybGxpYi5wYXJzZS5zcGxpdHBhc3N3ZAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyOmFiJyksICgndXNlcicsICdhYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyOmFcbmInKSwgKCd1c2VyJywgJ2FcbmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBhc3N3ZCgndXNlcjphXHRiJyksICgndXNlcicsICdhXHRiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwYXNzd2QoJ3VzZXI6YVxyYicpLCAoJ3VzZXInLCAnYVxyYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyOmFcZmInKSwgKCd1c2VyJywgJ2FcZmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBhc3N3ZCgndXNlcjphXHZiJyksICgndXNlcicsICdhXHZiJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwYXNzd2QoJ3VzZXI6YTpiJyksICgndXNlcicsICdhOmInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBhc3N3ZCgndXNlcjphIGInKSwgKCd1c2VyJywgJ2EgYicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyIDI6YWInKSwgKCd1c2VyIDInLCAnYWInKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBhc3N3ZCgndXNlcisxOmErYicpLCAoJ3VzZXIrMScsICdhK2InKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBhc3N3ZCgndXNlcjonKSwgKCd1c2VyJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCd1c2VyJyksICgndXNlcicsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cGFzc3dkKCc6YWInKSwgKCcnLCAnYWInKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0cG9ydChzZWxmKToKKyAgICAgICAgc3BsaXRwb3J0ID0gdXJsbGliLnBhcnNlLnNwbGl0cG9ydAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgncGFycm90Ojg4JyksICgncGFycm90JywgJzg4JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRwb3J0KCdwYXJyb3QnKSwgKCdwYXJyb3QnLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBvcnQoJ3BhcnJvdDonKSwgKCdwYXJyb3QnLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBvcnQoJzEyNy4wLjAuMScpLCAoJzEyNy4wLjAuMScsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cG9ydCgncGFycm90OmNoZWVzZScpLCAoJ3BhcnJvdDpjaGVlc2UnLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBvcnQoJ1s6OjFdOjg4JyksICgnWzo6MV0nLCAnODgnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBvcnQoJ1s6OjFdJyksICgnWzo6MV0nLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHBvcnQoJzo4OCcpLCAoJycsICc4OCcpKQorCisgICAgZGVmIHRlc3Rfc3BsaXRucG9ydChzZWxmKToKKyAgICAgICAgc3BsaXRucG9ydCA9IHVybGxpYi5wYXJzZS5zcGxpdG5wb3J0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90Ojg4JyksICgncGFycm90JywgODgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJ3BhcnJvdCcpLCAoJ3BhcnJvdCcsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdG5wb3J0KCdwYXJyb3QnLCA1NSksICgncGFycm90JywgNTUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJ3BhcnJvdDonKSwgKCdwYXJyb3QnLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90OicsIDU1KSwgKCdwYXJyb3QnLCA1NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgnMTI3LjAuMC4xJyksICgnMTI3LjAuMC4xJywgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJzEyNy4wLjAuMScsIDU1KSwgKCcxMjcuMC4wLjEnLCA1NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRucG9ydCgncGFycm90OmNoZWVzZScpLCAoJ3BhcnJvdCcsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0bnBvcnQoJ3BhcnJvdDpjaGVlc2UnLCA1NSksICgncGFycm90JywgTm9uZSkpCisKKyAgICBkZWYgdGVzdF9zcGxpdHF1ZXJ5KHNlbGYpOgorICAgICAgICAjIE5vcm1hbCBjYXNlcyBhcmUgZXhlcmNpc2VkIGJ5IG90aGVyIHRlc3RzOyBlbnN1cmUgdGhhdCB3ZSBhbHNvCisgICAgICAgICMgY2F0Y2ggY2FzZXMgd2l0aCBubyBwb3J0IHNwZWNpZmllZCAodGVzdGNhc2UgZW5zdXJpbmcgY292ZXJhZ2UpCisgICAgICAgIHNwbGl0cXVlcnkgPSB1cmxsaWIucGFyc2Uuc3BsaXRxdWVyeQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cXVlcnkoJ2h0dHA6Ly9weXRob24ub3JnL2Zha2U/Zm9vPWJhcicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcvZmFrZScsICdmb289YmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRxdWVyeSgnaHR0cDovL3B5dGhvbi5vcmcvZmFrZT9mb289YmFyPycpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnaHR0cDovL3B5dGhvbi5vcmcvZmFrZT9mb289YmFyJywgJycpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0cXVlcnkoJ2h0dHA6Ly9weXRob24ub3JnL2Zha2UnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly9weXRob24ub3JnL2Zha2UnLCBOb25lKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHF1ZXJ5KCc/Zm9vPWJhcicpLCAoJycsICdmb289YmFyJykpCisKKyAgICBkZWYgdGVzdF9zcGxpdHRhZyhzZWxmKToKKyAgICAgICAgc3BsaXR0YWcgPSB1cmxsaWIucGFyc2Uuc3BsaXR0YWcKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHRhZygnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXIjYmF6JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vZXhhbXBsZS5jb20/Zm9vPWJhcicsICdiYXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHRhZygnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXIjJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdodHRwOi8vZXhhbXBsZS5jb20/Zm9vPWJhcicsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHRhZygnI2JheicpLCAoJycsICdiYXonKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHRhZygnaHR0cDovL2V4YW1wbGUuY29tP2Zvbz1iYXInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyJywgTm9uZSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR0YWcoJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyI2JheiNib28nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJ2h0dHA6Ly9leGFtcGxlLmNvbT9mb289YmFyI2JheicsICdib28nKSkKKworICAgIGRlZiB0ZXN0X3NwbGl0YXR0cihzZWxmKToKKyAgICAgICAgc3BsaXRhdHRyID0gdXJsbGliLnBhcnNlLnNwbGl0YXR0cgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0YXR0cignL3BhdGg7YXR0cjE9dmFsdWUxO2F0dHIyPXZhbHVlMicpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnL3BhdGgnLCBbJ2F0dHIxPXZhbHVlMScsICdhdHRyMj12YWx1ZTInXSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXRhdHRyKCcvcGF0aDsnKSwgKCcvcGF0aCcsIFsnJ10pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0YXR0cignO2F0dHIxPXZhbHVlMTthdHRyMj12YWx1ZTInKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoJycsIFsnYXR0cjE9dmFsdWUxJywgJ2F0dHIyPXZhbHVlMiddKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdGF0dHIoJy9wYXRoJyksICgnL3BhdGgnLCBbXSkpCisKKyAgICBkZWYgdGVzdF9zcGxpdHZhbHVlKHNlbGYpOgorICAgICAgICAjIE5vcm1hbCBjYXNlcyBhcmUgZXhlcmNpc2VkIGJ5IG90aGVyIHRlc3RzOyB0ZXN0IHBhdGhvbG9naWNhbCBjYXNlcworICAgICAgICAjIHdpdGggbm8ga2V5L3ZhbHVlIHBhaXJzLiAodGVzdGNhc2UgZW5zdXJpbmcgY292ZXJhZ2UpCisgICAgICAgIHNwbGl0dmFsdWUgPSB1cmxsaWIucGFyc2Uuc3BsaXR2YWx1ZQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dmFsdWUoJ2Zvbz1iYXInKSwgKCdmb28nLCAnYmFyJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3BsaXR2YWx1ZSgnZm9vPScpLCAoJ2ZvbycsICcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzcGxpdHZhbHVlKCc9YmFyJyksICgnJywgJ2JhcicpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dmFsdWUoJ2Zvb2JhcicpLCAoJ2Zvb2JhcicsIE5vbmUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNwbGl0dmFsdWUoJ2Zvbz1iYXI9YmF6JyksICgnZm9vJywgJ2Jhcj1iYXonKSkKKworICAgIGRlZiB0ZXN0X3RvX2J5dGVzKHNlbGYpOgorICAgICAgICByZXN1bHQgPSB1cmxsaWIucGFyc2UudG9fYnl0ZXMoJ2h0dHA6Ly93d3cucHl0aG9uLm9yZycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnaHR0cDovL3d3dy5weXRob24ub3JnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB1cmxsaWIucGFyc2UudG9fYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbWVkaVx1MDBlNnZhbCcpCisKKyAgICBkZWYgdGVzdF91bndyYXAoc2VsZik6CisgICAgICAgIHVybCA9IHVybGxpYi5wYXJzZS51bndyYXAoJzxVUkw6dHlwZTovL2hvc3QvcGF0aD4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVybCwgJ3R5cGU6Ly9ob3N0L3BhdGgnKQorCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkgYi9MaWIvdGVzdC90ZXN0X3VzZXJkaWN0LnB5CmluZGV4IDEzN2M0NDUuLjNlYjg4MDEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXNlcmRpY3QucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91c2VyZGljdC5weQpAQCAtMjksNyArMjksOCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLlVzZXJEaWN0KG9uZT0xLCB0d289MiksIGQyKQogICAgICAgICAjIGl0ZW0gc2VxdWVuY2UgY29uc3RydWN0b3IKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb2xsZWN0aW9ucy5Vc2VyRGljdChbKCdvbmUnLDEpLCAoJ3R3bycsMildKSwgZDIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuVXNlckRpY3QoZGljdD1bKCdvbmUnLDEpLCAoJ3R3bycsMildKSwgZDIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRXYXJuc1JlZ2V4KFBlbmRpbmdEZXByZWNhdGlvbldhcm5pbmcsICInZGljdCciKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29sbGVjdGlvbnMuVXNlckRpY3QoZGljdD1bKCdvbmUnLDEpLCAoJ3R3bycsMildKSwgZDIpCiAgICAgICAgICMgYm90aCB0b2dldGhlcgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbGxlY3Rpb25zLlVzZXJEaWN0KFsoJ29uZScsMSksICgndHdvJywyKV0sIHR3bz0zLCB0aHJlZT01KSwgZDMpCiAKQEAgLTQ1LDcgKzQ2LDggQEAKICAgICAgICAgIyBUZXN0IF9fcmVwcl9fCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKHUwKSwgc3RyKGQwKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKHUxKSwgcmVwcihkMSkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVwcih1MiksIHJlcHIoZDIpKQorICAgICAgICBzZWxmLmFzc2VydEluKHJlcHIodTIpLCAoInsnb25lJzogMSwgJ3R3byc6IDJ9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7J3R3byc6IDIsICdvbmUnOiAxfSIpKQogCiAgICAgICAgICMgVGVzdCByaWNoIGNvbXBhcmlzb24gYW5kIF9fbGVuX18KICAgICAgICAgYWxsID0gW2QwLCBkMSwgZDIsIHUsIHUwLCB1MSwgdTIsIHV1LCB1dTAsIHV1MSwgdXUyXQpAQCAtODksOSArOTEsOSBAQAogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKG0yYSwgbTIpCiAKICAgICAgICAgIyBUZXN0IGtleXMsIGl0ZW1zLCB2YWx1ZXMKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mi5rZXlzKCksIGQyLmtleXMoKSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1Mi5pdGVtcygpLCBkMi5pdGVtcygpKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QodTIudmFsdWVzKCkpLCBsaXN0KGQyLnZhbHVlcygpKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzb3J0ZWQodTIua2V5cygpKSwgc29ydGVkKGQyLmtleXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHUyLml0ZW1zKCkpLCBzb3J0ZWQoZDIuaXRlbXMoKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc29ydGVkKHUyLnZhbHVlcygpKSwgc29ydGVkKGQyLnZhbHVlcygpKSkKIAogICAgICAgICAjIFRlc3QgImluIi4KICAgICAgICAgZm9yIGkgaW4gdTIua2V5cygpOgpAQCAtMTM4LDYgKzE0MCwzMCBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucG9waXRlbSgpLCAoIngiLCA0MikpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEtleUVycm9yLCB0LnBvcGl0ZW0pCiAKKyAgICBkZWYgdGVzdF9pbml0KHNlbGYpOgorICAgICAgICBmb3Iga3cgaW4gJ3NlbGYnLCAnb3RoZXInLCAnaXRlcmFibGUnOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbGxlY3Rpb25zLlVzZXJEaWN0KCoqe2t3OiA0Mn0pLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKGt3LCA0MildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29sbGVjdGlvbnMuVXNlckRpY3Qoe30sIGRpY3Q9NDIpLml0ZW1zKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsoJ2RpY3QnLCA0MildKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoY29sbGVjdGlvbnMuVXNlckRpY3Qoe30sIGRpY3Q9Tm9uZSkuaXRlbXMoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgWygnZGljdCcsIE5vbmUpXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZywgIidkaWN0JyIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGNvbGxlY3Rpb25zLlVzZXJEaWN0KGRpY3Q9eydhJzogNDJ9KS5pdGVtcygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWygnYScsIDQyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29sbGVjdGlvbnMuVXNlckRpY3QsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbGxlY3Rpb25zLlVzZXJEaWN0LCAoKSwgKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29sbGVjdGlvbnMuVXNlckRpY3QuX19pbml0X18pCisKKyAgICBkZWYgdGVzdF91cGRhdGUoc2VsZik6CisgICAgICAgIGZvciBrdyBpbiAnc2VsZicsICdkaWN0JywgJ290aGVyJywgJ2l0ZXJhYmxlJzoKKyAgICAgICAgICAgIGQgPSBjb2xsZWN0aW9ucy5Vc2VyRGljdCgpCisgICAgICAgICAgICBkLnVwZGF0ZSgqKntrdzogNDJ9KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQuaXRlbXMoKSksIFsoa3csIDQyKV0pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29sbGVjdGlvbnMuVXNlckRpY3QoKS51cGRhdGUsIDQyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGNvbGxlY3Rpb25zLlVzZXJEaWN0KCkudXBkYXRlLCB7fSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgY29sbGVjdGlvbnMuVXNlckRpY3QudXBkYXRlKQorCiAgICAgZGVmIHRlc3RfbWlzc2luZyhzZWxmKToKICAgICAgICAgIyBNYWtlIHN1cmUgVXNlckRpY3QgZG9lc24ndCBoYXZlIGEgX19taXNzaW5nX18gbWV0aG9kCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFzYXR0cihjb2xsZWN0aW9ucy5Vc2VyRGljdCwgIl9fbWlzc2luZ19fIiksIEZhbHNlKQpAQCAtMTQ1LDcgKzE3MSw3IEBACiAgICAgICAgICMgKEQpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJldHVybmluZyBhIHZhbHVlCiAgICAgICAgICMgKEUpIHN1YmNsYXNzIGRlZmluZXMgX19taXNzaW5nX18gbWV0aG9kIHJhaXNpbmcgUnVudGltZUVycm9yCiAgICAgICAgICMgKEYpIHN1YmNsYXNzIHNldHMgX19taXNzaW5nX18gaW5zdGFuY2UgdmFyaWFibGUgKG5vIGVmZmVjdCkKLSAgICAgICAgIyAoRykgc3ViY2xhc3MgZG9lc24ndCBkZWZpbmUgX19taXNzaW5nX18gYXQgYSBhbGwKKyAgICAgICAgIyAoRykgc3ViY2xhc3MgZG9lc24ndCBkZWZpbmUgX19taXNzaW5nX18gYXQgYWxsCiAgICAgICAgIGNsYXNzIEQoY29sbGVjdGlvbnMuVXNlckRpY3QpOgogICAgICAgICAgICAgZGVmIF9fbWlzc2luZ19fKHNlbGYsIGtleSk6CiAgICAgICAgICAgICAgICAgcmV0dXJuIDQyCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkgYi9MaWIvdGVzdC90ZXN0X3VzZXJzdHJpbmcucHkKaW5kZXggMzRjNjI5Yy4uOWJjOGVkZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91c2Vyc3RyaW5nLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXNlcnN0cmluZy5weQpAQCAtMjgsMTQgKzI4LDEyIEBACiAgICAgICAgICAgICByZWFscmVzdWx0CiAgICAgICAgICkKIAotICAgIGRlZiBjaGVja3JhaXNlcyhzZWxmLCBleGMsIG9iamVjdCwgbWV0aG9kbmFtZSwgKmFyZ3MpOgotICAgICAgICBvYmplY3QgPSBzZWxmLmZpeHR5cGUob2JqZWN0KQorICAgIGRlZiBjaGVja3JhaXNlcyhzZWxmLCBleGMsIG9iaiwgbWV0aG9kbmFtZSwgKmFyZ3MpOgorICAgICAgICBvYmogPSBzZWxmLmZpeHR5cGUob2JqKQogICAgICAgICAjIHdlIGRvbid0IGZpeCB0aGUgYXJndW1lbnRzLCBiZWNhdXNlIFVzZXJTdHJpbmcgY2FuJ3QgY29wZSB3aXRoIGl0Ci0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKAotICAgICAgICAgICAgZXhjLAotICAgICAgICAgICAgZ2V0YXR0cihvYmplY3QsIG1ldGhvZG5hbWUpLAotICAgICAgICAgICAgKmFyZ3MKLSAgICAgICAgKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKGV4YykgYXMgY206CisgICAgICAgICAgICBnZXRhdHRyKG9iaiwgbWV0aG9kbmFtZSkoKmFyZ3MpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICcnKQogCiAgICAgZGVmIGNoZWNrY2FsbChzZWxmLCBvYmplY3QsIG1ldGhvZG5hbWUsICphcmdzKToKICAgICAgICAgb2JqZWN0ID0gc2VsZi5maXh0eXBlKG9iamVjdCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdXUucHkgYi9MaWIvdGVzdC90ZXN0X3V1LnB5CmluZGV4IGNiZjY3MjQuLjI1ZmZmYmYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfdXUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF91dS5weQpAQCAtOTMsNiArOTMsMjggQEAKICAgICAgICAgZXhjZXB0IHV1LkVycm9yIGFzIGU6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihlKSwgIk5vIHZhbGlkIGJlZ2luIGxpbmUgZm91bmQgaW4gaW5wdXQgZmlsZSIpCiAKKyAgICBkZWYgdGVzdF9nYXJiYWdlX3BhZGRpbmcoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzIyNDA2CisgICAgICAgIGVuY29kZWR0ZXh0ID0gKAorICAgICAgICAgICAgYiJiZWdpbiA2NDQgZmlsZVxuIgorICAgICAgICAgICAgIyBsZW5ndGggMTsgYml0cyAwMDExMDAgMTExMTExIDExMTExMSAxMTExMTEKKyAgICAgICAgICAgIGIiXHgyMVx4MkNceDVGXHg1Rlx4NUZcbiIKKyAgICAgICAgICAgIGIiXHgyMFxuIgorICAgICAgICAgICAgYiJlbmRcbiIKKyAgICAgICAgKQorICAgICAgICBwbGFpbnRleHQgPSBiIlx4MzMiICAjIDAwMTEwMDExCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoInV1LmRlY29kZSgpIik6CisgICAgICAgICAgICBpbnAgPSBpby5CeXRlc0lPKGVuY29kZWR0ZXh0KQorICAgICAgICAgICAgb3V0ID0gaW8uQnl0ZXNJTygpCisgICAgICAgICAgICB1dS5kZWNvZGUoaW5wLCBvdXQsIHF1aWV0PVRydWUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dC5nZXR2YWx1ZSgpLCBwbGFpbnRleHQpCisKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoInV1X2NvZGVjIik6CisgICAgICAgICAgICBpbXBvcnQgY29kZWNzCisgICAgICAgICAgICBkZWNvZGVkID0gY29kZWNzLmRlY29kZShlbmNvZGVkdGV4dCwgInV1X2NvZGVjIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGVjb2RlZCwgcGxhaW50ZXh0KQorCiBjbGFzcyBVVVN0ZElPVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3V1aWQucHkgYi9MaWIvdGVzdC90ZXN0X3V1aWQucHkKaW5kZXggNzI2NDgwOC4uMWU4Y2JhMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91dWlkLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdXVpZC5weQpAQCAtMTQsOSArMTQsNiBAQAogICAgICAgICByZXR1cm4gRmFsc2UKIAogY2xhc3MgVGVzdFVVSUQodW5pdHRlc3QuVGVzdENhc2UpOgotICAgIGxhc3Rfbm9kZSA9IE5vbmUKLSAgICBzb3VyY2Uybm9kZSA9IHt9Ci0KICAgICBkZWYgdGVzdF9VVUlEKHNlbGYpOgogICAgICAgICBlcXVhbCA9IHNlbGYuYXNzZXJ0RXF1YWwKICAgICAgICAgYXNjZW5kaW5nID0gW10KQEAgLTI5NCw5NSArMjkxLDEzIEBACiAgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICdjbG9ja19zZXFfbG93JywgMCkpCiAgICAgICAgIGJhZHR5cGUobGFtYmRhOiBzZXRhdHRyKHUsICdub2RlJywgMCkpCiAKLSAgICBkZWYgY2hlY2tfbm9kZShzZWxmLCBub2RlLCBzb3VyY2UpOgotICAgICAgICBtZXNzYWdlID0gIiUwMTJ4IGlzIG5vdCBhbiBSRkMgNDEyMiBub2RlIElEIiAlIG5vZGUKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKDAgPCBub2RlLCBtZXNzYWdlKQotICAgICAgICBzZWxmLmFzc2VydFRydWUobm9kZSA8ICgxIDw8IDQ4KSwgbWVzc2FnZSkKLQotICAgICAgICBUZXN0VVVJRC5zb3VyY2Uybm9kZVtzb3VyY2VdID0gbm9kZQotICAgICAgICBpZiBUZXN0VVVJRC5sYXN0X25vZGU6Ci0gICAgICAgICAgICBpZiBUZXN0VVVJRC5sYXN0X25vZGUgIT0gbm9kZToKLSAgICAgICAgICAgICAgICBtc2cgPSAiZGlmZmVyZW50IHNvdXJjZXMgZGlzYWdyZWUgb24gbm9kZTpcbiIKLSAgICAgICAgICAgICAgICBmb3IgcywgbiBpbiBUZXN0VVVJRC5zb3VyY2Uybm9kZS5pdGVtcygpOgotICAgICAgICAgICAgICAgICAgICBtc2cgKz0gIiAgICBmcm9tIHNvdXJjZSAlciwgbm9kZSB3YXMgJTAxMnhcbiIgJSAocywgbikKLSAgICAgICAgICAgICAgICAjIFRoZXJlJ3MgYWN0dWFsbHkgbm8gcmVhc29uIHRvIGV4cGVjdCB0aGUgTUFDIGFkZHJlc3NlcwotICAgICAgICAgICAgICAgICMgdG8gYWdyZWUgYWNyb3NzIHZhcmlvdXMgbWV0aG9kcyAtLSBlLmcuLCBhIGJveCBtYXkgaGF2ZQotICAgICAgICAgICAgICAgICMgbXVsdGlwbGUgbmV0d29yayBpbnRlcmZhY2VzLCBhbmQgZGlmZmVyZW50IHdheXMgb2YgZ2V0dGluZwotICAgICAgICAgICAgICAgICMgYSBNQUMgYWRkcmVzcyBtYXkgZmF2b3IgZGlmZmVyZW50IEhXLgotICAgICAgICAgICAgICAgICMjc2VsZi5mYWlsKG1zZykKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIFRlc3RVVUlELmxhc3Rfbm9kZSA9IG5vZGUKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgJ3JlcXVpcmVzIFBvc2l4JykKLSAgICBkZWYgdGVzdF9pZmNvbmZpZ19nZXRub2RlKHNlbGYpOgotICAgICAgICBub2RlID0gdXVpZC5faWZjb25maWdfZ2V0bm9kZSgpCi0gICAgICAgIGlmIG5vZGUgaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZSwgJ2lmY29uZmlnJykKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ250JywgJ3JlcXVpcmVzIFdpbmRvd3MnKQotICAgIGRlZiB0ZXN0X2lwY29uZmlnX2dldG5vZGUoc2VsZik6Ci0gICAgICAgIG5vZGUgPSB1dWlkLl9pcGNvbmZpZ19nZXRub2RlKCkKLSAgICAgICAgaWYgbm9kZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCAnaXBjb25maWcnKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaW1wb3J0YWJsZSgnd2luMzJ3bmV0JyksICdyZXF1aXJlcyB3aW4zMnduZXQnKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGltcG9ydGFibGUoJ25ldGJpb3MnKSwgJ3JlcXVpcmVzIG5ldGJpb3MnKQotICAgIGRlZiB0ZXN0X25ldGJpb3NfZ2V0bm9kZShzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja19ub2RlKHV1aWQuX25ldGJpb3NfZ2V0bm9kZSgpLCAnbmV0YmlvcycpCi0KLSAgICBkZWYgdGVzdF9yYW5kb21fZ2V0bm9kZShzZWxmKToKLSAgICAgICAgbm9kZSA9IHV1aWQuX3JhbmRvbV9nZXRub2RlKCkKLSAgICAgICAgIyBMZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgZmlyc3Qgb2N0ZXQgbXVzdCBiZSBzZXQuCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlICYgMHgwMTAwMDAwMDAwMDApCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlIDwgKDEgPDwgNDgpKQotCi0gICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGltcG9ydGFibGUoJ2N0eXBlcycpLCAncmVxdWlyZXMgY3R5cGVzJykKLSAgICBkZWYgdGVzdF91bml4ZGxsX2dldG5vZGUoc2VsZik6Ci0gICAgICAgIHRyeTogIyBJc3N1ZXMgMTQ4MSwgMzU4MTogX3V1aWRfZ2VuZXJhdGVfdGltZSgpIG1pZ2h0IGJlIE5vbmUuCi0gICAgICAgICAgICBzZWxmLmNoZWNrX25vZGUodXVpZC5fdW5peGRsbF9nZXRub2RlKCksICd1bml4ZGxsJykKLSAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKLSAgICAgICAgICAgIHBhc3MKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ250JywgJ3JlcXVpcmVzIFdpbmRvd3MnKQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGltcG9ydGFibGUoJ2N0eXBlcycpLCAncmVxdWlyZXMgY3R5cGVzJykKLSAgICBkZWYgdGVzdF93aW5kbGxfZ2V0bm9kZShzZWxmKToKLSAgICAgICAgc2VsZi5jaGVja19ub2RlKHV1aWQuX3dpbmRsbF9nZXRub2RlKCksICd3aW5kbGwnKQotCiAgICAgZGVmIHRlc3RfZ2V0bm9kZShzZWxmKToKICAgICAgICAgbm9kZTEgPSB1dWlkLmdldG5vZGUoKQotICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZTEsICJnZXRub2RlMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgwIDwgbm9kZTEgPCAoMSA8PCA0OCksICclMDEyeCcgJSBub2RlMSkKIAogICAgICAgICAjIFRlc3QgaXQgYWdhaW4gdG8gZW5zdXJlIGNvbnNpc3RlbmN5LgogICAgICAgICBub2RlMiA9IHV1aWQuZ2V0bm9kZSgpCi0gICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlMiwgImdldG5vZGUyIikKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG5vZGUxLCBub2RlMikKLQotICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgJ3JlcXVpcmVzIFBvc2l4JykKLSAgICBkZWYgdGVzdF9maW5kX21hYyhzZWxmKToKLSAgICAgICAgZGF0YSA9ICcnJ1wKLQotZmFrZSBod2FkZHIKLWNzY290dW4wICBMaW5rIGVuY2FwOlVOU1BFQyAgSFdhZGRyIDAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwLTAwCi1ldGgwICAgICAgTGluayBlbmNhcDpFdGhlcm5ldCAgSFdhZGRyIDEyOjM0OjU2Ojc4OjkwOmFiCi0nJycKLSAgICAgICAgZGVmIG1vY2tfcG9wZW4oY21kKToKLSAgICAgICAgICAgIHJldHVybiBpby5TdHJpbmdJTyhkYXRhKQotCi0gICAgICAgIGlmIHNodXRpbC53aGljaCgnaWZjb25maWcnKSBpcyBOb25lOgotICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGhzZXAuam9pbigoJy9zYmluJywgJy91c3Ivc2JpbicpKQotICAgICAgICAgICAgaWYgc2h1dGlsLndoaWNoKCdpZmNvbmZpZycsIHBhdGg9cGF0aCkgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdyZXF1aXJlcyBpZmNvbmZpZycpCi0KLSAgICAgICAgd2l0aCBzdXBwb3J0LnN3YXBfYXR0cihvcywgJ3BvcGVuJywgbW9ja19wb3Blbik6Ci0gICAgICAgICAgICBtYWMgPSB1dWlkLl9maW5kX21hYygKLSAgICAgICAgICAgICAgICBjb21tYW5kPSdpZmNvbmZpZycsCi0gICAgICAgICAgICAgICAgYXJncz0nJywKLSAgICAgICAgICAgICAgICBod19pZGVudGlmaWVycz1bJ2h3YWRkciddLAotICAgICAgICAgICAgICAgIGdldF9pbmRleD1sYW1iZGEgeDogeCArIDEsCi0gICAgICAgICAgICApCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1hYywgMHgxMjM0NTY3ODkwYWIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobm9kZTEsIG5vZGUyLCAnJTAxMnggIT0gJTAxMngnICUgKG5vZGUxLCBub2RlMikpCiAKICAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhpbXBvcnRhYmxlKCdjdHlwZXMnKSwgJ3JlcXVpcmVzIGN0eXBlcycpCiAgICAgZGVmIHRlc3RfdXVpZDEoc2VsZik6CkBAIC00OTQsNSArNDA5LDk3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKHBhcmVudF92YWx1ZSwgY2hpbGRfdmFsdWUpCiAKIAorY2xhc3MgVGVzdEludGVybmFscyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQorICAgIGRlZiB0ZXN0X2ZpbmRfbWFjKHNlbGYpOgorICAgICAgICBkYXRhID0gJycnXAorCitmYWtlIGh3YWRkcgorY3Njb3R1bjAgIExpbmsgZW5jYXA6VU5TUEVDICBIV2FkZHIgMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAtMDAKK2V0aDAgICAgICBMaW5rIGVuY2FwOkV0aGVybmV0ICBIV2FkZHIgMTI6MzQ6NTY6Nzg6OTA6YWIKKycnJworICAgICAgICBkZWYgbW9ja19wb3BlbihjbWQpOgorICAgICAgICAgICAgcmV0dXJuIGlvLlN0cmluZ0lPKGRhdGEpCisKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKCdpZmNvbmZpZycpIGlzIE5vbmU6CisgICAgICAgICAgICBwYXRoID0gb3MucGF0aHNlcC5qb2luKCgnL3NiaW4nLCAnL3Vzci9zYmluJykpCisgICAgICAgICAgICBpZiBzaHV0aWwud2hpY2goJ2lmY29uZmlnJywgcGF0aD1wYXRoKSBpcyBOb25lOgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoJ3JlcXVpcmVzIGlmY29uZmlnJykKKworICAgICAgICB3aXRoIHN1cHBvcnQuc3dhcF9hdHRyKG9zLCAncG9wZW4nLCBtb2NrX3BvcGVuKToKKyAgICAgICAgICAgIG1hYyA9IHV1aWQuX2ZpbmRfbWFjKAorICAgICAgICAgICAgICAgIGNvbW1hbmQ9J2lmY29uZmlnJywKKyAgICAgICAgICAgICAgICBhcmdzPScnLAorICAgICAgICAgICAgICAgIGh3X2lkZW50aWZpZXJzPVsnaHdhZGRyJ10sCisgICAgICAgICAgICAgICAgZ2V0X2luZGV4PWxhbWJkYSB4OiB4ICsgMSwKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWFjLCAweDEyMzQ1Njc4OTBhYikKKworICAgIGRlZiBjaGVja19ub2RlKHNlbGYsIG5vZGUsIHJlcXVpcmVzPU5vbmUsIG5ldHdvcms9RmFsc2UpOgorICAgICAgICBpZiByZXF1aXJlcyBhbmQgbm9kZSBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgncmVxdWlyZXMgJyArIHJlcXVpcmVzKQorICAgICAgICBoZXggPSAnJTAxMngnICUgbm9kZQorICAgICAgICBpZiBzdXBwb3J0LnZlcmJvc2UgPj0gMjoKKyAgICAgICAgICAgIHByaW50KGhleCwgZW5kPScgJykKKyAgICAgICAgaWYgbmV0d29yazoKKyAgICAgICAgICAgICMgNDcgYml0IHdpbGwgbmV2ZXIgYmUgc2V0IGluIElFRUUgODAyIGFkZHJlc3NlcyBvYnRhaW5lZAorICAgICAgICAgICAgIyBmcm9tIG5ldHdvcmsgY2FyZHMuCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG5vZGUgJiAweDAxMDAwMDAwMDAwMCwgaGV4KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoMCA8IG5vZGUgPCAoMSA8PCA0OCksCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgbm90IGFuIFJGQyA0MTIyIG5vZGUgSUQiICUgaGV4KQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQorICAgIGRlZiB0ZXN0X2lmY29uZmlnX2dldG5vZGUoc2VsZik6CisgICAgICAgIG5vZGUgPSB1dWlkLl9pZmNvbmZpZ19nZXRub2RlKCkKKyAgICAgICAgc2VsZi5jaGVja19ub2RlKG5vZGUsICdpZmNvbmZpZycsIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdwb3NpeCcsICdyZXF1aXJlcyBQb3NpeCcpCisgICAgZGVmIHRlc3RfYXJwX2dldG5vZGUoc2VsZik6CisgICAgICAgIG5vZGUgPSB1dWlkLl9hcnBfZ2V0bm9kZSgpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCAnYXJwJywgVHJ1ZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgJ3JlcXVpcmVzIFBvc2l4JykKKyAgICBkZWYgdGVzdF9sYW5zY2FuX2dldG5vZGUoc2VsZik6CisgICAgICAgIG5vZGUgPSB1dWlkLl9sYW5zY2FuX2dldG5vZGUoKQorICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZSwgJ2xhbnNjYW4nLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3Mob3MubmFtZSA9PSAncG9zaXgnLCAncmVxdWlyZXMgUG9zaXgnKQorICAgIGRlZiB0ZXN0X25ldHN0YXRfZ2V0bm9kZShzZWxmKToKKyAgICAgICAgbm9kZSA9IHV1aWQuX25ldHN0YXRfZ2V0bm9kZSgpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCAnbmV0c3RhdCcsIFRydWUpCisKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhvcy5uYW1lID09ICdudCcsICdyZXF1aXJlcyBXaW5kb3dzJykKKyAgICBkZWYgdGVzdF9pcGNvbmZpZ19nZXRub2RlKHNlbGYpOgorICAgICAgICBub2RlID0gdXVpZC5faXBjb25maWdfZ2V0bm9kZSgpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCAnaXBjb25maWcnLCBUcnVlKQorCisgICAgQHVuaXR0ZXN0LnNraXBVbmxlc3MoaW1wb3J0YWJsZSgnd2luMzJ3bmV0JyksICdyZXF1aXJlcyB3aW4zMnduZXQnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGltcG9ydGFibGUoJ25ldGJpb3MnKSwgJ3JlcXVpcmVzIG5ldGJpb3MnKQorICAgIGRlZiB0ZXN0X25ldGJpb3NfZ2V0bm9kZShzZWxmKToKKyAgICAgICAgbm9kZSA9IHV1aWQuX25ldGJpb3NfZ2V0bm9kZSgpCisgICAgICAgIHNlbGYuY2hlY2tfbm9kZShub2RlLCBuZXR3b3JrPVRydWUpCisKKyAgICBkZWYgdGVzdF9yYW5kb21fZ2V0bm9kZShzZWxmKToKKyAgICAgICAgbm9kZSA9IHV1aWQuX3JhbmRvbV9nZXRub2RlKCkKKyAgICAgICAgIyBMZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgZmlyc3Qgb2N0ZXQgbXVzdCBiZSBzZXQuCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShub2RlICYgMHgwMTAwMDAwMDAwMDAsICclMDEyeCcgJSBub2RlKQorICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ3Bvc2l4JywgJ3JlcXVpcmVzIFBvc2l4JykKKyAgICBAdW5pdHRlc3Quc2tpcFVubGVzcyhpbXBvcnRhYmxlKCdjdHlwZXMnKSwgJ3JlcXVpcmVzIGN0eXBlcycpCisgICAgZGVmIHRlc3RfdW5peGRsbF9nZXRub2RlKHNlbGYpOgorICAgICAgICB0cnk6ICMgSXNzdWVzIDE0ODEsIDM1ODE6IF91dWlkX2dlbmVyYXRlX3RpbWUoKSBtaWdodCBiZSBOb25lLgorICAgICAgICAgICAgbm9kZSA9IHV1aWQuX3VuaXhkbGxfZ2V0bm9kZSgpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdyZXF1aXJlcyB1dWlkX2dlbmVyYXRlX3RpbWUnKQorICAgICAgICBzZWxmLmNoZWNrX25vZGUobm9kZSkKKworICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKG9zLm5hbWUgPT0gJ250JywgJ3JlcXVpcmVzIFdpbmRvd3MnKQorICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKGltcG9ydGFibGUoJ2N0eXBlcycpLCAncmVxdWlyZXMgY3R5cGVzJykKKyAgICBkZWYgdGVzdF93aW5kbGxfZ2V0bm9kZShzZWxmKToKKyAgICAgICAgbm9kZSA9IHV1aWQuX3dpbmRsbF9nZXRub2RlKCkKKyAgICAgICAgc2VsZi5jaGVja19ub2RlKG5vZGUpCisKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdmVudi5weSBiL0xpYi90ZXN0L3Rlc3RfdmVudi5weQppbmRleCAwZmFlODhiLi5iNDYyNTg4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ZlbnYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF92ZW52LnB5CkBAIC01LDE3ICs1LDM2IEBACiBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgogIiIiCiAKK2ltcG9ydCBlbnN1cmVwaXAKIGltcG9ydCBvcwogaW1wb3J0IG9zLnBhdGgKLWltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdHJ1Y3QKIGltcG9ydCBzdWJwcm9jZXNzCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGVtcGZpbGUKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCAoY2FwdHVyZWRfc3Rkb3V0LCBjYXB0dXJlZF9zdGRlcnIsIHJ1bl91bml0dGVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuX3N5bWxpbmspCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbl9zeW1saW5rLCBFbnZpcm9ubWVudFZhckd1YXJkLCBybXRyZWUpCitpbXBvcnQgdGV4dHdyYXAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHZlbnYKIAorIyBwaXAgY3VycmVudGx5IHJlcXVpcmVzIHNzbCBzdXBwb3J0LCBzbyB3ZSBlbnN1cmUgd2UgaGFuZGxlCisjIGl0IGJlaW5nIG1pc3NpbmcgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxOTc0NCkKK3RyeToKKyAgICBpbXBvcnQgc3NsCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgc3NsID0gTm9uZQorCitza2lwSW5WZW52ID0gdW5pdHRlc3Quc2tpcElmKHN5cy5wcmVmaXggIT0gc3lzLmJhc2VfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnVGVzdCBub3QgYXBwcm9wcmlhdGUgaW4gYSB2ZW52JykKKworIyBvcy5wYXRoLmV4aXN0cygnbnVsJykgaXMgRmFsc2U6IGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDU0MQoraWYgb3MuZGV2bnVsbC5sb3dlcigpID09ICdudWwnOgorICAgIGZhaWxzT25XaW5kb3dzID0gdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCitlbHNlOgorICAgIGRlZiBmYWlsc09uV2luZG93cyhmKToKKyAgICAgICAgcmV0dXJuIGYKKwogY2xhc3MgQmFzZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIkJhc2UgY2xhc3MgZm9yIHZlbnYgdGVzdHMuIiIiCiAKQEAgLTM2LDcgKzU1LDcgQEAKICAgICAgICAgc2VsZi5leGUgPSBvcy5wYXRoLnNwbGl0KGV4ZWN1dGFibGUpWy0xXQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZW52X2RpcikKKyAgICAgICAgcm10cmVlKHNlbGYuZW52X2RpcikKIAogICAgIGRlZiBydW5fd2l0aF9jYXB0dXJlKHNlbGYsIGZ1bmMsICphcmdzLCAqKmt3YXJncyk6CiAgICAgICAgIHdpdGggY2FwdHVyZWRfc3Rkb3V0KCkgYXMgb3V0cHV0OgpAQCAtNjMsMTEgKzgyLDE5IEBACiAgICAgICAgICIiIgogICAgICAgICBUZXN0IHRoZSBjcmVhdGUgZnVuY3Rpb24gd2l0aCBkZWZhdWx0IGFyZ3VtZW50cy4KICAgICAgICAgIiIiCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICBybXRyZWUoc2VsZi5lbnZfZGlyKQogICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUodmVudi5jcmVhdGUsIHNlbGYuZW52X2RpcikKICAgICAgICAgc2VsZi5pc2RpcihzZWxmLmJpbmRpcikKICAgICAgICAgc2VsZi5pc2RpcihzZWxmLmluY2x1ZGUpCiAgICAgICAgIHNlbGYuaXNkaXIoKnNlbGYubGliKQorICAgICAgICAjIElzc3VlIDIxMTk3CisgICAgICAgIHAgPSBzZWxmLmdldF9lbnZfZmlsZSgnbGliNjQnKQorICAgICAgICBjb25kaXRpb25zID0gKChzdHJ1Y3QuY2FsY3NpemUoJ1AnKSA9PSA4KSBhbmQgKG9zLm5hbWUgPT0gJ3Bvc2l4JykgYW5kCisgICAgICAgICAgICAgICAgICAgICAgKHN5cy5wbGF0Zm9ybSAhPSAnZGFyd2luJykpCisgICAgICAgIGlmIGNvbmRpdGlvbnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2xpbmsocCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKHApKQogICAgICAgICBkYXRhID0gc2VsZi5nZXRfdGV4dF9maWxlX2NvbnRlbnRzKCdweXZlbnYuY2ZnJykKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nIGFuZCAoJ19fUFlWRU5WX0xBVU5DSEVSX18nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG9zLmVudmlyb24pOgpAQCAtODMsOCArMTEwLDcgQEAKICAgICAgICAgICAgIHByaW50KCcgICAgJXInICUgb3MubGlzdGRpcihiZCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmbiksICdGaWxlICVyIHNob3VsZCBleGlzdC4nICUgZm4pCiAKLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wcmVmaXggIT0gc3lzLmJhc2VfcHJlZml4LCAnVGVzdCBub3QgYXBwcm9wcmlhdGUgJwotICAgICAgICAgICAgICAgICAgICAgJ2luIGEgdmVudicpCisgICAgQHNraXBJblZlbnYKICAgICBkZWYgdGVzdF9wcmVmaXhlcyhzZWxmKToKICAgICAgICAgIiIiCiAgICAgICAgIFRlc3QgdGhhdCB0aGUgcHJlZml4IHZhbHVlcyBhcmUgYXMgZXhwZWN0ZWQuCkBAIC05NCw3ICsxMjAsNyBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN5cy5iYXNlX2V4ZWNfcHJlZml4LCBzeXMuZXhlY19wcmVmaXgpCiAKICAgICAgICAgIyBjaGVjayBhIHZlbnYncyBwcmVmaXhlcwotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZW52X2RpcikKKyAgICAgICAgcm10cmVlKHNlbGYuZW52X2RpcikKICAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCiAgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKHNlbGYuZW52X2Rpciwgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQogICAgICAgICBjbWQgPSBbZW52cHksICctYycsIE5vbmVdCkBAIC0xMDksMjkgKzEzNSw4OSBAQAogICAgICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksIGV4cGVjdGVkLmVuY29kZSgpKQogCisgICAgaWYgc3lzLnBsYXRmb3JtID09ICd3aW4zMic6CisgICAgICAgIEVOVl9TVUJESVJTID0gKAorICAgICAgICAgICAgKCdTY3JpcHRzJywpLAorICAgICAgICAgICAgKCdJbmNsdWRlJywpLAorICAgICAgICAgICAgKCdMaWInLCksCisgICAgICAgICAgICAoJ0xpYicsICdzaXRlLXBhY2thZ2VzJyksCisgICAgICAgICkKKyAgICBlbHNlOgorICAgICAgICBFTlZfU1VCRElSUyA9ICgKKyAgICAgICAgICAgICgnYmluJywpLAorICAgICAgICAgICAgKCdpbmNsdWRlJywpLAorICAgICAgICAgICAgKCdsaWInLCksCisgICAgICAgICAgICAoJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSksCisgICAgICAgICAgICAoJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwgJ3NpdGUtcGFja2FnZXMnKSwKKyAgICAgICAgKQorCisgICAgZGVmIGNyZWF0ZV9jb250ZW50cyhzZWxmLCBwYXRocywgZmlsZW5hbWUpOgorICAgICAgICAiIiIKKyAgICAgICAgQ3JlYXRlIHNvbWUgZmlsZXMgaW4gdGhlIGVudmlyb25tZW50IHdoaWNoIGFyZSB1bnJlbGF0ZWQKKyAgICAgICAgdG8gdGhlIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgICAgICIiIgorICAgICAgICBmb3Igc3ViZGlycyBpbiBwYXRoczoKKyAgICAgICAgICAgIGQgPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqc3ViZGlycykKKyAgICAgICAgICAgIG9zLm1rZGlyKGQpCisgICAgICAgICAgICBmbiA9IG9zLnBhdGguam9pbihkLCBmaWxlbmFtZSkKKyAgICAgICAgICAgIHdpdGggb3BlbihmbiwgJ3diJykgYXMgZjoKKyAgICAgICAgICAgICAgICBmLndyaXRlKGInU3RpbGwgaGVyZT8nKQorCiAgICAgZGVmIHRlc3Rfb3ZlcndyaXRlX2V4aXN0aW5nKHNlbGYpOgogICAgICAgICAiIiIKLSAgICAgICAgVGVzdCBjb250cm9sIG9mIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGVudmlyb25tZW50IGRpcmVjdG9yeS4KKyAgICAgICAgVGVzdCBjcmVhdGluZyBlbnZpcm9ubWVudCBpbiBhbiBleGlzdGluZyBkaXJlY3RvcnkuCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB2ZW52LmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQorICAgICAgICBzZWxmLmNyZWF0ZV9jb250ZW50cyhzZWxmLkVOVl9TVUJESVJTLCAnZm9vJykKKyAgICAgICAgdmVudi5jcmVhdGUoc2VsZi5lbnZfZGlyKQorICAgICAgICBmb3Igc3ViZGlycyBpbiBzZWxmLkVOVl9TVUJESVJTOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqKHN1YmRpcnMgKyAoJ2ZvbycsKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm4pKQorICAgICAgICAgICAgd2l0aCBvcGVuKGZuLCAncmInKSBhcyBmOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5yZWFkKCksIGInU3RpbGwgaGVyZT8nKQorCiAgICAgICAgIGJ1aWxkZXIgPSB2ZW52LkVudkJ1aWxkZXIoY2xlYXI9VHJ1ZSkKICAgICAgICAgYnVpbGRlci5jcmVhdGUoc2VsZi5lbnZfZGlyKQorICAgICAgICBmb3Igc3ViZGlycyBpbiBzZWxmLkVOVl9TVUJESVJTOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqKHN1YmRpcnMgKyAoJ2ZvbycsKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKG9zLnBhdGguZXhpc3RzKGZuKSkKKworICAgIGRlZiBjbGVhcl9kaXJlY3Rvcnkoc2VsZiwgcGF0aCk6CisgICAgICAgIGZvciBmbiBpbiBvcy5saXN0ZGlyKHBhdGgpOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4ocGF0aCwgZm4pCisgICAgICAgICAgICBpZiBvcy5wYXRoLmlzbGluayhmbikgb3Igb3MucGF0aC5pc2ZpbGUoZm4pOgorICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmbikKKyAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2Rpcihmbik6CisgICAgICAgICAgICAgICAgcm10cmVlKGZuKQorCisgICAgZGVmIHRlc3RfdW5vdmVyd3JpdGFibGVfZmFpbHMoc2VsZik6CisgICAgICAgICNjcmVhdGUgYSBmaWxlIGNsYXNoaW5nIHdpdGggZGlyZWN0b3JpZXMgaW4gdGhlIGVudiBkaXIKKyAgICAgICAgZm9yIHBhdGhzIGluIHNlbGYuRU5WX1NVQkRJUlNbOjNdOgorICAgICAgICAgICAgZm4gPSBvcy5wYXRoLmpvaW4oc2VsZi5lbnZfZGlyLCAqcGF0aHMpCisgICAgICAgICAgICB3aXRoIG9wZW4oZm4sICd3YicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi53cml0ZShiJycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcygoVmFsdWVFcnJvciwgT1NFcnJvciksIHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIpCisgICAgICAgICAgICBzZWxmLmNsZWFyX2RpcmVjdG9yeShzZWxmLmVudl9kaXIpCiAKICAgICBkZWYgdGVzdF91cGdyYWRlKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB1cGdyYWRpbmcgYW4gZXhpc3RpbmcgZW52aXJvbm1lbnQgZGlyZWN0b3J5LgogICAgICAgICAiIiIKLSAgICAgICAgYnVpbGRlciA9IHZlbnYuRW52QnVpbGRlcih1cGdyYWRlPVRydWUpCi0gICAgICAgIHNlbGYucnVuX3dpdGhfY2FwdHVyZShidWlsZGVyLmNyZWF0ZSwgc2VsZi5lbnZfZGlyKQotICAgICAgICBzZWxmLmlzZGlyKHNlbGYuYmluZGlyKQotICAgICAgICBzZWxmLmlzZGlyKHNlbGYuaW5jbHVkZSkKLSAgICAgICAgc2VsZi5pc2Rpcigqc2VsZi5saWIpCi0gICAgICAgIGZuID0gc2VsZi5nZXRfZW52X2ZpbGUoc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOiAgIyBkaWFnbm9zdGljcyBmb3IgV2luZG93cyBidWlsZGJvdCBmYWlsdXJlcwotICAgICAgICAgICAgYmQgPSBzZWxmLmdldF9lbnZfZmlsZShzZWxmLmJpbmRpcikKLSAgICAgICAgICAgIHByaW50KCdDb250ZW50cyBvZiAlcjonICUgYmQpCi0gICAgICAgICAgICBwcmludCgnICAgICVyJyAlIG9zLmxpc3RkaXIoYmQpKQotICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5leGlzdHMoZm4pLCAnRmlsZSAlciBzaG91bGQgZXhpc3QuJyAlIGZuKQorICAgICAgICAjIFNlZSBJc3N1ZSAjMjE2NDM6IHRoZSBsb29wIG5lZWRzIHRvIHJ1biB0d2ljZSB0byBlbnN1cmUKKyAgICAgICAgIyB0aGF0IGV2ZXJ5dGhpbmcgd29ya3Mgb24gdGhlIHVwZ3JhZGUgKHRoZSBmaXJzdCBydW4ganVzdCBjcmVhdGVzCisgICAgICAgICMgdGhlIHZlbnYpLgorICAgICAgICBmb3IgdXBncmFkZSBpbiAoRmFsc2UsIFRydWUpOgorICAgICAgICAgICAgYnVpbGRlciA9IHZlbnYuRW52QnVpbGRlcih1cGdyYWRlPXVwZ3JhZGUpCisgICAgICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUoYnVpbGRlci5jcmVhdGUsIHNlbGYuZW52X2RpcikKKyAgICAgICAgICAgIHNlbGYuaXNkaXIoc2VsZi5iaW5kaXIpCisgICAgICAgICAgICBzZWxmLmlzZGlyKHNlbGYuaW5jbHVkZSkKKyAgICAgICAgICAgIHNlbGYuaXNkaXIoKnNlbGYubGliKQorICAgICAgICAgICAgZm4gPSBzZWxmLmdldF9lbnZfZmlsZShzZWxmLmJpbmRpciwgc2VsZi5leGUpCisgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZm4pOgorICAgICAgICAgICAgICAgICMgZGlhZ25vc3RpY3MgZm9yIFdpbmRvd3MgYnVpbGRib3QgZmFpbHVyZXMKKyAgICAgICAgICAgICAgICBiZCA9IHNlbGYuZ2V0X2Vudl9maWxlKHNlbGYuYmluZGlyKQorICAgICAgICAgICAgICAgIHByaW50KCdDb250ZW50cyBvZiAlcjonICUgYmQpCisgICAgICAgICAgICAgICAgcHJpbnQoJyAgICAlcicgJSBvcy5saXN0ZGlyKGJkKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhmbiksICdGaWxlICVyIHNob3VsZCBleGlzdC4nICUgZm4pCiAKICAgICBkZWYgdGVzdF9pc29sYXRpb24oc2VsZik6CiAgICAgICAgICIiIgpAQCAtMTYyLDEzICsyNDgsMTIgQEAKICAgICAjIHJ1biB0aGUgdGVzdCwgdGhlIHB5dmVudi5jZmcgaW4gdGhlIHZlbnYgY3JlYXRlZCBpbiB0aGUgdGVzdCB3aWxsCiAgICAgIyBwb2ludCB0byB0aGUgdmVudiBiZWluZyB1c2VkIHRvIHJ1biB0aGUgdGVzdCwgYW5kIHdlIGxvc2UgdGhlIGxpbmsKICAgICAjIHRvIHRoZSBzb3VyY2UgYnVpbGQgLSBzbyBQeXRob24gY2FuJ3QgaW5pdGlhbGlzZSBwcm9wZXJseS4KLSAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5wcmVmaXggIT0gc3lzLmJhc2VfcHJlZml4LCAnVGVzdCBub3QgYXBwcm9wcmlhdGUgJwotICAgICAgICAgICAgICAgICAgICAgJ2luIGEgdmVudicpCisgICAgQHNraXBJblZlbnYKICAgICBkZWYgdGVzdF9leGVjdXRhYmxlKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBzeXMuZXhlY3V0YWJsZSB2YWx1ZSBpcyBhcyBleHBlY3RlZC4KICAgICAgICAgIiIiCi0gICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICBybXRyZWUoc2VsZi5lbnZfZGlyKQogICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUodmVudi5jcmVhdGUsIHNlbGYuZW52X2RpcikKICAgICAgICAgZW52cHkgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5yZWFscGF0aChzZWxmLmVudl9kaXIpLCBzZWxmLmJpbmRpciwgc2VsZi5leGUpCiAgICAgICAgIGNtZCA9IFtlbnZweSwgJy1jJywgJ2ltcG9ydCBzeXM7IHByaW50KHN5cy5leGVjdXRhYmxlKSddCkBAIC0xODIsNyArMjY3LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIFRlc3QgdGhhdCB0aGUgc3lzLmV4ZWN1dGFibGUgdmFsdWUgaXMgYXMgZXhwZWN0ZWQuCiAgICAgICAgICIiIgotICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuZW52X2RpcikKKyAgICAgICAgcm10cmVlKHNlbGYuZW52X2RpcikKICAgICAgICAgYnVpbGRlciA9IHZlbnYuRW52QnVpbGRlcihjbGVhcj1UcnVlLCBzeW1saW5rcz1UcnVlKQogICAgICAgICBidWlsZGVyLmNyZWF0ZShzZWxmLmVudl9kaXIpCiAgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQpAQCAtMTkyLDggKzI3NywxMjkgQEAKICAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3RyaXAoKSwgZW52cHkuZW5jb2RlKCkpCiAKKworQHNraXBJblZlbnYKK2NsYXNzIEVuc3VyZVBpcFRlc3QoQmFzZVRlc3QpOgorICAgICIiIlRlc3QgdmVudiBtb2R1bGUgaW5zdGFsbGF0aW9uIG9mIHBpcC4iIiIKKyAgICBkZWYgYXNzZXJ0X3BpcF9ub3RfaW5zdGFsbGVkKHNlbGYpOgorICAgICAgICBlbnZweSA9IG9zLnBhdGguam9pbihvcy5wYXRoLnJlYWxwYXRoKHNlbGYuZW52X2RpciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmluZGlyLCBzZWxmLmV4ZSkKKyAgICAgICAgdHJ5X2ltcG9ydCA9ICd0cnk6XG4gaW1wb3J0IHBpcFxuZXhjZXB0IEltcG9ydEVycm9yOlxuIHByaW50KCJPSyIpJworICAgICAgICBjbWQgPSBbZW52cHksICctYycsIHRyeV9pbXBvcnRdCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkZXJyPXN1YnByb2Nlc3MuUElQRSkKKyAgICAgICAgb3V0LCBlcnIgPSBwLmNvbW11bmljYXRlKCkKKyAgICAgICAgIyBXZSBmb3JjZSBldmVyeXRoaW5nIHRvIHRleHQsIHNvIHVuaXR0ZXN0IGdpdmVzIHRoZSBkZXRhaWxlZCBkaWZmCisgICAgICAgICMgaWYgd2UgZ2V0IHVuZXhwZWN0ZWQgcmVzdWx0cworICAgICAgICBlcnIgPSBlcnIuZGVjb2RlKCJsYXRpbi0xIikgIyBGb3JjZSB0byB0ZXh0LCBwcmV2ZW50IGRlY29kaW5nIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVyciwgIiIpCisgICAgICAgIG91dCA9IG91dC5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LnN0cmlwKCksICJPSyIpCisKKworICAgIGRlZiB0ZXN0X25vX3BpcF9ieV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUodmVudi5jcmVhdGUsIHNlbGYuZW52X2RpcikKKyAgICAgICAgc2VsZi5hc3NlcnRfcGlwX25vdF9pbnN0YWxsZWQoKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfbm9fcGlwKHNlbGYpOgorICAgICAgICBybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICBzZWxmLnJ1bl93aXRoX2NhcHR1cmUodmVudi5jcmVhdGUsIHNlbGYuZW52X2Rpciwgd2l0aF9waXA9RmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0X3BpcF9ub3RfaW5zdGFsbGVkKCkKKworICAgIEBmYWlsc09uV2luZG93cworICAgIGRlZiB0ZXN0X2Rldm51bGxfZXhpc3RzX2FuZF9pc19lbXB0eShzZWxmKToKKyAgICAgICAgIyBGaXggZm9yIGlzc3VlICMyMDA1MyB1c2VzIG9zLmRldm51bGwgdG8gZm9yY2UgYSBjb25maWcgZmlsZSB0bworICAgICAgICAjIGFwcGVhciBlbXB0eS4gSG93ZXZlciBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjA1NDEgbWVhbnMKKyAgICAgICAgIyB0aGF0IGRvZXNuJ3QgY3VycmVudGx5IHdvcmsgcHJvcGVybHkgb24gV2luZG93cy4gT25jZSB0aGF0IGlzCisgICAgICAgICMgZml4ZWQsIHRoZSAid2luX2xvY2F0aW9uIiBwYXJ0IG9mIHRlc3Rfd2l0aF9waXAgc2hvdWxkIGJlIHJlc3RvcmVkCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhvcy5kZXZudWxsKSkKKyAgICAgICAgd2l0aCBvcGVuKG9zLmRldm51bGwsICJyYiIpIGFzIGY6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucmVhZCgpLCBiIiIpCisKKyAgICAjIFJlcXVlc3RpbmcgcGlwIGZhaWxzIHdpdGhvdXQgU1NMIChodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3NDQpCisgICAgQHVuaXR0ZXN0LnNraXBJZihzc2wgaXMgTm9uZSwgZW5zdXJlcGlwLl9NSVNTSU5HX1NTTF9NRVNTQUdFKQorICAgIGRlZiB0ZXN0X3dpdGhfcGlwKHNlbGYpOgorICAgICAgICBybXRyZWUoc2VsZi5lbnZfZGlyKQorICAgICAgICB3aXRoIEVudmlyb25tZW50VmFyR3VhcmQoKSBhcyBlbnZ2YXJzOgorICAgICAgICAgICAgIyBwaXAncyBjcm9zcy12ZXJzaW9uIGNvbXBhdGliaWxpdHkgbWF5IHRyaWdnZXIgZGVwcmVjYXRpb24KKyAgICAgICAgICAgICMgd2FybmluZ3MgaW4gY3VycmVudCB2ZXJzaW9ucyBvZiBQeXRob24uIEVuc3VyZSByZWxhdGVkCisgICAgICAgICAgICAjIGVudmlyb25tZW50IHNldHRpbmdzIGRvbid0IGNhdXNlIHZlbnYgdG8gZmFpbC4KKyAgICAgICAgICAgIGVudnZhcnNbIlBZVEhPTldBUk5JTkdTIl0gPSAiZSIKKyAgICAgICAgICAgICMgZW5zdXJlcGlwIGlzIGRpZmZlcmVudCBlbm91Z2ggZnJvbSBhIG5vcm1hbCBwaXAgaW52b2NhdGlvbgorICAgICAgICAgICAgIyB0aGF0IHdlIHdhbnQgdG8gZW5zdXJlIGl0IGlnbm9yZXMgdGhlIG5vcm1hbCBwaXAgZW52aXJvbm1lbnQKKyAgICAgICAgICAgICMgdmFyaWFibGUgc2V0dGluZ3MuIFdlIHNldCBQSVBfTk9fSU5TVEFMTCBoZXJlIHNwZWNpZmljYWxseQorICAgICAgICAgICAgIyB0byBjaGVjayB0aGF0IGVuc3VyZXBpcCAoYW5kIGhlbmNlIHZlbnYpIGlnbm9yZXMgaXQuCisgICAgICAgICAgICAjIFNlZSBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MzQKKyAgICAgICAgICAgIGVudnZhcnNbIlBJUF9OT19JTlNUQUxMIl0gPSAiMSIKKyAgICAgICAgICAgICMgQWxzbyBjaGVjayB0aGF0IHdlIGlnbm9yZSB0aGUgcGlwIGNvbmZpZ3VyYXRpb24gZmlsZQorICAgICAgICAgICAgIyBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTIwMDUzCisgICAgICAgICAgICB3aXRoIHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSgpIGFzIGhvbWVfZGlyOgorICAgICAgICAgICAgICAgIGVudnZhcnNbIkhPTUUiXSA9IGhvbWVfZGlyCisgICAgICAgICAgICAgICAgYmFkX2NvbmZpZyA9ICJbZ2xvYmFsXVxubm8taW5zdGFsbD0xIgorICAgICAgICAgICAgICAgICMgV3JpdGUgdG8gYm90aCBjb25maWcgZmlsZSBuYW1lcyBvbiBhbGwgcGxhdGZvcm1zIHRvIHJlZHVjZQorICAgICAgICAgICAgICAgICMgY3Jvc3MtcGxhdGZvcm0gdmFyaWF0aW9uIGluIHRlc3QgY29kZSBiZWhhdmlvdXIKKyAgICAgICAgICAgICAgICB3aW5fbG9jYXRpb24gPSAoInBpcCIsICJwaXAuaW5pIikKKyAgICAgICAgICAgICAgICBwb3NpeF9sb2NhdGlvbiA9ICgiLnBpcCIsICJwaXAuY29uZiIpCisgICAgICAgICAgICAgICAgIyBTa2lwcyB3aW5fbG9jYXRpb24gZHVlIHRvIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMDU0MQorICAgICAgICAgICAgICAgIGZvciBkaXJuYW1lLCBmbmFtZSBpbiAocG9zaXhfbG9jYXRpb24sKToKKyAgICAgICAgICAgICAgICAgICAgZGlycGF0aCA9IG9zLnBhdGguam9pbihob21lX2RpciwgZGlybmFtZSkKKyAgICAgICAgICAgICAgICAgICAgb3MubWtkaXIoZGlycGF0aCkKKyAgICAgICAgICAgICAgICAgICAgZnBhdGggPSBvcy5wYXRoLmpvaW4oZGlycGF0aCwgZm5hbWUpCisgICAgICAgICAgICAgICAgICAgIHdpdGggb3BlbihmcGF0aCwgJ3cnKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShiYWRfY29uZmlnKQorCisgICAgICAgICAgICAgICAgIyBBY3R1YWxseSBydW4gdGhlIGNyZWF0ZSBjb21tYW5kIHdpdGggYWxsIHRoYXQgdW5oZWxwZnVsCisgICAgICAgICAgICAgICAgIyBjb25maWcgaW4gcGxhY2UgdG8gZW5zdXJlIHdlIGlnbm9yZSBpdAorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5ydW5fd2l0aF9jYXB0dXJlKHZlbnYuY3JlYXRlLCBzZWxmLmVudl9kaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoX3BpcD1UcnVlKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBleGM6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIG91dHB1dCB0aGlzIHByb2R1Y2VzIGNhbiBiZSBhIGxpdHRsZSBoYXJkIHRvIHJlYWQsCisgICAgICAgICAgICAgICAgICAgICMgYnV0IGF0IGxlYXN0IGl0IGhhcyBhbGwgdGhlIGRldGFpbHMKKyAgICAgICAgICAgICAgICAgICAgZGV0YWlscyA9IGV4Yy5vdXRwdXQuZGVjb2RlKGVycm9ycz0icmVwbGFjZSIpCisgICAgICAgICAgICAgICAgICAgIG1zZyA9ICJ7fVxuXG4qKlN1YnByb2Nlc3MgT3V0cHV0Kipcbnt9IgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwobXNnLmZvcm1hdChleGMsIGRldGFpbHMpKQorICAgICAgICAjIEVuc3VyZSBwaXAgaXMgYXZhaWxhYmxlIGluIHRoZSB2aXJ0dWFsIGVudmlyb25tZW50CisgICAgICAgIGVudnB5ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVhbHBhdGgoc2VsZi5lbnZfZGlyKSwgc2VsZi5iaW5kaXIsIHNlbGYuZXhlKQorICAgICAgICBjbWQgPSBbZW52cHksICctSW0nLCAncGlwJywgJy0tdmVyc2lvbiddCisgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5QSVBFKQorICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgb3V0ID0gb3V0LmRlY29kZSgibGF0aW4tMSIpICMgRm9yY2UgdG8gdGV4dCwgcHJldmVudCBkZWNvZGluZyBlcnJvcnMKKyAgICAgICAgZXhwZWN0ZWRfdmVyc2lvbiA9ICJwaXAge30iLmZvcm1hdChlbnN1cmVwaXAudmVyc2lvbigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dFs6bGVuKGV4cGVjdGVkX3ZlcnNpb24pXSwgZXhwZWN0ZWRfdmVyc2lvbikKKyAgICAgICAgZW52X2RpciA9IG9zLmZzZW5jb2RlKHNlbGYuZW52X2RpcikuZGVjb2RlKCJsYXRpbi0xIikKKyAgICAgICAgc2VsZi5hc3NlcnRJbihlbnZfZGlyLCBvdXQpCisKKyAgICAgICAgIyBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlMTk3MjgKKyAgICAgICAgIyBDaGVjayB0aGUgcHJpdmF0ZSB1bmluc3RhbGwgY29tbWFuZCBwcm92aWRlZCBmb3IgdGhlIFdpbmRvd3MKKyAgICAgICAgIyBpbnN0YWxsZXJzIHdvcmtzIChhdCBsZWFzdCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQpCisgICAgICAgIGNtZCA9IFtlbnZweSwgJy1JbScsICdlbnN1cmVwaXAuX3VuaW5zdGFsbCddCisgICAgICAgIHdpdGggRW52aXJvbm1lbnRWYXJHdWFyZCgpIGFzIGVudnZhcnM6CisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlBJUEUpCisgICAgICAgICAgICBvdXQsIGVyciA9IHAuY29tbXVuaWNhdGUoKQorICAgICAgICAjIFdlIGZvcmNlIGV2ZXJ5dGhpbmcgdG8gdGV4dCwgc28gdW5pdHRlc3QgZ2l2ZXMgdGhlIGRldGFpbGVkIGRpZmYKKyAgICAgICAgIyBpZiB3ZSBnZXQgdW5leHBlY3RlZCByZXN1bHRzCisgICAgICAgIGVyciA9IGVyci5kZWNvZGUoImxhdGluLTEiKSAjIEZvcmNlIHRvIHRleHQsIHByZXZlbnQgZGVjb2RpbmcgZXJyb3JzCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCAiIikKKyAgICAgICAgIyBCZWluZyBmYWlybHkgc3BlY2lmaWMgcmVnYXJkaW5nIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIgZm9yIHRoZQorICAgICAgICAjIGluaXRpYWwgYnVuZGxpbmcgcGhhc2UgaW4gUHl0aG9uIDMuNC4gSWYgdGhlIG91dHB1dCBjaGFuZ2VzIGluCisgICAgICAgICMgZnV0dXJlIHBpcCB2ZXJzaW9ucywgdGhpcyB0ZXN0IGNhbiBsaWtlbHkgYmUgcmVsYXhlZCBmdXJ0aGVyLgorICAgICAgICBvdXQgPSBvdXQuZGVjb2RlKCJsYXRpbi0xIikgIyBGb3JjZSB0byB0ZXh0LCBwcmV2ZW50IGRlY29kaW5nIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydEluKCJTdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQgcGlwIiwgb3V0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJTdWNjZXNzZnVsbHkgdW5pbnN0YWxsZWQgc2V0dXB0b29scyIsIG91dCkKKyAgICAgICAgIyBDaGVjayBwaXAgaXMgbm93IGdvbmUgZnJvbSB0aGUgdmlydHVhbCBlbnZpcm9ubWVudAorICAgICAgICBzZWxmLmFzc2VydF9waXBfbm90X2luc3RhbGxlZCgpCisKKwogZGVmIHRlc3RfbWFpbigpOgotICAgIHJ1bl91bml0dGVzdChCYXNpY1Rlc3QpCisgICAgcnVuX3VuaXR0ZXN0KEJhc2ljVGVzdCwgRW5zdXJlUGlwVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YWl0My5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FpdDMucHkKaW5kZXggYmQwNmM4ZC4uZjZhMDY1ZCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YWl0My5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhaXQzLnB5CkBAIC03LDE1ICs3LDExIEBACiBmcm9tIHRlc3QuZm9ya193YWl0IGltcG9ydCBGb3JrV2FpdAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJ1bl91bml0dGVzdCwgcmVhcF9jaGlsZHJlbgogCi10cnk6Ci0gICAgb3MuZm9yawotZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJvcy5mb3JrIG5vdCBkZWZpbmVkIC0tIHNraXBwaW5nIHRlc3Rfd2FpdDMiKQoraWYgbm90IGhhc2F0dHIob3MsICdmb3JrJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLmZvcmsgbm90IGRlZmluZWQiKQogCi10cnk6Ci0gICAgb3Mud2FpdDMKLWV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdCgib3Mud2FpdDMgbm90IGRlZmluZWQgLS0gc2tpcHBpbmcgdGVzdF93YWl0MyIpCitpZiBub3QgaGFzYXR0cihvcywgJ3dhaXQzJyk6CisgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIm9zLndhaXQzIG5vdCBkZWZpbmVkIikKIAogY2xhc3MgV2FpdDNUZXN0KEZvcmtXYWl0KToKICAgICBkZWYgd2FpdF9pbXBsKHNlbGYsIGNwaWQpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weSBiL0xpYi90ZXN0L3Rlc3Rfd2FybmluZ3MucHkKaW5kZXggNjhiYWMzNi4uYjUxOWYwYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93YXJuaW5ncy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhcm5pbmdzLnB5CkBAIC00NCw2ICs0NCw3IEBACiAgICAgIiIiQmFzaWMgYm9va2tlZXBpbmcgcmVxdWlyZWQgZm9yIHRlc3RpbmcuIiIiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYub2xkX3VuaXR0ZXN0X21vZHVsZSA9IHVuaXR0ZXN0LmNhc2Uud2FybmluZ3MKICAgICAgICAgIyBUaGUgX193YXJuaW5ncmVnaXN0cnlfXyBuZWVkcyB0byBiZSBpbiBhIHByaXN0aW5lIHN0YXRlIGZvciB0ZXN0cwogICAgICAgICAjIHRvIHdvcmsgcHJvcGVybHkuCiAgICAgICAgIGlmICdfX3dhcm5pbmdyZWdpc3RyeV9fJyBpbiBnbG9iYWxzKCk6CkBAIC01NSwxMiArNTYsMzYgQEAKICAgICAgICAgIyBUaGUgJ3dhcm5pbmdzJyBtb2R1bGUgbXVzdCBiZSBleHBsaWNpdGx5IHNldCBzbyB0aGF0IHRoZSBwcm9wZXIKICAgICAgICAgIyBpbnRlcmFjdGlvbiBiZXR3ZWVuIF93YXJuaW5ncyBhbmQgJ3dhcm5pbmdzJyBjYW4gYmUgY29udHJvbGxlZC4KICAgICAgICAgc3lzLm1vZHVsZXNbJ3dhcm5pbmdzJ10gPSBzZWxmLm1vZHVsZQorICAgICAgICAjIEVuc3VyZSB0aGF0IHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFdhcm5zKCkgdXNlcyB0aGUgc2FtZSB3YXJuaW5ncworICAgICAgICAjIG1vZHVsZSB0aGFuIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCkuIE90aGVyd2lzZSwKKyAgICAgICAgIyB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpIHdpbGwgYmUgdW5hYmxlIHRvIHJlbW92ZSB0aGUgYWRkZWQgZmlsdGVyLgorICAgICAgICB1bml0dGVzdC5jYXNlLndhcm5pbmdzID0gc2VsZi5tb2R1bGUKICAgICAgICAgc3VwZXIoQmFzZVRlc3QsIHNlbGYpLnNldFVwKCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc3lzLm1vZHVsZXNbJ3dhcm5pbmdzJ10gPSBvcmlnaW5hbF93YXJuaW5ncworICAgICAgICB1bml0dGVzdC5jYXNlLndhcm5pbmdzID0gc2VsZi5vbGRfdW5pdHRlc3RfbW9kdWxlCiAgICAgICAgIHN1cGVyKEJhc2VUZXN0LCBzZWxmKS50ZWFyRG93bigpCiAKK2NsYXNzIFB1YmxpY0FQSVRlc3RzKEJhc2VUZXN0KToKKworICAgICIiIkVuc3VyZXMgdGhhdCB0aGUgY29ycmVjdCB2YWx1ZXMgYXJlIGV4cG9zZWQgaW4gdGhlCisgICAgcHVibGljIEFQSS4KKyAgICAiIiIKKworICAgIGRlZiB0ZXN0X21vZHVsZV9hbGxfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihzZWxmLm1vZHVsZSwgJ19fYWxsX18nKSkKKyAgICAgICAgdGFyZ2V0X2FwaSA9IFsid2FybiIsICJ3YXJuX2V4cGxpY2l0IiwgInNob3d3YXJuaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0d2FybmluZyIsICJmaWx0ZXJ3YXJuaW5ncyIsICJzaW1wbGVmaWx0ZXIiLAorICAgICAgICAgICAgICAgICAgICAgICJyZXNldHdhcm5pbmdzIiwgImNhdGNoX3dhcm5pbmdzIl0KKyAgICAgICAgc2VsZi5hc3NlcnRTZXRFcXVhbChzZXQoc2VsZi5tb2R1bGUuX19hbGxfXyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0KHRhcmdldF9hcGkpKQorCitjbGFzcyBDUHVibGljQVBJVGVzdHMoUHVibGljQVBJVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBjX3dhcm5pbmdzCisKK2NsYXNzIFB5UHVibGljQVBJVGVzdHMoUHVibGljQVBJVGVzdHMsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBtb2R1bGUgPSBweV93YXJuaW5ncwogCiBjbGFzcyBGaWx0ZXJUZXN0cyhCYXNlVGVzdCk6CiAKQEAgLTczLDYgKzk4LDE2IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVc2VyV2FybmluZywgc2VsZi5tb2R1bGUud2FybiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlclRlc3RzLnRlc3RfZXJyb3IiKQogCisgICAgZGVmIHRlc3RfZXJyb3JfYWZ0ZXJfZGVmYXVsdChzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiRmlsdGVyVGVzdHMudGVzdF9pZ25vcmVfYWZ0ZXJfZGVmYXVsdCIKKyAgICAgICAgICAgIGRlZiBmKCk6CisgICAgICAgICAgICAgICAgc2VsZi5tb2R1bGUud2FybihtZXNzYWdlLCBVc2VyV2FybmluZykKKyAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImVycm9yIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVc2VyV2FybmluZywgZikKKwogICAgIGRlZiB0ZXN0X2lnbm9yZShzZWxmKToKICAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKICAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CkBAIC04MSw2ICsxMTYsMTkgQEAKICAgICAgICAgICAgIHNlbGYubW9kdWxlLndhcm4oIkZpbHRlclRlc3RzLnRlc3RfaWdub3JlIiwgVXNlcldhcm5pbmcpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMCkKIAorICAgIGRlZiB0ZXN0X2lnbm9yZV9hZnRlcl9kZWZhdWx0KHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgbWVzc2FnZSA9ICJGaWx0ZXJUZXN0cy50ZXN0X2lnbm9yZV9hZnRlcl9kZWZhdWx0IgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgZigpCisgICAgICAgICAgICBzZWxmLm1vZHVsZS5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIiwgY2F0ZWdvcnk9VXNlcldhcm5pbmcpCisgICAgICAgICAgICBmKCkKKyAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCisKICAgICBkZWYgdGVzdF9hbHdheXMoc2VsZik6CiAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCiAgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgpAQCAtOTIsNiArMTQwLDI2IEBACiAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCiAKKyAgICBkZWYgdGVzdF9hbHdheXNfYWZ0ZXJfZGVmYXVsdChzZWxmKToKKyAgICAgICAgd2l0aCBvcmlnaW5hbF93YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSwKKyAgICAgICAgICAgICAgICBtb2R1bGU9c2VsZi5tb2R1bGUpIGFzIHc6CisgICAgICAgICAgICBzZWxmLm1vZHVsZS5yZXNldHdhcm5pbmdzKCkKKyAgICAgICAgICAgIG1lc3NhZ2UgPSAiRmlsdGVyVGVzdHMudGVzdF9hbHdheXNfYWZ0ZXJfaWdub3JlIgorICAgICAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuKG1lc3NhZ2UsIFVzZXJXYXJuaW5nKQorICAgICAgICAgICAgZigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0ubWVzc2FnZS5hcmdzWzBdLCBtZXNzYWdlKQorICAgICAgICAgICAgZigpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih3KSwgMSkKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1Vc2VyV2FybmluZykKKyAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UuYXJnc1swXSwgbWVzc2FnZSkKKyAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDMpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UuYXJnc1swXSwgbWVzc2FnZSkKKwogICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CiAgICAgICAgIHdpdGggb3JpZ2luYWxfd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MocmVjb3JkPVRydWUsCiAgICAgICAgICAgICAgICAgbW9kdWxlPXNlbGYubW9kdWxlKSBhcyB3OgpAQCAtMzQxLDYgKzQwOSwxOSBAQAogICAgICAgICAgICAgd2FybmluZ190ZXN0cy5fX25hbWVfXyA9IG1vZHVsZV9uYW1lCiAgICAgICAgICAgICBzeXMuYXJndiA9IGFyZ3YKIAorICAgIGRlZiB0ZXN0X3dhcm5fZXhwbGljaXRfbm9uX2FzY2lpX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICB3aXRoIG9yaWdpbmFsX3dhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKHJlY29yZD1UcnVlLAorICAgICAgICAgICAgICAgIG1vZHVsZT1zZWxmLm1vZHVsZSkgYXMgdzoKKyAgICAgICAgICAgIHNlbGYubW9kdWxlLnJlc2V0d2FybmluZ3MoKQorICAgICAgICAgICAgc2VsZi5tb2R1bGUuZmlsdGVyd2FybmluZ3MoImFsd2F5cyIsIGNhdGVnb3J5PVVzZXJXYXJuaW5nKQorICAgICAgICAgICAgZm9yIGZpbGVuYW1lIGluICgibm9uYXNjaWlceGU5XHUyMGFjIiwgInN1cnJvZ2F0ZVx1ZGM4MCIpOgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgb3MuZnNlbmNvZGUoZmlsZW5hbWUpCisgICAgICAgICAgICAgICAgZXhjZXB0IFVuaWNvZGVFbmNvZGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZS53YXJuX2V4cGxpY2l0KCJ0ZXh0IiwgVXNlcldhcm5pbmcsIGZpbGVuYW1lLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod1stMV0uZmlsZW5hbWUsIGZpbGVuYW1lKQorCiAgICAgZGVmIHRlc3Rfd2Fybl9leHBsaWNpdF90eXBlX2Vycm9ycyhzZWxmKToKICAgICAgICAgIyB3YXJuX2V4cGxpY2l0KCkgc2hvdWxkIGVycm9yIG91dCBncmFjZWZ1bGx5IGlmIGl0IGlzIGdpdmVuIG9iamVjdHMKICAgICAgICAgIyBvZiB0aGUgd3JvbmcgdHlwZXMuCkBAIC00ODYsNyArNTY3LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnk9cmVnaXN0cnkpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh3Wy0xXS5tZXNzYWdlLCBtZXNzYWdlKQogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHcpLCAxKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlZ2lzdHJ5KSwgMSkKKyAgICAgICAgICAgICAgICAjIE9uZSBhY3R1YWwgcmVnaXN0cnkga2V5IHBsdXMgdGhlICJ2ZXJzaW9uIiBrZXkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZWdpc3RyeSksIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJbigidmVyc2lvbiIsIHJlZ2lzdHJ5KQogICAgICAgICAgICAgICAgIGRlbCB3WzpdCiAgICAgICAgICAgICAgICAgIyBUZXN0IHJlbW92YWwuCiAgICAgICAgICAgICAgICAgZGVsIHNlbGYubW9kdWxlLmRlZmF1bHRhY3Rpb24KQEAgLTQ5Niw3ICs1NzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeT1yZWdpc3RyeSkKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdbLTFdLm1lc3NhZ2UsIG1lc3NhZ2UpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odyksIDEpCi0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVnaXN0cnkpLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlZ2lzdHJ5KSwgMikKICAgICAgICAgICAgICAgICBkZWwgd1s6XQogICAgICAgICAgICAgICAgICMgVGVzdCBzZXR0aW5nLgogICAgICAgICAgICAgICAgIHNlbGYubW9kdWxlLmRlZmF1bHRhY3Rpb24gPSAiaWdub3JlIgpAQCAtNTY2LDYgKzY0OSwxNSBAQAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgZ2xvYmFsc19kaWN0WydfX2ZpbGVfXyddID0gb2xkZmlsZQogCisgICAgZGVmIHRlc3Rfc3RkZXJyX25vbmUoc2VsZik6CisgICAgICAgIHJjLCBzdGRvdXQsIHN0ZGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwKKyAgICAgICAgICAgICJpbXBvcnQgc3lzOyBzeXMuc3RkZXJyID0gTm9uZTsgIgorICAgICAgICAgICAgImltcG9ydCB3YXJuaW5nczsgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdhbHdheXMnKTsgIgorICAgICAgICAgICAgIndhcm5pbmdzLndhcm4oJ1dhcm5pbmchJykiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0ZG91dCwgYicnKQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKGInV2FybmluZyEnLCBzdGRlcnIpCisgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oYidFcnJvcicsIHN0ZGVycikKKwogCiBjbGFzcyBXYXJuaW5nc0Rpc3BsYXlUZXN0cyhCYXNlVGVzdCk6CiAKQEAgLTc3OCw2ICs4NzAsMjUgQEAKICAgICAgICAgICAgICMgVXNlIC1XIHRvIGxvYWQgd2FybmluZ3MgbW9kdWxlIGF0IHN0YXJ0dXAKICAgICAgICAgICAgIGFzc2VydF9weXRob25fb2soJy1jJywgJ3Bhc3MnLCAnLVcnLCAnYWx3YXlzJywgUFlUSE9OUEFUSD1jd2QpCiAKK2NsYXNzIEZpbmFsaXphdGlvblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2ZpbmFsaXphdGlvbihzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAjMTk0MjE6IHdhcm5pbmdzLndhcm4oKSBzaG91bGQgbm90IGNyYXNoCisgICAgICAgICMgZHVyaW5nIFB5dGhvbiBmaW5hbGl6YXRpb24KKyAgICAgICAgY29kZSA9ICIiIgoraW1wb3J0IHdhcm5pbmdzCit3YXJuID0gd2FybmluZ3Mud2FybgorCitjbGFzcyBBOgorICAgIGRlZiBfX2RlbF9fKHNlbGYpOgorICAgICAgICB3YXJuKCJ0ZXN0IikKKworYT1BKCkKKyAgICAgICAgIiIiCisgICAgICAgIHJjLCBvdXQsIGVyciA9IGFzc2VydF9weXRob25fb2soIi1jIiwgY29kZSkKKyAgICAgICAgIyBub3RlOiAiX19tYWluX18iIGZpbGVuYW1lIGlzIG5vdCBjb3JyZWN0LCBpdCBzaG91bGQgYmUgdGhlIG5hbWUKKyAgICAgICAgIyBvZiB0aGUgc2NyaXB0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXJyLCBiJ19fbWFpbl9fOjc6IFVzZXJXYXJuaW5nOiB0ZXN0JykKKwogCiBkZWYgc2V0VXBNb2R1bGUoKToKICAgICBweV93YXJuaW5ncy5vbmNlcmVnaXN0cnkuY2xlYXIoKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93YXZlLnB5IGIvTGliL3Rlc3QvdGVzdF93YXZlLnB5CmluZGV4IGY2NDIwMWYuLjNlZmY3NzMgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2F2ZS5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dhdmUucHkKQEAgLTEsNiArMSw3IEBACiBmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgVEVTVEZOCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdGVzdCBpbXBvcnQgYXVkaW90ZXN0cworZnJvbSBhdWRpb29wIGltcG9ydCBieXRlc3dhcAogaW1wb3J0IHN5cwogaW1wb3J0IHdhdmUKIApAQCAtOCw5ICs5LDYgQEAKIGNsYXNzIFdhdmVUZXN0KGF1ZGlvdGVzdHMuQXVkaW9Xcml0ZVRlc3RzLAogICAgICAgICAgICAgICAgYXVkaW90ZXN0cy5BdWRpb1Rlc3RzV2l0aFNvdXJjZUZpbGUpOgogICAgIG1vZHVsZSA9IHdhdmUKLSAgICB0ZXN0X3Vuc2Vla2FibGVfd3JpdGUgPSBOb25lCi0gICAgdGVzdF91bnNlZWthYmxlX292ZXJmbG93ZWRfd3JpdGUgPSBOb25lCi0gICAgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlID0gTm9uZQogCiAKIGNsYXNzIFdhdmVQQ004VGVzdChXYXZlVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDgsMTMgKzQ2LDcgQEAKICAgICAgIEU0QjUwQ0VCIDYzNDQwQTVBIDA4Q0EwQTFGIDJCQkEwQjBCIDUxNDYwRTQ3IDhCQ0IxMTNDIEI2RjUwRUVBIDQ0MTUwQTU5IFwKICAgICAgICIiIikKICAgICBpZiBzeXMuYnl0ZW9yZGVyICE9ICdiaWcnOgotICAgICAgICBmcmFtZXMgPSBhdWRpb3Rlc3RzLmJ5dGVzd2FwMihmcmFtZXMpCi0KLSAgICBpZiBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCi0gICAgICAgIGRlZiB0ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoc2VsZik6Ci0gICAgICAgICAgICBzdXBlcigpLnRlc3RfdW5zZWVrYWJsZV9pbmNvbXBsZXRlZF93cml0ZSgpCi0KKyAgICAgICAgZnJhbWVzID0gYnl0ZXN3YXAoZnJhbWVzLCAyKQogCiAKIGNsYXNzIFdhdmVQQ00yNFRlc3QoV2F2ZVRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTgxLDcgKzczLDcgQEAKICAgICAgIDUxNDg2RjBFNDRFMSA4QkNDNjQxMTNCMDUgQjZGNEVDMEVFQjM2IDQ0MTMxNzBBNUI0OCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDMoZnJhbWVzKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDMpCiAKIAogY2xhc3MgV2F2ZVBDTTMyVGVzdChXYXZlVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTA4LDEyICsxMDAsNyBAQAogICAgICAgNTE0ODZGODAwRTQ0RTE5MCA4QkNDNjQ4MDExM0IwNTgwIEI2RjRFQzAwMEVFQjM2MzAgNDQxMzE3ODAwQTVCNDhBMCBcCiAgICAgICAiIiIpCiAgICAgaWYgc3lzLmJ5dGVvcmRlciAhPSAnYmlnJzoKLSAgICAgICAgZnJhbWVzID0gYXVkaW90ZXN0cy5ieXRlc3dhcDQoZnJhbWVzKQotCi0gICAgaWYgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQotICAgICAgICBkZWYgdGVzdF91bnNlZWthYmxlX2luY29tcGxldGVkX3dyaXRlKHNlbGYpOgotICAgICAgICAgICAgc3VwZXIoKS50ZXN0X3Vuc2Vla2FibGVfaW5jb21wbGV0ZWRfd3JpdGUoKQorICAgICAgICBmcmFtZXMgPSBieXRlc3dhcChmcmFtZXMsIDQpCiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weSBiL0xpYi90ZXN0L3Rlc3Rfd2Vha3JlZi5weQppbmRleCA4NWFiNzE3Li40MzEzYzFkIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dlYWtyZWYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93ZWFrcmVmLnB5CkBAIC03LDExICs3LDE1IEBACiBpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGNvcHkKIAotZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0Citmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQsIHNjcmlwdF9oZWxwZXIKIAogIyBVc2VkIGluIFJlZmVyZW5jZXNUZXN0Q2FzZS50ZXN0X3JlZl9jcmVhdGVkX2R1cmluZ19kZWwoKSAuCiByZWZfZnJvbV9kZWwgPSBOb25lCiAKKyMgVXNlZCBieSBGaW5hbGl6ZVRlc3RDYXNlIGFzIGEgZ2xvYmFsIHRoYXQgbWF5IGJlIHJlcGxhY2VkIGJ5IE5vbmUKKyMgd2hlbiB0aGUgaW50ZXJwcmV0ZXIgc2h1dHMgZG93bi4KK19nbG9iYWxfdmFyID0gJ2Zvb2JhcicKKwogY2xhc3MgQzoKICAgICBkZWYgbWV0aG9kKHNlbGYpOgogICAgICAgICBwYXNzCkBAIC00Nyw2ICs1MSwxMSBAQAogICAgICAgICByZXR1cm4gTm90SW1wbGVtZW50ZWQKICAgICBkZWYgX19oYXNoX18oc2VsZik6CiAgICAgICAgIHJldHVybiBoYXNoKHNlbGYuYXJnKQorICAgIGRlZiBzb21lX21ldGhvZChzZWxmKToKKyAgICAgICAgcmV0dXJuIDQKKyAgICBkZWYgb3RoZXJfbWV0aG9kKHNlbGYpOgorICAgICAgICByZXR1cm4gNQorCiAKIGNsYXNzIFJlZkN5Y2xlOgogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKQEAgLTc5NCw2ICs4MDMsMzAgQEAKICAgICAgICAgZGVsIHJvb3QKICAgICAgICAgZ2MuY29sbGVjdCgpCiAKKyAgICBkZWYgdGVzdF9jYWxsYmFja19hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIHggPSBPYmplY3QoMSkKKyAgICAgICAgY2FsbGJhY2sgPSBsYW1iZGEgcmVmOiBOb25lCisgICAgICAgIHJlZjEgPSB3ZWFrcmVmLnJlZih4LCBjYWxsYmFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZWYxLl9fY2FsbGJhY2tfXywgY2FsbGJhY2spCisKKyAgICAgICAgcmVmMiA9IHdlYWtyZWYucmVmKHgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZjIuX19jYWxsYmFja19fKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfYXR0cmlidXRlX2FmdGVyX2RlbGV0aW9uKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIHJlZiA9IHdlYWtyZWYucmVmKHgsIHNlbGYuY2FsbGJhY2spCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHJlZi5fX2NhbGxiYWNrX18pCisgICAgICAgIGRlbCB4CisgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlZi5fX2NhbGxiYWNrX18pCisKKyAgICBkZWYgdGVzdF9zZXRfY2FsbGJhY2tfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICB4ID0gT2JqZWN0KDEpCisgICAgICAgIGNhbGxiYWNrID0gbGFtYmRhIHJlZjogTm9uZQorICAgICAgICByZWYxID0gd2Vha3JlZi5yZWYoeCwgY2FsbGJhY2spCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgcmVmMS5fX2NhbGxiYWNrX18gPSBsYW1iZGEgcmVmOiBOb25lCisKIAogY2xhc3MgU3ViY2xhc3NhYmxlV2Vha3JlZlRlc3RDYXNlKFRlc3RCYXNlKToKIApAQCAtODk4LDYgKzkzMSwxNDAgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmNiY2FsbGVkLCAwKQogCiAKK2NsYXNzIFdlYWtNZXRob2RUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gT2JqZWN0IHN1YmNsYXNzIG92ZXJyaWRpbmcgYHNvbWVfbWV0aG9kYC4iIiIKKyAgICAgICAgY2xhc3MgQyhPYmplY3QpOgorICAgICAgICAgICAgZGVmIHNvbWVfbWV0aG9kKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA2CisgICAgICAgIHJldHVybiBDCisKKyAgICBkZWYgdGVzdF9hbGl2ZShzZWxmKToKKyAgICAgICAgbyA9IE9iamVjdCgxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyLCB3ZWFrcmVmLlJlZmVyZW5jZVR5cGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyKCksIHR5cGUoby5zb21lX21ldGhvZCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLl9fc2VsZl9fLCBvKQorICAgICAgICBzZWxmLmFzc2VydElzKHIoKS5fX2Z1bmNfXywgby5zb21lX21ldGhvZC5fX2Z1bmNfXykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyKCkoKSwgNCkKKworICAgIGRlZiB0ZXN0X29iamVjdF9kZWFkKHNlbGYpOgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCkKKyAgICAgICAgZGVsIG8KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLCBOb25lKQorCisgICAgZGVmIHRlc3RfbWV0aG9kX2RlYWQoc2VsZik6CisgICAgICAgIEMgPSBzZWxmLl9zdWJjbGFzcygpCisgICAgICAgIG8gPSBDKDEpCisgICAgICAgIHIgPSB3ZWFrcmVmLldlYWtNZXRob2Qoby5zb21lX21ldGhvZCkKKyAgICAgICAgZGVsIEMuc29tZV9tZXRob2QKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocigpLCBOb25lKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2tfd2hlbl9vYmplY3RfZGVhZChzZWxmKToKKyAgICAgICAgIyBUZXN0IGNhbGxiYWNrIGJlaGF2aW91ciB3aGVuIG9iamVjdCBkaWVzIGZpcnN0LgorICAgICAgICBDID0gc2VsZi5fc3ViY2xhc3MoKQorICAgICAgICBjYWxscyA9IFtdCisgICAgICAgIGRlZiBjYihhcmcpOgorICAgICAgICAgICAgY2FsbHMuYXBwZW5kKGFyZykKKyAgICAgICAgbyA9IEMoMSkKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kLCBjYikKKyAgICAgICAgZGVsIG8KKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FsbHMsIFtyXSkKKyAgICAgICAgIyBDYWxsYmFjayBpcyBvbmx5IGNhbGxlZCBvbmNlLgorICAgICAgICBDLnNvbWVfbWV0aG9kID0gT2JqZWN0LnNvbWVfbWV0aG9kCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisKKyAgICBkZWYgdGVzdF9jYWxsYmFja193aGVuX21ldGhvZF9kZWFkKHNlbGYpOgorICAgICAgICAjIFRlc3QgY2FsbGJhY2sgYmVoYXZpb3VyIHdoZW4gbWV0aG9kIGRpZXMgZmlyc3QuCisgICAgICAgIEMgPSBzZWxmLl9zdWJjbGFzcygpCisgICAgICAgIGNhbGxzID0gW10KKyAgICAgICAgZGVmIGNiKGFyZyk6CisgICAgICAgICAgICBjYWxscy5hcHBlbmQoYXJnKQorICAgICAgICBvID0gQygxKQorICAgICAgICByID0gd2Vha3JlZi5XZWFrTWV0aG9kKG8uc29tZV9tZXRob2QsIGNiKQorICAgICAgICBkZWwgQy5zb21lX21ldGhvZAorICAgICAgICBnYy5jb2xsZWN0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYWxscywgW3JdKQorICAgICAgICAjIENhbGxiYWNrIGlzIG9ubHkgY2FsbGVkIG9uY2UuCisgICAgICAgIGRlbCBvCisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNhbGxzLCBbcl0pCisKKyAgICBAc3VwcG9ydC5jcHl0aG9uX29ubHkKKyAgICBkZWYgdGVzdF9ub19jeWNsZXMoc2VsZik6CisgICAgICAgICMgQSBXZWFrTWV0aG9kIGRvZXNuJ3QgY3JlYXRlIGFueSByZWZlcmVuY2UgY3ljbGUgdG8gaXRzZWxmLgorICAgICAgICBvID0gT2JqZWN0KDEpCisgICAgICAgIGRlZiBjYihfKToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgciA9IHdlYWtyZWYuV2Vha01ldGhvZChvLnNvbWVfbWV0aG9kLCBjYikKKyAgICAgICAgd3IgPSB3ZWFrcmVmLnJlZihyKQorICAgICAgICBkZWwgcgorICAgICAgICBzZWxmLmFzc2VydElzKHdyKCksIE5vbmUpCisKKyAgICBkZWYgdGVzdF9lcXVhbGl0eShzZWxmKToKKyAgICAgICAgZGVmIF9lcShhLCBiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhID09IGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEgIT0gYikKKyAgICAgICAgZGVmIF9uZShhLCBiKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhICE9IGIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGEgPT0gYikKKyAgICAgICAgeCA9IE9iamVjdCgxKQorICAgICAgICB5ID0gT2JqZWN0KDEpCisgICAgICAgIGEgPSB3ZWFrcmVmLldlYWtNZXRob2QoeC5zb21lX21ldGhvZCkKKyAgICAgICAgYiA9IHdlYWtyZWYuV2Vha01ldGhvZCh5LnNvbWVfbWV0aG9kKQorICAgICAgICBjID0gd2Vha3JlZi5XZWFrTWV0aG9kKHgub3RoZXJfbWV0aG9kKQorICAgICAgICBkID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkub3RoZXJfbWV0aG9kKQorICAgICAgICAjIE9iamVjdHMgZXF1YWwsIHNhbWUgbWV0aG9kCisgICAgICAgIF9lcShhLCBiKQorICAgICAgICBfZXEoYywgZCkKKyAgICAgICAgIyBPYmplY3RzIGVxdWFsLCBkaWZmZXJlbnQgbWV0aG9kCisgICAgICAgIF9uZShhLCBjKQorICAgICAgICBfbmUoYSwgZCkKKyAgICAgICAgX25lKGIsIGMpCisgICAgICAgIF9uZShiLCBkKQorICAgICAgICAjIE9iamVjdHMgdW5lcXVhbCwgc2FtZSBvciBkaWZmZXJlbnQgbWV0aG9kCisgICAgICAgIHogPSBPYmplY3QoMikKKyAgICAgICAgZSA9IHdlYWtyZWYuV2Vha01ldGhvZCh6LnNvbWVfbWV0aG9kKQorICAgICAgICBmID0gd2Vha3JlZi5XZWFrTWV0aG9kKHoub3RoZXJfbWV0aG9kKQorICAgICAgICBfbmUoYSwgZSkKKyAgICAgICAgX25lKGEsIGYpCisgICAgICAgIF9uZShiLCBlKQorICAgICAgICBfbmUoYiwgZikKKyAgICAgICAgZGVsIHgsIHksIHoKKyAgICAgICAgZ2MuY29sbGVjdCgpCisgICAgICAgICMgRGVhZCBXZWFrTWV0aG9kcyBjb21wYXJlIGJ5IGlkZW50aXR5CisgICAgICAgIHJlZnMgPSBhLCBiLCBjLCBkLCBlLCBmCisgICAgICAgIGZvciBxIGluIHJlZnM6CisgICAgICAgICAgICBmb3IgciBpbiByZWZzOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocSA9PSByLCBxIGlzIHIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChxICE9IHIsIHEgaXMgbm90IHIpCisKKyAgICBkZWYgdGVzdF9oYXNoaW5nKHNlbGYpOgorICAgICAgICAjIEFsaXZlIFdlYWtNZXRob2RzIGFyZSBoYXNoYWJsZSBpZiB0aGUgdW5kZXJseWluZyBvYmplY3QgaXMKKyAgICAgICAgIyBoYXNoYWJsZS4KKyAgICAgICAgeCA9IE9iamVjdCgxKQorICAgICAgICB5ID0gT2JqZWN0KDEpCisgICAgICAgIGEgPSB3ZWFrcmVmLldlYWtNZXRob2QoeC5zb21lX21ldGhvZCkKKyAgICAgICAgYiA9IHdlYWtyZWYuV2Vha01ldGhvZCh5LnNvbWVfbWV0aG9kKQorICAgICAgICBjID0gd2Vha3JlZi5XZWFrTWV0aG9kKHkub3RoZXJfbWV0aG9kKQorICAgICAgICAjIFNpbmNlIFdlYWtNZXRob2Qgb2JqZWN0cyBhcmUgZXF1YWwsIHRoZSBoYXNoZXMgc2hvdWxkIGJlIGVxdWFsLgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhc2goYikpCisgICAgICAgIGhhID0gaGFzaChhKQorICAgICAgICAjIERlYWQgV2Vha01ldGhvZHMgcmV0YWluIHRoZWlyIG9sZCBoYXNoIHZhbHVlCisgICAgICAgIGRlbCB4LCB5CisgICAgICAgIGdjLmNvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYSksIGhhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2goYiksIGhhKQorICAgICAgICAjIElmIGl0IHdhc24ndCBoYXNoZWQgd2hlbiBhbGl2ZSwgYSBkZWFkIFdlYWtNZXRob2QgY2Fubm90IGJlIGhhc2hlZC4KKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBoYXNoLCBjKQorCisKIGNsYXNzIE1hcHBpbmdUZXN0Q2FzZShUZXN0QmFzZSk6CiAKICAgICBDT1VOVCA9IDEwCkBAIC0xMTMxLDYgKzEyOTgsMzYgQEAKICAgICAgICAgICAgIGRpY3QuY2xlYXIoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWN0KSwgMCkKIAorICAgIGRlZiBjaGVja193ZWFrX2RlbF9hbmRfbGVuX3doaWxlX2l0ZXJhdGluZyhzZWxmLCBkaWN0LCB0ZXN0Y29udGV4dCk6CisgICAgICAgICMgQ2hlY2sgdGhhdCBsZW4oKSB3b3JrcyB3aGVuIGJvdGggaXRlcmF0aW5nIGFuZCByZW1vdmluZyBrZXlzCisgICAgICAgICMgZXhwbGljaXRseSB0aHJvdWdoIHZhcmlvdXMgbWVhbnMgKC5wb3AoKSwgLmNsZWFyKCkuLi4pLCB3aGlsZQorICAgICAgICAjIGltcGxpY2l0IG11dGF0aW9uIGlzIGRlZmVycmVkIGJlY2F1c2UgYW4gaXRlcmF0b3IgaXMgYWxpdmUuCisgICAgICAgICMgKGVhY2ggY2FsbCB0byB0ZXN0Y29udGV4dCgpIHNob3VsZCBzY2hlZHVsZSBvbmUgaXRlbSBmb3IgcmVtb3ZhbAorICAgICAgICAjICBmb3IgdGhpcyB0ZXN0IHRvIHdvcmsgcHJvcGVybHkpCisgICAgICAgIG8gPSBPYmplY3QoMTIzNDU2KQorICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCk6CisgICAgICAgICAgICBuID0gbGVuKGRpY3QpCisgICAgICAgICAgICBkaWN0LnBvcGl0ZW0oKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljdCksIG4gLSAxKQorICAgICAgICAgICAgZGljdFtvXSA9IG8KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QpLCBuKQorICAgICAgICB3aXRoIHRlc3Rjb250ZXh0KCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWN0KSwgbiAtIDEpCisgICAgICAgICAgICBkaWN0LnBvcChuZXh0KGRpY3Qua2V5cygpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QpLCBuIC0gMikKKyAgICAgICAgd2l0aCB0ZXN0Y29udGV4dCgpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljdCksIG4gLSAzKQorICAgICAgICAgICAgZGVsIGRpY3RbbmV4dChkaWN0LmtleXMoKSldCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWN0KSwgbiAtIDQpCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QpLCBuIC0gNSkKKyAgICAgICAgICAgIGRpY3QucG9waXRlbSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihkaWN0KSwgbiAtIDYpCisgICAgICAgIHdpdGggdGVzdGNvbnRleHQoKToKKyAgICAgICAgICAgIGRpY3QuY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oZGljdCksIDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGRpY3QpLCAwKQorCiAgICAgZGVmIHRlc3Rfd2Vha19rZXlzX2Rlc3Ryb3lfd2hpbGVfaXRlcmF0aW5nKHNlbGYpOgogICAgICAgICAjIElzc3VlICM3MTA1OiBpdGVyYXRvcnMgc2hvdWxkbid0IGNyYXNoIHdoZW4gYSBrZXkgaXMgaW1wbGljaXRseSByZW1vdmVkCiAgICAgICAgIGRpY3QsIG9iamVjdHMgPSBzZWxmLm1ha2Vfd2Vha19rZXllZF9kaWN0KCkKQEAgLTExNTAsNyArMTM0NywxMiBAQAogICAgICAgICAgICAgICAgIHlpZWxkIE9iamVjdCh2KSwgdgogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpdCA9IE5vbmUgICAgICAgICAgICMgc2hvdWxkIGNvbW1pdCBhbGwgcmVtb3ZhbHMKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgc2VsZi5jaGVja193ZWFrX2Rlc3Ryb3lfYW5kX211dGF0ZV93aGlsZV9pdGVyYXRpbmcoZGljdCwgdGVzdGNvbnRleHQpCisgICAgICAgICMgSXNzdWUgIzIxMTczOiBsZW4oKSBmcmFnaWxlIHdoZW4ga2V5cyBhcmUgYm90aCBpbXBsaWNpdGx5IGFuZAorICAgICAgICAjIGV4cGxpY2l0bHkgcmVtb3ZlZC4KKyAgICAgICAgZGljdCwgb2JqZWN0cyA9IHNlbGYubWFrZV93ZWFrX2tleWVkX2RpY3QoKQorICAgICAgICBzZWxmLmNoZWNrX3dlYWtfZGVsX2FuZF9sZW5fd2hpbGVfaXRlcmF0aW5nKGRpY3QsIHRlc3Rjb250ZXh0KQogCiAgICAgZGVmIHRlc3Rfd2Vha192YWx1ZXNfZGVzdHJveV93aGlsZV9pdGVyYXRpbmcoc2VsZik6CiAgICAgICAgICMgSXNzdWUgIzcxMDU6IGl0ZXJhdG9ycyBzaG91bGRuJ3QgY3Jhc2ggd2hlbiBhIGtleSBpcyBpbXBsaWNpdGx5IHJlbW92ZWQKQEAgLTExNzIsNyArMTM3NCwxMCBAQAogICAgICAgICAgICAgICAgIHlpZWxkIGssIE9iamVjdChrKQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICBpdCA9IE5vbmUgICAgICAgICAgICMgc2hvdWxkIGNvbW1pdCBhbGwgcmVtb3ZhbHMKKyAgICAgICAgICAgICAgICBnYy5jb2xsZWN0KCkKICAgICAgICAgc2VsZi5jaGVja193ZWFrX2Rlc3Ryb3lfYW5kX211dGF0ZV93aGlsZV9pdGVyYXRpbmcoZGljdCwgdGVzdGNvbnRleHQpCisgICAgICAgIGRpY3QsIG9iamVjdHMgPSBzZWxmLm1ha2Vfd2Vha192YWx1ZWRfZGljdCgpCisgICAgICAgIHNlbGYuY2hlY2tfd2Vha19kZWxfYW5kX2xlbl93aGlsZV9pdGVyYXRpbmcoZGljdCwgdGVzdGNvbnRleHQpCiAKICAgICBkZWYgdGVzdF9tYWtlX3dlYWtfa2V5ZWRfZGljdF9mcm9tX2RpY3Qoc2VsZik6CiAgICAgICAgIG8gPSBPYmplY3QoMykKQEAgLTEyMDMsNiArMTQwOCwxOCBAQAogICAgICAgICBkaWN0MiA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeShkaWN0KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpY3RbMzY0XSwgbykKIAorICAgIGRlZiB0ZXN0X21ha2Vfd2Vha192YWx1ZWRfZGljdF9taXNjKHNlbGYpOgorICAgICAgICAjIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeS5fX2luaXRfXykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnksIHt9LCB7fSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnksICgpLCAoKSkKKyAgICAgICAgIyBzcGVjaWFsIGtleXdvcmQgYXJndW1lbnRzCisgICAgICAgIG8gPSBPYmplY3QoMykKKyAgICAgICAgZm9yIGt3IGluICdzZWxmJywgJ2RpY3QnLCAnb3RoZXInLCAnaXRlcmFibGUnOgorICAgICAgICAgICAgZCA9IHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeSgqKntrdzogb30pCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3QoZC5rZXlzKCkpLCBba3ddKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkW2t3XSwgbykKKwogICAgIGRlZiBtYWtlX3dlYWtfdmFsdWVkX2RpY3Qoc2VsZik6CiAgICAgICAgIGRpY3QgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkoKQogICAgICAgICBvYmplY3RzID0gbGlzdChtYXAoT2JqZWN0LCByYW5nZShzZWxmLkNPVU5UKSkpCkBAIC0xMjgzLDYgKzE1MDAsMTkgQEAKICAgICBkZWYgdGVzdF93ZWFrX3ZhbHVlZF9kaWN0X3VwZGF0ZShzZWxmKToKICAgICAgICAgc2VsZi5jaGVja191cGRhdGUod2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICB7MTogQygpLCAnYSc6IEMoKSwgQygpOiBDKCl9KQorICAgICAgICAjIGVycm9ycworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdlYWtyZWYuV2Vha1ZhbHVlRGljdGlvbmFyeS51cGRhdGUpCisgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkoKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGQudXBkYXRlLCB7fSwge30pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgZC51cGRhdGUsICgpLCAoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQua2V5cygpKSwgW10pCisgICAgICAgICMgc3BlY2lhbCBrZXl3b3JkIGFyZ3VtZW50cworICAgICAgICBvID0gT2JqZWN0KDMpCisgICAgICAgIGZvciBrdyBpbiAnc2VsZicsICdkaWN0JywgJ290aGVyJywgJ2l0ZXJhYmxlJzoKKyAgICAgICAgICAgIGQgPSB3ZWFrcmVmLldlYWtWYWx1ZURpY3Rpb25hcnkoKQorICAgICAgICAgICAgZC51cGRhdGUoKip7a3c6IG99KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KGQua2V5cygpKSwgW2t3XSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZFtrd10sIG8pCiAKICAgICBkZWYgdGVzdF93ZWFrX2tleWVkX2RpY3RfdXBkYXRlKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX3VwZGF0ZSh3ZWFrcmVmLldlYWtLZXlEaWN0aW9uYXJ5LApAQCAtMTM4NSw2ICsxNjE1LDE1MSBAQAogICAgIGRlZiBfcmVmZXJlbmNlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5fX3JlZi5jb3B5KCkKIAorCitjbGFzcyBGaW5hbGl6ZVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGNsYXNzIEE6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfY29sbGVjdF9pZl9uZWNlc3Nhcnkoc2VsZik6CisgICAgICAgICMgd2UgY3JlYXRlIG5vIHJlZi1jeWNsZXMgc28gaW4gQ1B5dGhvbiBubyBnYyBzaG91bGQgYmUgbmVlZGVkCisgICAgICAgIGlmIHN5cy5pbXBsZW1lbnRhdGlvbi5uYW1lICE9ICdjcHl0aG9uJzoKKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisKKyAgICBkZWYgdGVzdF9maW5hbGl6ZShzZWxmKToKKyAgICAgICAgZGVmIGFkZCh4LHkseik6CisgICAgICAgICAgICByZXMuYXBwZW5kKHggKyB5ICsgeikKKyAgICAgICAgICAgIHJldHVybiB4ICsgeSArIHoKKworICAgICAgICBhID0gc2VsZi5BKCkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmID0gd2Vha3JlZi5maW5hbGl6ZShhLCBhZGQsIDY3LCA0Mywgej04OSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCAoYSwgYWRkLCAoNjcsNDMpLCB7J3onOjg5fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCAxOTkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZigpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBlZWsoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmRldGFjaCgpLCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuYWxpdmUsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgWzE5OV0pCisKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZiA9IHdlYWtyZWYuZmluYWxpemUoYSwgYWRkLCA2NywgNDMsIDg5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYucGVlaygpLCAoYSwgYWRkLCAoNjcsNDMsODkpLCB7fSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgKGEsIGFkZCwgKDY3LDQzLDg5KSwge30pKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFtdKQorCisgICAgICAgIHJlcyA9IFtdCisgICAgICAgIGYgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIGFkZCwgeD02NywgeT00Mywgej04OSkKKyAgICAgICAgZGVsIGEKKyAgICAgICAgc2VsZi5fY29sbGVjdF9pZl9uZWNlc3NhcnkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYoKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wZWVrKCksIE5vbmUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5kZXRhY2goKSwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLmFsaXZlLCBGYWxzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIFsxOTldKQorCisgICAgZGVmIHRlc3Rfb3JkZXIoc2VsZik6CisgICAgICAgIGEgPSBzZWxmLkEoKQorICAgICAgICByZXMgPSBbXQorCisgICAgICAgIGYxID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjEnKQorICAgICAgICBmMiA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2YyJykKKyAgICAgICAgZjMgPSB3ZWFrcmVmLmZpbmFsaXplKGEsIHJlcy5hcHBlbmQsICdmMycpCisgICAgICAgIGY0ID0gd2Vha3JlZi5maW5hbGl6ZShhLCByZXMuYXBwZW5kLCAnZjQnKQorICAgICAgICBmNSA9IHdlYWtyZWYuZmluYWxpemUoYSwgcmVzLmFwcGVuZCwgJ2Y1JykKKworICAgICAgICAjIG1ha2Ugc3VyZSBmaW5hbGl6ZXJzIGNhbiBrZWVwIHRoZW1zZWx2ZXMgYWxpdmUKKyAgICAgICAgZGVsIGYxLCBmNAorCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmMi5hbGl2ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGYzLmFsaXZlKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZjUuYWxpdmUpCisKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGY1LmRldGFjaCgpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKGY1LmFsaXZlKQorCisgICAgICAgIGY1KCkgICAgICAgICAgICAgICAgICAgICAgICMgbm90aGluZyBiZWNhdXNlIHByZXZpb3VzbHkgdW5yZWdpc3RlcmVkCisgICAgICAgIHJlcy5hcHBlbmQoJ0EnKQorICAgICAgICBmMygpICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2YzJykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmMy5hbGl2ZSkKKyAgICAgICAgcmVzLmFwcGVuZCgnQicpCisgICAgICAgIGYzKCkgICAgICAgICAgICAgICAgICAgICAgICMgbm90aGluZyBiZWNhdXNlIHByZXZpb3VzbHkgY2FsbGVkCisgICAgICAgIHJlcy5hcHBlbmQoJ0MnKQorICAgICAgICBkZWwgYQorICAgICAgICBzZWxmLl9jb2xsZWN0X2lmX25lY2Vzc2FyeSgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgPT4gcmVzLmFwcGVuZCgnZjQnKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjID0+IHJlcy5hcHBlbmQoJ2YyJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyA9PiByZXMuYXBwZW5kKCdmMScpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZjIuYWxpdmUpCisgICAgICAgIHJlcy5hcHBlbmQoJ0QnKQorICAgICAgICBmMigpICAgICAgICAgICAgICAgICAgICAgICAjIG5vdGhpbmcgYmVjYXVzZSBwcmV2aW91c2x5IGNhbGxlZCBieSBnYworCisgICAgICAgIGV4cGVjdGVkID0gWydBJywgJ2YzJywgJ0InLCAnQycsICdmNCcsICdmMicsICdmMScsICdEJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXMsIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfYWxsX2ZyZWVkKHNlbGYpOgorICAgICAgICAjIHdlIHdhbnQgYSB3ZWFrcmVmYWJsZSBzdWJjbGFzcyBvZiB3ZWFrcmVmLmZpbmFsaXplCisgICAgICAgIGNsYXNzIE15RmluYWxpemVyKHdlYWtyZWYuZmluYWxpemUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGEgPSBzZWxmLkEoKQorICAgICAgICByZXMgPSBbXQorICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoMTIzKQorICAgICAgICBmID0gTXlGaW5hbGl6ZXIoYSwgY2FsbGJhY2spCisKKyAgICAgICAgd3JfY2FsbGJhY2sgPSB3ZWFrcmVmLnJlZihjYWxsYmFjaykKKyAgICAgICAgd3JfZiA9IHdlYWtyZWYucmVmKGYpCisgICAgICAgIGRlbCBjYWxsYmFjaywgZgorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHdyX2NhbGxiYWNrKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3ROb25lKHdyX2YoKSkKKworICAgICAgICBkZWwgYQorICAgICAgICBzZWxmLl9jb2xsZWN0X2lmX25lY2Vzc2FyeSgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3JfY2FsbGJhY2soKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3JfZigpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlcywgWzEyM10pCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcnVuX2luX2NoaWxkKGNscyk6CisgICAgICAgIGRlZiBlcnJvcigpOgorICAgICAgICAgICAgIyBDcmVhdGUgYW4gYXRleGl0IGZpbmFsaXplciBmcm9tIGluc2lkZSBhIGZpbmFsaXplciBjYWxsZWQKKyAgICAgICAgICAgICMgYXQgZXhpdC4gIFRoaXMgc2hvdWxkIGJlIHRoZSBuZXh0IHRvIGJlIHJ1bi4KKyAgICAgICAgICAgIGcxID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIHByaW50LCAnZzEnKQorICAgICAgICAgICAgcHJpbnQoJ2YzIGVycm9yJykKKyAgICAgICAgICAgIDEvMAorCisgICAgICAgICMgY2xzIHNob3VsZCBzdGF5IGFsaXZlIHRpbGwgYXRleGl0IGNhbGxiYWNrcyBydW4KKyAgICAgICAgZjEgPSB3ZWFrcmVmLmZpbmFsaXplKGNscywgcHJpbnQsICdmMScsIF9nbG9iYWxfdmFyKQorICAgICAgICBmMiA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2YyJywgX2dsb2JhbF92YXIpCisgICAgICAgIGYzID0gd2Vha3JlZi5maW5hbGl6ZShjbHMsIGVycm9yKQorICAgICAgICBmNCA9IHdlYWtyZWYuZmluYWxpemUoY2xzLCBwcmludCwgJ2Y0JywgX2dsb2JhbF92YXIpCisKKyAgICAgICAgYXNzZXJ0IGYxLmF0ZXhpdCA9PSBUcnVlCisgICAgICAgIGYyLmF0ZXhpdCA9IEZhbHNlCisgICAgICAgIGFzc2VydCBmMy5hdGV4aXQgPT0gVHJ1ZQorICAgICAgICBhc3NlcnQgZjQuYXRleGl0ID09IFRydWUKKworICAgIGRlZiB0ZXN0X2F0ZXhpdChzZWxmKToKKyAgICAgICAgcHJvZyA9ICgnZnJvbSB0ZXN0LnRlc3Rfd2Vha3JlZiBpbXBvcnQgRmluYWxpemVUZXN0Q2FzZTsnKworICAgICAgICAgICAgICAgICdGaW5hbGl6ZVRlc3RDYXNlLnJ1bl9pbl9jaGlsZCgpJykKKyAgICAgICAgcmMsIG91dCwgZXJyID0gc2NyaXB0X2hlbHBlci5hc3NlcnRfcHl0aG9uX29rKCctYycsIHByb2cpCisgICAgICAgIG91dCA9IG91dC5kZWNvZGUoJ2FzY2lpJykuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0LCBbJ2Y0IGZvb2JhcicsICdmMyBlcnJvcicsICdnMScsICdmMSBmb29iYXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGInWmVyb0RpdmlzaW9uRXJyb3InIGluIGVycikKKworCiBsaWJyZWZ0ZXN0ID0gIiIiIERvY3Rlc3QgZm9yIGV4YW1wbGVzIGluIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZTogd2Vha3JlZi5yc3QKIAogPj4+IGltcG9ydCB3ZWFrcmVmCkBAIC0xNDczLDEwICsxODQ4LDEyIEBACiBkZWYgdGVzdF9tYWluKCk6CiAgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoCiAgICAgICAgIFJlZmVyZW5jZXNUZXN0Q2FzZSwKKyAgICAgICAgV2Vha01ldGhvZFRlc3RDYXNlLAogICAgICAgICBNYXBwaW5nVGVzdENhc2UsCiAgICAgICAgIFdlYWtWYWx1ZURpY3Rpb25hcnlUZXN0Q2FzZSwKICAgICAgICAgV2Vha0tleURpY3Rpb25hcnlUZXN0Q2FzZSwKICAgICAgICAgU3ViY2xhc3NhYmxlV2Vha3JlZlRlc3RDYXNlLAorICAgICAgICBGaW5hbGl6ZVRlc3RDYXNlLAogICAgICAgICApCiAgICAgc3VwcG9ydC5ydW5fZG9jdGVzdChzeXMubW9kdWxlc1tfX25hbWVfX10pCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2lucmVnLnB5IGIvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkKaW5kZXggY2I0Y2RlOS4uMmM0YWMwOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93aW5yZWcucHkKQEAgLTgsNyArOCw3IEBACiBmcm9tIHBsYXRmb3JtIGltcG9ydCBtYWNoaW5lCiAKICMgRG8gdGhpcyBmaXJzdCBzbyB0ZXN0IHdpbGwgYmUgc2tpcHBlZCBpZiBtb2R1bGUgZG9lc24ndCBleGlzdAotc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd3aW5yZWcnKQorc3VwcG9ydC5pbXBvcnRfbW9kdWxlKCd3aW5yZWcnLCByZXF1aXJlZF9vbj1bJ3dpbiddKQogIyBOb3cgaW1wb3J0IGV2ZXJ5dGhpbmcKIGZyb20gd2lucmVnIGltcG9ydCAqCiAKQEAgLTU3LDEzICs1NywxMyBAQAogICAgIGRlZiBkZWxldGVfdHJlZShzZWxmLCByb290LCBzdWJrZXkpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBoa2V5ID0gT3BlbktleShyb290LCBzdWJrZXksIEtFWV9BTExfQUNDRVNTKQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICMgc3Via2V5IGRvZXMgbm90IGV4aXN0CiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzdWJzdWJrZXkgPSBFbnVtS2V5KGhrZXksIDApCi0gICAgICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBubyBtb3JlIHN1YmtleXMKICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgc2VsZi5kZWxldGVfdHJlZShoa2V5LCBzdWJzdWJrZXkpCkBAIC0xMDAsNyArMTAwLDcgQEAKICAgICAgICAgICAgIFF1ZXJ5SW5mb0tleShpbnRfc3ViX2tleSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiSXQgYXBwZWFycyB0aGUgQ2xvc2VLZXkoKSBmdW5jdGlvbiBkb2VzICIKICAgICAgICAgICAgICAgICAgICAgICAibm90IGNsb3NlIHRoZSBhY3R1YWwga2V5ISIpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgIyAuLi4gYW5kIGNsb3NlIHRoYXQga2V5IHRoYXQgd2F5IDotKQogICAgICAgICBpbnRfa2V5ID0gaW50KGtleSkKQEAgLTEwOSw3ICsxMDksNyBAQAogICAgICAgICAgICAgUXVlcnlJbmZvS2V5KGludF9rZXkpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkl0IGFwcGVhcnMgdGhlIGtleS5DbG9zZSgpIGZ1bmN0aW9uICIKICAgICAgICAgICAgICAgICAgICAgICAiZG9lcyBub3QgY2xvc2UgdGhlIGFjdHVhbCBrZXkhIikKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgZGVmIF9yZWFkX3Rlc3RfZGF0YShzZWxmLCByb290X2tleSwgc3Via2V5c3RyPSJzdWJfa2V5IiwgT3BlbktleT1PcGVuS2V5KToKQEAgLTEyNiw3ICsxMjYsNyBAQAogICAgICAgICAgICAgd2hpbGUgMToKICAgICAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgICAgIGRhdGEgPSBFbnVtVmFsdWUoc3ViX2tleSwgaW5kZXgpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhIGluIHRlc3RfZGF0YSwgVHJ1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEaWRuJ3QgcmVhZCBiYWNrIHRoZSBjb3JyZWN0IHRlc3QgZGF0YSIpCkBAIC0xNDcsNyArMTQ3LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgRW51bUtleShrZXksIDEpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIldhcyBhYmxlIHRvIGdldCBhIHNlY29uZCBrZXkgd2hlbiBJIG9ubHkgaGF2ZSBvbmUhIikKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGtleS5DbG9zZSgpCkBAIC0xNzEsNyArMTcxLDcgQEAKICAgICAgICAgICAgICMgU2hvdWxkbnQgYmUgYWJsZSB0byBkZWxldGUgaXQgdHdpY2UhCiAgICAgICAgICAgICBEZWxldGVLZXkoa2V5LCBzdWJrZXlzdHIpCiAgICAgICAgICAgICBzZWxmLmZhaWwoIkRlbGV0aW5nIHRoZSBrZXkgdHdpY2Ugc3VjY2VlZGVkIikKLSAgICAgICAgZXhjZXB0IEVudmlyb25tZW50RXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcGFzcwogICAgICAgICBrZXkuQ2xvc2UoKQogICAgICAgICBEZWxldGVLZXkocm9vdF9rZXksIHRlc3Rfa2V5X25hbWUpCkBAIC0xNzksNyArMTc5LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAga2V5ID0gT3BlbktleShyb290X2tleSwgdGVzdF9rZXlfbmFtZSkKICAgICAgICAgICAgIHNlbGYuZmFpbCgiQ291bGQgb3BlbiB0aGUgbm9uLWV4aXN0ZW50IGtleSIpCi0gICAgICAgIGV4Y2VwdCBXaW5kb3dzRXJyb3I6ICMgVXNlIHRoaXMgZXJyb3IgbmFtZSB0aGlzIHRpbWUKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6ICMgVXNlIHRoaXMgZXJyb3IgbmFtZSB0aGlzIHRpbWUKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfdGVzdF9hbGwoc2VsZiwgcm9vdF9rZXksIHN1YmtleXN0cj0ic3ViX2tleSIpOgpAQCAtMjMwLDcgKzIzMCw3IEBACiAKICAgICBkZWYgdGVzdF9pbmV4aXN0YW50X3JlbW90ZV9yZWdpc3RyeShzZWxmKToKICAgICAgICAgY29ubmVjdCA9IGxhbWJkYTogQ29ubmVjdFJlZ2lzdHJ5KCJhYmNkZWZnaGlqa2wiLCBIS0VZX0NVUlJFTlRfVVNFUikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoV2luZG93c0Vycm9yLCBjb25uZWN0KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCBjb25uZWN0KQogCiAgICAgZGVmIHRlc3RFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3Moc2VsZik6CiAgICAgICAgIHIgPSBFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MoIiV3aW5kaXIlXFx0ZXN0IikKQEAgLTI0Miw4ICsyNDIsOCBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIENvbm5lY3RSZWdpc3RyeShOb25lLCBIS0VZX0xPQ0FMX01BQ0hJTkUpIGFzIGg6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChoLmhhbmRsZSwgMCkKLSAgICAgICAgICAgICAgICByYWlzZSBXaW5kb3dzRXJyb3IKLSAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgICAgICByYWlzZSBPU0Vycm9yCisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoLmhhbmRsZSwgMCkKIAogICAgIGRlZiB0ZXN0X2NoYW5naW5nX3ZhbHVlKHNlbGYpOgpAQCAtMzQxLDcgKzM0MSw3IEBACiAgICAgZGVmIHRlc3RfcXVlcnl2YWx1ZWV4X3JldHVybl92YWx1ZShzZWxmKToKICAgICAgICAgIyBUZXN0IGZvciBJc3N1ZSAjMTY3NTksIHJldHVybiB1bnNpZ25lZCBpbnQgZnJvbSBRdWVyeVZhbHVlRXguCiAgICAgICAgICMgUmVnMlB5LCB3aGljaCBnZXRzIGNhbGxlZCBieSBRdWVyeVZhbHVlRXgsIHdhcyByZXR1cm5pbmcgYSB2YWx1ZQotICAgICAgICAjIGdlbmVyYXRlZCBieSBQeUxvbmdfRnJvbUxvbmcuIFRoZSBpbXBsbWVudGF0aW9uIG5vdyB1c2VzCisgICAgICAgICMgZ2VuZXJhdGVkIGJ5IFB5TG9uZ19Gcm9tTG9uZy4gVGhlIGltcGxlbWVudGF0aW9uIG5vdyB1c2VzCiAgICAgICAgICMgUHlMb25nX0Zyb21VbnNpZ25lZExvbmcgdG8gbWF0Y2ggRFdPUkQncyBzaXplLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICB3aXRoIENyZWF0ZUtleShIS0VZX0NVUlJFTlRfVVNFUiwgdGVzdF9rZXlfbmFtZSkgYXMgY2s6CkBAIC0zNTQsNiArMzU0LDE5IEBACiAgICAgICAgIGZpbmFsbHk6CiAgICAgICAgICAgICBEZWxldGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpCiAKKyAgICBkZWYgdGVzdF9zZXR2YWx1ZWV4X2NyYXNoX3dpdGhfbm9uZV9hcmcoc2VsZik6CisgICAgICAgICMgVGVzdCBmb3IgSXNzdWUgIzIxMTUxLCBzZWdmYXVsdCB3aGVuIE5vbmUgaXMgcGFzc2VkIHRvIFNldFZhbHVlRXgKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBDcmVhdGVLZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3Rfa2V5X25hbWUpIGFzIGNrOgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoY2suaGFuZGxlLCAwKQorICAgICAgICAgICAgICAgIHRlc3RfdmFsID0gTm9uZQorICAgICAgICAgICAgICAgIFNldFZhbHVlRXgoY2ssICJ0ZXN0X25hbWUiLCAwLCBSRUdfQklOQVJZLCB0ZXN0X3ZhbCkKKyAgICAgICAgICAgICAgICByZXRfdmFsLCByZXRfdHlwZSA9IFF1ZXJ5VmFsdWVFeChjaywgInRlc3RfbmFtZSIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXRfdHlwZSwgUkVHX0JJTkFSWSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJldF92YWwsIHRlc3RfdmFsKQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgRGVsZXRlS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLCB0ZXN0X2tleV9uYW1lKQorCiAKIAogQHVuaXR0ZXN0LnNraXBVbmxlc3MoUkVNT1RFX05BTUUsICJTa2lwcGluZyByZW1vdGUgcmVnaXN0cnkgdGVzdHMiKQpAQCAtNDA3LDcgKzQyMCw3IEBACiAgICAgICAgICAgICAgICAgb3Blbl9mYWlsID0gbGFtYmRhOiBPcGVuS2V5KEhLRVlfQ1VSUkVOVF9VU0VSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtFWV9SRUFEIHwgS0VZX1dPVzY0XzY0S0VZKQotICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3Blbl9mYWlsKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIG9wZW5fZmFpbCkKIAogICAgICAgICAgICAgIyBOb3cgZXhwbGljaXRseSBvcGVuIHRoZSA2NC1iaXQgdmVyc2lvbiBvZiB0aGUga2V5CiAgICAgICAgICAgICB3aXRoIE9wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKQEAgLTQ0Nyw3ICs0NjAsNyBAQAogICAgICAgICAgICAgb3Blbl9mYWlsID0gbGFtYmRhOiBPcGVuS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3JlZmxlY3Rfa2V5X25hbWUsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBLRVlfUkVBRCB8IEtFWV9XT1c2NF82NEtFWSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFdpbmRvd3NFcnJvciwgb3Blbl9mYWlsKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoT1NFcnJvciwgb3Blbl9mYWlsKQogCiAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB0aGUgMzItYml0IGtleSBpcyBhY3R1YWxseSB0aGVyZQogICAgICAgICAgICAgd2l0aCBPcGVuS2V5RXgoSEtFWV9DVVJSRU5UX1VTRVIsIHRlc3RfcmVmbGVjdF9rZXlfbmFtZSwgMCwKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkgYi9MaWIvdGVzdC90ZXN0X3dpbnNvdW5kLnB5CmluZGV4IDA2OWFkYzMuLjgzNjE4YjYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2luc291bmQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93aW5zb3VuZC5weQpAQCAtMjIsNyArMjIsNyBAQAogICAgICAgICBrZXkgPSB3aW5yZWcuT3BlbktleUV4KHdpbnJlZy5IS0VZX0NVUlJFTlRfVVNFUiwKICAgICAgICAgICAgICAgICAiQXBwRXZlbnRzXFNjaGVtZXNcQXBwc1wuRGVmYXVsdFx7MH1cLkRlZmF1bHQiLmZvcm1hdChzb3VuZCkpCiAgICAgICAgIHJldHVybiB3aW5yZWcuRW51bVZhbHVlKGtleSwgMClbMV0gIT0gIiIKLSAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICByZXR1cm4gRmFsc2UKIAogY2xhc3MgQmVlcFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF93aXRoLnB5IGIvTGliL3Rlc3QvdGVzdF93aXRoLnB5CmluZGV4IDcwNjhhODAuLmNiYWFmY2YgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfd2l0aC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3dpdGgucHkKQEAgLTEyLDggKzEyLDggQEAKIAogCiBjbGFzcyBNb2NrQ29udGV4dE1hbmFnZXIoX0dlbmVyYXRvckNvbnRleHRNYW5hZ2VyKToKLSAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuYywgKmFyZ3MsICoqa3dkcyk6Ci0gICAgICAgIHN1cGVyKCkuX19pbml0X18oZnVuYywgKmFyZ3MsICoqa3dkcykKKyAgICBkZWYgX19pbml0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzdXBlcigpLl9faW5pdF9fKCphcmdzKQogICAgICAgICBzZWxmLmVudGVyX2NhbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuZXhpdF9jYWxsZWQgPSBGYWxzZQogICAgICAgICBzZWxmLmV4aXRfYXJncyA9IE5vbmUKQEAgLTMxLDcgKzMxLDcgQEAKIAogZGVmIG1vY2tfY29udGV4dG1hbmFnZXIoZnVuYyk6CiAgICAgZGVmIGhlbHBlcigqYXJncywgKiprd2RzKToKLSAgICAgICAgcmV0dXJuIE1vY2tDb250ZXh0TWFuYWdlcihmdW5jLCAqYXJncywgKiprd2RzKQorICAgICAgICByZXR1cm4gTW9ja0NvbnRleHRNYW5hZ2VyKGZ1bmMsIGFyZ3MsIGt3ZHMpCiAgICAgcmV0dXJuIGhlbHBlcgogCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfd3NnaXJlZi5weSBiL0xpYi90ZXN0L3Rlc3Rfd3NnaXJlZi5weQppbmRleCBlMjEzZDc3Li40MDc2YjY4IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3dzZ2lyZWYucHkKKysrIGIvTGliL3Rlc3QvdGVzdF93c2dpcmVmLnB5CkBAIC0xLDExICsxLDEwIEBACi1mcm9tIF9fZnV0dXJlX18gaW1wb3J0IG5lc3RlZF9zY29wZXMgICAgIyBCYWNrd2FyZCBjb21wYXQgZm9yIDIuMQogZnJvbSB1bml0dGVzdCBpbXBvcnQgVGVzdENhc2UKIGZyb20gd3NnaXJlZi51dGlsIGltcG9ydCBzZXR1cF90ZXN0aW5nX2RlZmF1bHRzCiBmcm9tIHdzZ2lyZWYuaGVhZGVycyBpbXBvcnQgSGVhZGVycwogZnJvbSB3c2dpcmVmLmhhbmRsZXJzIGltcG9ydCBCYXNlSGFuZGxlciwgQmFzZUNHSUhhbmRsZXIKIGZyb20gd3NnaXJlZiBpbXBvcnQgdXRpbAogZnJvbSB3c2dpcmVmLnZhbGlkYXRlIGltcG9ydCB2YWxpZGF0b3IKLWZyb20gd3NnaXJlZi5zaW1wbGVfc2VydmVyIGltcG9ydCBXU0dJU2VydmVyLCBXU0dJUmVxdWVzdEhhbmRsZXIsIGRlbW9fYXBwCitmcm9tIHdzZ2lyZWYuc2ltcGxlX3NlcnZlciBpbXBvcnQgV1NHSVNlcnZlciwgV1NHSVJlcXVlc3RIYW5kbGVyCiBmcm9tIHdzZ2lyZWYuc2ltcGxlX3NlcnZlciBpbXBvcnQgbWFrZV9zZXJ2ZXIKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPLCBCeXRlc0lPLCBCdWZmZXJlZFJlYWRlcgogZnJvbSBzb2NrZXRzZXJ2ZXIgaW1wb3J0IEJhc2VTZXJ2ZXIKQEAgLTE0LDkgKzEzLDExIEBACiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CiAKIGZyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCisKIGNsYXNzIE1vY2tTZXJ2ZXIoV1NHSVNlcnZlcik6CiAgICAgIiIiTm9uLXNvY2tldCBIVFRQIHNlcnZlciIiIgogCkBAIC00OCw2ICs0OSwxOCBAQAogICAgIF0pCiAgICAgcmV0dXJuIFtiIkhlbGxvLCB3b3JsZCEiXQogCisKK2RlZiBoZWFkZXJfYXBwKGVudmlyb24sIHN0YXJ0X3Jlc3BvbnNlKToKKyAgICBzdGFydF9yZXNwb25zZSgiMjAwIE9LIiwgWworICAgICAgICAoJ0NvbnRlbnQtVHlwZScsICd0ZXh0L3BsYWluJyksCisgICAgICAgICgnRGF0ZScsICdNb24sIDA1IEp1biAyMDA2IDE4OjQ5OjU0IEdNVCcpCisgICAgXSkKKyAgICByZXR1cm4gWyc7Jy5qb2luKFsKKyAgICAgICAgZW52aXJvblsnSFRUUF9YX1RFU1RfSEVBREVSJ10sIGVudmlyb25bJ1FVRVJZX1NUUklORyddLAorICAgICAgICBlbnZpcm9uWydQQVRIX0lORk8nXQorICAgIF0pLmVuY29kZSgnaXNvLTg4NTktMScpXQorCisKIGRlZiBydW5fYW1vY2soYXBwPWhlbGxvX2FwcCwgZGF0YT1iIkdFVCAvIEhUVFAvMS4wXG5cbiIpOgogICAgIHNlcnZlciA9IG1ha2Vfc2VydmVyKCIiLCA4MCwgYXBwLCBNb2NrU2VydmVyLCBNb2NrSGFuZGxlcikKICAgICBpbnAgPSBCdWZmZXJlZFJlYWRlcihCeXRlc0lPKGRhdGEpKQpAQCAtMTE4LDYgKzEzMSwxOSBAQAogICAgICAgICBvdXQsIGVyciA9IHJ1bl9hbW9jaygpCiAgICAgICAgIHNlbGYuY2hlY2tfaGVsbG8ob3V0KQogCisgICAgZGVmIHRlc3RfZW52aXJvbihzZWxmKToKKyAgICAgICAgcmVxdWVzdCA9ICgKKyAgICAgICAgICAgIGIiR0VUIC9wJTYxdGgvP3F1ZXJ5PXRlc3QgSFRUUC8xLjBcbiIKKyAgICAgICAgICAgIGIiWC1UZXN0LUhlYWRlcjogUHl0aG9uIHRlc3QgXG4iCisgICAgICAgICAgICBiIlgtVGVzdC1IZWFkZXI6IFB5dGhvbiB0ZXN0IDJcbiIKKyAgICAgICAgICAgIGIiQ29udGVudC1MZW5ndGg6IDBcblxuIgorICAgICAgICApCisgICAgICAgIG91dCwgZXJyID0gcnVuX2Ftb2NrKGhlYWRlcl9hcHAsIHJlcXVlc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBvdXQuc3BsaXRsaW5lcygpWy0xXSwKKyAgICAgICAgICAgIGIiUHl0aG9uIHRlc3QsUHl0aG9uIHRlc3QgMjtxdWVyeT10ZXN0Oy9wYXRoLyIKKyAgICAgICAgKQorCiAgICAgZGVmIHRlc3RfcmVxdWVzdF9sZW5ndGgoc2VsZik6CiAgICAgICAgIG91dCwgZXJyID0gcnVuX2Ftb2NrKGRhdGE9YiJHRVQgIiArIChiIngiICogNjU1MzcpICsgYiIgSFRUUC8xLjBcblxuIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXQuc3BsaXRsaW5lcygpWzBdLApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94ZHJsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weQppbmRleCA2MDA0YzlmLi43MDQ5NmQ2IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weQorKysgYi9MaWIvdGVzdC90ZXN0X3hkcmxpYi5weQpAQCAtNTEsOCArNTEsMzIgQEAKICAgICAgICAgdXAuZG9uZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEVPRkVycm9yLCB1cC51bnBhY2tfdWludCkKIAorY2xhc3MgQ29udmVyc2lvbkVycm9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucGFja2VyID0geGRybGliLlBhY2tlcigpCisKKyAgICBkZWYgYXNzZXJ0UmFpc2VzQ29udmVyc2lvbihzZWxmLCAqYXJncyk6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhkcmxpYi5Db252ZXJzaW9uRXJyb3IsICphcmdzKQorCisgICAgZGVmIHRlc3RfcGFja19pbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzQ29udmVyc2lvbihzZWxmLnBhY2tlci5wYWNrX2ludCwgJ3N0cmluZycpCisKKyAgICBkZWYgdGVzdF9wYWNrX3VpbnQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzQ29udmVyc2lvbihzZWxmLnBhY2tlci5wYWNrX3VpbnQsICdzdHJpbmcnKQorCisgICAgZGVmIHRlc3RfZmxvYXQoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzQ29udmVyc2lvbihzZWxmLnBhY2tlci5wYWNrX2Zsb2F0LCAnc3RyaW5nJykKKworICAgIGRlZiB0ZXN0X2RvdWJsZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNDb252ZXJzaW9uKHNlbGYucGFja2VyLnBhY2tfZG91YmxlLCAnc3RyaW5nJykKKworICAgIGRlZiB0ZXN0X3VoeXBlcihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNDb252ZXJzaW9uKHNlbGYucGFja2VyLnBhY2tfdWh5cGVyLCAnc3RyaW5nJykKKwogZGVmIHRlc3RfbWFpbigpOgogICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFhEUlRlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoQ29udmVyc2lvbkVycm9yVGVzdCkKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZG9tX21pbmljb21wYXQucHkgYi9MaWIvdGVzdC90ZXN0X3htbF9kb21fbWluaWNvbXBhdC5weQppbmRleCAwODVlNTJhLi4zYjAzZGZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3htbF9kb21fbWluaWNvbXBhdC5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9kb21fbWluaWNvbXBhdC5weQpAQCAtMSw1ICsxLDYgQEAKICMgVGVzdHMgZm9yIHhtbC5kb20ubWluaWNvbXBhdAogCitpbXBvcnQgY29weQogaW1wb3J0IHBpY2tsZQogaW1wb3J0IHVuaXR0ZXN0CiAKQEAgLTg0LDE4ICs4NSw1NCBAQAogICAgIGRlZiB0ZXN0X25vZGVsaXN0X3BpY2tsZV9yb3VuZHRyaXAoc2VsZik6CiAgICAgICAgICMgVGVzdCBwaWNrbGluZyBhbmQgdW5waWNrbGluZyBvZiBhIE5vZGVMaXN0LgogCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgIyBFbXB0eSBOb2RlTGlzdC4KKyAgICAgICAgICAgIG5vZGVfbGlzdCA9IE5vZGVMaXN0KCkKKyAgICAgICAgICAgIHBpY2tsZWQgPSBwaWNrbGUuZHVtcHMobm9kZV9saXN0LCBwcm90bykKKyAgICAgICAgICAgIHVucGlja2xlZCA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vdCh1bnBpY2tsZWQsIG5vZGVfbGlzdCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodW5waWNrbGVkLCBub2RlX2xpc3QpCisKKyAgICAgICAgICAgICMgTm9uLWVtcHR5IE5vZGVMaXN0LgorICAgICAgICAgICAgbm9kZV9saXN0LmFwcGVuZCgxKQorICAgICAgICAgICAgbm9kZV9saXN0LmFwcGVuZCgyKQorICAgICAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhub2RlX2xpc3QsIHByb3RvKQorICAgICAgICAgICAgdW5waWNrbGVkID0gcGlja2xlLmxvYWRzKHBpY2tsZWQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90KHVucGlja2xlZCwgbm9kZV9saXN0KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh1bnBpY2tsZWQsIG5vZGVfbGlzdCkKKworICAgIGRlZiB0ZXN0X25vZGVsaXN0X2NvcHkoc2VsZik6CiAgICAgICAgICMgRW1wdHkgTm9kZUxpc3QuCiAgICAgICAgIG5vZGVfbGlzdCA9IE5vZGVMaXN0KCkKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhub2RlX2xpc3QpCi0gICAgICAgIHVucGlja2xlZCA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgbm9kZV9saXN0KQorICAgICAgICBjb3BpZWQgPSBjb3B5LmNvcHkobm9kZV9saXN0KQorICAgICAgICBzZWxmLmFzc2VydElzTm90KGNvcGllZCwgbm9kZV9saXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvcGllZCwgbm9kZV9saXN0KQogCiAgICAgICAgICMgTm9uLWVtcHR5IE5vZGVMaXN0LgotICAgICAgICBub2RlX2xpc3QuYXBwZW5kKDEpCi0gICAgICAgIG5vZGVfbGlzdC5hcHBlbmQoMikKLSAgICAgICAgcGlja2xlZCA9IHBpY2tsZS5kdW1wcyhub2RlX2xpc3QpCi0gICAgICAgIHVucGlja2xlZCA9IHBpY2tsZS5sb2FkcyhwaWNrbGVkKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHVucGlja2xlZCwgbm9kZV9saXN0KQorICAgICAgICBub2RlX2xpc3QuYXBwZW5kKFsxXSkKKyAgICAgICAgbm9kZV9saXN0LmFwcGVuZChbMl0pCisgICAgICAgIGNvcGllZCA9IGNvcHkuY29weShub2RlX2xpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY29waWVkLCBub2RlX2xpc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29waWVkLCBub2RlX2xpc3QpCisgICAgICAgIGZvciB4LCB5IGluIHppcChjb3BpZWQsIG5vZGVfbGlzdCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElzKHgsIHkpCisKKyAgICBkZWYgdGVzdF9ub2RlbGlzdF9kZWVwY29weShzZWxmKToKKyAgICAgICAgIyBFbXB0eSBOb2RlTGlzdC4KKyAgICAgICAgbm9kZV9saXN0ID0gTm9kZUxpc3QoKQorICAgICAgICBjb3BpZWQgPSBjb3B5LmRlZXBjb3B5KG5vZGVfbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChjb3BpZWQsIG5vZGVfbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3BpZWQsIG5vZGVfbGlzdCkKKworICAgICAgICAjIE5vbi1lbXB0eSBOb2RlTGlzdC4KKyAgICAgICAgbm9kZV9saXN0LmFwcGVuZChbMV0pCisgICAgICAgIG5vZGVfbGlzdC5hcHBlbmQoWzJdKQorICAgICAgICBjb3BpZWQgPSBjb3B5LmRlZXBjb3B5KG5vZGVfbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChjb3BpZWQsIG5vZGVfbGlzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb3BpZWQsIG5vZGVfbGlzdCkKKyAgICAgICAgZm9yIHgsIHkgaW4gemlwKGNvcGllZCwgbm9kZV9saXN0KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoeCwgeSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeCwgeSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKaW5kZXggN2JkOGEyYy4uNWMyYTJhZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWUucHkKQEAgLTUsMTIgKzUsMTUgQEAKICMgRm9yIHRoaXMgcHVycG9zZSwgdGhlIG1vZHVsZS1sZXZlbCAiRVQiIHN5bWJvbCBpcyB0ZW1wb3JhcmlseQogIyBtb25rZXktcGF0Y2hlZCB3aGVuIHJ1bm5pbmcgdGhlICJ0ZXN0X3htbF9ldHJlZV9jIiB0ZXN0IHN1aXRlLgogCitpbXBvcnQgY29weQogaW1wb3J0IGh0bWwKIGltcG9ydCBpbwogaW1wb3J0IG9wZXJhdG9yCiBpbXBvcnQgcGlja2xlCiBpbXBvcnQgc3lzCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAoraW1wb3J0IHdhcm5pbmdzCiBpbXBvcnQgd2Vha3JlZgogCiBmcm9tIGl0ZXJ0b29scyBpbXBvcnQgcHJvZHVjdApAQCAtMTIwLDExICsxMjMsMTEgQEAKICAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgogICAgICAgICBjbHMubW9kdWxlcyA9IHtweUVULCBFVH0KIAotICAgIGRlZiBwaWNrbGVSb3VuZFRyaXAoc2VsZiwgb2JqLCBuYW1lLCBkdW1wZXIsIGxvYWRlcik6CisgICAgZGVmIHBpY2tsZVJvdW5kVHJpcChzZWxmLCBvYmosIG5hbWUsIGR1bXBlciwgbG9hZGVyLCBwcm90byk6CiAgICAgICAgIHNhdmVfbSA9IHN5cy5tb2R1bGVzW25hbWVdCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gZHVtcGVyCi0gICAgICAgICAgICB0ZW1wID0gcGlja2xlLmR1bXBzKG9iaikKKyAgICAgICAgICAgIHRlbXAgPSBwaWNrbGUuZHVtcHMob2JqLCBwcm90bykKICAgICAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbG9hZGVyCiAgICAgICAgICAgICByZXN1bHQgPSBwaWNrbGUubG9hZHModGVtcCkKICAgICAgICAgZXhjZXB0IHBpY2tsZS5QaWNrbGluZ0Vycm9yIGFzIHBlOgpAQCAtMjQwLDcgKzI0MywzMyBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MLCBFVC5mcm9tc3RyaW5nKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEVULlBJLCBFVC5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoRVQuWE1MUGFyc2VyLCBFVC5YTUxUcmVlQnVpbGRlcikKKworICAgIGRlZiB0ZXN0X3NldF9hdHRyaWJ1dGUoc2VsZik6CisgICAgICAgIGVsZW1lbnQgPSBFVC5FbGVtZW50KCd0YWcnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50YWcsICd0YWcnKQorICAgICAgICBlbGVtZW50LnRhZyA9ICdUYWcnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50YWcsICdUYWcnKQorICAgICAgICBlbGVtZW50LnRhZyA9ICdUQUcnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50YWcsICdUQUcnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGVsZW1lbnQudGV4dCkKKyAgICAgICAgZWxlbWVudC50ZXh0ID0gJ1RleHQnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50ZXh0LCAnVGV4dCcpCisgICAgICAgIGVsZW1lbnQudGV4dCA9ICdURVhUJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsZW1lbnQudGV4dCwgJ1RFWFQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGVsZW1lbnQudGFpbCkKKyAgICAgICAgZWxlbWVudC50YWlsID0gJ1RhaWwnCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50YWlsLCAnVGFpbCcpCisgICAgICAgIGVsZW1lbnQudGFpbCA9ICdUQUlMJworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsZW1lbnQudGFpbCwgJ1RBSUwnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC5hdHRyaWIsIHt9KQorICAgICAgICBlbGVtZW50LmF0dHJpYiA9IHsnYSc6ICdiJywgJ2MnOiAnZCd9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC5hdHRyaWIsIHsnYSc6ICdiJywgJ2MnOiAnZCd9KQorICAgICAgICBlbGVtZW50LmF0dHJpYiA9IHsnQSc6ICdCJywgJ0MnOiAnRCd9CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC5hdHRyaWIsIHsnQSc6ICdCJywgJ0MnOiAnRCd9KQogCiAgICAgZGVmIHRlc3Rfc2ltcGxlb3BzKHNlbGYpOgogICAgICAgICAjIEJhc2ljIG1ldGhvZCBzYW5pdHkgY2hlY2tzLgpAQCAtNDMzLDE1ICs0NjIsNiBAQAogICAgICAgICAgICAgICAgICcgICA8ZW1wdHktZWxlbWVudCAvPlxuJwogICAgICAgICAgICAgICAgICc8L3Jvb3Q+JykKIAotICAgICAgICBwYXJzZXIgPSBFVC5YTUxUcmVlQnVpbGRlcigpICMgMS4yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgc2VsZi5zZXJpYWxpemVfY2hlY2socGFyc2VyLmNsb3NlKCksCi0gICAgICAgICAgICAgICAgJzxyb290PlxuJwotICAgICAgICAgICAgICAgICcgICA8ZWxlbWVudCBrZXk9InZhbHVlIj50ZXh0PC9lbGVtZW50PlxuJwotICAgICAgICAgICAgICAgICcgICA8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWxcbicKLSAgICAgICAgICAgICAgICAnICAgPGVtcHR5LWVsZW1lbnQgLz5cbicKLSAgICAgICAgICAgICAgICAnPC9yb290PicpCi0KICAgICAgICAgdGFyZ2V0ID0gRVQuVHJlZUJ1aWxkZXIoKQogICAgICAgICBwYXJzZXIgPSBFVC5YTUxQYXJzZXIodGFyZ2V0PXRhcmdldCkKICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKQEAgLTU0MSwxMSArNTYxLDIxIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzLCBbJ3N0YXJ0LW5zJywgJ2VuZC1ucyddKQogCiAgICAgICAgIGV2ZW50cyA9ICgic3RhcnQiLCAiZW5kIiwgImJvZ3VzIikKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKLSAgICAgICAgICAgIHdpdGggb3BlbihTSU1QTEVfWE1MRklMRSwgInJiIikgYXMgZjoKKyAgICAgICAgd2l0aCBvcGVuKFNJTVBMRV9YTUxGSUxFLCAicmIiKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKSBhcyBjbToKICAgICAgICAgICAgICAgICBpdGVycGFyc2UoZiwgZXZlbnRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShmLmNsb3NlZCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgInVua25vd24gZXZlbnQgJ2JvZ3VzJyIpCiAKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1SZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIGl0ZXJwYXJzZShTSU1QTEVfWE1MRklMRSwgZXZlbnRzKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwgInVua25vd24gZXZlbnQgJ2JvZ3VzJyIpCisgICAgICAgICAgICBkZWwgY20KKyAgICAgICAgICAgIHN1cHBvcnQuZ2NfY29sbGVjdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodywgW10pCisKICAgICAgICAgc291cmNlID0gaW8uQnl0ZXNJTygKICAgICAgICAgICAgIGIiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0naXNvLTg4NTktMSc/PlxuIgogICAgICAgICAgICAgYiI8Ym9keSB4bWxucz0naHR0cDovLyYjMjMzO2ZmYm90Lm9yZy9ucydcbiIKQEAgLTU2Niw2ICs1OTYsMjEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKICAgICAgICAgICAgICAgICAnanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50OiBsaW5lIDEsIGNvbHVtbiAxMicpCiAKKyAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYiI8ZG9jdW1lbnQgLz5qdW5rIikKKyAgICAgICAgaXQgPSBpdGVycGFyc2UoVEVTVEZOKQorICAgICAgICBhY3Rpb24sIGVsZW0gPSBuZXh0KGl0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChhY3Rpb24sIGVsZW0udGFnKSwgKCdlbmQnLCAnZG9jdW1lbnQnKSkKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncyhyZWNvcmQ9VHJ1ZSkgYXMgdzoKKyAgICAgICAgICAgIHdhcm5pbmdzLmZpbHRlcndhcm5pbmdzKCJhbHdheXMiLCBjYXRlZ29yeT1SZXNvdXJjZVdhcm5pbmcpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEVULlBhcnNlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgICAgIG5leHQoaXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLAorICAgICAgICAgICAgICAgICAgICAnanVuayBhZnRlciBkb2N1bWVudCBlbGVtZW50OiBsaW5lIDEsIGNvbHVtbiAxMicpCisgICAgICAgICAgICBkZWwgY20sIGl0CisgICAgICAgICAgICBzdXBwb3J0LmdjX2NvbGxlY3QoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHcsIFtdKQorCiAgICAgZGVmIHRlc3Rfd3JpdGVmaWxlKHNlbGYpOgogICAgICAgICBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKICAgICAgICAgZWxlbS50ZXh0ID0gInRleHQiCkBAIC03MDYsOSArNzUxLDkgQEAKICAgICAgICAgICAgICdpc284ODU5LTEzJywgJ2lzbzg4NTktMTQnLCAnaXNvODg1OS0xNScsICdpc284ODU5LTE2JywKICAgICAgICAgICAgICdjcDQzNycsICdjcDcyMCcsICdjcDczNycsICdjcDc3NScsICdjcDg1MCcsICdjcDg1MicsCiAgICAgICAgICAgICAnY3A4NTUnLCAnY3A4NTYnLCAnY3A4NTcnLCAnY3A4NTgnLCAnY3A4NjAnLCAnY3A4NjEnLCAnY3A4NjInLAotICAgICAgICAgICAgJ2NwODYzJywgJ2NwODY1JywgJ2NwODY2JywgJ2NwODY5JywgJ2NwODc0JywgJ2NwMTAwNicsICdjcDEyNTAnLAotICAgICAgICAgICAgJ2NwMTI1MScsICdjcDEyNTInLCAnY3AxMjUzJywgJ2NwMTI1NCcsICdjcDEyNTUnLCAnY3AxMjU2JywKLSAgICAgICAgICAgICdjcDEyNTcnLCAnY3AxMjU4JywKKyAgICAgICAgICAgICdjcDg2MycsICdjcDg2NScsICdjcDg2NicsICdjcDg2OScsICdjcDg3NCcsICdjcDEwMDYnLCAnY3AxMTI1JywKKyAgICAgICAgICAgICdjcDEyNTAnLCAnY3AxMjUxJywgJ2NwMTI1MicsICdjcDEyNTMnLCAnY3AxMjU0JywgJ2NwMTI1NScsCisgICAgICAgICAgICAnY3AxMjU2JywgJ2NwMTI1NycsICdjcDEyNTgnLAogICAgICAgICAgICAgJ21hYy1jeXJpbGxpYycsICdtYWMtZ3JlZWsnLCAnbWFjLWljZWxhbmQnLCAnbWFjLWxhdGluMicsCiAgICAgICAgICAgICAnbWFjLXJvbWFuJywgJ21hYy10dXJraXNoJywKICAgICAgICAgICAgICdpc28yMDIyLWpwJywgJ2lzbzIwMjItanAtMScsICdpc28yMDIyLWpwLTInLCAnaXNvMjAyMi1qcC0yMDA0JywKQEAgLTk2NCw2ICsxMDA5LDE2MCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VyaWFsaXplZCwgZXhwZWN0ZWQpCiAKIAorY2xhc3MgWE1MUHVsbFBhcnNlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIF9mZWVkKHNlbGYsIHBhcnNlciwgZGF0YSwgY2h1bmtfc2l6ZT1Ob25lKToKKyAgICAgICAgaWYgY2h1bmtfc2l6ZSBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihkYXRhKSwgY2h1bmtfc2l6ZSk6CisgICAgICAgICAgICAgICAgcGFyc2VyLmZlZWQoZGF0YVtpOmkrY2h1bmtfc2l6ZV0pCisKKyAgICBkZWYgYXNzZXJ0X2V2ZW50X3RhZ3Moc2VsZiwgcGFyc2VyLCBleHBlY3RlZCk6CisgICAgICAgIGV2ZW50cyA9IHBhcnNlci5yZWFkX2V2ZW50cygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWyhhY3Rpb24sIGVsZW0udGFnKSBmb3IgYWN0aW9uLCBlbGVtIGluIGV2ZW50c10sCisgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfeG1sKHNlbGYpOgorICAgICAgICBmb3IgY2h1bmtfc2l6ZSBpbiAoTm9uZSwgMSwgNSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChjaHVua19zaXplPWNodW5rX3NpemUpOgorICAgICAgICAgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwhLS0gY29tbWVudCAtLT5cbiIsIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxyb290PlxuICA8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPlxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ2VsZW1lbnQnKV0pCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZWxlbWVudD50ZXh0PC9lbGVtZW50PnRhaWxcbiIsIGNodW5rX3NpemUpCisgICAgICAgICAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZW1wdHktZWxlbWVudC8+XG4iLCBjaHVua19zaXplKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAgICAgICAgICgnZW5kJywgJ2VsZW1lbnQnKSwKKyAgICAgICAgICAgICAgICAgICAgKCdlbmQnLCAnZW1wdHktZWxlbWVudCcpLAorICAgICAgICAgICAgICAgICAgICBdKQorICAgICAgICAgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PlxuIiwgY2h1bmtfc2l6ZSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ3Jvb3QnKV0pCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9mZWVkX3doaWxlX2l0ZXJhdGluZyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcigpCisgICAgICAgIGl0ID0gcGFyc2VyLnJlYWRfZXZlbnRzKCkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8cm9vdD5cbiAgPGVsZW1lbnQga2V5PSd2YWx1ZSc+dGV4dDwvZWxlbWVudD5cbiIpCisgICAgICAgIGFjdGlvbiwgZWxlbSA9IG5leHQoaXQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKGFjdGlvbiwgZWxlbS50YWcpLCAoJ2VuZCcsICdlbGVtZW50JykpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPC9yb290PlxuIikKKyAgICAgICAgYWN0aW9uLCBlbGVtID0gbmV4dChpdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgoYWN0aW9uLCBlbGVtLnRhZyksICgnZW5kJywgJ3Jvb3QnKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wSXRlcmF0aW9uKToKKyAgICAgICAgICAgIG5leHQoaXQpCisKKyAgICBkZWYgdGVzdF9zaW1wbGVfeG1sX3dpdGhfbnMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290IHhtbG5zPSduYW1lc3BhY2UnPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFtdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPlxuIikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ2VuZCcsICd7bmFtZXNwYWNlfWVsZW1lbnQnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGVsZW1lbnQ+dGV4dDwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbXB0eS1lbGVtZW50Lz5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbCisgICAgICAgICAgICAoJ2VuZCcsICd7bmFtZXNwYWNlfWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnZW5kJywgJ3tuYW1lc3BhY2V9ZW1wdHktZWxlbWVudCcpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ3tuYW1lc3BhY2V9cm9vdCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9uc19ldmVudHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQtbnMnLCAnZW5kLW5zJykpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPCEtLSBjb21tZW50IC0tPlxuIikKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8cm9vdCB4bWxucz0nbmFtZXNwYWNlJz5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBsaXN0KHBhcnNlci5yZWFkX2V2ZW50cygpKSwKKyAgICAgICAgICAgIFsoJ3N0YXJ0LW5zJywgKCcnLCAnbmFtZXNwYWNlJykpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZWxlbWVudCBrZXk9J3ZhbHVlJz50ZXh0PC9lbGVtZW50IikKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50PnRleHQ8L2VsZW1lbnQ+dGFpbFxuIikKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8ZW1wdHktZWxlbWVudC8+XG4iKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGlzdChwYXJzZXIucmVhZF9ldmVudHMoKSksIFsoJ2VuZC1ucycsIE5vbmUpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmNsb3NlKCkpCisKKyAgICBkZWYgdGVzdF9ldmVudHMoc2VsZik6CisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgpKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxyb290Lz5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKworICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKGV2ZW50cz0oJ3N0YXJ0JywgJ2VuZCcpKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwhLS0gY29tbWVudCAtLT5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8cm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdyb290JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnZW5kJywgJ2VsZW1lbnQnKV0pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLAorICAgICAgICAgICAgICAgICAgICI8ZWxlbWVudCB4bWxucz0nZm9vJz50ZXh0PGVtcHR5LWVsZW1lbnQvPjwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWworICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAne2Zvb31lbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICAoJ2VuZCcsICd7Zm9vfWVtcHR5LWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnZW5kJywgJ3tmb299ZWxlbWVudCcpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8L3Jvb3Q+IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUocGFyc2VyLmNsb3NlKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdlbmQnLCAncm9vdCcpXSkKKworICAgICAgICBwYXJzZXIgPSBFVC5YTUxQdWxsUGFyc2VyKGV2ZW50cz0oJ3N0YXJ0JywpKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwhLS0gY29tbWVudCAtLT5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI8cm9vdD5cbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0X2V2ZW50X3RhZ3MocGFyc2VyLCBbKCdzdGFydCcsICdyb290JyldKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxlbGVtZW50IGtleT0ndmFsdWUnPnRleHQ8L2VsZW1lbnQiKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZWxlbWVudCcpXSkKKyAgICAgICAgc2VsZi5fZmVlZChwYXJzZXIsICI+XG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgW10pCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLAorICAgICAgICAgICAgICAgICAgICI8ZWxlbWVudCB4bWxucz0nZm9vJz50ZXh0PGVtcHR5LWVsZW1lbnQvPjwvZWxlbWVudD50YWlsXG4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWworICAgICAgICAgICAgKCdzdGFydCcsICd7Zm9vfWVsZW1lbnQnKSwKKyAgICAgICAgICAgICgnc3RhcnQnLCAne2Zvb31lbXB0eS1lbGVtZW50JyksCisgICAgICAgICAgICBdKQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjwvcm9vdD4iKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZShwYXJzZXIuY2xvc2UoKSkKKworICAgIGRlZiB0ZXN0X2V2ZW50c19zZXF1ZW5jZShzZWxmKToKKyAgICAgICAgIyBUZXN0IHRoYXQgZXZlbnRzIGNhbiBiZSBzb21lIHNlcXVlbmNlIHRoYXQncyBub3QganVzdCBhIHR1cGxlIG9yIGxpc3QKKyAgICAgICAgZXZlbnRzZXQgPSB7J2VuZCcsICdzdGFydCd9CisgICAgICAgIHBhcnNlciA9IEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPWV2ZW50c2V0KQorICAgICAgICBzZWxmLl9mZWVkKHBhcnNlciwgIjxmb28+YmFyPC9mb28+IikKKyAgICAgICAgc2VsZi5hc3NlcnRfZXZlbnRfdGFncyhwYXJzZXIsIFsoJ3N0YXJ0JywgJ2ZvbycpLCAoJ2VuZCcsICdmb28nKV0pCisKKyAgICAgICAgY2xhc3MgRHVtbXlJdGVyOgorICAgICAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHNlbGYuZXZlbnRzID0gaXRlcihbJ3N0YXJ0JywgJ2VuZCcsICdzdGFydC1ucyddKQorICAgICAgICAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5leHQoc2VsZi5ldmVudHMpCisKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUHVsbFBhcnNlcihldmVudHM9RHVtbXlJdGVyKCkpCisgICAgICAgIHNlbGYuX2ZlZWQocGFyc2VyLCAiPGZvbz5iYXI8L2Zvbz4iKQorICAgICAgICBzZWxmLmFzc2VydF9ldmVudF90YWdzKHBhcnNlciwgWygnc3RhcnQnLCAnZm9vJyksICgnZW5kJywgJ2ZvbycpXSkKKworCisgICAgZGVmIHRlc3RfdW5rbm93bl9ldmVudChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIEVULlhNTFB1bGxQYXJzZXIoZXZlbnRzPSgnc3RhcnQnLCAnZW5kJywgJ2JvZ3VzJykpCisKKwogIwogIyB4aW5jbHVkZSB0ZXN0cyAoc2FtcGxlcyBmcm9tIGFwcGVuZGl4IEMgb2YgdGhlIHhpbmNsdWRlIHNwZWNpZmljYXRpb24pCiAKQEAgLTEzMDUsNyArMTUwNCw3IEBACiAgICAgICAgICMgRG9uJ3QgY3Jhc2ggd2hlbiB1c2luZyBjdXN0b20gZW50aXRpZXMuCiAKICAgICAgICAgRU5USVRJRVMgPSB7J3JzcXVvJzogJ1x1MjAxOScsICdsc3F1byc6ICdcdTIwMTgnfQotICAgICAgICBwYXJzZXIgPSBFVC5YTUxUcmVlQnVpbGRlcigpCisgICAgICAgIHBhcnNlciA9IEVULlhNTFBhcnNlcigpCiAgICAgICAgIHBhcnNlci5lbnRpdHkudXBkYXRlKEVOVElUSUVTKQogICAgICAgICBwYXJzZXIuZmVlZCgiIiI8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPCFET0NUWVBFIHBhdGVudC1hcHBsaWNhdGlvbi1wdWJsaWNhdGlvbiBTWVNURU0gInBhcC12MTUtMjAwMS0wMS0zMS5kdGQiIFtdPgpAQCAtMTUzMiwzMyArMTczMSwxNTYgQEAKIAogICAgIGRlZiB0ZXN0X3BpY2tsZShzZWxmKToKICAgICAgICAgIyBpc3N1ZSAjMTYwNzY6IHRoZSBDIGltcGxlbWVudGF0aW9uIHdhc24ndCBwaWNrbGVhYmxlLgotICAgICAgICBmb3IgZHVtcGVyLCBsb2FkZXIgaW4gcHJvZHVjdChzZWxmLm1vZHVsZXMsIHJlcGVhdD0yKToKLSAgICAgICAgICAgIGUgPSBkdW1wZXIuRWxlbWVudCgnZm9vJywgYmFyPTQyKQotICAgICAgICAgICAgZS50ZXh0ID0gInRleHQgZ29lcyBoZXJlIgotICAgICAgICAgICAgZS50YWlsID0gIm9wcG9zaXRlIG9mIGhlYWQiCi0gICAgICAgICAgICBkdW1wZXIuU3ViRWxlbWVudChlLCAnY2hpbGQnKS5hcHBlbmQoZHVtcGVyLkVsZW1lbnQoJ2dyYW5kY2hpbGQnKSkKLSAgICAgICAgICAgIGUuYXBwZW5kKGR1bXBlci5FbGVtZW50KCdjaGlsZCcpKQotICAgICAgICAgICAgZS5maW5kYWxsKCcuLy9ncmFuZGNoaWxkJylbMF0uc2V0KCdhdHRyJywgJ290aGVyIHZhbHVlJykKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKDIsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICBmb3IgZHVtcGVyLCBsb2FkZXIgaW4gcHJvZHVjdChzZWxmLm1vZHVsZXMsIHJlcGVhdD0yKToKKyAgICAgICAgICAgICAgICBlID0gZHVtcGVyLkVsZW1lbnQoJ2ZvbycsIGJhcj00MikKKyAgICAgICAgICAgICAgICBlLnRleHQgPSAidGV4dCBnb2VzIGhlcmUiCisgICAgICAgICAgICAgICAgZS50YWlsID0gIm9wcG9zaXRlIG9mIGhlYWQiCisgICAgICAgICAgICAgICAgZHVtcGVyLlN1YkVsZW1lbnQoZSwgJ2NoaWxkJykuYXBwZW5kKGR1bXBlci5FbGVtZW50KCdncmFuZGNoaWxkJykpCisgICAgICAgICAgICAgICAgZS5hcHBlbmQoZHVtcGVyLkVsZW1lbnQoJ2NoaWxkJykpCisgICAgICAgICAgICAgICAgZS5maW5kYWxsKCcuLy9ncmFuZGNoaWxkJylbMF0uc2V0KCdhdHRyJywgJ290aGVyIHZhbHVlJykKIAotICAgICAgICAgICAgZTIgPSBzZWxmLnBpY2tsZVJvdW5kVHJpcChlLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVtcGVyLCBsb2FkZXIpCisgICAgICAgICAgICAgICAgZTIgPSBzZWxmLnBpY2tsZVJvdW5kVHJpcChlLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBlciwgbG9hZGVyLCBwcm90bykKIAotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMi50YWcsICdmb28nKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMi5hdHRyaWJbJ2JhciddLCA0MikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGUyKSwgMikKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxFbGVtZW50cyhlLCBlMikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUyLnRhZywgJ2ZvbycpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMi5hdHRyaWJbJ2JhciddLCA0MikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihlMiksIDIpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbEVsZW1lbnRzKGUsIGUyKQogCiAgICAgZGVmIHRlc3RfcGlja2xlX2lzc3VlMTg5OTcoc2VsZik6Ci0gICAgICAgIGZvciBkdW1wZXIsIGxvYWRlciBpbiBwcm9kdWN0KHNlbGYubW9kdWxlcywgcmVwZWF0PTIpOgotICAgICAgICAgICAgWE1MVEVYVCA9ICIiIjw/eG1sIHZlcnNpb249IjEuMCI/PgotICAgICAgICAgICAgICAgIDxncm91cD48ZG9ncz40PC9kb2dzPgotICAgICAgICAgICAgICAgIDwvZ3JvdXA+IiIiCi0gICAgICAgICAgICBlMSA9IGR1bXBlci5mcm9tc3RyaW5nKFhNTFRFWFQpCi0gICAgICAgICAgICBpZiBoYXNhdHRyKGUxLCAnX19nZXRzdGF0ZV9fJyk6Ci0gICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlMS5fX2dldHN0YXRlX18oKVsndGFnJ10sICdncm91cCcpCi0gICAgICAgICAgICBlMiA9IHNlbGYucGlja2xlUm91bmRUcmlwKGUxLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJywgZHVtcGVyLCBsb2FkZXIpCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUyLnRhZywgJ2dyb3VwJykKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZTJbMF0udGFnLCAnZG9ncycpCisgICAgICAgIGZvciBwcm90byBpbiByYW5nZSgyLCBwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgZm9yIGR1bXBlciwgbG9hZGVyIGluIHByb2R1Y3Qoc2VsZi5tb2R1bGVzLCByZXBlYXQ9Mik6CisgICAgICAgICAgICAgICAgWE1MVEVYVCA9ICIiIjw/eG1sIHZlcnNpb249IjEuMCI/PgorICAgICAgICAgICAgICAgICAgICA8Z3JvdXA+PGRvZ3M+NDwvZG9ncz4KKyAgICAgICAgICAgICAgICAgICAgPC9ncm91cD4iIiIKKyAgICAgICAgICAgICAgICBlMSA9IGR1bXBlci5mcm9tc3RyaW5nKFhNTFRFWFQpCisgICAgICAgICAgICAgICAgaWYgaGFzYXR0cihlMSwgJ19fZ2V0c3RhdGVfXycpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUxLl9fZ2V0c3RhdGVfXygpWyd0YWcnXSwgJ2dyb3VwJykKKyAgICAgICAgICAgICAgICBlMiA9IHNlbGYucGlja2xlUm91bmRUcmlwKGUxLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1bXBlciwgbG9hZGVyLCBwcm90bykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUyLnRhZywgJ2dyb3VwJykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGUyWzBdLnRhZywgJ2RvZ3MnKQorCisKK2NsYXNzIEJhZEVsZW1lbnRUZXN0KEVsZW1lbnRUZXN0Q2FzZSwgdW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2V4dGVuZF9tdXRhYmxlX2xpc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX2NsYXNzX18oc2VsZik6CisgICAgICAgICAgICAgICAgTFs6XSA9IFtFVC5FbGVtZW50KCdiYXonKV0KKyAgICAgICAgICAgICAgICByZXR1cm4gRVQuRWxlbWVudAorICAgICAgICBMID0gW1goKV0KKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGUuZXh0ZW5kKEwpCisgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgY2xhc3MgWShYLCBFVC5FbGVtZW50KToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgTCA9IFtZKCd4JyldCisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICBlLmV4dGVuZChMKQorCisgICAgZGVmIHRlc3RfZXh0ZW5kX211dGFibGVfbGlzdDIoc2VsZik6CisgICAgICAgIGNsYXNzIFg6CisgICAgICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgICAgIGRlZiBfX2NsYXNzX18oc2VsZik6CisgICAgICAgICAgICAgICAgZGVsIExbOl0KKyAgICAgICAgICAgICAgICByZXR1cm4gRVQuRWxlbWVudAorICAgICAgICBMID0gW1goKSwgRVQuRWxlbWVudCgnYmF6JyldCisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlLmV4dGVuZChMKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIGNsYXNzIFkoWCwgRVQuRWxlbWVudCk6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIEwgPSBbWSgnYmFyJyksIEVULkVsZW1lbnQoJ2JheicpXQorICAgICAgICBlID0gRVQuRWxlbWVudCgnZm9vJykKKyAgICAgICAgZS5leHRlbmQoTCkKKworICAgIGRlZiB0ZXN0X3JlbW92ZV93aXRoX211dGF0aW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBYKEVULkVsZW1lbnQpOgorICAgICAgICAgICAgZGVmIF9fZXFfXyhzZWxmLCBvKToKKyAgICAgICAgICAgICAgICBkZWwgZVs6XQorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBlID0gRVQuRWxlbWVudCgnZm9vJykKKyAgICAgICAgZS5leHRlbmQoW1goJ2JhcicpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZS5yZW1vdmUsIEVULkVsZW1lbnQoJ2JheicpKQorCisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICBlLmV4dGVuZChbRVQuRWxlbWVudCgnYmFyJyldKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBlLnJlbW92ZSwgWCgnYmF6JykpCisKKworY2xhc3MgTXV0YXRpbmdFbGVtZW50UGF0aChzdHIpOgorICAgIGRlZiBfX25ld19fKGNscywgZWxlbSwgKmFyZ3MpOgorICAgICAgICBzZWxmID0gc3RyLl9fbmV3X18oY2xzLCAqYXJncykKKyAgICAgICAgc2VsZi5lbGVtID0gZWxlbQorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBfX2VxX18oc2VsZiwgbyk6CisgICAgICAgIGRlbCBzZWxmLmVsZW1bOl0KKyAgICAgICAgcmV0dXJuIFRydWUKK011dGF0aW5nRWxlbWVudFBhdGguX19oYXNoX18gPSBzdHIuX19oYXNoX18KKworY2xhc3MgQmFkRWxlbWVudFBhdGgoc3RyKToKKyAgICBkZWYgX19lcV9fKHNlbGYsIG8pOgorICAgICAgICByYWlzZSAxLzAKK0JhZEVsZW1lbnRQYXRoLl9faGFzaF9fID0gc3RyLl9faGFzaF9fCisKK2NsYXNzIEJhZEVsZW1lbnRQYXRoVGVzdChFbGVtZW50VGVzdENhc2UsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBmcm9tIHhtbC5ldHJlZSBpbXBvcnQgRWxlbWVudFBhdGgKKyAgICAgICAgc2VsZi5wYXRoX2NhY2hlID0gRWxlbWVudFBhdGguX2NhY2hlCisgICAgICAgIEVsZW1lbnRQYXRoLl9jYWNoZSA9IHt9CisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIGZyb20geG1sLmV0cmVlIGltcG9ydCBFbGVtZW50UGF0aAorICAgICAgICBFbGVtZW50UGF0aC5fY2FjaGUgPSBzZWxmLnBhdGhfY2FjaGUKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCisKKyAgICBkZWYgdGVzdF9maW5kX3dpdGhfbXV0YXRpbmcoc2VsZik6CisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICBlLmV4dGVuZChbRVQuRWxlbWVudCgnYmFyJyldKQorICAgICAgICBlLmZpbmQoTXV0YXRpbmdFbGVtZW50UGF0aChlLCAneCcpKQorCisgICAgZGVmIHRlc3RfZmluZF93aXRoX2Vycm9yKHNlbGYpOgorICAgICAgICBlID0gRVQuRWxlbWVudCgnZm9vJykKKyAgICAgICAgZS5leHRlbmQoW0VULkVsZW1lbnQoJ2JhcicpXSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgZS5maW5kKEJhZEVsZW1lbnRQYXRoKCd4JykpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2ZpbmR0ZXh0X3dpdGhfbXV0YXRpbmcoc2VsZik6CisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICBlLmV4dGVuZChbRVQuRWxlbWVudCgnYmFyJyldKQorICAgICAgICBlLmZpbmR0ZXh0KE11dGF0aW5nRWxlbWVudFBhdGgoZSwgJ3gnKSkKKworICAgIGRlZiB0ZXN0X2ZpbmR0ZXh0X3dpdGhfZXJyb3Ioc2VsZik6CisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICBlLmV4dGVuZChbRVQuRWxlbWVudCgnYmFyJyldKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlLmZpbmR0ZXh0KEJhZEVsZW1lbnRQYXRoKCd4JykpCisgICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0X2ZpbmRhbGxfd2l0aF9tdXRhdGluZyhzZWxmKToKKyAgICAgICAgZSA9IEVULkVsZW1lbnQoJ2ZvbycpCisgICAgICAgIGUuZXh0ZW5kKFtFVC5FbGVtZW50KCdiYXInKV0pCisgICAgICAgIGUuZmluZGFsbChNdXRhdGluZ0VsZW1lbnRQYXRoKGUsICd4JykpCisKKyAgICBkZWYgdGVzdF9maW5kYWxsX3dpdGhfZXJyb3Ioc2VsZik6CisgICAgICAgIGUgPSBFVC5FbGVtZW50KCdmb28nKQorICAgICAgICBlLmV4dGVuZChbRVQuRWxlbWVudCgnYmFyJyldKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBlLmZpbmRhbGwoQmFkRWxlbWVudFBhdGgoJ3gnKSkKKyAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgorICAgICAgICAgICAgcGFzcwogCiAKIGNsYXNzIEVsZW1lbnRUcmVlVHlwZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTY0Myw2ICsxOTY1LDExIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZS5maW5kKCcuL3RhZ1tsYXN0KCktMV0nKS5hdHRyaWJbJ2NsYXNzJ10sICdjJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlLmZpbmQoJy4vdGFnW2xhc3QoKS0yXScpLmF0dHJpYlsnY2xhc3MnXSwgJ2InKQogCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoU3ludGF4RXJyb3IsICdYUGF0aCcsIGUuZmluZCwgJy4vdGFnWzBdJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbLTFdJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbbGFzdCgpLTBdJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXNSZWdleChTeW50YXhFcnJvciwgJ1hQYXRoJywgZS5maW5kLCAnLi90YWdbbGFzdCgpKzFdJykKKwogICAgIGRlZiB0ZXN0X2ZpbmRhbGwoc2VsZik6CiAgICAgICAgIGUgPSBFVC5YTUwoU0FNUExFX1hNTCkKICAgICAgICAgZVsyXSA9IEVULlhNTChTQU1QTEVfU0VDVElPTikKQEAgLTE4MDgsNiArMjEzNSwxOSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2lsaXN0KGRvYyksIGFsbF90YWdzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2lsaXN0KGRvYywgJyonKSwgYWxsX3RhZ3MpCiAKKyAgICBkZWYgdGVzdF9jb3B5KHNlbGYpOgorICAgICAgICBhID0gRVQuRWxlbWVudCgnYScpCisgICAgICAgIGl0ID0gYS5pdGVyKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgY29weS5jb3B5KGl0KQorCisgICAgZGVmIHRlc3RfcGlja2xlKHNlbGYpOgorICAgICAgICBhID0gRVQuRWxlbWVudCgnYScpCisgICAgICAgIGl0ID0gYS5pdGVyKCkKKyAgICAgICAgZm9yIHByb3RvIGluIHJhbmdlKHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MICsgMSk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChUeXBlRXJyb3IsIHBpY2tsZS5QaWNrbGluZ0Vycm9yKSk6CisgICAgICAgICAgICAgICAgcGlja2xlLmR1bXBzKGl0LCBwcm90bykKKwogCiBjbGFzcyBUcmVlQnVpbGRlclRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIHNhbXBsZTEgPSAoJzwhRE9DVFlQRSBodG1sIFBVQkxJQycKQEAgLTE5MDIsNyArMjI0Miw3IEBACiAgICAgICAgICMgTWltaWNrIFNpbXBsZVRBTCdzIGJlaGF2aW91ciAoaXNzdWUgIzE2MDg5KTogYm90aCB2ZXJzaW9ucyBvZgogICAgICAgICAjIFRyZWVCdWlsZGVyIHNob3VsZCBiZSBhYmxlIHRvIGNvcGUgd2l0aCBhIHN1YmNsYXNzIG9mIHRoZQogICAgICAgICAjIHB1cmUgUHl0aG9uIEVsZW1lbnQgY2xhc3MuCi0gICAgICAgIGJhc2UgPSBFVC5fRWxlbWVudAorICAgICAgICBiYXNlID0gRVQuX0VsZW1lbnRfUHkKICAgICAgICAgIyBOb3QgZnJvbSBhIEMgZXh0ZW5zaW9uCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYmFzZS5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKICAgICAgICAgIyBGb3JjZSBzb21lIG11bHRpcGxlIGluaGVyaXRhbmNlIHdpdGggYSBDIGNsYXNzIHRvIG1ha2UgdGhpbmdzCkBAIC0xOTY0LDYgKzIzMDQsMjAgQEAKICAgICAgICAgcGFyc2VyLmZlZWQoc2VsZi5zYW1wbGUxKQogICAgICAgICBzZWxmLl9jaGVja19zYW1wbGVfZWxlbWVudChwYXJzZXIuY2xvc2UoKSkKIAorICAgIGRlZiB0ZXN0X2RvY3R5cGVfd2FybmluZyhzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRVQuWE1MUGFyc2VyKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zKERlcHJlY2F0aW9uV2FybmluZyk6CisgICAgICAgICAgICBwYXJzZXIuZG9jdHlwZSgnaHRtbCcsICctLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTicsCisgICAgICAgICAgICAgICAgJ2h0dHA6Ly93d3cudzMub3JnL1RSL3hodG1sMS9EVEQveGh0bWwxLXRyYW5zaXRpb25hbC5kdGQnKQorICAgICAgICBwYXJzZXIuZmVlZCgnPGh0bWwvPicpCisgICAgICAgIHBhcnNlci5jbG9zZSgpCisKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIHBhcnNlciA9IEVULlhNTFBhcnNlcigpCisgICAgICAgICAgICBwYXJzZXIuZmVlZChzZWxmLnNhbXBsZTIpCisgICAgICAgICAgICBwYXJzZXIuY2xvc2UoKQorCiAgICAgZGVmIHRlc3Rfc3ViY2xhc3NfZG9jdHlwZShzZWxmKToKICAgICAgICAgX2RvY3R5cGUgPSBOb25lCiAgICAgICAgIGNsYXNzIE15UGFyc2VyV2l0aERvY3R5cGUoRVQuWE1MUGFyc2VyKToKQEAgLTE5NzksNiArMjMzMywzMiBAQAogICAgICAgICAgICAgKCdodG1sJywgJy0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOJywKICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCcpKQogCisgICAgICAgIF9kb2N0eXBlID0gX2RvY3R5cGUyID0gTm9uZQorICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6CisgICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoJ2Vycm9yJywgRGVwcmVjYXRpb25XYXJuaW5nKQorICAgICAgICAgICAgY2xhc3MgRG9jdHlwZVBhcnNlcjoKKyAgICAgICAgICAgICAgICBkZWYgZG9jdHlwZShzZWxmLCBuYW1lLCBwdWJpZCwgc3lzdGVtKToKKyAgICAgICAgICAgICAgICAgICAgbm9ubG9jYWwgX2RvY3R5cGUyCisgICAgICAgICAgICAgICAgICAgIF9kb2N0eXBlMiA9IChuYW1lLCBwdWJpZCwgc3lzdGVtKQorCisgICAgICAgICAgICBwYXJzZXIgPSBNeVBhcnNlcldpdGhEb2N0eXBlKHRhcmdldD1Eb2N0eXBlUGFyc2VyKCkpCisgICAgICAgICAgICBwYXJzZXIuZmVlZChzZWxmLnNhbXBsZTIpCisgICAgICAgICAgICBwYXJzZXIuY2xvc2UoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoX2RvY3R5cGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKF9kb2N0eXBlMiwKKyAgICAgICAgICAgICAgICAoJ2h0bWwnLCAnLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4nLAorICAgICAgICAgICAgICAgICAnaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCcpKQorCisgICAgZGVmIHRlc3RfaW5oZXJpdGVkX2RvY3R5cGUoc2VsZik6CisgICAgICAgICcnJ0Vuc3VyZSB0aGF0IG9yZGluYXJ5IHVzYWdlIGlzIG5vdCBkZXByZWNhdGVkIChJc3N1ZSAxOTE3NiknJycKKyAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOgorICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCdlcnJvcicsIERlcHJlY2F0aW9uV2FybmluZykKKyAgICAgICAgICAgIGNsYXNzIE15UGFyc2VyV2l0aG91dERvY3R5cGUoRVQuWE1MUGFyc2VyKToKKyAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICBwYXJzZXIgPSBNeVBhcnNlcldpdGhvdXREb2N0eXBlKCkKKyAgICAgICAgICAgIHBhcnNlci5mZWVkKHNlbGYuc2FtcGxlMikKKyAgICAgICAgICAgIHBhcnNlci5jbG9zZSgpCisKICAgICBkZWYgdGVzdF9wYXJzZV9zdHJpbmcoc2VsZik6CiAgICAgICAgIHBhcnNlciA9IEVULlhNTFBhcnNlcih0YXJnZXQ9RVQuVHJlZUJ1aWxkZXIoKSkKICAgICAgICAgcGFyc2VyLmZlZWQoc2VsZi5zYW1wbGUzKQpAQCAtMjAyMiw2ICsyNDAyLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChlWy0yXS50YWcsICdhOCcpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBlWzEyXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgbGFtYmRhOiBlWy0xMl0pCiAKICAgICBkZWYgdGVzdF9nZXRzbGljZV9yYW5nZShzZWxmKToKICAgICAgICAgZSA9IHNlbGYuX21ha2VfZWxlbV93aXRoX2NoaWxkcmVuKDYpCkBAIC0yMDQwLDEyICsyNDIxLDE3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZWxlbV90YWdzKGVbOjozXSksIFsnYTAnLCAnYTMnLCAnYTYnLCAnYTknXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbGVtX3RhZ3MoZVs6OjhdKSwgWydhMCcsICdhOCddKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VsZW1fdGFncyhlWzE6OjhdKSwgWydhMScsICdhOSddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX2VsZW1fdGFncyhlWzM6OnN5cy5tYXhzaXplXSksIFsnYTMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbGVtX3RhZ3MoZVszOjpzeXMubWF4c2l6ZTw8NjRdKSwgWydhMyddKQogCiAgICAgZGVmIHRlc3RfZ2V0c2xpY2VfbmVnYXRpdmVfc3RlcHMoc2VsZik6CiAgICAgICAgIGUgPSBzZWxmLl9tYWtlX2VsZW1fd2l0aF9jaGlsZHJlbig0KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZWxlbV90YWdzKGVbOjotMV0pLCBbJ2EzJywgJ2EyJywgJ2ExJywgJ2EwJ10pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZWxlbV90YWdzKGVbOjotMl0pLCBbJ2EzJywgJ2ExJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZWxlbV90YWdzKGVbMzo6LXN5cy5tYXhzaXplXSksIFsnYTMnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9lbGVtX3RhZ3MoZVszOjotc3lzLm1heHNpemUtMV0pLCBbJ2EzJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fZWxlbV90YWdzKGVbMzo6LXN5cy5tYXhzaXplPDw2NF0pLCBbJ2EzJ10pCiAKICAgICBkZWYgdGVzdF9kZWxzbGljZShzZWxmKToKICAgICAgICAgZSA9IHNlbGYuX21ha2VfZWxlbV93aXRoX2NoaWxkcmVuKDQpCkBAIC0yMDcyLDYgKzI0NTgsNzUgQEAKICAgICAgICAgZGVsIGVbOjoyXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMSddKQogCisgICAgZGVmIHRlc3Rfc2V0c2xpY2Vfc2luZ2xlX2luZGV4KHNlbGYpOgorICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNCkKKyAgICAgICAgZVsxXSA9IEVULkVsZW1lbnQoJ2InKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdiJywgJ2EyJywgJ2EzJ10pCisKKyAgICAgICAgZVstMl0gPSBFVC5FbGVtZW50KCdjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYicsICdjJywgJ2EzJ10pCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIGVbNV0gPSBFVC5FbGVtZW50KCdkJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yKToKKyAgICAgICAgICAgIGVbLTVdID0gRVQuRWxlbWVudCgnZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2EwJywgJ2InLCAnYycsICdhMyddKQorCisgICAgZGVmIHRlc3Rfc2V0c2xpY2VfcmFuZ2Uoc2VsZik6CisgICAgICAgIGUgPSBzZWxmLl9tYWtlX2VsZW1fd2l0aF9jaGlsZHJlbig0KQorICAgICAgICBlWzE6M10gPSBbRVQuRWxlbWVudCgnYiVzJyAlIGkpIGZvciBpIGluIHJhbmdlKDIpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdiMCcsICdiMScsICdhMyddKQorCisgICAgICAgIGUgPSBzZWxmLl9tYWtlX2VsZW1fd2l0aF9jaGlsZHJlbig0KQorICAgICAgICBlWzE6M10gPSBbRVQuRWxlbWVudCgnYicpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdiJywgJ2EzJ10pCisKKyAgICAgICAgZSA9IHNlbGYuX21ha2VfZWxlbV93aXRoX2NoaWxkcmVuKDQpCisgICAgICAgIGVbMTozXSA9IFtFVC5FbGVtZW50KCdiJXMnICUgaSkgZm9yIGkgaW4gcmFuZ2UoMyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2EwJywgJ2IwJywgJ2IxJywgJ2IyJywgJ2EzJ10pCisKKyAgICBkZWYgdGVzdF9zZXRzbGljZV9zdGVwcyhzZWxmKToKKyAgICAgICAgZSA9IHNlbGYuX21ha2VfZWxlbV93aXRoX2NoaWxkcmVuKDYpCisgICAgICAgIGVbMTo1OjJdID0gW0VULkVsZW1lbnQoJ2IlcycgJSBpKSBmb3IgaSBpbiByYW5nZSgyKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYjAnLCAnYTInLCAnYjEnLCAnYTQnLCAnYTUnXSkKKworICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGVbMTo1OjJdID0gW0VULkVsZW1lbnQoJ2InKV0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGVbMTo1OjJdID0gW0VULkVsZW1lbnQoJ2IlcycgJSBpKSBmb3IgaSBpbiByYW5nZSgzKV0KKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGVbMTo1OjJdID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYTEnLCAnYTInLCAnYTMnLCAnYTQnLCAnYTUnXSkKKworICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNCkKKyAgICAgICAgZVsxOjpzeXMubWF4c2l6ZV0gPSBbRVQuRWxlbWVudCgnYicpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuX3N1YmVsZW1fdGFncyhlKSwgWydhMCcsICdiJywgJ2EyJywgJ2EzJ10pCisgICAgICAgIGVbMTo6c3lzLm1heHNpemU8PDY0XSA9IFtFVC5FbGVtZW50KCdjJyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2EwJywgJ2MnLCAnYTInLCAnYTMnXSkKKworICAgIGRlZiB0ZXN0X3NldHNsaWNlX25lZ2F0aXZlX3N0ZXBzKHNlbGYpOgorICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNCkKKyAgICAgICAgZVsyOjA6LTFdID0gW0VULkVsZW1lbnQoJ2IlcycgJSBpKSBmb3IgaSBpbiByYW5nZSgyKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYjEnLCAnYjAnLCAnYTMnXSkKKworICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yKToKKyAgICAgICAgICAgIGVbMjowOi0xXSA9IFtFVC5FbGVtZW50KCdiJyldCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBlWzI6MDotMV0gPSBbRVQuRWxlbWVudCgnYiVzJyAlIGkpIGZvciBpIGluIHJhbmdlKDMpXQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgZVsyOjA6LTFdID0gW10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYTEnLCAnYTInLCAnYTMnXSkKKworICAgICAgICBlID0gc2VsZi5fbWFrZV9lbGVtX3dpdGhfY2hpbGRyZW4oNCkKKyAgICAgICAgZVsxOjotc3lzLm1heHNpemVdID0gW0VULkVsZW1lbnQoJ2InKV0KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9zdWJlbGVtX3RhZ3MoZSksIFsnYTAnLCAnYicsICdhMicsICdhMyddKQorICAgICAgICBlWzE6Oi1zeXMubWF4c2l6ZS0xXSA9IFtFVC5FbGVtZW50KCdjJyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2EwJywgJ2MnLCAnYTInLCAnYTMnXSkKKyAgICAgICAgZVsxOjotc3lzLm1heHNpemU8PDY0XSA9IFtFVC5FbGVtZW50KCdkJyldCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5fc3ViZWxlbV90YWdzKGUpLCBbJ2EwJywgJ2QnLCAnYTInLCAnYTMnXSkKKwogCiBjbGFzcyBJT1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKQEAgLTIwODIsMTQgKzI1MzcsMjEgQEAKICAgICAgICAgZWxlbSA9IEVULkVsZW1lbnQoInRhZyIpCiAgICAgICAgIGVsZW0udGV4dCA9ICJhYmMiCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VyaWFsaXplKGVsZW0pLCAnPHRhZz5hYmM8L3RhZz4nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz0idXRmLTgiKSwKLSAgICAgICAgICAgICAgICBiJzx0YWc+YWJjPC90YWc+JykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9InVzLWFzY2lpIiksCi0gICAgICAgICAgICAgICAgYic8dGFnPmFiYzwvdGFnPicpCisgICAgICAgIGZvciBlbmMgaW4gKCJ1dGYtOCIsICJ1cy1hc2NpaSIpOgorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz1lbmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgYic8dGFnPmFiYzwvdGFnPicpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJpYWxpemUoZWxlbSwgZW5jb2Rpbmc9ZW5jLnVwcGVyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgYic8dGFnPmFiYzwvdGFnPicpCiAgICAgICAgIGZvciBlbmMgaW4gKCJpc28tODg1OS0xIiwgInV0Zi0xNiIsICJ1dGYtMzIiKToKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VyaWFsaXplKGVsZW0sIGVuY29kaW5nPWVuYyksCi0gICAgICAgICAgICAgICAgICAgICgiPD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nJXMnPz5cbiIKLSAgICAgICAgICAgICAgICAgICAgICI8dGFnPmFiYzwvdGFnPiIgJSBlbmMpLmVuY29kZShlbmMpKQorICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZW5jKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz1lbmMpLAorICAgICAgICAgICAgICAgICAgICAgICAgKCI8P3htbCB2ZXJzaW9uPScxLjAnIGVuY29kaW5nPSclcyc/PlxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICI8dGFnPmFiYzwvdGFnPiIgJSBlbmMpLmVuY29kZShlbmMpKQorICAgICAgICAgICAgICAgIHVwcGVyID0gZW5jLnVwcGVyKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlcmlhbGl6ZShlbGVtLCBlbmNvZGluZz11cHBlciksCisgICAgICAgICAgICAgICAgICAgICAgICAoIjw/eG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9JyVzJz8+XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIjx0YWc+YWJjPC90YWc+IiAlIHVwcGVyKS5lbmNvZGUoZW5jKSkKIAogICAgICAgICBlbGVtID0gRVQuRWxlbWVudCgidGFnIikKICAgICAgICAgZWxlbS50ZXh0ID0gIjwmXCJcJz4iCkBAIC0yMjYxLDYgKzI3MjMsMTggQEAKICAgICAgICAgICAgIEVULnRvc3RyaW5nKHJvb3QsICd1dGYtMTYnKSwKICAgICAgICAgICAgIGInJy5qb2luKEVULnRvc3RyaW5nbGlzdChyb290LCAndXRmLTE2JykpKQogCisgICAgZGVmIHRlc3Rfc2hvcnRfZW1wdHlfZWxlbWVudHMoc2VsZik6CisgICAgICAgIHJvb3QgPSBFVC5mcm9tc3RyaW5nKCc8dGFnPmE8eCAvPmI8eT48L3k+YzwvdGFnPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBFVC50b3N0cmluZyhyb290LCAndW5pY29kZScpLAorICAgICAgICAgICAgJzx0YWc+YTx4IC8+Yjx5IC8+YzwvdGFnPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBFVC50b3N0cmluZyhyb290LCAndW5pY29kZScsIHNob3J0X2VtcHR5X2VsZW1lbnRzPVRydWUpLAorICAgICAgICAgICAgJzx0YWc+YTx4IC8+Yjx5IC8+YzwvdGFnPicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBFVC50b3N0cmluZyhyb290LCAndW5pY29kZScsIHNob3J0X2VtcHR5X2VsZW1lbnRzPUZhbHNlKSwKKyAgICAgICAgICAgICc8dGFnPmE8eD48L3g+Yjx5PjwveT5jPC90YWc+JykKKwogCiBjbGFzcyBQYXJzZUVycm9yVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgZGVmIHRlc3Rfc3ViY2xhc3Moc2VsZik6CkBAIC0yMzI2LDggKzI4MDAsMTEgQEAKIAogICAgICMgVGVzdCB0aGF0IHRoZSBDIGFjY2VsZXJhdG9yIHdhcyBub3QgaW1wb3J0ZWQgZm9yIHB5RVQKICAgICBkZWYgdGVzdF9jb3JyZWN0X2ltcG9ydF9weUVUKHNlbGYpOgotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHB5RVQuRWxlbWVudC5fX21vZHVsZV9fLCAneG1sLmV0cmVlLkVsZW1lbnRUcmVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChweUVULlN1YkVsZW1lbnQuX19tb2R1bGVfXywgJ3htbC5ldHJlZS5FbGVtZW50VHJlZScpCisgICAgICAgICMgVGhlIHR5cGUgb2YgbWV0aG9kcyBkZWZpbmVkIGluIFB5dGhvbiBjb2RlIGlzIHR5cGVzLkZ1bmN0aW9uVHlwZSwKKyAgICAgICAgIyB3aGlsZSB0aGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW5zaWRlIF9lbGVtZW50dHJlZSBpcworICAgICAgICAjIDxjbGFzcyAnd3JhcHBlcl9kZXNjcmlwdG9yJz4KKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHB5RVQuRWxlbWVudC5fX2luaXRfXywgdHlwZXMuRnVuY3Rpb25UeXBlKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UocHlFVC5YTUxQYXJzZXIuX19pbml0X18sIHR5cGVzLkZ1bmN0aW9uVHlwZSkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0yMzg4LDYgKzI4NjUsOCBAQAogICAgICAgICBNb2R1bGVUZXN0LAogICAgICAgICBFbGVtZW50U2xpY2luZ1Rlc3QsCiAgICAgICAgIEJhc2ljRWxlbWVudFRlc3QsCisgICAgICAgIEJhZEVsZW1lbnRUZXN0LAorICAgICAgICBCYWRFbGVtZW50UGF0aFRlc3QsCiAgICAgICAgIEVsZW1lbnRUcmVlVGVzdCwKICAgICAgICAgSU9UZXN0LAogICAgICAgICBQYXJzZUVycm9yVGVzdCwKQEAgLTIzOTcsNiArMjg3Niw3IEBACiAgICAgICAgIEVsZW1lbnRJdGVyVGVzdCwKICAgICAgICAgVHJlZUJ1aWxkZXJUZXN0LAogICAgICAgICBYTUxQYXJzZXJUZXN0LAorICAgICAgICBYTUxQdWxsUGFyc2VyVGVzdCwKICAgICAgICAgQnVnc1Rlc3QsCiAgICAgICAgIF0KIApkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1sX2V0cmVlX2MucHkKaW5kZXggZDA0YjdkYy4uNDA5ZWM2YSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxfZXRyZWVfYy5weQorKysgYi9MaWIvdGVzdC90ZXN0X3htbF9ldHJlZV9jLnB5CkBAIC0yLDYgKzIsNyBAQAogaW1wb3J0IHN5cywgc3RydWN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBpbXBvcnRfZnJlc2hfbW9kdWxlCitpbXBvcnQgdHlwZXMKIGltcG9ydCB1bml0dGVzdAogCiBjRVQgPSBpbXBvcnRfZnJlc2hfbW9kdWxlKCd4bWwuZXRyZWUuRWxlbWVudFRyZWUnLApAQCAtMjEsNiArMjIsMzggQEAKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIGRhdGEgPSBOb25lCiAKKyAgICBkZWYgdGVzdF9kZWxfYXR0cmlidXRlKHNlbGYpOgorICAgICAgICBlbGVtZW50ID0gY0VULkVsZW1lbnQoJ3RhZycpCisKKyAgICAgICAgZWxlbWVudC50YWcgPSAnVEFHJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBlbGVtZW50LnRhZworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsZW1lbnQudGFnLCAnVEFHJykKKworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yKToKKyAgICAgICAgICAgIGRlbCBlbGVtZW50LnRleHQKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUoZWxlbWVudC50ZXh0KQorICAgICAgICBlbGVtZW50LnRleHQgPSAnVEVYVCcKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgZWxlbWVudC50ZXh0CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC50ZXh0LCAnVEVYVCcpCisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICBkZWwgZWxlbWVudC50YWlsCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGVsZW1lbnQudGFpbCkKKyAgICAgICAgZWxlbWVudC50YWlsID0gJ1RBSUwnCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIGVsZW1lbnQudGFpbAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVsZW1lbnQudGFpbCwgJ1RBSUwnKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIGVsZW1lbnQuYXR0cmliCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC5hdHRyaWIsIHt9KQorICAgICAgICBlbGVtZW50LmF0dHJpYiA9IHsnQSc6ICdCJywgJ0MnOiAnRCd9CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IpOgorICAgICAgICAgICAgZGVsIGVsZW1lbnQuYXR0cmliCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZWxlbWVudC5hdHRyaWIsIHsnQSc6ICdCJywgJ0MnOiAnRCd9KQorCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGNFVCwgJ3JlcXVpcmVzIF9lbGVtZW50dHJlZScpCiBjbGFzcyBUZXN0QWxpYXNXb3JraW5nKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTMxLDE0ICs2NCwyMiBAQAogCiAKIEB1bml0dGVzdC5za2lwVW5sZXNzKGNFVCwgJ3JlcXVpcmVzIF9lbGVtZW50dHJlZScpCitAc3VwcG9ydC5jcHl0aG9uX29ubHkKIGNsYXNzIFRlc3RBY2NlbGVyYXRvckltcG9ydGVkKHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICAjIFRlc3QgdGhhdCB0aGUgQyBhY2NlbGVyYXRvciB3YXMgaW1wb3J0ZWQsIGFzIGV4cGVjdGVkCiAgICAgZGVmIHRlc3RfY29ycmVjdF9pbXBvcnRfY0VUKHNlbGYpOgorICAgICAgICAjIFN1YkVsZW1lbnQgaXMgYSBmdW5jdGlvbiBzbyBpdCByZXRhaW5zIF9lbGVtZW50dHJlZSBhcyBpdHMgbW9kdWxlLgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNFVC5TdWJFbGVtZW50Ll9fbW9kdWxlX18sICdfZWxlbWVudHRyZWUnKQogCiAgICAgZGVmIHRlc3RfY29ycmVjdF9pbXBvcnRfY0VUX2FsaWFzKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNFVF9hbGlhcy5TdWJFbGVtZW50Ll9fbW9kdWxlX18sICdfZWxlbWVudHRyZWUnKQogCisgICAgZGVmIHRlc3RfcGFyc2VyX2NvbWVzX2Zyb21fQyhzZWxmKToKKyAgICAgICAgIyBUaGUgdHlwZSBvZiBtZXRob2RzIGRlZmluZWQgaW4gUHl0aG9uIGNvZGUgaXMgdHlwZXMuRnVuY3Rpb25UeXBlLAorICAgICAgICAjIHdoaWxlIHRoZSB0eXBlIG9mIG1ldGhvZHMgZGVmaW5lZCBpbnNpZGUgX2VsZW1lbnR0cmVlIGlzCisgICAgICAgICMgPGNsYXNzICd3cmFwcGVyX2Rlc2NyaXB0b3InPgorICAgICAgICBzZWxmLmFzc2VydE5vdElzSW5zdGFuY2UoY0VULkVsZW1lbnQuX19pbml0X18sIHR5cGVzLkZ1bmN0aW9uVHlwZSkKKwogCiBAdW5pdHRlc3Quc2tpcFVubGVzcyhjRVQsICdyZXF1aXJlcyBfZWxlbWVudHRyZWUnKQogQHN1cHBvcnQuY3B5dGhvbl9vbmx5CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbHJwYy5weSBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CmluZGV4IGZlMmJmMDMuLjdhZTBkY2UgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5CkBAIC0xNSw2ICsxNSwxMCBAQAogZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiAKIHRyeToKKyAgICBpbXBvcnQgZ3ppcAorZXhjZXB0IEltcG9ydEVycm9yOgorICAgIGd6aXAgPSBOb25lCit0cnk6CiAgICAgaW1wb3J0IHRocmVhZGluZwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIHRocmVhZGluZyA9IE5vbmUKQEAgLTIxNiw3ICsyMjAsNyBAQAogICAgICAgICAgICAgeG1scnBjLmNsaWVudC5TZXJ2ZXJQcm94eSgnaHR0cHM6Ly9sb2NhbGhvc3Q6OTk5OScpLmJhZF9mdW5jdGlvbigpCiAgICAgICAgIGV4Y2VwdCBOb3RJbXBsZW1lbnRlZEVycm9yOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShoYXNfc3NsLCAieG1scnBjIGNsaWVudCdzIGVycm9yIHdpdGggU1NMIHN1cHBvcnQiKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShoYXNfc3NsKQogCiBjbGFzcyBIZWxwZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0zNzYsNiArMzgwLDExIEBACiAgICAgICAgICAgICBpZiBuYW1lID09ICdkaXYnOgogICAgICAgICAgICAgICAgIHJldHVybiAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJwogCisgICAgICAgIGNsYXNzIEZpeHR1cmU6CisgICAgICAgICAgICBAc3RhdGljbWV0aG9kCisgICAgICAgICAgICBkZWYgZ2V0RGF0YSgpOgorICAgICAgICAgICAgICAgIHJldHVybiAnNDInCisKICAgICBkZWYgbXlfZnVuY3Rpb24oKToKICAgICAgICAgJycnVGhpcyBpcyBteSBmdW5jdGlvbicnJwogICAgICAgICByZXR1cm4gVHJ1ZQpAQCAtNDA3LDcgKzQxNiw4IEBACiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24ocG93KQogICAgICAgICBzZXJ2LnJlZ2lzdGVyX2Z1bmN0aW9uKGxhbWJkYSB4LHk6IHgreSwgJ2FkZCcpCiAgICAgICAgIHNlcnYucmVnaXN0ZXJfZnVuY3Rpb24obXlfZnVuY3Rpb24pCi0gICAgICAgIHNlcnYucmVnaXN0ZXJfaW5zdGFuY2UoVGVzdEluc3RhbmNlQ2xhc3MoKSkKKyAgICAgICAgdGVzdEluc3RhbmNlID0gVGVzdEluc3RhbmNlQ2xhc3MoKQorICAgICAgICBzZXJ2LnJlZ2lzdGVyX2luc3RhbmNlKHRlc3RJbnN0YW5jZSwgYWxsb3dfZG90dGVkX25hbWVzPVRydWUpCiAgICAgICAgIGV2dC5zZXQoKQogCiAgICAgICAgICMgaGFuZGxlIHVwIHRvICdudW1yZXF1ZXN0cycgcmVxdWVzdHMKQEAgLTUwMCwxNCArNTEwLDE0IEBACiAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogICAgICAgICBleGNfbWVzcyA9IGUuaGVhZGVycy5nZXQoJ1gtZXhjZXB0aW9uJykKICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICMgSWdub3JlIHNvY2tldC5lcnJvcnMgaGVyZS4KKyAgICAgICAgIyBJZ25vcmUgT1NFcnJvcnMgaGVyZS4KICAgICAgICAgZXhjX21lc3MgPSBzdHIoZSkKIAogICAgIGlmIGV4Y19tZXNzIGFuZCAndGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnIGluIGV4Y19tZXNzLmxvd2VyKCk6CiAgICAgICAgIHJldHVybiBUcnVlCiAKIGRlZiBtYWtlX3JlcXVlc3RfYW5kX3NraXBJZihjb25kaXRpb24sIHJlYXNvbik6Ci0gICAgIyBJZiB3ZSBza2lwIHRoZSB0ZXN0LCB3ZSBoYXZlIHRvIG1ha2UgYSByZXF1ZXN0IGJlY2F1c2UgdGhlCisgICAgIyBJZiB3ZSBza2lwIHRoZSB0ZXN0LCB3ZSBoYXZlIHRvIG1ha2UgYSByZXF1ZXN0IGJlY2F1c2UKICAgICAjIHRoZSBzZXJ2ZXIgY3JlYXRlZCBpbiBzZXRVcCBibG9ja3MgZXhwZWN0aW5nIG9uZSB0byBjb21lIGluLgogICAgIGlmIG5vdCBjb25kaXRpb246CiAgICAgICAgIHJldHVybiBsYW1iZGEgZnVuYzogZnVuYwpAQCAtNTE1LDcgKzUyNSw3IEBACiAgICAgICAgIGRlZiBtYWtlX3JlcXVlc3RfYW5kX3NraXAoc2VsZik6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgeG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkubXlfZnVuY3Rpb24oKQotICAgICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QocmVhc29uKQpAQCAtNTUzLDcgKzU2Myw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLnBvdyg2LDgpLCA2Kio4KQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTU2Niw3ICs1NzYsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHAuYWRkKHN0YXJ0X3N0cmluZywgZW5kX3N0cmluZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3N0cmluZyArIGVuZF9zdHJpbmcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNTg3LDEyICs1OTcsMTMgQEAKICAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uMShzZWxmKToKICAgICAgICAgZXhwZWN0ZWRfbWV0aG9kcyA9IHNldChbJ3BvdycsICdkaXYnLCAnbXlfZnVuY3Rpb24nLCAnYWRkJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5saXN0TWV0aG9kcycsICdzeXN0ZW0ubWV0aG9kSGVscCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlJywgJ3N5c3RlbS5tdWx0aWNhbGwnXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N5c3RlbS5tZXRob2RTaWduYXR1cmUnLCAnc3lzdGVtLm11bHRpY2FsbCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGaXh0dXJlJ10pCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgbWV0aCA9IHAuc3lzdGVtLmxpc3RNZXRob2RzKCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KG1ldGgpLCBleHBlY3RlZF9tZXRob2RzKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTYwNSw3ICs2MTYsNyBAQAogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBkaXZoZWxwID0gcC5zeXN0ZW0ubWV0aG9kSGVscCgnZGl2JykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2aGVscCwgJ1RoaXMgaXMgdGhlIGRpdiBmdW5jdGlvbicpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjE5LDcgKzYzMCw3IEBACiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIG15ZnVuY3Rpb24gPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdteV9mdW5jdGlvbicpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG15ZnVuY3Rpb24sICdUaGlzIGlzIG15IGZ1bmN0aW9uJykKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC02MzIsNyArNjQzLDcgQEAKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoVVJMKQogICAgICAgICAgICAgZGl2c2lnID0gcC5zeXN0ZW0ubWV0aG9kU2lnbmF0dXJlKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZzaWcsICdzaWduYXR1cmVzIG5vdCBzdXBwb3J0ZWQnKQotICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBzb2NrZXQuZXJyb3IpIGFzIGU6CisgICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIE9TRXJyb3IpIGFzIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwogICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKQEAgLTY0OSw3ICs2NjAsNyBAQAogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhZGRfcmVzdWx0LCAyKzMpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBvd19yZXN1bHQsIDYqKjgpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRpdl9yZXN1bHQsIDEyNy8vNDIpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjcwLDcgKzY4MSw3IEBACiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5yZXN1bHRzWzBdWydmYXVsdFN0cmluZyddLAogICAgICAgICAgICAgICAgICc8Y2xhc3MgXCdFeGNlcHRpb25cJz46bWV0aG9kICJ0aGlzX2lzX25vdF9leGlzdHMiICcKICAgICAgICAgICAgICAgICAnaXMgbm90IHN1cHBvcnRlZCcpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dApAQCAtNjg2LDYgKzY5NywxMiBAQAogICAgICAgICAjIFRoaXMgYXZvaWRzIHdhaXRpbmcgZm9yIHRoZSBzb2NrZXQgdGltZW91dC4KICAgICAgICAgc2VsZi50ZXN0X3NpbXBsZTEoKQogCisgICAgZGVmIHRlc3RfYWxsb3dfZG90dGVkX25hbWVzX3RydWUoc2VsZik6CisgICAgICAgICMgWFhYIGFsc28gbmVlZCBhbGxvd19kb3R0ZWRfbmFtZXNfZmFsc2UgdGVzdC4KKyAgICAgICAgc2VydmVyID0geG1scnBjbGliLlNlcnZlclByb3h5KCJodHRwOi8vJXM6JWQvUlBDMiIgJSAoQUREUiwgUE9SVCkpCisgICAgICAgIGRhdGEgPSBzZXJ2ZXIuRml4dHVyZS5nZXREYXRhKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhLCAnNDInKQorCiAgICAgZGVmIHRlc3RfdW5pY29kZV9ob3N0KHNlbGYpOgogICAgICAgICBzZXJ2ZXIgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoImh0dHA6Ly8lczolZC9SUEMyIiAlIChBRERSLCBQT1JUKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZXJ2ZXIuYWRkKCJhIiwgIlx4ZTkiKSwgImFceGU5IikKQEAgLTc5Myw2ICs4MTAsNyBAQAogCiAjQSB0ZXN0IGNhc2UgdGhhdCB2ZXJpZmllcyB0aGF0IGd6aXAgZW5jb2Rpbmcgd29ya3MgaW4gYm90aCBkaXJlY3Rpb25zCiAjKGZvciBhIHJlcXVlc3QgYW5kIHRoZSByZXNwb25zZSkKK0B1bml0dGVzdC5za2lwSWYoZ3ppcCBpcyBOb25lLCAncmVxdWlyZXMgZ3ppcCcpCiBjbGFzcyBHemlwU2VydmVyVGVzdENhc2UoQmFzZVNlcnZlclRlc3RDYXNlKToKICAgICAjYSByZXF1ZXN0IGhhbmRsZXIgdGhhdCBzdXBwb3J0cyBrZWVwLWFsaXZlIGFuZCBsb2dzIHJlcXVlc3RzIGludG8gYQogICAgICNjbGFzcyB2YXJpYWJsZQpAQCAtODYwLDYgKzg3OCw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShhPmIpCiAKIAorQHVuaXR0ZXN0LnNraXBJZihnemlwIGlzIE5vbmUsICdyZXF1aXJlcyBnemlwJykKIGNsYXNzIEd6aXBVdGlsVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfZ3ppcF9kZWNvZGVfbGltaXQoc2VsZik6CkBAIC04NzIsOCArODkxLDggQEAKICAgICAgICAgZGF0YSA9IGInXDAnICogKG1heF9nemlwX2RlY29kZSArIDEpCiAgICAgICAgIGVuY29kZWQgPSB4bWxycGNsaWIuZ3ppcF9lbmNvZGUoZGF0YSkKIAotICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXhwKFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heCBnemlwcGVkIHBheWxvYWQgbGVuZ3RoIGV4Y2VlZGVkIik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1heCBnemlwcGVkIHBheWxvYWQgbGVuZ3RoIGV4Y2VlZGVkIik6CiAgICAgICAgICAgICB4bWxycGNsaWIuZ3ppcF9kZWNvZGUoZW5jb2RlZCkKIAogICAgICAgICB4bWxycGNsaWIuZ3ppcF9kZWNvZGUoZW5jb2RlZCwgbWF4X2RlY29kZT0tMSkKQEAgLTk0Myw3ICs5NjIsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5wb3coNiw4KSwgNioqOCkKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgICAgICAgICAgICAgIyBwcm90b2NvbCBlcnJvcjsgcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGluIHRlc3Qgb3V0cHV0CkBAIC05NTYsNyArOTc1LDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eShVUkwpCiAgICAgICAgICAgICBwLnBvdyg2LDgpCi0gICAgICAgIGV4Y2VwdCAoeG1scnBjbGliLlByb3RvY29sRXJyb3IsIHNvY2tldC5lcnJvcikgYXMgZToKKyAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgT1NFcnJvcikgYXMgZToKICAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCiAgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpIGFuZCBoYXNhdHRyKGUsICJoZWFkZXJzIik6CiAgICAgICAgICAgICAgICAgIyBUaGUgdHdvIHNlcnZlci1zaWRlIGVycm9yIGhlYWRlcnMgc2hvdWxkbid0IGJlIHNlbnQgYmFjayBpbiB0aGlzIGNhc2UKQEAgLTk3Niw3ICs5OTUsNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBwID0geG1scnBjbGliLlNlcnZlclByb3h5KFVSTCkKICAgICAgICAgICAgIHAucG93KDYsOCkKLSAgICAgICAgZXhjZXB0ICh4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgc29ja2V0LmVycm9yKSBhcyBlOgorICAgICAgICBleGNlcHQgKHhtbHJwY2xpYi5Qcm90b2NvbEVycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgICAgICAgICAgIyBpZ25vcmUgZmFpbHVyZXMgZHVlIHRvIG5vbi1ibG9ja2luZyBzb2NrZXQgJ3VuYXZhaWxhYmxlJyBlcnJvcnMKICAgICAgICAgICAgIGlmIG5vdCBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSkgYW5kIGhhc2F0dHIoZSwgImhlYWRlcnMiKToKICAgICAgICAgICAgICAgICAjIFdlIHNob3VsZCBnZXQgZXJyb3IgaW5mbyBpbiB0aGUgcmVzcG9uc2UKQEAgLTExMDQsMjQgKzExMjMsMTMgQEAKIAogQHN1cHBvcnQucmVhcF90aHJlYWRzCiBkZWYgdGVzdF9tYWluKCk6Ci0gICAgeG1scnBjX3Rlc3RzID0gW1hNTFJQQ1Rlc3RDYXNlLCBIZWxwZXJUZXN0Q2FzZSwgRGF0ZVRpbWVUZXN0Q2FzZSwKLSAgICAgICAgIEJpbmFyeVRlc3RDYXNlLCBGYXVsdFRlc3RDYXNlXQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoVXNlQnVpbHRpblR5cGVzVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChTaW1wbGVTZXJ2ZXJUZXN0Q2FzZSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMSkKLSAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEtlZXBhbGl2ZVNlcnZlclRlc3RDYXNlMikKLSAgICB0cnk6Ci0gICAgICAgIGltcG9ydCBnemlwCi0gICAgICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoR3ppcFNlcnZlclRlc3RDYXNlKQotICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKEd6aXBVdGlsVGVzdENhc2UpCi0gICAgZXhjZXB0IEltcG9ydEVycm9yOgotICAgICAgICBwYXNzICNnemlwIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBidWlsZAotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoTXVsdGlQYXRoU2VydmVyVGVzdENhc2UpCi0gICAgeG1scnBjX3Rlc3RzLmFwcGVuZChTZXJ2ZXJQcm94eVRlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoRmFpbGluZ1NlcnZlclRlc3RDYXNlKQotICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoQ0dJSGFuZGxlclRlc3RDYXNlKQorICAgIHN1cHBvcnQucnVuX3VuaXR0ZXN0KFhNTFJQQ1Rlc3RDYXNlLCBIZWxwZXJUZXN0Q2FzZSwgRGF0ZVRpbWVUZXN0Q2FzZSwKKyAgICAgICAgICAgIEJpbmFyeVRlc3RDYXNlLCBGYXVsdFRlc3RDYXNlLCBVc2VCdWlsdGluVHlwZXNUZXN0Q2FzZSwKKyAgICAgICAgICAgIFNpbXBsZVNlcnZlclRlc3RDYXNlLCBLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTEsCisgICAgICAgICAgICBLZWVwYWxpdmVTZXJ2ZXJUZXN0Q2FzZTIsIEd6aXBTZXJ2ZXJUZXN0Q2FzZSwgR3ppcFV0aWxUZXN0Q2FzZSwKKyAgICAgICAgICAgIE11bHRpUGF0aFNlcnZlclRlc3RDYXNlLCBTZXJ2ZXJQcm94eVRlc3RDYXNlLCBGYWlsaW5nU2VydmVyVGVzdENhc2UsCisgICAgICAgICAgICBDR0lIYW5kbGVyVGVzdENhc2UpCiAKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqeG1scnBjX3Rlc3RzKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkgYi9MaWIvdGVzdC90ZXN0X3htbHJwY19uZXQucHkKaW5kZXggNzdmNjZlYS4uYjYwYjgyZiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGNfbmV0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfeG1scnBjX25ldC5weQpAQCAtNywzMSArNyw3IEBACiAKIGltcG9ydCB4bWxycGMuY2xpZW50IGFzIHhtbHJwY2xpYgogCi1jbGFzcyBDdXJyZW50VGltZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgotCi0gICAgZGVmIHRlc3RfY3VycmVudF90aW1lKHNlbGYpOgotICAgICAgICAjIEdldCB0aGUgY3VycmVudCB0aW1lIGZyb20geG1scnBjLmNvbS4gIFRoaXMgY29kZSBleGVyY2lzZXMKLSAgICAgICAgIyB0aGUgbWluaW1hbCBIVFRQIGZ1bmN0aW9uYWxpdHkgaW4geG1scnBjbGliLgotICAgICAgICBzZWxmLnNraXBUZXN0KCJ0aW1lLnhtbHJwYy5jb20gaXMgdW5yZWxpYWJsZSIpCi0gICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovL3RpbWUueG1scnBjLmNvbS9SUEMyIikKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgdDAgPSBzZXJ2ZXIuY3VycmVudFRpbWUuZ2V0Q3VycmVudFRpbWUoKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICBzZWxmLnNraXBUZXN0KCJuZXR3b3JrIGVycm9yOiAlcyIgJSBlKQotCi0gICAgICAgICMgUGVyZm9ybSBhIG1pbmltYWwgc2FuaXR5IGNoZWNrIG9uIHRoZSByZXN1bHQsIGp1c3QgdG8gYmUgc3VyZQotICAgICAgICAjIHRoZSByZXF1ZXN0IG1lYW5zIHdoYXQgd2UgdGhpbmsgaXQgbWVhbnMuCi0gICAgICAgIHQxID0geG1scnBjbGliLkRhdGVUaW1lKCkKLQotICAgICAgICBkdDAgPSB4bWxycGNsaWIuX2RhdGV0aW1lX3R5cGUodDAudmFsdWUpCi0gICAgICAgIGR0MSA9IHhtbHJwY2xpYi5fZGF0ZXRpbWVfdHlwZSh0MS52YWx1ZSkKLSAgICAgICAgaWYgZHQwID4gZHQxOgotICAgICAgICAgICAgZGVsdGEgPSBkdDAgLSBkdDEKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGRlbHRhID0gZHQxIC0gZHQwCi0gICAgICAgICMgVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3lzdGVtIHRpbWUgaGVyZSBhbmQgdGhlIHN5c3RlbQotICAgICAgICAjIHRpbWUgb24gdGhlIHNlcnZlciBzaG91bGQgbm90IGJlIHRvbyBiaWcuCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkZWx0YS5kYXlzIDw9IDEpCitjbGFzcyBQeXRob25CdWlsZGVyc1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfcHl0aG9uX2J1aWxkZXJzKHNlbGYpOgogICAgICAgICAjIEdldCB0aGUgbGlzdCBvZiBidWlsZGVycyBmcm9tIHRoZSBYTUxSUEMgYnVpbGRib3QgaW50ZXJmYWNlIGF0CkBAIC0zOSw3ICsxNSw3IEBACiAgICAgICAgIHNlcnZlciA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgiaHR0cDovL2J1aWxkYm90LnB5dGhvbi5vcmcvYWxsL3htbHJwYy8iKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBidWlsZGVycyA9IHNlcnZlci5nZXRBbGxCdWlsZGVycygpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZToKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZToKICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoIm5ldHdvcmsgZXJyb3I6ICVzIiAlIGUpCiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNlcnZlcignY2xvc2UnKSgpKQogCkBAIC01MSw3ICsyNyw3IEBACiAKIGRlZiB0ZXN0X21haW4oKToKICAgICBzdXBwb3J0LnJlcXVpcmVzKCJuZXR3b3JrIikKLSAgICBzdXBwb3J0LnJ1bl91bml0dGVzdChDdXJyZW50VGltZVRlc3QpCisgICAgc3VwcG9ydC5ydW5fdW5pdHRlc3QoUHl0aG9uQnVpbGRlcnNUZXN0KQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkgYi9MaWIvdGVzdC90ZXN0X3ppcGZpbGUucHkKaW5kZXggMTJhMGY3MS4uNGJkZjdkNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwZmlsZS5weQpAQCAtMSw5ICsxLDkgQEAKK2ltcG9ydCBjb250ZXh0bGliCiBpbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHN5cwotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgdGltZQotaW1wb3J0IHNodXRpbAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHppcGZpbGUKIGltcG9ydCB1bml0dGVzdApAQCAtMTIsOSArMTIsOSBAQAogZnJvbSB0ZW1wZmlsZSBpbXBvcnQgVGVtcG9yYXJ5RmlsZQogZnJvbSByYW5kb20gaW1wb3J0IHJhbmRpbnQsIHJhbmRvbSwgZ2V0cmFuZGJpdHMKIAotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IChURVNURk4sIGZpbmRmaWxlLCB1bmxpbmssCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgKFRFU1RGTiwgZmluZGZpbGUsIHVubGluaywgcm10cmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlc196bGliLCByZXF1aXJlc19iejIsIHJlcXVpcmVzX2x6bWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNhcHR1cmVkX3N0ZG91dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZWRfc3Rkb3V0LCBjaGVja193YXJuaW5ncykKIAogVEVTVEZOMiA9IFRFU1RGTiArICIyIgogVEVTVEZORElSID0gVEVTVEZOICsgImQiCkBAIC0yNiw2ICsyNiw5IEBACiAgICAgICAgICAgICAgICAgICAgKCd6aXB0ZXN0MmRpci96aXB0ZXN0M2Rpci9femlwdGVzdDMnLCAnYXpzeGRjZnZnYicpLAogICAgICAgICAgICAgICAgICAgICgnemlwdGVzdDJkaXIvemlwdGVzdDNkaXIvemlwdGVzdDRkaXIvX3ppcHRlc3QzJywgJzZ5N3U4aTlvMHAnKV0KIAorZGVmIGdldHJhbmRieXRlcyhzaXplKToKKyAgICByZXR1cm4gZ2V0cmFuZGJpdHMoOCAqIHNpemUpLnRvX2J5dGVzKHNpemUsICdsaXR0bGUnKQorCiBkZWYgZ2V0X2ZpbGVzKHRlc3QpOgogICAgIHlpZWxkIFRFU1RGTjIKICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyBmOgpAQCAtMzUsNiArMzgsMTAgQEAKICAgICAgICAgeWllbGQgZgogICAgICAgICB0ZXN0LmFzc2VydEZhbHNlKGYuY2xvc2VkKQogCitkZWYgb3BlblUoemlwZnAsIGZuKToKKyAgICB3aXRoIGNoZWNrX3dhcm5pbmdzKCgnJywgRGVwcmVjYXRpb25XYXJuaW5nKSk6CisgICAgICAgIHJldHVybiB6aXBmcC5vcGVuKGZuLCAnclUnKQorCiBjbGFzcyBBYnN0cmFjdFRlc3RzV2l0aFNvdXJjZUZpbGU6CiAgICAgQGNsYXNzbWV0aG9kCiAgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKQEAgLTI4Niw3ICsyOTMsNyBAQAogICAgICAgICAjIHRoYW4gcmVxdWVzdGVkLgogICAgICAgICBmb3IgdGVzdF9zaXplIGluICgxLCA0MDk1LCA0MDk2LCA0MDk3LCAxNjM4NCk6CiAgICAgICAgICAgICBmaWxlX3NpemUgPSB0ZXN0X3NpemUgKyAxCi0gICAgICAgICAgICBqdW5rID0gZ2V0cmFuZGJpdHMoOCAqIGZpbGVfc2l6ZSkudG9fYnl0ZXMoZmlsZV9zaXplLCAnbGl0dGxlJykKKyAgICAgICAgICAgIGp1bmsgPSBnZXRyYW5kYnl0ZXMoZmlsZV9zaXplKQogICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoaW8uQnl0ZXNJTygpLCAidyIsIHNlbGYuY29tcHJlc3Npb24pIGFzIHppcGY6CiAgICAgICAgICAgICAgICAgemlwZi53cml0ZXN0cignZm9vJywganVuaykKICAgICAgICAgICAgICAgICB3aXRoIHppcGYub3BlbignZm9vJywgJ3InKSBhcyBmcDoKQEAgLTQ1OSw3ICs0NjYsOSBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzZWxmLl9saW1pdCA9IHppcGZpbGUuWklQNjRfTElNSVQKLSAgICAgICAgemlwZmlsZS5aSVA2NF9MSU1JVCA9IDUKKyAgICAgICAgc2VsZi5fZmlsZWNvdW50X2xpbWl0ID0gemlwZmlsZS5aSVBfRklMRUNPVU5UX0xJTUlUCisgICAgICAgIHppcGZpbGUuWklQNjRfTElNSVQgPSAxMDAwCisgICAgICAgIHppcGZpbGUuWklQX0ZJTEVDT1VOVF9MSU1JVCA9IDkKIAogICAgICAgICAjIE1ha2UgYSBzb3VyY2UgZmlsZSB3aXRoIHNvbWUgbGluZXMKICAgICAgICAgd2l0aCBvcGVuKFRFU1RGTiwgIndiIikgYXMgZnA6CkBAIC01MjYsOCArNTM1LDY3IEBACiAgICAgICAgIGZvciBmIGluIGdldF9maWxlcyhzZWxmKToKICAgICAgICAgICAgIHNlbGYuemlwX3Rlc3QoZiwgc2VsZi5jb21wcmVzc2lvbikKIAorICAgIGRlZiB0ZXN0X3Rvb19tYW55X2ZpbGVzKHNlbGYpOgorICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBtb3JlIHRoYW4gNjRrIGZpbGVzIGNhbiBiZSBhZGRlZCB0byBhbiBhcmNoaXZlLAorICAgICAgICAjIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgYXJjaGl2ZSBjYW4gYmUgcmVhZCBwcm9wZXJseSBieSBaaXBGaWxlCisgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIsIHNlbGYuY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1UcnVlKQorICAgICAgICB6aXBmLmRlYnVnID0gMTAwCisgICAgICAgIG51bWZpbGVzID0gMTUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtZmlsZXMpOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vJTA4ZCIgJSBpLCAiJWQiICUgKGkqKjMgJSA1NykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICB6aXBmLmNsb3NlKCkKKworICAgICAgICB6aXBmMiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIiwgc2VsZi5jb21wcmVzc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZjIubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlcyk6CisgICAgICAgICAgICBjb250ZW50ID0gemlwZjIucmVhZCgiZm9vJTA4ZCIgJSBpKS5kZWNvZGUoJ2FzY2lpJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udGVudCwgIiVkIiAlIChpKiozICUgNTcpKQorICAgICAgICB6aXBmMi5jbG9zZSgpCisKKyAgICBkZWYgdGVzdF90b29fbWFueV9maWxlc19hcHBlbmQoc2VsZik6CisgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAidyIsIHNlbGYuY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1GYWxzZSkKKyAgICAgICAgemlwZi5kZWJ1ZyA9IDEwMAorICAgICAgICBudW1maWxlcyA9IDkKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtZmlsZXMpOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vJTA4ZCIgJSBpLCAiJWQiICUgKGkqKjMgJSA1NykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlKToKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvbyUwOGQiICUgbnVtZmlsZXMsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIHppcGYuY2xvc2UoKQorCisgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAiYSIsIHNlbGYuY29tcHJlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1GYWxzZSkKKyAgICAgICAgemlwZi5kZWJ1ZyA9IDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmLm5hbWVsaXN0KCkpLCBudW1maWxlcykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSk6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28lMDhkIiAlIG51bWZpbGVzLCBiJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICB6aXBmLmNsb3NlKCkKKworICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgImEiLCBzZWxmLmNvbXByZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9VHJ1ZSkKKyAgICAgICAgemlwZi5kZWJ1ZyA9IDEwMAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmLm5hbWVsaXN0KCkpLCBudW1maWxlcykKKyAgICAgICAgbnVtZmlsZXMyID0gMTUKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtZmlsZXMsIG51bWZpbGVzMik6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28lMDhkIiAlIGksICIlZCIgJSAoaSoqMyAlIDU3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMyKQorICAgICAgICB6aXBmLmNsb3NlKCkKKworICAgICAgICB6aXBmMiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIiwgc2VsZi5jb21wcmVzc2lvbikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZjIubmFtZWxpc3QoKSksIG51bWZpbGVzMikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtZmlsZXMyKToKKyAgICAgICAgICAgIGNvbnRlbnQgPSB6aXBmMi5yZWFkKCJmb28lMDhkIiAlIGkpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50LCAiJWQiICUgKGkqKjMgJSA1NykpCisgICAgICAgIHppcGYyLmNsb3NlKCkKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgemlwZmlsZS5aSVA2NF9MSU1JVCA9IHNlbGYuX2xpbWl0CisgICAgICAgIHppcGZpbGUuWklQX0ZJTEVDT1VOVF9MSU1JVCA9IHNlbGYuX2ZpbGVjb3VudF9saW1pdAogICAgICAgICB1bmxpbmsoVEVTVEZOKQogICAgICAgICB1bmxpbmsoVEVTVEZOMikKIApAQCAtNTM3LDEyICs2MDUsMTIgQEAKICAgICBjb21wcmVzc2lvbiA9IHppcGZpbGUuWklQX1NUT1JFRAogCiAgICAgZGVmIGxhcmdlX2ZpbGVfZXhjZXB0aW9uX3Rlc3Qoc2VsZiwgZiwgY29tcHJlc3Npb24pOgotICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uKSBhcyB6aXBmcDoKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbiwgYWxsb3daaXA2ND1GYWxzZSkgYXMgemlwZnA6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkxhcmdlWmlwRmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppcGZwLndyaXRlLCBURVNURk4sICJhbm90aGVyLm5hbWUiKQogCiAgICAgZGVmIGxhcmdlX2ZpbGVfZXhjZXB0aW9uX3Rlc3QyKHNlbGYsIGYsIGNvbXByZXNzaW9uKToKLSAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciLCBjb21wcmVzc2lvbikgYXMgemlwZnA6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24sIGFsbG93WmlwNjQ9RmFsc2UpIGFzIHppcGZwOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXN0ciwgImFub3RoZXIubmFtZSIsIHNlbGYuZGF0YSkKIApAQCAtNTgwLDcgKzY0OCwyMSBAQAogICAgICAgICBpZiBuYW1lICsgJ28nIG5vdCBpbiBuYW1lbGlzdDoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4obmFtZSArICdjJywgbmFtZWxpc3QpCiAKKyAgICBkZWYgcmVxdWlyZXNXcml0ZUFjY2VzcyhzZWxmLCBwYXRoKToKKyAgICAgICAgIyBlZmZlY3RpdmVfaWRzIHVuYXZhaWxhYmxlIG9uIHdpbmRvd3MKKyAgICAgICAgaWYgbm90IG9zLmFjY2VzcyhwYXRoLCBvcy5XX09LLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZV9pZHM9b3MuYWNjZXNzIGluIG9zLnN1cHBvcnRzX2VmZmVjdGl2ZV9pZHMpOgorICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgncmVxdWlyZXMgd3JpdGUgYWNjZXNzIHRvIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24nKQorICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihwYXRoLCAndGVzdF96aXBmaWxlLnRyeScpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGZkID0gb3Mub3BlbihmaWxlbmFtZSwgb3MuT19XUk9OTFkgfCBvcy5PX0NSRUFUKQorICAgICAgICAgICAgb3MuY2xvc2UoZmQpCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICBzZWxmLnNraXBUZXN0KCdyZXF1aXJlcyB3cml0ZSBhY2Nlc3MgdG8gdGhlIGluc3RhbGxlZCBsb2NhdGlvbicpCisgICAgICAgIHVubGluayhmaWxlbmFtZSkKKwogICAgIGRlZiB0ZXN0X3dyaXRlX3B5ZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5yZXF1aXJlc1dyaXRlQWNjZXNzKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCiAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CiAgICAgICAgICAgICBmbiA9IF9fZmlsZV9fCiAgICAgICAgICAgICBpZiBmbi5lbmRzd2l0aCgnLnB5YycpIG9yIGZuLmVuZHN3aXRoKCcucHlvJyk6CkBAIC01ODgsNyArNjcwLDcgQEAKICAgICAgICAgICAgICAgICBpZiBvcy5hbHRzZXAgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHBhdGhfc3BsaXQuZXh0ZW5kKGZuLnNwbGl0KG9zLmFsdHNlcCkpCiAgICAgICAgICAgICAgICAgaWYgJ19fcHljYWNoZV9fJyBpbiBwYXRoX3NwbGl0OgotICAgICAgICAgICAgICAgICAgICBmbiA9IGltcC5zb3VyY2VfZnJvbV9jYWNoZShmbikKKyAgICAgICAgICAgICAgICAgICAgZm4gPSBpbXBvcnRsaWIudXRpbC5zb3VyY2VfZnJvbV9jYWNoZShmbikKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBmbiA9IGZuWzotMV0KIApAQCAtNjEyLDYgKzY5NCw3IEBACiAgICAgZGVmIHRlc3Rfd3JpdGVfcHl0aG9uX3BhY2thZ2Uoc2VsZik6CiAgICAgICAgIGltcG9ydCBlbWFpbAogICAgICAgICBwYWNrYWdlZGlyID0gb3MucGF0aC5kaXJuYW1lKGVtYWlsLl9fZmlsZV9fKQorICAgICAgICBzZWxmLnJlcXVpcmVzV3JpdGVBY2Nlc3MocGFja2FnZWRpcikKIAogICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgogICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyKQpAQCAtNjIyLDE2ICs3MDUsNDcgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWRJbignZW1haWwvX19pbml0X18ucHknLCBuYW1lcykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Q29tcGlsZWRJbignZW1haWwvbWltZS90ZXh0LnB5JywgbmFtZXMpCiAKKyAgICBkZWYgdGVzdF93cml0ZV9maWx0ZXJlZF9weXRob25fcGFja2FnZShzZWxmKToKKyAgICAgICAgaW1wb3J0IHRlc3QKKyAgICAgICAgcGFja2FnZWRpciA9IG9zLnBhdGguZGlybmFtZSh0ZXN0Ll9fZmlsZV9fKQorICAgICAgICBzZWxmLnJlcXVpcmVzV3JpdGVBY2Nlc3MocGFja2FnZWRpcikKKworICAgICAgICB3aXRoIFRlbXBvcmFyeUZpbGUoKSBhcyB0LCB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIpIGFzIHppcGZwOgorCisgICAgICAgICAgICAjIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0IGZvbGRlciBnaXZlcyBlcnJvciBtZXNzYWdlcworICAgICAgICAgICAgIyAob24gdGhlIGJhZHN5bnRheF8uLi4gZmlsZXMpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTzoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIpCisgICAgICAgICAgICByZXBvcnRTdHIgPSByZXBvcnRTSU8uZ2V0dmFsdWUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTeW50YXhFcnJvcicgaW4gcmVwb3J0U3RyKQorCisgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhhdCB0aGUgZmlsdGVyIHdvcmtzIG9uIHRoZSB3aG9sZSBwYWNrYWdlCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTzoKKyAgICAgICAgICAgICAgICB6aXBmcC53cml0ZXB5KHBhY2thZ2VkaXIsIGZpbHRlcmZ1bmM9bGFtYmRhIHdoYXRldmVyOiBGYWxzZSkKKyAgICAgICAgICAgIHJlcG9ydFN0ciA9IHJlcG9ydFNJTy5nZXR2YWx1ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoJ1N5bnRheEVycm9yJyBub3QgaW4gcmVwb3J0U3RyKQorCisgICAgICAgICAgICAjIHRoZW4gY2hlY2sgdGhhdCB0aGUgZmlsdGVyIHdvcmtzIG9uIGluZGl2aWR1YWwgZmlsZXMKKyAgICAgICAgICAgIGRlZiBmaWx0ZXIocGF0aCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIG5vdCBvcy5wYXRoLmJhc2VuYW1lKHBhdGgpLnN0YXJ0c3dpdGgoImJhZCIpCisgICAgICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZG91dCgpIGFzIHJlcG9ydFNJTywgc2VsZi5hc3NlcnRXYXJucyhVc2VyV2FybmluZyk6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShwYWNrYWdlZGlyLCBmaWx0ZXJmdW5jPWZpbHRlcikKKyAgICAgICAgICAgIHJlcG9ydFN0ciA9IHJlcG9ydFNJTy5nZXR2YWx1ZSgpCisgICAgICAgICAgICBpZiByZXBvcnRTdHI6CisgICAgICAgICAgICAgICAgcHJpbnQocmVwb3J0U3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCdTeW50YXhFcnJvcicgbm90IGluIHJlcG9ydFN0cikKKwogICAgIGRlZiB0ZXN0X3dyaXRlX3dpdGhfb3B0aW1pemF0aW9uKHNlbGYpOgogICAgICAgICBpbXBvcnQgZW1haWwKICAgICAgICAgcGFja2FnZWRpciA9IG9zLnBhdGguZGlybmFtZShlbWFpbC5fX2ZpbGVfXykKKyAgICAgICAgc2VsZi5yZXF1aXJlc1dyaXRlQWNjZXNzKHBhY2thZ2VkaXIpCiAgICAgICAgICMgdXNlIC5weWMgaWYgcnVubmluZyB0ZXN0IGluIG9wdGltaXphdGlvbiBtb2RlLAogICAgICAgICAjIHVzZSAucHlvIGlmIHJ1bm5pbmcgdGVzdCBpbiBkZWJ1ZyBtb2RlCiAgICAgICAgIG9wdGxldmVsID0gMSBpZiBfX2RlYnVnX18gZWxzZSAwCiAgICAgICAgIGV4dCA9ICcucHlvJyBpZiBvcHRsZXZlbCA9PSAxIGVsc2UgJy5weWMnCiAKICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgXAotICAgICAgICAgICAgICAgICB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIsIG9wdGltaXplPW9wdGxldmVsKSBhcyB6aXBmcDoKKyAgICAgICAgICAgICB6aXBmaWxlLlB5WmlwRmlsZSh0LCAidyIsIG9wdGltaXplPW9wdGxldmVsKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHppcGZwLndyaXRlcHkocGFja2FnZWRpcikKIAogICAgICAgICAgICAgbmFtZXMgPSB6aXBmcC5uYW1lbGlzdCgpCkBAIC02NTksMTQgKzc3MywzNCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90SW4oJ21vZDIudHh0JywgbmFtZXMpCiAKICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoVEVTVEZOMikKKyAgICAgICAgICAgIHJtdHJlZShURVNURk4yKQorCisgICAgZGVmIHRlc3Rfd3JpdGVfcHl0aG9uX2RpcmVjdG9yeV9maWx0ZXJlZChzZWxmKToKKyAgICAgICAgb3MubWtkaXIoVEVTVEZOMikKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihURVNURk4yLCAibW9kMS5weSIpLCAidyIpIGFzIGZwOgorICAgICAgICAgICAgICAgIGZwLndyaXRlKCJwcmludCg0MilcbiIpCisKKyAgICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIm1vZDIucHkiKSwgInciKSBhcyBmcDoKKyAgICAgICAgICAgICAgICBmcC53cml0ZSgicHJpbnQoNDIgKiA0MilcbiIpCisKKyAgICAgICAgICAgIHdpdGggVGVtcG9yYXJ5RmlsZSgpIGFzIHQsIHppcGZpbGUuUHlaaXBGaWxlKHQsICJ3IikgYXMgemlwZnA6CisgICAgICAgICAgICAgICAgemlwZnAud3JpdGVweShURVNURk4yLCBmaWx0ZXJmdW5jPWxhbWJkYSBmbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGZuLmVuZHN3aXRoKCdtb2QyLnB5JykpCisKKyAgICAgICAgICAgICAgICBuYW1lcyA9IHppcGZwLm5hbWVsaXN0KCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydENvbXBpbGVkSW4oJ21vZDEucHknLCBuYW1lcykKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydE5vdEluKCdtb2QyLnB5JywgbmFtZXMpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHJtdHJlZShURVNURk4yKQogCiAgICAgZGVmIHRlc3Rfd3JpdGVfbm9uX3B5ZmlsZShzZWxmKToKICAgICAgICAgd2l0aCBUZW1wb3JhcnlGaWxlKCkgYXMgdCwgemlwZmlsZS5QeVppcEZpbGUodCwgInciKSBhcyB6aXBmcDoKICAgICAgICAgICAgIHdpdGggb3BlbihURVNURk4sICd3JykgYXMgZjoKICAgICAgICAgICAgICAgICBmLndyaXRlKCdtb3N0IGRlZmluaXRlbHkgbm90IGEgcHl0aG9uIGZpbGUnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9yLCB6aXBmcC53cml0ZXB5LCBURVNURk4pCi0gICAgICAgICAgICBvcy5yZW1vdmUoVEVTVEZOKQorICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKIAogICAgIGRlZiB0ZXN0X3dyaXRlX3B5ZmlsZV9iYWRfc3ludGF4KHNlbGYpOgogICAgICAgICBvcy5ta2RpcihURVNURk4yKQpAQCAtNjg5LDcgKzgyMyw3IEBACiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnROb3RJbignbW9kMS5weW8nLCBuYW1lcykKIAogICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURVNURk4yKQorICAgICAgICAgICAgcm10cmVlKFRFU1RGTjIpCiAKIAogY2xhc3MgRXh0cmFjdFRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTcxMiwxMCArODQ2LDEwIEBACiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKHdyaXR0ZW5maWxlLCAicmIiKSBhcyBmOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZkYXRhLmVuY29kZSgpLCBmLnJlYWQoKSkKIAotICAgICAgICAgICAgICAgIG9zLnJlbW92ZSh3cml0dGVuZmlsZSkKKyAgICAgICAgICAgICAgICB1bmxpbmsod3JpdHRlbmZpbGUpCiAKICAgICAgICAgIyByZW1vdmUgdGhlIHRlc3QgZmlsZSBzdWJkaXJlY3RvcmllcwotICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCisgICAgICAgIHJtdHJlZShvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICd6aXB0ZXN0MmRpcicpKQogCiAgICAgZGVmIHRlc3RfZXh0cmFjdF9hbGwoc2VsZik6CiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfU1RPUkVEKSBhcyB6aXBmcDoKQEAgLTczMCwxMCArODY0LDEwIEBACiAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKG91dGZpbGUsICJyYiIpIGFzIGY6CiAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmRhdGEuZW5jb2RlKCksIGYucmVhZCgpKQogCi0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKG91dGZpbGUpCisgICAgICAgICAgICAgICAgdW5saW5rKG91dGZpbGUpCiAKICAgICAgICAgIyByZW1vdmUgdGhlIHRlc3QgZmlsZSBzdWJkaXJlY3RvcmllcwotICAgICAgICBzaHV0aWwucm10cmVlKG9zLnBhdGguam9pbihvcy5nZXRjd2QoKSwgJ3ppcHRlc3QyZGlyJykpCisgICAgICAgIHJtdHJlZShvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICd6aXB0ZXN0MmRpcicpKQogCiAgICAgZGVmIGNoZWNrX2ZpbGUoc2VsZiwgZmlsZW5hbWUsIGNvbnRlbnQpOgogICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2ZpbGUoZmlsZW5hbWUpKQpAQCAtNzY0LDI1ICs4OTgsMjUgQEAKICAgICBkZWYgdGVzdF9leHRyYWN0X2hhY2tlcnNfYXJjbmFtZXNfd2luZG93c19vbmx5KHNlbGYpOgogICAgICAgICAiIiJUZXN0IGNvbWJpbmF0aW9uIG9mIHBhdGggZml4aW5nIGFuZCB3aW5kb3dzIG5hbWUgc2FuaXRpemF0aW9uLiIiIgogICAgICAgICB3aW5kb3dzX2hhY2tuYW1lcyA9IFsKLSAgICAgICAgICAgICAgICAocicuLlxmb29cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicuLlwvZm9vXC9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ2Zvby9cLi5cL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInZm9vXC8uLi9cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOmZvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6Ly9mb28vYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidDOlxmb29cYmFyJywgJ2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJy8vL2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocidcXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnY29ua3kvbW91bnRwb2ludC9mb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInLy9jb25reS8vbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ1xcY29ua3lcXG1vdW50cG9pbnRcZm9vXGJhcicsICdjb25reS9tb3VudHBvaW50L2Zvby9iYXInKSwKLSAgICAgICAgICAgICAgICAocicvLz8vQzovZm9vL2JhcicsICdmb28vYmFyJyksCi0gICAgICAgICAgICAgICAgKHInXFw/XEM6XGZvb1xiYXInLCAnZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ0M6Ly4uL0M6L2Zvby9iYXInLCAnQ18vZm9vL2JhcicpLAotICAgICAgICAgICAgICAgIChyJ2E6YlxjPGQ+ZXxmImc/aCppJywgJ2IvY19kX2VfZl9nX2hfaScpLAotICAgICAgICAgICAgICAgICgnLi4vLi4vZm9vLi4vLi4vYmEuLnInLCAnZm9vL2JhLi5yJyksCisgICAgICAgICAgICAocicuLlxmb29cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJy4uXC9mb29cL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidmb28vXC4uXC9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInZm9vXC8uLi9cYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6Zm9vL2JhcicsICdmb28vYmFyJyksCisgICAgICAgICAgICAocidDOi9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6Ly9mb28vYmFyJywgJ2Zvby9iYXInKSwKKyAgICAgICAgICAgIChyJ0M6XGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLy9jb25reS9tb3VudHBvaW50L2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInXFxjb25reVxtb3VudHBvaW50XGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLy8vY29ua3kvbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgKHInXFxcY29ua3lcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLy9jb25reS8vbW91bnRwb2ludC9mb28vYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgKHInXFxjb25reVxcbW91bnRwb2ludFxmb29cYmFyJywgJ2Nvbmt5L21vdW50cG9pbnQvZm9vL2JhcicpLAorICAgICAgICAgICAgKHInLy8/L0M6L2Zvby9iYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInXFw/XEM6XGZvb1xiYXInLCAnZm9vL2JhcicpLAorICAgICAgICAgICAgKHInQzovLi4vQzovZm9vL2JhcicsICdDXy9mb28vYmFyJyksCisgICAgICAgICAgICAocidhOmJcYzxkPmV8ZiJnP2gqaScsICdiL2NfZF9lX2ZfZ19oX2knKSwKKyAgICAgICAgICAgICgnLi4vLi4vZm9vLi4vLi4vYmEuLnInLCAnZm9vL2JhLi5yJyksCiAgICAgICAgIF0KICAgICAgICAgc2VsZi5fdGVzdF9leHRyYWN0X2hhY2tlcnNfYXJjbmFtZXMod2luZG93c19oYWNrbmFtZXMpCiAKQEAgLTgxNSwxMiArOTQ5LDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9J2V4dHJhY3QgJXI6ICVyICE9ICVyJyAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYXJjbmFtZSwgd3JpdHRlbmZpbGUsIGNvcnJlY3RmaWxlKSkKICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZShjb3JyZWN0ZmlsZSwgY29udGVudCkKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoJ3RhcmdldCcpCisgICAgICAgICAgICBybXRyZWUoJ3RhcmdldCcpCiAKICAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICdyJykgYXMgemlwZnA6CiAgICAgICAgICAgICAgICAgemlwZnAuZXh0cmFjdGFsbCh0YXJnZXRwYXRoKQogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZSgndGFyZ2V0JykKKyAgICAgICAgICAgIHJtdHJlZSgndGFyZ2V0JykKIAogICAgICAgICAgICAgY29ycmVjdGZpbGUgPSBvcy5wYXRoLmpvaW4ob3MuZ2V0Y3dkKCksICpmaXhlZG5hbWUuc3BsaXQoJy8nKSkKIApAQCAtODI5LDE0ICs5NjMsMTQgQEAKICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdyaXR0ZW5maWxlLCBjb3JyZWN0ZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZz0iZXh0cmFjdCAlciIgJSBhcmNuYW1lKQogICAgICAgICAgICAgc2VsZi5jaGVja19maWxlKGNvcnJlY3RmaWxlLCBjb250ZW50KQotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShmaXhlZG5hbWUuc3BsaXQoJy8nKVswXSkKKyAgICAgICAgICAgIHJtdHJlZShmaXhlZG5hbWUuc3BsaXQoJy8nKVswXSkKIAogICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmcDoKICAgICAgICAgICAgICAgICB6aXBmcC5leHRyYWN0YWxsKCkKICAgICAgICAgICAgIHNlbGYuY2hlY2tfZmlsZShjb3JyZWN0ZmlsZSwgY29udGVudCkKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZml4ZWRuYW1lLnNwbGl0KCcvJylbMF0pCisgICAgICAgICAgICBybXRyZWUoZml4ZWRuYW1lLnNwbGl0KCcvJylbMF0pCiAKLSAgICAgICAgICAgIG9zLnJlbW92ZShURVNURk4yKQorICAgICAgICAgICAgdW5saW5rKFRFU1RGTjIpCiAKIAogY2xhc3MgT3RoZXJUZXN0cyh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC04NjAsNiArOTk0LDE3IEBACiAgICAgICAgICAgICAgICAgZGF0YSArPSB6aXBmcC5yZWFkKGluZm8pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEluKGRhdGEsIHtiImZvb2JhciIsIGIiYmFyZm9vIn0pCiAKKyAgICBkZWYgdGVzdF91bml2ZXJzYWxfZGVwcmVjYXRpb24oc2VsZik6CisgICAgICAgIGYgPSBpby5CeXRlc0lPKCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInciKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCdzcGFtLnR4dCcsIGInYWJhYmFnYWxhbWFnYScpCisKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKKyAgICAgICAgICAgIGZvciBtb2RlIGluICdVJywgJ3JVJzoKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0V2FybnMoRGVwcmVjYXRpb25XYXJuaW5nKToKKyAgICAgICAgICAgICAgICAgICAgemlwb3BlbiA9IHppcGZwLm9wZW4oJ3NwYW0udHh0JywgbW9kZSkKKyAgICAgICAgICAgICAgICB6aXBvcGVuLmNsb3NlKCkKKwogICAgIGRlZiB0ZXN0X3VuaXZlcnNhbF9yZWFkYWhlYWRzKHNlbGYpOgogICAgICAgICBmID0gaW8uQnl0ZXNJTygpCiAKQEAgLTg2OSw3ICsxMDE0LDcgQEAKIAogICAgICAgICBkYXRhMiA9IGInJwogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAncicpIGFzIHppcGZwLCBcCi0gICAgICAgICAgICAgemlwZnAub3BlbihURVNURk4sICdyVScpIGFzIHppcG9wZW46CisgICAgICAgICAgICAgb3BlblUoemlwZnAsIFRFU1RGTikgYXMgemlwb3BlbjoKICAgICAgICAgICAgIGZvciBsaW5lIGluIHppcG9wZW46CiAgICAgICAgICAgICAgICAgZGF0YTIgKz0gbGluZQogCkBAIC05MTAsMTAgKzEwNTUsMTAgQEAKICAgICBkZWYgdGVzdF91bnN1cHBvcnRlZF92ZXJzaW9uKHNlbGYpOgogICAgICAgICAjIEZpbGUgaGFzIGFuIGV4dHJhY3RfdmVyc2lvbiBvZiAxMjAKICAgICAgICAgZGF0YSA9IChiJ1BLXHgwM1x4MDR4XHgwMFx4MDBceDAwXHgwMFx4MDAhcFx4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwJwotICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDB4UEtceDAxXHgwMnhceDAzeFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMCFwXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHg4MFx4MDFceDAwXHgwMFx4MDBceDAweFBLXHgwNVx4MDYnCi0gICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAvXHgwMFx4MDBceDAwXHgxZlx4MDBceDAwXHgwMFx4MDBceDAwJykKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDB4UEtceDAxXHgwMnhceDAzeFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDAwIXBceGExQFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMCcKKyAgICAgICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwXHgwMHhQS1x4MDVceDA2JworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAvXHgwMFx4MDBceDAwXHgxZlx4MDBceDAwXHgwMFx4MDBceDAwJykKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhOb3RJbXBsZW1lbnRlZEVycm9yLCB6aXBmaWxlLlppcEZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvLkJ5dGVzSU8oZGF0YSksICdyJykKQEAgLTk0Niw3ICsxMDkxLDcgQEAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAnYScpIGFzIHpmOgogICAgICAgICAgICAgICAgIHpmLndyaXRlc3RyKGZpbGVuYW1lLCBjb250ZW50KQotICAgICAgICBleGNlcHQgSU9FcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLmZhaWwoJ0NvdWxkIG5vdCBhcHBlbmQgZGF0YSB0byBhIG5vbi1leGlzdGVudCB6aXAgZmlsZS4nKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmV4aXN0cyhURVNURk4pKQpAQCAtMTAxOCw3ICsxMTYzLDcgQEAKICAgICAgICAgZnAuc2VlaygwLCAwKQogICAgICAgICBzZWxmLmFzc2VydFRydWUoemlwZmlsZS5pc196aXBmaWxlKGZwKSkKIAotICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19JT0Vycm9yKHNlbGYpOgorICAgIGRlZiB0ZXN0X25vbl9leGlzdGVudF9maWxlX3JhaXNlc19PU0Vycm9yKHNlbGYpOgogICAgICAgICAjIG1ha2Ugc3VyZSB3ZSBkb24ndCByYWlzZSBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIGEgcGFydGlhbGx5LWNvbnN0cnVjdGVkCiAgICAgICAgICMgWmlwRmlsZSBpbnN0YW5jZSBpcyBmaW5hbGl6ZWQ7IHRoaXMgdGVzdHMgZm9yIHJlZ3Jlc3Npb24gb24gU0YgdHJhY2tlcgogICAgICAgICAjIGJ1ZyAjNDAzODcxLgpAQCAtMTAzMCw3ICsxMTc1LDcgQEAKICAgICAgICAgIyBpdCBpcyBpZ25vcmVkLCBidXQgdGhlIHVzZXIgc2hvdWxkIGJlIHN1ZmZpY2llbnRseSBhbm5veWVkIGJ5CiAgICAgICAgICMgdGhlIG1lc3NhZ2Ugb24gdGhlIG91dHB1dCB0aGF0IHJlZ3Jlc3Npb24gd2lsbCBiZSBub3RpY2VkCiAgICAgICAgICMgcXVpY2tseS4KLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgemlwZmlsZS5aaXBGaWxlLCBURVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOKQogCiAgICAgZGVmIHRlc3RfZW1wdHlfZmlsZV9yYWlzZXNfQmFkWmlwRmlsZShzZWxmKToKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCkBAIC0xMDk5LDExICsxMjQ0LDExIEBACiAgICAgZGVmIHRlc3RfdW5zdXBwb3J0ZWRfY29tcHJlc3Npb24oc2VsZik6CiAgICAgICAgICMgZGF0YSBpcyBkZWNsYXJlZCBhcyBzaHJ1bmssIGJ1dCBhY3R1YWxseSBkZWZsYXRlZAogICAgICAgICBkYXRhID0gKGInUEtceDAzXHgwNC5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDAnCi0gICAgICAgIGInXHgwMFx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhceDAzXHgwMFBLXHgwMScKLSAgICAgICAgYidceDAyLlx4MDMuXHgwMFx4MDBceDAwXHgwMVx4MDBceGU0Q1x4YTFAXHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKLSAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgYidceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwJwotICAgICAgICBiJy9ceDAwXHgwMFx4MDAhXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICAgICAgICAgIGInXHgwMFx4MDJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwXHgwMHhceDAzXHgwMFBLXHgwMScKKyAgICAgICAgICAgICAgICBiJ1x4MDIuXHgwMy5ceDAwXHgwMFx4MDBceDAxXHgwMFx4ZTRDXHhhMUBceDAwXHgwMFx4MDBceDAwXHgwMlx4MDBceDAwJworICAgICAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCisgICAgICAgICAgICAgICAgYidceDgwXHgwMVx4MDBceDAwXHgwMFx4MDB4UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwJworICAgICAgICAgICAgICAgIGInL1x4MDBceDAwXHgwMCFceDAwXHgwMFx4MDBceDAwXHgwMCcpCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGlvLkJ5dGVzSU8oZGF0YSksICdyJykgYXMgemlwZjoKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE5vdEltcGxlbWVudGVkRXJyb3IsIHppcGYub3BlbiwgJ3gnKQogCkBAIC0xMjE4LDcgKzEzNjMsNyBAQAogICAgIGRlZiB0ZXN0X29wZW5fZW1wdHlfZmlsZShzZWxmKToKICAgICAgICAgIyBJc3N1ZSAxNzEwNzAzOiBDaGVjayB0aGF0IG9wZW5pbmcgYSBmaWxlIHdpdGggbGVzcyB0aGFuIDIyIGJ5dGVzCiAgICAgICAgICMgcmFpc2VzIGEgQmFkWmlwRmlsZSBleGNlcHRpb24gKHJhdGhlciB0aGFuIHRoZSBwcmV2aW91c2x5IHVuaGVscGZ1bAotICAgICAgICAjIElPRXJyb3IpCisgICAgICAgICMgT1NFcnJvcikKICAgICAgICAgZiA9IG9wZW4oVEVTVEZOLCAndycpCiAgICAgICAgIGYuY2xvc2UoKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh6aXBmaWxlLkJhZFppcEZpbGUsIHppcGZpbGUuWmlwRmlsZSwgVEVTVEZOLCAncicpCkBAIC0xMjI3LDYgKzEzNzIsMjEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgemlwZmlsZS5aaXBJbmZvLCAnc2V2ZW50aWVzJywgKDE5NzksIDEsIDEsIDAsIDAsIDApKQogCisgICAgZGVmIHRlc3RfemlwZmlsZV93aXRoX3Nob3J0X2V4dHJhX2ZpZWxkKHNlbGYpOgorICAgICAgICAiIiJJZiBhbiBleHRyYSBmaWVsZCBpbiB0aGUgaGVhZGVyIGlzIGxlc3MgdGhhbiA0IGJ5dGVzLCBza2lwIGl0LiIiIgorICAgICAgICB6aXBkYXRhID0gKAorICAgICAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAwXHgwMFx4MDBceDAwXHg5M1x4OWJceGFkQFx4OGJceDllJworICAgICAgICAgICAgYidceGQ5XHhkM1x4MDFceDAwXHgwMFx4MDBceDAxXHgwMFx4MDBceDAwXHgwM1x4MDBceDAzXHgwMGFiJworICAgICAgICAgICAgYidjXHgwMFx4MDBceDAwQVBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAwXHg5M1x4OWJceGFkQFx4OGJceDllXHhkOVx4ZDNceDAxXHgwMFx4MDBceDAwXHgwMVx4MDBceDAwJworICAgICAgICAgICAgYidceDAwXHgwM1x4MDBceDAyXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHhhNFx4ODFceDAwJworICAgICAgICAgICAgYidceDAwXHgwMFx4MDBhYmNceDAwXHgwMFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwJworICAgICAgICAgICAgYidceDAxXHgwMFx4MDFceDAwM1x4MDBceDAwXHgwMCVceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShpby5CeXRlc0lPKHppcGRhdGEpLCAncicpIGFzIHppcGY6CisgICAgICAgICAgICAjIHRlc3R6aXAgcmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZmlyc3QgY29ycnVwdCBmaWxlLCBvciBOb25lCisgICAgICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh6aXBmLnRlc3R6aXAoKSkKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgdW5saW5rKFRFU1RGTikKICAgICAgICAgdW5saW5rKFRFU1RGTjIpCkBAIC0xMjY2LDU3ICsxNDI2LDU3IEBACiBjbGFzcyBTdG9yZWRCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9TVE9SRUQKICAgICB6aXBfd2l0aF9iYWRfY3JjID0gKAotICAgICAgICAgICAgYidQS1wwMDNcMDA0XDAyNFwwXDBcMFwwXDAgXDIxM1wyMTI7OnInCi0gICAgICAgICAgICBiJ1wyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDAwMGFmJwotICAgICAgICAgICAgYidpbGVoZWxsbyxBd29ybGRQJwotICAgICAgICAgICAgYidLXDAwMVwwMDJcMDI0XDAwM1wwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzonCi0gICAgICAgICAgICBiJ3JcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwXDAnCi0gICAgICAgICAgICBiJ1wwXDBcMFwwXDBcMFwwXDIwMFwwMDFcMFwwXDBcMDAwYWZpJwotICAgICAgICAgICAgYidsZVBLXDAwNVwwMDZcMFwwXDBcMFwwMDFcMFwwMDFcMDAwM1wwMDAnCi0gICAgICAgICAgICBiJ1wwXDAvXDBcMFwwXDBcMCcpCisgICAgICAgIGInUEtcMDAzXDAwNFwwMjRcMFwwXDBcMFwwIFwyMTNcMjEyOzpyJworICAgICAgICBiJ1wyNTNcMzc3XGZcMFwwXDBcZlwwXDBcMFwwMDVcMFwwXDAwMGFmJworICAgICAgICBiJ2lsZWhlbGxvLEF3b3JsZFAnCisgICAgICAgIGInS1wwMDFcMDAyXDAyNFwwMDNcMDI0XDBcMFwwXDBcMCBcMjEzXDIxMjs6JworICAgICAgICBiJ3JcMjUzXDM3N1xmXDBcMFwwXGZcMFwwXDBcMDA1XDBcMFwwXDAnCisgICAgICAgIGInXDBcMFwwXDBcMFwwXDBcMjAwXDAwMVwwXDBcMFwwMDBhZmknCisgICAgICAgIGInbGVQS1wwMDVcMDA2XDBcMFwwXDBcMDAxXDBcMDAxXDAwMDNcMDAwJworICAgICAgICBiJ1wwXDAvXDBcMFwwXDBcMCcpCiAKIEByZXF1aXJlc196bGliCiBjbGFzcyBEZWZsYXRlQmFkQ3JjVGVzdHMoQWJzdHJhY3RCYWRDcmNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfREVGTEFURUQKICAgICB6aXBfd2l0aF9iYWRfY3JjID0gKAotICAgICAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAwXHgwMFx4MDhceDAwbn1ceDBjPUZBJwotICAgICAgICAgICAgYidLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJwotICAgICAgICAgICAgYidpbGVceGNiSFx4Y2RceGM5XHhjOVcoXHhjZi9ceGNhSVx4YzlceGEwJwotICAgICAgICAgICAgYic9XHgxM1x4MDBQS1x4MDFceDAyXHgxNFx4MDNceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBuJwotICAgICAgICAgICAgYid9XHgwYz1GQUtFXHgxMFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1JwotICAgICAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwJwotICAgICAgICAgICAgYidceDAwYWZpbGVQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwJwotICAgICAgICAgICAgYidceDAxXHgwMDNceDAwXHgwMFx4MDAzXHgwMFx4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDBceDAwXHgwOFx4MDBufVx4MGM9RkEnCisgICAgICAgIGInS0VceDEwXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKKyAgICAgICAgYidpbGVceGNiSFx4Y2RceGM5XHhjOVcoXHhjZi9ceGNhSVx4YzlceGEwJworICAgICAgICBiJz1ceDEzXHgwMFBLXHgwMVx4MDJceDE0XHgwM1x4MTRceDAwXHgwMFx4MDBceDA4XHgwMG4nCisgICAgICAgIGInfVx4MGM9RkFLRVx4MTBceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNScKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4ODBceDAxXHgwMFx4MDBceDAwJworICAgICAgICBiJ1x4MDBhZmlsZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAnCisgICAgICAgIGInXHgwMVx4MDAzXHgwMFx4MDBceDAwM1x4MDBceDAwXHgwMFx4MDBceDAwJykKIAogQHJlcXVpcmVzX2J6MgogY2xhc3MgQnppcDJCYWRDcmNUZXN0cyhBYnN0cmFjdEJhZENyY1Rlc3RzLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9CWklQMgogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFOFx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZUJaaDkxQVkmU1lceGQ0XHhhOFx4Y2EnCi0gICAgICAgICAgICBiJ1x4N2ZceDAwXHgwMFx4MGZceDExXHg4MEBceDAwXHgwNkRceDkwXHg4MCBceDAwIFx4YTUnCi0gICAgICAgICAgICBiJ1BceGQ5IVx4MDNceDAzXHgxM1x4MTNceDEzXHg4OVx4YTlceGE5XHhjMnU1Olx4OWYnCi0gICAgICAgICAgICBiJ1x4OGJceGI5Ilx4OWMoSGpUZT9ceDgwUEtceDAxXHgwMlx4MTQnCi0gICAgICAgICAgICBiJ1x4MDNceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkFLRTgnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDAnCi0gICAgICAgICAgICBiJ1x4MDAgXHg4MFx4ODBceDgxXHgwMFx4MDBceDAwXHgwMGFmaWxlUEsnCi0gICAgICAgICAgICBiJ1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDBceDAwW1x4MDAnCi0gICAgICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDAnKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkEnCisgICAgICAgIGInS0U4XHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBhZicKKyAgICAgICAgYidpbGVCWmg5MUFZJlNZXHhkNFx4YThceGNhJworICAgICAgICBiJ1x4N2ZceDAwXHgwMFx4MGZceDExXHg4MEBceDAwXHgwNkRceDkwXHg4MCBceDAwIFx4YTUnCisgICAgICAgIGInUFx4ZDkhXHgwM1x4MDNceDEzXHgxM1x4MTNceDg5XHhhOVx4YTlceGMydTU6XHg5ZicKKyAgICAgICAgYidceDhiXHhiOSJceDljKEhqVGU/XHg4MFBLXHgwMVx4MDJceDE0JworICAgICAgICBiJ1x4MDNceDE0XHgwM1x4MDBceDAwXHgwY1x4MDBudVx4MGM9RkFLRTgnCisgICAgICAgIGInXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsZVBLJworICAgICAgICBiJ1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDBceDAwW1x4MDAnCisgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCcpCiAKIEByZXF1aXJlc19sem1hCiBjbGFzcyBMem1hQmFkQ3JjVGVzdHMoQWJzdHJhY3RCYWRDcmNUZXN0cywgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGNvbXByZXNzaW9uID0gemlwZmlsZS5aSVBfTFpNQQogICAgIHppcF93aXRoX2JhZF9jcmMgPSAoCi0gICAgICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwM1x4MDBceDAwXHgwZVx4MDBudVx4MGM9RkEnCi0gICAgICAgICAgICBiJ0tFXHgxYlx4MDBceDAwXHgwMG5ceDAwXHgwMFx4MDBceDA1XHgwMFx4MDBceDAwYWYnCi0gICAgICAgICAgICBiJ2lsZVx0XHgwNFx4MDVceDAwXVx4MDBceDAwXHgwMFx4MDRceDAwNFx4MTlJJwotICAgICAgICAgICAgYidceGVlXHg4ZFx4ZTlceDE3XHg4OTozYFx0cSEuOFx4MDBQSycKLSAgICAgICAgICAgIGInXHgwMVx4MDJceDE0XHgwM1x4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKLSAgICAgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMFx4MDBceDAwXHgwMCBceDgwXHg4MFx4ODFceDAwXHgwMFx4MDBceDAwYWZpbCcKLSAgICAgICAgICAgIGInZVBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDNceDAwXHgwMCcKLSAgICAgICAgICAgIGInXHgwMD5ceDAwXHgwMFx4MDBceDAwXHgwMCcpCisgICAgICAgIGInUEtceDAzXHgwNFx4MTRceDAzXHgwMFx4MDBceDBlXHgwMG51XHgwYz1GQScKKyAgICAgICAgYidLRVx4MWJceDAwXHgwMFx4MDBuXHgwMFx4MDBceDAwXHgwNVx4MDBceDAwXHgwMGFmJworICAgICAgICBiJ2lsZVx0XHgwNFx4MDVceDAwXVx4MDBceDAwXHgwMFx4MDRceDAwNFx4MTlJJworICAgICAgICBiJ1x4ZWVceDhkXHhlOVx4MTdceDg5OjNgXHRxIS44XHgwMFBLJworICAgICAgICBiJ1x4MDFceDAyXHgxNFx4MDNceDE0XHgwM1x4MDBceDAwXHgwZVx4MDBudVx4MGM9RkEnCisgICAgICAgIGInS0VceDFiXHgwMFx4MDBceDAwblx4MDBceDAwXHgwMFx4MDVceDAwXHgwMFx4MDBceDAwXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDBceDAwIFx4ODBceDgwXHg4MVx4MDBceDAwXHgwMFx4MDBhZmlsJworICAgICAgICBiJ2VQS1x4MDVceDA2XHgwMFx4MDBceDAwXHgwMFx4MDFceDAwXHgwMVx4MDAzXHgwMFx4MDAnCisgICAgICAgIGInXHgwMD5ceDAwXHgwMFx4MDBceDAwXHgwMCcpCiAKIAogY2xhc3MgRGVjcnlwdGlvblRlc3RzKHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTEzMjUsMjIgKzE0ODUsMjIgQEAKICAgICBaSVAgZmlsZS4iIiIKIAogICAgIGRhdGEgPSAoCi0gICAgYidQS1x4MDNceDA0XHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwXHgxYVx4MDAnCi0gICAgYidceDAwXHgwMFx4MDhceDAwXHgwMFx4MDB0ZXN0LnR4dFx4ZmFceDEwXHhhMGdseXxceGZhLVx4YzVceGMwPVx4Zjl5JwotICAgIGInXHgxOFx4ZTBceGE4clx4YjNafUxnXHhiY1x4YWVceGY5fFx4OWJceDE5XHhlNFx4OGJceGJhXHhiYilceDhjXHhiMFx4ZGJsJwotICAgIGInUEtceDAxXHgwMlx4MTRceDAwXHgxNFx4MDBceDAxXHgwMFx4MDBceDAwblx4OTJpLiN5XHhlZj8mXHgwMFx4MDBceDAwJwotICAgIGInXHgxYVx4MDBceDAwXHgwMFx4MDhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAgXHgwMFx4YjZceDgxJwotICAgIGInXHgwMFx4MDBceDAwXHgwMHRlc3QudHh0UEtceDA1XHgwNlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMFx4MDFceDAwNlx4MDAnCi0gICAgYidceDAwXHgwMExceDAwXHgwMFx4MDBceDAwXHgwMCcgKQorICAgICAgICBiJ1BLXHgwM1x4MDRceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDBceDFhXHgwMCcKKyAgICAgICAgYidceDAwXHgwMFx4MDhceDAwXHgwMFx4MDB0ZXN0LnR4dFx4ZmFceDEwXHhhMGdseXxceGZhLVx4YzVceGMwPVx4Zjl5JworICAgICAgICBiJ1x4MThceGUwXHhhOHJceGIzWn1MZ1x4YmNceGFlXHhmOXxceDliXHgxOVx4ZTRceDhiXHhiYVx4YmIpXHg4Y1x4YjBceGRibCcKKyAgICAgICAgYidQS1x4MDFceDAyXHgxNFx4MDBceDE0XHgwMFx4MDFceDAwXHgwMFx4MDBuXHg5MmkuI3lceGVmPyZceDAwXHgwMFx4MDAnCisgICAgICAgIGInXHgxYVx4MDBceDAwXHgwMFx4MDhceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMVx4MDAgXHgwMFx4YjZceDgxJworICAgICAgICBiJ1x4MDBceDAwXHgwMFx4MDB0ZXN0LnR4dFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMVx4MDBceDAxXHgwMDZceDAwJworICAgICAgICBiJ1x4MDBceDAwTFx4MDBceDAwXHgwMFx4MDBceDAwJyApCiAgICAgZGF0YTIgPSAoCi0gICAgYidQS1x4MDNceDA0XHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyJwotICAgIGInXHgwMFx4MDBceDA0XHgwMFx4MTVceDAwemVyb1VUXHRceDAwXHgwM1x4ZDZceDhiXHg5MkdceGRhXHg4Ylx4OTJHVXhceDA0JwotICAgIGInXHgwMFx4ZThceDAzXHhlOFx4MDNceGM3PE1ceGI1YVx4Y2VYXHhhM1kmXHg4YntvRVx4ZDdceDlkXHg4Y1x4OThceDAyXHhjMCcKLSAgICBiJ1BLXHgwN1x4MDh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBQS1x4MDFceDAyXHgxN1x4MDMnCi0gICAgYidceDE0XHgwMFx0XHgwMFx4MDhceDAwXHhjZn0zOHh1XHhhYVx4YjJceDE0XHgwMFx4MDBceDAwXHgwMFx4MDJceDAwXHgwMCcKLSAgICBiJ1x4MDRceDAwXHJceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceGE0XHg4MVx4MDBceDAwXHgwMFx4MDB6ZScKLSAgICBiJ3JvVVRceDA1XHgwMFx4MDNceGQ2XHg4Ylx4OTJHVXhceDAwXHgwMFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMScKLSAgICBiJ1x4MDBceDAxXHgwMD9ceDAwXHgwMFx4MDBbXHgwMFx4MDBceDAwXHgwMFx4MDAnICkKKyAgICAgICAgYidQS1x4MDNceDA0XHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyJworICAgICAgICBiJ1x4MDBceDAwXHgwNFx4MDBceDE1XHgwMHplcm9VVFx0XHgwMFx4MDNceGQ2XHg4Ylx4OTJHXHhkYVx4OGJceDkyR1V4XHgwNCcKKyAgICAgICAgYidceDAwXHhlOFx4MDNceGU4XHgwM1x4Yzc8TVx4YjVhXHhjZVhceGEzWSZceDhie29FXHhkN1x4OWRceDhjXHg5OFx4MDJceGMwJworICAgICAgICBiJ1BLXHgwN1x4MDh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDBQS1x4MDFceDAyXHgxN1x4MDMnCisgICAgICAgIGInXHgxNFx4MDBcdFx4MDBceDA4XHgwMFx4Y2Z9Mzh4dVx4YWFceGIyXHgxNFx4MDBceDAwXHgwMFx4MDBceDAyXHgwMFx4MDAnCisgICAgICAgIGInXHgwNFx4MDBcclx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwXHgwMFx4YTRceDgxXHgwMFx4MDBceDAwXHgwMHplJworICAgICAgICBiJ3JvVVRceDA1XHgwMFx4MDNceGQ2XHg4Ylx4OTJHVXhceDAwXHgwMFBLXHgwNVx4MDZceDAwXHgwMFx4MDBceDAwXHgwMScKKyAgICAgICAgYidceDAwXHgwMVx4MDA/XHgwMFx4MDBceDAwW1x4MDBceDAwXHgwMFx4MDBceDAwJyApCiAKICAgICBwbGFpbiA9IGInemlwZmlsZS5weSBlbmNyeXB0aW9uIHRlc3QnCiAgICAgcGxhaW4yID0gYidceDAwJyo1MTIKQEAgLTE0OTcsNDYgKzE2NTcsMTA1IEBACiAKIEByZXF1aXJlc196bGliCiBjbGFzcyBUZXN0c1dpdGhNdWx0aXBsZU9wZW5zKHVuaXR0ZXN0LlRlc3RDYXNlKToKLSAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIHNldFVwQ2xhc3MoY2xzKToKKyAgICAgICAgY2xzLmRhdGExID0gYicxMTEnICsgZ2V0cmFuZGJ5dGVzKDEwMDAwKQorICAgICAgICBjbHMuZGF0YTIgPSBiJzIyMicgKyBnZXRyYW5kYnl0ZXMoMTAwMDApCisKKyAgICBkZWYgbWFrZV90ZXN0X2FyY2hpdmUoc2VsZiwgZik6CiAgICAgICAgICMgQ3JlYXRlIHRoZSBaSVAgYXJjaGl2ZQotICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAidyIsIHppcGZpbGUuWklQX0RFRkxBVEVEKSBhcyB6aXBmcDoKLSAgICAgICAgICAgIHppcGZwLndyaXRlc3RyKCdvbmVzJywgJzEnKkZJWEVEVEVTVF9TSVpFKQotICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ3R3b3MnLCAnMicqRklYRURURVNUX1NJWkUpCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGZwOgorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ29uZXMnLCBzZWxmLmRhdGExKQorICAgICAgICAgICAgemlwZnAud3JpdGVzdHIoJ3R3b3MnLCBzZWxmLmRhdGEyKQogCiAgICAgZGVmIHRlc3Rfc2FtZV9maWxlKHNlbGYpOgogICAgICAgICAjIFZlcmlmeSB0aGF0ICh3aGVuIHRoZSBaaXBGaWxlIGlzIGluIGNvbnRyb2wgb2YgY3JlYXRpbmcgZmlsZSBvYmplY3RzKQogICAgICAgICAjIG11bHRpcGxlIG9wZW4oKSBjYWxscyBjYW4gYmUgbWFkZSB3aXRob3V0IGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlci4KKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShURVNURk4yKQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZjoKICAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdvbmVzJykgYXMgem9wZW4xLCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjI6CiAgICAgICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCiAgICAgICAgICAgICAgICAgZGF0YTIgPSB6b3BlbjIucmVhZCg1MDApCi0gICAgICAgICAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoNTAwKQotICAgICAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCgpCisgICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgZGF0YTIpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBzZWxmLmRhdGExKQogCiAgICAgZGVmIHRlc3RfZGlmZmVyZW50X2ZpbGUoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCiAgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKFRFU1RGTjIpCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmOgogICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjEsIHppcGYub3BlbigndHdvcycpIGFzIHpvcGVuMjoKICAgICAgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKICAgICAgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKLSAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgYicxJypGSVhFRFRFU1RfU0laRSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIGInMicqRklYRURURVNUX1NJWkUpCisgICAgICAgICAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoKQorICAgICAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIHNlbGYuZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCBzZWxmLmRhdGEyKQogCiAgICAgZGVmIHRlc3RfaW50ZXJsZWF2ZWQoc2VsZik6CiAgICAgICAgICMgVmVyaWZ5IHRoYXQgKHdoZW4gdGhlIFppcEZpbGUgaXMgaW4gY29udHJvbCBvZiBjcmVhdGluZyBmaWxlIG9iamVjdHMpCiAgICAgICAgICMgbXVsdGlwbGUgb3BlbigpIGNhbGxzIGNhbiBiZSBtYWRlIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLgorICAgICAgICBzZWxmLm1ha2VfdGVzdF9hcmNoaXZlKFRFU1RGTjIpCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsIG1vZGU9InIiKSBhcyB6aXBmOgogICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjEsIHppcGYub3BlbigndHdvcycpIGFzIHpvcGVuMjoKICAgICAgICAgICAgICAgICBkYXRhMSA9IHpvcGVuMS5yZWFkKDUwMCkKICAgICAgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKLSAgICAgICAgICAgICAgICBkYXRhMSArPSB6b3BlbjEucmVhZCg1MDApCi0gICAgICAgICAgICAgICAgZGF0YTIgKz0gem9wZW4yLnJlYWQoNTAwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgYicxJypGSVhFRFRFU1RfU0laRSkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTIsIGInMicqRklYRURURVNUX1NJWkUpCisgICAgICAgICAgICAgICAgZGF0YTEgKz0gem9wZW4xLnJlYWQoKQorICAgICAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIHNlbGYuZGF0YTEpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCBzZWxmLmRhdGEyKQorCisgICAgZGVmIHRlc3RfcmVhZF9hZnRlcl9jbG9zZShzZWxmKToKKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShURVNURk4yKQorICAgICAgICB3aXRoIGNvbnRleHRsaWIuRXhpdFN0YWNrKCkgYXMgc3RhY2s6CisgICAgICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCAncicpIGFzIHppcGY6CisgICAgICAgICAgICAgICAgem9wZW4xID0gc3RhY2suZW50ZXJfY29udGV4dCh6aXBmLm9wZW4oJ29uZXMnKSkKKyAgICAgICAgICAgICAgICB6b3BlbjIgPSBzdGFjay5lbnRlcl9jb250ZXh0KHppcGYub3BlbigndHdvcycpKQorICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgICAgICBkYXRhMiA9IHpvcGVuMi5yZWFkKDUwMCkKKyAgICAgICAgICAgIGRhdGExICs9IHpvcGVuMS5yZWFkKCkKKyAgICAgICAgICAgIGRhdGEyICs9IHpvcGVuMi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgc2VsZi5kYXRhMikKKworICAgIGRlZiB0ZXN0X3JlYWRfYWZ0ZXJfd3JpdGUoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICd3JywgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCdvbmVzJywgc2VsZi5kYXRhMSkKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoJ3R3b3MnLCBzZWxmLmRhdGEyKQorICAgICAgICAgICAgd2l0aCB6aXBmLm9wZW4oJ29uZXMnKSBhcyB6b3BlbjE6CisgICAgICAgICAgICAgICAgZGF0YTEgPSB6b3BlbjEucmVhZCg1MDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGF0YTEsIHNlbGYuZGF0YTFbOjUwMF0pCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICdyJykgYXMgemlwZjoKKyAgICAgICAgICAgIGRhdGExID0gemlwZi5yZWFkKCdvbmVzJykKKyAgICAgICAgICAgIGRhdGEyID0gemlwZi5yZWFkKCd0d29zJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMSwgc2VsZi5kYXRhMSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkYXRhMiwgc2VsZi5kYXRhMikKKworICAgIGRlZiB0ZXN0X3dyaXRlX2FmdGVyX3JlYWQoc2VsZik6CisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTjIsICJ3IiwgemlwZmlsZS5aSVBfREVGTEFURUQpIGFzIHppcGY6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCdvbmVzJywgc2VsZi5kYXRhMSkKKyAgICAgICAgICAgIHdpdGggemlwZi5vcGVuKCdvbmVzJykgYXMgem9wZW4xOgorICAgICAgICAgICAgICAgIHpvcGVuMS5yZWFkKDUwMCkKKyAgICAgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCd0d29zJywgc2VsZi5kYXRhMikKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOMiwgJ3InKSBhcyB6aXBmOgorICAgICAgICAgICAgZGF0YTEgPSB6aXBmLnJlYWQoJ29uZXMnKQorICAgICAgICAgICAgZGF0YTIgPSB6aXBmLnJlYWQoJ3R3b3MnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGExLCBzZWxmLmRhdGExKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGRhdGEyLCBzZWxmLmRhdGEyKQorCisgICAgZGVmIHRlc3RfbWFueV9vcGVucyhzZWxmKToKKyAgICAgICAgIyBWZXJpZnkgdGhhdCByZWFkKCkgYW5kIG9wZW4oKSBwcm9tcHRseSBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yLAorICAgICAgICAjIGFuZCBkb24ndCByZWx5IG9uIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB0byBmcmVlIHJlc291cmNlcy4KKyAgICAgICAgc2VsZi5tYWtlX3Rlc3RfYXJjaGl2ZShURVNURk4yKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4yLCBtb2RlPSJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIGZvciB4IGluIHJhbmdlKDEwMCk6CisgICAgICAgICAgICAgICAgemlwZi5yZWFkKCdvbmVzJykKKyAgICAgICAgICAgICAgICB3aXRoIHppcGYub3Blbignb25lcycpIGFzIHpvcGVuMToKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICB3aXRoIG9wZW4ob3MuZGV2bnVsbCkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TGVzcyhmLmZpbGVubygpLCAxMDApCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIHVubGluayhURVNURk4yKQpAQCAtMTU1OCwxNCArMTc3Nyw1MSBAQAogICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oVEVTVEZOMiwgImEiKSkKICAgICAgICAgc2VsZi50ZXN0X2V4dHJhY3RfZGlyKCkKIAotICAgIGRlZiB0ZXN0X3N0b3JlX2RpcihzZWxmKToKKyAgICBkZWYgdGVzdF93cml0ZV9kaXIoc2VsZik6CisgICAgICAgIGRpcnBhdGggPSBvcy5wYXRoLmpvaW4oVEVTVEZOMiwgIngiKQorICAgICAgICBvcy5ta2RpcihkaXJwYXRoKQorICAgICAgICBtb2RlID0gb3Muc3RhdChkaXJwYXRoKS5zdF9tb2RlICYgMHhGRkZGCisgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInciKSBhcyB6aXBmOgorICAgICAgICAgICAgemlwZi53cml0ZShkaXJwYXRoKQorICAgICAgICAgICAgemluZm8gPSB6aXBmLmZpbGVsaXN0WzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoemluZm8uZmlsZW5hbWUuZW5kc3dpdGgoIi94LyIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aW5mby5leHRlcm5hbF9hdHRyLCAobW9kZSA8PCAxNikgfCAweDEwKQorICAgICAgICAgICAgemlwZi53cml0ZShkaXJwYXRoLCAieSIpCisgICAgICAgICAgICB6aW5mbyA9IHppcGYuZmlsZWxpc3RbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aW5mby5maWxlbmFtZSwgInkvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemluZm8uZXh0ZXJuYWxfYXR0ciwgKG1vZGUgPDwgMTYpIHwgMHgxMCkKKyAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCAiciIpIGFzIHppcGY6CisgICAgICAgICAgICB6aW5mbyA9IHppcGYuZmlsZWxpc3RbMF0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aW5mby5maWxlbmFtZS5lbmRzd2l0aCgiL3gvIikpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppbmZvLmV4dGVybmFsX2F0dHIsIChtb2RlIDw8IDE2KSB8IDB4MTApCisgICAgICAgICAgICB6aW5mbyA9IHppcGYuZmlsZWxpc3RbMV0KKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aW5mby5maWxlbmFtZSwgInkvIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemluZm8uZXh0ZXJuYWxfYXR0ciwgKG1vZGUgPDwgMTYpIHwgMHgxMCkKKyAgICAgICAgICAgIHRhcmdldCA9IG9zLnBhdGguam9pbihURVNURk4yLCAidGFyZ2V0IikKKyAgICAgICAgICAgIG9zLm1rZGlyKHRhcmdldCkKKyAgICAgICAgICAgIHppcGYuZXh0cmFjdGFsbCh0YXJnZXQpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUob3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4odGFyZ2V0LCAieSIpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKG9zLmxpc3RkaXIodGFyZ2V0KSksIDIpCisKKyAgICBkZWYgdGVzdF93cml0ZXN0cl9kaXIoc2VsZik6CiAgICAgICAgIG9zLm1rZGlyKG9zLnBhdGguam9pbihURVNURk4yLCAieCIpKQotICAgICAgICB6aXBmID0gemlwZmlsZS5aaXBGaWxlKFRFU1RGTiwgInciKQotICAgICAgICB6aXBmLndyaXRlKG9zLnBhdGguam9pbihURVNURk4yLCAieCIpLCAieCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSh6aXBmLmZpbGVsaXN0WzBdLmZpbGVuYW1lLmVuZHN3aXRoKCJ4LyIpKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICJ3IikgYXMgemlwZjoKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoIngvIiwgYicnKQorICAgICAgICAgICAgemluZm8gPSB6aXBmLmZpbGVsaXN0WzBdCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppbmZvLmZpbGVuYW1lLCAieC8iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aW5mby5leHRlcm5hbF9hdHRyLCAoMG80MDc3NSA8PCAxNikgfCAweDEwKQorICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShURVNURk4sICJyIikgYXMgemlwZjoKKyAgICAgICAgICAgIHppbmZvID0gemlwZi5maWxlbGlzdFswXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHppbmZvLmZpbGVuYW1lLmVuZHN3aXRoKCJ4LyIpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh6aW5mby5leHRlcm5hbF9hdHRyLCAoMG80MDc3NSA8PCAxNikgfCAweDEwKQorICAgICAgICAgICAgdGFyZ2V0ID0gb3MucGF0aC5qb2luKFRFU1RGTjIsICJ0YXJnZXQiKQorICAgICAgICAgICAgb3MubWtkaXIodGFyZ2V0KQorICAgICAgICAgICAgemlwZi5leHRyYWN0YWxsKHRhcmdldCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbih0YXJnZXQsICJ4IikpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvcy5saXN0ZGlyKHRhcmdldCksIFsieCJdKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzaHV0aWwucm10cmVlKFRFU1RGTjIpCisgICAgICAgIHJtdHJlZShURVNURk4yKQogICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhURVNURk4pOgogICAgICAgICAgICAgdW5saW5rKFRFU1RGTikKIApAQCAtMTU5OSw3ICsxODU1LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgZnA6CisgICAgICAgICAgICAgICAgd2l0aCBvcGVuVSh6aXBmcCwgZm4pIGFzIGZwOgogICAgICAgICAgICAgICAgICAgICB6aXBkYXRhID0gZnAucmVhZCgpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmFyY2RhdGFbc2VwXSwgemlwZGF0YSkKIApAQCAtMTYxMyw3ICsxODY5LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgemlwb3BlbjoKICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IGInJwogICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgogICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCA9IHppcG9wZW4ucmVhZGxpbmUoKQpAQCAtMTYzOCw3ICsxODk0LDcgQEAKICAgICAgICAgIyBSZWFkIHRoZSBaSVAgYXJjaGl2ZQogICAgICAgICB3aXRoIHppcGZpbGUuWmlwRmlsZShmLCAiciIpIGFzIHppcGZwOgogICAgICAgICAgICAgZm9yIHNlcCwgZm4gaW4gc2VsZi5hcmNmaWxlcy5pdGVtcygpOgotICAgICAgICAgICAgICAgIHdpdGggemlwZnAub3BlbihmbiwgInJVIikgYXMgemlwb3BlbjoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgemlwb3BlbjoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lX2dlbjoKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVkYXRhID0gemlwb3Blbi5yZWFkbGluZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmVkYXRhLCBsaW5lICsgYidcbicpCkBAIC0xNjUzLDcgKzE5MDksNyBAQAogICAgICAgICAjIFJlYWQgdGhlIFpJUCBhcmNoaXZlCiAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGYsICJyIikgYXMgemlwZnA6CiAgICAgICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICAgICAgd2l0aCB6aXBmcC5vcGVuKGZuLCAiclUiKSBhcyBmcDoKKyAgICAgICAgICAgICAgICB3aXRoIG9wZW5VKHppcGZwLCBmbikgYXMgZnA6CiAgICAgICAgICAgICAgICAgICAgIHppcGxpbmVzID0gZnAucmVhZGxpbmVzKCkKICAgICAgICAgICAgICAgICBmb3IgbGluZSwgemlwbGluZSBpbiB6aXAoc2VsZi5saW5lX2dlbiwgemlwbGluZXMpOgogICAgICAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHppcGxpbmUsIGxpbmUgKyBiJ1xuJykKQEAgLTE2NjgsNyArMTkyNCw3IEBACiAgICAgICAgICMgUmVhZCB0aGUgWklQIGFyY2hpdmUKICAgICAgICAgd2l0aCB6aXBmaWxlLlppcEZpbGUoZiwgInIiKSBhcyB6aXBmcDoKICAgICAgICAgICAgIGZvciBzZXAsIGZuIGluIHNlbGYuYXJjZmlsZXMuaXRlbXMoKToKLSAgICAgICAgICAgICAgICB3aXRoIHppcGZwLm9wZW4oZm4sICJyVSIpIGFzIGZwOgorICAgICAgICAgICAgICAgIHdpdGggb3BlblUoemlwZnAsIGZuKSBhcyBmcDoKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUsIHppcGxpbmUgaW4gemlwKHNlbGYubGluZV9nZW4sIGZwKToKICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoemlwbGluZSwgbGluZSArIGInXG4nKQogCkBAIC0xNjc4LDcgKzE5MzQsNyBAQAogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBmb3Igc2VwLCBmbiBpbiBzZWxmLmFyY2ZpbGVzLml0ZW1zKCk6Ci0gICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgICAgICB1bmxpbmsoZm4pCiAgICAgICAgIHVubGluayhURVNURk4pCiAgICAgICAgIHVubGluayhURVNURk4yKQogCkBAIC0xNzAyLDYgKzE5NTgsNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgY29tcHJlc3Npb24gPSB6aXBmaWxlLlpJUF9MWk1BCiAKLQogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwZmlsZTY0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKaW5kZXggYThmYjdhYi4uN2RlYThhMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBmaWxlNjQucHkKQEAgLTE4LDcgKzE4LDcgQEAKIGZyb20gaW8gaW1wb3J0IFN0cmluZ0lPCiBmcm9tIHRlbXBmaWxlIGltcG9ydCBUZW1wb3JhcnlGaWxlCiAKLWZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCBURVNURk4sIHJ1bl91bml0dGVzdCwgcmVxdWlyZXNfemxpYgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IFRFU1RGTiwgcmVxdWlyZXNfemxpYgogCiBURVNURk4yID0gVEVTVEZOICsgIjIiCiAKQEAgLTM4LDcgKzM4LDcgQEAKIAogICAgIGRlZiB6aXBUZXN0KHNlbGYsIGYsIGNvbXByZXNzaW9uKToKICAgICAgICAgIyBDcmVhdGUgdGhlIFpJUCBhcmNoaXZlLgotICAgICAgICB6aXBmcCA9IHppcGZpbGUuWmlwRmlsZShmLCAidyIsIGNvbXByZXNzaW9uLCBhbGxvd1ppcDY0PVRydWUpCisgICAgICAgIHppcGZwID0gemlwZmlsZS5aaXBGaWxlKGYsICJ3IiwgY29tcHJlc3Npb24pCiAKICAgICAgICAgIyBJdCB3aWxsIGNvbnRhaW4gZW5vdWdoIGNvcGllcyBvZiBzZWxmLmRhdGEgdG8gcmVhY2ggYWJvdXQgNkdCIG9mCiAgICAgICAgICMgcmF3IGRhdGEgdG8gc3RvcmUuCkBAIC05Miw3ICs5Miw3IEBACiAgICAgZGVmIHRlc3RNb3JlVGhhbjY0a0ZpbGVzKHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCBjaGVja3MgdGhhdCBtb3JlIHRoYW4gNjRrIGZpbGVzIGNhbiBiZSBhZGRlZCB0byBhbiBhcmNoaXZlLAogICAgICAgICAjIGFuZCB0aGF0IHRoZSByZXN1bHRpbmcgYXJjaGl2ZSBjYW4gYmUgcmVhZCBwcm9wZXJseSBieSBaaXBGaWxlCi0gICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJ3IikKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciLCBhbGxvd1ppcDY0PVRydWUpCiAgICAgICAgIHppcGYuZGVidWcgPSAxMDAKICAgICAgICAgbnVtZmlsZXMgPSAoMSA8PCAxNikgKiAzLy8yCiAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bWZpbGVzKToKQEAgLTEwNSwxNCArMTA1LDQ3IEBACiAgICAgICAgIGZvciBpIGluIHJhbmdlKG51bWZpbGVzKToKICAgICAgICAgICAgIGNvbnRlbnQgPSB6aXBmMi5yZWFkKCJmb28lMDhkIiAlIGkpLmRlY29kZSgnYXNjaWknKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50LCAiJWQiICUgKGkqKjMgJSA1NykpCisgICAgICAgIHppcGYyLmNsb3NlKCkKKworICAgIGRlZiB0ZXN0TW9yZVRoYW42NGtGaWxlc0FwcGVuZChzZWxmKToKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9InciLCBhbGxvd1ppcDY0PUZhbHNlKQorICAgICAgICB6aXBmLmRlYnVnID0gMTAwCisgICAgICAgIG51bWZpbGVzID0gKDEgPDwgMTYpIC0gMQorICAgICAgICBmb3IgaSBpbiByYW5nZShudW1maWxlcyk6CisgICAgICAgICAgICB6aXBmLndyaXRlc3RyKCJmb28lMDhkIiAlIGksICIlZCIgJSAoaSoqMyAlIDU3KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoemlwZmlsZS5MYXJnZVppcEZpbGUpOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vJTA4ZCIgJSBudW1maWxlcywgYicnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih6aXBmLm5hbWVsaXN0KCkpLCBudW1maWxlcykKICAgICAgICAgemlwZi5jbG9zZSgpCiAKKyAgICAgICAgemlwZiA9IHppcGZpbGUuWmlwRmlsZShURVNURk4sIG1vZGU9ImEiLCBhbGxvd1ppcDY0PUZhbHNlKQorICAgICAgICB6aXBmLmRlYnVnID0gMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHppcGZpbGUuTGFyZ2VaaXBGaWxlKToKKyAgICAgICAgICAgIHppcGYud3JpdGVzdHIoImZvbyUwOGQiICUgbnVtZmlsZXMsIGInJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZi5uYW1lbGlzdCgpKSwgbnVtZmlsZXMpCisgICAgICAgIHppcGYuY2xvc2UoKQorCisgICAgICAgIHppcGYgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJhIiwgYWxsb3daaXA2ND1UcnVlKQorICAgICAgICB6aXBmLmRlYnVnID0gMTAwCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzKQorICAgICAgICBudW1maWxlczIgPSAoMSA8PCAxNikgKiAzLy8yCisgICAgICAgIGZvciBpIGluIHJhbmdlKG51bWZpbGVzLCBudW1maWxlczIpOgorICAgICAgICAgICAgemlwZi53cml0ZXN0cigiZm9vJTA4ZCIgJSBpLCAiJWQiICUgKGkqKjMgJSA1NykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHppcGYubmFtZWxpc3QoKSksIG51bWZpbGVzMikKKyAgICAgICAgemlwZi5jbG9zZSgpCisKKyAgICAgICAgemlwZjIgPSB6aXBmaWxlLlppcEZpbGUoVEVTVEZOLCBtb2RlPSJyIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oemlwZjIubmFtZWxpc3QoKSksIG51bWZpbGVzMikKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2UobnVtZmlsZXMyKToKKyAgICAgICAgICAgIGNvbnRlbnQgPSB6aXBmMi5yZWFkKCJmb28lMDhkIiAlIGkpLmRlY29kZSgnYXNjaWknKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb250ZW50LCAiJWQiICUgKGkqKjMgJSA1NykpCisgICAgICAgIHppcGYyLmNsb3NlKCkKKwogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKICAgICAgICAgc3VwcG9ydC51bmxpbmsoVEVTVEZOKQogICAgICAgICBzdXBwb3J0LnVubGluayhURVNURk4yKQogCi1kZWYgdGVzdF9tYWluKCk6Ci0gICAgcnVuX3VuaXR0ZXN0KFRlc3RzV2l0aFNvdXJjZUZpbGUsIE90aGVyVGVzdHMpCi0KIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6Ci0gICAgdGVzdF9tYWluKCkKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKaW5kZXggMzc2MDNiOS4uMWUzNTFjOCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnQucHkKQEAgLTEsMTMgKzEsMTIgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IG1hcnNoYWwKLWltcG9ydCBpbXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKIGltcG9ydCB1bml0dGVzdAogCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKLWZyb20gdGVzdC50ZXN0X2ltcG9ydGhvb2tzIGltcG9ydCBJbXBvcnRIb29rc0Jhc2VUZXN0Q2FzZSwgdGVzdF9zcmMsIHRlc3RfY28KIAogZnJvbSB6aXBmaWxlIGltcG9ydCBaaXBGaWxlLCBaaXBJbmZvLCBaSVBfU1RPUkVELCBaSVBfREVGTEFURUQKIApAQCAtMTcsNiArMTYsMTQgQEAKIGltcG9ydCBpbnNwZWN0CiBpbXBvcnQgaW8KIGZyb20gdHJhY2ViYWNrIGltcG9ydCBleHRyYWN0X3RiLCBleHRyYWN0X3N0YWNrLCBwcmludF90YgorCit0ZXN0X3NyYyA9ICIiIlwKK2RlZiBnZXRfbmFtZSgpOgorICAgIHJldHVybiBfX25hbWVfXworZGVmIGdldF9maWxlKCk6CisgICAgcmV0dXJuIF9fZmlsZV9fCisiIiIKK3Rlc3RfY28gPSBjb21waWxlKHRlc3Rfc3JjLCAiPD8/Pz4iLCAiZXhlYyIpCiByYWlzZV9zcmMgPSAnZGVmIGRvX3JhaXNlKCk6IHJhaXNlIFR5cGVFcnJvclxuJwogCiBkZWYgbWFrZV9weWMoY28sIG10aW1lLCBzaXplKToKQEAgLTI3LDcgKzM0LDggQEAKICAgICAgICAgICAgIG10aW1lID0gaW50KG10aW1lKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgbXRpbWUgPSBpbnQoLTB4MTAwMDAwMDAwICsgaW50KG10aW1lKSkKLSAgICBweWMgPSBpbXAuZ2V0X21hZ2ljKCkgKyBzdHJ1Y3QucGFjaygiPGlpIiwgaW50KG10aW1lKSwgc2l6ZSAmIDB4RkZGRkZGRkYpICsgZGF0YQorICAgIHB5YyA9IChpbXBvcnRsaWIudXRpbC5NQUdJQ19OVU1CRVIgKworICAgICAgICBzdHJ1Y3QucGFjaygiPGlpIiwgaW50KG10aW1lKSwgc2l6ZSAmIDB4RkZGRkZGRkYpICsgZGF0YSkKICAgICByZXR1cm4gcHljCiAKIGRlZiBtb2R1bGVfcGF0aF90b19kb3R0ZWRfbmFtZShwYXRoKToKQEAgLTQyLDEwICs1MCwyNyBAQAogVEVTVFBBQ0syID0gInppcHRlc3RwYWNrYWdlMiIKIFRFTVBfWklQID0gb3MucGF0aC5hYnNwYXRoKCJqdW5rOTUxNDIuemlwIikKIAotcHljX2ZpbGUgPSBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoVEVTVE1PRCArICcucHknKQorcHljX2ZpbGUgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShURVNUTU9EICsgJy5weScpCiBweWNfZXh0ID0gKCcucHljJyBpZiBfX2RlYnVnX18gZWxzZSAnLnB5bycpCiAKIAorY2xhc3MgSW1wb3J0SG9va3NCYXNlVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnBhdGggPSBzeXMucGF0aFs6XQorICAgICAgICBzZWxmLm1ldGFfcGF0aCA9IHN5cy5tZXRhX3BhdGhbOl0KKyAgICAgICAgc2VsZi5wYXRoX2hvb2tzID0gc3lzLnBhdGhfaG9va3NbOl0KKyAgICAgICAgc3lzLnBhdGhfaW1wb3J0ZXJfY2FjaGUuY2xlYXIoKQorICAgICAgICBzZWxmLm1vZHVsZXNfYmVmb3JlID0gc3VwcG9ydC5tb2R1bGVzX3NldHVwKCkKKworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgc3lzLnBhdGhbOl0gPSBzZWxmLnBhdGgKKyAgICAgICAgc3lzLm1ldGFfcGF0aFs6XSA9IHNlbGYubWV0YV9wYXRoCisgICAgICAgIHN5cy5wYXRoX2hvb2tzWzpdID0gc2VsZi5wYXRoX2hvb2tzCisgICAgICAgIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlLmNsZWFyKCkKKyAgICAgICAgc3VwcG9ydC5tb2R1bGVzX2NsZWFudXAoKnNlbGYubW9kdWxlc19iZWZvcmUpCisKKwogY2xhc3MgVW5jb21wcmVzc2VkWmlwSW1wb3J0VGVzdENhc2UoSW1wb3J0SG9va3NCYXNlVGVzdENhc2UpOgogCiAgICAgY29tcHJlc3Npb24gPSBaSVBfU1RPUkVECkBAIC0xOTYsNiArMjIxLDcgQEAKICAgICAgICAgICAgIGZvciBuYW1lLCAobXRpbWUsIGRhdGEpIGluIGZpbGVzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgemluZm8gPSBaaXBJbmZvKG5hbWUsIHRpbWUubG9jYWx0aW1lKG10aW1lKSkKICAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgorICAgICAgICAgICAgICAgIHppbmZvLmNvbW1lbnQgPSBiInNwYW0iCiAgICAgICAgICAgICAgICAgei53cml0ZXN0cih6aW5mbywgZGF0YSkKICAgICAgICAgICAgIHouY2xvc2UoKQogCkBAIC0yNDUsNiArMjcxLDcgQEAKICAgICAgICAgICAgIGZvciBuYW1lLCAobXRpbWUsIGRhdGEpIGluIGZpbGVzLml0ZW1zKCk6CiAgICAgICAgICAgICAgICAgemluZm8gPSBaaXBJbmZvKG5hbWUsIHRpbWUubG9jYWx0aW1lKG10aW1lKSkKICAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc190eXBlID0gc2VsZi5jb21wcmVzc2lvbgorICAgICAgICAgICAgICAgIHppbmZvLmNvbW1lbnQgPSBiImVnZ3MiCiAgICAgICAgICAgICAgICAgei53cml0ZXN0cih6aW5mbywgZGF0YSkKICAgICAgICAgICAgIHouY2xvc2UoKQogCkBAIC00NTksNyArNDg2LDcgQEAKIAogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHoubG9hZF9tb2R1bGUsICdhYmMnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHouZ2V0X2NvZGUsICdhYmMnKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSU9FcnJvciwgei5nZXRfZGF0YSwgJ2FiYycpCisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhPU0Vycm9yLCB6LmdldF9kYXRhLCAnYWJjJykKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKGVycm9yLCB6LmdldF9zb3VyY2UsICdhYmMnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoZXJyb3IsIHouaXNfcGFja2FnZSwgJ2FiYycpCiAgICAgICAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5IGIvTGliL3Rlc3QvdGVzdF96aXBpbXBvcnRfc3VwcG9ydC5weQppbmRleCBmN2YzMzk4Li42NmMzNTU3IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3ppcGltcG9ydF9zdXBwb3J0LnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfemlwaW1wb3J0X3N1cHBvcnQucHkKQEAgLTU3LDcgKzU3LDcgQEAKICAgICAjIFRoaXMgdXNlZCB0byB1c2UgdGhlIEltcG9ydEhvb2tzQmFzZVRlc3RDYXNlIHRvIHJlc3RvcmUKICAgICAjIHRoZSBzdGF0ZSBvZiB0aGUgaW1wb3J0IHJlbGF0ZWQgaW5mb3JtYXRpb24KICAgICAjIGluIHRoZSBzeXMgbW9kdWxlIGFmdGVyIGVhY2ggdGVzdC4gSG93ZXZlciwgdGhhdCByZXN0b3JlcwotICAgICMgKnRvbyBtdWNoKiBpbmZvcm1hdGlvbiBhbmQgYnJlYWtzIGZvciB0aGUgaW52b2NhdGlvbiBvZgorICAgICMgKnRvbyBtdWNoKiBpbmZvcm1hdGlvbiBhbmQgYnJlYWtzIGZvciB0aGUgaW52b2NhdGlvbgogICAgICMgb2YgdGVzdF9kb2N0ZXN0LiBTbyB3ZSBkbyBvdXIgb3duIHRoaW5nIGFuZCBsZWF2ZQogICAgICMgc3lzLm1vZHVsZXMgYWxvbmUuCiAgICAgIyBXZSBhbHNvIGNsZWFyIHRoZSBsaW5lY2FjaGUgYW5kIHppcGltcG9ydCBjYWNoZQpAQCAtMjI3LDEzICsyMjcsMTUgQEAKICAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oc2NyaXB0X25hbWUpCiAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKGInbFxuJykKICAgICAgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihzY3JpcHRfbmFtZS5lbmNvZGUoJ3V0Zi04JyksIGRhdGEpCisgICAgICAgICAgICAjIGJkYi9wZGIgYXBwbGllcyBub3JtY2FzZSB0byBpdHMgZmlsZW5hbWUgYmVmb3JlIGRpc3BsYXlpbmcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5ub3JtY2FzZShzY3JpcHRfbmFtZS5lbmNvZGUoJ3V0Zi04JykpLCBkYXRhKQogICAgICAgICAgICAgemlwX25hbWUsIHJ1bl9uYW1lID0gbWFrZV96aXBfc2NyaXB0KGQsICJ0ZXN0X3ppcCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3JpcHRfbmFtZSwgJ19fbWFpbl9fLnB5JykKICAgICAgICAgICAgIHAgPSBzcGF3bl9weXRob24oemlwX25hbWUpCiAgICAgICAgICAgICBwLnN0ZGluLndyaXRlKGInbFxuJykKICAgICAgICAgICAgIGRhdGEgPSBraWxsX3B5dGhvbihwKQotICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihydW5fbmFtZS5lbmNvZGUoJ3V0Zi04JyksIGRhdGEpCisgICAgICAgICAgICAjIGJkYi9wZGIgYXBwbGllcyBub3JtY2FzZSB0byBpdHMgZmlsZW5hbWUgYmVmb3JlIGRpc3BsYXlpbmcKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MucGF0aC5ub3JtY2FzZShydW5fbmFtZS5lbmNvZGUoJ3V0Zi04JykpLCBkYXRhKQogCiAKIGRlZiB0ZXN0X21haW4oKToKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfemxpYi5weSBiL0xpYi90ZXN0L3Rlc3RfemxpYi5weQppbmRleCAxZGFhOGY4Li5lMTU3NWM0IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3psaWIucHkKKysrIGIvTGliL3Rlc3QvdGVzdF96bGliLnB5CkBAIC0xLDYgKzEsNyBAQAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKIGltcG9ydCBiaW5hc2NpaQoraW1wb3J0IHBpY2tsZQogaW1wb3J0IHJhbmRvbQogaW1wb3J0IHN5cwogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IGJpZ21lbXRlc3QsIF8xRywgXzRHCkBAIC0yMjIsOSArMjIzLDkgQEAKICAgICAgICAgbGV2ZWwgPSAyCiAgICAgICAgIG1ldGhvZCA9IHpsaWIuREVGTEFURUQKICAgICAgICAgd2JpdHMgPSAtMTIKLSAgICAgICAgbWVtbGV2ZWwgPSA5CisgICAgICAgIG1lbUxldmVsID0gOQogICAgICAgICBzdHJhdGVneSA9IHpsaWIuWl9GSUxURVJFRAotICAgICAgICBjbyA9IHpsaWIuY29tcHJlc3NvYmoobGV2ZWwsIG1ldGhvZCwgd2JpdHMsIG1lbWxldmVsLCBzdHJhdGVneSkKKyAgICAgICAgY28gPSB6bGliLmNvbXByZXNzb2JqKGxldmVsLCBtZXRob2QsIHdiaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpCiAgICAgICAgIHgxID0gY28uY29tcHJlc3MoSEFNTEVUX1NDRU5FKQogICAgICAgICB4MiA9IGNvLmZsdXNoKCkKICAgICAgICAgZGNvID0gemxpYi5kZWNvbXByZXNzb2JqKHdiaXRzKQpAQCAtMjMyLDYgKzIzMywxMCBAQAogICAgICAgICB5MiA9IGRjby5mbHVzaCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoSEFNTEVUX1NDRU5FLCB5MSArIHkyKQogCisgICAgICAgICMga2V5d29yZCBhcmd1bWVudHMgc2hvdWxkIGFsc28gYmUgc3VwcG9ydGVkCisgICAgICAgIHpsaWIuY29tcHJlc3NvYmoobGV2ZWw9bGV2ZWwsIG1ldGhvZD1tZXRob2QsIHdiaXRzPXdiaXRzLAorICAgICAgICAgICAgbWVtTGV2ZWw9bWVtTGV2ZWwsIHN0cmF0ZWd5PXN0cmF0ZWd5LCB6ZGljdD1iIiIpCisKICAgICBkZWYgdGVzdF9jb21wcmVzc2luY3JlbWVudGFsKHNlbGYpOgogICAgICAgICAjIGNvbXByZXNzIG9iamVjdCBpbiBzdGVwcywgZGVjb21wcmVzcyBvYmplY3QgYXMgb25lLXNob3QKICAgICAgICAgZGF0YSA9IEhBTUxFVF9TQ0VORSAqIDEyOApAQCAtNTk2LDYgKzYwMSwxNiBAQAogICAgICAgICBkLmZsdXNoKCkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgZC5jb3B5KQogCisgICAgZGVmIHRlc3RfY29tcHJlc3NwaWNrbGUoc2VsZik6CisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcygoVHlwZUVycm9yLCBwaWNrbGUuUGlja2xpbmdFcnJvcikpOgorICAgICAgICAgICAgICAgIHBpY2tsZS5kdW1wcyh6bGliLmNvbXByZXNzb2JqKHpsaWIuWl9CRVNUX0NPTVBSRVNTSU9OKSwgcHJvdG8pCisKKyAgICBkZWYgdGVzdF9kZWNvbXByZXNzcGlja2xlKHNlbGYpOgorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoKFR5cGVFcnJvciwgcGlja2xlLlBpY2tsaW5nRXJyb3IpKToKKyAgICAgICAgICAgICAgICBwaWNrbGUuZHVtcHMoemxpYi5kZWNvbXByZXNzb2JqKCksIHByb3RvKQorCiAgICAgIyBNZW1vcnkgdXNlIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHRha2VzIGludG8gYWNjb3VudCBvdmVyYWxsb2NhdGlvbgogCiAgICAgQGJpZ21lbXRlc3Qoc2l6ZT1fMUcgKyAxMDI0ICogMTAyNCwgbWVtdXNlPTMpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5IGIvTGliL3Rlc3QvdGZfaW5oZXJpdF9jaGVjay5weQppbmRleCA5MmViZDk1Li5hZmU1MGQyIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90Zl9pbmhlcml0X2NoZWNrLnB5CisrKyBiL0xpYi90ZXN0L3RmX2luaGVyaXRfY2hlY2sucHkKQEAgLTExLDcgKzExLDcgQEAKIAogICAgIHRyeToKICAgICAgICAgb3Mud3JpdGUoZmQsIGIiYmxhdCIpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIFN1Y2Nlc3MgLS0gY291bGQgbm90IHdyaXRlIHRvIGZkLgogICAgICAgICBzeXMuZXhpdCgwKQogICAgIGVsc2U6CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90aW1lX2hhc2hsaWIucHkgYi9MaWIvdGVzdC90aW1lX2hhc2hsaWIucHkKaW5kZXggZDkzOTQ2My4uMjU4NWVjYiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGltZV9oYXNobGliLnB5CisrKyBiL0xpYi90ZXN0L3RpbWVfaGFzaGxpYi5weQpAQCAtMSw3ICsxLDggQEAKICMgSXQncyBpbnRlbmRlZCB0aGF0IHRoaXMgc2NyaXB0IGJlIHJ1biBieSBoYW5kLiAgSXQgcnVucyBzcGVlZCB0ZXN0cyBvbgogIyBoYXNobGliIGZ1bmN0aW9uczsgaXQgZG9lcyBub3QgdGVzdCBmb3IgY29ycmVjdG5lc3MuCiAKLWltcG9ydCBzeXMsIHRpbWUKK2ltcG9ydCBzeXMKK2ltcG9ydCB0aW1lCiBpbXBvcnQgaGFzaGxpYgogCiAKQEAgLTksOCArMTAsOCBAQAogICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiZWVrLCBjcmVhdG9yRnVuYyBub3Qgb3ZlcnJpZGRlbiIpCiAKIGRlZiB0ZXN0X3NjYWxlZF9tc2coc2NhbGUsIG5hbWUpOgotICAgIGl0ZXJhdGlvbnMgPSAxMDYyMDEvc2NhbGUgKiAyMAotICAgIGxvbmdTdHIgPSAnWicqc2NhbGUKKyAgICBpdGVyYXRpb25zID0gMTA2MjAxLy9zY2FsZSAqIDIwCisgICAgbG9uZ1N0ciA9IGInWicqc2NhbGUKIAogICAgIGxvY2FsQ0YgPSBjcmVhdG9yRnVuYwogICAgIHN0YXJ0ID0gdGltZS50aW1lKCkKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sIGIvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwKaW5kZXggOWFmOTJmYi4uOTIxMzZkYSAxMDA2NDQKLS0tIGEvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwKKysrIGIvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwKQEAgLTEsNCArMSw0IEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9Imlzby04ODU5LTEiPz4KIDxIVE1MIHhtbG5zOnBwPSJodHRwOi8vd3d3Lmlzb2dlbi5jb20vcGF1bC9wb3N0LXByb2Nlc3NvciI+CiA8VElUTEU+SW50cm9kdWN0aW9uIHRvIFhTTDwvVElUTEU+CiA8SDE+SW50cm9kdWN0aW9uIHRvIFhTTDwvSDE+CkBAIC0xMTAsNiArMTEwLDYgQEAKIAkJPC9VTD4KIAkKIAotCiu1CiAJCiA8L0hUTUw+CmRpZmYgLS1naXQgYS9MaWIvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbC5vdXQgYi9MaWIvdGVzdC94bWx0ZXN0ZGF0YS90ZXN0LnhtbC5vdXQKaW5kZXggZDRhYjFhYi4uZjdlOWFkMiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QveG1sdGVzdGRhdGEvdGVzdC54bWwub3V0CisrKyBiL0xpYi90ZXN0L3htbHRlc3RkYXRhL3Rlc3QueG1sLm91dApAQCAtMTEwLDYgKzExMCw2IEBACiAJCTwvVUw+CiAJCiAKLQortQogCQogPC9IVE1MPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xpYi90ZXh0d3JhcC5weSBiL0xpYi90ZXh0d3JhcC5weQppbmRleCA3MDI0ZDRkLi4xNzU5YjBkIDEwMDY0NAotLS0gYS9MaWIvdGV4dHdyYXAucHkKKysrIGIvTGliL3RleHR3cmFwLnB5CkBAIC03LDcgKzcsNyBAQAogCiBpbXBvcnQgcmUKIAotX19hbGxfXyA9IFsnVGV4dFdyYXBwZXInLCAnd3JhcCcsICdmaWxsJywgJ2RlZGVudCcsICdpbmRlbnQnXQorX19hbGxfXyA9IFsnVGV4dFdyYXBwZXInLCAnd3JhcCcsICdmaWxsJywgJ2RlZGVudCcsICdpbmRlbnQnLCAnc2hvcnRlbiddCiAKICMgSGFyZGNvZGUgdGhlIHJlY29nbml6ZWQgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHRvIHRoZSBVUy1BU0NJSQogIyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuICBUaGUgbWFpbiByZWFzb24gZm9yIGRvaW5nIHRoaXMgaXMgdGhhdCBpbgpAQCAtNjIsNiArNjIsMTAgQEAKICAgICAgICAgY29tcG91bmQgd29yZHMuCiAgICAgICBkcm9wX3doaXRlc3BhY2UgKGRlZmF1bHQ6IHRydWUpCiAgICAgICAgIERyb3AgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSBmcm9tIGxpbmVzLgorICAgICAgbWF4X2xpbmVzIChkZWZhdWx0OiBOb25lKQorICAgICAgICBUcnVuY2F0ZSB3cmFwcGVkIGxpbmVzLgorICAgICAgcGxhY2Vob2xkZXIgKGRlZmF1bHQ6ICcgWy4uLl0nKQorICAgICAgICBBcHBlbmQgdG8gdGhlIGxhc3QgbGluZSBvZiB0cnVuY2F0ZWQgdGV4dC4KICAgICAiIiIKIAogICAgIHVuaWNvZGVfd2hpdGVzcGFjZV90cmFucyA9IHt9CkBAIC0xMDQsNyArMTA4LDEwIEBACiAgICAgICAgICAgICAgICAgIGJyZWFrX2xvbmdfd29yZHM9VHJ1ZSwKICAgICAgICAgICAgICAgICAgZHJvcF93aGl0ZXNwYWNlPVRydWUsCiAgICAgICAgICAgICAgICAgIGJyZWFrX29uX2h5cGhlbnM9VHJ1ZSwKLSAgICAgICAgICAgICAgICAgdGFic2l6ZT04KToKKyAgICAgICAgICAgICAgICAgdGFic2l6ZT04LAorICAgICAgICAgICAgICAgICAqLAorICAgICAgICAgICAgICAgICBtYXhfbGluZXM9Tm9uZSwKKyAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9JyBbLi4uXScpOgogICAgICAgICBzZWxmLndpZHRoID0gd2lkdGgKICAgICAgICAgc2VsZi5pbml0aWFsX2luZGVudCA9IGluaXRpYWxfaW5kZW50CiAgICAgICAgIHNlbGYuc3Vic2VxdWVudF9pbmRlbnQgPSBzdWJzZXF1ZW50X2luZGVudApAQCAtMTE1LDYgKzEyMiw4IEBACiAgICAgICAgIHNlbGYuZHJvcF93aGl0ZXNwYWNlID0gZHJvcF93aGl0ZXNwYWNlCiAgICAgICAgIHNlbGYuYnJlYWtfb25faHlwaGVucyA9IGJyZWFrX29uX2h5cGhlbnMKICAgICAgICAgc2VsZi50YWJzaXplID0gdGFic2l6ZQorICAgICAgICBzZWxmLm1heF9saW5lcyA9IG1heF9saW5lcworICAgICAgICBzZWxmLnBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIKIAogCiAgICAgIyAtLSBQcml2YXRlIG1ldGhvZHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyNCw3ICsxMzMsNyBAQAogICAgICAgICAiIiJfbXVuZ2Vfd2hpdGVzcGFjZSh0ZXh0IDogc3RyaW5nKSAtPiBzdHJpbmcKIAogICAgICAgICBNdW5nZSB3aGl0ZXNwYWNlIGluIHRleHQ6IGV4cGFuZCB0YWJzIGFuZCBjb252ZXJ0IGFsbCBvdGhlcgotICAgICAgICB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gc3BhY2VzLiAgRWcuICIgZm9vXHRiYXJcblxuYmF6IgorICAgICAgICB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMgdG8gc3BhY2VzLiAgRWcuICIgZm9vXFx0YmFyXFxuXFxuYmF6IgogICAgICAgICBiZWNvbWVzICIgZm9vICAgIGJhciAgYmF6Ii4KICAgICAgICAgIiIiCiAgICAgICAgIGlmIHNlbGYuZXhwYW5kX3RhYnM6CkBAIC0xNjAsNyArMTY5LDcgQEAKICAgICAgICAgIiIiX2ZpeF9zZW50ZW5jZV9lbmRpbmdzKGNodW5rcyA6IFtzdHJpbmddKQogCiAgICAgICAgIENvcnJlY3QgZm9yIHNlbnRlbmNlIGVuZGluZ3MgYnVyaWVkIGluICdjaHVua3MnLiAgRWcuIHdoZW4gdGhlCi0gICAgICAgIG9yaWdpbmFsIHRleHQgY29udGFpbnMgIi4uLiBmb28uXG5CYXIgLi4uIiwgbXVuZ2Vfd2hpdGVzcGFjZSgpCisgICAgICAgIG9yaWdpbmFsIHRleHQgY29udGFpbnMgIi4uLiBmb28uXFxuQmFyIC4uLiIsIG11bmdlX3doaXRlc3BhY2UoKQogICAgICAgICBhbmQgc3BsaXQoKSB3aWxsIGNvbnZlcnQgdGhhdCB0byBbLi4uLCAiZm9vLiIsICIgIiwgIkJhciIsIC4uLl0KICAgICAgICAgd2hpY2ggaGFzIG9uZSB0b28gZmV3IHNwYWNlczsgdGhpcyBtZXRob2Qgc2ltcGx5IGNoYW5nZXMgdGhlIG9uZQogICAgICAgICBzcGFjZSB0byB0d28uCkBAIC0yMjMsNiArMjMyLDEzIEBACiAgICAgICAgIGxpbmVzID0gW10KICAgICAgICAgaWYgc2VsZi53aWR0aCA8PSAwOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCB3aWR0aCAlciAobXVzdCBiZSA+IDApIiAlIHNlbGYud2lkdGgpCisgICAgICAgIGlmIHNlbGYubWF4X2xpbmVzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgaWYgc2VsZi5tYXhfbGluZXMgPiAxOgorICAgICAgICAgICAgICAgIGluZGVudCA9IHNlbGYuc3Vic2VxdWVudF9pbmRlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaW5kZW50ID0gc2VsZi5pbml0aWFsX2luZGVudAorICAgICAgICAgICAgaWYgbGVuKGluZGVudCkgKyBsZW4oc2VsZi5wbGFjZWhvbGRlci5sc3RyaXAoKSkgPiBzZWxmLndpZHRoOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInBsYWNlaG9sZGVyIHRvbyBsYXJnZSBmb3IgbWF4IHdpZHRoIikKIAogICAgICAgICAjIEFycmFuZ2UgaW4gcmV2ZXJzZSBvcmRlciBzbyBpdGVtcyBjYW4gYmUgZWZmaWNpZW50bHkgcG9wcGVkCiAgICAgICAgICMgZnJvbSBhIHN0YWNrIG9mIGNodWNrcy4KQEAgLTI2NSwxOCArMjgxLDQ3IEBACiAgICAgICAgICAgICAjIGZpdCBvbiAqYW55KiBsaW5lIChub3QganVzdCB0aGlzIG9uZSkuCiAgICAgICAgICAgICBpZiBjaHVua3MgYW5kIGxlbihjaHVua3NbLTFdKSA+IHdpZHRoOgogICAgICAgICAgICAgICAgIHNlbGYuX2hhbmRsZV9sb25nX3dvcmQoY2h1bmtzLCBjdXJfbGluZSwgY3VyX2xlbiwgd2lkdGgpCisgICAgICAgICAgICAgICAgY3VyX2xlbiA9IHN1bShtYXAobGVuLCBjdXJfbGluZSkpCiAKICAgICAgICAgICAgICMgSWYgdGhlIGxhc3QgY2h1bmsgb24gdGhpcyBsaW5lIGlzIGFsbCB3aGl0ZXNwYWNlLCBkcm9wIGl0LgogICAgICAgICAgICAgaWYgc2VsZi5kcm9wX3doaXRlc3BhY2UgYW5kIGN1cl9saW5lIGFuZCBjdXJfbGluZVstMV0uc3RyaXAoKSA9PSAnJzoKKyAgICAgICAgICAgICAgICBjdXJfbGVuIC09IGxlbihjdXJfbGluZVstMV0pCiAgICAgICAgICAgICAgICAgZGVsIGN1cl9saW5lWy0xXQogCi0gICAgICAgICAgICAjIENvbnZlcnQgY3VycmVudCBsaW5lIGJhY2sgdG8gYSBzdHJpbmcgYW5kIHN0b3JlIGl0IGluIGxpc3QKLSAgICAgICAgICAgICMgb2YgYWxsIGxpbmVzIChyZXR1cm4gdmFsdWUpLgogICAgICAgICAgICAgaWYgY3VyX2xpbmU6Ci0gICAgICAgICAgICAgICAgbGluZXMuYXBwZW5kKGluZGVudCArICcnLmpvaW4oY3VyX2xpbmUpKQorICAgICAgICAgICAgICAgIGlmIChzZWxmLm1heF9saW5lcyBpcyBOb25lIG9yCisgICAgICAgICAgICAgICAgICAgIGxlbihsaW5lcykgKyAxIDwgc2VsZi5tYXhfbGluZXMgb3IKKyAgICAgICAgICAgICAgICAgICAgKG5vdCBjaHVua3Mgb3IKKyAgICAgICAgICAgICAgICAgICAgIHNlbGYuZHJvcF93aGl0ZXNwYWNlIGFuZAorICAgICAgICAgICAgICAgICAgICAgbGVuKGNodW5rcykgPT0gMSBhbmQKKyAgICAgICAgICAgICAgICAgICAgIG5vdCBjaHVua3NbMF0uc3RyaXAoKSkgYW5kIGN1cl9sZW4gPD0gd2lkdGgpOgorICAgICAgICAgICAgICAgICAgICAjIENvbnZlcnQgY3VycmVudCBsaW5lIGJhY2sgdG8gYSBzdHJpbmcgYW5kIHN0b3JlIGl0IGluCisgICAgICAgICAgICAgICAgICAgICMgbGlzdCBvZiBhbGwgbGluZXMgKHJldHVybiB2YWx1ZSkuCisgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyAnJy5qb2luKGN1cl9saW5lKSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBjdXJfbGluZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJfbGluZVstMV0uc3RyaXAoKSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGVuICsgbGVuKHNlbGYucGxhY2Vob2xkZXIpIDw9IHdpZHRoKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJfbGluZS5hcHBlbmQoc2VsZi5wbGFjZWhvbGRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lcy5hcHBlbmQoaW5kZW50ICsgJycuam9pbihjdXJfbGluZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9sZW4gLT0gbGVuKGN1cl9saW5lWy0xXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbCBjdXJfbGluZVstMV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxpbmVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfbGluZSA9IGxpbmVzWy0xXS5yc3RyaXAoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4ocHJldl9saW5lKSArIGxlbihzZWxmLnBsYWNlaG9sZGVyKSA8PQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53aWR0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzWy0xXSA9IHByZXZfbGluZSArIHNlbGYucGxhY2Vob2xkZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZChpbmRlbnQgKyBzZWxmLnBsYWNlaG9sZGVyLmxzdHJpcCgpKQorICAgICAgICAgICAgICAgICAgICBicmVhawogCiAgICAgICAgIHJldHVybiBsaW5lcwogCisgICAgZGVmIF9zcGxpdF9jaHVua3Moc2VsZiwgdGV4dCk6CisgICAgICAgIHRleHQgPSBzZWxmLl9tdW5nZV93aGl0ZXNwYWNlKHRleHQpCisgICAgICAgIHJldHVybiBzZWxmLl9zcGxpdCh0ZXh0KQogCiAgICAgIyAtLSBQdWJsaWMgaW50ZXJmYWNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtMjg5LDggKzMzNCw3IEBACiAgICAgICAgIGFuZCBhbGwgb3RoZXIgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzIChpbmNsdWRpbmcgbmV3bGluZSkgYXJlCiAgICAgICAgIGNvbnZlcnRlZCB0byBzcGFjZS4KICAgICAgICAgIiIiCi0gICAgICAgIHRleHQgPSBzZWxmLl9tdW5nZV93aGl0ZXNwYWNlKHRleHQpCi0gICAgICAgIGNodW5rcyA9IHNlbGYuX3NwbGl0KHRleHQpCisgICAgICAgIGNodW5rcyA9IHNlbGYuX3NwbGl0X2NodW5rcyh0ZXh0KQogICAgICAgICBpZiBzZWxmLmZpeF9zZW50ZW5jZV9lbmRpbmdzOgogICAgICAgICAgICAgc2VsZi5fZml4X3NlbnRlbmNlX2VuZGluZ3MoY2h1bmtzKQogICAgICAgICByZXR1cm4gc2VsZi5fd3JhcF9jaHVua3MoY2h1bmtzKQpAQCAtMzMyLDYgKzM3NiwyMSBAQAogICAgIHcgPSBUZXh0V3JhcHBlcih3aWR0aD13aWR0aCwgKiprd2FyZ3MpCiAgICAgcmV0dXJuIHcuZmlsbCh0ZXh0KQogCitkZWYgc2hvcnRlbih0ZXh0LCB3aWR0aCwgKiprd2FyZ3MpOgorICAgICIiIkNvbGxhcHNlIGFuZCB0cnVuY2F0ZSB0aGUgZ2l2ZW4gdGV4dCB0byBmaXQgaW4gdGhlIGdpdmVuIHdpZHRoLgorCisgICAgVGhlIHRleHQgZmlyc3QgaGFzIGl0cyB3aGl0ZXNwYWNlIGNvbGxhcHNlZC4gIElmIGl0IHRoZW4gZml0cyBpbgorICAgIHRoZSAqd2lkdGgqLCBpdCBpcyByZXR1cm5lZCBhcyBpcy4gIE90aGVyd2lzZSwgYXMgbWFueSB3b3JkcworICAgIGFzIHBvc3NpYmxlIGFyZSBqb2luZWQgYW5kIHRoZW4gdGhlIHBsYWNlaG9sZGVyIGlzIGFwcGVuZGVkOjoKKworICAgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTEyKQorICAgICAgICAnSGVsbG8gd29ybGQhJworICAgICAgICA+Pj4gdGV4dHdyYXAuc2hvcnRlbigiSGVsbG8gIHdvcmxkISIsIHdpZHRoPTExKQorICAgICAgICAnSGVsbG8gWy4uLl0nCisgICAgIiIiCisgICAgdyA9IFRleHRXcmFwcGVyKHdpZHRoPXdpZHRoLCBtYXhfbGluZXM9MSwgKiprd2FyZ3MpCisgICAgcmV0dXJuIHcuZmlsbCgnICcuam9pbih0ZXh0LnN0cmlwKCkuc3BsaXQoKSkpCisKIAogIyAtLSBMb29zZWx5IHJlbGF0ZWQgZnVuY3Rpb25hbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKQEAgLTM0Niw3ICs0MDUsNyBAQAogICAgIGluIGluZGVudGVkIGZvcm0uCiAKICAgICBOb3RlIHRoYXQgdGFicyBhbmQgc3BhY2VzIGFyZSBib3RoIHRyZWF0ZWQgYXMgd2hpdGVzcGFjZSwgYnV0IHRoZXkKLSAgICBhcmUgbm90IGVxdWFsOiB0aGUgbGluZXMgIiAgaGVsbG8iIGFuZCAiXHRoZWxsbyIgYXJlCisgICAgYXJlIG5vdCBlcXVhbDogdGhlIGxpbmVzICIgIGhlbGxvIiBhbmQgIlxcdGhlbGxvIiBhcmUKICAgICBjb25zaWRlcmVkIHRvIGhhdmUgbm8gY29tbW9uIGxlYWRpbmcgd2hpdGVzcGFjZS4gIChUaGlzIGJlaGF2aW91ciBpcwogICAgIG5ldyBpbiBQeXRob24gMi41OyBvbGRlciB2ZXJzaW9ucyBvZiB0aGlzIG1vZHVsZSBpbmNvcnJlY3RseQogICAgIGV4cGFuZGVkIHRhYnMgYmVmb3JlIHNlYXJjaGluZyBmb3IgY29tbW9uIGxlYWRpbmcgd2hpdGVzcGFjZS4pCkBAIC0zNzAsMTEgKzQyOSwxNSBAQAogICAgICAgICBlbGlmIG1hcmdpbi5zdGFydHN3aXRoKGluZGVudCk6CiAgICAgICAgICAgICBtYXJnaW4gPSBpbmRlbnQKIAotICAgICAgICAjIEN1cnJlbnQgbGluZSBhbmQgcHJldmlvdXMgd2lubmVyIGhhdmUgbm8gY29tbW9uIHdoaXRlc3BhY2U6Ci0gICAgICAgICMgdGhlcmUgaXMgbm8gbWFyZ2luLgorICAgICAgICAjIEZpbmQgdGhlIGxhcmdlc3QgY29tbW9uIHdoaXRlc3BhY2UgYmV0d2VlbiBjdXJyZW50IGxpbmUgYW5kIHByZXZpb3VzCisgICAgICAgICMgd2lubmVyLgogICAgICAgICBlbHNlOgotICAgICAgICAgICAgbWFyZ2luID0gIiIKLSAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmb3IgaSwgKHgsIHkpIGluIGVudW1lcmF0ZSh6aXAobWFyZ2luLCBpbmRlbnQpKToKKyAgICAgICAgICAgICAgICBpZiB4ICE9IHk6CisgICAgICAgICAgICAgICAgICAgIG1hcmdpbiA9IG1hcmdpbls6aV0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbWFyZ2luID0gbWFyZ2luWzpsZW4oaW5kZW50KV0KIAogICAgICMgc2FuaXR5IGNoZWNrICh0ZXN0aW5nL2RlYnVnZ2luZyBvbmx5KQogICAgIGlmIDAgYW5kIG1hcmdpbjoKZGlmZiAtLWdpdCBhL0xpYi90aHJlYWRpbmcucHkgYi9MaWIvdGhyZWFkaW5nLnB5CmluZGV4IDYyNWM5YjkuLjU2YTQwNjAgMTAwNjQ0Ci0tLSBhL0xpYi90aHJlYWRpbmcucHkKKysrIGIvTGliL3RocmVhZGluZy5weQpAQCAtMywxMyArMywxNyBAQAogaW1wb3J0IHN5cyBhcyBfc3lzCiBpbXBvcnQgX3RocmVhZAogCi1mcm9tIHRpbWUgaW1wb3J0IHNsZWVwIGFzIF9zbGVlcAogdHJ5OgogICAgIGZyb20gdGltZSBpbXBvcnQgbW9ub3RvbmljIGFzIF90aW1lCiBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgZnJvbSB0aW1lIGltcG9ydCB0aW1lIGFzIF90aW1lCiBmcm9tIHRyYWNlYmFjayBpbXBvcnQgZm9ybWF0X2V4YyBhcyBfZm9ybWF0X2V4YwogZnJvbSBfd2Vha3JlZnNldCBpbXBvcnQgV2Vha1NldAorZnJvbSBpdGVydG9vbHMgaW1wb3J0IGlzbGljZSBhcyBfaXNsaWNlLCBjb3VudCBhcyBfY291bnQKK3RyeToKKyAgICBmcm9tIF9jb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUgYXMgX2RlcXVlCitleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUgYXMgX2RlcXVlCiAKICMgTm90ZSByZWdhcmRpbmcgUEVQIDggY29tcGxpYW50IG5hbWVzCiAjICBUaGlzIHRocmVhZGluZyBtb2RlbCB3YXMgb3JpZ2luYWxseSBpbnNwaXJlZCBieSBKYXZhLCBhbmQgaW5oZXJpdGVkCkBAIC0yOCw2ICszMiw3IEBACiAjIFJlbmFtZSBzb21lIHN0dWZmIHNvICJmcm9tIHRocmVhZGluZyBpbXBvcnQgKiIgaXMgc2FmZQogX3N0YXJ0X25ld190aHJlYWQgPSBfdGhyZWFkLnN0YXJ0X25ld190aHJlYWQKIF9hbGxvY2F0ZV9sb2NrID0gX3RocmVhZC5hbGxvY2F0ZV9sb2NrCitfc2V0X3NlbnRpbmVsID0gX3RocmVhZC5fc2V0X3NlbnRpbmVsCiBnZXRfaWRlbnQgPSBfdGhyZWFkLmdldF9pZGVudAogVGhyZWFkRXJyb3IgPSBfdGhyZWFkLmVycm9yCiB0cnk6CkBAIC0xMzIsNyArMTM3LDcgQEAKICAgICAgICAgIiIiCiAgICAgICAgIG1lID0gZ2V0X2lkZW50KCkKICAgICAgICAgaWYgc2VsZi5fb3duZXIgPT0gbWU6Ci0gICAgICAgICAgICBzZWxmLl9jb3VudCA9IHNlbGYuX2NvdW50ICsgMQorICAgICAgICAgICAgc2VsZi5fY291bnQgKz0gMQogICAgICAgICAgICAgcmV0dXJuIDEKICAgICAgICAgcmMgPSBzZWxmLl9ibG9jay5hY3F1aXJlKGJsb2NraW5nLCB0aW1lb3V0KQogICAgICAgICBpZiByYzoKQEAgLTIyNCw3ICsyMjksNyBAQAogICAgICAgICAgICAgc2VsZi5faXNfb3duZWQgPSBsb2NrLl9pc19vd25lZAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBwYXNzCi0gICAgICAgIHNlbGYuX3dhaXRlcnMgPSBbXQorICAgICAgICBzZWxmLl93YWl0ZXJzID0gX2RlcXVlKCkKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLl9sb2NrLl9fZW50ZXJfXygpCkBAIC0yNDMsNyArMjQ4LDcgQEAKIAogICAgIGRlZiBfaXNfb3duZWQoc2VsZik6CiAgICAgICAgICMgUmV0dXJuIFRydWUgaWYgbG9jayBpcyBvd25lZCBieSBjdXJyZW50X3RocmVhZC4KLSAgICAgICAgIyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgb25seSBpZiBfX2xvY2sgZG9lc24ndCBoYXZlIF9pc19vd25lZCgpLgorICAgICAgICAjIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmx5IGlmIF9sb2NrIGRvZXNuJ3QgaGF2ZSBfaXNfb3duZWQoKS4KICAgICAgICAgaWYgc2VsZi5fbG9jay5hY3F1aXJlKDApOgogICAgICAgICAgICAgc2VsZi5fbG9jay5yZWxlYXNlKCkKICAgICAgICAgICAgIHJldHVybiBGYWxzZQpAQCAtMjc5LDYgKzI4NCw3IEBACiAgICAgICAgIHdhaXRlci5hY3F1aXJlKCkKICAgICAgICAgc2VsZi5fd2FpdGVycy5hcHBlbmQod2FpdGVyKQogICAgICAgICBzYXZlZF9zdGF0ZSA9IHNlbGYuX3JlbGVhc2Vfc2F2ZSgpCisgICAgICAgIGdvdGl0ID0gRmFsc2UKICAgICAgICAgdHJ5OiAgICAjIHJlc3RvcmUgc3RhdGUgbm8gbWF0dGVyIHdoYXQgKGUuZy4sIEtleWJvYXJkSW50ZXJydXB0KQogICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgogICAgICAgICAgICAgICAgIHdhaXRlci5hY3F1aXJlKCkKQEAgLTI4OCwxNCArMjk0LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIGdvdGl0ID0gd2FpdGVyLmFjcXVpcmUoVHJ1ZSwgdGltZW91dCkKICAgICAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICAgICBnb3RpdCA9IHdhaXRlci5hY3F1aXJlKEZhbHNlKQotICAgICAgICAgICAgICAgIGlmIG5vdCBnb3RpdDoKLSAgICAgICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUod2FpdGVyKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIHJldHVybiBnb3RpdAogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc2VsZi5fYWNxdWlyZV9yZXN0b3JlKHNhdmVkX3N0YXRlKQorICAgICAgICAgICAgaWYgbm90IGdvdGl0OgorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fd2FpdGVycy5yZW1vdmUod2FpdGVyKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICBwYXNzCiAKICAgICBkZWYgd2FpdF9mb3Ioc2VsZiwgcHJlZGljYXRlLCB0aW1lb3V0PU5vbmUpOgogICAgICAgICAiIiJXYWl0IHVudGlsIGEgY29uZGl0aW9uIGV2YWx1YXRlcyB0byBUcnVlLgpAQCAtMzMyLDE0ICszMzgsMTQgQEAKICAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBzZWxmLl9pc19vd25lZCgpOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJjYW5ub3Qgbm90aWZ5IG9uIHVuLWFjcXVpcmVkIGxvY2siKQotICAgICAgICBfX3dhaXRlcnMgPSBzZWxmLl93YWl0ZXJzCi0gICAgICAgIHdhaXRlcnMgPSBfX3dhaXRlcnNbOm5dCi0gICAgICAgIGlmIG5vdCB3YWl0ZXJzOgorICAgICAgICBhbGxfd2FpdGVycyA9IHNlbGYuX3dhaXRlcnMKKyAgICAgICAgd2FpdGVyc190b19ub3RpZnkgPSBfZGVxdWUoX2lzbGljZShhbGxfd2FpdGVycywgbikpCisgICAgICAgIGlmIG5vdCB3YWl0ZXJzX3RvX25vdGlmeToKICAgICAgICAgICAgIHJldHVybgotICAgICAgICBmb3Igd2FpdGVyIGluIHdhaXRlcnM6CisgICAgICAgIGZvciB3YWl0ZXIgaW4gd2FpdGVyc190b19ub3RpZnk6CiAgICAgICAgICAgICB3YWl0ZXIucmVsZWFzZSgpCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgX193YWl0ZXJzLnJlbW92ZSh3YWl0ZXIpCisgICAgICAgICAgICAgICAgYWxsX3dhaXRlcnMucmVtb3ZlKHdhaXRlcikKICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgogICAgICAgICAgICAgICAgIHBhc3MKIApAQCAtNDE0LDcgKzQyMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBzZWxmLl9jb25kLndhaXQodGltZW91dCkKICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBzZWxmLl92YWx1ZSAtIDEKKyAgICAgICAgICAgICAgICBzZWxmLl92YWx1ZSAtPSAxCiAgICAgICAgICAgICAgICAgcmMgPSBUcnVlCiAgICAgICAgIHJldHVybiByYwogCkBAIC00MjgsNyArNDM0LDcgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgd2l0aCBzZWxmLl9jb25kOgotICAgICAgICAgICAgc2VsZi5fdmFsdWUgPSBzZWxmLl92YWx1ZSArIDEKKyAgICAgICAgICAgIHNlbGYuX3ZhbHVlICs9IDEKICAgICAgICAgICAgIHNlbGYuX2NvbmQubm90aWZ5KCkKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0LCB2LCB0Yik6CkBAIC00OTAsNyArNDk2LDcgQEAKIAogICAgIGRlZiBfcmVzZXRfaW50ZXJuYWxfbG9ja3Moc2VsZik6CiAgICAgICAgICMgcHJpdmF0ZSEgIGNhbGxlZCBieSBUaHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzIGJ5IF9hZnRlcl9mb3JrKCkKLSAgICAgICAgc2VsZi5fY29uZC5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX2NvbmQuX19pbml0X18oTG9jaygpKQogCiAgICAgZGVmIGlzX3NldChzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhlIGludGVybmFsIGZsYWcgaXMgdHJ1ZS4iIiIKQEAgLTUwNSwxMiArNTExLDkgQEAKICAgICAgICAgdGhhdCBjYWxsIHdhaXQoKSBvbmNlIHRoZSBmbGFnIGlzIHRydWUgd2lsbCBub3QgYmxvY2sgYXQgYWxsLgogCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5fY29uZDoKICAgICAgICAgICAgIHNlbGYuX2ZsYWcgPSBUcnVlCiAgICAgICAgICAgICBzZWxmLl9jb25kLm5vdGlmeV9hbGwoKQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fY29uZC5yZWxlYXNlKCkKIAogICAgIGRlZiBjbGVhcihzZWxmKToKICAgICAgICAgIiIiUmVzZXQgdGhlIGludGVybmFsIGZsYWcgdG8gZmFsc2UuCkBAIC01MTksMTEgKzUyMiw4IEBACiAgICAgICAgIHNldCB0aGUgaW50ZXJuYWwgZmxhZyB0byB0cnVlIGFnYWluLgogCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5fY29uZDoKICAgICAgICAgICAgIHNlbGYuX2ZsYWcgPSBGYWxzZQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgc2VsZi5fY29uZC5yZWxlYXNlKCkKIAogICAgIGRlZiB3YWl0KHNlbGYsIHRpbWVvdXQ9Tm9uZSk6CiAgICAgICAgICIiIkJsb2NrIHVudGlsIHRoZSBpbnRlcm5hbCBmbGFnIGlzIHRydWUuCkBAIC01NDAsMTQgKzU0MCwxMSBAQAogICAgICAgICBUcnVlIGV4Y2VwdCBpZiBhIHRpbWVvdXQgaXMgZ2l2ZW4gYW5kIHRoZSBvcGVyYXRpb24gdGltZXMgb3V0LgogCiAgICAgICAgICIiIgotICAgICAgICBzZWxmLl9jb25kLmFjcXVpcmUoKQotICAgICAgICB0cnk6CisgICAgICAgIHdpdGggc2VsZi5fY29uZDoKICAgICAgICAgICAgIHNpZ25hbGVkID0gc2VsZi5fZmxhZwogICAgICAgICAgICAgaWYgbm90IHNpZ25hbGVkOgogICAgICAgICAgICAgICAgIHNpZ25hbGVkID0gc2VsZi5fY29uZC53YWl0KHRpbWVvdXQpCiAgICAgICAgICAgICByZXR1cm4gc2lnbmFsZWQKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2NvbmQucmVsZWFzZSgpCiAKIAogIyBBIGJhcnJpZXIgY2xhc3MuICBJbnNwaXJlZCBpbiBwYXJ0IGJ5IHRoZSBwdGhyZWFkX2JhcnJpZXJfKiBhcGkgYW5kCkBAIC03MjAsMTggKzcxNywxNSBAQAogCiAKICMgSGVscGVyIHRvIGdlbmVyYXRlIG5ldyB0aHJlYWQgbmFtZXMKLV9jb3VudGVyID0gMAorX2NvdW50ZXIgPSBfY291bnQoKS5fX25leHRfXworX2NvdW50ZXIoKSAjIENvbnN1bWUgMCBzbyBmaXJzdCBub24tbWFpbiB0aHJlYWQgaGFzIGlkIDEuCiBkZWYgX25ld25hbWUodGVtcGxhdGU9IlRocmVhZC0lZCIpOgotICAgIGdsb2JhbCBfY291bnRlcgotICAgIF9jb3VudGVyID0gX2NvdW50ZXIgKyAxCi0gICAgcmV0dXJuIHRlbXBsYXRlICUgX2NvdW50ZXIKKyAgICByZXR1cm4gdGVtcGxhdGUgJSBfY291bnRlcigpCiAKICMgQWN0aXZlIHRocmVhZCBhZG1pbmlzdHJhdGlvbgogX2FjdGl2ZV9saW1ib19sb2NrID0gX2FsbG9jYXRlX2xvY2soKQogX2FjdGl2ZSA9IHt9ICAgICMgbWFwcyB0aHJlYWQgaWQgdG8gVGhyZWFkIG9iamVjdAogX2xpbWJvID0ge30KLQotIyBGb3IgZGVidWcgYW5kIGxlYWsgdGVzdGluZwogX2RhbmdsaW5nID0gV2Vha1NldCgpCiAKICMgTWFpbiBjbGFzcyBmb3IgdGhyZWFkcwpAQCAtNzQ1LDEyICs3MzksMTIgQEAKIAogICAgICIiIgogCi0gICAgX19pbml0aWFsaXplZCA9IEZhbHNlCisgICAgX2luaXRpYWxpemVkID0gRmFsc2UKICAgICAjIE5lZWQgdG8gc3RvcmUgYSByZWZlcmVuY2UgdG8gc3lzLmV4Y19pbmZvIGZvciBwcmludGluZwogICAgICMgb3V0IGV4Y2VwdGlvbnMgd2hlbiBhIHRocmVhZCB0cmllcyB0byB1c2UgYSBnbG9iYWwgdmFyLiBkdXJpbmcgaW50ZXJwLgogICAgICMgc2h1dGRvd24gYW5kIHRodXMgcmFpc2VzIGFuIGV4Y2VwdGlvbiBhYm91dCB0cnlpbmcgdG8gcGVyZm9ybSBzb21lCiAgICAgIyBvcGVyYXRpb24gb24vd2l0aCBhIE5vbmVUeXBlCi0gICAgX19leGNfaW5mbyA9IF9zeXMuZXhjX2luZm8KKyAgICBfZXhjX2luZm8gPSBfc3lzLmV4Y19pbmZvCiAgICAgIyBLZWVwIHN5cy5leGNfY2xlYXIgdG9vIHRvIGNsZWFyIHRoZSBleGNlcHRpb24ganVzdCBiZWZvcmUKICAgICAjIGFsbG93aW5nIC5qb2luKCkgdG8gcmV0dXJuLgogICAgICNYWFggX19leGNfY2xlYXIgPSBfc3lzLmV4Y19jbGVhcgpAQCAtNzkwLDI4ICs3ODQsMzUgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX2RhZW1vbmljID0gY3VycmVudF90aHJlYWQoKS5kYWVtb24KICAgICAgICAgc2VsZi5faWRlbnQgPSBOb25lCisgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gTm9uZQogICAgICAgICBzZWxmLl9zdGFydGVkID0gRXZlbnQoKQotICAgICAgICBzZWxmLl9zdG9wcGVkID0gRmFsc2UKLSAgICAgICAgc2VsZi5fYmxvY2sgPSBDb25kaXRpb24oTG9jaygpKQorICAgICAgICBzZWxmLl9pc19zdG9wcGVkID0gRmFsc2UKICAgICAgICAgc2VsZi5faW5pdGlhbGl6ZWQgPSBUcnVlCiAgICAgICAgICMgc3lzLnN0ZGVyciBpcyBub3Qgc3RvcmVkIGluIHRoZSBjbGFzcyBsaWtlCiAgICAgICAgICMgc3lzLmV4Y19pbmZvIHNpbmNlIGl0IGNhbiBiZSBjaGFuZ2VkIGJldHdlZW4gaW5zdGFuY2VzCiAgICAgICAgIHNlbGYuX3N0ZGVyciA9IF9zeXMuc3RkZXJyCisgICAgICAgICMgRm9yIGRlYnVnZ2luZyBhbmQgX2FmdGVyX2ZvcmsoKQogICAgICAgICBfZGFuZ2xpbmcuYWRkKHNlbGYpCiAKLSAgICBkZWYgX3Jlc2V0X2ludGVybmFsX2xvY2tzKHNlbGYpOgorICAgIGRlZiBfcmVzZXRfaW50ZXJuYWxfbG9ja3Moc2VsZiwgaXNfYWxpdmUpOgogICAgICAgICAjIHByaXZhdGUhICBDYWxsZWQgYnkgX2FmdGVyX2ZvcmsoKSB0byByZXNldCBvdXIgaW50ZXJuYWwgbG9ja3MgYXMKICAgICAgICAgIyB0aGV5IG1heSBiZSBpbiBhbiBpbnZhbGlkIHN0YXRlIGxlYWRpbmcgdG8gYSBkZWFkbG9jayBvciBjcmFzaC4KLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLCAnX2Jsb2NrJyk6ICAjIER1bW15VGhyZWFkIGRlbGV0ZXMgX2Jsb2NrCi0gICAgICAgICAgICBzZWxmLl9ibG9jay5fX2luaXRfXygpCiAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKCkKKyAgICAgICAgaWYgaXNfYWxpdmU6CisgICAgICAgICAgICBzZWxmLl9zZXRfdHN0YXRlX2xvY2soKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBUaGUgdGhyZWFkIGlzbid0IGFsaXZlIGFmdGVyIGZvcms6IGl0IGRvZXNuJ3QgaGF2ZSBhIHRzdGF0ZQorICAgICAgICAgICAgIyBhbnltb3JlLgorICAgICAgICAgICAgc2VsZi5faXNfc3RvcHBlZCA9IFRydWUKKyAgICAgICAgICAgIHNlbGYuX3RzdGF0ZV9sb2NrID0gTm9uZQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICBhc3NlcnQgc2VsZi5faW5pdGlhbGl6ZWQsICJUaHJlYWQuX19pbml0X18oKSB3YXMgbm90IGNhbGxlZCIKICAgICAgICAgc3RhdHVzID0gImluaXRpYWwiCiAgICAgICAgIGlmIHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCk6CiAgICAgICAgICAgICBzdGF0dXMgPSAic3RhcnRlZCIKLSAgICAgICAgaWYgc2VsZi5fc3RvcHBlZDoKKyAgICAgICAgc2VsZi5pc19hbGl2ZSgpICMgZWFzeSB3YXkgdG8gZ2V0IC5faXNfc3RvcHBlZCBzZXQgd2hlbiBhcHByb3ByaWF0ZQorICAgICAgICBpZiBzZWxmLl9pc19zdG9wcGVkOgogICAgICAgICAgICAgc3RhdHVzID0gInN0b3BwZWQiCiAgICAgICAgIGlmIHNlbGYuX2RhZW1vbmljOgogICAgICAgICAgICAgc3RhdHVzICs9ICIgZGFlbW9uIgpAQCAtODg0LDkgKzg4NSwxOCBAQAogICAgIGRlZiBfc2V0X2lkZW50KHNlbGYpOgogICAgICAgICBzZWxmLl9pZGVudCA9IGdldF9pZGVudCgpCiAKKyAgICBkZWYgX3NldF90c3RhdGVfbG9jayhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFNldCBhIGxvY2sgb2JqZWN0IHdoaWNoIHdpbGwgYmUgcmVsZWFzZWQgYnkgdGhlIGludGVycHJldGVyIHdoZW4KKyAgICAgICAgdGhlIHVuZGVybHlpbmcgdGhyZWFkIHN0YXRlIChzZWUgcHlzdGF0ZS5oKSBnZXRzIGRlbGV0ZWQuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl90c3RhdGVfbG9jayA9IF9zZXRfc2VudGluZWwoKQorICAgICAgICBzZWxmLl90c3RhdGVfbG9jay5hY3F1aXJlKCkKKwogICAgIGRlZiBfYm9vdHN0cmFwX2lubmVyKHNlbGYpOgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQorICAgICAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKICAgICAgICAgICAgIHNlbGYuX3N0YXJ0ZWQuc2V0KCkKICAgICAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgogICAgICAgICAgICAgICAgIF9hY3RpdmVbc2VsZi5faWRlbnRdID0gc2VsZgpAQCAtOTA2LDEwICs5MTYsMTAgQEAKICAgICAgICAgICAgICAgICAjIHNodXRkb3duKSB1c2Ugc2VsZi5fc3RkZXJyLiAgT3RoZXJ3aXNlIHN0aWxsIHVzZSBzeXMgKGFzIGluCiAgICAgICAgICAgICAgICAgIyBfc3lzKSBpbiBjYXNlIHN5cy5zdGRlcnIgd2FzIHJlZGVmaW5lZCBzaW5jZSB0aGUgY3JlYXRpb24gb2YKICAgICAgICAgICAgICAgICAjIHNlbGYuCi0gICAgICAgICAgICAgICAgaWYgX3N5czoKLSAgICAgICAgICAgICAgICAgICAgX3N5cy5zdGRlcnIud3JpdGUoIkV4Y2VwdGlvbiBpbiB0aHJlYWQgJXM6XG4lc1xuIiAlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxmLm5hbWUsIF9mb3JtYXRfZXhjKCkpKQotICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaWYgX3N5cyBhbmQgX3N5cy5zdGRlcnIgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJFeGNlcHRpb24gaW4gdGhyZWFkICVzOlxuJXMiICUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlbGYubmFtZSwgX2Zvcm1hdF9leGMoKSksIGZpbGU9c2VsZi5fc3RkZXJyKQorICAgICAgICAgICAgICAgIGVsaWYgc2VsZi5fc3RkZXJyIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgICAgICAjIERvIHRoZSBiZXN0IGpvYiBwb3NzaWJsZSB3L28gYSBodWdlIGFtdC4gb2YgY29kZSB0bwogICAgICAgICAgICAgICAgICAgICAjIGFwcHJveGltYXRlIGEgdHJhY2ViYWNrIChjb2RlIGlkZWFzIGZyb20KICAgICAgICAgICAgICAgICAgICAgIyBMaWIvdHJhY2ViYWNrLnB5KQpAQCAtOTM3LDExICs5NDcsMTAgQEAKICAgICAgICAgICAgICAgICAjIHRlc3RfdGhyZWFkaW5nLnRlc3Rfbm9fcmVmY3ljbGVfdGhyb3VnaF90YXJnZXQgd2hlbgogICAgICAgICAgICAgICAgICMgdGhlIGV4Y2VwdGlvbiBrZWVwcyB0aGUgdGFyZ2V0IGFsaXZlIHBhc3Qgd2hlbiB3ZQogICAgICAgICAgICAgICAgICMgYXNzZXJ0IHRoYXQgaXQncyBkZWFkLgotICAgICAgICAgICAgICAgICNYWFggc2VsZi5fX2V4Y19jbGVhcigpCisgICAgICAgICAgICAgICAgI1hYWCBzZWxmLl9leGNfY2xlYXIoKQogICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgotICAgICAgICAgICAgICAgIHNlbGYuX3N0b3AoKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgIyBXZSBkb24ndCBjYWxsIHNlbGYuX2RlbGV0ZSgpIGJlY2F1c2UgaXQgYWxzbwogICAgICAgICAgICAgICAgICAgICAjIGdyYWJzIF9hY3RpdmVfbGltYm9fbG9jay4KQEAgLTk1MCwxMCArOTU5LDI3IEBACiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlZiBfc3RvcChzZWxmKToKLSAgICAgICAgc2VsZi5fYmxvY2suYWNxdWlyZSgpCi0gICAgICAgIHNlbGYuX3N0b3BwZWQgPSBUcnVlCi0gICAgICAgIHNlbGYuX2Jsb2NrLm5vdGlmeV9hbGwoKQotICAgICAgICBzZWxmLl9ibG9jay5yZWxlYXNlKCkKKyAgICAgICAgIyBBZnRlciBjYWxsaW5nIC5fc3RvcCgpLCAuaXNfYWxpdmUoKSByZXR1cm5zIEZhbHNlIGFuZCAuam9pbigpIHJldHVybnMKKyAgICAgICAgIyBpbW1lZGlhdGVseS4gIC5fdHN0YXRlX2xvY2sgbXVzdCBiZSByZWxlYXNlZCBiZWZvcmUgY2FsbGluZyAuX3N0b3AoKS4KKyAgICAgICAgIworICAgICAgICAjIE5vcm1hbCBjYXNlOiAgQyBjb2RlIGF0IHRoZSBlbmQgb2YgdGhlIHRocmVhZCdzIGxpZmUKKyAgICAgICAgIyAocmVsZWFzZV9zZW50aW5lbCBpbiBfdGhyZWFkbW9kdWxlLmMpIHJlbGVhc2VzIC5fdHN0YXRlX2xvY2ssIGFuZAorICAgICAgICAjIHRoYXQncyBkZXRlY3RlZCBieSBvdXIgLl93YWl0X2Zvcl90c3RhdGVfbG9jaygpLCBjYWxsZWQgYnkgLmpvaW4oKQorICAgICAgICAjIGFuZCAuaXNfYWxpdmUoKS4gIEFueSBudW1iZXIgb2YgdGhyZWFkcyBfbWF5XyBjYWxsIC5fc3RvcCgpCisgICAgICAgICMgc2ltdWx0YW5lb3VzbHkgKGZvciBleGFtcGxlLCBpZiBtdWx0aXBsZSB0aHJlYWRzIGFyZSBibG9ja2VkIGluCisgICAgICAgICMgLmpvaW4oKSBjYWxscyksIGFuZCB0aGV5J3JlIG5vdCBzZXJpYWxpemVkLiAgVGhhdCdzIGhhcm1sZXNzIC0KKyAgICAgICAgIyB0aGV5J2xsIGp1c3QgbWFrZSByZWR1bmRhbnQgcmViaW5kaW5ncyBvZiAuX2lzX3N0b3BwZWQgYW5kCisgICAgICAgICMgLl90c3RhdGVfbG9jay4gIE9ic2N1cmU6ICB3ZSByZWJpbmQgLl90c3RhdGVfbG9jayBsYXN0IHNvIHRoYXQgdGhlCisgICAgICAgICMgImFzc2VydCBzZWxmLl9pc19zdG9wcGVkIiBpbiAuX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKCkgYWx3YXlzIHdvcmtzCisgICAgICAgICMgKHRoZSBhc3NlcnQgaXMgZXhlY3V0ZWQgb25seSBpZiAuX3RzdGF0ZV9sb2NrIGlzIE5vbmUpLgorICAgICAgICAjCisgICAgICAgICMgU3BlY2lhbCBjYXNlOiAgX21haW5fdGhyZWFkIHJlbGVhc2VzIC5fdHN0YXRlX2xvY2sgdmlhIHRoaXMKKyAgICAgICAgIyBtb2R1bGUncyBfc2h1dGRvd24oKSBmdW5jdGlvbi4KKyAgICAgICAgbG9jayA9IHNlbGYuX3RzdGF0ZV9sb2NrCisgICAgICAgIGlmIGxvY2sgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBhc3NlcnQgbm90IGxvY2subG9ja2VkKCkKKyAgICAgICAgc2VsZi5faXNfc3RvcHBlZCA9IFRydWUKKyAgICAgICAgc2VsZi5fdHN0YXRlX2xvY2sgPSBOb25lCiAKICAgICBkZWYgX2RlbGV0ZShzZWxmKToKICAgICAgICAgIlJlbW92ZSBjdXJyZW50IHRocmVhZCBmcm9tIHRoZSBkaWN0IG9mIGN1cnJlbnRseSBydW5uaW5nIHRocmVhZHMuIgpAQCAtMTAyMSwyMCArMTA0NywyNiBAQAogICAgICAgICBpZiBzZWxmIGlzIGN1cnJlbnRfdGhyZWFkKCk6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCBqb2luIGN1cnJlbnQgdGhyZWFkIikKIAotICAgICAgICBzZWxmLl9ibG9jay5hY3F1aXJlKCkKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgdGltZW91dCBpcyBOb25lOgotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wcGVkOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9ibG9jay53YWl0KCkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZGVhZGxpbmUgPSBfdGltZSgpICsgdGltZW91dAotICAgICAgICAgICAgICAgIHdoaWxlIG5vdCBzZWxmLl9zdG9wcGVkOgotICAgICAgICAgICAgICAgICAgICBkZWxheSA9IGRlYWRsaW5lIC0gX3RpbWUoKQotICAgICAgICAgICAgICAgICAgICBpZiBkZWxheSA8PSAwOgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fYmxvY2sud2FpdChkZWxheSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIHNlbGYuX2Jsb2NrLnJlbGVhc2UoKQorICAgICAgICBpZiB0aW1lb3V0IGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl93YWl0X2Zvcl90c3RhdGVfbG9jaygpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHRoZSBiZWhhdmlvciBvZiBhIG5lZ2F0aXZlIHRpbWVvdXQgaXNuJ3QgZG9jdW1lbnRlZCwgYnV0CisgICAgICAgICAgICAjIGhpc3RvcmljYWxseSAuam9pbih0aW1lb3V0PXgpIGZvciB4PDAgaGFzIGFjdGVkIGFzIGlmIHRpbWVvdXQ9MAorICAgICAgICAgICAgc2VsZi5fd2FpdF9mb3JfdHN0YXRlX2xvY2sodGltZW91dD1tYXgodGltZW91dCwgMCkpCisKKyAgICBkZWYgX3dhaXRfZm9yX3RzdGF0ZV9sb2NrKHNlbGYsIGJsb2NrPVRydWUsIHRpbWVvdXQ9LTEpOgorICAgICAgICAjIElzc3VlICMxODgwODogd2FpdCBmb3IgdGhlIHRocmVhZCBzdGF0ZSB0byBiZSBnb25lLgorICAgICAgICAjIEF0IHRoZSBlbmQgb2YgdGhlIHRocmVhZCdzIGxpZmUsIGFmdGVyIGFsbCBrbm93bGVkZ2Ugb2YgdGhlIHRocmVhZAorICAgICAgICAjIGlzIHJlbW92ZWQgZnJvbSBDIGRhdGEgc3RydWN0dXJlcywgQyBjb2RlIHJlbGVhc2VzIG91ciBfdHN0YXRlX2xvY2suCisgICAgICAgICMgVGhpcyBtZXRob2QgcGFzc2VzIGl0cyBhcmd1bWVudHMgdG8gX3RzdGF0ZV9sb2NrLmFxdWlyZSgpLgorICAgICAgICAjIElmIHRoZSBsb2NrIGlzIGFjcXVpcmVkLCB0aGUgQyBjb2RlIGlzIGRvbmUsIGFuZCBzZWxmLl9zdG9wKCkgaXMKKyAgICAgICAgIyBjYWxsZWQuICBUaGF0IHNldHMgLl9pc19zdG9wcGVkIHRvIFRydWUsIGFuZCAuX3RzdGF0ZV9sb2NrIHRvIE5vbmUuCisgICAgICAgIGxvY2sgPSBzZWxmLl90c3RhdGVfbG9jaworICAgICAgICBpZiBsb2NrIGlzIE5vbmU6ICAjIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0IHRoZSBDIGNvZGUgaXMgZG9uZQorICAgICAgICAgICAgYXNzZXJ0IHNlbGYuX2lzX3N0b3BwZWQKKyAgICAgICAgZWxpZiBsb2NrLmFjcXVpcmUoYmxvY2ssIHRpbWVvdXQpOgorICAgICAgICAgICAgbG9jay5yZWxlYXNlKCkKKyAgICAgICAgICAgIHNlbGYuX3N0b3AoKQogCiAgICAgQHByb3BlcnR5CiAgICAgZGVmIG5hbWUoc2VsZik6CkBAIC0xMDczLDcgKzExMDUsMTAgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgYXNzZXJ0IHNlbGYuX2luaXRpYWxpemVkLCAiVGhyZWFkLl9faW5pdF9fKCkgbm90IGNhbGxlZCIKLSAgICAgICAgcmV0dXJuIHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCkgYW5kIG5vdCBzZWxmLl9zdG9wcGVkCisgICAgICAgIGlmIHNlbGYuX2lzX3N0b3BwZWQgb3Igbm90IHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCk6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgc2VsZi5fd2FpdF9mb3JfdHN0YXRlX2xvY2soRmFsc2UpCisgICAgICAgIHJldHVybiBub3Qgc2VsZi5faXNfc3RvcHBlZAogCiAgICAgaXNBbGl2ZSA9IGlzX2FsaXZlCiAKQEAgLTEwOTgsNyArMTEzMyw3IEBACiAgICAgICAgIGlmIG5vdCBzZWxmLl9pbml0aWFsaXplZDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVGhyZWFkLl9faW5pdF9fKCkgbm90IGNhbGxlZCIpCiAgICAgICAgIGlmIHNlbGYuX3N0YXJ0ZWQuaXNfc2V0KCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCBzZXQgZGFlbW9uIHN0YXR1cyBvZiBhY3RpdmUgdGhyZWFkIik7CisgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoImNhbm5vdCBzZXQgZGFlbW9uIHN0YXR1cyBvZiBhY3RpdmUgdGhyZWFkIikKICAgICAgICAgc2VsZi5fZGFlbW9uaWMgPSBkYWVtb25pYwogCiAgICAgZGVmIGlzRGFlbW9uKHNlbGYpOgpAQCAtMTE0OSwyNSArMTE4NCwxMiBAQAogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgICBUaHJlYWQuX19pbml0X18oc2VsZiwgbmFtZT0iTWFpblRocmVhZCIsIGRhZW1vbj1GYWxzZSkKKyAgICAgICAgc2VsZi5fc2V0X3RzdGF0ZV9sb2NrKCkKICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKICAgICAgICAgICAgIF9hY3RpdmVbc2VsZi5faWRlbnRdID0gc2VsZgogCi0gICAgZGVmIF9leGl0ZnVuYyhzZWxmKToKLSAgICAgICAgc2VsZi5fc3RvcCgpCi0gICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICB3aGlsZSB0OgotICAgICAgICAgICAgdC5qb2luKCkKLSAgICAgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQotICAgICAgICBzZWxmLl9kZWxldGUoKQotCi1kZWYgX3BpY2tTb21lTm9uRGFlbW9uVGhyZWFkKCk6Ci0gICAgZm9yIHQgaW4gZW51bWVyYXRlKCk6Ci0gICAgICAgIGlmIG5vdCB0LmRhZW1vbiBhbmQgdC5pc19hbGl2ZSgpOgotICAgICAgICAgICAgcmV0dXJuIHQKLSAgICByZXR1cm4gTm9uZQotCiAKICMgRHVtbXkgdGhyZWFkIGNsYXNzIHRvIHJlcHJlc2VudCB0aHJlYWRzIG5vdCBzdGFydGVkIGhlcmUuCiAjIFRoZXNlIGFyZW4ndCBnYXJiYWdlIGNvbGxlY3RlZCB3aGVuIHRoZXkgZGllLCBub3IgY2FuIHRoZXkgYmUgd2FpdGVkIGZvci4KQEAgLTExODIsMTEgKzEyMDQsNiBAQAogICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICAgVGhyZWFkLl9faW5pdF9fKHNlbGYsIG5hbWU9X25ld25hbWUoIkR1bW15LSVkIiksIGRhZW1vbj1UcnVlKQogCi0gICAgICAgICMgVGhyZWFkLl9ibG9jayBjb25zdW1lcyBhbiBPUy1sZXZlbCBsb2NraW5nIHByaW1pdGl2ZSwgd2hpY2gKLSAgICAgICAgIyBjYW4gbmV2ZXIgYmUgdXNlZCBieSBhIF9EdW1teVRocmVhZC4gIFNpbmNlIGEgX0R1bW15VGhyZWFkCi0gICAgICAgICMgaW5zdGFuY2UgaXMgaW1tb3J0YWwsIHRoYXQncyBiYWQsIHNvIHJlbGVhc2UgdGhpcyByZXNvdXJjZS4KLSAgICAgICAgZGVsIHNlbGYuX2Jsb2NrCi0KICAgICAgICAgc2VsZi5fc3RhcnRlZC5zZXQoKQogICAgICAgICBzZWxmLl9zZXRfaWRlbnQoKQogICAgICAgICB3aXRoIF9hY3RpdmVfbGltYm9fbG9jazoKQEAgLTEyNDgsNyArMTI2NSw0MCBAQAogIyBhbmQgbWFrZSBpdCBhdmFpbGFibGUgZm9yIHRoZSBpbnRlcnByZXRlcgogIyAoUHlfTWFpbikgYXMgdGhyZWFkaW5nLl9zaHV0ZG93bi4KIAotX3NodXRkb3duID0gX01haW5UaHJlYWQoKS5fZXhpdGZ1bmMKK19tYWluX3RocmVhZCA9IF9NYWluVGhyZWFkKCkKKworZGVmIF9zaHV0ZG93bigpOgorICAgICMgT2JzY3VyZTogIG90aGVyIHRocmVhZHMgbWF5IGJlIHdhaXRpbmcgdG8gam9pbiBfbWFpbl90aHJlYWQuICBUaGF0J3MKKyAgICAjIGR1YmlvdXMsIGJ1dCBzb21lIGNvZGUgZG9lcyBpdC4gIFdlIGNhbid0IHdhaXQgZm9yIEMgY29kZSB0byByZWxlYXNlCisgICAgIyB0aGUgbWFpbiB0aHJlYWQncyB0c3RhdGVfbG9jayAtIHRoYXQgd29uJ3QgaGFwcGVuIHVudGlsIHRoZSBpbnRlcnByZXRlcgorICAgICMgaXMgbmVhcmx5IGRlYWQuICBTbyB3ZSByZWxlYXNlIGl0IGhlcmUuICBOb3RlIHRoYXQganVzdCBjYWxsaW5nIF9zdG9wKCkKKyAgICAjIGlzbid0IGVub3VnaDogIG90aGVyIHRocmVhZHMgbWF5IGFscmVhZHkgYmUgd2FpdGluZyBvbiBfdHN0YXRlX2xvY2suCisgICAgdGxvY2sgPSBfbWFpbl90aHJlYWQuX3RzdGF0ZV9sb2NrCisgICAgIyBUaGUgbWFpbiB0aHJlYWQgaXNuJ3QgZmluaXNoZWQgeWV0LCBzbyBpdHMgdGhyZWFkIHN0YXRlIGxvY2sgY2FuJ3QgaGF2ZQorICAgICMgYmVlbiByZWxlYXNlZC4KKyAgICBhc3NlcnQgdGxvY2sgaXMgbm90IE5vbmUKKyAgICBhc3NlcnQgdGxvY2subG9ja2VkKCkKKyAgICB0bG9jay5yZWxlYXNlKCkKKyAgICBfbWFpbl90aHJlYWQuX3N0b3AoKQorICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIHdoaWxlIHQ6CisgICAgICAgIHQuam9pbigpCisgICAgICAgIHQgPSBfcGlja1NvbWVOb25EYWVtb25UaHJlYWQoKQorICAgIF9tYWluX3RocmVhZC5fZGVsZXRlKCkKKworZGVmIF9waWNrU29tZU5vbkRhZW1vblRocmVhZCgpOgorICAgIGZvciB0IGluIGVudW1lcmF0ZSgpOgorICAgICAgICBpZiBub3QgdC5kYWVtb24gYW5kIHQuaXNfYWxpdmUoKToKKyAgICAgICAgICAgIHJldHVybiB0CisgICAgcmV0dXJuIE5vbmUKKworZGVmIG1haW5fdGhyZWFkKCk6CisgICAgIiIiUmV0dXJuIHRoZSBtYWluIHRocmVhZCBvYmplY3QuCisKKyAgICBJbiBub3JtYWwgY29uZGl0aW9ucywgdGhlIG1haW4gdGhyZWFkIGlzIHRoZSB0aHJlYWQgZnJvbSB3aGljaCB0aGUKKyAgICBQeXRob24gaW50ZXJwcmV0ZXIgd2FzIHN0YXJ0ZWQuCisgICAgIiIiCisgICAgcmV0dXJuIF9tYWluX3RocmVhZAogCiAjIGdldCB0aHJlYWQtbG9jYWwgaW1wbGVtZW50YXRpb24sIGVpdGhlciBmcm9tIHRoZSB0aHJlYWQKICMgbW9kdWxlLCBvciBmcm9tIHRoZSBweXRob24gZmFsbGJhY2sKQEAgLTEyNjYsMjUgKzEzMTYsMzEgQEAKIAogICAgICMgUmVzZXQgX2FjdGl2ZV9saW1ib19sb2NrLCBpbiBjYXNlIHdlIGZvcmtlZCB3aGlsZSB0aGUgbG9jayB3YXMgaGVsZAogICAgICMgYnkgYW5vdGhlciAobm9uLWZvcmtlZCkgdGhyZWFkLiAgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTg3NDkwMAotICAgIGdsb2JhbCBfYWN0aXZlX2xpbWJvX2xvY2sKKyAgICBnbG9iYWwgX2FjdGl2ZV9saW1ib19sb2NrLCBfbWFpbl90aHJlYWQKICAgICBfYWN0aXZlX2xpbWJvX2xvY2sgPSBfYWxsb2NhdGVfbG9jaygpCiAKICAgICAjIGZvcmsoKSBvbmx5IGNvcGllZCB0aGUgY3VycmVudCB0aHJlYWQ7IGNsZWFyIHJlZmVyZW5jZXMgdG8gb3RoZXJzLgogICAgIG5ld19hY3RpdmUgPSB7fQogICAgIGN1cnJlbnQgPSBjdXJyZW50X3RocmVhZCgpCisgICAgX21haW5fdGhyZWFkID0gY3VycmVudAogICAgIHdpdGggX2FjdGl2ZV9saW1ib19sb2NrOgotICAgICAgICBmb3IgdGhyZWFkIGluIF9lbnVtZXJhdGUoKToKKyAgICAgICAgIyBEYW5nbGluZyB0aHJlYWQgaW5zdGFuY2VzIG11c3Qgc3RpbGwgaGF2ZSB0aGVpciBsb2NrcyByZXNldCwKKyAgICAgICAgIyBiZWNhdXNlIHNvbWVvbmUgbWF5IGpvaW4oKSB0aGVtLgorICAgICAgICB0aHJlYWRzID0gc2V0KF9lbnVtZXJhdGUoKSkKKyAgICAgICAgdGhyZWFkcy51cGRhdGUoX2RhbmdsaW5nKQorICAgICAgICBmb3IgdGhyZWFkIGluIHRocmVhZHM6CiAgICAgICAgICAgICAjIEFueSBsb2NrL2NvbmRpdGlvbiB2YXJpYWJsZSBtYXkgYmUgY3VycmVudGx5IGxvY2tlZCBvciBpbiBhbgogICAgICAgICAgICAgIyBpbnZhbGlkIHN0YXRlLCBzbyB3ZSByZWluaXRpYWxpemUgdGhlbS4KLSAgICAgICAgICAgIHRocmVhZC5fcmVzZXRfaW50ZXJuYWxfbG9ja3MoKQogICAgICAgICAgICAgaWYgdGhyZWFkIGlzIGN1cnJlbnQ6CiAgICAgICAgICAgICAgICAgIyBUaGVyZSBpcyBvbmx5IG9uZSBhY3RpdmUgdGhyZWFkLiBXZSByZXNldCB0aGUgaWRlbnQgdG8KICAgICAgICAgICAgICAgICAjIGl0cyBuZXcgdmFsdWUgc2luY2UgaXQgY2FuIGhhdmUgY2hhbmdlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKFRydWUpCiAgICAgICAgICAgICAgICAgaWRlbnQgPSBnZXRfaWRlbnQoKQogICAgICAgICAgICAgICAgIHRocmVhZC5faWRlbnQgPSBpZGVudAogICAgICAgICAgICAgICAgIG5ld19hY3RpdmVbaWRlbnRdID0gdGhyZWFkCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgICMgQWxsIHRoZSBvdGhlcnMgYXJlIGFscmVhZHkgc3RvcHBlZC4KKyAgICAgICAgICAgICAgICB0aHJlYWQuX3Jlc2V0X2ludGVybmFsX2xvY2tzKEZhbHNlKQogICAgICAgICAgICAgICAgIHRocmVhZC5fc3RvcCgpCiAKICAgICAgICAgX2xpbWJvLmNsZWFyKCkKZGlmZiAtLWdpdCBhL0xpYi90aW1laXQucHkgYi9MaWIvdGltZWl0LnB5CmluZGV4IDRmN2QyOGYuLjBiMWM2MDEgMTAwNzU1Ci0tLSBhL0xpYi90aW1laXQucHkKKysrIGIvTGliL3RpbWVpdC5weQpAQCAtMTQsNyArMTQsOCBAQAogT3B0aW9uczoKICAgLW4vLS1udW1iZXIgTjogaG93IG1hbnkgdGltZXMgdG8gZXhlY3V0ZSAnc3RhdGVtZW50JyAoZGVmYXVsdDogc2VlIGJlbG93KQogICAtci8tLXJlcGVhdCBOOiBob3cgbWFueSB0aW1lcyB0byByZXBlYXQgdGhlIHRpbWVyIChkZWZhdWx0IDMpCi0gIC1zLy0tc2V0dXAgUzogc3RhdGVtZW50IHRvIGJlIGV4ZWN1dGVkIG9uY2UgaW5pdGlhbGx5IChkZWZhdWx0ICdwYXNzJykKKyAgLXMvLS1zZXR1cCBTOiBzdGF0ZW1lbnQgdG8gYmUgZXhlY3V0ZWQgb25jZSBpbml0aWFsbHkgKGRlZmF1bHQgJ3Bhc3MnKS4KKyAgICAgICAgICAgICAgICBFeGVjdXRpb24gdGltZSBvZiB0aGlzIHNldHVwIHN0YXRlbWVudCBpcyBOT1QgdGltZWQuCiAgIC1wLy0tcHJvY2VzczogdXNlIHRpbWUucHJvY2Vzc190aW1lKCkgKGRlZmF1bHQgaXMgdGltZS5wZXJmX2NvdW50ZXIoKSkKICAgLXQvLS10aW1lOiB1c2UgdGltZS50aW1lKCkgKGRlcHJlY2F0ZWQpCiAgIC1jLy0tY2xvY2s6IHVzZSB0aW1lLmNsb2NrKCkgKGRlcHJlY2F0ZWQpCkBAIC0zMSwzOCArMzIsMjkgQEAKIElmIC1uIGlzIG5vdCBnaXZlbiwgYSBzdWl0YWJsZSBudW1iZXIgb2YgbG9vcHMgaXMgY2FsY3VsYXRlZCBieSB0cnlpbmcKIHN1Y2Nlc3NpdmUgcG93ZXJzIG9mIDEwIHVudGlsIHRoZSB0b3RhbCB0aW1lIGlzIGF0IGxlYXN0IDAuMiBzZWNvbmRzLgogCi1UaGUgZGlmZmVyZW5jZSBpbiBkZWZhdWx0IHRpbWVyIGZ1bmN0aW9uIGlzIGJlY2F1c2Ugb24gV2luZG93cywKLWNsb2NrKCkgaGFzIG1pY3Jvc2Vjb25kIGdyYW51bGFyaXR5IGJ1dCB0aW1lKCkncyBncmFudWxhcml0eSBpcyAxLzYwdGgKLW9mIGEgc2Vjb25kOyBvbiBVbml4LCBjbG9jaygpIGhhcyAxLzEwMHRoIG9mIGEgc2Vjb25kIGdyYW51bGFyaXR5IGFuZAotdGltZSgpIGlzIG11Y2ggbW9yZSBwcmVjaXNlLiAgT24gZWl0aGVyIHBsYXRmb3JtLCB0aGUgZGVmYXVsdCB0aW1lcgotZnVuY3Rpb25zIG1lYXN1cmUgd2FsbCBjbG9jayB0aW1lLCBub3QgdGhlIENQVSB0aW1lLiAgVGhpcyBtZWFucyB0aGF0Ci1vdGhlciBwcm9jZXNzZXMgcnVubmluZyBvbiB0aGUgc2FtZSBjb21wdXRlciBtYXkgaW50ZXJmZXJlIHdpdGggdGhlCi10aW1pbmcuICBUaGUgYmVzdCB0aGluZyB0byBkbyB3aGVuIGFjY3VyYXRlIHRpbWluZyBpcyBuZWNlc3NhcnkgaXMgdG8KLXJlcGVhdCB0aGUgdGltaW5nIGEgZmV3IHRpbWVzIGFuZCB1c2UgdGhlIGJlc3QgdGltZS4gIFRoZSAtciBvcHRpb24gaXMKLWdvb2QgZm9yIHRoaXM7IHRoZSBkZWZhdWx0IG9mIDMgcmVwZXRpdGlvbnMgaXMgcHJvYmFibHkgZW5vdWdoIGluIG1vc3QKLWNhc2VzLiAgT24gVW5peCwgeW91IGNhbiB1c2UgY2xvY2soKSB0byBtZWFzdXJlIENQVSB0aW1lLgotCiBOb3RlOiB0aGVyZSBpcyBhIGNlcnRhaW4gYmFzZWxpbmUgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIGV4ZWN1dGluZyBhCi1wYXNzIHN0YXRlbWVudC4gIFRoZSBjb2RlIGhlcmUgZG9lc24ndCB0cnkgdG8gaGlkZSBpdCwgYnV0IHlvdSBzaG91bGQKLWJlIGF3YXJlIG9mIGl0LiAgVGhlIGJhc2VsaW5lIG92ZXJoZWFkIGNhbiBiZSBtZWFzdXJlZCBieSBpbnZva2luZyB0aGUKLXByb2dyYW0gd2l0aG91dCBhcmd1bWVudHMuCitwYXNzIHN0YXRlbWVudC4gIEl0IGRpZmZlcnMgYmV0d2VlbiB2ZXJzaW9ucy4gIFRoZSBjb2RlIGhlcmUgZG9lc24ndCB0cnkKK3RvIGhpZGUgaXQsIGJ1dCB5b3Ugc2hvdWxkIGJlIGF3YXJlIG9mIGl0LiAgVGhlIGJhc2VsaW5lIG92ZXJoZWFkIGNhbiBiZQorbWVhc3VyZWQgYnkgaW52b2tpbmcgdGhlIHByb2dyYW0gd2l0aG91dCBhcmd1bWVudHMuCiAKLVRoZSBiYXNlbGluZSBvdmVyaGVhZCBkaWZmZXJzIGJldHdlZW4gUHl0aG9uIHZlcnNpb25zISAgQWxzbywgdG8KLWZhaXJseSBjb21wYXJlIG9sZGVyIFB5dGhvbiB2ZXJzaW9ucyB0byBQeXRob24gMi4zLCB5b3UgbWF5IHdhbnQgdG8KLXVzZSBweXRob24gLU8gZm9yIHRoZSBvbGRlciB2ZXJzaW9ucyB0byBhdm9pZCB0aW1pbmcgU0VUX0xJTkVOTwotaW5zdHJ1Y3Rpb25zLgorQ2xhc3NlczoKKworICAgIFRpbWVyCisKK0Z1bmN0aW9uczoKKworICAgIHRpbWVpdChzdHJpbmcsIHN0cmluZykgLT4gZmxvYXQKKyAgICByZXBlYXQoc3RyaW5nLCBzdHJpbmcpIC0+IGxpc3QKKyAgICBkZWZhdWx0X3RpbWVyKCkgLT4gZmxvYXQKKwogIiIiCiAKIGltcG9ydCBnYwogaW1wb3J0IHN5cwogaW1wb3J0IHRpbWUKLXRyeToKLSAgICBpbXBvcnQgaXRlcnRvb2xzCi1leGNlcHQgSW1wb3J0RXJyb3I6Ci0gICAgIyBNdXN0IGJlIGFuIG9sZGVyIFB5dGhvbiB2ZXJzaW9uIChzZWUgdGltZWl0KCkgYmVsb3cpCi0gICAgaXRlcnRvb2xzID0gTm9uZQoraW1wb3J0IGl0ZXJ0b29scwogCi1fX2FsbF9fID0gWyJUaW1lciJdCitfX2FsbF9fID0gWyJUaW1lciIsICJ0aW1laXQiLCAicmVwZWF0IiwgImRlZmF1bHRfdGltZXIiXQogCiBkdW1teV9zcmNfbmFtZSA9ICI8dGltZWl0LXNyYz4iCiBkZWZhdWx0X251bWJlciA9IDEwMDAwMDAKQEAgLTczLDcgKzY1LDcgQEAKICMgaW4gVGltZXIuX19pbml0X18oKSBkZXBlbmQgb24gc2V0dXAgYmVpbmcgaW5kZW50ZWQgNCBzcGFjZXMgYW5kIHN0bXQKICMgYmVpbmcgaW5kZW50ZWQgOCBzcGFjZXMuCiB0ZW1wbGF0ZSA9ICIiIgotZGVmIGlubmVyKF9pdCwgX3RpbWVyKToKK2RlZiBpbm5lcihfaXQsIF90aW1lcntpbml0fSk6CiAgICAge3NldHVwfQogICAgIF90MCA9IF90aW1lcigpCiAgICAgZm9yIF9pIGluIF9pdDoKQEAgLTExOCwxMiArMTEwLDE5IEBACiAgICAgICAgIHNlbGYudGltZXIgPSB0aW1lcgogICAgICAgICBucyA9IHt9CiAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc3RtdCwgc3RyKToKKyAgICAgICAgICAgICMgQ2hlY2sgdGhhdCB0aGUgY29kZSBjYW4gYmUgY29tcGlsZWQgb3V0c2lkZSBhIGZ1bmN0aW9uCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNldHVwLCBzdHIpOgorICAgICAgICAgICAgICAgIGNvbXBpbGUoc2V0dXAsIGR1bW15X3NyY19uYW1lLCAiZXhlYyIpCisgICAgICAgICAgICAgICAgY29tcGlsZShzZXR1cCArICdcbicgKyBzdG10LCBkdW1teV9zcmNfbmFtZSwgImV4ZWMiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBjb21waWxlKHN0bXQsIGR1bW15X3NyY19uYW1lLCAiZXhlYyIpCiAgICAgICAgICAgICBzdG10ID0gcmVpbmRlbnQoc3RtdCwgOCkKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2V0dXAsIHN0cik6CiAgICAgICAgICAgICAgICAgc2V0dXAgPSByZWluZGVudChzZXR1cCwgNCkKLSAgICAgICAgICAgICAgICBzcmMgPSB0ZW1wbGF0ZS5mb3JtYXQoc3RtdD1zdG10LCBzZXR1cD1zZXR1cCkKKyAgICAgICAgICAgICAgICBzcmMgPSB0ZW1wbGF0ZS5mb3JtYXQoc3RtdD1zdG10LCBzZXR1cD1zZXR1cCwgaW5pdD0nJykKICAgICAgICAgICAgIGVsaWYgY2FsbGFibGUoc2V0dXApOgotICAgICAgICAgICAgICAgIHNyYyA9IHRlbXBsYXRlLmZvcm1hdChzdG10PXN0bXQsIHNldHVwPSdfc2V0dXAoKScpCisgICAgICAgICAgICAgICAgc3JjID0gdGVtcGxhdGUuZm9ybWF0KHN0bXQ9c3RtdCwgc2V0dXA9J19zZXR1cCgpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdD0nLCBfc2V0dXA9X3NldHVwJykKICAgICAgICAgICAgICAgICBuc1snX3NldHVwJ10gPSBzZXR1cAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJzZXR1cCBpcyBuZWl0aGVyIGEgc3RyaW5nIG5vciBjYWxsYWJsZSIpCkBAIC0xODAsMTAgKzE3OSw3IEBACiAgICAgICAgIHRvIG9uZSBtaWxsaW9uLiAgVGhlIG1haW4gc3RhdGVtZW50LCB0aGUgc2V0dXAgc3RhdGVtZW50IGFuZAogICAgICAgICB0aGUgdGltZXIgZnVuY3Rpb24gdG8gYmUgdXNlZCBhcmUgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICAgICAgICAgIiIiCi0gICAgICAgIGlmIGl0ZXJ0b29sczoKLSAgICAgICAgICAgIGl0ID0gaXRlcnRvb2xzLnJlcGVhdChOb25lLCBudW1iZXIpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpdCA9IFtOb25lXSAqIG51bWJlcgorICAgICAgICBpdCA9IGl0ZXJ0b29scy5yZXBlYXQoTm9uZSwgbnVtYmVyKQogICAgICAgICBnY29sZCA9IGdjLmlzZW5hYmxlZCgpCiAgICAgICAgIGdjLmRpc2FibGUoKQogICAgICAgICB0cnk6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci9fX2luaXRfXy5weSBiL0xpYi90a2ludGVyL19faW5pdF9fLnB5CmluZGV4IGI5ZTVkMmUuLjc1YzQwZTU2IDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci9fX2luaXRfXy5weQorKysgYi9MaWIvdGtpbnRlci9fX2luaXRfXy5weQpAQCAtMzUsOCArMzUsNiBAQAogICAgICMgQXR0ZW1wdCB0byBjb25maWd1cmUgVGNsL1RrIHdpdGhvdXQgcmVxdWlyaW5nIFBBVEgKICAgICBmcm9tIHRraW50ZXIgaW1wb3J0IF9maXgKIAotaW1wb3J0IHdhcm5pbmdzCi0KIGltcG9ydCBfdGtpbnRlciAjIElmIHRoaXMgZmFpbHMgeW91ciBQeXRob24gbWF5IG5vdCBiZSBjb25maWd1cmVkIGZvciBUawogVGNsRXJyb3IgPSBfdGtpbnRlci5UY2xFcnJvcgogZnJvbSB0a2ludGVyLmNvbnN0YW50cyBpbXBvcnQgKgpAQCAtMTE0LDYgKzExMiwyOSBAQAogdHJ5OiBfY25mbWVyZ2UgPSBfdGtpbnRlci5fY25mbWVyZ2UKIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjogcGFzcwogCitkZWYgX3NwbGl0ZGljdCh0aywgdiwgY3V0X21pbnVzPVRydWUsIGNvbnY9Tm9uZSk6CisgICAgIiIiUmV0dXJuIGEgcHJvcGVybHkgZm9ybWF0dGVkIGRpY3QgYnVpbHQgZnJvbSBUY2wgbGlzdCBwYWlycy4KKworICAgIElmIGN1dF9taW51cyBpcyBUcnVlLCB0aGUgc3VwcG9zZWQgJy0nIHByZWZpeCB3aWxsIGJlIHJlbW92ZWQgZnJvbQorICAgIGtleXMuIElmIGNvbnYgaXMgc3BlY2lmaWVkLCBpdCBpcyB1c2VkIHRvIGNvbnZlcnQgdmFsdWVzLgorCisgICAgVGNsIGxpc3QgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBlbGVtZW50cy4KKyAgICAiIiIKKyAgICB0ID0gdGsuc3BsaXRsaXN0KHYpCisgICAgaWYgbGVuKHQpICUgMjoKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdUY2wgbGlzdCByZXByZXNlbnRpbmcgYSBkaWN0IGlzIGV4cGVjdGVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICd0byBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGVsZW1lbnRzJykKKyAgICBpdCA9IGl0ZXIodCkKKyAgICBkaWN0ID0ge30KKyAgICBmb3Iga2V5LCB2YWx1ZSBpbiB6aXAoaXQsIGl0KToKKyAgICAgICAga2V5ID0gc3RyKGtleSkKKyAgICAgICAgaWYgY3V0X21pbnVzIGFuZCBrZXlbMF0gPT0gJy0nOgorICAgICAgICAgICAga2V5ID0ga2V5WzE6XQorICAgICAgICBpZiBjb252OgorICAgICAgICAgICAgdmFsdWUgPSBjb252KHZhbHVlKQorICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZQorICAgIHJldHVybiBkaWN0CisKIGNsYXNzIEV2ZW50OgogICAgICIiIkNvbnRhaW5lciBmb3IgdGhlIHByb3BlcnRpZXMgb2YgYW4gZXZlbnQuCiAKQEAgLTE5Myw2ICsyMTQsNyBAQAogICAgIHRoYXQgY29uc3RyYWluIHRoZSB0eXBlIG9mIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGdldCgpLiIiIgogICAgIF9kZWZhdWx0ID0gIiIKICAgICBfdGsgPSBOb25lCisgICAgX3RjbENvbW1hbmRzID0gTm9uZQogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgdmFsdWU9Tm9uZSwgbmFtZT1Ob25lKToKICAgICAgICAgIiIiQ29uc3RydWN0IGEgdmFyaWFibGUKIApAQCAtMjExLDcgKzIzMyw3IEBACiAgICAgICAgIGdsb2JhbCBfdmFybnVtCiAgICAgICAgIGlmIG5vdCBtYXN0ZXI6CiAgICAgICAgICAgICBtYXN0ZXIgPSBfZGVmYXVsdF9yb290Ci0gICAgICAgIHNlbGYuX21hc3RlciA9IG1hc3RlcgorICAgICAgICBzZWxmLl9yb290ID0gbWFzdGVyLl9yb290KCkKICAgICAgICAgc2VsZi5fdGsgPSBtYXN0ZXIudGsKICAgICAgICAgaWYgbmFtZToKICAgICAgICAgICAgIHNlbGYuX25hbWUgPSBuYW1lCkBAIC0yMjQsOSArMjQ2LDE1IEBACiAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemUoc2VsZi5fZGVmYXVsdCkKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgIiIiVW5zZXQgdGhlIHZhcmlhYmxlIGluIFRjbC4iIiIKLSAgICAgICAgaWYgKHNlbGYuX3RrIGlzIG5vdCBOb25lIGFuZAotICAgICAgICAgICAgc2VsZi5fdGsuZ2V0Ym9vbGVhbihzZWxmLl90ay5jYWxsKCJpbmZvIiwgImV4aXN0cyIsIHNlbGYuX25hbWUpKSk6CisgICAgICAgIGlmIHNlbGYuX3RrIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi5fdGsuZ2V0Ym9vbGVhbihzZWxmLl90ay5jYWxsKCJpbmZvIiwgImV4aXN0cyIsIHNlbGYuX25hbWUpKToKICAgICAgICAgICAgIHNlbGYuX3RrLmdsb2JhbHVuc2V0dmFyKHNlbGYuX25hbWUpCisgICAgICAgIGlmIHNlbGYuX3RjbENvbW1hbmRzIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZm9yIG5hbWUgaW4gc2VsZi5fdGNsQ29tbWFuZHM6CisgICAgICAgICAgICAgICAgI3ByaW50ICctIFRraW50ZXI6IGRlbGV0ZWQgY29tbWFuZCcsIG5hbWUKKyAgICAgICAgICAgICAgICBzZWxmLl90ay5kZWxldGVjb21tYW5kKG5hbWUpCisgICAgICAgICAgICBzZWxmLl90Y2xDb21tYW5kcyA9IE5vbmUKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgIiIiUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSBpbiBUY2wuIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9uYW1lCkBAIC0yNDYsNyArMjc0LDIwIEBACiAKICAgICAgICAgUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBjYWxsYmFjay4KICAgICAgICAgIiIiCi0gICAgICAgIGNibmFtZSA9IHNlbGYuX21hc3Rlci5fcmVnaXN0ZXIoY2FsbGJhY2spCisgICAgICAgIGYgPSBDYWxsV3JhcHBlcihjYWxsYmFjaywgTm9uZSwgc2VsZikuX19jYWxsX18KKyAgICAgICAgY2JuYW1lID0gcmVwcihpZChmKSkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjay5fX2Z1bmNfXworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNibmFtZSA9IGNibmFtZSArIGNhbGxiYWNrLl9fbmFtZV9fCisgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgc2VsZi5fdGsuY3JlYXRlY29tbWFuZChjYm5hbWUsIGYpCisgICAgICAgIGlmIHNlbGYuX3RjbENvbW1hbmRzIGlzIE5vbmU6CisgICAgICAgICAgICBzZWxmLl90Y2xDb21tYW5kcyA9IFtdCisgICAgICAgIHNlbGYuX3RjbENvbW1hbmRzLmFwcGVuZChjYm5hbWUpCiAgICAgICAgIHNlbGYuX3RrLmNhbGwoInRyYWNlIiwgInZhcmlhYmxlIiwgc2VsZi5fbmFtZSwgbW9kZSwgY2JuYW1lKQogICAgICAgICByZXR1cm4gY2JuYW1lCiAgICAgdHJhY2UgPSB0cmFjZV92YXJpYWJsZQpAQCAtMjU3LDcgKzI5OCwxMSBAQAogICAgICAgICBDQk5BTUUgaXMgdGhlIG5hbWUgb2YgdGhlIGNhbGxiYWNrIHJldHVybmVkIGZyb20gdHJhY2VfdmFyaWFibGUgb3IgdHJhY2UuCiAgICAgICAgICIiIgogICAgICAgICBzZWxmLl90ay5jYWxsKCJ0cmFjZSIsICJ2ZGVsZXRlIiwgc2VsZi5fbmFtZSwgbW9kZSwgY2JuYW1lKQotICAgICAgICBzZWxmLl9tYXN0ZXIuZGVsZXRlY29tbWFuZChjYm5hbWUpCisgICAgICAgIHNlbGYuX3RrLmRlbGV0ZWNvbW1hbmQoY2JuYW1lKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLl90Y2xDb21tYW5kcy5yZW1vdmUoY2JuYW1lKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIHBhc3MKICAgICBkZWYgdHJhY2VfdmluZm8oc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhbGwgdHJhY2UgY2FsbGJhY2sgaW5mb3JtYXRpb24uIiIiCiAgICAgICAgIHJldHVybiBbc2VsZi5fdGsuc3BsaXQoeCkgZm9yIHggaW4gc2VsZi5fdGsuc3BsaXRsaXN0KApAQCAtMzQ2LDYgKzM5MSwxMSBAQAogICAgICAgICAiIiIKICAgICAgICAgVmFyaWFibGUuX19pbml0X18oc2VsZiwgbWFzdGVyLCB2YWx1ZSwgbmFtZSkKIAorICAgIGRlZiBzZXQoc2VsZiwgdmFsdWUpOgorICAgICAgICAiIiJTZXQgdGhlIHZhcmlhYmxlIHRvIFZBTFVFLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fdGsuZ2xvYmFsc2V0dmFyKHNlbGYuX25hbWUsIHNlbGYuX3RrLmdldGJvb2xlYW4odmFsdWUpKQorICAgIGluaXRpYWxpemUgPSBzZXQKKwogICAgIGRlZiBnZXQoc2VsZik6CiAgICAgICAgICIiIlJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGFzIGEgYm9vbC4iIiIKICAgICAgICAgdHJ5OgpAQCAtNDIzLDcgKzQ3MywxMCBAQAogICAgICAgICAgICAgICArIF9mbGF0dGVuKGFyZ3MpICsgX2ZsYXR0ZW4obGlzdChrdy5pdGVtcygpKSkpCiAgICAgZGVmIHRrX21lbnVCYXIoc2VsZiwgKmFyZ3MpOgogICAgICAgICAiIiJEbyBub3QgdXNlLiBOZWVkZWQgaW4gVGsgMy42IGFuZCBlYXJsaWVyLiIiIgotICAgICAgICBwYXNzICMgb2Jzb2xldGUgc2luY2UgVGsgNC4wCisgICAgICAgICMgb2Jzb2xldGUgc2luY2UgVGsgNC4wCisgICAgICAgIGltcG9ydCB3YXJuaW5ncworICAgICAgICB3YXJuaW5ncy53YXJuKCd0a19tZW51QmFyKCkgZG9lcyBub3RoaW5nIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy42JywKKyAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKICAgICBkZWYgd2FpdF92YXJpYWJsZShzZWxmLCBuYW1lPSdQWV9WQVInKToKICAgICAgICAgIiIiV2FpdCB1bnRpbCB0aGUgdmFyaWFibGUgaXMgbW9kaWZpZWQuCiAKQEAgLTUzNyw2ICs1OTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5kZWxldGVjb21tYW5kKG5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBUY2xFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgIGNhbGxpdC5fX25hbWVfXyA9IGZ1bmMuX19uYW1lX18KICAgICAgICAgICAgIG5hbWUgPSBzZWxmLl9yZWdpc3RlcihjYWxsaXQpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi50ay5jYWxsKCdhZnRlcicsIG1zLCBuYW1lKQogICAgIGRlZiBhZnRlcl9pZGxlKHNlbGYsIGZ1bmMsICphcmdzKToKQEAgLTEwNjMsNyArMTExNyw3IEBACiAKICAgICAgICAgcmV0dXJuIHNlbGYuX2JpbmQoKCdiaW5kJywgY2xhc3NOYW1lKSwgc2VxdWVuY2UsIGZ1bmMsIGFkZCwgMCkKICAgICBkZWYgdW5iaW5kX2NsYXNzKHNlbGYsIGNsYXNzTmFtZSwgc2VxdWVuY2UpOgotICAgICAgICAiIiJVbmJpbmQgZm9yIGEgYWxsIHdpZGdldHMgd2l0aCBiaW5kdGFnIENMQVNTTkFNRSBmb3IgZXZlbnQgU0VRVUVOQ0UKKyAgICAgICAgIiIiVW5iaW5kIGZvciBhbGwgd2lkZ2V0cyB3aXRoIGJpbmR0YWcgQ0xBU1NOQU1FIGZvciBldmVudCBTRVFVRU5DRQogICAgICAgICBhbGwgZnVuY3Rpb25zLiIiIgogICAgICAgICBzZWxmLnRrLmNhbGwoJ2JpbmQnLCBjbGFzc05hbWUgLCBzZXF1ZW5jZSwgJycpCiAgICAgZGVmIG1haW5sb29wKHNlbGYsIG49MCk6CkBAIC0xMzY1LDE1ICsxNDE5LDEwIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBvcHRpb25zID0gc2VsZi5fb3B0aW9ucyhjbmYsIGt3KQogICAgICAgICBpZiBub3Qgb3B0aW9uczoKLSAgICAgICAgICAgIHJlcyA9IHNlbGYudGsuY2FsbCgnZ3JpZCcsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIHNlbGYuX3csIGluZGV4KQotICAgICAgICAgICAgd29yZHMgPSBzZWxmLnRrLnNwbGl0bGlzdChyZXMpCi0gICAgICAgICAgICBkaWN0ID0ge30KLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbih3b3JkcyksIDIpOgotICAgICAgICAgICAgICAgIGtleSA9IHdvcmRzW2ldWzE6XQotICAgICAgICAgICAgICAgIHZhbHVlID0gd29yZHNbaSsxXQotICAgICAgICAgICAgICAgIGRpY3Rba2V5XSA9IHNlbGYuX2dyaWRjb252dmFsdWUodmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZGljdAorICAgICAgICAgICAgcmV0dXJuIF9zcGxpdGRpY3QoCisgICAgICAgICAgICAgICAgc2VsZi50aywKKyAgICAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoJ2dyaWQnLCBjb21tYW5kLCBzZWxmLl93LCBpbmRleCksCisgICAgICAgICAgICAgICAgY29udj1zZWxmLl9ncmlkY29udnZhbHVlKQogICAgICAgICByZXMgPSBzZWxmLnRrLmNhbGwoCiAgICAgICAgICAgICAgICAgICAoJ2dyaWQnLCBjb21tYW5kLCBzZWxmLl93LCBpbmRleCkKICAgICAgICAgICAgICAgICAgICsgb3B0aW9ucykKQEAgLTE2ODUsNyArMTczNCw3IEBACiAKICAgICAgICAgT24gWCwgdGhlIGltYWdlcyBhcmUgYXJyYW5nZWQgaW50byB0aGUgX05FVF9XTV9JQ09OIFggcHJvcGVydHksCiAgICAgICAgIHdoaWNoIG1vc3QgbW9kZXJuIHdpbmRvdyBtYW5hZ2VycyBzdXBwb3J0LiBBbiBpY29uIHNwZWNpZmllZCBieQotICAgICAgICB3bV9pY29uYml0bWFwIG1heSBleGlzdCBzaW11dWx0YW5lb3VzbHkuCisgICAgICAgIHdtX2ljb25iaXRtYXAgbWF5IGV4aXN0IHNpbXVsdGFuZW91c2x5LgogCiAgICAgICAgIE9uIE1hY2ludG9zaCwgdGhpcyBjdXJyZW50bHkgZG9lcyBub3RoaW5nLiIiIgogICAgICAgICBpZiBkZWZhdWx0OgpAQCAtMTg3Myw5ICsxOTIyLDEyIEBACiAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGJhc2VfcHkpOgogICAgICAgICAgICAgZXhlYyhvcGVuKGJhc2VfcHkpLnJlYWQoKSwgZGlyKQogICAgIGRlZiByZXBvcnRfY2FsbGJhY2tfZXhjZXB0aW9uKHNlbGYsIGV4YywgdmFsLCB0Yik6Ci0gICAgICAgICIiIkludGVybmFsIGZ1bmN0aW9uLiBJdCByZXBvcnRzIGV4Y2VwdGlvbiBvbiBzeXMuc3RkZXJyLiIiIgorICAgICAgICAiIiJSZXBvcnQgY2FsbGJhY2sgZXhjZXB0aW9uIG9uIHN5cy5zdGRlcnIuCisKKyAgICAgICAgQXBwbGljYXRpb25zIG1heSB3YW50IHRvIG92ZXJyaWRlIHRoaXMgaW50ZXJuYWwgZnVuY3Rpb24sIGFuZAorICAgICAgICBzaG91bGQgd2hlbiBzeXMuc3RkZXJyIGlzIE5vbmUuIiIiCiAgICAgICAgIGltcG9ydCB0cmFjZWJhY2sKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRXhjZXB0aW9uIGluIFRraW50ZXIgY2FsbGJhY2tcbiIpCisgICAgICAgIHByaW50KCJFeGNlcHRpb24gaW4gVGtpbnRlciBjYWxsYmFjayIsIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgc3lzLmxhc3RfdHlwZSA9IGV4YwogICAgICAgICBzeXMubGFzdF92YWx1ZSA9IHZhbAogICAgICAgICBzeXMubGFzdF90cmFjZWJhY2sgPSB0YgpAQCAtMTkzMywxNiArMTk4NSwxMCBAQAogICAgIGRlZiBwYWNrX2luZm8oc2VsZik6CiAgICAgICAgICIiIlJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGFja2luZyBvcHRpb25zCiAgICAgICAgIGZvciB0aGlzIHdpZGdldC4iIiIKLSAgICAgICAgd29yZHMgPSBzZWxmLnRrLnNwbGl0bGlzdCgKLSAgICAgICAgICAgIHNlbGYudGsuY2FsbCgncGFjaycsICdpbmZvJywgc2VsZi5fdykpCi0gICAgICAgIGRpY3QgPSB7fQotICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4od29yZHMpLCAyKToKLSAgICAgICAgICAgIGtleSA9IHdvcmRzW2ldWzE6XQotICAgICAgICAgICAgdmFsdWUgPSB3b3Jkc1tpKzFdCi0gICAgICAgICAgICBpZiBzdHIodmFsdWUpWzoxXSA9PSAnLic6Ci0gICAgICAgICAgICAgICAgdmFsdWUgPSBzZWxmLl9uYW1ldG93aWRnZXQodmFsdWUpCi0gICAgICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZQotICAgICAgICByZXR1cm4gZGljdAorICAgICAgICBkID0gX3NwbGl0ZGljdChzZWxmLnRrLCBzZWxmLnRrLmNhbGwoJ3BhY2snLCAnaW5mbycsIHNlbGYuX3cpKQorICAgICAgICBpZiAnaW4nIGluIGQ6CisgICAgICAgICAgICBkWydpbiddID0gc2VsZi5uYW1ldG93aWRnZXQoZFsnaW4nXSkKKyAgICAgICAgcmV0dXJuIGQKICAgICBpbmZvID0gcGFja19pbmZvCiAgICAgcHJvcGFnYXRlID0gcGFja19wcm9wYWdhdGUgPSBNaXNjLnBhY2tfcHJvcGFnYXRlCiAgICAgc2xhdmVzID0gcGFja19zbGF2ZXMgPSBNaXNjLnBhY2tfc2xhdmVzCkBAIC0xOTg0LDE2ICsyMDMwLDEwIEBACiAgICAgZGVmIHBsYWNlX2luZm8oc2VsZik6CiAgICAgICAgICIiIlJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcGxhY2luZyBvcHRpb25zCiAgICAgICAgIGZvciB0aGlzIHdpZGdldC4iIiIKLSAgICAgICAgd29yZHMgPSBzZWxmLnRrLnNwbGl0bGlzdCgKLSAgICAgICAgICAgIHNlbGYudGsuY2FsbCgncGxhY2UnLCAnaW5mbycsIHNlbGYuX3cpKQotICAgICAgICBkaWN0ID0ge30KLSAgICAgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHdvcmRzKSwgMik6Ci0gICAgICAgICAgICBrZXkgPSB3b3Jkc1tpXVsxOl0KLSAgICAgICAgICAgIHZhbHVlID0gd29yZHNbaSsxXQotICAgICAgICAgICAgaWYgc3RyKHZhbHVlKVs6MV0gPT0gJy4nOgotICAgICAgICAgICAgICAgIHZhbHVlID0gc2VsZi5fbmFtZXRvd2lkZ2V0KHZhbHVlKQotICAgICAgICAgICAgZGljdFtrZXldID0gdmFsdWUKLSAgICAgICAgcmV0dXJuIGRpY3QKKyAgICAgICAgZCA9IF9zcGxpdGRpY3Qoc2VsZi50aywgc2VsZi50ay5jYWxsKCdwbGFjZScsICdpbmZvJywgc2VsZi5fdykpCisgICAgICAgIGlmICdpbicgaW4gZDoKKyAgICAgICAgICAgIGRbJ2luJ10gPSBzZWxmLm5hbWV0b3dpZGdldChkWydpbiddKQorICAgICAgICByZXR1cm4gZAogICAgIGluZm8gPSBwbGFjZV9pbmZvCiAgICAgc2xhdmVzID0gcGxhY2Vfc2xhdmVzID0gTWlzYy5wbGFjZV9zbGF2ZXMKIApAQCAtMjAzMywxNiArMjA3MywxMCBAQAogICAgIGRlZiBncmlkX2luZm8oc2VsZik6CiAgICAgICAgICIiIlJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3B0aW9ucwogICAgICAgICBmb3IgcG9zaXRpb25pbmcgdGhpcyB3aWRnZXQgaW4gYSBncmlkLiIiIgotICAgICAgICB3b3JkcyA9IHNlbGYudGsuc3BsaXRsaXN0KAotICAgICAgICAgICAgc2VsZi50ay5jYWxsKCdncmlkJywgJ2luZm8nLCBzZWxmLl93KSkKLSAgICAgICAgZGljdCA9IHt9Ci0gICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbih3b3JkcyksIDIpOgotICAgICAgICAgICAga2V5ID0gd29yZHNbaV1bMTpdCi0gICAgICAgICAgICB2YWx1ZSA9IHdvcmRzW2krMV0KLSAgICAgICAgICAgIGlmIHN0cih2YWx1ZSlbOjFdID09ICcuJzoKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHNlbGYuX25hbWV0b3dpZGdldCh2YWx1ZSkKLSAgICAgICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlCi0gICAgICAgIHJldHVybiBkaWN0CisgICAgICAgIGQgPSBfc3BsaXRkaWN0KHNlbGYudGssIHNlbGYudGsuY2FsbCgnZ3JpZCcsICdpbmZvJywgc2VsZi5fdykpCisgICAgICAgIGlmICdpbicgaW4gZDoKKyAgICAgICAgICAgIGRbJ2luJ10gPSBzZWxmLm5hbWV0b3dpZGdldChkWydpbiddKQorICAgICAgICByZXR1cm4gZAogICAgIGluZm8gPSBncmlkX2luZm8KICAgICBsb2NhdGlvbiA9IGdyaWRfbG9jYXRpb24gPSBNaXNjLmdyaWRfbG9jYXRpb24KICAgICBwcm9wYWdhdGUgPSBncmlkX3Byb3BhZ2F0ZSA9IE1pc2MuZ3JpZF9wcm9wYWdhdGUKQEAgLTIxOTksNDUgKzIyMzMsNiBAQAogICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYudGsuY2FsbChzZWxmLl93LCAnaW52b2tlJykKIAotCi0jIEluZGljZXM6Ci0jIFhYWCBJIGRvbid0IGxpa2UgdGhlc2UgLS0gdGFrZSB0aGVtIGF3YXkKLWRlZiBBdEVuZCgpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRFbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICByZXR1cm4gJ2VuZCcKLQotCi1kZWYgQXRJbnNlcnQoKmFyZ3MpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXRJbnNlcnQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICBzID0gJ2luc2VydCcKLSAgICBmb3IgYSBpbiBhcmdzOgotICAgICAgICBpZiBhOiBzID0gcyArICgnICcgKyBhKQotICAgIHJldHVybiBzCi0KLQotZGVmIEF0U2VsRmlyc3QoKToKLSAgICB3YXJuaW5ncy53YXJuKCJ0a2ludGVyLkF0U2VsRmlyc3Qgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICByZXR1cm4gJ3NlbC5maXJzdCcKLQotCi1kZWYgQXRTZWxMYXN0KCk6Ci0gICAgd2FybmluZ3Mud2FybigidGtpbnRlci5BdFNlbExhc3Qgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICByZXR1cm4gJ3NlbC5sYXN0JwotCi0KLWRlZiBBdCh4LCB5PU5vbmUpOgotICAgIHdhcm5pbmdzLndhcm4oInRraW50ZXIuQXQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MikKLSAgICBpZiB5IGlzIE5vbmU6Ci0gICAgICAgIHJldHVybiAnQCVyJyAlICh4LCkKLSAgICBlbHNlOgotICAgICAgICByZXR1cm4gJ0AlciwlcicgJSAoeCwgeSkKLQotCiBjbGFzcyBDYW52YXMoV2lkZ2V0LCBYVmlldywgWVZpZXcpOgogICAgICIiIkNhbnZhcyB3aWRnZXQgdG8gZGlzcGxheSBncmFwaGljYWwgZWxlbWVudHMgbGlrZSBsaW5lcyBvciB0ZXh0LiIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtYXN0ZXI9Tm9uZSwgY25mPXt9LCAqKmt3KToKQEAgLTI2MjcsMjIgKzI2MjIsMTkgQEAKICAgICBkZWYgYWN0aXZhdGUoc2VsZiwgaW5kZXgpOgogICAgICAgICAiIiJBY3RpdmF0ZSBpdGVtIGlkZW50aWZpZWQgYnkgSU5ERVguIiIiCiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnYWN0aXZhdGUnLCBpbmRleCkKLSAgICBkZWYgYmJveChzZWxmLCAqYXJncyk6CisgICAgZGVmIGJib3goc2VsZiwgaW5kZXgpOgogICAgICAgICAiIiJSZXR1cm4gYSB0dXBsZSBvZiBYMSxZMSxYMixZMiBjb29yZGluYXRlcyBmb3IgYSByZWN0YW5nbGUKLSAgICAgICAgd2hpY2ggZW5jbG9zZXMgdGhlIGl0ZW0gaWRlbnRpZmllZCBieSBpbmRleCBpbiBBUkdTLiIiIgotICAgICAgICByZXR1cm4gc2VsZi5fZ2V0aW50cygKLSAgICAgICAgICAgIHNlbGYudGsuY2FsbCgoc2VsZi5fdywgJ2Jib3gnKSArIGFyZ3MpKSBvciBOb25lCisgICAgICAgIHdoaWNoIGVuY2xvc2VzIHRoZSBpdGVtIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIGluZGV4LiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0aW50cyhzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2Jib3gnLCBpbmRleCkpIG9yIE5vbmUKICAgICBkZWYgY3Vyc2VsZWN0aW9uKHNlbGYpOgotICAgICAgICAiIiJSZXR1cm4gbGlzdCBvZiBpbmRpY2VzIG9mIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLiIiIgotICAgICAgICAjIFhYWCBPdWdodCB0byBhcHBseSBzZWxmLl9nZXRpbnRzKCkuLi4KLSAgICAgICAgcmV0dXJuIHNlbGYudGsuc3BsaXRsaXN0KHNlbGYudGsuY2FsbCgKLSAgICAgICAgICAgIHNlbGYuX3csICdjdXJzZWxlY3Rpb24nKSkKKyAgICAgICAgIiIiUmV0dXJuIHRoZSBpbmRpY2VzIG9mIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtLiIiIgorICAgICAgICByZXR1cm4gc2VsZi5fZ2V0aW50cyhzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2N1cnNlbGVjdGlvbicpKSBvciAoKQogICAgIGRlZiBkZWxldGUoc2VsZiwgZmlyc3QsIGxhc3Q9Tm9uZSk6Ci0gICAgICAgICIiIkRlbGV0ZSBpdGVtcyBmcm9tIEZJUlNUIHRvIExBU1QgKG5vdCBpbmNsdWRlZCkuIiIiCisgICAgICAgICIiIkRlbGV0ZSBpdGVtcyBmcm9tIEZJUlNUIHRvIExBU1QgKGluY2x1ZGVkKS4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdkZWxldGUnLCBmaXJzdCwgbGFzdCkKICAgICBkZWYgZ2V0KHNlbGYsIGZpcnN0LCBsYXN0PU5vbmUpOgotICAgICAgICAiIiJHZXQgbGlzdCBvZiBpdGVtcyBmcm9tIEZJUlNUIHRvIExBU1QgKG5vdCBpbmNsdWRlZCkuIiIiCi0gICAgICAgIGlmIGxhc3Q6CisgICAgICAgICIiIkdldCBsaXN0IG9mIGl0ZW1zIGZyb20gRklSU1QgdG8gTEFTVCAoaW5jbHVkZWQpLiIiIgorICAgICAgICBpZiBsYXN0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmV0dXJuIHNlbGYudGsuc3BsaXRsaXN0KHNlbGYudGsuY2FsbCgKICAgICAgICAgICAgICAgICBzZWxmLl93LCAnZ2V0JywgZmlyc3QsIGxhc3QpKQogICAgICAgICBlbHNlOgpAQCAtMjY3NSw3ICsyNjY3LDcgQEAKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICdzZWxlY3Rpb24nLCAnYW5jaG9yJywgaW5kZXgpCiAgICAgc2VsZWN0X2FuY2hvciA9IHNlbGVjdGlvbl9hbmNob3IKICAgICBkZWYgc2VsZWN0aW9uX2NsZWFyKHNlbGYsIGZpcnN0LCBsYXN0PU5vbmUpOgotICAgICAgICAiIiJDbGVhciB0aGUgc2VsZWN0aW9uIGZyb20gRklSU1QgdG8gTEFTVCAobm90IGluY2x1ZGVkKS4iIiIKKyAgICAgICAgIiIiQ2xlYXIgdGhlIHNlbGVjdGlvbiBmcm9tIEZJUlNUIHRvIExBU1QgKGluY2x1ZGVkKS4iIiIKICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csCiAgICAgICAgICAgICAgICAgICdzZWxlY3Rpb24nLCAnY2xlYXInLCBmaXJzdCwgbGFzdCkKICAgICBzZWxlY3RfY2xlYXIgPSBzZWxlY3Rpb25fY2xlYXIKQEAgLTI2ODUsNyArMjY3Nyw3IEBACiAgICAgICAgICAgICBzZWxmLl93LCAnc2VsZWN0aW9uJywgJ2luY2x1ZGVzJywgaW5kZXgpKQogICAgIHNlbGVjdF9pbmNsdWRlcyA9IHNlbGVjdGlvbl9pbmNsdWRlcwogICAgIGRlZiBzZWxlY3Rpb25fc2V0KHNlbGYsIGZpcnN0LCBsYXN0PU5vbmUpOgotICAgICAgICAiIiJTZXQgdGhlIHNlbGVjdGlvbiBmcm9tIEZJUlNUIHRvIExBU1QgKG5vdCBpbmNsdWRlZCkgd2l0aG91dAorICAgICAgICAiIiJTZXQgdGhlIHNlbGVjdGlvbiBmcm9tIEZJUlNUIHRvIExBU1QgKGluY2x1ZGVkKSB3aXRob3V0CiAgICAgICAgIGNoYW5naW5nIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgZWxlbWVudHMuIiIiCiAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl93LCAnc2VsZWN0aW9uJywgJ3NldCcsIGZpcnN0LCBsYXN0KQogICAgIHNlbGVjdF9zZXQgPSBzZWxlY3Rpb25fc2V0CkBAIC0yNzE4LDcgKzI3MTAsMTEgQEAKICAgICAgICAgc2VsZWN0Y29sb3IsIHRha2Vmb2N1cywgdGVhcm9mZiwgdGVhcm9mZmNvbW1hbmQsIHRpdGxlLCB0eXBlLiIiIgogICAgICAgICBXaWRnZXQuX19pbml0X18oc2VsZiwgbWFzdGVyLCAnbWVudScsIGNuZiwga3cpCiAgICAgZGVmIHRrX2JpbmRGb3JUcmF2ZXJzYWwoc2VsZik6Ci0gICAgICAgIHBhc3MgIyBvYnNvbGV0ZSBzaW5jZSBUayA0LjAKKyAgICAgICAgIyBvYnNvbGV0ZSBzaW5jZSBUayA0LjAKKyAgICAgICAgaW1wb3J0IHdhcm5pbmdzCisgICAgICAgIHdhcm5pbmdzLndhcm4oJ3RrX2JpbmRGb3JUcmF2ZXJzYWwoKSBkb2VzIG5vdGhpbmcgYW5kICcKKyAgICAgICAgICAgICAgICAgICAgICAnd2lsbCBiZSByZW1vdmVkIGluIDMuNicsCisgICAgICAgICAgICAgICAgICAgICAgRGVwcmVjYXRpb25XYXJuaW5nLCBzdGFja2xldmVsPTIpCiAgICAgZGVmIHRrX21iUG9zdChzZWxmKToKICAgICAgICAgc2VsZi50ay5jYWxsKCd0a19tYlBvc3QnLCBzZWxmLl93KQogICAgIGRlZiB0a19tYlVucG9zdChzZWxmKToKQEAgLTI5NjgsMTEgKzI5NjQsMTEgQEAKIAogICAgICAgICAiIiIKICAgICAgICAgV2lkZ2V0Ll9faW5pdF9fKHNlbGYsIG1hc3RlciwgJ3RleHQnLCBjbmYsIGt3KQotICAgIGRlZiBiYm94KHNlbGYsICphcmdzKToKKyAgICBkZWYgYmJveChzZWxmLCBpbmRleCk6CiAgICAgICAgICIiIlJldHVybiBhIHR1cGxlIG9mICh4LHksd2lkdGgsaGVpZ2h0KSB3aGljaCBnaXZlcyB0aGUgYm91bmRpbmcKLSAgICAgICAgYm94IG9mIHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIGNoYXJhY3RlciBhdCB0aGUgaW5kZXggaW4gQVJHUy4iIiIKKyAgICAgICAgYm94IG9mIHRoZSB2aXNpYmxlIHBhcnQgb2YgdGhlIGNoYXJhY3RlciBhdCB0aGUgZ2l2ZW4gaW5kZXguIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9nZXRpbnRzKAotICAgICAgICAgICAgc2VsZi50ay5jYWxsKChzZWxmLl93LCAnYmJveCcpICsgYXJncykpIG9yIE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgJ2Jib3gnLCBpbmRleCkpIG9yIE5vbmUKICAgICBkZWYgdGtfdGV4dFNlbGVjdFRvKHNlbGYsIGluZGV4KToKICAgICAgICAgc2VsZi50ay5jYWxsKCd0a190ZXh0U2VsZWN0VG8nLCBzZWxmLl93LCBpbmRleCkKICAgICBkZWYgdGtfdGV4dEJhY2tzcGFjZShzZWxmKToKQEAgLTMzNjQsNyArMzM2MCw3IEBACiAgICAgICAgICAgICBtYXN0ZXIgPSBfZGVmYXVsdF9yb290CiAgICAgICAgICAgICBpZiBub3QgbWFzdGVyOgogICAgICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignVG9vIGVhcmx5IHRvIGNyZWF0ZSBpbWFnZScpCi0gICAgICAgIHNlbGYudGsgPSBtYXN0ZXIudGsKKyAgICAgICAgc2VsZi50ayA9IGdldGF0dHIobWFzdGVyLCAndGsnLCBtYXN0ZXIpCiAgICAgICAgIGlmIG5vdCBuYW1lOgogICAgICAgICAgICAgSW1hZ2UuX2xhc3RfaWQgKz0gMQogICAgICAgICAgICAgbmFtZSA9ICJweWltYWdlJXIiICUgKEltYWdlLl9sYXN0X2lkLCkgIyB0ayBpdHNlbGYgd291bGQgdXNlIGltYWdlPHg+CkBAIC0zNDM1LDIwICszNDMxLDIwIEBACiAgICAgIyBYWFggY29weSAtZnJvbSwgLXRvLCAuLi4/CiAgICAgZGVmIGNvcHkoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIG5ldyBQaG90b0ltYWdlIHdpdGggdGhlIHNhbWUgaW1hZ2UgYXMgdGhpcyB3aWRnZXQuIiIiCi0gICAgICAgIGRlc3RJbWFnZSA9IFBob3RvSW1hZ2UoKQorICAgICAgICBkZXN0SW1hZ2UgPSBQaG90b0ltYWdlKG1hc3Rlcj1zZWxmLnRrKQogICAgICAgICBzZWxmLnRrLmNhbGwoZGVzdEltYWdlLCAnY29weScsIHNlbGYubmFtZSkKICAgICAgICAgcmV0dXJuIGRlc3RJbWFnZQogICAgIGRlZiB6b29tKHNlbGYseCx5PScnKToKICAgICAgICAgIiIiUmV0dXJuIGEgbmV3IFBob3RvSW1hZ2Ugd2l0aCB0aGUgc2FtZSBpbWFnZSBhcyB0aGlzIHdpZGdldAogICAgICAgICBidXQgem9vbSBpdCB3aXRoIFggYW5kIFkuIiIiCi0gICAgICAgIGRlc3RJbWFnZSA9IFBob3RvSW1hZ2UoKQorICAgICAgICBkZXN0SW1hZ2UgPSBQaG90b0ltYWdlKG1hc3Rlcj1zZWxmLnRrKQogICAgICAgICBpZiB5PT0nJzogeT14CiAgICAgICAgIHNlbGYudGsuY2FsbChkZXN0SW1hZ2UsICdjb3B5Jywgc2VsZi5uYW1lLCAnLXpvb20nLHgseSkKICAgICAgICAgcmV0dXJuIGRlc3RJbWFnZQogICAgIGRlZiBzdWJzYW1wbGUoc2VsZix4LHk9JycpOgogICAgICAgICAiIiJSZXR1cm4gYSBuZXcgUGhvdG9JbWFnZSBiYXNlZCBvbiB0aGUgc2FtZSBpbWFnZSBhcyB0aGlzIHdpZGdldAogICAgICAgICBidXQgdXNlIG9ubHkgZXZlcnkgWHRoIG9yIFl0aCBwaXhlbC4iIiIKLSAgICAgICAgZGVzdEltYWdlID0gUGhvdG9JbWFnZSgpCisgICAgICAgIGRlc3RJbWFnZSA9IFBob3RvSW1hZ2UobWFzdGVyPXNlbGYudGspCiAgICAgICAgIGlmIHk9PScnOiB5PXgKICAgICAgICAgc2VsZi50ay5jYWxsKGRlc3RJbWFnZSwgJ2NvcHknLCBzZWxmLm5hbWUsICctc3Vic2FtcGxlJyx4LHkpCiAgICAgICAgIHJldHVybiBkZXN0SW1hZ2UKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL19maXgucHkgYi9MaWIvdGtpbnRlci9fZml4LnB5CmluZGV4IDVmMzJkMjUuLmZhODg3MzQgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL19maXgucHkKKysrIGIvTGliL3RraW50ZXIvX2ZpeC5weQpAQCAtNDgsOCArNDgsOCBAQAogCiBwcmVmaXggPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfcHJlZml4LCJ0Y2wiKQogaWYgbm90IG9zLnBhdGguZXhpc3RzKHByZWZpeCk6Ci0gICAgIyBkZXZkaXIvLi4vdGNsdGsvbGliCi0gICAgcHJlZml4ID0gb3MucGF0aC5qb2luKHN5cy5iYXNlX3ByZWZpeCwgb3MucGF0aC5wYXJkaXIsICJ0Y2x0ayIsICJsaWIiKQorICAgICMgZGV2ZGlyL2V4dGVybmFscy90Y2x0ay9saWIKKyAgICBwcmVmaXggPSBvcy5wYXRoLmpvaW4oc3lzLmJhc2VfcHJlZml4LCAiZXh0ZXJuYWxzIiwgInRjbHRrIiwgImxpYiIpCiAgICAgcHJlZml4ID0gb3MucGF0aC5hYnNwYXRoKHByZWZpeCkKICMgaWYgdGhpcyBkb2VzIG5vdCBleGlzdCwgbm8gZnVydGhlciBzZWFyY2ggaXMgbmVlZGVkCiBpZiBvcy5wYXRoLmV4aXN0cyhwcmVmaXgpOgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvY29sb3JjaG9vc2VyLnB5IGIvTGliL3RraW50ZXIvY29sb3JjaG9vc2VyLnB5CmluZGV4IDYwMjcwNjcuLjlkYzk2NzEgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL2NvbG9yY2hvb3Nlci5weQorKysgYi9MaWIvdGtpbnRlci9jb2xvcmNob29zZXIucHkKQEAgLTEsNCArMSw0IEBACi0jIHRrIGNvbW1vbiBjb2xvdXIgY2hvb3NlciBkaWFsb2d1ZQorIyB0ayBjb21tb24gY29sb3IgY2hvb3NlciBkaWFsb2d1ZQogIwogIyB0aGlzIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gdGhlIG5hdGl2ZSBjb2xvciBkaWFsb2d1ZQogIyBhdmFpbGFibGUgaW4gVGsgNC4yIGFuZCBuZXdlci4KQEAgLTExLDcgKzExLDcgQEAKICMKICMgb3B0aW9ucyAoYWxsIGhhdmUgZGVmYXVsdCB2YWx1ZXMpOgogIwotIyAtIGluaXRpYWxjb2xvcjogY29sb3VyIHRvIG1hcmsgYXMgc2VsZWN0ZWQgd2hlbiBkaWFsb2cgaXMgZGlzcGxheWVkCisjIC0gaW5pdGlhbGNvbG9yOiBjb2xvciB0byBtYXJrIGFzIHNlbGVjdGVkIHdoZW4gZGlhbG9nIGlzIGRpc3BsYXllZAogIyAgIChnaXZlbiBhcyBhbiBSR0IgdHJpcGxldCBvciBhIFRrIGNvbG9yIHN0cmluZykKICMKICMgLSBwYXJlbnQ6IHdoaWNoIHdpbmRvdyB0byBwbGFjZSB0aGUgZGlhbG9nIG9uIHRvcCBvZgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weSBiL0xpYi90a2ludGVyL2ZpbGVkaWFsb2cucHkKaW5kZXggM2ZmYjI1Mi4uYTcxYWZiMiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvZmlsZWRpYWxvZy5weQorKysgYi9MaWIvdGtpbnRlci9maWxlZGlhbG9nLnB5CkBAIC0xNjYsNyArMTY2LDcgQEAKICAgICAgICAgZGlyLCBwYXQgPSBzZWxmLmdldF9maWx0ZXIoKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgc2VsZi5tYXN0ZXIuYmVsbCgpCiAgICAgICAgICAgICByZXR1cm4KICAgICAgICAgc2VsZi5kaXJlY3RvcnkgPSBkaXIKQEAgLTIwOSw3ICsyMDksNyBAQAogICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2FicyhkaXIpOgogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHB3ZCA9IG9zLmdldGN3ZCgpCi0gICAgICAgICAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBwd2QgPSBOb25lCiAgICAgICAgICAgICBpZiBwd2Q6CiAgICAgICAgICAgICAgICAgZGlyID0gb3MucGF0aC5qb2luKHB3ZCwgZGlyKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvZm9udC5weSBiL0xpYi90a2ludGVyL2ZvbnQucHkKaW5kZXggNDkyOTI0MS4uYjk2NjczMiAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvZm9udC5weQorKysgYi9MaWIvdGtpbnRlci9mb250LnB5CkBAIC02OSw5ICs2OSwxMCBAQAogICAgICAgICAgICAgICAgICAqKm9wdGlvbnMpOgogICAgICAgICBpZiBub3Qgcm9vdDoKICAgICAgICAgICAgIHJvb3QgPSB0a2ludGVyLl9kZWZhdWx0X3Jvb3QKKyAgICAgICAgdGsgPSBnZXRhdHRyKHJvb3QsICd0aycsIHJvb3QpCiAgICAgICAgIGlmIGZvbnQ6CiAgICAgICAgICAgICAjIGdldCBhY3R1YWwgc2V0dGluZ3MgY29ycmVzcG9uZGluZyB0byB0aGUgZ2l2ZW4gZm9udAotICAgICAgICAgICAgZm9udCA9IHJvb3QudGsuc3BsaXRsaXN0KHJvb3QudGsuY2FsbCgiZm9udCIsICJhY3R1YWwiLCBmb250KSkKKyAgICAgICAgICAgIGZvbnQgPSB0ay5zcGxpdGxpc3QodGsuY2FsbCgiZm9udCIsICJhY3R1YWwiLCBmb250KSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGZvbnQgPSBzZWxmLl9zZXQob3B0aW9ucykKICAgICAgICAgaWYgbm90IG5hbWU6CkBAIC04MSwyMCArODIsMTkgQEAKICAgICAgICAgaWYgZXhpc3RzOgogICAgICAgICAgICAgc2VsZi5kZWxldGVfZm9udCA9IEZhbHNlCiAgICAgICAgICAgICAjIGNvbmZpcm0gZm9udCBleGlzdHMKLSAgICAgICAgICAgIGlmIHNlbGYubmFtZSBub3QgaW4gcm9vdC50ay5jYWxsKCJmb250IiwgIm5hbWVzIik6CisgICAgICAgICAgICBpZiBzZWxmLm5hbWUgbm90IGluIHRrLnNwbGl0bGlzdCh0ay5jYWxsKCJmb250IiwgIm5hbWVzIikpOgogICAgICAgICAgICAgICAgIHJhaXNlIHRraW50ZXIuX3RraW50ZXIuVGNsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICJuYW1lZCBmb250ICVzIGRvZXMgbm90IGFscmVhZHkgZXhpc3QiICUgKHNlbGYubmFtZSwpKQogICAgICAgICAgICAgIyBpZiBmb250IGNvbmZpZyBpbmZvIHN1cHBsaWVkLCBhcHBseSBpdAogICAgICAgICAgICAgaWYgZm9udDoKLSAgICAgICAgICAgICAgICByb290LnRrLmNhbGwoImZvbnQiLCAiY29uZmlndXJlIiwgc2VsZi5uYW1lLCAqZm9udCkKKyAgICAgICAgICAgICAgICB0ay5jYWxsKCJmb250IiwgImNvbmZpZ3VyZSIsIHNlbGYubmFtZSwgKmZvbnQpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAjIGNyZWF0ZSBuZXcgZm9udCAocmFpc2VzIFRjbEVycm9yIGlmIHRoZSBmb250IGV4aXN0cykKLSAgICAgICAgICAgIHJvb3QudGsuY2FsbCgiZm9udCIsICJjcmVhdGUiLCBzZWxmLm5hbWUsICpmb250KQorICAgICAgICAgICAgdGsuY2FsbCgiZm9udCIsICJjcmVhdGUiLCBzZWxmLm5hbWUsICpmb250KQogICAgICAgICAgICAgc2VsZi5kZWxldGVfZm9udCA9IFRydWUKLSAgICAgICAgIyBiYWNrbGlua3MhCi0gICAgICAgIHNlbGYuX3Jvb3QgID0gcm9vdAotICAgICAgICBzZWxmLl9zcGxpdCA9IHJvb3QudGsuc3BsaXRsaXN0Ci0gICAgICAgIHNlbGYuX2NhbGwgID0gcm9vdC50ay5jYWxsCisgICAgICAgIHNlbGYuX3RrID0gdGsKKyAgICAgICAgc2VsZi5fc3BsaXQgPSB0ay5zcGxpdGxpc3QKKyAgICAgICAgc2VsZi5fY2FsbCAgPSB0ay5jYWxsCiAKICAgICBkZWYgX19zdHJfXyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYubmFtZQpAQCAtMTE5LDcgKzExOSw3IEBACiAKICAgICBkZWYgY29weShzZWxmKToKICAgICAgICAgIlJldHVybiBhIGRpc3RpbmN0IGNvcHkgb2YgdGhlIGN1cnJlbnQgZm9udCIKLSAgICAgICAgcmV0dXJuIEZvbnQoc2VsZi5fcm9vdCwgKipzZWxmLmFjdHVhbCgpKQorICAgICAgICByZXR1cm4gRm9udChzZWxmLl90aywgKipzZWxmLmFjdHVhbCgpKQogCiAgICAgZGVmIGFjdHVhbChzZWxmLCBvcHRpb249Tm9uZSwgZGlzcGxheW9mPU5vbmUpOgogICAgICAgICAiUmV0dXJuIGFjdHVhbCBmb250IGF0dHJpYnV0ZXMiCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3J1bnRrdGVzdHMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3J1bnRrdGVzdHMucHkKaW5kZXggZTIxZWNhNC4uY2NiMzc1NSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC9ydW50a3Rlc3RzLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvcnVudGt0ZXN0cy5weQpAQCAtNjgsNSArNjgsNCBAQAogICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKLSAgICB0ZXN0LnN1cHBvcnQudXNlX3Jlc291cmNlcyA9IFsnZ3VpJ10KICAgICB0ZXN0LnN1cHBvcnQucnVuX3VuaXR0ZXN0KCpnZXRfdGVzdHMoKSkKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3Qvc3VwcG9ydC5weSBiL0xpYi90a2ludGVyL3Rlc3Qvc3VwcG9ydC5weQppbmRleCBmY2Q5ZmZjLi5kZDE1NWZhIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90ZXN0L3N1cHBvcnQucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC9zdXBwb3J0LnB5CkBAIC0xLDc0ICsxLDQ1IEBACi1pbXBvcnQgc3lzCitpbXBvcnQgcmUKIGltcG9ydCB0a2ludGVyCiBpbXBvcnQgdW5pdHRlc3QKIAotX3RrX3VuYXZhaWxhYmxlID0gTm9uZQorY2xhc3MgQWJzdHJhY3RUa1Rlc3Q6CiAKLWRlZiBjaGVja190a19hdmFpbGFiaWxpdHkoKToKLSAgICAiIiJDaGVjayB0aGF0IFRrIGlzIGluc3RhbGxlZCBhbmQgYXZhaWxhYmxlLiIiIgotICAgIGdsb2JhbCBfdGtfdW5hdmFpbGFibGUKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBjbHMuX29sZF9zdXBwb3J0X2RlZmF1bHRfcm9vdCA9IHRraW50ZXIuX3N1cHBvcnRfZGVmYXVsdF9yb290CisgICAgICAgIGRlc3Ryb3lfZGVmYXVsdF9yb290KCkKKyAgICAgICAgdGtpbnRlci5Ob0RlZmF1bHRSb290KCkKKyAgICAgICAgY2xzLnJvb3QgPSB0a2ludGVyLlRrKCkKKyAgICAgICAgY2xzLndhbnRvYmplY3RzID0gY2xzLnJvb3Qud2FudG9iamVjdHMoKQorICAgICAgICAjIERlLW1heGltaXplIG1haW4gd2luZG93LgorICAgICAgICAjIFNvbWUgd2luZG93IG1hbmFnZXJzIGNhbiBtYXhpbWl6ZSBuZXcgd2luZG93cy4KKyAgICAgICAgY2xzLnJvb3Qud21fc3RhdGUoJ25vcm1hbCcpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNscy5yb290LndtX2F0dHJpYnV0ZXMoJy16b29tZWQnLCBGYWxzZSkKKyAgICAgICAgZXhjZXB0IHRraW50ZXIuVGNsRXJyb3I6CisgICAgICAgICAgICBwYXNzCiAKLSAgICBpZiBfdGtfdW5hdmFpbGFibGUgaXMgTm9uZToKLSAgICAgICAgX3RrX3VuYXZhaWxhYmxlID0gRmFsc2UKLSAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgotICAgICAgICAgICAgIyBUaGUgQXF1YSBUayBpbXBsZW1lbnRhdGlvbnMgb24gT1MgWCBjYW4gYWJvcnQgdGhlIHByb2Nlc3MgaWYKLSAgICAgICAgICAgICMgYmVpbmcgY2FsbGVkIGluIGFuIGVudmlyb25tZW50IHdoZXJlIGEgd2luZG93IHNlcnZlciBjb25uZWN0aW9uCi0gICAgICAgICAgICAjIGNhbm5vdCBiZSBtYWRlLCBmb3IgaW5zdGFuY2Ugd2hlbiBpbnZva2VkIGJ5IGEgYnVpbGRib3Qgb3Igc3NoCi0gICAgICAgICAgICAjIHByb2Nlc3Mgbm90IHJ1bm5pbmcgdW5kZXIgdGhlIHNhbWUgdXNlciBpZCBhcyB0aGUgY3VycmVudCBjb25zb2xlCi0gICAgICAgICAgICAjIHVzZXIuICBUbyBhdm9pZCB0aGF0LCByYWlzZSBhbiBleGNlcHRpb24gaWYgdGhlIHdpbmRvdyBtYW5hZ2VyCi0gICAgICAgICAgICAjIGNvbm5lY3Rpb24gaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAgIGZyb20gY3R5cGVzIGltcG9ydCBjZGxsLCBjX2ludCwgcG9pbnRlciwgU3RydWN0dXJlCi0gICAgICAgICAgICBmcm9tIGN0eXBlcy51dGlsIGltcG9ydCBmaW5kX2xpYnJhcnkKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgdGVhckRvd25DbGFzcyhjbHMpOgorICAgICAgICBjbHMucm9vdC51cGRhdGVfaWRsZXRhc2tzKCkKKyAgICAgICAgY2xzLnJvb3QuZGVzdHJveSgpCisgICAgICAgIGRlbCBjbHMucm9vdAorICAgICAgICB0a2ludGVyLl9kZWZhdWx0X3Jvb3QgPSBOb25lCisgICAgICAgIHRraW50ZXIuX3N1cHBvcnRfZGVmYXVsdF9yb290ID0gY2xzLl9vbGRfc3VwcG9ydF9kZWZhdWx0X3Jvb3QKIAotICAgICAgICAgICAgYXBwX3NlcnZpY2VzID0gY2RsbC5Mb2FkTGlicmFyeShmaW5kX2xpYnJhcnkoIkFwcGxpY2F0aW9uU2VydmljZXMiKSkKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHNlbGYucm9vdC5kZWljb25pZnkoKQogCi0gICAgICAgICAgICBpZiBhcHBfc2VydmljZXMuQ0dNYWluRGlzcGxheUlEKCkgPT0gMDoKLSAgICAgICAgICAgICAgICBfdGtfdW5hdmFpbGFibGUgPSAiY2Fubm90IHJ1biB3aXRob3V0IE9TIFggd2luZG93IG1hbmFnZXIiCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGNsYXNzIFByb2Nlc3NTZXJpYWxOdW1iZXIoU3RydWN0dXJlKToKLSAgICAgICAgICAgICAgICAgICAgX2ZpZWxkc18gPSBbKCJoaWdoTG9uZ09mUFNOIiwgY19pbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImxvd0xvbmdPZlBTTiIsIGNfaW50KV0KLSAgICAgICAgICAgICAgICBwc24gPSBQcm9jZXNzU2VyaWFsTnVtYmVyKCkKLSAgICAgICAgICAgICAgICBwc25fcCA9IHBvaW50ZXIocHNuKQotICAgICAgICAgICAgICAgIGlmICggIChhcHBfc2VydmljZXMuR2V0Q3VycmVudFByb2Nlc3MocHNuX3ApIDwgMCkgb3IKLSAgICAgICAgICAgICAgICAgICAgICAoYXBwX3NlcnZpY2VzLlNldEZyb250UHJvY2Vzcyhwc25fcCkgPCAwKSApOgotICAgICAgICAgICAgICAgICAgICBfdGtfdW5hdmFpbGFibGUgPSAiY2Fubm90IHJ1biB3aXRob3V0IE9TIFggZ3VpIHByb2Nlc3MiCi0gICAgICAgIGVsc2U6ICAgIyBub3QgT1MgWAotICAgICAgICAgICAgaW1wb3J0IHRraW50ZXIKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICB0a2ludGVyLkJ1dHRvbigpCi0gICAgICAgICAgICBleGNlcHQgdGtpbnRlci5UY2xFcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICAgICAgIyBhc3N1bWluZyB0ayBpcyBub3QgYXZhaWxhYmxlCi0gICAgICAgICAgICAgICAgX3RrX3VuYXZhaWxhYmxlID0gInRrIG5vdCBhdmFpbGFibGU6ICVzIiAlIG1zZworICAgIGRlZiB0ZWFyRG93bihzZWxmKToKKyAgICAgICAgZm9yIHcgaW4gc2VsZi5yb290LndpbmZvX2NoaWxkcmVuKCk6CisgICAgICAgICAgICB3LmRlc3Ryb3koKQorICAgICAgICBzZWxmLnJvb3Qud2l0aGRyYXcoKQogCi0gICAgaWYgX3RrX3VuYXZhaWxhYmxlOgotICAgICAgICByYWlzZSB1bml0dGVzdC5Ta2lwVGVzdChfdGtfdW5hdmFpbGFibGUpCi0gICAgcmV0dXJuCi0KLWRlZiBnZXRfdGtfcm9vdCgpOgotICAgIGNoZWNrX3RrX2F2YWlsYWJpbGl0eSgpICAgICAjIHJhaXNlIGV4Y2VwdGlvbiBpZiB0ayB1bmF2YWlsYWJsZQotICAgIHRyeToKLSAgICAgICAgcm9vdCA9IHRraW50ZXIuX2RlZmF1bHRfcm9vdAotICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKLSAgICAgICAgIyBpdCBpcyBwb3NzaWJsZSB0byBkaXNhYmxlIGRlZmF1bHQgcm9vdCBpbiBUa2ludGVyLCBhbHRob3VnaAotICAgICAgICAjIEkgaGF2ZW4ndCBzZWVuIHBlb3BsZSBkb2luZyBpdCAoYnV0IGFwcGFyZW50bHkgc29tZW9uZSBkaWQgaXQKLSAgICAgICAgIyBoZXJlKS4KLSAgICAgICAgcm9vdCA9IE5vbmUKLQotICAgIGlmIHJvb3QgaXMgTm9uZToKLSAgICAgICAgIyBjcmVhdGUgYSBuZXcgbWFzdGVyIG9ubHkgaWYgdGhlcmUgaXNuJ3Qgb25lIGFscmVhZHkKLSAgICAgICAgcm9vdCA9IHRraW50ZXIuVGsoKQotCi0gICAgcmV0dXJuIHJvb3QKLQotZGVmIHJvb3RfZGVpY29uaWZ5KCk6Ci0gICAgcm9vdCA9IGdldF90a19yb290KCkKLSAgICByb290LmRlaWNvbmlmeSgpCi0KLWRlZiByb290X3dpdGhkcmF3KCk6Ci0gICAgcm9vdCA9IGdldF90a19yb290KCkKLSAgICByb290LndpdGhkcmF3KCkKLQorZGVmIGRlc3Ryb3lfZGVmYXVsdF9yb290KCk6CisgICAgaWYgZ2V0YXR0cih0a2ludGVyLCAnX2RlZmF1bHRfcm9vdCcsIE5vbmUpOgorICAgICAgICB0a2ludGVyLl9kZWZhdWx0X3Jvb3QudXBkYXRlX2lkbGV0YXNrcygpCisgICAgICAgIHRraW50ZXIuX2RlZmF1bHRfcm9vdC5kZXN0cm95KCkKKyAgICAgICAgdGtpbnRlci5fZGVmYXVsdF9yb290ID0gTm9uZQogCiBkZWYgc2ltdWxhdGVfbW91c2VfY2xpY2sod2lkZ2V0LCB4LCB5KToKICAgICAiIiJHZW5lcmF0ZSBwcm9wZXIgZXZlbnRzIHRvIGNsaWNrIGF0IHRoZSB4LCB5IHBvc2l0aW9uICh0cmllcyB0byBhY3QKQEAgLTkxLDE0ICs2MiwxNSBAQAogICAgIGdsb2JhbCBfdGtfcGF0Y2hsZXZlbAogICAgIGlmIF90a19wYXRjaGxldmVsIGlzIE5vbmU6CiAgICAgICAgIHRjbCA9IHRraW50ZXIuVGNsKCkKLSAgICAgICAgcGF0Y2hsZXZlbCA9IFtdCi0gICAgICAgIGZvciB4IGluIHRjbC5jYWxsKCdpbmZvJywgJ3BhdGNobGV2ZWwnKS5zcGxpdCgnLicpOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgIHggPSBpbnQoeCwgMTApCi0gICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgICAgICB4ID0gLTEKLSAgICAgICAgICAgIHBhdGNobGV2ZWwuYXBwZW5kKHgpCi0gICAgICAgIF90a19wYXRjaGxldmVsID0gdHVwbGUocGF0Y2hsZXZlbCkKKyAgICAgICAgcGF0Y2hsZXZlbCA9IHRjbC5jYWxsKCdpbmZvJywgJ3BhdGNobGV2ZWwnKQorICAgICAgICBtID0gcmUuZnVsbG1hdGNoKHInKFxkKylcLihcZCspKFthYi5dKShcZCspJywgcGF0Y2hsZXZlbCkKKyAgICAgICAgbWFqb3IsIG1pbm9yLCByZWxlYXNlbGV2ZWwsIHNlcmlhbCA9IG0uZ3JvdXBzKCkKKyAgICAgICAgbWFqb3IsIG1pbm9yLCBzZXJpYWwgPSBpbnQobWFqb3IpLCBpbnQobWlub3IpLCBpbnQoc2VyaWFsKQorICAgICAgICByZWxlYXNlbGV2ZWwgPSB7J2EnOiAnYWxwaGEnLCAnYic6ICdiZXRhJywgJy4nOiAnZmluYWwnfVtyZWxlYXNlbGV2ZWxdCisgICAgICAgIGlmIHJlbGVhc2VsZXZlbCA9PSAnZmluYWwnOgorICAgICAgICAgICAgX3RrX3BhdGNobGV2ZWwgPSBtYWpvciwgbWlub3IsIHNlcmlhbCwgcmVsZWFzZWxldmVsLCAwCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBfdGtfcGF0Y2hsZXZlbCA9IG1ham9yLCBtaW5vciwgMCwgcmVsZWFzZWxldmVsLCBzZXJpYWwKICAgICByZXR1cm4gX3RrX3BhdGNobGV2ZWwKIAogdW5pdHMgPSB7CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2ZvbnQucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2ZvbnQucHkKaW5kZXggZGZkNjMwYi4uYzA5NGM2MSAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9mb250LnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZm9udC5weQpAQCAtMiwzMSArMiw5NCBAQAogaW1wb3J0IHRraW50ZXIKIGZyb20gdGtpbnRlciBpbXBvcnQgZm9udAogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKLWltcG9ydCB0a2ludGVyLnRlc3Quc3VwcG9ydCBhcyBzdXBwb3J0Citmcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCBBYnN0cmFjdFRrVGVzdAogCiByZXF1aXJlcygnZ3VpJykKIAotY2xhc3MgRm9udFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorZm9udG5hbWUgPSAiVGtEZWZhdWx0Rm9udCIKIAotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCitjbGFzcyBGb250VGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQotCi0gICAgZGVmIHRlc3RfZm9udF9lcShzZWxmKToKLSAgICAgICAgZm9udG5hbWUgPSAiVGtEZWZhdWx0Rm9udCIKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBBYnN0cmFjdFRrVGVzdC5zZXRVcENsYXNzLl9fZnVuY19fKGNscykKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgZiA9IGZvbnQuRm9udChuYW1lPWZvbnRuYW1lLCBleGlzdHM9VHJ1ZSkKLSAgICAgICAgZXhjZXB0IHRraW50ZXIuX3RraW50ZXIuVGNsRXJyb3I6Ci0gICAgICAgICAgICBmID0gZm9udC5Gb250KG5hbWU9Zm9udG5hbWUsIGV4aXN0cz1GYWxzZSkKLSAgICAgICAgZm9udDEgPSBmb250Lm5hbWV0b2ZvbnQoZm9udG5hbWUpCi0gICAgICAgIGZvbnQyID0gZm9udC5uYW1ldG9mb250KGZvbnRuYW1lKQorICAgICAgICAgICAgY2xzLmZvbnQgPSBmb250LkZvbnQocm9vdD1jbHMucm9vdCwgbmFtZT1mb250bmFtZSwgZXhpc3RzPVRydWUpCisgICAgICAgIGV4Y2VwdCB0a2ludGVyLlRjbEVycm9yOgorICAgICAgICAgICAgY2xzLmZvbnQgPSBmb250LkZvbnQocm9vdD1jbHMucm9vdCwgbmFtZT1mb250bmFtZSwgZXhpc3RzPUZhbHNlKQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlKHNlbGYpOgorICAgICAgICBvcHRpb25zID0gc2VsZi5mb250LmNvbmZpZ3VyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0R3JlYXRlckVxdWFsKHNldChvcHRpb25zKSwKKyAgICAgICAgICAgIHsnZmFtaWx5JywgJ3NpemUnLCAnd2VpZ2h0JywgJ3NsYW50JywgJ3VuZGVybGluZScsICdvdmVyc3RyaWtlJ30pCisgICAgICAgIGZvciBrZXkgaW4gb3B0aW9uczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5mb250LmNnZXQoa2V5KSwgb3B0aW9uc1trZXldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZvbnRba2V5XSwgb3B0aW9uc1trZXldKQorICAgICAgICBmb3Iga2V5IGluICdmYW1pbHknLCAnd2VpZ2h0JywgJ3NsYW50JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcHRpb25zW2tleV0sIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmZvbnQuY2dldChrZXkpLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5mb250W2tleV0sIHN0cikKKyAgICAgICAgc2l6ZXR5cGUgPSBpbnQgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlIHN0cgorICAgICAgICBmb3Iga2V5IGluICdzaXplJywgJ3VuZGVybGluZScsICdvdmVyc3RyaWtlJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcHRpb25zW2tleV0sIHNpemV0eXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuZm9udC5jZ2V0KGtleSksIHNpemV0eXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuZm9udFtrZXldLCBzaXpldHlwZSkKKworICAgIGRlZiB0ZXN0X2FjdHVhbChzZWxmKToKKyAgICAgICAgb3B0aW9ucyA9IHNlbGYuZm9udC5hY3R1YWwoKQorICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXJFcXVhbChzZXQob3B0aW9ucyksCisgICAgICAgICAgICB7J2ZhbWlseScsICdzaXplJywgJ3dlaWdodCcsICdzbGFudCcsICd1bmRlcmxpbmUnLCAnb3ZlcnN0cmlrZSd9KQorICAgICAgICBmb3Iga2V5IGluIG9wdGlvbnM6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZm9udC5hY3R1YWwoa2V5KSwgb3B0aW9uc1trZXldKQorICAgICAgICBmb3Iga2V5IGluICdmYW1pbHknLCAnd2VpZ2h0JywgJ3NsYW50JzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcHRpb25zW2tleV0sIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzZWxmLmZvbnQuYWN0dWFsKGtleSksIHN0cikKKyAgICAgICAgc2l6ZXR5cGUgPSBpbnQgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlIHN0cgorICAgICAgICBmb3Iga2V5IGluICdzaXplJywgJ3VuZGVybGluZScsICdvdmVyc3RyaWtlJzoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShvcHRpb25zW2tleV0sIHNpemV0eXBlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuZm9udC5hY3R1YWwoa2V5KSwgc2l6ZXR5cGUpCisKKyAgICBkZWYgdGVzdF9uYW1lKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYuZm9udC5uYW1lLCBmb250bmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoc2VsZi5mb250KSwgZm9udG5hbWUpCisKKyAgICBkZWYgdGVzdF9lcShzZWxmKToKKyAgICAgICAgZm9udDEgPSBmb250LkZvbnQocm9vdD1zZWxmLnJvb3QsIG5hbWU9Zm9udG5hbWUsIGV4aXN0cz1UcnVlKQorICAgICAgICBmb250MiA9IGZvbnQuRm9udChyb290PXNlbGYucm9vdCwgbmFtZT1mb250bmFtZSwgZXhpc3RzPVRydWUpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoZm9udDEsIGZvbnQyKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZvbnQxLCBmb250MikKICAgICAgICAgc2VsZi5hc3NlcnROb3RFcXVhbChmb250MSwgZm9udDEuY29weSgpKQogICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGZvbnQxLCAwKQogCisgICAgZGVmIHRlc3RfbWVhc3VyZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYuZm9udC5tZWFzdXJlKCdhYmMnKSwgaW50KQorCisgICAgZGVmIHRlc3RfbWV0cmljcyhzZWxmKToKKyAgICAgICAgbWV0cmljcyA9IHNlbGYuZm9udC5tZXRyaWNzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRHcmVhdGVyRXF1YWwoc2V0KG1ldHJpY3MpLAorICAgICAgICAgICAgeydhc2NlbnQnLCAnZGVzY2VudCcsICdsaW5lc3BhY2UnLCAnZml4ZWQnfSkKKyAgICAgICAgZm9yIGtleSBpbiBtZXRyaWNzOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLmZvbnQubWV0cmljcyhrZXkpLCBtZXRyaWNzW2tleV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UobWV0cmljc1trZXldLCBpbnQpCisgICAgICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi5mb250Lm1ldHJpY3Moa2V5KSwgaW50KQorCisgICAgZGVmIHRlc3RfZmFtaWxpZXMoc2VsZik6CisgICAgICAgIGZhbWlsaWVzID0gZm9udC5mYW1pbGllcyhzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYW1pbGllcywgdHVwbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmYW1pbGllcykKKyAgICAgICAgZm9yIGZhbWlseSBpbiBmYW1pbGllczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmYW1pbHksIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShmYW1pbHkpCisKKyAgICBkZWYgdGVzdF9uYW1lcyhzZWxmKToKKyAgICAgICAgbmFtZXMgPSBmb250Lm5hbWVzKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKG5hbWVzLCB0dXBsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG5hbWVzKQorICAgICAgICBmb3IgbmFtZSBpbiBuYW1lczoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShuYW1lLCBzdHIpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUobmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbihmb250bmFtZSwgbmFtZXMpCisKIHRlc3RzX2d1aSA9IChGb250VGVzdCwgKQogCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9nZW9tZXRyeV9tYW5hZ2Vycy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZ2VvbWV0cnlfbWFuYWdlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyYjFiZQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfZ2VvbWV0cnlfbWFuYWdlcnMucHkKQEAgLTAsMCArMSw5MDAgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHJlCitpbXBvcnQgdGtpbnRlcgorZnJvbSB0a2ludGVyIGltcG9ydCBUY2xFcnJvcgorZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzCisKK2Zyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IHBpeGVsc19jb252LCB0Y2xfdmVyc2lvbiwgcmVxdWlyZXNfdGNsCitmcm9tIHRraW50ZXIudGVzdC53aWRnZXRfdGVzdHMgaW1wb3J0IEFic3RyYWN0V2lkZ2V0VGVzdAorCityZXF1aXJlcygnZ3VpJykKKworCitjbGFzcyBQYWNrVGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjcmVhdGUyKHNlbGYpOgorICAgICAgICBwYWNrID0gdGtpbnRlci5Ub3BsZXZlbChzZWxmLnJvb3QsIG5hbWU9J3BhY2snKQorICAgICAgICBwYWNrLndtX2dlb21ldHJ5KCczMDB4MjAwKzArMCcpCisgICAgICAgIHBhY2sud21fbWluc2l6ZSgxLCAxKQorICAgICAgICBhID0gdGtpbnRlci5GcmFtZShwYWNrLCBuYW1lPSdhJywgd2lkdGg9MjAsIGhlaWdodD00MCwgYmc9J3JlZCcpCisgICAgICAgIGIgPSB0a2ludGVyLkZyYW1lKHBhY2ssIG5hbWU9J2InLCB3aWR0aD01MCwgaGVpZ2h0PTMwLCBiZz0nYmx1ZScpCisgICAgICAgIGMgPSB0a2ludGVyLkZyYW1lKHBhY2ssIG5hbWU9J2MnLCB3aWR0aD04MCwgaGVpZ2h0PTgwLCBiZz0nZ3JlZW4nKQorICAgICAgICBkID0gdGtpbnRlci5GcmFtZShwYWNrLCBuYW1lPSdkJywgd2lkdGg9NDAsIGhlaWdodD0zMCwgYmc9J3llbGxvdycpCisgICAgICAgIHJldHVybiBwYWNrLCBhLCBiLCBjLCBkCisKKyAgICBkZWYgdGVzdF9wYWNrX2NvbmZpZ3VyZV9hZnRlcihzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ3dpbmRvdyAiJXMiIGlzblwndCBwYWNrZWQnICUgYik6CisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKGFmdGVyPWIpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCB3aW5kb3cgcGF0aCBuYW1lICIuZm9vIicpOgorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShhZnRlcj0nLmZvbycpCisgICAgICAgIGEucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBjLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGQucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFthLCBiLCBjLCBkXSkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShhZnRlcj1iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2IsIGEsIGMsIGRdKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKGFmdGVyPWEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYiwgYSwgYywgZF0pCisKKyAgICBkZWYgdGVzdF9wYWNrX2NvbmZpZ3VyZV9hbmNob3Ioc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBkZWYgY2hlY2soYW5jaG9yLCBnZW9tKToKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoc2lkZT0ndG9wJywgaXBhZHg9NSwgcGFkeD0xMCwgaXBhZHk9MTUsIHBhZHk9MjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZD1UcnVlLCBhbmNob3I9YW5jaG9yKQorICAgICAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEud2luZm9fZ2VvbWV0cnkoKSwgZ2VvbSkKKyAgICAgICAgY2hlY2soJ24nLCAnMzB4NzArMTM1KzIwJykKKyAgICAgICAgY2hlY2soJ25lJywgJzMweDcwKzI2MCsyMCcpCisgICAgICAgIGNoZWNrKCdlJywgJzMweDcwKzI2MCs2NScpCisgICAgICAgIGNoZWNrKCdzZScsICczMHg3MCsyNjArMTEwJykKKyAgICAgICAgY2hlY2soJ3MnLCAnMzB4NzArMTM1KzExMCcpCisgICAgICAgIGNoZWNrKCdzdycsICczMHg3MCsxMCsxMTAnKQorICAgICAgICBjaGVjaygndycsICczMHg3MCsxMCs2NScpCisgICAgICAgIGNoZWNrKCdudycsICczMHg3MCsxMCsyMCcpCisgICAgICAgIGNoZWNrKCdjZW50ZXInLCAnMzB4NzArMTM1KzY1JykKKworICAgIGRlZiB0ZXN0X3BhY2tfY29uZmlndXJlX2JlZm9yZShzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ3dpbmRvdyAiJXMiIGlzblwndCBwYWNrZWQnICUgYik6CisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKGJlZm9yZT1iKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgd2luZG93IHBhdGggbmFtZSAiLmZvbyInKToKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoYmVmb3JlPScuZm9vJykKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBiLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGMucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgZC5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2EsIGIsIGMsIGRdKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKGJlZm9yZT1kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2IsIGMsIGEsIGRdKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKGJlZm9yZT1hKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2IsIGMsIGEsIGRdKQorCisgICAgZGVmIHRlc3RfcGFja19jb25maWd1cmVfZXhwYW5kKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZGVmIGNoZWNrKCpnZW9tcyk6CisgICAgICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS53aW5mb19nZW9tZXRyeSgpLCBnZW9tc1swXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi53aW5mb19nZW9tZXRyeSgpLCBnZW9tc1sxXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYy53aW5mb19nZW9tZXRyeSgpLCBnZW9tc1syXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZC53aW5mb19nZW9tZXRyeSgpLCBnZW9tc1szXSkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShzaWRlPSdsZWZ0JykKKyAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBjLnBhY2tfY29uZmlndXJlKHNpZGU9J3JpZ2h0JykKKyAgICAgICAgZC5wYWNrX2NvbmZpZ3VyZShzaWRlPSdib3R0b20nKQorICAgICAgICBjaGVjaygnMjB4NDArMCs4MCcsICc1MHgzMCsxMzUrMCcsICc4MHg4MCsyMjArNzUnLCAnNDB4MzArMTAwKzE3MCcpCisgICAgICAgIGEucGFja19jb25maWd1cmUoc2lkZT0nbGVmdCcsIGV4cGFuZD0neWVzJykKKyAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnLCBleHBhbmQ9J29uJykKKyAgICAgICAgYy5wYWNrX2NvbmZpZ3VyZShzaWRlPSdyaWdodCcsIGV4cGFuZD1UcnVlKQorICAgICAgICBkLnBhY2tfY29uZmlndXJlKHNpZGU9J2JvdHRvbScsIGV4cGFuZD0xKQorICAgICAgICBjaGVjaygnMjB4NDArNDArODAnLCAnNTB4MzArMTc1KzM1JywgJzgweDgwKzE4MCsxMTAnLCAnNDB4MzArMTAwKzEzNScpCisgICAgICAgIGEucGFja19jb25maWd1cmUoc2lkZT0nbGVmdCcsIGV4cGFuZD0neWVzJywgZmlsbD0nYm90aCcpCisgICAgICAgIGIucGFja19jb25maWd1cmUoc2lkZT0ndG9wJywgZXhwYW5kPSdvbicsIGZpbGw9J2JvdGgnKQorICAgICAgICBjLnBhY2tfY29uZmlndXJlKHNpZGU9J3JpZ2h0JywgZXhwYW5kPVRydWUsIGZpbGw9J2JvdGgnKQorICAgICAgICBkLnBhY2tfY29uZmlndXJlKHNpZGU9J2JvdHRvbScsIGV4cGFuZD0xLCBmaWxsPSdib3RoJykKKyAgICAgICAgY2hlY2soJzEwMHgyMDArMCswJywgJzIwMHgxMDArMTAwKzAnLCAnMTYweDEwMCsxNDArMTAwJywgJzQweDEwMCsxMDArMTAwJykKKworICAgIGRlZiB0ZXN0X3BhY2tfY29uZmlndXJlX2luKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBiLnBhY2tfY29uZmlndXJlKHNpZGU9J3RvcCcpCisgICAgICAgIGMucGFja19jb25maWd1cmUoc2lkZT0ndG9wJykKKyAgICAgICAgZC5wYWNrX2NvbmZpZ3VyZShzaWRlPSd0b3AnKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKGluXz1wYWNrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2IsIGMsIGQsIGFdKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKGluXz1jKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2IsIGMsIGRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGMucGFja19zbGF2ZXMoKSwgW2FdKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY2FuXCd0IHBhY2sgJXMgaW5zaWRlIGl0c2VsZicgJSAoYSwpKToKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoaW5fPWEpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCB3aW5kb3cgcGF0aCBuYW1lICIuZm9vIicpOgorICAgICAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShpbl89Jy5mb28nKQorCisgICAgZGVmIHRlc3RfcGFja19jb25maWd1cmVfcGFkeF9pcGFkeF9maWxsKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZGVmIGNoZWNrKGdlb20xLCBnZW9tMiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgYS5wYWNrX2ZvcmdldCgpCisgICAgICAgICAgICBiLnBhY2tfZm9yZ2V0KCkKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoKiprd2FyZ3MpCisgICAgICAgICAgICBiLnBhY2tfY29uZmlndXJlKGV4cGFuZD1UcnVlLCBmaWxsPSdib3RoJykKKyAgICAgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLndpbmZvX2dlb21ldHJ5KCksIGdlb20xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLndpbmZvX2dlb21ldHJ5KCksIGdlb20yKQorICAgICAgICBjaGVjaygnMjB4NDArMjYwKzgwJywgJzI0MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBwYWR4PTIwKQorICAgICAgICBjaGVjaygnMjB4NDArMjUwKzgwJywgJzI0MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBwYWR4PSgxMCwgMzApKQorICAgICAgICBjaGVjaygnNjB4NDArMjQwKzgwJywgJzI0MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBpcGFkeD0yMCkKKyAgICAgICAgY2hlY2soJzMweDQwKzI2MCs4MCcsICcyNTB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgaXBhZHg9NSwgcGFkeD0xMCkKKyAgICAgICAgY2hlY2soJzIweDQwKzI2MCs4MCcsICcyNDB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgcGFkeD0yMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyMHg0MCsyNDkrODAnLCAnMjQweDIwMCswKzAnLAorICAgICAgICAgICAgICBzaWRlPSdyaWdodCcsIHBhZHg9KDksIDMxKSwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCc2MHg0MCsyNDArODAnLCAnMjQweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIGlwYWR4PTIwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzMweDQwKzI2MCs4MCcsICcyNTB4MjAwKzArMCcsCisgICAgICAgICAgICAgIHNpZGU9J3JpZ2h0JywgaXBhZHg9NSwgcGFkeD0xMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCczMHg0MCsyNTUrODAnLCAnMjUweDIwMCswKzAnLAorICAgICAgICAgICAgICBzaWRlPSdyaWdodCcsIGlwYWR4PTUsIHBhZHg9KDUsIDE1KSwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyMHg0MCsxNDArMCcsICczMDB4MTYwKzArNDAnLCBzaWRlPSd0b3AnLCBwYWR4PTIwKQorICAgICAgICBjaGVjaygnMjB4NDArMTIwKzAnLCAnMzAweDE2MCswKzQwJywgc2lkZT0ndG9wJywgcGFkeD0oMCwgNDApKQorICAgICAgICBjaGVjaygnNjB4NDArMTIwKzAnLCAnMzAweDE2MCswKzQwJywgc2lkZT0ndG9wJywgaXBhZHg9MjApCisgICAgICAgIGNoZWNrKCczMHg0MCsxMzUrMCcsICczMDB4MTYwKzArNDAnLCBzaWRlPSd0b3AnLCBpcGFkeD01LCBwYWR4PTEwKQorICAgICAgICBjaGVjaygnMzB4NDArMTMwKzAnLCAnMzAweDE2MCswKzQwJywgc2lkZT0ndG9wJywgaXBhZHg9NSwgcGFkeD0oNSwgMTUpKQorICAgICAgICBjaGVjaygnMjYweDQwKzIwKzAnLCAnMzAweDE2MCswKzQwJywgc2lkZT0ndG9wJywgcGFkeD0yMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyNjB4NDArMjUrMCcsICczMDB4MTYwKzArNDAnLAorICAgICAgICAgICAgICBzaWRlPSd0b3AnLCBwYWR4PSgyNSwgMTUpLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzMwMHg0MCswKzAnLCAnMzAweDE2MCswKzQwJywgc2lkZT0ndG9wJywgaXBhZHg9MjAsIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMjgweDQwKzEwKzAnLCAnMzAweDE2MCswKzQwJywKKyAgICAgICAgICAgICAgc2lkZT0ndG9wJywgaXBhZHg9NSwgcGFkeD0xMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyODB4NDArNSswJywgJzMwMHgxNjArMCs0MCcsCisgICAgICAgICAgICAgIHNpZGU9J3RvcCcsIGlwYWR4PTUsIHBhZHg9KDUsIDE1KSwgZmlsbD0neCcpCisgICAgICAgIGEucGFja19jb25maWd1cmUocGFkeD0nMWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGEucGFja19pbmZvKClbJ3BhZHgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdHIocGFjay53aW5mb19waXhlbHMoJzFjJykpKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKGlwYWR4PScxYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5wYWNrX2luZm8oKVsnaXBhZHgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdHIocGFjay53aW5mb19waXhlbHMoJzFjJykpKQorCisgICAgZGVmIHRlc3RfcGFja19jb25maWd1cmVfcGFkeV9pcGFkeV9maWxsKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZGVmIGNoZWNrKGdlb20xLCBnZW9tMiwgKiprd2FyZ3MpOgorICAgICAgICAgICAgYS5wYWNrX2ZvcmdldCgpCisgICAgICAgICAgICBiLnBhY2tfZm9yZ2V0KCkKKyAgICAgICAgICAgIGEucGFja19jb25maWd1cmUoKiprd2FyZ3MpCisgICAgICAgICAgICBiLnBhY2tfY29uZmlndXJlKGV4cGFuZD1UcnVlLCBmaWxsPSdib3RoJykKKyAgICAgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLndpbmZvX2dlb21ldHJ5KCksIGdlb20xKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLndpbmZvX2dlb21ldHJ5KCksIGdlb20yKQorICAgICAgICBjaGVjaygnMjB4NDArMjgwKzgwJywgJzI4MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBwYWR5PTIwKQorICAgICAgICBjaGVjaygnMjB4NDArMjgwKzcwJywgJzI4MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBwYWR5PSgxMCwgMzApKQorICAgICAgICBjaGVjaygnMjB4ODArMjgwKzYwJywgJzI4MHgyMDArMCswJywgc2lkZT0ncmlnaHQnLCBpcGFkeT0yMCkKKyAgICAgICAgY2hlY2soJzIweDUwKzI4MCs3NScsICcyODB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgaXBhZHk9NSwgcGFkeT0xMCkKKyAgICAgICAgY2hlY2soJzIweDQwKzI4MCs4MCcsICcyODB4MjAwKzArMCcsIHNpZGU9J3JpZ2h0JywgcGFkeT0yMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyMHg0MCsyODArNjknLCAnMjgweDIwMCswKzAnLAorICAgICAgICAgICAgICBzaWRlPSdyaWdodCcsIHBhZHk9KDksIDMxKSwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyMHg4MCsyODArNjAnLCAnMjgweDIwMCswKzAnLCBzaWRlPSdyaWdodCcsIGlwYWR5PTIwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzIweDUwKzI4MCs3NScsICcyODB4MjAwKzArMCcsCisgICAgICAgICAgICAgIHNpZGU9J3JpZ2h0JywgaXBhZHk9NSwgcGFkeT0xMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyMHg1MCsyODArNzAnLCAnMjgweDIwMCswKzAnLAorICAgICAgICAgICAgICBzaWRlPSdyaWdodCcsIGlwYWR5PTUsIHBhZHk9KDUsIDE1KSwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCcyMHg0MCsxNDArMjAnLCAnMzAweDEyMCswKzgwJywgc2lkZT0ndG9wJywgcGFkeT0yMCkKKyAgICAgICAgY2hlY2soJzIweDQwKzE0MCswJywgJzMwMHgxMjArMCs4MCcsIHNpZGU9J3RvcCcsIHBhZHk9KDAsIDQwKSkKKyAgICAgICAgY2hlY2soJzIweDgwKzE0MCswJywgJzMwMHgxMjArMCs4MCcsIHNpZGU9J3RvcCcsIGlwYWR5PTIwKQorICAgICAgICBjaGVjaygnMjB4NTArMTQwKzEwJywgJzMwMHgxMzArMCs3MCcsIHNpZGU9J3RvcCcsIGlwYWR5PTUsIHBhZHk9MTApCisgICAgICAgIGNoZWNrKCcyMHg1MCsxNDArNScsICczMDB4MTMwKzArNzAnLCBzaWRlPSd0b3AnLCBpcGFkeT01LCBwYWR5PSg1LCAxNSkpCisgICAgICAgIGNoZWNrKCczMDB4NDArMCsyMCcsICczMDB4MTIwKzArODAnLCBzaWRlPSd0b3AnLCBwYWR5PTIwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzMwMHg0MCswKzI1JywgJzMwMHgxMjArMCs4MCcsCisgICAgICAgICAgICAgIHNpZGU9J3RvcCcsIHBhZHk9KDI1LCAxNSksIGZpbGw9J3gnKQorICAgICAgICBjaGVjaygnMzAweDgwKzArMCcsICczMDB4MTIwKzArODAnLCBzaWRlPSd0b3AnLCBpcGFkeT0yMCwgZmlsbD0neCcpCisgICAgICAgIGNoZWNrKCczMDB4NTArMCsxMCcsICczMDB4MTMwKzArNzAnLAorICAgICAgICAgICAgICBzaWRlPSd0b3AnLCBpcGFkeT01LCBwYWR5PTEwLCBmaWxsPSd4JykKKyAgICAgICAgY2hlY2soJzMwMHg1MCswKzUnLCAnMzAweDEzMCswKzcwJywKKyAgICAgICAgICAgICAgc2lkZT0ndG9wJywgaXBhZHk9NSwgcGFkeT0oNSwgMTUpLCBmaWxsPSd4JykKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZShwYWR5PScxYycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5wYWNrX2luZm8oKVsncGFkeSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cihwYWNrLndpbmZvX3BpeGVscygnMWMnKSkpCisgICAgICAgIGEucGFja19jb25maWd1cmUoaXBhZHk9JzFjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhLnBhY2tfaW5mbygpWydpcGFkeSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cihwYWNrLndpbmZvX3BpeGVscygnMWMnKSkpCisKKyAgICBkZWYgdGVzdF9wYWNrX2NvbmZpZ3VyZV9zaWRlKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZGVmIGNoZWNrKHNpZGUsIGdlb20xLCBnZW9tMik6CisgICAgICAgICAgICBhLnBhY2tfY29uZmlndXJlKHNpZGU9c2lkZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS5wYWNrX2luZm8oKVsnc2lkZSddLCBzaWRlKQorICAgICAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZShleHBhbmQ9VHJ1ZSwgZmlsbD0nYm90aCcpCisgICAgICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYS53aW5mb19nZW9tZXRyeSgpLCBnZW9tMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi53aW5mb19nZW9tZXRyeSgpLCBnZW9tMikKKyAgICAgICAgY2hlY2soJ3RvcCcsICcyMHg0MCsxNDArMCcsICczMDB4MTYwKzArNDAnKQorICAgICAgICBjaGVjaygnYm90dG9tJywgJzIweDQwKzE0MCsxNjAnLCAnMzAweDE2MCswKzAnKQorICAgICAgICBjaGVjaygnbGVmdCcsICcyMHg0MCswKzgwJywgJzI4MHgyMDArMjArMCcpCisgICAgICAgIGNoZWNrKCdyaWdodCcsICcyMHg0MCsyODArODAnLCAnMjgweDIwMCswKzAnKQorCisgICAgZGVmIHRlc3RfcGFja19mb3JnZXQoc2VsZik6CisgICAgICAgIHBhY2ssIGEsIGIsIGMsIGQgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKCkKKyAgICAgICAgYi5wYWNrX2NvbmZpZ3VyZSgpCisgICAgICAgIGMucGFja19jb25maWd1cmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2EsIGIsIGNdKQorICAgICAgICBiLnBhY2tfZm9yZ2V0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYWNrLnBhY2tfc2xhdmVzKCksIFthLCBjXSkKKyAgICAgICAgYi5wYWNrX2ZvcmdldCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYSwgY10pCisgICAgICAgIGQucGFja19mb3JnZXQoKQorCisgICAgZGVmIHRlc3RfcGFja19pbmZvKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnd2luZG93ICIlcyIgaXNuXCd0IHBhY2tlZCcgJSBhKToKKyAgICAgICAgICAgIGEucGFja19pbmZvKCkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZSgpCisgICAgICAgIGIucGFja19jb25maWd1cmUoc2lkZT0ncmlnaHQnLCBpbl89YSwgYW5jaG9yPSdzJywgZXhwYW5kPVRydWUsIGZpbGw9J3gnLAorICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWR4PTUsIHBhZHg9MTAsIGlwYWR5PTIsIHBhZHk9KDUsIDE1KSkKKyAgICAgICAgaW5mbyA9IGEucGFja19pbmZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm8sIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snYW5jaG9yJ10sICdjZW50ZXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2V4cGFuZCddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snZmlsbCddLCAnbm9uZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snaW4nXSwgcGFjaykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydpcGFkeCddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snaXBhZHknXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHgnXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHknXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3NpZGUnXSwgJ3RvcCcpCisgICAgICAgIGluZm8gPSBiLnBhY2tfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbmZvLCBkaWN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2FuY2hvciddLCAncycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snZXhwYW5kJ10sIHNlbGYuX3N0cigxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydmaWxsJ10sICd4JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydpbiddLCBhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2lwYWR4J10sIHNlbGYuX3N0cig1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydpcGFkeSddLCBzZWxmLl9zdHIoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncGFkeCddLCBzZWxmLl9zdHIoMTApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHknXSwgc2VsZi5fc3RyKCg1LCAxNSkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3NpZGUnXSwgJ3JpZ2h0JykKKworICAgIGRlZiB0ZXN0X3BhY2tfcHJvcGFnYXRlKHNlbGYpOgorICAgICAgICBwYWNrLCBhLCBiLCBjLCBkID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgcGFjay5jb25maWd1cmUod2lkdGg9MzAwLCBoZWlnaHQ9MjAwKQorICAgICAgICBhLnBhY2tfY29uZmlndXJlKCkKKyAgICAgICAgcGFjay5wYWNrX3Byb3BhZ2F0ZShGYWxzZSkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay53aW5mb19yZXF3aWR0aCgpLCAzMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay53aW5mb19yZXFoZWlnaHQoKSwgMjAwKQorICAgICAgICBwYWNrLnBhY2tfcHJvcGFnYXRlKFRydWUpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sud2luZm9fcmVxd2lkdGgoKSwgMjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay53aW5mb19yZXFoZWlnaHQoKSwgNDApCisKKyAgICBkZWYgdGVzdF9wYWNrX3NsYXZlcyhzZWxmKToKKyAgICAgICAgcGFjaywgYSwgYiwgYywgZCA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbXSkKKyAgICAgICAgYS5wYWNrX2NvbmZpZ3VyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFjay5wYWNrX3NsYXZlcygpLCBbYV0pCisgICAgICAgIGIucGFja19jb25maWd1cmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHBhY2sucGFja19zbGF2ZXMoKSwgW2EsIGJdKQorCisKK2NsYXNzIFBsYWNlVGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBjcmVhdGUyKHNlbGYpOgorICAgICAgICB0ID0gdGtpbnRlci5Ub3BsZXZlbChzZWxmLnJvb3QsIHdpZHRoPTMwMCwgaGVpZ2h0PTIwMCwgYmQ9MCkKKyAgICAgICAgdC53bV9nZW9tZXRyeSgnMzAweDIwMCswKzAnKQorICAgICAgICBmID0gdGtpbnRlci5GcmFtZSh0LCB3aWR0aD0xNTQsIGhlaWdodD04NCwgYmQ9MiwgcmVsaWVmPSdyYWlzZWQnKQorICAgICAgICBmLnBsYWNlX2NvbmZpZ3VyZSh4PTQ4LCB5PTM4KQorICAgICAgICBmMiA9IHRraW50ZXIuRnJhbWUodCwgd2lkdGg9MzAsIGhlaWdodD02MCwgYmQ9MiwgcmVsaWVmPSdyYWlzZWQnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgcmV0dXJuIHQsIGYsIGYyCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfaW4oc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb19tYW5hZ2VyKCksICcnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICJjYW4ndCBwbGFjZSAlcyByZWxhdGl2ZSB0byAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXRzZWxmIiAlIHJlLmVzY2FwZShzdHIoZjIpKSk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYyKQorICAgICAgICBpZiB0Y2xfdmVyc2lvbiA+PSAoOCwgNSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX21hbmFnZXIoKSwgJycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCB3aW5kb3cgcGF0aCBuYW1lJyk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPSdzcGFtJykKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX21hbmFnZXIoKSwgJ3BsYWNlJykKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV94KHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3gnXSwgJzAnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb194KCksIDUwKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoeD0xMDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWyd4J10sICcxMDAnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb194KCksIDE1MCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHg9LTEwLCByZWx4PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWyd4J10sICctMTAnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb194KCksIDE5MCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAic3BhbSInKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZiwgeD0nc3BhbScpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfeShzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWyd5J10sICcwJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feSgpLCA0MCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHk9NTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWyd5J10sICc1MCcpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3koKSwgOTApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZSh5PS0xMCwgcmVseT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsneSddLCAnLTEwJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feSgpLCAxMTApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgInNwYW0iJyk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYsIHk9J3NwYW0nKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX3JlbHgoc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsncmVseCddLCAnMCcpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3goKSwgNTApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShyZWx4PTAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3JlbHgnXSwgJzAuNScpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3goKSwgMTI1KQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUocmVseD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsncmVseCddLCAnMScpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3goKSwgMjAwKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBmbG9hdGluZy1wb2ludCBudW1iZXIgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2J1dCBnb3QgInNwYW0iJyk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYsIHJlbHg9J3NwYW0nKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX3JlbHkoc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLnBsYWNlX2luZm8oKVsncmVseSddLCAnMCcpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3koKSwgNDApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShyZWx5PTAuNSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi5wbGFjZV9pbmZvKClbJ3JlbHknXSwgJzAuNScpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX3koKSwgODApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShyZWx5PTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIucGxhY2VfaW5mbygpWydyZWx5J10sICcxJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9feSgpLCAxMjApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGZsb2F0aW5nLXBvaW50IG51bWJlciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYnV0IGdvdCAic3BhbSInKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZiwgcmVseT0nc3BhbScpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfYW5jaG9yKHNlbGYpOgorICAgICAgICBmID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBhbmNob3IgImoiJyk6CisgICAgICAgICAgICBmLnBsYWNlX2NvbmZpZ3VyZShhbmNob3I9J2onKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdhbWJpZ3VvdXMgYW5jaG9yICIiJyk6CisgICAgICAgICAgICBmLnBsYWNlX2NvbmZpZ3VyZShhbmNob3I9JycpCisgICAgICAgIGZvciB2YWx1ZSBpbiAnbicsICduZScsICdlJywgJ3NlJywgJ3MnLCAnc3cnLCAndycsICdudycsICdjZW50ZXInOgorICAgICAgICAgICAgZi5wbGFjZV9jb25maWd1cmUoYW5jaG9yPXZhbHVlKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLnBsYWNlX2luZm8oKVsnYW5jaG9yJ10sIHZhbHVlKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX3dpZHRoKHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89Ziwgd2lkdGg9MTIwKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb193aWR0aCgpLCAxMjApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZSh3aWR0aD0nJykKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjIud2luZm9fd2lkdGgoKSwgMzApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImFiY2QiJyk6CisgICAgICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUod2lkdGg9J2FiY2QnKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX2hlaWdodChzZWxmKToKKyAgICAgICAgdCwgZiwgZjIgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBmMi5wbGFjZV9jb25maWd1cmUoaW5fPWYsIGhlaWdodD0xMjApCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX2hlaWdodCgpLCAxMjApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShoZWlnaHQ9JycpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX2hlaWdodCgpLCA2MCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiYWJjZCInKToKKyAgICAgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShoZWlnaHQ9J2FiY2QnKQorCisgICAgZGVmIHRlc3RfcGxhY2VfY29uZmlndXJlX3JlbHdpZHRoKHNlbGYpOgorICAgICAgICB0LCBmLCBmMiA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShpbl89ZiwgcmVsd2lkdGg9MC41KQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb193aWR0aCgpLCA3NSkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHJlbHdpZHRoPScnKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb193aWR0aCgpLCAzMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgZmxvYXRpbmctcG9pbnQgbnVtYmVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgZ290ICJhYmNkIicpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHJlbHdpZHRoPSdhYmNkJykKKworICAgIGRlZiB0ZXN0X3BsYWNlX2NvbmZpZ3VyZV9yZWxoZWlnaHQoc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mLCByZWxoZWlnaHQ9MC41KQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmMi53aW5mb19oZWlnaHQoKSwgNDApCisgICAgICAgIGYyLnBsYWNlX2NvbmZpZ3VyZShyZWxoZWlnaHQ9JycpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYyLndpbmZvX2hlaWdodCgpLCA2MCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgZmxvYXRpbmctcG9pbnQgbnVtYmVyICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdidXQgZ290ICJhYmNkIicpOgorICAgICAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKHJlbGhlaWdodD0nYWJjZCcpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9jb25maWd1cmVfYm9yZGVybW9kZShzZWxmKToKKyAgICAgICAgZiA9IHRraW50ZXIuRnJhbWUoc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgYm9yZGVybW9kZSAiaiInKToKKyAgICAgICAgICAgIGYucGxhY2VfY29uZmlndXJlKGJvcmRlcm1vZGU9J2onKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdhbWJpZ3VvdXMgYm9yZGVybW9kZSAiIicpOgorICAgICAgICAgICAgZi5wbGFjZV9jb25maWd1cmUoYm9yZGVybW9kZT0nJykKKyAgICAgICAgZm9yIHZhbHVlIGluICdpbnNpZGUnLCAnb3V0c2lkZScsICdpZ25vcmUnOgorICAgICAgICAgICAgZi5wbGFjZV9jb25maWd1cmUoYm9yZGVybW9kZT12YWx1ZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5wbGFjZV9pbmZvKClbJ2JvcmRlcm1vZGUnXSwgdmFsdWUpCisKKyAgICBkZWYgdGVzdF9wbGFjZV9mb3JnZXQoc2VsZik6CisgICAgICAgIGZvbyA9IHRraW50ZXIuRnJhbWUoc2VsZi5yb290KQorICAgICAgICBmb28ucGxhY2VfY29uZmlndXJlKHdpZHRoPTUwLCBoZWlnaHQ9NTApCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBmb28ucGxhY2VfZm9yZ2V0KCkKKyAgICAgICAgc2VsZi5yb290LnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoZm9vLndpbmZvX2lzbWFwcGVkKCkpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIGZvby5wbGFjZV9mb3JnZXQoMCkKKworICAgIGRlZiB0ZXN0X3BsYWNlX2luZm8oc2VsZik6CisgICAgICAgIHQsIGYsIGYyID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgZjIucGxhY2VfY29uZmlndXJlKGluXz1mLCB4PTEsIHk9Miwgd2lkdGg9MywgaGVpZ2h0PTQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZWx4PTAuMSwgcmVseT0wLjIsIHJlbHdpZHRoPTAuMywgcmVsaGVpZ2h0PTAuNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuY2hvcj0nc2UnLCBib3JkZXJtb2RlPSdvdXRzaWRlJykKKyAgICAgICAgaW5mbyA9IGYyLnBsYWNlX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW5mbywgZGljdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWyd4J10sICcxJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWyd5J10sICcyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWyd3aWR0aCddLCAnMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snaGVpZ2h0J10sICc0JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyZWx4J10sICcwLjEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3JlbHknXSwgJzAuMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncmVsd2lkdGgnXSwgJzAuMycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncmVsaGVpZ2h0J10sICcwLjQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2FuY2hvciddLCAnc2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2JvcmRlcm1vZGUnXSwgJ291dHNpZGUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3gnXSwgJzEnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3gnXSwgJzEnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBmMi5wbGFjZV9pbmZvKDApCisKKyAgICBkZWYgdGVzdF9wbGFjZV9zbGF2ZXMoc2VsZik6CisgICAgICAgIGZvbyA9IHRraW50ZXIuRnJhbWUoc2VsZi5yb290KQorICAgICAgICBiYXIgPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmb28ucGxhY2Vfc2xhdmVzKCksIFtdKQorICAgICAgICBiYXIucGxhY2VfY29uZmlndXJlKGluXz1mb28pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZm9vLnBsYWNlX3NsYXZlcygpLCBbYmFyXSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgZm9vLnBsYWNlX3NsYXZlcygwKQorCisKK2NsYXNzIEdyaWRUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgorCisgICAgZGVmIHRlYXJEb3duKHNlbGYpOgorICAgICAgICBjb2xzLCByb3dzID0gc2VsZi5yb290LmdyaWRfc2l6ZSgpCisgICAgICAgIGZvciBpIGluIHJhbmdlKGNvbHMgKyAxKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZShpLCB3ZWlnaHQ9MCwgbWluc2l6ZT0wLCBwYWQ9MCwgdW5pZm9ybT0nJykKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uocm93cyArIDEpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKGksIHdlaWdodD0wLCBtaW5zaXplPTAsIHBhZD0wLCB1bmlmb3JtPScnKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9wcm9wYWdhdGUoMSkKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfYW5jaG9yKCdudycpCisgICAgICAgIHN1cGVyKCkudGVhckRvd24oKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmUoc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKSwge30pCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2luJ10sIHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydjb2x1bW4nXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3JvdyddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoeydjb2x1bW4nOiAxfSwgcm93PTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnY29sdW1uJ10sIHNlbGYuX3N0cigxKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydyb3cnXSwgc2VsZi5fc3RyKDIpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfY29sdW1uKHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgY29sdW1uIHZhbHVlICItMSI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIGludGVnZXInKToKKyAgICAgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoY29sdW1uPS0xKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKGNvbHVtbj0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2NvbHVtbiddLCBzZWxmLl9zdHIoMikpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9jb2x1bW5zcGFuKHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgY29sdW1uc3BhbiB2YWx1ZSAiMCI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpOgorICAgICAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShjb2x1bW5zcGFuPTApCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoY29sdW1uc3Bhbj0yKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2NvbHVtbnNwYW4nXSwgc2VsZi5fc3RyKDIpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfaW4oc2VsZik6CisgICAgICAgIGYgPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCkKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpLCB7fSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnaW4nXSwgc2VsZi5yb290KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKGluXz1mKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2luJ10sIGYpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoeydpbic6IHNlbGYucm9vdH0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnaW4nXSwgc2VsZi5yb290KQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfaXBhZHgoc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBpcGFkeCB2YWx1ZSAiLTEiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBiZSBwb3NpdGl2ZSBzY3JlZW4gZGlzdGFuY2UnKToKKyAgICAgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoaXBhZHg9LTEpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoaXBhZHg9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydpcGFkeCddLCBzZWxmLl9zdHIoMSkpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUoaXBhZHg9Jy41YycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsnaXBhZHgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdHIocm91bmQocGl4ZWxzX2NvbnYoJy41YycpICogc2VsZi5zY2FsaW5nKSkpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9pcGFkeShzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIGlwYWR5IHZhbHVlICItMSI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIHBvc2l0aXZlIHNjcmVlbiBkaXN0YW5jZScpOgorICAgICAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShpcGFkeT0tMSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShpcGFkeT0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ2lwYWR5J10sIHNlbGYuX3N0cigxKSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShpcGFkeT0nLjVjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydpcGFkeSddLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3N0cihyb3VuZChwaXhlbHNfY29udignLjVjJykgKiBzZWxmLnNjYWxpbmcpKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfY29uZmlndXJlX3BhZHgoc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBwYWQgdmFsdWUgIi0xIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgcG9zaXRpdmUgc2NyZWVuIGRpc3RhbmNlJyk6CisgICAgICAgICAgICBiLmdyaWRfY29uZmlndXJlKHBhZHg9LTEpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocGFkeD0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3BhZHgnXSwgc2VsZi5fc3RyKDEpKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHBhZHg9KDEwLCA1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydwYWR4J10sIHNlbGYuX3N0cigoMTAsIDUpKSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShwYWR4PScuNWMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGIuZ3JpZF9pbmZvKClbJ3BhZHgnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9zdHIocm91bmQocGl4ZWxzX2NvbnYoJy41YycpICogc2VsZi5zY2FsaW5nKSkpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9wYWR5KHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgcGFkIHZhbHVlICItMSI6ICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtdXN0IGJlIHBvc2l0aXZlIHNjcmVlbiBkaXN0YW5jZScpOgorICAgICAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShwYWR5PS0xKQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHBhZHk9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydwYWR5J10sIHNlbGYuX3N0cigxKSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShwYWR5PSgxMCwgNSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncGFkeSddLCBzZWxmLl9zdHIoKDEwLCA1KSkpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocGFkeT0nLjVjJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydwYWR5J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fc3RyKHJvdW5kKHBpeGVsc19jb252KCcuNWMnKSAqIHNlbGYuc2NhbGluZykpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfcm93KHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgKHJvd3xncmlkKSB2YWx1ZSAiLTEiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk6CisgICAgICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvdz0tMSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3c9MikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpWydyb3cnXSwgc2VsZi5fc3RyKDIpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb25maWd1cmVfcm93bnNwYW4oc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCByb3dzcGFuIHZhbHVlICIwIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk6CisgICAgICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvd3NwYW49MCkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3dzcGFuPTIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKVsncm93c3BhbiddLCBzZWxmLl9zdHIoMikpCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbmZpZ3VyZV9zdGlja3koc2VsZik6CisgICAgICAgIGYgPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCwgYmc9J3JlZCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzdGlja3luZXNzIHZhbHVlICJnbHVlIicpOgorICAgICAgICAgICAgZi5ncmlkX2NvbmZpZ3VyZShzdGlja3k9J2dsdWUnKQorICAgICAgICBmLmdyaWRfY29uZmlndXJlKHN0aWNreT0nbmUnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ3JpZF9pbmZvKClbJ3N0aWNreSddLCAnbmUnKQorICAgICAgICBmLmdyaWRfY29uZmlndXJlKHN0aWNreT0nbixzLGUsdycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZi5ncmlkX2luZm8oKVsnc3RpY2t5J10sICduZXN3JykKKworICAgIGRlZiB0ZXN0X2dyaWRfY29sdW1uY29uZmlndXJlKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J21pbnNpemUnOiAwLCAncGFkJzogMCwgJ3VuaWZvcm0nOiBOb25lLCAnd2VpZ2h0JzogMH0pCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBvcHRpb24gIi1mb28iJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgJ2ZvbycpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgoMCwgMyksIHdlaWdodD0yKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbXVzdCBzcGVjaWZ5IGEgc2luZ2xlIGVsZW1lbnQgb24gcmV0cmlldmFsJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoKDAsIDMpKQorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKGNvbHVtbj0wLCByb3c9MCkKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKCdhbGwnLCB3ZWlnaHQ9MykKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGludGVnZXIgYnV0IGdvdCAiYWxsIicpOgorICAgICAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgnYWxsJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsICd3ZWlnaHQnKSwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMywgJ3dlaWdodCcpLCAyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgyNjUsICd3ZWlnaHQnKSwgMCkKKyAgICAgICAgaWYgdGNsX3ZlcnNpb24gPj0gKDgsIDUpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKGIsIHdlaWdodD00KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMCwgJ3dlaWdodCcpLCA0KQorCisgICAgZGVmIHRlc3RfZ3JpZF9jb2x1bW5jb25maWd1cmVfbWluc2l6ZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiZm9vIicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIG1pbnNpemU9J2ZvbycpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCBtaW5zaXplPTEwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCAnbWluc2l6ZScpLCAxMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMClbJ21pbnNpemUnXSwgMTApCisKKyAgICBkZWYgdGVzdF9ncmlkX2NvbHVtbmNvbmZpZ3VyZV93ZWlnaHQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGludGVnZXIgYnV0IGdvdCAiYmFkIicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0nYmFkJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnaW52YWxpZCBhcmcgIi13ZWlnaHQiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZScpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0tMykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHdlaWdodD0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCAnd2VpZ2h0JyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDApWyd3ZWlnaHQnXSwgMykKKworICAgIGRlZiB0ZXN0X2dyaWRfY29sdW1uY29uZmlndXJlX3BhZChzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiZm9vIicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHBhZD0nZm9vJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnaW52YWxpZCBhcmcgIi1wYWQiOiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZScpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHBhZD0tMykKKyAgICAgICAgc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDAsIHBhZD0zKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCAncGFkJyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfY29sdW1uY29uZmlndXJlKDApWydwYWQnXSwgMykKKworICAgIGRlZiB0ZXN0X2dyaWRfY29sdW1uY29uZmlndXJlX3VuaWZvcm0oc2VsZik6CisgICAgICAgIHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCB1bmlmb3JtPSdmb28nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCAndW5pZm9ybScpLCAnZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9jb2x1bW5jb25maWd1cmUoMClbJ3VuaWZvcm0nXSwgJ2ZvbycpCisKKyAgICBkZWYgdGVzdF9ncmlkX3Jvd2NvbmZpZ3VyZShzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgeydtaW5zaXplJzogMCwgJ3BhZCc6IDAsICd1bmlmb3JtJzogTm9uZSwgJ3dlaWdodCc6IDB9KQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgb3B0aW9uICItZm9vIicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsICdmb28nKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoKDAsIDMpLCB3ZWlnaHQ9MikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ211c3Qgc3BlY2lmeSBhIHNpbmdsZSBlbGVtZW50IG9uIHJldHJpZXZhbCcpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKCgwLCAzKSkKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShjb2x1bW49MCwgcm93PTApCisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgnYWxsJywgd2VpZ2h0PTMpCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBpbnRlZ2VyIGJ1dCBnb3QgImFsbCInKToKKyAgICAgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoJ2FsbCcpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCAnd2VpZ2h0JyksIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDMsICd3ZWlnaHQnKSwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMjY1LCAnd2VpZ2h0JyksIDApCisgICAgICAgIGlmIHRjbF92ZXJzaW9uID49ICg4LCA1KToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZShiLCB3ZWlnaHQ9NCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDAsICd3ZWlnaHQnKSwgNCkKKworICAgIGRlZiB0ZXN0X2dyaWRfcm93Y29uZmlndXJlX21pbnNpemUoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImZvbyInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCBtaW5zaXplPSdmb28nKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgbWluc2l6ZT0xMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgJ21pbnNpemUnKSwgMTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDApWydtaW5zaXplJ10sIDEwKQorCisgICAgZGVmIHRlc3RfZ3JpZF9yb3djb25maWd1cmVfd2VpZ2h0KHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBpbnRlZ2VyIGJ1dCBnb3QgImJhZCInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCB3ZWlnaHQ9J2JhZCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2ludmFsaWQgYXJnICItd2VpZ2h0IjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBiZSBub24tbmVnYXRpdmUnKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCB3ZWlnaHQ9LTMpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCB3ZWlnaHQ9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgJ3dlaWdodCcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwKVsnd2VpZ2h0J10sIDMpCisKKyAgICBkZWYgdGVzdF9ncmlkX3Jvd2NvbmZpZ3VyZV9wYWQoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImZvbyInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCBwYWQ9J2ZvbycpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2ludmFsaWQgYXJnICItcGFkIjogJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Nob3VsZCBiZSBub24tbmVnYXRpdmUnKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCBwYWQ9LTMpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCBwYWQ9MykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgJ3BhZCcpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwKVsncGFkJ10sIDMpCisKKyAgICBkZWYgdGVzdF9ncmlkX3Jvd2NvbmZpZ3VyZV91bmlmb3JtKHNlbGYpOgorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgdW5pZm9ybT0nZm9vJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9yb3djb25maWd1cmUoMCwgJ3VuaWZvcm0nKSwgJ2ZvbycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfcm93Y29uZmlndXJlKDApWyd1bmlmb3JtJ10sICdmb28nKQorCisgICAgZGVmIHRlc3RfZ3JpZF9mb3JnZXQoc2VsZik6CisgICAgICAgIGIgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIGMgPSB0a2ludGVyLkJ1dHRvbihzZWxmLnJvb3QpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93PTIsIGNvbHVtbj0yLCByb3dzcGFuPTIsIGNvbHVtbnNwYW49MiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBwYWR4PTMsIHBhZHk9NCwgc3RpY2t5PSducycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKCksIFtiXSkKKyAgICAgICAgYi5ncmlkX2ZvcmdldCgpCisgICAgICAgIGMuZ3JpZF9mb3JnZXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcygpLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpLCB7fSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3c9MCwgY29sdW1uPTApCisgICAgICAgIGluZm8gPSBiLmdyaWRfaW5mbygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1sncm93J10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydjb2x1bW4nXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3Jvd3NwYW4nXSwgc2VsZi5fc3RyKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ2NvbHVtbnNwYW4nXSwgc2VsZi5fc3RyKDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHgnXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3BhZHknXSwgc2VsZi5fc3RyKDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3N0aWNreSddLCAnJykKKworICAgIGRlZiB0ZXN0X2dyaWRfcmVtb3ZlKHNlbGYpOgorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICBjID0gdGtpbnRlci5CdXR0b24oc2VsZi5yb290KQorICAgICAgICBiLmdyaWRfY29uZmlndXJlKHJvdz0yLCBjb2x1bW49Miwgcm93c3Bhbj0yLCBjb2x1bW5zcGFuPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcGFkeD0zLCBwYWR5PTQsIHN0aWNreT0nbnMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcygpLCBbYl0pCisgICAgICAgIGIuZ3JpZF9yZW1vdmUoKQorICAgICAgICBjLmdyaWRfcmVtb3ZlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMoKSwgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYi5ncmlkX2luZm8oKSwge30pCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93PTAsIGNvbHVtbj0wKQorICAgICAgICBpbmZvID0gYi5ncmlkX2luZm8oKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3JvdyddLCBzZWxmLl9zdHIoMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snY29sdW1uJ10sIHNlbGYuX3N0cigwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyb3dzcGFuJ10sIHNlbGYuX3N0cigyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydjb2x1bW5zcGFuJ10sIHNlbGYuX3N0cigyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR4J10sIHNlbGYuX3N0cigzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR5J10sIHNlbGYuX3N0cig0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydzdGlja3knXSwgJ25zJykKKworICAgIGRlZiB0ZXN0X2dyaWRfaW5mbyhzZWxmKToKKyAgICAgICAgYiA9IHRraW50ZXIuQnV0dG9uKHNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChiLmdyaWRfaW5mbygpLCB7fSkKKyAgICAgICAgYi5ncmlkX2NvbmZpZ3VyZShyb3c9MiwgY29sdW1uPTIsIHJvd3NwYW49MiwgY29sdW1uc3Bhbj0yLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBhZHg9MywgcGFkeT00LCBzdGlja3k9J25zJykKKyAgICAgICAgaW5mbyA9IGIuZ3JpZF9pbmZvKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGluZm8sIGRpY3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snaW4nXSwgc2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluZm9bJ3JvdyddLCBzZWxmLl9zdHIoMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW5mb1snY29sdW1uJ10sIHNlbGYuX3N0cigyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydyb3dzcGFuJ10sIHNlbGYuX3N0cigyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydjb2x1bW5zcGFuJ10sIHNlbGYuX3N0cigyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR4J10sIHNlbGYuX3N0cigzKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydwYWR5J10sIHNlbGYuX3N0cig0KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbmZvWydzdGlja3knXSwgJ25zJykKKworICAgIEByZXF1aXJlc190Y2woOCwgNSkKKyAgICBkZWYgdGVzdF9ncmlkX2FuY2hvcihzZWxmKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIGFuY2hvciAieCInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2FuY2hvcigneCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2FtYmlndW91cyBhbmNob3IgIiInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2FuY2hvcignJykKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfYW5jaG9yKCdzZScsICdudycpCisgICAgICAgIHNlbGYucm9vdC5ncmlkX2FuY2hvcignc2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC50ay5jYWxsKCdncmlkJywgJ2FuY2hvcicsIHNlbGYucm9vdCksICdzZScpCisKKyAgICBkZWYgdGVzdF9ncmlkX2Jib3goc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfYmJveCgpLCAoMCwgMCwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfYmJveCgwLCAwKSwgKDAsIDAsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX2Jib3goMCwgMCwgMSwgMSksICgwLCAwLCAwLCAwKSkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgaW50ZWdlciBidXQgZ290ICJ4IicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfYmJveCgneCcsIDApCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ2V4cGVjdGVkIGludGVnZXIgYnV0IGdvdCAieCInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2Jib3goMCwgJ3gnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdleHBlY3RlZCBpbnRlZ2VyIGJ1dCBnb3QgIngiJyk6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9iYm94KDAsIDAsICd4JywgMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnZXhwZWN0ZWQgaW50ZWdlciBidXQgZ290ICJ4IicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfYmJveCgwLCAwLCAwLCAneCcpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2Jib3goMCwgMCwgMCwgMCwgMCkKKyAgICAgICAgdCA9IHNlbGYucm9vdAorICAgICAgICAjIGRlLW1heGltaXplCisgICAgICAgIHQud21fZ2VvbWV0cnkoJzF4MSswKzAnKQorICAgICAgICB0LndtX2dlb21ldHJ5KCcnKQorICAgICAgICBmMSA9IHRraW50ZXIuRnJhbWUodCwgd2lkdGg9NzUsIGhlaWdodD03NSwgYmc9J3JlZCcpCisgICAgICAgIGYyID0gdGtpbnRlci5GcmFtZSh0LCB3aWR0aD05MCwgaGVpZ2h0PTkwLCBiZz0nYmx1ZScpCisgICAgICAgIGYxLmdyaWRfY29uZmlndXJlKHJvdz0wLCBjb2x1bW49MCkKKyAgICAgICAgZjIuZ3JpZF9jb25maWd1cmUocm93PTEsIGNvbHVtbj0xKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfYmJveCgpLCAoMCwgMCwgMTY1LCAxNjUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9iYm94KDAsIDApLCAoMCwgMCwgNzUsIDc1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfYmJveCgwLCAwLCAxLCAxKSwgKDAsIDAsIDE2NSwgMTY1KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfYmJveCgxLCAxKSwgKDc1LCA3NSwgOTAsIDkwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfYmJveCgxMCwgMTAsIDAsIDApLCAoMCwgMCwgMTY1LCAxNjUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9iYm94KC0yLCAtMiwgLTEsIC0xKSwgKDAsIDAsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9iYm94KDEwLCAxMCwgMTIsIDEyKSwgKDE2NSwgMTY1LCAwLCAwKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfbG9jYXRpb24oc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2xvY2F0aW9uKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfbG9jYXRpb24oMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfbG9jYXRpb24oMCwgMCwgMCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIHNjcmVlbiBkaXN0YW5jZSAieCInKToKKyAgICAgICAgICAgIHNlbGYucm9vdC5ncmlkX2xvY2F0aW9uKCd4JywgJ3knKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgc2NyZWVuIGRpc3RhbmNlICJ5IicpOgorICAgICAgICAgICAgc2VsZi5yb290LmdyaWRfbG9jYXRpb24oJzFjJywgJ3knKQorICAgICAgICB0ID0gc2VsZi5yb290CisgICAgICAgICMgZGUtbWF4aW1pemUKKyAgICAgICAgdC53bV9nZW9tZXRyeSgnMXgxKzArMCcpCisgICAgICAgIHQud21fZ2VvbWV0cnkoJycpCisgICAgICAgIGYgPSB0a2ludGVyLkZyYW1lKHQsIHdpZHRoPTIwMCwgaGVpZ2h0PTEwMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGxpZ2h0dGhpY2tuZXNzPTAsIGJnPSdyZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYuZ3JpZF9sb2NhdGlvbigxMCwgMTApLCAoLTEsIC0xKSkKKyAgICAgICAgZi5ncmlkX2NvbmZpZ3VyZSgpCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigtMTAsIC0xMCksICgtMSwgLTEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigtMTAsIDApLCAoLTEsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigtMSwgMCksICgtMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKDAsIC0xMCksICgwLCAtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKDAsIC0xKSwgKDAsIC0xKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oMCwgMCksICgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oMjAwLCAwKSwgKDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigyMDEsIDApLCAoMSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5ncmlkX2xvY2F0aW9uKDAsIDEwMCksICgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LmdyaWRfbG9jYXRpb24oMCwgMTAxKSwgKDAsIDEpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQuZ3JpZF9sb2NhdGlvbigyMDEsIDEwMSksICgxLCAxKSkKKworICAgIGRlZiB0ZXN0X2dyaWRfcHJvcGFnYXRlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3Byb3BhZ2F0ZSgpLCBUcnVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9wcm9wYWdhdGUoRmFsc2UsIEZhbHNlKQorICAgICAgICBzZWxmLnJvb3QuZ3JpZF9wcm9wYWdhdGUoRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5yb290LmdyaWRfcHJvcGFnYXRlKCkpCisgICAgICAgIGYgPSB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCwgd2lkdGg9MTAwLCBoZWlnaHQ9MTAwLCBiZz0ncmVkJykKKyAgICAgICAgZi5ncmlkX2NvbmZpZ3VyZShyb3c9MCwgY29sdW1uPTApCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud2luZm9fd2lkdGgoKSwgMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud2luZm9faGVpZ2h0KCksIDEwMCkKKyAgICAgICAgZi5ncmlkX3Byb3BhZ2F0ZShGYWxzZSkKKyAgICAgICAgZyA9IHRraW50ZXIuRnJhbWUoc2VsZi5yb290LCB3aWR0aD03NSwgaGVpZ2h0PTg1LCBiZz0nZ3JlZW4nKQorICAgICAgICBnLmdyaWRfY29uZmlndXJlKGluXz1mLCByb3c9MCwgY29sdW1uPTApCisgICAgICAgIHNlbGYucm9vdC51cGRhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud2luZm9fd2lkdGgoKSwgMTAwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud2luZm9faGVpZ2h0KCksIDEwMCkKKyAgICAgICAgZi5ncmlkX3Byb3BhZ2F0ZShUcnVlKQorICAgICAgICBzZWxmLnJvb3QudXBkYXRlKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmLndpbmZvX3dpZHRoKCksIDc1KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGYud2luZm9faGVpZ2h0KCksIDg1KQorCisgICAgZGVmIHRlc3RfZ3JpZF9zaXplKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvcik6CisgICAgICAgICAgICBzZWxmLnJvb3QuZ3JpZF9zaXplKDApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2l6ZSgpLCAoMCwgMCkpCisgICAgICAgIGYgPSB0a2ludGVyLlNjYWxlKHNlbGYucm9vdCkKKyAgICAgICAgZi5ncmlkX2NvbmZpZ3VyZShyb3c9MCwgY29sdW1uPTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2l6ZSgpLCAoMSwgMSkpCisgICAgICAgIGYuZ3JpZF9jb25maWd1cmUocm93PTQsIGNvbHVtbj01KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NpemUoKSwgKDYsIDUpKQorCisgICAgZGVmIHRlc3RfZ3JpZF9zbGF2ZXMoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKCksIFtdKQorICAgICAgICBhID0gdGtpbnRlci5MYWJlbChzZWxmLnJvb3QpCisgICAgICAgIGEuZ3JpZF9jb25maWd1cmUocm93PTAsIGNvbHVtbj0xKQorICAgICAgICBiID0gdGtpbnRlci5MYWJlbChzZWxmLnJvb3QpCisgICAgICAgIGIuZ3JpZF9jb25maWd1cmUocm93PTEsIGNvbHVtbj0wKQorICAgICAgICBjID0gdGtpbnRlci5MYWJlbChzZWxmLnJvb3QpCisgICAgICAgIGMuZ3JpZF9jb25maWd1cmUocm93PTEsIGNvbHVtbj0xKQorICAgICAgICBkID0gdGtpbnRlci5MYWJlbChzZWxmLnJvb3QpCisgICAgICAgIGQuZ3JpZF9jb25maWd1cmUocm93PTEsIGNvbHVtbj0xKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcygpLCBbZCwgYywgYiwgYV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKHJvdz0wKSwgW2FdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcyhyb3c9MSksIFtkLCBjLCBiXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ3JpZF9zbGF2ZXMoY29sdW1uPTApLCBbYl0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5yb290LmdyaWRfc2xhdmVzKGNvbHVtbj0xKSwgW2QsIGMsIGFdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5ncmlkX3NsYXZlcyhyb3c9MSwgY29sdW1uPTEpLCBbZCwgY10pCisKKwordGVzdHNfZ3VpID0gKAorICAgIFBhY2tUZXN0LCBQbGFjZVRlc3QsIEdyaWRUZXN0LAorKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9pbWFnZXMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X2ltYWdlcy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWE4Y2QwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9pbWFnZXMucHkKQEAgLTAsMCArMSwzMjcgQEAKK2ltcG9ydCB1bml0dGVzdAoraW1wb3J0IHRraW50ZXIKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgQWJzdHJhY3RUa1Rlc3QsIHJlcXVpcmVzX3RjbAorCitzdXBwb3J0LnJlcXVpcmVzKCdndWknKQorCisKK2NsYXNzIE1pc2NUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBkZWYgdGVzdF9pbWFnZV90eXBlcyhzZWxmKToKKyAgICAgICAgaW1hZ2VfdHlwZXMgPSBzZWxmLnJvb3QuaW1hZ2VfdHlwZXMoKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoaW1hZ2VfdHlwZXMsIHR1cGxlKQorICAgICAgICBzZWxmLmFzc2VydEluKCdwaG90bycsIGltYWdlX3R5cGVzKQorICAgICAgICBzZWxmLmFzc2VydEluKCdiaXRtYXAnLCBpbWFnZV90eXBlcykKKworICAgIGRlZiB0ZXN0X2ltYWdlX25hbWVzKHNlbGYpOgorICAgICAgICBpbWFnZV9uYW1lcyA9IHNlbGYucm9vdC5pbWFnZV9uYW1lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpbWFnZV9uYW1lcywgdHVwbGUpCisKKworY2xhc3MgQml0bWFwSW1hZ2VUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBBYnN0cmFjdFRrVGVzdC5zZXRVcENsYXNzLl9fZnVuY19fKGNscykKKyAgICAgICAgY2xzLnRlc3RmaWxlID0gc3VwcG9ydC5maW5kZmlsZSgncHl0aG9uLnhibScsIHN1YmRpcj0naW1naGRyZGF0YScpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9maWxlKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuQml0bWFwSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQ9J3llbGxvdycsIGJhY2tncm91bmQ9J2JsdWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zZWxmLnRlc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbWFnZSksICc6OmltZzo6dGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UudHlwZSgpLCAnYml0bWFwJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzo6aW1nOjp0ZXN0Jywgc2VsZi5yb290LmltYWdlX25hbWVzKCkpCisgICAgICAgIGRlbCBpbWFnZQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCc6OmltZzo6dGVzdCcsIHNlbGYucm9vdC5pbWFnZV9uYW1lcygpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fZGF0YShzZWxmKToKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYudGVzdGZpbGUsICdyYicpIGFzIGY6CisgICAgICAgICAgICBkYXRhID0gZi5yZWFkKCkKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLkJpdG1hcEltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kPSd5ZWxsb3cnLCBiYWNrZ3JvdW5kPSdibHVlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW1hZ2UpLCAnOjppbWc6OnRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLnR5cGUoKSwgJ2JpdG1hcCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEluKCc6OmltZzo6dGVzdCcsIHNlbGYucm9vdC5pbWFnZV9uYW1lcygpKQorICAgICAgICBkZWwgaW1hZ2UKKyAgICAgICAgc2VsZi5hc3NlcnROb3RJbignOjppbWc6OnRlc3QnLCBzZWxmLnJvb3QuaW1hZ2VfbmFtZXMoKSkKKworICAgIGRlZiBhc3NlcnRFcXVhbFN0ckxpc3Qoc2VsZiwgYWN0dWFsLCBleHBlY3RlZCk6CisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShhY3R1YWwsIHN0cikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3Quc3BsaXRsaXN0KGFjdHVhbCksIGV4cGVjdGVkKQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX2RhdGEoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5CaXRtYXBJbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydkYXRhJ10sICctZGF0YSB7fSB7fSB7fSB7fScpCisgICAgICAgIHdpdGggb3BlbihzZWxmLnRlc3RmaWxlLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShkYXRhPWRhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxTdHJMaXN0KGltYWdlWydkYXRhJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLWRhdGEnLCAnJywgJycsICcnLCBkYXRhLmRlY29kZSgnYXNjaWknKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2Uud2lkdGgoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuaGVpZ2h0KCksIDE2KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ21hc2tkYXRhJ10sICctbWFza2RhdGEge30ge30ge30ge30nKQorICAgICAgICBpbWFnZS5jb25maWd1cmUobWFza2RhdGE9ZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbFN0ckxpc3QoaW1hZ2VbJ21hc2tkYXRhJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLW1hc2tkYXRhJywgJycsICcnLCAnJywgZGF0YS5kZWNvZGUoJ2FzY2lpJykpKQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX2ZpbGUoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5CaXRtYXBJbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydmaWxlJ10sICctZmlsZSB7fSB7fSB7fSB7fScpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShmaWxlPXNlbGYudGVzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxTdHJMaXN0KGltYWdlWydmaWxlJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnLWZpbGUnLCAnJywgJycsICcnLHNlbGYudGVzdGZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydtYXNrZmlsZSddLCAnLW1hc2tmaWxlIHt9IHt9IHt9IHt9JykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKG1hc2tmaWxlPXNlbGYudGVzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxTdHJMaXN0KGltYWdlWydtYXNrZmlsZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJy1tYXNrZmlsZScsICcnLCAnJywgJycsIHNlbGYudGVzdGZpbGUpKQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX2JhY2tncm91bmQoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5CaXRtYXBJbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydiYWNrZ3JvdW5kJ10sICctYmFja2dyb3VuZCB7fSB7fSB7fSB7fScpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShiYWNrZ3JvdW5kPSdibHVlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnYmFja2dyb3VuZCddLCAnLWJhY2tncm91bmQge30ge30ge30gYmx1ZScpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfZm9yZWdyb3VuZChzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLkJpdG1hcEltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2ZvcmVncm91bmQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLWZvcmVncm91bmQge30ge30gIzAwMDAwMCAjMDAwMDAwJykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKGZvcmVncm91bmQ9J3llbGxvdycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2ZvcmVncm91bmQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnLWZvcmVncm91bmQge30ge30gIzAwMDAwMCB5ZWxsb3cnKQorCisKK2NsYXNzIFBob3RvSW1hZ2VUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgc2V0VXBDbGFzcyhjbHMpOgorICAgICAgICBBYnN0cmFjdFRrVGVzdC5zZXRVcENsYXNzLl9fZnVuY19fKGNscykKKyAgICAgICAgY2xzLnRlc3RmaWxlID0gc3VwcG9ydC5maW5kZmlsZSgncHl0aG9uLmdpZicsIHN1YmRpcj0naW1naGRyZGF0YScpCisKKyAgICBkZWYgY3JlYXRlKHNlbGYpOgorICAgICAgICByZXR1cm4gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT1zZWxmLnRlc3RmaWxlKQorCisgICAgZGVmIGNvbG9ybGlzdChzZWxmLCAqYXJncyk6CisgICAgICAgIGlmIHRraW50ZXIuVGtWZXJzaW9uID49IDguNiBhbmQgc2VsZi53YW50b2JqZWN0czoKKyAgICAgICAgICAgIHJldHVybiBhcmdzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gdGtpbnRlci5fam9pbihhcmdzKQorCisgICAgZGVmIGNoZWNrX2NyZWF0ZV9mcm9tX2ZpbGUoc2VsZiwgZXh0KToKKyAgICAgICAgdGVzdGZpbGUgPSBzdXBwb3J0LmZpbmRmaWxlKCdweXRob24uJyArIGV4dCwgc3ViZGlyPSdpbWdoZHJkYXRhJykKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZT10ZXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW1hZ2UpLCAnOjppbWc6OnRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLnR5cGUoKSwgJ3Bob3RvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2RhdGEnXSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2ZpbGUnXSwgdGVzdGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzo6aW1nOjp0ZXN0Jywgc2VsZi5yb290LmltYWdlX25hbWVzKCkpCisgICAgICAgIGRlbCBpbWFnZQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCc6OmltZzo6dGVzdCcsIHNlbGYucm9vdC5pbWFnZV9uYW1lcygpKQorCisgICAgZGVmIGNoZWNrX2NyZWF0ZV9mcm9tX2RhdGEoc2VsZiwgZXh0KToKKyAgICAgICAgdGVzdGZpbGUgPSBzdXBwb3J0LmZpbmRmaWxlKCdweXRob24uJyArIGV4dCwgc3ViZGlyPSdpbWdoZHJkYXRhJykKKyAgICAgICAgd2l0aCBvcGVuKHRlc3RmaWxlLCAncmInKSBhcyBmOgorICAgICAgICAgICAgZGF0YSA9IGYucmVhZCgpCisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoaW1hZ2UpLCAnOjppbWc6OnRlc3QnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLnR5cGUoKSwgJ3Bob3RvJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2RhdGEnXSwgZGF0YSBpZiBzZWxmLndhbnRvYmplY3RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBkYXRhLmRlY29kZSgnbGF0aW4xJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2ZpbGUnXSwgJycpCisgICAgICAgIHNlbGYuYXNzZXJ0SW4oJzo6aW1nOjp0ZXN0Jywgc2VsZi5yb290LmltYWdlX25hbWVzKCkpCisgICAgICAgIGRlbCBpbWFnZQorICAgICAgICBzZWxmLmFzc2VydE5vdEluKCc6OmltZzo6dGVzdCcsIHNlbGYucm9vdC5pbWFnZV9uYW1lcygpKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fcHBtX2ZpbGUoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY3JlYXRlX2Zyb21fZmlsZSgncHBtJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX3BwbV9kYXRhKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2NyZWF0ZV9mcm9tX2RhdGEoJ3BwbScpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9wZ21fZmlsZShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jcmVhdGVfZnJvbV9maWxlKCdwZ20nKQorCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fcGdtX2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY3JlYXRlX2Zyb21fZGF0YSgncGdtJykKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX2dpZl9maWxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2NyZWF0ZV9mcm9tX2ZpbGUoJ2dpZicpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZnJvbV9naWZfZGF0YShzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19jcmVhdGVfZnJvbV9kYXRhKCdnaWYnKQorCisgICAgQHJlcXVpcmVzX3RjbCg4LCA2KQorICAgIGRlZiB0ZXN0X2NyZWF0ZV9mcm9tX3BuZ19maWxlKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2NyZWF0ZV9mcm9tX2ZpbGUoJ3BuZycpCisKKyAgICBAcmVxdWlyZXNfdGNsKDgsIDYpCisgICAgZGVmIHRlc3RfY3JlYXRlX2Zyb21fcG5nX2RhdGEoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfY3JlYXRlX2Zyb21fZGF0YSgncG5nJykKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9kYXRhKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydkYXRhJ10sICcnKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi50ZXN0ZmlsZSwgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoKQorICAgICAgICBpbWFnZS5jb25maWd1cmUoZGF0YT1kYXRhKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydkYXRhJ10sIGRhdGEgaWYgc2VsZi53YW50b2JqZWN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZGF0YS5kZWNvZGUoJ2xhdGluMScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9mb3JtYXQoc2VsZik6CisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCc6OmltZzo6dGVzdCcsIG1hc3Rlcj1zZWxmLnJvb3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2Zvcm1hdCddLCAnJykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKGZpbGU9c2VsZi50ZXN0ZmlsZSwgZm9ybWF0PSdnaWYnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydmb3JtYXQnXSwgKCdnaWYnLCkgaWYgc2VsZi53YW50b2JqZWN0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAnZ2lmJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5oZWlnaHQoKSwgMTYpCisKKyAgICBkZWYgdGVzdF9jb25maWd1cmVfZmlsZShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZmlsZSddLCAnJykKKyAgICAgICAgaW1hZ2UuY29uZmlndXJlKGZpbGU9c2VsZi50ZXN0ZmlsZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZmlsZSddLCBzZWxmLnRlc3RmaWxlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9nYW1tYShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnZ2FtbWEnXSwgJzEuMCcpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShnYW1tYT0yLjApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2dhbW1hJ10sICcyLjAnKQorCisgICAgZGVmIHRlc3RfY29uZmlndXJlX3dpZHRoX2hlaWdodChzZWxmKToKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0JywgbWFzdGVyPXNlbGYucm9vdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZVsnd2lkdGgnXSwgJzAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydoZWlnaHQnXSwgJzAnKQorICAgICAgICBpbWFnZS5jb25maWd1cmUod2lkdGg9MjApCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShoZWlnaHQ9MTApCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ3dpZHRoJ10sICcyMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ2hlaWdodCddLCAnMTAnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDIwKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxMCkKKworICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZV9wYWxldHRlKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QnLCBtYXN0ZXI9c2VsZi5yb290KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlWydwYWxldHRlJ10sICcnKQorICAgICAgICBpbWFnZS5jb25maWd1cmUocGFsZXR0ZT0yNTYpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ3BhbGV0dGUnXSwgJzI1NicpCisgICAgICAgIGltYWdlLmNvbmZpZ3VyZShwYWxldHRlPSczLzQvMicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2VbJ3BhbGV0dGUnXSwgJzMvNC8yJykKKworICAgIGRlZiB0ZXN0X2JsYW5rKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgaW1hZ2UuYmxhbmsoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLndpZHRoKCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmhlaWdodCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoNCwgNiksIHNlbGYuY29sb3JsaXN0KDAsIDAsIDApKQorCisgICAgZGVmIHRlc3RfY29weShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGltYWdlMiA9IGltYWdlLmNvcHkoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuaGVpZ2h0KCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCg0LCA2KSwgaW1hZ2UuZ2V0KDQsIDYpKQorCisgICAgZGVmIHRlc3Rfc3Vic2FtcGxlKHNlbGYpOgorICAgICAgICBpbWFnZSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgaW1hZ2UyID0gaW1hZ2Uuc3Vic2FtcGxlKDIsIDMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLndpZHRoKCksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmhlaWdodCgpLCA2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5nZXQoMiwgMiksIGltYWdlLmdldCg0LCA2KSkKKworICAgICAgICBpbWFnZTIgPSBpbWFnZS5zdWJzYW1wbGUoMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIud2lkdGgoKSwgOCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuaGVpZ2h0KCksIDgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmdldCgyLCAzKSwgaW1hZ2UuZ2V0KDQsIDYpKQorCisgICAgZGVmIHRlc3Rfem9vbShzZWxmKToKKyAgICAgICAgaW1hZ2UgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGltYWdlMiA9IGltYWdlLnpvb20oMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIud2lkdGgoKSwgMzIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmhlaWdodCgpLCA0OCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuZ2V0KDgsIDE4KSwgaW1hZ2UuZ2V0KDQsIDYpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5nZXQoOSwgMjApLCBpbWFnZS5nZXQoNCwgNikpCisKKyAgICAgICAgaW1hZ2UyID0gaW1hZ2Uuem9vbSgyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi53aWR0aCgpLCAzMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuaGVpZ2h0KCksIDMyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5nZXQoOCwgMTIpLCBpbWFnZS5nZXQoNCwgNikpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UyLmdldCg5LCAxMyksIGltYWdlLmdldCg0LCA2KSkKKworICAgIGRlZiB0ZXN0X3B1dChzZWxmKToKKyAgICAgICAgaW1hZ2UgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGltYWdlLnB1dCgne3JlZCBncmVlbn0ge2JsdWUgeWVsbG93fScsIHRvPSg0LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoNCwgNiksIHNlbGYuY29sb3JsaXN0KDI1NSwgMCwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDUsIDYpLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sb3JsaXN0KDAsIDEyOCBpZiB0a2ludGVyLlRrVmVyc2lvbiA+PSA4LjYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIDI1NSwgMCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDQsIDcpLCBzZWxmLmNvbG9ybGlzdCgwLCAwLCAyNTUpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCg1LCA3KSwgc2VsZi5jb2xvcmxpc3QoMjU1LCAyNTUsIDApKQorCisgICAgICAgIGltYWdlLnB1dCgoKCcjZjAwJywgJyMwMGZmMDAnKSwgKCcjMDAwMDAwZmZmJywgJyNmZmZmZmZmZjAwMDAnKSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDAsIDApLCBzZWxmLmNvbG9ybGlzdCgyNTUsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCgxLCAwKSwgc2VsZi5jb2xvcmxpc3QoMCwgMjU1LCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoMCwgMSksIHNlbGYuY29sb3JsaXN0KDAsIDAsIDI1NSkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UuZ2V0KDEsIDEpLCBzZWxmLmNvbG9ybGlzdCgyNTUsIDI1NSwgMCkpCisKKyAgICBkZWYgdGVzdF9nZXQoc2VsZik6CisgICAgICAgIGltYWdlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCg0LCA2KSwgc2VsZi5jb2xvcmxpc3QoNjIsIDExNiwgMTYyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZS5nZXQoMCwgMCksIHNlbGYuY29sb3JsaXN0KDAsIDAsIDApKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlLmdldCgxNSwgMTUpLCBzZWxmLmNvbG9ybGlzdCgwLCAwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgaW1hZ2UuZ2V0LCAtMSwgMCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgaW1hZ2UuZ2V0LCAwLCAtMSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgaW1hZ2UuZ2V0LCAxNiwgMTUpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIGltYWdlLmdldCwgMTUsIDE2KQorCisgICAgZGVmIHRlc3Rfd3JpdGUoc2VsZik6CisgICAgICAgIGltYWdlID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBzZWxmLmFkZENsZWFudXAoc3VwcG9ydC51bmxpbmssIHN1cHBvcnQuVEVTVEZOKQorCisgICAgICAgIGltYWdlLndyaXRlKHN1cHBvcnQuVEVTVEZOKQorICAgICAgICBpbWFnZTIgPSB0a2ludGVyLlBob3RvSW1hZ2UoJzo6aW1nOjp0ZXN0MicsIG1hc3Rlcj1zZWxmLnJvb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ9J3BwbScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlPXN1cHBvcnQuVEVTVEZOKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihpbWFnZTIpLCAnOjppbWc6OnRlc3QyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIudHlwZSgpLCAncGhvdG8nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi53aWR0aCgpLCAxNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuaGVpZ2h0KCksIDE2KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMi5nZXQoMCwgMCksIGltYWdlLmdldCgwLCAwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTIuZ2V0KDE1LCA4KSwgaW1hZ2UuZ2V0KDE1LCA4KSkKKworICAgICAgICBpbWFnZS53cml0ZShzdXBwb3J0LlRFU1RGTiwgZm9ybWF0PSdnaWYnLCBmcm9tX2Nvb3Jkcz0oNCwgNiwgNiwgOSkpCisgICAgICAgIGltYWdlMyA9IHRraW50ZXIuUGhvdG9JbWFnZSgnOjppbWc6OnRlc3QzJywgbWFzdGVyPXNlbGYucm9vdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0nZ2lmJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGU9c3VwcG9ydC5URVNURk4pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGltYWdlMyksICc6OmltZzo6dGVzdDMnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMy50eXBlKCksICdwaG90bycpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UzLndpZHRoKCksIDIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaW1hZ2UzLmhlaWdodCgpLCAzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGltYWdlMy5nZXQoMCwgMCksIGltYWdlLmdldCg0LCA2KSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChpbWFnZTMuZ2V0KDEsIDIpLCBpbWFnZS5nZXQoNSwgOCkpCisKKwordGVzdHNfZ3VpID0gKE1pc2NUZXN0LCBCaXRtYXBJbWFnZVRlc3QsIFBob3RvSW1hZ2VUZXN0LCkKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzdXBwb3J0LnJ1bl91bml0dGVzdCgqdGVzdHNfZ3VpKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9taXNjLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF9taXNjLnB5CmluZGV4IGQzMjViMzEuLmQ4ZGU5NDkgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfbWlzYy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X21pc2MucHkKQEAgLTEsMTQgKzEsMTEgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHRraW50ZXIKLWZyb20gdGtpbnRlciBpbXBvcnQgdHRrCiBmcm9tIHRlc3QgaW1wb3J0IHN1cHBvcnQKK2Zyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IEFic3RyYWN0VGtUZXN0CiAKIHN1cHBvcnQucmVxdWlyZXMoJ2d1aScpCiAKLWNsYXNzIE1pc2NUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKLQotICAgIGRlZiBzZXRVcChzZWxmKToKLSAgICAgICAgc2VsZi5yb290ID0gdHRrLnNldHVwX21hc3RlcigpCitjbGFzcyBNaXNjVGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3RfdGtfc2V0UGFsZXR0ZShzZWxmKToKICAgICAgICAgcm9vdCA9IHNlbGYucm9vdApkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF90ZXh0LnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF90ZXh0LnB5CmluZGV4IDRjM2ZhMDQuLjEzYjdjNTYgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdGV4dC5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3RleHQucHkKQEAgLTEsMTkgKzEsMTYgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHRraW50ZXIKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgcnVuX3VuaXR0ZXN0Ci1mcm9tIHRraW50ZXIudHRrIGltcG9ydCBzZXR1cF9tYXN0ZXIKK2Zyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IEFic3RyYWN0VGtUZXN0CiAKIHJlcXVpcmVzKCdndWknKQogCi1jbGFzcyBUZXh0VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBUZXh0VGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgotICAgICAgICBzZWxmLnJvb3QgPSBzZXR1cF9tYXN0ZXIoKQorICAgICAgICBzdXBlcigpLnNldFVwKCkKICAgICAgICAgc2VsZi50ZXh0ID0gdGtpbnRlci5UZXh0KHNlbGYucm9vdCkKIAotICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi50ZXh0LmRlc3Ryb3koKQotCiAgICAgZGVmIHRlc3RfZGVidWcoc2VsZik6CiAgICAgICAgIHRleHQgPSBzZWxmLnRleHQKICAgICAgICAgb2xkZGVidWcgPSB0ZXh0LmRlYnVnKCkKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3RfdmFyaWFibGVzLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF92YXJpYWJsZXMucHkKaW5kZXggOWQ5MTBhYy4uNGI3Mjk0MyAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF92YXJpYWJsZXMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF92YXJpYWJsZXMucHkKQEAgLTEsNiArMSw3IEBACiBpbXBvcnQgdW5pdHRlc3QKIAotZnJvbSB0a2ludGVyIGltcG9ydCBWYXJpYWJsZSwgU3RyaW5nVmFyLCBJbnRWYXIsIERvdWJsZVZhciwgQm9vbGVhblZhciwgVGsKK2Zyb20gdGtpbnRlciBpbXBvcnQgKFZhcmlhYmxlLCBTdHJpbmdWYXIsIEludFZhciwgRG91YmxlVmFyLCBCb29sZWFuVmFyLCBUY2wsCisgICAgICAgICAgICAgICAgICAgICBUY2xFcnJvcikKIAogCiBjbGFzcyBWYXIoVmFyaWFibGUpOgpAQCAtMTYsMTAgKzE3LDEwIEBACiBjbGFzcyBUZXN0QmFzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdCA9IFRrKCkKKyAgICAgICAgc2VsZi5yb290ID0gVGNsKCkKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAgc2VsZi5yb290LmRlc3Ryb3koKQorICAgICAgICBkZWwgc2VsZi5yb290CiAKIAogY2xhc3MgVGVzdFZhcmlhYmxlKFRlc3RCYXNlKToKQEAgLTgxLDcgKzgyLDcgQEAKICAgICAgICAgICAgIHNlbGYucm9vdC5zZXR2YXIoYid2YXJceDAwbmFtZScsICJ2YWx1ZSIpCiAKICAgICBkZWYgdGVzdF9pbml0aWFsaXplKHNlbGYpOgotICAgICAgICB2ID0gVmFyKCkKKyAgICAgICAgdiA9IFZhcihzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uodi5zaWRlX2VmZmVjdCkKICAgICAgICAgdi5zZXQoInZhbHVlIikKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHYuc2lkZV9lZmZlY3QpCkBAIC0xNTksMTYgKzE2MCw0MSBAQAogCiAgICAgZGVmIHRlc3RfZGVmYXVsdChzZWxmKToKICAgICAgICAgdiA9IEJvb2xlYW5WYXIoc2VsZi5yb290KQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKEZhbHNlLCB2LmdldCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHYuZ2V0KCksIEZhbHNlKQogCiAgICAgZGVmIHRlc3RfZ2V0KHNlbGYpOgogICAgICAgICB2ID0gQm9vbGVhblZhcihzZWxmLnJvb3QsIFRydWUsICJuYW1lIikKLSAgICAgICAgc2VsZi5hc3NlcnRBbG1vc3RFcXVhbChUcnVlLCB2LmdldCgpKQorICAgICAgICBzZWxmLmFzc2VydElzKHYuZ2V0KCksIFRydWUpCiAgICAgICAgIHNlbGYucm9vdC5nbG9iYWxzZXR2YXIoIm5hbWUiLCAiMCIpCi0gICAgICAgIHNlbGYuYXNzZXJ0QWxtb3N0RXF1YWwoRmFsc2UsIHYuZ2V0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModi5nZXQoKSwgRmFsc2UpCisgICAgICAgIHNlbGYucm9vdC5nbG9iYWxzZXR2YXIoIm5hbWUiLCA0MiBpZiBzZWxmLnJvb3Qud2FudG9iamVjdHMoKSBlbHNlIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXModi5nZXQoKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5yb290Lmdsb2JhbHNldHZhcigibmFtZSIsIDApCisgICAgICAgIHNlbGYuYXNzZXJ0SXModi5nZXQoKSwgRmFsc2UpCisgICAgICAgIHNlbGYucm9vdC5nbG9iYWxzZXR2YXIoIm5hbWUiLCAib24iKQorICAgICAgICBzZWxmLmFzc2VydElzKHYuZ2V0KCksIFRydWUpCisKKyAgICBkZWYgdGVzdF9zZXQoc2VsZik6CisgICAgICAgIHRydWUgPSAxIGlmIHNlbGYucm9vdC53YW50b2JqZWN0cygpIGVsc2UgIjEiCisgICAgICAgIGZhbHNlID0gMCBpZiBzZWxmLnJvb3Qud2FudG9iamVjdHMoKSBlbHNlICIwIgorICAgICAgICB2ID0gQm9vbGVhblZhcihzZWxmLnJvb3QsIG5hbWU9Im5hbWUiKQorICAgICAgICB2LnNldChUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5nbG9iYWxnZXR2YXIoIm5hbWUiKSwgdHJ1ZSkKKyAgICAgICAgdi5zZXQoIjAiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5nbG9iYWxnZXR2YXIoIm5hbWUiKSwgZmFsc2UpCisgICAgICAgIHYuc2V0KDQyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5nbG9iYWxnZXR2YXIoIm5hbWUiKSwgdHJ1ZSkKKyAgICAgICAgdi5zZXQoMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnJvb3QuZ2xvYmFsZ2V0dmFyKCJuYW1lIiksIGZhbHNlKQorICAgICAgICB2LnNldCgib24iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5nbG9iYWxnZXR2YXIoIm5hbWUiKSwgdHJ1ZSkKIAogICAgIGRlZiB0ZXN0X2ludmFsaWRfdmFsdWVfZG9tYWluKHNlbGYpOgorICAgICAgICBmYWxzZSA9IDAgaWYgc2VsZi5yb290LndhbnRvYmplY3RzKCkgZWxzZSAiMCIKICAgICAgICAgdiA9IEJvb2xlYW5WYXIoc2VsZi5yb290LCBuYW1lPSJuYW1lIikKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvcik6CisgICAgICAgICAgICB2LnNldCgidmFsdWUiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYucm9vdC5nbG9iYWxnZXR2YXIoIm5hbWUiKSwgZmFsc2UpCiAgICAgICAgIHNlbGYucm9vdC5nbG9iYWxzZXR2YXIoIm5hbWUiLCAidmFsdWUiKQogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgogICAgICAgICAgICAgdi5nZXQoKQpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3RraW50ZXIvdGVzdF93aWRnZXRzLnB5CmluZGV4IDZlZjc3NTAuLjhiZTAzNzEgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyL3Rlc3Rfd2lkZ2V0cy5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdGtpbnRlci90ZXN0X3dpZGdldHMucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0a2ludGVyCitmcm9tIHRraW50ZXIgaW1wb3J0IFRjbEVycm9yCiBpbXBvcnQgb3MKIGltcG9ydCBzeXMKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcwpAQCAtNjUsNyArNjYsNyBAQAogICAgICAgICAndGFrZWZvY3VzJywgJ3VzZScsICd2aXN1YWwnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuVG9wbGV2ZWwoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X21lbnUoc2VsZik6CkBAIC0xMDQsNyArMTA1LDcgQEAKICAgICAgICAgJ3JlbGllZicsICd0YWtlZm9jdXMnLCAndmlzdWFsJywgJ3dpZHRoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLkZyYW1lKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKIApAQCAtMTE5LDcgKzEyMCw3IEBACiAgICAgICAgICd0YWtlZm9jdXMnLCAndGV4dCcsICd2aXN1YWwnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuTGFiZWxGcmFtZShzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfbGFiZWxhbmNob3Ioc2VsZik6CkBAIC0xNTcsNyArMTU4LDcgQEAKICAgICAgICAgJ3VuZGVybGluZScsICd3aWR0aCcsICd3cmFwbGVuZ3RoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLkxhYmVsKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKIApAQCAtMTc0LDcgKzE3NSw3IEBACiAgICAgICAgICdzdGF0ZScsICd0YWtlZm9jdXMnLCAndGV4dCcsICd0ZXh0dmFyaWFibGUnLAogICAgICAgICAndW5kZXJsaW5lJywgJ3dpZHRoJywgJ3dyYXBsZW5ndGgnKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5CdXR0b24oc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CkBAIC0xOTgsNyArMTk5LDcgQEAKICAgICAgICAgJ3VuZGVybGluZScsICd2YXJpYWJsZScsICd3aWR0aCcsICd3cmFwbGVuZ3RoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLkNoZWNrYnV0dG9uKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKIApAQCAtMjI2LDcgKzIyNyw3IEBACiAgICAgICAgICd1bmRlcmxpbmUnLCAndmFsdWUnLCAndmFyaWFibGUnLCAnd2lkdGgnLCAnd3JhcGxlbmd0aCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5SYWRpb2J1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfdmFsdWUoc2VsZik6CkBAIC0yNDksNyArMjUwLDcgQEAKICAgICApCiAgICAgX2NvbnZfcGl4ZWxzID0gc3RhdGljbWV0aG9kKHBpeGVsc19yb3VuZCkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuTWVudWJ1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0aW9uKHNlbGYpOgpAQCAtMjY3LDcgKzI2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAnY3Jhc2hlcyB3aXRoIENvY29hIFRrIChpc3N1ZTE5NzMzKScpCiAgICAgZGVmIHRlc3RfaW1hZ2Uoc2VsZik6CiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKLSAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UoJ2ltYWdlMScpCisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKG1hc3Rlcj1zZWxmLnJvb3QsIG5hbWU9J2ltYWdlMScpCiAgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsICdpbWFnZScsIGltYWdlLCBjb252PXN0cikKICAgICAgICAgZXJybXNnID0gJ2ltYWdlICJzcGFtIiBkb2VzblwndCBleGlzdCcKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yKSBhcyBjbToKQEAgLTMwMiw3ICszMDMsNyBAQAogCiBjbGFzcyBPcHRpb25NZW51VGVzdChNZW51YnV0dG9uVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgZGVmYXVsdD0nYicsIHZhbHVlcz0oJ2EnLCAnYicsICdjJyksICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsIGRlZmF1bHQ9J2InLCB2YWx1ZXM9KCdhJywgJ2InLCAnYycpLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLk9wdGlvbk1lbnUoc2VsZi5yb290LCBOb25lLCBkZWZhdWx0LCAqdmFsdWVzLCAqKmt3YXJncykKIAogCkBAIC0zMjEsNyArMzIyLDcgQEAKICAgICAgICAgJ3ZhbGlkYXRlJywgJ3ZhbGlkYXRlY29tbWFuZCcsICd3aWR0aCcsICd4c2Nyb2xsY29tbWFuZCcsCiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5FbnRyeShzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfZGlzYWJsZWRiYWNrZ3JvdW5kKHNlbGYpOgpAQCAtMzk1LDcgKzM5Niw3IEBACiAgICAgICAgICd3aWR0aCcsICd3cmFwJywgJ3hzY3JvbGxjb21tYW5kJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLlNwaW5ib3goc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIHRlc3Rfc2hvdyA9IE5vbmUKQEAgLTQ2NiwxMSArNDY3LDcgQEAKIAogICAgIGRlZiB0ZXN0X2Jib3goc2VsZik6CiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKLSAgICAgICAgYmJveCA9IHdpZGdldC5iYm94KDApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKGJib3gpLCA0KQotICAgICAgICBmb3IgaXRlbSBpbiBiYm94OgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW0sIGludCkKLQorICAgICAgICBzZWxmLmFzc2VydElzQm91bmRpbmdCb3god2lkZ2V0LmJib3goMCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCAnbm9pbmRleCcpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHdpZGdldC5iYm94KQpAQCAtNDkzLDkgKzQ5MCw5IEBACiAgICAgICAgICd4c2Nyb2xsY29tbWFuZCcsICd5c2Nyb2xsY29tbWFuZCcsCiAgICAgKQogICAgIGlmIHRjbF92ZXJzaW9uIDwgKDgsIDUpOgotICAgICAgICB3YW50b2JqZWN0cyA9IEZhbHNlCisgICAgICAgIF9zdHJpbmdpZnkgPSBUcnVlCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLlRleHQoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2F1dG9zZXBhcmF0b3JzKHNlbGYpOgpAQCAtNjIzLDE2ICs2MjAsMTIgQEAKIAogICAgIGRlZiB0ZXN0X2Jib3goc2VsZik6CiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKLSAgICAgICAgYmJveCA9IHdpZGdldC5iYm94KCcxLjEnKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihiYm94KSwgNCkKLSAgICAgICAgZm9yIGl0ZW0gaW4gYmJveDoKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShpdGVtLCBpbnQpCi0KKyAgICAgICAgc2VsZi5hc3NlcnRJc0JvdW5kaW5nQm94KHdpZGdldC5iYm94KCcxLjEnKSkKICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod2lkZ2V0LmJib3goJ2VuZCcpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB3aWRnZXQuYmJveCwgJ25vaW5kZXgnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB3aWRnZXQuYmJveCwgTm9uZSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgd2lkZ2V0LmJib3gpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHdpZGdldC5iYm94LCAnMS4xJywgJ2VuZCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2lkZ2V0LmJib3gpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgd2lkZ2V0LmJib3gsICcxLjEnLCAnZW5kJykKIAogCiBAYWRkX3N0YW5kYXJkX29wdGlvbnMoUGl4ZWxTaXplVGVzdHMsIFN0YW5kYXJkT3B0aW9uc1Rlc3RzKQpAQCAtNjUxLDkgKzY0NCw5IEBACiAgICAgKQogCiAgICAgX2NvbnZfcGl4ZWxzID0gcm91bmQKLSAgICB3YW50b2JqZWN0cyA9IEZhbHNlCisgICAgX3N0cmluZ2lmeSA9IFRydWUKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuQ2FudmFzKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9jbG9zZWVub3VnaChzZWxmKToKQEAgLTcwNiw3ICs2OTksNyBAQAogICAgICAgICAndGFrZWZvY3VzJywgJ3dpZHRoJywgJ3hzY3JvbGxjb21tYW5kJywgJ3lzY3JvbGxjb21tYW5kJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLkxpc3Rib3goc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2FjdGl2ZXN0eWxlKHNlbGYpOgpAQCAtNzE2LDcgKzcwOSw3IEBACiAKICAgICBkZWYgdGVzdF9saXN0dmFyaWFibGUoc2VsZik6CiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKLSAgICAgICAgdmFyID0gdGtpbnRlci5Eb3VibGVWYXIoKQorICAgICAgICB2YXIgPSB0a2ludGVyLkRvdWJsZVZhcihzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYuY2hlY2tWYXJpYWJsZVBhcmFtKHdpZGdldCwgJ2xpc3R2YXJpYWJsZScsIHZhcikKIAogICAgIGRlZiB0ZXN0X3NlbGVjdG1vZGUoc2VsZik6CkBAIC03MzAsNiArNzIzLDEwMSBAQAogICAgICAgICB3aWRnZXQgPSBzZWxmLmNyZWF0ZSgpCiAgICAgICAgIHNlbGYuY2hlY2tFbnVtUGFyYW0od2lkZ2V0LCAnc3RhdGUnLCAnZGlzYWJsZWQnLCAnbm9ybWFsJykKIAorICAgIGRlZiB0ZXN0X2l0ZW1jb25maWd1cmUoc2VsZik6CisgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnaXRlbSBudW1iZXIgIjAiIG91dCBvZiByYW5nZScpOgorICAgICAgICAgICAgd2lkZ2V0Lml0ZW1jb25maWd1cmUoMCkKKyAgICAgICAgY29sb3JzID0gJ3JlZCBvcmFuZ2UgeWVsbG93IGdyZWVuIGJsdWUgd2hpdGUgdmlvbGV0Jy5zcGxpdCgpCisgICAgICAgIHdpZGdldC5pbnNlcnQoJ2VuZCcsICpjb2xvcnMpCisgICAgICAgIGZvciBpLCBjb2xvciBpbiBlbnVtZXJhdGUoY29sb3JzKToKKyAgICAgICAgICAgIHdpZGdldC5pdGVtY29uZmlndXJlKGksIGJhY2tncm91bmQ9Y29sb3IpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKToKKyAgICAgICAgICAgIHdpZGdldC5pdGVtY29uZmlndXJlKCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCAnYmFkIGxpc3Rib3ggaW5kZXggInJlZCInKToKKyAgICAgICAgICAgIHdpZGdldC5pdGVtY29uZmlndXJlKCdyZWQnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpZGdldC5pdGVtY29uZmlndXJlKDAsICdiYWNrZ3JvdW5kJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdiYWNrZ3JvdW5kJywgJ2JhY2tncm91bmQnLCAnQmFja2dyb3VuZCcsICcnLCAncmVkJykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0Lml0ZW1jb25maWd1cmUoJ2VuZCcsICdiYWNrZ3JvdW5kJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgKCdiYWNrZ3JvdW5kJywgJ2JhY2tncm91bmQnLCAnQmFja2dyb3VuZCcsICcnLCAndmlvbGV0JykpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0Lml0ZW1jb25maWd1cmUoJ0AwLDAnLCAnYmFja2dyb3VuZCcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICgnYmFja2dyb3VuZCcsICdiYWNrZ3JvdW5kJywgJ0JhY2tncm91bmQnLCAnJywgJ3JlZCcpKQorCisgICAgICAgIGQgPSB3aWRnZXQuaXRlbWNvbmZpZ3VyZSgwKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgZm9yIGssIHYgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJbihsZW4odiksICgyLCA1KSkKKyAgICAgICAgICAgIGlmIGxlbih2KSA9PSA1OgorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodiwgd2lkZ2V0Lml0ZW1jb25maWd1cmUoMCwgaykpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzRdLCB3aWRnZXQuaXRlbWNnZXQoMCwgaykpCisKKyAgICBkZWYgY2hlY2tfaXRlbWNvbmZpZ3VyZShzZWxmLCBuYW1lLCB2YWx1ZSk6CisgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgd2lkZ2V0Lmluc2VydCgnZW5kJywgJ2EnLCAnYicsICdjJywgJ2QnKQorICAgICAgICB3aWRnZXQuaXRlbWNvbmZpZ3VyZSgwLCAqKntuYW1lOiB2YWx1ZX0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0Lml0ZW1jb25maWd1cmUoMCwgbmFtZSlbNF0sIHZhbHVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHdpZGdldC5pdGVtY2dldCgwLCBuYW1lKSwgdmFsdWUpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXNSZWdleChUY2xFcnJvciwgJ3Vua25vd24gY29sb3IgbmFtZSAic3BhbSInKToKKyAgICAgICAgICAgIHdpZGdldC5pdGVtY29uZmlndXJlKDAsICoqe25hbWU6ICdzcGFtJ30pCisKKyAgICBkZWYgdGVzdF9pdGVtY29uZmlndXJlX2JhY2tncm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlbWNvbmZpZ3VyZSgnYmFja2dyb3VuZCcsICcjZmYwMDAwJykKKworICAgIGRlZiB0ZXN0X2l0ZW1jb25maWd1cmVfYmcoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlbWNvbmZpZ3VyZSgnYmcnLCAnI2ZmMDAwMCcpCisKKyAgICBkZWYgdGVzdF9pdGVtY29uZmlndXJlX2ZnKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2l0ZW1jb25maWd1cmUoJ2ZnJywgJyMxMTAwMjInKQorCisgICAgZGVmIHRlc3RfaXRlbWNvbmZpZ3VyZV9mb3JlZ3JvdW5kKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrX2l0ZW1jb25maWd1cmUoJ2ZvcmVncm91bmQnLCAnIzExMDAyMicpCisKKyAgICBkZWYgdGVzdF9pdGVtY29uZmlndXJlX3NlbGVjdGJhY2tncm91bmQoc2VsZik6CisgICAgICAgIHNlbGYuY2hlY2tfaXRlbWNvbmZpZ3VyZSgnc2VsZWN0YmFja2dyb3VuZCcsICcjMTEwMDIyJykKKworICAgIGRlZiB0ZXN0X2l0ZW1jb25maWd1cmVfc2VsZWN0Zm9yZWdyb3VuZChzZWxmKToKKyAgICAgICAgc2VsZi5jaGVja19pdGVtY29uZmlndXJlKCdzZWxlY3Rmb3JlZ3JvdW5kJywgJyM2NTQzMjEnKQorCisgICAgZGVmIHRlc3RfYm94KHNlbGYpOgorICAgICAgICBsYiA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgbGIuaW5zZXJ0KDAsICooJ2VsJWQnICUgaSBmb3IgaSBpbiByYW5nZSg4KSkpCisgICAgICAgIGxiLnBhY2soKQorICAgICAgICBzZWxmLmFzc2VydElzQm91bmRpbmdCb3gobGIuYmJveCgwKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobGIuYmJveCgtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxiLmJib3goMTApKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgbGIuYmJveCwgJ25vaW5kZXgnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgbGIuYmJveCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYi5iYm94KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxiLmJib3gsIDAsIDEpCisKKyAgICBkZWYgdGVzdF9jdXJzZWxlY3Rpb24oc2VsZik6CisgICAgICAgIGxiID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBsYi5pbnNlcnQoMCwgKignZWwlZCcgJSBpIGZvciBpIGluIHJhbmdlKDgpKSkKKyAgICAgICAgbGIuc2VsZWN0aW9uX2NsZWFyKDAsIHRraW50ZXIuRU5EKQorICAgICAgICBsYi5zZWxlY3Rpb25fc2V0KDIsIDQpCisgICAgICAgIGxiLnNlbGVjdGlvbl9zZXQoNikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYi5jdXJzZWxlY3Rpb24oKSwgKDIsIDMsIDQsIDYpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxiLmN1cnNlbGVjdGlvbiwgMCkKKworICAgIGRlZiB0ZXN0X2dldChzZWxmKToKKyAgICAgICAgbGIgPSBzZWxmLmNyZWF0ZSgpCisgICAgICAgIGxiLmluc2VydCgwLCAqKCdlbCVkJyAlIGkgZm9yIGkgaW4gcmFuZ2UoOCkpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCgwKSwgJ2VsMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGIuZ2V0KDMpLCAnZWwzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYi5nZXQoJ2VuZCcpLCAnZWw3JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYi5nZXQoOCksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCgtMSksICcnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCgzLCA1KSwgKCdlbDMnLCAnZWw0JywgJ2VsNScpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCg1LCAnZW5kJyksICgnZWw1JywgJ2VsNicsICdlbDcnKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsYi5nZXQoNSwgMCksICgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxiLmdldCgwLCAwKSwgKCdlbDAnLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBsYi5nZXQsICdub2luZGV4JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIGxiLmdldCwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBsYi5nZXQpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBsYi5nZXQsICdlbmQnLCAnbm9pbmRleCcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGIuZ2V0LCAxLCAyLCAzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgbGIuZ2V0LCAyLjQpCisKKwogQGFkZF9zdGFuZGFyZF9vcHRpb25zKFBpeGVsU2l6ZVRlc3RzLCBTdGFuZGFyZE9wdGlvbnNUZXN0cykKIGNsYXNzIFNjYWxlVGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBPUFRJT05TID0gKApAQCAtNzQzLDcgKzgzMSw3IEBACiAgICAgKQogICAgIGRlZmF1bHRfb3JpZW50ID0gJ3ZlcnRpY2FsJwogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5TY2FsZShzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfYmlnaW5jcmVtZW50KHNlbGYpOgpAQCAtODA5LDEwICs4OTcsMTAgQEAKICAgICAgICAgJ3Rha2Vmb2N1cycsICd0cm91Z2hjb2xvcicsICd3aWR0aCcsCiAgICAgKQogICAgIF9jb252X3BpeGVscyA9IHJvdW5kCi0gICAgd2FudG9iamVjdHMgPSBGYWxzZQorICAgIF9zdHJpbmdpZnkgPSBUcnVlCiAgICAgZGVmYXVsdF9vcmllbnQgPSAndmVydGljYWwnCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0a2ludGVyLlNjcm9sbGJhcihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfYWN0aXZlcmVsaWVmKHNlbGYpOgpAQCAtODI4LDYgKzkxNiwyNCBAQAogICAgICAgICBzZWxmLmNoZWNrRW51bVBhcmFtKHdpZGdldCwgJ29yaWVudCcsICd2ZXJ0aWNhbCcsICdob3Jpem9udGFsJywKICAgICAgICAgICAgICAgICBlcnJtc2c9J2JhZCBvcmllbnRhdGlvbiAie30iOiBtdXN0IGJlIHZlcnRpY2FsIG9yIGhvcml6b250YWwnKQogCisgICAgZGVmIHRlc3RfYWN0aXZhdGUoc2VsZik6CisgICAgICAgIHNiID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBmb3IgZSBpbiAoJ2Fycm93MScsICdzbGlkZXInLCAnYXJyb3cyJyk6CisgICAgICAgICAgICBzYi5hY3RpdmF0ZShlKQorICAgICAgICBzYi5hY3RpdmF0ZSgnJykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzYi5hY3RpdmF0ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBzYi5hY3RpdmF0ZSwgJ2Fycm93MScsICdhcnJvdzInKQorCisgICAgZGVmIHRlc3Rfc2V0KHNlbGYpOgorICAgICAgICBzYiA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgc2Iuc2V0KDAuMiwgMC40KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNiLmdldCgpLCAoMC4yLCAwLjQpKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgc2Iuc2V0LCAnYWJjJywgJ2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBzYi5zZXQsIDAuNiwgJ2RlZicpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFRjbEVycm9yLCBzYi5zZXQsIDAuNiwgTm9uZSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVGNsRXJyb3IsIHNiLnNldCwgMC42KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgc2Iuc2V0LCAwLjYsIDAuNywgMC44KQorCiAKIEBhZGRfc3RhbmRhcmRfb3B0aW9ucyhTdGFuZGFyZE9wdGlvbnNUZXN0cykKIGNsYXNzIFBhbmVkV2luZG93VGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTg0MCw3ICs5NDYsNyBAQAogICAgICkKICAgICBkZWZhdWx0X29yaWVudCA9ICdob3Jpem9udGFsJwogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5QYW5lZFdpbmRvdyhzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfaGFuZGxlcGFkKHNlbGYpOgpAQCAtODg3LDYgKzk5MywxMDUgQEAKICAgICAgICAgc2VsZi5jaGVja1BpeGVsc1BhcmFtKHdpZGdldCwgJ3dpZHRoJywgNDAyLCA0MDMuNCwgNDA0LjYsIC00MDIsIDAsICc1aScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb252PW5vY29udikKIAorICAgIGRlZiBjcmVhdGUyKHNlbGYpOgorICAgICAgICBwID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBiID0gdGtpbnRlci5CdXR0b24ocCkKKyAgICAgICAgYyA9IHRraW50ZXIuQnV0dG9uKHApCisgICAgICAgIHAuYWRkKGIpCisgICAgICAgIHAuYWRkKGMpCisgICAgICAgIHJldHVybiBwLCBiLCBjCisKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlKHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBwLnBhbmVjb25maWd1cmUpCisgICAgICAgIGQgPSBwLnBhbmVjb25maWd1cmUoYikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGQsIGRpY3QpCisgICAgICAgIGZvciBrLCB2IGluIGQuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2LCBwLnBhbmVjb25maWd1cmUoYiwgaykpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHZbNF0sIHAucGFuZWNnZXQoYiwgaykpCisKKyAgICBkZWYgY2hlY2tfcGFuZWNvbmZpZ3VyZShzZWxmLCBwLCBiLCBuYW1lLCB2YWx1ZSwgZXhwZWN0ZWQsIHN0cmluZ2lmeT1GYWxzZSk6CisgICAgICAgIGNvbnYgPSBsYW1iZGEgeDogeAorICAgICAgICBpZiBub3Qgc2VsZi53YW50b2JqZWN0cyBvciBzdHJpbmdpZnk6CisgICAgICAgICAgICBleHBlY3RlZCA9IHN0cihleHBlY3RlZCkKKyAgICAgICAgaWYgc2VsZi53YW50b2JqZWN0cyBhbmQgc3RyaW5naWZ5OgorICAgICAgICAgICAgY29udiA9IHN0cgorICAgICAgICBwLnBhbmVjb25maWd1cmUoYiwgKip7bmFtZTogdmFsdWV9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnYocC5wYW5lY29uZmlndXJlKGIsIG5hbWUpWzRdKSwgZXhwZWN0ZWQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udihwLnBhbmVjZ2V0KGIsIG5hbWUpKSwgZXhwZWN0ZWQpCisKKyAgICBkZWYgY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQoc2VsZiwgcCwgYiwgbmFtZSwgbXNnKToKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlc1JlZ2V4KFRjbEVycm9yLCBtc2cpOgorICAgICAgICAgICAgcC5wYW5lY29uZmlndXJlKGIsICoqe25hbWU6ICdiYWRWYWx1ZSd9KQorCisgICAgZGVmIHRlc3RfcGFuZWNvbmZpZ3VyZV9hZnRlcihzZWxmKToKKyAgICAgICAgcCwgYiwgYyA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZShwLCBiLCAnYWZ0ZXInLCBjLCBzdHIoYykpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ2FmdGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIHdpbmRvdyBwYXRoIG5hbWUgImJhZFZhbHVlIicpCisKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX2JlZm9yZShzZWxmKToKKyAgICAgICAgcCwgYiwgYyA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZShwLCBiLCAnYmVmb3JlJywgYywgc3RyKGMpKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmVfYmFkKHAsIGIsICdiZWZvcmUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQgd2luZG93IHBhdGggbmFtZSAiYmFkVmFsdWUiJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfaGVpZ2h0KHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdoZWlnaHQnLCAxMCwgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdpZnk9Z2V0X3RrX3BhdGNobGV2ZWwoKSA8ICg4LCA1LCAxMSkpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ2hlaWdodCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImJhZFZhbHVlIicpCisKKyAgICBAcmVxdWlyZXNfdGNsKDgsIDUpCisgICAgZGVmIHRlc3RfcGFuZWNvbmZpZ3VyZV9oaWRlKHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdoaWRlJywgRmFsc2UsIDApCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ2hpZGUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZCBib29sZWFuIHZhbHVlIGJ1dCBnb3QgImJhZFZhbHVlIicpCisKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX21pbnNpemUoc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ21pbnNpemUnLCAxMCwgMTApCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ21pbnNpemUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQgc2NyZWVuIGRpc3RhbmNlICJiYWRWYWx1ZSInKQorCisgICAgZGVmIHRlc3RfcGFuZWNvbmZpZ3VyZV9wYWR4KHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICdwYWR4JywgMS4zLCAxKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmVfYmFkKHAsIGIsICdwYWR4JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYmFkIHNjcmVlbiBkaXN0YW5jZSAiYmFkVmFsdWUiJykKKworICAgIGRlZiB0ZXN0X3BhbmVjb25maWd1cmVfcGFkeShzZWxmKToKKyAgICAgICAgcCwgYiwgYyA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZShwLCBiLCAncGFkeScsIDEuMywgMSkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAncGFkeScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCBzY3JlZW4gZGlzdGFuY2UgImJhZFZhbHVlIicpCisKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX3N0aWNreShzZWxmKToKKyAgICAgICAgcCwgYiwgYyA9IHNlbGYuY3JlYXRlMigpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZShwLCBiLCAnc3RpY2t5JywgJ25zZXcnLCAnbmVzdycpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ3N0aWNreScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhZCBzdGlja3luZXNzIHZhbHVlICJiYWRWYWx1ZSI6IG11c3QgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiZSBhIHN0cmluZyBjb250YWluaW5nIHplcm8gb3IgbW9yZSBvZiAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ24sIGUsIHMsIGFuZCB3JykKKworICAgIEByZXF1aXJlc190Y2woOCwgNSkKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX3N0cmV0Y2goc2VsZik6CisgICAgICAgIHAsIGIsIGMgPSBzZWxmLmNyZWF0ZTIoKQorICAgICAgICBzZWxmLmNoZWNrX3BhbmVjb25maWd1cmUocCwgYiwgJ3N0cmV0Y2gnLCAnYWx3JywgJ2Fsd2F5cycpCisgICAgICAgIHNlbGYuY2hlY2tfcGFuZWNvbmZpZ3VyZV9iYWQocCwgYiwgJ3N0cmV0Y2gnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQgc3RyZXRjaCAiYmFkVmFsdWUiOiBtdXN0IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWx3YXlzLCBmaXJzdCwgbGFzdCwgbWlkZGxlLCBvciBuZXZlcicpCisKKyAgICBkZWYgdGVzdF9wYW5lY29uZmlndXJlX3dpZHRoKHNlbGYpOgorICAgICAgICBwLCBiLCBjID0gc2VsZi5jcmVhdGUyKCkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlKHAsIGIsICd3aWR0aCcsIDEwLCAxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ2lmeT1nZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDExKSkKKyAgICAgICAgc2VsZi5jaGVja19wYW5lY29uZmlndXJlX2JhZChwLCBiLCAnd2lkdGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWQgc2NyZWVuIGRpc3RhbmNlICJiYWRWYWx1ZSInKQorCiAKIEBhZGRfc3RhbmRhcmRfb3B0aW9ucyhTdGFuZGFyZE9wdGlvbnNUZXN0cykKIGNsYXNzIE1lbnVUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtODk5LDcgKzExMDQsNyBAQAogICAgICkKICAgICBfY29udl9waXhlbHMgPSBub2NvbnYKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHRraW50ZXIuTWVudShzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfcG9zdGNvbW1hbmQoc2VsZik6CkBAIC05MjMsNiArMTEyOCwzOSBAQAogICAgICAgICBzZWxmLmNoZWNrRW51bVBhcmFtKHdpZGdldCwgJ3R5cGUnLAogICAgICAgICAgICAgICAgICdub3JtYWwnLCAndGVhcm9mZicsICdtZW51YmFyJykKIAorICAgIGRlZiB0ZXN0X2VudHJ5Y29uZmlndXJlKHNlbGYpOgorICAgICAgICBtMSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgbTEuYWRkX2NvbW1hbmQobGFiZWw9J3Rlc3QnKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG0xLmVudHJ5Y29uZmlndXJlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoVGNsRXJyb3IsICdiYWQgbWVudSBlbnRyeSBpbmRleCAiZm9vIicpOgorICAgICAgICAgICAgbTEuZW50cnljb25maWd1cmUoJ2ZvbycpCisgICAgICAgIGQgPSBtMS5lbnRyeWNvbmZpZ3VyZSgxKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZCwgZGljdCkKKyAgICAgICAgZm9yIGssIHYgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGssIHN0cikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSh2LCB0dXBsZSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHYpLCA1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh2WzBdLCBrKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5lbnRyeWNnZXQoMSwgayksIHZbNF0pCisgICAgICAgIG0xLmRlc3Ryb3koKQorCisgICAgZGVmIHRlc3RfZW50cnljb25maWd1cmVfbGFiZWwoc2VsZik6CisgICAgICAgIG0xID0gc2VsZi5jcmVhdGUoKQorICAgICAgICBtMS5hZGRfY29tbWFuZChsYWJlbD0ndGVzdCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobTEuZW50cnljZ2V0KDEsICdsYWJlbCcpLCAndGVzdCcpCisgICAgICAgIG0xLmVudHJ5Y29uZmlndXJlKDEsIGxhYmVsPSdjaGFuZ2VkJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtMS5lbnRyeWNnZXQoMSwgJ2xhYmVsJyksICdjaGFuZ2VkJykKKworICAgIGRlZiB0ZXN0X2VudHJ5Y29uZmlndXJlX3ZhcmlhYmxlKHNlbGYpOgorICAgICAgICBtMSA9IHNlbGYuY3JlYXRlKCkKKyAgICAgICAgdjEgPSB0a2ludGVyLkJvb2xlYW5WYXIoc2VsZi5yb290KQorICAgICAgICB2MiA9IHRraW50ZXIuQm9vbGVhblZhcihzZWxmLnJvb3QpCisgICAgICAgIG0xLmFkZF9jaGVja2J1dHRvbih2YXJpYWJsZT12MSwgb252YWx1ZT1UcnVlLCBvZmZ2YWx1ZT1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdOb25zZW5zZScpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0xLmVudHJ5Y2dldCgxLCAndmFyaWFibGUnKSksIHN0cih2MSkpCisgICAgICAgIG0xLmVudHJ5Y29uZmlndXJlKDEsIHZhcmlhYmxlPXYyKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtMS5lbnRyeWNnZXQoMSwgJ3ZhcmlhYmxlJykpLCBzdHIodjIpKQorCiAKIEBhZGRfc3RhbmRhcmRfb3B0aW9ucyhQaXhlbFNpemVUZXN0cywgU3RhbmRhcmRPcHRpb25zVGVzdHMpCiBjbGFzcyBNZXNzYWdlVGVzdChBYnN0cmFjdFdpZGdldFRlc3QsIHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTkzNSw3ICsxMTczLDcgQEAKICAgICApCiAgICAgX2NvbnZfcGFkX3BpeGVscyA9IG5vY29udgogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdGtpbnRlci5NZXNzYWdlKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9hc3BlY3Qoc2VsZik6CmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3RfZXh0ZW5zaW9ucy5weSBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5CmluZGV4IGQ2OTk1NDYuLmMzYWYwNmMgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5CisrKyBiL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9leHRlbnNpb25zLnB5CkBAIC0yLDM0ICsyLDMwIEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCB0a2ludGVyCiBmcm9tIHRraW50ZXIgaW1wb3J0IHR0awotZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKLQotaW1wb3J0IHRraW50ZXIudGVzdC5zdXBwb3J0IGFzIHN1cHBvcnQKK2Zyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcywgcnVuX3VuaXR0ZXN0LCBzd2FwX2F0dHIKK2Zyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IEFic3RyYWN0VGtUZXN0LCBkZXN0cm95X2RlZmF1bHRfcm9vdAogCiByZXF1aXJlcygnZ3VpJykKIAotY2xhc3MgTGFiZWxlZFNjYWxlVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6Ci0KLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQorY2xhc3MgTGFiZWxlZFNjYWxlVGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQotCisgICAgICAgIHNlbGYucm9vdC51cGRhdGVfaWRsZXRhc2tzKCkKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCiAKICAgICBkZWYgdGVzdF93aWRnZXRfZGVzdHJveShzZWxmKToKICAgICAgICAgIyBhdXRvbWF0aWNhbGx5IGNyZWF0ZWQgdmFyaWFibGUKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QpCiAgICAgICAgIHZhciA9IHguX3ZhcmlhYmxlLl9uYW1lCiAgICAgICAgIHguZGVzdHJveSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHgudGsuZ2xvYmFsZ2V0dmFyLCB2YXIpCiAKICAgICAgICAgIyBtYW51YWxseSBjcmVhdGVkIHZhcmlhYmxlCi0gICAgICAgIG15dmFyID0gdGtpbnRlci5Eb3VibGVWYXIoKQorICAgICAgICBteXZhciA9IHRraW50ZXIuRG91YmxlVmFyKHNlbGYucm9vdCkKICAgICAgICAgbmFtZSA9IG15dmFyLl9uYW1lCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHZhcmlhYmxlPW15dmFyKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIHZhcmlhYmxlPW15dmFyKQogICAgICAgICB4LmRlc3Ryb3koKQotICAgICAgICBpZiB4LnRrLndhbnRvYmplY3RzKCk6CisgICAgICAgIGlmIHNlbGYud2FudG9iamVjdHM6CiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudGsuZ2xvYmFsZ2V0dmFyKG5hbWUpLCBteXZhci5nZXQoKSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZmxvYXQoeC50ay5nbG9iYWxnZXR2YXIobmFtZSkpLCBteXZhci5nZXQoKSkKQEAgLTM3LDI2ICszMywzNiBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB4LnRrLmdsb2JhbGdldHZhciwgbmFtZSkKIAogICAgICAgICAjIGNoZWNraW5nIHRoYXQgdGhlIHRyYWNpbmcgY2FsbGJhY2sgaXMgcHJvcGVybHkgcmVtb3ZlZAotICAgICAgICBteXZhciA9IHRraW50ZXIuSW50VmFyKCkKKyAgICAgICAgbXl2YXIgPSB0a2ludGVyLkludFZhcihzZWxmLnJvb3QpCiAgICAgICAgICMgTGFiZWxlZFNjYWxlIHdpbGwgc3RhcnQgdHJhY2luZyBteXZhcgotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSh2YXJpYWJsZT1teXZhcikKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCB2YXJpYWJsZT1teXZhcikKICAgICAgICAgeC5kZXN0cm95KCkKICAgICAgICAgIyBVbmxlc3MgdGhlIHRyYWNpbmcgY2FsbGJhY2sgd2FzIHJlbW92ZWQsIGNyZWF0aW5nIGEgbmV3CiAgICAgICAgICMgTGFiZWxlZFNjYWxlIHdpdGggdGhlIHNhbWUgdmFyIHdpbGwgY2F1c2UgYW4gZXJyb3Igbm93LiBUaGlzCiAgICAgICAgICMgaGFwcGVucyBiZWNhdXNlIHRoZSB2YXJpYWJsZSB3aWxsIGJlIHNldCB0byAocG9zc2libHkpIGEgbmV3CiAgICAgICAgICMgdmFsdWUgd2hpY2ggY2F1c2VzIHRoZSB0cmFjaW5nIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBhbmQgdGhlbgogICAgICAgICAjIGl0IHRyaWVzIGNhbGxpbmcgaW5zdGFuY2UgYXR0cmlidXRlcyBub3QgeWV0IGRlZmluZWQuCi0gICAgICAgIHR0ay5MYWJlbGVkU2NhbGUodmFyaWFibGU9bXl2YXIpCisgICAgICAgIHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCB2YXJpYWJsZT1teXZhcikKICAgICAgICAgaWYgaGFzYXR0cihzeXMsICdsYXN0X3R5cGUnKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwoc3lzLmxhc3RfdHlwZSwgdGtpbnRlci5UY2xFcnJvcikKIAogCisgICAgZGVmIHRlc3RfaW5pdGlhbGl6YXRpb25fbm9fbWFzdGVyKHNlbGYpOgorICAgICAgICAjIG5vIG1hc3RlciBwYXNzaW5nCisgICAgICAgIHdpdGggc3dhcF9hdHRyKHRraW50ZXIsICdfZGVmYXVsdF9yb290JywgTm9uZSksIFwKKyAgICAgICAgICAgICBzd2FwX2F0dHIodGtpbnRlciwgJ19zdXBwb3J0X2RlZmF1bHRfcm9vdCcsIFRydWUpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZSh0a2ludGVyLl9kZWZhdWx0X3Jvb3QpCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm1hc3RlciwgdGtpbnRlci5fZGVmYXVsdF9yb290KQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC50aywgdGtpbnRlci5fZGVmYXVsdF9yb290LnRrKQorICAgICAgICAgICAgICAgIHguZGVzdHJveSgpCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGRlc3Ryb3lfZGVmYXVsdF9yb290KCkKKwogICAgIGRlZiB0ZXN0X2luaXRpYWxpemF0aW9uKHNlbGYpOgogICAgICAgICAjIG1hc3RlciBwYXNzaW5nCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKCkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm1hc3RlciwgdGtpbnRlci5fZGVmYXVsdF9yb290KQotICAgICAgICB4LmRlc3Ryb3koKQotICAgICAgICBtYXN0ZXIgPSB0a2ludGVyLkZyYW1lKCkKKyAgICAgICAgbWFzdGVyID0gdGtpbnRlci5GcmFtZShzZWxmLnJvb3QpCiAgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKG1hc3RlcikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh4Lm1hc3RlciwgbWFzdGVyKQogICAgICAgICB4LmRlc3Ryb3koKQpAQCAtNjQsMjUgKzcwLDI1IEBACiAgICAgICAgICMgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24vcGFzc2luZwogICAgICAgICBwYXNzZWRfZXhwZWN0ZWQgPSAoKCcwJywgMCksICgwLCAwKSwgKDEwLCAxMCksCiAgICAgICAgICAgICAoLTEsIC0xKSwgKHN5cy5tYXhzaXplICsgMSwgc3lzLm1heHNpemUgKyAxKSkKLSAgICAgICAgaWYgeC50ay53YW50b2JqZWN0cygpOgorICAgICAgICBpZiBzZWxmLndhbnRvYmplY3RzOgogICAgICAgICAgICAgcGFzc2VkX2V4cGVjdGVkICs9ICgoMi41LCAyKSwpCiAgICAgICAgIGZvciBwYWlyIGluIHBhc3NlZF9leHBlY3RlZDoKLSAgICAgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPXBhaXJbMF0pCisgICAgICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIGZyb21fPXBhaXJbMF0pCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHgudmFsdWUsIHBhaXJbMV0pCiAgICAgICAgICAgICB4LmRlc3Ryb3koKQotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShmcm9tXz0nMi41JykKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBmcm9tXz0nMi41JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgeC5fdmFyaWFibGUuZ2V0KQogICAgICAgICB4LmRlc3Ryb3koKQotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShmcm9tXz1Ob25lKQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIGZyb21fPU5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHguX3ZhcmlhYmxlLmdldCkKICAgICAgICAgeC5kZXN0cm95KCkKICAgICAgICAgIyB2YXJpYWJsZSBzaG91bGQgaGF2ZSBpdHMgZGVmYXVsdCB2YWx1ZSBzZXQgdG8gdGhlIGZyb21fIHZhbHVlCi0gICAgICAgIG15dmFyID0gdGtpbnRlci5Eb3VibGVWYXIodmFsdWU9MjApCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHZhcmlhYmxlPW15dmFyKQorICAgICAgICBteXZhciA9IHRraW50ZXIuRG91YmxlVmFyKHNlbGYucm9vdCwgdmFsdWU9MjApCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgdmFyaWFibGU9bXl2YXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWx1ZSwgMCkKICAgICAgICAgeC5kZXN0cm95KCkKICAgICAgICAgIyBjaGVjayB0aGF0IGl0IGlzIHJlYWxseSB1c2luZyBhIERvdWJsZVZhcgotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSh2YXJpYWJsZT1teXZhciwgZnJvbV89MC41KQorICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QsIHZhcmlhYmxlPW15dmFyLCBmcm9tXz0wLjUpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC52YWx1ZSwgMC41KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHguX3ZhcmlhYmxlLl9uYW1lLCBteXZhci5fbmFtZSkKICAgICAgICAgeC5kZXN0cm95KCkKQEAgLTkxLDI1ICs5NywyNiBAQAogICAgICAgICBkZWYgY2hlY2tfcG9zaXRpb25zKHNjYWxlLCBzY2FsZV9wb3MsIGxhYmVsLCBsYWJlbF9wb3MpOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzY2FsZS5wYWNrX2luZm8oKVsnc2lkZSddLCBzY2FsZV9wb3MpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxhYmVsLnBsYWNlX2luZm8oKVsnYW5jaG9yJ10sIGxhYmVsX3BvcykKLSAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoY29tcG91bmQ9J3RvcCcpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgY29tcG91bmQ9J3RvcCcpCiAgICAgICAgIGNoZWNrX3Bvc2l0aW9ucyh4LnNjYWxlLCAnYm90dG9tJywgeC5sYWJlbCwgJ24nKQogICAgICAgICB4LmRlc3Ryb3koKQotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShjb21wb3VuZD0nYm90dG9tJykKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBjb21wb3VuZD0nYm90dG9tJykKICAgICAgICAgY2hlY2tfcG9zaXRpb25zKHguc2NhbGUsICd0b3AnLCB4LmxhYmVsLCAncycpCiAgICAgICAgIHguZGVzdHJveSgpCi0gICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKGNvbXBvdW5kPSd1bmtub3duJykgIyBpbnZlcnQgZGVmYXVsdCBwb3NpdGlvbnMKKyAgICAgICAgIyBpbnZlcnQgZGVmYXVsdCBwb3NpdGlvbnMKKyAgICAgICAgeCA9IHR0ay5MYWJlbGVkU2NhbGUoc2VsZi5yb290LCBjb21wb3VuZD0ndW5rbm93bicpCiAgICAgICAgIGNoZWNrX3Bvc2l0aW9ucyh4LnNjYWxlLCAndG9wJywgeC5sYWJlbCwgJ3MnKQogICAgICAgICB4LmRlc3Ryb3koKQotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSgpICMgdGFrZSBkZWZhdWx0IHBvc2l0aW9ucworICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZShzZWxmLnJvb3QpICMgdGFrZSBkZWZhdWx0IHBvc2l0aW9ucwogICAgICAgICBjaGVja19wb3NpdGlvbnMoeC5zY2FsZSwgJ2JvdHRvbScsIHgubGFiZWwsICduJykKICAgICAgICAgeC5kZXN0cm95KCkKIAogICAgICAgICAjIGV4dHJhLCBhbmQgaW52YWxpZCwga3dhcmdzCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHR0ay5MYWJlbGVkU2NhbGUsIGE9J2InKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCB0dGsuTGFiZWxlZFNjYWxlLCBtYXN0ZXIsIGE9J2InKQogCiAKICAgICBkZWYgdGVzdF9ob3Jpem9udGFsX3JhbmdlKHNlbGYpOgotICAgICAgICBsc2NhbGUgPSB0dGsuTGFiZWxlZFNjYWxlKGZyb21fPTAsIHRvPTEwKQorICAgICAgICBsc2NhbGUgPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCwgZnJvbV89MCwgdG89MTApCiAgICAgICAgIGxzY2FsZS5wYWNrKCkKICAgICAgICAgbHNjYWxlLndhaXRfdmlzaWJpbGl0eSgpCiAgICAgICAgIGxzY2FsZS51cGRhdGUoKQpAQCAtMTI4LDcgKzEzNSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0Tm90RXF1YWwocHJldl94Y29vcmQsIGN1cnJfeGNvb3JkKQogICAgICAgICAjIHRoZSBsYWJlbCB3aWRnZXQgc2hvdWxkIGhhdmUgYmVlbiByZXBvc2l0aW9uZWQgdG9vCiAgICAgICAgIGxpbmZvXzIgPSBsc2NhbGUubGFiZWwucGxhY2VfaW5mbygpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHNjYWxlLmxhYmVsWyd0ZXh0J10sIDAgaWYgbHNjYWxlLnRrLndhbnRvYmplY3RzKCkgZWxzZSAnMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobHNjYWxlLmxhYmVsWyd0ZXh0J10sIDAgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlICcwJykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjdXJyX3hjb29yZCwgaW50KGxpbmZvXzJbJ3gnXSkpCiAgICAgICAgICMgY2hhbmdlIHRoZSByYW5nZSBiYWNrCiAgICAgICAgIGxzY2FsZS5zY2FsZS5jb25maWd1cmUoZnJvbV89MCwgdG89MTApCkBAIC0xMzksNyArMTQ2LDcgQEAKIAogCiAgICAgZGVmIHRlc3RfdmFyaWFibGVfY2hhbmdlKHNlbGYpOgotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCkKICAgICAgICAgeC5wYWNrKCkKICAgICAgICAgeC53YWl0X3Zpc2liaWxpdHkoKQogICAgICAgICB4LnVwZGF0ZSgpCkBAIC0xNTEsMTMgKzE1OCwxMyBAQAogICAgICAgICAjIGF0IHRoZSBzYW1lIHRpbWUgdGhpcyBzaG91bGRuJ3QgYWZmZWN0IHRlc3Qgb3V0Y29tZQogICAgICAgICB4LnVwZGF0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5sYWJlbFsndGV4dCddLAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhbCBpZiB4LnRrLndhbnRvYmplY3RzKCkgZWxzZSBzdHIobmV3dmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXd2YWwgaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlIHN0cihuZXd2YWwpKQogICAgICAgICBzZWxmLmFzc2VydEdyZWF0ZXIoeC5zY2FsZS5jb29yZHMoKVswXSwgY3Vycl94Y29vcmQpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoeC5zY2FsZS5jb29yZHMoKVswXSwKICAgICAgICAgICAgIGludCh4LmxhYmVsLnBsYWNlX2luZm8oKVsneCddKSkKIAogICAgICAgICAjIHZhbHVlIG91dHNpZGUgcmFuZ2UKLSAgICAgICAgaWYgeC50ay53YW50b2JqZWN0cygpOgorICAgICAgICBpZiBzZWxmLndhbnRvYmplY3RzOgogICAgICAgICAgICAgY29udiA9IGxhbWJkYSB4OiB4CiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBjb252ID0gaW50CkBAIC0xNzEsNyArMTc4LDcgQEAKIAogCiAgICAgZGVmIHRlc3RfcmVzaXplKHNlbGYpOgotICAgICAgICB4ID0gdHRrLkxhYmVsZWRTY2FsZSgpCisgICAgICAgIHggPSB0dGsuTGFiZWxlZFNjYWxlKHNlbGYucm9vdCkKICAgICAgICAgeC5wYWNrKGV4cGFuZD1UcnVlLCBmaWxsPSdib3RoJykKICAgICAgICAgeC53YWl0X3Zpc2liaWxpdHkoKQogICAgICAgICB4LnVwZGF0ZSgpCkBAIC0xOTAsMjAgKzE5NywyMCBAQAogICAgICAgICB4LmRlc3Ryb3koKQogCiAKLWNsYXNzIE9wdGlvbk1lbnVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIE9wdGlvbk1lbnVUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQotICAgICAgICBzZWxmLnRleHR2YXIgPSB0a2ludGVyLlN0cmluZ1ZhcigpCisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBzZWxmLnRleHR2YXIgPSB0a2ludGVyLlN0cmluZ1ZhcihzZWxmLnJvb3QpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CiAgICAgICAgIGRlbCBzZWxmLnRleHR2YXIKLSAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKKyAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCiAKIAogICAgIGRlZiB0ZXN0X3dpZGdldF9kZXN0cm95KHNlbGYpOgotICAgICAgICB2YXIgPSB0a2ludGVyLlN0cmluZ1ZhcigpCi0gICAgICAgIG9wdG1lbnUgPSB0dGsuT3B0aW9uTWVudShOb25lLCB2YXIpCisgICAgICAgIHZhciA9IHRraW50ZXIuU3RyaW5nVmFyKHNlbGYucm9vdCkKKyAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KHNlbGYucm9vdCwgdmFyKQogICAgICAgICBuYW1lID0gdmFyLl9uYW1lCiAgICAgICAgIG9wdG1lbnUudXBkYXRlX2lkbGV0YXNrcygpCiAgICAgICAgIG9wdG1lbnUuZGVzdHJveSgpCkBAIC0yMTQsOSArMjIxLDkgQEAKIAogICAgIGRlZiB0ZXN0X2luaXRpYWxpemF0aW9uKHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLAotICAgICAgICAgICAgdHRrLk9wdGlvbk1lbnUsIE5vbmUsIHNlbGYudGV4dHZhciwgaW52YWxpZD0ndGhpbmcnKQorICAgICAgICAgICAgdHRrLk9wdGlvbk1lbnUsIHNlbGYucm9vdCwgc2VsZi50ZXh0dmFyLCBpbnZhbGlkPSd0aGluZycpCiAKLSAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHNlbGYudGV4dHZhciwgJ2InLCAnYScsICdiJykKKyAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KHNlbGYucm9vdCwgc2VsZi50ZXh0dmFyLCAnYicsICdhJywgJ2InKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG9wdG1lbnUuX3ZhcmlhYmxlLmdldCgpLCAnYicpCiAKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKG9wdG1lbnVbJ21lbnUnXSkKQEAgLTIyOCw3ICsyMzUsNyBAQAogICAgIGRlZiB0ZXN0X21lbnUoc2VsZik6CiAgICAgICAgIGl0ZW1zID0gKCdhJywgJ2InLCAnYycpCiAgICAgICAgIGRlZmF1bHQgPSAnYScKLSAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHNlbGYudGV4dHZhciwgZGVmYXVsdCwgKml0ZW1zKQorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoc2VsZi5yb290LCBzZWxmLnRleHR2YXIsIGRlZmF1bHQsICppdGVtcykKICAgICAgICAgZm91bmRfZGVmYXVsdCA9IEZhbHNlCiAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbihpdGVtcykpOgogICAgICAgICAgICAgdmFsdWUgPSBvcHRtZW51WydtZW51J10uZW50cnljZ2V0KGksICd2YWx1ZScpCkBAIC0yNDAsNyArMjQ3LDcgQEAKIAogICAgICAgICAjIGRlZmF1bHQgc2hvdWxkbid0IGJlIGluIG1lbnUgaWYgaXQgaXMgbm90IHBhcnQgb2YgdmFsdWVzCiAgICAgICAgIGRlZmF1bHQgPSAnZCcKLSAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KE5vbmUsIHNlbGYudGV4dHZhciwgZGVmYXVsdCwgKml0ZW1zKQorICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoc2VsZi5yb290LCBzZWxmLnRleHR2YXIsIGRlZmF1bHQsICppdGVtcykKICAgICAgICAgY3VyciA9IE5vbmUKICAgICAgICAgaSA9IDAKICAgICAgICAgd2hpbGUgVHJ1ZToKQEAgLTI2OSw3ICsyNzYsNyBAQAogICAgICAgICBkZWYgY2JfdGVzdChpdGVtKToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaXRlbSwgaXRlbXNbMV0pCiAgICAgICAgICAgICBzdWNjZXNzLmFwcGVuZChUcnVlKQotICAgICAgICBvcHRtZW51ID0gdHRrLk9wdGlvbk1lbnUoTm9uZSwgc2VsZi50ZXh0dmFyLCAnYScsIGNvbW1hbmQ9Y2JfdGVzdCwKKyAgICAgICAgb3B0bWVudSA9IHR0ay5PcHRpb25NZW51KHNlbGYucm9vdCwgc2VsZi50ZXh0dmFyLCAnYScsIGNvbW1hbmQ9Y2JfdGVzdCwKICAgICAgICAgICAgICppdGVtcykKICAgICAgICAgb3B0bWVudVsnbWVudSddLmludm9rZSgxKQogICAgICAgICBpZiBub3Qgc3VjY2VzczoKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3RfZnVuY3Rpb25zLnB5CmluZGV4IDE5ODZlNjYuLmM5ZGNmOTcgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9mdW5jdGlvbnMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X2Z1bmN0aW9ucy5weQpAQCAtMSw3ICsxLDE5IEBACiAjIC0qLSBlbmNvZGluZzogdXRmLTggLSotCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB0a2ludGVyCiBmcm9tIHRraW50ZXIgaW1wb3J0IHR0awogCitjbGFzcyBNb2NrVGtBcHA6CisKKyAgICBkZWYgc3BsaXRsaXN0KHNlbGYsIGFyZyk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYXJnLCB0dXBsZSk6CisgICAgICAgICAgICByZXR1cm4gYXJnCisgICAgICAgIHJldHVybiBhcmcuc3BsaXQoJzonKQorCisgICAgZGVmIHdhbnRvYmplY3RzKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisKIGNsYXNzIE1vY2tUY2xPYmoob2JqZWN0KToKICAgICB0eXBlbmFtZSA9ICd0ZXN0JwogCkBAIC0zMTIsMjYgKzMyNCwxMyBAQAogICAgICAgICAgICAgIi1vcHQgezMgMm19IikKIAogCi0gICAgZGVmIHRlc3RfZGljdF9mcm9tX3RjbHR1cGxlKHNlbGYpOgotICAgICAgICBmYWtldHR1cGxlID0gKCctYScsICd7MSAyIDN9JywgJy1zb21ldGhpbmcnLCAnZm9vJykKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZGljdF9mcm9tX3RjbHR1cGxlKGZha2V0dHVwbGUsIEZhbHNlKSwKLSAgICAgICAgICAgIHsnLWEnOiAnezEgMiAzfScsICctc29tZXRoaW5nJzogJ2Zvbyd9KQotCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoZmFrZXR0dXBsZSksCi0gICAgICAgICAgICB7J2EnOiAnezEgMiAzfScsICdzb21ldGhpbmcnOiAnZm9vJ30pCi0KLSAgICAgICAgIyBwYXNzaW5nIGEgdHVwbGUgd2l0aCBhIHNpbmdsZSBpdGVtIHNob3VsZCByZXR1cm4gYW4gZW1wdHkgZGljdCwKLSAgICAgICAgIyBzaW5jZSBpdCB0cmllcyB0byBicmVhayB0aGUgdHVwbGUgYnkgcGFpcnMuCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoKCdzaW5nbGUnLCApKSkKLQotICAgICAgICBzc3BlYyA9IE1vY2tTdGF0ZVNwZWMoJ2EnLCAnYicpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9kaWN0X2Zyb21fdGNsdHVwbGUoKCctYScsIChzc3BlYywgJ3ZhbCcpKSksCi0gICAgICAgICAgICB7J2EnOiBbKCdhJywgJ2InLCAndmFsJyldfSkKLQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fZGljdF9mcm9tX3RjbHR1cGxlKChNb2NrVGNsT2JqKCctcGFkZGluZycpLAotICAgICAgICAgICAgW01vY2tUY2xPYmooJzEnKSwgMiwgTW9ja1RjbE9iaignM20nKV0pKSwKLSAgICAgICAgICAgIHsncGFkZGluZyc6IFsxLCAyLCAnM20nXX0pCisgICAgZGVmIHRlc3RfdGNsb2JqX3RvX3B5KHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgdHRrLl90Y2xvYmpfdG9fcHkoKE1vY2tTdGF0ZVNwZWMoJ2EnLCAnYicpLCAndmFsJykpLAorICAgICAgICAgICAgWygnYScsICdiJywgJ3ZhbCcpXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHR0ay5fdGNsb2JqX3RvX3B5KFtNb2NrVGNsT2JqKCcxJyksIDIsIE1vY2tUY2xPYmooJzNtJyldKSwKKyAgICAgICAgICAgIFsxLCAyLCAnM20nXSkKIAogCiAgICAgZGVmIHRlc3RfbGlzdF9mcm9tX3N0YXRlc3BlYyhzZWxmKToKQEAgLTM1MiwyMCArMzUxLDIyIEBACiAKIAogICAgIGRlZiB0ZXN0X2xpc3RfZnJvbV9sYXlvdXR0dXBsZShzZWxmKToKKyAgICAgICAgdGsgPSBNb2NrVGtBcHAoKQorCiAgICAgICAgICMgZW1wdHkgbGF5b3V0IHR1cGxlCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUoKCkpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLCAoKSkpCiAKICAgICAgICAgIyBzaG9ydGVzdCBsYXlvdXQgdHVwbGUKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSgoJ25hbWUnLCApKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSh0aywgKCduYW1lJywgKSksCiAgICAgICAgICAgICBbKCduYW1lJywge30pXSkKIAogICAgICAgICAjIG5vdCBzbyBpbnRlcmVzdGluZyBsdHVwbGUKICAgICAgICAgc2FtcGxlX2x0dXBsZSA9ICgnbmFtZScsICctb3B0aW9uJywgJ3ZhbHVlJykKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShzYW1wbGVfbHR1cGxlKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSh0aywgc2FtcGxlX2x0dXBsZSksCiAgICAgICAgICAgICBbKCduYW1lJywgeydvcHRpb24nOiAndmFsdWUnfSldKQogCiAgICAgICAgICMgZW1wdHkgY2hpbGRyZW4KLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSgKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSh0aywKICAgICAgICAgICAgICgnc29tZXRoaW5nJywgJy1jaGlsZHJlbicsICgpKSksCiAgICAgICAgICAgICBbKCdzb21ldGhpbmcnLCB7J2NoaWxkcmVuJzogW119KV0KICAgICAgICAgKQpAQCAtMzc4LDcgKzM3OSw3IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgKQogICAgICAgICApCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUobHR1cGxlKSwKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSh0aywgbHR1cGxlKSwKICAgICAgICAgICAgIFsoJ25hbWUnLCB7J29wdGlvbic6ICduaWNlb25lJywgJ2NoaWxkcmVuJzoKICAgICAgICAgICAgICAgICBbKCdvdGhlcm9uZScsIHsnb3RoZXJvcHQnOiAnb3RoZXJ2YWx1ZScsICdjaGlsZHJlbic6CiAgICAgICAgICAgICAgICAgICAgIFsoJ2NoaWxkJywge30pXQpAQCAtMzg3LDI5ICszODgsMzUgQEAKICAgICAgICAgKQogCiAgICAgICAgICMgYmFkIHR1cGxlcwotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsIHRrLAogICAgICAgICAgICAgKCduYW1lJywgJ25vX21pbnVzJykpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlLAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwgdGssCiAgICAgICAgICAgICAoJ25hbWUnLCAnbm9fbWludXMnLCAndmFsdWUnKSkKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdHRrLl9saXN0X2Zyb21fbGF5b3V0dHVwbGUsCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHR0ay5fbGlzdF9mcm9tX2xheW91dHR1cGxlLCB0aywKICAgICAgICAgICAgICgnc29tZXRoaW5nJywgJy1jaGlsZHJlbicpKSAjIG5vIGNoaWxkcmVuCi0gICAgICAgIGltcG9ydCB0a2ludGVyCi0gICAgICAgIGlmIG5vdCB0a2ludGVyLl9kZWZhdWx0X3Jvb3Qgb3IgdGtpbnRlci5fZGVmYXVsdF9yb290LndhbnRvYmplY3RzKCk6Ci0gICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0dGsuX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSwKLSAgICAgICAgICAgICAgICAoJ3NvbWV0aGluZycsICctY2hpbGRyZW4nLCAndmFsdWUnKSkgIyBpbnZhbGlkIGNoaWxkcmVuCiAKIAogICAgIGRlZiB0ZXN0X3ZhbF9vcl9kaWN0KHNlbGYpOgotICAgICAgICBkZWYgZnVuYyhvcHQsIHZhbD1Ob25lKToKKyAgICAgICAgZGVmIGZ1bmMocmVzLCBvcHQ9Tm9uZSwgdmFsPU5vbmUpOgorICAgICAgICAgICAgaWYgb3B0IGlzIE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlcwogICAgICAgICAgICAgaWYgdmFsIGlzIE5vbmU6CiAgICAgICAgICAgICAgICAgcmV0dXJuICJ0ZXN0IHZhbCIKICAgICAgICAgICAgIHJldHVybiAob3B0LCB2YWwpCiAKLSAgICAgICAgb3B0aW9ucyA9IHsndGVzdCc6IE5vbmV9Ci0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdChvcHRpb25zLCBmdW5jKSwgInRlc3QgdmFsIikKKyAgICAgICAgdGsgPSBNb2NrVGtBcHAoKQorICAgICAgICB0ay5jYWxsID0gZnVuYwogCi0gICAgICAgIG9wdGlvbnMgPSB7J3Rlc3QnOiAzfQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fdmFsX29yX2RpY3Qob3B0aW9ucywgZnVuYyksIG9wdGlvbnMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodHRrLl92YWxfb3JfZGljdCh0aywge30sICctdGVzdDozJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgeyd0ZXN0JzogJzMnfSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0dGsuX3ZhbF9vcl9kaWN0KHRrLCB7fSwgKCctdGVzdCcsIDMpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICB7J3Rlc3QnOiAzfSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fdmFsX29yX2RpY3QodGssIHsndGVzdCc6IE5vbmV9LCAneDp5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3QgdmFsJykKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHR0ay5fdmFsX29yX2RpY3QodGssIHsndGVzdCc6IDN9LCAneDp5JyksCisgICAgICAgICAgICAgICAgICAgICAgICAgeyd0ZXN0JzogM30pCiAKIAogICAgIGRlZiB0ZXN0X2NvbnZlcnRfc3RyaW5ndmFsKHNlbGYpOgpkaWZmIC0tZ2l0IGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3N0eWxlLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3N0eWxlLnB5CmluZGV4IDBkYTBlNWQuLjM1Mzc1MzYgMTAwNjQ0Ci0tLSBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF9zdHlsZS5weQorKysgYi9MaWIvdGtpbnRlci90ZXN0L3Rlc3RfdHRrL3Rlc3Rfc3R5bGUucHkKQEAgLTIsMTUgKzIsMTUgQEAKIGltcG9ydCB0a2ludGVyCiBmcm9tIHRraW50ZXIgaW1wb3J0IHR0awogZnJvbSB0ZXN0LnN1cHBvcnQgaW1wb3J0IHJlcXVpcmVzLCBydW5fdW5pdHRlc3QKLQotaW1wb3J0IHRraW50ZXIudGVzdC5zdXBwb3J0IGFzIHN1cHBvcnQKK2Zyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IEFic3RyYWN0VGtUZXN0CiAKIHJlcXVpcmVzKCdndWknKQogCi1jbGFzcyBTdHlsZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgU3R5bGVUZXN0KEFic3RyYWN0VGtUZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYuc3R5bGUgPSB0dGsuU3R5bGUoKQorICAgICAgICBzdXBlcigpLnNldFVwKCkKKyAgICAgICAgc2VsZi5zdHlsZSA9IHR0ay5TdHlsZShzZWxmLnJvb3QpCiAKIAogICAgIGRlZiB0ZXN0X2NvbmZpZ3VyZShzZWxmKToKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgc3R5bGUgPSBzZWxmLnN0eWxlCiAgICAgICAgIHN0eWxlLm1hcCgnVEJ1dHRvbicsIGJhY2tncm91bmQ9WygnYWN0aXZlJywgJ2JhY2tncm91bmQnLCAnYmx1ZScpXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHlsZS5tYXAoJ1RCdXR0b24nLCAnYmFja2dyb3VuZCcpLAotICAgICAgICAgICAgWygnYWN0aXZlJywgJ2JhY2tncm91bmQnLCAnYmx1ZScpXSBpZiBzdHlsZS50ay53YW50b2JqZWN0cygpIGVsc2UKKyAgICAgICAgICAgIFsoJ2FjdGl2ZScsICdiYWNrZ3JvdW5kJywgJ2JsdWUnKV0gaWYgc2VsZi53YW50b2JqZWN0cyBlbHNlCiAgICAgICAgICAgICBbKCdhY3RpdmUgYmFja2dyb3VuZCcsICdibHVlJyldKQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc3R5bGUubWFwKCdUQnV0dG9uJyksIGRpY3QpCiAKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3QvdGVzdF90dGsvdGVzdF93aWRnZXRzLnB5IGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkKaW5kZXggM2FjMTRiZS4uYWZkMzIzMCAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC90ZXN0X3R0ay90ZXN0X3dpZGdldHMucHkKQEAgLTEsMTIgKzEsMTIgQEAKIGltcG9ydCB1bml0dGVzdAogaW1wb3J0IHRraW50ZXIKLWZyb20gdGtpbnRlciBpbXBvcnQgdHRrCitmcm9tIHRraW50ZXIgaW1wb3J0IHR0aywgVGNsRXJyb3IKIGZyb20gdGVzdC5zdXBwb3J0IGltcG9ydCByZXF1aXJlcwogaW1wb3J0IHN5cwogCi1pbXBvcnQgdGtpbnRlci50ZXN0LnN1cHBvcnQgYXMgc3VwcG9ydAogZnJvbSB0a2ludGVyLnRlc3QudGVzdF90dGsudGVzdF9mdW5jdGlvbnMgaW1wb3J0IE1vY2tUY2xPYmoKLWZyb20gdGtpbnRlci50ZXN0LnN1cHBvcnQgaW1wb3J0IHRjbF92ZXJzaW9uLCBnZXRfdGtfcGF0Y2hsZXZlbAorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgKEFic3RyYWN0VGtUZXN0LCB0Y2xfdmVyc2lvbiwgZ2V0X3RrX3BhdGNobGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2ltdWxhdGVfbW91c2VfY2xpY2spCiBmcm9tIHRraW50ZXIudGVzdC53aWRnZXRfdGVzdHMgaW1wb3J0IChhZGRfc3RhbmRhcmRfb3B0aW9ucywgbm9jb252LAogICAgIEFic3RyYWN0V2lkZ2V0VGVzdCwgU3RhbmRhcmRPcHRpb25zVGVzdHMsIEludGVnZXJTaXplVGVzdHMsIFBpeGVsU2l6ZVRlc3RzLAogICAgIHNldFVwTW9kdWxlKQpAQCAtMjAsNyArMjAsNyBAQAogICAgICAgICB3aWRnZXQgPSBzZWxmLmNyZWF0ZSgpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwod2lkZ2V0WydjbGFzcyddLCAnJykKICAgICAgICAgZXJybXNnPSdhdHRlbXB0IHRvIGNoYW5nZSByZWFkLW9ubHkgb3B0aW9uJwotICAgICAgICBpZiBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDYsIDApOiAjIGFjdHVhbGx5IHRoaXMgd2FzIGNoYW5nZWQgaW4gOC42YjMKKyAgICAgICAgaWYgZ2V0X3RrX3BhdGNobGV2ZWwoKSA8ICg4LCA2LCAwLCAnYmV0YScsIDMpOgogICAgICAgICAgICAgZXJybXNnPSdBdHRlbXB0IHRvIGNoYW5nZSByZWFkLW9ubHkgb3B0aW9uJwogICAgICAgICBzZWxmLmNoZWNrSW52YWxpZFBhcmFtKHdpZGdldCwgJ2NsYXNzJywgJ0ZvbycsIGVycm1zZz1lcnJtc2cpCiAgICAgICAgIHdpZGdldDIgPSBzZWxmLmNyZWF0ZShjbGFzc189J0ZvbycpCkBAIC01MywxOSArNTMsMTUgQEAKICAgICAgICAgcGFzcwogCiAKLWNsYXNzIFdpZGdldFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgV2lkZ2V0VGVzdChBYnN0cmFjdFRrVGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgogICAgICIiIlRlc3RzIG1ldGhvZHMgYXZhaWxhYmxlIGluIGV2ZXJ5IHR0ayB3aWRnZXQuIiIiCiAKICAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQotICAgICAgICBzZWxmLndpZGdldCA9IHR0ay5CdXR0b24od2lkdGg9MCwgdGV4dD0iVGV4dCIpCisgICAgICAgIHN1cGVyKCkuc2V0VXAoKQorICAgICAgICBzZWxmLndpZGdldCA9IHR0ay5CdXR0b24oc2VsZi5yb290LCB3aWR0aD0wLCB0ZXh0PSJUZXh0IikKICAgICAgICAgc2VsZi53aWRnZXQucGFjaygpCiAgICAgICAgIHNlbGYud2lkZ2V0LndhaXRfdmlzaWJpbGl0eSgpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYud2lkZ2V0LmRlc3Ryb3koKQotICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQotCiAKICAgICBkZWYgdGVzdF9pZGVudGlmeShzZWxmKToKICAgICAgICAgc2VsZi53aWRnZXQudXBkYXRlX2lkbGV0YXNrcygpCkBAIC0xMjgsNyArMTI0LDcgQEAKICAgICAgICAgJ3dpZHRoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuRnJhbWUoc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC0xNDEsNyArMTM3LDcgQEAKICAgICAgICAgJ3RleHQnLCAndW5kZXJsaW5lJywgJ3dpZHRoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuTGFiZWxGcmFtZShzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfbGFiZWxhbmNob3Ioc2VsZik6CkBAIC0xNjEsOCArMTU3LDggQEAKIGNsYXNzIEFic3RyYWN0TGFiZWxUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCk6CiAKICAgICBkZWYgY2hlY2tJbWFnZVBhcmFtKHNlbGYsIHdpZGdldCwgbmFtZSk6Ci0gICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKCdpbWFnZTEnKQotICAgICAgICBpbWFnZTIgPSB0a2ludGVyLlBob3RvSW1hZ2UoJ2ltYWdlMicpCisgICAgICAgIGltYWdlID0gdGtpbnRlci5QaG90b0ltYWdlKG1hc3Rlcj1zZWxmLnJvb3QsIG5hbWU9J2ltYWdlMScpCisgICAgICAgIGltYWdlMiA9IHRraW50ZXIuUGhvdG9JbWFnZShtYXN0ZXI9c2VsZi5yb290LCBuYW1lPSdpbWFnZTInKQogICAgICAgICBzZWxmLmNoZWNrUGFyYW0od2lkZ2V0LCBuYW1lLCBpbWFnZSwgZXhwZWN0ZWQ9KCdpbWFnZTEnLCkpCiAgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsIG5hbWUsICdpbWFnZTEnLCBleHBlY3RlZD0oJ2ltYWdlMScsKSkKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgbmFtZSwgKGltYWdlLCksIGV4cGVjdGVkPSgnaW1hZ2UxJywpKQpAQCAtMTk5LDcgKzE5NSw3IEBACiAgICAgKQogICAgIF9jb252X3BpeGVscyA9IG5vY29udgogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLkxhYmVsKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9mb250KHNlbGYpOgpAQCAtMjE2LDcgKzIxMiw3IEBACiAgICAgICAgICd1bmRlcmxpbmUnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5CdXR0b24oc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2RlZmF1bHQoc2VsZik6CkBAIC0yMjUsNyArMjIxLDcgQEAKIAogICAgIGRlZiB0ZXN0X2ludm9rZShzZWxmKToKICAgICAgICAgc3VjY2VzcyA9IFtdCi0gICAgICAgIGJ0biA9IHR0ay5CdXR0b24oY29tbWFuZD1sYW1iZGE6IHN1Y2Nlc3MuYXBwZW5kKDEpKQorICAgICAgICBidG4gPSB0dGsuQnV0dG9uKHNlbGYucm9vdCwgY29tbWFuZD1sYW1iZGE6IHN1Y2Nlc3MuYXBwZW5kKDEpKQogICAgICAgICBidG4uaW52b2tlKCkKICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1Y2Nlc3MpCiAKQEAgLTI0MSw3ICsyMzcsNyBAQAogICAgICAgICAndW5kZXJsaW5lJywgJ3ZhcmlhYmxlJywgJ3dpZHRoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuQ2hlY2tidXR0b24oc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X29mZnZhbHVlKHNlbGYpOgpAQCAtMjU4LDcgKzI1NCw3IEBACiAgICAgICAgICAgICBzdWNjZXNzLmFwcGVuZCgxKQogICAgICAgICAgICAgcmV0dXJuICJjYiB0ZXN0IGNhbGxlZCIKIAotICAgICAgICBjYnRuID0gdHRrLkNoZWNrYnV0dG9uKGNvbW1hbmQ9Y2JfdGVzdCkKKyAgICAgICAgY2J0biA9IHR0ay5DaGVja2J1dHRvbihzZWxmLnJvb3QsIGNvbW1hbmQ9Y2JfdGVzdCkKICAgICAgICAgIyB0aGUgdmFyaWFibGUgYXV0b21hdGljYWxseSBjcmVhdGVkIGJ5IHR0ay5DaGVja2J1dHRvbiBpcyBhY3R1YWxseQogICAgICAgICAjIHVuZGVmaW5lZCB0aWxsIHdlIGludm9rZSB0aGUgQ2hlY2tidXR0b24KICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYnRuLnN0YXRlKCksICgnYWx0ZXJuYXRlJywgKSkKQEAgLTI4OSwxNSArMjg1LDkgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCi0gICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQogICAgICAgICBzZWxmLmNvbWJvID0gc2VsZi5jcmVhdGUoKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLmNvbWJvLmRlc3Ryb3koKQotICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQotICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKLQotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5Db21ib2JveChzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfaGVpZ2h0KHNlbGYpOgpAQCAtMzYyLDcgKzM1Miw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD0oJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodXInKSkKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHNlbGYuY29tYm8sICd2YWx1ZXMnLCAoJ21vbicsICd0dWUnLCAnd2VkJywgJ3RodXInKSkKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHNlbGYuY29tYm8sICd2YWx1ZXMnLCAoNDIsIDMuMTQsICcnLCAnYW55IHN0cmluZycpKQotICAgICAgICBzZWxmLmNoZWNrUGFyYW0oc2VsZi5jb21ibywgJ3ZhbHVlcycsICcnLCBleHBlY3RlZD0oKSkKKyAgICAgICAgc2VsZi5jaGVja1BhcmFtKHNlbGYuY29tYm8sICd2YWx1ZXMnLCAnJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPScnIGlmIGdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNSwgMTApIGVsc2UgKCkpCiAKICAgICAgICAgc2VsZi5jb21ib1sndmFsdWVzJ10gPSBbJ2EnLCAxLCAnYyddCiAKQEAgLTQwNSw3ICszOTYsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLmNvbWJvLmN1cnJlbnQsICcnKQogCiAgICAgICAgICMgdGVzdGluZyBjcmVhdGluZyBjb21ib2JveCB3aXRoIGVtcHR5IHN0cmluZyBpbiB2YWx1ZXMKLSAgICAgICAgY29tYm8yID0gdHRrLkNvbWJvYm94KHZhbHVlcz1bMSwgMiwgJyddKQorICAgICAgICBjb21ibzIgPSB0dGsuQ29tYm9ib3goc2VsZi5yb290LCB2YWx1ZXM9WzEsIDIsICcnXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjb21ibzJbJ3ZhbHVlcyddLAogICAgICAgICAgICAgICAgICAgICAgICAgICgnMScsICcyJywgJycpIGlmIHNlbGYud2FudG9iamVjdHMgZWxzZSAnMSAyIHt9JykKICAgICAgICAgY29tYm8yLmRlc3Ryb3koKQpAQCAtNDIzLDE1ICs0MTQsOSBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCiAgICAgICAgIHNlbGYuZW50cnkgPSBzZWxmLmNyZWF0ZSgpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuZW50cnkuZGVzdHJveSgpCi0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0gICAgICAgIHN1cGVyKCkudGVhckRvd24oKQotCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLkVudHJ5KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9pbnZhbGlkY29tbWFuZChzZWxmKToKQEAgLTQ2MCwxMCArNDQ1LDcgQEAKIAogCiAgICAgZGVmIHRlc3RfYmJveChzZWxmKToKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5lbnRyeS5iYm94KDApKSwgNCkKLSAgICAgICAgZm9yIGl0ZW0gaW4gc2VsZi5lbnRyeS5iYm94KDApOgotICAgICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGl0ZW0sIGludCkKLQorICAgICAgICBzZWxmLmFzc2VydElzQm91bmRpbmdCb3goc2VsZi5lbnRyeS5iYm94KDApKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLmVudHJ5LmJib3gsICdub2luZGV4JykKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5lbnRyeS5iYm94LCBOb25lKQogCkBAIC01NjEsMjIgKzU0MywxNiBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCiAgICAgICAgIHNlbGYucGFuZWQgPSBzZWxmLmNyZWF0ZSgpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYucGFuZWQuZGVzdHJveSgpCi0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0gICAgICAgIHN1cGVyKCkudGVhckRvd24oKQotCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLlBhbmVkV2luZG93KHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9vcmllbnQoc2VsZik6CiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIod2lkZ2V0WydvcmllbnQnXSksICd2ZXJ0aWNhbCcpCiAgICAgICAgIGVycm1zZz0nYXR0ZW1wdCB0byBjaGFuZ2UgcmVhZC1vbmx5IG9wdGlvbicKLSAgICAgICAgaWYgZ2V0X3RrX3BhdGNobGV2ZWwoKSA8ICg4LCA2LCAwKTogIyBhY3R1YWxseSB0aGlzIHdhcyBjaGFuZ2VkIGluIDguNmIzCisgICAgICAgIGlmIGdldF90a19wYXRjaGxldmVsKCkgPCAoOCwgNiwgMCwgJ2JldGEnLCAzKToKICAgICAgICAgICAgIGVycm1zZz0nQXR0ZW1wdCB0byBjaGFuZ2UgcmVhZC1vbmx5IG9wdGlvbicKICAgICAgICAgc2VsZi5jaGVja0ludmFsaWRQYXJhbSh3aWRnZXQsICdvcmllbnQnLCAnaG9yaXpvbnRhbCcsCiAgICAgICAgICAgICAgICAgZXJybXNnPWVycm1zZykKQEAgLTU5MSwxMyArNTY3LDEzIEBACiAgICAgICAgIGxhYmVsLmRlc3Ryb3koKQogICAgICAgICBjaGlsZC5kZXN0cm95KCkKICAgICAgICAgIyBhbm90aGVyIGF0dGVtcHQKLSAgICAgICAgbGFiZWwgPSB0dGsuTGFiZWwoKQorICAgICAgICBsYWJlbCA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCiAgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKGxhYmVsKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmFkZCwgY2hpbGQpCiAgICAgICAgIGNoaWxkLmRlc3Ryb3koKQogICAgICAgICBsYWJlbC5kZXN0cm95KCkKIAotICAgICAgICBnb29kX2NoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgZ29vZF9jaGlsZCA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYucGFuZWQuYWRkKGdvb2RfY2hpbGQpCiAgICAgICAgICMgcmUtYWRkaW5nIGEgY2hpbGQgaXMgbm90IGFjY2VwdGVkCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuYWRkLCBnb29kX2NoaWxkKQpAQCAtNjE1LDcgKzU5MSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuZm9yZ2V0LCBOb25lKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLnBhbmVkLmZvcmdldCwgMCkKIAotICAgICAgICBzZWxmLnBhbmVkLmFkZCh0dGsuTGFiZWwoKSkKKyAgICAgICAgc2VsZi5wYW5lZC5hZGQodHRrLkxhYmVsKHNlbGYucm9vdCkpCiAgICAgICAgIHNlbGYucGFuZWQuZm9yZ2V0KDApCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuZm9yZ2V0LCAwKQogCkBAIC02MjUsOSArNjAxLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5pbnNlcnQsIDAsIE5vbmUpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuaW5zZXJ0LCAwLCAwKQogCi0gICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKCkKLSAgICAgICAgY2hpbGQyID0gdHRrLkxhYmVsKCkKLSAgICAgICAgY2hpbGQzID0gdHRrLkxhYmVsKCkKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoc2VsZi5yb290KQorICAgICAgICBjaGlsZDIgPSB0dGsuTGFiZWwoc2VsZi5yb290KQorICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoc2VsZi5yb290KQogCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYucGFuZWQuaW5zZXJ0LCAwLCBjaGlsZCkKIApAQCAtNjU4LDcgKzYzNCw3IEBACiAgICAgZGVmIHRlc3RfcGFuZShzZWxmKToKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5wYW5lZC5wYW5lLCAwKQogCi0gICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKCkKKyAgICAgICAgY2hpbGQgPSB0dGsuTGFiZWwoc2VsZi5yb290KQogICAgICAgICBzZWxmLnBhbmVkLmFkZChjaGlsZCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKHNlbGYucGFuZWQucGFuZSgwKSwgZGljdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnBhbmVkLnBhbmUoMCwgd2VpZ2h0PU5vbmUpLApAQCAtNzAzLDcgKzY3OSw3IEBACiAgICAgICAgICd1bmRlcmxpbmUnLCAndmFsdWUnLCAndmFyaWFibGUnLCAnd2lkdGgnLAogICAgICkKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5SYWRpb2J1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfdmFsdWUoc2VsZik6CkBAIC03MTYsOSArNjkyLDExIEBACiAgICAgICAgICAgICBzdWNjZXNzLmFwcGVuZCgxKQogICAgICAgICAgICAgcmV0dXJuICJjYiB0ZXN0IGNhbGxlZCIKIAotICAgICAgICBteXZhciA9IHRraW50ZXIuSW50VmFyKCkKLSAgICAgICAgY2J0biA9IHR0ay5SYWRpb2J1dHRvbihjb21tYW5kPWNiX3Rlc3QsIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0wKQotICAgICAgICBjYnRuMiA9IHR0ay5SYWRpb2J1dHRvbihjb21tYW5kPWNiX3Rlc3QsIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0xKQorICAgICAgICBteXZhciA9IHRraW50ZXIuSW50VmFyKHNlbGYucm9vdCkKKyAgICAgICAgY2J0biA9IHR0ay5SYWRpb2J1dHRvbihzZWxmLnJvb3QsIGNvbW1hbmQ9Y2JfdGVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJpYWJsZT1teXZhciwgdmFsdWU9MCkKKyAgICAgICAgY2J0bjIgPSB0dGsuUmFkaW9idXR0b24oc2VsZi5yb290LCBjb21tYW5kPWNiX3Rlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlPW15dmFyLCB2YWx1ZT0xKQogCiAgICAgICAgIGlmIHNlbGYud2FudG9iamVjdHM6CiAgICAgICAgICAgICBjb252ID0gbGFtYmRhIHg6IHgKQEAgLTc1MSw3ICs3MjksNyBAQAogICAgICAgICAndW5kZXJsaW5lJywgJ3dpZHRoJywKICAgICApCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuTWVudWJ1dHRvbihzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfZGlyZWN0aW9uKHNlbGYpOgpAQCAtNzc3LDE3ICs3NTUsMTEgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCi0gICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQogICAgICAgICBzZWxmLnNjYWxlID0gc2VsZi5jcmVhdGUoKQogICAgICAgICBzZWxmLnNjYWxlLnBhY2soKQogICAgICAgICBzZWxmLnNjYWxlLnVwZGF0ZSgpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuc2NhbGUuZGVzdHJveSgpCi0gICAgICAgIHN1cHBvcnQucm9vdF93aXRoZHJhdygpCi0gICAgICAgIHN1cGVyKCkudGVhckRvd24oKQotCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLlNjYWxlKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKICAgICBkZWYgdGVzdF9mcm9tKHNlbGYpOgpAQCAtODU5LDcgKzgzMSw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY29udihzZWxmLnNjYWxlLmdldCgpKSwgbWluKQogCiAgICAgICAgICMgY2hhbmdpbmcgZGlyZWN0bHkgdGhlIHZhcmlhYmxlIGRvZXNuJ3QgaW1wb3NlIHRoaXMgbGltaXRhdGlvbiB0aG8KLSAgICAgICAgdmFyID0gdGtpbnRlci5Eb3VibGVWYXIoKQorICAgICAgICB2YXIgPSB0a2ludGVyLkRvdWJsZVZhcihzZWxmLnJvb3QpCiAgICAgICAgIHNlbGYuc2NhbGVbJ3ZhcmlhYmxlJ10gPSB2YXIKICAgICAgICAgdmFyLnNldChtYXggKyA1KQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNvbnYoc2VsZi5zY2FsZS5nZXQoKSksIHZhci5nZXQoKSkKQEAgLTg4OSw3ICs4NjEsNyBAQAogICAgIF9jb252X3BpeGVscyA9IG5vY29udgogICAgIGRlZmF1bHRfb3JpZW50ID0gJ2hvcml6b250YWwnCiAKLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuUHJvZ3Jlc3NiYXIoc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X2xlbmd0aChzZWxmKToKQEAgLTkyMyw3ICs4OTUsNyBAQAogICAgICkKICAgICBkZWZhdWx0X29yaWVudCA9ICd2ZXJ0aWNhbCcKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5TY3JvbGxiYXIoc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC05MzUsMjEgKzkwNywxMyBAQAogCiAgICAgZGVmIHNldFVwKHNlbGYpOgogICAgICAgICBzdXBlcigpLnNldFVwKCkKLSAgICAgICAgc3VwcG9ydC5yb290X2RlaWNvbmlmeSgpCiAgICAgICAgIHNlbGYubmIgPSBzZWxmLmNyZWF0ZShwYWRkaW5nPTApCi0gICAgICAgIHNlbGYuY2hpbGQxID0gdHRrLkxhYmVsKCkKLSAgICAgICAgc2VsZi5jaGlsZDIgPSB0dGsuTGFiZWwoKQorICAgICAgICBzZWxmLmNoaWxkMSA9IHR0ay5MYWJlbChzZWxmLnJvb3QpCisgICAgICAgIHNlbGYuY2hpbGQyID0gdHRrLkxhYmVsKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5uYi5hZGQoc2VsZi5jaGlsZDEsIHRleHQ9J2EnKQogICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMiwgdGV4dD0nYicpCiAKLSAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIHNlbGYuY2hpbGQxLmRlc3Ryb3koKQotICAgICAgICBzZWxmLmNoaWxkMi5kZXN0cm95KCkKLSAgICAgICAgc2VsZi5uYi5kZXN0cm95KCkKLSAgICAgICAgc3VwcG9ydC5yb290X3dpdGhkcmF3KCkKLSAgICAgICAgc3VwZXIoKS50ZWFyRG93bigpCi0KLSAgICBkZWYgX2NyZWF0ZShzZWxmLCAqKmt3YXJncyk6CisgICAgZGVmIGNyZWF0ZShzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgIHJldHVybiB0dGsuTm90ZWJvb2soc2VsZi5yb290LCAqKmt3YXJncykKIAogICAgIGRlZiB0ZXN0X3RhYl9pZGVudGlmaWVycyhzZWxmKToKQEAgLTk4OCw3ICs5NTIsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0a2ludGVyLlRjbEVycm9yLCBzZWxmLm5iLmhpZGUsICdoaScpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuaGlkZSwgTm9uZSkKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5hZGQsIE5vbmUpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHRraW50ZXIuVGNsRXJyb3IsIHNlbGYubmIuYWRkLCB0dGsuTGFiZWwoKSwKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5hZGQsIHR0ay5MYWJlbChzZWxmLnJvb3QpLAogICAgICAgICAgICAgdW5rbm93bj0nb3B0aW9uJykKIAogICAgICAgICB0YWJzID0gc2VsZi5uYi50YWJzKCkKQEAgLTk5Niw3ICs5NjAsNyBAQAogICAgICAgICBzZWxmLm5iLmFkZChzZWxmLmNoaWxkMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnRhYnMoKSwgdGFicykKIAotICAgICAgICBjaGlsZCA9IHR0ay5MYWJlbCgpCisgICAgICAgIGNoaWxkID0gdHRrLkxhYmVsKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5uYi5hZGQoY2hpbGQsIHRleHQ9J2MnKQogICAgICAgICB0YWJzID0gc2VsZi5uYi50YWJzKCkKIApAQCAtMTA1NCw3ICsxMDE4LDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXModGtpbnRlci5UY2xFcnJvciwgc2VsZi5uYi5pbnNlcnQsIC0xLCB0YWJzWzBdKQogCiAgICAgICAgICMgbmV3IHRhYgotICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoKQorICAgICAgICBjaGlsZDMgPSB0dGsuTGFiZWwoc2VsZi5yb290KQogICAgICAgICBzZWxmLm5iLmluc2VydCgxLCBjaGlsZDMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi5uYi50YWJzKCksICh0YWJzWzBdLCBzdHIoY2hpbGQzKSwgdGFic1sxXSkpCiAgICAgICAgIHNlbGYubmIuZm9yZ2V0KGNoaWxkMykKQEAgLTExMjAsNyArMTA4NCw3IEBACiAKICAgICAgICAgc2VsZi5uYi5zZWxlY3QoMCkKIAotICAgICAgICBzdXBwb3J0LnNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYubmIsIDUsIDUpCisgICAgICAgIHNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYubmIsIDUsIDUpCiAgICAgICAgIHNlbGYubmIuZm9jdXNfZm9yY2UoKQogICAgICAgICBzZWxmLm5iLmV2ZW50X2dlbmVyYXRlKCc8Q29udHJvbC1UYWI+JykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLm5iLnNlbGVjdCgpLCBzdHIoc2VsZi5jaGlsZDIpKQpAQCAtMTEzNCw3ICsxMDk4LDcgQEAKICAgICAgICAgc2VsZi5uYi50YWIoc2VsZi5jaGlsZDEsIHRleHQ9J2EnLCB1bmRlcmxpbmU9MCkKICAgICAgICAgc2VsZi5uYi5lbmFibGVfdHJhdmVyc2FsKCkKICAgICAgICAgc2VsZi5uYi5mb2N1c19mb3JjZSgpCi0gICAgICAgIHN1cHBvcnQuc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi5uYiwgNSwgNSkKKyAgICAgICAgc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi5uYiwgNSwgNSkKICAgICAgICAgaWYgc3lzLnBsYXRmb3JtID09ICdkYXJ3aW4nOgogICAgICAgICAgICAgc2VsZi5uYi5ldmVudF9nZW5lcmF0ZSgnPE9wdGlvbi1hPicpCiAgICAgICAgIGVsc2U6CkBAIC0xMTUyLDE1ICsxMTE2LDkgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgc3VwZXIoKS5zZXRVcCgpCi0gICAgICAgIHN1cHBvcnQucm9vdF9kZWljb25pZnkoKQogICAgICAgICBzZWxmLnR2ID0gc2VsZi5jcmVhdGUocGFkZGluZz0wKQogCi0gICAgZGVmIHRlYXJEb3duKHNlbGYpOgotICAgICAgICBzZWxmLnR2LmRlc3Ryb3koKQotICAgICAgICBzdXBwb3J0LnJvb3Rfd2l0aGRyYXcoKQotICAgICAgICBzdXBlcigpLnRlYXJEb3duKCkKLQotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5UcmVldmlldyhzZWxmLnJvb3QsICoqa3dhcmdzKQogCiAgICAgZGVmIHRlc3RfY29sdW1ucyhzZWxmKToKQEAgLTExNjgsNyArMTEyNiw4IEBACiAgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsICdjb2x1bW5zJywgJ2EgYiBjJywKICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkPSgnYScsICdiJywgJ2MnKSkKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgJ2NvbHVtbnMnLCAoJ2EnLCAnYicsICdjJykpCi0gICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsICdjb2x1bW5zJywgKCkpCisgICAgICAgIHNlbGYuY2hlY2tQYXJhbSh3aWRnZXQsICdjb2x1bW5zJywgKCksCisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZD0nJyBpZiBnZXRfdGtfcGF0Y2hsZXZlbCgpIDwgKDgsIDUsIDEwKSBlbHNlICgpKQogCiAgICAgZGVmIHRlc3RfZGlzcGxheWNvbHVtbnMoc2VsZik6CiAgICAgICAgIHdpZGdldCA9IHNlbGYuY3JlYXRlKCkKQEAgLTEyMTYsMTIgKzExNzUsNyBAQAogICAgICAgICBzZWxmLmFzc2VydFRydWUoY2hpbGRyZW4pCiAKICAgICAgICAgYmJveCA9IHNlbGYudHYuYmJveChjaGlsZHJlblswXSkKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oYmJveCksIDQpCi0gICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiYm94LCB0dXBsZSkKLSAgICAgICAgZm9yIGl0ZW0gaW4gYmJveDoKLSAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0ZW0sIGludCk6Ci0gICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnZhbGlkIGJvdW5kaW5nIGJveDogJXMiICUgYmJveCkKLSAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBzZWxmLmFzc2VydElzQm91bmRpbmdCb3goYmJveCkKIAogICAgICAgICAjIGNvbXBhcmUgd2lkdGggaW4gYmJveGVzCiAgICAgICAgIHNlbGYudHZbJ2NvbHVtbnMnXSA9IFsndGVzdCddCkBAIC0xNDAxLDcgKzEzNTUsNyBAQAogCiAgICAgZGVmIHRlc3RfaGVhZGluZ19jYWxsYmFjayhzZWxmKToKICAgICAgICAgZGVmIHNpbXVsYXRlX2hlYWRpbmdfY2xpY2soeCwgeSk6Ci0gICAgICAgICAgICBzdXBwb3J0LnNpbXVsYXRlX21vdXNlX2NsaWNrKHNlbGYudHYsIHgsIHkpCisgICAgICAgICAgICBzaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLnR2LCB4LCB5KQogICAgICAgICAgICAgc2VsZi50di51cGRhdGUoKQogCiAgICAgICAgIHN1Y2Nlc3MgPSBbXSAjIG5vIHN1Y2Nlc3MgZm9yIG5vdwpAQCAtMTU5MCw3ICsxNTQ0LDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihwb3NfeSksIDIpICMgaXRlbTEgYW5kIGl0ZW0yIHkgcG9zCiAgICAgICAgIGZvciB5IGluIHBvc195OgotICAgICAgICAgICAgc3VwcG9ydC5zaW11bGF0ZV9tb3VzZV9jbGljayhzZWxmLnR2LCAwLCB5KQorICAgICAgICAgICAgc2ltdWxhdGVfbW91c2VfY2xpY2soc2VsZi50diwgMCwgeSkKIAogICAgICAgICAjIGJ5IG5vdyB0aGVyZSBzaG91bGQgYmUgNCB0aGluZ3MgaW4gdGhlIGV2ZW50cyBsaXN0LCBzaW5jZSBlYWNoCiAgICAgICAgICMgaXRlbSBoYWQgYSBiaW5kIGZvciB0d28gZXZlbnRzIHRoYXQgd2VyZSBzaW11bGF0ZWQgYWJvdmUKQEAgLTE2MTEsNiArMTU2NSwyMSBAQAogICAgICAgICAgICAgJ2JsdWUnKQogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2Uoc2VsZi50di50YWdfY29uZmlndXJlKCd0ZXN0JyksIGRpY3QpCiAKKyAgICBkZWYgdGVzdF90YWdfaGFzKHNlbGYpOgorICAgICAgICBpdGVtMSA9IHNlbGYudHYuaW5zZXJ0KCcnLCAnZW5kJywgdGV4dD0nSXRlbSAxJywgdGFncz1bJ3RhZzEnXSkKKyAgICAgICAgaXRlbTIgPSBzZWxmLnR2Lmluc2VydCgnJywgJ2VuZCcsIHRleHQ9J0l0ZW0gMicsIHRhZ3M9Wyd0YWcyJ10pCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi50di50YWdfaGFzKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUY2xFcnJvciwgc2VsZi50di50YWdfaGFzLCAndGFnMScsICdub24tZXhpc3RpbmcnKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi50di50YWdfaGFzKCd0YWcxJywgaXRlbTEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYudGFnX2hhcygndGFnMScsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShzZWxmLnR2LnRhZ19oYXMoJ3RhZzInLCBpdGVtMSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLnR2LnRhZ19oYXMoJ3RhZzInLCBpdGVtMikpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi50di50YWdfaGFzKCd0YWczJywgaXRlbTEpKQorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHNlbGYudHYudGFnX2hhcygndGFnMycsIGl0ZW0yKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLnR2LnRhZ19oYXMoJ3RhZzEnKSwgKGl0ZW0xLCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2VsZi50di50YWdfaGFzKCd0YWcyJyksIChpdGVtMiwpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHNlbGYudHYudGFnX2hhcygndGFnMycpLCAoKSkKKwogCiBAYWRkX3N0YW5kYXJkX29wdGlvbnMoU3RhbmRhcmRUdGtPcHRpb25zVGVzdHMpCiBjbGFzcyBTZXBhcmF0b3JUZXN0KEFic3RyYWN0V2lkZ2V0VGVzdCwgdW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTYyMCw3ICsxNTg5LDcgQEAKICAgICApCiAgICAgZGVmYXVsdF9vcmllbnQgPSAnaG9yaXpvbnRhbCcKIAotICAgIGRlZiBfY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKKyAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKICAgICAgICAgcmV0dXJuIHR0ay5TZXBhcmF0b3Ioc2VsZi5yb290LCAqKmt3YXJncykKIAogCkBAIC0xNjMxLDcgKzE2MDAsNyBAQAogICAgICAgICAjICdzdGF0ZSc/CiAgICAgKQogCi0gICAgZGVmIF9jcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgorICAgIGRlZiBjcmVhdGUoc2VsZiwgKiprd2FyZ3MpOgogICAgICAgICByZXR1cm4gdHRrLlNpemVncmlwKHNlbGYucm9vdCwgKiprd2FyZ3MpCiAKIHRlc3RzX2d1aSA9ICgKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3Rlc3Qvd2lkZ2V0X3Rlc3RzLnB5IGIvTGliL3RraW50ZXIvdGVzdC93aWRnZXRfdGVzdHMucHkKaW5kZXggYTk4MjBhNy4uNzc5NTM4ZCAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGVzdC93aWRnZXRfdGVzdHMucHkKKysrIGIvTGliL3RraW50ZXIvdGVzdC93aWRnZXRfdGVzdHMucHkKQEAgLTMsOSArMyw5IEBACiBpbXBvcnQgdW5pdHRlc3QKIGltcG9ydCBzeXMKIGltcG9ydCB0a2ludGVyCi1mcm9tIHRraW50ZXIudHRrIGltcG9ydCBzZXR1cF9tYXN0ZXIsIFNjYWxlCi1mcm9tIHRraW50ZXIudGVzdC5zdXBwb3J0IGltcG9ydCAodGNsX3ZlcnNpb24sIHJlcXVpcmVzX3RjbCwgZ2V0X3RrX3BhdGNobGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGl4ZWxzX2NvbnYsIHRjbF9vYmpfZXEpCitmcm9tIHRraW50ZXIudHRrIGltcG9ydCBTY2FsZQorZnJvbSB0a2ludGVyLnRlc3Quc3VwcG9ydCBpbXBvcnQgKEFic3RyYWN0VGtUZXN0LCB0Y2xfdmVyc2lvbiwgcmVxdWlyZXNfdGNsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF90a19wYXRjaGxldmVsLCBwaXhlbHNfY29udiwgdGNsX29ial9lcSkKIGltcG9ydCB0ZXN0LnN1cHBvcnQKIAogCkBAIC0yMiwyMSArMjIsMjUgQEAKIAogX3NlbnRpbmVsID0gb2JqZWN0KCkKIAotY2xhc3MgQWJzdHJhY3RXaWRnZXRUZXN0OgorY2xhc3MgQWJzdHJhY3RXaWRnZXRUZXN0KEFic3RyYWN0VGtUZXN0KToKICAgICBfY29udl9waXhlbHMgPSBzdGF0aWNtZXRob2QocGl4ZWxzX3JvdW5kKQogICAgIF9jb252X3BhZF9waXhlbHMgPSBOb25lCi0gICAgd2FudG9iamVjdHMgPSBUcnVlCisgICAgX3N0cmluZ2lmeSA9IEZhbHNlCiAKLSAgICBkZWYgc2V0VXAoc2VsZik6Ci0gICAgICAgIHNlbGYucm9vdCA9IHNldHVwX21hc3RlcigpCi0gICAgICAgIHNlbGYuc2NhbGluZyA9IGZsb2F0KHNlbGYucm9vdC5jYWxsKCd0aycsICdzY2FsaW5nJykpCi0gICAgICAgIGlmIG5vdCBzZWxmLnJvb3Qud2FudG9iamVjdHMoKToKLSAgICAgICAgICAgIHNlbGYud2FudG9iamVjdHMgPSBGYWxzZQorICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzY2FsaW5nKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2NhbGluZworICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBzZWxmLl9zY2FsaW5nID0gZmxvYXQoc2VsZi5yb290LmNhbGwoJ3RrJywgJ3NjYWxpbmcnKSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9zY2FsaW5nCiAKLSAgICBkZWYgY3JlYXRlKHNlbGYsICoqa3dhcmdzKToKLSAgICAgICAgd2lkZ2V0ID0gc2VsZi5fY3JlYXRlKCoqa3dhcmdzKQotICAgICAgICBzZWxmLmFkZENsZWFudXAod2lkZ2V0LmRlc3Ryb3kpCi0gICAgICAgIHJldHVybiB3aWRnZXQKKyAgICBkZWYgX3N0cihzZWxmLCB2YWx1ZSk6CisgICAgICAgIGlmIG5vdCBzZWxmLl9zdHJpbmdpZnkgYW5kIHNlbGYud2FudG9iamVjdHMgYW5kIHRjbF92ZXJzaW9uID49ICg4LCA2KToKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZQorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCB0dXBsZSk6CisgICAgICAgICAgICByZXR1cm4gJyAnLmpvaW4obWFwKHNlbGYuX3N0ciwgdmFsdWUpKQorICAgICAgICByZXR1cm4gc3RyKHZhbHVlKQogCiAgICAgZGVmIGFzc2VydEVxdWFsMihzZWxmLCBhY3R1YWwsIGV4cGVjdGVkLCBtc2c9Tm9uZSwgZXE9b2JqZWN0Ll9fZXFfXyk6CiAgICAgICAgIGlmIGVxKGFjdHVhbCwgZXhwZWN0ZWQpOgpAQCAtNTAsNyArNTQsNyBAQAogICAgICAgICAgICAgZXhwZWN0ZWQgPSB2YWx1ZQogICAgICAgICBpZiBjb252OgogICAgICAgICAgICAgZXhwZWN0ZWQgPSBjb252KGV4cGVjdGVkKQotICAgICAgICBpZiBub3Qgc2VsZi53YW50b2JqZWN0czoKKyAgICAgICAgaWYgc2VsZi5fc3RyaW5naWZ5IG9yIG5vdCBzZWxmLndhbnRvYmplY3RzOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgdHVwbGUpOgogICAgICAgICAgICAgICAgIGV4cGVjdGVkID0gdGtpbnRlci5fam9pbihleHBlY3RlZCkKICAgICAgICAgICAgIGVsc2U6CkBAIC0xODIsNyArMTg2LDcgQEAKICAgICAgICAgICAgICAgICBlcnJtc2c9ZXJybXNnKQogCiAgICAgZGVmIGNoZWNrSW1hZ2VQYXJhbShzZWxmLCB3aWRnZXQsIG5hbWUpOgotICAgICAgICBpbWFnZSA9IHRraW50ZXIuUGhvdG9JbWFnZSgnaW1hZ2UxJykKKyAgICAgICAgaW1hZ2UgPSB0a2ludGVyLlBob3RvSW1hZ2UobWFzdGVyPXNlbGYucm9vdCwgbmFtZT0naW1hZ2UxJykKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgbmFtZSwgaW1hZ2UsIGNvbnY9c3RyKQogICAgICAgICBzZWxmLmNoZWNrSW52YWxpZFBhcmFtKHdpZGdldCwgbmFtZSwgJ3NwYW0nLAogICAgICAgICAgICAgICAgIGVycm1zZz0naW1hZ2UgInNwYW0iIGRvZXNuXCd0IGV4aXN0JykKQEAgLTE5MSw2ICsxOTUsMTYgQEAKICAgICBkZWYgY2hlY2tWYXJpYWJsZVBhcmFtKHNlbGYsIHdpZGdldCwgbmFtZSwgdmFyKToKICAgICAgICAgc2VsZi5jaGVja1BhcmFtKHdpZGdldCwgbmFtZSwgdmFyLCBjb252PXN0cikKIAorICAgIGRlZiBhc3NlcnRJc0JvdW5kaW5nQm94KHNlbGYsIGJib3gpOgorICAgICAgICBzZWxmLmFzc2VydElzTm90Tm9uZShiYm94KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYmJveCwgdHVwbGUpCisgICAgICAgIGlmIGxlbihiYm94KSAhPSA0OgorICAgICAgICAgICAgc2VsZi5mYWlsKCdJbnZhbGlkIGJvdW5kaW5nIGJveDogJXInICUgKGJib3gsKSkKKyAgICAgICAgZm9yIGl0ZW0gaW4gYmJveDoKKyAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGl0ZW0sIGludCk6CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdJbnZhbGlkIGJvdW5kaW5nIGJveDogJXInICUgKGJib3gsKSkKKyAgICAgICAgICAgICAgICBicmVhaworCiAKIGNsYXNzIFN0YW5kYXJkT3B0aW9uc1Rlc3RzOgogICAgIFNUQU5EQVJEX09QVElPTlMgPSAoCkBAIC0zOTMsNyArNDA3LDcgQEAKIAogICAgIGRlZiB0ZXN0X3RleHR2YXJpYWJsZShzZWxmKToKICAgICAgICAgd2lkZ2V0ID0gc2VsZi5jcmVhdGUoKQotICAgICAgICB2YXIgPSB0a2ludGVyLlN0cmluZ1ZhcigpCisgICAgICAgIHZhciA9IHRraW50ZXIuU3RyaW5nVmFyKHNlbGYucm9vdCkKICAgICAgICAgc2VsZi5jaGVja1ZhcmlhYmxlUGFyYW0od2lkZ2V0LCAndGV4dHZhcmlhYmxlJywgdmFyKQogCiAgICAgZGVmIHRlc3RfdHJvdWdoY29sb3Ioc2VsZik6CkBAIC00NTQsNyArNDY4LDcgQEAKIAogICAgIGRlZiB0ZXN0X3ZhcmlhYmxlKHNlbGYpOgogICAgICAgICB3aWRnZXQgPSBzZWxmLmNyZWF0ZSgpCi0gICAgICAgIHZhciA9IHRraW50ZXIuRG91YmxlVmFyKCkKKyAgICAgICAgdmFyID0gdGtpbnRlci5Eb3VibGVWYXIoc2VsZi5yb290KQogICAgICAgICBzZWxmLmNoZWNrVmFyaWFibGVQYXJhbSh3aWRnZXQsICd2YXJpYWJsZScsIHZhcikKIAogCmRpZmYgLS1naXQgYS9MaWIvdGtpbnRlci90aXgucHkgYi9MaWIvdGtpbnRlci90aXgucHkKaW5kZXggMTMxYWEwNi4uYzFjZGZhNyAxMDA2NDQKLS0tIGEvTGliL3RraW50ZXIvdGl4LnB5CisrKyBiL0xpYi90a2ludGVyL3RpeC5weQpAQCAtMjcsNyArMjcsNyBAQAogIwogCiBmcm9tIHRraW50ZXIgaW1wb3J0ICoKLWZyb20gdGtpbnRlciBpbXBvcnQgX2ZsYXR0ZW4sIF9jbmZtZXJnZSwgX2RlZmF1bHRfcm9vdAorZnJvbSB0a2ludGVyIGltcG9ydCBfY25mbWVyZ2UsIF9kZWZhdWx0X3Jvb3QKIAogIyBXQVJOSU5HIC0gVGtWZXJzaW9uIGlzIGEgbGltaXRlZCBwcmVjaXNpb24gZmxvYXRpbmcgcG9pbnQgbnVtYmVyCiBpZiBUa1ZlcnNpb24gPCAzLjk5OToKZGlmZiAtLWdpdCBhL0xpYi90a2ludGVyL3R0ay5weSBiL0xpYi90a2ludGVyL3R0ay5weQppbmRleCBjYTkwMjczLi4yNDRmYjNkIDEwMDY0NAotLS0gYS9MaWIvdGtpbnRlci90dGsucHkKKysrIGIvTGliL3RraW50ZXIvdHRrLnB5CkBAIC0yNiw3ICsyNiw3IEBACiAgICAgICAgICAgICJ0Y2xvYmpzX3RvX3B5IiwgInNldHVwX21hc3RlciJdCiAKIGltcG9ydCB0a2ludGVyCi1mcm9tIHRraW50ZXIgaW1wb3J0IF9mbGF0dGVuLCBfam9pbiwgX3N0cmluZ2lmeQorZnJvbSB0a2ludGVyIGltcG9ydCBfZmxhdHRlbiwgX2pvaW4sIF9zdHJpbmdpZnksIF9zcGxpdGRpY3QKIAogIyBWZXJpZnkgaWYgVGsgaXMgbmV3IGVub3VnaCB0byBub3QgbmVlZCB0aGUgVGlsZSBwYWNrYWdlCiBfUkVRVUlSRV9USUxFID0gVHJ1ZSBpZiB0a2ludGVyLlRrVmVyc2lvbiA8IDguNSBlbHNlIEZhbHNlCkBAIC0yNDAsMjEgKzI0MCw2IEBACiAKICAgICByZXR1cm4gJ1xuJy5qb2luKHNjcmlwdCkKIAotZGVmIF9kaWN0X2Zyb21fdGNsdHVwbGUodHR1cGxlLCBjdXRfbWludXM9VHJ1ZSk6Ci0gICAgIiIiQnJlYWsgdHVwbGUgaW4gcGFpcnMsIGZvcm1hdCBpdCBwcm9wZXJseSwgdGhlbiBidWlsZCB0aGUgcmV0dXJuCi0gICAgZGljdC4gSWYgY3V0X21pbnVzIGlzIFRydWUsIHRoZSBzdXBwb3NlZCAnLScgcHJlZml4aW5nIG9wdGlvbnMgd2lsbAotICAgIGJlIHJlbW92ZWQuCi0KLSAgICB0dHVwbGUgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBlbGVtZW50cy4iIiIKLSAgICBvcHRfc3RhcnQgPSAxIGlmIGN1dF9taW51cyBlbHNlIDAKLQotICAgIHJldGRpY3QgPSB7fQotICAgIGl0ID0gaXRlcih0dHVwbGUpCi0gICAgZm9yIG9wdCwgdmFsIGluIHppcChpdCwgaXQpOgotICAgICAgICByZXRkaWN0W3N0cihvcHQpW29wdF9zdGFydDpdXSA9IHZhbAotCi0gICAgcmV0dXJuIHRjbG9ianNfdG9fcHkocmV0ZGljdCkKLQogZGVmIF9saXN0X2Zyb21fc3RhdGVzcGVjKHN0dXBsZSk6CiAgICAgIiIiQ29uc3RydWN0IGEgbGlzdCBmcm9tIHRoZSBnaXZlbiBzdGF0ZXNwZWMgdHVwbGUgYWNjb3JkaW5nIHRvIHRoZQogICAgIGFjY2VwdGVkIHN0YXRlc3BlYyBhY2NlcHRlZCBieSBfZm9ybWF0X21hcGRpY3QuIiIiCkBAIC0yNzIsOSArMjU3LDEwIEBACiAgICAgaXQgPSBpdGVyKG52YWwpCiAgICAgcmV0dXJuIFtfZmxhdHRlbihzcGVjKSBmb3Igc3BlYyBpbiB6aXAoaXQsIGl0KV0KIAotZGVmIF9saXN0X2Zyb21fbGF5b3V0dHVwbGUobHR1cGxlKToKK2RlZiBfbGlzdF9mcm9tX2xheW91dHR1cGxlKHRrLCBsdHVwbGUpOgogICAgICIiIkNvbnN0cnVjdCBhIGxpc3QgZnJvbSB0aGUgdHVwbGUgcmV0dXJuZWQgYnkgdHRrOjpsYXlvdXQsIHRoaXMgaXMKICAgICBzb21ld2hhdCB0aGUgcmV2ZXJzZSBvZiBfZm9ybWF0X2xheW91dGxpc3QuIiIiCisgICAgbHR1cGxlID0gdGsuc3BsaXRsaXN0KGx0dXBsZSkKICAgICByZXMgPSBbXQogCiAgICAgaW5keCA9IDAKQEAgLTI5MywzMiArMjc5LDI3IEBACiAgICAgICAgICAgICBpbmR4ICs9IDIKIAogICAgICAgICAgICAgaWYgb3B0ID09ICdjaGlsZHJlbic6Ci0gICAgICAgICAgICAgICAgaWYgKHRraW50ZXIuX2RlZmF1bHRfcm9vdCBhbmQKLSAgICAgICAgICAgICAgICAgICAgbm90IHRraW50ZXIuX2RlZmF1bHRfcm9vdC53YW50b2JqZWN0cygpKToKLSAgICAgICAgICAgICAgICAgICAgdmFsID0gdGtpbnRlci5fZGVmYXVsdF9yb290LnNwbGl0bGlzdCh2YWwpCi0gICAgICAgICAgICAgICAgdmFsID0gX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSh2YWwpCisgICAgICAgICAgICAgICAgdmFsID0gX2xpc3RfZnJvbV9sYXlvdXR0dXBsZSh0aywgdmFsKQogCiAgICAgICAgICAgICBvcHRzW29wdF0gPSB2YWwKIAogICAgIHJldHVybiByZXMKIAotZGVmIF92YWxfb3JfZGljdChvcHRpb25zLCBmdW5jLCAqYXJncyk6Ci0gICAgIiIiRm9ybWF0IG9wdGlvbnMgdGhlbiBjYWxsIGZ1bmMgd2l0aCBhcmdzIGFuZCBvcHRpb25zIGFuZCByZXR1cm4KK2RlZiBfdmFsX29yX2RpY3QodGssIG9wdGlvbnMsICphcmdzKToKKyAgICAiIiJGb3JtYXQgb3B0aW9ucyB0aGVuIGNhbGwgVGsgY29tbWFuZCB3aXRoIGFyZ3MgYW5kIG9wdGlvbnMgYW5kIHJldHVybgogICAgIHRoZSBhcHByb3ByaWF0ZSByZXN1bHQuCiAKLSAgICBJZiBubyBvcHRpb24gaXMgc3BlY2lmaWVkLCBhIGRpY3QgaXMgcmV0dXJuZWQuIElmIGEgb3B0aW9uIGlzCisgICAgSWYgbm8gb3B0aW9uIGlzIHNwZWNpZmllZCwgYSBkaWN0IGlzIHJldHVybmVkLiBJZiBhbiBvcHRpb24gaXMKICAgICBzcGVjaWZpZWQgd2l0aCB0aGUgTm9uZSB2YWx1ZSwgdGhlIHZhbHVlIGZvciB0aGF0IG9wdGlvbiBpcyByZXR1cm5lZC4KICAgICBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbiBqdXN0IHNldHMgdGhlIHBhc3NlZCBvcHRpb25zIGFuZCB0aGUgY2FsbGVyCiAgICAgc2hvdWxkbid0IGJlIGV4cGVjdGluZyBhIHJldHVybiB2YWx1ZSBhbnl3YXkuIiIiCiAgICAgb3B0aW9ucyA9IF9mb3JtYXRfb3B0ZGljdChvcHRpb25zKQotICAgIHJlcyA9IGZ1bmMoKihhcmdzICsgb3B0aW9ucykpCisgICAgcmVzID0gdGsuY2FsbCgqKGFyZ3MgKyBvcHRpb25zKSkKIAogICAgIGlmIGxlbihvcHRpb25zKSAlIDI6ICMgb3B0aW9uIHNwZWNpZmllZCB3aXRob3V0IGEgdmFsdWUsIHJldHVybiBpdHMgdmFsdWUKICAgICAgICAgcmV0dXJuIHJlcwogCi0gICAgaWYgdGtpbnRlci5fZGVmYXVsdF9yb290OgotICAgICAgICByZXMgPSB0a2ludGVyLl9kZWZhdWx0X3Jvb3Quc3BsaXRsaXN0KHJlcykKLSAgICByZXR1cm4gX2RpY3RfZnJvbV90Y2x0dXBsZShyZXMpCisgICAgcmV0dXJuIF9zcGxpdGRpY3QodGssIHJlcywgY29udj1fdGNsb2JqX3RvX3B5KQogCiBkZWYgX2NvbnZlcnRfc3RyaW5ndmFsKHZhbHVlKToKICAgICAiIiJDb252ZXJ0cyBhIHZhbHVlIHRvLCBob3BlZnVsbHksIGEgbW9yZSBhcHByb3ByaWF0ZSBQeXRob24gb2JqZWN0LiIiIgpAQCAtMzM4LDIwICszMTksMjQgQEAKICAgICAgICAgICAgIHggPSBpbnQoeCkKICAgICByZXR1cm4geAogCitkZWYgX3RjbG9ial90b19weSh2YWwpOgorICAgICIiIlJldHVybiB2YWx1ZSBjb252ZXJ0ZWQgZnJvbSBUY2wgb2JqZWN0IHRvIFB5dGhvbiBvYmplY3QuIiIiCisgICAgaWYgdmFsIGFuZCBoYXNhdHRyKHZhbCwgJ19fbGVuX18nKSBhbmQgbm90IGlzaW5zdGFuY2UodmFsLCBzdHIpOgorICAgICAgICBpZiBnZXRhdHRyKHZhbFswXSwgJ3R5cGVuYW1lJywgTm9uZSkgPT0gJ1N0YXRlU3BlYyc6CisgICAgICAgICAgICB2YWwgPSBfbGlzdF9mcm9tX3N0YXRlc3BlYyh2YWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB2YWwgPSBsaXN0KG1hcChfY29udmVydF9zdHJpbmd2YWwsIHZhbCkpCisKKyAgICBlbGlmIGhhc2F0dHIodmFsLCAndHlwZW5hbWUnKTogIyBzb21lIG90aGVyIChzaW5nbGUpIFRjbCBvYmplY3QKKyAgICAgICAgdmFsID0gX2NvbnZlcnRfc3RyaW5ndmFsKHZhbCkKKworICAgIHJldHVybiB2YWwKKwogZGVmIHRjbG9ianNfdG9fcHkoYWRpY3QpOgogICAgICIiIlJldHVybnMgYWRpY3Qgd2l0aCBpdHMgdmFsdWVzIGNvbnZlcnRlZCBmcm9tIFRjbCBvYmplY3RzIHRvIFB5dGhvbgogICAgIG9iamVjdHMuIiIiCiAgICAgZm9yIG9wdCwgdmFsIGluIGFkaWN0Lml0ZW1zKCk6Ci0gICAgICAgIGlmIHZhbCBhbmQgaGFzYXR0cih2YWwsICdfX2xlbl9fJykgYW5kIG5vdCBpc2luc3RhbmNlKHZhbCwgc3RyKToKLSAgICAgICAgICAgIGlmIGdldGF0dHIodmFsWzBdLCAndHlwZW5hbWUnLCBOb25lKSA9PSAnU3RhdGVTcGVjJzoKLSAgICAgICAgICAgICAgICB2YWwgPSBfbGlzdF9mcm9tX3N0YXRlc3BlYyh2YWwpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHZhbCA9IGxpc3QobWFwKF9jb252ZXJ0X3N0cmluZ3ZhbCwgdmFsKSkKLQotICAgICAgICBlbGlmIGhhc2F0dHIodmFsLCAndHlwZW5hbWUnKTogIyBzb21lIG90aGVyIChzaW5nbGUpIFRjbCBvYmplY3QKLSAgICAgICAgICAgIHZhbCA9IF9jb252ZXJ0X3N0cmluZ3ZhbCh2YWwpCi0KLSAgICAgICAgYWRpY3Rbb3B0XSA9IHZhbAorICAgICAgICBhZGljdFtvcHRdID0gX3RjbG9ial90b19weSh2YWwpCiAKICAgICByZXR1cm4gYWRpY3QKIApAQCAtMzk2LDcgKzM4MSw3IEBACiAgICAgICAgIGEgc2VxdWVuY2UgaWRlbnRpZnlpbmcgdGhlIHZhbHVlIGZvciB0aGF0IG9wdGlvbi4iIiIKICAgICAgICAgaWYgcXVlcnlfb3B0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAga3dbcXVlcnlfb3B0XSA9IE5vbmUKLSAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl9uYW1lLCAiY29uZmlndXJlIiwgc3R5bGUpCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoc2VsZi50aywga3csIHNlbGYuX25hbWUsICJjb25maWd1cmUiLCBzdHlsZSkKIAogCiAgICAgZGVmIG1hcChzZWxmLCBzdHlsZSwgcXVlcnlfb3B0PU5vbmUsICoqa3cpOgpAQCAtNDExLDggKzM5NiwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIF9saXN0X2Zyb21fc3RhdGVzcGVjKHNlbGYudGsuc3BsaXRsaXN0KAogICAgICAgICAgICAgICAgIHNlbGYudGsuY2FsbChzZWxmLl9uYW1lLCAibWFwIiwgc3R5bGUsICctJXMnICUgcXVlcnlfb3B0KSkpCiAKLSAgICAgICAgcmV0dXJuIF9kaWN0X2Zyb21fdGNsdHVwbGUoCi0gICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgIm1hcCIsIHN0eWxlLCAqKF9mb3JtYXRfbWFwZGljdChrdykpKSkKKyAgICAgICAgcmV0dXJuIF9zcGxpdGRpY3QoCisgICAgICAgICAgICBzZWxmLnRrLAorICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJtYXAiLCBzdHlsZSwgKl9mb3JtYXRfbWFwZGljdChrdykpLAorICAgICAgICAgICAgY29udj1fdGNsb2JqX3RvX3B5KQogCiAKICAgICBkZWYgbG9va3VwKHNlbGYsIHN0eWxlLCBvcHRpb24sIHN0YXRlPU5vbmUsIGRlZmF1bHQ9Tm9uZSk6CkBAIC00NjYsOCArNDUzLDggQEAKICAgICAgICAgICAgIGxzcGVjID0gIm51bGwiICMgY291bGQgYmUgYW55IG90aGVyIHdvcmQsIGJ1dCB0aGlzIG1heSBtYWtlIHNlbnNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHdoZW4gY2FsbGluZyBsYXlvdXQoc3R5bGUpIGxhdGVyCiAKLSAgICAgICAgcmV0dXJuIF9saXN0X2Zyb21fbGF5b3V0dHVwbGUoc2VsZi50ay5zcGxpdGxpc3QoCi0gICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fbmFtZSwgImxheW91dCIsIHN0eWxlLCBsc3BlYykpKQorICAgICAgICByZXR1cm4gX2xpc3RfZnJvbV9sYXlvdXR0dXBsZShzZWxmLnRrLAorICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX25hbWUsICJsYXlvdXQiLCBzdHlsZSwgbHNwZWMpKQogCiAKICAgICBkZWYgZWxlbWVudF9jcmVhdGUoc2VsZiwgZWxlbWVudG5hbWUsIGV0eXBlLCAqYXJncywgKiprdyk6CkBAIC01ODYsNyArNTczLDcgQEAKICAgICAgICAgaWYgcmV0IGFuZCBjYWxsYmFjazoKICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygqYXJncywgKiprdykKIAotICAgICAgICByZXR1cm4gYm9vbChyZXQpCisgICAgICAgIHJldHVybiByZXQKIAogCiAgICAgZGVmIHN0YXRlKHNlbGYsIHN0YXRlc3BlYz1Ob25lKToKQEAgLTY5NCw3ICs2ODEsNyBAQAogICAgICAgICAiIiJGb3JjZSByZXZhbGlkYXRpb24sIGluZGVwZW5kZW50IG9mIHRoZSBjb25kaXRpb25zIHNwZWNpZmllZAogICAgICAgICBieSB0aGUgdmFsaWRhdGUgb3B0aW9uLiBSZXR1cm5zIEZhbHNlIGlmIHZhbGlkYXRpb24gZmFpbHMsIFRydWUKICAgICAgICAgaWYgaXQgc3VjY2VlZHMuIFNldHMgb3IgY2xlYXJzIHRoZSBpbnZhbGlkIHN0YXRlIGFjY29yZGluZ2x5LiIiIgotICAgICAgICByZXR1cm4gYm9vbChzZWxmLnRrLmdldGJvb2xlYW4oc2VsZi50ay5jYWxsKHNlbGYuX3csICJ2YWxpZGF0ZSIpKSkKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0Ym9vbGVhbihzZWxmLnRrLmNhbGwoc2VsZi5fdywgInZhbGlkYXRlIikpCiAKIAogY2xhc3MgQ29tYm9ib3goRW50cnkpOgpAQCAtOTA3LDcgKzg5NCw3IEBACiAgICAgICAgIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiIiIgogICAgICAgICBpZiBvcHRpb24gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBrd1tvcHRpb25dID0gTm9uZQotICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KGt3LCBzZWxmLnRrLmNhbGwsIHNlbGYuX3csICJ0YWIiLCB0YWJfaWQpCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoc2VsZi50aywga3csIHNlbGYuX3csICJ0YWIiLCB0YWJfaWQpCiAKIAogICAgIGRlZiB0YWJzKHNlbGYpOgpAQCAtOTg0LDcgKzk3MSw3IEBACiAgICAgICAgIE90aGVyd2lzZSwgc2V0cyB0aGUgb3B0aW9ucyB0byB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMuIiIiCiAgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCi0gICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgInBhbmUiLCBwYW5lKQorICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KHNlbGYudGssIGt3LCBzZWxmLl93LCAicGFuZSIsIHBhbmUpCiAKIAogICAgIGRlZiBzYXNocG9zKHNlbGYsIGluZGV4LCBuZXdwb3M9Tm9uZSk6CkBAIC0xMjIzLDcgKzEyMTAsNyBAQAogICAgICAgICBPdGhlcndpc2UsIHNldHMgdGhlIG9wdGlvbnMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWVzLiIiIgogICAgICAgICBpZiBvcHRpb24gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBrd1tvcHRpb25dID0gTm9uZQotICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KGt3LCBzZWxmLnRrLmNhbGwsIHNlbGYuX3csICJjb2x1bW4iLCBjb2x1bW4pCisgICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoc2VsZi50aywga3csIHNlbGYuX3csICJjb2x1bW4iLCBjb2x1bW4pCiAKIAogICAgIGRlZiBkZWxldGUoc2VsZiwgKml0ZW1zKToKQEAgLTEyNDQsNyArMTIzMSw3IEBACiAgICAgZGVmIGV4aXN0cyhzZWxmLCBpdGVtKToKICAgICAgICAgIiIiUmV0dXJucyBUcnVlIGlmIHRoZSBzcGVjaWZpZWQgaXRlbSBpcyBwcmVzZW50IGluIHRoZSB0cmVlLAogICAgICAgICBGYWxzZSBvdGhlcndpc2UuIiIiCi0gICAgICAgIHJldHVybiBib29sKHNlbGYudGsuZ2V0Ym9vbGVhbihzZWxmLnRrLmNhbGwoc2VsZi5fdywgImV4aXN0cyIsIGl0ZW0pKSkKKyAgICAgICAgcmV0dXJuIHNlbGYudGsuZ2V0Ym9vbGVhbihzZWxmLnRrLmNhbGwoc2VsZi5fdywgImV4aXN0cyIsIGl0ZW0pKQogCiAKICAgICBkZWYgZm9jdXMoc2VsZiwgaXRlbT1Ob25lKToKQEAgLTEyODIsNyArMTI2OSw3IEBACiAgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCiAKLSAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChrdywgc2VsZi50ay5jYWxsLCBzZWxmLl93LCAnaGVhZGluZycsIGNvbHVtbikKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChzZWxmLnRrLCBrdywgc2VsZi5fdywgJ2hlYWRpbmcnLCBjb2x1bW4pCiAKIAogICAgIGRlZiBpZGVudGlmeShzZWxmLCBjb21wb25lbnQsIHgsIHkpOgpAQCAtMTM2MSw3ICsxMzQ4LDcgQEAKICAgICAgICAgdmFsdWVzIGFzIGdpdmVuIGJ5IGt3LiIiIgogICAgICAgICBpZiBvcHRpb24gaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBrd1tvcHRpb25dID0gTm9uZQotICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KGt3LCBzZWxmLnRrLmNhbGwsIHNlbGYuX3csICJpdGVtIiwgaXRlbSkKKyAgICAgICAgcmV0dXJuIF92YWxfb3JfZGljdChzZWxmLnRrLCBrdywgc2VsZi5fdywgIml0ZW0iLCBpdGVtKQogCiAKICAgICBkZWYgbW92ZShzZWxmLCBpdGVtLCBwYXJlbnQsIGluZGV4KToKQEAgLTE0MjksMTMgKzE0MTYsMTYgQEAKIAogCiAgICAgZGVmIHNldChzZWxmLCBpdGVtLCBjb2x1bW49Tm9uZSwgdmFsdWU9Tm9uZSk6Ci0gICAgICAgICIiIldpdGggb25lIGFyZ3VtZW50LCByZXR1cm5zIGEgZGljdGlvbmFyeSBvZiBjb2x1bW4vdmFsdWUgcGFpcnMKLSAgICAgICAgZm9yIHRoZSBzcGVjaWZpZWQgaXRlbS4gV2l0aCB0d28gYXJndW1lbnRzLCByZXR1cm5zIHRoZSBjdXJyZW50Ci0gICAgICAgIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgY29sdW1uLiBXaXRoIHRocmVlIGFyZ3VtZW50cywgc2V0cyB0aGUKKyAgICAgICAgIiIiUXVlcnkgb3Igc2V0IHRoZSB2YWx1ZSBvZiBnaXZlbiBpdGVtLgorCisgICAgICAgIFdpdGggb25lIGFyZ3VtZW50LCByZXR1cm4gYSBkaWN0aW9uYXJ5IG9mIGNvbHVtbi92YWx1ZSBwYWlycworICAgICAgICBmb3IgdGhlIHNwZWNpZmllZCBpdGVtLiBXaXRoIHR3byBhcmd1bWVudHMsIHJldHVybiB0aGUgY3VycmVudAorICAgICAgICB2YWx1ZSBvZiB0aGUgc3BlY2lmaWVkIGNvbHVtbi4gV2l0aCB0aHJlZSBhcmd1bWVudHMsIHNldCB0aGUKICAgICAgICAgdmFsdWUgb2YgZ2l2ZW4gY29sdW1uIGluIGdpdmVuIGl0ZW0gdG8gdGhlIHNwZWNpZmllZCB2YWx1ZS4iIiIKICAgICAgICAgcmVzID0gc2VsZi50ay5jYWxsKHNlbGYuX3csICJzZXQiLCBpdGVtLCBjb2x1bW4sIHZhbHVlKQogICAgICAgICBpZiBjb2x1bW4gaXMgTm9uZSBhbmQgdmFsdWUgaXMgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBfZGljdF9mcm9tX3RjbHR1cGxlKHNlbGYudGsuc3BsaXRsaXN0KHJlcyksIEZhbHNlKQorICAgICAgICAgICAgcmV0dXJuIF9zcGxpdGRpY3Qoc2VsZi50aywgcmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3V0X21pbnVzPUZhbHNlLCBjb252PV90Y2xvYmpfdG9fcHkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByZXR1cm4gcmVzCiAKQEAgLTE0NTYsNyArMTQ0Niw3IEBACiAgICAgICAgIHZhbHVlcyBmb3IgdGhlIGdpdmVuIHRhZ25hbWUuIiIiCiAgICAgICAgIGlmIG9wdGlvbiBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGt3W29wdGlvbl0gPSBOb25lCi0gICAgICAgIHJldHVybiBfdmFsX29yX2RpY3Qoa3csIHNlbGYudGsuY2FsbCwgc2VsZi5fdywgInRhZyIsICJjb25maWd1cmUiLAorICAgICAgICByZXR1cm4gX3ZhbF9vcl9kaWN0KHNlbGYudGssIGt3LCBzZWxmLl93LCAidGFnIiwgImNvbmZpZ3VyZSIsCiAgICAgICAgICAgICB0YWduYW1lKQogCiAKQEAgLTE0NjYsNyArMTQ1NiwxMSBAQAogICAgICAgICBhbGwgaXRlbXMgd2hpY2ggaGF2ZSB0aGUgc3BlY2lmaWVkIHRhZy4KIAogICAgICAgICAqIEF2YWlsYWJpbGl0eTogVGsgOC42IiIiCi0gICAgICAgIHJldHVybiBzZWxmLnRrLmdldGJvb2xlYW4oCisgICAgICAgIGlmIGl0ZW0gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRrLnNwbGl0bGlzdCgKKyAgICAgICAgICAgICAgICBzZWxmLnRrLmNhbGwoc2VsZi5fdywgInRhZyIsICJoYXMiLCB0YWduYW1lKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRrLmdldGJvb2xlYW4oCiAgICAgICAgICAgICAgICAgc2VsZi50ay5jYWxsKHNlbGYuX3csICJ0YWciLCAiaGFzIiwgdGFnbmFtZSwgaXRlbSkpCiAKIApkaWZmIC0tZ2l0IGEvTGliL3Rva2VuLnB5IGIvTGliL3Rva2VuLnB5CmluZGV4IDMxZmFlMGEuLjc0NzBjOGMgMTAwNjQ0Ci0tLSBhL0xpYi90b2tlbi5weQorKysgYi9MaWIvdG9rZW4ucHkKQEAgLTkzLDcgKzkzLDcgQEAKICAgICAgICAgb3V0RmlsZU5hbWUgPSBhcmdzWzFdCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4oaW5GaWxlTmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDEpCiAgICAgbGluZXMgPSBmcC5yZWFkKCkuc3BsaXQoIlxuIikKQEAgLTExMiw3ICsxMTIsNyBAQAogICAgICMgbG9hZCB0aGUgb3V0cHV0IHNrZWxldG9uIGZyb20gdGhlIHRhcmdldDoKICAgICB0cnk6CiAgICAgICAgIGZwID0gb3BlbihvdXRGaWxlTmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDIpCiAgICAgZm9ybWF0ID0gZnAucmVhZCgpLnNwbGl0KCJcbiIpCkBAIC0xMjksNyArMTI5LDcgQEAKICAgICBmb3JtYXRbc3RhcnQ6ZW5kXSA9IGxpbmVzCiAgICAgdHJ5OgogICAgICAgICBmcCA9IG9wZW4ob3V0RmlsZU5hbWUsICd3JykKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJJL08gZXJyb3I6ICVzXG4iICUgc3RyKGVycikpCiAgICAgICAgIHN5cy5leGl0KDQpCiAgICAgZnAud3JpdGUoIlxuIi5qb2luKGZvcm1hdCkpCmRpZmYgLS1naXQgYS9MaWIvdG9rZW5pemUucHkgYi9MaWIvdG9rZW5pemUucHkKaW5kZXggNTMwNGRlNS4uNGQ5M2E4MyAxMDA2NDQKLS0tIGEvTGliL3Rva2VuaXplLnB5CisrKyBiL0xpYi90b2tlbml6ZS5weQpAQCAtMjQsNyArMjQsNyBAQAogX19jcmVkaXRzX18gPSAoJ0d2UiwgRVNSLCBUaW0gUGV0ZXJzLCBUaG9tYXMgV291dGVycywgRnJlZCBEcmFrZSwgJwogICAgICAgICAgICAgICAgJ1NraXAgTW9udGFuYXJvLCBSYXltb25kIEhldHRpbmdlciwgVHJlbnQgTmVsc29uLCAnCiAgICAgICAgICAgICAgICAnTWljaGFlbCBGb29yZCcpCi1pbXBvcnQgYnVpbHRpbnMKK2Zyb20gYnVpbHRpbnMgaW1wb3J0IG9wZW4gYXMgX2J1aWx0aW5fb3BlbgogZnJvbSBjb2RlY3MgaW1wb3J0IGxvb2t1cCwgQk9NX1VURjgKIGltcG9ydCBjb2xsZWN0aW9ucwogZnJvbSBpbyBpbXBvcnQgVGV4dElPV3JhcHBlcgpAQCAtMjQ0LDYgKzI0NCw4IEBACiAKICAgICBkZWYgdW50b2tlbml6ZShzZWxmLCBpdGVyYWJsZSk6CiAgICAgICAgIGl0ID0gaXRlcihpdGVyYWJsZSkKKyAgICAgICAgaW5kZW50cyA9IFtdCisgICAgICAgIHN0YXJ0bGluZSA9IEZhbHNlCiAgICAgICAgIGZvciB0IGluIGl0OgogICAgICAgICAgICAgaWYgbGVuKHQpID09IDI6CiAgICAgICAgICAgICAgICAgc2VsZi5jb21wYXQodCwgaXQpCkBAIC0yNTQsNiArMjU2LDIxIEBACiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIHRva190eXBlID09IEVORE1BUktFUjoKICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaWYgdG9rX3R5cGUgPT0gSU5ERU5UOgorICAgICAgICAgICAgICAgIGluZGVudHMuYXBwZW5kKHRva2VuKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIHRva190eXBlID09IERFREVOVDoKKyAgICAgICAgICAgICAgICBpbmRlbnRzLnBvcCgpCisgICAgICAgICAgICAgICAgc2VsZi5wcmV2X3Jvdywgc2VsZi5wcmV2X2NvbCA9IGVuZAorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBlbGlmIHRva190eXBlIGluIChORVdMSU5FLCBOTCk6CisgICAgICAgICAgICAgICAgc3RhcnRsaW5lID0gVHJ1ZQorICAgICAgICAgICAgZWxpZiBzdGFydGxpbmUgYW5kIGluZGVudHM6CisgICAgICAgICAgICAgICAgaW5kZW50ID0gaW5kZW50c1stMV0KKyAgICAgICAgICAgICAgICBpZiBzdGFydFsxXSA+PSBsZW4oaW5kZW50KToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50b2tlbnMuYXBwZW5kKGluZGVudCkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wcmV2X2NvbCA9IGxlbihpbmRlbnQpCisgICAgICAgICAgICAgICAgc3RhcnRsaW5lID0gRmFsc2UKICAgICAgICAgICAgIHNlbGYuYWRkX3doaXRlc3BhY2Uoc3RhcnQpCiAgICAgICAgICAgICBzZWxmLnRva2Vucy5hcHBlbmQodG9rZW4pCiAgICAgICAgICAgICBzZWxmLnByZXZfcm93LCBzZWxmLnByZXZfY29sID0gZW5kCkBAIC00MzQsMTIgKzQ1MSwxNiBAQAogICAgICIiIk9wZW4gYSBmaWxlIGluIHJlYWQgb25seSBtb2RlIHVzaW5nIHRoZSBlbmNvZGluZyBkZXRlY3RlZCBieQogICAgIGRldGVjdF9lbmNvZGluZygpLgogICAgICIiIgotICAgIGJ1ZmZlciA9IGJ1aWx0aW5zLm9wZW4oZmlsZW5hbWUsICdyYicpCi0gICAgZW5jb2RpbmcsIGxpbmVzID0gZGV0ZWN0X2VuY29kaW5nKGJ1ZmZlci5yZWFkbGluZSkKLSAgICBidWZmZXIuc2VlaygwKQotICAgIHRleHQgPSBUZXh0SU9XcmFwcGVyKGJ1ZmZlciwgZW5jb2RpbmcsIGxpbmVfYnVmZmVyaW5nPVRydWUpCi0gICAgdGV4dC5tb2RlID0gJ3InCi0gICAgcmV0dXJuIHRleHQKKyAgICBidWZmZXIgPSBfYnVpbHRpbl9vcGVuKGZpbGVuYW1lLCAncmInKQorICAgIHRyeToKKyAgICAgICAgZW5jb2RpbmcsIGxpbmVzID0gZGV0ZWN0X2VuY29kaW5nKGJ1ZmZlci5yZWFkbGluZSkKKyAgICAgICAgYnVmZmVyLnNlZWsoMCkKKyAgICAgICAgdGV4dCA9IFRleHRJT1dyYXBwZXIoYnVmZmVyLCBlbmNvZGluZywgbGluZV9idWZmZXJpbmc9VHJ1ZSkKKyAgICAgICAgdGV4dC5tb2RlID0gJ3InCisgICAgICAgIHJldHVybiB0ZXh0CisgICAgZXhjZXB0OgorICAgICAgICBidWZmZXIuY2xvc2UoKQorICAgICAgICByYWlzZQogCiAKIGRlZiB0b2tlbml6ZShyZWFkbGluZSk6CkBAIC02NTcsNyArNjc4LDcgQEAKICAgICAgICAgIyBUb2tlbml6ZSB0aGUgaW5wdXQKICAgICAgICAgaWYgYXJncy5maWxlbmFtZToKICAgICAgICAgICAgIGZpbGVuYW1lID0gYXJncy5maWxlbmFtZQotICAgICAgICAgICAgd2l0aCBidWlsdGlucy5vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgorICAgICAgICAgICAgd2l0aCBfYnVpbHRpbl9vcGVuKGZpbGVuYW1lLCAncmInKSBhcyBmOgogICAgICAgICAgICAgICAgIHRva2VucyA9IGxpc3QodG9rZW5pemUoZi5yZWFkbGluZSkpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmaWxlbmFtZSA9ICI8c3RkaW4+IgpAQCAtNjc5LDcgKzcwMCw3IEBACiAgICAgICAgIGVycm9yKGVyci5hcmdzWzBdLCBmaWxlbmFtZSwgKGxpbmUsIGNvbHVtbikpCiAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGVycjoKICAgICAgICAgZXJyb3IoZXJyLCBmaWxlbmFtZSkKLSAgICBleGNlcHQgSU9FcnJvciBhcyBlcnI6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICBlcnJvcihlcnIpCiAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgogICAgICAgICBwcmludCgiaW50ZXJydXB0ZWRcbiIpCmRpZmYgLS1naXQgYS9MaWIvdHJhY2UucHkgYi9MaWIvdHJhY2UucHkKaW5kZXggYzA5YjM2NS4uMDlmZTllZSAxMDA3NTUKLS0tIGEvTGliL3RyYWNlLnB5CisrKyBiL0xpYi90cmFjZS5weQpAQCAtMjM4LDcgKzIzOCw3IEBACiAgICAgICAgICAgICAgICAgY291bnRzLCBjYWxsZWRmdW5jcywgY2FsbGVycyA9IFwKICAgICAgICAgICAgICAgICAgICAgICAgIHBpY2tsZS5sb2FkKG9wZW4oc2VsZi5pbmZpbGUsICdyYicpKQogICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlKHNlbGYuX19jbGFzc19fKGNvdW50cywgY2FsbGVkZnVuY3MsIGNhbGxlcnMpKQotICAgICAgICAgICAgZXhjZXB0IChJT0Vycm9yLCBFT0ZFcnJvciwgVmFsdWVFcnJvcikgYXMgZXJyOgorICAgICAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBFT0ZFcnJvciwgVmFsdWVFcnJvcikgYXMgZXJyOgogICAgICAgICAgICAgICAgIHByaW50KCgiU2tpcHBpbmcgY291bnRzIGZpbGUgJXI6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlIChzZWxmLmluZmlsZSwgZXJyKSksIGZpbGU9c3lzLnN0ZGVycikKIApAQCAtMzQ4LDcgKzM0OCw3IEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgcGlja2xlLmR1bXAoKHNlbGYuY291bnRzLCBzZWxmLmNhbGxlZGZ1bmNzLCBzZWxmLmNhbGxlcnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW4oc2VsZi5vdXRmaWxlLCAnd2InKSwgMSkKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGVycjoKICAgICAgICAgICAgICAgICBwcmludCgiQ2FuJ3Qgc2F2ZSBjb3VudHMgZmlsZXMgYmVjYXVzZSAlcyIgJSBlcnIsIGZpbGU9c3lzLnN0ZGVycikKIAogICAgIGRlZiB3cml0ZV9yZXN1bHRzX2ZpbGUoc2VsZiwgcGF0aCwgbGluZXMsIGxub3RhYiwgbGluZXNfaGl0LCBlbmNvZGluZz1Ob25lKToKQEAgLTM1Niw3ICszNTYsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG91dGZpbGUgPSBvcGVuKHBhdGgsICJ3IiwgZW5jb2Rpbmc9ZW5jb2RpbmcpCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgogICAgICAgICAgICAgcHJpbnQoKCJ0cmFjZTogQ291bGQgbm90IG9wZW4gJXIgZm9yIHdyaXRpbmc6ICVzIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItIHNraXBwaW5nIiAlIChwYXRoLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAgICAgcmV0dXJuIDAsIDAKQEAgLTQzNyw3ICs0MzcsNyBAQAogICAgICAgICB3aXRoIHRva2VuaXplLm9wZW4oZmlsZW5hbWUpIGFzIGY6CiAgICAgICAgICAgICBwcm9nID0gZi5yZWFkKCkKICAgICAgICAgICAgIGVuY29kaW5nID0gZi5lbmNvZGluZwotICAgIGV4Y2VwdCBJT0Vycm9yIGFzIGVycjoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgIHByaW50KCgiTm90IHByaW50aW5nIGNvdmVyYWdlIGRhdGEgZm9yICVyOiAlcyIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKGZpbGVuYW1lLCBlcnIpKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICByZXR1cm4ge30KQEAgLTgwMiw3ICs4MDIsNyBAQAogICAgICAgICAgICAgICAgICdfX2NhY2hlZF9fJzogTm9uZSwKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHQucnVuY3R4KGNvZGUsIGdsb2JzLCBnbG9icykKLSAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBfZXJyX2V4aXQoIkNhbm5vdCBydW4gZmlsZSAlciBiZWNhdXNlOiAlcyIgJSAoc3lzLmFyZ3ZbMF0sIGVycikpCiAgICAgICAgIGV4Y2VwdCBTeXN0ZW1FeGl0OgogICAgICAgICAgICAgcGFzcwpkaWZmIC0tZ2l0IGEvTGliL3RyYWNlYmFjay5weSBiL0xpYi90cmFjZWJhY2sucHkKaW5kZXggZjMzZmNlZC4uZmFmNTkzYSAxMDA2NDQKLS0tIGEvTGliL3RyYWNlYmFjay5weQorKysgYi9MaWIvdHJhY2ViYWNrLnB5CkBAIC0yLDI2ICsyLDMyIEBACiAKIGltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBzeXMKK2ltcG9ydCBvcGVyYXRvcgogCiBfX2FsbF9fID0gWydleHRyYWN0X3N0YWNrJywgJ2V4dHJhY3RfdGInLCAnZm9ybWF0X2V4Y2VwdGlvbicsCiAgICAgICAgICAgICdmb3JtYXRfZXhjZXB0aW9uX29ubHknLCAnZm9ybWF0X2xpc3QnLCAnZm9ybWF0X3N0YWNrJywKICAgICAgICAgICAgJ2Zvcm1hdF90YicsICdwcmludF9leGMnLCAnZm9ybWF0X2V4YycsICdwcmludF9leGNlcHRpb24nLAotICAgICAgICAgICAncHJpbnRfbGFzdCcsICdwcmludF9zdGFjaycsICdwcmludF90YiddCisgICAgICAgICAgICdwcmludF9sYXN0JywgJ3ByaW50X3N0YWNrJywgJ3ByaW50X3RiJywKKyAgICAgICAgICAgJ2NsZWFyX2ZyYW1lcyddCiAKLWRlZiBfcHJpbnQoZmlsZSwgc3RyPScnLCB0ZXJtaW5hdG9yPSdcbicpOgotICAgIGZpbGUud3JpdGUoc3RyK3Rlcm1pbmF0b3IpCisjCisjIEZvcm1hdHRpbmcgYW5kIHByaW50aW5nIGxpc3RzIG9mIHRyYWNlYmFjayBsaW5lcy4KKyMKIAorZGVmIF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KToKKyAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiBleHRyYWN0ZWRfbGlzdDoKKyAgICAgICAgaXRlbSA9ICcgIEZpbGUgInt9IiwgbGluZSB7fSwgaW4ge31cbicuZm9ybWF0KGZpbGVuYW1lLCBsaW5lbm8sIG5hbWUpCisgICAgICAgIGlmIGxpbmU6CisgICAgICAgICAgICBpdGVtID0gaXRlbSArICcgICAge31cbicuZm9ybWF0KGxpbmUuc3RyaXAoKSkKKyAgICAgICAgeWllbGQgaXRlbQogCiBkZWYgcHJpbnRfbGlzdChleHRyYWN0ZWRfbGlzdCwgZmlsZT1Ob25lKToKICAgICAiIiJQcmludCB0aGUgbGlzdCBvZiB0dXBsZXMgYXMgcmV0dXJuZWQgYnkgZXh0cmFjdF90YigpIG9yCiAgICAgZXh0cmFjdF9zdGFjaygpIGFzIGEgZm9ybWF0dGVkIHN0YWNrIHRyYWNlIHRvIHRoZSBnaXZlbiBmaWxlLiIiIgogICAgIGlmIGZpbGUgaXMgTm9uZToKICAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKLSAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiBleHRyYWN0ZWRfbGlzdDoKLSAgICAgICAgX3ByaW50KGZpbGUsCi0gICAgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSxsaW5lbm8sbmFtZSkpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgJyAgICAlcycgJSBsaW5lLnN0cmlwKCkpCisgICAgZm9yIGl0ZW0gaW4gX2Zvcm1hdF9saXN0X2l0ZXIoZXh0cmFjdGVkX2xpc3QpOgorICAgICAgICBwcmludChpdGVtLCBmaWxlPWZpbGUsIGVuZD0iIikKIAogZGVmIGZvcm1hdF9saXN0KGV4dHJhY3RlZF9saXN0KToKICAgICAiIiJGb3JtYXQgYSBsaXN0IG9mIHRyYWNlYmFjayBlbnRyeSB0dXBsZXMgZm9yIHByaW50aW5nLgpAQCAtMzMsMTQgKzM5LDQ0IEBACiAgICAgdGhlIHN0cmluZ3MgbWF5IGNvbnRhaW4gaW50ZXJuYWwgbmV3bGluZXMgYXMgd2VsbCwgZm9yIHRob3NlIGl0ZW1zCiAgICAgd2hvc2Ugc291cmNlIHRleHQgbGluZSBpcyBub3QgTm9uZS4KICAgICAiIiIKLSAgICBsaXN0ID0gW10KLSAgICBmb3IgZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSBpbiBleHRyYWN0ZWRfbGlzdDoKLSAgICAgICAgaXRlbSA9ICcgIEZpbGUgIiVzIiwgbGluZSAlZCwgaW4gJXNcbicgJSAoZmlsZW5hbWUsbGluZW5vLG5hbWUpCi0gICAgICAgIGlmIGxpbmU6Ci0gICAgICAgICAgICBpdGVtID0gaXRlbSArICcgICAgJXNcbicgJSBsaW5lLnN0cmlwKCkKLSAgICAgICAgbGlzdC5hcHBlbmQoaXRlbSkKLSAgICByZXR1cm4gbGlzdAorICAgIHJldHVybiBsaXN0KF9mb3JtYXRfbGlzdF9pdGVyKGV4dHJhY3RlZF9saXN0KSkKIAorIworIyBQcmludGluZyBhbmQgRXh0cmFjdGluZyBUcmFjZWJhY2tzLgorIworCisjIGV4dHJhY3RvciB0YWtlcyBjdXJyIGFuZCBuZWVkcyB0byByZXR1cm4gYSB0dXBsZSBvZjoKKyMgLSBGcmFtZSBvYmplY3QKKyMgLSBMaW5lIG51bWJlcgorIyAtIE5leHQgaXRlbSAoc2FtZSB0eXBlIGFzIGN1cnIpCisjIEluIHByYWN0aWNlLCBjdXJyIGlzIGVpdGhlciBhIHRyYWNlYmFjayBvciBhIGZyYW1lLgorZGVmIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoY3VyciwgbGltaXQsIGV4dHJhY3Rvcik6CisgICAgaWYgbGltaXQgaXMgTm9uZToKKyAgICAgICAgbGltaXQgPSBnZXRhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0JywgTm9uZSkKKworICAgIG4gPSAwCisgICAgd2hpbGUgY3VyciBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKKyAgICAgICAgZiwgbGluZW5vLCBuZXh0X2l0ZW0gPSBleHRyYWN0b3IoY3VycikKKyAgICAgICAgY28gPSBmLmZfY29kZQorICAgICAgICBmaWxlbmFtZSA9IGNvLmNvX2ZpbGVuYW1lCisgICAgICAgIG5hbWUgPSBjby5jb19uYW1lCisKKyAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCisgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKKworICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbGluZSA9IE5vbmUKKworICAgICAgICB5aWVsZCAoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkKKyAgICAgICAgY3VyciA9IG5leHRfaXRlbQorICAgICAgICBuICs9IDEKKworZGVmIF9leHRyYWN0X3RiX2l0ZXIodGIsIGxpbWl0KToKKyAgICByZXR1cm4gX2V4dHJhY3RfdGJfb3Jfc3RhY2tfaXRlcigKKyAgICAgICAgICAgICAgICB0YiwgbGltaXQsCisgICAgICAgICAgICAgICAgb3BlcmF0b3IuYXR0cmdldHRlcigidGJfZnJhbWUiLCAidGJfbGluZW5vIiwgInRiX25leHQiKSkKIAogZGVmIHByaW50X3RiKHRiLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUpOgogICAgICIiIlByaW50IHVwIHRvICdsaW1pdCcgc3RhY2sgdHJhY2UgZW50cmllcyBmcm9tIHRoZSB0cmFjZWJhY2sgJ3RiJy4KQEAgLTUwLDI5ICs4NiwxMSBAQAogICAgICdmaWxlJyBzaG91bGQgYmUgYW4gb3BlbiBmaWxlIG9yIGZpbGUtbGlrZSBvYmplY3Qgd2l0aCBhIHdyaXRlKCkKICAgICBtZXRob2QuCiAgICAgIiIiCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnKToKLSAgICAgICAgICAgIGxpbWl0ID0gc3lzLnRyYWNlYmFja2xpbWl0Ci0gICAgbiA9IDAKLSAgICB3aGlsZSB0YiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgZiA9IHRiLnRiX2ZyYW1lCi0gICAgICAgIGxpbmVubyA9IHRiLnRiX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgX3ByaW50KGZpbGUsCi0gICAgICAgICAgICAgICAnICBGaWxlICIlcyIsIGxpbmUgJWQsIGluICVzJyAlIChmaWxlbmFtZSwgbGluZW5vLCBuYW1lKSkKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogX3ByaW50KGZpbGUsICcgICAgJyArIGxpbmUuc3RyaXAoKSkKLSAgICAgICAgdGIgPSB0Yi50Yl9uZXh0Ci0gICAgICAgIG4gPSBuKzEKKyAgICBwcmludF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0PWxpbWl0KSwgZmlsZT1maWxlKQogCiBkZWYgZm9ybWF0X3RiKHRiLCBsaW1pdD1Ob25lKToKICAgICAiIiJBIHNob3J0aGFuZCBmb3IgJ2Zvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0KSknLiIiIgotICAgIHJldHVybiBmb3JtYXRfbGlzdChleHRyYWN0X3RiKHRiLCBsaW1pdCkpCisgICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3RfdGIodGIsIGxpbWl0PWxpbWl0KSkKIAogZGVmIGV4dHJhY3RfdGIodGIsIGxpbWl0PU5vbmUpOgogICAgICIiIlJldHVybiBsaXN0IG9mIHVwIHRvIGxpbWl0IHByZS1wcm9jZXNzZWQgZW50cmllcyBmcm9tIHRyYWNlYmFjay4KQEAgLTg1LDI2ICsxMDMsMTEgQEAKICAgICBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIHN0cmlwcGVkOyBpZiB0aGUgc291cmNlIGlzIG5vdAogICAgIGF2YWlsYWJsZSBpdCBpcyBOb25lLgogICAgICIiIgotICAgIGlmIGxpbWl0IGlzIE5vbmU6Ci0gICAgICAgIGlmIGhhc2F0dHIoc3lzLCAndHJhY2ViYWNrbGltaXQnKToKLSAgICAgICAgICAgIGxpbWl0ID0gc3lzLnRyYWNlYmFja2xpbWl0Ci0gICAgbGlzdCA9IFtdCi0gICAgbiA9IDAKLSAgICB3aGlsZSB0YiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgZiA9IHRiLnRiX2ZyYW1lCi0gICAgICAgIGxpbmVubyA9IHRiLnRiX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBlbHNlOiBsaW5lID0gTm9uZQotICAgICAgICBsaXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCi0gICAgICAgIHRiID0gdGIudGJfbmV4dAotICAgICAgICBuID0gbisxCi0gICAgcmV0dXJuIGxpc3QKKyAgICByZXR1cm4gbGlzdChfZXh0cmFjdF90Yl9pdGVyKHRiLCBsaW1pdD1saW1pdCkpCiAKKyMKKyMgRXhjZXB0aW9uIGZvcm1hdHRpbmcgYW5kIG91dHB1dC4KKyMKIAogX2NhdXNlX21lc3NhZ2UgPSAoCiAgICAgIlxuVGhlIGFib3ZlIGV4Y2VwdGlvbiB3YXMgdGhlIGRpcmVjdCBjYXVzZSAiCkBAIC0xMzIsOSArMTM1LDIzIEBACiAgICAgaXRzLmFwcGVuZChbKGV4YywgY3VzdG9tX3RiIG9yIGV4Yy5fX3RyYWNlYmFja19fKV0pCiAgICAgIyBpdGVydG9vbHMuY2hhaW4gaXMgaW4gYW4gZXh0ZW5zaW9uIG1vZHVsZSBhbmQgbWF5IGJlIHVuYXZhaWxhYmxlCiAgICAgZm9yIGl0IGluIGl0czoKLSAgICAgICAgZm9yIHggaW4gaXQ6Ci0gICAgICAgICAgICB5aWVsZCB4CisgICAgICAgIHlpZWxkIGZyb20gaXQKIAorZGVmIF9mb3JtYXRfZXhjZXB0aW9uX2l0ZXIoZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKToKKyAgICBpZiBjaGFpbjoKKyAgICAgICAgdmFsdWVzID0gX2l0ZXJfY2hhaW4odmFsdWUsIHRiKQorICAgIGVsc2U6CisgICAgICAgIHZhbHVlcyA9IFsodmFsdWUsIHRiKV0KKworICAgIGZvciB2YWx1ZSwgdGIgaW4gdmFsdWVzOgorICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgorICAgICAgICAgICAgIyBUaGlzIGlzIGEgY2F1c2UvY29udGV4dCBtZXNzYWdlIGxpbmUKKyAgICAgICAgICAgIHlpZWxkIHZhbHVlICsgJ1xuJworICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgaWYgdGI6CisgICAgICAgICAgICB5aWVsZCAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJworICAgICAgICAgICAgeWllbGQgZnJvbSBfZm9ybWF0X2xpc3RfaXRlcihfZXh0cmFjdF90Yl9pdGVyKHRiLCBsaW1pdD1saW1pdCkpCisgICAgICAgIHlpZWxkIGZyb20gX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKHR5cGUodmFsdWUpLCB2YWx1ZSkKIAogZGVmIHByaW50X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlByaW50IGV4Y2VwdGlvbiB1cCB0byAnbGltaXQnIHN0YWNrIHRyYWNlIGVudHJpZXMgZnJvbSAndGInIHRvICdmaWxlJy4KQEAgLTE0OSwyMCArMTY2LDggQEAKICAgICAiIiIKICAgICBpZiBmaWxlIGlzIE5vbmU6CiAgICAgICAgIGZpbGUgPSBzeXMuc3RkZXJyCi0gICAgaWYgY2hhaW46Ci0gICAgICAgIHZhbHVlcyA9IF9pdGVyX2NoYWluKHZhbHVlLCB0YikKLSAgICBlbHNlOgotICAgICAgICB2YWx1ZXMgPSBbKHZhbHVlLCB0YildCi0gICAgZm9yIHZhbHVlLCB0YiBpbiB2YWx1ZXM6Ci0gICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIHN0cik6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgdmFsdWUpCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiB0YjoKLSAgICAgICAgICAgIF9wcmludChmaWxlLCAnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOicpCi0gICAgICAgICAgICBwcmludF90Yih0YiwgbGltaXQsIGZpbGUpCi0gICAgICAgIGxpbmVzID0gZm9ybWF0X2V4Y2VwdGlvbl9vbmx5KHR5cGUodmFsdWUpLCB2YWx1ZSkKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBfcHJpbnQoZmlsZSwgbGluZSwgJycpCisgICAgZm9yIGxpbmUgaW4gX2Zvcm1hdF9leGNlcHRpb25faXRlcihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgY2hhaW4pOgorICAgICAgICBwcmludChsaW5lLCBmaWxlPWZpbGUsIGVuZD0iIikKIAogZGVmIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQ9Tm9uZSwgY2hhaW49VHJ1ZSk6CiAgICAgIiIiRm9ybWF0IGEgc3RhY2sgdHJhY2UgYW5kIHRoZSBleGNlcHRpb24gaW5mb3JtYXRpb24uCkBAIC0xNzMsMjAgKzE3OCw3IEBACiAgICAgdGhlc2UgbGluZXMgYXJlIGNvbmNhdGVuYXRlZCBhbmQgcHJpbnRlZCwgZXhhY3RseSB0aGUgc2FtZSB0ZXh0IGlzCiAgICAgcHJpbnRlZCBhcyBkb2VzIHByaW50X2V4Y2VwdGlvbigpLgogICAgICIiIgotICAgIGxpc3QgPSBbXQotICAgIGlmIGNoYWluOgotICAgICAgICB2YWx1ZXMgPSBfaXRlcl9jaGFpbih2YWx1ZSwgdGIpCi0gICAgZWxzZToKLSAgICAgICAgdmFsdWVzID0gWyh2YWx1ZSwgdGIpXQotICAgIGZvciB2YWx1ZSwgdGIgaW4gdmFsdWVzOgotICAgICAgICBpZiBpc2luc3RhbmNlKHZhbHVlLCBzdHIpOgotICAgICAgICAgICAgbGlzdC5hcHBlbmQodmFsdWUgKyAnXG4nKQotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgaWYgdGI6Ci0gICAgICAgICAgICBsaXN0LmFwcGVuZCgnVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOlxuJykKLSAgICAgICAgICAgIGxpc3QuZXh0ZW5kKGZvcm1hdF90Yih0YiwgbGltaXQpKQotICAgICAgICBsaXN0LmV4dGVuZChmb3JtYXRfZXhjZXB0aW9uX29ubHkodHlwZSh2YWx1ZSksIHZhbHVlKSkKLSAgICByZXR1cm4gbGlzdAorICAgIHJldHVybiBsaXN0KF9mb3JtYXRfZXhjZXB0aW9uX2l0ZXIoZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKSkKIAogZGVmIGZvcm1hdF9leGNlcHRpb25fb25seShldHlwZSwgdmFsdWUpOgogICAgICIiIkZvcm1hdCB0aGUgZXhjZXB0aW9uIHBhcnQgb2YgYSB0cmFjZWJhY2suCkBAIC0yMDQsMTAgKzE5NiwxNCBAQAogICAgIHN0cmluZyBpbiB0aGUgbGlzdC4KIAogICAgICIiIgorICAgIHJldHVybiBsaXN0KF9mb3JtYXRfZXhjZXB0aW9uX29ubHlfaXRlcihldHlwZSwgdmFsdWUpKQorCitkZWYgX2Zvcm1hdF9leGNlcHRpb25fb25seV9pdGVyKGV0eXBlLCB2YWx1ZSk6CiAgICAgIyBHcmFjZWZ1bGx5IGhhbmRsZSAodGhlIHdheSBQeXRob24gMi40IGFuZCBlYXJsaWVyIGRpZCkgdGhlIGNhc2Ugb2YKICAgICAjIGJlaW5nIGNhbGxlZCB3aXRoIChOb25lLCBOb25lKS4KICAgICBpZiBldHlwZSBpcyBOb25lOgotICAgICAgICByZXR1cm4gW19mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKV0KKyAgICAgICAgeWllbGQgX2Zvcm1hdF9maW5hbF9leGNfbGluZShldHlwZSwgdmFsdWUpCisgICAgICAgIHJldHVybgogCiAgICAgc3R5cGUgPSBldHlwZS5fX25hbWVfXwogICAgIHNtb2QgPSBldHlwZS5fX21vZHVsZV9fCkBAIC0yMTUsMjcgKzIxMSwyNyBAQAogICAgICAgICBzdHlwZSA9IHNtb2QgKyAnLicgKyBzdHlwZQogCiAgICAgaWYgbm90IGlzc3ViY2xhc3MoZXR5cGUsIFN5bnRheEVycm9yKToKLSAgICAgICAgcmV0dXJuIFtfZm9ybWF0X2ZpbmFsX2V4Y19saW5lKHN0eXBlLCB2YWx1ZSldCisgICAgICAgIHlpZWxkIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoc3R5cGUsIHZhbHVlKQorICAgICAgICByZXR1cm4KIAogICAgICMgSXQgd2FzIGEgc3ludGF4IGVycm9yOyBzaG93IGV4YWN0bHkgd2hlcmUgdGhlIHByb2JsZW0gd2FzIGZvdW5kLgotICAgIGxpbmVzID0gW10KICAgICBmaWxlbmFtZSA9IHZhbHVlLmZpbGVuYW1lIG9yICI8c3RyaW5nPiIKICAgICBsaW5lbm8gPSBzdHIodmFsdWUubGluZW5vKSBvciAnPycKLSAgICBsaW5lcy5hcHBlbmQoJyAgRmlsZSAiJXMiLCBsaW5lICVzXG4nICUgKGZpbGVuYW1lLCBsaW5lbm8pKQorICAgIHlpZWxkICcgIEZpbGUgInt9IiwgbGluZSB7fVxuJy5mb3JtYXQoZmlsZW5hbWUsIGxpbmVubykKKwogICAgIGJhZGxpbmUgPSB2YWx1ZS50ZXh0CiAgICAgb2Zmc2V0ID0gdmFsdWUub2Zmc2V0CiAgICAgaWYgYmFkbGluZSBpcyBub3QgTm9uZToKLSAgICAgICAgbGluZXMuYXBwZW5kKCcgICAgJXNcbicgJSBiYWRsaW5lLnN0cmlwKCkpCisgICAgICAgIHlpZWxkICcgICAge31cbicuZm9ybWF0KGJhZGxpbmUuc3RyaXAoKSkKICAgICAgICAgaWYgb2Zmc2V0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgY2FyZXRzcGFjZSA9IGJhZGxpbmUucnN0cmlwKCdcbicpCiAgICAgICAgICAgICBvZmZzZXQgPSBtaW4obGVuKGNhcmV0c3BhY2UpLCBvZmZzZXQpIC0gMQogICAgICAgICAgICAgY2FyZXRzcGFjZSA9IGNhcmV0c3BhY2VbOm9mZnNldF0ubHN0cmlwKCkKICAgICAgICAgICAgICMgbm9uLXNwYWNlIHdoaXRlc3BhY2UgKGxpa2VzIHRhYnMpIG11c3QgYmUga2VwdCBmb3IgYWxpZ25tZW50CiAgICAgICAgICAgICBjYXJldHNwYWNlID0gKChjLmlzc3BhY2UoKSBhbmQgYyBvciAnICcpIGZvciBjIGluIGNhcmV0c3BhY2UpCi0gICAgICAgICAgICBsaW5lcy5hcHBlbmQoJyAgICAlc15cbicgJSAnJy5qb2luKGNhcmV0c3BhY2UpKQorICAgICAgICAgICAgeWllbGQgJyAgICB7fV5cbicuZm9ybWF0KCcnLmpvaW4oY2FyZXRzcGFjZSkpCiAgICAgbXNnID0gdmFsdWUubXNnIG9yICI8bm8gZGV0YWlsIGF2YWlsYWJsZT4iCi0gICAgbGluZXMuYXBwZW5kKCIlczogJXNcbiIgJSAoc3R5cGUsIG1zZykpCi0gICAgcmV0dXJuIGxpbmVzCisgICAgeWllbGQgInt9OiB7fVxuIi5mb3JtYXQoc3R5cGUsIG1zZykKIAogZGVmIF9mb3JtYXRfZmluYWxfZXhjX2xpbmUoZXR5cGUsIHZhbHVlKToKICAgICB2YWx1ZXN0ciA9IF9zb21lX3N0cih2YWx1ZSkKQEAgLTI1MSwzOCArMjQ3LDM0IEBACiAgICAgZXhjZXB0OgogICAgICAgICByZXR1cm4gJzx1bnByaW50YWJsZSAlcyBvYmplY3Q+JyAlIHR5cGUodmFsdWUpLl9fbmFtZV9fCiAKLQogZGVmIHByaW50X2V4YyhsaW1pdD1Ob25lLCBmaWxlPU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIlNob3J0aGFuZCBmb3IgJ3ByaW50X2V4Y2VwdGlvbigqc3lzLmV4Y19pbmZvKCksIGxpbWl0LCBmaWxlKScuIiIiCi0gICAgaWYgZmlsZSBpcyBOb25lOgotICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgotICAgIHRyeToKLSAgICAgICAgZXR5cGUsIHZhbHVlLCB0YiA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgIHByaW50X2V4Y2VwdGlvbihldHlwZSwgdmFsdWUsIHRiLCBsaW1pdCwgZmlsZSwgY2hhaW4pCi0gICAgZmluYWxseToKLSAgICAgICAgZXR5cGUgPSB2YWx1ZSA9IHRiID0gTm9uZQotCisgICAgcHJpbnRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGZpbGU9ZmlsZSwgY2hhaW49Y2hhaW4pCiAKIGRlZiBmb3JtYXRfZXhjKGxpbWl0PU5vbmUsIGNoYWluPVRydWUpOgogICAgICIiIkxpa2UgcHJpbnRfZXhjKCkgYnV0IHJldHVybiBhIHN0cmluZy4iIiIKLSAgICB0cnk6Ci0gICAgICAgIGV0eXBlLCB2YWx1ZSwgdGIgPSBzeXMuZXhjX2luZm8oKQotICAgICAgICByZXR1cm4gJycuam9pbigKLSAgICAgICAgICAgIGZvcm1hdF9leGNlcHRpb24oZXR5cGUsIHZhbHVlLCB0YiwgbGltaXQsIGNoYWluKSkKLSAgICBmaW5hbGx5OgotICAgICAgICBldHlwZSA9IHZhbHVlID0gdGIgPSBOb25lCi0KKyAgICByZXR1cm4gIiIuam9pbihmb3JtYXRfZXhjZXB0aW9uKCpzeXMuZXhjX2luZm8oKSwgbGltaXQ9bGltaXQsIGNoYWluPWNoYWluKSkKIAogZGVmIHByaW50X2xhc3QobGltaXQ9Tm9uZSwgZmlsZT1Ob25lLCBjaGFpbj1UcnVlKToKICAgICAiIiJUaGlzIGlzIGEgc2hvcnRoYW5kIGZvciAncHJpbnRfZXhjZXB0aW9uKHN5cy5sYXN0X3R5cGUsCiAgICAgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywgbGltaXQsIGZpbGUpJy4iIiIKICAgICBpZiBub3QgaGFzYXR0cihzeXMsICJsYXN0X3R5cGUiKToKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigibm8gbGFzdCBleGNlcHRpb24iKQotICAgIGlmIGZpbGUgaXMgTm9uZToKLSAgICAgICAgZmlsZSA9IHN5cy5zdGRlcnIKICAgICBwcmludF9leGNlcHRpb24oc3lzLmxhc3RfdHlwZSwgc3lzLmxhc3RfdmFsdWUsIHN5cy5sYXN0X3RyYWNlYmFjaywKICAgICAgICAgICAgICAgICAgICAgbGltaXQsIGZpbGUsIGNoYWluKQogCisjCisjIFByaW50aW5nIGFuZCBFeHRyYWN0aW5nIFN0YWNrcy4KKyMKKworZGVmIF9leHRyYWN0X3N0YWNrX2l0ZXIoZiwgbGltaXQ9Tm9uZSk6CisgICAgcmV0dXJuIF9leHRyYWN0X3RiX29yX3N0YWNrX2l0ZXIoCisgICAgICAgICAgICAgICAgZiwgbGltaXQsIGxhbWJkYSBmOiAoZiwgZi5mX2xpbmVubywgZi5mX2JhY2spKQorCitkZWYgX2dldF9zdGFjayhmKToKKyAgICBpZiBmIGlzIE5vbmU6CisgICAgICAgIGYgPSBzeXMuX2dldGZyYW1lKCkuZl9iYWNrLmZfYmFjaworICAgIHJldHVybiBmCiAKIGRlZiBwcmludF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUsIGZpbGU9Tm9uZSk6CiAgICAgIiIiUHJpbnQgYSBzdGFjayB0cmFjZSBmcm9tIGl0cyBpbnZvY2F0aW9uIHBvaW50LgpAQCAtMjkxLDIxICsyODMsMTEgQEAKICAgICBzdGFjayBmcmFtZSBhdCB3aGljaCB0byBzdGFydC4gVGhlIG9wdGlvbmFsICdsaW1pdCcgYW5kICdmaWxlJwogICAgIGFyZ3VtZW50cyBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHByaW50X2V4Y2VwdGlvbigpLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcmFpc2UgWmVyb0RpdmlzaW9uRXJyb3IKLSAgICAgICAgZXhjZXB0IFplcm9EaXZpc2lvbkVycm9yOgotICAgICAgICAgICAgZiA9IHN5cy5leGNfaW5mbygpWzJdLnRiX2ZyYW1lLmZfYmFjawotICAgIHByaW50X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCksIGZpbGUpCisgICAgcHJpbnRfbGlzdChleHRyYWN0X3N0YWNrKF9nZXRfc3RhY2soZiksIGxpbWl0PWxpbWl0KSwgZmlsZT1maWxlKQogCiBkZWYgZm9ybWF0X3N0YWNrKGY9Tm9uZSwgbGltaXQ9Tm9uZSk6CiAgICAgIiIiU2hvcnRoYW5kIGZvciAnZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpJy4iIiIKLSAgICBpZiBmIGlzIE5vbmU6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICByZXR1cm4gZm9ybWF0X2xpc3QoZXh0cmFjdF9zdGFjayhmLCBsaW1pdCkpCisgICAgcmV0dXJuIGZvcm1hdF9saXN0KGV4dHJhY3Rfc3RhY2soX2dldF9zdGFjayhmKSwgbGltaXQ9bGltaXQpKQogCiBkZWYgZXh0cmFjdF9zdGFjayhmPU5vbmUsIGxpbWl0PU5vbmUpOgogICAgICIiIkV4dHJhY3QgdGhlIHJhdyB0cmFjZWJhY2sgZnJvbSB0aGUgY3VycmVudCBzdGFjayBmcmFtZS4KQEAgLTMxNiwyNyArMjk4LDE2IEBACiAgICAgbGluZSBudW1iZXIsIGZ1bmN0aW9uIG5hbWUsIHRleHQpLCBhbmQgdGhlIGVudHJpZXMgYXJlIGluIG9yZGVyCiAgICAgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0IHN0YWNrIGZyYW1lLgogICAgICIiIgotICAgIGlmIGYgaXMgTm9uZToKKyAgICBzdGFjayA9IGxpc3QoX2V4dHJhY3Rfc3RhY2tfaXRlcihfZ2V0X3N0YWNrKGYpLCBsaW1pdD1saW1pdCkpCisgICAgc3RhY2sucmV2ZXJzZSgpCisgICAgcmV0dXJuIHN0YWNrCisKK2RlZiBjbGVhcl9mcmFtZXModGIpOgorICAgICJDbGVhciBhbGwgcmVmZXJlbmNlcyB0byBsb2NhbCB2YXJpYWJsZXMgaW4gdGhlIGZyYW1lcyBvZiBhIHRyYWNlYmFjay4iCisgICAgd2hpbGUgdGIgaXMgbm90IE5vbmU6CiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIHJhaXNlIFplcm9EaXZpc2lvbkVycm9yCi0gICAgICAgIGV4Y2VwdCBaZXJvRGl2aXNpb25FcnJvcjoKLSAgICAgICAgICAgIGYgPSBzeXMuZXhjX2luZm8oKVsyXS50Yl9mcmFtZS5mX2JhY2sKLSAgICBpZiBsaW1pdCBpcyBOb25lOgotICAgICAgICBpZiBoYXNhdHRyKHN5cywgJ3RyYWNlYmFja2xpbWl0Jyk6Ci0gICAgICAgICAgICBsaW1pdCA9IHN5cy50cmFjZWJhY2tsaW1pdAotICAgIGxpc3QgPSBbXQotICAgIG4gPSAwCi0gICAgd2hpbGUgZiBpcyBub3QgTm9uZSBhbmQgKGxpbWl0IGlzIE5vbmUgb3IgbiA8IGxpbWl0KToKLSAgICAgICAgbGluZW5vID0gZi5mX2xpbmVubwotICAgICAgICBjbyA9IGYuZl9jb2RlCi0gICAgICAgIGZpbGVuYW1lID0gY28uY29fZmlsZW5hbWUKLSAgICAgICAgbmFtZSA9IGNvLmNvX25hbWUKLSAgICAgICAgbGluZWNhY2hlLmNoZWNrY2FjaGUoZmlsZW5hbWUpCi0gICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmaWxlbmFtZSwgbGluZW5vLCBmLmZfZ2xvYmFscykKLSAgICAgICAgaWYgbGluZTogbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICBlbHNlOiBsaW5lID0gTm9uZQotICAgICAgICBsaXN0LmFwcGVuZCgoZmlsZW5hbWUsIGxpbmVubywgbmFtZSwgbGluZSkpCi0gICAgICAgIGYgPSBmLmZfYmFjawotICAgICAgICBuID0gbisxCi0gICAgbGlzdC5yZXZlcnNlKCkKLSAgICByZXR1cm4gbGlzdAorICAgICAgICAgICAgdGIudGJfZnJhbWUuY2xlYXIoKQorICAgICAgICBleGNlcHQgUnVudGltZUVycm9yOgorICAgICAgICAgICAgIyBJZ25vcmUgdGhlIGV4Y2VwdGlvbiByYWlzZWQgaWYgdGhlIGZyYW1lIGlzIHN0aWxsIGV4ZWN1dGluZy4KKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgdGIgPSB0Yi50Yl9uZXh0CmRpZmYgLS1naXQgYS9MaWIvdHJhY2VtYWxsb2MucHkgYi9MaWIvdHJhY2VtYWxsb2MucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRlZGZjNQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi90cmFjZW1hbGxvYy5weQpAQCAtMCwwICsxLDQ4NyBAQAorZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgU2VxdWVuY2UsIEl0ZXJhYmxlCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgdG90YWxfb3JkZXJpbmcKK2ltcG9ydCBmbm1hdGNoCitpbXBvcnQgbGluZWNhY2hlCitpbXBvcnQgb3MucGF0aAoraW1wb3J0IHBpY2tsZQorCisjIEltcG9ydCB0eXBlcyBhbmQgZnVuY3Rpb25zIGltcGxlbWVudGVkIGluIEMKK2Zyb20gX3RyYWNlbWFsbG9jIGltcG9ydCAqCitmcm9tIF90cmFjZW1hbGxvYyBpbXBvcnQgX2dldF9vYmplY3RfdHJhY2ViYWNrLCBfZ2V0X3RyYWNlcworCisKK2RlZiBfZm9ybWF0X3NpemUoc2l6ZSwgc2lnbik6CisgICAgZm9yIHVuaXQgaW4gKCdCJywgJ0tpQicsICdNaUInLCAnR2lCJywgJ1RpQicpOgorICAgICAgICBpZiBhYnMoc2l6ZSkgPCAxMDAgYW5kIHVuaXQgIT0gJ0InOgorICAgICAgICAgICAgIyAzIGRpZ2l0cyAoeHgueCBVTklUKQorICAgICAgICAgICAgaWYgc2lnbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiUrLjFmICVzIiAlIChzaXplLCB1bml0KQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gIiUuMWYgJXMiICUgKHNpemUsIHVuaXQpCisgICAgICAgIGlmIGFicyhzaXplKSA8IDEwICogMTAyNCBvciB1bml0ID09ICdUaUInOgorICAgICAgICAgICAgIyA0IG9yIDUgZGlnaXRzICh4eHh4IFVOSVQpCisgICAgICAgICAgICBpZiBzaWduOgorICAgICAgICAgICAgICAgIHJldHVybiAiJSsuMGYgJXMiICUgKHNpemUsIHVuaXQpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAiJS4wZiAlcyIgJSAoc2l6ZSwgdW5pdCkKKyAgICAgICAgc2l6ZSAvPSAxMDI0CisKKworY2xhc3MgU3RhdGlzdGljOgorICAgICIiIgorICAgIFN0YXRpc3RpYyBkaWZmZXJlbmNlIG9uIG1lbW9yeSBhbGxvY2F0aW9ucyBiZXR3ZWVuIHR3byBTbmFwc2hvdCBpbnN0YW5jZS4KKyAgICAiIiIKKworICAgIF9fc2xvdHNfXyA9ICgndHJhY2ViYWNrJywgJ3NpemUnLCAnY291bnQnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlYmFjaywgc2l6ZSwgY291bnQpOgorICAgICAgICBzZWxmLnRyYWNlYmFjayA9IHRyYWNlYmFjaworICAgICAgICBzZWxmLnNpemUgPSBzaXplCisgICAgICAgIHNlbGYuY291bnQgPSBjb3VudAorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaCgoc2VsZi50cmFjZWJhY2ssIHNlbGYuc2l6ZSwgc2VsZi5jb3VudCkpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnRyYWNlYmFjayA9PSBvdGhlci50cmFjZWJhY2sKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5zaXplID09IG90aGVyLnNpemUKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5jb3VudCA9PSBvdGhlci5jb3VudCkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICB0ZXh0ID0gKCIlczogc2l6ZT0lcywgY291bnQ9JWkiCisgICAgICAgICAgICAgICAgICUgKHNlbGYudHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICBfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQpKQorICAgICAgICBpZiBzZWxmLmNvdW50OgorICAgICAgICAgICAgYXZlcmFnZSA9IHNlbGYuc2l6ZSAvIHNlbGYuY291bnQKKyAgICAgICAgICAgIHRleHQgKz0gIiwgYXZlcmFnZT0lcyIgJSBfZm9ybWF0X3NpemUoYXZlcmFnZSwgRmFsc2UpCisgICAgICAgIHJldHVybiB0ZXh0CisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAoJzxTdGF0aXN0aWMgdHJhY2ViYWNrPSVyIHNpemU9JWkgY291bnQ9JWk+JworICAgICAgICAgICAgICAgICUgKHNlbGYudHJhY2ViYWNrLCBzZWxmLnNpemUsIHNlbGYuY291bnQpKQorCisgICAgZGVmIF9zb3J0X2tleShzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLnNpemUsIHNlbGYuY291bnQsIHNlbGYudHJhY2ViYWNrKQorCisKK2NsYXNzIFN0YXRpc3RpY0RpZmY6CisgICAgIiIiCisgICAgU3RhdGlzdGljIGRpZmZlcmVuY2Ugb24gbWVtb3J5IGFsbG9jYXRpb25zIGJldHdlZW4gYW4gb2xkIGFuZCBhIG5ldworICAgIFNuYXBzaG90IGluc3RhbmNlLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgndHJhY2ViYWNrJywgJ3NpemUnLCAnc2l6ZV9kaWZmJywgJ2NvdW50JywgJ2NvdW50X2RpZmYnKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRyYWNlYmFjaywgc2l6ZSwgc2l6ZV9kaWZmLCBjb3VudCwgY291bnRfZGlmZik6CisgICAgICAgIHNlbGYudHJhY2ViYWNrID0gdHJhY2ViYWNrCisgICAgICAgIHNlbGYuc2l6ZSA9IHNpemUKKyAgICAgICAgc2VsZi5zaXplX2RpZmYgPSBzaXplX2RpZmYKKyAgICAgICAgc2VsZi5jb3VudCA9IGNvdW50CisgICAgICAgIHNlbGYuY291bnRfZGlmZiA9IGNvdW50X2RpZmYKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goKHNlbGYudHJhY2ViYWNrLCBzZWxmLnNpemUsIHNlbGYuc2l6ZV9kaWZmLAorICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb3VudCwgc2VsZi5jb3VudF9kaWZmKSkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYudHJhY2ViYWNrID09IG90aGVyLnRyYWNlYmFjaworICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNpemUgPT0gb3RoZXIuc2l6ZQorICAgICAgICAgICAgICAgIGFuZCBzZWxmLnNpemVfZGlmZiA9PSBvdGhlci5zaXplX2RpZmYKKyAgICAgICAgICAgICAgICBhbmQgc2VsZi5jb3VudCA9PSBvdGhlci5jb3VudAorICAgICAgICAgICAgICAgIGFuZCBzZWxmLmNvdW50X2RpZmYgPT0gb3RoZXIuY291bnRfZGlmZikKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICB0ZXh0ID0gKCIlczogc2l6ZT0lcyAoJXMpLCBjb3VudD0laSAoJStpKSIKKyAgICAgICAgICAgICAgICAlIChzZWxmLnRyYWNlYmFjaywKKyAgICAgICAgICAgICAgICAgICBfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSksCisgICAgICAgICAgICAgICAgICAgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZV9kaWZmLCBUcnVlKSwKKyAgICAgICAgICAgICAgICAgICBzZWxmLmNvdW50LAorICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnRfZGlmZikpCisgICAgICAgIGlmIHNlbGYuY291bnQ6CisgICAgICAgICAgICBhdmVyYWdlID0gc2VsZi5zaXplIC8gc2VsZi5jb3VudAorICAgICAgICAgICAgdGV4dCArPSAiLCBhdmVyYWdlPSVzIiAlIF9mb3JtYXRfc2l6ZShhdmVyYWdlLCBGYWxzZSkKKyAgICAgICAgcmV0dXJuIHRleHQKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICgnPFN0YXRpc3RpY0RpZmYgdHJhY2ViYWNrPSVyIHNpemU9JWkgKCUraSkgY291bnQ9JWkgKCUraSk+JworICAgICAgICAgICAgICAgICUgKHNlbGYudHJhY2ViYWNrLCBzZWxmLnNpemUsIHNlbGYuc2l6ZV9kaWZmLAorICAgICAgICAgICAgICAgICAgIHNlbGYuY291bnQsIHNlbGYuY291bnRfZGlmZikpCisKKyAgICBkZWYgX3NvcnRfa2V5KHNlbGYpOgorICAgICAgICByZXR1cm4gKGFicyhzZWxmLnNpemVfZGlmZiksIHNlbGYuc2l6ZSwKKyAgICAgICAgICAgICAgICBhYnMoc2VsZi5jb3VudF9kaWZmKSwgc2VsZi5jb3VudCwKKyAgICAgICAgICAgICAgICBzZWxmLnRyYWNlYmFjaykKKworCitkZWYgX2NvbXBhcmVfZ3JvdXBlZF9zdGF0cyhvbGRfZ3JvdXAsIG5ld19ncm91cCk6CisgICAgc3RhdGlzdGljcyA9IFtdCisgICAgZm9yIHRyYWNlYmFjaywgc3RhdCBpbiBuZXdfZ3JvdXAuaXRlbXMoKToKKyAgICAgICAgcHJldmlvdXMgPSBvbGRfZ3JvdXAucG9wKHRyYWNlYmFjaywgTm9uZSkKKyAgICAgICAgaWYgcHJldmlvdXMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUsIHN0YXQuc2l6ZSAtIHByZXZpb3VzLnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50LCBzdGF0LmNvdW50IC0gcHJldmlvdXMuY291bnQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUsIHN0YXQuc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuY291bnQsIHN0YXQuY291bnQpCisgICAgICAgIHN0YXRpc3RpY3MuYXBwZW5kKHN0YXQpCisKKyAgICBmb3IgdHJhY2ViYWNrLCBzdGF0IGluIG9sZF9ncm91cC5pdGVtcygpOgorICAgICAgICBzdGF0ID0gU3RhdGlzdGljRGlmZih0cmFjZWJhY2ssIDAsIC1zdGF0LnNpemUsIDAsIC1zdGF0LmNvdW50KQorICAgICAgICBzdGF0aXN0aWNzLmFwcGVuZChzdGF0KQorICAgIHJldHVybiBzdGF0aXN0aWNzCisKKworQHRvdGFsX29yZGVyaW5nCitjbGFzcyBGcmFtZToKKyAgICAiIiIKKyAgICBGcmFtZSBvZiBhIHRyYWNlYmFjay4KKyAgICAiIiIKKyAgICBfX3Nsb3RzX18gPSAoIl9mcmFtZSIsKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lKToKKyAgICAgICAgIyBmcmFtZSBpcyBhIHR1cGxlOiAoZmlsZW5hbWU6IHN0ciwgbGluZW5vOiBpbnQpCisgICAgICAgIHNlbGYuX2ZyYW1lID0gZnJhbWUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmaWxlbmFtZShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2ZyYW1lWzBdCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGluZW5vKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZnJhbWVbMV0KKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2ZyYW1lID09IG90aGVyLl9mcmFtZSkKKworICAgIGRlZiBfX2x0X18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2ZyYW1lIDwgb3RoZXIuX2ZyYW1lKQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9mcmFtZSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiVzOiVzIiAlIChzZWxmLmZpbGVuYW1lLCBzZWxmLmxpbmVubykKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8RnJhbWUgZmlsZW5hbWU9JXIgbGluZW5vPSVyPiIgJSAoc2VsZi5maWxlbmFtZSwgc2VsZi5saW5lbm8pCisKKworQHRvdGFsX29yZGVyaW5nCitjbGFzcyBUcmFjZWJhY2soU2VxdWVuY2UpOgorICAgICIiIgorICAgIFNlcXVlbmNlIG9mIEZyYW1lIGluc3RhbmNlcyBzb3J0ZWQgZnJvbSB0aGUgbW9zdCByZWNlbnQgZnJhbWUKKyAgICB0byB0aGUgb2xkZXN0IGZyYW1lLgorICAgICIiIgorICAgIF9fc2xvdHNfXyA9ICgiX2ZyYW1lcyIsKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZyYW1lcyk6CisgICAgICAgIFNlcXVlbmNlLl9faW5pdF9fKHNlbGYpCisgICAgICAgICMgZnJhbWVzIGlzIGEgdHVwbGUgb2YgZnJhbWUgdHVwbGVzOiBzZWUgRnJhbWUgY29uc3RydWN0b3IgZm9yIHRoZQorICAgICAgICAjIGZvcm1hdCBvZiBhIGZyYW1lIHR1cGxlCisgICAgICAgIHNlbGYuX2ZyYW1lcyA9IGZyYW1lcworCisgICAgZGVmIF9fbGVuX18oc2VsZik6CisgICAgICAgIHJldHVybiBsZW4oc2VsZi5fZnJhbWVzKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsIGluZGV4KToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShpbmRleCwgc2xpY2UpOgorICAgICAgICAgICAgcmV0dXJuIHR1cGxlKEZyYW1lKHRyYWNlKSBmb3IgdHJhY2UgaW4gc2VsZi5fZnJhbWVzW2luZGV4XSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGcmFtZShzZWxmLl9mcmFtZXNbaW5kZXhdKQorCisgICAgZGVmIF9fY29udGFpbnNfXyhzZWxmLCBmcmFtZSk6CisgICAgICAgIHJldHVybiBmcmFtZS5fZnJhbWUgaW4gc2VsZi5fZnJhbWVzCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2ZyYW1lcykKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICByZXR1cm4gKHNlbGYuX2ZyYW1lcyA9PSBvdGhlci5fZnJhbWVzKQorCisgICAgZGVmIF9fbHRfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fZnJhbWVzIDwgb3RoZXIuX2ZyYW1lcykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc3RyKHNlbGZbMF0pCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPFRyYWNlYmFjayAlcj4iICUgKHR1cGxlKHNlbGYpLCkKKworICAgIGRlZiBmb3JtYXQoc2VsZiwgbGltaXQ9Tm9uZSk6CisgICAgICAgIGxpbmVzID0gW10KKyAgICAgICAgaWYgbGltaXQgaXMgbm90IE5vbmUgYW5kIGxpbWl0IDwgMDoKKyAgICAgICAgICAgIHJldHVybiBsaW5lcworICAgICAgICBmb3IgZnJhbWUgaW4gc2VsZls6bGltaXRdOgorICAgICAgICAgICAgbGluZXMuYXBwZW5kKCcgIEZpbGUgIiVzIiwgbGluZSAlcycKKyAgICAgICAgICAgICAgICAgICAgICAgICAlIChmcmFtZS5maWxlbmFtZSwgZnJhbWUubGluZW5vKSkKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lY2FjaGUuZ2V0bGluZShmcmFtZS5maWxlbmFtZSwgZnJhbWUubGluZW5vKS5zdHJpcCgpCisgICAgICAgICAgICBpZiBsaW5lOgorICAgICAgICAgICAgICAgIGxpbmVzLmFwcGVuZCgnICAgICVzJyAlIGxpbmUpCisgICAgICAgIHJldHVybiBsaW5lcworCisKK2RlZiBnZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopOgorICAgICIiIgorICAgIEdldCB0aGUgdHJhY2ViYWNrIHdoZXJlIHRoZSBQeXRob24gb2JqZWN0ICpvYmoqIHdhcyBhbGxvY2F0ZWQuCisgICAgUmV0dXJuIGEgVHJhY2ViYWNrIGluc3RhbmNlLgorCisgICAgUmV0dXJuIE5vbmUgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyBub3QgdHJhY2luZyBtZW1vcnkgYWxsb2NhdGlvbnMgb3IKKyAgICBkaWQgbm90IHRyYWNlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBvYmplY3QuCisgICAgIiIiCisgICAgZnJhbWVzID0gX2dldF9vYmplY3RfdHJhY2ViYWNrKG9iaikKKyAgICBpZiBmcmFtZXMgaXMgbm90IE5vbmU6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soZnJhbWVzKQorICAgIGVsc2U6CisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgVHJhY2U6CisgICAgIiIiCisgICAgVHJhY2Ugb2YgYSBtZW1vcnkgYmxvY2suCisgICAgIiIiCisgICAgX19zbG90c19fID0gKCJfdHJhY2UiLCkKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZSk6CisgICAgICAgICMgdHJhY2UgaXMgYSB0dXBsZTogKHNpemUsIHRyYWNlYmFjayksIHNlZSBUcmFjZWJhY2sgY29uc3RydWN0b3IKKyAgICAgICAgIyBmb3IgdGhlIGZvcm1hdCBvZiB0aGUgdHJhY2ViYWNrIHR1cGxlCisgICAgICAgIHNlbGYuX3RyYWNlID0gdHJhY2UKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzaXplKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fdHJhY2VbMF0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiB0cmFjZWJhY2soc2VsZik6CisgICAgICAgIHJldHVybiBUcmFjZWJhY2soc2VsZi5fdHJhY2VbMV0pCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgcmV0dXJuIChzZWxmLl90cmFjZSA9PSBvdGhlci5fdHJhY2UpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX3RyYWNlKQorCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiAiJXM6ICVzIiAlIChzZWxmLnRyYWNlYmFjaywgX2Zvcm1hdF9zaXplKHNlbGYuc2l6ZSwgRmFsc2UpKQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gKCI8VHJhY2Ugc2l6ZT0lcywgdHJhY2ViYWNrPSVyPiIKKyAgICAgICAgICAgICAgICAlIChfZm9ybWF0X3NpemUoc2VsZi5zaXplLCBGYWxzZSksIHNlbGYudHJhY2ViYWNrKSkKKworCitjbGFzcyBfVHJhY2VzKFNlcXVlbmNlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdHJhY2VzKToKKyAgICAgICAgU2VxdWVuY2UuX19pbml0X18oc2VsZikKKyAgICAgICAgIyB0cmFjZXMgaXMgYSB0dXBsZSBvZiB0cmFjZSB0dXBsZXM6IHNlZSBUcmFjZSBjb25zdHJ1Y3RvcgorICAgICAgICBzZWxmLl90cmFjZXMgPSB0cmFjZXMKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuX3RyYWNlcykKKworICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoaW5kZXgsIHNsaWNlKToKKyAgICAgICAgICAgIHJldHVybiB0dXBsZShUcmFjZSh0cmFjZSkgZm9yIHRyYWNlIGluIHNlbGYuX3RyYWNlc1tpbmRleF0pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gVHJhY2Uoc2VsZi5fdHJhY2VzW2luZGV4XSkKKworICAgIGRlZiBfX2NvbnRhaW5zX18oc2VsZiwgdHJhY2UpOgorICAgICAgICByZXR1cm4gdHJhY2UuX3RyYWNlIGluIHNlbGYuX3RyYWNlcworCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIHJldHVybiAoc2VsZi5fdHJhY2VzID09IG90aGVyLl90cmFjZXMpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPFRyYWNlcyBsZW49JXM+IiAlIGxlbihzZWxmKQorCisKK2RlZiBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lKToKKyAgICBmaWxlbmFtZSA9IG9zLnBhdGgubm9ybWNhc2UoZmlsZW5hbWUpCisgICAgaWYgZmlsZW5hbWUuZW5kc3dpdGgoKCcucHljJywgJy5weW8nKSk6CisgICAgICAgIGZpbGVuYW1lID0gZmlsZW5hbWVbOi0xXQorICAgIHJldHVybiBmaWxlbmFtZQorCisKK2NsYXNzIEZpbHRlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgaW5jbHVzaXZlLCBmaWxlbmFtZV9wYXR0ZXJuLAorICAgICAgICAgICAgICAgICBsaW5lbm89Tm9uZSwgYWxsX2ZyYW1lcz1GYWxzZSk6CisgICAgICAgIHNlbGYuaW5jbHVzaXZlID0gaW5jbHVzaXZlCisgICAgICAgIHNlbGYuX2ZpbGVuYW1lX3BhdHRlcm4gPSBfbm9ybWFsaXplX2ZpbGVuYW1lKGZpbGVuYW1lX3BhdHRlcm4pCisgICAgICAgIHNlbGYubGluZW5vID0gbGluZW5vCisgICAgICAgIHNlbGYuYWxsX2ZyYW1lcyA9IGFsbF9mcmFtZXMKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBmaWxlbmFtZV9wYXR0ZXJuKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZW5hbWVfcGF0dGVybgorCisgICAgZGVmIF9fbWF0Y2hfZnJhbWUoc2VsZiwgZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgIGZpbGVuYW1lID0gX25vcm1hbGl6ZV9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgaWYgbm90IGZubWF0Y2guZm5tYXRjaChmaWxlbmFtZSwgc2VsZi5fZmlsZW5hbWVfcGF0dGVybik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5saW5lbm8gaXMgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gKGxpbmVubyA9PSBzZWxmLmxpbmVubykKKworICAgIGRlZiBfbWF0Y2hfZnJhbWUoc2VsZiwgZmlsZW5hbWUsIGxpbmVubyk6CisgICAgICAgIHJldHVybiBzZWxmLl9fbWF0Y2hfZnJhbWUoZmlsZW5hbWUsIGxpbmVubykgXiAobm90IHNlbGYuaW5jbHVzaXZlKQorCisgICAgZGVmIF9tYXRjaF90cmFjZWJhY2soc2VsZiwgdHJhY2ViYWNrKToKKyAgICAgICAgaWYgc2VsZi5hbGxfZnJhbWVzOgorICAgICAgICAgICAgaWYgYW55KHNlbGYuX19tYXRjaF9mcmFtZShmaWxlbmFtZSwgbGluZW5vKQorICAgICAgICAgICAgICAgICAgIGZvciBmaWxlbmFtZSwgbGluZW5vIGluIHRyYWNlYmFjayk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5jbHVzaXZlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiAobm90IHNlbGYuaW5jbHVzaXZlKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZW5hbWUsIGxpbmVubyA9IHRyYWNlYmFja1swXQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX21hdGNoX2ZyYW1lKGZpbGVuYW1lLCBsaW5lbm8pCisKKworY2xhc3MgU25hcHNob3Q6CisgICAgIiIiCisgICAgU25hcHNob3Qgb2YgdHJhY2VzIG9mIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0cmFjZXMsIHRyYWNlYmFja19saW1pdCk6CisgICAgICAgICMgdHJhY2VzIGlzIGEgdHVwbGUgb2YgdHJhY2UgdHVwbGVzOiBzZWUgX1RyYWNlcyBjb25zdHJ1Y3RvciBmb3IKKyAgICAgICAgIyB0aGUgZXhhY3QgZm9ybWF0CisgICAgICAgIHNlbGYudHJhY2VzID0gX1RyYWNlcyh0cmFjZXMpCisgICAgICAgIHNlbGYudHJhY2ViYWNrX2xpbWl0ID0gdHJhY2ViYWNrX2xpbWl0CisKKyAgICBkZWYgZHVtcChzZWxmLCBmaWxlbmFtZSk6CisgICAgICAgICIiIgorICAgICAgICBXcml0ZSB0aGUgc25hcHNob3QgaW50byBhIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIG9wZW4oZmlsZW5hbWUsICJ3YiIpIGFzIGZwOgorICAgICAgICAgICAgcGlja2xlLmR1bXAoc2VsZiwgZnAsIHBpY2tsZS5ISUdIRVNUX1BST1RPQ09MKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsb2FkKGZpbGVuYW1lKToKKyAgICAgICAgIiIiCisgICAgICAgIExvYWQgYSBzbmFwc2hvdCBmcm9tIGEgZmlsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CisgICAgICAgICAgICByZXR1cm4gcGlja2xlLmxvYWQoZnApCisKKyAgICBkZWYgX2ZpbHRlcl90cmFjZShzZWxmLCBpbmNsdWRlX2ZpbHRlcnMsIGV4Y2x1ZGVfZmlsdGVycywgdHJhY2UpOgorICAgICAgICB0cmFjZWJhY2sgPSB0cmFjZVsxXQorICAgICAgICBpZiBpbmNsdWRlX2ZpbHRlcnM6CisgICAgICAgICAgICBpZiBub3QgYW55KHRyYWNlX2ZpbHRlci5fbWF0Y2hfdHJhY2ViYWNrKHRyYWNlYmFjaykKKyAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRyYWNlX2ZpbHRlciBpbiBpbmNsdWRlX2ZpbHRlcnMpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBleGNsdWRlX2ZpbHRlcnM6CisgICAgICAgICAgICBpZiBhbnkobm90IHRyYWNlX2ZpbHRlci5fbWF0Y2hfdHJhY2ViYWNrKHRyYWNlYmFjaykKKyAgICAgICAgICAgICAgICAgICBmb3IgdHJhY2VfZmlsdGVyIGluIGV4Y2x1ZGVfZmlsdGVycyk6CisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgZmlsdGVyX3RyYWNlcyhzZWxmLCBmaWx0ZXJzKToKKyAgICAgICAgIiIiCisgICAgICAgIENyZWF0ZSBhIG5ldyBTbmFwc2hvdCBpbnN0YW5jZSB3aXRoIGEgZmlsdGVyZWQgdHJhY2VzIHNlcXVlbmNlLCBmaWx0ZXJzCisgICAgICAgIGlzIGEgbGlzdCBvZiBGaWx0ZXIgaW5zdGFuY2VzLiAgSWYgZmlsdGVycyBpcyBhbiBlbXB0eSBsaXN0LCByZXR1cm4gYQorICAgICAgICBuZXcgU25hcHNob3QgaW5zdGFuY2Ugd2l0aCBhIGNvcHkgb2YgdGhlIHRyYWNlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGZpbHRlcnMsIEl0ZXJhYmxlKToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZmlsdGVycyBtdXN0IGJlIGEgbGlzdCBvZiBmaWx0ZXJzLCBub3QgJXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJSB0eXBlKGZpbHRlcnMpLl9fbmFtZV9fKQorICAgICAgICBpZiBmaWx0ZXJzOgorICAgICAgICAgICAgaW5jbHVkZV9maWx0ZXJzID0gW10KKyAgICAgICAgICAgIGV4Y2x1ZGVfZmlsdGVycyA9IFtdCisgICAgICAgICAgICBmb3IgdHJhY2VfZmlsdGVyIGluIGZpbHRlcnM6CisgICAgICAgICAgICAgICAgaWYgdHJhY2VfZmlsdGVyLmluY2x1c2l2ZToKKyAgICAgICAgICAgICAgICAgICAgaW5jbHVkZV9maWx0ZXJzLmFwcGVuZCh0cmFjZV9maWx0ZXIpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZXhjbHVkZV9maWx0ZXJzLmFwcGVuZCh0cmFjZV9maWx0ZXIpCisgICAgICAgICAgICBuZXdfdHJhY2VzID0gW3RyYWNlIGZvciB0cmFjZSBpbiBzZWxmLnRyYWNlcy5fdHJhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2ZpbHRlcl90cmFjZShpbmNsdWRlX2ZpbHRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRlX2ZpbHRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZSldCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBuZXdfdHJhY2VzID0gc2VsZi50cmFjZXMuX3RyYWNlcy5jb3B5KCkKKyAgICAgICAgcmV0dXJuIFNuYXBzaG90KG5ld190cmFjZXMsIHNlbGYudHJhY2ViYWNrX2xpbWl0KQorCisgICAgZGVmIF9ncm91cF9ieShzZWxmLCBrZXlfdHlwZSwgY3VtdWxhdGl2ZSk6CisgICAgICAgIGlmIGtleV90eXBlIG5vdCBpbiAoJ3RyYWNlYmFjaycsICdmaWxlbmFtZScsICdsaW5lbm8nKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24ga2V5X3R5cGU6ICVyIiAlIChrZXlfdHlwZSwpKQorICAgICAgICBpZiBjdW11bGF0aXZlIGFuZCBrZXlfdHlwZSBub3QgaW4gKCdsaW5lbm8nLCAnZmlsZW5hbWUnKToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoImN1bXVsYXRpdmUgbW9kZSBjYW5ub3QgYnkgdXNlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aXRoIGtleSB0eXBlICVyIiAlIGtleV90eXBlKQorCisgICAgICAgIHN0YXRzID0ge30KKyAgICAgICAgdHJhY2ViYWNrcyA9IHt9CisgICAgICAgIGlmIG5vdCBjdW11bGF0aXZlOgorICAgICAgICAgICAgZm9yIHRyYWNlIGluIHNlbGYudHJhY2VzLl90cmFjZXM6CisgICAgICAgICAgICAgICAgc2l6ZSwgdHJhY2VfdHJhY2ViYWNrID0gdHJhY2UKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRyYWNlYmFjayA9IHRyYWNlYmFja3NbdHJhY2VfdHJhY2ViYWNrXQorICAgICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgaWYga2V5X3R5cGUgPT0gJ3RyYWNlYmFjayc6CisgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSB0cmFjZV90cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgZWxpZiBrZXlfdHlwZSA9PSAnbGluZW5vJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyYW1lcyA9IHRyYWNlX3RyYWNlYmFja1s6MV0KKyAgICAgICAgICAgICAgICAgICAgZWxzZTogIyBrZXlfdHlwZSA9PSAnZmlsZW5hbWUnOgorICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gKCh0cmFjZV90cmFjZWJhY2tbMF1bMF0sIDApLCkKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gVHJhY2ViYWNrKGZyYW1lcykKKyAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrc1t0cmFjZV90cmFjZWJhY2tdID0gdHJhY2ViYWNrCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGF0ID0gc3RhdHNbdHJhY2ViYWNrXQorICAgICAgICAgICAgICAgICAgICBzdGF0LnNpemUgKz0gc2l6ZQorICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHN0YXRzW3RyYWNlYmFja10gPSBTdGF0aXN0aWModHJhY2ViYWNrLCBzaXplLCAxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBjdW11bGF0aXZlIHN0YXRpc3RpY3MKKyAgICAgICAgICAgIGZvciB0cmFjZSBpbiBzZWxmLnRyYWNlcy5fdHJhY2VzOgorICAgICAgICAgICAgICAgIHNpemUsIHRyYWNlX3RyYWNlYmFjayA9IHRyYWNlCisgICAgICAgICAgICAgICAgZm9yIGZyYW1lIGluIHRyYWNlX3RyYWNlYmFjazoKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrID0gdHJhY2ViYWNrc1tmcmFtZV0KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYga2V5X3R5cGUgPT0gJ2xpbmVubyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVzID0gKGZyYW1lLCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6ICMga2V5X3R5cGUgPT0gJ2ZpbGVuYW1lJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmFtZXMgPSAoKGZyYW1lWzBdLCAwKSwpCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2sgPSBUcmFjZWJhY2soZnJhbWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2ViYWNrc1tmcmFtZV0gPSB0cmFjZWJhY2sKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdCA9IHN0YXRzW3RyYWNlYmFja10KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXQuc2l6ZSArPSBzaXplCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0LmNvdW50ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHNbdHJhY2ViYWNrXSA9IFN0YXRpc3RpYyh0cmFjZWJhY2ssIHNpemUsIDEpCisgICAgICAgIHJldHVybiBzdGF0cworCisgICAgZGVmIHN0YXRpc3RpY3Moc2VsZiwga2V5X3R5cGUsIGN1bXVsYXRpdmU9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgR3JvdXAgc3RhdGlzdGljcyBieSBrZXlfdHlwZS4gUmV0dXJuIGEgc29ydGVkIGxpc3Qgb2YgU3RhdGlzdGljCisgICAgICAgIGluc3RhbmNlcy4KKyAgICAgICAgIiIiCisgICAgICAgIGdyb3VwZWQgPSBzZWxmLl9ncm91cF9ieShrZXlfdHlwZSwgY3VtdWxhdGl2ZSkKKyAgICAgICAgc3RhdGlzdGljcyA9IGxpc3QoZ3JvdXBlZC52YWx1ZXMoKSkKKyAgICAgICAgc3RhdGlzdGljcy5zb3J0KHJldmVyc2U9VHJ1ZSwga2V5PVN0YXRpc3RpYy5fc29ydF9rZXkpCisgICAgICAgIHJldHVybiBzdGF0aXN0aWNzCisKKyAgICBkZWYgY29tcGFyZV90byhzZWxmLCBvbGRfc25hcHNob3QsIGtleV90eXBlLCBjdW11bGF0aXZlPUZhbHNlKToKKyAgICAgICAgIiIiCisgICAgICAgIENvbXB1dGUgdGhlIGRpZmZlcmVuY2VzIHdpdGggYW4gb2xkIHNuYXBzaG90IG9sZF9zbmFwc2hvdC4gR2V0CisgICAgICAgIHN0YXRpc3RpY3MgYXMgYSBzb3J0ZWQgbGlzdCBvZiBTdGF0aXN0aWNEaWZmIGluc3RhbmNlcywgZ3JvdXBlZCBieQorICAgICAgICBncm91cF9ieS4KKyAgICAgICAgIiIiCisgICAgICAgIG5ld19ncm91cCA9IHNlbGYuX2dyb3VwX2J5KGtleV90eXBlLCBjdW11bGF0aXZlKQorICAgICAgICBvbGRfZ3JvdXAgPSBvbGRfc25hcHNob3QuX2dyb3VwX2J5KGtleV90eXBlLCBjdW11bGF0aXZlKQorICAgICAgICBzdGF0aXN0aWNzID0gX2NvbXBhcmVfZ3JvdXBlZF9zdGF0cyhvbGRfZ3JvdXAsIG5ld19ncm91cCkKKyAgICAgICAgc3RhdGlzdGljcy5zb3J0KHJldmVyc2U9VHJ1ZSwga2V5PVN0YXRpc3RpY0RpZmYuX3NvcnRfa2V5KQorICAgICAgICByZXR1cm4gc3RhdGlzdGljcworCisKK2RlZiB0YWtlX3NuYXBzaG90KCk6CisgICAgIiIiCisgICAgVGFrZSBhIHNuYXBzaG90IG9mIHRyYWNlcyBvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uCisgICAgIiIiCisgICAgaWYgbm90IGlzX3RyYWNpbmcoKToKKyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJ0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIG11c3QgYmUgdHJhY2luZyBtZW1vcnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgImFsbG9jYXRpb25zIHRvIHRha2UgYSBzbmFwc2hvdCIpCisgICAgdHJhY2VzID0gX2dldF90cmFjZXMoKQorICAgIHRyYWNlYmFja19saW1pdCA9IGdldF90cmFjZWJhY2tfbGltaXQoKQorICAgIHJldHVybiBTbmFwc2hvdCh0cmFjZXMsIHRyYWNlYmFja19saW1pdCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGUucHkgYi9MaWIvdHVydGxlLnB5CmluZGV4IGM2ZWJmYTUuLmNiZDRmNDcgMTAwNjQ0Ci0tLSBhL0xpYi90dXJ0bGUucHkKKysrIGIvTGliL3R1cnRsZS5weQpAQCAtMTA5LDYgKzEwOSw3IEBACiBpbXBvcnQgbWF0aAogaW1wb3J0IHRpbWUKIGltcG9ydCBpbnNwZWN0CitpbXBvcnQgc3lzCiAKIGZyb20gb3MucGF0aCBpbXBvcnQgaXNmaWxlLCBzcGxpdCwgam9pbgogZnJvbSBjb3B5IGltcG9ydCBkZWVwY29weQpAQCAtMTM5LDcgKzE0MCw3IEBACiBfdGdfdXRpbGl0aWVzID0gWyd3cml0ZV9kb2NzdHJpbmdkaWN0JywgJ2RvbmUnXQogCiBfX2FsbF9fID0gKF90Z19jbGFzc2VzICsgX3RnX3NjcmVlbl9mdW5jdGlvbnMgKyBfdGdfdHVydGxlX2Z1bmN0aW9ucyArCi0gICAgICAgICAgIF90Z191dGlsaXRpZXMpICMgKyBfbWF0aF9mdW5jdGlvbnMpCisgICAgICAgICAgIF90Z191dGlsaXRpZXMgKyBbJ1Rlcm1pbmF0b3InXSkgIyArIF9tYXRoX2Z1bmN0aW9ucykKIAogX2FsaWFzX2xpc3QgPSBbJ2FkZHNoYXBlJywgJ2JhY2t3YXJkJywgJ2JrJywgJ2ZkJywgJ2h0JywgJ2x0JywgJ3BkJywgJ3BvcycsCiAgICAgICAgICAgICAgICAncHUnLCAncnQnLCAnc2V0aCcsICdzZXRwb3MnLCAnc2V0cG9zaXRpb24nLCAnc3QnLApAQCAtOTkyLDYgKzk5MywxMyBAQAogICAgICAgICBzZWxmLl9jb2xvcm1vZGUgPSBfQ0ZHWyJjb2xvcm1vZGUiXQogICAgICAgICBzZWxmLl9rZXlzID0gW10KICAgICAgICAgc2VsZi5jbGVhcigpCisgICAgICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJzoKKyAgICAgICAgICAgICMgRm9yY2UgVHVydGxlIHdpbmRvdyB0byB0aGUgZnJvbnQgb24gT1MgWC4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZQorICAgICAgICAgICAgIyB0aGUgVHVydGxlIHdpbmRvdyB3aWxsIHNob3cgYmVoaW5kIHRoZSBUZXJtaW5hbCB3aW5kb3cgd2hlbiB5b3UKKyAgICAgICAgICAgICMgc3RhcnQgdGhlIGRlbW8gZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorICAgICAgICAgICAgcm9vdHdpbmRvdyA9IGN2LndpbmZvX3RvcGxldmVsKCkKKyAgICAgICAgICAgIHJvb3R3aW5kb3cuY2FsbCgnd20nLCAnYXR0cmlidXRlcycsICcuJywgJy10b3Btb3N0JywgJzEnKQorICAgICAgICAgICAgcm9vdHdpbmRvdy5jYWxsKCd3bScsICdhdHRyaWJ1dGVzJywgJy4nLCAnLXRvcG1vc3QnLCAnMCcpCiAKICAgICBkZWYgY2xlYXIoc2VsZik6CiAgICAgICAgICIiIkRlbGV0ZSBhbGwgZHJhd2luZ3MgYW5kIGFsbCB0dXJ0bGVzIGZyb20gdGhlIFR1cnRsZVNjcmVlbi4KQEAgLTEyODAsNyArMTI4OCw3IEBACiAgICAgZGVmIF9pbmNyZW1lbnR1ZGMoc2VsZik6CiAgICAgICAgICIiIkluY3JlbWVudCB1cGRhdGUgY291bnRlci4iIiIKICAgICAgICAgaWYgbm90IFR1cnRsZVNjcmVlbi5fUlVOTklORzoKLSAgICAgICAgICAgIFR1cnRsZVNjcmVlbi5fUlVOTk5JTkcgPSBUcnVlCisgICAgICAgICAgICBUdXJ0bGVTY3JlZW4uX1JVTk5JTkcgPSBUcnVlCiAgICAgICAgICAgICByYWlzZSBUZXJtaW5hdG9yCiAgICAgICAgIGlmIHNlbGYuX3RyYWNpbmcgPiAwOgogICAgICAgICAgICAgc2VsZi5fdXBkYXRlY291bnRlciArPSAxCkBAIC0yNTg3LDcgKzI1OTUsNyBAQAogICAgICAgICBFeGFtcGxlIChmb3IgYSBUdXJ0bGUgaW5zdGFuY2UgbmFtZWQgdHVydGxlKToKICAgICAgICAgPj4+IHR1cnRsZS5zZXR1bmRvYnVmZmVyKDQyKQogICAgICAgICAiIiIKLSAgICAgICAgaWYgc2l6ZSBpcyBOb25lOgorICAgICAgICBpZiBzaXplIGlzIE5vbmUgb3Igc2l6ZSA8PSAwOgogICAgICAgICAgICAgc2VsZi51bmRvYnVmZmVyID0gTm9uZQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgc2VsZi51bmRvYnVmZmVyID0gVGJ1ZmZlcihzaXplKQpAQCAtMjkzOCw3ICsyOTQ2LDcgQEAKICAgICAgICAgc2VsZi5fc3RyZXRjaGZhY3RvciA9IGExMSwgYTIyCiAgICAgICAgIHNlbGYuX3NoZWFyZmFjdG9yID0gYTEyL2EyMgogICAgICAgICBzZWxmLl90aWx0ID0gYWxmYQotICAgICAgICBzZWxmLl91cGRhdGUoKQorICAgICAgICBzZWxmLnBlbihyZXNpemVtb2RlPSJ1c2VyIikKIAogCiAgICAgZGVmIF9wb2x5dHJhZm8oc2VsZiwgcG9seSk6CkBAIC0zNzQ2LDcgKzM3NTQsNyBAQAogICAgICAgICAgICAgVHVydGxlLl9zY3JlZW4gPSBOb25lCiAgICAgICAgICAgICBfU2NyZWVuLl9yb290ID0gTm9uZQogICAgICAgICAgICAgX1NjcmVlbi5fY2FudmFzID0gTm9uZQotICAgICAgICBUdXJ0bGVTY3JlZW4uX1JVTk5JTkcgPSBUcnVlCisgICAgICAgIFR1cnRsZVNjcmVlbi5fUlVOTklORyA9IEZhbHNlCiAgICAgICAgIHJvb3QuZGVzdHJveSgpCiAKICAgICBkZWYgYnllKHNlbGYpOgpAQCAtMzc4Nyw3ICszNzk1LDYgQEAKICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgZXhpdCgwKQogCi0KIGNsYXNzIFR1cnRsZShSYXdUdXJ0bGUpOgogICAgICIiIlJhd1R1cnRsZSBhdXRvLWNyZWF0aW5nIChzY3JvbGxlZCkgY2FudmFzLgogCkBAIC0zODEwLDE4ICszODE3LDYgQEAKIAogUGVuID0gVHVydGxlCiAKLWRlZiBfZ2V0cGVuKCk6Ci0gICAgIiIiQ3JlYXRlIHRoZSAnYW5vbnltb3VzJyB0dXJ0bGUgaWYgbm90IGFscmVhZHkgcHJlc2VudC4iIiIKLSAgICBpZiBUdXJ0bGUuX3BlbiBpcyBOb25lOgotICAgICAgICBUdXJ0bGUuX3BlbiA9IFR1cnRsZSgpCi0gICAgcmV0dXJuIFR1cnRsZS5fcGVuCi0KLWRlZiBfZ2V0c2NyZWVuKCk6Ci0gICAgIiIiQ3JlYXRlIGEgVHVydGxlU2NyZWVuIGlmIG5vdCBhbHJlYWR5IHByZXNlbnQuIiIiCi0gICAgaWYgVHVydGxlLl9zY3JlZW4gaXMgTm9uZToKLSAgICAgICAgVHVydGxlLl9zY3JlZW4gPSBTY3JlZW4oKQotICAgIHJldHVybiBUdXJ0bGUuX3NjcmVlbgotCiBkZWYgd3JpdGVfZG9jc3RyaW5nZGljdChmaWxlbmFtZT0idHVydGxlX2RvY3N0cmluZ2RpY3QiKToKICAgICAiIiJDcmVhdGUgYW5kIHdyaXRlIGRvY3N0cmluZy1kaWN0aW9uYXJ5IHRvIGZpbGUuCiAKQEAgLTM4NDMsMTggKzM4MzgsMTggQEAKICAgICAgICAga2V5ID0gIlR1cnRsZS4iK21ldGhvZG5hbWUKICAgICAgICAgZG9jc2RpY3Rba2V5XSA9IGV2YWwoa2V5KS5fX2RvY19fCiAKLSAgICBmID0gb3BlbigiJXMucHkiICUgZmlsZW5hbWUsInciKQotICAgIGtleXMgPSBzb3J0ZWQoW3ggZm9yIHggaW4gZG9jc2RpY3Qua2V5cygpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKLSAgICBmLndyaXRlKCdkb2NzZGljdCA9IHtcblxuJykKLSAgICBmb3Iga2V5IGluIGtleXNbOi0xXToKKyAgICB3aXRoIG9wZW4oIiVzLnB5IiAlIGZpbGVuYW1lLCJ3IikgYXMgZjoKKyAgICAgICAga2V5cyA9IHNvcnRlZChbeCBmb3IgeCBpbiBkb2NzZGljdC5rZXlzKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB4LnNwbGl0KCcuJylbMV0gbm90IGluIF9hbGlhc19saXN0XSkKKyAgICAgICAgZi53cml0ZSgnZG9jc2RpY3QgPSB7XG5cbicpCisgICAgICAgIGZvciBrZXkgaW4ga2V5c1s6LTFdOgorICAgICAgICAgICAgZi53cml0ZSgnJXMgOlxuJyAlIHJlcHIoa2V5KSkKKyAgICAgICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGtleSA9IGtleXNbLTFdCiAgICAgICAgIGYud3JpdGUoJyVzIDpcbicgJSByZXByKGtleSkpCi0gICAgICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIixcblxuJyAlIGRvY3NkaWN0W2tleV0pCi0gICAga2V5ID0ga2V5c1stMV0KLSAgICBmLndyaXRlKCclcyA6XG4nICUgcmVwcihrZXkpKQotICAgIGYud3JpdGUoJyAgICAgICAgIiIiJXNcbiIiIlxuXG4nICUgZG9jc2RpY3Rba2V5XSkKLSAgICBmLndyaXRlKCJ9XG4iKQotICAgIGYuY2xvc2UoKQorICAgICAgICBmLndyaXRlKCcgICAgICAgICIiIiVzXG4iIiJcblxuJyAlIGRvY3NkaWN0W2tleV0pCisgICAgICAgIGYud3JpdGUoIn1cbiIpCisgICAgICAgIGYuY2xvc2UoKQogCiBkZWYgcmVhZF9kb2NzdHJpbmdzKGxhbmcpOgogICAgICIiIlJlYWQgaW4gZG9jc3RyaW5ncyBmcm9tIGxhbmctc3BlY2lmaWMgZG9jc3RyaW5nIGRpY3Rpb25hcnkuCkBAIC0zOTQ0LDI2ICszOTM5LDM4IEBACiAjIyBhcyBmdW5jdGlvbnMuIFNvIHdlIGNhbiBlbmhhbmNlLCBjaGFuZ2UsIGFkZCwgZGVsZXRlIG1ldGhvZHMgdG8gdGhlc2UKICMjIGNsYXNzZXMgYW5kIGRvIG5vdCBuZWVkIHRvIGNoYW5nZSBhbnl0aGluZyBoZXJlLgogCitfX2Z1bmNfYm9keSA9ICIiIlwKK2RlZiB7bmFtZX17cGFyYW1zbGlzdH06CisgICAgaWYge29ian0gaXMgTm9uZToKKyAgICAgICAgaWYgbm90IFR1cnRsZVNjcmVlbi5fUlVOTklORzoKKyAgICAgICAgICAgIFR1cnRsZVNjcmVlbi5fUlVOTklORyA9IFRydWUKKyAgICAgICAgICAgIHJhaXNlIFRlcm1pbmF0b3IKKyAgICAgICAge29ian0gPSB7aW5pdH0KKyAgICB0cnk6CisgICAgICAgIHJldHVybiB7b2JqfS57bmFtZX17YXJnc2xpc3R9CisgICAgZXhjZXB0IFRLLlRjbEVycm9yOgorICAgICAgICBpZiBub3QgVHVydGxlU2NyZWVuLl9SVU5OSU5HOgorICAgICAgICAgICAgVHVydGxlU2NyZWVuLl9SVU5OSU5HID0gVHJ1ZQorICAgICAgICAgICAgcmFpc2UgVGVybWluYXRvcgorICAgICAgICByYWlzZQorIiIiCiAKLWZvciBtZXRob2RuYW1lIGluIF90Z19zY3JlZW5fZnVuY3Rpb25zOgotICAgIHBsMSwgcGwyID0gZ2V0bWV0aHBhcmxpc3QoZXZhbCgnX1NjcmVlbi4nICsgbWV0aG9kbmFtZSkpCi0gICAgaWYgcGwxID09ICIiOgotICAgICAgICBwcmludCgiPj4+Pj4+IiwgcGwxLCBwbDIpCi0gICAgICAgIGNvbnRpbnVlCi0gICAgZGVmc3RyID0gKCJkZWYgJShrZXkpcyUocGwxKXM6IHJldHVybiBfZ2V0c2NyZWVuKCkuJShrZXkpcyUocGwyKXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeydrZXknOm1ldGhvZG5hbWUsICdwbDEnOnBsMSwgJ3BsMic6cGwyfSkKLSAgICBleGVjKGRlZnN0cikKLSAgICBldmFsKG1ldGhvZG5hbWUpLl9fZG9jX18gPSBfc2NyZWVuX2RvY3JldmlzZShldmFsKCdfU2NyZWVuLicrbWV0aG9kbmFtZSkuX19kb2NfXykKK2RlZiBfbWFrZV9nbG9iYWxfZnVuY3MoZnVuY3Rpb25zLCBjbHMsIG9iaiwgaW5pdCwgZG9jcmV2aXNlKToKKyAgICBmb3IgbWV0aG9kbmFtZSBpbiBmdW5jdGlvbnM6CisgICAgICAgIG1ldGhvZCA9IGdldGF0dHIoY2xzLCBtZXRob2RuYW1lKQorICAgICAgICBwbDEsIHBsMiA9IGdldG1ldGhwYXJsaXN0KG1ldGhvZCkKKyAgICAgICAgaWYgcGwxID09ICIiOgorICAgICAgICAgICAgcHJpbnQoIj4+Pj4+PiIsIHBsMSwgcGwyKQorICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgZGVmc3RyID0gX19mdW5jX2JvZHkuZm9ybWF0KG9iaj1vYmosIGluaXQ9aW5pdCwgbmFtZT1tZXRob2RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zbGlzdD1wbDEsIGFyZ3NsaXN0PXBsMikKKyAgICAgICAgZXhlYyhkZWZzdHIsIGdsb2JhbHMoKSkKKyAgICAgICAgZ2xvYmFscygpW21ldGhvZG5hbWVdLl9fZG9jX18gPSBkb2NyZXZpc2UobWV0aG9kLl9fZG9jX18pCiAKLWZvciBtZXRob2RuYW1lIGluIF90Z190dXJ0bGVfZnVuY3Rpb25zOgotICAgIHBsMSwgcGwyID0gZ2V0bWV0aHBhcmxpc3QoZXZhbCgnVHVydGxlLicgKyBtZXRob2RuYW1lKSkKLSAgICBpZiBwbDEgPT0gIiI6Ci0gICAgICAgIHByaW50KCI+Pj4+Pj4iLCBwbDEsIHBsMikKLSAgICAgICAgY29udGludWUKLSAgICBkZWZzdHIgPSAoImRlZiAlKGtleSlzJShwbDEpczogcmV0dXJuIF9nZXRwZW4oKS4lKGtleSlzJShwbDIpcyIgJQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J2tleSc6bWV0aG9kbmFtZSwgJ3BsMSc6cGwxLCAncGwyJzpwbDJ9KQotICAgIGV4ZWMoZGVmc3RyKQotICAgIGV2YWwobWV0aG9kbmFtZSkuX19kb2NfXyA9IF90dXJ0bGVfZG9jcmV2aXNlKGV2YWwoJ1R1cnRsZS4nK21ldGhvZG5hbWUpLl9fZG9jX18pCitfbWFrZV9nbG9iYWxfZnVuY3MoX3RnX3NjcmVlbl9mdW5jdGlvbnMsIF9TY3JlZW4sCisgICAgICAgICAgICAgICAgICAgJ1R1cnRsZS5fc2NyZWVuJywgJ1NjcmVlbigpJywgX3NjcmVlbl9kb2NyZXZpc2UpCitfbWFrZV9nbG9iYWxfZnVuY3MoX3RnX3R1cnRsZV9mdW5jdGlvbnMsIFR1cnRsZSwKKyAgICAgICAgICAgICAgICAgICAnVHVydGxlLl9wZW4nLCAnVHVydGxlKCknLCBfdHVydGxlX2RvY3JldmlzZSkKIAogCiBkb25lID0gbWFpbmxvb3AKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL19faW5pdF9fLnB5IGIvTGliL3R1cnRsZWRlbW8vX19pbml0X18ucHkKaW5kZXggZTY5ZGUyOS4uNzcxNTBlMiAxMDA2NDQKLS0tIGEvTGliL3R1cnRsZWRlbW8vX19pbml0X18ucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vX19pbml0X18ucHkKQEAgLTAsMCArMSwxNCBAQAorIiIiCisgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgQWJvdXQgdGhpcyB2aWV3ZXIKKyAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGlueSBkZW1vIHZpZXdlciB0byB2aWV3IHR1cnRsZSBncmFwaGljcyBleGFtcGxlIHNjcmlwdHMuCisKKyAgICBRdWlja2x5IGFuZCBkaXJ0eWx5IGFzc2VtYmxlZCBieSBHcmVnb3IgTGluZ2wuCisgICAgSnVuZSwgMjAwNgorCisgICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOiB0dXJ0bGVkZW1vIC0gSGVscAorCisgICAgSGF2ZSBmdW4hCisiIiIKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL19fbWFpbl9fLnB5IGIvTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkKaW5kZXggY2JmM2FlYi4uMTA2ZDA1OCAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vX19tYWluX18ucHkKQEAgLTEsMTcgKzEsMTA0IEBACiAjIS91c3IvYmluL2VudiBweXRob24zCisKKyIiIgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICB0dXJ0bGVEZW1vIC0gSGVscAorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBkb2N1bWVudCBoYXMgdHdvIHNlY3Rpb25zOgorCisgICgxKSBIb3cgdG8gdXNlIHRoZSBkZW1vIHZpZXdlcgorICAoMikgSG93IHRvIGFkZCB5b3VyIG93biBkZW1vcyB0byB0aGUgZGVtbyByZXBvc2l0b3J5CisKKworICAoMSkgSG93IHRvIHVzZSB0aGUgZGVtbyB2aWV3ZXIuCisKKyAgU2VsZWN0IGEgZGVtb3NjcmlwdCBmcm9tIHRoZSBleGFtcGxlIG1lbnUuCisgIFRoZSAoc3ludGF4IGNvbG9yZWQpIHNvdXJjZSBjb2RlIGFwcGVhcnMgaW4gdGhlIGxlZnQKKyAgc291cmNlIGNvZGUgd2luZG93LiBJVCBDQU5OT1QgQkUgRURJVEVELCBidXQgT05MWSBWSUVXRUQhCisKKyAgVGhlIGRlbW8gdmlld2VyIHdpbmRvd3MgY2FuIGJlIHJlc2l6ZWQuIFRoZSBkaXZpZGVyIGJldHdlZW4gdGV4dAorICBhbmQgY2FudmFzIGNhbiBiZSBtb3ZlZCBieSBncmFiYmluZyBpdCB3aXRoIHRoZSBtb3VzZS4gVGhlIHRleHQgZm9udAorICBzaXplIGNhbiBiZSBjaGFuZ2VkIGZyb20gdGhlIG1lbnUgYW5kIHdpdGggQ29udHJvbC9Db21tYW5kICctJy8nKycuCisgIEl0IGNhbiBhbHNvIGJlIGNoYW5nZWQgb24gbW9zdCBzeXN0ZW1zIHdpdGggQ29udHJvbC1tb3VzZXdoZWVsCisgIHdoZW4gdGhlIG1vdXNlIGlzIG92ZXIgdGhlIHRleHQuCisKKyAgUHJlc3MgU1RBUlQgYnV0dG9uIHRvIHN0YXJ0IHRoZSBkZW1vLgorICBTdG9wIGV4ZWN1dGlvbiBieSBwcmVzc2luZyB0aGUgU1RPUCBidXR0b24uCisgIENsZWFyIHNjcmVlbiBieSBwcmVzc2luZyB0aGUgQ0xFQVIgYnV0dG9uLgorICBSZXN0YXJ0IGJ5IHByZXNzaW5nIHRoZSBTVEFSVCBidXR0b24gYWdhaW4uCisKKyAgU1BFQ0lBTCBkZW1vcywgc3VjaCBhcyBjbG9jay5weSBhcmUgdGhvc2Ugd2hpY2ggcnVuIEVWRU5URFJJVkVOLgorCisgICAgICBQcmVzcyBTVEFSVCBidXR0b24gdG8gc3RhcnQgdGhlIGRlbW8uCisKKyAgICAgIC0gVW50aWwgdGhlIEVWRU5UTE9PUCBpcyBlbnRlcmVkIGV2ZXJ5dGhpbmcgd29ya3MKKyAgICAgIGFzIGluIGFuIG9yZGluYXJ5IGRlbW8gc2NyaXB0LgorCisgICAgICAtIFdoZW4gdGhlIEVWRU5UTE9PUCBpcyBlbnRlcmVkLCB5b3UgY29udHJvbCB0aGUKKyAgICAgIGFwcGxpY2F0aW9uIGJ5IHVzaW5nIHRoZSBtb3VzZSBhbmQvb3Iga2V5cyAob3IgaXQncworICAgICAgY29udHJvbGxlZCBieSBzb21lIHRpbWVyIGV2ZW50cykKKyAgICAgIFRvIHN0b3AgaXQgeW91IGNhbiBhbmQgbXVzdCBwcmVzcyB0aGUgU1RPUCBidXR0b24uCisKKyAgICAgIFdoaWxlIHRoZSBFVkVOVExPT1AgaXMgcnVubmluZywgdGhlIGV4YW1wbGVzIG1lbnUgaXMgZGlzYWJsZWQuCisKKyAgICAgIC0gT25seSBhZnRlciBoYXZpbmcgcHJlc3NlZCB0aGUgU1RPUCBidXR0b24sIHlvdSBtYXkKKyAgICAgIHJlc3RhcnQgaXQgb3IgY2hvb3NlIGFub3RoZXIgZXhhbXBsZSBzY3JpcHQuCisKKyAgICogKiAqICogKiAqICogKgorICAgSW4gc29tZSByYXJlIHNpdHVhdGlvbnMgdGhlcmUgbWF5IG9jY3VyIGludGVyZmVyZW5jZXMvY29uZmxpY3RzCisgICBiZXR3ZWVuIGV2ZW50cyBjb25jZXJuaW5nIHRoZSBkZW1vIHNjcmlwdCBhbmQgdGhvc2UgY29uY2VybmluZyB0aGUKKyAgIGRlbW8tdmlld2VyLiAoVGhleSBydW4gaW4gdGhlIHNhbWUgcHJvY2Vzcy4pIFN0cmFuZ2UgYmVoYXZpb3VyIG1heSBiZQorICAgdGhlIGNvbnNlcXVlbmNlIGFuZCBpbiB0aGUgd29yc3QgY2FzZSB5b3UgbXVzdCBjbG9zZSBhbmQgcmVzdGFydCB0aGUKKyAgIHZpZXdlci4KKyAgICogKiAqICogKiAqICogKgorCisKKyAgICgyKSBIb3cgdG8gYWRkIHlvdXIgb3duIGRlbW9zIHRvIHRoZSBkZW1vIHJlcG9zaXRvcnkKKworICAgLSBQbGFjZSB0aGUgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdHVydGxlZGVtby9fX21haW5fXy5weQorICAgICBJTVBPUlRBTlQhIFdoZW4gaW1wb3J0ZWQsIHRoZSBkZW1vIHNob3VsZCBub3QgbW9kaWZ5IHRoZSBzeXN0ZW0KKyAgICAgYnkgY2FsbGluZyBmdW5jdGlvbnMgaW4gb3RoZXIgbW9kdWxlcywgc3VjaCBhcyBzeXMsIHRraW50ZXIsIG9yCisgICAgIHR1cnRsZS4gR2xvYmFsIHZhcmlhYmxlcyBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgaW4gbWFpbigpLgorCisgICAtIFRoZSBjb2RlIG11c3QgY29udGFpbiBhIG1haW4oKSBmdW5jdGlvbiB3aGljaCB3aWxsCisgICAgIGJlIGV4ZWN1dGVkIGJ5IHRoZSB2aWV3ZXIgKHNlZSBwcm92aWRlZCBleGFtcGxlIHNjcmlwdHMpLgorICAgICBJdCBtYXkgcmV0dXJuIGEgc3RyaW5nIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkIGluIHRoZSBMYWJlbCBiZWxvdworICAgICB0aGUgc291cmNlIGNvZGUgd2luZG93ICh3aGVuIGV4ZWN1dGlvbiBoYXMgZmluaXNoZWQuKQorCisgICAtIEluIG9yZGVyIHRvIHJ1biBteWRlbW8ucHkgYnkgaXRzZWxmLCBzdWNoIGFzIGR1cmluZyBkZXZlbG9wbWVudCwKKyAgICAgYWRkIHRoZSBmb2xsb3dpbmcgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZToKKworICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgICAgIG1haW4oKQorICAgICAgICBtYWlubG9vcCgpICAjIGtlZXAgd2luZG93IG9wZW4KKworICAgIHB5dGhvbiAtbSB0dXJ0bGVkZW1vLm15ZGVtbyAgIyB3aWxsIHRoZW4gcnVuIGl0CisKKyAgIC0gSWYgdGhlIGRlbW8gaXMgRVZFTlQgRFJJVkVOLCBtYWluIG11c3QgcmV0dXJuIHRoZSBzdHJpbmcKKyAgICAgIkVWRU5UTE9PUCIuIFRoaXMgaW5mb3JtcyB0aGUgZGVtbyB2aWV3ZXIgdGhhdCB0aGUgc2NyaXB0IGlzCisgICAgIHN0aWxsIHJ1bm5pbmcgYW5kIG11c3QgYmUgc3RvcHBlZCBieSB0aGUgdXNlciEKKworICAgICBJZiBhbiAiRVZFTlRMT09QIiBkZW1vIHJ1bnMgYnkgaXRzZWxmLCBhcyB3aXRoIGNsb2NrLCB3aGljaCB1c2VzCisgICAgIG9udGltZXIsIG9yIG1pbmltYWxfaGFub2ksIHdoaWNoIGxvb3BzIGJ5IHJlY3Vyc2lvbiwgdGhlbiB0aGUKKyAgICAgY29kZSBzaG91bGQgY2F0Y2ggdGhlIHR1cnRsZS5UZXJtaW5hdG9yIGV4Y2VwdGlvbiB0aGF0IHdpbGwgYmUKKyAgICAgcmFpc2VkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgU1RPUCBidXR0b24uICAoUGFpbnQgaXMgbm90IHN1Y2gKKyAgICAgYSBkZW1vOyBpdCBvbmx5IGFjdHMgaW4gcmVzcG9uc2UgdG8gbW91c2UgY2xpY2tzIGFuZCBtb3ZlbWVudHMuKQorIiIiCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKIAogZnJvbSB0a2ludGVyIGltcG9ydCAqCiBmcm9tIGlkbGVsaWIuUGVyY29sYXRvciBpbXBvcnQgUGVyY29sYXRvcgogZnJvbSBpZGxlbGliLkNvbG9yRGVsZWdhdG9yIGltcG9ydCBDb2xvckRlbGVnYXRvcgotZnJvbSBpZGxlbGliLnRleHRWaWV3IGltcG9ydCB2aWV3X2ZpbGUgIyBUZXh0Vmlld2VyCi1mcm9tIGltcCBpbXBvcnQgcmVsb2FkCitmcm9tIGlkbGVsaWIudGV4dFZpZXcgaW1wb3J0IHZpZXdfdGV4dAorZnJvbSB0dXJ0bGVkZW1vIGltcG9ydCBfX2RvY19fIGFzIGFib3V0X3R1cnRsZWRlbW8KIAogaW1wb3J0IHR1cnRsZQogaW1wb3J0IHRpbWUKIAogZGVtb19kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkKK2RhcndpbiA9IHN5cy5wbGF0Zm9ybSA9PSAnZGFyd2luJwogCiBTVEFSVFVQID0gMQogUkVBRFkgPSAyCkBAIC0yMSwxNzAgKzEwOCwyMTMgQEAKIAogbWVudWZvbnQgPSAoIkFyaWFsIiwgMTIsIE5PUk1BTCkKIGJ0bmZvbnQgPSAoIkFyaWFsIiwgMTIsICdib2xkJykKLXR4dGZvbnQgPSAoJ0x1Y2lkYSBDb25zb2xlJywgOCwgJ25vcm1hbCcpCit0eHRmb250ID0gWydMdWNpZGEgQ29uc29sZScsIDEwLCAnbm9ybWFsJ10KKworTUlOSU1VTV9GT05UX1NJWkUgPSA2CitNQVhJTVVNX0ZPTlRfU0laRSA9IDEwMAorZm9udF9zaXplcyA9IFs4LCA5LCAxMCwgMTEsIDEyLCAxNCwgMTgsIDIwLCAyMiwgMjQsIDMwXQogCiBkZWYgZ2V0RXhhbXBsZUVudHJpZXMoKToKICAgICByZXR1cm4gW2VudHJ5WzotM10gZm9yIGVudHJ5IGluIG9zLmxpc3RkaXIoZGVtb19kaXIpIGlmCiAgICAgICAgICAgICBlbnRyeS5lbmRzd2l0aCgiLnB5IikgYW5kIGVudHJ5WzBdICE9ICdfJ10KIAotZGVmIHNob3dEZW1vSGVscCgpOgotICAgIHZpZXdfZmlsZShkZW1vLnJvb3QsICJIZWxwIG9uIHR1cnRsZURlbW8iLAotICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZGVtb19kaXIsICJkZW1vaGVscC50eHQiKSkKLQotZGVmIHNob3dBYm91dERlbW8oKToKLSAgICB2aWV3X2ZpbGUoZGVtby5yb290LCAiQWJvdXQgdHVydGxlRGVtbyIsCi0gICAgICAgICAgICAgIG9zLnBhdGguam9pbihkZW1vX2RpciwgImFib3V0X3R1cnRsZWRlbW8udHh0IikpCi0KLWRlZiBzaG93QWJvdXRUdXJ0bGUoKToKLSAgICB2aWV3X2ZpbGUoZGVtby5yb290LCAiQWJvdXQgdGhlIG5ldyB0dXJ0bGUgbW9kdWxlLiIsCi0gICAgICAgICAgICAgIG9zLnBhdGguam9pbihkZW1vX2RpciwgImFib3V0X3R1cnRsZS50eHQiKSkKK2hlbHBfZW50cmllcyA9ICggICMgKGhlbHBfbGFiZWwsICBoZWxwX2RvYykKKyAgICAoJ1R1cnRsZWRlbW8gaGVscCcsIF9fZG9jX18pLAorICAgICgnQWJvdXQgdHVydGxlZGVtbycsIGFib3V0X3R1cnRsZWRlbW8pLAorICAgICgnQWJvdXQgdHVydGxlIG1vZHVsZScsIHR1cnRsZS5fX2RvY19fKSwKKyAgICApCiAKIGNsYXNzIERlbW9XaW5kb3cob2JqZWN0KToKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT1Ob25lKTogICAjLCByb290PU5vbmUpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlbmFtZT1Ob25lKToKICAgICAgICAgc2VsZi5yb290ID0gcm9vdCA9IHR1cnRsZS5fcm9vdCA9IFRrKCkKKyAgICAgICAgcm9vdC50aXRsZSgnUHl0aG9uIHR1cnRsZS1ncmFwaGljcyBleGFtcGxlcycpCiAgICAgICAgIHJvb3Qud21fcHJvdG9jb2woIldNX0RFTEVURV9XSU5ET1ciLCBzZWxmLl9kZXN0cm95KQogCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgIHNlbGYubUJhciA9IEZyYW1lKHJvb3QsIHJlbGllZj1SQUlTRUQsIGJvcmRlcndpZHRoPTIpCi0gICAgICAgIHNlbGYubUJhci5wYWNrKGZpbGw9WCkKKyAgICAgICAgaWYgZGFyd2luOgorICAgICAgICAgICAgaW1wb3J0IHN1YnByb2Nlc3MKKyAgICAgICAgICAgICMgTWFrZSBzdXJlIHdlIGFyZSB0aGUgY3VycmVudGx5IGFjdGl2YXRlZCBPUyBYIGFwcGxpY2F0aW9uCisgICAgICAgICAgICAjIHNvIHRoYXQgb3VyIG1lbnUgYmFyIGFwcGVhcnMuCisgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbigKKyAgICAgICAgICAgICAgICAgICAgWworICAgICAgICAgICAgICAgICAgICAgICAgJ29zYXNjcmlwdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnLWUnLCAndGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyInLAorICAgICAgICAgICAgICAgICAgICAgICAgJy1lJywgJ3NldCBmcm9udG1vc3Qgb2YgdGhlIGZpcnN0IHByb2Nlc3Mgd2hvc2UgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VuaXggaWQgaXMge30gdG8gdHJ1ZScuZm9ybWF0KG9zLmdldHBpZCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICctZScsICdlbmQgdGVsbCcsCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLkRFVk5VTEwsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsKQogCi0gICAgICAgIHNlbGYuRXhhbXBsZXNCdG4gPSBzZWxmLm1ha2VMb2FkRGVtb01lbnUoKQotICAgICAgICBzZWxmLk9wdGlvbnNCdG4gPSBzZWxmLm1ha2VIZWxwTWVudSgpCi0gICAgICAgIHNlbGYubUJhci50a19tZW51QmFyKHNlbGYuRXhhbXBsZXNCdG4sIHNlbGYuT3B0aW9uc0J0bikgIywgUXVpdEJ0bikKKyAgICAgICAgcm9vdC5ncmlkX3Jvd2NvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKKyAgICAgICAgcm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgwLCB3ZWlnaHQ9MSkKKyAgICAgICAgcm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgxLCBtaW5zaXplPTkwLCB3ZWlnaHQ9MSkKKyAgICAgICAgcm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgyLCBtaW5zaXplPTkwLCB3ZWlnaHQ9MSkKKyAgICAgICAgcm9vdC5ncmlkX2NvbHVtbmNvbmZpZ3VyZSgzLCBtaW5zaXplPTkwLCB3ZWlnaHQ9MSkKIAotICAgICAgICByb290LnRpdGxlKCdQeXRob24gdHVydGxlLWdyYXBoaWNzIGV4YW1wbGVzJykKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgc2VsZi5sZWZ0X2ZyYW1lID0gbGVmdF9mcmFtZSA9IEZyYW1lKHJvb3QpCi0gICAgICAgIHNlbGYudGV4dF9mcmFtZSA9IHRleHRfZnJhbWUgPSBGcmFtZShsZWZ0X2ZyYW1lKQotICAgICAgICBzZWxmLnZiYXIgPSB2YmFyID1TY3JvbGxiYXIodGV4dF9mcmFtZSwgbmFtZT0ndmJhcicpCi0gICAgICAgIHNlbGYudGV4dCA9IHRleHQgPSBUZXh0KHRleHRfZnJhbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9J3RleHQnLCBwYWR4PTUsIHdyYXA9J25vbmUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD00NSkKLSAgICAgICAgdmJhclsnY29tbWFuZCddID0gdGV4dC55dmlldwotICAgICAgICB2YmFyLnBhY2soc2lkZT1MRUZULCBmaWxsPVkpCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICBzZWxmLmhiYXIgPSBoYmFyID1TY3JvbGxiYXIodGV4dF9mcmFtZSwgbmFtZT0naGJhcicsIG9yaWVudD1IT1JJWk9OVEFMKQotICAgICAgICBoYmFyWydjb21tYW5kJ10gPSB0ZXh0Lnh2aWV3Ci0gICAgICAgIGhiYXIucGFjayhzaWRlPUJPVFRPTSwgZmlsbD1YKQotICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgdGV4dFsneXNjcm9sbGNvbW1hbmQnXSA9IHZiYXIuc2V0Ci0gICAgICAgIHRleHQuY29uZmlnKGZvbnQ9dHh0Zm9udCkKLSAgICAgICAgdGV4dC5jb25maWcoeHNjcm9sbGNvbW1hbmQ9aGJhci5zZXQpCi0gICAgICAgIHRleHQucGFjayhzaWRlPUxFRlQsIGZpbGw9WSwgZXhwYW5kPTEpCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICBzZWxmLm91dHB1dF9sYmwgPSBMYWJlbChsZWZ0X2ZyYW1lLCBoZWlnaHQ9IDEsdGV4dD0iIC0tLSAiLCBiZyA9ICIjZGRmIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udCA9ICgiQXJpYWwiLCAxNiwgJ25vcm1hbCcpKQotICAgICAgICBzZWxmLm91dHB1dF9sYmwucGFjayhzaWRlPUJPVFRPTSwgZXhwYW5kPTAsIGZpbGw9WCkKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgIHRleHRfZnJhbWUucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCwgZXhwYW5kPTApCi0gICAgICAgIGxlZnRfZnJhbWUucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCwgZXhwYW5kPTApCi0gICAgICAgIHNlbGYuZ3JhcGhfZnJhbWUgPSBnX2ZyYW1lID0gRnJhbWUocm9vdCkKKyAgICAgICAgc2VsZi5tQmFyID0gTWVudShyb290LCByZWxpZWY9UkFJU0VELCBib3JkZXJ3aWR0aD0yKQorICAgICAgICBzZWxmLm1CYXIuYWRkX2Nhc2NhZGUobWVudT1zZWxmLm1ha2VMb2FkRGVtb01lbnUoc2VsZi5tQmFyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPSdFeGFtcGxlcycsIHVuZGVybGluZT0wKQorICAgICAgICBzZWxmLm1CYXIuYWRkX2Nhc2NhZGUobWVudT1zZWxmLm1ha2VGb250TWVudShzZWxmLm1CYXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw9J0ZvbnRzaXplJywgdW5kZXJsaW5lPTApCisgICAgICAgIHNlbGYubUJhci5hZGRfY2FzY2FkZShtZW51PXNlbGYubWFrZUhlbHBNZW51KHNlbGYubUJhciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbD0nSGVscCcsIHVuZGVybGluZT0wKQorICAgICAgICByb290WydtZW51J10gPSBzZWxmLm1CYXIKIAotICAgICAgICB0dXJ0bGUuX1NjcmVlbi5fcm9vdCA9IGdfZnJhbWUKLSAgICAgICAgdHVydGxlLl9TY3JlZW4uX2NhbnZhcyA9IHR1cnRsZS5TY3JvbGxlZENhbnZhcyhnX2ZyYW1lLCA4MDAsIDYwMCwgMTAwMCwgODAwKQotICAgICAgICAjeHR1cnRsZS5TY3JlZW4uX2NhbnZhcy5wYWNrKGV4cGFuZD0xLCBmaWxsPSJib3RoIikKLSAgICAgICAgc2VsZi5zY3JlZW4gPSBfc18gPSB0dXJ0bGUuU2NyZWVuKCkKLSMjIyMjCi0gICAgICAgIHR1cnRsZS5UdXJ0bGVTY3JlZW4uX19pbml0X18oX3NfLCBfc18uX2NhbnZhcykKLSMjIyMjCi0gICAgICAgIHNlbGYuc2NhbnZhcyA9IF9zXy5fY2FudmFzCi0gICAgICAgICN4dHVydGxlLlJhd1R1cnRsZS5jYW52YXNlcyA9IFtzZWxmLnNjYW52YXNdCi0gICAgICAgIHR1cnRsZS5SYXdUdXJ0bGUuc2NyZWVucyA9IFtfc19dCisgICAgICAgIHBhbmUgPSBQYW5lZFdpbmRvdyhvcmllbnQ9SE9SSVpPTlRBTCwgc2FzaHdpZHRoPTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXNocmVsaWVmPVNPTElELCBiZz0nI2RkZCcpCisgICAgICAgIHBhbmUuYWRkKHNlbGYubWFrZVRleHRGcmFtZShwYW5lKSkKKyAgICAgICAgcGFuZS5hZGQoc2VsZi5tYWtlR3JhcGhGcmFtZShwYW5lKSkKKyAgICAgICAgcGFuZS5ncmlkKHJvdz0wLCBjb2x1bW5zcGFuPTQsIHN0aWNreT0nbmV3cycpCiAKLSAgICAgICAgc2VsZi5zY2FudmFzLnBhY2soc2lkZT1UT1AsIGZpbGw9Qk9USCwgZXhwYW5kPTEpCisgICAgICAgIHNlbGYub3V0cHV0X2xibCA9IExhYmVsKHJvb3QsIGhlaWdodD0gMSwgdGV4dD0iIC0tLSAiLCBiZz0iI2RkZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnQ9KCJBcmlhbCIsIDE2LCAnbm9ybWFsJyksIGJvcmRlcndpZHRoPTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGllZj1SSURHRSkKKyAgICAgICAgc2VsZi5zdGFydF9idG4gPSBCdXR0b24ocm9vdCwgdGV4dD0iIFNUQVJUICIsIGZvbnQ9YnRuZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9IndoaXRlIiwgZGlzYWJsZWRmb3JlZ3JvdW5kID0gIiNmZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNlbGYuc3RhcnREZW1vKQorICAgICAgICBzZWxmLnN0b3BfYnRuID0gQnV0dG9uKHJvb3QsIHRleHQ9IiBTVE9QICIsIGZvbnQ9YnRuZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZz0id2hpdGUiLCBkaXNhYmxlZGZvcmVncm91bmQgPSAiI2ZlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZD1zZWxmLnN0b3BJdCkKKyAgICAgICAgc2VsZi5jbGVhcl9idG4gPSBCdXR0b24ocm9vdCwgdGV4dD0iIENMRUFSICIsIGZvbnQ9YnRuZm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmc9IndoaXRlIiwgZGlzYWJsZWRmb3JlZ3JvdW5kPSIjZmVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCA9IHNlbGYuY2xlYXJDYW52YXMpCisgICAgICAgIHNlbGYub3V0cHV0X2xibC5ncmlkKHJvdz0xLCBjb2x1bW49MCwgc3RpY2t5PSduZXdzJywgcGFkeD0oMCw1KSkKKyAgICAgICAgc2VsZi5zdGFydF9idG4uZ3JpZChyb3c9MSwgY29sdW1uPTEsIHN0aWNreT0nZXcnKQorICAgICAgICBzZWxmLnN0b3BfYnRuLmdyaWQocm93PTEsIGNvbHVtbj0yLCBzdGlja3k9J2V3JykKKyAgICAgICAgc2VsZi5jbGVhcl9idG4uZ3JpZChyb3c9MSwgY29sdW1uPTMsIHN0aWNreT0nZXcnKQogCi0gICAgICAgIHNlbGYuYnRuX2ZyYW1lID0gYnRuX2ZyYW1lID0gRnJhbWUoZ19mcmFtZSwgaGVpZ2h0PTEwMCkKLSAgICAgICAgc2VsZi5zdGFydF9idG4gPSBCdXR0b24oYnRuX2ZyYW1lLCB0ZXh0PSIgU1RBUlQgIiwgZm9udD1idG5mb250LCBmZyA9ICJ3aGl0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkZm9yZWdyb3VuZCA9ICIjZmVkIiwgY29tbWFuZD1zZWxmLnN0YXJ0RGVtbykKLSAgICAgICAgc2VsZi5zdGFydF9idG4ucGFjayhzaWRlPUxFRlQsIGZpbGw9WCwgZXhwYW5kPTEpCi0gICAgICAgIHNlbGYuc3RvcF9idG4gPSBCdXR0b24oYnRuX2ZyYW1lLCB0ZXh0PSIgU1RPUCAiLCAgZm9udD1idG5mb250LCBmZyA9ICJ3aGl0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkZm9yZWdyb3VuZCA9ICIjZmVkIiwgY29tbWFuZCA9IHNlbGYuc3RvcEl0KQotICAgICAgICBzZWxmLnN0b3BfYnRuLnBhY2soc2lkZT1MRUZULCBmaWxsPVgsIGV4cGFuZD0xKQotICAgICAgICBzZWxmLmNsZWFyX2J0biA9IEJ1dHRvbihidG5fZnJhbWUsIHRleHQ9IiBDTEVBUiAiLCAgZm9udD1idG5mb250LCBmZyA9ICJ3aGl0ZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkZm9yZWdyb3VuZCA9ICIjZmVkIiwgY29tbWFuZCA9IHNlbGYuY2xlYXJDYW52YXMpCi0gICAgICAgIHNlbGYuY2xlYXJfYnRuLnBhY2soc2lkZT1MRUZULCBmaWxsPVgsIGV4cGFuZD0xKQotCi0gICAgICAgIHNlbGYuYnRuX2ZyYW1lLnBhY2soc2lkZT1UT1AsIGZpbGw9Qk9USCwgZXhwYW5kPTApCi0gICAgICAgIHNlbGYuZ3JhcGhfZnJhbWUucGFjayhzaWRlPVRPUCwgZmlsbD1CT1RILCBleHBhbmQ9MSkKLQotICAgICAgICBQZXJjb2xhdG9yKHRleHQpLmluc2VydGZpbHRlcihDb2xvckRlbGVnYXRvcigpKQorICAgICAgICBQZXJjb2xhdG9yKHNlbGYudGV4dCkuaW5zZXJ0ZmlsdGVyKENvbG9yRGVsZWdhdG9yKCkpCiAgICAgICAgIHNlbGYuZGlydHkgPSBGYWxzZQogICAgICAgICBzZWxmLmV4aXRmbGFnID0gRmFsc2UKICAgICAgICAgaWYgZmlsZW5hbWU6CiAgICAgICAgICAgICBzZWxmLmxvYWRmaWxlKGZpbGVuYW1lKQotICAgICAgICBzZWxmLmNvbmZpZ0dVSShOT1JNQUwsIERJU0FCTEVELCBESVNBQkxFRCwgRElTQUJMRUQsCisgICAgICAgIHNlbGYuY29uZmlnR1VJKERJU0FCTEVELCBESVNBQkxFRCwgRElTQUJMRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICJDaG9vc2UgZXhhbXBsZSBmcm9tIG1lbnUiLCAiYmxhY2siKQogICAgICAgICBzZWxmLnN0YXRlID0gU1RBUlRVUAogCi0gICAgZGVmIF9kZXN0cm95KHNlbGYpOgotICAgICAgICBzZWxmLnJvb3QuZGVzdHJveSgpCi0gICAgICAgIHN5cy5leGl0KCkKIAotICAgIGRlZiBjb25maWdHVUkoc2VsZiwgbWVudSwgc3RhcnQsIHN0b3AsIGNsZWFyLCB0eHQ9IiIsIGNvbG9yPSJibHVlIik6Ci0gICAgICAgIHNlbGYuRXhhbXBsZXNCdG4uY29uZmlnKHN0YXRlPW1lbnUpCisgICAgZGVmIG9uUmVzaXplKHNlbGYsIGV2ZW50KToKKyAgICAgICAgY3dpZHRoID0gc2VsZi5fY2FudmFzLndpbmZvX3dpZHRoKCkKKyAgICAgICAgY2hlaWdodCA9IHNlbGYuX2NhbnZhcy53aW5mb19oZWlnaHQoKQorICAgICAgICBzZWxmLl9jYW52YXMueHZpZXdfbW92ZXRvKDAuNSooc2VsZi5jYW52d2lkdGgtY3dpZHRoKS9zZWxmLmNhbnZ3aWR0aCkKKyAgICAgICAgc2VsZi5fY2FudmFzLnl2aWV3X21vdmV0bygwLjUqKHNlbGYuY2FudmhlaWdodC1jaGVpZ2h0KS9zZWxmLmNhbnZoZWlnaHQpCiAKLSAgICAgICAgc2VsZi5zdGFydF9idG4uY29uZmlnKHN0YXRlPXN0YXJ0KQotICAgICAgICBpZiBzdGFydCA9PSBOT1JNQUw6Ci0gICAgICAgICAgICBzZWxmLnN0YXJ0X2J0bi5jb25maWcoYmc9IiNkMDAiKQorICAgIGRlZiBtYWtlVGV4dEZyYW1lKHNlbGYsIHJvb3QpOgorICAgICAgICBzZWxmLnRleHRfZnJhbWUgPSB0ZXh0X2ZyYW1lID0gRnJhbWUocm9vdCkKKyAgICAgICAgc2VsZi50ZXh0ID0gdGV4dCA9IFRleHQodGV4dF9mcmFtZSwgbmFtZT0ndGV4dCcsIHBhZHg9NSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JhcD0nbm9uZScsIHdpZHRoPTQ1KQorCisgICAgICAgIHNlbGYudmJhciA9IHZiYXIgPSBTY3JvbGxiYXIodGV4dF9mcmFtZSwgbmFtZT0ndmJhcicpCisgICAgICAgIHZiYXJbJ2NvbW1hbmQnXSA9IHRleHQueXZpZXcKKyAgICAgICAgdmJhci5wYWNrKHNpZGU9TEVGVCwgZmlsbD1ZKQorICAgICAgICBzZWxmLmhiYXIgPSBoYmFyID0gU2Nyb2xsYmFyKHRleHRfZnJhbWUsIG5hbWU9J2hiYXInLCBvcmllbnQ9SE9SSVpPTlRBTCkKKyAgICAgICAgaGJhclsnY29tbWFuZCddID0gdGV4dC54dmlldworICAgICAgICBoYmFyLnBhY2soc2lkZT1CT1RUT00sIGZpbGw9WCkKKyAgICAgICAgdGV4dFsneXNjcm9sbGNvbW1hbmQnXSA9IHZiYXIuc2V0CisgICAgICAgIHRleHRbJ3hzY3JvbGxjb21tYW5kJ10gPSBoYmFyLnNldAorCisgICAgICAgIHRleHRbJ2ZvbnQnXSA9IHR1cGxlKHR4dGZvbnQpCisgICAgICAgIHNob3J0Y3V0ID0gJ0NvbW1hbmQnIGlmIGRhcndpbiBlbHNlICdDb250cm9sJworICAgICAgICB0ZXh0LmJpbmRfYWxsKCc8JXMtbWludXM+JyAlIHNob3J0Y3V0LCBzZWxmLmRlY3JlYXNlX3NpemUpCisgICAgICAgIHRleHQuYmluZF9hbGwoJzwlcy11bmRlcnNjb3JlPicgJSBzaG9ydGN1dCwgc2VsZi5kZWNyZWFzZV9zaXplKQorICAgICAgICB0ZXh0LmJpbmRfYWxsKCc8JXMtZXF1YWw+JyAlIHNob3J0Y3V0LCBzZWxmLmluY3JlYXNlX3NpemUpCisgICAgICAgIHRleHQuYmluZF9hbGwoJzwlcy1wbHVzPicgJSBzaG9ydGN1dCwgc2VsZi5pbmNyZWFzZV9zaXplKQorICAgICAgICB0ZXh0LmJpbmQoJzxDb250cm9sLU1vdXNlV2hlZWw+Jywgc2VsZi51cGRhdGVfbW91c2V3aGVlbCkKKyAgICAgICAgdGV4dC5iaW5kKCc8Q29udHJvbC1CdXR0b24tND4nLCBzZWxmLmluY3JlYXNlX3NpemUpCisgICAgICAgIHRleHQuYmluZCgnPENvbnRyb2wtQnV0dG9uLTU+Jywgc2VsZi5kZWNyZWFzZV9zaXplKQorCisgICAgICAgIHRleHQucGFjayhzaWRlPUxFRlQsIGZpbGw9Qk9USCwgZXhwYW5kPTEpCisgICAgICAgIHJldHVybiB0ZXh0X2ZyYW1lCisKKyAgICBkZWYgbWFrZUdyYXBoRnJhbWUoc2VsZiwgcm9vdCk6CisgICAgICAgIHR1cnRsZS5fU2NyZWVuLl9yb290ID0gcm9vdAorICAgICAgICBzZWxmLmNhbnZ3aWR0aCA9IDEwMDAKKyAgICAgICAgc2VsZi5jYW52aGVpZ2h0ID0gODAwCisgICAgICAgIHR1cnRsZS5fU2NyZWVuLl9jYW52YXMgPSBzZWxmLl9jYW52YXMgPSBjYW52YXMgPSB0dXJ0bGUuU2Nyb2xsZWRDYW52YXMoCisgICAgICAgICAgICAgICAgcm9vdCwgODAwLCA2MDAsIHNlbGYuY2FudndpZHRoLCBzZWxmLmNhbnZoZWlnaHQpCisgICAgICAgIGNhbnZhcy5hZGp1c3RTY3JvbGxzKCkKKyAgICAgICAgY2FudmFzLl9yb290d2luZG93LmJpbmQoJzxDb25maWd1cmU+Jywgc2VsZi5vblJlc2l6ZSkKKyAgICAgICAgY2FudmFzLl9jYW52YXNbJ2JvcmRlcndpZHRoJ10gPSAwCisKKyAgICAgICAgc2VsZi5zY3JlZW4gPSBfc18gPSB0dXJ0bGUuU2NyZWVuKCkKKyAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fX2luaXRfXyhfc18sIF9zXy5fY2FudmFzKQorICAgICAgICBzZWxmLnNjYW52YXMgPSBfc18uX2NhbnZhcworICAgICAgICB0dXJ0bGUuUmF3VHVydGxlLnNjcmVlbnMgPSBbX3NfXQorICAgICAgICByZXR1cm4gY2FudmFzCisKKyAgICBkZWYgc2V0X3R4dHNpemUoc2VsZiwgc2l6ZSk6CisgICAgICAgIHR4dGZvbnRbMV0gPSBzaXplCisgICAgICAgIHNlbGYudGV4dFsnZm9udCddID0gdHVwbGUodHh0Zm9udCkKKyAgICAgICAgc2VsZi5vdXRwdXRfbGJsWyd0ZXh0J10gPSAnRm9udCBzaXplICVkJyAlIHNpemUKKworICAgIGRlZiBkZWNyZWFzZV9zaXplKHNlbGYsIGR1bW15PU5vbmUpOgorICAgICAgICBzZWxmLnNldF90eHRzaXplKG1heCh0eHRmb250WzFdIC0gMSwgTUlOSU1VTV9GT05UX1NJWkUpKQorICAgICAgICByZXR1cm4gJ2JyZWFrJworCisgICAgZGVmIGluY3JlYXNlX3NpemUoc2VsZiwgZHVtbXk9Tm9uZSk6CisgICAgICAgIHNlbGYuc2V0X3R4dHNpemUobWluKHR4dGZvbnRbMV0gKyAxLCBNQVhJTVVNX0ZPTlRfU0laRSkpCisgICAgICAgIHJldHVybiAnYnJlYWsnCisKKyAgICBkZWYgdXBkYXRlX21vdXNld2hlZWwoc2VsZiwgZXZlbnQpOgorICAgICAgICAjIEZvciB3aGVlbCB1cCwgZXZlbnQuZGVsdGUgPSAxMjAgb24gV2luZG93cywgLTEgb24gZGFyd2luLgorICAgICAgICAjIFgtMTEgc2VuZHMgQ29udHJvbC1CdXR0b24tNCBldmVudCBpbnN0ZWFkLgorICAgICAgICBpZiAoZXZlbnQuZGVsdGEgPCAwKSA9PSAobm90IGRhcndpbik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5kZWNyZWFzZV9zaXplKCkKICAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc3RhcnRfYnRuLmNvbmZpZyhiZz0iI2ZjYSIpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmNyZWFzZV9zaXplKCkKIAotICAgICAgICBzZWxmLnN0b3BfYnRuLmNvbmZpZyhzdGF0ZT1zdG9wKQotICAgICAgICBpZiBzdG9wID09IE5PUk1BTDoKLSAgICAgICAgICAgIHNlbGYuc3RvcF9idG4uY29uZmlnKGJnPSIjZDAwIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuc3RvcF9idG4uY29uZmlnKGJnPSIjZmNhIikKLSAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKHN0YXRlPWNsZWFyKQotCi0gICAgICAgIHNlbGYuY2xlYXJfYnRuLmNvbmZpZyhzdGF0ZT1jbGVhcikKLSAgICAgICAgaWYgY2xlYXIgPT0gTk9STUFMOgotICAgICAgICAgICAgc2VsZi5jbGVhcl9idG4uY29uZmlnKGJnPSIjZDAwIikKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHNlbGYuY2xlYXJfYnRuLmNvbmZpZyhiZz0iI2ZjYSIpCi0KKyAgICBkZWYgY29uZmlnR1VJKHNlbGYsIHN0YXJ0LCBzdG9wLCBjbGVhciwgdHh0PSIiLCBjb2xvcj0iYmx1ZSIpOgorICAgICAgICBzZWxmLnN0YXJ0X2J0bi5jb25maWcoc3RhdGU9c3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZz0iI2QwMCIgaWYgc3RhcnQgPT0gTk9STUFMIGVsc2UgIiNmY2EiKQorICAgICAgICBzZWxmLnN0b3BfYnRuLmNvbmZpZyhzdGF0ZT1zdG9wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZz0iI2QwMCIgaWYgc3RvcCA9PSBOT1JNQUwgZWxzZSAiI2ZjYSIpCisgICAgICAgIHNlbGYuY2xlYXJfYnRuLmNvbmZpZyhzdGF0ZT1jbGVhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJnPSIjZDAwIiBpZiBjbGVhciA9PSBOT1JNQUwgZWxzZSIjZmNhIikKICAgICAgICAgc2VsZi5vdXRwdXRfbGJsLmNvbmZpZyh0ZXh0PXR4dCwgZmc9Y29sb3IpCiAKLQotICAgIGRlZiBtYWtlTG9hZERlbW9NZW51KHNlbGYpOgotICAgICAgICBDbWRCdG4gPSBNZW51YnV0dG9uKHNlbGYubUJhciwgdGV4dD0nRXhhbXBsZXMnLCB1bmRlcmxpbmU9MCwgZm9udD1tZW51Zm9udCkKLSAgICAgICAgQ21kQnRuLnBhY2soc2lkZT1MRUZULCBwYWR4PSIybSIpCi0gICAgICAgIENtZEJ0bi5tZW51ID0gTWVudShDbWRCdG4pCisgICAgZGVmIG1ha2VMb2FkRGVtb01lbnUoc2VsZiwgbWFzdGVyKToKKyAgICAgICAgbWVudSA9IE1lbnUobWFzdGVyKQogCiAgICAgICAgIGZvciBlbnRyeSBpbiBnZXRFeGFtcGxlRW50cmllcygpOgotICAgICAgICAgICAgZGVmIGxvYWRleGFtcGxlKHgpOgotICAgICAgICAgICAgICAgIGRlZiBlbWl0KCk6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYubG9hZGZpbGUoeCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZW1pdAotICAgICAgICAgICAgQ21kQnRuLm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9ZW50cnksIHVuZGVybGluZT0wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udD1tZW51Zm9udCwgY29tbWFuZD1sb2FkZXhhbXBsZShlbnRyeSkpCisgICAgICAgICAgICBkZWYgbG9hZChlbnRyeT1lbnRyeSk6CisgICAgICAgICAgICAgICAgc2VsZi5sb2FkZmlsZShlbnRyeSkKKyAgICAgICAgICAgIG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9ZW50cnksIHVuZGVybGluZT0wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250PW1lbnVmb250LCBjb21tYW5kPWxvYWQpCisgICAgICAgIHJldHVybiBtZW51CiAKLSAgICAgICAgQ21kQnRuWydtZW51J10gPSBDbWRCdG4ubWVudQotICAgICAgICByZXR1cm4gQ21kQnRuCisgICAgZGVmIG1ha2VGb250TWVudShzZWxmLCBtYXN0ZXIpOgorICAgICAgICBtZW51ID0gTWVudShtYXN0ZXIpCisgICAgICAgIG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9IkRlY3JlYXNlIChDLSctJykiLCBjb21tYW5kPXNlbGYuZGVjcmVhc2Vfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmb250PW1lbnVmb250KQorICAgICAgICBtZW51LmFkZF9jb21tYW5kKGxhYmVsPSJJbmNyZWFzZSAoQy0nKycpIiwgY29tbWFuZD1zZWxmLmluY3JlYXNlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgZm9udD1tZW51Zm9udCkKKyAgICAgICAgbWVudS5hZGRfc2VwYXJhdG9yKCkKIAotICAgIGRlZiBtYWtlSGVscE1lbnUoc2VsZik6Ci0gICAgICAgIENtZEJ0biA9IE1lbnVidXR0b24oc2VsZi5tQmFyLCB0ZXh0PSdIZWxwJywgdW5kZXJsaW5lPTAsIGZvbnQ9bWVudWZvbnQpCi0gICAgICAgIENtZEJ0bi5wYWNrKHNpZGU9TEVGVCwgcGFkeD0nMm0nKQotICAgICAgICBDbWRCdG4ubWVudSA9IE1lbnUoQ21kQnRuKQorICAgICAgICBmb3Igc2l6ZSBpbiBmb250X3NpemVzOgorICAgICAgICAgICAgZGVmIHJlc2l6ZShzaXplPXNpemUpOgorICAgICAgICAgICAgICAgIHNlbGYuc2V0X3R4dHNpemUoc2l6ZSkKKyAgICAgICAgICAgIG1lbnUuYWRkX2NvbW1hbmQobGFiZWw9c3RyKHNpemUpLCB1bmRlcmxpbmU9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udD1tZW51Zm9udCwgY29tbWFuZD1yZXNpemUpCisgICAgICAgIHJldHVybiBtZW51CiAKLSAgICAgICAgQ21kQnRuLm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9J0Fib3V0IHR1cnRsZS5weScsIGZvbnQ9bWVudWZvbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ9c2hvd0Fib3V0VHVydGxlKQotICAgICAgICBDbWRCdG4ubWVudS5hZGRfY29tbWFuZChsYWJlbD0ndHVydGxlRGVtbyAtIEhlbHAnLCBmb250PW1lbnVmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNob3dEZW1vSGVscCkKLSAgICAgICAgQ21kQnRuLm1lbnUuYWRkX2NvbW1hbmQobGFiZWw9J0Fib3V0IHR1cnRsZURlbW8nLCBmb250PW1lbnVmb250LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kPXNob3dBYm91dERlbW8pCisgICAgZGVmIG1ha2VIZWxwTWVudShzZWxmLCBtYXN0ZXIpOgorICAgICAgICBtZW51ID0gTWVudShtYXN0ZXIpCiAKLSAgICAgICAgQ21kQnRuWydtZW51J10gPSBDbWRCdG4ubWVudQotICAgICAgICByZXR1cm4gQ21kQnRuCisgICAgICAgIGZvciBoZWxwX2xhYmVsLCBoZWxwX2ZpbGUgaW4gaGVscF9lbnRyaWVzOgorICAgICAgICAgICAgZGVmIHNob3coaGVscF9sYWJlbD1oZWxwX2xhYmVsLCBoZWxwX2ZpbGU9aGVscF9maWxlKToKKyAgICAgICAgICAgICAgICB2aWV3X3RleHQoc2VsZi5yb290LCBoZWxwX2xhYmVsLCBoZWxwX2ZpbGUpCisgICAgICAgICAgICBtZW51LmFkZF9jb21tYW5kKGxhYmVsPWhlbHBfbGFiZWwsIGZvbnQ9bWVudWZvbnQsIGNvbW1hbmQ9c2hvdykKKyAgICAgICAgcmV0dXJuIG1lbnUKIAogICAgIGRlZiByZWZyZXNoQ2FudmFzKHNlbGYpOgotICAgICAgICBpZiBub3Qgc2VsZi5kaXJ0eTogcmV0dXJuCi0gICAgICAgIHNlbGYuc2NyZWVuLmNsZWFyKCkKLSAgICAgICAgI3NlbGYuc2NyZWVuLm1vZGUoInN0YW5kYXJkIikKLSAgICAgICAgc2VsZi5kaXJ0eT1GYWxzZQorICAgICAgICBpZiBzZWxmLmRpcnR5OgorICAgICAgICAgICAgc2VsZi5zY3JlZW4uY2xlYXIoKQorICAgICAgICAgICAgc2VsZi5kaXJ0eT1GYWxzZQogCiAgICAgZGVmIGxvYWRmaWxlKHNlbGYsIGZpbGVuYW1lKToKLSAgICAgICAgc2VsZi5yZWZyZXNoQ2FudmFzKCkKKyAgICAgICAgc2VsZi5jbGVhckNhbnZhcygpCisgICAgICAgIHR1cnRsZS5UdXJ0bGVTY3JlZW4uX1JVTk5JTkcgPSBGYWxzZQogICAgICAgICBtb2RuYW1lID0gJ3R1cnRsZWRlbW8uJyArIGZpbGVuYW1lCiAgICAgICAgIF9faW1wb3J0X18obW9kbmFtZSkKICAgICAgICAgc2VsZi5tb2R1bGUgPSBzeXMubW9kdWxlc1ttb2RuYW1lXQpAQCAtMTkzLDggKzMyMyw3IEBACiAgICAgICAgIHNlbGYudGV4dC5kZWxldGUoIjEuMCIsICJlbmQiKQogICAgICAgICBzZWxmLnRleHQuaW5zZXJ0KCIxLjAiLCBjaGFycykKICAgICAgICAgc2VsZi5yb290LnRpdGxlKGZpbGVuYW1lICsgIiAtIGEgUHl0aG9uIHR1cnRsZSBncmFwaGljcyBleGFtcGxlIikKLSAgICAgICAgcmVsb2FkKHNlbGYubW9kdWxlKQotICAgICAgICBzZWxmLmNvbmZpZ0dVSShOT1JNQUwsIE5PUk1BTCwgRElTQUJMRUQsIERJU0FCTEVELAorICAgICAgICBzZWxmLmNvbmZpZ0dVSShOT1JNQUwsIERJU0FCTEVELCBESVNBQkxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgIlByZXNzIHN0YXJ0IGJ1dHRvbiIsICJyZWQiKQogICAgICAgICBzZWxmLnN0YXRlID0gUkVBRFkKIApAQCAtMjAyLDcgKzMzMSw3IEBACiAgICAgICAgIHNlbGYucmVmcmVzaENhbnZhcygpCiAgICAgICAgIHNlbGYuZGlydHkgPSBUcnVlCiAgICAgICAgIHR1cnRsZS5UdXJ0bGVTY3JlZW4uX1JVTk5JTkcgPSBUcnVlCi0gICAgICAgIHNlbGYuY29uZmlnR1VJKERJU0FCTEVELCBESVNBQkxFRCwgTk9STUFMLCBESVNBQkxFRCwKKyAgICAgICAgc2VsZi5jb25maWdHVUkoRElTQUJMRUQsIE5PUk1BTCwgRElTQUJMRUQsCiAgICAgICAgICAgICAgICAgICAgICAgICJkZW1vIHJ1bm5pbmcuLi4iLCAiYmxhY2siKQogICAgICAgICBzZWxmLnNjcmVlbi5jbGVhcigpCiAgICAgICAgIHNlbGYuc2NyZWVuLm1vZGUoInN0YW5kYXJkIikKQEAgLTIxNSw1MiArMzQ0LDQxIEBACiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHNlbGYuc3RhdGUgPSBET05FCiAgICAgICAgIGV4Y2VwdCB0dXJ0bGUuVGVybWluYXRvcjoKKyAgICAgICAgICAgIGlmIHNlbGYucm9vdCBpcyBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICAgc2VsZi5zdGF0ZSA9IERPTkUKICAgICAgICAgICAgIHJlc3VsdCA9ICJzdG9wcGVkISIKICAgICAgICAgaWYgc2VsZi5zdGF0ZSA9PSBET05FOgotICAgICAgICAgICAgc2VsZi5jb25maWdHVUkoTk9STUFMLCBOT1JNQUwsIERJU0FCTEVELCBOT1JNQUwsCisgICAgICAgICAgICBzZWxmLmNvbmZpZ0dVSShOT1JNQUwsIERJU0FCTEVELCBOT1JNQUwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQpCiAgICAgICAgIGVsaWYgc2VsZi5zdGF0ZSA9PSBFVkVOVERSSVZFTjoKICAgICAgICAgICAgIHNlbGYuZXhpdGZsYWcgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmNvbmZpZ0dVSShESVNBQkxFRCwgRElTQUJMRUQsIE5PUk1BTCwgRElTQUJMRUQsCisgICAgICAgICAgICBzZWxmLmNvbmZpZ0dVSShESVNBQkxFRCwgTk9STUFMLCBESVNBQkxFRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgbW91c2Uva2V5cyBvciBTVE9QIiwgInJlZCIpCiAKICAgICBkZWYgY2xlYXJDYW52YXMoc2VsZik6CiAgICAgICAgIHNlbGYucmVmcmVzaENhbnZhcygpCiAgICAgICAgIHNlbGYuc2NyZWVuLl9kZWxldGUoImFsbCIpCiAgICAgICAgIHNlbGYuc2NhbnZhcy5jb25maWcoY3Vyc29yPSIiKQotICAgICAgICBzZWxmLmNvbmZpZ0dVSShOT1JNQUwsIE5PUk1BTCwgRElTQUJMRUQsIERJU0FCTEVEKQorICAgICAgICBzZWxmLmNvbmZpZ0dVSShOT1JNQUwsIERJU0FCTEVELCBESVNBQkxFRCkKIAogICAgIGRlZiBzdG9wSXQoc2VsZik6CiAgICAgICAgIGlmIHNlbGYuZXhpdGZsYWc6CiAgICAgICAgICAgICBzZWxmLmNsZWFyQ2FudmFzKCkKICAgICAgICAgICAgIHNlbGYuZXhpdGZsYWcgPSBGYWxzZQotICAgICAgICAgICAgc2VsZi5jb25maWdHVUkoTk9STUFMLCBOT1JNQUwsIERJU0FCTEVELCBESVNBQkxFRCwKKyAgICAgICAgICAgIHNlbGYuY29uZmlnR1VJKE5PUk1BTCwgRElTQUJMRUQsIERJU0FCTEVELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNUT1BQRUQhIiwgInJlZCIpCi0gICAgICAgICAgICB0dXJ0bGUuVHVydGxlU2NyZWVuLl9SVU5OSU5HID0gRmFsc2UKLSAgICAgICAgICAgICNwcmludCAic3RvcElUOiBleGl0ZmxhZyA9IFRydWUiCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICB0dXJ0bGUuVHVydGxlU2NyZWVuLl9SVU5OSU5HID0gRmFsc2UKLSAgICAgICAgICAgICNwcmludCAic3RvcEl0OiBleGl0ZmxhZyA9IEZhbHNlIgorICAgICAgICB0dXJ0bGUuVHVydGxlU2NyZWVuLl9SVU5OSU5HID0gRmFsc2UKKworICAgIGRlZiBfZGVzdHJveShzZWxmKToKKyAgICAgICAgdHVydGxlLlR1cnRsZVNjcmVlbi5fUlVOTklORyA9IEZhbHNlCisgICAgICAgIHNlbGYucm9vdC5kZXN0cm95KCkKKyAgICAgICAgc2VsZi5yb290ID0gTm9uZQorCisKK2RlZiBtYWluKCk6CisgICAgZGVtbyA9IERlbW9XaW5kb3coKQorICAgIGRlbW8ucm9vdC5tYWlubG9vcCgpCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgZGVtbyA9IERlbW9XaW5kb3coKQotICAgIFJVTiA9IFRydWUKLSAgICB3aGlsZSBSVU46Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICNwcmludCgiRU5URVJJTkcgbWFpbmxvb3AiKQotICAgICAgICAgICAgZGVtby5yb290Lm1haW5sb29wKCkKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgI3ByaW50KCJBdHRyaWJ1dGVFcnJvciEtIFdBSVQgQSBNT01FTlQhIikKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4zKQotICAgICAgICAgICAgcHJpbnQoIkdPSU5HIE9OIC4uIikKLSAgICAgICAgICAgIGRlbW8uY2tlYXJDYW52YXMoKQotICAgICAgICBleGNlcHQgVHlwZUVycm9yOgotICAgICAgICAgICAgZGVtby5zY3JlZW4uX2RlbGV0ZSgiYWxsIikKLSAgICAgICAgICAgICNwcmludCgiQ1JBU0ghISEtIFdBSVQgQSBNT01FTlQhIikKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4zKQotICAgICAgICAgICAgI3ByaW50KCJHT0lORyBPTiAuLiIpCi0gICAgICAgICAgICBkZW1vLmNsZWFyQ2FudmFzKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgcHJpbnQoIkJZRSEiKQotICAgICAgICAgICAgUlVOID0gRmFsc2UKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL2Fib3V0X3R1cnRsZS50eHQgYi9MaWIvdHVydGxlZGVtby9hYm91dF90dXJ0bGUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDJjN2IzLi4wMDAwMDAwCi0tLSBhL0xpYi90dXJ0bGVkZW1vL2Fib3V0X3R1cnRsZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgQSBuZXcgdHVydGxlIG1vZHVsZSBmb3IgUHl0aG9uCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UdXJ0bGUgZ3JhcGhpY3MgaXMgYSBwb3B1bGFyIHdheSBmb3IgaW50cm9kdWNpbmcgcHJvZ3JhbW1pbmcgdG8KLWtpZHMuIEl0IHdhcyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBMb2dvIHByb2dyYW1taW5nIGxhbmd1YWdlIGRldmVsb3BlZAotYnkgV2FsbHkgRmV1cnppZyBhbmQgU2V5bW91ciBQYXBlcnQgaW4gMTk2Ni4KLQotSW1hZ2luZSBhIHJvYm90aWMgdHVydGxlIHN0YXJ0aW5nIGF0ICgwLCAwKSBpbiB0aGUgeC15IHBsYW5lLiBBZnRlciBhbiBgYGltcG9ydCB0dXJ0bGVgYCwgZ2l2ZSBpdAotdGhlIGNvbW1hbmQgdHVydGxlLmZvcndhcmQoMTUpLCBhbmQgaXQgbW92ZXMgKG9uLXNjcmVlbiEpIDE1IHBpeGVscyBpbgotdGhlIGRpcmVjdGlvbiBpdCBpcyBmYWNpbmcsIGRyYXdpbmcgYSBsaW5lIGFzIGl0IG1vdmVzLiBHaXZlIGl0IHRoZQotY29tbWFuZCB0dXJ0bGUucmlnaHQoMjUpLCBhbmQgaXQgcm90YXRlcyBpbi1wbGFjZSAyNSBkZWdyZWVzIGNsb2Nrd2lzZS4KLQotQnkgY29tYmluaW5nIHRvZ2V0aGVyIHRoZXNlIGFuZCBzaW1pbGFyIGNvbW1hbmRzLCBpbnRyaWNhdGUgc2hhcGVzIGFuZAotcGljdHVyZXMgY2FuIGVhc2lseSBiZSBkcmF3bi4KLQotLS0tLS0gdHVydGxlLnB5Ci0KLVRoaXMgbW9kdWxlIGlzIGFuIGV4dGVuZGVkIHJlaW1wbGVtZW50YXRpb24gb2YgdHVydGxlLnB5IGZyb20gdGhlCi1QeXRob24gc3RhbmRhcmQgZGlzdHJpYnV0aW9uIHVwIHRvIFB5dGhvbiAyLjUuIChTZWU6IGh0dHA6XFx3d3cucHl0aG9uLm9yZykKLQotSXQgdHJpZXMgdG8ga2VlcCB0aGUgbWVyaXRzIG9mIHR1cnRsZS5weSBhbmQgdG8gYmUgKG5lYXJseSkgMTAwJQotY29tcGF0aWJsZSB3aXRoIGl0LiBUaGlzIG1lYW5zIGluIHRoZSBmaXJzdCBwbGFjZSB0byBlbmFibGUgdGhlCi1sZWFybmluZyBwcm9ncmFtbWVyIHRvIHVzZSBhbGwgdGhlIGNvbW1hbmRzLCBjbGFzc2VzIGFuZCBtZXRob2RzCi1pbnRlcmFjdGl2ZWx5IHdoZW4gdXNpbmcgdGhlIG1vZHVsZSBmcm9tIHdpdGhpbiBJRExFIHJ1biB3aXRoCi10aGUgLW4gc3dpdGNoLgotCi1Sb3VnaGx5IGl0IGhhcyB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGFkZGVkOgotCi0tIEJldHRlciBhbmltYXRpb24gb2YgdGhlIHR1cnRsZSBtb3ZlbWVudHMsIGVzcGVjaWFsbHkgb2YgdHVybmluZyB0aGUKLSAgICB0dXJ0bGUuIFNvIHRoZSB0dXJ0bGVzIGNhbiBtb3JlIGVhc2lseSBiZSB1c2VkIGFzIGEgdmlzdWFsIGZlZWRiYWNrCi0gICAgaW5zdHJ1bWVudCBieSB0aGUgKGJlZ2lubmluZykgcHJvZ3JhbW1lci4KLQotLSBEaWZmZXJlbnQgdHVydGxlIHNoYXBlcywgZ2lmLWltYWdlcyBhcyB0dXJ0bGUgc2hhcGVzLCB1c2VyIGRlZmluZWQKLSAgICBhbmQgdXNlciBjb250cm9sbGFibGUgdHVydGxlIHNoYXBlcywgYW1vbmcgdGhlbSBjb21wb3VuZAotICAgIChtdWx0aWNvbG9yZWQpIHNoYXBlcy4gVHVydGxlIHNoYXBlcyBjYW4gYmUgc3RncmV0Y2hlZCBhbmQgdGlsdGVkLCB3aGljaAotICAgIG1ha2VzIHR1cnRsZXMgenUgdmVyeSB2ZXJzYXRpbGUgZ2VvbWV0cmljYWwgb2JqZWN0cy4KLQotLSBGaW5lIGNvbnRyb2wgb3ZlciB0dXJ0bGUgbW92ZW1lbnQgYW5kIHNjcmVlbiB1cGRhdGVzIHZpYSBkZWxheSgpLAotICAgIGFuZCBlbmhhbmNlZCB0cmFjZXIoKSBhbmQgc3BlZWQoKSBtZXRob2RzLgotCi0tIEFsaWFzZXMgZm9yIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQgY29tbWFuZHMsIGxpa2UgZmQgZm9yIGZvcndhcmQgZXRjLiwKLSAgICBmb2xsb3dpbmcgdGhlIGVhcmx5IExvZ28gdHJhZGl0aW9ucy4gVGhpcyByZWR1Y2VzIHRoZSBib3Jpbmcgd29yayBvZgotICAgIHR5cGluZyBsb25nIHNlcXVlbmNlcyBvZiBjb21tYW5kcywgd2hpY2ggb2Z0ZW4gb2NjdXIgaW4gYSBuYXR1cmFsIHdheQotICAgIHdoZW4ga2lkcyB0cnkgdG8gcHJvZ3JhbSBmYW5jeSBwaWN0dXJlcyBvbiB0aGVpciBmaXJzdCBlbmNvdW50ZXIgd2l0aAotICAgIHR1cnRsZSBncmFwaGNpcy4KLQotLSBUdXJ0bGVzIG5vdyBoYXZlIGFuIHVuZG8oKS1tZXRob2Qgd2l0aCBjb25maWd1cmFibGUgdW5kby1idWZmZXIuCi0KLS0gU29tZSBzaW1wbGUgY29tbWFuZHMvbWV0aG9kcyBmb3IgY3JlYXRpbmcgZXZlbnQgZHJpdmVuIHByb2dyYW1zCi0gICAgKG1vdXNlLSwga2V5LSwgdGltZXItZXZlbnRzKS4gRXNwZWNpYWxseSB1c2VmdWwgZm9yIHByb2dyYW1taW5nIGdhbWVzLgotCi0tIEEgc2Nyb2xsYWJsZSBDYW52YXMgY2xhc3MuIFRoZSBkZWZhdWx0IHNjcm9sbGFibGUgQ2FudmFzIGNhbiBiZQotICAgIGV4dGVuZGVkIGludGVyYWN0aXZlbHkgYXMgbmVlZGVkIHdoaWxlIHBsYXlpbmcgYXJvdW5kIHdpdGggdGhlIHR1cnRsZShzKS4KLQotLSBBIFR1cnRsZVNjcmVlbiBjbGFzcyB3aXRoIG1ldGhvZHMgY29udHJvbGxpbmcgYmFja2dyb3VuZCBjb2xvciBvcgotICAgIGJhY2tncm91bmQgaW1hZ2UsIHdpbmRvdyBhbmQgY2FudmFzIHNpemUgYW5kIG90aGVyIHByb3BlcnRpZXMgb2YgdGhlCi0gICAgVHVydGxlU2NyZWVuLgotCi0tIFRoZXJlIGlzIGEgbWV0aG9kLCBzZXR3b3JsZGNvb3JkaW5hdGVzKCksIHRvIGluc3RhbGwgYSB1c2VyIGRlZmluZWQKLSAgICBjb29yZGluYXRlLXN5c3RlbSBmb3IgdGhlIFR1cnRsZVNjcmVlbi4KLQotLSBUaGUgaW1wbGVtZW50YXRpb24gdXNlcyBhIDItdmVjdG9yIGNsYXNzIG5hbWVkIFZlYzJELCBkZXJpdmVkIGZyb20gdHVwbGUuCi0gICAgVGhpcyBjbGFzcyBpcyBwdWJsaWMsIHNvIGl0IGNhbiBiZSBpbXBvcnRlZCBieSB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lciwKLSAgICB3aGljaCBtYWtlcyBjZXJ0YWluIHR5cGVzIG9mIGNvbXB1dGF0aW9ucyB2ZXJ5IG5hdHVyYWwgYW5kIGNvbXBhY3QuCi0KLS0gQXBwZWFyYW5jZSBvZiB0aGUgVHVydGxlU2NyZWVuIGFuZCB0aGUgVHVydGxlcyBhdCBzdGFydHVwL2ltcG9ydCBjYW4gYmUKLSAgICBjb25maWd1cmVkIGJ5IG1lYW5zIG9mIGEgdHVydGxlLmNmZyBjb25maWd1cmF0aW9uIGZpbGUuCi0gICAgVGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBtaW1pY3MgdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIG9sZCB0dXJ0bGUgbW9kdWxlLgotCi0tIElmIGNvbmZpZ3VyZWQgYXBwcm9wcmlhdGVseSB0aGUgbW9kdWxlIHJlYWRzIGluIGRvY3N0cmluZ3MgZnJvbSBhIGRvY3N0cmluZwotICAgIGRpY3Rpb25hcnkgaW4gc29tZSBkaWZmZXJlbnQgbGFuZ3VhZ2UsIHN1cHBsaWVkIHNlcGFyYXRlbHkgIGFuZCByZXBsYWNlcwotICAgIHRoZSBlbmdsaXNoIG9uZXMgYnkgdGhvc2UgcmVhZCBpbi4gVGhlcmUgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uCi0gICAgd3JpdGVfZG9jc3RyaW5nZGljdCgpIHRvIHdyaXRlIGEgZGljdGlvbmFyeSB3aXRoIHRoZSBvcmlnaW5hbCAoZW5nbGlzaCkKLSAgICBkb2NzdHJpbmdzIHRvIGRpc2MsIHNvIGl0IGNhbiBzZXJ2ZSBhcyBhIHRlbXBsYXRlIGZvciB0cmFuc2xhdGlvbnMuCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9hYm91dF90dXJ0bGVkZW1vLnR4dCBiL0xpYi90dXJ0bGVkZW1vL2Fib3V0X3R1cnRsZWRlbW8udHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTAwOWJkLi4wMDAwMDAwCi0tLSBhL0xpYi90dXJ0bGVkZW1vL2Fib3V0X3R1cnRsZWRlbW8udHh0CisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotCi0gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgQWJvdXQgdGhpcyB2aWV3ZXIKLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0gICAgVGlueSBkZW1vIHZpZXdlciB0byB2aWV3IHR1cnRsZSBncmFwaGljcyBleGFtcGxlIHNjcmlwdHMuCi0KLSAgICBRdWlja2x5IGFuZCBkaXJ0eWx5IGFzc2VtYmxlZCBieSBHcmVnb3IgTGluZ2wuCi0gICAgSnVuZSwgMjAwNgotCi0gICAgRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlOiB0dXJ0bGVEZW1vIC0gSGVscAotCi0gICAgSGF2ZSBmdW4hCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9jaGFvcy5weSBiL0xpYi90dXJ0bGVkZW1vL2NoYW9zLnB5CmluZGV4IGQ0NjU2ZjguLjZhNDVkMGQgMTAwNjQ0Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL2NoYW9zLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL2NoYW9zLnB5CkBAIC0yOSw4ICsyOSw4IEBACiAgICAgbGluZSgtMSwgMCwgTisxLCAwKQogICAgIGxpbmUoMCwgLTAuMSwgMCwgMS4xKQogCi1kZWYgcGxvdChmdW4sIHN0YXJ0LCBjb2xvdXIpOgotICAgIHBlbmNvbG9yKGNvbG91cikKK2RlZiBwbG90KGZ1biwgc3RhcnQsIGNvbG9yKToKKyAgICBwZW5jb2xvcihjb2xvcikKICAgICB4ID0gc3RhcnQKICAgICBqdW1wdG8oMCwgeCkKICAgICBwZW5kb3duKCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL2Nsb2NrLnB5IGIvTGliL3R1cnRsZWRlbW8vY2xvY2sucHkKaW5kZXggYTBkMTU3Yi4uNjJjODg1MSAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vY2xvY2sucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vY2xvY2sucHkKQEAgLTEzLDggKzEzLDYgQEAKIGZyb20gdHVydGxlIGltcG9ydCAqCiBmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQogCi1tb2RlKCJsb2dvIikKLQogZGVmIGp1bXAoZGlzdGFueiwgd2lua2VsPTApOgogICAgIHBlbnVwKCkKICAgICByaWdodCh3aW5rZWwpCkBAIC00Miw3ICs0MCw2IEBACiAgICAgaGFuZF9mb3JtID0gZ2V0X3BvbHkoKQogICAgIHJlZ2lzdGVyX3NoYXBlKG5hbWUsIGhhbmRfZm9ybSkKIAotCiBkZWYgY2xvY2tmYWNlKHJhZGl1cyk6CiAgICAgcmVzZXQoKQogICAgIHBlbnNpemUoNykKQEAgLTgzLDcgKzgwLDYgQEAKICAgICB3cml0ZXIucHUoKQogICAgIHdyaXRlci5iayg4NSkKIAotCiBkZWYgd29jaGVudGFnKHQpOgogICAgIHdvY2hlbnRhZyA9IFsiTW9uZGF5IiwgIlR1ZXNkYXkiLCAiV2VkbmVzZGF5IiwKICAgICAgICAgIlRodXJzZGF5IiwgIkZyaWRheSIsICJTYXR1cmRheSIsICJTdW5kYXkiXQpAQCAtMTAyLDIyICs5OCwyNSBAQAogICAgIHNla3VuZGUgPSB0LnNlY29uZCArIHQubWljcm9zZWNvbmQqMC4wMDAwMDEKICAgICBtaW51dGUgPSB0Lm1pbnV0ZSArIHNla3VuZGUvNjAuMAogICAgIHN0dW5kZSA9IHQuaG91ciArIG1pbnV0ZS82MC4wCi0gICAgdHJhY2VyKEZhbHNlKQotICAgIHdyaXRlci5jbGVhcigpCi0gICAgd3JpdGVyLmhvbWUoKQotICAgIHdyaXRlci5mb3J3YXJkKDY1KQotICAgIHdyaXRlci53cml0ZSh3b2NoZW50YWcodCksCi0gICAgICAgICAgICAgICAgIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsIDE0LCAiYm9sZCIpKQotICAgIHdyaXRlci5iYWNrKDE1MCkKLSAgICB3cml0ZXIud3JpdGUoZGF0dW0odCksCi0gICAgICAgICAgICAgICAgIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsIDE0LCAiYm9sZCIpKQotICAgIHdyaXRlci5mb3J3YXJkKDg1KQotICAgIHRyYWNlcihUcnVlKQotICAgIHNlY29uZF9oYW5kLnNldGhlYWRpbmcoNipzZWt1bmRlKQotICAgIG1pbnV0ZV9oYW5kLnNldGhlYWRpbmcoNiptaW51dGUpCi0gICAgaG91cl9oYW5kLnNldGhlYWRpbmcoMzAqc3R1bmRlKQotICAgIHRyYWNlcihUcnVlKQotICAgIG9udGltZXIodGljaywgMTAwKQorICAgIHRyeToKKyAgICAgICAgdHJhY2VyKEZhbHNlKSAgIyBUZXJtaW5hdG9yIGNhbiBvY2N1ciBoZXJlCisgICAgICAgIHdyaXRlci5jbGVhcigpCisgICAgICAgIHdyaXRlci5ob21lKCkKKyAgICAgICAgd3JpdGVyLmZvcndhcmQoNjUpCisgICAgICAgIHdyaXRlci53cml0ZSh3b2NoZW50YWcodCksCisgICAgICAgICAgICAgICAgICAgICBhbGlnbj0iY2VudGVyIiwgZm9udD0oIkNvdXJpZXIiLCAxNCwgImJvbGQiKSkKKyAgICAgICAgd3JpdGVyLmJhY2soMTUwKQorICAgICAgICB3cml0ZXIud3JpdGUoZGF0dW0odCksCisgICAgICAgICAgICAgICAgICAgICBhbGlnbj0iY2VudGVyIiwgZm9udD0oIkNvdXJpZXIiLCAxNCwgImJvbGQiKSkKKyAgICAgICAgd3JpdGVyLmZvcndhcmQoODUpCisgICAgICAgIHRyYWNlcihUcnVlKQorICAgICAgICBzZWNvbmRfaGFuZC5zZXRoZWFkaW5nKDYqc2VrdW5kZSkgICMgb3IgaGVyZQorICAgICAgICBtaW51dGVfaGFuZC5zZXRoZWFkaW5nKDYqbWludXRlKQorICAgICAgICBob3VyX2hhbmQuc2V0aGVhZGluZygzMCpzdHVuZGUpCisgICAgICAgIHRyYWNlcihUcnVlKQorICAgICAgICBvbnRpbWVyKHRpY2ssIDEwMCkKKyAgICBleGNlcHQgVGVybWluYXRvcjoKKyAgICAgICAgcGFzcyAgIyB0dXJ0bGVkZW1vIHVzZXIgcHJlc3NlZCBTVE9QCiAKIGRlZiBtYWluKCk6CiAgICAgdHJhY2VyKEZhbHNlKQpAQCAtMTI3LDYgKzEyNiw3IEBACiAgICAgcmV0dXJuICJFVkVOVExPT1AiCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbW9kZSgibG9nbyIpCiAgICAgbXNnID0gbWFpbigpCiAgICAgcHJpbnQobXNnKQogICAgIG1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL2NvbG9ybWl4ZXIucHkgYi9MaWIvdHVydGxlZGVtby9jb2xvcm1peGVyLnB5CmluZGV4IGY1ZDMwOGQuLjQ0OGRiODMgMTAwNjQ0Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL2NvbG9ybWl4ZXIucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vY29sb3JtaXhlci5weQpAQCAtMSw4ICsxLDYgQEAKICMgY29sb3JtaXhlcgogCiBmcm9tIHR1cnRsZSBpbXBvcnQgU2NyZWVuLCBUdXJ0bGUsIG1haW5sb29wCi1pbXBvcnQgc3lzCi1zeXMuc2V0cmVjdXJzaW9ubGltaXQoMjAwMDApICAgIyBvdmVyY29tZXMsIGZvciBub3csIGFuIGluc3RhYmlsaXR5IG9mIFB5dGhvbiAzLjAKIAogY2xhc3MgQ29sb3JUdXJ0bGUoVHVydGxlKToKIApkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vZGVtb2hlbHAudHh0IGIvTGliL3R1cnRsZWRlbW8vZGVtb2hlbHAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTgzYmM3Li4wMDAwMDAwCi0tLSBhL0xpYi90dXJ0bGVkZW1vL2RlbW9oZWxwLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLQotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotICAgICAgdHVydGxlRGVtbyAtIEhlbHAKLQotICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSAgVGhpcyBkb2N1bWVudCBoYXMgdHdvIHNlY3Rpb25zOgotCi0gICgxKSBIb3cgdG8gdXNlIHRoZSBkZW1vIHZpZXdlcgotICAoMikgSG93IHRvIGFkZCB5b3VyIG93biBkZW1vcyB0byB0aGUgZGVtbyByZXBvc2l0b3J5Ci0KLQotICAoMSkgSG93IHRvIHVzZSB0aGUgZGVtbyB2aWV3ZXIuCi0KLSAgU2VsZWN0IGEgZGVtb3NjcmlwdCBmcm9tIHRoZSBleGFtcGxlIG1lbnUuCi0gIFRoZSAoc3ludGF4IGNvbG91cmVkKSBzb3VyY2UgY29kZSBhcHBlYXJzIGluIHRoZSBsZWZ0Ci0gIHNvdXJjZSBjb2RlIHdpbmRvdy4gSVQgQ0FOTk9UIEJFIEVESVRFRCwgYnV0IE9OTFkgVklFV0VEIQotCi0gIC0gUHJlc3MgU1RBUlQgYnV0dG9uIHRvIHN0YXJ0IHRoZSBkZW1vLgotICAtIFN0b3AgZXhlY3V0aW9uIGJ5IHByZXNzaW5nIHRoZSBTVE9QIGJ1dHRvbi4KLSAgLSBDbGVhciBzY3JlZW4gYnkgcHJlc3NpbmcgdGhlIENMRUFSIGJ1dHRvbi4KLSAgLSBSZXN0YXJ0IGJ5IHByZXNzaW5nIHRoZSBTVEFSVCBidXR0b24gYWdhaW4uCi0KLSAgU1BFQ0lBTCBkZW1vcyBhcmUgdGhvc2Ugd2hpY2ggcnVuIEVWRU5URFJJVkVOLgotICAoRm9yIGV4YW1wbGUgY2xvY2sucHkgLSBvciBvbGRUdXJ0bGVEZW1vLnB5IHdoaWNoCi0gIGluIHRoZSBlbmQgZXhwZWN0cyBhIG1vdXNlIGNsaWNrLik6Ci0KLSAgICAgIFByZXNzIFNUQVJUIGJ1dHRvbiB0byBzdGFydCB0aGUgZGVtby4KLQotICAgICAgLSBVbnRpbCB0aGUgRVZFTlRMT09QIGlzIGVudGVyZWQgZXZlcnl0aGluZyB3b3JrcwotICAgICAgYXMgaW4gYW4gb3JkaW5hcnkgZGVtbyBzY3JpcHQuCi0KLSAgICAgIC0gV2hlbiB0aGUgRVZFTlRMT09QIGlzIGVudGVyZWQsIHlvdSBjb250cm9sIHRoZQotICAgICAgYXBwbGljYXRpb24gYnkgdXNpbmcgdGhlIG1vdXNlIGFuZC9vciBrZXlzIChvciBpdCdzCi0gICAgICBjb250cm9sbGVkIGJ5IHNvbWUgdGltZXIgZXZlbnRzKQotICAgICAgVG8gc3RvcCBpdCB5b3UgY2FuIGFuZCBtdXN0IHByZXNzIHRoZSBTVE9QIGJ1dHRvbi4KLQotICAgICAgV2hpbGUgdGhlIEVWRU5UTE9PUCBpcyBydW5uaW5nLCB0aGUgZXhhbXBsZXMgbWVudSBpcyBkaXNhYmxlZC4KLQotICAgICAgLSBPbmx5IGFmdGVyIGhhdmluZyBwcmVzc2VkIHRoZSBTVE9QIGJ1dHRvbiwgeW91IG1heQotICAgICAgcmVzdGFydCBpdCBvciBjaG9vc2UgYW5vdGhlciBleGFtcGxlIHNjcmlwdC4KLQotICAgKiAqICogKiAqICogKiAqCi0gICBJbiBzb21lIHJhcmUgc2l0dWF0aW9ucyB0aGVyZSBtYXkgb2NjdXIgaW50ZXJmZXJlbmNlcy9jb25mbGljdHMKLSAgIGJldHdlZW4gZXZlbnRzIGNvbmNlcm5pbmcgdGhlIGRlbW8gc2NyaXB0IGFuZCB0aG9zZSBjb25jZXJuaW5nIHRoZQotICAgZGVtby12aWV3ZXIuIChUaGV5IHJ1biBpbiB0aGUgc2FtZSBwcm9jZXNzLikgU3RyYW5nZSBiZWhhdmlvdXIgbWF5IGJlCi0gICB0aGUgY29uc2VxdWVuY2UgYW5kIGluIHRoZSB3b3JzdCBjYXNlIHlvdSBtdXN0IGNsb3NlIGFuZCByZXN0YXJ0IHRoZQotICAgdmlld2VyLgotICAgKiAqICogKiAqICogKiAqCi0KLQotICAgKDIpIEhvdyB0byBhZGQgeW91ciBvd24gZGVtb3MgdG8gdGhlIGRlbW8gcmVwb3NpdG9yeQotCi0gICAtIHBsYWNlOiBzYW1lIGRpcmVjdG9yeSBhcyB0dXJ0bGVkZW1vL19fbWFpbl9fLnB5Ci0KLSAgIC0gcmVxdWlyZW1lbnRzIG9uIHNvdXJjZSBjb2RlOgotICAgICAgIGNvZGUgbXVzdCBjb250YWluIGEgbWFpbigpIGZ1bmN0aW9uIHdoaWNoIHdpbGwKLSAgICAgICBiZSBleGVjdXRlZCBieSB0aGUgdmlld2VyIChzZWUgcHJvdmlkZWQgZXhhbXBsZSBzY3JpcHRzKQotICAgICAgIG1haW4oKSBtYXkgcmV0dXJuIGEgc3RyaW5nIHdoaWNoIHdpbGwgYmUgZGlzcGxheWVkCi0gICAgICAgaW4gdGhlIExhYmVsIGJlbG93IHRoZSBzb3VyY2UgY29kZSB3aW5kb3cgKHdoZW4gZXhlY3V0aW9uCi0gICAgICAgaGFzIGZpbmlzaGVkLikgCi0KLSAgICAgICAhISBGb3IgcHJvZ3JhbXMsIHdoaWNoIGFyZSBFVkVOVCBEUklWRU4sIG1haW4gbXVzdCByZXR1cm4KLSAgICAgICAhISB0aGUgc3RyaW5nICJFVkVOVExPT1AiLiBUaGlzIGluZm9ybXMgdGhlIHZpZXdlciwgdGhhdCB0aGUKLSAgICAgICAhISBzY3JpcHQgaXMgc3RpbGwgcnVubmluZyBhbmQgbXVzdCBiZSBzdG9wcGVkIGJ5IHRoZSB1c2VyIQotCi0gICAgICAgIAotICAKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL2ZvcmVzdC5weSBiL0xpYi90dXJ0bGVkZW1vL2ZvcmVzdC5weQppbmRleCBhODM3ZDg0Li43ZmUwODBlIDEwMDc1NQotLS0gYS9MaWIvdHVydGxlZGVtby9mb3Jlc3QucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vZm9yZXN0LnB5CkBAIC0zLDEyICszLDEyIEBACiAKICAgICAgICAgICAgICB0ZGVtb19mb3Jlc3QucHkKIAotRGlzcGxheXMgYSAnZm9yZXN0JyBvZiAzICdicmVhZHRoLWZpcnN0LXRyZWVzJwotc2ltaWxhciB0byB0aGUgb25lIGZyb20gZXhhbXBsZSB0cmVlLgotRm9yIGZ1cnRoZXIgcmVtYXJrcyBzZWUgeHR4X3RyZWUucHkKK0Rpc3BsYXlzIGEgJ2ZvcmVzdCcgb2YgMyBicmVhZHRoLWZpcnN0LXRyZWVzCitzaW1pbGFyIHRvIHRoZSBvbmUgaW4gdHJlZS4KK0ZvciBmdXJ0aGVyIHJlbWFya3Mgc2VlIHRyZWUucHkKIAogVGhpcyBleGFtcGxlIGlzIGEgJ2JyZWFkdGgtZmlyc3QnLXJld3JpdGUgb2YKLWEgTG9nbyBwcm9ncmFtIHdyaXR0ZW4gYnkgRXJpY2ggTmV1d2lydGguIFNlZToKK2EgTG9nbyBwcm9ncmFtIHdyaXR0ZW4gYnkgRXJpY2ggTmV1d2lydGguIFNlZQogaHR0cDovL2hvbWVwYWdlLnVuaXZpZS5hYy5hdC9lcmljaC5uZXV3aXJ0aC8KICIiIgogZnJvbSB0dXJ0bGUgaW1wb3J0IFR1cnRsZSwgY29sb3Jtb2RlLCB0cmFjZXIsIG1haW5sb29wCkBAIC0xMDQsNiArMTA0LDUgQEAKICAgICByZXR1cm4gInJ1bnRpbWU6ICUuMmYgc2VjLiIgJSAoYi1hKQogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1zZyA9IG1haW4oKQotICAgIHByaW50KG1zZykKKyAgICBtYWluKCkKICAgICBtYWlubG9vcCgpCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9taW5pbWFsX2hhbm9pLnB5IGIvTGliL3R1cnRsZWRlbW8vbWluaW1hbF9oYW5vaS5weQppbmRleCBjZmI3OGRjLi40YTQzMmYyIDEwMDc1NQotLS0gYS9MaWIvdHVydGxlZGVtby9taW5pbWFsX2hhbm9pLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL21pbmltYWxfaGFub2kucHkKQEAgLTUwLDkgKzUwLDEyIEBACiBkZWYgcGxheSgpOgogICAgIG9ua2V5KE5vbmUsInNwYWNlIikKICAgICBjbGVhcigpCi0gICAgaGFub2koNiwgdDEsIHQyLCB0MykKLSAgICB3cml0ZSgicHJlc3MgU1RPUCBidXR0b24gdG8gZXhpdCIsCi0gICAgICAgICAgYWxpZ249ImNlbnRlciIsIGZvbnQ9KCJDb3VyaWVyIiwgMTYsICJib2xkIikpCisgICAgdHJ5OgorICAgICAgICBoYW5vaSg2LCB0MSwgdDIsIHQzKQorICAgICAgICB3cml0ZSgicHJlc3MgU1RPUCBidXR0b24gdG8gZXhpdCIsCisgICAgICAgICAgICAgIGFsaWduPSJjZW50ZXIiLCBmb250PSgiQ291cmllciIsIDE2LCAiYm9sZCIpKQorICAgIGV4Y2VwdCBUZXJtaW5hdG9yOgorICAgICAgICBwYXNzICAjIHR1cnRsZWRlbW8gdXNlciBwcmVzc2VkIFNUT1AKIAogZGVmIG1haW4oKToKICAgICBnbG9iYWwgdDEsIHQyLCB0MwpkaWZmIC0tZ2l0IGEvTGliL3R1cnRsZWRlbW8vbmltLnB5IGIvTGliL3R1cnRsZWRlbW8vbmltLnB5CmluZGV4IDc5MmJhNTEuLjlhZTZjYzUgMTAwNjQ0Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL25pbS5weQorKysgYi9MaWIvdHVydGxlZGVtby9uaW0ucHkKQEAgLTE0Myw3ICsxNDMsNiBAQAogICAgICAgICBzZWxmLndyaXRlci53cml0ZShtc2cxLCBhbGlnbj0iY2VudGVyIiwgZm9udD0oIkNvdXJpZXIiLDE0LCJib2xkIikpCiAgICAgICAgIHNlbGYuc2NyZWVuLnRyYWNlcihUcnVlKQogCi0KICAgICBkZWYgc2V0dXAoc2VsZik6CiAgICAgICAgIHNlbGYuc2NyZWVuLnRyYWNlcihGYWxzZSkKICAgICAgICAgZm9yIHJvdyBpbiByYW5nZSgzKToKQEAgLTE4MSw2ICsxODAsNyBAQAogICAgICAgICBpZiBzZWxmLmdhbWUuc3RhdGUgPT0gTmltLk9WRVI6CiAgICAgICAgICAgICBzZWxmLnNjcmVlbi5jbGVhcigpCiAKKwogY2xhc3MgTmltQ29udHJvbGxlcihvYmplY3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGdhbWUpOgpAQCAtMjAxLDYgKzIwMSw3IEBACiAgICAgICAgIHNlbGYuZ2FtZS5tb2RlbC5ub3RpZnlfbW92ZShyb3csIGNvbCkKICAgICAgICAgc2VsZi5CVVNZID0gRmFsc2UKIAorCiBjbGFzcyBOaW0ob2JqZWN0KToKICAgICBDUkVBVEVEID0gMAogICAgIFJVTk5JTkcgPSAxCkBAIC0yMTMsMTMgKzIxNCwxMiBAQAogICAgICAgICBzZWxmLmNvbnRyb2xsZXIgPSBOaW1Db250cm9sbGVyKHNlbGYpCiAKIAotbWFpbnNjcmVlbiA9IHR1cnRsZS5TY3JlZW4oKQotbWFpbnNjcmVlbi5tb2RlKCJzdGFuZGFyZCIpCi1tYWluc2NyZWVuLnNldHVwKFNDUkVFTldJRFRILCBTQ1JFRU5IRUlHSFQpCi0KIGRlZiBtYWluKCk6CisgICAgbWFpbnNjcmVlbiA9IHR1cnRsZS5TY3JlZW4oKQorICAgIG1haW5zY3JlZW4ubW9kZSgic3RhbmRhcmQiKQorICAgIG1haW5zY3JlZW4uc2V0dXAoU0NSRUVOV0lEVEgsIFNDUkVFTkhFSUdIVCkKICAgICBuaW0gPSBOaW0obWFpbnNjcmVlbikKLSAgICByZXR1cm4gIkVWRU5UTE9PUCEiCisgICAgcmV0dXJuICJFVkVOVExPT1AiCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9wYWludC5weSBiL0xpYi90dXJ0bGVkZW1vL3BhaW50LnB5CmluZGV4IDY4MDU4YWIuLmRkZTE2OTEgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL3BhaW50LnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL3BhaW50LnB5CkBAIC0zLDExICszLDE1IEBACiAKICAgICAgICAgICAgIHRkZW1vX3BhaW50LnB5CiAKLUEgc2ltcGxlICBldmVudGRyaXZlbiBwYWludCBwcm9ncmFtCitBIHNpbXBsZSAgZXZlbnQtZHJpdmVuIHBhaW50IHByb2dyYW0KIAotLSB1c2UgbGVmdCBtb3VzZSBidXR0b24gdG8gbW92ZSB0dXJ0bGUKLS0gbWlkZGxlIG1vdXNlIGJ1dHRvbiB0byBjaGFuZ2UgY29sb3IKLS0gcmlnaHQgbW91c2UgYnV0dG9uIGRvIHR1cm4gZmlsbGluZyBvbi9vZmYKKy0gbGVmdCBtb3VzZSBidXR0b24gbW92ZXMgdHVydGxlCistIG1pZGRsZSBtb3VzZSBidXR0b24gY2hhbmdlcyBjb2xvcgorLSByaWdodCBtb3VzZSBidXR0b24gdG9vZ2xlcyBiZXR3ZWVtIHBlbiB1cAorKG5vIGxpbmUgZHJhd24gd2hlbiB0aGUgdHVydGxlIG1vdmVzKSBhbmQKK3BlbiBkb3duIChsaW5lIGlzIGRyYXduKS4gSWYgcGVuIHVwIGZvbGxvd3MKK2F0IGxlYXN0IHR3byBwZW4tZG93biBtb3ZlcywgdGhlIHBvbHlnb24gdGhhdAoraW5jbHVkZXMgdGhlIHN0YXJ0aW5nIHBvaW50IGlzIGZpbGxlZC4KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgUGxheSBhcm91bmQgYnkgY2xpY2tpbmcgaW50byB0aGUgY2FudmFzCiAgdXNpbmcgYWxsIHRocmVlIG1vdXNlIGJ1dHRvbnMuCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby9wZWFjZS5weSBiL0xpYi90dXJ0bGVkZW1vL3BlYWNlLnB5CmluZGV4IDYzY2Y3Y2MuLmUyYmE5MjggMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL3BlYWNlLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL3BlYWNlLnB5CkBAIC0zLDE0ICszLDEwIEBACiAKICAgICAgICAgICAgICAgdGRlbW9fcGVhY2UucHkKIAotQSB2ZXJ5IHNpbXBsZSBkcmF3aW5nIHN1aXRhYmxlIGFzIGEgYmVnaW5uZXIncwotcHJvZ3JhbW1pbmcgZXhhbXBsZS4KLQotVXNlcyBvbmx5IGNvbW1hbmRzLCB3aGljaCBhcmUgYWxzbyBhdmFpbGFibGUgaW4KLW9sZCB0dXJ0bGUucHkuCi0KLUludGVudGlvbmFsbHkgbm8gdmFyaWFibGVzIGFyZSB1c2VkIGV4Y2VwdCBmb3IgdGhlCi1jb2xvcmxvb3A6CitBIHNpbXBsZSBkcmF3aW5nIHN1aXRhYmxlIGFzIGEgYmVnaW5uZXIncworcHJvZ3JhbW1pbmcgZXhhbXBsZS4gQXNpZGUgZnJvbSB0aGUKK3BlYWNlY29sb3JzIGFzc2lnbm1lbnQgYW5kIHRoZSBmb3IgbG9vcCwKK2l0IG9ubHkgdXNlcyB0dXJ0bGUgY29tbWFuZHMuCiAiIiIKIAogZnJvbSB0dXJ0bGUgaW1wb3J0ICoKQEAgLTIxLDcgKzE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAicm95YWxibHVlMSIsICJkb2RnZXJibHVlNCIpCiAKICAgICByZXNldCgpCi0gICAgcyA9IFNjcmVlbigpCisgICAgU2NyZWVuKCkKICAgICB1cCgpCiAgICAgZ290bygtMzIwLC0xOTUpCiAgICAgd2lkdGgoNzApCkBAIC01OCw3ICs1NCw3IEBACiAgICAgdXAoKQogCiAgICAgZ290bygwLDMwMCkgIyB2YW5pc2ggaWYgaGlkZXR1cnRsZSgpIGlzIG5vdCBhdmFpbGFibGUgOy0pCi0gICAgcmV0dXJuICJEb25lISEiCisgICAgcmV0dXJuICJEb25lISIKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICBtYWluKCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL3BsYW5ldF9hbmRfbW9vbi5weSBiL0xpYi90dXJ0bGVkZW1vL3BsYW5ldF9hbmRfbW9vbi5weQppbmRleCAxNGM0YmJjLi4yNmFiZmRiIDEwMDc1NQotLS0gYS9MaWIvdHVydGxlZGVtby9wbGFuZXRfYW5kX21vb24ucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vcGxhbmV0X2FuZF9tb29uLnB5CkBAIC0xMiw5ICsxMiw5IEBACiBQbGFuZXQgaGFzIGEgY2lyY3VsYXIgb3JiaXQsIG1vb24gYSBzdGFibGUKIG9yYml0IGFyb3VuZCB0aGUgcGxhbmV0LgogCi1Zb3UgY2FuIGhvbGQgdGhlIG1vdmVtZW50IHRlbXBvcmFyaWx5IGJ5IHByZXNzaW5nCi10aGUgbGVmdCBtb3VzZSBidXR0b24gd2l0aCBtb3VzZSBvdmVyIHRoZQotc2Nyb2xsYmFyIG9mIHRoZSBjYW52YXMuCitZb3UgY2FuIGhvbGQgdGhlIG1vdmVtZW50IHRlbXBvcmFyaWx5IGJ5CitwcmVzc2luZyB0aGUgbGVmdCBtb3VzZSBidXR0b24gd2l0aCB0aGUKK21vdXNlIG92ZXIgdGhlIHNjcm9sbGJhciBvZiB0aGUgY2FudmFzLgogCiAiIiIKIGZyb20gdHVydGxlIGltcG9ydCBTaGFwZSwgVHVydGxlLCBtYWlubG9vcCwgVmVjMkQgYXMgVmVjCkBAIC0xMDgsNiArMTA4LDUgQEAKICAgICByZXR1cm4gIkRvbmUhIgogCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1zZyA9IG1haW4oKQotICAgIHByaW50KG1zZykKLSAgICAjbWFpbmxvb3AoKQorICAgIG1haW4oKQorICAgIG1haW5sb29wKCkKZGlmZiAtLWdpdCBhL0xpYi90dXJ0bGVkZW1vL3RyZWUucHkgYi9MaWIvdHVydGxlZGVtby90cmVlLnB5CmluZGV4IDljMGIxZjcuLjcxZmZmMzUgMTAwNzU1Ci0tLSBhL0xpYi90dXJ0bGVkZW1vL3RyZWUucHkKKysrIGIvTGliL3R1cnRsZWRlbW8vdHJlZS5weQpAQCAtMTEsOSArMTEsOSBAQAogKDEpIGEgdHJlZS1nZW5lcmF0b3IsIHdoZXJlIHRoZSBkcmF3aW5nIGlzCiBxdWFzaSB0aGUgc2lkZS1lZmZlY3QsIHdoZXJlYXMgdGhlIGdlbmVyYXRvcgogYWx3YXlzIHlpZWxkcyBOb25lLgotKDIpIFR1cnRsZS1jbG9uaW5nOiBBdCBlYWNoIGJyYW5jaGluZyBwb2ludCB0aGUKLWN1cnJlbnQgcGVuIGlzIGNsb25lZC4gU28gaW4gdGhlIGVuZCB0aGVyZQotYXJlIDEwMjQgdHVydGxlcy4KKygyKSBUdXJ0bGUtY2xvbmluZzogQXQgZWFjaCBicmFuY2hpbmcgcG9pbnQKK3RoZSBjdXJyZW50IHBlbiBpcyBjbG9uZWQuIFNvIGluIHRoZSBlbmQKK3RoZXJlIGFyZSAxMDI0IHR1cnRsZXMuCiAiIiIKIGZyb20gdHVydGxlIGltcG9ydCBUdXJ0bGUsIG1haW5sb29wCiBmcm9tIHRpbWUgaW1wb3J0IGNsb2NrCmRpZmYgLS1naXQgYS9MaWIvdHVydGxlZGVtby90d29fY2FudmFzZXMucHkgYi9MaWIvdHVydGxlZGVtby90d29fY2FudmFzZXMucHkKaW5kZXggMDJkODlkYi4uZDU3OTg3NiAxMDA3NTUKLS0tIGEvTGliL3R1cnRsZWRlbW8vdHdvX2NhbnZhc2VzLnB5CisrKyBiL0xpYi90dXJ0bGVkZW1vL3R3b19jYW52YXNlcy5weQpAQCAtMSw1MiArMSw1NCBAQAotIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwotIyMgREVNT05TVFJBVEVTIFVTRSBPRiAyIENBTlZBU0VTLCBTTyBDQU5OT1QgQkUgUlVOIElOIERFTU9WSUVXRVIhCi0iIiJ0dXJ0bGUgZXhhbXBsZTogVXNpbmcgVHVydGxlU2NyZWVuIGFuZCBSYXdUdXJ0bGUKLWZvciBkcmF3aW5nIG9uIHR3byBkaXN0aW5jdCBjYW52YXNlcy4KKyIiInR1cnRsZWRlbW8udHdvX2NhbnZhc2VzCisKK1VzZSBUdXJ0bGVTY3JlZW4gYW5kIFJhd1R1cnRsZSB0byBkcmF3IG9uIHR3bworZGlzdGluY3QgY2FudmFzZXMgaW4gYSBzZXBhcmF0ZSB3aW5kb3dzLiBUaGUKK25ldyB3aW5kb3cgbXVzdCBiZSBzZXBhcmF0ZWx5IGNsb3NlZCBpbgorYWRkaXRpb24gdG8gcHJlc3NpbmcgdGhlIFNUT1AgYnV0dG9uLgogIiIiCisKIGZyb20gdHVydGxlIGltcG9ydCBUdXJ0bGVTY3JlZW4sIFJhd1R1cnRsZSwgVEsKIAotcm9vdCA9IFRLLlRrKCkKLWN2MSA9IFRLLkNhbnZhcyhyb290LCB3aWR0aD0zMDAsIGhlaWdodD0yMDAsIGJnPSIjZGRmZmZmIikKLWN2MiA9IFRLLkNhbnZhcyhyb290LCB3aWR0aD0zMDAsIGhlaWdodD0yMDAsIGJnPSIjZmZlZWVlIikKLWN2MS5wYWNrKCkKLWN2Mi5wYWNrKCkKK2RlZiBtYWluKCk6CisgICAgcm9vdCA9IFRLLlRrKCkKKyAgICBjdjEgPSBUSy5DYW52YXMocm9vdCwgd2lkdGg9MzAwLCBoZWlnaHQ9MjAwLCBiZz0iI2RkZmZmZiIpCisgICAgY3YyID0gVEsuQ2FudmFzKHJvb3QsIHdpZHRoPTMwMCwgaGVpZ2h0PTIwMCwgYmc9IiNmZmVlZWUiKQorICAgIGN2MS5wYWNrKCkKKyAgICBjdjIucGFjaygpCiAKLXMxID0gVHVydGxlU2NyZWVuKGN2MSkKLXMxLmJnY29sb3IoMC44NSwgMC44NSwgMSkKLXMyID0gVHVydGxlU2NyZWVuKGN2MikKLXMyLmJnY29sb3IoMSwgMC44NSwgMC44NSkKKyAgICBzMSA9IFR1cnRsZVNjcmVlbihjdjEpCisgICAgczEuYmdjb2xvcigwLjg1LCAwLjg1LCAxKQorICAgIHMyID0gVHVydGxlU2NyZWVuKGN2MikKKyAgICBzMi5iZ2NvbG9yKDEsIDAuODUsIDAuODUpCiAKLXAgPSBSYXdUdXJ0bGUoczEpCi1xID0gUmF3VHVydGxlKHMyKQorICAgIHAgPSBSYXdUdXJ0bGUoczEpCisgICAgcSA9IFJhd1R1cnRsZShzMikKIAotcC5jb2xvcigicmVkIiwgKDEsIDAuODUsIDAuODUpKQotcC53aWR0aCgzKQotcS5jb2xvcigiYmx1ZSIsICgwLjg1LCAwLjg1LCAxKSkKLXEud2lkdGgoMykKKyAgICBwLmNvbG9yKCJyZWQiLCAoMSwgMC44NSwgMC44NSkpCisgICAgcC53aWR0aCgzKQorICAgIHEuY29sb3IoImJsdWUiLCAoMC44NSwgMC44NSwgMSkpCisgICAgcS53aWR0aCgzKQogCi1mb3IgdCBpbiBwLHE6Ci0gICAgdC5zaGFwZSgidHVydGxlIikKLSAgICB0Lmx0KDM2KQorICAgIGZvciB0IGluIHAscToKKyAgICAgICAgdC5zaGFwZSgidHVydGxlIikKKyAgICAgICAgdC5sdCgzNikKIAotcS5sdCgxODApCisgICAgcS5sdCgxODApCiAKLWZvciB0IGluIHAsIHE6Ci0gICAgdC5iZWdpbl9maWxsKCkKLWZvciBpIGluIHJhbmdlKDUpOgogICAgIGZvciB0IGluIHAsIHE6Ci0gICAgICAgIHQuZmQoNTApCi0gICAgICAgIHQubHQoNzIpCi1mb3IgdCBpbiBwLHE6Ci0gICAgdC5lbmRfZmlsbCgpCi0gICAgdC5sdCg1NCkKLSAgICB0LnB1KCkKLSAgICB0LmJrKDUwKQorICAgICAgICB0LmJlZ2luX2ZpbGwoKQorICAgIGZvciBpIGluIHJhbmdlKDUpOgorICAgICAgICBmb3IgdCBpbiBwLCBxOgorICAgICAgICAgICAgdC5mZCg1MCkKKyAgICAgICAgICAgIHQubHQoNzIpCisgICAgZm9yIHQgaW4gcCxxOgorICAgICAgICB0LmVuZF9maWxsKCkKKyAgICAgICAgdC5sdCg1NCkKKyAgICAgICAgdC5wdSgpCisgICAgICAgIHQuYmsoNTApCiAKLSMjIFdhbnQgdG8gZ2V0IHNvbWUgaW5mbz8KKyAgICByZXR1cm4gIkVWRU5UTE9PUCIKIAotI3ByaW50KHMxLCBzMikKLSNwcmludChwLCBxKQotI3ByaW50KHMxLnR1cnRsZXMoKSkKLSNwcmludChzMi50dXJ0bGVzKCkpCiAKLVRLLm1haW5sb29wKCkKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgbWFpbigpCisgICAgVEsubWFpbmxvb3AoKSAgIyBrZWVwIHdpbmRvdyBvcGVuIHVudGlsIHVzZXIgY2xvc2VzIGl0CmRpZmYgLS1naXQgYS9MaWIvdHlwZXMucHkgYi9MaWIvdHlwZXMucHkKaW5kZXggY2ZkMDllYS4uNGZiMmRlZiAxMDA2NDQKLS0tIGEvTGliL3R5cGVzLnB5CisrKyBiL0xpYi90eXBlcy5weQpAQCAtOTksMyArOTksNjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIGEgKG5vbi1zdHJpY3QpIHN1YmNsYXNzICIKICAgICAgICAgICAgICAgICAgICAgICAgICJvZiB0aGUgbWV0YWNsYXNzZXMgb2YgYWxsIGl0cyBiYXNlcyIpCiAgICAgcmV0dXJuIHdpbm5lcgorCitjbGFzcyBEeW5hbWljQ2xhc3NBdHRyaWJ1dGU6CisgICAgIiIiUm91dGUgYXR0cmlidXRlIGFjY2VzcyBvbiBhIGNsYXNzIHRvIF9fZ2V0YXR0cl9fLgorCisgICAgVGhpcyBpcyBhIGRlc2NyaXB0b3IsIHVzZWQgdG8gZGVmaW5lIGF0dHJpYnV0ZXMgdGhhdCBhY3QgZGlmZmVyZW50bHkgd2hlbgorICAgIGFjY2Vzc2VkIHRocm91Z2ggYW4gaW5zdGFuY2UgYW5kIHRocm91Z2ggYSBjbGFzcy4gIEluc3RhbmNlIGFjY2VzcyByZW1haW5zCisgICAgbm9ybWFsLCBidXQgYWNjZXNzIHRvIGFuIGF0dHJpYnV0ZSB0aHJvdWdoIGEgY2xhc3Mgd2lsbCBiZSByb3V0ZWQgdG8gdGhlCisgICAgY2xhc3MncyBfX2dldGF0dHJfXyBtZXRob2Q7IHRoaXMgaXMgZG9uZSBieSByYWlzaW5nIEF0dHJpYnV0ZUVycm9yLgorCisgICAgVGhpcyBhbGxvd3Mgb25lIHRvIGhhdmUgcHJvcGVydGllcyBhY3RpdmUgb24gYW4gaW5zdGFuY2UsIGFuZCBoYXZlIHZpcnR1YWwKKyAgICBhdHRyaWJ1dGVzIG9uIHRoZSBjbGFzcyB3aXRoIHRoZSBzYW1lIG5hbWUgKHNlZSBFbnVtIGZvciBhbiBleGFtcGxlKS4KKworICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmZ2V0PU5vbmUsIGZzZXQ9Tm9uZSwgZmRlbD1Ob25lLCBkb2M9Tm9uZSk6CisgICAgICAgIHNlbGYuZmdldCA9IGZnZXQKKyAgICAgICAgc2VsZi5mc2V0ID0gZnNldAorICAgICAgICBzZWxmLmZkZWwgPSBmZGVsCisgICAgICAgICMgbmV4dCB0d28gbGluZXMgbWFrZSBEeW5hbWljQ2xhc3NBdHRyaWJ1dGUgYWN0IHRoZSBzYW1lIGFzIHByb3BlcnR5CisgICAgICAgIHNlbGYuX19kb2NfXyA9IGRvYyBvciBmZ2V0Ll9fZG9jX18KKyAgICAgICAgc2VsZi5vdmVyd3JpdGVfZG9jID0gZG9jIGlzIE5vbmUKKyAgICAgICAgIyBzdXBwb3J0IGZvciBhYnN0cmFjdCBtZXRob2RzCisgICAgICAgIHNlbGYuX19pc2Fic3RyYWN0bWV0aG9kX18gPSBib29sKGdldGF0dHIoZmdldCwgJ19faXNhYnN0cmFjdG1ldGhvZF9fJywgRmFsc2UpKQorCisgICAgZGVmIF9fZ2V0X18oc2VsZiwgaW5zdGFuY2UsIG93bmVyY2xhc3M9Tm9uZSk6CisgICAgICAgIGlmIGluc3RhbmNlIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBzZWxmLl9faXNhYnN0cmFjdG1ldGhvZF9fOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmCisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigpCisgICAgICAgIGVsaWYgc2VsZi5mZ2V0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigidW5yZWFkYWJsZSBhdHRyaWJ1dGUiKQorICAgICAgICByZXR1cm4gc2VsZi5mZ2V0KGluc3RhbmNlKQorCisgICAgZGVmIF9fc2V0X18oc2VsZiwgaW5zdGFuY2UsIHZhbHVlKToKKyAgICAgICAgaWYgc2VsZi5mc2V0IGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBBdHRyaWJ1dGVFcnJvcigiY2FuJ3Qgc2V0IGF0dHJpYnV0ZSIpCisgICAgICAgIHNlbGYuZnNldChpbnN0YW5jZSwgdmFsdWUpCisKKyAgICBkZWYgX19kZWxldGVfXyhzZWxmLCBpbnN0YW5jZSk6CisgICAgICAgIGlmIHNlbGYuZmRlbCBpcyBOb25lOgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IoImNhbid0IGRlbGV0ZSBhdHRyaWJ1dGUiKQorICAgICAgICBzZWxmLmZkZWwoaW5zdGFuY2UpCisKKyAgICBkZWYgZ2V0dGVyKHNlbGYsIGZnZXQpOgorICAgICAgICBmZG9jID0gZmdldC5fX2RvY19fIGlmIHNlbGYub3ZlcndyaXRlX2RvYyBlbHNlIE5vbmUKKyAgICAgICAgcmVzdWx0ID0gdHlwZShzZWxmKShmZ2V0LCBzZWxmLmZzZXQsIHNlbGYuZmRlbCwgZmRvYyBvciBzZWxmLl9fZG9jX18pCisgICAgICAgIHJlc3VsdC5vdmVyd3JpdGVfZG9jID0gc2VsZi5vdmVyd3JpdGVfZG9jCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBzZXR0ZXIoc2VsZiwgZnNldCk6CisgICAgICAgIHJlc3VsdCA9IHR5cGUoc2VsZikoc2VsZi5mZ2V0LCBmc2V0LCBzZWxmLmZkZWwsIHNlbGYuX19kb2NfXykKKyAgICAgICAgcmVzdWx0Lm92ZXJ3cml0ZV9kb2MgPSBzZWxmLm92ZXJ3cml0ZV9kb2MKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGRlbGV0ZXIoc2VsZiwgZmRlbCk6CisgICAgICAgIHJlc3VsdCA9IHR5cGUoc2VsZikoc2VsZi5mZ2V0LCBzZWxmLmZzZXQsIGZkZWwsIHNlbGYuX19kb2NfXykKKyAgICAgICAgcmVzdWx0Lm92ZXJ3cml0ZV9kb2MgPSBzZWxmLm92ZXJ3cml0ZV9kb2MKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKK19fYWxsX18gPSBbbiBmb3IgbiBpbiBnbG9iYWxzKCkgaWYgbls6MV0gIT0gJ18nXQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5IGIvTGliL3VuaXR0ZXN0L19fbWFpbl9fLnB5CmluZGV4IDc5OGViYzAuLjI2NjMxNzggMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9fX21haW5fXy5weQorKysgYi9MaWIvdW5pdHRlc3QvX19tYWluX18ucHkKQEAgLTEzLDcgKzEzLDYgQEAKIAogX191bml0dGVzdCA9IFRydWUKIAotZnJvbSAubWFpbiBpbXBvcnQgbWFpbiwgVGVzdFByb2dyYW0sIFVTQUdFX0FTX01BSU4KLVRlc3RQcm9ncmFtLlVTQUdFID0gVVNBR0VfQVNfTUFJTgorZnJvbSAubWFpbiBpbXBvcnQgbWFpbiwgVGVzdFByb2dyYW0KIAogbWFpbihtb2R1bGU9Tm9uZSkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9jYXNlLnB5IGIvTGliL3VuaXR0ZXN0L2Nhc2UucHkKaW5kZXggZjU2YWY1NS4uOGE5ZjFjMCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L2Nhc2UucHkKKysrIGIvTGliL3VuaXR0ZXN0L2Nhc2UucHkKQEAgLTMsMTQgKzMsMTcgQEAKIGltcG9ydCBzeXMKIGltcG9ydCBmdW5jdG9vbHMKIGltcG9ydCBkaWZmbGliCitpbXBvcnQgbG9nZ2luZwogaW1wb3J0IHBwcmludAogaW1wb3J0IHJlCiBpbXBvcnQgd2FybmluZ3MKIGltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCB0cmFjZWJhY2sKIAogZnJvbSAuIGltcG9ydCByZXN1bHQKIGZyb20gLnV0aWwgaW1wb3J0IChzdHJjbGFzcywgc2FmZV9yZXByLCBfY291bnRfZGlmZl9hbGxfcHVycG9zZSwKLSAgICAgICAgICAgICAgICAgICBfY291bnRfZGlmZl9oYXNoYWJsZSkKKyAgICAgICAgICAgICAgICAgICBfY291bnRfZGlmZl9oYXNoYWJsZSwgX2NvbW1vbl9zaG9ydGVuX3JlcHIpCiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKQEAgLTI2LDE3ICsyOSwxMSBAQAogICAgIGluc3RlYWQgb2YgcmFpc2luZyB0aGlzIGRpcmVjdGx5LgogICAgICIiIgogCi1jbGFzcyBfRXhwZWN0ZWRGYWlsdXJlKEV4Y2VwdGlvbik6CitjbGFzcyBfU2hvdWxkU3RvcChFeGNlcHRpb24pOgogICAgICIiIgotICAgIFJhaXNlIHRoaXMgd2hlbiBhIHRlc3QgaXMgZXhwZWN0ZWQgdG8gZmFpbC4KLQotICAgIFRoaXMgaXMgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLgorICAgIFRoZSB0ZXN0IHNob3VsZCBzdG9wLgogICAgICIiIgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGV4Y19pbmZvKToKLSAgICAgICAgc3VwZXIoX0V4cGVjdGVkRmFpbHVyZSwgc2VsZikuX19pbml0X18oKQotICAgICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8KLQogY2xhc3MgX1VuZXhwZWN0ZWRTdWNjZXNzKEV4Y2VwdGlvbik6CiAgICAgIiIiCiAgICAgVGhlIHRlc3Qgd2FzIHN1cHBvc2VkIHRvIGZhaWwsIGJ1dCBpdCBkaWRuJ3QhCkBAIC00NCwxMyArNDEsNDMgQEAKIAogCiBjbGFzcyBfT3V0Y29tZShvYmplY3QpOgotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVzdWx0PU5vbmUpOgorICAgICAgICBzZWxmLmV4cGVjdGluZ19mYWlsdXJlID0gRmFsc2UKKyAgICAgICAgc2VsZi5yZXN1bHQgPSByZXN1bHQKKyAgICAgICAgc2VsZi5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHMgPSBoYXNhdHRyKHJlc3VsdCwgImFkZFN1YlRlc3QiKQogICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBUcnVlCi0gICAgICAgIHNlbGYuc2tpcHBlZCA9IE5vbmUKLSAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2VzcyA9IE5vbmUKKyAgICAgICAgc2VsZi5za2lwcGVkID0gW10KICAgICAgICAgc2VsZi5leHBlY3RlZEZhaWx1cmUgPSBOb25lCiAgICAgICAgIHNlbGYuZXJyb3JzID0gW10KLSAgICAgICAgc2VsZi5mYWlsdXJlcyA9IFtdCisKKyAgICBAY29udGV4dGxpYi5jb250ZXh0bWFuYWdlcgorICAgIGRlZiB0ZXN0UGFydEV4ZWN1dG9yKHNlbGYsIHRlc3RfY2FzZSwgaXNUZXN0PUZhbHNlKToKKyAgICAgICAgb2xkX3N1Y2Nlc3MgPSBzZWxmLnN1Y2Nlc3MKKyAgICAgICAgc2VsZi5zdWNjZXNzID0gVHJ1ZQorICAgICAgICB0cnk6CisgICAgICAgICAgICB5aWVsZAorICAgICAgICBleGNlcHQgS2V5Ym9hcmRJbnRlcnJ1cHQ6CisgICAgICAgICAgICByYWlzZQorICAgICAgICBleGNlcHQgU2tpcFRlc3QgYXMgZToKKyAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICBzZWxmLnNraXBwZWQuYXBwZW5kKCh0ZXN0X2Nhc2UsIHN0cihlKSkpCisgICAgICAgIGV4Y2VwdCBfU2hvdWxkU3RvcDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgZXhjX2luZm8gPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgaWYgc2VsZi5leHBlY3RpbmdfZmFpbHVyZToKKyAgICAgICAgICAgICAgICBzZWxmLmV4cGVjdGVkRmFpbHVyZSA9IGV4Y19pbmZvCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuc3VjY2VzcyA9IEZhbHNlCisgICAgICAgICAgICAgICAgc2VsZi5lcnJvcnMuYXBwZW5kKCh0ZXN0X2Nhc2UsIGV4Y19pbmZvKSkKKyAgICAgICAgICAgICMgZXhwbGljaXRseSBicmVhayBhIHJlZmVyZW5jZSBjeWNsZToKKyAgICAgICAgICAgICMgZXhjX2luZm8gLT4gZnJhbWUgLT4gZXhjX2luZm8KKyAgICAgICAgICAgIGV4Y19pbmZvID0gTm9uZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgc2VsZi5yZXN1bHRfc3VwcG9ydHNfc3VidGVzdHMgYW5kIHNlbGYuc3VjY2VzczoKKyAgICAgICAgICAgICAgICBzZWxmLmVycm9ycy5hcHBlbmQoKHRlc3RfY2FzZSwgTm9uZSkpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLnN1Y2Nlc3MgPSBzZWxmLnN1Y2Nlc3MgYW5kIG9sZF9zdWNjZXNzCiAKIAogZGVmIF9pZChvYmopOgpAQCAtODgsMjIgKzExNSwyNiBAQAogICAgICAgICByZXR1cm4gc2tpcChyZWFzb24pCiAgICAgcmV0dXJuIF9pZAogCi0KLWRlZiBleHBlY3RlZEZhaWx1cmUoZnVuYyk6Ci0gICAgQGZ1bmN0b29scy53cmFwcyhmdW5jKQotICAgIGRlZiB3cmFwcGVyKCphcmdzLCAqKmt3YXJncyk6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKQotICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgotICAgICAgICAgICAgcmFpc2UgX0V4cGVjdGVkRmFpbHVyZShzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgcmFpc2UgX1VuZXhwZWN0ZWRTdWNjZXNzCi0gICAgcmV0dXJuIHdyYXBwZXIKK2RlZiBleHBlY3RlZEZhaWx1cmUodGVzdF9pdGVtKToKKyAgICB0ZXN0X2l0ZW0uX191bml0dGVzdF9leHBlY3RpbmdfZmFpbHVyZV9fID0gVHJ1ZQorICAgIHJldHVybiB0ZXN0X2l0ZW0KIAogCi1jbGFzcyBfQXNzZXJ0UmFpc2VzQmFzZUNvbnRleHQob2JqZWN0KToKK2NsYXNzIF9CYXNlVGVzdENhc2VDb250ZXh0OgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSk6CisgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCisKKyAgICBkZWYgX3JhaXNlRmFpbHVyZShzZWxmLCBzdGFuZGFyZE1zZyk6CisgICAgICAgIG1zZyA9IHNlbGYudGVzdF9jYXNlLl9mb3JtYXRNZXNzYWdlKHNlbGYubXNnLCBzdGFuZGFyZE1zZykKKyAgICAgICAgcmFpc2Ugc2VsZi50ZXN0X2Nhc2UuZmFpbHVyZUV4Y2VwdGlvbihtc2cpCisKKworY2xhc3MgX0Fzc2VydFJhaXNlc0Jhc2VDb250ZXh0KF9CYXNlVGVzdENhc2VDb250ZXh0KToKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleHBlY3RlZCwgdGVzdF9jYXNlLCBjYWxsYWJsZV9vYmo9Tm9uZSwKICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfcmVnZXg9Tm9uZSk6CisgICAgICAgIF9CYXNlVGVzdENhc2VDb250ZXh0Ll9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSkKICAgICAgICAgc2VsZi5leHBlY3RlZCA9IGV4cGVjdGVkCiAgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCiAgICAgICAgIGlmIGNhbGxhYmxlX29iaiBpcyBub3QgTm9uZToKQEAgLTExMywxNSArMTQ0LDExIEBACiAgICAgICAgICAgICAgICAgc2VsZi5vYmpfbmFtZSA9IHN0cihjYWxsYWJsZV9vYmopCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLm9ial9uYW1lID0gTm9uZQotICAgICAgICBpZiBpc2luc3RhbmNlKGV4cGVjdGVkX3JlZ2V4LCAoYnl0ZXMsIHN0cikpOgorICAgICAgICBpZiBleHBlY3RlZF9yZWdleCBpcyBub3QgTm9uZToKICAgICAgICAgICAgIGV4cGVjdGVkX3JlZ2V4ID0gcmUuY29tcGlsZShleHBlY3RlZF9yZWdleCkKICAgICAgICAgc2VsZi5leHBlY3RlZF9yZWdleCA9IGV4cGVjdGVkX3JlZ2V4CiAgICAgICAgIHNlbGYubXNnID0gTm9uZQogCi0gICAgZGVmIF9yYWlzZUZhaWx1cmUoc2VsZiwgc3RhbmRhcmRNc2cpOgotICAgICAgICBtc2cgPSBzZWxmLnRlc3RfY2FzZS5fZm9ybWF0TWVzc2FnZShzZWxmLm1zZywgc3RhbmRhcmRNc2cpCi0gICAgICAgIHJhaXNlIHNlbGYudGVzdF9jYXNlLmZhaWx1cmVFeGNlcHRpb24obXNnKQotCiAgICAgZGVmIGhhbmRsZShzZWxmLCBuYW1lLCBjYWxsYWJsZV9vYmosIGFyZ3MsIGt3YXJncyk6CiAgICAgICAgICIiIgogICAgICAgICBJZiBjYWxsYWJsZV9vYmogaXMgTm9uZSwgYXNzZXJ0UmFpc2VzL1dhcm5zIGlzIGJlaW5nIHVzZWQgYXMgYQpAQCAtMTM1LDcgKzE2Miw2IEBACiAgICAgICAgICAgICBjYWxsYWJsZV9vYmooKmFyZ3MsICoqa3dhcmdzKQogCiAKLQogY2xhc3MgX0Fzc2VydFJhaXNlc0NvbnRleHQoX0Fzc2VydFJhaXNlc0Jhc2VDb250ZXh0KToKICAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIGltcGxlbWVudCBUZXN0Q2FzZS5hc3NlcnRSYWlzZXMqIG1ldGhvZHMuIiIiCiAKQEAgLTE1Myw2ICsxNzksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYub2JqX25hbWUpKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBzZWxmLl9yYWlzZUZhaWx1cmUoInt9IG5vdCByYWlzZWQiLmZvcm1hdChleGNfbmFtZSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cmFjZWJhY2suY2xlYXJfZnJhbWVzKHRiKQogICAgICAgICBpZiBub3QgaXNzdWJjbGFzcyhleGNfdHlwZSwgc2VsZi5leHBlY3RlZCk6CiAgICAgICAgICAgICAjIGxldCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMgcGFzcyB0aHJvdWdoCiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTIxNyw2ICsyNDUsNzQgQEAKICAgICAgICAgICAgIHNlbGYuX3JhaXNlRmFpbHVyZSgie30gbm90IHRyaWdnZXJlZCIuZm9ybWF0KGV4Y19uYW1lKSkKIAogCisKK19Mb2dnaW5nV2F0Y2hlciA9IGNvbGxlY3Rpb25zLm5hbWVkdHVwbGUoIl9Mb2dnaW5nV2F0Y2hlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsicmVjb3JkcyIsICJvdXRwdXQiXSkKKworCitjbGFzcyBfQ2FwdHVyaW5nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgICIiIgorICAgIEEgbG9nZ2luZyBoYW5kbGVyIGNhcHR1cmluZyBhbGwgKHJhdyBhbmQgZm9ybWF0dGVkKSBsb2dnaW5nIG91dHB1dC4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgbG9nZ2luZy5IYW5kbGVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYud2F0Y2hlciA9IF9Mb2dnaW5nV2F0Y2hlcihbXSwgW10pCisKKyAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgIHNlbGYud2F0Y2hlci5yZWNvcmRzLmFwcGVuZChyZWNvcmQpCisgICAgICAgIG1zZyA9IHNlbGYuZm9ybWF0KHJlY29yZCkKKyAgICAgICAgc2VsZi53YXRjaGVyLm91dHB1dC5hcHBlbmQobXNnKQorCisKKworY2xhc3MgX0Fzc2VydExvZ3NDb250ZXh0KF9CYXNlVGVzdENhc2VDb250ZXh0KToKKyAgICAiIiJBIGNvbnRleHQgbWFuYWdlciB1c2VkIHRvIGltcGxlbWVudCBUZXN0Q2FzZS5hc3NlcnRMb2dzKCkuIiIiCisKKyAgICBMT0dHSU5HX0ZPUk1BVCA9ICIlKGxldmVsbmFtZSlzOiUobmFtZSlzOiUobWVzc2FnZSlzIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSwgbG9nZ2VyX25hbWUsIGxldmVsKToKKyAgICAgICAgX0Jhc2VUZXN0Q2FzZUNvbnRleHQuX19pbml0X18oc2VsZiwgdGVzdF9jYXNlKQorICAgICAgICBzZWxmLmxvZ2dlcl9uYW1lID0gbG9nZ2VyX25hbWUKKyAgICAgICAgaWYgbGV2ZWw6CisgICAgICAgICAgICBzZWxmLmxldmVsID0gbG9nZ2luZy5fbmFtZVRvTGV2ZWwuZ2V0KGxldmVsLCBsZXZlbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYubGV2ZWwgPSBsb2dnaW5nLklORk8KKyAgICAgICAgc2VsZi5tc2cgPSBOb25lCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICBpZiBpc2luc3RhbmNlKHNlbGYubG9nZ2VyX25hbWUsIGxvZ2dpbmcuTG9nZ2VyKToKKyAgICAgICAgICAgIGxvZ2dlciA9IHNlbGYubG9nZ2VyID0gc2VsZi5sb2dnZXJfbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nZ2VyID0gc2VsZi5sb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcihzZWxmLmxvZ2dlcl9uYW1lKQorICAgICAgICBmb3JtYXR0ZXIgPSBsb2dnaW5nLkZvcm1hdHRlcihzZWxmLkxPR0dJTkdfRk9STUFUKQorICAgICAgICBoYW5kbGVyID0gX0NhcHR1cmluZ0hhbmRsZXIoKQorICAgICAgICBoYW5kbGVyLnNldEZvcm1hdHRlcihmb3JtYXR0ZXIpCisgICAgICAgIHNlbGYud2F0Y2hlciA9IGhhbmRsZXIud2F0Y2hlcgorICAgICAgICBzZWxmLm9sZF9oYW5kbGVycyA9IGxvZ2dlci5oYW5kbGVyc1s6XQorICAgICAgICBzZWxmLm9sZF9sZXZlbCA9IGxvZ2dlci5sZXZlbAorICAgICAgICBzZWxmLm9sZF9wcm9wYWdhdGUgPSBsb2dnZXIucHJvcGFnYXRlCisgICAgICAgIGxvZ2dlci5oYW5kbGVycyA9IFtoYW5kbGVyXQorICAgICAgICBsb2dnZXIuc2V0TGV2ZWwoc2VsZi5sZXZlbCkKKyAgICAgICAgbG9nZ2VyLnByb3BhZ2F0ZSA9IEZhbHNlCisgICAgICAgIHJldHVybiBoYW5kbGVyLndhdGNoZXIKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCBleGNfdHlwZSwgZXhjX3ZhbHVlLCB0Yik6CisgICAgICAgIHNlbGYubG9nZ2VyLmhhbmRsZXJzID0gc2VsZi5vbGRfaGFuZGxlcnMKKyAgICAgICAgc2VsZi5sb2dnZXIucHJvcGFnYXRlID0gc2VsZi5vbGRfcHJvcGFnYXRlCisgICAgICAgIHNlbGYubG9nZ2VyLnNldExldmVsKHNlbGYub2xkX2xldmVsKQorICAgICAgICBpZiBleGNfdHlwZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICMgbGV0IHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBwYXNzIHRocm91Z2gKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICBpZiBsZW4oc2VsZi53YXRjaGVyLnJlY29yZHMpID09IDA6CisgICAgICAgICAgICBzZWxmLl9yYWlzZUZhaWx1cmUoCisgICAgICAgICAgICAgICAgIm5vIGxvZ3Mgb2YgbGV2ZWwge30gb3IgaGlnaGVyIHRyaWdnZXJlZCBvbiB7fSIKKyAgICAgICAgICAgICAgICAuZm9ybWF0KGxvZ2dpbmcuZ2V0TGV2ZWxOYW1lKHNlbGYubGV2ZWwpLCBzZWxmLmxvZ2dlci5uYW1lKSkKKworCiBjbGFzcyBUZXN0Q2FzZShvYmplY3QpOgogICAgICIiIkEgY2xhc3Mgd2hvc2UgaW5zdGFuY2VzIGFyZSBzaW5nbGUgdGVzdCBjYXNlcy4KIApAQCAtMjcwLDcgKzM2Niw3IEBACiAgICAgICAgICAgIG5vdCBoYXZlIGEgbWV0aG9kIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgogICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fdGVzdE1ldGhvZE5hbWUgPSBtZXRob2ROYW1lCi0gICAgICAgIHNlbGYuX291dGNvbWVGb3JEb0NsZWFudXBzID0gTm9uZQorICAgICAgICBzZWxmLl9vdXRjb21lID0gTm9uZQogICAgICAgICBzZWxmLl90ZXN0TWV0aG9kRG9jID0gJ05vIHRlc3QnCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHRlc3RNZXRob2QgPSBnZXRhdHRyKHNlbGYsIG1ldGhvZE5hbWUpCkBAIC0yODMsNiArMzc5LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuX3Rlc3RNZXRob2REb2MgPSB0ZXN0TWV0aG9kLl9fZG9jX18KICAgICAgICAgc2VsZi5fY2xlYW51cHMgPSBbXQorICAgICAgICBzZWxmLl9zdWJ0ZXN0ID0gTm9uZQogCiAgICAgICAgICMgTWFwIHR5cGVzIHRvIGN1c3RvbSBhc3NlcnRFcXVhbCBmdW5jdGlvbnMgdGhhdCB3aWxsIGNvbXBhcmUKICAgICAgICAgIyBpbnN0YW5jZXMgb2Ygc2FpZCB0eXBlIGluIG1vcmUgZGV0YWlsIHRvIGdlbmVyYXRlIGEgbW9yZSB1c2VmdWwKQEAgLTM3MCw0NCArNDY3LDgwIEBACiAgICAgICAgIHJldHVybiAiPCVzIHRlc3RNZXRob2Q9JXM+IiAlIFwKICAgICAgICAgICAgICAgIChzdHJjbGFzcyhzZWxmLl9fY2xhc3NfXyksIHNlbGYuX3Rlc3RNZXRob2ROYW1lKQogCi0gICAgZGVmIF9hZGRTa2lwKHNlbGYsIHJlc3VsdCwgcmVhc29uKToKKyAgICBkZWYgX2FkZFNraXAoc2VsZiwgcmVzdWx0LCB0ZXN0X2Nhc2UsIHJlYXNvbik6CiAgICAgICAgIGFkZFNraXAgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZFNraXAnLCBOb25lKQogICAgICAgICBpZiBhZGRTa2lwIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgYWRkU2tpcChzZWxmLCByZWFzb24pCisgICAgICAgICAgICBhZGRTa2lwKHRlc3RfY2FzZSwgcmVhc29uKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkU2tpcCBtZXRob2QsIHNraXBzIG5vdCByZXBvcnRlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nLCAyKQotICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHRlc3RfY2FzZSkKIAotICAgIGRlZiBfZXhlY3V0ZVRlc3RQYXJ0KHNlbGYsIGZ1bmN0aW9uLCBvdXRjb21lLCBpc1Rlc3Q9RmFsc2UpOgorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIHN1YlRlc3Qoc2VsZiwgbXNnPU5vbmUsICoqcGFyYW1zKToKKyAgICAgICAgIiIiUmV0dXJuIGEgY29udGV4dCBtYW5hZ2VyIHRoYXQgd2lsbCByZXR1cm4gdGhlIGVuY2xvc2VkIGJsb2NrCisgICAgICAgIG9mIGNvZGUgaW4gYSBzdWJ0ZXN0IGlkZW50aWZpZWQgYnkgdGhlIG9wdGlvbmFsIG1lc3NhZ2UgYW5kCisgICAgICAgIGtleXdvcmQgcGFyYW1ldGVycy4gIEEgZmFpbHVyZSBpbiB0aGUgc3VidGVzdCBtYXJrcyB0aGUgdGVzdAorICAgICAgICBjYXNlIGFzIGZhaWxlZCBidXQgcmVzdW1lcyBleGVjdXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgZW5jbG9zZWQKKyAgICAgICAgYmxvY2ssIGFsbG93aW5nIGZ1cnRoZXIgdGVzdCBjb2RlIHRvIGJlIGV4ZWN1dGVkLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgbm90IHNlbGYuX291dGNvbWUucmVzdWx0X3N1cHBvcnRzX3N1YnRlc3RzOgorICAgICAgICAgICAgeWllbGQKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBwYXJlbnQgPSBzZWxmLl9zdWJ0ZXN0CisgICAgICAgIGlmIHBhcmVudCBpcyBOb25lOgorICAgICAgICAgICAgcGFyYW1zX21hcCA9IGNvbGxlY3Rpb25zLkNoYWluTWFwKHBhcmFtcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHBhcmFtc19tYXAgPSBwYXJlbnQucGFyYW1zLm5ld19jaGlsZChwYXJhbXMpCisgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBfU3ViVGVzdChzZWxmLCBtc2csIHBhcmFtc19tYXApCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIGZ1bmN0aW9uKCkKLSAgICAgICAgZXhjZXB0IEtleWJvYXJkSW50ZXJydXB0OgotICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IFNraXBUZXN0IGFzIGU6Ci0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgb3V0Y29tZS5za2lwcGVkID0gc3RyKGUpCi0gICAgICAgIGV4Y2VwdCBfVW5leHBlY3RlZFN1Y2Nlc3M6Ci0gICAgICAgICAgICBleGNfaW5mbyA9IHN5cy5leGNfaW5mbygpCi0gICAgICAgICAgICBvdXRjb21lLnN1Y2Nlc3MgPSBGYWxzZQotICAgICAgICAgICAgaWYgaXNUZXN0OgotICAgICAgICAgICAgICAgIG91dGNvbWUudW5leHBlY3RlZFN1Y2Nlc3MgPSBleGNfaW5mbwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBvdXRjb21lLmVycm9ycy5hcHBlbmQoZXhjX2luZm8pCi0gICAgICAgIGV4Y2VwdCBfRXhwZWN0ZWRGYWlsdXJlOgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgICAgIGlmIGlzVGVzdDoKLSAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSA9IGV4Y19pbmZvCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChleGNfaW5mbykKLSAgICAgICAgZXhjZXB0IHNlbGYuZmFpbHVyZUV4Y2VwdGlvbjoKLSAgICAgICAgICAgIG91dGNvbWUuc3VjY2VzcyA9IEZhbHNlCi0gICAgICAgICAgICBvdXRjb21lLmZhaWx1cmVzLmFwcGVuZChzeXMuZXhjX2luZm8oKSkKLSAgICAgICAgICAgIGV4Y19pbmZvID0gc3lzLmV4Y19pbmZvKCkKLSAgICAgICAgZXhjZXB0OgotICAgICAgICAgICAgb3V0Y29tZS5zdWNjZXNzID0gRmFsc2UKLSAgICAgICAgICAgIG91dGNvbWUuZXJyb3JzLmFwcGVuZChzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgICAgIHdpdGggc2VsZi5fb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYuX3N1YnRlc3QsIGlzVGVzdD1UcnVlKToKKyAgICAgICAgICAgICAgICB5aWVsZAorICAgICAgICAgICAgaWYgbm90IHNlbGYuX291dGNvbWUuc3VjY2VzczoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBzZWxmLl9vdXRjb21lLnJlc3VsdAorICAgICAgICAgICAgICAgIGlmIHJlc3VsdCBpcyBub3QgTm9uZSBhbmQgcmVzdWx0LmZhaWxmYXN0OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBfU2hvdWxkU3RvcAorICAgICAgICAgICAgZWxpZiBzZWxmLl9vdXRjb21lLmV4cGVjdGVkRmFpbHVyZToKKyAgICAgICAgICAgICAgICAjIElmIHRoZSB0ZXN0IGlzIGV4cGVjdGluZyBhIGZhaWx1cmUsIHdlIHJlYWxseSB3YW50IHRvCisgICAgICAgICAgICAgICAgIyBzdG9wIG5vdyBhbmQgcmVnaXN0ZXIgdGhlIGV4cGVjdGVkIGZhaWx1cmUuCisgICAgICAgICAgICAgICAgcmFpc2UgX1Nob3VsZFN0b3AKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuX3N1YnRlc3QgPSBwYXJlbnQKKworICAgIGRlZiBfZmVlZEVycm9yc1RvUmVzdWx0KHNlbGYsIHJlc3VsdCwgZXJyb3JzKToKKyAgICAgICAgZm9yIHRlc3QsIGV4Y19pbmZvIGluIGVycm9yczoKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodGVzdCwgX1N1YlRlc3QpOgorICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWJUZXN0KHRlc3QudGVzdF9jYXNlLCB0ZXN0LCBleGNfaW5mbykKKyAgICAgICAgICAgIGVsaWYgZXhjX2luZm8gaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgaXNzdWJjbGFzcyhleGNfaW5mb1swXSwgc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUodGVzdCwgZXhjX2luZm8pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHRlc3QsIGV4Y19pbmZvKQorCisgICAgZGVmIF9hZGRFeHBlY3RlZEZhaWx1cmUoc2VsZiwgcmVzdWx0LCBleGNfaW5mbyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZSA9IHJlc3VsdC5hZGRFeHBlY3RlZEZhaWx1cmUKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkRXhwZWN0ZWRGYWlsdXJlIG1ldGhvZCwgcmVwb3J0aW5nIGFzIHBhc3NlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBleGNfaW5mbykKKworICAgIGRlZiBfYWRkVW5leHBlY3RlZFN1Y2Nlc3Moc2VsZiwgcmVzdWx0KToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgYWRkVW5leHBlY3RlZFN1Y2Nlc3MgPSByZXN1bHQuYWRkVW5leHBlY3RlZFN1Y2Nlc3MKKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgd2FybmluZ3Mud2FybigiVGVzdFJlc3VsdCBoYXMgbm8gYWRkVW5leHBlY3RlZFN1Y2Nlc3MgbWV0aG9kLCByZXBvcnRpbmcgYXMgZmFpbHVyZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHBhc3MgYW4gYWN0dWFsIGV4Y2VwdGlvbiBhbmQgdHJhY2ViYWNrIHRvIGFkZEZhaWx1cmUsCisgICAgICAgICAgICAjIG90aGVyd2lzZSB0aGUgbGVnYWN5IHJlc3VsdCBjYW4gY2hva2UuCisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmFpc2UgX1VuZXhwZWN0ZWRTdWNjZXNzIGZyb20gTm9uZQorICAgICAgICAgICAgZXhjZXB0IF9VbmV4cGVjdGVkU3VjY2VzczoKKyAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBzeXMuZXhjX2luZm8oKSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCiAKICAgICBkZWYgcnVuKHNlbGYsIHJlc3VsdD1Ob25lKToKICAgICAgICAgb3JpZ19yZXN1bHQgPSByZXN1bHQKQEAgLTQyNiw0NiArNTU5LDQxIEBACiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc2tpcF93aHkgPSAoZ2V0YXR0cihzZWxmLl9fY2xhc3NfXywgJ19fdW5pdHRlc3Rfc2tpcF93aHlfXycsICcnKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGdldGF0dHIodGVzdE1ldGhvZCwgJ19fdW5pdHRlc3Rfc2tpcF93aHlfXycsICcnKSkKLSAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgc2tpcF93aHkpCisgICAgICAgICAgICAgICAgc2VsZi5fYWRkU2tpcChyZXN1bHQsIHNlbGYsIHNraXBfd2h5KQogICAgICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgICAgICByZXN1bHQuc3RvcFRlc3Qoc2VsZikKICAgICAgICAgICAgIHJldHVybgorICAgICAgICBleHBlY3RpbmdfZmFpbHVyZV9tZXRob2QgPSBnZXRhdHRyKHRlc3RNZXRob2QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fdW5pdHRlc3RfZXhwZWN0aW5nX2ZhaWx1cmVfXyIsIEZhbHNlKQorICAgICAgICBleHBlY3RpbmdfZmFpbHVyZV9jbGFzcyA9IGdldGF0dHIoc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX3VuaXR0ZXN0X2V4cGVjdGluZ19mYWlsdXJlX18iLCBGYWxzZSkKKyAgICAgICAgZXhwZWN0aW5nX2ZhaWx1cmUgPSBleHBlY3RpbmdfZmFpbHVyZV9jbGFzcyBvciBleHBlY3RpbmdfZmFpbHVyZV9tZXRob2QKKyAgICAgICAgb3V0Y29tZSA9IF9PdXRjb21lKHJlc3VsdCkKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgb3V0Y29tZSA9IF9PdXRjb21lKCkKLSAgICAgICAgICAgIHNlbGYuX291dGNvbWVGb3JEb0NsZWFudXBzID0gb3V0Y29tZQorICAgICAgICAgICAgc2VsZi5fb3V0Y29tZSA9IG91dGNvbWUKIAotICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYuc2V0VXAsIG91dGNvbWUpCisgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLnNldFVwKCkKICAgICAgICAgICAgIGlmIG91dGNvbWUuc3VjY2VzczoKLSAgICAgICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQodGVzdE1ldGhvZCwgb3V0Y29tZSwgaXNUZXN0PVRydWUpCi0gICAgICAgICAgICAgICAgc2VsZi5fZXhlY3V0ZVRlc3RQYXJ0KHNlbGYudGVhckRvd24sIG91dGNvbWUpCisgICAgICAgICAgICAgICAgb3V0Y29tZS5leHBlY3RpbmdfZmFpbHVyZSA9IGV4cGVjdGluZ19mYWlsdXJlCisgICAgICAgICAgICAgICAgd2l0aCBvdXRjb21lLnRlc3RQYXJ0RXhlY3V0b3Ioc2VsZiwgaXNUZXN0PVRydWUpOgorICAgICAgICAgICAgICAgICAgICB0ZXN0TWV0aG9kKCkKKyAgICAgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGluZ19mYWlsdXJlID0gRmFsc2UKKyAgICAgICAgICAgICAgICB3aXRoIG91dGNvbWUudGVzdFBhcnRFeGVjdXRvcihzZWxmKToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi50ZWFyRG93bigpCiAKICAgICAgICAgICAgIHNlbGYuZG9DbGVhbnVwcygpCisgICAgICAgICAgICBmb3IgdGVzdCwgcmVhc29uIGluIG91dGNvbWUuc2tpcHBlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgdGVzdCwgcmVhc29uKQorICAgICAgICAgICAgc2VsZi5fZmVlZEVycm9yc1RvUmVzdWx0KHJlc3VsdCwgb3V0Y29tZS5lcnJvcnMpCiAgICAgICAgICAgICBpZiBvdXRjb21lLnN1Y2Nlc3M6Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaWYgb3V0Y29tZS5za2lwcGVkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRTa2lwKHJlc3VsdCwgb3V0Y29tZS5za2lwcGVkKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmVycm9yczoKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEVycm9yKHNlbGYsIGV4Y19pbmZvKQotICAgICAgICAgICAgICAgIGZvciBleGNfaW5mbyBpbiBvdXRjb21lLmZhaWx1cmVzOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkRmFpbHVyZShzZWxmLCBleGNfaW5mbykKLSAgICAgICAgICAgICAgICBpZiBvdXRjb21lLnVuZXhwZWN0ZWRTdWNjZXNzIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRVbmV4cGVjdGVkU3VjY2VzcyA9IGdldGF0dHIocmVzdWx0LCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCBOb25lKQotICAgICAgICAgICAgICAgICAgICBpZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZFVuZXhwZWN0ZWRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgaWYgZXhwZWN0aW5nX2ZhaWx1cmU6CisgICAgICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fYWRkRXhwZWN0ZWRGYWlsdXJlKHJlc3VsdCwgb3V0Y29tZS5leHBlY3RlZEZhaWx1cmUpCiAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5ncy53YXJuKCJUZXN0UmVzdWx0IGhhcyBubyBhZGRVbmV4cGVjdGVkU3VjY2VzcyBtZXRob2QsIHJlcG9ydGluZyBhcyBmYWlsdXJlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJ1bnRpbWVXYXJuaW5nKQotICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZEZhaWx1cmUoc2VsZiwgb3V0Y29tZS51bmV4cGVjdGVkU3VjY2VzcykKLQotICAgICAgICAgICAgICAgIGlmIG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICBhZGRFeHBlY3RlZEZhaWx1cmUgPSBnZXRhdHRyKHJlc3VsdCwgJ2FkZEV4cGVjdGVkRmFpbHVyZScsIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgIGlmIGFkZEV4cGVjdGVkRmFpbHVyZSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZEV4cGVjdGVkRmFpbHVyZShzZWxmLCBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSkKLSAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIlRlc3RSZXN1bHQgaGFzIG5vIGFkZEV4cGVjdGVkRmFpbHVyZSBtZXRob2QsIHJlcG9ydGluZyBhcyBwYXNzZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSdW50aW1lV2FybmluZykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGRTdWNjZXNzKHNlbGYpCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9hZGRVbmV4cGVjdGVkU3VjY2VzcyhyZXN1bHQpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1Y2Nlc3Moc2VsZikKICAgICAgICAgICAgIHJldHVybiByZXN1bHQKICAgICAgICAgZmluYWxseToKICAgICAgICAgICAgIHJlc3VsdC5zdG9wVGVzdChzZWxmKQpAQCAtNDc0LDE0ICs2MDIsMjMgQEAKICAgICAgICAgICAgICAgICBpZiBzdG9wVGVzdFJ1biBpcyBub3QgTm9uZToKICAgICAgICAgICAgICAgICAgICAgc3RvcFRlc3RSdW4oKQogCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgYnJlYWsgcmVmZXJlbmNlIGN5Y2xlczoKKyAgICAgICAgICAgICMgb3V0Y29tZS5lcnJvcnMgLT4gZnJhbWUgLT4gb3V0Y29tZSAtPiBvdXRjb21lLmVycm9ycworICAgICAgICAgICAgIyBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSAtPiBmcmFtZSAtPiBvdXRjb21lIC0+IG91dGNvbWUuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBvdXRjb21lLmVycm9ycy5jbGVhcigpCisgICAgICAgICAgICBvdXRjb21lLmV4cGVjdGVkRmFpbHVyZSA9IE5vbmUKKworICAgICAgICAgICAgIyBjbGVhciB0aGUgb3V0Y29tZSwgbm8gbW9yZSBuZWVkZWQKKyAgICAgICAgICAgIHNlbGYuX291dGNvbWUgPSBOb25lCisKICAgICBkZWYgZG9DbGVhbnVwcyhzZWxmKToKICAgICAgICAgIiIiRXhlY3V0ZSBhbGwgY2xlYW51cCBmdW5jdGlvbnMuIE5vcm1hbGx5IGNhbGxlZCBmb3IgeW91IGFmdGVyCiAgICAgICAgIHRlYXJEb3duLiIiIgotICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZUZvckRvQ2xlYW51cHMgb3IgX091dGNvbWUoKQorICAgICAgICBvdXRjb21lID0gc2VsZi5fb3V0Y29tZSBvciBfT3V0Y29tZSgpCiAgICAgICAgIHdoaWxlIHNlbGYuX2NsZWFudXBzOgogICAgICAgICAgICAgZnVuY3Rpb24sIGFyZ3MsIGt3YXJncyA9IHNlbGYuX2NsZWFudXBzLnBvcCgpCi0gICAgICAgICAgICBwYXJ0ID0gbGFtYmRhOiBmdW5jdGlvbigqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBzZWxmLl9leGVjdXRlVGVzdFBhcnQocGFydCwgb3V0Y29tZSkKKyAgICAgICAgICAgIHdpdGggb3V0Y29tZS50ZXN0UGFydEV4ZWN1dG9yKHNlbGYpOgorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCphcmdzLCAqKmt3YXJncykKIAogICAgICAgICAjIHJldHVybiB0aGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICAgICAgICAjIGV2ZW4gdGhvdWdoIHdlIG5vIGxvbmdlciB1cyBpdCBpbnRlcm5hbGx5CkBAIC02MDAsNiArNzM3LDI4IEBACiAgICAgICAgIGNvbnRleHQgPSBfQXNzZXJ0V2FybnNDb250ZXh0KGV4cGVjdGVkX3dhcm5pbmcsIHNlbGYsIGNhbGxhYmxlX29iaikKICAgICAgICAgcmV0dXJuIGNvbnRleHQuaGFuZGxlKCdhc3NlcnRXYXJucycsIGNhbGxhYmxlX29iaiwgYXJncywga3dhcmdzKQogCisgICAgZGVmIGFzc2VydExvZ3Moc2VsZiwgbG9nZ2VyPU5vbmUsIGxldmVsPU5vbmUpOgorICAgICAgICAiIiJGYWlsIHVubGVzcyBhIGxvZyBtZXNzYWdlIG9mIGxldmVsICpsZXZlbCogb3IgaGlnaGVyIGlzIGVtaXR0ZWQKKyAgICAgICAgb24gKmxvZ2dlcl9uYW1lKiBvciBpdHMgY2hpbGRyZW4uICBJZiBvbWl0dGVkLCAqbGV2ZWwqIGRlZmF1bHRzIHRvCisgICAgICAgIElORk8gYW5kICpsb2dnZXIqIGRlZmF1bHRzIHRvIHRoZSByb290IGxvZ2dlci4KKworICAgICAgICBUaGlzIG1ldGhvZCBtdXN0IGJlIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIsIGFuZCB3aWxsIHlpZWxkCisgICAgICAgIGEgcmVjb3JkaW5nIG9iamVjdCB3aXRoIHR3byBhdHRyaWJ1dGVzOiBgb3V0cHV0YCBhbmQgYHJlY29yZHNgLgorICAgICAgICBBdCB0aGUgZW5kIG9mIHRoZSBjb250ZXh0IG1hbmFnZXIsIHRoZSBgb3V0cHV0YCBhdHRyaWJ1dGUgd2lsbAorICAgICAgICBiZSBhIGxpc3Qgb2YgdGhlIG1hdGNoaW5nIGZvcm1hdHRlZCBsb2cgbWVzc2FnZXMgYW5kIHRoZQorICAgICAgICBgcmVjb3Jkc2AgYXR0cmlidXRlIHdpbGwgYmUgYSBsaXN0IG9mIHRoZSBjb3JyZXNwb25kaW5nIExvZ1JlY29yZAorICAgICAgICBvYmplY3RzLgorCisgICAgICAgIEV4YW1wbGU6OgorCisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygnZm9vJywgbGV2ZWw9J0lORk8nKSBhcyBjbToKKyAgICAgICAgICAgICAgICBsb2dnaW5nLmdldExvZ2dlcignZm9vJykuaW5mbygnZmlyc3QgbWVzc2FnZScpCisgICAgICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoJ2Zvby5iYXInKS5lcnJvcignc2Vjb25kIG1lc3NhZ2UnKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsnSU5GTzpmb286Zmlyc3QgbWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdFUlJPUjpmb28uYmFyOnNlY29uZCBtZXNzYWdlJ10pCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gX0Fzc2VydExvZ3NDb250ZXh0KHNlbGYsIGxvZ2dlciwgbGV2ZWwpCisKICAgICBkZWYgX2dldEFzc2VydEVxdWFsaXR5RnVuYyhzZWxmLCBmaXJzdCwgc2Vjb25kKToKICAgICAgICAgIiIiR2V0IGEgZGV0YWlsZWQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgdGhlIHR5cGVzIG9mIHRoZSB0d28gYXJncy4KIApAQCAtNjI5LDcgKzc4OCw3IEBACiAgICAgZGVmIF9iYXNlQXNzZXJ0RXF1YWwoc2VsZiwgZmlyc3QsIHNlY29uZCwgbXNnPU5vbmUpOgogICAgICAgICAiIiJUaGUgZGVmYXVsdCBhc3NlcnRFcXVhbCBpbXBsZW1lbnRhdGlvbiwgbm90IHR5cGUgc3BlY2lmaWMuIiIiCiAgICAgICAgIGlmIG5vdCBmaXJzdCA9PSBzZWNvbmQ6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGZpcnN0KSwgc2FmZV9yZXByKHNlY29uZCkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgbXNnID0gc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKQogICAgICAgICAgICAgcmFpc2Ugc2VsZi5mYWlsdXJlRXhjZXB0aW9uKG1zZykKIApAQCAtNzY0LDE0ICs5MjMsOSBAQAogICAgICAgICAgICAgaWYgc2VxMSA9PSBzZXEyOgogICAgICAgICAgICAgICAgIHJldHVybgogCi0gICAgICAgICAgICBzZXExX3JlcHIgPSBzYWZlX3JlcHIoc2VxMSkKLSAgICAgICAgICAgIHNlcTJfcmVwciA9IHNhZmVfcmVwcihzZXEyKQotICAgICAgICAgICAgaWYgbGVuKHNlcTFfcmVwcikgPiAzMDoKLSAgICAgICAgICAgICAgICBzZXExX3JlcHIgPSBzZXExX3JlcHJbOjMwXSArICcuLi4nCi0gICAgICAgICAgICBpZiBsZW4oc2VxMl9yZXByKSA+IDMwOgotICAgICAgICAgICAgICAgIHNlcTJfcmVwciA9IHNlcTJfcmVwcls6MzBdICsgJy4uLicKLSAgICAgICAgICAgIGVsZW1lbnRzID0gKHNlcV90eXBlX25hbWUuY2FwaXRhbGl6ZSgpLCBzZXExX3JlcHIsIHNlcTJfcmVwcikKLSAgICAgICAgICAgIGRpZmZlcmluZyA9ICclc3MgZGlmZmVyOiAlcyAhPSAlc1xuJyAlIGVsZW1lbnRzCisgICAgICAgICAgICBkaWZmZXJpbmcgPSAnJXNzIGRpZmZlcjogJXMgIT0gJXNcbicgJSAoCisgICAgICAgICAgICAgICAgICAgIChzZXFfdHlwZV9uYW1lLmNhcGl0YWxpemUoKSwpICsKKyAgICAgICAgICAgICAgICAgICAgX2NvbW1vbl9zaG9ydGVuX3JlcHIoc2VxMSwgc2VxMikpCiAKICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKG1pbihsZW4xLCBsZW4yKSk6CiAgICAgICAgICAgICAgICAgdHJ5OgpAQCAtOTI5LDcgKzEwODMsNyBAQAogICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoZDIsIGRpY3QsICdTZWNvbmQgYXJndW1lbnQgaXMgbm90IGEgZGljdGlvbmFyeScpCiAKICAgICAgICAgaWYgZDEgIT0gZDI6Ci0gICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSAoc2FmZV9yZXByKGQxLCBUcnVlKSwgc2FmZV9yZXByKGQyLCBUcnVlKSkKKyAgICAgICAgICAgIHN0YW5kYXJkTXNnID0gJyVzICE9ICVzJyAlIF9jb21tb25fc2hvcnRlbl9yZXByKGQxLCBkMikKICAgICAgICAgICAgIGRpZmYgPSAoJ1xuJyArICdcbicuam9pbihkaWZmbGliLm5kaWZmKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcHByaW50LnBmb3JtYXQoZDEpLnNwbGl0bGluZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBwcmludC5wZm9ybWF0KGQyKS5zcGxpdGxpbmVzKCkpKSkKQEAgLTEwMTMsOCArMTE2Nyw3IEBACiAgICAgICAgICAgICBpZiBsZW4oZmlyc3RsaW5lcykgPT0gMSBhbmQgZmlyc3Quc3RyaXAoJ1xyXG4nKSA9PSBmaXJzdDoKICAgICAgICAgICAgICAgICBmaXJzdGxpbmVzID0gW2ZpcnN0ICsgJ1xuJ10KICAgICAgICAgICAgICAgICBzZWNvbmRsaW5lcyA9IFtzZWNvbmQgKyAnXG4nXQotICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSAnJXMgIT0gJXMnICUgKHNhZmVfcmVwcihmaXJzdCwgVHJ1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2FmZV9yZXByKHNlY29uZCwgVHJ1ZSkpCisgICAgICAgICAgICBzdGFuZGFyZE1zZyA9ICclcyAhPSAlcycgJSBfY29tbW9uX3Nob3J0ZW5fcmVwcihmaXJzdCwgc2Vjb25kKQogICAgICAgICAgICAgZGlmZiA9ICdcbicgKyAnJy5qb2luKGRpZmZsaWIubmRpZmYoZmlyc3RsaW5lcywgc2Vjb25kbGluZXMpKQogICAgICAgICAgICAgc3RhbmRhcmRNc2cgPSBzZWxmLl90cnVuY2F0ZU1lc3NhZ2Uoc3RhbmRhcmRNc2csIGRpZmYpCiAgICAgICAgICAgICBzZWxmLmZhaWwoc2VsZi5fZm9ybWF0TWVzc2FnZShtc2csIHN0YW5kYXJkTXNnKSkKQEAgLTExOTIsOSArMTM0NSw2IEBACiAgICAgICAgICAgICAgICBzZWxmLl90ZXN0RnVuYyA9PSBvdGhlci5fdGVzdEZ1bmMgYW5kIFwKICAgICAgICAgICAgICAgIHNlbGYuX2Rlc2NyaXB0aW9uID09IG90aGVyLl9kZXNjcmlwdGlvbgogCi0gICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6Ci0gICAgICAgIHJldHVybiBub3Qgc2VsZiA9PSBvdGhlcgotCiAgICAgZGVmIF9faGFzaF9fKHNlbGYpOgogICAgICAgICByZXR1cm4gaGFzaCgodHlwZShzZWxmKSwgc2VsZi5fc2V0VXBGdW5jLCBzZWxmLl90ZWFyRG93bkZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90ZXN0RnVuYywgc2VsZi5fZGVzY3JpcHRpb24pKQpAQCAtMTIxMiwzICsxMzYyLDM5IEBACiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZGVzY3JpcHRpb24KICAgICAgICAgZG9jID0gc2VsZi5fdGVzdEZ1bmMuX19kb2NfXwogICAgICAgICByZXR1cm4gZG9jIGFuZCBkb2Muc3BsaXQoIlxuIilbMF0uc3RyaXAoKSBvciBOb25lCisKKworY2xhc3MgX1N1YlRlc3QoVGVzdENhc2UpOgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRlc3RfY2FzZSwgbWVzc2FnZSwgcGFyYW1zKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuX21lc3NhZ2UgPSBtZXNzYWdlCisgICAgICAgIHNlbGYudGVzdF9jYXNlID0gdGVzdF9jYXNlCisgICAgICAgIHNlbGYucGFyYW1zID0gcGFyYW1zCisgICAgICAgIHNlbGYuZmFpbHVyZUV4Y2VwdGlvbiA9IHRlc3RfY2FzZS5mYWlsdXJlRXhjZXB0aW9uCisKKyAgICBkZWYgcnVuVGVzdChzZWxmKToKKyAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigic3VidGVzdHMgY2Fubm90IGJlIHJ1biBkaXJlY3RseSIpCisKKyAgICBkZWYgX3N1YkRlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICBwYXJ0cyA9IFtdCisgICAgICAgIGlmIHNlbGYuX21lc3NhZ2U6CisgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoIlt7fV0iLmZvcm1hdChzZWxmLl9tZXNzYWdlKSkKKyAgICAgICAgaWYgc2VsZi5wYXJhbXM6CisgICAgICAgICAgICBwYXJhbXNfZGVzYyA9ICcsICcuam9pbigKKyAgICAgICAgICAgICAgICAie309eyFyfSIuZm9ybWF0KGssIHYpCisgICAgICAgICAgICAgICAgZm9yIChrLCB2KSBpbiBzb3J0ZWQoc2VsZi5wYXJhbXMuaXRlbXMoKSkpCisgICAgICAgICAgICBwYXJ0cy5hcHBlbmQoIih7fSkiLmZvcm1hdChwYXJhbXNfZGVzYykpCisgICAgICAgIHJldHVybiAiICIuam9pbihwYXJ0cykgb3IgJyg8c3VidGVzdD4pJworCisgICAgZGVmIGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gInt9IHt9Ii5mb3JtYXQoc2VsZi50ZXN0X2Nhc2UuaWQoKSwgc2VsZi5fc3ViRGVzY3JpcHRpb24oKSkKKworICAgIGRlZiBzaG9ydERlc2NyaXB0aW9uKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm5zIGEgb25lLWxpbmUgZGVzY3JpcHRpb24gb2YgdGhlIHN1YnRlc3QsIG9yIE5vbmUgaWYgbm8KKyAgICAgICAgZGVzY3JpcHRpb24gaGFzIGJlZW4gcHJvdmlkZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi50ZXN0X2Nhc2Uuc2hvcnREZXNjcmlwdGlvbigpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJ7fSB7fSIuZm9ybWF0KHNlbGYudGVzdF9jYXNlLCBzZWxmLl9zdWJEZXNjcmlwdGlvbigpKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L2xvYWRlci5weSBiL0xpYi91bml0dGVzdC9sb2FkZXIucHkKaW5kZXggOWFiMjZjMS4uYWYzOTIxNiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L2xvYWRlci5weQorKysgYi9MaWIvdW5pdHRlc3QvbG9hZGVyLnB5CkBAIC0xOSwxOSArMTksMzggQEAKIFZBTElEX01PRFVMRV9OQU1FID0gcmUuY29tcGlsZShyJ1tfYS16XVx3KlwucHkkJywgcmUuSUdOT1JFQ0FTRSkKIAogCitjbGFzcyBfRmFpbGVkVGVzdChjYXNlLlRlc3RDYXNlKToKKyAgICBfdGVzdE1ldGhvZE5hbWUgPSBOb25lCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWV0aG9kX25hbWUsIGV4Y2VwdGlvbik6CisgICAgICAgIHNlbGYuX2V4Y2VwdGlvbiA9IGV4Y2VwdGlvbgorICAgICAgICBzdXBlcihfRmFpbGVkVGVzdCwgc2VsZikuX19pbml0X18obWV0aG9kX25hbWUpCisKKyAgICBkZWYgX19nZXRhdHRyX18oc2VsZiwgbmFtZSk6CisgICAgICAgIGlmIG5hbWUgIT0gc2VsZi5fdGVzdE1ldGhvZE5hbWU6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoX0ZhaWxlZFRlc3QsIHNlbGYpLl9fZ2V0YXR0cl9fKG5hbWUpCisgICAgICAgIGRlZiB0ZXN0RmFpbHVyZSgpOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5fZXhjZXB0aW9uCisgICAgICAgIHJldHVybiB0ZXN0RmFpbHVyZQorCisKIGRlZiBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc3VpdGVDbGFzcyk6CiAgICAgbWVzc2FnZSA9ICdGYWlsZWQgdG8gaW1wb3J0IHRlc3QgbW9kdWxlOiAlc1xuJXMnICUgKG5hbWUsIHRyYWNlYmFjay5mb3JtYXRfZXhjKCkpCi0gICAgcmV0dXJuIF9tYWtlX2ZhaWxlZF90ZXN0KCdNb2R1bGVJbXBvcnRGYWlsdXJlJywgbmFtZSwgSW1wb3J0RXJyb3IobWVzc2FnZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRlQ2xhc3MpCisgICAgcmV0dXJuIF9tYWtlX2ZhaWxlZF90ZXN0KG5hbWUsIEltcG9ydEVycm9yKG1lc3NhZ2UpLCBzdWl0ZUNsYXNzKQogCiBkZWYgX21ha2VfZmFpbGVkX2xvYWRfdGVzdHMobmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKToKLSAgICByZXR1cm4gX21ha2VfZmFpbGVkX3Rlc3QoJ0xvYWRUZXN0c0ZhaWx1cmUnLCBuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpCisgICAgcmV0dXJuIF9tYWtlX2ZhaWxlZF90ZXN0KG5hbWUsIGV4Y2VwdGlvbiwgc3VpdGVDbGFzcykKIAotZGVmIF9tYWtlX2ZhaWxlZF90ZXN0KGNsYXNzbmFtZSwgbWV0aG9kbmFtZSwgZXhjZXB0aW9uLCBzdWl0ZUNsYXNzKToKLSAgICBkZWYgdGVzdEZhaWx1cmUoc2VsZik6Ci0gICAgICAgIHJhaXNlIGV4Y2VwdGlvbgotICAgIGF0dHJzID0ge21ldGhvZG5hbWU6IHRlc3RGYWlsdXJlfQotICAgIFRlc3RDbGFzcyA9IHR5cGUoY2xhc3NuYW1lLCAoY2FzZS5UZXN0Q2FzZSwpLCBhdHRycykKK2RlZiBfbWFrZV9mYWlsZWRfdGVzdChtZXRob2RuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpOgorICAgIHRlc3QgPSBfRmFpbGVkVGVzdChtZXRob2RuYW1lLCBleGNlcHRpb24pCisgICAgcmV0dXJuIHN1aXRlQ2xhc3MoKHRlc3QsKSkKKworZGVmIF9tYWtlX3NraXBwZWRfdGVzdChtZXRob2RuYW1lLCBleGNlcHRpb24sIHN1aXRlQ2xhc3MpOgorICAgIEBjYXNlLnNraXAoc3RyKGV4Y2VwdGlvbikpCisgICAgZGVmIHRlc3RTa2lwcGVkKHNlbGYpOgorICAgICAgICBwYXNzCisgICAgYXR0cnMgPSB7bWV0aG9kbmFtZTogdGVzdFNraXBwZWR9CisgICAgVGVzdENsYXNzID0gdHlwZSgiTW9kdWxlU2tpcHBlZCIsIChjYXNlLlRlc3RDYXNlLCksIGF0dHJzKQogICAgIHJldHVybiBzdWl0ZUNsYXNzKChUZXN0Q2xhc3MobWV0aG9kbmFtZSksKSkKIAogZGVmIF9qeXRob25fYXdhcmVfc3BsaXRleHQocGF0aCk6CkBAIC01Myw4ICs3Miw5IEBACiAgICAgZGVmIGxvYWRUZXN0c0Zyb21UZXN0Q2FzZShzZWxmLCB0ZXN0Q2FzZUNsYXNzKToKICAgICAgICAgIiIiUmV0dXJuIGEgc3VpdGUgb2YgYWxsIHRlc3RzIGNhc2VzIGNvbnRhaW5lZCBpbiB0ZXN0Q2FzZUNsYXNzIiIiCiAgICAgICAgIGlmIGlzc3ViY2xhc3ModGVzdENhc2VDbGFzcywgc3VpdGUuVGVzdFN1aXRlKToKLSAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiVGVzdCBjYXNlcyBzaG91bGQgbm90IGJlIGRlcml2ZWQgZnJvbSBUZXN0U3VpdGUuIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgTWF5YmUgeW91IG1lYW50IHRvIGRlcml2ZSBmcm9tIFRlc3RDYXNlPyIpCisgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoIlRlc3QgY2FzZXMgc2hvdWxkIG5vdCBiZSBkZXJpdmVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUZXN0U3VpdGUuIE1heWJlIHlvdSBtZWFudCB0byBkZXJpdmUgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRlc3RDYXNlPyIpCiAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBzZWxmLmdldFRlc3RDYXNlTmFtZXModGVzdENhc2VDbGFzcykKICAgICAgICAgaWYgbm90IHRlc3RDYXNlTmFtZXMgYW5kIGhhc2F0dHIodGVzdENhc2VDbGFzcywgJ3J1blRlc3QnKToKICAgICAgICAgICAgIHRlc3RDYXNlTmFtZXMgPSBbJ3J1blRlc3QnXQpAQCAtMTY5LDYgKzE4OSw5IEBACiAgICAgICAgIFRoZSBwYXR0ZXJuIGlzIGRlbGliZXJhdGVseSBub3Qgc3RvcmVkIGFzIGEgbG9hZGVyIGF0dHJpYnV0ZSBzbyB0aGF0CiAgICAgICAgIHBhY2thZ2VzIGNhbiBjb250aW51ZSBkaXNjb3ZlcnkgdGhlbXNlbHZlcy4gdG9wX2xldmVsX2RpciBpcyBzdG9yZWQgc28KICAgICAgICAgbG9hZF90ZXN0cyBkb2VzIG5vdCBuZWVkIHRvIHBhc3MgdGhpcyBhcmd1bWVudCBpbiB0byBsb2FkZXIuZGlzY292ZXIoKS4KKworICAgICAgICBQYXRocyBhcmUgc29ydGVkIGJlZm9yZSBiZWluZyBpbXBvcnRlZCB0byBlbnN1cmUgcmVwcm9kdWNpYmxlIGV4ZWN1dGlvbgorICAgICAgICBvcmRlciBldmVuIG9uIGZpbGVzeXN0ZW1zIHdpdGggbm9uLWFscGhhYmV0aWNhbCBvcmRlcmluZyBsaWtlIGV4dDMvNC4KICAgICAgICAgIiIiCiAgICAgICAgIHNldF9pbXBsaWNpdF90b3AgPSBGYWxzZQogICAgICAgICBpZiB0b3BfbGV2ZWxfZGlyIGlzIE5vbmUgYW5kIHNlbGYuX3RvcF9sZXZlbF9kaXIgaXMgbm90IE5vbmU6CkBAIC0xODksNiArMjEyLDggQEAKICAgICAgICAgc2VsZi5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbF9kaXIKIAogICAgICAgICBpc19ub3RfaW1wb3J0YWJsZSA9IEZhbHNlCisgICAgICAgIGlzX25hbWVzcGFjZSA9IEZhbHNlCisgICAgICAgIHRlc3RzID0gW10KICAgICAgICAgaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmFic3BhdGgoc3RhcnRfZGlyKSk6CiAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoc3RhcnRfZGlyKQogICAgICAgICAgICAgaWYgc3RhcnRfZGlyICE9IHRvcF9sZXZlbF9kaXI6CkBAIC0yMDIsMTUgKzIyNyw1MiBAQAogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICB0aGVfbW9kdWxlID0gc3lzLm1vZHVsZXNbc3RhcnRfZGlyXQogICAgICAgICAgICAgICAgIHRvcF9wYXJ0ID0gc3RhcnRfZGlyLnNwbGl0KCcuJylbMF0KLSAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKCh0aGVfbW9kdWxlLl9fZmlsZV9fKSkpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBzdGFydF9kaXIgPSBvcy5wYXRoLmFic3BhdGgoCisgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguZGlybmFtZSgodGhlX21vZHVsZS5fX2ZpbGVfXykpKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgICAgICAgICAgICAgIyBsb29rIGZvciBuYW1lc3BhY2UgcGFja2FnZXMKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlYyA9IHRoZV9tb2R1bGUuX19zcGVjX18KKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgc3BlYyA9IE5vbmUKKworICAgICAgICAgICAgICAgICAgICBpZiBzcGVjIGFuZCBzcGVjLmxvYWRlciBpcyBOb25lOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3BlYy5zdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19uYW1lc3BhY2UgPSBUcnVlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgcGF0aCBpbiB0aGVfbW9kdWxlLl9fcGF0aF9fOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobm90IHNldF9pbXBsaWNpdF90b3AgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgcGF0aC5zdGFydHN3aXRoKHRvcF9sZXZlbF9kaXIpKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3RvcF9sZXZlbF9kaXIgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0aC5zcGxpdCh0aGVfbW9kdWxlLl9fbmFtZV9fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCIuIiwgb3MucGF0aC5zZXApKVswXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfdGVzdHMocGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlPVRydWUpKQorICAgICAgICAgICAgICAgICAgICBlbGlmIHRoZV9tb2R1bGUuX19uYW1lX18gaW4gc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBidWlsdGluIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdDYW4gbm90IHVzZSBidWlsdGluIG1vZHVsZXMgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhcyBkb3R0ZWQgbW9kdWxlIG5hbWVzJykgZnJvbSBOb25lCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RvblwndCBrbm93IGhvdyB0byBkaXNjb3ZlciBmcm9tIHshcn0nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdCh0aGVfbW9kdWxlKSkgZnJvbSBOb25lCisKICAgICAgICAgICAgICAgICBpZiBzZXRfaW1wbGljaXRfdG9wOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gc2VsZi5fZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZSh0b3BfcGFydCkKLSAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc19uYW1lc3BhY2U6CisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl90b3BfbGV2ZWxfZGlyID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZ2V0X2RpcmVjdG9yeV9jb250YWluaW5nX21vZHVsZSh0b3BfcGFydCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN5cy5wYXRoLnJlbW92ZSh0b3BfbGV2ZWxfZGlyKQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLnBhdGgucmVtb3ZlKHRvcF9sZXZlbF9kaXIpCiAKICAgICAgICAgaWYgaXNfbm90X2ltcG9ydGFibGU6CiAgICAgICAgICAgICByYWlzZSBJbXBvcnRFcnJvcignU3RhcnQgZGlyZWN0b3J5IGlzIG5vdCBpbXBvcnRhYmxlOiAlcicgJSBzdGFydF9kaXIpCiAKLSAgICAgICAgdGVzdHMgPSBsaXN0KHNlbGYuX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgaWYgbm90IGlzX25hbWVzcGFjZToKKyAgICAgICAgICAgIHRlc3RzID0gbGlzdChzZWxmLl9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybikpCiAgICAgICAgIHJldHVybiBzZWxmLnN1aXRlQ2xhc3ModGVzdHMpCiAKICAgICBkZWYgX2dldF9kaXJlY3RvcnlfY29udGFpbmluZ19tb2R1bGUoc2VsZiwgbW9kdWxlX25hbWUpOgpAQCAtMjQzLDkgKzMwNSw5IEBACiAgICAgICAgICMgb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gdXNlIGFsdGVybmF0aXZlIG1hdGNoaW5nIHN0cmF0ZWd5CiAgICAgICAgIHJldHVybiBmbm1hdGNoKHBhdGgsIHBhdHRlcm4pCiAKLSAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICBkZWYgX2ZpbmRfdGVzdHMoc2VsZiwgc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9RmFsc2UpOgogICAgICAgICAiIiJVc2VkIGJ5IGRpc2NvdmVyeS4gWWllbGRzIHRlc3Qgc3VpdGVzIGl0IGxvYWRzLiIiIgotICAgICAgICBwYXRocyA9IG9zLmxpc3RkaXIoc3RhcnRfZGlyKQorICAgICAgICBwYXRocyA9IHNvcnRlZChvcy5saXN0ZGlyKHN0YXJ0X2RpcikpCiAKICAgICAgICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmpvaW4oc3RhcnRfZGlyLCBwYXRoKQpAQCAtMjU5LDYgKzMyMSw4IEBACiAgICAgICAgICAgICAgICAgbmFtZSA9IHNlbGYuX2dldF9uYW1lX2Zyb21fcGF0aChmdWxsX3BhdGgpCiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBtb2R1bGUgPSBzZWxmLl9nZXRfbW9kdWxlX2Zyb21fbmFtZShuYW1lKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBjYXNlLlNraXBUZXN0IGFzIGU6CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIF9tYWtlX3NraXBwZWRfdGVzdChuYW1lLCBlLCBzZWxmLnN1aXRlQ2xhc3MpCiAgICAgICAgICAgICAgICAgZXhjZXB0OgogICAgICAgICAgICAgICAgICAgICB5aWVsZCBfbWFrZV9mYWlsZWRfaW1wb3J0X3Rlc3QobmFtZSwgc2VsZi5zdWl0ZUNsYXNzKQogICAgICAgICAgICAgICAgIGVsc2U6CkBAIC0yNzQsNyArMzM4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlIEltcG9ydEVycm9yKG1zZyAlIChtb2RfbmFtZSwgbW9kdWxlX2RpciwgZXhwZWN0ZWRfZGlyKSkKICAgICAgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5sb2FkVGVzdHNGcm9tTW9kdWxlKG1vZHVsZSkKICAgICAgICAgICAgIGVsaWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSk6CisgICAgICAgICAgICAgICAgaWYgKG5vdCBuYW1lc3BhY2UgYW5kCisgICAgICAgICAgICAgICAgICAgIG5vdCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oZnVsbF9wYXRoLCAnX19pbml0X18ucHknKSkpOgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogCiAgICAgICAgICAgICAgICAgbG9hZF90ZXN0cyA9IE5vbmUKQEAgLTI5MSw4ICszNTYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0cyBsb2FkZWQgZnJvbSBwYWNrYWdlIGZpbGUKICAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3RzCiAgICAgICAgICAgICAgICAgICAgICMgcmVjdXJzZSBpbnRvIHRoZSBwYWNrYWdlCi0gICAgICAgICAgICAgICAgICAgIGZvciB0ZXN0IGluIHNlbGYuX2ZpbmRfdGVzdHMoZnVsbF9wYXRoLCBwYXR0ZXJuKToKLSAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRlc3QKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLl9maW5kX3Rlc3RzKGZ1bGxfcGF0aCwgcGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZT1uYW1lc3BhY2UpCiAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgbG9hZF90ZXN0cyhzZWxmLCB0ZXN0cywgcGF0dGVybikKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9tYWluLnB5IGIvTGliL3VuaXR0ZXN0L21haW4ucHkKaW5kZXggZWFkNjQ5My4uZTc1MGNhNSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L21haW4ucHkKKysrIGIvTGliL3VuaXR0ZXN0L21haW4ucHkKQEAgLTEsNyArMSw3IEBACiAiIiJVbml0dGVzdCBtYWluIHByb2dyYW0iIiIKIAogaW1wb3J0IHN5cwotaW1wb3J0IG9wdHBhcnNlCitpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBvcwogCiBmcm9tIC4gaW1wb3J0IGxvYWRlciwgcnVubmVyCkBAIC05LDUzICs5LDIwIEBACiAKIF9fdW5pdHRlc3QgPSBUcnVlCiAKLUZBSUxGQVNUICAgICA9ICIgIC1mLCAtLWZhaWxmYXN0ICAgU3RvcCBvbiBmaXJzdCBmYWlsdXJlXG4iCi1DQVRDSEJSRUFLICAgPSAiICAtYywgLS1jYXRjaCAgICAgIENhdGNoIGNvbnRyb2wtQyBhbmQgZGlzcGxheSByZXN1bHRzXG4iCi1CVUZGRVJPVVRQVVQgPSAiICAtYiwgLS1idWZmZXIgICAgIEJ1ZmZlciBzdGRvdXQgYW5kIHN0ZGVyciBkdXJpbmcgdGVzdCBydW5zXG4iCi0KLVVTQUdFX0FTX01BSU4gPSAiIiJcCi1Vc2FnZTogJShwcm9nTmFtZSlzIFtvcHRpb25zXSBbdGVzdHNdCi0KLU9wdGlvbnM6Ci0gIC1oLCAtLWhlbHAgICAgICAgU2hvdyB0aGlzIG1lc3NhZ2UKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotICAtcSwgLS1xdWlldCAgICAgIE1pbmltYWwgb3V0cHV0Ci0lKGZhaWxmYXN0KXMlKGNhdGNoYnJlYWspcyUoYnVmZmVyKXMKK01BSU5fRVhBTVBMRVMgPSAiIiJcCiBFeGFtcGxlczoKLSAgJShwcm9nTmFtZSlzIHRlc3RfbW9kdWxlICAgICAgICAgICAgICAgLSBydW4gdGVzdHMgZnJvbSB0ZXN0X21vZHVsZQotICAlKHByb2dOYW1lKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKLSAgJShwcm9nTmFtZSlzIG1vZHVsZS5DbGFzcy50ZXN0X21ldGhvZCAgLSBydW4gc3BlY2lmaWVkIHRlc3QgbWV0aG9kCi0KLVt0ZXN0c10gY2FuIGJlIGEgbGlzdCBvZiBhbnkgbnVtYmVyIG9mIHRlc3QgbW9kdWxlcywgY2xhc3NlcyBhbmQgdGVzdAotbWV0aG9kcy4KLQotQWx0ZXJuYXRpdmUgVXNhZ2U6ICUocHJvZ05hbWUpcyBkaXNjb3ZlciBbb3B0aW9uc10KLQotT3B0aW9uczoKLSAgLXYsIC0tdmVyYm9zZSAgICBWZXJib3NlIG91dHB1dAotJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzICAtcyBkaXJlY3RvcnkgICAgIERpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KQotICAtcCBwYXR0ZXJuICAgICAgIFBhdHRlcm4gdG8gbWF0Y2ggdGVzdCBmaWxlcyAoJ3Rlc3QqLnB5JyBkZWZhdWx0KQotICAtdCBkaXJlY3RvcnkgICAgIFRvcCBsZXZlbCBkaXJlY3Rvcnkgb2YgcHJvamVjdCAoZGVmYXVsdCB0bwotICAgICAgICAgICAgICAgICAgIHN0YXJ0IGRpcmVjdG9yeSkKLQotRm9yIHRlc3QgZGlzY292ZXJ5IGFsbCB0ZXN0IG1vZHVsZXMgbXVzdCBiZSBpbXBvcnRhYmxlIGZyb20gdGhlIHRvcAotbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0LgorICAlKHByb2cpcyB0ZXN0X21vZHVsZSAgICAgICAgICAgICAgIC0gcnVuIHRlc3RzIGZyb20gdGVzdF9tb2R1bGUKKyAgJShwcm9nKXMgbW9kdWxlLlRlc3RDbGFzcyAgICAgICAgICAtIHJ1biB0ZXN0cyBmcm9tIG1vZHVsZS5UZXN0Q2xhc3MKKyAgJShwcm9nKXMgbW9kdWxlLkNsYXNzLnRlc3RfbWV0aG9kICAtIHJ1biBzcGVjaWZpZWQgdGVzdCBtZXRob2QKICIiIgogCi1VU0FHRV9GUk9NX01PRFVMRSA9ICIiIlwKLVVzYWdlOiAlKHByb2dOYW1lKXMgW29wdGlvbnNdIFt0ZXN0XSBbLi4uXQotCi1PcHRpb25zOgotICAtaCwgLS1oZWxwICAgICAgIFNob3cgdGhpcyBtZXNzYWdlCi0gIC12LCAtLXZlcmJvc2UgICAgVmVyYm9zZSBvdXRwdXQKLSAgLXEsIC0tcXVpZXQgICAgICBNaW5pbWFsIG91dHB1dAotJShmYWlsZmFzdClzJShjYXRjaGJyZWFrKXMlKGJ1ZmZlcilzCitNT0RVTEVfRVhBTVBMRVMgPSAiIiJcCiBFeGFtcGxlczoKLSAgJShwcm9nTmFtZSlzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gcnVuIGRlZmF1bHQgc2V0IG9mIHRlc3RzCi0gICUocHJvZ05hbWUpcyBNeVRlc3RTdWl0ZSAgICAgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCi0gICUocHJvZ05hbWUpcyBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcgICAgICAtIHJ1biBNeVRlc3RDYXNlLnRlc3RTb21ldGhpbmcKLSAgJShwcm9nTmFtZSlzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgICAgIC0gcnVuIGFsbCAndGVzdConIHRlc3QgbWV0aG9kcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCisgICUocHJvZylzICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBydW4gZGVmYXVsdCBzZXQgb2YgdGVzdHMKKyAgJShwcm9nKXMgTXlUZXN0U3VpdGUgICAgICAgICAgICAgICAtIHJ1biBzdWl0ZSAnTXlUZXN0U3VpdGUnCisgICUocHJvZylzIE15VGVzdENhc2UudGVzdFNvbWV0aGluZyAgLSBydW4gTXlUZXN0Q2FzZS50ZXN0U29tZXRoaW5nCisgICUocHJvZylzIE15VGVzdENhc2UgICAgICAgICAgICAgICAgLSBydW4gYWxsICd0ZXN0KicgdGVzdCBtZXRob2RzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBNeVRlc3RDYXNlCiAiIiIKIAogZGVmIF9jb252ZXJ0X25hbWUobmFtZSk6CkBAIC04MiwxMCArNDksMTEgQEAKICAgICAiIiJBIGNvbW1hbmQtbGluZSBwcm9ncmFtIHRoYXQgcnVucyBhIHNldCBvZiB0ZXN0czsgdGhpcyBpcyBwcmltYXJpbHkKICAgICAgICBmb3IgbWFraW5nIHRlc3QgbW9kdWxlcyBjb252ZW5pZW50bHkgZXhlY3V0YWJsZS4KICAgICAiIiIKLSAgICBVU0FHRSA9IFVTQUdFX0ZST01fTU9EVUxFCi0KICAgICAjIGRlZmF1bHRzIGZvciB0ZXN0aW5nCisgICAgbW9kdWxlPU5vbmUKKyAgICB2ZXJib3NpdHkgPSAxCiAgICAgZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gcHJvZ05hbWUgPSB3YXJuaW5ncyA9IE5vbmUKKyAgICBfZGlzY292ZXJ5X3BhcnNlciA9IE5vbmUKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtb2R1bGU9J19fbWFpbl9fJywgZGVmYXVsdFRlc3Q9Tm9uZSwgYXJndj1Ob25lLAogICAgICAgICAgICAgICAgICAgICB0ZXN0UnVubmVyPU5vbmUsIHRlc3RMb2FkZXI9bG9hZGVyLmRlZmF1bHRUZXN0TG9hZGVyLApAQCAtMTI3LDQ0ICs5NSw0NyBAQAogICAgIGRlZiB1c2FnZUV4aXQoc2VsZiwgbXNnPU5vbmUpOgogICAgICAgICBpZiBtc2c6CiAgICAgICAgICAgICBwcmludChtc2cpCi0gICAgICAgIHVzYWdlID0geydwcm9nTmFtZSc6IHNlbGYucHJvZ05hbWUsICdjYXRjaGJyZWFrJzogJycsICdmYWlsZmFzdCc6ICcnLAotICAgICAgICAgICAgICAgICAnYnVmZmVyJzogJyd9Ci0gICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgIT0gRmFsc2U6Ci0gICAgICAgICAgICB1c2FnZVsnZmFpbGZhc3QnXSA9IEZBSUxGQVNUCi0gICAgICAgIGlmIHNlbGYuY2F0Y2hicmVhayAhPSBGYWxzZToKLSAgICAgICAgICAgIHVzYWdlWydjYXRjaGJyZWFrJ10gPSBDQVRDSEJSRUFLCi0gICAgICAgIGlmIHNlbGYuYnVmZmVyICE9IEZhbHNlOgotICAgICAgICAgICAgdXNhZ2VbJ2J1ZmZlciddID0gQlVGRkVST1VUUFVUCi0gICAgICAgIHByaW50KHNlbGYuVVNBR0UgJSB1c2FnZSkKKyAgICAgICAgaWYgc2VsZi5fZGlzY292ZXJ5X3BhcnNlciBpcyBOb25lOgorICAgICAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICBzZWxmLl9wcmludF9oZWxwKCkKICAgICAgICAgc3lzLmV4aXQoMikKIAorICAgIGRlZiBfcHJpbnRfaGVscChzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBzZWxmLm1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgcHJpbnQoc2VsZi5fbWFpbl9wYXJzZXIuZm9ybWF0X2hlbHAoKSkKKyAgICAgICAgICAgIHByaW50KE1BSU5fRVhBTVBMRVMgJSB7J3Byb2cnOiBzZWxmLnByb2dOYW1lfSkKKyAgICAgICAgICAgIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIucHJpbnRfaGVscCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludChzZWxmLl9tYWluX3BhcnNlci5mb3JtYXRfaGVscCgpKQorICAgICAgICAgICAgcHJpbnQoTU9EVUxFX0VYQU1QTEVTICUgeydwcm9nJzogc2VsZi5wcm9nTmFtZX0pCisKICAgICBkZWYgcGFyc2VBcmdzKHNlbGYsIGFyZ3YpOgotICAgICAgICBpZiAoKGxlbihhcmd2KSA+IDEgYW5kIGFyZ3ZbMV0ubG93ZXIoKSA9PSAnZGlzY292ZXInKSBvcgotICAgICAgICAgICAgKGxlbihhcmd2KSA9PSAxIGFuZCBzZWxmLm1vZHVsZSBpcyBOb25lKSk6Ci0gICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsyOl0pCi0gICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICBpZiBzZWxmLm1vZHVsZSBpcyBOb25lOgorICAgICAgICAgICAgaWYgbGVuKGFyZ3YpID4gMSBhbmQgYXJndlsxXS5sb3dlcigpID09ICdkaXNjb3Zlcic6CisgICAgICAgICAgICAgICAgc2VsZi5fZG9fZGlzY292ZXJ5KGFyZ3ZbMjpdKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIucGFyc2VfYXJncyhhcmd2WzE6XSwgc2VsZikKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnRlc3RzOgorICAgICAgICAgICAgICAgICMgdGhpcyBhbGxvd3MgInB5dGhvbiAtbSB1bml0dGVzdCAtdiIgdG8gc3RpbGwgd29yayBmb3IKKyAgICAgICAgICAgICAgICAjIHRlc3QgZGlzY292ZXJ5LgorICAgICAgICAgICAgICAgIHNlbGYuX2RvX2Rpc2NvdmVyeShbXSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX21haW5fcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0sIHNlbGYpCiAKLSAgICAgICAgcGFyc2VyID0gc2VsZi5fZ2V0T3B0UGFyc2VyKCkKLSAgICAgICAgb3B0aW9ucywgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKGFyZ3ZbMTpdKQotICAgICAgICBzZWxmLl9zZXRBdHRyaWJ1dGVzRnJvbU9wdGlvbnMob3B0aW9ucykKLQotICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5tb2R1bGUgaXMgTm9uZToKLSAgICAgICAgICAgICMgdGhpcyBhbGxvd3MgInB5dGhvbiAtbSB1bml0dGVzdCAtdiIgdG8gc3RpbGwgd29yayBmb3IKLSAgICAgICAgICAgICMgdGVzdCBkaXNjb3ZlcnkuIFRoaXMgbWVhbnMgLWMgLyAtYiAvIC12IC8gLWYgb3B0aW9ucyB3aWxsCi0gICAgICAgICAgICAjIGJlIGhhbmRsZWQgdHdpY2UsIHdoaWNoIGlzIGhhcm1sZXNzIGJ1dCBub3QgaWRlYWwuCi0gICAgICAgICAgICBzZWxmLl9kb19kaXNjb3ZlcnkoYXJndlsxOl0pCi0gICAgICAgICAgICByZXR1cm4KLQotICAgICAgICBpZiBsZW4oYXJncykgPT0gMCBhbmQgc2VsZi5kZWZhdWx0VGVzdCBpcyBOb25lOgotICAgICAgICAgICAgIyBjcmVhdGVUZXN0cyB3aWxsIGxvYWQgdGVzdHMgZnJvbSBzZWxmLm1vZHVsZQotICAgICAgICAgICAgc2VsZi50ZXN0TmFtZXMgPSBOb25lCi0gICAgICAgIGVsaWYgbGVuKGFyZ3MpID4gMDoKLSAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gX2NvbnZlcnRfbmFtZXMoYXJncykKKyAgICAgICAgaWYgc2VsZi50ZXN0czoKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gX2NvbnZlcnRfbmFtZXMoc2VsZi50ZXN0cykKICAgICAgICAgICAgIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgICAgICAgICAgICAgIyB0byBzdXBwb3J0IHB5dGhvbiAtbSB1bml0dGVzdCAuLi4KICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSA9IE5vbmUKLSAgICAgICAgZWxzZToKKyAgICAgICAgZWxpZiBzZWxmLmRlZmF1bHRUZXN0IGlzIE5vbmU6CisgICAgICAgICAgICAjIGNyZWF0ZVRlc3RzIHdpbGwgbG9hZCB0ZXN0cyBmcm9tIHNlbGYubW9kdWxlCisgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IE5vbmUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKHNlbGYuZGVmYXVsdFRlc3QsIHN0cik6CiAgICAgICAgICAgICBzZWxmLnRlc3ROYW1lcyA9IChzZWxmLmRlZmF1bHRUZXN0LCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYudGVzdE5hbWVzID0gbGlzdChzZWxmLmRlZmF1bHRUZXN0KQogICAgICAgICBzZWxmLmNyZWF0ZVRlc3RzKCkKIAogICAgIGRlZiBjcmVhdGVUZXN0cyhzZWxmKToKQEAgLTE3NCw3NiArMTQ1LDg0IEBACiAgICAgICAgICAgICBzZWxmLnRlc3QgPSBzZWxmLnRlc3RMb2FkZXIubG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYudGVzdE5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZHVsZSkKIAotICAgIGRlZiBfZ2V0T3B0UGFyc2VyKHNlbGYpOgotICAgICAgICBpbXBvcnQgb3B0cGFyc2UKLSAgICAgICAgcGFyc2VyID0gb3B0cGFyc2UuT3B0aW9uUGFyc2VyKCkKLSAgICAgICAgcGFyc2VyLnByb2cgPSBzZWxmLnByb2dOYW1lCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBkZXN0PSd2ZXJib3NlJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBvdXRwdXQnLCBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXEnLCAnLS1xdWlldCcsIGRlc3Q9J3F1aWV0JywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUXVpZXQgb3V0cHV0JywgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBkZWYgX2luaXRBcmdQYXJzZXJzKHNlbGYpOgorICAgICAgICBwYXJlbnRfcGFyc2VyID0gc2VsZi5fZ2V0UGFyZW50QXJnUGFyc2VyKCkKKyAgICAgICAgc2VsZi5fbWFpbl9wYXJzZXIgPSBzZWxmLl9nZXRNYWluQXJnUGFyc2VyKHBhcmVudF9wYXJzZXIpCisgICAgICAgIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIgPSBzZWxmLl9nZXREaXNjb3ZlcnlBcmdQYXJzZXIocGFyZW50X3BhcnNlcikKIAotICAgICAgICBpZiBzZWxmLmZhaWxmYXN0ICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1mJywgJy0tZmFpbGZhc3QnLCBkZXN0PSdmYWlsZmFzdCcsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTdG9wIG9uIGZpcnN0IGZhaWwgb3IgZXJyb3InLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJykKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrICE9IEZhbHNlOgotICAgICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY2F0Y2gnLCBkZXN0PSdjYXRjaGJyZWFrJywgZGVmYXVsdD1GYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NhdGNoIGN0cmwtQyBhbmQgZGlzcGxheSByZXN1bHRzIHNvIGZhcicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnKQotICAgICAgICBpZiBzZWxmLmJ1ZmZlciAhPSBGYWxzZToKLSAgICAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctYicsICctLWJ1ZmZlcicsIGRlc3Q9J2J1ZmZlcicsIGRlZmF1bHQ9RmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3RzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgZGVmIF9nZXRQYXJlbnRBcmdQYXJzZXIoc2VsZik6CisgICAgICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGFkZF9oZWxwPUZhbHNlKQorCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy12JywgJy0tdmVyYm9zZScsIGRlc3Q9J3ZlcmJvc2l0eScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uPSdzdG9yZV9jb25zdCcsIGNvbnN0PTIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVmVyYm9zZSBvdXRwdXQnKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcScsICctLXF1aWV0JywgZGVzdD0ndmVyYm9zaXR5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX2NvbnN0JywgY29uc3Q9MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdRdWlldCBvdXRwdXQnKQorCisgICAgICAgIGlmIHNlbGYuZmFpbGZhc3QgaXMgTm9uZToKKyAgICAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy1mJywgJy0tZmFpbGZhc3QnLCBkZXN0PSdmYWlsZmFzdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1N0b3Agb24gZmlyc3QgZmFpbCBvciBlcnJvcicpCisgICAgICAgICAgICBzZWxmLmZhaWxmYXN0ID0gRmFsc2UKKyAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctYycsICctLWNhdGNoJywgZGVzdD0nY2F0Y2hicmVhaycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0NhdGNoIEN0cmwtQyBhbmQgZGlzcGxheSByZXN1bHRzIHNvIGZhcicpCisgICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBGYWxzZQorICAgICAgICBpZiBzZWxmLmJ1ZmZlciBpcyBOb25lOgorICAgICAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLWInLCAnLS1idWZmZXInLCBkZXN0PSdidWZmZXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdCdWZmZXIgc3Rkb3V0IGFuZCBzdGRlcnIgZHVyaW5nIHRlc3RzJykKKyAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gRmFsc2UKKwogICAgICAgICByZXR1cm4gcGFyc2VyCiAKLSAgICBkZWYgX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhzZWxmLCBvcHRpb25zKToKLSAgICAgICAgIyBvbmx5IHNldCBvcHRpb25zIGZyb20gdGhlIHBhcnNpbmcgaGVyZQotICAgICAgICAjIGlmIHRoZXkgd2VyZW4ndCBzZXQgZXhwbGljaXRseSBpbiB0aGUgY29uc3RydWN0b3IKLSAgICAgICAgaWYgc2VsZi5mYWlsZmFzdCBpcyBOb25lOgotICAgICAgICAgICAgc2VsZi5mYWlsZmFzdCA9IG9wdGlvbnMuZmFpbGZhc3QKLSAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmNhdGNoYnJlYWsgPSBvcHRpb25zLmNhdGNoYnJlYWsKLSAgICAgICAgaWYgc2VsZi5idWZmZXIgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVmZmVyID0gb3B0aW9ucy5idWZmZXIKKyAgICBkZWYgX2dldE1haW5BcmdQYXJzZXIoc2VsZiwgcGFyZW50KToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgcGFyc2VyLnByb2cgPSBzZWxmLnByb2dOYW1lCisgICAgICAgIHBhcnNlci5wcmludF9oZWxwID0gc2VsZi5fcHJpbnRfaGVscAogCi0gICAgICAgIGlmIG9wdGlvbnMudmVyYm9zZToKLSAgICAgICAgICAgIHNlbGYudmVyYm9zaXR5ID0gMgotICAgICAgICBlbGlmIG9wdGlvbnMucXVpZXQ6Ci0gICAgICAgICAgICBzZWxmLnZlcmJvc2l0eSA9IDAKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgndGVzdHMnLCBuYXJncz0nKicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nYSBsaXN0IG9mIGFueSBudW1iZXIgb2YgdGVzdCBtb2R1bGVzLCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NsYXNzZXMgYW5kIHRlc3QgbWV0aG9kcy4nKQogCi0gICAgZGVmIF9hZGREaXNjb3ZlcnlPcHRpb25zKHNlbGYsIHBhcnNlcik6Ci0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXN0YXJ0LWRpcmVjdG9yeScsIGRlc3Q9J3N0YXJ0JywgZGVmYXVsdD0nLicsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHA9IkRpcmVjdG9yeSB0byBzdGFydCBkaXNjb3ZlcnkgKCcuJyBkZWZhdWx0KSIpCi0gICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcCcsICctLXBhdHRlcm4nLCBkZXN0PSdwYXR0ZXJuJywgZGVmYXVsdD0ndGVzdCoucHknLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXR0ZXJuIHRvIG1hdGNoIHRlc3RzICgndGVzdCoucHknIGRlZmF1bHQpIikKLSAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy10JywgJy0tdG9wLWxldmVsLWRpcmVjdG9yeScsIGRlc3Q9J3RvcCcsIGRlZmF1bHQ9Tm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nVG9wIGxldmVsIGRpcmVjdG9yeSBvZiBwcm9qZWN0IChkZWZhdWx0cyB0byBzdGFydCBkaXJlY3RvcnkpJykKKyAgICAgICAgcmV0dXJuIHBhcnNlcgorCisgICAgZGVmIF9nZXREaXNjb3ZlcnlBcmdQYXJzZXIoc2VsZiwgcGFyZW50KToKKyAgICAgICAgcGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIocGFyZW50cz1bcGFyZW50XSkKKyAgICAgICAgcGFyc2VyLnByb2cgPSAnJXMgZGlzY292ZXInICUgc2VsZi5wcm9nTmFtZQorICAgICAgICBwYXJzZXIuZXBpbG9nID0gKCdGb3IgdGVzdCBkaXNjb3ZlcnkgYWxsIHRlc3QgbW9kdWxlcyBtdXN0IGJlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnaW1wb3J0YWJsZSBmcm9tIHRoZSB0b3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSAnCisgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QuJykKKworICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcycsICctLXN0YXJ0LWRpcmVjdG9yeScsIGRlc3Q9J3N0YXJ0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJEaXJlY3RvcnkgdG8gc3RhcnQgZGlzY292ZXJ5ICgnLicgZGVmYXVsdCkiKQorICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctcCcsICctLXBhdHRlcm4nLCBkZXN0PSdwYXR0ZXJuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSJQYXR0ZXJuIHRvIG1hdGNoIHRlc3RzICgndGVzdCoucHknIGRlZmF1bHQpIikKKyAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLXQnLCAnLS10b3AtbGV2ZWwtZGlyZWN0b3J5JywgZGVzdD0ndG9wJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUb3AgbGV2ZWwgZGlyZWN0b3J5IG9mIHByb2plY3QgKGRlZmF1bHRzIHRvICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzdGFydCBkaXJlY3RvcnkpJykKKyAgICAgICAgZm9yIGFyZyBpbiAoJ3N0YXJ0JywgJ3BhdHRlcm4nLCAndG9wJyk6CisgICAgICAgICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KGFyZywgbmFyZ3M9Jz8nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0PWFyZ3BhcnNlLlNVUFBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPWFyZ3BhcnNlLlNVUFBSRVNTKQorCisgICAgICAgIHJldHVybiBwYXJzZXIKIAogICAgIGRlZiBfZG9fZGlzY292ZXJ5KHNlbGYsIGFyZ3YsIExvYWRlcj1Ob25lKToKLSAgICAgICAgaWYgTG9hZGVyIGlzIE5vbmU6Ci0gICAgICAgICAgICBMb2FkZXIgPSBsYW1iZGE6IHNlbGYudGVzdExvYWRlcgorICAgICAgICBzZWxmLnN0YXJ0ID0gJy4nCisgICAgICAgIHNlbGYucGF0dGVybiA9ICd0ZXN0Ki5weScKKyAgICAgICAgc2VsZi50b3AgPSBOb25lCisgICAgICAgIGlmIGFyZ3YgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAjIGhhbmRsZSBjb21tYW5kIGxpbmUgYXJncyBmb3IgdGVzdCBkaXNjb3ZlcnkKKyAgICAgICAgICAgIGlmIHNlbGYuX2Rpc2NvdmVyeV9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAjIGZvciB0ZXN0aW5nCisgICAgICAgICAgICAgICAgc2VsZi5faW5pdEFyZ1BhcnNlcnMoKQorICAgICAgICAgICAgc2VsZi5fZGlzY292ZXJ5X3BhcnNlci5wYXJzZV9hcmdzKGFyZ3YsIHNlbGYpCiAKLSAgICAgICAgIyBoYW5kbGUgY29tbWFuZCBsaW5lIGFyZ3MgZm9yIHRlc3QgZGlzY292ZXJ5Ci0gICAgICAgIHNlbGYucHJvZ05hbWUgPSAnJXMgZGlzY292ZXInICUgc2VsZi5wcm9nTmFtZQotICAgICAgICBwYXJzZXIgPSBzZWxmLl9nZXRPcHRQYXJzZXIoKQotICAgICAgICBzZWxmLl9hZGREaXNjb3ZlcnlPcHRpb25zKHBhcnNlcikKLQotICAgICAgICBvcHRpb25zLCBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndikKLSAgICAgICAgaWYgbGVuKGFyZ3MpID4gMzoKLSAgICAgICAgICAgIHNlbGYudXNhZ2VFeGl0KCkKLQotICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gemlwKCgnc3RhcnQnLCAncGF0dGVybicsICd0b3AnKSwgYXJncyk6Ci0gICAgICAgICAgICBzZXRhdHRyKG9wdGlvbnMsIG5hbWUsIHZhbHVlKQotCi0gICAgICAgIHNlbGYuX3NldEF0dHJpYnV0ZXNGcm9tT3B0aW9ucyhvcHRpb25zKQotCi0gICAgICAgIHN0YXJ0X2RpciA9IG9wdGlvbnMuc3RhcnQKLSAgICAgICAgcGF0dGVybiA9IG9wdGlvbnMucGF0dGVybgotICAgICAgICB0b3BfbGV2ZWxfZGlyID0gb3B0aW9ucy50b3AKLQotICAgICAgICBsb2FkZXIgPSBMb2FkZXIoKQotICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyLCBwYXR0ZXJuLCB0b3BfbGV2ZWxfZGlyKQorICAgICAgICBsb2FkZXIgPSBzZWxmLnRlc3RMb2FkZXIgaWYgTG9hZGVyIGlzIE5vbmUgZWxzZSBMb2FkZXIoKQorICAgICAgICBzZWxmLnRlc3QgPSBsb2FkZXIuZGlzY292ZXIoc2VsZi5zdGFydCwgc2VsZi5wYXR0ZXJuLCBzZWxmLnRvcCkKIAogICAgIGRlZiBydW5UZXN0cyhzZWxmKToKICAgICAgICAgaWYgc2VsZi5jYXRjaGJyZWFrOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L21vY2sucHkgYi9MaWIvdW5pdHRlc3QvbW9jay5weQppbmRleCAwNzM4NjlhLi41NzNjNzk5IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvbW9jay5weQorKysgYi9MaWIvdW5pdHRlc3QvbW9jay5weQpAQCAtMjcsNyArMjcsNyBAQAogaW1wb3J0IGluc3BlY3QKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBzeXMKLWZyb20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdyYXBzLCBwYXJ0aWFsCiAKIAogQmFzZUV4Y2VwdGlvbnMgPSAoQmFzZUV4Y2VwdGlvbiwpCkBAIC02Niw1NSArNjYsNDUgQEAKICkKIAogCi1kZWYgX2dldHNpZ25hdHVyZShmdW5jLCBza2lwZmlyc3QsIGluc3RhbmNlPUZhbHNlKToKLSAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGUpIGFuZCBub3QgaW5zdGFuY2U6CitkZWYgX2dldF9zaWduYXR1cmVfb2JqZWN0KGZ1bmMsIGFzX2luc3RhbmNlLCBlYXRfc2VsZik6CisgICAgIiIiCisgICAgR2l2ZW4gYW4gYXJiaXRyYXJ5LCBwb3NzaWJseSBjYWxsYWJsZSBvYmplY3QsIHRyeSB0byBjcmVhdGUgYSBzdWl0YWJsZQorICAgIHNpZ25hdHVyZSBvYmplY3QuCisgICAgUmV0dXJuIGEgKHJlZHVjZWQgZnVuYywgc2lnbmF0dXJlKSB0dXBsZSwgb3IgTm9uZS4KKyAgICAiIiIKKyAgICBpZiBpc2luc3RhbmNlKGZ1bmMsIHR5cGUpIGFuZCBub3QgYXNfaW5zdGFuY2U6CisgICAgICAgICMgSWYgaXQncyBhIHR5cGUgYW5kIHNob3VsZCBiZSBtb2RlbGxlZCBhcyBhIHR5cGUsIHVzZSBfX2luaXRfXy4KICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnVuYyA9IGZ1bmMuX19pbml0X18KICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNraXBmaXJzdCA9IFRydWUKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgICMgU2tpcCB0aGUgYHNlbGZgIGFyZ3VtZW50IGluIF9faW5pdF9fCisgICAgICAgIGVhdF9zZWxmID0gVHJ1ZQogICAgIGVsaWYgbm90IGlzaW5zdGFuY2UoZnVuYywgRnVuY3Rpb25UeXBlcyk6Ci0gICAgICAgICMgZm9yIGNsYXNzZXMgd2hlcmUgaW5zdGFuY2UgaXMgVHJ1ZSB3ZSBlbmQgdXAgaGVyZSB0b28KKyAgICAgICAgIyBJZiB3ZSByZWFsbHkgd2FudCB0byBtb2RlbCBhbiBpbnN0YW5jZSBvZiB0aGUgcGFzc2VkIHR5cGUsCisgICAgICAgICMgX19jYWxsX18gc2hvdWxkIGJlIGxvb2tlZCB1cCwgbm90IF9faW5pdF9fLgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBmdW5jID0gZnVuYy5fX2NhbGxfXwogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6Ci0gICAgICAgICAgICByZXR1cm4KLQorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICBpZiBlYXRfc2VsZjoKKyAgICAgICAgc2lnX2Z1bmMgPSBwYXJ0aWFsKGZ1bmMsIE5vbmUpCisgICAgZWxzZToKKyAgICAgICAgc2lnX2Z1bmMgPSBmdW5jCiAgICAgdHJ5OgotICAgICAgICBhcmdzcGVjID0gaW5zcGVjdC5nZXRmdWxsYXJnc3BlYyhmdW5jKQotICAgIGV4Y2VwdCBUeXBlRXJyb3I6Ci0gICAgICAgICMgQyBmdW5jdGlvbiAvIG1ldGhvZCwgcG9zc2libHkgaW5oZXJpdGVkIG9iamVjdCgpLl9faW5pdF9fCi0gICAgICAgIHJldHVybgotCi0gICAgcmVnYXJncywgdmFyYXJncywgdmFya3csIGRlZmF1bHRzLCBrd29ubHksIGt3b25seWRlZiwgYW5uID0gYXJnc3BlYwotCi0KLSAgICAjIGluc3RhbmNlIG1ldGhvZHMgYW5kIGNsYXNzbWV0aG9kcyBuZWVkIHRvIGxvc2UgdGhlIHNlbGYgYXJndW1lbnQKLSAgICBpZiBnZXRhdHRyKGZ1bmMsICdfX3NlbGZfXycsIE5vbmUpIGlzIG5vdCBOb25lOgotICAgICAgICByZWdhcmdzID0gcmVnYXJnc1sxOl0KLSAgICBpZiBza2lwZmlyc3Q6Ci0gICAgICAgICMgdGhpcyBjb25kaXRpb24gYW5kIHRoZSBhYm92ZSBvbmUgYXJlIG5ldmVyIGJvdGggVHJ1ZSAtIHdoeT8KLSAgICAgICAgcmVnYXJncyA9IHJlZ2FyZ3NbMTpdCi0KLSAgICBzaWduYXR1cmUgPSBpbnNwZWN0LmZvcm1hdGFyZ3NwZWMoCi0gICAgICAgIHJlZ2FyZ3MsIHZhcmFyZ3MsIHZhcmt3LCBkZWZhdWx0cywKLSAgICAgICAga3dvbmx5LCBrd29ubHlkZWYsIGFubiwgZm9ybWF0dmFsdWU9bGFtYmRhIHZhbHVlOiAiIikKLSAgICByZXR1cm4gc2lnbmF0dXJlWzE6LTFdLCBmdW5jCisgICAgICAgIHJldHVybiBmdW5jLCBpbnNwZWN0LnNpZ25hdHVyZShzaWdfZnVuYykKKyAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgIyBDZXJ0YWluIGNhbGxhYmxlIHR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGluc3BlY3Quc2lnbmF0dXJlKCkKKyAgICAgICAgcmV0dXJuIE5vbmUKIAogCiBkZWYgX2NoZWNrX3NpZ25hdHVyZShmdW5jLCBtb2NrLCBza2lwZmlyc3QsIGluc3RhbmNlPUZhbHNlKToKLSAgICBpZiBub3QgX2NhbGxhYmxlKGZ1bmMpOgorICAgIHNpZyA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChmdW5jLCBpbnN0YW5jZSwgc2tpcGZpcnN0KQorICAgIGlmIHNpZyBpcyBOb25lOgogICAgICAgICByZXR1cm4KLQotICAgIHJlc3VsdCA9IF9nZXRzaWduYXR1cmUoZnVuYywgc2tpcGZpcnN0LCBpbnN0YW5jZSkKLSAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuCi0gICAgc2lnbmF0dXJlLCBmdW5jID0gcmVzdWx0Ci0KLSAgICAjIGNhbid0IHVzZSBzZWxmIGJlY2F1c2UgInNlbGYiIGlzIGNvbW1vbiBhcyBhbiBhcmd1bWVudCBuYW1lCi0gICAgIyB1bmZvcnR1bmF0ZWx5IGV2ZW4gbm90IGluIHRoZSBmaXJzdCBwbGFjZQotICAgIHNyYyA9ICJsYW1iZGEgX21vY2tfc2VsZiwgJXM6IE5vbmUiICUgc2lnbmF0dXJlCi0gICAgY2hlY2tzaWcgPSBldmFsKHNyYywge30pCisgICAgZnVuYywgc2lnID0gc2lnCisgICAgZGVmIGNoZWNrc2lnKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNpZy5iaW5kKCphcmdzLCAqKmt3YXJncykKICAgICBfY29weV9mdW5jX2RldGFpbHMoZnVuYywgY2hlY2tzaWcpCiAgICAgdHlwZShtb2NrKS5fbW9ja19jaGVja19zaWcgPSBjaGVja3NpZwogCkBAIC0xMjIsMTEgKzExMiwyNCBAQAogZGVmIF9jb3B5X2Z1bmNfZGV0YWlscyhmdW5jLCBmdW5jb3B5KToKICAgICBmdW5jb3B5Ll9fbmFtZV9fID0gZnVuYy5fX25hbWVfXwogICAgIGZ1bmNvcHkuX19kb2NfXyA9IGZ1bmMuX19kb2NfXworICAgIHRyeToKKyAgICAgICAgZnVuY29weS5fX3RleHRfc2lnbmF0dXJlX18gPSBmdW5jLl9fdGV4dF9zaWduYXR1cmVfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcwogICAgICMgd2UgZXhwbGljaXRseSBkb24ndCBjb3B5IGZ1bmMuX19kaWN0X18gaW50byB0aGlzIGNvcHkgYXMgaXQgd291bGQKICAgICAjIGV4cG9zZSBvcmlnaW5hbCBhdHRyaWJ1dGVzIHRoYXQgc2hvdWxkIGJlIG1vY2tlZAotICAgIGZ1bmNvcHkuX19tb2R1bGVfXyA9IGZ1bmMuX19tb2R1bGVfXwotICAgIGZ1bmNvcHkuX19kZWZhdWx0c19fID0gZnVuYy5fX2RlZmF1bHRzX18KLSAgICBmdW5jb3B5Ll9fa3dkZWZhdWx0c19fID0gZnVuYy5fX2t3ZGVmYXVsdHNfXworICAgIHRyeToKKyAgICAgICAgZnVuY29weS5fX21vZHVsZV9fID0gZnVuYy5fX21vZHVsZV9fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBmdW5jb3B5Ll9fZGVmYXVsdHNfXyA9IGZ1bmMuX19kZWZhdWx0c19fCisgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICBwYXNzCisgICAgdHJ5OgorICAgICAgICBmdW5jb3B5Ll9fa3dkZWZhdWx0c19fID0gZnVuYy5fX2t3ZGVmYXVsdHNfXworICAgIGV4Y2VwdCBBdHRyaWJ1dGVFcnJvcjoKKyAgICAgICAgcGFzcwogCiAKIGRlZiBfY2FsbGFibGUob2JqKToKQEAgLTE2NiwxNSArMTY5LDEyIEBACiAgICAgICAgIHJldHVybgogCiAgICAgc2tpcGZpcnN0ID0gaXNpbnN0YW5jZShvcmlnaW5hbCwgdHlwZSkKLSAgICByZXN1bHQgPSBfZ2V0c2lnbmF0dXJlKG9yaWdpbmFsLCBza2lwZmlyc3QsIGluc3RhbmNlKQorICAgIHJlc3VsdCA9IF9nZXRfc2lnbmF0dXJlX29iamVjdChvcmlnaW5hbCwgaW5zdGFuY2UsIHNraXBmaXJzdCkKICAgICBpZiByZXN1bHQgaXMgTm9uZToKLSAgICAgICAgIyB3YXMgYSBDIGZ1bmN0aW9uIChlLmcuIG9iamVjdCgpLl9faW5pdF9fICkgdGhhdCBjYW4ndCBiZSBtb2NrZWQKICAgICAgICAgcmV0dXJuCi0KLSAgICBzaWduYXR1cmUsIGZ1bmMgPSByZXN1bHQKLQotICAgIHNyYyA9ICJsYW1iZGEgJXM6IE5vbmUiICUgc2lnbmF0dXJlCi0gICAgY2hlY2tzaWcgPSBldmFsKHNyYywge30pCisgICAgZnVuYywgc2lnID0gcmVzdWx0CisgICAgZGVmIGNoZWNrc2lnKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHNpZy5iaW5kKCphcmdzLCAqKmt3YXJncykKICAgICBfY29weV9mdW5jX2RldGFpbHMoZnVuYywgY2hlY2tzaWcpCiAKICAgICBuYW1lID0gb3JpZ2luYWwuX19uYW1lX18KQEAgLTM0Myw3ICszNDMsMTQgQEAKICAgICAgICAgdmFsdWUuX21vY2tfbmFtZSA9IG5hbWUKICAgICByZXR1cm4gVHJ1ZQogCi0KKyMgSW50ZXJuYWwgY2xhc3MgdG8gaWRlbnRpZnkgaWYgd2Ugd3JhcHBlZCBhbiBpdGVyYXRvciBvYmplY3Qgb3Igbm90LgorY2xhc3MgX01vY2tJdGVyKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaik6CisgICAgICAgIHNlbGYub2JqID0gaXRlcihvYmopCisgICAgZGVmIF9faXRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorICAgIGRlZiBfX25leHRfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG5leHQoc2VsZi5vYmopCiAKIGNsYXNzIEJhc2Uob2JqZWN0KToKICAgICBfbW9ja19yZXR1cm5fdmFsdWUgPSBERUZBVUxUCkBAIC0zNjgsNyArMzc1LDcgQEAKICAgICBkZWYgX19pbml0X18oCiAgICAgICAgICAgICBzZWxmLCBzcGVjPU5vbmUsIHdyYXBzPU5vbmUsIG5hbWU9Tm9uZSwgc3BlY19zZXQ9Tm9uZSwKICAgICAgICAgICAgIHBhcmVudD1Ob25lLCBfc3BlY19zdGF0ZT1Ob25lLCBfbmV3X25hbWU9JycsIF9uZXdfcGFyZW50PU5vbmUsCi0gICAgICAgICAgICAqKmt3YXJncworICAgICAgICAgICAgX3NwZWNfYXNfaW5zdGFuY2U9RmFsc2UsIF9lYXRfc2VsZj1Ob25lLCAqKmt3YXJncwogICAgICAgICApOgogICAgICAgICBpZiBfbmV3X3BhcmVudCBpcyBOb25lOgogICAgICAgICAgICAgX25ld19wYXJlbnQgPSBwYXJlbnQKQEAgLTM4Miw4ICszODksMTAgQEAKICAgICAgICAgaWYgc3BlY19zZXQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBzcGVjID0gc3BlY19zZXQKICAgICAgICAgICAgIHNwZWNfc2V0ID0gVHJ1ZQorICAgICAgICBpZiBfZWF0X3NlbGYgaXMgTm9uZToKKyAgICAgICAgICAgIF9lYXRfc2VsZiA9IHBhcmVudCBpcyBub3QgTm9uZQogCi0gICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQpCisgICAgICAgIHNlbGYuX21vY2tfYWRkX3NwZWMoc3BlYywgc3BlY19zZXQsIF9zcGVjX2FzX2luc3RhbmNlLCBfZWF0X3NlbGYpCiAKICAgICAgICAgX19kaWN0X19bJ19tb2NrX2NoaWxkcmVuJ10gPSB7fQogICAgICAgICBfX2RpY3RfX1snX21vY2tfd3JhcHMnXSA9IHdyYXBzCkBAIC00MjgsMjAgKzQzNywyNiBAQAogICAgICAgICBzZWxmLl9tb2NrX2FkZF9zcGVjKHNwZWMsIHNwZWNfc2V0KQogCiAKLSAgICBkZWYgX21vY2tfYWRkX3NwZWMoc2VsZiwgc3BlYywgc3BlY19zZXQpOgorICAgIGRlZiBfbW9ja19hZGRfc3BlYyhzZWxmLCBzcGVjLCBzcGVjX3NldCwgX3NwZWNfYXNfaW5zdGFuY2U9RmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgIF9lYXRfc2VsZj1GYWxzZSk6CiAgICAgICAgIF9zcGVjX2NsYXNzID0gTm9uZQorICAgICAgICBfc3BlY19zaWduYXR1cmUgPSBOb25lCiAKICAgICAgICAgaWYgc3BlYyBpcyBub3QgTm9uZSBhbmQgbm90IF9pc19saXN0KHNwZWMpOgogICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShzcGVjLCB0eXBlKToKICAgICAgICAgICAgICAgICBfc3BlY19jbGFzcyA9IHNwZWMKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgX3NwZWNfY2xhc3MgPSBfZ2V0X2NsYXNzKHNwZWMpCisgICAgICAgICAgICByZXMgPSBfZ2V0X3NpZ25hdHVyZV9vYmplY3Qoc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3BlY19hc19pbnN0YW5jZSwgX2VhdF9zZWxmKQorICAgICAgICAgICAgX3NwZWNfc2lnbmF0dXJlID0gcmVzIGFuZCByZXNbMV0KIAogICAgICAgICAgICAgc3BlYyA9IGRpcihzcGVjKQogCiAgICAgICAgIF9fZGljdF9fID0gc2VsZi5fX2RpY3RfXwogICAgICAgICBfX2RpY3RfX1snX3NwZWNfY2xhc3MnXSA9IF9zcGVjX2NsYXNzCiAgICAgICAgIF9fZGljdF9fWydfc3BlY19zZXQnXSA9IHNwZWNfc2V0CisgICAgICAgIF9fZGljdF9fWydfc3BlY19zaWduYXR1cmUnXSA9IF9zcGVjX3NpZ25hdHVyZQogICAgICAgICBfX2RpY3RfX1snX21vY2tfbWV0aG9kcyddID0gc3BlYwogCiAKQEAgLTQ4Nyw3ICs1MDIsMTEgQEAKICAgICAgICAgZGVsZWdhdGVkID0gc2VsZi5fbW9ja19kZWxlZ2F0ZQogICAgICAgICBpZiBkZWxlZ2F0ZWQgaXMgTm9uZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLl9tb2NrX3NpZGVfZWZmZWN0Ci0gICAgICAgIHJldHVybiBkZWxlZ2F0ZWQuc2lkZV9lZmZlY3QKKyAgICAgICAgc2YgPSBkZWxlZ2F0ZWQuc2lkZV9lZmZlY3QKKyAgICAgICAgaWYgc2YgaXMgbm90IE5vbmUgYW5kIG5vdCBjYWxsYWJsZShzZikgYW5kIG5vdCBpc2luc3RhbmNlKHNmLCBfTW9ja0l0ZXIpOgorICAgICAgICAgICAgc2YgPSBfTW9ja0l0ZXIoc2YpCisgICAgICAgICAgICBkZWxlZ2F0ZWQuc2lkZV9lZmZlY3QgPSBzZgorICAgICAgICByZXR1cm4gc2YKIAogICAgIGRlZiBfX3NldF9zaWRlX2VmZmVjdChzZWxmLCB2YWx1ZSk6CiAgICAgICAgIHZhbHVlID0gX3RyeV9pdGVyKHZhbHVlKQpAQCAtNTAwLDggKzUxOSwxNCBAQAogICAgIHNpZGVfZWZmZWN0ID0gcHJvcGVydHkoX19nZXRfc2lkZV9lZmZlY3QsIF9fc2V0X3NpZGVfZWZmZWN0KQogCiAKLSAgICBkZWYgcmVzZXRfbW9jayhzZWxmKToKKyAgICBkZWYgcmVzZXRfbW9jayhzZWxmLCB2aXNpdGVkPU5vbmUpOgogICAgICAgICAiUmVzdG9yZSB0aGUgbW9jayBvYmplY3QgdG8gaXRzIGluaXRpYWwgc3RhdGUuIgorICAgICAgICBpZiB2aXNpdGVkIGlzIE5vbmU6CisgICAgICAgICAgICB2aXNpdGVkID0gW10KKyAgICAgICAgaWYgaWQoc2VsZikgaW4gdmlzaXRlZDoKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICB2aXNpdGVkLmFwcGVuZChpZChzZWxmKSkKKwogICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCiAgICAgICAgIHNlbGYuY2FsbF9hcmdzID0gTm9uZQogICAgICAgICBzZWxmLmNhbGxfY291bnQgPSAwCkBAIC01MTIsMTEgKzUzNywxMSBAQAogICAgICAgICBmb3IgY2hpbGQgaW4gc2VsZi5fbW9ja19jaGlsZHJlbi52YWx1ZXMoKToKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoY2hpbGQsIF9TcGVjU3RhdGUpOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgICAgICBjaGlsZC5yZXNldF9tb2NrKCkKKyAgICAgICAgICAgIGNoaWxkLnJlc2V0X21vY2sodmlzaXRlZCkKIAogICAgICAgICByZXQgPSBzZWxmLl9tb2NrX3JldHVybl92YWx1ZQogICAgICAgICBpZiBfaXNfaW5zdGFuY2VfbW9jayhyZXQpIGFuZCByZXQgaXMgbm90IHNlbGY6Ci0gICAgICAgICAgICByZXQucmVzZXRfbW9jaygpCisgICAgICAgICAgICByZXQucmVzZXRfbW9jayh2aXNpdGVkKQogCiAKICAgICBkZWYgY29uZmlndXJlX21vY2soc2VsZiwgKiprd2FyZ3MpOgpAQCAtNjk1LDcgKzcyMCw2IEBACiAgICAgICAgIHNlbGYuX21vY2tfY2hpbGRyZW5bbmFtZV0gPSBfZGVsZXRlZAogCiAKLQogICAgIGRlZiBfZm9ybWF0X21vY2tfY2FsbF9zaWduYXR1cmUoc2VsZiwgYXJncywga3dhcmdzKToKICAgICAgICAgbmFtZSA9IHNlbGYuX21vY2tfbmFtZSBvciAnbW9jaycKICAgICAgICAgcmV0dXJuIF9mb3JtYXRfY2FsbF9zaWduYXR1cmUobmFtZSwgYXJncywga3dhcmdzKQpAQCAtNzExLDYgKzczNSwyOCBAQAogICAgICAgICByZXR1cm4gbWVzc2FnZSAlIChleHBlY3RlZF9zdHJpbmcsIGFjdHVhbF9zdHJpbmcpCiAKIAorICAgIGRlZiBfY2FsbF9tYXRjaGVyKHNlbGYsIF9jYWxsKToKKyAgICAgICAgIiIiCisgICAgICAgIEdpdmVuIGEgY2FsbCAob3Igc2ltcGx5IGEgKGFyZ3MsIGt3YXJncykgdHVwbGUpLCByZXR1cm4gYQorICAgICAgICBjb21wYXJpc29uIGtleSBzdWl0YWJsZSBmb3IgbWF0Y2hpbmcgd2l0aCBvdGhlciBjYWxscy4KKyAgICAgICAgVGhpcyBpcyBhIGJlc3QgZWZmb3J0IG1ldGhvZCB3aGljaCByZWxpZXMgb24gdGhlIHNwZWMncyBzaWduYXR1cmUsCisgICAgICAgIGlmIGF2YWlsYWJsZSwgb3IgZmFsbHMgYmFjayBvbiB0aGUgYXJndW1lbnRzIHRoZW1zZWx2ZXMuCisgICAgICAgICIiIgorICAgICAgICBzaWcgPSBzZWxmLl9zcGVjX3NpZ25hdHVyZQorICAgICAgICBpZiBzaWcgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBpZiBsZW4oX2NhbGwpID09IDI6CisgICAgICAgICAgICAgICAgbmFtZSA9ICcnCisgICAgICAgICAgICAgICAgYXJncywga3dhcmdzID0gX2NhbGwKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbmFtZSwgYXJncywga3dhcmdzID0gX2NhbGwKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICByZXR1cm4gbmFtZSwgc2lnLmJpbmQoKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICAgICAgZXhjZXB0IFR5cGVFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIHJldHVybiBlLndpdGhfdHJhY2ViYWNrKE5vbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gX2NhbGwKKworCiAgICAgZGVmIGFzc2VydF9jYWxsZWRfd2l0aChfbW9ja19zZWxmLCAqYXJncywgKiprd2FyZ3MpOgogICAgICAgICAiIiJhc3NlcnQgdGhhdCB0aGUgbW9jayB3YXMgY2FsbGVkIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudHMuCiAKQEAgLTcyMSw5ICs3NjcsMTQgQEAKICAgICAgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fZm9ybWF0X21vY2tfY2FsbF9zaWduYXR1cmUoYXJncywga3dhcmdzKQogICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoJ0V4cGVjdGVkIGNhbGw6ICVzXG5Ob3QgY2FsbGVkJyAlIChleHBlY3RlZCwpKQogCi0gICAgICAgIGlmIHNlbGYuY2FsbF9hcmdzICE9IChhcmdzLCBrd2FyZ3MpOgorICAgICAgICBkZWYgX2Vycm9yX21lc3NhZ2UoKToKICAgICAgICAgICAgIG1zZyA9IHNlbGYuX2Zvcm1hdF9tb2NrX2ZhaWx1cmVfbWVzc2FnZShhcmdzLCBrd2FyZ3MpCi0gICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcihtc2cpCisgICAgICAgICAgICByZXR1cm4gbXNnCisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fY2FsbF9tYXRjaGVyKChhcmdzLCBrd2FyZ3MpKQorICAgICAgICBhY3R1YWwgPSBzZWxmLl9jYWxsX21hdGNoZXIoc2VsZi5jYWxsX2FyZ3MpCisgICAgICAgIGlmIGV4cGVjdGVkICE9IGFjdHVhbDoKKyAgICAgICAgICAgIGNhdXNlID0gZXhwZWN0ZWQgaWYgaXNpbnN0YW5jZShleHBlY3RlZCwgRXhjZXB0aW9uKSBlbHNlIE5vbmUKKyAgICAgICAgICAgIHJhaXNlIEFzc2VydGlvbkVycm9yKF9lcnJvcl9tZXNzYWdlKCkpIGZyb20gY2F1c2UKIAogCiAgICAgZGVmIGFzc2VydF9jYWxsZWRfb25jZV93aXRoKF9tb2NrX3NlbGYsICphcmdzLCAqKmt3YXJncyk6CkBAIC03NDcsMTggKzc5OCwyMSBAQAogCiAgICAgICAgIElmIGBhbnlfb3JkZXJgIGlzIFRydWUgdGhlbiB0aGUgY2FsbHMgY2FuIGJlIGluIGFueSBvcmRlciwgYnV0CiAgICAgICAgIHRoZXkgbXVzdCBhbGwgYXBwZWFyIGluIGBtb2NrX2NhbGxzYC4iIiIKKyAgICAgICAgZXhwZWN0ZWQgPSBbc2VsZi5fY2FsbF9tYXRjaGVyKGMpIGZvciBjIGluIGNhbGxzXQorICAgICAgICBjYXVzZSA9IGV4cGVjdGVkIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIEV4Y2VwdGlvbikgZWxzZSBOb25lCisgICAgICAgIGFsbF9jYWxscyA9IF9DYWxsTGlzdChzZWxmLl9jYWxsX21hdGNoZXIoYykgZm9yIGMgaW4gc2VsZi5tb2NrX2NhbGxzKQogICAgICAgICBpZiBub3QgYW55X29yZGVyOgotICAgICAgICAgICAgaWYgY2FsbHMgbm90IGluIHNlbGYubW9ja19jYWxsczoKKyAgICAgICAgICAgIGlmIGV4cGVjdGVkIG5vdCBpbiBhbGxfY2FsbHM6CiAgICAgICAgICAgICAgICAgcmFpc2UgQXNzZXJ0aW9uRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgICdDYWxscyBub3QgZm91bmQuXG5FeHBlY3RlZDogJXJcbicKICAgICAgICAgICAgICAgICAgICAgJ0FjdHVhbDogJXInICUgKGNhbGxzLCBzZWxmLm1vY2tfY2FsbHMpCi0gICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICkgZnJvbSBjYXVzZQogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgYWxsX2NhbGxzID0gbGlzdChzZWxmLm1vY2tfY2FsbHMpCisgICAgICAgIGFsbF9jYWxscyA9IGxpc3QoYWxsX2NhbGxzKQogCiAgICAgICAgIG5vdF9mb3VuZCA9IFtdCi0gICAgICAgIGZvciBrYWxsIGluIGNhbGxzOgorICAgICAgICBmb3Iga2FsbCBpbiBleHBlY3RlZDoKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBhbGxfY2FsbHMucmVtb3ZlKGthbGwpCiAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKQEAgLTc2Niw3ICs4MjAsNyBAQAogICAgICAgICBpZiBub3RfZm91bmQ6CiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKICAgICAgICAgICAgICAgICAnJXIgbm90IGFsbCBmb3VuZCBpbiBjYWxsIGxpc3QnICUgKHR1cGxlKG5vdF9mb3VuZCksKQotICAgICAgICAgICAgKQorICAgICAgICAgICAgKSBmcm9tIGNhdXNlCiAKIAogICAgIGRlZiBhc3NlcnRfYW55X2NhbGwoc2VsZiwgKmFyZ3MsICoqa3dhcmdzKToKQEAgLTc3NSwxMiArODI5LDE0IEBACiAgICAgICAgIFRoZSBhc3NlcnQgcGFzc2VzIGlmIHRoZSBtb2NrIGhhcyAqZXZlciogYmVlbiBjYWxsZWQsIHVubGlrZQogICAgICAgICBgYXNzZXJ0X2NhbGxlZF93aXRoYCBhbmQgYGFzc2VydF9jYWxsZWRfb25jZV93aXRoYCB0aGF0IG9ubHkgcGFzcyBpZgogICAgICAgICB0aGUgY2FsbCBpcyB0aGUgbW9zdCByZWNlbnQgb25lLiIiIgotICAgICAgICBrYWxsID0gY2FsbCgqYXJncywgKiprd2FyZ3MpCi0gICAgICAgIGlmIGthbGwgbm90IGluIHNlbGYuY2FsbF9hcmdzX2xpc3Q6CisgICAgICAgIGV4cGVjdGVkID0gc2VsZi5fY2FsbF9tYXRjaGVyKChhcmdzLCBrd2FyZ3MpKQorICAgICAgICBhY3R1YWwgPSBbc2VsZi5fY2FsbF9tYXRjaGVyKGMpIGZvciBjIGluIHNlbGYuY2FsbF9hcmdzX2xpc3RdCisgICAgICAgIGlmIGV4cGVjdGVkIG5vdCBpbiBhY3R1YWw6CisgICAgICAgICAgICBjYXVzZSA9IGV4cGVjdGVkIGlmIGlzaW5zdGFuY2UoZXhwZWN0ZWQsIEV4Y2VwdGlvbikgZWxzZSBOb25lCiAgICAgICAgICAgICBleHBlY3RlZF9zdHJpbmcgPSBzZWxmLl9mb3JtYXRfbW9ja19jYWxsX3NpZ25hdHVyZShhcmdzLCBrd2FyZ3MpCiAgICAgICAgICAgICByYWlzZSBBc3NlcnRpb25FcnJvcigKICAgICAgICAgICAgICAgICAnJXMgY2FsbCBub3QgZm91bmQnICUgZXhwZWN0ZWRfc3RyaW5nCi0gICAgICAgICAgICApCisgICAgICAgICAgICApIGZyb20gY2F1c2UKIAogCiAgICAgZGVmIF9nZXRfY2hpbGRfbW9jayhzZWxmLCAqKmt3KToKQEAgLTg1MCwxMSArOTA2LDEyIEBACiAgICAgICAgIHNlbGYgPSBfbW9ja19zZWxmCiAgICAgICAgIHNlbGYuY2FsbGVkID0gVHJ1ZQogICAgICAgICBzZWxmLmNhbGxfY291bnQgKz0gMQotICAgICAgICBzZWxmLmNhbGxfYXJncyA9IF9DYWxsKChhcmdzLCBrd2FyZ3MpLCB0d289VHJ1ZSkKLSAgICAgICAgc2VsZi5jYWxsX2FyZ3NfbGlzdC5hcHBlbmQoX0NhbGwoKGFyZ3MsIGt3YXJncyksIHR3bz1UcnVlKSkKLQogICAgICAgICBfbmV3X25hbWUgPSBzZWxmLl9tb2NrX25ld19uYW1lCiAgICAgICAgIF9uZXdfcGFyZW50ID0gc2VsZi5fbW9ja19uZXdfcGFyZW50CisKKyAgICAgICAgX2NhbGwgPSBfQ2FsbCgoYXJncywga3dhcmdzKSwgdHdvPVRydWUpCisgICAgICAgIHNlbGYuY2FsbF9hcmdzID0gX2NhbGwKKyAgICAgICAgc2VsZi5jYWxsX2FyZ3NfbGlzdC5hcHBlbmQoX2NhbGwpCiAgICAgICAgIHNlbGYubW9ja19jYWxscy5hcHBlbmQoX0NhbGwoKCcnLCBhcmdzLCBrd2FyZ3MpKSkKIAogICAgICAgICBzZWVuID0gc2V0KCkKQEAgLTkwOSw4ICs5NjYsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQKIAogICAgICAgICAgICAgcmV0X3ZhbCA9IGVmZmVjdCgqYXJncywgKiprd2FyZ3MpCi0gICAgICAgICAgICBpZiByZXRfdmFsIGlzIERFRkFVTFQ6Ci0gICAgICAgICAgICAgICAgcmV0X3ZhbCA9IHNlbGYucmV0dXJuX3ZhbHVlCiAKICAgICAgICAgaWYgKHNlbGYuX21vY2tfd3JhcHMgaXMgbm90IE5vbmUgYW5kCiAgICAgICAgICAgICAgc2VsZi5fbW9ja19yZXR1cm5fdmFsdWUgaXMgREVGQVVMVCk6CkBAIC0xMDAxLDcgKzEwNTYsNyBAQAogY2xhc3MgX3BhdGNoKG9iamVjdCk6CiAKICAgICBhdHRyaWJ1dGVfbmFtZSA9IE5vbmUKLSAgICBfYWN0aXZlX3BhdGNoZXMgPSBzZXQoKQorICAgIF9hY3RpdmVfcGF0Y2hlcyA9IFtdCiAKICAgICBkZWYgX19pbml0X18oCiAgICAgICAgICAgICBzZWxmLCBnZXR0ZXIsIGF0dHJpYnV0ZSwgbmV3LCBzcGVjLCBjcmVhdGUsCkBAIC0xMjc0LDEzICsxMzI5LDE4IEBACiAgICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICAgICAiIiJBY3RpdmF0ZSBhIHBhdGNoLCByZXR1cm5pbmcgYW55IGNyZWF0ZWQgbW9jay4iIiIKICAgICAgICAgcmVzdWx0ID0gc2VsZi5fX2VudGVyX18oKQotICAgICAgICBzZWxmLl9hY3RpdmVfcGF0Y2hlcy5hZGQoc2VsZikKKyAgICAgICAgc2VsZi5fYWN0aXZlX3BhdGNoZXMuYXBwZW5kKHNlbGYpCiAgICAgICAgIHJldHVybiByZXN1bHQKIAogCiAgICAgZGVmIHN0b3Aoc2VsZik6CiAgICAgICAgICIiIlN0b3AgYW4gYWN0aXZlIHBhdGNoLiIiIgotICAgICAgICBzZWxmLl9hY3RpdmVfcGF0Y2hlcy5kaXNjYXJkKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2FjdGl2ZV9wYXRjaGVzLnJlbW92ZShzZWxmKQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICMgSWYgdGhlIHBhdGNoIGhhc24ndCBiZWVuIHN0YXJ0ZWQgdGhpcyB3aWxsIGZhaWwKKyAgICAgICAgICAgIHBhc3MKKwogICAgICAgICByZXR1cm4gc2VsZi5fX2V4aXRfXygpCiAKIApAQCAtMTQwMiw3ICsxNDYyLDcgQEAKICAgICB1c2VkLgogCiAgICAgQSBtb3JlIHBvd2VyZnVsIGZvcm0gb2YgYHNwZWNgIGlzIGBhdXRvc3BlY2AuIElmIHlvdSBzZXQgYGF1dG9zcGVjPVRydWVgCi0gICAgdGhlbiB0aGUgbW9jayB3aXRoIGJlIGNyZWF0ZWQgd2l0aCBhIHNwZWMgZnJvbSB0aGUgb2JqZWN0IGJlaW5nIHJlcGxhY2VkLgorICAgIHRoZW4gdGhlIG1vY2sgd2lsbCBiZSBjcmVhdGVkIHdpdGggYSBzcGVjIGZyb20gdGhlIG9iamVjdCBiZWluZyByZXBsYWNlZC4KICAgICBBbGwgYXR0cmlidXRlcyBvZiB0aGUgbW9jayB3aWxsIGFsc28gaGF2ZSB0aGUgc3BlYyBvZiB0aGUgY29ycmVzcG9uZGluZwogICAgIGF0dHJpYnV0ZSBvZiB0aGUgb2JqZWN0IGJlaW5nIHJlcGxhY2VkLiBNZXRob2RzIGFuZCBmdW5jdGlvbnMgYmVpbmcKICAgICBtb2NrZWQgd2lsbCBoYXZlIHRoZWlyIGFyZ3VtZW50cyBjaGVja2VkIGFuZCB3aWxsIHJhaXNlIGEgYFR5cGVFcnJvcmAgaWYKQEAgLTE1NzMsOCArMTYzMyw4IEBACiAKIAogZGVmIF9wYXRjaF9zdG9wYWxsKCk6Ci0gICAgIiIiU3RvcCBhbGwgYWN0aXZlIHBhdGNoZXMuIiIiCi0gICAgZm9yIHBhdGNoIGluIGxpc3QoX3BhdGNoLl9hY3RpdmVfcGF0Y2hlcyk6CisgICAgIiIiU3RvcCBhbGwgYWN0aXZlIHBhdGNoZXMuIExJRk8gdG8gdW5yb2xsIG5lc3RlZCBwYXRjaGVzLiIiIgorICAgIGZvciBwYXRjaCBpbiByZXZlcnNlZChfcGF0Y2guX2FjdGl2ZV9wYXRjaGVzKToKICAgICAgICAgcGF0Y2guc3RvcCgpCiAKIApAQCAtMTU5MCwxMyArMTY1MCwxNyBAQAogICAgICJsZW4gY29udGFpbnMgaXRlciAiCiAgICAgImhhc2ggc3RyIHNpemVvZiAiCiAgICAgImVudGVyIGV4aXQgIgotICAgICJkaXZtb2QgbmVnIHBvcyBhYnMgaW52ZXJ0ICIKKyAgICAjIHdlIGFkZGVkIGRpdm1vZCBhbmQgcmRpdm1vZCBoZXJlIGluc3RlYWQgb2YgbnVtZXJpY3MKKyAgICAjIGJlY2F1c2UgdGhlcmUgaXMgbm8gaWRpdm1vZAorICAgICJkaXZtb2QgcmRpdm1vZCBuZWcgcG9zIGFicyBpbnZlcnQgIgogICAgICJjb21wbGV4IGludCBmbG9hdCBpbmRleCAiCiAgICAgInRydW5jIGZsb29yIGNlaWwgIgogICAgICJib29sIG5leHQgIgogKQogCi1udW1lcmljcyA9ICJhZGQgc3ViIG11bCBkaXYgZmxvb3JkaXYgbW9kIGxzaGlmdCByc2hpZnQgYW5kIHhvciBvciBwb3cgIgorbnVtZXJpY3MgPSAoCisgICAgImFkZCBzdWIgbXVsIGRpdiBmbG9vcmRpdiBtb2QgbHNoaWZ0IHJzaGlmdCBhbmQgeG9yIG9yIHBvdyB0cnVlZGl2IgorKQogaW5wbGFjZSA9ICcgJy5qb2luKCdpJXMnICUgbiBmb3IgbiBpbiBudW1lcmljcy5zcGxpdCgpKQogcmlnaHQgPSAnICcuam9pbignciVzJyAlIG4gZm9yIG4gaW4gbnVtZXJpY3Muc3BsaXQoKSkKIApAQCAtMTcxMywxNCArMTc3NywxNSBAQAogCiBjbGFzcyBNYWdpY01peGluKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICAgICAgc2VsZi5fbW9ja19zZXRfbWFnaWNzKCkgICMgbWFrZSBtYWdpYyB3b3JrIGZvciBrd2FyZ3MgaW4gaW5pdAogICAgICAgICBfc2FmZV9zdXBlcihNYWdpY01peGluLCBzZWxmKS5fX2luaXRfXygqYXJncywgKiprdykKLSAgICAgICAgc2VsZi5fbW9ja19zZXRfbWFnaWNzKCkKKyAgICAgICAgc2VsZi5fbW9ja19zZXRfbWFnaWNzKCkgICMgZml4IG1hZ2ljIGJyb2tlbiBieSB1cHBlciBsZXZlbCBpbml0CiAKIAogICAgIGRlZiBfbW9ja19zZXRfbWFnaWNzKHNlbGYpOgogICAgICAgICB0aGVzZV9tYWdpY3MgPSBfbWFnaWNzCiAKLSAgICAgICAgaWYgc2VsZi5fbW9ja19tZXRob2RzIGlzIG5vdCBOb25lOgorICAgICAgICBpZiBnZXRhdHRyKHNlbGYsICJfbW9ja19tZXRob2RzIiwgTm9uZSkgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICB0aGVzZV9tYWdpY3MgPSBfbWFnaWNzLmludGVyc2VjdGlvbihzZWxmLl9tb2NrX21ldGhvZHMpCiAKICAgICAgICAgICAgIHJlbW92ZV9tYWdpY3MgPSBzZXQoKQpAQCAtMTkyMSw4ICsxOTg2LDcgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgb3RoZXJfYXJncyA9ICgpCiAgICAgICAgICAgICAgICAgb3RoZXJfa3dhcmdzID0gdmFsdWUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgbGVuIDIKKyAgICAgICAgZWxpZiBsZW5fb3RoZXIgPT0gMjoKICAgICAgICAgICAgICMgY291bGQgYmUgKG5hbWUsIGFyZ3MpIG9yIChuYW1lLCBrd2FyZ3MpIG9yIChhcmdzLCBrd2FyZ3MpCiAgICAgICAgICAgICBmaXJzdCwgc2Vjb25kID0gb3RoZXIKICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZmlyc3QsIHN0cik6CkBAIC0xOTMzLDYgKzE5OTcsOCBAQAogICAgICAgICAgICAgICAgICAgICBvdGhlcl9hcmdzLCBvdGhlcl9rd2FyZ3MgPSAoKSwgc2Vjb25kCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIG90aGVyX2FyZ3MsIG90aGVyX2t3YXJncyA9IGZpcnN0LCBzZWNvbmQKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQogCiAgICAgICAgIGlmIHNlbGZfbmFtZSBhbmQgb3RoZXJfbmFtZSAhPSBzZWxmX25hbWU6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTIwMzAsNiArMjA5Niw4IEBACiAgICAgZWxpZiBzcGVjIGlzIE5vbmU6CiAgICAgICAgICMgTm9uZSB3ZSBtb2NrIHdpdGggYSBub3JtYWwgbW9jayB3aXRob3V0IGEgc3BlYwogICAgICAgICBfa3dhcmdzID0ge30KKyAgICBpZiBfa3dhcmdzIGFuZCBpbnN0YW5jZToKKyAgICAgICAgX2t3YXJnc1snX3NwZWNfYXNfaW5zdGFuY2UnXSA9IFRydWUKIAogICAgIF9rd2FyZ3MudXBkYXRlKGt3YXJncykKIApAQCAtMjA0Myw2ICsyMTExLDggQEAKICAgICBlbGlmIGlzX3R5cGUgYW5kIGluc3RhbmNlIGFuZCBub3QgX2luc3RhbmNlX2NhbGxhYmxlKHNwZWMpOgogICAgICAgICBLbGFzcyA9IE5vbkNhbGxhYmxlTWFnaWNNb2NrCiAKKyAgICBfbmFtZSA9IF9rd2FyZ3MucG9wKCduYW1lJywgX25hbWUpCisKICAgICBfbmV3X25hbWUgPSBfbmFtZQogICAgIGlmIF9wYXJlbnQgaXMgTm9uZToKICAgICAgICAgIyBmb3IgYSB0b3AgbGV2ZWwgb2JqZWN0IG5vIF9uZXdfbmFtZSBzaG91bGQgYmUgc2V0CkBAIC0yMDk2LDEwICsyMTY2LDEyIEBACiAgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHNwZWMsIEZ1bmN0aW9uVHlwZXMpOgogICAgICAgICAgICAgICAgIHBhcmVudCA9IG1vY2subW9jawogCi0gICAgICAgICAgICBuZXcgPSBNYWdpY01vY2socGFyZW50PXBhcmVudCwgbmFtZT1lbnRyeSwgX25ld19uYW1lPWVudHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9uZXdfcGFyZW50PXBhcmVudCwgKiprd2FyZ3MpCi0gICAgICAgICAgICBtb2NrLl9tb2NrX2NoaWxkcmVuW2VudHJ5XSA9IG5ldwogICAgICAgICAgICAgc2tpcGZpcnN0ID0gX211c3Rfc2tpcChzcGVjLCBlbnRyeSwgaXNfdHlwZSkKKyAgICAgICAgICAgIGt3YXJnc1snX2VhdF9zZWxmJ10gPSBza2lwZmlyc3QKKyAgICAgICAgICAgIG5ldyA9IE1hZ2ljTW9jayhwYXJlbnQ9cGFyZW50LCBuYW1lPWVudHJ5LCBfbmV3X25hbWU9ZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ld19wYXJlbnQ9cGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKQorICAgICAgICAgICAgbW9jay5fbW9ja19jaGlsZHJlbltlbnRyeV0gPSBuZXcKICAgICAgICAgICAgIF9jaGVja19zaWduYXR1cmUob3JpZ2luYWwsIG5ldywgc2tpcGZpcnN0PXNraXBmaXJzdCkKIAogICAgICAgICAjIHNvIGZ1bmN0aW9ucyBjcmVhdGVkIHdpdGggX3NldF9zaWduYXR1cmUgYmVjb21lIGluc3RhbmNlIGF0dHJpYnV0ZXMsCkBAIC0yMTEzLDYgKzIxODUsMTAgQEAKIAogCiBkZWYgX211c3Rfc2tpcChzcGVjLCBlbnRyeSwgaXNfdHlwZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHdoZXRoZXIgd2Ugc2hvdWxkIHNraXAgdGhlIGZpcnN0IGFyZ3VtZW50IG9uIHNwZWMncyBgZW50cnlgCisgICAgYXR0cmlidXRlLgorICAgICIiIgogICAgIGlmIG5vdCBpc2luc3RhbmNlKHNwZWMsIHR5cGUpOgogICAgICAgICBpZiBlbnRyeSBpbiBnZXRhdHRyKHNwZWMsICdfX2RpY3RfXycsIHt9KToKICAgICAgICAgICAgICMgaW5zdGFuY2UgYXR0cmlidXRlIC0gc2hvdWxkbid0IHNraXAKQEAgLTIxMjUsNyArMjIwMSwxMiBAQAogICAgICAgICAgICAgY29udGludWUKICAgICAgICAgaWYgaXNpbnN0YW5jZShyZXN1bHQsIChzdGF0aWNtZXRob2QsIGNsYXNzbWV0aG9kKSk6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgcmV0dXJuIGlzX3R5cGUKKyAgICAgICAgZWxpZiBpc2luc3RhbmNlKGdldGF0dHIocmVzdWx0LCAnX19nZXRfXycsIE5vbmUpLCBNZXRob2RXcmFwcGVyVHlwZXMpOgorICAgICAgICAgICAgIyBOb3JtYWwgbWV0aG9kID0+IHNraXAgaWYgbG9va2VkIHVwIG9uIHR5cGUKKyAgICAgICAgICAgICMgKGlmIGxvb2tlZCB1cCBvbiBpbnN0YW5jZSwgc2VsZiBpcyBhbHJlYWR5IHNraXBwZWQpCisgICAgICAgICAgICByZXR1cm4gaXNfdHlwZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAKICAgICAjIHNob3VsZG4ndCBnZXQgaGVyZSB1bmxlc3MgZnVuY3Rpb24gaXMgYSBkeW5hbWljYWxseSBwcm92aWRlZCBhdHRyaWJ1dGUKICAgICAjIFhYWFggdW50ZXN0ZWQgYmVoYXZpb3VyCkBAIC0yMTU5LDkgKzIyNDAsMzMgQEAKICAgICB0eXBlKEFOWS5fX2VxX18pLAogKQogCitNZXRob2RXcmFwcGVyVHlwZXMgPSAoCisgICAgdHlwZShBTlkuX19lcV9fLl9fZ2V0X18pLAorKQorCiAKIGZpbGVfc3BlYyA9IE5vbmUKIAorZGVmIF9pdGVyYXRlX3JlYWRfZGF0YShyZWFkX2RhdGEpOgorICAgICMgSGVscGVyIGZvciBtb2NrX29wZW46CisgICAgIyBSZXRyaWV2ZSBsaW5lcyBmcm9tIHJlYWRfZGF0YSB2aWEgYSBnZW5lcmF0b3Igc28gdGhhdCBzZXBhcmF0ZSBjYWxscyB0bworICAgICMgcmVhZGxpbmUsIHJlYWQsIGFuZCByZWFkbGluZXMgYXJlIHByb3Blcmx5IGludGVybGVhdmVkCisgICAgc2VwID0gYidcbicgaWYgaXNpbnN0YW5jZShyZWFkX2RhdGEsIGJ5dGVzKSBlbHNlICdcbicKKyAgICBkYXRhX2FzX2xpc3QgPSBbbCArIHNlcCBmb3IgbCBpbiByZWFkX2RhdGEuc3BsaXQoc2VwKV0KKworICAgIGlmIGRhdGFfYXNfbGlzdFstMV0gPT0gc2VwOgorICAgICAgICAjIElmIHRoZSBsYXN0IGxpbmUgZW5kZWQgaW4gYSBuZXdsaW5lLCB0aGUgbGlzdCBjb21wcmVoZW5zaW9uIHdpbGwgaGF2ZSBhbgorICAgICAgICAjIGV4dHJhIGVudHJ5IHRoYXQncyBqdXN0IGEgbmV3bGluZS4gIFJlbW92ZSB0aGlzLgorICAgICAgICBkYXRhX2FzX2xpc3QgPSBkYXRhX2FzX2xpc3RbOi0xXQorICAgIGVsc2U6CisgICAgICAgICMgSWYgdGhlcmUgd2Fzbid0IGFuIGV4dHJhIG5ld2xpbmUgYnkgaXRzZWxmLCB0aGVuIHRoZSBmaWxlIGJlaW5nCisgICAgICAgICMgZW11bGF0ZWQgZG9lc24ndCBoYXZlIGEgbmV3bGluZSB0byBlbmQgdGhlIGxhc3QgbGluZSAgcmVtb3ZlIHRoZQorICAgICAgICAjIG5ld2xpbmUgdGhhdCBvdXIgbmFpdmUgZm9ybWF0KCkgYWRkZWQKKyAgICAgICAgZGF0YV9hc19saXN0Wy0xXSA9IGRhdGFfYXNfbGlzdFstMV1bOi0xXQorCisgICAgZm9yIGxpbmUgaW4gZGF0YV9hc19saXN0OgorICAgICAgICB5aWVsZCBsaW5lCisKIAogZGVmIG1vY2tfb3Blbihtb2NrPU5vbmUsIHJlYWRfZGF0YT0nJyk6CiAgICAgIiIiCkBAIC0yMTcyLDkgKzIyNzcsMjcgQEAKICAgICBkZWZhdWx0KSB0aGVuIGEgYE1hZ2ljTW9ja2Agd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UsIHdpdGggdGhlIEFQSSBsaW1pdGVkCiAgICAgdG8gbWV0aG9kcyBvciBhdHRyaWJ1dGVzIGF2YWlsYWJsZSBvbiBzdGFuZGFyZCBmaWxlIGhhbmRsZXMuCiAKLSAgICBgcmVhZF9kYXRhYCBpcyBhIHN0cmluZyBmb3IgdGhlIGByZWFkYCBtZXRob2Qgb2YgdGhlIGZpbGUgaGFuZGxlIHRvIHJldHVybi4KLSAgICBUaGlzIGlzIGFuIGVtcHR5IHN0cmluZyBieSBkZWZhdWx0LgorICAgIGByZWFkX2RhdGFgIGlzIGEgc3RyaW5nIGZvciB0aGUgYHJlYWRgIG1ldGhvZGRsaW5lYCwgYW5kIGByZWFkbGluZXNgIG9mIHRoZQorICAgIGZpbGUgaGFuZGxlIHRvIHJldHVybi4gIFRoaXMgaXMgYW4gZW1wdHkgc3RyaW5nIGJ5IGRlZmF1bHQuCiAgICAgIiIiCisgICAgZGVmIF9yZWFkbGluZXNfc2lkZV9lZmZlY3QoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gaGFuZGxlLnJlYWRsaW5lcy5yZXR1cm5fdmFsdWUKKyAgICAgICAgcmV0dXJuIGxpc3QoX3N0YXRlWzBdKQorCisgICAgZGVmIF9yZWFkX3NpZGVfZWZmZWN0KCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIGlmIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHJldHVybiBoYW5kbGUucmVhZC5yZXR1cm5fdmFsdWUKKyAgICAgICAgcmV0dXJuIHR5cGUocmVhZF9kYXRhKSgpLmpvaW4oX3N0YXRlWzBdKQorCisgICAgZGVmIF9yZWFkbGluZV9zaWRlX2VmZmVjdCgpOgorICAgICAgICBpZiBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICB5aWVsZCBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlCisgICAgICAgIGZvciBsaW5lIGluIF9zdGF0ZVswXToKKyAgICAgICAgICAgIHlpZWxkIGxpbmUKKworCiAgICAgZ2xvYmFsIGZpbGVfc3BlYwogICAgIGlmIGZpbGVfc3BlYyBpcyBOb25lOgogICAgICAgICBpbXBvcnQgX2lvCkBAIC0yMTg0LDEwICsyMzA3LDI5IEBACiAgICAgICAgIG1vY2sgPSBNYWdpY01vY2sobmFtZT0nb3BlbicsIHNwZWM9b3BlbikKIAogICAgIGhhbmRsZSA9IE1hZ2ljTW9jayhzcGVjPWZpbGVfc3BlYykKLSAgICBoYW5kbGUud3JpdGUucmV0dXJuX3ZhbHVlID0gTm9uZQogICAgIGhhbmRsZS5fX2VudGVyX18ucmV0dXJuX3ZhbHVlID0gaGFuZGxlCi0gICAgaGFuZGxlLnJlYWQucmV0dXJuX3ZhbHVlID0gcmVhZF9kYXRhCiAKKyAgICBfc3RhdGUgPSBbX2l0ZXJhdGVfcmVhZF9kYXRhKHJlYWRfZGF0YSksIE5vbmVdCisKKyAgICBoYW5kbGUud3JpdGUucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSA9IE5vbmUKKyAgICBoYW5kbGUucmVhZGxpbmUucmV0dXJuX3ZhbHVlID0gTm9uZQorICAgIGhhbmRsZS5yZWFkbGluZXMucmV0dXJuX3ZhbHVlID0gTm9uZQorCisgICAgaGFuZGxlLnJlYWQuc2lkZV9lZmZlY3QgPSBfcmVhZF9zaWRlX2VmZmVjdAorICAgIF9zdGF0ZVsxXSA9IF9yZWFkbGluZV9zaWRlX2VmZmVjdCgpCisgICAgaGFuZGxlLnJlYWRsaW5lLnNpZGVfZWZmZWN0ID0gX3N0YXRlWzFdCisgICAgaGFuZGxlLnJlYWRsaW5lcy5zaWRlX2VmZmVjdCA9IF9yZWFkbGluZXNfc2lkZV9lZmZlY3QKKworICAgIGRlZiByZXNldF9kYXRhKCphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIF9zdGF0ZVswXSA9IF9pdGVyYXRlX3JlYWRfZGF0YShyZWFkX2RhdGEpCisgICAgICAgIGlmIGhhbmRsZS5yZWFkbGluZS5zaWRlX2VmZmVjdCA9PSBfc3RhdGVbMV06CisgICAgICAgICAgICAjIE9ubHkgcmVzZXQgdGhlIHNpZGUgZWZmZWN0IGlmIHRoZSB1c2VyIGhhc24ndCBvdmVycmlkZGVuIGl0LgorICAgICAgICAgICAgX3N0YXRlWzFdID0gX3JlYWRsaW5lX3NpZGVfZWZmZWN0KCkKKyAgICAgICAgICAgIGhhbmRsZS5yZWFkbGluZS5zaWRlX2VmZmVjdCA9IF9zdGF0ZVsxXQorICAgICAgICByZXR1cm4gREVGQVVMVAorCisgICAgbW9jay5zaWRlX2VmZmVjdCA9IHJlc2V0X2RhdGEKICAgICBtb2NrLnJldHVybl92YWx1ZSA9IGhhbmRsZQogICAgIHJldHVybiBtb2NrCiAKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9yZXN1bHQucHkgYi9MaWIvdW5pdHRlc3QvcmVzdWx0LnB5CmluZGV4IDk3ZTU0MjYuLjhlMGE2NDMgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC9yZXN1bHQucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Jlc3VsdC5weQpAQCAtMTIxLDYgKzEyMSwyMyBAQAogICAgICAgICBzZWxmLmZhaWx1cmVzLmFwcGVuZCgodGVzdCwgc2VsZi5fZXhjX2luZm9fdG9fc3RyaW5nKGVyciwgdGVzdCkpKQogICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCiAKKyAgICBkZWYgYWRkU3ViVGVzdChzZWxmLCB0ZXN0LCBzdWJ0ZXN0LCBlcnIpOgorICAgICAgICAiIiJDYWxsZWQgYXQgdGhlIGVuZCBvZiBhIHN1YnRlc3QuCisgICAgICAgICdlcnInIGlzIE5vbmUgaWYgdGhlIHN1YnRlc3QgZW5kZWQgc3VjY2Vzc2Z1bGx5LCBvdGhlcndpc2UgaXQncyBhCisgICAgICAgIHR1cGxlIG9mIHZhbHVlcyBhcyByZXR1cm5lZCBieSBzeXMuZXhjX2luZm8oKS4KKyAgICAgICAgIiIiCisgICAgICAgICMgQnkgZGVmYXVsdCwgd2UgZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBzdWNjZXNzZnVsIHN1YnRlc3RzLCBidXQKKyAgICAgICAgIyBtb3JlIHNvcGhpc3RpY2F0ZWQgdGVzdCByZXN1bHRzIG1pZ2h0IHdhbnQgdG8gcmVjb3JkIHRoZW0uCisgICAgICAgIGlmIGVyciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIGdldGF0dHIoc2VsZiwgJ2ZhaWxmYXN0JywgRmFsc2UpOgorICAgICAgICAgICAgICAgIHNlbGYuc3RvcCgpCisgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGVyclswXSwgdGVzdC5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICBlcnJvcnMgPSBzZWxmLmZhaWx1cmVzCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGVycm9ycyA9IHNlbGYuZXJyb3JzCisgICAgICAgICAgICBlcnJvcnMuYXBwZW5kKChzdWJ0ZXN0LCBzZWxmLl9leGNfaW5mb190b19zdHJpbmcoZXJyLCB0ZXN0KSkpCisgICAgICAgICAgICBzZWxmLl9taXJyb3JPdXRwdXQgPSBUcnVlCisKICAgICBkZWYgYWRkU3VjY2VzcyhzZWxmLCB0ZXN0KToKICAgICAgICAgIkNhbGxlZCB3aGVuIGEgdGVzdCBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSIKICAgICAgICAgcGFzcwpAQCAtMTQwLDExICsxNTcsMTYgQEAKICAgICAgICAgc2VsZi51bmV4cGVjdGVkU3VjY2Vzc2VzLmFwcGVuZCh0ZXN0KQogCiAgICAgZGVmIHdhc1N1Y2Nlc3NmdWwoc2VsZik6Ci0gICAgICAgICJUZWxscyB3aGV0aGVyIG9yIG5vdCB0aGlzIHJlc3VsdCB3YXMgYSBzdWNjZXNzIgotICAgICAgICByZXR1cm4gbGVuKHNlbGYuZmFpbHVyZXMpID09IGxlbihzZWxmLmVycm9ycykgPT0gMAorICAgICAgICAiIiJUZWxscyB3aGV0aGVyIG9yIG5vdCB0aGlzIHJlc3VsdCB3YXMgYSBzdWNjZXNzLiIiIgorICAgICAgICAjIFRoZSBoYXNhdHRyIGNoZWNrIGlzIGZvciB0ZXN0X3Jlc3VsdCdzIE9sZFJlc3VsdCB0ZXN0LiAgVGhhdAorICAgICAgICAjIHdheSB0aGlzIG1ldGhvZCB3b3JrcyBvbiBvYmplY3RzIHRoYXQgbGFjayB0aGUgYXR0cmlidXRlLgorICAgICAgICAjICh3aGVyZSB3b3VsZCBzdWNoIHJlc3VsdCBpbnRhbmNlcyBjb21lIGZyb20/IG9sZCBzdG9yZWQgcGlja2xlcz8pCisgICAgICAgIHJldHVybiAoKGxlbihzZWxmLmZhaWx1cmVzKSA9PSBsZW4oc2VsZi5lcnJvcnMpID09IDApIGFuZAorICAgICAgICAgICAgICAgIChub3QgaGFzYXR0cihzZWxmLCAndW5leHBlY3RlZFN1Y2Nlc3NlcycpIG9yCisgICAgICAgICAgICAgICAgIGxlbihzZWxmLnVuZXhwZWN0ZWRTdWNjZXNzZXMpID09IDApKQogCiAgICAgZGVmIHN0b3Aoc2VsZik6Ci0gICAgICAgICJJbmRpY2F0ZXMgdGhhdCB0aGUgdGVzdHMgc2hvdWxkIGJlIGFib3J0ZWQiCisgICAgICAgICIiIkluZGljYXRlcyB0aGF0IHRoZSB0ZXN0cyBzaG91bGQgYmUgYWJvcnRlZC4iIiIKICAgICAgICAgc2VsZi5zaG91bGRTdG9wID0gVHJ1ZQogCiAgICAgZGVmIF9leGNfaW5mb190b19zdHJpbmcoc2VsZiwgZXJyLCB0ZXN0KToKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC9zdWl0ZS5weSBiL0xpYi91bml0dGVzdC9zdWl0ZS5weQppbmRleCBjZGU1ZDM4Li43NmM0NzI1IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3Qvc3VpdGUucHkKKysrIGIvTGliL3VuaXR0ZXN0L3N1aXRlLnB5CkBAIC0xNiw4ICsxNiwxMSBAQAogY2xhc3MgQmFzZVRlc3RTdWl0ZShvYmplY3QpOgogICAgICIiIkEgc2ltcGxlIHRlc3Qgc3VpdGUgdGhhdCBkb2Vzbid0IHByb3ZpZGUgY2xhc3Mgb3IgbW9kdWxlIHNoYXJlZCBmaXh0dXJlcy4KICAgICAiIiIKKyAgICBfY2xlYW51cCA9IFRydWUKKwogICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0ZXN0cz0oKSk6CiAgICAgICAgIHNlbGYuX3Rlc3RzID0gW10KKyAgICAgICAgc2VsZi5fcmVtb3ZlZF90ZXN0cyA9IDAKICAgICAgICAgc2VsZi5hZGRUZXN0cyh0ZXN0cykKIAogICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKQEAgLTI4LDE2ICszMSwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIE5vdEltcGxlbWVudGVkCiAgICAgICAgIHJldHVybiBsaXN0KHNlbGYpID09IGxpc3Qob3RoZXIpCiAKLSAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKLSAgICAgICAgcmV0dXJuIG5vdCBzZWxmID09IG90aGVyCi0KICAgICBkZWYgX19pdGVyX18oc2VsZik6CiAgICAgICAgIHJldHVybiBpdGVyKHNlbGYuX3Rlc3RzKQogCiAgICAgZGVmIGNvdW50VGVzdENhc2VzKHNlbGYpOgotICAgICAgICBjYXNlcyA9IDAKKyAgICAgICAgY2FzZXMgPSBzZWxmLl9yZW1vdmVkX3Rlc3RzCiAgICAgICAgIGZvciB0ZXN0IGluIHNlbGY6Ci0gICAgICAgICAgICBjYXNlcyArPSB0ZXN0LmNvdW50VGVzdENhc2VzKCkKKyAgICAgICAgICAgIGlmIHRlc3Q6CisgICAgICAgICAgICAgICAgY2FzZXMgKz0gdGVzdC5jb3VudFRlc3RDYXNlcygpCiAgICAgICAgIHJldHVybiBjYXNlcwogCiAgICAgZGVmIGFkZFRlc3Qoc2VsZiwgdGVzdCk6CkBAIC01NywxMiArNTgsMjggQEAKICAgICAgICAgICAgIHNlbGYuYWRkVGVzdCh0ZXN0KQogCiAgICAgZGVmIHJ1bihzZWxmLCByZXN1bHQpOgotICAgICAgICBmb3IgdGVzdCBpbiBzZWxmOgorICAgICAgICBmb3IgaW5kZXgsIHRlc3QgaW4gZW51bWVyYXRlKHNlbGYpOgogICAgICAgICAgICAgaWYgcmVzdWx0LnNob3VsZFN0b3A6CiAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgIHRlc3QocmVzdWx0KQorICAgICAgICAgICAgaWYgc2VsZi5fY2xlYW51cDoKKyAgICAgICAgICAgICAgICBzZWxmLl9yZW1vdmVUZXN0QXRJbmRleChpbmRleCkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCisgICAgZGVmIF9yZW1vdmVUZXN0QXRJbmRleChzZWxmLCBpbmRleCk6CisgICAgICAgICIiIlN0b3AgaG9sZGluZyBhIHJlZmVyZW5jZSB0byB0aGUgVGVzdENhc2UgYXQgaW5kZXguIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHRlc3QgPSBzZWxmLl90ZXN0c1tpbmRleF0KKyAgICAgICAgZXhjZXB0IFR5cGVFcnJvcjoKKyAgICAgICAgICAgICMgc3VwcG9ydCBmb3Igc3VpdGUgaW1wbGVtZW50YXRpb25zIHRoYXQgaGF2ZSBvdmVycmlkZW4gc2VsZi5fdGVzdHMKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgU29tZSB1bml0dGVzdCB0ZXN0cyBhZGQgbm9uIFRlc3RDYXNlL1Rlc3RTdWl0ZSBvYmplY3RzIHRvCisgICAgICAgICAgICAjIHRoZSBzdWl0ZS4KKyAgICAgICAgICAgIGlmIGhhc2F0dHIodGVzdCwgJ2NvdW50VGVzdENhc2VzJyk6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlZF90ZXN0cyArPSB0ZXN0LmNvdW50VGVzdENhc2VzKCkKKyAgICAgICAgICAgIHNlbGYuX3Rlc3RzW2luZGV4XSA9IE5vbmUKKwogICAgIGRlZiBfX2NhbGxfXyhzZWxmLCAqYXJncywgKiprd2RzKToKICAgICAgICAgcmV0dXJuIHNlbGYucnVuKCphcmdzLCAqKmt3ZHMpCiAKQEAgLTg3LDcgKzEwNCw3IEBACiAgICAgICAgIGlmIGdldGF0dHIocmVzdWx0LCAnX3Rlc3RSdW5FbnRlcmVkJywgRmFsc2UpIGlzIEZhbHNlOgogICAgICAgICAgICAgcmVzdWx0Ll90ZXN0UnVuRW50ZXJlZCA9IHRvcExldmVsID0gVHJ1ZQogCi0gICAgICAgIGZvciB0ZXN0IGluIHNlbGY6CisgICAgICAgIGZvciBpbmRleCwgdGVzdCBpbiBlbnVtZXJhdGUoc2VsZik6CiAgICAgICAgICAgICBpZiByZXN1bHQuc2hvdWxkU3RvcDoKICAgICAgICAgICAgICAgICBicmVhawogCkBAIC0xMDYsNiArMTIzLDkgQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgdGVzdC5kZWJ1ZygpCiAKKyAgICAgICAgICAgIGlmIHNlbGYuX2NsZWFudXA6CisgICAgICAgICAgICAgICAgc2VsZi5fcmVtb3ZlVGVzdEF0SW5kZXgoaW5kZXgpCisKICAgICAgICAgaWYgdG9wTGV2ZWw6CiAgICAgICAgICAgICBzZWxmLl90ZWFyRG93blByZXZpb3VzQ2xhc3MoTm9uZSwgcmVzdWx0KQogICAgICAgICAgICAgc2VsZi5faGFuZGxlTW9kdWxlVGVhckRvd24ocmVzdWx0KQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC9fX21haW5fXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGQwNTkxCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvX19tYWluX18ucHkKQEAgLTAsMCArMSwxOCBAQAoraW1wb3J0IG9zCitpbXBvcnQgdW5pdHRlc3QKKworCitkZWYgbG9hZF90ZXN0cyhsb2FkZXIsIHN0YW5kYXJkX3Rlc3RzLCBwYXR0ZXJuKToKKyAgICAjIHRvcCBsZXZlbCBkaXJlY3RvcnkgY2FjaGVkIG9uIGxvYWRlciBpbnN0YW5jZQorICAgIHRoaXNfZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQorICAgIHBhdHRlcm4gPSBwYXR0ZXJuIG9yICJ0ZXN0XyoucHkiCisgICAgIyBXZSBhcmUgaW5zaWRlIHVuaXR0ZXN0LnRlc3QsIHNvIHRoZSB0b3AtbGV2ZWwgaXMgdHdvIG5vdGNoZXMgdXAKKyAgICB0b3BfbGV2ZWxfZGlyID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSh0aGlzX2RpcikpCisgICAgcGFja2FnZV90ZXN0cyA9IGxvYWRlci5kaXNjb3ZlcihzdGFydF9kaXI9dGhpc19kaXIsIHBhdHRlcm49cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcF9sZXZlbF9kaXI9dG9wX2xldmVsX2RpcikKKyAgICBzdGFuZGFyZF90ZXN0cy5hZGRUZXN0cyhwYWNrYWdlX3Rlc3RzKQorICAgIHJldHVybiBzdGFuZGFyZF90ZXN0cworCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3Qvc3VwcG9ydC5weQppbmRleCBkYmU0ZGRjLi4wMmU4ZjNhIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC9zdXBwb3J0LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3N1cHBvcnQucHkKQEAgLTQxLDcgKzQxLDcgQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIlByb2JsZW0gaGFzaGluZyAlcyBhbmQgJXM6ICVzIiAlIChvYmpfMSwgb2JqXzIsIGUpKQogCiAKLWNsYXNzIExvZ2dpbmdSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CitjbGFzcyBfQmFzZUxvZ2dpbmdSZXN1bHQodW5pdHRlc3QuVGVzdFJlc3VsdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxvZyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cyA9IGxvZwogICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKQEAgLTUyLDcgKzUyLDcgQEAKIAogICAgIGRlZiBzdGFydFRlc3RSdW4oc2VsZik6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ3N0YXJ0VGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0YXJ0VGVzdFJ1bigpCisgICAgICAgIHN1cGVyKCkuc3RhcnRUZXN0UnVuKCkKIAogICAgIGRlZiBzdG9wVGVzdChzZWxmLCB0ZXN0KToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnc3RvcFRlc3QnKQpAQCAtNjAsNyArNjAsNyBAQAogCiAgICAgZGVmIHN0b3BUZXN0UnVuKHNlbGYpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdzdG9wVGVzdFJ1bicpCi0gICAgICAgIHN1cGVyKExvZ2dpbmdSZXN1bHQsIHNlbGYpLnN0b3BUZXN0UnVuKCkKKyAgICAgICAgc3VwZXIoKS5zdG9wVGVzdFJ1bigpCiAKICAgICBkZWYgYWRkRmFpbHVyZShzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZEZhaWx1cmUnKQpAQCAtNjgsNyArNjgsNyBAQAogCiAgICAgZGVmIGFkZFN1Y2Nlc3Moc2VsZiwgKmFyZ3MpOgogICAgICAgICBzZWxmLl9ldmVudHMuYXBwZW5kKCdhZGRTdWNjZXNzJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkU3VjY2VzcygqYXJncykKKyAgICAgICAgc3VwZXIoKS5hZGRTdWNjZXNzKCphcmdzKQogCiAgICAgZGVmIGFkZEVycm9yKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRXJyb3InKQpAQCAtNzYsMTUgKzc2LDM5IEBACiAKICAgICBkZWYgYWRkU2tpcChzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFNraXAnKQotICAgICAgICBzdXBlcihMb2dnaW5nUmVzdWx0LCBzZWxmKS5hZGRTa2lwKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZFNraXAoKmFyZ3MpCiAKICAgICBkZWYgYWRkRXhwZWN0ZWRGYWlsdXJlKHNlbGYsICphcmdzKToKICAgICAgICAgc2VsZi5fZXZlbnRzLmFwcGVuZCgnYWRkRXhwZWN0ZWRGYWlsdXJlJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkRXhwZWN0ZWRGYWlsdXJlKCphcmdzKQorICAgICAgICBzdXBlcigpLmFkZEV4cGVjdGVkRmFpbHVyZSgqYXJncykKIAogICAgIGRlZiBhZGRVbmV4cGVjdGVkU3VjY2VzcyhzZWxmLCAqYXJncyk6CiAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFVuZXhwZWN0ZWRTdWNjZXNzJykKLSAgICAgICAgc3VwZXIoTG9nZ2luZ1Jlc3VsdCwgc2VsZikuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisgICAgICAgIHN1cGVyKCkuYWRkVW5leHBlY3RlZFN1Y2Nlc3MoKmFyZ3MpCisKKworY2xhc3MgTGVnYWN5TG9nZ2luZ1Jlc3VsdChfQmFzZUxvZ2dpbmdSZXN1bHQpOgorICAgICIiIgorICAgIEEgbGVnYWN5IFRlc3RSZXN1bHQgaW1wbGVtZW50YXRpb24sIHdpdGhvdXQgYW4gYWRkU3ViVGVzdCBtZXRob2QsCisgICAgd2hpY2ggcmVjb3JkcyBpdHMgbWV0aG9kIGNhbGxzLgorICAgICIiIgorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFkZFN1YlRlc3Qoc2VsZik6CisgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yCisKKworY2xhc3MgTG9nZ2luZ1Jlc3VsdChfQmFzZUxvZ2dpbmdSZXN1bHQpOgorICAgICIiIgorICAgIEEgVGVzdFJlc3VsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCByZWNvcmRzIGl0cyBtZXRob2QgY2FsbHMuCisgICAgIiIiCisKKyAgICBkZWYgYWRkU3ViVGVzdChzZWxmLCB0ZXN0LCBzdWJ0ZXN0LCBlcnIpOgorICAgICAgICBpZiBlcnIgaXMgTm9uZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1YlRlc3RTdWNjZXNzJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuX2V2ZW50cy5hcHBlbmQoJ2FkZFN1YlRlc3RGYWlsdXJlJykKKyAgICAgICAgc3VwZXIoKS5hZGRTdWJUZXN0KHRlc3QsIHN1YnRlc3QsIGVycikKIAogCiBjbGFzcyBSZXN1bHRXaXRoTm9TdGFydFRlc3RSdW5TdG9wVGVzdFJ1bihvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9hc3NlcnRpb25zLnB5CmluZGV4IDc5MzFjYWQuLmMzNDlhOTUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYXNzZXJ0aW9ucy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Fzc2VydGlvbnMucHkKQEAgLTEsNSArMSw2IEBACiBpbXBvcnQgZGF0ZXRpbWUKIGltcG9ydCB3YXJuaW5ncworaW1wb3J0IHdlYWtyZWYKIGltcG9ydCB1bml0dGVzdAogZnJvbSBpdGVydG9vbHMgaW1wb3J0IHByb2R1Y3QKIApAQCAtOTcsNiArOTgsMzYgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuZmFpbCgiYXNzZXJ0UmFpc2VzKCkgZGlkbid0IGxldCBleGNlcHRpb24gcGFzcyB0aHJvdWdoIikKIAorICAgIGRlZiB0ZXN0X2Fzc2VydFJhaXNlc19mcmFtZXNfc3Vydml2YWwoc2VsZik6CisgICAgICAgICMgSXNzdWUgIzk4MTU6IGFzc2VydFJhaXNlcyBzaG91bGQgYXZvaWQga2VlcGluZyBsb2NhbCB2YXJpYWJsZXMKKyAgICAgICAgIyBpbiBhIHRyYWNlYmFjayBhbGl2ZS4KKyAgICAgICAgY2xhc3MgQToKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgd3IgPSBOb25lCisKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgICAgICAgICAgZGVmIGZvbyhzZWxmKToKKyAgICAgICAgICAgICAgICBub25sb2NhbCB3cgorICAgICAgICAgICAgICAgIGEgPSBBKCkKKyAgICAgICAgICAgICAgICB3ciA9IHdlYWtyZWYucmVmKGEpCisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBJT0Vycm9yCisgICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IKKworICAgICAgICAgICAgZGVmIHRlc3RfZnVuY3Rpb25hbChzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBzZWxmLmZvbykKKworICAgICAgICAgICAgZGVmIHRlc3Rfd2l0aChzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZvbygpCisKKyAgICAgICAgRm9vKCJ0ZXN0X2Z1bmN0aW9uYWwiKS5ydW4oKQorICAgICAgICBzZWxmLmFzc2VydElzTm9uZSh3cigpKQorICAgICAgICBGb28oInRlc3Rfd2l0aCIpLnJ1bigpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHdyKCkpCisKICAgICBkZWYgdGVzdEFzc2VydE5vdFJlZ2V4KHNlbGYpOgogICAgICAgICBzZWxmLmFzc2VydE5vdFJlZ2V4KCdBbGEgbWEga290YScsIHIncisnKQogICAgICAgICB0cnk6CkBAIC0zNjEsMyArMzkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsnXiJyZWdleCIgZG9lcyBub3QgbWF0Y2ggImZvbyIkJywgJ15vb3BzJCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14icmVnZXgiIGRvZXMgbm90IG1hdGNoICJmb28iJCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ14icmVnZXgiIGRvZXMgbm90IG1hdGNoICJmb28iIDogb29wcyQnXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfYnJlYWsucHkKaW5kZXggNzU1MzJmNC4uMGJmMWEyMiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9icmVhay5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2JyZWFrLnB5CkBAIC0yODIsMyArMjgyLDcgQEAKICAgICAiaWYgdGhyZWFkcyBoYXZlIGJlZW4gdXNlZCIpCiBjbGFzcyBUZXN0QnJlYWtTaWduYWxEZWZhdWx0KFRlc3RCcmVhayk6CiAgICAgaW50X2hhbmRsZXIgPSBzaWduYWwuU0lHX0RGTAorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Nhc2UucHkKaW5kZXggYjhjYjBjNy4uMzIxZDY3YSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9jYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfY2FzZS5weQpAQCAtMSw4ICsxLDEwIEBACitpbXBvcnQgY29udGV4dGxpYgogaW1wb3J0IGRpZmZsaWIKIGltcG9ydCBwcHJpbnQKIGltcG9ydCBwaWNrbGUKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCB3YXJuaW5ncwogaW1wb3J0IHdlYWtyZWYKIGltcG9ydCBpbnNwZWN0CkBAIC0xMiwxMCArMTQsMTYgQEAKIAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gLnN1cHBvcnQgaW1wb3J0ICgKLSAgICBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nLCBMb2dnaW5nUmVzdWx0LAorZnJvbSB1bml0dGVzdC50ZXN0LnN1cHBvcnQgaW1wb3J0ICgKKyAgICBUZXN0RXF1YWxpdHksIFRlc3RIYXNoaW5nLCBMb2dnaW5nUmVzdWx0LCBMZWdhY3lMb2dnaW5nUmVzdWx0LAogICAgIFJlc3VsdFdpdGhOb1N0YXJ0VGVzdFJ1blN0b3BUZXN0UnVuCiApCitmcm9tIHRlc3Quc3VwcG9ydCBpbXBvcnQgY2FwdHVyZWRfc3RkZXJyCisKKworbG9nX2ZvbyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28nKQorbG9nX2Zvb2JhciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCdmb28uYmFyJykKK2xvZ19xdXV4ID0gbG9nZ2luZy5nZXRMb2dnZXIoJ3F1dXgnKQogCiAKIGNsYXNzIFRlc3Qob2JqZWN0KToKQEAgLTI5Nyw2ICszMDUsMTI2IEBACiAKICAgICAgICAgRm9vKCd0ZXN0JykucnVuKCkKIAorICAgIGRlZiBfY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHMoc2VsZiwgcmVzdWx0LCBldmVudHMsIGV4cGVjdGVkX2V2ZW50cyk6CisgICAgICAgIGNsYXNzIEZvbyhUZXN0LkxvZ2dpbmdUZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdChzZWxmKToKKyAgICAgICAgICAgICAgICBzdXBlcihGb28sIHNlbGYpLnRlc3QoKQorICAgICAgICAgICAgICAgIGZvciBpIGluIFsxLCAyLCAzXToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoaT1pKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gWzIsIDNdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGo9aik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGkgKiBqID09IDY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ3JhaXNlZCBieSBGb28udGVzdCcpCisgICAgICAgICAgICAgICAgMSAvIDAKKworICAgICAgICAjIE9yZGVyIGlzIHRoZSBmb2xsb3dpbmc6CisgICAgICAgICMgaT0xID0+IHN1YnRlc3QgZmFpbHVyZQorICAgICAgICAjIGk9Miwgaj0yID0+IHN1YnRlc3Qgc3VjY2VzcworICAgICAgICAjIGk9Miwgaj0zID0+IHN1YnRlc3QgZXJyb3IKKyAgICAgICAgIyBpPTMsIGo9MiA9PiBzdWJ0ZXN0IGVycm9yCisgICAgICAgICMgaT0zLCBqPTMgPT4gc3VidGVzdCBzdWNjZXNzCisgICAgICAgICMgdG9wbGV2ZWwgPT4gZXJyb3IKKyAgICAgICAgRm9vKGV2ZW50cykucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIGV4cGVjdGVkX2V2ZW50cykKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIGV4cGVjdGVkID0gWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93bicsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0RmFpbHVyZScsICdhZGRTdWJUZXN0U3VjY2VzcycsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0RmFpbHVyZScsICdhZGRTdWJUZXN0RmFpbHVyZScsCisgICAgICAgICAgICAgICAgICAgICdhZGRTdWJUZXN0U3VjY2VzcycsICdhZGRFcnJvcicsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19sZWdhY3koc2VsZik6CisgICAgICAgICMgV2l0aCBhIGxlZ2FjeSByZXN1bHQgb2JqZWN0ICh3aXRob3V0IGEgYWRkU3ViVGVzdCBtZXRob2QpLAorICAgICAgICAjIHRleHQgZXhlY3V0aW9uIHN0b3BzIGFmdGVyIHRoZSBmaXJzdCBzdWJ0ZXN0IGZhaWx1cmUuCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExlZ2FjeUxvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkRmFpbHVyZScsICdzdG9wVGVzdCddCisgICAgICAgIHNlbGYuX2NoZWNrX2NhbGxfb3JkZXJfX3N1YnRlc3RzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiBfY2hlY2tfY2FsbF9vcmRlcl9fc3VidGVzdHNfc3VjY2VzcyhzZWxmLCByZXN1bHQsIGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKToKKyAgICAgICAgY2xhc3MgRm9vKFRlc3QuTG9nZ2luZ1Rlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0KHNlbGYpOgorICAgICAgICAgICAgICAgIHN1cGVyKEZvbywgc2VsZikudGVzdCgpCisgICAgICAgICAgICAgICAgZm9yIGkgaW4gWzEsIDJdOgorICAgICAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPWkpOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGogaW4gWzIsIDNdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGo9aik6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWRfZXZlbnRzKQorCisgICAgZGVmIHRlc3RfcnVuX2NhbGxfb3JkZXJfX3N1YnRlc3RzX3N1Y2Nlc3Moc2VsZik6CisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICAjIFRoZSA2IHN1YnRlc3Qgc3VjY2Vzc2VzIGFyZSBpbmRpdmlkdWFsbHkgcmVjb3JkZWQsIGluIGFkZGl0aW9uCisgICAgICAgICMgdG8gdGhlIHdob2xlIHRlc3Qgc3VjY2Vzcy4KKyAgICAgICAgZXhwZWN0ZWQgPSAoWydzdGFydFRlc3QnLCAnc2V0VXAnLCAndGVzdCcsICd0ZWFyRG93biddCisgICAgICAgICAgICAgICAgICAgICsgNiAqIFsnYWRkU3ViVGVzdFN1Y2Nlc3MnXQorICAgICAgICAgICAgICAgICAgICArIFsnYWRkU3VjY2VzcycsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzX2xlZ2FjeShzZWxmKToKKyAgICAgICAgIyBXaXRoIGEgbGVnYWN5IHJlc3VsdCwgb25seSB0aGUgd2hvbGUgdGVzdCBzdWNjZXNzIGlzIHJlY29yZGVkLgorICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMZWdhY3lMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgZXhwZWN0ZWQgPSBbJ3N0YXJ0VGVzdCcsICdzZXRVcCcsICd0ZXN0JywgJ3RlYXJEb3duJywKKyAgICAgICAgICAgICAgICAgICAgJ2FkZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXQorICAgICAgICBzZWxmLl9jaGVja19jYWxsX29yZGVyX19zdWJ0ZXN0c19zdWNjZXNzKHJlc3VsdCwgZXZlbnRzLCBleHBlY3RlZCkKKworICAgIGRlZiB0ZXN0X3J1bl9jYWxsX29yZGVyX19zdWJ0ZXN0c19mYWlsZmFzdChzZWxmKToKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHJlc3VsdC5mYWlsZmFzdCA9IFRydWUKKworICAgICAgICBjbGFzcyBGb28oVGVzdC5Mb2dnaW5nVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgICAgICAgICAgc3VwZXIoRm9vLCBzZWxmKS50ZXN0KCkKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChpPTEpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoJ2ZhaWx1cmUnKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGk9Mik6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCdmYWlsdXJlJykKKworICAgICAgICBleHBlY3RlZCA9IFsnc3RhcnRUZXN0JywgJ3NldFVwJywgJ3Rlc3QnLCAndGVhckRvd24nLAorICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdEZhaWx1cmUnLCAnc3RvcFRlc3QnXQorICAgICAgICBGb28oZXZlbnRzKS5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKKyAgICBkZWYgdGVzdF9zdWJ0ZXN0c19mYWlsZmFzdChzZWxmKToKKyAgICAgICAgIyBFbnN1cmUgcHJvcGVyIHRlc3QgZmxvdyB3aXRoIHN1YnRlc3RzIGFuZCBmYWlsZmFzdCAoaXNzdWUgIzIyODk0KQorICAgICAgICBldmVudHMgPSBbXQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9hKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ2ExJykKKyAgICAgICAgICAgICAgICBldmVudHMuYXBwZW5kKCdhMicpCisKKyAgICAgICAgICAgIGRlZiB0ZXN0X2Ioc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoKToKKyAgICAgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnYjEnKQorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgnZmFpbHVyZScpCisgICAgICAgICAgICAgICAgZXZlbnRzLmFwcGVuZCgnYjInKQorCisgICAgICAgICAgICBkZWYgdGVzdF9jKHNlbGYpOgorICAgICAgICAgICAgICAgIGV2ZW50cy5hcHBlbmQoJ2MnKQorCisgICAgICAgIHJlc3VsdCA9IHVuaXR0ZXN0LlRlc3RSZXN1bHQoKQorICAgICAgICByZXN1bHQuZmFpbGZhc3QgPSBUcnVlCisgICAgICAgIHN1aXRlID0gdW5pdHRlc3QubWFrZVN1aXRlKEZvbykKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKworICAgICAgICBleHBlY3RlZCA9IFsnYTEnLCAnYTInLCAnYjEnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywgZXhwZWN0ZWQpCisKICAgICAjICJUaGlzIGNsYXNzIGF0dHJpYnV0ZSBnaXZlcyB0aGUgZXhjZXB0aW9uIHJhaXNlZCBieSB0aGUgdGVzdCgpIG1ldGhvZC4KICAgICAjIElmIGEgdGVzdCBmcmFtZXdvcmsgbmVlZHMgdG8gdXNlIGEgc3BlY2lhbGl6ZWQgZXhjZXB0aW9uLCBwb3NzaWJseSB0bwogICAgICMgY2FycnkgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgaXQgbXVzdCBzdWJjbGFzcyB0aGlzIGV4Y2VwdGlvbiBpbgpAQCAtNzI5LDE4ICs4NTcsMTggQEAKIAogICAgICAgICAjIHNldCBhIGxvd2VyIHRocmVzaG9sZCB2YWx1ZSBhbmQgYWRkIGEgY2xlYW51cCB0byByZXN0b3JlIGl0CiAgICAgICAgIG9sZF90aHJlc2hvbGQgPSBzZWxmLl9kaWZmVGhyZXNob2xkCi0gICAgICAgIHNlbGYuX2RpZmZUaHJlc2hvbGQgPSAyKio4CisgICAgICAgIHNlbGYuX2RpZmZUaHJlc2hvbGQgPSAyKio1CiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChsYW1iZGE6IHNldGF0dHIoc2VsZiwgJ19kaWZmVGhyZXNob2xkJywgb2xkX3RocmVzaG9sZCkpCiAKICAgICAgICAgIyB1bmRlciB0aGUgdGhyZXNob2xkOiBkaWZmIG1hcmtlciAoXikgaW4gZXJyb3IgbWVzc2FnZQotICAgICAgICBzID0gJ3gnICogKDIqKjcpCisgICAgICAgIHMgPSAneCcgKiAoMioqNCkKICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pIGFzIGNtOgogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzICsgJ2EnLCBzICsgJ2InKQogICAgICAgICBzZWxmLmFzc2VydEluKCdeJywgc3RyKGNtLmV4Y2VwdGlvbikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKIAogICAgICAgICAjIG92ZXIgdGhlIHRocmVzaG9sZDogZGlmZiBub3QgdXNlZCBhbmQgbWFya2VyICheKSBub3QgaW4gZXJyb3IgbWVzc2FnZQotICAgICAgICBzID0gJ3gnICogKDIqKjkpCisgICAgICAgIHMgPSAneCcgKiAoMioqNikKICAgICAgICAgIyBpZiB0aGUgcGF0aCB0aGF0IHVzZXMgZGlmZmxpYiBpcyB0YWtlbiwgX3RydW5jYXRlTWVzc2FnZSB3aWxsIGJlCiAgICAgICAgICMgY2FsbGVkIC0tIHJlcGxhY2UgaXQgd2l0aCBleHBsb2RpbmdUcnVuY2F0aW9uIHRvIHZlcmlmeSB0aGF0IHRoaXMKICAgICAgICAgIyBkb2Vzbid0IGhhcHBlbgpAQCAtNzU3LDYgKzg4NSwzNSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAnJXIgIT0gJXInICUgKHMxLCBzMikpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocyArICdhJywgcyArICdhJykKIAorICAgIGRlZiB0ZXN0QXNzZXJ0RXF1YWxfc2hvcnRlbihzZWxmKToKKyAgICAgICAgIyBzZXQgYSBsb3dlciB0aHJlc2hvbGQgdmFsdWUgYW5kIGFkZCBhIGNsZWFudXAgdG8gcmVzdG9yZSBpdAorICAgICAgICBvbGRfdGhyZXNob2xkID0gc2VsZi5fZGlmZlRocmVzaG9sZAorICAgICAgICBzZWxmLl9kaWZmVGhyZXNob2xkID0gMAorICAgICAgICBzZWxmLmFkZENsZWFudXAobGFtYmRhOiBzZXRhdHRyKHNlbGYsICdfZGlmZlRocmVzaG9sZCcsIG9sZF90aHJlc2hvbGQpKQorCisgICAgICAgIHMgPSAneCcgKiAxMDAKKyAgICAgICAgczEsIHMyID0gcyArICdhJywgcyArICdiJworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgYyA9ICd4eHh4WzM1IGNoYXJzXScgKyAneCcgKiA2MQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAiJyVzYScgIT0gJyVzYiciICUgKGMsIGMpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMgKyAnYScsIHMgKyAnYScpCisKKyAgICAgICAgcCA9ICd5JyAqIDUwCisgICAgICAgIHMxLCBzMiA9IHMgKyAnYScgKyBwLCBzICsgJ2InICsgcAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgYyA9ICd4eHh4Wzg1IGNoYXJzXXh4eHh4eHh4eHh4JworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihjbS5leGNlcHRpb24pLCAiJyVzYSVzJyAhPSAnJXNiJXMnIiAlIChjLCBwLCBjLCBwKSkKKworICAgICAgICBwID0gJ3knICogMTAwCisgICAgICAgIHMxLCBzMiA9IHMgKyAnYScgKyBwLCBzICsgJ2InICsgcAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbikgYXMgY206CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHMxLCBzMikKKyAgICAgICAgYyA9ICd4eHh4WzkxIGNoYXJzXXh4eHh4JworICAgICAgICBkID0gJ3knICogNDAgKyAnWzU2IGNoYXJzXXl5eXknCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKGNtLmV4Y2VwdGlvbiksICInJXNhJXMnICE9ICclc2IlcyciICUgKGMsIGQsIGMsIGQpKQorCiAgICAgZGVmIHRlc3RBc3NlcnRDb3VudEVxdWFsKHNlbGYpOgogICAgICAgICBhID0gb2JqZWN0KCkKICAgICAgICAgc2VsZi5hc3NlcnRDb3VudEVxdWFsKFsxLCAyLCAzXSwgWzMsIDIsIDFdKQpAQCAtOTc3LDYgKzExMzQsNDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uLCBzZWxmLmFzc2VydFJlZ2V4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FhYXMnLCByJ2FhYWEnKQogCisgICAgZGVmIHRlc3RBc3NlcnRSYWlzZXNDYWxsYWJsZShzZWxmKToKKyAgICAgICAgY2xhc3MgRXhjZXB0aW9uTW9jayhFeGNlcHRpb24pOgorICAgICAgICAgICAgcGFzcworICAgICAgICBkZWYgU3R1YigpOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uTW9jaygnV2UgZXhwZWN0JykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uTW9jaywgU3R1YikKKyAgICAgICAgIyBBIHR1cGxlIG9mIGV4Y2VwdGlvbiBjbGFzc2VzIGlzIGFjY2VwdGVkCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBFeGNlcHRpb25Nb2NrKSwgU3R1YikKKyAgICAgICAgIyAqYXJncyBhbmQgKiprd2FyZ3MgYWxzbyB3b3JrCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIGludCwgJzE5JywgYmFzZT04KQorICAgICAgICAjIEZhaWx1cmUgd2hlbiBubyBleGNlcHRpb24gaXMgcmFpc2VkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbk1vY2ssIGxhbWJkYTogMCkKKyAgICAgICAgIyBGYWlsdXJlIHdoZW4gYW5vdGhlciBleGNlcHRpb24gaXMgcmFpc2VkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uTW9jayk6CisgICAgICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCBTdHViKQorCisgICAgZGVmIHRlc3RBc3NlcnRSYWlzZXNDb250ZXh0KHNlbGYpOgorICAgICAgICBjbGFzcyBFeGNlcHRpb25Nb2NrKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGRlZiBTdHViKCk6CisgICAgICAgICAgICByYWlzZSBFeGNlcHRpb25Nb2NrKCdXZSBleHBlY3QnKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEV4Y2VwdGlvbk1vY2spOgorICAgICAgICAgICAgU3R1YigpCisgICAgICAgICMgQSB0dXBsZSBvZiBleGNlcHRpb24gY2xhc3NlcyBpcyBhY2NlcHRlZAorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKChWYWx1ZUVycm9yLCBFeGNlcHRpb25Nb2NrKSkgYXMgY206CisgICAgICAgICAgICBTdHViKCkKKyAgICAgICAgIyBUaGUgY29udGV4dCBtYW5hZ2VyIGV4cG9zZXMgY2F1Z2h0IGV4Y2VwdGlvbgorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY20uZXhjZXB0aW9uLCBFeGNlcHRpb25Nb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzWzBdLCAnV2UgZXhwZWN0JykKKyAgICAgICAgIyAqYXJncyBhbmQgKiprd2FyZ3MgYWxzbyB3b3JrCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvcik6CisgICAgICAgICAgICBpbnQoJzE5JywgYmFzZT04KQorICAgICAgICAjIEZhaWx1cmUgd2hlbiBubyBleGNlcHRpb24gaXMgcmFpc2VkCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoRXhjZXB0aW9uTW9jayk6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAjIEZhaWx1cmUgd2hlbiBhbm90aGVyIGV4Y2VwdGlvbiBpcyByYWlzZWQKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhFeGNlcHRpb25Nb2NrKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIFN0dWIpCisKICAgICBkZWYgdGVzdEFzc2VydFJhaXNlc1JlZ2V4KHNlbGYpOgogICAgICAgICBjbGFzcyBFeGNlcHRpb25Nb2NrKEV4Y2VwdGlvbik6CiAgICAgICAgICAgICBwYXNzCkBAIC05OTcsNiArMTE5NSwxOCBAQAogICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgsIEV4Y2VwdGlvbiwgJ3gnLAogICAgICAgICAgICAgICAgIGxhbWJkYTogTm9uZSkKIAorICAgIGRlZiB0ZXN0QXNzZXJ0UmFpc2VzUmVnZXhJbnZhbGlkUmVnZXgoc2VsZik6CisgICAgICAgICMgSXNzdWUgMjAxNDUuCisgICAgICAgIGNsYXNzIE15RXhjKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5hc3NlcnRSYWlzZXNSZWdleCwgTXlFeGMsIGxhbWJkYTogVHJ1ZSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0V2FybnNSZWdleEludmFsaWRSZWdleChzZWxmKToKKyAgICAgICAgIyBJc3N1ZSAyMDE0NS4KKyAgICAgICAgY2xhc3MgTXlXYXJuKFdhcm5pbmcpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHNlbGYuYXNzZXJ0V2FybnNSZWdleCwgTXlXYXJuLCBsYW1iZGE6IFRydWUpCisKICAgICBkZWYgdGVzdEFzc2VydFJhaXNlc1JlZ2V4TWlzbWF0Y2goc2VsZik6CiAgICAgICAgIGRlZiBTdHViKCk6CiAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ1VuZXhwZWN0ZWQnKQpAQCAtMTE1OSw2ICsxMzY5LDk0IEBACiAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFdhcm5zUmVnZXgoUnVudGltZVdhcm5pbmcsICJvKyIpOgogICAgICAgICAgICAgICAgICAgICBfcnVudGltZV93YXJuKCJiYXJ6IikKIAorICAgIEBjb250ZXh0bGliLmNvbnRleHRtYW5hZ2VyCisgICAgZGVmIGFzc2VydE5vU3RkZXJyKHNlbGYpOgorICAgICAgICB3aXRoIGNhcHR1cmVkX3N0ZGVycigpIGFzIGJ1ZjoKKyAgICAgICAgICAgIHlpZWxkCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYnVmLmdldHZhbHVlKCksICIiKQorCisgICAgZGVmIGFzc2VydExvZ1JlY29yZHMoc2VsZiwgcmVjb3JkcywgbWF0Y2hlcyk6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlY29yZHMpLCBsZW4obWF0Y2hlcykpCisgICAgICAgIGZvciByZWMsIG1hdGNoIGluIHppcChyZWNvcmRzLCBtYXRjaGVzKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShyZWMsIGxvZ2dpbmcuTG9nUmVjb3JkKQorICAgICAgICAgICAgZm9yIGssIHYgaW4gbWF0Y2guaXRlbXMoKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocmVjLCBrKSwgdikKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0RlZmF1bHRzKHNlbGYpOgorICAgICAgICAjIGRlZmF1bHRzOiByb290IGxvZ2dlciwgbGV2ZWwgSU5GTworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCkgYXMgY206CisgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKyAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmRlYnVnKCIyIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIklORk86Zm9vOjEiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLCBbeyduYW1lJzogJ2Zvbyd9XSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc1R3b01hdGNoaW5nTWVzc2FnZXMoc2VsZik6CisgICAgICAgICMgU2FtZSwgYnV0IHdpdGggdHdvIG1hdGNoaW5nIGxvZyBtZXNzYWdlcworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCkgYXMgY206CisgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKyAgICAgICAgICAgICAgICBsb2dfZm9vYmFyLmRlYnVnKCIyIikKKyAgICAgICAgICAgICAgICBsb2dfcXV1eC53YXJuaW5nKCIzIikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20ub3V0cHV0LCBbIklORk86Zm9vOjEiLCAiV0FSTklORzpxdXV4OjMiXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbeyduYW1lJzogJ2Zvbyd9LCB7J25hbWUnOiAncXV1eCd9XSkKKworICAgIGRlZiBjaGVja0Fzc2VydExvZ3NQZXJMZXZlbChzZWxmLCBsZXZlbCk6CisgICAgICAgICMgQ2hlY2sgbGV2ZWwgZmlsdGVyaW5nCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobGV2ZWw9bGV2ZWwpIGFzIGNtOgorICAgICAgICAgICAgICAgIGxvZ19mb28ud2FybmluZygiMSIpCisgICAgICAgICAgICAgICAgbG9nX2Zvb2Jhci5lcnJvcigiMiIpCisgICAgICAgICAgICAgICAgbG9nX3F1dXguY3JpdGljYWwoIjMiKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5vdXRwdXQsIFsiRVJST1I6Zm9vLmJhcjoyIiwgIkNSSVRJQ0FMOnF1dXg6MyJdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRMb2dSZWNvcmRzKGNtLnJlY29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt7J25hbWUnOiAnZm9vLmJhcid9LCB7J25hbWUnOiAncXV1eCd9XSkKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc1BlckxldmVsKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxldmVsKGxvZ2dpbmcuRVJST1IpCisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTGV2ZWwoJ0VSUk9SJykKKworICAgIGRlZiBjaGVja0Fzc2VydExvZ3NQZXJMb2dnZXIoc2VsZiwgbG9nZ2VyKToKKyAgICAgICAgIyBDaGVjayBwZXItbG9nZ2VyIGZpbHRlcmluZworICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0Tm9TdGRlcnIoKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxldmVsPSdERUJVRycpIGFzIG91dGVyX2NtOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKGxvZ2dlciwgbGV2ZWw9J0RFQlVHJykgYXMgY206CisgICAgICAgICAgICAgICAgICAgIGxvZ19mb28uaW5mbygiMSIpCisgICAgICAgICAgICAgICAgICAgIGxvZ19mb29iYXIuZGVidWcoIjIiKQorICAgICAgICAgICAgICAgICAgICBsb2dfcXV1eC53YXJuaW5nKCIzIikKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLm91dHB1dCwgWyJJTkZPOmZvbzoxIiwgIkRFQlVHOmZvby5iYXI6MiJdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0TG9nUmVjb3JkcyhjbS5yZWNvcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3snbmFtZSc6ICdmb28nfSwgeyduYW1lJzogJ2Zvby5iYXInfV0pCisgICAgICAgICAgICAjIFRoZSBvdXRlciBjYXRjaGFsbCBjYXVnaHQgdGhlIHF1dXggbG9nCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dGVyX2NtLm91dHB1dCwgWyJXQVJOSU5HOnF1dXg6MyJdKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzUGVyTG9nZ2VyKHNlbGYpOgorICAgICAgICBzZWxmLmNoZWNrQXNzZXJ0TG9nc1BlckxvZ2dlcihsb2dnaW5nLmdldExvZ2dlcignZm9vJykpCisgICAgICAgIHNlbGYuY2hlY2tBc3NlcnRMb2dzUGVyTG9nZ2VyKCdmb28nKQorCisgICAgZGVmIHRlc3RBc3NlcnRMb2dzRmFpbHVyZU5vTG9ncyhzZWxmKToKKyAgICAgICAgIyBGYWlsdXJlIGR1ZSB0byBubyBsb2dzCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnROb1N0ZGVycigpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhzZWxmLmZhaWx1cmVFeGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRMb2dzKCk6CisgICAgICAgICAgICAgICAgICAgIHBhc3MKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0ZhaWx1cmVMZXZlbFRvb0hpZ2goc2VsZik6CisgICAgICAgICMgRmFpbHVyZSBkdWUgdG8gbGV2ZWwgdG9vIGhpZ2gKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydE5vU3RkZXJyKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKHNlbGYuZmFpbHVyZUV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MobGV2ZWw9J1dBUk5JTkcnKToKKyAgICAgICAgICAgICAgICAgICAgbG9nX2Zvby5pbmZvKCIxIikKKworICAgIGRlZiB0ZXN0QXNzZXJ0TG9nc0ZhaWx1cmVNaXNtYXRjaGluZ0xvZ2dlcihzZWxmKToKKyAgICAgICAgIyBGYWlsdXJlIGR1ZSB0byBtaXNtYXRjaGluZyBsb2dnZXIgKGFuZCB0aGUgbG9nZ2VkIG1lc3NhZ2UgaXMKKyAgICAgICAgIyBwYXNzZWQgdGhyb3VnaCkKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydExvZ3MoJ3F1dXgnLCBsZXZlbD0nRVJST1InKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoc2VsZi5mYWlsdXJlRXhjZXB0aW9uKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0TG9ncygnZm9vJyk6CisgICAgICAgICAgICAgICAgICAgIGxvZ19xdXV4LmVycm9yKCIxIikKKwogICAgIGRlZiB0ZXN0RGVwcmVjYXRlZE1ldGhvZE5hbWVzKHNlbGYpOgogICAgICAgICAiIiIKICAgICAgICAgVGVzdCB0aGF0IHRoZSBkZXByZWNhdGVkIG1ldGhvZHMgcmFpc2UgYSBEZXByZWNhdGlvbldhcm5pbmcuIFNlZSAjOTQyNC4KQEAgLTEzMTMsMyArMTYxMSwzMyBAQAogICAgICAgICB3aXRoIHN1cHBvcnQuZGlzYWJsZV9nYygpOgogICAgICAgICAgICAgZGVsIGNhc2UKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uod3IoKSkKKworICAgIGRlZiB0ZXN0X25vX2V4Y2VwdGlvbl9sZWFrKHNlbGYpOgorICAgICAgICAjIElzc3VlICMxOTg4MDogVGVzdENhc2UucnVuKCkgc2hvdWxkIG5vdCBrZWVwIGEgcmVmZXJlbmNlCisgICAgICAgICMgdG8gdGhlIGV4Y2VwdGlvbgorICAgICAgICBjbGFzcyBNeUV4Y2VwdGlvbihFeGNlcHRpb24pOgorICAgICAgICAgICAgbmluc3RhbmNlID0gMAorCisgICAgICAgICAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICAgICAgTXlFeGNlcHRpb24ubmluc3RhbmNlICs9IDEKKyAgICAgICAgICAgICAgICBFeGNlcHRpb24uX19pbml0X18oc2VsZikKKworICAgICAgICAgICAgZGVmIF9fZGVsX18oc2VsZik6CisgICAgICAgICAgICAgICAgTXlFeGNlcHRpb24ubmluc3RhbmNlIC09IDEKKworICAgICAgICBjbGFzcyBUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdDEoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgTXlFeGNlcHRpb24oKQorCisgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCisgICAgICAgICAgICBkZWYgdGVzdDIoc2VsZik6CisgICAgICAgICAgICAgICAgcmFpc2UgTXlFeGNlcHRpb24oKQorCisgICAgICAgIGZvciBtZXRob2RfbmFtZSBpbiAoJ3Rlc3QxJywgJ3Rlc3QyJyk6CisgICAgICAgICAgICB0ZXN0Y2FzZSA9IFRlc3RDYXNlKG1ldGhvZF9uYW1lKQorICAgICAgICAgICAgdGVzdGNhc2UucnVuKCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTXlFeGNlcHRpb24ubmluc3RhbmNlLCAwKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Rpc2NvdmVyeS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CmluZGV4IGNjYzdkYjIuLmYxMmU4OTggMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZGlzY292ZXJ5LnB5CkBAIC0xLDEyICsxLDE3IEBACiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IHR5cGVzCitpbXBvcnQgcGlja2xlCitpbXBvcnQgYnVpbHRpbnMKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAogCiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC50ZXN0CiAKIAogY2xhc3MgVGVzdGFibGVUZXN0UHJvZ3JhbSh1bml0dGVzdC5UZXN0UHJvZ3JhbSk6Ci0gICAgbW9kdWxlID0gJ19fbWFpbl9fJworICAgIG1vZHVsZSA9IE5vbmUKICAgICBleGl0ID0gVHJ1ZQogICAgIGRlZmF1bHRUZXN0ID0gZmFpbGZhc3QgPSBjYXRjaGJyZWFrID0gYnVmZmVyID0gTm9uZQogICAgIHZlcmJvc2l0eSA9IDEKQEAgLTQ2LDkgKzUxLDkgQEAKICAgICAgICAgZGVmIHJlc3RvcmVfaXNkaXIoKToKICAgICAgICAgICAgIG9zLnBhdGguaXNkaXIgPSBvcmlnaW5hbF9pc2RpcgogCi0gICAgICAgIHBhdGhfbGlzdHMgPSBbWyd0ZXN0MS5weScsICd0ZXN0Mi5weScsICdub3RfYV90ZXN0LnB5JywgJ3Rlc3RfZGlyJywKKyAgICAgICAgcGF0aF9saXN0cyA9IFtbJ3Rlc3QyLnB5JywgJ3Rlc3QxLnB5JywgJ25vdF9hX3Rlc3QucHknLCAndGVzdF9kaXInLAogICAgICAgICAgICAgICAgICAgICAgICAndGVzdC5mb28nLCAndGVzdC1ub3QtYS1tb2R1bGUucHknLCAnYW5vdGhlcl9kaXInXSwKLSAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3QzLnB5JywgJ3Rlc3Q0LnB5JywgXV0KKyAgICAgICAgICAgICAgICAgICAgICBbJ3Rlc3Q0LnB5JywgJ3Rlc3QzLnB5JywgXV0KICAgICAgICAgb3MubGlzdGRpciA9IGxhbWJkYSBwYXRoOiBwYXRoX2xpc3RzLnBvcCgwKQogICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZV9saXN0ZGlyKQogCkBAIC03MCw2ICs3NSw4IEBACiAgICAgICAgIGxvYWRlci5fdG9wX2xldmVsX2RpciA9IHRvcF9sZXZlbAogICAgICAgICBzdWl0ZSA9IGxpc3QobG9hZGVyLl9maW5kX3Rlc3RzKHRvcF9sZXZlbCwgJ3Rlc3QqLnB5JykpCiAKKyAgICAgICAgIyBUaGUgdGVzdCBzdWl0ZXMgZm91bmQgc2hvdWxkIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseSBmb3IgcmVsaWFibGUKKyAgICAgICAgIyBleGVjdXRpb24gb3JkZXIuCiAgICAgICAgIGV4cGVjdGVkID0gW25hbWUgKyAnIG1vZHVsZSB0ZXN0cycgZm9yIG5hbWUgaW4KICAgICAgICAgICAgICAgICAgICAgKCd0ZXN0MScsICd0ZXN0MicpXQogICAgICAgICBleHBlY3RlZC5leHRlbmQoWygndGVzdF9kaXIuJXMnICUgbmFtZSkgKyAnIG1vZHVsZSB0ZXN0cycgZm9yIG5hbWUgaW4KQEAgLTEzMiw2ICsxMzksNyBAQAogICAgICAgICAjIGFuZCBkaXJlY3RseSBmcm9tIHRoZSB0ZXN0X2RpcmVjdG9yeTIgcGFja2FnZQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIFsnbG9hZF90ZXN0cycsICd0ZXN0X2RpcmVjdG9yeTInICsgJyBtb2R1bGUgdGVzdHMnXSkKKyAgICAgICAgIyBUaGUgdGVzdCBtb2R1bGUgcGF0aHMgc2hvdWxkIGJlIHNvcnRlZCBmb3IgcmVsaWFibGUgZXhlY3V0aW9uIG9yZGVyCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoTW9kdWxlLnBhdGhzLCBbJ3Rlc3RfZGlyZWN0b3J5JywgJ3Rlc3RfZGlyZWN0b3J5MiddKQogCiAgICAgICAgICMgbG9hZF90ZXN0cyBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIHdpdGggbG9hZGVyLCB0ZXN0cyBhbmQgcGF0dGVybgpAQCAtMTY5LDcgKzE3Nyw3IEBACiAgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlX2lzZGlyKQogCiAgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MgPSBbXQotICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuKToKKyAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybiwgbmFtZXNwYWNlPU5vbmUpOgogICAgICAgICAgICAgX2ZpbmRfdGVzdHNfYXJncy5hcHBlbmQoKHN0YXJ0X2RpciwgcGF0dGVybikpCiAgICAgICAgICAgICByZXR1cm4gWyd0ZXN0cyddCiAgICAgICAgIGxvYWRlci5fZmluZF90ZXN0cyA9IF9maW5kX3Rlc3RzCkBAIC0xODQsMTEgKzE5Miw5IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoX2ZpbmRfdGVzdHNfYXJncywgWyhzdGFydF9kaXIsICdwYXR0ZXJuJyldKQogICAgICAgICBzZWxmLmFzc2VydEluKHRvcF9sZXZlbF9kaXIsIHN5cy5wYXRoKQogCi0gICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVzX3RoYXRfZmFpbF90b19pbXBvcnQoc2VsZik6Ci0gICAgICAgIGxvYWRlciA9IHVuaXR0ZXN0LlRlc3RMb2FkZXIoKQotCisgICAgZGVmIHNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cyhzZWxmLCBmYWtlZmlsZSk6CiAgICAgICAgIGxpc3RkaXIgPSBvcy5saXN0ZGlyCi0gICAgICAgIG9zLmxpc3RkaXIgPSBsYW1iZGEgXzogWyd0ZXN0X3RoaXNfZG9lc19ub3RfZXhpc3QucHknXQorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIF86IFtmYWtlZmlsZV0KICAgICAgICAgaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKICAgICAgICAgb3MucGF0aC5pc2ZpbGUgPSBsYW1iZGEgXzogVHJ1ZQogICAgICAgICBvcmlnX3N5c19wYXRoID0gc3lzLnBhdGhbOl0KQEAgLTE5OCw2ICsyMDQsMTEgQEAKICAgICAgICAgICAgIHN5cy5wYXRoWzpdID0gb3JpZ19zeXNfcGF0aAogICAgICAgICBzZWxmLmFkZENsZWFudXAocmVzdG9yZSkKIAorICAgIGRlZiB0ZXN0X2Rpc2NvdmVyX3dpdGhfbW9kdWxlc190aGF0X2ZhaWxfdG9faW1wb3J0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBzZWxmLnNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cygndGVzdF90aGlzX2RvZXNfbm90X2V4aXN0LnB5JykKKwogICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignLicpCiAgICAgICAgIHNlbGYuYXNzZXJ0SW4ob3MuZ2V0Y3dkKCksIHN5cy5wYXRoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCkBAIC0yMDYsNjIgKzIxNyw4MiBAQAogICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEltcG9ydEVycm9yKToKICAgICAgICAgICAgIHRlc3QudGVzdF90aGlzX2RvZXNfbm90X2V4aXN0KCkKIAorICAgICAgICAjIENoZWNrIHBpY2tsYWJpbGl0eQorICAgICAgICBmb3IgcHJvdG8gaW4gcmFuZ2UocGlja2xlLkhJR0hFU1RfUFJPVE9DT0wgKyAxKToKKyAgICAgICAgICAgIHBpY2tsZS5sb2FkcyhwaWNrbGUuZHVtcHModGVzdCwgcHJvdG8pKQorCisgICAgZGVmIHRlc3RfZGlzY292ZXJfd2l0aF9tb2R1bGVfdGhhdF9yYWlzZXNfU2tpcFRlc3Rfb25faW1wb3J0KHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBkZWYgX2dldF9tb2R1bGVfZnJvbV9uYW1lKG5hbWUpOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoJ3NraXBwZXJvbycpCisgICAgICAgIGxvYWRlci5fZ2V0X21vZHVsZV9mcm9tX25hbWUgPSBfZ2V0X21vZHVsZV9mcm9tX25hbWUKKworICAgICAgICBzZWxmLnNldHVwX2ltcG9ydF9pc3N1ZV90ZXN0cygndGVzdF9za2lwX2R1bW15LnB5JykKKworICAgICAgICBzdWl0ZSA9IGxvYWRlci5kaXNjb3ZlcignLicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKKworICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXN0UmVzdWx0KCkKKyAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAxKQorCisgICAgICAgICMgQ2hlY2sgcGlja2xhYmlsaXR5CisgICAgICAgIGZvciBwcm90byBpbiByYW5nZShwaWNrbGUuSElHSEVTVF9QUk9UT0NPTCArIDEpOgorICAgICAgICAgICAgcGlja2xlLmxvYWRzKHBpY2tsZS5kdW1wcyhzdWl0ZSwgcHJvdG8pKQorCiAgICAgZGVmIHRlc3RfY29tbWFuZF9saW5lX2hhbmRsaW5nX3BhcnNlQXJncyhzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQogCiAgICAgICAgIGFyZ3MgPSBbXQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgYXJncy5leHRlbmQoYXJndikKLSAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gZG9fZGlzY292ZXJ5CisgICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGFyZ3MuYXBwZW5kCiAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFsnc29tZXRoaW5nJywgJ2Rpc2NvdmVyJ10pCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJncywgW1tdXSkKIAorICAgICAgICBhcmdzWzpdID0gW10KICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnZGlzY292ZXInLCAnZm9vJywgJ2JhciddKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFsnZm9vJywgJ2JhciddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbJ2ZvbycsICdiYXInXV0pCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZGlzY292ZXJfYnlfZGVmYXVsdChzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLm1vZHVsZSA9IE5vbmUKIAotICAgICAgICBzZWxmLmNhbGxlZCA9IEZhbHNlCi0gICAgICAgIGRlZiBkb19kaXNjb3ZlcnkoYXJndik6Ci0gICAgICAgICAgICBzZWxmLmNhbGxlZCA9IFRydWUKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXJndiwgW10pCi0gICAgICAgIHByb2dyYW0uX2RvX2Rpc2NvdmVyeSA9IGRvX2Rpc2NvdmVyeQorICAgICAgICBhcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnXSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3MsIFtbXV0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocHJvZ3JhbS52ZXJib3NpdHksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5idWZmZXIsIEZhbHNlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uY2F0Y2hicmVhaywgRmFsc2UpCisgICAgICAgIHNlbGYuYXNzZXJ0SXMocHJvZ3JhbS5mYWlsZmFzdCwgRmFsc2UpCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZGlzY292ZXJfYnlfZGVmYXVsdF93aXRoX29wdGlvbnMoc2VsZik6CiAgICAgICAgIHByb2dyYW0gPSBUZXN0YWJsZVRlc3RQcm9ncmFtKCkKLSAgICAgICAgcHJvZ3JhbS5tb2R1bGUgPSBOb25lCiAKLSAgICAgICAgYXJncyA9IFsnc29tZXRoaW5nJywgJy12JywgJy1iJywgJy12JywgJy1jJywgJy1mJ10KLSAgICAgICAgc2VsZi5jYWxsZWQgPSBGYWxzZQotICAgICAgICBkZWYgZG9fZGlzY292ZXJ5KGFyZ3YpOgotICAgICAgICAgICAgc2VsZi5jYWxsZWQgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFyZ3YsIGFyZ3NbMTpdKQotICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkgPSBkb19kaXNjb3ZlcnkKLSAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoYXJncykKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY2FsbGVkKQorICAgICAgICBhcmdzID0gW10KKyAgICAgICAgcHJvZ3JhbS5fZG9fZGlzY292ZXJ5ID0gYXJncy5hcHBlbmQKKyAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoWydzb21ldGhpbmcnLCAnLXYnLCAnLWInLCAnLXYnLCAnLWMnLCAnLWYnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChhcmdzLCBbW11dKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHByb2dyYW0udmVyYm9zaXR5LCAyKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uYnVmZmVyLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydElzKHByb2dyYW0uY2F0Y2hicmVhaywgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhwcm9ncmFtLmZhaWxmYXN0LCBUcnVlKQogCiAKICAgICBkZWYgdGVzdF9jb21tYW5kX2xpbmVfaGFuZGxpbmdfZG9fZGlzY292ZXJ5X3Rvb19tYW55X2FyZ3VtZW50cyhzZWxmKToKLSAgICAgICAgY2xhc3MgU3RvcChFeGNlcHRpb24pOgotICAgICAgICAgICAgcGFzcwotICAgICAgICBkZWYgdXNhZ2VFeGl0KCk6Ci0gICAgICAgICAgICByYWlzZSBTdG9wCi0KICAgICAgICAgcHJvZ3JhbSA9IFRlc3RhYmxlVGVzdFByb2dyYW0oKQotICAgICAgICBwcm9ncmFtLnVzYWdlRXhpdCA9IHVzYWdlRXhpdAogICAgICAgICBwcm9ncmFtLnRlc3RMb2FkZXIgPSBOb25lCiAKLSAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTdG9wKToKKyAgICAgICAgd2l0aCBzdXBwb3J0LmNhcHR1cmVkX3N0ZGVycigpIGFzIHN0ZGVyciwgXAorICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgogICAgICAgICAgICAgIyB0b28gbWFueSBhcmdzCiAgICAgICAgICAgICBwcm9ncmFtLl9kb19kaXNjb3ZlcnkoWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjbS5leGNlcHRpb24uYXJncywgKDIsKSkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigndXNhZ2U6Jywgc3RkZXJyLmdldHZhbHVlKCkpCiAKIAogICAgIGRlZiB0ZXN0X2NvbW1hbmRfbGluZV9oYW5kbGluZ19kb19kaXNjb3ZlcnlfdXNlc19kZWZhdWx0X2xvYWRlcihzZWxmKToKICAgICAgICAgcHJvZ3JhbSA9IG9iamVjdC5fX25ld19fKHVuaXR0ZXN0LlRlc3RQcm9ncmFtKQorICAgICAgICBwcm9ncmFtLl9pbml0QXJnUGFyc2VycygpCiAKICAgICAgICAgY2xhc3MgTG9hZGVyKG9iamVjdCk6CiAgICAgICAgICAgICBhcmdzID0gW10KQEAgLTQxNyw3ICs0NDgsNyBAQAogICAgICAgICBleHBlY3RlZFBhdGggPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKHVuaXR0ZXN0LnRlc3QuX19maWxlX18pKQogCiAgICAgICAgIHNlbGYud2FzUnVuID0gRmFsc2UKLSAgICAgICAgZGVmIF9maW5kX3Rlc3RzKHN0YXJ0X2RpciwgcGF0dGVybik6CisgICAgICAgIGRlZiBfZmluZF90ZXN0cyhzdGFydF9kaXIsIHBhdHRlcm4sIG5hbWVzcGFjZT1Ob25lKToKICAgICAgICAgICAgIHNlbGYud2FzUnVuID0gVHJ1ZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdGFydF9kaXIsIGV4cGVjdGVkUGF0aCkKICAgICAgICAgICAgIHJldHVybiB0ZXN0cwpAQCAtNDI3LDUgKzQ1OCw3OSBAQAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLl90ZXN0cywgdGVzdHMpCiAKIAorICAgIGRlZiB0ZXN0X2Rpc2NvdmVyeV9mcm9tX2RvdHRlZF9wYXRoX2J1aWx0aW5fbW9kdWxlcyhzZWxmKToKKworICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBsaXN0ZGlyID0gb3MubGlzdGRpcgorICAgICAgICBvcy5saXN0ZGlyID0gbGFtYmRhIF86IFsndGVzdF90aGlzX2RvZXNfbm90X2V4aXN0LnB5J10KKyAgICAgICAgaXNmaWxlID0gb3MucGF0aC5pc2ZpbGUKKyAgICAgICAgaXNkaXIgPSBvcy5wYXRoLmlzZGlyCisgICAgICAgIG9zLnBhdGguaXNkaXIgPSBsYW1iZGEgXzogRmFsc2UKKyAgICAgICAgb3JpZ19zeXNfcGF0aCA9IHN5cy5wYXRoWzpdCisgICAgICAgIGRlZiByZXN0b3JlKCk6CisgICAgICAgICAgICBvcy5wYXRoLmlzZmlsZSA9IGlzZmlsZQorICAgICAgICAgICAgb3MucGF0aC5pc2RpciA9IGlzZGlyCisgICAgICAgICAgICBvcy5saXN0ZGlyID0gbGlzdGRpcgorICAgICAgICAgICAgc3lzLnBhdGhbOl0gPSBvcmlnX3N5c19wYXRoCisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChyZXN0b3JlKQorCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIGxvYWRlci5kaXNjb3Zlcignc3lzJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnQ2FuIG5vdCB1c2UgYnVpbHRpbiBtb2R1bGVzICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAnYXMgZG90dGVkIG1vZHVsZSBuYW1lcycpCisKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZnJvbV9kb3R0ZWRfbmFtZXNwYWNlX3BhY2thZ2VzKHNlbGYpOgorICAgICAgICBsb2FkZXIgPSB1bml0dGVzdC5UZXN0TG9hZGVyKCkKKworICAgICAgICBvcmlnX2ltcG9ydCA9IF9faW1wb3J0X18KKyAgICAgICAgcGFja2FnZSA9IHR5cGVzLk1vZHVsZVR5cGUoJ3BhY2thZ2UnKQorICAgICAgICBwYWNrYWdlLl9fcGF0aF9fID0gWycvYScsICcvYiddCisgICAgICAgIHBhY2thZ2UuX19zcGVjX18gPSB0eXBlcy5TaW1wbGVOYW1lc3BhY2UoCisgICAgICAgICAgIGxvYWRlcj1Ob25lLAorICAgICAgICAgICBzdWJtb2R1bGVfc2VhcmNoX2xvY2F0aW9ucz1bJy9hJywgJy9iJ10KKyAgICAgICAgKQorCisgICAgICAgIGRlZiBfaW1wb3J0KHBhY2thZ2VuYW1lLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgc3lzLm1vZHVsZXNbcGFja2FnZW5hbWVdID0gcGFja2FnZQorICAgICAgICAgICAgcmV0dXJuIHBhY2thZ2UKKworICAgICAgICBkZWYgY2xlYW51cCgpOgorICAgICAgICAgICAgYnVpbHRpbnMuX19pbXBvcnRfXyA9IG9yaWdfaW1wb3J0CisgICAgICAgIHNlbGYuYWRkQ2xlYW51cChjbGVhbnVwKQorICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gX2ltcG9ydAorCisgICAgICAgIF9maW5kX3Rlc3RzX2FyZ3MgPSBbXQorICAgICAgICBkZWYgX2ZpbmRfdGVzdHMoc3RhcnRfZGlyLCBwYXR0ZXJuLCBuYW1lc3BhY2U9Tm9uZSk6CisgICAgICAgICAgICBfZmluZF90ZXN0c19hcmdzLmFwcGVuZCgoc3RhcnRfZGlyLCBwYXR0ZXJuKSkKKyAgICAgICAgICAgIHJldHVybiBbJyVzL3Rlc3RzJyAlIHN0YXJ0X2Rpcl0KKworICAgICAgICBsb2FkZXIuX2ZpbmRfdGVzdHMgPSBfZmluZF90ZXN0cworICAgICAgICBsb2FkZXIuc3VpdGVDbGFzcyA9IGxpc3QKKyAgICAgICAgc3VpdGUgPSBsb2FkZXIuZGlzY292ZXIoJ3BhY2thZ2UnKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLCBbJy9hL3Rlc3RzJywgJy9iL3Rlc3RzJ10pCisKKyAgICBkZWYgdGVzdF9kaXNjb3ZlcnlfZmFpbGVkX2Rpc2NvdmVyeShzZWxmKToKKyAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCisgICAgICAgIHBhY2thZ2UgPSB0eXBlcy5Nb2R1bGVUeXBlKCdwYWNrYWdlJykKKyAgICAgICAgb3JpZ19pbXBvcnQgPSBfX2ltcG9ydF9fCisKKyAgICAgICAgZGVmIF9pbXBvcnQocGFja2FnZW5hbWUsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICAgICBzeXMubW9kdWxlc1twYWNrYWdlbmFtZV0gPSBwYWNrYWdlCisgICAgICAgICAgICByZXR1cm4gcGFja2FnZQorCisgICAgICAgIGRlZiBjbGVhbnVwKCk6CisgICAgICAgICAgICBidWlsdGlucy5fX2ltcG9ydF9fID0gb3JpZ19pbXBvcnQKKyAgICAgICAgc2VsZi5hZGRDbGVhbnVwKGNsZWFudXApCisgICAgICAgIGJ1aWx0aW5zLl9faW1wb3J0X18gPSBfaW1wb3J0CisKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbG9hZGVyLmRpc2NvdmVyKCdwYWNrYWdlJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIoY20uZXhjZXB0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZG9uXCd0IGtub3cgaG93IHRvIGRpc2NvdmVyIGZyb20geyFyfScKKyAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHBhY2thZ2UpKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X2Z1bmN0aW9udGVzdGNhc2UucHkKaW5kZXggOWNlNWVlMy4uYzVmMmJjYiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9mdW5jdGlvbnRlc3RjYXNlLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfZnVuY3Rpb250ZXN0Y2FzZS5weQpAQCAtMSw2ICsxLDYgQEAKIGltcG9ydCB1bml0dGVzdAogCi1mcm9tIC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0Citmcm9tIHVuaXR0ZXN0LnRlc3Quc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdAogCiAKIGNsYXNzIFRlc3RfRnVuY3Rpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC0xNDIsMyArMTQyLDcgQEAKICAgICAgICAgdGVzdCA9IHVuaXR0ZXN0LkZ1bmN0aW9uVGVzdENhc2UobGFtYmRhOiBOb25lLCBkZXNjcmlwdGlvbj1kZXNjKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGVzdC5zaG9ydERlc2NyaXB0aW9uKCksICJ0aGlzIHRlc3RzIGZvbyIpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfbG9hZGVyLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKaW5kZXggZmNkMmUwNy4uYjYyYTFiNSAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKKysrIGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9sb2FkZXIucHkKQEAgLTEzMDYsMyArMTMwNiw3IEBACiAgICAgZGVmIHRlc3Rfc3VpdGVDbGFzc19fZGVmYXVsdF92YWx1ZShzZWxmKToKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuVGVzdExvYWRlcigpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMobG9hZGVyLnN1aXRlQ2xhc3MsIHVuaXR0ZXN0LlRlc3RTdWl0ZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9wcm9ncmFtLnB5CmluZGV4IDhhNGIzZmEuLjcyNWQ2N2YgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3RfcHJvZ3JhbS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Byb2dyYW0ucHkKQEAgLTIsNyArMiw5IEBACiAKIGltcG9ydCBvcwogaW1wb3J0IHN5cworZnJvbSB0ZXN0IGltcG9ydCBzdXBwb3J0CiBpbXBvcnQgdW5pdHRlc3QKK2ltcG9ydCB1bml0dGVzdC50ZXN0CiAKIAogY2xhc3MgVGVzdF9UZXN0UHJvZ3JhbSh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC02NCw2ICs2Niw0MSBAQAogICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcygKICAgICAgICAgICAgICAgICBbc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdF9UZXN0UHJvZ3JhbS5Gb29CYXIpXSkKIAorICAgICAgICBkZWYgbG9hZFRlc3RzRnJvbU5hbWVzKHNlbGYsIG5hbWVzLCBtb2R1bGUpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuc3VpdGVDbGFzcygKKyAgICAgICAgICAgICAgICBbc2VsZi5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdF9UZXN0UHJvZ3JhbS5Gb29CYXIpXSkKKworICAgIGRlZiB0ZXN0X2RlZmF1bHRUZXN0X3dpdGhfc3RyaW5nKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIG9sZF9hcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ2Zha2V0ZXN0J10KKyAgICAgICAgcnVubmVyID0gRmFrZVJ1bm5lcigpCisgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5UZXN0UHJvZ3JhbSh0ZXN0UnVubmVyPXJ1bm5lciwgZXhpdD1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUZXN0PSd1bml0dGVzdC50ZXN0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RMb2FkZXI9c2VsZi5Gb29CYXJMb2FkZXIoKSkKKyAgICAgICAgc3lzLmFyZ3YgPSBvbGRfYXJndgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCgndW5pdHRlc3QudGVzdCcsKSwgcHJvZ3JhbS50ZXN0TmFtZXMpCisKKyAgICBkZWYgdGVzdF9kZWZhdWx0VGVzdF93aXRoX2l0ZXJhYmxlKHNlbGYpOgorICAgICAgICBjbGFzcyBGYWtlUnVubmVyKG9iamVjdCk6CisgICAgICAgICAgICBkZWYgcnVuKHNlbGYsIHRlc3QpOgorICAgICAgICAgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKyAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIG9sZF9hcmd2ID0gc3lzLmFyZ3YKKyAgICAgICAgc3lzLmFyZ3YgPSBbJ2Zha2V0ZXN0J10KKyAgICAgICAgcnVubmVyID0gRmFrZVJ1bm5lcigpCisgICAgICAgIHByb2dyYW0gPSB1bml0dGVzdC5UZXN0UHJvZ3JhbSgKKyAgICAgICAgICAgIHRlc3RSdW5uZXI9cnVubmVyLCBleGl0PUZhbHNlLAorICAgICAgICAgICAgZGVmYXVsdFRlc3Q9Wyd1bml0dGVzdC50ZXN0JywgJ3VuaXR0ZXN0LnRlc3QyJ10sCisgICAgICAgICAgICB0ZXN0TG9hZGVyPXNlbGYuRm9vQmFyTG9hZGVyKCkpCisgICAgICAgIHN5cy5hcmd2ID0gb2xkX2FyZ3YKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbJ3VuaXR0ZXN0LnRlc3QnLCAndW5pdHRlc3QudGVzdDInXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZ3JhbS50ZXN0TmFtZXMpCiAKICAgICBkZWYgdGVzdF9Ob25FeGl0KHNlbGYpOgogICAgICAgICBwcm9ncmFtID0gdW5pdHRlc3QubWFpbihleGl0PUZhbHNlLApAQCAtMTUxLDIwICsxODgsMzggQEAKICAgICAgICAgICAgIGlmIGF0dHIgPT0gJ2NhdGNoJyBhbmQgbm90IGhhc0luc3RhbGxIYW5kbGVyOgogICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAKKyAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgTm9uZSkKKyAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lXSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXMoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSwgRmFsc2UpCisKKyAgICAgICAgICAgIGZhbHNlID0gW10KKyAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgZmFsc2UpCisgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZV0pCisgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIGZhbHNlKQorCisgICAgICAgICAgICB0cnVlID0gWzQyXQorICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCB0cnVlKQorICAgICAgICAgICAgcHJvZ3JhbS5wYXJzZUFyZ3MoW05vbmVdKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRJcyhnZXRhdHRyKHByb2dyYW0sIGF0dHIpLCB0cnVlKQorCiAgICAgICAgICAgICBzaG9ydF9vcHQgPSAnLSVzJyAlIGFyZ1swXQogICAgICAgICAgICAgbG9uZ19vcHQgPSAnLS0lcycgJSBhcmcKICAgICAgICAgICAgIGZvciBvcHQgaW4gc2hvcnRfb3B0LCBsb25nX29wdDoKICAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIE5vbmUpCi0KICAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoZ2V0YXR0cihwcm9ncmFtLCBhdHRyKSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydElzKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIFRydWUpCiAKLSAgICAgICAgICAgIGZvciBvcHQgaW4gc2hvcnRfb3B0LCBsb25nX29wdDoKLSAgICAgICAgICAgICAgICBub3Rfbm9uZSA9IG9iamVjdCgpCi0gICAgICAgICAgICAgICAgc2V0YXR0cihwcm9ncmFtLCBhdHRyLCBub3Rfbm9uZSkKKyAgICAgICAgICAgICAgICBzZXRhdHRyKHByb2dyYW0sIGF0dHIsIEZhbHNlKQorICAgICAgICAgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRlcnIoKSBhcyBzdGRlcnIsIFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoU3lzdGVtRXhpdCkgYXMgY206CisgICAgICAgICAgICAgICAgICAgIHByb2dyYW0ucGFyc2VBcmdzKFtOb25lLCBvcHRdKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY20uZXhjZXB0aW9uLmFyZ3MsICgyLCkpCiAKLSAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKLSAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGdldGF0dHIocHJvZ3JhbSwgYXR0ciksIG5vdF9ub25lKQorICAgICAgICAgICAgICAgIHNldGF0dHIocHJvZ3JhbSwgYXR0ciwgVHJ1ZSkKKyAgICAgICAgICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3RkZXJyKCkgYXMgc3RkZXJyLCBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpIGFzIGNtOgorICAgICAgICAgICAgICAgICAgICBwcm9ncmFtLnBhcnNlQXJncyhbTm9uZSwgb3B0XSkKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGNtLmV4Y2VwdGlvbi5hcmdzLCAoMiwpKQogCiAgICAgZGVmIHRlc3RXYXJuaW5nKHNlbGYpOgogICAgICAgICAiIiJUZXN0IHRoZSB3YXJuaW5ncyBhcmd1bWVudCIiIgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9yZXN1bHQucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQppbmRleCA3ZDQwNzI1Li40ODlmZTE3IDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3Jlc3VsdC5weQpAQCAtMjI3LDYgKzIyNyw0MCBAQAogICAgICAgICBzZWxmLmFzc2VydElzKHRlc3RfY2FzZSwgdGVzdCkKICAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvcm1hdHRlZF9leGMsIHN0cikKIAorICAgIGRlZiB0ZXN0X2FkZFN1YlRlc3Qoc2VsZik6CisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF8xKHNlbGYpOgorICAgICAgICAgICAgICAgIG5vbmxvY2FsIHN1YnRlc3QKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSk6CisgICAgICAgICAgICAgICAgICAgIHN1YnRlc3QgPSBzZWxmLl9zdWJ0ZXN0CisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIDEvMAorICAgICAgICAgICAgICAgICAgICBleGNlcHQgWmVyb0RpdmlzaW9uRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBleGNfaW5mb190dXBsZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAgICAgICAgICAgICMgUmVnaXN0ZXIgYW4gZXJyb3IgYnkgaGFuZCAodG8gY2hlY2sgdGhlIEFQSSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZFN1YlRlc3QodGVzdCwgc3VidGVzdCwgZXhjX2luZm9fdHVwbGUpCisgICAgICAgICAgICAgICAgICAgICMgTm93IHRyaWdnZXIgYSBmYWlsdXJlCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic29tZSByZWNvZ25pemFibGUgZmFpbHVyZSIpCisKKyAgICAgICAgc3VidGVzdCA9IE5vbmUKKyAgICAgICAgdGVzdCA9IEZvbygndGVzdF8xJykKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGVzdFJlc3VsdCgpCisKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LmVycm9ycyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5mYWlsdXJlcyksIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnRlc3RzUnVuLCAxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5zaG91bGRTdG9wLCBGYWxzZSkKKworICAgICAgICB0ZXN0X2Nhc2UsIGZvcm1hdHRlZF9leGMgPSByZXN1bHQuZXJyb3JzWzBdCisgICAgICAgIHNlbGYuYXNzZXJ0SXModGVzdF9jYXNlLCBzdWJ0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEluKCJaZXJvRGl2aXNpb25FcnJvciIsIGZvcm1hdHRlZF9leGMpCisgICAgICAgIHRlc3RfY2FzZSwgZm9ybWF0dGVkX2V4YyA9IHJlc3VsdC5mYWlsdXJlc1swXQorICAgICAgICBzZWxmLmFzc2VydElzKHRlc3RfY2FzZSwgc3VidGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRJbigic29tZSByZWNvZ25pemFibGUgZmFpbHVyZSIsIGZvcm1hdHRlZF9leGMpCisKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyhzZWxmKToKICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKQEAgLTIzNCw2ICsyNjgsMzcgQEAKICAgICAgICAgICAgICAgICAndGVzdEdldERlc2NyaXB0aW9uV2l0aG91dERvY3N0cmluZyAoJyArIF9fbmFtZV9fICsKICAgICAgICAgICAgICAgICAnLlRlc3RfVGVzdFJlc3VsdCknKQogCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nKHNlbGYpOgorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5nZXREZXNjcmlwdGlvbihzZWxmLl9zdWJ0ZXN0KSwKKyAgICAgICAgICAgICAgICAgICAgJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRob3V0RG9jc3RyaW5nICgnICsgX19uYW1lX18gKworICAgICAgICAgICAgICAgICAgICAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSknKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgnc29tZSBtZXNzYWdlJyk6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgKCcgKyBfX25hbWVfXyArCisgICAgICAgICAgICAgICAgICAgICcuVGVzdF9UZXN0UmVzdWx0KSBbc29tZSBtZXNzYWdlXScpCisKKyAgICBkZWYgdGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmdBbmRQYXJhbXMoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgICAgICAndGVzdEdldFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmdBbmRQYXJhbXMgJworICAgICAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoPHN1YnRlc3Q+KScpCisKKyAgICBkZWYgdGVzdEdldE5lc3RlZFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcoc2VsZik6CisgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGZvbz0xKToKKyAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KGJhcj0yKToKKyAgICAgICAgICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAndGVzdEdldE5lc3RlZFN1YlRlc3REZXNjcmlwdGlvbldpdGhvdXREb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICAgICAgICAgJygnICsgX19uYW1lX18gKyAnLlRlc3RfVGVzdFJlc3VsdCkgKGJhcj0yLCBmb289MSknKQorCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCiAgICAgZGVmIHRlc3RHZXREZXNjcmlwdGlvbldpdGhPbmVMaW5lRG9jc3RyaW5nKHNlbGYpOgpAQCAtMjQ3LDYgKzMxMiwxOCBAQAogCiAgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKICAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoT25lTGluZURvY3N0cmluZyhzZWxmKToKKyAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGRvY3N0cmluZy4iIiIKKyAgICAgICAgcmVzdWx0ID0gdW5pdHRlc3QuVGV4dFRlc3RSZXN1bHQoTm9uZSwgVHJ1ZSwgMSkKKyAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoZm9vPTEsIGJhcj0yKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgcmVzdWx0LmdldERlc2NyaXB0aW9uKHNlbGYuX3N1YnRlc3QpLAorICAgICAgICAgICAgICAgKCd0ZXN0R2V0U3ViVGVzdERlc2NyaXB0aW9uV2l0aE9uZUxpbmVEb2NzdHJpbmcgJworICAgICAgICAgICAgICAgICcoJyArIF9fbmFtZV9fICsgJy5UZXN0X1Rlc3RSZXN1bHQpIChiYXI9MiwgZm9vPTEpXG4nCisgICAgICAgICAgICAgICAgJ1Rlc3RzIGdldERlc2NyaXB0aW9uKCkgZm9yIGEgbWV0aG9kIHdpdGggYSBkb2NzdHJpbmcuJykpCisKKyAgICBAdW5pdHRlc3Quc2tpcElmKHN5cy5mbGFncy5vcHRpbWl6ZSA+PSAyLAorICAgICAgICAgICAgICAgICAgICAgIkRvY3N0cmluZ3MgYXJlIG9taXR0ZWQgd2l0aCAtTzIgYW5kIGFib3ZlIikKICAgICBkZWYgdGVzdEdldERlc2NyaXB0aW9uV2l0aE11bHRpTGluZURvY3N0cmluZyhzZWxmKToKICAgICAgICAgIiIiVGVzdHMgZ2V0RGVzY3JpcHRpb24oKSBmb3IgYSBtZXRob2Qgd2l0aCBhIGxvbmdlciBkb2NzdHJpbmcuCiAgICAgICAgIFRoZSBzZWNvbmQgbGluZSBvZiB0aGUgZG9jc3RyaW5nLgpAQCAtMjU5LDYgKzMzNiwyMSBAQAogICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyICcKICAgICAgICAgICAgICAgICAnZG9jc3RyaW5nLicpKQogCisgICAgQHVuaXR0ZXN0LnNraXBJZihzeXMuZmxhZ3Mub3B0aW1pemUgPj0gMiwKKyAgICAgICAgICAgICAgICAgICAgICJEb2NzdHJpbmdzIGFyZSBvbWl0dGVkIHdpdGggLU8yIGFuZCBhYm92ZSIpCisgICAgZGVmIHRlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nKHNlbGYpOgorICAgICAgICAiIiJUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyIGRvY3N0cmluZy4KKyAgICAgICAgVGhlIHNlY29uZCBsaW5lIG9mIHRoZSBkb2NzdHJpbmcuCisgICAgICAgICIiIgorICAgICAgICByZXN1bHQgPSB1bml0dGVzdC5UZXh0VGVzdFJlc3VsdChOb25lLCBUcnVlLCAxKQorICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdChmb289MSwgYmFyPTIpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZXN1bHQuZ2V0RGVzY3JpcHRpb24oc2VsZi5fc3VidGVzdCksCisgICAgICAgICAgICAgICAoJ3Rlc3RHZXRTdWJUZXN0RGVzY3JpcHRpb25XaXRoTXVsdGlMaW5lRG9jc3RyaW5nICcKKyAgICAgICAgICAgICAgICAnKCcgKyBfX25hbWVfXyArICcuVGVzdF9UZXN0UmVzdWx0KSAoYmFyPTIsIGZvbz0xKVxuJworICAgICAgICAgICAgICAgICdUZXN0cyBnZXREZXNjcmlwdGlvbigpIGZvciBhIG1ldGhvZCB3aXRoIGEgbG9uZ2VyICcKKyAgICAgICAgICAgICAgICAnZG9jc3RyaW5nLicpKQorCiAgICAgZGVmIHRlc3RTdGFja0ZyYW1lVHJpbW1pbmcoc2VsZik6CiAgICAgICAgIGNsYXNzIEZyYW1lKG9iamVjdCk6CiAgICAgICAgICAgICBjbGFzcyB0Yl9mcmFtZShvYmplY3QpOgpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9ydW5uZXIucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQppbmRleCBlMjJlNmJjLi43YzBiZDUxIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3J1bm5lci5weQpAQCAtNSw4ICs1LDEwIEBACiBpbXBvcnQgc3VicHJvY2VzcwogCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QuY2FzZSBpbXBvcnQgX091dGNvbWUKIAotZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4KK2Zyb20gdW5pdHRlc3QudGVzdC5zdXBwb3J0IGltcG9ydCAoTG9nZ2luZ1Jlc3VsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0V2l0aE5vU3RhcnRUZXN0UnVuU3RvcFRlc3RSdW4pCiAKIAogY2xhc3MgVGVzdENsZWFuVXAodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtNDIsMTIgKzQ0LDggQEAKICAgICAgICAgICAgIGRlZiB0ZXN0Tm90aGluZyhzZWxmKToKICAgICAgICAgICAgICAgICBwYXNzCiAKLSAgICAgICAgY2xhc3MgTW9ja091dGNvbWUob2JqZWN0KToKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBUcnVlCi0gICAgICAgICAgICBlcnJvcnMgPSBbXQotCiAgICAgICAgIHRlc3QgPSBUZXN0YWJsZVRlc3QoJ3Rlc3ROb3RoaW5nJykKLSAgICAgICAgdGVzdC5fb3V0Y29tZUZvckRvQ2xlYW51cHMgPSBNb2NrT3V0Y29tZQorICAgICAgICBvdXRjb21lID0gdGVzdC5fb3V0Y29tZSA9IF9PdXRjb21lKCkKIAogICAgICAgICBleGMxID0gRXhjZXB0aW9uKCdmb28nKQogICAgICAgICBleGMyID0gRXhjZXB0aW9uKCdiYXInKQpAQCAtNjEsOSArNTksMTAgQEAKICAgICAgICAgdGVzdC5hZGRDbGVhbnVwKGNsZWFudXAyKQogCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UodGVzdC5kb0NsZWFudXBzKCkpCi0gICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoTW9ja091dGNvbWUuc3VjY2VzcykKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShvdXRjb21lLnN1Y2Nlc3MpCiAKLSAgICAgICAgKFR5cGUxLCBpbnN0YW5jZTEsIF8pLCAoVHlwZTIsIGluc3RhbmNlMiwgXykgPSByZXZlcnNlZChNb2NrT3V0Y29tZS5lcnJvcnMpCisgICAgICAgICgoXywgKFR5cGUxLCBpbnN0YW5jZTEsIF8pKSwKKyAgICAgICAgIChfLCAoVHlwZTIsIGluc3RhbmNlMiwgXykpKSA9IHJldmVyc2VkKG91dGNvbWUuZXJyb3JzKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKChUeXBlMSwgaW5zdGFuY2UxKSwgKEV4Y2VwdGlvbiwgZXhjMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoKFR5cGUyLCBpbnN0YW5jZTIpLCAoRXhjZXB0aW9uLCBleGMyKSkKIApAQCAtMzQxLDMgKzM0MCw3IEBACiAgICAgICAgIGYgPSBpby5TdHJpbmdJTygpCiAgICAgICAgIHJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKGYpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShydW5uZXIuc3RyZWFtLnN0cmVhbSBpcyBmKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NldHVwcy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CmluZGV4IGI4ZDVhYTQuLjM5MmY5NWUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2V0dXBzLnB5CkBAIC00OTQsMTQgKzQ5NCwxMyBAQAogICAgICAgICBUZXN0Ll9fbW9kdWxlX18gPSAnTW9kdWxlJwogICAgICAgICBzeXMubW9kdWxlc1snTW9kdWxlJ10gPSBNb2R1bGUKIAotICAgICAgICBfc3VpdGUgPSB1bml0dGVzdC5kZWZhdWx0VGVzdExvYWRlci5sb2FkVGVzdHNGcm9tVGVzdENhc2UoVGVzdCkKLSAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKQotICAgICAgICBzdWl0ZS5hZGRUZXN0KF9zdWl0ZSkKLQogICAgICAgICBtZXNzYWdlcyA9ICgnc2V0VXBNb2R1bGUnLCAndGVhckRvd25Nb2R1bGUnLCAnc2V0VXBDbGFzcycsICd0ZWFyRG93bkNsYXNzJywgJ3Rlc3Rfc29tZXRoaW5nJykKICAgICAgICAgZm9yIHBoYXNlLCBtc2cgaW4gZW51bWVyYXRlKG1lc3NhZ2VzKToKKyAgICAgICAgICAgIF9zdWl0ZSA9IHVuaXR0ZXN0LmRlZmF1bHRUZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21UZXN0Q2FzZShUZXN0KQorICAgICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoW19zdWl0ZV0pCiAgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzUmVnZXgoRXhjZXB0aW9uLCBtc2cpOgogICAgICAgICAgICAgICAgIHN1aXRlLmRlYnVnKCkKIAorCiBpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgogICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc2tpcHBpbmcucHkKaW5kZXggOTUyMjQwZS4uNzFmN2I3MCAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9za2lwcGluZy5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3NraXBwaW5nLnB5CkBAIC0xLDYgKzEsNiBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKLWZyb20gLnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQKK2Zyb20gdW5pdHRlc3QudGVzdC5zdXBwb3J0IGltcG9ydCBMb2dnaW5nUmVzdWx0CiAKIAogY2xhc3MgVGVzdF9UZXN0U2tpcHBpbmcodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjksNiArMjksMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQudGVzdHNSdW4sIDEpCiAKKyAgICBkZWYgdGVzdF9za2lwcGluZ19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0X3NraXBfbWUoc2VsZik6CisgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYT0xKToKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBzZWxmLnN1YlRlc3QoYj0yKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAgMSIpCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcFRlc3QoInNraXAgMiIpCisgICAgICAgICAgICAgICAgc2VsZi5za2lwVGVzdCgic2tpcCAzIikKKyAgICAgICAgZXZlbnRzID0gW10KKyAgICAgICAgcmVzdWx0ID0gTG9nZ2luZ1Jlc3VsdChldmVudHMpCisgICAgICAgIHRlc3QgPSBGb28oInRlc3Rfc2tpcF9tZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsIFsnc3RhcnRUZXN0JywgJ2FkZFNraXAnLCAnYWRkU2tpcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2FkZFNraXAnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4ocmVzdWx0LnNraXBwZWQpLCAzKQorICAgICAgICBzdWJ0ZXN0LCBtc2cgPSByZXN1bHQuc2tpcHBlZFswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgInNraXAgMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJ0ZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzdWJ0ZXN0LCB0ZXN0KQorICAgICAgICBzdWJ0ZXN0LCBtc2cgPSByZXN1bHQuc2tpcHBlZFsxXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1zZywgInNraXAgMiIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShzdWJ0ZXN0LCB1bml0dGVzdC5UZXN0Q2FzZSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vdChzdWJ0ZXN0LCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5za2lwcGVkWzJdLCAodGVzdCwgInNraXAgMyIpKQorCiAgICAgZGVmIHRlc3Rfc2tpcHBpbmdfZGVjb3JhdG9ycyhzZWxmKToKICAgICAgICAgb3BfdGFibGUgPSAoKHVuaXR0ZXN0LnNraXBVbmxlc3MsIEZhbHNlLCBUcnVlKSwKICAgICAgICAgICAgICAgICAgICAgKHVuaXR0ZXN0LnNraXBJZiwgVHJ1ZSwgRmFsc2UpKQpAQCAtOTUsNiArMTIwLDY0IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LmV4cGVjdGVkRmFpbHVyZXNbMF1bMF0sIHRlc3QpCiAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQogCisgICAgZGVmIHRlc3RfZXhwZWN0ZWRfZmFpbHVyZV93aXRoX3dyYXBwZWRfY2xhc3Moc2VsZik6CisgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIGRlZiB0ZXN0XzEoc2VsZik6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVlKEZhbHNlKQorCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0XzEiKQorICAgICAgICB0ZXN0LnJ1bihyZXN1bHQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZXZlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgIFsnc3RhcnRUZXN0JywgJ2FkZEV4cGVjdGVkRmFpbHVyZScsICdzdG9wVGVzdCddKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzWzBdWzBdLCB0ZXN0KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKworICAgIGRlZiB0ZXN0X2V4cGVjdGVkX2ZhaWx1cmVfd2l0aF93cmFwcGVkX3N1YmNsYXNzKHNlbGYpOgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgZGVmIHRlc3RfMShzZWxmKToKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoRmFsc2UpCisKKyAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICBjbGFzcyBCYXIoRm9vKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBldmVudHMgPSBbXQorICAgICAgICByZXN1bHQgPSBMb2dnaW5nUmVzdWx0KGV2ZW50cykKKyAgICAgICAgdGVzdCA9IEJhcigidGVzdF8xIikKKyAgICAgICAgdGVzdC5ydW4ocmVzdWx0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGV2ZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICBbJ3N0YXJ0VGVzdCcsICdhZGRFeHBlY3RlZEZhaWx1cmUnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1swXVswXSwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKKyAgICBkZWYgdGVzdF9leHBlY3RlZF9mYWlsdXJlX3N1YnRlc3RzKHNlbGYpOgorICAgICAgICAjIEEgZmFpbHVyZSBpbiBhbnkgc3VidGVzdCBjb3VudHMgYXMgdGhlIGV4cGVjdGVkIGZhaWx1cmUgb2YgdGhlCisgICAgICAgICMgd2hvbGUgdGVzdC4KKyAgICAgICAgY2xhc3MgRm9vKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAgICAgICAgIEB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUKKyAgICAgICAgICAgIGRlZiB0ZXN0X2RpZShzZWxmKToKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgb25lIHN1Y2NlZWRzCisgICAgICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoImhlbHAgbWUhIikKKyAgICAgICAgICAgICAgICB3aXRoIHNlbGYuc3ViVGVzdCgpOgorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgb25lIGRvZXNuJ3QgZ2V0IGV4ZWN1dGVkCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgic2hvdWxkbid0IGNvbWUgaGVyZSIpCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X2RpZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLCAnYWRkU3ViVGVzdFN1Y2Nlc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkRXhwZWN0ZWRGYWlsdXJlJywgJ3N0b3BUZXN0J10pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5leHBlY3RlZEZhaWx1cmVzKSwgMSkKKyAgICAgICAgc2VsZi5hc3NlcnRJcyhyZXN1bHQuZXhwZWN0ZWRGYWlsdXJlc1swXVswXSwgdGVzdCkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisKICAgICBkZWYgdGVzdF91bmV4cGVjdGVkX3N1Y2Nlc3Moc2VsZik6CiAgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgICAgICBAdW5pdHRlc3QuZXhwZWN0ZWRGYWlsdXJlCkBAIC0xMDgsNyArMTkxLDMxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLCAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXSkKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuZmFpbHVyZXMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsIFt0ZXN0XSkKLSAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlc3VsdC53YXNTdWNjZXNzZnVsKCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVzdWx0Lndhc1N1Y2Nlc3NmdWwoKSkKKworICAgIGRlZiB0ZXN0X3VuZXhwZWN0ZWRfc3VjY2Vzc19zdWJ0ZXN0cyhzZWxmKToKKyAgICAgICAgIyBTdWNjZXNzIGluIGFsbCBzdWJ0ZXN0cyBjb3VudHMgYXMgdGhlIHVuZXhwZWN0ZWQgc3VjY2VzcyBvZgorICAgICAgICAjIHRoZSB3aG9sZSB0ZXN0LgorICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgorICAgICAgICAgICAgQHVuaXR0ZXN0LmV4cGVjdGVkRmFpbHVyZQorICAgICAgICAgICAgZGVmIHRlc3RfZGllKHNlbGYpOgorICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgVGhpcyBvbmUgc3VjY2VlZHMKKyAgICAgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgICAgIHdpdGggc2VsZi5zdWJUZXN0KCk6CisgICAgICAgICAgICAgICAgICAgICMgU28gZG9lcyB0aGlzIG9uZQorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgIGV2ZW50cyA9IFtdCisgICAgICAgIHJlc3VsdCA9IExvZ2dpbmdSZXN1bHQoZXZlbnRzKQorICAgICAgICB0ZXN0ID0gRm9vKCJ0ZXN0X2RpZSIpCisgICAgICAgIHRlc3QucnVuKHJlc3VsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChldmVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgWydzdGFydFRlc3QnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkU3ViVGVzdFN1Y2Nlc3MnLCAnYWRkU3ViVGVzdFN1Y2Nlc3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAnYWRkVW5leHBlY3RlZFN1Y2Nlc3MnLCAnc3RvcFRlc3QnXSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuZmFpbHVyZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnVuZXhwZWN0ZWRTdWNjZXNzZXMsIFt0ZXN0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQud2FzU3VjY2Vzc2Z1bCgpKQogCiAgICAgZGVmIHRlc3Rfc2tpcF9kb2VzbnRfcnVuX3NldHVwKHNlbGYpOgogICAgICAgICBjbGFzcyBGb28odW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMTQ3LDMgKzI1NCw3IEBACiAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKFt0ZXN0XSkKICAgICAgICAgc3VpdGUucnVuKHJlc3VsdCkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQuc2tpcHBlZCwgWyh0ZXN0LCAidGVzdGluZyIpXSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rfc3VpdGUucHkKaW5kZXggMmRiOTc4ZC4uMDU1MWExNiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdF9zdWl0ZS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0X3N1aXRlLnB5CkBAIC0xLDcgKzEsOSBAQAogaW1wb3J0IHVuaXR0ZXN0CiAKK2ltcG9ydCBnYwogaW1wb3J0IHN5cwotZnJvbSAuc3VwcG9ydCBpbXBvcnQgTG9nZ2luZ1Jlc3VsdCwgVGVzdEVxdWFsaXR5CitpbXBvcnQgd2Vha3JlZgorZnJvbSB1bml0dGVzdC50ZXN0LnN1cHBvcnQgaW1wb3J0IExvZ2dpbmdSZXN1bHQsIFRlc3RFcXVhbGl0eQogCiAKICMjIyBTdXBwb3J0IGNvZGUgZm9yIFRlc3RfVGVzdFN1aXRlCkBAIC00OSw2ICs1MSw5IEBACiAgICAgICAgIHN1aXRlID0gdW5pdHRlc3QuVGVzdFN1aXRlKCkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKIAogICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKICAgICAjIC4uLgpAQCAtNjEsNiArNjYsOSBAQAogICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShbXSkKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDApCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMCkKIAogICAgICMgImNsYXNzIFRlc3RTdWl0ZShbdGVzdHNdKSIKICAgICAjIC4uLgpAQCAtODIsNiArOTAsMTQgQEAKICAgICAgICAgc3VpdGVfMyA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShzZXQoc3VpdGVfMSkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGVfMy5jb3VudFRlc3RDYXNlcygpLCAyKQogCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlXzEucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8xLmNvdW50VGVzdENhc2VzKCksIDIpCisgICAgICAgIHN1aXRlXzIucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8yLmNvdW50VGVzdENhc2VzKCksIDIpCisgICAgICAgIHN1aXRlXzMucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZV8zLmNvdW50VGVzdENhc2VzKCksIDIpCisKICAgICAjICJjbGFzcyBUZXN0U3VpdGUoW3Rlc3RzXSkiCiAgICAgIyAuLi4KICAgICAjICJJZiB0ZXN0cyBpcyBnaXZlbiwgaXQgbXVzdCBiZSBhbiBpdGVyYWJsZSBvZiBpbmRpdmlkdWFsIHRlc3QgY2FzZXMKQEAgLTk3LDYgKzExMyw5IEBACiAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUodGVzdHMoKSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCiAKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgIyMjIC9UZXN0cyBmb3IgVGVzdFN1aXRlLl9faW5pdF9fCkBAIC0xNDMsNiArMTYyLDkgQEAKICAgICAgICAgc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoKHRlc3QxLCB0ZXN0MikpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDIpCiAKICAgICAjICJSZXR1cm4gdGhlIG51bWJlciBvZiB0ZXN0cyByZXByZXNlbnRlZCBieSB0aGUgdGhpcyB0ZXN0IG9iamVjdC4KICAgICAjIC4uLnRoaXMgbWV0aG9kIGlzIGFsc28gaW1wbGVtZW50ZWQgYnkgdGhlIFRlc3RTdWl0ZSBjbGFzcywgd2hpY2ggY2FuCkBAIC0xNjAsNiArMTgyLDEwIEBACiAgICAgICAgIHBhcmVudCA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgodGVzdDMsIGNoaWxkLCBUZXN0MSgndGVzdDEnKSkpCiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwYXJlbnQuY291bnRUZXN0Q2FzZXMoKSwgNCkKKyAgICAgICAgIyBjb3VudFRlc3RDYXNlcygpIHN0aWxsIHdvcmtzIGFmdGVyIHRlc3RzIGFyZSBydW4KKyAgICAgICAgcGFyZW50LnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocGFyZW50LmNvdW50VGVzdENhc2VzKCksIDQpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2hpbGQuY291bnRUZXN0Q2FzZXMoKSwgMikKIAogICAgICMgIlJ1biB0aGUgdGVzdHMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc3VpdGUsIGNvbGxlY3RpbmcgdGhlIHJlc3VsdCBpbnRvCiAgICAgIyB0aGUgdGVzdCByZXN1bHQgb2JqZWN0IHBhc3NlZCBhcyByZXN1bHQuIgpAQCAtMjE4LDYgKzI0NCw5IEBACiAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpc3Qoc3VpdGUpLCBbdGVzdF0pCisgICAgICAgICMgY291bnRUZXN0Q2FzZXMoKSBzdGlsbCB3b3JrcyBhZnRlciB0ZXN0cyBhcmUgcnVuCisgICAgICAgIHN1aXRlLnJ1bih1bml0dGVzdC5UZXN0UmVzdWx0KCkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKIAogICAgICMgIkFkZCBhIC4uLiBUZXN0U3VpdGUgdG8gdGhlIHN1aXRlIgogICAgIGRlZiB0ZXN0X2FkZFRlc3RfX1Rlc3RTdWl0ZShzZWxmKToKQEAgLTIzMSw2ICsyNjAsOSBAQAogCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3VpdGUuY291bnRUZXN0Q2FzZXMoKSwgMSkKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KHN1aXRlKSwgW3N1aXRlXzJdKQorICAgICAgICAjIGNvdW50VGVzdENhc2VzKCkgc3RpbGwgd29ya3MgYWZ0ZXIgdGVzdHMgYXJlIHJ1bgorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN1aXRlLmNvdW50VGVzdENhc2VzKCksIDEpCiAKICAgICAjICJBZGQgYWxsIHRoZSB0ZXN0cyBmcm9tIGFuIGl0ZXJhYmxlIG9mIFRlc3RDYXNlIGFuZCBUZXN0U3VpdGUKICAgICAjIGluc3RhbmNlcyB0byB0aGlzIHRlc3Qgc3VpdGUuIgpAQCAtMzAwLDcgKzMzMiw1NCBAQAogICAgICAgICAjIHdoZW4gdGhlIGJ1ZyBpcyBmaXhlZCB0aGlzIGxpbmUgd2lsbCBub3QgY3Jhc2gKICAgICAgICAgc3VpdGUucnVuKHVuaXR0ZXN0LlRlc3RSZXN1bHQoKSkKIAorICAgIGRlZiB0ZXN0X3JlbW92ZV90ZXN0X2F0X2luZGV4KHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKIAorICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisKKyAgICAgICAgc3VpdGUuX3Rlc3RzID0gWzEsIDIsIDNdCisgICAgICAgIHN1aXRlLl9yZW1vdmVUZXN0QXRJbmRleCgxKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoWzEsIE5vbmUsIDNdLCBzdWl0ZS5fdGVzdHMpCisKKyAgICBkZWYgdGVzdF9yZW1vdmVfdGVzdF9hdF9pbmRleF9ub3RfaW5kZXhhYmxlKHNlbGYpOgorICAgICAgICBpZiBub3QgdW5pdHRlc3QuQmFzZVRlc3RTdWl0ZS5fY2xlYW51cDoKKyAgICAgICAgICAgIHJhaXNlIHVuaXR0ZXN0LlNraXBUZXN0KCJTdWl0ZSBjbGVhbnVwIGlzIGRpc2FibGVkIikKKworICAgICAgICBzdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZSgpCisgICAgICAgIHN1aXRlLl90ZXN0cyA9IE5vbmUKKworICAgICAgICAjIGlmIF9yZW1vdmVBdEluZGV4IHJhaXNlcyBmb3Igbm9uaXRlcmFibGVzIHRoaXMgbmV4dCBsaW5lIHdpbGwgYnJlYWsKKyAgICAgICAgc3VpdGUuX3JlbW92ZVRlc3RBdEluZGV4KDIpCisKKyAgICBkZWYgYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bihzZWxmLCBUZXN0U3VpdGVDbGFzcyk6CisgICAgICAgIGlmIG5vdCB1bml0dGVzdC5CYXNlVGVzdFN1aXRlLl9jbGVhbnVwOgorICAgICAgICAgICAgcmFpc2UgdW5pdHRlc3QuU2tpcFRlc3QoIlN1aXRlIGNsZWFudXAgaXMgZGlzYWJsZWQiKQorCisgICAgICAgIGNsYXNzIEZvbyh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgICAgICAgICBkZWYgdGVzdF9ub3RoaW5nKHNlbGYpOgorICAgICAgICAgICAgICAgIHBhc3MKKworICAgICAgICB0ZXN0ID0gRm9vKCd0ZXN0X25vdGhpbmcnKQorICAgICAgICB3cmVmID0gd2Vha3JlZi5yZWYodGVzdCkKKworICAgICAgICBzdWl0ZSA9IFRlc3RTdWl0ZUNsYXNzKFt3cmVmKCldKQorICAgICAgICBzdWl0ZS5ydW4odW5pdHRlc3QuVGVzdFJlc3VsdCgpKQorCisgICAgICAgIGRlbCB0ZXN0CisKKyAgICAgICAgIyBmb3IgdGhlIGJlbmVmaXQgb2Ygbm9uLXJlZmVyZW5jZSBjb3VudGluZyBpbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgZ2MuY29sbGVjdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5fdGVzdHMsIFtOb25lXSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUod3JlZigpKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX0Jhc2VUZXN0U3VpdGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0X2dhcmJhZ2VfY29sbGVjdF90ZXN0X2FmdGVyX3J1bih1bml0dGVzdC5CYXNlVGVzdFN1aXRlKQorCisgICAgZGVmIHRlc3RfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuX1Rlc3RTdWl0ZShzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRfZ2FyYmFnZV9jb2xsZWN0X3Rlc3RfYWZ0ZXJfcnVuKHVuaXR0ZXN0LlRlc3RTdWl0ZSkKIAogICAgIGRlZiB0ZXN0X2Jhc2V0ZXN0c3VpdGUoc2VsZik6CiAgICAgICAgIGNsYXNzIFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMzQzLDYgKzQyMiw3IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGVuKHJlc3VsdC5lcnJvcnMpLCAxKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihyZXN1bHQuZmFpbHVyZXMpLCAwKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC50ZXN0c1J1biwgMikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdWl0ZS5jb3VudFRlc3RDYXNlcygpLCAyKQogCiAKICAgICBkZWYgdGVzdF9vdmVycmlkaW5nX2NhbGwoc2VsZik6CkBAIC0zNjMsNiArNDQzLDUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShyZXN1bHQuX3Rlc3RSdW5FbnRlcmVkKQogCiAKLQogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWluKCkKZGlmZiAtLWdpdCBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL19fbWFpbl9fLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svX19tYWluX18ucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjNjMzYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL19fbWFpbl9fLnB5CkBAIC0wLDAgKzEsMTggQEAKK2ltcG9ydCBvcworaW1wb3J0IHVuaXR0ZXN0CisKKworZGVmIGxvYWRfdGVzdHMobG9hZGVyLCBzdGFuZGFyZF90ZXN0cywgcGF0dGVybik6CisgICAgIyB0b3AgbGV2ZWwgZGlyZWN0b3J5IGNhY2hlZCBvbiBsb2FkZXIgaW5zdGFuY2UKKyAgICB0aGlzX2RpciA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKKyAgICBwYXR0ZXJuID0gcGF0dGVybiBvciAidGVzdCoucHkiCisgICAgIyBXZSBhcmUgaW5zaWRlIHVuaXR0ZXN0LnRlc3QudGVzdG1vY2ssIHNvIHRoZSB0b3AtbGV2ZWwgaXMgdGhyZWUgbm90Y2hlcyB1cAorICAgIHRvcF9sZXZlbF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZSh0aGlzX2RpcikpKQorICAgIHBhY2thZ2VfdGVzdHMgPSBsb2FkZXIuZGlzY292ZXIoc3RhcnRfZGlyPXRoaXNfZGlyLCBwYXR0ZXJuPXBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BfbGV2ZWxfZGlyPXRvcF9sZXZlbF9kaXIpCisgICAgc3RhbmRhcmRfdGVzdHMuYWRkVGVzdHMocGFja2FnZV90ZXN0cykKKyAgICByZXR1cm4gc3RhbmRhcmRfdGVzdHMKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdGNhbGxhYmxlLnB5CmluZGV4IDdiMmRkMDAuLjUzOTBhNGUgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RjYWxsYWJsZS5weQorKysgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0Y2FsbGFibGUucHkKQEAgLTE0NSwzICsxNDUsNyBAQAogICAgICAgICBtb2NrLndpYmJsZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgpCiAKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrLndpYmJsZSwgJ3NvbWUnLCAgJ2FyZ3MnKQorCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0aGVscGVycy5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RoZWxwZXJzLnB5CmluZGV4IGEzNjJhMmYuLjFkYmMwYjYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RoZWxwZXJzLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RoZWxwZXJzLnB5CkBAIC0zMzcsOSArMzM3LDEwIEBACiAKIAogICAgIGRlZiB0ZXN0X2Jhc2ljKHNlbGYpOgotICAgICAgICBmb3Igc3BlYyBpbiAoU29tZUNsYXNzLCBTb21lQ2xhc3MoKSk6Ci0gICAgICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKHNwZWMpCi0gICAgICAgICAgICBzZWxmLl9jaGVja19zb21lY2xhc3NfbW9jayhtb2NrKQorICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKFNvbWVDbGFzcykKKyAgICAgICAgc2VsZi5fY2hlY2tfc29tZWNsYXNzX21vY2sobW9jaykKKyAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhTb21lQ2xhc3MoKSkKKyAgICAgICAgc2VsZi5fY2hlY2tfc29tZWNsYXNzX21vY2sobW9jaykKIAogCiAgICAgZGVmIHRlc3RfY3JlYXRlX2F1dG9zcGVjX3JldHVybl92YWx1ZShzZWxmKToKQEAgLTU3NiwxMCArNTc3LDEwIEBACiAKICAgICBkZWYgdGVzdF9zcGVjX2luaGVyaXRhbmNlX2Zvcl9jbGFzc2VzKHNlbGYpOgogICAgICAgICBjbGFzcyBGb28ob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBhKHNlbGYpOgorICAgICAgICAgICAgZGVmIGEoc2VsZiwgeCk6CiAgICAgICAgICAgICAgICAgcGFzcwogICAgICAgICAgICAgY2xhc3MgQmFyKG9iamVjdCk6Ci0gICAgICAgICAgICAgICAgZGVmIGYoc2VsZik6CisgICAgICAgICAgICAgICAgZGVmIGYoc2VsZiwgeSk6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKIAogICAgICAgICBjbGFzc19tb2NrID0gY3JlYXRlX2F1dG9zcGVjKEZvbykKQEAgLTU4NywyNiArNTg4LDMwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb3QoY2xhc3NfbW9jaywgY2xhc3NfbW9jaygpKQogCiAgICAgICAgIGZvciB0aGlzX21vY2sgaW4gY2xhc3NfbW9jaywgY2xhc3NfbW9jaygpOgotICAgICAgICAgICAgdGhpc19tb2NrLmEoKQotICAgICAgICAgICAgdGhpc19tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKCkKLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdGhpc19tb2NrLmEsICdmb28nKQorICAgICAgICAgICAgdGhpc19tb2NrLmEoeD01KQorICAgICAgICAgICAgdGhpc19tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKHg9NSkKKyAgICAgICAgICAgIHRoaXNfbW9jay5hLmFzc2VydF9jYWxsZWRfd2l0aCg1KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0aGlzX21vY2suYSwgJ2ZvbycsICdiYXInKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIHRoaXNfbW9jaywgJ2InKQogCiAgICAgICAgIGluc3RhbmNlX21vY2sgPSBjcmVhdGVfYXV0b3NwZWMoRm9vKCkpCi0gICAgICAgIGluc3RhbmNlX21vY2suYSgpCi0gICAgICAgIGluc3RhbmNlX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoKQotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluc3RhbmNlX21vY2suYSwgJ2ZvbycpCisgICAgICAgIGluc3RhbmNlX21vY2suYSg1KQorICAgICAgICBpbnN0YW5jZV9tb2NrLmEuYXNzZXJ0X2NhbGxlZF93aXRoKDUpCisgICAgICAgIGluc3RhbmNlX21vY2suYS5hc3NlcnRfY2FsbGVkX3dpdGgoeD01KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluc3RhbmNlX21vY2suYSwgJ2ZvbycsICdiYXInKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwgZ2V0YXR0ciwgaW5zdGFuY2VfbW9jaywgJ2InKQogCiAgICAgICAgICMgVGhlIHJldHVybiB2YWx1ZSBpc24ndCBpc24ndCBjYWxsYWJsZQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluc3RhbmNlX21vY2spCiAKLSAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZigpCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyLmYuYXNzZXJ0X2NhbGxlZF93aXRoKCkKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIuZig2KQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mLmFzc2VydF9jYWxsZWRfd2l0aCg2KQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhci5mLmFzc2VydF9jYWxsZWRfd2l0aCh5PTYpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEF0dHJpYnV0ZUVycm9yLCBnZXRhdHRyLCBpbnN0YW5jZV9tb2NrLkJhciwgJ2cnKQogCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZigpCi0gICAgICAgIGluc3RhbmNlX21vY2suQmFyKCkuZi5hc3NlcnRfY2FsbGVkX3dpdGgoKQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYoNikKKyAgICAgICAgaW5zdGFuY2VfbW9jay5CYXIoKS5mLmFzc2VydF9jYWxsZWRfd2l0aCg2KQorICAgICAgICBpbnN0YW5jZV9tb2NrLkJhcigpLmYuYXNzZXJ0X2NhbGxlZF93aXRoKHk9NikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXR0cmlidXRlRXJyb3IsIGdldGF0dHIsIGluc3RhbmNlX21vY2suQmFyKCksICdnJykKIAogCkBAIC02NjMsMTIgKzY2OCwxNSBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2spCiAgICAgICAgIG1vY2soMSwgMikKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgMikKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgoMSwgYj0yKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MikKIAogICAgICAgICBmLmYgPSBmCiAgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoZikKICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCBtb2NrLmYpCiAgICAgICAgIG1vY2suZigzLCA0KQogICAgICAgICBtb2NrLmYuYXNzZXJ0X2NhbGxlZF93aXRoKDMsIDQpCisgICAgICAgIG1vY2suZi5hc3NlcnRfY2FsbGVkX3dpdGgoYT0zLCBiPTQpCiAKIAogICAgIGRlZiB0ZXN0X3NraXBfYXR0cmlidXRlZXJyb3JzKHNlbGYpOgpAQCAtNzA0LDkgKzcxMiwxMyBAQAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2spCiAgICAgICAgIG1vY2soMSkKICAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGE9MSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsIDIpCiAKICAgICAgICAgbW9jayg0LCA1KQogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCg0LCA1KQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTQsIGI9NSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoLCBhPTUsIGI9NCkKIAogCiAgICAgZGVmIHRlc3RfY2xhc3Nfd2l0aF9ub19pbml0KHNlbGYpOgpAQCAtNzE5LDI0ICs3MzEsMjcgQEAKIAogICAgIGRlZiB0ZXN0X3NpZ25hdHVyZV9jYWxsYWJsZShzZWxmKToKICAgICAgICAgY2xhc3MgQ2FsbGFibGUob2JqZWN0KToKLSAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCB4LCB5KToKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgICAgICBkZWYgX19jYWxsX18oc2VsZiwgYSk6CiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoQ2FsbGFibGUpCi0gICAgICAgIG1vY2soKQotICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKCkKKyAgICAgICAgbW9jaygxLCAyKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKDEsIDIpCisgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoeD0xLCB5PTIpCiAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbW9jaywgJ2EnKQogCi0gICAgICAgIGluc3RhbmNlID0gbW9jaygpCisgICAgICAgIGluc3RhbmNlID0gbW9jaygxLCAyKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGluc3RhbmNlKQogICAgICAgICBpbnN0YW5jZShhPSdhJykKKyAgICAgICAgaW5zdGFuY2UuYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoJ2EnKQogICAgICAgICBpbnN0YW5jZS5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aChhPSdhJykKICAgICAgICAgaW5zdGFuY2UoJ2EnKQogICAgICAgICBpbnN0YW5jZS5hc3NlcnRfY2FsbGVkX3dpdGgoJ2EnKQorICAgICAgICBpbnN0YW5jZS5hc3NlcnRfY2FsbGVkX3dpdGgoYT0nYScpCiAKLSAgICAgICAgbW9jayA9IGNyZWF0ZV9hdXRvc3BlYyhDYWxsYWJsZSgpKQorICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKENhbGxhYmxlKDEsIDIpKQogICAgICAgICBtb2NrKGE9J2EnKQogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGE9J2EnKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIG1vY2spCkBAIC03NzksNyArNzk0LDExIEBACiAgICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgIGEgPSBjcmVhdGVfYXV0b3NwZWMoRm9vKQorICAgICAgICBhLmYoMTApCisgICAgICAgIGEuZi5hc3NlcnRfY2FsbGVkX3dpdGgoMTApCisgICAgICAgIGEuZi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZj0xMCkKICAgICAgICAgYS5mKHNlbGY9MTApCisgICAgICAgIGEuZi5hc3NlcnRfY2FsbGVkX3dpdGgoMTApCiAgICAgICAgIGEuZi5hc3NlcnRfY2FsbGVkX3dpdGgoc2VsZj0xMCkKIAogCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bWFnaWNtZXRob2RzLnB5IGIvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdG1hZ2ljbWV0aG9kcy5weQppbmRleCA1ZmYxNThkLi5lMDVjNmUwIDEwMDY0NAotLS0gYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bWFnaWNtZXRob2RzLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RtYWdpY21ldGhvZHMucHkKQEAgLTEyNiw2ICsxMjYsMzEgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCg3ICsgbW9jaywgbW9jaykKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLnZhbHVlLCAxNikKIAorICAgIGRlZiB0ZXN0X2RpdmlzaW9uKHNlbGYpOgorICAgICAgICBvcmlnaW5hbCA9IG1vY2sgPSBNb2NrKCkKKyAgICAgICAgbW9jay52YWx1ZSA9IDMyCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgbGFtYmRhOiBtb2NrIC8gMikKKworICAgICAgICBkZWYgdHJ1ZWRpdihzZWxmLCBvdGhlcik6CisgICAgICAgICAgICBtb2NrLnZhbHVlIC89IG90aGVyCisgICAgICAgICAgICByZXR1cm4gc2VsZgorICAgICAgICBtb2NrLl9fdHJ1ZWRpdl9fID0gdHJ1ZWRpdgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2sgLyAyLCBtb2NrKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2sudmFsdWUsIDE2KQorCisgICAgICAgIGRlbCBtb2NrLl9fdHJ1ZWRpdl9fCisgICAgICAgIGRlZiBpdHJ1ZWRpdihtb2NrKToKKyAgICAgICAgICAgIG1vY2sgLz0gNAorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGl0cnVlZGl2LCBtb2NrKQorICAgICAgICBtb2NrLl9faXRydWVkaXZfXyA9IHRydWVkaXYKKyAgICAgICAgbW9jayAvPSA4CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jaywgb3JpZ2luYWwpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay52YWx1ZSwgMikKKworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGxhbWJkYTogOCAvIG1vY2spCisgICAgICAgIG1vY2suX19ydHJ1ZWRpdl9fID0gdHJ1ZWRpdgorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAuNSAvIG1vY2ssIG1vY2spCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay52YWx1ZSwgNCkKIAogICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKQEAgLTM5OSw1ICs0MjQsMzUgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaXN0KG0pLCBbXSkKIAogCisgICAgZGVmIHRlc3RfZGl2bW9kX2FuZF9yZGl2bW9kKHNlbGYpOgorICAgICAgICBtID0gTWFnaWNNb2NrKCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGRpdm1vZCg1LCBtKSwgTWFnaWNNb2NrKQorICAgICAgICBtLl9fZGl2bW9kX18ucmV0dXJuX3ZhbHVlID0gKDIsIDEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZGl2bW9kKG0sIDIpLCAoMiwgMSkpCisgICAgICAgIG0gPSBNYWdpY01vY2soKQorICAgICAgICBmb28gPSBkaXZtb2QoMiwgbSkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZvbywgTWFnaWNNb2NrKQorICAgICAgICBmb29fZGlyZWN0ID0gbS5fX2Rpdm1vZF9fKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmb29fZGlyZWN0LCBNYWdpY01vY2spCisgICAgICAgIGJhciA9IGRpdm1vZChtLCAyKQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoYmFyLCBNYWdpY01vY2spCisgICAgICAgIGJhcl9kaXJlY3QgPSBtLl9fcmRpdm1vZF9fKDIpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShiYXJfZGlyZWN0LCBNYWdpY01vY2spCisKKyAgICAjIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUyMzMxMAorICAgICMgQ2hlY2sgaWYgeW91IGNhbiBjaGFuZ2UgYmVoYXZpb3VyIG9mIG1hZ2ljIG1ldGhkcyBpbiBNYWdpY01vY2sgaW5pdAorICAgIGRlZiB0ZXN0X21hZ2ljX2luX2luaXRpYWxpemF0aW9uKHNlbGYpOgorICAgICAgICBtID0gTWFnaWNNb2NrKCoqeydfX3N0cl9fLnJldHVybl92YWx1ZSc6ICIxMiJ9KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0cihtKSwgIjEyIikKKworICAgIGRlZiB0ZXN0X2NoYW5naW5nX21hZ2ljX3NldF9pbl9pbml0aWFsaXphdGlvbihzZWxmKToKKyAgICAgICAgbSA9IE1hZ2ljTW9jaygqKnsnX19zdHJfXy5yZXR1cm5fdmFsdWUnOiAiMTIifSkKKyAgICAgICAgbS5fX3N0cl9fLnJldHVybl92YWx1ZSA9ICIxMyIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzdHIobSksICIxMyIpCisgICAgICAgIG0gPSBNYWdpY01vY2soKip7J19fc3RyX18ucmV0dXJuX3ZhbHVlJzogIjEyIn0pCisgICAgICAgIG0uY29uZmlndXJlX21vY2soKip7J19fc3RyX18ucmV0dXJuX3ZhbHVlJzogIjE0In0pCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3RyKG0pLCAiMTQiKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0bW9jay5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5CmluZGV4IGNlZjU0MDUuLmNmMTY3M2MgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3Rtb2NrLnB5CkBAIC0xLDUgKzEsNiBAQAogaW1wb3J0IGNvcHkKIGltcG9ydCBzeXMKK2ltcG9ydCB0ZW1wZmlsZQogCiBpbXBvcnQgdW5pdHRlc3QKIGZyb20gdW5pdHRlc3QudGVzdC50ZXN0bW9jay5zdXBwb3J0IGltcG9ydCBpc19pbnN0YW5jZQpAQCAtMjUsNiArMjYsMTggQEAKICAgICBfX25leHRfXyA9IG5leHQKIAogCitjbGFzcyBTb21ldGhpbmcob2JqZWN0KToKKyAgICBkZWYgbWV0aChzZWxmLCBhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgY21ldGgoY2xzLCBhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICBwYXNzCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIHNtZXRoKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgIHBhc3MKKwogCiBjbGFzcyBNb2NrVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKQEAgLTE0Miw2ICsxNTUsMjQgQEAKICAgICAgICAgbW9jayA9IE1vY2soc2lkZV9lZmZlY3Q9c2lkZV9lZmZlY3QsIHJldHVybl92YWx1ZT1zZW50aW5lbC5SRVRVUk4pCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jaygpLCBzZW50aW5lbC5SRVRVUk4pCiAKKyAgICBkZWYgdGVzdF9hdXRvc3BlY19zaWRlX2VmZmVjdChzZWxmKToKKyAgICAgICAgIyBUZXN0IGZvciBpc3N1ZTE3ODI2CisgICAgICAgIHJlc3VsdHMgPSBbMSwgMiwgM10KKyAgICAgICAgZGVmIGVmZmVjdCgpOgorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHMucG9wKCkKKyAgICAgICAgZGVmIGYoKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gY3JlYXRlX2F1dG9zcGVjKGYpCisgICAgICAgIG1vY2suc2lkZV9lZmZlY3QgPSBbMSwgMiwgM10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChbbW9jaygpLCBtb2NrKCksIG1vY2soKV0sIFsxLCAyLCAzXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInNpZGUgZWZmZWN0IG5vdCB1c2VkIGNvcnJlY3RseSBpbiBjcmVhdGVfYXV0b3NwZWMiKQorICAgICAgICAjIFRlc3Qgd2hlcmUgc2lkZSBlZmZlY3QgaXMgYSBjYWxsYWJsZQorICAgICAgICByZXN1bHRzID0gWzEsIDIsIDNdCisgICAgICAgIG1vY2sgPSBjcmVhdGVfYXV0b3NwZWMoZikKKyAgICAgICAgbW9jay5zaWRlX2VmZmVjdCA9IGVmZmVjdAorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFttb2NrKCksIG1vY2soKSwgbW9jaygpXSwgWzMsIDIsIDFdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FsbGFibGUgc2lkZSBlZmZlY3Qgbm90IHVzZWQgY29ycmVjdGx5IikKIAogICAgIEB1bml0dGVzdC5za2lwVW5sZXNzKCdqYXZhJyBpbiBzeXMucGxhdGZvcm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIHRlc3Qgb25seSBhcHBsaWVzIHRvIEp5dGhvbicpCkBAIC0yMDcsNiArMjM4LDkgQEAKICAgICAgICAgIyB1c2VkIHRvIGNhdXNlIHJlY3Vyc2lvbgogICAgICAgICBtb2NrLnJlc2V0X21vY2soKQogCisgICAgZGVmIHRlc3RfcmVzZXRfbW9ja19vbl9tb2NrX29wZW5faXNzdWVfMTg2MjIoc2VsZik6CisgICAgICAgIGEgPSBtb2NrLm1vY2tfb3BlbigpCisgICAgICAgIGEucmVzZXRfbW9jaygpCiAKICAgICBkZWYgdGVzdF9jYWxsKHNlbGYpOgogICAgICAgICBtb2NrID0gTW9jaygpCkBAIC0yNTcsNiArMjkxLDkgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtb2NrLmNhbGxfYXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAoKHNlbnRpbmVsLkFyZywpLCB7Imt3Ijogc2VudGluZWwuS3dhcmd9KSkKIAorICAgICAgICAjIENvbXBhcmluZyBjYWxsX2FyZ3MgdG8gYSBsb25nIHNlcXVlbmNlIHNob3VsZCBub3QgcmFpc2UKKyAgICAgICAgIyBhbiBleGNlcHRpb24uIFNlZSBpc3N1ZSAyNDg1Ny4KKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZShtb2NrLmNhbGxfYXJncyA9PSAiYSBsb25nIHNlcXVlbmNlIikKIAogICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfd2l0aChzZWxmKToKICAgICAgICAgbW9jayA9IE1vY2soKQpAQCAtMjczLDYgKzMxMCw0MyBAQAogICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzLCBhPSdmaXNoJywgYj0nbm90aGluZycpCiAKIAorICAgIGRlZiB0ZXN0X2Fzc2VydF9jYWxsZWRfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aCgxLCAyLCAzKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MiwgYz0zKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGI9MywgYz0yKQorICAgICAgICAjIEV4cGVjdGVkIGNhbGwgZG9lc24ndCBtYXRjaCB0aGUgc3BlYydzIHNpZ25hdHVyZQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKSBhcyBjbToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKGU9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbi5fX2NhdXNlX18sIFR5cGVFcnJvcikKKworCisgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF93aXRoX21ldGhvZF9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgX2NoZWNrKG1vY2spOgorICAgICAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoKDEsIDIsIDMpCisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfd2l0aChhPTEsIGI9MiwgYz0zKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcoKS5tZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcuY21ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZygpLmNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1Tb21ldGhpbmcuc21ldGgpCisgICAgICAgIF9jaGVjayhtb2NrKQorICAgICAgICBtb2NrID0gTW9jayhzcGVjPVNvbWV0aGluZygpLnNtZXRoKQorICAgICAgICBfY2hlY2sobW9jaykKKworCiAgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoc2VsZik6CiAgICAgICAgIG1vY2sgPSBNb2NrKCkKICAgICAgICAgbW9jaygpCkBAIC0yOTcsNiArMzcxLDI5IEBACiAgICAgICAgICkKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGhfZnVuY3Rpb25fc3BlYyhzZWxmKToKKyAgICAgICAgZGVmIGYoYSwgYiwgYywgZD1Ob25lKToKKyAgICAgICAgICAgIHBhc3MKKworICAgICAgICBtb2NrID0gTW9jayhzcGVjPWYpCisKKyAgICAgICAgbW9jaygxLCBiPTIsIGM9MykKKyAgICAgICAgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCgxLCAyLCAzKQorICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGE9MSwgYj0yLCBjPTMpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBiPTMsIGM9MikKKyAgICAgICAgIyBFeHBlY3RlZCBjYWxsIGRvZXNuJ3QgbWF0Y2ggdGhlIHNwZWMncyBzaWduYXR1cmUKKyAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvcikgYXMgY206CisgICAgICAgICAgICBtb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKGU9OCkKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGNtLmV4Y2VwdGlvbi5fX2NhdXNlX18sIFR5cGVFcnJvcikKKyAgICAgICAgIyBNb2NrIGNhbGxlZCBtb3JlIHRoYW4gb25jZSA9PiBhbHdheXMgZmFpbHMKKyAgICAgICAgbW9jayg0LCA1LCA2KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBc3NlcnRpb25FcnJvciwgbW9jay5hc3NlcnRfY2FsbGVkX29uY2Vfd2l0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMiwgMykKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIG1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDUsIDYpCisKKwogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9hY2Nlc3NfcmV0dXJuc19tb2NrcyhzZWxmKToKICAgICAgICAgbW9jayA9IE1vY2soKQogICAgICAgICBzb21ldGhpbmcgPSBtb2NrLnNvbWV0aGluZwpAQCAtOTk1LDYgKzEwOTIsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICkKIAogCisgICAgZGVmIHRlc3RfYXNzZXJ0X2hhc19jYWxsc193aXRoX2Z1bmN0aW9uX3NwZWMoc2VsZik6CisgICAgICAgIGRlZiBmKGEsIGIsIGMsIGQ9Tm9uZSk6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgbW9jayA9IE1vY2soc3BlYz1mKQorCisgICAgICAgIG1vY2soMSwgYj0yLCBjPTMpCisgICAgICAgIG1vY2soNCwgNSwgYz02LCBkPTcpCisgICAgICAgIG1vY2soMTAsIDExLCBjPTEyKQorICAgICAgICBjYWxscyA9IFsKKyAgICAgICAgICAgICgnJywgKDEsIDIsIDMpLCB7fSksCisgICAgICAgICAgICAoJycsICg0LCA1LCA2KSwgeydkJzogN30pLAorICAgICAgICAgICAgKCgxMCwgMTEsIDEyKSwge30pLAorICAgICAgICAgICAgXQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMpCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxscywgYW55X29yZGVyPVRydWUpCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1sxOl0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1sxOl0sIGFueV9vcmRlcj1UcnVlKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSkKKyAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzWzotMV0sIGFueV9vcmRlcj1UcnVlKQorICAgICAgICAjIFJldmVyc2VkIG9yZGVyCisgICAgICAgIGNhbGxzID0gbGlzdChyZXZlcnNlZChjYWxscykpCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfaGFzX2NhbGxzKGNhbGxzKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHMsIGFueV9vcmRlcj1UcnVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1sxOl0pCisgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1sxOl0sIGFueV9vcmRlcj1UcnVlKQorICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yKToKKyAgICAgICAgICAgIG1vY2suYXNzZXJ0X2hhc19jYWxscyhjYWxsc1s6LTFdKQorICAgICAgICBtb2NrLmFzc2VydF9oYXNfY2FsbHMoY2FsbHNbOi0xXSwgYW55X29yZGVyPVRydWUpCisKKwogICAgIGRlZiB0ZXN0X2Fzc2VydF9hbnlfY2FsbChzZWxmKToKICAgICAgICAgbW9jayA9IE1vY2soKQogICAgICAgICBtb2NrKDEsIDIpCkBAIC0xMDIxLDYgKzExNTEsMjYgQEAKICAgICAgICAgKQogCiAKKyAgICBkZWYgdGVzdF9hc3NlcnRfYW55X2NhbGxfd2l0aF9mdW5jdGlvbl9zcGVjKHNlbGYpOgorICAgICAgICBkZWYgZihhLCBiLCBjLCBkPU5vbmUpOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIG1vY2sgPSBNb2NrKHNwZWM9ZikKKworICAgICAgICBtb2NrKDEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrKDQsIDUsIGM9NiwgZD03KQorICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbCgxLCAyLCAzKQorICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbChhPTEsIGI9MiwgYz0zKQorICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbCg0LCA1LCA2LCA3KQorICAgICAgICBtb2NrLmFzc2VydF9hbnlfY2FsbChhPTQsIGI9NSwgYz02LCBkPTcpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKEFzc2VydGlvbkVycm9yLCBtb2NrLmFzc2VydF9hbnlfY2FsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYj0zLCBjPTIpCisgICAgICAgICMgRXhwZWN0ZWQgY2FsbCBkb2Vzbid0IG1hdGNoIHRoZSBzcGVjJ3Mgc2lnbmF0dXJlCisgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IpIGFzIGNtOgorICAgICAgICAgICAgbW9jay5hc3NlcnRfYW55X2NhbGwoZT04KQorICAgICAgICBzZWxmLmFzc2VydElzSW5zdGFuY2UoY20uZXhjZXB0aW9uLl9fY2F1c2VfXywgVHlwZUVycm9yKQorCisKICAgICBkZWYgdGVzdF9tb2NrX2NhbGxzX2NyZWF0ZV9hdXRvc3BlYyhzZWxmKToKICAgICAgICAgZGVmIGYoYSwgYik6CiAgICAgICAgICAgICBwYXNzCkBAIC0xMDM5LDYgKzExODksMTAgQEAKICAgICAgICAgICAgICAgICBmdW5jLm1vY2tfY2FsbHMsIFtjYWxsKDEsIDIpLCBjYWxsKDMsIDQpXQogICAgICAgICAgICAgKQogCisgICAgI0lzc3VlMjEyMjIKKyAgICBkZWYgdGVzdF9jcmVhdGVfYXV0b3NwZWNfd2l0aF9uYW1lKHNlbGYpOgorICAgICAgICBtID0gbW9jay5jcmVhdGVfYXV0b3NwZWMob2JqZWN0KCksIG5hbWU9J3N3ZWV0X2Z1bmMnKQorICAgICAgICBzZWxmLmFzc2VydEluKCdzd2VldF9mdW5jJywgcmVwcihtKSkKIAogICAgIGRlZiB0ZXN0X21vY2tfYWRkX3NwZWMoc2VsZik6CiAgICAgICAgIGNsYXNzIF9PbmUob2JqZWN0KToKQEAgLTExNzYsMjAgKzEzMzAsMzIgQEAKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5tb2NrX2NhbGxzLCBbY2FsbC5fX2ludF9fKCksIGNhbGwuX19mbG9hdF9fKCldKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChtLm1ldGhvZF9jYWxscywgW10pCiAKKyAgICBkZWYgdGVzdF9tb2NrX29wZW5fcmV1c2VfaXNzdWVfMjE3NTAoc2VsZik6CisgICAgICAgIG1vY2tlZF9vcGVuID0gbW9jay5tb2NrX29wZW4ocmVhZF9kYXRhPSdkYXRhJykKKyAgICAgICAgZjEgPSBtb2NrZWRfb3BlbignYS1uYW1lJykKKyAgICAgICAgZjFfZGF0YSA9IGYxLnJlYWQoKQorICAgICAgICBmMiA9IG1vY2tlZF9vcGVuKCdhbm90aGVyLW5hbWUnKQorICAgICAgICBmMl9kYXRhID0gZjIucmVhZCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZjFfZGF0YSwgZjJfZGF0YSkKIAotICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKLSAgICAgICAgIyB0aGlzIGJlaGF2aW91ciBpc24ndCAqdXNlZnVsKiwgYnV0IGF0IGxlYXN0IGl0J3Mgbm93IHRlc3RlZC4uLgotICAgICAgICBmb3IgS2xhc3MgaW4gTW9jaywgTWFnaWNNb2NrLCBOb25DYWxsYWJsZU1hZ2ljTW9jaywgTm9uQ2FsbGFibGVNb2NrOgotICAgICAgICAgICAgbSA9IEtsYXNzKCkKLSAgICAgICAgICAgIG9yaWdpbmFsID0gbS5mb28KLSAgICAgICAgICAgIG0uZm9vID0gMwotICAgICAgICAgICAgZGVsIG0uZm9vCi0gICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG0uZm9vLCBvcmlnaW5hbCkKKyAgICBkZWYgdGVzdF9tb2NrX29wZW5fd3JpdGUoc2VsZik6CisgICAgICAgICMgVGVzdCBleGNlcHRpb24gaW4gZmlsZSB3cml0aW5nIHdyaXRlKCkKKyAgICAgICAgbW9ja19uYW1lZHRlbXAgPSBtb2NrLm1vY2tfb3Blbihtb2NrLk1hZ2ljTW9jayhuYW1lPSdKTFYnKSkKKyAgICAgICAgd2l0aCBtb2NrLnBhdGNoKCd0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUnLCBtb2NrX25hbWVkdGVtcCk6CisgICAgICAgICAgICBtb2NrX2ZpbGVoYW5kbGUgPSBtb2NrX25hbWVkdGVtcC5yZXR1cm5fdmFsdWUKKyAgICAgICAgICAgIG1vY2tfd3JpdGUgPSBtb2NrX2ZpbGVoYW5kbGUud3JpdGUKKyAgICAgICAgICAgIG1vY2tfd3JpdGUuc2lkZV9lZmZlY3QgPSBPU0Vycm9yKCdUZXN0IDIgRXJyb3InKQorICAgICAgICAgICAgZGVmIGF0dGVtcHQoKToKKyAgICAgICAgICAgICAgICB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKS53cml0ZSgnYXNkJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKE9TRXJyb3IsIGF0dGVtcHQpCiAKLSAgICAgICAgICAgIG5ldyA9IG0uZm9vID0gTW9jaygpCi0gICAgICAgICAgICBkZWwgbS5mb28KLSAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobS5mb28sIG5ldykKLQorICAgIGRlZiB0ZXN0X21vY2tfb3Blbl9hbHRlcl9yZWFkbGluZShzZWxmKToKKyAgICAgICAgbW9wZW4gPSBtb2NrLm1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFybicpCisgICAgICAgIG1vcGVuLnJldHVybl92YWx1ZS5yZWFkbGluZS5zaWRlX2VmZmVjdCA9IGxhbWJkYSAqYXJnczonYWJjJworICAgICAgICBmaXJzdCA9IG1vcGVuKCkucmVhZGxpbmUoKQorICAgICAgICBzZWNvbmQgPSBtb3BlbigpLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJywgZmlyc3QpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ2FiYycsIHNlY29uZCkKIAogICAgIGRlZiB0ZXN0X21vY2tfcGFyZW50cyhzZWxmKToKICAgICAgICAgZm9yIEtsYXNzIGluIE1vY2ssIE1hZ2ljTW9jazoKQEAgLTEyNTQsNyArMTQyMCw4IEBACiAKIAogICAgIGRlZiB0ZXN0X2F0dHJpYnV0ZV9kZWxldGlvbihzZWxmKToKLSAgICAgICAgZm9yIG1vY2sgaW4gTW9jaygpLCBNYWdpY01vY2soKToKKyAgICAgICAgZm9yIG1vY2sgaW4gKE1vY2soKSwgTWFnaWNNb2NrKCksIE5vbkNhbGxhYmxlTWFnaWNNb2NrKCksCisgICAgICAgICAgICAgICAgICAgICBOb25DYWxsYWJsZU1vY2soKSk6CiAgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUoaGFzYXR0cihtb2NrLCAnbScpKQogCiAgICAgICAgICAgICBkZWwgbW9jay5tCkBAIC0xMjc0LDYgKzE0NDEsNSBAQAogICAgICAgICAgICAgbW9jay5mb28KIAogCi0KIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkgYi9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0cGF0Y2gucHkKaW5kZXggYzEwOTFiNC4uYjUxNmY0MiAxMDA2NDQKLS0tIGEvTGliL3VuaXR0ZXN0L3Rlc3QvdGVzdG1vY2svdGVzdHBhdGNoLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3RwYXRjaC5weQpAQCAtMTIsNyArMTIsNyBAQAogZnJvbSB1bml0dGVzdC5tb2NrIGltcG9ydCAoCiAgICAgTm9uQ2FsbGFibGVNb2NrLCBDYWxsYWJsZU1peGluLCBwYXRjaCwgc2VudGluZWwsCiAgICAgTWFnaWNNb2NrLCBNb2NrLCBOb25DYWxsYWJsZU1hZ2ljTW9jaywgcGF0Y2gsIF9wYXRjaCwKLSAgICBERUZBVUxULCBjYWxsLCBfZ2V0X3RhcmdldAorICAgIERFRkFVTFQsIGNhbGwsIF9nZXRfdGFyZ2V0LCBfcGF0Y2gKICkKIAogCkBAIC0xNzc5LDYgKzE3NzksMjIgQEAKICAgICAgICAgcGF0Y2hlZCgpCiAgICAgICAgIHNlbGYuYXNzZXJ0SXMob3MucGF0aCwgcGF0aCkKIAorICAgIGRlZiB0ZXN0X3N0b3BhbGxfbGlmbyhzZWxmKToKKyAgICAgICAgc3RvcHBlZCA9IFtdCisgICAgICAgIGNsYXNzIHRoaW5nKG9iamVjdCk6CisgICAgICAgICAgICBvbmUgPSB0d28gPSB0aHJlZSA9IE5vbmUKKworICAgICAgICBkZWYgZ2V0X3BhdGNoKGF0dHJpYnV0ZSk6CisgICAgICAgICAgICBjbGFzcyBteXBhdGNoKF9wYXRjaCk6CisgICAgICAgICAgICAgICAgZGVmIHN0b3Aoc2VsZik6CisgICAgICAgICAgICAgICAgICAgIHN0b3BwZWQuYXBwZW5kKGF0dHJpYnV0ZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1cGVyKG15cGF0Y2gsIHNlbGYpLnN0b3AoKQorICAgICAgICAgICAgcmV0dXJuIG15cGF0Y2gobGFtYmRhOiB0aGluZywgYXR0cmlidXRlLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmFsc2UsIE5vbmUsIE5vbmUsIE5vbmUsIHt9KQorICAgICAgICBbZ2V0X3BhdGNoKHZhbCkuc3RhcnQoKSBmb3IgdmFsIGluICgib25lIiwgInR3byIsICJ0aHJlZSIpXQorICAgICAgICBwYXRjaC5zdG9wYWxsKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0b3BwZWQsIFsidGhyZWUiLCAidHdvIiwgIm9uZSJdKQogCiAKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdGVzdC90ZXN0bW9jay90ZXN0d2l0aC5weSBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CmluZGV4IDBhMGNmYWQuLmE3YmVlNzMgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CisrKyBiL0xpYi91bml0dGVzdC90ZXN0L3Rlc3Rtb2NrL3Rlc3R3aXRoLnB5CkBAIC0xNTEsNiArMTUxLDIwIEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jay5tb2NrX2NhbGxzLCBleHBlY3RlZF9jYWxscykKICAgICAgICAgc2VsZi5hc3NlcnRJcyhmLCBoYW5kbGUpCiAKKyAgICBkZWYgdGVzdF9tb2NrX29wZW5fY29udGV4dF9tYW5hZ2VyX211bHRpcGxlX3RpbWVzKHNlbGYpOgorICAgICAgICBtb2NrID0gbW9ja19vcGVuKCkKKyAgICAgICAgd2l0aCBwYXRjaCgnJXMub3BlbicgJSBfX25hbWVfXywgbW9jaywgY3JlYXRlPVRydWUpOgorICAgICAgICAgICAgd2l0aCBvcGVuKCdmb28nKSBhcyBmOgorICAgICAgICAgICAgICAgIGYucmVhZCgpCisgICAgICAgICAgICB3aXRoIG9wZW4oJ2JhcicpIGFzIGY6CisgICAgICAgICAgICAgICAgZi5yZWFkKCkKKworICAgICAgICBleHBlY3RlZF9jYWxscyA9IFsKKyAgICAgICAgICAgIGNhbGwoJ2ZvbycpLCBjYWxsKCkuX19lbnRlcl9fKCksIGNhbGwoKS5yZWFkKCksCisgICAgICAgICAgICBjYWxsKCkuX19leGl0X18oTm9uZSwgTm9uZSwgTm9uZSksCisgICAgICAgICAgICBjYWxsKCdiYXInKSwgY2FsbCgpLl9fZW50ZXJfXygpLCBjYWxsKCkucmVhZCgpLAorICAgICAgICAgICAgY2FsbCgpLl9fZXhpdF9fKE5vbmUsIE5vbmUsIE5vbmUpXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG1vY2subW9ja19jYWxscywgZXhwZWN0ZWRfY2FsbHMpCiAKICAgICBkZWYgdGVzdF9leHBsaWNpdF9tb2NrKHNlbGYpOgogICAgICAgICBtb2NrID0gTWFnaWNNb2NrKCkKQEAgLTE3Miw1ICsxODYsMTE2IEBACiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKIAogCisgICAgZGVmIHRlc3RfcmVhZGxpbmVfZGF0YShzZWxmKToKKyAgICAgICAgIyBDaGVjayB0aGF0IHJlYWRsaW5lIHdpbGwgcmV0dXJuIGFsbCB0aGUgbGluZXMgZnJvbSB0aGUgZmFrZSBmaWxlCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICBsaW5lMiA9IGgucmVhZGxpbmUoKQorICAgICAgICAgICAgbGluZTMgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMiwgJ2JhclxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMywgJ2JhelxuJykKKworICAgICAgICAjIENoZWNrIHRoYXQgd2UgcHJvcGVybHkgZW11bGF0ZSBhIGZpbGUgdGhhdCBkb2Vzbid0IGVuZCBpbiBhIG5ld2xpbmUKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2ZvbycpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZSgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCAnZm9vJykKKworCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX2RhdGEoc2VsZik6CisgICAgICAgICMgVGVzdCB0aGF0IGVtdWxhdGluZyBhIGZpbGUgdGhhdCBlbmRzIGluIGEgbmV3bGluZSBjaGFyYWN0ZXIgd29ya3MKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdCwgWydmb29cbicsICdiYXJcbicsICdiYXpcbiddKQorCisgICAgICAgICMgVGVzdCB0aGF0IGZpbGVzIHdpdGhvdXQgYSBmaW5hbCBuZXdsaW5lIHdpbGwgYWxzbyBiZSBjb3JyZWN0bHkKKyAgICAgICAgIyBlbXVsYXRlZAorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT0nZm9vXG5iYXJcbmJheicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgcmVzdWx0ID0gaC5yZWFkbGluZXMoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbJ2Zvb1xuJywgJ2JhclxuJywgJ2JheiddKQorCisKKyAgICBkZWYgdGVzdF9yZWFkX2J5dGVzKHNlbGYpOgorICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT1iJ1x4YzYnKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICB3aXRoIG9wZW4oJ2FiYycsICdyYicpIGFzIGY6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gZi5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN1bHQsIGInXHhjNicpCisKKworICAgIGRlZiB0ZXN0X3JlYWRsaW5lX2J5dGVzKHNlbGYpOgorICAgICAgICBtID0gbW9ja19vcGVuKHJlYWRfZGF0YT1iJ2FiY1xuZGVmXG5naGlcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG0sIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIHdpdGggb3BlbignYWJjJywgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICBsaW5lMSA9IGYucmVhZGxpbmUoKQorICAgICAgICAgICAgICAgIGxpbmUyID0gZi5yZWFkbGluZSgpCisgICAgICAgICAgICAgICAgbGluZTMgPSBmLnJlYWRsaW5lKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgYidhYmNcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTIsIGInZGVmXG4nKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxpbmUzLCBiJ2doaVxuJykKKworCisgICAgZGVmIHRlc3RfcmVhZGxpbmVzX2J5dGVzKHNlbGYpOgorICAgICAgICBtID0gbW9ja19vcGVuKHJlYWRfZGF0YT1iJ2FiY1xuZGVmXG5naGlcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG0sIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIHdpdGggb3BlbignYWJjJywgJ3JiJykgYXMgZjoKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBmLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LCBbYidhYmNcbicsIGInZGVmXG4nLCBiJ2doaVxuJ10pCisKKworICAgIGRlZiB0ZXN0X21vY2tfb3Blbl9yZWFkX3dpdGhfYXJndW1lbnQoc2VsZik6CisgICAgICAgICMgQXQgb25lIHBvaW50IGNhbGxpbmcgcmVhZCB3aXRoIGFuIGFyZ3VtZW50IHdhcyBicm9rZW4KKyAgICAgICAgIyBmb3IgbW9ja3MgcmV0dXJuZWQgYnkgbW9ja19vcGVuCisgICAgICAgIHNvbWVfZGF0YSA9ICdmb29cbmJhclxuYmF6JworICAgICAgICBtb2NrID0gbW9ja19vcGVuKHJlYWRfZGF0YT1zb21lX2RhdGEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobW9jaygpLnJlYWQoMTApLCBzb21lX2RhdGEpCisKKworICAgIGRlZiB0ZXN0X2ludGVybGVhdmVkX3JlYWRzKHNlbGYpOgorICAgICAgICAjIFRlc3QgdGhhdCBjYWxsaW5nIHJlYWQsIHJlYWRsaW5lLCBhbmQgcmVhZGxpbmVzIHB1bGxzIGRhdGEKKyAgICAgICAgIyBzZXF1ZW50aWFsbHkgZnJvbSB0aGUgZGF0YSB3ZSBwcmVsb2FkIHdpdGgKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2Zvb1xuYmFyXG5iYXpcbicpCisgICAgICAgIHdpdGggcGF0Y2goJyVzLm9wZW4nICUgX19uYW1lX18sIG1vY2ssIGNyZWF0ZT1UcnVlKToKKyAgICAgICAgICAgIGggPSBvcGVuKCdiYXInKQorICAgICAgICAgICAgbGluZTEgPSBoLnJlYWRsaW5lKCkKKyAgICAgICAgICAgIHJlc3QgPSBoLnJlYWRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobGluZTEsICdmb29cbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdCwgWydiYXJcbicsICdiYXpcbiddKQorCisgICAgICAgIG1vY2sgPSBtb2NrX29wZW4ocmVhZF9kYXRhPSdmb29cbmJhclxuYmF6XG4nKQorICAgICAgICB3aXRoIHBhdGNoKCclcy5vcGVuJyAlIF9fbmFtZV9fLCBtb2NrLCBjcmVhdGU9VHJ1ZSk6CisgICAgICAgICAgICBoID0gb3BlbignYmFyJykKKyAgICAgICAgICAgIGxpbmUxID0gaC5yZWFkbGluZSgpCisgICAgICAgICAgICByZXN0ID0gaC5yZWFkKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsaW5lMSwgJ2Zvb1xuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXN0LCAnYmFyXG5iYXpcbicpCisKKworICAgIGRlZiB0ZXN0X292ZXJyaWRpbmdfcmV0dXJuX3ZhbHVlcyhzZWxmKToKKyAgICAgICAgbW9jayA9IG1vY2tfb3BlbihyZWFkX2RhdGE9J2ZvbycpCisgICAgICAgIGhhbmRsZSA9IG1vY2soKQorCisgICAgICAgIGhhbmRsZS5yZWFkLnJldHVybl92YWx1ZSA9ICdiYXInCisgICAgICAgIGhhbmRsZS5yZWFkbGluZS5yZXR1cm5fdmFsdWUgPSAnYmFyJworICAgICAgICBoYW5kbGUucmVhZGxpbmVzLnJldHVybl92YWx1ZSA9IFsnYmFyJ10KKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkKCksICdiYXInKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhbmRsZS5yZWFkbGluZSgpLCAnYmFyJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmVzKCksIFsnYmFyJ10pCisKKyAgICAgICAgIyBjYWxsIHJlcGVhdGVkbHkgdG8gY2hlY2sgdGhhdCBhIFN0b3BJdGVyYXRpb24gaXMgbm90IHByb3BhZ2F0ZWQKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChoYW5kbGUucmVhZGxpbmUoKSwgJ2JhcicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoaGFuZGxlLnJlYWRsaW5lKCksICdiYXInKQorCisKIGlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CiAgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9MaWIvdW5pdHRlc3QvdXRpbC5weSBiL0xpYi91bml0dGVzdC91dGlsLnB5CmluZGV4IGNjZGYwYjguLmFlZTQ5OGYgMTAwNjQ0Ci0tLSBhL0xpYi91bml0dGVzdC91dGlsLnB5CisrKyBiL0xpYi91bml0dGVzdC91dGlsLnB5CkBAIC0xLDEwICsxLDQ3IEBACiAiIiJWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zLiIiIgogCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlLCBPcmRlcmVkRGljdAorZnJvbSBvcy5wYXRoIGltcG9ydCBjb21tb25wcmVmaXgKIAogX191bml0dGVzdCA9IFRydWUKIAogX01BWF9MRU5HVEggPSA4MAorX1BMQUNFSE9MREVSX0xFTiA9IDEyCitfTUlOX0JFR0lOX0xFTiA9IDUKK19NSU5fRU5EX0xFTiA9IDUKK19NSU5fQ09NTU9OX0xFTiA9IDUKK19NSU5fRElGRl9MRU4gPSBfTUFYX0xFTkdUSCAtIFwKKyAgICAgICAgICAgICAgIChfTUlOX0JFR0lOX0xFTiArIF9QTEFDRUhPTERFUl9MRU4gKyBfTUlOX0NPTU1PTl9MRU4gKworICAgICAgICAgICAgICAgIF9QTEFDRUhPTERFUl9MRU4gKyBfTUlOX0VORF9MRU4pCithc3NlcnQgX01JTl9ESUZGX0xFTiA+PSAwCisKK2RlZiBfc2hvcnRlbihzLCBwcmVmaXhsZW4sIHN1ZmZpeGxlbik6CisgICAgc2tpcCA9IGxlbihzKSAtIHByZWZpeGxlbiAtIHN1ZmZpeGxlbgorICAgIGlmIHNraXAgPiBfUExBQ0VIT0xERVJfTEVOOgorICAgICAgICBzID0gJyVzWyVkIGNoYXJzXSVzJyAlIChzWzpwcmVmaXhsZW5dLCBza2lwLCBzW2xlbihzKSAtIHN1ZmZpeGxlbjpdKQorICAgIHJldHVybiBzCisKK2RlZiBfY29tbW9uX3Nob3J0ZW5fcmVwcigqYXJncyk6CisgICAgYXJncyA9IHR1cGxlKG1hcChzYWZlX3JlcHIsIGFyZ3MpKQorICAgIG1heGxlbiA9IG1heChtYXAobGVuLCBhcmdzKSkKKyAgICBpZiBtYXhsZW4gPD0gX01BWF9MRU5HVEg6CisgICAgICAgIHJldHVybiBhcmdzCisKKyAgICBwcmVmaXggPSBjb21tb25wcmVmaXgoYXJncykKKyAgICBwcmVmaXhsZW4gPSBsZW4ocHJlZml4KQorCisgICAgY29tbW9uX2xlbiA9IF9NQVhfTEVOR1RIIC0gXAorICAgICAgICAgICAgICAgICAobWF4bGVuIC0gcHJlZml4bGVuICsgX01JTl9CRUdJTl9MRU4gKyBfUExBQ0VIT0xERVJfTEVOKQorICAgIGlmIGNvbW1vbl9sZW4gPiBfTUlOX0NPTU1PTl9MRU46CisgICAgICAgIGFzc2VydCBfTUlOX0JFR0lOX0xFTiArIF9QTEFDRUhPTERFUl9MRU4gKyBfTUlOX0NPTU1PTl9MRU4gKyBcCisgICAgICAgICAgICAgICAobWF4bGVuIC0gcHJlZml4bGVuKSA8IF9NQVhfTEVOR1RICisgICAgICAgIHByZWZpeCA9IF9zaG9ydGVuKHByZWZpeCwgX01JTl9CRUdJTl9MRU4sIGNvbW1vbl9sZW4pCisgICAgICAgIHJldHVybiB0dXBsZShwcmVmaXggKyBzW3ByZWZpeGxlbjpdIGZvciBzIGluIGFyZ3MpCisKKyAgICBwcmVmaXggPSBfc2hvcnRlbihwcmVmaXgsIF9NSU5fQkVHSU5fTEVOLCBfTUlOX0NPTU1PTl9MRU4pCisgICAgcmV0dXJuIHR1cGxlKHByZWZpeCArIF9zaG9ydGVuKHNbcHJlZml4bGVuOl0sIF9NSU5fRElGRl9MRU4sIF9NSU5fRU5EX0xFTikKKyAgICAgICAgICAgICAgICAgZm9yIHMgaW4gYXJncykKKwogZGVmIHNhZmVfcmVwcihvYmosIHNob3J0PUZhbHNlKToKICAgICB0cnk6CiAgICAgICAgIHJlc3VsdCA9IHJlcHIob2JqKQpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9lcnJvci5weSBiL0xpYi91cmxsaWIvZXJyb3IucHkKaW5kZXggYjcxMmViYi4uNDViNzE2OSAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9lcnJvci5weQorKysgYi9MaWIvdXJsbGliL2Vycm9yLnB5CkBAIC0xLDYgKzEsNiBAQAogIiIiRXhjZXB0aW9uIGNsYXNzZXMgcmFpc2VkIGJ5IHVybGxpYi4KIAotVGhlIGJhc2UgZXhjZXB0aW9uIGNsYXNzIGlzIFVSTEVycm9yLCB3aGljaCBpbmhlcml0cyBmcm9tIElPRXJyb3IuICBJdAorVGhlIGJhc2UgZXhjZXB0aW9uIGNsYXNzIGlzIFVSTEVycm9yLCB3aGljaCBpbmhlcml0cyBmcm9tIE9TRXJyb3IuICBJdAogZG9lc24ndCBkZWZpbmUgYW55IGJlaGF2aW9yIG9mIGl0cyBvd24sIGJ1dCBpcyB0aGUgYmFzZSBjbGFzcyBmb3IgYWxsCiBleGNlcHRpb25zIGRlZmluZWQgaW4gdGhpcyBwYWNrYWdlLgogCkBAIC0xNywxMSArMTcsMTEgQEAKIAogCiAjIGRvIHRoZXNlIGVycm9yIGNsYXNzZXMgbWFrZSBzZW5zZT8KLSMgbWFrZSBzdXJlIGFsbCBvZiB0aGUgSU9FcnJvciBzdHVmZiBpcyBvdmVycmlkZGVuLiAgd2UganVzdCB3YW50IHRvIGJlCisjIG1ha2Ugc3VyZSBhbGwgb2YgdGhlIE9TRXJyb3Igc3R1ZmYgaXMgb3ZlcnJpZGRlbi4gIHdlIGp1c3Qgd2FudCB0byBiZQogIyBzdWJ0eXBlcy4KIAotY2xhc3MgVVJMRXJyb3IoSU9FcnJvcik6Ci0gICAgIyBVUkxFcnJvciBpcyBhIHN1Yi10eXBlIG9mIElPRXJyb3IsIGJ1dCBpdCBkb2Vzbid0IHNoYXJlIGFueSBvZgorY2xhc3MgVVJMRXJyb3IoT1NFcnJvcik6CisgICAgIyBVUkxFcnJvciBpcyBhIHN1Yi10eXBlIG9mIE9TRXJyb3IsIGJ1dCBpdCBkb2Vzbid0IHNoYXJlIGFueSBvZgogICAgICMgdGhlIGltcGxlbWVudGF0aW9uLiAgbmVlZCB0byBvdmVycmlkZSBfX2luaXRfXyBhbmQgX19zdHJfXy4KICAgICAjIEl0IHNldHMgc2VsZi5hcmdzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb3RoZXIgRW52aXJvbm1lbnRFcnJvcgogICAgICMgc3ViY2xhc3NlcywgYnV0IGFyZ3MgZG9lc24ndCBoYXZlIHRoZSB0eXBpY2FsIGZvcm1hdCB3aXRoIGVycm5vIGluCkBAIC02MSw5ICs2MSwxMyBAQAogICAgIGRlZiByZWFzb24oc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLm1zZwogCi0gICAgZGVmIGluZm8oc2VsZik6CisgICAgQHByb3BlcnR5CisgICAgZGVmIGhlYWRlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiBzZWxmLmhkcnMKIAorICAgIEBoZWFkZXJzLnNldHRlcgorICAgIGRlZiBoZWFkZXJzKHNlbGYsIGhlYWRlcnMpOgorICAgICAgICBzZWxmLmhkcnMgPSBoZWFkZXJzCiAKICMgZXhjZXB0aW9uIHJhaXNlZCB3aGVuIGRvd25sb2FkZWQgc2l6ZSBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aAogY2xhc3MgQ29udGVudFRvb1Nob3J0RXJyb3IoVVJMRXJyb3IpOgpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9wYXJzZS5weSBiL0xpYi91cmxsaWIvcGFyc2UucHkKaW5kZXggOTc1YzZmZi4uZDM2ODMzMSAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9wYXJzZS5weQorKysgYi9MaWIvdXJsbGliL3BhcnNlLnB5CkBAIC00NzIsOCArNDcyLDcgQEAKICAgICByZXR1cm4gX2NvZXJjZV9yZXN1bHQoRGVmcmFnUmVzdWx0KGRlZnJhZywgZnJhZykpCiAKIF9oZXhkaWcgPSAnMDEyMzQ1Njc4OUFCQ0RFRmFiY2RlZicKLV9oZXh0b2J5dGUgPSB7KGEgKyBiKS5lbmNvZGUoKTogYnl0ZXMoW2ludChhICsgYiwgMTYpXSkKLSAgICAgICAgICAgICAgZm9yIGEgaW4gX2hleGRpZyBmb3IgYiBpbiBfaGV4ZGlnfQorX2hleHRvYnl0ZSA9IE5vbmUKIAogZGVmIHVucXVvdGVfdG9fYnl0ZXMoc3RyaW5nKToKICAgICAiIiJ1bnF1b3RlX3RvX2J5dGVzKCdhYmMlMjBkZWYnKSAtPiBiJ2FiYyBkZWYnLiIiIgpAQCAtNDkwLDYgKzQ4OSwxMiBAQAogICAgICAgICByZXR1cm4gc3RyaW5nCiAgICAgcmVzID0gW2JpdHNbMF1dCiAgICAgYXBwZW5kID0gcmVzLmFwcGVuZAorICAgICMgRGVsYXkgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSB0YWJsZSB0byBub3Qgd2FzdGUgbWVtb3J5CisgICAgIyBpZiB0aGUgZnVuY3Rpb24gaXMgbmV2ZXIgY2FsbGVkCisgICAgZ2xvYmFsIF9oZXh0b2J5dGUKKyAgICBpZiBfaGV4dG9ieXRlIGlzIE5vbmU6CisgICAgICAgIF9oZXh0b2J5dGUgPSB7KGEgKyBiKS5lbmNvZGUoKTogYnl0ZXMoW2ludChhICsgYiwgMTYpXSkKKyAgICAgICAgICAgICAgICAgICAgICBmb3IgYSBpbiBfaGV4ZGlnIGZvciBiIGluIF9oZXhkaWd9CiAgICAgZm9yIGl0ZW0gaW4gYml0c1sxOl06CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGFwcGVuZChfaGV4dG9ieXRlW2l0ZW1bOjJdXSkKQEAgLTY2NSw4ICs2NzAsOCBAQAogICAgIGNhbGxlZCBvbiBhIHBhdGggd2hlcmUgdGhlIGV4aXN0aW5nIHNsYXNoIGNoYXJhY3RlcnMgYXJlIHVzZWQgYXMKICAgICByZXNlcnZlZCBjaGFyYWN0ZXJzLgogCi0gICAgc3RyaW5nIGFuZCBzYWZlIG1heSBiZSBlaXRoZXIgc3RyIG9yIGJ5dGVzIG9iamVjdHMuIGVuY29kaW5nIG11c3QKLSAgICBub3QgYmUgc3BlY2lmaWVkIGlmIHN0cmluZyBpcyBhIHN0ci4KKyAgICBzdHJpbmcgYW5kIHNhZmUgbWF5IGJlIGVpdGhlciBzdHIgb3IgYnl0ZXMgb2JqZWN0cy4gZW5jb2RpbmcgYW5kIGVycm9ycworICAgIG11c3Qgbm90IGJlIHNwZWNpZmllZCBpZiBzdHJpbmcgaXMgYSBieXRlcyBvYmplY3QuCiAKICAgICBUaGUgb3B0aW9uYWwgZW5jb2RpbmcgYW5kIGVycm9ycyBwYXJhbWV0ZXJzIHNwZWNpZnkgaG93IHRvIGRlYWwgd2l0aAogICAgIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLCBhcyBhY2NlcHRlZCBieSB0aGUgc3RyLmVuY29kZSBtZXRob2QuCkBAIC03MzgsOCArNzQzLDkgQEAKICAgICBpbnB1dC4KIAogICAgIFRoZSBjb21wb25lbnRzIG9mIGEgcXVlcnkgYXJnIG1heSBlYWNoIGJlIGVpdGhlciBhIHN0cmluZyBvciBhIGJ5dGVzIHR5cGUuCi0gICAgV2hlbiBhIGNvbXBvbmVudCBpcyBhIHN0cmluZywgdGhlIHNhZmUsIGVuY29kaW5nIGFuZCBlcnJvciBwYXJhbWV0ZXJzIGFyZQotICAgIHNlbnQgdG8gdGhlIHF1b3RlX3BsdXMgZnVuY3Rpb24gZm9yIGVuY29kaW5nLgorCisgICAgVGhlIHNhZmUsIGVuY29kaW5nLCBhbmQgZXJyb3JzIHBhcmFtZXRlcnMgYXJlIHBhc3NlZCBkb3duIHRvIHF1b3RlX3BsdXMoKQorICAgIChlbmNvZGluZyBhbmQgZXJyb3JzIG9ubHkgaWYgYSBjb21wb25lbnQgaXMgYSBzdHIpLgogICAgICIiIgogCiAgICAgaWYgaGFzYXR0cihxdWVyeSwgIml0ZW1zIik6CkBAIC04NDYsNyArODUyLDYgQEAKICAgICAiIiJzcGxpdHR5cGUoJ3R5cGU6b3BhcXVlc3RyaW5nJykgLS0+ICd0eXBlJywgJ29wYXF1ZXN0cmluZycuIiIiCiAgICAgZ2xvYmFsIF90eXBlcHJvZwogICAgIGlmIF90eXBlcHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3R5cGVwcm9nID0gcmUuY29tcGlsZSgnXihbXi86XSspOicpCiAKICAgICBtYXRjaCA9IF90eXBlcHJvZy5tYXRjaCh1cmwpCkBAIC04NjAsNyArODY1LDYgQEAKICAgICAiIiJzcGxpdGhvc3QoJy8vaG9zdFs6cG9ydF0vcGF0aCcpIC0tPiAnaG9zdFs6cG9ydF0nLCAnL3BhdGgnLiIiIgogICAgIGdsb2JhbCBfaG9zdHByb2cKICAgICBpZiBfaG9zdHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9ob3N0cHJvZyA9IHJlLmNvbXBpbGUoJ14vLyhbXi8/XSopKC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfaG9zdHByb2cubWF0Y2godXJsKQpAQCAtODc3LDcgKzg4MSw2IEBACiAgICAgIiIic3BsaXR1c2VyKCd1c2VyWzpwYXNzd2RdQGhvc3RbOnBvcnRdJykgLS0+ICd1c2VyWzpwYXNzd2RdJywgJ2hvc3RbOnBvcnRdJy4iIiIKICAgICBnbG9iYWwgX3VzZXJwcm9nCiAgICAgaWYgX3VzZXJwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfdXNlcnByb2cgPSByZS5jb21waWxlKCdeKC4qKUAoLiopJCcpCiAKICAgICBtYXRjaCA9IF91c2VycHJvZy5tYXRjaChob3N0KQpAQCAtODg5LDcgKzg5Miw2IEBACiAgICAgIiIic3BsaXRwYXNzd2QoJ3VzZXI6cGFzc3dkJykgLT4gJ3VzZXInLCAncGFzc3dkJy4iIiIKICAgICBnbG9iYWwgX3Bhc3N3ZHByb2cKICAgICBpZiBfcGFzc3dkcHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3Bhc3N3ZHByb2cgPSByZS5jb21waWxlKCdeKFteOl0qKTooLiopJCcscmUuUykKIAogICAgIG1hdGNoID0gX3Bhc3N3ZHByb2cubWF0Y2godXNlcikKQEAgLTkwMiw3ICs5MDQsNiBAQAogICAgICIiInNwbGl0cG9ydCgnaG9zdDpwb3J0JykgLS0+ICdob3N0JywgJ3BvcnQnLiIiIgogICAgIGdsb2JhbCBfcG9ydHByb2cKICAgICBpZiBfcG9ydHByb2cgaXMgTm9uZToKLSAgICAgICAgaW1wb3J0IHJlCiAgICAgICAgIF9wb3J0cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopOihbMC05XSopJCcpCiAKICAgICBtYXRjaCA9IF9wb3J0cHJvZy5tYXRjaChob3N0KQpAQCAtOTIwLDcgKzkyMSw2IEBACiAgICAgUmV0dXJuIE5vbmUgaWYgJzonIGJ1dCBub3QgYSB2YWxpZCBudW1iZXIuIiIiCiAgICAgZ2xvYmFsIF9ucG9ydHByb2cKICAgICBpZiBfbnBvcnRwcm9nIGlzIE5vbmU6Ci0gICAgICAgIGltcG9ydCByZQogICAgICAgICBfbnBvcnRwcm9nID0gcmUuY29tcGlsZSgnXiguKik6KC4qKSQnKQogCiAgICAgbWF0Y2ggPSBfbnBvcnRwcm9nLm1hdGNoKGhvc3QpCkBAIC05MzksNyArOTM5LDYgQEAKICAgICAiIiJzcGxpdHF1ZXJ5KCcvcGF0aD9xdWVyeScpIC0tPiAnL3BhdGgnLCAncXVlcnknLiIiIgogICAgIGdsb2JhbCBfcXVlcnlwcm9nCiAgICAgaWYgX3F1ZXJ5cHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3F1ZXJ5cHJvZyA9IHJlLmNvbXBpbGUoJ14oLiopXD8oW14/XSopJCcpCiAKICAgICBtYXRjaCA9IF9xdWVyeXByb2cubWF0Y2godXJsKQpAQCAtOTUxLDcgKzk1MCw2IEBACiAgICAgIiIic3BsaXR0YWcoJy9wYXRoI3RhZycpIC0tPiAnL3BhdGgnLCAndGFnJy4iIiIKICAgICBnbG9iYWwgX3RhZ3Byb2cKICAgICBpZiBfdGFncHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3RhZ3Byb2cgPSByZS5jb21waWxlKCdeKC4qKSMoW14jXSopJCcpCiAKICAgICBtYXRjaCA9IF90YWdwcm9nLm1hdGNoKHVybCkKQEAgLTk2OSw3ICs5NjcsNiBAQAogICAgICIiInNwbGl0dmFsdWUoJ2F0dHI9dmFsdWUnKSAtLT4gJ2F0dHInLCAndmFsdWUnLiIiIgogICAgIGdsb2JhbCBfdmFsdWVwcm9nCiAgICAgaWYgX3ZhbHVlcHJvZyBpcyBOb25lOgotICAgICAgICBpbXBvcnQgcmUKICAgICAgICAgX3ZhbHVlcHJvZyA9IHJlLmNvbXBpbGUoJ14oW149XSopPSguKikkJykKIAogICAgIG1hdGNoID0gX3ZhbHVlcHJvZy5tYXRjaChhdHRyKQpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yZXF1ZXN0LnB5IGIvTGliL3VybGxpYi9yZXF1ZXN0LnB5CmluZGV4IDUzN2I3NjUuLmY3NjkzODYgMTAwNjQ0Ci0tLSBhL0xpYi91cmxsaWIvcmVxdWVzdC5weQorKysgYi9MaWIvdXJsbGliL3JlcXVlc3QucHkKQEAgLTE4LDcgKzE4LDcgQEAKIHVybGxpYi4gIHBhc3MgdGhlIHVybCBhbmQgb3B0aW9uYWxseSBkYXRhIHRvIHBvc3QgdG8gYW4gSFRUUCBVUkwsIGFuZAogZ2V0IGEgZmlsZS1saWtlIG9iamVjdCBiYWNrLiAgT25lIGRpZmZlcmVuY2UgaXMgdGhhdCB5b3UgY2FuIGFsc28gcGFzcwogYSBSZXF1ZXN0IGluc3RhbmNlIGluc3RlYWQgb2YgVVJMLiAgUmFpc2VzIGEgVVJMRXJyb3IgKHN1YmNsYXNzIG9mCi1JT0Vycm9yKTsgZm9yIEhUVFAgZXJyb3JzLCByYWlzZXMgYW4gSFRUUEVycm9yLCB3aGljaCBjYW4gYWxzbyBiZQorT1NFcnJvcik7IGZvciBIVFRQIGVycm9ycywgcmFpc2VzIGFuIEhUVFBFcnJvciwgd2hpY2ggY2FuIGFsc28gYmUKIHRyZWF0ZWQgYXMgYSB2YWxpZCByZXNwb25zZS4KIAogYnVpbGRfb3BlbmVyIC0tIEZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBPcGVuZXJEaXJlY3RvciBpbnN0YW5jZS4KQEAgLTEwMyw3ICsxMDMsOCBAQAogZnJvbSB1cmxsaWIucGFyc2UgaW1wb3J0ICgKICAgICB1cmxwYXJzZSwgdXJsc3BsaXQsIHVybGpvaW4sIHVud3JhcCwgcXVvdGUsIHVucXVvdGUsCiAgICAgc3BsaXR0eXBlLCBzcGxpdGhvc3QsIHNwbGl0cG9ydCwgc3BsaXR1c2VyLCBzcGxpdHBhc3N3ZCwKLSAgICBzcGxpdGF0dHIsIHNwbGl0cXVlcnksIHNwbGl0dmFsdWUsIHNwbGl0dGFnLCB0b19ieXRlcywgdXJsdW5wYXJzZSkKKyAgICBzcGxpdGF0dHIsIHNwbGl0cXVlcnksIHNwbGl0dmFsdWUsIHNwbGl0dGFnLCB0b19ieXRlcywKKyAgICB1bnF1b3RlX3RvX2J5dGVzLCB1cmx1bnBhcnNlKQogZnJvbSB1cmxsaWIucmVzcG9uc2UgaW1wb3J0IGFkZGluZm91cmwsIGFkZGNsb3NlaG9vawogCiAjIGNoZWNrIGZvciBTU0wKQEAgLTEyMSw3ICsxMjIsNyBAQAogICAgICdIVFRQUGFzc3dvcmRNZ3InLCAnSFRUUFBhc3N3b3JkTWdyV2l0aERlZmF1bHRSZWFsbScsCiAgICAgJ0Fic3RyYWN0QmFzaWNBdXRoSGFuZGxlcicsICdIVFRQQmFzaWNBdXRoSGFuZGxlcicsICdQcm94eUJhc2ljQXV0aEhhbmRsZXInLAogICAgICdBYnN0cmFjdERpZ2VzdEF1dGhIYW5kbGVyJywgJ0hUVFBEaWdlc3RBdXRoSGFuZGxlcicsICdQcm94eURpZ2VzdEF1dGhIYW5kbGVyJywKLSAgICAnSFRUUEhhbmRsZXInLCAnRmlsZUhhbmRsZXInLCAnRlRQSGFuZGxlcicsICdDYWNoZUZUUEhhbmRsZXInLAorICAgICdIVFRQSGFuZGxlcicsICdGaWxlSGFuZGxlcicsICdGVFBIYW5kbGVyJywgJ0NhY2hlRlRQSGFuZGxlcicsICdEYXRhSGFuZGxlcicsCiAgICAgJ1Vua25vd25IYW5kbGVyJywgJ0hUVFBFcnJvclByb2Nlc3NvcicsCiAgICAgIyBGdW5jdGlvbnMKICAgICAndXJsb3BlbicsICdpbnN0YWxsX29wZW5lcicsICdidWlsZF9vcGVuZXInLApAQCAtMTM1LDE5ICsxMzYsMjMgQEAKIAogX29wZW5lciA9IE5vbmUKIGRlZiB1cmxvcGVuKHVybCwgZGF0YT1Ob25lLCB0aW1lb3V0PXNvY2tldC5fR0xPQkFMX0RFRkFVTFRfVElNRU9VVCwKLSAgICAgICAgICAgICosIGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSwgY2FkZWZhdWx0PUZhbHNlKToKKyAgICAgICAgICAgICosIGNhZmlsZT1Ob25lLCBjYXBhdGg9Tm9uZSwgY2FkZWZhdWx0PUZhbHNlLCBjb250ZXh0PU5vbmUpOgogICAgIGdsb2JhbCBfb3BlbmVyCiAgICAgaWYgY2FmaWxlIG9yIGNhcGF0aCBvciBjYWRlZmF1bHQ6CisgICAgICAgIGlmIGNvbnRleHQgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICJZb3UgY2FuJ3QgcGFzcyBib3RoIGNvbnRleHQgYW5kIGFueSBvZiBjYWZpbGUsIGNhcGF0aCwgYW5kICIKKyAgICAgICAgICAgICAgICAiY2FkZWZhdWx0IgorICAgICAgICAgICAgKQogICAgICAgICBpZiBub3QgX2hhdmVfc3NsOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignU1NMIHN1cHBvcnQgbm90IGF2YWlsYWJsZScpCi0gICAgICAgIGNvbnRleHQgPSBzc2wuU1NMQ29udGV4dChzc2wuUFJPVE9DT0xfU1NMdjIzKQotICAgICAgICBjb250ZXh0Lm9wdGlvbnMgfD0gc3NsLk9QX05PX1NTTHYyCi0gICAgICAgIGNvbnRleHQudmVyaWZ5X21vZGUgPSBzc2wuQ0VSVF9SRVFVSVJFRAotICAgICAgICBpZiBjYWZpbGUgb3IgY2FwYXRoOgotICAgICAgICAgICAgY29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlLCBjYXBhdGgpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBjb250ZXh0LnNldF9kZWZhdWx0X3ZlcmlmeV9wYXRocygpCi0gICAgICAgIGh0dHBzX2hhbmRsZXIgPSBIVFRQU0hhbmRsZXIoY29udGV4dD1jb250ZXh0LCBjaGVja19ob3N0bmFtZT1UcnVlKQorICAgICAgICBjb250ZXh0ID0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoc3NsLlB1cnBvc2UuU0VSVkVSX0FVVEgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWZpbGU9Y2FmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwYXRoPWNhcGF0aCkKKyAgICAgICAgaHR0cHNfaGFuZGxlciA9IEhUVFBTSGFuZGxlcihjb250ZXh0PWNvbnRleHQpCisgICAgICAgIG9wZW5lciA9IGJ1aWxkX29wZW5lcihodHRwc19oYW5kbGVyKQorICAgIGVsaWYgY29udGV4dDoKKyAgICAgICAgaHR0cHNfaGFuZGxlciA9IEhUVFBTSGFuZGxlcihjb250ZXh0PWNvbnRleHQpCiAgICAgICAgIG9wZW5lciA9IGJ1aWxkX29wZW5lcihodHRwc19oYW5kbGVyKQogICAgIGVsaWYgX29wZW5lciBpcyBOb25lOgogICAgICAgICBfb3BlbmVyID0gb3BlbmVyID0gYnVpbGRfb3BlbmVyKCkKQEAgLTIyNCwxMCArMjI5LDExIEBACiAgICAgcmV0dXJuIHJlc3VsdAogCiBkZWYgdXJsY2xlYW51cCgpOgorICAgICIiIkNsZWFuIHVwIHRlbXBvcmFyeSBmaWxlcyBmcm9tIHVybHJldHJpZXZlIGNhbGxzLiIiIgogICAgIGZvciB0ZW1wX2ZpbGUgaW4gX3VybF90ZW1wZmlsZXM6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLnVubGluayh0ZW1wX2ZpbGUpCi0gICAgICAgIGV4Y2VwdCBFbnZpcm9ubWVudEVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogICAgIGRlbCBfdXJsX3RlbXBmaWxlc1s6XQpAQCAtMjU4LDI0ICsyNjQsNjAgQEAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkYXRhPU5vbmUsIGhlYWRlcnM9e30sCiAgICAgICAgICAgICAgICAgIG9yaWdpbl9yZXFfaG9zdD1Ob25lLCB1bnZlcmlmaWFibGU9RmFsc2UsCiAgICAgICAgICAgICAgICAgIG1ldGhvZD1Ob25lKToKLSAgICAgICAgIyB1bndyYXAoJzxVUkw6dHlwZTovL2hvc3QvcGF0aD4nKSAtLT4gJ3R5cGU6Ly9ob3N0L3BhdGgnCi0gICAgICAgIHNlbGYuZnVsbF91cmwgPSB1bndyYXAodXJsKQotICAgICAgICBzZWxmLmZ1bGxfdXJsLCBzZWxmLmZyYWdtZW50ID0gc3BsaXR0YWcoc2VsZi5mdWxsX3VybCkKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAgICAgICBzZWxmLmZ1bGxfdXJsID0gdXJsCiAgICAgICAgIHNlbGYuaGVhZGVycyA9IHt9CisgICAgICAgIHNlbGYudW5yZWRpcmVjdGVkX2hkcnMgPSB7fQorICAgICAgICBzZWxmLl9kYXRhID0gTm9uZQorICAgICAgICBzZWxmLmRhdGEgPSBkYXRhCiAgICAgICAgIHNlbGYuX3R1bm5lbF9ob3N0ID0gTm9uZQogICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBoZWFkZXJzLml0ZW1zKCk6CiAgICAgICAgICAgICBzZWxmLmFkZF9oZWFkZXIoa2V5LCB2YWx1ZSkKLSAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycyA9IHt9CiAgICAgICAgIGlmIG9yaWdpbl9yZXFfaG9zdCBpcyBOb25lOgogICAgICAgICAgICAgb3JpZ2luX3JlcV9ob3N0ID0gcmVxdWVzdF9ob3N0KHNlbGYpCiAgICAgICAgIHNlbGYub3JpZ2luX3JlcV9ob3N0ID0gb3JpZ2luX3JlcV9ob3N0CiAgICAgICAgIHNlbGYudW52ZXJpZmlhYmxlID0gdW52ZXJpZmlhYmxlCi0gICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCisgICAgICAgIGlmIG1ldGhvZDoKKyAgICAgICAgICAgIHNlbGYubWV0aG9kID0gbWV0aG9kCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgZnVsbF91cmwoc2VsZik6CisgICAgICAgIGlmIHNlbGYuZnJhZ21lbnQ6CisgICAgICAgICAgICByZXR1cm4gJ3t9I3t9Jy5mb3JtYXQoc2VsZi5fZnVsbF91cmwsIHNlbGYuZnJhZ21lbnQpCisgICAgICAgIHJldHVybiBzZWxmLl9mdWxsX3VybAorCisgICAgQGZ1bGxfdXJsLnNldHRlcgorICAgIGRlZiBmdWxsX3VybChzZWxmLCB1cmwpOgorICAgICAgICAjIHVud3JhcCgnPFVSTDp0eXBlOi8vaG9zdC9wYXRoPicpIC0tPiAndHlwZTovL2hvc3QvcGF0aCcKKyAgICAgICAgc2VsZi5fZnVsbF91cmwgPSB1bndyYXAodXJsKQorICAgICAgICBzZWxmLl9mdWxsX3VybCwgc2VsZi5mcmFnbWVudCA9IHNwbGl0dGFnKHNlbGYuX2Z1bGxfdXJsKQogICAgICAgICBzZWxmLl9wYXJzZSgpCiAKKyAgICBAZnVsbF91cmwuZGVsZXRlcgorICAgIGRlZiBmdWxsX3VybChzZWxmKToKKyAgICAgICAgc2VsZi5fZnVsbF91cmwgPSBOb25lCisgICAgICAgIHNlbGYuZnJhZ21lbnQgPSBOb25lCisgICAgICAgIHNlbGYuc2VsZWN0b3IgPSAnJworCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRhdGEoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLl9kYXRhCisKKyAgICBAZGF0YS5zZXR0ZXIKKyAgICBkZWYgZGF0YShzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgZGF0YSAhPSBzZWxmLl9kYXRhOgorICAgICAgICAgICAgc2VsZi5fZGF0YSA9IGRhdGEKKyAgICAgICAgICAgICMgaXNzdWUgMTY0NjQKKyAgICAgICAgICAgICMgaWYgd2UgY2hhbmdlIGRhdGEgd2UgbmVlZCB0byByZW1vdmUgY29udGVudC1sZW5ndGggaGVhZGVyCisgICAgICAgICAgICAjIChjYXVzZSBpdCdzIG1vc3QgcHJvYmFibHkgY2FsY3VsYXRlZCBmb3IgcHJldmlvdXMgdmFsdWUpCisgICAgICAgICAgICBpZiBzZWxmLmhhc19oZWFkZXIoIkNvbnRlbnQtbGVuZ3RoIik6CisgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVfaGVhZGVyKCJDb250ZW50LWxlbmd0aCIpCisKKyAgICBAZGF0YS5kZWxldGVyCisgICAgZGVmIGRhdGEoc2VsZik6CisgICAgICAgIHNlbGYuZGF0YSA9IE5vbmUKKwogICAgIGRlZiBfcGFyc2Uoc2VsZik6Ci0gICAgICAgIHNlbGYudHlwZSwgcmVzdCA9IHNwbGl0dHlwZShzZWxmLmZ1bGxfdXJsKQorICAgICAgICBzZWxmLnR5cGUsIHJlc3QgPSBzcGxpdHR5cGUoc2VsZi5fZnVsbF91cmwpCiAgICAgICAgIGlmIHNlbGYudHlwZSBpcyBOb25lOgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biB1cmwgdHlwZTogJXIiICUgc2VsZi5mdWxsX3VybCkKICAgICAgICAgc2VsZi5ob3N0LCBzZWxmLnNlbGVjdG9yID0gc3BsaXRob3N0KHJlc3QpCkBAIC0yODQsNjIgKzMyNiwxMSBAQAogCiAgICAgZGVmIGdldF9tZXRob2Qoc2VsZik6CiAgICAgICAgICIiIlJldHVybiBhIHN0cmluZyBpbmRpY2F0aW5nIHRoZSBIVFRQIHJlcXVlc3QgbWV0aG9kLiIiIgotICAgICAgICBpZiBzZWxmLm1ldGhvZCBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLm1ldGhvZAotICAgICAgICBlbGlmIHNlbGYuZGF0YSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIHJldHVybiAiUE9TVCIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiAiR0VUIgorICAgICAgICBkZWZhdWx0X21ldGhvZCA9ICJQT1NUIiBpZiBzZWxmLmRhdGEgaXMgbm90IE5vbmUgZWxzZSAiR0VUIgorICAgICAgICByZXR1cm4gZ2V0YXR0cihzZWxmLCAnbWV0aG9kJywgZGVmYXVsdF9tZXRob2QpCiAKICAgICBkZWYgZ2V0X2Z1bGxfdXJsKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmZyYWdtZW50OgotICAgICAgICAgICAgcmV0dXJuICclcyMlcycgJSAoc2VsZi5mdWxsX3VybCwgc2VsZi5mcmFnbWVudCkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBzZWxmLmZ1bGxfdXJsCi0KLSAgICAjIEJlZ2luIGRlcHJlY2F0ZWQgbWV0aG9kcwotCi0gICAgZGVmIGFkZF9kYXRhKHNlbGYsIGRhdGEpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5hZGRfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQotCi0gICAgZGVmIGhhc19kYXRhKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5oYXNfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZGF0YSBpcyBub3QgTm9uZQotCi0gICAgZGVmIGdldF9kYXRhKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfZGF0YSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuZGF0YQotCi0gICAgZGVmIGdldF90eXBlKHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfdHlwZSBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYudHlwZQotCi0gICAgZGVmIGdldF9ob3N0KHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfaG9zdCBtZXRob2QgaXMgZGVwcmVjYXRlZC4iCi0gICAgICAgIHdhcm5pbmdzLndhcm4obXNnLCBEZXByZWNhdGlvbldhcm5pbmcsIHN0YWNrbGV2ZWw9MSkKLSAgICAgICAgcmV0dXJuIHNlbGYuaG9zdAotCi0gICAgZGVmIGdldF9zZWxlY3RvcihzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuZ2V0X3NlbGVjdG9yIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RvcgotCi0gICAgZGVmIGlzX3VudmVyaWZpYWJsZShzZWxmKToKLSAgICAgICAgbXNnID0gIlJlcXVlc3QuaXNfdW52ZXJpZmlhYmxlIG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi51bnZlcmlmaWFibGUKLQotICAgIGRlZiBnZXRfb3JpZ2luX3JlcV9ob3N0KHNlbGYpOgotICAgICAgICBtc2cgPSAiUmVxdWVzdC5nZXRfb3JpZ2luX3JlcV9ob3N0IG1ldGhvZCBpcyBkZXByZWNhdGVkLiIKLSAgICAgICAgd2FybmluZ3Mud2Fybihtc2csIERlcHJlY2F0aW9uV2FybmluZywgc3RhY2tsZXZlbD0xKQotICAgICAgICByZXR1cm4gc2VsZi5vcmlnaW5fcmVxX2hvc3QKLQotICAgICMgRW5kIGRlcHJlY2F0ZWQgbWV0aG9kcworICAgICAgICByZXR1cm4gc2VsZi5mdWxsX3VybAogCiAgICAgZGVmIHNldF9wcm94eShzZWxmLCBob3N0LCB0eXBlKToKICAgICAgICAgaWYgc2VsZi50eXBlID09ICdodHRwcycgYW5kIG5vdCBzZWxmLl90dW5uZWxfaG9zdDoKQEAgLTM2OSw2ICszNjAsMTAgQEAKICAgICAgICAgICAgIGhlYWRlcl9uYW1lLAogICAgICAgICAgICAgc2VsZi51bnJlZGlyZWN0ZWRfaGRycy5nZXQoaGVhZGVyX25hbWUsIGRlZmF1bHQpKQogCisgICAgZGVmIHJlbW92ZV9oZWFkZXIoc2VsZiwgaGVhZGVyX25hbWUpOgorICAgICAgICBzZWxmLmhlYWRlcnMucG9wKGhlYWRlcl9uYW1lLCBOb25lKQorICAgICAgICBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLnBvcChoZWFkZXJfbmFtZSwgTm9uZSkKKwogICAgIGRlZiBoZWFkZXJfaXRlbXMoc2VsZik6CiAgICAgICAgIGhkcnMgPSBzZWxmLnVucmVkaXJlY3RlZF9oZHJzLmNvcHkoKQogICAgICAgICBoZHJzLnVwZGF0ZShzZWxmLmhlYWRlcnMpCkBAIC01MjUsMTkgKzUyMCwxNyBAQAogICAgIElmIGFueSBvZiB0aGUgaGFuZGxlcnMgcGFzc2VkIGFzIGFyZ3VtZW50cyBhcmUgc3ViY2xhc3NlcyBvZiB0aGUKICAgICBkZWZhdWx0IGhhbmRsZXJzLCB0aGUgZGVmYXVsdCBoYW5kbGVycyB3aWxsIG5vdCBiZSB1c2VkLgogICAgICIiIgotICAgIGRlZiBpc2NsYXNzKG9iaik6Ci0gICAgICAgIHJldHVybiBpc2luc3RhbmNlKG9iaiwgdHlwZSkgb3IgaGFzYXR0cihvYmosICJfX2Jhc2VzX18iKQotCiAgICAgb3BlbmVyID0gT3BlbmVyRGlyZWN0b3IoKQogICAgIGRlZmF1bHRfY2xhc3NlcyA9IFtQcm94eUhhbmRsZXIsIFVua25vd25IYW5kbGVyLCBIVFRQSGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgSFRUUERlZmF1bHRFcnJvckhhbmRsZXIsIEhUVFBSZWRpcmVjdEhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgIEZUUEhhbmRsZXIsIEZpbGVIYW5kbGVyLCBIVFRQRXJyb3JQcm9jZXNzb3JdCisgICAgICAgICAgICAgICAgICAgICAgIEZUUEhhbmRsZXIsIEZpbGVIYW5kbGVyLCBIVFRQRXJyb3JQcm9jZXNzb3IsCisgICAgICAgICAgICAgICAgICAgICAgIERhdGFIYW5kbGVyXQogICAgIGlmIGhhc2F0dHIoaHR0cC5jbGllbnQsICJIVFRQU0Nvbm5lY3Rpb24iKToKICAgICAgICAgZGVmYXVsdF9jbGFzc2VzLmFwcGVuZChIVFRQU0hhbmRsZXIpCiAgICAgc2tpcCA9IHNldCgpCiAgICAgZm9yIGtsYXNzIGluIGRlZmF1bHRfY2xhc3NlczoKICAgICAgICAgZm9yIGNoZWNrIGluIGhhbmRsZXJzOgotICAgICAgICAgICAgaWYgaXNjbGFzcyhjaGVjayk6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKGNoZWNrLCB0eXBlKToKICAgICAgICAgICAgICAgICBpZiBpc3N1YmNsYXNzKGNoZWNrLCBrbGFzcyk6CiAgICAgICAgICAgICAgICAgICAgIHNraXAuYWRkKGtsYXNzKQogICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGNoZWNrLCBrbGFzcyk6CkBAIC01NDksNyArNTQyLDcgQEAKICAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGtsYXNzKCkpCiAKICAgICBmb3IgaCBpbiBoYW5kbGVyczoKLSAgICAgICAgaWYgaXNjbGFzcyhoKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShoLCB0eXBlKToKICAgICAgICAgICAgIGggPSBoKCkKICAgICAgICAgb3BlbmVyLmFkZF9oYW5kbGVyKGgpCiAgICAgcmV0dXJuIG9wZW5lcgpAQCAtNzAzLDUwICs2OTYsNyBAQAogCiAgICAgSWYgYSBVUkwgaXMgc3VwcGxpZWQsIGl0IG11c3QgaGF2ZSBhbiBhdXRob3JpdHkgKGhvc3Q6cG9ydCkgY29tcG9uZW50LgogICAgIEFjY29yZGluZyB0byBSRkMgMzk4NiwgaGF2aW5nIGFuIGF1dGhvcml0eSBjb21wb25lbnQgbWVhbnMgdGhlIFVSTCBtdXN0Ci0gICAgaGF2ZSB0d28gc2xhc2hlcyBhZnRlciB0aGUgc2NoZW1lOgotCi0gICAgPj4+IF9wYXJzZV9wcm94eSgnZmlsZTovZnRwLmV4YW1wbGUuY29tLycpCi0gICAgVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgotICAgIFZhbHVlRXJyb3I6IHByb3h5IFVSTCB3aXRoIG5vIGF1dGhvcml0eTogJ2ZpbGU6L2Z0cC5leGFtcGxlLmNvbS8nCi0KLSAgICBUaGUgZmlyc3QgdGhyZWUgaXRlbXMgb2YgdGhlIHJldHVybmVkIHR1cGxlIG1heSBiZSBOb25lLgotCi0gICAgRXhhbXBsZXMgb2YgYXV0aG9yaXR5IHBhcnNpbmc6Ci0KLSAgICA+Pj4gX3BhcnNlX3Byb3h5KCdwcm94eS5leGFtcGxlLmNvbScpCi0gICAgKE5vbmUsIE5vbmUsIE5vbmUsICdwcm94eS5leGFtcGxlLmNvbScpCi0gICAgPj4+IF9wYXJzZV9wcm94eSgncHJveHkuZXhhbXBsZS5jb206MzEyOCcpCi0gICAgKE5vbmUsIE5vbmUsIE5vbmUsICdwcm94eS5leGFtcGxlLmNvbTozMTI4JykKLQotICAgIFRoZSBhdXRob3JpdHkgY29tcG9uZW50IG1heSBvcHRpb25hbGx5IGluY2x1ZGUgdXNlcmluZm8gKGFzc3VtZWQgdG8gYmUKLSAgICB1c2VybmFtZTpwYXNzd29yZCk6Ci0KLSAgICA+Pj4gX3BhcnNlX3Byb3h5KCdqb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb20nKQotICAgIChOb25lLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykKLSAgICA+Pj4gX3BhcnNlX3Byb3h5KCdqb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb206MzEyOCcpCi0gICAgKE5vbmUsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb206MzEyOCcpCi0KLSAgICBTYW1lIGV4YW1wbGVzLCBidXQgd2l0aCBVUkxzIGluc3RlYWQ6Ci0KLSAgICA+Pj4gX3BhcnNlX3Byb3h5KCdodHRwOi8vcHJveHkuZXhhbXBsZS5jb20vJykKLSAgICAoJ2h0dHAnLCBOb25lLCBOb25lLCAncHJveHkuZXhhbXBsZS5jb20nKQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2h0dHA6Ly9wcm94eS5leGFtcGxlLmNvbTozMTI4LycpCi0gICAgKCdodHRwJywgTm9uZSwgTm9uZSwgJ3Byb3h5LmV4YW1wbGUuY29tOjMxMjgnKQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2h0dHA6Ly9qb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb20vJykKLSAgICAoJ2h0dHAnLCAnam9lJywgJ3Bhc3N3b3JkJywgJ3Byb3h5LmV4YW1wbGUuY29tJykKLSAgICA+Pj4gX3BhcnNlX3Byb3h5KCdodHRwOi8vam9lOnBhc3N3b3JkQHByb3h5LmV4YW1wbGUuY29tOjMxMjgnKQotICAgICgnaHR0cCcsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb206MzEyOCcpCi0KLSAgICBFdmVyeXRoaW5nIGFmdGVyIHRoZSBhdXRob3JpdHkgaXMgaWdub3JlZDoKLQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2Z0cDovL2pvZTpwYXNzd29yZEBwcm94eS5leGFtcGxlLmNvbS9ydWJiaXNoOjMxMjgnKQotICAgICgnZnRwJywgJ2pvZScsICdwYXNzd29yZCcsICdwcm94eS5leGFtcGxlLmNvbScpCi0KLSAgICBUZXN0IGZvciBubyB0cmFpbGluZyAnLycgY2FzZToKLQotICAgID4+PiBfcGFyc2VfcHJveHkoJ2h0dHA6Ly9qb2U6cGFzc3dvcmRAcHJveHkuZXhhbXBsZS5jb20nKQotICAgICgnaHR0cCcsICdqb2UnLCAncGFzc3dvcmQnLCAncHJveHkuZXhhbXBsZS5jb20nKQotCisgICAgaGF2ZSB0d28gc2xhc2hlcyBhZnRlciB0aGUgc2NoZW1lLgogICAgICIiIgogICAgIHNjaGVtZSwgcl9zY2hlbWUgPSBzcGxpdHR5cGUocHJveHkpCiAgICAgaWYgbm90IHJfc2NoZW1lLnN0YXJ0c3dpdGgoIi8iKToKQEAgLTkwNSwxMCArODU1LDYgQEAKICAgICAgICAgICAgIHBhc3N3b3JkX21nciA9IEhUVFBQYXNzd29yZE1ncigpCiAgICAgICAgIHNlbGYucGFzc3dkID0gcGFzc3dvcmRfbWdyCiAgICAgICAgIHNlbGYuYWRkX3Bhc3N3b3JkID0gc2VsZi5wYXNzd2QuYWRkX3Bhc3N3b3JkCi0gICAgICAgIHNlbGYucmV0cmllZCA9IDAKLQotICAgIGRlZiByZXNldF9yZXRyeV9jb3VudChzZWxmKToKLSAgICAgICAgc2VsZi5yZXRyaWVkID0gMAogCiAgICAgZGVmIGh0dHBfZXJyb3JfYXV0aF9yZXFlZChzZWxmLCBhdXRocmVxLCBob3N0LCByZXEsIGhlYWRlcnMpOgogICAgICAgICAjIGhvc3QgbWF5IGJlIGFuIGF1dGhvcml0eSAod2l0aG91dCB1c2VyaW5mbykgb3IgYSBVUkwgd2l0aCBhbgpAQCAtOTE2LDEzICs4NjIsNiBAQAogICAgICAgICAjIFhYWCBjb3VsZCBiZSBtdWx0aXBsZSBoZWFkZXJzCiAgICAgICAgIGF1dGhyZXEgPSBoZWFkZXJzLmdldChhdXRocmVxLCBOb25lKQogCi0gICAgICAgIGlmIHNlbGYucmV0cmllZCA+IDU6Ci0gICAgICAgICAgICAjIHJldHJ5IHNlbmRpbmcgdGhlIHVzZXJuYW1lOnBhc3N3b3JkIDUgdGltZXMgYmVmb3JlIGZhaWxpbmcuCi0gICAgICAgICAgICByYWlzZSBIVFRQRXJyb3IocmVxLmdldF9mdWxsX3VybCgpLCA0MDEsICJiYXNpYyBhdXRoIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgIGhlYWRlcnMsIE5vbmUpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLnJldHJpZWQgKz0gMQotCiAgICAgICAgIGlmIGF1dGhyZXE6CiAgICAgICAgICAgICBzY2hlbWUgPSBhdXRocmVxLnNwbGl0KClbMF0KICAgICAgICAgICAgIGlmIHNjaGVtZS5sb3dlcigpICE9ICdiYXNpYyc6CkBAIC05MzcsMTcgKzg3NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZ3Mud2FybigiQmFzaWMgQXV0aCBSZWFsbSB3YXMgdW5xdW90ZWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VyV2FybmluZywgMikKICAgICAgICAgICAgICAgICAgICAgaWYgc2NoZW1lLmxvd2VyKCkgPT0gJ2Jhc2ljJzoKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXRyeV9odHRwX2Jhc2ljX2F1dGgoaG9zdCwgcmVxLCByZWFsbSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHJlc3BvbnNlIGFuZCByZXNwb25zZS5jb2RlICE9IDQwMToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnJldHJpZWQgPSAwCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnJldHJ5X2h0dHBfYmFzaWNfYXV0aChob3N0LCByZXEsIHJlYWxtKQogCiAgICAgZGVmIHJldHJ5X2h0dHBfYmFzaWNfYXV0aChzZWxmLCBob3N0LCByZXEsIHJlYWxtKToKICAgICAgICAgdXNlciwgcHcgPSBzZWxmLnBhc3N3ZC5maW5kX3VzZXJfcGFzc3dvcmQocmVhbG0sIGhvc3QpCiAgICAgICAgIGlmIHB3IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgcmF3ID0gIiVzOiVzIiAlICh1c2VyLCBwdykKICAgICAgICAgICAgIGF1dGggPSAiQmFzaWMgIiArIGJhc2U2NC5iNjRlbmNvZGUocmF3LmVuY29kZSgpKS5kZWNvZGUoImFzY2lpIikKLSAgICAgICAgICAgIGlmIHJlcS5oZWFkZXJzLmdldChzZWxmLmF1dGhfaGVhZGVyLCBOb25lKSA9PSBhdXRoOgorICAgICAgICAgICAgaWYgcmVxLmdldF9oZWFkZXIoc2VsZi5hdXRoX2hlYWRlciwgTm9uZSkgPT0gYXV0aDoKICAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQogICAgICAgICAgICAgcmVxLmFkZF91bnJlZGlyZWN0ZWRfaGVhZGVyKHNlbGYuYXV0aF9oZWFkZXIsIGF1dGgpCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnQub3BlbihyZXEsIHRpbWVvdXQ9cmVxLnRpbWVvdXQpCkBAIC05NjMsNyArODk5LDYgQEAKICAgICAgICAgdXJsID0gcmVxLmZ1bGxfdXJsCiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi5odHRwX2Vycm9yX2F1dGhfcmVxZWQoJ3d3dy1hdXRoZW50aWNhdGUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLCByZXEsIGhlYWRlcnMpCi0gICAgICAgIHNlbGYucmVzZXRfcmV0cnlfY291bnQoKQogICAgICAgICByZXR1cm4gcmVzcG9uc2UKIAogCkBAIC05NzksNyArOTE0LDYgQEAKICAgICAgICAgYXV0aG9yaXR5ID0gcmVxLmhvc3QKICAgICAgICAgcmVzcG9uc2UgPSBzZWxmLmh0dHBfZXJyb3JfYXV0aF9yZXFlZCgncHJveHktYXV0aGVudGljYXRlJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhvcml0eSwgcmVxLCBoZWFkZXJzKQotICAgICAgICBzZWxmLnJlc2V0X3JldHJ5X2NvdW50KCkKICAgICAgICAgcmV0dXJuIHJlc3BvbnNlCiAKIApAQCAtMTI0NSwxOCArMTE3OSwyMSBAQAogICAgICAgICAgICAgaC5zZXRfdHVubmVsKHJlcS5fdHVubmVsX2hvc3QsIGhlYWRlcnM9dHVubmVsX2hlYWRlcnMpCiAKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaC5yZXF1ZXN0KHJlcS5nZXRfbWV0aG9kKCksIHJlcS5zZWxlY3RvciwgcmVxLmRhdGEsIGhlYWRlcnMpCi0gICAgICAgIGV4Y2VwdCBzb2NrZXQuZXJyb3IgYXMgZXJyOiAjIHRpbWVvdXQgZXJyb3IKLSAgICAgICAgICAgIGguY2xvc2UoKQotICAgICAgICAgICAgcmFpc2UgVVJMRXJyb3IoZXJyKQotICAgICAgICBlbHNlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGgucmVxdWVzdChyZXEuZ2V0X21ldGhvZCgpLCByZXEuc2VsZWN0b3IsIHJlcS5kYXRhLCBoZWFkZXJzKQorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOiAjIHRpbWVvdXQgZXJyb3IKKyAgICAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcihlcnIpCiAgICAgICAgICAgICByID0gaC5nZXRyZXNwb25zZSgpCi0gICAgICAgICAgICAjIElmIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgc2VuZCB1cyBhICdDb25uZWN0aW9uOiBjbG9zZScgaGVhZGVyLAotICAgICAgICAgICAgIyBIVFRQQ29ubmVjdGlvbiBhc3N1bWVzIHRoZSBzb2NrZXQgc2hvdWxkIGJlIGxlZnQgb3Blbi4gTWFudWFsbHkKLSAgICAgICAgICAgICMgbWFyayB0aGUgc29ja2V0IHRvIGJlIGNsb3NlZCB3aGVuIHRoaXMgcmVzcG9uc2Ugb2JqZWN0IGdvZXMgYXdheS4KLSAgICAgICAgICAgIGlmIGguc29jazoKLSAgICAgICAgICAgICAgICBoLnNvY2suY2xvc2UoKQotICAgICAgICAgICAgICAgIGguc29jayA9IE5vbmUKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaC5jbG9zZSgpCisgICAgICAgICAgICByYWlzZQorCisgICAgICAgICMgSWYgdGhlIHNlcnZlciBkb2VzIG5vdCBzZW5kIHVzIGEgJ0Nvbm5lY3Rpb246IGNsb3NlJyBoZWFkZXIsCisgICAgICAgICMgSFRUUENvbm5lY3Rpb24gYXNzdW1lcyB0aGUgc29ja2V0IHNob3VsZCBiZSBsZWZ0IG9wZW4uIE1hbnVhbGx5CisgICAgICAgICMgbWFyayB0aGUgc29ja2V0IHRvIGJlIGNsb3NlZCB3aGVuIHRoaXMgcmVzcG9uc2Ugb2JqZWN0IGdvZXMgYXdheS4KKyAgICAgICAgaWYgaC5zb2NrOgorICAgICAgICAgICAgaC5zb2NrLmNsb3NlKCkKKyAgICAgICAgICAgIGguc29jayA9IE5vbmUKIAogICAgICAgICByLnVybCA9IHJlcS5nZXRfZnVsbF91cmwoKQogICAgICAgICAjIFRoaXMgbGluZSByZXBsYWNlcyB0aGUgLm1zZyBhdHRyaWJ1dGUgb2YgdGhlIEhUVFBSZXNwb25zZQpAQCAtMTM3NCw3ICsxMzExLDcgQEAKICAgICAgICAgdXJsID0gcmVxLnNlbGVjdG9yCiAgICAgICAgIGlmIHVybFs6Ml0gPT0gJy8vJyBhbmQgdXJsWzI6M10gIT0gJy8nIGFuZCAocmVxLmhvc3QgYW5kCiAgICAgICAgICAgICAgICAgcmVxLmhvc3QgIT0gJ2xvY2FsaG9zdCcpOgotICAgICAgICAgICAgaWYgbm90IHJlcS5ob3N0IGlzIHNlbGYuZ2V0X25hbWVzKCk6CisgICAgICAgICAgICBpZiBub3QgcmVxLmhvc3QgaW4gc2VsZi5nZXRfbmFtZXMoKToKICAgICAgICAgICAgICAgICByYWlzZSBVUkxFcnJvcigiZmlsZTovLyBzY2hlbWUgaXMgc3VwcG9ydGVkIG9ubHkgb24gbG9jYWxob3N0IikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHJldHVybiBzZWxmLm9wZW5fbG9jYWxfZmlsZShyZXEpCkBAIC0xNDUxLDcgKzEzODgsNyBAQAogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGhvc3QgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShob3N0KQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgcmFpc2UgVVJMRXJyb3IobXNnKQogICAgICAgICBwYXRoLCBhdHRycyA9IHNwbGl0YXR0cihyZXEuc2VsZWN0b3IpCiAgICAgICAgIGRpcnMgPSBwYXRoLnNwbGl0KCcvJykKQEAgLTE1MzcsNiArMTQ3NCwzNiBAQAogICAgICAgICBzZWxmLmNhY2hlLmNsZWFyKCkKICAgICAgICAgc2VsZi50aW1lb3V0LmNsZWFyKCkKIAorY2xhc3MgRGF0YUhhbmRsZXIoQmFzZUhhbmRsZXIpOgorICAgIGRlZiBkYXRhX29wZW4oc2VsZiwgcmVxKToKKyAgICAgICAgIyBkYXRhIFVSTHMgYXMgc3BlY2lmaWVkIGluIFJGQyAyMzk3LgorICAgICAgICAjCisgICAgICAgICMgaWdub3JlcyBQT1NUZWQgZGF0YQorICAgICAgICAjCisgICAgICAgICMgc3ludGF4OgorICAgICAgICAjIGRhdGF1cmwgICA6PSAiZGF0YToiIFsgbWVkaWF0eXBlIF0gWyAiO2Jhc2U2NCIgXSAiLCIgZGF0YQorICAgICAgICAjIG1lZGlhdHlwZSA6PSBbIHR5cGUgIi8iIHN1YnR5cGUgXSAqKCAiOyIgcGFyYW1ldGVyICkKKyAgICAgICAgIyBkYXRhICAgICAgOj0gKnVybGNoYXIKKyAgICAgICAgIyBwYXJhbWV0ZXIgOj0gYXR0cmlidXRlICI9IiB2YWx1ZQorICAgICAgICB1cmwgPSByZXEuZnVsbF91cmwKKworICAgICAgICBzY2hlbWUsIGRhdGEgPSB1cmwuc3BsaXQoIjoiLDEpCisgICAgICAgIG1lZGlhdHlwZSwgZGF0YSA9IGRhdGEuc3BsaXQoIiwiLDEpCisKKyAgICAgICAgIyBldmVuIGJhc2U2NCBlbmNvZGVkIGRhdGEgVVJMcyBtaWdodCBiZSBxdW90ZWQgc28gdW5xdW90ZSBpbiBhbnkgY2FzZToKKyAgICAgICAgZGF0YSA9IHVucXVvdGVfdG9fYnl0ZXMoZGF0YSkKKyAgICAgICAgaWYgbWVkaWF0eXBlLmVuZHN3aXRoKCI7YmFzZTY0Iik6CisgICAgICAgICAgICBkYXRhID0gYmFzZTY0LmRlY29kZWJ5dGVzKGRhdGEpCisgICAgICAgICAgICBtZWRpYXR5cGUgPSBtZWRpYXR5cGVbOi03XQorCisgICAgICAgIGlmIG5vdCBtZWRpYXR5cGU6CisgICAgICAgICAgICBtZWRpYXR5cGUgPSAidGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJIgorCisgICAgICAgIGhlYWRlcnMgPSBlbWFpbC5tZXNzYWdlX2Zyb21fc3RyaW5nKCJDb250ZW50LXR5cGU6ICVzXG5Db250ZW50LWxlbmd0aDogJWRcbiIgJQorICAgICAgICAgICAgKG1lZGlhdHlwZSwgbGVuKGRhdGEpKSkKKworICAgICAgICByZXR1cm4gYWRkaW5mb3VybChpby5CeXRlc0lPKGRhdGEpLCBoZWFkZXJzLCB1cmwpCisKIAogIyBDb2RlIG1vdmUgZnJvbSB0aGUgb2xkIHVybGxpYiBtb2R1bGUKIApAQCAtMTY2MCwyMCArMTYyNywyMCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBnZXRhdHRyKHNlbGYsIG5hbWUpKHVybCkKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoc2VsZiwgbmFtZSkodXJsLCBkYXRhKQotICAgICAgICBleGNlcHQgSFRUUEVycm9yOgorICAgICAgICBleGNlcHQgKEhUVFBFcnJvciwgVVJMRXJyb3IpOgogICAgICAgICAgICAgcmFpc2UKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvciBhcyBtc2c6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CisgICAgICAgICAgICByYWlzZSBPU0Vycm9yKCdzb2NrZXQgZXJyb3InLCBtc2cpLndpdGhfdHJhY2ViYWNrKHN5cy5leGNfaW5mbygpWzJdKQogCiAgICAgZGVmIG9wZW5fdW5rbm93bihzZWxmLCBmdWxsdXJsLCBkYXRhPU5vbmUpOgogICAgICAgICAiIiJPdmVycmlkYWJsZSBpbnRlcmZhY2UgdG8gb3BlbiB1bmtub3duIFVSTCB0eXBlLiIiIgogICAgICAgICB0eXBlLCB1cmwgPSBzcGxpdHR5cGUoZnVsbHVybCkKLSAgICAgICAgcmFpc2UgSU9FcnJvcigndXJsIGVycm9yJywgJ3Vua25vd24gdXJsIHR5cGUnLCB0eXBlKQorICAgICAgICByYWlzZSBPU0Vycm9yKCd1cmwgZXJyb3InLCAndW5rbm93biB1cmwgdHlwZScsIHR5cGUpCiAKICAgICBkZWYgb3Blbl91bmtub3duX3Byb3h5KHNlbGYsIHByb3h5LCBmdWxsdXJsLCBkYXRhPU5vbmUpOgogICAgICAgICAiIiJPdmVycmlkYWJsZSBpbnRlcmZhY2UgdG8gb3BlbiB1bmtub3duIFVSTCB0eXBlLiIiIgogICAgICAgICB0eXBlLCB1cmwgPSBzcGxpdHR5cGUoZnVsbHVybCkKLSAgICAgICAgcmFpc2UgSU9FcnJvcigndXJsIGVycm9yJywgJ2ludmFsaWQgcHJveHkgZm9yICVzJyAlIHR5cGUsIHByb3h5KQorICAgICAgICByYWlzZSBPU0Vycm9yKCd1cmwgZXJyb3InLCAnaW52YWxpZCBwcm94eSBmb3IgJXMnICUgdHlwZSwgcHJveHkpCiAKICAgICAjIEV4dGVybmFsIGludGVyZmFjZQogICAgIGRlZiByZXRyaWV2ZShzZWxmLCB1cmwsIGZpbGVuYW1lPU5vbmUsIHJlcG9ydGhvb2s9Tm9uZSwgZGF0YT1Ob25lKToKQEAgLTE2ODksNyArMTY1Niw3IEBACiAgICAgICAgICAgICAgICAgaGRycyA9IGZwLmluZm8oKQogICAgICAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICAgICAgICAgICAgICByZXR1cm4gdXJsMnBhdGhuYW1lKHNwbGl0aG9zdCh1cmwxKVsxXSksIGhkcnMKLSAgICAgICAgICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBwYXNzCiAgICAgICAgIGZwID0gc2VsZi5vcGVuKHVybCwgZGF0YSkKICAgICAgICAgdHJ5OgpAQCAtMTc4Miw3ICsxNzQ5LDcgQEAKICAgICAgICAgICAgICAgICBpZiBwcm94eV9ieXBhc3MocmVhbGhvc3QpOgogICAgICAgICAgICAgICAgICAgICBob3N0ID0gcmVhbGhvc3QKIAotICAgICAgICBpZiBub3QgaG9zdDogcmFpc2UgSU9FcnJvcignaHR0cCBlcnJvcicsICdubyBob3N0IGdpdmVuJykKKyAgICAgICAgaWYgbm90IGhvc3Q6IHJhaXNlIE9TRXJyb3IoJ2h0dHAgZXJyb3InLCAnbm8gaG9zdCBnaXZlbicpCiAKICAgICAgICAgaWYgcHJveHlfcGFzc3dkOgogICAgICAgICAgICAgcHJveHlfcGFzc3dkID0gdW5xdW90ZShwcm94eV9wYXNzd2QpCkBAIC0xODU1LDcgKzE4MjIsNyBAQAogICAgICAgICByZXR1cm4gc2VsZi5odHRwX2Vycm9yX2RlZmF1bHQodXJsLCBmcCwgZXJyY29kZSwgZXJybXNnLCBoZWFkZXJzKQogCiAgICAgZGVmIGh0dHBfZXJyb3JfZGVmYXVsdChzZWxmLCB1cmwsIGZwLCBlcnJjb2RlLCBlcnJtc2csIGhlYWRlcnMpOgotICAgICAgICAiIiJEZWZhdWx0IGVycm9yIGhhbmRsZXI6IGNsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCByYWlzZSBJT0Vycm9yLiIiIgorICAgICAgICAiIiJEZWZhdWx0IGVycm9yIGhhbmRsZXI6IGNsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCByYWlzZSBPU0Vycm9yLiIiIgogICAgICAgICBmcC5jbG9zZSgpCiAgICAgICAgIHJhaXNlIEhUVFBFcnJvcih1cmwsIGVycmNvZGUsIGVycm1zZywgaGVhZGVycywgTm9uZSkKIApAQCAtMTk0MCw3ICsxOTA3LDcgQEAKICAgICAgICAgIyBYWFggdGhyZWFkIHVuc2FmZSEKICAgICAgICAgaWYgbGVuKHNlbGYuZnRwY2FjaGUpID4gTUFYRlRQQ0FDSEU6CiAgICAgICAgICAgICAjIFBydW5lIHRoZSBjYWNoZSwgcmF0aGVyIGFyYml0cmFyaWx5Ci0gICAgICAgICAgICBmb3IgayBpbiBzZWxmLmZ0cGNhY2hlLmtleXMoKToKKyAgICAgICAgICAgIGZvciBrIGluIGxpc3Qoc2VsZi5mdHBjYWNoZSk6CiAgICAgICAgICAgICAgICAgaWYgayAhPSBrZXk6CiAgICAgICAgICAgICAgICAgICAgIHYgPSBzZWxmLmZ0cGNhY2hlW2tdCiAgICAgICAgICAgICAgICAgICAgIGRlbCBzZWxmLmZ0cGNhY2hlW2tdCkBAIC0xOTgyLDcgKzE5NDksNyBAQAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBbdHlwZSwgZGF0YV0gPSB1cmwuc3BsaXQoJywnLCAxKQogICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKLSAgICAgICAgICAgIHJhaXNlIElPRXJyb3IoJ2RhdGEgZXJyb3InLCAnYmFkIGRhdGEgVVJMJykKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoJ2RhdGEgZXJyb3InLCAnYmFkIGRhdGEgVVJMJykKICAgICAgICAgaWYgbm90IHR5cGU6CiAgICAgICAgICAgICB0eXBlID0gJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScKICAgICAgICAgc2VtaSA9IHR5cGUucmZpbmQoJzsnKQpAQCAtMjI3NCw3ICsyMjQxLDExIEBACiAgICAgICAgIHNlbGYudGltZW91dCA9IHRpbWVvdXQKICAgICAgICAgc2VsZi5yZWZjb3VudCA9IDAKICAgICAgICAgc2VsZi5rZWVwYWxpdmUgPSBwZXJzaXN0ZW50Ci0gICAgICAgIHNlbGYuaW5pdCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuaW5pdCgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIHNlbGYuY2xvc2UoKQorICAgICAgICAgICAgcmFpc2UKIAogICAgIGRlZiBpbml0KHNlbGYpOgogICAgICAgICBpbXBvcnQgZnRwbGliCkBAIC0yNDM4LDcgKzI0MDksNyBAQAogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgaG9zdElQID0gc29ja2V0LmdldGhvc3RieW5hbWUoaG9zdG9ubHkpCiAgICAgICAgICAgICAgICAgICAgIGhvc3RJUCA9IGlwMm51bShob3N0SVApCi0gICAgICAgICAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAogICAgICAgICAgICAgYmFzZSA9IGlwMm51bShtLmdyb3VwKDEpKQpAQCAtMjUyNCw3ICsyNDk1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHByb3hpZXNbJ2h0dHBzJ10gPSAnaHR0cHM6Ly8lcycgJSBwcm94eVNlcnZlcgogICAgICAgICAgICAgICAgICAgICAgICAgcHJveGllc1snZnRwJ10gPSAnZnRwOi8vJXMnICUgcHJveHlTZXJ2ZXIKICAgICAgICAgICAgIGludGVybmV0U2V0dGluZ3MuQ2xvc2UoKQotICAgICAgICBleGNlcHQgKFdpbmRvd3NFcnJvciwgVmFsdWVFcnJvciwgVHlwZUVycm9yKToKKyAgICAgICAgZXhjZXB0IChPU0Vycm9yLCBWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgogICAgICAgICAgICAgIyBFaXRoZXIgcmVnaXN0cnkga2V5IG5vdCBmb3VuZCBldGMsIG9yIHRoZSB2YWx1ZSBpbiBhbgogICAgICAgICAgICAgIyB1bmV4cGVjdGVkIGZvcm1hdC4KICAgICAgICAgICAgICMgcHJveGllcyBhbHJlYWR5IHNldCB1cCB0byBiZSBlbXB0eSBzbyBub3RoaW5nIHRvIGRvCkBAIC0yNTU0LDcgKzI1MjUsNyBAQAogICAgICAgICAgICAgcHJveHlPdmVycmlkZSA9IHN0cih3aW5yZWcuUXVlcnlWYWx1ZUV4KGludGVybmV0U2V0dGluZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdQcm94eU92ZXJyaWRlJylbMF0pCiAgICAgICAgICAgICAjIF5eXl4gUmV0dXJuZWQgYXMgVW5pY29kZSBidXQgcHJvYmxlbXMgaWYgbm90IGNvbnZlcnRlZCB0byBBU0NJSQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJldHVybiAwCiAgICAgICAgIGlmIG5vdCBwcm94eUVuYWJsZSBvciBub3QgcHJveHlPdmVycmlkZToKICAgICAgICAgICAgIHJldHVybiAwCkBAIC0yNTY1LDEzICsyNTM2LDEzIEBACiAgICAgICAgICAgICBhZGRyID0gc29ja2V0LmdldGhvc3RieW5hbWUocmF3SG9zdCkKICAgICAgICAgICAgIGlmIGFkZHIgIT0gcmF3SG9zdDoKICAgICAgICAgICAgICAgICBob3N0LmFwcGVuZChhZGRyKQotICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZnFkbiA9IHNvY2tldC5nZXRmcWRuKHJhd0hvc3QpCiAgICAgICAgICAgICBpZiBmcWRuICE9IHJhd0hvc3Q6CiAgICAgICAgICAgICAgICAgaG9zdC5hcHBlbmQoZnFkbikKLSAgICAgICAgZXhjZXB0IHNvY2tldC5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwYXNzCiAgICAgICAgICMgbWFrZSBhIGNoZWNrIHZhbHVlIGxpc3QgZnJvbSB0aGUgcmVnaXN0cnkgZW50cnk6IHJlcGxhY2UgdGhlCiAgICAgICAgICMgJzxsb2NhbD4nIHN0cmluZyBieSB0aGUgbG9jYWxob3N0IGVudHJ5IGFuZCB0aGUgY29ycmVzcG9uZGluZwpkaWZmIC0tZ2l0IGEvTGliL3VybGxpYi9yZXNwb25zZS5weSBiL0xpYi91cmxsaWIvcmVzcG9uc2UucHkKaW5kZXggMWNmMWQxYS4uNDc3ODExOCAxMDA2NDQKLS0tIGEvTGliL3VybGxpYi9yZXNwb25zZS5weQorKysgYi9MaWIvdXJsbGliL3Jlc3BvbnNlLnB5CkBAIC02LDkyICs2LDczIEBACiBoZWFkZXJzIGFuZCBhIGdldHVybCgpIG1ldGhvZCB0aGF0IHJldHVybnMgdGhlIHVybC4KICIiIgogCi1jbGFzcyBhZGRiYXNlKG9iamVjdCk6Ci0gICAgIiIiQmFzZSBjbGFzcyBmb3IgYWRkaW5mbyBhbmQgYWRkY2xvc2Vob29rLiIiIgoraW1wb3J0IHRlbXBmaWxlCisKK19fYWxsX18gPSBbJ2FkZGJhc2UnLCAnYWRkY2xvc2Vob29rJywgJ2FkZGluZm8nLCAnYWRkaW5mb3VybCddCisKKworY2xhc3MgYWRkYmFzZSh0ZW1wZmlsZS5fVGVtcG9yYXJ5RmlsZVdyYXBwZXIpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGFkZGluZm8gYW5kIGFkZGNsb3NlaG9vay4gSXMgYSBnb29kIGlkZWEgZm9yIGdhcmJhZ2UgY29sbGVjdGlvbi4iIiIKIAogICAgICMgWFhYIEFkZCBhIG1ldGhvZCB0byBleHBvc2UgdGhlIHRpbWVvdXQgb24gdGhlIHVuZGVybHlpbmcgc29ja2V0PwogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwKToKLSAgICAgICAgIyBUT0RPKGpoeWx0b24pOiBJcyB0aGVyZSBhIGJldHRlciB3YXkgdG8gZGVsZWdhdGUgdXNpbmcgaW8/CisgICAgICAgIHN1cGVyKGFkZGJhc2UsICBzZWxmKS5fX2luaXRfXyhmcCwgJzx1cmxsaWIgcmVzcG9uc2U+JywgZGVsZXRlPUZhbHNlKQorICAgICAgICAjIEtlZXAgcmVmZXJlbmNlIGFyb3VuZCBhcyB0aGlzIHdhcyBwYXJ0IG9mIHRoZSBvcmlnaW5hbCBBUEkuCiAgICAgICAgIHNlbGYuZnAgPSBmcAotICAgICAgICBzZWxmLnJlYWQgPSBzZWxmLmZwLnJlYWQKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IHNlbGYuZnAucmVhZGxpbmUKLSAgICAgICAgIyBUT0RPKGpoeWx0b24pOiBNYWtlIHN1cmUgYW4gb2JqZWN0IHdpdGggcmVhZGxpbmVzKCkgaXMgYWxzbyBpdGVyYWJsZQotICAgICAgICBpZiBoYXNhdHRyKHNlbGYuZnAsICJyZWFkbGluZXMiKToKLSAgICAgICAgICAgIHNlbGYucmVhZGxpbmVzID0gc2VsZi5mcC5yZWFkbGluZXMKLSAgICAgICAgaWYgaGFzYXR0cihzZWxmLmZwLCAiZmlsZW5vIik6Ci0gICAgICAgICAgICBzZWxmLmZpbGVubyA9IHNlbGYuZnAuZmlsZW5vCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBzZWxmLmZpbGVubyA9IGxhbWJkYTogTm9uZQotCi0gICAgZGVmIF9faXRlcl9fKHNlbGYpOgotICAgICAgICAjIEFzc2lnbmluZyBgX19pdGVyX19gIHRvIHRoZSBpbnN0YW5jZSBkb2Vzbid0IHdvcmsgYXMgaW50ZW5kZWQKLSAgICAgICAgIyBiZWNhdXNlIHRoZSBpdGVyIGJ1aWx0aW4gZG9lcyBzb21ldGhpbmcgbGlrZSBgY2xzLl9faXRlcl9fKG9iailgCi0gICAgICAgICMgYW5kIHRodXMgZmFpbHMgdG8gZmluZCB0aGUgX2JvdW5kXyBtZXRob2QgYG9iai5fX2l0ZXJfX2AuCi0gICAgICAgICMgUmV0dXJuaW5nIGp1c3QgYHNlbGYuZnBgIHdvcmtzIGZvciBidWlsdC1pbiBmaWxlIG9iamVjdHMgYnV0Ci0gICAgICAgICMgbWlnaHQgbm90IHdvcmsgZm9yIGdlbmVyYWwgZmlsZS1saWtlIG9iamVjdHMuCi0gICAgICAgIHJldHVybiBpdGVyKHNlbGYuZnApCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CiAgICAgICAgIHJldHVybiAnPCVzIGF0ICVyIHdob3NlIGZwID0gJXI+JyAlIChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkKHNlbGYpLCBzZWxmLmZwKQotCi0gICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmZwOgotICAgICAgICAgICAgc2VsZi5mcC5jbG9zZSgpCi0gICAgICAgIHNlbGYuZnAgPSBOb25lCi0gICAgICAgIHNlbGYucmVhZCA9IE5vbmUKLSAgICAgICAgc2VsZi5yZWFkbGluZSA9IE5vbmUKLSAgICAgICAgc2VsZi5yZWFkbGluZXMgPSBOb25lCi0gICAgICAgIHNlbGYuZmlsZW5vID0gTm9uZQotICAgICAgICBzZWxmLl9faXRlcl9fID0gTm9uZQotICAgICAgICBzZWxmLl9fbmV4dF9fID0gTm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQoc2VsZiksIHNlbGYuZmlsZSkKIAogICAgIGRlZiBfX2VudGVyX18oc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuZnAgaXMgTm9uZToKKyAgICAgICAgaWYgc2VsZi5mcC5jbG9zZWQ6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBmaWxlIikKICAgICAgICAgcmV0dXJuIHNlbGYKIAogICAgIGRlZiBfX2V4aXRfXyhzZWxmLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKToKICAgICAgICAgc2VsZi5jbG9zZSgpCiAKKwogY2xhc3MgYWRkY2xvc2Vob29rKGFkZGJhc2UpOgogICAgICIiIkNsYXNzIHRvIGFkZCBhIGNsb3NlIGhvb2sgdG8gYW4gb3BlbiBmaWxlLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBjbG9zZWhvb2ssICpob29rYXJncyk6Ci0gICAgICAgIGFkZGJhc2UuX19pbml0X18oc2VsZiwgZnApCisgICAgICAgIHN1cGVyKGFkZGNsb3NlaG9vaywgc2VsZikuX19pbml0X18oZnApCiAgICAgICAgIHNlbGYuY2xvc2Vob29rID0gY2xvc2Vob29rCiAgICAgICAgIHNlbGYuaG9va2FyZ3MgPSBob29rYXJncwogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLmNsb3NlaG9vazoKLSAgICAgICAgICAgIHNlbGYuY2xvc2Vob29rKCpzZWxmLmhvb2thcmdzKQotICAgICAgICAgICAgc2VsZi5jbG9zZWhvb2sgPSBOb25lCi0gICAgICAgICAgICBzZWxmLmhvb2thcmdzID0gTm9uZQotICAgICAgICBhZGRiYXNlLmNsb3NlKHNlbGYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGNsb3NlaG9vayA9IHNlbGYuY2xvc2Vob29rCisgICAgICAgICAgICBob29rYXJncyA9IHNlbGYuaG9va2FyZ3MKKyAgICAgICAgICAgIGlmIGNsb3NlaG9vazoKKyAgICAgICAgICAgICAgICBzZWxmLmNsb3NlaG9vayA9IE5vbmUKKyAgICAgICAgICAgICAgICBzZWxmLmhvb2thcmdzID0gTm9uZQorICAgICAgICAgICAgICAgIGNsb3NlaG9vaygqaG9va2FyZ3MpCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzdXBlcihhZGRjbG9zZWhvb2ssIHNlbGYpLmNsb3NlKCkKKwogCiBjbGFzcyBhZGRpbmZvKGFkZGJhc2UpOgogICAgICIiImNsYXNzIHRvIGFkZCBhbiBpbmZvKCkgbWV0aG9kIHRvIGFuIG9wZW4gZmlsZS4iIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmcCwgaGVhZGVycyk6Ci0gICAgICAgIGFkZGJhc2UuX19pbml0X18oc2VsZiwgZnApCisgICAgICAgIHN1cGVyKGFkZGluZm8sIHNlbGYpLl9faW5pdF9fKGZwKQogICAgICAgICBzZWxmLmhlYWRlcnMgPSBoZWFkZXJzCiAKICAgICBkZWYgaW5mbyhzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuaGVhZGVycwogCi1jbGFzcyBhZGRpbmZvdXJsKGFkZGJhc2UpOgorCitjbGFzcyBhZGRpbmZvdXJsKGFkZGluZm8pOgogICAgICIiImNsYXNzIHRvIGFkZCBpbmZvKCkgYW5kIGdldHVybCgpIG1ldGhvZHMgdG8gYW4gb3BlbiBmaWxlLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZwLCBoZWFkZXJzLCB1cmwsIGNvZGU9Tm9uZSk6Ci0gICAgICAgIGFkZGJhc2UuX19pbml0X18oc2VsZiwgZnApCi0gICAgICAgIHNlbGYuaGVhZGVycyA9IGhlYWRlcnMKKyAgICAgICAgc3VwZXIoYWRkaW5mb3VybCwgc2VsZikuX19pbml0X18oZnAsIGhlYWRlcnMpCiAgICAgICAgIHNlbGYudXJsID0gdXJsCiAgICAgICAgIHNlbGYuY29kZSA9IGNvZGUKIAotICAgIGRlZiBpbmZvKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5oZWFkZXJzCi0KICAgICBkZWYgZ2V0Y29kZShzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuY29kZQogCmRpZmYgLS1naXQgYS9MaWIvdXJsbGliL3JvYm90cGFyc2VyLnB5IGIvTGliL3VybGxpYi9yb2JvdHBhcnNlci5weQppbmRleCA5NzhiYTU4Li4xZDdiNzUxIDEwMDY0NAotLS0gYS9MaWIvdXJsbGliL3JvYm90cGFyc2VyLnB5CisrKyBiL0xpYi91cmxsaWIvcm9ib3RwYXJzZXIucHkKQEAgLTcsNyArNyw3IEBACiAgICAgMikgUFNGIGxpY2Vuc2UgZm9yIFB5dGhvbiAyLjIKIAogICAgIFRoZSByb2JvdHMudHh0IEV4Y2x1c2lvbiBQcm90b2NvbCBpcyBpbXBsZW1lbnRlZCBhcyBzcGVjaWZpZWQgaW4KLSAgICBodHRwOi8vaW5mby53ZWJjcmF3bGVyLmNvbS9tYWsvcHJvamVjdHMvcm9ib3RzL25vcm9ib3RzLXJmYy5odG1sCisgICAgaHR0cDovL3d3dy5yb2JvdHN0eHQub3JnL25vcm9ib3RzLXJmYy50eHQKICIiIgogCiBpbXBvcnQgdXJsbGliLnBhcnNlLCB1cmxsaWIucmVxdWVzdApAQCAtNTcsNyArNTcsNyBAQAogICAgICAgICBleGNlcHQgdXJsbGliLmVycm9yLkhUVFBFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBpZiBlcnIuY29kZSBpbiAoNDAxLCA0MDMpOgogICAgICAgICAgICAgICAgIHNlbGYuZGlzYWxsb3dfYWxsID0gVHJ1ZQotICAgICAgICAgICAgZWxpZiBlcnIuY29kZSA+PSA0MDA6CisgICAgICAgICAgICBlbGlmIGVyci5jb2RlID49IDQwMCBhbmQgZXJyLmNvZGUgPCA1MDA6CiAgICAgICAgICAgICAgICAgc2VsZi5hbGxvd19hbGwgPSBUcnVlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICByYXcgPSBmLnJlYWQoKQpAQCAtODUsNiArODUsNyBAQAogICAgICAgICBzdGF0ZSA9IDAKICAgICAgICAgZW50cnkgPSBFbnRyeSgpCiAKKyAgICAgICAgc2VsZi5tb2RpZmllZCgpCiAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgogICAgICAgICAgICAgaWYgbm90IGxpbmU6CiAgICAgICAgICAgICAgICAgaWYgc3RhdGUgPT0gMToKQEAgLTEyOSw2ICsxMzAsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICBpZiBzZWxmLmFsbG93X2FsbDoKICAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgICMgVW50aWwgdGhlIHJvYm90cy50eHQgZmlsZSBoYXMgYmVlbiByZWFkIG9yIGZvdW5kIG5vdAorICAgICAgICAjIHRvIGV4aXN0LCB3ZSBtdXN0IGFzc3VtZSB0aGF0IG5vIHVybCBpcyBhbGxvd2FibGUuCisgICAgICAgICMgVGhpcyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgd2hlbiBhIHVzZXIgZXJyb25lbm91c2x5CisgICAgICAgICMgY2FsbHMgY2FuX2ZldGNoKCkgYmVmb3JlIGNhbGxpbmcgcmVhZCgpLgorICAgICAgICBpZiBub3Qgc2VsZi5sYXN0X2NoZWNrZWQ6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKICAgICAgICAgIyBzZWFyY2ggZm9yIGdpdmVuIHVzZXIgYWdlbnQgbWF0Y2hlcwogICAgICAgICAjIHRoZSBmaXJzdCBtYXRjaCBjb3VudHMKICAgICAgICAgcGFyc2VkX3VybCA9IHVybGxpYi5wYXJzZS51cmxwYXJzZSh1cmxsaWIucGFyc2UudW5xdW90ZSh1cmwpKQpkaWZmIC0tZ2l0IGEvTGliL3V1aWQucHkgYi9MaWIvdXVpZC5weQppbmRleCA5OTQ2MDQyLi4xMDYxYmZmIDEwMDY0NAotLS0gYS9MaWIvdXVpZC5weQorKysgYi9MaWIvdXVpZC5weQpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgICAgICAgICBpZiBsZW4oYnl0ZXMpICE9IDE2OgogICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ2J5dGVzIGlzIG5vdCBhIDE2LWNoYXIgc3RyaW5nJykKICAgICAgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJ5dGVzLCBieXRlc18pLCByZXByKGJ5dGVzKQotICAgICAgICAgICAgaW50ID0gaW50XygoJyUwMngnKjE2KSAlIHR1cGxlKGJ5dGVzKSwgMTYpCisgICAgICAgICAgICBpbnQgPSBpbnRfLmZyb21fYnl0ZXMoYnl0ZXMsIGJ5dGVvcmRlcj0nYmlnJykKICAgICAgICAgaWYgZmllbGRzIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgaWYgbGVuKGZpZWxkcykgIT0gNjoKICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdmaWVsZHMgaXMgbm90IGEgNi10dXBsZScpCkBAIC0zMTEsNyArMzExLDcgQEAKICAgICAgICAgaWYgc2VsZi52YXJpYW50ID09IFJGQ180MTIyOgogICAgICAgICAgICAgcmV0dXJuIGludCgoc2VsZi5pbnQgPj4gNzYpICYgMHhmKQogCi1kZWYgX2ZpbmRfbWFjKGNvbW1hbmQsIGFyZ3MsIGh3X2lkZW50aWZpZXJzLCBnZXRfaW5kZXgpOgorZGVmIF9wb3Blbihjb21tYW5kLCBhcmdzKToKICAgICBpbXBvcnQgb3MsIHNodXRpbAogICAgIGV4ZWN1dGFibGUgPSBzaHV0aWwud2hpY2goY29tbWFuZCkKICAgICBpZiBleGVjdXRhYmxlIGlzIE5vbmU6CkBAIC0zMTksMTkgKzMxOSwyNyBAQAogICAgICAgICBleGVjdXRhYmxlID0gc2h1dGlsLndoaWNoKGNvbW1hbmQsIHBhdGg9cGF0aCkKICAgICAgICAgaWYgZXhlY3V0YWJsZSBpcyBOb25lOgogICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAjIExDX0FMTCB0byBlbnN1cmUgRW5nbGlzaCBvdXRwdXQsIDI+L2Rldi9udWxsIHRvIHByZXZlbnQgb3V0cHV0IG9uCisgICAgIyBzdGRlcnIgKE5vdGU6IHdlIGRvbid0IGhhdmUgYW4gZXhhbXBsZSB3aGVyZSB0aGUgd29yZHMgd2Ugc2VhcmNoIGZvcgorICAgICMgYXJlIGFjdHVhbGx5IGxvY2FsaXplZCwgYnV0IGluIHRoZW9yeSBzb21lIHN5c3RlbSBjb3VsZCBkbyBzby4pCisgICAgY21kID0gJ0xDX0FMTD1DICVzICVzIDI+L2Rldi9udWxsJyAlIChleGVjdXRhYmxlLCBhcmdzKQorICAgIHJldHVybiBvcy5wb3BlbihjbWQpCiAKK2RlZiBfZmluZF9tYWMoY29tbWFuZCwgYXJncywgaHdfaWRlbnRpZmllcnMsIGdldF9pbmRleCk6CiAgICAgdHJ5OgotICAgICAgICAjIExDX0FMTCB0byBlbnN1cmUgRW5nbGlzaCBvdXRwdXQsIDI+L2Rldi9udWxsIHRvCi0gICAgICAgICMgcHJldmVudCBvdXRwdXQgb24gc3RkZXJyCi0gICAgICAgIGNtZCA9ICdMQ19BTEw9QyAlcyAlcyAyPi9kZXYvbnVsbCcgJSAoZXhlY3V0YWJsZSwgYXJncykKLSAgICAgICAgd2l0aCBvcy5wb3BlbihjbWQpIGFzIHBpcGU6CisgICAgICAgIHBpcGUgPSBfcG9wZW4oY29tbWFuZCwgYXJncykKKyAgICAgICAgaWYgbm90IHBpcGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCBwaXBlOgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKLSAgICAgICAgICAgICAgICB3b3JkcyA9IGxpbmUubG93ZXIoKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgd29yZHMgPSBsaW5lLmxvd2VyKCkucnN0cmlwKCkuc3BsaXQoKQogICAgICAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKGxlbih3b3JkcykpOgogICAgICAgICAgICAgICAgICAgICBpZiB3b3Jkc1tpXSBpbiBod19pZGVudGlmaWVyczoKICAgICAgICAgICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3Jkc1tnZXRfaW5kZXgoaSldLnJlcGxhY2UoJzonLCAnJyksIDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmQgPSB3b3Jkc1tnZXRfaW5kZXgoaSldCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjID0gaW50KHdvcmQucmVwbGFjZSgnOicsICcnKSwgMTYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWFjOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFjCiAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVmlydHVhbCBpbnRlcmZhY2VzLCBzdWNoIGFzIHRob3NlIHByb3ZpZGVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBWUE5zLCBkbyBub3QgaGF2ZSBhIGNvbG9uLWRlbGltaXRlZCBNQUMgYWRkcmVzcwpAQCAtMzM5LDMyICszNDcsNTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRhc2hlcy4gVGhlc2Ugc2hvdWxkIGJlIGlnbm9yZWQgaW4gZmF2b3Igb2YgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcmVhbCBNQUMgYWRkcmVzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3MKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogCiBkZWYgX2lmY29uZmlnX2dldG5vZGUoKToKICAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb24gVW5peCBieSBydW5uaW5nIGlmY29uZmlnLiIiIgotCiAgICAgIyBUaGlzIHdvcmtzIG9uIExpbnV4ICgnJyBvciAnLWEnKSwgVHJ1NjQgKCctYXYnKSwgYnV0IG5vdCBhbGwgVW5peGVzLgogICAgIGZvciBhcmdzIGluICgnJywgJy1hJywgJy1hdicpOgogICAgICAgICBtYWMgPSBfZmluZF9tYWMoJ2lmY29uZmlnJywgYXJncywgWydod2FkZHInLCAnZXRoZXInXSwgbGFtYmRhIGk6IGkrMSkKICAgICAgICAgaWYgbWFjOgogICAgICAgICAgICAgcmV0dXJuIG1hYwogCi0gICAgaW1wb3J0IHNvY2tldAotICAgIGlwX2FkZHIgPSBzb2NrZXQuZ2V0aG9zdGJ5bmFtZShzb2NrZXQuZ2V0aG9zdG5hbWUoKSkKK2RlZiBfYXJwX2dldG5vZGUoKToKKyAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb24gVW5peCBieSBydW5uaW5nIGFycC4iIiIKKyAgICBpbXBvcnQgb3MsIHNvY2tldAorICAgIHRyeToKKyAgICAgICAgaXBfYWRkciA9IHNvY2tldC5nZXRob3N0YnluYW1lKHNvY2tldC5nZXRob3N0bmFtZSgpKQorICAgIGV4Y2VwdCBPU0Vycm9yOgorICAgICAgICByZXR1cm4gTm9uZQogCiAgICAgIyBUcnkgZ2V0dGluZyB0aGUgTUFDIGFkZHIgZnJvbSBhcnAgYmFzZWQgb24gb3VyIElQIGFkZHJlc3MgKFNvbGFyaXMpLgotICAgIG1hYyA9IF9maW5kX21hYygnYXJwJywgJy1hbicsIFtpcF9hZGRyXSwgbGFtYmRhIGk6IC0xKQotICAgIGlmIG1hYzoKLSAgICAgICAgcmV0dXJuIG1hYworICAgIHJldHVybiBfZmluZF9tYWMoJ2FycCcsICctYW4nLCBbaXBfYWRkcl0sIGxhbWJkYSBpOiAtMSkKIAorZGVmIF9sYW5zY2FuX2dldG5vZGUoKToKKyAgICAiIiJHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3Mgb24gVW5peCBieSBydW5uaW5nIGxhbnNjYW4uIiIiCiAgICAgIyBUaGlzIG1pZ2h0IHdvcmsgb24gSFAtVVguCi0gICAgbWFjID0gX2ZpbmRfbWFjKCdsYW5zY2FuJywgJy1haScsIFsnbGFuMCddLCBsYW1iZGEgaTogMCkKLSAgICBpZiBtYWM6Ci0gICAgICAgIHJldHVybiBtYWMKKyAgICByZXR1cm4gX2ZpbmRfbWFjKCdsYW5zY2FuJywgJy1haScsIFsnbGFuMCddLCBsYW1iZGEgaTogMCkKIAotICAgIHJldHVybiBOb25lCitkZWYgX25ldHN0YXRfZ2V0bm9kZSgpOgorICAgICIiIkdldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyBvbiBVbml4IGJ5IHJ1bm5pbmcgbmV0c3RhdC4iIiIKKyAgICAjIFRoaXMgbWlnaHQgd29yayBvbiBBSVgsIFRydTY0IFVOSVggYW5kIHByZXN1bWFibHkgb24gSVJJWC4KKyAgICB0cnk6CisgICAgICAgIHBpcGUgPSBfcG9wZW4oJ25ldHN0YXQnLCAnLWlhJykKKyAgICAgICAgaWYgbm90IHBpcGU6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgd2l0aCBwaXBlOgorICAgICAgICAgICAgd29yZHMgPSBwaXBlLnJlYWRsaW5lKCkucnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGkgPSB3b3Jkcy5pbmRleCgnQWRkcmVzcycpCisgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIGZvciBsaW5lIGluIHBpcGU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3b3JkcyA9IGxpbmUucnN0cmlwKCkuc3BsaXQoKQorICAgICAgICAgICAgICAgICAgICB3b3JkID0gd29yZHNbaV0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKHdvcmQpID09IDE3IGFuZCB3b3JkLmNvdW50KCc6JykgPT0gNToKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hYyA9IGludCh3b3JkLnJlcGxhY2UoJzonLCAnJyksIDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgbWFjOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWMKKyAgICAgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIEluZGV4RXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHBhc3MKIAogZGVmIF9pcGNvbmZpZ19nZXRub2RlKCk6CiAgICAgIiIiR2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9uIFdpbmRvd3MgYnkgcnVubmluZyBpcGNvbmZpZy5leGUuIiIiCkBAIC0zODAsMTUgKzQxNCwxMyBAQAogICAgIGZvciBkaXIgaW4gZGlyczoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcGlwZSA9IG9zLnBvcGVuKG9zLnBhdGguam9pbihkaXIsICdpcGNvbmZpZycpICsgJyAvYWxsJykKLSAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgZWxzZToKKyAgICAgICAgd2l0aCBwaXBlOgogICAgICAgICAgICAgZm9yIGxpbmUgaW4gcGlwZToKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGxpbmUuc3BsaXQoJzonKVstMV0uc3RyaXAoKS5sb3dlcigpCiAgICAgICAgICAgICAgICAgaWYgcmUubWF0Y2goJyhbMC05YS1mXVswLTlhLWZdLSl7NX1bMC05YS1mXVswLTlhLWZdJywgdmFsdWUpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50KHZhbHVlLnJlcGxhY2UoJy0nLCAnJyksIDE2KQotICAgICAgICBmaW5hbGx5OgotICAgICAgICAgICAgcGlwZS5jbG9zZSgpCiAKIGRlZiBfbmV0Ymlvc19nZXRub2RlKCk6CiAgICAgIiIiR2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzIG9uIFdpbmRvd3MgdXNpbmcgTmV0QklPUyBjYWxscy4KQEAgLTUwNyw3ICs1MzksOCBAQAogICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgogICAgICAgICBnZXR0ZXJzID0gW193aW5kbGxfZ2V0bm9kZSwgX25ldGJpb3NfZ2V0bm9kZSwgX2lwY29uZmlnX2dldG5vZGVdCiAgICAgZWxzZToKLSAgICAgICAgZ2V0dGVycyA9IFtfdW5peGRsbF9nZXRub2RlLCBfaWZjb25maWdfZ2V0bm9kZV0KKyAgICAgICAgZ2V0dGVycyA9IFtfdW5peGRsbF9nZXRub2RlLCBfaWZjb25maWdfZ2V0bm9kZSwgX2FycF9nZXRub2RlLAorICAgICAgICAgICAgICAgICAgIF9sYW5zY2FuX2dldG5vZGUsIF9uZXRzdGF0X2dldG5vZGVdCiAKICAgICBmb3IgZ2V0dGVyIGluIGdldHRlcnMgKyBbX3JhbmRvbV9nZXRub2RlXToKICAgICAgICAgdHJ5OgpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvX19pbml0X18ucHkgYi9MaWIvdmVudi9fX2luaXRfXy5weQppbmRleCAzNjA2MzcwLi4zZDYwNmVmIDEwMDY0NAotLS0gYS9MaWIvdmVudi9fX2luaXRfXy5weQorKysgYi9MaWIvdmVudi9fX2luaXRfXy5weQpAQCAtMSw3ICsxLDcgQEAKICIiIgogVmlydHVhbCBlbnZpcm9ubWVudCAodmVudikgcGFja2FnZSBmb3IgUHl0aG9uLiBCYXNlZCBvbiBQRVAgNDA1LgogCi1Db3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBWaW5heSBTYWppcC4KK0NvcHlyaWdodCAoQykgMjAxMS0yMDE0IFZpbmF5IFNhamlwLgogTGljZW5zZWQgdG8gdGhlIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KIAogdXNhZ2U6IHB5dGhvbiAtbSB2ZW52IFstaF0gWy0tc3lzdGVtLXNpdGUtcGFja2FnZXNdIFstLXN5bWxpbmtzXSBbLS1jbGVhcl0KQEAgLTI0LDEyICsyNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2VkLgogICAtLXVwZ3JhZGUgICAgICAgICAgICAgVXBncmFkZSB0aGUgZW52aXJvbm1lbnQgZGlyZWN0b3J5IHRvIHVzZSB0aGlzIHZlcnNpb24KICAgICAgICAgICAgICAgICAgICAgICAgIG9mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uIGhhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLgorICAtLXdpdGhvdXQtcGlwICAgICAgICAgU2tpcHMgaW5zdGFsbGluZyBvciB1cGdyYWRpbmcgcGlwIGluIHRoZSB2aXJ0dWFsCisgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudCAocGlwIGlzIGJvb3RzdHJhcHBlZCBieSBkZWZhdWx0KQogIiIiCiBpbXBvcnQgbG9nZ2luZwogaW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCitpbXBvcnQgc3VicHJvY2VzcwogaW1wb3J0IHN5cwotaW1wb3J0IHN5c2NvbmZpZwogaW1wb3J0IHR5cGVzCiAKIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQpAQCAtNTYsMTQgKzU4LDE3IEBACiAgICAgOnBhcmFtIHN5bWxpbmtzOiBJZiBUcnVlLCBhdHRlbXB0IHRvIHN5bWxpbmsgcmF0aGVyIHRoYW4gY29weSBmaWxlcyBpbnRvCiAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIGVudmlyb25tZW50LgogICAgIDpwYXJhbSB1cGdyYWRlOiBJZiBUcnVlLCB1cGdyYWRlIGFuIGV4aXN0aW5nIHZpcnR1YWwgZW52aXJvbm1lbnQuCisgICAgOnBhcmFtIHdpdGhfcGlwOiBJZiBUcnVlLCBlbnN1cmUgcGlwIGlzIGluc3RhbGxlZCBpbiB0aGUgdmlydHVhbAorICAgICAgICAgICAgICAgICAgICAgZW52aXJvbm1lbnQKICAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzeXN0ZW1fc2l0ZV9wYWNrYWdlcz1GYWxzZSwgY2xlYXI9RmFsc2UsCi0gICAgICAgICAgICAgICAgIHN5bWxpbmtzPUZhbHNlLCB1cGdyYWRlPUZhbHNlKToKKyAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHVwZ3JhZGU9RmFsc2UsIHdpdGhfcGlwPUZhbHNlKToKICAgICAgICAgc2VsZi5zeXN0ZW1fc2l0ZV9wYWNrYWdlcyA9IHN5c3RlbV9zaXRlX3BhY2thZ2VzCiAgICAgICAgIHNlbGYuY2xlYXIgPSBjbGVhcgogICAgICAgICBzZWxmLnN5bWxpbmtzID0gc3ltbGlua3MKICAgICAgICAgc2VsZi51cGdyYWRlID0gdXBncmFkZQorICAgICAgICBzZWxmLndpdGhfcGlwID0gd2l0aF9waXAKIAogICAgIGRlZiBjcmVhdGUoc2VsZiwgZW52X2Rpcik6CiAgICAgICAgICIiIgpAQCAtNzYsMTAgKzgxLDIwIEBACiAgICAgICAgIGNvbnRleHQgPSBzZWxmLmVuc3VyZV9kaXJlY3RvcmllcyhlbnZfZGlyKQogICAgICAgICBzZWxmLmNyZWF0ZV9jb25maWd1cmF0aW9uKGNvbnRleHQpCiAgICAgICAgIHNlbGYuc2V0dXBfcHl0aG9uKGNvbnRleHQpCisgICAgICAgIGlmIHNlbGYud2l0aF9waXA6CisgICAgICAgICAgICBzZWxmLl9zZXR1cF9waXAoY29udGV4dCkKICAgICAgICAgaWYgbm90IHNlbGYudXBncmFkZToKICAgICAgICAgICAgIHNlbGYuc2V0dXBfc2NyaXB0cyhjb250ZXh0KQogICAgICAgICAgICAgc2VsZi5wb3N0X3NldHVwKGNvbnRleHQpCiAKKyAgICBkZWYgY2xlYXJfZGlyZWN0b3J5KHNlbGYsIHBhdGgpOgorICAgICAgICBmb3IgZm4gaW4gb3MubGlzdGRpcihwYXRoKToKKyAgICAgICAgICAgIGZuID0gb3MucGF0aC5qb2luKHBhdGgsIGZuKQorICAgICAgICAgICAgaWYgb3MucGF0aC5pc2xpbmsoZm4pIG9yIG9zLnBhdGguaXNmaWxlKGZuKToKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZm4pCisgICAgICAgICAgICBlbGlmIG9zLnBhdGguaXNkaXIoZm4pOgorICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZm4pCisKICAgICBkZWYgZW5zdXJlX2RpcmVjdG9yaWVzKHNlbGYsIGVudl9kaXIpOgogICAgICAgICAiIiIKICAgICAgICAgQ3JlYXRlIHRoZSBkaXJlY3RvcmllcyBmb3IgdGhlIGVudmlyb25tZW50LgpAQCAtOTEsMTEgKzEwNiwxMSBAQAogICAgICAgICBkZWYgY3JlYXRlX2lmX25lZWRlZChkKToKICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkKToKICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyhkKQorICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzbGluayhkKSBvciBvcy5wYXRoLmlzZmlsZShkKToKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdVbmFibGUgdG8gY3JlYXRlIGRpcmVjdG9yeSAlcicgJSBkKQogCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGVudl9kaXIpIGFuZCBub3QgKHNlbGYuY2xlYXIgb3Igc2VsZi51cGdyYWRlKToKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0RpcmVjdG9yeSBleGlzdHM6ICVzJyAlIGVudl9kaXIpCiAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGVudl9kaXIpIGFuZCBzZWxmLmNsZWFyOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShlbnZfZGlyKQorICAgICAgICAgICAgc2VsZi5jbGVhcl9kaXJlY3RvcnkoZW52X2RpcikKICAgICAgICAgY29udGV4dCA9IHR5cGVzLlNpbXBsZU5hbWVzcGFjZSgpCiAgICAgICAgIGNvbnRleHQuZW52X2RpciA9IGVudl9kaXIKICAgICAgICAgY29udGV4dC5lbnZfbmFtZSA9IG9zLnBhdGguc3BsaXQoZW52X2RpcilbMV0KQEAgLTExNywxMCArMTMyLDE4IEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBiaW5uYW1lID0gJ2JpbicKICAgICAgICAgICAgIGluY3BhdGggPSAnaW5jbHVkZScKLSAgICAgICAgICAgIGxpYnBhdGggPSBvcy5wYXRoLmpvaW4oZW52X2RpciwgJ2xpYicsICdweXRob24lZC4lZCcgJSBzeXMudmVyc2lvbl9pbmZvWzoyXSwgJ3NpdGUtcGFja2FnZXMnKQorICAgICAgICAgICAgbGlicGF0aCA9IG9zLnBhdGguam9pbihlbnZfZGlyLCAnbGliJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbiVkLiVkJyAlIHN5cy52ZXJzaW9uX2luZm9bOjJdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2l0ZS1wYWNrYWdlcycpCiAgICAgICAgIGNvbnRleHQuaW5jX3BhdGggPSBwYXRoID0gb3MucGF0aC5qb2luKGVudl9kaXIsIGluY3BhdGgpCiAgICAgICAgIGNyZWF0ZV9pZl9uZWVkZWQocGF0aCkKICAgICAgICAgY3JlYXRlX2lmX25lZWRlZChsaWJwYXRoKQorICAgICAgICAjIElzc3VlIDIxMTk3OiBjcmVhdGUgbGliNjQgYXMgYSBzeW1saW5rIHRvIGxpYiBvbiA2NC1iaXQgbm9uLU9TIFggUE9TSVgKKyAgICAgICAgaWYgKChzeXMubWF4c2l6ZSA+IDIqKjMyKSBhbmQgKG9zLm5hbWUgPT0gJ3Bvc2l4JykgYW5kCisgICAgICAgICAgICAoc3lzLnBsYXRmb3JtICE9ICdkYXJ3aW4nKSk6CisgICAgICAgICAgICBsaW5rX3BhdGggPSBvcy5wYXRoLmpvaW4oZW52X2RpciwgJ2xpYjY0JykKKyAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhsaW5rX3BhdGgpOiAgICMgSXNzdWUgIzIxNjQzCisgICAgICAgICAgICAgICAgb3Muc3ltbGluaygnbGliJywgbGlua19wYXRoKQogICAgICAgICBjb250ZXh0LmJpbl9wYXRoID0gYmlucGF0aCA9IG9zLnBhdGguam9pbihlbnZfZGlyLCBiaW5uYW1lKQogICAgICAgICBjb250ZXh0LmJpbl9uYW1lID0gYmlubmFtZQogICAgICAgICBjb250ZXh0LmVudl9leGUgPSBvcy5wYXRoLmpvaW4oYmlucGF0aCwgZXhlbmFtZSkKQEAgLTE1NCw3ICsxNzcsNyBAQAogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGYuc3RhcnRzd2l0aCgncHl0aG9uJykgYW5kIGYuZW5kc3dpdGgoJy5leGUnKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAogCi0gICAgZGVmIHN5bWxpbmtfb3JfY29weShzZWxmLCBzcmMsIGRzdCk6CisgICAgZGVmIHN5bWxpbmtfb3JfY29weShzZWxmLCBzcmMsIGRzdCwgcmVsYXRpdmVfc3ltbGlua3Nfb2s9RmFsc2UpOgogICAgICAgICAiIiIKICAgICAgICAgVHJ5IHN5bWxpbmtpbmcgYSBmaWxlLCBhbmQgaWYgdGhhdCBmYWlscywgZmFsbCBiYWNrIHRvIGNvcHlpbmcuCiAgICAgICAgICIiIgpAQCAtMTYyLDcgKzE4NSwxMSBAQAogICAgICAgICBpZiBub3QgZm9yY2VfY29weToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsoZHN0KTogIyBjYW4ndCBsaW5rIHRvIGl0c2VsZiEKLSAgICAgICAgICAgICAgICAgICAgb3Muc3ltbGluayhzcmMsIGRzdCkKKyAgICAgICAgICAgICAgICAgICAgaWYgcmVsYXRpdmVfc3ltbGlua3Nfb2s6CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQgb3MucGF0aC5kaXJuYW1lKHNyYykgPT0gb3MucGF0aC5kaXJuYW1lKGRzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5iYXNlbmFtZShzcmMpLCBkc3QpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5zeW1saW5rKHNyYywgZHN0KQogICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjogICAjIG1heSBuZWVkIHRvIHVzZSBhIG1vcmUgc3BlY2lmaWMgZXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ1VuYWJsZSB0byBzeW1saW5rICVyIHRvICVyJywgc3JjLCBkc3QpCiAgICAgICAgICAgICAgICAgZm9yY2VfY29weSA9IFRydWUKQEAgLTE3Nyw3ICsyMDQsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYmVpbmcgcHJvY2Vzc2VkLgogICAgICAgICAiIiIKICAgICAgICAgYmlucGF0aCA9IGNvbnRleHQuYmluX3BhdGgKLSAgICAgICAgZXhlbmFtZSA9IGNvbnRleHQucHl0aG9uX2V4ZQogICAgICAgICBwYXRoID0gY29udGV4dC5lbnZfZXhlCiAgICAgICAgIGNvcGllciA9IHNlbGYuc3ltbGlua19vcl9jb3B5CiAgICAgICAgIGNvcGllcihjb250ZXh0LmV4ZWN1dGFibGUsIHBhdGgpCkBAIC0xODgsNyArMjE0LDExIEBACiAgICAgICAgICAgICBmb3Igc3VmZml4IGluICgncHl0aG9uJywgJ3B5dGhvbjMnKToKICAgICAgICAgICAgICAgICBwYXRoID0gb3MucGF0aC5qb2luKGJpbnBhdGgsIHN1ZmZpeCkKICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnN5bWxpbmsoZXhlbmFtZSwgcGF0aCkKKyAgICAgICAgICAgICAgICAgICAgIyBJc3N1ZSAxODgwNzogbWFrZSBjb3BpZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgIyBzeW1saW5rcyBhcmUgbm90IHdhbnRlZAorICAgICAgICAgICAgICAgICAgICBjb3BpZXIoY29udGV4dC5lbnZfZXhlLCBwYXRoLCByZWxhdGl2ZV9zeW1saW5rc19vaz1UcnVlKQorICAgICAgICAgICAgICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2xpbmsocGF0aCk6CisgICAgICAgICAgICAgICAgICAgICAgICBvcy5jaG1vZChwYXRoLCAwbzc1NSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHN1YmRpciA9ICdETExzJwogICAgICAgICAgICAgaW5jbHVkZSA9IHNlbGYuaW5jbHVkZV9iaW5hcnkKQEAgLTIxMCwxMiArMjQwLDIyIEBACiAgICAgICAgICAgICAgICAgaWYgJ2luaXQudGNsJyBpbiBmaWxlczoKICAgICAgICAgICAgICAgICAgICAgdGNsZGlyID0gb3MucGF0aC5iYXNlbmFtZShyb290KQogICAgICAgICAgICAgICAgICAgICB0Y2xkaXIgPSBvcy5wYXRoLmpvaW4oY29udGV4dC5lbnZfZGlyLCAnTGliJywgdGNsZGlyKQotICAgICAgICAgICAgICAgICAgICBvcy5tYWtlZGlycyh0Y2xkaXIpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyh0Y2xkaXIpOgorICAgICAgICAgICAgICAgICAgICAgICAgb3MubWFrZWRpcnModGNsZGlyKQogICAgICAgICAgICAgICAgICAgICBzcmMgPSBvcy5wYXRoLmpvaW4ocm9vdCwgJ2luaXQudGNsJykKICAgICAgICAgICAgICAgICAgICAgZHN0ID0gb3MucGF0aC5qb2luKHRjbGRpciwgJ2luaXQudGNsJykKICAgICAgICAgICAgICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNyYywgZHN0KQogICAgICAgICAgICAgICAgICAgICBicmVhawogCisgICAgZGVmIF9zZXR1cF9waXAoc2VsZiwgY29udGV4dCk6CisgICAgICAgICIiIkluc3RhbGxzIG9yIHVwZ3JhZGVzIHBpcCBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQiIiIKKyAgICAgICAgIyBXZSBydW4gZW5zdXJlcGlwIGluIGlzb2xhdGVkIG1vZGUgdG8gYXZvaWQgc2lkZSBlZmZlY3RzIGZyb20KKyAgICAgICAgIyBlbnZpcm9ubWVudCB2YXJzLCB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGFueXRoaW5nIGVsc2UKKyAgICAgICAgIyBpbnRlbmRlZCBmb3IgdGhlIGdsb2JhbCBQeXRob24gZW52aXJvbm1lbnQKKyAgICAgICAgY21kID0gW2NvbnRleHQuZW52X2V4ZSwgJy1JbScsICdlbnN1cmVwaXAnLCAnLS11cGdyYWRlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS1kZWZhdWx0LXBpcCddCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorCiAgICAgZGVmIHNldHVwX3NjcmlwdHMoc2VsZiwgY29udGV4dCk6CiAgICAgICAgICIiIgogICAgICAgICBTZXQgdXAgc2NyaXB0cyBpbnRvIHRoZSBjcmVhdGVkIGVudmlyb25tZW50IGZyb20gYSBkaXJlY3RvcnkuCkBAIC0yNTMsNyArMjkzLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJlaW5nIHByb2Nlc3NlZC4KICAgICAgICAgIiIiCiAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9ESVJfXycsIGNvbnRleHQuZW52X2RpcikKLSAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX05BTUVfXycsIGNvbnRleHQucHJvbXB0KQorICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKCdfX1ZFTlZfTkFNRV9fJywgY29udGV4dC5lbnZfbmFtZSkKKyAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX1BST01QVF9fJywgY29udGV4dC5wcm9tcHQpCiAgICAgICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoJ19fVkVOVl9CSU5fTkFNRV9fJywgY29udGV4dC5iaW5fbmFtZSkKICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZSgnX19WRU5WX1BZVEhPTl9fJywgY29udGV4dC5lbnZfZXhlKQogICAgICAgICByZXR1cm4gdGV4dApAQCAtMzA4LDcgKzM0OSw4IEBACiAgICAgICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5bW9kZShzcmNmaWxlLCBkc3RmaWxlKQogCiAKLWRlZiBjcmVhdGUoZW52X2Rpciwgc3lzdGVtX3NpdGVfcGFja2FnZXM9RmFsc2UsIGNsZWFyPUZhbHNlLCBzeW1saW5rcz1GYWxzZSk6CitkZWYgY3JlYXRlKGVudl9kaXIsIHN5c3RlbV9zaXRlX3BhY2thZ2VzPUZhbHNlLCBjbGVhcj1GYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgc3ltbGlua3M9RmFsc2UsIHdpdGhfcGlwPUZhbHNlKToKICAgICAiIiIKICAgICBDcmVhdGUgYSB2aXJ0dWFsIGVudmlyb25tZW50IGluIGEgZGlyZWN0b3J5LgogCkBAIC0zMjQsOSArMzY2LDExIEBACiAgICAgICAgICAgICAgICAgICByYWlzZWQuCiAgICAgOnBhcmFtIHN5bWxpbmtzOiBJZiBUcnVlLCBhdHRlbXB0IHRvIHN5bWxpbmsgcmF0aGVyIHRoYW4gY29weSBmaWxlcyBpbnRvCiAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsIGVudmlyb25tZW50LgorICAgIDpwYXJhbSB3aXRoX3BpcDogSWYgVHJ1ZSwgZW5zdXJlIHBpcCBpcyBpbnN0YWxsZWQgaW4gdGhlIHZpcnR1YWwKKyAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50CiAgICAgIiIiCiAgICAgYnVpbGRlciA9IEVudkJ1aWxkZXIoc3lzdGVtX3NpdGVfcGFja2FnZXM9c3lzdGVtX3NpdGVfcGFja2FnZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyPWNsZWFyLCBzeW1saW5rcz1zeW1saW5rcykKKyAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhcj1jbGVhciwgc3ltbGlua3M9c3ltbGlua3MsIHdpdGhfcGlwPXdpdGhfcGlwKQogICAgIGJ1aWxkZXIuY3JlYXRlKGVudl9kaXIpCiAKIGRlZiBtYWluKGFyZ3M9Tm9uZSk6CkBAIC0zNjAsMjggKzQwNCw0MCBAQAogICAgICAgICAgICAgdXNlX3N5bWxpbmtzID0gRmFsc2UKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHVzZV9zeW1saW5rcyA9IFRydWUKLSAgICAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1zeW1saW5rcycsIGRlZmF1bHQ9dXNlX3N5bWxpbmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlc3Q9J3N5bWxpbmtzJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcnkgdG8gdXNlIHN5bWxpbmtzIHJhdGhlciB0aGFuIGNvcGllcywgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3doZW4gc3ltbGlua3MgYXJlIG5vdCB0aGUgZGVmYXVsdCBmb3IgJwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBwbGF0Zm9ybS4nKQorICAgICAgICBncm91cCA9IHBhcnNlci5hZGRfbXV0dWFsbHlfZXhjbHVzaXZlX2dyb3VwKCkKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLXN5bWxpbmtzJywgZGVmYXVsdD11c2Vfc3ltbGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb249J3N0b3JlX3RydWUnLCBkZXN0PSdzeW1saW5rcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcnkgdG8gdXNlIHN5bWxpbmtzIHJhdGhlciB0aGFuIGNvcGllcywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2hlbiBzeW1saW5rcyBhcmUgbm90IHRoZSBkZWZhdWx0IGZvciAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aGUgcGxhdGZvcm0uJykKKyAgICAgICAgZ3JvdXAuYWRkX2FyZ3VtZW50KCctLWNvcGllcycsIGRlZmF1bHQ9bm90IHVzZV9zeW1saW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbj0nc3RvcmVfZmFsc2UnLCBkZXN0PSdzeW1saW5rcycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdUcnkgdG8gdXNlIGNvcGllcyByYXRoZXIgdGhhbiBzeW1saW5rcywgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXZlbiB3aGVuIHN5bWxpbmtzIGFyZSB0aGUgZGVmYXVsdCBmb3IgJworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHBsYXRmb3JtLicpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tY2xlYXInLCBkZWZhdWx0PUZhbHNlLCBhY3Rpb249J3N0b3JlX3RydWUnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2NsZWFyJywgaGVscD0nRGVsZXRlIHRoZSBlbnZpcm9ubWVudCAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXJlY3RvcnkgaWYgaXQgYWxyZWFkeSAnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleGlzdHMuIElmIG5vdCBzcGVjaWZpZWQgYW5kICcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBkaXJlY3RvcnkgZXhpc3RzLCBhbiBlcnJvcicKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBpcyByYWlzZWQuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0PSdjbGVhcicsIGhlbHA9J0RlbGV0ZSB0aGUgY29udGVudHMgb2YgdGhlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vudmlyb25tZW50IGRpcmVjdG9yeSBpZiBpdCAnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbHJlYWR5IGV4aXN0cywgYmVmb3JlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Vudmlyb25tZW50IGNyZWF0aW9uLicpCiAgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXBncmFkZScsIGRlZmF1bHQ9RmFsc2UsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0ndXBncmFkZScsIGhlbHA9J1VwZ3JhZGUgdGhlIGVudmlyb25tZW50ICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RpcmVjdG9yeSB0byB1c2UgdGhpcyB2ZXJzaW9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mIFB5dGhvbiwgYXNzdW1pbmcgUHl0aG9uICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hhcyBiZWVuIHVwZ3JhZGVkIGluLXBsYWNlLicpCisgICAgICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0td2l0aG91dC1waXAnLCBkZXN0PSd3aXRoX3BpcCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdD1UcnVlLCBhY3Rpb249J3N0b3JlX2ZhbHNlJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdTa2lwcyBpbnN0YWxsaW5nIG9yIHVwZ3JhZGluZyBwaXAgaW4gdGhlICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2aXJ0dWFsIGVudmlyb25tZW50IChwaXAgaXMgYm9vdHN0cmFwcGVkICcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdieSBkZWZhdWx0KScpCiAgICAgICAgIG9wdGlvbnMgPSBwYXJzZXIucGFyc2VfYXJncyhhcmdzKQogICAgICAgICBpZiBvcHRpb25zLnVwZ3JhZGUgYW5kIG9wdGlvbnMuY2xlYXI6CiAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCd5b3UgY2Fubm90IHN1cHBseSAtLXVwZ3JhZGUgYW5kIC0tY2xlYXIgdG9nZXRoZXIuJykKICAgICAgICAgYnVpbGRlciA9IEVudkJ1aWxkZXIoc3lzdGVtX3NpdGVfcGFja2FnZXM9b3B0aW9ucy5zeXN0ZW1fc2l0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXI9b3B0aW9ucy5jbGVhciwgc3ltbGlua3M9b3B0aW9ucy5zeW1saW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBncmFkZT1vcHRpb25zLnVwZ3JhZGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFyPW9wdGlvbnMuY2xlYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWxpbmtzPW9wdGlvbnMuc3ltbGlua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZ3JhZGU9b3B0aW9ucy51cGdyYWRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoX3BpcD1vcHRpb25zLndpdGhfcGlwKQogICAgICAgICBmb3IgZCBpbiBvcHRpb25zLmRpcnM6CiAgICAgICAgICAgICBidWlsZGVyLmNyZWF0ZShkKQogCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL250L0FjdGl2YXRlLnBzMSBiL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxCmluZGV4IDFjNWVmOTguLmIxNWRlY2IgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxCisrKyBiL0xpYi92ZW52L3NjcmlwdHMvbnQvQWN0aXZhdGUucHMxCkBAIC0xLDI1ICsxLDQwIEBACitmdW5jdGlvbiBnbG9iYWw6ZGVhY3RpdmF0ZSAoW3N3aXRjaF0kTm9uRGVzdHJ1Y3RpdmUpIHsNCisgICAgIyBSZXZlcnQgdG8gb3JpZ2luYWwgdmFsdWVzDQorICAgIGlmIChUZXN0LVBhdGggZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCkgew0KKyAgICAgICAgY29weS1pdGVtIGZ1bmN0aW9uOl9PTERfVklSVFVBTF9QUk9NUFQgZnVuY3Rpb246cHJvbXB0DQorICAgICAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQorICAgIH0NCisNCisgICAgaWYgKFRlc3QtUGF0aCBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUpIHsNCisgICAgICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgZW52OlBZVEhPTkhPTUUNCisgICAgICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQ0KKyAgICB9DQorDQorICAgIGlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QQVRIKSB7DQorICAgICAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIIGVudjpQQVRIDQorICAgICAgICByZW1vdmUtaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEgNCisgICAgfQ0KKw0KKyAgICBpZiAoVGVzdC1QYXRoIGVudjpWSVJUVUFMX0VOVikgew0KKyAgICAgICAgcmVtb3ZlLWl0ZW0gZW52OlZJUlRVQUxfRU5WDQorICAgIH0NCisNCisgICAgaWYgKCEkTm9uRGVzdHJ1Y3RpdmUpIHsNCisgICAgICAgICMgU2VsZiBkZXN0cnVjdCENCisgICAgICAgIHJlbW92ZS1pdGVtIGZ1bmN0aW9uOmRlYWN0aXZhdGUNCisgICAgfQ0KK30NCisNCitkZWFjdGl2YXRlIC1ub25kZXN0cnVjdGl2ZQ0KKwogJGVudjpWSVJUVUFMX0VOVj0iX19WRU5WX0RJUl9fIg0KIA0KLSMgUmV2ZXJ0IHRvIG9yaWdpbmFsIHZhbHVlcw0KLWlmIChUZXN0LVBhdGggZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCkgew0KLSAgICBjb3B5LWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVCBmdW5jdGlvbjpwcm9tcHQNCi0gICAgcmVtb3ZlLWl0ZW0gZnVuY3Rpb246X09MRF9WSVJUVUFMX1BST01QVA0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRSkgew0KLSAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FIGVudjpQWVRIT05IT01FDQotICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUFlUSE9OSE9NRQ0KLX0NCi0NCi1pZiAoVGVzdC1QYXRoIGVudjpfT0xEX1ZJUlRVQUxfUEFUSCkgew0KLSAgICBjb3B5LWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIIGVudjpQQVRIDQotICAgIHJlbW92ZS1pdGVtIGVudjpfT0xEX1ZJUlRVQUxfUEFUSA0KLX0NCi0NCiAjIFNldCB0aGUgcHJvbXB0IHRvIGluY2x1ZGUgdGhlIGVudiBuYW1lDQorIyBNYWtlIHN1cmUgX09MRF9WSVJUVUFMX1BST01QVCBpcyBnbG9iYWwNCitmdW5jdGlvbiBnbG9iYWw6X09MRF9WSVJUVUFMX1BST01QVCB7IiJ9DQogY29weS1pdGVtIGZ1bmN0aW9uOnByb21wdCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQotZnVuY3Rpb24gcHJvbXB0IHsNCi0gICAgV3JpdGUtSG9zdCAtTm9OZXdsaW5lIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4gJ1tfX1ZFTlZfTkFNRV9fXScNCitmdW5jdGlvbiBnbG9iYWw6cHJvbXB0IHsNCisgICAgV3JpdGUtSG9zdCAtTm9OZXdsaW5lIC1Gb3JlZ3JvdW5kQ29sb3IgR3JlZW4gJ19fVkVOVl9QUk9NUFRfXycNCiAgICAgX09MRF9WSVJUVUFMX1BST01QVA0KIH0NCiANCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL250L0RlYWN0aXZhdGUucHMxIGIvTGliL3ZlbnYvc2NyaXB0cy9udC9EZWFjdGl2YXRlLnBzMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2QxZTk2Yi4uMDAwMDAwMAotLS0gYS9MaWIvdmVudi9zY3JpcHRzL250L0RlYWN0aXZhdGUucHMxCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotIyBSZXZlcnQgdG8gb3JpZ2luYWwgdmFsdWVzDQotaWYgKFRlc3QtUGF0aCBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUKSB7DQotICAgIGNvcHktaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUIGZ1bmN0aW9uOnByb21wdA0KLSAgICByZW1vdmUtaXRlbSBmdW5jdGlvbjpfT0xEX1ZJUlRVQUxfUFJPTVBUDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgZW52OlBZVEhPTkhPTUUNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QWVRIT05IT01FDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52Ol9PTERfVklSVFVBTF9QQVRIKSB7DQotICAgIGNvcHktaXRlbSBlbnY6X09MRF9WSVJUVUFMX1BBVEggZW52OlBBVEgNCi0gICAgcmVtb3ZlLWl0ZW0gZW52Ol9PTERfVklSVFVBTF9QQVRIDQotfQ0KLQ0KLWlmIChUZXN0LVBhdGggZW52OlZJUlRVQUxfRU5WKSB7DQotICAgIHJlbW92ZS1pdGVtIGVudjpWSVJUVUFMX0VOVg0KLX0NCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL250L2FjdGl2YXRlLmJhdCBiL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0CmluZGV4IDNjZWJlMjYuLjllYWIxNDcgMTAwNjQ0Ci0tLSBhL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0CisrKyBiL0xpYi92ZW52L3NjcmlwdHMvbnQvYWN0aXZhdGUuYmF0CkBAIC0xNCw3ICsxNCw3IEBACiApDQogDQogc2V0ICJfT0xEX1ZJUlRVQUxfUFJPTVBUPSVQUk9NUFQlIg0KLXNldCAiUFJPTVBUPV9fVkVOVl9OQU1FX18lUFJPTVBUJSINCitzZXQgIlBST01QVD1fX1ZFTlZfUFJPTVBUX18lUFJPTVBUJSINCiANCiBpZiBkZWZpbmVkIFBZVEhPTkhPTUUgKA0KICAgICBzZXQgIl9PTERfVklSVFVBTF9QWVRIT05IT01FPSVQWVRIT05IT01FJSINCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZQppbmRleCBjMjQxNDUwLi43YmJmZmQ5IDEwMDY0NAotLS0gYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlCisrKyBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUKQEAgLTU0LDggKzU0LDggQEAKIAogaWYgWyAteiAiJFZJUlRVQUxfRU5WX0RJU0FCTEVfUFJPTVBUIiBdIDsgdGhlbgogICAgIF9PTERfVklSVFVBTF9QUzE9IiRQUzEiCi0gICAgaWYgWyAieF9fVkVOVl9OQU1FX18iICE9IHggXSA7IHRoZW4KLQlQUzE9Il9fVkVOVl9OQU1FX18kUFMxIgorICAgIGlmIFsgInhfX1ZFTlZfUFJPTVBUX18iICE9IHggXSA7IHRoZW4KKwlQUzE9Il9fVkVOVl9QUk9NUFRfXyRQUzEiCiAgICAgZWxzZQogICAgIGlmIFsgImBiYXNlbmFtZSBcIiRWSVJUVUFMX0VOVlwiYCIgPSAiX18iIF0gOyB0aGVuCiAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBc3BlbiBtYWdpYyBkaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5jc2ggYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmNzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWQ3OWUwCi0tLSAvZGV2L251bGwKKysrIGIvTGliL3ZlbnYvc2NyaXB0cy9wb3NpeC9hY3RpdmF0ZS5jc2gKQEAgLTAsMCArMSwzNyBAQAorIyBUaGlzIGZpbGUgbXVzdCBiZSB1c2VkIHdpdGggInNvdXJjZSBiaW4vYWN0aXZhdGUuY3NoIiAqZnJvbSBjc2gqLgorIyBZb3UgY2Fubm90IHJ1biBpdCBkaXJlY3RseS4KKyMgQ3JlYXRlZCBieSBEYXZpZGUgRGkgQmxhc2kgPGRhdmlkZWRiQGdtYWlsLmNvbT4uCisjIFBvcnRlZCB0byBQeXRob24gMy4zIHZlbnYgYnkgQW5kcmV3IFN2ZXRsb3YgPGFuZHJldy5zdmV0bG92QGdtYWlsLmNvbT4KKworYWxpYXMgZGVhY3RpdmF0ZSAndGVzdCAkP19PTERfVklSVFVBTF9QQVRIICE9IDAgJiYgc2V0ZW52IFBBVEggIiRfT0xEX1ZJUlRVQUxfUEFUSCIgJiYgdW5zZXQgX09MRF9WSVJUVUFMX1BBVEg7IHJlaGFzaDsgdGVzdCAkP19PTERfVklSVFVBTF9QUk9NUFQgIT0gMCAmJiBzZXQgcHJvbXB0PSIkX09MRF9WSVJUVUFMX1BST01QVCIgJiYgdW5zZXQgX09MRF9WSVJUVUFMX1BST01QVDsgdW5zZXRlbnYgVklSVFVBTF9FTlY7IHRlc3QgIlwhOioiICE9ICJub25kZXN0cnVjdGl2ZSIgJiYgdW5hbGlhcyBkZWFjdGl2YXRlJworCisjIFVuc2V0IGlycmVsYXZlbnQgdmFyaWFibGVzLgorZGVhY3RpdmF0ZSBub25kZXN0cnVjdGl2ZQorCitzZXRlbnYgVklSVFVBTF9FTlYgIl9fVkVOVl9ESVJfXyIKKworc2V0IF9PTERfVklSVFVBTF9QQVRIPSIkUEFUSCIKK3NldGVudiBQQVRIICIkVklSVFVBTF9FTlYvX19WRU5WX0JJTl9OQU1FX186JFBBVEgiCisKKworc2V0IF9PTERfVklSVFVBTF9QUk9NUFQ9IiRwcm9tcHQiCisKK2lmICghICIkP1ZJUlRVQUxfRU5WX0RJU0FCTEVfUFJPTVBUIikgdGhlbgorICAgIGlmICgiX19WRU5WX05BTUVfXyIgIT0gIiIpIHRoZW4KKyAgICAgICAgc2V0IGVudl9uYW1lID0gIl9fVkVOVl9OQU1FX18iCisgICAgZWxzZQorICAgICAgICBpZiAoYGJhc2VuYW1lICJWSVJUVUFMX0VOViJgID09ICJfXyIpIHRoZW4KKyAgICAgICAgICAgICMgc3BlY2lhbCBjYXNlIGZvciBBc3BlbiBtYWdpYyBkaXJlY3RvcmllcworICAgICAgICAgICAgIyBzZWUgaHR0cDovL3d3dy56ZXRhZGV2LmNvbS9zb2Z0d2FyZS9hc3Blbi8KKyAgICAgICAgICAgIHNldCBlbnZfbmFtZSA9IGBiYXNlbmFtZSBcYGRpcm5hbWUgIiRWSVJUVUFMX0VOViJcYGAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2V0IGVudl9uYW1lID0gYGJhc2VuYW1lICIkVklSVFVBTF9FTlYiYAorICAgICAgICBlbmRpZgorICAgIGVuZGlmCisgICAgc2V0IHByb21wdCA9ICJbJGVudl9uYW1lXSAkcHJvbXB0IgorICAgIHVuc2V0IGVudl9uYW1lCitlbmRpZgorCithbGlhcyBweWRvYyBweXRob24gLW0gcHlkb2MKKworcmVoYXNoCmRpZmYgLS1naXQgYS9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmZpc2ggYi9MaWIvdmVudi9zY3JpcHRzL3Bvc2l4L2FjdGl2YXRlLmZpc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUzOTFhYQotLS0gL2Rldi9udWxsCisrKyBiL0xpYi92ZW52L3NjcmlwdHMvcG9zaXgvYWN0aXZhdGUuZmlzaApAQCAtMCwwICsxLDc0IEBACisjIFRoaXMgZmlsZSBtdXN0IGJlIHVzZWQgd2l0aCAiLiBiaW4vYWN0aXZhdGUuZmlzaCIgKmZyb20gZmlzaCogKGh0dHA6Ly9maXNoc2hlbGwub3JnKQorIyB5b3UgY2Fubm90IHJ1biBpdCBkaXJlY3RseQorCitmdW5jdGlvbiBkZWFjdGl2YXRlICAtZCAiRXhpdCB2aXJ0dWFsZW52IGFuZCByZXR1cm4gdG8gbm9ybWFsIHNoZWxsIGVudmlyb25tZW50IgorICAgICMgcmVzZXQgb2xkIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgIGlmIHRlc3QgLW4gIiRfT0xEX1ZJUlRVQUxfUEFUSCIKKyAgICAgICAgc2V0IC1neCBQQVRIICRfT0xEX1ZJUlRVQUxfUEFUSAorICAgICAgICBzZXQgLWUgX09MRF9WSVJUVUFMX1BBVEgKKyAgICBlbmQKKyAgICBpZiB0ZXN0IC1uICIkX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUiCisgICAgICAgIHNldCAtZ3ggUFlUSE9OSE9NRSAkX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUKKyAgICAgICAgc2V0IC1lIF9PTERfVklSVFVBTF9QWVRIT05IT01FCisgICAgZW5kCisKKyAgICBpZiB0ZXN0IC1uICIkX09MRF9GSVNIX1BST01QVF9PVkVSUklERSIKKyAgICAgICAgZnVuY3Rpb25zIC1lIGZpc2hfcHJvbXB0CisgICAgICAgIHNldCAtZSBfT0xEX0ZJU0hfUFJPTVBUX09WRVJSSURFCisgICAgICAgIC4gKCBiZWdpbgorICAgICAgICAgICAgICAgIHByaW50ZiAiZnVuY3Rpb24gZmlzaF9wcm9tcHRcblx0IyIKKyAgICAgICAgICAgICAgICBmdW5jdGlvbnMgX29sZF9maXNoX3Byb21wdAorICAgICAgICAgICAgZW5kIHwgcHN1YiApCisgICAgICAgIGZ1bmN0aW9ucyAtZSBfb2xkX2Zpc2hfcHJvbXB0CisgICAgZW5kCisKKyAgICBzZXQgLWUgVklSVFVBTF9FTlYKKyAgICBpZiB0ZXN0ICIkYXJndlsxXSIgIT0gIm5vbmRlc3RydWN0aXZlIgorICAgICAgICAjIFNlbGYgZGVzdHJ1Y3QhCisgICAgICAgIGZ1bmN0aW9ucyAtZSBkZWFjdGl2YXRlCisgICAgZW5kCitlbmQKKworIyB1bnNldCBpcnJlbGF2ZW50IHZhcmlhYmxlcworZGVhY3RpdmF0ZSBub25kZXN0cnVjdGl2ZQorCitzZXQgLWd4IFZJUlRVQUxfRU5WICJfX1ZFTlZfRElSX18iCisKK3NldCAtZ3ggX09MRF9WSVJUVUFMX1BBVEggJFBBVEgKK3NldCAtZ3ggUEFUSCAiJFZJUlRVQUxfRU5WL19fVkVOVl9CSU5fTkFNRV9fIiAkUEFUSAorCisjIHVuc2V0IFBZVEhPTkhPTUUgaWYgc2V0CitpZiBzZXQgLXEgUFlUSE9OSE9NRQorICAgIHNldCAtZ3ggX09MRF9WSVJUVUFMX1BZVEhPTkhPTUUgJFBZVEhPTkhPTUUKKyAgICBzZXQgLWUgUFlUSE9OSE9NRQorZW5kCisKK2lmIHRlc3QgLXogIiRWSVJUVUFMX0VOVl9ESVNBQkxFX1BST01QVCIKKyAgICAjIGZpc2ggdXNlcyBhIGZ1bmN0aW9uIGluc3RlYWQgb2YgYW4gZW52IHZhciB0byBnZW5lcmF0ZSB0aGUgcHJvbXB0LgorCisgICAgIyBzYXZlIHRoZSBjdXJyZW50IGZpc2hfcHJvbXB0IGZ1bmN0aW9uIGFzIHRoZSBmdW5jdGlvbiBfb2xkX2Zpc2hfcHJvbXB0CisgICAgLiAoIGJlZ2luCisgICAgICAgICAgICBwcmludGYgImZ1bmN0aW9uIF9vbGRfZmlzaF9wcm9tcHRcblx0IyIKKyAgICAgICAgICAgIGZ1bmN0aW9ucyBmaXNoX3Byb21wdAorICAgICAgICBlbmQgfCBwc3ViICkKKworICAgICMgd2l0aCB0aGUgb3JpZ2luYWwgcHJvbXB0IGZ1bmN0aW9uIHJlbmFtZWQsIHdlIGNhbiBvdmVycmlkZSB3aXRoIG91ciBvd24uCisgICAgZnVuY3Rpb24gZmlzaF9wcm9tcHQKKyAgICAgICAgIyBQcm9tcHQgb3ZlcnJpZGU/CisgICAgICAgIGlmIHRlc3QgLW4gIl9fVkVOVl9QUk9NUFRfXyIKKyAgICAgICAgICAgIHByaW50ZiAiJXMlcyVzIiAiX19WRU5WX1BST01QVF9fIiAoc2V0X2NvbG9yIG5vcm1hbCkgKF9vbGRfZmlzaF9wcm9tcHQpCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisgICAgICAgICMgLi4uT3RoZXJ3aXNlLCBwcmVwZW5kIGVudgorICAgICAgICBzZXQgLWwgX2NoZWNrYmFzZSAoYmFzZW5hbWUgIiRWSVJUVUFMX0VOViIpCisgICAgICAgIGlmIHRlc3QgJF9jaGVja2Jhc2UgPSAiX18iCisgICAgICAgICAgICAjIHNwZWNpYWwgY2FzZSBmb3IgQXNwZW4gbWFnaWMgZGlyZWN0b3JpZXMKKyAgICAgICAgICAgICMgc2VlIGh0dHA6Ly93d3cuemV0YWRldi5jb20vc29mdHdhcmUvYXNwZW4vCisgICAgICAgICAgICBwcmludGYgIiVzWyVzXSVzICVzIiAoc2V0X2NvbG9yIC1iIGJsdWUgd2hpdGUpIChiYXNlbmFtZSAoZGlybmFtZSAiJFZJUlRVQUxfRU5WIikpIChzZXRfY29sb3Igbm9ybWFsKSAoX29sZF9maXNoX3Byb21wdCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmICIlcyglcyklcyVzIiAoc2V0X2NvbG9yIC1iIGJsdWUgd2hpdGUpIChiYXNlbmFtZSAiJFZJUlRVQUxfRU5WIikgKHNldF9jb2xvciBub3JtYWwpIChfb2xkX2Zpc2hfcHJvbXB0KQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIHNldCAtZ3ggX09MRF9GSVNIX1BST01QVF9PVkVSUklERSAiJFZJUlRVQUxfRU5WIgorZW5kCmRpZmYgLS1naXQgYS9MaWIvd2FybmluZ3MucHkgYi9MaWIvd2FybmluZ3MucHkKaW5kZXggZWRiYmI1ZS4uNzBkMDg3ZSAxMDA2NDQKLS0tIGEvTGliL3dhcm5pbmdzLnB5CisrKyBiL0xpYi93YXJuaW5ncy5weQpAQCAtMSwxMiArMSw5IEBACiAiIiJQeXRob24gcGFydCBvZiB0aGUgd2FybmluZ3Mgc3Vic3lzdGVtLiIiIgogCi0jIE5vdGU6IGZ1bmN0aW9uIGxldmVsIGltcG9ydHMgc2hvdWxkICpub3QqIGJlIHVzZWQKLSMgaW4gdGhpcyBtb2R1bGUgYXMgaXQgbWF5IGNhdXNlIGltcG9ydCBsb2NrIGRlYWRsb2NrLgotIyBTZWUgYnVnIDY4MzY1OC4KLWltcG9ydCBsaW5lY2FjaGUKIGltcG9ydCBzeXMKIAotX19hbGxfXyA9IFsid2FybiIsICJzaG93d2FybmluZyIsICJmb3JtYXR3YXJuaW5nIiwgImZpbHRlcndhcm5pbmdzIiwKK19fYWxsX18gPSBbIndhcm4iLCAid2Fybl9leHBsaWNpdCIsICJzaG93d2FybmluZyIsCisgICAgICAgICAgICJmb3JtYXR3YXJuaW5nIiwgImZpbHRlcndhcm5pbmdzIiwgInNpbXBsZWZpbHRlciIsCiAgICAgICAgICAgICJyZXNldHdhcm5pbmdzIiwgImNhdGNoX3dhcm5pbmdzIl0KIAogCkBAIC0xNCwxMyArMTEsMTcgQEAKICAgICAiIiJIb29rIHRvIHdyaXRlIGEgd2FybmluZyB0byBhIGZpbGU7IHJlcGxhY2UgaWYgeW91IGxpa2UuIiIiCiAgICAgaWYgZmlsZSBpcyBOb25lOgogICAgICAgICBmaWxlID0gc3lzLnN0ZGVycgorICAgICAgICBpZiBmaWxlIGlzIE5vbmU6CisgICAgICAgICAgICAjIHN5cy5zdGRlcnIgaXMgTm9uZSB3aGVuIHJ1biB3aXRoIHB5dGhvbncuZXhlIC0gd2FybmluZ3MgZ2V0IGxvc3QKKyAgICAgICAgICAgIHJldHVybgogICAgIHRyeToKICAgICAgICAgZmlsZS53cml0ZShmb3JtYXR3YXJuaW5nKG1lc3NhZ2UsIGNhdGVnb3J5LCBmaWxlbmFtZSwgbGluZW5vLCBsaW5lKSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcyAjIHRoZSBmaWxlIChwcm9iYWJseSBzdGRlcnIpIGlzIGludmFsaWQgLSB0aGlzIHdhcm5pbmcgZ2V0cyBsb3N0LgogCiBkZWYgZm9ybWF0d2FybmluZyhtZXNzYWdlLCBjYXRlZ29yeSwgZmlsZW5hbWUsIGxpbmVubywgbGluZT1Ob25lKToKICAgICAiIiJGdW5jdGlvbiB0byBmb3JtYXQgYSB3YXJuaW5nIHRoZSBzdGFuZGFyZCB3YXkuIiIiCisgICAgaW1wb3J0IGxpbmVjYWNoZQogICAgIHMgPSAgIiVzOiVzOiAlczogJXNcbiIgJSAoZmlsZW5hbWUsIGxpbmVubywgY2F0ZWdvcnkuX19uYW1lX18sIG1lc3NhZ2UpCiAgICAgbGluZSA9IGxpbmVjYWNoZS5nZXRsaW5lKGZpbGVuYW1lLCBsaW5lbm8pIGlmIGxpbmUgaXMgTm9uZSBlbHNlIGxpbmUKICAgICBpZiBsaW5lOgpAQCAtNTUsNiArNTYsNyBAQAogICAgICAgICBmaWx0ZXJzLmFwcGVuZChpdGVtKQogICAgIGVsc2U6CiAgICAgICAgIGZpbHRlcnMuaW5zZXJ0KDAsIGl0ZW0pCisgICAgX2ZpbHRlcnNfbXV0YXRlZCgpCiAKIGRlZiBzaW1wbGVmaWx0ZXIoYWN0aW9uLCBjYXRlZ29yeT1XYXJuaW5nLCBsaW5lbm89MCwgYXBwZW5kPUZhbHNlKToKICAgICAiIiJJbnNlcnQgYSBzaW1wbGUgZW50cnkgaW50byB0aGUgbGlzdCBvZiB3YXJuaW5ncyBmaWx0ZXJzIChhdCB0aGUgZnJvbnQpLgpAQCAtNzUsMTAgKzc3LDEyIEBACiAgICAgICAgIGZpbHRlcnMuYXBwZW5kKGl0ZW0pCiAgICAgZWxzZToKICAgICAgICAgZmlsdGVycy5pbnNlcnQoMCwgaXRlbSkKKyAgICBfZmlsdGVyc19tdXRhdGVkKCkKIAogZGVmIHJlc2V0d2FybmluZ3MoKToKICAgICAiIiJDbGVhciB0aGUgbGlzdCBvZiB3YXJuaW5nIGZpbHRlcnMsIHNvIHRoYXQgbm8gZmlsdGVycyBhcmUgYWN0aXZlLiIiIgogICAgIGZpbHRlcnNbOl0gPSBbXQorICAgIF9maWx0ZXJzX211dGF0ZWQoKQogCiBjbGFzcyBfT3B0aW9uRXJyb3IoRXhjZXB0aW9uKToKICAgICAiIiJFeGNlcHRpb24gdXNlZCBieSBvcHRpb24gcHJvY2Vzc2luZyBoZWxwZXJzLiIiIgpAQCAtMjA2LDYgKzIxMCw5IEBACiAgICAgICAgICAgICBtb2R1bGUgPSBtb2R1bGVbOi0zXSAjIFhYWCBXaGF0IGFib3V0IGxlYWRpbmcgcGF0aG5hbWU/CiAgICAgaWYgcmVnaXN0cnkgaXMgTm9uZToKICAgICAgICAgcmVnaXN0cnkgPSB7fQorICAgIGlmIHJlZ2lzdHJ5LmdldCgndmVyc2lvbicsIDApICE9IF9maWx0ZXJzX3ZlcnNpb246CisgICAgICAgIHJlZ2lzdHJ5LmNsZWFyKCkKKyAgICAgICAgcmVnaXN0cnlbJ3ZlcnNpb24nXSA9IF9maWx0ZXJzX3ZlcnNpb24KICAgICBpZiBpc2luc3RhbmNlKG1lc3NhZ2UsIFdhcm5pbmcpOgogICAgICAgICB0ZXh0ID0gc3RyKG1lc3NhZ2UpCiAgICAgICAgIGNhdGVnb3J5ID0gbWVzc2FnZS5fX2NsYXNzX18KQEAgLTIzMyw2ICsyNDAsNyBAQAogCiAgICAgIyBQcmltZSB0aGUgbGluZWNhY2hlIGZvciBmb3JtYXR0aW5nLCBpbiBjYXNlIHRoZQogICAgICMgImZpbGUiIGlzIGFjdHVhbGx5IGluIGEgemlwZmlsZSBvciBzb21ldGhpbmcuCisgICAgaW1wb3J0IGxpbmVjYWNoZQogICAgIGxpbmVjYWNoZS5nZXRsaW5lcyhmaWxlbmFtZSwgbW9kdWxlX2dsb2JhbHMpCiAKICAgICBpZiBhY3Rpb24gPT0gImVycm9yIjoKQEAgLTMzMCw2ICszMzgsNyBAQAogICAgICAgICBzZWxmLl9lbnRlcmVkID0gVHJ1ZQogICAgICAgICBzZWxmLl9maWx0ZXJzID0gc2VsZi5fbW9kdWxlLmZpbHRlcnMKICAgICAgICAgc2VsZi5fbW9kdWxlLmZpbHRlcnMgPSBzZWxmLl9maWx0ZXJzWzpdCisgICAgICAgIHNlbGYuX21vZHVsZS5fZmlsdGVyc19tdXRhdGVkKCkKICAgICAgICAgc2VsZi5fc2hvd3dhcm5pbmcgPSBzZWxmLl9tb2R1bGUuc2hvd3dhcm5pbmcKICAgICAgICAgaWYgc2VsZi5fcmVjb3JkOgogICAgICAgICAgICAgbG9nID0gW10KQEAgLTM0NCw2ICszNTMsNyBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fZW50ZXJlZDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IGV4aXQgJXIgd2l0aG91dCBlbnRlcmluZyBmaXJzdCIgJSBzZWxmKQogICAgICAgICBzZWxmLl9tb2R1bGUuZmlsdGVycyA9IHNlbGYuX2ZpbHRlcnMKKyAgICAgICAgc2VsZi5fbW9kdWxlLl9maWx0ZXJzX211dGF0ZWQoKQogICAgICAgICBzZWxmLl9tb2R1bGUuc2hvd3dhcm5pbmcgPSBzZWxmLl9zaG93d2FybmluZwogCiAKQEAgLTM1OCwxNSArMzY4LDIyIEBACiBfd2FybmluZ3NfZGVmYXVsdHMgPSBGYWxzZQogdHJ5OgogICAgIGZyb20gX3dhcm5pbmdzIGltcG9ydCAoZmlsdGVycywgX2RlZmF1bHRhY3Rpb24sIF9vbmNlcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2Fybiwgd2Fybl9leHBsaWNpdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4sIHdhcm5fZXhwbGljaXQsIF9maWx0ZXJzX211dGF0ZWQpCiAgICAgZGVmYXVsdGFjdGlvbiA9IF9kZWZhdWx0YWN0aW9uCiAgICAgb25jZXJlZ2lzdHJ5ID0gX29uY2VyZWdpc3RyeQogICAgIF93YXJuaW5nc19kZWZhdWx0cyA9IFRydWUKKwogZXhjZXB0IEltcG9ydEVycm9yOgogICAgIGZpbHRlcnMgPSBbXQogICAgIGRlZmF1bHRhY3Rpb24gPSAiZGVmYXVsdCIKICAgICBvbmNlcmVnaXN0cnkgPSB7fQogCisgICAgX2ZpbHRlcnNfdmVyc2lvbiA9IDEKKworICAgIGRlZiBfZmlsdGVyc19tdXRhdGVkKCk6CisgICAgICAgIGdsb2JhbCBfZmlsdGVyc192ZXJzaW9uCisgICAgICAgIF9maWx0ZXJzX3ZlcnNpb24gKz0gMQorCiAKICMgTW9kdWxlIGluaXRpYWxpemF0aW9uCiBfcHJvY2Vzc29wdGlvbnMoc3lzLndhcm5vcHRpb25zKQpkaWZmIC0tZ2l0IGEvTGliL3dhdmUucHkgYi9MaWIvd2F2ZS5weQppbmRleCA0YTIyMzQ1Li44YTEwMWUzIDEwMDY0NAotLS0gYS9MaWIvd2F2ZS5weQorKysgYi9MaWIvd2F2ZS5weQpAQCAtMTgsNyArMTgsNyBAQAogICAgICAgZ2V0Y29tcHR5cGUoKSAgIC0tIHJldHVybnMgY29tcHJlc3Npb24gdHlwZSAoJ05PTkUnIGZvciBsaW5lYXIgc2FtcGxlcykKICAgICAgIGdldGNvbXBuYW1lKCkgICAtLSByZXR1cm5zIGh1bWFuLXJlYWRhYmxlIHZlcnNpb24gb2YKICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2lvbiB0eXBlICgnbm90IGNvbXByZXNzZWQnIGxpbmVhciBzYW1wbGVzKQotICAgICAgZ2V0cGFyYW1zKCkgICAgIC0tIHJldHVybnMgYSB0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKKyAgICAgIGdldHBhcmFtcygpICAgICAtLSByZXR1cm5zIGEgbmFtZWR0dXBsZSBjb25zaXN0aW5nIG9mIGFsbCBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICBhYm92ZSBpbiB0aGUgYWJvdmUgb3JkZXIKICAgICAgIGdldG1hcmtlcnMoKSAgICAtLSByZXR1cm5zIE5vbmUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWlmYyBtb2R1bGUpCkBAIC02NSw3ICs2NSw3IEBACiBiZSBwYXRjaGVkIHVwLgogSXQgaXMgYmVzdCB0byBmaXJzdCBzZXQgYWxsIHBhcmFtZXRlcnMsIHBlcmhhcHMgcG9zc2libHkgdGhlCiBjb21wcmVzc2lvbiB0eXBlLCBhbmQgdGhlbiB3cml0ZSBhdWRpbyBmcmFtZXMgdXNpbmcgd3JpdGVmcmFtZXNyYXcuCi1XaGVuIGFsbCBmcmFtZXMgaGF2ZSBiZWVuIHdyaXR0ZW4sIGVpdGhlciBjYWxsIHdyaXRlZnJhbWVzKCcnKSBvcgorV2hlbiBhbGwgZnJhbWVzIGhhdmUgYmVlbiB3cml0dGVuLCBlaXRoZXIgY2FsbCB3cml0ZWZyYW1lcyhiJycpIG9yCiBjbG9zZSgpIHRvIHBhdGNoIHVwIHRoZSBzaXplcyBpbiB0aGUgaGVhZGVyLgogVGhlIGNsb3NlKCkgbWV0aG9kIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGNsYXNzIGluc3RhbmNlCiBpcyBkZXN0cm95ZWQuCkBAIC04MiwxNSArODIsMTQgQEAKIAogX2FycmF5X2ZtdHMgPSBOb25lLCAnYicsICdoJywgTm9uZSwgJ2knCiAKK2ltcG9ydCBhdWRpb29wCiBpbXBvcnQgc3RydWN0CiBpbXBvcnQgc3lzCiBmcm9tIGNodW5rIGltcG9ydCBDaHVuaworZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgbmFtZWR0dXBsZQogCi1kZWYgX2J5dGVzd2FwMyhkYXRhKToKLSAgICBiYSA9IGJ5dGVhcnJheShkYXRhKQotICAgIGJhWzo6M10gPSBkYXRhWzI6OjNdCi0gICAgYmFbMjo6M10gPSBkYXRhWzo6M10KLSAgICByZXR1cm4gYnl0ZXMoYmEpCitfd2F2ZV9wYXJhbXMgPSBuYW1lZHR1cGxlKCdfd2F2ZV9wYXJhbXMnLAorICAgICAgICAgICAgICAgICAgICAgJ25jaGFubmVscyBzYW1wd2lkdGggZnJhbWVyYXRlIG5mcmFtZXMgY29tcHR5cGUgY29tcG5hbWUnKQogCiBjbGFzcyBXYXZlX3JlYWQ6CiAgICAgIiIiVmFyaWFibGVzIHVzZWQgaW4gdGhpcyBjbGFzczoKQEAgLTE2OSw2ICsxNjgsMTMgQEAKIAogICAgIGRlZiBfX2RlbF9fKHNlbGYpOgogICAgICAgICBzZWxmLmNsb3NlKCkKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19leGl0X18oc2VsZiwgKmFyZ3MpOgorICAgICAgICBzZWxmLmNsb3NlKCkKKwogICAgICMKICAgICAjIFVzZXIgdmlzaWJsZSBtZXRob2RzLgogICAgICMKQEAgLTE4MCwxMCArMTg2LDExIEBACiAgICAgICAgIHNlbGYuX3NvdW5kcG9zID0gMAogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9pX29wZW5lZF90aGVfZmlsZToKLSAgICAgICAgICAgIHNlbGYuX2lfb3BlbmVkX3RoZV9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX2lfb3BlbmVkX3RoZV9maWxlID0gTm9uZQogICAgICAgICBzZWxmLl9maWxlID0gTm9uZQorICAgICAgICBmaWxlID0gc2VsZi5faV9vcGVuZWRfdGhlX2ZpbGUKKyAgICAgICAgaWYgZmlsZToKKyAgICAgICAgICAgIHNlbGYuX2lfb3BlbmVkX3RoZV9maWxlID0gTm9uZQorICAgICAgICAgICAgZmlsZS5jbG9zZSgpCiAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcmV0dXJuIHNlbGYuX3NvdW5kcG9zCkBAIC0yMDcsOSArMjE0LDkgQEAKICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbXBuYW1lCiAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgotICAgICAgICByZXR1cm4gc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwgXAotICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksIFwKLSAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpCisgICAgICAgIHJldHVybiBfd2F2ZV9wYXJhbXMoc2VsZi5nZXRuY2hhbm5lbHMoKSwgc2VsZi5nZXRzYW1wd2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRmcmFtZXJhdGUoKSwgc2VsZi5nZXRuZnJhbWVzKCksCisgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0Y29tcHR5cGUoKSwgc2VsZi5nZXRjb21wbmFtZSgpKQogCiAgICAgZGVmIGdldG1hcmtlcnMoc2VsZik6CiAgICAgICAgIHJldHVybiBOb25lCkBAIC0yMzIsMjkgKzIzOSw5IEBACiAgICAgICAgICAgICBzZWxmLl9kYXRhX3NlZWtfbmVlZGVkID0gMAogICAgICAgICBpZiBuZnJhbWVzID09IDA6CiAgICAgICAgICAgICByZXR1cm4gYicnCi0gICAgICAgIGlmIHNlbGYuX3NhbXB3aWR0aCBpbiAoMiwgNCkgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgICAgICAjIHVuZm9ydHVuYXRlbHkgdGhlIGZyb21maWxlKCkgbWV0aG9kIGRvZXMgbm90IHRha2UKLSAgICAgICAgICAgICMgc29tZXRoaW5nIHRoYXQgb25seSBsb29rcyBsaWtlIGEgZmlsZSBvYmplY3QsIHNvCi0gICAgICAgICAgICAjIHdlIGhhdmUgdG8gcmVhY2ggaW50byB0aGUgaW5uYXJkcyBvZiB0aGUgY2h1bmsgb2JqZWN0Ci0gICAgICAgICAgICBpbXBvcnQgYXJyYXkKLSAgICAgICAgICAgIGNodW5rID0gc2VsZi5fZGF0YV9jaHVuawotICAgICAgICAgICAgZGF0YSA9IGFycmF5LmFycmF5KF9hcnJheV9mbXRzW3NlbGYuX3NhbXB3aWR0aF0pCi0gICAgICAgICAgICBhc3NlcnQgZGF0YS5pdGVtc2l6ZSA9PSBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIG5pdGVtcyA9IG5mcmFtZXMgKiBzZWxmLl9uY2hhbm5lbHMKLSAgICAgICAgICAgIGlmIG5pdGVtcyAqIHNlbGYuX3NhbXB3aWR0aCA+IGNodW5rLmNodW5rc2l6ZSAtIGNodW5rLnNpemVfcmVhZDoKLSAgICAgICAgICAgICAgICBuaXRlbXMgPSAoY2h1bmsuY2h1bmtzaXplIC0gY2h1bmsuc2l6ZV9yZWFkKSAvLyBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgIGRhdGEuZnJvbWZpbGUoY2h1bmsuZmlsZS5maWxlLCBuaXRlbXMpCi0gICAgICAgICAgICAjICJ0ZWxsIiBkYXRhIGNodW5rIGhvdyBtdWNoIHdhcyByZWFkCi0gICAgICAgICAgICBjaHVuay5zaXplX3JlYWQgPSBjaHVuay5zaXplX3JlYWQgKyBuaXRlbXMgKiBzZWxmLl9zYW1wd2lkdGgKLSAgICAgICAgICAgICMgZG8gdGhlIHNhbWUgZm9yIHRoZSBvdXRlcm1vc3QgY2h1bmsKLSAgICAgICAgICAgIGNodW5rID0gY2h1bmsuZmlsZQotICAgICAgICAgICAgY2h1bmsuc2l6ZV9yZWFkID0gY2h1bmsuc2l6ZV9yZWFkICsgbml0ZW1zICogc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgICAgICBkYXRhLmJ5dGVzd2FwKCkKLSAgICAgICAgICAgIGRhdGEgPSBkYXRhLnRvYnl0ZXMoKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2RhdGFfY2h1bmsucmVhZChuZnJhbWVzICogc2VsZi5fZnJhbWVzaXplKQotICAgICAgICAgICAgaWYgc2VsZi5fc2FtcHdpZHRoID09IDMgYW5kIHN5cy5ieXRlb3JkZXIgPT0gJ2JpZyc6Ci0gICAgICAgICAgICAgICAgZGF0YSA9IF9ieXRlc3dhcDMoZGF0YSkKKyAgICAgICAgZGF0YSA9IHNlbGYuX2RhdGFfY2h1bmsucmVhZChuZnJhbWVzICogc2VsZi5fZnJhbWVzaXplKQorICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggIT0gMSBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKKyAgICAgICAgICAgIGRhdGEgPSBhdWRpb29wLmJ5dGVzd2FwKGRhdGEsIHNlbGYuX3NhbXB3aWR0aCkKICAgICAgICAgaWYgc2VsZi5fY29udmVydCBhbmQgZGF0YToKICAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9jb252ZXJ0KGRhdGEpCiAgICAgICAgIHNlbGYuX3NvdW5kcG9zID0gc2VsZi5fc291bmRwb3MgKyBsZW4oZGF0YSkgLy8gKHNlbGYuX25jaGFubmVscyAqIHNlbGYuX3NhbXB3aWR0aCkKQEAgLTMyOCw2ICszMTUsMTIgQEAKICAgICBkZWYgX19kZWxfXyhzZWxmKToKICAgICAgICAgc2VsZi5jbG9zZSgpCiAKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5jbG9zZSgpCisKICAgICAjCiAgICAgIyBVc2VyIHZpc2libGUgbWV0aG9kcy4KICAgICAjCkBAIC00MDIsOCArMzk1LDggQEAKICAgICBkZWYgZ2V0cGFyYW1zKHNlbGYpOgogICAgICAgICBpZiBub3Qgc2VsZi5fbmNoYW5uZWxzIG9yIG5vdCBzZWxmLl9zYW1wd2lkdGggb3Igbm90IHNlbGYuX2ZyYW1lcmF0ZToKICAgICAgICAgICAgIHJhaXNlIEVycm9yKCdub3QgYWxsIHBhcmFtZXRlcnMgc2V0JykKLSAgICAgICAgcmV0dXJuIHNlbGYuX25jaGFubmVscywgc2VsZi5fc2FtcHdpZHRoLCBzZWxmLl9mcmFtZXJhdGUsIFwKLSAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lCisgICAgICAgIHJldHVybiBfd2F2ZV9wYXJhbXMoc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9zYW1wd2lkdGgsIHNlbGYuX2ZyYW1lcmF0ZSwKKyAgICAgICAgICAgICAgc2VsZi5fbmZyYW1lcywgc2VsZi5fY29tcHR5cGUsIHNlbGYuX2NvbXBuYW1lKQogCiAgICAgZGVmIHNldG1hcmsoc2VsZiwgaWQsIHBvcywgbmFtZSk6CiAgICAgICAgIHJhaXNlIEVycm9yKCdzZXRtYXJrKCkgbm90IHN1cHBvcnRlZCcpCkBAIC00MTgsMjQgKzQxMSwxNiBAQAogICAgICAgICByZXR1cm4gc2VsZi5fbmZyYW1lc3dyaXR0ZW4KIAogICAgIGRlZiB3cml0ZWZyYW1lc3JhdyhzZWxmLCBkYXRhKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZGF0YSwgKGJ5dGVzLCBieXRlYXJyYXkpKToKKyAgICAgICAgICAgIGRhdGEgPSBtZW1vcnl2aWV3KGRhdGEpLmNhc3QoJ0InKQogICAgICAgICBzZWxmLl9lbnN1cmVfaGVhZGVyX3dyaXR0ZW4obGVuKGRhdGEpKQogICAgICAgICBuZnJhbWVzID0gbGVuKGRhdGEpIC8vIChzZWxmLl9zYW1wd2lkdGggKiBzZWxmLl9uY2hhbm5lbHMpCiAgICAgICAgIGlmIHNlbGYuX2NvbnZlcnQ6CiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fY29udmVydChkYXRhKQotICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggaW4gKDIsIDQpIGFuZCBzeXMuYnl0ZW9yZGVyID09ICdiaWcnOgotICAgICAgICAgICAgaW1wb3J0IGFycmF5Ci0gICAgICAgICAgICBhID0gYXJyYXkuYXJyYXkoX2FycmF5X2ZtdHNbc2VsZi5fc2FtcHdpZHRoXSkKLSAgICAgICAgICAgIGEuZnJvbWJ5dGVzKGRhdGEpCi0gICAgICAgICAgICBkYXRhID0gYQotICAgICAgICAgICAgYXNzZXJ0IGRhdGEuaXRlbXNpemUgPT0gc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgICAgICBkYXRhLmJ5dGVzd2FwKCkKLSAgICAgICAgICAgIGRhdGEudG9maWxlKHNlbGYuX2ZpbGUpCi0gICAgICAgICAgICBzZWxmLl9kYXRhd3JpdHRlbiA9IHNlbGYuX2RhdGF3cml0dGVuICsgbGVuKGRhdGEpICogc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggPT0gMyBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKLSAgICAgICAgICAgICAgICBkYXRhID0gX2J5dGVzd2FwMyhkYXRhKQotICAgICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShkYXRhKQotICAgICAgICAgICAgc2VsZi5fZGF0YXdyaXR0ZW4gPSBzZWxmLl9kYXRhd3JpdHRlbiArIGxlbihkYXRhKQorICAgICAgICBpZiBzZWxmLl9zYW1wd2lkdGggIT0gMSBhbmQgc3lzLmJ5dGVvcmRlciA9PSAnYmlnJzoKKyAgICAgICAgICAgIGRhdGEgPSBhdWRpb29wLmJ5dGVzd2FwKGRhdGEsIHNlbGYuX3NhbXB3aWR0aCkKKyAgICAgICAgc2VsZi5fZmlsZS53cml0ZShkYXRhKQorICAgICAgICBzZWxmLl9kYXRhd3JpdHRlbiArPSBsZW4oZGF0YSkKICAgICAgICAgc2VsZi5fbmZyYW1lc3dyaXR0ZW4gPSBzZWxmLl9uZnJhbWVzd3JpdHRlbiArIG5mcmFtZXMKIAogICAgIGRlZiB3cml0ZWZyYW1lcyhzZWxmLCBkYXRhKToKQEAgLTQ0NCwxNyArNDI5LDE4IEBACiAgICAgICAgICAgICBzZWxmLl9wYXRjaGhlYWRlcigpCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGlmIHNlbGYuX2ZpbGU6Ci0gICAgICAgICAgICB0cnk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIHNlbGYuX2ZpbGU6CiAgICAgICAgICAgICAgICAgc2VsZi5fZW5zdXJlX2hlYWRlcl93cml0dGVuKDApCiAgICAgICAgICAgICAgICAgaWYgc2VsZi5fZGF0YWxlbmd0aCAhPSBzZWxmLl9kYXRhd3JpdHRlbjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGF0Y2hoZWFkZXIoKQogICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuZmx1c2goKQotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBzZWxmLl9maWxlID0gTm9uZQotICAgICAgICBpZiBzZWxmLl9pX29wZW5lZF90aGVfZmlsZToKLSAgICAgICAgICAgIHNlbGYuX2lfb3BlbmVkX3RoZV9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgIHNlbGYuX2lfb3BlbmVkX3RoZV9maWxlID0gTm9uZQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgc2VsZi5fZmlsZSA9IE5vbmUKKyAgICAgICAgICAgIGZpbGUgPSBzZWxmLl9pX29wZW5lZF90aGVfZmlsZQorICAgICAgICAgICAgaWYgZmlsZToKKyAgICAgICAgICAgICAgICBzZWxmLl9pX29wZW5lZF90aGVfZmlsZSA9IE5vbmUKKyAgICAgICAgICAgICAgICBmaWxlLmNsb3NlKCkKIAogICAgICMKICAgICAjIEludGVybmFsIG1ldGhvZHMuCkBAIC00NzYsMTQgKzQ2MiwxOCBAQAogICAgICAgICBpZiBub3Qgc2VsZi5fbmZyYW1lczoKICAgICAgICAgICAgIHNlbGYuX25mcmFtZXMgPSBpbml0bGVuZ3RoIC8vIChzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgpCiAgICAgICAgIHNlbGYuX2RhdGFsZW5ndGggPSBzZWxmLl9uZnJhbWVzICogc2VsZi5fbmNoYW5uZWxzICogc2VsZi5fc2FtcHdpZHRoCi0gICAgICAgIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuX2Zvcm1fbGVuZ3RoX3BvcyA9IHNlbGYuX2ZpbGUudGVsbCgpCisgICAgICAgIGV4Y2VwdCAoQXR0cmlidXRlRXJyb3IsIE9TRXJyb3IpOgorICAgICAgICAgICAgc2VsZi5fZm9ybV9sZW5ndGhfcG9zID0gTm9uZQogICAgICAgICBzZWxmLl9maWxlLndyaXRlKHN0cnVjdC5wYWNrKCc8TDRzNHNMSEhMTEhINHMnLAogICAgICAgICAgICAgMzYgKyBzZWxmLl9kYXRhbGVuZ3RoLCBiJ1dBVkUnLCBiJ2ZtdCAnLCAxNiwKICAgICAgICAgICAgIFdBVkVfRk9STUFUX1BDTSwgc2VsZi5fbmNoYW5uZWxzLCBzZWxmLl9mcmFtZXJhdGUsCiAgICAgICAgICAgICBzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9mcmFtZXJhdGUgKiBzZWxmLl9zYW1wd2lkdGgsCiAgICAgICAgICAgICBzZWxmLl9uY2hhbm5lbHMgKiBzZWxmLl9zYW1wd2lkdGgsCiAgICAgICAgICAgICBzZWxmLl9zYW1wd2lkdGggKiA4LCBiJ2RhdGEnKSkKLSAgICAgICAgc2VsZi5fZGF0YV9sZW5ndGhfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKKyAgICAgICAgaWYgc2VsZi5fZm9ybV9sZW5ndGhfcG9zIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5fZGF0YV9sZW5ndGhfcG9zID0gc2VsZi5fZmlsZS50ZWxsKCkKICAgICAgICAgc2VsZi5fZmlsZS53cml0ZShzdHJ1Y3QucGFjaygnPEwnLCBzZWxmLl9kYXRhbGVuZ3RoKSkKICAgICAgICAgc2VsZi5faGVhZGVyd3JpdHRlbiA9IFRydWUKIApkaWZmIC0tZ2l0IGEvTGliL3dlYWtyZWYucHkgYi9MaWIvd2Vha3JlZi5weQppbmRleCBmY2I2Yjc0Li41ZDA5NDk3IDEwMDY0NAotLS0gYS9MaWIvd2Vha3JlZi5weQorKysgYi9MaWIvd2Vha3JlZi5weQpAQCAtMjEsMTMgKzIxLDY5IEBACiBmcm9tIF93ZWFrcmVmc2V0IGltcG9ydCBXZWFrU2V0LCBfSXRlcmF0aW9uR3VhcmQKIAogaW1wb3J0IGNvbGxlY3Rpb25zICAjIEltcG9ydCBhZnRlciBfd2Vha3JlZiB0byBhdm9pZCBjaXJjdWxhciBpbXBvcnQuCitpbXBvcnQgc3lzCitpbXBvcnQgaXRlcnRvb2xzCiAKIFByb3h5VHlwZXMgPSAoUHJveHlUeXBlLCBDYWxsYWJsZVByb3h5VHlwZSkKIAogX19hbGxfXyA9IFsicmVmIiwgInByb3h5IiwgImdldHdlYWtyZWZjb3VudCIsICJnZXR3ZWFrcmVmcyIsCiAgICAgICAgICAgICJXZWFrS2V5RGljdGlvbmFyeSIsICJSZWZlcmVuY2VUeXBlIiwgIlByb3h5VHlwZSIsCiAgICAgICAgICAgICJDYWxsYWJsZVByb3h5VHlwZSIsICJQcm94eVR5cGVzIiwgIldlYWtWYWx1ZURpY3Rpb25hcnkiLAotICAgICAgICAgICAiV2Vha1NldCJdCisgICAgICAgICAgICJXZWFrU2V0IiwgIldlYWtNZXRob2QiLCAiZmluYWxpemUiXQorCisKK2NsYXNzIFdlYWtNZXRob2QocmVmKToKKyAgICAiIiIKKyAgICBBIGN1c3RvbSBgd2Vha3JlZi5yZWZgIHN1YmNsYXNzIHdoaWNoIHNpbXVsYXRlcyBhIHdlYWsgcmVmZXJlbmNlIHRvCisgICAgYSBib3VuZCBtZXRob2QsIHdvcmtpbmcgYXJvdW5kIHRoZSBsaWZldGltZSBwcm9ibGVtIG9mIGJvdW5kIG1ldGhvZHMuCisgICAgIiIiCisKKyAgICBfX3Nsb3RzX18gPSAiX2Z1bmNfcmVmIiwgIl9tZXRoX3R5cGUiLCAiX2FsaXZlIiwgIl9fd2Vha3JlZl9fIgorCisgICAgZGVmIF9fbmV3X18oY2xzLCBtZXRoLCBjYWxsYmFjaz1Ob25lKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb2JqID0gbWV0aC5fX3NlbGZfXworICAgICAgICAgICAgZnVuYyA9IG1ldGguX19mdW5jX18KKyAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCJhcmd1bWVudCBzaG91bGQgYmUgYSBib3VuZCBtZXRob2QsIG5vdCB7fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KHR5cGUobWV0aCkpKSBmcm9tIE5vbmUKKyAgICAgICAgZGVmIF9jYihhcmcpOgorICAgICAgICAgICAgIyBUaGUgc2VsZi13ZWFrcmVmIHRyaWNrIGlzIG5lZWRlZCB0byBhdm9pZCBjcmVhdGluZyBhIHJlZmVyZW5jZQorICAgICAgICAgICAgIyBjeWNsZS4KKyAgICAgICAgICAgIHNlbGYgPSBzZWxmX3dyKCkKKyAgICAgICAgICAgIGlmIHNlbGYuX2FsaXZlOgorICAgICAgICAgICAgICAgIHNlbGYuX2FsaXZlID0gRmFsc2UKKyAgICAgICAgICAgICAgICBpZiBjYWxsYmFjayBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soc2VsZikKKyAgICAgICAgc2VsZiA9IHJlZi5fX25ld19fKGNscywgb2JqLCBfY2IpCisgICAgICAgIHNlbGYuX2Z1bmNfcmVmID0gcmVmKGZ1bmMsIF9jYikKKyAgICAgICAgc2VsZi5fbWV0aF90eXBlID0gdHlwZShtZXRoKQorICAgICAgICBzZWxmLl9hbGl2ZSA9IFRydWUKKyAgICAgICAgc2VsZl93ciA9IHJlZihzZWxmKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYpOgorICAgICAgICBvYmogPSBzdXBlcigpLl9fY2FsbF9fKCkKKyAgICAgICAgZnVuYyA9IHNlbGYuX2Z1bmNfcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIE5vbmUgb3IgZnVuYyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYuX21ldGhfdHlwZShmdW5jLCBvYmopCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgV2Vha01ldGhvZCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxpdmUgb3Igbm90IG90aGVyLl9hbGl2ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiBpcyBvdGhlcgorICAgICAgICAgICAgcmV0dXJuIHJlZi5fX2VxX18oc2VsZiwgb3RoZXIpIGFuZCBzZWxmLl9mdW5jX3JlZiA9PSBvdGhlci5fZnVuY19yZWYKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgaWYgaXNpbnN0YW5jZShvdGhlciwgV2Vha01ldGhvZCk6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5fYWxpdmUgb3Igbm90IG90aGVyLl9hbGl2ZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZiBpcyBub3Qgb3RoZXIKKyAgICAgICAgICAgIHJldHVybiByZWYuX19uZV9fKHNlbGYsIG90aGVyKSBvciBzZWxmLl9mdW5jX3JlZiAhPSBvdGhlci5fZnVuY19yZWYKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIF9faGFzaF9fID0gcmVmLl9faGFzaF9fCiAKIAogY2xhc3MgV2Vha1ZhbHVlRGljdGlvbmFyeShjb2xsZWN0aW9ucy5NdXRhYmxlTWFwcGluZyk6CkBAIC00Miw3ICs5OCwxMyBAQAogICAgICMgb2JqZWN0cyBhcmUgdW53cmFwcGVkIG9uIHRoZSB3YXkgb3V0LCBhbmQgd2UgYWx3YXlzIHdyYXAgb24gdGhlCiAgICAgIyB3YXkgaW4pLgogCi0gICAgZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3KToKKyAgICBkZWYgX19pbml0X18oKmFyZ3MsICoqa3cpOgorICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGVzY3JpcHRvciAnX19pbml0X18nIG9mICdXZWFrVmFsdWVEaWN0aW9uYXJ5JyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdCBuZWVkcyBhbiBhcmd1bWVudCIpCisgICAgICAgIHNlbGYsICphcmdzID0gYXJncworICAgICAgICBpZiBsZW4oYXJncykgPiAxOgorICAgICAgICAgICAgcmFpc2UgVHlwZUVycm9yKCdleHBlY3RlZCBhdCBtb3N0IDEgYXJndW1lbnRzLCBnb3QgJWQnICUgbGVuKGFyZ3MpKQogICAgICAgICBkZWYgcmVtb3ZlKHdyLCBzZWxmcmVmPXJlZihzZWxmKSk6CiAgICAgICAgICAgICBzZWxmID0gc2VsZnJlZigpCiAgICAgICAgICAgICBpZiBzZWxmIGlzIG5vdCBOb25lOgpAQCAtMTUzLDggKzIxNSw3IEBACiAKICAgICAgICAgIiIiCiAgICAgICAgIHdpdGggX0l0ZXJhdGlvbkd1YXJkKHNlbGYpOgotICAgICAgICAgICAgZm9yIHdyIGluIHNlbGYuZGF0YS52YWx1ZXMoKToKLSAgICAgICAgICAgICAgICB5aWVsZCB3cgorICAgICAgICAgICAgeWllbGQgZnJvbSBzZWxmLmRhdGEudmFsdWVzKCkKIAogICAgIGRlZiB2YWx1ZXMoc2VsZik6CiAgICAgICAgIHdpdGggX0l0ZXJhdGlvbkd1YXJkKHNlbGYpOgpAQCAtMTk3LDcgKzI1OCwxNCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcmV0dXJuIHdyKCkKIAotICAgIGRlZiB1cGRhdGUoc2VsZiwgZGljdD1Ob25lLCAqKmt3YXJncyk6CisgICAgZGVmIHVwZGF0ZSgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBpZiBub3QgYXJnczoKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcigiZGVzY3JpcHRvciAndXBkYXRlJyBvZiAnV2Vha1ZhbHVlRGljdGlvbmFyeScgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvYmplY3QgbmVlZHMgYW4gYXJndW1lbnQiKQorICAgICAgICBzZWxmLCAqYXJncyA9IGFyZ3MKKyAgICAgICAgaWYgbGVuKGFyZ3MpID4gMToKKyAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgYXQgbW9zdCAxIGFyZ3VtZW50cywgZ290ICVkJyAlIGxlbihhcmdzKSkKKyAgICAgICAgZGljdCA9IGFyZ3NbMF0gaWYgYXJncyBlbHNlIE5vbmUKICAgICAgICAgaWYgc2VsZi5fcGVuZGluZ19yZW1vdmFsczoKICAgICAgICAgICAgIHNlbGYuX2NvbW1pdF9yZW1vdmFscygpCiAgICAgICAgIGQgPSBzZWxmLmRhdGEKQEAgLTI2Nyw2ICszMzUsNyBAQAogICAgICAgICAjIEEgbGlzdCBvZiBkZWFkIHdlYWtyZWZzIChrZXlzIHRvIGJlIHJlbW92ZWQpCiAgICAgICAgIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHMgPSBbXQogICAgICAgICBzZWxmLl9pdGVyYXRpbmcgPSBzZXQoKQorICAgICAgICBzZWxmLl9kaXJ0eV9sZW4gPSBGYWxzZQogICAgICAgICBpZiBkaWN0IGlzIG5vdCBOb25lOgogICAgICAgICAgICAgc2VsZi51cGRhdGUoZGljdCkKIApAQCAtMjgzLDEzICszNTIsMjMgQEAKICAgICAgICAgICAgIGV4Y2VwdCBLZXlFcnJvcjoKICAgICAgICAgICAgICAgICBwYXNzCiAKKyAgICBkZWYgX3NjcnViX3JlbW92YWxzKHNlbGYpOgorICAgICAgICBkID0gc2VsZi5kYXRhCisgICAgICAgIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHMgPSBbayBmb3IgayBpbiBzZWxmLl9wZW5kaW5nX3JlbW92YWxzIGlmIGsgaW4gZF0KKyAgICAgICAgc2VsZi5fZGlydHlfbGVuID0gRmFsc2UKKwogICAgIGRlZiBfX2RlbGl0ZW1fXyhzZWxmLCBrZXkpOgorICAgICAgICBzZWxmLl9kaXJ0eV9sZW4gPSBUcnVlCiAgICAgICAgIGRlbCBzZWxmLmRhdGFbcmVmKGtleSldCiAKICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwga2V5KToKICAgICAgICAgcmV0dXJuIHNlbGYuZGF0YVtyZWYoa2V5KV0KIAogICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICBpZiBzZWxmLl9kaXJ0eV9sZW4gYW5kIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHM6CisgICAgICAgICAgICAjIHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHMgbWF5IHN0aWxsIGNvbnRhaW4ga2V5cyB3aGljaCB3ZXJlCisgICAgICAgICAgICAjIGV4cGxpY2l0bHkgcmVtb3ZlZCwgd2UgaGF2ZSB0byBzY3J1YiB0aGVtIChzZWUgaXNzdWUgIzIxMTczKS4KKyAgICAgICAgICAgIHNlbGYuX3NjcnViX3JlbW92YWxzKCkKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRhdGEpIC0gbGVuKHNlbGYuX3BlbmRpbmdfcmVtb3ZhbHMpCiAKICAgICBkZWYgX19yZXByX18oc2VsZik6CkBAIC0zNjIsNiArNDQxLDcgQEAKICAgICAgICAgcmV0dXJuIGxpc3Qoc2VsZi5kYXRhKQogCiAgICAgZGVmIHBvcGl0ZW0oc2VsZik6CisgICAgICAgIHNlbGYuX2RpcnR5X2xlbiA9IFRydWUKICAgICAgICAgd2hpbGUgVHJ1ZToKICAgICAgICAgICAgIGtleSwgdmFsdWUgPSBzZWxmLmRhdGEucG9waXRlbSgpCiAgICAgICAgICAgICBvID0ga2V5KCkKQEAgLTM2OSw2ICs0NDksNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBvLCB2YWx1ZQogCiAgICAgZGVmIHBvcChzZWxmLCBrZXksICphcmdzKToKKyAgICAgICAgc2VsZi5fZGlydHlfbGVuID0gVHJ1ZQogICAgICAgICByZXR1cm4gc2VsZi5kYXRhLnBvcChyZWYoa2V5KSwgKmFyZ3MpCiAKICAgICBkZWYgc2V0ZGVmYXVsdChzZWxmLCBrZXksIGRlZmF1bHQ9Tm9uZSk6CkBAIC0zODMsMyArNDY0LDE0MCBAQAogICAgICAgICAgICAgICAgIGRbcmVmKGtleSwgc2VsZi5fcmVtb3ZlKV0gPSB2YWx1ZQogICAgICAgICBpZiBsZW4oa3dhcmdzKToKICAgICAgICAgICAgIHNlbGYudXBkYXRlKGt3YXJncykKKworCitjbGFzcyBmaW5hbGl6ZToKKyAgICAiIiJDbGFzcyBmb3IgZmluYWxpemF0aW9uIG9mIHdlYWtyZWZhYmxlIG9iamVjdHMKKworICAgIGZpbmFsaXplKG9iaiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKSByZXR1cm5zIGEgY2FsbGFibGUgZmluYWxpemVyCisgICAgb2JqZWN0IHdoaWNoIHdpbGwgYmUgY2FsbGVkIHdoZW4gb2JqIGlzIGdhcmJhZ2UgY29sbGVjdGVkLiBUaGUKKyAgICBmaXJzdCB0aW1lIHRoZSBmaW5hbGl6ZXIgaXMgY2FsbGVkIGl0IGV2YWx1YXRlcyBmdW5jKCphcmcsICoqa3dhcmdzKQorICAgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQuIEFmdGVyIHRoaXMgdGhlIGZpbmFsaXplciBpcyBkZWFkLCBhbmQKKyAgICBjYWxsaW5nIGl0IGp1c3QgcmV0dXJucyBOb25lLgorCisgICAgV2hlbiB0aGUgcHJvZ3JhbSBleGl0cyBhbnkgcmVtYWluaW5nIGZpbmFsaXplcnMgZm9yIHdoaWNoIHRoZQorICAgIGF0ZXhpdCBhdHRyaWJ1dGUgaXMgdHJ1ZSB3aWxsIGJlIHJ1biBpbiByZXZlcnNlIG9yZGVyIG9mIGNyZWF0aW9uLgorICAgIEJ5IGRlZmF1bHQgYXRleGl0IGlzIHRydWUuCisgICAgIiIiCisKKyAgICAjIEZpbmFsaXplciBvYmplY3RzIGRvbid0IGhhdmUgYW55IHN0YXRlIG9mIHRoZWlyIG93bi4gIFRoZXkgYXJlCisgICAgIyBqdXN0IHVzZWQgYXMga2V5cyB0byBsb29rdXAgX0luZm8gb2JqZWN0cyBpbiB0aGUgcmVnaXN0cnkuICBUaGlzCisgICAgIyBlbnN1cmVzIHRoYXQgdGhleSBjYW5ub3QgYmUgcGFydCBvZiBhIHJlZi1jeWNsZS4KKworICAgIF9fc2xvdHNfXyA9ICgpCisgICAgX3JlZ2lzdHJ5ID0ge30KKyAgICBfc2h1dGRvd24gPSBGYWxzZQorICAgIF9pbmRleF9pdGVyID0gaXRlcnRvb2xzLmNvdW50KCkKKyAgICBfZGlydHkgPSBGYWxzZQorICAgIF9yZWdpc3RlcmVkX3dpdGhfYXRleGl0ID0gRmFsc2UKKworICAgIGNsYXNzIF9JbmZvOgorICAgICAgICBfX3Nsb3RzX18gPSAoIndlYWtyZWYiLCAiZnVuYyIsICJhcmdzIiwgImt3YXJncyIsICJhdGV4aXQiLCAiaW5kZXgiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG9iaiwgZnVuYywgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IHNlbGYuX3JlZ2lzdGVyZWRfd2l0aF9hdGV4aXQ6CisgICAgICAgICAgICAjIFdlIG1heSByZWdpc3RlciB0aGUgZXhpdCBmdW5jdGlvbiBtb3JlIHRoYW4gb25jZSBiZWNhdXNlCisgICAgICAgICAgICAjIG9mIGEgdGhyZWFkIHJhY2UsIGJ1dCB0aGF0IGlzIGhhcm1sZXNzCisgICAgICAgICAgICBpbXBvcnQgYXRleGl0CisgICAgICAgICAgICBhdGV4aXQucmVnaXN0ZXIoc2VsZi5fZXhpdGZ1bmMpCisgICAgICAgICAgICBmaW5hbGl6ZS5fcmVnaXN0ZXJlZF93aXRoX2F0ZXhpdCA9IFRydWUKKyAgICAgICAgaW5mbyA9IHNlbGYuX0luZm8oKQorICAgICAgICBpbmZvLndlYWtyZWYgPSByZWYob2JqLCBzZWxmKQorICAgICAgICBpbmZvLmZ1bmMgPSBmdW5jCisgICAgICAgIGluZm8uYXJncyA9IGFyZ3MKKyAgICAgICAgaW5mby5rd2FyZ3MgPSBrd2FyZ3Mgb3IgTm9uZQorICAgICAgICBpbmZvLmF0ZXhpdCA9IFRydWUKKyAgICAgICAgaW5mby5pbmRleCA9IG5leHQoc2VsZi5faW5kZXhfaXRlcikKKyAgICAgICAgc2VsZi5fcmVnaXN0cnlbc2VsZl0gPSBpbmZvCisgICAgICAgIGZpbmFsaXplLl9kaXJ0eSA9IFRydWUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBfPU5vbmUpOgorICAgICAgICAiIiJJZiBhbGl2ZSB0aGVuIG1hcmsgYXMgZGVhZCBhbmQgcmV0dXJuIGZ1bmMoKmFyZ3MsICoqa3dhcmdzKTsKKyAgICAgICAgb3RoZXJ3aXNlIHJldHVybiBOb25lIiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5wb3Aoc2VsZiwgTm9uZSkKKyAgICAgICAgaWYgaW5mbyBhbmQgbm90IHNlbGYuX3NodXRkb3duOgorICAgICAgICAgICAgcmV0dXJuIGluZm8uZnVuYygqaW5mby5hcmdzLCAqKihpbmZvLmt3YXJncyBvciB7fSkpCisKKyAgICBkZWYgZGV0YWNoKHNlbGYpOgorICAgICAgICAiIiJJZiBhbGl2ZSB0aGVuIG1hcmsgYXMgZGVhZCBhbmQgcmV0dXJuIChvYmosIGZ1bmMsIGFyZ3MsIGt3YXJncyk7CisgICAgICAgIG90aGVyd2lzZSByZXR1cm4gTm9uZSIiIgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIG9iaiA9IGluZm8gYW5kIGluZm8ud2Vha3JlZigpCisgICAgICAgIGlmIG9iaiBpcyBub3QgTm9uZSBhbmQgc2VsZi5fcmVnaXN0cnkucG9wKHNlbGYsIE5vbmUpOgorICAgICAgICAgICAgcmV0dXJuIChvYmosIGluZm8uZnVuYywgaW5mby5hcmdzLCBpbmZvLmt3YXJncyBvciB7fSkKKworICAgIGRlZiBwZWVrKHNlbGYpOgorICAgICAgICAiIiJJZiBhbGl2ZSB0aGVuIHJldHVybiAob2JqLCBmdW5jLCBhcmdzLCBrd2FyZ3MpOworICAgICAgICBvdGhlcndpc2UgcmV0dXJuIE5vbmUiIiIKKyAgICAgICAgaW5mbyA9IHNlbGYuX3JlZ2lzdHJ5LmdldChzZWxmKQorICAgICAgICBvYmogPSBpbmZvIGFuZCBpbmZvLndlYWtyZWYoKQorICAgICAgICBpZiBvYmogaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4gKG9iaiwgaW5mby5mdW5jLCBpbmZvLmFyZ3MsIGluZm8ua3dhcmdzIG9yIHt9KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGFsaXZlKHNlbGYpOgorICAgICAgICAiIiJXaGV0aGVyIGZpbmFsaXplciBpcyBhbGl2ZSIiIgorICAgICAgICByZXR1cm4gc2VsZiBpbiBzZWxmLl9yZWdpc3RyeQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGF0ZXhpdChzZWxmKToKKyAgICAgICAgIiIiV2hldGhlciBmaW5hbGl6ZXIgc2hvdWxkIGJlIGNhbGxlZCBhdCBleGl0IiIiCisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgcmV0dXJuIGJvb2woaW5mbykgYW5kIGluZm8uYXRleGl0CisKKyAgICBAYXRleGl0LnNldHRlcgorICAgIGRlZiBhdGV4aXQoc2VsZiwgdmFsdWUpOgorICAgICAgICBpbmZvID0gc2VsZi5fcmVnaXN0cnkuZ2V0KHNlbGYpCisgICAgICAgIGlmIGluZm86CisgICAgICAgICAgICBpbmZvLmF0ZXhpdCA9IGJvb2wodmFsdWUpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGluZm8gPSBzZWxmLl9yZWdpc3RyeS5nZXQoc2VsZikKKyAgICAgICAgb2JqID0gaW5mbyBhbmQgaW5mby53ZWFrcmVmKCkKKyAgICAgICAgaWYgb2JqIGlzIE5vbmU6CisgICAgICAgICAgICByZXR1cm4gJzwlcyBvYmplY3QgYXQgJSN4OyBkZWFkPicgJSAodHlwZShzZWxmKS5fX25hbWVfXywgaWQoc2VsZikpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gJzwlcyBvYmplY3QgYXQgJSN4OyBmb3IgJXIgYXQgJSN4PicgJSBcCisgICAgICAgICAgICAgICAgKHR5cGUoc2VsZikuX19uYW1lX18sIGlkKHNlbGYpLCB0eXBlKG9iaikuX19uYW1lX18sIGlkKG9iaikpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgX3NlbGVjdF9mb3JfZXhpdChjbHMpOgorICAgICAgICAjIFJldHVybiBsaXZlIGZpbmFsaXplcnMgbWFya2VkIGZvciBleGl0LCBvbGRlc3QgZmlyc3QKKyAgICAgICAgTCA9IFsoZixpKSBmb3IgKGYsaSkgaW4gY2xzLl9yZWdpc3RyeS5pdGVtcygpIGlmIGkuYXRleGl0XQorICAgICAgICBMLnNvcnQoa2V5PWxhbWJkYSBpdGVtOml0ZW1bMV0uaW5kZXgpCisgICAgICAgIHJldHVybiBbZiBmb3IgKGYsaSkgaW4gTF0KKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBfZXhpdGZ1bmMoY2xzKToKKyAgICAgICAgIyBBdCBzaHV0ZG93biBpbnZva2UgZmluYWxpemVycyBmb3Igd2hpY2ggYXRleGl0IGlzIHRydWUuCisgICAgICAgICMgVGhpcyBpcyBjYWxsZWQgb25jZSBhbGwgb3RoZXIgbm9uLWRhZW1vbmljIHRocmVhZHMgaGF2ZSBiZWVuCisgICAgICAgICMgam9pbmVkLgorICAgICAgICByZWVuYWJsZV9nYyA9IEZhbHNlCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGlmIGNscy5fcmVnaXN0cnk6CisgICAgICAgICAgICAgICAgaW1wb3J0IGdjCisgICAgICAgICAgICAgICAgaWYgZ2MuaXNlbmFibGVkKCk6CisgICAgICAgICAgICAgICAgICAgIHJlZW5hYmxlX2djID0gVHJ1ZQorICAgICAgICAgICAgICAgICAgICBnYy5kaXNhYmxlKCkKKyAgICAgICAgICAgICAgICBwZW5kaW5nID0gTm9uZQorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAgIGlmIHBlbmRpbmcgaXMgTm9uZSBvciBmaW5hbGl6ZS5fZGlydHk6CisgICAgICAgICAgICAgICAgICAgICAgICBwZW5kaW5nID0gY2xzLl9zZWxlY3RfZm9yX2V4aXQoKQorICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxpemUuX2RpcnR5ID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHBlbmRpbmc6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmID0gcGVuZGluZy5wb3AoKQorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICAjIGdjIGlzIGRpc2FibGVkLCBzbyAoYXNzdW1pbmcgbm8gZGFlbW9uaWMKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdGhyZWFkcykgdGhlIGZvbGxvd2luZyBpcyB0aGUgb25seSBsaW5lIGluCisgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgZnVuY3Rpb24gd2hpY2ggbWlnaHQgdHJpZ2dlciBjcmVhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIyBvZiBhIG5ldyBmaW5hbGl6ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGYoKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgICAgICAgICAgc3lzLmV4Y2VwdGhvb2soKnN5cy5leGNfaW5mbygpKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZiBub3QgaW4gY2xzLl9yZWdpc3RyeQorICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgIyBwcmV2ZW50IGFueSBtb3JlIGZpbmFsaXplcnMgZnJvbSBleGVjdXRpbmcgZHVyaW5nIHNodXRkb3duCisgICAgICAgICAgICBmaW5hbGl6ZS5fc2h1dGRvd24gPSBUcnVlCisgICAgICAgICAgICBpZiByZWVuYWJsZV9nYzoKKyAgICAgICAgICAgICAgICBnYy5lbmFibGUoKQpkaWZmIC0tZ2l0IGEvTGliL3dlYmJyb3dzZXIucHkgYi9MaWIvd2ViYnJvd3Nlci5weQppbmRleCA5NDVlZGE0Li44NDVmMWQwIDEwMDc1NQotLS0gYS9MaWIvd2ViYnJvd3Nlci5weQorKysgYi9MaWIvd2ViYnJvd3Nlci5weQpAQCAtMiwxMyArMiwxMSBAQAogIiIiSW50ZXJmYWNlcyBmb3IgbGF1bmNoaW5nIGFuZCByZW1vdGVseSBjb250cm9sbGluZyBXZWIgYnJvd3NlcnMuIiIiCiAjIE1haW50YWluZWQgYnkgR2VvcmcgQnJhbmRsLgogCi1pbXBvcnQgaW8KIGltcG9ydCBvcwogaW1wb3J0IHNobGV4CitpbXBvcnQgc2h1dGlsCiBpbXBvcnQgc3lzCi1pbXBvcnQgc3RhdAogaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCB0aW1lCiAKIF9fYWxsX18gPSBbIkVycm9yIiwgIm9wZW4iLCAib3Blbl9uZXciLCAib3Blbl9uZXdfdGFiIiwgImdldCIsICJyZWdpc3RlciJdCiAKQEAgLTgzLDcgKzgxLDcgQEAKIAogICAgICIiIgogICAgIGNtZCA9IGJyb3dzZXIuc3BsaXQoKVswXQotICAgIGlmIG5vdCBfaXNjb21tYW5kKGNtZCk6CisgICAgaWYgbm90IHNodXRpbC53aGljaChjbWQpOgogICAgICAgICByZXR1cm4gW05vbmUsIE5vbmVdCiAgICAgbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoY21kKQogICAgIHRyeToKQEAgLTEwMiwzOCArMTAwLDYgQEAKICAgICByZXR1cm4gW05vbmUsIE5vbmVdCiAKIAotaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAid2luIjoKLSAgICBkZWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICBjbWQgPSBjbWQubG93ZXIoKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShjbWQpIGFuZCBjbWQuZW5kc3dpdGgoKCIuZXhlIiwgIi5iYXQiKSk6Ci0gICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICBmb3IgZXh0IGluICIuZXhlIiwgIi5iYXQiOgotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kICsgZXh0KToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotICAgICAgICByZXR1cm4gRmFsc2UKLWVsc2U6Ci0gICAgZGVmIF9pc2V4ZWN1dGFibGUoY21kKToKLSAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoY21kKToKLSAgICAgICAgICAgIG1vZGUgPSBvcy5zdGF0KGNtZClbc3RhdC5TVF9NT0RFXQotICAgICAgICAgICAgaWYgbW9kZSAmIHN0YXQuU19JWFVTUiBvciBtb2RlICYgc3RhdC5TX0lYR1JQIG9yIG1vZGUgJiBzdGF0LlNfSVhPVEg6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgcmV0dXJuIEZhbHNlCi0KLWRlZiBfaXNjb21tYW5kKGNtZCk6Ci0gICAgIiIiUmV0dXJuIFRydWUgaWYgY21kIGlzIGV4ZWN1dGFibGUgb3IgY2FuIGJlIGZvdW5kIG9uIHRoZSBleGVjdXRhYmxlCi0gICAgc2VhcmNoIHBhdGguIiIiCi0gICAgaWYgX2lzZXhlY3V0YWJsZShjbWQpOgotICAgICAgICByZXR1cm4gVHJ1ZQotICAgIHBhdGggPSBvcy5lbnZpcm9uLmdldCgiUEFUSCIpCi0gICAgaWYgbm90IHBhdGg6Ci0gICAgICAgIHJldHVybiBGYWxzZQotICAgIGZvciBkIGluIHBhdGguc3BsaXQob3MucGF0aHNlcCk6Ci0gICAgICAgIGV4ZSA9IG9zLnBhdGguam9pbihkLCBjbWQpCi0gICAgICAgIGlmIF9pc2V4ZWN1dGFibGUoZXhlKToKLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0gICAgcmV0dXJuIEZhbHNlCi0KLQogIyBHZW5lcmFsIHBhcmVudCBjbGFzc2VzCiAKIGNsYXNzIEJhc2VCcm93c2VyKG9iamVjdCk6CkBAIC0xOTMsMTAgKzE1OSw4IEBACiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm1bOjNdID09ICd3aW4nOgogICAgICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKGNtZGxpbmUpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNldHNpZCA9IGdldGF0dHIob3MsICdzZXRzaWQnLCBOb25lKQotICAgICAgICAgICAgICAgIGlmIG5vdCBzZXRzaWQ6Ci0gICAgICAgICAgICAgICAgICAgIHNldHNpZCA9IGdldGF0dHIob3MsICdzZXRwZ3JwJywgTm9uZSkKLSAgICAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihjbWRsaW5lLCBjbG9zZV9mZHM9VHJ1ZSwgcHJlZXhlY19mbj1zZXRzaWQpCisgICAgICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oY21kbGluZSwgY2xvc2VfZmRzPVRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3Nlc3Npb249VHJ1ZSkKICAgICAgICAgICAgIHJldHVybiAocC5wb2xsKCkgaXMgTm9uZSkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTM1NSwxMSArMzE5LDYgQEAKICAgICAgICAgICAgIGFjdGlvbiA9ICJvcGVuVVJMIgogCiAgICAgICAgIGRldm51bGwgPSBzdWJwcm9jZXNzLkRFVk5VTEwKLSAgICAgICAgIyBpZiBwb3NzaWJsZSwgcHV0IGJyb3dzZXIgaW4gc2VwYXJhdGUgcHJvY2VzcyBncm91cCwgc28KLSAgICAgICAgIyBrZXlib2FyZCBpbnRlcnJ1cHRzIGRvbid0IGFmZmVjdCBicm93c2VyIGFzIHdlbGwgYXMgUHl0aG9uCi0gICAgICAgIHNldHNpZCA9IGdldGF0dHIob3MsICdzZXRzaWQnLCBOb25lKQotICAgICAgICBpZiBub3Qgc2V0c2lkOgotICAgICAgICAgICAgc2V0c2lkID0gZ2V0YXR0cihvcywgJ3NldHBncnAnLCBOb25lKQogCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHAgPSBzdWJwcm9jZXNzLlBvcGVuKFsia2ZtY2xpZW50IiwgYWN0aW9uLCB1cmxdLApAQCAtMzc3LDcgKzMzNiw3IEBACiAgICAgICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbImtvbnF1ZXJvciIsICItLXNpbGVudCIsIHVybF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZV9mZHM9VHJ1ZSwgc3RkaW49ZGV2bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZG91dD1kZXZudWxsLCBzdGRlcnI9ZGV2bnVsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWV4ZWNfZm49c2V0c2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfbmV3X3Nlc3Npb249VHJ1ZSkKICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAjIGZhbGwgdGhyb3VnaCB0byBuZXh0IHZhcmlhbnQKICAgICAgICAgICAgIHBhc3MKQEAgLTM5MCw3ICszNDksNyBAQAogICAgICAgICAgICAgcCA9IHN1YnByb2Nlc3MuUG9wZW4oWyJrZm0iLCAiLWQiLCB1cmxdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VfZmRzPVRydWUsIHN0ZGluPWRldm51bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9ZGV2bnVsbCwgc3RkZXJyPWRldm51bGwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVleGVjX2ZuPXNldHNpZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUpCiAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgcmV0dXJuIEZhbHNlCiAgICAgICAgIGVsc2U6CkBAIC00MTgsMTEgKzM3NywxMSBAQAogICAgICAgICAgICAgIyBuZWVkIHRvIFBJTkcgZWFjaCBvbmUgdW50aWwgd2UgZmluZCBvbmUgdGhhdCdzIGxpdmUKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBzLmNvbm5lY3QoZm4pCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgIyBubyBnb29kOyBhdHRlbXB0IHRvIGNsZWFuIGl0IG91dCwgYnV0IGRvbid0IGZhaWw6CiAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICBvcy51bmxpbmsoZm4pCi0gICAgICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcmV0dXJuIHMKQEAgLTQ1MywyMiArNDEyLDIyIEBACiBkZWYgcmVnaXN0ZXJfWF9icm93c2VycygpOgogCiAgICAgIyB1c2UgeGRnLW9wZW4gaWYgYXJvdW5kCi0gICAgaWYgX2lzY29tbWFuZCgieGRnLW9wZW4iKToKKyAgICBpZiBzaHV0aWwud2hpY2goInhkZy1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ4ZGctb3BlbiIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKCJ4ZGctb3BlbiIpKQogCiAgICAgIyBUaGUgZGVmYXVsdCBHTk9NRTMgYnJvd3NlcgotICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIF9pc2NvbW1hbmQoImd2ZnMtb3BlbiIpOgorICAgIGlmICJHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQiIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgiZ3Zmcy1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJndmZzLW9wZW4iLCBOb25lLCBCYWNrZ3JvdW5kQnJvd3NlcigiZ3Zmcy1vcGVuIikpCiAKICAgICAjIFRoZSBkZWZhdWx0IEdOT01FIGJyb3dzZXIKLSAgICBpZiAiR05PTUVfREVTS1RPUF9TRVNTSU9OX0lEIiBpbiBvcy5lbnZpcm9uIGFuZCBfaXNjb21tYW5kKCJnbm9tZS1vcGVuIik6CisgICAgaWYgIkdOT01FX0RFU0tUT1BfU0VTU0lPTl9JRCIgaW4gb3MuZW52aXJvbiBhbmQgc2h1dGlsLndoaWNoKCJnbm9tZS1vcGVuIik6CiAgICAgICAgIHJlZ2lzdGVyKCJnbm9tZS1vcGVuIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoImdub21lLW9wZW4iKSkKIAogICAgICMgVGhlIGRlZmF1bHQgS0RFIGJyb3dzZXIKLSAgICBpZiAiS0RFX0ZVTExfU0VTU0lPTiIgaW4gb3MuZW52aXJvbiBhbmQgX2lzY29tbWFuZCgia2ZtY2xpZW50Iik6CisgICAgaWYgIktERV9GVUxMX1NFU1NJT04iIGluIG9zLmVudmlyb24gYW5kIHNodXRpbC53aGljaCgia2ZtY2xpZW50Iik6CiAgICAgICAgIHJlZ2lzdGVyKCJrZm1jbGllbnQiLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia2ZtY2xpZW50IikpCiAKLSAgICBpZiBfaXNjb21tYW5kKCJ4LXd3dy1icm93c2VyIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ4LXd3dy1icm93c2VyIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ4LXd3dy1icm93c2VyIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoIngtd3d3LWJyb3dzZXIiKSkKIAogICAgICMgVGhlIE1vemlsbGEvTmV0c2NhcGUgYnJvd3NlcnMKQEAgLTQ3NiwzOSArNDM1LDM5IEBACiAgICAgICAgICAgICAgICAgICAgICJtb3ppbGxhLWZpcmViaXJkIiwgImZpcmViaXJkIiwKICAgICAgICAgICAgICAgICAgICAgImljZXdlYXNlbCIsICJpY2VhcGUiLAogICAgICAgICAgICAgICAgICAgICAic2VhbW9ua2V5IiwgIm1vemlsbGEiLCAibmV0c2NhcGUiKToKLSAgICAgICAgaWYgX2lzY29tbWFuZChicm93c2VyKToKKyAgICAgICAgaWYgc2h1dGlsLndoaWNoKGJyb3dzZXIpOgogICAgICAgICAgICAgcmVnaXN0ZXIoYnJvd3NlciwgTm9uZSwgTW96aWxsYShicm93c2VyKSkKIAogICAgICMgS29ucXVlcm9yL2tmbSwgdGhlIEtERSBicm93c2VyLgotICAgIGlmIF9pc2NvbW1hbmQoImtmbSIpOgorICAgIGlmIHNodXRpbC53aGljaCgia2ZtIik6CiAgICAgICAgIHJlZ2lzdGVyKCJrZm0iLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia2ZtIikpCi0gICAgZWxpZiBfaXNjb21tYW5kKCJrb25xdWVyb3IiKToKKyAgICBlbGlmIHNodXRpbC53aGljaCgia29ucXVlcm9yIik6CiAgICAgICAgIHJlZ2lzdGVyKCJrb25xdWVyb3IiLCBLb25xdWVyb3IsIEtvbnF1ZXJvcigia29ucXVlcm9yIikpCiAKICAgICAjIEdub21lJ3MgR2FsZW9uIGFuZCBFcGlwaGFueQogICAgIGZvciBicm93c2VyIGluICgiZ2FsZW9uIiwgImVwaXBoYW55Iik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIEdhbGVvbihicm93c2VyKSkKIAogICAgICMgU2tpcHN0b25lLCBhbm90aGVyIEd0ay9Nb3ppbGxhIGJhc2VkIGJyb3dzZXIKLSAgICBpZiBfaXNjb21tYW5kKCJza2lwc3RvbmUiKToKKyAgICBpZiBzaHV0aWwud2hpY2goInNraXBzdG9uZSIpOgogICAgICAgICByZWdpc3Rlcigic2tpcHN0b25lIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoInNraXBzdG9uZSIpKQogCiAgICAgIyBHb29nbGUgQ2hyb21lL0Nocm9taXVtIGJyb3dzZXJzCiAgICAgZm9yIGJyb3dzZXIgaW4gKCJnb29nbGUtY2hyb21lIiwgImNocm9tZSIsICJjaHJvbWl1bSIsICJjaHJvbWl1bS1icm93c2VyIik6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIENocm9tZShicm93c2VyKSkKIAogICAgICMgT3BlcmEsIHF1aXRlIHBvcHVsYXIKLSAgICBpZiBfaXNjb21tYW5kKCJvcGVyYSIpOgorICAgIGlmIHNodXRpbC53aGljaCgib3BlcmEiKToKICAgICAgICAgcmVnaXN0ZXIoIm9wZXJhIiwgTm9uZSwgT3BlcmEoIm9wZXJhIikpCiAKICAgICAjIE5leHQsIE1vc2FpYyAtLSBvbGQgYnV0IHN0aWxsIGluIHVzZS4KLSAgICBpZiBfaXNjb21tYW5kKCJtb3NhaWMiKToKKyAgICBpZiBzaHV0aWwud2hpY2goIm1vc2FpYyIpOgogICAgICAgICByZWdpc3RlcigibW9zYWljIiwgTm9uZSwgQmFja2dyb3VuZEJyb3dzZXIoIm1vc2FpYyIpKQogCiAgICAgIyBHcmFpbCwgdGhlIFB5dGhvbiBicm93c2VyLiBEb2VzIGFueWJvZHkgc3RpbGwgdXNlIGl0PwotICAgIGlmIF9pc2NvbW1hbmQoImdyYWlsIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJncmFpbCIpOgogICAgICAgICByZWdpc3RlcigiZ3JhaWwiLCBHcmFpbCwgTm9uZSkKIAogIyBQcmVmZXIgWCBicm93c2VycyBpZiBwcmVzZW50CkBAIC01MTcsMTggKzQ3NiwxOCBAQAogCiAjIEFsc28gdHJ5IGNvbnNvbGUgYnJvd3NlcnMKIGlmIG9zLmVudmlyb24uZ2V0KCJURVJNIik6Ci0gICAgaWYgX2lzY29tbWFuZCgid3d3LWJyb3dzZXIiKToKKyAgICBpZiBzaHV0aWwud2hpY2goInd3dy1icm93c2VyIik6CiAgICAgICAgIHJlZ2lzdGVyKCJ3d3ctYnJvd3NlciIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJ3d3ctYnJvd3NlciIpKQogICAgICMgVGhlIExpbmtzL2VsaW5rcyBicm93c2VycyA8aHR0cDovL2FydGF4Lmthcmxpbi5tZmYuY3VuaS5jei9+bWlrdWxhcy9saW5rcy8+Ci0gICAgaWYgX2lzY29tbWFuZCgibGlua3MiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImxpbmtzIik6CiAgICAgICAgIHJlZ2lzdGVyKCJsaW5rcyIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJsaW5rcyIpKQotICAgIGlmIF9pc2NvbW1hbmQoImVsaW5rcyIpOgorICAgIGlmIHNodXRpbC53aGljaCgiZWxpbmtzIik6CiAgICAgICAgIHJlZ2lzdGVyKCJlbGlua3MiLCBOb25lLCBFbGlua3MoImVsaW5rcyIpKQogICAgICMgVGhlIEx5bnggYnJvd3NlciA8aHR0cDovL2x5bnguaXNjLm9yZy8+LCA8aHR0cDovL2x5bnguYnJvd3Nlci5vcmcvPgotICAgIGlmIF9pc2NvbW1hbmQoImx5bngiKToKKyAgICBpZiBzaHV0aWwud2hpY2goImx5bngiKToKICAgICAgICAgcmVnaXN0ZXIoImx5bngiLCBOb25lLCBHZW5lcmljQnJvd3NlcigibHlueCIpKQogICAgICMgVGhlIHczbSBicm93c2VyIDxodHRwOi8vdzNtLnNvdXJjZWZvcmdlLm5ldC8+Ci0gICAgaWYgX2lzY29tbWFuZCgidzNtIik6CisgICAgaWYgc2h1dGlsLndoaWNoKCJ3M20iKToKICAgICAgICAgcmVnaXN0ZXIoInczbSIsIE5vbmUsIEdlbmVyaWNCcm93c2VyKCJ3M20iKSkKIAogIwpAQCAtNTQwLDcgKzQ5OSw3IEBACiAgICAgICAgIGRlZiBvcGVuKHNlbGYsIHVybCwgbmV3PTAsIGF1dG9yYWlzZT1UcnVlKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBvcy5zdGFydGZpbGUodXJsKQotICAgICAgICAgICAgZXhjZXB0IFdpbmRvd3NFcnJvcjoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICMgW0Vycm9yIDIyXSBObyBhcHBsaWNhdGlvbiBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAogICAgICAgICAgICAgICAgICMgZmlsZSBmb3IgdGhpcyBvcGVyYXRpb246ICc8VVJMPicKICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKQEAgLTU1OCw3ICs1MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJbnRlcm5ldCBFeHBsb3JlclxcSUVYUExPUkUuRVhFIikKICAgICBmb3IgYnJvd3NlciBpbiAoImZpcmVmb3giLCAiZmlyZWJpcmQiLCAic2VhbW9ua2V5IiwgIm1vemlsbGEiLAogICAgICAgICAgICAgICAgICAgICAibmV0c2NhcGUiLCAib3BlcmEiLCBpZXhwbG9yZSk6Ci0gICAgICAgIGlmIF9pc2NvbW1hbmQoYnJvd3Nlcik6CisgICAgICAgIGlmIHNodXRpbC53aGljaChicm93c2VyKToKICAgICAgICAgICAgIHJlZ2lzdGVyKGJyb3dzZXIsIE5vbmUsIEJhY2tncm91bmRCcm93c2VyKGJyb3dzZXIpKQogCiAjCkBAIC02NDQsMTcgKzYwMyw2IEBACiAgICAgcmVnaXN0ZXIoIk1hY09TWCIsIE5vbmUsIE1hY09TWE9TQVNjcmlwdCgnZGVmYXVsdCcpLCAtMSkKIAogCi0jCi0jIFBsYXRmb3JtIHN1cHBvcnQgZm9yIE9TLzIKLSMKLQotaWYgc3lzLnBsYXRmb3JtWzozXSA9PSAib3MyIiBhbmQgX2lzY29tbWFuZCgibmV0c2NhcGUiKToKLSAgICBfdHJ5b3JkZXIgPSBbXQotICAgIF9icm93c2VycyA9IHt9Ci0gICAgcmVnaXN0ZXIoIm9zMm5ldHNjYXBlIiwgTm9uZSwKLSAgICAgICAgICAgICBHZW5lcmljQnJvd3NlcihbInN0YXJ0IiwgIm5ldHNjYXBlIiwgIiVzIl0pLCAtMSkKLQotCiAjIE9LLCBub3cgdGhhdCB3ZSBrbm93IHdoYXQgdGhlIGRlZmF1bHQgcHJlZmVyZW5jZSBvcmRlcnMgZm9yIGVhY2gKICMgcGxhdGZvcm0gYXJlLCBhbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZW0gd2l0aCB0aGUgQlJPV1NFUiB2YXJpYWJsZS4KIGlmICJCUk9XU0VSIiBpbiBvcy5lbnZpcm9uOgpkaWZmIC0tZ2l0IGEvTGliL3dzZ2lyZWYvX19pbml0X18ucHkgYi9MaWIvd3NnaXJlZi9fX2luaXRfXy5weQppbmRleCA0NmM1NzlmLi4xZWZiYmEwIDEwMDY0NAotLS0gYS9MaWIvd3NnaXJlZi9fX2luaXRfXy5weQorKysgYi9MaWIvd3NnaXJlZi9fX2luaXRfXy5weQpAQCAtMSw0ICsxLDQgQEAKLSIiIndzZ2lyZWYgLS0gYSBXU0dJIChQRVAgMzMzKSBSZWZlcmVuY2UgTGlicmFyeQorIiIid3NnaXJlZiAtLSBhIFdTR0kgKFBFUCAzMzMzKSBSZWZlcmVuY2UgTGlicmFyeQogCiBDdXJyZW50IENvbnRlbnRzOgogCmRpZmYgLS1naXQgYS9MaWIvd3NnaXJlZi92YWxpZGF0ZS5weSBiL0xpYi93c2dpcmVmL3ZhbGlkYXRlLnB5CmluZGV4IDQ5ZWFhNTEuLjYxMDdkY2QgMTAwNjQ0Ci0tLSBhL0xpYi93c2dpcmVmL3ZhbGlkYXRlLnB5CisrKyBiL0xpYi93c2dpcmVmL3ZhbGlkYXRlLnB5CkBAIC0zMzcsNyArMzM3LDcgQEAKIAogICAgICMgQEA6IHRoZXNlIG5lZWQgZmlsbGluZyBvdXQ6CiAgICAgaWYgZW52aXJvblsnUkVRVUVTVF9NRVRIT0QnXSBub3QgaW4gKAotICAgICAgICAnR0VUJywgJ0hFQUQnLCAnUE9TVCcsICdPUFRJT05TJywnUFVUJywnREVMRVRFJywnVFJBQ0UnKToKKyAgICAgICAgJ0dFVCcsICdIRUFEJywgJ1BPU1QnLCAnT1BUSU9OUycsICdQQVRDSCcsICdQVVQnLCAnREVMRVRFJywgJ1RSQUNFJyk6CiAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAiVW5rbm93biBSRVFVRVNUX01FVEhPRDogJXIiICUgZW52aXJvblsnUkVRVUVTVF9NRVRIT0QnXSwKICAgICAgICAgICAgIFdTR0lXYXJuaW5nKQpkaWZmIC0tZ2l0IGEvTGliL3hkcmxpYi5weSBiL0xpYi94ZHJsaWIucHkKaW5kZXggYzA1Y2Y4Ny4uZDZlMWFlYiAxMDA2NDQKLS0tIGEvTGliL3hkcmxpYi5weQorKysgYi9MaWIveGRybGliLnB5CkBAIC02LDYgKzYsNyBAQAogCiBpbXBvcnQgc3RydWN0CiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKIAogX19hbGxfXyA9IFsiRXJyb3IiLCAiUGFja2VyIiwgIlVucGFja2VyIiwgIkNvbnZlcnNpb25FcnJvciJdCiAKQEAgLTMxLDYgKzMyLDE2IEBACiBjbGFzcyBDb252ZXJzaW9uRXJyb3IoRXJyb3IpOgogICAgIHBhc3MKIAorZGVmIHJhaXNlX2NvbnZlcnNpb25fZXJyb3IoZnVuY3Rpb24pOgorICAgICIiIiBXcmFwIGFueSByYWlzZWQgc3RydWN0LmVycm9ycyBpbiBhIENvbnZlcnNpb25FcnJvci4gIiIiCisKKyAgICBAd3JhcHMoZnVuY3Rpb24pCisgICAgZGVmIHJlc3VsdChzZWxmLCB2YWx1ZSk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzZWxmLCB2YWx1ZSkKKyAgICAgICAgZXhjZXB0IHN0cnVjdC5lcnJvciBhcyBlOgorICAgICAgICAgICAgcmFpc2UgQ29udmVyc2lvbkVycm9yKGUuYXJnc1swXSkgZnJvbSBOb25lCisgICAgcmV0dXJuIHJlc3VsdAogCiAKIGNsYXNzIFBhY2tlcjoKQEAgLTQ3LDkgKzU4LDExIEBACiAgICAgIyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQogICAgIGdldF9idWYgPSBnZXRfYnVmZmVyCiAKKyAgICBAcmFpc2VfY29udmVyc2lvbl9lcnJvcgogICAgIGRlZiBwYWNrX3VpbnQoc2VsZiwgeCk6CiAgICAgICAgIHNlbGYuX19idWYud3JpdGUoc3RydWN0LnBhY2soJz5MJywgeCkpCiAKKyAgICBAcmFpc2VfY29udmVyc2lvbl9lcnJvcgogICAgIGRlZiBwYWNrX2ludChzZWxmLCB4KToKICAgICAgICAgc2VsZi5fX2J1Zi53cml0ZShzdHJ1Y3QucGFjaygnPmwnLCB4KSkKIApAQCAtNjAsMjAgKzczLDI0IEBACiAgICAgICAgIGVsc2U6IHNlbGYuX19idWYud3JpdGUoYidcMFwwXDBcMCcpCiAKICAgICBkZWYgcGFja191aHlwZXIoc2VsZiwgeCk6Ci0gICAgICAgIHNlbGYucGFja191aW50KHg+PjMyICYgMHhmZmZmZmZmZikKLSAgICAgICAgc2VsZi5wYWNrX3VpbnQoeCAmIDB4ZmZmZmZmZmYpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucGFja191aW50KHg+PjMyICYgMHhmZmZmZmZmZikKKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvcikgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIENvbnZlcnNpb25FcnJvcihlLmFyZ3NbMF0pIGZyb20gTm9uZQorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnBhY2tfdWludCh4ICYgMHhmZmZmZmZmZikKKyAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIHN0cnVjdC5lcnJvcikgYXMgZToKKyAgICAgICAgICAgIHJhaXNlIENvbnZlcnNpb25FcnJvcihlLmFyZ3NbMF0pIGZyb20gTm9uZQogCiAgICAgcGFja19oeXBlciA9IHBhY2tfdWh5cGVyCiAKKyAgICBAcmFpc2VfY29udmVyc2lvbl9lcnJvcgogICAgIGRlZiBwYWNrX2Zsb2F0KHNlbGYsIHgpOgotICAgICAgICB0cnk6IHNlbGYuX19idWYud3JpdGUoc3RydWN0LnBhY2soJz5mJywgeCkpCi0gICAgICAgIGV4Y2VwdCBzdHJ1Y3QuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgcmFpc2UgQ29udmVyc2lvbkVycm9yKG1zZykKKyAgICAgICAgc2VsZi5fX2J1Zi53cml0ZShzdHJ1Y3QucGFjaygnPmYnLCB4KSkKIAorICAgIEByYWlzZV9jb252ZXJzaW9uX2Vycm9yCiAgICAgZGVmIHBhY2tfZG91YmxlKHNlbGYsIHgpOgotICAgICAgICB0cnk6IHNlbGYuX19idWYud3JpdGUoc3RydWN0LnBhY2soJz5kJywgeCkpCi0gICAgICAgIGV4Y2VwdCBzdHJ1Y3QuZXJyb3IgYXMgbXNnOgotICAgICAgICAgICAgcmFpc2UgQ29udmVyc2lvbkVycm9yKG1zZykKKyAgICAgICAgc2VsZi5fX2J1Zi53cml0ZShzdHJ1Y3QucGFjaygnPmQnLCB4KSkKIAogICAgIGRlZiBwYWNrX2ZzdHJpbmcoc2VsZiwgbiwgcyk6CiAgICAgICAgIGlmIG4gPCAwOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5IGIvTGliL3htbC9kb20vZXhwYXRidWlsZGVyLnB5CmluZGV4IGYwNzRhYjkuLjg5NzYxNDQgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZG9tL2V4cGF0YnVpbGRlci5weQorKysgYi9MaWIveG1sL2RvbS9leHBhdGJ1aWxkZXIucHkKQEAgLTEyMSwxMCArMTIxLDEyIEBACiAgICAgICAgIHFuYW1lID0gIiVzOiVzIiAlIChwcmVmaXgsIGxvY2FsbmFtZSkKICAgICAgICAgcW5hbWUgPSBpbnRlcm4ocW5hbWUsIHFuYW1lKQogICAgICAgICBsb2NhbG5hbWUgPSBpbnRlcm4obG9jYWxuYW1lLCBsb2NhbG5hbWUpCi0gICAgZWxzZToKKyAgICBlbGlmIGxlbihwYXJ0cykgPT0gMjoKICAgICAgICAgdXJpLCBsb2NhbG5hbWUgPSBwYXJ0cwogICAgICAgICBwcmVmaXggPSBFTVBUWV9QUkVGSVgKICAgICAgICAgcW5hbWUgPSBsb2NhbG5hbWUgPSBpbnRlcm4obG9jYWxuYW1lLCBsb2NhbG5hbWUpCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiVW5zdXBwb3J0ZWQgc3ludGF4OiBzcGFjZXMgaW4gVVJJcyBub3Qgc3VwcG9ydGVkOiAlciIgJSBuYW1lKQogICAgIHJldHVybiBpbnRlcm4odXJpLCB1cmkpLCBsb2NhbG5hbWUsIHByZWZpeCwgcW5hbWUKIAogCkBAIC05MDUsMTEgKzkwNyw4IEBACiAgICAgICAgIGJ1aWxkZXIgPSBFeHBhdEJ1aWxkZXIoKQogCiAgICAgaWYgaXNpbnN0YW5jZShmaWxlLCBzdHIpOgotICAgICAgICBmcCA9IG9wZW4oZmlsZSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3JiJykgYXMgZnA6CiAgICAgICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmcCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICBlbHNlOgogICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmaWxlKQogICAgIHJldHVybiByZXN1bHQKQEAgLTkzOSwxMSArOTM4LDggQEAKICAgICAgICAgYnVpbGRlciA9IEZyYWdtZW50QnVpbGRlcihjb250ZXh0KQogCiAgICAgaWYgaXNpbnN0YW5jZShmaWxlLCBzdHIpOgotICAgICAgICBmcCA9IG9wZW4oZmlsZSwgJ3JiJykKLSAgICAgICAgdHJ5OgorICAgICAgICB3aXRoIG9wZW4oZmlsZSwgJ3JiJykgYXMgZnA6CiAgICAgICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmcCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGZwLmNsb3NlKCkKICAgICBlbHNlOgogICAgICAgICByZXN1bHQgPSBidWlsZGVyLnBhcnNlRmlsZShmaWxlKQogICAgIHJldHVybiByZXN1bHQKZGlmZiAtLWdpdCBhL0xpYi94bWwvZG9tL21pbmljb21wYXQucHkgYi9MaWIveG1sL2RvbS9taW5pY29tcGF0LnB5CmluZGV4IDEyNDQ1MDAuLjVkNmZhZTkgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZG9tL21pbmljb21wYXQucHkKKysrIGIvTGliL3htbC9kb20vbWluaWNvbXBhdC5weQpAQCAtNjQsMTAgKzY0LDEwIEBACiAgICAgbGVuZ3RoID0gcHJvcGVydHkoX2dldF9sZW5ndGgsIF9zZXRfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgIGRvYz0iVGhlIG51bWJlciBvZiBub2RlcyBpbiB0aGUgTm9kZUxpc3QuIikKIAotICAgIGRlZiBfX2dldHN0YXRlX18oc2VsZik6Ci0gICAgICAgIHJldHVybiBsaXN0KHNlbGYpCi0KKyAgICAjIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CiAgICAgZGVmIF9fc2V0c3RhdGVfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgIGlmIHN0YXRlIGlzIE5vbmU6CisgICAgICAgICAgICBzdGF0ZSA9IFtdCiAgICAgICAgIHNlbGZbOl0gPSBzdGF0ZQogCiAKZGlmZiAtLWdpdCBhL0xpYi94bWwvZG9tL21pbmlkb20ucHkgYi9MaWIveG1sL2RvbS9taW5pZG9tLnB5CmluZGV4IDZmNzE2MzEuLmMzNzlhMzMgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZG9tL21pbmlkb20ucHkKKysrIGIvTGliL3htbC9kb20vbWluaWRvbS5weQpAQCAtOTc2LDcgKzk3Niw3IEBACiAgICAgZGVmIF9nZXRfbm9kZVZhbHVlKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZi5kYXRhCiAgICAgZGVmIF9zZXRfbm9kZVZhbHVlKHNlbGYsIHZhbHVlKToKLSAgICAgICAgc2VsZi5kYXRhID0gZGF0YQorICAgICAgICBzZWxmLmRhdGEgPSB2YWx1ZQogICAgIG5vZGVWYWx1ZSA9IHByb3BlcnR5KF9nZXRfbm9kZVZhbHVlLCBfc2V0X25vZGVWYWx1ZSkKIAogICAgICMgbm9kZU5hbWUgaXMgYW4gYWxpYXMgZm9yIHRhcmdldApkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudEluY2x1ZGUucHkKaW5kZXggNzFlZWIwNS4uOTYzNDcwZSAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50SW5jbHVkZS5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRJbmNsdWRlLnB5CkBAIC03MSw4ICs3MSw4IEBACiAjIEByZXR1cm4gVGhlIGV4cGFuZGVkIHJlc291cmNlLiAgSWYgdGhlIHBhcnNlIG1vZGUgaXMgInhtbCIsIHRoaXMKICMgICAgaXMgYW4gRWxlbWVudFRyZWUgaW5zdGFuY2UuICBJZiB0aGUgcGFyc2UgbW9kZSBpcyAidGV4dCIsIHRoaXMKICMgICAgaXMgYSBVbmljb2RlIHN0cmluZy4gIElmIHRoZSBsb2FkZXIgZmFpbHMsIGl0IGNhbiByZXR1cm4gTm9uZQotIyAgICBvciByYWlzZSBhbiBJT0Vycm9yIGV4Y2VwdGlvbi4KLSMgQHRocm93cyBJT0Vycm9yIElmIHRoZSBsb2FkZXIgZmFpbHMgdG8gbG9hZCB0aGUgcmVzb3VyY2UuCisjICAgIG9yIHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uLgorIyBAdGhyb3dzIE9TRXJyb3IgSWYgdGhlIGxvYWRlciBmYWlscyB0byBsb2FkIHRoZSByZXNvdXJjZS4KIAogZGVmIGRlZmF1bHRfbG9hZGVyKGhyZWYsIHBhcnNlLCBlbmNvZGluZz1Ob25lKToKICAgICBpZiBwYXJzZSA9PSAieG1sIjoKQEAgLTk0LDcgKzk0LDcgQEAKICMgICAgIHRoYXQgaW1wbGVtZW50cyB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgPGI+ZGVmYXVsdF9sb2FkZXI8L2I+LgogIyBAdGhyb3dzIEZhdGFsSW5jbHVkZUVycm9yIElmIHRoZSBmdW5jdGlvbiBmYWlscyB0byBpbmNsdWRlIGEgZ2l2ZW4KICMgICAgIHJlc291cmNlLCBvciBpZiB0aGUgdHJlZSBjb250YWlucyBtYWxmb3JtZWQgWEluY2x1ZGUgZWxlbWVudHMuCi0jIEB0aHJvd3MgSU9FcnJvciBJZiB0aGUgZnVuY3Rpb24gZmFpbHMgdG8gbG9hZCBhIGdpdmVuIHJlc291cmNlLgorIyBAdGhyb3dzIE9TRXJyb3IgSWYgdGhlIGZ1bmN0aW9uIGZhaWxzIHRvIGxvYWQgYSBnaXZlbiByZXNvdXJjZS4KIAogZGVmIGluY2x1ZGUoZWxlbSwgbG9hZGVyPU5vbmUpOgogICAgIGlmIGxvYWRlciBpcyBOb25lOgpkaWZmIC0tZ2l0IGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weSBiL0xpYi94bWwvZXRyZWUvRWxlbWVudFBhdGgucHkKaW5kZXggZTcwMTVjNy4uZDkxNGRkYiAxMDA2NDQKLS0tIGEvTGliL3htbC9ldHJlZS9FbGVtZW50UGF0aC5weQorKysgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRQYXRoLnB5CkBAIC0xMDUsMTQgKzEwNSwxMiBAQAogZGVmIHByZXBhcmVfc3RhcihuZXh0LCB0b2tlbik6CiAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgogICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6Ci0gICAgICAgICAgICBmb3IgZSBpbiBlbGVtOgotICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZWxlbQogICAgIHJldHVybiBzZWxlY3QKIAogZGVmIHByZXBhcmVfc2VsZihuZXh0LCB0b2tlbik6CiAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgotICAgICAgICBmb3IgZWxlbSBpbiByZXN1bHQ6Ci0gICAgICAgICAgICB5aWVsZCBlbGVtCisgICAgICAgIHlpZWxkIGZyb20gcmVzdWx0CiAgICAgcmV0dXJuIHNlbGVjdAogCiBkZWYgcHJlcGFyZV9kZXNjZW5kYW50KG5leHQsIHRva2VuKToKQEAgLTE3Niw3ICsxNzQsNyBAQAogICAgICAgICAgICAgICAgIGlmIGVsZW0uZ2V0KGtleSkgPT0gdmFsdWU6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KICAgICAgICAgcmV0dXJuIHNlbGVjdAotICAgIGlmIHNpZ25hdHVyZSA9PSAiLSIgYW5kIG5vdCByZS5tYXRjaCgiXGQrJCIsIHByZWRpY2F0ZVswXSk6CisgICAgaWYgc2lnbmF0dXJlID09ICItIiBhbmQgbm90IHJlLm1hdGNoKCJcLT9cZCskIiwgcHJlZGljYXRlWzBdKToKICAgICAgICAgIyBbdGFnXQogICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KICAgICAgICAgZGVmIHNlbGVjdChjb250ZXh0LCByZXN1bHQpOgpAQCAtMTg0LDcgKzE4Miw3IEBACiAgICAgICAgICAgICAgICAgaWYgZWxlbS5maW5kKHRhZykgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICAgICAgICAgIHlpZWxkIGVsZW0KICAgICAgICAgcmV0dXJuIHNlbGVjdAotICAgIGlmIHNpZ25hdHVyZSA9PSAiLT0nIiBhbmQgbm90IHJlLm1hdGNoKCJcZCskIiwgcHJlZGljYXRlWzBdKToKKyAgICBpZiBzaWduYXR1cmUgPT0gIi09JyIgYW5kIG5vdCByZS5tYXRjaCgiXC0/XGQrJCIsIHByZWRpY2F0ZVswXSk6CiAgICAgICAgICMgW3RhZz0ndmFsdWUnXQogICAgICAgICB0YWcgPSBwcmVkaWNhdGVbMF0KICAgICAgICAgdmFsdWUgPSBwcmVkaWNhdGVbLTFdCkBAIC0xOTgsNyArMTk2LDEwIEBACiAgICAgaWYgc2lnbmF0dXJlID09ICItIiBvciBzaWduYXR1cmUgPT0gIi0oKSIgb3Igc2lnbmF0dXJlID09ICItKCktIjoKICAgICAgICAgIyBbaW5kZXhdIG9yIFtsYXN0KCldIG9yIFtsYXN0KCktaW5kZXhdCiAgICAgICAgIGlmIHNpZ25hdHVyZSA9PSAiLSI6CisgICAgICAgICAgICAjIFtpbmRleF0KICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVswXSkgLSAxCisgICAgICAgICAgICBpZiBpbmRleCA8IDA6CisgICAgICAgICAgICAgICAgcmFpc2UgU3ludGF4RXJyb3IoIlhQYXRoIHBvc2l0aW9uID49IDEgZXhwZWN0ZWQiKQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgaWYgcHJlZGljYXRlWzBdICE9ICJsYXN0IjoKICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigidW5zdXBwb3J0ZWQgZnVuY3Rpb24iKQpAQCAtMjA3LDYgKzIwOCw4IEBACiAgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaW50KHByZWRpY2F0ZVsyXSkgLSAxCiAgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlIFN5bnRheEVycm9yKCJ1bnN1cHBvcnRlZCBleHByZXNzaW9uIikKKyAgICAgICAgICAgICAgICBpZiBpbmRleCA+IC0yOgorICAgICAgICAgICAgICAgICAgICByYWlzZSBTeW50YXhFcnJvcigiWFBhdGggb2Zmc2V0IGZyb20gbGFzdCgpIG11c3QgYmUgbmVnYXRpdmUiKQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICBpbmRleCA9IC0xCiAgICAgICAgIGRlZiBzZWxlY3QoY29udGV4dCwgcmVzdWx0KToKZGlmZiAtLWdpdCBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkgYi9MaWIveG1sL2V0cmVlL0VsZW1lbnRUcmVlLnB5CmluZGV4IGE4ZTU3MjkuLjVhMDliMzUgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvZXRyZWUvRWxlbWVudFRyZWUucHkKKysrIGIvTGliL3htbC9ldHJlZS9FbGVtZW50VHJlZS5weQpAQCAtMSwyOCArMSw0NyBAQAorIiIiTGlnaHR3ZWlnaHQgWE1MIHN1cHBvcnQgZm9yIFB5dGhvbi4KKworIFhNTCBpcyBhbiBpbmhlcmVudGx5IGhpZXJhcmNoaWNhbCBkYXRhIGZvcm1hdCwgYW5kIHRoZSBtb3N0IG5hdHVyYWwgd2F5IHRvCisgcmVwcmVzZW50IGl0IGlzIHdpdGggYSB0cmVlLiAgVGhpcyBtb2R1bGUgaGFzIHR3byBjbGFzc2VzIGZvciB0aGlzIHB1cnBvc2U6CisKKyAgICAxLiBFbGVtZW50VHJlZSByZXByZXNlbnRzIHRoZSB3aG9sZSBYTUwgZG9jdW1lbnQgYXMgYSB0cmVlIGFuZAorCisgICAgMi4gRWxlbWVudCByZXByZXNlbnRzIGEgc2luZ2xlIG5vZGUgaW4gdGhpcyB0cmVlLgorCisgSW50ZXJhY3Rpb25zIHdpdGggdGhlIHdob2xlIGRvY3VtZW50IChyZWFkaW5nIGFuZCB3cml0aW5nIHRvL2Zyb20gZmlsZXMpIGFyZQorIHVzdWFsbHkgZG9uZSBvbiB0aGUgRWxlbWVudFRyZWUgbGV2ZWwuICBJbnRlcmFjdGlvbnMgd2l0aCBhIHNpbmdsZSBYTUwgZWxlbWVudAorIGFuZCBpdHMgc3ViLWVsZW1lbnRzIGFyZSBkb25lIG9uIHRoZSBFbGVtZW50IGxldmVsLgorCisgRWxlbWVudCBpcyBhIGZsZXhpYmxlIGNvbnRhaW5lciBvYmplY3QgZGVzaWduZWQgdG8gc3RvcmUgaGllcmFyY2hpY2FsIGRhdGEKKyBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gSXQgY2FuIGJlIGRlc2NyaWJlZCBhcyBhIGNyb3NzIGJldHdlZW4gYSBsaXN0IGFuZCBhCisgZGljdGlvbmFyeS4gIEVhY2ggRWxlbWVudCBoYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyBhc3NvY2lhdGVkIHdpdGggaXQ6CisKKyAgICAndGFnJyAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyBuYW1lLgorCisgICAgJ2F0dHJpYnV0ZXMnIC0gYSBQeXRob24gZGljdGlvbmFyeSBzdG9yaW5nIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4KKworICAgICd0ZXh0JyAtIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQncyB0ZXh0IGNvbnRlbnQuCisKKyAgICAndGFpbCcgLSBhbiBvcHRpb25hbCBzdHJpbmcgY29udGFpbmluZyB0ZXh0IGFmdGVyIHRoZSBlbGVtZW50J3MgZW5kIHRhZy4KKworICAgIEFuZCBhIG51bWJlciBvZiBjaGlsZCBlbGVtZW50cyBzdG9yZWQgaW4gYSBQeXRob24gc2VxdWVuY2UuCisKKyBUbyBjcmVhdGUgYW4gZWxlbWVudCBpbnN0YW5jZSwgdXNlIHRoZSBFbGVtZW50IGNvbnN0cnVjdG9yLAorIG9yIHRoZSBTdWJFbGVtZW50IGZhY3RvcnkgZnVuY3Rpb24uCisKKyBZb3UgY2FuIGFsc28gdXNlIHRoZSBFbGVtZW50VHJlZSBjbGFzcyB0byB3cmFwIGFuIGVsZW1lbnQgc3RydWN0dXJlCisgYW5kIGNvbnZlcnQgaXQgdG8gYW5kIGZyb20gWE1MLgorCisiIiIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBMaWNlbnNlZCB0byBQU0YgdW5kZXIgYSBDb250cmlidXRvciBBZ3JlZW1lbnQuCisjIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogIwogIyBFbGVtZW50VHJlZQotIyAkSWQ6IEVsZW1lbnRUcmVlLnB5IDM0NDAgMjAwOC0wNy0xOCAxNDo0NTowMVogZnJlZHJpayAkCi0jCi0jIGxpZ2h0LXdlaWdodCBYTUwgc3VwcG9ydCBmb3IgUHl0aG9uIDIuMyBhbmQgbGF0ZXIuCi0jCi0jIGhpc3RvcnkgKHNpbmNlIDEuMi42KToKLSMgMjAwNS0xMS0xMiBmbCAgIGFkZGVkIHRvc3RyaW5nbGlzdC9mcm9tc3RyaW5nbGlzdCBoZWxwZXJzCi0jIDIwMDYtMDctMDUgZmwgICBtZXJnZWQgaW4gc2VsZWN0ZWQgY2hhbmdlcyBmcm9tIHRoZSAxLjMgc2FuZGJveAotIyAyMDA2LTA3LTA1IGZsICAgcmVtb3ZlZCBzdXBwb3J0IGZvciAyLjEgYW5kIGVhcmxpZXIKLSMgMjAwNy0wNi0yMSBmbCAgIGFkZGVkIGRlcHJlY2F0aW9uL2Z1dHVyZSB3YXJuaW5ncwotIyAyMDA3LTA4LTI1IGZsICAgYWRkZWQgZG9jdHlwZSBob29rLCBhZGRlZCBwYXJzZXIgdmVyc2lvbiBhdHRyaWJ1dGUgZXRjCi0jIDIwMDctMDgtMjYgZmwgICBhZGRlZCBuZXcgc2VyaWFsaXplciBjb2RlIChiZXR0ZXIgbmFtZXNwYWNlIGhhbmRsaW5nLCBldGMpCi0jIDIwMDctMDgtMjcgZmwgICB3YXJuIGZvciBicm9rZW4gL3RhZyBzZWFyY2hlcyBvbiB0cmVlIGxldmVsCi0jIDIwMDctMDktMDIgZmwgICBhZGRlZCBodG1sL3RleHQgbWV0aG9kcyB0byBzZXJpYWxpemVyIChleHBlcmltZW50YWwpCi0jIDIwMDctMDktMDUgZmwgICBhZGRlZCBtZXRob2QgYXJndW1lbnQgdG8gdG9zdHJpbmcvdG9zdHJpbmdsaXN0Ci0jIDIwMDctMDktMDYgZmwgICBpbXByb3ZlZCBlcnJvciBoYW5kbGluZwotIyAyMDA3LTA5LTEzIGZsICAgYWRkZWQgaXRlcnRleHQsIGl0ZXJmaW5kOyBhc3NvcnRlZCBjbGVhbnVwcwotIyAyMDA3LTEyLTE1IGZsICAgYWRkZWQgQzE0TiBob29rcywgY29weSBtZXRob2QgKGV4cGVyaW1lbnRhbCkKLSMKICMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDggYnkgRnJlZHJpayBMdW5kaC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIGZyZWRyaWtAcHl0aG9ud2FyZS5jb20KICMgaHR0cDovL3d3dy5weXRob253YXJlLmNvbQotIwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBUaGUgRWxlbWVudFRyZWUgdG9vbGtpdCBpcwogIwpAQCAtNTEsOSArNzAsNiBAQAogIyBPRiBUSElTIFNPRlRXQVJFLgogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KLSMgU2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvbGljZW5zZSBmb3IgbGljZW5zaW5nIGRldGFpbHMuCi0KIF9fYWxsX18gPSBbCiAgICAgIyBwdWJsaWMgc3ltYm9scwogICAgICJDb21tZW50IiwKQEAgLTY5LDM0ICs4NSwxMiBAQAogICAgICJUcmVlQnVpbGRlciIsCiAgICAgIlZFUlNJT04iLAogICAgICJYTUwiLCAiWE1MSUQiLAotICAgICJYTUxQYXJzZXIiLCAiWE1MVHJlZUJ1aWxkZXIiLAorICAgICJYTUxQYXJzZXIiLAogICAgICJyZWdpc3Rlcl9uYW1lc3BhY2UiLAogICAgIF0KIAogVkVSU0lPTiA9ICIxLjMuMCIKIAotIyMKLSMgVGhlIDxiPkVsZW1lbnQ8L2I+IHR5cGUgaXMgYSBmbGV4aWJsZSBjb250YWluZXIgb2JqZWN0LCBkZXNpZ25lZCB0bwotIyBzdG9yZSBoaWVyYXJjaGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGluIG1lbW9yeS4gVGhlIHR5cGUgY2FuIGJlCi0jIGRlc2NyaWJlZCBhcyBhIGNyb3NzIGJldHdlZW4gYSBsaXN0IGFuZCBhIGRpY3Rpb25hcnkuCi0jIDxwPgotIyBFYWNoIGVsZW1lbnQgaGFzIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgYXNzb2NpYXRlZCB3aXRoIGl0OgotIyA8dWw+Ci0jIDxsaT5hIDxpPnRhZzwvaT4uIFRoaXMgaXMgYSBzdHJpbmcgaWRlbnRpZnlpbmcgd2hhdCBraW5kIG9mIGRhdGEKLSMgdGhpcyBlbGVtZW50IHJlcHJlc2VudHMgKHRoZSBlbGVtZW50IHR5cGUsIGluIG90aGVyIHdvcmRzKS48L2xpPgotIyA8bGk+YSBudW1iZXIgb2YgPGk+YXR0cmlidXRlczwvaT4sIHN0b3JlZCBpbiBhIFB5dGhvbiBkaWN0aW9uYXJ5LjwvbGk+Ci0jIDxsaT5hIDxpPnRleHQ8L2k+IHN0cmluZy48L2xpPgotIyA8bGk+YW4gb3B0aW9uYWwgPGk+dGFpbDwvaT4gc3RyaW5nLjwvbGk+Ci0jIDxsaT5hIG51bWJlciBvZiA8aT5jaGlsZCBlbGVtZW50czwvaT4sIHN0b3JlZCBpbiBhIFB5dGhvbiBzZXF1ZW5jZTwvbGk+Ci0jIDwvdWw+Ci0jCi0jIFRvIGNyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlLCB1c2UgdGhlIHtAbGluayAjRWxlbWVudH0gY29uc3RydWN0b3IKLSMgb3IgdGhlIHtAbGluayAjU3ViRWxlbWVudH0gZmFjdG9yeSBmdW5jdGlvbi4KLSMgPHA+Ci0jIFRoZSB7QGxpbmsgI0VsZW1lbnRUcmVlfSBjbGFzcyBjYW4gYmUgdXNlZCB0byB3cmFwIGFuIGVsZW1lbnQKLSMgc3RydWN0dXJlLCBhbmQgY29udmVydCBpdCBmcm9tIGFuZCB0byBYTUwuCi0jIwotCiBpbXBvcnQgc3lzCiBpbXBvcnQgcmUKIGltcG9ydCB3YXJuaW5ncwpAQCAtMTA2LDgxICsxMDAsNjggQEAKIGZyb20gLiBpbXBvcnQgRWxlbWVudFBhdGgKIAogCi0jIwotIyBQYXJzZXIgZXJyb3IuICBUaGlzIGlzIGEgc3ViY2xhc3Mgb2YgPGI+U3ludGF4RXJyb3I8L2I+LgotIyA8cD4KLSMgSW4gYWRkaXRpb24gdG8gdGhlIGV4Y2VwdGlvbiB2YWx1ZSwgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGNvbnRhaW5zIGEKLSMgc3BlY2lmaWMgZXhjZXB0aW9uIGNvZGUgaW4gdGhlIDxiPmNvZGU8L2I+IGF0dHJpYnV0ZSwgYW5kIHRoZSBsaW5lIGFuZAotIyBjb2x1bW4gb2YgdGhlIGVycm9yIGluIHRoZSA8Yj5wb3NpdGlvbjwvYj4gYXR0cmlidXRlLgotCiBjbGFzcyBQYXJzZUVycm9yKFN5bnRheEVycm9yKToKKyAgICAiIiJBbiBlcnJvciB3aGVuIHBhcnNpbmcgYW4gWE1MIGRvY3VtZW50LgorCisgICAgSW4gYWRkaXRpb24gdG8gaXRzIGV4Y2VwdGlvbiB2YWx1ZSwgYSBQYXJzZUVycm9yIGNvbnRhaW5zCisgICAgdHdvIGV4dHJhIGF0dHJpYnV0ZXM6CisgICAgICAgICdjb2RlJyAgICAgLSB0aGUgc3BlY2lmaWMgZXhjZXB0aW9uIGNvZGUKKyAgICAgICAgJ3Bvc2l0aW9uJyAtIHRoZSBsaW5lIGFuZCBjb2x1bW4gb2YgdGhlIGVycm9yCisKKyAgICAiIiIKICAgICBwYXNzCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgQ2hlY2tzIGlmIGFuIG9iamVjdCBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgZWxlbWVudCBvYmplY3QuCi0jCi0jIEBwYXJhbSBBbiBlbGVtZW50IGluc3RhbmNlLgotIyBAcmV0dXJuIEEgdHJ1ZSB2YWx1ZSBpZiB0aGlzIGlzIGFuIGVsZW1lbnQgb2JqZWN0LgotIyBAZGVmcmV0dXJuIGZsYWcKIAogZGVmIGlzZWxlbWVudChlbGVtZW50KToKLSAgICAjIEZJWE1FOiBub3Qgc3VyZSBhYm91dCB0aGlzOwotICAgICMgaXNpbnN0YW5jZShlbGVtZW50LCBFbGVtZW50KSBvciBsb29rIGZvciB0YWcvYXR0cmliL3RleHQgYXR0cmlidXRlcworICAgICIiIlJldHVybiBUcnVlIGlmICplbGVtZW50KiBhcHBlYXJzIHRvIGJlIGFuIEVsZW1lbnQuIiIiCiAgICAgcmV0dXJuIGhhc2F0dHIoZWxlbWVudCwgJ3RhZycpCiAKLSMjCi0jIEVsZW1lbnQgY2xhc3MuICBUaGlzIGNsYXNzIGRlZmluZXMgdGhlIEVsZW1lbnQgaW50ZXJmYWNlLCBhbmQKLSMgcHJvdmlkZXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBpbnRlcmZhY2UuCi0jIDxwPgotIyBUaGUgZWxlbWVudCBuYW1lLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZQotIyBlaXRoZXIgQVNDSUkgc3RyaW5ncyAob3JkaW5hcnkgUHl0aG9uIHN0cmluZ3MgY29udGFpbmluZyBvbmx5IDctYml0Ci0jIEFTQ0lJIGNoYXJhY3RlcnMpIG9yIFVuaWNvZGUgc3RyaW5ncy4KLSMKLSMgQHBhcmFtIHRhZyBUaGUgZWxlbWVudCBuYW1lLgotIyBAcGFyYW0gYXR0cmliIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgotIyBAcGFyYW0gKipleHRyYSBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgotIyBAc2VlIEVsZW1lbnQKLSMgQHNlZSBTdWJFbGVtZW50Ci0jIEBzZWUgQ29tbWVudAotIyBAc2VlIFByb2Nlc3NpbmdJbnN0cnVjdGlvbgogCiBjbGFzcyBFbGVtZW50OgotICAgICMgPHRhZyBhdHRyaWI+dGV4dDxjaGlsZC8+Li4uPC90YWc+dGFpbAorICAgICIiIkFuIFhNTCBlbGVtZW50LgogCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIEVsZW1lbnQgdGFnLgorICAgIFRoaXMgY2xhc3MgaXMgdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRWxlbWVudCBpbnRlcmZhY2UuCisKKyAgICBBbiBlbGVtZW50J3MgbGVuZ3RoIGlzIGl0cyBudW1iZXIgb2Ygc3ViZWxlbWVudHMuICBUaGF0IG1lYW5zIGlmIHlvdQorICAgIHdhbnQgdG8gY2hlY2sgaWYgYW4gZWxlbWVudCBpcyB0cnVseSBlbXB0eSwgeW91IHNob3VsZCBjaGVjayBCT1RICisgICAgaXRzIGxlbmd0aCBBTkQgaXRzIHRleHQgYXR0cmlidXRlLgorCisgICAgVGhlIGVsZW1lbnQgdGFnLCBhdHRyaWJ1dGUgbmFtZXMsIGFuZCBhdHRyaWJ1dGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIKKyAgICBieXRlcyBvciBzdHJpbmdzLgorCisgICAgKnRhZyogaXMgdGhlIGVsZW1lbnQgbmFtZS4gICphdHRyaWIqIGlzIGFuIG9wdGlvbmFsIGRpY3Rpb25hcnkgY29udGFpbmluZworICAgIGVsZW1lbnQgYXR0cmlidXRlcy4gKmV4dHJhKiBhcmUgYWRkaXRpb25hbCBlbGVtZW50IGF0dHJpYnV0ZXMgZ2l2ZW4gYXMKKyAgICBrZXl3b3JkIGFyZ3VtZW50cy4KKworICAgIEV4YW1wbGUgZm9ybToKKyAgICAgICAgPHRhZyBhdHRyaWI+dGV4dDxjaGlsZC8+Li4uPC90YWc+dGFpbAorCisgICAgIiIiCiAKICAgICB0YWcgPSBOb25lCi0KLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgRWxlbWVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeS4gIFdoZXJlIHBvc3NpYmxlLCB1c2UKLSAgICAjIHtAbGluayAjRWxlbWVudC5nZXR9LAotICAgICMge0BsaW5rICNFbGVtZW50LnNldH0sCi0gICAgIyB7QGxpbmsgI0VsZW1lbnQua2V5c30sIGFuZAotICAgICMge0BsaW5rICNFbGVtZW50Lml0ZW1zfSB0byBhY2Nlc3MKLSAgICAjIGVsZW1lbnQgYXR0cmlidXRlcy4KKyAgICAiIiJUaGUgZWxlbWVudCdzIG5hbWUuIiIiCiAKICAgICBhdHRyaWIgPSBOb25lCi0KLSAgICAjIwotICAgICMgKEF0dHJpYnV0ZSkgVGV4dCBiZWZvcmUgZmlyc3Qgc3ViZWxlbWVudC4gIFRoaXMgaXMgZWl0aGVyIGEKLSAgICAjIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZSB3YXMgbm8gdGV4dCwgdGhpcwotICAgICMgYXR0cmlidXRlIG1heSBiZSBlaXRoZXIgTm9uZSBvciBhbiBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbgotICAgICMgdGhlIHBhcnNlci4KKyAgICAiIiJEaWN0aW9uYXJ5IG9mIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcy4iIiIKIAogICAgIHRleHQgPSBOb25lCisgICAgIiIiCisgICAgVGV4dCBiZWZvcmUgZmlyc3Qgc3ViZWxlbWVudC4gVGhpcyBpcyBlaXRoZXIgYSBzdHJpbmcgb3IgdGhlIHZhbHVlIE5vbmUuCisgICAgTm90ZSB0aGF0IGlmIHRoZXJlIGlzIG5vIHRleHQsIHRoaXMgYXR0cmlidXRlIG1heSBiZSBlaXRoZXIKKyAgICBOb25lIG9yIHRoZSBlbXB0eSBzdHJpbmcsIGRlcGVuZGluZyBvbiB0aGUgcGFyc2VyLgogCi0gICAgIyMKLSAgICAjIChBdHRyaWJ1dGUpIFRleHQgYWZ0ZXIgdGhpcyBlbGVtZW50J3MgZW5kIHRhZywgYnV0IGJlZm9yZSB0aGUKLSAgICAjIG5leHQgc2libGluZyBlbGVtZW50J3Mgc3RhcnQgdGFnLiAgVGhpcyBpcyBlaXRoZXIgYSBzdHJpbmcgb3IKLSAgICAjIHRoZSB2YWx1ZSBOb25lLiAgTm90ZSB0aGF0IGlmIHRoZXJlIHdhcyBubyB0ZXh0LCB0aGlzIGF0dHJpYnV0ZQotICAgICMgbWF5IGJlIGVpdGhlciBOb25lIG9yIGFuIGVtcHR5IHN0cmluZywgZGVwZW5kaW5nIG9uIHRoZSBwYXJzZXIuCisgICAgIiIiCiAKLSAgICB0YWlsID0gTm9uZSAjIHRleHQgYWZ0ZXIgZW5kIHRhZywgaWYgYW55CisgICAgdGFpbCA9IE5vbmUKKyAgICAiIiIKKyAgICBUZXh0IGFmdGVyIHRoaXMgZWxlbWVudCdzIGVuZCB0YWcsIGJ1dCBiZWZvcmUgdGhlIG5leHQgc2libGluZyBlbGVtZW50J3MKKyAgICBzdGFydCB0YWcuICBUaGlzIGlzIGVpdGhlciBhIHN0cmluZyBvciB0aGUgdmFsdWUgTm9uZS4gIE5vdGUgdGhhdCBpZiB0aGVyZQorICAgIHdhcyBubyB0ZXh0LCB0aGlzIGF0dHJpYnV0ZSBtYXkgYmUgZWl0aGVyIE5vbmUgb3IgYW4gZW1wdHkgc3RyaW5nLAorICAgIGRlcGVuZGluZyBvbiB0aGUgcGFyc2VyLgogCi0gICAgIyBjb25zdHJ1Y3RvcgorICAgICIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKToKICAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoYXR0cmliLCBkaWN0KToKQEAgLTE5NSwzNiArMTc2LDMwIEBACiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gIjxFbGVtZW50ICVzIGF0IDB4JXg+IiAlIChyZXByKHNlbGYudGFnKSwgaWQoc2VsZikpCiAKLSAgICAjIwotICAgICMgQ3JlYXRlcyBhIG5ldyBlbGVtZW50IG9iamVjdCBvZiB0aGUgc2FtZSB0eXBlIGFzIHRoaXMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIEVsZW1lbnQgdGFnLgotICAgICMgQHBhcmFtIGF0dHJpYiBFbGVtZW50IGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGEgZGljdGlvbmFyeS4KLSAgICAjIEByZXR1cm4gQSBuZXcgZWxlbWVudCBpbnN0YW5jZS4KLQogICAgIGRlZiBtYWtlZWxlbWVudChzZWxmLCB0YWcsIGF0dHJpYik6CisgICAgICAgICIiIkNyZWF0ZSBhIG5ldyBlbGVtZW50IHdpdGggdGhlIHNhbWUgdHlwZS4KKworICAgICAgICAqdGFnKiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBlbGVtZW50IG5hbWUuCisgICAgICAgICphdHRyaWIqIGlzIGEgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBlbGVtZW50IGF0dHJpYnV0ZXMuCisKKyAgICAgICAgRG8gbm90IGNhbGwgdGhpcyBtZXRob2QsIHVzZSB0aGUgU3ViRWxlbWVudCBmYWN0b3J5IGZ1bmN0aW9uIGluc3RlYWQuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXyh0YWcsIGF0dHJpYikKIAotICAgICMjCi0gICAgIyAoRXhwZXJpbWVudGFsKSBDb3BpZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4gIFRoaXMgY3JlYXRlcyBhCi0gICAgIyBzaGFsbG93IGNvcHk7IHN1YmVsZW1lbnRzIHdpbGwgYmUgc2hhcmVkIHdpdGggdGhlIG9yaWdpbmFsIHRyZWUuCi0gICAgIwotICAgICMgQHJldHVybiBBIG5ldyBlbGVtZW50IGluc3RhbmNlLgotCiAgICAgZGVmIGNvcHkoc2VsZik6CisgICAgICAgICIiIlJldHVybiBjb3B5IG9mIGN1cnJlbnQgZWxlbWVudC4KKworICAgICAgICBUaGlzIGNyZWF0ZXMgYSBzaGFsbG93IGNvcHkuIFN1YmVsZW1lbnRzIHdpbGwgYmUgc2hhcmVkIHdpdGggdGhlCisgICAgICAgIG9yaWdpbmFsIHRyZWUuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGVsZW0gPSBzZWxmLm1ha2VlbGVtZW50KHNlbGYudGFnLCBzZWxmLmF0dHJpYikKICAgICAgICAgZWxlbS50ZXh0ID0gc2VsZi50ZXh0CiAgICAgICAgIGVsZW0udGFpbCA9IHNlbGYudGFpbAogICAgICAgICBlbGVtWzpdID0gc2VsZgogICAgICAgICByZXR1cm4gZWxlbQogCi0gICAgIyMKLSAgICAjIFJldHVybnMgdGhlIG51bWJlciBvZiBzdWJlbGVtZW50cy4gIE5vdGUgdGhhdCB0aGlzIG9ubHkgY291bnRzCi0gICAgIyBmdWxsIGVsZW1lbnRzOyB0byBjaGVjayBpZiB0aGVyZSdzIGFueSBjb250ZW50IGluIGFuIGVsZW1lbnQsIHlvdQotICAgICMgaGF2ZSB0byBjaGVjayBib3RoIHRoZSBsZW5ndGggYW5kIHRoZSA8Yj50ZXh0PC9iPiBhdHRyaWJ1dGUuCi0gICAgIwotICAgICMgQHJldHVybiBUaGUgbnVtYmVyIG9mIHN1YmVsZW1lbnRzLgotCiAgICAgZGVmIF9fbGVuX18oc2VsZik6CiAgICAgICAgIHJldHVybiBsZW4oc2VsZi5fY2hpbGRyZW4pCiAKQEAgLTIzNiwyMyArMjExLDkgQEAKICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLl9jaGlsZHJlbikgIT0gMCAjIGVtdWxhdGUgb2xkIGJlaGF2aW91ciwgZm9yIG5vdwogCi0gICAgIyMKLSAgICAjIFJldHVybnMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gcmV0dXJuLgotICAgICMgQHJldHVybiBUaGUgZ2l2ZW4gc3ViZWxlbWVudC4KLSAgICAjIEBleGNlcHRpb24gSW5kZXhFcnJvciBJZiB0aGUgZ2l2ZW4gZWxlbWVudCBkb2VzIG5vdCBleGlzdC4KLQogICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpbmRleCk6CiAgICAgICAgIHJldHVybiBzZWxmLl9jaGlsZHJlbltpbmRleF0KIAotICAgICMjCi0gICAgIyBSZXBsYWNlcyB0aGUgZ2l2ZW4gc3ViZWxlbWVudCwgYnkgaW5kZXguCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoYXQgc3ViZWxlbWVudCB0byByZXBsYWNlLgotICAgICMgQHBhcmFtIGVsZW1lbnQgVGhlIG5ldyBlbGVtZW50IHZhbHVlLgotICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgotCiAgICAgZGVmIF9fc2V0aXRlbV9fKHNlbGYsIGluZGV4LCBlbGVtZW50KToKICAgICAgICAgIyBpZiBpc2luc3RhbmNlKGluZGV4LCBzbGljZSk6CiAgICAgICAgICMgICAgIGZvciBlbHQgaW4gZWxlbWVudDoKQEAgLTI2MSw3NiArMjIyLDYyIEBACiAgICAgICAgICMgICAgIGFzc2VydCBpc2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW5baW5kZXhdID0gZWxlbWVudAogCi0gICAgIyMKLSAgICAjIERlbGV0ZXMgdGhlIGdpdmVuIHN1YmVsZW1lbnQsIGJ5IGluZGV4LgotICAgICMKLSAgICAjIEBwYXJhbSBpbmRleCBXaGF0IHN1YmVsZW1lbnQgdG8gZGVsZXRlLgotICAgICMgQGV4Y2VwdGlvbiBJbmRleEVycm9yIElmIHRoZSBnaXZlbiBlbGVtZW50IGRvZXMgbm90IGV4aXN0LgotCiAgICAgZGVmIF9fZGVsaXRlbV9fKHNlbGYsIGluZGV4KToKICAgICAgICAgZGVsIHNlbGYuX2NoaWxkcmVuW2luZGV4XQogCi0gICAgIyMKLSAgICAjIEFkZHMgYSBzdWJlbGVtZW50IHRvIHRoZSBlbmQgb2YgdGhpcyBlbGVtZW50LiAgSW4gZG9jdW1lbnQgb3JkZXIsCi0gICAgIyB0aGUgbmV3IGVsZW1lbnQgd2lsbCBhcHBlYXIgYWZ0ZXIgdGhlIGxhc3QgZXhpc3Rpbmcgc3ViZWxlbWVudCAob3IKLSAgICAjIGRpcmVjdGx5IGFmdGVyIHRoZSB0ZXh0LCBpZiBpdCdzIHRoZSBmaXJzdCBzdWJlbGVtZW50KSwgYnV0IGJlZm9yZQotICAgICMgdGhlIGVuZCB0YWcgZm9yIHRoaXMgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBhZGQuCisgICAgZGVmIGFwcGVuZChzZWxmLCBzdWJlbGVtZW50KToKKyAgICAgICAgIiIiQWRkICpzdWJlbGVtZW50KiB0byB0aGUgZW5kIG9mIHRoaXMgZWxlbWVudC4KIAotICAgIGRlZiBhcHBlbmQoc2VsZiwgZWxlbWVudCk6Ci0gICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KGVsZW1lbnQpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuLmFwcGVuZChlbGVtZW50KQorICAgICAgICBUaGUgbmV3IGVsZW1lbnQgd2lsbCBhcHBlYXIgaW4gZG9jdW1lbnQgb3JkZXIgYWZ0ZXIgdGhlIGxhc3QgZXhpc3RpbmcKKyAgICAgICAgc3ViZWxlbWVudCAob3IgZGlyZWN0bHkgYWZ0ZXIgdGhlIHRleHQsIGlmIGl0J3MgdGhlIGZpcnN0IHN1YmVsZW1lbnQpLAorICAgICAgICBidXQgYmVmb3JlIHRoZSBlbmQgdGFnIGZvciB0aGlzIGVsZW1lbnQuCiAKLSAgICAjIwotICAgICMgQXBwZW5kcyBzdWJlbGVtZW50cyBmcm9tIGEgc2VxdWVuY2UuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnRzIEEgc2VxdWVuY2Ugb2JqZWN0IHdpdGggemVybyBvciBtb3JlIGVsZW1lbnRzLgotICAgICMgQHNpbmNlIDEuMworICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoc3ViZWxlbWVudCkKKyAgICAgICAgc2VsZi5fY2hpbGRyZW4uYXBwZW5kKHN1YmVsZW1lbnQpCiAKICAgICBkZWYgZXh0ZW5kKHNlbGYsIGVsZW1lbnRzKToKKyAgICAgICAgIiIiQXBwZW5kIHN1YmVsZW1lbnRzIGZyb20gYSBzZXF1ZW5jZS4KKworICAgICAgICAqZWxlbWVudHMqIGlzIGEgc2VxdWVuY2Ugd2l0aCB6ZXJvIG9yIG1vcmUgZWxlbWVudHMuCisKKyAgICAgICAgIiIiCiAgICAgICAgIGZvciBlbGVtZW50IGluIGVsZW1lbnRzOgogICAgICAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoZWxlbWVudCkKICAgICAgICAgc2VsZi5fY2hpbGRyZW4uZXh0ZW5kKGVsZW1lbnRzKQogCi0gICAgIyMKLSAgICAjIEluc2VydHMgYSBzdWJlbGVtZW50IGF0IHRoZSBnaXZlbiBwb3NpdGlvbiBpbiB0aGlzIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGluZGV4IFdoZXJlIHRvIGluc2VydCB0aGUgbmV3IHN1YmVsZW1lbnQuCi0KLSAgICBkZWYgaW5zZXJ0KHNlbGYsIGluZGV4LCBlbGVtZW50KToKLSAgICAgICAgc2VsZi5fYXNzZXJ0X2lzX2VsZW1lbnQoZWxlbWVudCkKLSAgICAgICAgc2VsZi5fY2hpbGRyZW4uaW5zZXJ0KGluZGV4LCBlbGVtZW50KQorICAgIGRlZiBpbnNlcnQoc2VsZiwgaW5kZXgsIHN1YmVsZW1lbnQpOgorICAgICAgICAiIiJJbnNlcnQgKnN1YmVsZW1lbnQqIGF0IHBvc2l0aW9uICppbmRleCouIiIiCisgICAgICAgIHNlbGYuX2Fzc2VydF9pc19lbGVtZW50KHN1YmVsZW1lbnQpCisgICAgICAgIHNlbGYuX2NoaWxkcmVuLmluc2VydChpbmRleCwgc3ViZWxlbWVudCkKIAogICAgIGRlZiBfYXNzZXJ0X2lzX2VsZW1lbnQoc2VsZiwgZSk6CiAgICAgICAgICMgTmVlZCB0byByZWZlciB0byB0aGUgYWN0dWFsIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiwgbm90IHRoZQogICAgICAgICAjIHNoYWRvd2luZyBDIGltcGxlbWVudGF0aW9uLgotICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShlLCBfRWxlbWVudCk6CisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGUsIF9FbGVtZW50X1B5KToKICAgICAgICAgICAgIHJhaXNlIFR5cGVFcnJvcignZXhwZWN0ZWQgYW4gRWxlbWVudCwgbm90ICVzJyAlIHR5cGUoZSkuX19uYW1lX18pCiAKLSAgICAjIwotICAgICMgUmVtb3ZlcyBhIG1hdGNoaW5nIHN1YmVsZW1lbnQuICBVbmxpa2UgdGhlIDxiPmZpbmQ8L2I+IG1ldGhvZHMsCi0gICAgIyB0aGlzIG1ldGhvZCBjb21wYXJlcyBlbGVtZW50cyBiYXNlZCBvbiBpZGVudGl0eSwgbm90IG9uIHRhZwotICAgICMgdmFsdWUgb3IgY29udGVudHMuICBUbyByZW1vdmUgc3ViZWxlbWVudHMgYnkgb3RoZXIgbWVhbnMsIHRoZQotICAgICMgZWFzaWVzdCB3YXkgaXMgb2Z0ZW4gdG8gdXNlIGEgbGlzdCBjb21wcmVoZW5zaW9uIHRvIHNlbGVjdCB3aGF0Ci0gICAgIyBlbGVtZW50cyB0byBrZWVwLCBhbmQgdXNlIHNsaWNlIGFzc2lnbm1lbnQgdG8gdXBkYXRlIHRoZSBwYXJlbnQKLSAgICAjIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHBhcmFtIGVsZW1lbnQgV2hhdCBlbGVtZW50IHRvIHJlbW92ZS4KLSAgICAjIEBleGNlcHRpb24gVmFsdWVFcnJvciBJZiBhIG1hdGNoaW5nIGVsZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLgorICAgIGRlZiByZW1vdmUoc2VsZiwgc3ViZWxlbWVudCk6CisgICAgICAgICIiIlJlbW92ZSBtYXRjaGluZyBzdWJlbGVtZW50LgogCi0gICAgZGVmIHJlbW92ZShzZWxmLCBlbGVtZW50KToKKyAgICAgICAgVW5saWtlIHRoZSBmaW5kIG1ldGhvZHMsIHRoaXMgbWV0aG9kIGNvbXBhcmVzIGVsZW1lbnRzIGJhc2VkIG9uCisgICAgICAgIGlkZW50aXR5LCBOT1QgT04gdGFnIHZhbHVlIG9yIGNvbnRlbnRzLiAgVG8gcmVtb3ZlIHN1YmVsZW1lbnRzIGJ5CisgICAgICAgIG90aGVyIG1lYW5zLCB0aGUgZWFzaWVzdCB3YXkgaXMgdG8gdXNlIGEgbGlzdCBjb21wcmVoZW5zaW9uIHRvCisgICAgICAgIHNlbGVjdCB3aGF0IGVsZW1lbnRzIHRvIGtlZXAsIGFuZCB0aGVuIHVzZSBzbGljZSBhc3NpZ25tZW50IHRvIHVwZGF0ZQorICAgICAgICB0aGUgcGFyZW50IGVsZW1lbnQuCisKKyAgICAgICAgVmFsdWVFcnJvciBpcyByYWlzZWQgaWYgYSBtYXRjaGluZyBlbGVtZW50IGNvdWxkIG5vdCBiZSBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgaXNlbGVtZW50KGVsZW1lbnQpCi0gICAgICAgIHNlbGYuX2NoaWxkcmVuLnJlbW92ZShlbGVtZW50KQotCi0gICAgIyMKLSAgICAjIChEZXByZWNhdGVkKSBSZXR1cm5zIGFsbCBzdWJlbGVtZW50cy4gIFRoZSBlbGVtZW50cyBhcmUgcmV0dXJuZWQKLSAgICAjIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMKLSAgICAjIEByZXR1cm4gQSBsaXN0IG9mIHN1YmVsZW1lbnRzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCisgICAgICAgIHNlbGYuX2NoaWxkcmVuLnJlbW92ZShzdWJlbGVtZW50KQogCiAgICAgZGVmIGdldGNoaWxkcmVuKHNlbGYpOgorICAgICAgICAiIiIoRGVwcmVjYXRlZCkgUmV0dXJuIGFsbCBzdWJlbGVtZW50cy4KKworICAgICAgICBFbGVtZW50cyBhcmUgcmV0dXJuZWQgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAiVGhpcyBtZXRob2Qgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSB2ZXJzaW9ucy4gICIKICAgICAgICAgICAgICJVc2UgJ2xpc3QoZWxlbSknIG9yIGl0ZXJhdGlvbiBvdmVyIGVsZW0gaW5zdGVhZC4iLApAQCAtMzM4LDEzMSArMjg1LDEyOCBAQAogICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fY2hpbGRyZW4KIAotICAgICMjCi0gICAgIyBGaW5kcyB0aGUgZmlyc3QgbWF0Y2hpbmcgc3ViZWxlbWVudCwgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQgb3IgTm9uZQotCiAgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgKnBhdGgqIGlzIGEgc3RyaW5nIGhhdmluZyBlaXRoZXIgYW4gZWxlbWVudCB0YWcgb3IgYW4gWFBhdGgsCisgICAgICAgICpuYW1lc3BhY2VzKiBpcyBhbiBvcHRpb25hbCBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIHByZWZpeCB0byBmdWxsIG5hbWUuCisKKyAgICAgICAgUmV0dXJuIHRoZSBmaXJzdCBtYXRjaGluZyBlbGVtZW50LCBvciBOb25lIGlmIG5vIGVsZW1lbnQgd2FzIGZvdW5kLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIHRleHQgZm9yIHRoZSBmaXJzdCBtYXRjaGluZyBzdWJlbGVtZW50LCBieSB0YWcgbmFtZSBvciBwYXRoLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCi0gICAgIyAgICAgZGVmYXVsdCB2YWx1ZSBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudAotICAgICMgICAgIGlzIGZvdW5kLCBidXQgaGFzIG5vIHRleHQgY29udGVudCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbgotICAgICMgICAgIGVtcHR5IHN0cmluZy4KLSAgICAjIEBkZWZyZXR1cm4gc3RyaW5nCi0KICAgICBkZWYgZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdD1Ob25lLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIHRleHQgZm9yIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKmRlZmF1bHQqIGlzIHRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIGVsZW1lbnQgd2FzIG5vdCBmb3VuZCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGV4dCBjb250ZW50IG9mIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIGRlZmF1bHQgdmFsdWUgaWYKKyAgICAgICAgbm9uZSB3YXMgZm91bmQuICBOb3RlIHRoYXQgaWYgYW4gZWxlbWVudCBpcyBmb3VuZCBoYXZpbmcgbm8gdGV4dAorICAgICAgICBjb250ZW50LCB0aGUgZW1wdHkgc3RyaW5nIGlzIHJldHVybmVkLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybnMgbGlzdCBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cyBpbiBkb2N1bWVudCBvcmRlci4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIEVsZW1lbnRQYXRoLmZpbmRhbGwoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBGaW5kcyBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMsIGJ5IHRhZyBuYW1lIG9yIHBhdGguCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIG9yIHNlcXVlbmNlIGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzLAotICAgICMgICAgaW4gZG9jdW1lbnQgb3JkZXIuCi0gICAgIyBAZGVmcmV0dXJuIGEgZ2VuZXJhdGVkIHNlcXVlbmNlIG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBhbGwgbWF0Y2hpbmcgc3ViZWxlbWVudHMgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gYW4gaXRlcmFibGUgeWllbGRpbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gRWxlbWVudFBhdGguaXRlcmZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcykKIAotICAgICMjCi0gICAgIyBSZXNldHMgYW4gZWxlbWVudC4gIFRoaXMgZnVuY3Rpb24gcmVtb3ZlcyBhbGwgc3ViZWxlbWVudHMsIGNsZWFycwotICAgICMgYWxsIGF0dHJpYnV0ZXMsIGFuZCBzZXRzIHRoZSA8Yj50ZXh0PC9iPiBhbmQgPGI+dGFpbDwvYj4gYXR0cmlidXRlcwotICAgICMgdG8gTm9uZS4KLQogICAgIGRlZiBjbGVhcihzZWxmKToKKyAgICAgICAgIiIiUmVzZXQgZWxlbWVudC4KKworICAgICAgICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYWxsIHN1YmVsZW1lbnRzLCBjbGVhcnMgYWxsIGF0dHJpYnV0ZXMsIGFuZCBzZXRzCisgICAgICAgIHRoZSB0ZXh0IGFuZCB0YWlsIGF0dHJpYnV0ZXMgdG8gTm9uZS4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5hdHRyaWIuY2xlYXIoKQogICAgICAgICBzZWxmLl9jaGlsZHJlbiA9IFtdCiAgICAgICAgIHNlbGYudGV4dCA9IHNlbGYudGFpbCA9IE5vbmUKIAotICAgICMjCi0gICAgIyBHZXRzIGFuIGVsZW1lbnQgYXR0cmlidXRlLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIuZ2V0PC9iPiwgYnV0Ci0gICAgIyBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4KLSAgICAjCi0gICAgIyBAcGFyYW0ga2V5IFdoYXQgYXR0cmlidXRlIHRvIGxvb2sgZm9yLgotICAgICMgQHBhcmFtIGRlZmF1bHQgV2hhdCB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgotICAgICMgQHJldHVybiBUaGUgYXR0cmlidXRlIHZhbHVlLCBvciB0aGUgZGVmYXVsdCB2YWx1ZSwgaWYgdGhlCi0gICAgIyAgICAgYXR0cmlidXRlIHdhcyBub3QgZm91bmQuCi0gICAgIyBAZGVmcmV0dXJuIHN0cmluZyBvciBOb25lCi0KICAgICBkZWYgZ2V0KHNlbGYsIGtleSwgZGVmYXVsdD1Ob25lKToKKyAgICAgICAgIiIiR2V0IGVsZW1lbnQgYXR0cmlidXRlLgorCisgICAgICAgIEVxdWl2YWxlbnQgdG8gYXR0cmliLmdldCwgYnV0IHNvbWUgaW1wbGVtZW50YXRpb25zIG1heSBoYW5kbGUgdGhpcyBhCisgICAgICAgIGJpdCBtb3JlIGVmZmljaWVudGx5LiAgKmtleSogaXMgd2hhdCBhdHRyaWJ1dGUgdG8gbG9vayBmb3IsIGFuZAorICAgICAgICAqZGVmYXVsdCogaXMgd2hhdCB0byByZXR1cm4gaWYgdGhlIGF0dHJpYnV0ZSB3YXMgbm90IGZvdW5kLgorCisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgYXR0cmlidXRlIHZhbHVlLCBvciB0aGUgZGVmYXVsdCBpZgorICAgICAgICBhdHRyaWJ1dGUgd2FzIG5vdCBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgcmV0dXJuIHNlbGYuYXR0cmliLmdldChrZXksIGRlZmF1bHQpCiAKLSAgICAjIwotICAgICMgU2V0cyBhbiBlbGVtZW50IGF0dHJpYnV0ZS4gIEVxdWl2YWxlbnQgdG8gPGI+YXR0cmliW2tleV0gPSB2YWx1ZTwvYj4sCi0gICAgIyBidXQgc29tZSBpbXBsZW1lbnRhdGlvbnMgbWF5IGhhbmRsZSB0aGlzIGEgYml0IG1vcmUgZWZmaWNpZW50bHkuCi0gICAgIwotICAgICMgQHBhcmFtIGtleSBXaGF0IGF0dHJpYnV0ZSB0byBzZXQuCi0gICAgIyBAcGFyYW0gdmFsdWUgVGhlIGF0dHJpYnV0ZSB2YWx1ZS4KLQogICAgIGRlZiBzZXQoc2VsZiwga2V5LCB2YWx1ZSk6CisgICAgICAgICIiIlNldCBlbGVtZW50IGF0dHJpYnV0ZS4KKworICAgICAgICBFcXVpdmFsZW50IHRvIGF0dHJpYltrZXldID0gdmFsdWUsIGJ1dCBzb21lIGltcGxlbWVudGF0aW9ucyBtYXkgaGFuZGxlCisgICAgICAgIHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnRseS4gICprZXkqIGlzIHdoYXQgYXR0cmlidXRlIHRvIHNldCwgYW5kCisgICAgICAgICp2YWx1ZSogaXMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB0byBzZXQgaXQgdG8uCisKKyAgICAgICAgIiIiCiAgICAgICAgIHNlbGYuYXR0cmliW2tleV0gPSB2YWx1ZQogCi0gICAgIyMKLSAgICAjIEdldHMgYSBsaXN0IG9mIGF0dHJpYnV0ZSBuYW1lcy4gIFRoZSBuYW1lcyBhcmUgcmV0dXJuZWQgaW4gYW4KLSAgICAjIGFyYml0cmFyeSBvcmRlciAoanVzdCBsaWtlIGZvciBhbiBvcmRpbmFyeSBQeXRob24gZGljdGlvbmFyeSkuCi0gICAgIyBFcXVpdmFsZW50IHRvIDxiPmF0dHJpYi5rZXlzKCk8L2I+LgotICAgICMKLSAgICAjIEByZXR1cm4gQSBsaXN0IG9mIGVsZW1lbnQgYXR0cmlidXRlIG5hbWVzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIHN0cmluZ3MKLQogICAgIGRlZiBrZXlzKHNlbGYpOgorICAgICAgICAiIiJHZXQgbGlzdCBvZiBhdHRyaWJ1dGUgbmFtZXMuCisKKyAgICAgICAgTmFtZXMgYXJlIHJldHVybmVkIGluIGFuIGFyYml0cmFyeSBvcmRlciwganVzdCBsaWtlIGFuIG9yZGluYXJ5CisgICAgICAgIFB5dGhvbiBkaWN0LiAgRXF1aXZhbGVudCB0byBhdHRyaWIua2V5cygpCisKKyAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBzZWxmLmF0dHJpYi5rZXlzKCkKIAotICAgICMjCi0gICAgIyBHZXRzIGVsZW1lbnQgYXR0cmlidXRlcywgYXMgYSBzZXF1ZW5jZS4gIFRoZSBhdHRyaWJ1dGVzIGFyZQotICAgICMgcmV0dXJuZWQgaW4gYW4gYXJiaXRyYXJ5IG9yZGVyLiAgRXF1aXZhbGVudCB0byA8Yj5hdHRyaWIuaXRlbXMoKTwvYj4uCi0gICAgIwotICAgICMgQHJldHVybiBBIGxpc3Qgb2YgKG5hbWUsIHZhbHVlKSB0dXBsZXMgZm9yIGFsbCBhdHRyaWJ1dGVzLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIChzdHJpbmcsIHN0cmluZykgdHVwbGVzCi0KICAgICBkZWYgaXRlbXMoc2VsZik6CisgICAgICAgICIiIkdldCBlbGVtZW50IGF0dHJpYnV0ZXMgYXMgYSBzZXF1ZW5jZS4KKworICAgICAgICBUaGUgYXR0cmlidXRlcyBhcmUgcmV0dXJuZWQgaW4gYXJiaXRyYXJ5IG9yZGVyLiAgRXF1aXZhbGVudCB0bworICAgICAgICBhdHRyaWIuaXRlbXMoKS4KKworICAgICAgICBSZXR1cm4gYSBsaXN0IG9mIChuYW1lLCB2YWx1ZSkgdHVwbGVzLgorCisgICAgICAgICIiIgogICAgICAgICByZXR1cm4gc2VsZi5hdHRyaWIuaXRlbXMoKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSB0cmVlIGl0ZXJhdG9yLiAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhpcyBlbGVtZW50Ci0gICAgIyBhbmQgYWxsIHN1YmVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlciwgYW5kIHJldHVybnMgYWxsIGVsZW1lbnRzCi0gICAgIyB3aXRoIGEgbWF0Y2hpbmcgdGFnLgotICAgICMgPHA+Ci0gICAgIyBJZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbiwgbmV3IG9yIHJlbW92ZWQKLSAgICAjIGVsZW1lbnRzIG1heSBvciBtYXkgbm90IGJlIGluY2x1ZGVkLiAgVG8gZ2V0IGEgc3RhYmxlIHNldCwgdXNlIHRoZQotICAgICMgbGlzdCgpIGZ1bmN0aW9uIG9uIHRoZSBpdGVyYXRvciwgYW5kIGxvb3Agb3ZlciB0aGUgcmVzdWx0aW5nIGxpc3QuCi0gICAgIwotICAgICMgQHBhcmFtIHRhZyBXaGF0IHRhZ3MgdG8gbG9vayBmb3IgKGRlZmF1bHQgaXMgdG8gcmV0dXJuIGFsbCBlbGVtZW50cykuCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGluZyBlbGVtZW50cy4KLSAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKLQogICAgIGRlZiBpdGVyKHNlbGYsIHRhZz1Ob25lKToKKyAgICAgICAgIiIiQ3JlYXRlIHRyZWUgaXRlcmF0b3IuCisKKyAgICAgICAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhlIGVsZW1lbnQgYW5kIGFsbCBzdWJlbGVtZW50cyBpbiBkb2N1bWVudAorICAgICAgICBvcmRlciwgcmV0dXJuaW5nIGFsbCBlbGVtZW50cyB3aXRoIGEgbWF0Y2hpbmcgdGFnLgorCisgICAgICAgIElmIHRoZSB0cmVlIHN0cnVjdHVyZSBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLCBuZXcgb3IgcmVtb3ZlZAorICAgICAgICBlbGVtZW50cyBtYXkgb3IgbWF5IG5vdCBiZSBpbmNsdWRlZC4gIFRvIGdldCBhIHN0YWJsZSBzZXQsIHVzZSB0aGUKKyAgICAgICAgbGlzdCgpIGZ1bmN0aW9uIG9uIHRoZSBpdGVyYXRvciwgYW5kIGxvb3Agb3ZlciB0aGUgcmVzdWx0aW5nIGxpc3QuCisKKyAgICAgICAgKnRhZyogaXMgd2hhdCB0YWdzIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpCisKKyAgICAgICAgUmV0dXJuIGFuIGl0ZXJhdG9yIGNvbnRhaW5pbmcgYWxsIHRoZSBtYXRjaGluZyBlbGVtZW50cy4KKworICAgICAgICAiIiIKICAgICAgICAgaWYgdGFnID09ICIqIjoKICAgICAgICAgICAgIHRhZyA9IE5vbmUKICAgICAgICAgaWYgdGFnIGlzIE5vbmUgb3Igc2VsZi50YWcgPT0gdGFnOgogICAgICAgICAgICAgeWllbGQgc2VsZgogICAgICAgICBmb3IgZSBpbiBzZWxmLl9jaGlsZHJlbjoKLSAgICAgICAgICAgIGZvciBlIGluIGUuaXRlcih0YWcpOgotICAgICAgICAgICAgICAgIHlpZWxkIGUKKyAgICAgICAgICAgIHlpZWxkIGZyb20gZS5pdGVyKHRhZykKIAogICAgICMgY29tcGF0aWJpbGl0eQogICAgIGRlZiBnZXRpdGVyYXRvcihzZWxmLCB0YWc9Tm9uZSk6CkBAIC00NzQsNzggKzQxOCw2NyBAQAogICAgICAgICApCiAgICAgICAgIHJldHVybiBsaXN0KHNlbGYuaXRlcih0YWcpKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSB0ZXh0IGl0ZXJhdG9yLiAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhpcyBlbGVtZW50Ci0gICAgIyBhbmQgYWxsIHN1YmVsZW1lbnRzLCBpbiBkb2N1bWVudCBvcmRlciwgYW5kIHJldHVybnMgYWxsIGlubmVyCi0gICAgIyB0ZXh0LgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gaXRlcmF0b3IgY29udGFpbmluZyBhbGwgaW5uZXIgdGV4dC4KLSAgICAjIEBkZWZyZXR1cm4gaXRlcmF0b3IKLQogICAgIGRlZiBpdGVydGV4dChzZWxmKToKKyAgICAgICAgIiIiQ3JlYXRlIHRleHQgaXRlcmF0b3IuCisKKyAgICAgICAgVGhlIGl0ZXJhdG9yIGxvb3BzIG92ZXIgdGhlIGVsZW1lbnQgYW5kIGFsbCBzdWJlbGVtZW50cyBpbiBkb2N1bWVudAorICAgICAgICBvcmRlciwgcmV0dXJuaW5nIGFsbCBpbm5lciB0ZXh0LgorCisgICAgICAgICIiIgogICAgICAgICB0YWcgPSBzZWxmLnRhZwogICAgICAgICBpZiBub3QgaXNpbnN0YW5jZSh0YWcsIHN0cikgYW5kIHRhZyBpcyBub3QgTm9uZToKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBpZiBzZWxmLnRleHQ6CiAgICAgICAgICAgICB5aWVsZCBzZWxmLnRleHQKICAgICAgICAgZm9yIGUgaW4gc2VsZjoKLSAgICAgICAgICAgIGZvciBzIGluIGUuaXRlcnRleHQoKToKLSAgICAgICAgICAgICAgICB5aWVsZCBzCisgICAgICAgICAgICB5aWVsZCBmcm9tIGUuaXRlcnRleHQoKQogICAgICAgICAgICAgaWYgZS50YWlsOgogICAgICAgICAgICAgICAgIHlpZWxkIGUudGFpbAogCi0jIGNvbXBhdGliaWxpdHkKLV9FbGVtZW50ID0gX0VsZW1lbnRJbnRlcmZhY2UgPSBFbGVtZW50Ci0KLSMjCi0jIFN1YmVsZW1lbnQgZmFjdG9yeS4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQKLSMgYXBwZW5kcyBpdCB0byBhbiBleGlzdGluZyBlbGVtZW50LgotIyA8cD4KLSMgVGhlIGVsZW1lbnQgbmFtZSwgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUKLSMgZWl0aGVyIDgtYml0IEFTQ0lJIHN0cmluZ3Mgb3IgVW5pY29kZSBzdHJpbmdzLgotIwotIyBAcGFyYW0gcGFyZW50IFRoZSBwYXJlbnQgZWxlbWVudC4KLSMgQHBhcmFtIHRhZyBUaGUgc3ViZWxlbWVudCBuYW1lLgotIyBAcGFyYW0gYXR0cmliIEFuIG9wdGlvbmFsIGRpY3Rpb25hcnksIGNvbnRhaW5pbmcgZWxlbWVudCBhdHRyaWJ1dGVzLgotIyBAcGFyYW0gKipleHRyYSBBZGRpdGlvbmFsIGF0dHJpYnV0ZXMsIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgotIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgU3ViRWxlbWVudChwYXJlbnQsIHRhZywgYXR0cmliPXt9LCAqKmV4dHJhKToKKyAgICAiIiJTdWJlbGVtZW50IGZhY3Rvcnkgd2hpY2ggY3JlYXRlcyBhbiBlbGVtZW50IGluc3RhbmNlLCBhbmQgYXBwZW5kcyBpdAorICAgIHRvIGFuIGV4aXN0aW5nIHBhcmVudC4KKworICAgIFRoZSBlbGVtZW50IHRhZywgYXR0cmlidXRlIG5hbWVzLCBhbmQgYXR0cmlidXRlIHZhbHVlcyBjYW4gYmUgZWl0aGVyCisgICAgYnl0ZXMgb3IgVW5pY29kZSBzdHJpbmdzLgorCisgICAgKnBhcmVudCogaXMgdGhlIHBhcmVudCBlbGVtZW50LCAqdGFnKiBpcyB0aGUgc3ViZWxlbWVudHMgbmFtZSwgKmF0dHJpYiogaXMKKyAgICBhbiBvcHRpb25hbCBkaXJlY3RvcnkgY29udGFpbmluZyBlbGVtZW50IGF0dHJpYnV0ZXMsICpleHRyYSogYXJlCisgICAgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIGdpdmVuIGFzIGtleXdvcmQgYXJndW1lbnRzLgorCisgICAgIiIiCiAgICAgYXR0cmliID0gYXR0cmliLmNvcHkoKQogICAgIGF0dHJpYi51cGRhdGUoZXh0cmEpCiAgICAgZWxlbWVudCA9IHBhcmVudC5tYWtlZWxlbWVudCh0YWcsIGF0dHJpYikKICAgICBwYXJlbnQuYXBwZW5kKGVsZW1lbnQpCiAgICAgcmV0dXJuIGVsZW1lbnQKIAotIyMKLSMgQ29tbWVudCBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwKLSMgZWxlbWVudCB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgY29tbWVudCBieSB0aGUgc3RhbmRhcmQKLSMgc2VyaWFsaXplci4KLSMgPHA+Ci0jIFRoZSBjb21tZW50IHN0cmluZyBjYW4gYmUgZWl0aGVyIGFuIDgtYml0IEFTQ0lJIHN0cmluZyBvciBhIFVuaWNvZGUKLSMgc3RyaW5nLgotIwotIyBAcGFyYW0gdGV4dCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBjb21tZW50IHN0cmluZy4KLSMgQHJldHVybiBBbiBlbGVtZW50IGluc3RhbmNlLCByZXByZXNlbnRpbmcgYSBjb21tZW50LgotIyBAZGVmcmV0dXJuIEVsZW1lbnQKIAogZGVmIENvbW1lbnQodGV4dD1Ob25lKToKKyAgICAiIiJDb21tZW50IGVsZW1lbnQgZmFjdG9yeS4KKworICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudCB3aGljaCB0aGUgc3RhbmRhcmQgc2VyaWFsaXplcgorICAgIHNlcmlhbGl6ZXMgYXMgYW4gWE1MIGNvbW1lbnQuCisKKyAgICAqdGV4dCogaXMgYSBzdHJpbmcgY29udGFpbmluZyB0aGUgY29tbWVudCBzdHJpbmcuCisKKyAgICAiIiIKICAgICBlbGVtZW50ID0gRWxlbWVudChDb21tZW50KQogICAgIGVsZW1lbnQudGV4dCA9IHRleHQKICAgICByZXR1cm4gZWxlbWVudAogCi0jIwotIyBQSSBlbGVtZW50IGZhY3RvcnkuICBUaGlzIGZhY3RvcnkgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudAotIyB0aGF0IHdpbGwgYmUgc2VyaWFsaXplZCBhcyBhbiBYTUwgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBieSB0aGUgc3RhbmRhcmQKLSMgc2VyaWFsaXplci4KLSMKLSMgQHBhcmFtIHRhcmdldCBBIHN0cmluZyBjb250YWluaW5nIHRoZSBQSSB0YXJnZXQuCi0jIEBwYXJhbSB0ZXh0IEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIFBJIGNvbnRlbnRzLCBpZiBhbnkuCi0jIEByZXR1cm4gQW4gZWxlbWVudCBpbnN0YW5jZSwgcmVwcmVzZW50aW5nIGEgUEkuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgUHJvY2Vzc2luZ0luc3RydWN0aW9uKHRhcmdldCwgdGV4dD1Ob25lKToKKyAgICAiIiJQcm9jZXNzaW5nIEluc3RydWN0aW9uIGVsZW1lbnQgZmFjdG9yeS4KKworICAgIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIHNwZWNpYWwgZWxlbWVudCB3aGljaCB0aGUgc3RhbmRhcmQgc2VyaWFsaXplcgorICAgIHNlcmlhbGl6ZXMgYXMgYW4gWE1MIGNvbW1lbnQuCisKKyAgICAqdGFyZ2V0KiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uLCAqdGV4dCogaXMgYQorICAgIHN0cmluZyBjb250YWluaW5nIHRoZSBwcm9jZXNzaW5nIGluc3RydWN0aW9uIGNvbnRlbnRzLCBpZiBhbnkuCisKKyAgICAiIiIKICAgICBlbGVtZW50ID0gRWxlbWVudChQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24pCiAgICAgZWxlbWVudC50ZXh0ID0gdGFyZ2V0CiAgICAgaWYgdGV4dDoKQEAgLTU1NCwxNyArNDg3LDIxIEBACiAKIFBJID0gUHJvY2Vzc2luZ0luc3RydWN0aW9uCiAKLSMjCi0jIFFOYW1lIHdyYXBwZXIuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHdyYXAgYSBRTmFtZSBhdHRyaWJ1dGUgdmFsdWUsIGluCi0jIG9yZGVyIHRvIGdldCBwcm9wZXIgbmFtZXNwYWNlIGhhbmRsaW5nIG9uIG91dHB1dC4KLSMKLSMgQHBhcmFtIHRleHQgQSBzdHJpbmcgY29udGFpbmluZyB0aGUgUU5hbWUgdmFsdWUsIGluIHRoZSBmb3JtIHt1cml9bG9jYWwsCi0jICAgICBvciwgaWYgdGhlIHRhZyBhcmd1bWVudCBpcyBnaXZlbiwgdGhlIFVSSSBwYXJ0IG9mIGEgUU5hbWUuCi0jIEBwYXJhbSB0YWcgT3B0aW9uYWwgdGFnLiAgSWYgZ2l2ZW4sIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcwotIyAgICAgYW4gVVJJLCBhbmQgdGhpcyBhcmd1bWVudCBpcyBpbnRlcnByZXRlZCBhcyBhIGxvY2FsIG5hbWUuCi0jIEByZXR1cm4gQW4gb3BhcXVlIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZSBRTmFtZS4KIAogY2xhc3MgUU5hbWU6CisgICAgIiIiUXVhbGlmaWVkIG5hbWUgd3JhcHBlci4KKworICAgIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gd3JhcCBhIFFOYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpbiBvcmRlciB0byBnZXQKKyAgICBwcm9wZXIgbmFtZXNwYWNlIGhhbmRpbmcgb24gb3V0cHV0LgorCisgICAgKnRleHRfb3JfdXJpKiBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBRTmFtZSB2YWx1ZSBlaXRoZXIgaW4gdGhlIGZvcm0KKyAgICB7dXJpfWxvY2FsLCBvciBpZiB0aGUgdGFnIGFyZ3VtZW50IGlzIGdpdmVuLCB0aGUgVVJJIHBhcnQgb2YgYSBRTmFtZS4KKworICAgICp0YWcqIGlzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHdoaWNoIGlmIGdpdmVuLCB3aWxsIG1ha2UgdGhlIGZpcnN0CisgICAgYXJndW1lbnQgKHRleHRfb3JfdXJpKSBiZSBpbnRlcnByZXRlZCBhcyBhIFVSSSwgYW5kIHRoaXMgYXJndW1lbnQgKHRhZykKKyAgICBiZSBpbnRlcnByZXRlZCBhcyBhIGxvY2FsIG5hbWUuCisKKyAgICAiIiIKICAgICBkZWYgX19pbml0X18oc2VsZiwgdGV4dF9vcl91cmksIHRhZz1Ob25lKToKICAgICAgICAgaWYgdGFnOgogICAgICAgICAgICAgdGV4dF9vcl91cmkgPSAieyVzfSVzIiAlICh0ZXh0X29yX3VyaSwgdGFnKQpAQCAtNjAyLDYzICs1MzksNjUgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0jIwotIyBFbGVtZW50VHJlZSB3cmFwcGVyIGNsYXNzLiAgVGhpcyBjbGFzcyByZXByZXNlbnRzIGFuIGVudGlyZSBlbGVtZW50Ci0jIGhpZXJhcmNoeSwgYW5kIGFkZHMgc29tZSBleHRyYSBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tCi0jIHN0YW5kYXJkIFhNTC4KLSMKLSMgQHBhcmFtIGVsZW1lbnQgT3B0aW9uYWwgcm9vdCBlbGVtZW50LgotIyBAa2V5cGFyYW0gZmlsZSBPcHRpb25hbCBmaWxlIGhhbmRsZSBvciBmaWxlIG5hbWUuICBJZiBnaXZlbiwgdGhlCi0jICAgICB0cmVlIGlzIGluaXRpYWxpemVkIHdpdGggdGhlIGNvbnRlbnRzIG9mIHRoaXMgWE1MIGZpbGUuCiAKIGNsYXNzIEVsZW1lbnRUcmVlOgorICAgICIiIkFuIFhNTCBlbGVtZW50IGhpZXJhcmNoeS4KIAorICAgIFRoaXMgY2xhc3MgYWxzbyBwcm92aWRlcyBzdXBwb3J0IGZvciBzZXJpYWxpemF0aW9uIHRvIGFuZCBmcm9tCisgICAgc3RhbmRhcmQgWE1MLgorCisgICAgKmVsZW1lbnQqIGlzIGFuIG9wdGlvbmFsIHJvb3QgZWxlbWVudCBub2RlLAorICAgICpmaWxlKiBpcyBhbiBvcHRpb25hbCBmaWxlIGhhbmRsZSBvciBmaWxlIG5hbWUgb2YgYW4gWE1MIGZpbGUgd2hvc2UKKyAgICBjb250ZW50cyB3aWxsIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdHJlZSB3aXRoLgorCisgICAgIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGVsZW1lbnQ9Tm9uZSwgZmlsZT1Ob25lKToKICAgICAgICAgIyBhc3NlcnQgZWxlbWVudCBpcyBOb25lIG9yIGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9yb290ID0gZWxlbWVudCAjIGZpcnN0IG5vZGUKICAgICAgICAgaWYgZmlsZToKICAgICAgICAgICAgIHNlbGYucGFyc2UoZmlsZSkKIAotICAgICMjCi0gICAgIyBHZXRzIHRoZSByb290IGVsZW1lbnQgZm9yIHRoaXMgdHJlZS4KLSAgICAjCi0gICAgIyBAcmV0dXJuIEFuIGVsZW1lbnQgaW5zdGFuY2UuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBnZXRyb290KHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gcm9vdCBlbGVtZW50IG9mIHRoaXMgdHJlZS4iIiIKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QKIAotICAgICMjCi0gICAgIyBSZXBsYWNlcyB0aGUgcm9vdCBlbGVtZW50IGZvciB0aGlzIHRyZWUuICBUaGlzIGRpc2NhcmRzIHRoZQotICAgICMgY3VycmVudCBjb250ZW50cyBvZiB0aGUgdHJlZSwgYW5kIHJlcGxhY2VzIGl0IHdpdGggdGhlIGdpdmVuCi0gICAgIyBlbGVtZW50LiAgVXNlIHdpdGggY2FyZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gZWxlbWVudCBBbiBlbGVtZW50IGluc3RhbmNlLgotCiAgICAgZGVmIF9zZXRyb290KHNlbGYsIGVsZW1lbnQpOgorICAgICAgICAiIiJSZXBsYWNlIHJvb3QgZWxlbWVudCBvZiB0aGlzIHRyZWUuCisKKyAgICAgICAgVGhpcyB3aWxsIGRpc2NhcmQgdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIHRyZWUgYW5kIHJlcGxhY2UgaXQKKyAgICAgICAgd2l0aCB0aGUgZ2l2ZW4gZWxlbWVudC4gIFVzZSB3aXRoIGNhcmUhCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IGlzZWxlbWVudChlbGVtZW50KQogICAgICAgICBzZWxmLl9yb290ID0gZWxlbWVudAogCi0gICAgIyMKLSAgICAjIExvYWRzIGFuIGV4dGVybmFsIFhNTCBkb2N1bWVudCBpbnRvIHRoaXMgZWxlbWVudCB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBzb3VyY2UgQSBmaWxlIG5hbWUgb3IgZmlsZSBvYmplY3QuICBJZiBhIGZpbGUgb2JqZWN0IGlzCi0gICAgIyAgICAgZ2l2ZW4sIGl0IG9ubHkgaGFzIHRvIGltcGxlbWVudCBhIDxiPnJlYWQobik8L2I+IG1ldGhvZC4KLSAgICAjIEBrZXlwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSAgICAjICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSAgICAjIEByZXR1cm4gVGhlIGRvY3VtZW50IHJvb3QgZWxlbWVudC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotICAgICMgQGV4Y2VwdGlvbiBQYXJzZUVycm9yIElmIHRoZSBwYXJzZXIgZmFpbHMgdG8gcGFyc2UgdGhlIGRvY3VtZW50LgotCiAgICAgZGVmIHBhcnNlKHNlbGYsIHNvdXJjZSwgcGFyc2VyPU5vbmUpOgorICAgICAgICAiIiJMb2FkIGV4dGVybmFsIFhNTCBkb2N1bWVudCBpbnRvIGVsZW1lbnQgdHJlZS4KKworICAgICAgICAqc291cmNlKiBpcyBhIGZpbGUgbmFtZSBvciBmaWxlIG9iamVjdCwgKnBhcnNlciogaXMgYW4gb3B0aW9uYWwgcGFyc2VyCisgICAgICAgIGluc3RhbmNlIHRoYXQgZGVmYXVsdHMgdG8gWE1MUGFyc2VyLgorCisgICAgICAgIFBhcnNlRXJyb3IgaXMgcmFpc2VkIGlmIHRoZSBwYXJzZXIgZmFpbHMgdG8gcGFyc2UgdGhlIGRvY3VtZW50LgorCisgICAgICAgIFJldHVybnMgdGhlIHJvb3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gc291cmNlIGRvY3VtZW50LgorCisgICAgICAgICIiIgogICAgICAgICBjbG9zZV9zb3VyY2UgPSBGYWxzZQogICAgICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICJyZWFkIik6CiAgICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZSwgInJiIikKICAgICAgICAgICAgIGNsb3NlX3NvdXJjZSA9IFRydWUKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaWYgbm90IHBhcnNlcjoKLSAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCi0gICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgaWYgcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgIyBJZiBubyBwYXJzZXIgd2FzIHNwZWNpZmllZCwgY3JlYXRlIGEgZGVmYXVsdCBYTUxQYXJzZXIKKyAgICAgICAgICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIoKQorICAgICAgICAgICAgICAgIGlmIGhhc2F0dHIocGFyc2VyLCAnX3BhcnNlX3dob2xlJyk6CisgICAgICAgICAgICAgICAgICAgICMgVGhlIGRlZmF1bHQgWE1MUGFyc2VyLCB3aGVuIGl0IGNvbWVzIGZyb20gYW4gYWNjZWxlcmF0b3IsCisgICAgICAgICAgICAgICAgICAgICMgY2FuIGRlZmluZSBhbiBpbnRlcm5hbCBfcGFyc2Vfd2hvbGUgQVBJIGZvciBlZmZpY2llbmN5LgorICAgICAgICAgICAgICAgICAgICAjIEl0IGNhbiBiZSB1c2VkIHRvIHBhcnNlIHRoZSB3aG9sZSBzb3VyY2Ugd2l0aG91dCBmZWVkaW5nCisgICAgICAgICAgICAgICAgICAgICMgaXQgd2l0aCBjaHVua3MuCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuX3BhcnNlX3dob2xlKHNvdXJjZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QKKyAgICAgICAgICAgIHdoaWxlIFRydWU6CiAgICAgICAgICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkKDY1NTM2KQogICAgICAgICAgICAgICAgIGlmIG5vdCBkYXRhOgogICAgICAgICAgICAgICAgICAgICBicmVhawpAQCAtNjY5LDE1ICs2MDgsMTUgQEAKICAgICAgICAgICAgIGlmIGNsb3NlX3NvdXJjZToKICAgICAgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQogCi0gICAgIyMKLSAgICAjIENyZWF0ZXMgYSB0cmVlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBlbGVtZW50LiAgVGhlIGl0ZXJhdG9yIGxvb3BzCi0gICAgIyBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGlzIHRyZWUsIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMKLSAgICAjIEBwYXJhbSB0YWcgV2hhdCB0YWdzIHRvIGxvb2sgZm9yIChkZWZhdWx0IGlzIHRvIHJldHVybiBhbGwgZWxlbWVudHMpCi0gICAgIyBAcmV0dXJuIEFuIGl0ZXJhdG9yLgotICAgICMgQGRlZnJldHVybiBpdGVyYXRvcgotCiAgICAgZGVmIGl0ZXIoc2VsZiwgdGFnPU5vbmUpOgorICAgICAgICAiIiJDcmVhdGUgYW5kIHJldHVybiB0cmVlIGl0ZXJhdG9yIGZvciB0aGUgcm9vdCBlbGVtZW50LgorCisgICAgICAgIFRoZSBpdGVyYXRvciBsb29wcyBvdmVyIGFsbCBlbGVtZW50cyBpbiB0aGlzIHRyZWUsIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICp0YWcqIGlzIGEgc3RyaW5nIHdpdGggdGhlIHRhZyBuYW1lIHRvIGl0ZXJhdGUgb3ZlcgorICAgICAgICAoZGVmYXVsdCBpcyB0byByZXR1cm4gYWxsIGVsZW1lbnRzKS4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyKHRhZykKIApAQCAtNjkxLDE1ICs2MzAsMTcgQEAKICAgICAgICAgKQogICAgICAgICByZXR1cm4gbGlzdChzZWxmLml0ZXIodGFnKSkKIAotICAgICMjCi0gICAgIyBTYW1lIGFzIGdldHJvb3QoKS5maW5kKHBhdGgpLCBzdGFydGluZyBhdCB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KLSAgICAjCi0gICAgIyBAcGFyYW0gcGF0aCBXaGF0IGVsZW1lbnQgdG8gbG9vayBmb3IuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQgb3IgTm9uZQotCiAgICAgZGVmIGZpbmQoc2VsZiwgcGF0aCwgbmFtZXNwYWNlcz1Ob25lKToKKyAgICAgICAgIiIiRmluZCBmaXJzdCBtYXRjaGluZyBlbGVtZW50IGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuZmluZChwYXRoKSwgd2hpY2ggaXMgRWxlbWVudC5maW5kKCkKKworICAgICAgICAqcGF0aCogaXMgYSBzdHJpbmcgaGF2aW5nIGVpdGhlciBhbiBlbGVtZW50IHRhZyBvciBhbiBYUGF0aCwKKyAgICAgICAgKm5hbWVzcGFjZXMqIGlzIGFuIG9wdGlvbmFsIG1hcHBpbmcgZnJvbSBuYW1lc3BhY2UgcHJlZml4IHRvIGZ1bGwgbmFtZS4KKworICAgICAgICBSZXR1cm4gdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsIG9yIE5vbmUgaWYgbm8gZWxlbWVudCB3YXMgZm91bmQuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTcxMSwxOSArNjUyLDE3IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5maW5kKHBhdGgsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZHRleHQocGF0aCksIHN0YXJ0aW5nIGF0IHRoZSByb290IG9mIHRoZSB0cmVlLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBwYXJhbSBkZWZhdWx0IFdoYXQgdG8gcmV0dXJuIGlmIHRoZSBlbGVtZW50IHdhcyBub3QgZm91bmQuCi0gICAgIyBAa2V5cGFyYW0gbmFtZXNwYWNlcyBPcHRpb25hbCBuYW1lc3BhY2UgcHJlZml4IG1hcC4KLSAgICAjIEByZXR1cm4gVGhlIHRleHQgY29udGVudCBvZiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgdGhlCi0gICAgIyAgICAgZGVmYXVsdCB2YWx1ZSBubyBlbGVtZW50IHdhcyBmb3VuZC4gIE5vdGUgdGhhdCBpZiB0aGUgZWxlbWVudAotICAgICMgICAgIGlzIGZvdW5kLCBidXQgaGFzIG5vIHRleHQgY29udGVudCwgdGhpcyBtZXRob2QgcmV0dXJucyBhbgotICAgICMgICAgIGVtcHR5IHN0cmluZy4KLSAgICAjIEBkZWZyZXR1cm4gc3RyaW5nCi0KICAgICBkZWYgZmluZHRleHQoc2VsZiwgcGF0aCwgZGVmYXVsdD1Ob25lLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQgYnkgdGFnIG5hbWUgb3IgcGF0aC4KKworICAgICAgICBTYW1lIGFzIGdldHJvb3QoKS5maW5kdGV4dChwYXRoKSwgIHdoaWNoIGlzIEVsZW1lbnQuZmluZHRleHQoKQorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCwgb3IgTm9uZSBpZiBubyBlbGVtZW50IHdhcyBmb3VuZC4KKworICAgICAgICAiIiIKICAgICAgICAgIyBhc3NlcnQgc2VsZi5fcm9vdCBpcyBub3QgTm9uZQogICAgICAgICBpZiBwYXRoWzoxXSA9PSAiLyI6CiAgICAgICAgICAgICBwYXRoID0gIi4iICsgcGF0aApAQCAtNzM1LDE2ICs2NzQsMTcgQEAKICAgICAgICAgICAgICAgICApCiAgICAgICAgIHJldHVybiBzZWxmLl9yb290LmZpbmR0ZXh0KHBhdGgsIGRlZmF1bHQsIG5hbWVzcGFjZXMpCiAKLSAgICAjIwotICAgICMgU2FtZSBhcyBnZXRyb290KCkuZmluZGFsbChwYXRoKSwgc3RhcnRpbmcgYXQgdGhlIHJvb3Qgb2YgdGhlIHRyZWUuCi0gICAgIwotICAgICMgQHBhcmFtIHBhdGggV2hhdCBlbGVtZW50IHRvIGxvb2sgZm9yLgotICAgICMgQGtleXBhcmFtIG5hbWVzcGFjZXMgT3B0aW9uYWwgbmFtZXNwYWNlIHByZWZpeCBtYXAuCi0gICAgIyBAcmV0dXJuIEEgbGlzdCBvciBpdGVyYXRvciBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBsaXN0IG9mIEVsZW1lbnQgaW5zdGFuY2VzCi0KICAgICBkZWYgZmluZGFsbChzZWxmLCBwYXRoLCBuYW1lc3BhY2VzPU5vbmUpOgorICAgICAgICAiIiJGaW5kIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cyBieSB0YWcgbmFtZSBvciBwYXRoLgorCisgICAgICAgIFNhbWUgYXMgZ2V0cm9vdCgpLmZpbmRhbGwocGF0aCksIHdoaWNoIGlzIEVsZW1lbnQuZmluZGFsbCgpLgorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiBsaXN0IGNvbnRhaW5pbmcgYWxsIG1hdGNoaW5nIGVsZW1lbnRzIGluIGRvY3VtZW50IG9yZGVyLgorCisgICAgICAgICIiIgogICAgICAgICAjIGFzc2VydCBzZWxmLl9yb290IGlzIG5vdCBOb25lCiAgICAgICAgIGlmIHBhdGhbOjFdID09ICIvIjoKICAgICAgICAgICAgIHBhdGggPSAiLiIgKyBwYXRoCkBAIC03NTYsMTcgKzY5NiwxNyBAQAogICAgICAgICAgICAgICAgICkKICAgICAgICAgcmV0dXJuIHNlbGYuX3Jvb3QuZmluZGFsbChwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIEZpbmRzIGFsbCBtYXRjaGluZyBzdWJlbGVtZW50cywgYnkgdGFnIG5hbWUgb3IgcGF0aC4KLSAgICAjIFNhbWUgYXMgZ2V0cm9vdCgpLml0ZXJmaW5kKHBhdGgpLgotICAgICMKLSAgICAjIEBwYXJhbSBwYXRoIFdoYXQgZWxlbWVudCB0byBsb29rIGZvci4KLSAgICAjIEBrZXlwYXJhbSBuYW1lc3BhY2VzIE9wdGlvbmFsIG5hbWVzcGFjZSBwcmVmaXggbWFwLgotICAgICMgQHJldHVybiBBbiBpdGVyYXRvciBvciBzZXF1ZW5jZSBjb250YWluaW5nIGFsbCBtYXRjaGluZyBlbGVtZW50cywKLSAgICAjICAgIGluIGRvY3VtZW50IG9yZGVyLgotICAgICMgQGRlZnJldHVybiBhIGdlbmVyYXRlZCBzZXF1ZW5jZSBvZiBFbGVtZW50IGluc3RhbmNlcwotCiAgICAgZGVmIGl0ZXJmaW5kKHNlbGYsIHBhdGgsIG5hbWVzcGFjZXM9Tm9uZSk6CisgICAgICAgICIiIkZpbmQgYWxsIG1hdGNoaW5nIHN1YmVsZW1lbnRzIGJ5IHRhZyBuYW1lIG9yIHBhdGguCisKKyAgICAgICAgU2FtZSBhcyBnZXRyb290KCkuaXRlcmZpbmQocGF0aCksIHdoaWNoIGlzIGVsZW1lbnQuaXRlcmZpbmQoKQorCisgICAgICAgICpwYXRoKiBpcyBhIHN0cmluZyBoYXZpbmcgZWl0aGVyIGFuIGVsZW1lbnQgdGFnIG9yIGFuIFhQYXRoLAorICAgICAgICAqbmFtZXNwYWNlcyogaXMgYW4gb3B0aW9uYWwgbWFwcGluZyBmcm9tIG5hbWVzcGFjZSBwcmVmaXggdG8gZnVsbCBuYW1lLgorCisgICAgICAgIFJldHVybiBhbiBpdGVyYWJsZSB5aWVsZGluZyBhbGwgbWF0Y2hpbmcgZWxlbWVudHMgaW4gZG9jdW1lbnQgb3JkZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgICMgYXNzZXJ0IHNlbGYuX3Jvb3QgaXMgbm90IE5vbmUKICAgICAgICAgaWYgcGF0aFs6MV0gPT0gIi8iOgogICAgICAgICAgICAgcGF0aCA9ICIuIiArIHBhdGgKQEAgLTc3OCwyNiArNzE4LDM1IEBACiAgICAgICAgICAgICAgICAgKQogICAgICAgICByZXR1cm4gc2VsZi5fcm9vdC5pdGVyZmluZChwYXRoLCBuYW1lc3BhY2VzKQogCi0gICAgIyMKLSAgICAjIFdyaXRlcyB0aGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSwgYXMgWE1MLgotICAgICMKLSAgICAjIEBkZWYgd3JpdGUoZmlsZSwgKipvcHRpb25zKQotICAgICMgQHBhcmFtIGZpbGUgQSBmaWxlIG5hbWUsIG9yIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciB3cml0aW5nLgotICAgICMgQHBhcmFtICoqb3B0aW9ucyBPcHRpb25zLCBnaXZlbiBhcyBrZXl3b3JkIGFyZ3VtZW50cy4KLSAgICAjIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotICAgICMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCi0gICAgIyBAa2V5cGFyYW0geG1sX2RlY2xhcmF0aW9uIENvbnRyb2xzIGlmIGFuIFhNTCBkZWNsYXJhdGlvbiBzaG91bGQKLSAgICAjICAgICBiZSBhZGRlZCB0byB0aGUgZmlsZS4gIFVzZSBGYWxzZSBmb3IgbmV2ZXIsIFRydWUgZm9yIGFsd2F5cywKLSAgICAjICAgICBOb25lIGZvciBvbmx5IGlmIG5vdCBVUy1BU0NJSSBvciBVVEYtOCBvciBVbmljb2RlLiAgTm9uZSBpcyBkZWZhdWx0LgotICAgICMgQGtleXBhcmFtIGRlZmF1bHRfbmFtZXNwYWNlIFNldHMgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSAoZm9yICJ4bWxucyIpLgotICAgICMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSAgICAjICAgICAiYzE0biI7IGRlZmF1bHQgaXMgInhtbCIpLgotCiAgICAgZGVmIHdyaXRlKHNlbGYsIGZpbGVfb3JfZmlsZW5hbWUsCiAgICAgICAgICAgICAgIGVuY29kaW5nPU5vbmUsCiAgICAgICAgICAgICAgIHhtbF9kZWNsYXJhdGlvbj1Ob25lLAogICAgICAgICAgICAgICBkZWZhdWx0X25hbWVzcGFjZT1Ob25lLAotICAgICAgICAgICAgICBtZXRob2Q9Tm9uZSk6CisgICAgICAgICAgICAgIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKKyAgICAgICAgIiIiV3JpdGUgZWxlbWVudCB0cmVlIHRvIGEgZmlsZSBhcyBYTUwuCisKKyAgICAgICAgQXJndW1lbnRzOgorICAgICAgICAgICpmaWxlX29yX2ZpbGVuYW1lKiAtLSBmaWxlIG5hbWUgb3IgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHdyaXRpbmcKKworICAgICAgICAgICplbmNvZGluZyogLS0gdGhlIG91dHB1dCBlbmNvZGluZyAoZGVmYXVsdDogVVMtQVNDSUkpCisKKyAgICAgICAgICAqeG1sX2RlY2xhcmF0aW9uKiAtLSBib29sIGluZGljYXRpbmcgaWYgYW4gWE1MIGRlY2xhcmF0aW9uIHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkIHRvIHRoZSBvdXRwdXQuIElmIE5vbmUsIGFuIFhNTCBkZWNsYXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGFkZGVkIGlmIGVuY29kaW5nIElTIE5PVCBlaXRoZXIgb2Y6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVMtQVNDSUksIFVURi04LCBvciBVbmljb2RlCisKKyAgICAgICAgICAqZGVmYXVsdF9uYW1lc3BhY2UqIC0tIHNldHMgdGhlIGRlZmF1bHQgWE1MIG5hbWVzcGFjZSAoZm9yICJ4bWxucyIpCisKKyAgICAgICAgICAqbWV0aG9kKiAtLSBlaXRoZXIgInhtbCIgKGRlZmF1bHQpLCAiaHRtbCwgInRleHQiLCBvciAiYzE0biIKKworICAgICAgICAgICpzaG9ydF9lbXB0eV9lbGVtZW50cyogLS0gY29udHJvbHMgdGhlIGZvcm1hdHRpbmcgb2YgZWxlbWVudHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQgY29udGFpbiBubyBjb250ZW50LiBJZiBUcnVlIChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhleSBhcmUgZW1pdHRlZCBhcyBhIHNpbmdsZSBzZWxmLWNsb3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnLCBvdGhlcndpc2UgdGhleSBhcmUgZW1pdHRlZCBhcyBhIHBhaXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHN0YXJ0L2VuZCB0YWdzCisKKyAgICAgICAgIiIiCiAgICAgICAgIGlmIG5vdCBtZXRob2Q6CiAgICAgICAgICAgICBtZXRob2QgPSAieG1sIgogICAgICAgICBlbGlmIG1ldGhvZCBub3QgaW4gX3NlcmlhbGl6ZToKQEAgLTgwNywxNCArNzU2LDEzIEBACiAgICAgICAgICAgICAgICAgZW5jb2RpbmcgPSAidXRmLTgiCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIGVuY29kaW5nID0gInVzLWFzY2lpIgotICAgICAgICBlbHNlOgotICAgICAgICAgICAgZW5jb2RpbmcgPSBlbmNvZGluZy5sb3dlcigpCi0gICAgICAgIHdpdGggX2dldF93cml0ZXIoZmlsZV9vcl9maWxlbmFtZSwgZW5jb2RpbmcpIGFzIHdyaXRlOgorICAgICAgICBlbmNfbG93ZXIgPSBlbmNvZGluZy5sb3dlcigpCisgICAgICAgIHdpdGggX2dldF93cml0ZXIoZmlsZV9vcl9maWxlbmFtZSwgZW5jX2xvd2VyKSBhcyB3cml0ZToKICAgICAgICAgICAgIGlmIG1ldGhvZCA9PSAieG1sIiBhbmQgKHhtbF9kZWNsYXJhdGlvbiBvcgogICAgICAgICAgICAgICAgICAgICAoeG1sX2RlY2xhcmF0aW9uIGlzIE5vbmUgYW5kCi0gICAgICAgICAgICAgICAgICAgICBlbmNvZGluZyBub3QgaW4gKCJ1dGYtOCIsICJ1cy1hc2NpaSIsICJ1bmljb2RlIikpKToKKyAgICAgICAgICAgICAgICAgICAgIGVuY19sb3dlciBub3QgaW4gKCJ1dGYtOCIsICJ1cy1hc2NpaSIsICJ1bmljb2RlIikpKToKICAgICAgICAgICAgICAgICBkZWNsYXJlZF9lbmNvZGluZyA9IGVuY29kaW5nCi0gICAgICAgICAgICAgICAgaWYgZW5jb2RpbmcgPT0gInVuaWNvZGUiOgorICAgICAgICAgICAgICAgIGlmIGVuY19sb3dlciA9PSAidW5pY29kZSI6CiAgICAgICAgICAgICAgICAgICAgICMgUmV0cmlldmUgdGhlIGRlZmF1bHQgZW5jb2RpbmcgZm9yIHRoZSB4bWwgZGVjbGFyYXRpb24KICAgICAgICAgICAgICAgICAgICAgaW1wb3J0IGxvY2FsZQogICAgICAgICAgICAgICAgICAgICBkZWNsYXJlZF9lbmNvZGluZyA9IGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZygpCkBAIC04MjUsNyArNzczLDggQEAKICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgcW5hbWVzLCBuYW1lc3BhY2VzID0gX25hbWVzcGFjZXMoc2VsZi5fcm9vdCwgZGVmYXVsdF9uYW1lc3BhY2UpCiAgICAgICAgICAgICAgICAgc2VyaWFsaXplID0gX3NlcmlhbGl6ZVttZXRob2RdCi0gICAgICAgICAgICAgICAgc2VyaWFsaXplKHdyaXRlLCBzZWxmLl9yb290LCBxbmFtZXMsIG5hbWVzcGFjZXMpCisgICAgICAgICAgICAgICAgc2VyaWFsaXplKHdyaXRlLCBzZWxmLl9yb290LCBxbmFtZXMsIG5hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogCiAgICAgZGVmIHdyaXRlX2MxNG4oc2VsZiwgZmlsZSk6CiAgICAgICAgICMgbHhtbC5ldHJlZSBjb21wYXRpYmlsaXR5LiAgdXNlIG91dHB1dCBtZXRob2QgaW5zdGVhZApAQCAtOTQ3LDcgKzg5Niw4IEBACiAgICAgICAgICAgICBhZGRfcW5hbWUodGV4dC50ZXh0KQogICAgIHJldHVybiBxbmFtZXMsIG5hbWVzcGFjZXMKIAotZGVmIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMpOgorZGVmIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMsCisgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHMsICoqa3dhcmdzKToKICAgICB0YWcgPSBlbGVtLnRhZwogICAgIHRleHQgPSBlbGVtLnRleHQKICAgICBpZiB0YWcgaXMgQ29tbWVudDoKQEAgLTk2MCw3ICs5MTAsOCBAQAogICAgICAgICAgICAgaWYgdGV4dDoKICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQpKQogICAgICAgICAgICAgZm9yIGUgaW4gZWxlbToKLSAgICAgICAgICAgICAgICBfc2VyaWFsaXplX3htbCh3cml0ZSwgZSwgcW5hbWVzLCBOb25lKQorICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvcnRfZW1wdHlfZWxlbWVudHM9c2hvcnRfZW1wdHlfZWxlbWVudHMpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3cml0ZSgiPCIgKyB0YWcpCiAgICAgICAgICAgICBpdGVtcyA9IGxpc3QoZWxlbS5pdGVtcygpKQpAQCAtOTgyLDEyICs5MzMsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBfZXNjYXBlX2F0dHJpYih2KQogICAgICAgICAgICAgICAgICAgICB3cml0ZSgiICVzPVwiJXNcIiIgJSAocW5hbWVzW2tdLCB2KSkKLSAgICAgICAgICAgIGlmIHRleHQgb3IgbGVuKGVsZW0pOgorICAgICAgICAgICAgaWYgdGV4dCBvciBsZW4oZWxlbSkgb3Igbm90IHNob3J0X2VtcHR5X2VsZW1lbnRzOgogICAgICAgICAgICAgICAgIHdyaXRlKCI+IikKICAgICAgICAgICAgICAgICBpZiB0ZXh0OgogICAgICAgICAgICAgICAgICAgICB3cml0ZShfZXNjYXBlX2NkYXRhKHRleHQpKQogICAgICAgICAgICAgICAgIGZvciBlIGluIGVsZW06Ci0gICAgICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgIF9zZXJpYWxpemVfeG1sKHdyaXRlLCBlLCBxbmFtZXMsIE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgICAgICAgICAgICAgIHdyaXRlKCI8LyIgKyB0YWcgKyAiPiIpCiAgICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgIHdyaXRlKCIgLz4iKQpAQCAtMTAwMiw3ICs5NTQsNyBAQAogZXhjZXB0IE5hbWVFcnJvcjoKICAgICBwYXNzCiAKLWRlZiBfc2VyaWFsaXplX2h0bWwod3JpdGUsIGVsZW0sIHFuYW1lcywgbmFtZXNwYWNlcyk6CitkZWYgX3NlcmlhbGl6ZV9odG1sKHdyaXRlLCBlbGVtLCBxbmFtZXMsIG5hbWVzcGFjZXMsICoqa3dhcmdzKToKICAgICB0YWcgPSBlbGVtLnRhZwogICAgIHRleHQgPSBlbGVtLnRleHQKICAgICBpZiB0YWcgaXMgQ29tbWVudDoKQEAgLTEwNjYsMTggKzEwMTgsMTkgQEAKICMgICAiYzE0biI6IF9zZXJpYWxpemVfYzE0biwKIH0KIAotIyMKLSMgUmVnaXN0ZXJzIGEgbmFtZXNwYWNlIHByZWZpeC4gIFRoZSByZWdpc3RyeSBpcyBnbG9iYWwsIGFuZCBhbnkKLSMgZXhpc3RpbmcgbWFwcGluZyBmb3IgZWl0aGVyIHRoZSBnaXZlbiBwcmVmaXggb3IgdGhlIG5hbWVzcGFjZSBVUkkKLSMgd2lsbCBiZSByZW1vdmVkLgotIwotIyBAcGFyYW0gcHJlZml4IE5hbWVzcGFjZSBwcmVmaXguCi0jIEBwYXJhbSB1cmkgTmFtZXNwYWNlIHVyaS4gIFRhZ3MgYW5kIGF0dHJpYnV0ZXMgaW4gdGhpcyBuYW1lc3BhY2UKLSMgICAgIHdpbGwgYmUgc2VyaWFsaXplZCB3aXRoIHRoZSBnaXZlbiBwcmVmaXgsIGlmIGF0IGFsbCBwb3NzaWJsZS4KLSMgQGV4Y2VwdGlvbiBWYWx1ZUVycm9yIElmIHRoZSBwcmVmaXggaXMgcmVzZXJ2ZWQsIG9yIGlzIG90aGVyd2lzZQotIyAgICAgaW52YWxpZC4KIAogZGVmIHJlZ2lzdGVyX25hbWVzcGFjZShwcmVmaXgsIHVyaSk6CisgICAgIiIiUmVnaXN0ZXIgYSBuYW1lc3BhY2UgcHJlZml4LgorCisgICAgVGhlIHJlZ2lzdHJ5IGlzIGdsb2JhbCwgYW5kIGFueSBleGlzdGluZyBtYXBwaW5nIGZvciBlaXRoZXIgdGhlCisgICAgZ2l2ZW4gcHJlZml4IG9yIHRoZSBuYW1lc3BhY2UgVVJJIHdpbGwgYmUgcmVtb3ZlZC4KKworICAgICpwcmVmaXgqIGlzIHRoZSBuYW1lc3BhY2UgcHJlZml4LCAqdXJpKiBpcyBhIG5hbWVzcGFjZSB1cmkuIFRhZ3MgYW5kCisgICAgYXR0cmlidXRlcyBpbiB0aGlzIG5hbWVzcGFjZSB3aWxsIGJlIHNlcmlhbGl6ZWQgd2l0aCBwcmVmaXggaWYgcG9zc2libGUuCisKKyAgICBWYWx1ZUVycm9yIGlzIHJhaXNlZCBpZiBwcmVmaXggaXMgcmVzZXJ2ZWQgb3IgaXMgaW52YWxpZC4KKworICAgICIiIgogICAgIGlmIHJlLm1hdGNoKCJuc1xkKyQiLCBwcmVmaXgpOgogICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQcmVmaXggZm9ybWF0IHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2UiKQogICAgIGZvciBrLCB2IGluIGxpc3QoX25hbWVzcGFjZV9tYXAuaXRlbXMoKSk6CkBAIC0xMTUzLDQwICsxMTA2LDI3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotIyMKLSMgR2VuZXJhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIFhNTCBlbGVtZW50LCBpbmNsdWRpbmcgYWxsCi0jIHN1YmVsZW1lbnRzLiAgSWYgZW5jb2RpbmcgaXMgInVuaWNvZGUiLCB0aGUgcmV0dXJuIHR5cGUgaXMgYSBzdHJpbmc7Ci0jIG90aGVyd2lzZSBpdCBpcyBhIGJ5dGVzIGFycmF5LgotIwotIyBAcGFyYW0gZWxlbWVudCBBbiBFbGVtZW50IGluc3RhbmNlLgotIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgb3V0cHV0IGVuY29kaW5nIChkZWZhdWx0IGlzIFVTLUFTQ0lJKS4KLSMgICAgIFVzZSAidW5pY29kZSIgdG8gcmV0dXJuIGEgVW5pY29kZSBzdHJpbmcuCi0jIEBrZXlwYXJhbSBtZXRob2QgT3B0aW9uYWwgb3V0cHV0IG1ldGhvZCAoInhtbCIsICJodG1sIiwgInRleHQiIG9yCi0jICAgICAiYzE0biI7IGRlZmF1bHQgaXMgInhtbCIpLgotIyBAcmV0dXJuIEFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KLSMgQGRlZnJldHVybiBzdHJpbmcKK2RlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSwgKiwKKyAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKKyAgICAiIiJHZW5lcmF0ZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgWE1MIGVsZW1lbnQuCiAKLWRlZiB0b3N0cmluZyhlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSk6CisgICAgQWxsIHN1YmVsZW1lbnRzIGFyZSBpbmNsdWRlZC4gIElmIGVuY29kaW5nIGlzICJ1bmljb2RlIiwgYSBzdHJpbmcKKyAgICBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIGEgYnl0ZXN0cmluZyBpcyByZXR1cm5lZC4KKworICAgICplbGVtZW50KiBpcyBhbiBFbGVtZW50IGluc3RhbmNlLCAqZW5jb2RpbmcqIGlzIGFuIG9wdGlvbmFsIG91dHB1dAorICAgIGVuY29kaW5nIGRlZmF1bHRpbmcgdG8gVVMtQVNDSUksICptZXRob2QqIGlzIGFuIG9wdGlvbmFsIG91dHB1dCB3aGljaCBjYW4KKyAgICBiZSBvbmUgb2YgInhtbCIgKGRlZmF1bHQpLCAiaHRtbCIsICJ0ZXh0IiBvciAiYzE0biIuCisKKyAgICBSZXR1cm5zIGFuIChvcHRpb25hbGx5KSBlbmNvZGVkIHN0cmluZyBjb250YWluaW5nIHRoZSBYTUwgZGF0YS4KKworICAgICIiIgogICAgIHN0cmVhbSA9IGlvLlN0cmluZ0lPKCkgaWYgZW5jb2RpbmcgPT0gJ3VuaWNvZGUnIGVsc2UgaW8uQnl0ZXNJTygpCi0gICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgIHJldHVybiBzdHJlYW0uZ2V0dmFsdWUoKQogCi0jIwotIyBHZW5lcmF0ZXMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gWE1MIGVsZW1lbnQsIGluY2x1ZGluZyBhbGwKLSMgc3ViZWxlbWVudHMuCi0jCi0jIEBwYXJhbSBlbGVtZW50IEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBrZXlwYXJhbSBlbmNvZGluZyBPcHRpb25hbCBvdXRwdXQgZW5jb2RpbmcgKGRlZmF1bHQgaXMgVVMtQVNDSUkpLgotIyAgICAgVXNlICJ1bmljb2RlIiB0byByZXR1cm4gYSBVbmljb2RlIHN0cmluZy4KLSMgQGtleXBhcmFtIG1ldGhvZCBPcHRpb25hbCBvdXRwdXQgbWV0aG9kICgieG1sIiwgImh0bWwiLCAidGV4dCIgb3IKLSMgICAgICJjMTRuIjsgZGVmYXVsdCBpcyAieG1sIikuCi0jIEByZXR1cm4gQSBzZXF1ZW5jZSBvYmplY3QgY29udGFpbmluZyB0aGUgWE1MIGRhdGEuCi0jIEBkZWZyZXR1cm4gc2VxdWVuY2UKLSMgQHNpbmNlIDEuMwotCiBjbGFzcyBfTGlzdERhdGFTdHJlYW0oaW8uQnVmZmVyZWRJT0Jhc2UpOgotICAgICIiIiBBbiBhdXhpbGlhcnkgc3RyZWFtIGFjY3VtdWxhdGluZyBpbnRvIGEgbGlzdCByZWZlcmVuY2UKLSAgICAiIiIKKyAgICAiIiJBbiBhdXhpbGlhcnkgc3RyZWFtIGFjY3VtdWxhdGluZyBpbnRvIGEgbGlzdCByZWZlcmVuY2UuIiIiCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxzdCk6CiAgICAgICAgIHNlbGYubHN0ID0gbHN0CiAKQEAgLTEyMDIsMjIgKzExNDIsMjUgQEAKICAgICBkZWYgdGVsbChzZWxmKToKICAgICAgICAgcmV0dXJuIGxlbihzZWxmLmxzdCkKIAotZGVmIHRvc3RyaW5nbGlzdChlbGVtZW50LCBlbmNvZGluZz1Ob25lLCBtZXRob2Q9Tm9uZSk6CitkZWYgdG9zdHJpbmdsaXN0KGVsZW1lbnQsIGVuY29kaW5nPU5vbmUsIG1ldGhvZD1Ob25lLCAqLAorICAgICAgICAgICAgICAgICBzaG9ydF9lbXB0eV9lbGVtZW50cz1UcnVlKToKICAgICBsc3QgPSBbXQogICAgIHN0cmVhbSA9IF9MaXN0RGF0YVN0cmVhbShsc3QpCi0gICAgRWxlbWVudFRyZWUoZWxlbWVudCkud3JpdGUoc3RyZWFtLCBlbmNvZGluZywgbWV0aG9kPW1ldGhvZCkKKyAgICBFbGVtZW50VHJlZShlbGVtZW50KS53cml0ZShzdHJlYW0sIGVuY29kaW5nLCBtZXRob2Q9bWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0X2VtcHR5X2VsZW1lbnRzPXNob3J0X2VtcHR5X2VsZW1lbnRzKQogICAgIHJldHVybiBsc3QKIAotIyMKLSMgV3JpdGVzIGFuIGVsZW1lbnQgdHJlZSBvciBlbGVtZW50IHN0cnVjdHVyZSB0byBzeXMuc3Rkb3V0LiAgVGhpcwotIyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCBmb3IgZGVidWdnaW5nIG9ubHkuCi0jIDxwPgotIyBUaGUgZXhhY3Qgb3V0cHV0IGZvcm1hdCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuICBJbiB0aGlzCi0jIHZlcnNpb24sIGl0J3Mgd3JpdHRlbiBhcyBhbiBvcmRpbmFyeSBYTUwgZmlsZS4KLSMKLSMgQHBhcmFtIGVsZW0gQW4gZWxlbWVudCB0cmVlIG9yIGFuIGluZGl2aWR1YWwgZWxlbWVudC4KIAogZGVmIGR1bXAoZWxlbSk6CisgICAgIiIiV3JpdGUgZWxlbWVudCB0cmVlIG9yIGVsZW1lbnQgc3RydWN0dXJlIHRvIHN5cy5zdGRvdXQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSB1c2VkIGZvciBkZWJ1Z2dpbmcgb25seS4KKworICAgICplbGVtKiBpcyBlaXRoZXIgYW4gRWxlbWVudFRyZWUsIG9yIGEgc2luZ2xlIEVsZW1lbnQuICBUaGUgZXhhY3Qgb3V0cHV0CisgICAgZm9ybWF0IGlzIGltcGxlbWVudGF0aW9uIGRlcGVuZGVudC4gIEluIHRoaXMgdmVyc2lvbiwgaXQncyB3cml0dGVuIGFzIGFuCisgICAgb3JkaW5hcnkgWE1MIGZpbGUuCisKKyAgICAiIiIKICAgICAjIGRlYnVnZ2luZwogICAgIGlmIG5vdCBpc2luc3RhbmNlKGVsZW0sIEVsZW1lbnRUcmVlKToKICAgICAgICAgZWxlbSA9IEVsZW1lbnRUcmVlKGVsZW0pCkBAIC0xMjI5LDE0NCArMTE3MiwxODAgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgcGFyc2luZwogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGludG8gYW4gZWxlbWVudCB0cmVlLgotIwotIyBAcGFyYW0gc291cmNlIEEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudFRyZWUgaW5zdGFuY2UKIAogZGVmIHBhcnNlKHNvdXJjZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIlBhcnNlIFhNTCBkb2N1bWVudCBpbnRvIGVsZW1lbnQgdHJlZS4KKworICAgICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YSwKKyAgICAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UgZGVmYXVsdGluZyB0byBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm4gYW4gRWxlbWVudFRyZWUgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICB0cmVlID0gRWxlbWVudFRyZWUoKQogICAgIHRyZWUucGFyc2Uoc291cmNlLCBwYXJzZXIpCiAgICAgcmV0dXJuIHRyZWUKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBpbnRvIGFuIGVsZW1lbnQgdHJlZSBpbmNyZW1lbnRhbGx5LCBhbmQgcmVwb3J0cwotIyB3aGF0J3MgZ29pbmcgb24gdG8gdGhlIHVzZXIuCi0jCi0jIEBwYXJhbSBzb3VyY2UgQSBmaWxlbmFtZSBvciBmaWxlIG9iamVjdCBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcGFyYW0gZXZlbnRzIEEgbGlzdCBvZiBldmVudHMgdG8gcmVwb3J0IGJhY2suICBJZiBvbWl0dGVkLCBvbmx5ICJlbmQiCi0jICAgICBldmVudHMgYXJlIHJlcG9ydGVkLgotIyBAcGFyYW0gcGFyc2VyIEFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gIElmIG5vdCBnaXZlbiwgdGhlCi0jICAgICBzdGFuZGFyZCB7QGxpbmsgWE1MUGFyc2VyfSBwYXJzZXIgaXMgdXNlZC4KLSMgQHJldHVybiBBIChldmVudCwgZWxlbSkgaXRlcmF0b3IuCiAKIGRlZiBpdGVycGFyc2Uoc291cmNlLCBldmVudHM9Tm9uZSwgcGFyc2VyPU5vbmUpOgorICAgICIiIkluY3JlbWVudGFsbHkgcGFyc2UgWE1MIGRvY3VtZW50IGludG8gRWxlbWVudFRyZWUuCisKKyAgICBUaGlzIGNsYXNzIGFsc28gcmVwb3J0cyB3aGF0J3MgZ29pbmcgb24gdG8gdGhlIHVzZXIgYmFzZWQgb24gdGhlCisgICAgKmV2ZW50cyogaXQgaXMgaW5pdGlhbGl6ZWQgd2l0aC4gIFRoZSBzdXBwb3J0ZWQgZXZlbnRzIGFyZSB0aGUgc3RyaW5ncworICAgICJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiIGFuZCAiZW5kLW5zIiAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldAorICAgIGRldGFpbGVkIG5hbWVzcGFjZSBpbmZvcm1hdGlvbikuICBJZiAqZXZlbnRzKiBpcyBvbWl0dGVkLCBvbmx5CisgICAgImVuZCIgZXZlbnRzIGFyZSByZXBvcnRlZC4KKworICAgICpzb3VyY2UqIGlzIGEgZmlsZW5hbWUgb3IgZmlsZSBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YSwgKmV2ZW50cyogaXMKKyAgICBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBiYWNrLCAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuCisKKyAgICBSZXR1cm5zIGFuIGl0ZXJhdG9yIHByb3ZpZGluZyAoZXZlbnQsIGVsZW0pIHBhaXJzLgorCisgICAgIiIiCiAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKICAgICBpZiBub3QgaGFzYXR0cihzb3VyY2UsICJyZWFkIik6CiAgICAgICAgIHNvdXJjZSA9IG9wZW4oc291cmNlLCAicmIiKQogICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCi0gICAgaWYgbm90IHBhcnNlcjoKLSAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQotICAgIHJldHVybiBfSXRlclBhcnNlSXRlcmF0b3Ioc291cmNlLCBldmVudHMsIHBhcnNlciwgY2xvc2Vfc291cmNlKQorICAgIHRyeToKKyAgICAgICAgcmV0dXJuIF9JdGVyUGFyc2VJdGVyYXRvcihzb3VyY2UsIGV2ZW50cywgcGFyc2VyLCBjbG9zZV9zb3VyY2UpCisgICAgZXhjZXB0OgorICAgICAgICBpZiBjbG9zZV9zb3VyY2U6CisgICAgICAgICAgICBzb3VyY2UuY2xvc2UoKQorICAgICAgICByYWlzZQorCisKK2NsYXNzIFhNTFB1bGxQYXJzZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXZlbnRzPU5vbmUsICosIF9wYXJzZXI9Tm9uZSk6CisgICAgICAgICMgVGhlIF9wYXJzZXIgYXJndW1lbnQgaXMgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBtdXN0IG5vdCBiZSByZWxpZWQKKyAgICAgICAgIyB1cG9uIGluIHVzZXIgY29kZS4gSXQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHJlbGVhc2UuCisgICAgICAgICMgU2VlIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNzc0MSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgICAgICMgX2VsZW1lbnR0cmVlLmMgZXhwZWN0cyBhIGxpc3QsIG5vdCBhIGRlcXVlCisgICAgICAgIHNlbGYuX2V2ZW50c19xdWV1ZSA9IFtdCisgICAgICAgIHNlbGYuX2luZGV4ID0gMAorICAgICAgICBzZWxmLl9wYXJzZXIgPSBfcGFyc2VyIG9yIFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKKyAgICAgICAgIyB3aXJlIHVwIHRoZSBwYXJzZXIgZm9yIGV2ZW50IHJlcG9ydGluZworICAgICAgICBpZiBldmVudHMgaXMgTm9uZToKKyAgICAgICAgICAgIGV2ZW50cyA9ICgiZW5kIiwpCisgICAgICAgIHNlbGYuX3BhcnNlci5fc2V0ZXZlbnRzKHNlbGYuX2V2ZW50c19xdWV1ZSwgZXZlbnRzKQorCisgICAgZGVmIGZlZWQoc2VsZiwgZGF0YSk6CisgICAgICAgICIiIkZlZWQgZW5jb2RlZCBkYXRhIHRvIHBhcnNlci4iIiIKKyAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJmZWVkKCkgY2FsbGVkIGFmdGVyIGVuZCBvZiBzdHJlYW0iKQorICAgICAgICBpZiBkYXRhOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHNlbGYuX3BhcnNlci5mZWVkKGRhdGEpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgorICAgICAgICAgICAgICAgIHNlbGYuX2V2ZW50c19xdWV1ZS5hcHBlbmQoZXhjKQorCisgICAgZGVmIF9jbG9zZV9hbmRfcmV0dXJuX3Jvb3Qoc2VsZik6CisgICAgICAgICMgaXRlcnBhcnNlIG5lZWRzIHRoaXMgdG8gc2V0IGl0cyByb290IGF0dHJpYnV0ZSBwcm9wZXJseSA6KAorICAgICAgICByb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKKyAgICAgICAgc2VsZi5fcGFyc2VyID0gTm9uZQorICAgICAgICByZXR1cm4gcm9vdAorCisgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAiIiJGaW5pc2ggZmVlZGluZyBkYXRhIHRvIHBhcnNlci4KKworICAgICAgICBVbmxpa2UgWE1MUGFyc2VyLCBkb2VzIG5vdCByZXR1cm4gdGhlIHJvb3QgZWxlbWVudC4gVXNlCisgICAgICAgIHJlYWRfZXZlbnRzKCkgdG8gY29uc3VtZSBlbGVtZW50cyBmcm9tIFhNTFB1bGxQYXJzZXIuCisgICAgICAgICIiIgorICAgICAgICBzZWxmLl9jbG9zZV9hbmRfcmV0dXJuX3Jvb3QoKQorCisgICAgZGVmIHJlYWRfZXZlbnRzKHNlbGYpOgorICAgICAgICAiIiJSZXR1cm4gYW4gaXRlcmF0b3Igb3ZlciBjdXJyZW50bHkgYXZhaWxhYmxlIChldmVudCwgZWxlbSkgcGFpcnMuCisKKyAgICAgICAgRXZlbnRzIGFyZSBjb25zdW1lZCBmcm9tIHRoZSBpbnRlcm5hbCBldmVudCBxdWV1ZSBhcyB0aGV5IGFyZQorICAgICAgICByZXRyaWV2ZWQgZnJvbSB0aGUgaXRlcmF0b3IuCisgICAgICAgICIiIgorICAgICAgICBldmVudHMgPSBzZWxmLl9ldmVudHNfcXVldWUKKyAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgIGluZGV4ID0gc2VsZi5faW5kZXgKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBldmVudCA9IGV2ZW50c1tzZWxmLl9pbmRleF0KKyAgICAgICAgICAgICAgICAjIEF2b2lkIHJldGFpbmluZyByZWZlcmVuY2VzIHRvIHBhc3QgZXZlbnRzCisgICAgICAgICAgICAgICAgZXZlbnRzW3NlbGYuX2luZGV4XSA9IE5vbmUKKyAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpbmRleCArPSAxCisgICAgICAgICAgICAjIENvbXBhY3QgdGhlIGxpc3QgaW4gYSBPKDEpIGFtb3J0aXplZCBmYXNoaW9uCisgICAgICAgICAgICAjIEFzIG5vdGVkIGFib3ZlLCBfZWxlbWVudHJlZS5jIG5lZWRzIGEgbGlzdCwgbm90IGEgZGVxdWUKKyAgICAgICAgICAgIGlmIGluZGV4ICogMiA+PSBsZW4oZXZlbnRzKToKKyAgICAgICAgICAgICAgICBldmVudHNbOmluZGV4XSA9IFtdCisgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gaW5kZXgKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXZlbnQsIEV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgcmFpc2UgZXZlbnQKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgeWllbGQgZXZlbnQKKwogCiBjbGFzcyBfSXRlclBhcnNlSXRlcmF0b3I6CiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgc291cmNlLCBldmVudHMsIHBhcnNlciwgY2xvc2Vfc291cmNlPUZhbHNlKToKKyAgICAgICAgIyBVc2UgdGhlIGludGVybmFsLCB1bmRvY3VtZW50ZWQgX3BhcnNlciBhcmd1bWVudCBmb3Igbm93OyBXaGVuIHRoZQorICAgICAgICAjIHBhcnNlciBhcmd1bWVudCBvZiBpdGVycGFyc2UgaXMgcmVtb3ZlZCwgdGhpcyBjYW4gYmUga2lsbGVkLgorICAgICAgICBzZWxmLl9wYXJzZXIgPSBYTUxQdWxsUGFyc2VyKGV2ZW50cz1ldmVudHMsIF9wYXJzZXI9cGFyc2VyKQogICAgICAgICBzZWxmLl9maWxlID0gc291cmNlCiAgICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBjbG9zZV9zb3VyY2UKLSAgICAgICAgc2VsZi5fZXZlbnRzID0gW10KLSAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgIHNlbGYuX2Vycm9yID0gTm9uZQogICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290ID0gTm9uZQotICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKLSAgICAgICAgIyB3aXJlIHVwIHRoZSBwYXJzZXIgZm9yIGV2ZW50IHJlcG9ydGluZwotICAgICAgICBwYXJzZXIgPSBzZWxmLl9wYXJzZXIuX3BhcnNlcgotICAgICAgICBhcHBlbmQgPSBzZWxmLl9ldmVudHMuYXBwZW5kCi0gICAgICAgIGlmIGV2ZW50cyBpcyBOb25lOgotICAgICAgICAgICAgZXZlbnRzID0gWyJlbmQiXQotICAgICAgICBmb3IgZXZlbnQgaW4gZXZlbnRzOgotICAgICAgICAgICAgaWYgZXZlbnQgPT0gInN0YXJ0IjoKLSAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5vcmRlcmVkX2F0dHJpYnV0ZXMgPSAxCi0gICAgICAgICAgICAgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBhdHRyaWJfaW4sIGV2ZW50PWV2ZW50LCBhcHBlbmQ9YXBwZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydD1zZWxmLl9wYXJzZXIuX3N0YXJ0X2xpc3QpOgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgc3RhcnQodGFnLCBhdHRyaWJfaW4pKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGF0dHJpYl9pbiwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PXNlbGYuX3BhcnNlci5fc3RhcnQpOgotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgc3RhcnQodGFnLCBhdHRyaWJfaW4pKSkKLSAgICAgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCi0gICAgICAgICAgICBlbGlmIGV2ZW50ID09ICJlbmQiOgotICAgICAgICAgICAgICAgIGRlZiBoYW5kbGVyKHRhZywgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kPXNlbGYuX3BhcnNlci5fZW5kKToKLSAgICAgICAgICAgICAgICAgICAgYXBwZW5kKChldmVudCwgZW5kKHRhZykpKQotICAgICAgICAgICAgICAgIHBhcnNlci5FbmRFbGVtZW50SGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gInN0YXJ0LW5zIjoKLSAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIHVyaSwgZXZlbnQ9ZXZlbnQsIGFwcGVuZD1hcHBlbmQpOgotICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCAocHJlZml4IG9yICIiLCB1cmkgb3IgIiIpKSkKLSAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsaWYgZXZlbnQgPT0gImVuZC1ucyI6Ci0gICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCBldmVudD1ldmVudCwgYXBwZW5kPWFwcGVuZCk6Ci0gICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIE5vbmUpKQotICAgICAgICAgICAgICAgIHBhcnNlci5FbmROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5rbm93biBldmVudCAlciIgJSBldmVudCkKIAogICAgIGRlZiBfX25leHRfXyhzZWxmKToKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpdGVtID0gc2VsZi5fZXZlbnRzW3NlbGYuX2luZGV4XQotICAgICAgICAgICAgICAgIHNlbGYuX2luZGV4ICs9IDEKLSAgICAgICAgICAgICAgICByZXR1cm4gaXRlbQotICAgICAgICAgICAgZXhjZXB0IEluZGV4RXJyb3I6Ci0gICAgICAgICAgICAgICAgcGFzcwotICAgICAgICAgICAgaWYgc2VsZi5fZXJyb3I6Ci0gICAgICAgICAgICAgICAgZSA9IHNlbGYuX2Vycm9yCi0gICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCi0gICAgICAgICAgICAgICAgcmFpc2UgZQotICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgc2VsZi5yb290ID0gc2VsZi5fcm9vdAotICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2ZpbGUuY2xvc2UoKQotICAgICAgICAgICAgICAgIHJhaXNlIFN0b3BJdGVyYXRpb24KLSAgICAgICAgICAgICMgbG9hZCBldmVudCBidWZmZXIKLSAgICAgICAgICAgIGRlbCBzZWxmLl9ldmVudHNbOl0KLSAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNjM4NCkKLSAgICAgICAgICAgIGlmIGRhdGE6Ci0gICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICB0cnk6CisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIGZvciBldmVudCBpbiBzZWxmLl9wYXJzZXIucmVhZF9ldmVudHMoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50CisgICAgICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyLl9wYXJzZXIgaXMgTm9uZToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAjIGxvYWQgZXZlbnQgYnVmZmVyCisgICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNiAqIDEwMjQpCisgICAgICAgICAgICAgICAgaWYgZGF0YToKICAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyLmZlZWQoZGF0YSkKLSAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IGV4YwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcm9vdCA9IHNlbGYuX3BhcnNlci5fY2xvc2VfYW5kX3JldHVybl9yb290KCkKKyAgICAgICAgICAgIHNlbGYucm9vdCA9IHNlbGYuX3Jvb3QKKyAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgaWYgc2VsZi5fY2xvc2VfZmlsZToKKyAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKKyAgICAgICAgICAgIHJhaXNlCisgICAgICAgIGlmIHNlbGYuX2Nsb3NlX2ZpbGU6CisgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKKyAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgogCiAgICAgZGVmIF9faXRlcl9fKHNlbGYpOgogICAgICAgICByZXR1cm4gc2VsZgogCi0jIwotIyBQYXJzZXMgYW4gWE1MIGRvY3VtZW50IGZyb20gYSBzdHJpbmcgY29uc3RhbnQuICBUaGlzIGZ1bmN0aW9uIGNhbgotIyBiZSB1c2VkIHRvIGVtYmVkICJYTUwgbGl0ZXJhbHMiIGluIFB5dGhvbiBjb2RlLgotIwotIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAogCiBkZWYgWE1MKHRleHQsIHBhcnNlcj1Ob25lKToKKyAgICAiIiJQYXJzZSBYTUwgZG9jdW1lbnQgZnJvbSBzdHJpbmcgY29uc3RhbnQuCisKKyAgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGVtYmVkICJYTUwgTGl0ZXJhbHMiIGluIFB5dGhvbiBjb2RlLgorCisgICAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEsICpwYXJzZXIqIGlzIGFuCisgICAgb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLCBkZWZhdWx0aW5nIHRvIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm5zIGFuIEVsZW1lbnQgaW5zdGFuY2UuCisKKyAgICAiIiIKICAgICBpZiBub3QgcGFyc2VyOgogICAgICAgICBwYXJzZXIgPSBYTUxQYXJzZXIodGFyZ2V0PVRyZWVCdWlsZGVyKCkpCiAgICAgcGFyc2VyLmZlZWQodGV4dCkKICAgICByZXR1cm4gcGFyc2VyLmNsb3NlKCkKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc3RyaW5nIGNvbnN0YW50LCBhbmQgYWxzbyByZXR1cm5zCi0jIGEgZGljdGlvbmFyeSB3aGljaCBtYXBzIGZyb20gZWxlbWVudCBpZDpzIHRvIGVsZW1lbnRzLgotIwotIyBAcGFyYW0gc291cmNlIEEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEuCi0jIEBwYXJhbSBwYXJzZXIgQW4gb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLiAgSWYgbm90IGdpdmVuLCB0aGUKLSMgICAgIHN0YW5kYXJkIHtAbGluayBYTUxQYXJzZXJ9IHBhcnNlciBpcyB1c2VkLgotIyBAcmV0dXJuIEEgdHVwbGUgY29udGFpbmluZyBhbiBFbGVtZW50IGluc3RhbmNlIGFuZCBhIGRpY3Rpb25hcnkuCi0jIEBkZWZyZXR1cm4gKEVsZW1lbnQsIGRpY3Rpb25hcnkpCiAKIGRlZiBYTUxJRCh0ZXh0LCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc3RyaW5nIGNvbnN0YW50IGZvciBpdHMgSURzLgorCisgICAgKnRleHQqIGlzIGEgc3RyaW5nIGNvbnRhaW5pbmcgWE1MIGRhdGEsICpwYXJzZXIqIGlzIGFuCisgICAgb3B0aW9uYWwgcGFyc2VyIGluc3RhbmNlLCBkZWZhdWx0aW5nIHRvIHRoZSBzdGFuZGFyZCBYTUxQYXJzZXIuCisKKyAgICBSZXR1cm5zIGFuIChFbGVtZW50LCBkaWN0KSB0dXBsZSwgaW4gd2hpY2ggdGhlCisgICAgZGljdCBtYXBzIGVsZW1lbnQgaWQ6cyB0byBlbGVtZW50cy4KKworICAgICIiIgogICAgIGlmIG5vdCBwYXJzZXI6CiAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcih0YXJnZXQ9VHJlZUJ1aWxkZXIoKSkKICAgICBwYXJzZXIuZmVlZCh0ZXh0KQpAQCAtMTM3OCwyNyArMTM1NywxOCBAQAogICAgICAgICAgICAgaWRzW2lkXSA9IGVsZW0KICAgICByZXR1cm4gdHJlZSwgaWRzCiAKLSMjCi0jIFBhcnNlcyBhbiBYTUwgZG9jdW1lbnQgZnJvbSBhIHN0cmluZyBjb25zdGFudC4gIFNhbWUgYXMge0BsaW5rICNYTUx9LgotIwotIyBAZGVmIGZyb21zdHJpbmcodGV4dCkKLSMgQHBhcmFtIHNvdXJjZSBBIHN0cmluZyBjb250YWluaW5nIFhNTCBkYXRhLgotIyBAcmV0dXJuIEFuIEVsZW1lbnQgaW5zdGFuY2UuCi0jIEBkZWZyZXR1cm4gRWxlbWVudAotCisjIFBhcnNlIFhNTCBkb2N1bWVudCBmcm9tIHN0cmluZyBjb25zdGFudC4gIEFsaWFzIGZvciBYTUwoKS4KIGZyb21zdHJpbmcgPSBYTUwKIAotIyMKLSMgUGFyc2VzIGFuIFhNTCBkb2N1bWVudCBmcm9tIGEgc2VxdWVuY2Ugb2Ygc3RyaW5nIGZyYWdtZW50cy4KLSMKLSMgQHBhcmFtIHNlcXVlbmNlIEEgbGlzdCBvciBvdGhlciBzZXF1ZW5jZSBjb250YWluaW5nIFhNTCBkYXRhIGZyYWdtZW50cy4KLSMgQHBhcmFtIHBhcnNlciBBbiBvcHRpb25hbCBwYXJzZXIgaW5zdGFuY2UuICBJZiBub3QgZ2l2ZW4sIHRoZQotIyAgICAgc3RhbmRhcmQge0BsaW5rIFhNTFBhcnNlcn0gcGFyc2VyIGlzIHVzZWQuCi0jIEByZXR1cm4gQW4gRWxlbWVudCBpbnN0YW5jZS4KLSMgQGRlZnJldHVybiBFbGVtZW50Ci0jIEBzaW5jZSAxLjMKLQogZGVmIGZyb21zdHJpbmdsaXN0KHNlcXVlbmNlLCBwYXJzZXI9Tm9uZSk6CisgICAgIiIiUGFyc2UgWE1MIGRvY3VtZW50IGZyb20gc2VxdWVuY2Ugb2Ygc3RyaW5nIGZyYWdtZW50cy4KKworICAgICpzZXF1ZW5jZSogaXMgYSBsaXN0IG9mIG90aGVyIHNlcXVlbmNlLCAqcGFyc2VyKiBpcyBhbiBvcHRpb25hbCBwYXJzZXIKKyAgICBpbnN0YW5jZSwgZGVmYXVsdGluZyB0byB0aGUgc3RhbmRhcmQgWE1MUGFyc2VyLgorCisgICAgUmV0dXJucyBhbiBFbGVtZW50IGluc3RhbmNlLgorCisgICAgIiIiCiAgICAgaWYgbm90IHBhcnNlcjoKICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQogICAgIGZvciB0ZXh0IGluIHNlcXVlbmNlOgpAQCAtMTQwNywxOSArMTM3NywyMCBAQAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLSMjCi0jIEdlbmVyaWMgZWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlci4gIFRoaXMgYnVpbGRlciBjb252ZXJ0cyBhIHNlcXVlbmNlCi0jIG9mIHtAbGluayAjVHJlZUJ1aWxkZXIuc3RhcnR9LCB7QGxpbmsgI1RyZWVCdWlsZGVyLmRhdGF9LCBhbmQge0BsaW5rCi0jICNUcmVlQnVpbGRlci5lbmR9IG1ldGhvZCBjYWxscyB0byBhIHdlbGwtZm9ybWVkIGVsZW1lbnQgc3RydWN0dXJlLgotIyA8cD4KLSMgWW91IGNhbiB1c2UgdGhpcyBjbGFzcyB0byBidWlsZCBhbiBlbGVtZW50IHN0cnVjdHVyZSB1c2luZyBhIGN1c3RvbSBYTUwKLSMgcGFyc2VyLCBvciBhIHBhcnNlciBmb3Igc29tZSBvdGhlciBYTUwtbGlrZSBmb3JtYXQuCi0jCi0jIEBwYXJhbSBlbGVtZW50X2ZhY3RvcnkgT3B0aW9uYWwgZWxlbWVudCBmYWN0b3J5LiAgVGhpcyBmYWN0b3J5Ci0jICAgIGlzIGNhbGxlZCB0byBjcmVhdGUgbmV3IEVsZW1lbnQgaW5zdGFuY2VzLCBhcyBuZWNlc3NhcnkuCiAKIGNsYXNzIFRyZWVCdWlsZGVyOgorICAgICIiIkdlbmVyaWMgZWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlci4KIAorICAgIFRoaXMgYnVpbGRlciBjb252ZXJ0cyBhIHNlcXVlbmNlIG9mIHN0YXJ0LCBkYXRhLCBhbmQgZW5kIG1ldGhvZAorICAgIGNhbGxzIHRvIGEgd2VsbC1mb3JtZWQgZWxlbWVudCBzdHJ1Y3R1cmUuCisKKyAgICBZb3UgY2FuIHVzZSB0aGlzIGNsYXNzIHRvIGJ1aWxkIGFuIGVsZW1lbnQgc3RydWN0dXJlIHVzaW5nIGEgY3VzdG9tIFhNTAorICAgIHBhcnNlciwgb3IgYSBwYXJzZXIgZm9yIHNvbWUgb3RoZXIgWE1MLWxpa2UgZm9ybWF0LgorCisgICAgKmVsZW1lbnRfZmFjdG9yeSogaXMgYW4gb3B0aW9uYWwgZWxlbWVudCBmYWN0b3J5IHdoaWNoIGlzIGNhbGxlZAorICAgIHRvIGNyZWF0ZSBuZXcgRWxlbWVudCBpbnN0YW5jZXMsIGFzIG5lY2Vzc2FyeS4KKworICAgICIiIgogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBlbGVtZW50X2ZhY3Rvcnk9Tm9uZSk6CiAgICAgICAgIHNlbGYuX2RhdGEgPSBbXSAjIGRhdGEgY29sbGVjdG9yCiAgICAgICAgIHNlbGYuX2VsZW0gPSBbXSAjIGVsZW1lbnQgc3RhY2sKQEAgLTE0MjksMTQgKzE0MDAsOCBAQAogICAgICAgICAgICAgZWxlbWVudF9mYWN0b3J5ID0gRWxlbWVudAogICAgICAgICBzZWxmLl9mYWN0b3J5ID0gZWxlbWVudF9mYWN0b3J5CiAKLSAgICAjIwotICAgICMgRmx1c2hlcyB0aGUgYnVpbGRlciBidWZmZXJzLCBhbmQgcmV0dXJucyB0aGUgdG9wbGV2ZWwgZG9jdW1lbnQKLSAgICAjIGVsZW1lbnQuCi0gICAgIwotICAgICMgQHJldHVybiBBbiBFbGVtZW50IGluc3RhbmNlLgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICIiIkZsdXNoIGJ1aWxkZXIgYnVmZmVycyBhbmQgcmV0dXJuIHRvcGxldmVsIGRvY3VtZW50IEVsZW1lbnQuIiIiCiAgICAgICAgIGFzc2VydCBsZW4oc2VsZi5fZWxlbSkgPT0gMCwgIm1pc3NpbmcgZW5kIHRhZ3MiCiAgICAgICAgIGFzc2VydCBzZWxmLl9sYXN0IGlzIG5vdCBOb25lLCAibWlzc2luZyB0b3BsZXZlbCBlbGVtZW50IgogICAgICAgICByZXR1cm4gc2VsZi5fbGFzdApAQCAtMTQ1MywyNCArMTQxOCwxNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLl9sYXN0LnRleHQgPSB0ZXh0CiAgICAgICAgICAgICBzZWxmLl9kYXRhID0gW10KIAotICAgICMjCi0gICAgIyBBZGRzIHRleHQgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gZGF0YSBBIHN0cmluZy4gIFRoaXMgc2hvdWxkIGJlIGVpdGhlciBhbiA4LWJpdCBzdHJpbmcKLSAgICAjICAgIGNvbnRhaW5pbmcgQVNDSUkgdGV4dCwgb3IgYSBVbmljb2RlIHN0cmluZy4KLQogICAgIGRlZiBkYXRhKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJBZGQgdGV4dCB0byBjdXJyZW50IGVsZW1lbnQuIiIiCiAgICAgICAgIHNlbGYuX2RhdGEuYXBwZW5kKGRhdGEpCiAKLSAgICAjIwotICAgICMgT3BlbnMgYSBuZXcgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0gICAgIyBAcGFyYW0gYXR0cmliIEEgZGljdGlvbmFyeSBjb250YWluaW5nIGVsZW1lbnQgYXR0cmlidXRlcy4KLSAgICAjIEByZXR1cm4gVGhlIG9wZW5lZCBlbGVtZW50LgotICAgICMgQGRlZnJldHVybiBFbGVtZW50Ci0KICAgICBkZWYgc3RhcnQoc2VsZiwgdGFnLCBhdHRycyk6CisgICAgICAgICIiIk9wZW4gbmV3IGVsZW1lbnQgYW5kIHJldHVybiBpdC4KKworICAgICAgICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLCAqYXR0cnMqIGlzIGEgZGljdCBjb250YWluaW5nIGVsZW1lbnQKKyAgICAgICAgYXR0cmlidXRlcy4KKworICAgICAgICAiIiIKICAgICAgICAgc2VsZi5fZmx1c2goKQogICAgICAgICBzZWxmLl9sYXN0ID0gZWxlbSA9IHNlbGYuX2ZhY3RvcnkodGFnLCBhdHRycykKICAgICAgICAgaWYgc2VsZi5fZWxlbToKQEAgLTE0NzksMTQgKzE0MzcsMTIgQEAKICAgICAgICAgc2VsZi5fdGFpbCA9IDAKICAgICAgICAgcmV0dXJuIGVsZW0KIAotICAgICMjCi0gICAgIyBDbG9zZXMgdGhlIGN1cnJlbnQgZWxlbWVudC4KLSAgICAjCi0gICAgIyBAcGFyYW0gdGFnIFRoZSBlbGVtZW50IG5hbWUuCi0gICAgIyBAcmV0dXJuIFRoZSBjbG9zZWQgZWxlbWVudC4KLSAgICAjIEBkZWZyZXR1cm4gRWxlbWVudAotCiAgICAgZGVmIGVuZChzZWxmLCB0YWcpOgorICAgICAgICAiIiJDbG9zZSBhbmQgcmV0dXJuIGN1cnJlbnQgRWxlbWVudC4KKworICAgICAgICAqdGFnKiBpcyB0aGUgZWxlbWVudCBuYW1lLgorCisgICAgICAgICIiIgogICAgICAgICBzZWxmLl9mbHVzaCgpCiAgICAgICAgIHNlbGYuX2xhc3QgPSBzZWxmLl9lbGVtLnBvcCgpCiAgICAgICAgIGFzc2VydCBzZWxmLl9sYXN0LnRhZyA9PSB0YWcsXApAQCAtMTQ5NSwyMCArMTQ1MSwxOCBAQAogICAgICAgICBzZWxmLl90YWlsID0gMQogICAgICAgICByZXR1cm4gc2VsZi5fbGFzdAogCi0jIwotIyBFbGVtZW50IHN0cnVjdHVyZSBidWlsZGVyIGZvciBYTUwgc291cmNlIGRhdGEsIGJhc2VkIG9uIHRoZQotIyA8Yj5leHBhdDwvYj4gcGFyc2VyLgotIwotIyBAa2V5cGFyYW0gdGFyZ2V0IFRhcmdldCBvYmplY3QuICBJZiBvbWl0dGVkLCB0aGUgYnVpbGRlciB1c2VzIGFuCi0jICAgICBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmQge0BsaW5rICNUcmVlQnVpbGRlcn0gY2xhc3MuCi0jIEBrZXlwYXJhbSBodG1sIFByZWRlZmluZSBIVE1MIGVudGl0aWVzLiAgVGhpcyBmbGFnIGlzIG5vdCBzdXBwb3J0ZWQKLSMgICAgIGJ5IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLgotIyBAa2V5cGFyYW0gZW5jb2RpbmcgT3B0aW9uYWwgZW5jb2RpbmcuICBJZiBnaXZlbiwgdGhlIHZhbHVlIG92ZXJyaWRlcwotIyAgICAgdGhlIGVuY29kaW5nIHNwZWNpZmllZCBpbiB0aGUgWE1MIGZpbGUuCi0jIEBzZWUgI0VsZW1lbnRUcmVlCi0jIEBzZWUgI1RyZWVCdWlsZGVyCiAKKyMgYWxzbyBzZWUgRWxlbWVudFRyZWUgYW5kIFRyZWVCdWlsZGVyCiBjbGFzcyBYTUxQYXJzZXI6CisgICAgIiIiRWxlbWVudCBzdHJ1Y3R1cmUgYnVpbGRlciBmb3IgWE1MIHNvdXJjZSBkYXRhIGJhc2VkIG9uIHRoZSBleHBhdCBwYXJzZXIuCisKKyAgICAqaHRtbCogYXJlIHByZWRlZmluZWQgSFRNTCBlbnRpdGllcyAobm90IHN1cHBvcnRlZCBjdXJyZW50bHkpLAorICAgICp0YXJnZXQqIGlzIGFuIG9wdGlvbmFsIHRhcmdldCBvYmplY3Qgd2hpY2ggZGVmYXVsdHMgdG8gYW4gaW5zdGFuY2Ugb2YgdGhlCisgICAgc3RhbmRhcmQgVHJlZUJ1aWxkZXIgY2xhc3MsICplbmNvZGluZyogaXMgYW4gb3B0aW9uYWwgZW5jb2Rpbmcgc3RyaW5nCisgICAgd2hpY2ggaWYgZ2l2ZW4sIG92ZXJyaWRlcyB0aGUgZW5jb2Rpbmcgc3BlY2lmaWVkIGluIHRoZSBYTUwgZmlsZToKKyAgICBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzCisKKyAgICAiIiIKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBodG1sPTAsIHRhcmdldD1Ob25lLCBlbmNvZGluZz1Ob25lKToKICAgICAgICAgdHJ5OgpAQCAtMTU0MSwxOSArMTQ5NSwxMCBAQAogICAgICAgICAgICAgcGFyc2VyLkNvbW1lbnRIYW5kbGVyID0gdGFyZ2V0LmNvbW1lbnQKICAgICAgICAgaWYgaGFzYXR0cih0YXJnZXQsICdwaScpOgogICAgICAgICAgICAgcGFyc2VyLlByb2Nlc3NpbmdJbnN0cnVjdGlvbkhhbmRsZXIgPSB0YXJnZXQucGkKLSAgICAgICAgIyBsZXQgZXhwYXQgZG8gdGhlIGJ1ZmZlcmluZywgaWYgc3VwcG9ydGVkCi0gICAgICAgIHRyeToKLSAgICAgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcwotICAgICAgICAjIHVzZSBuZXctc3R5bGUgYXR0cmlidXRlIGhhbmRsaW5nLCBpZiBzdXBwb3J0ZWQKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKLSAgICAgICAgICAgIGlmIGhhc2F0dHIodGFyZ2V0LCAnc3RhcnQnKToKLSAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnRFbGVtZW50SGFuZGxlciA9IHNlbGYuX3N0YXJ0X2xpc3QKLSAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgotICAgICAgICAgICAgcGFzcworICAgICAgICAjIENvbmZpZ3VyZSBweWV4cGF0OiBidWZmZXJpbmcsIG5ldy1zdHlsZSBhdHRyaWJ1dGUgaGFuZGxpbmcuCisgICAgICAgIHBhcnNlci5idWZmZXJfdGV4dCA9IDEKKyAgICAgICAgcGFyc2VyLm9yZGVyZWRfYXR0cmlidXRlcyA9IDEKKyAgICAgICAgcGFyc2VyLnNwZWNpZmllZF9hdHRyaWJ1dGVzID0gMQogICAgICAgICBzZWxmLl9kb2N0eXBlID0gTm9uZQogICAgICAgICBzZWxmLmVudGl0eSA9IHt9CiAgICAgICAgIHRyeToKQEAgLTE1NjEsNiArMTUwNiwzOSBAQAogICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CiAgICAgICAgICAgICBwYXNzICMgdW5rbm93bgogCisgICAgZGVmIF9zZXRldmVudHMoc2VsZiwgZXZlbnRzX3F1ZXVlLCBldmVudHNfdG9fcmVwb3J0KToKKyAgICAgICAgIyBJbnRlcm5hbCBBUEkgZm9yIFhNTFB1bGxQYXJzZXIKKyAgICAgICAgIyBldmVudHNfdG9fcmVwb3J0OiBhIGxpc3Qgb2YgZXZlbnRzIHRvIHJlcG9ydCBkdXJpbmcgcGFyc2luZyAoc2FtZSBhcworICAgICAgICAjIHRoZSAqZXZlbnRzKiBvZiBYTUxQdWxsUGFyc2VyJ3MgY29uc3RydWN0b3IuCisgICAgICAgICMgZXZlbnRzX3F1ZXVlOiBhIGxpc3Qgb2YgYWN0dWFsIHBhcnNpbmcgZXZlbnRzIHRoYXQgd2lsbCBiZSBwb3B1bGF0ZWQKKyAgICAgICAgIyBieSB0aGUgdW5kZXJseWluZyBwYXJzZXIuCisgICAgICAgICMKKyAgICAgICAgcGFyc2VyID0gc2VsZi5fcGFyc2VyCisgICAgICAgIGFwcGVuZCA9IGV2ZW50c19xdWV1ZS5hcHBlbmQKKyAgICAgICAgZm9yIGV2ZW50X25hbWUgaW4gZXZlbnRzX3RvX3JlcG9ydDoKKyAgICAgICAgICAgIGlmIGV2ZW50X25hbWUgPT0gInN0YXJ0IjoKKyAgICAgICAgICAgICAgICBwYXJzZXIub3JkZXJlZF9hdHRyaWJ1dGVzID0gMQorICAgICAgICAgICAgICAgIHBhcnNlci5zcGVjaWZpZWRfYXR0cmlidXRlcyA9IDEKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcih0YWcsIGF0dHJpYl9pbiwgZXZlbnQ9ZXZlbnRfbmFtZSwgYXBwZW5kPWFwcGVuZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydD1zZWxmLl9zdGFydCk6CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZCgoZXZlbnQsIHN0YXJ0KHRhZywgYXR0cmliX2luKSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLlN0YXJ0RWxlbWVudEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbGlmIGV2ZW50X25hbWUgPT0gImVuZCI6CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIodGFnLCBldmVudD1ldmVudF9uYW1lLCBhcHBlbmQ9YXBwZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZD1zZWxmLl9lbmQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBlbmQodGFnKSkpCisgICAgICAgICAgICAgICAgcGFyc2VyLkVuZEVsZW1lbnRIYW5kbGVyID0gaGFuZGxlcgorICAgICAgICAgICAgZWxpZiBldmVudF9uYW1lID09ICJzdGFydC1ucyI6CisgICAgICAgICAgICAgICAgZGVmIGhhbmRsZXIocHJlZml4LCB1cmksIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCAocHJlZml4IG9yICIiLCB1cmkgb3IgIiIpKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlciA9IGhhbmRsZXIKKyAgICAgICAgICAgIGVsaWYgZXZlbnRfbmFtZSA9PSAiZW5kLW5zIjoKKyAgICAgICAgICAgICAgICBkZWYgaGFuZGxlcihwcmVmaXgsIGV2ZW50PWV2ZW50X25hbWUsIGFwcGVuZD1hcHBlbmQpOgorICAgICAgICAgICAgICAgICAgICBhcHBlbmQoKGV2ZW50LCBOb25lKSkKKyAgICAgICAgICAgICAgICBwYXJzZXIuRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIgPSBoYW5kbGVyCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoInVua25vd24gZXZlbnQgJXIiICUgZXZlbnRfbmFtZSkKKwogICAgIGRlZiBfcmFpc2VlcnJvcihzZWxmLCB2YWx1ZSk6CiAgICAgICAgIGVyciA9IFBhcnNlRXJyb3IodmFsdWUpCiAgICAgICAgIGVyci5jb2RlID0gdmFsdWUuY29kZQpAQCAtMTU3OCwyMSArMTU1NiwxNiBAQAogICAgICAgICAgICAgc2VsZi5fbmFtZXNba2V5XSA9IG5hbWUKICAgICAgICAgcmV0dXJuIG5hbWUKIAotICAgIGRlZiBfc3RhcnQoc2VsZiwgdGFnLCBhdHRyaWJfaW4pOgorICAgIGRlZiBfc3RhcnQoc2VsZiwgdGFnLCBhdHRyX2xpc3QpOgorICAgICAgICAjIEhhbmRsZXIgZm9yIGV4cGF0J3MgU3RhcnRFbGVtZW50SGFuZGxlci4gU2luY2Ugb3JkZXJlZF9hdHRyaWJ1dGVzCisgICAgICAgICMgaXMgc2V0LCB0aGUgYXR0cmlidXRlcyBhcmUgcmVwb3J0ZWQgYXMgYSBsaXN0IG9mIGFsdGVybmF0aW5nCisgICAgICAgICMgYXR0cmlidXRlIG5hbWUsdmFsdWUuCiAgICAgICAgIGZpeG5hbWUgPSBzZWxmLl9maXhuYW1lCiAgICAgICAgIHRhZyA9IGZpeG5hbWUodGFnKQogICAgICAgICBhdHRyaWIgPSB7fQotICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBhdHRyaWJfaW4uaXRlbXMoKToKLSAgICAgICAgICAgIGF0dHJpYltmaXhuYW1lKGtleSldID0gdmFsdWUKLSAgICAgICAgcmV0dXJuIHNlbGYudGFyZ2V0LnN0YXJ0KHRhZywgYXR0cmliKQotCi0gICAgZGVmIF9zdGFydF9saXN0KHNlbGYsIHRhZywgYXR0cmliX2luKToKLSAgICAgICAgZml4bmFtZSA9IHNlbGYuX2ZpeG5hbWUKLSAgICAgICAgdGFnID0gZml4bmFtZSh0YWcpCi0gICAgICAgIGF0dHJpYiA9IHt9Ci0gICAgICAgIGlmIGF0dHJpYl9pbjoKLSAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihhdHRyaWJfaW4pLCAyKToKLSAgICAgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShhdHRyaWJfaW5baV0pXSA9IGF0dHJpYl9pbltpKzFdCisgICAgICAgIGlmIGF0dHJfbGlzdDoKKyAgICAgICAgICAgIGZvciBpIGluIHJhbmdlKDAsIGxlbihhdHRyX2xpc3QpLCAyKToKKyAgICAgICAgICAgICAgICBhdHRyaWJbZml4bmFtZShhdHRyX2xpc3RbaV0pXSA9IGF0dHJfbGlzdFtpKzFdCiAgICAgICAgIHJldHVybiBzZWxmLnRhcmdldC5zdGFydCh0YWcsIGF0dHJpYikKIAogICAgIGRlZiBfZW5kKHNlbGYsIHRhZyk6CkBAIC0xNjUwLDE1ICsxNjIzLDEzIEBACiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZG9jdHlwZShuYW1lLCBwdWJpZCwgc3lzdGVtWzE6LTFdKQogICAgICAgICAgICAgICAgIHNlbGYuX2RvY3R5cGUgPSBOb25lCiAKLSAgICAjIwotICAgICMgKERlcHJlY2F0ZWQpIEhhbmRsZXMgYSBkb2N0eXBlIGRlY2xhcmF0aW9uLgotICAgICMKLSAgICAjIEBwYXJhbSBuYW1lIERvY3R5cGUgbmFtZS4KLSAgICAjIEBwYXJhbSBwdWJpZCBQdWJsaWMgaWRlbnRpZmllci4KLSAgICAjIEBwYXJhbSBzeXN0ZW0gU3lzdGVtIGlkZW50aWZpZXIuCi0KICAgICBkZWYgZG9jdHlwZShzZWxmLCBuYW1lLCBwdWJpZCwgc3lzdGVtKToKLSAgICAgICAgIiIiVGhpcyBtZXRob2Qgb2YgWE1MUGFyc2VyIGlzIGRlcHJlY2F0ZWQuIiIiCisgICAgICAgICIiIihEZXByZWNhdGVkKSAgSGFuZGxlIGRvY3R5cGUgZGVjbGFyYXRpb24KKworICAgICAgICAqbmFtZSogaXMgdGhlIERvY3R5cGUgbmFtZSwgKnB1YmlkKiBpcyB0aGUgcHVibGljIGlkZW50aWZpZXIsCisgICAgICAgIGFuZCAqc3lzdGVtKiBpcyB0aGUgc3lzdGVtIGlkZW50aWZpZXIuCisKKyAgICAgICAgIiIiCiAgICAgICAgIHdhcm5pbmdzLndhcm4oCiAgICAgICAgICAgICAiVGhpcyBtZXRob2Qgb2YgWE1MUGFyc2VyIGlzIGRlcHJlY2F0ZWQuICBEZWZpbmUgZG9jdHlwZSgpICIKICAgICAgICAgICAgICJtZXRob2Qgb24gdGhlIFRyZWVCdWlsZGVyIHRhcmdldC4iLApAQCAtMTY2OCwyNCArMTYzOSwxNSBAQAogICAgICMgc2VudGluZWwsIGlmIGRvY3R5cGUgaXMgcmVkZWZpbmVkIGluIGEgc3ViY2xhc3MKICAgICBfX2RvY3R5cGUgPSBkb2N0eXBlCiAKLSAgICAjIwotICAgICMgRmVlZHMgZGF0YSB0byB0aGUgcGFyc2VyLgotICAgICMKLSAgICAjIEBwYXJhbSBkYXRhIEVuY29kZWQgZGF0YS4KLQogICAgIGRlZiBmZWVkKHNlbGYsIGRhdGEpOgorICAgICAgICAiIiJGZWVkIGVuY29kZWQgZGF0YSB0byBwYXJzZXIuIiIiCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHNlbGYucGFyc2VyLlBhcnNlKGRhdGEsIDApCiAgICAgICAgIGV4Y2VwdCBzZWxmLl9lcnJvciBhcyB2OgogICAgICAgICAgICAgc2VsZi5fcmFpc2VlcnJvcih2KQogCi0gICAgIyMKLSAgICAjIEZpbmlzaGVzIGZlZWRpbmcgZGF0YSB0byB0aGUgcGFyc2VyLgotICAgICMKLSAgICAjIEByZXR1cm4gQW4gZWxlbWVudCBzdHJ1Y3R1cmUuCi0gICAgIyBAZGVmcmV0dXJuIEVsZW1lbnQKLQogICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgIiIiRmluaXNoIGZlZWRpbmcgZGF0YSB0byBwYXJzZXIgYW5kIHJldHVybiBlbGVtZW50IHN0cnVjdHVyZS4iIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgc2VsZi5wYXJzZXIuUGFyc2UoIiIsIDEpICMgZW5kIG9mIGRhdGEKICAgICAgICAgZXhjZXB0IHNlbGYuX2Vycm9yIGFzIHY6CkBAIC0xNzA0LDEwMyArMTY2NiwxMiBAQAogCiAjIEltcG9ydCB0aGUgQyBhY2NlbGVyYXRvcnMKIHRyeToKKyAgICAjIEVsZW1lbnQgaXMgZ29pbmcgdG8gYmUgc2hhZG93ZWQgYnkgdGhlIEMgaW1wbGVtZW50YXRpb24uIFdlIG5lZWQgdG8ga2VlcAorICAgICMgdGhlIFB5dGhvbiB2ZXJzaW9uIG9mIGl0IGFjY2Vzc2libGUgZm9yIHNvbWUgImNyZWF0aXZlIiBieSBleHRlcm5hbCBjb2RlCisgICAgIyAoc2VlIHRlc3RzKQorICAgIF9FbGVtZW50X1B5ID0gRWxlbWVudAorCiAgICAgIyBFbGVtZW50LCBTdWJFbGVtZW50LCBQYXJzZUVycm9yLCBUcmVlQnVpbGRlciwgWE1MUGFyc2VyCiAgICAgZnJvbSBfZWxlbWVudHRyZWUgaW1wb3J0ICoKIGV4Y2VwdCBJbXBvcnRFcnJvcjoKICAgICBwYXNzCi1lbHNlOgotICAgICMgT3ZlcndyaXRlICdFbGVtZW50VHJlZS5wYXJzZScgYW5kICdpdGVycGFyc2UnIHRvIHVzZSB0aGUgQyBYTUxQYXJzZXIKLQotICAgIGNsYXNzIEVsZW1lbnRUcmVlKEVsZW1lbnRUcmVlKToKLSAgICAgICAgZGVmIHBhcnNlKHNlbGYsIHNvdXJjZSwgcGFyc2VyPU5vbmUpOgotICAgICAgICAgICAgY2xvc2Vfc291cmNlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBoYXNhdHRyKHNvdXJjZSwgJ3JlYWQnKToKLSAgICAgICAgICAgICAgICBzb3VyY2UgPSBvcGVuKHNvdXJjZSwgJ3JiJykKLSAgICAgICAgICAgICAgICBjbG9zZV9zb3VyY2UgPSBUcnVlCi0gICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgaWYgcGFyc2VyIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHNvdXJjZS5yZWFkKDY1NTM2KQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlci5mZWVkKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuY2xvc2UoKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHBhcnNlciA9IFhNTFBhcnNlcigpCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX3Jvb3QgPSBwYXJzZXIuX3BhcnNlKHNvdXJjZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fcm9vdAotICAgICAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgICAgICBpZiBjbG9zZV9zb3VyY2U6Ci0gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5jbG9zZSgpCi0KLSAgICBjbGFzcyBpdGVycGFyc2U6Ci0gICAgICAgICIiIlBhcnNlcyBhbiBYTUwgc2VjdGlvbiBpbnRvIGFuIGVsZW1lbnQgdHJlZSBpbmNyZW1lbnRhbGx5LgotCi0gICAgICAgIFJlcG9ydHMgd2hhdOKAmXMgZ29pbmcgb24gdG8gdGhlIHVzZXIuICdzb3VyY2UnIGlzIGEgZmlsZW5hbWUgb3IgZmlsZQotICAgICAgICBvYmplY3QgY29udGFpbmluZyBYTUwgZGF0YS4gJ2V2ZW50cycgaXMgYSBsaXN0IG9mIGV2ZW50cyB0byByZXBvcnQgYmFjay4KLSAgICAgICAgVGhlIHN1cHBvcnRlZCBldmVudHMgYXJlIHRoZSBzdHJpbmdzICJzdGFydCIsICJlbmQiLCAic3RhcnQtbnMiIGFuZAotICAgICAgICAiZW5kLW5zIiAodGhlICJucyIgZXZlbnRzIGFyZSB1c2VkIHRvIGdldCBkZXRhaWxlZCBuYW1lc3BhY2UKLSAgICAgICAgaW5mb3JtYXRpb24pLiBJZiAnZXZlbnRzJyBpcyBvbWl0dGVkLCBvbmx5ICJlbmQiIGV2ZW50cyBhcmUgcmVwb3J0ZWQuCi0gICAgICAgICdwYXJzZXInIGlzIGFuIG9wdGlvbmFsIHBhcnNlciBpbnN0YW5jZS4gSWYgbm90IGdpdmVuLCB0aGUgc3RhbmRhcmQKLSAgICAgICAgWE1MUGFyc2VyIHBhcnNlciBpcyB1c2VkLiBSZXR1cm5zIGFuIGl0ZXJhdG9yIHByb3ZpZGluZwotICAgICAgICAoZXZlbnQsIGVsZW0pIHBhaXJzLgotICAgICAgICAiIiIKLQotICAgICAgICByb290ID0gTm9uZQotICAgICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZSwgZXZlbnRzPU5vbmUsIHBhcnNlcj1Ob25lKToKLSAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIoZmlsZSwgJ3JlYWQnKToKLSAgICAgICAgICAgICAgICBmaWxlID0gb3BlbihmaWxlLCAncmInKQotICAgICAgICAgICAgICAgIHNlbGYuX2Nsb3NlX2ZpbGUgPSBUcnVlCi0gICAgICAgICAgICBzZWxmLl9maWxlID0gZmlsZQotICAgICAgICAgICAgc2VsZi5fZXZlbnRzID0gW10KLSAgICAgICAgICAgIHNlbGYuX2luZGV4ID0gMAotICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBOb25lCi0gICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290ID0gTm9uZQotICAgICAgICAgICAgaWYgcGFyc2VyIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcGFyc2VyID0gWE1MUGFyc2VyKHRhcmdldD1UcmVlQnVpbGRlcigpKQotICAgICAgICAgICAgc2VsZi5fcGFyc2VyID0gcGFyc2VyCi0gICAgICAgICAgICBzZWxmLl9wYXJzZXIuX3NldGV2ZW50cyhzZWxmLl9ldmVudHMsIGV2ZW50cykKLQotICAgICAgICBkZWYgX19uZXh0X18oc2VsZik6Ci0gICAgICAgICAgICB3aGlsZSBUcnVlOgotICAgICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAgICAgaXRlbSA9IHNlbGYuX2V2ZW50c1tzZWxmLl9pbmRleF0KLSAgICAgICAgICAgICAgICAgICAgc2VsZi5faW5kZXggKz0gMQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbQotICAgICAgICAgICAgICAgIGV4Y2VwdCBJbmRleEVycm9yOgotICAgICAgICAgICAgICAgICAgICBwYXNzCi0gICAgICAgICAgICAgICAgaWYgc2VsZi5fZXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIGUgPSBzZWxmLl9lcnJvcgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9lcnJvciA9IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgZQotICAgICAgICAgICAgICAgIGlmIHNlbGYuX3BhcnNlciBpcyBOb25lOgotICAgICAgICAgICAgICAgICAgICBzZWxmLnJvb3QgPSBzZWxmLl9yb290Ci0gICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuX2Nsb3NlX2ZpbGU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9maWxlLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgcmFpc2UgU3RvcEl0ZXJhdGlvbgotICAgICAgICAgICAgICAgICMgbG9hZCBldmVudCBidWZmZXIKLSAgICAgICAgICAgICAgICBkZWwgc2VsZi5fZXZlbnRzWzpdCi0gICAgICAgICAgICAgICAgc2VsZi5faW5kZXggPSAwCi0gICAgICAgICAgICAgICAgZGF0YSA9IHNlbGYuX2ZpbGUucmVhZCgxNjM4NCkKLSAgICAgICAgICAgICAgICBpZiBkYXRhOgotICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIuZmVlZChkYXRhKQotICAgICAgICAgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3IgYXMgZXhjOgotICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZXJyb3IgPSBleGMKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBzZWxmLl9yb290ID0gc2VsZi5fcGFyc2VyLmNsb3NlKCkKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5fcGFyc2VyID0gTm9uZQotCi0gICAgICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKLSAgICAgICAgICAgIHJldHVybiBzZWxmCi0KLSMgY29tcGF0aWJpbGl0eQotWE1MVHJlZUJ1aWxkZXIgPSBYTUxQYXJzZXIKLQotIyB3b3JrYXJvdW5kIGNpcmN1bGFyIGltcG9ydC4KLXRyeToKLSAgICBmcm9tIEVsZW1lbnRDMTROIGltcG9ydCBfc2VyaWFsaXplX2MxNG4KLSAgICBfc2VyaWFsaXplWyJjMTRuIl0gPSBfc2VyaWFsaXplX2MxNG4KLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBwYXNzCmRpZmYgLS1naXQgYS9MaWIveG1sL3NheC9leHBhdHJlYWRlci5weSBiL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5CmluZGV4IGEyMjdjZGEuLjNiNjM3MzcgMTAwNjQ0Ci0tLSBhL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5CisrKyBiL0xpYi94bWwvc2F4L2V4cGF0cmVhZGVyLnB5CkBAIC00Myw2ICs0Myw5IEBACiAgICAgX21rcHJveHkgPSB3ZWFrcmVmLnByb3h5CiAgICAgZGVsIHdlYWtyZWYsIF93ZWFrcmVmCiAKK2NsYXNzIF9DbG9zZWRQYXJzZXI6CisgICAgcGFzcworCiAjIC0tLSBFeHBhdExvY2F0b3IKIAogY2xhc3MgRXhwYXRMb2NhdG9yKHhtbHJlYWRlci5Mb2NhdG9yKToKQEAgLTIxMSwxNyArMjE0LDI3IEBACiAgICAgICAgICAgICBzZWxmLl9lcnJfaGFuZGxlci5mYXRhbEVycm9yKGV4YykKIAogICAgIGRlZiBjbG9zZShzZWxmKToKLSAgICAgICAgaWYgc2VsZi5fZW50aXR5X3N0YWNrOgorICAgICAgICBpZiAoc2VsZi5fZW50aXR5X3N0YWNrIG9yIHNlbGYuX3BhcnNlciBpcyBOb25lIG9yCisgICAgICAgICAgICBpc2luc3RhbmNlKHNlbGYuX3BhcnNlciwgX0Nsb3NlZFBhcnNlcikpOgogICAgICAgICAgICAgIyBJZiB3ZSBhcmUgY29tcGxldGluZyBhbiBleHRlcm5hbCBlbnRpdHksIGRvIG5vdGhpbmcgaGVyZQogICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIHNlbGYuZmVlZCgiIiwgaXNGaW5hbCA9IDEpCi0gICAgICAgIHNlbGYuX2NvbnRfaGFuZGxlci5lbmREb2N1bWVudCgpCi0gICAgICAgIHNlbGYuX3BhcnNpbmcgPSAwCi0gICAgICAgICMgYnJlYWsgY3ljbGUgY3JlYXRlZCBieSBleHBhdCBoYW5kbGVycyBwb2ludGluZyB0byBvdXIgbWV0aG9kcwotICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCi0gICAgICAgIGJzID0gc2VsZi5fc291cmNlLmdldEJ5dGVTdHJlYW0oKQotICAgICAgICBpZiBicyBpcyBub3QgTm9uZToKLSAgICAgICAgICAgIGJzLmNsb3NlKCkKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgc2VsZi5mZWVkKCIiLCBpc0ZpbmFsID0gMSkKKyAgICAgICAgICAgIHNlbGYuX2NvbnRfaGFuZGxlci5lbmREb2N1bWVudCgpCisgICAgICAgICAgICBzZWxmLl9wYXJzaW5nID0gMAorICAgICAgICAgICAgIyBicmVhayBjeWNsZSBjcmVhdGVkIGJ5IGV4cGF0IGhhbmRsZXJzIHBvaW50aW5nIHRvIG91ciBtZXRob2RzCisgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBOb25lCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBzZWxmLl9wYXJzaW5nID0gMAorICAgICAgICAgICAgaWYgc2VsZi5fcGFyc2VyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgICMgS2VlcCBFcnJvckNvbHVtbk51bWJlciBhbmQgRXJyb3JMaW5lTnVtYmVyIGFmdGVyIGNsb3NpbmcuCisgICAgICAgICAgICAgICAgcGFyc2VyID0gX0Nsb3NlZFBhcnNlcigpCisgICAgICAgICAgICAgICAgcGFyc2VyLkVycm9yQ29sdW1uTnVtYmVyID0gc2VsZi5fcGFyc2VyLkVycm9yQ29sdW1uTnVtYmVyCisgICAgICAgICAgICAgICAgcGFyc2VyLkVycm9yTGluZU51bWJlciA9IHNlbGYuX3BhcnNlci5FcnJvckxpbmVOdW1iZXIKKyAgICAgICAgICAgICAgICBzZWxmLl9wYXJzZXIgPSBwYXJzZXIKKyAgICAgICAgICAgIGJzID0gc2VsZi5fc291cmNlLmdldEJ5dGVTdHJlYW0oKQorICAgICAgICAgICAgaWYgYnMgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgYnMuY2xvc2UoKQogCiAgICAgZGVmIF9yZXNldF9jb250X2hhbmRsZXIoc2VsZik6CiAgICAgICAgIHNlbGYuX3BhcnNlci5Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb25IYW5kbGVyID0gXApkaWZmIC0tZ2l0IGEvTGliL3htbC9zYXgvc2F4dXRpbHMucHkgYi9MaWIveG1sL3NheC9zYXh1dGlscy5weQppbmRleCA3NGRlOWIwLi4xZDNkMGVjIDEwMDY0NAotLS0gYS9MaWIveG1sL3NheC9zYXh1dGlscy5weQorKysgYi9MaWIveG1sL3NheC9zYXh1dGlscy5weQpAQCAtMzQ2LDcgKzM0Niw3IEBACiAgICAgICAgIGYgPSBzb3VyY2UKICAgICAgICAgc291cmNlID0geG1scmVhZGVyLklucHV0U291cmNlKCkKICAgICAgICAgc291cmNlLnNldEJ5dGVTdHJlYW0oZikKLSAgICAgICAgaWYgaGFzYXR0cihmLCAibmFtZSIpOgorICAgICAgICBpZiBoYXNhdHRyKGYsICJuYW1lIikgYW5kIGlzaW5zdGFuY2UoZi5uYW1lLCBzdHIpOgogICAgICAgICAgICAgc291cmNlLnNldFN5c3RlbUlkKGYubmFtZSkKIAogICAgIGlmIHNvdXJjZS5nZXRCeXRlU3RyZWFtKCkgaXMgTm9uZToKZGlmZiAtLWdpdCBhL0xpYi94bWxycGMvY2xpZW50LnB5IGIvTGliL3htbHJwYy9jbGllbnQucHkKaW5kZXggY2EyYWM5Zi4uOWRlNTExMSAxMDA2NDQKLS0tIGEvTGliL3htbHJwYy9jbGllbnQucHkKKysrIGIvTGliL3htbHJwYy9jbGllbnQucHkKQEAgLTEzNSw3ICsxMzUsNiBAQAogaW1wb3J0IGh0dHAuY2xpZW50CiBpbXBvcnQgdXJsbGliLnBhcnNlCiBmcm9tIHhtbC5wYXJzZXJzIGltcG9ydCBleHBhdAotaW1wb3J0IHNvY2tldAogaW1wb3J0IGVycm5vCiBmcm9tIGlvIGltcG9ydCBCeXRlc0lPCiB0cnk6CkBAIC00NDcsOCArNDQ2LDEzIEBACiAgICAgICAgIHNlbGYuX3BhcnNlci5QYXJzZShkYXRhLCAwKQogCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBzZWxmLl9wYXJzZXIuUGFyc2UoIiIsIDEpICMgZW5kIG9mIGRhdGEKLSAgICAgICAgZGVsIHNlbGYuX3RhcmdldCwgc2VsZi5fcGFyc2VyICMgZ2V0IHJpZCBvZiBjaXJjdWxhciByZWZlcmVuY2VzCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHBhcnNlciA9IHNlbGYuX3BhcnNlcgorICAgICAgICBleGNlcHQgQXR0cmlidXRlRXJyb3I6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBkZWwgc2VsZi5fdGFyZ2V0LCBzZWxmLl9wYXJzZXIgIyBnZXQgcmlkIG9mIGNpcmN1bGFyIHJlZmVyZW5jZXMKKyAgICAgICAgICAgIHBhcnNlci5QYXJzZShiIiIsIFRydWUpICMgZW5kIG9mIGRhdGEKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBYTUwtUlBDIG1hcnNoYWxsaW5nIGFuZCB1bm1hcnNoYWxsaW5nIGNvZGUKQEAgLTgyNyw3ICs4MzEsNyBAQAogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigidW5leHBlY3RlZCB0eXBlIGluIG11bHRpY2FsbCByZXN1bHQiKQogCiBjbGFzcyBNdWx0aUNhbGw6Ci0gICAgIiIic2VydmVyIC0+IGEgb2JqZWN0IHVzZWQgdG8gYm94Y2FyIG1ldGhvZCBjYWxscworICAgICIiInNlcnZlciAtPiBhbiBvYmplY3QgdXNlZCB0byBib3hjYXIgbWV0aG9kIGNhbGxzCiAKICAgICBzZXJ2ZXIgc2hvdWxkIGJlIGEgU2VydmVyUHJveHkgb2JqZWN0LgogCkBAIC0xMDUyLDcgKzEwNTYsNyBAQAogICAgICAgICAgICAgZGVjb2RlZCA9IGd6Zi5yZWFkKCkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGRlY29kZWQgPSBnemYucmVhZChtYXhfZGVjb2RlICsgMSkKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiaW52YWxpZCBkYXRhIikKICAgICBmLmNsb3NlKCkKICAgICBnemYuY2xvc2UoKQpAQCAtMTA4MCw4ICsxMDg0LDEwIEBACiAgICAgICAgIGd6aXAuR3ppcEZpbGUuX19pbml0X18oc2VsZiwgbW9kZT0icmIiLCBmaWxlb2JqPXNlbGYuaW8pCiAKICAgICBkZWYgY2xvc2Uoc2VsZik6Ci0gICAgICAgIGd6aXAuR3ppcEZpbGUuY2xvc2Uoc2VsZikKLSAgICAgICAgc2VsZi5pby5jbG9zZSgpCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGd6aXAuR3ppcEZpbGUuY2xvc2Uoc2VsZikKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIHNlbGYuaW8uY2xvc2UoKQogCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMzksOCArMTE0NSw5IEBACiAgICAgICAgIGZvciBpIGluICgwLCAxKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zaW5nbGVfcmVxdWVzdChob3N0LCBoYW5kbGVyLCByZXF1ZXN0X2JvZHksIHZlcmJvc2UpCi0gICAgICAgICAgICBleGNlcHQgc29ja2V0LmVycm9yIGFzIGU6Ci0gICAgICAgICAgICAgICAgaWYgaSBvciBlLmVycm5vIG5vdCBpbiAoZXJybm8uRUNPTk5SRVNFVCwgZXJybm8uRUNPTk5BQk9SVEVELCBlcnJuby5FUElQRSk6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlOgorICAgICAgICAgICAgICAgIGlmIGkgb3IgZS5lcnJubyBub3QgaW4gKGVycm5vLkVDT05OUkVTRVQsIGVycm5vLkVDT05OQUJPUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJuby5FUElQRSk6CiAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICBleGNlcHQgaHR0cC5jbGllbnQuQmFkU3RhdHVzTGluZTogI2Nsb3NlIGFmdGVyIHdlIHNlbnQgcmVxdWVzdAogICAgICAgICAgICAgICAgIGlmIGk6CkBAIC0xMTc3LDcgKzExODQsNyBAQAogICAgICMjCiAgICAgIyBDcmVhdGUgcGFyc2VyLgogICAgICMKLSAgICAjIEByZXR1cm4gQSAyLXR1cGxlIGNvbnRhaW5pbmcgYSBwYXJzZXIgYW5kIGEgdW5tYXJzaGFsbGVyLgorICAgICMgQHJldHVybiBBIDItdHVwbGUgY29udGFpbmluZyBhIHBhcnNlciBhbmQgYW4gdW5tYXJzaGFsbGVyLgogCiAgICAgZGVmIGdldHBhcnNlcihzZWxmKToKICAgICAgICAgIyBnZXQgcGFyc2VyIGFuZCB1bm1hcnNoYWxsZXIKQEAgLTEyMzUsOSArMTI0MiwxMCBAQAogICAgICMgVXNlZCBpbiB0aGUgZXZlbnQgb2Ygc29ja2V0IGVycm9ycy4KICAgICAjCiAgICAgZGVmIGNsb3NlKHNlbGYpOgotICAgICAgICBpZiBzZWxmLl9jb25uZWN0aW9uWzFdOgotICAgICAgICAgICAgc2VsZi5fY29ubmVjdGlvblsxXS5jbG9zZSgpCisgICAgICAgIGhvc3QsIGNvbm5lY3Rpb24gPSBzZWxmLl9jb25uZWN0aW9uCisgICAgICAgIGlmIGNvbm5lY3Rpb246CiAgICAgICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gKE5vbmUsIE5vbmUpCisgICAgICAgICAgICBjb25uZWN0aW9uLmNsb3NlKCkKIAogICAgICMjCiAgICAgIyBTZW5kIEhUVFAgcmVxdWVzdC4KQEAgLTEzMzIsNiArMTM0MCwxMSBAQAogY2xhc3MgU2FmZVRyYW5zcG9ydChUcmFuc3BvcnQpOgogICAgICIiIkhhbmRsZXMgYW4gSFRUUFMgdHJhbnNhY3Rpb24gdG8gYW4gWE1MLVJQQyBzZXJ2ZXIuIiIiCiAKKyAgICBkZWYgX19pbml0X18oc2VsZiwgdXNlX2RhdGV0aW1lPUZhbHNlLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSwgKiwKKyAgICAgICAgICAgICAgICAgY29udGV4dD1Ob25lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyh1c2VfZGF0ZXRpbWU9dXNlX2RhdGV0aW1lLCB1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcykKKyAgICAgICAgc2VsZi5jb250ZXh0ID0gY29udGV4dAorCiAgICAgIyBGSVhNRTogbW9zdGx5IHVudGVzdGVkCiAKICAgICBkZWYgbWFrZV9jb25uZWN0aW9uKHNlbGYsIGhvc3QpOgpAQCAtMTM0NSw3ICsxMzU4LDcgQEAKICAgICAgICAgIyBob3N0IG1heSBiZSBhIHN0cmluZywgb3IgYSAoaG9zdCwgeDUwOS1kaWN0KSB0dXBsZQogICAgICAgICBjaG9zdCwgc2VsZi5fZXh0cmFfaGVhZGVycywgeDUwOSA9IHNlbGYuZ2V0X2hvc3RfaW5mbyhob3N0KQogICAgICAgICBzZWxmLl9jb25uZWN0aW9uID0gaG9zdCwgaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uKGNob3N0LAotICAgICAgICAgICAgTm9uZSwgKiooeDUwOSBvciB7fSkpCisgICAgICAgICAgICBOb25lLCBjb250ZXh0PXNlbGYuY29udGV4dCwgKiooeDUwOSBvciB7fSkpCiAgICAgICAgIHJldHVybiBzZWxmLl9jb25uZWN0aW9uWzFdCiAKICMjCkBAIC0xMzg4LDEzICsxNDAxLDE0IEBACiAgICAgIiIiCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgdXJpLCB0cmFuc3BvcnQ9Tm9uZSwgZW5jb2Rpbmc9Tm9uZSwgdmVyYm9zZT1GYWxzZSwKLSAgICAgICAgICAgICAgICAgYWxsb3dfbm9uZT1GYWxzZSwgdXNlX2RhdGV0aW1lPUZhbHNlLCB1c2VfYnVpbHRpbl90eXBlcz1GYWxzZSk6CisgICAgICAgICAgICAgICAgIGFsbG93X25vbmU9RmFsc2UsIHVzZV9kYXRldGltZT1GYWxzZSwgdXNlX2J1aWx0aW5fdHlwZXM9RmFsc2UsCisgICAgICAgICAgICAgICAgICosIGNvbnRleHQ9Tm9uZSk6CiAgICAgICAgICMgZXN0YWJsaXNoIGEgImxvZ2ljYWwiIHNlcnZlciBjb25uZWN0aW9uCiAKICAgICAgICAgIyBnZXQgdGhlIHVybAogICAgICAgICB0eXBlLCB1cmkgPSB1cmxsaWIucGFyc2Uuc3BsaXR0eXBlKHVyaSkKICAgICAgICAgaWYgdHlwZSBub3QgaW4gKCJodHRwIiwgImh0dHBzIik6Ci0gICAgICAgICAgICByYWlzZSBJT0Vycm9yKCJ1bnN1cHBvcnRlZCBYTUwtUlBDIHByb3RvY29sIikKKyAgICAgICAgICAgIHJhaXNlIE9TRXJyb3IoInVuc3VwcG9ydGVkIFhNTC1SUEMgcHJvdG9jb2wiKQogICAgICAgICBzZWxmLl9faG9zdCwgc2VsZi5fX2hhbmRsZXIgPSB1cmxsaWIucGFyc2Uuc3BsaXRob3N0KHVyaSkKICAgICAgICAgaWYgbm90IHNlbGYuX19oYW5kbGVyOgogICAgICAgICAgICAgc2VsZi5fX2hhbmRsZXIgPSAiL1JQQzIiCkBAIC0xNDAyLDEwICsxNDE2LDEzIEBACiAgICAgICAgIGlmIHRyYW5zcG9ydCBpcyBOb25lOgogICAgICAgICAgICAgaWYgdHlwZSA9PSAiaHR0cHMiOgogICAgICAgICAgICAgICAgIGhhbmRsZXIgPSBTYWZlVHJhbnNwb3J0CisgICAgICAgICAgICAgICAgZXh0cmFfa3dhcmdzID0geyJjb250ZXh0IjogY29udGV4dH0KICAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAgaGFuZGxlciA9IFRyYW5zcG9ydAorICAgICAgICAgICAgICAgIGV4dHJhX2t3YXJncyA9IHt9CiAgICAgICAgICAgICB0cmFuc3BvcnQgPSBoYW5kbGVyKHVzZV9kYXRldGltZT11c2VfZGF0ZXRpbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9idWlsdGluX3R5cGVzPXVzZV9idWlsdGluX3R5cGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfYnVpbHRpbl90eXBlcz11c2VfYnVpbHRpbl90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKipleHRyYV9rd2FyZ3MpCiAgICAgICAgIHNlbGYuX190cmFuc3BvcnQgPSB0cmFuc3BvcnQKIAogICAgICAgICBzZWxmLl9fZW5jb2RpbmcgPSBlbmNvZGluZyBvciAndXRmLTgnCmRpZmYgLS1naXQgYS9MaWIveG1scnBjL3NlcnZlci5weSBiL0xpYi94bWxycGMvc2VydmVyLnB5CmluZGV4IGQyN2JmNWEuLjMwNGUyMTggMTAwNjQ0Ci0tLSBhL0xpYi94bWxycGMvc2VydmVyLnB5CisrKyBiL0xpYi94bWxycGMvc2VydmVyLnB5CkBAIC01ODQsMTMgKzU4NCw2IEBACiAgICAgICAgIFNpbXBsZVhNTFJQQ0Rpc3BhdGNoZXIuX19pbml0X18oc2VsZiwgYWxsb3dfbm9uZSwgZW5jb2RpbmcsIHVzZV9idWlsdGluX3R5cGVzKQogICAgICAgICBzb2NrZXRzZXJ2ZXIuVENQU2VydmVyLl9faW5pdF9fKHNlbGYsIGFkZHIsIHJlcXVlc3RIYW5kbGVyLCBiaW5kX2FuZF9hY3RpdmF0ZSkKIAotICAgICAgICAjIFtCdWcgIzEyMjI3OTBdIElmIHBvc3NpYmxlLCBzZXQgY2xvc2Utb24tZXhlYyBmbGFnOyBpZiBhCi0gICAgICAgICMgbWV0aG9kIHNwYXducyBhIHN1YnByb2Nlc3MsIHRoZSBzdWJwcm9jZXNzIHNob3VsZG4ndCBoYXZlCi0gICAgICAgICMgdGhlIGxpc3RlbmluZyBzb2NrZXQgb3Blbi4KLSAgICAgICAgaWYgZmNudGwgaXMgbm90IE5vbmUgYW5kIGhhc2F0dHIoZmNudGwsICdGRF9DTE9FWEVDJyk6Ci0gICAgICAgICAgICBmbGFncyA9IGZjbnRsLmZjbnRsKHNlbGYuZmlsZW5vKCksIGZjbnRsLkZfR0VURkQpCi0gICAgICAgICAgICBmbGFncyB8PSBmY250bC5GRF9DTE9FWEVDCi0gICAgICAgICAgICBmY250bC5mY250bChzZWxmLmZpbGVubygpLCBmY250bC5GX1NFVEZELCBmbGFncykKIAogY2xhc3MgTXVsdGlQYXRoWE1MUlBDU2VydmVyKFNpbXBsZVhNTFJQQ1NlcnZlcik6CiAgICAgIiIiTXVsdGlwYXRoIFhNTC1SUEMgU2VydmVyCmRpZmYgLS1naXQgYS9MaWIvemlwZmlsZS5weSBiL0xpYi96aXBmaWxlLnB5CmluZGV4IGZmNjRjOTAuLjExZDdjZjkgMTAwNjQ0Ci0tLSBhL0xpYi96aXBmaWxlLnB5CisrKyBiL0xpYi96aXBmaWxlLnB5CkBAIC02LDcgKzYsNyBAQAogaW1wb3J0IGlvCiBpbXBvcnQgb3MKIGltcG9ydCByZQotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQgc3lzCiBpbXBvcnQgdGltZQogaW1wb3J0IHN0YXQKQEAgLTUwLDcgKzUwLDcgQEAKIAogCiBaSVA2NF9MSU1JVCA9ICgxIDw8IDMxKSAtIDEKLVpJUF9GSUxFQ09VTlRfTElNSVQgPSAxIDw8IDE2CitaSVBfRklMRUNPVU5UX0xJTUlUID0gKDEgPDwgMTYpIC0gMQogWklQX01BWF9DT01NRU5UID0gKDEgPDwgMTYpIC0gMQogCiAjIGNvbnN0YW50cyBmb3IgWmlwIGZpbGUgY29tcHJlc3Npb24gbWV0aG9kcwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgICAgdHJ5OgogICAgICAgICBpZiBfRW5kUmVjRGF0YShmcCk6CiAgICAgICAgICAgICByZXR1cm4gVHJ1ZSAgICAgICAgICMgZmlsZSBoYXMgY29ycmVjdCBtYWdpYyBudW1iZXIKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHJldHVybiBGYWxzZQogCkBAIC0xODAsNyArMTgwLDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInJiIikgYXMgZnA6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gX2NoZWNrX3ppcGZpbGUoZnApCi0gICAgZXhjZXB0IElPRXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICByZXR1cm4gcmVzdWx0CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgICIiIgogICAgIHRyeToKICAgICAgICAgZnBpbi5zZWVrKG9mZnNldCAtIHNpemVFbmRDZW50RGlyNjRMb2NhdG9yLCAyKQotICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAjIElmIHRoZSBzZWVrIGZhaWxzLCB0aGUgZmlsZSBpcyBub3QgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gYSBaSVA2NAogICAgICAgICAjIGVuZC1vZi1hcmNoaXZlIHJlY29yZCwgc28ganVzdCByZXR1cm4gdGhlIGVuZCByZWNvcmQgd2Ugd2VyZSBnaXZlbi4KICAgICAgICAgcmV0dXJuIGVuZHJlYwpAQCAtMjExLDggKzIxMSw4IEBACiAgICAgaWYgbGVuKGRhdGEpICE9IHNpemVFbmRDZW50RGlyNjQ6CiAgICAgICAgIHJldHVybiBlbmRyZWMKICAgICBzaWcsIHN6LCBjcmVhdGVfdmVyc2lvbiwgcmVhZF92ZXJzaW9uLCBkaXNrX251bSwgZGlza19kaXIsIFwKLSAgICAgICAgICAgIGRpcmNvdW50LCBkaXJjb3VudDIsIGRpcnNpemUsIGRpcm9mZnNldCA9IFwKLSAgICAgICAgICAgIHN0cnVjdC51bnBhY2soc3RydWN0RW5kQXJjaGl2ZTY0LCBkYXRhKQorICAgICAgICBkaXJjb3VudCwgZGlyY291bnQyLCBkaXJzaXplLCBkaXJvZmZzZXQgPSBcCisgICAgICAgIHN0cnVjdC51bnBhY2soc3RydWN0RW5kQXJjaGl2ZTY0LCBkYXRhKQogICAgIGlmIHNpZyAhPSBzdHJpbmdFbmRBcmNoaXZlNjQ6CiAgICAgICAgIHJldHVybiBlbmRyZWMKIApAQCAtMjQyLDcgKzI0Miw3IEBACiAgICAgIyBmaWxlIGlmIHRoaXMgaXMgdGhlIGNhc2UpLgogICAgIHRyeToKICAgICAgICAgZnBpbi5zZWVrKC1zaXplRW5kQ2VudERpciwgMikKLSAgICBleGNlcHQgSU9FcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcmV0dXJuIE5vbmUKICAgICBkYXRhID0gZnBpbi5yZWFkKCkKICAgICBpZiAobGVuKGRhdGEpID09IHNpemVFbmRDZW50RGlyIGFuZApAQCAtMjkyLDI2ICsyOTIsMjYgQEAKICAgICAiIiJDbGFzcyB3aXRoIGF0dHJpYnV0ZXMgZGVzY3JpYmluZyBlYWNoIGZpbGUgaW4gdGhlIFpJUCBhcmNoaXZlLiIiIgogCiAgICAgX19zbG90c19fID0gKAotICAgICAgICAgICAgJ29yaWdfZmlsZW5hbWUnLAotICAgICAgICAgICAgJ2ZpbGVuYW1lJywKLSAgICAgICAgICAgICdkYXRlX3RpbWUnLAotICAgICAgICAgICAgJ2NvbXByZXNzX3R5cGUnLAotICAgICAgICAgICAgJ2NvbW1lbnQnLAotICAgICAgICAgICAgJ2V4dHJhJywKLSAgICAgICAgICAgICdjcmVhdGVfc3lzdGVtJywKLSAgICAgICAgICAgICdjcmVhdGVfdmVyc2lvbicsCi0gICAgICAgICAgICAnZXh0cmFjdF92ZXJzaW9uJywKLSAgICAgICAgICAgICdyZXNlcnZlZCcsCi0gICAgICAgICAgICAnZmxhZ19iaXRzJywKLSAgICAgICAgICAgICd2b2x1bWUnLAotICAgICAgICAgICAgJ2ludGVybmFsX2F0dHInLAotICAgICAgICAgICAgJ2V4dGVybmFsX2F0dHInLAotICAgICAgICAgICAgJ2hlYWRlcl9vZmZzZXQnLAotICAgICAgICAgICAgJ0NSQycsCi0gICAgICAgICAgICAnY29tcHJlc3Nfc2l6ZScsCi0gICAgICAgICAgICAnZmlsZV9zaXplJywKLSAgICAgICAgICAgICdfcmF3X3RpbWUnLAotICAgICAgICApCisgICAgICAgICdvcmlnX2ZpbGVuYW1lJywKKyAgICAgICAgJ2ZpbGVuYW1lJywKKyAgICAgICAgJ2RhdGVfdGltZScsCisgICAgICAgICdjb21wcmVzc190eXBlJywKKyAgICAgICAgJ2NvbW1lbnQnLAorICAgICAgICAnZXh0cmEnLAorICAgICAgICAnY3JlYXRlX3N5c3RlbScsCisgICAgICAgICdjcmVhdGVfdmVyc2lvbicsCisgICAgICAgICdleHRyYWN0X3ZlcnNpb24nLAorICAgICAgICAncmVzZXJ2ZWQnLAorICAgICAgICAnZmxhZ19iaXRzJywKKyAgICAgICAgJ3ZvbHVtZScsCisgICAgICAgICdpbnRlcm5hbF9hdHRyJywKKyAgICAgICAgJ2V4dGVybmFsX2F0dHInLAorICAgICAgICAnaGVhZGVyX29mZnNldCcsCisgICAgICAgICdDUkMnLAorICAgICAgICAnY29tcHJlc3Nfc2l6ZScsCisgICAgICAgICdmaWxlX3NpemUnLAorICAgICAgICAnX3Jhd190aW1lJywKKyAgICApCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWU9Ik5vTmFtZSIsIGRhdGVfdGltZT0oMTk4MCwxLDEsMCwwLDApKToKICAgICAgICAgc2VsZi5vcmlnX2ZpbGVuYW1lID0gZmlsZW5hbWUgICAjIE9yaWdpbmFsIGZpbGUgbmFtZSBpbiBhcmNoaXZlCkBAIC0zNzYsNyArMzc2LDcgQEAKICAgICAgICAgaWYgemlwNjQ6CiAgICAgICAgICAgICBmbXQgPSAnPEhIUVEnCiAgICAgICAgICAgICBleHRyYSA9IGV4dHJhICsgc3RydWN0LnBhY2soZm10LAotICAgICAgICAgICAgICAgICAgICAxLCBzdHJ1Y3QuY2FsY3NpemUoZm10KS00LCBmaWxlX3NpemUsIGNvbXByZXNzX3NpemUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgc3RydWN0LmNhbGNzaXplKGZtdCktNCwgZmlsZV9zaXplLCBjb21wcmVzc19zaXplKQogICAgICAgICBpZiBmaWxlX3NpemUgPiBaSVA2NF9MSU1JVCBvciBjb21wcmVzc19zaXplID4gWklQNjRfTElNSVQ6CiAgICAgICAgICAgICBpZiBub3QgemlwNjQ6CiAgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKCJGaWxlc2l6ZSB3b3VsZCByZXF1aXJlIFpJUDY0IGV4dGVuc2lvbnMiKQpAQCAtMzk1LDEwICszOTUsMTAgQEAKICAgICAgICAgc2VsZi5jcmVhdGVfdmVyc2lvbiA9IG1heChtaW5fdmVyc2lvbiwgc2VsZi5jcmVhdGVfdmVyc2lvbikKICAgICAgICAgZmlsZW5hbWUsIGZsYWdfYml0cyA9IHNlbGYuX2VuY29kZUZpbGVuYW1lRmxhZ3MoKQogICAgICAgICBoZWFkZXIgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RGaWxlSGVhZGVyLCBzdHJpbmdGaWxlSGVhZGVyLAotICAgICAgICAgICAgICAgICBzZWxmLmV4dHJhY3RfdmVyc2lvbiwgc2VsZi5yZXNlcnZlZCwgZmxhZ19iaXRzLAotICAgICAgICAgICAgICAgICBzZWxmLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsIENSQywKLSAgICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICBsZW4oZmlsZW5hbWUpLCBsZW4oZXh0cmEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmV4dHJhY3RfdmVyc2lvbiwgc2VsZi5yZXNlcnZlZCwgZmxhZ19iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsIENSQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZmlsZW5hbWUpLCBsZW4oZXh0cmEpKQogICAgICAgICByZXR1cm4gaGVhZGVyICsgZmlsZW5hbWUgKyBleHRyYQogCiAgICAgZGVmIF9lbmNvZGVGaWxlbmFtZUZsYWdzKHNlbGYpOgpAQCAtNDExLDcgKzQxMSw3IEBACiAgICAgICAgICMgVHJ5IHRvIGRlY29kZSB0aGUgZXh0cmEgZmllbGQuCiAgICAgICAgIGV4dHJhID0gc2VsZi5leHRyYQogICAgICAgICB1bnBhY2sgPSBzdHJ1Y3QudW5wYWNrCi0gICAgICAgIHdoaWxlIGV4dHJhOgorICAgICAgICB3aGlsZSBsZW4oZXh0cmEpID49IDQ6CiAgICAgICAgICAgICB0cCwgbG4gPSB1bnBhY2soJzxISCcsIGV4dHJhWzo0XSkKICAgICAgICAgICAgIGlmIHRwID09IDE6CiAgICAgICAgICAgICAgICAgaWYgbG4gPj0gMjQ6CkBAIC00NzUsMTMgKzQ3NSwxNSBAQAogICAgICAgICAgICAgICAgICAgICBjcmMgPSAoKGNyYyA+PiAxKSAmIDB4N0ZGRkZGRkYpCiAgICAgICAgICAgICB0YWJsZVtpXSA9IGNyYwogICAgICAgICByZXR1cm4gdGFibGUKLSAgICBjcmN0YWJsZSA9IF9HZW5lcmF0ZUNSQ1RhYmxlKCkKKyAgICBjcmN0YWJsZSA9IE5vbmUKIAogICAgIGRlZiBfY3JjMzIoc2VsZiwgY2gsIGNyYyk6CiAgICAgICAgICIiIkNvbXB1dGUgdGhlIENSQzMyIHByaW1pdGl2ZSBvbiBvbmUgYnl0ZS4iIiIKICAgICAgICAgcmV0dXJuICgoY3JjID4+IDgpICYgMHhmZmZmZmYpIF4gc2VsZi5jcmN0YWJsZVsoY3JjIF4gY2gpICYgMHhmZl0KIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwd2QpOgorICAgICAgICBpZiBfWmlwRGVjcnlwdGVyLmNyY3RhYmxlIGlzIE5vbmU6CisgICAgICAgICAgICBfWmlwRGVjcnlwdGVyLmNyY3RhYmxlID0gX1ppcERlY3J5cHRlci5fR2VuZXJhdGVDUkNUYWJsZSgpCiAgICAgICAgIHNlbGYua2V5MCA9IDMwNTQxOTg5NgogICAgICAgICBzZWxmLmtleTEgPSA1OTE3NTEwNDkKICAgICAgICAgc2VsZi5rZXkyID0gODc4MDgyMTkyCkBAIC01MTEsNyArNTEzLDcgQEAKICAgICBkZWYgX2luaXQoc2VsZik6CiAgICAgICAgIHByb3BzID0gbHptYS5fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKHsnaWQnOiBsem1hLkZJTFRFUl9MWk1BMX0pCiAgICAgICAgIHNlbGYuX2NvbXAgPSBsem1hLkxaTUFDb21wcmVzc29yKGx6bWEuRk9STUFUX1JBVywgZmlsdGVycz1bCi0gICAgICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLCBwcm9wcykKKyAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwgcHJvcHMpCiAgICAgICAgIF0pCiAgICAgICAgIHJldHVybiBzdHJ1Y3QucGFjaygnPEJCSCcsIDksIDQsIGxlbihwcm9wcykpICsgcHJvcHMKIApAQCAtNTQzLDggKzU0NSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIGInJwogCiAgICAgICAgICAgICBzZWxmLl9kZWNvbXAgPSBsem1hLkxaTUFEZWNvbXByZXNzb3IobHptYS5GT1JNQVRfUkFXLCBmaWx0ZXJzPVsKLSAgICAgICAgICAgICAgICAgICAgbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGx6bWEuRklMVEVSX0xaTUExLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3VuY29uc3VtZWRbNDo0ICsgcHNpemVdKQorICAgICAgICAgICAgICAgIGx6bWEuX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhsem1hLkZJTFRFUl9MWk1BMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fdW5jb25zdW1lZFs0OjQgKyBwc2l6ZV0pCiAgICAgICAgICAgICBdKQogICAgICAgICAgICAgZGF0YSA9IHNlbGYuX3VuY29uc3VtZWRbNCArIHBzaXplOl0KICAgICAgICAgICAgIGRlbCBzZWxmLl91bmNvbnN1bWVkCkBAIC01ODAsMTUgKzU4MiwxNSBAQAogICAgIGVsaWYgY29tcHJlc3Npb24gPT0gWklQX0RFRkxBVEVEOgogICAgICAgICBpZiBub3QgemxpYjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgemxpYiBtb2R1bGUiKQorICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIHpsaWIgbW9kdWxlIikKICAgICBlbGlmIGNvbXByZXNzaW9uID09IFpJUF9CWklQMjoKICAgICAgICAgaWYgbm90IGJ6MjoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgYnoyIG1vZHVsZSIpCisgICAgICAgICAgICAgICAgIkNvbXByZXNzaW9uIHJlcXVpcmVzIHRoZSAobWlzc2luZykgYnoyIG1vZHVsZSIpCiAgICAgZWxpZiBjb21wcmVzc2lvbiA9PSBaSVBfTFpNQToKICAgICAgICAgaWYgbm90IGx6bWE6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoCi0gICAgICAgICAgICAgICAgICAgICJDb21wcmVzc2lvbiByZXF1aXJlcyB0aGUgKG1pc3NpbmcpIGx6bWEgbW9kdWxlIikKKyAgICAgICAgICAgICAgICAiQ29tcHJlc3Npb24gcmVxdWlyZXMgdGhlIChtaXNzaW5nKSBsem1hIG1vZHVsZSIpCiAgICAgZWxzZToKICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJUaGF0IGNvbXByZXNzaW9uIG1ldGhvZCBpcyBub3Qgc3VwcG9ydGVkIikKIApAQCAtNTk2LDcgKzU5OCw3IEBACiBkZWYgX2dldF9jb21wcmVzc29yKGNvbXByZXNzX3R5cGUpOgogICAgIGlmIGNvbXByZXNzX3R5cGUgPT0gWklQX0RFRkxBVEVEOgogICAgICAgICByZXR1cm4gemxpYi5jb21wcmVzc29iaih6bGliLlpfREVGQVVMVF9DT01QUkVTU0lPTiwKLSAgICAgICAgICAgICB6bGliLkRFRkxBVEVELCAtMTUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWIuREVGTEFURUQsIC0xNSkKICAgICBlbGlmIGNvbXByZXNzX3R5cGUgPT0gWklQX0JaSVAyOgogICAgICAgICByZXR1cm4gYnoyLkJaMkNvbXByZXNzb3IoKQogICAgIGVsaWYgY29tcHJlc3NfdHlwZSA9PSBaSVBfTFpNQToKQEAgLTgzNiw4ICs4MzgsOCBAQAogICAgICAgICAgICAgbiA9IG1heChuLCBzZWxmLk1JTl9SRUFEX1NJWkUpCiAgICAgICAgICAgICBkYXRhID0gc2VsZi5fZGVjb21wcmVzc29yLmRlY29tcHJlc3MoZGF0YSwgbikKICAgICAgICAgICAgIHNlbGYuX2VvZiA9IChzZWxmLl9kZWNvbXByZXNzb3IuZW9mIG9yCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuX2NvbXByZXNzX2xlZnQgPD0gMCBhbmQKLSAgICAgICAgICAgICAgICAgICAgbm90IHNlbGYuX2RlY29tcHJlc3Nvci51bmNvbnN1bWVkX3RhaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY29tcHJlc3NfbGVmdCA8PSAwIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBzZWxmLl9kZWNvbXByZXNzb3IudW5jb25zdW1lZF90YWlsKQogICAgICAgICAgICAgaWYgc2VsZi5fZW9mOgogICAgICAgICAgICAgICAgIGRhdGEgKz0gc2VsZi5fZGVjb21wcmVzc29yLmZsdXNoKCkKICAgICAgICAgZWxzZToKQEAgLTg3OCw3ICs4ODAsNyBAQAogY2xhc3MgWmlwRmlsZToKICAgICAiIiIgQ2xhc3Mgd2l0aCBtZXRob2RzIHRvIG9wZW4sIHJlYWQsIHdyaXRlLCBjbG9zZSwgbGlzdCB6aXAgZmlsZXMuCiAKLSAgICB6ID0gWmlwRmlsZShmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSkKKyAgICB6ID0gWmlwRmlsZShmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1UcnVlKQogCiAgICAgZmlsZTogRWl0aGVyIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBvciBhIGZpbGUtbGlrZSBvYmplY3QuCiAgICAgICAgICAgSWYgaXQgaXMgYSBwYXRoLCB0aGUgZmlsZSB3aWxsIGJlIG9wZW5lZCBhbmQgY2xvc2VkIGJ5IFppcEZpbGUuCkBAIC04OTQsNyArODk2LDcgQEAKICAgICBmcCA9IE5vbmUgICAgICAgICAgICAgICAgICAgIyBTZXQgaGVyZSBzaW5jZSBfX2RlbF9fIGNoZWNrcyBpdAogICAgIF93aW5kb3dzX2lsbGVnYWxfbmFtZV90cmFuc190YWJsZSA9IE5vbmUKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBtb2RlPSJyIiwgY29tcHJlc3Npb249WklQX1NUT1JFRCwgYWxsb3daaXA2ND1GYWxzZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELCBhbGxvd1ppcDY0PVRydWUpOgogICAgICAgICAiIiJPcGVuIHRoZSBaSVAgZmlsZSB3aXRoIG1vZGUgcmVhZCAiciIsIHdyaXRlICJ3IiBvciBhcHBlbmQgImEiLiIiIgogICAgICAgICBpZiBtb2RlIG5vdCBpbiAoInIiLCAidyIsICJhIik6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ1ppcEZpbGUoKSByZXF1aXJlcyBtb2RlICJyIiwgInciLCBvciAiYSInKQpAQCAtOTE5LDcgKzkyMSw3IEBACiAgICAgICAgICAgICBtb2RlRGljdCA9IHsncicgOiAncmInLCAndyc6ICd3YicsICdhJyA6ICdyK2InfQogICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgIHNlbGYuZnAgPSBpby5vcGVuKGZpbGUsIG1vZGVEaWN0W21vZGVdKQotICAgICAgICAgICAgZXhjZXB0IElPRXJyb3I6CisgICAgICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgICAgICBpZiBtb2RlID09ICdhJzoKICAgICAgICAgICAgICAgICAgICAgbW9kZSA9IGtleSA9ICd3JwogICAgICAgICAgICAgICAgICAgICBzZWxmLmZwID0gaW8ub3BlbihmaWxlLCBtb2RlRGljdFttb2RlXSkKQEAgLTk3MCw3ICs5NzIsNyBAQAogICAgICAgICBmcCA9IHNlbGYuZnAKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZW5kcmVjID0gX0VuZFJlY0RhdGEoZnApCi0gICAgICAgIGV4Y2VwdCBJT0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHJhaXNlIEJhZFppcEZpbGUoIkZpbGUgaXMgbm90IGEgemlwIGZpbGUiKQogICAgICAgICBpZiBub3QgZW5kcmVjOgogICAgICAgICAgICAgcmFpc2UgQmFkWmlwRmlsZSgiRmlsZSBpcyBub3QgYSB6aXAgZmlsZSIpCkBAIC0xMDE4LDggKzEwMjAsOCBAQAogICAgICAgICAgICAgeC5jb21tZW50ID0gZnAucmVhZChjZW50ZGlyW19DRF9DT01NRU5UX0xFTkdUSF0pCiAgICAgICAgICAgICB4LmhlYWRlcl9vZmZzZXQgPSBjZW50ZGlyW19DRF9MT0NBTF9IRUFERVJfT0ZGU0VUXQogICAgICAgICAgICAgKHguY3JlYXRlX3ZlcnNpb24sIHguY3JlYXRlX3N5c3RlbSwgeC5leHRyYWN0X3ZlcnNpb24sIHgucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgeC5mbGFnX2JpdHMsIHguY29tcHJlc3NfdHlwZSwgdCwgZCwKLSAgICAgICAgICAgICAgICB4LkNSQywgeC5jb21wcmVzc19zaXplLCB4LmZpbGVfc2l6ZSkgPSBjZW50ZGlyWzE6MTJdCisgICAgICAgICAgICAgeC5mbGFnX2JpdHMsIHguY29tcHJlc3NfdHlwZSwgdCwgZCwKKyAgICAgICAgICAgICB4LkNSQywgeC5jb21wcmVzc19zaXplLCB4LmZpbGVfc2l6ZSkgPSBjZW50ZGlyWzE6MTJdCiAgICAgICAgICAgICBpZiB4LmV4dHJhY3RfdmVyc2lvbiA+IE1BWF9FWFRSQUNUX1ZFUlNJT046CiAgICAgICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigiemlwIGZpbGUgdmVyc2lvbiAlLjFmIiAlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoeC5leHRyYWN0X3ZlcnNpb24gLyAxMCkpCkBAIC0xMDI3LDcgKzEwMjksNyBAQAogICAgICAgICAgICAgIyBDb252ZXJ0IGRhdGUvdGltZSBjb2RlIHRvICh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW4sIHNlYykKICAgICAgICAgICAgIHguX3Jhd190aW1lID0gdAogICAgICAgICAgICAgeC5kYXRlX3RpbWUgPSAoIChkPj45KSsxOTgwLCAoZD4+NSkmMHhGLCBkJjB4MUYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdD4+MTEsICh0Pj41KSYweDNGLCAodCYweDFGKSAqIDIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQ+PjExLCAodD4+NSkmMHgzRiwgKHQmMHgxRikgKiAyICkKIAogICAgICAgICAgICAgeC5fZGVjb2RlRXh0cmEoKQogICAgICAgICAgICAgeC5oZWFkZXJfb2Zmc2V0ID0geC5oZWFkZXJfb2Zmc2V0ICsgY29uY2F0CkBAIC0xMTE5LDExICsxMTIxLDE1IEBACiAgICAgICAgICIiIlJldHVybiBmaWxlLWxpa2Ugb2JqZWN0IGZvciAnbmFtZScuIiIiCiAgICAgICAgIGlmIG1vZGUgbm90IGluICgiciIsICJVIiwgInJVIik6CiAgICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJ29wZW4oKSByZXF1aXJlcyBtb2RlICJyIiwgIlUiLCBvciAiclUiJykKKyAgICAgICAgaWYgJ1UnIGluIG1vZGU6CisgICAgICAgICAgICBpbXBvcnQgd2FybmluZ3MKKyAgICAgICAgICAgIHdhcm5pbmdzLndhcm4oIidVJyBtb2RlIGlzIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBEZXByZWNhdGlvbldhcm5pbmcsIDIpCiAgICAgICAgIGlmIHB3ZCBhbmQgbm90IGlzaW5zdGFuY2UocHdkLCBieXRlcyk6CiAgICAgICAgICAgICByYWlzZSBUeXBlRXJyb3IoInB3ZDogZXhwZWN0ZWQgYnl0ZXMsIGdvdCAlcyIgJSB0eXBlKHB3ZCkpCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCisgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gcmVhZCBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKICAgICAgICAgIyBPbmx5IG9wZW4gYSBuZXcgZmlsZSBmb3IgaW5zdGFuY2VzIHdoZXJlIHdlIHdlcmUgbm90CiAgICAgICAgICMgZ2l2ZW4gYSBmaWxlIG9iamVjdCBpbiB0aGUgY29uc3RydWN0b3IKQEAgLTEyOTYsMjIgKzEzMDIsMjYgQEAKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcignd3JpdGUoKSByZXF1aXJlcyBtb2RlICJ3IiBvciAiYSInKQogICAgICAgICBpZiBub3Qgc2VsZi5mcDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAgICAgICAgIF9jaGVja19jb21wcmVzc2lvbih6aW5mby5jb21wcmVzc190eXBlKQotICAgICAgICBpZiB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVDoKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgotICAgICAgICAgICAgICAgIHJhaXNlIExhcmdlWmlwRmlsZSgiRmlsZXNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKLSAgICAgICAgaWYgemluZm8uaGVhZGVyX29mZnNldCA+IFpJUDY0X0xJTUlUOgotICAgICAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6Ci0gICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKAotICAgICAgICAgICAgICAgICAgICAgICJaaXBmaWxlIHNpemUgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKKyAgICAgICAgaWYgbm90IHNlbGYuX2FsbG93WmlwNjQ6CisgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9IE5vbmUKKyAgICAgICAgICAgIGlmIGxlbihzZWxmLmZpbGVsaXN0KSA+PSBaSVBfRklMRUNPVU5UX0xJTUlUOgorICAgICAgICAgICAgICAgIHJlcXVpcmVzX3ppcDY0ID0gIkZpbGVzIGNvdW50IgorICAgICAgICAgICAgZWxpZiB6aW5mby5maWxlX3NpemUgPiBaSVA2NF9MSU1JVDoKKyAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9ICJGaWxlc2l6ZSIKKyAgICAgICAgICAgIGVsaWYgemluZm8uaGVhZGVyX29mZnNldCA+IFpJUDY0X0xJTUlUOgorICAgICAgICAgICAgICAgIHJlcXVpcmVzX3ppcDY0ID0gIlppcGZpbGUgc2l6ZSIKKyAgICAgICAgICAgIGlmIHJlcXVpcmVzX3ppcDY0OgorICAgICAgICAgICAgICAgIHJhaXNlIExhcmdlWmlwRmlsZShyZXF1aXJlc196aXA2NCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgd291bGQgcmVxdWlyZSBaSVA2NCBleHRlbnNpb25zIikKIAogICAgIGRlZiB3cml0ZShzZWxmLCBmaWxlbmFtZSwgYXJjbmFtZT1Ob25lLCBjb21wcmVzc190eXBlPU5vbmUpOgogICAgICAgICAiIiJQdXQgdGhlIGJ5dGVzIGZyb20gZmlsZW5hbWUgaW50byB0aGUgYXJjaGl2ZSB1bmRlciB0aGUgbmFtZQogICAgICAgICBhcmNuYW1lLiIiIgogICAgICAgICBpZiBub3Qgc2VsZi5mcDoKICAgICAgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKLSAgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKKyAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byB3cml0ZSB0byBaSVAgYXJjaGl2ZSB0aGF0IHdhcyBhbHJlYWR5IGNsb3NlZCIpCiAKICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGVuYW1lKQogICAgICAgICBpc2RpciA9IHN0YXQuU19JU0RJUihzdC5zdF9tb2RlKQpAQCAtMTMyNyw3ICsxMzM3LDkgQEAKICAgICAgICAgICAgIGFyY25hbWUgKz0gJy8nCiAgICAgICAgIHppbmZvID0gWmlwSW5mbyhhcmNuYW1lLCBkYXRlX3RpbWUpCiAgICAgICAgIHppbmZvLmV4dGVybmFsX2F0dHIgPSAoc3RbMF0gJiAweEZGRkYpIDw8IDE2ICAgICAgIyBVbml4IGF0dHJpYnV0ZXMKLSAgICAgICAgaWYgY29tcHJlc3NfdHlwZSBpcyBOb25lOgorICAgICAgICBpZiBpc2RpcjoKKyAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBaSVBfU1RPUkVECisgICAgICAgIGVsaWYgY29tcHJlc3NfdHlwZSBpcyBOb25lOgogICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3R5cGUgPSBjb21wcmVzc190eXBlCkBAIC0xMzQ2LDYgKzEzNTgsNyBAQAogICAgICAgICAgICAgemluZm8uZmlsZV9zaXplID0gMAogICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IDAKICAgICAgICAgICAgIHppbmZvLkNSQyA9IDAKKyAgICAgICAgICAgIHppbmZvLmV4dGVybmFsX2F0dHIgfD0gMHgxMCAgIyBNUy1ET1MgZGlyZWN0b3J5IGZsYWcKICAgICAgICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKHppbmZvKQogICAgICAgICAgICAgc2VsZi5OYW1lVG9JbmZvW3ppbmZvLmZpbGVuYW1lXSA9IHppbmZvCiAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoRmFsc2UpKQpAQCAtMTM1OCw3ICsxMzcxLDcgQEAKICAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPSBjb21wcmVzc19zaXplID0gMAogICAgICAgICAgICAgIyBDb21wcmVzc2VkIHNpemUgY2FuIGJlIGxhcmdlciB0aGFuIHVuY29tcHJlc3NlZCBzaXplCiAgICAgICAgICAgICB6aXA2NCA9IHNlbGYuX2FsbG93WmlwNjQgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplICogMS4wNSA+IFpJUDY0X0xJTUlUCisgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplICogMS4wNSA+IFpJUDY0X0xJTUlUCiAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHppbmZvLkZpbGVIZWFkZXIoemlwNjQpKQogICAgICAgICAgICAgZmlsZV9zaXplID0gMAogICAgICAgICAgICAgd2hpbGUgMToKQEAgLTE0MDYsMTMgKzE0MTksMTcgQEAKICAgICAgICAgICAgIHppbmZvID0gWmlwSW5mbyhmaWxlbmFtZT16aW5mb19vcl9hcmNuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVfdGltZT10aW1lLmxvY2FsdGltZSh0aW1lLnRpbWUoKSlbOjZdKQogICAgICAgICAgICAgemluZm8uY29tcHJlc3NfdHlwZSA9IHNlbGYuY29tcHJlc3Npb24KLSAgICAgICAgICAgIHppbmZvLmV4dGVybmFsX2F0dHIgPSAwbzYwMCA8PCAxNgorICAgICAgICAgICAgaWYgemluZm8uZmlsZW5hbWVbLTFdID09ICcvJzoKKyAgICAgICAgICAgICAgICB6aW5mby5leHRlcm5hbF9hdHRyID0gMG80MDc3NSA8PCAxNiAgICMgZHJ3eHJ3eHIteAorICAgICAgICAgICAgICAgIHppbmZvLmV4dGVybmFsX2F0dHIgfD0gMHgxMCAgICAgICAgICAgIyBNUy1ET1MgZGlyZWN0b3J5IGZsYWcKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgemluZm8uZXh0ZXJuYWxfYXR0ciA9IDBvNjAwIDw8IDE2ICAgICAjID9ydy0tLS0tLS0KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHppbmZvID0gemluZm9fb3JfYXJjbmFtZQogCiAgICAgICAgIGlmIG5vdCBzZWxmLmZwOgogICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gd3JpdGUgdG8gWklQIGFyY2hpdmUgdGhhdCB3YXMgYWxyZWFkeSBjbG9zZWQiKQorICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIHdyaXRlIHRvIFpJUCBhcmNoaXZlIHRoYXQgd2FzIGFscmVhZHkgY2xvc2VkIikKIAogICAgICAgICB6aW5mby5maWxlX3NpemUgPSBsZW4oZGF0YSkgICAgICAgICAgICAjIFVuY29tcHJlc3NlZCBzaXplCiAgICAgICAgIHppbmZvLmhlYWRlcl9vZmZzZXQgPSBzZWxmLmZwLnRlbGwoKSAgICAjIFN0YXJ0IG9mIGhlYWRlciBkYXRhCkBAIC0xNDMyLDcgKzE0NDksNyBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgemluZm8uY29tcHJlc3Nfc2l6ZSA9IHppbmZvLmZpbGVfc2l6ZQogICAgICAgICB6aXA2NCA9IHppbmZvLmZpbGVfc2l6ZSA+IFpJUDY0X0xJTUlUIG9yIFwKLSAgICAgICAgICAgICAgICB6aW5mby5jb21wcmVzc19zaXplID4gWklQNjRfTElNSVQKKyAgICAgICAgICAgIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVAogICAgICAgICBpZiB6aXA2NCBhbmQgbm90IHNlbGYuX2FsbG93WmlwNjQ6CiAgICAgICAgICAgICByYWlzZSBMYXJnZVppcEZpbGUoIkZpbGVzaXplIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCiAgICAgICAgIHNlbGYuZnAud3JpdGUoemluZm8uRmlsZUhlYWRlcih6aXA2NCkpCkBAIC0xNDQxLDcgKzE0NTgsNyBAQAogICAgICAgICAgICAgIyBXcml0ZSBDUkMgYW5kIGZpbGUgc2l6ZXMgYWZ0ZXIgdGhlIGZpbGUgZGF0YQogICAgICAgICAgICAgZm10ID0gJzxMUVEnIGlmIHppcDY0IGVsc2UgJzxMTEwnCiAgICAgICAgICAgICBzZWxmLmZwLndyaXRlKHN0cnVjdC5wYWNrKGZtdCwgemluZm8uQ1JDLCB6aW5mby5jb21wcmVzc19zaXplLAotICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmlsZV9zaXplKSkKICAgICAgICAgc2VsZi5mcC5mbHVzaCgpCiAgICAgICAgIHNlbGYuZmlsZWxpc3QuYXBwZW5kKHppbmZvKQogICAgICAgICBzZWxmLk5hbWVUb0luZm9bemluZm8uZmlsZW5hbWVdID0gemluZm8KQEAgLTE0NTgsMTYgKzE0NzUsMTQgQEAKIAogICAgICAgICB0cnk6CiAgICAgICAgICAgICBpZiBzZWxmLm1vZGUgaW4gKCJ3IiwgImEiKSBhbmQgc2VsZi5fZGlkTW9kaWZ5OiAjIHdyaXRlIGVuZGluZyByZWNvcmRzCi0gICAgICAgICAgICAgICAgY291bnQgPSAwCiAgICAgICAgICAgICAgICAgcG9zMSA9IHNlbGYuZnAudGVsbCgpCiAgICAgICAgICAgICAgICAgZm9yIHppbmZvIGluIHNlbGYuZmlsZWxpc3Q6ICAgICAgICAgIyB3cml0ZSBjZW50cmFsIGRpcmVjdG9yeQotICAgICAgICAgICAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMQogICAgICAgICAgICAgICAgICAgICBkdCA9IHppbmZvLmRhdGVfdGltZQogICAgICAgICAgICAgICAgICAgICBkb3NkYXRlID0gKGR0WzBdIC0gMTk4MCkgPDwgOSB8IGR0WzFdIDw8IDUgfCBkdFsyXQogICAgICAgICAgICAgICAgICAgICBkb3N0aW1lID0gZHRbM10gPDwgMTEgfCBkdFs0XSA8PCA1IHwgKGR0WzVdIC8vIDIpCiAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gW10KICAgICAgICAgICAgICAgICAgICAgaWYgemluZm8uZmlsZV9zaXplID4gWklQNjRfTElNSVQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHppbmZvLmNvbXByZXNzX3NpemUgPiBaSVA2NF9MSU1JVDoKKyAgICAgICAgICAgICAgICAgICAgICAgb3IgemluZm8uY29tcHJlc3Nfc2l6ZSA+IFpJUDY0X0xJTUlUOgogICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEuYXBwZW5kKHppbmZvLmZpbGVfc2l6ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhLmFwcGVuZCh6aW5mby5jb21wcmVzc19zaXplKQogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zaXplID0gMHhmZmZmZmZmZgpAQCAtMTQ4Nyw4ICsxNTAyLDggQEAKICAgICAgICAgICAgICAgICAgICAgaWYgZXh0cmE6CiAgICAgICAgICAgICAgICAgICAgICAgICAjIEFwcGVuZCBhIFpJUDY0IGZpZWxkIHRvIHRoZSBleHRyYSdzCiAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYV9kYXRhID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8SEgnICsgJ1EnKmxlbihleHRyYSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPEhIJyArICdRJypsZW4oZXh0cmEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDgqbGVuKGV4dHJhKSwgKmV4dHJhKSArIGV4dHJhX2RhdGEKIAogICAgICAgICAgICAgICAgICAgICAgICAgbWluX3ZlcnNpb24gPSBaSVA2NF9WRVJTSU9OCiAKQEAgLTE1MDIsMjEgKzE1MTcsMjEgQEAKICAgICAgICAgICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUsIGZsYWdfYml0cyA9IHppbmZvLl9lbmNvZGVGaWxlbmFtZUZsYWdzKCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNlbnRkaXIgPSBzdHJ1Y3QucGFjayhzdHJ1Y3RDZW50cmFsRGlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0NlbnRyYWxEaXIsIGNyZWF0ZV92ZXJzaW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbihmaWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdDZW50cmFsRGlyLCBjcmVhdGVfdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5jcmVhdGVfc3lzdGVtLCBleHRyYWN0X3ZlcnNpb24sIHppbmZvLnJlc2VydmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdfYml0cywgemluZm8uY29tcHJlc3NfdHlwZSwgZG9zdGltZSwgZG9zZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5DUkMsIGNvbXByZXNzX3NpemUsIGZpbGVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4oZmlsZW5hbWUpLCBsZW4oZXh0cmFfZGF0YSksIGxlbih6aW5mby5jb21tZW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCB6aW5mby5pbnRlcm5hbF9hdHRyLCB6aW5mby5leHRlcm5hbF9hdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcl9vZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBEZXByZWNhdGlvbldhcm5pbmc6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCgoc3RydWN0Q2VudHJhbERpciwgc3RyaW5nQ2VudHJhbERpciwgY3JlYXRlX3ZlcnNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uY3JlYXRlX3N5c3RlbSwgZXh0cmFjdF92ZXJzaW9uLCB6aW5mby5yZXNlcnZlZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB6aW5mby5mbGFnX2JpdHMsIHppbmZvLmNvbXByZXNzX3R5cGUsIGRvc3RpbWUsIGRvc2RhdGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uQ1JDLCBjb21wcmVzc19zaXplLCBmaWxlX3NpemUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuKHppbmZvLmZpbGVuYW1lKSwgbGVuKGV4dHJhX2RhdGEpLCBsZW4oemluZm8uY29tbWVudCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgemluZm8uaW50ZXJuYWxfYXR0ciwgemluZm8uZXh0ZXJuYWxfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfb2Zmc2V0KSwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLmNyZWF0ZV9zeXN0ZW0sIGV4dHJhY3RfdmVyc2lvbiwgemluZm8ucmVzZXJ2ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemluZm8uZmxhZ19iaXRzLCB6aW5mby5jb21wcmVzc190eXBlLCBkb3N0aW1lLCBkb3NkYXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHppbmZvLkNSQywgY29tcHJlc3Nfc2l6ZSwgZmlsZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbih6aW5mby5maWxlbmFtZSksIGxlbihleHRyYV9kYXRhKSwgbGVuKHppbmZvLmNvbW1lbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHppbmZvLmludGVybmFsX2F0dHIsIHppbmZvLmV4dGVybmFsX2F0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX29mZnNldCksIGZpbGU9c3lzLnN0ZGVycikKICAgICAgICAgICAgICAgICAgICAgICAgIHJhaXNlCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoY2VudGRpcikKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZShmaWxlbmFtZSkKQEAgLTE1MjUsMzAgKzE1NDAsMzggQEAKIAogICAgICAgICAgICAgICAgIHBvczIgPSBzZWxmLmZwLnRlbGwoKQogICAgICAgICAgICAgICAgICMgV3JpdGUgZW5kLW9mLXppcC1hcmNoaXZlIHJlY29yZAotICAgICAgICAgICAgICAgIGNlbnREaXJDb3VudCA9IGNvdW50CisgICAgICAgICAgICAgICAgY2VudERpckNvdW50ID0gbGVuKHNlbGYuZmlsZWxpc3QpCiAgICAgICAgICAgICAgICAgY2VudERpclNpemUgPSBwb3MyIC0gcG9zMQogICAgICAgICAgICAgICAgIGNlbnREaXJPZmZzZXQgPSBwb3MxCi0gICAgICAgICAgICAgICAgaWYgKGNlbnREaXJDb3VudCA+PSBaSVBfRklMRUNPVU5UX0xJTUlUIG9yCi0gICAgICAgICAgICAgICAgICAgIGNlbnREaXJPZmZzZXQgPiBaSVA2NF9MSU1JVCBvcgotICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSA+IFpJUDY0X0xJTUlUKToKKyAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBjZW50RGlyQ291bnQgPiBaSVBfRklMRUNPVU5UX0xJTUlUOgorICAgICAgICAgICAgICAgICAgICByZXF1aXJlc196aXA2NCA9ICJGaWxlcyBjb3VudCIKKyAgICAgICAgICAgICAgICBlbGlmIGNlbnREaXJPZmZzZXQgPiBaSVA2NF9MSU1JVDoKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiQ2VudHJhbCBkaXJlY3Rvcnkgb2Zmc2V0IgorICAgICAgICAgICAgICAgIGVsaWYgY2VudERpclNpemUgPiBaSVA2NF9MSU1JVDoKKyAgICAgICAgICAgICAgICAgICAgcmVxdWlyZXNfemlwNjQgPSAiQ2VudHJhbCBkaXJlY3Rvcnkgc2l6ZSIKKyAgICAgICAgICAgICAgICBpZiByZXF1aXJlc196aXA2NDoKICAgICAgICAgICAgICAgICAgICAgIyBOZWVkIHRvIHdyaXRlIHRoZSBaSVA2NCBlbmQtb2YtYXJjaGl2ZSByZWNvcmRzCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9hbGxvd1ppcDY0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmFpc2UgTGFyZ2VaaXBGaWxlKHJlcXVpcmVzX3ppcDY0ICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHdvdWxkIHJlcXVpcmUgWklQNjQgZXh0ZW5zaW9ucyIpCiAgICAgICAgICAgICAgICAgICAgIHppcDY0ZW5kcmVjID0gc3RydWN0LnBhY2soCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0RW5kQXJjaGl2ZTY0LCBzdHJpbmdFbmRBcmNoaXZlNjQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgNDQsIDQ1LCA0NSwgMCwgMCwgY2VudERpckNvdW50LCBjZW50RGlyQ291bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjQsIHN0cmluZ0VuZEFyY2hpdmU2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgIDQ0LCA0NSwgNDUsIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQpCiAgICAgICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoemlwNjRlbmRyZWMpCiAKICAgICAgICAgICAgICAgICAgICAgemlwNjRsb2NyZWMgPSBzdHJ1Y3QucGFjaygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjRMb2NhdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ0VuZEFyY2hpdmU2NExvY2F0b3IsIDAsIHBvczIsIDEpCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RFbmRBcmNoaXZlNjRMb2NhdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nRW5kQXJjaGl2ZTY0TG9jYXRvciwgMCwgcG9zMiwgMSkKICAgICAgICAgICAgICAgICAgICAgc2VsZi5mcC53cml0ZSh6aXA2NGxvY3JlYykKICAgICAgICAgICAgICAgICAgICAgY2VudERpckNvdW50ID0gbWluKGNlbnREaXJDb3VudCwgMHhGRkZGKQogICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSA9IG1pbihjZW50RGlyU2l6ZSwgMHhGRkZGRkZGRikKICAgICAgICAgICAgICAgICAgICAgY2VudERpck9mZnNldCA9IG1pbihjZW50RGlyT2Zmc2V0LCAweEZGRkZGRkZGKQogCiAgICAgICAgICAgICAgICAgZW5kcmVjID0gc3RydWN0LnBhY2soc3RydWN0RW5kQXJjaGl2ZSwgc3RyaW5nRW5kQXJjaGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGNlbnREaXJDb3VudCwgY2VudERpckNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VudERpclNpemUsIGNlbnREaXJPZmZzZXQsIGxlbihzZWxmLl9jb21tZW50KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBjZW50RGlyQ291bnQsIGNlbnREaXJDb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50RGlyU2l6ZSwgY2VudERpck9mZnNldCwgbGVuKHNlbGYuX2NvbW1lbnQpKQogICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoZW5kcmVjKQogICAgICAgICAgICAgICAgIHNlbGYuZnAud3JpdGUoc2VsZi5fY29tbWVudCkKICAgICAgICAgICAgICAgICBzZWxmLmZwLmZsdXNoKCkKQEAgLTE1NjMsMTIgKzE1ODYsMTIgQEAKICAgICAiIiJDbGFzcyB0byBjcmVhdGUgWklQIGFyY2hpdmVzIHdpdGggUHl0aG9uIGxpYnJhcnkgZmlsZXMgYW5kIHBhY2thZ2VzLiIiIgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9InIiLCBjb21wcmVzc2lvbj1aSVBfU1RPUkVELAotICAgICAgICAgICAgICAgICBhbGxvd1ppcDY0PUZhbHNlLCBvcHRpbWl6ZT0tMSk6CisgICAgICAgICAgICAgICAgIGFsbG93WmlwNjQ9VHJ1ZSwgb3B0aW1pemU9LTEpOgogICAgICAgICBaaXBGaWxlLl9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGU9bW9kZSwgY29tcHJlc3Npb249Y29tcHJlc3Npb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3daaXA2ND1hbGxvd1ppcDY0KQogICAgICAgICBzZWxmLl9vcHRpbWl6ZSA9IG9wdGltaXplCiAKLSAgICBkZWYgd3JpdGVweShzZWxmLCBwYXRobmFtZSwgYmFzZW5hbWU9IiIpOgorICAgIGRlZiB3cml0ZXB5KHNlbGYsIHBhdGhuYW1lLCBiYXNlbmFtZT0iIiwgZmlsdGVyZnVuYz1Ob25lKToKICAgICAgICAgIiIiQWRkIGFsbCBmaWxlcyBmcm9tICJwYXRobmFtZSIgdG8gdGhlIFpJUCBhcmNoaXZlLgogCiAgICAgICAgIElmIHBhdGhuYW1lIGlzIGEgcGFja2FnZSBkaXJlY3RvcnksIHNlYXJjaCB0aGUgZGlyZWN0b3J5IGFuZApAQCAtMTU3OSw3ICsxNjAyLDE0IEBACiAgICAgICAgIGFyY2hpdmUuICBBZGRlZCBtb2R1bGVzIGFyZSBhbHdheXMgbW9kdWxlLnB5byBvciBtb2R1bGUucHljLgogICAgICAgICBUaGlzIG1ldGhvZCB3aWxsIGNvbXBpbGUgdGhlIG1vZHVsZS5weSBpbnRvIG1vZHVsZS5weWMgaWYKICAgICAgICAgbmVjZXNzYXJ5LgorICAgICAgICBJZiBmaWx0ZXJmdW5jKHBhdGhuYW1lKSBpcyBnaXZlbiwgaXQgaXMgY2FsbGVkIHdpdGggZXZlcnkgYXJndW1lbnQuCisgICAgICAgIFdoZW4gaXQgaXMgRmFsc2UsIHRoZSBmaWxlIG9yIGRpcmVjdG9yeSBpcyBza2lwcGVkLgogICAgICAgICAiIiIKKyAgICAgICAgaWYgZmlsdGVyZnVuYyBhbmQgbm90IGZpbHRlcmZ1bmMocGF0aG5hbWUpOgorICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKKyAgICAgICAgICAgICAgICBsYWJlbCA9ICdwYXRoJyBpZiBvcy5wYXRoLmlzZGlyKHBhdGhuYW1lKSBlbHNlICdmaWxlJworICAgICAgICAgICAgICAgIHByaW50KCclcyAiJXMiIHNraXBwZWQgYnkgZmlsdGVyZnVuYycgJSAobGFiZWwsIHBhdGhuYW1lKSkKKyAgICAgICAgICAgIHJldHVybgogICAgICAgICBkaXIsIG5hbWUgPSBvcy5wYXRoLnNwbGl0KHBhdGhuYW1lKQogICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGhuYW1lKToKICAgICAgICAgICAgIGluaXRuYW1lID0gb3MucGF0aC5qb2luKHBhdGhuYW1lLCAiX19pbml0X18ucHkiKQpAQCAtMTYwNCwxMCArMTYzNCwxNSBAQAogICAgICAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUob3MucGF0aC5qb2luKHBhdGgsICJfX2luaXRfXy5weSIpKToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgYSBwYWNrYWdlIGRpcmVjdG9yeSwgYWRkIGl0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZXB5KHBhdGgsIGJhc2VuYW1lKSAgIyBSZWN1cnNpdmUgY2FsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYud3JpdGVweShwYXRoLCBiYXNlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZnVuYz1maWx0ZXJmdW5jKSAgIyBSZWN1cnNpdmUgY2FsbAogICAgICAgICAgICAgICAgICAgICBlbGlmIGV4dCA9PSAiLnB5IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbHRlcmZ1bmMgYW5kIG5vdCBmaWx0ZXJmdW5jKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdmaWxlICIlcyIgc2tpcHBlZCBieSBmaWx0ZXJmdW5jJyAlIHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKHBhdGhbMDotM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJBZGRpbmciLCBhcmNuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShmbmFtZSwgYXJjbmFtZSkKQEAgLTE2MTksMTUgKzE2NTQsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihwYXRobmFtZSwgZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIHJvb3QsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgIGlmIGV4dCA9PSAiLnB5IjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZpbHRlcmZ1bmMgYW5kIG5vdCBmaWx0ZXJmdW5jKHBhdGgpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNlbGYuZGVidWc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCdmaWxlICIlcyIgc2tpcHBlZCBieSBmaWx0ZXJmdW5jJyAlIHBhdGgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lLCBhcmNuYW1lID0gc2VsZi5fZ2V0X2NvZGVuYW1lKHBhdGhbMDotM10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLmRlYnVnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50KCJBZGRpbmciLCBhcmNuYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZShmbmFtZSwgYXJjbmFtZSkKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIHBhdGhuYW1lWy0zOl0gIT0gIi5weSI6CiAgICAgICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKAotICAgICAgICAgICAgICAgICAgICAgICdGaWxlcyBhZGRlZCB3aXRoIHdyaXRlcHkoKSBtdXN0IGVuZCB3aXRoICIucHkiJykKKyAgICAgICAgICAgICAgICAgICAgJ0ZpbGVzIGFkZGVkIHdpdGggd3JpdGVweSgpIG11c3QgZW5kIHdpdGggIi5weSInKQogICAgICAgICAgICAgZm5hbWUsIGFyY25hbWUgPSBzZWxmLl9nZXRfY29kZW5hbWUocGF0aG5hbWVbMDotM10sIGJhc2VuYW1lKQogICAgICAgICAgICAgaWYgc2VsZi5kZWJ1ZzoKICAgICAgICAgICAgICAgICBwcmludCgiQWRkaW5nIGZpbGUiLCBhcmNuYW1lKQpAQCAtMTY1NCw4ICsxNjkzLDggQEAKICAgICAgICAgZmlsZV9weSAgPSBwYXRobmFtZSArICIucHkiCiAgICAgICAgIGZpbGVfcHljID0gcGF0aG5hbWUgKyAiLnB5YyIKICAgICAgICAgZmlsZV9weW8gPSBwYXRobmFtZSArICIucHlvIgotICAgICAgICBweWNhY2hlX3B5YyA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBUcnVlKQotICAgICAgICBweWNhY2hlX3B5byA9IGltcC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBGYWxzZSkKKyAgICAgICAgcHljYWNoZV9weWMgPSBpbXBvcnRsaWIudXRpbC5jYWNoZV9mcm9tX3NvdXJjZShmaWxlX3B5LCBUcnVlKQorICAgICAgICBweWNhY2hlX3B5byA9IGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKGZpbGVfcHksIEZhbHNlKQogICAgICAgICBpZiBzZWxmLl9vcHRpbWl6ZSA9PSAtMToKICAgICAgICAgICAgICMgbGVnYWN5IG1vZGU6IHVzZSB3aGF0ZXZlciBmaWxlIGlzIHByZXNlbnQKICAgICAgICAgICAgIGlmIChvcy5wYXRoLmlzZmlsZShmaWxlX3B5bykgYW5kCkBAIC0xNzQyLDE4ICsxNzgxLDcgQEAKICAgICAgICAgICAgIHN5cy5leGl0KDEpCiAKICAgICAgICAgd2l0aCBaaXBGaWxlKGFyZ3NbMV0sICdyJykgYXMgemY6Ci0gICAgICAgICAgICBvdXQgPSBhcmdzWzJdCi0gICAgICAgICAgICBmb3IgcGF0aCBpbiB6Zi5uYW1lbGlzdCgpOgotICAgICAgICAgICAgICAgIGlmIHBhdGguc3RhcnRzd2l0aCgnLi8nKToKLSAgICAgICAgICAgICAgICAgICAgdGd0ID0gb3MucGF0aC5qb2luKG91dCwgcGF0aFsyOl0pCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdGd0ID0gb3MucGF0aC5qb2luKG91dCwgcGF0aCkKLQotICAgICAgICAgICAgICAgIHRndGRpciA9IG9zLnBhdGguZGlybmFtZSh0Z3QpCi0gICAgICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHRndGRpcik6Ci0gICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRndGRpcikKLSAgICAgICAgICAgICAgICB3aXRoIG9wZW4odGd0LCAnd2InKSBhcyBmcDoKLSAgICAgICAgICAgICAgICAgICAgZnAud3JpdGUoemYucmVhZChwYXRoKSkKKyAgICAgICAgICAgIHpmLmV4dHJhY3RhbGwoYXJnc1syXSkKIAogICAgIGVsaWYgYXJnc1swXSA9PSAnLWMnOgogICAgICAgICBpZiBsZW4oYXJncykgPCAzOgpAQCAtMTc2NCwxNCArMTc5MiwyMSBAQAogICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUocGF0aCk6CiAgICAgICAgICAgICAgICAgemYud3JpdGUocGF0aCwgemlwcGF0aCwgWklQX0RFRkxBVEVEKQogICAgICAgICAgICAgZWxpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgICAgIGlmIHppcHBhdGg6CisgICAgICAgICAgICAgICAgICAgIHpmLndyaXRlKHBhdGgsIHppcHBhdGgpCiAgICAgICAgICAgICAgICAgZm9yIG5tIGluIG9zLmxpc3RkaXIocGF0aCk6CiAgICAgICAgICAgICAgICAgICAgIGFkZFRvWmlwKHpmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCBubSksIG9zLnBhdGguam9pbih6aXBwYXRoLCBubSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwYXRoLCBubSksIG9zLnBhdGguam9pbih6aXBwYXRoLCBubSkpCiAgICAgICAgICAgICAjIGVsc2U6IGlnbm9yZQogCi0gICAgICAgIHdpdGggWmlwRmlsZShhcmdzWzFdLCAndycsIGFsbG93WmlwNjQ9VHJ1ZSkgYXMgemY6Ci0gICAgICAgICAgICBmb3Igc3JjIGluIGFyZ3NbMjpdOgotICAgICAgICAgICAgICAgIGFkZFRvWmlwKHpmLCBzcmMsIG9zLnBhdGguYmFzZW5hbWUoc3JjKSkKKyAgICAgICAgd2l0aCBaaXBGaWxlKGFyZ3NbMV0sICd3JykgYXMgemY6CisgICAgICAgICAgICBmb3IgcGF0aCBpbiBhcmdzWzI6XToKKyAgICAgICAgICAgICAgICB6aXBwYXRoID0gb3MucGF0aC5iYXNlbmFtZShwYXRoKQorICAgICAgICAgICAgICAgIGlmIG5vdCB6aXBwYXRoOgorICAgICAgICAgICAgICAgICAgICB6aXBwYXRoID0gb3MucGF0aC5iYXNlbmFtZShvcy5wYXRoLmRpcm5hbWUocGF0aCkpCisgICAgICAgICAgICAgICAgaWYgemlwcGF0aCBpbiAoJycsIG9zLmN1cmRpciwgb3MucGFyZGlyKToKKyAgICAgICAgICAgICAgICAgICAgemlwcGF0aCA9ICcnCisgICAgICAgICAgICAgICAgYWRkVG9aaXAoemYsIHBhdGgsIHppcHBhdGgpCiAKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgbWFpbigpCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvUkVBRE1FLnR4dCBiL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CmluZGV4IDU2Yzc2OWEuLmRiNjg3YmUgMTAwNjQ0Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CisrKyBiL01hYy9CdWlsZFNjcmlwdC9SRUFETUUudHh0CkBAIC0xLDM1ICsxLDQ2IEBACiBCdWlsZGluZyBhIFB5dGhvbiBNYWMgT1MgWCBkaXN0cmlidXRpb24KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi1UaGUgYGBidWlsZC1pbnN0YWxsLnB5YGAgc2NyaXB0IGNyZWF0ZXMgUHl0aG9uIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZworVGhlIGBgYnVpbGQtaW5zdGFsbGVyLnB5YGAgc2NyaXB0IGNyZWF0ZXMgUHl0aG9uIGRpc3RyaWJ1dGlvbnMsIGluY2x1ZGluZwogY2VydGFpbiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMgYXMgbmVjZXNzYXJ5LiAgSXQgYnVpbGRzIGEgY29tcGxldGUgCiBmcmFtZXdvcmstYmFzZWQgUHl0aG9uIG91dC1vZi10cmVlLCBpbnN0YWxscyBpdCBpbiBhIGZ1bm55IHBsYWNlIHdpdGggCiAkREVTVFJPT1QsIG1hc3NhZ2VzIHRoYXQgaW5zdGFsbGF0aW9uIHRvIHJlbW92ZSAucHljIGZpbGVzIGFuZCBzdWNoLCBjcmVhdGVzIAogYW4gSW5zdGFsbGVyIHBhY2thZ2UgZnJvbSB0aGUgaW5zdGFsbGF0aW9uIHBsdXMgb3RoZXIgZmlsZXMgaW4gYGByZXNvdXJjZXNgYCAKIGFuZCBgYHNjcmlwdHNgYCBhbmQgcGxhY2VkIHRoYXQgb24gYSBgYC5kbWdgYCBkaXNrIGltYWdlLgogCi1BcyBvZiBQeXRob24gMy4zLjAsIFBTRiBwcmFjdGljZSBpcyB0byBidWlsZCB0d28gaW5zdGFsbGVyIHZhcmlhbnRzCi1mb3IgZWFjaCByZWxlYXNlLgorVGhpcyBpbnN0YWxsZXJzIGJ1aWx0IGJ5IHRoaXMgc2NyaXB0IGFyZSBsZWdhY3kgYnVuZGxlIGluc3RhbGxlcnMgdGhhdCBoYXZlCitiZWVuIHN1cHBvcnRlZCBmcm9tIHRoZSBlYXJseSBkYXlzIG9mIE9TIFguICBJbiBwYXJ0aWN1bGFyLCB0aGV5IGFyZSBzdXBwb3J0ZWQKK29uIE9TIFggMTAuMy45LCB0aGUgZWFybGllc3Qgc3VwcG9ydGVkIHJlbGVhc2UgZm9yIGJ1aWxkcyBmcm9tIHRoaXMgc2NyaXB0LgorCitCZWdpbm5pbmcgd2l0aCBQeXRob24gMy40LjIsIFBTRiBwcmFjdGljZSBpcyB0byBidWlsZCB0d28gaW5zdGFsbGVyIHZhcmlhbnRzCit1c2luZyB0aGUgbmV3ZXIgZmxhdCBwYWNrYWdlIGZvcm1hdCwgc3VwcG9ydGVkIG9uIDEwLjUrLCBhbmQgc2lnbmVkIHdpdGggdGhlCitidWlsZGVyJ3MgQXBwbGUgZGV2ZWxvcGVyIGtleSwgYWxsb3dpbmcgZG93bmxvYWRlZCBwYWNrYWdlcyB0byBzYXRpc2Z5IEFwcGxlJ3MKK2RlZmF1bHQgR2F0ZWtlZXBlciBwb2xpY3kgKGUuZy4gc3RhcnRpbmcgd2l0aCAxMC44LCBBcHBsZSBzdG9yZSBkb3dubG9hZHMgYW5kCitBcHBsZSBkZXZlbG9wZXIgSUQgc2lnbmVkIGFwcHMgYW5kIGluc3RhbGxlciBwYWNrYWdlcykuICBUaGUgcHJvY2VzcyBmb3IKK3RyYW5zZm9ybWluZyB0aGUgb3V0cHV0IGJ1aWxkIGFydGlmYWN0cyBpbnRvIHNpZ25lZCBmbGF0IHBhY2thZ2VzIGlzIG5vdAoreWV0IGludGVncmF0ZWQgaW50byBgYGJ1aWxkLWluc3RhbGxlci5weWBgLiAgVGhlIHN0ZXBzIHByaW9yIHRvIHRoZSBmbGF0CitwYWNrYWdlIGNyZWF0aW9uIGFyZSB0aGUgc2FtZSBhcyBmb3IgMy40LjEgYmVsb3cuCiAKIDEuICAzMi1iaXQtb25seSwgaTM4NiBhbmQgUFBDIHVuaXZlcnNhbCwgY2FwYWJsZSBvbiBydW5uaW5nIG9uIGFsbCBtYWNoaW5lcwotICAgIHN1cHBvcnRlZCBieSBNYWMgT1MgWCAxMC41IHRocm91Z2ggKGF0IGxlYXN0KSAxMC44OjoKKyAgICBzdXBwb3J0ZWQgYnkgTWFjIE9TIFggMTAuNSB0aHJvdWdoIChhdCBsZWFzdCkgMTAuOTo6CiAKLSAgICAgICAgL3Vzci9iaW4vcHl0aG9uIGJ1aWxkLWluc3RhbGxlci5weSBcCisgICAgICAgIC9wYXRoL3RvL2Jvb3RzdHJhcC9weXRob24yLjcgYnVpbGQtaW5zdGFsbGVyLnB5IFwKICAgICAgICAgICAgIC0tc2RrLXBhdGg9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjUuc2RrIFwKICAgICAgICAgICAgIC0tdW5pdmVyc2FsLWFyY2hzPTMyLWJpdCBcCiAgICAgICAgICAgICAtLWRlcC10YXJnZXQ9MTAuNQogCiAgICAgLSBidWlsZHMgdGhlIGZvbGxvd2luZyB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAorICAgICAgICAqIGxpYmNyeXB0byBhbmQgbGlic3NsIGZyb20gT3BlblNTTCAxLjAuMSAobmV3LCBhcyBvZiAzLjQuMykKICAgICAgICAgKiBOQ3Vyc2VzIDUuOSAoaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE1MDM3KQotICAgICAgICAqIFNRTGl0ZSAzLjcuMTMKLSAgICAgICAgKiBYWiA1LjAuMworICAgICAgICAqIFNRTGl0ZSAzLjguMTEKKyAgICAgICAgKiBYWiA1LjAuNQogCiAgICAgLSB1c2VzIHN5c3RlbS1zdXBwbGllZCB2ZXJzaW9ucyBvZiB0aGlyZC1wYXJ0eSBsaWJyYXJpZXMKIAogICAgICAgICAqIHJlYWRsaW5lIG1vZHVsZSBsaW5rcyB3aXRoIEFwcGxlIEJTRCBlZGl0bGluZSAobGliZWRpdCkKIAotICAgIC0gcmVxdWlyZXMgQWN0aXZlU3RhdGUgYGBUY2wvVGsgOC40YGAgKGN1cnJlbnRseSA4LjQuMTkpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKKyAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIGBgVGNsL1RrIDguNGBgIChjdXJyZW50bHkgOC40LjIwKSB0byBiZSBpbnN0YWxsZWQgZm9yIGJ1aWxkaW5nCiAKICAgICAtIHJlY29tbWVuZGVkIGJ1aWxkIGVudmlyb25tZW50OgogCkBAIC0zOCw3ICs0OSw4IEBACiAgICAgICAgICogYGBNYWNPU1gxMC41YGAgU0RLCiAgICAgICAgICogYGBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9MTAuNWBgCiAgICAgICAgICogQXBwbGUgYGBnY2MtNC4yYGAKLSAgICAgICAgKiBzeXN0ZW0gUHl0aG9uIDIuNSBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoIFNwaGlueAorICAgICAgICAqIGJvb3RzdHJhcCBub24tZnJhbWV3b3JrIFB5dGhvbiAyLjcgZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgd2l0aAorICAgICAgICAgIFNwaGlueCAoYXMgb2YgMy40LjEpCiAKICAgICAtIGFsdGVybmF0ZSBidWlsZCBlbnZpcm9ubWVudHM6CiAKQEAgLTQ4LDcgKzYwLDcgQEAKIAogMi4gIDY0LWJpdCAvIDMyLWJpdCwgeDg2XzY0IGFuZCBpMzg2IHVuaXZlcnNhbCwgZm9yIE9TIFggMTAuNiAoYW5kIGxhdGVyKTo6CiAKLSAgICAgICAgL3Vzci9iaW4vcHl0aG9uIGJ1aWxkLWluc3RhbGxlci5weSBcCisgICAgICAgIC9wYXRoL3RvL2Jvb3RzdHJhcC9weXRob24yLjcgYnVpbGQtaW5zdGFsbGVyLnB5IFwKICAgICAgICAgICAgIC0tc2RrLXBhdGg9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjYuc2RrIFwKICAgICAgICAgICAgIC0tdW5pdmVyc2FsLWFyY2hzPWludGVsIFwKICAgICAgICAgICAgIC0tZGVwLXRhcmdldD0xMC42CkBAIC01NiwxNCArNjgsMTUgQEAKICAgICAtIGJ1aWxkcyB0aGUgZm9sbG93aW5nIHRoaXJkLXBhcnR5IGxpYnJhcmllcwogCiAgICAgICAgICogTkN1cnNlcyA1LjkgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNTAzNykKLSAgICAgICAgKiBTUUxpdGUgMy43LjEzCi0gICAgICAgICogWFogNS4wLjMKKyAgICAgICAgKiBTUUxpdGUgMy44LjExCisgICAgICAgICogWFogNS4wLjUKIAogICAgIC0gdXNlcyBzeXN0ZW0tc3VwcGxpZWQgdmVyc2lvbnMgb2YgdGhpcmQtcGFydHkgbGlicmFyaWVzCiAKKyAgICAgICAgKiBsaWJjcnlwdG8gYW5kIGxpYnNzbCBmcm9tIEFwcGxlIE9wZW5TU0wgMC45LjgKICAgICAgICAgKiByZWFkbGluZSBtb2R1bGUgbGlua3Mgd2l0aCBBcHBsZSBCU0QgZWRpdGxpbmUgKGxpYmVkaXQpCiAKLSAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIFRjbC9UayA4LjUuOSAob3IgbGF0ZXIpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKKyAgICAtIHJlcXVpcmVzIEFjdGl2ZVN0YXRlIFRjbC9UayA4LjUuMTUuMSAob3IgbGF0ZXIpIHRvIGJlIGluc3RhbGxlZCBmb3IgYnVpbGRpbmcKIAogICAgIC0gcmVjb21tZW5kZWQgYnVpbGQgZW52aXJvbm1lbnQ6CiAKQEAgLTcyLDcgKzg1LDggQEAKICAgICAgICAgKiBgYE1hY09TWDEwLjZgYCBTREsKICAgICAgICAgKiBgYE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0xMC42YGAKICAgICAgICAgKiBBcHBsZSBgYGdjYy00LjJgYAotICAgICAgICAqIHN5c3RlbSBQeXRob24gMi42IGZvciBkb2N1bWVudGF0aW9uIGJ1aWxkIHdpdGggU3BoaW54CisgICAgICAgICogYm9vdHN0cmFwIG5vbi1mcmFtZXdvcmsgUHl0aG9uIDIuNyBmb3IgZG9jdW1lbnRhdGlvbiBidWlsZCB3aXRoCisgICAgICAgICAgU3BoaW54IChhcyBvZiAzLjQuMSkKIAogICAgIC0gYWx0ZXJuYXRlIGJ1aWxkIGVudmlyb25tZW50czoKIApAQCAtODIsNTEgKzk2LDEwIEBACiAgICAgICAgICAgY29uc2lkZXJlZCBhIG1pZ3JhdGlvbiBhaWQgYnkgQXBwbGUgYW5kIGlzIG5vdCBsaWtlbHkgdG8gYmUgZml4ZWQsCiAgICAgICAgICAgaXRzIHVzZSBzaG91bGQgYmUgYXZvaWRlZC4gIFRoZSBvdGhlciBjb21waWxlciwgYGBjbGFuZ2BgLCBoYXMgYmVlbgogICAgICAgICAgIHVuZGVyZ29pbmcgcmFwaWQgZGV2ZWxvcG1lbnQuICBXaGlsZSBpdCBhcHBlYXJzIHRvIGhhdmUgYmVjb21lCi0gICAgICAgICAgcHJvZHVjdGlvbi1yZWFkeSBpbiB0aGUgbW9zdCByZWNlbnQgWGNvZGUgNCByZWxlYXNlcyAoWGNvZGUgNC42LjMKLSAgICAgICAgICBhcyBvZiB0aGlzIHdyaXRpbmcpLCB0aGVyZSBhcmUgc3RpbGwgc29tZSBvcGVuIGlzc3VlcyB3aGVuCi0gICAgICAgICAgYnVpbGRpbmcgUHl0aG9uIGFuZCB0aGVyZSBoYXMgbm90IHlldCBiZWVuIHRoZSBsZXZlbCBvZiBleHBvc3VyZSBpbgotICAgICAgICAgIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzIHRoYXQgdGhlIFhjb2RlIDMgZ2NjLTQuMiBjb21waWxlciBoYXMgaGFkLgotCi0KLSogICBGb3IgUHl0aG9uIDIuNy54IGFuZCAzLjIueCwgdGhlIDMyLWJpdC1vbmx5IGluc3RhbGxlciB3YXMgY29uZmlndXJlZCB0bwotICAgIHN1cHBvcnQgTWFjIE9TIFggMTAuMy45IHRocm91Z2ggKGF0IGxlYXN0KSAxMC42LiAgQmVjYXVzZSBpdCBpcwotICAgIGJlbGlldmVkIHRoYXQgdGhlcmUgYXJlIGZldyBzeXN0ZW1zIHN0aWxsIHJ1bm5pbmcgT1MgWCAxMC4zIG9yIDEwLjQKLSAgICBhbmQgYmVjYXVzZSBpdCBoYXMgYmVjb21lIGluY3JlYXNpbmdseSBkaWZmaWN1bHQgdG8gdGVzdCBhbmQKLSAgICBzdXBwb3J0IHRoZSBkaWZmZXJlbmNlcyBpbiB0aGVzZSBlYXJsaWVyIHN5c3RlbXMsIGFzIG9mIFB5dGhvbiAzLjMuMCB0aGUgUFNGCi0gICAgMzItYml0IGluc3RhbGxlciBubyBsb25nZXIgc3VwcG9ydHMgdGhlbS4gIEZvciByZWZlcmVuY2UgaW4gYnVpbGRpbmcgc3VjaAotICAgIGFuIGluc3RhbGxlciB5b3Vyc2VsZiwgdGhlIGRldGFpbHMgYXJlOjoKLQotICAgICAgICAvdXNyL2Jpbi9weXRob24gYnVpbGQtaW5zdGFsbGVyLnB5IFwKLSAgICAgICAgICAgIC0tc2RrLXBhdGg9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkayBcCi0gICAgICAgICAgICAtLXVuaXZlcnNhbC1hcmNocz0zMi1iaXQgXAotICAgICAgICAgICAgLS1kZXAtdGFyZ2V0PTEwLjMgCi0KLSAgICAtIGJ1aWxkcyB0aGUgZm9sbG93aW5nIHRoaXJkLXBhcnR5IGxpYnJhcmllcwotCi0gICAgICAgICogQnppcDIKLSAgICAgICAgKiBOQ3Vyc2VzCi0gICAgICAgICogR05VIFJlYWRsaW5lIChHUEwpCi0gICAgICAgICogU1FMaXRlIDMKLSAgICAgICAgKiBYWgotICAgICAgICAqIFpsaWIgMS4yLjMKLSAgICAgICAgKiBPcmFjbGUgU2xlZXB5Y2F0IERCIDQuOCAoUHl0aG9uIDIueCBvbmx5KQotCi0gICAgLSByZXF1aXJlcyBBY3RpdmVTdGF0ZSBgYFRjbC9UayA4LjRgYCAoY3VycmVudGx5IDguNC4xOSkgdG8gYmUgaW5zdGFsbGVkIGZvciBidWlsZGluZwotCi0gICAgLSByZWNvbW1lbmRlZCBidWlsZCBlbnZpcm9ubWVudDoKLSAgICAgICAgCi0gICAgICAgICogTWFjIE9TIFggMTAuNS44IFBQQyBvciBJbnRlbAotICAgICAgICAqIFhjb2RlIDMuMS40IChvciBsYXRlcikKLSAgICAgICAgKiBgYE1hY09TWDEwLjR1YGAgU0RLIChsYXRlciBTREtzIGRvIG5vdCBzdXBwb3J0IFBQQyBHMyBwcm9jZXNzb3JzKQotICAgICAgICAqIGBgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPTEwLjNgYAotICAgICAgICAqIEFwcGxlIGBgZ2NjLTQuMGBgCi0gICAgICAgICogc3lzdGVtIFB5dGhvbiAyLjUgZm9yIGRvY3VtZW50YXRpb24gYnVpbGQgd2l0aCBTcGhpbngKLQotICAgIC0gYWx0ZXJuYXRlIGJ1aWxkIGVudmlyb25tZW50czoKLQotICAgICAgICAqIE1hYyBPUyBYIDEwLjYuOCB3aXRoIFhjb2RlIDMuMi42Ci0gICAgICAgICAgICAtIG5lZWQgdG8gY2hhbmdlIGBgL1N5c3RlbS9MaWJyYXJ5L0ZyYW1ld29ya3Mve1RjbCxUa30uZnJhbWV3b3JrL1ZlcnNpb24vQ3VycmVudGBgIHRvIGBgOC40YGAKLQorICAgICAgICAgIHByb2R1Y3Rpb24tcmVhZHkgaW4gdGhlIG1vc3QgcmVjZW50IFhjb2RlIDUgcmVsZWFzZXMsIHRoZSB2ZXJzaW9ucworICAgICAgICAgIGF2YWlsYWJsZSBvbiB0aGUgZGVwcmVjYXRlZCBYY29kZSA0LnggZm9yIDEwLjYgd2VyZSBlYXJseSByZWxlYXNlcworICAgICAgICAgIGFuZCBkaWQgbm90IHJlY2VpdmUgdGhlIGxldmVsIG9mIGV4cG9zdXJlIGluIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRzCisgICAgICAgICAgdGhhdCB0aGUgWGNvZGUgMyBnY2MtNC4yIGNvbXBpbGVyIGhhcyBoYWQuCiAKIAogR2VuZXJhbCBQcmVyZXF1aXNpdGVzCkBAIC0xMzcsNyArMTEwLDEzIEBACiAgIGludGVyZmVyZSB3aXRoIHRoZSBidWlsZC4KIAogKiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHJlbGVhc2UgaXMgYnVpbHQgdXNpbmcgU3BoaW54Ci0gIGJlY2F1c2UgaXQgaXMgaW5jbHVkZWQgaW4gdGhlIGluc3RhbGxlci4KKyAgYmVjYXVzZSBpdCBpcyBpbmNsdWRlZCBpbiB0aGUgaW5zdGFsbGVyLiAgRm9yIDIuNy54IGFuZCAzLngueCB1cCB0byBhbmQKKyAgaW5jbHVkaW5nIDMuNC4wLCB0aGUgYGBEb2MvTWFrZWZpbGVgYCB1c2VzIGBgc3ZuYGAgdG8gZG93bmxvYWQgcmVwb3Mgb2YKKyAgYGBTcGhpbnhgYCBhbmQgaXRzIGRlcGVuZGVuY2llcy4gIEJlZ2lubmluZyB3aXRoIDMuNC4xLCB0aGUgYGBEb2MvTWFrZWZpbGVgYAorICBhc3N1bWVzIHRoZXJlIGlzIGFuIGV4dGVybmFsbHktcHJvdmlkZWQgYGBzcGhpbngtYnVpbGRgYCBhbmQgcmVxdWlyZXMgYXQKKyAgbGVhc3QgUHl0aG9uIDIuNiB0byBydW4uICBCZWNhdXNlIG9mIHRoaXMsIGl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0bworICBidWlsZCBhIDMuNC4xIG9yIGxhdGVyIGluc3RhbGxlciBvbiBPUyBYIDEwLjUgdXNpbmcgdGhlIEFwcGxlLXN1cHBsaWVkCisgIFB5dGhvbiAyLjUuCiAKICogSXQgaXMgc2FmZXN0IHRvIHN0YXJ0IGVhY2ggdmFyaWFudCBidWlsZCB3aXRoIGFuIGVtcHR5IHNvdXJjZSBkaXJlY3RvcnkKICAgcG9wdWxhdGVkIHdpdGggYSBmcmVzaCBjb3B5IG9mIHRoZSB1bnRhcnJlZCBzb3VyY2UuCkBAIC0xOTUsOCArMTc0LDggQEAKIG9uIGFsbCBzdXBwb3J0ZWQgT1MgWCByZWxlYXNlcyBhbmQgYXJjaGl0ZWN0dXJlcy4gIEFzIGEgcHJhY3RpY2FsIG1hdHRlciwKIHRoYXQgaXMgZ2VuZXJhbGx5IG5vdCBwb3NzaWJsZS4gIEF0IGEgbWluaW11bSwgdmFyaWFudCAxIHNob3VsZCBiZSBydW4gb24KIGEgUFBDIEc0IHN5c3RlbSB3aXRoIE9TIFggMTAuNSBhbmQgYXQgbGVhc3Qgb25lIEludGVsIHN5c3RlbSBydW5uaW5nIE9TIFgKLTEwLjgsIDEwLjcsIDEwLjYsIG9yIDEwLjUuICBWYXJpYW50IDIgc2hvdWxkIGJlIHJ1biBvbiAxMC44LCAxMC43LCBhbmQgMTAuNgotc3lzdGVtcyBpbiBib3RoIDMyLWJpdCBhbmQgNjQtYml0IG1vZGVzLjo6CisxMC45LCAxMC44LCAxMC43LCAxMC42LCBvciAxMC41LiAgVmFyaWFudCAyIHNob3VsZCBiZSBydW4gb24gMTAuOSwgMTAuOCwKKzEwLjcsIGFuZCAxMC42IHN5c3RlbXMgaW4gYm90aCAzMi1iaXQgYW5kIDY0LWJpdCBtb2Rlcy46OgogCiAgICAgL3Vzci9sb2NhbC9iaW4vcHl0aG9ubi5uIC1tIHRlc3QgLXcgLXUgYWxsLC1sYXJnZWZpbGUKICAgICAvdXNyL2xvY2FsL2Jpbi9weXRob25uLm4tMzIgLW0gdGVzdCAtdyAtdSBhbGwKQEAgLTIwNyw3ICsxODYsNyBAQAogZHVyaW5nIHRlc3RpbmcgYW5kIGNhbiBiZSBpZ25vcmVkLgogCiBJdCBpcyBhbHNvIHJlY29tbWVuZCB0byBsYXVuY2ggSURMRSBhbmQgdmVyaWZ5IHRoYXQgaXQgaXMgYXQgbGVhc3QKLWZ1bmN0aW9uYWwuICBEb3VibGUtY2xpY2sgb24gdGhlIElETEUgYXBwIGljb24gaW4gYGAvQXBwbGljYXRpb25zL1B5dGhvbm4ubmBgLgorZnVuY3Rpb25hbC4gIERvdWJsZS1jbGljayBvbiB0aGUgSURMRSBhcHAgaWNvbiBpbiBgYC9BcHBsaWNhdGlvbnMvUHl0aG9uIG4ubmBgLgogSXQgc2hvdWxkIGFsc28gYmUgdGVzdGVkIGZyb20gdGhlIGNvbW1hbmQgbGluZTo6CiAKICAgICAvdXNyL2xvY2FsL2Jpbi9pZGxlbi5uCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5IGIvTWFjL0J1aWxkU2NyaXB0L2J1aWxkLWluc3RhbGxlci5weQppbmRleCBmZDVkNWMzLi4xZDQ2OWJiIDEwMDc1NQotLS0gYS9NYWMvQnVpbGRTY3JpcHQvYnVpbGQtaW5zdGFsbGVyLnB5CisrKyBiL01hYy9CdWlsZFNjcmlwdC9idWlsZC1pbnN0YWxsZXIucHkKQEAgLTgsNyArOCw5IEBACiBQbGVhc2UgZW5zdXJlIHRoYXQgdGhpcyBzY3JpcHQga2VlcHMgd29ya2luZyB3aXRoIFB5dGhvbiAyLjUsIHRvIGF2b2lkCiBib290c3RyYXAgaXNzdWVzICgvdXNyL2Jpbi9weXRob24gaXMgUHl0aG9uIDIuNSBvbiBPU1ggMTAuNSkuICBTcGhpbngsCiB3aGljaCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBkb2N1bWVudGF0aW9uLCBjdXJyZW50bHkgcmVxdWlyZXMgYXQgbGVhc3QKLVB5dGhvbiAyLjQuCitQeXRob24gMi40LiAgSG93ZXZlciwgYXMgb2YgUHl0aG9uIDMuNC4xLCBEb2MgYnVpbGRzIHJlcXVpcmUgYW4gZXh0ZXJuYWwKK3NwaGlueC1idWlsZCBhbmQgdGhlIGN1cnJlbnQgdmVyc2lvbnMgb2YgU3BoaW54IG5vdyByZXF1aXJlIGF0IGxlYXN0CitQeXRob24gMi42LgogCiBJbiBhZGRpdGlvbiB0byB3aGF0IGlzIHN1cHBsaWVkIHdpdGggT1MgWCAxMC41KyBhbmQgWGNvZGUgMyssIHRoZSBzY3JpcHQKIHJlcXVpcmVzIGFuIGluc3RhbGxlZCB2ZXJzaW9uIG9mIGhnIGFuZCBhIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YKQEAgLTIxLDggKzIzLDggQEAKIAogMzItYml0LW9ubHkgaW5zdGFsbGVyIGJ1aWxkcyBhcmUgc3RpbGwgcG9zc2libGUgb24gT1MgWCAxMC40IHdpdGggWGNvZGUgMi41CiBhbmQgdGhlIGluc3RhbGxhdGlvbiBvZiBhZGRpdGlvbmFsIGNvbXBvbmVudHMsIHN1Y2ggYXMgYSBuZXdlciBQeXRob24KLSgyLjUgaXMgbmVlZGVkIGZvciBQeXRob24gcGFyc2VyIHVwZGF0ZXMpLCBoZywgYW5kIHN2biAoZm9yIHRoZSBkb2N1bWVudGF0aW9uCi1idWlsZCkuCisoMi41IGlzIG5lZWRlZCBmb3IgUHl0aG9uIHBhcnNlciB1cGRhdGVzKSwgaGcsIGFuZCBmb3IgdGhlIGRvY3VtZW50YXRpb24KK2J1aWxkIGVpdGhlciBzdm4gKHByZS0zLjQuMSkgb3Igc3BoaW54LWJ1aWxkICgzLjQuMSBhbmQgbGF0ZXIpLgogCiBVc2FnZTogc2VlIFVTQUdFIHZhcmlhYmxlIGluIHRoZSBzY3JpcHQuCiAiIiIKQEAgLTYwLDExICs2MiwxNiBAQAogICAgIHJldHVybiAiJyVzJyIlKHZhbHVlLnJlcGxhY2UoIiciLCAiJ1wiJ1wiJyIpKQogCiBkZWYgZ3JlcFZhbHVlKGZuLCB2YXJpYWJsZSk6CisgICAgIiIiCisgICAgUmV0dXJuIHRoZSB1bnF1b3RlZCB2YWx1ZSBvZiBhIHZhcmlhYmxlIGZyb20gYSBmaWxlLi4KKyAgICBRVU9URURfVkFMVUU9J3F1b3RlcycgICAgLT4gc3RyKCdxdW90ZXMnKQorICAgIFVOUVVPVEVEX1ZBTFVFPW5vcXVvdGVzICAtPiBzdHIoJ25vcXVvdGVzJykKKyAgICAiIiIKICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlICsgJz0nCiAgICAgZm9yIGxuIGluIG9wZW4oZm4sICdyJyk6CiAgICAgICAgIGlmIGxuLnN0YXJ0c3dpdGgodmFyaWFibGUpOgogICAgICAgICAgICAgdmFsdWUgPSBsbltsZW4odmFyaWFibGUpOl0uc3RyaXAoKQotICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzE6LTFdCisgICAgICAgICAgICByZXR1cm4gdmFsdWUuc3RyaXAoIlwiJyIpCiAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW5ub3QgZmluZCB2YXJpYWJsZSAlcyIgJSB2YXJpYWJsZVs6LTFdKQogCiBfY2FjaGVfZ2V0VmVyc2lvbiA9IE5vbmUKQEAgLTc2LDkgKzgzLDYgQEAKICAgICAgICAgICAgIG9zLnBhdGguam9pbihTUkNESVIsICdjb25maWd1cmUnKSwgJ1BBQ0tBR0VfVkVSU0lPTicpCiAgICAgcmV0dXJuIF9jYWNoZV9nZXRWZXJzaW9uCiAKLWRlZiBnZXRWZXJzaW9uVHVwbGUoKToKLSAgICByZXR1cm4gdHVwbGUoW2ludChuKSBmb3IgbiBpbiBnZXRWZXJzaW9uKCkuc3BsaXQoJy4nKV0pCi0KIGRlZiBnZXRWZXJzaW9uTWFqb3JNaW5vcigpOgogICAgIHJldHVybiB0dXBsZShbaW50KG4pIGZvciBuIGluIGdldFZlcnNpb24oKS5zcGxpdCgnLicsIDIpXSkKIApAQCAtOTUsNiArOTksOSBAQAogICAgICAgICAgICAgcmV0dXJuIF9jYWNoZV9nZXRGdWxsVmVyc2lvbgogICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiQ2Fubm90IGZpbmQgZnVsbCB2ZXJzaW9uPz8iKQogCitGV19QUkVGSVggPSBbIkxpYnJhcnkiLCAiRnJhbWV3b3JrcyIsICJQeXRob24uZnJhbWV3b3JrIl0KK0ZXX1ZFUlNJT05fUFJFRklYID0gIi0tdW5kZWZpbmVkLS0iICMgaW5pdGlhbGl6ZWQgaW4gcGFyc2VPcHRpb25zCisKICMgVGhlIGRpcmVjdG9yeSB3ZSdsbCB1c2UgdG8gY3JlYXRlIHRoZSBidWlsZCAod2lsbCBiZSBlcmFzZWQgYW5kIHJlY3JlYXRlZCkKIFdPUktESVIgPSAiL3RtcC9fcHkiCiAKQEAgLTE0OCwxOSArMTU1LDIxIEBACiAjICRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgLT4gbWluaW11bSBPUyBYIGxldmVsCiBERVBUQVJHRVQgPSAnMTAuMycKIAotdGFyZ2V0X2NjX21hcCA9IHsKK2RlZiBnZXREZXB0YXJnZXRUdXBsZSgpOgorICAgIHJldHVybiB0dXBsZShbaW50KG4pIGZvciBuIGluIERFUFRBUkdFVC5zcGxpdCgnLicpWzA6Ml1dKQorCitkZWYgZ2V0VGFyZ2V0Q29tcGlsZXJzKCk6CisgICAgdGFyZ2V0X2NjX21hcCA9IHsKICAgICAgICAgJzEwLjMnOiAoJ2djYy00LjAnLCAnZysrLTQuMCcpLAogICAgICAgICAnMTAuNCc6ICgnZ2NjLTQuMCcsICdnKystNC4wJyksCiAgICAgICAgICcxMC41JzogKCdnY2MtNC4yJywgJ2crKy00LjInKSwKICAgICAgICAgJzEwLjYnOiAoJ2djYy00LjInLCAnZysrLTQuMicpLAotICAgICAgICAnMTAuNyc6ICgnY2xhbmcnLCAnY2xhbmcrKycpLAotICAgICAgICAnMTAuOCc6ICgnY2xhbmcnLCAnY2xhbmcrKycpLAotICAgICAgICAnMTAuOSc6ICgnY2xhbmcnLCAnY2xhbmcrKycpLAotfQorICAgIH0KKyAgICByZXR1cm4gdGFyZ2V0X2NjX21hcC5nZXQoREVQVEFSR0VULCAoJ2NsYW5nJywgJ2NsYW5nKysnKSApCiAKLUNDLCBDWFggPSB0YXJnZXRfY2NfbWFwW0RFUFRBUkdFVF0KK0NDLCBDWFggPSBnZXRUYXJnZXRDb21waWxlcnMoKQogCi1QWVRIT05fMyA9IGdldFZlcnNpb25UdXBsZSgpID49ICgzLCAwKQorUFlUSE9OXzMgPSBnZXRWZXJzaW9uTWFqb3JNaW5vcigpID49ICgzLCAwKQogCiBVU0FHRSA9IHRleHR3cmFwLmRlZGVudCgiIiJcCiAgICAgVXNhZ2U6IGJ1aWxkX3B5dGhvbiBbb3B0aW9uc10KQEAgLTE4NCw2ICsxOTMsMTAgQEAKICMgICAgICAgICAgICAgICAgICAgICAgICcvTGlicmFyeS9GcmFtZXdvcmtzL1RrLmZyYW1ld29yay9WZXJzaW9ucy84LjUvVGsnXQogRVhQRUNURURfU0hBUkVEX0xJQlMgPSB7fQogCisjIExpc3Qgb2YgbmFtZXMgb2YgdGhpcmQgcGFydHkgc29mdHdhcmUgYnVpbHQgd2l0aCB0aGlzIGluc3RhbGxlci4KKyMgVGhlIG5hbWVzIHdpbGwgYmUgaW5zZXJ0ZWQgaW50byB0aGUgcnRmIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UuCitUSElSRF9QQVJUWV9MSUJTID0gW10KKwogIyBJbnN0cnVjdGlvbnMgZm9yIGJ1aWxkaW5nIGxpYnJhcmllcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIGJ1aWxkaW5nIGEKICMgYmF0dGVyaWVzIGluY2x1ZGVkIHB5dGhvbi4KICMgICBbVGhlIHJlY2lwZXMgYXJlIGRlZmluZWQgaGVyZSBmb3IgY29udmVuaWVuY2UgYnV0IGluc3RhbnRpYXRlZCBsYXRlciBhZnRlcgpAQCAtMTkxLDkgKzIwNCw1MyBAQAogZGVmIGxpYnJhcnlfcmVjaXBlcygpOgogICAgIHJlc3VsdCA9IFtdCiAKLSAgICBMVF8xMF81ID0gYm9vbChERVBUQVJHRVQgPCAnMTAuNScpCisgICAgTFRfMTBfNSA9IGJvb2woZ2V0RGVwdGFyZ2V0VHVwbGUoKSA8ICgxMCwgNSkpCiAKLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6CisgICAgaWYgZ2V0RGVwdGFyZ2V0VHVwbGUoKSA8ICgxMCwgNik6CisgICAgICAgICMgVGhlIE9wZW5TU0wgbGlicyBzaGlwcGVkIHdpdGggT1MgWCAxMC41IGFuZCBlYXJsaWVyIGFyZQorICAgICAgICAjIGhvcGVsZXNzbHkgb3V0LW9mLWRhdGUgYW5kIGRvIG5vdCBpbmNsdWRlIEFwcGxlJ3MgdGllLWluIHRvCisgICAgICAgICMgdGhlIHJvb3QgY2VydGlmaWNhdGVzIGluIHRoZSB1c2VyIGFuZCBzeXN0ZW0ga2V5Y2hhaW5zIHZpYSBURUEKKyAgICAgICAgIyB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIE9TIFggMTAuNi4gIE5vdGUgdGhhdCB0aGlzIGFwcGxpZXMgdG8KKyAgICAgICAgIyBwcm9ncmFtcyBidWlsdCBhbmQgbGlua2VkIHdpdGggYSAxMC41IFNESyBldmVuIHdoZW4gcnVuIG9uCisgICAgICAgICMgbmV3ZXIgdmVyc2lvbnMgb2YgT1MgWC4KKyAgICAgICAgIworICAgICAgICAjIERlYWxpbmcgd2l0aCBDQXMgaXMgbWVzc3kuICBGb3Igbm93LCBqdXN0IHN1cHBseSBhCisgICAgICAgICMgbG9jYWwgbGlic3NsIGFuZCBsaWJjcnlwdG8gZm9yIHRoZSBvbGRlciBpbnN0YWxsZXIgdmFyaWFudHMKKyAgICAgICAgIyAoZS5nLiB0aGUgcHl0aG9uLm9yZyAxMC41KyAzMi1iaXQtb25seSBpbnN0YWxsZXIpIHRoYXQgdXNlIHRoZQorICAgICAgICAjIHNhbWUgZGVmYXVsdCBzc2wgY2VydGZpbGUgbG9jYXRpb24gYXMgdGhlIHN5c3RlbSBsaWJzIGRvOgorICAgICAgICAjICAgL1N5c3RlbS9MaWJyYXJ5L09wZW5TU0wvY2VydC5wZW0KKyAgICAgICAgIyBUaGVuIGF0IGxlYXN0IFRMUyBjb25uZWN0aW9ucyBjYW4gYmUgbmVnb3RpYXRlZCB3aXRoIHNpdGVzIHRoYXQKKyAgICAgICAgIyB1c2Ugc2hhLTI1NiBjZXJ0cyBsaWtlIHB5dGhvbi5vcmcsIGFzc3VtaW5nIHRoZSBwcm9wZXIgQ0EgY2VydHMKKyAgICAgICAgIyBoYXZlIGJlZW4gc3VwcGxpZWQuICBUaGUgZGVmYXVsdCBDQSBjZXJ0IG1hbmFnZW1lbnQgaXNzdWVzIGZvcgorICAgICAgICAjIDEwLjUgYW5kIGVhcmxpZXIgYnVpbGRzIGFyZSB0aGUgc2FtZSBhcyBiZWZvcmUsIG90aGVyIHRoYW4gaXQgaXMKKyAgICAgICAgIyBub3cgbW9yZSBvYnZpb3VzIHdpdGggY2VydCBjaGVja2luZyBlbmFibGVkIGJ5IGRlZmF1bHQgaW4gdGhlCisgICAgICAgICMgc3RhbmRhcmQgbGlicmFyeS4KKyAgICAgICAgIworICAgICAgICAjIEZvciBidWlsZHMgd2l0aCAxMC42KyBTREtzLCBjb250aW51ZSB0byB1c2UgdGhlIGRlcHJlY2F0ZWQgYnV0CisgICAgICAgICMgbGVzcyBvdXQtb2YtZGF0ZSBBcHBsZSAwLjkuOCBsaWJzIGZvciBub3cuICBXaGlsZSB0aGV5IGFyZSBsZXNzCisgICAgICAgICMgc2VjdXJlIHRoYW4gdXNpbmcgYW4gdXAtdG8tZGF0ZSAxLjAuMSB2ZXJzaW9uLCBkb2luZyBzbworICAgICAgICAjIGF2b2lkcyB0aGUgYmlnIHByb2JsZW1zIG9mIGZvcmNpbmcgdXNlcnMgdG8gaGF2ZSB0byBtYW5hZ2UKKyAgICAgICAgIyBkZWZhdWx0IENBcyB0aGVtc2VsdmVzLCB0aGFua3MgdG8gdGhlIEFwcGxlIGxpYnMgdXNpbmcgcHJpdmF0ZSBURUEKKyAgICAgICAgIyBBUElzIGZvciBjZXJ0IHZhbGlkYXRpb24gZnJvbSBrZXljaGFpbnMgaWYgdmFsaWRhdGlvbiB1c2luZyB0aGUKKyAgICAgICAgIyBzdGFuZGFyZCBPcGVuU1NMIGxvY2F0aW9ucyAoL1N5c3RlbS9MaWJyYXJ5L09wZW5TU0wsIG5vcm1hbGx5IGVtcHR5KQorICAgICAgICAjIGZhaWxzLgorCisgICAgICAgIHJlc3VsdC5leHRlbmQoWworICAgICAgICAgIGRpY3QoCisgICAgICAgICAgICAgIG5hbWU9Ik9wZW5TU0wgMS4wLjJlIiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwczovL3d3dy5vcGVuc3NsLm9yZy9zb3VyY2Uvb3BlbnNzbC0xLjAuMmUudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09JzUyNjJiZmEyNWI2MGVkOWRlOWYyOGQ1ZDUyZDc3ZmM1JywKKyAgICAgICAgICAgICAgcGF0Y2hlcz1bCisgICAgICAgICAgICAgICAgICAib3BlbnNzbF9zZGtfbWFrZWRlcGVuZC5wYXRjaCIsCisgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgYnVpbGRyZWNpcGU9YnVpbGRfdW5pdmVyc2FsX29wZW5zc2wsCisgICAgICAgICAgICAgIGNvbmZpZ3VyZT1Ob25lLAorICAgICAgICAgICAgICBpbnN0YWxsPU5vbmUsCisgICAgICAgICAgKSwKKyAgICAgICAgXSkKKworIyAgIERpc2FibGUgZm9yIG5vdworICAgIGlmIEZhbHNlOiAgICMgaWYgZ2V0RGVwdGFyZ2V0VHVwbGUoKSA+ICgxMCwgNSk6CiAgICAgICAgIHJlc3VsdC5leHRlbmQoWwogICAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICAgIG5hbWU9IlRjbCA4LjUuMTUiLApAQCAtMjM0LDEyICsyOTEsMTIgQEAKICAgICAgICAgICAgICAgICApLAogICAgICAgICBdKQogCi0gICAgaWYgZ2V0VmVyc2lvblR1cGxlKCkgPj0gKDMsIDMpOgorICAgIGlmIFBZVEhPTl8zOgogICAgICAgICByZXN1bHQuZXh0ZW5kKFsKICAgICAgICAgICBkaWN0KAotICAgICAgICAgICAgICBuYW1lPSJYWiA1LjAuMyIsCi0gICAgICAgICAgICAgIHVybD0iaHR0cDovL3R1a2Fhbmkub3JnL3h6L3h6LTUuMC4zLnRhci5neiIsCi0gICAgICAgICAgICAgIGNoZWNrc3VtPSdmZWZlNTJmOWVjZDUyMWRlMmE4Y2UzOGMyMWEyNzU3NCcsCisgICAgICAgICAgICAgIG5hbWU9IlhaIDUuMC41IiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwOi8vdHVrYWFuaS5vcmcveHoveHotNS4wLjUudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09JzE5ZDkyNGUwNjZiNmZmZjBiYzlkMTk4MWI0ZTUzMTk2JywKICAgICAgICAgICAgICAgY29uZmlndXJlX3ByZT1bCiAgICAgICAgICAgICAgICAgICAgICctLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZycsCiAgICAgICAgICAgICAgIF0KQEAgLTI4Miw5ICszMzksOSBAQAogICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICApLAogICAgICAgICAgIGRpY3QoCi0gICAgICAgICAgICAgIG5hbWU9IlNRTGl0ZSAzLjcuMTMiLAotICAgICAgICAgICAgICB1cmw9Imh0dHA6Ly93d3cuc3FsaXRlLm9yZy9zcWxpdGUtYXV0b2NvbmYtMzA3MTMwMC50YXIuZ3oiLAotICAgICAgICAgICAgICBjaGVja3N1bT0nYzk3ZGY0MDNlOGEzZDViNjdiYjQwOGZjZDZhYWJkOGUnLAorICAgICAgICAgICAgICBuYW1lPSJTUUxpdGUgMy44LjExIiwKKyAgICAgICAgICAgICAgdXJsPSJodHRwczovL3d3dy5zcWxpdGUub3JnLzIwMTUvc3FsaXRlLWF1dG9jb25mLTMwODExMDAudGFyLmd6IiwKKyAgICAgICAgICAgICAgY2hlY2tzdW09Jzc3YjQ1MTkyNTEyMTAyOGJlZmJkZGJmNDVlYTJiYzQ5JywKICAgICAgICAgICAgICAgZXh0cmFfY2ZsYWdzPSgnLU9zICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLURTUUxJVEVfRU5BQkxFX0ZUUzQgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICctRFNRTElURV9FTkFCTEVfRlRTM19QQVJFTlRIRVNJUyAnCkBAIC0zMDEsNyArMzU4LDcgQEAKICAgICAgICAgICApLAogICAgICAgICBdKQogCi0gICAgaWYgREVQVEFSR0VUIDwgJzEwLjUnOgorICAgIGlmIGdldERlcHRhcmdldFR1cGxlKCkgPCAoMTAsIDUpOgogICAgICAgICByZXN1bHQuZXh0ZW5kKFsKICAgICAgICAgICBkaWN0KAogICAgICAgICAgICAgICBuYW1lPSJCemlwMiAxLjAuNiIsCkBAIC00MzIsMTEgKzQ4OSwyNCBAQAogICAgICAgICAgICAgdG9wZGlyPSIvTGlicmFyeS9GcmFtZXdvcmtzL1B5dGhvbi5mcmFtZXdvcmsiLAogICAgICAgICAgICAgc291cmNlPSIvZW1wdHktZGlyIiwKICAgICAgICAgICAgIHJlcXVpcmVkPUZhbHNlLAotICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfcHl0aG9uMywKKyAgICAgICAgICAgIHNlbGVjdGVkPSdzZWxlY3RlZCcsCisgICAgICAgICksCisgICAgICAgIGRpY3QoCisgICAgICAgICAgICBuYW1lPSJQeXRob25JbnN0YWxsUGlwIiwKKyAgICAgICAgICAgIGxvbmdfbmFtZT0iSW5zdGFsbCBvciB1cGdyYWRlIHBpcCIsCisgICAgICAgICAgICByZWFkbWU9IiIiXAorICAgICAgICAgICAgICAgIFRoaXMgcGFja2FnZSBpbnN0YWxscyAob3IgdXBncmFkZXMgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24pCisgICAgICAgICAgICAgICAgcGlwLCBhIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4KKyAgICAgICAgICAgICAgICAiIiIsCisgICAgICAgICAgICBwb3N0ZmxpZ2h0PSJzY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwIiwKKyAgICAgICAgICAgIHRvcGRpcj0iL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrIiwKKyAgICAgICAgICAgIHNvdXJjZT0iL2VtcHR5LWRpciIsCisgICAgICAgICAgICByZXF1aXJlZD1GYWxzZSwKKyAgICAgICAgICAgIHNlbGVjdGVkPSdzZWxlY3RlZCcsCiAgICAgICAgICksCiAgICAgXQogCi0gICAgaWYgREVQVEFSR0VUIDwgJzEwLjQnIGFuZCBub3QgUFlUSE9OXzM6CisgICAgaWYgZ2V0RGVwdGFyZ2V0VHVwbGUoKSA8ICgxMCwgNCkgYW5kIG5vdCBQWVRIT05fMzoKICAgICAgICAgcmVzdWx0LmFwcGVuZCgKICAgICAgICAgICAgIGRpY3QoCiAgICAgICAgICAgICAgICAgbmFtZT0iUHl0aG9uU3lzdGVtRml4ZXMiLApAQCAtNDUzLDYgKzUyMyw3IEBACiAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ9dW5zZWxlY3RlZF9mb3JfcHl0aG9uMywKICAgICAgICAgICAgICkKICAgICAgICAgKQorCiAgICAgcmV0dXJuIHJlc3VsdAogCiBkZWYgZmF0YWwobXNnKToKQEAgLTU2NywyMCArNjM4LDYgQEAKICAgICAgICAgICAgICAgICAlIGZyYW1ld29ya3NbJ1RrJ10sCiAgICAgICAgICAgICBdCiAKLSAgICAjIEZvciAxMC42KyBidWlsZHMsIHdlIGJ1aWxkIHR3byB2ZXJzaW9ucyBvZiBfdGtpbnRlcjoKLSAgICAjICAgIC0gdGhlIHRyYWRpdGlvbmFsIHZlcnNpb24gKHJlbmFtZWQgdG8gX3RraW50ZXJfbGlicmFyeS5zbykgbGlua2VkCi0gICAgIyAgICAgICB3aXRoIC9MaWJyYXJ5L0ZyYW1ld29ya3Mve1RjbCxUa30uZnJhbWV3b3JrCi0gICAgIyAgICAtIHRoZSBkZWZhdWx0IHZlcnNpb24gbGlua2VkIHdpdGggb3VyIGJ1aWx0aW4gY29waWVzIG9mIFRjbCBhbmQgVGsKLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgIEVYUEVDVEVEX1NIQVJFRF9MSUJTWydfdGtpbnRlcl9saWJyYXJ5LnNvJ10gPSBcCi0gICAgICAgICAgICBFWFBFQ1RFRF9TSEFSRURfTElCU1snX3RraW50ZXIuc28nXQotICAgICAgICBFWFBFQ1RFRF9TSEFSRURfTElCU1snX3RraW50ZXIuc28nXSA9IFsKLSAgICAgICAgICAgICAgICAiL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyVzL2xpYi9saWJ0Y2wlcy5keWxpYiIKLSAgICAgICAgICAgICAgICAgICAgJSAoZ2V0VmVyc2lvbigpLCBmcmFtZXdvcmtzWydUY2wnXSksCi0gICAgICAgICAgICAgICAgIi9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yay9WZXJzaW9ucy8lcy9saWIvbGlidGslcy5keWxpYiIKLSAgICAgICAgICAgICAgICAgICAgJSAoZ2V0VmVyc2lvbigpLCBmcmFtZXdvcmtzWydUayddKSwKLSAgICAgICAgICAgICAgICBdCi0KICAgICAjIFJlbW92ZSBpbmhlcml0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHdoaWNoIG1pZ2h0IGluZmx1ZW5jZSBidWlsZAogICAgIGVudmlyb25fdmFyX3ByZWZpeGVzID0gWydDUEFUSCcsICdDX0lOQ0xVREVfJywgJ0RZTERfJywgJ0xBTkcnLCAnTENfJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTERfJywgJ0xJQlJBUllfJywgJ1BBVEgnLCAnUFlUSE9OJ10KQEAgLTYwMSw3ICs2NTgsMTAgQEAKICAgICAgICAgYmFzZV9wYXRoID0gYmFzZV9wYXRoICsgJzonICsgT0xEX0RFVkVMT1BFUl9UT09MUwogICAgIG9zLmVudmlyb25bJ1BBVEgnXSA9IGJhc2VfcGF0aAogICAgIHByaW50KCJTZXR0aW5nIGRlZmF1bHQgUEFUSDogJXMiJShvcy5lbnZpcm9uWydQQVRIJ10pKQotCisgICAgIyBFbnN1cmUgd3MgaGF2ZSBhY2Nlc3MgdG8gaGcgYW5kIHRvIHNwaGlueC1idWlsZC4KKyAgICAjIFlvdSBtYXkgaGF2ZSB0byBjcmVhdGUgbGlua3MgaW4gL3Vzci9iaW4gZm9yIHRoZW0uCisgICAgcnVuQ29tbWFuZCgnaGcgLS12ZXJzaW9uJykKKyAgICBydW5Db21tYW5kKCdzcGhpbngtYnVpbGQgLS12ZXJzaW9uJykKIAogZGVmIHBhcnNlT3B0aW9ucyhhcmdzPU5vbmUpOgogICAgICIiIgpAQCAtNjA5LDYgKzY2OSw3IEBACiAgICAgIiIiCiAgICAgZ2xvYmFsIFdPUktESVIsIERFUFNSQywgU0RLUEFUSCwgU1JDRElSLCBERVBUQVJHRVQKICAgICBnbG9iYWwgVU5JVkVSU0FMT1BUUywgVU5JVkVSU0FMQVJDSFMsIEFSQ0hMSVNULCBDQywgQ1hYCisgICAgZ2xvYmFsIEZXX1ZFUlNJT05fUFJFRklYCiAKICAgICBpZiBhcmdzIGlzIE5vbmU6CiAgICAgICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KQEAgLTY2NiwyMSArNzI3LDIzIEBACiAgICAgU0RLUEFUSD1vcy5wYXRoLmFic3BhdGgoU0RLUEFUSCkKICAgICBERVBTUkM9b3MucGF0aC5hYnNwYXRoKERFUFNSQykKIAotICAgIENDLCBDWFg9dGFyZ2V0X2NjX21hcFtERVBUQVJHRVRdCisgICAgQ0MsIENYWCA9IGdldFRhcmdldENvbXBpbGVycygpCiAKLSAgICBwcmludCgiU2V0dGluZ3M6IikKLSAgICBwcmludCgiICogU291cmNlIGRpcmVjdG9yeToiLCBTUkNESVIpCi0gICAgcHJpbnQoIiAqIEJ1aWxkIGRpcmVjdG9yeTogIiwgV09SS0RJUikKLSAgICBwcmludCgiICogU0RLIGxvY2F0aW9uOiAgICAiLCBTREtQQVRIKQotICAgIHByaW50KCIgKiBUaGlyZC1wYXJ0eSBzb3VyY2U6IiwgREVQU1JDKQotICAgIHByaW50KCIgKiBEZXBsb3ltZW50IHRhcmdldDoiLCBERVBUQVJHRVQpCi0gICAgcHJpbnQoIiAqIFVuaXZlcnNhbCBhcmNoaXRlY3R1cmVzOiIsIEFSQ0hMSVNUKQotICAgIHByaW50KCIgKiBDIGNvbXBpbGVyOiIsIENDKQotICAgIHByaW50KCIgKiBDKysgY29tcGlsZXI6IiwgQ1hYKQorICAgIEZXX1ZFUlNJT05fUFJFRklYID0gRldfUFJFRklYWzpdICsgWyJWZXJzaW9ucyIsIGdldFZlcnNpb24oKV0KKworICAgIHByaW50KCItLSBTZXR0aW5nczoiKQorICAgIHByaW50KCIgICAqIFNvdXJjZSBkaXJlY3Rvcnk6ICAgICVzIiAlIFNSQ0RJUikKKyAgICBwcmludCgiICAgKiBCdWlsZCBkaXJlY3Rvcnk6ICAgICAlcyIgJSBXT1JLRElSKQorICAgIHByaW50KCIgICAqIFNESyBsb2NhdGlvbjogICAgICAgICVzIiAlIFNES1BBVEgpCisgICAgcHJpbnQoIiAgICogVGhpcmQtcGFydHkgc291cmNlOiAgJXMiICUgREVQU1JDKQorICAgIHByaW50KCIgICAqIERlcGxveW1lbnQgdGFyZ2V0OiAgICVzIiAlIERFUFRBUkdFVCkKKyAgICBwcmludCgiICAgKiBVbml2ZXJzYWwgYXJjaHM6ICAgICAlcyIgJSBzdHIoQVJDSExJU1QpKQorICAgIHByaW50KCIgICAqIEMgY29tcGlsZXI6ICAgICAgICAgICVzIiAlIENDKQorICAgIHByaW50KCIgICAqIEMrKyBjb21waWxlcjogICAgICAgICVzIiAlIENYWCkKICAgICBwcmludCgiIikKLQotCi0KKyAgICBwcmludCgiIC0tIEJ1aWxkaW5nIGEgUHl0aG9uICVzIGZyYW1ld29yayBhdCBwYXRjaCBsZXZlbCAlcyIKKyAgICAgICAgICAgICAgICAlIChnZXRWZXJzaW9uKCksIGdldEZ1bGxWZXJzaW9uKCkpKQorICAgIHByaW50KCIiKQogCiBkZWYgZXh0cmFjdEFyY2hpdmUoYnVpbGRkaXIsIGFyY2hpdmVOYW1lKToKICAgICAiIiIKQEAgLTc3Miw2ICs4MzUsMTMyIEBACiAgICAgICAgICAgICAgICAgJSAoc2hlbGxRdW90ZShmbmFtZSksIGNoZWNrc3VtKSApOgogICAgICAgICBmYXRhbCgnTUQ1IGNoZWNrc3VtIG1pc21hdGNoIGZvciBmaWxlICVzJyAlIGZuYW1lKQogCitkZWYgYnVpbGRfdW5pdmVyc2FsX29wZW5zc2woYmFzZWRpciwgYXJjaExpc3QpOgorICAgICIiIgorICAgIFNwZWNpYWwgY2FzZSBidWlsZCByZWNpcGUgZm9yIHVuaXZlcnNhbCBidWlsZCBvZiBvcGVuc3NsLgorCisgICAgVGhlIHVwc3RyZWFtIE9wZW5TU0wgYnVpbGQgc3lzdGVtIGRvZXMgbm90IGRpcmVjdGx5IHN1cHBvcnQKKyAgICBPUyBYIHVuaXZlcnNhbCBidWlsZHMuICBXZSBuZWVkIHRvIGJ1aWxkIGVhY2ggYXJjaGl0ZWN0dXJlCisgICAgc2VwYXJhdGVseSB0aGVuIGxpcG8gdGhlbSB0b2dldGhlciBpbnRvIGZhdCBsaWJyYXJpZXMuCisgICAgIiIiCisKKyAgICAjIE9wZW5TU0wgZmFpbHMgdG8gYnVpbGQgd2l0aCBYY29kZSAyLjUgKG9uIE9TIFggMTAuNCkuCisgICAgIyBJZiB3ZSBhcmUgYnVpbGRpbmcgb24gYSAxMC40Lnggb3IgZWFybGllciBzeXN0ZW0sCisgICAgIyB1bmlsYXRlcmFsbHkgZGlzYWJsZSBhc3NlbWJseSBjb2RlIGJ1aWxkaW5nIHRvIGF2b2lkIHRoZSBwcm9ibGVtLgorICAgIG5vX2FzbSA9IGludChwbGF0Zm9ybS5yZWxlYXNlKCkuc3BsaXQoIi4iKVswXSkgPCA5CisKKyAgICBkZWYgYnVpbGRfb3BlbnNzbF9hcmNoKGFyY2hiYXNlLCBhcmNoKToKKyAgICAgICAgIkJ1aWxkIG9uZSBhcmNoaXRlY3R1cmUgb2Ygb3BlbnNzbCIKKyAgICAgICAgYXJjaF9vcHRzID0geworICAgICAgICAgICAgImkzODYiOiBbImRhcndpbi1pMzg2LWNjIl0sCisgICAgICAgICAgICAieDg2XzY0IjogWyJkYXJ3aW42NC14ODZfNjQtY2MiLCAiZW5hYmxlLWVjX25pc3RwXzY0X2djY18xMjgiXSwKKyAgICAgICAgICAgICJwcGMiOiBbImRhcndpbi1wcGMtY2MiXSwKKyAgICAgICAgICAgICJwcGM2NCI6IFsiZGFyd2luNjQtcHBjLWNjIl0sCisgICAgICAgIH0KKyAgICAgICAgY29uZmlndXJlX29wdHMgPSBbCisgICAgICAgICAgICAibm8ta3JiNSIsCisgICAgICAgICAgICAibm8taWRlYSIsCisgICAgICAgICAgICAibm8tbWRjMiIsCisgICAgICAgICAgICAibm8tcmM1IiwKKyAgICAgICAgICAgICJuby16bGliIiwKKyAgICAgICAgICAgICJlbmFibGUtdGxzZXh0IiwKKyAgICAgICAgICAgICJuby1zc2wyIiwKKyAgICAgICAgICAgICJuby1zc2wzIiwKKyAgICAgICAgICAgICJuby1zc2wzLW1ldGhvZCIsCisgICAgICAgICAgICAjICJlbmFibGUtdW5pdC10ZXN0IiwKKyAgICAgICAgICAgICJzaGFyZWQiLAorICAgICAgICAgICAgIi0taW5zdGFsbF9wcmVmaXg9JXMiJXNoZWxsUXVvdGUoYXJjaGJhc2UpLAorICAgICAgICAgICAgIi0tcHJlZml4PSVzIiVvcy5wYXRoLmpvaW4oIi8iLCAqRldfVkVSU0lPTl9QUkVGSVgpLAorICAgICAgICAgICAgIi0tb3BlbnNzbGRpcj0vU3lzdGVtL0xpYnJhcnkvT3BlblNTTCIsCisgICAgICAgIF0KKyAgICAgICAgaWYgbm9fYXNtOgorICAgICAgICAgICAgY29uZmlndXJlX29wdHMuYXBwZW5kKCJuby1hc20iKQorICAgICAgICBydW5Db21tYW5kKCIgIi5qb2luKFsicGVybCIsICJDb25maWd1cmUiXQorICAgICAgICAgICAgICAgICAgICAgICAgKyBhcmNoX29wdHNbYXJjaF0gKyBjb25maWd1cmVfb3B0cykpCisgICAgICAgIHJ1bkNvbW1hbmQoIm1ha2UgZGVwZW5kIE9TWF9TREs9JXMiICUgU0RLUEFUSCkKKyAgICAgICAgcnVuQ29tbWFuZCgibWFrZSBhbGwgT1NYX1NESz0lcyIgJSBTREtQQVRIKQorICAgICAgICBydW5Db21tYW5kKCJtYWtlIGluc3RhbGxfc3cgT1NYX1NESz0lcyIgJSBTREtQQVRIKQorICAgICAgICAjIHJ1bkNvbW1hbmQoIm1ha2UgdGVzdCIpCisgICAgICAgIHJldHVybgorCisgICAgc3JjZGlyID0gb3MuZ2V0Y3dkKCkKKyAgICB1bml2ZXJzYWxiYXNlID0gb3MucGF0aC5qb2luKHNyY2RpciwgIi4uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGguYmFzZW5hbWUoc3JjZGlyKSArICItdW5pdmVyc2FsIikKKyAgICBvcy5ta2Rpcih1bml2ZXJzYWxiYXNlKQorICAgIGFyY2hiYXNlZndzID0gW10KKyAgICBmb3IgYXJjaCBpbiBhcmNoTGlzdDoKKyAgICAgICAgIyBmcmVzaCBjb3B5IG9mIHRoZSBzb3VyY2UgdHJlZQorICAgICAgICBhcmNoc3JjID0gb3MucGF0aC5qb2luKHVuaXZlcnNhbGJhc2UsIGFyY2gsICJzcmMiKQorICAgICAgICBzaHV0aWwuY29weXRyZWUoc3JjZGlyLCBhcmNoc3JjLCBzeW1saW5rcz1UcnVlKQorICAgICAgICAjIGluc3RhbGwgYmFzZSBmb3IgdGhpcyBhcmNoCisgICAgICAgIGFyY2hiYXNlID0gb3MucGF0aC5qb2luKHVuaXZlcnNhbGJhc2UsIGFyY2gsICJyb290IikKKyAgICAgICAgb3MubWtkaXIoYXJjaGJhc2UpCisgICAgICAgICMgUHl0aG9uIGZyYW1ld29yayBiYXNlIHdpdGhpbiBpbnN0YWxsX3ByZWZpeDoKKyAgICAgICAgIyB0aGUgYnVpbGQgd2lsbCBpbnN0YWxsIGludG8gdGhpcyBmcmFtZXdvcmsuLgorICAgICAgICAjIFRoaXMgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIHJlc3VsdGluZyBzaGFyZWQgbGlicyBoYXZlCisgICAgICAgICMgdGhlIGRlc2lyZWQgcmVhbCBpbnN0YWxsIHBhdGhzIGJ1aWx0IGludG8gdGhlbS4KKyAgICAgICAgYXJjaGJhc2VmdyA9IG9zLnBhdGguam9pbihhcmNoYmFzZSwgKkZXX1ZFUlNJT05fUFJFRklYKQorCisgICAgICAgICMgYnVpbGQgb25lIGFyY2hpdGVjdHVyZQorICAgICAgICBvcy5jaGRpcihhcmNoc3JjKQorICAgICAgICBidWlsZF9vcGVuc3NsX2FyY2goYXJjaGJhc2UsIGFyY2gpCisgICAgICAgIG9zLmNoZGlyKHNyY2RpcikKKyAgICAgICAgYXJjaGJhc2Vmd3MuYXBwZW5kKGFyY2hiYXNlZncpCisKKyAgICAjIGNvcHkgYXJjaC1pbmRlcGVuZGVudCBmaWxlcyBmcm9tIGxhc3QgYnVpbGQgaW50byB0aGUgYmFzZWRpciBmcmFtZXdvcmsKKyAgICBiYXNlZncgPSBvcy5wYXRoLmpvaW4oYmFzZWRpciwgKkZXX1ZFUlNJT05fUFJFRklYKQorICAgIHNodXRpbC5jb3B5dHJlZSgKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihhcmNoYmFzZWZ3LCAiaW5jbHVkZSIsICJvcGVuc3NsIiksCisgICAgICAgICAgICBvcy5wYXRoLmpvaW4oYmFzZWZ3LCAiaW5jbHVkZSIsICJvcGVuc3NsIikKKyAgICAgICAgICAgICkKKworICAgIHNobGliX3ZlcnNpb25fbnVtYmVyID0gZ3JlcFZhbHVlKG9zLnBhdGguam9pbihhcmNoc3JjLCAiTWFrZWZpbGUiKSwKKyAgICAgICAgICAgICJTSExJQl9WRVJTSU9OX05VTUJFUiIpCisgICAgIyAgIGUuZy4gLT4gIjEuMC4wIgorICAgIGxpYmNyeXB0byA9ICJsaWJjcnlwdG8uZHlsaWIiCisgICAgbGliY3J5cHRvX3ZlcnNpb25lZCA9IGxpYmNyeXB0by5yZXBsYWNlKCIuIiwgIi4iK3NobGliX3ZlcnNpb25fbnVtYmVyKyIuIikKKyAgICAjICAgZS5nLiAtPiAibGliY3J5cHRvLjEuMC4wLmR5bGliIgorICAgIGxpYnNzbCA9ICJsaWJzc2wuZHlsaWIiCisgICAgbGlic3NsX3ZlcnNpb25lZCA9IGxpYnNzbC5yZXBsYWNlKCIuIiwgIi4iK3NobGliX3ZlcnNpb25fbnVtYmVyKyIuIikKKyAgICAjICAgZS5nLiAtPiAibGlic3NsLjEuMC4wLmR5bGliIgorCisgICAgdHJ5OgorICAgICAgICBvcy5ta2Rpcihvcy5wYXRoLmpvaW4oYmFzZWZ3LCAibGliIikpCisgICAgZXhjZXB0IE9TRXJyb3I6CisgICAgICAgIHBhc3MKKworICAgICMgbWVyZ2UgdGhlIGluZGl2aWR1YWwgYXJjaC1kZXBlbmRlbnQgc2hhcmVkIGxpYnMgaW50byBhIGZhdCBzaGFyZWQgbGliCisgICAgYXJjaGJhc2Vmd3MuaW5zZXJ0KDAsIGJhc2VmdykKKyAgICBmb3IgKGxpYl91bnZlcnNpb25lZCwgbGliX3ZlcnNpb25lZCkgaW4gWworICAgICAgICAgICAgICAgIChsaWJjcnlwdG8sIGxpYmNyeXB0b192ZXJzaW9uZWQpLAorICAgICAgICAgICAgICAgIChsaWJzc2wsIGxpYnNzbF92ZXJzaW9uZWQpCisgICAgICAgICAgICBdOgorICAgICAgICBydW5Db21tYW5kKCJsaXBvIC1jcmVhdGUgLW91dHB1dCAiICsKKyAgICAgICAgICAgICAgICAgICAgIiAiLmpvaW4oc2hlbGxRdW90ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4oZncsICJsaWIiLCBsaWJfdmVyc2lvbmVkKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmdyBpbiBhcmNoYmFzZWZ3cykpCisgICAgICAgICMgYW5kIGNyZWF0ZSBhbiB1bnZlcnNpb25lZCBzeW1saW5rIG9mIGl0CisgICAgICAgIG9zLnN5bWxpbmsobGliX3ZlcnNpb25lZCwgb3MucGF0aC5qb2luKGJhc2VmdywgImxpYiIsIGxpYl91bnZlcnNpb25lZCkpCisKKyAgICAjIENyZWF0ZSBsaW5rcyBpbiB0aGUgdGVtcCBpbmNsdWRlIGFuZCBsaWIgZGlycyB0aGF0IHdpbGwgYmUgaW5qZWN0ZWQKKyAgICAjIGludG8gdGhlIFB5dGhvbiBidWlsZCBzbyB0aGF0IHNldHVwLnB5IGNhbiBmaW5kIHRoZW0gd2hpbGUgYnVpbGRpbmcKKyAgICAjIGFuZCB0aGUgdmVyc2lvbmVkIGxpbmtzIHNvIHRoYXQgdGhlIHNldHVwLnB5IHBvc3QtYnVpbGQgaW1wb3J0IHRlc3QKKyAgICAjIGRvZXMgbm90IGZhaWwuCisgICAgcmVsYXRpdmVfcGF0aCA9IG9zLnBhdGguam9pbigiLi4iLCAiLi4iLCAiLi4iLCAqRldfVkVSU0lPTl9QUkVGSVgpCisgICAgZm9yIGZuIGluIFsKKyAgICAgICAgICAgIFsiaW5jbHVkZSIsICJvcGVuc3NsIl0sCisgICAgICAgICAgICBbImxpYiIsIGxpYmNyeXB0b10sCisgICAgICAgICAgICBbImxpYiIsIGxpYnNzbF0sCisgICAgICAgICAgICBbImxpYiIsIGxpYmNyeXB0b192ZXJzaW9uZWRdLAorICAgICAgICAgICAgWyJsaWIiLCBsaWJzc2xfdmVyc2lvbmVkXSwKKyAgICAgICAgXToKKyAgICAgICAgb3Muc3ltbGluaygKKyAgICAgICAgICAgIG9zLnBhdGguam9pbihyZWxhdGl2ZV9wYXRoLCAqZm4pLAorICAgICAgICAgICAgb3MucGF0aC5qb2luKGJhc2VkaXIsICJ1c3IiLCAibG9jYWwiLCAqZm4pCisgICAgICAgICkKKworICAgIHJldHVybgorCiBkZWYgYnVpbGRSZWNpcGUocmVjaXBlLCBiYXNlZGlyLCBhcmNoTGlzdCk6CiAgICAgIiIiCiAgICAgQnVpbGQgc29mdHdhcmUgdXNpbmcgYSByZWNpcGUuIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUKQEAgLTc4MSw4ICs5NzAsMTAgQEAKICAgICBjdXJkaXIgPSBvcy5nZXRjd2QoKQogCiAgICAgbmFtZSA9IHJlY2lwZVsnbmFtZSddCisgICAgVEhJUkRfUEFSVFlfTElCUy5hcHBlbmQobmFtZSkKICAgICB1cmwgPSByZWNpcGVbJ3VybCddCiAgICAgY29uZmlndXJlID0gcmVjaXBlLmdldCgnY29uZmlndXJlJywgJy4vY29uZmlndXJlJykKKyAgICBidWlsZHJlY2lwZSA9IHJlY2lwZS5nZXQoJ2J1aWxkcmVjaXBlJywgTm9uZSkKICAgICBpbnN0YWxsID0gcmVjaXBlLmdldCgnaW5zdGFsbCcsICdtYWtlICYmIG1ha2UgaW5zdGFsbCBERVNURElSPSVzJyUoCiAgICAgICAgIHNoZWxsUXVvdGUoYmFzZWRpcikpKQogCkBAIC04NTQsNyArMTA0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAnIC1hcmNoICcuam9pbihhcmNoTGlzdCksCiAgICAgICAgICAgICAgICAgICAgICAgICBzaGVsbFF1b3RlKFNES1BBVEgpWzE6LTFdLAogICAgICAgICAgICAgICAgICAgICAgICAgc2hlbGxRdW90ZShiYXNlZGlyKVsxOi0xXSwpLAotICAgICAgICAgICAgICAgICJMREZMQUdTPS1tbWFjb3N4LXZlcnNpb24tbWluPSVzIC1zeXNsaWJyb290LCVzIC1MJXMvdXNyL2xvY2FsL2xpYiAtYXJjaCAlcyIlKAorICAgICAgICAgICAgICAgICJMREZMQUdTPS1tbWFjb3N4LXZlcnNpb24tbWluPSVzIC1pc3lzcm9vdCAlcyAtTCVzL3Vzci9sb2NhbC9saWIgLWFyY2ggJXMiJSgKICAgICAgICAgICAgICAgICAgICAgREVQVEFSR0VULAogICAgICAgICAgICAgICAgICAgICBzaGVsbFF1b3RlKFNES1BBVEgpWzE6LTFdLAogICAgICAgICAgICAgICAgICAgICBzaGVsbFF1b3RlKGJhc2VkaXIpWzE6LTFdLApAQCAtODgwLDggKzEwNzEsMTMgQEAKICAgICAgICAgcHJpbnQoIlJ1bm5pbmcgY29uZmlndXJlIGZvciAlcyIlKG5hbWUsKSkKICAgICAgICAgcnVuQ29tbWFuZCgnICcuam9pbihjb25maWd1cmVfYXJncykgKyAnIDI+JjEnKQogCi0gICAgcHJpbnQoIlJ1bm5pbmcgaW5zdGFsbCBmb3IgJXMiJShuYW1lLCkpCi0gICAgcnVuQ29tbWFuZCgneyAnICsgaW5zdGFsbCArICcgO30gMj4mMScpCisgICAgaWYgYnVpbGRyZWNpcGUgaXMgbm90IE5vbmU6CisgICAgICAgICMgY2FsbCBzcGVjaWFsLWNhc2UgYnVpbGQgcmVjaXBlLCBlLmcuIGZvciBvcGVuc3NsCisgICAgICAgIGJ1aWxkcmVjaXBlKGJhc2VkaXIsIGFyY2hMaXN0KQorCisgICAgaWYgaW5zdGFsbCBpcyBub3QgTm9uZToKKyAgICAgICAgcHJpbnQoIlJ1bm5pbmcgaW5zdGFsbCBmb3IgJXMiJShuYW1lLCkpCisgICAgICAgIHJ1bkNvbW1hbmQoJ3sgJyArIGluc3RhbGwgKyAnIDt9IDI+JjEnKQogCiAgICAgcHJpbnQoIkRvbmUgJXMiJShuYW1lLCkpCiAgICAgcHJpbnQoIiIpCkBAIC05MTQsOCArMTExMCwxMCBAQAogICAgIGRvY2RpciA9IG9zLnBhdGguam9pbihyb290RGlyLCAncHlkb2NzJykKICAgICBjdXJEaXIgPSBvcy5nZXRjd2QoKQogICAgIG9zLmNoZGlyKGJ1aWxkRGlyKQotICAgIHJ1bkNvbW1hbmQoJ21ha2UgdXBkYXRlJykKLSAgICBydW5Db21tYW5kKCJtYWtlIGh0bWwgUFlUSE9OPSclcyciICUgb3MucGF0aC5hYnNwYXRoKHN5cy5leGVjdXRhYmxlKSkKKyAgICAjIFRoZSBEb2MgYnVpbGQgY2hhbmdlZCBmb3IgMy40ICh0ZWNobmljYWxseSwgZm9yIDMuNC4xKSBhbmQgZm9yIDIuNy45CisgICAgcnVuQ29tbWFuZCgnbWFrZSBjbGVhbicpCisgICAgIyBBc3N1bWUgc3BoaW54LWJ1aWxkIGlzIG9uIG91ciBQQVRILCBjaGVja2VkIGluIGNoZWNrRW52aXJvbm1lbnQKKyAgICBydW5Db21tYW5kKCdtYWtlIGh0bWwnKQogICAgIG9zLmNoZGlyKGN1ckRpcikKICAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZG9jZGlyKToKICAgICAgICAgb3MubWtkaXIoZG9jZGlyKQpAQCAtOTU1LDM0ICsxMTUzLDIyIEBACiAgICAgcnVuQ29tbWFuZCgiJXMgLUMgLS1lbmFibGUtZnJhbWV3b3JrIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz0lcyAiCiAgICAgICAgICAgICAgICAiLS13aXRoLXVuaXZlcnNhbC1hcmNocz0lcyAiCiAgICAgICAgICAgICAgICAiJXMgIgorICAgICAgICAgICAgICAgIiVzICIKICAgICAgICAgICAgICAgICJMREZMQUdTPSctZyAtTCVzL2xpYnJhcmllcy91c3IvbG9jYWwvbGliJyAiCiAgICAgICAgICAgICAgICAiQ0ZMQUdTPSctZyAtSSVzL2xpYnJhcmllcy91c3IvbG9jYWwvaW5jbHVkZScgMj4mMSIlKAogICAgICAgICBzaGVsbFF1b3RlKG9zLnBhdGguam9pbihTUkNESVIsICdjb25maWd1cmUnKSksIHNoZWxsUXVvdGUoU0RLUEFUSCksCiAgICAgICAgIFVOSVZFUlNBTEFSQ0hTLAogICAgICAgICAoJyAnLCAnLS13aXRoLWNvbXB1dGVkLWdvdG9zICcpW1BZVEhPTl8zXSwKKyAgICAgICAgKCcgJywgJy0td2l0aG91dC1lbnN1cmVwaXAgJylbUFlUSE9OXzNdLAogICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdLAogICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdKSkKIAorICAgIHByaW50KCJSdW5uaW5nIG1ha2UgdG91Y2giKQorICAgIHJ1bkNvbW1hbmQoIm1ha2UgdG91Y2giKQorCiAgICAgcHJpbnQoIlJ1bm5pbmcgbWFrZSIpCiAgICAgcnVuQ29tbWFuZCgibWFrZSIpCiAKLSAgICAjIEZvciBkZXBsb3ltZW50IHRhcmdldHMgb2YgMTAuNiBhbmQgaGlnaGVyLCB3ZSBidWlsZCBvdXIgb3duIHZlcnNpb24KLSAgICAjIG9mIFRjbCBhbmQgQ29jb2EgQXF1YSBUayBsaWJzIGJlY2F1c2UgdGhlIEFwcGxlLXN1cHBsaWVkIFRrIDguNSBpcwotICAgICMgb3V0LW9mLWRhdGUgYW5kIGhhcyBjcml0aWNhbCBidWdzLiAgU2F2ZSB0aGUgX3RraW50ZXIuc28gdGhhdCB3YXMKLSAgICAjIGxpbmtlZCB3aXRoIC9MaWJyYXJ5L0ZyYW1ld29ya3Mve1RjayxUa30uZnJhbWV3b3JrIGFuZCBidWlsZAotICAgICMgYW5vdGhlciBfdGtpbnRlci5zbyBsaW5rZWQgd2l0aCBvdXIgYnVpbHRpbiBUY2wgYW5kIFRrIGxpYnMuCi0gICAgaWYgKERFUFRBUkdFVCA+ICcxMC41JykgYW5kIChnZXRWZXJzaW9uVHVwbGUoKSA+PSAoMywgNCkpOgotICAgICAgICBydW5Db21tYW5kKCJmaW5kIGJ1aWxkIC1uYW1lICdfdGtpbnRlci5zbycgIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAtZXhlY2RpciBtdiAne30nIF90a2ludGVyX2xpYnJhcnkuc28gXDsiKQotICAgICAgICBwcmludCgiUnVubmluZyBtYWtlIHRvIGJ1aWxkIGJ1aWx0aW4gX3RraW50ZXIiKQotICAgICAgICBydW5Db21tYW5kKCJtYWtlIFRDTFRLX0lOQ0xVREVTPSctSSVzL2xpYnJhcmllcy91c3IvbG9jYWwvaW5jbHVkZScgIgotICAgICAgICAgICAgICAgICJUQ0xUS19MSUJTPSctTCVzL2xpYnJhcmllcy91c3IvbG9jYWwvbGliIC1sdGNsOC41IC1sdGs4LjUnIiUoCi0gICAgICAgICAgICBzaGVsbFF1b3RlKFdPUktESVIpWzE6LTFdLAotICAgICAgICAgICAgc2hlbGxRdW90ZShXT1JLRElSKVsxOi0xXSkpCi0gICAgICAgICMgbWFrZSBhIGNvcHkgd2hpY2ggd2lsbCBiZSBtb3ZlZCB0byBsaWItdGtpbnRlciBsYXRlcgotICAgICAgICBydW5Db21tYW5kKCJmaW5kIGJ1aWxkIC1uYW1lICdfdGtpbnRlci5zbycgIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAtZXhlY2RpciBjcCAtcCAne30nIF90a2ludGVyX2J1aWx0aW4uc28gXDsiKQotCiAgICAgcHJpbnQoIlJ1bm5pbmcgbWFrZSBpbnN0YWxsIikKICAgICBydW5Db21tYW5kKCJtYWtlIGluc3RhbGwgREVTVERJUj0lcyIlKAogICAgICAgICBzaGVsbFF1b3RlKHJvb3REaXIpKSkKQEAgLTEwMDcsMjcgKzExOTMsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1B5dGhvbi5mcmFtZXdvcmsnLCAnVmVyc2lvbnMnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uLCAnbGliJywgJ3B5dGhvbiVzJyUodmVyc2lvbiwpKQogCi0gICAgIyBJZiB3ZSBtYWRlIG11bHRpcGxlIHZlcnNpb25zIG9mIF90a2ludGVyLCBtb3ZlIHRoZW0gdG8KLSAgICAjIHRoZWlyIG93biBkaXJlY3RvcmllcyB1bmRlciBweXRob24gbGliLiAgVGhpcyBhbGxvd3MKLSAgICAjIHVzZXJzIHRvIHNlbGVjdCB3aGljaCB0byBpbXBvcnQgYnkgbWFuaXB1bGF0aW5nIHN5cy5wYXRoCi0gICAgIyBkaXJlY3RseSBvciB3aXRoIFBZVEhPTlBBVEguCi0KLSAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgIFRLSU5URVJTID0gWydidWlsdGluJywgJ2xpYnJhcnknXQotICAgICAgICB0a2ludGVyX21vdmVzID0gWygnX3RraW50ZXJfJyArIHRrbiArICcuc28nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4ocGF0aF90b19saWIsICdsaWItdGtpbnRlcicsIHRrbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRrbiBpbiBUS0lOVEVSU10KLSAgICAgICAgIyBDcmVhdGUgdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yaWVzIHVuZGVyIGxpYi10a2ludGVyLgotICAgICAgICAjIFRoZSBwZXJtaXNzaW9ucyBhbmQgdWlkL2dpZCB3aWxsIGJlIGZpeGVkIHVwIG5leHQuCi0gICAgICAgIGZvciB0a20gaW4gdGtpbnRlcl9tb3ZlczoKLSAgICAgICAgICAgIG9zLm1ha2VkaXJzKHRrbVsxXSkKLQogICAgIHByaW50KCJGaXggZmlsZSBtb2RlcyIpCiAgICAgZnJtRGlyID0gb3MucGF0aC5qb2luKHJvb3REaXIsICdMaWJyYXJ5JywgJ0ZyYW1ld29ya3MnLCAnUHl0aG9uLmZyYW1ld29yaycpCiAgICAgZ2lkID0gZ3JwLmdldGdybmFtKCdhZG1pbicpLmdyX2dpZAogCiAgICAgc2hhcmVkX2xpYl9lcnJvciA9IEZhbHNlCi0gICAgbW92ZXNfbGlzdCA9IFtdCiAgICAgZm9yIGRpcnBhdGgsIGRpcm5hbWVzLCBmaWxlbmFtZXMgaW4gb3Mud2Fsayhmcm1EaXIpOgogICAgICAgICBmb3IgZG4gaW4gZGlybmFtZXM6CiAgICAgICAgICAgICBvcy5jaG1vZChvcy5wYXRoLmpvaW4oZGlycGF0aCwgZG4pLCBTVEFUXzBvNzc1KQpAQCAtMTA1MywyNSArMTIyMyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUgKHNsLCBwKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZF9saWJfZXJyb3IgPSBUcnVlCiAKLSAgICAgICAgICAgICMgSWYgdGhpcyBpcyBhIF90a2ludGVyIHZhcmlhbnQsIG1vdmUgaXQgdG8gaXRzIG93biBkaXJlY3RvcnkKLSAgICAgICAgICAgICMgbm93IHRoYXQgd2UgaGF2ZSBmaXhlZCBpdHMgcGVybWlzc2lvbnMgYW5kIGNoZWNrZWQgdGhhdCBpdAotICAgICAgICAgICAgIyB3YXMgbGlua2VkIHByb3Blcmx5LiAgVGhlIGRpcmVjdG9yeSB3YXMgY3JlYXRlZCBlYXJsaWVyLgotICAgICAgICAgICAgIyBUaGUgZmlsZXMgYXJlIG1vdmVkIGFmdGVyIHRoZSBlbnRpcmUgdHJlZSBoYXMgYmVlbiB3YWxrZWQKLSAgICAgICAgICAgICMgc2luY2UgdGhlIHNoYXJlZCBsaWJyYXJ5IGNoZWNraW5nIGRlcGVuZHMgb24gdGhlIGZpbGVzCi0gICAgICAgICAgICAjIGhhdmluZyB1bmlxdWUgbmFtZXMuCi0gICAgICAgICAgICBpZiAoREVQVEFSR0VUID4gJzEwLjUnKSBhbmQgKGdldFZlcnNpb25UdXBsZSgpID49ICgzLCA0KSk6Ci0gICAgICAgICAgICAgICAgZm9yIHRrbSBpbiB0a2ludGVyX21vdmVzOgotICAgICAgICAgICAgICAgICAgICBpZiBmbiA9PSB0a21bMF06Ci0gICAgICAgICAgICAgICAgICAgICAgICBtb3Zlc19saXN0LmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAocCwgb3MucGF0aC5qb2luKHRrbVsxXSwgJ190a2ludGVyLnNvJykpKQotCiAgICAgaWYgc2hhcmVkX2xpYl9lcnJvcjoKICAgICAgICAgZmF0YWwoIlVuZXhwZWN0ZWQgc2hhcmVkIGxpYnJhcnkgZXJyb3JzLiIpCiAKLSAgICAjIE5vdyBkbyB0aGUgbW92ZXMuCi0gICAgZm9yIG1sIGluIG1vdmVzX2xpc3Q6Ci0gICAgICAgIHNodXRpbC5tb3ZlKG1sWzBdLCBtbFsxXSkKLQogICAgIGlmIFBZVEhPTl8zOgogICAgICAgICBMRFZFUlNJT049Tm9uZQogICAgICAgICBWRVJTSU9OPU5vbmUKQEAgLTExNzksNiArMTMzMyw3IEBACiAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcsICcnLmpvaW4oKERFUFRBUkdFVCwgJyBvciBsYXRlcicpKSkKICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckQVJDSElURUNUVVJFUycsICIsICIuam9pbih1bml2ZXJzYWxfb3B0c19tYXBbVU5JVkVSU0FMQVJDSFNdKSkKICAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckSU5TVEFMTF9TSVpFJywgaW5zdGFsbFNpemUoKSkKKyAgICBkYXRhID0gZGF0YS5yZXBsYWNlKCckVEhJUkRfUEFSVFlfTElCUycsICJcXFxuIi5qb2luKFRISVJEX1BBUlRZX0xJQlMpKQogCiAgICAgIyBUaGlzIG9uZSBpcyBub3QgaGFuZHkgYXMgYSB0ZW1wbGF0ZSB2YXJpYWJsZQogICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJyRQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSJywgJy9MaWJyYXJ5L0ZyYW1ld29ya3MvUHl0aG9uLmZyYW1ld29yaycpCkBAIC0xMTg3LDcgKzEzNDIsOSBAQAogICAgIGZwLmNsb3NlKCkKIAogZGVmIHBhdGNoU2NyaXB0KGluUGF0aCwgb3V0UGF0aCk6CisgICAgbWFqb3IsIG1pbm9yID0gZ2V0VmVyc2lvbk1ham9yTWlub3IoKQogICAgIGRhdGEgPSBmaWxlQ29udGVudHMoaW5QYXRoKQorICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoJ0BQWU1BSk9SQCcsIHN0cihtYWpvcikpCiAgICAgZGF0YSA9IGRhdGEucmVwbGFjZSgnQFBZVkVSQCcsIGdldFZlcnNpb24oKSkKICAgICBmcCA9IG9wZW4ob3V0UGF0aCwgJ3cnKQogICAgIGZwLndyaXRlKGRhdGEpCkBAIC0xMzU5LDggKzE1MTYsNiBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgcGF0Y2hGaWxlKG9zLnBhdGguam9pbigncmVzb3VyY2VzJywgZm4pLCBvcy5wYXRoLmpvaW4ocnNyY0RpciwgZm4pKQogCi0gICAgc2h1dGlsLmNvcHkoIi4uLy4uL0xJQ0VOU0UiLCBvcy5wYXRoLmpvaW4ocnNyY0RpciwgJ0xpY2Vuc2UudHh0JykpCi0KIAogZGVmIGluc3RhbGxTaXplKGNsZWFyPUZhbHNlLCBfc2F2ZWQ9W10pOgogICAgIGlmIGNsZWFyOgpAQCAtMTQ2OCwxMiArMTYyMywxNCBAQAogCiAKICAgICAjIFByZXBhcmUgdGhlIGFwcGxpY2F0aW9ucyBmb2xkZXIKLSAgICBmbiA9IG9zLnBhdGguam9pbihXT1JLRElSLCAiX3Jvb3QiLCAiQXBwbGljYXRpb25zIiwKLSAgICAgICAgICAgICAgICAiUHl0aG9uICVzIiUoZ2V0VmVyc2lvbigpLCksICJVcGRhdGUgU2hlbGwgUHJvZmlsZS5jb21tYW5kIikKLSAgICBwYXRjaFNjcmlwdCgic2NyaXB0cy9wb3N0ZmxpZ2h0LnBhdGNoLXByb2ZpbGUiLCAgZm4pCi0KICAgICBmb2xkZXIgPSBvcy5wYXRoLmpvaW4oV09SS0RJUiwgIl9yb290IiwgIkFwcGxpY2F0aW9ucyIsICJQeXRob24gJXMiJSgKICAgICAgICAgZ2V0VmVyc2lvbigpLCkpCisgICAgZm4gPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCAiTGljZW5zZS5ydGYiKQorICAgIHBhdGNoRmlsZSgicmVzb3VyY2VzL0xpY2Vuc2UucnRmIiwgIGZuKQorICAgIGZuID0gb3MucGF0aC5qb2luKGZvbGRlciwgIlJlYWRNZS5ydGYiKQorICAgIHBhdGNoRmlsZSgicmVzb3VyY2VzL1JlYWRNZS5ydGYiLCAgZm4pCisgICAgZm4gPSBvcy5wYXRoLmpvaW4oZm9sZGVyLCAiVXBkYXRlIFNoZWxsIFByb2ZpbGUuY29tbWFuZCIpCisgICAgcGF0Y2hTY3JpcHQoInNjcmlwdHMvcG9zdGZsaWdodC5wYXRjaC1wcm9maWxlIiwgIGZuKQogICAgIG9zLmNobW9kKGZvbGRlciwgU1RBVF8wbzc1NSkKICAgICBzZXRJY29uKGZvbGRlciwgIi4uL0ljb25zL1B5dGhvbiBGb2xkZXIuaWNucyIpCiAKQEAgLTE0ODEsMTAgKzE2MzgsMTIgQEAKICAgICBidWlsZEluc3RhbGxlcigpCiAKICAgICAjIEFuZCBjb3B5IHRoZSByZWFkbWUgaW50byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGluc3RhbGxlcgotICAgIHBhdGNoRmlsZSgncmVzb3VyY2VzL1JlYWRNZS50eHQnLCBvcy5wYXRoLmpvaW4oV09SS0RJUiwgJ2luc3RhbGxlcicsICdSZWFkTWUudHh0JykpCisgICAgcGF0Y2hGaWxlKCdyZXNvdXJjZXMvUmVhZE1lLnJ0ZicsCisgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKFdPUktESVIsICdpbnN0YWxsZXInLCAnUmVhZE1lLnJ0ZicpKQogCiAgICAgIyBEaXR0byBmb3IgdGhlIGxpY2Vuc2UgZmlsZS4KLSAgICBzaHV0aWwuY29weSgnLi4vLi4vTElDRU5TRScsIG9zLnBhdGguam9pbihXT1JLRElSLCAnaW5zdGFsbGVyJywgJ0xpY2Vuc2UudHh0JykpCisgICAgcGF0Y2hGaWxlKCdyZXNvdXJjZXMvTGljZW5zZS5ydGYnLAorICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihXT1JLRElSLCAnaW5zdGFsbGVyJywgJ0xpY2Vuc2UucnRmJykpCiAKICAgICBmcCA9IG9wZW4ob3MucGF0aC5qb2luKFdPUktESVIsICdpbnN0YWxsZXInLCAnQnVpbGQudHh0JyksICd3JykKICAgICBmcC53cml0ZSgiIyBCVUlMRCBJTkZPXG4iKQpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L29wZW5zc2xfc2RrX21ha2VkZXBlbmQucGF0Y2ggYi9NYWMvQnVpbGRTY3JpcHQvb3BlbnNzbF9zZGtfbWFrZWRlcGVuZC5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWJkNjliCi0tLSAvZGV2L251bGwKKysrIGIvTWFjL0J1aWxkU2NyaXB0L29wZW5zc2xfc2RrX21ha2VkZXBlbmQucGF0Y2gKQEAgLTAsMCArMSw1NiBAQAorIyBIRyBjaGFuZ2VzZXQgcGF0Y2gKKyMgUGFyZW50ICBmZjhhNzU1NzYwN2NmZmQ2MjY5OTdlNTdlZDMxYzEwMTJhMzAxOGFhCisjIG9wZW5zc2xfc2RrX21ha2VkZXBlbmQucGF0Y2gKKyMKKyMgCXVzaW5nIG9wZW5zc2wgMS4wLjJlCisjCisjIC0gc3VwcG9ydCBidWlsZGluZyB3aXRoIGFuIE9TIFggU0RLCisjIC0gYWxsb3cgIm1ha2UgZGVwZW5kIiB0byB1c2UgY29tcGlsZXJzIHdpdGggbmFtZXMgb3RoZXIgdGhhbiAiZ2NjIgorCitkaWZmIENvbmZpZ3VyZQorCitkaWZmIC0tZ2l0IGEvQ29uZmlndXJlIGIvQ29uZmlndXJlCistLS0gYS9Db25maWd1cmUKKysrKyBiL0NvbmZpZ3VyZQorQEAgLTYzNSwxMiArNjM1LDEyIEBACisgCisgIyMjIyMgTWFjT1MgWCAoYS5rLmEuIFJoYXBzb2R5IG9yIERhcndpbikgc2V0dXAKKyAicmhhcHNvZHktcHBjLWNjIiwiY2M6LU8zIC1EQl9FTkRJQU46Oih1bmtub3duKTpNQUNPU1hfUkhBUFNPRFk6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke25vX2FzbX06OiIsCistImRhcndpbi1wcGMtY2MiLCJjYzotYXJjaCBwcGMgLU8zIC1EQl9FTkRJQU4gLVdhLC1mb3JjZV9jcHVzdWJ0eXBlX0FMTDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjMzJfYXNtfTpvc3gzMjpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHBwYyAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCistImRhcndpbjY0LXBwYy1jYyIsImNjOi1hcmNoIHBwYzY0IC1PMyAtREJfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzY0X2FzbX06b3N4NjQ6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCBwcGM2NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCistImRhcndpbi1pMzg2LWNjIiwiY2M6LWFyY2ggaTM4NiAtTzMgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLURMX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0lOVCBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6Ii5ldmFse215ICRhc209JHg4Nl9hc207JGFzbT1+cy9jYXN0XC01ODZcLm8vLzskYXNtfS4iOm1hY29zeDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIGkzODYgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAorLSJkZWJ1Zy1kYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLWczIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7eDg2X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCistImRhcndpbjY0LXg4Nl82NC1jYyIsImNjOi1hcmNoIHg4Nl82NCAtTzMgLURMX0VORElBTiAtV2FsbDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiIuZXZhbHtteSAkYXNtPSR4ODZfNjRfYXNtOyRhc209fnMvcmM0XC1bXjpdKy8vOyRhc219LiI6bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggeDg2XzY0IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKy0iZGVidWctZGFyd2luNjQteDg2XzY0LWNjIiwiY2M6LWFyY2ggeDg2XzY0IC1nZ2RiIC1nMiAtTzAgLURMX0VORElBTiAtV2FsbDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hVTksgREVTX0lOVCBERVNfVU5ST0xMOiIuZXZhbHtteSAkYXNtPSR4ODZfNjRfYXNtOyRhc209fnMvcmM0XC1bXjpdKy8vOyRhc219LiI6bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggeDg2XzY0IC1keW5hbWljbGliOi5cJChTSExJQl9NQUpPUikuXCQoU0hMSUJfTUlOT1IpLmR5bGliIiwKKysiZGFyd2luLXBwYy1jYyIsImNjOi1hcmNoIHBwYyAtaXN5c3Jvb3QgXCQoT1NYX1NESykgLU8zIC1EQl9FTkRJQU4gLVdhLC1mb3JjZV9jcHVzdWJ0eXBlX0FMTDo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6Qk5fTExPTkcgUkM0X0NIQVIgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7cHBjMzJfYXNtfTpvc3gzMjpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHBwYyAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCisrImRhcndpbjY0LXBwYy1jYyIsImNjOi1hcmNoIHBwYzY0IC1pc3lzcm9vdCBcJChPU1hfU0RLKSAtTzMgLURCX0VORElBTjo6LURfUkVFTlRSQU5UOk1BQ09TWDotV2wsLXNlYXJjaF9wYXRoc19maXJzdCU6U0lYVFlfRk9VUl9CSVRfTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtwcGM2NF9hc219Om9zeDY0OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggcHBjNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAorKyJkYXJ3aW4taTM4Ni1jYyIsImNjOi1hcmNoIGkzODYgLWlzeXNyb290IFwkKE9TWF9TREspIC1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtRExfRU5ESUFOOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfSU5UIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoiLmV2YWx7bXkgJGFzbT0keDg2X2FzbTskYXNtPX5zL2Nhc3RcLTU4Nlwuby8vOyRhc219LiI6bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCisrImRlYnVnLWRhcndpbi1pMzg2LWNjIiwiY2M6LWFyY2ggaTM4NiAtaXN5c3Jvb3QgXCQoT1NYX1NESykgLWczIC1ETF9FTkRJQU46Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOkJOX0xMT05HIFJDNF9JTlQgUkM0X0NIVU5LIERFU19VTlJPTEwgQkZfUFRSOiR7eDg2X2FzbX06bWFjb3N4OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWFyY2ggaTM4NiAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCisrImRhcndpbjY0LXg4Nl82NC1jYyIsImNjOi1hcmNoIHg4Nl82NCAtaXN5c3Jvb3QgXCQoT1NYX1NESykgLU8zIC1ETF9FTkRJQU4gLVdhbGw6Oi1EX1JFRU5UUkFOVDpNQUNPU1g6LVdsLC1zZWFyY2hfcGF0aHNfZmlyc3QlOlNJWFRZX0ZPVVJfQklUX0xPTkcgUkM0X0NIVU5LIERFU19JTlQgREVTX1VOUk9MTDoiLmV2YWx7bXkgJGFzbT0keDg2XzY0X2FzbTskYXNtPX5zL3JjNFwtW146XSsvLzskYXNtfS4iOm1hY29zeDpkbGZjbjpkYXJ3aW4tc2hhcmVkOi1mUElDIC1mbm8tY29tbW9uOi1hcmNoIHg4Nl82NCAtZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCisrImRlYnVnLWRhcndpbjY0LXg4Nl82NC1jYyIsImNjOi1hcmNoIHg4Nl82NCAtaXN5c3Jvb3QgXCQoT1NYX1NESykgLWdnZGIgLWcyIC1PMCAtRExfRU5ESUFOIC1XYWxsOjotRF9SRUVOVFJBTlQ6TUFDT1NYOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpTSVhUWV9GT1VSX0JJVF9MT05HIFJDNF9DSFVOSyBERVNfSU5UIERFU19VTlJPTEw6Ii5ldmFse215ICRhc209JHg4Nl82NF9hc207JGFzbT1+cy9yYzRcLVteOl0rLy87JGFzbX0uIjptYWNvc3g6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQyAtZm5vLWNvbW1vbjotYXJjaCB4ODZfNjQgLWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAorICJkZWJ1Zy1kYXJ3aW4tcHBjLWNjIiwiY2M6LURCTl9ERUJVRyAtRFJFRl9DSEVDSyAtRENPTkZfREVCVUcgLURDUllQVE9fTURFQlVHIC1EQl9FTkRJQU4gLWcgLVdhbGwgLU86Oi1EX1JFRU5UUkFOVDpNQUNPU1g6OkJOX0xMT05HIFJDNF9DSEFSIFJDNF9DSFVOSyBERVNfVU5ST0xMIEJGX1BUUjoke3BwYzMyX2FzbX06b3N4MzI6ZGxmY246ZGFyd2luLXNoYXJlZDotZlBJQzotZHluYW1pY2xpYjouXCQoU0hMSUJfTUFKT1IpLlwkKFNITElCX01JTk9SKS5keWxpYiIsCisgIyBpUGhvbmVPUy9pT1MKKyAiaXBob25lb3MtY3Jvc3MiLCJsbHZtLWdjYzotTzMgLWlzeXNyb290IFwkKENST1NTX1RPUCkvU0RLcy9cJChDUk9TU19TREspIC1mb21pdC1mcmFtZS1wb2ludGVyIC1mbm8tY29tbW9uOjotRF9SRUVOVFJBTlQ6aU9TOi1XbCwtc2VhcmNoX3BhdGhzX2ZpcnN0JTpCTl9MTE9ORyBSQzRfQ0hBUiBSQzRfQ0hVTksgREVTX1VOUk9MTCBCRl9QVFI6JHtub19hc219OmRsZmNuOmRhcndpbi1zaGFyZWQ6LWZQSUMgLWZuby1jb21tb246LWR5bmFtaWNsaWI6LlwkKFNITElCX01BSk9SKS5cJChTSExJQl9NSU5PUikuZHlsaWIiLAorQEAgLTE3MTQsOCArMTcxNCw3IEBACisgCQlzL15DQz0uKiQvQ0M9ICRjYy87CisgCQlzL15BUj1ccyphci9BUj0gJGFyLzsKKyAJCXMvXlJBTkxJQj0uKi9SQU5MSUI9ICRyYW5saWIvOworLQkJcy9eTUFLRURFUFBST0c9LiokL01BS0VERVBQUk9HPSAkY2MvIGlmICRjYyBlcSAiZ2NjIjsKKy0JCXMvXk1BS0VERVBQUk9HPS4qJC9NQUtFREVQUFJPRz0gJGNjLyBpZiAkZWNjIGVxICJnY2MiIHx8ICRlY2MgZXEgImNsYW5nIjsKKysJCXMvXk1BS0VERVBQUk9HPS4qJC9NQUtFREVQUFJPRz0gJGNjLworIAkJfQorIAlzL15DRkxBRz0uKiQvQ0ZMQUc9ICRjZmxhZ3MvOworIAlzL15ERVBGTEFHPS4qJC9ERVBGTEFHPSRkZXBmbGFncy87CitkaWZmIC0tZ2l0IGEvdXRpbC9kb21kIGIvdXRpbC9kb21kCistLS0gYS91dGlsL2RvbWQKKysrKyBiL3V0aWwvZG9tZAorQEAgLTE0LDggKzE0LDcgQEAKKyBjcCBNYWtlZmlsZSBNYWtlZmlsZS5zYXZlCisgIyBmYWtlIHRoZSBwcmVzZW5jZSBvZiBLZXJiZXJvcworIHRvdWNoICRUT1Ava3JiNS5oCistaWYgJHtNQUtFREVQRU5EfSAtLXZlcnNpb24gMj4mMSB8IGdyZXAgLXEgImNsYW5nIiB8fAorLSAgIGVjaG8gJE1BS0VERVBFTkQgfCBncmVwIC1xICJnY2MiOyB0aGVuCisraWYgdHJ1ZSA7IHRoZW4KKyAgICAgYXJncz0iIgorICAgICB3aGlsZSBbICQjIC1ndCAwIF07IGRvCisgCWlmIFsgIiQxIiAhPSAiLS0iIF07IHRoZW4gYXJncz0iJGFyZ3MgJDEiOyBmaQpkaWZmIC0tZ2l0IGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9MaWNlbnNlLnJ0ZiBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvTGljZW5zZS5ydGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5ODJhNAotLS0gL2Rldi9udWxsCisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvTGljZW5zZS5ydGYKQEAgLTAsMCArMSwxNDIgQEAKK3tccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGNvY29hcnRmMTM0M1xjb2NvYXN1YnJ0ZjE2MAore1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO1xmMVxmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyTmV3UFMtQm9sZE1UO1xmMlxmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyTmV3UFNNVDsKK30KK3tcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KK1xtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3MTQ2MjBcdmlld2gxMzM4MFx2aWV3a2luZDAKK1xwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAorCitcZjBcYlxmczM2IFxjZjAgXHVsIFx1bGMwIEhJU1RPUlkgQU5EIExJQ0VOU0VcCisKK1xmczI0IFwKK0hJU1RPUlkgT0YgVEhFIFNPRlRXQVJFXAorCitcYjAgXHVsbm9uZSBcCitQeXRob24gd2FzIGNyZWF0ZWQgaW4gdGhlIGVhcmx5IDE5OTBzIGJ5IEd1aWRvIHZhbiBSb3NzdW0gYXQgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtIChDV0ksIHNlZSBodHRwOi8vd3d3LmN3aS5ubCkgaW4gdGhlIE5ldGhlcmxhbmRzIGFzIGEgc3VjY2Vzc29yIG9mIGEgbGFuZ3VhZ2UgY2FsbGVkIEFCQy4gR3VpZG8gcmVtYWlucyBQeXRob24ncyBwcmluY2lwYWwgYXV0aG9yLCBhbHRob3VnaCBpdCBpbmNsdWRlcyBtYW55IGNvbnRyaWJ1dGlvbnMgZnJvbSBvdGhlcnMuXAorXAorSW4gMTk5NSwgR3VpZG8gY29udGludWVkIGhpcyB3b3JrIG9uIFB5dGhvbiBhdCB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIChDTlJJLCBzZWUgaHR0cDovL3d3dy5jbnJpLnJlc3Rvbi52YS51cykgaW4gUmVzdG9uLCBWaXJnaW5pYSB3aGVyZSBoZSByZWxlYXNlZCBzZXZlcmFsIHZlcnNpb25zIG9mIHRoZSBzb2Z0d2FyZS5cCitcCitJbiBNYXkgMjAwMCwgR3VpZG8gYW5kIHRoZSBQeXRob24gY29yZSBkZXZlbG9wbWVudCB0ZWFtIG1vdmVkIHRvIEJlT3Blbi5jb20gdG8gZm9ybSB0aGUgQmVPcGVuIFB5dGhvbkxhYnMgdGVhbS4gSW4gT2N0b2JlciBvZiB0aGUgc2FtZSB5ZWFyLCB0aGUgUHl0aG9uTGFicyB0ZWFtIG1vdmVkIHRvIERpZ2l0YWwgQ3JlYXRpb25zIChub3cgWm9wZSBDb3Jwb3JhdGlvbiwgc2VlIGh0dHA6Ly93d3cuem9wZS5jb20pLiBJbiAyMDAxLCB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24gKFBTRiwgc2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvKSB3YXMgZm9ybWVkLCBhIG5vbi1wcm9maXQgb3JnYW5pemF0aW9uIGNyZWF0ZWQgc3BlY2lmaWNhbGx5IHRvIG93biBQeXRob24tcmVsYXRlZCBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIFpvcGUgQ29ycG9yYXRpb24gaXMgYSBzcG9uc29yaW5nIG1lbWJlciBvZiB0aGUgUFNGLlwKK1wKK0FsbCBQeXRob24gcmVsZWFzZXMgYXJlIE9wZW4gU291cmNlIChzZWUgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZyBmb3IgdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24pLiBIaXN0b3JpY2FsbHksIG1vc3QsIGJ1dCBub3QgYWxsLCBQeXRob24gcmVsZWFzZXMgaGF2ZSBhbHNvIGJlZW4gR1BMLWNvbXBhdGlibGU7IHRoZSB0YWJsZSBiZWxvdyBzdW1tYXJpemVzIHRoZSB2YXJpb3VzIHJlbGVhc2VzLlwKK1wKKworXGYxXGIgUmVsZWFzZSAgICAgICAgIERlcml2ZWQgICAgIFllYXIgICAgICAgIE93bmVyICAgICAgIEdQTC1cCisgICAgICAgICAgICAgICAgZnJvbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGF0aWJsZT9cCisKK1xmMlxiMCBcCiswLjkuMCB0aHJ1IDEuMiAgbi9hICAgICAgICAgMTk5MS0xOTk1ICAgQ1dJICAgICAgICAgeWVzXAorMS4zIHRocnUgMS41LjIgIDEuMiAgICAgICAgIDE5OTUtMTk5OSAgIENOUkkgICAgICAgIHllc1wKKzEuNiAgICAgICAgICAgICAxLjUuMiAgICAgICAyMDAwICAgICAgICBDTlJJICAgICAgICBub1wKKzIuMCAgICAgICAgICAgICAxLjYgICAgICAgICAyMDAwICAgICAgICBCZU9wZW4uY29tICBub1wKKzEuNi4xICAgICAgICAgICAxLjYgICAgICAgICAyMDAxICAgICAgICBDTlJJICAgICAgICBub1wKKzIuMSAgICAgICAgICAgICAyLjArMS42LjEgICAyMDAxICAgICAgICBQU0YgICAgICAgICBub1wKKzIuMC4xICAgICAgICAgICAyLjArMS42LjEgICAyMDAxICAgICAgICBQU0YgICAgICAgICB5ZXNcCisyLjEuMSAgICAgICAgICAgMi4xKzIuMC4xICAgMjAwMSAgICAgICAgUFNGICAgICAgICAgeWVzXAorMi4xLjIgICAgICAgICAgIDIuMS4xICAgICAgIDIwMDIgICAgICAgIFBTRiAgICAgICAgIHllc1wKKzIuMS4zICAgICAgICAgICAyLjEuMiAgICAgICAyMDAyICAgICAgICBQU0YgICAgICAgICB5ZXNcCisyLjIgYW5kIGFib3ZlICAgMi4xLjEgICAgICAgMjAwMS1ub3cgICAgUFNGICAgICAgICAgeWVzXAorCitcZjAgXAorCitcYiBOb3RlOiAgCitcYjAgR1BMLWNvbXBhdGlibGUgZG9lc24ndCBtZWFuIHRoYXQgd2UncmUgZGlzdHJpYnV0aW5nIFB5dGhvbiB1bmRlciB0aGUgR1BMLiBBbGwgUHl0aG9uIGxpY2Vuc2VzLCB1bmxpa2UgdGhlIEdQTCwgbGV0IHlvdSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgdmVyc2lvbiB3aXRob3V0IG1ha2luZyB5b3VyIGNoYW5nZXMgb3BlbiBzb3VyY2UuIFRoZSBHUEwtY29tcGF0aWJsZSBsaWNlbnNlcyBtYWtlIGl0IHBvc3NpYmxlIHRvIGNvbWJpbmUgUHl0aG9uIHdpdGggb3RoZXIgc29mdHdhcmUgdGhhdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMOyB0aGUgb3RoZXJzIGRvbid0LlwKK1wKK1RoYW5rcyB0byB0aGUgbWFueSBvdXRzaWRlIHZvbHVudGVlcnMgd2hvIGhhdmUgd29ya2VkIHVuZGVyIEd1aWRvJ3MgZGlyZWN0aW9uIHRvIG1ha2UgdGhlc2UgcmVsZWFzZXMgcG9zc2libGUuXAorXAorXAorCitcYiBcdWwgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIEFDQ0VTU0lORyBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OXAorCitcYjAgXHVsbm9uZSBcCisKK1xiIFBZVEhPTiBTT0ZUV0FSRSBGT1VOREFUSU9OIExJQ0VOU0UgVkVSU0lPTiAyXAorCitcYjAgXAorMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiAoIlBTRiIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyB0aGlzIHNvZnR3YXJlICgiUHl0aG9uIikgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLlwKK1wKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFBTRiBoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IFBTRidzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBQU0YncyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzLCAyMDE0LCAyMDE1LCAyMDE2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzIFJlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuXAorXAorMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24gb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZSB0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuIExpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbi5cCitcCis0LiBQU0YgaXMgbWFraW5nIFB5dGhvbiBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIiBiYXNpcy4gUFNGIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIFBTRiBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuXAorXAorNS4gUFNGIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTiBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTIEEgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OLCBPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuXAorXAorNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbCBicmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLlwKK1wKKzcuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIFBTRiBhbmQgTGljZW5zZWUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgUFNGIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS5cCitcCis4LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24sIExpY2Vuc2VlIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC5cCitcCitcCisKK1xiIEJFT1BFTi5DT00gTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAyLjBcCisKK1xiMCBcCitCRU9QRU4gUFlUSE9OIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UIFZFUlNJT04gMVwKK1wKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiBCZU9wZW4uY29tICgiQmVPcGVuIiksIGhhdmluZyBhbiBvZmZpY2UgYXQgMTYwIFNhcmF0b2dhIEF2ZW51ZSwgU2FudGEgQ2xhcmEsIENBIDk1MDUxLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyB0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAoInRoZSBTb2Z0d2FyZSIpLlwKK1wKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQmVPcGVuIFB5dGhvbiBMaWNlbnNlIEFncmVlbWVudCwgQmVPcGVuIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgdGhlIFNvZnR3YXJlIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoZSBCZU9wZW4gUHl0aG9uIExpY2Vuc2UgaXMgcmV0YWluZWQgaW4gdGhlIFNvZnR3YXJlLCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLlwKK1wKKzMuIEJlT3BlbiBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiIGJhc2lzLiBCRU9QRU4gTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQkVPUEVOIE1BS0VTIE5PIEFORCBESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy5cCitcCis0LiBCRU9QRU4gU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgVEhFIFNPRlRXQVJFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFLCBPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuXAorXAorNS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbCBicmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLlwKK1wKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGludGVycHJldGVkIGluIGFsbCByZXNwZWN0cyBieSB0aGUgbGF3IG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNsdWRpbmcgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIEJlT3BlbiBhbmQgTGljZW5zZWUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgQmVPcGVuIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuIEFzIGFuIGV4Y2VwdGlvbiwgdGhlICJCZU9wZW4gUHl0aG9uIiBsb2dvcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5weXRob25sYWJzLmNvbS9sb2dvcy5odG1sIG1heSBiZSB1c2VkIGFjY29yZGluZyB0byB0aGUgcGVybWlzc2lvbnMgZ3JhbnRlZCBvbiB0aGF0IHdlYiBwYWdlLlwKK1wKKzcuIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIHRoZSBzb2Z0d2FyZSwgTGljZW5zZWUgYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LlwKK1wKK1wKKworXGIgQ05SSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDEuNi4xXAorCitcYjAgXAorMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMsIGhhdmluZyBhbiBvZmZpY2UgYXQgMTg5NSBQcmVzdG9uIFdoaXRlIERyaXZlLCBSZXN0b24sIFZBIDIwMTkxICgiQ05SSSIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLlwKK1wKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIENOUkkgaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIFB5dGhvbiAxLjYuMSBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBDTlJJJ3MgTGljZW5zZSBBZ3JlZW1lbnQgYW5kIENOUkkncyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKSAxOTk1LTIwMDEgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzOyBBbGwgUmlnaHRzIFJlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIDEuNi4xIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuIEFsdGVybmF0ZWx5LCBpbiBsaWV1IG9mIENOUkkncyBMaWNlbnNlIEFncmVlbWVudCwgTGljZW5zZWUgbWF5IHN1YnN0aXR1dGUgdGhlIGZvbGxvd2luZyB0ZXh0IChvbWl0dGluZyB0aGUgcXVvdGVzKTogIlB5dGhvbiAxLjYuMSBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiBDTlJJJ3MgTGljZW5zZSBBZ3JlZW1lbnQuIFRoaXMgQWdyZWVtZW50IHRvZ2V0aGVyIHdpdGggUHl0aG9uIDEuNi4xIG1heSBiZSBsb2NhdGVkIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nIHVuaXF1ZSwgcGVyc2lzdGVudCBpZGVudGlmaWVyIChrbm93biBhcyBhIGhhbmRsZSk6IDE4OTUuMjIvMTAxMy4gVGhpcyBBZ3JlZW1lbnQgbWF5IGFsc28gYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbiB0aGUgSW50ZXJuZXQgdXNpbmcgdGhlIGZvbGxvd2luZyBVUkw6IGh0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODk1LjIyLzEwMTMiLlwKK1wKKzMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uIG9yIGluY29ycG9yYXRlcyBQeXRob24gMS42LjEgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UgdGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbiBMaWNlbnNlZSBoZXJlYnkgYWdyZWVzIHRvIGluY2x1ZGUgaW4gYW55IHN1Y2ggd29yayBhIGJyaWVmIHN1bW1hcnkgb2YgdGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24gMS42LjEuXAorXAorNC4gQ05SSSBpcyBtYWtpbmcgUHl0aG9uIDEuNi4xIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiIGJhc2lzLiBDTlJJIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIENOUkkgTUFLRVMgTk8gQU5EIERJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFBZVEhPTiAxLjYuMSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLlwKK1wKKzUuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OIDEuNi4xIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMgQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gMS42LjEsIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi5cCitcCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsIGJyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuXAorXAorNy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgZmVkZXJhbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3IG9mIHRoZSBVbml0ZWQgU3RhdGVzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBmZWRlcmFsIGNvcHlyaWdodCBsYXcsIGFuZCwgdG8gdGhlIGV4dGVudCBzdWNoIFUuUy4gZmVkZXJhbCBsYXcgZG9lcyBub3QgYXBwbHksIGJ5IHRoZSBsYXcgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBWaXJnaW5pYSwgZXhjbHVkaW5nIFZpcmdpbmlhJ3MgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aXRoIHJlZ2FyZCB0byBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIG9uIFB5dGhvbiAxLjYuMSB0aGF0IGluY29ycG9yYXRlIG5vbi1zZXBhcmFibGUgbWF0ZXJpYWwgdGhhdCB3YXMgcHJldmlvdXNseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIHRoZSBsYXcgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBWaXJnaW5pYSBzaGFsbCBnb3Zlcm4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBvbmx5IGFzIHRvIGlzc3VlcyBhcmlzaW5nIHVuZGVyIG9yIHdpdGggcmVzcGVjdCB0byBQYXJhZ3JhcGhzIDQsIDUsIGFuZCA3IG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIENOUkkgYW5kIExpY2Vuc2VlLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIENOUkkgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LlwKK1wKKzguIEJ5IGNsaWNraW5nIG9uIHRoZSAiQUNDRVBUIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEsIExpY2Vuc2VlIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC5cCitcCisgICAgICAgIEFDQ0VQVFwKK1wKK1wKKworXGIgQ1dJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMC45LjAgVEhST1VHSCAxLjJcCisKK1xiMCBcCitDb3B5cmlnaHQgKGMpIDE5OTEgLSAxOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gQW1zdGVyZGFtLCBUaGUgTmV0aGVybGFuZHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXAorXAorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gb3IgQ1dJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLlwKK1wKK1NUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlwKK1wKK1wKKworXGIgXHVsIExJQ0VOU0VTIEFORCBBQ0tOT1dMRURHRU1FTlRTIEZPUiBJTkNPUlBPUkFURUQgU09GVFdBUkVcCisKK1xiMCBcdWxub25lIFwKK1RoaXMgaW5zdGFsbGVyIGluY29ycG9yYXRlcyBwb3J0aW9ucyBvZiB0aGUgZm9sbG93aW5nIHRoaXJkLXBhcnR5IHNvZnR3YXJlOlwKK1wKKworXGYyICRUSElSRF9QQVJUWV9MSUJTXAorXAorCitcZjAgRm9yIGxpY2Vuc2VzIGFuZCBhY2tub3dsZWRnZW1lbnRzIGZvciB0aGVzZSBhbmQgb3RoZXIgdGhpcmQtcGFydHkgc29mdHdhcmUgaW5jb3Jwb3JhdGVkIGluIHRoaXMgUHl0aG9uIGRpc3RyaWJ1dGlvbiwgcGxlYXNlIHJlZmVyIHRvIHRoZSBvbi1saW5lIGRvY3VtZW50YXRpb24ge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvJFZFUlNJT04vbGljZW5zZS5odG1sI2xpY2Vuc2VzLWFuZC1hY2tub3dsZWRnZW1lbnRzLWZvci1pbmNvcnBvcmF0ZWQtc29mdHdhcmUifX17XGZsZHJzbHQgaGVyZX19LlwKK1wKK1wKK1wKK1wKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS5ydGYgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS5ydGYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkOGI4MAotLS0gL2Rldi9udWxsCisrKyBiL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvUmVhZE1lLnJ0ZgpAQCAtMCwwICsxLDE4MCBAQAore1xydGYxXGFuc2lcYW5zaWNwZzEyNTJcY29jb2FydGYxMzQ3XGNvY29hc3VicnRmNTcwCit7XGZvbnR0YmxcZjBcZnN3aXNzXGZjaGFyc2V0MCBIZWx2ZXRpY2E7XGYxXGZtb2Rlcm5cZmNoYXJzZXQwIENvdXJpZXJOZXdQU01UO30KK3tcY29sb3J0Ymw7XHJlZDI1NVxncmVlbjI1NVxibHVlMjU1O30KK1xtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3MTMzODBcdmlld2gxNDYwMFx2aWV3a2luZDAKK1xwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAorCitcZjBcZnMyNCBcY2YwIFRoaXMgcGFja2FnZSB3aWxsIGluc3RhbGwgUHl0aG9uICRGVUxMX1ZFUlNJT04gZm9yIE1hYyBPUyBYICRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZm9yIHRoZSBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlKHMpOiAkQVJDSElURUNUVVJFUy5cCitcCitccGFyZFx0eDcyMFx0eDE0NDBcdHgyMTYwXHR4Mjg4MFx0eDM2MDBcdHg0MzIwXHR4NTA0MFx0eDU3NjBcdHg2NDgwXHR4NzIwMFx0eDc5MjBcdHg4NjQwXHBhcmRpcm5hdHVyYWwKKworXGIgXGNmMCBcdWwgXHVsYzAgV2hpY2ggaW5zdGFsbGVyIHZhcmlhbnQgc2hvdWxkIEkgdXNlPworXGIwIFx1bG5vbmUgXAorXAorUHl0aG9uLm9yZyBwcm92aWRlcyB0d28gaW5zdGFsbGVyIHZhcmlhbnRzIGZvciBkb3dubG9hZDogb25lIHRoYXQgaW5zdGFsbHMgYSAKK1xpIDY0LWJpdC8zMi1iaXQgSW50ZWwKK1xpMCAgUHl0aG9uIGNhcGFibGUgb2YgcnVubmluZyBvbiAKK1xpIE1hYyBPUyBYIDEwLjYgKFNub3cgTGVvcGFyZCkKK1xpMCAgb3IgbGF0ZXI7IGFuZCBvbmUgdGhhdCBpbnN0YWxscyBhIAorXGkgMzItYml0LW9ubHkgKEludGVsIGFuZCBQUEMpCitcaTAgIFB5dGhvbiBjYXBhYmxlIG9mIHJ1bm5pbmcgb24gCitcaSBNYWMgT1MgWCAxMC41IChMZW9wYXJkKQorXGkwICBvciBsYXRlci4gIFRoaXMgUmVhZE1lIHdhcyBpbnN0YWxsZWQgd2l0aCB0aGUgCitcaSAkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCitcaTAgIHZhcmlhbnQuICBVbmxlc3MgeW91IGFyZSBpbnN0YWxsaW5nIHRvIGFuIDEwLjUgc3lzdGVtIG9yIHlvdSBuZWVkIHRvIGJ1aWxkIGFwcGxpY2F0aW9ucyB0aGF0IGNhbiBydW4gb24gMTAuNSBzeXN0ZW1zLCB1c2UgdGhlIDEwLjYgdmFyaWFudCBpZiBwb3NzaWJsZS4gIFRoZXJlIGFyZSBzb21lIGFkZGl0aW9uYWwgb3BlcmF0aW5nIHN5c3RlbSBmdW5jdGlvbnMgdGhhdCBhcmUgc3VwcG9ydGVkIHN0YXJ0aW5nIHdpdGggMTAuNiBhbmQgeW91IG1heSBzZWUgYmV0dGVyIHBlcmZvcm1hbmNlIHVzaW5nIDY0LWJpdCBtb2RlLiAgQnkgZGVmYXVsdCwgUHl0aG9uIHdpbGwgYXV0b21hdGljYWxseSBydW4gaW4gNjQtYml0IG1vZGUgaWYgeW91ciBzeXN0ZW0gc3VwcG9ydHMgaXQuICBBbHNvIHNlZSAKK1xpIENlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBhbmQgT3BlblNTTAorXGkwICBiZWxvdy4gIFRoZSBQeXRob25zIGluc3RhbGxlZCBieSB0aGVzZSBpbnN0YWxsZXJzIGFyZSBidWlsdCB3aXRoIHByaXZhdGUgY29waWVzIG9mIHNvbWUgdGhpcmQtcGFydHkgbGlicmFyaWVzIG5vdCBpbmNsdWRlZCB3aXRoIG9yIG5ld2VyIHRoYW4gdGhvc2UgaW4gT1MgWCBpdHNlbGYuICBUaGUgbGlzdCBvZiB0aGVzZSBsaWJyYXJpZXMgdmFyaWVzIGJ5IGluc3RhbGxlciB2YXJpYW50IGFuZCBpcyBpbmNsdWRlZCBhdCB0aGUgZW5kIG9mIHRoZSBMaWNlbnNlLnJ0ZiBmaWxlLgorXGIgXHVsIFx1bGMwIFwKK1wKK1VwZGF0ZSB5b3VyIHZlcnNpb24gb2YgVGNsL1RrIHRvIHVzZSBJRExFIG9yIG90aGVyIFRrIGFwcGxpY2F0aW9ucworXGIwIFx1bG5vbmUgXAorXAorVG8gdXNlIElETEUgb3Igb3RoZXIgcHJvZ3JhbXMgdGhhdCB1c2UgdGhlIFRraW50ZXIgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIHRvb2xraXQsIHlvdSBuZWVkIHRvIGluc3RhbGwgYSBuZXdlciB0aGlyZC1wYXJ0eSB2ZXJzaW9uIG9mIHRoZSAKK1xpIFRjbC9UaworXGkwICBmcmFtZXdvcmtzLiAgVmlzaXQge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvdGNsdGsvIn19e1xmbGRyc2x0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrL319IGZvciBjdXJyZW50IGluZm9ybWF0aW9uIGFib3V0IHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMgb2YgCitcaSBUY2wvVGsKK1xpMCAgZm9yIHRoaXMgdmVyc2lvbiBvZiBQeXRob24gYW5kIG9mIE1hYyBPUyBYLlwKKworXGIgXHVsIFwKK0luc3RhbGxpbmcgb24gT1MgWCAxMC44IChNb3VudGFpbiBMaW9uKSBvciBsYXRlciBzeXN0ZW1zXAorXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCitcY2YwIFx1bG5vbmUgW0NIQU5HRUQgZm9yIFB5dGhvbiAzLjQuMl0KK1xiMCBcCitcCitBcyBvZiBQeXRob24gMy40LjIsIGluc3RhbGxlciBwYWNrYWdlcyBmcm9tIHB5dGhvbi5vcmcgYXJlIG5vdyBjb21wYXRpYmxlIHdpdGggdGhlIEdhdGVrZWVwZXIgc2VjdXJpdHkgZmVhdHVyZSBpbnRyb2R1Y2VkIGluIE9TIFggMTAuOC4gICBEb3dubG9hZGVkIHBhY2thZ2VzIGNhbiBub3cgYmUgZGlyZWN0bHkgaW5zdGFsbGVkIGJ5IGRvdWJsZS1jbGlja2luZyB3aXRoIHRoZSBkZWZhdWx0IHN5c3RlbSBzZWN1cml0eSBzZXR0aW5ncy4gIFB5dGhvbi5vcmcgaW5zdGFsbGVyIHBhY2thZ2VzIGZvciBPUyBYIGFyZSBzaWduZWQgd2l0aCB0aGUgRGV2ZWxvcGVyIElEIG9mIHRoZSBidWlsZGVyLCBhcyBpZGVudGlmaWVkIG9uIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLyJ9fXtcZmxkcnNsdCB0aGUgZG93bmxvYWQgcGFnZX19IGZvciB0aGlzIHJlbGVhc2UuICBUbyBpbnNwZWN0IHRoZSBkaWdpdGFsIHNpZ25hdHVyZSBvZiB0aGUgcGFja2FnZSwgY2xpY2sgb24gdGhlIGxvY2sgaWNvbiBpbiB0aGUgdXBwZXIgcmlnaHQgY29ybmVyIG9mIHRoZSAKK1xpIEluc3RhbGwgUHl0aG9uCitcaTAgIGluc3RhbGxlciB3aW5kb3cuICBSZWZlciB0byBBcHBsZVwnOTJzIHN1cHBvcnQgcGFnZXMgZm9yIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHA6Ly9zdXBwb3J0LmFwcGxlLmNvbS9rYi9odDUyOTAifX17XGZsZHJzbHQgbW9yZSBpbmZvcm1hdGlvbiBvbiBHYXRla2VlcGVyfX0uXAorXAorXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCisKK1xiIFxjZjAgXHVsIFNpbXBsaWZpZWQgd2ViLWJhc2VkIGluc3RhbGxzXAorXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCitcY2YwIFx1bG5vbmUgW05FVyBmb3IgUHl0aG9uIDMuNC4yXQorXGIwIFwKK1wKK1dpdGggdGhlIGNoYW5nZSB0byB0aGUgbmV3ZXIgZmxhdCBmb3JtYXQgaW5zdGFsbGVyIHBhY2thZ2UsIHRoZSBkb3dubG9hZCBmaWxlIG5vdyBoYXMgYSAKK1xmMSAucGtnCitcZjAgIGV4dGVuc2lvbiBhcyBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvIGVtYmVkIHRoZSBpbnN0YWxsZXIgd2l0aGluIGEgZGlzayBpbWFnZSAoCitcZjEgLmRtZworXGYwICkgY29udGFpbmVyLiAgIElmIHlvdSBkb3dubG9hZCB0aGUgUHl0aG9uIGluc3RhbGxlciB0aHJvdWdoIGEgd2ViIGJyb3dzZXIsIHRoZSBPUyBYIGluc3RhbGxlciBhcHBsaWNhdGlvbiBtYXkgb3BlbiBhdXRvbWF0aWNhbGx5IHRvIGFsbG93IHlvdSB0byBwZXJmb3JtIHRoZSBpbnN0YWxsLiAgSWYgeW91ciBicm93c2VyIHNldHRpbmdzIGRvIG5vdCBhbGxvdyBhdXRvbWF0aWMgb3BlbiwgZG91YmxlIGNsaWNrIG9uIHRoZSBkb3dubG9hZGVkIGluc3RhbGxlciBmaWxlLlwKK1wKK1xwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAorCitcYiBcY2YwIFx1bCBOZXcgSW5zdGFsbGF0aW9uIE9wdGlvbnMgYW5kIERlZmF1bHRzXAorXHBhcmRcdHg3MjBcdHgxNDQwXHR4MjE2MFx0eDI4ODBcdHgzNjAwXHR4NDMyMFx0eDUwNDBcdHg1NzYwXHR4NjQ4MFx0eDcyMDBcdHg3OTIwXHR4ODY0MFxwYXJkaXJuYXR1cmFsCitcY2YwIFx1bG5vbmUgW05FVyBmb3IgUHl0aG9uIDMuNC4wXQorXGIwIFwKK1wKK1RoZSBQeXRob24gaW5zdGFsbGVyIG5vdyBpbmNsdWRlcyBhbiBvcHRpb24gdG8gYXV0b21hdGljYWxseSBpbnN0YWxsIG9yIHVwZ3JhZGUgCitcZjEgcGlwCitcZjAgLCBhIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4gIFRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgbm8gSW50ZXJuZXQgYWNjZXNzIGlzIHJlcXVpcmVkLiAgSWYgeW91IGRvIG5vdCB3YW50IHRoZSBpbnN0YWxsZXIgdG8gZG8gdGhpcywgc2VsZWN0IHRoZSAKK1xpIEN1c3RvbWl6ZQorXGkwICBvcHRpb24gYXQgdGhlIAorXGkgSW5zdGFsbGF0aW9uIFR5cGUKK1xpMCAgc3RlcCBhbmQgdW5jaGVjayB0aGUgCitcaSBJbnN0YWxsIG9yIHVncHJhZGUgcGlwCitcaTAgIG9wdGlvbi5cCitcCitUbyBtYWtlIGl0IGVhc2llciB0byB1c2Ugc2NyaXB0cyBpbnN0YWxsZWQgYnkgdGhpcmQtcGFydHkgUHl0aG9uIHBhY2thZ2VzLCB3aXRoIAorXGYxIHBpcAorXGYwICBvciBieSBvdGhlciBtZWFucywgdGhlIAorXGkgU2hlbGwgcHJvZmlsZSB1cGRhdGVyCitcaTAgIG9wdGlvbiBpcyBub3cgZW5hYmxlZCBieSBkZWZhdWx0LCBhcyBoYXMgYmVlbiB0aGUgY2FzZSB3aXRoIFB5dGhvbiAyLjcueCBpbnN0YWxsZXJzLiBZb3UgY2FuIGFsc28gdHVybiB0aGlzIG9wdGlvbiBvZmYgYnkgc2VsZWN0aW5nIAorXGkgQ3VzdG9taXplCitcaTAgIGFuZCB1bmNoZWNraW5nIHRoZSAKK1xpIFNoZWxsIHByb2ZpbGUgdXBkYXRlcgorXGkwICBvcHRpb24uIFlvdSBjYW4gYWxzbyB1cGRhdGUgeW91ciBzaGVsbCBwcm9maWxlIGxhdGVyIGJ5IGxhdW5jaGluZyB0aGUgCitcaSBVcGRhdGUgU2hlbGwgUHJvZmlsZQorXGkwICBjb21tYW5kIGZvdW5kIGluIHRoZSAKK1xmMSAvQXBwbGljYXRpb25zL1B5dGhvbiAkVkVSU0lPTiAKK1xmMCBmb2xkZXIuICBZb3UgbWF5IG5lZWQgdG8gc3RhcnQgYSBuZXcgdGVybWluYWwgd2luZG93IGZvciB0aGUgY2hhbmdlcyB0byB0YWtlIGVmZmVjdC5cCitcCitGb3Igb3RoZXIgY2hhbmdlcyBpbiB0aGlzIHJlbGVhc2UsIHNlZSB0aGUgUmVsZWFzZSBOb3RlcyBsaW5rIGZvciB0aGlzIHJlbGVhc2UgYXQge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZHMvIn19e1xmbGRyc2x0IGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzL319LlwKK1wKK1xwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAorCitcYiBcY2YwIFx1bCBDZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gYW5kIE9wZW5TU0xcCitccGFyZFx0eDcyMFx0eDE0NDBcdHgyMTYwXHR4Mjg4MFx0eDM2MDBcdHg0MzIwXHR4NTA0MFx0eDU3NjBcdHg2NDgwXHR4NzIwMFx0eDc5MjBcdHg4NjQwXHBhcmRpcm5hdHVyYWwKK1xjZjAgXHVsbm9uZSBbQ0hBTkdFRCBmb3IgUHl0aG9uIDMuNC4zXQorXGIwIFwKK1wKK1B5dGhvbiAzLjQuMyBpbmNsdWRlcyBhIG51bWJlciBvZiBuZXR3b3JrIHNlY3VyaXR5IGVuaGFuY2VtZW50cyB0aGF0IGhhdmUgYmVlbiBhcHByb3ZlZCBmb3IgaW5jbHVzaW9uIGluIFB5dGhvbiAzLjQgbWFpbnRlbmFuY2UgcmVsZWFzZXMuICB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwczovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDc2LyJ9fXtcZmxkcnNsdCBQRVAgNDc2fX0gY2hhbmdlcyBzZXZlcmFsIHN0YW5kYXJkIGxpYnJhcnkgbW9kdWxlcywgbGlrZSAKK1xpIGh0dHBsaWIKK1xpMCAsIAorXGkgdXJsbGliCitcaTAgLCBhbmQgCitcaSB4bWxycGNsaWIKK1xpMCAsIHRvIGJ5IGRlZmF1bHQgdmVyaWZ5IGNlcnRpZmljYXRlcyBwcmVzZW50ZWQgYnkgc2VydmVycyBvdmVyIHNlY3VyZSAoVExTKSBjb25uZWN0aW9ucy4gIFRoZSB2ZXJpZmljYXRpb24gaXMgcGVyZm9ybWVkIGJ5IHRoZSBPcGVuU1NMIGxpYnJhcmllcyB0aGF0IFB5dGhvbiBpcyBsaW5rZWQgdG8uICBQcmlvciB0byAzLjQuMywgdGhlIHB5dGhvbi5vcmcgaW5zdGFsbGVycyBkeW5hbWljYWxseSBsaW5rZWQgd2l0aCBBcHBsZS1zdXBwbGllZCBPcGVuU1NMIGxpYnJhcmllcyBzaGlwcGVkIHdpdGggT1MgWC4gIE9TIFggcHJvdmlkZXMgYSBtdWx0aXBsZSBsZXZlbCBzZWN1cml0eSBmcmFtZXdvcmsgdGhhdCBzdG9yZXMgdHJ1c3QgY2VydGlmaWNhdGVzIGluIHN5c3RlbSBhbmQgdXNlciBrZXljaGFpbnMgbWFuYWdlZCBieSB0aGUgCitcaSBLZXljaGFpbiBBY2Nlc3MgCitcaTAgYXBwbGljYXRpb24gYW5kIHRoZSAKK1xpIHNlY3VyaXR5CitcaTAgIGNvbW1hbmQgbGluZSB1dGlsaXR5LlwKK1wKK0ZvciBPUyBYIDEwLjUsIEFwcGxlIHByb3ZpZGVzIAorXGkgT3BlblNTTCAwLjkuNworXGkwICBsaWJyYXJpZXMuICBUaGlzIHZlcnNpb24gb2YgQXBwbGUncyBPcGVuU1NMIAorXGIgZG9lcyBub3QKK1xiMCAgdXNlIHRoZSBjZXJ0aWZpY2F0ZXMgZnJvbSB0aGUgc3lzdGVtIHNlY3VyaXR5IGZyYW1ld29yaywgZXZlbiB3aGVuIHVzZWQgb24gbmV3ZXIgdmVyc2lvbnMgb2YgT1MgWC4gIEluc3RlYWQgaXQgY29uc3VsdHMgYSB0cmFkaXRpb25hbCBPcGVuU1NMIGNvbmNhdGVuYXRlZCBjZXJ0aWZpY2F0ZSBmaWxlICgKK1xpIGNhZmlsZQorXGkwICkgb3IgY2VydGlmaWNhdGUgZGlyZWN0b3J5ICgKK1xpIGNhcGF0aAorXGkwICksIGxvY2F0ZWQgaW4gCitcZjEgL1N5c3RlbS9MaWJyYXJ5L09wZW5TU0wKK1xmMCAuICBUaGVzZSBkaXJlY3RvcmllcyBhcmUgdHlwaWNhbGx5IGVtcHR5IGFuZCBub3QgbWFuYWdlZCBieSBPUyBYOyB5b3UgbXVzdCBtYW5hZ2UgdGhlbSB5b3Vyc2VsZiBvciBzdXBwbHkgeW91ciBvd24gU1NMIGNvbnRleHRzLiAgT3BlblNTTCAwLjkuNyBpcyBvYnNvbGV0ZSBieSBjdXJyZW50IHNlY3VyaXR5IHN0YW5kYXJkcywgbGFja2luZyBhIG51bWJlciBvZiBpbXBvcnRhbnQgZmVhdHVyZXMgZm91bmQgaW4gbGF0ZXIgdmVyc2lvbnMuICBBbW9uZyB0aGUgcHJvYmxlbXMgdGhpcyBjYXVzZXMgaXMgdGhlIGluYWJpbGl0eSB0byB2ZXJpZnkgaGlnaGVyLXNlY3VyaXR5IGNlcnRpZmljYXRlcyBub3cgdXNlZCBieSBweXRob24ub3JnIHNlcnZpY2VzLCBpbmNsdWRpbmcgCitcaSB0e1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaSJ9fXtcZmxkcnNsdCBoZSBQeXRob24gUGFja2FnZSBJbmRleCwgUHlQSX19CitcaTAgLiAgVG8gc29sdmUgdGhpcyBwcm9ibGVtLCBhcyBvZiAzLjQuMyB0aGUgCitcaSAxMC41KyAzMi1iaXQtb25seSBweXRob24ub3JnIHZhcmlhbnQKK1xpMCAgaXMgbGlua2VkIHdpdGggYSBwcml2YXRlIGNvcHkgb2YgCitcaSBPcGVuU1NMIDEuMAorXGkwIDsgaXQgY29uc3VsdHMgdGhlIHNhbWUgZGVmYXVsdCBjZXJ0aWZpY2F0ZSBkaXJlY3RvcnksIAorXGYxIC9TeXN0ZW0vTGlicmFyeS9PcGVuU1NMCitcZjAgLiAgIEFzIGJlZm9yZSwgaXQgaXMgc3RpbGwgbmVjZXNzYXJ5IHRvIG1hbmFnZSBjZXJ0aWZpY2F0ZXMgeW91cnNlbGYgd2hlbiB5b3UgdXNlIHRoaXMgUHl0aG9uIHZhcmlhbnQgYW5kLCB3aXRoIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiBub3cgZW5hYmxlZCBieSBkZWZhdWx0LCB5b3UgbWF5IG5vdyBuZWVkIHRvIHRha2UgYWRkaXRpb25hbCBzdGVwcyB0byBlbnN1cmUgeW91ciBQeXRob24gcHJvZ3JhbXMgaGF2ZSBhY2Nlc3MgdG8gQ0EgY2VydGlmaWNhdGVzIHlvdSB0cnVzdC4gIElmIHlvdSB1c2UgdGhpcyBQeXRob24gdmFyaWFudCB0byBidWlsZCBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucyB3aXRoIHRoaXJkLXBhcnR5IHRvb2xzIGxpa2Uge1xmaWVsZHtcKlxmbGRpbnN0e0hZUEVSTElOSyAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS9weTJhcHAvIn19e1xmbGRyc2x0IAorXGYxIHB5MmFwcH19LCB5b3UgbWF5IG5vdyBuZWVkIHRvIGJ1bmRsZSBDQSBjZXJ0aWZpY2F0ZXMgaW4gdGhlbSBvciBvdGhlcndpc2Ugc3VwcGx5IG5vbi1kZWZhdWx0IFNTTCBjb250ZXh0cy5cCitcCitGb3IgT1MgWCAxMC42KywgQXBwbGUgYWxzbyBwcm92aWRlcyAKK1xpIE9wZW5TU0wKK1xpMCAgCitcaSAwLjkuOCBsaWJyYXJpZXMKK1xpMCAuICBBcHBsZSdzIDAuOS44IHZlcnNpb24gaW5jbHVkZXMgYW4gaW1wb3J0YW50IGFkZGl0aW9uYWwgZmVhdHVyZTogaWYgYSBjZXJ0aWZpY2F0ZSBjYW5ub3QgYmUgdmVyaWZpZWQgdXNpbmcgdGhlIG1hbnVhbGx5IGFkbWluaXN0ZXJlZCBjZXJ0aWZpY2F0ZXMgaW4gCitcZjEgL1N5c3RlbS9MaWJyYXJ5L09wZW5TU0wKK1xmMCAsIHRoZSBjZXJ0aWZpY2F0ZXMgbWFuYWdlZCBieSB0aGUgc3lzdGVtIHNlY3VyaXR5IGZyYW1ld29yayBJbiB0aGUgdXNlciBhbmQgc3lzdGVtIGtleWNoYWlucyBhcmUgYWxzbyBjb25zdWx0ZWQgKHVzaW5nIEFwcGxlIHByaXZhdGUgQVBJcykuICBGb3IgdGhpcyByZWFzb24sIGZvciAzLjQuMyB0aGUgCitcaSA2NC1iaXQvMzItYml0IDEwLjYrIHB5dGhvbi5vcmcgdmFyaWFudAorXGkwICBjb250aW51ZXMgdG8gYmUgZHluYW1pY2FsbHkgbGlua2VkIHdpdGggQXBwbGUncyBPcGVuU1NMIDAuOS44IHNpbmNlIGl0IHdhcyBmZWx0IHRoYXQgdGhlIGxvc3Mgb2YgdGhlIHN5c3RlbS1wcm92aWRlZCBjZXJ0aWZpY2F0ZXMgYW5kIG1hbmFnZW1lbnQgdG9vbHMgb3V0d2VpZ2hzIHRoZSBhZGRpdGlvbmFsIHNlY3VyaXR5IGZlYXR1cmVzIHByb3ZpZGVkIGJ5IG5ld2VyIHZlcnNpb25zIG9mIE9wZW5TU0wuICBUaGlzIHdpbGwgbGlrZWx5IGNoYW5nZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIHB5dGhvbi5vcmcgaW5zdGFsbGVycyBhcyBBcHBsZSBoYXMgZGVwcmVjYXRlZCB1c2Ugb2YgdGhlIHN5c3RlbS1zdXBwbGllZCBPcGVuU1NMIGxpYnJhcmllcy4gIElmIHlvdSBkbyBuZWVkIGZlYXR1cmVzIGZyb20gbmV3ZXIgdmVyc2lvbnMgb2YgT3BlblNTTCwgdGhlcmUgYXJlIHRoaXJkLXBhcnR5IE9wZW5TU0wgd3JhcHBlciBwYWNrYWdlcyBhdmFpbGFibGUgdGhyb3VnaCAKK1xpIFB5UEkKK1xpMCAuXAorXAorVGhlIGJ1bmRsZWQgCitcZjEgcGlwCitcZjAgIGluY2x1ZGVkIHdpdGggMy40LjMgaGFzIGl0cyBvd24gZGVmYXVsdCBjZXJ0aWZpY2F0ZSBzdG9yZSBmb3IgdmVyaWZ5aW5nIGRvd25sb2FkIGNvbm5lY3Rpb25zLlwKK1xwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDBccGFyZGlybmF0dXJhbAorCitcYiBcY2YwIFx1bCBcCitQeXRob24gMyBhbmQgUHl0aG9uIDIgQ28tZXhpc3RlbmNlXAorCitcYjAgXHVsbm9uZSBcCitQeXRob24ub3JnIFB5dGhvbiAkVkVSU0lPTiBhbmQgMi43LnggdmVyc2lvbnMgY2FuIGJvdGggYmUgaW5zdGFsbGVkIG9uIHlvdXIgc3lzdGVtIGFuZCB3aWxsIG5vdCBjb25mbGljdC4gQ29tbWFuZCBuYW1lcyBmb3IgUHl0aG9uIDMgY29udGFpbiBhIDMgaW4gdGhlbSwgCitcZjEgcHl0aG9uMworXGYwICAob3IKK1xmMSAgcHl0aG9uJFZFUlNJT04KK1xmMCApLCAKK1xmMSBpZGxlMworXGYwICAob3IgaQorXGYxIGRsZSRWRVJTSU9OCitcZjAgKSwgCitcZjEgcGlwMworXGYwICAob3IgCitcZjEgcGlwJFZFUlNJT04KK1xmMCApLCBldGMuICBQeXRob24gMi43IGNvbW1hbmQgbmFtZXMgY29udGFpbiBhIDIgb3Igbm8gZGlnaXQ6IAorXGYxIHB5dGhvbjIKK1xmMCAgKG9yIAorXGYxIHB5dGhvbjIuNworXGYwICBvciAKK1xmMSBweXRob24KK1xmMCApLCAKK1xmMSBpZGxlMgorXGYwICAob3IgCitcZjEgaWRsZTIuNworXGYwICBvciAKK1xmMSBpZGxlCitcZjAgKSwgZXRjLlwKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1JlYWRNZS50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIxMmQ5NjMuLjAwMDAwMDAKLS0tIGEvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9SZWFkTWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotVGhpcyBwYWNrYWdlIHdpbGwgaW5zdGFsbCBQeXRob24gJEZVTExfVkVSU0lPTiBmb3IgTWFjIE9TIFgKLSRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgZm9yIHRoZSBmb2xsb3dpbmcgYXJjaGl0ZWN0dXJlKHMpOgotJEFSQ0hJVEVDVFVSRVMuCi0KLSAgICAgICAgICAgICAgICoqKiogSU1QT1JUQU5UICoqKioKLQotSW5zdGFsbGluZyBvbiBPUyBYIDEwLjggKE1vdW50YWluIExpb24pIG9yIGxhdGVyIHN5c3RlbXMKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUlmIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBpbnN0YWxsIG9uIGFuIE9TIFggMTAuOCsgc3lzdGVtLCB5b3UgbWF5Ci1zZWUgYSBtZXNzYWdlIHRoYXQgUHl0aG9uIGNhbid0IGJlIGluc3RhbGxlZCBiZWNhdXNlIGl0IGlzIGZyb20gYW4KLXVuaWRlbnRpZmllZCBkZXZlbG9wZXIuICBUaGlzIGlzIGJlY2F1c2UgdGhpcyBQeXRob24gaW5zdGFsbGVyCi1wYWNrYWdlIGlzIG5vdCB5ZXQgY29tcGF0aWJsZSB3aXRoIHRoZSBHYXRla2VlcGVyIHNlY3VyaXR5IGZlYXR1cmUKLWludHJvZHVjZWQgaW4gT1MgWCAxMC44LiAgVG8gYWxsb3cgUHl0aG9uIHRvIGJlIGluc3RhbGxlZCwgeW91Ci1jYW4gb3ZlcnJpZGUgdGhlIEdhdGVrZWVwZXIgcG9saWN5IGZvciB0aGlzIGluc3RhbGwuICBJbiB0aGUgRmluZGVyLAotaW5zdGVhZCBvZiBkb3VibGUtY2xpY2tpbmcsIGNvbnRyb2wtY2xpY2sgb3IgcmlnaHQgY2xpY2sgdGhlICJQeXRob24iCi1pbnN0YWxsZXIgcGFja2FnZSBpY29uLiAgVGhlbiBzZWxlY3QgIk9wZW4gdXNpbmcgLi4uIEluc3RhbGxlciIgZnJvbQotdGhlIGNvbnRleHR1YWwgbWVudSB0aGF0IGFwcGVhcnMuCi0KLSAgICAgICAgICAgICAgICoqKiogSU1QT1JUQU5UICoqKioKLQotVXBkYXRlIHlvdXIgdmVyc2lvbiBvZiBUY2wvVGsgdG8gdXNlIElETEUgb3Igb3RoZXIgVGsgYXBwbGljYXRpb25zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotVG8gdXNlIElETEUgb3Igb3RoZXIgcHJvZ3JhbXMgdGhhdCB1c2UgdGhlIFRraW50ZXIgZ3JhcGhpY2FsIHVzZXIKLWludGVyZmFjZSB0b29sa2l0LCB5b3UgbWF5IG5lZWQgdG8gaW5zdGFsbCBhIG5ld2VyIHRoaXJkLXBhcnR5IHZlcnNpb24KLW9mIHRoZSBUY2wvVGsgZnJhbWV3b3Jrcy4gIFZpc2l0IGh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb3dubG9hZC9tYWMvdGNsdGsvCi1mb3IgY3VycmVudCBpbmZvcm1hdGlvbiBhYm91dCBzdXBwb3J0ZWQgYW5kIHJlY29tbWVuZGVkIHZlcnNpb25zIG9mCi1UY2wvVGsgZm9yIHRoaXMgdmVyc2lvbiBvZiBQeXRob24gYW5kIG9mIE1hYyBPUyBYLgotCi0KLVVzaW5nIHRoaXMgdmVyc2lvbiBvZiBQeXRob24gb24gT1MgWAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVB5dGhvbiBjb25zaXN0cyBvZiB0aGUgUHl0aG9uIHByb2dyYW1taW5nIGxhbmd1YWdlIGludGVycHJldGVyLCBwbHVzCi1hIHNldCBvZiBwcm9ncmFtcyB0byBhbGxvdyBlYXN5IGFjY2VzcyB0byBpdCBmb3IgTWFjIHVzZXJzIGluY2x1ZGluZwotYW4gaW50ZWdyYXRlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudCwgSURMRSwgcGx1cyBhIHNldCBvZiBwcmUtYnVpbHQKLWV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvCi1QeXRob24gcHJvZ3JhbXMuCi0KLVRoZSBpbnN0YWxsZXIgcHV0cyBhcHBsaWNhdGlvbnMsIGFuICJVcGRhdGUgU2hlbGwgUHJvZmlsZSIgY29tbWFuZCwKLWFuZCBhIGxpbmsgdG8gdGhlIG9wdGlvbmFsbHkgaW5zdGFsbGVkIFB5dGhvbiBEb2N1bWVudGF0aW9uIGludG8gdGhlCi0iUHl0aG9uICRWRVJTSU9OIiBzdWJmb2xkZXIgb2YgdGhlIHN5c3RlbSBBcHBsaWNhdGlvbnMgZm9sZGVyLAotYW5kIHB1dHMgdGhlIHVuZGVybHlpbmcgbWFjaGluZXJ5IGludG8gdGhlIGZvbGRlcgotJFBZVEhPTkZSQU1FV09SS0lOU1RBTExESVIuIEl0IGNhbgotb3B0aW9uYWxseSBwbGFjZSBsaW5rcyB0byB0aGUgY29tbWFuZC1saW5lIHRvb2xzIGluIC91c3IvbG9jYWwvYmluIGFzCi13ZWxsLiBEb3VibGUtY2xpY2sgb24gdGhlICJVcGRhdGUgU2hlbGwgUHJvZmlsZSIgY29tbWFuZCB0byBhZGQgdGhlCi0iYmluIiBkaXJlY3RvcnkgaW5zaWRlIHRoZSBmcmFtZXdvcmsgdG8geW91ciBzaGVsbCdzIHNlYXJjaCBwYXRoLgotCi1Zb3UgbXVzdCBpbnN0YWxsIG9udG8geW91ciBjdXJyZW50IGJvb3QgZGlzaywgZXZlbiB0aG91Z2ggdGhlCi1pbnN0YWxsZXIgbWF5IG5vdCBlbmZvcmNlIHRoaXMsIG90aGVyd2lzZSB0aGluZ3Mgd2lsbCBub3Qgd29yay4KLQotWW91IGNhbiB2ZXJpZnkgdGhlIGludGVncml0eSBvZiB0aGUgZGlzayBpbWFnZSBmaWxlIGNvbnRhaW5pbmcgdGhlCi1pbnN0YWxsZXIgcGFja2FnZSBhbmQgdGhpcyBSZWFkTWUgZmlsZSBieSBjb21wYXJpbmcgaXRzIG1kNSBjaGVja3N1bQotYW5kIHNpemUgd2l0aCB0aGUgdmFsdWVzIHB1Ymxpc2hlZCBvbiB0aGUgcmVsZWFzZSBwYWdlIGxpbmtlZCBhdAotaHR0cDovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkLwotCi1JbnN0YWxsYXRpb24gcmVxdWlyZXMgYXBwcm94aW1hdGVseSAkSU5TVEFMTF9TSVpFIE1CIG9mIGRpc2sgc3BhY2UsCi1pZ25vcmUgdGhlIG1lc3NhZ2UgdGhhdCBpdCB3aWxsIHRha2UgemVybyBieXRlcy4KLQotTW9yZSBpbmZvcm1hdGlvbiBvbiBQeXRob24gaW4gZ2VuZXJhbCBjYW4gYmUgZm91bmQgYXQKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy4KZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYgYi9NYWMvQnVpbGRTY3JpcHQvcmVzb3VyY2VzL1dlbGNvbWUucnRmCmluZGV4IDIzOWQ3NmUuLjI1Mjc3ODcgMTAwNjQ0Ci0tLSBhL01hYy9CdWlsZFNjcmlwdC9yZXNvdXJjZXMvV2VsY29tZS5ydGYKKysrIGIvTWFjL0J1aWxkU2NyaXB0L3Jlc291cmNlcy9XZWxjb21lLnJ0ZgpAQCAtMSw3ICsxLDcgQEAKLXtccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGNvY29hcnRmMTE4N1xjb2NvYXN1YnJ0ZjQwMAotXGNvY29hc2NyZWVuZm9udHMxe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO30KK3tccnRmMVxhbnNpXGFuc2ljcGcxMjUyXGNvY29hcnRmMTM0M1xjb2NvYXN1YnJ0ZjE2MAorXGNvY29hc2NyZWVuZm9udHMxe1xmb250dGJsXGYwXGZzd2lzc1xmY2hhcnNldDAgSGVsdmV0aWNhO1xmMVxmbW9kZXJuXGZjaGFyc2V0MCBDb3VyaWVyTmV3UFNNVDt9CiB7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTt9Ci1ccGFwZXJ3MTE5MDVccGFwZXJoMTY4MzdcbWFyZ2wxNDQwXG1hcmdyMTQ0MFx2aWV3dzk2NDBcdmlld2gxMDYyMFx2aWV3a2luZDAKK1xwYXBlcncxMTkwNVxwYXBlcmgxNjgzN1xtYXJnbDE0NDBcbWFyZ3IxNDQwXHZpZXd3MTIyMDBcdmlld2gxMDg4MFx2aWV3a2luZDAKIFxwYXJkXHR4NzIwXHR4MTQ0MFx0eDIxNjBcdHgyODgwXHR4MzYwMFx0eDQzMjBcdHg1MDQwXHR4NTc2MFx0eDY0ODBcdHg3MjAwXHR4NzkyMFx0eDg2NDAKIAogXGYwXGZzMjQgXGNmMCBUaGlzIHBhY2thZ2Ugd2lsbCBpbnN0YWxsIApAQCAtMTQsMTUgKzE0LDEzIEBACiBcYiBQeXRob24gZm9yIE1hYyBPUyBYCiBcYjAgIGNvbnNpc3RzIG9mIHRoZSBQeXRob24gcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UgaW50ZXJwcmV0ZXIsIHBsdXMgYSBzZXQgb2YgcHJvZ3JhbXMgdG8gYWxsb3cgZWFzeSBhY2Nlc3MgdG8gaXQgZm9yIE1hYyBPUyBYIHVzZXJzIGluY2x1ZGluZyBhbiBpbnRlZ3JhdGVkIGRldmVsb3BtZW50IGVudmlyb25tZW50IAogXGIgSURMRQotXGIwICBhbmQgYSBzZXQgb2YgcHJlLWJ1aWx0IGV4dGVuc2lvbiBtb2R1bGVzIHRoYXQgb3BlbiB1cCBzcGVjaWZpYyBNYWNpbnRvc2ggdGVjaG5vbG9naWVzIHRvIFB5dGhvbiBwcm9ncmFtcy5cCi1cCi1TZWUgdGhlIFJlYWRNZSBmaWxlIGFuZCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXAorXGIwIC5cCiBcCiAKLVxiIE5PVEU6IAotXGIwIFRoaXMgcGFja2FnZSB3aWxsIG5vdCB1cGRhdGUgeW91ciBzaGVsbCBwcm9maWxlIGJ5IGRlZmF1bHQuICBEb3VibGUtY2xpY2sgCi1cYiBVcGRhdGUgU2hlbGwgUHJvZmlsZQotXGIwICBhdCBhbnkgdGltZSB0byBtYWtlICRGVUxMX1ZFUlNJT04gdGhlIGRlZmF1bHQgUHl0aG9uIDMgdmVyc2lvbi4gIFRoaXMgdmVyc2lvbiBjYW4gY28tZXhpc3Qgd2l0aCBvdGhlciBpbnN0YWxsZWQgdmVyc2lvbnMgb2YgUHl0aG9uIDMgYW5kIFB5dGhvbiAyLlwKK1xiIE5FVyBmb3IgUHl0aG9uIDMuNC4zOiAKK1xiMCAgMy40LjMgaW5jbHVkZXMgbmV0d29yayBzZWN1cml0eSBlbmhhbmNlbWVudHMgdGhhdCBtYXkgcmVxdWlyZSBjaGFuZ2VzIHRvIHlvdXIgUHl0aG9uIGFwcGxpY2F0aW9ucy4gIFNlZSB0aGUgCitcZjEgUmVhZE1lCitcZjAgIGZpbGUgYW5kIHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHBzOi8vZG9jcy5weXRob24ub3JnLzMvd2hhdHNuZXcvMy40Lmh0bWwjY2hhbmdlZC1pbi0zLTQtMyJ9fXtcZmxkcnNsdCB0aGUgUHl0aG9uIGRvY3VtZW50YXRpb259fSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cCiBcCiAKIFxiIElNUE9SVEFOVDoKQEAgLTMyLDQgKzMwLDQgQEAKIFxiIHRraW50ZXIKIFxiMCAgZ3JhcGhpY2FsIHVzZXIgaW50ZXJmYWNlIHRvb2xraXQgcmVxdWlyZSBzcGVjaWZpYyB2ZXJzaW9ucyBvZiB0aGUgCiBcYiBUY2wvVGsKLVxiMCAgcGxhdGZvcm0gaW5kZXBlbmRlbnQgd2luZG93aW5nIHRvb2xraXQuICBWaXNpdCB7XGZpZWxke1wqXGZsZGluc3R7SFlQRVJMSU5LICJodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLyJ9fXtcZmxkcnNsdCBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrL319IGZvciBjdXJyZW50IGluZm9ybWF0aW9uIG9uIHN1cHBvcnRlZCBhbmQgcmVjb21tZW5kZWQgdmVyc2lvbnMgb2YgVGNsL1RrIGZvciB0aGlzIHZlcnNpb24gb2YgUHl0aG9uIGFuZCBNYWMgT1MgWC59ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorXGIwICBwbGF0Zm9ybSBpbmRlcGVuZGVudCB3aW5kb3dpbmcgdG9vbGtpdC4gIFZpc2l0IHtcZmllbGR7XCpcZmxkaW5zdHtIWVBFUkxJTksgImh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvbWFjL3RjbHRrLyJ9fXtcZmxkcnNsdCBodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2FkL21hYy90Y2x0ay99fSBmb3IgY3VycmVudCBpbmZvcm1hdGlvbiBvbiBzdXBwb3J0ZWQgYW5kIHJlY29tbWVuZGVkIHZlcnNpb25zIG9mIFRjbC9UayBmb3IgdGhpcyB2ZXJzaW9uIG9mIFB5dGhvbiBhbmQgTWFjIE9TIFgufQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwIGIvTWFjL0J1aWxkU2NyaXB0L3NjcmlwdHMvcG9zdGZsaWdodC5lbnN1cmVwaXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYmY4OTNkMQotLS0gL2Rldi9udWxsCisrKyBiL01hYy9CdWlsZFNjcmlwdC9zY3JpcHRzL3Bvc3RmbGlnaHQuZW5zdXJlcGlwCkBAIC0wLDAgKzEsNjkgQEAKKyMhL2Jpbi9zaAorIworIyBJbnN0YWxsL3VwZ3JhZGUgcGlwLgorIworCitQWVZFUj0iQFBZVkVSQCIKK1BZTUFKT1I9IkBQWU1BSk9SQCIKK0ZXSz0iL0xpYnJhcnkvRnJhbWV3b3Jrcy9QeXRob24uZnJhbWV3b3JrL1ZlcnNpb25zLyR7UFlWRVJ9IgorUkVMRldLQklOPSIuLi8uLi8uLiR7RldLfS9iaW4iCisKK3VtYXNrIDAyMgorCisiJHtGV0t9L2Jpbi9weXRob24ke1BZVkVSfSIgLW0gZW5zdXJlcGlwIC0tdXBncmFkZQorCisiJHtGV0t9L2Jpbi9weXRob24ke1BZVkVSfSIgLVdpIFwKKyAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9jb21waWxlYWxsLnB5IiBcCisgICAgLWYgLXggYmFkc3ludGF4IFwKKyAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9zaXRlLXBhY2thZ2VzIgorCisiJHtGV0t9L2Jpbi9weXRob24ke1BZVkVSfSIgLVdpIC1PIFwKKyAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9jb21waWxlYWxsLnB5IiBcCisgICAgLWYgLXggYmFkc3ludGF4IFwKKyAgICAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9zaXRlLXBhY2thZ2VzIgorCitjaGdycCAtUiBhZG1pbiAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9zaXRlLXBhY2thZ2VzIiAiJHtGV0t9L2JpbiIKK2NobW9kIC1SIGcrdyAiJHtGV0t9L2xpYi9weXRob24ke1BZVkVSfS9zaXRlLXBhY2thZ2VzIiAiJHtGV0t9L2JpbiIKKworIyBXZSBkbyBub3Qga25vdyBpZiB0aGUgdXNlciBzZWxlY3RlZCB0aGUgUHl0aG9uIGNvbW1hbmQtbGluZSB0b29scworIyBwYWNrYWdlIHRoYXQgaW5zdGFsbHMgc3ltbGlua3MgdG8gL3Vzci9sb2NhbC9iaW4uICBTbyB3ZSBhc3N1bWUKKyMgdGhhdCB0aGUgY29tbWFuZC1saW5lIHRvb2xzIHBhY2thZ2UgaGFzIGFscmVhZHkgY29tcGxldGVkIG9yIHdhcworIyBub3Qgc2VsZWN0ZWQgYW5kIHdlIHdpbGwgb25seSBpbnN0YWxsIC91c3IvbG9jYWwvYmluIHN5bWxpbmtzIGZvcgorIyBwaXAgZXQgYWwgaWYgdGhlcmUgYXJlIC91c3IvbG9jYWwvYmluL3B5dGhvbiogc3ltbGlua3MgdG8gb3VyCisjIGZyYW1ld29yayBiaW4gZGlyZWN0b3J5LgorCitpZiBbIC1kIC91c3IvbG9jYWwvYmluIF0gOyB0aGVuCisgICAgKAorICAgICAgICBpbnN0YWxsX2xpbmtzX2lmX291cl9mdygpIHsKKyAgICAgICAgICAgIGlmIFsgIiQocmVhZGxpbmsgLW4gLi8kMSkiID0gIiR7UkVMRldLQklOfS8kMSIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgIGZvciBmbiA7CisgICAgICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgWyAtZSAiJHtSRUxGV0tCSU59LyR7Zm59IiBdIDsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgcm0gLWYgLi8ke2ZufQorICAgICAgICAgICAgICAgICAgICAgICAgbG4gLXMgIiR7UkVMRldLQklOfS8ke2ZufSIgIi4vJHtmbn0iCisgICAgICAgICAgICAgICAgICAgICAgICBjaGdycCAtaCBhZG1pbiAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNobW9kIC1oIGcrdyAiLi8ke2ZufSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBmaQorICAgICAgICB9CisKKyAgICAgICAgY2QgL3Vzci9sb2NhbC9iaW4KKworICAgICAgICAjIENyZWF0ZSBwaXB4LnkgYW5kIGVhc3lfaW5zdGFsbC14LnkgbGlua3MgaWYgL3Vzci9sb2NhbC9iaW4vcHl0aG9ueC55CisgICAgICAgICMgICBpcyBsaW5rZWQgdG8gdGhpcyBmcmFtZXdvcmsgdmVyc2lvbgorICAgICAgICBpbnN0YWxsX2xpbmtzX2lmX291cl9mdyAicHl0aG9uJHtQWVZFUn0iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXAke1BZVkVSfSIgImVhc3lfaW5zdGFsbC0ke1BZVkVSfSIKKworICAgICAgICAjIENyZWF0ZSBwaXB4IGxpbmsgaWYgL3Vzci9sb2NhbC9iaW4vcHl0aG9ueCBpcyBsaW5rZWQgdG8gdGhpcyB2ZXJzaW9uCisgICAgICAgIGluc3RhbGxfbGlua3NfaWZfb3VyX2Z3ICJweXRob24ke1BZTUFKT1J9IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlwJHtQWU1BSk9SfSIKKworICAgICAgICAjIENyZWF0ZSBwaXAgYW5kIGVhc3lfaW5zdGFsbCBsaW5rIGlmIC91c3IvbG9jYWwvYmluL3B5dGhvbgorICAgICAgICAjICAgaXMgbGlua2VkIHRvIHRoaXMgdmVyc2lvbgorICAgICAgICBpbnN0YWxsX2xpbmtzX2lmX291cl9mdyAicHl0aG9uIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGlwIiAiZWFzeV9pbnN0YWxsIgorICAgICkKK2ZpCitleGl0IDAKZGlmZiAtLWdpdCBhL01hYy9JRExFL0lETEUuYXBwL0NvbnRlbnRzL0luZm8ucGxpc3QgYi9NYWMvSURMRS9JRExFLmFwcC9Db250ZW50cy9JbmZvLnBsaXN0CmluZGV4IGQwMjU3YmEuLmY3YzNiMzUgMTAwNjQ0Ci0tLSBhL01hYy9JRExFL0lETEUuYXBwL0NvbnRlbnRzL0luZm8ucGxpc3QKKysrIGIvTWFjL0lETEUvSURMRS5hcHAvQ29udGVudHMvSW5mby5wbGlzdApAQCAtMzYsNyArMzYsNyBAQAogCTxrZXk+Q0ZCdW5kbGVFeGVjdXRhYmxlPC9rZXk+CiAJPHN0cmluZz5JRExFPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUdldEluZm9TdHJpbmc8L2tleT4KLQk8c3RyaW5nPiV2ZXJzaW9uJSwgwqkgMjAwMS0yMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9zdHJpbmc+CisJPHN0cmluZz4ldmVyc2lvbiUsIMKpIDIwMDEtMjAxNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVJY29uRmlsZTwva2V5PgogCTxzdHJpbmc+SURMRS5pY25zPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KZGlmZiAtLWdpdCBhL01hYy9NYWtlZmlsZS5pbiBiL01hYy9NYWtlZmlsZS5pbgppbmRleCA1Y2I2NjRkLi4wM2VjNzM4IDEwMDY0NAotLS0gYS9NYWMvTWFrZWZpbGUuaW4KKysrIGIvTWFjL01ha2VmaWxlLmluCkBAIC0zLDkgKzMsMTMgQEAKICMgY29tbWFuZGxpbmUgaW4gdGhhdCBjYXNlLgogCiBWRVJTSU9OPUBWRVJTSU9OQAorQUJJRkxBR1M9QEFCSUZMQUdTQAorTERWRVJTSU9OPUBMRFZFUlNJT05ACitFTlNVUkVQSVA9QEVOU1VSRVBJUEAKIGJ1aWxkZGlyID0gLi4KIHNyY2Rpcj1Ac3JjZGlyQAogcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACiBMSUJERVNUPSQocHJlZml4KS9saWIvcHl0aG9uJChWRVJTSU9OKQogUlVOU0hBUkVEPUBSVU5TSEFSRURACiBCVUlMREVYRT1AQlVJTERFWEVFWFRACkBAIC0yMyw3ICsyNyw3IEBACiAKIAogIyBUaGVzZSBhcmUgbm9ybWFsbHkgZ2xpbXBzZWQgZnJvbSB0aGUgcHJldmlvdXMgc2V0Ci1iaW5kaXI9JChwcmVmaXgpL2JpbgorQklORElSPQkJQGJpbmRpckAKIFBZVEhPTkFQUFNESVI9QEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYQC8kKFBZVEhPTkZSQU1FV09SSykgJChWRVJTSU9OKQogQVBQSU5TVEFMTERJUj0kKHByZWZpeCkvUmVzb3VyY2VzL1B5dGhvbi5hcHAKIApAQCAtNDYsMTkgKzUwLDcgQEAKIEFQUFNVQkRJUlM9TWFjT1MgUmVzb3VyY2VzCiBjb21waWxlYWxsPSQoc3JjZGlyKS8uLi9MaWIvY29tcGlsZWFsbC5weQogCi1pbnN0YWxsYXBwczogaW5zdGFsbF9QeXRob24gaW5zdGFsbF9weXRob253IGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgaW5zdGFsbF9JRExFCi0KLWluc3RhbGxfcHl0aG9udzogcHl0aG9udwotCSQoSU5TVEFMTF9QUk9HUkFNKSAkKFNUUklQRkxBRykgcHl0aG9udyAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTikiCi0JJChJTlNUQUxMX1BST0dSQU0pICQoU1RSSVBGTEFHKSBweXRob253ICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24kKFZFUlNJT04pIgotCWxuIC1zZiBweXRob24kKFZFUlNJT04pICIkKERFU1RESVIpJChwcmVmaXgpL2Jpbi9weXRob24zIgotCWxuIC1zZiBweXRob253JChWRVJTSU9OKSAiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udzMiCi1pZm5lcSAoJChMSVBPXzMyQklUX0ZMQUdTKSwpCi0JbGlwbyAkKExJUE9fMzJCSVRfRkxBR1MpIC1vdXRwdXQgJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9uJChWRVJTSU9OKS0zMiBweXRob253Ci0JbGlwbyAkKExJUE9fMzJCSVRfRkxBR1MpIC1vdXRwdXQgJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udyQoVkVSU0lPTiktMzIgcHl0aG9udwotCWxuIC1zZiBweXRob253JChWRVJTSU9OKS0zMgkiJChERVNURElSKSQocHJlZml4KS9iaW4vcHl0aG9udzMtMzIiCi0JbG4gLXNmIHB5dGhvbiQoVkVSU0lPTiktMzIJIiQoREVTVERJUikkKHByZWZpeCkvYmluL3B5dGhvbjMtMzIiCi1lbmRpZgoraW5zdGFsbGFwcHM6IGluc3RhbGxfUHl0aG9uIGluc3RhbGxfUHl0aG9uTGF1bmNoZXIgaW5zdGFsbF9JRExFCiAKICMKICMgSW5zdGFsbCB1bml4IHRvb2xzIGluIC91c3IvbG9jYWwvYmluLiBUaGVzZSBhcmUganVzdCBhbGlhc2VzIGZvciB0aGUgCkBAIC02OCwyMSArNjAsNDkgQEAKIAlpZiBbICEgLWQgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiBdOyB0aGVuICBcCiAJCSQoSU5TVEFMTCkgLWQgLW0gJChESVJNT0RFKSAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIDtcCiAJZmkKLQlmb3IgZm4gaW4gcHl0aG9uMyBweXRob253MyBpZGxlMyBweWRvYzMgcHl0aG9uMy1jb25maWcgXAotCQkgIHB5dGhvbiQoVkVSU0lPTikgcHl0aG9udyQoVkVSU0lPTikgaWRsZSQoVkVSU0lPTikgXAotCQkgIHB5ZG9jJChWRVJTSU9OKSBweXRob24kKFZFUlNJT04pLWNvbmZpZyAydG8zIFwKLQkJICAydG8zLSQoVkVSU0lPTikgcHl2ZW52IHB5dmVudi0kKFZFUlNJT04pIDtcCisJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJZm9yIGZuIGluIFwKKwkJCTJ0bzMgXAorCQkJaWRsZTMgXAorCQkJcHlkb2MzIFwKKwkJCXB5dGhvbjMgXAorCQkJcHl0aG9uMy1jb25maWcgXAorCQkJcHl2ZW52IFwKKwkJCTsgXAogCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKKwkJcm0gLWYgJCR7Zm59IDsgXAorCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAogCWRvbmUKLWlmbmVxICgkKExJUE9fMzJCSVRfRkxBR1MpLCkKLQlmb3IgZm4gaW4gcHl0aG9uMy0zMiBweXRob253My0zMiBcCi0JCSAgcHl0aG9uJChWRVJTSU9OKS0zMiBweXRob253JChWRVJTSU9OKS0zMiA7XAotCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKLQlkb25lCi1lbmRpZgotCisJLWlmIHRlc3QgIngkKFZFUlNJT04pIiAhPSAieCQoTERWRVJTSU9OKSI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24kKFZFUlNJT04pLWNvbmZpZyBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKExJUE9fMzJCSVRfRkxBR1MpIiAhPSAieCI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24zLTMyIFwKKwkJCQk7IFwKKwkJZG8gXAorCQkJcm0gLWYgJCR7Zm59IDtcCisJCQkkKExOKSAtcyAkKEJJTkRJUikvJCR7Zm59ICQke2ZufSA7XAorCQlkb25lIDtcCisJZmkKKwktaWYgdGVzdCAieCQoRU5TVVJFUElQKSIgIT0gInhubyIgIDsgdGhlbiBcCisJCWNkICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgJiYgXAorCQlmb3IgZm4gaW4gXAorCQkJCXBpcDMgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQogCiAjCiAjIExpa2UgaW5zdGFsbHVuaXh0b29scywgYnV0IG9ubHkgaW5zdGFsbCBsaW5rcyB0byB0aGUgdmVyc2lvbmVkIGJpbmFyaWVzLgpAQCAtOTEsMjAgKzExMSw1NSBAQAogCWlmIFsgISAtZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iIF07IHRoZW4gIFwKIAkJJChJTlNUQUxMKSAtZCAtbSAkKERJUk1PREUpICIkKERFU1RESVIpJChGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgpL2JpbiIgO1wKIAlmaQotCWZvciBmbiBpbiBweXRob24kKFZFUlNJT04pIHB5dGhvbnckKFZFUlNJT04pIGlkbGUkKFZFUlNJT04pIFwKLQkJICBweWRvYyQoVkVSU0lPTikgcHl0aG9uJChWRVJTSU9OKS1jb25maWcgMnRvMy0kKFZFUlNJT04pIHB5dmVudi0kKFZFUlNJT04pIDtcCisJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJZm9yIGZuIGluIFwKKwkJCTJ0bzMtJChWRVJTSU9OKSBcCisJCQlpZGxlJChWRVJTSU9OKSBcCisJCQlweWRvYyQoVkVSU0lPTikgXAorCQkJcHl0aG9uJChWRVJTSU9OKSBcCisJCQlweXRob24kKExEVkVSU0lPTiktY29uZmlnIFwKKwkJCXB5dmVudi0kKFZFUlNJT04pIFwKKwkJCTsgXAogCWRvIFwKLQkJbG4gLWZzICIkKHByZWZpeCkvYmluLyQke2ZufSIgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluLyQke2ZufSIgO1wKKwkJcm0gLWYgJCR7Zm59IDtcCisJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCiAJZG9uZQotaWZuZXEgKCQoTElQT18zMkJJVF9GTEFHUyksKQotCWZvciBmbiBpbiBweXRob24kKFZFUlNJT04pLTMyIHB5dGhvbnckKFZFUlNJT04pLTMyIDtcCi0JZG8gXAotCQlsbiAtZnMgIiQocHJlZml4KS9iaW4vJCR7Zm59IiAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4vJCR7Zm59IiA7XAotCWRvbmUKLWVuZGlmCisJLWlmIHRlc3QgIngkKFZFUlNJT04pIiAhPSAieCQoTERWRVJTSU9OKSI7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQlweXRob24kKExEVkVSU0lPTikgXAorCQkJCTsgXAorCQlkbyBcCisJCQlybSAtZiAkJHtmbn0gO1wKKwkJCSQoTE4pIC1zICQoQklORElSKS8kJHtmbn0gJCR7Zm59IDtcCisJCWRvbmUgO1wKKwlmaQorCS1pZiB0ZXN0ICJ4JChMSVBPXzMyQklUX0ZMQUdTKSIgIT0gIngiOyB0aGVuIFwKKwkJY2QgIiQoREVTVERJUikkKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkvYmluIiAmJiBcCisJCWZvciBmbiBpbiBcCisJCQkJcHl0aG9uJChWRVJTSU9OKS0zMiBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCisJLWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljZCAiJChERVNURElSKSQoRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYKS9iaW4iICYmIFwKKwkJZm9yIGZuIGluIFwKKwkJCQllYXN5X2luc3RhbGwtJChWRVJTSU9OKSBcCisJCQkJcGlwJChWRVJTSU9OKSBcCisJCQkJOyBcCisJCWRvIFwKKwkJCXJtIC1mICQke2ZufSA7XAorCQkJJChMTikgLXMgJChCSU5ESVIpLyQke2ZufSAkJHtmbn0gO1wKKwkJZG9uZSA7XAorCWZpCiAKIHB5dGhvbnc6ICQoc3JjZGlyKS9Ub29scy9weXRob253LmMgTWFrZWZpbGUKLQkkKENDKSAkKExERkxBR1MpIC1EUFlUSE9ORlJBTUVXT1JLPSciJChQWVRIT05GUkFNRVdPUkspIicgLW8gJEAgJChzcmNkaXIpL1Rvb2xzL3B5dGhvbncuYyAtSS4uIC1JJChzcmNkaXIpLy4uL0luY2x1ZGUgLi4vJChQWVRIT05GUkFNRVdPUkspLmZyYW1ld29yay9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKQorCSQoQ0MpICQoTERGTEFHUykgLURQWVRIT05GUkFNRVdPUks9JyIkKFBZVEhPTkZSQU1FV09SSykiJyAtbyAkQCBcCisJCSQoc3JjZGlyKS9Ub29scy9weXRob253LmMgLUkuLiAtSSQoc3JjZGlyKS8uLi9JbmNsdWRlIFwKKwkJLi4vJChQWVRIT05GUkFNRVdPUkspLmZyYW1ld29yay9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKQogCiBpbnN0YWxsX1B5dGhvbkxhdW5jaGVyOgogCWNkIFB5dGhvbkxhdW5jaGVyICYmIG1ha2UgaW5zdGFsbCBERVNURElSPSQoREVTVERJUikKZGlmZiAtLWdpdCBhL01hYy9QeXRob25MYXVuY2hlci9JbmZvLnBsaXN0LmluIGIvTWFjL1B5dGhvbkxhdW5jaGVyL0luZm8ucGxpc3QuaW4KaW5kZXggMGE1YTQzOS4uNmM0YmZlOCAxMDA2NDQKLS0tIGEvTWFjL1B5dGhvbkxhdW5jaGVyL0luZm8ucGxpc3QuaW4KKysrIGIvTWFjL1B5dGhvbkxhdW5jaGVyL0luZm8ucGxpc3QuaW4KQEAgLTQwLDcgKzQwLDcgQEAKIAk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PgogCTxzdHJpbmc+UHl0aG9uTGF1bmNoZXI8L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlR2V0SW5mb1N0cmluZzwva2V5PgotCTxzdHJpbmc+JVZFUlNJT04lLCDCqSAyMDAxLTIwMTQgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb248L3N0cmluZz4KKwk8c3RyaW5nPiVWRVJTSU9OJSwgwqkgMjAwMS0yMDE2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUljb25GaWxlPC9rZXk+CiAJPHN0cmluZz5QeXRob25MYXVuY2hlci5pY25zPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUlkZW50aWZpZXI8L2tleT4KZGlmZiAtLWdpdCBhL01hYy9QeXRob25MYXVuY2hlci9NYWtlZmlsZS5pbiBiL01hYy9QeXRob25MYXVuY2hlci9NYWtlZmlsZS5pbgppbmRleCA5NzBiODNmLi5mMDVlZmRmIDEwMDY0NAotLS0gYS9NYWMvUHl0aG9uTGF1bmNoZXIvTWFrZWZpbGUuaW4KKysrIGIvTWFjL1B5dGhvbkxhdW5jaGVyL01ha2VmaWxlLmluCkBAIC01Myw4ICs1Myw2IEBACiAJCS0tcmVzb3VyY2U9JChzcmNkaXIpL2ZhY3RvcnlTZXR0aW5ncy5wbGlzdCBcCiAJCS0tcGxpc3QgSW5mby5wbGlzdCBcCiAJCWJ1aWxkCi0JZmluZCAiUHl0aG9uIExhdW5jaGVyLmFwcCIgLW5hbWUgJy5zdm4nIC1wcmludDAgfCB4YXJncyAtMCBybSAtcgotCQkKIAogRmlsZVNldHRpbmdzLm86ICQoc3JjZGlyKS9GaWxlU2V0dGluZ3MubQogCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCAtYyAkKHNyY2RpcikvRmlsZVNldHRpbmdzLm0KZGlmZiAtLWdpdCBhL01hYy9SRUFETUUgYi9NYWMvUkVBRE1FCmluZGV4IDhkNGViM2IuLjBhMzEzZDEgMTAwNjQ0Ci0tLSBhL01hYy9SRUFETUUKKysrIGIvTWFjL1JFQURNRQpAQCAtNywxMSArNywxNCBAQAogICAgIFJvbmFsZCBPdXNzb3JlbiAoMjAxMC0wNCksCiAgICAgTmVkIERlaWx5ICgyMDEyLTA2KQogCi06VmVyc2lvbjogMy4zLjAKKzpWZXJzaW9uOiAzLjQuMAogCiBUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGEgcXVpY2sgb3ZlcnZpZXcgb2Ygc29tZSBNYWMgT1MgWCBzcGVjaWZpYyBmZWF0dXJlcyBpbgogdGhlIFB5dGhvbiBkaXN0cmlidXRpb24uCiAKK09TIFggc3BlY2lmaWMgYXJndW1lbnRzIHRvIGNvbmZpZ3VyZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKICogYGAtLWVuYWJsZS1mcmFtZXdvcmtbPURJUl1gYAogCiAgIElmIHRoaXMgYXJndW1lbnQgaXMgc3BlY2lmaWVkIHRoZSBidWlsZCB3aWxsIGNyZWF0ZSBhIFB5dGhvbi5mcmFtZXdvcmsgcmF0aGVyCkBAIC0xMDYsNiArMTA5LDggQEAKIAogICAqIGBgaW50ZWxgYDoJICBgYGkzODZgYCwgYGB4ODZfNjRgYAogCisgICogYGBpbnRlbC0zMmBgOiBgYGkzODZgYAorCiAgICogYGAzMi1iaXRgYDogICBgYHBwY2BgLCBgYGkzODZgYAogCiAgICogYGAzLXdheWBgOgkgIGBgaTM4NmBgLCBgYHg4Nl82NGBgLCBgYHBwY2BgCkBAIC0xMTksNyArMTI0LDcgQEAKIG9ubHkgYmUgYnVpbHQgd2l0aCBhbiAxMC41IFNESyBiZWNhdXNlIGBgcHBjNjRgYCBzdXBwb3J0IHdhcyBvbmx5IGluY2x1ZGVkIHdpdGgKIE9TIFggMTAuNS4gIEFsdGhvdWdoIGxlZ2FjeSBgYHBwY2BgIHN1cHBvcnQgd2FzIGluY2x1ZGVkIHdpdGggWGNvZGUgMyBvbiBPUyBYCiAxMC42LCBpdCB3YXMgcmVtb3ZlZCBpbiBYY29kZSA0LCB2ZXJzaW9ucyBvZiB3aGljaCB3ZXJlIHJlbGVhc2VkIG9uIE9TIFggMTAuNgotYW5kIHdoaWNoIGlzIHRoZSBjdXJyZW50IHN0YW5kYXJkIGZvciBPUyBYIDEwLjcgYW5kIDEwLjguICBUbyBzdW1tYXJpemUsIHRoZQorYW5kIHdoaWNoIGlzIHRoZSBzdGFuZGFyZCBmb3IgT1MgWCAxMC43LiAgVG8gc3VtbWFyaXplLCB0aGUKIGZvbGxvd2luZyBjb21iaW5hdGlvbnMgb2YgU0RLcyBhbmQgdW5pdmVyc2FsLWFyY2hzIGZsYXZvcnMgYXJlIGF2YWlsYWJsZToKIAogICAqIDEwLjR1IFNESyB3aXRoIFhjb2RlIDIgc3VwcG9ydHMgYGAzMi1iaXRgYCBvbmx5CkBAIC0xMzIsNyArMTM3LDkgQEAKIAogICAqIDEwLjcgYW5kIDEwLjggU0RLcyB3aXRoIFhjb2RlIDQgc3VwcG9ydCBgYGludGVsYGAgb25seQogCi1UaGUgbWFrZWZpbGUgZm9yIGEgZnJhbWV3b3JrIGJ1aWxkIHdpbGwgYWxzbyBpbnN0YWxsIGBgcHl0aG9uMy4zLTMyYGAKKyAgKiAxMC44IGFuZCAxMC45IFNES3Mgd2l0aCBYY29kZSA1IHN1cHBvcnQgYGBpbnRlbGBgIG9ubHkKKworVGhlIG1ha2VmaWxlIGZvciBhIGZyYW1ld29yayBidWlsZCB3aWxsIGFsc28gaW5zdGFsbCBgYHB5dGhvbjMuNC0zMmBgCiBiaW5hcmllcyB3aGVuIHRoZSB1bml2ZXJzYWwgYXJjaGl0ZWN0dXJlIGluY2x1ZGVzIGF0IGxlYXN0IG9uZSAzMi1iaXQKIGFyY2hpdGVjdHVyZSAodGhhdCBpcywgZm9yIGFsbCBmbGF2b3JzIGJ1dCBgYDY0LWJpdGBgKS4KIApAQCAtMTU2LDEwICsxNjMsOSBAQAogbm90IGF1dG9tYXRpY2FsbHkgY2FycnkgdGhyb3VnaCB0byBzdWJwcm9jZXNzZXMgbGF1bmNoZWQgYnkgcHJvZ3JhbXMgYW5kIHRlc3RzCiB1bmRlciB0aGF0IFB5dGhvbi4gIElmIHlvdSB3YW50IHRvIGVuc3VyZSB0aGF0IFB5dGhvbiBpbnRlcnByZXRlcnMgbGF1bmNoZWQgaW4KIHN1YnByb2Nlc3NlcyBhbHNvIHJ1biBpbiAzMi1iaXQtbW9kZSBpZiB0aGUgbWFpbiBpbnRlcnByZXRlciBkb2VzLCB1c2UKLWEgYGBweXRob24zLjMtMzJgYCBiaW5hcnkgYW5kIHVzZSB0aGUgdmFsdWUgb2YgYGBzeXMuZXhlY3V0YWJsZWBgIGFzIHRoZQorYSBgYHB5dGhvbjMuNC0zMmBgIGJpbmFyeSBhbmQgdXNlIHRoZSB2YWx1ZSBvZiBgYHN5cy5leGVjdXRhYmxlYGAgYXMgdGhlCiBgYHN1YnByb2Nlc3NgYCBgYFBvcGVuYGAgZXhlY3V0YWJsZSB2YWx1ZS4KIAotCiBCdWlsZGluZyBhbmQgdXNpbmcgYSBmcmFtZXdvcmstYmFzZWQgUHl0aG9uIG9uIE1hYyBPUyBYLgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTY5LDE0ICsxNzUsMTQgQEAKIAogVGhlIG1haW4gcmVhc29uIGlzIGJlY2F1c2UgeW91IHdhbnQgdG8gY3JlYXRlIEdVSSBwcm9ncmFtcyBpbiBQeXRob24uIFdpdGggdGhlCiBleGNlcHRpb24gb2YgWDExL1hEYXJ3aW4tYmFzZWQgR1VJIHRvb2xraXRzIGFsbCBHVUkgcHJvZ3JhbXMgbmVlZCB0byBiZSBydW4gCi1mcm9tIGEgTWFjIE9TWCBhcHBsaWNhdGlvbiBidW5kbGUgKCIuYXBwIikuCitmcm9tIGEgTWFjIE9TIFggYXBwbGljYXRpb24gYnVuZGxlICgiLmFwcCIpLgogCiBXaGlsZSBpdCBpcyB0ZWNobmljYWxseSBwb3NzaWJsZSB0byBjcmVhdGUgYSAuYXBwIHdpdGhvdXQgdXNpbmcgZnJhbWV3b3JrcyB5b3UKIHdpbGwgaGF2ZSB0byBkbyB0aGUgd29yayB5b3Vyc2VsZiBpZiB5b3UgcmVhbGx5IHdhbnQgdGhpcy4KIAogQSBzZWNvbmQgcmVhc29uIGZvciB1c2luZyBmcmFtZXdvcmtzIGlzIHRoYXQgdGhleSBwdXQgUHl0aG9uLXJlbGF0ZWQgaXRlbXMgaW4KIG9ubHkgdHdvIHBsYWNlczogIi9MaWJyYXJ5L0ZyYW1ld29yay9QeXRob24uZnJhbWV3b3JrIiBhbmQgCi0iL0FwcGxpY2F0aW9ucy9QeXRob24gPFZFUlNJT04+IiB3aGVyZSBgYDxWRVJTSU9OPmBgIGNhbiBiZSBlLmcuICIzLjMiLAorIi9BcHBsaWNhdGlvbnMvUHl0aG9uIDxWRVJTSU9OPiIgd2hlcmUgYGA8VkVSU0lPTj5gYCBjYW4gYmUgZS5nLiAiMy40IiwKICIyLjciLCBldGMuICBUaGlzIHNpbXBsaWZpZXMgbWF0dGVycyBmb3IgdXNlcnMgaW5zdGFsbGluZwogUHl0aG9uIGZyb20gYSBiaW5hcnkgZGlzdHJpYnV0aW9uIGlmIHRoZXkgd2FudCB0byBnZXQgcmlkIG9mIGl0IGFnYWluLiBNb3Jlb3ZlciwKIGR1ZSB0byB0aGUgd2F5IGZyYW1ld29ya3Mgd29yaywgYSB1c2VyIHdpdGhvdXQgYWRtaW4gcHJpdmlsZWdlcyBjYW4gaW5zdGFsbCBhCkBAIC0xOTQsNyArMjAwLDcgQEAKIDMuIERvIEkgbmVlZCBleHRyYSBwYWNrYWdlcz8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotWWVzLCBwcm9iYWJseS4gIElmIHlvdSB3YW50IFRraW50ZXIgc3VwcG9ydCB5b3UgbmVlZCB0byBnZXQgdGhlIE9TWCBBcXVhVGsgCitZZXMsIHByb2JhYmx5LiAgSWYgeW91IHdhbnQgVGtpbnRlciBzdXBwb3J0IHlvdSBuZWVkIHRvIGdldCB0aGUgT1MgWCBBcXVhVGsKIGRpc3RyaWJ1dGlvbiwgdGhpcyBpcyBpbnN0YWxsZWQgYnkgZGVmYXVsdCBvbiBNYWMgT1MgWCAxMC40IG9yIGxhdGVyLiAgQmUKIGF3YXJlLCB0aG91Z2gsIHRoYXQgdGhlIENvY29hLWJhc2VkIEFxdWFUaydzIHN1cHBsaWVkIHN0YXJ0aW5nIHdpdGggT1MgWAogMTAuNiBoYXZlIHByb3ZlbiB0byBiZSB1bnN0YWJsZS4gIElmIHBvc3NpYmxlLCB5b3Ugc2hvdWxkIGNvbnNpZGVyCkBAIC0yMTAsOSArMjE2LDkgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYSBNYWtlZmlsZSB0aGF0IHdpbGwgY3JlYXRlIGEgY291cGxlIG9mIHB5dGhvbi1yZWxhdGVkCi1hcHBsaWNhdGlvbnMgKGZ1bGwtYmxvd24gT1NYIC5hcHAgYXBwbGljYXRpb25zLCB0aGF0IGlzKSBpbgorYXBwbGljYXRpb25zIChmdWxsLWJsb3duIE9TIFggLmFwcCBhcHBsaWNhdGlvbnMsIHRoYXQgaXMpIGluCiAiL0FwcGxpY2F0aW9ucy9QeXRob24gPFZFUlNJT04+IiwgYW5kIGEgaGlkZGVuIGhlbHBlciBhcHBsaWNhdGlvbiBQeXRob24uYXBwCi1pbnNpZGUgdGhlIFB5dGhvbi5mcmFtZXdvcmssIGFuZCB1bml4IHRvb2xzICJweXRob24iIGFuZCAicHl0aG9udyIgaW50bworaW5zaWRlIHRoZSBQeXRob24uZnJhbWV3b3JrLCBhbmQgdW5peCB0b29scyBpbmNsdWRpbmcgInB5dGhvbiIgaW50bwogL3Vzci9sb2NhbC9iaW4uICBJbiBhZGRpdGlvbiBpdCBoYXMgYSB0YXJnZXQgImluc3RhbGxtYWNzdWJ0cmVlIiB0aGF0IGluc3RhbGxzCiB0aGUgcmVsZXZhbnQgcG9ydGlvbnMgb2YgdGhlIE1hYyBzdWJ0cmVlIGludG8gdGhlIFB5dGhvbi5mcmFtZXdvcmsuCiAKQEAgLTI1MCwxOCArMjU2LDE4IEBACiAiSURMRS5hcHAiIGlzIGFuIGludGVncmF0ZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgZm9yIFB5dGhvbjogZWRpdG9yLAogZGVidWdnZXIsIGV0Yy4KIAotIlB5dGhvbkxhdW5jaGVyLmFwcCIgaXMgYSBoZWxwZXIgYXBwbGljYXRpb24gdGhhdCB3aWxsIGhhbmRsZSB0aGluZ3Mgd2hlbiB5b3UKKyJQeXRob24gTGF1bmNoZXIuYXBwIiBpcyBhIGhlbHBlciBhcHBsaWNhdGlvbiB0aGF0IHdpbGwgaGFuZGxlIHRoaW5ncyB3aGVuIHlvdQogZG91YmxlLWNsaWNrIGEgLnB5LCAucHljIG9yIC5weXcgZmlsZS4gRm9yIHRoZSBmaXJzdCB0d28gaXQgY3JlYXRlcyBhIFRlcm1pbmFsCiB3aW5kb3cgYW5kIHJ1bnMgdGhlIHNjcmlwdHMgd2l0aCB0aGUgbm9ybWFsIGNvbW1hbmQtbGluZSBQeXRob24uIEZvciB0aGUKIGxhdHRlciBpdCBydW5zIHRoZSBzY3JpcHQgaW4gdGhlIFB5dGhvbi5hcHAgaW50ZXJwcmV0ZXIgc28gdGhlIHNjcmlwdCBjYW4gZG8KIEdVSS10aGluZ3MuIEtlZXAgdGhlIGBgT3B0aW9uYGAga2V5IGRlcHJlc3NlZCB3aGlsZSBkcmFnZ2luZyBvciBkb3VibGUtY2xpY2tpbmcKIGEgc2NyaXB0IHRvIHNldCBydW50aW1lIG9wdGlvbnMuIFRoZXNlIG9wdGlvbnMgY2FuIGJlIHNldCBwZXJzaXN0ZW50bHkKLXRocm91Z2ggUHl0aG9uTGF1bmNoZXIncyBwcmVmZXJlbmNlcyBkaWFsb2cuCit0aHJvdWdoIFB5dGhvbiBMYXVuY2hlcidzIHByZWZlcmVuY2VzIGRpYWxvZy4KIAotVGhlIHByb2dyYW0gYGBweXRob254LnhgYCBydW5zIHB5dGhvbiBzY3JpcHRzIGZyb20gdGhlIGNvbW1hbmQgbGluZS4gIFZhcmlvdXMKLWNvbXBhdGliaWxpdHkgYWxpYXNlcyBhcmUgYWxzbyBpbnN0YWxsZWQsIGluY2x1ZGluZyBgYHB5dGhvbnd4LnhgYCB3aGljaAotaW4gZWFybHkgcmVsZWFzZXMgb2YgUHl0aG9uIG9uIE9TIFggd2FzIHJlcXVpcmVkIHRvIHJ1biBHVUkgcHJvZ3JhbXMuICBJbgotY3VycmVudCByZWxlYXNlcywgdGhlIGBgcHl0aG9ueC54YGAgYW5kIGBgcHl0aG9ud3gueGBgIGNvbW1hbmRzIGFyZSBpZGVudGljYWwuCitUaGUgcHJvZ3JhbSBgYHB5dGhvbngueGBgIHJ1bnMgcHl0aG9uIHNjcmlwdHMgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgorUHJldmlvdXNseSwgdmFyaW91cyBjb21wYXRpYmlsaXR5IGFsaWFzZXMgd2VyZSBhbHNvIGluc3RhbGxlZCwgaW5jbHVkaW5nCitgYHB5dGhvbnd4LnhgYCB3aGljaCBpbiBlYXJseSByZWxlYXNlcyBvZiBQeXRob24gb24gT1MgWCB3YXMgcmVxdWlyZWQgdG8gcnVuCitHVUkgcHJvZ3JhbXMuICBBcyBvZiAzLjQuMCwgdGhlIGBgcHl0aG9ud3gueGBgIGFsaWFzZXMgYXJlIG5vIGxvbmdlciBpbnN0YWxsZWQuCiAKIEhvdyBkbyBJIGNyZWF0ZSBhIGJpbmFyeSBkaXN0cmlidXRpb24/CiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzA2LDcgKzMxMiw3IEBACiAgICBjb25maWd1cmU6IFdBUk5JTkc6IGxpYmludGwuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPwogICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbgogICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6ICAgICBzZWN0aW9uICJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWQiCi0gICBjb25maWd1cmU6IFdBUk5JTkc6IGxpYmludGwuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQgICAKKyAgIGNvbmZpZ3VyZTogV0FSTklORzogbGliaW50bC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdAogICAgY29uZmlndXJlOiBXQVJOSU5HOiBsaWJpbnRsLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZQogICAgY29uZmlndXJlOiBXQVJOSU5HOiAgICAgIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKICAgIGNvbmZpZ3VyZTogV0FSTklORzogICAgICMjIFJlcG9ydCB0aGlzIHRvIGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvICMjCmRpZmYgLS1naXQgYS9NYWMvUmVzb3VyY2VzL2FwcC9JbmZvLnBsaXN0LmluIGIvTWFjL1Jlc291cmNlcy9hcHAvSW5mby5wbGlzdC5pbgppbmRleCA5M2IxYzQ0Li5hMGJiOTcxIDEwMDY0NAotLS0gYS9NYWMvUmVzb3VyY2VzL2FwcC9JbmZvLnBsaXN0LmluCisrKyBiL01hYy9SZXNvdXJjZXMvYXBwL0luZm8ucGxpc3QuaW4KQEAgLTIwLDcgKzIwLDcgQEAKIAk8a2V5PkNGQnVuZGxlRXhlY3V0YWJsZTwva2V5PgogCTxzdHJpbmc+UHl0aG9uPC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZUdldEluZm9TdHJpbmc8L2tleT4KLQk8c3RyaW5nPiV2ZXJzaW9uJSwgKGMpIDIwMDQtMjAxNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KKwk8c3RyaW5nPiV2ZXJzaW9uJSwgKGMpIDIwMDEtMjAxNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlSGVscEJvb2tGb2xkZXI8L2tleT4KIAk8YXJyYXk+CiAJCTxzdHJpbmc+RG9jdW1lbnRhdGlvbjwvc3RyaW5nPgpAQCAtMzcsNyArMzcsNyBAQAogCTxrZXk+Q0ZCdW5kbGVJbmZvRGljdGlvbmFyeVZlcnNpb248L2tleT4KIAk8c3RyaW5nPjYuMDwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVMb25nVmVyc2lvblN0cmluZzwva2V5PgotCTxzdHJpbmc+JXZlcnNpb24lLCAoYykgMjAwNC0yMDE0IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgorCTxzdHJpbmc+JXZlcnNpb24lLCAoYykgMjAwMS0yMDE2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uLjwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVOYW1lPC9rZXk+CiAJPHN0cmluZz5QeXRob248L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlUGFja2FnZVR5cGU8L2tleT4KQEAgLTU1LDcgKzU1LDcgQEAKIAk8a2V5Pk5TQXBwbGVTY3JpcHRFbmFibGVkPC9rZXk+CiAJPHRydWUvPgogCTxrZXk+TlNIdW1hblJlYWRhYmxlQ29weXJpZ2h0PC9rZXk+Ci0JPHN0cmluZz4oYykgMjAxNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KKwk8c3RyaW5nPihjKSAyMDAxLTIwMTYgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uPC9zdHJpbmc+CiAJPGtleT5OU0hpZ2hSZXNvbHV0aW9uQ2FwYWJsZTwva2V5PgogCTx0cnVlLz4KIDwvZGljdD4KZGlmZiAtLWdpdCBhL01hYy9SZXNvdXJjZXMvZnJhbWV3b3JrL0luZm8ucGxpc3QuaW4gYi9NYWMvUmVzb3VyY2VzL2ZyYW1ld29yay9JbmZvLnBsaXN0LmluCmluZGV4IDQzYTU3NDAuLmZjYmE3ZDkgMTAwNjQ0Ci0tLSBhL01hYy9SZXNvdXJjZXMvZnJhbWV3b3JrL0luZm8ucGxpc3QuaW4KKysrIGIvTWFjL1Jlc291cmNlcy9mcmFtZXdvcmsvSW5mby5wbGlzdC5pbgpAQCAtMTcsOSArMTcsOSBAQAogCTxrZXk+Q0ZCdW5kbGVQYWNrYWdlVHlwZTwva2V5PgogCTxzdHJpbmc+Rk1XSzwvc3RyaW5nPgogCTxrZXk+Q0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmc8L2tleT4KLQk8c3RyaW5nPiVWRVJTSU9OJSwgKGMpIDIwMDQtMjAxNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KKwk8c3RyaW5nPiVWRVJTSU9OJSwgKGMpIDIwMDEtMjAxNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlTG9uZ1ZlcnNpb25TdHJpbmc8L2tleT4KLQk8c3RyaW5nPiVWRVJTSU9OJSwgKGMpIDIwMDQtMjAxNCBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KKwk8c3RyaW5nPiVWRVJTSU9OJSwgKGMpIDIwMDEtMjAxNiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbi48L3N0cmluZz4KIAk8a2V5PkNGQnVuZGxlU2lnbmF0dXJlPC9rZXk+CiAJPHN0cmluZz4/Pz8/PC9zdHJpbmc+CiAJPGtleT5DRkJ1bmRsZVZlcnNpb248L2tleT4KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjNhY2U0Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotIiIiU3VpdGUgSGVscCBJbmRleGluZyBUb29sIFN1aXRlOiBTcGVjaWFsIGV2ZW50cyB0aGF0IGp1c3QgdGhlIEhlbHAgSW5kZXhpbmcgVG9vbCBzdXBwb3J0cy4KLUxldmVsIDAsIHZlcnNpb24gMAotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdISVQgJwotCi1jbGFzcyBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzOgotCi0gICAgZGVmIHR1cm5fYW5jaG9yX2luZGV4aW5nKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJ0dXJuIGFuY2hvciBpbmRleGluZzogVHVybnMgYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZi4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFx4ZDJvblx4ZDMgb3IgXHhkMm9mZlx4ZDMsIHRvIHR1cm4gYW5jaG9yIGluZGV4aW5nIG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdISVQgJwotICAgICAgICBfc3ViY29kZSA9ICd0QW5jJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF90dXJuX3JlbW90ZV9yb290ID0gewotICAgICAgICAnd2l0aF9yb290X3VybCcgOiAnclVSTCcsCi0gICAgfQotCi0gICAgZGVmIHR1cm5fcmVtb3RlX3Jvb3Qoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInR1cm4gcmVtb3RlIHJvb3Q6IFR1cm4gdXNhZ2Ugb2YgcmVtb3RlIHJvb3QgZm9yIGNvbnRlbnQgb24gdGhlIHdlYiBvbiBvciBvZmYuIElmIHR1cm5pbmcgXHhkMm9uXHhkMywgc3VwcGx5IGEgc3RyaW5nIGFzIHNlY29uZCBwYXJhbWV0ZXIuCi0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiBceGQyb25ceGQzIG9yIFx4ZDJvZmZceGQzLCB0byB0dXJuIHJlbW90ZSByb290IG9uIG9yIG9mZgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcm9vdF91cmw6IFRoZSByZW1vdGUgcm9vdCB0byB1c2UsIGluIHRoZSBmb3JtIG9mIFx4ZDJodHRwOi8vd3d3LmFwcGxlLmNvbS9oZWxwL1x4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3RSZW0nCi0KLSAgICAgICAgYWV0b29scy5rZXlzdWJzdChfYXJndW1lbnRzLCBzZWxmLl9hcmdtYXBfdHVybl9yZW1vdGVfcm9vdCkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgdXNlX3Rva2VuaXplcihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIidXNlIHRva2VuaXplcjogVGVsbHMgdGhlIGluZGV4aW5nIHRvb2wgd2hpY2ggdG9rZW5pemVyIHRvIHVzZS4KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IFNwZWNpZnkgXHhkMkVuZ2xpc2hceGQzLCBceGQyRXVyb3BlYW5ceGQzLCBceGQySmFwYW5lc2VceGQzLCBceGQyS29yZWFuXHhkMywgb3IgXHhkMlNpbXBsZVx4ZDMuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ0hJVCAnCi0gICAgICAgIF9zdWJjb2RlID0gJ3VUb2snCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLQotY2xhc3MgYXBwbGljYXRpb24oYWV0b29scy5Db21wb25lbnRJdGVtKToKLSAgICAiIiJhcHBsaWNhdGlvbiAtIEFwcGxpY2F0aW9uIGNsYXNzICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLWNsYXNzIF9Qcm9wX2lkbGVTdGF0dXMoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImlkbGVTdGF0dXMgLSAgIiIiCi0gICAgd2hpY2ggPSAnc0lkbCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1hcHBsaWNhdGlvbi5fc3VwZXJjbGFzc25hbWVzID0gW10KLWFwcGxpY2F0aW9uLl9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2lkbGVTdGF0dXMnIDogX1Byb3BfaWRsZVN0YXR1cywKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci19Ci0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc0lkbCcgOiBfUHJvcF9pZGxlU3RhdHVzLAotfQotCi1fY29tcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2VudW1kZWNsYXJhdGlvbnMgPSB7Ci19CmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvTWlzY2VsbGFuZW91c19TdGFuZGFyZHMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYxNmFlNzAuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsNDkgKzAsMCBAQAotIiIiU3VpdGUgTWlzY2VsbGFuZW91cyBTdGFuZGFyZHM6IFVzZWZ1bCBldmVudHMgdGhhdCBhcmVuXHhkNXQgaW4gYW55IG90aGVyIHN1aXRlCi1MZXZlbCAwLCB2ZXJzaW9uIDAKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnbWlzYycKLQotY2xhc3MgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzOgotCi0gICAgZGVmIHJldmVydChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIicmV2ZXJ0OiBSZXZlcnQgYW4gb2JqZWN0IHRvIHRoZSBtb3N0IHJlY2VudGx5IHNhdmVkIHZlcnNpb24KLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IG9iamVjdCB0byByZXZlcnQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnbWlzYycKLSAgICAgICAgX3N1YmNvZGUgPSAncnZydCcKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9SZXF1aXJlZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI5ZmVlMC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvUmVxdWlyZWRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0iIiJTdWl0ZSBSZXF1aXJlZCBTdWl0ZTogVGVybXMgdGhhdCBldmVyeSBhcHBsaWNhdGlvbiBzaG91bGQgc3VwcG9ydAotTGV2ZWwgMSwgdmVyc2lvbiAxCi0KLUdlbmVyYXRlZCBmcm9tIC9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAKLUFFVEUvQUVVVCByZXNvdXJjZSB2ZXJzaW9uIDEvMSwgbGFuZ3VhZ2UgMCwgc2NyaXB0IDAKLSIiIgotCi1pbXBvcnQgYWV0b29scwotaW1wb3J0IE1hY09TCi0KLV9jb2RlID0gJ3JlcWQnCi0KLWZyb20gU3RkU3VpdGVzLlJlcXVpcmVkX1N1aXRlIGltcG9ydCAqCi1jbGFzcyBSZXF1aXJlZF9TdWl0ZV9FdmVudHMoUmVxdWlyZWRfU3VpdGVfRXZlbnRzKToKLQotICAgIHBhc3MKLQotCi0jCi0jIEluZGljZXMgb2YgdHlwZXMgZGVjbGFyZWQgaW4gdGhpcyBtb2R1bGUKLSMKLV9jbGFzc2RlY2xhcmF0aW9ucyA9IHsKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLX0KZGlmZiAtLWdpdCBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weSBiL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9TdGFuZGFyZF9TdWl0ZS5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2YwYjYzYS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvU3RhbmRhcmRfU3VpdGUucHkKKysrIC9kZXYvbnVsbApAQCAtMSwzNDMgKzAsMCBAQAotIiIiU3VpdGUgU3RhbmRhcmQgU3VpdGU6IENvbW1vbiB0ZXJtcyBmb3IgbW9zdCBhcHBsaWNhdGlvbnMKLUxldmVsIDEsIHZlcnNpb24gMQotCi1HZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi1BRVRFL0FFVVQgcmVzb3VyY2UgdmVyc2lvbiAxLzEsIGxhbmd1YWdlIDAsIHNjcmlwdCAwCi0iIiIKLQotaW1wb3J0IGFldG9vbHMKLWltcG9ydCBNYWNPUwotCi1fY29kZSA9ICdDb1JlJwotCi1mcm9tIFN0ZFN1aXRlcy5TdGFuZGFyZF9TdWl0ZSBpbXBvcnQgKgotY2xhc3MgU3RhbmRhcmRfU3VpdGVfRXZlbnRzKFN0YW5kYXJkX1N1aXRlX0V2ZW50cyk6Ci0KLSAgICBfYXJnbWFwX2Nsb3NlID0gewotICAgICAgICAnc2F2aW5nJyA6ICdzYXZvJywKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgfQotCi0gICAgZGVmIGNsb3NlKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJjbG9zZTogQ2xvc2UgYW4gb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0cyB0byBjbG9zZQotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHNhdmluZzogc3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IGNoYW5nZXMgc2hvdWxkIGJlIHNhdmVkIGJlZm9yZSBjbG9zaW5nCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgaW5fOiB0aGUgZmlsZSBpbiB3aGljaCB0byBzYXZlIHRoZSBvYmplY3QKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY2xvcycKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9jbG9zZSkKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0gICAgICAgIGFldG9vbHMuZW51bXN1YnN0KF9hcmd1bWVudHMsICdzYXZvJywgX0VudW1fc2F2bykKLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIGRlZiBkYXRhX3NpemUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiImRhdGEgc2l6ZTogUmV0dXJuIHRoZSBzaXplIGluIGJ5dGVzIG9mIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIHNpemUgaXMgdG8gYmUgcmV0dXJuZWQKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICBSZXR1cm5zOiB0aGUgc2l6ZSBvZiB0aGUgb2JqZWN0IGluIGJ5dGVzCi0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdkc2l6JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgZGVmIGdldChzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIiZ2V0OiBHZXQgdGhlIGRhdGEgZm9yIGFuIG9iamVjdAotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogdGhlIG9iamVjdCB3aG9zZSBkYXRhIGlzIHRvIGJlIHJldHVybmVkCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgUmV0dXJuczogVGhlIGRhdGEgZnJvbSB0aGUgb2JqZWN0Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdjb3JlJwotICAgICAgICBfc3ViY29kZSA9ICdnZXRkJwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0gICAgX2FyZ21hcF9tYWtlID0gewotICAgICAgICAnbmV3JyA6ICdrb2NsJywKLSAgICAgICAgJ2F0JyA6ICdpbnNoJywKLSAgICAgICAgJ3dpdGhfZGF0YScgOiAnZGF0YScsCi0gICAgICAgICd3aXRoX3Byb3BlcnRpZXMnIDogJ3ByZHQnLAotICAgIH0KLQotICAgIGRlZiBtYWtlKHNlbGYsIF9ub19vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiIm1ha2U6IE1ha2UgYSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IG5ldzogdGhlIGNsYXNzIG9mIHRoZSBuZXcgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGF0OiB0aGUgbG9jYXRpb24gYXQgd2hpY2ggdG8gaW5zZXJ0IHRoZSBlbGVtZW50Ci0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgd2l0aF9kYXRhOiB0aGUgaW5pdGlhbCBkYXRhIGZvciB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IHdpdGhfcHJvcGVydGllczogdGhlIGluaXRpYWwgdmFsdWVzIGZvciB0aGUgcHJvcGVydGllcyBvZiB0aGUgZWxlbWVudAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgIFJldHVybnM6IE9iamVjdCBzcGVjaWZpZXIgZm9yIHRoZSBuZXcgZWxlbWVudAotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnY3JlbCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9tYWtlKQotICAgICAgICBpZiBfbm9fb2JqZWN0IGlzIG5vdCBOb25lOiByYWlzZSBUeXBlRXJyb3IoJ05vIGRpcmVjdCBhcmcgZXhwZWN0ZWQnKQotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgb3BlbihzZWxmLCBfb2JqZWN0LCBfYXR0cmlidXRlcz17fSwgKipfYXJndW1lbnRzKToKLSAgICAgICAgIiIib3BlbjogT3BlbiB0aGUgc3BlY2lmaWVkIG9iamVjdChzKQotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBvcGVuLiBDYW4gYmUgYSBsaXN0IG9mIGZpbGVzIG9yIGFuIG9iamVjdCBzcGVjaWZpZXIuCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgX2F0dHJpYnV0ZXM6IEFwcGxlRXZlbnQgYXR0cmlidXRlIGRpY3Rpb25hcnkKLSAgICAgICAgIiIiCi0gICAgICAgIF9jb2RlID0gJ2FldnQnCi0gICAgICAgIF9zdWJjb2RlID0gJ29kb2MnCi0KLSAgICAgICAgaWYgX2FyZ3VtZW50czogcmFpc2UgVHlwZUVycm9yKCdObyBvcHRpb25hbCBhcmdzIGV4cGVjdGVkJykKLSAgICAgICAgX2FyZ3VtZW50c1snLS0tLSddID0gX29iamVjdAotCi0KLSAgICAgICAgX3JlcGx5LCBfYXJndW1lbnRzLCBfYXR0cmlidXRlcyA9IHNlbGYuc2VuZChfY29kZSwgX3N1YmNvZGUsCi0gICAgICAgICAgICAgICAgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMpCi0gICAgICAgIGlmIF9hcmd1bWVudHMuZ2V0KCdlcnJuJywgMCk6Ci0gICAgICAgICAgICByYWlzZSBhZXRvb2xzLkVycm9yKGFldG9vbHMuZGVjb2RlZXJyb3IoX2FyZ3VtZW50cykpCi0gICAgICAgICMgWFhYWCBPcHRpb25hbGx5IGRlY29kZSByZXN1bHQKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5oYXNfa2V5KCctLS0tJyk6Ci0gICAgICAgICAgICByZXR1cm4gX2FyZ3VtZW50c1snLS0tLSddCi0KLSAgICBkZWYgcHJpbnRfKHNlbGYsIF9vYmplY3QsIF9hdHRyaWJ1dGVzPXt9LCAqKl9hcmd1bWVudHMpOgotICAgICAgICAiIiJwcmludDogUHJpbnQgdGhlIHNwZWNpZmllZCBvYmplY3QocykKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IE9iamVjdHMgdG8gcHJpbnQuIENhbiBiZSBhIGxpc3Qgb2YgZmlsZXMgb3IgYW4gb2JqZWN0IHNwZWNpZmllci4KLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnYWV2dCcKLSAgICAgICAgX3N1YmNvZGUgPSAncGRvYycKLQotICAgICAgICBpZiBfYXJndW1lbnRzOiByYWlzZSBUeXBlRXJyb3IoJ05vIG9wdGlvbmFsIGFyZ3MgZXhwZWN0ZWQnKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2F2ZSA9IHsKLSAgICAgICAgJ2luXycgOiAna2ZpbCcsCi0gICAgICAgICdhcycgOiAnZmx0cCcsCi0gICAgfQotCi0gICAgZGVmIHNhdmUoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNhdmU6IHNhdmUgYSBzZXQgb2Ygb2JqZWN0cwotICAgICAgICBSZXF1aXJlZCBhcmd1bWVudDogT2JqZWN0cyB0byBzYXZlLgotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IGluXzogdGhlIGZpbGUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgb2JqZWN0KHMpCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgYXM6IHRoZSBmaWxlIHR5cGUgb2YgdGhlIGRvY3VtZW50IGluIHdoaWNoIHRvIHNhdmUgdGhlIGRhdGEKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2F2ZScKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zYXZlKQotICAgICAgICBfYXJndW1lbnRzWyctLS0tJ10gPSBfb2JqZWN0Ci0KLQotICAgICAgICBfcmVwbHksIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzID0gc2VsZi5zZW5kKF9jb2RlLCBfc3ViY29kZSwKLSAgICAgICAgICAgICAgICBfYXJndW1lbnRzLCBfYXR0cmlidXRlcykKLSAgICAgICAgaWYgX2FyZ3VtZW50cy5nZXQoJ2Vycm4nLCAwKToKLSAgICAgICAgICAgIHJhaXNlIGFldG9vbHMuRXJyb3IoYWV0b29scy5kZWNvZGVlcnJvcihfYXJndW1lbnRzKSkKLSAgICAgICAgIyBYWFhYIE9wdGlvbmFsbHkgZGVjb2RlIHJlc3VsdAotICAgICAgICBpZiBfYXJndW1lbnRzLmhhc19rZXkoJy0tLS0nKToKLSAgICAgICAgICAgIHJldHVybiBfYXJndW1lbnRzWyctLS0tJ10KLQotICAgIF9hcmdtYXBfc2V0ID0gewotICAgICAgICAndG8nIDogJ2RhdGEnLAotICAgIH0KLQotICAgIGRlZiBzZXQoc2VsZiwgX29iamVjdCwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNldDogU2V0IGFuIG9iamVjdFx4ZDVzIGRhdGEKLSAgICAgICAgUmVxdWlyZWQgYXJndW1lbnQ6IHRoZSBvYmplY3QgdG8gY2hhbmdlCi0gICAgICAgIEtleXdvcmQgYXJndW1lbnQgdG86IHRoZSBuZXcgdmFsdWUKLSAgICAgICAgS2V5d29yZCBhcmd1bWVudCBfYXR0cmlidXRlczogQXBwbGVFdmVudCBhdHRyaWJ1dGUgZGljdGlvbmFyeQotICAgICAgICAiIiIKLSAgICAgICAgX2NvZGUgPSAnY29yZScKLSAgICAgICAgX3N1YmNvZGUgPSAnc2V0ZCcKLQotICAgICAgICBhZXRvb2xzLmtleXN1YnN0KF9hcmd1bWVudHMsIHNlbGYuX2FyZ21hcF9zZXQpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLWNsYXNzIGFwcGxpY2F0aW9uKGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiYXBwbGljYXRpb24gLSBBbiBhcHBsaWNhdGlvbiBwcm9ncmFtICIiIgotICAgIHdhbnQgPSAnY2FwcCcKLSMgICAgICAgIGVsZW1lbnQgJ2N3aW4nIGFzIFsnaW5keCcsICduYW1lJywgJ3JlbGUnXQotIyAgICAgICAgZWxlbWVudCAnZG9jdScgYXMgWyduYW1lJ10KLQotY2xhc3Mgd2luZG93KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIid2luZG93IC0gQSBXaW5kb3cgIiIiCi0gICAgd2FudCA9ICdjd2luJwotY2xhc3MgX1Byb3BfYm91bmRzKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJib3VuZHMgLSB0aGUgYm91bmRhcnkgcmVjdGFuZ2xlIGZvciB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BibmQnCi0gICAgd2FudCA9ICdxZHJ0JwotY2xhc3MgX1Byb3BfY2xvc2VhYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJjbG9zZWFibGUgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIGNsb3NlIGJveD8gIiIiCi0gICAgd2hpY2ggPSAnaGNsYicKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9mbG9hdGluZyhhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIiZmxvYXRpbmcgLSBEb2VzIHRoZSB3aW5kb3cgZmxvYXQ/ICIiIgotICAgIHdoaWNoID0gJ2lzZmwnCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfaW5kZXgoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiImluZGV4IC0gdGhlIG51bWJlciBvZiB0aGUgd2luZG93ICIiIgotICAgIHdoaWNoID0gJ3BpZHgnCi0gICAgd2FudCA9ICdsb25nJwotY2xhc3MgX1Byb3BfbW9kYWwoYWV0b29scy5OUHJvcGVydHkpOgotICAgICIiIm1vZGFsIC0gSXMgdGhlIHdpbmRvdyBtb2RhbD8gIiIiCi0gICAgd2hpY2ggPSAncG1vZCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF9uYW1lKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJuYW1lIC0gdGhlIHRpdGxlIG9mIHRoZSB3aW5kb3cgIiIiCi0gICAgd2hpY2ggPSAncG5hbScKLSAgICB3YW50ID0gJ2l0eHQnCi1jbGFzcyBfUHJvcF9wb3NpdGlvbihhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicG9zaXRpb24gLSB1cHBlciBsZWZ0IGNvb3JkaW5hdGVzIG9mIHdpbmRvdyAiIiIKLSAgICB3aGljaCA9ICdwcG9zJwotICAgIHdhbnQgPSAnUURwdCcKLWNsYXNzIF9Qcm9wX3Jlc2l6YWJsZShhZXRvb2xzLk5Qcm9wZXJ0eSk6Ci0gICAgIiIicmVzaXphYmxlIC0gSXMgdGhlIHdpbmRvdyByZXNpemFibGU/ICIiIgotICAgIHdoaWNoID0gJ3Byc3onCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3BfdGl0bGVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ0aXRsZWQgLSBEb2VzIHRoZSB3aW5kb3cgaGF2ZSBhIHRpdGxlIGJhcj8gIiIiCi0gICAgd2hpY2ggPSAncHRpdCcKLSAgICB3YW50ID0gJ2Jvb2wnCi1jbGFzcyBfUHJvcF92aXNpYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ2aXNpYmxlIC0gaXMgdGhlIHdpbmRvdyB2aXNpYmxlPyAiIiIKLSAgICB3aGljaCA9ICdwdmlzJwotICAgIHdhbnQgPSAnYm9vbCcKLWNsYXNzIF9Qcm9wX3pvb21hYmxlKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tYWJsZSAtIElzIHRoZSB3aW5kb3cgem9vbWFibGU/ICIiIgotICAgIHdoaWNoID0gJ2lzem0nCi0gICAgd2FudCA9ICdib29sJwotY2xhc3MgX1Byb3Bfem9vbWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJ6b29tZWQgLSBJcyB0aGUgd2luZG93IHpvb21lZD8gIiIiCi0gICAgd2hpY2ggPSAncHp1bScKLSAgICB3YW50ID0gJ2Jvb2wnCi0KLWNsYXNzIGRvY3VtZW50KGFldG9vbHMuQ29tcG9uZW50SXRlbSk6Ci0gICAgIiIiZG9jdW1lbnQgLSBBIERvY3VtZW50ICIiIgotICAgIHdhbnQgPSAnZG9jdScKLWNsYXNzIF9Qcm9wX21vZGlmaWVkKGFldG9vbHMuTlByb3BlcnR5KToKLSAgICAiIiJtb2RpZmllZCAtIEhhcyB0aGUgZG9jdW1lbnQgYmVlbiBtb2RpZmllZCBzaW5jZSB0aGUgbGFzdCBzYXZlPyAiIiIKLSAgICB3aGljaCA9ICdpbW9kJwotICAgIHdhbnQgPSAnYm9vbCcKLWFwcGxpY2F0aW9uLl9zdXBlcmNsYXNzbmFtZXMgPSBbXQotYXBwbGljYXRpb24uX3ByaXZwcm9wZGljdCA9IHsKLX0KLWFwcGxpY2F0aW9uLl9wcml2ZWxlbWRpY3QgPSB7Ci0gICAgJ2RvY3VtZW50JyA6IGRvY3VtZW50LAotICAgICd3aW5kb3cnIDogd2luZG93LAotfQotd2luZG93Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotd2luZG93Ll9wcml2cHJvcGRpY3QgPSB7Ci0gICAgJ2JvdW5kcycgOiBfUHJvcF9ib3VuZHMsCi0gICAgJ2Nsb3NlYWJsZScgOiBfUHJvcF9jbG9zZWFibGUsCi0gICAgJ2Zsb2F0aW5nJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpbmRleCcgOiBfUHJvcF9pbmRleCwKLSAgICAnbW9kYWwnIDogX1Byb3BfbW9kYWwsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLSAgICAncG9zaXRpb24nIDogX1Byb3BfcG9zaXRpb24sCi0gICAgJ3Jlc2l6YWJsZScgOiBfUHJvcF9yZXNpemFibGUsCi0gICAgJ3RpdGxlZCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3Zpc2libGUnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAnem9vbWFibGUnIDogX1Byb3Bfem9vbWFibGUsCi0gICAgJ3pvb21lZCcgOiBfUHJvcF96b29tZWQsCi19Ci13aW5kb3cuX3ByaXZlbGVtZGljdCA9IHsKLX0KLWRvY3VtZW50Ll9zdXBlcmNsYXNzbmFtZXMgPSBbXQotZG9jdW1lbnQuX3ByaXZwcm9wZGljdCA9IHsKLSAgICAnbW9kaWZpZWQnIDogX1Byb3BfbW9kaWZpZWQsCi0gICAgJ25hbWUnIDogX1Byb3BfbmFtZSwKLX0KLWRvY3VtZW50Ll9wcml2ZWxlbWRpY3QgPSB7Ci19Ci1fRW51bV9zYXZvID0gewotICAgICd5ZXMnIDogJ3llcyAnLCAgICAgIyBTYXZlIG9iamVjdHMgbm93Ci0gICAgJ25vJyA6ICdubyAgJywgICAgICAjIERvIG5vdCBzYXZlIG9iamVjdHMKLSAgICAnYXNrJyA6ICdhc2sgJywgICAgICMgQXNrIHRoZSB1c2VyIHdoZXRoZXIgdG8gc2F2ZQotfQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdjd2luJyA6IHdpbmRvdywKLSAgICAnZG9jdScgOiBkb2N1bWVudCwKLX0KLQotX3Byb3BkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2hjbGInIDogX1Byb3BfY2xvc2VhYmxlLAotICAgICdpbW9kJyA6IF9Qcm9wX21vZGlmaWVkLAotICAgICdpc2ZsJyA6IF9Qcm9wX2Zsb2F0aW5nLAotICAgICdpc3ptJyA6IF9Qcm9wX3pvb21hYmxlLAotICAgICdwYm5kJyA6IF9Qcm9wX2JvdW5kcywKLSAgICAncGlkeCcgOiBfUHJvcF9pbmRleCwKLSAgICAncG1vZCcgOiBfUHJvcF9tb2RhbCwKLSAgICAncG5hbScgOiBfUHJvcF9uYW1lLAotICAgICdwcG9zJyA6IF9Qcm9wX3Bvc2l0aW9uLAotICAgICdwcnN6JyA6IF9Qcm9wX3Jlc2l6YWJsZSwKLSAgICAncHRpdCcgOiBfUHJvcF90aXRsZWQsCi0gICAgJ3B2aXMnIDogX1Byb3BfdmlzaWJsZSwKLSAgICAncHp1bScgOiBfUHJvcF96b29tZWQsCi19Ci0KLV9jb21wZGVjbGFyYXRpb25zID0gewotfQotCi1fZW51bWRlY2xhcmF0aW9ucyA9IHsKLSAgICAnc2F2bycgOiBfRW51bV9zYXZvLAotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5IGIvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL19faW5pdF9fLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzU5ZGY1Li4wMDAwMDAwCi0tLSBhL01hYy9Ub29scy9Eb2MvSGVscEluZGV4aW5nVG9vbC9fX2luaXRfXy5weQorKysgL2Rldi9udWxsCkBAIC0xLDc4ICswLDAgQEAKLSIiIgotUGFja2FnZSBnZW5lcmF0ZWQgZnJvbSAvRGV2ZWxvcGVyL0FwcGxpY2F0aW9ucy9BcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wuYXBwCi0iIiIKLWltcG9ydCBhZXRvb2xzCi1FcnJvciA9IGFldG9vbHMuRXJyb3IKLWltcG9ydCBTdGFuZGFyZF9TdWl0ZQotaW1wb3J0IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZQotaW1wb3J0IG9kZHNfYW5kX2VuZHMKLWltcG9ydCBNaXNjZWxsYW5lb3VzX1N0YW5kYXJkcwotaW1wb3J0IFJlcXVpcmVkX1N1aXRlCi0KLQotX2NvZGVfdG9fbW9kdWxlID0gewotICAgICdDb1JlJyA6IFN0YW5kYXJkX1N1aXRlLAotICAgICdISVQgJyA6IEhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZSwKLSAgICAnT2RkcycgOiBvZGRzX2FuZF9lbmRzLAotICAgICdtaXNjJyA6IE1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzLAotICAgICdyZXFkJyA6IFJlcXVpcmVkX1N1aXRlLAotfQotCi0KLQotX2NvZGVfdG9fZnVsbG5hbWUgPSB7Ci0gICAgJ0NvUmUnIDogKCdIZWxwSW5kZXhpbmdUb29sLlN0YW5kYXJkX1N1aXRlJywgJ1N0YW5kYXJkX1N1aXRlJyksCi0gICAgJ0hJVCAnIDogKCdIZWxwSW5kZXhpbmdUb29sLkhlbHBfSW5kZXhpbmdfVG9vbF9TdWl0ZScsICdIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUnKSwKLSAgICAnT2RkcycgOiAoJ0hlbHBJbmRleGluZ1Rvb2wub2Rkc19hbmRfZW5kcycsICdvZGRzX2FuZF9lbmRzJyksCi0gICAgJ21pc2MnIDogKCdIZWxwSW5kZXhpbmdUb29sLk1pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJywgJ01pc2NlbGxhbmVvdXNfU3RhbmRhcmRzJyksCi0gICAgJ3JlcWQnIDogKCdIZWxwSW5kZXhpbmdUb29sLlJlcXVpcmVkX1N1aXRlJywgJ1JlcXVpcmVkX1N1aXRlJyksCi19Ci0KLWZyb20gU3RhbmRhcmRfU3VpdGUgaW1wb3J0ICoKLWZyb20gSGVscF9JbmRleGluZ19Ub29sX1N1aXRlIGltcG9ydCAqCi1mcm9tIG9kZHNfYW5kX2VuZHMgaW1wb3J0ICoKLWZyb20gTWlzY2VsbGFuZW91c19TdGFuZGFyZHMgaW1wb3J0ICoKLWZyb20gUmVxdWlyZWRfU3VpdGUgaW1wb3J0ICoKLQotZGVmIGdldGJhc2VjbGFzc2VzKHYpOgotICAgIGlmIG5vdCBnZXRhdHRyKHYsICdfcHJvcGRpY3QnLCBOb25lKToKLSAgICAgICAgdi5fcHJvcGRpY3QgPSB7fQotICAgICAgICB2Ll9lbGVtZGljdCA9IHt9Ci0gICAgICAgIGZvciBzdXBlcmNsYXNzbmFtZSBpbiBnZXRhdHRyKHYsICdfc3VwZXJjbGFzc25hbWVzJywgW10pOgotICAgICAgICAgICAgc3VwZXJjbGFzcyA9IGV2YWwoc3VwZXJjbGFzc25hbWUpCi0gICAgICAgICAgICBnZXRiYXNlY2xhc3NlcyhzdXBlcmNsYXNzKQotICAgICAgICAgICAgdi5fcHJvcGRpY3QudXBkYXRlKGdldGF0dHIoc3VwZXJjbGFzcywgJ19wcm9wZGljdCcsIHt9KSkKLSAgICAgICAgICAgIHYuX2VsZW1kaWN0LnVwZGF0ZShnZXRhdHRyKHN1cGVyY2xhc3MsICdfZWxlbWRpY3QnLCB7fSkpCi0gICAgICAgIHYuX3Byb3BkaWN0LnVwZGF0ZShnZXRhdHRyKHYsICdfcHJpdnByb3BkaWN0Jywge30pKQotICAgICAgICB2Ll9lbGVtZGljdC51cGRhdGUoZ2V0YXR0cih2LCAnX3ByaXZlbGVtZGljdCcsIHt9KSkKLQotaW1wb3J0IFN0ZFN1aXRlcwotCi0jCi0jIFNldCBwcm9wZXJ0eSBhbmQgZWxlbWVudCBkaWN0aW9uYXJpZXMgbm93IHRoYXQgYWxsIGNsYXNzZXMgaGF2ZSBiZWVuIGRlZmluZWQKLSMKLWdldGJhc2VjbGFzc2VzKHdpbmRvdykKLWdldGJhc2VjbGFzc2VzKGFwcGxpY2F0aW9uKQotZ2V0YmFzZWNsYXNzZXMoZG9jdW1lbnQpCi1nZXRiYXNlY2xhc3NlcyhhcHBsaWNhdGlvbikKLQotIwotIyBJbmRpY2VzIG9mIHR5cGVzIGRlY2xhcmVkIGluIHRoaXMgbW9kdWxlCi0jCi1fY2xhc3NkZWNsYXJhdGlvbnMgPSB7Ci0gICAgJ2N3aW4nIDogd2luZG93LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotICAgICdkb2N1JyA6IGRvY3VtZW50LAotICAgICdjYXBwJyA6IGFwcGxpY2F0aW9uLAotfQotCi0KLWNsYXNzIEhlbHBJbmRleGluZ1Rvb2woU3RhbmRhcmRfU3VpdGVfRXZlbnRzLAotICAgICAgICBIZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGVfRXZlbnRzLAotICAgICAgICBvZGRzX2FuZF9lbmRzX0V2ZW50cywKLSAgICAgICAgTWlzY2VsbGFuZW91c19TdGFuZGFyZHNfRXZlbnRzLAotICAgICAgICBSZXF1aXJlZF9TdWl0ZV9FdmVudHMsCi0gICAgICAgIGFldG9vbHMuVGFsa1RvKToKLSAgICBfc2lnbmF0dXJlID0gJ2hpdGknCi0KLSAgICBfbW9kdWxlTmFtZSA9ICdIZWxwSW5kZXhpbmdUb29sJwpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9IZWxwSW5kZXhpbmdUb29sL29kZHNfYW5kX2VuZHMucHkgYi9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODZlY2I5NS4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL0hlbHBJbmRleGluZ1Rvb2wvb2Rkc19hbmRfZW5kcy5weQorKysgL2Rldi9udWxsCkBAIC0xLDQ5ICswLDAgQEAKLSIiIlN1aXRlIG9kZHMgYW5kIGVuZHM6IFRoaW5ncyB0aGF0IHNob3VsZCBiZSBpbiBzb21lIHN0YW5kYXJkIHN1aXRlLCBidXQgYXJlblx4ZDV0Ci1MZXZlbCAxLCB2ZXJzaW9uIDEKLQotR2VuZXJhdGVkIGZyb20gL0RldmVsb3Blci9BcHBsaWNhdGlvbnMvQXBwbGUgSGVscCBJbmRleGluZyBUb29sLmFwcAotQUVURS9BRVVUIHJlc291cmNlIHZlcnNpb24gMS8xLCBsYW5ndWFnZSAwLCBzY3JpcHQgMAotIiIiCi0KLWltcG9ydCBhZXRvb2xzCi1pbXBvcnQgTWFjT1MKLQotX2NvZGUgPSAnT2RkcycKLQotY2xhc3Mgb2Rkc19hbmRfZW5kc19FdmVudHM6Ci0KLSAgICBkZWYgc2VsZWN0KHNlbGYsIF9vYmplY3Q9Tm9uZSwgX2F0dHJpYnV0ZXM9e30sICoqX2FyZ3VtZW50cyk6Ci0gICAgICAgICIiInNlbGVjdDogU2VsZWN0IHRoZSBzcGVjaWZpZWQgb2JqZWN0Ci0gICAgICAgIFJlcXVpcmVkIGFyZ3VtZW50OiB0aGUgb2JqZWN0IHRvIHNlbGVjdAotICAgICAgICBLZXl3b3JkIGFyZ3VtZW50IF9hdHRyaWJ1dGVzOiBBcHBsZUV2ZW50IGF0dHJpYnV0ZSBkaWN0aW9uYXJ5Ci0gICAgICAgICIiIgotICAgICAgICBfY29kZSA9ICdtaXNjJwotICAgICAgICBfc3ViY29kZSA9ICdzbGN0JwotCi0gICAgICAgIGlmIF9hcmd1bWVudHM6IHJhaXNlIFR5cGVFcnJvcignTm8gb3B0aW9uYWwgYXJncyBleHBlY3RlZCcpCi0gICAgICAgIF9hcmd1bWVudHNbJy0tLS0nXSA9IF9vYmplY3QKLQotCi0gICAgICAgIF9yZXBseSwgX2FyZ3VtZW50cywgX2F0dHJpYnV0ZXMgPSBzZWxmLnNlbmQoX2NvZGUsIF9zdWJjb2RlLAotICAgICAgICAgICAgICAgIF9hcmd1bWVudHMsIF9hdHRyaWJ1dGVzKQotICAgICAgICBpZiBfYXJndW1lbnRzLmdldCgnZXJybicsIDApOgotICAgICAgICAgICAgcmFpc2UgYWV0b29scy5FcnJvcihhZXRvb2xzLmRlY29kZWVycm9yKF9hcmd1bWVudHMpKQotICAgICAgICAjIFhYWFggT3B0aW9uYWxseSBkZWNvZGUgcmVzdWx0Ci0gICAgICAgIGlmIF9hcmd1bWVudHMuaGFzX2tleSgnLS0tLScpOgotICAgICAgICAgICAgcmV0dXJuIF9hcmd1bWVudHNbJy0tLS0nXQotCi0KLSMKLSMgSW5kaWNlcyBvZiB0eXBlcyBkZWNsYXJlZCBpbiB0aGlzIG1vZHVsZQotIwotX2NsYXNzZGVjbGFyYXRpb25zID0gewotfQotCi1fcHJvcGRlY2xhcmF0aW9ucyA9IHsKLX0KLQotX2NvbXBkZWNsYXJhdGlvbnMgPSB7Ci19Ci0KLV9lbnVtZGVjbGFyYXRpb25zID0gewotfQpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9SRUFETUUgYi9NYWMvVG9vbHMvRG9jL1JFQURNRQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGY0ZDUzZC4uMDAwMDAwMAotLS0gYS9NYWMvVG9vbHMvRG9jL1JFQURNRQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLUluIHRoaXMgZGlyZWN0b3J5IHlvdSBjYW4gYnVpbGQgdGhlIFB5dGhvbiBkb2N1bWVudGF0aW9uIGluIGEgZm9ybSB0aGF0Ci1pcyBzdWl0YWJsZSBmb3IgYWNjZXNzIHdpdGggQXBwbGUgSGVscCBWaWV3ZXIuIFRoaXMgd2lsbCBlbmFibGUgdGhlCi0iUHl0aG9uIERvY3VtZW50YXRpb24iIG1lbnUgZW50cmllcyBpbiB0aGUgTWFjUHl0aG9uIElERSBIZWxwIG1lbnUuCi0KLVVuZm9ydHVuYXRlbHkgdGhlIHByb2NlZHVyZSB0byBidWlsZCB0aGUgZG9jcyBpcyBub3QgdmVyeSBzdHJlYW1saW5lZC4KLQotRmlyc3QsIGVkaXQgc2V0dXAucHkuIEF0IHRoZSB0b3AsIGVkaXQgTUFKT1JfVkVSU0lPTiBhbmQgTUlOT1JfVkVSU0lPTiwKLWFuZCBjaGVjayB0aGF0IERFU1RESVIgbWFrZXMgc2Vuc2UuIFRoZSBkb2N1bWVudGF0aW9uIHdpbGwgYmUgaW5zdGFsbGVkCi1pbnNpZGUgUHl0aG9uSURFLmFwcC4KLQotSW4gRG9jQnVpbGQuaW5pdGlhbGl6ZV9vcHRpb25zLCBzZXQgc2VsZi5kb3dubG9hZCB0byBUcnVlIGlmIHlvdSB3YW50IHRvCi1kb3dubG9hZCB0aGUgZG9jcy4gU2V0IGl0IHRvIEZhbHNlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBkb2NzIGZyb20KLXRoZSBzb3VyY2UgdHJlZSwgYnV0IHRoaXMgcmVxdWlyZXMgTGFUZXggYW5kIGxvdHMgb2Ygb3RoZXIgc3R1ZmYuCi1Eb2FibGUsIGJ1dCBub3QgZWFzeS4KLQotU2Vjb25kLCBpZiB5b3Ugd2FudCB0byBkb3dubG9hZCB0aGUgZG9jcyB5b3UgbWF5IG5lZWQgdG8gZG8gYSBjb3VwbGUKLW1vcmUgZWRpdHMuIFRoZSB3YXkgdGhlIGRvY3MgYXJlIHBhY2thZ2VkIHdpbGwgb2Z0ZW4gY2hhbmdlIGJldHdlZW4KLW1ham9yIHJlbGVhc2VzLiBGaWRkbGUgRG9jQnVpbGQuZG93bmxvYWREb2NzIHRvIG1ha2UgaXQgZG8gdGhlIHJpZ2h0Ci10aGluZyAoZG93bmxvYWQgdGhlIGRvY3MgZnJvbSBweXRob24ub3JnLCB1bnBhY2sgdGhlbSwgcmVuYW1lIHRoZQotZGlyZWN0b3J5IHRvICJidWlsZC9odG1sIikuCi0KLUFmdGVyIHRoZXNlIGVkaXRzIHlvdSBzaG91bGQgYmUgcmVhZHkgdG8gcm9sbC4gInB5dGhvbncgc2V0dXAucHkgYnVpbGQiCi1zaG91bGQgZG93bmxvYWQgYW5kIHVucGFjayAob3IgYnVpbGQpIHRoZSBkb2NzLiBOZXh0LCBpdCB3aWxsIGRvIHNvbWUKLW1hZ2ljIHRvIG1ha2UgdGhlIGRvY3MgaW5kZXhhYmxlLiBGaW5hbGx5LCBpdCB3aWxsIHJ1biB0aGUgQXBwbGUgSGVscAotSW5kZXhpbmcgVG9vbC4gKFRoaXMgbGFzdCBzdGVwIGlzIHRoZSByZWFzb24geW91IG11c3QgdXNlICJweXRob253IiBhcwotb3Bwb3NlZCB0byAicHl0aG9uIikuIFVzdWFsbHkgaXQgd2lsbCB0aW1lIG91dCB3aGlsZSB3YWl0aW5nIGZvciBBSElUIHRvCi1kbyBpdHMgd29yay4gV2FpdCB1bnRpbCBBSElUIGlzIGRvbmUuCi0KLU5vdyB5b3UncmUgcmVhZHkgdG8gaW5zdGFsbCB3aXRoICJweXRob24gc2V0dXAucHkgaW5zdGFsbCIuCi0KLUFmdGVyIHRoaXMgaXMgZG9uZSB0ZXN0IHlvdXIgd29yay4gRmlyZSB1cCBQeXRob25JREUsIGFuZCBjaGVjayB0aGF0Ci1IZWxwLT5QeXRob24gRG9jdW1lbnRhdGlvbiBicmluZ3MgdXAgdGhlIGRvY3VtZW50YXRpb24gaW4gdGhlIEhlbHAgVmlld2VyLgotQWxzbyBvcGVuIGFuIElERSBlZGl0IHdpbmRvdywgdHlwZSBzb21ldGhpbmcgbGlrZSAiaW1wb3J0IHN5cyIsIHNlbGVjdAotImltcG9ydCIsIGFuZCB1c2UgSGVscC0+TG9va3VwIGluIFB5dGhvbiBEb2N1bWVudGF0aW9uIHRvIGNoZWNrIHRoYXQgdGhlCi1pbmRleCBoYXMgYmVlbiBnZW5lcmF0ZWQgY29ycmVjdGx5LgpkaWZmIC0tZ2l0IGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weSBiL01hYy9Ub29scy9Eb2Mvc2V0dXAucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNTE1MmMuLjAwMDAwMDAKLS0tIGEvTWFjL1Rvb2xzL0RvYy9zZXR1cC5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxMyArMCwwIEBACi0jIEJ1aWxkIGFuZCBpbnN0YWxsIGFuIEFwcGxlIEhlbHAgVmlld2VyIGNvbXBhdGlibGUgdmVyc2lvbiBvZiB0aGUgUHl0aG9uCi0jIGRvY3VtZW50YXRpb24gaW50byB0aGUgZnJhbWV3b3JrLgotIyBDb2RlIGJ5IEJpbGwgRmFuY2hlciwgd2l0aCBzb21lIG1vZGlmaWNhdGlvbnMgYnkgSmFjayBKYW5zZW4uCi0jCi0jIFlvdSBtdXN0IHJ1biB0aGlzIGFzIGEgdHdvLXN0ZXAgcHJvY2VzcwotIyAxLiBweXRob24gc2V0dXBEb2NzLnB5IGJ1aWxkCi0jIDIuIFdhaXQgZm9yIEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCB0byBmaW5pc2gKLSMgMy4gcHl0aG9uIHNldHVwRG9jcy5weSBpbnN0YWxsCi0jCi0jIFRvIGRvOgotIyAtIHRlc3Qgd2hldGhlciB0aGUgZG9jcyBhcmUgYXZhaWxhYmxlIGxvY2FsbHkgYmVmb3JlIGRvd25sb2FkaW5nCi0jIC0gZml4IGJ1aWxkRG9jc0Zyb21Tb3VyY2UKLSMgLSBHZXQgZG9jdW1lbnRhdGlvbiB2ZXJzaW9uIGZyb20gc3lzLnZlcnNpb24sIGZhbGxiYWNrIHRvIDIuMi4xCi0jIC0gU2VlIGlmIHdlIGNhbiBzb21laG93IGRldGVjdCB0aGF0IEFwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbCBpcyBmaW5pc2hlZAotIyAtIGRhdGFfZmlsZXMgdG8gc2V0dXAoKSBkb2Vzbid0IHNlZW0gdGhlIHJpZ2h0IHdheSB0byBwYXNzIHRoZSBhcmd1bWVudHMKLSMKLWltcG9ydCBzeXMsIG9zLCByZQotZnJvbSBkaXN0dXRpbHMuY21kIGltcG9ydCBDb21tYW5kCi1mcm9tIGRpc3R1dGlscy5jb21tYW5kLmJ1aWxkIGltcG9ydCBidWlsZAotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAKLWZyb20gZGlzdHV0aWxzLmZpbGVfdXRpbCBpbXBvcnQgY29weV9maWxlCi1mcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgY29weV90cmVlCi1mcm9tIGRpc3R1dGlscy5sb2cgaW1wb3J0IGxvZwotZnJvbSBkaXN0dXRpbHMuc3Bhd24gaW1wb3J0IHNwYXduCi1mcm9tIGRpc3R1dGlscyBpbXBvcnQgc3lzY29uZmlnLCBkZXBfdXRpbAotZnJvbSBkaXN0dXRpbHMudXRpbCBpbXBvcnQgY2hhbmdlX3Jvb3QKLWltcG9ydCBIZWxwSW5kZXhpbmdUb29sCi1pbXBvcnQgQ2FyYm9uLkZpbGUKLWltcG9ydCB0aW1lCi0KLU1BSk9SX1ZFUlNJT049JzIuNCcKLU1JTk9SX1ZFUlNJT049JzIuNC4xJwotREVTVERJUj0nL0FwcGxpY2F0aW9ucy9NYWNQeXRob24tJXMvUHl0aG9uSURFLmFwcC9Db250ZW50cy9SZXNvdXJjZXMvRW5nbGlzaC5scHJvai9QeXRob25Eb2N1bWVudGF0aW9uJyAlIE1BSk9SX1ZFUlNJT04KLQotY2xhc3MgRG9jQnVpbGQoYnVpbGQpOgotICAgIGRlZiBpbml0aWFsaXplX29wdGlvbnMoc2VsZik6Ci0gICAgICAgIGJ1aWxkLmluaXRpYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBzZWxmLmJ1aWxkX2h0bWwgPSBOb25lCi0gICAgICAgIHNlbGYuYnVpbGRfZGVzdCA9IE5vbmUKLSAgICAgICAgc2VsZi5kb3dubG9hZCA9IDEKLSAgICAgICAgc2VsZi5kb2NfdmVyc2lvbiA9IE1JTk9SX1ZFUlNJT04gIyBPbmx5IG5lZWRlZCBpZiBkb3dubG9hZCBpcyB0cnVlCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgYnVpbGQuZmluYWxpemVfb3B0aW9ucyhzZWxmKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2h0bWwgaXMgTm9uZToKLSAgICAgICAgICAgIHNlbGYuYnVpbGRfaHRtbCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Jhc2UsICdodG1sJykKLSAgICAgICAgaWYgc2VsZi5idWlsZF9kZXN0IGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCAnUHl0aG9uRG9jdW1lbnRhdGlvbicpCi0KLSAgICBkZWYgc3Bhd24oc2VsZiwgKmFyZ3MpOgotICAgICAgICBzcGF3bihhcmdzLCAxLCAgc2VsZi52ZXJib3NlLCBzZWxmLmRyeV9ydW4pCi0KLSAgICBkZWYgZG93bmxvYWREb2NzKHNlbGYpOgotICAgICAgICB3b3JrZGlyID0gb3MuZ2V0Y3dkKCkKLSAgICAgICAgIyBYWFggTm90ZTogdGhlIG5leHQgc3RyaW5ncyBtYXkgY2hhbmdlIGZyb20gdmVyc2lvbiB0byB2ZXJzaW9uCi0gICAgICAgIHVybCA9ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvZnRwL3B5dGhvbi9kb2MvJXMvaHRtbC0lcy50YXIuYnoyJyAlIFwKLSAgICAgICAgICAgICAgICAoc2VsZi5kb2NfdmVyc2lvbixzZWxmLmRvY192ZXJzaW9uKQotICAgICAgICB0YXJmaWxlID0gJ2h0bWwtJXMudGFyLmJ6MicgJSBzZWxmLmRvY192ZXJzaW9uCi0gICAgICAgIGRpcm5hbWUgPSAnUHl0aG9uLURvY3MtJXMnICUgc2VsZi5kb2NfdmVyc2lvbgotCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYuYnVpbGRfaHRtbCk6Ci0gICAgICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoJyVzOiBhbHJlYWR5IGV4aXN0cywgcGxlYXNlIHJlbW92ZSBhbmQgdHJ5IGFnYWluJyAlIHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3MuY2hkaXIoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLnNwYXduKCdjdXJsJywnLU8nLCB1cmwpCi0gICAgICAgIHNlbGYuc3Bhd24oJ3RhcicsICcteGpmJywgdGFyZmlsZSkKLSAgICAgICAgb3MucmVuYW1lKGRpcm5hbWUsICdodG1sJykKLSAgICAgICAgb3MuY2hkaXIod29ya2RpcikKLSMjICAgICAgICBwcmludCAiKiogUGxlYXNlIHVucGFjayAlcyIgJSBvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9iYXNlLCB0YXJmaWxlKQotIyMgICAgICAgIHByaW50ICIqKiBVbnBhY2sgdGhlIGZpbGVzIGludG8gJXMiICUgc2VsZi5idWlsZF9odG1sCi0jIyAgICAgICAgcmFpc2UgUnVudGltZUVycm9yLCAiWW91IG5lZWQgdG8gdW5wYWNrIHRoZSBkb2NzIG1hbnVhbGx5IgotCi0gICAgZGVmIGJ1aWxkRG9jc0Zyb21Tb3VyY2Uoc2VsZik6Ci0gICAgICAgIHNyY2RpciA9ICcuLi8uLi8uLicKLSAgICAgICAgZG9jZGlyID0gb3MucGF0aC5qb2luKHNyY2RpciwgJ0RvYycpCi0gICAgICAgIGh0bWxkaXIgPSBvcy5wYXRoLmpvaW4oZG9jZGlyLCAnaHRtbCcpCi0gICAgICAgIHNwYXduKCgnbWFrZScsJy0tZGlyZWN0b3J5JywgZG9jZGlyLCAnaHRtbCcpLCAxLCBzZWxmLnZlcmJvc2UsIHNlbGYuZHJ5X3J1bikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9odG1sKQotICAgICAgICBjb3B5X3RyZWUoaHRtbGRpciwgc2VsZi5idWlsZF9odG1sKQotCi0gICAgZGVmIGVuc3VyZUh0bWwoc2VsZik6Ci0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgaWYgc2VsZi5kb3dubG9hZDoKLSAgICAgICAgICAgICAgICBzZWxmLmRvd25sb2FkRG9jcygpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuYnVpbGREb2NzRnJvbVNvdXJjZSgpCi0KLSAgICBkZWYgaGFja0luZGV4KHNlbGYpOgotICAgICAgICBpbmRfaHRtbCA9ICdpbmRleC5odG1sJwotICAgICAgICAjcHJpbnQgJ3NlbGYuYnVpbGRfZGVzdCA9Jywgc2VsZi5idWlsZF9kZXN0Ci0gICAgICAgIGhhY2tlZEluZGV4ID0gZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9kZXN0LCBpbmRfaHRtbCksJ3cnKQotICAgICAgICBvcmlnSW5kZXggPSBmaWxlKG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2h0bWwsaW5kX2h0bWwpKQotICAgICAgICByID0gcmUuY29tcGlsZSgnPHN0eWxlIHR5cGU9InRleHQvY3NzIj4uKjwvc3R5bGU+JywgcmUuRE9UQUxMKQotICAgICAgICBoYWNrZWRJbmRleC53cml0ZShyLnN1YignPE1FVEEgTkFNRT0iQXBwbGVUaXRsZSIgQ09OVEVOVD0iUHl0aG9uIERvY3VtZW50YXRpb24iPicsb3JpZ0luZGV4LnJlYWQoKSkpCi0KLSAgICBkZWYgaGFja0ZpbGUoc2VsZixkLGYpOgotICAgICAgICBvcmlnUGF0aCA9IG9zLnBhdGguam9pbihkLGYpCi0gICAgICAgIGFzc2VydChvcmlnUGF0aFs6bGVuKHNlbGYuYnVpbGRfaHRtbCldID09IHNlbGYuYnVpbGRfaHRtbCkKLSAgICAgICAgb3V0UGF0aCA9IG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsIGRbbGVuKHNlbGYuYnVpbGRfaHRtbCkrMTpdLCBmKQotICAgICAgICAobmFtZSwgZXh0KSA9IG9zLnBhdGguc3BsaXRleHQoZikKLSAgICAgICAgaWYgb3MucGF0aC5pc2RpcihvcmlnUGF0aCk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChvdXRQYXRoKQotICAgICAgICBlbGlmIGV4dCA9PSAnLmh0bWwnOgotICAgICAgICAgICAgaWYgc2VsZi52ZXJib3NlOiBwcmludCgnaGFja2luZyAlcyB0byAlcycgJSAob3JpZ1BhdGgsb3V0UGF0aCkpCi0gICAgICAgICAgICBoYWNrZWRGaWxlID0gZmlsZShvdXRQYXRoLCAndycpCi0gICAgICAgICAgICBvcmlnRmlsZSA9IGZpbGUob3JpZ1BhdGgsJ3InKQotICAgICAgICAgICAgaGFja2VkRmlsZS53cml0ZShzZWxmLnIuc3ViKCc8ZGw+PGR0PjxkZD4nLCBvcmlnRmlsZS5yZWFkKCkpKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgY29weV9maWxlKG9yaWdQYXRoLCBvdXRQYXRoKQotCi0gICAgZGVmIGhhY2tIdG1sKHNlbGYpOgotICAgICAgICBzZWxmLnIgPSByZS5jb21waWxlKCc8ZGw+PGRkPicpCi0gICAgICAgIG9zLndhbGsoc2VsZi5idWlsZF9odG1sLCBzZWxmLnZpc2l0LCBOb25lKQotCi0gICAgZGVmIHZpc2l0KHNlbGYsIGR1bW15LCBkaXJuYW1lLCBmaWxlbmFtZXMpOgotICAgICAgICBmb3IgZiBpbiBmaWxlbmFtZXM6Ci0gICAgICAgICAgICBzZWxmLmhhY2tGaWxlKGRpcm5hbWUsIGYpCi0KLSAgICBkZWYgbWFrZUhlbHBJbmRleChzZWxmKToKLSAgICAgICAgYXBwID0gJy9EZXZlbG9wZXIvQXBwbGljYXRpb25zL0FwcGxlIEhlbHAgSW5kZXhpbmcgVG9vbC5hcHAnCi0gICAgICAgIHNlbGYuc3Bhd24oJ29wZW4nLCAnLWEnLCBhcHAgLCBzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgIHByaW50KCJQbGVhc2Ugd2FpdCB1bnRpbCBBcHBsZSBIZWxwIEluZGV4aW5nIFRvb2wgZmluaXNoZXMgYmVmb3JlIGluc3RhbGxpbmciKQotCi0gICAgZGVmIG1ha2VIZWxwSW5kZXgoc2VsZik6Ci0gICAgICAgIGFwcCA9IEhlbHBJbmRleGluZ1Rvb2wuSGVscEluZGV4aW5nVG9vbChzdGFydD0xKQotICAgICAgICBhcHAub3BlbihDYXJib24uRmlsZS5GU1NwZWMoc2VsZi5idWlsZF9kZXN0KSkKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIHN0YXJ0Li4uIikKLSAgICAgICAgd2hpbGUgMToKLSAgICAgICAgICAgICMgVGhpcyBpcyBiYWQgZGVzaWduIGluIHRoZSBzdWl0ZSBnZW5lcmF0aW9uIGNvZGUhCi0gICAgICAgICAgICBpZGxlID0gYXBwLl9nZXQoSGVscEluZGV4aW5nVG9vbC5IZWxwX0luZGV4aW5nX1Rvb2xfU3VpdGUuX1Byb3BfaWRsZVN0YXR1cygpKQotICAgICAgICAgICAgdGltZS5zbGVlcCgxMCkKLSAgICAgICAgICAgIGlmIG5vdCBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLSAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiV2FpdGluZyBmb3IgSGVscCBJbmRleGluZyBUb29sIHRvIGZpbmlzaC4uLiIpCi0gICAgICAgIHdoaWxlIDE6Ci0gICAgICAgICAgICAjIFRoaXMgaXMgYmFkIGRlc2lnbiBpbiB0aGUgc3VpdGUgZ2VuZXJhdGlvbiBjb2RlIQotICAgICAgICAgICAgaWRsZSA9IGFwcC5fZ2V0KEhlbHBJbmRleGluZ1Rvb2wuSGVscF9JbmRleGluZ19Ub29sX1N1aXRlLl9Qcm9wX2lkbGVTdGF0dXMoKSkKLSAgICAgICAgICAgIHRpbWUuc2xlZXAoMTApCi0gICAgICAgICAgICBpZiBpZGxlOiBicmVhawotICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiLiIpCi0gICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIlxuIikKLQotCi0gICAgZGVmIHJ1bihzZWxmKToKLSAgICAgICAgc2VsZi5lbnN1cmVfZmluYWxpemVkKCkKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9iYXNlKQotICAgICAgICBzZWxmLmVuc3VyZUh0bWwoKQotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2RpcihzZWxmLmJ1aWxkX2h0bWwpOgotICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCJDYW4ndCBmaW5kIHNvdXJjZSBmb2xkZXIgZm9yIGRvY3VtZW50YXRpb24uIikKLSAgICAgICAgc2VsZi5ta3BhdGgoc2VsZi5idWlsZF9kZXN0KQotICAgICAgICBpZiBkZXBfdXRpbC5uZXdlcihvcy5wYXRoLmpvaW4oc2VsZi5idWlsZF9odG1sLCdpbmRleC5odG1sJyksIG9zLnBhdGguam9pbihzZWxmLmJ1aWxkX2Rlc3QsJ2luZGV4Lmh0bWwnKSk6Ci0gICAgICAgICAgICBzZWxmLm1rcGF0aChzZWxmLmJ1aWxkX2Rlc3QpCi0gICAgICAgICAgICBzZWxmLmhhY2tIdG1sKCkKLSAgICAgICAgICAgIHNlbGYuaGFja0luZGV4KCkKLSAgICAgICAgICAgIHNlbGYubWFrZUhlbHBJbmRleCgpCi0KLWNsYXNzIEFIVkRvY0luc3RhbGwoQ29tbWFuZCk6Ci0gICAgZGVzY3JpcHRpb24gPSAiaW5zdGFsbCBBcHBsZSBIZWxwIFZpZXdlciBodG1sIGZpbGVzIgotICAgIHVzZXJfb3B0aW9ucyA9IFsoJ2luc3RhbGwtZG9jPScsICdkJywKLSAgICAgICAgICAgICdkaXJlY3RvcnkgdG8gaW5zdGFsbCBIVE1MIHRyZWUnKSwKLSAgICAgICAgICAgICAoJ3Jvb3Q9JywgTm9uZSwKLSAgICAgICAgICAgICAiaW5zdGFsbCBldmVyeXRoaW5nIHJlbGF0aXZlIHRvIHRoaXMgYWx0ZXJuYXRlIHJvb3QgZGlyZWN0b3J5IiksCi0gICAgICAgICAgICBdCi0KLSAgICBkZWYgaW5pdGlhbGl6ZV9vcHRpb25zKHNlbGYpOgotICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBOb25lCi0gICAgICAgIHNlbGYuaW5zdGFsbF9kb2MgPSBOb25lCi0gICAgICAgIHNlbGYucHJlZml4ID0gTm9uZQotICAgICAgICBzZWxmLnJvb3QgPSBOb25lCi0KLSAgICBkZWYgZmluYWxpemVfb3B0aW9ucyhzZWxmKToKLSAgICAgICAgc2VsZi5zZXRfdW5kZWZpbmVkX29wdGlvbnMoJ2luc3RhbGwnLAotICAgICAgICAgICAgICAgICgncHJlZml4JywgJ3ByZWZpeCcpLAotICAgICAgICAgICAgICAgICgncm9vdCcsICdyb290JykpCi0jICAgICAgICAgICAgICAgaW1wb3J0IHBkYiA7IHBkYi5zZXRfdHJhY2UoKQotICAgICAgICBidWlsZF9jbWQgPSBzZWxmLmdldF9maW5hbGl6ZWRfY29tbWFuZCgnYnVpbGQnKQotICAgICAgICBpZiBzZWxmLmJ1aWxkX2Rlc3QgaXMgTm9uZToKLSAgICAgICAgICAgIGJ1aWxkX2NtZCA9IHNlbGYuZ2V0X2ZpbmFsaXplZF9jb21tYW5kKCdidWlsZCcpCi0gICAgICAgICAgICBzZWxmLmJ1aWxkX2Rlc3QgPSBidWlsZF9jbWQuYnVpbGRfZGVzdAotICAgICAgICBpZiBzZWxmLmluc3RhbGxfZG9jIGlzIE5vbmU6Ci0gICAgICAgICAgICBzZWxmLmluc3RhbGxfZG9jID0gb3MucGF0aC5qb2luKHNlbGYucHJlZml4LCBERVNURElSKQotICAgICAgICBwcmludCgnSU5TVEFMTCcsIHNlbGYuYnVpbGRfZGVzdCwgJy0+Jywgc2VsZi5pbnN0YWxsX2RvYykKLQotICAgIGRlZiBydW4oc2VsZik6Ci0gICAgICAgIHNlbGYuZmluYWxpemVfb3B0aW9ucygpCi0gICAgICAgIHNlbGYuZW5zdXJlX2ZpbmFsaXplZCgpCi0gICAgICAgIHByaW50KCJSdW5uaW5nIEluc3RhbGxlciIpCi0gICAgICAgIGluc3Rsb2MgPSBzZWxmLmluc3RhbGxfZG9jCi0gICAgICAgIGlmIHNlbGYucm9vdDoKLSAgICAgICAgICAgIGluc3Rsb2MgPSBjaGFuZ2Vfcm9vdChzZWxmLnJvb3QsIGluc3Rsb2MpCi0gICAgICAgIHNlbGYubWtwYXRoKGluc3Rsb2MpCi0gICAgICAgIGNvcHlfdHJlZShzZWxmLmJ1aWxkX2Rlc3QsIGluc3Rsb2MpCi0gICAgICAgIHByaW50KCJJbnN0YWxsYXRpb24gY29tcGxldGUiKQotCi1kZWYgbXVuZ2VWZXJzaW9uKGluZmlsZSwgb3V0ZmlsZSk6Ci0gICAgaSA9IGZpbGUoaW5maWxlLCdyJykKLSAgICBvID0gZmlsZShvdXRmaWxlLCd3JykKLSAgICBvLndyaXRlKHJlLnN1YignXCRcKFZFUlNJT05cKScsc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdWRVJTSU9OJyksaS5yZWFkKCkpKQotICAgIGkuY2xvc2UoKQotICAgIG8uY2xvc2UoKQotCi1kZWYgbWFpbigpOgotICAgICMgdHVybiBvZmYgd2FybmluZ3Mgd2hlbiBkZXByZWNhdGVkIG1vZHVsZXMgYXJlIGltcG9ydGVkCi0jIyAgICAgIGltcG9ydCB3YXJuaW5ncwotIyMgICAgICB3YXJuaW5ncy5maWx0ZXJ3YXJuaW5ncygiaWdub3JlIixjYXRlZ29yeT1EZXByZWNhdGlvbldhcm5pbmcpCi0gICAgc2V0dXAobmFtZSA9ICdEb2N1bWVudGF0aW9uJywKLSAgICAgICAgICAgIHZlcnNpb24gPSAnJWQuJWQnICUgc3lzLnZlcnNpb25faW5mb1s6Ml0sCi0gICAgICAgICAgICBjbWRjbGFzcyA9IHsnaW5zdGFsbF9kYXRhJzpBSFZEb2NJbnN0YWxsLCAnYnVpbGQnOkRvY0J1aWxkfSwKLSAgICAgICAgICAgIGRhdGFfZmlsZXMgPSBbJ2R1bW15J10sCi0gICAgICAgICAgICApCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvYnVuZGxlYnVpbGRlci5weSBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CmluZGV4IDZjYzEzMGYuLmY1Njc5ZDMgMTAwNzU1Ci0tLSBhL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CisrKyBiL01hYy9Ub29scy9idW5kbGVidWlsZGVyLnB5CkBAIC0yNzAsNyArMjcwLDcgQEAKIGRlbCBfX2xvYWQKICIiIgogCi1NQVlNSVNTX01PRFVMRVMgPSBbJ21hYycsICdvczInLCAnbnQnLCAnbnRwYXRoJywgJ2RvcycsICdkb3NwYXRoJywKK01BWU1JU1NfTU9EVUxFUyA9IFsnbWFjJywgJ250JywgJ250cGF0aCcsICdkb3MnLCAnZG9zcGF0aCcsCiAgICAgJ3dpbjMyYXBpJywgJ2NlJywgJ193aW5yZWcnLCAnbnR1cmwycGF0aCcsICdzaXRlY3VzdG9taXplJywKICAgICAnb3JnLnB5dGhvbi5jb3JlJywgJ3Jpc2NvcycsICdyaXNjb3NlbnZpcm9uJywgJ3Jpc2Nvc3BhdGgnCiBdCmRpZmYgLS1naXQgYS9NYWMvVG9vbHMvcGxpc3RsaWJfZ2VuZXJhdGVfdGVzdGRhdGEucHkgYi9NYWMvVG9vbHMvcGxpc3RsaWJfZ2VuZXJhdGVfdGVzdGRhdGEucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMDU3YjYxNwotLS0gL2Rldi9udWxsCisrKyBiL01hYy9Ub29scy9wbGlzdGxpYl9nZW5lcmF0ZV90ZXN0ZGF0YS5weQpAQCAtMCwwICsxLDEwMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworCitmcm9tIENvY29hIGltcG9ydCBOU011dGFibGVEaWN0aW9uYXJ5LCBOU011dGFibGVBcnJheSwgTlNTdHJpbmcsIE5TRGF0ZSwgTlNOdW1iZXIKK2Zyb20gQ29jb2EgaW1wb3J0IE5TUHJvcGVydHlMaXN0U2VyaWFsaXphdGlvbiwgTlNQcm9wZXJ0eUxpc3RPcGVuU3RlcEZvcm1hdAorZnJvbSBDb2NvYSBpbXBvcnQgTlNQcm9wZXJ0eUxpc3RYTUxGb3JtYXRfdjFfMCwgTlNQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMAorZnJvbSBDb2NvYSBpbXBvcnQgQ0ZVVUlEQ3JlYXRlRnJvbVN0cmluZywgTlNOdWxsLCBOU1VVSUQsIENGUHJvcGVydHlMaXN0Q3JlYXRlRGF0YQorZnJvbSBDb2NvYSBpbXBvcnQgTlNVUkwKKworaW1wb3J0IGRhdGV0aW1lCitmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBPcmRlcmVkRGljdAoraW1wb3J0IGJpbmFzY2lpCisKK0ZPUk1BVFM9WworIyAgICAoJ29wZW5zdGVwJywgTlNQcm9wZXJ0eUxpc3RPcGVuU3RlcEZvcm1hdCksCisgICAgKCdwbGlzdGxpYi5GTVRfWE1MJywgTlNQcm9wZXJ0eUxpc3RYTUxGb3JtYXRfdjFfMCksCisgICAgKCdwbGlzdGxpYi5GTVRfQklOQVJZJywgTlNQcm9wZXJ0eUxpc3RCaW5hcnlGb3JtYXRfdjFfMCksCitdCisKK2RlZiBuc3N0cih2YWx1ZSk6CisgICAgcmV0dXJuIE5TU3RyaW5nLmFsbG9jKCkuaW5pdFdpdGhTdHJpbmdfKHZhbHVlKQorCisKK2RlZiBtYWluKCk6CisgICAgcGwgPSBPcmRlcmVkRGljdCgpCisKKyAgICAjIE5vdGU6IHBsIGlzIGFuIE9yZGVyZWREaWN0IHRvIGNvbnRyb2wgdGhlIG9yZGVyCisgICAgIyBvZiBrZXlzLCBhbmQgaGVuY2UgaGF2ZSBzb21lIGNvbnRyb2wgb24gdGhlIHN0cnVjdHVyZQorICAgICMgb2YgdGhlIG91dHB1dCBmaWxlLgorICAgICMgTmV3IGtleXMgc2hvdWxkIGJlIGFkZGVkIGluIGFscGhhYmV0aWNhbCBvcmRlci4KKworICAgIHNlY29uZHMgPSBkYXRldGltZS5kYXRldGltZSgyMDA0LCAxMCwgMjYsIDEwLCAzMywgMzMsIHR6aW5mbz1kYXRldGltZS50aW1lem9uZShkYXRldGltZS50aW1lZGVsdGEoMCkpKS50aW1lc3RhbXAoKQorICAgIHBsW25zc3RyKCdhQmlnSW50JyldID0gMiAqKiA2MyAtIDQ0CisgICAgcGxbbnNzdHIoJ2FCaWdJbnQyJyldID0gTlNOdW1iZXIubnVtYmVyV2l0aFVuc2lnbmVkTG9uZ0xvbmdfKDIgKiogNjMgKyA0NCkKKyAgICBwbFtuc3N0cignYURhdGUnKV0gPSBOU0RhdGUuZGF0ZVdpdGhUaW1lSW50ZXJ2YWxTaW5jZTE5NzBfKHNlY29uZHMpCisKKyAgICBwbFtuc3N0cignYURpY3QnKV0gPSBkID0gT3JkZXJlZERpY3QoKQorICAgIGRbbnNzdHIoJ2FGYWxzZVZhbHVlJyldID0gRmFsc2UKKyAgICBkW25zc3RyKCdhVHJ1ZVZhbHVlJyldID0gVHJ1ZQorICAgIGRbbnNzdHIoJ2FVbmljb2RlVmFsdWUnKV0gPSAiTVx4ZTRzc2lnLCBNYVx4ZGYiCisgICAgZFtuc3N0cignYW5vdGhlclN0cmluZycpXSA9ICI8aGVsbG8gJiAnaGknIHRoZXJlIT4iCisgICAgZFtuc3N0cignZGVlcGVyRGljdCcpXSA9IGRkID0gT3JkZXJlZERpY3QoKQorICAgIGRkW25zc3RyKCdhJyldID0gMTcKKyAgICBkZFtuc3N0cignYicpXSA9IDMyLjUKKyAgICBkZFtuc3N0cignYycpXSA9IGEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKDEpCisgICAgYS5hcHBlbmQoMikKKyAgICBhLmFwcGVuZChuc3N0cigndGV4dCcpKQorCisgICAgcGxbbnNzdHIoJ2FGbG9hdCcpXSA9IDAuNQorCisgICAgcGxbbnNzdHIoJ2FMaXN0JyldID0gYSA9IE5TTXV0YWJsZUFycmF5LmFsbG9jKCkuaW5pdCgpCisgICAgYS5hcHBlbmQobnNzdHIoJ0EnKSkKKyAgICBhLmFwcGVuZChuc3N0cignQicpKQorICAgIGEuYXBwZW5kKDEyKQorICAgIGEuYXBwZW5kKDMyLjUpCisgICAgYWEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKGFhKQorICAgIGFhLmFwcGVuZCgxKQorICAgIGFhLmFwcGVuZCgyKQorICAgIGFhLmFwcGVuZCgzKQorCisgICAgcGxbbnNzdHIoJ2FOZWdhdGl2ZUJpZ0ludCcpXSA9IC04MDAwMDAwMDAwMAorICAgIHBsW25zc3RyKCdhTmVnYXRpdmVJbnQnKV0gPSAtNQorICAgIHBsW25zc3RyKCdhU3RyaW5nJyldID0gbnNzdHIoJ0Rvb2RhaCcpCisKKyAgICBwbFtuc3N0cignYW5FbXB0eURpY3QnKV0gPSBOU011dGFibGVEaWN0aW9uYXJ5LmFsbG9jKCkuaW5pdCgpCisKKyAgICBwbFtuc3N0cignYW5FbXB0eUxpc3QnKV0gPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorCisgICAgcGxbbnNzdHIoJ2FuSW50JyldID0gNzI4CisKKyAgICBwbFtuc3N0cignbmVzdGVkRGF0YScpXSA9IGEgPSBOU011dGFibGVBcnJheS5hbGxvYygpLmluaXQoKQorICAgIGEuYXBwZW5kKGInJyc8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzJycnKQorCisKKyAgICBwbFtuc3N0cignc29tZURhdGEnKV0gPSBiJzxiaW5hcnkgZ3Vuaz4nCisKKyAgICBwbFtuc3N0cignc29tZU1vcmVEYXRhJyldID0gYicnJzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDM8bG90cyBvZiBiaW5hcnkgZ3Vuaz5ceDAwXHgwMVx4MDJceDAzPGxvdHMgb2YgYmluYXJ5IGd1bms+XHgwMFx4MDFceDAyXHgwMzxsb3RzIG9mIGJpbmFyeSBndW5rPlx4MDBceDAxXHgwMlx4MDMnJycKKworICAgIHBsW25zc3RyKCdceGM1YmVucmFhJyldID0gbnNzdHIoIlRoYXQgd2FzIGEgdW5pY29kZSBrZXkuIikKKworICAgIHByaW50KCJURVNUREFUQT17IikKKyAgICBmb3IgZm10X25hbWUsIGZtdF9rZXkgaW4gRk9STUFUUzoKKyAgICAgICAgZGF0YSwgZXJyb3IgPSBOU1Byb3BlcnR5TGlzdFNlcmlhbGl6YXRpb24uZGF0YVdpdGhQcm9wZXJ0eUxpc3RfZm9ybWF0X29wdGlvbnNfZXJyb3JfKAorICAgICAgICAgICAgcGwsIGZtdF9rZXksIDAsIE5vbmUpCisgICAgICAgIGlmIGRhdGEgaXMgTm9uZToKKyAgICAgICAgICAgIHByaW50KCJDYW5ub3Qgc2VyaWFsaXplIiwgZm10X25hbWUsIGVycm9yKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludCgiICAgICVzOiBiaW5hc2NpaS5hMmJfYmFzZTY0KGInJydcbiAgICAgICAgJXMnJycpLCIlKGZtdF9uYW1lLCBfZW5jb2RlX2Jhc2U2NChieXRlcyhkYXRhKSkuZGVjb2RlKCdhc2NpaScpWzotMV0pKQorCisgICAgcHJpbnQoIn0iKQorICAgIHByaW50KCkKKworZGVmIF9lbmNvZGVfYmFzZTY0KHMsIG1heGxpbmVsZW5ndGg9NjApOgorICAgIG1heGJpbnNpemUgPSAobWF4bGluZWxlbmd0aC8vNCkqMworICAgIHBpZWNlcyA9IFtdCisgICAgZm9yIGkgaW4gcmFuZ2UoMCwgbGVuKHMpLCBtYXhiaW5zaXplKToKKyAgICAgICAgY2h1bmsgPSBzW2kgOiBpICsgbWF4Ymluc2l6ZV0KKyAgICAgICAgcGllY2VzLmFwcGVuZChiaW5hc2NpaS5iMmFfYmFzZTY0KGNodW5rKSkKKyAgICByZXR1cm4gYicgICAgICAgICcuam9pbihwaWVjZXMpCisKK21haW4oKQpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUucHJlLmluIGIvTWFrZWZpbGUucHJlLmluCmluZGV4IGZkY2EzOGUuLmUxOWZjMDAgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnByZS5pbgorKysgYi9NYWtlZmlsZS5wcmUuaW4KQEAgLTcxLDEyICs3MSwxNyBAQAogQkFTRUNGTEFHUz0JQEJBU0VDRkxBR1NACiBCQVNFQ1BQRkxBR1M9CUBCQVNFQ1BQRkxBR1NACiBDT05GSUdVUkVfQ0ZMQUdTPQlAQ0ZMQUdTQAorIyBDRkxBR1NfTk9ESVNUIGlzIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbnRlcnByZXRlciBhbmQgc3RkbGliIEMgZXh0ZW5zaW9ucy4KKyMgVXNlIGl0IHdoZW4gYSBjb21waWxlciBmbGFnIHNob3VsZCBfbm90XyBiZSBwYXJ0IG9mIHRoZSBkaXN0dXRpbHMgQ0ZMQUdTCisjIG9uY2UgUHl0aG9uIGlzIGluc3RhbGxlZCAoSXNzdWUgIzIxMTIxKS4KK0NPTkZJR1VSRV9DRkxBR1NfTk9ESVNUPUBDRkxBR1NfTk9ESVNUQAogQ09ORklHVVJFX0NQUEZMQUdTPQlAQ1BQRkxBR1NACiBDT05GSUdVUkVfTERGTEFHUz0JQExERkxBR1NACiAjIEF2b2lkIGFzc2lnbmluZyBDRkxBR1MsIExERkxBR1MsIGV0Yy4gc28gdXNlcnMgY2FuIHVzZSB0aGVtIG9uIHRoZQogIyBjb21tYW5kIGxpbmUgdG8gYXBwZW5kIHRvIHRoZXNlIHZhbHVlcyB3aXRob3V0IHN0b21waW5nIHRoZSBwcmUtc2V0CiAjIHZhbHVlcy4KIFBZX0NGTEFHUz0JJChCQVNFQ0ZMQUdTKSAkKE9QVCkgJChDT05GSUdVUkVfQ0ZMQUdTKSAkKENGTEFHUykgJChFWFRSQV9DRkxBR1MpCitQWV9DRkxBR1NfTk9ESVNUPSQoQ09ORklHVVJFX0NGTEFHU19OT0RJU1QpICQoQ0ZMQUdTX05PRElTVCkKICMgQm90aCBDUFBGTEFHUyBhbmQgTERGTEFHUyBuZWVkIHRvIGNvbnRhaW4gdGhlIHNoZWxsJ3MgdmFsdWUgZm9yIHNldHVwLnB5IHRvCiAjIGJlIGFibGUgdG8gYnVpbGQgZXh0ZW5zaW9uIG1vZHVsZXMgdXNpbmcgdGhlIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBpbiB0aGUKICMgZW52aXJvbm1lbnQgdmFyaWFibGVzCkBAIC05MSw3ICs5Niw3IEBACiAjIEV4dHJhIEMgZmxhZ3MgYWRkZWQgZm9yIGJ1aWxkaW5nIHRoZSBpbnRlcnByZXRlciBvYmplY3QgZmlsZXMuCiBDRkxBR1NGT1JTSEFSRUQ9QENGTEFHU0ZPUlNIQVJFREAKICMgQyBmbGFncyB1c2VkIGZvciBidWlsZGluZyB0aGUgaW50ZXJwcmV0ZXIgb2JqZWN0IGZpbGVzCi1QWV9DT1JFX0NGTEFHUz0JJChQWV9DRkxBR1MpICQoUFlfQ1BQRkxBR1MpICQoQ0ZMQUdTRk9SU0hBUkVEKSAtRFB5X0JVSUxEX0NPUkUKK1BZX0NPUkVfQ0ZMQUdTPQkkKFBZX0NGTEFHUykgJChQWV9DRkxBR1NfTk9ESVNUKSAkKFBZX0NQUEZMQUdTKSAkKENGTEFHU0ZPUlNIQVJFRCkgLURQeV9CVUlMRF9DT1JFCiAKIAogIyBNYWNoaW5lLWRlcGVuZGVudCBzdWJkaXJlY3RvcmllcwpAQCAtMTI3LDcgKzEzMiw2IEBACiAjIFN5bWJvbHMgdXNlZCBmb3IgdXNpbmcgc2hhcmVkIGxpYnJhcmllcwogU0hMSUJfU1VGRklYPQlAU0hMSUJfU1VGRklYQAogRVhUX1NVRkZJWD0JQEVYVF9TVUZGSVhACi1TTz0JCSQoU0hMSUJfU1VGRklYKQogTERTSEFSRUQ9CUBMRFNIQVJFREAgJChQWV9MREZMQUdTKQogQkxEU0hBUkVEPQlAQkxEU0hBUkVEQCAkKFBZX0xERkxBR1MpCiBMRENYWFNIQVJFRD0JQExEQ1hYU0hBUkVEQApAQCAtMTQ5LDEyICsxNTMsMjEgQEAKIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD1AQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVEAKIEBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUQGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKIAorIyBPcHRpb24gdG8gaW5zdGFsbCB0byBzdHJpcCBiaW5hcmllcworU1RSSVBGTEFHPS1zCisKKyMgRmxhZ3MgdG8gbGlwbyB0byBwcm9kdWNlIGEgMzItYml0LW9ubHkgdW5pdmVyc2FsIGV4ZWN1dGFibGUKK0xJUE9fMzJCSVRfRkxBR1M9QExJUE9fMzJCSVRfRkxBR1NACisKICMgT3B0aW9ucyB0byBlbmFibGUgcHJlYmluZGluZyAoZm9yIGZhc3Qgc3RhcnR1cCBwcmlvciB0byBNYWMgT1MgWCAxMC4zKQogT1RIRVJfTElCVE9PTF9PUFQ9QE9USEVSX0xJQlRPT0xfT1BUQAogCiAjIEVudmlyb25tZW50IHRvIHJ1biBzaGFyZWQgcHl0aG9uIHdpdGhvdXQgaW5zdGFsbGVkIGxpYnJhcmllcwogUlVOU0hBUkVEPSAgICAgICBAUlVOU0hBUkVEQAogCisjIGVuc3VyZXBpcCBvcHRpb25zCitFTlNVUkVQSVA9ICAgICAgQEVOU1VSRVBJUEAKKwogIyBNb2RlcyBmb3IgZGlyZWN0b3JpZXMsIGV4ZWN1dGFibGVzIGFuZCBkYXRhIGZpbGVzIGNyZWF0ZWQgYnkgdGhlCiAjIGluc3RhbGwgcHJvY2Vzcy4gIERlZmF1bHQgdG8gdXNlci1vbmx5LXdyaXRhYmxlIGZvciBhbGwgZmlsZSB0eXBlcy4KIERJUk1PREU9CTc1NQpAQCAtMjE2LDYgKzIyOSwxMiBAQAogUFJPRklMRV9UQVNLPQkkKHNyY2RpcikvVG9vbHMvcHliZW5jaC9weWJlbmNoLnB5IC1uIDIgLS13aXRoLWdjIC0td2l0aC1zeXNjaGVjawogI1BST0ZJTEVfVEFTSz0JJChzcmNkaXIpL0xpYi90ZXN0L3JlZ3J0ZXN0LnB5CiAKKyMgcmVwb3J0IGZpbGVzIGZvciBnY292IC8gbGNvdiBjb3ZlcmFnZSByZXBvcnQKK0NPVkVSQUdFX0lORk89CSQoYWJzX2J1aWxkZGlyKS9jb3ZlcmFnZS5pbmZvCitDT1ZFUkFHRV9SRVBPUlQ9JChhYnNfYnVpbGRkaXIpL2xjb3YtcmVwb3J0CitDT1ZFUkFHRV9SRVBPUlRfT1BUSU9OUz0tLW5vLWJyYW5jaC1jb3ZlcmFnZSAtLXRpdGxlICJDUHl0aG9uIGxjb3YgcmVwb3J0IgorCisKICMgPT09IERlZmluaXRpb25zIGFkZGVkIGJ5IG1ha2VzZXR1cCA9PT0KIAogCkBAIC0zMTcsNyArMzM2LDggQEAKIEFTVF9BU0RMPQkkKHNyY2RpcikvUGFyc2VyL1B5dGhvbi5hc2RsCiAKIEFTRExHRU5fRklMRVM9CSQoc3JjZGlyKS9QYXJzZXIvYXNkbC5weSAkKHNyY2RpcikvUGFyc2VyL2FzZGxfYy5weQotIyBYWFggTm90ZSB0aGF0IGEgYnVpbGQgbm93IHJlcXVpcmVzIFB5dGhvbiBleGlzdCBiZWZvcmUgdGhlIGJ1aWxkIHN0YXJ0cworIyBOb3RlIHRoYXQgYSBidWlsZCBub3cgcmVxdWlyZXMgUHl0aG9uIHRvIGV4aXN0IGJlZm9yZSB0aGUgYnVpbGQgc3RhcnRzLgorIyBVc2UgImhnIHRvdWNoIiB0byBmaXggdXAgc2NyZXdlZCB1cCBmaWxlIG10aW1lcyBpbiBhIGNoZWNrb3V0LgogQVNETEdFTj0JQEFTRExHRU5AICQoc3JjZGlyKS9QYXJzZXIvYXNkbF9jLnB5CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0zNjEsNiArMzgxLDcgQEAKIAkJUHl0aG9uL3B5YXJlbmEubyBcCiAJCVB5dGhvbi9weWN0eXBlLm8gXAogCQlQeXRob24vcHlmcGUubyBcCisJCVB5dGhvbi9weWhhc2gubyBcCiAJCVB5dGhvbi9weW1hdGgubyBcCiAJCVB5dGhvbi9weXN0YXRlLm8gXAogCQlQeXRob24vcHl0aG9ucnVuLm8gXApAQCAtNDQ0LDcgKzQ2NSw3IEBACiAKICMgRGVmYXVsdCB0YXJnZXQKIGFsbDoJCWJ1aWxkX2FsbAotYnVpbGRfYWxsOgkkKEJVSUxEUFlUSE9OKSBvbGRzaGFyZWRtb2RzIHNoYXJlZG1vZHMgZ2RiaG9va3MgTW9kdWxlcy9fdGVzdGVtYmVkCitidWlsZF9hbGw6CSQoQlVJTERQWVRIT04pIG9sZHNoYXJlZG1vZHMgc2hhcmVkbW9kcyBnZGJob29rcyBNb2R1bGVzL190ZXN0ZW1iZWQgcHl0aG9uLWNvbmZpZwogCiAjIENvbXBpbGUgYSBiaW5hcnkgd2l0aCBnY2MgcHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uLgogcHJvZmlsZS1vcHQ6CkBAIC00NTksMjAgKzQ4MCw2MiBAQAogCSQoTUFLRSkgYnVpbGRfYWxsX3VzZV9wcm9maWxlCiAKIGJ1aWxkX2FsbF9nZW5lcmF0ZV9wcm9maWxlOgotCSQoTUFLRSkgYWxsIENGTEFHUz0iJChDRkxBR1MpIC1mcHJvZmlsZS1nZW5lcmF0ZSIgTElCUz0iJChMSUJTKSAtbGdjb3YiCisJJChNQUtFKSBhbGwgQ0ZMQUdTX05PRElTVD0iJChDRkxBR1MpIC1mcHJvZmlsZS1nZW5lcmF0ZSIgTERGTEFHUz0iLWZwcm9maWxlLWdlbmVyYXRlIiBMSUJTPSIkKExJQlMpIC1sZ2NvdiIKIAogcnVuX3Byb2ZpbGVfdGFzazoKIAk6ICMgRklYTUU6IGNhbid0IHJ1biBmb3IgYSBjcm9zcyBidWlsZAogCSQoUlVOU0hBUkVEKSAuLyQoQlVJTERQWVRIT04pICQoUFJPRklMRV9UQVNLKQogCiBidWlsZF9hbGxfdXNlX3Byb2ZpbGU6Ci0JJChNQUtFKSBhbGwgQ0ZMQUdTPSIkKENGTEFHUykgLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKKwkkKE1BS0UpIGFsbCBDRkxBR1NfTk9ESVNUPSIkKENGTEFHUykgLWZwcm9maWxlLXVzZSAtZnByb2ZpbGUtY29ycmVjdGlvbiIKIAorIyBDb21waWxlIGFuZCBydW4gd2l0aCBnY292CisuUEhPTlk9Y292ZXJhZ2UgY292ZXJhZ2UtbGNvdiBjb3ZlcmFnZS1yZXBvcnQKIGNvdmVyYWdlOgogCUBlY2hvICJCdWlsZGluZyB3aXRoIHN1cHBvcnQgZm9yIGNvdmVyYWdlIGNoZWNraW5nOiIKLQkkKE1BS0UpIGNsZWFuCisJJChNQUtFKSBjbGVhbiBwcm9maWxlLXJlbW92YWwKIAkkKE1BS0UpIGFsbCBDRkxBR1M9IiQoQ0ZMQUdTKSAtTzAgLXBnIC1mcHJvZmlsZS1hcmNzIC1mdGVzdC1jb3ZlcmFnZSIgTElCUz0iJChMSUJTKSAtbGdjb3YiCiAKK2NvdmVyYWdlLWxjb3Y6CisJQGVjaG8gIkNyZWF0aW5nIENvdmVyYWdlIEhUTUwgcmVwb3J0IHdpdGggTENPVjoiCisJQHJtIC1mICQoQ09WRVJBR0VfSU5GTykKKwlAcm0gLXJmICQoQ09WRVJBR0VfUkVQT1JUKQorCUBsY292IC0tY2FwdHVyZSAtLWRpcmVjdG9yeSAkKGFic19idWlsZGRpcikgXAorCSAgICAtLWJhc2UtZGlyZWN0b3J5ICQocmVhbHBhdGggJChhYnNfYnVpbGRkaXIpKSBcCisJICAgIC0tcGF0aCAkKHJlYWxwYXRoICQoYWJzX3NyY2RpcikpIFwKKwkgICAgLS1vdXRwdXQtZmlsZSAkKENPVkVSQUdFX0lORk8pCisJOiAjIHJlbW92ZSAzcmQgcGFydHkgbW9kdWxlcyBhbmQgc3lzdGVtIGhlYWRlcnMKKwlAbGNvdiAtLXJlbW92ZSAkKENPVkVSQUdFX0lORk8pIFwKKwkgICAgJyovTW9kdWxlcy9fY3R5cGVzL2xpYmZmaSovKicgXAorCSAgICAnKi9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjLyonIFwKKwkgICAgJyovTW9kdWxlcy9leHBhdC8qJyBcCisJICAgICcqL01vZHVsZXMvemxpYi8qJyBcCisJICAgICcqL0luY2x1ZGUvKicgXAorCSAgICAnL3Vzci9pbmNsdWRlLyonIFwKKwkgICAgJy91c3IvbG9jYWwvaW5jbHVkZS8qJyBcCisJICAgIC0tb3V0cHV0LWZpbGUgJChDT1ZFUkFHRV9JTkZPKQorCUBnZW5odG1sICQoQ09WRVJBR0VfSU5GTykgLS1vdXRwdXQtZGlyZWN0b3J5ICQoQ09WRVJBR0VfUkVQT1JUKSBcCisJICAgICQoQ09WRVJBR0VfUkVQT1JUX09QVElPTlMpCisJQGVjaG8KKwlAZWNobyAibGNvdiByZXBvcnQgYXQgJChDT1ZFUkFHRV9SRVBPUlQpL2luZGV4Lmh0bWwiCisJQGVjaG8KKworY292ZXJhZ2UtcmVwb3J0OgorCTogIyBmb3JjZSByZWJ1aWxkaW5nIG9mIHBhcnNlciBhbmQgaW1wb3J0bGliCisJQHRvdWNoICQoR1JBTU1BUl9JTlBVVCkKKwlAdG91Y2ggJChzcmNkaXIpL0xpYi9pbXBvcnRsaWIvX2Jvb3RzdHJhcC5weQorCTogIyBidWlsZCB3aXRoIGNvdmVyYWdlIGluZm8KKwkkKE1BS0UpIGNvdmVyYWdlCisJOiAjIHJ1biB0ZXN0cywgaWdub3JlIGZhaWx1cmVzCisJJChURVNUUlVOTkVSKSAkKFRFU1RPUFRTKSB8fCB0cnVlCisJOiAjIGJ1aWxkIGxjb3YgcmVwb3J0CisJJChNQUtFKSBjb3ZlcmFnZS1sY292CisKKyMgUnVuICJBcmd1bWVudCBDbGluaWMiIG92ZXIgYWxsIHNvdXJjZSBmaWxlcworIyAoZGVwZW5kcyBvbiBweXRob24gaGF2aW5nIGFscmVhZHkgYmVlbiBidWlsdCkKKy5QSE9OWT1jbGluaWMKK2NsaW5pYzogJChCVUlMRFBZVEhPTikKKwkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAuL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkgLS1tYWtlCiAKICMgQnVpbGQgdGhlIGludGVycHJldGVyCiAkKEJVSUxEUFlUSE9OKToJTW9kdWxlcy9weXRob24ubyAkKExJQlJBUlkpICQoTERMSUJSQVJZKSAkKFBZM0xJQlJBUlkpCkBAIC00ODQsOCArNTQ3LDE4IEBACiAjIENyZWF0ZSBidWlsZCBkaXJlY3RvcnkgYW5kIGdlbmVyYXRlIHRoZSBzeXNjb25maWcgYnVpbGQtdGltZSBkYXRhIHRoZXJlLgogIyBweWJ1aWxkZGlyLnR4dCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgYnVpbGQgZGlyIGFuZCBpcyB1c2VkIGZvcgogIyBzeXMucGF0aCBmaXh1cCAtLSBzZWUgTW9kdWxlcy9nZXRwYXRoLmMuCisjIFNpbmNlIHRoaXMgc3RlcCBydW5zIGJlZm9yZSBzaGFyZWQgbW9kdWxlcyBhcmUgYnVpbHQsIHRyeSB0byBhdm9pZCBib290c3RyYXAKKyMgcHJvYmxlbXMgYnkgY3JlYXRpbmcgYSBkdW1teSBweWJ1aWxkZGlyLnR4dCBqdXN0IHRvIGFsbG93IGludGVycHJldGVyCisjIGluaXRpYWxpemF0aW9uIHRvIHN1Y2NlZWQuICBJdCB3aWxsIGJlIG92ZXJ3cml0dGVuIGJ5IGdlbmVyYXRlLXBvc2l4LXZhcnMKKyMgb3IgcmVtb3ZlZCBpbiBjYXNlIG9mIGZhaWx1cmUuCiBweWJ1aWxkZGlyLnR4dDogJChCVUlMRFBZVEhPTikKLQkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtUyAtbSBzeXNjb25maWcgLS1nZW5lcmF0ZS1wb3NpeC12YXJzCisJQGVjaG8gIm5vbmUiID4gLi9weWJ1aWxkZGlyLnR4dAorCSQoUlVOU0hBUkVEKSAkKFBZVEhPTl9GT1JfQlVJTEQpIC1TIC1tIHN5c2NvbmZpZyAtLWdlbmVyYXRlLXBvc2l4LXZhcnMgO1wKKwlpZiB0ZXN0ICQkPyAtbmUgMCA7IHRoZW4gXAorCQllY2hvICJnZW5lcmF0ZS1wb3NpeC12YXJzIGZhaWxlZCIgOyBcCisJCXJtIC1mIC4vcHlidWlsZGRpci50eHQgOyBcCisJCWV4aXQgMSA7IFwKKwlmaQogCiAjIEJ1aWxkIHRoZSBzaGFyZWQgbW9kdWxlcwogIyBVbmRlciBHTlUgbWFrZSwgTUFLRUZMQUdTIGFyZSBzb3J0ZWQgYW5kIG5vcm1hbGl6ZWQ7IHRoZSAncycgZm9yCkBAIC02NDYsNiArNzE5LDggQEAKIE1vZHVsZXMvX3Rlc3RlbWJlZC5vOiAkKHNyY2RpcikvTW9kdWxlcy9fdGVzdGVtYmVkLmMKIAkkKE1BSU5DQykgLWMgJChQWV9DT1JFX0NGTEFHUykgLW8gJEAgJChzcmNkaXIpL01vZHVsZXMvX3Rlc3RlbWJlZC5jCiAKK01vZHVsZXMvX3NyZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9fc3JlLmMgJChzcmNkaXIpL01vZHVsZXMvc3JlLmggJChzcmNkaXIpL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oICQoc3JjZGlyKS9Nb2R1bGVzL3NyZV9saWIuaAorCiBNb2R1bGVzL3Bvc2l4bW9kdWxlLm86ICQoc3JjZGlyKS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMgJChzcmNkaXIpL01vZHVsZXMvcG9zaXhtb2R1bGUuaAogCiBNb2R1bGVzL2dycG1vZHVsZS5vOiAkKHNyY2RpcikvTW9kdWxlcy9ncnBtb2R1bGUuYyAkKHNyY2RpcikvTW9kdWxlcy9wb3NpeG1vZHVsZS5oCkBAIC03MTMsMjcgKzc4OCwzMSBAQAogCQkJCSQoc3JjZGlyKS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKIAogQllURVNUUl9ERVBTID0gXAotCQkkKHNyY2RpcikvSW5jbHVkZS9ieXRlc19tZXRob2RzLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvY291bnQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9jdHlwZS5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2VxLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaCBcCi0JCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvam9pbi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmggXAotCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oIFwKLQkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3RyYW5zbW9ncmlmeS5oCiAKLVVOSUNPREVfREVQUyA9ICQoQllURVNUUl9ERVBTKSBcCitVTklDT0RFX0RFUFMgPSBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2NvZGVjcy5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2NvdW50LmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL2ZpbmQuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmggXAorCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvbG9jYWxldXRpbC5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3BhcnRpdGlvbi5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3JlcGxhY2UuaCBcCisJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIFwKIAkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oIFwKKwkJJChzcmNkaXIpL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmggXAogCQkkKHNyY2RpcikvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaCBcCiAJCSQoc3JjZGlyKS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCiAKQEAgLTc1MSw5ICs4MzAsNiBAQAogCiBQeXRob24vY2V2YWwubzogJChPUENPREVUQVJHRVRTX0gpICQoc3JjZGlyKS9QeXRob24vY2V2YWxfZ2lsLmgKIAotUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLm86ICQoc3JjZGlyKS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYyBcCi0JCQkJJChCWVRFU1RSX0RFUFMpCi0KIFB5dGhvbi9mcm96ZW4ubzogUHl0aG9uL2ltcG9ydGxpYi5oCiAKIE9iamVjdHMvdHlwZW9iamVjdC5vOiBPYmplY3RzL3R5cGVzbG90cy5pbmMKQEAgLTgyMyw2ICs4OTksNyBAQAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWRlYnVnLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWVycm9ycy5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHlmcGUuaCBcCisJCSQoc3JjZGlyKS9JbmNsdWRlL3B5aGFzaC5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHltYXRoLmggXAogCQkkKHNyY2RpcikvSW5jbHVkZS9weWdldG9wdC5oIFwKIAkJJChzcmNkaXIpL0luY2x1ZGUvcHltYWNyby5oIFwKQEAgLTkwMSwxNiArOTc4LDM4IEBACiAKIFFVSUNLVEVTVE9QVFM9CSQoVEVTVE9QVFMpIC14IHRlc3Rfc3VicHJvY2VzcyB0ZXN0X2lvIHRlc3RfbGliMnRvMyBcCiAJCXRlc3RfbXVsdGlieXRlY29kZWMgdGVzdF91cmxsaWIyX2xvY2FsbmV0IHRlc3RfaXRlcnRvb2xzIFwKLQkJdGVzdF9tdWx0aXByb2Nlc3NpbmcgdGVzdF9tYWlsYm94IHRlc3Rfc29ja2V0IHRlc3RfcG9sbCBcCisJCXRlc3RfbXVsdGlwcm9jZXNzaW5nX2ZvcmsgdGVzdF9tdWx0aXByb2Nlc3Npbmdfc3Bhd24gXAorCQl0ZXN0X211bHRpcHJvY2Vzc2luZ19mb3Jrc2VydmVyIFwKKwkJdGVzdF9tYWlsYm94IHRlc3Rfc29ja2V0IHRlc3RfcG9sbCBcCiAJCXRlc3Rfc2VsZWN0IHRlc3RfemlwZmlsZSB0ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcwogcXVpY2t0ZXN0OglhbGwgcGxhdGZvcm0KIAkJJChURVNUUlVOTkVSKSAkKFFVSUNLVEVTVE9QVFMpCiAKIAotaW5zdGFsbDogYWx0aW5zdGFsbCBiaW5pbnN0YWxsIG1hbmluc3RhbGwKK2luc3RhbGw6IEBGUkFNRVdPUktJTlNUQUxMRklSU1RAIGNvbW1vbmluc3RhbGwgYmluaW5zdGFsbCBtYW5pbnN0YWxsIEBGUkFNRVdPUktJTlNUQUxMTEFTVEAKKwlpZiB0ZXN0ICJ4JChFTlNVUkVQSVApIiAhPSAieG5vIiAgOyB0aGVuIFwKKwkJY2FzZSAkKEVOU1VSRVBJUCkgaW4gXAorCQkJdXBncmFkZSkgZW5zdXJlcGlwPSItLXVwZ3JhZGUiIDs7IFwKKwkJCWluc3RhbGx8KikgZW5zdXJlcGlwPSIiIDs7IFwKKwkJZXNhYzsgXAorCQkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtbSBlbnN1cmVwaXAgXAorCQkJJCRlbnN1cmVwaXAgLS1yb290PSQoREVTVERJUikvIDsgXAorCWZpCiAKLWFsdGluc3RhbGw6CUBGUkFNRVdPUktBTFRJTlNUQUxMRklSU1RAIGFsdGJpbmluc3RhbGwgbGliaW5zdGFsbCBpbmNsaW5zdGFsbCBsaWJhaW5zdGFsbCBcCi0gICAgICAgICAgICAgICAgc2hhcmVkaW5zdGFsbCBvbGRzaGFyZWRpbnN0YWxsIGFsdG1hbmluc3RhbGwgQEZSQU1FV09SS0FMVElOU1RBTExMQVNUQAorYWx0aW5zdGFsbDogY29tbW9uaW5zdGFsbAorCWlmIHRlc3QgIngkKEVOU1VSRVBJUCkiICE9ICJ4bm8iICA7IHRoZW4gXAorCQljYXNlICQoRU5TVVJFUElQKSBpbiBcCisJCQl1cGdyYWRlKSBlbnN1cmVwaXA9Ii0tYWx0aW5zdGFsbCAtLXVwZ3JhZGUiIDs7IFwKKwkJCWluc3RhbGx8KikgZW5zdXJlcGlwPSItLWFsdGluc3RhbGwiIDs7IFwKKwkJZXNhYzsgXAorCQkkKFJVTlNIQVJFRCkgJChQWVRIT05fRk9SX0JVSUxEKSAtbSBlbnN1cmVwaXAgXAorCQkJJCRlbnN1cmVwaXAgLS1yb290PSQoREVTVERJUikvIDsgXAorCWZpCisKK2NvbW1vbmluc3RhbGw6ICBARlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUQCBcCisJCWFsdGJpbmluc3RhbGwgbGliaW5zdGFsbCBpbmNsaW5zdGFsbCBsaWJhaW5zdGFsbCBcCisJCXNoYXJlZGluc3RhbGwgb2xkc2hhcmVkaW5zdGFsbCBhbHRtYW5pbnN0YWxsIFwKKwkJQEZSQU1FV09SS0FMVElOU1RBTExMQVNUQAogCiAjIEluc3RhbGwgc2hhcmVkIGxpYnJhcmllcyBlbmFibGVkIGJ5IFNldHVwCiBERVNURElSUz0JJChleGVjX3ByZWZpeCkgJChMSUJESVIpICQoQklOTElCREVTVCkgJChERVNUU0hBUkVEKQpAQCAtOTM1LDcgKzEwMzQsNyBAQAogCiAjIEluc3RhbGwgdGhlIGludGVycHJldGVyIHdpdGggJChWRVJTSU9OKSBhZmZpeGVkCiAjIFRoaXMgZ29lcyBpbnRvICQoZXhlY19wcmVmaXgpCi1hbHRiaW5pbnN0YWxsOiAkKEJVSUxEUFlUSE9OKQorYWx0YmluaW5zdGFsbDogJChCVUlMRFBZVEhPTikgQEZSQU1FV09SS1BZVEhPTldACiAJQGZvciBpIGluICQoQklORElSKSAkKExJQkRJUik7IFwKIAlkbyBcCiAJCWlmIHRlc3QgISAtZCAkKERFU1RESVIpJCRpOyB0aGVuIFwKQEAgLTk0NCwxNCArMTA0MywxOCBAQAogCQllbHNlCXRydWU7IFwKIAkJZmk7IFwKIAlkb25lCi0JJChJTlNUQUxMX1BST0dSQU0pICQoQlVJTERQWVRIT04pICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpCisJaWYgdGVzdCAiJChQWVRIT05GUkFNRVdPUktESVIpIiA9ICJuby1mcmFtZXdvcmsiIDsgdGhlbiBcCisJCSQoSU5TVEFMTF9QUk9HUkFNKSAkKEJVSUxEUFlUSE9OKSAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoTERWRVJTSU9OKSQoRVhFKTsgXAorCWVsc2UgXAorCQkkKElOU1RBTExfUFJPR1JBTSkgJChTVFJJUEZMQUcpIE1hYy9weXRob253ICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpOyBcCisJZmkKIAktaWYgdGVzdCAiJChWRVJTSU9OKSIgIT0gIiQoTERWRVJTSU9OKSI7IHRoZW4gXAogCQlpZiB0ZXN0IC1mICQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKSAtbyAtaCAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSk7IFwKIAkJdGhlbiBybSAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSk7IFwKIAkJZmk7IFwKIAkJKGNkICQoREVTVERJUikkKEJJTkRJUik7ICQoTE4pIHB5dGhvbiQoTERWRVJTSU9OKSQoRVhFKSBweXRob24kKFZFUlNJT04pJChFWEUpKTsgXAogCWZpCi0JaWYgdGVzdCAtZiAkKExETElCUkFSWSk7IHRoZW4gXAorCWlmIHRlc3QgLWYgJChMRExJQlJBUlkpICYmIHRlc3QgIiQoUFlUSE9ORlJBTUVXT1JLRElSKSIgPSAibm8tZnJhbWV3b3JrIiA7IHRoZW4gXAogCQlpZiB0ZXN0IC1uICIkKERMTExJQlJBUlkpIiA7IHRoZW4gXAogCQkJJChJTlNUQUxMX1NIQVJFRCkgJChETExMSUJSQVJZKSAkKERFU1RESVIpJChCSU5ESVIpOyBcCiAJCWVsc2UgXApAQCAtOTY1LDYgKzEwNjgsMTIgQEAKIAkJZmk7IFwKIAllbHNlCXRydWU7IFwKIAlmaQorCWlmIHRlc3QgIngkKExJUE9fMzJCSVRfRkxBR1MpIiAhPSAieCIgOyB0aGVuIFwKKwkJcm0gLWYgJChERVNURElSKSQoQklORElSKXB5dGhvbiQoVkVSU0lPTiktMzIkKEVYRSk7IFwKKwkJbGlwbyAkKExJUE9fMzJCSVRfRkxBR1MpIFwKKwkJCS1vdXRwdXQgJChERVNURElSKSQoQklORElSKS9weXRob24kKFZFUlNJT04pLTMyJChFWEUpIFwKKwkJCSQoREVTVERJUikkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKTsgXAorCWZpCiAKIGJpbmluc3RhbGw6IGFsdGJpbmluc3RhbGwKIAktaWYgdGVzdCAtZiAkKERFU1RESVIpJChCSU5ESVIpL3B5dGhvbjMkKEVYRSkgLW8gLWggJChERVNURElSKSQoQklORElSKS9weXRob24zJChFWEUpOyBcCkBAIC05OTAsNiArMTA5OSwxMCBAQAogCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSAtcyAydG8zLSQoVkVSU0lPTikgMnRvMykKIAktcm0gLWYgJChERVNURElSKSQoQklORElSKS9weXZlbnYKIAkoY2QgJChERVNURElSKSQoQklORElSKTsgJChMTikgLXMgcHl2ZW52LSQoVkVSU0lPTikgcHl2ZW52KQorCWlmIHRlc3QgIngkKExJUE9fMzJCSVRfRkxBR1MpIiAhPSAieCIgOyB0aGVuIFwKKwkJcm0gLWYgJChERVNURElSKSQoQklORElSKS9weXRob24zLTMyJChFWEUpOyBcCisJCShjZCAkKERFU1RESVIpJChCSU5ESVIpOyAkKExOKSAtcyBweXRob24kKFZFUlNJT04pLTMyJChFWEUpIHB5dGhvbjMtMzIkKEVYRSkpIFwKKwlmaQogCiAjIEluc3RhbGwgdGhlIHZlcnNpb25lZCBtYW51YWwgcGFnZQogYWx0bWFuaW5zdGFsbDoKQEAgLTEwMTAsOSArMTEyMyw4IEBACiAJKGNkICQoREVTVERJUikkKE1BTkRJUikvbWFuMTsgJChMTikgLXMgcHl0aG9uJChWRVJTSU9OKS4xIHB5dGhvbjMuMSkKIAogIyBJbnN0YWxsIHRoZSBsaWJyYXJ5Ci1QTEFURElSPQlwbGF0LSQoTUFDSERFUCkKLUVYVFJBUExBVERJUj0gQEVYVFJBUExBVERJUkAKLU1BQ0hERVBTPQkkKFBMQVRESVIpICQoRVhUUkFQTEFURElSKQorUExBVERJUj0JQFBMQVRESVJACitNQUNIREVQUz0JJChQTEFURElSKQogWE1MTElCU1VCRElSUz0gIHhtbCB4bWwvZG9tIHhtbC9ldHJlZSB4bWwvcGFyc2VycyB4bWwvc2F4CiBMSUJTVUJESVJTPQl0a2ludGVyIHRraW50ZXIvdGVzdCB0a2ludGVyL3Rlc3QvdGVzdF90a2ludGVyIFwKIAkJdGtpbnRlci90ZXN0L3Rlc3RfdHRrIHNpdGUtcGFja2FnZXMgdGVzdCBcCkBAIC0xMDIyLDI4ICsxMTM0LDMxIEBACiAJCXRlc3QvaW1naGRyZGF0YSBcCiAJCXRlc3Qvc3VicHJvY2Vzc2RhdGEgdGVzdC9zbmRoZHJkYXRhIHRlc3Qvc3VwcG9ydCBcCiAJCXRlc3QvdHJhY2VkbW9kdWxlcyB0ZXN0L2VuY29kZWRfbW9kdWxlcyBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL2JvdGhfcG9ydGlvbnMgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL2JvdGhfcG9ydGlvbnMvZm9vIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9ub3RfYV9uYW1lc3BhY2VfcGtnL2ZvbyBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3BvcnRpb24xL2ZvbyBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjIgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3BvcnRpb24yL2ZvbyBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDEgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QxL3BhcmVudCBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDEvcGFyZW50L2NoaWxkIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MiBcCi0JCXRlc3QvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDIvcGFyZW50IFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0Mi9wYXJlbnQvY2hpbGQgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QzIFwKLQkJdGVzdC9uYW1lc3BhY2VfcGtncy9wcm9qZWN0My9wYXJlbnQgXAotCQl0ZXN0L25hbWVzcGFjZV9wa2dzL3Byb2plY3QzL3BhcmVudC9jaGlsZCBcCi0gICAgICAgICAgICAgICAgdGVzdC9uYW1lc3BhY2VfcGtncy9tb2R1bGVfYW5kX25hbWVzcGFjZV9wYWNrYWdlIFwKLSAgICAgICAgICAgICAgICB0ZXN0L25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UvYV90ZXN0IFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncyBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucyBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvYm90aF9wb3J0aW9ucy9mb28gXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL25vdF9hX25hbWVzcGFjZV9wa2cvZm9vIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMSBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjEvZm9vIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wb3J0aW9uMiBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcG9ydGlvbjIvZm9vIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MSBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDEvcGFyZW50IFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0MS9wYXJlbnQvY2hpbGQgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QyIFwKKwkJdGVzdC90ZXN0X2ltcG9ydGxpYi9uYW1lc3BhY2VfcGtncy9wcm9qZWN0Mi9wYXJlbnQgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QyL3BhcmVudC9jaGlsZCBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMgXAorCQl0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL3Byb2plY3QzL3BhcmVudCBcCisJCXRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvcHJvamVjdDMvcGFyZW50L2NoaWxkIFwKKyAgICAgICAgICAgICAgICB0ZXN0L3Rlc3RfaW1wb3J0bGliL25hbWVzcGFjZV9wa2dzL21vZHVsZV9hbmRfbmFtZXNwYWNlX3BhY2thZ2UgXAorICAgICAgICAgICAgICAgIHRlc3QvdGVzdF9pbXBvcnRsaWIvbmFtZXNwYWNlX3BrZ3MvbW9kdWxlX2FuZF9uYW1lc3BhY2VfcGFja2FnZS9hX3Rlc3QgXAorCQlhc3luY2lvIFwKKwkJdGVzdC90ZXN0X2FzeW5jaW8gXAogCQljb2xsZWN0aW9ucyBjb25jdXJyZW50IGNvbmN1cnJlbnQvZnV0dXJlcyBlbmNvZGluZ3MgXAogCQllbWFpbCBlbWFpbC9taW1lIHRlc3QvdGVzdF9lbWFpbCB0ZXN0L3Rlc3RfZW1haWwvZGF0YSBcCisJCWVuc3VyZXBpcCBlbnN1cmVwaXAvX2J1bmRsZWQgXAogCQlodG1sIGpzb24gdGVzdC90ZXN0X2pzb24gaHR0cCBkYm0geG1scnBjIFwKIAkJc3FsaXRlMyBzcWxpdGUzL3Rlc3QgXAogCQlsb2dnaW5nIGNzdiB3c2dpcmVmIHVybGxpYiBcCkBAIC0xMTYxLDEwICsxMjc2LDE5IEBACiAJZmk7IFwKIAljZCAkKHNyY2RpcikvTGliLyQoUExBVERJUik7ICQoUlVOU0hBUkVEKSAuL3JlZ2VuCiAKLXB5dGhvbi1jb25maWc6ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4KK3B5dGhvbi1jb25maWc6ICQoc3JjZGlyKS9NaXNjL3B5dGhvbi1jb25maWcuaW4gTWlzYy9weXRob24tY29uZmlnLnNoCiAJIyBTdWJzdGl0dXRpb24gaGFwcGVucyBoZXJlLCBhcyB0aGUgY29tcGxldGVseS1leHBhbmRlZCBCSU5ESVIKIAkjIGlzIG5vdCBhdmFpbGFibGUgaW4gY29uZmlndXJlCi0Jc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnCisJc2VkIC1lICJzLEBFWEVOQU1FQCwkKEJJTkRJUikvcHl0aG9uJChMRFZFUlNJT04pJChFWEUpLCIgPCAkKHNyY2RpcikvTWlzYy9weXRob24tY29uZmlnLmluID5weXRob24tY29uZmlnLnB5CisJIyBSZXBsYWNlIG1ha2VmaWxlIGNvbXBhdC4gdmFyaWFibGUgcmVmZXJlbmNlcyB3aXRoIHNoZWxsIHNjcmlwdCBjb21wYXQuIG9uZXM7ICQoVkFSKSAtPiAke1ZBUn0KKwlzZWQgLWUgJ3MsXCQkKFwoW0EtWmEtejAtOV9dKlwpKSxcJCRce1wxXH0sZycgPCBNaXNjL3B5dGhvbi1jb25maWcuc2ggPnB5dGhvbi1jb25maWcKKwkjIE9uIERhcndpbiwgYWx3YXlzIHVzZSB0aGUgcHl0aG9uIHZlcnNpb24gb2YgdGhlIHNjcmlwdCwgdGhlIHNoZWxsCisJIyB2ZXJzaW9uIGRvZXNuJ3QgdXNlIHRoZSBjb21waWxlciBjdXN0b21pemF0aW9ucyB0aGF0IGFyZSBwcm92aWRlZAorCSMgaW4gcHl0aG9uIChfb3N4X3N1cHBvcnQucHkpLgorCWlmIHRlc3QgYHVuYW1lIC1zYCA9IERhcndpbjsgdGhlbiBcCisJCWNwIHB5dGhvbi1jb25maWcucHkgcHl0aG9uLWNvbmZpZzsgXAorCWZpCisKIAogIyBJbnN0YWxsIHRoZSBpbmNsdWRlIGZpbGVzCiBJTkNMRElSU1RPTUFLRT0kKElOQ0xVREVESVIpICQoQ09ORklOQ0xVREVESVIpICQoSU5DTFVERVBZKSAkKENPTkZJTkNMVURFUFkpCkBAIC0xMTg2LDcgKzEzMTAsNyBAQAogCiAjIEluc3RhbGwgdGhlIGxpYnJhcnkgYW5kIG1pc2NlbGxhbmVvdXMgc3R1ZmYgbmVlZGVkIGZvciBleHRlbmRpbmcvZW1iZWRkaW5nCiAjIFRoaXMgZ29lcyBpbnRvICQoZXhlY19wcmVmaXgpCi1MSUJQTD0JCSQoTElCREVTVCkvY29uZmlnLSQoTERWRVJTSU9OKQorTElCUEw9CQlATElCUExACiAKICMgcGtnY29uZmlnIGRpcmVjdG9yeQogTElCUEM9CQkkKExJQkRJUikvcGtnY29uZmlnCkBAIC0xMjIyLDggKzEzNDYsOCBAQAogCSQoSU5TVEFMTF9EQVRBKSBNaXNjL3B5dGhvbi5wYyAkKERFU1RESVIpJChMSUJQQykvcHl0aG9uLSQoVkVSU0lPTikucGMKIAkkKElOU1RBTExfU0NSSVBUKSAkKHNyY2RpcikvTW9kdWxlcy9tYWtlc2V0dXAgJChERVNURElSKSQoTElCUEwpL21ha2VzZXR1cAogCSQoSU5TVEFMTF9TQ1JJUFQpICQoc3JjZGlyKS9pbnN0YWxsLXNoICQoREVTVERJUikkKExJQlBMKS9pbnN0YWxsLXNoCisJJChJTlNUQUxMX1NDUklQVCkgcHl0aG9uLWNvbmZpZy5weSAkKERFU1RESVIpJChMSUJQTCkvcHl0aG9uLWNvbmZpZy5weQogCSQoSU5TVEFMTF9TQ1JJUFQpIHB5dGhvbi1jb25maWcgJChERVNURElSKSQoQklORElSKS9weXRob24kKExEVkVSU0lPTiktY29uZmlnCi0Jcm0gcHl0aG9uLWNvbmZpZwogCUBpZiBbIC1zIE1vZHVsZXMvcHl0aG9uLmV4cCAtYSBcCiAJCSJgZWNobyAkKE1BQ0hERVApIHwgc2VkICdzL15cKC4uLlwpLiovXDEvJ2AiID0gImFpeCIgXTsgdGhlbiBcCiAJCWVjaG87IGVjaG8gIkluc3RhbGxpbmcgc3VwcG9ydCBmaWxlcyBmb3IgYnVpbGRpbmcgc2hhcmVkIGV4dGVuc2lvbiBtb2R1bGVzIG9uIEFJWDoiOyBcCkBAIC0xMzA1LDcgKzE0MjksMTQgQEAKIGZyYW1ld29ya2luc3RhbGxhcHBzOgogCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGxhcHBzIERFU1RESVI9IiQoREVTVERJUikiCiAKLSMgVGhpcyBpbnN0YWxsIHRoZSB1bml4IHB5dGhvbiBhbmQgcHl0aG9udyB0b29scyBpbiAvdXNyL2xvY2FsL2JpbgorIyBCdWlsZCB0aGUgYm9vdHN0cmFwIGV4ZWN1dGFibGUgdGhhdCB3aWxsIHNwYXduIHRoZSBpbnRlcnByZXRlciBpbnNpZGUKKyMgYW4gYXBwIGJ1bmRsZSB3aXRoaW4gdGhlIGZyYW1ld29yay4gIFRoaXMgYWxsb3dzIHRoZSBpbnRlcnByZXRlciB0bworIyBydW4gT1MgWCBHVUkgQVBJcy4KK2ZyYW1ld29ya3B5dGhvbnc6CisJY2QgTWFjICYmICQoTUFLRSkgcHl0aG9udworCisjIFRoaXMgaW5zdGFsbHMgdGhlIHB5dGhvbiogYW5kIG90aGVyIGJpbiBzeW1saW5rcyBpbiAkcHJlZml4L2JpbiBvciBpbgorIyBhIGJpbiBkaXJlY3RvcnkgcmVsYXRpdmUgdG8gdGhlIGZyYW1ld29yayByb290CiBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzOgogCWNkIE1hYyAmJiAkKE1BS0UpIGluc3RhbGx1bml4dG9vbHMgREVTVERJUj0iJChERVNURElSKSIKIApAQCAtMTM2OSw4ICsxNTAwLDEyIEBACiAJZXRhZ3MgSW5jbHVkZS8qLmg7IFwKIAlmb3IgaSBpbiAkKFNSQ0RJUlMpOyBkbyBldGFncyAtYSAkJGkvKi5bY2hdOyBkb25lCiAKLSMgVG91Y2ggZ2VuZXJhdGVkIGZpbGVzCisjIFRoaXMgZml4ZXMgdXAgdGhlIG10aW1lcyBvZiBjaGVja2VkLWluIGdlbmVyYXRlZCBmaWxlcywgYXNzdW1pbmcgdGhhdCB0aGV5CisjIG9ubHkgKmFwcGVhciogdG8gYmUgb3V0ZGF0ZWQgYmVjYXVzZSBvZiBjaGVja291dCBvcmRlci4KKyMgVGhpcyBpcyBydW4gd2hpbGUgcHJlcGFyaW5nIGEgc291cmNlIHJlbGVhc2UgdGFyYmFsbCwgYW5kIGNhbiBiZSBydW4gbWFudWFsbHkKKyMgdG8gYXZvaWQgYm9vdHN0cmFwIGlzc3Vlcy4KIHRvdWNoOgorCWNkICQoc3JjZGlyKTsgXAogCWhnIC0tY29uZmlnIGV4dGVuc2lvbnMudG91Y2g9VG9vbHMvaGcvaGd0b3VjaC5weSB0b3VjaCAtdgogCiAjIFNhbml0YXRpb24gdGFyZ2V0cyAtLSBjbGVhbiBsZWF2ZXMgbGlicmFyaWVzLCBleGVjdXRhYmxlcyBhbmQgdGFncwpAQCAtMTQwMyw2ICsxNTM4LDggQEAKIAogcHJvZmlsZS1yZW1vdmFsOgogCWZpbmQgLiAtbmFtZSAnKi5nYz8/JyAtZXhlYyBybSAtZiB7fSAnOycKKwlybSAtZiAkKENPVkVSQUdFX0lORk8pCisJcm0gLXJmICQoQ09WRVJBR0VfUkVQT1JUKQogCiBjbG9iYmVyOiBjbGVhbiBwcm9maWxlLXJlbW92YWwKIAktcm0gLWYgJChCVUlMRFBZVEhPTikgJChQR0VOKSAkKExJQlJBUlkpICQoTERMSUJSQVJZKSAkKERMTExJQlJBUlkpIFwKQEAgLTE0MTAsNiArMTU0Nyw3IEBACiAJCWNvbmZpZy5jYWNoZSBjb25maWcubG9nIHB5Y29uZmlnLmggTW9kdWxlcy9jb25maWcuYwogCS1ybSAtcmYgYnVpbGQgcGxhdGZvcm0KIAktcm0gLXJmICQoUFlUSE9ORlJBTUVXT1JLRElSKQorCS1ybSAtZiBweXRob24tY29uZmlnLnB5IHB5dGhvbi1jb25maWcKIAogIyBNYWtlIHRoaW5ncyBleHRyYSBjbGVhbiwgYmVmb3JlIG1ha2luZyBhIGRpc3RyaWJ1dGlvbjoKICMgcmVtb3ZlIGFsbCBnZW5lcmF0ZWQgZmlsZXMsIGV2ZW4gTWFrZWZpbGVbLnByZV0KQEAgLTE0ODEsNyArMTYxOSw3IEBACiAuUEhPTlk6IGZyYW1ld29ya2luc3RhbGwgZnJhbWV3b3JraW5zdGFsbGZyYW1ld29yayBmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlCiAuUEhPTlk6IGZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scwogLlBIT05ZOiBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIHJlY2hlY2sgYXV0b2NvbmYgY2xlYW4gY2xvYmJlciBkaXN0Y2xlYW4KLS5QSE9OWTogc21lbGx5IGZ1bm55IHBhdGNoY2hlY2sgdG91Y2ggYWx0bWFuaW5zdGFsbAorLlBIT05ZOiBzbWVsbHkgZnVubnkgcGF0Y2hjaGVjayB0b3VjaCBhbHRtYW5pbnN0YWxsIGNvbW1vbmluc3RhbGwKIC5QSE9OWTogZ2RiaG9va3MKIAogIyBJRiBZT1UgUFVUIEFOWVRISU5HIEhFUkUgSVQgV0lMTCBHTyBBV0FZCmRpZmYgLS1naXQgYS9NaXNjL0FDS1MgYi9NaXNjL0FDS1MKaW5kZXggY2MxOTRhYi4uNjgyNDU1NCAxMDA2NDQKLS0tIGEvTWlzYy9BQ0tTCisrKyBiL01pc2MvQUNLUwpAQCAtMTYsMjAgKzE2LDI3IEBACiBSYWppdiBBYnJhaGFtCiBEYXZpZCBBYnJhaGFtcwogTWFyYyBBYnJhbW93aXR6CitFbGRhciBBYnVzYWxpbW92CiBSb24gQWRhbQorQW50b24gQWZhbmFzeWV2CiBBbGkgQWZzaGFyCitOaXRpa2EgQWdhcndhbAogSmltIEFobHN0cm9tCiBGYXJoYW4gQWhtYWQKIE1hdHRoZXcgQWhyZW5zCiBOaXIgQWlkZXMKK0FraXJhCiBZYW5pdiBBa25pbgogSnlya2kgQWxha3VpamFsYQogU3RldmUgQWxleGFuZGVyCiBGcmVkIEFsbGVuCitKZWZmIEFsbGVuCiBSYXkgQWxsZW4KIEJpbGx5IEcuIEFsbGllCiBLZXZpbiBBbHRpcworU2t5bGVyIExlaWdoIEFtYWRvcgogSm9lIEFtZW50YQorUm9zZSBBbWVzCiBBLiBBbW9yb3NvCiBNYXJrIEFuYWNrZXIKIFNoYXNod2F0IEFuYW5kCkBAIC00Miw4ICs0OSw4IEBACiBKdWFuY2FybG8gQcOxZXoKIENocmlzIEFuZ2VsaWNvCiBKw6lyw6lteSBBbmdlcgotQW5rdXIgQW5rYW4KIEpvbiBBbmdsaW4KK0Fua3VyIEFua2FuCiBIZWlkaSBBbm5leHN0YWQKIFJhbWNoYW5kcmEgQXB0ZQogw4lyaWMgQXJhdWpvCkBAIC01Nyw2ICs2NCw3IEBACiBEb25vdmFuIEJhYXJkYQogQXJuZSBCYWJlbmhhdXNlcmhlaWRlCiBBdHRpbGEgQmFibworTWF0dCBCYWNobWFubgogTWFyY2luIEJhY2hyeQogQWxmb25zbyBCYWNpZXJvCiBEd2F5bmUgQmFpbGV5CkBAIC03MSw2ICs3OSw3IEBACiBEYW5pZWwgQmFyY2xheQogTmljb2xhcyBCYXJlaWwKIENocmlzIEJhcmtlcgorU3RldmVuIEJhcmtlcgogQW50b24gQmFya292c2t5CiBOaWNrIEJhcm5lcwogUXVlbnRpbiBCYXJuZXMKQEAgLTkxLDYgKzEwMCw3IEBACiBTYW11ZWwgTC4gQmF5ZXIKIERvbmFsZCBCZWF1ZHJ5CiBEYXZpZCBCZWF6bGV5CitKb2huIEJlY2sKIE5lYWwgQmVja2VyCiBSb2JpbiBCZWNrZXIKIFRvcnN0ZW4gQmVja2VyCkBAIC0xMjQsNiArMTM0LDcgQEAKIE1pY2hhZWwgQmlydHdlbGwKIFN0dWFydCBCaXNob3AKIFJveSBCaXhsZXIKK0RhbmllbCBCbGFjawogSm9uYXRoYW4gQmxhY2sKIFJlbmF1ZCBCbGFuY2gKIE1pa2UgQmxhbmQKQEAgLTE0Miw2ICsxNTMsNyBAQAogRm9yZXN0IEJvbmQKIEdyZWdvcnkgQm9uZAogTWF0aWFzIEJvcmRlc2UKK0pvbmFzIEJvcmdzdHLDtm0KIEp1cmplbiBCb3MKIFBldGVyIEJvc2NoCiBEYW4gQm9zd2VsbApAQCAtMTU1LDkgKzE2NywxMSBAQAogR2VvcmcgQnJhbmRsCiBDaHJpc3RvcGhlciBCcmFubm9uCiBUZXJyZW5jZSBCcmFubm9uCitTdmVuIEJyYXVjaAogR2VybcOhbiBNLiBCcmF2bwogRXJpayBCcmF5CiBCcmlhbiBCcmF6aWwKK0RlbWlhbiBCcmVjaHQKIERhdmUgQnJlbm5hbgogVG9tIEJyaWRnbWFuCiBBbnRob255IEJyaWdncwpAQCAtMTY1LDYgKzE3OSw3IEBACiBUb2JpYXMgQnJpbmsKIFJpY2hhcmQgQnJvZGllCiBNaWNoYWVsIEJyb2dodG9uCitBbW1hciBCcm9oaQogRGFuaWVsIEJyb3Rza3kKIEplYW4gQnJvdXdlcnMKIEdhcnkgUy4gQnJvd24KQEAgLTE3NCw5ICsxODksMTEgQEAKIEZyYW5jaXNjbyBNYXJ0w61uIEJydWd1w6kKIElhbiBCcnVudGxldHQKIEZsb3JpcyBCcnV5bm9vZ2hlCitNYXR0IEJyeWFudAogU3RhbiBCdWJyb3Vza2kKIEVyaWsgZGUgQnVlZ2VyCiBKYW4tSGVpbiBCw7xocm1hbgorTGFycyBCdWl0aW5jawogRGljayBCdWx0ZXJtYW4KIEJpbGwgQnVtZ2FybmVyCiBKaW1teSBCdXJnZXR0CkBAIC0xODYsNyArMjAzLDkgQEAKIEFsYXN0YWlyIEJ1cnQKIFRhcm4gV2Vpc25lciBCdXJ0b24KIExlZSBCdXNieQorS2F0aGVyaW5lIEJ1c2NoCiBSYWxwaCBCdXRsZXIKK0xhdXJlbnQgRGUgQnV5c3QKIFphY2ggQnlybmUKIE5pY29sYXMgQ2Fkb3UKIEpwIENhbGRlcm9uZQpAQCAtMTk3LDcgKzIxNiw5IEBACiBNaWtlIENhcmx0b24KIFBpZXJyZSBDYXJyaWVyCiBUZXJyeSBDYXJyb2xsCitFZHdhcmQgQ2F0bXVyCiBMb3JlbnpvIE0uIENhdHVjY2kKK0JydW5vIENhdWV0CiBEb25uIENhdmUKIENoYXJsZXMgQ2F6YWJvbgogSmVzw7pzIENlYSBBdmnDs24KQEAgLTIwNSw2ICsyMjYsNyBAQAogTWF0ZWogQ2VwbAogQ2FybCBDZXJlY2tlCiBPY3RhdmlhbiBDZXJuYQorTWljaGFlbCBDZXRydWxvCiBEYXZlIENoYW1iZXJzCiBQYXNjYWwgQ2hhbWJvbgogSm9obiBDaGFuZGxlcgpAQCAtMjIwLDE3ICsyNDIsMjIgQEAKIEplcnJ5IENoZW4KIE1pY2hhZWwgQ2hlcm1zaWRlCiBJbmdyaWQgQ2hldW5nCitUZXJyeSBDaGlhCiBBbGJlcnQgQ2hpbi1BLVlvdW5nCiBBZGFsIENoaXJpbGl1YwogTWF0dCBDaGlzaG9sbQorTGl0YSBDaG8KIEFuZGVycyBDaHJpZ3N0csO2bQogVG9tIENocmlzdGlhbnNlbgorUmVuZWUgQ2h1CiBWYWRpbSBDaHVndW5vdgogTWF1cm8gQ2ljb2duaW5pCiBEYXZpZCBDaW5lZ2UKIENyYWlnIENpdHJvCiBHaWxsZXMgQ2l2YXJpbwogQ2hyaXMgQ2xhcmsKK0RpYW5hIENsYXJrZQorTGF1cmllIENsYXJrLU1pY2hhbGVrCiBNaWtlIENsYXJrc29uCiBBbmRyZXcgQ2xlZ2cKIEJyYWQgQ2xlbWVudHMKQEAgLTI1Niw2ICsyODMsNyBAQAogSmFzb24gUi4gQ29vbWJzCiBHYXJyZXR0IENvb3BlcgogR3JlZyBDb3BlbGFuZAorSWFuIENvcmRhc2NvCiBBbGRvIENvcnRlc2kKIERhdmlkIENvc3RhbnpvCiBTY290dCBDb3R0b24KQEAgLTI3NSw2ICszMDMsNyBAQAogSm9hcXVpbiBDdWVuY2EgQWJlbGEKIEpvaG4gQ3VnaW5pCiBUb20gQ3VsbGl0b24KK1Jhw7psIEN1bXBsaWRvCiBBbnRvbmlvIEN1bmkKIEJyaWFuIEN1cnRpbgogTGlzYW5kcm8gRGFsY2luCkBAIC0yODksMTIgKzMxOCwxNCBAQAogSm9uYXRoYW4gRGFzdGVlbAogUGllcnJlLVl2ZXMgRGF2aWQKIEEuIEplc3NlIEppcnl1IERhdmlzCitNZXJsaWpuIHZhbiBEZWVuCiBKb2huIERlR29vZAogTmVkIERlaWx5CiBWaW5jZW50IERlbGZ0CiBBcm5hdWQgRGVsb2JlbGxlCiBLb25yYWQgRGVsb25nCiBFcmlrIERlbWFpbmUKK01hcnRpbiBEZW5nbGVyCiBKb2huIERlbm5pcwogTC4gUGV0ZXIgRGV1dHNjaAogUm9nZXIgRGV2CkBAIC0zMDMsNiArMzM0LDcgQEAKIENhbGViIERldmVyYXV4CiBDYXRoZXJpbmUgRGV2bGluCiBTY290dCBEaWFsCitBbG9uIERpYW1hbnQKIFRvYnkgRGlja2Vuc29uCiBNYXJrIERpY2tpbnNvbgogSmFjayBEaWVkZXJpY2gKQEAgLTMxMSwxMiArMzQzLDE0IEBACiBZdmVzIERpb25uZQogRGFuaWVsIERpdHRtYXIKIEpvc2lwIERqb2xvbmdhCitXYWx0ZXIgRMO2cndhbGQKIEphcm9taXIgRG9sZWNlawogSXNtYWlsIERvbm1legogUm9iZXJ0IERvbm9odWUKIE1hcmNvcyBEb25vbG8KIERpbWEgRG9yZm1hbgogWXZlcyBEb3Jmc21hbgorTWljaGFlbCBEb3JtYW4KIENlc2FyIERvdWFkeQogRGVhbiBEcmFheWVyCiBGcmVkIEwuIERyYWtlLCBKci4KQEAgLTMyNCwxOSArMzU4LDIyIEBACiBKb2huIER1Qm9pcwogUGF1bCBEdWJvaXMKIEphY3F1ZXMgRHVjYXNzZQorQW5kcmVpIERvcmlhbiBEdW1hCiBHcmFoYW0gRHVtcGxldG9uCiBRdWlubiBEdW5rYW4KIFJvYmluIER1bm4KIEx1a2UgRHVuc3RhbgogVmlyZ2lsIER1cHJhcworQnJ1bm8gRHVwdWlzCiBBbmR5IER1c3RtYW4KIEdhcnkgRHV6YW4KIEV1Z2VuZSBEdnVyZWNoZW5za2kKK0thcm1lbiBEeWtzdHJhCiBKb3NpcCBEem9sb25nYQogTWF4aW0gRHp1bWFuZW5rbwotV2FsdGVyIETDtnJ3YWxkCiBIYW5zIEVja2FyZHQKIFJvZG9scGhvIEVja2hhcmR0CitVbHJpY2ggRWNraGFyZHQKIERhdmlkIEVkZWxzb2huCiBKb2huIEVkbW9uZHMKIEdyYW50IEVkd2FyZHMKQEAgLTM1MSw2ICszODgsNyBAQAogRGF2aWQgRWx5CiBKZWZmIEVwbGVyCiBUb20gRXBwZXJseQorR8O2a2NlbiBFcmFzbGFuCiBTdG9mZmVsIEVyYXNtdXMKIErDvHJnZW4gQS4gRXJoYXJkCiBNaWNoYWVsIEVybnN0CkBAIC0zNzcsMTcgKzQxNSwyMCBAQAogQm9yaXMgRmVsZAogVGhvbWFzIEZlbnpsCiBOaWVscyBGZXJndXNvbgorRnJhbmNpc2NvIEZlcm7DoW5kZXogQ2FzdGHDsW8KIFNlYmFzdGlhbiBGZXJuYW5kZXoKIEZsb3JpYW4gRmVzdGkKIEpvaG4gRmV1ZXJzdGVpbgogQ2FybCBGZXlubWFuCiBWaW5jZW50IEZpYWNrCitBbmFzdGFzaWEgRmlsYXRvdmEKIFRvbWVyIEZpbGliYQogSmVmZnJleSBGaW5rZWxzdGVpbgogUnVzc2VsbCBGaW5uCiBEYW4gRmlubmllCiBOaWxzIEZpc2NoYmVjawogRnJlZGVyaWsgRml4CitUb20gRmxhbmFnYW4KIE1hdHQgRmxlbWluZwogSGVybsOhbiBNYXJ0w61uZXogRm9mZmFuaQogQXJ0ZW0gRm9raW4KQEAgLTM5NSw4ICs0MzYsMTEgQEAKIE1pY2hhZWwgRm9vcmQKIEFtYXVyeSBGb3JnZW90IGQnQXJjCiBEb3VnIEZvcnQKK0V2ZW5zIEZvcnR1bsOpCitDaHJpcyBGb3N0ZXIKIEpvaG4gRm91aHkKIEFuZHJldyBGcmFuY2lzCitNYXR0IEZyYW5rCiBTdGVmYW4gRnJhbmtlCiBNYXJ0aW4gRnJhbmtsaW4KIEtlbnQgRnJhemllcgpAQCAtNDI2LDggKzQ3MCwxMCBAQAogTml0aW4gR2FuYXRyYQogRnJlZCBHYW5zZXZsZXMKIExhcnMgTWFyaXVzIEdhcnNob2wKK0pha2UgR2FydmVyCiBEYW4gR2FzcwogQW5kcmV3IEdhdWwKK01hdHRoaWV1IEdhdXRpZXIKIFN0ZXBoZW4gTS4gR2F2YQogWGF2aWVyIGRlIEdheWUKIEhhcnJ5IEhlbnJ5IEdlYmVsCkBAIC00NDcsNiArNDkzLDggQEAKIE1hdHQgR2l1Y2EKIFdpbSBHbGVubgogTWljaGFlbCBHb2RlcmJhdWVyCitLYXJhbiBHb2VsCitKZXJvZW4gVmFuIEdvZXkKIENocmlzdG9waCBHb2hsa2UKIFRpbSBHb2xkZW4KIEd1aWxoZXJtZSBHb27Dp2FsdmVzCkBAIC00NTUsMTcgKzUwMywyMSBAQAogU2hlbGxleSBHb29jaAogRGF2aWQgR29vZGdlcgogSGFucyBkZSBHcmFhZmYKK1RpbSBHcmFoYW0KIE5hdGhhbmllbCBHcmF5CiBFZGR5IERlIEdyZWVmCiBHcmFudCBHcmlmZmluCiBBbmRyZWEgR3JpZmZpbmkKIER1bmNhbiBHcmlzYnkKK09saXZpZXIgR3Jpc2VsCiBGYWJpYW4gR3JvZmZlbgogRXJpYyBHcm9vCitEYW5pZWwgQW5kcmFkZSBHcm9wcGUKIERhZyBHcnVuZWF1CiBGaWxpcCBHcnVzemN6ecWEc2tpCiBUaG9tYXMgR3VldHRsZXIKLUFqaXRlc2ggR3VwdGEKK1l1eWFuZyBHdW8KK0FudWogR3VwdGEKIE1pY2hhZWwgR3VyYXZhZ2UKIExhcnMgR3VzdMOkYmVsCiBUaG9tYXMgR8O8dHRsZXIKQEAgLTQ3Niw2ICs1MjgsNyBAQAogUmFzbXVzIEhhaG4KIFBldGVyIEhhaWdodAogVsOhY2xhdiBIYWlzbWFuCitaYmlnbmlldyBIYWxhcwogV2Fsa2VyIEhhbGUgSVYKIEJvYiBIYWxsZXkKIEplc3NlIEhhbGxpbwpAQCAtNDkxLDYgKzU0NCw3IEBACiBMeW5kYSBIYXJkbWFuCiBEZXJlayBIYXJsYW5kCiBKYXNvbiBIYXJwZXIKK0RhdmlkIEhhcnJpZ2FuCiBCcmlhbiBIYXJyaW5nCiBKb25hdGhhbiBIYXJ0bGV5CiBUcmF2aXMgQi4gSGFydHdlbGwKQEAgLTUwMSw2ICs1NTUsNyBAQAogUnljaGFyZGUgSGF3a2VzCiBCZW4gSGF5ZGVuCiBKb2NoZW4gSGF5ZWsKK1RpbSBIZWFuZXkKIEhlbnJpayBIZWltYnVlcmdlcgogQ2hyaXN0aWFuIEhlaW1lcwogVGhvbWFzIEhlbGxlcgpAQCAtNTIwLDE5ICs1NzUsMjMgQEAKIE1hZ251cyBMLiBIZXRsYW5kCiBSYXltb25kIEhldHRpbmdlcgogS2V2YW4gSGV5ZG9uCitXb3V0ZXIgdmFuIEhleXN0CiBLZWxzZXkgSGlnaHRvd2VyCiBKYXNvbiBIaWxkZWJyYW5kCiBSaWNoaWUgSGluZGxlCiBLb25yYWQgSGluc2VuCiBEYXZpZCBIb2JsZXkKIFRpbSBIb2NoYmVyZworQmVuamFtaW4gSG9kZ3NvbgogSm9lcmctQ3lyaWwgSG9laGxlCiBHcmVnb3IgSG9mZmxlaXQKIENocmlzIEhvZmZtYW4KIFN0ZWZhbiBIb2ZmbWVpc3RlcgogQWxiZXJ0IEhvZmthbXAKK0NocmlzIEhvZ2FuCiBUb21hcyBIb2dlcgogSm9uYXRoYW4gSG9nZworS2FtaWxsYSBIb2xhbmRhCiBTdGV2ZSBIb2xkZW4KIEFraW50YXlvIEhvbGRlcgogVGhvbWFzIEhvbGVuc3RlaW4KQEAgLTU0MCw2ICs1OTksNyBAQAogU2hhbmUgSG9sbG93YXkKIFJ1bmUgSG9sbQogVGhvbWFzIEhvbG1lcworQ3JhaWcgSG9sbXF1aXN0CiBQaGlsaXAgSG9tYnVyZwogTmFvZnVtaSBIb25kYQogSmVmZnJleSBIb25pZwpAQCAtNTUwLDEwICs2MTAsMTIgQEAKIE5hZGF2IEhvcmVzaAogQWxvbiBIb3JldgogSmFuIEhvc2FuZworSm9uYXRoYW4gSG9zbWVyCiBBbGFuIEhvdXJpaGFuZQogS2VuIEhvd2FyZAogQnJhZCBIb3dlcwogTWlrZSBIb3kKK0NoaXUtSHNpYW5nIEhzdQogQ2hpaC1IYW8gSHVhbmcKIENocmlzdGlhbiBIdWRvbgogTGF3cmVuY2UgSHVkc29uCkBAIC01NjEsNiArNjIzLDcgQEAKIEppbSBIdWd1bmluCiBHcmVnIEh1bXBocmV5cwogRXJpYyBIdXNzCitOZWhhbCBIdXNzYWluCiBUYWloeXVuIEh3YW5nCiBKZXJlbXkgSHlsdG9uCiBMdWR3aWcgSMOkaG5lCkBAIC01NzMsMTEgKzYzNiwxMyBAQAogTGFycyBJbW1pc2NoCiBCb2JieSBJbXBvbGxvbmlhCiBNZWFkb3IgSW5nZQorUGV0ZXIgSW5nZWJyZXRzb24KIFRvbnkgSW5ncmFsZGkKIEpvaG4gSW50ZXJyYW50ZQogQm9iIElwcG9saXRvCiBSb2dlciBJcndpbgogQXRzdW8gSXNoaW1vdG8KK0thc2lhIEphY2hpbQogQWRhbSBKYWNrc29uCiBCZW4gSmFja3NvbgogUGF1bCBKYWNrc29uCkBAIC02MDYsNiArNjcxLDcgQEAKIEZyZWRyaWsgSm9oYW5zc29uCiBHcmVnb3J5IEsuIEpvaG5zb24KIEtlbnQgSm9obnNvbgorTWljaGFlbCBKb2huc29uCiBTaW1vbiBKb2huc3RvbgogTWF0dCBKb2luZXIKIFRob21hcyBKb2xsYW5zCkBAIC02MjUsMTcgKzY5MSwyMCBAQAogU2FyYWggSy4KIFN1bm55IEsKIEJvaHVzbGF2IEthYnJkYQorQWxleGV5IEthY2hheWV2CiBCb2IgS2FobgogS3VydCBCLiBLYWlzZXIKIFRhbWl0byBLYWppeWFtYQogSmFuIEthbGlzemV3c2tpCiBQZXRlciB2YW4gS2FtcGVuCitKYW4gS2FuaXMKIFJhZmUgS2FwbGFuCiBKYWNvYiBLYXBsYW4tTW9zcwogSmFubmUgS2FyaWxhCiBQZXIgw5h5dmluZCBLYXJsc2VuCiBBbnRvbiBLYXN5YW5vdgogTG91IEthdGVzCitNYWtvdG8gS2F0bwogSGlyb2FraSBLYXdhaQogU2ViYXN0aWVuIEtlaW0KIFJ5YW4gS2VsbHkKQEAgLTY0NiwxMCArNzE1LDEyIEBACiBNYWdudXMgS2Vzc2xlcgogTGF3cmVuY2UgS2VzdGVsb290CiBWaXZlayBLaGVyYQorRGhpcnUgS2hvbGlhCiBNYWRzIEtpaWxlcmljaAogSmFzb24gS2lsbGVuCiBKYW4gS2ltCiBUYWVrIEpvbyBLaW0KK1NhbSBLaW1icmVsCiBXLiBUcmV2b3IgS2luZwogUGF1bCBLaXBwZXMKIFN0ZXZlIEtpcnNjaApAQCAtNjc0LDkgKzc0NSw5IEBACiBWYWpyYXNreSBLb2sKIEd1aWRvIEtvbGxlcmllCiBKYWNlayBLb25pZWN6bnkKLdCc0LDRgNC6INCa0L7RgNC10L3QsdC10YDQswogQXJrYWR5IEtvcGx5YXJvdgogUGV0ZXIgQS4gS29yZW4KK9Cc0LDRgNC6INCa0L7RgNC10L3QsdC10YDQswogVmxhZCBLb3JvbGV2CiBKb3NlcGggS29zaHkKIERhbmllbCBLb3phbgpAQCAtNzAyLDkgKzc3MywxMiBAQAogRXJubyBLdXVzZWxhCiBSb3NzIExhZ2Vyd2FsbAogQ2FtZXJvbiBMYWlyZAorRGF2aWQgTGFtCiBUaG9tYXMgTGFtYgorVmFsZXJpZSBMYW1iZXJ0CiBKZWFuLUJhcHRpc3RlICJKaWJhIiBMYW15CiBSb25hbiBMYW15CitQZXRlciBMYW5kcnkKIFRvcnN0ZW4gTGFuZHNjaG9mZgogxYF1a2FzeiBMYW5nYQogVGlubyBMYW5nZQpAQCAtNzE4LDggKzc5MiwxMSBAQAogU2ltb24gTGF3CiBKdWxpYSBMYXdhbGwKIENocmlzIExhd3JlbmNlCitDaHJpcyBMYXdzCiBCcmlhbiBMZWFpcgogTWF0aGlldSBMZWR1Yy1IYW1lbAorQW1hbmRpbmUgTGVlCitBbnRvbnkgTGVlCiBDaHJpc3RvcGhlciBMZWUKIElueWVvbCBMZWUKIEphbWVzIExlZQpAQCAtNzM1LDE2ICs4MTIsMjEgQEAKIFJvYmVydCBMZWhtYW5uCiBQZXRyaSBMZWh0aW5lbgogTHVrZSBLZW5uZXRoIENhc3NvbiBMZWlnaHRvbgorSm9obiBMZWl0Y2gKIFRzaGVwYW5nIExla2hvbmtob2JlCiBNYXJjLUFuZHLDqSBMZW1idXJnCiBNYXRldXN6IExlbmlrCiBKb2huIExlbnRvbgogS29zdHlhbnR5biBMZXNjaGVua28KK0Jlbm5vIExlc2xpZQogQ2hyaXN0b3BoZXIgVHVyIExlc25pZXdza2ktTGFhcwogQWxhaW4gTGV1ZnJveQogTWFyayBMZXZpbnNvbgorTWFyayBMZXZpdHQKK0l2YW4gTGV2a2l2c2t5aQogV2lsbGlhbSBMZXdpcwogQWtpcmEgTGkKK1JvYmVydCBMaQogWHVhbmppIExpCiBSb2JlcnQgdmFuIExpZXJlCiBSb3NzIExpZ2h0CkBAIC03NjIsMzEgKzg0NCw0MCBAQAogTWlya28gTGlzcwogTmljayBMb2Nrd29vZAogU3RlcGhhbmllIExvY2t3b29kCitNYXJ0aW4gdm9uIEzDtndpcwogSHVnbyBMb3BlcyBUYXZhcmVzCitHdWlsbGVybW8gTMOzcGV6LUFuZ2xhZGEKIEFubmUgTG9yZAogVG9tIExvcmVkbwogSnVzdGluIExvdmUKK05lZCBKYWNrc29uIExvdmVseQorUGV0ZXIgTG92ZXR0CiBKYXNvbiBMb3dlCiBUb255IExvd25kcwogUmF5IExveXphZ2EKK0thbmctSGFvIChLZW5ueSkgTHUKIEx1a2FzIEx1ZWcKIExvcmVuIEx1a2UKIEZyZWRyaWsgTHVuZGgKIFpob25neXVlIEx1bwogTWFyayBMdXR6CitUYXJhcyBMeWFwdW4KIEppbSBMeW5jaAogTWlrYWVsIEx5bmd2aWcKLU1hcnRpbiB2b24gTMO2d2lzCi1HdWlsbGVybW8gTMOzcGV6LUFuZ2xhZGEKIEplZmYgTWFjRG9uYWxkCiBKb2huIE1hY2hpbgogQW5kcmV3IEkgTWFjSW50eXJlCiBUaW0gTWFjS2VuemllCiBOaWNrIE1hY2xhcmVuCiBEb24gTWFjTWlsbGVuCitUb21hc3ogTWHEh2tvd2lhaworV29sZmdhbmcgTWFpZXIKIFN0ZXZlIE1hamV3c2tpCitNYXJlayBNYWprb3dza2kKIEdyemVnb3J6IE1ha2FyZXdpY3oKIERhdmlkIE1hbGNvbG0KK0dyZWcgTWFsY29sbQorV2lsbGlhbSBNYWxsYXJkCiBLZW4gTWFuaGVpbWVyCiBWbGFkaW1pciBNYXJhbmdvem92CiBDb2xpbiBNYXJjCkBAIC03OTcsMTkgKzg4OCwyMyBAQAogQWxleCBNYXJ0ZWxsaQogQW50aG9ueSBNYXJ0aW4KIE93ZW4gTWFydGluCitTaWRuZXkgU2FuIE1hcnTDrW4KIFdlc3RsZXkgTWFydMOtbmV6CiBTw6liYXN0aWVuIE1hcnRpbmkKLVNpZG5leSBTYW4gTWFydMOtbgogUm9nZXIgTWFzc2UKIE5pY2sgTWF0aGV3c29uCiBTaW1vbiBNYXRoaWV1CiBMYXVyYSBNYXRzb24KIEdyYWhhbSBNYXR0aGV3cworbWF0dGlwCiBNYXJ0aW4gTWF0dXNpYWsKIERpZXRlciBNYXVyZXIKIERhbmllbCBNYXkKIE1hZGlzb24gTWF5CitMdWNhcyBNYXlzdHJlCiBBcm5hdWQgTWF6aW4KK1BhbSBNY0EnTnVsdHkKK01hdHQgTWNDbHVyZQogUmViZWNjYSBNY0NyZWFyeQogS2lyayBNY0RvbmFsZAogQ2hyaXMgTWNEb25vdWdoCkBAIC04MzAsMTUgKzkyNSwxNiBAQAogRXppbyBNZWxvdHRpCiBEb3VnIE1lbm5lbGxhCiBCcmlhbiBNZXJyZWxsCitBbGV4aXMgTcOpdGFpcmVhdQogTHVrZSBNZXdidXJuCiBDYXJsIE1leWVyCiBNaWtlIE1leWVyCiBQaW90ciBNZXllcgotQWxleGlzIE3DqXRhaXJlYXUKIFN0ZXZlbiBNaWFsZQotVHJlbnQgTWljawogSmFzb24gTWljaGFsc2tpCiBGcmFuY2sgTWljaGVhCitWaW5jZW50IE1pY2hlbAorVHJlbnQgTWljawogVG9tIE1pZGRsZXRvbgogVGhvbWFzIE1pZWRlbWEKIFN0YW4gTWloYWkKQEAgLTg0OSw2ICs5NDUsNyBAQAogRGFtaWVuIE1pbGxlcgogSmFzb24gVi4gTWlsbGVyCiBKYXkgVC4gTWlsbGVyCitLYXRpZSBNaWxsZXIKIFJvbWFuIE1pbG5lcgogSnVsaWVuIE1pb3R0ZQogQW5kcmlpIFYuIE1pc2hrb3Zza3lpCkBAIC04NTgsNiArOTU1LDcgQEAKIEZsb3JpYW4gTWxhZGl0c2NoCiBEb3VnIE1vZW4KIFRoZSBEcmFnb24gRGUgTW9uc3luZQorQmFzdGllbiBNb250YWduZQogU2tpcCBNb250YW5hcm8KIFBldGVyIE1vb2R5CiBQYXVsIE1vb3JlCkBAIC04NjUsNiArOTYzLDcgQEAKIEJlbiBNb3JnYW4KIERlcmVrIE1vcnIKIEphbWVzIEEgTW9ycmlzb24KK01hcnRpbiBNb3JyaXNvbgogRGVyZWsgTWNUYXZpc2ggTW91bmNlCiBBbGVzc2FuZHJvIE1vdXJhCiBQYWJsbyBNb3V6bwpAQCAtODc5LDYgKzk3OCw3IEBACiBMb3VpcyBNdW5ybwogUi4gRGF2aWQgTXVycmF5CiBNYXR0aSBNw6RraQorSsO2cmcgTcO8bGxlcgogRGFsZSBOYWdhdGEKIEpvaG4gTmFnbGUKIFRha2FoaXJvIE5ha2F5YW1hCkBAIC04OTAsNiArOTkwLDcgQEAKIFRyZW50IE5lbHNvbgogQ2hhZCBOZXR6ZXIKIE1heCBOZXVuaMO2ZmZlcgorQW50aG9uIHZhbiBkZXIgTmV1dAogR2VvcmdlIE5ldmlsbGUtTmVpbAogSGlldSBOZ3V5ZW4KIEpvaGFubmVzIE5pY29sYWkKQEAgLTkxNyw2ICsxMDE4LDcgQEAKIEphbWVzIE9ha2xleQogRWxlbmEgT2F0CiBKb24gT2JlcmhlaWRlCitNaWxhbiBPYmVya2lyY2gKIFBhc2NhbCBPYmVybmRvZXJmZXIKIEplZmZyZXkgT2xsaWUKIEFkYW0gT2xzZW4KQEAgLTkyNiwxMiArMTAyOCwxMyBAQAogVG9tYXMgT3BwZWxzdHJ1cAogSmFzb24gT3JlbmRvcmZmCiBEb3VnbGFzIE9ycgorV2lsbGlhbSBPcnIKIE1pY2hlbGUgT3Jyw7kKIE9sZWcgT3NobXlhbgogRGVuaXMgUy4gT3RraWRhY2gKIFBldGVyIE90dGVuCiBNaWNoYWVsIE90dGVuZWRlcgotUi4gTS4gT3Vka2VyaworUmljaGFyZCBPdWRrZXJrCiBSdXNzZWwgT3dlbgogSm9vbmFzIFBhYWxhc21hYQogTWFydGluIFBhY2ttYW4KQEAgLTk0MCw3ICsxMDQzLDEyIEBACiBNaWtlIFBhbGwKIFRvZGQgUi4gUGFsbWVyCiBKdWFuIERhdmlkIEliw6HDsWV6IFBhbG9tYXIKK05pY29sYSBQYWx1bWJvCiBKYW4gUGFsdXMKK1lvbmd6aGkgUGFuCitNYXJ0aW4gUGFudGVyCitNYXRoaWFzIFBhbnplbmLDtmNrCitNYXJjbyBQYW9saW5pCiBNLiBQYXBpbGxvbgogUGV0ZXIgUGFyZW50ZQogQWxleGFuZHJlIFBhcmVudGVhdQpAQCAtOTQ5LDYgKzEwNTcsNyBAQAogSGVpa2tpIFBhcnRhbmVuCiBIYXJyaSBQYXNhbmVuCiBHYcOrbCBQYXNncmltYXVkCitBc2hpc2ggTml0aW4gUGF0aWwKIFJhbmR5IFBhdXNjaAogU2FtdWVsZSBQZWRyb25pCiBKdXN0aW4gUGVlbApAQCAtOTY2LDkgKzEwNzUsMTIgQEAKIFRpbSBQZXRlcnMKIEJlbmphbWluIFBldGVyc29uCiBKb2UgUGV0ZXJzb24KK1VscmljaCBQZXRyaQogQ2hyaXMgUGV0cmlsbGkKK1JvdW1lbiBQZXRyb3YKIEJqb3JuIFBldHRlcnNlbgogSnVzdGluIEQuIFBldHRpdAorRXNhIFBldWhhCiBSb25ueSBQZmFubnNjaG1pZHQKIEdlb2ZmIFBoaWxicmljawogR2F2cmllIFBoaWxpcHNvbgpAQCAtOTgzLDMzICsxMDk1LDQ1IEBACiBUb20gUGluY2tuZXkKIFphY2ggUGluY3VzCiBNaWNoYWVsIFBpb3Ryb3dza2kKK1plcm8gUGlyYWV1cwogQW50b2luZSBQaXRyb3UKIEplYW4tRnJhbsOnb2lzIFBpw6lyb25uZQogT2xlZyBQbGFraG90bnl1awogUmVtaSBQb2ludGVsCitKb24gUG9sZXIKK0FyaWVsIFBvbGlhawogR3VpbGhlcm1lIFBvbG8KK0lsbGlhIFBvbG9zdWtoaW4KIE1pY2hhZWwgUG9tcmFuaW5nCiBNYXJ0aW4gUG9vbAogSXVzdGluIFBvcAogQ2xhdWRpdSBQb3BhCiBKb2huIFBvcHBsZXdlbGwKK01hdGhldXMgVmllaXJhIFBvcnRlbGEKK0RhdmluIFBvdHRzCiBHdWlsbGF1bWUgUHJhdHRlCitGbG9yaWFuIFByZWluc3RvcmZlcgogQW1yaXQgUHJlbQogUGF1bCBQcmVzY29kCiBEb25vdmFuIFByZXN0b24KIFBhdWwgUHJpY2UKK0l1bGlpYSBQcm9za3VybmlhCitEb3JpYW4gUHVsYQogSnlya2kgUHVsbGlhaW5lbgogU3RldmUgUHVyY2VsbAogRWR1YXJkbyBQw6lyZXoKIEZlcm5hbmRvIFDDqXJlegorS2V2aW4gSmluZyBRaXUKIFBpZXJyZSBRdWVudGVsCiBCcmlhbiBRdWlubGFuCiBBbmRlcnMgUXZpc3QKIFRob21hcyBSYWNoZWwKK1JhbSBSYWNodW0KIErDqXLDtG1lIFJhZGl4CiBCdXJ0b24gUmFkb25zCiBKZWZmIFJhbW5hbmkKIEJyb2RpZSBSYW8KK1NlbmtvIFJhc2ljCiBBbnR0aSBSYXNpbmVuCiBOaWtvbGF1cyBSYXRoCiBTcmlkaGFyIFJhdG5ha3VtYXIKQEAgLTEwMzUsNiArMTE1OSw3IEBACiBGbMOhdmlvIFJpYmVpcm8KIEZyYW5jZXNjbyBSaWNjaWFyZGkKIFRpbSBSaWNlCitNYXJ0aW4gUmljaGFyZAogSmFuIFBpZXRlciBSaWVnZWwKIEFybWluIFJpZ28KIEFyYyBSaWxleQpAQCAtMTA0Miw4ICsxMTY3LDkgQEAKIEplYW4tQ2xhdWRlIFJpbWJhdWx0CiBWbGFkIFJpc2N1dGlhCiBXZXMgUmlzaGVsCi1EYW4gUml0aQorRGFuaWVsIFJpdGkKIEp1YW4gTS4gQmVsbG8gUml2YXMKK01vaGQgU2FuYWQgWmFraSBSaXp2aQogRGF2aWRlIFJpenpvCiBBbnRob255IFJvYWNoCiBDYXJsIFJvYmJlbgpAQCAtMTA2MiwxMiArMTE4OCwxNCBAQAogQ2FzZSBSb29sZQogVGltb3RoeSBSb3Njb2UKIEVyaWsgUm9zZQorTWFyayBSb3NlbWFuCiBKaW0gUm9za2luZAogQnJpYW4gUm9zbmVyCiBHdWlkbyB2YW4gUm9zc3VtCiBKdXN0IHZhbiBSb3NzdW0KIEh1Z28gdmFuIFJvc3N1bQogU2Fza2lhIHZhbiBSb3NzdW0KK0NsZW1lbnQgUm91YXVsdAogRG9uYWxkIFdhbGxhY2UgUm91c2UgSUkKIExpYW0gUm91dHQKIFRvZGQgUm92aXRvCkBAIC0xMDg0LDcgKzEyMTIsOSBAQAogTWFyayBSdXNzZWxsCiBSdXN0eSBSdXNzZWxsCiBOaWNrIFJ1c3NvCitKYW1lcyBSdXRoZXJmb3JkCiBDaHJpcyBSeWxhbmQKK0Jlcm50IFLDuHNrYXIgQnJlbm5hCiBDb25zdGFudGluYSBTLgogUGF0cmljayBTYWJpbgogU8OpYmFzdGllbiBTYWJsw6kKQEAgLTExMDIsOCArMTIzMiw5IEBACiBUeSBTYXJuYQogSHVnaCBTYXNzZQogQm9iIFNhdmFnZQorRGF2ZSBTYXd5ZXIKIEJlbiBTYXllcgotc2J0CitMdWNhIFNiYXJkZWxsYQogTWFyY28gU2NhdGFnbGluaQogQW5kcmV3IFNjaGFhZgogTWljaGFlbCBTY2hhcmYKQEAgLTExMjMsNiArMTI1NCw3IEBACiBDaGFkIEouIFNjaHJvZWRlcgogQ2hyaXN0aWFuIFNjaHViZXJ0CiBTYW0gU2NodWxlbmJ1cmcKK0FuZHJlYXMgU2Nod2FiCiBTdGVmYW4gU2Nod2FyemVyCiBEaWV0bWFyIFNjaHdlcnRiZXJnZXIKIEZlZGVyaWNvIFNjaHdpbmR0CkBAIC0xMTQwLDEwICsxMjcyLDEyIEBACiBQZXRlIFNldmFuZGVyCiBEZW5pcyBTZXZlcnNvbgogSWFuIFNleWVyCitEbWl0cnkgU2hhY2huZXYKIERhbmllbCBTaGFoYWYKLUhhIFNoYW8KIE1hcmsgU2hhbm5vbgorSGEgU2hhbwogUmljaGFyZCBTaGFwaXJvCitWYXJ1biBTaGFybWEKIFZsYWQgU2hjaGVyYmluYQogSnVzdGluIFNoZWVoeQogQ2hhcmxpZSBTaGVwaGVyZApAQCAtMTE1Miw2ICsxMjg2LDggQEAKIFBldGUgU2hpbm5lcnMKIE1pY2hhZWwgU2hpcGxldHQKIEpvaG4gVy4gU2hpcG1hbgorU2hpeWFvIE1hCitBbGV4IFNoa29wCiBKb2VsIFNocHJlbnR6CiBZdWUgU2h1YWlqaWUKIFRlcnJlbCBTaHVtd2F5CkBAIC0xMTY4LDExICsxMzA0LDE0IEBACiBSYXZpIFNpbmhhCiBKYW5uZSBTaW5ra29uZW4KIE5nIFBoZW5nIFNpb25nCitZYW5uIFNpb25uZWF1CiBHZW9yZ2UgU2lwZQogSi4gU2lwcHJlbGwKIEtyYWdlbiBTaXRha2VyCitWaWxsZSBTa3l0dMOkCiBNaWNoYWVsIFNsb2FuCiBOaWNrIFNsb2FuCitWw6FjbGF2IMWgbWlsYXVlcgogQ2hyaXN0b3BoZXIgU21pdGgKIEVyaWMgVi4gU21pdGgKIEdyZWdvcnkgUC4gU21pdGgKQEAgLTExODIsNiArMTMyMSw3IEBACiBSYWZhbCBTbW90cnp5awogRXJpYyBTbm93CiBEaXJrIFNvZWRlCitOaXIgU29mZmVyCiBQYXVsIFNva29sb3Zza3kKIEV2Z2VueSBTb2xvZ3Vib3YKIENvZHkgU29tZXJ2aWxsZQpAQCAtMTIwMSw2ICsxMzQxLDcgQEAKIEFudGhvbnkgU3RhcmtzCiBPbGl2ZXIgU3RlZWxlCiBHcmVnIFN0ZWluCitNYXJlayBTdGVwbmlvd3NraQogQmFydWNoIFN0ZXJpbgogQ2hyaXMgU3Rlcm4KIEFsZXggU3Rld2FydApAQCAtMTIxMiw2ICsxMzUzLDcgQEAKIFNlcmhpeSBTdG9yY2hha2EKIEtlbiBTdG94CiBEYW4gU3Ryb21iZXJnCitEb25hbGQgU3R1ZmZ0CiBEYW5pZWwgU3R1dHpiYWNoCiBBbmRyZWFzIFN0w7xocmsKIENvbGluIFN1CkBAIC0xMjE5LDE1ICsxMzYxLDIwIEBACiBOYXRoYW4gU3VsbGl2YW4KIE1hcmsgU3VtbWVyZmllbGQKIFJldWJlbiBTdW1uZXIKK0VyeWsgU3VuCiBNYXJlayDFoHVwcGEKIEhpc2FvIFN1enVraQogS2FsbGUgU3ZlbnNzb24KIEFuZHJldyBTdmV0bG92CiBQYXVsIFN3YXJ0egorQWwgU3dlaWdhcnQKIFRoZW5hdWx0IFN5bHZhaW4KIFDDqXRlciBTemFiw7MKK0pvaG4gU3pha21laXN0ZXIKIEFtaXIgU3pla2VseQogQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMKK0hpZGVha2kgVGFrYWhhc2hpCitUYWthc2UgQXJpaGlybwogSW5kcmEgVGFsaXAKIE5laWwgVGFsbGltCiBHZW9mZiBUYWx2b2xhCkBAIC0xMjM5LDYgKzEzODYsNyBAQAogTW9udHkgVGF5bG9yCiBBbmF0b2x5IFRlY2h0b25pawogTWlraGFpbCBUZXJla2hvdgorVmljdG9yIFRlcnLDs24KIFJpY2hhcmQgTS4gVGV3CiBUb2JpYXMgVGhlbGVuCiBGw6l2cnkgVGhpYmF1bHQKQEAgLTEyNDYsMTIgKzEzOTQsMTQgQEAKIE5pY29sYXMgTS4gVGhpw6lyeQogSmFtZXMgVGhvbWFzCiBSb2JpbiBUaG9tYXMKK0JyaWFuIFRob3JuZQogU3RlcGhlbiBUaG9ybmUKIEplcmVteSBUaHVyZ29vZAogRXJpYyBUaWVkZW1hbm4KIEp1bHkgVGlraG9ub3YKIFRyYWN5IFRpbXMKIE9yZW4gVGlyb3NoCitUaW0gVGlzZGFsbAogSmFzb24gVGlzaGxlcgogQ2hyaXN0aWFuIFRpc21lcgogSmltIFRpdHRzbGVyCkBAIC0xMjg1LDYgKzE0MzUsNyBAQAogRG9vYmVlIFIuIFR6ZWNrCiBFcmVuIFTDvHJrYXkKIExpb25lbCBVbG1lcgorQWRuYW4gVW1lcgogUm9nZXIgVXBvbGUKIERhbmllbCBVcmJhbgogTWljaGFlbCBVcm1hbgpAQCAtMTMxNCw5ICsxNDY1LDEwIEBACiBGcmFuayBWaXNzZXIKIEpvaGFubmVzIFZvZ2VsCiBBbGV4IFZvbGtvdgorR3VpZG8gVnJhbmtlbgogTWFydGlqbiBWcmllcwogU2pvZXJkIGRlIFZyaWVzCi1HdWlkbyBWcmFua2VuCitKb25hcyBXYWduZXIKIE5pa2kgVy4gV2FpYmVsCiBXb2p0ZWsgV2FsY3phawogQ2hhcmxlcyBXYWxkbWFuCkBAIC0xMzI0LDEwICsxNDc2LDEyIEBACiBMYXJyeSBXYWxsCiBLZXZpbiBXYWx6ZXIKIFJvZHJpZ28gU3RlaW5tdWxsZXIgV2FuZGVybGV5CitEaW5neXVhbiBXYW5nCiBLZSBXYW5nCitMaWFuZy1CbyBXYW5nCiBHcmVnIFdhcmQKK1RvbSBXYXJkaWxsCiBaYWNoYXJ5IFdhcmUKLUpvbmFzIFdhZ25lcgogQmFycnkgV2Fyc2F3CiBTdGV2ZSBXYXRlcmJ1cnkKIEJvYiBXYXRzb24KQEAgLTEzNDMsNiArMTQ5Nyw3IEBACiBFZHdhcmQgV2VsYm91cm5lCiBDbGlmZiBXZWxscwogUmlja2FyZCBXZXN0bWFuCitKb3NlcGggV2VzdG9uCiBKZWZmIFdoZWVsZXIKIENocmlzdG9waGVyIFdoaXRlCiBEYXZpZCBXaGl0ZQpAQCAtMTM1MSw2ICsxNTA2LDcgQEAKIEZlbGl4IFdpZW1hbm4KIEdlcnJ5IFdpZW5lcgogRnJhbmsgV2llcnpiaWNraQorU2FudG9zbyBXaWpheWEKIEJyeWNlICJab29rbyIgV2lsY294LU8nSGVhcm4KIFRpbW90aHkgV2lsZAogSmFrdWIgV2lsawpAQCAtMTM1OCw2ICsxNTE0LDcgQEAKIEphc29uIFdpbGxpYW1zCiBKb2huIFdpbGxpYW1zCiBTdWUgV2lsbGlhbXMKK0Nhcm9sIFdpbGxpbmcKIFN0ZXZlbiBXaWxsaXMKIEZyYW5rIFdpbGxpc29uCiBHZW9mZiBXaWxzb24KQEAgLTEzNjksNiArMTUyNiw3IEBACiBEaWsgV2ludGVyCiBCbGFrZSBXaW50b24KIEplYW4tQ2xhdWRlIFdpcHBsZXIKK1N0w6lwaGFuZSBXaXJ0ZWwKIExhcnMgV2lyemVuaXVzCiBKb2huIFdpc2VtYW4KIENocmlzIFdpdGhlcnMKQEAgLTEzODMsOCArMTU0MSwxMCBAQAogR29yZG9uIFdvcmxleQogRGFycmVuIFdvcnJhbGwKIFRob21hcyBXb3V0ZXJzCitEYW5pZWwgV296bmlhawogSGVpa28gV3VuZHJhbQogRG91ZyBXeWF0dAorWGlhbmcgWmhhbmcKIFJvYmVydCBYaWFvCiBGbG9yZW50IFhpY2x1bmEKIEhpcm9rYXp1IFlhbWFtb3RvCkBAIC0xMzk1LDYgKzE1NTUsNyBAQAogRGFubnkgWW9vCiBSb3J5IFlvcmtlCiBHZW9yZ2UgWW9zaGlkYQorS2F6dWhpcm8gWW9zaGlkYQogTWFzYXp1bWkgWW9zaGlrYXdhCiBBcm5hdWQgWXNtYWwKIEJlcm5hcmQgWXVlCkBAIC0xNDEwLDQgKzE1NzEsNyBAQAogQ2hlbmcgWmhhbmcKIEthaSBaaHUKIFRhcmVrIFppYWTDqQorR2VubmFkaXkgWmxvYmluCitEb3VnIFpvbmdrZXIKIFBldGVyIMOFc3RyYW5kCitldmlsemVybwpkaWZmIC0tZ2l0IGEvTWlzYy9ISVNUT1JZIGIvTWlzYy9ISVNUT1JZCmluZGV4IDAxYzYzNWIuLmE5ZTI5MTAgMTAwNjQ0Ci0tLSBhL01pc2MvSElTVE9SWQorKysgYi9NaXNjL0hJU1RPUlkKQEAgLTMsMTMgKzMsNDExMCBAQAogCiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHJlbGVhc2UgbWVzc2FnZXMgZm9yIHByZXZpb3VzIFB5dGhvbiByZWxlYXNlcy4KIEFzIHlvdSByZWFkIG9uIHlvdSBnbyBiYWNrIHRvIHRoZSBkYXJrIGFnZXMgb2YgUHl0aG9uJ3MgaGlzdG9yeS4KLShOb3RlOiBuZXdzIGFib3V0IDIuNWMyIGFuZCBsYXRlciAyLjUgcmVsZWFzZXMgaXMgaW4gdGhlIE1pc2MvTkVXUwotZmlsZSBvZiB0aGUgcmVsZWFzZTI1LW1haW50IGJyYW5jaC4pCiAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiAKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wPworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI5LVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTYwNDY6IEZpeCBsb2FkaW5nIHNvdXJjZWxlc3MgbGVnYWN5IC5weW8gZmlsZXMuCisKKy0gSXNzdWUgIzE2MDYwOiBGaXggcmVmY291bnRpbmcgYnVnIHdoZW4gX190cnVuY19fIHJldHVybnMgYW4gb2JqZWN0CisgIHdob3NlIF9faW50X18gZ2l2ZXMgYSBub24taW50ZWdlci4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjAxMjogRml4IGEgcmVncmVzc2lvbiBpbiBweWV4cGF0LiBUaGUgcGFyc2VyJ3MgVXNlRm9yZWlnbkRURCgpCisgIG1ldGhvZCBkb2Vzbid0IHJlcXVpcmUgYW4gYXJndW1lbnQgYWdhaW4uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDIzLVNlcC0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU5MDA6IEZpeCByZWZlcmVuY2UgbGVhayBpbiBQeVVuaWNvZGVfVHJhbnNsYXRlQ2hhcm1hcCgpLgorCistIElzc3VlICMxNTkyNjogRml4IGNyYXNoIGFmdGVyIG11bHRpcGxlIHJlaW5pdGlhbGl6YXRpb25zIG9mIHRoZSBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTU4OTU6IEZpeCBGSUxFIHBvaW50ZXIgbGVhayBpbiBvbmUgZXJyb3IgYnJhbmNoIG9mCisgIFB5UnVuX1NpbXBsZUZpbGVFeEZsYWdzKCkgd2hlbiBmaWxlbmFtZSBwb2ludHMgdG8gYSBweWMvcHlvIGZpbGUsIGNsb3NlaXQKKyAgaXMgZmFsc2UgYW4gYW5kIHNldF9tYWluX2xvYWRlcigpIGZhaWxzLgorCistIEZpeGVzIGZvciBhIGZldyBjcmFzaCBhbmQgbWVtb3J5IGxlYWsgcmVncmVzc2lvbnMgZm91bmQgYnkgQ292ZXJpdHkuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4ODI6IENoYW5nZSBfZGVjaW1hbCB0byBhY2NlcHQgYW55IGNvZWZmaWNpZW50IHR1cGxlIHdoZW4KKyAgY29uc3RydWN0aW5nIGluZmluaXRpZXMuIFRoaXMgaXMgZG9uZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkKKyAgd2l0aCBkZWNpbWFsLnB5OiBJbmZpbml0eSBjb2VmZmljaWVudHMgYXJlIHVuZGVmaW5lZCBpbiBfZGVjaW1hbAorICAoaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzcGVjaWZpY2F0aW9uKS4KKworLSBJc3N1ZSAjMTU5MjU6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gZW1haWwudXRpbCB3aGVyZSB0aGUgcGFyc2VkYXRlKCkgYW5kCisgIHBhcnNlZGF0ZV90eigpIGZ1bmN0aW9ucyBkaWQgbm90IHJldHVybiBOb25lIGFueW1vcmUgd2hlbiB0aGUgYXJndW1lbnQgY291bGQKKyAgbm90IGJlIHBhcnNlZC4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1OTczOiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBjb21wYXJpbmcgZGF0ZXRpbWUgdGltZXpvbmUKKyAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTU5Nzc6IEZpeCBtZW1vcnkgbGVhayBpbiBNb2R1bGVzL19zc2wuYyB3aGVuIHRoZSBmdW5jdGlvbgorICBfc2V0X25wbl9wcm90b2NvbHMoKSBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMsIHRoYW5rcyB0byBEYW5pZWwgU29tbWVybWFubi4KKworLSBJc3N1ZSAjMTU5Njk6IGZhdWx0aGFuZGxlciBtb2R1bGU6IHJlbmFtZSBkdW1wX3RyYWNlYmFja3NfbGF0ZXIoKSB0bworICBkdW1wX3RyYWNlYmFja19sYXRlcigpIGFuZCBjYW5jZWxfZHVtcF90cmFjZWJhY2tzX2xhdGVyKCkgdG8KKyAgY2FuY2VsX2R1bXBfdHJhY2ViYWNrX2xhdGVyKCkuCisKKy0gX2RlY2ltYWwgbW9kdWxlOiB1c2Ugb25seSBDIDg5IHN0eWxlIGNvbW1lbnRzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIFJlbGVhc2UgQ2FuZGlkYXRlIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAwOS1TZXAtMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzEzOTkyOiBUaGUgdHJhc2hjYW4gbWVjaGFuaXNtIGlzIG5vdyB0aHJlYWQtc2FmZS4gIFRoaXMgZWxpbWluYXRlcworICBzcG9yYWRpYyBjcmFzaGVzIGluIG11bHRpLXRocmVhZCBwcm9ncmFtcyB3aGVuIHNldmVyYWwgbG9uZyBkZWFsbG9jYXRvcgorICBjaGFpbnMgcmFuIGNvbmN1cnJlbnRseSBhbmQgaW52b2x2ZWQgc3ViY2xhc3NlcyBvZiBidWlsdC1pbiBjb250YWluZXIKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzE1Nzg0OiBNb2RpZnkgT1NFcnJvci5fX3N0cl9fKCkgdG8gYmV0dGVyIGRpc3Rpbmd1aXNoIGJldHdlZW4KKyAgZXJybm8gZXJyb3IgbnVtYmVycyBhbmQgV2luZG93cyBlcnJvciBudW1iZXJzLgorCistIElzc3VlICMxNTc4MTogRml4IHR3byBzbWFsbCByYWNlIGNvbmRpdGlvbnMgaW4gaW1wb3J0J3MgbW9kdWxlIGxvY2tpbmcuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTU4NDc6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UsIHdoaWNoIGRpZCBub3QgYWNjZXB0IHR1cGxlcworICBhcyBhcmd1bWVudCBsaXN0cyBhbnltb3JlLgorCistIElzc3VlICMxNTgyODogUmVzdG9yZSBzdXBwb3J0IGZvciBDIGV4dGVuc2lvbnMgaW4gaW1wLmxvYWRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzE1MzQwOiBGaXggaW1wb3J0aW5nIHRoZSByYW5kb20gbW9kdWxlIHdoZW4gL2Rldi91cmFuZG9tIGNhbm5vdAorICBiZSBvcGVuZWQuICBUaGlzIHdhcyBhIHJlZ3Jlc3Npb24gY2F1c2VkIGJ5IHRoZSBoYXNoIHJhbmRvbWl6YXRpb24gcGF0Y2guCisKKy0gSXNzdWUgIzEwNjUwOiBEZXByZWNhdGUgdGhlIHdhdGNoZXhwIHBhcmFtZXRlciBvZiB0aGUgRGVjaW1hbC5xdWFudGl6ZSgpCisgIG1ldGhvZC4KKworLSBJc3N1ZSAjMTU3ODU6IE1vZGlmeSB3aW5kb3cuZ2V0X3djaCgpIEFQSSBvZiB0aGUgY3Vyc2VzIG1vZHVsZTogcmV0dXJuCisgIGEgY2hhcmFjdGVyIGZvciBtb3N0IGtleXMsIGFuZCBhbiBpbnRlZ2VyIGZvciBzcGVjaWFsIGtleXMsIGluc3RlYWQgb2YKKyAgYWx3YXlzIHJldHVybmluZyBhbiBpbnRlZ2VyLiBTbyBpdCBpcyBub3cgcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggc3BlY2lhbAorICBrZXlzIGxpa2Uga2V5cGFkIGtleXMuCisKKy0gSXNzdWUgIzE0MjIzOiBGaXggd2luZG93LmFkZGNoKCkgb2YgdGhlIGN1cnNlcyBtb2R1bGUgZm9yIHNwZWNpYWwgY2hhcmFjdGVycworICBsaWtlIGN1cnNlcy5BQ1NfSExJTkU6IHRoZSBQeXRob24gZnVuY3Rpb24gYWRkY2goaW50KSBhbmQgYWRkY2goYnl0ZXMpIGlzIG5vdworICBjYWxsaW5nIHRoZSBDIGZ1bmN0aW9uIHdhZGRjaCgpL212d2FkZGNoKCkgKGFzIGl0IHdhcyBkb25lIGluIFB5dGhvbiAzLjIpLAorICBpbnN0ZWFkIG9mIHdhZGRfd2NoKCkvbXZ3YWRkX3djaCgpLiBUaGUgUHl0aG9uIGZ1bmN0aW9uIGFkZGNoKHN0cikgaXMgc3RpbGwKKyAgY2FsbGluZyB0aGUgQyBmdW5jdGlvbiB3YWRkX3djaCgpL212d2FkZF93Y2goKSBpZiB0aGUgUHl0aG9uIGN1cnNlcyBpcyBsaW5rZWQKKyAgdG8gbGlibmN1cnNlc3cuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNTgyMjogUmVhbGx5IGVuc3VyZSAydG8zIGdyYW1tYXIgcGlja2xlcyBhcmUgcHJvcGVybHkgaW5zdGFsbGVkCisgIChyZXBsYWNlcyBmaXhlcyBmb3IgSXNzdWUgIzE1NjQ1KS4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTgxNDogVGhlIG1lbW9yeXZpZXcgZW5oYW5jZW1lbnRzIGluIDMuMy4wIGFjY2lkZW50YWxseSBwZXJtaXR0ZWQKKyAgdGhlIGhhc2hpbmcgb2YgbXVsdGktZGltZW5zaW9uYWwgbWVtb3J2aWV3cyBhbmQgbWVtb3J5dmlld3Mgd2l0aCBtdWx0aS1ieXRlCisgIGl0ZW0gZm9ybWF0cy4gVGhlIGludGVuZGVkIHJlc3RyaWN0aW9ucyBoYXZlIG5vdyBiZWVuIGRvY3VtZW50ZWQgLSB0aGV5CisgIHdpbGwgYmUgY29ycmVjdGx5IGVuZm9yY2VkIGluIDMuMy4xCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgUmVsZWFzZSBDYW5kaWRhdGUgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDI1LUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1NzM6IG1lbW9yeXZpZXcgY29tcGFyaXNvbnMgYXJlIG5vdyBwZXJmb3JtZWQgYnkgdmFsdWUgd2l0aCBmdWxsCisgIHN1cHBvcnQgZm9yIGFueSB2YWxpZCBzdHJ1Y3QgbW9kdWxlIGZvcm1hdCBkZWZpbml0aW9uLgorCistIElzc3VlICMxNTMxNjogV2hlbiBhbiBpdGVtIGluIHRoZSBmcm9tbGlzdCBmb3IgX19pbXBvcnRfXyBkb2Vzbid0IGV4aXN0LAorICBkb24ndCByYWlzZSBhbiBlcnJvciwgYnV0IGlmIGFuIGV4Y2VwdGlvbiBpcyByYWlzZWQgYXMgcGFydCBvZiBhbiBpbXBvcnQgZG8KKyAgbGV0IHRoYXQgcHJvcGFnYXRlLgorCistIElzc3VlICMxNTc3ODogZW5zdXJlIHRoYXQgc3RyKEltcG9ydEVycm9yKG1zZykpIHJldHVybnMgYSBzdHIKKyAgZXZlbiB3aGVuIG1zZyBpc24ndCBhIHN0ci4KKworLSBJc3N1ZSAjMjA1MTogU291cmNlIGZpbGUgcGVybWlzc2lvbiBiaXRzIGFyZSBvbmNlIGFnYWluIGNvcnJlY3RseQorICBjb3BpZWQgdG8gdGhlIGNhY2hlZCBieXRlY29kZSBmaWxlLiAoVGhlIG1pZ3JhdGlvbiB0byBpbXBvcnRsaWIKKyAgcmVpbnRyb2R1Y2VkIHRoaXMgcHJvYmxlbSBiZWNhdXNlIHRoZXNlIHdhcyBubyByZWdyZXNzaW9uIHRlc3QuIEEgdGVzdAorICBoYXMgYmVlbiBhZGRlZCBhcyBwYXJ0IG9mIHRoaXMgcGF0Y2gpCisKKy0gSXNzdWUgIzE1NzYxOiBGaXggY3Jhc2ggd2hlbiBQWVRIT05FWEVDVVRBQkxFIGlzIHNldCBvbiBNYWMgT1MgWC4KKworLSBJc3N1ZSAjMTU3MjY6IEZpeCBpbmNvcnJlY3QgYm91bmRzIGNoZWNraW5nIGluIFB5U3RhdGVfRmluZE1vZHVsZS4KKyAgUGF0Y2ggYnkgUm9iaW4gU2NocmVpYmVyLgorCistIElzc3VlICMxNTYwNDogVXBkYXRlIHVzZXMgb2YgUHlPYmplY3RfSXNUcnVlKCkgdG8gY2hlY2sgZm9yIGFuZCBoYW5kbGUKKyAgZXJyb3JzIGNvcnJlY3RseS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0ODQ2OiBpbXBvcnRsaWIuRmlsZUZpbmRlciBub3cgaGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUKKyAgZGlyZWN0b3J5IGJlaW5nIHNlYXJjaGVkIGlzIHJlbW92ZWQgYWZ0ZXIgYSBwcmV2aW91cyBpbXBvcnQgYXR0ZW1wdAorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzEzMzcwOiBFbnN1cmUgdGhhdCBjdHlwZXMgd29ya3Mgb24gTWFjIE9TIFggd2hlbiBQeXRob24gaXMKKyAgY29tcGlsZWQgdXNpbmcgdGhlIGNsYW5nIGNvbXBpbGVyCisKKy0gSXNzdWUgIzEzMDcyOiBUaGUgYXJyYXkgbW9kdWxlJ3MgJ3UnIGZvcm1hdCBjb2RlIGlzIG5vdyBkZXByZWNhdGVkIGFuZAorICB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDQuMC4KKworLSBJc3N1ZSAjMTU1NDQ6IEZpeCBEZWNpbWFsLl9fZmxvYXRfXyB0byB3b3JrIHdpdGggcGF5bG9hZC1jYXJyeWluZyBOYU5zLgorCistIElzc3VlICMxNTI0OTogQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBtYW5nbGVzIEZyb20gbGluZXMgKHdoZW4KKyAgcmVxdWVzdGVkKSBldmVuIGlmIHRoZSBib2R5IGNvbnRhaW5zIHVuZGVjb2RhYmxlIGJ5dGVzLgorCistIElzc3VlICMxNTc3NzogRml4IGEgcmVmbGVhayBpbiBfcG9zaXhzdWJwcm9jZXNzLgorCistIElzc3VlICMjNjY1MTk0OiBVcGRhdGUgZW1haWwudXRpbHMubG9jYWx0aW1lIHRvIHVzZSBkYXRldGltZS5hc3RpbWV6b25lIGFuZAorICBjb3JyZWN0bHkgaGFuZGxlIGhpc3RvcmljIGNoYW5nZXMgaW4gVVRDIG9mZnNldHMuCisKKy0gSXNzdWUgIzE1MTk5OiBGaXggSmF2YVNjcmlwdCdzIGRlZmF1bHQgTUlNRSB0eXBlIHRvIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQuCisgIFBhdGNoIGJ5IEJvaHVzbGF2IEthYnJkYS4KKworLSBJc3N1ZSAjMTI2NDM6IGNvZGUuSW50ZXJhY3RpdmVDb25zb2xlIG5vdyByZXNwZWN0cyBzeXMuZXhjZXB0aG9vayB3aGVuCisgIGRpc3BsYXlpbmcgZXhjZXB0aW9ucyAoUGF0Y2ggYnkgQWFyb24gSWxlcykKKworLSBJc3N1ZSAjMTM1Nzk6IHN0cmluZy5Gb3JtYXR0ZXIgbm93IHVuZGVyc3RhbmRzIHRoZSAnYScgY29udmVyc2lvbiBzcGVjaWZpZXIuCisKKy0gSXNzdWUgIzE1NzkzOiBTdGFjayBjb3JydXB0aW9uIGluIHNzbC5SQU5EX2VnZCgpLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTU5NTogRml4IHN1YnByb2Nlc3MuUG9wZW4odW5pdmVyc2FsX25ld2xpbmVzPVRydWUpCisgIGZvciBjZXJ0YWluIGxvY2FsZXMgKHV0Zi0xNiBhbmQgdXRmLTMyIGZhbWlseSkuIFBhdGNoIGJ5IENocmlzIEplcmRvbmVrLgorCistIElzc3VlICMxNTQ3NzogSW4gY21hdGggYW5kIG1hdGggbW9kdWxlcywgYWRkIHdvcmthcm91bmQgZm9yIHBsYXRmb3JtcyB3aG9zZQorICBzeXN0ZW0tc3VwcGxpZWQgbG9nMXAgZnVuY3Rpb24gZG9lc24ndCByZXNwZWN0IHNpZ25zIG9mIHplcm9zLgorCistIElzc3VlICMxNTcxNTogaW1wb3J0bGliLl9faW1wb3J0X18oKSB3aWxsIHNpbGVuY2UgYW4gSW1wb3J0RXJyb3Igd2hlbiB0aGUgdXNlCisgIG9mIGZyb21saXN0IGxlYWRzIHRvIGEgZmFpbGVkIGltcG9ydC4KKworLSBJc3N1ZSAjMTQ2Njk6IEZpeCBwaWNrbGluZyBvZiBjb25uZWN0aW9ucyBhbmQgc29ja2V0cyBvbiBNYWNPU1gKKyAgYnkgc2VuZGluZy9yZWNlaXZpbmcgYW4gYWNrbm93bGVkZ21lbnQgYWZ0ZXIgZmlsZSBkZXNjcmlwdG9yIHRyYW5zZmVyLgorICBUZXN0UGlja2xpbmdDb25uZWN0aW9uIGhhcyBiZWVuIHJlZW5hYmxlZCBmb3IgTWFjT1NYLgorCistIElzc3VlICMxMTA2MjogRml4IGFkZGluZyBhIG1lc3NhZ2UgZnJvbSBmaWxlIHRvIEJhYnlsIG1haWxib3guCisKKy0gSXNzdWUgIzE1NjQ2OiBQcmV2ZW50IGVxdWl2YWxlbnQgb2YgYSBmb3JrIGJvbWIgd2hlbiB1c2luZworICBtdWx0aXByb2Nlc3Npbmcgb24gV2luZG93cyB3aXRob3V0IHRoZSAiaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJyIKKyAgaWRpb20uCisKKy0gSXNzdWUgIzE1Njc4OiBGaXggSURMRSBtZW51cyB3aGVuIHN0YXJ0ZWQgZnJvbSBPUyBYIGNvbW1hbmQgbGluZQorICAoMy4zLjBiMiByZWdyZXNzaW9uKS4KKworQyBBUEkKKy0tLS0tCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDY3NDogQWRkIGEgZGlzY3Vzc2lvbiBvZiB0aGUganNvbiBtb2R1bGUncyBzdGFuZGFyZCBjb21wbGlhbmNlLgorICBQYXRjaCBieSBDaHJpcyBSZWJlcnQuCisKKy0gQ3JlYXRlIGEgJ0NvbmN1cnJlbnQgRXhlY3V0aW9uJyBzZWN0aW9uIGluIHRoZSBkb2NzLCBhbmQgc3BsaXQgdXAgdGhlCisgICdPcHRpb25hbCBPcGVyYXRpbmcgU3lzdGVtIFNlcnZpY2VzJyBzZWN0aW9uIHRvIHVzZSBhIG1vcmUgdXNlci1jZW50cmljCisgIGNsYXNzaWZpY2F0aW9uIHNjaGVtZSAoc3BsaXR0aW5nIHRoZW0gYWNyb3NzIHRoZSBuZXcgQ0Ugc2VjdGlvbiwgSVBDIGFuZAorICB0ZXh0IHByb2Nlc3NpbmcpLiBPcGVyYXRpbmcgc3lzdGVtIGxpbWl0YXRvbnMgY2FuIGJlIHJlZmxlY3RlZCB3aXRoCisgIHRoZSBTcGhpbnggYGA6cGxhdGZvcm06YGAgdGFnLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgYXMgcGFydCBvZiB0aGUgVGFibGUgb2YKKyAgQ29udGVudHMuCisKKy0gSXNzdWUgIzQ5NjY6IEJyaW5nIHRoZSBzZXF1ZW5jZSBkb2NzIHVwIHRvIGRhdGUgZm9yIHRoZSBQeTNrIHRyYW5zaXRpb24KKyAgYW5kIHRoZSBtYW55IGxhbmd1YWdlIGVuaGFuY2VtZW50cyBzaW5jZSB0aGV5IHdlcmUgb3JpZ2luYWwgd3JpdHRlbgorCistIFRoZSAicGF0aCBpbXBvcnRlciIgbWlzbm9tZXIgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCBFcmljIFNub3cncworICBtb3JlLWF3a3dhcmQtYnV0LWF0LWxlYXN0LW5vdC13cm9uZyBzdWdnZXN0aW9uIG9mICJwYXRoIGJhc2VkIGZpbmRlciIgaW4KKyAgdGhlIGltcG9ydCBzeXN0ZW0gcmVmZXJlbmNlIGRvY3MKKworLSBJc3N1ZSAjMTU2NDA6IERvY3VtZW50IGltcG9ydGxpYi5hYmMuRmluZGVyIGFzIGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzE1NjMwOiBBZGQgYW4gZXhhbXBsZSBmb3IgImNvbnRpbnVlIiBzdG10IGluIHRoZSB0dXRvcmlhbC4gUGF0Y2ggYnkKKyAgRGFuaWVsIEVsbGlzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTU3NDc6IFpGUyBhbHdheXMgcmV0dXJucyBFT1BOT1RTVVBQIHdoZW4gYXR0ZW1wdGluZyB0byBzZXQgdGhlCisgIFVGX0lNTVVUQUJMRSBmbGFnICh2aWEgZWl0aGVyIGNoZmxhZ3Mgb3IgbGNoZmxhZ3MpOyByZWZhY3RvciBhZmZlY3RlZAorICB0ZXN0cyBpbiB0ZXN0X3Bvc2l4LnB5IHRvIGFjY291bnQgZm9yIHRoaXMuCisKKy0gSXNzdWUgIzE1Mjg1OiBSZWZhY3RvciB0aGUgYXBwcm9hY2ggZm9yIHRlc3RpbmcgY29ubmVjdCB0aW1lb3V0cyB1c2luZworICB0d28gZXh0ZXJuYWwgaG9zdHMgdGhhdCBoYXZlIGJlZW4gY29uZmlndXJlZCBzcGVjaWZpY2FsbHkgZm9yIHRoaXMgdHlwZQorICBvZiB0ZXN0LgorCistIElzc3VlICMxNTc0MzogUmVtb3ZlIHRoZSBkZXByZWNhdGVkIG1ldGhvZCB1c2FnZSBpbiB1cmxsaWIgdGVzdHMuIFBhdGNoIGJ5CisgIEplZmYgS251cHAuCisKKy0gSXNzdWUgIzE1NjE1OiBBZGQgc29tZSB0ZXN0cyBmb3IgdGhlIGpzb24gbW9kdWxlJ3MgaGFuZGxpbmcgb2YgaW52YWxpZAorICBpbnB1dCBkYXRhLiAgUGF0Y2ggYnkgS3VzaGFsIERhcy4KKworQnVpbGQKKy0tLS0tCisKKy0gT3V0cHV0IGxpYiBmaWxlcyBmb3IgUEdPIGJ1aWxkIGludG8gUEdPIGRpcmVjdG9yeS4KKworLSBQaWNrIHVwIDMyLWJpdCBsYXVuY2hlciBmcm9tIFBHTyBkaXJlY3Rvcnkgb24gNjQtYml0IFBHTyBidWlsZC4KKworLSBEcm9wIFBDXHB5dGhvbl9udC5oIGFzIGl0J3Mgbm90IHVzZWQuIEFkZCBpbnB1dCBkZXBlbmRlbmN5IG9uIGN1c3RvbQorICBidWlsZCBzdGVwLgorCistIElzc3VlICMxNTUxMTogRHJvcCBleHBsaWNpdCBkZXBlbmRlbmN5IG9uIHB5dGhvbnh5LmxpYiBmcm9tIF9kZWNpbWFsCisgIGFtZDY0IGNvbmZpZ3VyYXRpb24uCisKKy0gQWRkIG1pc3NpbmcgUEdJL1BHTyBjb25maWd1cmF0aW9ucyBmb3IgcHl3bGF1bmNoZXIuCisKKy0gSXNzdWUgIzE1NjQ1OiBFbnN1cmUgMnRvMyBncmFtbWFyIHBpY2tsZXMgYXJlIHByb3Blcmx5IGluc3RhbGxlZC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBCZXRhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDEyLUF1Zy0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTU1Njg6IEZpeCB0aGUgcmV0dXJuIHZhbHVlIG9mICJ5aWVsZCBmcm9tIiB3aGVuIFN0b3BJdGVyYXRpb24gaXMKKyAgcmFpc2VkIGJ5IGEgY3VzdG9tIGl0ZXJhdG9yLgorCistIElzc3VlICMxMzExOTogc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciBhcmUgbm93IHVzaW5nICJcclxuIiBuZXdsaW5lIG9uCisgIFdpbmRvd3MsIGFzIFB5dGhvbiAyLgorCistIElzc3VlICMxNTUzNDogRml4IHRoZSBmYXN0LXNlYXJjaCBmdW5jdGlvbiBmb3Igbm9uLUFTQ0lJIFVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTU1MDg6IEZpeCB0aGUgZG9jc3RyaW5nIGZvciBfX2ltcG9ydF9fIHRvIGhhdmUgdGhlIHByb3BlciBkZWZhdWx0CisgIHZhbHVlIG9mIDAgZm9yICdsZXZlbCcgYW5kIHRvIG5vdCBtZW50aW9uIG5lZ2F0aXZlIGxldmVscyBzaW5jZSB0aGV5IGFyZSBub3QKKyAgc3VwcG9ydGVkLgorCistIElzc3VlICMxNTQyNTogRWxpbWluYXRlZCB0cmFjZWJhY2sgbm9pc2UgZnJvbSBtb3JlIHNpdHVhdGlvbnMgaW52b2x2aW5nCisgIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ1Nzg6IFN1cHBvcnQgbW9kdWxlcyByZWdpc3RlcmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5IGFnYWluLgorCistIElzc3VlICMxNTQ2NjogU3RvcCB1c2luZyBUWVBFX0lOVDY0IGluIG1hcnNoYWwsIHRvIG1ha2UgaW1wb3J0bGliLmggKGFuZCBvdGhlcgorICBieXRlIGNvZGUgZmlsZXMpIGVxdWFsIGJldHdlZW4gMzItYml0IGFuZCA2NC1iaXQgc3lzdGVtcy4KKworLSBJc3N1ZSAjMTY5MjMzNTogTW92ZSBpbml0aWFsIGV4Y2VwdGlvbiBhcmdzIGFzc2lnbm1lbnQgdG8KKyAgIkJhc2VFeGNlcHRpb24uX19uZXdfXyIgdG8gaGVscCBwaWNrbGluZyBvZiBuYWl2ZSBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMjgzNDogRml4IFB5QnVmZmVyX1RvQ29udGlndW91cygpIGZvciBub24tY29udGlndW91cyBhcnJheXMuCisKKy0gSXNzdWUgIzE1NDU2OiBGaXggY29kZSBfX3NpemVvZl9fIGFmdGVyICMxMjM5OSBjaGFuZ2UuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxNTQwNDogUmVmbGVhayBpbiBQeU1ldGhvZE9iamVjdCByZXByLgorCistIElzc3VlICMxNTM5NDogQW4gaXNzdWUgaW4gUHlNb2R1bGVfQ3JlYXRlIHRoYXQgY2F1c2VkIHJlZmVyZW5jZXMgdG8gYmUgbGVha2VkCisgIG9uIHNvbWUgZXJyb3IgcGF0aHMgaGFzIGJlZW4gZml4ZWQuICBQYXRjaCBieSBKdWxpYSBMYXdhbGwuCisKKy0gSXNzdWUgIzE1MzY4OiBBbiBpc3N1ZSB0aGF0IGNhdXNlZCBieXRlY29kZSBnZW5lcmF0aW9uIHRvIGJlIG5vbi1kZXRlcm1pbmlzdGljCisgIGhhcyBiZWVuIGZpeGVkLgorCistIElzc3VlICMxNTIwMjogQ29uc2lzdGVudGx5IHVzZSB0aGUgbmFtZSAiZm9sbG93X3N5bWxpbmtzIiBmb3IgbmV3IHBhcmFtZXRlcnMKKyAgaW4gb3MgYW5kIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MzE0OiBfX21haW5fXy5fX2xvYWRlcl9fIGlzIG5vdyBzZXQgY29ycmVjdGx5IGR1cmluZyBpbnRlcnByZXRlcgorICBzdGFydHVwLgorCistIElzc3VlICMxNTExMTogV2hlbiBhIG1vZHVsZSBpbXBvcnRlZCB1c2luZyAnZnJvbSBpbXBvcnQnIGhhcyBhbiBJbXBvcnRFcnJvcgorICBpbnNpZGUgaXRzZWxmLCBkb24ndCBtYXNrIHRoYXQgZmFjdCBiZWhpbmQgYSBnZW5lcmljIEltcG9ydEVycm9yIGZvciB0aGUKKyAgbW9kdWxlIGl0c2VsZi4KKworLSBJc3N1ZSAjMTUyOTM6IEFkZCBHQyBzdXBwb3J0IHRvIHRoZSBBU1QgYmFzZSBub2RlIHR5cGUuCisKKy0gSXNzdWUgIzE1MjkxOiBGaXggYSBtZW1vcnkgbGVhayB3aGVyZSBBU1Qgbm9kZXMgd2hlcmUgbm90IHByb3Blcmx5CisgIGRlYWxsb2NhdGVkLgorCistIElzc3VlICMxNTExMDogRml4IHRoZSB0cmFjZWJhY2tzIGdlbmVyYXRlZCBieSAiaW1wb3J0IHh4eCIgdG8gbm90IHNob3cgdGhlCisgIGltcG9ydGxpYiBzdGFjayBmcmFtZXMuCisKKy0gSXNzdWUgIzE1MDIwOiBUaGUgcHJvZ3JhbSBuYW1lIHVzZWQgdG8gc2VhcmNoIGZvciBQeXRob24ncyBwYXRoIGlzIG5vdworICAicHl0aG9uMyIgdW5kZXIgVW5peCwgbm90ICJweXRob24iLgorCistIElzc3VlICMxNTAzMzogRml4IHRoZSBleGl0IHN0YXR1cyBidWcgd2hlbiBtb2R1bGVzIGludm9rZWQgdXNpbmcgLW0gc3dpdGgsCisgIHJldHVybiB0aGUgcHJvcGVyIGZhaWx1cmUgcmV0dXJuIHZhbHVlICgxKS4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgSmVmZiBLbnVwcC4KKworLSBJc3N1ZSAjMTUyMjk6IEFuIE9TRXJyb3Igc3ViY2xhc3Mgd2hvc2UgX19pbml0X18gZG9lc24ndCBjYWxsIGJhY2sKKyAgT1NFcnJvci5fX2luaXRfXyBjb3VsZCBwcm9kdWNlIGluY29tcGxldGUgaW5zdGFuY2VzLCBsZWFkaW5nIHRvIGNyYXNoZXMgd2hlbgorICBjYWxsaW5nIHN0cigpIG9uIHRoZW0uCisKKy0gSXNzdWUgMTUzMDc6IFZpcnR1YWwgZW52aXJvbm1lbnRzIG5vdyB1c2Ugc3ltbGlua3Mgd2l0aCBmcmFtZXdvcmsgYnVpbGRzIG9uCisgIE1hYyBPUyBYLCBsaWtlIG90aGVyIFBPU0lYIGJ1aWxkcy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNTQyNDogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgYXJyYXkgb2JqZWN0cy4gIFBhdGNoIGJ5CisgIEx1ZHdpZyBIw6RobmUuCisKKy0gSXNzdWUgIzE1NTc2OiBBbGxvdyBleHRlbnNpb24gbW9kdWxlcyB0byBhY3QgYXMgYSBwYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlLgorCistIElzc3VlICMxNTUwMjogSGF2ZSBpbXBvcnRsaWIuaW52YWxpZGF0ZV9jYWNoZXMoKSB3b3JrIG9uIHN5cy5tZXRhX3BhdGggaW5zdGVhZAorICBvZiBzeXMucGF0aF9pbXBvcnRlcl9jYWNoZS4KKworLSBJc3N1ZSAjMTUxNjM6IFB5ZG9jIHNob3VsZG4ndCBsaXN0IF9fbG9hZGVyX18gYXMgbW9kdWxlIGRhdGEuCisKKy0gSXNzdWUgIzE1NDcxOiBEbyBub3QgdXNlIG11dGFibGUgb2JqZWN0cyBhcyBkZWZhdWx0cyBmb3IKKyAgaW1wb3J0bGliLl9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1NTk6IFRvIGF2b2lkIGEgcHJvYmxlbWF0aWMgZmFpbHVyZSBtb2RlIHdoZW4gcGFzc2VkIHRvIHRoZSBieXRlcworICBjb25zdHJ1Y3Rvciwgb2JqZWN0cyBpbiB0aGUgaXBhZGRyZXNzIG1vZHVsZSBubyBsb25nZXIgaW1wbGVtZW50IF9faW5kZXhfXworICAodGhleSBzdGlsbCBpbXBsZW1lbnQgX19pbnRfXyBhcyBhcHByb3ByaWF0ZSkKKworLSBJc3N1ZSAjMTU1NDY6IEZpeCBoYW5kbGluZyBvZiBwYXRob2xvZ2ljYWwgaW5wdXQgZGF0YSBpbiB0aGUgcGVlaygpIGFuZAorICByZWFkMSgpIG1ldGhvZHMgb2YgdGhlIEJaMkZpbGUsIEd6aXBGaWxlIGFuZCBMWk1BRmlsZSBjbGFzc2VzLgorCistIElzc3VlICMxMzA1MjogRml4IElETEUgY3Jhc2hpbmcgd2hlbiByZXBsYWNlIHN0cmluZyBpbiBTZWFyY2gvUmVwbGFjZSBkaWFsb2cKKyAgZW5kZWQgd2l0aCAnXCcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjY1NTogSW5zdGVhZCBvZiByZXF1aXJpbmcgYSBjdXN0b20gdHlwZSwgb3Muc2NoZWRfZ2V0YWZmaW5pdHkgYW5kCisgIG9zLnNjaGVkX3NldGFmZmluaXR5IG5vdyB1c2UgcmVndWxhciBzZXRzIG9mIGludGVnZXJzIHRvIHJlcHJlc2VudCB0aGUgQ1BVcyBhCisgIHByb2Nlc3MgaXMgcmVzdHJpY3RlZCB0by4KKworLSBJc3N1ZSAjMTU1Mzg6IEZpeCBjb21waWxhdGlvbiBvZiB0aGUgZ2V0bmFtZWluZm8oKSAvIGdldGFkZHJpbmZvKCkgZW11bGF0aW9uCisgIGNvZGUuICBQYXRjaCBieSBQaGlsaXBwIEhhZ2VtZWlzdGVyLgorCistIElzc3VlICMxNTUxOTogUHJvcGVybHkgZXhwb3NlIFdpbmRvd3NSZWdpc3RyeUZpbmRlciBpbiBpbXBvcnRsaWIgKGFuZCB1c2UgdGhlCisgIGNvcnJlY3QgdGVybSBmb3IgaXQpLiBPcmlnaW5hbCBwYXRjaCBieSBFcmljIFNub3cuCisKKy0gSXNzdWUgIzE1NTAyOiBCcmluZyB0aGUgaW1wb3J0bGliIEFCQ3MgaW50byBsaW5lIHdpdGggdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlCisgIGltcG9ydCBwcm90b2NvbHMgZ2l2ZW4gUEVQIDQyMC4gT3JpZ2luYWwgcGF0Y2ggYnkgRXJpYyBTbm93LgorCistIElzc3VlICMxNTQ5OTogTGF1bmNoaW5nIGEgd2ViYnJvd3NlciBpbiBVbml4IHVzZWQgdG8gc2xlZXAgZm9yIGEgZmV3IHNlY29uZHMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEFudG9uIEJhcmtvdnNreS4KKworLSBJc3N1ZSAjMTU0NjM6IFRoZSBmYXVsdGhhbmRsZXIgbW9kdWxlIHRydW5jYXRlcyBzdHJpbmdzIHRvIDUwMCBjaGFyYWN0ZXJzLAorICBpbnN0ZWFkIG9mIDEwMCwgdG8gYmUgYWJsZSB0byBkaXNwbGF5IGxvbmcgZmlsZSBwYXRocy4KKworLSBJc3N1ZSAjNjA1NjogTWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHNldGJsb2NraW5nKFRydWUpIG9uIHRoZSBzb2NrZXRzIGl0CisgIHVzZXMuICBPcmlnaW5hbCBwYXRjaCBieSBKIERlcmVrIFdpbHNvbi4KKworLSBJc3N1ZSAjMTUzNjQ6IEZpeCBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ3NyY2RpcicpIHRvIGJlIGFuIGFic29sdXRlIHBhdGguCisKKy0gSXNzdWUgIzE1MDQxOiBVcGRhdGUgInNlZSBhbHNvIiBsaXN0IGluIHRraW50ZXIgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTU0MTM6IG9zLnRpbWVzKCkgaGFkIGRpc2FwcGVhcmVkIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE1NDAyOiBBbiBpc3N1ZSBpbiB0aGUgc3RydWN0IG1vZHVsZSB0aGF0IGNhdXNlZCBzeXMuZ2V0c2l6ZW9mIHRvCisgIHJldHVybiBpbmNvcnJlY3QgcmVzdWx0cyBmb3Igc3RydWN0LlN0cnVjdCBpbnN0YW5jZXMgaGFzIGJlZW4gZml4ZWQuICBJbml0aWFsCisgIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MjMyOiBXaGVuIG1hbmdsZV9mcm9tIGlzIFRydWUsIGVtYWlsLkdlbmVyYXRvciBub3cgY29ycmVjdGx5IG1hbmdsZXMKKyAgbGluZXMgdGhhdCBzdGFydCB3aXRoICdGcm9tICcgdGhhdCBvY2N1ciBpbiBhIE1JTUUgcHJlYW1ibGUgb3IgZXBpbG9ndWUuCisKKy0gSXNzdWUgIzE1MDk0OiBJbmNvcnJlY3RseSBwbGFjZWQgI2VuZGlmIGluIF90a2ludGVyLmMuICBQYXRjaCBieSBTZXJoaXkKKyAgU3RvcmNoYWthLgorCistIElzc3VlICMxMzkyMjogYXJncGFyc2Ugbm8gbG9uZ2VyIGluY29ycmVjdGx5IHN0cmlwcyAnLS0ncyB0aGF0IGFwcGVhciBhZnRlcgorICB0aGUgZmlyc3Qgb25lLgorCistIElzc3VlICMxMjM1MzogYXJncGFyc2Ugbm93IGNvcnJlY3RseSBoYW5kbGVzIG51bGwgYXJndW1lbnQgdmFsdWVzLgorCistIElzc3VlICMxMDAxNywgaXNzdWUgIzE0OTk4OiBGaXggVHlwZUVycm9yIHVzaW5nIHBwcmludCBvbiBkaWN0aW9uYXJpZXMgd2l0aAorICB1c2VyLWRlZmluZWQgdHlwZXMgYXMga2V5cyBvciBvdGhlciB1bm9yZGVyYWJsZSBrZXlzLgorCistIElzc3VlICMxNTM5NzogaW5zcGVjdC5nZXRtb2R1bGVuYW1lKCkgaXMgbm93IGJhc2VkIGRpcmVjdGx5IG9uIGltcG9ydGxpYiB2aWEgYQorICBuZXcgaW1wb3J0bGliLm1hY2hpbmVyeS5hbGxfc3VmZml4ZXMoKSBBUEkuCisKKy0gSXNzdWUgIzE0NjM1OiB0ZWxuZXRsaWIgd2lsbCB1c2UgcG9sbCgpIHJhdGhlciB0aGFuIHNlbGVjdCgpIHdoZW4gcG9zc2libGUgdG8KKyAgYXZvaWQgZmFpbGluZyBkdWUgdG8gdGhlIHNlbGVjdCgpIGZpbGUgZGVzY3JpcHRvciBsaW1pdC4KKworLSBJc3N1ZSAjMTUxODA6IENsYXJpZnkgcG9zaXhwYXRoLmpvaW4oKSBlcnJvciBtZXNzYWdlIHdoZW4gbWl4aW5nIHN0ciAmIGJ5dGVzLgorCistIElzc3VlICMxNTM0MzogcGtndXRpbCBub3cgaW5jbHVkZXMgYW4gaXRlcl9pbXBvcnRlcl9tb2R1bGVzIGltcGxlbWVudGF0aW9uIGZvcgorICBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgKHNpbWlsYXIgdG8gdGhlIHdheSBpdCBhbHJlYWR5IGhhbmRsZWQKKyAgemlwaW1wb3J0LnppcGltcG9ydGVyKS4KKworLSBJc3N1ZSAjMTUzMTQ6IHJ1bnB5IG5vdyBzZXRzIF9fbWFpbl9fLl9fbG9hZGVyX18gY29ycmVjdGx5LgorCistIElzc3VlICMxNTM1NzogVGhlIGltcG9ydCBlbXVsYXRpb24gaW4gcGtndXRpbCBpcyBub3cgZGVwcmVjYXRlZC4gcGtndXRpbCB1c2VzCisgIGltcG9ydGxpYiBpbnRlcm5hbGx5IHJhdGhlciB0aGFuIHRoZSBlbXVsYXRpb24uCisKKy0gSXNzdWUgIzE1MjMzOiBQeXRob24gbm93IGd1YXJhbnRlZXMgdGhhdCBjYWxsYWJsZXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBhdGV4aXQKKyAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGluIGEgZGV0ZXJtaW5pc3RpYyBvcmRlci4KKworLSBJc3N1ZSAjMTUyMzg6IHNodXRpbC5jb3B5c3RhdCBub3cgY29waWVzIExpbnV4ICJleHRlbmRlZCBhdHRyaWJ1dGVzIi4KKworLSBJc3N1ZSAjMTUyMzA6IHJ1bnB5LnJ1bl9wYXRoIG5vdyBjb3JyZWN0bHkgc2V0cyBfX3BhY2thZ2VfXyBhcyBkZXNjcmliZWQgaW4KKyAgdGhlIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzE1MzE1OiBTdXBwb3J0IFZTIDIwMTAgaW4gZGlzdHV0aWxzIGN5Z3dpbmNvbXBpbGVyLgorCistIElzc3VlICMxNTI5NDogRml4IGEgcmVncmVzc2lvbiBpbiBwa2d1dGlsLmV4dGVuZF9wYXRoKCkncyBoYW5kbGluZyBvZiBuZXN0ZWQKKyAgbmFtZXNwYWNlIHBhY2thZ2VzLgorCistIElzc3VlICMxNTA1NjogaW1wLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kIHNvdXJjZV9mcm9tX2NhY2hlKCkgcmFpc2UKKyAgTm90SW1wbGVtZW50ZWRFcnJvciB3aGVuIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcgaXMgc2V0IHRvIE5vbmUuCisKKy0gSXNzdWUgIzE1MjU2OiBHcmFtbWF0aWNhbCBtaXN0YWtlIGluIGV4Y2VwdGlvbiByYWlzZWQgYnkgaW1wLmZpbmRfbW9kdWxlKCkuCisKKy0gSXNzdWUgIzU5MzE6IHdzZ2lyZWYgZW52aXJvbiB2YXJpYWJsZSBTRVJWRVJfU09GVFdBUkUgd2lsbCBzcGVjaWZ5IGFuCisgIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRlcm0gbGlrZSBDUHl0aG9uLCBKeXRob24gaW5zdGVhZCBvZiBnZW5lcmljICJQeXRob24iLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJtYXhfYnVmZmVyX3NpemUiIG9mIEJ1ZmZlcmVkV3JpdGVyIGFuZAorICBCdWZmZXJlZFJXUGFpciwgZnJvbSB0aGUgaW8gbW9kdWxlLgorCistIElzc3VlICMxMzI0ODogUmVtb3ZlIG9ic29sZXRlIGFyZ3VtZW50ICJ2ZXJzaW9uIiBvZiBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlci4KKworLSBJc3N1ZSAjMTQ4MTQ6IEltcGxlbWVudCBtb3JlIGNvbnNpc3RlbnQgb3JkZXJpbmcgYW5kIHNvcnRpbmcgYmVoYXZpb3VyIGZvcgorICBpcGFkZHJlc3Mgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ4MTQ6IGlwYWRkcmVzcyBuZXR3b3JrIG9iamVjdHMgY29ycmVjdGx5IHJldHVybiBOb3RJbXBsZW1lbnRlZCB3aGVuCisgIGNvbXBhcmVkIHRvIGFyYml0cmFyeSBvYmplY3RzIGluc3RlYWQgb2YgcmFpc2luZyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE0OTkwOiBDb3JyZWN0bHkgZmFpbCB3aXRoIFN5bnRheEVycm9yIG9uIGludmFsaWQgZW5jb2RpbmcgZGVjbGFyYXRpb24uCisKKy0gSXNzdWUgIzE0ODE0OiBpcGFkZHJlc3Mgbm93IHByb3ZpZGVzIG1vcmUgaW5mb3JtYXRpdmUgZXJyb3IgbWVzc2FnZXMgd2hlbgorICBjb25zdHJ1Y3RpbmcgaW5zdGFuY2VzIGRpcmVjdGx5IChjaGFuZ2VzIHBlcm1pdHRlZCBkdXJpbmcgYmV0YSBkdWUgdG8KKyAgcHJvdmlzaW9uYWwgQVBJIHN0YXR1cykuCisKKy0gSXNzdWUgIzE1MjQ3OiBGaWxlSU8gbm93IHJhaXNlcyBhbiBlcnJvciB3aGVuIGdpdmVuIGEgZmlsZSBkZXNjcmlwdG9yIHBvaW50aW5nCisgIHRvIGEgZGlyZWN0b3J5LgorCistIElzc3VlICMxNTI2MTogU3RvcCBvcy5zdGF0KGZkKSBjcmFzaGluZyBvbiBXaW5kb3dzIHdoZW4gZmQgbm90IG9wZW4uCisKKy0gSXNzdWUgIzE1MTY2OiBJbXBsZW1lbnQgaW1wLmdldF90YWcoKSB1c2luZyBzeXMuaW1wbGVtZW50YXRpb24uY2FjaGVfdGFnLgorCistIElzc3VlICMxNTIxMDogQ2F0Y2ggS2V5RXJyb3Igd2hlbiBpbXBvcnRsaWIuX19pbml0X18gY2FuJ3QgZmluZAorICBfZnJvemVuX2ltcG9ydGxpYiBpbiBzeXMubW9kdWxlcywgbm90IEltcG9ydEVycm9yLgorCistIElzc3VlICMxNTAzMDogaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlciBub3cgc3VwcG9ydHMgdGhlIG5ldyBzb3VyY2Ugc2l6ZQorICBoZWFkZXIgZmllbGQgaW4gLnB5YyBmaWxlcy4KKworLSBJc3N1ZSAjNTM0NjogUHJlc2VydmUgcGVybWlzc2lvbnMgb2YgbWJveCwgTU1ERiBhbmQgQmFieWwgbWFpbGJveCBmaWxlcyBvbgorICBmbHVzaCgpLgorCistIElzc3VlICMxMDU3MTogRml4IHRoZSAiLS1zaWduIiBvcHRpb24gb2YgZGlzdHV0aWxzJyB1cGxvYWQgY29tbWFuZC4gIFBhdGNoIGJ5CisgIEpha3ViIFdpbGsuCisKKy0gSXNzdWUgIzk1NTk6IElmIG1lc3NhZ2VzIHdlcmUgb25seSBhZGRlZCwgYSBuZXcgZmlsZSBpcyBubyBsb25nZXIgY3JlYXRlZCBhbmQKKyAgcmVuYW1lZCBvdmVyIHRoZSBvbGQgZmlsZSB3aGVuIGZsdXNoKCkgaXMgY2FsbGVkIG9uIGFuIG1ib3gsIE1NREYgb3IgQmFieWwKKyAgbWFpbGJveC4KKworLSBJc3N1ZSAxMDkyNDogRml4ZWQgY3J5cHQubWtzYWx0KCkgdG8gdXNlIGEgUk5HIHRoYXQgaXMgc3VpdGFibGUgZm9yCisgIGNyeXB0b2dyYXBoaWMgcHVycG9zZS4KKworLSBJc3N1ZSAjMTUxODQ6IEVuc3VyZSBjb25zaXN0ZW50IHJlc3VsdHMgb2YgT1MgWCBjb25maWd1cmF0aW9uIHRhaWxvcmluZyBmb3IKKyAgdW5pdmVyc2FsIGJ1aWxkcyBieSBmYWN0b3Jpbmcgb3V0IGNvbW1vbiBPUyBYLXNwZWNpZmljIGN1c3RvbWl6YXRpb25zIGZyb20KKyAgc3lzY29uZmlnLCBkaXN0dXRpbHMuc3lzY29uZmlnLCBkaXN0dXRpbHMudXRpbCwgYW5kIGRpc3R1dGlscy51bml4Y2NvbXBpbGVyCisgIGludG8gYSBuZXcgbW9kdWxlIF9vc3hfc3VwcG9ydC4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzE1NjEwOiBQeUltcG9ydF9JbXBvcnRNb2R1bGVFeCgpIG5vdyB1c2VzIGEgJ2xldmVsJyBvZiAwIGluc3RlYWQgb2YgLTEuCisKKy0gSXNzdWVzICMxNTE2OSwgIzE0NTk5OiBTdHJpcCBvdXQgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YKKyAgaW1wLnNvdXJjZV9mcm9tX2NhY2hlKCkgdXNlZCBieSBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoKSBhbmQKKyAgdXNlZCB0aGUgUHl0aG9uIGNvZGUgaW5zdGVhZC4gTGVhZHMgdG8gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoKSB0byBub3QKKyAgdHJ5IHRvIGluZmVyIHRoZSBzb3VyY2UgcGF0aCBmcm9tIHRoZSBieXRlY29kZSBwYXRoIGFzCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIGRvZXMuCisKK0V4dGVuc2lvbiBNb2R1bGVzCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTY3NjogTm93ICJtbWFwIiBjaGVjayBmb3IgZW1wdHkgZmlsZXMgYmVmb3JlIGRvaW5nIHRoZQorICBvZmZzZXQgY2hlY2suICBQYXRjaCBieSBTdGV2ZW4gV2lsbGlzLgorCistIElzc3VlICM2NDkzOiBBbiBpc3N1ZSBpbiBjdHlwZXMgb24gV2luZG93cyB0aGF0IGNhdXNlZCBzdHJ1Y3R1cmUgYml0ZmllbGRzCisgIG9mIHR5cGUgY3R5cGVzLmNfdWludDMyIGFuZCB3aWR0aCAzMiB0byBpbmNvcnJlY3RseSBiZSBzZXQgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE1MTk0OiBVcGRhdGUgbGliZmZpIHRvIHRoZSAzLjAuMTEgcmVsZWFzZS4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1NDU4OiBweXRob24tY29uZmlnIGdldHMgYSBuZXcgb3B0aW9uIC0tY29uZmlnZGlyIHRvIHByaW50IHRoZSAkTElCUEwKKyAgdmFsdWUuCisKKy0gTW92ZSBpbXBvcnRsaWIudGVzdC5iZW5jaG1hcmsgdG8gVG9vbHMvaW1wb3J0YmVuY2guCisKKy0gSXNzdWUgIzEyNjA1OiBUaGUgZ2RiIGhvb2tzIGZvciBkZWJ1Z2dpbmcgQ1B5dGhvbiAod2l0aGluIFRvb2xzL2dkYikgaGF2ZSBiZWVuCisgIGVuaGFuY2VkIHRvIHNob3cgaW5mb3JtYXRpb24gb24gbW9yZSBDIGZyYW1lcyByZWxldmFudCB0byBDUHl0aG9uIHdpdGhpbiB0aGUKKyAgInB5LWJ0IiBhbmQgInB5LWJ0LWZ1bGwiIGNvbW1hbmRzOgorCisgICogQyBmcmFtZXMgdGhhdCBhcmUgd2FpdGluZyBvbiB0aGUgR0lMCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZ2FyYmFnZS1jb2xsZWN0aW5nCisgICogQyBmcmFtZXMgdGhhdCBhcmUgZHVlIHRvIHRoZSBpbnZvY2F0aW9uIG9mIGEgUHlDRnVuY3Rpb24KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTQ0NDogVXNlIHByb3BlciBzcGVsbGluZyBmb3Igbm9uLUFTQ0lJIGNvbnRyaWJ1dG9yIG5hbWVzLiAgUGF0Y2gKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUyOTU6IFJlb3JnYW5pemUgYW5kIHJld3JpdGUgdGhlIGRvY3VtZW50YXRpb24gb24gdGhlIGltcG9ydCBzeXN0ZW0uCisKKy0gSXNzdWUgIzE1MjMwOiBDbGVhcmx5IGRvY3VtZW50IHNvbWUgb2YgdGhlIGxpbWl0YXRpb25zIG9mIHRoZSBydW5weSBtb2R1bGUgYW5kCisgIG51ZGdlIHJlYWRlcnMgdG93YXJkcyBpbXBvcnRsaWIgd2hlbiBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjMTUwNTM6IENvcHkgUHl0aG9uIDMuMyBpbXBvcnQgbG9jayBjaGFuZ2Ugbm90aWNlIHRvIGFsbCByZWxldmFudAorICBmdW5jdGlvbnMgaW4gaW1wIGluc3RlYWQgb2YganVzdCBhdCB0aGUgdG9wIG9mIHRoZSByZWxldmFudCBzZWN0aW9uLgorCistIElzc3VlICMxNTI4ODogTGluayB0byB0aGUgdGVybSAibG9hZGVyIiBpbiBub3RlcyBpbiBwa2d1dGlsIGFib3V0IGhvdyB0aGluZ3MKKyAgd29uJ3Qgd29yayBhcyBleHBlY3RlZCBpbiBQeXRob24gMy4zIGFuZCBtYXJrIHRoZSByZXF1aXNpdGUgZnVuY3Rpb25zIGFzCisgICJjaGFuZ2VkIiBzaW5jZSB0aGV5IHdpbGwgbm8gbG9uZ2VyIHdvcmsgd2l0aCBtb2R1bGVzIGRpcmVjdGx5IGltcG9ydGVkIGJ5CisgIGltcG9ydCBpdHNlbGYuCisKKy0gSXNzdWUgIzEzNTU3OiBDbGFyaWZ5IGVmZmVjdCBvZiBnaXZpbmcgdHdvIGRpZmZlcmVudCBuYW1lc3BhY2VzIHRvIGV4ZWMgb3IKKyAgZXhlY2ZpbGUoKS4KKworLSBJc3N1ZSAjMTUyNTA6IERvY3VtZW50IHRoYXQgZmlsZWNtcC5kaXJjbXAgY29tcGFyZXMgZmlsZXMgc2hhbGxvd2x5LiBQYXRjaAorICBjb250cmlidXRlZCBieSBDaHJpcyBKZXJkb25lay4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE1NDY3OiBNb3ZlIGhlbHBlcnMgZm9yIF9fc2l6ZW9mX18gdGVzdHMgaW50byB0ZXN0X3N1cHBvcnQuICBQYXRjaCBieQorICBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTMyMDogTWFrZSBpdGVyYXRpbmcgdGhlIGxpc3Qgb2YgdGVzdHMgdGhyZWFkLXNhZmUgd2hlbiBydW5uaW5nIHRlc3RzCisgIGluIG11bHRpcHJvY2VzcyBtb2RlLiBQYXRjaCBieSBDaHJpcyBKZXJkb25lay4KKworLSBJc3N1ZSAjMTUxNjg6IE1vdmUgaW1wb3J0bGliLnRlc3QgdG8gdGVzdC50ZXN0X2ltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTUwOTE6IFJlYWN0aXZhdGUgYSB0ZXN0IG9uIFVOSVggd2hpY2ggd2FzIGZhaWxpbmcgdGhhbmtzIHRvIGEKKyAgZm9yZ290dGVuIGltcG9ydGxpYi5pbnZhbGlkYXRlX2NhY2hlcygpIGNhbGwuCisKKy0gSXNzdWUgIzE1MjMwOiBBZG9wdGVkIGEgbW9yZSBzeXN0ZW1hdGljIGFwcHJvYWNoIGluIHRoZSBydW5weSB0ZXN0cy4KKworLSBJc3N1ZSAjMTUzMDA6IEVuc3VyZSB0aGUgdGVtcG9yYXJ5IHRlc3Qgd29ya2luZyBkaXJlY3RvcmllcyBhcmUgaW4gdGhlIHNhbWUKKyAgcGFyZW50IGZvbGRlciB3aGVuIHJ1bm5pbmcgdGVzdHMgaW4gbXVsdGlwcm9jZXNzIG1vZGUgZnJvbSBhIFB5dGhvbiBidWlsZC4KKyAgUGF0Y2ggYnkgQ2hyaXMgSmVyZG9uZWsuCisKKy0gSXNzdWUgIzE1Mjg0OiBTa2lwIHtzZW5kLHJlY3Z9bXNnIHRlc3RzIGluIHRlc3Rfc29ja2V0IHdoZW4gSVB2NiBpcyBub3QKKyAgZW5hYmxlZC4gUGF0Y2ggYnkgQnJpYW4gQnJhemlsLgorCistIElzc3VlICMxNTI3NzogRml4IGEgcmVzb3VyY2UgbGVhayBpbiBzdXBwb3J0LnB5IHdoZW4gSVB2NiBpcyBkaXNhYmxlZC4gIFBhdGNoCisgIGJ5IEJyaWFuIEJyYXppbC4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzExNzE1OiBGaXggbXVsdGlhcmNoIGRldGVjdGlvbiB3aXRob3V0IGhhdmluZyBEZWJpYW4gZGV2ZWxvcG1lbnQgdG9vbHMKKyAgKGRwa2ctZGV2KSBpbnN0YWxsZWQuCisKKy0gSXNzdWUgIzE1MDM3OiBCdWlsZCBPUyBYIGluc3RhbGxlcnMgd2l0aCBsb2NhbCBjb3B5IG9mIG5jdXJzZXMgNS45IGxpYnJhcmllcworICB0byBhdm9pZCBjdXJzZXMudW5nZXRfd2NoIGJ1ZyBwcmVzZW50IGluIG9sZGVyIHZlcnNpb25zIG9mIG5jdXJzZXMgc3VjaCBhcworICB0aG9zZSBzaGlwcGVkIHdpdGggT1MgWC4KKworLSBJc3N1ZSAjMTU1NjA6IEZpeCBidWlsZGluZyBfc3FsaXRlMyBleHRlbnNpb24gb24gT1MgWCB3aXRoIGFuIFNESy4gIEFsc28sIGZvcgorICBPUyBYIGluc3RhbGxlcnMsIGVuc3VyZSBjb25zaXN0ZW50IHNxbGl0ZTMgYmVoYXZpb3IgYW5kIGZlYXR1cmUgYXZhaWxhYmlsaXR5CisgIGJ5IGJ1aWxkaW5nIGEgbG9jYWwgY29weSBvZiBsaWJzcWxpdGUzIHJhdGhlciB0aGFuIGRlcGVuZGluZyBvbiB0aGUgd2lkZSByYW5nZQorICBvZiB2ZXJzaW9ucyBzdXBwbGllZCB3aXRoIHZhcmlvdXMgT1MgWCByZWxlYXNlcy4KKworLSBJc3N1ZSAjODg0NzogRGlzYWJsZSBDT01EQVQgZm9sZGluZyBpbiBXaW5kb3dzIFBHTyBidWlsZHMuCisKKy0gSXNzdWUgIzE0MDE4OiBGaXggT1MgWCBUY2wvVGsgZnJhbWV3b3JrIGNoZWNraW5nIHdoZW4gdXNpbmcgT1MgWCBTREtzLgorCistIElzc3VlICMxNTQzMTogQWRkIF9mcmVlemVfaW1wb3J0bGliIHByb2plY3QgdG8gcmVnZW5lcmF0ZSBpbXBvcnRsaWIuaCBvbgorICBXaW5kb3dzLiBQYXRjaCBieSBLcmlzdGrDoW4gVmFsdXIgSsOzbnNzb24uCisKKy0gSXNzdWUgIzE0MTk3OiBGb3IgT1MgWCBmcmFtZXdvcmsgYnVpbGRzLCBlbnN1cmUgbGlua3MgdG8gdGhlIHNoYXJlZCBsaWJyYXJ5CisgIGFyZSBjcmVhdGVkIHdpdGggdGhlIHByb3BlciBBQkkgc3VmZml4LgorCistIElzc3VlICMxNDMzMDogRm9yIGNyb3NzIGJ1aWxkcywgZG9uJ3QgdXNlIGhvc3QgcHl0aG9uLCB1c2UgaG9zdCBzZWFyY2ggcGF0aHMKKyAgZm9yIGhvc3QgY29tcGlsZXIuCisKKy0gSXNzdWUgIzE1MjM1OiBBbGxvdyBCZXJrbGV5IERCIHZlcnNpb25zIHVwIHRvIDUuMyB0byBidWlsZCB0aGUgZGJtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUyNjg6IFNlYXJjaCBjdXJzZXMuaCBpbiAvdXNyL2luY2x1ZGUvbmN1cnNlc3cuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAyNy1KdW4tMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gRml4IGEgKG1vc3QgbGlrZWx5KSB2ZXJ5IHJhcmUgbWVtb3J5IGxlYWsgd2hlbiBjYWxsaW5nIG1haW4oKSBhbmQgbm90IGJlaW5nCisgIGFibGUgdG8gZGVjb2RlIGEgY29tbWFuZC1saW5lIGFyZ3VtZW50LgorCistIElzc3VlICMxNDgxNTogVXNlIFB5X3NzaXplX3QgaW5zdGVhZCBvZiBsb25nIGZvciB0aGUgb2JqZWN0IGhhc2gsIHRvCisgIHByZXNlcnZlIGFsbCA2NCBiaXRzIG9mIGhhc2ggb24gV2luNjQuCisKKy0gSXNzdWUgIzEyMjY4OiBGaWxlIHJlYWRsaW5lLCByZWFkbGluZXMgYW5kIHJlYWQoKSBvciByZWFkYWxsKCkgbWV0aG9kcworICBubyBsb25nZXIgbG9zZSBkYXRhIHdoZW4gYW4gdW5kZXJseWluZyByZWFkIHN5c3RlbSBjYWxsIGlzIGludGVycnVwdGVkLgorICBJT0Vycm9yIGlzIG5vIGxvbmdlciByYWlzZWQgZHVlIHRvIGEgcmVhZCBzeXN0ZW0gY2FsbCByZXR1cm5pbmcgRUlOVFIKKyAgZnJvbSB3aXRoaW4gdGhlc2UgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTE2MjY6IEFkZCBfU2l6ZVQgZnVuY3Rpb25zIHRvIHN0YWJsZSBBQkkuCisKKy0gSXNzdWUgIzE1MTQ2OiBBZGQgUHlUeXBlX0Zyb21TcGVjV2l0aEJhc2VzLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE1MTQyOiBGaXggcmVmZXJlbmNlIGxlYWsgd2hlbiBkZWFsbG9jYXRpbmcgaW5zdGFuY2VzIG9mIHR5cGVzCisgIGNyZWF0ZWQgdXNpbmcgUHlUeXBlX0Zyb21TcGVjKCkuCisKKy0gSXNzdWUgIzE1MDQyOiBBZGQgUHlTdGF0ZV9BZGRNb2R1bGUgYW5kIFB5U3RhdGVfUmVtb3ZlTW9kdWxlLiBBZGQgdmVyc2lvbgorICBndWFyZCBmb3IgUHlfTElNSVRFRF9BUEkgYWRkaXRpb25zLiBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzEwMDUzOiBEb24ndCBjbG9zZSBGRHMgd2hlbiBGaWxlSU8uX19pbml0X18gZmFpbHMuIExvb3NlbHkgYmFzZWQgb24KKyAgdGhlIHdvcmsgYnkgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzE1MDk2OiBSZW1vdmVkIHN1cHBvcnQgZm9yIHVyJycgYXMgdGhlIHJhdyBub3RhdGlvbiBpc24ndAorICBjb21wYXRpYmxlIHdpdGggUHl0aG9uIDIueCdzIHJhdyB1bmljb2RlIHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzNzgzOiBHZW5lcmF0b3Igb2JqZWN0cyBub3cgdXNlIHRoZSBpZGVudGlmaWVyIEFQSXMgaW50ZXJuYWxseQorCistIElzc3VlICMxNDg3NDogUmVzdG9yZSBjaGFybWFwIGRlY29kaW5nIHNwZWVkIHRvIHByZS1QRVAgMzkzIGxldmVscy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTUwMjY6IHV0Zi0xNiBlbmNvZGluZyBpcyBub3cgc2lnbmlmaWNhbnRseSBmYXN0ZXIgKHVwIHRvIDEweCkuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzExMDIyOiBvcGVuKCkgYW5kIGlvLlRleHRJT1dyYXBwZXIgYXJlIG5vdyBjYWxsaW5nCisgIGxvY2FsZS5nZXRwcmVmZXJyZWRlbmNvZGluZyhGYWxzZSkgaW5zdGVhZCBvZiBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcoKQorICBpbiB0ZXh0IG1vZGUgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIERvbid0IGNoYW5nZSB0ZW1wb3JhcnkgdGhlCisgIGxvY2FsZSBlbmNvZGluZyB1c2luZyBsb2NhbGUuc2V0bG9jYWxlKCksIHVzZSB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcKKyAgaW5zdGVhZCBvZiB0aGUgdXNlciBwcmVmZXJyZWQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzE0NjczOiBBZGQgRXJpYyBTbm93J3Mgc3lzLmltcGxlbWVudGF0aW9uIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNTAzODogT3B0aW1pemUgcHl0aG9uIExvY2tzIG9uIFdpbmRvd3MuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjOTgwMzogRG9uJ3QgY2xvc2UgSURMRSBvbiBzYXZpbmcgaWYgYnJlYWtwb2ludCBpcyBvcGVuLgorICBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTIyODg6IENvbnNpZGVyICcwJyBhbmQgJzAuMCcgYXMgdmFsaWQgaW5pdGlhbHZhbHVlCisgIGZvciB0a2ludGVyIFNpbXBsZURpYWxvZy4KKworLSBJc3N1ZSAjMTU1MTI6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIHBhcnNlci4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0Njk6IEFkZCBhIF9fc2l6ZW9mX18gaW1wbGVtZW50YXRpb24gZm9yIGRlcXVlIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg5OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBCeXRlc0lPIG9iamVjdHMuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1NDg3OiBBZGQgYSBfX3NpemVvZl9fIGltcGxlbWVudGF0aW9uIGZvciBidWZmZXJlZCBJL08gb2JqZWN0cy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU1MTQ6IENvcnJlY3QgX19zaXplb2ZfXyBzdXBwb3J0IGZvciBjcHVfc2V0LgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE4NzogQnVnZml4OiByZW1vdmUgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzIHRlc3Rfc2h1dGlsIHdhcyBsZWF2aW5nCisgIGJlaGluZC4KKworLSBJc3N1ZSAjMTUxNzc6IEFkZGVkIGRpcl9mZCBwYXJhbWV0ZXIgdG8gb3MuZndhbGsoKS4KKworLSBJc3N1ZSAjMTUxNzY6IENsYXJpZmllZCBiZWhhdmlvciwgZG9jdW1lbnRhdGlvbiwgYW5kIGltcGxlbWVudGF0aW9uCisgIG9mIG9zLmxpc3RkaXIoKS4KKworLSBJc3N1ZSAjMTUwNjE6IFJlLWltcGxlbWVudGVkIGhtYWMuY29tcGFyZV9kaWdlc3QoKSBpbiBDIHRvIHByZXZlbnQgZnVydGhlcgorICB0aW1pbmcgYW5hbHlzaXMgYW5kIHRvIHN1cHBvcnQgYWxsIGJ1ZmZlciBwcm90b2NvbCBhd2FyZSBvYmplY3RzIGFzIHdlbGwgYXMKKyAgQVNDSUkgb25seSBzdHIgaW5zdGFuY2VzIHNhZmVseS4KKworLSBJc3N1ZSAjMTUxNjQ6IENoYW5nZSByZXR1cm4gdmFsdWUgb2YgcGxhdGZvcm0udW5hbWUoKSBmcm9tIGEKKyAgcGxhaW4gdHVwbGUgdG8gYSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlLgorCistIFN1cHBvcnQgTWFnZWlhIExpbnV4IGluIHRoZSBwbGF0Zm9ybSBtb2R1bGUuCisKKy0gSXNzdWUgIzExNjc4OiBTdXBwb3J0IEFyY2ggbGludXggaW4gdGhlIHBsYXRmb3JtIG1vZHVsZS4KKworLSBJc3N1ZSAjMTUxMTg6IENoYW5nZSByZXR1cm4gdmFsdWUgb2Ygb3MudW5hbWUoKSBhbmQgb3MudGltZXMoKSBmcm9tCisgIHBsYWluIHR1cGxlcyB0byBpbW11dGFibGUgaXRlcmFibGUgb2JqZWN0cyB3aXRoIG5hbWVkIGF0dHJpYnV0ZXMKKyAgKHN0cnVjdHNlcSBvYmplY3RzKS4KKworLSBTcGVlZCB1cCBfZGVjaW1hbCBieSBhbm90aGVyIDEwLTE1JSBieSBjYWNoaW5nIHRoZSB0aHJlYWQgbG9jYWwgY29udGV4dAorICB0aGF0IHdhcyBsYXN0IGFjY2Vzc2VkLiBJbiB0aGUgcGkgYmVuY2htYXJrICg2NC1iaXQgcGxhdGZvcm0sIHByZWM9OSksCisgIF9kZWNpbWFsIGlzIG5vdyBvbmx5IDEuNXggc2xvd2VyIHRoYW4gZmxvYXQuCisKKy0gUmVtb3ZlIHRoZSBwYWNrYWdpbmcgbW9kdWxlLCB3aGljaCBpcyBub3QgcmVhZHkgZm9yIHByaW1lIHRpbWUuCisKKy0gSXNzdWUgIzE1MTU0OiBBZGQgImRpcl9mZCIgcGFyYW1ldGVyIHRvIG9zLnJtZGlyLCByZW1vdmUgInJtZGlyIgorICBwYXJhbWV0ZXIgZnJvbSBvcy5yZW1vdmUgLyBvcy51bmxpbmsuCisKKy0gSXNzdWUgIzQ0ODk6IEFkZCBhIHNodXRpbC5ybXRyZWUgdGhhdCBpc24ndCBzdXNjZXB0aWJsZSB0byBzeW1saW5rIGF0dGFja3MuCisgIEl0IGlzIHVzZWQgYXV0b21hdGljYWxseSBvbiBwbGF0Zm9ybXMgc3VwcG9ydGluZyB0aGUgbmVjZXNzYXJ5IG9zLm9wZW5hdCgpCisgIGFuZCBvcy51bmxpbmthdCgpIGZ1bmN0aW9ucy4gTWFpbiBjb2RlIGJ5IE1hcnRpbiB2b24gTMO2d2lzLgorCistIElzc3VlICMxNTE1NjogSFRNTFBhcnNlciBub3cgdXNlcyB0aGUgbmV3ICJodG1sLmVudGl0aWVzLmh0bWw1IiBkaWN0aW9uYXJ5LgorCistIElzc3VlICMxMTExMzogYWRkIGEgbmV3ICJodG1sNSIgZGljdGlvbmFyeSBjb250YWluaW5nIHRoZSBuYW1lZCBjaGFyYWN0ZXIKKyAgcmVmZXJlbmNlcyBkZWZpbmVkIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZCBhbmQgdGhlIGVxdWl2YWxlbnQgVW5pY29kZQorICBjaGFyYWN0ZXIocykgdG8gdGhlIGh0bWwuZW50aXRpZXMgbW9kdWxlLgorCistIElzc3VlICMxNTExNDogdGhlIHN0cmljdCBtb2RlIG9mIEhUTUxQYXJzZXIgYW5kIHRoZSBIVE1MUGFyc2VFcnJvciBleGNlcHRpb24KKyAgYXJlIGRlcHJlY2F0ZWQgbm93IHRoYXQgdGhlIHBhcnNlciBpcyBhYmxlIHRvIHBhcnNlIGludmFsaWQgbWFya3VwLgorCistIElzc3VlICMzNjY1OiBcdSBhbmQgXFUgZXNjYXBlcyBhcmUgbm93IHN1cHBvcnRlZCBpbiB1bmljb2RlIHJlZ3VsYXIKKyAgZXhwcmVzc2lvbnMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTE1MzogQWRkZWQgaW5zcGVjdC5nZXRnZW5lcmF0b3Jsb2NhbHMgdG8gc2ltcGxpZnkgd2hpdGUgYm94CisgIHRlc3Rpbmcgb2YgZ2VuZXJhdG9yIHN0YXRlIHVwZGF0ZXMKKworLSBJc3N1ZSAjMTMwNjI6IEFkZGVkIGluc3BlY3QuZ2V0Y2xvc3VyZXZhcnMgdG8gc2ltcGxpZnkgdGVzdGluZyBzdGF0ZWZ1bAorICBjbG9zdXJlcworCistIElzc3VlICMxMTAyNDogRml4ZXMgYW5kIGFkZGl0aW9uYWwgdGVzdHMgZm9yIFRpbWUySW50ZXJuYWxkYXRlLgorCistIElzc3VlICMxNDYyNjogTGFyZ2UgcmVmYWN0b3Jpbmcgb2YgZnVuY3Rpb25zIC8gcGFyYW1ldGVycyBpbiB0aGUgb3MgbW9kdWxlLgorICBNYW55IGZ1bmN0aW9ucyBub3cgc3VwcG9ydCAiZGlyX2ZkIiBhbmQgImZvbGxvd19zeW1saW5rcyIgcGFyYW1ldGVyczsKKyAgc29tZSBhbHNvIHN1cHBvcnQgYWNjZXB0aW5nIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yIGluIHBsYWNlIG9mIGEgcGF0aAorICBzdHJpbmcuICBBZGRlZCBvcy5zdXBwb3J0XyogY29sbGVjdGlvbnMgYXMgTEJZTCBoZWxwZXJzLiAgUmVtb3ZlZCBtYW55CisgIGZ1bmN0aW9ucyBvbmx5IHByZXZpb3VzbHkgc2VlbiBpbiAzLjMgYWxwaGEgcmVsZWFzZXMgKG9mdGVuIHN0YXJ0aW5nIHdpdGgKKyAgImYiIG9yICJsIiwgb3IgZW5kaW5nIHdpdGggImF0IikuICBPcmlnaW5hbGx5IHN1Z2dlc3RlZCBieSBTZXJoaXkgU3RvcmNoYWthOworICBpbXBsZW1lbnRlZCBieSBMYXJyeSBIYXN0aW5ncy4KKworLSBJc3N1ZSAjMTUwMDg6IEltcGxlbWVudCBQRVAgMzYyICJTaWduYXR1cmUgT2JqZWN0cyIuCisgIFBhdGNoIGJ5IFl1cnkgU2VsaXZhbm92LgorCistIElzc3VlOiAjMTUxMzg6IGJhc2U2NC51cmxzYWZlX3tlbixkZX1jb2RlKCkgYXJlIG5vdyAzLTR4IGZhc3Rlci4KKworLSBJc3N1ZSAjNDQ0NTgyOiBBZGQgc2h1dGlsLndoaWNoLCBmb3IgZmluZGluZyBwcm9ncmFtcyBvbiB0aGUgc3lzdGVtIHBhdGguCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgRGVtYWluZSwgd2l0aCBsYXRlciBpdGVyYXRpb25zIGJ5IEphbiBLaWxsaWFuCisgIGFuZCBCcmlhbiBDdXJ0aW4uCisKKy0gSXNzdWUgIzE0ODM3OiBTU0wgZXJyb3JzIG5vdyBoYXZlIGBgbGlicmFyeWBgIGFuZCBgYHJlYXNvbmBgIGF0dHJpYnV0ZXMKKyAgZGVzY3JpYmluZyBwcmVjaXNlbHkgd2hhdCBoYXBwZW5lZCBhbmQgaW4gd2hpY2ggT3BlblNTTCBzdWJtb2R1bGUuICBUaGUKKyAgc3RyKCkgb2YgYSBTU0xFcnJvciBpcyBhbHNvIGVuaGFuY2VkIGFjY29yZGluZ2x5LgorCistIElzc3VlICM5NTI3OiBkYXRldGltZS5hc3RpbWV6b25lKCkgbWV0aG9kIHdpbGwgbm93IHN1cHBseSBhIGNsYXNzCisgIHRpbWV6b25lIGluc3RhbmNlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHN5c3RlbSBsb2NhbCB0aW1lem9uZSB3aGVuCisgIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMTQ2NTM6IGVtYWlsLnV0aWxzLm1rdGltZV90eigpIG5vIGxvbmdlciByZWxpZXMgb24gc3lzdGVtCisgIG1rdGltZSgpIHdoZW4gdGltZXpvbmUgb2ZmZXN0IGlzIHN1cHBsaWVkLgorCistIElzc3VlICMxNDY4NDogemxpYi5jb21wcmVzc29iaigpIGFuZCB6bGliLmRlY29tcHJlc3NvYmooKSBub3cgc3VwcG9ydCB0aGUgdXNlCisgIG9mIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyaWVzLiBPcmlnaW5hbCBwYXRjaCBieSBTYW0gUnVzaGluZy4KKworLSBGaXggR3ppcEZpbGUncyBoYW5kbGluZyBvZiBmaWxlbmFtZXMgZ2l2ZW4gYXMgYnl0ZXMgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTQ3NzI6IFJldHVybiBkZXN0aW5hdGlvbiB2YWx1ZXMgZnJvbSBzb21lIHNodXRpbCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE1MDY0OiBJbXBsZW1lbnQgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIGZvciBtdWx0aXByb2Nlc3NpbmcgdHlwZXMKKworLSBJc3N1ZSAjMTUxMDE6IE1ha2UgcG9vbCBmaW5hbGl6ZXIgYXZvaWQgam9pbmluZyBjdXJyZW50IHRocmVhZC4KKworLSBJc3N1ZSAjMTQ2NTc6IFRoZSBmcm96ZW4gaW5zdGFuY2Ugb2YgaW1wb3J0bGliIHVzZWQgZm9yIGJvb3RzdHJhcCBpcyBub3cKKyAgYWxzbyB0aGUgbW9kdWxlIGltcG9ydGVkIGFzIGltcG9ydGxpYi5fYm9vdHN0cmFwLgorCistIElzc3VlICMxNDA1NTogQWRkIF9fc2l6ZW9mX18gc3VwcG9ydCB0byBfZWxlbWVudHRyZWUuCisKKy0gSXNzdWUgIzE1MDU0OiBBIGJ1ZyBpbiB0b2tlbml6ZS50b2tlbml6ZSB0aGF0IGNhdXNlZCBzdHJpbmcgbGl0ZXJhbHMKKyAgd2l0aCAnYicgcHJlZml4ZXMgdG8gYmUgaW5jb3JyZWN0bHkgdG9rZW5pemVkIGhhcyBiZWVuIGZpeGVkLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNTAwNjogQWxsb3cgZXF1YWxpdHkgY29tcGFyaXNvbiBiZXR3ZWVuIG5haXZlIGFuZCBhd2FyZQorICB0aW1lIG9yIGRhdGV0aW1lIG9iamVjdHMuCisKKy0gSXNzdWUgIzE0OTgyOiBEb2N1bWVudCB0aGF0IHBrZ3V0aWwncyBpdGVyYXRpb24gZnVuY3Rpb25zIHJlcXVpcmUgdGhlCisgIG5vbi1zdGFuZGFyZCBpdGVyX21vZHVsZXMoKSBtZXRob2QgdG8gYmUgZGVmaW5lZCBieSBhbiBpbXBvcnRlciAoc29tZXRoaW5nCisgIHRoZSBpbXBvcnRsaWIgaW1wb3J0ZXJzIGRvIG5vdCBkZWZpbmUpLgorCistIElzc3VlICMxNTAzNjogTWFpbGJveCBubyBsb25nZXIgdGhyb3dzIGFuIGVycm9yIGlmIGEgZmx1c2ggaXMgZG9uZQorICBiZXR3ZWVuIG9wZXJhdGlvbnMgd2hlbiByZW1vdmluZyBvciBjaGFuZ2luZyBtdWx0aXBsZSBpdGVtcyBpbiBtYm94LAorICBNTURGLCBvciBCYWJ5bCBtYWlsYm94ZXMuCisKKy0gSXNzdWUgIzE0MDU5OiBJbXBsZW1lbnQgbXVsdGlwcm9jZXNzaW5nLkJhcnJpZXIuCisKKy0gSXNzdWUgIzE1MDYxOiBUaGUgaW5hcHByb3ByaWF0ZWx5IG5hbWVkIGhtYWMuc2VjdXJlX2NvbXBhcmUgaGFzIGJlZW4KKyAgcmVuYW1lZCB0byBobWFjLmNvbXBhcmVfZGlnZXN0LCByZXN0cmljdGVkIHRvIG9wZXJhdGluZyBvbiBieXRlcyBpbnB1dHMKKyAgb25seSBhbmQgaGFkIGl0cyBkb2N1bWVudGF0aW9uIHVwZGF0ZWQgdG8gbW9yZSBhY2N1cmF0ZWx5IHJlZmxlY3QgYm90aCBpdHMKKyAgaW50ZW50IGFuZCBpdHMgbGltaXRhdGlvbnMKKworLSBJc3N1ZSAjMTM4NDE6IE1ha2UgY2hpbGQgcHJvY2Vzc2VzIGV4aXQgdXNpbmcgc3lzLmV4aXQoKSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxNDkzNjogY3Vyc2VzX3BhbmVsIHdhcyBjb252ZXJ0ZWQgdG8gUEVQIDMxMjEgYW5kIFBFUCAzODQgQVBJLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE2Njc1NDY6IE9uIHBsYXRmb3JtcyBzdXBwb3J0aW5nIHRtX3pvbmUgYW5kIHRtX2dtdG9mZiBmaWVsZHMKKyAgaW4gc3RydWN0IHRtLCB0aW1lLnN0cnVjdF90aW1lIG9iamVjdHMgcmV0dXJuZWQgYnkgdGltZS5nbXRpbWUoKSwKKyAgdGltZS5sb2NhbHRpbWUoKSBhbmQgdGltZS5zdHJwdGltZSgpIGZ1bmN0aW9ucyBub3cgaGF2ZSB0bV96b25lIGFuZAorICB0bV9nbXRvZmYgYXR0cmlidXRlcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFBhdWwgQm9kZGllLgorCistIFJlbmFtZSBhZGp1c3RlZCBhdHRyaWJ1dGUgdG8gYWRqdXN0YWJsZSBpbiB0aW1lLmdldF9jbG9ja19pbmZvKCkgcmVzdWx0LgorCistIElzc3VlICMzNTE4OiBSZW1vdmUgcmVmZXJlbmNlcyB0byBub24tZXhpc3RlbnQgQmFzZU1hbmFnZXIuZnJvbV9hZGRyZXNzKCkKKyAgbWV0aG9kLgorCistIElzc3VlICMxMzg1NzogQWRkZWQgdGV4dHdyYXAuaW5kZW50KCkgZnVuY3Rpb24gKGluaXRpYWwgcGF0Y2ggYnkgRXpyYQorICBCZXJjaCkKKworLSBJc3N1ZSAjMjczNjogQWRkZWQgZGF0ZXRpbWUudGltZXN0YW1wKCkgbWV0aG9kLgorCistIElzc3VlICMxMzg1NDogTWFrZSBtdWx0aXByb2Nlc3NpbmcgcHJvcGVybHkgaGFuZGxlIG5vbi1pbnRlZ2VyCisgIG5vbi1zdHJpbmcgYXJndW1lbnQgdG8gU3lzdGVtRXhpdC4KKworLSBJc3N1ZSAjMTIxNTc6IE1ha2UgcG9vbC5tYXAoKSBlbXB0eSBpdGVyYWJsZXMgY29ycmVjdGx5LiAgSW5pdGlhbAorICBwYXRjaCBieSBtb3VhZC4KKworLSBJc3N1ZSAjMTE4MjM6IGRpc2Fzc2VtYmx5IG5vdyBzaG93cyBhcmd1bWVudCBjb3VudHMgb24gY2FsbHMgd2l0aCBrZXl3b3JkIGFyZ3MuCisKKy0gSXNzdWUgIzE0NzExOiBvcy5zdGF0X2Zsb2F0X3RpbWVzKCkgaGFzIGJlZW4gZGVwcmVjYXRlZC4KKworLSBMWk1BRmlsZSBub3cgYWNjZXB0cyB0aGUgbW9kZXMgInJiIi8id2IiLyJhYiIgYXMgc3lub255bXMgb2YgInIiLyJ3Ii8iYSIuCisKKy0gVGhlIGJ6MiBhbmQgbHptYSBtb2R1bGVzIG5vdyBlYWNoIGNvbnRhaW4gYW4gb3BlbigpIGZ1bmN0aW9uLCBhbGxvd2luZworICBjb21wcmVzc2VkIGZpbGVzIHRvIHJlYWRpbHkgYmUgb3BlbmVkIGluIHRleHQgbW9kZSBhcyB3ZWxsIGFzIGJpbmFyeSBtb2RlLgorCistIEJaMkZpbGUuX19pbml0X18oKSBhbmQgTFpNQUZpbGUuX19pbml0X18oKSBub3cgYWNjZXB0IGEgZmlsZSBvYmplY3QgYXMgdGhlaXIKKyAgZmlyc3QgYXJndW1lbnQsIHJhdGhlciB0aGFuIHJlcXVpcmluZyBhIHNlcGFyYXRlICJmaWxlb2JqIiBhcmd1bWVudC4KKworLSBnemlwLm9wZW4oKSBub3cgYWNjZXB0cyBmaWxlIG9iamVjdHMgYXMgd2VsbCBhcyBmaWxlbmFtZXMuCisKKy0gSXNzdWUgIzE0OTkyOiBvcy5tYWtlZGlycyhwYXRoLCBleGlzdF9vaz1UcnVlKSB3b3VsZCByYWlzZSBhbiBPU0Vycm9yCisgIHdoZW4gdGhlIHBhdGggZXhpc3RlZCBhbmQgaGFkIHRoZSBTX0lTR0lEIG1vZGUgYml0IHNldCB3aGVuIGl0IHdhcworICBub3QgZXhwbGljaXRseSBhc2tlZCBmb3IuICBUaGlzIGlzIG5vIGxvbmdlciBhbiBleGNlcHRpb24gYXMgbWtkaXIKKyAgY2Fubm90IGNvbnRyb2wgaWYgdGhlIE9TIHNldHMgdGhhdCBiaXQgZm9yIGl0IG9yIG5vdC4KKworLSBJc3N1ZSAjMTQ5ODk6IE1ha2UgdGhlIENHSSBlbmFibGUgb3B0aW9uIHRvIGh0dHAuc2VydmVyIGF2YWlsYWJsZSB2aWEgY29tbWFuZAorICBsaW5lLgorCistIElzc3VlICMxNDk4NzogQWRkIGEgbWlzc2luZyBpbXBvcnQgc3RhdGVtZW50IHRvIGluc3BlY3QuCisKKy0gSXNzdWUgIzEwNzk6IGVtYWlsLmhlYWRlci5kZWNvZGVfaGVhZGVyIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGFsbCB0aGUgZXhhbXBsZXMKKyAgaW4gUkZDMjA0Ny4gIFRoZXJlIGlzIGEgbmVjZXNzYXJ5IHZpc2libGUgYmVoYXZpb3IgY2hhbmdlOiB0aGUgbGVhZGluZyBhbmQvb3IKKyAgdHJhaWxpbmcgd2hpdGVzcGFjZSBvbiBBU0NJSSBwYXJ0cyBpcyBub3cgcHJlc2VydmVkLgorCistIElzc3VlICMxNDk2OTogQmV0dGVyIGhhbmRsaW5nIG9mIGV4Y2VwdGlvbiBjaGFpbmluZyBpbiBjb250ZXh0bGliLkV4aXRTdGFjaworCistIElzc3VlICMxNDk2MjogVXBkYXRlIHRleHQgY29sb3JpbmcgaW4gSURMRSBzaGVsbCB3aW5kb3cgYWZ0ZXIgY2hhbmdpbmcKKyAgb3B0aW9ucy4gIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNDk2MzogQ29udmVydCBjb250ZXh0bGliLkV4aXRTdGFjay5fX2V4aXRfXyB0byB1c2UgYW4gaXRlcmF0aXZlCisgIGFsZ29yaXRobSAoUGF0Y2ggYnkgQWxvbiBIb3JldikKKworLSBJc3N1ZSAjMTQ3ODU6IEFkZCBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSB0byBoZWxwIGRlYnVnIGxvdy1sZXZlbCBtZW1vcnkKKyAgYWxsb2NhdGlvbiBpc3N1ZXMKKworLSBJc3N1ZSAjMTQ0NDM6IEVuc3VyZSB0aGF0IC5weSBmaWxlcyBhcmUgYnl0ZS1jb21waWxlZCB3aXRoIHRoZSBjb3JyZWN0IFB5dGhvbgorICBleGVjdXRhYmxlIHdpdGhpbiBiZGlzdF9ycG0gZXZlbiBvbiBvbGRlciB2ZXJzaW9ucyBvZiBSUE0KKworQy1BUEkKKy0tLS0tCisKKy0gSXNzdWUgIzEzNzgzOiBJbmFkdmVydGVudCBhZGRpdGlvbnMgdG8gdGhlIHB1YmxpYyBDIEFQSSBpbiB0aGUgUEVQIDM4MAorICBpbXBsZW1lbnRhdGlvbiBoYXZlIGVpdGhlciBiZWVuIHJlbW92ZWQgb3IgbWFya2VkIGFzIHByaXZhdGUgaW50ZXJmYWNlcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE1MDAwOiBTdXBwb3J0IHRoZSAidW5pcXVlIiB4MzIgYXJjaGl0ZWN0dXJlIGluIF9wb3NpeHN1YnByb2Nlc3MuYy4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNTA4MTogRG9jdW1lbnQgUHlTdGF0ZV9GaW5kTW9kdWxlLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODE0OiBBZGRlZCBmaXJzdCBkcmFmdCBvZiBpcGFkZHJlc3MgbW9kdWxlIEFQSSByZWZlcmVuY2UKKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE0NzY5OiB0ZXN0X2NhcGkgbm93IGhhcyBTa2lwaXRlbVRlc3QsIHdoaWNoIGNsZXZlcmx5IGNoZWNrcworICBmb3IgInBhcml0eSIgYmV0d2VlbiBQeUFyZ19QYXJzZVR1cGxlKCkgYW5kIHRoZSBQeXRob24vZ2V0YXJncy5jIHN0YXRpYworICBmdW5jdGlvbiBza2lwaXRlbSgpIGZvciBhbGwgcG9zc2libGUgImZvcm1hdCB1bml0cyIuCisKKy0gdGVzdF9ubnRwbGliIG5vdyB0b2xlcmF0ZXMgYmVpbmcgcnVuIGZyb20gYmVoaW5kIE5OVFAgZ2F0ZXdheXMgdGhhdCBhZGQKKyAgIlgtQW50aXZpcnVzIiBoZWFkZXJzIHRvIGFydGljbGVzCisKKy0gSXNzdWUgIzE1MDQzOiB0ZXN0X2dkYiBpcyBub3cgc2tpcHBlZCBlbnRpcmVseSBpZiBnZGIgc2VjdXJpdHkgc2V0dGluZ3MKKyAgYmxvY2sgbG9hZGluZyBvZiB0aGUgZ2RiIGhvb2tzCisKKy0gSXNzdWUgIzE0OTYzOiBBZGQgdGVzdCBjYXNlcyBmb3IgZXhjZXB0aW9uIGhhbmRsaW5nIGJlaGF2aW91cgorICBpbiBjb250ZXh0bGliLkV4aXRTdGFjayAoSW5pdGlhbCBwYXRjaCBieSBBbG9uIEhvcmV2KQorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTM1OTA6IEltcHJvdmUgc3VwcG9ydCBmb3IgT1MgWCBYY29kZSA0OgorICAgICogVHJ5IHRvIGF2b2lkIGJ1aWxkaW5nIFB5dGhvbiBvciBleHRlbnNpb24gbW9kdWxlcyB3aXRoIHByb2JsZW1hdGljCisgICAgICBsbHZtLWdjYyBjb21waWxlci4KKyAgICAqIFNpbmNlIFhjb2RlIDQgcmVtb3ZlcyBwcGMgc3VwcG9ydCwgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgbm93CisgICAgICBjaGVjayBmb3IgcHBjIGNvbXBpbGVyIHN1cHBvcnQgYW5kIGF1dG9tYXRpY2FsbHkgcmVtb3ZlIHBwYyBhbmQKKyAgICAgIHBwYzY0IGFyY2hzIHdoZW4gbm90IGF2YWlsYWJsZS4KKyAgICAqIFNpbmNlIFhjb2RlIDQgbm8gbG9uZ2VyIGluc3RhbGwgU0RLcyBpbiBkZWZhdWx0IGxvY2F0aW9ucywKKyAgICAgIGV4dGVuc2lvbiBtb2R1bGUgYnVpbGRzIG5vdyByZXZlcnQgdG8gdXNpbmcgaW5zdGFsbGVkIGhlYWRlcnMKKyAgICAgIGFuZCBsaWJzIGlmIHRoZSBTREsgdXNlZCB0byBidWlsZCB0aGUgaW50ZXJwcmV0ZXIgaXMgbm90CisgICAgICBhdmFpbGFibGUuCisgICAgKiBVcGRhdGUgLi9jb25maWd1cmUgdG8gdXNlIGJldHRlciBkZWZhdWx0cyBmb3IgdW5pdmVyc2FsIGJ1aWxkczsKKyAgICAgIGluIHBhcnRpY3VsYXIsIC0tZW5hYmxlLXVuaXZlcnNhbHNkaz15ZXMgdXNlcyB0aGUgWGNvZGUgZGVmYXVsdAorICAgICAgU0RLIGFuZCAtLXdpdGgtdW5pdmVyc2FsLWFyY2hzIG5vdyBkZWZhdWx0cyB0byAiaW50ZWwiIGlmIHBwYworICAgICAgbm90IGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTQyMjU6IEZpeCBVbmljb2RlIHN1cHBvcnQgZm9yIGN1cnNlcyAoIzEyNTY3KSBvbiBPUyBYCisKKy0gSXNzdWUgIzE0OTI4OiBGaXggaW1wb3J0bGliIGJvb3RzdHJhcCBpc3N1ZXMgYnkgdXNpbmcgYSBjdXN0b20gZXhlY3V0YWJsZQorICAoTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYikgdG8gYnVpbGQgUHl0aG9uL2ltcG9ydGxpYi5oLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wIEFscGhhIDQ/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisqUmVsZWFzZSBkYXRlOiAzMS1NYXktMjAxMioKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0ODM1OiBNYWtlIHBsaXN0bGliIG91dHB1dCBlbXB0eSBhcnJheXMgJiBkaWN0cyBsaWtlIE9TIFguCisgIFBhdGNoIGJ5IFNpZG5leSBTYW4gTWFydMOtbi4KKworLSBJc3N1ZSAjMTQ3NDQ6IFVzZSB0aGUgbmV3IF9QeVVuaWNvZGVXcml0ZXIgaW50ZXJuYWwgQVBJIHRvIHNwZWVkIHVwCisgIHN0ciVhcmdzIGFuZCBzdHIuZm9ybWF0KGFyZ3MpLgorCistIElzc3VlICMxNDkzMDogTWFrZSBtZW1vcnl2aWV3IG9iamVjdHMgd2Vha3JlZmFibGUuCisKKy0gSXNzdWUgIzE0Nzc1OiBGaXggYSBwb3RlbnRpYWwgcXVhZHJhdGljIGRpY3QgYnVpbGQtdXAgZHVlIHRvIHRoZSBnYXJiYWdlCisgIGNvbGxlY3RvciByZXBlYXRlZGx5IHRyeWluZyB0byB1bnRyYWNrIGRpY3RzLgorCistIElzc3VlICMxNDg1NzogZml4IHJlZ3Jlc3Npb24gaW4gcmVmZXJlbmNlcyB0byBQRVAgMzEzNSBpbXBsaWNpdCBfX2NsYXNzX18KKyAgY2xvc3VyZSB2YXJpYWJsZSAoUmVvcGVucyBpc3N1ZSAjMTIzNzApCisKKy0gSXNzdWUgIzE0NzEyIChQRVAgNDA1KTogVmlydHVhbCBlbnZpcm9ubWVudHMuIEltcGxlbWVudGVkIGJ5IFZpbmF5IFNhamlwLgorCistIElzc3VlICMxNDY2MCAoUEVQIDQyMCk6IE5hbWVzcGFjZSBwYWNrYWdlcy4gSW1wbGVtZW50ZWQgYnkgRXJpYyBTbWl0aC4KKworLSBJc3N1ZSAjMTQ0OTQ6IEZpeCBfX2Z1dHVyZV9fLnB5IGFuZCBpdHMgZG9jdW1lbnRhdGlvbiB0byBub3RlIHRoYXQKKyAgYWJzb2x1dGUgaW1wb3J0cyBhcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaW4gMy4wIGluc3RlYWQgb2YgMi43LgorICBQYXRjaCBieSBTdmVuIE1hcm5hY2guCisKKy0gSXNzdWUgIzkyNjA6IEEgZmluZXItZ3JhaW5lZCBpbXBvcnQgbG9jay4gIE1vc3Qgb2YgdGhlIGltcG9ydCBzZXF1ZW5jZQorICBub3cgdXNlcyBwZXItbW9kdWxlIGxvY2tzIHJhdGhlciB0aGFuIHRoZSBnbG9iYWwgaW1wb3J0IGxvY2ssIGVsaW1pbmF0aW5nCisgIHdlbGwta25vd24gaXNzdWVzIHdpdGggdGhyZWFkcyBhbmQgaW1wb3J0cy4KKworLSBJc3N1ZSAjMTQ2MjQ6IFVURi0xNiBkZWNvZGluZyBpcyBub3cgM3ggdG8gNHggZmFzdGVyIG9uIHZhcmlvdXMgaW5wdXRzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIGFzZGxfc2VxIGFuZCBhc2RsX2ludF9zZXEgYXJlIG5vdyBQeV9zc2l6ZV90IHNpemVkLgorCistIElzc3VlICMxNDEzMyAoUEVQIDQxNSk6IEltcGxlbWVudCBzdXBwcmVzc2lvbiBvZiBfX2NvbnRleHRfXyBkaXNwbGF5IHdpdGggYW4KKyAgYXR0cmlidXRlIG9uIEJhc2VFeGNlcHRpb24uIFRoaXMgcmVwbGFjZXMgdGhlIG9yaWdpbmFsIG1lY2hhbmlzbSBvZiBQRVAgNDA5LgorCistIElzc3VlICMxNDQxNzogTXV0YXRpbmcgYSBkaWN0IGR1cmluZyBsb29rdXAgbm93IHJlc3RhcnRzIHRoZSBsb29rdXAgaW5zdGVhZAorICBvZiByYWlzaW5nIGEgUnVudGltZUVycm9yICh1bmRvZXMgaXNzdWUgIzE0MjA1KS4KKworLSBJc3N1ZSAjMTQ3Mzg6IFNwZWVkLXVwIFVURi04IGRlY29kaW5nIG9uIG5vbi1BU0NJSSBkYXRhLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTQ3MDA6IEZpeCB0d28gYnJva2VuIGFuZCB1bmRlZmluZWQtYmVoYXZpb3VyLWluZHVjaW5nIG92ZXJmbG93IGNoZWNrcworICBpbiBvbGQtc3R5bGUgc3RyaW5nIGZvcm1hdHRpbmcuCisKKy0gSXNzdWUgIzE0NzA1OiBUaGUgUHlBcmdfUGFyc2UoKSBmYW1pbHkgb2YgZnVuY3Rpb25zIG5vdyBzdXBwb3J0IHRoZSAncCcgZm9ybWF0CisgIHVuaXQsIHdoaWNoIGFjY2VwdHMgYSAiYm9vbGVhbiBwcmVkaWNhdGUiIGFyZ3VtZW50LiAgSXQgY29udmVydHMgYW55IFB5dGhvbgorICB2YWx1ZSBpbnRvIGFuIGludGVnZXItLTAgaWYgaXQgaXMgImZhbHNlIiwgYW5kIDEgb3RoZXJ3aXNlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0NjkwOiBVc2UgbW9ub3RvbmljIGNsb2NrIGluc3RlYWQgb2Ygc3lzdGVtIGNsb2NrIGluIHRoZSBzY2hlZCwKKyAgc3VicHJvY2VzcyBhbmQgdHJhY2UgbW9kdWxlcy4KKworLSBJc3N1ZSAjMTQ5NTg6IENoYW5nZSBJRExFIHN5c3RheCBoaWdobGlnaHRpbmcgdG8gcmVjb2duaXplIGFsbCBzdHJpbmcgYW5kCisgIGJ5dGUgbGl0ZXJhbHMgc3VwcG9ydGVkIGluIFB5dGhvbiAzLjMuCisKKy0gSXNzdWUgIzEwOTk3OiBQcmV2ZW50IGEgZHVwbGljYXRlIGVudHJ5IGluIElETEUncyAiUmVjZW50IEZpbGVzIiBtZW51LgorCistIElzc3VlICMxNDQ0MzogVGVsbCBycG1idWlsZCB0byB1c2UgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBQeXRob24gaW4KKyAgYmRpc3RfcnBtLiBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxNDkyOTogU3RvcCBJZGxlIDMueCBmcm9tIGNsb3Npbmcgb24gVW5pY29kZSBkZWNvZGUgZXJyb3JzIHdoZW4KKyAgZ3JlcHBpbmcuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMjUxNTogZW1haWwgbm93IHJlZ2lzdGVycyBhIGRlZmVjdCBpZiBpdCBnZXRzIHRvIEVPRiB3aGlsZSBwYXJzaW5nCisgIGEgTUlNRSBwYXJ0IHdpdGhvdXQgc2VlaW5nIHRoZSBjbG9zaW5nIE1JTUUgYm91bmRhcnkuCisKKy0gSXNzdWUgIzEyNTEwOiBBdHRlbXB0aW5nIHRvIGdldCBpbnZhbGlkIHRvb2x0aXAgbm8gbG9uZ2VyIGNsb3NlcyBJZGxlLgorICBPdGhlciB0b29sdGlwc3MgaGF2ZSBiZWVuIGNvcnJlY3RlZCBvciBpbXByb3ZlZCBhbmQgdGhlIG51bWJlciBvZiB0ZXN0cworICBoYXMgYmVlbiB0cmlwbGVkLiBPcmlnaW5hbCBwYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTY3MjU2ODogZW1haWwgbm93IGFsd2F5cyBkZWNvZGVzIGJhc2U2NCBwYXlsb2FkcywgYWRkaW5nIHBhZGRpbmcgYW5kCisgIGlnbm9yaW5nIG5vbi1iYXNlNjQtYWxwaGFiZXQgY2hhcmFjdGVycyBpZiBuZWVkZWQsIGFuZCByZWdpc3RlcmluZyBkZWZlY3RzCisgIGZvciBhbnkgc3VjaCBwcm9ibGVtcy4KKworLSBJc3N1ZSAjMTQ5MjU6IGVtYWlsIG5vdyByZWdpc3RlcnMgYSBkZWZlY3Qgd2hlbiB0aGUgcGFyc2VyIGRlY2lkZXMgdGhhdCB0aGVyZQorICBpcyBhIG1pc3NpbmcgaGVhZGVyL2JvZHkgc2VwYXJhdG9yIGxpbmUuICBNYWxmb3JtZWRIZWFkZXJEZWZlY3QsIHdoaWNoIHRoZQorICBleGlzdGluZyBjb2RlIHdvdWxkIG5ldmVyIGFjdHVhbGx5IGdlbmVyYXRlLCBpcyBkZXByZWNhdGVkLgorCistIElzc3VlICMxMDM2NTogRmlsZSBvcGVuIGRpYWxvZyBub3cgd29ya3MgaW5zdGVhZCBvZiBjcmFzaGluZyBldmVuIHdoZW4KKyAgdGhlIHBhcmVudCB3aW5kb3cgaXMgY2xvc2VkIGJlZm9yZSB0aGUgZGlhbG9nLiBQYXRjaCBieSBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjODczOTogVXBkYXRlZCBzbXRwZCB0byBzdXBwb3J0IFJGQyA1MzIxLCBhbmQgYWRkZWQgc3VwcG9ydCBmb3IgdGhlCisgIFJGQyAxODcwIFNJWkUgZXh0ZW5zaW9uLgorCistIElzc3VlICM2NjUxOTQ6IEFkZGVkIGEgbG9jYWx0aW1lIGZ1bmN0aW9uIHRvIGVtYWlsLnV0aWxzIHRvIHByb3ZpZGUgYW4KKyAgYXdhcmUgbG9jYWwgZGF0ZXRpbWUgZm9yIHVzZSBpbiBzZXR0aW5nIERhdGUgaGVhZGVycy4KKworLSBJc3N1ZSAjMTI1ODY6IEFkZGVkIG5ldyBwcm92aXNpb25hbCBwb2xpY2llcyB0aGF0IGltcGxlbWVudCBjb252ZW5pZW50CisgIHVuaWNvZGUgc3VwcG9ydCBmb3IgZW1haWwgaGVhZGVycy4gIFNlZSBXaGF0J3MgTmV3IGZvciBkZXRhaWxzLgorCistIElzc3VlICMxNDczMTogUmVmYWN0b3JlZCBlbWFpbCBQb2xpY3kgZnJhbWV3b3JrIHRvIHN1cHBvcnQgZnVsbCBiYWNrd2FyZAorICBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDMuMiBieSBkZWZhdWx0IHlldCBhbGxvdyBmb3IgdGhlIGludHJvZHVjdGlvbiBvZgorICBuZXcgZmVhdHVyZXMgdGhyb3VnaCBuZXcgcG9saWNpZXMuICBOb3RlIHRoYXQgUG9saWN5Lm11c3RfYmVfN2JpdCBpcyByZW5hbWVkCisgIHRvIGN0ZV90eXBlLgorCistIElzc3VlICMxNDg3NjogVXNlIHVzZXItc2VsZWN0ZWQgZm9udCBmb3IgaGlnaGxpZ2h0IGNvbmZpZ3VyYXRpb24uCisKKy0gSXNzdWUgIzE0OTIwOiBGaXggdGhlIGhlbHAodXJsbGliLnBhcnNlKSBmYWlsdXJlIG9uIGxvY2FsZSBDIG9uIHRlcm1pbmFscy4KKyAgSGF2ZSBhc2NpaSBjaGFyYWN0ZXJzIGluIGhlbHAuCisKKy0gSXNzdWUgIzE0NTQ4OiBNYWtlIG11bHRpcHJvY2Vzc2luZyBmaW5hbGl6ZXJzIGNoZWNrIHBpZCBiZWZvcmUKKyAgcnVubmluZyB0byBjb3BlIHdpdGggcG9zc2liaWxpdHkgb2YgZ2MgcnVubmluZyBqdXN0IGFmdGVyIGZvcmsuCisKKy0gSXNzdWUgIzE0ODYzOiBVcGRhdGUgdGhlIGRvY3VtZW50YXRpb24gb2Ygb3MuZmRvcGVuKCkgdG8gcmVmbGVjdCB0aGUKKyAgZmFjdCB0aGF0IGl0J3Mgb25seSBhIHRoaW4gd3JhcHBlciBhcm91bmQgb3BlbigpIGFueW1vcmUuCisKKy0gSXNzdWUgIzE0MDM2OiBBZGQgYW4gYWRkaXRpb25hbCBjaGVjayB0byB2YWxpZGF0ZSB0aGF0IHBvcnQgaW4gdXJscGFyc2UgZG9lcworICBub3QgZ28gaW4gaWxsZWdhbCByYW5nZSBhbmQgcmV0dXJucyBOb25lLgorCistIElzc3VlICMxNDg2MjogQWRkIG1pc3NpbmcgbmFtZXMgdG8gb3MuX19hbGxfXworCistIElzc3VlICMxNDg3NTogVXNlIGZsb2F0KCdpbmYnKSBpbnN0ZWFkIG9mIGZsb2F0KCcxZTY2NjY2JykgaW4gdGhlIGpzb24gbW9kdWxlLgorCistIElzc3VlICMxMzU4NTogQWRkZWQgY29udGV4dGxpYi5FeGl0U3RhY2sKKworLSBQRVAgMzE0NCwgSXNzdWUgIzE0ODE0OiBBZGRlZCB0aGUgaXBhZGRyZXNzIG1vZHVsZQorCistIElzc3VlICMxNDQyNjogQ29ycmVjdCB0aGUgRGF0ZSBmb3JtYXQgaW4gRXhwaXJlcyBhdHRyaWJ1dGUgb2YgU2V0LUNvb2tpZQorICBIZWFkZXIgaW4gQ29va2llLnB5LgorCistIElzc3VlICMxNDU4ODogVGhlIHR5cGVzIG1vZHVsZSBub3cgcHJvdmlkZSBuZXdfY2xhc3MoKSBhbmQgcHJlcGFyZV9jbGFzcygpCisgIGZ1bmN0aW9ucyB0byBzdXBwb3J0IFBFUCAzMTE1IGNvbXBsaWFudCBkeW5hbWljIGNsYXNzIGNyZWF0aW9uLiBQYXRjaCBieQorICBEYW5pZWwgVXJiYW4gYW5kIE5pY2sgQ29naGxhbi4KKworLSBJc3N1ZSAjMTMxNTI6IEFsbG93IHRvIHNwZWNpZnkgYSBjdXN0b20gdGFic2l6ZSBmb3IgZXhwYW5kaW5nIHRhYnMgaW4KKyAgdGV4dHdyYXAuIFBhdGNoIGJ5IEpvaG4gRmV1ZXJzdGVpbi4KKworLSBJc3N1ZSAjMTQ3MjE6IFNlbmQgdGhlIGNvcnJlY3QgJ0NvbnRlbnQtbGVuZ3RoOiAwJyBoZWFkZXIgd2hlbiB0aGUgYm9keSBpcyBhbgorICBlbXB0eSBzdHJpbmcgJycuIEluaXRpYWwgUGF0Y2ggY29udHJpYnV0ZWQgYnkgQXJ2ZSBLbnVkc2VuLgorCistIElzc3VlICMxNDA3MjogRml4IHBhcnNpbmcgb2YgJ3RlbCcgVVJJcyBpbiB1cmxwYXJzZSBieSBtYWtpbmcgdGhlIGNoZWNrIGZvcgorICBwb3J0cyBzdHJpY3Rlci4KKworLSBJc3N1ZSAjOTM3NDogR2VuZXJpYyBwYXJzaW5nIG9mIHF1ZXJ5IGFuZCBmcmFnbWVudCBwb3J0aW9ucyBvZiB1cmwgZm9yIGFueQorICBzY2hlbWUuIFN1cHBvcnRlZCBib3RoIGJ5IFJGQzM5ODYgYW5kIFJGQzIzOTYuCisKKy0gSXNzdWUgIzE0Nzk4OiBGaXggdGhlIGZ1bmN0aW9ucyBpbiBweWNsYnIgdG8gcmFpc2UgYW4gSW1wb3J0RXJyb3IKKyAgd2hlbiB0aGUgZmlyc3QgcGFydCBvZiBhIGRvdHRlZCBuYW1lIGlzIG5vdCBhIHBhY2thZ2UuIFBhdGNoIGJ5CisgIFhhdmllciBkZSBHYXllLgorCistIElzc3VlICMxMjA5ODogbXVsdGlwcm9jZXNzaW5nIG9uIFdpbmRvd3Mgbm93IHN0YXJ0cyBjaGlsZCBwcm9jZXNzZXMKKyAgdXNpbmcgdGhlIHNhbWUgc3lzLmZsYWdzIGFzIHRoZSBjdXJyZW50IHByb2Nlc3MuICBJbml0aWFsIHBhdGNoIGJ5CisgIFNlcmdleSBNZXplbnRzZXYuCisKKy0gSXNzdWUgIzEzMDMxOiBTbWFsbCBzcGVlZC11cCBmb3IgdGFyZmlsZSB3aGVuIHVuemlwcGluZyB0YXJmaWxlcy4KKyAgUGF0Y2ggYnkgSnVzdGluIFBlZWwuCisKKy0gSXNzdWUgIzE0NzgwOiB1cmxsaWIucmVxdWVzdC51cmxvcGVuKCkgbm93IGhhcyBhIGBgY2FkZWZhdWx0YGAgYXJndW1lbnQKKyAgdG8gdXNlIHRoZSBkZWZhdWx0IGNlcnRpZmljYXRlIHN0b3JlLiAgSW5pdGlhbCBwYXRjaCBieSBKYW1lcyBPYWtsZXkuCisKKy0gSXNzdWUgIzE0ODI5OiBGaXggYmlzZWN0IGFuZCByYW5nZSgpIGluZGV4aW5nIHdpdGggbGFyZ2UgaW5kaWNlcworICAoPj0gMiAqKiAzMikgdW5kZXIgNjQtYml0IFdpbmRvd3MuCisKKy0gSXNzdWUgIzE0NzMyOiBUaGUgX2NzdiBtb2R1bGUgbm93IHVzZXMgUEVQIDMxMjEgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICBQYXRjaCBieSBSb2JpbiBTY2hyZWliZXIuCisKKy0gSXNzdWUgIzE0ODA5OiBBZGQgSFRUUCBzdGF0dXMgY29kZXMgaW50cm9kdWNlZCBieSBSRkMgNjU4NSB0byBodHRwLnNlcnZlcgorICBhbmQgaHR0cC5jbGllbnQuIFBhdGNoIGJ5IEV1bmdKdW4gWWkuCisKKy0gSXNzdWUgIzE0Nzc3OiB0a2ludGVyIG1heSByZXR1cm4gdW5kZWNvZGVkIFVURi04IGJ5dGVzIGFzIGEgc3RyaW5nIHdoZW4KKyAgYWNjZXNzaW5nIHRoZSBUayBjbGlwYm9hcmQuICBNb2RpZnkgY2xpcGJvYWRfZ2V0KCkgdG8gZmlyc3QgcmVxdWVzdCB0eXBlCisgIFVURjhfU1RSSU5HIHdoZW4gbm8gc3BlY2lmaWMgdHlwZSBpcyByZXF1ZXN0ZWQgaW4gYW4gWDExIHdpbmRvd2luZworICBlbnZpcm9ubWVudCwgZmFsbGluZyBiYWNrIHRvIHRoZSBjdXJyZW50IGRlZmF1bHQgdHlwZSBTVFJJTkcgaWYgdGhhdCBmYWlscy4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzE0NzczOiBGaXggb3MuZndhbGsoKSBmYWlsaW5nIG9uIGRhbmdsaW5nIHN5bWxpbmtzLgorCistIElzc3VlICMxMjU0MTogQmUgbGVuaWVudCB3aXRoIHF1b3RlcyBhcm91bmQgUmVhbG0gZmllbGQgb2YgSFRUUCBCYXNpYworICBBdXRoZW50YXRpb24gaW4gdXJsbGliMi4KKworLSBJc3N1ZSAjMTQ4MDc6IG1vdmUgdW5kb2N1bWVudGVkIHRhcmZpbGUuZmlsZW1vZGUoKSB0byBzdGF0LmZpbGVtb2RlKCkgYW5kIGFkZAorICBkb2MgZW50cnkuIEFkZCB0YXJmaWxlLmZpbGVtb2RlIGFsaWFzIHdpdGggZGVwcmVjYXRpb24gd2FybmluZy4KKworLSBJc3N1ZSAjMTM4MTU6IFRhckZpbGUuZXh0cmFjdGZpbGUoKSBub3cgcmV0dXJucyBpby5CdWZmZXJlZFJlYWRlciBvYmplY3RzLgorCistIElzc3VlICMxNDUzMjogQWRkIGEgc2VjdXJlX2NvbXBhcmUoKSBoZWxwZXIgdG8gdGhlIGhtYWMgbW9kdWxlLCB0byBtaXRpZ2F0ZQorICB0aW1pbmcgYXR0YWNrcy4gUGF0Y2ggYnkgSm9uIE9iZXJoZWlkZS4KKworLSBBZGQgaW1wb3J0bGliLnV0aWwucmVzb2x2ZV9uYW1lKCkuCisKKy0gSXNzdWUgIzE0MzY2OiBTdXBwb3J0IGx6bWEgY29tcHJlc3Npb24gaW4gemlwIGZpbGVzLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxMzk1OTogSW50cm9kdWNlIGltcG9ydGxpYi5maW5kX2xvYWRlcigpIGFuZCBkb2N1bWVudAorICBpbXAuZmluZF9tb2R1bGUvbG9hZF9tb2R1bGUgYXMgZGVwcmVjYXRlZC4KKworLSBJc3N1ZSAjMTQwODI6IHNodXRpbC5jb3B5MigpIG5vdyBjb3BpZXMgZXh0ZW5kZWQgYXR0cmlidXRlcywgaWYgcG9zc2libGUuCisgIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM5NTk6IE1ha2UgaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLmxvYWRfbW9kdWxlKCkvZ2V0X2ZpbGVuYW1lKCkgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuRXh0ZW5zaW9uRmlsZUxvYWRlci5sb2FkX21vZHVsZSgpIGhhdmUgdGhlaXIgc2luZ2xlCisgIGFyZ3VtZW50IGJlIG9wdGlvbmFsLiBBbGxvd3MgZm9yIHRoZSByZXBsYWNlbWVudCAoYW5kIHRodXMgZGVwcmVjYXRpb24pIG9mCisgIGltcC5sb2FkX3NvdXJjZSgpL2xvYWRfcGFja2FnZSgpL2xvYWRfY29tcGlsZWQoKS4KKworLSBJc3N1ZSAjMTM5NTk6IGltcC5nZXRfc3VmZml4ZXMoKSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm91ciBvZiB0aGUgbmV3CisgIGF0dHJpYnV0ZXMgb24gaW1wb3J0bGliLm1hY2hpbmVyeTogU09VUkNFX1NVRkZJWEVTLCBERUJVR19CWVRFQ09ERV9TVUZGSVhFUywKKyAgT1BUSU1JWkVEX0JZVEVDT0RFX1NVRkZJWEVTLCBCWVRFQ09ERV9TVUZGSVhFUywgYW5kIEVYVEVOU0lPTl9TVUZGSVhFUy4gVGhpcworICBsZWQgdG8gYW4gaW5kaXJlY3QgZGVwcmVjYXRpb24gb2YgaW5zcGVjdC5nZXRtb2R1bGVpbmZvKCkuCisKKy0gSXNzdWUgIzE0NjYyOiBQcmV2ZW50IHNodXRpbCBmYWlsdXJlcyBvbiBPUyBYIHdoZW4gZGVzdGluYXRpb24gZG9lcyBub3QKKyAgc3VwcG9ydCBjaGZsYWcgb3BlcmF0aW9ucy4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTQxNTc6IEZpeCB0aW1lLnN0cnB0aW1lIGZhaWxpbmcgd2l0aG91dCBhIHllYXIgb24gRmVicnVhcnkgMjl0aC4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxNDc1MzogTWFrZSBtdWx0aXByb2Nlc3NpbmcncyBoYW5kbGluZyBvZiBuZWdhdGl2ZSB0aW1lb3V0cworICB0aGUgc2FtZSBhcyBpdCB3YXMgaW4gUHl0aG9uIDMuMi4KKworLSBJc3N1ZSAjMTQ1ODM6IEZpeCBpbXBvcnRsaWIgYnVnIHdoZW4gYSBwYWNrYWdlJ3MgX19pbml0X18ucHkgd291bGQgZmlyc3QKKyAgaW1wb3J0IG9uZSBvZiBpdHMgbW9kdWxlcyB0aGVuIHJhaXNlIGFuIGVycm9yLgorCistIElzc3VlICMxNDc0MTogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3IgRWxsaXBzaXMgKCcuLi4nKSBpbiBwYXJzZXIgbW9kdWxlLgorCistIElzc3VlICMxNDY5NzogRml4IG1pc3Npbmcgc3VwcG9ydCBmb3Igc2V0IGRpc3BsYXlzIGFuZCBzZXQgY29tcHJlaGVuc2lvbnMgaW4KKyAgcGFyc2VyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTQ3MDE6IEZpeCBtaXNzaW5nIHN1cHBvcnQgZm9yICdyYWlzZSAuLi4gZnJvbScgaW4gcGFyc2VyIG1vZHVsZS4KKworLSBBZGQgc3VwcG9ydCBmb3IgdGltZW91dHMgdG8gdGhlIGFjcXVpcmUoKSBtZXRob2RzIG9mCisgIG11bHRpcHJvY2Vzc2luZydzIGxvY2svc2VtYXBob3JlL2NvbmRpdGlvbiBwcm94aWVzLgorCistIElzc3VlICMxMzk4OTogQWRkIHN1cHBvcnQgZm9yIHRleHQgbW9kZSB0byBnemlwLm9wZW4oKS4KKworLSBJc3N1ZSAjMTQxMjc6IFRoZSBvcy5zdGF0KCkgcmVzdWx0IG9iamVjdCBub3cgcHJvdmlkZXMgdGhyZWUgYWRkaXRpb25hbAorICBmaWVsZHM6IHN0X2N0aW1lX25zLCBzdF9tdGltZV9ucywgYW5kIHN0X2F0aW1lX25zLCBwcm92aWRpbmcgdGhvc2UgdGltZXMgYXMgYW4KKyAgaW50ZWdlciB3aXRoIG5hbm9zZWNvbmQgcmVzb2x1dGlvbi4gIFRoZSBmdW5jdGlvbnMgb3MudXRpbWUoKSwgb3MubHV0aW1lcygpLAorICBhbmQgb3MuZnV0aW1lcygpIG5vdyBhY2NlcHQgYSBuZXcgcGFyYW1ldGVyLCBucywgd2hpY2ggYWNjZXB0cyBtdGltZSBhbmQgYXRpbWUKKyAgYXMgaW50ZWdlcnMgd2l0aCBuYW5vc2Vjb25kIHJlc29sdXRpb24uCisKKy0gSXNzdWUgIzE0MTI3IGFuZCAjMTAxNDg6IHNodXRpbC5jb3B5c3RhdCBub3cgcHJlc2VydmVzIGV4YWN0IG10aW1lIGFuZCBhdGltZQorICBvbiBmaWxlc3lzdGVtcyBwcm92aWRpbmcgbmFub3NlY29uZCByZXNvbHV0aW9uLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTU6IEJyaW5nIFRvb2xzL3BhcnNlci91bnBhcnNlLnB5IHN1cHBvcnQgdXAgdG8gZGF0ZSB3aXRoCisgIHRoZSBQeXRob24gMy4zIEdyYW1tYXIuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNDQ3MjogVXBkYXRlIC5naXRpZ25vcmUuIFBhdGNoIGJ5IE1hdGVqIENlcGwuCisKKy0gVXBncmFkZSBXaW5kb3dzIGxpYnJhcnkgdmVyc2lvbnM6IGJ6aXAgMS4wLjYsIE9wZW5TU0wgMS4wLjFjLgorCistIElzc3VlICMxNDY5MzogVW5kZXIgbm9uLVdpbmRvd3MgcGxhdGZvcm1zLCBoYXNobGliJ3MgZmFsbGJhY2sgbW9kdWxlcyBhcmUKKyAgYWx3YXlzIGNvbXBpbGVkLCBldmVuIGlmIE9wZW5TU0wgaXMgcHJlc2VudCBhdCBidWlsZCB0aW1lLgorCistIElzc3VlICMxMzIxMDogV2luZG93cyBidWlsZCBub3cgdXNlcyBWUzIwMTAsIHBvcnRlZCBmcm9tIFZTMjAwOC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNDU4ODogVGhlIGxhbmd1YWdlIHJlZmVyZW5jZSBub3cgYWNjdXJhdGVseSBkb2N1bWVudHMgdGhlIFB5dGhvbiAzCisgIGNsYXNzIGRlZmluaXRpb24gcHJvY2Vzcy4gUGF0Y2ggYnkgTmljayBDb2dobGFuLgorCistIElzc3VlICMxNDk0MzogQ29ycmVjdCBhIGRlZmF1bHQgYXJndW1lbnQgdmFsdWUgZm9yIHdpbnJlZy5PcGVuS2V5CisgIGFuZCBjb3JyZWN0bHkgbGlzdCB0aGUgYXJndW1lbnQgbmFtZXMgaW4gdGhlIGZ1bmN0aW9uJ3MgZXhwbGFuYXRpb24uCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDAxLU1heS0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQ2OTk6IEZpeCBjYWxsaW5nIHRoZSBjbGFzc21ldGhvZCBkZXNjcmlwdG9yIGRpcmVjdGx5LgorCistIElzc3VlICMxNDQzMzogUHJldmVudCBtc3ZjcnQgY3Jhc2ggaW4gaW50ZXJhY3RpdmUgcHJvbXB0IHdoZW4gc3RkaW4gaXMgY2xvc2VkLgorCistIElzc3VlICMxNDUyMTogTWFrZSByZXN1bHQgb2YgZmxvYXQoJ25hbicpIGFuZCBmbG9hdCgnLW5hbicpIG1vcmUgY29uc2lzdGVudAorICBhY3Jvc3MgcGxhdGZvcm1zLgorCistIElzc3VlICMxNDY0NjogX19pbXBvcnRfXygpIHNldHMgX19sb2FkZXJfXyBpZiB0aGUgbG9hZGVyIGRpZCBub3QuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5tZXRhX3BhdGguIElmCisgIHN5cy5tZXRhX3BhdGggaXMgZm91bmQgdG8gYmUgZW1wdHksIHJhaXNlIEltcG9ydFdhcm5pbmcuCisKKy0gSXNzdWUgIzE0NjA1OiBObyBsb25nZXIgaGF2ZSBpbXBsaWNpdCBlbnRyaWVzIGluIHN5cy5wYXRoX2hvb2tzLiBJZgorICBzeXMucGF0aF9ob29rcyBpcyBmb3VuZCB0byBiZSBlbXB0eSwgYSB3YXJuaW5nIHdpbGwgYmUgcmFpc2VkLiBOb25lIGlzIG5vdworICBpbnNlcnRlZCBpbnRvIHN5cy5wYXRoX2ltcG9ydGVyX2NhY2hlIGlmIG5vIGZpbmRlciB3YXMgZGlzY292ZXJlZC4gVGhpcyBhbHNvCisgIG1lYW5zIGltcC5OdWxsSW1wb3J0ZXIgaXMgbm8gbG9uZ2VyIGltcGxpY2l0bHkgdXNlZC4KKworLSBJc3N1ZSAjMTM5MDM6IEltcGxlbWVudCBQRVAgNDEyLiBJbmRpdmlkdWFsIGRpY3Rpb25hcnkgaW5zdGFuY2VzIGNhbiBub3cgc2hhcmUKKyAgdGhlaXIga2V5cyB3aXRoIG90aGVyIGRpY3Rpb25hcmllcy4gQ2xhc3NlcyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIHRvIHNoYXJlCisgIHRoZWlyIGluc3RhbmNlIGRpY3Rpb25hcnkga2V5cyBmb3IgaW1wcm92ZWQgbWVtb3J5IGFuZCBwZXJmb3JtYW5jZS4KKworLSBJc3N1ZSAjMTE2MDMgKGFnYWluKTogU2V0dGluZyBfX3JlcHJfXyB0byBfX3N0cl9fIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IKKyAgd2hlbiByZXByKCkgb3Igc3RyKCkgaXMgY2FsbGVkIG9uIHN1Y2ggYW4gb2JqZWN0LgorCistIElzc3VlICMxNDY1ODogRml4IGJpbmRpbmcgYSBzcGVjaWFsIG1ldGhvZCB0byBhIGJ1aWx0aW4gaW1wbGVtZW50YXRpb24gb2YgYQorICBzcGVjaWFsIG1ldGhvZCB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCisKKy0gSXNzdWUgIzE0NjMwOiBGaXggYSBtZW1vcnkgYWNjZXNzIGJ1ZyBmb3IgaW5zdGFuY2VzIG9mIGEgc3ViY2xhc3Mgb2YgaW50CisgIHdpdGggdmFsdWUgMC4KKworLSBJc3N1ZSAjMTQzMzk6IFNwZWVkIGltcHJvdmVtZW50cyB0byBiaW4sIG9jdCBhbmQgaGV4IGZ1bmN0aW9ucy4gIFBhdGNoIGJ5CisgIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE0MDk4OiBOZXcgZnVuY3Rpb25zIFB5RXJyX0dldEV4Y0luZm8gYW5kIFB5RXJyX1NldEV4Y0luZm8uCisgIFBhdGNoIGJ5IFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzE0Mzg1OiBJdCBpcyBub3cgcG9zc2libGUgdG8gdXNlIGEgY3VzdG9tIHR5cGUgZm9yIHRoZSBfX2J1aWx0aW5zX18KKyAgbmFtZXNwYWNlLCBpbnN0ZWFkIG9mIGEgZGljdC4gSXQgY2FuIGJlIHVzZWQgZm9yIHNhbmRib3hpbmcgZm9yIGV4YW1wbGUuCisgIFJhaXNlIGFsc28gYSBOYW1lRXJyb3IgaW5zdGVhZCBvZiBJbXBvcnRFcnJvciBpZiBfX2J1aWxkX2NsYXNzX18gbmFtZSBpZiBub3QKKyAgZm91bmQgaW4gX19idWlsdGluc19fLgorCistIElzc3VlICMxMjU5OTogQmUgbW9yZSBzdHJpY3QgaW4gYWNjZXB0aW5nIE5vbmUgY29tcGFyZWQgdG8gYSBmYWxzZS1saWtlCisgIG9iamVjdCBmb3IgaW1wb3J0bGliLnV0aWwubW9kdWxlX2Zvcl9sb2FkZXIgYW5kCisgIGltcG9ydGxpYi5tYWNoaW5lcnkuUGF0aEZpbmRlci4KKworLSBJc3N1ZSAjMTQ2MTI6IEZpeCBqdW1waW5nIGFyb3VuZCB3aXRoIGJsb2NrcyBieSBzZXR0aW5nIGZfbGluZW5vLgorCistIElzc3VlICMxNDU5MjogQXR0ZW1wdGluZyBhIHJlbGF0aXZlIGltcG9ydCB3L28gX19wYWNrYWdlX18gb3IgX19uYW1lX18gc2V0IGluCisgIGdsb2JhbHMgcmFpc2VzIGEgS2V5RXJyb3IuCisKKy0gSXNzdWUgIzE0NjA3OiBGaXgga2V5d29yZC1vbmx5IGFyZ3VtZW50cyB3aGljaCBzdGFydGVkIHdpdGggYGBfX2BgLgorCistIElzc3VlICMxMDg1NDogVGhlIEltcG9ydEVycm9yIHJhaXNlZCB3aGVuIGFuIGV4dGVuc2lvbiBtb2R1bGUgb24gV2luZG93cworICBmYWlscyB0byBpbXBvcnQgbm93IHVzZXMgdGhlIG5ldyBwYXRoIGFuZCBuYW1lIGF0dHJpYnV0ZXMgZnJvbQorICBJc3N1ZSAjMTU1OTU0OS4KKworLSBJc3N1ZSAjMTM4ODk6IENoZWNrIGFuZCAoaWYgbmVjZXNzYXJ5KSBzZXQgRlBVIGNvbnRyb2wgd29yZCBiZWZvcmUgY2FsbGluZworICBhbnkgb2YgdGhlIGR0b2EuYyBzdHJpbmcgPC0+IGZsb2F0IGNvbnZlcnNpb24gZnVuY3Rpb25zLCBvbiBNU1ZDIGJ1aWxkcyBvZgorICBQeXRob24uICBUaGlzIGZpeGVzIGlzc3VlcyB3aGVuIGVtYmVkZGluZyBQeXRob24gaW4gYSBEZWxwaGkgYXBwLgorCistIF9faW1wb3J0X18oKSBub3cgbWF0Y2hlcyBQRVAgMzI4IGFuZCBkb2N1bWVudGF0aW9uIGJ5IGRlZmF1bHRpbmcgJ2luZGV4JyB0byAwCisgIGluc3RlYWQgb2YgLTEgYW5kIHJlbW92aW5nIHN1cHBvcnQgZm9yIG5lZ2F0aXZlIHZhbHVlcy4KKworLSBJc3N1ZSAjMjM3NzogTWFrZSBpbXBvcnRsaWIgdGhlIGltcGxlbWVudGF0aW9uIG9mIF9faW1wb3J0X18oKS4KKworLSBJc3N1ZSAjMTU1OTU0OTogSW1wb3J0RXJyb3Igbm93IGhhcyAnbmFtZScgYW5kICdwYXRoJyBhdHRyaWJ1dGVzIHRoYXQgYXJlIHNldAorICB1c2luZyBrZXl3b3JkIGFyZ3VtZW50cyB0byBpdHMgY29uc3RydWN0b3IuIFRoZXkgYXJlIGN1cnJlbnRseSBub3Qgc2V0IGJ5CisgIGltcG9ydCBhcyB0aGV5IGFyZSBtZWFudCBmb3IgdXNlIGJ5IGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTQ0NzQ6IFNhdmUgYW5kIHJlc3RvcmUgZXhjZXB0aW9uIHN0YXRlIGluIHRocmVhZC5zdGFydF9uZXdfdGhyZWFkKCkKKyAgd2hpbGUgd3JpdGluZyBlcnJvciBtZXNzYWdlIGlmIHRoZSB0aHJlYWQgbGVhdmVzIGFuIHVuaGFuZGxlZCBleGNlcHRpb24uCisKKy0gSXNzdWUgIzEzMDE5OiBGaXggcG90ZW50aWFsIHJlZmVyZW5jZSBsZWFrcyBpbiBieXRlYXJyYXkuZXh0ZW5kKCkuICBQYXRjaAorICBieSBTdW1hbiBTYWhhLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0NzY4OiBvcy5wYXRoLmV4cGFuZHVzZXIoJ34vYScpIGRvZXNuJ3Qgd29ya3MgY29ycmVjdGx5IHdoZW4gSE9NRSBpcyAnLycuCisKKy0gSXNzdWUgIzE0MzcxOiBTdXBwb3J0IGJ6aXAyIGluIHppcGZpbGUgbW9kdWxlLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTMxODM6IEZpeCBwZGIgc2tpcHBpbmcgZnJhbWVzIGFmdGVyIGhpdHRpbmcgYSBicmVha3BvaW50IGFuZCBydW5uaW5nCisgIHN0ZXAuICBQYXRjaCBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMTQ2OTY6IEZpeCBwYXJzZXIgbW9kdWxlIHRvIHVuZGVyc3RhbmQgJ25vbmxvY2FsJyBkZWNsYXJhdGlvbnMuCisKKy0gSXNzdWUgIzEwOTQxOiBGaXggaW1hcGxpYi5JbnRlcm5hbGRhdGUydHVwbGUgdG8gcHJvZHVjZSBjb3JyZWN0IHJlc3VsdCBuZWFyCisgIHRoZSBEU1QgdHJhbnNpdGlvbi4gIFBhdGNoIGJ5IEpvZSBQZXRlcnNvbi4KKworLSBJc3N1ZSAjOTE1NDogRml4IHBhcnNlciBtb2R1bGUgdG8gdW5kZXJzdGFuZCBmdW5jdGlvbiBhbm5vdGF0aW9ucy4KKworLSBJc3N1ZSAjNjA4NTogSW4gaHR0cC5zZXJ2ZXIucHkgU2ltcGxlSFRUUFNlcnZlci5hZGRyZXNzX3N0cmluZyByZXR1cm5zIHRoZQorICBjbGllbnQgaXAgYWRkcmVzcyBpbnN0ZWFkIGNsaWVudCBob3N0bmFtZS4gUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxNDMwOTogRGVwcmVjYXRlIHRpbWUuY2xvY2soKSwgdXNlIHRpbWUucGVyZl9jb3VudGVyKCkgb3IKKyAgdGltZS5wcm9jZXNzX3RpbWUoKSBpbnN0ZWFkLgorCistIElzc3VlICMxNDQyODogSW1wbGVtZW50IHRoZSBQRVAgNDE4LiBBZGQgdGltZS5nZXRfY2xvY2tfaW5mbygpLAorICB0aW1lLnBlcmZfY291bnRlcigpIGFuZCB0aW1lLnByb2Nlc3NfdGltZSgpIGZ1bmN0aW9ucywgYW5kIHJlbmFtZQorICB0aW1lLnN0ZWFkeSgpIHRvIHRpbWUubW9ub3RvbmljKCkuCisKKy0gSXNzdWUgIzE0NjQ2OiBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcigpIG5vdyBzZXRzIF9fbG9hZGVyX18gYW5kCisgIF9fcGFja2FnZV9fICh3aGVuIHBvc3NpYmxlKS4KKworLSBJc3N1ZSAjMTQ2NjQ6IEl0IGlzIG5vdyBwb3NzaWJsZSB0byB1c2UgQHVuaXR0ZXN0LnNraXB7SWYsVW5sZXNzfSBvbiBhCisgIHRlc3QgY2xhc3MgdGhhdCBkb2Vzbid0IGluaGVyaXQgZnJvbSBUZXN0Q2FzZSAoaS5lLiBhIG1peGluKS4KKworLSBJc3N1ZSAjNDg5MjogbXVsdGlwcm9jZXNzaW5nIENvbm5lY3Rpb25zIGNhbiBub3cgYmUgdHJhbnNmZXJyZWQgb3ZlcgorICBtdWx0aXByb2Nlc3NpbmcgQ29ubmVjdGlvbnMuICBQYXRjaCBieSBSaWNoYXJkIE91ZGtlcmsgKHNidCkuCisKKy0gSXNzdWUgIzE0MTYwOiBUYXJGaWxlLmV4dHJhY3RmaWxlKCkgZmFpbGVkIHRvIHJlc29sdmUgc3ltYm9saWMgbGlua3Mgd2hlbgorICB0aGUgbGlua3Mgd2VyZSBub3QgbG9jYXRlZCBpbiBhbiBhcmNoaXZlIHN1YmRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTQ2Mzg6IHB5ZG9jIG5vdyB0cmVhdHMgbm9uLXN0cmluZyBfX25hbWVfXyB2YWx1ZXMgYXMgaWYgdGhleQorICB3ZXJlIG1pc3NpbmcsIGluc3RlYWQgb2YgcmFpc2luZyBhbiBlcnJvci4KKworLSBJc3N1ZSAjMTM2ODQ6IEZpeCBodHRwbGliIHR1bm5lbCBpc3N1ZSBvZiBpbmZpbml0ZSBsb29wcyBmb3IgY2VydGFpbiBzaXRlcworICB3aGljaCBzZW5kIEVPRiB3aXRob3V0IHRyYWlsaW5nIFxyXG4uCisKKy0gSXNzdWUgIzE0NjA1OiBBZGQgaW1wb3J0bGliLmFiYy5GaWxlTG9hZGVyLCBpbXBvcnRsaWIubWFjaGluZXJ5LihGaWxlRmluZGVyLAorICBTb3VyY2VGaWxlTG9hZGVyLCBTb3VyY2VsZXNzRmlsZUxvYWRlciwgRXh0ZW5zaW9uRmlsZUxvYWRlcikuCisKKy0gSXNzdWUgIzEzOTU5OiBpbXAuY2FjaGVfZnJvbV9zb3VyY2UoKS9zb3VyY2VfZnJvbV9jYWNoZSgpIG5vdyBmb2xsb3cKKyAgb3MucGF0aC5qb2luKCkvc3BsaXQoKSBzZW1hbnRpY3MgZm9yIHBhdGggbWFuaXB1bGF0aW9uIGluc3RlYWQgb2YgaXRzIHByaW9yLAorICBjdXN0b20gc2VtYW50aWNzIG9mIGNhcmluZyB0aGUgcmlnaHQtbW9zdCBwYXRoIHNlcGFyYXRvciBmb3J3YXJkIGluIHBhdGgKKyAgam9pbmluZy4KKworLSBJc3N1ZSAjMjE5MzogQWxsb3cgIjoiIGNoYXJhY3RlciBpbiBDb29raWUgTkFNRSB2YWx1ZXMuCisKKy0gSXNzdWUgIzE0NjI5OiB0b2tlbml6ZXIuZGV0ZWN0X2VuY29kaW5nIHdpbGwgc3BlY2lmeSB0aGUgZmlsZW5hbWUgaW4gdGhlCisgIFN5bnRheEVycm9yIGV4Y2VwdGlvbiBpZiBmb3VuZCBhdCByZWFkbGluZS5fX3NlbGZfXy5uYW1lLgorCistIElzc3VlICMxNDYyOTogUmFpc2UgU3ludGF4RXJyb3IgaW4gdG9rZW5pemVyLmRldGVjdF9lbmNvZGluZyBpZiB0aGUKKyAgZmlyc3QgdHdvIGxpbmVzIGhhdmUgbm9uLVVURi04IGNoYXJhY3RlcnMgd2l0aG91dCBhbiBlbmNvZGluZyBkZWNsYXJhdGlvbi4KKworLSBJc3N1ZSAjMTQzMDg6IEZpeCBhbiBleGNlcHRpb24gd2hlbiBhICJkdW1teSIgdGhyZWFkIGlzIGluIHRoZSB0aHJlYWRpbmcKKyAgbW9kdWxlJ3MgYWN0aXZlIGxpc3QgYWZ0ZXIgYSBmb3JrKCkuCisKKy0gSXNzdWUgIzExNzUwOiBUaGUgV2luZG93cyBBUEkgZnVuY3Rpb25zIHNjYXR0ZXJlZCBpbiB0aGUgX3N1YnByb2Nlc3MgYW5kCisgIF9tdWx0aXByb2Nlc3Npbmcud2luMzIgbW9kdWxlcyBub3cgbGl2ZSBpbiBhIHNpbmdsZSBtb2R1bGUgIl93aW5hcGkiLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0MDg3OiBtdWx0aXByb2Nlc3Npbmc6IGFkZCBDb25kaXRpb24ud2FpdF9mb3IoKS4gUGF0Y2ggYnkgc2J0LgorCistIElzc3VlICMxNDUzODogSFRNTFBhcnNlciBjYW4gbm93IHBhcnNlIGNvcnJlY3RseSBzdGFydCB0YWdzIHRoYXQgY29udGFpbgorICBhIGJhcmUgJy8nLgorCistIElzc3VlICMxNDQ1MjogU3lzTG9nSGFuZGxlciBubyBsb25nZXIgaW5zZXJ0cyBhIFVURi04IEJPTSBpbnRvIHRoZSBtZXNzYWdlLgorCistIElzc3VlICMxNDM4NjogRXhwb3NlIHRoZSBkaWN0X3Byb3h5IGludGVybmFsIHR5cGUgYXMgdHlwZXMuTWFwcGluZ1Byb3h5VHlwZS4KKworLSBJc3N1ZSAjMTM5NTk6IE1ha2UgaW1wLnJlbG9hZCgpIGFsd2F5cyB1c2UgYSBtb2R1bGUncyBfX2xvYWRlcl9fIHRvIHBlcmZvcm0KKyAgdGhlIHJlbG9hZC4KKworLSBJc3N1ZSAjMTM5NTk6IEFkZCBpbXAucHkgYW5kIHJlbmFtZSB0aGUgYnVpbHQtaW4gbW9kdWxlIHRvIF9pbXAsIGFsbG93aW5nIGZvcgorICByZS1pbXBsZW1lbnRpbmcgcGFydHMgb2YgdGhlIG1vZHVsZSBpbiBwdXJlIFB5dGhvbi4KKworLSBJc3N1ZSAjMTM0OTY6IEZpeCBwb3RlbnRpYWwgb3ZlcmZsb3cgaW4gYmlzZWN0LmJpc2VjdCBhbGdvcml0aG0gd2hlbiBhcHBsaWVkCisgIHRvIGEgY29sbGVjdGlvbiBvZiBzaXplID4gc3lzLm1heHNpemUgLyAyLgorCistIEhhdmUgaW1wb3J0bGliIHRha2UgYWR2YW50YWdlIG9mIEltcG9ydEVycm9yJ3MgbmV3ICduYW1lJyBhbmQgJ3BhdGgnCisgIGF0dHJpYnV0ZXMuCisKKy0gSXNzdWUgIzE0Mzk5OiB6aXBmaWxlIG5vdyByZWNvZ25pemVzIHRoYXQgdGhlIGFyY2hpdmUgaGFzIGJlZW4gbW9kaWZpZWQgZXZlbgorICBpZiBvbmx5IHRoZSBjb21tZW50IGlzIGNoYW5nZWQuICBJbiBhZGRpdGlvbiwgdGhlIFR5cGVFcnJvciB0aGF0IHJlc3VsdHMgZnJvbQorICB0cnlpbmcgdG8gc2V0IGEgbm9uLWJpbmFyeSB2YWx1ZSBhcyBhIGNvbW1lbnQgaXMgbm93IHJhaXNlZCBhdCB0aGUgdGltZQorICB0aGUgY29tbWVudCBpcyBzZXQgcmF0aGVyIHRoYW4gYXQgdGhlIHRpbWUgdGhlIHppcGZpbGUgaXMgd3JpdHRlbi4KKworLSB0cmFjZS5Db3ZlcmFnZVJlc3VsdHMuaXNfaWdub3JlZF9maWxlbmFtZSgpIG5vdyBpZ25vcmVzIGFueSBuYW1lIHRoYXQgc3RhcnRzCisgIHdpdGggIjwiIGFuZCBlbmRzIHdpdGggIj4iIGluc3RlYWQgb2Ygc3BlY2lhbC1jYXNpbmcgIjxzdHJpbmc+IiBhbmQKKyAgIjxkb2N0ZXN0ICIuCisKKy0gSXNzdWUgIzEyNTM3OiBUaGUgbWFpbGJveCBtb2R1bGUgbm8gbG9uZ2VyIGRlcGVuZHMgb24ga25vd2xlZGdlIG9mIGludGVybmFsCisgIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIGVtYWlsIHBhY2thZ2UgTWVzc2FnZSBvYmplY3QuCisKKy0gSXNzdWUgIzc5Nzg6IHNvY2tldHNlcnZlciBub3cgcmVzdGFydHMgdGhlIHNlbGVjdCgpIGNhbGwgd2hlbiBFSU5UUiBpcworICByZXR1cm5lZC4gIFRoaXMgYXZvaWRzIGNyYXNoaW5nIHRoZSBzZXJ2ZXIgbG9vcCB3aGVuIGEgc2lnbmFsIGlzIHJlY2VpdmVkLgorICBQYXRjaCBieSBKZXJ6eSBLb3plcmEuCisKKy0gSXNzdWUgIzE0NTIyOiBBdm9pZCBkdXBsaWNhdGluZyBzb2NrZXQgaGFuZGxlcyBpbiBtdWx0aXByb2Nlc3NpbmcuY29ubmVjdGlvbi4KKyAgUGF0Y2ggYnkgc2J0LgorCistIERvbid0IFB5X0RFQ1JFRiBOVUxMIHZhcmlhYmxlIGluIGlvLkluY3JlbWVudGFsTmV3bGluZURlY29kZXIuCisKKy0gSXNzdWUgIzg1MTU6IFNldCBfX2ZpbGVfXyB3aGVuIHJ1biBmaWxlIGluIElETEUuCisgIEluaXRpYWwgcGF0Y2ggYnkgQnJ1Y2UgRnJlZGVyaWtzZW4uCisKKy0gSXNzdWUgIzE0NDk2OiBGaXggd3JvbmcgbmFtZSBpbiBpZGxlbGliL3RhYmJlZHBhZ2VzLnB5LgorICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCisKKy0gSXNzdWUgIzMwMzM6IEFkZCBkaXNwbGF5b2YgcGFyYW1ldGVyIHRvIHRraW50ZXIgZm9udC4gUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8uCisKKy0gSXNzdWUgIzE0NDgyOiBSYWlzZSBhIFZhbHVlRXJyb3IsIG5vdCBhIE5hbWVFcnJvciwgd2hlbiB0cnlpbmcgdG8gY3JlYXRlCisgIGEgbXVsdGlwcm9jZXNzaW5nIENsaWVudCBvciBMaXN0ZW5lciB3aXRoIGFuIEFGX1VOSVggdHlwZSBhZGRyZXNzIHVuZGVyCisgIFdpbmRvd3MuICBQYXRjaCBieSBQb3BhIENsYXVkaXUuCisKKy0gSXNzdWUgIzgwMjMxMDogR2VuZXJhdGUgYWx3YXlzIHVuaXF1ZSB0a2ludGVyIGZvbnQgbmFtZXMgaWYgbm90IGRpcmVjdGx5IHBhc3NlZC4KKworLSBJc3N1ZSAjMTQxNTE6IFJhaXNlIGEgVmFsdWVFcnJvciwgbm90IGEgTmFtZUVycm9yLCB3aGVuIHRyeWluZyB0byBjcmVhdGUKKyAgYSBtdWx0aXByb2Nlc3NpbmcgQ2xpZW50IG9yIExpc3RlbmVyIHdpdGggYW4gQUZfUElQRSB0eXBlIGFkZHJlc3MgdW5kZXIKKyAgbm9uLVdpbmRvd3MgcGxhdGZvcm1zLiAgUGF0Y2ggYnkgUG9wYSBDbGF1ZGl1LgorCistIElzc3VlICMxNDQ5MzogVXNlIGd2ZnMtb3BlbiBvciB4ZGctb3BlbiBpbiB3ZWJicm93c2VyLgorCitCdWlsZAorLS0tLS0KKworLSAibWFrZSB0b3VjaCIgd2lsbCBub3cgdG91Y2ggZ2VuZXJhdGVkIGZpbGVzIHRoYXQgYXJlIGNoZWNrZWQgaW50byBNZXJjdXJpYWwsCisgIGFmdGVyIGEgImhnIHVwZGF0ZSIgd2hpY2ggZmFpbGVkIHRvIGJyaW5nIHRoZSB0aW1lc3RhbXBzIGludG8gdGhlIHJpZ2h0IG9yZGVyLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTQwMjY6IEluIHRlc3RfY21kX2xpbmVfc2NyaXB0LCBjaGVjayB0aGF0IHN5cy5hcmd2IGlzIHBvcHVsYXRlZAorICBjb3JyZWN0bHkgZm9yIHRoZSB2YXJpb3VzIGludm9jYXRpb24gYXBwcm9hY2hlcyAoUGF0Y2ggYnkgSmFzb24gWWVvKQorCistIElzc3VlICMxNDAzMjogRml4IGluY29ycmVjdCB2YXJpYWJsZSBuYW1lIGluIHRlc3RfY21kX2xpbmVfc2NyaXB0IGRlYnVnZ2luZworICBtZXNzYWdlIChQYXRjaCBieSBKYXNvbiBZZW8pCisKKy0gSXNzdWUgIzE0NTg5OiBVcGRhdGUgY2VydGlmaWNhdGUgY2hhaW4gZm9yIHNoYTI1Ni50YnMtaW50ZXJuZXQuY29tLCBmaXhpbmcKKyAgYSB0ZXN0IGZhaWx1cmUgaW4gdGVzdF9zc2wuCisKKy0gSXNzdWUgIzE0MzU1OiBSZWdydGVzdCBub3cgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIHVuaXR0ZXN0IHRlc3QgbG9hZGluZywgYW5kCisgIHdpbGwgdXNlIGl0IGlmIGEgdGVzdCBmaWxlIGNvbnRhaW5zIG5vIGB0ZXN0X21haW5gIG1ldGhvZC4KKworVG9vbHMgLyBEZW1vcworLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMzNTYxOiBUaGUgV2luZG93cyBpbnN0YWxsZXIgbm93IGhhcyBhbiBvcHRpb24sIG9mZiBieSBkZWZhdWx0LCBmb3IKKyAgcGxhY2luZyB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbiBpbnRvIHRoZSBzeXN0ZW0gIlBhdGgiIGVudmlyb25tZW50IHZhcmlhYmxlLgorCistIElzc3VlICMxMzE2NTogc3RyaW5nYmVuY2ggaXMgbm93IGF2YWlsYWJsZSBpbiB0aGUgVG9vbHMvc3RyaW5nYmVuY2ggZm9sZGVyLgorICBJdCB1c2VkIHRvIGxpdmUgaW4gaXRzIG93biBTVk4gcHJvamVjdC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMCBBbHBoYSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworKlJlbGVhc2UgZGF0ZTogMDEtQXByLTIwMTIqCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNjgzMzY4OiBvYmplY3QuX19uZXdfXyBhbmQgb2JqZWN0Ll9faW5pdF9fIHJhaXNlIGEgVHlwZUVycm9yIGlmIHRoZXkKKyAgYXJlIHBhc3NlZCBhcmd1bWVudHMgYW5kIHRoZWlyIGNvbXBsZW1lbnRhcnkgbWV0aG9kIGlzIG5vdCBvdmVycmlkZGVuLgorCistIElzc3VlICMxNDM3ODogRml4IGNvbXBpbGluZyBhc3QuSW1wb3J0RnJvbSBub2RlcyB3aXRoIGEgIl9fZnV0dXJlX18iIHN0cmluZyBhcworICB0aGUgbW9kdWxlIG5hbWUgdGhhdCB3YXMgbm90IGludGVybmVkLgorCistIElzc3VlICMxNDMzMTogVXNlIHNpZ25pZmljYW50bHkgbGVzcyBzdGFjayBzcGFjZSB3aGVuIGltcG9ydGluZyBtb2R1bGVzIGJ5CisgIGFsbG9jYXRpbmcgcGF0aCBidWZmZXJzIG9uIHRoZSBoZWFwIGluc3RlYWQgb2YgdGhlIHN0YWNrLgorCistIElzc3VlICMxNDMzNDogUHJldmVudCBpbiBhIHNlZ2ZhdWx0IGluIHR5cGUuX19nZXRhdHRyaWJ1dGVfXyB3aGVuIGl0IHdhcyBub3QKKyAgcGFzc2VkIHN0cmluZ3MuCisKKy0gSXNzdWUgIzE0Njk2Mjk6IEFsbG93IGN5Y2xlcyB0aHJvdWdoIGFuIG9iamVjdCdzIF9fZGljdF9fIHNsb3QgdG8gYmUKKyAgY29sbGVjdGVkLiAoRm9yIGV4YW1wbGUgaWYgYGB4Ll9fZGljdF9fIGlzIHhgYCkuCisKKy0gSXNzdWUgIzE0MjA1OiBkaWN0IGxvb2t1cCByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlIGRpY3QgaXMgbW9kaWZpZWQKKyAgZHVyaW5nIGEgbG9va3VwLgorCistIElzc3VlICMxNDIyMDogV2hlbiBhIGdlbmVyYXRvciBpcyBkZWxlZ2F0aW5nIHRvIGFub3RoZXIgaXRlcmF0b3Igd2l0aCB0aGUKKyAgeWllbGQgZnJvbSBzeW50YXgsIGl0IG5lZWRzIHRvIGhhdmUgaXRzIGBgZ2lfcnVubmluZ2BgIGZsYWcgc2V0IHRvIFRydWUuCisKKy0gSXNzdWUgIzE0NDM1OiBSZW1vdmUgZGVkaWNhdGVkIGJsb2NrIGFsbG9jYXRvciBmcm9tIGZsb2F0b2JqZWN0LmMgYW5kIHJlbHkKKyAgb24gdGhlIFB5T2JqZWN0X01hbGxvYygpIGFwaSBsaWtlIGFsbCBvdGhlciBvYmplY3RzLgorCistIElzc3VlICMxNDQ3MTogRml4IGEgcG9zc2libGUgYnVmZmVyIG92ZXJydW4gaW4gdGhlIHdpbnJlZyBtb2R1bGUuCisKKy0gSXNzdWUgIzE0Mjg4OiBBbGxvdyB0aGUgc2VyaWFsaXphdGlvbiBvZiBidWlsdGluIGl0ZXJhdG9ycworCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0MzAwOiBVbmRlciBXaW5kb3dzLCBzb2NrZXRzIGNyZWF0ZWQgdXNpbmcgc29ja2V0LmR1cCgpIG5vdyBhbGxvdworICBvdmVybGFwcGVkIEkvTy4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTM4NzI6IHNvY2tldC5kZXRhY2goKSBub3cgbWFya3MgdGhlIHNvY2tldCBjbG9zZWQgKGFzIG1pcnJvcmVkCisgIGluIHRoZSBzb2NrZXQgcmVwcigpKS4gIFBhdGNoIGJ5IE1hdHQgSm9pbmVyLgorCistIElzc3VlICMxNDQwNjogRml4IGEgcmFjZSBjb25kaXRpb24gd2hlbiB1c2luZyBgYGNvbmN1cnJlbnQuZnV0dXJlcy53YWl0KAorICByZXR1cm5fd2hlbj1BTExfQ09NUExFVEVEKWBgLiAgUGF0Y2ggYnkgTWF0dCBKb2luZXIuCisKKy0gSXNzdWUgIzUxMzY6IGRlcHJlY2F0ZSBvbGQsIHVudXNlZCBmdW5jdGlvbnMgZnJvbSB0a2ludGVyLgorCistIElzc3VlICMxNDQwOTogSURMRSBub3cgcHJvcGVybHkgZXhlY3V0ZXMgY29tbWFuZHMgaW4gdGhlIFNoZWxsIHdpbmRvdworICB3aGVuIGl0IGNhbm5vdCByZWFkIHRoZSBub3JtYWwgY29uZmlnIGZpbGVzIG9uIHN0YXJ0dXAgYW5kCisgIGhhcyB0byB1c2UgdGhlIGJ1aWx0LWluIGRlZmF1bHQga2V5IGJpbmRpbmdzLgorICBUaGVyZSB3YXMgcHJldmlvdXNseSBhIGJ1ZyBpbiBvbmUgb2YgdGhlIGRlZmF1bHRzLgorCistIElzc3VlICMxNDQxNjogc3lzbG9nIG5vdyBkZWZpbmVzIHRoZSBMT0dfT0RFTEFZIGFuZCBMT0dfQVVUSFBSSVYgY29uc3RhbnRzCisgIGlmIHRoZXkgYXJlIGRlZmluZWQgaW4gPHN5c2xvZy5oPi4KKworLSBJRExFIGNhbiBiZSBsYXVuY2hlZCBhcyBweXRob24gLW0gaWRsZWxpYgorCistIElzc3VlICMxNDI5NTogQWRkIHVuaXR0ZXN0Lm1vY2sKKworLSBJc3N1ZSAjNzY1MjogQWRkIC0td2l0aC1zeXN0ZW0tbGlibXBkZWMgb3B0aW9uIHRvIGNvbmZpZ3VyZSBmb3IgbGlua2luZworICB0aGUgX2RlY2ltYWwgbW9kdWxlIGFnYWluc3QgYW4gaW5zdGFsbGVkIGxpYm1wZGVjLgorCistIElzc3VlICMxNDM4MDogTUlNRVRleHQgbm93IGRlZmF1bHRzIHRvIHV0Zi04IHdoZW4gcGFzc2VkIG5vbi1BU0NJSSB1bmljb2RlCisgIHdpdGggbm8gY2hhcnNldCBzcGVjaWZpZWQuCisKKy0gSXNzdWUgIzEwMzQwOiBhc3luY29yZSAtIHByb3Blcmx5IGhhbmRsZSBFSU5WQUwgaW4gZGlzcGF0Y2hlciBjb25zdHJ1Y3RvciBvbgorICBPU1g7IGF2b2lkIHRvIGNhbGwgaGFuZGxlX2Nvbm5lY3QgaW4gY2FzZSBvZiBhIGRpc2Nvbm5lY3RlZCBzb2NrZXQgd2hpY2gKKyAgd2FzIG5vdCBtZWFudCB0byBjb25uZWN0LgorCistIElzc3VlICMxNDIwNDogVGhlIHNzbCBtb2R1bGUgbm93IGhhcyBzdXBwb3J0IGZvciB0aGUgTmV4dCBQcm90b2NvbAorICBOZWdvdGlhdGlvbiBleHRlbnNpb24sIGlmIGF2YWlsYWJsZSBpbiB0aGUgdW5kZXJseWluZyBPcGVuU1NMIGxpYnJhcnkuCisgIFBhdGNoIGJ5IENvbGluIE1hcmMuCisKKy0gSXNzdWUgIzMwMzU6IFVudXNlZCBmdW5jdGlvbnMgZnJvbSB0a2ludGVyIGFyZSBtYXJrZWQgYXMgcGVuZGluZyBkZXByZWNhdGVkLgorCistIElzc3VlICMxMjc1NzogRml4IHRoZSBza2lwcGluZyBvZiBkb2N0ZXN0cyB3aGVuIHB5dGhvbiBpcyBydW4gd2l0aCAtT08gc28KKyAgdGhhdCBpdCB3b3JrcyBpbiB1bml0dGVzdCdzIHZlcmJvc2UgbW9kZSBhcyB3ZWxsIGFzIG5vbi12ZXJib3NlIG1vZGUuCisKKy0gSXNzdWUgIzc2NTI6IEludGVncmF0ZSB0aGUgZGVjaW1hbCBmbG9hdGluZyBwb2ludCBsaWJtcGRlYyBsaWJyYXJ5IHRvIHNwZWVkCisgIHVwIHRoZSBkZWNpbWFsIG1vZHVsZS4gUGVyZm9ybWFuY2UgZ2FpbnMgb2YgdGhlIG5ldyBDIGltcGxlbWVudGF0aW9uIGFyZQorICBiZXR3ZWVuIDEweCBhbmQgMTAweCwgZGVwZW5kaW5nIG9uIHRoZSBhcHBsaWNhdGlvbi4KKworLSBJc3N1ZSAjMzU3MzogSURMRSBoYW5ncyB3aGVuIHBhc3NpbmcgaW52YWxpZCBjb21tYW5kIGxpbmUgYXJncworICAoZGlyZWN0b3J5KGllcykgaW5zdGVhZCBvZiBmaWxlKHMpKSAoUGF0Y2ggYnkgR3VpbGhlcm1lIFBvbG8pCisKKy0gSXNzdWUgIzE0MjY5OiBTTVRQRCBub3cgY29uZm9ybXMgdG8gdGhlIFJGQyBhbmQgcmVxdWlyZXMgYSBIRUxPIGNvbW1hbmQKKyAgYmVmb3JlIE1BSUwsIFJDUFQsIG9yIERBVEEuCisKKy0gSXNzdWUgIzEzNjk0OiBhc3luY2hyb25vdXMgY29ubmVjdCBpbiBhc3luY29yZS5kaXNwYXRjaGVyIGRvZXMgbm90IHNldCBhZGRyCisgIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMTQzNDQ6IGZpeGVkIHRoZSByZXByIG9mIGVtYWlsLnBvbGljeSBvYmplY3RzLgorCistIElzc3VlICMxMTY4NjogQWRkZWQgbWlzc2luZyBlbnRyaWVzIHRvIGVtYWlsIHBhY2thZ2UgX19hbGxfXyBsaXN0cworICAobW9zdGx5IHRoZSBuZXcgQnl0ZXMgY2xhc3NlcykuCisKKy0gSXNzdWUgIzE0MzM1OiBtdWx0aXByb2Nlc3NpbmcncyBjdXN0b20gUGlja2xlciBzdWJjbGFzcyBub3cgaW5oZXJpdHMgZnJvbQorICB0aGUgQy1hY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbi4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTA0ODQ6IEZpeCB0aGUgQ0dJSFRUUFNlcnZlcidzIFBBVEhfSU5GTyBoYW5kbGluZyBwcm9ibGVtLgorCistIElzc3VlICMxMTE5OTogRml4IHRoZSB3aXRoIHVybGxpYiB3aGljaCBoYW5ncyBvbiBwYXJ0aWN1bGFyIGZ0cCB1cmxzLgorCistIEltcHJvdmUgdGhlIG1lbW9yeSB1dGlsaXphdGlvbiBhbmQgc3BlZWQgb2YgZnVuY3Rvb2xzLmxydV9jYWNoZS4KKworLSBJc3N1ZSAjMTQyMjI6IFVzZSB0aGUgbmV3IHRpbWUuc3RlYWR5KCkgZnVuY3Rpb24gaW5zdGVhZCBvZiB0aW1lLnRpbWUoKSBmb3IKKyAgdGltZW91dCBpbiBxdWV1ZSBhbmQgdGhyZWFkaW5nIG1vZHVsZXMgdG8gbm90IGJlIGFmZmVjdGVkIG9mIHN5c3RlbSB0aW1lCisgIHVwZGF0ZS4KKworLSBJc3N1ZSAjMTMyNDg6IFJlbW92ZSBsaWIydG8zLnB5dHJlZS5CYXNlLmdldF9wcmVmaXgvc2V0X3ByZWZpeC4KKworLSBJc3N1ZSAjMTQyMzQ6IENWRS0yMDEyLTA4NzY6IFJhbmRvbWl6ZSBoYXNoZXMgb2YgeG1sIGF0dHJpYnV0ZXMgaW4gdGhlIGhhc2gKKyAgdGFibGUgaW50ZXJuYWwgdG8gdGhlIHB5ZXhwYXQgbW9kdWxlJ3MgY29weSBvZiB0aGUgZXhwYXQgbGlicmFyeSB0byBhdm9pZCBhCisgIGRlbmlhbCBvZiBzZXJ2aWNlIGR1ZSB0byBoYXNoIGNvbGxpc2lvbnMuICBQYXRjaCBieSBEYXZpZCBNYWxjb2xtIHdpdGggc29tZQorICBtb2RpZmljYXRpb25zIGJ5IHRoZSBleHBhdCBwcm9qZWN0LgorCistIElzc3VlICMxNDIwMDogSWRsZSBzaGVsbCBjcmFzaCBvbiBwcmludGluZyBub24tQk1QIHVuaWNvZGUgY2hhcmFjdGVyLgorCistIElzc3VlICMxMjgxODogZm9ybWF0IGFkZHJlc3Mgbm8gbG9uZ2VyIG5lZWRsZXNzbHkgXCBlc2NhcGVzICgpcyBpbiBuYW1lcyB3aGVuCisgIHRoZSBuYW1lIGVuZHMgdXAgYmVpbmcgcXVvdGVkLgorCistIElzc3VlICMxNDA2MjogQnl0ZXNHZW5lcmF0b3Igbm93IGNvcnJlY3RseSBmb2xkcyBIZWFkZXIgb2JqZWN0cywKKyAgaW5jbHVkaW5nIHVzaW5nIGxpbmVzZXAgd2hlbiBmb2xkaW5nLgorCistIElzc3VlICMxMzgzOTogV2hlbiBpbnZva2VkIG9uIHRoZSBjb21tYW5kLWxpbmUsIHRoZSBwc3RhdHMgbW9kdWxlIG5vdworICBhY2NlcHRzIHNldmVyYWwgZmlsZW5hbWVzIG9mIHByb2ZpbGUgc3RhdCBmaWxlcyBhbmQgbWVyZ2VzIHRoZW0gYWxsLgorICBQYXRjaCBieSBNYXR0IEpvaW5lci4KKworLSBJc3N1ZSAjMTQyOTE6IEVtYWlsIG5vdyBkZWZhdWx0cyB0byB1dGYtOCBmb3Igbm9uLUFTQ0lJIHVuaWNvZGUgaGVhZGVycworICBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gZXJyb3IuICBUaGlzIGZpeGVzIGEgcmVncmVzc2lvbiByZWxhdGl2ZSB0byAyLjcuCisKKy0gSXNzdWUgIzk4OTcxMjogU3VwcG9ydCB1c2luZyBUayB3aXRob3V0IGEgbWFpbmxvb3AuCisKKy0gSXNzdWUgIzUyMTk6IFByZXZlbnQgZXZlbnQgaGFuZGxlciBjYXNjYWRlIGluIElETEUuCisKKy0gSXNzdWUgIzM4MzU6IFJlZnVzZSB0byB1c2UgdW50aHJlYWRlZCBUY2wgaW4gdGhyZWFkZWQgUHl0aG9uLgorCistIElzc3VlICMyODQzOiBBZGQgbmV3IFRrIEFQSSB0byBUa2ludGVyLgorCistIElzc3VlICMxNDE4NDogSW5jcmVhc2UgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3Igc2Vjb25kYXJ5IHRocmVhZHMgb24KKyAgTWFjIE9TIFggdG8gYXZvaWQgaW50ZXJwcmV0ZXIgY3Jhc2hlcyB3aGVuIHVzaW5nIHRocmVhZHMgb24gMTAuNy4KKworLSBJc3N1ZSAjMTQxODA6IGRhdGV0aW1lLmRhdGUuZnJvbXRpbWVzdGFtcCgpLAorICBkYXRldGltZS5kYXRldGltZS5mcm9tdGltZXN0YW1wKCkgYW5kIGRhdGV0aW1lLmRhdGV0aW1lLnV0Y2Zyb210aW1lc3RhbXAoKQorICBub3cgcmFpc2UgYW4gT1NFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3IgaWYgbG9jYWx0aW1lKCkgb3IgZ210aW1lKCkgZmFpbGVkLgorCistIElzc3VlICMxNDE4MDogdGltZS5jdGltZSgpLCBnbXRpbWUoKSwgdGltZS5sb2NhbHRpbWUoKSwKKyAgZGF0ZXRpbWUuZGF0ZS5mcm9tdGltZXN0YW1wKCksIGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQKKyAgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciwgaW5zdGVhZCBvZgorICBhIFZhbHVlRXJyb3IsIGlmIHRoZSB0aW1lc3RhbXAgZG9lcyBub3QgZml0IGluIHRpbWVfdC4KKworLSBJc3N1ZSAjMTQxODA6IGRhdGV0aW1lLmRhdGV0aW1lLmZyb210aW1lc3RhbXAoKSBhbmQKKyAgZGF0ZXRpbWUuZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCgpIG5vdyByb3VuZCBtaWNyb3NlY29uZHMgdG93YXJkcyB6ZXJvCisgIGluc3RlYWQgb2Ygcm91bmRpbmcgdG8gbmVhcmVzdCB3aXRoIHRpZXMgZ29pbmcgYXdheSBmcm9tIHplcm8uCisKKy0gSXNzdWUgIzEwNTQzOiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgd2l0aCBKeXRob24gYnl0ZWNvZGUgZmlsZXMuCisKKy0gSXNzdWUgIzExNzg4NjM6IFNlcGFyYXRlIGluaXRpYWxpc2F0aW9uIGZyb20gc2V0dGluZyB3aGVuIGluaXRpYWxpemluZworICBUa2ludGVyLlZhcmlhYmxlczsgaGFybW9uaXplIGV4Y2VwdGlvbnMgdG8gVmFsdWVFcnJvcjsgb25seSBkZWxldGUgdmFyaWFibGVzCisgIHRoYXQgaGF2ZSBub3QgYmVlbiBkZWxldGVkOyBhc3NlcnQgdGhhdCB2YXJpYWJsZSBuYW1lcyBhcmUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTQxMDQ6IEltcGxlbWVudCB0aW1lLm1vbm90b25pYygpIG9uIE1hYyBPUyBYLCBwYXRjaCB3cml0dGVuIGJ5CisgIE5pY2hvbGFzIFJpbGV5LgorCistIElzc3VlICMxMzM5NDogdGhlIGFpZmMgbW9kdWxlIG5vdyB1c2VzIHdhcm5pbmdzLndhcm4oKSB0byBzaWduYWwgd2FybmluZ3MuCisKKy0gSXNzdWUgIzE0MjUyOiBGaXggc3VicHJvY2Vzcy5Qb3Blbi50ZXJtaW5hdGUoKSB0byBub3QgcmFpc2UgYW4gZXJyb3IgdW5kZXIKKyAgV2luZG93cyB3aGVuIHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBhbHJlYWR5IGV4aXRlZC4KKworLSBJc3N1ZSAjMTQyMjM6IGN1cnNlcy5hZGRjaCgpIGlzIG5vIG1vcmUgbGltaXRlZCB0byB0aGUgcmFuZ2UgMC0yNTUgd2hlbiB0aGUKKyAgUHl0aG9uIGN1cnNlcyBpcyBub3QgbGlua2VkIHRvIGxpYm5jdXJzZXN3LiBJdCB3YXMgYSByZWdyZXNzaW9uIGludHJvZHVjZWQKKyAgaW4gUHl0aG9uIDMuM2ExLgorCistIElzc3VlICMxNDE2ODogQ2hlY2sgZm9yIHByZXNlbmNlIG9mIEVsZW1lbnQuX2F0dHJzIGluIG1pbmlkb20gYmVmb3JlCisgIGFjY2Vzc2luZyBpdC4KKworLSBJc3N1ZSAjMTIzMjg6IEZpeCBtdWx0aXByb2Nlc3NpbmcncyB1c2Ugb2Ygb3ZlcmxhcHBlZCBJL08gb24gV2luZG93cy4KKyAgQWxzbywgYWRkIGEgbXVsdGlwcm9jZXNzaW5nLmNvbm5lY3Rpb24ud2FpdChybGlzdCwgdGltZW91dD1Ob25lKSBmdW5jdGlvbgorICBmb3IgcG9sbGluZyBtdWx0aXBsZSBvYmplY3RzIGF0IG9uY2UuICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzE0MDA3OiBBY2NlcHQgaW5jb21wbGV0ZSBUcmVlQnVpbGRlciBvYmplY3RzIChtaXNzaW5nIHN0YXJ0LCBlbmQsCisgIGRhdGEgb3IgY2xvc2UgbWV0aG9kKSBmb3IgdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBhcyB3ZWxsLgorICBEcm9wIHRoZSBuby1vcCBUcmVlQnVpbGRlcigpLnhtbCgpIG1ldGhvZCBmcm9tIHRoZSBDIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNDIxMDogcGRiIG5vdyBoYXMgdGFiLWNvbXBsZXRpb24gbm90IG9ubHkgZm9yIGNvbW1hbmQgbmFtZXMsIGJ1dAorICBhbHNvIGZvciB0aGVpciBhcmd1bWVudHMsIHdoZXJldmVyIHBvc3NpYmxlLgorCistIElzc3VlICMxNDMxMDogU29ja2V0cyBjYW4gbm93IGJlIHdpdGggb3RoZXIgcHJvY2Vzc2VzIG9uIFdpbmRvd3MgdXNpbmcKKyAgdGhlIGFwaSBzb2NrZXQuc29ja2V0LnNoYXJlKCkgYW5kIHNvY2tldC5mcm9tc2hhcmUoKS4KKworLSBJc3N1ZSAjMTA1NzY6IFRoZSBnYyBtb2R1bGUgbm93IGhhcyBhICdjYWxsYmFja3MnIG1lbWJlciB0aGF0IHdpbGwgZ2V0CisgIGNhbGxlZCB3aGVuIGdhcmJhZ2UgY29sbGVjdGlvbiB0YWtlcyBwbGFjZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE0NTU3OiBGaXggZXh0ZW5zaW9ucyBidWlsZCBvbiBIUC1VWC4gUGF0Y2ggYnkgQWRpIFJvaWJhbi4KKworLSBJc3N1ZSAjMTQzODc6IERvIG5vdCBpbmNsdWRlIGFjY3UuaCBmcm9tIFB5dGhvbi5oLgorCistIElzc3VlICMxNDM1OTogT25seSB1c2UgT19DTE9FWEVDIGluIF9wb3NpeG1vZHVsZS5jIGlmIGl0IGlzIGRlZmluZWQuCisgIEJhc2VkIG9uIHBhdGNoIGZyb20gSGVydsOpIENvYXRhbmhheS4KKworLSBJc3N1ZSAjMTQzMjE6IERvIG5vdCBydW4gcGdlbiBkdXJpbmcgdGhlIGJ1aWxkIGlmIGZpbGVzIGFyZSB1cCB0byBkYXRlLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE0MDM0OiBhZGRlZCB0aGUgYXJncGFyc2UgdHV0b3JpYWwuCisKKy0gSXNzdWUgIzE0MzI0OiBGaXggY29uZmlndXJlIHRlc3RzIGZvciBjcm9zcyBidWlsZHMuCisKKy0gSXNzdWUgIzE0MzI3OiBDYWxsIEFDX0NBTk9OSUNBTF9IT1NUIGluIGNvbmZpZ3VyZS5hYyBhbmQgY2hlY2sgaW4KKyAgY29uZmlnLntndWVzcyxzdWJ9LiBEb24ndCB1c2UgdW5hbWUgY2FsbHMgZm9yIGNyb3NzIGJ1aWxkcy4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzkwNDE6IEFuIGlzc3VlIGluIGN0eXBlcy5jX2xvbmdkb3VibGUsIGN0eXBlcy5jX2RvdWJsZSwgYW5kCisgIGN0eXBlcy5jX2Zsb2F0IHRoYXQgY2F1c2VkIGFuIGluY29ycmVjdCBleGNlcHRpb24gdG8gYmUgcmV0dXJuZWQgaW4gdGhlCisgIGNhc2Ugb2Ygb3ZlcmZsb3cgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzE0MjEyOiBUaGUgcmUgbW9kdWxlIGRpZG4ndCByZXRhaW4gYSByZWZlcmVuY2UgdG8gYnVmZmVycyBpdCB3YXMKKyAgc2Nhbm5pbmcsIHJlc3VsdGluZyBpbiBzZWdmYXVsdHMuCisKKy0gSXNzdWUgIzE0MjU5OiBUaGUgZmluZGl0ZXIoKSBtZXRob2Qgb2YgcmUgb2JqZWN0cyBkaWQgbm90IHRha2UgYW55CisgIGtleXdvcmQgYXJndW1lbnRzLCBjb250cmFyeSB0byB0aGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTAxNDI6IFN1cHBvcnQgZm9yIFNFRUtfSE9MRS9TRUVLX0RBVEEgKGZvciBleGFtcGxlLCB1bmRlciBaRlMpLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTQ0NDI6IEFkZCBtaXNzaW5nIGVycm5vIGltcG9ydCBpbiB0ZXN0X3NtdHBsaWIuCisKKy0gSXNzdWUgIzgzMTU6IChwYXJ0aWFsIGZpeCkgcHl0aG9uIC1tIHVuaXR0ZXN0IHRlc3QudGVzdF9lbWFpbCBub3cgd29ya3MuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjAgQWxwaGEgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKypSZWxlYXNlIGRhdGU6IDA1LU1hci0yMDEyKgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQxNzI6IEZpeCByZWZlcmVuY2UgbGVhayB3aGVuIG1hcnNoYWxsaW5nIGEgYnVmZmVyLWxpa2Ugb2JqZWN0CisgIChvdGhlciB0aGFuIGEgYnl0ZXMgb2JqZWN0KS4KKworLSBJc3N1ZSAjMTM1MjE6IGRpY3Quc2V0ZGVmYXVsdCgpIG5vdyBkb2VzIG9ubHkgb25lIGxvb2t1cCBmb3IgdGhlIGdpdmVuIGtleSwKKyAgbWFraW5nIGl0ICJhdG9taWMiIGZvciBtYW55IHB1cnBvc2VzLiAgUGF0Y2ggYnkgRmlsaXAgR3J1c3pjennFhHNraS4KKworLSBQRVAgNDA5LCBJc3N1ZSAjNjIxMDogInJhaXNlIFggZnJvbSBOb25lIiBpcyBub3cgc3VwcG9ydGVkIGFzIGEgbWVhbnMgb2YKKyAgc3VwcHJlc3NpbmcgdGhlIGRpc3BsYXkgb2YgdGhlIGNoYWluZWQgZXhjZXB0aW9uIGNvbnRleHQuIFRoZSBjaGFpbmVkCisgIGNvbnRleHQgc3RpbGwgcmVtYWlucyBhdmFpbGFibGUgYXMgdGhlIF9fY29udGV4dF9fIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMTAxODE6IE5ldyBtZW1vcnl2aWV3IGltcGxlbWVudGF0aW9uIGZpeGVzIG11bHRpcGxlIG93bmVyc2hpcAorICBhbmQgbGlmZXRpbWUgaXNzdWVzIG9mIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBQeV9idWZmZXIgbWVtYmVycyAoIzk5OTApCisgIGFzIHdlbGwgYXMgY3Jhc2hlcyAoIzgzMDUsICM3NDMzKS4gTWFueSBuZXcgZmVhdHVyZXMgaGF2ZSBiZWVuIGFkZGVkCisgIChTZWUgd2hhdHNuZXcvMy4zKSwgYW5kIHRoZSBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIHVwZGF0ZWQgZXh0ZW5zaXZlbHkuCisgIFRoZSBuZGFycmF5IHRlc3Qgb2JqZWN0IGZyb20gX3Rlc3RidWZmZXIuYyBpbXBsZW1lbnRzIGFsbCBhc3BlY3RzIG9mCisgIFBFUC0zMTE4LCBzbyBmdXJ0aGVyIGRldmVsb3BtZW50IHRvd2FyZHMgdGhlIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uCisgIG9mIHRoZSBQRVAgY2FuIHByb2NlZWQgaW4gYSB0ZXN0LWRyaXZlbiBtYW5uZXIuCisKKyAgVGhhbmtzIHRvIE5pY2sgQ29naGxhbiwgQW50b2luZSBQaXRyb3UgYW5kIFBhdWxpIFZpcnRhbmVuIGZvciByZXZpZXcKKyAgYW5kIG1hbnkgaWRlYXMuCisKKy0gSXNzdWUgIzEyODM0OiBGaXggaW5jb3JyZWN0IHJlc3VsdHMgb2YgbWVtb3J5dmlldy50b2J5dGVzKCkgZm9yCisgIG5vbi1jb250aWd1b3VzIGFycmF5cy4KKworLSBJc3N1ZSAjNTIzMTogSW50cm9kdWNlIG1lbW9yeXZpZXcuY2FzdCgpIG1ldGhvZCB0aGF0IGFsbG93cyBjaGFuZ2luZworICBmb3JtYXQgYW5kIHNoYXBlIHdpdGhvdXQgbWFraW5nIGEgY29weSBvZiB0aGUgdW5kZXJseWluZyBtZW1vcnkuCisKKy0gSXNzdWUgIzE0MDg0OiBGaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayB3aGVuIGltcG9ydGluZyBhIG1vZHVsZSB3aXRoIGEKKyAgYmFkIGVuY29kaW5nLgorCistIFVwZ3JhZGUgVW5pY29kZSBkYXRhIHRvIFVuaWNvZGUgNi4xLgorCistIElzc3VlICMxNDA0MDogUmVtb3ZlIHJhcmVseSB1c2VkIGZpbGUgbmFtZSBzdWZmaXhlcyBmb3IgQyBleHRlbnNpb25zCisgICh1bmRlciBQT1NJWCBtYWlubHkpLgorCistIElzc3VlICMxNDA1MTogQWxsb3cgYXJiaXRyYXJ5IGF0dHJpYnV0ZXMgdG8gYmUgc2V0IG9mIGNsYXNzbWV0aG9kIGFuZAorICBzdGF0aWNtZXRob2QuCisKKy0gSXNzdWUgIzEzNzAzOiBvQ0VSVC0yMDExLTAwMzogUmFuZG9taXplIGhhc2hlcyBvZiBzdHIgYW5kIGJ5dGVzIHRvIHByb3RlY3QKKyAgYWdhaW5zdCBkZW5pYWwgb2Ygc2VydmljZSBhdHRhY2tzIGR1ZSB0byBoYXNoIGNvbGxpc2lvbnMgd2l0aGluIHRoZSBkaWN0IGFuZAorICBzZXQgdHlwZXMuICBQYXRjaCBieSBEYXZpZCBNYWxjb2xtLCBiYXNlZCBvbiB3b3JrIGJ5IFZpY3RvciBTdGlubmVyLgorCistIElzc3VlICMxMzAyMDogRml4IGEgcmVmZXJlbmNlIGxlYWsgd2hlbiBhbGxvY2F0aW5nIGEgc3RydWN0c2VxdWVuY2Ugb2JqZWN0CisgIGZhaWxzLiAgUGF0Y2ggYnkgU3VtYW4gU2FoYS4KKworLSBJc3N1ZSAjMTM5MDg6IFJlYWR5IHR5cGVzIHJldHVybmVkIGZyb20gUHlUeXBlX0Zyb21TcGVjLgorCistIElzc3VlICMxMTIzNTogRml4IE92ZXJmbG93RXJyb3Igd2hlbiB0cnlpbmcgdG8gaW1wb3J0IGEgc291cmNlIGZpbGUgd2hvc2UKKyAgbW9kaWZpY2F0aW9uIHRpbWUgZG9lc24ndCBmaXQgaW4gYSAzMi1iaXQgdGltZXN0YW1wLgorCistIElzc3VlICMxMjcwNTogQSBTeW50YXhFcnJvciBleGNlcHRpb24gaXMgbm93IHJhaXNlZCB3aGVuIGF0dGVtcHRpbmcgdG8KKyAgY29tcGlsZSBtdWx0aXBsZSBzdGF0ZW1lbnRzIGFzIGEgc2luZ2xlIGludGVyYWN0aXZlIHN0YXRlbWVudC4KKworLSBGaXggdGhlIGJ1aWx0aW4gbW9kdWxlIGluaXRpYWxpemF0aW9uIGNvZGUgdG8gc3RvcmUgdGhlIGluaXQgZnVuY3Rpb24gZm9yCisgIGZ1dHVyZSByZWluaXRpYWxpemF0aW9uLgorCistIElzc3VlICM4MDUyOiBUaGUgcG9zaXggc3VicHJvY2VzcyBtb2R1bGUgd291bGQgdGFrZSBhIGxvbmcgdGltZSBjbG9zaW5nCisgIGFsbCBwb3NzaWJsZSBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSBjaGlsZCBwcm9jZXNzIHJhdGhlciB0aGFuIGp1c3Qgb3BlbgorICBmaWxlIGRlc2NyaXB0b3JzLiAgSXQgbm93IGNsb3NlcyBvbmx5IHRoZSBvcGVuIGZkcyBpZiBwb3NzaWJsZSBmb3IgdGhlCisgIGRlZmF1bHQgY2xvc2VfZmRzPVRydWUgYmVoYXZpb3IuCisKKy0gSXNzdWUgIzEzNjI5OiBSZW51bWJlciB0aGUgdG9rZW5zIGluIHRva2VuLmggc28gdGhhdCB0aGV5IG1hdGNoIHRoZSBpbmRleGVzCisgIGludG8gX1B5UGFyc2VyX1Rva2VuTmFtZXMuCisKKy0gSXNzdWUgIzEzNzUyOiBBZGQgYSBjYXNlZm9sZCgpIG1ldGhvZCB0byBzdHIuCisKKy0gSXNzdWUgIzEzNzYxOiBBZGQgYSAiZmx1c2giIGtleXdvcmQgYXJndW1lbnQgdG8gdGhlIHByaW50KCkgZnVuY3Rpb24sCisgIHVzZWQgdG8gZW5zdXJlIGZsdXNoaW5nIHRoZSBvdXRwdXQgc3RyZWFtLgorCistIElzc3VlICMxMzY0NTogcHljIGZpbGVzIG5vdyBjb250YWluIHRoZSBzaXplIG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZQorICBjb2RlLCB0byBhdm9pZCB0aW1lc3RhbXAgY29sbGlzaW9ucyAoZXNwZWNpYWxseSBvbiBmaWxlc3lzdGVtcyB3aXRoIGEgbG93CisgIHRpbWVzdGFtcCByZXNvbHV0aW9uKSB3aGVuIGNoZWNraW5nIGZvciBmcmVzaG5lc3Mgb2YgdGhlIGJ5dGVjb2RlLgorCistIFBFUCAzODAsIElzc3VlICMxMTY4MjogQWRkICJ5aWVsZCBmcm9tIDx4PiIgdG8gc3VwcG9ydCBlYXN5IGRlbGVnYXRpb24gdG8KKyAgc3ViZ2VuZXJhdG9ycyAoaW5pdGlhbCBwYXRjaCBieSBHcmVnIEV3aW5nLCBpbnRlZ3JhdGlvbiBpbnRvIDMuMyBieQorICBSZW5hdWQgQmxhbmNoLCBSeWFuIEtlbGx5LCBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrIGFuZCBOaWNrIENvZ2hsYW4pCisKKy0gSXNzdWUgIzEzNzQ4OiBSYXcgYnl0ZXMgbGl0ZXJhbHMgY2FuIG5vdyBiZSB3cml0dGVuIHdpdGggdGhlIGBgcmJgYCBwcmVmaXgKKyAgYXMgd2VsbCBhcyBgYGJyYGAuCisKKy0gSXNzdWUgIzEyNzM2OiBVc2UgZnVsbCB1bmljb2RlIGNhc2UgbWFwcGluZ3MgZm9yIHVwcGVyLCBsb3dlciwgYW5kIHRpdGxlIGNhc2UuCisKKy0gSXNzdWUgIzEyNzYwOiBBZGQgYSBjcmVhdGUgbW9kZSB0byBvcGVuKCkuIFBhdGNoIGJ5IERhdmlkIFRvd25zaGVuZC4KKworLSBJc3N1ZSAjMTM3Mzg6IFNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIG9mIGJ5dGVzLmxvd2VyKCkgYW5kIGJ5dGVzLnVwcGVyKCkuCisKKy0gSXNzdWUgIzEzNTc3OiBCdWlsdC1pbiBtZXRob2RzIGFuZCBmdW5jdGlvbnMgbm93IGhhdmUgYSBfX3F1YWxuYW1lX18uCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjNjY5NTogRnVsbCBnYXJiYWdlIGNvbGxlY3Rpb24gcnVucyBub3cgY2xlYXIgdGhlIGZyZWVsaXN0IG9mIHNldAorICBvYmplY3RzLiAgSW5pdGlhbCBwYXRjaCBieSBNYXR0aGlhcyBUcm9mZmFlcy4KKworLSBGaXggT1NFcnJvci5fX2luaXRfXyBhbmQgT1NFcnJvci5fX25ld19fIHNvIHRoYXQgZWFjaCBvZiB0aGVtIGNhbiBiZQorICBvdmVycmlkZW4gYW5kIHRha2UgYWRkaXRpb25hbCBhcmd1bWVudHMgKGZvbGxvd3VwIHRvIGlzc3VlICMxMjU1NSkuCisKKy0gRml4IHRoZSBmaXggZm9yIGlzc3VlICMxMjE0OTogaXQgd2FzIGluY29ycmVjdCwgYWx0aG91Z2ggaXQgaGFkIHRoZSBzaWRlCisgIGVmZmVjdCBvZiBhcHBlYXJpbmcgdG8gcmVzb2x2ZSB0aGUgaXNzdWUuICBUaGFua3MgdG8gTWFyayBTaGFubm9uIGZvcgorICBub3RpY2luZy4KKworLSBJc3N1ZSAjMTM1MDU6IFBpY2tsZSBieXRlcyBvYmplY3RzIGluIGEgd2F5IHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoCisgIFB5dGhvbiAyIHdoZW4gdXNpbmcgcHJvdG9jb2xzIDw9IDIuCisKKy0gSXNzdWUgIzExMTQ3OiBGaXggYW4gdW51c2VkIGFyZ3VtZW50IGluIF9QeV9BTk5PVEFURV9NRU1PUllfT1JERVIuICAoRml4CisgIGdpdmVuIGJ5IENhbXBiZWxsIEJhcnRvbikuCisKKy0gSXNzdWUgIzEzNTAzOiBVc2UgYSBtb3JlIGVmZmljaWVudCByZWR1Y3Rpb24gZm9ybWF0IGZvciBieXRlYXJyYXlzIHdpdGgKKyAgcGlja2xlIHByb3RvY29sID49IDMuICBUaGUgb2xkIHJlZHVjdGlvbiBmb3JtYXQgaXMga2VwdCB3aXRoIG9sZGVyIHByb3RvY29scworICBpbiBvcmRlciB0byBhbGxvdyB1bnBpY2tsaW5nIHVuZGVyIFB5dGhvbiAyLiAgUGF0Y2ggYnkgSXJtZW4gZGUgSm9uZy4KKworLSBJc3N1ZSAjNzExMTogUHl0aG9uIGNhbiBub3cgYmUgcnVuIHdpdGhvdXQgYSBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVycgorICBzdHJlYW0uICBJdCB3YXMgYWxyZWFkeSB0aGUgY2FzZSB3aXRoIFB5dGhvbiAyLiAgSG93ZXZlciwgdGhlIGNvcnJlc3BvbmRpbmcKKyAgc3lzIG1vZHVsZSBlbnRyaWVzIGFyZSBub3cgc2V0IHRvIE5vbmUgKGluc3RlYWQgb2YgYW4gdW51c2FibGUgZmlsZSBvYmplY3QpLgorCistIElzc3VlICMxMTg0OTogRW5zdXJlIHRoYXQgZnJlZSgpZCBtZW1vcnkgYXJlbmFzIGFyZSByZWFsbHkgcmVsZWFzZWQKKyAgb24gUE9TSVggc3lzdGVtcyBzdXBwb3J0aW5nIGFub255bW91cyBtZW1vcnkgbWFwcGluZ3MuICBQYXRjaCBieQorICBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzEzNDUyOiBQeVVuaWNvZGVfRW5jb2RlRGVjaW1hbCgpIGRvZXNuJ3Qgc3VwcG9ydCBlcnJvciBoYW5kbGVycworICBkaWZmZXJlbnQgdGhhbiAic3RyaWN0IiBhbnltb3JlLiBUaGUgY2FsbGVyIHdhcyB1bmFibGUgdG8gY29tcHV0ZSB0aGUKKyAgc2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcjogaXQgZGVwZW5kcyBvbiB0aGUgZXJyb3IgaGFuZGxlci4KKworLSBQRVAgMzE1NSAvIGlzc3VlICMxMzQ0ODogUXVhbGlmaWVkIG5hbWUgZm9yIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTM0MzY6IEZpeCBhIGJvZ3VzIGVycm9yIG1lc3NhZ2Ugd2hlbiBhbiBBU1Qgb2JqZWN0IHdhcyBwYXNzZWQKKyAgYW4gaW52YWxpZCBpbnRlZ2VyIHZhbHVlLgorCistIElzc3VlICMxMzQxMTogbWVtb3J5dmlldyBvYmplY3RzIGFyZSBub3cgaGFzaGFibGUgd2hlbiB0aGUgdW5kZXJseWluZworICBvYmplY3QgaXMgaGFzaGFibGUuCisKKy0gSXNzdWUgIzEzMzM4OiBIYW5kbGUgYWxsIGVudW1lcmF0aW9ucyBpbiBfUHlfQU5OT1RBVEVfTUVNT1JZX09SREVSCisgIHRvIGFsbG93IGNvbXBpbGluZyBleHRlbnNpb24gbW9kdWxlcyB3aXRoIC1Xc3dpdGNoLWVudW0gb24gZ2NjLgorICBJbml0aWFsIHBhdGNoIGJ5IEZsb3JpcyBCcnV5bm9vZ2hlLgorCistIElzc3VlICMxMDIyNzogQWRkIGFuIGFsbG9jYXRpb24gY2FjaGUgZm9yIGEgc2luZ2xlIHNsaWNlIG9iamVjdC4gIFBhdGNoIGJ5CisgIFN0ZWZhbiBCZWhuZWwuCisKKy0gSXNzdWUgIzEzMzkzOiBCdWZmZXJlZFJlYWRlci5yZWFkMSgpIG5vdyBhc2tzIHRoZSBmdWxsIHJlcXVlc3RlZCBzaXplIHRvCisgIHRoZSByYXcgc3RyZWFtIGluc3RlYWQgb2YgbGltaXRpbmcgaXRzZWxmIHRvIHRoZSBidWZmZXIgc2l6ZS4KKworLSBJc3N1ZSAjMTMzOTI6IFdyaXRpbmcgYSBweWMgZmlsZSBzaG91bGQgbm93IGJlIGF0b21pYyB1bmRlciBXaW5kb3dzIGFzIHdlbGwuCisKKy0gSXNzdWUgIzEzMzMzOiBUaGUgVVRGLTcgZGVjb2RlciBub3cgYWNjZXB0cyBsb25lIHN1cnJvZ2F0ZXMgKHRoZSBlbmNvZGVyCisgIGFscmVhZHkgYWNjZXB0cyB0aGVtKS4KKworLSBJc3N1ZSAjMTMzODk6IEZ1bGwgZ2FyYmFnZSBjb2xsZWN0aW9uIHBhc3NlcyBub3cgY2xlYXIgdGhlIGZyZWVsaXN0cyBmb3IKKyAgbGlzdCBhbmQgZGljdCBvYmplY3RzLiAgVGhleSBhbHJlYWR5IGNsZWFyZWQgb3RoZXIgZnJlZWxpc3RzIGluIHRoZQorICBpbnRlcnByZXRlci4KKworLSBJc3N1ZSAjMTMzMjc6IFJlbW92ZSB0aGUgbmVlZCBmb3IgYW4gZXhwbGljaXQgTm9uZSBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50CisgIHRvIG9zLnV0aW1lLCBvcy5sdXRpbWVzLCBvcy5mdXRpbWVzLCBvcy5mdXRpbWVucywgb3MuZnV0aW1lc2F0LCBpbgorICBvcmRlciB0byB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgdGltZS4gQWxzbyBhZGRlZCBrZXl3b3JkIGFyZ3VtZW50CisgIGhhbmRsaW5nIHRvIG9zLnV0aW1lbnNhdCBpbiBvcmRlciB0byByZW1vdmUgdGhlIG5lZWQgZm9yIGV4cGxpY2l0IE5vbmUuCisKKy0gSXNzdWUgIzEzMzUwOiBTaW1wbGlmeSBzb21lIEMgY29kZSBieSByZXBsYWNpbmcgbW9zdCB1c2FnZXMgb2YKKyAgUHlVbmljb2RlX0Zvcm1hdCBieSBQeVVuaWNvZGVfRnJvbUZvcm1hdC4KKworLSBJc3N1ZSAjMTMzNDI6IGlucHV0KCkgdXNlZCB0byBpZ25vcmUgc3lzLnN0ZGluJ3MgYW5kIHN5cy5zdGRvdXQncyB1bmljb2RlCisgIGVycm9yIGhhbmRsZXIgaW4gaW50ZXJhY3RpdmUgbW9kZSAod2hlbiBjYWxsaW5nIGludG8gUHlPU19SZWFkbGluZSgpKS4KKworLSBJc3N1ZSAjOTg5NjogQWRkIHN0YXJ0LCBzdG9wLCBhbmQgc3RlcCBhdHRyaWJ1dGVzIHRvIHJhbmdlIG9iamVjdHMuCisKKy0gSXNzdWUgIzEzMzQzOiBGaXggYSBTeXN0ZW1FcnJvciB3aGVuIGEgbGFtYmRhIGV4cHJlc3Npb24gdXNlcyBhIGdsb2JhbAorICB2YXJpYWJsZSBpbiB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBhIGtleXdvcmQtb25seSBhcmd1bWVudDogYGBsYW1iZGEgKiwKKyAgYXJnPUdMT0JBTF9OQU1FOiBOb25lYGAKKworLSBJc3N1ZSAjMTI3OTc6IEFkZGVkIGN1c3RvbSBvcGVuZXIgcGFyYW1ldGVyIHRvIGJ1aWx0aW4gb3BlbigpIGFuZAorICBGaWxlSU8ub3BlbigpLgorCistIElzc3VlICMxMDUxOTogQXZvaWQgdW5uZWNlc3NhcnkgcmVjdXJzaXZlIGZ1bmN0aW9uIGNhbGxzIGluCisgIHNldG9iamVjdC5jLgorCistIElzc3VlICMxMDM2MzogRGVhbGxvY2F0ZSBnbG9iYWwgbG9ja3MgaW4gUHlfRmluYWxpemUoKS4KKworLSBJc3N1ZSAjMTMwMTg6IEZpeCByZWZlcmVuY2UgbGVha3MgaW4gZXJyb3IgcGF0aHMgaW4gZGljdG9iamVjdC5jLgorICBQYXRjaCBieSBTdW1hbiBTYWhhLgorCistIElzc3VlICMxMzIwMTogRGVmaW5lICc9PScgYW5kICchPScgdG8gY29tcGFyZSByYW5nZSBvYmplY3RzIGJhc2VkIG9uCisgIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgdGhleSBkZWZpbmUgKGluc3RlYWQgb2YgY29tcGFyaW5nIGJhc2VkIG9uCisgIG9iamVjdCBpZGVudGl0eSkuCisKKy0gSXNzdWUgIzEyOTQyMzI6IEluIGEgZmV3IGNhc2VzIGludm9sdmluZyBtZXRhY2xhc3MgaW5oZXJpdGFuY2UsIHRoZQorICBpbnRlcnByZXRlciB3b3VsZCBzb21ldGltZXMgaW52b2tlIHRoZSB3cm9uZyBtZXRhY2xhc3Mgd2hlbiBidWlsZGluZyBhIG5ldworICBjbGFzcyBvYmplY3QuIFRoZXNlIGNhc2VzIG5vdyBiZWhhdmUgY29ycmVjdGx5LiBQYXRjaCBieSBEYW5pZWwgVXJiYW4uCisKKy0gSXNzdWUgIzEyNzUzOiBBZGQgc3VwcG9ydCBmb3IgVW5pY29kZSBuYW1lIGFsaWFzZXMgYW5kIG5hbWVkIHNlcXVlbmNlcy4KKyAgQm90aCBgYHVuaWNvZGVkYXRhLmxvb2t1cCgpYGAgYW5kICdcTnsuLi59JyBub3cgcmVzb2x2ZSBhbGlhc2VzLAorICBhbmQgYGB1bmljb2RlZGF0YS5sb29rdXAoKWBgIHJlc29sdmVzIG5hbWVkIHNlcXVlbmNlcyB0b28uCisKKy0gSXNzdWUgIzEyMTcwOiBUaGUgY291bnQoKSwgZmluZCgpLCByZmluZCgpLCBpbmRleCgpIGFuZCByaW5kZXgoKSBtZXRob2RzCisgIG9mIGJ5dGVzIGFuZCBieXRlYXJyYXkgb2JqZWN0cyBub3cgYWNjZXB0IGFuIGludGVnZXIgYmV0d2VlbiAwIGFuZCAyNTUKKyAgYXMgdGhlaXIgZmlyc3QgYXJndW1lbnQuICBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjMTI2MDQ6IFZUUkFDRSBtYWNybyBleHBhbmRlZCB0byBuby1vcCBpbiBfc3JlLmMgdG8gYXZvaWQgY29tcGlsZXIKKyAgd2FybmluZ3MuIFBhdGNoIGJ5IEpvc2ggVHJpcGxldHQgYW5kIFBldHJpIExlaHRpbmVuLgorCistIElzc3VlICMxMjI4MTogUmV3cml0ZSB0aGUgTUJDUyBjb2RlYyB0byBoYW5kbGUgY29ycmVjdGx5IHJlcGxhY2UgYW5kIGlnbm9yZQorICBlcnJvciBoYW5kbGVycyBvbiBhbGwgV2luZG93cyB2ZXJzaW9ucy4gVGhlIE1CQ1MgY29kZWMgaXMgbm93IHN1cHBvcnRpbmcgYWxsCisgIGVycm9yIGhhbmRsZXJzLCBpbnN0ZWFkIG9mIG9ubHkgcmVwbGFjZSB0byBlbmNvZGUgYW5kIGlnbm9yZSB0byBkZWNvZGUuCisKKy0gSXNzdWUgIzEzMTg4OiBXaGVuIGNhbGxlZCB3aXRob3V0IGFuIGV4cGxpY2l0IHRyYWNlYmFjayBhcmd1bWVudCwKKyAgZ2VuZXJhdG9yLnRocm93KCkgbm93IGdldHMgdGhlIHRyYWNlYmFjayBmcm9tIHRoZSBwYXNzZWQgZXhjZXB0aW9uJ3MKKyAgYGBfX3RyYWNlYmFja19fYGAgYXR0cmlidXRlLiAgUGF0Y2ggYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMTQ2OiBXcml0aW5nIGEgcHljIGZpbGUgaXMgbm93IGF0b21pYyB1bmRlciBQT1NJWC4KKworLSBJc3N1ZSAjNzgzMzogRXh0ZW5zaW9uIG1vZHVsZXMgYnVpbHQgdXNpbmcgZGlzdHV0aWxzIG9uIFdpbmRvd3Mgd2lsbCBubworICBsb25nZXIgaW5jbHVkZSBhICJtYW5pZmVzdCIgdG8gcHJldmVudCB0aGVtIGZhaWxpbmcgYXQgaW1wb3J0IHRpbWUgaW4gc29tZQorICBlbWJlZGRlZCBzaXR1YXRpb25zLgorCistIFBFUCAzMTUxIC8gaXNzdWUgIzEyNTU1OiByZXdvcmtpbmcgdGhlIE9TIGFuZCBJTyBleGNlcHRpb24gaGllcmFyY2h5LgorCistIElzc3VlICMxMzU2MDogQWRkIFB5VW5pY29kZV9EZWNvZGVMb2NhbGUoKSwgUHlVbmljb2RlX0RlY29kZUxvY2FsZUFuZFNpemUoKQorICBhbmQgUHlVbmljb2RlX0VuY29kZUxvY2FsZSgpIGZ1bmN0aW9ucyB0byB0aGUgQyBBUEkgdG8gZGVjb2RlL2VuY29kZSBmcm9tL3RvCisgIHRoZSBjdXJyZW50IGxvY2FsZSBlbmNvZGluZy4KKworLSBBZGQgaW50ZXJuYWwgQVBJIGZvciBzdGF0aWMgc3RyaW5ncyAoX1B5X2lkZW50aWZpZXIgZXQgYWwuKS4KKworLSBJc3N1ZSAjMTMwNjM6IHRoZSBXaW5kb3dzIGVycm9yIEVSUk9SX05PX0RBVEEgKG51bWJlcmVkIDIzMiBhbmQgZGVzY3JpYmVkCisgIGFzICJUaGUgcGlwZSBpcyBiZWluZyBjbG9zZWQiKSBpcyBub3cgbWFwcGVkIHRvIFBPU0lYIGVycm5vIEVQSVBFCisgIChwcmV2aW91c2x5IEVJTlZBTCkuCisKKy0gSXNzdWUgIzEyOTExOiBGaXggbWVtb3J5IGNvbnN1bXB0aW9uIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHJlcHIoKSBvZiBodWdlCisgIHR1cGxlcyBvciBsaXN0cy4KKworLSBQRVAgMzkzOiBmbGV4aWJsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24uIFRoYW5rcyB0byBUb3JzdGVuIEJlY2tlciBmb3IgdGhlCisgIGluaXRpYWwgaW1wbGVtZW50YXRpb24sIGFuZCBWaWN0b3IgU3Rpbm5lciBmb3IgdmFyaW91cyBidWcgZml4ZXMuCisKKy0gSXNzdWUgIzE0MDgxOiBUaGUgJ3NlcCcgYW5kICdtYXhzcGxpdCcgcGFyYW1ldGVyIHRvIHN0ci5zcGxpdCwgYnl0ZXMuc3BsaXQsCisgIGFuZCBieXRlYXJyYXkuc3BsaXQgbWF5IG5vdyBiZSBwYXNzZWQgYXMga2V5d29yZCBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzEzMDEyOiBUaGUgJ2tlZXBlbmRzJyBwYXJhbWV0ZXIgdG8gc3RyLnNwbGl0bGluZXMgbWF5IG5vdyBiZSBwYXNzZWQKKyAgYXMgYSBrZXl3b3JkIGFyZ3VtZW50OiAgIm15X3N0cmluZy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpIi4gIFRoZSBzYW1lCisgIGNoYW5nZSBhbHNvIGFwcGxpZXMgdG8gYnl0ZXMuc3BsaXRsaW5lcyBhbmQgYnl0ZWFycmF5LnNwbGl0bGluZXMuCisKKy0gSXNzdWUgIzc3MzI6IERvbid0IG9wZW4gYSBkaXJlY3RvcnkgYXMgYSBmaWxlIGFueW1vcmUgd2hpbGUgaW1wb3J0aW5nIGEKKyAgbW9kdWxlLiBJZ25vcmUgdGhlIGRpcmVjdG9yeSBpZiBpdHMgbmFtZSBtYXRjaGVzIHRoZSBtb2R1bGUgbmFtZSAoZS5nLgorICAiX19pbml0X18ucHkiKSBhbmQgcmFpc2UgYW4gSW1wb3J0RXJyb3IgaW5zdGVhZC4KKworLSBJc3N1ZSAjMTMwMjE6IE1pc3NpbmcgZGVjcmVmIG9uIGFuIGVycm9yIHBhdGguICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IKKyAgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworLSBJc3N1ZSAjMTI5NzM6IEZpeCBvdmVyZmxvdyBjaGVja3MgdGhhdCByZWxpZWQgb24gdW5kZWZpbmVkIGJlaGF2aW91ciBpbgorICBsaXN0X3JlcGVhdCAobGlzdG9iamVjdC5jKSBhbmQgaXNsaWNlX25leHQgKGl0ZXJ0b29sc21vZHVsZS5jKS4gIFRoZXNlIGJ1Z3MKKyAgY2F1c2VkIHRlc3QgZmFpbHVyZXMgd2l0aCByZWNlbnQgdmVyc2lvbnMgb2YgQ2xhbmcuCisKKy0gSXNzdWUgIzEyOTA0OiBvcy51dGltZSwgb3MuZnV0aW1lcywgb3MubHV0aW1lcywgYW5kIG9zLmZ1dGltZXNhdCBub3cgd3JpdGUKKyAgYXRpbWUgYW5kIG10aW1lIHdpdGggbmFub3NlY29uZCBwcmVjaXNpb24gb24gbW9kZXJuIFBPU0lYIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTI4MDI6IHRoZSBXaW5kb3dzIGVycm9yIEVSUk9SX0RJUkVDVE9SWSAobnVtYmVyZWQgMjY3KSBpcyBub3cKKyAgbWFwcGVkIHRvIFBPU0lYIGVycm5vIEVOT1RESVIgKHByZXZpb3VzbHkgRUlOVkFMKS4KKworLSBJc3N1ZSAjOTIwMDogVGhlIHN0ci5pcyogbWV0aG9kcyBub3cgd29yayB3aXRoIHN0cmluZ3MgdGhhdCBjb250YWluIG5vbi1CTVAKKyAgY2hhcmFjdGVycyBldmVuIGluIG5hcnJvdyBVbmljb2RlIGJ1aWxkcy4KKworLSBJc3N1ZSAjMTI3OTE6IEJyZWFrIHJlZmVyZW5jZSBjeWNsZXMgZWFybHkgd2hlbiBhIGdlbmVyYXRvciBleGl0cyB3aXRoCisgIGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTI3NzM6IE1ha2UgX19kb2NfXyBtdXRhYmxlIG9uIHVzZXItZGVmaW5lZCBjbGFzc2VzLgorCistIElzc3VlICMxMjc2NjogUmFpc2UgYSBWYWx1ZUVycm9yIHdoZW4gY3JlYXRpbmcgYSBjbGFzcyB3aXRoIGEgY2xhc3MgdmFyaWFibGUKKyAgdGhhdCBjb25mbGljdHMgd2l0aCBhIG5hbWUgaW4gX19zbG90c19fLgorCistIElzc3VlICMxMjI2NjogRml4IHN0ci5jYXBpdGFsaXplKCkgdG8gY29ycmVjdGx5IHVwcGVyY2FzZS9sb3dlcmNhc2UKKyAgdGl0bGVjYXNlZCBhbmQgY2FzZWQgbm9uLWxldHRlciBjaGFyYWN0ZXJzLgorCistIElzc3VlICMxMjczMjogSW4gbmFycm93IHVuaWNvZGUgYnVpbGRzLCBhbGxvdyBVbmljb2RlIGlkZW50aWZpZXJzIHdoaWNoIGZhbGwKKyAgb3V0c2lkZSB0aGUgQk1QLgorCistIElzc3VlICMxMjU3NTogVmFsaWRhdGUgdXNlci1nZW5lcmF0ZWQgQVNUIGJlZm9yZSBpdCBpcyBjb21waWxlZC4KKworLSBNYWtlIHR5cGUoTm9uZSksIHR5cGUoRWxsaXBzaXMpLCBhbmQgdHlwZShOb3RJbXBsZW1lbnRlZCkgY2FsbGFibGUuIFRoZXkKKyAgcmV0dXJuIHRoZSByZXNwZWN0aXZlIHNpbmdsZXRvbiBpbnN0YW5jZXMuCisKKy0gRm9yYmlkIHN1bW1pbmcgYnl0ZXMgd2l0aCBzdW0oKS4KKworLSBWZXJpZnkgdGhlIHR5cGVzIG9mIEFTVCBzdHJpbmdzIGFuZCBpZGVudGlmaWVycyBwcm92aWRlZCBieSB0aGUgdXNlciBiZWZvcmUKKyAgY29tcGlsaW5nIHRoZW0uCisKKy0gSXNzdWUgIzEyNjQ3OiBUaGUgTm9uZSBvYmplY3Qgbm93IGhhcyBhIF9fYm9vbF9fKCkgbWV0aG9kIHRoYXQgcmV0dXJucyBGYWxzZS4KKyAgRm9ybWVybHksIGJvb2woTm9uZSkgcmV0dXJuZWQgRmFsc2Ugb25seSBiZWNhdXNlIG9mIHNwZWNpYWwgY2FzZSBsb2dpYworICBpbiBQeU9iamVjdF9Jc1RydWUoKS4KKworLSBJc3N1ZSAjMTI1Nzk6IHN0ci5mb3JtYXRfbWFwKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaWYgdXNlZCBvbiBhCisgIGZvcm1hdCBzdHJpbmcgdGhhdCBjb250YWlucyBwb3NpdGlvbmFsIGZpZWxkcy4gSW5pdGlhbCBwYXRjaCBieQorICBKdWxpYW4gQmVybWFuLgorCistIElzc3VlICMxMDI3MTogQWxsb3cgd2FybmluZ3Muc2hvd3dhcm5pbmcoKSBiZSBhbnkgY2FsbGFibGUuCisKKy0gSXNzdWUgIzExNjI3OiBGaXggc2VnZmF1bHQgd2hlbiBfX25ld19fIG9uIGFuIGV4Y2VwdGlvbiByZXR1cm5zIGEKKyAgbm9uLWV4Y2VwdGlvbiBjbGFzcy4KKworLSBJc3N1ZSAjMTIxNDk6IFVwZGF0ZSB0aGUgbWV0aG9kIGNhY2hlIGFmdGVyIGEgdHlwZSdzIGRpY3Rpb25hcnkgZ2V0cworICBjbGVhcmVkIGJ5IHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4gIFRoaXMgZml4ZXMgYSBzZWdmYXVsdCB3aGVuIGFuIGluc3RhbmNlCisgIGFuZCBpdHMgdHlwZSBnZXQgY2F1Z2h0IGluIGEgcmVmZXJlbmNlIGN5Y2xlLCBhbmQgdGhlIGluc3RhbmNlJ3MKKyAgZGVhbGxvY2F0b3IgY2FsbHMgb25lIG9mIHRoZSBtZXRob2RzIG9uIHRoZSB0eXBlIChlLmcuIHdoZW4gc3ViY2xhc3NpbmcKKyAgSU9CYXNlKS4gIERpYWdub3NpcyBhbmQgcGF0Y2ggYnkgRGF2aWRlIFJpenpvLgorCistIElzc3VlICM5NjExLCAjOTAxNTogRmlsZUlPLnJlYWQoKSBjbGFtcHMgdGhlIGxlbmd0aCB0byBJTlRfTUFYIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzk2NDI6IFVuaWZvcm1pemUgdGhlIHRlc3RzIG9uIHRoZSBhdmFpbGFiaWxpdHkgb2YgdGhlIG1iY3MgY29kZWMsIGFkZAorICBhIG5ldyBIQVZFX01CQ1MgZGVmaW5lLgorCistIElzc3VlICM5NjQyOiBGaXggZmlsZXN5c3RlbSBlbmNvZGluZyBpbml0aWFsaXphdGlvbjogdXNlIHRoZSBBTlNJIGNvZGUgcGFnZQorICBvbiBXaW5kb3dzIGlmIHRoZSBtYmNzIGNvZGVjIGlzIG5vdCBhdmFpbGFibGUsIGFuZCBmYWlsIHdpdGggYSBmYXRhbCBlcnJvciBpZgorICB3ZSBjYW5ub3QgZ2V0IHRoZSBsb2NhbGUgZW5jb2RpbmcgKGlmIG5sX2xhbmdpbmZvKENPREVTRVQpIGlzIG5vdCBhdmFpbGFibGUpCisgIGluc3RlYWQgb2YgdXNpbmcgVVRGLTguCisKKy0gV2hlbiBhIGdlbmVyYXRvciB5aWVsZHMsIGRvIG5vdCByZXRhaW4gdGhlIGNhbGxlcidzIGV4Y2VwdGlvbiBzdGF0ZSBvbiB0aGUKKyAgZ2VuZXJhdG9yLgorCistIElzc3VlICMxMjQ3NTogUHJldmVudCBnZW5lcmF0b3JzIGZyb20gbGVha2luZyB0aGVpciBleGNlcHRpb24gc3RhdGUgaW50byB0aGUKKyAgY2FsbGVyJ3MgZnJhbWUgYXMgdGhleSByZXR1cm4gZm9yIHRoZSBsYXN0IHRpbWUuCisKKy0gSXNzdWUgIzEyMjkxOiBZb3UgY2FuIG5vdyBsb2FkIG11bHRpcGxlIG1hcnNoYWxsZWQgb2JqZWN0cyBmcm9tIGEgc3RyZWFtLAorICB3aXRoIG90aGVyIGRhdGEgaW50ZXJsZWF2ZWQgYmV0d2VlbiBtYXJzaGFsbGVkIG9iamVjdHMuCisKKy0gSXNzdWUgIzEyMzU2OiBXaGVuIHJlcXVpcmVkIHBvc2l0aW9uYWwgb3Iga2V5d29yZC1vbmx5IGFyZ3VtZW50cyBhcmUgbm90CisgIGdpdmVuLCBwcm9kdWNlIGFuIGluZm9ybWF0aXZlIGVycm9yIG1lc3NhZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIG5hbWUocykgb2YgdGhlCisgIG1pc3NpbmcgYXJndW1lbnRzLgorCistIElzc3VlICMxMjM3MDogRml4IHN1cGVyIHdpdGggbm8gYXJndW1lbnRzIHdoZW4gX19jbGFzc19fIGlzIG92ZXJyaWRlbiBpbiB0aGUKKyAgY2xhc3MgYm9keS4KKworLSBJc3N1ZSAjMTIwODQ6IG9zLnN0YXQgb24gV2luZG93cyBub3cgd29ya3MgcHJvcGVybHkgd2l0aCByZWxhdGl2ZSBzeW1ib2xpYworICBsaW5rcyB3aGVuIGNhbGxlZCBmcm9tIGFueSBkaXJlY3RvcnkuCisKKy0gTG9vc2VuIHR5cGUgcmVzdHJpY3Rpb25zIG9uIHRoZSBfX2Rpcl9fIG1ldGhvZC4gX19kaXJfXyBjYW4gbm93IHJldHVybiBhbnkKKyAgc2VxdWVuY2UsIHdoaWNoIHdpbGwgYmUgY29udmVydGVkIHRvIGEgbGlzdCBhbmQgc29ydGVkIGJ5IGRpcigpLgorCistIElzc3VlICMxMjI2NTogTWFrZSBlcnJvciBtZXNzYWdlcyBwcm9kdWNlZCBieSBwYXNzaW5nIGFuIGludmFsaWQgc2V0IG9mCisgIGFyZ3VtZW50cyB0byBhIGZ1bmN0aW9uIG1vcmUgaW5mb3JtYXRpdmUuCisKKy0gSXNzdWUgIzEyMjI1OiBTdGlsbCBhbGxvdyBQeXRob24gdG8gYnVpbGQgaWYgUHl0aG9uIGlzIG5vdCBpbiBpdHMgaGcgcmVwbyBvcgorICBtZXJjdXJpYWwgaXMgbm90IGluc3RhbGxlZC4KKworLSBJc3N1ZSAjMTE5NTogbXlfZmdldHMoKSBub3cgYWx3YXlzIGNsZWFycyBlcnJvcnMgYmVmb3JlIGNhbGxpbmcgZmdldHMoKS4gRml4CisgIHRoZSBmb2xsb3dpbmcgY2FzZTogc3lzLnN0ZGluLnJlYWQoKSBzdG9wcGVkIHdpdGggQ1RSTCtkIChlbmQgb2YgZmlsZSksCisgIHJhd19pbnB1dCgpIGludGVycnVwdGVkIGJ5IENUUkwrYy4KKworLSBJc3N1ZSAjMTIyMTY6IEFsbG93IHVuZXhwZWN0ZWQgRU9GIGVycm9ycyB0byBoYXBwZW4gb24gYW55IGxpbmUgb2YgdGhlIGZpbGUuCisKKy0gSXNzdWUgIzEyMTk5OiBUaGUgVHJ5RXhjZXB0IGFuZCBUcnlGaW5hbGx5IGFuZCBBU1Qgbm9kZXMgaGF2ZSBiZWVuIHVuaWZpZWQKKyAgaW50byBhIFRyeSBub2RlLgorCistIElzc3VlICM5NjcwOiBJbmNyZWFzZSB0aGUgZGVmYXVsdCBzdGFjayBzaXplIGZvciBzZWNvbmRhcnkgdGhyZWFkcyBvbgorICBNYWMgT1MgWCBhbmQgRnJlZUJTRCB0byByZWR1Y2UgdGhlIGNoYW5jZXMgb2YgYSBjcmFzaCBpbnN0ZWFkIG9mIGEKKyAgIm1heGltdW0gcmVjdXJzaW9uIGRlcHRoIiBSdW50aW1lRXJyb3IgZXhjZXB0aW9uLgorICAocGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQorCistIElzc3VlICMxMjEwNjogVGhlIHVzZSBvZiB0aGUgbXVsdGlwbGUtd2l0aCBzaG9ydGhhbmQgc3ludGF4IGlzIG5vdyByZWZsZWN0ZWQKKyAgaW4gdGhlIEFTVC4KKworLSBJc3N1ZSAjMTIxOTA6IFRyeSB0byB1c2UgdGhlIHNhbWUgZmlsZW5hbWUgb2JqZWN0IHdoZW4gY29tcGlsaW5nIHVubWFyc2hhbGxpbmcKKyAgYSBjb2RlIG9iamVjdHMgaW4gdGhlIHNhbWUgZmlsZS4KKworLSBJc3N1ZSAjMTIxNjY6IE1vdmUgaW1wbGVtZW50YXRpb25zIG9mIGRpcigpIHNwZWNpYWxpemVkIGZvciB2YXJpb3VzIHR5cGVzIGludG8KKyAgdGhlIF9fZGlyX18oKSBtZXRob2RzIG9mIHRob3NlIHR5cGVzLgorCistIElzc3VlICM1NzE1OiBJbiBzb2NrZXRzZXJ2ZXIsIGNsb3NlIHRoZSBzZXJ2ZXIgc29ja2V0IGluIHRoZSBjaGlsZCBwcm9jZXNzLgorCistIENvcnJlY3QgbG9va3VwIG9mIF9fZGlyX18gb24gb2JqZWN0cy4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIGNhdXNlcyBlcnJvcnMKKyAgYmVzaWRlcyBBdHRyaWJ1dGVFcnJvciBmb3VuZCBvbiBsb29rdXAgdG8gYmUgcHJvcGFnYXRlZC4KKworLSBJc3N1ZSAjMTIwNjA6IFVzZSBzaWdfYXRvbWljX3QgdHlwZSBhbmQgdm9sYXRpbGUga2V5d29yZCBpbiB0aGUgc2lnbmFsCisgIG1vZHVsZS4gUGF0Y2ggd3JpdHRlbiBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzE3NDY2NTY6IEFkZGVkIHRoZSBpZl9uYW1laW5kZXgsIGlmX2luZGV4dG9uYW1lLCBpZl9uYW1ldG9pbmRleAorICBtZXRob2RzIHRvIHRoZSBzb2NrZXQgbW9kdWxlLgorCistIElzc3VlICMxMjA0NDogRml4ZWQgc3VicHJvY2Vzcy5Qb3BlbiB3aGVuIHVzZWQgYXMgYSBjb250ZXh0IG1hbmFnZXIgdG8KKyAgd2FpdCBmb3IgdGhlIHByb2Nlc3MgdG8gZW5kIHdoZW4gZXhpdGluZyB0aGUgY29udGV4dCB0byBhdm9pZCB1bmludGVudGlvbmFsbHkKKyAgbGVhdmluZyB6b21iaWUgcHJvY2Vzc2VzIGFyb3VuZC4KKworLSBJc3N1ZSAjMTE5NTogRml4IGlucHV0KCkgaWYgaXQgaXMgaW50ZXJydXB0ZWQgYnkgQ1RSTCtkIGFuZCB0aGVuIENUUkwrYywKKyAgY2xlYXIgdGhlIGVuZC1vZi1maWxlIGluZGljYXRvciBhZnRlciBDVFJMK2QuCisKKy0gSXNzdWUgIzE4NTY6IEF2b2lkIGNyYXNoZXMgYW5kIGxvY2t1cHMgd2hlbiBkYWVtb24gdGhyZWFkcyBydW4gd2hpbGUgdGhlCisgIGludGVycHJldGVyIGlzIHNodXR0aW5nIGRvd247IGluc3RlYWQsIHRoZXNlIHRocmVhZHMgYXJlIG5vdyBraWxsZWQgd2hlbgorICB0aGV5IHRyeSB0byB0YWtlIHRoZSBHSUwuCisKKy0gSXNzdWUgIzk3NTY6IFdoZW4gY2FsbGluZyBhIG1ldGhvZCBkZXNjcmlwdG9yIG9yIGEgc2xvdCB3cmFwcGVyIGRlc2NyaXB0b3IsCisgIHRoZSBjaGVjayBvZiB0aGUgb2JqZWN0IHR5cGUgZG9lc24ndCByZWFkIHRoZSBfX2NsYXNzX18gYXR0cmlidXRlIGFueW1vcmUuCisgIEZpeCBhIGNyYXNoIGlmIGEgY2xhc3Mgb3ZlcnJpZGUgaXRzIF9fY2xhc3NfXyBhdHRyaWJ1dGUgKGUuZy4gYSBwcm94eSBvZiB0aGUKKyAgc3RyIHR5cGUpLiBQYXRjaCB3cml0dGVuIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTA1MTc6IEFmdGVyIGZvcmsoKSwgcmVpbml0aWFsaXplIHRoZSBUTFMgdXNlZCBieSB0aGUgUHlHSUxTdGF0ZV8qCisgIEFQSXMsIHRvIGF2b2lkIGEgY3Jhc2ggd2l0aCB0aGUgcHRocmVhZCBpbXBsZW1lbnRhdGlvbiBpbiBSSEVMIDUuICBQYXRjaAorICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzEwOTE0OiBJbml0aWFsaXplIGNvcnJlY3RseSB0aGUgZmlsZXN5c3RlbSBjb2RlYyB3aGVuIGNyZWF0aW5nIGEgbmV3CisgIHN1YmludGVycHJldGVyIHRvIGZpeCBhIGJvb3RzdHJhcCBpc3N1ZSB3aXRoIGNvZGVjcyBpbXBsZW1lbnRlZCBpbiBQeXRob24sIGFzCisgIHRoZSBJU08tODg1OS0xNSBjb2RlYy4KKworLSBJc3N1ZSAjMTE5MTg6IE9TLzIgYW5kIFZNUyBhcmUgbm8gbW9yZSBzdXBwb3J0ZWQgYmVjYXVzZSBvZiB0aGUgbGFjayBvZgorICBtYWludGFpbmVyLgorCistIElzc3VlICM2NzgwOiBmaXggc3RhcnRzL2VuZHN3aXRoIGVycm9yIG1lc3NhZ2UgdG8gbWVudGlvbiB0aGF0IHR1cGxlcyBhcmUKKyAgYWNjZXB0ZWQgdG9vLgorCistIElzc3VlICM1MDU3OiBmaXggYSBidWcgaW4gdGhlIHBlZXBob2xlciB0aGF0IGxlZCB0byBub24tcG9ydGFibGUgcHljIGZpbGVzCisgIGJldHdlZW4gbmFycm93IGFuZCB3aWRlIGJ1aWxkcyB3aGlsZSBvcHRpbWl6aW5nIEJJTkFSWV9TVUJTQ1Igb24gbm9uLUJNUAorICBjaGFycyAoZS5nLiAiXFUwMDAxMjM0NSJbMF0pLgorCistIElzc3VlICMxMTg0NTogRml4IHR5cG8gaW4gcmFuZ2VvYmplY3QuYyB0aGF0IGNhdXNlZCBhIGNyYXNoIGluCisgIGNvbXB1dGVfc2xpY2VfaW5kaWNlcy4gIFBhdGNoIGJ5IERhbmllbCBVcmJhbi4KKworLSBJc3N1ZSAjNTY3MzogQWRkZWQgYSBgdGltZW91dGAga2V5d29yZCBhcmd1bWVudCB0byBzdWJwcm9jZXNzLlBvcGVuLndhaXQsCisgIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGVkLCBzdWJwcm9jZXNzLmNhbGwsIHN1YnByb2Nlc3MuY2hlY2tfY2FsbCwgYW5kCisgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0LiAgSWYgdGhlIGJsb2NraW5nIG9wZXJhdGlvbiB0YWtlcyBtb3JlIHRoYW4gYHRpbWVvdXRgCisgIHNlY29uZHMsIHRoZSBgc3VicHJvY2Vzcy5UaW1lb3V0RXhwaXJlZGAgZXhjZXB0aW9uIGlzIHJhaXNlZC4KKworLSBJc3N1ZSAjMTE2NTA6IFB5T1NfU3RkaW9SZWFkbGluZSgpIHJldHJpZXMgZmdldHMoKSBpZiBpdCB3YXMgaW50ZXJydXB0ZWQKKyAgKEVJTlRSKSwgZm9yIGV4YW1wbGUgaWYgdGhlIHByb2dyYW0gaXMgc3RvcHBlZCB3aXRoIENUUkwreiBvbiBNYWMgT1MgWC4gUGF0Y2gKKyAgd3JpdHRlbiBieSBDaGFybGVzLUZyYW5jb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjOTMxOTogSW5jbHVkZSB0aGUgZmlsZW5hbWUgaW4gIk5vbi1VVEY4IGNvZGUgLi4uIiBzeW50YXggZXJyb3IuCisKKy0gSXNzdWUgIzEwNzg1OiBTdG9yZSB0aGUgZmlsZW5hbWUgYXMgVW5pY29kZSBpbiB0aGUgUHl0aG9uIHBhcnNlci4KKworLSBJc3N1ZSAjMTE2MTk6IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZSgpIGRvZXNuJ3QgZW5jb2RlIHRoZSBwYXRoIHRvIGJ5dGVzCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEwOTk4OiBSZW1vdmUgbWVudGlvbnMgb2YgLVEsIHN5cy5mbGFncy5kaXZpc2lvbl93YXJuaW5nIGFuZAorICBQeV9EaXZpc2lvbldhcm5pbmdGbGFnIGxlZnQgb3ZlciBmcm9tIFB5dGhvbiAyLgorCistIElzc3VlICMxMTI0NDogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5IHBlZXBob2xlciBjaGVjayB0aGF0IHdhcyBwcmV2ZW50aW5nCisgIG5lZ2F0aXZlIHplcm9zIGZyb20gYmVpbmcgY29uc3RhbnQtZm9sZGVkIHByb3Blcmx5LgorCistIElzc3VlICMxMTM5NTogaW8uRmlsZUlPKCkud3JpdGUoKSBjbGFtcHMgdGhlIGRhdGEgbGVuZ3RoIHRvIDMyLDc2NyBieXRlcyBvbgorICBXaW5kb3dzIGlmIHRoZSBmaWxlIGlzIGEgVFRZIHRvIHdvcmthcm91bmQgYSBXaW5kb3dzIGJ1Zy4gVGhlIFdpbmRvd3MgY29uc29sZQorICByZXR1cm5zIGFuIGVycm9yICgxMjogbm90IGVub3VnaCBzcGFjZSBlcnJvcikgb24gd3JpdGluZyBpbnRvIHN0ZG91dCBpZgorICBzdGRvdXQgbW9kZSBpcyBiaW5hcnkgYW5kIHRoZSBsZW5ndGggaXMgZ3JlYXRlciB0aGFuIDY2LDAwMCBieXRlcyAob3IgbGVzcywKKyAgZGVwZW5kaW5nIG9uIGhlYXAgdXNhZ2UpLgorCistIElzc3VlICMxMTMyMDogZml4IGJvZ3VzIG1lbW9yeSBtYW5hZ2VtZW50IGluIE1vZHVsZXMvZ2V0cGF0aC5jLCBsZWFkaW5nIHRvCisgIGEgcG9zc2libGUgY3Jhc2ggd2hlbiBjYWxsaW5nIFB5X1NldFBhdGgoKS4KKworLSBJc3N1ZSAjMTE0MzI6IEEgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIHN1YnByb2Nlc3MuUG9wZW4gb24gcG9zaXggc3lzdGVtcyB3aXRoCisgIDMuMi4wIHdoZXJlIHRoZSBzdGRvdXQgb3Igc3RkZXJyIGZpbGUgZGVzY3JpcHRvciBiZWluZyB0aGUgc2FtZSBhcyB0aGUgc3RkaW4KKyAgZmlsZSBkZXNjcmlwdG9yIHdvdWxkIHJhaXNlIGFuIGV4Y2VwdGlvbi4gd2ViYnJvd3Nlci5vcGVuIHdvdWxkIGZhaWwuIGZpeGVkLgorCistIElzc3VlICM5ODU2OiBDaGFuZ2Ugb2JqZWN0Ll9fZm9ybWF0X18gd2l0aCBhIG5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nCisgIHRvIGJlIGEgRGVwcmVjYXRpb25XYXJuaW5nLiBJbiAzLjIgaXQgd2FzIGEgUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZy4KKyAgSW4gMy40IGl0IHdpbGwgYmUgYSBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzExMjQ0OiBUaGUgcGVlcGhvbGUgb3B0aW1pemVyIGlzIG5vdyBhYmxlIHRvIGNvbnN0YW50LWZvbGQKKyAgYXJiaXRyYXJpbHkgY29tcGxleCBleHByZXNzaW9ucy4gIFRoaXMgYWxzbyBmaXhlcyBhIDMuMiByZWdyZXNzaW9uIHdoZXJlCisgIG9wZXJhdGlvbnMgaW52b2x2aW5nIG5lZ2F0aXZlIG51bWJlcnMgd2VyZSBub3QgY29uc3RhbnQtZm9sZGVkLgorCistIElzc3VlICMxMTQ1MDogRG9uJ3QgdHJ1bmNhdGUgaGcgdmVyc2lvbiBpbmZvIGluIFB5X0dldEJ1aWxkSW5mbygpIHdoZW4KKyAgdGhlcmUgYXJlIG1hbnkgdGFncyAoZS5nLiB3aGVuIHVzaW5nIG1xKS4gIFBhdGNoIGJ5IE5hZGVlbSBWYXdkYS4KKworLSBJc3N1ZSAjMTEzMzU6IEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gbGlzdC5zb3J0IHdoZW4gdGhlIGtleSBmdW5jdGlvbgorICB0aHJvd3MgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICM4OTIzOiBXaGVuIGEgc3RyaW5nIGlzIGVuY29kZWQgdG8gVVRGLTggaW4gc3RyaWN0IG1vZGUsIHRoZSByZXN1bHQgaXMKKyAgY2FjaGVkIGludG8gdGhlIG9iamVjdC4gRXhhbXBsZXM6IHN0ci5lbmNvZGUoKSwgc3RyLmVuY29kZSgndXRmLTgnKSwKKyAgUHlVbmljb2RlX0FzVVRGOFN0cmluZygpIGFuZCBQeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nKHVuaWNvZGUsICJ1dGYtOCIsCisgIE5VTEwpLgorCistIElzc3VlICMxMDgzMTogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBzdXBwb3J0cyAlbGksICVsbGkgYW5kICV6aSBmb3JtYXRzLgorCistIElzc3VlICMxMDgyOTogUmVmYWN0b3IgUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSwgdXNlIHRoZSBzYW1lIGZ1bmN0aW9uIHRvIHBhcnNlCisgIHRoZSBmb3JtYXQgc3RyaW5nIGluIHRoZSAzIHN0ZXBzLCBmaXggY3Jhc2hzIG9uIGludmFsaWQgZm9ybWF0IHN0cmluZ3MuCisKKy0gSXNzdWUgIzEzMDA3OiB3aGljaGRiIHNob3VsZCByZWNvZ25pemUgZ2RibSAxLjkgbWFnaWMgbnVtYmVycy4KKworLSBJc3N1ZSAjMTEyNDY6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVYiKSB0byBkZWNvZGUgdGhlIGJ5dGUgc3RyaW5nIGZyb20KKyAgVVRGLTggKHdpdGggcmVwbGFjZSBlcnJvciBoYW5kbGVyKSBpbnN0ZWFkIG9mIElTTy04ODU5LTEgKGluIHN0cmljdCBtb2RlKS4KKyAgUGF0Y2ggd3JpdHRlbiBieSBSYXkgQWxsZW4uCisKKy0gSXNzdWUgIzExMjg2OiBSYWlzZSBhIFZhbHVlRXJyb3IgZnJvbSBjYWxsaW5nIFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyIHdpdGgKKyAgYSBidWZmZXIgc3RydWN0IGhhdmluZyBhIE5VTEwgZGF0YSBwb2ludGVyLgorCistIElzc3VlICMxMTI3MjogT24gV2luZG93cywgaW5wdXQoKSBzdHJpcHMgJ1xyJyAoYW5kIG5vdCBvbmx5ICdcbicpLCBhbmQKKyAgc3lzLnN0ZGluIHVzZXMgdW5pdmVyc2FsIG5ld2xpbmUgKHJlcGxhY2UgJ1xyXG4nIGJ5ICdcbicpLgorCistIElzc3VlICMxMTgyODogc3RhcnRzd2l0aCBhbmQgZW5kc3dpdGggbm93IGFjY2VwdCBOb25lIGFzIHNsaWNlIGluZGV4LgorICBQYXRjaCBieSBUb3JzdGVuIEJlY2tlci4KKworLSBJc3N1ZSAjMTA4MzA6IEZpeCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoIiVjIikgZm9yIG5vbi1CTVAgY2hhcmFjdGVycyBvbgorICBuYXJyb3cgYnVpbGQuCisKKy0gSXNzdWUgIzExMTY4OiBSZW1vdmUgZmlsZW5hbWUgZGVidWcgdmFyaWFibGUgZnJvbSBQeUV2YWxfRXZhbEZyYW1lRXgoKS4KKyAgSXQgZW5jb2RlZCB0aGUgVW5pY29kZSBmaWxlbmFtZSB0byBVVEYtOCwgYnV0IHRoZSBlbmNvZGluZyBmYWlscyBvbgorICB1bmRlY29kYWJsZSBmaWxlbmFtZSAob24gc3Vycm9nYXRlIGNoYXJhY3RlcnMpIHdoaWNoIHJhaXNlcyBhbiB1bmV4cGVjdGVkCisgIFVuaWNvZGVFbmNvZGVFcnJvciBvbiByZWN1cnNpb24gbGltaXQuCisKKy0gSXNzdWUgIzExMTg3OiBSZW1vdmUgYm9vdHN0cmFwIGNvZGUgKHVzZSBBU0NJSSkgb2YKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZygpLCBpdCB3YXMgcmVwbGFjZWQgYnkgYSBiZXR0ZXIgZmFsbGJhY2sgKHVzZSB0aGUKKyAgbG9jYWxlIGVuY29kaW5nKSBpbiBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0KCkuCisKKy0gQ2hlY2sgZm9yIE5VTEwgcmVzdWx0IGluIFB5VHlwZV9Gcm9tU3BlYy4KKworLSBJc3N1ZSAjMTA1MTY6IE5ldyBjb3B5KCkgYW5kIGNsZWFyKCkgbWV0aG9kcyBmb3IgbGlzdHMgYW5kIGJ5dGVhcnJheXMuCisKKy0gSXNzdWUgIzExMzg2OiBieXRlYXJyYXkucG9wKCkgbm93IHRocm93cyBJbmRleEVycm9yIHdoZW4gdGhlIGJ5dGVhcnJheSBpcworICBlbXB0eSwgaW5zdGVhZCBvZiBPdmVyZmxvd0Vycm9yLgorCistIElzc3VlICMxMjM4MDogVGhlIHJqdXN0LCBsanVzdCBhbmQgY2VudGVyIG1ldGhvZHMgb2YgYnl0ZXMgYW5kIGJ5dGVhcnJheQorICBub3cgYWNjZXB0IGEgYnl0ZWFycmF5IGFyZ3VtZW50LgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE0MTk1OiBBbiBpc3N1ZSB0aGF0IGNhdXNlZCB3ZWFrcmVmLldlYWtTZXQgaW5zdGFuY2VzIHRvIGluY29ycmVjdGx5CisgIHJldHVybiBUcnVlIGZvciBhIFdlYWtTZXQgaW5zdGFuY2UgJ2EnIGluIGJvdGggJ2EgPCBhJyBhbmQgJ2EgPiBhJyBoYXMgYmVlbgorICBmaXhlZC4KKworLSBJc3N1ZSAjMTQxNjY6IFBpY2tsZXIgb2JqZWN0cyBub3cgaGF2ZSBhbiBvcHRpb25hbCBgYGRpc3BhdGNoX3RhYmxlYGAKKyAgYXR0cmlidXRlIHdoaWNoIGFsbG93cyB0byBzZXQgY3VzdG9tIHBlci1waWNrbGVyIHJlZHVjdGlvbiBmdW5jdGlvbnMuCisgIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTQxNzc6IG1hcnNoYWwubG9hZHMoKSBub3cgcmFpc2VzIFR5cGVFcnJvciB3aGVuIGdpdmVuIGFuIHVuaWNvZGUKKyAgc3RyaW5nLiAgUGF0Y2ggYnkgR3VpbGhlcm1lIEdvbsOnYWx2ZXMuCisKKy0gSXNzdWUgIzEzNTUwOiBSZW1vdmUgdGhlIGRlYnVnIG1hY2hpbmVyeSBmcm9tIHRoZSB0aHJlYWRpbmcgbW9kdWxlOiByZW1vdmUKKyAgdmVyYm9zZSBhcmd1bWVudHMgZnJvbSBhbGwgdGhyZWFkaW5nIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMTQxNTk6IEZpeCB0aGUgbGVuKCkgb2Ygd2VhayBjb250YWluZXJzIChXZWFrU2V0LCBXZWFrS2V5RGljdGlvbmFyeSwKKyAgV2Vha1ZhbHVlRGljdGlvbmFyeSkgdG8gcmV0dXJuIGEgYmV0dGVyIGFwcHJveGltYXRpb24gd2hlbiBzb21lIG9iamVjdHMKKyAgYXJlIGRlYWQgb3IgZHlpbmcuICBNb3Jlb3ZlciwgdGhlIGltcGxlbWVudGF0aW9uIGlzIG5vdyBPKDEpIHJhdGhlciB0aGFuCisgIE8obikuCisKKy0gSXNzdWUgIzEzMTI1OiBTaWxlbmNlIHNwdXJpb3VzIHRlc3RfbGliMnRvMyBvdXRwdXQgd2hlbiBpbiBub24tdmVyYm9zZSBtb2RlLgorICBQYXRjaCBieSBNaWtoYWlsIE5vdmlrb3YuCisKKy0gSXNzdWUgIzExODQxOiBGaXggY29tcGFyaXNvbiBidWcgd2l0aCAncmMnIHZlcnNpb25zIGluIHBhY2thZ2luZy52ZXJzaW9uLgorICBQYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxMzQ0NzogQWRkIGEgdGVzdCBmaWxlIHRvIGhvc3QgcmVncmVzc2lvbiB0ZXN0cyBmb3IgYnVncyBpbiB0aGUKKyAgc2NyaXB0cyBmb3VuZCBpbiB0aGUgVG9vbHMgZGlyZWN0b3J5LgorCistIElzc3VlICM2ODg0OiBGaXggbG9uZy1zdGFuZGluZyBidWdzIHdpdGggTUFOSUZFU1QuaW4gcGFyc2luZyBpbiBkaXN0dXRpbHMKKyAgb24gV2luZG93cy4gIEFsc28gZml4ZWQgaW4gcGFja2FnaW5nLgorCistIElzc3VlICM4MDMzOiBzcWxpdGUzOiBGaXggNjQtYml0IGludGVnZXIgaGFuZGxpbmcgaW4gdXNlciBmdW5jdGlvbnMKKyAgb24gMzItYml0IGFyY2hpdGVjdHVyZXMuIEluaXRpYWwgcGF0Y2ggYnkgUGhpbGlwcGUgRGV2YWxrZW5lZXIuCisKKy0gSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgc2xhc2hlcyBpbiB0aGUgc3RhcnQgdGFnLgorCistIElzc3VlICMxMzY0MTogRGVjb2RpbmcgZnVuY3Rpb25zIGluIHRoZSBiYXNlNjQgbW9kdWxlIG5vdyBhY2NlcHQgQVNDSUktb25seQorICB1bmljb2RlIHN0cmluZ3MuICBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICMxNDA0MzogU3BlZWQgdXAgaW1wb3J0bGliJ3MgX0ZpbGVGaW5kZXIgYnkgYXQgbGVhc3QgOHgsIGFuZCBhZGQgYQorICBuZXcgaW1wb3J0bGliLmludmFsaWRhdGVfY2FjaGVzKCkgZnVuY3Rpb24uCisKKy0gSXNzdWUgIzE0MDAxOiBDVkUtMjAxMi0wODQ1OiB4bWxycGM6IEZpeCBhbiBlbmRsZXNzIGxvb3AgaW4KKyAgU2ltcGxlWE1MUlBDU2VydmVyIHVwb24gbWFsZm9ybWVkIFBPU1QgcmVxdWVzdC4KKworLSBJc3N1ZSAjMTM5NjE6IE1vdmUgaW1wb3J0bGliIG92ZXIgdG8gdXNpbmcgb3MucmVwbGFjZSgpIGZvciBhdG9taWMgcmVuYW1pbmcuCisKKy0gRG8gYXdheSB3aXRoIGFtYmlndW91cyBsZXZlbCB2YWx1ZXMgKGFzIHN1Z2dlc3RlZCBieSBQRVAgMzI4KSBpbgorICBpbXBvcnRsaWIuX19pbXBvcnRfXygpIGJ5IHJhaXNpbmcgVmFsdWVFcnJvciB3aGVuIGxldmVsIDwgMC4KKworLSBJc3N1ZSAjMjQ4OTogcHR5LnNwYXduIGNvdWxkIGNvbnN1bWUgMTAwJSBjcHUgd2hlbiBpdCBlbmNvdW50ZXJlZCBhbiBFT0YuCisKKy0gSXNzdWUgIzEzMDE0OiBGaXggYSBwb3NzaWJsZSByZWZlcmVuY2UgbGVhayBpbiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoKS4KKworLSBJc3N1ZSAjMTM3Nzc6IEFkZCBQRl9TWVNURU0gc29ja2V0cyBvbiBPUyBYLgorICBQYXRjaCBieSBNaWNoYWVsIEdvZGVyYmF1ZXIuCisKKy0gSXNzdWUgIzEzMDE1OiBGaXggYSBwb3NzaWJsZSByZWZlcmVuY2UgbGVhayBpbiBkZWZhdWx0ZGljdC5fX3JlcHJfXy4KKyAgUGF0Y2ggYnkgU3VtYW4gU2FoYS4KKworLSBJc3N1ZSAjMTMyNjExMzogZGlzdHV0aWxzJyBhbmQgcGFja2FnaW5nJ3MgYnVpbGRfZXh0IGNvbW1hbmRzIG9wdGlvbiBub3cKKyAgY29ycmVjdGx5IHBhcnNlcyBtdWx0aXBsZSB2YWx1ZXMgKHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIG9yIGNvbW1hcykgZ2l2ZW4KKyAgdG8gdGhlaXIgLS1saWJyYXJpZXMgb3B0aW9uLgorCistIElzc3VlICMxMDI4Nzogbm50cGxpYiBub3cgcXVlcmllcyB0aGUgc2VydmVyJ3MgQ0FQQUJJTElUSUVTIGZpcnN0IGJlZm9yZQorICBzZW5kaW5nIE1PREUgUkVBREVSLCBhbmQgb25seSBzZW5kcyBpdCBpZiBub3QgYWxyZWFkeSBpbiBSRUFERVIgbW9kZS4KKyAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIElzc3VlICMxMzk5MzogSFRNTFBhcnNlciBpcyBub3cgYWJsZSB0byBoYW5kbGUgYnJva2VuIGVuZCB0YWdzIHdoZW4KKyAgc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMzkzMDogbGliMnRvMyBub3cgc3VwcG9ydHMgd3JpdGluZyBjb252ZXJ0ZWQgb3V0cHV0IGZpbGVzIHRvIGFub3RoZXIKKyAgZGlyZWN0b3J5IHRyZWUgYXMgd2VsbCBhcyBjb3B5aW5nIHVuY2hhbmdlZCBmaWxlcyBhbmQgYWx0ZXJpbmcgdGhlIGZpbGUKKyAgc3VmZml4LgorCistIElzc3VlICM5NzUwOiBGaXggc3FsaXRlMy5Db25uZWN0aW9uLml0ZXJkdW1wIG9uIHRhYmxlcyBhbmQgZmllbGRzCisgIHdpdGggYSBuYW1lIHRoYXQgaXMgYSBrZXl3b3JkIG9yIGNvbnRhaW5zIHF1b3Rlcy4gUGF0Y2ggYnkgTWFya28KKyAgS29odGFsYS4KKworLSBJc3N1ZSAjMTAyODc6IG5udHBsaWIgbm93IHF1ZXJpZXMgdGhlIHNlcnZlcidzIENBUEFCSUxJVElFUyBhZ2FpbiBhZnRlcgorICBhdXRoZW50aWNhdGluZyAoc2luY2UgdGhlIHJlc3VsdCBtYXkgY2hhbmdlLCBhY2NvcmRpbmcgdG8gUkZDIDQ2NDMpLgorICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEzOTg5OiBEb2N1bWVudCB0aGF0IEd6aXBGaWxlIGRvZXMgbm90IHN1cHBvcnQgdGV4dCBtb2RlLCBhbmQgZ2l2ZSBhCisgIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdlIHdoZW4gb3BlbmVkIHdpdGggYW4gaW52YWxpZCBtb2RlIHN0cmluZy4KKworLSBJc3N1ZSAjMTM1OTA6IE9uIE9TIFggMTAuNyBhbmQgMTAuNiB3aXRoIFhjb2RlIDQuMiwgYnVpbGRpbmcKKyAgRGlzdHV0aWxzLWJhc2VkIHBhY2thZ2VzIHdpdGggQyBleHRlbnNpb24gbW9kdWxlcyBtYXkgZmFpbCBiZWNhdXNlCisgIEFwcGxlIGhhcyByZW1vdmVkIGdjYy00LjIsIHRoZSB2ZXJzaW9uIHVzZWQgdG8gYnVpbGQgcHl0aG9uLm9yZworICA2NC1iaXQvMzItYml0IFB5dGhvbnMuICBJZiB0aGUgdXNlciBkb2VzIG5vdCBleHBsaWNpdGx5IG92ZXJyaWRlCisgIHRoZSBkZWZhdWx0IEMgY29tcGlsZXIgYnkgc2V0dGluZyB0aGUgQ0MgZW52aXJvbm1lbnQgdmFyaWFibGUsCisgIERpc3R1dGlscyB3aWxsIG5vdyBhdHRlbXB0IHRvIGNvbXBpbGUgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBjbGFuZworICBpZiBnY2MtNC4yIGlzIHJlcXVpcmVkIGJ1dCBub3QgZm91bmQuIEFsc28gYXMgYSBjb252ZW5pZW5jZSwgaWYKKyAgdGhlIHVzZXIgZG9lcyBleHBsaWNpdGx5IHNldCBDQywgc3Vic3RpdHV0ZSBpdHMgdmFsdWUgYXMgdGhlIGRlZmF1bHQKKyAgY29tcGlsZXIgaW4gdGhlIERpc3R1dGlscyBMRFNIQVJFRCBjb25maWd1cmF0aW9uIHZhcmlhYmxlIGZvciBPUyBYLgorICAoTm90ZSwgdGhlIHB5dGhvbi5vcmcgMzItYml0LW9ubHkgUHl0aG9ucyB1c2UgZ2NjLTQuMCBhbmQgdGhlIDEwLjR1CisgIFNESywgbmVpdGhlciBvZiB3aGljaCBhcmUgYXZhaWxhYmxlIGluIFhjb2RlIDQuICBUaGlzIGNoYW5nZSBkb2VzIG5vdAorICBhdHRlbXB0IHRvIG92ZXJyaWRlIHNldHRpbmdzIHRvIHN1cHBvcnQgdGhlaXIgdXNlIHdpdGggWGNvZGUgNC4pCisKKy0gSXNzdWUgIzEzOTYwOiBIVE1MUGFyc2VyIGlzIG5vdyBhYmxlIHRvIGhhbmRsZSBicm9rZW4gY29tbWVudHMgd2hlbgorICBzdHJpY3Q9RmFsc2UuCisKKy0gSXNzdWUgIzEzOTIxOiBVbmRvY3VtZW50IGFuZCBjbGVhbiB1cCBzcWxpdGUzLk9wdGltaXplZFVuaWNvZGUsCisgIHdoaWNoIGlzIG9ic29sZXRlIGluIFB5dGhvbiAzLnguIEl0J3Mgbm93IGFsaWFzZWQgdG8gc3RyIGZvcgorICBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKworLSBXaGVuICcnIGlzIGEgcGF0aCAoZS5nLiBpbiBzeXMucGF0aCksIG1ha2Ugc3VyZSBfX2ZpbGVfXyB1c2VzIHRoZSBjdXJyZW50CisgIHdvcmtpbmcgZGlyZWN0b3J5IGluc3RlYWQgb2YgJycgaW4gaW1wb3J0bGliLgorCistIElzc3VlICMxMzYwOTogQWRkIHR3byBmdW5jdGlvbnMgdG8gcXVlcnkgdGhlIHRlcm1pbmFsIHNpemU6CisgIG9zLmdldF90ZXJtaW5hbF9zaXplIChsb3cgbGV2ZWwpIGFuZCBzaHV0aWwuZ2V0X3Rlcm1pbmFsX3NpemUgKGhpZ2ggbGV2ZWwpLgorICBQYXRjaCBieSBaYmlnbmlldyBKxJlkcnplamV3c2tpLVN6bWVrLgorCistIElzc3VlICMxMzg0NTogT24gV2luZG93cywgdGltZS50aW1lKCkgbm93IHVzZXMgR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUoKQorICBpbnN0ZWFkIG9mIGZ0aW1lKCkgdG8gaGF2ZSBhIHJlc29sdXRpb24gb2YgMTAwIG5zIGluc3RlYWQgb2YgMSBtcyAodGhlIGNsb2NrCisgIGFjY3VyYWN5IGlzIGJldHdlZW4gMC41IG1zIGFuZCAxNSBtcykuCisKKy0gSXNzdWUgIzEzODQ2OiBBZGQgdGltZS5tb25vdG9uaWMoKSwgbW9ub3RvbmljIGNsb2NrLgorCistIElzc3VlICM4MTg0OiBtdWx0aXByb2Nlc3Npbmc6IE9uIFdpbmRvd3MsIGRvbid0IHNldCBTT19SRVVTRUFERFIgb24KKyAgQ29ubmVjdGlvbiBzb2NrZXRzLCBhbmQgc2V0IEZJTEVfRkxBR19GSVJTVF9QSVBFX0lOU1RBTkNFIG9uIG5hbWVkIHBpcGVzLCB0bworICBtYWtlIHN1cmUgdHdvIGxpc3RlbmVycyBjYW4ndCBiaW5kIHRvIHRoZSBzYW1lIHNvY2tldC9waXBlIChvciBhbnkgZXhpc3RpbmcKKyAgc29ja2V0L3BpcGUpLgorCistIElzc3VlICMxMDgxMTogRml4IHJlY3Vyc2l2ZSB1c2FnZSBvZiBjdXJzb3JzLiBJbnN0ZWFkIG9mIGNyYXNoaW5nLAorICByYWlzZSBhIFByb2dyYW1taW5nRXJyb3Igbm93LgorCistIElzc3VlICMxMDg4MTogRml4IHRlc3Rfc2l0ZSBmYWlsdXJlIHdpdGggT1MgWCBmcmFtZXdvcmsgYnVpbGRzLgorCistIElzc3VlICM5NjQ0Mzc6IE1ha2UgSURMRSBoZWxwIHdpbmRvdyBub24tbW9kYWwuCisgIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvIGFuZCBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjMTM3MzQ6IEFkZCBvcy5md2FsaygpLCBhIGRpcmVjdG9yeSB3YWxraW5nIGZ1bmN0aW9uIHlpZWxkaW5nIGZpbGUKKyAgZGVzY3JpcHRvcnMuCisKKy0gSXNzdWUgIzI5NDU6IE1ha2UgdGhlIGRpc3R1dGlscyB1cGxvYWQgY29tbWFuZCBhd2FyZSBvZiBiZGlzdF9ycG0gcHJvZHVjdHMuCisKKy0gSXNzdWUgIzEzNzEyOiBweXNldHVwIGNyZWF0ZSBzaG91bGQgbm90IGNvbnZlcnQgcGFja2FnZV9kYXRhIHRvIGV4dHJhX2ZpbGVzLgorCistIElzc3VlICMxMTgwNTogcGFja2FnZV9kYXRhIGluIHNldHVwLmNmZyBzaG91bGQgYWxsb3cgbW9yZSB0aGFuIG9uZSB2YWx1ZS4KKworLSBJc3N1ZSAjMTM5MzM6IElETEUgYXV0by1jb21wbGV0ZSBkaWQgbm90IHdvcmsgd2l0aCBzb21lIGltcG9ydGVkCisgIG1vZHVsZSwgbGlrZSBoYXNobGliLiAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIElzc3VlICMxMzkwMTogUHJldmVudCB0ZXN0X2Rpc3R1dGlscyBmYWlsdXJlcyBvbiBPUyBYIHdpdGggLS1lbmFibGUtc2hhcmVkLgorCistIElzc3VlICMxMzY3NjogSGFuZGxlIHN0cmluZ3Mgd2l0aCBlbWJlZGRlZCB6ZXJvcyBjb3JyZWN0bHkgaW4gc3FsaXRlMy4KKworLSBJc3N1ZSAjMTM1MDY6IEFkZCAnJyB0byBwYXRoIGZvciBJRExFIFNoZWxsIHdoZW4gc3RhcnRlZCBhbmQgcmVzdGFydGVkIHdpdGggUmVzdGFydCBTaGVsbC4KKyAgT3JpZ2luYWwgcGF0Y2hlcyBieSBNYXJjbyBTY2F0YWdsaW5pIGFuZCBSb2dlciBTZXJ3eS4KKworLSBJc3N1ZSAjODgyODogQWRkIG5ldyBmdW5jdGlvbiBvcy5yZXBsYWNlKCksIGZvciBjcm9zcy1wbGF0Zm9ybSByZW5hbWluZworICB3aXRoIG92ZXJ3cml0aW5nLgorCistIElzc3VlICMxMzg0ODogb3BlbigpIGFuZCB0aGUgRmlsZUlPIGNvbnN0cnVjdG9yIG5vdyBjaGVjayBmb3IgTlVMCisgIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgbmFtZS4gIFBhdGNoIGJ5IEh5bmVrIFNjaGxhd2Fjay4KKworLSBJc3N1ZSAjMTM4MDY6IFRoZSBzaXplIGNoZWNrIGluIGF1ZGlvb3AgZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMgd2FzIHRvbworICBzdHJpY3QgYW5kIGNvdWxkIHJlamVjdCB2YWxpZCBjb21wcmVzc2VkIGRhdGEuICBQYXRjaCBieSBPbGVnIFBsYWtob3RueXVrLgorCistIElzc3VlICMxMzgxMjogV2hlbiBhIG11bHRpcHJvY2Vzc2luZyBQcm9jZXNzIGNoaWxkIHJhaXNlcyBhbiBleGNlcHRpb24sCisgIGZsdXNoIHN0ZGVyciBhZnRlciBwcmludGluZyB0aGUgZXhjZXB0aW9uIHRyYWNlYmFjay4KKworLSBJc3N1ZSAjMTM4ODU6IENWRS0yMDExLTMzODk6IHRoZSBfc3NsIG1vZHVsZSB3b3VsZCBhbHdheXMgZGlzYWJsZSB0aGUgQ0JDCisgIElWIGF0dGFjayBjb3VudGVybWVhc3VyZS4KKworLSBJc3N1ZSAjMTM4NDc6IHRpbWUubG9jYWx0aW1lKCkgYW5kIHRpbWUuZ210aW1lKCkgbm93IHJhaXNlIGFuIE9TRXJyb3IgaW5zdGVhZAorICBvZiBWYWx1ZUVycm9yIG9uIGZhaWx1cmUuIHRpbWUuY3RpbWUoKSBhbmQgdGltZS5hc2N0aW1lKCkgbm93IHJhaXNlcyBhbgorICBPU0Vycm9yIGlmIGxvY2FsdGltZSgpIGZhaWxlZC4gdGltZS5jbG9jaygpIG5vdyByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCisgIHByb2Nlc3NvciB0aW1lIHVzZWQgaXMgbm90IGF2YWlsYWJsZSBvciBpdHMgdmFsdWUgY2Fubm90IGJlIHJlcHJlc2VudGVkCisKKy0gSXNzdWUgIzEzODYyOiBGaXggc3B1cmlvdXMgZmFpbHVyZSBpbiB0ZXN0X3psaWIgZHVlIHRvIHJ1bnRpbWUvY29tcGlsZSB0aW1lCisgIG1pbm9yIHZlcnNpb25zIG5vdCBtYXRjaGluZy4KKworLSBJc3N1ZSAjMTI4MDQ6IEZpeCB0ZXN0X3NvY2tldCBhbmQgdGVzdF91cmxsaWIybmV0IGZhaWx1cmVzIHdoZW4gcnVubmluZyB0ZXN0cworICBvbiBhIHN5c3RlbSB3aXRob3V0IGludGVybmV0IGFjY2Vzcy4KKworLSBJc3N1ZSAjMTM3NzI6IEluIG9zLnN5bWxpbmsoKSB1bmRlciBXaW5kb3dzLCBkbyBub3QgdHJ5IHRvIGd1ZXNzIHRoZSBsaW5rCisgIHRhcmdldCdzIHR5cGUgKGZpbGUgb3IgZGlyZWN0b3J5KS4gIFRoZSBkZXRlY3Rpb24gd2FzIGJ1Z2d5IGFuZCBtYWRlIHRoZQorICBjYWxsIG5vbi1hdG9taWMgKHRoZXJlZm9yZSBwcm9uZSB0byByYWNlIGNvbmRpdGlvbnMpLgorCistIElzc3VlICM2NjMxOiBEaXNhbGxvdyByZWxhdGl2ZSBmaWxlIHBhdGhzIGluIHVybGxpYiB1cmxvcGVuIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEzNzIyOiBBdm9pZCBzaWxlbmNpbmcgSW1wb3J0RXJyb3JzIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBjb2RlY3MKKyAgcmVnaXN0cnkuCisKKy0gSXNzdWUgIzEzNzgxOiBGaXggR3ppcEZpbGUgYnVnIHRoYXQgY2F1c2VkIGFuIGV4Y2VwdGlvbiB0byBiZSByYWlzZWQgd2hlbgorICBvcGVuaW5nIGZvciB3cml0aW5nIHVzaW5nIGEgZmlsZW9iaiByZXR1cm5lZCBieSBvcy5mZG9wZW4oKS4KKworLSBJc3N1ZSAjMTM4MDM6IFVuZGVyIFNvbGFyaXMsIGRpc3R1dGlscyBkb2Vzbid0IGluY2x1ZGUgYml0bmVzcworICBpbiB0aGUgZGlyZWN0b3J5IG5hbWUuCisKKy0gSXNzdWUgIzEwMjc4OiBBZGQgdGltZS53YWxsY2xvY2soKSBmdW5jdGlvbiwgbW9ub3RvbmljIGNsb2NrLgorCistIElzc3VlICMxMzgwOTogRml4IHJlZ3Jlc3Npb24gd2hlcmUgYnoyIG1vZHVsZSB3b3VsZG4ndCB3b3JrIHdoZW4gdGhyZWFkcyBhcmUKKyAgZGlzYWJsZWQuIE9yaWdpbmFsIHBhdGNoIGJ5IEFtYXVyeSBGb3JnZW90IGQnQXJjLgorCistIElzc3VlICMxMzU4OTogRml4IHNvbWUgc2VyaWFsaXphdGlvbiBwcmltaXRpdmVzIGluIHRoZSBhaWZjIG1vZHVsZS4KKyAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KKworLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIHVzZXI6cGFzc3dvcmQgZHVyaW5nIEJhc2ljCisgIEF1dGhlbnRpY2F0aW9uLiBQYXRjaCBjb250cmlidXRlZCBieSBKb29uYXMgS3VvcmlsZWh0by4KKworLSBJc3N1ZSAjMTM3MjY6IEZpeCB0aGUgYW1iaWd1b3VzIC1TIGZsYWcgaW4gcmVncnRlc3QuIEl0IGlzIC1vLy0tc2xvdyBmb3Igc2xvdworICB0ZXN0cy4KKworLSBJc3N1ZSAjMTIzNjQ6IEZpeCBhIGhhbmcgaW4gY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCisgIFRoZSBoYW5nIHdvdWxkIG9jY3VyIHdoZW4gcmV0cmlldmluZyB0aGUgcmVzdWx0IG9mIGEgc2NoZWR1bGVkIGZ1dHVyZSBhZnRlcgorICB0aGUgZXhlY3V0b3IgaGFkIGJlZW4gc2h1dCBkb3duLgorCistIElzc3VlICMxMzUwMjogdGhyZWFkaW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiBFdmVudC53YWl0KCkgdGhhdCBtYWRlIGl0CisgIHJldHVybiBGYWxzZSB3aGVuIHRoZSBldmVudCB3YXMgc2V0IGFuZCBjbGVhcmVkIHJpZ2h0IGFmdGVyLgorCistIElzc3VlICM5OTkzOiBXaGVuIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSBvbiBkaWZmZXJlbnQgZmlsZXN5c3RlbXMsCisgIGFuZCB0aGUgc291cmNlIGlzIGEgc3ltbGluaywgc2h1dGlsLm1vdmUoKSBub3cgcmVjcmVhdGVzIGEgc3ltbGluayBvbiB0aGUKKyAgZGVzdGluYXRpb24gaW5zdGVhZCBvZiBjb3B5aW5nIHRoZSBmaWxlIGNvbnRlbnRzLiAgUGF0Y2ggYnkgSm9uYXRoYW4gTmllaG9mCisgIGFuZCBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzEyOTI2OiBGaXggYSBidWcgaW4gdGFyZmlsZSdzIGxpbmsgZXh0cmFjdGlvbi4KKworLSBJc3N1ZSAjMTM2OTY6IEZpeCB0aGUgMzAyIFJlbGF0aXZlIFVSTCBSZWRpcmVjdGlvbiBwcm9ibGVtLgorCistIElzc3VlICMxMzYzNjogV2VhayBjaXBoZXJzIGFyZSBub3cgZGlzYWJsZWQgYnkgZGVmYXVsdCBpbiB0aGUgc3NsIG1vZHVsZQorICAoZXhjZXB0IHdoZW4gU1NMdjIgaXMgZXhwbGljaXRseSBhc2tlZCBmb3IpLgorCistIElzc3VlICMxMjcxNTogQWRkIGFuIG9wdGlvbmFsIHN5bWxpbmtzIGFyZ3VtZW50IHRvIHNodXRpbCBmdW5jdGlvbnMKKyAgKGNvcHlmaWxlLCBjb3B5bW9kZSwgY29weXN0YXQsIGNvcHksIGNvcHkyKS4gIFdoZW4gdGhhdCBwYXJhbWV0ZXIgaXMKKyAgdHJ1ZSwgc3ltbGlua3MgYXJlbid0IGRlcmVmZXJlbmNlZCBhbmQgdGhlIG9wZXJhdGlvbiBpbnN0ZWFkIGFjdHMgb24gdGhlCisgIHN5bWxpbmsgaXRzZWxmIChvciBjcmVhdGVzIG9uZSwgaWYgcmVsZXZhbnQpLiAgUGF0Y2ggYnkgSHluZWsgU2NobGF3YWNrLgorCistIEFkZCBhIGZsYWdzIHBhcmFtZXRlciB0byBzZWxlY3QuZXBvbGwuCisKKy0gSXNzdWUgIzEzNjI2OiBBZGQgc3VwcG9ydCBmb3IgU1NMIERpZmZpZS1IZWxsbWFuIGtleSBleGNoYW5nZSwgdGhyb3VnaCB0aGUKKyAgU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcygpIG1ldGhvZCBhbmQgdGhlIHNzbC5PUF9TSU5HTEVfREhfVVNFIG9wdGlvbi4KKworLSBJc3N1ZSAjMTEwMDY6IERvbid0IGlzc3VlIGxvdyBsZXZlbCB3YXJuaW5nIGluIHN1YnByb2Nlc3Mgd2hlbiBwaXBlMigpIGZhaWxzLgorCistIElzc3VlICMxMzYyMDogU3VwcG9ydCBmb3IgQ2hyb21lIGJyb3dzZXIgaW4gd2ViYnJvd3Nlci4gIFBhdGNoIGNvbnRyaWJ1dGVkCisgIGJ5IEFybmF1ZCBDYWxtZXR0ZXMuCisKKy0gSXNzdWUgIzExODI5OiBGaXggY29kZSBleGVjdXRpb24gaG9sZXMgaW4gaW5zcGVjdC5nZXRhdHRyX3N0YXRpYyBmb3IKKyAgbWV0YWNsYXNzZXMgd2l0aCBtZXRhY2xhc3Nlcy4gUGF0Y2ggYnkgQW5kcmVhcyBTdMO8aHJrLgorCistIElzc3VlICMxMjcwODogQWRkIHN0YXJtYXAoKSBhbmQgc3Rhcm1hcF9hc3luYygpIG1ldGhvZHMgKHNpbWlsYXIgdG8KKyAgaXRlcnRvb2xzLnN0YXJtYXAoKSkgdG8gbXVsdGlwcm9jZXNzaW5nLlBvb2wuICBQYXRjaCBieSBIeW5layBTY2hsYXdhY2suCisKKy0gSXNzdWUgIzE3ODU6IEZpeCBpbnNwZWN0IGFuZCBweWRvYyB3aXRoIG1pc2JlaGF2aW5nIGRlc2NyaXB0b3JzLgorCistIElzc3VlICMxMzYzNzogImEyYiIgZnVuY3Rpb25zIGluIHRoZSBiaW5hc2NpaSBtb2R1bGUgbm93IGFjY2VwdCBBU0NJSS1vbmx5CisgIHVuaWNvZGUgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTM2MzQ6IEFkZCBzdXBwb3J0IGZvciBxdWVyeWluZyBhbmQgZGlzYWJsaW5nIFNTTCBjb21wcmVzc2lvbi4KKworLSBJc3N1ZSAjMTM2Mjc6IEFkZCBzdXBwb3J0IGZvciBTU0wgRWxsaXB0aWMgQ3VydmUtYmFzZWQgRGlmZmllLUhlbGxtYW4KKyAga2V5IGV4Y2hhbmdlLCB0aHJvdWdoIHRoZSBTU0xDb250ZXh0LnNldF9lY2RoX2N1cnZlKCkgbWV0aG9kIGFuZCB0aGUKKyAgc3NsLk9QX1NJTkdMRV9FQ0RIX1VTRSBvcHRpb24uCisKKy0gSXNzdWUgIzEzNjM1OiBBZGQgc3NsLk9QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRSwgc28gdGhhdCBTU0wgc2VydmVycworICBjaG9vc2UgdGhlIGNpcGhlciBiYXNlZCBvbiB0aGVpciBvd24gcHJlZmVyZW5jZXMsIHJhdGhlciB0aGFuIG9uIHRoZQorICBjbGllbnQncy4KKworLSBJc3N1ZSAjMTE4MTM6IEZpeCBpbnNwZWN0LmdldGF0dHJfc3RhdGljIGZvciBtb2R1bGVzLiBQYXRjaCBieSBBbmRyZWFzCisgIFN0w7xocmsuCisKKy0gSXNzdWUgIzc1MDI6IEZpeCBlcXVhbGl0eSBjb21wYXJpc29uIGZvciBEb2NUZXN0Q2FzZSBpbnN0YW5jZXMuICBQYXRjaCBieQorICBDw6lkcmljIEtyaWVyLgorCistIElzc3VlICMxMTg3MDogdGhyZWFkaW5nOiBQcm9wZXJseSByZWluaXRpYWxpemUgdGhyZWFkcyBpbnRlcm5hbCBsb2NrcyBhbmQKKyAgY29uZGl0aW9uIHZhcmlhYmxlcyB0byBhdm9pZCBkZWFkbG9ja3MgaW4gY2hpbGQgcHJvY2Vzc2VzLgorCistIElzc3VlICM4MDM1OiB1cmxsaWI6IEZpeCBhIGJ1ZyB3aGVyZSB0aGUgY2xpZW50IGNvdWxkIHJlbWFpbiBzdHVjayBhZnRlciBhCisgIHJlZGlyZWN0aW9uIG9yIGFuIGVycm9yLgorCistIElzc3VlICMxMzU2MDogb3Muc3RyZXJyb3IoKSBub3cgdXNlcyB0aGUgY3VycmVudCBsb2NhbGUgZW5jb2RpbmcgaW5zdGVhZCBvZgorICBVVEYtOC4KKworLSBJc3N1ZSAjODM3MzogVGhlIGZpbGVzeXN0ZW0gcGF0aCBvZiBBRl9VTklYIHNvY2tldHMgbm93IHVzZXMgdGhlIGZpbGVzeXN0ZW0KKyAgZW5jb2RpbmcgYW5kIHRoZSBzdXJyb2dhdGVlc2NhcGUgZXJyb3IgaGFuZGxlciwgcmF0aGVyIHRoYW4gVVRGLTguICBQYXRjaAorICBieSBEYXZpZCBXYXRzb24uCisKKy0gSXNzdWUgIzEwMzUwOiBSZWFkIGFuZCBzYXZlIGVycm5vIGJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQKKyAgb3ZlcndyaXRlIGl0LiAgT3JpZ2luYWwgcGF0Y2ggYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KKworLSBJc3N1ZSAjMTE2MTA6IEludHJvZHVjZSBhIG1vcmUgZ2VuZXJhbCB3YXkgdG8gZGVjbGFyZSBhYnN0cmFjdCBwcm9wZXJ0aWVzLgorCistIElzc3VlICMxMzU5MTogQSBidWcgaW4gaW1wb3J0bGliIGhhcyBiZWVuIGZpeGVkIHRoYXQgY2F1c2VkIGltcG9ydF9tb2R1bGUKKyAgdG8gbG9hZCBhIG1vZHVsZSB0d2ljZS4KKworLSBJc3N1ZSAjNDYyNTogSWYgSURMRSBjYW5ub3Qgd3JpdGUgdG8gaXRzIHJlY2VudCBmaWxlIG9yIGJyZWFrcG9pbnQgZmlsZXMsCisgIGRpc3BsYXkgYSBtZXNzYWdlIHBvcHVwIGFuZCBjb250aW51ZSByYXRoZXIgdGhhbiBjcmFzaC4gIE9yaWdpbmFsIHBhdGNoIGJ5CisgIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxMzQ0OSBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbWV0aG9kIGhhcyBhIG5ldyAiYmxvY2tpbmciIHBhcmFtZXRlciB3aGljaAorICB3aGVuIHNldCB0byBGYWxzZSBtYWtlcyBydW4oKSBleGVjdXRlIHRoZSBzY2hlZHVsZWQgZXZlbnRzIGR1ZSB0byBleHBpcmUKKyAgc29vbmVzdCAoaWYgYW55KSBhbmQgdGhlbiByZXR1cm4uICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2zDoC4KKworLSBJc3N1ZSAjODY4NCBzY2hlZC5zY2hlZHVsZXIgY2xhc3MgY2FuIGJlIHNhZmVseSB1c2VkIGluIG11bHRpLXRocmVhZGVkCisgIGVudmlyb25tZW50cy4gIFBhdGNoIGJ5IEpvc2lhaCBDYXJsc29uIGFuZCBHaWFtcGFvbG8gUm9kb2zDoC4KKworLSBBbGlhcyByZXNvdXJjZS5lcnJvciB0byBPU0Vycm9yIGFsYSBQRVAgMzE1MS4KKworLSBJc3N1ZSAjNTY4OTogQWRkIHN1cHBvcnQgZm9yIGx6bWEgY29tcHJlc3Npb24gdG8gdGhlIHRhcmZpbGUgbW9kdWxlLgorCistIElzc3VlICMxMzI0ODogVHVybiAzLjIncyBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIGludG8gMy4zJ3MKKyAgRGVwcmVjYXRpb25XYXJuaW5nLiAgSXQgY292ZXJzICdjZ2kuZXNjYXBlJywgJ2ltcG9ydGxpYi5hYmMuUHlMb2FkZXInLAorICAnaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlcicsICdubnRwbGliLk5OVFAueGd0aXRsZScsICdubnRwbGliLk5OVFAueHBhdGgnLAorICBhbmQgcHJpdmF0ZSBhdHRyaWJ1dGVzIG9mICdzbXRwZC5TTVRQQ2hhbm5lbCcuCisKKy0gSXNzdWUgIzU5MDUsICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKKyAgZW5jb2RpbmcsIGluc3RlYWQgb2YgVVRGLTgsIGlmIHRoZSB3Y3NmdGltZSgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzg2NDE6IFVwZGF0ZSBJRExFIDMgc3ludGF4IGNvbG9yaW5nIHRvIHJlY29nbml6ZSBiIi4uIiBhbmQgbm90IHUiLi4iLgorICBQYXRjaCBieSBUYWwgRWluYXQuCisKKy0gSXNzdWUgIzEzNDY0OiBBZGQgYSByZWFkaW50bygpIG1ldGhvZCB0byBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuICBQYXRjaAorICBieSBKb24gS3Vobi4KKworLSB0YXJmaWxlLnB5OiBDb3JyZWN0bHkgZGV0ZWN0IGJ6aXAyIGNvbXByZXNzZWQgc3RyZWFtcyB3aXRoIGJsb2Nrc2l6ZXMKKyAgb3RoZXIgdGhhbiA5MDBrLgorCistIElzc3VlICMxMzQzOTogRml4IG1hbnkgZXJyb3JzIGluIHR1cnRsZSBkb2NzdHJpbmdzLgorCistIElzc3VlICM2NzE1OiBBZGQgYSBtb2R1bGUgJ2x6bWEnIGZvciBjb21wcmVzc2lvbiB1c2luZyB0aGUgTFpNQSBhbGdvcml0aG0uCisgIFRoYW5rcyB0byBQZXIgw5h5dmluZCBLYXJsc2VuIGZvciB0aGUgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTM0ODc6IE1ha2UgaW5zcGVjdC5nZXRtb2R1bGUgcm9idXN0IGFnYWluc3QgY2hhbmdlcyBkb25lIHRvCisgIHN5cy5tb2R1bGVzIHdoaWxlIGl0IGlzIGl0ZXJhdGluZyBvdmVyIGl0LgorCistIElzc3VlICMxMjYxODogRml4IGEgYnVnIHRoYXQgcHJldmVudGVkIHB5X2NvbXBpbGUgZnJvbSBjcmVhdGluZyBieXRlCisgIGNvbXBpbGVkIGZpbGVzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gIEluaXRpYWwgcGF0Y2ggYnkgU2pvZXJkIGRlIFZyaWVzLgorCistIElzc3VlICMxMzQ0NDogV2hlbiBzdGRvdXQgaGFzIGJlZW4gY2xvc2VkIGV4cGxpY2l0bHksIHdlIHNob3VsZCBub3QgYXR0ZW1wdAorICB0byBmbHVzaCBpdCBhdCBzaHV0ZG93biBhbmQgcHJpbnQgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzEyNTY3OiBUaGUgY3Vyc2VzIG1vZHVsZSB1c2VzIFVuaWNvZGUgZnVuY3Rpb25zIGZvciBVbmljb2RlIGFyZ3VtZW50cworICB3aGVuIGl0IGlzIGxpbmtlZCB0byB0aGUgbmN1cnNlcyBsaWJyYXJ5LiBJdCBlbmNvZGVzIGFsc28gVW5pY29kZSBzdHJpbmdzIHRvCisgIHRoZSBsb2NhbGUgZW5jb2RpbmcgaW5zdGVhZCBvZiBVVEYtOC4KKworLSBJc3N1ZSAjMTI4NTY6IEVuc3VyZSBjaGlsZCBwcm9jZXNzZXMgZG8gbm90IGluaGVyaXQgdGhlIHBhcmVudCdzIHJhbmRvbQorICBzZWVkIGZvciBmaWxlbmFtZSBnZW5lcmF0aW9uIGluIHRoZSB0ZW1wZmlsZSBtb2R1bGUuICBQYXRjaCBieSBCcmlhbgorICBIYXJyaW5nLgorCistIElzc3VlICM5OTU3OiBTcG9vbGVkVGVtcG9yYXJ5RmlsZS50cnVuY2F0ZSgpIG5vdyBhY2NlcHRzIGFuIG9wdGlvbmFsIHNpemUKKyAgcGFyYW1ldGVyLCBhcyBvdGhlciBmaWxlLWxpa2Ugb2JqZWN0cy4gIFBhdGNoIGJ5IFJ5YW4gS2VsbHkuCisKKy0gSXNzdWUgIzEzNDU4OiBGaXggYSBtZW1vcnkgbGVhayBpbiB0aGUgc3NsIG1vZHVsZSB3aGVuIGRlY29kaW5nIGEKKyAgY2VydGlmaWNhdGUgd2l0aCBhIHN1YmplY3RBbHROYW1lLiAgUGF0Y2ggYnkgUm9iZXJ0IFhpYW8uCisKKy0gSXNzdWUgIzEzNDE1OiBvcy51bnNldGVudigpIGRvZXNuJ3QgaWdub3JlIGVycm9ycyBhbnltb3JlLgorCistIElzc3VlICMxMzI0NTogc2NoZWQuc2NoZWR1bGVyIGNsYXNzIGNvbnN0cnVjdG9yJ3MgdGltZWZ1bmMgYW5kCisgIGRlbGF5ZnVuY3QgcGFyYW1ldGVycyBhcmUgbm93IG9wdGlvbmFsLgorICBzY2hlZHVsZXIuZW50ZXIgYW5kIHNjaGVkdWxlci5lbnRlcmFicyBtZXRob2RzIGdhaW5lZCBhIG5ldyBrd2FyZ3MgcGFyYW1ldGVyLgorICBQYXRjaCBjb250cmlidXRlZCBieSBDaHJpcyBDbGFyay4KKworLSBJc3N1ZSAjMTIzMjg6IFVuZGVyIFdpbmRvd3MsIHJlZmFjdG9yIGhhbmRsaW5nIG9mIEN0cmwtQyBldmVudHMgYW5kCisgIG1ha2UgX211bHRpcHJvY2Vzc2luZy53aW4zMi5XYWl0Rm9yTXVsdGlwbGVPYmplY3RzIGludGVycnVwdGlibGUgd2hlbgorICB0aGUgd2FpdF9mbGFnIHBhcmFtZXRlciBpcyBmYWxzZS4gIFBhdGNoIGJ5IHNidC4KKworLSBJc3N1ZSAjMTMzMjI6IEZpeCBCdWZmZXJlZFdyaXRlci53cml0ZSgpIHRvIGVuc3VyZSB0aGF0IEJsb2NraW5nSU9FcnJvciBpcworICByYWlzZWQgd2hlbiB0aGUgd3JhcHBlZCByYXcgZmlsZSBpcyBub24tYmxvY2tpbmcgYW5kIHRoZSB3cml0ZSB3b3VsZCBibG9jay4KKyAgUHJldmlvdXMgY29kZSBhc3N1bWVkIHRoYXQgdGhlIHJhdyB3cml0ZSgpIHdvdWxkIHJhaXNlIEJsb2NraW5nSU9FcnJvciwgYnV0CisgIFJhd0lPQmFzZS53cml0ZSgpIGlzIGRlZmluZWQgdG8gcmV0dXJuZWQgTm9uZSB3aGVuIHRoZSBjYWxsIHdvdWxkIGJsb2NrLgorICBQYXRjaCBieSBzYnQuCisKKy0gSXNzdWUgIzEzMzU4OiBIVE1MUGFyc2VyIG5vdyBjYWxscyBoYW5kbGVfZGF0YSBvbmx5IG9uY2UgZm9yIGVhY2ggQ0RBVEEuCisKKy0gSXNzdWUgIzQxNDc6IG1pbmlkb20ncyB0b3ByZXR0eXhtbCBubyBsb25nZXIgYWRkcyB3aGl0ZXNwYWNlIGFyb3VuZCBhIHRleHQKKyAgbm9kZSB3aGVuIGl0IGlzIHRoZSBvbmx5IGNoaWxkIG9mIGFuIGVsZW1lbnQuICBJbml0aWFsIHBhdGNoIGJ5IERhbgorICBLZW5pZ3NiZXJnLgorCistIElzc3VlICMxMzM3NDogVGhlIFdpbmRvd3MgYnl0ZXMgQVBJIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gdGhlIG9zIG1vZHVsZS4gVXNlCisgIFVuaWNvZGUgZmlsZW5hbWVzIGluc3RlYWQgb2YgYnl0ZXMgZmlsZW5hbWVzIHRvIG5vdCBkZXBlbmQgb24gdGhlIEFOU0kgY29kZQorICBwYWdlIGFueW1vcmUgYW5kIHRvIHN1cHBvcnQgYW55IGZpbGVuYW1lLgorCistIElzc3VlICMxMzI5NzogVXNlIGJ5dGVzIHR5cGUgdG8gc2VuZCBhbmQgcmVjZWl2ZSBiaW5hcnkgZGF0YSB0aHJvdWdoIFhNTFJQQy4KKworLSBJc3N1ZSAjNjM5NzogU3VwcG9ydCAiL2Rldi9wb2xsIiBwb2xsaW5nIG9iamVjdHMgaW4gc2VsZWN0IG1vZHVsZSwKKyAgdW5kZXIgU29sYXJpcyAmIGRlcml2YXRpdmVzLgorCistIElzc3VlcyAjMTc0NTc2MSwgIzc1NTY3MCwgIzEzMzU3LCAjMTI2MjksICMxMjAwMzEzOiBIVE1MUGFyc2VyIG5vdyBjb3JyZWN0bHkKKyAgaGFuZGxlcyBub24tdmFsaWQgYXR0cmlidXRlcywgaW5jbHVkaW5nIGFkamFjZW50IGFuZCB1bnF1b3RlZCBhdHRyaWJ1dGVzLgorCistIElzc3VlICMxMzE5MzogRml4IGRpc3R1dGlscy5maWxlbGlzdC5GaWxlTGlzdCBhbmQgcGFja2FnaW5nLm1hbmlmZXN0Lk1hbmlmZXN0CisgIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEzMzg0OiBSZW1vdmUgdW5uZWNlc3NhcnkgX19mdXR1cmVfXyBpbXBvcnQgaW4gTGliL3JhbmRvbS5weQorCistIElzc3VlICMxMzE0OTogU3BlZWQgdXAgYXBwZW5kLW9ubHkgU3RyaW5nSU8gb2JqZWN0cy4KKworLSBJc3N1ZSAjMTMzNzM6IG11bHRpcHJvY2Vzc2luZy5RdWV1ZS5nZXQoKSBjb3VsZCBzb21ldGltZXMgYmxvY2sgaW5kZWZpbml0ZWx5CisgIHdoZW4gY2FsbGVkIHdpdGggYSB0aW1lb3V0LiAgUGF0Y2ggYnkgQXJuYXVkIFlzbWFsLgorCistIElzc3VlICMxMzI1NDogRml4IE1haWxkaXIgaW5pdGlhbGl6YXRpb24gc28gdGhhdCBtYWlsZGlyIGNvbnRlbnRzCisgIGFyZSByZWFkIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMzA2NzogbG9jYWxlLnNldGxvY2FsZSgpIG5vdyByYWlzZXMgVHlwZUVycm9yIGlmIHRoZSBzZWNvbmQKKyAgYXJndW1lbnQgaXMgYW4gaW52YWxpZCBpdGVyYWJsZS4gSXRzIGRvY3VtZW50YXRpb24gYW5kIGRvY3N0cmluZworICB3ZXJlIGFsc28gdXBkYXRlZC4gSW5pdGlhbCBwYXRjaCBieSBKeXJraSBQdWxsaWFpbmVuLgorCistIElzc3VlICMxMzE0MDogRml4IHRoZSBkYWVtb25fdGhyZWFkcyBhdHRyaWJ1dGUgb2YgVGhyZWFkaW5nTWl4SW4uCisKKy0gSXNzdWUgIzEzMzM5OiBGaXggY29tcGlsZSBlcnJvciBpbiBwb3NpeG1vZHVsZS5jIGR1ZSB0byBtaXNzaW5nIHNlbWljb2xvbi4KKyAgVGhhbmtzIHRvIFJvYmVydCBYaWFvLgorCistIEJ5dGUgY29tcGlsYXRpb24gaW4gcGFja2FnaW5nIGlzIG5vdyBpc29sYXRlZCBmcm9tIHRoZSBjYWxsaW5nIFB5dGhvbiAtQiBvcgorICAtTyBvcHRpb25zLCBpbnN0ZWFkIG9mIGJlaW5nIGRpc2FsbG93ZWQgdW5kZXIgLUIgb3IgYnVnZ3kgdW5kZXIgLU8uCisKKy0gSXNzdWUgIzEwNTcwOiBjdXJzZXMucHV0cCgpIGFuZCBjdXJzZXMudHBhcm0oKSBhcmUgbm93IGV4cGVjdGluZyBhIGJ5dGUKKyAgc3RyaW5nLCBpbnN0ZWFkIG9mIGEgVW5pY29kZSBzdHJpbmcuCisKKy0gSXNzdWUgIzEzMjk1OiBodHRwLnNlcnZlciBub3cgcHJvZHVjZXMgdmFsaWQgSFRNTCA0LjAxIHN0cmljdC4KKworLSBJc3N1ZSAjMjg5MjogcHJlc2VydmUgaXRlcnBhcnNlIGV2ZW50cyBpbiBjYXNlIG9mIFN5bnRheEVycm9yLgorCistIElzc3VlICMxMzI4NzogdXJsbGliLnJlcXVlc3QgYW5kIHVybGxpYi5lcnJvciBub3cgY29udGFpbnMgYW4gX19hbGxfXworICBhdHRyaWJ1dGUgdG8gZXhwb3NlIG9ubHkgcmVsZXZhbnQgY2xhc3NlcyBhbmQgZnVuY3Rpb25zLiAgUGF0Y2ggYnkgRmxvcmVudAorICBYaWNsdW5hLgorCistIElzc3VlICM2NzA2NjQ6IEZpeCBIVE1MUGFyc2VyIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIGNvbnRlbnQgb2YKKyAgYGA8c2NyaXB0Pi4uLjwvc2NyaXB0PmBgIGFuZCBgYDxzdHlsZT4uLi48L3N0eWxlPmBgLgorCistIElzc3VlICMxMDgxNzogRml4IHVybHJldHJpZXZlIGZ1bmN0aW9uIHRvIHJhaXNlIENvbnRlbnRUb29TaG9ydEVycm9yIGV2ZW4KKyAgd2hlbiByZXBvcnRob29rIGlzIE5vbmUuIFBhdGNoIGJ5IEp5cmtpIFB1bGxpYWluZW4uCisKKy0gSXNzdWUgIzEzMjk2OiBGaXggSURMRSB0byBjbGVhciBjb21waWxlIF9fZnV0dXJlX18gZmxhZ3Mgb24gc2hlbGwgcmVzdGFydC4KKyAgKFBhdGNoIGJ5IFJvZ2VyIFNlcnd5KQorCistIEZpeCB0aGUgeG1scnBjLmNsaWVudCB1c2VyIGFnZW50IHRvIHJldHVybiBzb21ldGhpbmcgc2ltaWxhciB0bworICB1cmxsaWIucmVxdWVzdCB1c2VyIGFnZW50OiAiUHl0aG9uLXhtbHJwYy8zLjMiLgorCistIElzc3VlICMxMzI5MzogQmV0dGVyIGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gbWFyc2hhbCBieXRlcyB1c2luZworICB4bWxycGMuY2xpZW50LgorCistIElzc3VlICMxMzI5MTogTmFtZUVycm9yIGluIHhtbHJwYyBwYWNrYWdlLgorCistIElzc3VlICMxMzI1ODogVXNlIGNhbGxhYmxlKCkgYnVpbHQtaW4gaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuCisKKy0gSXNzdWUgIzEzMjczOiBmaXggYSBidWcgdGhhdCBwcmV2ZW50ZWQgSFRNTFBhcnNlciB0byBwcm9wZXJseSBkZXRlY3Qgc29tZQorICB0YWdzIHdoZW4gc3RyaWN0PUZhbHNlLgorCistIElzc3VlICMxMTE4MzogQWRkIGZpbmVyLWdyYWluZWQgZXhjZXB0aW9ucyB0byB0aGUgc3NsIG1vZHVsZSwgc28gdGhhdAorICB5b3UgZG9uJ3QgaGF2ZSB0byBpbnNwZWN0IHRoZSBleGNlcHRpb24ncyBhdHRyaWJ1dGVzIGluIHRoZSBjb21tb24gY2FzZS4KKworLSBJc3N1ZSAjMTMyMTY6IEFkZCBjcDY1MDAxIGNvZGVjLCB0aGUgV2luZG93cyBVVEYtOCAoQ1BfVVRGOCkuCisKKy0gSXNzdWUgIzEzMjI2OiBBZGQgUlRMRF94eHggY29uc3RhbnRzIHRvIHRoZSBvcyBtb2R1bGUuIFRoZXNlIGNvbnN0YW50cyBjYW4gYmUKKyAgdXNlZCB3aXRoIHN5cy5zZXRkbG9wZW5mbGFncygpLgorCistIElzc3VlICMxMDI3ODogQWRkIGNsb2NrX2dldHJlcygpLCBjbG9ja19nZXR0aW1lKCkgYW5kIENMT0NLX3h4eCBjb25zdGFudHMgdG8KKyAgdGhlIHRpbWUgbW9kdWxlLiB0aW1lLmNsb2NrX2dldHRpbWUodGltZS5DTE9DS19NT05PVE9OSUMpIHByb3ZpZGVzIGEKKyAgbW9ub3RvbmljIGNsb2NrCisKKy0gSXNzdWUgIzEwMzMyOiBtdWx0aXByb2Nlc3Npbmc6IGZpeCBhIHJhY2UgY29uZGl0aW9uIHdoZW4gYSBQb29sIGlzIGNsb3NlZAorICBiZWZvcmUgYWxsIHRhc2tzIGhhdmUgY29tcGxldGVkLgorCistIElzc3VlICMxMzI1NTogd3JvbmcgZG9jc3RyaW5ncyBpbiBhcnJheSBtb2R1bGUuCisKKy0gSXNzdWUgIzg1NDA6IFJlbW92ZSBkZXByZWNhdGVkIENvbnRleHQuX2NsYW1wIGF0dHJpYnV0ZSBpbiBEZWNpbWFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyMzU6IEFkZGVkIERlcHJlY2F0aW9uV2FybmluZyB0byBsb2dnaW5nLndhcm4oKSBtZXRob2QgYW5kIGZ1bmN0aW9uLgorCistIElzc3VlICM5MTY4OiBub3cgc210cGQgaXMgYWJsZSB0byBiaW5kIHByaXZpbGVnZWQgcG9ydC4KKworLSBJc3N1ZSAjMTI1Mjk6IGZpeCBjZ2kucGFyc2VfaGVhZGVyIGlzc3VlIG9uIHN0cmluZ3Mgd2l0aCBkb3VibGUtcXVvdGVzIGFuZAorICBzZW1pY29sb25zIHRvZ2V0aGVyLiBQYXRjaCBieSBCZW4gRGFybmVsbCBhbmQgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMjI3OiBmdW5jdG9vbHMubHJ1X2NhY2hlKCkgbm93IGhhcyBhbiBvcHRpb24gdG8gZGlzdGluZ3Vpc2gKKyAgY2FsbHMgd2l0aCBkaWZmZXJlbnQgYXJndW1lbnQgdHlwZXMuCisKKy0gSXNzdWUgIzYwOTA6IHppcGZpbGUgcmFpc2VzIGEgVmFsdWVFcnJvciB3aGVuIGEgZG9jdW1lbnQgd2l0aCBhIHRpbWVzdGFtcAorICBlYXJsaWVyIHRoYW4gMTk4MCBpcyBwcm92aWRlZC4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgUGV0cmkgTGVodGluZW4uCisKKy0gSXNzdWUgIzEzMTUwOiBzeXNjb25maWcgbm8gbG9uZ2VyIHBhcnNlcyB0aGUgTWFrZWZpbGUgYW5kIGNvbmZpZy5oIGZpbGVzCisgIHdoZW4gaW1wb3J0ZWQsIGluc3RlYWQgZG9pbmcgaXQgYXQgYnVpbGQgdGltZS4gIFRoaXMgbWFrZXMgaW1wb3J0aW5nCisgIHN5c2NvbmZpZyBmYXN0ZXIgYW5kIHJlZHVjZXMgUHl0aG9uIHN0YXJ0dXAgdGltZSBieSAyMCUuCisKKy0gSXNzdWUgIzEyNDQ4OiBzbXRwbGliIG5vdyBmbHVzaGVzIHN0ZG91dCB3aGlsZSBydW5uaW5nIGBgcHl0aG9uIC1tIHNtdHBsaWJgYAorICBpbiBvcmRlciB0byBkaXNwbGF5IHRoZSBwcm9tcHQgY29ycmVjdGx5LgorCistIElzc3VlICMxMjQ1NDogVGhlIG1haWxib3ggbW9kdWxlIGlzIG5vdyB1c2luZyBBU0NJSSwgaW5zdGVhZCBvZiB0aGUgbG9jYWxlCisgIGVuY29kaW5nLCB0byByZWFkIGFuZCB3cml0ZSAubWhfc2VxdWVuY2VzIGZpbGVzLgorCistIElzc3VlICMxMzE5NDogemxpYi5jb21wcmVzc29iaigpLmNvcHkoKSBhbmQgemxpYi5kZWNvbXByZXNzb2JqKCkuY29weSgpIGFyZQorICBub3cgYXZhaWxhYmxlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2NzMwMDc6IHVybGxpYi5yZXF1ZXN0IG5vdyBzdXBwb3J0cyBIRUFEIHJlcXVlc3QgdmlhIG5ldyBtZXRob2QgYXJndW1lbnQuCisgIFBhdGNoIGNvbnRyaWJ1dGlvbnMgYnkgRGF2aWQgU3RhbmVrLCBQYXRyaWNrIFdlc3RlcmhvZmYgYW5kIEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjMTIzODY6IHBhY2thZ2luZyBkb2VzIG5vdCBmYWlsIGFueW1vcmUgd2hlbiB3cml0aW5nIHRoZSBSRVNPVVJDRVMKKyAgZmlsZS4KKworLSBJc3N1ZSAjMTMxNTg6IEZpeCBkZWNvZGluZyBhbmQgZW5jb2Rpbmcgb2YgR05VIHRhciBzcGVjaWZpYyBiYXNlLTI1NiBudW1iZXIKKyAgZmllbGRzIGluIHRhcmZpbGUuCisKKy0gSXNzdWUgIzEzMDI1OiBtaW1ldHlwZXMgaXMgbm93IHJlYWRpbmcgTUlNRSB0eXBlcyB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcsCisgIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZy4KKworLSBJc3N1ZSAjMTA2NTM6IE9uIFdpbmRvd3MsIHVzZSBzdHJmdGltZSgpIGluc3RlYWQgb2Ygd2NzZnRpbWUoKSBiZWNhdXNlCisgIHdjc2Z0aW1lKCkgZG9lc24ndCBmb3JtYXQgdGltZSB6b25lIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTMxNTA6IFRoZSB0b2tlbml6ZSBtb2R1bGUgZG9lc24ndCBjb21waWxlIGxhcmdlIHJlZ3VsYXIgZXhwcmVzc2lvbnMKKyAgYXQgc3RhcnR1cCBhbnltb3JlLgorCistIElzc3VlICMxMTE3MTogRml4IGRpc3R1dGlscy5zeXNjb25maWcuZ2V0X21ha2VmaWxlX2ZpbGVuYW1lIHdoZW4gUHl0aG9uIHdhcworICBjb25maWd1cmVkIHdpdGggZGlmZmVyZW50IHByZWZpeCBhbmQgZXhlYy1wcmVmaXguCisKKy0gSXNzdWUgIzExMjU0OiBUZWFjaCBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyB0byBjb21waWxlIC5weWMgYW5kIC5weW8gZmlsZXMgaW4KKyAgUEVQIDMxNDctY29tcGxpYW50IF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzLgorCistIElzc3VlICM3MzY3OiBGaXggcGtndXRpbC53YWxrX3BhdGhzIHRvIHNraXAgZGlyZWN0b3JpZXMgd2hvc2UKKyAgY29udGVudHMgY2Fubm90IGJlIHJlYWQuCisKKy0gSXNzdWUgIzMxNjM6IFRoZSBzdHJ1Y3QgbW9kdWxlIGdldHMgbmV3IGZvcm1hdCBjaGFyYWN0ZXJzICduJyBhbmQgJ04nCisgIHN1cHBvcnRpbmcgQyBpbnRlZ2VyIHR5cGVzIGBgc3NpemVfdGBgIGFuZCBgYHNpemVfdGBgLCByZXNwZWN0aXZlbHkuCisKKy0gSXNzdWUgIzEzMDk5OiBGaXggc3FsaXRlMy5DdXJzb3IubGFzdHJvd2lkIHVuZGVyIGEgVHVya2lzaCBsb2NhbGUuCisgIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzEzMDg3OiBCdWZmZXJlZFJlYWRlci5zZWVrKCkgbm93IGFsd2F5cyByYWlzZXMgVW5zdXBwb3J0ZWRPcGVyYXRpb24KKyAgaWYgdGhlIHVuZGVybHlpbmcgcmF3IHN0cmVhbSBpcyB1bnNlZWthYmxlLCBldmVuIGlmIHRoZSBzZWVrIGNvdWxkIGJlCisgIHNhdGlzZmllZCB1c2luZyB0aGUgaW50ZXJuYWwgYnVmZmVyLiAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KKworLSBJc3N1ZSAjNzY4OTogQWxsb3cgcGlja2xpbmcgb2YgZHluYW1pY2FsbHkgY3JlYXRlZCBjbGFzc2VzIHdoZW4gdGhlaXIKKyAgbWV0YWNsYXNzIGlzIHJlZ2lzdGVyZWQgd2l0aCBjb3B5cmVnLiAgUGF0Y2ggYnkgTmljb2xhcyBNLiBUaGnDqXJ5IGFuZCBDcmFpZworICBDaXRyby4KKworLSBJc3N1ZSAjMTMwMzQ6IFdoZW4gZGVjb2Rpbmcgc29tZSBTU0wgY2VydGlmaWNhdGVzLCB0aGUgc3ViamVjdEFsdE5hbWUKKyAgZXh0ZW5zaW9uIGNvdWxkIGJlIHVucmVwb3J0ZWQuCisKKy0gSXNzdWUgIzk4NzE6IFByZXZlbnQgSURMRSAzIGNyYXNoIHdoZW4gZ2l2ZW4gYnl0ZSBzdGluZ3MKKyAgd2l0aCBpbnZhbGlkIGhleCBlc2NhcGUgc2VxdWVuY2VzLCBsaWtlIGInXHgwJy4KKyAgKE9yaWdpbmFsIHBhdGNoIGJ5IENsYXVkaXUgUG9wYS4pCisKKy0gSXNzdWUgIzEyMzA2OiBFeHBvc2UgdGhlIHJ1bnRpbWUgdmVyc2lvbiBvZiB0aGUgemxpYiBDIGxpYnJhcnkgYXMgYSBjb25zdGFudCwKKyAgWkxJQl9SVU5USU1FX1ZFUlNJT04sIGluIHRoZSB6bGliIG1vZHVsZS4gUGF0Y2ggYnkgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICMxMjk1OTogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwIHRvIGNvbGxlY3Rpb25zLl9fYWxsX18uCisKKy0gSXNzdWUgIzg5MzM6IGRpc3R1dGlscycgUEtHLUlORk8gZmlsZXMgYW5kIHBhY2thZ2luZydzIE1FVEFEQVRBIGZpbGVzIHdpbGwKKyAgbm93IGNvcnJlY3RseSByZXBvcnQgTWV0YWRhdGEtVmVyc2lvbjogMS4xIGluc3RlYWQgb2YgMS4wIGlmIGEgQ2xhc3NpZmllciBvcgorICBEb3dubG9hZC1VUkwgZmllbGQgaXMgcHJlc2VudC4KKworLSBJc3N1ZSAjMTI1Njc6IEFkZCBjdXJzZXMudW5nZXRfd2NoKCkgZnVuY3Rpb24uIFB1c2ggYSBjaGFyYWN0ZXIgc28gdGhlIG5leHQKKyAgZ2V0X3djaCgpIHdpbGwgcmV0dXJuIGl0LgorCistIElzc3VlICM5NTYxOiBkaXN0dXRpbHMgYW5kIHBhY2thZ2luZyBub3cgd3JpdGVzIGVnZy1pbmZvIGZpbGVzIHVzaW5nIFVURi04LAorICBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzgyODY6IFRoZSBkaXN0dXRpbHMgY29tbWFuZCBzZGlzdCB3aWxsIHByaW50IGEgd2FybmluZyBtZXNzYWdlIGluc3RlYWQKKyAgb2YgY3Jhc2hpbmcgd2hlbiBhbiBpbnZhbGlkIHBhdGggaXMgZ2l2ZW4gaW4gdGhlIG1hbmlmZXN0IHRlbXBsYXRlLgorCistIElzc3VlICMxMjg0MTogdGFyZmlsZSB1bm5lY2Vzc2FyaWx5IGNoZWNrZWQgdGhlIGV4aXN0ZW5jZSBvZiBudW1lcmljYWwgdXNlcgorICBhbmQgZ3JvdXAgaWRzIG9uIGV4dHJhY3Rpb24uIElmIG9uZSBvZiB0aGVtIGRpZCBub3QgZXhpc3QgdGhlIHJlc3BlY3RpdmUgaWQKKyAgb2YgdGhlIGN1cnJlbnQgdXNlciAoaS5lLiByb290KSB3YXMgdXNlZCBmb3IgdGhlIGZpbGUgYW5kIG93bmVyc2hpcAorICBpbmZvcm1hdGlvbiB3YXMgbG9zdC4KKworLSBJc3N1ZSAjMTI4ODg6IEZpeCBhIGJ1ZyBpbiBIVE1MUGFyc2VyLnVuZXNjYXBlIHRoYXQgcHJldmVudGVkIGl0IHRvIGVzY2FwZQorICBtb3JlIHRoYW4gMTI4IGVudGl0aWVzLiAgUGF0Y2ggYnkgUGV0ZXIgT3R0ZW4uCisKKy0gSXNzdWUgIzEyODc4OiBFeHBvc2UgYSBfX2RpY3RfXyBhdHRyaWJ1dGUgb24gaW8uSU9CYXNlIGFuZCBpdHMgc3ViY2xhc3Nlcy4KKworLSBJc3N1ZSAjMTI2MzY6IElETEUgcmVhZHMgdGhlIGNvZGluZyBjb29raWUgd2hlbiBleGVjdXRpbmcgYSBQeXRob24gc2NyaXB0LgorCistIElzc3VlICMxMjQ5NDogT24gZXJyb3IsIGNhbGwoKSwgY2hlY2tfY2FsbCgpLCBjaGVja19vdXRwdXQoKSBhbmQKKyAgZ2V0c3RhdHVzb3V0cHV0KCkgZnVuY3Rpb25zIG9mIHRoZSBzdWJwcm9jZXNzIG1vZHVsZSBub3cga2lsbCB0aGUgcHJvY2VzcywKKyAgcmVhZCBpdHMgc3RhdHVzICh0byBhdm9pZCB6b21iaXMpIGFuZCBjbG9zZSBwaXBlcy4KKworLSBJc3N1ZSAjMTI3MjA6IEV4cG9zZSBsb3ctbGV2ZWwgTGludXggZXh0ZW5kZWQgZmlsZSBhdHRyaWJ1dGUgZnVuY3Rpb25zIGluIG9zLgorCistIElzc3VlICMxMDk0NjogVGhlIGRpc3R1dGlscyBjb21tYW5kcyBiZGlzdF9kdW1iLCBiZGlzdF93aW5pbnN0IGFuZCBiZGlzdF9tc2kKKyAgbm93IHJlc3BlY3QgYSAtLXNraXAtYnVpbGQgb3B0aW9uIGdpdmVuIHRvIGJkaXN0LiAgVGhlIHBhY2thZ2luZyBjb21tYW5kcworICB3ZXJlIGZpeGVkIHRvby4KKworLSBJc3N1ZSAjMTI4NDc6IEZpeCBhIGNyYXNoIHdpdGggbmVnYXRpdmUgUFVUIGFuZCBMT05HX0JJTlBVVCBhcmd1bWVudHMgaW4KKyAgdGhlIEMgcGlja2xlIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxMTU2NDogQXZvaWQgY3Jhc2hlcyB3aGVuIHRyeWluZyB0byBwaWNrbGUgaHVnZSBvYmplY3RzIG9yIGNvbnRhaW5lcnMKKyAgKG1vcmUgdGhhbiAyKiozMSBpdGVtcykuICBJbnN0ZWFkLCBpbiBtb3N0IGNhc2VzLCBhbiBPdmVyZmxvd0Vycm9yIGlzIHJhaXNlZC4KKworLSBJc3N1ZSAjMTIyODc6IEZpeCBhIHN0YWNrIGNvcnJ1cHRpb24gaW4gb3NzYXVkaW9kZXYgbW9kdWxlIHdoZW4gdGhlIEZEIGlzCisgIGdyZWF0ZXIgdGhhbiBGRF9TRVRTSVpFLgorCistIElzc3VlICMxMjgzOTogRml4IGNyYXNoIGluIHpsaWIgbW9kdWxlIGR1ZSB0byB2ZXJzaW9uIG1pc21hdGNoLgorICBGaXggYnkgUmljaGFyZCBNLiBUZXcuCisKKy0gSXNzdWUgIzk5MjM6IFRoZSBtYWlsY2FwIG1vZHVsZSBub3cgY29ycmVjdGx5IHVzZXMgdGhlIHBsYXRmb3JtIHBhdGgKKyAgc2VwYXJhdG9yIGZvciB0aGUgTUFJTENBUCBlbnZpcm9ubWVudCB2YXJpYWJsZSBvbiBub24tUE9TSVggcGxhdGZvcm1zLgorCistIElzc3VlICMxMjgzNTogRm9sbG93IHVwIHRvICM2NTYwIHRoYXQgdW5jb25kaXRpb25hbGx5IHByZXZlbnRzIHVzZSBvZiB0aGUKKyAgdW5lbmNyeXB0ZWQgc2VuZG1zZy9yZWN2bXNnIEFQSXMgb24gU1NMIHdyYXBwZWQgc29ja2V0cy4gUGF0Y2ggYnkgRGF2aWQKKyAgV2F0c29uLgorCistIElzc3VlICMxMjgwMzogU1NMQ29udGV4dC5sb2FkX2NlcnRfY2hhaW4oKSBub3cgYWNjZXB0cyBhIHBhc3N3b3JkIGFyZ3VtZW50CisgIHRvIGJlIHVzZWQgaWYgdGhlIHByaXZhdGUga2V5IGlzIGVuY3J5cHRlZC4gIFBhdGNoIGJ5IEFkYW0gU2ltcGtpbnMuCisKKy0gSXNzdWUgIzExNjU3OiBGaXggc2VuZGluZyBmaWxlIGRlc2NyaXB0b3JzIG92ZXIgMjU1IG92ZXIgYSBtdWx0aXByb2Nlc3NpbmcKKyAgUGlwZS4KKworLSBJc3N1ZSAjMTI4MTE6IHRhYm5hbm55LmNoZWNrKCkgbm93IHByb21wdGx5IGNsb3NlcyBjaGVja2VkIGZpbGVzLiBQYXRjaCBieQorICBBbnRob255IEJyaWdncy4KKworLSBJc3N1ZSAjNjU2MDogVGhlIHNlbmRtc2cvcmVjdm1zZyBBUEkgaXMgbm93IGV4cG9zZWQgYnkgdGhlIHNvY2tldCBtb2R1bGUKKyAgd2hlbiBwcm92aWRlZCBieSB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybSwgc3VwcG9ydGluZyBwcm9jZXNzaW5nIG9mCisgIGFuY2lsbGFyeSBkYXRhIGluIHB1cmUgUHl0aG9uIGNvZGUuIFBhdGNoIGJ5IERhdmlkIFdhdHNvbiBhbmQgSGVpa28gV3VuZHJhbS4KKworLSBJc3N1ZSAjMTIzMjY6IE9uIExpbnV4LCBzeXMucGxhdGZvcm0gZG9lc24ndCBjb250YWluIHRoZSBtYWpvciB2ZXJzaW9uCisgIGFueW1vcmUuIEl0IGlzIG5vdyBhbHdheXMgJ2xpbnV4JywgaW5zdGVhZCBvZiAnbGludXgyJyBvciAnbGludXgzJyBkZXBlbmRpbmcKKyAgb24gdGhlIExpbnV4IHZlcnNpb24gdXNlZCB0byBidWlsZCBQeXRob24uCisKKy0gSXNzdWUgIzEyMjEzOiBGaXggYSBidWZmZXJpbmcgYnVnIHdpdGggaW50ZXJsZWF2ZWQgcmVhZHMgYW5kIHdyaXRlcyB0aGF0CisgIGNvdWxkIGFwcGVhciBvbiBCdWZmZXJlZFJhbmRvbSBzdHJlYW1zLgorCistIElzc3VlICMxMjc3ODogUmVkdWNlIG1lbW9yeSBjb25zdW1wdGlvbiB3aGVuIEpTT04tZW5jb2RpbmcgYSBsYXJnZQorICBjb250YWluZXIgb2YgbWFueSBzbWFsbCBvYmplY3RzLgorCistIElzc3VlICMxMjY1MDogRml4IGEgcmFjZSBjb25kaXRpb24gd2hlcmUgYSBzdWJwcm9jZXNzLlBvcGVuIGNvdWxkIGxlYWsKKyAgcmVzb3VyY2VzIChGRC96b21iaWUpIHdoZW4ga2lsbGVkIGF0IHRoZSB3cm9uZyB0aW1lLgorCistIElzc3VlICMxMjc0NDogRml4IGluZWZmaWNpZW50IHJlcHJlc2VudGF0aW9uIG9mIGludGVnZXJzIGJldHdlZW4gMioqMzEgYW5kCisgIDIqKjYzIG9uIHN5c3RlbXMgd2l0aCBhIDY0LWJpdCBDICJsb25nIi4KKworLSBJc3N1ZSAjMTI2NDY6IEFkZCBhbiAnZW9mJyBhdHRyaWJ1dGUgdG8gemxpYi5EZWNvbXByZXNzLCB0byBtYWtlIGl0IGVhc2llciB0bworICBkZXRlY3QgdHJ1bmNhdGVkIGlucHV0IHN0cmVhbXMuCisKKy0gSXNzdWUgIzExNTEzOiBGaXggZXhjZXB0aW9uIGhhbmRsaW5nIGBgdGFyZmlsZS5UYXJGaWxlLmd6b3BlbigpYGAgd2hlbgorICB0aGUgZmlsZSBjYW5ub3QgYmUgb3BlbmVkLgorCistIElzc3VlICMxMjY4NzogRml4IGEgcG9zc2libGUgYnVmZmVyaW5nIGJ1ZyB3aGVuIHVucGlja2xpbmcgdGV4dCBtb2RlCisgIChwcm90b2NvbCAwLCBtb3N0bHkpIHBpY2tsZXMuCisKKy0gSXNzdWUgIzEwMDg3OiBGaXggdGhlIGh0bWwgb3V0cHV0IGZvcm1hdCBvZiB0aGUgY2FsZW5kYXIgbW9kdWxlLgorCistIElzc3VlICMxMjU0MDogUHJldmVudCB6b21iaWUgSURMRSBwcm9jZXNzZXMgb24gV2luZG93cyBkdWUgdG8gY2hhbmdlcworICBpbiBvcy5raWxsKCkuCisKKy0gSXNzdWUgIzEzMTIxOiBhZGQgc3VwcG9ydCBmb3IgaW5wbGFjZSBtYXRoIG9wZXJhdG9ycyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIEFkZCBzdXBwb3J0IGZvciB1bmFyeSBwbHVzIGFuZCB1bmFyeSBtaW51cyB0byBjb2xsZWN0aW9ucy5Db3VudGVyLgorCistIElzc3VlICMxMjY4MzogdXJscGFyc2UgdXBkYXRlZCB0byBpbmNsdWRlIHN2biBhcyBzY2hlbWVzIHRoYXQgdXNlcyByZWxhdGl2ZQorICBwYXRocy4gKHN2biBmcm9tIDEuNSBvbndhcmRzIHN1cHBvcnQgcmVsYXRpdmUgcGF0aCkuCisKKy0gSXNzdWUgIzEyNjU1OiBFeHBvc2UgZnVuY3Rpb25zIGZyb20gc2NoZWQuaCBpbiB0aGUgb3MgbW9kdWxlOiBzY2hlZF95aWVsZCgpLAorICBzY2hlZF9zZXRzY2hlZHVsZXIoKSwgc2NoZWRfZ2V0c2NoZWR1bGVyKCksIHNjaGVkX3NldHBhcmFtKCksCisgIHNjaGVkX2dldF9taW5fcHJpb3JpdHkoKSwgc2NoZWRfZ2V0X21heF9wcmlvcml0eSgpLCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwoKSwKKyAgc2NoZWRfZ2V0YWZmaW5pdHkoKSwgc2NoZWRfc2V0YWZmaW5pdHkoKS4KKworLSBBZGQgVGhyZWFkRXJyb3IgdG8gdGhyZWFkaW5nLl9fYWxsX18uCisKKy0gSXNzdWVzICMxMTEwNCwgIzg2ODg6IEZpeCB0aGUgYmVoYXZpb3Igb2YgZGlzdHV0aWxzJyBzZGlzdCBjb21tYW5kIHdpdGgKKyAgbWFudWFsbHktbWFpbnRhaW5lZCBNQU5JRkVTVCBmaWxlcy4KKworLSBJc3N1ZSAjMTEyODE6IHNtdHBsaWIuU1RNUCBnZXRzIHNvdXJjZV9hZGRyZXNzIHBhcmFtZXRlciwgd2hpY2ggYWRkcyB0aGUKKyAgYWJpbGl0eSB0byBiaW5kIHRvIHNwZWNpZmljIHNvdXJjZSBhZGRyZXNzIG9uIGEgbWFjaGluZSB3aXRoIG11bHRpcGxlCisgIGludGVyZmFjZXMuIFBhdGNoIGJ5IFBhdWxvIFNjYXJkaW5lLgorCistIElzc3VlICMxMjQ2NDogdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5LmNsZWFudXAoKSBzaG91bGQgbm90IGZvbGxvdworICBzeW1saW5rczogZml4IGl0LiBQYXRjaCBieSBQZXRyaSBMZWh0aW5lbi4KKworLSBJc3N1ZSAjODg4NzogInB5ZG9jIHNvbWVidWlsdGluLnNvbWVtZXRob2QiIChvciBoZWxwKCdzb21lYnVpbHRpbi5zb21lbWV0aG9kJykKKyAgaW4gUHl0aG9uIGNvZGUpIG5vdyBmaW5kcyB0aGUgZG9jIG9mIHRoZSBtZXRob2QuCisKKy0gSXNzdWUgIzEwOTY4OiBSZW1vdmUgaW5kaXJlY3Rpb24gaW4gdGhyZWFkaW5nLiAgVGhlIHB1YmxpYyBuYW1lcyAoRXZlbnQsCisgIENvbmRpdGlvbiwgZXRjLikgdXNlZCB0byBiZSBmYWN0b3J5IGZ1bmN0aW9ucyByZXR1cm5pbmcgaW5zdGFuY2VzIG9mIGhpZGRlbgorICBjbGFzc2VzIChfRXZlbnQsIF9Db25kaXRpb24sIGV0Yy4pLCBiZWNhdXNlIChpZiBHdWlkbyByZWNhbGxzIGNvcnJlY3RseSkgdGhpcworICBjb2RlIHByZS1kYXRlcyB0aGUgYWJpbGl0eSB0byBzdWJjbGFzcyBleHRlbnNpb24gdHlwZXMuICBJdCBpcyBub3cgcG9zc2libGUKKyAgdG8gaW5oZXJpdCBmcm9tIHRoZXNlIGNsYXNzZXMgd2l0aG91dCBoYXZpbmcgdG8gaW1wb3J0IHRoZSBwcml2YXRlCisgIHVuZGVyc2NvcmVkIG5hbWVzIGxpa2UgbXVsdGlwcm9jZXNzaW5nIGRpZC4KKworLSBJc3N1ZSAjOTcyMzogQWRkIHNobGV4LnF1b3RlIGZ1bmN0aW9ucywgdG8gZXNjYXBlIGZpbGVuYW1lcyBhbmQgY29tbWFuZAorICBsaW5lcy4KKworLSBJc3N1ZSAjMTI2MDM6IEZpeCBweWRvYy5zeW5vcHNpcygpIG9uIGZpbGVzIHdpdGggbm9uLW5lZ2F0aXZlIHN0X210aW1lLgorCistIElzc3VlICMxMjUxNDogVXNlIHRyeS9maW5hbGx5IHRvIGFzc3VyZSB0aGUgdGltZWl0IG1vZHVsZSByZXN0b3JlcyBnYXJiYWdlCisgIGNvbGxlY3Rpb25zIHdoZW4gaXQgaXMgZG9uZS4KKworLSBJc3N1ZSAjMTI2MDc6IEluIHN1YnByb2Nlc3MsIGZpeCBpc3N1ZSB3aGVyZSBpZiBzdGRpbiwgc3Rkb3V0IG9yIHN0ZGVyciBpcworICBnaXZlbiBhcyBhIGxvdyBmZCwgaXQgZ2V0cyBvdmVyd3JpdHRlbi4KKworLSBJc3N1ZSAjMTI1OTA6IElETEUgZWRpdG9yIHdpbmRvdyBub3cgYWx3YXlzIGRpc3BsYXlzIHRoZSBmaXJzdCBsaW5lCisgIHdoZW4gb3BlbmluZyBhIGxvbmcgZmlsZS4gIFdpdGggVGsgOC41LCB0aGUgZmlyc3QgbGluZSB3YXMgaGlkZGVuLgorCistIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZXMpCisgIENvbm5lY3Rpb246Y2xvc2UgaGVhZGVyLgorCistIElzc3VlICMxMjEwMjogRG9jdW1lbnQgdGhhdCBidWZmZXJlZCBmaWxlcyBtdXN0IGJlIGZsdXNoZWQgYmVmb3JlIGJlaW5nIHVzZWQKKyAgd2l0aCBtbWFwLiBQYXRjaCBieSBTdGVmZmVuIERhb2RlIE51cnBtZXNvLgorCistIElzc3VlICMxMjU2MDogQnVpbGQgbGlicHl0aG9uLnNvIG9uIE9wZW5CU0QuIFBhdGNoIGJ5IFN0ZWZhbiBTcGVybGluZy4KKworLSBJc3N1ZSAjMTgxMzogRml4IGNvZGVjIGxvb2t1cCB1bmRlciBUdXJraXNoIGxvY2FsZXMuCisKKy0gSXNzdWUgIzEyNTkxOiBJbXByb3ZlIHN1cHBvcnQgb2YgInVuaXZlcnNhbCBuZXdsaW5lcyIgaW4gdGhlIHN1YnByb2Nlc3MKKyAgbW9kdWxlOiB0aGUgcGlwZWQgc3RyZWFtcyBjYW4gbm93IGJlIHByb3Blcmx5IHJlYWQgZnJvbSBvciB3cml0dGVuIHRvLgorCistIElzc3VlICMxMjU5MTogQWxsb3cgaW8uVGV4dElPV3JhcHBlciB0byB3b3JrIHdpdGggcmF3IElPIG9iamVjdHMgKHdpdGhvdXQKKyAgYSByZWFkMSgpIG1ldGhvZCksIGFuZCBhZGQgYSAqd3JpdGVfdGhyb3VnaCogcGFyYW1ldGVyIHRvIG1hbmRhdGUKKyAgdW5idWZmZXJlZCB3cml0ZXMuCisKKy0gSXNzdWUgIzEwODgzOiBGaXggc29ja2V0IGxlYWtzIGluIHVybGxpYi5yZXF1ZXN0IHdoZW4gdXNpbmcgRlRQLgorCistIElzc3VlICMxMjU5MjogTWFrZSBQeXRob24gYnVpbGQgb24gT3BlbkJTRCA1IChhbmQgZnV0dXJlIG1ham9yIHJlbGVhc2VzKS4KKworLSBJc3N1ZSAjMTIzNzI6IFBPU0lYIHNlbWFwaG9yZXMgYXJlIGJyb2tlbiBvbiBBSVg6IGRvbid0IHVzZSB0aGVtLgorCistIElzc3VlICMxMjU1MTogUHJvdmlkZSBhIGdldF9jaGFubmVsX2JpbmRpbmcoKSBtZXRob2Qgb24gU1NMIHNvY2tldHMgc28gYXMKKyAgdG8gZ2V0IGNoYW5uZWwgYmluZGluZyBkYXRhIGZvciB0aGUgY3VycmVudCBTU0wgc2Vzc2lvbiAob25seSB0aGUKKyAgInRscy11bmlxdWUiIGNoYW5uZWwgYmluZGluZyBpcyBpbXBsZW1lbnRlZCkuICBUaGlzIGFsbG93cyB0aGUgaW1wbGVtZW50YXRpb24KKyAgb2YgY2VydGFpbiBhdXRoZW50aWNhdGlvbiBtZWNoYW5pc21zIHN1Y2ggYXMgU0NSQU0tU0hBLTEtUExVUy4gIFBhdGNoIGJ5CisgIEphY2VrIEtvbmllY3pueS4KKworLSBJc3N1ZSAjNjY1MTk0OiBlbWFpbC51dGlscyBub3cgaGFzIGZvcm1hdF9kYXRldGltZSBhbmQgcGFyc2VkYXRlX3RvX2RhdGV0aW1lCisgIGZ1bmN0aW9ucywgYWxsb3dpbmcgZm9yIHJvdW5kIHRyaXBwaW5nIG9mIFJGQzI4MjIgZm9ybWF0IGRhdGVzLgorCistIElzc3VlICMxMjU3MTogQWRkIGEgcGxhdC1saW51eDMgZGlyZWN0b3J5IG1pcnJvcmluZyB0aGUgcGxhdC1saW51eDIKKyAgZGlyZWN0b3J5LCBzbyB0aGF0ICJpbXBvcnQgRExGQ04iIGFuZCBvdGhlciBzaW1pbGFyIGltcG9ydHMgd29yayBvbgorICBMaW51eCAzLjAuCisKKy0gSXNzdWUgIzc0ODQ6IHNtdHBsaWIgbm8gbG9uZ2VyIHB1dHMgPD4gYXJvdW5kIGFkZHJlc3NlcyBpbiBWUkZZIGFuZCBFWFBOCisgIGNvbW1hbmRzOyB0aGV5IGFyZW4ndCByZXF1aXJlZCBhbmQgaW4gZmFjdCBwb3N0Zml4IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0IGZvcm0uCisKKy0gSXNzdWUgIzEyMjczOiBSZW1vdmUgYXN0Ll9fdmVyc2lvbl9fLiBBU1QgY2hhbmdlcyBjYW4gYmUgYWNjb3VudGVkIGZvciBieQorICBjaGVja2luZyBzeXMudmVyc2lvbl9pbmZvIG9yIHN5cy5fbWVyY3VyaWFsLgorCistIFNpbGVuY2Ugc3B1cmlvdXMgImJyb2tlbiBwaXBlIiB0cmFjZWJhY2tzIHdoZW4gc2h1dHRpbmcgZG93biBhCisgIFByb2Nlc3NQb29sRXhlY3V0b3IuCisKKy0gRml4IHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcyBpbiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvcgorICBieSBqb2luaW5nIGFsbCBxdWV1ZXMgYW5kIHByb2Nlc3NlcyB3aGVuIHNodXRkb3duKCkgaXMgY2FsbGVkLgorCistIElzc3VlICMxMTYwMzogRml4IGEgY3Jhc2ggd2hlbiBfX3N0cl9fIGlzIHJlYm91bmQgYXMgX19yZXByX18uICBQYXRjaCBieQorICBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzExMzIxOiBGaXggYSBjcmFzaCB3aXRoIG11bHRpcGxlIGltcG9ydHMgb2YgdGhlIF9waWNrbGUgbW9kdWxlIHdoZW4KKyAgZW1iZWRkaW5nIFB5dGhvbi4gIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjNjc1NTogQWRkIGdldF93Y2goKSBtZXRob2QgdG8gY3Vyc2VzLndpbmRvdyBjbGFzcy4gUGF0Y2ggYnkgScOxaWdvCisgIFNlcm5hLgorCistIEFkZCBjZ2kuY2xvc2Vsb2coKSBmdW5jdGlvbiB0byBjbG9zZSB0aGUgbG9nIGZpbGUuCisKKy0gSXNzdWUgIzEyNTAyOiBhc3luY29yZTogZml4IHBvbGxpbmcgbG9vcCB3aXRoIEFGX1VOSVggc29ja2V0cy4KKworLSBJc3N1ZSAjNDM3NjogY3R5cGVzIG5vdyBzdXBwb3J0cyBuZXN0ZWQgc3RydWN0dXJlcyBpbiBhbiBlbmRpYW4gZGlmZmVyZW50IHRoYW4KKyAgdGhlIHBhcmVudCBzdHJ1Y3R1cmUuIFBhdGNoIGJ5IFZsYWQgUmlzY3V0aWEuCisKKy0gUmFpc2UgVmFsdWVFcnJvciB3aGVuIGF0dGVtcHRpbmcgdG8gc2V0IHRoZSBfQ0hVTktfU0laRSBhdHRyaWJ1dGUgb2YgYQorICBUZXh0SU9XcmFwcGVyIHRvIGEgaHVnZSB2YWx1ZSwgbm90IFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTI1MDQ6IENsb3NlIGZpbGUgaGFuZGxlcyBpbiBhIHRpbWVseSBtYW5uZXIgaW4gcGFja2FnaW5nLmRhdGFiYXNlLgorICBUaGlzIGZpeGVzIGEgYnVnIHdpdGggdGhlIHJlbW92ZSAodW5pbnN0YWxsKSBmZWF0dXJlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWVzICMxMjE2OSBhbmQgIzEwNTEwOiBGYWN0b3Igb3V0IGNvZGUgdXNlZCBieSB2YXJpb3VzIHBhY2thZ2luZyBjb21tYW5kcworICB0byBtYWtlIEhUVFAgUE9TVCByZXF1ZXN0cywgYW5kIG1ha2Ugc3VyZSBpdCB1c2VzIENSTEYuCisKKy0gSXNzdWUgIzEyMDE2OiBNdWx0aWJ5dGUgQ0pLIGRlY29kZXJzIG5vdyByZXN5bmNocm9uaXplIGZhc3Rlci4gVGhleSBvbmx5CisgIGlnbm9yZSB0aGUgZmlyc3QgYnl0ZSBvZiBhbiBpbnZhbGlkIGJ5dGUgc2VxdWVuY2UuIEZvciBleGFtcGxlLAorICBiJ1x4ZmZcbicuZGVjb2RlKCdnYjIzMTInLCAncmVwbGFjZScpIGdpdmVzICdcdWZmZmRcbicgaW5zdGVhZCBvZiAnXHVmZmZkJy4KKworLSBJc3N1ZSAjMTI0NTk6IHRpbWUuc2xlZXAoKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiB0aGUgc2xlZXAgbGVuZ3RoIGlzCisgIG5lZ2F0aXZlLCBpbnN0ZWFkIG9mIGFuIGluZmluaXRlIHNsZWVwIG9uIFdpbmRvd3Mgb3IgcmFpc2luZyBhbiBJT0Vycm9yIG9uCisgIExpbnV4IGZvciBleGFtcGxlLCB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW91ciBvbiBhbGwgcGxhdGZvcm1zLgorCistIElzc3VlICMxMjQ1MTogcHlkb2M6IGh0bWxfZ2V0ZmlsZSgpIG5vdyB1c2VzIHRva2VuaXplLm9wZW4oKSB0byBzdXBwb3J0CisgIFB5dGhvbiBzY3JpcHRzIHVzaW5nIGFuIGVuY29kaW5nIGRpZmZlcmVudCB0aGFuIFVURi04IChyZWFkIHRoZSBjb2RpbmcgY29va2llCisgIG9mIHRoZSBzY3JpcHQpLgorCistIElzc3VlICMxMjQ5Mzogc3VicHJvY2VzczogUG9wZW4uY29tbXVuaWNhdGUoKSBub3cgYWxzbyBoYW5kbGVzIEVJTlRSIGVycm9ycworICBpZiB0aGUgcHJvY2VzcyBoYXMgb25seSBvbmUgcGlwZS4KKworLSBJc3N1ZSAjMTI0Njc6IHdhcm5pbmdzOiBmaXggYSByYWNlIGNvbmRpdGlvbiBpZiBhIHdhcm5pbmcgaXMgZW1pdHRlZCBhdAorICBzaHV0ZG93biwgaWYgZ2xvYmFscygpWydfX2ZpbGVfXyddIGlzIE5vbmUuCisKKy0gSXNzdWUgIzEyNDUxOiBweWRvYzogaW1wb3J0ZmlsZSgpIG5vdyBvcGVucyB0aGUgUHl0aG9uIHNjcmlwdCBpbiBiaW5hcnkgbW9kZSwKKyAgaW5zdGVhZCBvZiB0ZXh0IG1vZGUgdXNpbmcgdGhlIGxvY2FsZSBlbmNvZGluZywgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogcnVucHk6IHJ1bl9wYXRoKCkgbm93IG9wZW5zIHRoZSBQeXRob24gc2NyaXB0IGluIGJpbmFyeSBtb2RlLAorICBpbnN0ZWFkIG9mIHRleHQgbW9kZSB1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nLCB0byBzdXBwb3J0IG90aGVyIGVuY29kaW5ncworICB0aGFuIFVURi04IChzY3JpcHRzIHVzaW5nIHRoZSBjb2RpbmcgY29va2llKS4KKworLSBJc3N1ZSAjMTI0NTE6IHhtbC5kb20ucHVsbGRvbTogcGFyc2UoKSBub3cgb3BlbnMgZmlsZXMgaW4gYmluYXJ5IG1vZGUgaW5zdGVhZAorICBvZiB0aGUgdGV4dCBtb2RlICh1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nKSB0byBhdm9pZCBlbmNvZGluZyBpc3N1ZXMuCisKKy0gSXNzdWUgIzEyMTQ3OiBBZGp1c3QgdGhlIG5ldy1pbi0zLjIgc210cGxpYi5zZW5kX21lc3NhZ2UgbWV0aG9kIGZvciBiZXR0ZXIKKyAgY29uZm9ybWFuY2UgdG8gdGhlIFJGQ3M6ICBjb3JyZWN0bHkgaGFuZGxlIFNlbmRlciBhbmQgUmVzZW50LSBoZWFkZXJzLgorCistIElzc3VlICMxMjM1MjogRml4IGEgZGVhZGxvY2sgaW4gbXVsdGlwcm9jZXNzaW5nLkhlYXAgd2hlbiBhIGJsb2NrIGlzIGZyZWVkIGJ5CisgIHRoZSBnYXJiYWdlIGNvbGxlY3RvciB3aGlsZSB0aGUgSGVhcCBsb2NrIGlzIGhlbGQuCisKKy0gSXNzdWUgIzEyNDYyOiB0aW1lLnNsZWVwKCkgbm93IGltbWVkaWF0ZWx5IGNhbGxzIHRoZSAoUHl0aG9uKSBzaWduYWwgaGFuZGxlcgorICBpZiBpdCBpcyBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCwgaW5zdGVhZCBvZiBoYXZpbmcgdG8gd2FpdCB1bnRpbCB0aGUgbmV4dAorICBpbnN0cnVjdGlvbi4KKworLSBJc3N1ZSAjMTI0NDI6IG5ldyBzaHV0aWwuZGlza191c2FnZSBmdW5jdGlvbiwgcHJvdmlkaW5nIHRvdGFsLCB1c2VkIGFuZCBmcmVlCisgIGRpc2sgc3BhY2Ugc3RhdGlzdGljcy4KKworLSBJc3N1ZSAjMTI0NTE6IFRoZSBYSW5jbHVkZSBkZWZhdWx0IGxvYWRlciBvZiB4bWwuZXRyZWUgbm93IGRlY29kZXMgZmlsZXMgZnJvbQorICBVVEYtOCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcgaWYgdGhlIGVuY29kaW5nIGlzIG5vdCBzcGVjaWZpZWQuIEl0IG5vdworICBhbHNvIG9wZW5zIFhNTCBmaWxlcyBmb3IgdGhlIHBhcnNlciBpbiBiaW5hcnkgbW9kZSBpbnN0ZWFkIG9mIHRoZSB0ZXh0IG1vZGUKKyAgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogZG9jdGVzdC5kZWJ1Z19zY3JpcHQoKSBkb2Vzbid0IGNyZWF0ZSBhIHRlbXBvcmFyeSBmaWxlCisgIGFueW1vcmUgdG8gYXZvaWQgZW5jb2RpbmcgaXNzdWVzLgorCistIElzc3VlICMxMjQ1MTogcHlkb2Muc3lub3BzaXMoKSBub3cgcmVhZHMgdGhlIGVuY29kaW5nIGNvb2tpZSBpZiBhdmFpbGFibGUsCisgIHRvIHJlYWQgdGhlIFB5dGhvbiBzY3JpcHQgZnJvbSB0aGUgcmlnaHQgZW5jb2RpbmcuCisKKy0gSXNzdWUgIzEyNDUxOiBkaXN0dXRpbHMgbm93IG9wZW5zIHRoZSBzZXR1cCBzY3JpcHQgaW4gYmluYXJ5IG1vZGUgdG8gcmVhZCB0aGUKKyAgZW5jb2RpbmcgY29va2llLCBpbnN0ZWFkIG9mIG9wZW5pbmcgaXQgaW4gVVRGLTguCisKKy0gSXNzdWUgIzk1MTY6IE9uIE1hYyBPUyBYLCBjaGFuZ2UgRGlzdHV0aWxzIHRvIG5vIGxvbmdlciBnbG9iYWxseSBhdHRlbXB0IHRvCisgIGNoZWNrIG9yIHNldCB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGZvciB0aGUKKyAgaW50ZXJwcmV0ZXIgcHJvY2Vzcy4gIFRoaXMgY291bGQgY2F1c2UgZmFpbHVyZXMgaW4gbm9uLURpc3R1dGlscyBzdWJwcm9jZXNzZXMKKyAgYW5kIHdhcyB1bnJlbGlhYmxlIHNpbmNlIHRlc3RzIG9yIHVzZXIgcHJvZ3JhbXMgY291bGQgbW9kaWZ5IHRoZSBpbnRlcnByZXRlcgorICBlbnZpcm9ubWVudCBhZnRlciBEaXN0dXRpbHMgc2V0IGl0LiAgSW5zdGVhZCwgaGF2ZSBEaXN0dXRpbHMgc2V0IHRoZQorICBkZXBsb3ltZW50IHRhcmdldCBvbmx5IGluIHRoZSBlbnZpcm9ubWVudCBvZiBlYWNoIGJ1aWxkIHN1YnByb2Nlc3MuICBJdCBpcworICBzdGlsbCBwb3NzaWJsZSB0byBnbG9iYWxseSBvdmVycmlkZSB0aGUgZGVmYXVsdCBieSBzZXR0aW5nCisgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBiZWZvcmUgbGF1bmNoaW5nIHRoZSBpbnRlcnByZXRlcjsgaXRzIHZhbHVlIG11c3QgYmUKKyAgZ3JlYXRlciBvciBlcXVhbCB0byB0aGUgZGVmYXVsdCB2YWx1ZSwgdGhlIHZhbHVlIHdpdGggd2hpY2ggdGhlIGludGVycHJldGVyCisgIHdhcyBidWlsdC4gIEFsc28sIGltcGxlbWVudCB0aGUgc2FtZSBoYW5kbGluZyBpbiBwYWNrYWdpbmcuCisKKy0gSXNzdWUgIzEyNDIyOiBJbiB0aGUgY29weSBtb2R1bGUsIGRvbid0IHN0b3JlIG9iamVjdHMgdGhhdCBhcmUgdGhlaXIgb3duIGNvcHkKKyAgaW4gdGhlIG1lbW8gZGljdC4KKworLSBJc3N1ZSAjMTIzMDM6IEFkZCBzaWd3YWl0aW5mbygpIGFuZCBzaWd0aW1lZHdhaXQoKSB0byB0aGUgc2lnbmFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTI0MDQ6IFJlbW92ZSBDODkgaW5jb21wYXRpYmxlIGNvZGUgZnJvbSBtbWFwIG1vZHVsZS4gUGF0Y2ggYnkgQWtpcmEKKyAgS2l0YWRhLgorCistIElzc3VlICMxODc0OiBlbWFpbCBub3cgZGV0ZWN0cyBhbmQgcmVwb3J0cyBhcyBhIGRlZmVjdCB0aGUgcHJlc2VuY2Ugb2YKKyAgYW55IENURSBvdGhlciB0aGFuIDdiaXQsIDhiaXQsIG9yIGJpbmFyeSBvbiBhIG11bHRpcGFydC4KKworLSBJc3N1ZSAjMTIzODM6IEZpeCBzdWJwcm9jZXNzIG1vZHVsZSB3aXRoIGVudj17fTogZG9uJ3QgY29weSB0aGUgZW52aXJvbm1lbnQKKyAgdmFyaWFibGVzLCBzdGFydCB3aXRoIGFuIGVtcHR5IGVudmlyb25tZW50LgorCistIElzc3VlICMxMTYzNzogRml4IHN1cHBvcnQgZm9yIGltcG9ydGluZyBwYWNrYWdpbmcgc2V0dXAgaG9va3MgZnJvbSB0aGUKKyAgcHJvamVjdCBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzY3NzE6IE1vdmVkIHRoZSBjdXJzZXMud3JhcHBlciBmdW5jdGlvbiBmcm9tIHRoZSBzaW5nbGUtZnVuY3Rpb24KKyAgd3JhcHBlciBtb2R1bGUgaW50byBfX2luaXRfXywgZWxpbWluYXRpbmcgdGhlIG1vZHVsZS4gIFNpbmNlIF9faW5pdF9fIHdhcworICBhbHJlYWR5IGltcG9ydGluZyB0aGUgZnVuY3Rpb24gdG8gY3Vyc2VzLndyYXBwZXIsIHRoZXJlIGlzIG5vIEFQSSBjaGFuZ2UuCisKKy0gSXNzdWUgIzExNTg0OiBlbWFpbC5oZWFkZXIuZGVjb2RlX2hlYWRlciBubyBsb25nZXIgZmFpbHMgaWYgdGhlIGhlYWRlcgorICBwYXNzZWQgdG8gaXQgaXMgYSBIZWFkZXIgb2JqZWN0LCBhbmQgSGVhZGVyL21ha2VfaGVhZGVyIG5vIGxvbmdlciBmYWlsCisgIGlmIGdpdmVuIGJpbmFyeSB1bmtub3duLThiaXQgaW5wdXQuCisKKy0gSXNzdWUgIzExNzAwOiBtYWlsYm94IHByb3h5IG9iamVjdCBjbG9zZSBtZXRob2RzIGNhbiBub3cgYmUgY2FsbGVkIG11bHRpcGxlCisgIHRpbWVzIHdpdGhvdXQgZXJyb3IuCisKKy0gSXNzdWUgIzExNzY3OiBDb3JyZWN0IGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIG1haWxib3gncyBfX2dldGl0ZW1fXyBtZXRob2QuCisKKy0gSXNzdWUgIzEyMTMzOiBBYnN0cmFjdEhUVFBIYW5kbGVyLmRvX29wZW4oKSBvZiB1cmxsaWIucmVxdWVzdCBjbG9zZXMgdGhlIEhUVFAKKyAgY29ubmVjdGlvbiBpZiBpdHMgZ2V0cmVzcG9uc2UoKSBtZXRob2QgZmFpbHMgd2l0aCBhIHNvY2tldCBlcnJvci4gUGF0Y2gKKyAgd3JpdHRlbiBieSBFemlvIE1lbG90dGkuCisKKy0gSXNzdWUgIzEyMjQwOiBBbGxvdyBtdWx0aXBsZSBzZXR1cCBob29rcyBpbiBwYWNrYWdpbmcncyBzZXR1cC5jZmcgZmlsZXMuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEVyaWsgQnJheS4KKworLSBJc3N1ZSAjOTI4NDogQWxsb3cgaW5zcGVjdC5maW5kc291cmNlKCkgdG8gZmluZCB0aGUgc291cmNlIG9mIGRvY3Rlc3QKKyAgZnVuY3Rpb25zLgorCistIElzc3VlICMxMTU5NTogRml4IGFzc29ydGVkIGJ1Z3MgaW4gcGFja2FnaW5nLnV0aWwuY2ZnX3RvX2FyZ3MsIGEKKyAgY29tcGF0aWJpbGl0eSBoZWxwZXIgZm9yIHRoZSBkaXN0dXRpbHMtcGFja2FnaW5nIHRyYW5zaXRpb24uICBPcmlnaW5hbCBwYXRjaAorICBieSBFcmlrIEJyYXkuCisKKy0gSXNzdWUgIzEyMjg3OiBJbiBvc3NhdWRpb2RldiwgY2hlY2sgdGhhdCB0aGUgZGV2aWNlIGlzbid0IGNsb3NlZCBpbiBzZXZlcmFsCisgIG1ldGhvZHMuCisKKy0gSXNzdWUgIzEyMDA5OiBGaXhlZCByZWdyZXNzaW9uIGluIG5ldHJjIGZpbGUgY29tbWVudCBoYW5kbGluZy4KKworLSBJc3N1ZSAjMTIyNDY6IFdhcm4gYW5kIGZhaWwgd2hlbiB0cnlpbmcgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHByb2plY3QgZnJvbQorICBhbiB1bmluc3RhbGxlZCBQeXRob24gKGJ1aWx0IGluIGEgc291cmNlIGNoZWNrb3V0KS4gIE9yaWdpbmFsIHBhdGNoIGJ5CisgIFRzaGVwYW5nIExla2hvbmtob2JlLgorCistIElzc3VlICMxMDY5NDogemlwZmlsZSBub3cgaWdub3JlcyBnYXJiYWdlIGF0IHRoZSBlbmQgb2YgYSB6aXBmaWxlLgorCistIElzc3VlICMxMjI4MzogRml4ZWQgcmVncmVzc2lvbiBpbiBzbXRwbGliIHF1b3Rpbmcgb2YgbGVhZGluZyBkb3RzIGluIERBVEEuCisKKy0gSXNzdWUgIzEwNDI0OiBBcmdwYXJzZSBub3cgaW5jbHVkZXMgdGhlIG5hbWVzIG9mIHRoZSBtaXNzaW5nIHJlcXVpcmVkCisgIGFyZ3VtZW50cyBpbiB0aGUgbWlzc2luZyBhcmd1bWVudHMgZXJyb3IgbWVzc2FnZS4KKworLSBJc3N1ZSAjMTIxNjg6IFN5c0xvZ0hhbmRsZXIgbm93IGFsbG93cyBOVUwgdGVybWluYXRpb24gdG8gYmUgY29udHJvbGxlZCB1c2luZworICBhIG5ldyAnYXBwZW5kX251bCcgYXR0cmlidXRlIG9uIHRoZSBoYW5kbGVyLgorCistIElzc3VlICMxMTU4MzogU3BlZWQgdXAgb3MucGF0aC5pc2RpciBvbiBXaW5kb3dzIGJ5IHVzaW5nIEdldEZpbGVBdHRyaWJ1dGVzCisgIGluc3RlYWQgb2Ygb3Muc3RhdC4KKworLSBJc3N1ZSAjMTIwMjE6IE1ha2UgbW1hcCdzIHJlYWQoKSBtZXRob2QgYXJndW1lbnQgb3B0aW9uYWwuIFBhdGNoIGJ5IFBldHJpCisgIExlaHRpbmVuLgorCistIElzc3VlICM5MjA1OiBjb25jdXJyZW50LmZ1dHVyZXMuUHJvY2Vzc1Bvb2xFeGVjdXRvciBub3cgZGV0ZWN0cyBraWxsZWQKKyAgY2hpbGRyZW4gYW5kIHJhaXNlcyBCcm9rZW5Qcm9jZXNzUG9vbCBpbiBzdWNoIGEgc2l0dWF0aW9uLiAgUHJldmlvdXNseSBpdAorICB3b3VsZCByZWxpYWJseSBmcmVlemUvZGVhZGxvY2suCisKKy0gSXNzdWUgIzEyMDQwOiBFeHBvc2UgYSBuZXcgYXR0cmlidXRlIGBgc2VudGluZWxgYCBvbiBpbnN0YW5jZXMgb2YKKyAgYGBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzc2BgLiAgQWxzbywgZml4IFByb2Nlc3Muam9pbigpIHRvIG5vdCB1c2UgcG9sbGluZworICBhbnltb3JlLCB3aGVuIGdpdmVuIGEgdGltZW91dC4KKworLSBJc3N1ZSAjMTE4OTM6IFJlbW92ZSBvYnNvbGV0ZSBpbnRlcm5hbCB3cmFwcGVyIGNsYXNzIGBgU1NMRmFrZUZpbGVgYCBpbiB0aGUKKyAgc210cGxpYiBtb2R1bGUuICBQYXRjaCBieSBDYXRhbGluIElhY29iLgorCistIElzc3VlICMxMjA4MDogRml4IGEgRGVjaW1hbC5wb3dlcigpIGNhc2UgdGhhdCB0b29rIGFuIHVucmVhc29uYWJseSBsb25nIHRpbWUKKyAgdG8gY29tcHV0ZS4KKworLSBJc3N1ZSAjMTIyMjE6IFJlbW92ZSBfX3ZlcnNpb25fXyBhdHRyaWJ1dGVzIGZyb20gcHlleHBhdCwgcGlja2xlLCB0YXJmaWxlLAorICBweWRvYywgdGtpbnRlciwgYW5kIHhtbC5wYXJzZXJzLmV4cGF0LiBUaGlzIHdlcmUgdXNlbGVzcyB2ZXJzaW9uIGNvbnN0YW50cworICBsZWZ0IG92ZXIgZnJvbSB0aGUgTWVyY3VyaWFsIHRyYW5zaXRpb24KKworLSBOYW1lZCB0dXBsZXMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggdmFycygpLgorCistIElzc3VlICMxMjA4NTogRml4IGFuIGF0dHJpYnV0ZSBlcnJvciBpbiBzdWJwcm9jZXNzLlBvcGVuIGRlc3RydWN0b3IgaWYgdGhlCisgIGNvbnN0cnVjdG9yIGhhcyBmYWlsZWQsIGUuZy4gYmVjYXVzZSBvZiBhbiB1bmRlY2xhcmVkIGtleXdvcmQgYXJndW1lbnQuIFBhdGNoCisgIHdyaXR0ZW4gYnkgT2xlZyBPc2hteWFuLgorCistIElzc3VlICMxMjAyODogTWFrZSB0aHJlYWRpbmcuX2dldF9pZGVudCgpIHB1YmxpYywgcmVuYW1lIGl0IHRvCisgIHRocmVhZGluZy5nZXRfaWRlbnQoKSBhbmQgZG9jdW1lbnQgaXQuIFRoaXMgZnVuY3Rpb24gd2FzIGFscmVhZHkgdXNlZCB1c2luZworICBfdGhyZWFkLmdldF9pZGVudCgpLgorCistIElzc3VlICMxMjE3MTogSW5jcmVtZW50YWxFbmNvZGVyLnJlc2V0KCkgb2YgQ0pLIGNvZGVjcyAobXVsdGlieXRlY29kZWMpIGNhbGxzCisgIGVuY3Jlc2V0KCkgaW5zdGVhZCBvZiBkZWNyZXNldCgpLgorCistIElzc3VlICMxMjIxODogUmVtb3ZlZCB3c2dpcmVmLmVnZy1pbmZvLgorCistIElzc3VlICMxMjE5NjogQWRkIHBpcGUyKCkgdG8gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjOTg1MDY0OiBNYWtlIHBsaXN0bGliIG1vcmUgcmVzaWxpZW50IHRvIGZhdWx0eSBpbnB1dCBwbGlzdHMuCisgIFBhdGNoIGJ5IE1oZXIgTW92c2lzeWFuLgorCistIElzc3VlICMxNjI1OiBCWjJGaWxlIGFuZCBiejIuZGVjb21wcmVzcygpIG5vdyBzdXBwb3J0IG11bHRpLXN0cmVhbSBmaWxlcy4KKyAgSW5pdGlhbCBwYXRjaCBieSBOaXIgQWlkZXMuCisKKy0gSXNzdWUgIzEyMTc1OiBCdWZmZXJlZFJlYWRlci5yZWFkKC0xKSBub3cgY2FsbHMgcmF3LnJlYWRhbGwoKSBpZiBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzEyMTc1OiBGaWxlSU8ucmVhZGFsbCgpIG5vdyBvbmx5IHJlYWRzIHRoZSBmaWxlIHBvc2l0aW9uIGFuZCBzaXplCisgIG9uY2UuCisKKy0gSXNzdWUgIzEyMTc1OiBSYXdJT0Jhc2UucmVhZGFsbCgpIG5vdyByZXR1cm5zIE5vbmUgaWYgcmVhZCgpIHJldHVybnMgTm9uZS4KKworLSBJc3N1ZSAjMTIxNzU6IEZpbGVJTy5yZWFkYWxsKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IgaW5zdGVhZCBvZiBhbiBJT0Vycm9yCisgIGlmIHRoZSBmaWxlIGlzIGNsb3NlZC4KKworLSBJc3N1ZSAjMTExMDk6IE5ldyBzZXJ2aWNlX2FjdGlvbiBtZXRob2QgZm9yIEJhc2VTZXJ2ZXIsIHVzZWQgYnkgRm9ya2luZ01peEluCisgIGNsYXNzIGZvciBjbGVhbnVwLiBJbml0aWFsIFBhdGNoIGJ5IEp1c3RpbiBXYXJrZW50aW4uCisKKy0gSXNzdWUgIzEyMDQ1OiBBdm9pZCBkdXBsaWNhdGUgZXhlY3V0aW9uIG9mIGNvbW1hbmQgaW4KKyAgY3R5cGVzLnV0aWwuX2dldF9zb25hbWUoKS4gIFBhdGNoIGJ5IFNpamluIEpvc2VwaC4KKworLSBJc3N1ZSAjMTA4MTg6IFJlbW92ZSB0aGUgVGsgR1VJIGFuZCB0aGUgc2VydmUoKSBmdW5jdGlvbiBvZiB0aGUgcHlkb2MgbW9kdWxlLAorICBweWRvYyAtZyBoYXMgYmVlbiBkZXByZWNhdGVkIGluIFB5dGhvbiAzLjIgYW5kIGl0IGhhcyBhIG5ldyBlbmhhbmNlZCB3ZWIKKyAgc2VydmVyLgorCistIElzc3VlICMxNDQxNTMwOiBJbiBpbWFwbGliLCByZWFkIHRoZSBkYXRhIGluIG9uZSBjaHVuayB0byBzcGVlZCB1cCBsYXJnZQorICByZWFkcyBhbmQgc2ltcGxpZnkgY29kZS4KKworLSBJc3N1ZSAjMTIwNzA6IEZpeCB0aGUgTWFrZWZpbGUgcGFyc2VyIG9mIHRoZSBzeXNjb25maWcgbW9kdWxlIHRvIGhhbmRsZQorICBjb3JyZWN0bHkgcmVmZXJlbmNlcyB0byAiYm9ndXMgdmFyaWFibGUiIChlLmcuICJwcmVmaXg9JC9vcHQvcHl0aG9uIikuCisKKy0gSXNzdWUgIzEyMTAwOiBEb24ndCByZXNldCBpbmNyZW1lbnRhbCBlbmNvZGVycyBvZiBDSksgY29kZWNzIGF0IGVhY2ggY2FsbCB0bworICB0aGVpciBlbmNvZGUoKSBtZXRob2QgYW55bW9yZSwgYnV0IGNvbnRpbnVlIHRvIGNhbGwgdGhlIHJlc2V0KCkgbWV0aG9kIGlmIHRoZQorICBmaW5hbCBhcmd1bWVudCBpcyBUcnVlLgorCistIElzc3VlICMxMjA0OTogQWRkIFJBTkRfYnl0ZXMoKSBhbmQgUkFORF9wc2V1ZG9fYnl0ZXMoKSBmdW5jdGlvbnMgdG8gdGhlIHNzbAorICBtb2R1bGUuCisKKy0gSXNzdWUgIzY1MDE6IG9zLmRldmljZV9lbmNvZGluZygpIHJldHVybnMgTm9uZSBvbiBXaW5kb3dzIGlmIHRoZSBhcHBsaWNhdGlvbgorICBoYXMgbm8gY29uc29sZS4KKworLSBJc3N1ZSAjMTIxMDU6IEFkZCBPX0NMT0VYRUMgdG8gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTIwNzk6IERlY2ltYWwoJ0luZmluaXR5JykuZm1hKERlY2ltYWwoJzAnKSwgKDMuOTEyMjQzMTgxMjY3ODZlKzE5KzBqKSkKKyAgbm93IHJhaXNlcyBUeXBlRXJyb3IgKHJlZmxlY3RpbmcgdGhlIGludmFsaWQgdHlwZSBvZiB0aGUgM3JkIGFyZ3VtZW50KSByYXRoZXIKKyAgdGhhbiBEZWNpbWFsLkludmFsaWRPcGVyYXRpb24uCisKKy0gSXNzdWUgIzEyMTI0OiB6aXBpbXBvcnQgZG9lc24ndCBrZWVwIGEgcmVmZXJlbmNlIHRvIHpsaWIuZGVjb21wcmVzcygpIGFueW1vcmUKKyAgdG8gYmUgYWJsZSB0byB1bmxvYWQgdGhlIG1vZHVsZS4KKworLSBBZGQgdGhlIHBhY2thZ2luZyBtb2R1bGUsIGFuIGltcHJvdmVkIGZvcmsgb2YgZGlzdHV0aWxzIChhbHNvIGtub3duIGFzCisgIGRpc3R1dGlsczIpLgorCistIElzc3VlICMxMjA2NTogY29ubmVjdF9leCgpIG9uIGFuIFNTTCBzb2NrZXQgbm93IHJldHVybnMgdGhlIG9yaWdpbmFsIGVycm5vCisgIHdoZW4gdGhlIHNvY2tldCdzIHRpbWVvdXQgZXhwaXJlcyAoaXQgdXNlZCB0byByZXR1cm4gTm9uZSkuCisKKy0gSXNzdWUgIzg4MDk6IFRoZSBTTVRQX1NTTCBjb25zdHJ1Y3RvciBhbmQgU01UUC5zdGFydHRscygpIG5vdyBzdXBwb3J0CisgIHBhc3NpbmcgYSBgYGNvbnRleHRgYCBhcmd1bWVudCBwb2ludGluZyB0byBhbiBzc2wuU1NMQ29udGV4dCBpbnN0YW5jZS4KKyAgUGF0Y2ggYnkgS2FzdW4gSGVyYXRoLgorCistIElzc3VlICMxMTA4ODogZG9uJ3QgY3Jhc2ggd2hlbiB1c2luZyBGNSB0byBydW4gYSBzY3JpcHQgaW4gSURMRSBvbiBNYWNPU1gKKyAgd2l0aCBUayA4LjUuCisKKy0gSXNzdWUgIzk1MTY6IElzc3VlICM5NTE2OiBhdm9pZCBlcnJvcnMgaW4gc3lzY29uZmlnIHdoZW4gTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCisgIGlzIHNldCBpbiBzaGVsbC4KKworLSBJc3N1ZSAjODY1MDogTWFrZSB6bGliIG1vZHVsZSA2NC1iaXQgY2xlYW4uIGNvbXByZXNzKCksIGRlY29tcHJlc3MoKSBhbmQKKyAgdGhlaXIgaW5jcmVtZW50YWwgY291bnRlcnBhcnRzIG5vdyByYWlzZSBPdmVyZmxvd0Vycm9yIGlmIGdpdmVuIGFuIGlucHV0CisgIGxhcmdlciB0aGFuIDRHQiwgaW5zdGVhZCBvZiBzaWxlbnRseSB0cnVuY2F0aW5nIHRoZSBpbnB1dCBhbmQgcmV0dXJuaW5nCisgIGFuIGluY29ycmVjdCByZXN1bHQuCisKKy0gSXNzdWUgIzEyMDUwOiB6bGliLmRlY29tcHJlc3NvYmooKS5kZWNvbXByZXNzKCkgbm93IGNsZWFycyB0aGUgdW5jb25zdW1lZF90YWlsCisgIGF0dHJpYnV0ZSB3aGVuIGNhbGxlZCB3aXRob3V0IGEgbWF4X2xlbmd0aCBhcmd1bWVudC4KKworLSBJc3N1ZSAjMTIwNjI6IEZpeCBhIGZsdXNoaW5nIGJ1ZyB3aGVuIGRvaW5nIGEgY2VydGFpbiB0eXBlIG9mIEkvTyBzZXF1ZW5jZQorICBvbiBhIGZpbGUgb3BlbmVkIGluIHJlYWQrd3JpdGUgbW9kZSAobmFtZWx5OiByZWFkaW5nLCBzZWVraW5nIGEgYml0IGZvcndhcmQsCisgIHdyaXRpbmcsIHRoZW4gc2Vla2luZyBiZWZvcmUgdGhlIHByZXZpb3VzIHdyaXRlIGJ1dCBzdGlsbCB3aXRoaW4gYnVmZmVyZWQKKyAgZGF0YSwgYW5kIHdyaXRpbmcgYWdhaW4pLgorCistIElzc3VlICM5OTcxOiBXcml0ZSBhbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gb2YgQnVmZmVyZWRSZWFkZXIucmVhZGludG8oKS4KKyAgUGF0Y2ggYnkgSm9obiBPJ0Nvbm5vci4KKworLSBJc3N1ZSAjMTAyODogVGsgcmV0dXJucyBpbnZhbGlkIFVuaWNvZGUgbnVsbCBpbiAlQTogVW5pY29kZURlY29kZUVycm9yLgorICBXaXRoIFRrIDwgOC41IF90a2ludGVyLmM6UHl0aG9uQ21kKCkgcmFpc2VkIFVuaWNvZGVEZWNvZGVFcnJvciwgY2F1c2VkCisgIElETEUgdG8gZXhpdC4gIENvbnZlcnRlZCB0byB2YWxpZCBVbmljb2RlIG51bGwgaW4gUHl0aG9uQ21kKCkuCisKKy0gSXNzdWUgIzExNzk5OiB1cmxsaWIucmVxdWVzdCBBdXRoZW50aWNhdGlvbiBIYW5kbGVycyB3aWxsIHJhaXNlIGEgVmFsdWVFcnJvcgorICB3aGVuIHByZXNlbnRlZCB3aXRoIGFuIHVuc3VwcG9ydGVkIEF1dGhlbnRpY2F0aW9uIFNjaGVtZS4gUGF0Y2ggY29udHJpYnV0ZWQKKyAgYnkgWXV2YWwgR3JlZW5maWVsZC4KKworLSBJc3N1ZSAjMTA0MTksICM2MDExOiBidWlsZF9zY3JpcHRzIGNvbW1hbmQgb2YgZGlzdHV0aWxzIGhhbmRsZXMgY29ycmVjdGx5CisgIG5vbi1BU0NJSSBwYXRoIChwYXRoIHRvIHRoZSBQeXRob24gZXhlY3V0YWJsZSkuIE9wZW4gYW5kIHdyaXRlIHRoZSBzY3JpcHQgaW4KKyAgYmluYXJ5IG1vZGUsIGJ1dCBlbnN1cmUgdGhhdCB0aGUgc2hlYmFuZyBpcyBkZWNvZGFibGUgZnJvbSBVVEYtOCBhbmQgZnJvbSB0aGUKKyAgZW5jb2Rpbmcgb2YgdGhlIHNjcmlwdC4KKworLSBJc3N1ZSAjODQ5ODogSW4gc29ja2V0LmFjY2VwdCgpLCBhbGxvdyB0byBzcGVjaWZ5IDAgYXMgYSBiYWNrbG9nIHZhbHVlIGluCisgIG9yZGVyIHRvIGFjY2VwdCBleGFjdGx5IG9uZSBjb25uZWN0aW9uLiAgUGF0Y2ggYnkgRGFuaWVsIEV2ZXJzLgorCistIElzc3VlICMxMjAxMTogc2lnbmFsLnNpZ25hbCgpIGFuZCBzaWduYWwuc2lnaW50ZXJydXB0KCkgcmFpc2UgYW4gT1NFcnJvciwKKyAgaW5zdGVhZCBvZiBhIFJ1bnRpbWVFcnJvcjogT1NFcnJvciBoYXMgYW4gZXJybm8gYXR0cmlidXRlLgorCistIElzc3VlICMzNzA5OiBhZGQgYSBmbHVzaF9oZWFkZXJzIG1ldGhvZCB0byBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyLCB3aGljaAorICBtYW5hZ2VzIHRoZSBzZW5kaW5nIG9mIGhlYWRlcnMgdG8gb3V0cHV0IHN0cmVhbSBhbmQgZmx1c2hpbmcgdGhlIGludGVybmFsCisgIGhlYWRlcnMgYnVmZmVyLiBQYXRjaCBjb250cmlidXRpb24gYnkgQW5kcmV3IFNjaGFhZgorCistIElzc3VlICMxMTc0MzogUmV3cml0ZSBtdWx0aXByb2Nlc3NpbmcgY29ubmVjdGlvbiBjbGFzc2VzIGluIHB1cmUgUHl0aG9uLgorCistIElzc3VlICMxMTE2NDogU3RvcCB0cnlpbmcgdG8gdXNlIF94bWxwbHVzIGluIHRoZSB4bWwgbW9kdWxlLgorCistIElzc3VlICMxMTg4ODogQWRkIGxvZzIgZnVuY3Rpb24gdG8gbWF0aCBtb2R1bGUuIFBhdGNoIHdyaXR0ZW4gYnkgTWFyaworICBEaWNraW5zb24uCisKKy0gSXNzdWUgIzEyMDEyOiBzc2wuUFJPVE9DT0xfU1NMdjIgYmVjb21lcyBvcHRpb25hbC4KKworLSBJc3N1ZSAjODQwNzogVGhlIHNpZ25hbCBoYW5kbGVyIHdyaXRlcyB0aGUgc2lnbmFsIG51bWJlciBhcyBhIHNpbmdsZSBieXRlCisgIGluc3RlYWQgb2YgYSBudWwgYnl0ZSBpbnRvIHRoZSB3YWtldXAgZmlsZSBkZXNjcmlwdG9yLiBTbyBpdCBpcyBwb3NzaWJsZSB0bworICB3YWl0IG1vcmUgdGhhbiBvbmUgc2lnbmFsIGFuZCBrbm93IHdoaWNoIHNpZ25hbHMgd2VyZSByYWlzZWQuCisKKy0gSXNzdWUgIzg0MDc6IEFkZCBwdGhyZWFkX2tpbGwoKSwgc2lncGVuZGluZygpIGFuZCBzaWd3YWl0KCkgZnVuY3Rpb25zIHRvIHRoZQorICBzaWduYWwgbW9kdWxlLgorCistIElzc3VlICMxMTkyNzogU01UUF9TU0wgbm93IHVzZXMgcG9ydCA0NjUgYnkgZGVmYXVsdCBhcyBkb2N1bWVudGVkLiAgUGF0Y2gKKyAgYnkgS2FzdW4gSGVyYXRoLgorCistIElzc3VlICMxMjAwMjogZnRwbGliJ3MgYWJvcnQoKSBtZXRob2QgcmFpc2VzIFR5cGVFcnJvci4KKworLSBJc3N1ZSAjMTE5MTY6IEFkZCBhIG51bWJlciBvZiBNYWNPU1ggc3BlY2lmaWMgZGVmaW5pdGlvbnMgdG8gdGhlIGVycm5vIG1vZHVsZS4KKyAgUGF0Y2ggYnkgUGllcnJlIENhcnJpZXIuCisKKy0gSXNzdWUgIzExOTk5OiBmaXhlZCBzcG9yYWRpYyBzeW5jIGZhaWx1cmUgbWFpbGJveC5NYWlsZGlyIGR1ZSB0byBpdHMgdHJ5aW5nIHRvCisgIGRldGVjdCBtdGltZSBjaGFuZ2VzIGJ5IGNvbXBhcmluZyB0byB0aGUgc3lzdGVtIGNsb2NrIGluc3RlYWQgb2YgdG8gdGhlCisgIHByZXZpb3VzIHZhbHVlIG9mIHRoZSBtdGltZS4KKworLSBJc3N1ZSAjMTEwNzI6IGFkZGVkIE1MU0QgY29tbWFuZCAoUkZDLTM2NTkpIHN1cHBvcnQgdG8gZnRwbGliLgorCistIElzc3VlICM4ODA4OiBUaGUgSU1BUDRfU1NMIGNvbnN0cnVjdG9yIG5vdyBhbGxvd3MgcGFzc2luZyBhbiBTU0xDb250ZXh0CisgIHBhcmFtZXRlciB0byBjb250cm9sIHBhcmFtZXRlcnMgb2YgdGhlIHNlY3VyZSBjaGFubmVsLiAgUGF0Y2ggYnkgU2lqaW4KKyAgSm9zZXBoLgorCistIG50cGF0aC5zYW1lZmlsZSBmYWlsZWQgdG8gbm90aWNlIHRoYXQgImEudHh0IiBhbmQgIkEuVFhUIiByZWZlciB0byB0aGUgc2FtZQorICBmaWxlIG9uIFdpbmRvd3MgWFAuIEFzIG5vdGljZWQgaW4gaXNzdWUgIzEwNjg0LgorCistIElzc3VlICMxMjAwMDogV2hlbiBhIFNTTCBjZXJ0aWZpY2F0ZSBoYXMgYSBzdWJqZWN0QWx0TmFtZSB3aXRob3V0IGFueQorICBkTlNOYW1lIGVudHJ5LCBzc2wubWF0Y2hfaG9zdG5hbWUoKSBzaG91bGQgdXNlIHRoZSBzdWJqZWN0J3MgY29tbW9uTmFtZS4KKyAgUGF0Y2ggYnkgTmljb2xhcyBCYXJlaWwuCisKKy0gSXNzdWUgIzEwNzc1OiBhc3NlcnRSYWlzZXMsIGFzc2VydFJhaXNlc1JlZ2V4LCBhc3NlcnRXYXJucywgYW5kCisgIGFzc2VydFdhcm5zUmVnZXggbm93IGFjY2VwdCBhIGtleXdvcmQgYXJndW1lbnQgJ21zZycgd2hlbiB1c2VkIGFzIGNvbnRleHQKKyAgbWFuYWdlcnMuICBJbml0aWFsIHBhdGNoIGJ5IFdpbnN0b24gRXdlcnQuCisKKy0gSXNzdWUgIzEwNjg0OiBzaHV0aWwubW92ZSB1c2VkIHRvIGRlbGV0ZSBhIGZvbGRlciBvbiBjYXNlIGluc2Vuc2l0aXZlCisgIGZpbGVzeXN0ZW1zIHdoZW4gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gbmFtZSB3aGVyZSB0aGUgc2FtZSBleGNlcHQKKyAgZm9yIHRoZSBjYXNlLgorCistIElzc3VlICMxMTY0Nzogb2JqZWN0cyBjcmVhdGVkIHVzaW5nIGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIgbm93IHN1cHBvcnQKKyAgbW9yZSB0aGFuIG9uZSBjYWxsIHRvIHRoZSBmdW5jdGlvbiB3aGVuIHVzZWQgYXMgYSBkZWNvcmF0b3IuIEluaXRpYWwgcGF0Y2gKKyAgYnkgWXNqIFJheS4KKworLSBJc3N1ZSAjMTE5MzA6IFJlbW92ZWQgZGVwcmVjYXRlZCB0aW1lLmFjY2VwdDJkeWVhciB2YXJpYWJsZS4KKyAgUmVtb3ZlZCB5ZWFyID49IDEwMDAgcmVzdHJpY3Rpb24gZnJvbSBkYXRldGltZS5zdHJmdGltZS4KKworLSBsb2dnaW5nOiBkb24ndCBkZWZpbmUgUXVldWVMaXN0ZW5lciBpZiBQeXRob24gaGFzIG5vIHRocmVhZCBzdXBwb3J0LgorCistIGZ1bmN0b29scy5jbXBfdG9fa2V5KCkgbm93IHdvcmtzIHdpdGggY29sbGVjdGlvbnMuSGFzaGFibGUoKS4KKworLSBJc3N1ZSAjMTEyNzc6IG1tYXAubW1hcCgpIGNhbGxzIGZjbnRsKGZkLCBGX0ZVTExGU1lOQykgb24gTWFjIE9TIFggdG8gZ2V0CisgIGFyb3VuZCBhIG1tYXAgYnVnIHdpdGggc3BhcnNlIGZpbGVzLiBQYXRjaCB3cml0dGVuIGJ5IFN0ZWZmZW4gRGFvZGUgTnVycG1lc28uCisKKy0gSXNzdWUgIzg0MDc6IEFkZCBzaWduYWwucHRocmVhZF9zaWdtYXNrKCkgZnVuY3Rpb24gdG8gZmV0Y2ggYW5kL29yIGNoYW5nZSB0aGUKKyAgc2lnbmFsIG1hc2sgb2YgdGhlIGNhbGxpbmcgdGhyZWFkLgorCistIElzc3VlICMxMTg1ODogY29uZmlncGFyc2VyLkV4dGVuZGVkSW50ZXJwb2xhdGlvbiBleHBlY3RlZCBsb3dlci1jYXNlIHNlY3Rpb24KKyAgbmFtZXMuCisKKy0gSXNzdWUgIzExMzI0OiBDb25maWdQYXJzZXIoaW50ZXJwb2xhdGlvbj1Ob25lKSBub3cgd29ya3MgY29ycmVjdGx5LgorCistIElzc3VlICMxMTgxMTogc3NsLmdldF9zZXJ2ZXJfY2VydGlmaWNhdGUoKSBpcyBub3cgSVB2Ni1jb21wYXRpYmxlLiAgUGF0Y2gKKyAgYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTc2MzogZG9uJ3QgdXNlIGRpZmZsaWIgaW4gVGVzdENhc2UuYXNzZXJ0TXVsdGlMaW5lRXF1YWwgaWYgdGhlCisgIHN0cmluZ3MgYXJlIHRvbyBsb25nLgorCistIElzc3VlICMxMTIzNjogZ2V0cGFzcy5nZXRwYXNzIHJlc3BvbmRzIHRvIGN0cmwtYyBvciBjdHJsLXogb24gdGVybWluYWwuCisKKy0gSXNzdWUgIzExODU2OiBTcGVlZCB1cCBwYXJzaW5nIG9mIEpTT04gbnVtYmVycy4KKworLSBJc3N1ZSAjMTEwMDU6IHRocmVhZGluZy5STG9jaygpLl9yZWxlYXNlX3NhdmUoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgdGhlCisgIGxvY2sgd2FzIG5vdCBhY3F1aXJlZC4KKworLSBJc3N1ZSAjMTEyNTg6IFNwZWVkIHVwIGN0eXBlcy51dGlsLmZpbmRfbGlicmFyeSgpIHVuZGVyIExpbnV4IGJ5IGEgZmFjdG9yCisgIG9mIDUgdG8gMTAuICBJbml0aWFsIHBhdGNoIGJ5IEpvbmFzIEguCisKKy0gSXNzdWUgIzExMzgyOiBUcml2aWFsIHN5c3RlbSBjYWxscywgc3VjaCBhcyBkdXAoKSBvciBwaXBlKCksIG5lZWRuJ3QKKyAgcmVsZWFzZSB0aGUgR0lMLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMTIyMzogQWRkIHRocmVhZGluZy5faW5mbygpIGZ1bmN0aW9uIHByb3ZpZGluZyBpbmZvcm1hdGlvbnMgYWJvdXQKKyAgdGhlIHRocmVhZCBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMTE3MzE6IHNpbXBsaWZ5L2VuaGFuY2UgZW1haWwgcGFyc2VyL2dlbmVyYXRvciBBUEkgYnkgaW50cm9kdWNpbmcKKyAgcG9saWN5IG9iamVjdHMuCisKKy0gSXNzdWUgIzExNzY4OiBUaGUgc2lnbmFsIGhhbmRsZXIgb2YgdGhlIHNpZ25hbCBtb2R1bGUgb25seSBjYWxscworICBQeV9BZGRQZW5kaW5nQ2FsbCgpIGZvciB0aGUgZmlyc3Qgc2lnbmFsIHRvIGZpeCBhIGRlYWRsb2NrIG9uIHJlZW50cmFudCBvcgorICBwYXJhbGxlbCBjYWxscy4gUHlFcnJfU2V0SW50ZXJydXB0KCkgd3JpdGVzIGFsc28gaW50byB0aGUgd2FrZSB1cCBmaWxlLgorCistIElzc3VlICMxMTQ5MjogZml4IHNldmVyYWwgaXNzdWVzIHdpdGggaGVhZGVyIGZvbGRpbmcgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCisKKy0gSXNzdWUgIzExODUyOiBBZGQgbWlzc2luZyBpbXBvcnRzIGFuZCB1cGRhdGUgdGVzdHMuCisKKy0gSXNzdWUgIzExODc1OiBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCdzIF9fcmVkdWNlX18gd2FzIHRlbXBvcmFyaWx5CisgIG11dGF0aW5nIHRoZSBvYmplY3QgaW5zdGVhZCBvZiBqdXN0IHdvcmtpbmcgb24gYSBjb3B5LgorCistIElzc3VlICMxMTQ2NzogRml4IHVybHBhcnNlIGJlaGF2aW9yIHdoZW4gaGFuZGxpbmcgdXJscyB3aGljaCBjb250YWlucyBzY2hlbWUKKyAgc3BlY2lmaWMgcGFydCBvbmx5IGRpZ2l0cy4gUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gY29sbGVjdGlvbnMuQ291bnRlcigpLmNvcHkoKSBub3cgd29ya3MgY29ycmVjdGx5IGZvciBzdWJjbGFzc2VzLgorCistIElzc3VlICMxMTQ3NDogRml4IHRoZSBidWcgd2l0aCB1cmwycGF0aG5hbWUoKSBoYW5kbGluZyBvZiAnL0N8Lycgb24gV2luZG93cy4KKyAgUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gSXNzdWUgIzExNjg0OiBjb21wbGV0ZSBlbWFpbC5wYXJzZXIgYnl0ZXMgQVBJIGJ5IGFkZGluZyBCeXRlc0hlYWRlclBhcnNlci4KKworLSBUaGUgYnoyIG1vZHVsZSBub3cgaGFuZGxlcyA0R2lCKyBpbnB1dCBidWZmZXJzIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjOTIzMzogRml4IGpzb24ubG9hZHMoJ3t9JykgdG8gcmV0dXJuIGEgZGljdCAoaW5zdGVhZCBvZiBhIGxpc3QpLCB3aGVuCisgIF9qc29uIGlzIG5vdCBhdmFpbGFibGUuCisKKy0gSXNzdWUgIzExODMwOiBSZW1vdmUgdW5uZWNlc3NhcnkgaW50cm9zcGVjdGlvbiBjb2RlIGluIHRoZSBkZWNpbWFsIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE3MDM6IHVybGxpYjIuZ2V0dXJsKCkgZG9lcyBub3QgcmV0dXJuIGNvcnJlY3QgdXJsIHdoZW4gdGhlIG9yaWdpbmFsCisgIHVybCBjb250YWlucyAjZnJhZ21lbnQuCisKKy0gSXNzdWUgIzEwMDE5OiBGaXhlZCByZWdyZXNzaW9uIGluIGpzb24gbW9kdWxlIHdoZXJlIGFuIGluZGVudCBvZiAwIHN0b3BwZWQKKyAgYWRkaW5nIG5ld2xpbmVzIGFuZCBhY3RlZCBpbnN0ZWFkIGxpa2UgJ05vbmUnLgorCistIElzc3VlICMxMTE4NjogcHlkb2MgaWdub3JlcyBhIG1vZHVsZSBpZiBpdHMgbmFtZSBjb250YWlucyBhIHN1cnJvZ2F0ZQorICBjaGFyYWN0ZXIgaW4gdGhlIGluZGV4IG9mIG1vZHVsZXMuCisKKy0gSXNzdWUgIzExODE1OiBVc2UgYSBsaWdodC13ZWlnaHQgU2ltcGxlUXVldWUgZm9yIHRoZSByZXN1bHQgcXVldWUgaW4KKyAgY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCisKKy0gSXNzdWUgIzUxNjI6IFRyZWF0IHNlcnZpY2VzIGxpa2UgZnJvemVuIGV4ZWN1dGFibGVzIHRvIGFsbG93IGNoaWxkIHNwYXduaW5nCisgIGZyb20gbXVsdGlwcm9jZXNzaW5nLmZvcmtpbmcgb24gV2luZG93cy4KKworLSBsb2dnaW5nLmJhc2ljQ29uZmlnIG5vdyBzdXBwb3J0cyBhbiBvcHRpb25hbCAnaGFuZGxlcnMnIGFyZ3VtZW50IHRha2luZyBhbgorICBpdGVyYWJsZSBvZiBoYW5kbGVycyB0byBiZSBhZGRlZCB0byB0aGUgcm9vdCBsb2dnZXIuIEFkZGl0aW9uYWwgcGFyYW1ldGVyCisgIGNoZWNrcyB3ZXJlIGFsc28gYWRkZWQgdG8gYmFzaWNDb25maWcuCisKKy0gSXNzdWUgIzExODE0OiBGaXggbGlrZWx5IHR5cG8gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wuX3Rlcm1pbmF0ZSgpLgorCistIElzc3VlICMxMTc0NzogRml4IHJhbmdlIGZvcm1hdHRpbmcgaW4gZGlmZmxpYi5jb250ZXh0X2RpZmYoKSBhbmQKKyAgZGlmZmxpYi51bmlmaWVkX2RpZmYoKS4KKworLSBJc3N1ZSAjODQyODogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gbXVsdGlwcm9jZXNzaW5nLlBvb2wgd2hlbiB0ZXJtaW5hdGluZworICB3b3JrZXIgcHJvY2Vzc2VzOiBuZXcgcHJvY2Vzc2VzIHdvdWxkIGJlIHNwYXduZWQgd2hpbGUgdGhlIHBvb2wgaXMgYmVpbmcKKyAgc2h1dCBkb3duLiAgUGF0Y2ggYnkgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMyNjUwOiByZS5lc2NhcGUoKSBubyBsb25nZXIgZXNjYXBlcyB0aGUgJ18nLgorCistIElzc3VlICMxMTc1Nzogc2VsZWN0LnNlbGVjdCgpIG5vdyByYWlzZXMgVmFsdWVFcnJvciB3aGVuIGEgbmVnYXRpdmUgdGltZW91dAorICBpcyBwYXNzZWQgKHByZXZpb3VzbHksIGEgc2VsZWN0LmVycm9yIHdpdGggRUlOVkFMIHdvdWxkIGJlIHJhaXNlZCkuICBQYXRjaAorICBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzczMTE6IGZpeCBodG1sLnBhcnNlciB0byBhY2NlcHQgbm9uLUFTQ0lJIGF0dHJpYnV0ZSB2YWx1ZXMuCisKKy0gSXNzdWUgIzExNjA1OiBlbWFpbC5wYXJzZXIuQnl0ZXNGZWVkUGFyc2VyIHdhcyBpbmNvcnJlY3RseSBjb252ZXJ0aW5nCisgIG11bHRpcGFydCBzdWJwYXJ0cyB3aXRoIGFuIDgtYml0IENURSBpbnRvIHVuaWNvZGUgaW5zdGVhZCBvZiBwcmVzZXJ2aW5nIHRoZQorICBieXRlcy4KKworLSBJc3N1ZSAjMTY5MDYwODogZW1haWwudXRpbC5mb3JtYXRhZGRyIGlzIG5vdyBSRkMgMjA0NyBhd2FyZTogIGl0IG5vdyBoYXMgYQorICBjaGFyc2V0IHBhcmFtZXRlciB0aGF0IGRlZmF1bHRzIHRvIHV0Zi04IGFuZCBpcyB1c2VkIGFzIHRoZSBjaGFyc2V0IGZvciBSRkMKKyAgMjA0NyBlbmNvZGluZyB3aGVuIHRoZSByZWFsbmFtZSBjb250YWlucyBub24tQVNDSUkgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTA5NjM6IEVuc3VyZSB0aGF0IHN1YnByb2Nlc3MuY29tbXVuaWNhdGUoKSBuZXZlciByYWlzZXMgRVBJUEUuCisKKy0gSXNzdWUgIzEwNzkxOiBJbXBsZW1lbnQgbWlzc2luZyBtZXRob2QgR3ppcEZpbGUucmVhZDEoKSwgYWxsb3dpbmcgR3ppcEZpbGUKKyAgdG8gYmUgd3JhcHBlZCBpbiBhIFRleHRJT1dyYXBwZXIuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNzA3OiBBZGRlZCBhIGZhc3QgQyB2ZXJzaW9uIG9mIGZ1bmN0b29scy5jbXBfdG9fa2V5KCkuCisgIFBhdGNoIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kuCisKKy0gSXNzdWUgIzExNjg4OiBBZGQgc3FsaXRlMy5Db25uZWN0aW9uLnNldF90cmFjZV9jYWxsYmFjaygpLiAgUGF0Y2ggYnkKKyAgVG9yc3RlbiBMYW5kc2Nob2ZmLgorCistIElzc3VlICMxMTc0NjogRml4IFNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKCkgdG8gYWNjZXB0IGVsbGlwdGljIGN1cnZlCisgIHByaXZhdGUga2V5cy4KKworLSBJc3N1ZSAjNTg2MzogUmV3cml0ZSBCWjJGaWxlIGluIHB1cmUgUHl0aG9uLCBhbmQgYWxsb3cgaXQgdG8gYWNjZXB0CisgIGZpbGUtbGlrZSBvYmplY3RzIHVzaW5nIGEgbmV3IGBgZmlsZW9iamBgIGNvbnN0cnVjdG9yIGFyZ3VtZW50LiAgUGF0Y2ggYnkKKyAgTmFkZWVtIFZhd2RhLgorCistIHVuaXR0ZXN0LlRlc3RDYXNlLmFzc2VydFNhbWVFbGVtZW50cyBoYXMgYmVlbiByZW1vdmVkLgorCistIHN5cy5nZXRmaWxlc3lzdGVtZW5jb2RpbmcoKSByYWlzZXMgYSBSdW50aW1lRXJyb3IgaWYgaW5pdGZzZW5jb2RpbmcoKSB3YXMgbm90CisgIGNhbGxlZCB5ZXQ6IGRldGVjdCBib290c3RyYXAgKHN0YXJ0dXApIGlzc3VlcyBlYXJsaWVyLgorCistIElzc3VlICMxMTM5MzogQWRkIHRoZSBuZXcgZmF1bHRoYW5kbGVyIG1vZHVsZS4KKworLSBJc3N1ZSAjMTE2MTg6IEZpeCB0aGUgdGltZW91dCBsb2dpYyBpbiB0aHJlYWRpbmcuTG9jay5hY3F1aXJlKCkgdW5kZXIgV2luZG93cy4KKworLSBSZW1vdmVkIHRoZSAnc3RyaWN0JyBhcmd1bWVudCB0byBlbWFpbC5wYXJzZXIuUGFyc2VyLCB3aGljaCBoYXMgYmVlbgorICBkZXByZWNhdGVkIHNpbmNlIFB5dGhvbiAyLjQuCisKKy0gSXNzdWUgIzExMjU2OiBGaXggaW5zcGVjdC5nZXRjYWxsYXJncyBvbiBmdW5jdGlvbnMgdGhhdCB0YWtlIG9ubHkga2V5d29yZAorICBhcmd1bWVudHMuCisKKy0gSXNzdWUgIzExNjk2OiBGaXggSUQgZ2VuZXJhdGlvbiBpbiBtc2lsaWIuCisKKy0gaXRlcnRvb2xzLmFjY3VtdWxhdGUgbm93IHN1cHBvcnRzIGFuIG9wdGlvbmFsICpmdW5jKiBhcmd1bWVudCBmb3IKKyAgYSB1c2VyLXN1cHBsaWVkIGJpbmFyeSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTE2OTI6IFJlbW92ZSB1bm5lY2Vzc2FyeSBkZW1vIGZ1bmN0aW9ucyBpbiBzdWJwcm9jZXNzIG1vZHVsZS4KKworLSBJc3N1ZSAjOTY5NjogRml4IGV4Y2VwdGlvbiBpbmNvcnJlY3RseSByYWlzZWQgYnkgeGRybGliLlBhY2tlci5wYWNrX2ludCB3aGVuCisgIHRyeWluZyB0byBwYWNrIGEgbmVnYXRpdmUgKGluLXJhbmdlKSBpbnRlZ2VyLgorCistIElzc3VlICMxMTY3NTogbXVsdGlwcm9jZXNzaW5nLltSYXddQXJyYXkgb2JqZWN0cyBjcmVhdGVkIGZyb20gYW4gaW50ZWdlciBzaXplCisgIGFyZSBub3cgemVyb2VkIG9uIGNyZWF0aW9uLiAgVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvdXIgc3BlY2lmaWVkIGJ5IHRoZQorICBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICM3NjM5OiBGaXggc2hvcnQgZmlsZSBuYW1lIGdlbmVyYXRpb24gaW4gYmRpc3RfbXNpCisKKy0gSXNzdWUgIzExNjU5OiBGaXggUmVzb3VyY2VXYXJuaW5nIGluIHRlc3Rfc3VicHJvY2VzcyBpbnRyb2R1Y2VkIGJ5ICMxMTQ1OS4KKyAgUGF0Y2ggYnkgQmVuIEhheWRlbi4KKworLSBJc3N1ZSAjMTE2MzU6IERvbid0IHVzZSBwb2xsaW5nIGluIHdvcmtlciB0aHJlYWRzIGFuZCBwcm9jZXNzZXMgbGF1bmNoZWQgYnkKKyAgY29uY3VycmVudC5mdXR1cmVzLgorCistIElzc3VlICM2ODExOiBBbGxvdyBpbXBvcnRsaWIgdG8gY2hhbmdlIGEgY29kZSBvYmplY3QncyBjb19maWxlbmFtZSBhdHRyaWJ1dGUKKyAgdG8gbWF0Y2ggdGhlIHBhdGggdG8gd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGN1cnJlbnRseSBpcywgbm90IHdoZXJlIHRoZSBjb2RlCisgIG9iamVjdCBvcmlnaW5hbGx5IGNhbWUgZnJvbS4KKworLSBJc3N1ZSAjODc1NDogSGF2ZSBpbXBvcnRsaWIgdXNlIHRoZSByZXByIG9mIGEgbW9kdWxlIG5hbWUgaW4gZXJyb3IgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzExNTkxOiBQcmV2ZW50ICJpbXBvcnQgc2l0ZSIgZnJvbSBtb2RpZnlpbmcgc3lzLnBhdGggd2hlbiBweXRob24KKyAgd2FzIHN0YXJ0ZWQgd2l0aCAtUy4KKworLSBjb2xsZWN0aW9ucy5uYW1lZHR1cGxlKCkgbm93IGFkZHMgYSBfc291cmNlIGF0dHJpYnV0ZSB0byB0aGUgZ2VuZXJhdGVkCisgIGNsYXNzLiAgVGhpcyBtYWtlIHRoZSBzb3VyY2UgbW9yZSBhY2Nlc3NpYmxlIHRoYW4gdGhlIG91dGRhdGVkCisgICJ2ZXJib3NlIiBvcHRpb24gd2hpY2ggcHJpbnRzIHRvIHN0ZG91dCBidXQgZG9lc24ndCBtYWtlIHRoZSBzb3VyY2UKKyAgc3RyaW5nIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTEzNzE6IE1hcmsgZ2V0b3B0IGVycm9yIG1lc3NhZ2VzIGFzIGxvY2FsaXphYmxlLiAgUGF0Y2ggYnkgRmlsaXAKKyAgR3J1c3pjennFhHNraS4KKworLSBJc3N1ZSAjMTEzMzM6IEFkZCBfX3Nsb3RzX18gdG8gY29sbGVjdGlvbnMgQUJDcy4KKworLSBJc3N1ZSAjMTE2Mjg6IGNtcF90b19rZXkgZ2VuZXJhdGVkIGNsYXNzIHNob3VsZCB1c2UgX19zbG90c19fLgorCistIElzc3VlICMxMTY2NjogbGV0IGhlbHAoKSBkaXNwbGF5IG5hbWVkIHR1cGxlIGF0dHJpYnV0ZXMgYW5kIG1ldGhvZHMKKyAgdGhhdCBzdGFydCB3aXRoIGEgbGVhZGluZyB1bmRlcnNjb3JlLgorCistIElzc3VlICMxMTY2MjogTWFrZSB1cmxsaWIgYW5kIHVybGxpYjIgaWdub3JlIHJlZGlyZWN0aW9ucyBpZiB0aGUKKyAgc2NoZW1lIGlzIG5vdCBIVFRQLCBIVFRQUyBvciBGVFAgKENWRS0yMDExLTE1MjEpLgorCistIElzc3VlICM1NTM3OiBGaXggdGltZTJpc296KCkgYW5kIHRpbWUybmV0c2NhcGUoKSBmdW5jdGlvbnMgb2YKKyAgaHR0cGxpYi5jb29raWVqYXIgZm9yIGV4cGlyYXRpb24geWVhciBncmVhdGVyIHRoYW4gMjAzOCBvbiAzMi1iaXQgc3lzdGVtcy4KKworLSBJc3N1ZSAjNDM5MTogVXNlIHByb3BlciBnZXR0ZXh0IHBsdXJhbCBmb3JtcyBpbiBvcHRwYXJzZS4KKworLSBJc3N1ZSAjMTExMjc6IFJhaXNlIGEgVHlwZUVycm9yIHdoZW4gdHJ5aW5nIHRvIHBpY2tsZSBhIHNvY2tldCBvYmplY3QuCisKKy0gSXNzdWUgIzExNTYzOiBDb25uZWN0aW9uOmNsb3NlIGhlYWRlciBpcyBzZW50IGJ5IHJlcXVlc3RzIHVzaW5nIFVSTE9wZW5lcgorICBjbGFzcyB3aGljaCBoZWxwcyBpbiBjbG9zaW5nIG9mIHNvY2tldHMgYWZ0ZXIgY29ubmVjdGlvbiBpcyBvdmVyLiBQYXRjaAorICBjb250cmlidXRpb25zIGJ5IEplZmYgTWNOZWlsIGFuZCBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExNDU5OiBBIGBgYnVmc2l6ZWBgIHZhbHVlIG9mIDAgaW4gc3VicHJvY2Vzcy5Qb3BlbigpIHJlYWxseSBjcmVhdGVzCisgIHVuYnVmZmVyZWQgcGlwZXMsIHN1Y2ggdGhhdCBzZWxlY3QoKSB3b3JrcyBwcm9wZXJseSBvbiB0aGVtLgorCistIElzc3VlICM1NDIxOiBGaXggbWlzbGVhZGluZyBlcnJvciBtZXNzYWdlIHdoZW4gb25lIG9mIHNvY2tldC5zZW5kdG8oKSdzCisgIGFyZ3VtZW50cyBoYXMgdGhlIHdyb25nIHR5cGUuICBQYXRjaCBieSBOaWtpdGEgVmV0b3Noa2luLgorCistIElzc3VlICMxMDgxMjogQWRkIHNvbWUgZXh0cmEgcG9zaXggZnVuY3Rpb25zIHRvIHRoZSBvcyBtb2R1bGUuCisKKy0gSXNzdWUgIzEwOTc5OiB1bml0dGVzdCBzdGRvdXQgYnVmZmVyaW5nIG5vdyB3b3JrcyB3aXRoIGNsYXNzIGFuZCBtb2R1bGUKKyAgc2V0dXAgYW5kIHRlYXJkb3duLgorCistIElzc3VlICMxMTU3NzogZml4IFJlc291cmNlV2FybmluZyB0cmlnZ2VyZWQgYnkgaW1wcm92ZWQgYmluaGV4IHRlc3QgY292ZXJhZ2UKKworLSBJc3N1ZSAjMTEyNDM6IGZpeCB0aGUgcGFyYW1ldGVyIHF1ZXJ5aW5nIG1ldGhvZHMgb2YgTWVzc2FnZSB0byB3b3JrIGlmCisgIHRoZSBoZWFkZXJzIGNvbnRhaW4gdW4tZW5jb2RlZCBub24tQVNDSUkgZGF0YS4KKworLSBJc3N1ZSAjMTE0MDE6IGZpeCBoYW5kbGluZyBvZiBoZWFkZXJzIHdpdGggbm8gdmFsdWU7IHRoaXMgZml4ZXMgYSByZWdyZXNzaW9uCisgIHJlbGF0aXZlIHRvIFB5dGhvbjIgYW5kIHRoZSByZXN1bHQgaXMgbm93IHRoZSBzYW1lIGFzIGl0IHdhcyBpbiBQeXRob24yLgorCistIElzc3VlICM5Mjk4OiBiYXNlNjQgYm9kaWVzIHdlcmVuJ3QgYmVpbmcgZm9sZGVkIHRvIGxpbmUgbGVuZ3RocyBsZXNzIHRoYW4gNzgsCisgIHdoaWNoIHdhcyBhIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMi4gIFVubGlrZSBQeXRob24yLCB0aGUgbGFzdCBsaW5lCisgIG9mIHRoZSBmb2xkZWQgYm9keSBub3cgZW5kcyB3aXRoIGEgY2FycmlhZ2UgcmV0dXJuLgorCistIElzc3VlICMxMTU2MDogc2h1dGlsLnVucGFja19hcmNoaXZlIG5vdyBjb3JyZWN0bHkgaGFuZGxlcyB0aGUgZm9ybWF0CisgIHBhcmFtZXRlci4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICM1ODcwOiBBZGQgYHN1YnByb2Nlc3MuREVWTlVMTGAgY29uc3RhbnQuCisKKy0gSXNzdWUgIzExMTMzOiBmaXggdHdvIGNhc2VzIHdoZXJlIGluc3BlY3QuZ2V0YXR0cl9zdGF0aWMgY2FuIHRyaWdnZXIgY29kZQorICBleGVjdXRpb24uIFBhdGNoIGJ5IEFuZHJlYXMgU3TDvGhyay4KKworLSBJc3N1ZSAjMTE1Njk6IHVzZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBzeXNjdGwgY29tbWFuZCBpbiBtdWx0aXByb2Nlc3NpbmcgdG8KKyAgZW5zdXJlIHRoYXQgaXQgd2lsbCBiZSBmb3VuZCByZWdhcmRsZXNzIG9mIHRoZSBzaGVsbCBQQVRILiBUaGlzIGVuc3VyZXMKKyAgdGhhdCBtdWx0aXByb2Nlc3NpbmcuY3B1X2NvdW50IHdvcmtzIG9uIGRlZmF1bHQgaW5zdGFsbHMgb2YgTWFjT1NYLgorCistIElzc3VlICMxMTUwMTogZGlzdXRpbHMuYXJjaGl2ZV91dGlscy5tYWtlX3ppcGZpbGUgbm8gbG9uZ2VyIGZhaWxzIGlmIHpsaWIgaXMKKyAgbm90IGluc3RhbGxlZC4gSW5zdGVhZCwgdGhlIHppcGZpbGUuWklQX1NUT1JFRCBjb21wcmVzc2lvbiBpcyB1c2VkIHRvIGNyZWF0ZQorICB0aGUgWmlwRmlsZS4gUGF0Y2ggYnkgTmF0YWxpYSBCLiBCaWRhcnQuCisKKy0gSXNzdWUgIzExMjg5OiBgc210cC5TTVRQYCBjbGFzcyBpcyBub3cgYSBjb250ZXh0IG1hbmFnZXIgc28gaXQgY2FuIGJlIHVzZWQKKyAgaW4gYSBgd2l0aGAgc3RhdGVtZW50LiAgQ29udHJpYnV0ZWQgYnkgR2lhbXBhb2xvIFJvZG9sYS4KKworLSBJc3N1ZSAjMTE1NTQ6IEZpeGVkIHN1cHBvcnQgZm9yIEphcGFuZXNlIGNvZGVjczsgcHJldmlvdXNseSB0aGUgYm9keSBvdXRwdXQKKyAgZW5jb2Rpbmcgd2FzIG5vdCBkb25lIGlmIGV1Yy1qcCBvciBzaGlmdC1qaXMgd2FzIHNwZWNpZmllZCBhcyB0aGUgY2hhcnNldC4KKworLSBJc3N1ZSAjMTE1MDk6IFNpZ25pZmljYW50bHkgaW5jcmVhc2UgdGVzdCBjb3ZlcmFnZSBvZiBmaWxlaW5wdXQuCisgIFBhdGNoIGJ5IERlbnZlciBDb25leWJlYXJlIGF0IFB5Q29uIDIwMTEgU3ByaW50cy4KKworLSBJc3N1ZSAjMTE0MDc6IGBUZXN0Q2FzZS5ydW5gIHJldHVybnMgdGhlIHJlc3VsdCBvYmplY3QgdXNlZCBvciBjcmVhdGVkLgorICBDb250cmlidXRlZCBieSBKYW5hdGhhbiBIYXJ0bGV5LgorCistIElzc3VlICMxMTUwMDogRml4ZWQgYSBidWcgaW4gdGhlIE9TIFggcHJveHkgYnlwYXNzIGNvZGUgZm9yIGZ1bGx5IHF1YWxpZmllZAorICBJUCBhZGRyZXNzZXMgaW4gdGhlIHByb3h5IGV4Y2VwdGlvbiBsaXN0LgorCistIElzc3VlICMxMTQ5MTogZGJtLmVycm9yIGlzIG5vIGxvbmdlciByYWlzZWQgd2hlbiBkYm0ub3BlbiBpcyBjYWxsZWQgd2l0aAorICB0aGUgIm4iIGFzIHRoZSBmbGFnIGFyZ3VtZW50IGFuZCB0aGUgZmlsZSBleGlzdHMuIFRoZSBiZWhhdmlvciBtYXRjaGVzCisgIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBnZW5lcmFsIGxvZ2ljLgorCistIElzc3VlICMxMTYyNDc3OiBQb3N0ZWwgUHJpbmNpcGxlIGFkanVzdG1lbnQgdG8gZW1haWwgZGF0ZSBwYXJzaW5nOiBoYW5kbGUgdGhlCisgIGZhY3QgdGhhdCBzb21lIG5vbi1jb21wbGlhbnQgTVVBcyB1c2UgJy4nIGluc3RlYWQgb2YgJzonIGluIHRpbWUgc3BlY3MuCisKKy0gSXNzdWUgIzExMTMxOiBGaXggc2lnbiBvZiB6ZXJvIGluIGRlY2ltYWwuRGVjaW1hbCBwbHVzIGFuZCBtaW51cworICBvcGVyYXRpb25zIHdoZW4gdGhlIHJvdW5kaW5nIG1vZGUgaXMgUk9VTkRfRkxPT1IuCisKKy0gSXNzdWUgIzk5MzU6IFNwZWVkIHVwIHBpY2tsaW5nIG9mIGluc3RhbmNlcyBvZiB1c2VyLWRlZmluZWQgY2xhc3Nlcy4KKworLSBJc3N1ZSAjNTYyMjogRml4IGN1cnNlcy53cmFwcGVyIHRvIHJhaXNlIGNvcnJlY3QgZXhjZXB0aW9uIGlmIGN1cnNlcworICBpbml0aWFsaXphdGlvbiBmYWlscy4KKworLSBJc3N1ZSAjMTE0MDg6IEluIHRocmVhZGluZy5Mb2NrLmFjcXVpcmUoKSwgb25seSBjYWxsIGdldHRpbWVvZmRheSgpIHdoZW4KKyAgcmVhbGx5IG5lY2Vzc2FyeS4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjMTEzOTE6IFdyaXRpbmcgdG8gYSBtbWFwIG9iamVjdCBjcmVhdGVkIHdpdGgKKyAgYGBtbWFwLlBST1RfUkVBRHxtbWFwLlBST1RfRVhFQ2BgIHdvdWxkIHNlZ2ZhdWx0IGluc3RlYWQgb2YgcmFpc2luZyBhCisgIFR5cGVFcnJvci4gIFBhdGNoIGJ5IENoYXJsZXMtRnJhbsOnb2lzIE5hdGFsaS4KKworLSBJc3N1ZSAjOTc5NTogYWRkIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCBzdXBwb3J0IGZvciBubnRwbGliLk5OVFAgY2xhc3MuCisKKy0gSXNzdWUgIzExMzA2OiBtYWlsYm94IGluIGNlcnRhaW4gY2FzZXMgYWRhcHRzIHRvIGFuIGluYWJpbGl0eSB0byBvcGVuCisgIGNlcnRhaW4gZmlsZXMgaW4gcmVhZC13cml0ZSBtb2RlLiAgUHJldmlvdXNseSBpdCBkZXRlY3RlZCB0aGlzIGJ5CisgIGNoZWNraW5nIGZvciBFQUNDRVMsIG5vdyBpdCBhbHNvIGNoZWNrcyBmb3IgRVJPRlMuCisKKy0gSXNzdWUgIzExMjY1OiBhc3luY29yZSBub3cgY29ycmVjdGx5IGhhbmRsZXMgRVBJUEUsIEVCQURGIGFuZCBFQUdBSU4gZXJyb3JzCisgIG9uIGFjY2VwdCgpLCBzZW5kKCkgYW5kIHJlY3YoKS4KKworLSBJc3N1ZSAjMTEzNzc6IERlcHJlY2F0ZSBwbGF0Zm9ybS5wb3BlbigpIGFuZCByZWltcGxlbWVudCBpdCB3aXRoIG9zLnBvcGVuKCkuCisKKy0gSXNzdWUgIzg1MTM6IE9uIFVOSVgsIHN1YnByb2Nlc3Mgc3VwcG9ydHMgYnl0ZXMgY29tbWFuZCBzdHJpbmcuCisKKy0gSXNzdWUgIzEwODY2OiBBZGQgc29ja2V0LnNldGhvc3RuYW1lKCkuICBJbml0aWFsIHBhdGNoIGJ5IFJvc3MgTGFnZXJ3YWxsLgorCistIElzc3VlICMxMTE0MDogTG9jay5yZWxlYXNlKCkgbm93IHJhaXNlcyBhIFJ1bnRpbWVFcnJvciB3aGVuIGF0dGVtcHRpbmcKKyAgdG8gcmVsZWFzZSBhbiB1bmFjcXVpcmVkIGxvY2ssIGFzIGNsYWltZWQgaW4gdGhlIHRocmVhZGluZyBkb2N1bWVudGF0aW9uLgorICBUaGUgX3RocmVhZC5lcnJvciBleGNlcHRpb24gaXMgbm93IGFuIGFsaWFzIG9mIFJ1bnRpbWVFcnJvci4gIFBhdGNoIGJ5CisgIEZpbGlwIEdydXN6Y3p5xYRza2kuICBQYXRjaCBmb3IgX2R1bW15X3RocmVhZCBieSBBeW1lcmljIEF1Z3VzdGluLgorCistIElzc3VlICM4NTk0OiBmdHBsaWIgbm93IHByb3ZpZGVzIGEgc291cmNlX2FkZHJlc3MgcGFyYW1ldGVyIHRvIHNwZWNpZnkgd2hpY2gKKyAgKGFkZHJlc3MsIHBvcnQpIHRvIGJpbmQgdG8gYmVmb3JlIGNvbm5lY3RpbmcuCisKKy0gSXNzdWUgIzExMzI2OiBBZGQgdGhlIG1pc3NpbmcgY29ubmVjdF9leCgpIGltcGxlbWVudGF0aW9uIGZvciBTU0wgc29ja2V0cywKKyAgYW5kIG1ha2UgaXQgd29yayBmb3Igbm9uLWJsb2NraW5nIGNvbm5lY3RzLgorCistIElzc3VlICMxMTI5NzogQWRkIGNvbGxlY3Rpb25zLkNoYWluTWFwKCkuCisKKy0gSXNzdWUgIzEwNzU1OiBBZGQgdGhlIHBvc2l4LmZsaXN0ZGlyKCkgZnVuY3Rpb24uICBQYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjNDc2MTogQWRkIHRoZSBgYCphdCgpYGAgZmFtaWx5IG9mIGZ1bmN0aW9ucyAob3BlbmF0KCksIGV0Yy4pIHRvIHRoZQorICBwb3NpeCBtb2R1bGUuICBQYXRjaCBieSBSb3NzIExhZ2Vyd2FsbC4KKworLSBJc3N1ZSAjNzMyMjogVHJ5aW5nIHRvIHJlYWQgZnJvbSBhIHNvY2tldCdzIGZpbGUtbGlrZSBvYmplY3QgYWZ0ZXIgYSB0aW1lb3V0CisgIG9jY3VycmVkIG5vdyByYWlzZXMgYW4gZXJyb3IgaW5zdGVhZCBvZiBzaWxlbnRseSBsb3NpbmcgZGF0YS4KKworLSBJc3N1ZSAjMTEyOTE6IHBvcGxpYi5QT1Agbm8gbG9uZ2VyIHN1cHByZXNzZXMgZXJyb3JzIG9uIHF1aXQoKS4KKworLSBJc3N1ZSAjMTExNzc6IGFzeW5jb3JlJ3MgY3JlYXRlX3NvY2tldCgpIGFyZ3VtZW50cyBjYW4gbm93IGJlIG9taXR0ZWQuCisKKy0gSXNzdWUgIzYwNjQ6IEFkZCBhIGBgZGFlbW9uYGAga2V5d29yZCBhcmd1bWVudCB0byB0aGUgdGhyZWFkaW5nLlRocmVhZAorICBhbmQgbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MgY29uc3RydWN0b3JzIGluIG9yZGVyIHRvIG92ZXJyaWRlIHRoZQorICBkZWZhdWx0IGJlaGF2aW91ciBvZiBpbmhlcml0aW5nIHRoZSBkYWVtb25pYyBwcm9wZXJ0eSBmcm9tIHRoZSBjdXJyZW50CisgIHRocmVhZC9wcm9jZXNzLgorCistIElzc3VlICMxMDk1NjogQnVmZmVyZWQgSS9PIGNsYXNzZXMgcmV0cnkgcmVhZGluZyBvciB3cml0aW5nIGFmdGVyIGEgc2lnbmFsCisgIGhhcyBhcnJpdmVkIGFuZCB0aGUgaGFuZGxlciByZXR1cm5lZCBzdWNjZXNzZnVsbHkuCisKKy0gSXNzdWUgIzEwNzg0OiBOZXcgb3MuZ2V0cHJpb3JpdHkoKSBhbmQgb3Muc2V0cHJpb3JpdHkoKSBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzExMTE0OiBGaXggY2F0YXN0cm9waGljIHBlcmZvcm1hbmNlIG9mIHRlbGwoKSBvbiB0ZXh0IGZpbGVzICh1cAorICB0byAxMDAweCBmYXN0ZXIgaW4gc29tZSBjYXNlcykuICBJdCBpcyBzdGlsbCBvbmUgdG8gdHdvIG9yZGVyIG9mIG1hZ25pdHVkZXMKKyAgc2xvd2VyIHRoYW4gYmluYXJ5IHRlbGwoKS4KKworLSBJc3N1ZSAjMTA4ODI6IEFkZCBvcy5zZW5kZmlsZSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTA4Njg6IEFsbG93IHVzYWdlIG9mIHRoZSByZWdpc3RlciBtZXRob2Qgb2YgYW4gQUJDIGFzIGEgY2xhc3MKKyAgZGVjb3JhdG9yLgorCistIElzc3VlICMxMTIyNDogRml4ZWQgYSByZWdyZXNzaW9uIGluIHRhcmZpbGUgdGhhdCBhZmZlY3RlZCB0aGUgZmlsZS1saWtlCisgIG9iamVjdHMgcmV0dXJuZWQgYnkgVGFyRmlsZS5leHRyYWN0ZmlsZSgpIHJlZ2FyZGluZyBwZXJmb3JtYW5jZSwgbWVtb3J5CisgIGNvbnN1bXB0aW9uIGFuZCBmYWlsdXJlcyB3aXRoIHRoZSBzdHJlYW0gaW50ZXJmYWNlLgorCistIElzc3VlICMxMDkyNDogQWRkaW5nIHNhbHQgYW5kIE1vZHVsYXIgQ3J5cHQgRm9ybWF0IHRvIGNyeXB0IGxpYnJhcnkuCisgIE1vdmVkIG9sZCBDIHdyYXBwZXIgdG8gX2NyeXB0LCBhbmQgYWRkZWQgYSBQeXRob24gd3JhcHBlciB3aXRoCisgIGVuaGFuY2VkIHNhbHQgZ2VuZXJhdGlvbiBhbmQgc2ltcGxlciBBUEkgZm9yIHBhc3N3b3JkIGdlbmVyYXRpb24uCisKKy0gSXNzdWUgIzExMDc0OiBNYWtlICd0b2tlbml6ZScgc28gaXQgY2FuIGJlIHJlbG9hZGVkLgorCistIElzc3VlICMxMTA4NTogTW92ZWQgY29sbGVjdGlvbnMgYWJzdHJhY3QgYmFzZSBjbGFzc2VzIGludG8gYSBzZXBhcmF0ZQorICBtb2R1bGUgY2FsbGVkIGNvbGxlY3Rpb25zLmFiYywgZm9sbG93aW5nIHRoZSBwYXR0ZXJuIHVzZWQgYnkgaW1wb3J0bGliLmFiYy4KKyAgRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCB0aGUgbmFtZXMgYXJlIGltcG9ydGVkIGludG8gdGhlIGNvbGxlY3Rpb25zCisgIG1vZHVsZS4KKworLSBJc3N1ZSAjNDY4MTogQWxsb3cgbW1hcCgpIHRvIHdvcmsgb24gZmlsZSBzaXplcyBhbmQgb2Zmc2V0cyBsYXJnZXIgdGhhbgorICA0R0IsIGV2ZW4gb24gMzItYml0IGJ1aWxkcy4gIEluaXRpYWwgcGF0Y2ggYnkgUm9zcyBMYWdlcndhbGwsIGFkYXB0ZWQgZm9yCisgIDMyLWJpdCBXaW5kb3dzLgorCistIElzc3VlICMxMTE2OTogY29tcGlsZWFsbCBtb2R1bGUgdXNlcyByZXByKCkgdG8gZm9ybWF0IGZpbGVuYW1lcyBhbmQgcGF0aHMgdG8KKyAgZXNjYXBlIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIGFuZCBzaG93IHNwYWNlcy4KKworLSBJc3N1ZSAjMTEwODk6IEZpeCBwZXJmb3JtYW5jZSBpc3N1ZSBsaW1pdGluZyB0aGUgdXNlIG9mIENvbmZpZ1BhcnNlcigpCisgIHdpdGggbGFyZ2UgY29uZmlnIGZpbGVzLgorCistIElzc3VlICMxMDI3NjogRml4IHRoZSByZXN1bHRzIG9mIHpsaWIuY3JjMzIoKSBhbmQgemxpYi5hZGxlcjMyKCkgb24gYnVmZmVycworICBsYXJnZXIgdGhhbiA0R0IuICBQYXRjaCBieSBOYWRlZW0gVmF3ZGEuCisKKy0gSXNzdWUgIzExMzg4OiBBZGRlZCBhIGNsZWFyKCkgbWV0aG9kIHRvIE11dGFibGVTZXF1ZW5jZQorCistIElzc3VlICMxMTE3NDogQWRkIGFyZ3BhcnNlLk1ldGF2YXJUeXBlSGVscEZvcm1hdHRlciwgd2hpY2ggdXNlcyB0eXBlIG5hbWVzCisgIGZvciB0aGUgbmFtZXMgb2Ygb3B0aW9uYWwgYW5kIHBvc2l0aW9uYWwgYXJndW1lbnRzIGluIGhlbHAgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzkzNDg6IFJhaXNlIGFuIGVhcmx5IGVycm9yIGlmIGFyZ3BhcnNlIG5hcmdzIGFuZCBtZXRhdmFyIGRvbid0IG1hdGNoLgorCistIElzc3VlICM4OTgyOiBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgYXJncGFyc2UgTmFtZXNwYWNlIG9iamVjdC4KKworLSBJc3N1ZSAjOTM0MzogRG9jdW1lbnQgdGhhdCBhcmdwYXJzZSBwYXJlbnQgcGFyc2VycyBtdXN0IGJlIGNvbmZpZ3VyZWQgYmVmb3JlCisgIHRoZWlyIGNoaWxkcmVuLgorCistIElzc3VlICM5MDI2OiBGaXggb3JkZXIgb2YgYXJncGFyc2Ugc3ViLWNvbW1hbmRzIGluIGhlbHAgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzkzNDc6IEZpeCBmb3JtYXR0aW5nIGZvciB0dXBsZXMgaW4gYXJncGFyc2UgdHlwZT0gZXJyb3IgbWVzc2FnZXMuCisKKy0gSXNzdWUgIzEyMTkxOiBBZGRlZCBzaHV0aWwuY2hvd24oKSB0byBjaGFuZ2UgdXNlciBhbmQvb3IgZ3JvdXAgb3duZXIgb2YgYQorICBnaXZlbiBwYXRoIGFsc28gc3BlY2lmeWluZyB0aGVpciBuYW1lcy4KKworLSBJc3N1ZSAjMTM5ODg6IFRoZSBfZWxlbWVudHRyZWUgYWNjZWxlcmF0b3IgaXMgdXNlZCB3aGVuZXZlciBhdmFpbGFibGUuCisgIE5vdyB4bWwuZXRyZWUuY0VsZW1lbnRUcmVlIGJlY29tZXMgYSBkZXByZWNhdGVkIGFsaWFzIHRvIEVsZW1lbnRUcmVlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjNjgwNzogUnVuIG1zaXN1cHBvcnQubWFrIGVhcmxpZXIuCisKKy0gSXNzdWUgIzEwNTgwOiBNaW5vciBncmFtbWFyIGNoYW5nZSBpbiBXaW5kb3dzIGluc3RhbGxlci4KKworLSBJc3N1ZSAjMTMzMjY6IENsZWFuIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvcnJlY3RseSBvbiBPcGVuQlNELgorCistIFBFUCAzOTM6IHRoZSBjb25maWd1cmUgb3B0aW9uIC0td2l0aC13aWRlLXVuaWNvZGUgaXMgcmVtb3ZlZC4KKworLSBJc3N1ZSAjMTI4NTI6IFNldCBfWE9QRU5fU09VUkNFIHRvIDcwMCwgaW5zdGVhZCBvZiA2MDAsIHRvIGdldCBQT1NJWCAyMDA4CisgIGZ1bmN0aW9ucyBvbiBPcGVuQlNEIChlLmcuIGZkb3BlbmRpcikuCisKKy0gSXNzdWUgIzExODYzOiBSZW1vdmUgc3VwcG9ydCBmb3IgbGVnYWN5IHN5c3RlbXMgZGVwcmVjYXRlZCBpbiBQeXRob24gMy4yCisgIChmb2xsb3dpbmcgUEVQIDExKS4gIFRoZXNlIHN5c3RlbXMgYXJlIHN5c3RlbXMgdXNpbmcgTWFjaCBDIFRocmVhZHMsCisgIFN1bk9TIGxpZ2h0d2VpZ2h0IHByb2Nlc3NlcywgR05VIHB0aCB0aHJlYWRzIGFuZCBJUklYIHRocmVhZHMuCisKKy0gSXNzdWUgIzg3NDY6IENvcnJlY3QgZmF1bHR5IGNvbmZpZ3VyZSBjaGVja3Mgc28gdGhhdCBvcy5jaGZsYWdzKCkgYW5kCisgIG9zLmxjaGZsYWdzKCkgYXJlIG9uY2UgYWdhaW4gYnVpbHQgb24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgdGhlc2UKKyAgZnVuY3Rpb25zIChCU0QgYW5kIE9TIFgpLiAgQWxzbyBhZGQgbmV3IHN0YXQgZmlsZSBmbGFncyBmb3IgT1MgWAorICAoVUZfSElEREVOIGFuZCBVRl9DT01QUkVTU0VEKS4KKworLSBJc3N1ZSAjMTA2NDU6IEluc3RhbGxpbmcgUHl0aG9uIG5vIGxvbmdlciBjcmVhdGVzIGEKKyAgUHl0aG9uLVguWS5aLXB5WC5ZLmVnZy1pbmZvIGZpbGUgaW4gdGhlIGxpYi1keW5sb2FkIGRpcmVjdG9yeS4KKworLSBEbyBub3QgYWNjaWRlbnRhbGx5IGluY2x1ZGUgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHNxbGl0ZS5oIHR3aWNlIHdoZW4KKyAgYnVpbGRpbmcgc3FsaXRlMy4KKworLSBJc3N1ZSAjMTEyMTc6IEZvciA2NC1iaXQvMzItYml0IE1hYyBPUyBYIHVuaXZlcnNhbCBmcmFtZXdvcmsgYnVpbGRzLAorICBlbnN1cmUgIm1ha2UgaW5zdGFsbCIgY3JlYXRlcyBzeW1saW5rcyBpbiAtLXByZWZpeCBiaW4gZm9yIHRoZSAiLTMyIgorICBmaWxlcyBpbiB0aGUgZnJhbWV3b3JrIGJpbiBkaXJlY3RvcnkgbGlrZSB0aGUgaW5zdGFsbGVyIGRvZXMuCisKKy0gSXNzdWUgIzExMzQ3OiBVc2UgLS1uby1hcy1uZWVkZWQgd2hlbiBsaW5raW5nIGxpYnB5dGhvbjMuc28uCisKKy0gSXNzdWUgIzExNDExOiBGaXggJ21ha2UgREVTVERJUj0nIHdpdGggYSByZWxhdGl2ZSBkZXN0aW5hdGlvbi4KKworLSBJc3N1ZSAjMTEyNjg6IFByZXZlbnQgTWFjIE9TIFggSW5zdGFsbGVyIGZhaWx1cmUgaWYgRG9jdW1lbnRhdGlvbgorICBwYWNrYWdlIGhhZCBwcmV2aW91c2x5IGJlZW4gaW5zdGFsbGVkLgorCistIElzc3VlICMxMTQ5NTogT1NGIHN1cHBvcnQgaXMgZWxpbWluYXRlZC4gSXQgd2FzIGRlcHJlY2F0ZWQgaW4gUHl0aG9uIDMuMi4KKworCitJRExFCistLS0tCisKKy0gSXNzdWUgIzExNzE4OiBJRExFJ3Mgb3BlbiBtb2R1bGUgZGlhbG9nIGNvdWxkbid0IGZpbmQgdGhlIF9faW5pdF9fLnB5CisgIGZpbGUgaW4gYSBwYWNrYWdlLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTQwNTM6IHBhdGNoY2hlY2sucHkgKCJtYWtlIHBhdGNoY2hlY2siKSBub3cgd29ya3Mgd2l0aCBNUSBwYXRjaGVzLgorICBQYXRjaCBieSBGcmFuY2lzY28gTWFydMOtbiBCcnVndcOpLgorCistIElzc3VlICMxMzkzMDogMnRvMyBpcyBub3cgYWJsZSB0byB3cml0ZSBpdHMgY29udmVydGVkIG91dHB1dCBmaWxlcyB0byBhbm90aGVyCisgIGRpcmVjdG9yeSB0cmVlIGFzIHdlbGwgYXMgY29weWluZyB1bmNoYW5nZWQgZmlsZXMgYW5kIGFsdGVyaW5nIHRoZSBmaWxlCisgIHN1ZmZpeC4gIFNlZSBpdHMgbmV3IC1vLCAtVyBhbmQgLS1hZGQtc3VmZml4IG9wdGlvbnMuICBUaGlzIG1ha2VzIGl0IG1vcmUKKyAgdXNlZnVsIGluIG1hbnkgYXV0b21hdGVkIGNvZGUgdHJhbnNsYXRpb24gd29ya2Zsb3dzLgorCistIElzc3VlICMxMzYyODogcHl0aG9uLWdkYi5weSBpcyBub3cgYWJsZSB0byByZXRyaWV2ZSBtb3JlIGZyYW1lcyBpbiB0aGUgUHl0aG9uCisgIHRyYWNlYmFjayBpZiBQeXRob24gaXMgb3B0aW1pemVkLgorCistIElzc3VlICMxMTk5NjogbGlicHl0aG9uIChnZGIpLCByZXBsYWNlICJweS1idCIgY29tbWFuZCBieSAicHktYnQtZnVsbCIgYW5kCisgIGFkZCBhIHNtYXJ0ZXIgInB5LWJ0IiBjb21tYW5kIHByaW50aW5nIGEgY2xhc3NpYyBQeXRob24gdHJhY2ViYWNrLgorCistIElzc3VlICMxMTE3OTogTWFrZSBjY2JlbmNoIHdvcmsgdW5kZXIgUHl0aG9uIDMuMSBhbmQgMi43IGFnYWluLgorCistIElzc3VlICMxMDYzOTogcmVpbmRlbnQucHkgbm8gbG9uZ2VyIGNvbnZlcnRzIG5ld2xpbmVzIGFuZCB3aWxsIHJhaXNlCisgIGFuIGVycm9yIGlmIGF0dGVtcHRpbmcgdG8gY29udmVydCBhIGZpbGUgd2l0aCBtaXhlZCBuZXdsaW5lcy4KKyAgIi0tbmV3bGluZSIgb3B0aW9uIGFkZGVkIHRvIHNwZWNpZnkgbmV3IGxpbmUgY2hhcmFjdGVyLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTM4NDA6IFRoZSBlcnJvciBtZXNzYWdlIHByb2R1Y2VkIGJ5IGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcgorICB3aGVuIGdpdmVuIGEgVW5pY29kZSBzdHJpbmcgaGFzIGJlZW4gZml4ZWQuCisKKy0gSXNzdWUgIzk5NzU6IHNvY2tldDogRml4IGluY29ycmVjdCB1c2Ugb2YgZmxvd2luZm8gYW5kIHNjb3BlX2lkLiBQYXRjaCBieQorICBWaWxtb3MgTmViZWhhai4KKworLSBJc3N1ZSAjNzc3Nzogc29ja2V0OiBBZGQgUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAoUEZfUkRTKSBzdXBwb3J0LgorCistIElzc3VlICMxMzE1OTogRmlsZUlPIGFuZCBCWjJDb21wcmVzc29yL0JaMkRlY29tcHJlc3NvciBub3cgdXNlIGEgbGluZWFyLXRpbWUKKyAgYnVmZmVyIGdyb3d0aCBzdHJhdGVneSBpbnN0ZWFkIG9mIGEgcXVhZHJhdGljLXRpbWUgb25lLgorCistIElzc3VlICMxMDE0MTogc29ja2V0OiBBZGQgU29ja2V0Q0FOIChQRl9DQU4pIHN1cHBvcnQuIEluaXRpYWwgcGF0Y2ggYnkKKyAgTWF0dGhpYXMgRnVjaHMsIHVwZGF0ZWQgYnkgVGlhZ28gR29uw6dhbHZlcy4KKworLSBJc3N1ZSAjMTMwNzA6IEZpeCBhIGNyYXNoIHdoZW4gYSBUZXh0SU9XcmFwcGVyIGNhdWdodCBpbiBhIHJlZmVyZW5jZSBjeWNsZQorICB3b3VsZCBiZSBmaW5hbGl6ZWQgYWZ0ZXIgdGhlIHJlZmVyZW5jZSB0byBpdHMgdW5kZXJseWluZyBCdWZmZXJlZFJXUGFpcidzCisgIHdyaXRlciBnb3QgY2xlYXJlZCBieSB0aGUgR0MuCisKKy0gSXNzdWUgIzEyODgxOiBjdHlwZXM6IEZpeCBzZWdmYXVsdCB3aXRoIGxhcmdlIHN0cnVjdHVyZSBmaWVsZCBuYW1lcy4KKworLSBJc3N1ZSAjMTMwNTg6IG9zc2F1ZGlvZGV2OiBmaXggYSBmaWxlIGRlc2NyaXB0b3IgbGVhayBvbiBlcnJvci4gUGF0Y2ggYnkKKyAgVGhvbWFzIEphcm9zY2guCisKKy0gSXNzdWUgIzEzMDEzOiBjdHlwZXM6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIGluIFB5Q0FycmF5VHlwZV9mcm9tX2N0eXBlLgorICBUaGFua3MgdG8gU3VtYW4gU2FoYSBmb3IgZmluZGluZyB0aGUgYnVnIGFuZCBwcm92aWRpbmcgYSBwYXRjaC4KKworLSBJc3N1ZSAjMTMwMjI6IEZpeDogX211bHRpcHJvY2Vzc2luZy5yZWN2ZmQoKSBkb2Vzbid0IGNoZWNrIHRoYXQKKyAgZmlsZSBkZXNjcmlwdG9yIHdhcyBhY3R1YWxseSByZWNlaXZlZC4KKworLSBJc3N1ZSAjMTE3MjcxMTogQWRkICdsb25nIGxvbmcnIHN1cHBvcnQgdG8gdGhlIGFycmF5IG1vZHVsZS4KKyAgSW5pdGlhbCBwYXRjaCBieSBPcmVuIFRpcm9zaCBhbmQgSGlyb2thenUgWWFtYW1vdG8uCisKKy0gSXNzdWUgIzEyNDgzOiBjdHlwZXM6IEZpeCBhIGNyYXNoIHdoZW4gdGhlIGRlc3RydWN0aW9uIG9mIGEgY2FsbGJhY2sKKyAgb2JqZWN0IHRyaWdnZXJzIHRoZSBnYXJiYWdlIGNvbGxlY3Rvci4KKworLSBJc3N1ZSAjMTI5NTA6IEZpeCBwYXNzaW5nIGZpbGUgZGVzY3JpcHRvcnMgaW4gbXVsdGlwcm9jZXNzaW5nLCB1bmRlcgorICBPcGVuSW5kaWFuYS9JbGx1bW9zLgorCistIElzc3VlICMxMjc2NDogRml4IGEgY3Jhc2ggaW4gY3R5cGVzIHdoZW4gdGhlIG5hbWUgb2YgYSBTdHJ1Y3R1cmUgZmllbGQgaXMgbm90CisgIGEgc3RyaW5nLgorCistIElzc3VlICMxMTI0MTogc3ViY2xhc3NlcyBvZiBjdHlwZXMuQXJyYXkgY2FuIG5vdyBiZSBzdWJjbGFzc2VkLgorCistIElzc3VlICM5NjUxOiBGaXggYSBjcmFzaCB3aGVuIGN0eXBlcy5jcmVhdGVfc3RyaW5nX2J1ZmZlcigwKSB3YXMgcGFzc2VkIHRvCisgIHNvbWUgZnVuY3Rpb25zIGxpa2UgZmlsZS53cml0ZSgpLgorCistIElzc3VlICMxMDMwOTogRGVmaW5lIF9HTlVfU09VUkNFIHNvIHRoYXQgbXJlbWFwKCkgZ2V0cyB0aGUgcHJvcGVyCisgIHNpZ25hdHVyZS4gIFdpdGhvdXQgdGhpcywgYXJjaGl0ZWN0dXJlcyB3aGVyZSBzaXplb2Ygdm9pZCogIT0gc2l6ZW9mIGludCBhcmUKKyAgYnJva2VuLiAgUGF0Y2ggZ2l2ZW4gYnkgSGFsbHZhcmQgQiBGdXJ1c2V0aC4KKworLSBJc3N1ZSAjMTIwNTE6IEZpeCBzZWdmYXVsdCBpbiBqc29uLmR1bXBzKCkgd2hpbGUgZW5jb2RpbmcgaGlnaGx5LW5lc3RlZAorICBvYmplY3RzIHVzaW5nIHRoZSBDIGFjY2VsZXJhdGlvbnMuCisKKy0gSXNzdWUgIzEyMDE3OiBGaXggc2VnZmF1bHQgaW4ganNvbi5sb2FkcygpIHdoaWxlIGRlY29kaW5nIGhpZ2hseS1uZXN0ZWQKKyAgb2JqZWN0cyB1c2luZyB0aGUgQyBhY2NlbGVyYXRpb25zLgorCistIElzc3VlICMxODM4OiBQcmV2ZW50IHNlZ2ZhdWx0IGluIGN0eXBlcywgd2hlbiBfYXNfcGFyYW1ldGVyXyBvbiBhIGNsYXNzIGlzIHNldAorICB0byBhbiBpbnN0YW5jZSBvZiB0aGUgY2xhc3MuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMxMTY4OTogRml4IGEgdmFyaWFibGUgc2NvcGluZyBlcnJvciBpbiBhbiBzcWxpdGUzIHRlc3QKKworLSBJc3N1ZSAjMTM3ODY6IFJlbW92ZSB1bmltcGxlbWVudGVkICd0cmFjZScgbG9uZyBvcHRpb24gZnJvbSByZWdydGVzdC5weS4KKworLSBJc3N1ZSAjMTM3MjU6IEZpeCByZWdydGVzdCB0byByZWNvZ25pemUgdGhlIGRvY3VtZW50ZWQgLWQgZmxhZy4KKyAgUGF0Y2ggYnkgRXJubyBUdWtpYS4KKworLSBJc3N1ZSAjMTMzMDQ6IFNraXAgdGVzdCBjYXNlIGlmIHVzZXIgc2l0ZS1wYWNrYWdlcyBkaXNhYmxlZCAoLXMgb3IKKyAgUFlUSE9OTk9VU0VSU0lURSkuICAoUGF0Y2ggYnkgQ2FybCBNZXllcikKKworLSBJc3N1ZSAjNTY2MTogQWRkIGEgdGVzdCBmb3IgRUNPTk5SRVNFVC9FUElQRSBoYW5kbGluZyB0byB0ZXN0X2FzeW5jb3JlLiBQYXRjaAorICBieSBYYXZpZXIgZGUgR2F5ZS4KKworLSBJc3N1ZSAjMTMyMTg6IEZpeCB0ZXN0X3NzbCBmYWlsdXJlcyBvbiBEZWJpYW4vVWJ1bnR1LgorCistIFJlLWVuYWJsZSBsaWIydG8zJ3MgdGVzdF9wYXJzZXIucHkgdGVzdHMsIHRob3VnaCB3aXRoIGFuIGV4cGVjdGVkIGZhaWx1cmUKKyAgKHNlZSBpc3N1ZSAxMzEyNSkuCisKKy0gSXNzdWUgIzEyNjU2OiBBZGQgdGVzdHMgZm9yIElQdjYgYW5kIFVuaXggc29ja2V0cyB0byB0ZXN0X2FzeW5jb3JlLgorCistIElzc3VlICM2NDg0OiBBZGQgdW5pdCB0ZXN0cyBmb3IgbWFpbGNhcCBtb2R1bGUgKHBhdGNoIGJ5IEdyZWdvcnkgTm9maSkKKworLSBJc3N1ZSAjMTE2NTE6IEltcHJvdmUgdGhlIE1ha2VmaWxlIHRlc3QgdGFyZ2V0cyB0byBydW4gbW9yZSBvZiB0aGUgdGVzdCBzdWl0ZQorICBtb3JlIHF1aWNrbHkuIFRoZSAtLW11bHRpcHJvY2VzcyBvcHRpb24gaXMgbm93IGVuYWJsZWQgYnkgZGVmYXVsdCwgcmVkdWNpbmcKKyAgdGhlIGFtb3VudCBvZiB0aW1lIG5lZWRlZCB0byBydW4gdGhlIHRlc3RzLiAibWFrZSB0ZXN0IiBhbmQgIm1ha2UgcXVpY2t0ZXN0IgorICBub3cgaW5jbHVkZSBzb21lIHJlc291cmNlLWludGVuc2l2ZSB0ZXN0cywgYnV0IG5vIGxvbmdlciBydW4gdGhlIHRlc3Qgc3VpdGUKKyAgdHdpY2UgdG8gY2hlY2sgZm9yIGJ1Z3MgaW4gLnB5YyBnZW5lcmF0aW9uLiBUb29scy9zY3JpcHRzL3J1bl90ZXN0LnB5IHByb3ZpZGVzCisgIGFuIGVhc3kgcGxhdGZvcm0taW5kZXBlbmRlbnQgd2F5IHRvIHJ1biB0ZXN0IHN1aXRlIHdpdGggc2Vuc2libGUgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzEyMzMxOiBUaGUgdGVzdCBzdWl0ZSBmb3IgdGhlIHBhY2thZ2luZyBtb2R1bGUgY2FuIG5vdyBydW4gZnJvbSBhbgorICBpbnN0YWxsZWQgUHl0aG9uLgorCistIElzc3VlICMxMjMzMTogVGhlIHRlc3Qgc3VpdGUgZm9yIGxpYjJ0bzMgY2FuIG5vdyBydW4gZnJvbSBhbiBpbnN0YWxsZWQKKyAgUHl0aG9uLgorCistIElzc3VlICMxMjYyNjogSW4gcmVncnRlc3QsIGFsbG93IHRvIGZpbHRlciB0ZXN0cyB1c2luZyBhIGdsb2IgZmlsdGVyCisgIHdpdGggdGhlIGBgLW1gYCAob3IgYGAtLW1hdGNoYGApIG9wdGlvbi4gIFRoaXMgd29ya3Mgd2l0aCBhbGwgdGVzdCBjYXNlcworICB1c2luZyB0aGUgdW5pdHRlc3QgbW9kdWxlLiAgVGhpcyBpcyB1c2VmdWwgd2l0aCBsb25nIHRlc3Qgc3VpdGVzCisgIHN1Y2ggYXMgdGVzdF9pbyBvciB0ZXN0X3N1YnByb2Nlc3MuCisKKy0gSXNzdWUgIzEyNjI0OiBJdCBpcyBub3cgcG9zc2libGUgdG8gZmFpbCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZSB3aGVuCisgIHJ1bm5pbmcgaW4gdmVyYm9zZSBtb2RlIChgYC12YGAgb3IgYGAtV2BgKSwgYnkgdXNpbmcgdGhlIGBgLS1mYWlsZmFzdGBgCisgIChvciBgYC1HYGApIG9wdGlvbiB0byByZWdydGVzdC4gIFRoaXMgaXMgdXNlZnVsIHdpdGggbG9uZyB0ZXN0IHN1aXRlcworICBzdWNoIGFzIHRlc3RfaW8gb3IgdGVzdF9zdWJwcm9jZXNzLgorCistIElzc3VlICMxMjU4NzogQ29ycmVjdCBmYXVsdHkgdGVzdCBmaWxlIGFuZCByZWZlcmVuY2UgaW4gdGVzdF90b2tlbml6ZS4KKyAgKFBhdGNoIGJ5IFJvYmVydCBYaWFvKQorCistIElzc3VlICMxMjU3MzogQWRkIHJlc291cmNlIGNoZWNrcyBmb3IgZGFuZ2xpbmcgVGhyZWFkIGFuZCBQcm9jZXNzIG9iamVjdHMuCisKKy0gSXNzdWUgIzEyNTQ5OiBDb3JyZWN0IHRlc3RfcGxhdGZvcm0gdG8gbm90IGZhaWwgd2hlbiBPUyBYIHJldHVybnMgJ3g4Nl82NCcKKyAgYXMgdGhlIHByb2Nlc3NvciB0eXBlIG9uIHNvbWUgTWFjIHN5c3RlbXMuCisKKy0gU2tpcCBuZXR3b3JrIHRlc3RzIHdoZW4gZ2V0YWRkcmluZm8oKSByZXR1cm5zIEVBSV9BR0FJTiwgbWVhbmluZyBhIHRlbXBvcmFyeQorICBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbi4KKworLSBJc3N1ZSAjMTE4MTI6IFNvbHZlIHRyYW5zaWVudCBzb2NrZXQgZmFpbHVyZSB0byBjb25uZWN0IHRvICdsb2NhbGhvc3QnCisgIGluIHRlc3RfdGVsbmV0bGliLnB5LgorCistIFNvbHZlZCBhIHBvdGVudGlhbCBkZWFkbG9jayBpbiB0ZXN0X3RlbG5ldGxpYi5weS4gUmVsYXRlZCB0byBpc3N1ZSAjMTE4MTIuCisKKy0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3JvYm90cGFyc2VyIHdoZW4gbXVlYmxlc21vcmFsZWRhLmNvbSBpcyBmbGFreSBhbmQKKyAgYW4gb3ZlcnplYWxvdXMgRE5TIHNlcnZpY2UgKGUuZy4gT3BlbkROUykgcmVkaXJlY3RzIHRvIGEgcGxhY2Vob2xkZXIKKyAgV2ViIHNpdGUuCisKKy0gQXZvaWQgZmFpbGluZyBpbiB0ZXN0X3VybGxpYm5ldC50ZXN0X2JhZF9hZGRyZXNzIHdoZW4gc29tZSBvdmVyemVhbG91cworICBETlMgc2VydmljZSAoZS5nLiBPcGVuRE5TKSByZXNvbHZlcyBhIG5vbi1leGlzdGVudCBkb21haW4gbmFtZS4gIFRoZSB0ZXN0CisgIGlzIG5vdyBza2lwcGVkIGluc3RlYWQuCisKKy0gSXNzdWUgIzEyNDQwOiBXaGVuIHRlc3Rpbmcgd2hldGhlciBzb21lIGJpdHMgaW4gU1NMQ29udGV4dC5vcHRpb25zIGNhbiBiZQorICByZXNldCwgY2hlY2sgdGhlIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgaGVhZGVycyBQeXRob24gd2FzIGNvbXBpbGVkIGFnYWluc3QsCisgIHJhdGhlciB0aGFuIHRoZSBydW50aW1lIHZlcnNpb24gb2YgdGhlIE9wZW5TU0wgbGlicmFyeS4KKworLSBJc3N1ZSAjMTE1MTI6IEFkZCBhIHRlc3Qgc3VpdGUgZm9yIHRoZSBjZ2l0YiBtb2R1bGUuIFBhdGNoIGJ5IFJvYmJpZSBDbGVtb25zLgorCistIElzc3VlICMxMjQ5NzogSW5zdGFsbCB0ZXN0L2RhdGEgdG8gcHJldmVudCBmYWlsdXJlcyBvZiB0aGUgdmFyaW91cyBjb2RlY21hcHMKKyAgdGVzdHMuCisKKy0gSXNzdWUgIzEyNDk2OiBJbnN0YWxsIHRlc3QvY2FwYXRoIGRpcmVjdG9yeSB0byBwcmV2ZW50IHRlc3RfY29ubmVjdF9jYXBhdGgKKyAgdGVzdGNhc2UgZmFpbHVyZSBpbiB0ZXN0X3NzbC4KKworLSBJc3N1ZSAjMTI0Njk6IFJ1biB3YWtldXAgYW5kIHBlbmRpbmcgc2lnbmFsIHRlc3RzIGluIGEgc3VicHJvY2VzcyB0byBydW4gdGhlCisgIHRlc3QgaW4gYSBmcmVzaCBwcm9jZXNzIHdpdGggb25seSBvbmUgdGhyZWFkIGFuZCB0byBub3QgY2hhbmdlIHNpZ25hbAorICBoYW5kbGluZyBvZiB0aGUgcGFyZW50IHByb2Nlc3MuCisKKy0gSXNzdWUgIzg3MTY6IEF2b2lkIGNyYXNoZXMgY2F1c2VkIGJ5IEFxdWEgVGsgb24gT1NYIHdoZW4gYXR0ZW1wdGluZyB0byBydW4KKyAgdGVzdF90ayBvciB0ZXN0X3R0a19ndWlvbmx5IHVuZGVyIGEgdXNlcm5hbWUgdGhhdCBpcyBub3QgY3VycmVudGx5IGxvZ2dlZAorICBpbiB0byB0aGUgY29uc29sZSB3aW5kb3dzZXJ2ZXIgKGFzIG1heSBiZSB0aGUgY2FzZSB1bmRlciBidWlsZGJvdCBvciBzc2gpLgorCistIElzc3VlICMxMjQwNzogRXhwbGljaXRseSBza2lwIHRlc3RfY2FwaS5FbWJlZGRpbmdUZXN0IHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEyNDAwOiByZWdydGVzdCAtVyBkb2Vzbid0IHJlcnVuIHRoZSB0ZXN0cyB0d2ljZSBhbnltb3JlLCBidXQgY2FwdHVyZXMKKyAgdGhlIG91dHB1dCBhbmQgZGlzcGxheXMgaXQgb24gZmFpbHVyZSBpbnN0ZWFkLiByZWdydGVzdCAtdiBkb2Vzbid0IHByaW50IHRoZQorICBlcnJvciB0d2ljZSBhbnltb3JlIGlmIHRoZXJlIGlzIG9ubHkgb25lIGVycm9yLgorCistIElzc3VlICMxMjE0MTogSW5zdGFsbCBjb3BpZXMgb2YgdGVtcGxhdGUgQyBtb2R1bGUgZmlsZSBzbyB0aGF0CisgIHRlc3RfYnVpbGRfZXh0IG9mIHRlc3RfZGlzdHV0aWxzIGFuZCB0ZXN0X2NvbW1hbmRfYnVpbGRfZXh0IG9mCisgIHRlc3RfcGFja2FnaW5nIGFyZSBubyBsb25nZXIgc2lsZW50bHkgc2tpcHBlZCB3aGVuCisgIHJ1biBvdXRzaWRlIG9mIGEgYnVpbGQgZGlyZWN0b3J5LgorCistIElzc3VlICM4NzQ2OiBBZGQgYWRkaXRpb25hbCB0ZXN0cyBmb3Igb3MuY2hmbGFncygpIGFuZCBvcy5sY2hmbGFncygpLgorICBQYXRjaCBieSBHYXJyZXR0IENvb3Blci4KKworLSBJc3N1ZSAjMTA3MzY6IEZpeCB0ZXN0X3R0ayB0ZXN0X3dpZGdldHMgZmFpbHVyZXMgd2l0aCBDb2NvYSBUayA4LjUuOQorICAyLjggKyAgb24gTWFjIE9TIFguICAoUGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQorCistIElzc3VlICMxMjA1NzogQWRkIHRlc3RzIGZvciBJU08gMjAyMiBjb2RlY3MgKGlzbzIwMjJfanAsIGlzbzIwMjJfanBfMiwKKyAgaXNvMjAyMl9rcikuCisKKy0gSXNzdWUgIzEyMDk2OiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0ZXN0X3RocmVhZGluZy50ZXN0X3dhaXRmb3IoKS4gUGF0Y2gKKyAgd3JpdHRlbiBieSBDaGFybGVzLUZyYW7Dp29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzExNjE0OiBpbXBvcnQgX19oZWxsb19fIHByaW50cyAiSGVsbG8gV29ybGQhIi4gUGF0Y2ggd3JpdHRlbiBieQorICBBbmRyZWFzIFN0w7xocmsuCisKKy0gSXNzdWUgIzU3MjM6IEltcHJvdmUganNvbiB0ZXN0cyB0byBiZSBleGVjdXRlZCB3aXRoIGFuZCB3aXRob3V0IGFjY2VsZXJhdGlvbnMuCisKKy0gSXNzdWUgIzEyMDQxOiBNYWtlIHRlc3Rfd2FpdDMgbW9yZSByb2J1c3QuCisKKy0gSXNzdWUgIzExODczOiBDaGFuZ2UgcmVnZXggaW4gdGVzdF9jb21waWxlYWxsIHRvIGZpeCBvY2Nhc2lvbmFsIGZhaWx1cmVzIHdoZW4KKyAgdGhlIHJhbmRvbWx5IGdlbmVyYXRlZCB0ZW1wb3JhcnkgcGF0aCBoYXBwZW5lZCB0byBtYXRjaCB0aGUgcmVnZXguCisKKy0gSXNzdWUgIzExOTU4OiBGaXggRlRQIHRlc3RzIGZvciBJUHY2LCBiaW5kIHRvICI6OjEiIGluc3RlYWQgb2YgImxvY2FsaG9zdCIuCisgIFBhdGNoIHdyaXR0ZW4gYnkgQ2hhcmxlcy1GcmFuY29pcyBOYXRhbGkuCisKKy0gSXNzdWUgIzg0MDcsICMxMTg1OTogRml4IHRlc3RzIG9mIHRlc3RfaW8gdXNpbmcgdGhyZWFkcyBhbmQgYW4gYWxhcm06IHVzZQorICBwdGhyZWFkX3NpZ21hc2soKSB0byBlbnN1cmUgdGhhdCB0aGUgU0lHQUxSTSBzaWduYWwgaXMgcmVjZWl2ZWQgYnkgdGhlIG1haW4KKyAgdGhyZWFkLgorCistIElzc3VlICMxMTgxMTogRmFjdG9yIG91dCBkZXRlY3Rpb24gb2YgSVB2NiBzdXBwb3J0IG9uIHRoZSBjdXJyZW50IGhvc3QKKyAgYW5kIG1ha2UgaXQgYXZhaWxhYmxlIGFzIGBgdGVzdC5zdXBwb3J0LklQVjZfRU5BQkxFRGBgLiAgUGF0Y2ggYnkKKyAgQ2hhcmxlcy1GcmFuw6dvaXMgTmF0YWxpLgorCistIElzc3VlICMxMDkxNDogQWRkIGEgbWluaW1hbCBlbWJlZGRpbmcgdGVzdCB0byB0ZXN0X2NhcGkuCisKKy0gSXNzdWUgIzExMjIzOiBTa2lwIHRlc3RfbG9ja19hY3F1aXJlX2ludGVycnVwdGlvbigpIGFuZAorICB0ZXN0X3Jsb2NrX2FjcXVpcmVfaW50ZXJydXB0aW9uKCkgb2YgdGVzdF90aHJlYWRzaWduYWxzIGlmIGEgdGhyZWFkIGxvY2sgaXMKKyAgaW1wbGVtZW50ZWQgdXNpbmcgYSBQT1NJWCBtdXRleCBhbmQgYSBQT1NJWCBjb25kaXRpb24gdmFyaWFibGUuIEEgUE9TSVgKKyAgY29uZGl0aW9uIHZhcmlhYmxlIGNhbm5vdCBiZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCAoZS5nLiBvbiBMaW51eCwgdGhlCisgIGZ1dGV4IHN5c3RlbSBjYWxsIGlzIHJlc3RhcnRlZCkuCisKKy0gSXNzdWUgIzExNzkwOiBGaXggc3BvcmFkaWMgZmFpbHVyZXMgaW4gdGVzdF9tdWx0aXByb2Nlc3NpbmcuV2l0aFByb2Nlc3Nlc1Rlc3RDb25kaXRpb24uCisKKy0gRml4IHBvc3NpYmxlICJmaWxlIGFscmVhZHkgZXhpc3RzIiBlcnJvciB3aGVuIHJ1bm5pbmcgdGhlIHRlc3RzIGluIHBhcmFsbGVsLgorCistIElzc3VlICMxMTcxOTogRml4IG1lc3NhZ2UgYWJvdXQgdW5leHBlY3RlZCB0ZXN0X21zaWxpYiBza2lwIG9uIG5vbi1XaW5kb3dzCisgIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgTmFkZWVtIFZhd2RhLgorCistIElzc3VlICMxMTcyNzogQWRkIGEgLS10aW1lb3V0IG9wdGlvbiB0byByZWdydGVzdDogaWYgYSB0ZXN0IHRha2VzIG1vcmUgdGhhbgorICBUSU1FT1VUIHNlY29uZHMsIGR1bXBzIHRoZSB0cmFjZWJhY2sgb2YgYWxsIHRocmVhZHMgYW5kIGV4aXRzLgorCistIElzc3VlICMxMTY1MzogZml4IC1XIHdpdGggLWogaW4gcmVncnRlc3QuCisKKy0gVGhlIGVtYWlsIHRlc3Qgc3VpdGUgbm93IGxpdmVzIGluIHRoZSBMaWIvdGVzdC90ZXN0X2VtYWlsIHBhY2thZ2UuICBUaGUgdGVzdAorICBoYXJuZXNzIGNvZGUgaGFzIGFsc28gYmVlbiBtb2Rlcm5pemVkIHRvIGFsbG93IHVzZSBvZiBuZXcgdW5pdHRlc3QgZmVhdHVyZXMuCisKKy0gcmVncnRlc3Qgbm93IGRpc2NvdmVycyB0ZXN0IHBhY2thZ2VzIGFzIHdlbGwgYXMgdGVzdCBtb2R1bGVzLgorCistIElzc3VlICMxMTU3NzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIGJpbmhleC5weS4gUGF0Y2ggYnkgQXJrYWR5IEtvcGx5YXJvdi4KKworLSBOZXcgdGVzdF9jcmFzaGVycyBhZGRlZCB0byBleGVyY2lzZSB0aGUgc2NyaXB0cyBpbiB0aGUgTGliL3Rlc3QvY3Jhc2hlcnMKKyAgZGlyZWN0b3J5IGFuZCBjb25maXJtIHRoZXkgZmFpbCBhcyBleHBlY3RlZAorCistIElzc3VlICMxMTU3ODogYWRkZWQgdGVzdCBmb3IgdGhlIHRpbWVpdCBtb2R1bGUuICBQYXRjaCBieSBNaWNoYWVsIEhlbnJ5LgorCistIElzc3VlICMxMTUwMzogaW1wcm92ZSB0ZXN0IGNvdmVyYWdlIG9mIHBvc2l4cGF0aC5weS4gUGF0Y2ggYnkgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTUwNTogaW1wcm92ZXMgdGVzdCBjb3ZlcmFnZSBvZiBzdHJpbmcucHksIGluY3JlYXNlcyBncmFudWxhcml0eSBvZgorICBzdHJpbmcuRm9ybWF0dGVyIHRlc3RzLiBJbml0aWFsIHBhdGNoIGJ5IEFsaWNpYSBBcmxlbi4KKworLSBJc3N1ZSAjMTE1NDg6IEltcHJvdmUgdGVzdCBjb3ZlcmFnZSBvZiB0aGUgc2h1dGlsIG1vZHVsZS4gUGF0Y2ggYnkKKyAgRXZhbiBEYW5kcmVhLgorCistIElzc3VlICMxMTU1NDogUmVhY3RpdmF0ZWQgdGVzdF9lbWFpbF9jb2RlY3MuCisKKy0gSXNzdWUgIzExNTA1OiBpbXByb3ZlcyB0ZXN0IGNvdmVyYWdlIG9mIHN0cmluZy5weS4gUGF0Y2ggYnkgQWxpY2lhCisgIEFybGVuCisKKy0gSXNzdWUgIzExNDkwOiB0ZXN0X3N1YnByb2Nlc3M6dGVzdF9sZWFraW5nX2Zkc19vbl9lcnJvciBubyBsb25nZXIgZ2l2ZXMgYQorICBmYWxzZSBwb3NpdGl2ZSBpZiB0aGUgbGFzdCBkaXJlY3RvcnkgaW4gdGhlIHBhdGggaXMgaW5hY2Nlc3NpYmxlLgorCistIElzc3VlICMxMTIyMzogRml4IHRlc3RfdGhyZWFkc2lnbmFscyB0byBmYWlsLCBub3QgaGFuZywgd2hlbiB0aGUKKyAgbm9uLXNlbWFwaG9yZSBpbXBsZW1lbnRhdGlvbiBvZiBsb2NrcyBpcyB1c2VkIHVuZGVyIFBPU0lYLgorCistIElzc3VlICMxMDkxMTogQWRkIHRlc3RzIG9uIENHSSB3aXRoIG5vbi1BU0NJSSBjaGFyYWN0ZXJzLiBQYXRjaCB3cml0dGVuIGJ5CisgIFBpZXJyZSBRdWVudGVsLgorCistIElzc3VlICM5OTMxOiBGaXggaGFuZ3MgaW4gR1VJIHRlc3RzIHVuZGVyIFdpbmRvd3MgaW4gY2VydGFpbiBjb25kaXRpb25zLgorICBQYXRjaCBieSBIaXJva2F6dSBZYW1hbW90by4KKworLSBJc3N1ZSAjMTA1MTI6IFByb3Blcmx5IGNsb3NlIHNvY2tldHMgdW5kZXIgdGVzdC50ZXN0X2NnaS4KKworLSBJc3N1ZSAjMTA5OTI6IE1ha2UgdGVzdHMgcGFzcyB1bmRlciBjb3ZlcmFnZS4KKworLSBJc3N1ZSAjMTA4MjY6IFByZXZlbnQgc3BvcmFkaWMgZmFpbHVyZSBpbiB0ZXN0X3N1YnByb2Nlc3Mgb24gU29sYXJpcyBkdWUKKyAgdG8gb3BlbiBkb29yIGZpbGVzLgorCistIElzc3VlICMxMDk5MDogUHJldmVudCB0ZXN0cyBmcm9tIGNsb2JiZXJpbmcgYSBzZXQgdHJhY2UgZnVuY3Rpb24uCisKK0MtQVBJCistLS0tLQorCistIEFkZCBQeU9iamVjdF9HZW5lcmljR2V0RGljdCBhbmQgUHlPYmplY3RfR2VuZXJpU2V0RGljdC4gVGhleSBhcmUgZ2VuZXJpYworICBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBnZXR0ZXIgYW5kIHNldHRlciBvZiBhIGBgX19kaWN0X19gYCBkZXNjcmlwdG9yIG9mIEMKKyAgdHlwZXMuCisKKy0gSXNzdWUgIzEzNzI3OiBBZGQgMyBtYWNyb3MgdG8gYWNjZXNzIFB5RGF0ZVRpbWVfRGVsdGEgbWVtYmVyczoKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfREFZUywgUHlEYXRlVGltZV9ERUxUQV9HRVRfU0VDT05EUywKKyAgUHlEYXRlVGltZV9ERUxUQV9HRVRfTUlDUk9TRUNPTkRTLgorCistIElzc3VlICMxMDU0MjogQWRkIDQgbWFjcm9zIHRvIHdvcmsgd2l0aCBzdXJyb2dhdGVzOiBQeV9VTklDT0RFX0lTX1NVUlJPR0FURSwKKyAgUHlfVU5JQ09ERV9JU19ISUdIX1NVUlJPR0FURSwgUHlfVU5JQ09ERV9JU19MT1dfU1VSUk9HQVRFLAorICBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUy4KKworLSBJc3N1ZSAjMTI3MjQ6IEFkZCBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQgbWFjcm8gZm9yIHJldHVybmluZyBOb3RJbXBsZW1lbnRlZC4KKworLSBQWV9QQVRDSExFVkVMX1JFVklTSU9OIGhhcyBiZWVuIHJlbW92ZWQsIHNpbmNlIGl0J3MgbWVhbmluZ2xlc3Mgd2l0aAorICBNZXJjdXJpYWwuCisKKy0gSXNzdWUgIzEyMTczOiBUaGUgZmlyc3QgYXJndW1lbnQgb2YgUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwgaXMgbm93IGBjb25zdAorICBjaGFyICpgIGluc3RlYWQgb2YgYGNoYXIgKmAuCisKKy0gSXNzdWUgIzEyMzgwOiBQeUFyZ19QYXJzZVR1cGxlIG5vdyBhY2NlcHRzIGEgYnl0ZWFycmF5IGZvciB0aGUgJ2MnIGZvcm1hdC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlcyAjMTM0OTEgYW5kICMxMzk5NTogRml4IG1hbnkgZXJyb3JzIGluIHNxbGl0ZTMgZG9jdW1lbnRhdGlvbi4KKyAgSW5pdGlhbCBwYXRjaCBmb3IgIzEzNDkxIGJ5IEpvaGFubmVzIFZvZ2VsLgorCistIElzc3VlICMxMzQwMjogRG9jdW1lbnQgYWJzb2x1dGVuZXNzIG9mIHN5cy5leGVjdXRhYmxlLgorCistIElzc3VlICMxMzg4MzogUFlUSE9OQ0FTRU9LIGFsc28gd29ya3Mgb24gT1MgWC4KKworLSBJc3N1ZSAjOTAyMTogQWRkIGFuIGludHJvZHVjdGlvbiB0byB0aGUgY29weSBtb2R1bGUgZG9jdW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjNjAwNTogRXhhbXBsZXMgaW4gdGhlIHNvY2tldCBsaWJyYXJ5IGRvY3VtZW50YXRpb24gdXNlIHNlbmRhbGwsIHdoZXJlCisgIHJlbGV2YW50LCBpbnN0ZWFkIHNlbmQgbWV0aG9kLgorCistIElzc3VlICMxMjc5ODogVXBkYXRlZCB0aGUgbWltZXR5cGVzIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzEyOTQ5OiBEb2N1bWVudCB0aGUga3dvbmx5YXJnY291bnQgYXJndW1lbnQgZm9yIHRoZSBQeUNvZGVfTmV3CisgIEMgQVBJIGZ1bmN0aW9uLgorCistIElzc3VlICMxMzUxMzogRml4IGlvLklPQmFzZSBkb2N1bWVudGF0aW9uIHRvIGNvcnJlY3RseSBsaW5rIHRvIHRoZQorICBpby5JT0Jhc2UucmVhZGxpbmUgbWV0aG9kIGluc3RlYWQgb2YgdGhlIHJlYWRsaW5lIG1vZHVsZS4KKworLSBJc3N1ZSAjMTMyMzc6IFJlb3JnYW5pc2Ugc3VicHJvY2VzcyBkb2N1bWVudGF0aW9uIHRvIGVtcGhhc2lzZSBjb252ZW5pZW5jZQorICBmdW5jdGlvbnMgYW5kIHRoZSBtb3N0IGNvbW1vbmx5IG5lZWRlZCBhcmd1bWVudHMgdG8gUG9wZW4uCisKKy0gSXNzdWUgIzEzMTQxOiBEZW1vbnN0cmF0ZSByZWNvbW1lbmRlZCBzdHlsZSBmb3Igc29ja2V0c2VydmVyIGV4YW1wbGVzLgorCistIElzc3VlICMxMTgxODogRml4IHRlbXBmaWxlIGV4YW1wbGVzIGZvciBQeXRob24gMy4KKworCiBXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjI/CiA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTcwNyw3ICs0ODA0LDcgQEAKIC0gSXNzdWUgIzE0ODY3MTM6IEhUTUxQYXJzZXIgbm93IGhhcyBhbiBvcHRpb25hbCB0b2xlcmFudCBtb2RlIHdoZXJlIGl0IHRyaWVzIHRvCiAgIGd1ZXNzIGF0IHRoZSBjb3JyZWN0IHBhcnNpbmcgb2YgaW52YWxpZCBodG1sLgogCi0tIElzc3VlICMxMDU1NDogQWRkIGNvbnRleHQgbWFuYWdlciBzdXBwb3J0IHRvIHN1YnByb2Nlc3MuUG9wZW4gb2JqZWN0cy4KKy0gSXNzdWUgIzEwNTU0OiBBZGQgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sIHN1cHBvcnQgdG8gc3VicHJvY2Vzcy5Qb3BlbiBvYmplY3RzLgogCiAtIElzc3VlICM4OTg5OiBlbWFpbC51dGlscy5tYWtlX21zZ2lkIG5vdyBoYXMgYSBkb21haW4gcGFyYW1ldGVyIHRoYXQgY2FuCiAgIG92ZXJyaWRlIHRoZSBkb21haW4gbmFtZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgbXNnaWQuCkBAIC05ODMsNyArNTA4MCw3IEBACiAgIGBgTWF5YmVFbmNvZGluZ0Vycm9yYGAgZXhjZXB0aW9uLgogCiAtIElzc3VlICM5MjQ0OiBUaGUgYGBhcHBseV9hc3luYygpYGAgYW5kIGBgbWFwX2FzeW5jKClgYCBtZXRob2RzIG9mCi0gIGBgbXVsdGlwcm9jZXNzaW5nLlBvb2xgYCBub3cgYWNjZXB0cyBhIGBgZXJyb3JfY2FsbGJhY2tgYCBhcmd1bWVudC4gIFRoaXMgY2FuCisgIGBgbXVsdGlwcm9jZXNzaW5nLlBvb2xgYCBub3cgYWNjZXB0cyBhbiBgYGVycm9yX2NhbGxiYWNrYGAgYXJndW1lbnQuICBUaGlzIGNhbgogICBiZSBhIGNhbGxiYWNrIHdpdGggdGhlIHNpZ25hdHVyZSBgYGNhbGxiYWNrKGV4YylgYCwgd2hpY2ggd2lsbCBiZSBjYWxsZWQgaWYKICAgdGhlIHRhcmdldCByYWlzZXMgYW4gZXhjZXB0aW9uLgogCkBAIC0xMDY5LDcgKzUxNjYsNyBAQAogLSBJc3N1ZSAjMTAyNTM6IEZpbGVJTyBsZWFrcyBhIGZpbGUgZGVzY3JpcHRvciB3aGVuIHRyeWluZyB0byBvcGVuIGEgZmlsZSBmb3IKICAgYXBwZW5kIHRoYXQgaXNuJ3Qgc2Vla2FibGUuICBQYXRjaCBieSBCcmlhbiBCcmF6aWwuCiAKLS0gU3VwcG9ydCBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgZm9yIGZpbGUtbGlrZSBvYmplY3RzIHJldHVybmVkIGJ5IG1haWxib3gKKy0gU3VwcG9ydCBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgZm9yIGZpbGUtbGlrZSBvYmplY3RzIHJldHVybmVkIGJ5IG1haWxib3gKICAgYGBnZXRfZmlsZSgpYGAgbWV0aG9kcy4KIAogLSBJc3N1ZSAjMTAyNDY6IHV1LmVuY29kZSBkaWRuJ3QgY2xvc2UgZmlsZSBvYmplY3RzIGV4cGxpY2l0bHkgd2hlbiBmaWxlbmFtZXMKQEAgLTEwODAsNyArNTE3Nyw3IEBACiAKIC0gQ2xvc2UgZmlsZSBvYmplY3RzIGluIG1vZHVsZWZpbmRlciBpbiBhIHRpbWVseSBtYW5uZXIuCiAKLS0gQ2xvc2UgYSBpby5UZXh0SU9XcmFwcGVyIG9iamVjdCBpbiBlbWFpbC5wYXJzZXIgaW4gYSB0aW1lbHkgbWFubmVyLgorLSBDbG9zZSBhbiBpby5UZXh0SU9XcmFwcGVyIG9iamVjdCBpbiBlbWFpbC5wYXJzZXIgaW4gYSB0aW1lbHkgbWFubmVyLgogCiAtIENsb3NlIGEgZmlsZSBvYmplY3QgaW4gZGlzdHV0aWxzLnN5c2NvbmZpZyBpbiBhIHRpbWVseSBtYW5uZXIuCiAKQEAgLTEyMDMsNyArNTMwMCw3IEBACiAKIC0gSXNzdWUgIzEwMTQzOiBVcGRhdGUgIm9zLnBhdGhjb25mIiB2YWx1ZXMuCiAKLS0gSXNzdWUgIzY1MTg6IFN1cHBvcnQgY29udGV4dCBtYW5hZ2VyIHByb3Rjb2wgZm9yIG9zc2F1ZGlvZGV2IHR5cGVzLgorLSBJc3N1ZSAjNjUxODogU3VwcG9ydCBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgZm9yIG9zc2F1ZGlvZGV2IHR5cGVzLgogCiAtIElzc3VlICM2NzgyNTA6IE1ha2UgbW1hcCBmbHVzaCBhIG5vb3Agb24gQUNDRVNTX1JFQUQgYW5kIEFDQ0VTU19DT1BZLgogCkBAIC0xODEyLDcgKzU5MDksNyBAQAogCiAtIElzc3VlICM4MTA1OiBWYWxpZGF0ZSBmaWxlIGRlc2NyaXB0b3IgcGFzc2VkIHRvIG1tYXAubW1hcCBvbiBXaW5kb3dzLgogCi0tIElzc3VlICM4MDQ2OiBBZGQgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHN1cHBvcnQgYW5kIC5jbG9zZWQgcHJvcGVydHkgdG8gbW1hcAorLSBJc3N1ZSAjODA0NjogQWRkIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCBzdXBwb3J0IGFuZCAuY2xvc2VkIHByb3BlcnR5IHRvIG1tYXAKICAgb2JqZWN0cy4KIAogTGlicmFyeQpAQCAtMjYyMSw3ICs2NzE4LDcgQEAKIAogLSBJc3N1ZSAjNzg5NTogcGxhdGZvcm0ubWFjX3ZlcigpIG5vIGxvbmdlciBjcmFzaGVzIGFmdGVyIGNhbGxpbmcgb3MuZm9yaygpLgogCi0tIElzc3VlICM5MzIzOiBGaXhlZCBhIGJ1ZyBpbiB0cmFjZS5weSB0aGF0IHJlc3VsdGVkIGluIGxvb3NpbmcgdGhlIG5hbWUgb2YgdGhlCistIElzc3VlICM5MzIzOiBGaXhlZCBhIGJ1ZyBpbiB0cmFjZS5weSB0aGF0IHJlc3VsdGVkIGluIGxvc2luZyB0aGUgbmFtZSBvZiB0aGUKICAgc2NyaXB0IGJlaW5nIHRyYWNlZC4gIFBhdGNoIGJ5IEVsaSBCZW5kZXJza3kuCiAKIC0gSXNzdWUgIzkyODI6IEZpeGVkIC0tbGlzdGZ1bmNzIG9wdGlvbiBvZiB0cmFjZS5weS4gIFRoYW5rcyBFbGkgQmVuZGVyc2t5IGZvcgpAQCAtMjgxOSw3ICs2OTE2LDcgQEAKIC0gVGhlIGF1ZGlvb3AgbW9kdWxlIG5vdyBzdXBwb3J0cyBzb3VuZCBmcmFnbWVudHMgb2YgbGVuZ3RoIGdyZWF0ZXIgdGhhbiAyKiozMQogICBieXRlcyBvbiA2NC1iaXQgbWFjaGluZXMsIGFuZCBpcyBQWV9TU0laRV9UX0NMRUFOLgogCi0tIElzc3VlICM0OTcyOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCB0byB0aGUgZnRwbGliLkZUUAorLSBJc3N1ZSAjNDk3MjogQWRkIHN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgdG8gdGhlIGZ0cGxpYi5GVFAKICAgY2xhc3MuCiAKIC0gSXNzdWUgIzg2NjQ6IEluIHB5X2NvbXBpbGUsIGNyZWF0ZSBfX3B5Y2FjaGVfXyB3aGVuIHRoZSBjb21waWxlZCBwYXRoIGlzCkBAIC0zMTA3LDcgKzcyMDQsNyBAQAogLSBJc3N1ZSAjNzQ5NDogZml4IGEgY3Jhc2ggaW4gX2xzcHJvZiAoY1Byb2ZpbGUpIGFmdGVyIGNsZWFyaW5nIHRoZSBwcm9maWxlciwKICAgcmVzZXQgYWxzbyB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudCBwb2ludGVyIGNvbnRleHQuCiAKLS0gSXNzdWUgIzcyMzI6IEFkZCBzdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VyIHByb3RvY29sIHRvIHRoZSBUYXJGaWxlCistIElzc3VlICM3MjMyOiBBZGQgc3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbCB0byB0aGUgVGFyRmlsZQogICBjbGFzcy4KIAogLSBJc3N1ZSAjNzI1MDogRml4IGluZm8gbGVhayBvZiBvcy5lbnZpcm9uIGFjcm9zcyBtdWx0aS1ydW4gdXNlcyBvZgpAQCAtMzE3OCw3ICs3Mjc1LDcgQEAKIC0gSXNzdWUgIzc2MTA6IFJld29ya2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBpbnRlcm5hbAogICBgYHppcGZpbGUuWmlwRXh0RmlsZWBgIGNsYXNzIHVzZWQgdG8gcmVwcmVzZW50IGZpbGVzIHN0b3JlZCBpbnNpZGUgYW4KICAgYXJjaGl2ZS4gIFRoZSBuZXcgaW1wbGVtZW50YXRpb24gaXMgc2lnbmlmaWNhbnRseSBmYXN0ZXIgYW5kIGNhbiBiZSB3cmFwcGVkIGluCi0gIGEgYGBpby5CdWZmZXJlZFJlYWRlcmBgIG9iamVjdCBmb3IgbW9yZSBzcGVlZHVwcy4gIEl0IGFsc28gc29sdmVzIGFuCisgIGFuIGBgaW8uQnVmZmVyZWRSZWFkZXJgYCBvYmplY3QgZm9yIG1vcmUgc3BlZWR1cHMuICBJdCBhbHNvIHNvbHZlcyBhbgogICBpc3N1ZSB3aGVyZSBpbnRlcmxlYXZlZCBjYWxscyB0byBgcmVhZCgpYCBhbmQgYHJlYWRsaW5lKClgIGdpdmUgd3JvbmcgcmVzdWx0cy4KICAgUGF0Y2ggYnkgTmlyIEFpZGVzLgogCkBAIC00NTUzLDcgKzg2NTAsNyBAQAogCiAtIElzc3VlICM1NjI0OiBGaXggdGhlIF93aW5yZWcgbW9kdWxlIG5hbWUgc3RpbGwgdXNlZCBpbiBzZXZlcmFsIG1vZHVsZXMuCiAKLS0gSXNzdWUgIzU2Mjg6IEZpeCBpby5UZXh0SU9XcmFwcGVyLnJlYWQoKSB3aXRoIGEgdW5yZWFkYWJsZSBidWZmZXIuCistIElzc3VlICM1NjI4OiBGaXggaW8uVGV4dElPV3JhcHBlci5yZWFkKCkgd2l0aCBhbiB1bnJlYWRhYmxlIGJ1ZmZlci4KIAogLSBJc3N1ZSAjNTYxOTogTXVsdGlwcm9jZXNzaW5nIGNoaWxkcmVuIGRpc29iZXkgdGhlIGRlYnVnIGZsYWcgYW5kIGNhdXNlcwogICBwb3B1cHMgb24gd2luZG93cyBidWlsZGJvdHMuIFBhdGNoIGFwcGxpZWQgdG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZS4KQEAgLTUxNDUsNyArOTI0Miw3IEBACiAtIElzc3VlICMxNjk2MTk5OiAgQWRkIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSBmb3IgcmFwaWQgYW5kIGNvbnZlbmllbnQKICAgY291bnRpbmcuCiAKLS0gSXNzdWUgIzM4NjA6IEd6aXBGaWxlIGFuZCBCWjJGaWxlIG5vdyBzdXBwb3J0IHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wuCistIElzc3VlICMzODYwOiBHemlwRmlsZSBhbmQgQloyRmlsZSBub3cgc3VwcG9ydCB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sLgogCiAtIElzc3VlICM0ODY3OiBGaXhlZCBhIGNyYXNoIGluIGN0eXBlcyB3aGVuIHBhc3NpbmcgYSBzdHJpbmcgdG8gYQogICBmdW5jdGlvbiB3aXRob3V0IGRlZmluaW5nIGFyZ3R5cGVzLgpAQCAtNTUxOSw3ICs5NjE2LDcgQEAKIC0gSXNzdWUgIzQzMDc6IFRoZSBuYW1lZCB0dXBsZSB0aGF0IGBgaW5zcGVjdC5nZXRmdWxsYXJnc3BlYygpYGAgcmV0dXJucyBub3cKICAgdXNlcyBgYGt3b25seWRlZmF1bHRzYGAgaW5zdGVhZCBvZiBgYGt3ZGVmYXVsdHNgYC4KIAotLSBJc3N1ZSAjNDI5ODogRml4IGEgc2VnZmF1bHQgd2hlbiBwaWNrbGUubG9hZHMgaXMgcGFzc2VkIGEgaWxsLWZvcm1lZCBpbnB1dC4KKy0gSXNzdWUgIzQyOTg6IEZpeCBhIHNlZ2ZhdWx0IHdoZW4gcGlja2xlLmxvYWRzIGlzIHBhc3NlZCBpbGwtZm9ybWVkIGlucHV0LgogCiAtIElzc3VlICM0MjgzOiBGaXggYSBsZWZ0LW92ZXIgIml0ZXJpdGVtcyIgY2FsbCBpbiBkaXN0dXRpbHMuCiAKQEAgLTcxNzUsNyArMTEyNzIsNyBAQAogLS0tLS0tLS0tLS0tLS0tLS0KIAogLSBCdWcgIzE0NDE0ODY6IFRoZSBsaXRlcmFsIHJlcHJlc2VudGF0aW9uIG9mIC0oc3lzLm1heGludCAtIDEpCi0gIGFnYWluIGV2YWx1YXRlcyB0byBhIGludCBvYmplY3QsIG5vdCBhIGxvbmcuCisgIGFnYWluIGV2YWx1YXRlcyB0byBhbiBpbnQgb2JqZWN0LCBub3QgYSBsb25nLgogCiAtIEJ1ZyAjMTUwMTkzNDogVGhlIHNjb3BlIG9mIGdsb2JhbCB2YXJpYWJsZXMgdGhhdCBhcmUgbG9jYWxseSBhc3NpZ25lZAogICB1c2luZyBhdWdtZW50ZWQgYXNzaWdubWVudCBpcyBub3cgY29ycmVjdGx5IGRldGVybWluZWQuCkBAIC04MjgyLDcgKzEyMzc5LDcgQEAKIAogLSBCdWcgIzExOTQxODE6IGJ6Mi5CWjJGaWxlIGRpZG4ndCBoYW5kbGUgbW9kZSAnVScgY29ycmVjdGx5LgogCi0tIFBhdGNoICMxMjEyMTE3OiBvcy5zdGF0KCkuc3RfZmxhZ3MgaXMgbm93IGFjY2Vzc2libGUgYXMgYSBhdHRyaWJ1dGUKKy0gUGF0Y2ggIzEyMTIxMTc6IG9zLnN0YXQoKS5zdF9mbGFncyBpcyBub3cgYWNjZXNzaWJsZSBhcyBhbiBhdHRyaWJ1dGUKICAgaWYgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KIAogLSBQYXRjaCAjMTEwMzk1MTogRXhwb3NlIE9fU0hMT0NLIGFuZCBPX0VYTE9DSyBpbiB0aGUgcG9zaXggbW9kdWxlIGlmCkBAIC05OTIxLDcgKzE0MDE4LDcgQEAKIC0gV2hlbiBtZXRob2Qgb2JqZWN0cyBoYXZlIGFuIGF0dHJpYnV0ZSB0aGF0IGNhbiBiZSBzYXRpc2ZpZWQgZWl0aGVyCiAgIGJ5IHRoZSBmdW5jdGlvbiBvYmplY3Qgb3IgYnkgdGhlIG1ldGhvZCBvYmplY3QsIHRoZSBmdW5jdGlvbgogICBvYmplY3QncyBhdHRyaWJ1dGUgdXN1YWxseSB3aW5zLiAgQ2hyaXN0aWFuIFRpc21lciBwb2ludGVkIG91dCB0aGF0Ci0gIHRoYXQgdGhpcyBpcyByZWFsbHkgYSBtaXN0YWtlLCBiZWNhdXNlIHRoaXMgb25seSBoYXBwZW5zIGZvciBzcGVjaWFsCisgIHRoaXMgaXMgcmVhbGx5IGEgbWlzdGFrZSwgYmVjYXVzZSB0aGlzIG9ubHkgaGFwcGVucyBmb3Igc3BlY2lhbAogICBtZXRob2RzIChsaWtlIF9fcmVkdWNlX18pIHdoZXJlIHRoZSBtZXRob2Qgb2JqZWN0J3MgdmVyc2lvbiBpcwogICByZWFsbHkgbW9yZSBhcHByb3ByaWF0ZSB0aGFuIHRoZSBmdW5jdGlvbidzIGF0dHJpYnV0ZS4gIFNvIGZyb20gbm93CiAgIG9uLCBhbGwgbWV0aG9kIGF0dHJpYnV0ZXMgd2lsbCBoYXZlIHByZWNlZGVuY2Ugb3ZlciBmdW5jdGlvbgpAQCAtMTEwODIsNyArMTUxNzksNyBAQAogICBpbnRlcnByZXRlciBleGVjdXRpb25zLCB3b3VsZCBmYWlsLgogCiAtICIlYyIgJSB1ImEiIG5vdyByZXR1cm5zIGEgdW5pY29kZSBzdHJpbmcgaW5zdGVhZCBvZiByYWlzaW5nIGEKLSAgVHlwZUVycm9yLiB1IiVjIiAlIDB4ZmZmZmZmZmYgbm93IHJhaXNlcyBhIE92ZXJmbG93RXJyb3IgaW5zdGVhZAorICBUeXBlRXJyb3IuIHUiJWMiICUgMHhmZmZmZmZmZiBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaW5zdGVhZAogICBvZiBhIFZhbHVlRXJyb3IgdG8gYmUgY29uc2lzdGVudCB3aXRoICIlYyIgJSAyNTYuIFNlZSBTRiBwYXRjaCAjNzEwMTI3LgogCiBFeHRlbnNpb24gbW9kdWxlcwpAQCAtMTc0MTUsNyArMjE1MTIsNyBAQAogCUJvdyB0byBmb250LWxvY2sgYXQgdGhlIGVuZCBvZiB0aGUgZG9jc3RyaW5nLCBzaW5jZSBpdCB0aHJvd3Mgc3R1ZmYKIAlvZmYuCiAKLQlNYWtlIHN1cmUgdGhlIHBhdGggcGFyYW10ZXIgdG8gcmVhZG1vZHVsZSgpIGlzIGEgbGlzdCBiZWZvcmUgYWRkaW5nIGl0CisJTWFrZSBzdXJlIHRoZSBwYXRoIHBhcmFtZXRlciB0byByZWFkbW9kdWxlKCkgaXMgYSBsaXN0IGJlZm9yZSBhZGRpbmcgaXQKIAl3aXRoIHN5cy5wYXRoLCBvciB0aGUgYWRkaXRpb24gY291bGQgZmFpbC4KIAogCkBAIC0xODk3NSw3ICsyMzA3Miw3IEBACiAKIC0gVGhlIGludGVyZmFjZXMgZm9yIHRoZSBiaW5kKigpIGFuZCB1bmJpbmQoKSB3aWRnZXQgbWV0aG9kcyBoYXZlIGJlZW4KIHJlZGVzaWduZWQ7IHRoZSBiaW5kKigpIG1ldGhvZHMgbm93IHJldHVybiB0aGUgbmFtZSBvZiB0aGUgVGNsIGNvbW1hbmQgCi1jcmVhdGVkIGZvciB0aGUgY2FsbGJhY2ssIGFuZCB0aGlzIGNhbiBiZSBwYXNzZWQgYXMgYSBvcHRpb25hbAorY3JlYXRlZCBmb3IgdGhlIGNhbGxiYWNrLCBhbmQgdGhpcyBjYW4gYmUgcGFzc2VkIGFzIGFuIG9wdGlvbmFsCiBhcmd1bWVudCB0byB1bmJpbmQoKSBpbiBvcmRlciB0byBkZWxldGUgdGhlIGNvbW1hbmQgKG5vcm1hbGx5LCBzdWNoCiBjb21tYW5kcyBhcmUgYXV0b21hdGljYWxseSB1bmJvdW5kIHdoZW4gdGhlIHdpZGdldCBpcyBkZXN0cm95ZWQsIGJ1dAogZm9yIHNvbWUgYXBwbGljYXRpb25zIHRoaXMgaXNuJ3QgZW5vdWdoKS4KQEAgLTE5NDY3LDcgKzIzNTY0LDcgQEAKIC0gVGhlIHdhcm5pbmcgYWJvdXQgYSB0aHJlYWQgc3RpbGwgaGF2aW5nIGEgZnJhbWUgbm93IG9ubHkgaGFwcGVucyBpbgogdmVyYm9zZSBtb2RlLgogCi0tIENoYW5nZSB0aGUgc2lnbmFsIGZpbmlhbGl6YXRpb24gc28gdGhhdCBpdCBhbHNvIHJlc2V0cyB0aGUgc2lnbmFsCistIENoYW5nZSB0aGUgc2lnbmFsIGZpbmFsaXphdGlvbiBzbyB0aGF0IGl0IGFsc28gcmVzZXRzIHRoZSBzaWduYWwKIGhhbmRsZXJzLiAgQWZ0ZXIgdGhpcyBoYXMgYmVlbiBjYWxsZWQsIG91ciBzaWduYWwgaGFuZGxlcnMgYXJlIG5vCiBsb25nZXIgYWN0aXZlIQogCkBAIC0yMTMxOSw3ICsyNTQxNiw3IEBACiBmaXhlZC4KIAogLSBUaGUgdGVzdCBvZiBuZWdhdGl2ZSBudW1iZXIgdG8gdGhlIGZsb2F0IHBvd2VyIGhhcyBiZWVuIG1vdmVkIGZyb20gdGhlIAotYnVpbHQtaW4gcG93KCkgZnVuY3RpbiB0byBmbG9hdG9iamVjdC5jIChzbyBjb21wbGV4IG51bWJlcnMgY2FuIHlpZWxkIHRoZSAKK2J1aWx0LWluIHBvdygpIGZ1bmN0aW9uIHRvIGZsb2F0b2JqZWN0LmMgKHNvIGNvbXBsZXggbnVtYmVycyBjYW4geWllbGQgdGhlCiBjb3JyZWN0IHJlc3VsdCkuCiAKIC0gVGhlIGJ1ZyBpbnRyb2R1Y2VkIGluIGJldGEyIHdoZXJlIHNoYXJlZCBsaWJyYXJpZXMgbG9hZGVkICh1c2luZyAKZGlmZiAtLWdpdCBhL01pc2MvTkVXUyBiL01pc2MvTkVXUwppbmRleCBkMzQ4OWQxLi4zOWNhMDQ5IDEwMDY0NAotLS0gYS9NaXNjL05FV1MKKysrIGIvTWlzYy9ORVdTCkBAIC0xLDExICsxLDExIEBACi0rKysrKysrKysrKwor77u/KysrKysrKysrKysKIFB5dGhvbiBOZXdzCiArKysrKysrKysrKwogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNz8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC42cmMxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSpSZWxlYXNlIGRhdGU6IFhYWFgtWFgtWFgqCitSZWxlYXNlIGRhdGU6IFRCQQogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEzLDI0ICsxMyw4IEBACiAtIElzc3VlICMyODY0ODogRml4ZWQgY3Jhc2ggaW4gUHlfRGVjb2RlTG9jYWxlKCkgaW4gZGVidWcgYnVpbGQgb24gTWFjIE9TIFgKICAgd2hlbiBkZWNvZGUgYXN0cmFsIGNoYXJhY3RlcnMuICBQYXRjaCBieSBYaWFuZyBaaGFuZy4KIAotLSBJc3N1ZSAjMjYxNzE6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IGFuZCBoZWFwIGNvcnJ1cHRpb24gaW4KLSAgemlwaW1wb3J0ZXIuZ2V0X2RhdGEoKS4KLQotLSBJc3N1ZSAjMjU3MDk6IEZpeGVkIHByb2JsZW0gd2l0aCBpbi1wbGFjZSBzdHJpbmcgY29uY2F0ZW5hdGlvbiBhbmQgdXRmLTggY2FjaGUuCi0KLS0gSXNzdWUgIzI0NDA3OiBGaXggY3Jhc2ggd2hlbiBkaWN0IGlzIG11dGF0ZWQgd2hpbGUgYmVpbmcgdXBkYXRlZC4KLQotLSBJc3N1ZSAjMjQwOTc6IEZpeGVkIGNyYXNoIGluIG9iamVjdC5fX3JlZHVjZV9fKCkgaWYgc2xvdCBuYW1lIGlzIGZyZWVkIGluc2lkZQotICBfX2dldGF0dHJfXy4KLQotLSBJc3N1ZSAjMjQwOTY6IE1ha2Ugd2FybmluZ3Mud2Fybl9leHBsaWNpdCBtb3JlIHJvYnVzdCBhZ2FpbnN0IG11dGF0aW9uIG9mIHRoZQotICB3YXJuaW5ncy5maWx0ZXJzIGxpc3QuCi0KLS0gSXNzdWUgIzI0MDQ0OiBGaXggcG9zc2libGUgbnVsbCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIGxpc3Quc29ydCBpbiBvdXQgb2YKLSAgbWVtb3J5IGNvbmRpdGlvbnMuCi0KLS0gSXNzdWUgIzIzMDU1OiBGaXhlZCBhIGJ1ZmZlciBvdmVyZmxvdyBpbiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYuICBBbmFseXNpcwotICBhbmQgZml4IGJ5IEd1aWRvIFZyYW5rZW4uCistIElzc3VlICMyODQyNjogRml4ZWQgcG90ZW50aWFsIGNyYXNoIGluIFB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3QoKSBpbiBkZWJ1ZworICBidWlsZC4KIAogTGlicmFyeQogLS0tLS0tLQpAQCAtMzksNiArMjMsOSBAQAogICBwbHVyYWwgZm9ybSBzZWxlY3Rpb25zIGluIHRoZSBnZXR0ZXh0IG1vZHVsZS4gIFRoZSBleHByZXNzaW9uIHBhcnNlciBub3cKICAgc3VwcG9ydHMgZXhhY3Qgc3ludGF4IHN1cHBvcnRlZCBieSBHTlUgZ2V0dGV4dC4KIAorLSBJbiB0aGUgY3Vyc2VzIG1vZHVsZSwgcmFpc2UgYW4gZXJyb3IgaWYgd2luZG93LmdldHN0cigpIG9yIHdpbmRvdy5pbnN0cigpIGlzCisgIHBhc3NlZCBhIG5lZ2F0aXZlIHZhbHVlLgorCiAtIElzc3VlICMyNzc4MzogRml4IHBvc3NpYmxlIHVzYWdlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIG9wZXJhdG9yLm1ldGhvZGNhbGxlci4KIAogLSBJc3N1ZSAjMjc3NzQ6IEZpeCBwb3NzaWJsZSBQeV9ERUNSRUYgb24gdW5vd25lZCBvYmplY3QgaW4gX3NyZS4KQEAgLTUyLDMzICszOSwxMyBAQAogICBIVFRQX1BST1hZIHZhcmlhYmxlIHdoZW4gUkVRVUVTVF9NRVRIT0QgZW52aXJvbm1lbnQgaXMgc2V0LCB3aGljaCBpbmRpY2F0ZXMKICAgdGhhdCB0aGUgc2NyaXB0IGlzIGluIENHSSBtb2RlLgogCi0tIElzc3VlICMyNDUyMTogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3dzIGluIHRoZSBwaWNrbGUgbW9kdWxlLgorLSBJc3N1ZSAjMjc3NTk6IEZpeCBzZWxlY3RvcnMgaW5jb3JyZWN0bHkgcmV0YWluIGludmFsaWQgZmlsZSBkZXNjcmlwdG9ycy4KKyAgUGF0Y2ggYnkgTWFyayBXaWxsaWFtcy4KIAotLSBJc3N1ZSAjMjI5MzE6IEFsbG93ICdbJyBhbmQgJ10nIGluIGNvb2tpZSB2YWx1ZXMuCi0KLS0gSXNzdWUgIzI0MDk0OiBGaXggcG9zc2libGUgY3Jhc2ggaW4ganNvbi5lbmNvZGUgd2l0aCBwb29ybHkgYmVoYXZlZCBkaWN0Ci0gIHN1YmNsYXNzZXMuCi0KLS0gSXNzdWUgIzIzMzY3OiBGaXggcG9zc2libGUgb3ZlcmZsb3dzIGluIHRoZSB1bmljb2RlZGF0YSBtb2R1bGUuCi0KLS0gSXNzdWUgIzIzMzYxOiBGaXggcG9zc2libGUgb3ZlcmZsb3cgaW4gV2luZG93cyBzdWJwcm9jZXNzIGNyZWF0aW9uIGNvZGUuCi0KLS0gSXNzdWUgIzIzMzYzOiBGaXggcG9zc2libGUgb3ZlcmZsb3cgaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucy4KLQotLSBJc3N1ZSAjMjMzNjQ6IEZpeCBwb3NzaWJsZSBvdmVyZmxvdyBpbiBpdGVydG9vbHMucHJvZHVjdC4KLQotLSBJc3N1ZSAjMjMzNjk6IEZpeGVkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgaW4KLSAgX2pzb24uZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkuCi0KLS0gSXNzdWUgIzIzMzY2OiBGaXhlZCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IGluIGl0ZXJ0b29scy5jb21iaW5hdGlvbnMuCi0KLS0gSXNzdWUgIzIzMzY1OiBGaXhlZCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IGluCi0gIGl0ZXJ0b29scy5jb21iaW5hdGlvbnNfd2l0aF9yZXBsYWNlbWVudC4KLQotQyBBUEkKK0J1aWxkCiAtLS0tLQogCi0tIElzc3VlICMyMzk5ODogUHlJbXBvcnRfUmVJbml0TG9jaygpIG5vdyBjaGVja3MgZm9yIGxvY2sgYWxsb2NhdGlvbiBlcnJvcgorLSBJc3N1ZSAjMjgyNDg6IFVwZGF0ZSBXaW5kb3dzIGJ1aWxkIHRvIHVzZSBPcGVuU1NMIDEuMC4yai4KIAogVGVzdHMKIC0tLS0tCkBAIC04NiwyMyArNTMsOTI2IEBACiAtIElzc3VlICMyNzM2OTogSW4gdGVzdF9weWV4cGF0LCBhdm9pZCB0ZXN0aW5nIGFuIGVycm9yIG1lc3NhZ2UgZGV0YWlsIHRoYXQKICAgY2hhbmdlZCBpbiBFeHBhdCAyLjIuMC4KIAotLSBJc3N1ZSAjMjU5NDA6IENoYW5nZWQgdGVzdF9zc2wgYW5kIHRlc3RfaHR0cGxpYiB0byB1c2UKLSAgc2VsZi1zaWduZWQucHl0aG9udGVzdC5uZXQuICBUaGlzIGF2b2lkcyByZWx5aW5nIG9uIHN2bi5weXRob24ub3JnLCB3aGljaAotICByZWNlbnRseSBjaGFuZ2VkIHJvb3QgY2VydGlmaWNhdGUuCiAKLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjY/CitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuNT8KID09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAxMS1PY3QtMjAxNCoKK1JlbGVhc2UgZGF0ZTogMjAxNi0wNi0yNgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjY4Njc6IFVidW50dSdzIG9wZW5zc2wgT1BfTk9fU1NMdjMgaXMgZm9yY2VkIG9uIGJ5IGRlZmF1bHQ7IGZpeCB0ZXN0LgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC41cmMxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNi0wNi0xMQogCiBDb3JlIGFuZCBCdWlsdGlucwogLS0tLS0tLS0tLS0tLS0tLS0KIAorLSBJc3N1ZSAjMjY0Nzg6IEZpeCBzZW1hbnRpYyBidWdzIHdoZW4gdXNpbmcgYmluYXJ5IG9wZXJhdG9ycyB3aXRoIGRpY3Rpb25hcnkKKyAgdmlld3MgYW5kIHR1cGxlcy4KKworLSBJc3N1ZSAjMjYxNzE6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IGFuZCBoZWFwIGNvcnJ1cHRpb24gaW4KKyAgemlwaW1wb3J0ZXIuZ2V0X2RhdGEoKS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMyNjU1NjogVXBkYXRlIGV4cGF0IHRvIDIuMS4xLCBmaXhlcyBDVkUtMjAxNS0xMjgzLgorCistIEZpeCBUTFMgc3RyaXBwaW5nIHZ1bG5lcmFiaWxpdHkgaW4gc21wdGxpYiwgQ1ZFLTIwMTYtMDc3Mi4gIFJlcG9ydGVkIGJ5IFRlYW0KKyAgT3N0c3Ryb20KKworLSBJc3N1ZSAjMjU5Mzk6IE9uIFdpbmRvd3Mgb3BlbiB0aGUgY2VydCBzdG9yZSByZWFkb25seSBpbiBzc2wuZW51bV9jZXJ0aWZpY2F0ZXMuCisKKy0gSXNzdWUgIzI2MDEyOiBEb24ndCB0cmF2ZXJzZSBpbnRvIHN5bWxpbmtzIGZvciAqKiBwYXR0ZXJuIGluCisgIHBhdGhsaWIuUGF0aC5bcl1nbG9iKCkuCisKKy0gSXNzdWUgIzI0MTIwOiBJZ25vcmUgUGVybWlzc2lvbkVycm9yIHdoZW4gdHJhdmVyc2luZyBhIHRyZWUgd2l0aAorICBwYXRobGliLlBhdGguW3JdZ2xvYigpLiAgUGF0Y2ggYnkgVWxyaWNoIFBldHJpLgorCistIFNraXAgZ2V0YWRkcmluZm8gaWYgaG9zdCBpcyBhbHJlYWR5IHJlc29sdmVkLgorICBQYXRjaCBieSBBLiBKZXNzZSBKaXJ5dSBEYXZpcy4KKworLSBBZGQgYXN5bmNpby50aW1lb3V0KCkgY29udGV4dCBtYW5hZ2VyLgorCistIElzc3VlICMyNjA1MDogQWRkIGFzeW5jaW8uU3RyZWFtUmVhZGVyLnJlYWR1bnRpbCgpIG1ldGhvZC4KKyAgUGF0Y2ggYnkg0JzQsNGA0Log0JrQvtGA0LXQvdCx0LXRgNCzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjU5NDA6IENoYW5nZWQgdGVzdF9zc2wgdG8gdXNlIHNlbGYtc2lnbmVkLnB5dGhvbnRlc3QubmV0LiAgVGhpcworICBhdm9pZHMgcmVseWluZyBvbiBzdm4ucHl0aG9uLm9yZywgd2hpY2ggcmVjZW50bHkgY2hhbmdlZCByb290IGNlcnRpZmljYXRlLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC40PworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNS8xMi8yMAorCitXaW5kb3dzCistLS0tLS0tCisKKy0gSXNzdWUgIzI1ODQ0OiBDb3JyZWN0ZWQgPS89PSB0eXBvIHBvdGVudGlhbGx5IGxlYWRpbmcgdG8gY3Jhc2ggaW4gbGF1bmNoZXIuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjRyYzE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE1LzEyLzA2CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyNTcwOTogRml4ZWQgcHJvYmxlbSB3aXRoIGluLXBsYWNlIHN0cmluZyBjb25jYXRlbmF0aW9uIGFuZCB1dGYtOAorICBjYWNoZS4KKworLSBJc3N1ZSAjMjQwOTc6IEZpeGVkIGNyYXNoIGluIG9iamVjdC5fX3JlZHVjZV9fKCkgaWYgc2xvdCBuYW1lIGlzIGZyZWVkIGluc2lkZQorICBfX2dldGF0dHJfXy4KKworLSBJc3N1ZSAjMjQ3MzE6IEZpeGVkIGNyYXNoIG9uIGNvbnZlcnRpbmcgb2JqZWN0cyB3aXRoIHNwZWNpYWwgbWV0aG9kcworICBfX2J5dGVzX18sIF9fdHJ1bmNfXywgYW5kIF9fZmxvYXRfXyByZXR1cm5pbmcgaW5zdGFuY2VzIG9mIHN1YmNsYXNzZXMgb2YKKyAgYnl0ZXMsIGludCwgYW5kIGZsb2F0IHRvIHN1YmNsYXNzZXMgb2YgYnl0ZXMsIGludCwgYW5kIGZsb2F0IGNvcnJlc3BvbmRpbmdseS4KKworLSBJc3N1ZSAjMjUzODg6IEZpeGVkIHRva2VuaXplciBjcmFzaCB3aGVuIHByb2Nlc3NpbmcgdW5kZWNvZGFibGUgc291cmNlIGNvZGUKKyAgd2l0aCBhIG51bGwgYnl0ZS4KKworLSBJc3N1ZSAjMjI5OTU6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgX19yZWR1Y2VfXyBhbmQgX19yZWR1Y2VfZXhfXyBub3cKKyAgcmVqZWN0cyBidWlsdGluIHR5cGVzIHdpdGggbm90IGRlZmluZWQgX19uZXdfXy4KKworLSBJc3N1ZSAjMjQ4MDI6IEF2b2lkIGJ1ZmZlciBvdmVycmVhZHMgd2hlbiBpbnQoKSwgZmxvYXQoKSwgY29tcGlsZSgpLCBleGVjKCkKKyAgYW5kIGV2YWwoKSBhcmUgcGFzc2VkIGJ5dGVzLWxpa2Ugb2JqZWN0cy4gIFRoZXNlIG9iamVjdHMgYXJlIG5vdAorICBuZWNlc3NhcmlseSB0ZXJtaW5hdGVkIGJ5IGEgbnVsbCBieXRlLCBidXQgdGhlIGZ1bmN0aW9ucyBhc3N1bWVkIHRoZXkgd2VyZS4KKworLSBJc3N1ZSAjMjQ0MDI6IEZpeCBpbnB1dCgpIHRvIHByb21wdCB0byB0aGUgcmVkaXJlY3RlZCBzdGRvdXQgd2hlbgorICBzeXMuc3Rkb3V0LmZpbGVubygpIGZhaWxzLgorCistIElzc3VlICMyNDgwNjogUHJldmVudCBidWlsdGluIHR5cGVzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIHRvIGJlIHN1YmNsYXNzZWQgZnJvbQorICBiZWluZyBzdWJjbGFzc2VkIHRocm91Z2ggbXVsdGlwbGUgaW5oZXJpdGFuY2UuCisKKy0gSXNzdWUgIzI0ODQ4OiBGaXhlZCBhIG51bWJlciBvZiBidWdzIGluIFVURi03IGRlY29kaW5nIG9mIG1pc2Zvcm1lZCBkYXRhLgorCistIElzc3VlICMyNTI4MDogSW1wb3J0IHRyYWNlIG1lc3NhZ2VzIGVtaXR0ZWQgaW4gdmVyYm9zZSAoLXYpIG1vZGUgYXJlIG5vCisgIGxvbmdlciBmb3JtYXR0ZWQgdHdpY2UuCisKKy0gSXNzdWUgIzI1MDAzOiBvcy51cmFuZG9tKCkgZG9lc24ndCB1c2UgZ2V0ZW50cm9weSgpIG9uIFNvbGFyaXMgYmVjYXVzZQorICBnZXRlbnRyb3B5KCkgaXMgYmxvY2tpbmcsIHdoZXJlYXMgb3MudXJhbmRvbSgpIHNob3VsZCBub3QgYmxvY2suIGdldGVudHJvcHkoKQorICBpcyBzdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAxMS4zLgorCistIElzc3VlICMyNTE4MjogVGhlIHN0ZHByaW50ZXIgKHVzZWQgYXMgc3lzLnN0ZGVyciBiZWZvcmUgdGhlIGlvIG1vZHVsZSBpcworICBpbXBvcnRlZCBhdCBzdGFydHVwKSBub3cgdXNlcyB0aGUgYmFja3NsYXNocmVwbGFjZSBlcnJvciBoYW5kbGVyLgorCistIElzc3VlICMyNDg5MTogRml4IGEgcmFjZSBjb25kaXRpb24gYXQgUHl0aG9uIHN0YXJ0dXAgaWYgdGhlIGZpbGUgZGVzY3JpcHRvcgorICBvZiBzdGRpbiAoMCksIHN0ZG91dCAoMSkgb3Igc3RkZXJyICgyKSBpcyBjbG9zZWQgd2hpbGUgUHl0aG9uIGlzIGNyZWF0aW5nCisgIHN5cy5zdGRpbiwgc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciBvYmplY3RzLiBUaGVzZSBhdHRyaWJ1dGVzIGFyZSBub3cgc2V0CisgIHRvIE5vbmUgaWYgdGhlIGNyZWF0aW9uIG9mIHRoZSBvYmplY3QgZmFpbGVkLCBpbnN0ZWFkIG9mIHJhaXNpbmcgYW4gT1NFcnJvcgorICBleGNlcHRpb24uIEluaXRpYWwgcGF0Y2ggd3JpdHRlbiBieSBNYXJjbyBQYW9saW5pLgorCistIElzc3VlICMyMTE2NzogTkFOIG9wZXJhdGlvbnMgYXJlIG5vdyBoYW5kbGVkIGNvcnJlY3RseSB3aGVuIHB5dGhvbiBpcworICBjb21waWxlZCB3aXRoIElDQyBldmVuIGlmIC1mcC1tb2RlbCBzdHJpY3QgaXMgbm90IHNwZWNpZmllZC4KKworLSBJc3N1ZSAjNDM5NTogQmV0dGVyIHRlc3RpbmcgYW5kIGRvY3VtZW50YXRpb24gb2YgYmluYXJ5IG9wZXJhdG9ycy4KKyAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjQ0Njc6IEZpeGVkIHBvc3NpYmxlIGJ1ZmZlciBvdmVyLXJlYWQgaW4gYnl0ZWFycmF5LiBUaGUgYnl0ZWFycmF5CisgIG9iamVjdCBub3cgYWx3YXlzIGFsbG9jYXRlcyBwbGFjZSBmb3IgdHJhaWxpbmcgbnVsbCBieXRlIGFuZCBpdCdzIGJ1ZmZlciBub3cKKyAgaXMgYWx3YXlzIG51bGwtdGVybWluYXRlZC4KKworLSBJc3N1ZSAjMjQxMTU6IFVwZGF0ZSB1c2VzIG9mIFB5T2JqZWN0X0lzVHJ1ZSgpLCBQeU9iamVjdF9Ob3QoKSwKKyAgUHlPYmplY3RfSXNJbnN0YW5jZSgpLCBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woKSBhbmQgX1B5RGljdF9Db250YWlucygpCisgIHRvIGNoZWNrIGZvciBhbmQgaGFuZGxlIGVycm9ycyBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzI0MjU3OiBGaXhlZCBzeXN0ZW0gZXJyb3IgaW4gdGhlIGNvbXBhcmlzb24gb2YgZmFrZWQKKyAgdHlwZXMuU2ltcGxlTmFtZXNwYWNlLgorCistIElzc3VlICMyMjkzOTogRml4ZWQgaW50ZWdlciBvdmVyZmxvdyBpbiBpdGVyYXRvciBvYmplY3QuICBQYXRjaCBieQorICBDbGVtZW50IFJvdWF1bHQuCisKKy0gSXNzdWUgIzIzOTg1OiBGaXggYSBwb3NzaWJsZSBidWZmZXIgb3ZlcnJ1biB3aGVuIGRlbGV0aW5nIGEgc2xpY2UgZnJvbQorICB0aGUgZnJvbnQgb2YgYSBieXRlYXJyYXkgYW5kIHRoZW4gYXBwZW5kaW5nIHNvbWUgb3RoZXIgYnl0ZXMgZGF0YS4KKworLSBJc3N1ZSAjMjQxMDI6IEZpeGVkIGV4Y2VwdGlvbiB0eXBlIGNoZWNraW5nIGluIHN0YW5kYXJkIGVycm9yIGhhbmRsZXJzLgorCistIElzc3VlICMyMzc1NzogUHlTZXF1ZW5jZV9UdXBsZSgpIGluY29ycmVjdGx5IGNhbGxlZCB0aGUgY29uY3JldGUgbGlzdCBBUEkKKyAgd2hlbiB0aGUgZGF0YSB3YXMgYSBsaXN0IHN1YmNsYXNzLgorCistIElzc3VlICMyNDQwNzogRml4IGNyYXNoIHdoZW4gZGljdCBpcyBtdXRhdGVkIHdoaWxlIGJlaW5nIHVwZGF0ZWQuCisKKy0gSXNzdWUgIzI0MDk2OiBNYWtlIHdhcm5pbmdzLndhcm5fZXhwbGljaXQgbW9yZSByb2J1c3QgYWdhaW5zdCBtdXRhdGlvbiBvZiB0aGUKKyAgd2FybmluZ3MuZmlsdGVycyBsaXN0LgorCistIElzc3VlICMyMzk5NjogQXZvaWQgYSBjcmFzaCB3aGVuIGEgZGVsZWdhdGVkIGdlbmVyYXRvciByYWlzZXMgYW4KKyAgdW5ub3JtYWxpemVkIFN0b3BJdGVyYXRpb24gZXhjZXB0aW9uLiAgUGF0Y2ggYnkgU3RlZmFuIEJlaG5lbC4KKworLSBJc3N1ZSAjMjQwMjI6IEZpeCB0b2tlbml6ZXIgY3Jhc2ggd2hlbiBwcm9jZXNzaW5nIHVuZGVjb2RhYmxlIHNvdXJjZSBjb2RlLgorCistIElzc3VlICMyMzMwOTogQXZvaWQgYSBkZWFkbG9jayBhdCBzaHV0ZG93biBpZiBhIGRhZW1vbiB0aHJlYWQgaXMgYWJvcnRlZAorICB3aGlsZSBpdCBpcyBob2xkaW5nIGEgbG9jayB0byBhIGJ1ZmZlcmVkIEkvTyBvYmplY3QsIGFuZCB0aGUgbWFpbiB0aHJlYWQKKyAgdHJpZXMgdG8gdXNlIHRoZSBzYW1lIEkvTyBvYmplY3QgKHR5cGljYWxseSBzdGRvdXQgb3Igc3RkZXJyKS4gIEEgZmF0YWwKKyAgZXJyb3IgaXMgZW1pdHRlZCBpbnN0ZWFkLgorCistIElzc3VlICMyMjk3NzogRml4ZWQgZm9ybWF0dGluZyBXaW5kb3dzIGVycm9yIG1lc3NhZ2VzIG9uIFdpbmUuCisgIFBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzIzODAzOiBGaXhlZCBzdHIucGFydGl0aW9uKCkgYW5kIHN0ci5ycGFydGl0aW9uKCkgd2hlbiBhIHNlcGFyYXRvcgorICBpcyB3aWRlciB0aGVuIHBhcnRpdGlvbmVkIHN0cmluZy4KKworLSBJc3N1ZSAjMjMxOTI6IEZpeGVkIGdlbmVyYXRvciBsYW1iZGFzLiAgUGF0Y2ggYnkgQnJ1bm8gQ2F1ZXQuCisKKy0gSXNzdWUgIzIzNjI5OiBGaXggdGhlIGRlZmF1bHQgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgdmFyaWFibGUtc2l6ZWQKKyAgb2JqZWN0cy4KKworLSBJc3N1ZSAjMjQwNDQ6IEZpeCBwb3NzaWJsZSBudWxsIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gbGlzdC5zb3J0IGluIG91dCBvZgorICBtZW1vcnkgY29uZGl0aW9ucy4KKworLSBJc3N1ZSAjMjEzNTQ6IFB5Q0Z1bmN0aW9uX05ldyBmdW5jdGlvbiBpcyBleHBvc2VkIGJ5IHB5dGhvbiBETEwgYWdhaW4uCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMjQ5MDM6IEZpeCByZWdyZXNzaW9uIGluIG51bWJlciBvZiBhcmd1bWVudHMgY29tcGlsZWFsbCBhY2NlcHRzIHdoZW4KKyAgJy1kJyBpcyBzcGVjaWZpZWQuICBUaGUgY2hlY2sgb24gdGhlIG51bWJlciBvZiBhcmd1bWVudHMgaGFzIGJlZW4gZHJvcHBlZAorICBjb21wbGV0ZWx5IGFzIGl0IG5ldmVyIHdvcmtlZCBjb3JyZWN0bHkgYW55d2F5LgorCistIElzc3VlICMyNTc2NDogSW4gdGhlIHN1YnByb2Nlc3MgbW9kdWxlLCBwcmVzZXJ2ZSBhbnkgZXhjZXB0aW9uIGNhdXNlZCBieQorICBmb3JrKCkgZmFpbHVyZSB3aGVuIHByZWV4ZWNfZm4gaXMgdXNlZC4KKworLSBJc3N1ZSAjNjQ3ODogX3N0cnB0aW1lJ3MgcmVnZXhwIGNhY2hlIG5vdyBpcyByZXNldCBhZnRlciBjaGFuZ2luZyB0aW1lem9uZQorICB3aXRoIHRpbWUudHpzZXQoKS4KKworLSBJc3N1ZSAjMjUxNzc6IEZpeGVkIHByb2JsZW0gd2l0aCB0aGUgbWVhbiBvZiB2ZXJ5IHNtYWxsIGFuZCB2ZXJ5IGxhcmdlCisgIG51bWJlcnMuIEFzIGEgc2lkZSBlZmZlY3QsIHN0YXRpc3RpY3MubWVhbiBhbmQgc3RhdGlzdGljcy52YXJpYW5jZSBzaG91bGQKKyAgYmUgc2lnbmlmaWNhbnRseSBmYXN0ZXIuCisKKy0gSXNzdWUgIzI1NzE4OiBGaXhlZCBjb3B5aW5nIG9iamVjdCB3aXRoIHN0YXRlIHdpdGggYm9vbGVhbiB2YWx1ZSBpcyBmYWxzZS4KKworLSBJc3N1ZSAjMTAxMzE6IEZpeGVkIGRlZXAgY29weWluZyBvZiBtaW5pZG9tIGRvY3VtZW50cy4gIEJhc2VkIG9uIHBhdGNoCisgIGJ5IE1hcmlhbiBHYW5pc2luLgorCistIElzc3VlICMyNTcyNTogRml4ZWQgYSByZWZlcmVuY2UgbGVhayBpbiBwaWNrbGUubG9hZHMoKSB3aGVuIHVucGlja2xpbmcKKyAgaW52YWxpZCBkYXRhIGluY2x1ZGluZyB0dXBsZSBpbnN0cnVjdGlvbnMuCisKKy0gSXNzdWUgIzI1NjYzOiBJbiB0aGUgUmVhZGxpbmUgY29tcGxldGVyLCBhdm9pZCBsaXN0aW5nIGR1cGxpY2F0ZSBnbG9iYWwKKyAgbmFtZXMsIGFuZCBzZWFyY2ggdGhlIGdsb2JhbCBuYW1lc3BhY2UgYmVmb3JlIHNlYXJjaGluZyBidWlsdGlucy4KKworLSBJc3N1ZSAjMjU2ODg6IEZpeGVkIGZpbGUgbGVhayBpbiBFbGVtZW50VHJlZS5pdGVycGFyc2UoKSByYWlzaW5nIGFuIGVycm9yLgorCistIElzc3VlICMyMzkxNDogRml4ZWQgU3lzdGVtRXJyb3IgcmFpc2VkIGJ5IHVucGlja2xlciBvbiBicm9rZW4gcGlja2xlIGRhdGEuCisKKy0gSXNzdWUgIzI1NjkxOiBGaXhlZCBjcmFzaCBvbiBkZWxldGluZyBFbGVtZW50VHJlZS5FbGVtZW50IGF0dHJpYnV0ZXMuCisKKy0gSXNzdWUgIzI1NjI0OiBaaXBGaWxlIG5vdyBhbHdheXMgd3JpdGVzIGEgWklQX1NUT1JFRCBoZWFkZXIgZm9yIGRpcmVjdG9yeQorICBlbnRyaWVzLiAgUGF0Y2ggYnkgRGluZ3l1YW4gV2FuZy4KKworLSBJc3N1ZSAjMjU1ODM6IEF2b2lkIGluY29ycmVjdCBlcnJvcnMgcmFpc2VkIGJ5IG9zLm1ha2VkaXJzKGV4aXN0X29rPVRydWUpCisgIHdoZW4gdGhlIE9TIGdpdmVzIHByaW9yaXR5IHRvIGVycm9ycyBzdWNoIGFzIEVBQ0NFUyBvdmVyIEVFWElTVC4KKworLSBJc3N1ZSAjMjU1OTM6IENoYW5nZSBzZW1hbnRpY3Mgb2YgRXZlbnRMb29wLnN0b3AoKSBpbiBhc3luY2lvLgorCistIElzc3VlICM2OTczOiBXaGVuIHdlIGtub3cgYSBzdWJwcm9jZXNzLlBvcGVuIHByb2Nlc3MgaGFzIGRpZWQsIGRvCisgIG5vdCBhbGxvdyB0aGUgc2VuZF9zaWduYWwoKSwgdGVybWluYXRlKCksIG9yIGtpbGwoKSBtZXRob2RzIHRvIGRvCisgIGFueXRoaW5nIGFzIHRoZXkgY291bGQgcG90ZW50aWFsbHkgc2lnbmFsIGEgZGlmZmVyZW50IHByb2Nlc3MuCisKKy0gSXNzdWUgIzI1NTc4OiBGaXggKGFub3RoZXIpIG1lbW9yeSBsZWFrIGluIFNTTFNvY2tldC5nZXRwZWVyY2VyKCkuCisKKy0gSXNzdWUgIzI1NTkwOiBJbiB0aGUgUmVhZGxpbmUgY29tcGxldGVyLCBvbmx5IGNhbGwgZ2V0YXR0cigpIG9uY2UgcGVyCisgIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMjU0OTg6IEZpeCBhIGNyYXNoIHdoZW4gZ2FyYmFnZS1jb2xsZWN0aW5nIGN0eXBlcyBvYmplY3RzIGNyZWF0ZWQKKyAgYnkgd3JhcHBpbmcgYSBtZW1vcnl2aWV3LiAgVGhpcyB3YXMgYSByZWdyZXNzaW9uIG1hZGUgaW4gMy40LjMuICBCYXNlZAorICBvbiBwYXRjaCBieSBFcnlrc3VuLgorCistIElzc3VlICMxODAxMDogRml4IHRoZSBweWRvYyB3ZWIgc2VydmVyJ3MgbW9kdWxlIHNlYXJjaCBmdW5jdGlvbiB0byBoYW5kbGUKKyAgZXhjZXB0aW9ucyBmcm9tIGltcG9ydGluZyBwYWNrYWdlcy4KKworLSBJc3N1ZSAjMjU1MTA6IGZpbGVpbnB1dC5GaWxlSW5wdXQucmVhZGxpbmUoKSBub3cgcmV0dXJucyBiJycgaW5zdGVhZCBvZiAnJworICBhdCB0aGUgZW5kIGlmIHRoZSBGaWxlSW5wdXQgd2FzIG9wZW5lZCB3aXRoIGJpbmFyeSBtb2RlLgorICBQYXRjaCBieSBSeW9zdWtlIEl0by4KKworLSBJc3N1ZSAjMjU1MzA6IERpc2FibGUgdGhlIHZ1bG5lcmFibGUgU1NMdjMgcHJvdG9jb2wgYnkgZGVmYXVsdCB3aGVuIGNyZWF0aW5nCisgIHNzbC5TU0xDb250ZXh0LgorCistIElzc3VlICMyNTU2OTogRml4IG1lbW9yeSBsZWFrIGluIFNTTFNvY2tldC5nZXRwZWVyY2VydCgpLgorCistIElzc3VlICMyMTgyNzogRml4ZWQgdGV4dHdyYXAuZGVkZW50KCkgZm9yIHRoZSBjYXNlIHdoZW4gbGFyZ2VzdCBjb21tb24KKyAgd2hpdGVzcGFjZSBpcyBhIHN1YnN0cmluZyBvZiBzbWFsbGVzdCBsZWFkaW5nIHdoaXRlc3BhY2UuCisgIEJhc2VkIG9uIHBhdGNoIGJ5IFJvYmVydCBMaS4KKworLSBJc3N1ZSAjMjU0NzE6IFNvY2tldHMgcmV0dXJuZWQgZnJvbSBhY2NlcHQoKSBzaG91bGRuJ3QgYXBwZWFyIHRvIGJlCisgIG5vbmJsb2NraW5nLgorCistIElzc3VlICMyNTQ0MTogYXN5bmNpbzogUmFpc2UgZXJyb3IgZnJvbSBkcmFpbigpIHdoZW4gc29ja2V0IGlzIGNsb3NlZC4KKworLSBJc3N1ZSAjMjU0MTE6IEltcHJvdmVkIFVuaWNvZGUgc3VwcG9ydCBpbiBTTVRQSGFuZGxlciB0aHJvdWdoIGJldHRlciB1c2Ugb2YKKyAgdGhlIGVtYWlsIHBhY2thZ2UuIFRoYW5rcyB0byB1c2VyIHNpbW9uMDQgZm9yIHRoZSBwYXRjaC4KKworLSBJc3N1ZSAjMjUzODA6IEZpeGVkIHByb3RvY29sIGZvciB0aGUgU1RBQ0tfR0xPQkFMIG9wY29kZSBpbgorICBwaWNrbGV0b29scy5vcGNvZGVzLgorCistIElzc3VlICMyMzk3MjogVXBkYXRlcyBhc3luY2lvIGRhdGFncmFtIGNyZWF0ZSBtZXRob2QgYWxsb3dpbmcgcmV1c2Vwb3J0CisgIGFuZCByZXVzZWFkZHIgc29ja2V0IG9wdGlvbnMgdG8gYmUgc2V0IHByaW9yIHRvIGJpbmRpbmcgdGhlIHNvY2tldC4KKyAgTWlycm9yaW5nIHRoZSBleGlzdGluZyBhc3luY2lvIGNyZWF0ZV9zZXJ2ZXIgbWV0aG9kIHRoZSByZXVzZWFkZHIgb3B0aW9uCisgIGZvciBkYXRhZ3JhbSBzb2NrZXRzIGRlZmF1bHRzIHRvIFRydWUgaWYgdGhlIE8vUyBpcyAncG9zaXgnIChleGNlcHQgaWYgdGhlCisgIHBsYXRmb3JtIGlzIEN5Z3dpbikuIFBhdGNoIGJ5IENocmlzIExhd3MuCisKKy0gSXNzdWUgIzI1MzA0OiBBZGQgYXN5bmNpby5ydW5fY29yb3V0aW5lX3RocmVhZHNhZmUoKS4gIFRoaXMgbGV0cyB5b3UKKyAgc3VibWl0IGEgY29yb3V0aW5lIHRvIGEgbG9vcCBmcm9tIGFub3RoZXIgdGhyZWFkLCByZXR1cm5pbmcgYQorICBjb25jdXJyZW50LmZ1dHVyZXMuRnV0dXJlLiAgQnkgVmluY2VudCBNaWNoZWwuCisKKy0gSXNzdWUgIzI1MzE5OiBXaGVuIHRocmVhZGluZy5FdmVudCBpcyByZWluaXRpYWxpemVkLCB0aGUgdW5kZXJseWluZyBjb25kaXRpb24KKyAgc2hvdWxkIHVzZSBhIHJlZ3VsYXIgbG9jayByYXRoZXIgdGhhbiBhIHJlY3Vyc2l2ZSBsb2NrLgorCistIElzc3VlICMyNTIzMjogRml4IENHSVJlcXVlc3RIYW5kbGVyIHRvIHNwbGl0IHRoZSBxdWVyeSBmcm9tIHRoZSBVUkwgYXQgdGhlCisgIGZpcnN0IHF1ZXN0aW9uIG1hcmsgKD8pIHJhdGhlciB0aGFuIHRoZSBsYXN0LiBQYXRjaCBmcm9tIFhpYW5nIFpoYW5nLgorCistIElzc3VlICMyNDY1NzogUHJldmVudCBDR0lSZXF1ZXN0SGFuZGxlciBmcm9tIGNvbGxhcHNpbmcgc2xhc2hlcyBpbiB0aGUKKyAgcXVlcnkgcGFydCBvZiB0aGUgVVJMIGFzIGlmIGl0IHdlcmUgYSBwYXRoLiBQYXRjaCBmcm9tIFhpYW5nIFpoYW5nLgorCistIElzc3VlICMyMjk1ODogQ29uc3RydWN0b3IgYW5kIHVwZGF0ZSBtZXRob2Qgb2Ygd2Vha3JlZi5XZWFrVmFsdWVEaWN0aW9uYXJ5CisgIG5vdyBhY2NlcHQgdGhlIHNlbGYgYW5kIHRoZSBkaWN0IGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMyMjYwOTogQ29uc3RydWN0b3Igb2YgY29sbGVjdGlvbnMuVXNlckRpY3Qgbm93IGFjY2VwdHMgdGhlIHNlbGYga2V5d29yZAorICBhcmd1bWVudC4KKworLSBJc3N1ZSAjMjUyNjIuIEFkZGVkIHN1cHBvcnQgZm9yIEJJTkJZVEVTOCBvcGNvZGUgaW4gUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mCisgIHVucGlja2xlci4gIEhpZ2hlc3QgMzIgYml0cyBvZiA2NC1iaXQgc2l6ZSBmb3IgQklOVU5JQ09ERTggYW5kIEJJTkJZVEVTOAorICBvcGNvZGVzIG5vIGxvbmdlciBzaWxlbnRseSBpZ25vcmVkIG9uIDMyLWJpdCBwbGF0Zm9ybXMgaW4gQyBpbXBsZW1lbnRhdGlvbi4KKworLSBJc3N1ZSAjMjUwMzQ6IEZpeCBzdHJpbmcuRm9ybWF0dGVyIHByb2JsZW0gd2l0aCBhdXRvLW51bWJlcmluZyBhbmQKKyAgbmVzdGVkIGZvcm1hdF9zcGVjcy4gUGF0Y2ggYnkgQW50aG9uIHZhbiBkZXIgTmV1dC4KKworLSBJc3N1ZSAjMjUyMzM6IFJld3JpdGUgdGhlIGd1dHMgb2YgYXN5bmNpby5RdWV1ZSBhbmQKKyAgYXN5bmNpby5TZW1hcGhvcmUgdG8gYmUgbW9yZSB1bmRlcnN0YW5kYWJsZSBhbmQgY29ycmVjdC4KKworLSBJc3N1ZSAjMjM2MDA6IERlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdHppbmZvLmZyb211dGMoKSB3YXMgcmV0dXJuaW5nCisgIHdyb25nIHJlc3VsdHMgaW4gc29tZSBjYXNlcy4KKworLSBJc3N1ZSAjMjUyMDM6IEZhaWxlZCByZWFkbGluZS5zZXRfY29tcGxldGVyX2RlbGltcygpIG5vIGxvbmdlciBsZWZ0IHRoZQorICBtb2R1bGUgaW4gaW5jb25zaXN0ZW50IHN0YXRlLgorCistIFByZXZlbnQgb3ZlcmZsb3cgaW4gX1VucGlja2xlcl9SZWFkLgorCistIElzc3VlICMyNTA0NzogVGhlIFhNTCBlbmNvZGluZyBkZWNsYXJhdGlvbiB3cml0dGVuIGJ5IEVsZW1lbnQgVHJlZSBub3cKKyAgcmVzcGVjdHMgdGhlIGxldHRlciBjYXNlIGdpdmVuIGJ5IHRoZSB1c2VyLiBUaGlzIHJlc3RvcmVzIHRoZSBhYmlsaXR5IHRvCisgIHdyaXRlIGVuY29kaW5nIG5hbWVzIGluIHVwcGVyY2FzZSBsaWtlICJVVEYtOCIsIHdoaWNoIHdvcmtlZCBpbiBQeXRob24gMi4KKworLSBJc3N1ZSAjMTkxNDM6IHBsYXRmb3JtIG1vZHVsZSBub3cgcmVhZHMgV2luZG93cyB2ZXJzaW9uIGZyb20ga2VybmVsMzIuZGxsIHRvCisgIGF2b2lkIGNvbXBhdGliaWxpdHkgc2hpbXMuCisKKy0gSXNzdWUgIzIzNTE3OiBGaXggcm91bmRpbmcgaW4gZnJvbXRpbWVzdGFtcCgpIGFuZCB1dGNmcm9tdGltZXN0YW1wKCkgbWV0aG9kcworICBvZiBkYXRldGltZS5kYXRldGltZTogbWljcm9zZWNvbmRzIGFyZSBub3cgcm91bmRlZCB0byBuZWFyZXN0IHdpdGggdGllcworICBnb2luZyB0byBuZWFyZXN0IGV2ZW4gaW50ZWdlciAoUk9VTkRfSEFMRl9FVkVOKSwgaW5zdGVhZCBvZiBiZWluZyByb3VuZGluZworICB0b3dhcmRzIHplcm8gKFJPVU5EX0RPV04pLiBJdCdzIGltcG9ydGFudCB0aGF0IHRoZXNlIG1ldGhvZHMgdXNlIHRoZSBzYW1lCisgIHJvdW5kaW5nIG1vZGUgdGhhbiBkYXRldGltZS50aW1lZGVsdGEgdG8ga2VlcCB0aGUgcHJvcGVydHk6CisgIChkYXRldGltZSgxOTcwLDEsMSkgKyB0aW1lZGVsdGEoc2Vjb25kcz10KSkgPT0gZGF0ZXRpbWUudXRjZnJvbXRpbWVzdGFtcCh0KS4KKyAgSXQgYWxzbyB0aGUgcm91bmRpbmcgbW9kZSB1c2VkIGJ5IHJvdW5kKGZsb2F0KSBmb3IgZXhhbXBsZS4KKworLSBJc3N1ZSAjMjQ2ODQ6IHNvY2tldC5zb2NrZXQuZ2V0YWRkcmluZm8oKSBub3cgY2FsbHMKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZygpIGluc3RlYWQgb2YgY2FsbGluZyB0aGUgZW5jb2RlKCkgbWV0aG9kIG9mIHRoZQorICBob3N0LCB0byBoYW5kbGUgY29ycmVjdGx5IGN1c3RvbSBzdHJpbmcgd2l0aCBhbiBlbmNvZGUoKSBtZXRob2Qgd2hpY2ggZG9lc24ndAorICByZXR1cm4gYSBieXRlIHN0cmluZy4gVGhlIGVuY29kZXIgb2YgdGhlIElETkEgY29kZWMgaXMgbm93IGNhbGxlZCBkaXJlY3RseQorICBpbnN0ZWFkIG9mIGNhbGxpbmcgdGhlIGVuY29kZSgpIG1ldGhvZCBvZiB0aGUgc3RyaW5nLgorCistIElzc3VlICMyNDk4Mjogc2h1dGlsLm1ha2VfYXJjaGl2ZSgpIHdpdGggdGhlICJ6aXAiIGZvcm1hdCBub3cgYWRkcyBlbnRyaWVzCisgIGZvciBkaXJlY3RvcmllcyAoaW5jbHVkaW5nIGVtcHR5IGRpcmVjdG9yaWVzKSBpbiBaSVAgZmlsZS4KKworLSBJc3N1ZSAjMjQ4NTc6IENvbXBhcmluZyBjYWxsX2FyZ3MgdG8gYSBsb25nIHNlcXVlbmNlIG5vdyBjb3JyZWN0bHkgcmV0dXJucyBhCisgIGJvb2xlYW4gcmVzdWx0IGluc3RlYWQgb2YgcmFpc2luZyBhbiBleGNlcHRpb24uICBQYXRjaCBieSBBIEthcHR1ci4KKworLSBJc3N1ZSAjMjUwMTk6IEZpeGVkIGEgY3Jhc2ggY2F1c2VkIGJ5IHNldHRpbmcgbm9uLXN0cmluZyBrZXkgb2YgZXhwYXQgcGFyc2VyLgorICBCYXNlZCBvbiBwYXRjaCBieSBKb2huIExlaXRjaC4KKworLSBJc3N1ZSAjMjQ5MTc6IHRpbWVfc3RyZnRpbWUoKSBidWZmZXIgb3Zlci1yZWFkLgorCistIElzc3VlICMyMzE0NDogTWFrZSBzdXJlIHRoYXQgSFRNTFBhcnNlci5mZWVkKCkgcmV0dXJucyBhbGwgdGhlIGRhdGEsIGV2ZW4KKyAgd2hlbiBjb252ZXJ0X2NoYXJyZWZzIGlzIFRydWUuCisKKy0gSXNzdWUgIzE2MTgwOiBFeGl0IHBkYiBpZiBmaWxlIGhhcyBzeW50YXggZXJyb3IsIGluc3RlYWQgb2YgdHJhcHBpbmcgdXNlcgorICBpbiBhbiBpbmZpbml0ZSBsb29wLiAgUGF0Y2ggYnkgWGF2aWVyIGRlIEdheWUuCisKKy0gSXNzdWUgIzIxMTEyOiBGaXggcmVncmVzc2lvbiBpbiB1bml0dGVzdC5leHBlY3RlZEZhaWx1cmUgb24gc3ViY2xhc3Nlcy4KKyAgUGF0Y2ggZnJvbSBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMyNDkzMTogSW5zdGFuY2VzIG9mIHN1YmNsYXNzZXMgb2YgbmFtZWR0dXBsZXMgaGF2ZSB0aGVpciBvd24gX19kaWN0X18KKyAgd2hpY2ggYnJlYWtzIHRoZSBpbmhlcml0ZWQgX19kaWN0X18gcHJvcGVydHkgYW5kIGJyZWFrcyB0aGUgX2FzZGljdCgpIG1ldGhvZC4KKyAgUmVtb3ZlZCB0aGUgX19kaWN0X18gcHJvcGVydHkgdG8gcHJldmVudCB0aGUgY29uZmxpY3QgYW5kIGZpeGVkIF9hc2RpY3QoKS4KKworLSBJc3N1ZSAjMjQ3NjQ6IGNnaS5GaWVsZFN0b3JhZ2UucmVhZF9tdWx0aSgpIG5vdyBpZ25vcmVzIHRoZSBDb250ZW50LUxlbmd0aAorICBoZWFkZXIgaW4gcGFydCBoZWFkZXJzLiBQYXRjaCB3cml0dGVuIGJ5IFBldGVyIExhbmRyeSBhbmQgcmV2aWV3ZWQgYnkgUGllcnJlCisgIFF1ZW50ZWwuCisKKy0gSXNzdWUgIzI0Nzc0OiBGaXggZG9jc3RyaW5nIGluIGh0dHAuc2VydmVyLnRlc3QuIFBhdGNoIGZyb20gQ2hpdS1Ic2lhbmcgSHN1LgorCistIElzc3VlICMyMTE1OTogSW1wcm92ZSBtZXNzYWdlIGluIGNvbmZpZ3BhcnNlci5JbnRlcnBvbGF0aW9uTWlzc2luZ09wdGlvbkVycm9yLgorICBQYXRjaCBmcm9tIMWBdWthc3ogTGFuZ2EuCisKKy0gSXNzdWUgIzIzODg4OiBIYW5kbGUgZnJhY3Rpb25hbCB0aW1lIGluIGNvb2tpZSBleHBpcnkuIFBhdGNoIGJ5IHNzaC4KKworLSBJc3N1ZSAjMjMwMDQ6IG1vY2tfb3BlbigpIG5vdyByZWFkcyBiaW5hcnkgZGF0YSBjb3JyZWN0bHkgd2hlbiB0aGUgdHlwZSBvZgorICByZWFkX2RhdGEgaXMgYnl0ZXMuICBJbml0aWFsIHBhdGNoIGJ5IEFhcm9uIEhpbGwuCisKKy0gSXNzdWUgIzIzNjUyOiBNYWtlIGl0IHBvc3NpYmxlIHRvIGNvbXBpbGUgdGhlIHNlbGVjdCBtb2R1bGUgYWdhaW5zdCB0aGUKKyAgbGliYyBoZWFkZXJzIGZyb20gdGhlIExpbnV4IFN0YW5kYXJkIEJhc2UsIHdoaWNoIGRvIG5vdCBpbmNsdWRlIHNvbWUKKyAgRVBPTEwgbWFjcm9zLiAgUGF0Y2ggYnkgTWF0dCBGcmFuay4KKworLSBJc3N1ZSAjMjI5MzI6IEZpeCB0aW1lem9uZXMgaW4gZW1haWwudXRpbHMuZm9ybWF0ZGF0ZS4KKyAgUGF0Y2ggZnJvbSBEbWl0cnkgU2hhY2huZXYuCisKKy0gSXNzdWUgIzIzNzc5OiBpbWFwbGliIHJhaXNlcyBUeXBlRXJyb3IgaWYgYXV0aGVudGljYXRvciB0cmllcyB0byBhYm9ydC4KKyAgUGF0Y2ggZnJvbSBDcmFpZyBIb2xtcXVpc3QuCisKKy0gSXNzdWUgIzIzMzE5OiBGaXggY3R5cGVzLkJpZ0VuZGlhblN0cnVjdHVyZSwgc3dhcCBjb3JyZWN0bHkgYnl0ZXMuIFBhdGNoCisgIHdyaXR0ZW4gYnkgTWF0dGhpZXUgR2F1dGllci4KKworLSBJc3N1ZSAjMjMyNTQ6IERvY3VtZW50IGhvdyB0byBjbG9zZSB0aGUgVENQU2VydmVyIGxpc3RlbmluZyBzb2NrZXQuCisgIFBhdGNoIGZyb20gTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMTk0NTA6IFVwZGF0ZSBXaW5kb3dzIGFuZCBPUyBYIGluc3RhbGxlciBidWlsZHMgdG8gdXNlIFNRTGl0ZSAzLjguMTEuCisKKy0gSXNzdWUgIzIzNDQxOiByY29tcGxldGVyIG5vdyBwcmludHMgYSB0YWIgY2hhcmFjdGVyIGluc3RlYWQgb2YgZGlzcGxheWluZworICBwb3NzaWJsZSBjb21wbGV0aW9ucyBmb3IgYW4gZW1wdHkgd29yZC4gIEluaXRpYWwgcGF0Y2ggYnkgTWFydGluIFNla2VyYS4KKworLSBJc3N1ZSAjMjQ3MzU6IEZpeCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3MgaW4KKyAgaXRlcnRvb2xzLmNvbWJpbmF0aW9uc193aXRoX3JlcGxhY2VtZW50KCkuCisKKy0gSXNzdWUgIzE3NTI3OiBBZGQgUEFUQ0ggdG8gd3NnaXJlZi52YWxpZGF0b3IuIFBhdGNoIGZyb20gTHVjYSBTYmFyZGVsbGEuCisKKy0gSXNzdWUgIzI0NjgzOiBGaXhlZCBjcmFzaGVzIGluIF9qc29uIGZ1bmN0aW9ucyBjYWxsZWQgd2l0aCBhcmd1bWVudHMgb2YKKyAgaW5hcHByb3ByaWF0ZSB0eXBlLgorCistIElzc3VlICMyMTY5Nzogc2h1dGlsLmNvcHl0cmVlKCkgbm93IGNvcnJlY3RseSBoYW5kbGVzIHN5bWJvbGljIGxpbmtzIHRoYXQKKyAgcG9pbnQgdG8gZGlyZWN0b3JpZXMuICBQYXRjaCBieSBFZHVhcmRvIFNlYWJyYSBhbmQgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzI0NjIwOiBSYW5kb20uc2V0c3RhdGUoKSBub3cgdmFsaWRhdGVzIHRoZSB2YWx1ZSBvZiBzdGF0ZSBsYXN0IGVsZW1lbnQuCisKKy0gSXNzdWUgIzIyMTUzOiBJbXByb3ZlIHVuaXR0ZXN0IGRvY3MuIFBhdGNoIGZyb20gTWFydGluIFBhbnRlciBhbmQgZXZpbHplcm8uCisKKy0gSXNzdWUgIzI0MjA2OiBGaXhlZCBfX2VxX18gYW5kIF9fbmVfXyBtZXRob2RzIG9mIGluc3BlY3QgY2xhc3Nlcy4KKworLSBJc3N1ZSAjMjE3NTA6IG1vY2tfb3Blbi5yZWFkX2RhdGEgY2FuIG5vdyBiZSByZWFkIGZyb20gZWFjaCBpbnN0YW5jZSwgYXMgaXQKKyAgY291bGQgaW4gUHl0aG9uIDMuMy4KKworLSBJc3N1ZSAjMjMyNDc6IEZpeCBhIGNyYXNoIGluIHRoZSBTdHJlYW1Xcml0ZXIucmVzZXQoKSBvZiBDSksgY29kZWNzLgorCistIElzc3VlICMxODYyMjogdW5pdHRlc3QubW9jay5tb2NrX29wZW4oKS5yZXNldF9tb2NrIHdvdWxkIHJlY3Vyc2UgaW5maW5pdGVseS4KKyAgUGF0Y2ggZnJvbSBOaWNvbGEgUGFsdW1ibyBhbmQgTGF1cmVudCBEZSBCdXlzdC4KKworLSBJc3N1ZSAjMjQ2MDg6IGNodW5rLkNodW5rLnJlYWQoKSBub3cgYWx3YXlzIHJldHVybnMgYnl0ZXMsIG5vdCBzdHIuCisKKy0gSXNzdWUgIzE4Njg0OiBGaXhlZCByZWFkaW5nIG91dCBvZiB0aGUgYnVmZmVyIGluIHRoZSByZSBtb2R1bGUuCisKKy0gSXNzdWUgIzI0MjU5OiB0YXJmaWxlIG5vdyByYWlzZXMgYSBSZWFkRXJyb3IgaWYgYW4gYXJjaGl2ZSBpcyB0cnVuY2F0ZWQKKyAgaW5zaWRlIGEgZGF0YSBzZWdtZW50LgorCistIElzc3VlICMyNDU1MjogRml4IHVzZSBhZnRlciBmcmVlIGluIGFuIGVycm9yIGNhc2Ugb2YgdGhlIF9waWNrbGUgbW9kdWxlLgorCistIElzc3VlICMyNDUxNDogdGFyZmlsZSBub3cgdG9sZXJhdGVzIG51bWJlciBmaWVsZHMgY29uc2lzdGluZyBvZiBvbmx5CisgIHdoaXRlc3BhY2UuCisKKy0gSXNzdWUgIzE5MTc2OiBGaXhlZCBkb2N0eXBlKCkgcmVsYXRlZCBidWdzIGluIEMgaW1wbGVtZW50YXRpb24gb2YgRWxlbWVudFRyZWUuCisgIEEgZGVwcmVjYXRpb24gd2FybmluZyBubyBsb25nZXIgaXNzdWVkIGJ5IFhNTFBhcnNlciBzdWJjbGFzcyB3aXRoIGRlZmF1bHQKKyAgZG9jdHlwZSgpIG1ldGhvZC4gIERpcmVjdCBjYWxsIG9mIGRvY3R5cGUoKSBub3cgaXNzdWVzIGEgd2FybmluZy4gIFBhcnNlcidzCisgIGRvY3R5cGUoKSBub3cgaXMgbm90IGNhbGxlZCBpZiB0YXJnZXQncyBkb2N0eXBlKCkgaXMgY2FsbGVkLiAgQmFzZWQgb24gcGF0Y2gKKyAgYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjAzODc6IFJlc3RvcmUgc2VtYW50aWMgcm91bmQtdHJpcCBjb3JyZWN0bmVzcyBpbiB0b2tlbml6ZS91bnRva2VuaXplCisgIGZvciB0YWItaW5kZW50ZWQgYmxvY2tzLgorCistIElzc3VlICMyNDQ1NjogRml4ZWQgcG9zc2libGUgYnVmZmVyIG92ZXItcmVhZCBpbiBhZHBjbTJsaW4oKSBhbmQgbGluMmFkcGNtKCkKKyAgZnVuY3Rpb25zIG9mIHRoZSBhdWRpb29wIG1vZHVsZS4KKworLSBJc3N1ZSAjMjQzMzY6IFRoZSBjb250ZXh0bWFuYWdlciBkZWNvcmF0b3Igbm93IHdvcmtzIHdpdGggZnVuY3Rpb25zIHdpdGgKKyAga2V5d29yZCBhcmd1bWVudHMgY2FsbGVkICJmdW5jIiBhbmQgInNlbGYiLiAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjQ0ODk6IGVuc3VyZSBhIHByZXZpb3VzbHkgc2V0IEMgZXJybm8gZG9lc24ndCBkaXN0dXJiIGNtYXRoLnBvbGFyKCkuCisKKy0gSXNzdWUgIzU2MzM6IEZpeGVkIHRpbWVpdCB3aGVuIHRoZSBzdGF0ZW1lbnQgaXMgYSBzdHJpbmcgYW5kIHRoZSBzZXR1cCBpcyBub3QuCisKKy0gSXNzdWUgIzI0MzI2OiBGaXhlZCBhdWRpb29wLnJhdGVjdigpIHdpdGggbm9uLWRlZmF1bHQgd2VpZ2h0QiBhcmd1bWVudC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRGF2aWQgTW9vcmUuCisKKy0gSXNzdWUgIzIzODQwOiB0b2tlbml6ZS5vcGVuKCkgbm93IGNsb3NlcyB0aGUgdGVtcG9yYXJ5IGJpbmFyeSBmaWxlIG9uIGVycm9yCisgIHRvIGZpeCBhIHJlc291cmNlIHdhcm5pbmcuCisKKy0gSXNzdWUgIzI0MjU3OiBGaXhlZCBzZWdtZW50YXRpb24gZmF1bHQgaW4gc3FsaXRlMy5Sb3cgY29uc3RydWN0b3Igd2l0aCBmYWtlZAorICBjdXJzb3IgdHlwZS4KKworLSBJc3N1ZSAjMjIxMDc6IHRlbXBmaWxlLmdldHRlbXBkaXIoKSBhbmQgdGVtcGZpbGUubWtkdGVtcCgpIG5vdyB0cnkgYWdhaW4KKyAgd2hlbiBhIGRpcmVjdG9yeSB3aXRoIHRoZSBjaG9zZW4gbmFtZSBhbHJlYWR5IGV4aXN0cyBvbiBXaW5kb3dzIGFzIHdlbGwgYXMKKyAgb24gVW5peC4gIHRlbXBmaWxlLm1rc3RlbXAoKSBub3cgZmFpbHMgZWFybHkgaWYgcGFyZW50IGRpcmVjdG9yeSBpcyBub3QKKyAgdmFsaWQgKG5vdCBleGlzdHMgb3IgaXMgYSBmaWxlKSBvbiBXaW5kb3dzLgorCistIElzc3VlICM2NTk4OiBJbmNyZWFzZWQgdGltZSBwcmVjaXNpb24gYW5kIHJhbmRvbSBudW1iZXIgcmFuZ2UgaW4KKyAgZW1haWwudXRpbHMubWFrZV9tc2dpZCgpIHRvIHN0cmVuZ3RoZW4gdGhlIHVuaXF1ZW5lc3Mgb2YgdGhlIG1lc3NhZ2UgSUQuCisKKy0gSXNzdWUgIzI0MDkxOiBGaXhlZCB2YXJpb3VzIGNyYXNoZXMgaW4gY29ybmVyIGNhc2VzIGluIEMgaW1wbGVtZW50YXRpb24gb2YKKyAgRWxlbWVudFRyZWUuCisKKy0gSXNzdWUgIzIxOTMxOiBtc2lsaWIuRkNJQ3JlYXRlKCkgbm93IHJhaXNlcyBUeXBlRXJyb3IgaW4gdGhlIGNhc2Ugb2YgYSBiYWQKKyAgYXJndW1lbnQgaW5zdGVhZCBvZiBhIFZhbHVlRXJyb3Igd2l0aCBhIGJvZ3VzIEZDSSBlcnJvciBudW1iZXIuCisgIFBhdGNoIGJ5IEplZmZyZXkgQXJtc3Ryb25nLgorCistIElzc3VlICMyMzc5NjogcGVlayBhbmQgcmVhZDEgbWV0aG9kcyBvZiBCdWZmZXJlZFJlYWRlciBub3cgcmFpc2UgVmFsdWVFcnJvcgorICBpZiB0aGV5IGNhbGxlZCBvbiBhIGNsb3NlZCBvYmplY3QuIFBhdGNoIGJ5IEpvaG4gSGVyZ2Vucm9lZGVyLgorCistIElzc3VlICMyNDUyMTogRml4IHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3dzIGluIHRoZSBwaWNrbGUgbW9kdWxlLgorCistIElzc3VlICMyMjkzMTogQWxsb3cgJ1snIGFuZCAnXScgaW4gY29va2llIHZhbHVlcy4KKworLSBJc3N1ZSAjMjAyNzQ6IFJlbW92ZSBpZ25vcmVkIGFuZCBlcnJvbmVvdXMgImt3YXJncyIgcGFyYW1ldGVycyBmcm9tIHRocmVlCisgIE1FVEhfVkFSQVJHUyBtZXRob2RzIG9uIF9zcWxpdGUuQ29ubmVjdGlvbi4KKworLSBJc3N1ZSAjMjQwOTQ6IEZpeCBwb3NzaWJsZSBjcmFzaCBpbiBqc29uLmVuY29kZSB3aXRoIHBvb3JseSBiZWhhdmVkIGRpY3QKKyAgc3ViY2xhc3Nlcy4KKworLSBBc3luY2lvIGlzc3VlIDIyMiAvIFBSIDIzMSAoVmljdG9yIFN0aW5uZXIpIC0tIGZpeCBAY29yb3V0aW5lCisgIGZ1bmN0aW9ucyB3aXRob3V0IF9fbmFtZV9fLgorCistIElzc3VlICM5MjQ2OiBPbiBQT1NJWCwgb3MuZ2V0Y3dkKCkgbm93IHN1cHBvcnRzIHBhdGhzIGxvbmdlciB0aGFuIDEwMjUgYnl0ZXMuCisgIFBhdGNoIHdyaXR0ZW4gYnkgV2lsbGlhbSBPcnIuCisKKy0gVGhlIGtleXdvcmRzIGF0dHJpYnV0ZSBvZiBmdW5jdG9vbHMucGFydGlhbCBpcyBub3cgYWx3YXlzIGEgZGljdGlvbmFyeS4KKworLSBJc3N1ZXMgIzI0MDk5LCAjMjQxMDAsIGFuZCAjMjQxMDE6IEZpeCBmcmVlLWFmdGVyLXVzZSBidWcgaW4gaGVhcHEncyBzaWZ0dXAKKyAgYW5kIHNpZnRkb3duIGZ1bmN0aW9ucy4KKworLSBCYWNrcG9ydCBjb2xsZWN0aW9ucy5kZXF1ZSBmaXhlcyBmcm9tIFB5dGhvbiAzLjUuICBQcmV2ZW50cyByZWVudHJhbnQgYmFkbmVzcworICBkdXJpbmcgZGVsZXRpb24gYnkgZGVmZXJyaW5nIHRoZSBkZWNyZWYgdW50aWwgdGhlIGNvbnRhaW5lciBoYXMgYmVlbiByZXN0b3JlZAorICB0byBhIGNvbnNpc3RlbnQgc3RhdGUuCisKKy0gSXNzdWUgIzIzMDA4OiBGaXhlZCByZXNvbHZpbmcgYXR0cmlidXRlcyB3aXRoIGJvb2xlYW4gdmFsdWUgaXMgRmFsc2UgaW4gcHlkb2MuCisKKy0gRml4IGFzeW5jaW8gaXNzdWUgMjM1OiBMaWZvUXVldWUgYW5kIFByaW9yaXR5UXVldWUncyBwdXQgZGlkbid0CisgIGluY3JlbWVudCB1bmZpbmlzaGVkIHRhc2tzICh0aGlzIGJ1ZyB3YXMgaW50cm9kdWNlZCBpbiAzLjQuMyB3aGVuCisgIEpvaW5hYmxlUXVldWUgd2FzIG1lcmdlZCB3aXRoIFF1ZXVlKS4KKworLSBJc3N1ZSAjMjM5MDg6IG9zIGZ1bmN0aW9ucyBub3cgcmVqZWN0IHBhdGhzIHdpdGggZW1iZWRkZWQgbnVsbCBjaGFyYWN0ZXIKKyAgb24gV2luZG93cyBpbnN0ZWFkIG9mIHNpbGVudGx5IHRydW5jYXRlIHRoZW0uCisKKy0gSXNzdWUgIzIzNzI4OiBiaW5hc2NpaS5jcmNfaHF4KCkgY291bGQgcmV0dXJuIGFuIGludGVnZXIgb3V0c2lkZSBvZiB0aGUgcmFuZ2UKKyAgMC0weGZmZmYgZm9yIGVtcHR5IGRhdGEuCisKKy0gSXNzdWUgIzIzODExOiBBZGQgbWlzc2luZyBuZXdsaW5lIHRvIHRoZSBQeUNvbXBpbGVFcnJvciBlcnJvciBtZXNzYWdlLgorICBQYXRjaCBieSBBbGV4IFNoa29wLgorCistIElzc3VlICMxNzg5ODogRml4IGV4Y2VwdGlvbiBpbiBnZXR0ZXh0LnB5IHdoZW4gcGFyc2luZyBjZXJ0YWluIHBsdXJhbCBmb3Jtcy4KKworLSBJc3N1ZSAjMjI5ODI6IEltcHJvdmUgQk9NIGhhbmRsaW5nIHdoZW4gc2Vla2luZyB0byBtdWx0aXBsZSBwb3NpdGlvbnMgb2YKKyAgYSB3cml0YWJsZSB0ZXh0IGZpbGUuCisKKy0gSXNzdWUgIzIzODY1OiBjbG9zZSgpIG1ldGhvZHMgaW4gbXVsdGlwbGUgbW9kdWxlcyBub3cgYXJlIGlkZW1wb3RlbnQgYW5kIG1vcmUKKyAgcm9idXN0IGF0IHNodXRkb3duLiBJZiB0aGV5IG5lZWQgdG8gcmVsZWFzZSBtdWx0aXBsZSByZXNvdXJjZXMsIGFsbCBhcmUKKyAgcmVsZWFzZWQgZXZlbiBpZiBlcnJvcnMgb2NjdXIuCisKKy0gSXNzdWUgIzIzODgxOiB1cmxsaWIucmVxdWVzdC5mdHB3cmFwcGVyIGNvbnN0cnVjdG9yIG5vdyBjbG9zZXMgdGhlIHNvY2tldCBpZgorICB0aGUgRlRQIGNvbm5lY3Rpb24gZmFpbGVkIHRvIGZpeCBhIFJlc291cmNlV2FybmluZy4KKworLSBJc3N1ZSAjMjM0MDA6IFJhaXNlIHNhbWUgZXhjZXB0aW9uIG9uIGJvdGggUHl0aG9uIDIgYW5kIDMgaWYgc2VtX29wZW4gaXMgbm90CisgIGF2YWlsYWJsZS4gIFBhdGNoIGJ5IERhdmluIFBvdHRzLgorCistIElzc3VlICMxNTEzMzogX3RraW50ZXIudGthcHAuZ2V0Ym9vbGVhbigpIG5vdyBzdXBwb3J0cyBUY2xfT2JqIGFuZCBhbHdheXMKKyAgcmV0dXJucyBib29sLiAgdGtpbnRlci5Cb29sZWFuVmFyIG5vdyB2YWxpZGF0ZXMgaW5wdXQgdmFsdWVzIChhY2NlcHRlZCBib29sLAorICBpbnQsIHN0ciwgYW5kIFRjbF9PYmopLiAgdGtpbnRlci5Cb29sZWFuVmFyLmdldCgpIG5vdyBhbHdheXMgcmV0dXJucyBib29sLgorCistIElzc3VlICMyMzMzODogRml4ZWQgZm9ybWF0dGluZyBjdHlwZXMgZXJyb3IgbWVzc2FnZXMgb24gQ3lnd2luLgorICBQYXRjaCBieSBNYWtvdG8gS2F0by4KKworLSBJc3N1ZSAjMTY4NDA6IFRraW50ZXIgbm93IHN1cHBvcnRzIDY0LWJpdCBpbnRlZ2VycyBhZGRlZCBpbiBUY2wgOC40IGFuZAorICBhcmJpdHJhcnkgcHJlY2lzaW9uIGludGVnZXJzIGFkZGVkIGluIFRjbCA4LjUuCisKKy0gSXNzdWUgIzIzODM0OiBGaXggc29ja2V0LnNlbmR0bygpLCB1c2UgdGhlIEMgUHlfc3NpemVfdCB0eXBlIHRvIHN0b3JlIHRoZQorICByZXN1bHQgb2Ygc2VuZHRvKCkgaW5zdGVhZCBvZiB0aGUgQyBpbnQgdHlwZS4KKworLSBJc3N1ZSAjMjE1MjY6IFRraW50ZXIgbm93IHN1cHBvcnRzIG5ldyBib29sZWFuIHR5cGUgaW4gVGNsIDguNS4KKworLSBJc3N1ZSAjMjM4Mzg6IGxpbmVjYWNoZSBub3cgY2xlYXJzIHRoZSBjYWNoZSBhbmQgcmV0dXJucyBhbiBlbXB0eSByZXN1bHQgb24KKyAgTWVtb3J5RXJyb3IuCisKKy0gSXNzdWUgIzE4NDczOiBGaXhlZCAydG8zIGFuZCAzdG8yIGNvbXBhdGlibGUgcGlja2xlIG1hcHBpbmdzLiAgRml4ZWQKKyAgYW1iaWdpb3VzIHJldmVyc2UgbWFwcGluZ3MuICBBZGRlZCBtYW55IG5ldyBtYXBwaW5ncy4gIEltcG9ydCBtYXBwaW5nIGlzIG5vCisgIGxvbmdlciBhcHBsaWVkIHRvIG1vZHVsZXMgYWxyZWFkeSBtYXBwZWQgd2l0aCBmdWxsIG5hbWUgbWFwcGluZy4KKworLSBJc3N1ZSAjMjM3NDU6IFRoZSBuZXcgZW1haWwgaGVhZGVyIHBhcnNlciBub3cgaGFuZGxlcyBkdXBsaWNhdGUgTUlNRQorICBwYXJhbWV0ZXIgbmFtZXMgd2l0aG91dCBlcnJvciwgc2ltaWxhciB0byBob3cgZ2V0X3BhcmFtIGJlaGF2ZXMuCisKKy0gSXNzdWUgIzIzNzkyOiBJZ25vcmUgS2V5Ym9hcmRJbnRlcnJ1cHQgd2hlbiB0aGUgcHlkb2MgcGFnZXIgaXMgYWN0aXZlLgorICBUaGlzIG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIHN0YW5kYXJkIHVuaXggcGFnZXJzLCBhbmQgcHJldmVudHMKKyAgcGlwZXBhZ2VyIGZyb20gc2h1dHRpbmcgZG93biB3aGlsZSB0aGUgcGFnZXIgaXRzZWxmIGlzIHN0aWxsIHJ1bm5pbmcuCisKKy0gSXNzdWUgIzIzNzQyOiBudHBhdGguZXhwYW5kdmFycygpIG5vIGxvbmdlciBsb3NlcyB1bmJhbGFuY2VkIHNpbmdsZSBxdW90ZXMuCisKKy0gSXNzdWUgIzIxODAyOiBUaGUgcmVhZGVyIGluIEJ1ZmZlcmVkUldQYWlyIG5vdyBpcyBjbG9zZWQgZXZlbiB3aGVuIGNsb3NpbmcKKyAgd3JpdGVyIGZhaWxlZCBpbiBCdWZmZXJlZFJXUGFpci5jbG9zZSgpLgorCistIElzc3VlICMyMzY3MTogc3RyaW5nLlRlbXBsYXRlIG5vdyBhbGxvd3MgdG8gc3BlY2lmeSB0aGUgInNlbGYiIHBhcmFtZXRlciBhcworICBrZXl3b3JkIGFyZ3VtZW50LiAgc3RyaW5nLkZvcm1hdHRlciBub3cgYWxsb3dzIHRvIHNwZWNpZnkgdGhlICJzZWxmIiBhbmQKKyAgdGhlICJmb3JtYXRfc3RyaW5nIiBwYXJhbWV0ZXJzIGFzIGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMyMTU2MDogQW4gYXR0ZW1wdCB0byB3cml0ZSBhIGRhdGEgb2Ygd3JvbmcgdHlwZSBubyBsb25nZXIgY2F1c2UKKyAgR3ppcEZpbGUgY29ycnVwdGlvbi4gIE9yaWdpbmFsIHBhdGNoIGJ5IFdvbGZnYW5nIE1haWVyLgorCistIElzc3VlICMyMzY0NzogSW5jcmVhc2UgaW1wYWxpYidzIE1BWExJTkUgdG8gYWNjb21tb2RhdGUgbW9kZXJuIG1haWxib3ggc2l6ZXMuCisKKy0gSXNzdWUgIzIzNTM5OiBJZiBib2R5IGlzIE5vbmUsIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLnJlcXVlc3Qgbm93IHNldHMKKyAgQ29udGVudC1MZW5ndGggdG8gMCBmb3IgUFVULCBQT1NULCBhbmQgUEFUQ0ggaGVhZGVycyB0byBhdm9pZCA0MTEgZXJyb3JzIGZyb20KKyAgc29tZSB3ZWIgc2VydmVycy4KKworLSBJc3N1ZSAjMjIzNTE6IFRoZSBubnRwbGliLk5OVFAgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGxlYXZlcyB0aGUgY29ubmVjdGlvbgorICBhbmQgc29ja2V0IG9wZW4gdW50aWwgdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGNsZWFucyB0aGVtIHVwLiAgUGF0Y2ggYnkKKyAgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMjMxMzY6IF9zdHJwdGltZSBub3cgdW5pZm9ybWx5IGhhbmRsZXMgYWxsIGRheXMgaW4gd2VlayAwLCBpbmNsdWRpbmcKKyAgRGVjIDMwIG9mIHByZXZpb3VzIHllYXIuICBCYXNlZCBvbiBwYXRjaCBieSBKaW0gQ2Fycm9sbC4KKworLSBJc3N1ZSAjMjM3MDA6IEl0ZXJhdG9yIG9mIE5hbWVkVGVtcG9yYXJ5RmlsZSBub3cga2VlcHMgYSByZWZlcmVuY2UgdG8KKyAgTmFtZWRUZW1wb3JhcnlGaWxlIGluc3RhbmNlLiAgUGF0Y2ggYnkgQm9odXNsYXYgS2FicmRhLgorCistIElzc3VlICMyMjkwMzogVGhlIGZha2UgdGVzdCBjYXNlIGNyZWF0ZWQgYnkgdW5pdHRlc3QubG9hZGVyIHdoZW4gaXQgZmFpbHMKKyAgaW1wb3J0aW5nIGEgdGVzdCBtb2R1bGUgaXMgbm93IHBpY2tsYWJsZS4KKworLSBJc3N1ZSAjMjM1Njg6IEFkZCByZGl2bW9kIHN1cHBvcnQgdG8gTWFnaWNNb2NrKCkgb2JqZWN0cy4KKyAgUGF0Y2ggYnkgSMOla2FuIEzDtnZkYWhsLgorCistIElzc3VlICMyMzEzODogRml4ZWQgcGFyc2luZyBjb29raWVzIHdpdGggYWJzZW50IGtleXMgb3IgdmFsdWVzIGluIGNvb2tpZWphci4KKyAgUGF0Y2ggYnkgRGVtaWFuIEJyZWNodC4KKworLSBJc3N1ZSAjMjMwNTE6IG11bHRpcHJvY2Vzc2luZy5Qb29sIG1ldGhvZHMgaW1hcCgpIGFuZCBpbWFwX3Vub3JkZXJlZCgpIG5vdworICBoYW5kbGUgZXhjZXB0aW9ucyByYWlzZWQgYnkgYW4gaXRlcmF0b3IuICBQYXRjaCBieSBBbG9uIERpYW1hbnQgYW5kIERhdmluCisgIFBvdHRzLgorCistIElzc3VlICMyMjkyODogRGlzYWJsZWQgSFRUUCBoZWFkZXIgaW5qZWN0aW9ucyBpbiBodHRwLmNsaWVudC4KKyAgT3JpZ2luYWwgcGF0Y2ggYnkgRGVtaWFuIEJyZWNodC4KKworLSBJc3N1ZSAjMjM2MTU6IE1vZHVsZXMgYnoyLCB0YXJmaWxlIGFuZCB0b2tlbml6ZSBub3cgY2FuIGJlIHJlbG9hZGVkIHdpdGgKKyAgaW1wLnJlbG9hZCgpLiAgUGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCisKKy0gSXNzdWUgIzIzNDc2OiBJbiB0aGUgc3NsIG1vZHVsZSwgZW5hYmxlIE9wZW5TU0wncyBYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJUlNUCisgIGZsYWcgb24gY2VydGlmaWNhdGUgc3RvcmVzIHdoZW4gaXQgaXMgYXZhaWxhYmxlLgorCistIElzc3VlICMyMzU3NjogQXZvaWQgc3RhbGxpbmcgaW4gU1NMIHJlYWRzIHdoZW4gRU9GIGhhcyBiZWVuIHJlYWNoZWQgaW4gdGhlCisgIFNTTCBsYXllciBidXQgdGhlIHVuZGVybHlpbmcgY29ubmVjdGlvbiBoYXNuJ3QgYmVlbiBjbG9zZWQuCisKKy0gSXNzdWUgIzIzNTA0OiBBZGRlZCBhbiBfX2FsbF9fIHRvIHRoZSB0eXBlcyBtb2R1bGUuCisKKy0gSXNzdWUgIzIwMjA0OiBBZGRlZCB0aGUgX19tb2R1bGVfXyBhdHRyaWJ1dGUgdG8gX3RraW50ZXIgY2xhc3Nlcy4KKworLSBJc3N1ZSAjMjM1MjE6IENvcnJlY3RlZCBwdXJlIHB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiB0aW1lZGVsdGEgZGl2aXNpb24uCisKKyAqIEVsaW1pbmF0ZWQgT3ZlcmZsb3dFcnJvciBmcm9tIHRpbWVkZWx0YSAqIGZsb2F0IGZvciBzb21lIGZsb2F0czsKKyAqIENvcnJlY3RlZCByb3VuZGluZyBpbiB0aW1lZGx0YSB0cnVlIGRpdmlzaW9uLgorCistIElzc3VlICMyMTYxOTogUG9wZW4gb2JqZWN0cyBubyBsb25nZXIgbGVhdmUgYSB6b21iaWUgYWZ0ZXIgZXhpdCBpbiB0aGUgd2l0aAorICBzdGF0ZW1lbnQgaWYgdGhlIHBpcGUgd2FzIGJyb2tlbi4gIFBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzY2Mzk6IE1vZHVsZS1sZXZlbCB0dXJ0bGUgZnVuY3Rpb25zIG5vIGxvbmdlciByYWlzZSBUY2xFcnJvciBhZnRlcgorICBjbG9zaW5nIHRoZSB3aW5kb3cuCisKKy0gSXNzdWVzICM4MTQyNTMsICM5MTc5OiBXYXJuaW5ncyBub3cgYXJlIHJhaXNlZCB3aGVuIGdyb3VwIHJlZmVyZW5jZXMgYW5kCisgIGNvbmRpdGlvbmFsIGdyb3VwIHJlZmVyZW5jZXMgYXJlIHVzZWQgaW4gbG9va2JlaGluZCBhc3NlcnRpb25zIGluIHJlZ3VsYXIKKyAgZXhwcmVzc2lvbnMuCisKKy0gSXNzdWUgIzIzMjE1OiBNdWx0aWJ5dGUgY29kZWNzIHdpdGggY3VzdG9tIGVycm9yIGhhbmRsZXJzIHRoYXQgaWdub3JlcyBlcnJvcnMKKyAgY29uc3VtZWQgdG9vIG11Y2ggbWVtb3J5IGFuZCByYWlzZWQgU3lzdGVtRXJyb3Igb3IgTWVtb3J5RXJyb3IuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEFsZWtzaSBUb3JoYW1vLgorCistIElzc3VlICM1NzAwOiBpby5GaWxlSU8oKSBjYWxsZWQgZmx1c2goKSBhZnRlciBjbG9zaW5nIHRoZSBmaWxlLgorICBmbHVzaCgpIHdhcyBub3QgY2FsbGVkIGluIGNsb3NlKCkgaWYgY2xvc2VmZD1GYWxzZS4KKworLSBJc3N1ZSAjMjMzNzQ6IEZpeGVkIHB5ZG9jIGZhaWx1cmUgd2l0aCBub24tQVNDSUkgZmlsZXMgd2hlbiBzdGRvdXQgZW5jb2RpbmcKKyAgZGlmZmVycyBmcm9tIGZpbGUgc3lzdGVtIGVuY29kaW5nIChlLmcuIG9uIE1hYyBPUykuCisKKy0gSXNzdWUgIzIzNDgxOiBSZW1vdmUgUkM0IGZyb20gdGhlIFNTTCBtb2R1bGUncyBkZWZhdWx0IGNpcGhlciBsaXN0LgorCistIElzc3VlICMyMTU0ODogRml4IHB5ZG9jLnN5bm9wc2lzKCkgYW5kIHB5ZG9jLmFwcm9wb3MoKSBvbiBtb2R1bGVzIHdpdGggZW1wdHkKKyAgZG9jc3RyaW5ncy4KKworLSBJc3N1ZSAjMjI4ODU6IEZpeGVkIGFyYml0cmFyeSBjb2RlIGV4ZWN1dGlvbiB2dWxuZXJhYmlsaXR5IGluIHRoZSBkYm0uZHVtYgorICBtb2R1bGUuICBPcmlnaW5hbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzIzMTQ2OiBGaXggbWlzaGFuZGxpbmcgb2YgYWJzb2x1dGUgV2luZG93cyBwYXRocyB3aXRoIGZvcndhcmQKKyAgc2xhc2hlcyBpbiBwYXRobGliLgorCistIElzc3VlICMyMzQyMTogRml4ZWQgY29tcHJlc3Npb24gaW4gdGFyZmlsZSBDTEkuICBQYXRjaCBieSB3ZHY0NzU4aC4KKworLSBJc3N1ZSAjMjMzNjc6IEZpeCBwb3NzaWJsZSBvdmVyZmxvd3MgaW4gdGhlIHVuaWNvZGVkYXRhIG1vZHVsZS4KKworLSBJc3N1ZSAjMjMzNjE6IEZpeCBwb3NzaWJsZSBvdmVyZmxvdyBpbiBXaW5kb3dzIHN1YnByb2Nlc3MgY3JlYXRpb24gY29kZS4KKworLSBJc3N1ZSAjMjM4MDE6IEZpeCBpc3N1ZSB3aGVyZSBjZ2kuRmllbGRTdG9yYWdlIGRpZCBub3QgYWx3YXlzIGlnbm9yZSB0aGUKKyAgZW50aXJlIHByZWFtYmxlIHRvIGEgbXVsdGlwYXJ0IGJvZHkuCisKKy0gSXNzdWUgIzIzMzEwOiBGaXggTWFnaWNNb2NrJ3MgaW5pdGlhbGl6ZXIgdG8gd29yayB3aXRoIF9fbWV0aG9kc19fLCBqdXN0CisgIGxpa2UgY29uZmlndXJlX21vY2soKS4gIFBhdGNoIGJ5IEthc2lhIEphY2hpbS4KKworLSBhc3luY2lvOiBOZXcgZXZlbnQgbG9vcCBBUElzOiBzZXRfdGFza19mYWN0b3J5KCkgYW5kIGdldF90YXNrX2ZhY3RvcnkoKS4KKworLSBhc3luY2lvOiBhc3luYygpIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGVuc3VyZV9mdXR1cmUoKS4KKworLSBJc3N1ZSAjMjM4OTg6IEZpeCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzKCkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzCisgIHdpdGggb3ZlcmxvYWRlZCBfX2VxX18gYW5kIF9fYm9vbF9fLiAgUGF0Y2ggYnkgTWlrZSBCYXllci4KKworLSBJc3N1ZSAjMjQyOTg6IEZpeCBpbnNwZWN0LnNpZ25hdHVyZSgpIHRvIGNvcnJlY3RseSB1bndyYXAgd3JhcHBlcnMKKyAgYXJvdW5kIGJvdW5kIG1ldGhvZHMuCisKKy0gSXNzdWUgIzIzNTcyOiBGaXhlZCBmdW5jdG9vbHMuc2luZ2xlZGlzcGF0Y2ggb24gY2xhc3NlcyB3aXRoIGZhbHN5CisgIG1ldGFjbGFzc2VzLiAgUGF0Y2ggYnkgRXRoYW4gRnVybWFuLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgMTUzNDg6IFN0b3AgdGhlIGRlYnVnZ2VyIGVuZ2luZSAobm9ybWFsbHkgaW4gYSB1c2VyIHByb2Nlc3MpCisgIGJlZm9yZSBjbG9zaW5nIHRoZSBkZWJ1Z2dlciB3aW5kb3cgKHJ1bm5pbmcgaW4gdGhlIElETEUgcHJvY2VzcykuCisgIFRoaXMgcHJldmVudHMgdGhlIFJ1bnRpbWVFcnJvcnMgdGhhdCB3ZXJlIGJlaW5nIGNhdWdodCBhbmQgaWdub3JlZC4KKworLSBJc3N1ZSAjMjQ0NTU6IFByZXZlbnQgSURMRSBmcm9tIGhhbmdpbmcgd2hlbiBhKSBjbG9zaW5nIHRoZSBzaGVsbCB3aGlsZSB0aGUKKyAgZGVidWdnZXIgaXMgYWN0aXZlICgxNTM0Nyk7IGIpIGNsb3NpbmcgdGhlIGRlYnVnZ2VyIHdpdGggdGhlIFtYXSBidXR0b24KKyAgKDE1MzQ4KTsgYW5kIGMpIGFjdGl2YXRpbmcgdGhlIGRlYnVnZ2VyIHdoZW4gYWxyZWFkeSBhY3RpdmUgKDI0NDU1KS4KKyAgVGhlIHBhdGNoIGJ5IE1hcmsgUm9zZW1hbiBkb2VzIHRoaXMgYnkgbWFraW5nIHR3byBjaGFuZ2VzLgorICAxLiBTdXNwZW5kIGFuZCByZXN1bWUgdGhlIGd1aS5pbnRlcmFjdGlvbiBtZXRob2Qgd2l0aCB0aGUgdGNsIHZ3YWl0CisgIG1lY2hhbmlzbSBpbnRlbmRlZCBmb3IgdGhpcyBwdXJwb3NlIChpbnN0ZWFkIG9mIHJvb3QubWFpbmxvb3AgJiAucXVpdCkuCisgIDIuIEluIGd1aS5ydW4sIGFsbG93IGFueSBleGlzdGluZyBpbnRlcmFjdGlvbiB0byB0ZXJtaW5hdGUgZmlyc3QuCisKKy0gQ2hhbmdlICdUaGUgcHJvZ3JhbScgdG8gJ1lvdXIgcHJvZ3JhbScgaW4gYW4gSURMRSAna2lsbCBwcm9ncmFtPycgbWVzc2FnZQorICB0byBtYWtlIGl0IGNsZWFyZXIgdGhhdCB0aGUgcHJvZ3JhbSByZWZlcnJlZCB0byBpcyB0aGUgY3VycmVudGx5IHJ1bm5pbmcKKyAgdXNlciBwcm9ncmFtLCBub3QgSURMRSBpdHNlbGYuCisKKy0gSXNzdWUgIzI0NzUwOiBJbXByb3ZlIHRoZSBhcHBlYXJhbmNlIG9mIHRoZSBJRExFIGVkaXRvciB3aW5kb3cgc3RhdHVzIGJhci4KKyAgUGF0Y2ggYnkgTWFyayBSb3NlbWFuLgorCistIElzc3VlICMyNTMxMzogQ2hhbmdlIHRoZSBoYW5kbGluZyBvZiBuZXcgYnVpbHQtaW4gdGV4dCBjb2xvciB0aGVtZXMgdG8gYmV0dGVyCisgIGFkZHJlc3MgdGhlIGNvbXBhdGliaWxpdHkgcHJvYmxlbSBpbnRyb2R1Y2VkIGJ5IHRoZSBhZGRpdGlvbiBvZiBJRExFIERhcmsuCisgIENvbnNpc3RlbnRseSB1c2UgdGhlIHJldmlzZWQgaWRsZUNvbmYuQ3VycmVudFRoZW1lIGV2ZXJ5d2hlcmUgaW4gaWRsZWxpYi4KKworLSBJc3N1ZSAjMjQ3ODI6IEV4dGVuc2lvbiBjb25maWd1cmF0aW9uIGlzIG5vdyBhIHRhYiBpbiB0aGUgSURMRSBQcmVmZXJlbmNlcworICBkaWFsb2cgcmF0aGVyIHRoYW4gYSBzZXBhcmF0ZSBkaWFsb2cuICAgVGhlIGZvcm1lciB0YWJzIGFyZSBub3cgYSBzb3J0ZWQKKyAgbGlzdC4gIFBhdGNoIGJ5IE1hcmsgUm9zZW1hbi4KKworLSBJc3N1ZSAjMjI3MjY6IFJlLWFjdGl2YXRlIHRoZSBjb25maWcgZGlhbG9nIGhlbHAgYnV0dG9uIHdpdGggc29tZSBjb250ZW50CisgIGFib3V0IHRoZSBvdGhlciBidXR0b25zIGFuZCB0aGUgbmV3IElETEUgRGFyayB0aGVtZS4KKworLSBJc3N1ZSAjMjQ4MjA6IElETEUgbm93IGhhcyBhbiAnSURMRSBEYXJrJyBidWlsdC1pbiB0ZXh0IGNvbG9yIHRoZW1lLgorICBJdCBpcyBtb3JlIG9yIGxlc3MgSURMRSBDbGFzc2ljIGludmVydGVkLCB3aXRoIGEgY29iYWx0IGJsdWUgYmFja2dyb3VuZC4KKyAgU3RyaW5ncywgY29tbWVudHMsIGtleXdvcmRzLCAuLi4gYXJlIHN0aWxsIGdyZWVuLCByZWQsIG9yYW5nZSwgLi4uIC4KKyAgVG8gdXNlIGl0IHdpdGggSURMRXMgcmVsZWFzZWQgYmVmb3JlIE5vdmVtYmVyIDIwMTUsIGhpdCB0aGUKKyAgJ1NhdmUgYXMgTmV3IEN1c3RvbSBUaGVtZScgYnV0dG9uIGFuZCBlbnRlciBhIG5ldyBuYW1lLAorICBzdWNoIGFzICdDdXN0b20gRGFyaycuICBUaGUgY3VzdG9tIHRoZW1lIHdpbGwgd29yayB3aXRoIGFueSBJRExFCisgIHJlbGVhc2UsIGFuZCBjYW4gYmUgbW9kaWZpZWQuCisKKy0gSXNzdWUgIzI1MjI0OiBSRUFETUUudHh0IGlzIG5vdyBhbiBpZGxlbGliIGluZGV4IGZvciBJRExFIGRldmVsb3BlcnMgYW5kCisgIGN1cmlvdXMgdXNlcnMuICBUaGUgcHJldmlvdXMgdXNlciBjb250ZW50IGlzIG5vdyBpbiB0aGUgSURMRSBkb2MgY2hhcHRlci4KKyAgJ0lETEUnIG5vdyBtZWFucyAnSW50ZWdyYXRlZCBEZXZlbG9wbWVudCBhbmQgTGVhcm5pbmcgRW52aXJvbm1lbnQnLgorCistIElzc3VlICMyNDgyMDogVXNlcnMgY2FuIG5vdyBzZXQgYnJlYWtwb2ludCBjb2xvcnMgaW4KKyAgU2V0dGluZ3MgLT4gQ3VzdG9tIEhpZ2hsaWdodGluZy4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1hcmsgUm9zZW1hbi4KKworLSBJc3N1ZSAjMjQ5NzI6IEluYWN0aXZlIHNlbGVjdGlvbiBiYWNrZ3JvdW5kIG5vdyBtYXRjaGVzIGFjdGl2ZSBzZWxlY3Rpb24KKyAgYmFja2dyb3VuZCwgYXMgY29uZmlndXJlZCBieSB1c2Vycywgb24gYWxsIHN5c3RlbXMuICBGb3VuZCBpdGVtcyBhcmUgbm93CisgIGFsd2F5cyBoaWdobGlnaHRlZCBvbiBXaW5kb3dzLiAgSW5pdGlhbCBwYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI0NTcwOiBJZGxlOiBtYWtlIGNhbGx0aXAgYW5kIGNvbXBsZXRpb24gYm94ZXMgYXBwZWFyIG9uIE1hY3MKKyAgYWZmZWN0ZWQgYnkgYSB0ayByZWdyZXNzaW9uLiAgSW5pdGlhbCBwYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI0OTg4OiBJZGxlIFNjcm9sbGVkTGlzdCBjb250ZXh0IG1lbnVzICh1c2VkIGluIGRlYnVnZ2VyKQorICBub3cgd29yayBvbiBNYWMgQXF1YS4gIFBhdGNoIGJ5IE1hcmsgUm9zZW1hbi4KKworLSBJc3N1ZSAjMjQ4MDE6IE1ha2UgcmlnaHQtY2xpY2sgZm9yIGNvbnRleHQgbWVudSB3b3JrIG9uIE1hYyBBcXVhLgorICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI1MTczOiBBc3NvY2lhdGUgdGtpbnRlciBtZXNzYWdlYm94ZXMgd2l0aCBhIHNwZWNpZmljIHdpZGdldC4KKyAgRm9yIE1hYyBPU1gsIG1ha2UgdGhlbSBhICdzaGVldCcuICBQYXRjaCBieSBNYXJrIFJvc2VtYW4uCisKKy0gSXNzdWUgIzI1MTk4OiBFbmhhbmNlIHRoZSBpbml0aWFsIGh0bWwgdmlld2VyIG5vdyB1c2VkIGZvciBJZGxlIEhlbHAuCisgICogUHJvcGVybHkgaW5kZW50IGZpeGVkLXBpdGNoIHRleHQgKHBhdGNoIGJ5IE1hcmsgUm9zZW1hbikuCisgICogR2l2ZSBjb2RlIHNuaXBwZXQgYSB2ZXJ5IFNwaGlueC1saWtlIGxpZ2h0IGJsdWVpc2gtZ3JheSBiYWNrZ3JvdW5kLgorICAqIFJlLXVzZSBpbml0aWFsIHdpZHRoIGFuZCBoZWlnaHQgc2V0IGJ5IHVzZXJzIGZvciBzaGVsbCBhbmQgZWRpdG9yLgorICAqIFdoZW4gdGhlIFRhYmxlIG9mIENvbnRlbnRzIChUT0MpIG1lbnUgaXMgdXNlZCwgcHV0IHRoZSBzZWN0aW9uIGhlYWRlcgorICBhdCB0aGUgdG9wIG9mIHRoZSBzY3JlZW4uCisKKy0gSXNzdWUgIzI1MjI1OiBDb25kZW5zZSBhbmQgcmV3cml0ZSBJZGxlIGRvYyBzZWN0aW9uIG9uIHRleHQgY29sb3JzLgorCistIElzc3VlICMyMTk5NTogRXhwbGFpbiBzb21lIGRpZmZlcmVuY2VzIGJldHdlZW4gSURMRSBhbmQgY29uc29sZSBQeXRob24uCisKKy0gSXNzdWUgIzIyODIwOiBFeHBsYWluIG5lZWQgZm9yICpwcmludCogd2hlbiBydW5uaW5nIGZpbGUgZnJvbSBJZGxlIGVkaXRvci4KKworLSBJc3N1ZSAjMjUyMjQ6IERvYzogYXVnbWVudCBJZGxlIGZlYXR1cmUgbGlzdCBhbmQgbm8tc3VicHJvY2VzcyBzZWN0aW9uLgorCistIElzc3VlICMyNTIxOTogVXBkYXRlIGRvYyBmb3IgSWRsZSBjb21tYW5kIGxpbmUgb3B0aW9ucy4KKyAgU29tZSB3ZXJlIG1pc3NpbmcgYW5kIG5vdGVzIHdlcmUgbm90IGNvcnJlY3QuCisKKy0gSXNzdWUgIzI0ODYxOiBNb3N0IG9mIGlkbGVsaWIgaXMgcHJpdmF0ZSBhbmQgc3ViamVjdCB0byBjaGFuZ2UuCisgIFVzZSBpZGxlaWIuaWRsZS4qIHRvIHN0YXJ0IElkbGUuIFNlZSBpZGxlbGliLl9faW5pdF9fLl9fZG9jX18uCisKKy0gSXNzdWUgIzI1MTk5OiBJZGxlOiBhZGQgc3luY2hyb25pemF0aW9uIGNvbW1lbnRzIGZvciBmdXR1cmUgbWFpbnRhaW5lcnMuCisKKy0gSXNzdWUgIzE2ODkzOiBSZXBsYWNlIGhlbHAudHh0IHdpdGggaGVscC5odG1sIGZvciBJZGxlIGRvYyBkaXNwbGF5LgorICBUaGUgbmV3IGlkbGVsaWIvaGVscC5odG1sIGlzIHJzdHJpcHBlZCBEb2MvYnVpbGQvaHRtbC9saWJyYXJ5L2lkbGUuaHRtbC4KKyAgSXQgbG9va3MgYmV0dGVyIHRoYW4gaGVscC50eHQgYW5kIHdpbGwgYmV0dGVyIGRvY3VtZW50IElkbGUgYXMgcmVsZWFzZWQuCisgIFRoZSB0a2ludGVyIGh0bWwgdmlld2VyIHRoYXQgd29ya3MgZm9yIHRoaXMgZmlsZSB3YXMgd3JpdHRlbiBieSBNYXJrIFJvc2VtYW4uCisgIFRoZSBub3cgdW51c2VkIEVkaXRvcldpbmRvdy5IZWxwRGlhbG9nIGNsYXNzIGFuZCBoZWx0LnR4dCBmaWxlIGFyZSBkZXByZWNhdGVkLgorCistIElzc3VlICMyNDE5OTogRGVwcmVjYXRlIHVudXNlZCBpZGxlbGliLmlkbGV2ZXIgd2l0aCBwb3NzaWJsZSByZW1vdmFsIGluIDMuNi4KKworLSBJc3N1ZSAjMjQ3OTA6IFJlbW92ZSBleHRyYW5lb3VzIGNvZGUgKHdoaWNoIGFsc28gY3JlYXRlIDIgJiAzIGNvbmZsaWN0cykuCisKKy0gSXNzdWUgIzIzNjcyOiBBbGxvdyBJZGxlIHRvIGVkaXQgYW5kIHJ1biBmaWxlcyB3aXRoIGFzdHJhbCBjaGFycyBpbiBuYW1lLgorICBQYXRjaCBieSBNb2hkIFNhbmFkIFpha2kgUml6dmkuCisKKy0gSXNzdWUgMjQ3NDU6IElkbGUgZWRpdG9yIGRlZmF1bHQgZm9udC4gU3dpdGNoIGZyb20gQ291cmllciB0bworICBwbGF0Zm9ybS1zZW5zaXRpdmUgVGtGaXhlZEZvbnQuICBUaGlzIHNob3VsZCBub3QgYWZmZWN0IGN1cnJlbnQgY3VzdG9taXplZAorICBmb250IHNlbGVjdGlvbnMuICBJZiB0aGVyZSBpcyBhIHByb2JsZW0sIGVkaXQgJEhPTUUvLmlkbGVyYy9jb25maWctbWFpbi5jZmcKKyAgYW5kIHJlbW92ZSAnZm9udHh4eCcgZW50cmllcyBmcm9tIFtFZGl0b3IgV2luZG93XS4gIFBhdGNoIGJ5IE1hcmsgUm9zZW1hbi4KKworLSBJc3N1ZSAjMjExOTI6IElkbGUgZWRpdG9yLiBXaGVuIGEgZmlsZSBpcyBydW4sIHB1dCBpdHMgbmFtZSBpbiB0aGUgcmVzdGFydCBiYXIuCisgIERvIG5vdCBwcmludCBmYWxzZSBwcm9tcHRzLiBPcmlnaW5hbCBwYXRjaCBieSBBZG5hbiBVbWVyLgorCistIElzc3VlICMxMzg4NDogSWRsZSBtZW51cy4gUmVtb3ZlIHRlYXJvZmYgbGluZXMuIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMyMzE4NDogcmVtb3ZlIHVudXNlZCBuYW1lcyBhbmQgaW1wb3J0cyBpbiBpZGxlbGliLgorICBJbml0aWFsIHBhdGNoIGJ5IEFsIFN3ZWlnYXJ0LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjU2MTY6IFRlc3RzIGZvciBPcmRlcmVkRGljdCBhcmUgZXh0cmFjdGVkIGZyb20gdGVzdF9jb2xsZWN0aW9ucworICBpbnRvIHNlcGFyYXRlIGZpbGUgdGVzdF9vcmRlcmVkX2RpY3QuCisKKy0gSXNzdWUgIzI1MDk5OiBNYWtlIHRlc3RfY29tcGlsZWFsbCBub3QgZmFpbCB3aGVuIGFuIGVudHJ5IG9uIHN5cy5wYXRoIGNhbm5vdAorICBiZSB3cml0dGVuIHRvIChjb21tb25seSBzZWVuIGluIGFkbWluaXN0cmF0aXZlIGluc3RhbGxzIG9uIFdpbmRvd3MpLgorCistIElzc3VlICMyNDc1MTogV2hlbiBydW5uaW5nIHJlZ3J0ZXN0IHdpdGggdGhlIGBgLXdgYCBjb21tYW5kIGxpbmUgb3B0aW9uLAorICBhIHRlc3QgcnVuIGlzIG5vIGxvbmdlciBtYXJrZWQgYXMgYSBmYWlsdXJlIGlmIGFsbCB0ZXN0cyBzdWNjZWVkIHdoZW4KKyAgcmUtcnVuLgorCistIElzc3VlICMyMTUyMDogdGVzdF96aXBmaWxlIG5vIGxvbmdlciBmYWlscyBpZiB0aGUgd29yZCAnYmFkJyBhcHBlYXJzCisgIGFueXdoZXJlIGluIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMjM3OTk6IEFkZGVkIHRlc3Quc3VwcG9ydC5zdGFydF90aHJlYWRzKCkgZm9yIHJ1bm5pbmcgYW5kCisgIGNsZWFuaW5nIHVwIG11bHRpcGxlIHRocmVhZHMuCisKKy0gSXNzdWUgIzIyMzkwOiB0ZXN0LnJlZ3J0ZXN0IG5vdyBlbWl0cyBhIHdhcm5pbmcgaWYgdGVtcG9yYXJ5IGZpbGVzIG9yCisgIGRpcmVjdG9yaWVzIGFyZSBsZWZ0IGFmdGVyIHJ1bm5pbmcgYSB0ZXN0LgorCistIElzc3VlICMyMzU4MzogQWRkZWQgdGVzdHMgZm9yIHN0YW5kYXJkIElPIHN0cmVhbXMgaW4gSURMRS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzIzNDQ1OiBweWRlYnVnIGJ1aWxkcyBub3cgdXNlICJnY2MgLU9nIiB3aGVyZSBwb3NzaWJsZSwgdG8gbWFrZQorICB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgZmFzdGVyLgorCistIElzc3VlICMyNDYwMzogVXBkYXRlIFdpbmRvd3MgYnVpbGRzIHRvIHVzZSBPcGVuU1NMMS4wLjJkCisgIGFuZCBPUyBYIDEwLjUgaW5zdGFsbGVyIHRvIHVzZSBPcGVuU1NMIDEuMC4yZS4KKworQyBBUEkKKy0tLS0tCisKKy0gSXNzdWUgIzIzOTk4OiBQeUltcG9ydF9SZUluaXRMb2NrKCkgbm93IGNoZWNrcyBmb3IgbG9jayBhbGxvY2F0aW9uIGVycm9yCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTIwNjc6IFJld3JpdGUgQ29tcGFyaXNvbnMgc2VjdGlvbiBpbiB0aGUgRXhwcmVzc2lvbnMgY2hhcHRlciBvZiB0aGUKKyAgbGFuZ3VhZ2UgcmVmZXJlbmNlLiBTb21lIG9mIHRoZSBkZXRhaWxzIG9mIGNvbXBhcmluZyBtaXhlZCB0eXBlcyB3ZXJlCisgIGluY29ycmVjdCBvciBhbWJpZ3VvdXMuIE5vdEltcGxlbWVudGVkIGlzIG9ubHkgcmVsZXZhbnQgYXQgYSBsb3dlciBsZXZlbAorICB0aGFuIHRoZSBFeHByZXNzaW9ucyBjaGFwdGVyLiBBZGRlZCBkZXRhaWxzIG9mIGNvbXBhcmluZyByYW5nZSgpIG9iamVjdHMsCisgIGFuZCBkZWZhdWx0IGJlaGF2aW91ciBhbmQgY29uc2lzdGVuY3kgc3VnZ2VzdGlvbnMgZm9yIHVzZXItZGVmaW5lZCBjbGFzc2VzLgorICBQYXRjaCBmcm9tIEFuZHkgTWFpZXIuCisKKy0gSXNzdWUgIzI0OTUyOiBDbGFyaWZ5IHRoZSBkZWZhdWx0IHNpemUgYXJndW1lbnQgb2Ygc3RhY2tfc2l6ZSgpIGluCisgIHRoZSAidGhyZWFkaW5nIiBhbmQgIl90aHJlYWQiIG1vZHVsZXMuIFBhdGNoIGZyb20gTWF0dGlwLgorCistIElzc3VlICMyNDgwODogVXBkYXRlIHRoZSB0eXBlcyBvZiBzb21lIFB5VHlwZU9iamVjdCBmaWVsZHMuIFBhdGNoIGJ5CisgIEpvc2VwaCBXZXN0b24uCisKKy0gSXNzdWUgIzIyODEyOiBGaXggdW5pdHRlc3QgZGlzY292ZXJ5IGV4YW1wbGVzLgorICBQYXRjaCBmcm9tIFBhbSBNY0EnTnVsdHkuCisKKy0gSXNzdWUgIzI0MTI5OiBDbGFyaWZ5IHRoZSByZWZlcmVuY2UgZG9jdW1lbnRhdGlvbiBmb3IgbmFtZSByZXNvbHV0aW9uLgorICBUaGlzIGluY2x1ZGVzIHJlbW92aW5nIHRoZSBhc3N1bXB0aW9uIHRoYXQgcmVhZGVycyB3aWxsIGJlIGZhbWlsaWFyIHdpdGggdGhlCisgIG5hbWUgcmVzb2x1dGlvbiBzY2hlbWUgUHl0aG9uIHVzZWQgcHJpb3IgdG8gdGhlIGludHJvZHVjdGlvbiBvZiBsZXhpY2FsCisgIHNjb3BpbmcgZm9yIGZ1bmN0aW9uIG5hbWVzcGFjZXMuIFBhdGNoIGJ5IEl2YW4gTGV2a2l2c2t5aS4KKworLSBJc3N1ZSAjMjA3Njk6IEltcHJvdmUgcmVsb2FkKCkgZG9jcy4gUGF0Y2ggYnkgRG9yaWFuIFB1bGEuCisKKy0gSXNzdWUgIzIzNTg5OiBSZW1vdmUgZHVwbGljYXRlIHNlbnRlbmNlIGZyb20gdGhlIEZBUS4gIFBhdGNoIGJ5IFlvbmd6aGkgUGFuLgorCistIElzc3VlICMyNDcyOTogQ29ycmVjdCBJTyB0dXRvcmlhbCB0byBtYXRjaCBpbXBsZW1lbnRhdGlvbiByZWdhcmRpbmcKKyAgZW5jb2RpbmcgcGFyYW1ldGVyIHRvIG9wZW4gZnVuY3Rpb24uCisKKy0gSXNzdWUgIzI0MzUxOiBDbGFyaWZ5IHdoYXQgaXMgbWVhbnQgYnkgImlkZW50aWZpZXIiIGluIHRoZSBjb250ZXh0IG9mCisgIHN0cmluZy5UZW1wbGF0ZSBpbnN0YW5jZXMuCisKKy0gSXNzdWUgIzIyMTU1OiBBZGQgRmlsZSBIYW5kbGVycyBzdWJzZWN0aW9uIHdpdGggY3JlYXRlZmlsZWhhbmRsZXIgdG8gdGtpbnRlcgorICBkb2MuICBSZW1vdmUgb2Jzb2xldGUgZXhhbXBsZSBmcm9tIEZBUS4gIFBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzI0MDI5OiBEb2N1bWVudCB0aGUgbmFtZSBiaW5kaW5nIGJlaGF2aW9yIGZvciBzdWJtb2R1bGUgaW1wb3J0cy4KKworLSBJc3N1ZSAjMjQwNzc6IEZpeCB0eXBvIGluIG1hbiBwYWdlIGZvciAtSSBjb21tYW5kIG9wdGlvbjogLXMsIG5vdCAtUy4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzI1NDQwOiBGaXggb3V0cHV0IG9mIHB5dGhvbi1jb25maWcgLS1leHRlbnNpb24tc3VmZml4LgorCistIElzc3VlICMyMzMzMDogaDJweSBub3cgc3VwcG9ydHMgYXJiaXRyYXJ5IGZpbGVuYW1lcyBpbiAjaW5jbHVkZS4KKworLSBJc3N1ZSAjMjQwMzE6IG1ha2UgcGF0Y2hjaGVjayBub3cgc3VwcG9ydHMgZ2l0IGNoZWNrb3V0cywgdG9vLgorCitXaW5kb3dzCistLS0tLS0tCisKKy0gSXNzdWUgIzI0MzA2OiBTZXRzIGNvbXBvbmVudCBJRCBmb3IgbGF1bmNoZXIgdG8gbWF0Y2ggMy41IGFuZCBsYXRlcgorICB0byBhdm9pZCBkb3duZ3JhZGluZy4KKworLSBJc3N1ZSAjMjUwMjI6IFJlbW92ZWQgdmVyeSBvdXRkYXRlZCBQQy9leGFtcGxlX250LyBkaXJlY3RvcnkuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE1LTAyLTIzCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyMjczNTogRml4IG1hbnkgZWRnZSBjYXNlcyAoaW5jbHVkaW5nIGNyYXNoZXMpIGludm9sdmluZyBjdXN0b20gbXJvKCkKKyAgaW1wbGVtZW50YXRpb25zLgorCistIElzc3VlICMyMjg5NjogQXZvaWQgdXNpbmcgUHlPYmplY3RfQXNDaGFyQnVmZmVyKCksIFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcigpCisgIGFuZCBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyKCkuCisKKy0gSXNzdWUgIzIxMjk1OiBSZXZlcnQgc29tZSBjaGFuZ2VzIChpc3N1ZSAjMTY3OTUpIHRvIEFTVCBsaW5lIG51bWJlcnMgYW5kCisgIGNvbHVtbiBvZmZzZXRzIHRoYXQgY29uc3RpdHV0ZWQgYSByZWdyZXNzaW9uLgorCistIElzc3VlICMyMTQwODogVGhlIGRlZmF1bHQgX19uZV9fKCkgbm93IHJldHVybnMgTm90SW1wbGVtZW50ZWQgaWYgX19lcV9fKCkKKyAgcmV0dXJuZWQgTm90SW1wbGVtZW50ZWQuICBPcmlnaW5hbCBwYXRjaCBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyMzMyMTogRml4ZWQgYSBjcmFzaCBpbiBzdHIuZGVjb2RlKCkgd2hlbiBlcnJvciBoYW5kbGVyIHJldHVybmVkCisgIHJlcGxhY21lbnQgc3RyaW5nIGxvbmdlciB0aGFuIG1haWxmb3JtZWQgaW5wdXQgZGF0YS4KKworLSBJc3N1ZSAjMjMwNDg6IEZpeCBqdW1waW5nIG91dCBvZiBhbiBpbmZpbml0ZSB3aGlsZSBsb29wIGluIHRoZSBwZGIuCisKKy0gSXNzdWUgIzIwMzM1OiBieXRlcyBjb25zdHJ1Y3RvciBub3cgcmFpc2VzIFR5cGVFcnJvciB3aGVuIGVuY29kaW5nIG9yIGVycm9ycworICBpcyBzcGVjaWZpZWQgd2l0aCBub24tc3RyaW5nIGFyZ3VtZW50LiAgQmFzZWQgb24gcGF0Y2ggYnkgUmVuYXVkIEJsYW5jaC4KKworLSBJc3N1ZSAjMjIzMzU6IEZpeCBjcmFzaCB3aGVuIHRyeWluZyB0byBlbmxhcmdlIGEgYnl0ZWFycmF5IHRvIDB4N2ZmZmZmZmYKKyAgYnl0ZXMgb24gYSAzMi1iaXQgcGxhdGZvcm0uCisKKy0gSXNzdWUgIzIyNjUzOiBGaXggYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaW4gZGVidWcgbW9kZSB3aGVuIGRvaW5nIGEgcmVlbnRyYW50CisgIGRpY3QgaW5zZXJ0aW9uIGluIGRlYnVnIG1vZGUuCisKIC0gSXNzdWUgIzIyNjQzOiBGaXggaW50ZWdlciBvdmVyZmxvdyBpbiBVbmljb2RlIGNhc2Ugb3BlcmF0aW9ucyAodXBwZXIsIGxvd2VyLAogICB0aXRsZSwgc3dhcGNhc2UsIGNhc2Vmb2xkKS4KIAotLSBJc3N1ZSAjMjI1MTg6IEZpeGVkIGludGVnZXIgb3ZlcmZsb3cgaXNzdWVzIGluICJiYWNrc2xhc2hyZXBsYWNlIiwKKy0gSXNzdWUgIzIyNjA0OiBGaXggYXNzZXJ0aW9uIGVycm9yIGluIGRlYnVnIG1vZGUgd2hlbiBkaXZpZGluZyBhIGNvbXBsZXgKKyAgbnVtYmVyIGJ5IChuYW4rMGopLgorCistIElzc3VlICMyMjQ3MDogRml4ZWQgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZXMgaW4gImJhY2tzbGFzaHJlcGxhY2UiLAogICAieG1sY2hhcnJlZnJlcGxhY2UiLCBhbmQgInN1cnJvZ2F0ZXBhc3MiIGVycm9yIGhhbmRsZXJzLgogCiAtIElzc3VlICMyMjUyMDogRml4IG92ZXJmbG93IGNoZWNraW5nIHdoZW4gZ2VuZXJhdGluZyB0aGUgcmVwciBvZiBhIHVuaWNvZGUKQEAgLTExOCwxMiArOTg4LDQyOSBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMyMzM5OTogcHl2ZW52IGNyZWF0ZXMgcmVsYXRpdmUgc3ltbGlua3Mgd2hlcmUgcG9zc2libGUuCisKKy0gSXNzdWUgIzIzMDk5OiBDbG9zaW5nIGlvLkJ5dGVzSU8gd2l0aCBleHBvcnRlZCBidWZmZXIgaXMgcmVqZWN0ZWQgbm93IHRvCisgIHByZXZlbnQgY29ycnVwdGluZyBleHBvcnRlZCBidWZmZXIuCisKKy0gSXNzdWUgIzIzMzYzOiBGaXggcG9zc2libGUgb3ZlcmZsb3cgaW4gaXRlcnRvb2xzLnBlcm11dGF0aW9ucy4KKworLSBJc3N1ZSAjMjMzNjQ6IEZpeCBwb3NzaWJsZSBvdmVyZmxvdyBpbiBpdGVydG9vbHMucHJvZHVjdC4KKworLSBJc3N1ZSAjMjMzNjY6IEZpeGVkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgaW4gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucy4KKworLSBJc3N1ZSAjMjMzNjk6IEZpeGVkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgaW4KKyAgX2pzb24uZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkuCisKKy0gSXNzdWUgIzIzMzUzOiBGaXggdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBvZiBnZW5lcmF0b3JzIGluCisgIFB5RXZhbF9FdmFsRnJhbWVFeCgpLiBBdCBlbnRyeSwgc2F2ZSBvciBzd2FwIHRoZSBleGNlcHRpb24gc3RhdGUgZXZlbiBpZgorICBQeUV2YWxfRXZhbEZyYW1lRXgoKSBpcyBjYWxsZWQgd2l0aCB0aHJvd2ZsYWc9MC4gQXQgZXhpdCwgdGhlIGV4Y2VwdGlvbiBzdGF0ZQorICBpcyBub3cgYWx3YXlzIHJlc3RvcmVkIG9yIHN3YXBwZWQsIG5vdCBvbmx5IGlmIHdoeSBpcyBXSFlfWUlFTEQgb3IKKyAgV0hZX1JFVFVSTi4gUGF0Y2ggY28td3JpdHRlbiB3aXRoIEFudG9pbmUgUGl0cm91LgorCistIElzc3VlICMxODUxODogdGltZWl0IG5vdyByZWplY3RzIHN0YXRlbWVudHMgd2hpY2ggY2FuJ3QgYmUgY29tcGlsZWQgb3V0c2lkZQorICBhIGZ1bmN0aW9uIG9yIGEgbG9vcCAoZS5nLiAicmV0dXJuIiBvciAiYnJlYWsiKS4KKworLSBJc3N1ZSAjMjMwOTQ6IEZpeGVkIHJlYWRsaW5lIHdpdGggZnJhbWVzIGluIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuCisKKy0gSXNzdWUgIzIzMjY4OiBGaXhlZCBidWdzIGluIHRoZSBjb21wYXJpc29uIG9mIGlwYWRkcmVzcyBjbGFzc2VzLgorCistIElzc3VlICMyMTQwODogUmVtb3ZlZCBpbmNvcnJlY3QgaW1wbGVtZW50YXRpb25zIG9mIF9fbmVfXygpIHdoaWNoIGRpZG4ndAorICByZXR1cm5lZCBOb3RJbXBsZW1lbnRlZCBpZiBfX2VxX18oKSByZXR1cm5lZCBOb3RJbXBsZW1lbnRlZC4gIFRoZSBkZWZhdWx0CisgIF9fbmVfXygpIG5vdyB3b3JrcyBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE5OTk2OiA6Y2xhc3M6YGVtYWlsLmZlZWRwYXJzZXIuRmVlZFBhcnNlcmAgbm93IGhhbmRsZXMgKG1hbGZvcm1lZCkKKyAgaGVhZGVycyB3aXRoIG5vIGtleSByYXRoZXIgdGhhbiBhc3N1bWluZyB0aGUgYm9keSBoYXMgc3RhcnRlZC4KKworLSBJc3N1ZSAjMjMyNDg6IFVwZGF0ZSBzc2wgZXJyb3IgY29kZXMgZnJvbSBsYXRlc3QgT3BlblNTTCBnaXQgbWFzdGVyLgorCistIElzc3VlICMyMzA5ODogNjQtYml0IGRldl90IGlzIG5vdyBzdXBwb3J0ZWQgaW4gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMjMyNTA6IEluIHRoZSBodHRwLmNvb2tpZXMgbW9kdWxlLCBjYXBpdGFsaXplICJIdHRwT25seSIgYW5kICJTZWN1cmUiCisgIGFzIHRoZXkgYXJlIHdyaXR0ZW4gaW4gdGhlIHN0YW5kYXJkLgorCistIElzc3VlICMyMzA2MzogSW4gdGhlIGRpc3V0aWxzJyBjaGVjayBjb21tYW5kLCBmaXggcGFyc2luZyBvZiByZVNUIHdpdGggY29kZSBvcgorICBjb2RlLWJsb2NrIGRpcmVjdGl2ZXMuCisKKy0gSXNzdWUgIzIzMjA5LCAjMjMyMjU6IHNlbGVjdG9ycy5CYXNlU2VsZWN0b3IuY2xvc2UoKSBub3cgY2xlYXJzIGl0cyBpbnRlcm5hbAorICByZWZlcmVuY2UgdG8gdGhlIHNlbGVjdG9yIG1hcHBpbmcgdG8gYnJlYWsgYSByZWZlcmVuY2UgY3ljbGUuIEluaXRpYWwgcGF0Y2gKKyAgd3JpdHRlbiBieSBNYXJ0aW4gUmljaGFyZC4KKworLSBJc3N1ZSAjMjEzNTY6IE1ha2Ugc3NsLlJBTkRfZWdkKCkgb3B0aW9uYWwgdG8gc3VwcG9ydCBMaWJyZVNTTC4gVGhlCisgIGF2YWlsYWJpbGl0eSBvZiB0aGUgZnVuY3Rpb24gaXMgY2hlY2tlZCBkdXJpbmcgdGhlIGNvbXBpbGF0aW9uLiBQYXRjaCB3cml0dGVuCisgIGJ5IEJlcm5hcmQgU3BpbC4KKworLSBJc3N1ZSAjMjA4OTYsICMyMjkzNTogVGhlIDpmdW5jOmBzc2wuZ2V0X3NlcnZlcl9jZXJ0aWZpY2F0ZWAgZnVuY3Rpb24gbm93CisgIHVzZXMgdGhlIDpkYXRhOmB+c3NsLlBST1RPQ09MX1NTTHYyM2AgcHJvdG9jb2wgYnkgZGVmYXVsdCwgbm90CisgIDpkYXRhOmB+c3NsLlBST1RPQ09MX1NTTHYzYCwgZm9yIG1heGltdW0gY29tcGF0aWJpbGl0eSBhbmQgc3VwcG9ydCBwbGF0Zm9ybXMKKyAgd2hlcmUgOmRhdGE6YH5zc2wuUFJPVE9DT0xfU1NMdjNgIHN1cHBvcnQgaXMgZGlzYWJsZWQuCisKKy0gSXNzdWUgIzIzMTExOiBJbiB0aGUgZnRwbGliLCBtYWtlIHNzbC5QUk9UT0NPTF9TU0x2MjMgdGhlIGRlZmF1bHQgcHJvdG9jb2wKKyAgdmVyc2lvbi4KKworLSBJc3N1ZSAjMjMxMzI6IE1pdGlnYXRlIHJlZ3Jlc3Npb24gaW4gc3BlZWQgYW5kIGNsYXJpdHkgaW4gZnVuY3Rvb2xzLnRvdGFsX29yZGVyaW5nLgorCistIElzc3VlICMyMjU4NTogT24gT3BlbkJTRCA1LjYgYW5kIG5ld2VyLCBvcy51cmFuZG9tKCkgbm93IGNhbGxzIGdldGVudHJvcHkoKSwKKyAgaW5zdGVhZCBvZiByZWFkaW5nIC9kZXYvdXJhbmRvbSwgdG8gZ2V0IHBzZXVkby1yYW5kb20gYnl0ZXMuCisKKy0gSXNzdWUgIzIzMTEyOiBGaXggU2ltcGxlSFRUUFNlcnZlciB0byBjb3JyZWN0bHkgY2FycnkgdGhlIHF1ZXJ5IHN0cmluZyBhbmQKKyAgZnJhZ21lbnQgd2hlbiBpdCByZWRpcmVjdHMgdG8gYWRkIGEgdHJhaWxpbmcgc2xhc2guCisKKy0gSXNzdWUgIzIzMDkzOiBJbiB0aGUgaW8sIG1vZHVsZSBhbGxvdyBtb3JlIG9wZXJhdGlvbnMgdG8gd29yayBvbiBkZXRhY2hlZAorICBzdHJlYW1zLgorCistIElzc3VlICMxOTEwNDogcHByaW50IG5vdyBwcm9kdWNlcyBldmFsdWFibGUgb3V0cHV0IGZvciB3cmFwcGVkIHN0cmluZ3MuCisKKy0gSXNzdWUgIzIzMDcxOiBBZGRlZCBtaXNzaW5nIG5hbWVzIHRvIGNvZGVjcy5fX2FsbF9fLiAgUGF0Y2ggYnkgTWFydGluIFBhbnRlci4KKworLSBJc3N1ZSAjMTU1MTM6IEFkZGVkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgcGlja2xlIGNsYXNzZXMuCisKKy0gSXNzdWUgIzE5ODU4OiBwaWNrbGV0b29scy5vcHRpbWl6ZSgpIG5vdyBhd2FyZSBvZiB0aGUgTUVNT0laRSBvcGNvZGUsIGNhbgorICBwcm9kdWNlIG1vcmUgY29tcGFjdCByZXN1bHQgYW5kIG5vIGxvbmdlciBwcm9kdWNlcyBpbnZhbGlkIG91dHB1dCBpZiBpbnB1dAorICBkYXRhIGNvbnRhaW5zIE1FTU9JWkUgb3Bjb2RlcyB0b2dldGhlciB3aXRoIFBVVCBvciBCSU5QVVQgb3Bjb2Rlcy4KKworLSBJc3N1ZSAjMjIwOTU6IEZpeGVkIEhUVFBDb25uZWN0aW9uLnNldF90dW5uZWwgd2l0aCBkZWZhdWx0IHBvcnQuICBUaGUgcG9ydAorICB2YWx1ZSBpbiB0aGUgaG9zdCBoZWFkZXIgd2FzIHNldCB0byAiTm9uZSIuICBQYXRjaCBieSBEZW1pYW4gQnJlY2h0LgorCistIElzc3VlICMyMzAxNjogQSB3YXJuaW5nIG5vIGxvbmdlciBwcm9kdWNlcyBhbiBBdHRyaWJ1dGVFcnJvciB3aGVuIHRoZSBwcm9ncmFtCisgIGlzIHJ1biB3aXRoIHB5dGhvbncuZXhlLgorCistIElzc3VlICMyMTc3NTogc2h1dGlsLmNvcHl0cmVlKCk6IGZpeCBjcmFzaCB3aGVuIGNvcHlpbmcgdG8gVkZBVC4gQW4gZXhjZXB0aW9uCisgIGhhbmRsZXIgYXNzdW1lZCB0aGF0IHRoYXQgT1NFcnJvciBvYmplY3RzIGFsd2F5cyBoYXZlIGEgJ3dpbmVycm9yJyBhdHRyaWJ1dGUuCisgIFRoYXQgaXMgbm90IHRoZSBjYXNlLCBzbyB0aGUgZXhjZXB0aW9uIGhhbmRsZXIgaXRzZWxmIHJhaXNlZCBBdHRyaWJ1dGVFcnJvcgorICB3aGVuIHJ1biBvbiBMaW51eCAoYW5kLCBwcmVzdW1hYmx5LCBhbnkgb3RoZXIgbm9uLVdpbmRvd3MgT1MpLgorICBQYXRjaCBieSBHcmVnIFdhcmQuCisKKy0gSXNzdWUgIzEyMTgyMzQ6IEZpeCBpbnNwZWN0LmdldHNvdXJjZSgpIHRvIGxvYWQgdXBkYXRlZCBzb3VyY2Ugb2YKKyAgcmVsb2FkZWQgbW9kdWxlLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzIyOTU5OiBJbiB0aGUgY29uc3RydWN0b3Igb2YgaHR0cC5jbGllbnQuSFRUUFNDb25uZWN0aW9uLCBwcmVmZXIgdGhlCisgIGNvbnRleHQncyBjaGVja19ob3N0bmFtZSBhdHRyaWJ1dGUgb3ZlciB0aGUgKmNoZWNrX2hvc3RuYW1lKiBwYXJhbWV0ZXIuCisKIC0gSXNzdWUgIzE2MDQzOiBBZGQgYSBkZWZhdWx0IGxpbWl0IGZvciB0aGUgYW1vdW50IG9mIGRhdGEgeG1scnBjbGliLmd6aXBfZGVjb2RlCiAgIHdpbGwgcmV0dXJuLiBUaGlzIHJlc29sdmVzIENWRS0yMDEzLTE3NTMuCiAKKy0gSXNzdWUgIzIyOTY2OiBGaXggX19weWNhY2hlX18gcHljIGZpbGUgbmFtZSBjbG9iYmVyIHdoZW4gcHljX2NvbXBpbGUgaXMKKyAgYXNrZWQgdG8gY29tcGlsZSBhIHNvdXJjZSBmaWxlIGNvbnRhaW5pbmcgbXVsdGlwbGUgZG90cyBpbiB0aGUgc291cmNlIGZpbGUKKyAgbmFtZS4KKworLSBJc3N1ZSAjMjE5NzE6IFVwZGF0ZSB0dXJ0bGVkZW1vIGRvYyBhbmQgYWRkIG1vZHVsZSB0byB0aGUgaW5kZXguCisKKy0gSXNzdWUgIzIxMDMyLiBGaXhlZCBzb2NrZXQgbGVhayBpZiBIVFRQQ29ubmVjdGlvbi5nZXRyZXNwb25zZSgpIGZhaWxzLgorICBPcmlnaW5hbCBwYXRjaCBieSBNYXJ0aW4gUGFudGVyLgorCistIElzc3VlICMyMjk2MDogQWRkIGEgY29udGV4dCBhcmd1bWVudCB0byB4bWxycGNsaWIuU2VydmVyUHJveHkgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzIyOTE1OiBTQVggcGFyc2VyIG5vdyBzdXBwb3J0cyBmaWxlcyBvcGVuZWQgd2l0aCBmaWxlIGRlc2NyaXB0b3Igb3IKKyAgYnl0ZXMgcGF0aC4KKworLSBJc3N1ZSAjMjI2MDk6IENvbnN0cnVjdG9ycyBhbmQgdXBkYXRlIG1ldGhvZHMgb2YgbWFwcGluZyBjbGFzc2VzIGluIHRoZQorICBjb2xsZWN0aW9ucyBtb2R1bGUgbm93IGFjY2VwdCB0aGUgc2VsZiBrZXl3b3JkIGFyZ3VtZW50LgorCistIElzc3VlICMyMjc4ODogQWRkICpjb250ZXh0KiBwYXJhbWV0ZXIgdG8gbG9nZ2luZy5oYW5kbGVycy5IVFRQSGFuZGxlci4KKworLSBJc3N1ZSAjMjI5MjE6IEFsbG93IFNTTENvbnRleHQgdG8gdGFrZSB0aGUgKmhvc3RuYW1lKiBwYXJhbWV0ZXIgZXZlbiBpZgorICBPcGVuU1NMIGRvZXNuJ3Qgc3VwcG9ydCBTTkkuCisKKy0gSXNzdWUgIzIyODk0OiBUZXN0Q2FzZS5zdWJUZXN0KCkgd291bGQgY2F1c2UgdGhlIHRlc3Qgc3VpdGUgdG8gYmUgc3RvcHBlZAorICB3aGVuIGluIGZhaWxmYXN0IG1vZGUsIGV2ZW4gaW4gdGhlIGFic2VuY2Ugb2YgZmFpbHVyZXMuCisKKy0gSXNzdWUgIzIyNjM4OiBTU0x2MyBpcyBub3cgZGlzYWJsZWQgdGhyb3VnaG91dCB0aGUgc3RhbmRhcmQgbGlicmFyeS4KKyAgSXQgY2FuIHN0aWxsIGJlIGVuYWJsZWQgYnkgaW5zdGFudGlhdGluZyBhIFNTTENvbnRleHQgbWFudWFsbHkuCisKKy0gSXNzdWUgIzIyMzcwOiBXaW5kb3dzIGRldGVjdGlvbiBpbiBwYXRobGliIGlzIG5vdyBtb3JlIHJvYnVzdC4KKworLSBJc3N1ZSAjMjI4NDE6IFJlamVjdCBjb3JvdXRpbmVzIGluIGFzeW5jaW8gYWRkX3NpZ25hbF9oYW5kbGVyKCkuCisgIFBhdGNoIGJ5IEx1ZG92aWMuR2FzYy4KKworLSBJc3N1ZSAjMjI4NDk6IEZpeCBwb3NzaWJsZSBkb3VibGUgZnJlZSBpbiB0aGUgaW8uVGV4dElPV3JhcHBlciBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTI3Mjg6IERpZmZlcmVudCBVbmljb2RlIGNoYXJhY3RlcnMgaGF2aW5nIHRoZSBzYW1lIHVwcGVyY2FzZSBidXQKKyAgZGlmZmVyZW50IGxvd2VyY2FzZSBhcmUgbm93IG1hdGNoZWQgaW4gY2FzZS1pbnNlbnNpdGl2ZSByZWd1bGFyIGV4cHJlc3Npb25zLgorCistIElzc3VlICMyMjgyMTogRml4ZWQgZmNudGwoKSB3aXRoIGludGVnZXIgYXJndW1lbnQgb24gNjQtYml0IGJpZy1lbmRpYW4KKyAgcGxhdGZvcm1zLgorCistIElzc3VlICMyMjQwNjogRml4ZWQgdGhlIHV1X2NvZGVjIGNvZGVjIGluY29ycmVjdGx5IHBvcnRlZCB0byAzLnguCisgIEJhc2VkIG9uIHBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzE3MjkzOiB1dWlkLmdldG5vZGUoKSBub3cgZGV0ZXJtaW5lcyBNQUMgYWRkcmVzcyBvbiBBSVggdXNpbmcgbmV0c3RhdC4KKyAgQmFzZWQgb24gcGF0Y2ggYnkgQWl2YXJzIEthbHbEgW5zLgorCistIElzc3VlICMyMjc2OTogRml4ZWQgdHRrLlRyZWV2aWV3LnRhZ19oYXMoKSB3aGVuIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMjI0MTc6IFZlcmlmeSBjZXJ0aWZpY2F0ZXMgYnkgZGVmYXVsdCBpbiBodHRwbGliIChQRVAgNDc2KS4KKworLSBJc3N1ZSAjMjI3NzU6IEZpeGVkIHVucGlja2xpbmcgb2YgaHR0cC5jb29raWVzLlNpbXBsZUNvb2tpZSB3aXRoIHByb3RvY29sIDIKKyAgYW5kIGFib3ZlLiAgUGF0Y2ggYnkgVGltIEdyYWhhbS4KKworLSBJc3N1ZSAjMjIzNjY6IHVybGxpYi5yZXF1ZXN0LnVybG9wZW4gd2lsbCBhY2NlcHQgYSBjb250ZXh0IG9iamVjdAorICAoU1NMQ29udGV4dCkgYXMgYW4gYXJndW1lbnQgd2hpY2ggd2lsbCB0aGVuIHVzZWQgYmUgZm9yIEhUVFBTIGNvbm5lY3Rpb24uCisgIFBhdGNoIGJ5IEFsZXggR2F5bm9yLgorCistIElzc3VlICMyMjc3NjogQnJvdWdodCBleGNsdWRlZCBjb2RlIGludG8gdGhlIHNjb3BlIG9mIGEgdHJ5IGJsb2NrIGluCisgIFN5c0xvZ0hhbmRsZXIuZW1pdCgpLgorCistIElzc3VlICMyMjY2NTogQWRkIG1pc3NpbmcgZ2V0X3Rlcm1pbmFsX3NpemUgYW5kIFNhbWVGaWxlRXJyb3IgdG8KKyAgc2h1dGlsLl9fYWxsX18uCisKKy0gSXNzdWUgIzE3MzgxOiBGaXhlZCBoYW5kbGluZyBvZiBjYXNlLWluc2Vuc2l0aXZlIHJhbmdlcyBpbiByZWd1bGFyCisgIGV4cHJlc3Npb25zLgorCistIElzc3VlICMyMjQxMDogTW9kdWxlIGxldmVsIGZ1bmN0aW9ucyBpbiB0aGUgcmUgbW9kdWxlIG5vdyBjYWNoZSBjb21waWxlZAorICBsb2NhbGUtZGVwZW5kZW50IHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGFraW5nIGludG8gYWNjb3VudCB0aGUgbG9jYWxlLgorCistIElzc3VlICMyMjc1OTogUXVlcnkgbWV0aG9kcyBvbiBwYXRobGliLlBhdGgoKSAoZXhpc3RzKCksIGlzX2RpcigpLCBldGMuKQorICBub3cgcmV0dXJuIEZhbHNlIHdoZW4gdGhlIHVuZGVybHlpbmcgc3RhdCBjYWxsIHJhaXNlcyBOb3RBRGlyZWN0b3J5RXJyb3IuCisKKy0gSXNzdWUgIzg4NzY6IGRpc3R1dGlscyBub3cgZmFsbHMgYmFjayB0byBjb3B5aW5nIGZpbGVzIHdoZW4gaGFyZCBsaW5raW5nCisgIGRvZXNuJ3Qgd29yay4gIFRoaXMgYWxsb3dzIHVzZSB3aXRoIHNwZWNpYWwgZmlsZXN5c3RlbXMgc3VjaCBhcyBWaXJ0dWFsQm94CisgIHNoYXJlZCBmb2xkZXJzLgorCistIElzc3VlICMxODg1MzogRml4ZWQgUmVzb3VyY2VXYXJuaW5nIGluIHNobGV4Ll9fbmFpbl9fLgorCistIElzc3VlICM5MzUxOiBEZWZhdWx0cyBzZXQgd2l0aCBzZXRfZGVmYXVsdHMgb24gYW4gYXJncGFyc2Ugc3VicGFyc2VyCisgIGFyZSBubyBsb25nZXIgaWdub3JlZCB3aGVuIGFsc28gc2V0IG9uIHRoZSBwYXJlbnQgcGFyc2VyLgorCistIElzc3VlICMyMTk5MTogTWFrZSBlbWFpbC5oZWFkZXJyZWdpc3RyeSdzIGhlYWRlciAncGFyYW1zJyBhdHRyaWJ1dGVzCisgIGJlIHJlYWQtb25seSAoTWFwcGluZ1Byb3h5VHlwZSkuICBQcmV2aW91c2x5IHRoZSBkaWN0aW9uYXJ5IHdhcyBtb2RpZmlhYmxlCisgIGJ1dCBhIG5ldyBvbmUgd2FzIGNyZWF0ZWQgb24gZWFjaCBhY2Nlc3Mgb2YgdGhlIGF0dHJpYnV0ZS4KKworLSBJc3N1ZSAjMjI2NDE6IEluIGFzeW5jaW8sIHRoZSBkZWZhdWx0IFNTTCBjb250ZXh0IGZvciBjbGllbnQgY29ubmVjdGlvbnMKKyAgaXMgbm93IGNyZWF0ZWQgdXNpbmcgc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSwgZm9yIHN0cm9uZ2VyIHNlY3VyaXR5LgorCistIElzc3VlICMyMjQzNTogRml4IGEgZmlsZSBkZXNjcmlwdG9yIGxlYWsgd2hlbiBTb2NrZXRTZXJ2ZXIgYmluZCBmYWlscy4KKworLSBJc3N1ZSAjMTMwOTY6IEZpeGVkIHNlZ2ZhdWx0IGluIENUeXBlcyBQT0lOVEVSIGhhbmRsaW5nIG9mIGxhcmdlCisgIHZhbHVlcy4KKworLSBJc3N1ZSAjMTE2OTQ6IFJhaXNlIENvbnZlcnNpb25FcnJvciBpbiB4ZHJsaWIgYXMgZG9jdW1lbnRlZC4gIFBhdGNoCisgIGJ5IEZpbGlwIEdydXN6Y3p5xYRza2kgYW5kIENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMjI0NjI6IEZpeCBweWV4cGF0J3MgY3JlYXRpb24gb2YgYSBkdW1teSBmcmFtZSB0byBtYWtlIGl0CisgIGFwcGVhciBpbiBleGNlcHRpb24gdHJhY2ViYWNrcy4KKworLSBJc3N1ZSAjMjExNzM6IEZpeCBsZW4oKSBvbiBhIFdlYWtLZXlEaWN0aW9uYXJ5IHdoZW4gLmNsZWFyKCkgd2FzIGNhbGxlZAorICB3aXRoIGFuIGl0ZXJhdG9yIGFsaXZlLgorCistIElzc3VlICMxMTg2NjogRWxpbWluYXRlZCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgY29tcHV0YXRpb24gb2YgbmFtZXMKKyAgZm9yIG5ldyB0aHJlYWRzLgorCistIElzc3VlICMyMTkwNTogQXZvaWQgUnVudGltZUVycm9yIGluIHBpY2tsZS53aGljaG1vZHVsZSgpIHdoZW4gc3lzLm1vZHVsZXMKKyAgaXMgbXV0YXRlZCB3aGlsZSBpdGVyYXRpbmcuICBQYXRjaCBieSBPbGl2aWVyIEdyaXNlbC4KKworLSBJc3N1ZSAjMjIyMTk6IFRoZSB6aXBmaWxlIG1vZHVsZSBDTEkgbm93IGFkZHMgZW50cmllcyBmb3IgZGlyZWN0b3JpZXMKKyAgKGluY2x1ZGluZyBlbXB0eSBkaXJlY3RvcmllcykgaW4gWklQIGZpbGUuCisKKy0gSXNzdWUgIzIyNDQ5OiBJbiB0aGUgc3NsLlNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzLCBjb25zdWx0IHRoZQorICBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcyBTU0xfQ0VSVF9ESVIgYW5kIFNTTF9DRVJUX0ZJTEUgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMjAwNzY6IEFkZGVkIG5vbiBkZXJpdmVkIFVURi04IGFsaWFzZXMgdG8gbG9jYWxlIGFsaWFzZXMgdGFibGUuCisKKy0gSXNzdWUgIzIwMDc5OiBBZGRlZCBsb2NhbGVzIHN1cHBvcnRlZCBpbiBnbGliYyAyLjE4IHRvIGxvY2FsZSBhbGlhcyB0YWJsZS4KKworLSBJc3N1ZSAjMjIzOTY6IE9uIDMyLWJpdCBBSVggcGxhdGZvcm0sIGRvbid0IGV4cG9zZSBvcy5wb3NpeF9mYWR2aXNlKCkgbm9yCisgIG9zLnBvc2l4X2ZhbGxvY2F0ZSgpIGJlY2F1c2UgdGhlaXIgcHJvdG90eXBlcyBpbiBzeXN0ZW0gaGVhZGVycyBhcmUgd3JvbmcuCisKIC0gSXNzdWUgIzIyNTE3OiBXaGVuIGEgaW8uQnVmZmVyZWRSV1BhaXIgb2JqZWN0IGlzIGRlYWxsb2NhdGVkLCBjbGVhciBpdHMKICAgd2Vha3JlZnMuCiAKKy0gSXNzdWUgIzIyNDQ4OiBJbXByb3ZlIGNhbmNlbGVkIHRpbWVyIGhhbmRsZXMgY2xlYW51cCB0byBwcmV2ZW50CisgIHVuYm91bmQgbWVtb3J5IHVzYWdlLiBQYXRjaCBieSBKb3NodWEgTW9vcmUtT2xpdmEuCisKKy0gSXNzdWUgIzIzMDA5OiBNYWtlIHN1cmUgc2VsZWN0b3JzLkVwb2xsU2VsZWNydG9yLnNlbGVjdCgpIHdvcmtzIHdoZW4gbm8KKyAgRkQgaXMgcmVnaXN0ZXJlZC4KKworSURMRQorLS0tLQorCistIElzc3VlICMyMDU3NzogQ29uZmlndXJhdGlvbiBvZiB0aGUgbWF4IGxpbmUgbGVuZ3RoIGZvciB0aGUgRm9ybWF0UGFyYWdyYXBoCisgIGV4dGVuc2lvbiBoYXMgYmVlbiBtb3ZlZCBmcm9tIHRoZSBHZW5lcmFsIHRhYiBvZiB0aGUgSWRsZSBwcmVmZXJlbmNlcyBkaWFsb2cKKyAgdG8gdGhlIEZvcm1hdFBhcmFncmFwaCB0YWIgb2YgdGhlIENvbmZpZyBFeHRlbnNpb25zIGRpYWxvZy4KKyAgUGF0Y2ggYnkgVGFsIEVpbmF0LgorCistIElzc3VlICMxNjg5MzogVXBkYXRlIElkbGUgZG9jIGNoYXB0ZXIgdG8gbWF0Y2ggY3VycmVudCBJZGxlIGFuZCBhZGQgbmV3CisgIGluZm9ybWF0aW9uLgorCistIElzc3VlICMzMDY4OiBBZGQgSWRsZSBleHRlbnNpb24gY29uZmlndXJhdGlvbiBkaWFsb2cgdG8gT3B0aW9ucyBtZW51LgorICBDaGFuZ2VzIGFyZSB3cml0dGVuIHRvIEhPTUUvLmlkbGVyYy9jb25maWctZXh0ZW5zaW9ucy5jZmcuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IFRhbCBFaW5hdC4KKworLSBJc3N1ZSAjMTYyMzM6IEEgbW9kdWxlIGJyb3dzZXIgKEZpbGUgOiBDbGFzcyBCcm93c2VyLCBBbHQrQykgcmVxdWlyZXMgYW4KKyAgZWRpdG9yIHdpbmRvdyB3aXRoIGEgZmlsZW5hbWUuICBXaGVuIENsYXNzIEJyb3dzZXIgaXMgcmVxdWVzdGVkIG90aGVyd2lzZSwKKyAgZnJvbSBhIHNoZWxsLCBvdXRwdXQgd2luZG93LCBvciAnVW50aXRsZWQnIGVkaXRvciwgSWRsZSBubyBsb25nZXIgZGlzcGxheXMKKyAgYW4gZXJyb3IgYm94LiAgSXQgbm93IHBvcHMgdXAgYW4gT3BlbiBNb2R1bGUgYm94IChBbHQrTSkuIElmIGEgdmFsaWQgbmFtZQorICBpcyBlbnRlcmVkIGFuZCBhIG1vZHVsZSBpcyBvcGVuZWQsIGEgY29ycmVzcG9uZGluZyBicm93c2VyIGlzIGFsc28gb3BlbmVkLgorCistIElzc3VlICM0ODMyOiBTYXZlIEFzIHRvIHR5cGUgUHl0aG9uIGZpbGVzIGF1dG9tYXRpY2FsbHkgYWRkcyAucHkgdG8gdGhlCisgIG5hbWUgeW91IGVudGVyIChldmVuIGlmIHlvdXIgc3lzdGVtIGRvZXMgbm90IGRpc3BsYXkgaXQpLiAgU29tZSBzeXN0ZW1zCisgIGF1dG9tYXRpY2FsbHkgYWRkIC50eHQgd2hlbiB0eXBlIGlzIFRleHQgZmlsZXMuCisKKy0gSXNzdWUgIzIxOTg2OiBDb2RlIG9iamVjdHMgYXJlIG5vdCBub3JtYWxseSBwaWNrbGVkIGJ5IHRoZSBwaWNrbGUgbW9kdWxlLgorICBUbyBtYXRjaCB0aGlzLCB0aGV5IGFyZSBubyBsb25nZXIgcGlja2xlZCB3aGVuIHJ1bm5pbmcgdW5kZXIgSWRsZS4KKworLSBJc3N1ZSAjMjMxODA6IFJlbmFtZSBJRExFICJXaW5kb3dzIiBtZW51IGl0ZW0gdG8gIldpbmRvdyIuCisgIFBhdGNoIGJ5IEFsIFN3ZWlnYXJ0LgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMjMzOTI6IEFkZGVkIHRlc3RzIGZvciBtYXJzaGFsIEMgQVBJIHRoYXQgd29ya3Mgd2l0aCBGSUxFKi4KKworLSBJc3N1ZSAjMTg5ODI6IEFkZCB0ZXN0cyBmb3IgQ0xJIG9mIHRoZSBjYWxlbmRhciBtb2R1bGUuCisKKy0gSXNzdWUgIzE5NTQ4OiBBZGRlZCBzb21lIGFkZGl0aW9uYWwgY2hlY2tzIHRvIHRlc3RfY29kZWNzIHRvIGVuc3VyZSB0aGF0CisgIHN0YXRlbWVudHMgaW4gdGhlIHVwZGF0ZWQgZG9jdW1lbnRhdGlvbiByZW1haW4gYWNjdXJhdGUuIFBhdGNoIGJ5IE1hcnRpbgorICBQYW50ZXIuCisKKy0gSXNzdWUgIzIyODM4OiBBbGwgdGVzdF9yZSB0ZXN0cyBub3cgd29yayB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgorCistIElzc3VlICMyMjE3MzogVXBkYXRlIGxpYjJ0bzMgdGVzdHMgdG8gdXNlIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgorCistIElzc3VlICMxNjAwMDogQ29udmVydCB0ZXN0X2N1cnNlcyB0byB1c2UgdW5pdHRlc3QuCisKKy0gSXNzdWUgIzIxNDU2OiBTa2lwIHR3byB0ZXN0cyBpbiB0ZXN0X3VybGxpYjJuZXQucHkgaWYgX3NzbCBtb2R1bGUgbm90CisgIHByZXNlbnQuIFBhdGNoIGJ5IFJlbWkgUG9pbnRlbC4KKworLSBJc3N1ZSAjMjI3NzA6IFByZXZlbnQgc29tZSBUayBzZWdmYXVsdHMgb24gT1MgWCB3aGVuIHJ1bm5pbmcgZ3VpIHRlc3RzLgorCistIElzc3VlICMyMzIxMTogV29ya2Fyb3VuZCB0ZXN0X2xvZ2dpbmcgZmFpbHVyZSBvbiBzb21lIE9TIFggMTAuNiBzeXN0ZW1zLgorCistIElzc3VlICMyMzM0NTogUHJldmVudCB0ZXN0X3NzbCBmYWlsdXJlcyB3aXRoIGxhcmdlIE9wZW5TU0wgcGF0Y2ggbGV2ZWwKKyAgdmFsdWVzIChsaWtlIDAuOS44emMpLgorCistIElzc3VlICMyMjI4OTogUHJldmVudCB0ZXN0X3VybGxpYjJuZXQgZmFpbHVyZXMgZHVlIHRvIGZ0cCBjb25uZWN0aW9uIHRpbWVvdXQuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNTUwNjogVXNlIHN0YW5kYXJkIFBLR19QUk9HX1BLR19DT05GSUcgYXV0b2NvbmYgbWFjcm8gaW4gdGhlIGNvbmZpZ3VyZQorICBzY3JpcHQuCisKKy0gSXNzdWUgIzIyOTM1OiBBbGxvdyB0aGUgc3NsIG1vZHVsZSB0byBiZSBjb21waWxlZCBpZiBvcGVuc3NsIGRvZXNuJ3Qgc3VwcG9ydAorICBTU0wgMy4KKworLSBJc3N1ZSAjMTY1Mzc6IENoZWNrIHdoZXRoZXIgc2VsZi5leHRlbnNpb25zIGlzIGVtcHR5IGluIHNldHVwLnB5LiBQYXRjaCBieQorICBKb25hdGhhbiBIb3NtZXIuCisKKy0gSXNzdWUgIzE4MDk2OiBGaXggbGlicmFyeSBvcmRlciByZXR1cm5lZCBieSBweXRob24tY29uZmlnLgorCistIElzc3VlICMxNzIxOTogQWRkIGxpYnJhcnkgYnVpbGQgZGlyIGZvciBQeXRob24gZXh0ZW5zaW9uIGNyb3NzLWJ1aWxkcy4KKworLSBJc3N1ZSAjMTcxMjg6IFVzZSBwcml2YXRlIHZlcnNpb24gb2YgT3BlblNTTCBmb3IgMy40LjMgT1MgWCAxMC41KyBpbnN0YWxsZXIuCisKK0MgQVBJCistLS0tLQorCistIElzc3VlICMyMjA3OTogUHlUeXBlX1JlYWR5KCkgbm93IGNoZWNrcyB0aGF0IHN0YXRpY2FsbHkgYWxsb2NhdGVkIHR5cGUgaGFzCisgIG5vIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBiYXNlcy4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxOTU0ODogVXBkYXRlIHRoZSBjb2RlY3MgbW9kdWxlIGRvY3VtZW50YXRpb24gdG8gYmV0dGVyIGNvdmVyIHRoZQorICBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRleHQgZW5jb2RpbmdzIGFuZCBvdGhlciBjb2RlY3MsIHRvZ2V0aGVyIHdpdGggb3RoZXIKKyAgY2xhcmlmaWNhdGlvbnMuIFBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzIyOTE0OiBVcGRhdGUgdGhlIFB5dGhvbiAyLzMgcG9ydGluZyBIT1dUTyB0byBkZXNjcmliZSBhIG1vcmUgYXV0b21hdGVkCisgIGFwcHJvYWNoLgorCistIElzc3VlICMyMTUxNDogVGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGpzb24gbW9kdWxlIG5vdyByZWZlcnMgdG8gbmV3IEpTT04gUkZDCisgIDcxNTkgaW5zdGVhZCBvZiBvYnNvbGV0ZWQgUkZDIDQ2MjcuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMyMjMxNDogcHlkb2Mgbm93IHdvcmtzIHdoZW4gdGhlIExJTkVTIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldC4KKworV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMxNzg5NjogVGhlIFdpbmRvd3MgYnVpbGQgc2NyaXB0cyBub3cgZXhwZWN0IGV4dGVybmFsIGxpYnJhcnkgc291cmNlcworICB0byBiZSBpbiBgYFBDYnVpbGRcLi5cZXh0ZXJuYWxzYGAgcmF0aGVyIHRoYW4gYGBQQ2J1aWxkXC4uXC4uYGAuCisKKy0gSXNzdWUgIzE3NzE3OiBUaGUgV2luZG93cyBidWlsZCBzY3JpcHRzIG5vdyB1c2UgYSBjb3B5IG9mIE5BU00gcHVsbGVkIGZyb20KKyAgc3ZuLnB5dGhvbi5vcmcgdG8gYnVpbGQgT3BlblNTTC4KKworLSBJc3N1ZSAjMjI2NDQ6IFRoZSBidW5kbGVkIHZlcnNpb24gb2YgT3BlblNTTCBoYXMgYmVlbiB1cGRhdGVkIHRvIDEuMC4xai4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMTAtMDYKKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxMDUxMDogZGlzdHV0aWxzIHJlZ2lzdGVyIGFuZCB1cGxvYWQgbWV0aG9kcyBub3cgdXNlIEhUTUwgc3RhbmRhcmRzCisgIGNvbXBsaWFudCBDUkxGIGxpbmUgZW5kaW5ncy4KKworLSBJc3N1ZSAjOTg1MDogRml4ZWQgbWFjcGF0aC5qb2luKCkgZm9yIGVtcHR5IGZpcnN0IGNvbXBvbmVudC4gIFBhdGNoIGJ5CisgIE9sZWcgT3NobXlhbi4KKworLSBJc3N1ZSAjMjI0Mjc6IFRlbXBvcmFyeURpcmVjdG9yeSBubyBsb25nZXIgYXR0ZW1wdHMgdG8gY2xlYW4gdXAgdHdpY2Ugd2hlbgorICB1c2VkIGluIHRoZSB3aXRoIHN0YXRlbWVudCBpbiBnZW5lcmF0b3IuCisKKy0gSXNzdWUgIzIwOTEyOiBOb3cgZGlyZWN0b3JpZXMgYWRkZWQgdG8gWklQIGZpbGUgaGF2ZSBjb3JyZWN0IFVuaXggYW5kIE1TLURPUworICBkaXJlY3RvcnkgYXR0cmlidXRlcy4KKworLSBJc3N1ZSAjMjE4NjY6IFppcEZpbGUuY2xvc2UoKSBubyBsb25nZXIgd3JpdGVzIFpJUDY0IGNlbnRyYWwgZGlyZWN0b3J5CisgIHJlY29yZHMgaWYgYWxsb3daaXA2NCBpcyBmYWxzZS4KKworLSBJc3N1ZSAjMjI0MTU6IEZpeGVkIGRlYnVnZ2luZyBvdXRwdXQgb2YgdGhlIEdST1VQUkVGX0VYSVNUUyBvcGNvZGUgaW4gdGhlIHJlCisgIG1vZHVsZS4gIFJlbW92ZWQgdHJhaWxpbmcgc3BhY2VzIGluIGRlYnVnZ2luZyBvdXRwdXQuCisKKy0gSXNzdWUgIzIyNDIzOiBVbmhhbmRsZWQgZXhjZXB0aW9uIGluIHRocmVhZCBubyBsb25nZXIgY2F1c2VzIHVuaGFuZGxlZAorICBBdHRyaWJ1dGVFcnJvciB3aGVuIHN5cy5zdGRlcnIgaXMgTm9uZS4KKworLSBJc3N1ZSAjMjEzMzI6IEVuc3VyZSB0aGF0IGBgYnVmc2l6ZT0xYGAgaW4gc3VicHJvY2Vzcy5Qb3BlbigpIHNlbGVjdHMKKyAgbGluZSBidWZmZXJpbmcsIHJhdGhlciB0aGFuIGJsb2NrIGJ1ZmZlcmluZy4gIFBhdGNoIGJ5IEFraXJhIExpLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4ycmMxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNC0wOS0yMgorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjIyNTg6IEZpeCB0aGUgdGhlIGludGVybmFsIGZ1bmN0aW9uIHNldF9pbmhlcml0YWJsZSgpIG9uIElsbHVtb3MuCisgIFRoaXMgcGxhdGZvcm0gZXhwb3NlcyB0aGUgZnVuY3Rpb24gYGBpb2N0bChGSU9DTEVYKWBgLCBidXQgY2FsbGluZyBpdCBmYWlscworICB3aXRoIGVycm5vIGlzIEVOT1RUWTogIkluYXBwcm9wcmlhdGUgaW9jdGwgZm9yIGRldmljZSIuIHNldF9pbmhlcml0YWJsZSgpCisgIG5vdyBmYWxscyBiYWNrIHRvIHRoZSBzbG93ZXIgYGBmY250bCgpYGAgKGBgRl9HRVRGRGBgIGFuZCB0aGVuIGBgRl9TRVRGRGBgKS4KKworLSBJc3N1ZSAjMjE2Njk6IFdpdGggdGhlIGFpZCBvZiBoZXVyaXN0aWNzIGluIFN5bnRheEVycm9yLl9faW5pdF9fLCB0aGUKKyAgcGFyc2VyIG5vdyBhdHRlbXB0cyB0byBnZW5lcmF0ZSBtb3JlIG1lYW5pbmdmdWwgKG9yIGF0IGxlYXN0IG1vcmUgc2VhcmNoCisgIGVuZ2luZSBmcmllbmRseSkgZXJyb3IgbWVzc2FnZXMgd2hlbiAiZXhlYyIgYW5kICJwcmludCIgYXJlIHVzZWQgYXMKKyAgc3RhdGVtZW50cy4KKworLSBJc3N1ZSAjMjE2NDI6IEluIHRoZSBjb25kaXRpb25hbCBpZi1lbHNlIGV4cHJlc3Npb24sIGFsbG93IGFuIGludGVnZXIgd3JpdHRlbgorICB3aXRoIG5vIHNwYWNlIGJldHdlZW4gaXRzZWxmIGFuZCB0aGUgYGBlbHNlYGAga2V5d29yZCAoZS5nLiBgYFRydWUgaWYgNDJlbHNlCisgIEZhbHNlYGApIHRvIGJlIHZhbGlkIHN5bnRheC4KKworLSBJc3N1ZSAjMjE1MjM6IEZpeCBvdmVyLXBlc3NpbWlzdGljIGNvbXB1dGF0aW9uIG9mIHRoZSBzdGFjayBlZmZlY3Qgb2YKKyAgc29tZSBvcGNvZGVzIGluIHRoZSBjb21waWxlci4gIFRoaXMgYWxzbyBmaXhlcyBhIHF1YWRyYXRpYyBjb21waWxhdGlvbgorICB0aW1lIGlzc3VlIG5vdGljZWFibGUgd2hlbiBjb21waWxpbmcgY29kZSB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mICJhbmQiCisgIGFuZCAib3IiIG9wZXJhdG9ycy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMyMTA5MTogRml4IEFQSSBidWc6IGVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmlzX2F0dGFjaG1lbnQgaXMgbm93CisgIGEgbWV0aG9kLiAgU2luY2UgRW1haWxNZXNzYWdlIGlzIHByb3Zpc2lvbmFsLCB3ZSBjYW4gY2hhbmdlIHRoZSBBUEkgaW4gYQorICBtYWludGVuYW5jZSByZWxlYXNlLCBidXQgd2UgdXNlIGEgdHJpY2sgdG8gcmVtYWluIGJhY2t3YXJkIGNvbXBhdGlibGUgd2l0aAorICAzLjQuMC8xLgorCistIElzc3VlICMyMTA3OTogRml4IGVtYWlsLm1lc3NhZ2UuRW1haWxNZXNzYWdlLmlzX2F0dGFjaG1lbnQgdG8gcmV0dXJuIHRoZQorICBjb3JyZWN0IHJlc3VsdCB3aGVuIHRoZSBoZWFkZXIgaGFzIHBhcmFtZXRlcnMgYXMgd2VsbCBhcyBhIHZhbHVlLgorCistIElzc3VlICMyMjI0NzogQWRkIE5OVFBFcnJvciB0byBubnRwbGliLl9fYWxsX18uCisKKy0gSXNzdWUgIzQxODA6IFRoZSB3YXJuaW5ncyByZWdpc3RyaWVzIGFyZSBub3cgcmVzZXQgd2hlbiB0aGUgZmlsdGVycworICBhcmUgbW9kaWZpZWQuCisKIC0gSXNzdWUgIzIyNDE5OiBMaW1pdCB0aGUgbGVuZ3RoIG9mIGluY29taW5nIEhUVFAgcmVxdWVzdCBpbiB3c2dpcmVmIHNlcnZlciB0bwogICA2NTUzNiBieXRlcyBhbmQgc2VuZCBhIDQxNCBlcnJvciBjb2RlIGZvciBoaWdoZXIgbGVuZ3Rocy4gUGF0Y2ggY29udHJpYnV0ZWQKICAgYnkgRGV2aW4gQ29vay4KQEAgLTEzMiwxNiArMTQxOSw2MDYgQEAKICAgd2l0aCBub24tc3RhbmRhcmQgY29va2llIGhhbmRsaW5nIGluIHNvbWUgV2ViIGJyb3dzZXJzLiAgUmVwb3J0ZWQgYnkKICAgU2VyZ2V5IEJvYnJvdi4KIAorLSBJc3N1ZSAjMjIzODQ6IEFuIGV4Y2VwdGlvbiBpbiBUa2ludGVyIGNhbGxiYWNrIG5vIGxvbmdlciBjcmFzaGVzIHRoZSBwcm9ncmFtCisgIHdoZW4gaXQgaXMgcnVuIHdpdGggcHl0aG9udy5leGUuCisKKy0gSXNzdWUgIzIyMTY4OiBQcmV2ZW50IHR1cnRsZSBBdHRyaWJ1dGVFcnJvciB3aXRoIG5vbi1kZWZhdWx0IENhbnZhcyBvbiBPUyBYLgorCistIElzc3VlICMyMTE0Nzogc3FsaXRlMyBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbiBpZiB0aGUgcmVxdWVzdCBjb250YWlucyBhIG51bGwKKyAgY2hhcmFjdGVyIGluc3RlYWQgb2YgdHJ1bmNhdGUgaXQuICBCYXNlZCBvbiBwYXRjaCBieSBWaWN0b3IgU3Rpbm5lci4KKworLSBJc3N1ZSAjMjE5NTE6IEZpeGVkIGEgY3Jhc2ggaW4gVGtpbnRlciBvbiBBSVggd2hlbiBjYWxsZWQgVGNsIGNvbW1hbmQgd2l0aAorICBlbXB0eSBzdHJpbmcgb3IgdHVwbGUgYXJndW1lbnQuCisKKy0gSXNzdWUgIzIxOTUxOiBUa2ludGVyIG5vdyBtb3N0IGxpa2VseSByYWlzZXMgTWVtb3J5RXJyb3IgaW5zdGVhZCBvZiBjcmFzaAorICBpZiB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuCisKKy0gSXNzdWUgIzIyMzM4OiBGaXggYSBjcmFzaCBpbiB0aGUganNvbiBtb2R1bGUgb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZS4KKworLSBJc3N1ZSAjMjIyMjY6IEZpcnN0IGxldHRlciBubyBsb25nZXIgaXMgc3RyaXBwZWQgZnJvbSB0aGUgInN0YXR1cyIga2V5IGluCisgIHRoZSByZXN1bHQgb2YgVHJlZXZpZXcuaGVhZGluZygpLgorCistIElzc3VlICMxOTUyNDogRml4ZWQgcmVzb3VyY2UgbGVhayBpbiB0aGUgSFRUUCBjb25uZWN0aW9uIHdoZW4gYW4gaW52YWxpZAorICByZXNwb25zZSBpcyByZWNlaXZlZC4gIFBhdGNoIGJ5IE1hcnRpbiBQYW50ZXIuCisKKy0gSXNzdWUgIzIyMDUxOiB0dXJ0bGVkZW1vIG5vIGxvbmdlciByZWxvYWRzIGV4YW1wbGVzIHRvIHJlLXJ1biB0aGVtLgorICBJbml0aWFsaXphdGlvbiBvZiB2YXJpYWJsZXMgYW5kIGd1aSBzZXR1cCBzaG91bGQgYmUgZG9uZSBpbiBtYWluKCksCisgIHdoaWNoIGlzIGNhbGxlZCBlYWNoIHRpbWUgYSBkZW1vIGlzIHJ1biwgYnV0IG5vdCBvbiBpbXBvcnQuCisKKy0gSXNzdWUgIzIxOTMzOiBUdXJ0bGVkZW1vIHVzZXJzIGNhbiBjaGFuZ2UgdGhlIGNvZGUgZm9udCBzaXplIHdpdGggYSBtZW51CisgIHNlbGVjdGlvbiBvciBjb250cm9sKGNvbW1hbmQpICctJyBvciAnKycgb3IgY29udHJvbC1tb3VzZXdoZWVsLgorICBPcmlnaW5hbCBwYXRjaCBieSBMaXRhIENoby4KKworLSBJc3N1ZSAjMjE1OTc6IFRoZSBzZXBhcmF0b3IgYmV0d2VlbiB0aGUgdHVydGxlZGVtbyB0ZXh0IHBhbmUgYW5kIHRoZSBkcmF3aW5nCisgIGNhbnZhcyBjYW4gbm93IGJlIGdyYWJiZWQgYW5kIGRyYWdnZWQgd2l0aCBhIG1vdXNlLiAgVGhlIGNvZGUgdGV4dCBwYW5lIGNhbgorICBiZSB3aWRlbmVkIHRvIGVhc2lseSB2aWV3IG9yIGNvcHkgdGhlIGZ1bGwgd2lkdGggb2YgdGhlIHRleHQuICBUaGUgY2FudmFzCisgIGNhbiBiZSB3aWRlbmVkIG9uIHNtYWxsIHNjcmVlbnMuICBPcmlnaW5hbCBwYXRjaGVzIGJ5IEphbiBLYW5pcyBhbmQgTGl0YSBDaG8uCisKKy0gSXNzdWUgIzE4MTMyOiBUdXJ0bGVkZW1vIGJ1dHRvbnMgbm8gbG9uZ2VyIGRpc2FwcGVhciB3aGVuIHRoZSB3aW5kb3cgaXMKKyAgc2hydW5rLiAgT3JpZ2luYWwgcGF0Y2hlcyBieSBKYW4gS2FuaXMgYW5kIExpdGEgQ2hvLgorCistIElzc3VlICMyMjIxNjogc210cGxpYiBub3cgcmVzZXRzIGl0cyBzdGF0ZSBtb3JlIGNvbXBsZXRlbHkgYWZ0ZXIgYSBxdWl0LiAgVGhlCisgIG1vc3Qgb2J2aW91cyBjb25zZXF1ZW5jZSBvZiB0aGUgcHJldmlvdXMgYmVoYXZpb3Igd2FzIGEgU1RBUlRUTFMgZmFpbHVyZQorICBkdXJpbmcgYSBjb25uZWN0L3N0YXJ0dGxzL3F1aXQvY29ubmVjdC9zdGFydHRscyBzZXF1ZW5jZS4KKworLSBJc3N1ZSAjMjIxODU6IEZpeCBhbiBvY2Nhc2lvbmFsIFJ1bnRpbWVFcnJvciBpbiB0aHJlYWRpbmcuQ29uZGl0aW9uLndhaXQoKQorICBjYXVzZWQgYnkgbXV0YXRpb24gb2YgdGhlIHdhaXRlcnMgcXVldWUgd2l0aG91dCBob2xkaW5nIHRoZSBsb2NrLiAgUGF0Y2gKKyAgYnkgRG91ZyBab25na2VyLgorCistIElzc3VlICMyMjE4MjogVXNlIGUuYXJncyB0byB1bnBhY2sgZXhjZXB0aW9ucyBjb3JyZWN0bHkgaW4KKyAgZGlzdHV0aWxzLmZpbGVfdXRpbC5tb3ZlX2ZpbGUuIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBUaGUgd2ViYnJvd3NlciBtb2R1bGUgbm93IHVzZXMgc3VicHJvY2VzcydzIHN0YXJ0X25ld19zZXNzaW9uPVRydWUgcmF0aGVyCisgIHRoYW4gYSBwb3RlbnRpYWxseSByaXNreSBwcmVleGVjX2ZuPW9zLnNldHNpZCBjYWxsLgorCistIElzc3VlICMyMjIzNjogRml4ZWQgVGtpbnRlciBpbWFnZXMgY29weWluZyBvcGVyYXRpb25zIGluIE5vRGVmYXVsdFJvb3QgbW9kZS4KKworLSBJc3N1ZSAjMjIxOTE6IEZpeCB3YXJuaW5ncy5fX2FsbF9fLgorCistIElzc3VlICMxNTY5NjogQWRkIGEgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbiBmb3IgbW1hcCBvYmplY3RzIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzIyMDY4OiBBdm9pZGVkIHJlZmVyZW5jZSBsb29wcyB3aXRoIFZhcmlhYmxlcyBhbmQgRm9udHMgaW4gVGtpbnRlci4KKworLSBJc3N1ZSAjMjIxNjU6IFNpbXBsZUhUVFBSZXF1ZXN0SGFuZGxlciBub3cgc3VwcG9ydHMgdW5kZWNvZGFibGUgZmlsZSBuYW1lcy4KKworLSBJc3N1ZSAjODc5NzogUmFpc2UgSFRUUEVycm9yIG9uIGZhaWxlZCBCYXNpYyBBdXRoZW50aWNhdGlvbiBpbW1lZGlhdGVseS4KKyAgSW5pdGlhbCBwYXRjaCBieSBTYW0gQnVsbC4KKworLSBJc3N1ZSAjMjA3Mjk6IFJlc3RvcmVkIHRoZSB1c2Ugb2YgbGF6eSBpdGVya2V5cygpL2l0ZXJ2YWx1ZXMoKS9pdGVyaXRlbXMoKQorICBpbiB0aGUgbWFpbGJveCBtb2R1bGUuCisKKy0gSXNzdWUgIzIxNDQ4OiBDaGFuZ2VkIEZlZWRQYXJzZXIgZmVlZCgpIHRvIGF2b2lkIE8oTioqMikgYmVoYXZpb3Igd2hlbgorICBwYXJzaW5nIGxvbmcgbGluZS4gIE9yaWdpbmFsIHBhdGNoIGJ5IFJheW1vbmQgSGV0dGluZ2VyLgorCistIElzc3VlICMyMjE4NDogVGhlIGZ1bmN0b29scyBMUlUgQ2FjaGUgZGVjb3JhdG9yIGZhY3Rvcnkgbm93IGdpdmVzIGFuIGVhcmxpZXIKKyAgYW5kIGNsZWFyZXIgZXJyb3IgbWVzc2FnZSB3aGVuIHRoZSB1c2VyIGZvcmdldHMgdGhlIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzE3OTIzOiBnbG9iKCkgcGF0dGVybnMgZW5kaW5nIHdpdGggYSBzbGFzaCBubyBsb25nZXIgbWF0Y2ggbm9uLWRpcnMgb24KKyAgQUlYLiAgQmFzZWQgb24gcGF0Y2ggYnkgRGVsaGFsbHQuCisKKy0gSXNzdWUgIzIxMTIxOiBEb24ndCBmb3JjZSAzcmQgcGFydHkgQyBleHRlbnNpb25zIHRvIGJlIGJ1aWx0IHdpdGgKKyAgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQuCisKKy0gSXNzdWUgIzIxOTc1OiBGaXhlZCBjcmFzaCB3aGVuIHVzaW5nIHVuaW5pdGlhbGl6ZWQgc3FsaXRlMy5Sb3cgKGluIHBhcnRpY3VsYXIKKyAgd2hlbiB1bnBpY2tsaW5nIHBpY2tsZWQgc3FsaXRlMy5Sb3cpLiAgc3FsaXRlMy5Sb3cgaXMgbm93IGluaXRpYWxpemVkIGluIHRoZQorICBfX25ld19fKCkgbWV0aG9kLgorCistIElzc3VlICMyMTU4MDogTm93IFRraW50ZXIgY29ycmVjdGx5IGhhbmRsZXMgYnl0ZXMgYXJndW1lbnRzIHBhc3NlZCB0byBUay4KKyAgSW4gcGFydGljdWxhciB0aGlzIGFsbG93cyB0byBpbml0aWFsaXplIGltYWdlcyBmcm9tIGJpbmFyeSBkYXRhLgorCistIElzc3VlICMxNzE3MjogTWFrZSB0dXJ0bGVkZW1vIHN0YXJ0IGFzIGFjdGl2ZSBvbiBPUyBYIGV2ZW4gd2hlbiBydW4gd2l0aAorICBzdWJwcm9jZXNzLiAgUGF0Y2ggYnkgTGl0YSBDaG8uCisKKy0gSXNzdWUgIzIxNzA0OiBGaXggYnVpbGQgZXJyb3IgZm9yIF9tdWx0aXByb2Nlc3Npbmcgd2hlbiBzZW1hcGhvcmVzCisgIGFyZSBub3QgYXZhaWxhYmxlLiAgUGF0Y2ggYnkgQXJmcmV2ZXIgRnJlaHRlcyBUYWlmZXJzYXIgQXJhaGVzaXMuCisKKy0gRml4IHJlcHIoX3NvY2tldC5zb2NrZXQpIG9uIFdpbmRvd3MgNjQtYml0OiBkb24ndCBmYWlsIHdpdGggT3ZlcmZsb3dFcnJvcgorICBvbiBjbG9zZWQgc29ja2V0LiByZXByKHNvY2tldC5zb2NrZXQpIGFscmVhZHkgd29ya3MgZmluZS4KKworLSBJc3N1ZSAjMTYxMzM6IFRoZSBhc3luY2hhdC5hc3luY19jaGF0LmhhbmRsZV9yZWFkKCkgbWV0aG9kIG5vdyBpZ25vcmVzCisgIEJsb2NraW5nSU9FcnJvciBleGNlcHRpb25zLgorCistIElzc3VlICMyMjA0NDogRml4ZWQgcHJlbWF0dXJlIERFQ1JFRiBpbiBjYWxsX3R6aW5mb19tZXRob2QuCisgIFBhdGNoIGJ5IFRvbSBGbGFuYWdhbi4KKworLSBJc3N1ZSAjMTk4ODQ6IHJlYWRsaW5lOiBEaXNhYmxlIHRoZSBtZXRhIG1vZGlmaWVyIGtleSBpZiBzdGRvdXQgaXMgbm90CisgIGEgdGVybWluYWwgdG8gbm90IHdyaXRlIHRoZSBBTlNJIHNlcXVlbmNlICJcMDMzWzEwMzRoIiBpbnRvIHN0ZG91dC4gVGhpcworICBzZXF1ZW5jZSBpcyB1c2VkIG9uIHNvbWUgdGVybWluYWwgKGV4OiBURVJNPXh0ZXJtLTI1NmNvbG9yIikgdG8gZW5hYmxlCisgIHN1cHBvcnQgb2YgOCBiaXQgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMjE4ODg6IHBsaXN0bGliJ3MgbG9hZCgpIGFuZCBsb2FkcygpIG5vdyB3b3JrIGlmIHRoZSBmbXQgcGFyYW1ldGVyIGlzCisgIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMjEwNDQ6IHRhcmZpbGUub3BlbigpIG5vdyBoYW5kbGVzIGZpbGVvYmogd2l0aCBhbiBpbnRlZ2VyICduYW1lJworICBhdHRyaWJ1dGUuICBCYXNlZCBvbiBwYXRjaCBieSBBbnRvaW5lIFBpZXRyaS4KKworLSBJc3N1ZSAjMjE4Njc6IFByZXZlbnQgdHVydGxlIGNyYXNoIGR1ZSB0byBpbnZhbGlkIHVuZG8gYnVmZmVyIHNpemUuCisKKy0gSXNzdWUgIzE5MDc2OiBEb24ndCBwYXNzIHRoZSByZWR1bmRhbnQgJ2ZpbGUnIGFyZ3VtZW50IHRvIHNlbGYuZXJyb3IoKS4KKworLSBJc3N1ZSAjMjE5NDI6IEZpeGVkIHNvdXJjZSBmaWxlIHZpZXdpbmcgaW4gcHlkb2MncyBzZXJ2ZXIgbW9kZSBvbiBXaW5kb3dzLgorCistIElzc3VlICMxMTI1OTogYXN5bmNoYXQuYXN5bmNfY2hhdCgpLnNldF90ZXJtaW5hdG9yKCkgbm93IHJhaXNlcyBhIFZhbHVlRXJyb3IKKyAgaWYgdGhlIG51bWJlciBvZiByZWNlaXZlZCBieXRlcyBpcyBuZWdhdGl2ZS4KKworLSBJc3N1ZSAjMTI1MjM6IGFzeW5jaGF0LmFzeW5jX2NoYXQucHVzaCgpIG5vdyByYWlzZXMgYSBUeXBlRXJyb3IgaWYgaXQgZG9lc24ndAorICBnZXQgYSBieXRlcyBzdHJpbmcKKworLSBJc3N1ZSAjMjE3MDc6IEFkZCBtaXNzaW5nIGt3b25seWFyZ2NvdW50IGFyZ3VtZW50IHRvCisgIE1vZHVsZUZpbmRlci5yZXBsYWNlX3BhdGhzX2luX2NvZGUoKS4KKworLSBJc3N1ZSAjMjA2Mzk6IGNhbGxpbmcgUGF0aC53aXRoX3N1ZmZpeCgnJykgYWxsb3dzIHJlbW92aW5nIHRoZSBzdWZmaXgKKyAgYWdhaW4uICBQYXRjaCBieSBKdWx5IFRpa2hvbm92LgorCistIElzc3VlICMyMTcxNDogRGlzYWxsb3cgdGhlIGNvbnN0cnVjdGlvbiBvZiBpbnZhbGlkIHBhdGhzIHVzaW5nCisgIFBhdGgud2l0aF9uYW1lKCkuICBPcmlnaW5hbCBwYXRjaCBieSBBbnRvbnkgTGVlLgorCistIElzc3VlICMyMTg5NzogRml4IGEgY3Jhc2ggd2l0aCB0aGUgZl9sb2NhbHMgYXR0cmlidXRlIHdpdGggY2xvc3VyZQorICB2YXJpYWJsZXMgd2hlbiBmcmFtZS5jbGVhcigpIGhhcyBiZWVuIGNhbGxlZC4KKworLSBJc3N1ZSAjMjExNTE6IEZpeGVkIGEgc2VnZmF1bHQgaW4gdGhlIHdpbnJlZyBtb2R1bGUgd2hlbiBgYE5vbmVgYCBpcyBwYXNzZWQKKyAgYXMgYSBgYFJFR19CSU5BUllgYCB2YWx1ZSB0byBTZXRWYWx1ZUV4LiAgUGF0Y2ggYnkgSm9obiBFaHJlc21hbi4KKworLSBJc3N1ZSAjMjEwOTA6IGlvLkZpbGVJTy5yZWFkYWxsKCkgZG9lcyBub3QgaWdub3JlIEkvTyBlcnJvcnMgYW55bW9yZS4gQmVmb3JlLAorICBpdCBpZ25vcmVkIEkvTyBlcnJvcnMgaWYgYXQgbGVhc3QgdGhlIGZpcnN0IEMgY2FsbCByZWFkKCkgc3VjY2VlZC4KKworLSBJc3N1ZSAjMjE3ODE6IHNzbC5SQU5EX2FkZCgpIG5vdyBzdXBwb3J0cyBzdHJpbmdzIGxvbmdlciB0aGFuIDIgR0IuCisKKy0gSXNzdWUgIzExNDUzOiBhc3luY29yZTogZW1pdCBhIFJlc291cmNlV2FybmluZyB3aGVuIGFuIHVuY2xvc2VkIGZpbGVfd3JhcHBlcgorICBvYmplY3QgaXMgZGVzdHJveWVkLiBUaGUgZGVzdHJ1Y3RvciBub3cgY2xvc2VzIHRoZSBmaWxlIGlmIG5lZWRlZC4gVGhlCisgIGNsb3NlKCkgbWV0aG9kIGNhbiBub3cgYmUgY2FsbGVkIHR3aWNlOiB0aGUgc2Vjb25kIGNhbGwgZG9lcyBub3RoaW5nLgorCistIElzc3VlICMyMTg1ODogQmV0dGVyIGhhbmRsaW5nIG9mIFB5dGhvbiBleGNlcHRpb25zIGluIHRoZSBzcWxpdGUzIG1vZHVsZS4KKworLSBJc3N1ZSAjMjE0NzY6IE1ha2Ugc3VyZSB0aGUgZW1haWwucGFyc2VyLkJ5dGVzUGFyc2VyIFRleHRJT1dyYXBwZXIgaXMKKyAgZGlzY2FyZGVkIGFmdGVyIHBhcnNpbmcsIHNvIHRoZSBpbnB1dCBmaWxlIGlzbid0IHVuZXhwZWN0ZWRseSBjbG9zZWQuCisKKy0gSXNzdWUgIzIxNzI5OiBVc2VkIHRoZSAid2l0aCIgc3RhdGVtZW50IGluIHRoZSBkYm0uZHVtYiBtb2R1bGUgdG8gZW5zdXJlCisgIGZpbGVzIGNsb3NpbmcuICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzIxNDkxOiBzb2NrZXRzZXJ2ZXI6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIGNoaWxkIHByb2Nlc3NlcyByZWFwaW5nLgorCistIElzc3VlICMyMTgzMjogUmVxdWlyZSBuYW1lZCB0dXBsZSBpbnB1dHMgdG8gYmUgZXhhY3Qgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTkxNDU6IFRoZSB0aW1lcyBhcmd1bWVudCBmb3IgaXRlcnRvb2xzLnJlcGVhdCBub3cgaGFuZGxlcworICBuZWdhdGl2ZSB2YWx1ZXMgdGhlIHNhbWUgd2F5IGZvciBrZXl3b3JkIGFyZ3VtZW50cyBhcyBpdCBkb2VzIGZvcgorICBwb3NpdGlvbmFsIGFyZ3VtZW50cy4KKworLSBJc3N1ZSAjMjE4MTI6IHR1cnRsZS5zaGFwZXRyYW5zZm9ybSBkaWQgbm90IHRyYW5mb3JtIHRoZSB0dXJ0bGUgb24gdGhlCisgIGZpcnN0IGNhbGwuICAoSXNzdWUgaWRlbnRpZmllZCBhbmQgZml4ZWQgYnkgTGl0YSBDaG8uKQorCistIElzc3VlICMyMTYzNTogVGhlIGRpZmZsaWIgU2VxdWVuY2VNYXRjaGVyLmdldF9tYXRjaGluZ19ibG9ja3MoKSBtZXRob2QKKyAgY2FjaGUgZGlkbid0IG1hdGNoIHRoZSBhY3R1YWwgcmVzdWx0LiAgVGhlIGZvcm1lciB3YXMgYSBsaXN0IG9mIHR1cGxlcworICBhbmQgdGhlIGxhdHRlciB3YXMgYSBsaXN0IG9mIG5hbWVkIHR1cGxlcy4KKworLSBJc3N1ZSAjMjE3MjI6IFRoZSBkaXN0dXRpbHMgInVwbG9hZCIgY29tbWFuZCBub3cgZXhpdHMgd2l0aCBhIG5vbi16ZXJvCisgIHJldHVybiBjb2RlIHdoZW4gdXBsb2FkaW5nIGZhaWxzLiAgUGF0Y2ggYnkgTWFydGluIERlbmdsZXIuCisKKy0gSXNzdWUgIzIxNzIzOiBhc3luY2lvLlF1ZXVlOiBzdXBwb3J0IGFueSB0eXBlIG9mIG51bWJlciAoZXg6IGZsb2F0KSBmb3IgdGhlCisgIG1heGltdW0gc2l6ZS4gUGF0Y2ggd3JpdHRlbiBieSBWYWpyYXNreSBLb2suCisKKy0gSXNzdWUgIzIxMzI2OiBBZGQgYSBuZXcgaXNfY2xvc2VkKCkgbWV0aG9kIHRvIGFzeW5jaW8uQmFzZUV2ZW50TG9vcC4KKyAgcnVuX2ZvcmV2ZXIoKSBhbmQgcnVuX3VudGlsX2NvbXBsZXRlKCkgbWV0aG9kcyBvZiBhc3luY2lvLkJhc2VFdmVudExvb3Agbm93CisgIHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiB0aGUgZXZlbnQgbG9vcCB3YXMgY2xvc2VkLgorCistIElzc3VlICMyMTc3NDogRml4ZWQgTmFtZUVycm9yIGZvciBhbiBpbmNvcnJlY3QgdmFyaWFibGUgcmVmZXJlbmNlIGluIHRoZQorICBYTUwgTWluaWRvbSBjb2RlIGZvciBjcmVhdGluZyBwcm9jZXNzaW5nIGluc3RydWN0aW9ucy4KKyAgKEZvdW5kIGFuZCBmaXhlZCBieSBDbGF1ZGl1IFBvcGEuKQorCiAtIElzc3VlICMyMTc2NjogUHJldmVudCBhIHNlY3VyaXR5IGhvbGUgaW4gQ0dJSFRUUFNlcnZlciBieSBVUkwgdW5xdW90aW5nIHBhdGhzCiAgIGJlZm9yZSBjaGVja2luZyBmb3IgYSBDR0kgc2NyaXB0IGF0IHRoYXQgcGF0aC4KIAorLSBJc3N1ZSAjMjEzMTA6IEZpeGVkIHBvc3NpYmxlIHJlc291cmNlIGxlYWsgaW4gZmFpbGVkIG9wZW4oKS4KKworLSBJc3N1ZSAjMjE2Nzc6IEZpeGVkIGNoYWluaW5nIG5vbm5vcm1hbGl6ZWQgZXhjZXB0aW9ucyBpbiBpbyBjbG9zZSgpIG1ldGhvZHMuCisKKy0gSXNzdWUgIzExNzA5OiBGaXggdGhlIHB5ZG9jLmhlbHAgZnVuY3Rpb24gdG8gbm90IGZhaWwgd2hlbiBzeXMuc3RkaW4gaXMgbm90IGEKKyAgdmFsaWQgZmlsZS4KKworLSBJc3N1ZSAjMTMyMjM6IEZpeCBweWRvYy53cml0ZWRvYyBzbyB0aGF0IHRoZSBIVE1MIGRvY3VtZW50YXRpb24gZm9yIG1ldGhvZHMKKyAgdGhhdCB1c2UgJ3NlbGYnIGluIHRoZSBleGFtcGxlIGNvZGUgaXMgZ2VuZXJhdGVkIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMjE0NjM6IEluIHVybGxpYi5yZXF1ZXN0LCBmaXggcHJ1bmluZyBvZiB0aGUgRlRQIGNhY2hlLgorCistIElzc3VlICMyMTYxODogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIGNvdWxkIGZhaWwgdG8gY2xvc2Ugb3BlbiBmZHMgdGhhdCB3ZXJlCisgIGluaGVyaXRlZCBieSB0aGUgY2FsbGluZyBwcm9jZXNzIGFuZCBhbHJlYWR5IGhpZ2hlciB0aGFuIFBPU0lYIHJlc291cmNlCisgIGxpbWl0cyB3b3VsZCBvdGhlcndpc2UgYWxsb3cuICBPbiBzeXN0ZW1zIHdpdGggYSBmdW5jdGlvbmluZyAvcHJvYy9zZWxmL2ZkCisgIG9yIC9kZXYvZmQgaW50ZXJmYWNlIHRoZSBtYXggaXMgbm93IGlnbm9yZWQgYW5kIGFsbCBmZHMgYXJlIGNsb3NlZC4KKworLSBJc3N1ZSAjMjE1NTI6IEZpeGVkIHBvc3NpYmxlIGludGVnZXIgb3ZlcmZsb3cgb2YgdG9vIGxvbmcgc3RyaW5nIGxlbmd0aHMgaW4KKyAgdGhlIHRraW50ZXIgbW9kdWxlIG9uIDY0LWJpdCBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE0MzE1OiBUaGUgemlwZmlsZSBtb2R1bGUgbm93IGlnbm9yZXMgZXh0cmEgZmllbGRzIGluIHRoZSBjZW50cmFsCisgIGRpcmVjdG9yeSB0aGF0IGFyZSB0b28gc2hvcnQgdG8gYmUgcGFyc2VkIGluc3RlYWQgb2YgbGV0dGluZyBhIHN0cnVjdC51bnBhY2sKKyAgZXJyb3IgYnViYmxlIHVwIGFzIHRoaXMgImJhZCBkYXRhIiBhcHBlYXJzIGluIG1hbnkgcmVhbCB3b3JsZCB6aXAgZmlsZXMgaW4KKyAgdGhlIHdpbGQgYW5kIGlzIGlnbm9yZWQgYnkgb3RoZXIgemlwIHRvb2xzLgorCistIElzc3VlICMyMTQwMjogdGtpbnRlci50dGsgbm93IHdvcmtzIHdoZW4gZGVmYXVsdCByb290IHdpbmRvdyBpcyBub3Qgc2V0LgorCistIElzc3VlICMxMDIwMzogc3FsaXRlMy5Sb3cgbm93IHRydWx5IHN1cHBvcnRzIHNlcXVlbmNlIHByb3RvY29sLiAgSW4gcGFydGljdWxhcgorICBpdCBzdXBwb3J0cyByZXZlcnNlKCkgYW5kIG5lZ2F0aXZlIGluZGljZXMuICBPcmlnaW5hbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE4ODA3OiBJZiBjb3B5aW5nIChubyBzeW1saW5rcykgc3BlY2lmaWVkIGZvciBhIHZlbnYsIHRoZW4gdGhlIHB5dGhvbgorICBpbnRlcnByZXRlciBhbGlhc2VzIChweXRob24sIHB5dGhvbjMpIGFyZSBub3cgY3JlYXRlZCBieSBjb3B5aW5nIHJhdGhlciB0aGFuCisgIHN5bWxpbmtpbmcuCisKKy0gSXNzdWUgIzE0NzEwOiBwa2d1dGlsLmdldF9sb2FkZXIoKSBubyBsb25nZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiB3aGVuIE5vbmUgaXMKKyAgZm91bmQgaW4gc3lzLm1vZHVsZXMuCisKKy0gSXNzdWUgIzE0NzEwOiBwa2d1dGlsLmZpbmRfbG9hZGVyKCkgbm8gbG9uZ2VyIHJhaXNlcyBhbiBleGNlcHRpb24gd2hlbiBhCisgIG1vZHVsZSBkb2Vzbid0IGV4aXN0LgorCistIElzc3VlICMyMTQ4MTogQXJncGFyc2UgZXF1YWxpdHkgYW5kIGluZXF1YWxpdHkgdGVzdHMgbm93IHJldHVybgorICBOb3RJbXBsZW1lbnRlZCB3aGVuIGNvbXBhcmluZyB0byBhbiB1bmtub3duIHR5cGUuCisKKy0gSXNzdWUgIzg3NDM6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IGJldHdlZW4gc2V0IG9iamVjdHMgYW5kIHRoZQorICBjb2xsZWN0aW9ucy5TZXQoKSBhYnN0cmFjdCBiYXNlIGNsYXNzLgorCistIElzc3VlICMxMzM1NTogcmFuZG9tLnRyaWFuZ3VsYXIoKSBubyBsb25nZXIgZmFpbHMgd2l0aCBhIFplcm9EaXZpc2lvbkVycm9yCisgIHdoZW4gbG93IGVxdWFscyBoaWdoLgorCistIElzc3VlICMyMTUzODogVGhlIHBsaXN0bGliIG1vZHVsZSBub3cgc3VwcG9ydHMgbG9hZGluZyBvZiBiaW5hcnkgcGxpc3QgZmlsZXMKKyAgd2hlbiByZWZlcmVuY2Ugb3Igb2Zmc2V0IHNpemUgaXMgbm90IGEgcG93ZXIgb2YgdHdvLgorCistIElzc3VlICMyMTgwMTogVmFsaWRhdGUgdGhhdCBfX3NpZ25hdHVyZV9fIGlzIE5vbmUgb3IgYW4gaW5zdGFuY2Ugb2YgU2lnbmF0dXJlLgorCistIElzc3VlICMyMTkyMzogUHJldmVudCBBdHRyaWJ1dGVFcnJvciBpbiBkaXN0dXRpbHMuc3lzY29uZmlnLmN1c3RvbWl6ZV9jb21waWxlcgorICBkdWUgdG8gcG9zc2libGUgdW5pbml0aWFsaXplZCBfY29uZmlnX3ZhcnMuCisKKy0gSXNzdWUgIzIxMzIzOiBGaXggaHR0cC5zZXJ2ZXIgdG8gYWdhaW4gaGFuZGxlIHNjcmlwdHMgaW4gQ0dJIHN1YmRpcmVjdG9yaWVzLAorICBicm9rZW4gYnkgdGhlIGZpeCBmb3Igc2VjdXJpdHkgaXNzdWUgIzE5NDM1LiAgUGF0Y2ggYnkgWmFjaCBCeXJuZS4KKworRXh0ZW5zaW9uIE1vZHVsZXMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzIyMTc2OiBVcGRhdGUgdGhlIGN0eXBlcyBtb2R1bGUncyBsaWJmZmkgdG8gdjMuMS4gIFRoaXMgcmVsZWFzZQorICBhZGRzIHN1cHBvcnQgZm9yIHRoZSBMaW51eCBBQXJjaDY0IGFuZCBQT1dFUlBDIEVMRiBBQkl2MiBsaXR0bGUgZW5kaWFuCisgIGFyY2hpdGVjdHVyZXMuCisKK0J1aWxkCistLS0tLQorCistIElzc3VlICMxNTY2MTogcHl0aG9uLm9yZyBPUyBYIGluc3RhbGxlcnMgYXJlIG5vdyBkaXN0cmlidXRlZCBhcyBzaWduZWQKKyAgaW5zdGFsbGVyIHBhY2thZ2VzIGNvbXBhdGlibGUgd2l0aCB0aGUgR2F0ZWtlZXBlciBzZWN1cml0eSBmZWF0dXJlLgorCistIElzc3VlICMyMTk1ODogRGVmaW5lIEhBVkVfUk9VTkQgd2hlbiBidWlsZGluZyB3aXRoIFZpc3VhbCBTdHVkaW8gMjAxMyBhbmQKKyAgYWJvdmUuICBQYXRjaCBieSBaYWNoYXJ5IFR1cm5lci4KKworLSBJc3N1ZSAjMTU3NTk6ICJtYWtlIHN1c3BpY2lvdXMiLCAibWFrZSBsaW5rY2hlY2siIGFuZCAibWFrZSBkb2N0ZXN0IiBpbiBEb2MvCisgIG5vdyBkaXNwbGF5IHNwZWNpYWwgbWVzc2FnZSB3aGVuIGFuZCBvbmx5IHdoZW4gdGhlcmUgYXJlIGZhaWx1cmVzLgorCistIElzc3VlICMxNzA5NTogRml4IE1vZHVsZXMvU2V0dXAgKnNoYXJlZCogc3VwcG9ydC4KKworLSBJc3N1ZSAjMjE4MTE6IEFudGljaXBhdGVkIGZpeGVzIHRvIHN1cHBvcnQgT1MgWCB2ZXJzaW9ucyA+IDEwLjkuCisKKy0gSXNzdWUgIzIxMTY2OiBQcmV2ZW50IHBvc3NpYmxlIHNlZ2ZhdWx0cyBhbmQgb3RoZXIgcmFuZG9tIGZhaWx1cmVzIG9mCisgIHB5dGhvbiAtLWdlbmVyYXRlLXBvc2l4LXZhcnMgaW4gcHlidWlsZGRpci50eHQgYnVpbGQgdGFyZ2V0LgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE3MzkwOiBBZGp1c3QgRWRpdG9yIHdpbmRvdyB0aXRsZTsgcmVtb3ZlICdQeXRob24nLAorICBtb3ZlIHZlcnNpb24gdG8gZW5kLgorCistIElzc3VlICMxNDEwNTogSWRsZSBkZWJ1Z2dlciBicmVha3BvaW50cyBubyBsb25nZXIgZGlzYXBwZWFyCisgIHdoZW4gaW5zZXRpbmcgb3IgZGVsZXRpbmcgbGluZXMuCisKKy0gSXNzdWUgIzE3MTcyOiBUdXJ0bGVkZW1vIGNhbiBub3cgYmUgcnVuIGZyb20gSWRsZS4KKyAgQ3VycmVudGx5LCB0aGUgZW50cnkgaXMgb24gdGhlIEhlbHAgbWVudSwgYnV0IGl0IG1heSBtb3ZlIHRvIFJ1bi4KKyAgUGF0Y2ggYnkgUmFtY2hhbmRyYSBBcHQgYW5kIExpdGEgQ2hvLgorCistIElzc3VlICMyMTc2NTogQWRkIHN1cHBvcnQgZm9yIG5vbi1hc2NpaSBpZGVudGlmaWVycyB0byBIeXBlclBhcnNlci4KKworLSBJc3N1ZSAjMjE5NDA6IEFkZCB1bml0dGVzdCBmb3IgV2lkZ2V0UmVkaXJlY3Rvci4gSW5pdGlhbCBwYXRjaCBieSBTYWltYWRoYXYKKyAgSGVibGlrYXIuCisKKy0gSXNzdWUgIzE4NTkyOiBBZGQgdW5pdHRlc3QgZm9yIFNlYXJjaERpYWxvZ0Jhc2UuIFBhdGNoIGJ5IFBoaWwgV2Vic3Rlci4KKworLSBJc3N1ZSAjMjE2OTQ6IEFkZCB1bml0dGVzdCBmb3IgUGFyZW5NYXRjaC4gUGF0Y2ggYnkgU2FpbWFkaGF2IEhlYmxpa2FyLgorCistIElzc3VlICMyMTY4NjogYWRkIHVuaXR0ZXN0IGZvciBIeXBlclBhcnNlci4gT3JpZ2luYWwgcGF0Y2ggYnkgU2FpbWFkaGF2CisgIEhlYmxpa2FyLgorCistIElzc3VlICMxMjM4NzogQWRkIG1pc3NpbmcgdXBwZXIobG93ZXIpY2FzZSB2ZXJzaW9ucyBvZiBkZWZhdWx0IFdpbmRvd3Mga2V5CisgIGJpbmRpbmdzIGZvciBJZGxlIHNvIENhcHMgTG9jayBkb2VzIG5vdCBkaXNhYmxlIHRoZW0uIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMyMTY5NTogQ2xvc2luZyBhIEZpbmQtaW4tZmlsZXMgb3V0cHV0IHdpbmRvdyB3aGlsZSB0aGUgc2VhcmNoIGlzCisgIHN0aWxsIGluIHByb2dyZXNzIG5vIGxvbmdlciBjbG9zZXMgSWRsZS4KKworLSBJc3N1ZSAjMTg5MTA6IEFkZCB1bml0dGVzdCBmb3IgdGV4dFZpZXcuIFBhdGNoIGJ5IFBoaWwgV2Vic3Rlci4KKworLSBJc3N1ZSAjMTgyOTI6IEFkZCB1bml0dGVzdCBmb3IgQXV0b0V4cGFuZC4gUGF0Y2ggYnkgU2FpaGFkaGF2IEhlYmxpa2FyLgorCistIElzc3VlICMxODQwOTogQWRkIHVuaXR0ZXN0IGZvciBBdXRvQ29tcGxldGUuIFBhdGNoIGJ5IFBoaWwgV2Vic3Rlci4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzIyMTY2OiBXaXRoIHRoZSBhc3Npc3RhbmNlIG9mIGEgbmV3IGludGVybmFsIF9jb2RlY3MuX2ZvcmdldF9jb2RlYworICBoZWxwaW5nIGZ1bmN0aW9uLCB0ZXN0X2NvZGVjcyBub3cgY2xlYXJzIHRoZSBlbmNvZGluZyBjYWNoZXMgdG8gYXZvaWQgdGhlCisgIGFwcGVhcmFuY2Ugb2YgYSByZWZlcmVuY2UgbGVhaworCistIElzc3VlICMyMjIzNjogVGtpbnRlciB0ZXN0cyBub3cgZG9uJ3QgcmV1c2UgZGVmYXVsdCByb290IHdpbmRvdy4gIE5ldyByb290CisgIHdpbmRvdyBpcyBjcmVhdGVkIGZvciBldmVyeSB0ZXN0IGNsYXNzLgorCistIElzc3VlICMyMDc0NjogRml4IHRlc3RfcGRiIHRvIHJ1biBpbiByZWZsZWFrIG1vZGUgKC1SKS4gIFBhdGNoIGJ5IFhhdmllcgorICBkZSBHYXllLgorCistIElzc3VlICMyMjA2MDogdGVzdF9jdHlwZXMgaGFzIGJlZW4gc29tZXdoYXQgY2xlYW5lZCB1cCBhbmQgc2ltcGxpZmllZDsgaXQKKyAgbm93IHVzZXMgdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgdG8gZmluZCBpdHMgdGVzdHMuCisKKy0gSXNzdWUgIzIyMTA0OiByZWdydGVzdC5weSBubyBsb25nZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIHN1aXRlIG9mIHRlc3RzCisgIGxvYWRlZCBmcm9tIHRlc3QgbW9kdWxlcyB0aGF0IGRvbid0IGRlZmluZSB0ZXN0X21haW4oKS4KKworLSBJc3N1ZSAjMjIwMDI6IEFkZGVkIGBgbG9hZF9wYWNrYWdlX3Rlc3RzYGAgZnVuY3Rpb24gdG8gdGVzdC5zdXBwb3J0IGFuZCB1c2VkCisgIGl0IHRvIGltcGxlbWVudC9hdWdtZW50IHRlc3QgZGlzY292ZXJ5IGluIHRlc3RfYXN5bmNpbywgdGVzdF9lbWFpbCwKKyAgdGVzdF9pbXBvcnRsaWIsIHRlc3RfanNvbiwgYW5kIHRlc3RfdG9vbHMuCisKKy0gSXNzdWUgIzIxOTc2OiBGaXggdGVzdF9zc2wgdG8gYWNjZXB0IExpYnJlU1NMIHZlcnNpb24gc3RyaW5ncy4gIFRoYW5rcworICB0byBXaWxsaWFtIE9yci4KKworLSBJc3N1ZSAjMjE5MTg6IENvbnZlcnRlZCB0ZXN0X3Rvb2xzIGZyb20gYSBtb2R1bGUgdG8gYSBwYWNrYWdlIGNvbnRhaW5pbmcKKyAgc2VwYXJhdGUgdGVzdCBmaWxlcyBmb3IgZWFjaCB0ZXN0ZWQgc2NyaXB0LgorCistIElzc3VlICMyMDE1NTogQ2hhbmdlZCBIVFRQIG1ldGhvZCBuYW1lcyBpbiBmYWlsaW5nIHRlc3RzIGluIHRlc3RfaHR0cHNlcnZlcnMKKyAgc28gdGhhdCBwYWNrZXQgZmlsdGVyaW5nIHNvZnR3YXJlIChzcGVjaWZpY2FsbHkgV2luZG93cyBCYXNlIEZpbHRlcmluZyBFbmdpbmUpCisgIGRvZXMgbm90IGludGVyZmVyZSB3aXRoIHRoZSB0cmFuc2FjdGlvbiBzZW1hbnRpY3MgZXhwZWN0ZWQgYnkgdGhlIHRlc3RzLgorCistIElzc3VlICMxOTQ5MzogUmVmYWN0b3JlZCB0aGUgY3R5cGVzIHRlc3QgcGFja2FnZSB0byBza2lwIHRlc3RzIGV4cGxpY2l0bHkKKyAgcmF0aGVyIHRoYW4gc2lsZW50bHkuCisKKy0gSXNzdWUgIzE4NDkyOiBBbGwgcmVzb3VyY2VzIGFyZSBub3cgYWxsb3dlZCB3aGVuIHRlc3RzIGFyZSBub3QgcnVuIGJ5CisgIHJlZ3J0ZXN0LnB5LgorCistIElzc3VlICMyMTYzNDogRml4IHB5c3RvbmUgbWljcm8tYmVuY2htYXJrOiB1c2UgZmxvb3IgZGl2aXNpb24gaW5zdGVhZCBvZiB0cnVlCisgIGRpdmlzaW9uIHRvIGJlbmNobWFyayBpbnRlZ2VycyBpbnN0ZWFkIG9mIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuIFNldCBweXN0b25lCisgIHZlcnNpb24gdG8gMS4yLiBQYXRjaCB3cml0dGVuIGJ5IExlbm5hcnQgUmVnZWJyby4KKworLSBJc3N1ZSAjMjE2MDU6IEFkZGVkIHRlc3RzIGZvciBUa2ludGVyIGltYWdlcy4KKworLSBJc3N1ZSAjMjE0OTM6IEFkZGVkIHRlc3QgZm9yIG50cGF0aC5leHBhbmR1c2VyKCkuICBPcmlnaW5hbCBwYXRjaCBieQorICBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE5OTI1OiBBZGRlZCB0ZXN0cyBmb3IgdGhlIHNwd2QgbW9kdWxlLiBPcmlnaW5hbCBwYXRjaCBieSBWYWpyYXNreSBLb2suCisKKy0gSXNzdWUgIzIxNTIyOiBBZGRlZCBUa2ludGVyIHRlc3RzIGZvciBMaXN0Ym94Lml0ZW1jb25maWd1cmUoKSwKKyAgUGFuZWRXaW5kb3cucGFuZWNvbmZpZ3VyZSgpLCBhbmQgTWVudS5lbnRyeWNvbmZpZ3VyZSgpLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzIxNzc3OiBUaGUgYmluYXJ5IHNlcXVlbmNlIG1ldGhvZHMgb24gYnl0ZXMgYW5kIGJ5dGVhcnJheSBhcmUgbm93CisgIGRvY3VtZW50ZWQgZXhwbGljaXRseSwgcmF0aGVyIHRoYW4gYXNzdW1pbmcgdXNlcnMgd2lsbCBiZSBhYmxlIHRvIGRlcml2ZQorICB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyIGZyb20gdGhlIGJlaGF2aW91ciBvZiB0aGUgY29ycmVzcG9uZGluZyBzdHIgbWV0aG9kcy4KKworV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMyMTY3MSwgIzIyMTYwLCBDVkUtMjAxNC0wMjI0OiBUaGUgYnVuZGxlZCB2ZXJzaW9uIG9mIE9wZW5TU0wgaGFzIGJlZW4KKyAgdXBkYXRlZCB0byAxLjAuMWkuCisKKy0gSXNzdWUgIzEwNzQ3OiBVc2UgdmVyc2lvbmVkIGxhYmVscyBpbiB0aGUgV2luZG93cyBzdGFydCBtZW51LgorICBQYXRjaCBieSBPbGl2ZSBLaWxidXJuLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjIyMDE6IENvbW1hbmQtbGluZSBpbnRlcmZhY2Ugb2YgdGhlIHppcGZpbGUgbW9kdWxlIG5vdyBjb3JyZWN0bHkKKyAgZXh0cmFjdHMgWklQIGZpbGVzIHdpdGggZGlyZWN0b3J5IGVudHJpZXMuICBQYXRjaCBieSBSeWFuIFdpbHNvbi4KKworLSBJc3N1ZSAjMjE5MDY6IE1ha2UgVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkgd29yayBpbiBQeXRob24gMy4KKyAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCistIElzc3VlICMyMTYyOTogRml4IEFyZ3VtZW50IENsaW5pYydzICItLWNvbnZlcnRlcnMiIGZlYXR1cmUuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjE/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTA1LTE4CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyMTQxODogRml4IGEgY3Jhc2ggaW4gdGhlIGJ1aWx0aW4gZnVuY3Rpb24gc3VwZXIoKSB3aGVuIGNhbGxlZCB3aXRob3V0CisgIGFyZ3VtZW50IGFuZCB3aXRob3V0IGN1cnJlbnQgZnJhbWUgKGV4OiBlbWJlZGRlZCBQeXRob24pLgorCistIElzc3VlICMyMTQyNTogRml4IGZsdXNoaW5nIG9mIHN0YW5kYXJkIHN0cmVhbXMgaW4gdGhlIGludGVyYWN0aXZlCisgIGludGVycHJldGVyLgorCistIElzc3VlICMyMTQzNTogSW4gcmFyZSBjYXNlcywgd2hlbiBydW5uaW5nIGZpbmFsaXplcnMgb24gb2JqZWN0cyBpbiBjeWNsaWMKKyAgdHJhc2ggYSBiYWQgcG9pbnRlciBkZXJlZmVyZW5jZSBjb3VsZCBvY2N1ciBkdWUgdG8gYSBzdWJ0bGUgZmxhdyBpbgorICBpbnRlcm5hbCBpdGVyYXRpb24gbG9naWMuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjMTA3NDQ6IEZpeCBQRVAgMzExOCBmb3JtYXQgc3RyaW5ncyBvbiBjdHlwZXMgb2JqZWN0cyB3aXRoIGEgbm9udHJpdmlhbAorICBzaGFwZS4KKworLSBJc3N1ZSAjMjA5OTg6IEZpeGVkIHJlLmZ1bGxtYXRjaCgpIG9mIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybgorICB3aXRoIGlnbm9yZSBjYXNlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMyMTA3NTogZmlsZWlucHV0LkZpbGVJbnB1dCBub3cgcmVhZHMgYnl0ZXMgZnJvbSBzdGFuZGFyZCBzdHJlYW0gaWYKKyAgYmluYXJ5IG1vZGUgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2FtIEtpbWJyZWwuCisKKy0gSXNzdWUgIzIxMzk2OiBGaXggVGV4dElPV3JhcHBlciguLi4sIHdyaXRlX3Rocm91Z2g9VHJ1ZSkgdG8gbm90IGZvcmNlIGEKKyAgZmx1c2goKSBvbiB0aGUgdW5kZXJseWluZyBiaW5hcnkgc3RyZWFtLiAgUGF0Y2ggYnkgYWtpcmEuCisKKy0gSXNzdWUgIzIxNDcwOiBEbyBhIGJldHRlciBqb2Igc2VlZGluZyB0aGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgYnkKKyAgdXNpbmcgZW5vdWdoIGJ5dGVzIHRvIHNwYW4gdGhlIGZ1bGwgc3RhdGUgc3BhY2Ugb2YgdGhlIE1lcnNlbm5lIFR3aXN0ZXIuCisKKy0gSXNzdWUgIzIxMzk4OiBGaXggYW4gdW5pY29kZSBlcnJvciBpbiB0aGUgcHlkb2MgcGFnZXIgd2hlbiB0aGUgZG9jdW1lbnRhdGlvbgorICBjb250YWlucyBjaGFyYWN0ZXJzIG5vdCBlbmNvZGFibGUgdG8gdGhlIHN0ZG91dCBlbmNvZGluZy4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE3NzU2OiBGaXggdGVzdF9jb2RlIHRlc3Qgd2hlbiBydW4gZnJvbSB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uLgorCistIElzc3VlICMxNzc1MjogRml4IGRpc3R1dGlscyB0ZXN0cyB3aGVuIHJ1biBmcm9tIHRoZSBpbnN0YWxsZWQgbG9jYXRpb24uCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTgxMDQ6IEFkZCBpZGxlbGliL2lkbGVfdGVzdC9odGVzdC5weSB3aXRoIGEgZmV3IHNhbXBsZSB0ZXN0cyB0byBiZWdpbgorICBjb25zb2xpZGF0aW5nIGFuZCBpbXByb3ZpbmcgaHVtYW4tdmFsaWRhdGVkIHRlc3RzIG9mIElkbGUuIENoYW5nZSBvdGhlciBmaWxlcworICBhcyBuZWVkZWQgdG8gd29yayB3aXRoIGh0ZXN0LiAgUnVubmluZyB0aGUgbW9kdWxlIGFzIF9fbWFpbl9fIHJ1bnMgYWxsIHRlc3RzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4xcmMxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNC0wNS0wNQorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjEyNzQ6IERlZmluZSBQQVRIX01BWCBmb3IgR05VL0h1cmQgaW4gUHl0aG9uL3B5dGhvbnJ1bi5jLgorCistIElzc3VlICMyMTIwOTogRml4IHNlbmRpbmcgdHVwbGVzIHRvIGN1c3RvbSBnZW5lcmF0b3Igb2JqZWN0cyB3aXRoIHRoZSB5aWVsZAorICBmcm9tIHN5bnRheC4KKworLSBJc3N1ZSAjMjExMzQ6IEZpeCBzZWdmYXVsdCB3aGVuIHN0ciBpcyBjYWxsZWQgb24gYW4gdW5pbml0aWFsaXplZAorICBVbmljb2RlRW5jb2RlRXJyb3IsIFVuaWNvZGVEZWNvZGVFcnJvciwgb3IgVW5pY29kZVRyYW5zbGF0ZUVycm9yIG9iamVjdC4KKworLSBJc3N1ZSAjMTk1Mzc6IEZpeCBQeVVuaWNvZGVfREFUQSgpIGFsaWdubWVudCB1bmRlciBtNjhrLiAgUGF0Y2ggYnkKKyAgQW5kcmVhcyBTY2h3YWIuCisKKy0gSXNzdWUgIzIwOTI5OiBBZGQgYSB0eXBlIGNhc3QgdG8gYXZvaWQgc2hpZnRpbmcgYSBuZWdhdGl2ZSBudW1iZXIuCisKKy0gSXNzdWUgIzIwNzMxOiBQcm9wZXJseSBwb3NpdGlvbiBpbiBzb3VyY2UgY29kZSBmaWxlcyBldmVuIGlmIHRoZXkKKyAgYXJlIG9wZW5lZCBpbiB0ZXh0IG1vZGUuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzIwNjM3OiBLZXktc2hhcmluZyBub3cgYWxzbyB3b3JrcyBmb3IgaW5zdGFuY2UgZGljdGlvbmFyaWVzIG9mCisgIHN1YmNsYXNzZXMuICBQYXRjaCBieSBQZXRlciBJbmdlYnJldHNvbi4KKworLSBJc3N1ZSAjMTI1NDY6IEFsbG93IGBgXHgwMGBgIHRvIGJlIHVzZWQgYXMgYSBmaWxsIGNoYXJhY3RlciB3aGVuIHVzaW5nIHN0ciwgaW50LAorICBmbG9hdCwgYW5kIGNvbXBsZXggX19mb3JtYXRfXyBtZXRob2RzLgorCistIElzc3VlICMxMzU5ODogTW9kaWZ5IHN0cmluZy5Gb3JtYXR0ZXIgdG8gc3VwcG9ydCBhdXRvLW51bWJlcmluZyBvZgorICByZXBsYWNlbWVudCBmaWVsZHMuIEl0IG5vdyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiBzdHIuZm9ybWF0KCkgaW4KKyAgdGhpcyByZWdhcmQuIFBhdGNoZXMgYnkgUGhpbCBFbHNvbiBhbmQgUmFtY2hhbmRyYSBBcHRlLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIxMDg4OiBCdWdmaXggZm9yIGN1cnNlcy53aW5kb3cuYWRkY2goKSByZWdyZXNzaW9uIGluIDMuNC4wLgorICBJbiBwb3J0aW5nIHRvIEFyZ3VtZW50IENsaW5pYywgdGhlIGZpcnN0IHR3byBhcmd1bWVudHMgd2VyZSByZXZlcnNlZC4KKworLSBJc3N1ZSAjMjE0Njk6IFJlZHVjZWQgdGhlIHJpc2sgb2YgZmFsc2UgcG9zaXRpdmVzIGluIHJvYm90cGFyc2VyIGJ5CisgIGNoZWNraW5nIHRvIG1ha2Ugc3VyZSB0aGF0IHJvYm90cy50eHQgaGFzIGJlZW4gcmVhZCBvciBkb2VzIG5vdCBleGlzdAorICBwcmlvciB0byByZXR1cm5pbmcgVHJ1ZSBpbiBjYW5fZmV0Y2goKS4KKworLSBJc3N1ZSAjMjEzMjE6IGl0ZXJ0b29scy5pc2xpY2UoKSBub3cgcmVsZWFzZXMgdGhlIHJlZmVyZW5jZSB0byB0aGUgc291cmNlCisgIGl0ZXJhdG9yIHdoZW4gdGhlIHNsaWNlIGlzIGV4aGF1c3RlZC4gIFBhdGNoIGJ5IEFudG9uIEFmYW5hc3lldi4KKworLSBJc3N1ZSAjOTgxNTogYXNzZXJ0UmFpc2VzIG5vdyB0cmllcyB0byBjbGVhciByZWZlcmVuY2VzIHRvIGxvY2FsIHZhcmlhYmxlcworICBpbiB0aGUgZXhjZXB0aW9uJ3MgdHJhY2ViYWNrLgorCistIElzc3VlICMxMzIwNDogQ2FsbGluZyBzeXMuZmxhZ3MuX19uZXdfXyB3b3VsZCBjcmFzaCB0aGUgaW50ZXJwcmV0ZXIsCisgIG5vdyBpdCByYWlzZXMgYSBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE5Mzg1OiBNYWtlIG9wZXJhdGlvbnMgb24gYSBjbG9zZWQgZGJtLmR1bWIgZGF0YWJhc2UgYWx3YXlzIHJhaXNlIHRoZQorICBzYW1lIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMjEyMDc6IERldGVjdCB3aGVuIHRoZSBvcy51cmFuZG9tIGNhY2hlZCBmZCBoYXMgYmVlbiBjbG9zZWQgb3IKKyAgcmVwbGFjZWQsIGFuZCBvcGVuIGl0IGFuZXcuCisKKy0gSXNzdWUgIzIxMjkxOiBzdWJwcm9jZXNzJ3MgUG9wZW4ud2FpdCgpIGlzIG5vdyB0aHJlYWQgc2FmZSBzbyB0aGF0CisgIG11bHRpcGxlIHRocmVhZHMgbWF5IGJlIGNhbGxpbmcgd2FpdCgpIG9yIHBvbGwoKSBvbiBhIFBvcGVuIGluc3RhbmNlCisgIGF0IHRoZSBzYW1lIHRpbWUgd2l0aG91dCBsb3NpbmcgdGhlIFBvcGVuLnJldHVybmNvZGUgdmFsdWUuCisKKy0gSXNzdWUgIzIxMTI3OiBQYXRoIG9iamVjdHMgY2FuIG5vdyBiZSBpbnN0YW50aWF0ZWQgZnJvbSBzdHIgc3ViY2xhc3MKKyAgaW5zdGFuY2VzIChzdWNoIGFzIGBgbnVtcHkuc3RyX2BgKS4KKworLSBJc3N1ZSAjMTUwMDI6IHVybGxpYi5yZXNwb25zZSBvYmplY3QgdG8gdXNlIF9UZW1wb3JhcnlGaWxlV3JhcHBlciAoYW5kCisgIF9UZW1wb3JhcnlGaWxlQ2xvc2VyKSBmYWNpbGl0eS4gUHJvdmlkZXMgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSBmaWxlCisgIGRlc2NyaXB0b3IgY2xvc2UuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IENocmlzdGlhbiBUaGV1bmUuCisKKy0gSXNzdWUgIzEyMjIwOiBtaW5kb20gbm93IHJhaXNlcyBhIGN1c3RvbSBWYWx1ZUVycm9yIGluZGljYXRpbmcgaXQgZG9lc24ndAorICBzdXBwb3J0IHNwYWNlcyBpbiBVUklzIGluc3RlYWQgb2YgbGV0dGluZyBhICdzcGxpdCcgVmFsdWVFcnJvciBidWJibGUgdXAuCisKKy0gSXNzdWUgIzIxMjM5OiBwYXRjaC5zdG9wYWxsKCkgZGlkbid0IHdvcmsgZGV0ZXJtaW5pc3RpY2FsbHkgd2hlbiB0aGUgc2FtZQorICBuYW1lIHdhcyBwYXRjaGVkIG1vcmUgdGhhbiBvbmNlLgorCistIElzc3VlICMyMTIyMjogUGFzc2luZyBuYW1lIGtleXdvcmQgYXJndW1lbnQgdG8gbW9jay5jcmVhdGVfYXV0b3NwZWMgbm93CisgIHdvcmtzLgorCistIElzc3VlICMyMTE5NzogQWRkIGxpYjY0IC0+IGxpYiBzeW1saW5rIGluIHZlbnZzIG9uIDY0LWJpdCBub24tT1MgWCBQT1NJWC4KKworLSBJc3N1ZSAjMTc0OTg6IFNvbWUgU01UUCBzZXJ2ZXJzIGRpc2Nvbm5lY3QgYWZ0ZXIgY2VydGFpbiBlcnJvcnMsIHZpb2xhdGluZworICBzdHJpY3QgUkZDIGNvbmZvcm1hbmNlLiAgSW5zdGVhZCBvZiBsb3NpbmcgdGhlIGVycm9yIGNvZGUgd2hlbiB3ZSBpc3N1ZSB0aGUKKyAgc3Vic2VxdWVudCBSU0VULCBzbXRwbGliIG5vdyByZXR1cm5zIHRoZSBlcnJvciBjb2RlIGFuZCBkZWZlcnMgcmFpc2luZyB0aGUKKyAgU01UUFNlcnZlckRpc2Nvbm5lY3RlZCBlcnJvciB1bnRpbCB0aGUgbmV4dCBjb21tYW5kIGlzIGlzc3VlZC4KKworLSBJc3N1ZSAjMTc4MjY6IHNldHRpbmcgYW4gaXRlcmFibGUgc2lkZV9lZmZlY3Qgb24gYSBtb2NrIGZ1bmN0aW9uIGNyZWF0ZWQgYnkKKyAgY3JlYXRlX2F1dG9zcGVjIG5vdyB3b3Jrcy4gUGF0Y2ggYnkgS3VzaGFsIERhcy4KKworLSBJc3N1ZSAjNzc3NjogRml4IGBgSG9zdDpgYCBoZWFkZXIgYW5kIHJlY29ubmVjdGlvbiB3aGVuIHVzaW5nCisgIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLnNldF90dW5uZWwoKS4gUGF0Y2ggYnkgTmlrb2xhdXMgUmF0aC4KKworLSBJc3N1ZSAjMjA5Njg6IHVuaXR0ZXN0Lm1vY2suTWFnaWNNb2NrIG5vdyBzdXBwb3J0cyBkaXZpc2lvbi4KKyAgUGF0Y2ggYnkgSm9oYW5uZXMgQmFpdGVyLgorCistIElzc3VlICMyMTUyOSAoQ1ZFLTIwMTQtNDYxNik6IEZpeCBhcmJpdHJhcnkgbWVtb3J5IGFjY2VzcyBpbgorICBKU09ORGVjb2Rlci5yYXdfZGVjb2RlIHdpdGggYSBuZWdhdGl2ZSBzZWNvbmQgcGFyYW1ldGVyLiBCdWcgcmVwb3J0ZWQgYnkgR3VpZG8KKyAgVnJhbmtlbi4KKworLSBJc3N1ZSAjMjExNjk6IGdldHBhc3Mgbm93IGhhbmRsZXMgbm9uLWFzY2lpIGNoYXJhY3RlcnMgdGhhdCB0aGUKKyAgaW5wdXQgc3RyZWFtIGVuY29kaW5nIGNhbm5vdCBlbmNvZGUgYnkgcmUtZW5jb2RpbmcgdXNpbmcgdGhlCisgIHJlcGxhY2UgZXJyb3IgaGFuZGxlci4KKworLSBJc3N1ZSAjMjExNzE6IEZpeGVkIHVuZG9jdW1lbnRlZCBmaWx0ZXIgQVBJIG9mIHRoZSByb3QxMyBjb2RlYy4KKyAgUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMjExNzI6IGlzaW5zdGFuY2UgY2hlY2sgcmVsYXhlZCBmcm9tIGRpY3QgdG8gY29sbGVjdGlvbnMuTWFwcGluZy4KKworLSBJc3N1ZSAjMjExNTU6IGFzeW5jaW8uRXZlbnRMb29wLmNyZWF0ZV91bml4X3NlcnZlcigpIG5vdyByYWlzZXMgYSBWYWx1ZUVycm9yCisgIGlmIHBhdGggYW5kIHNvY2sgYXJlIHNwZWNpZmllZCBhdCB0aGUgc2FtZSB0aW1lLgorCistIElzc3VlICMyMTE0OTogSW1wcm92ZWQgdGhyZWFkLXNhZmV0eSBpbiBsb2dnaW5nIGNsZWFudXAgZHVyaW5nIGludGVycHJldGVyCisgIHNodXRkb3duLiBUaGFua3MgdG8gRGV2aW4gSmVhbnBpZXJyZSBmb3IgdGhlIHBhdGNoLgorCistIElzc3VlICMyMDE0NTogYGFzc2VydFJhaXNlc1JlZ2V4YCBhbmQgYGFzc2VydFdhcm5zUmVnZXhgIG5vdyByYWlzZSBhCisgIFR5cGVFcnJvciBpZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIG5vdCBhIHN0cmluZyBvciBjb21waWxlZCByZWdleC4KKworLSBJc3N1ZSAjMjEwNTg6IEZpeCBhIGxlYWsgb2YgZmlsZSBkZXNjcmlwdG9yIGluCisgIDpmdW5jOmB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGVgLCBjbG9zZSB0aGUgZmlsZSBkZXNjcmlwdG9yIGlmCisgIDpmdW5jOmBpby5vcGVuYCBmYWlscworCistIElzc3VlICMyMTIwMDogUmV0dXJuIE5vbmUgZnJvbSBwa2d1dGlsLmdldF9sb2FkZXIoKSB3aGVuIF9fc3BlY19fIGlzIG1pc3NpbmcuCisKKy0gSXNzdWUgIzIxMDEzOiBFbmhhbmNlIHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkgd2hlbiB1c2VkIGZvciBzZXJ2ZXIgc2lkZQorICBzb2NrZXRzIHRvIHByb3ZpZGUgYmV0dGVyIHNlY3VyaXR5IGJ5IGRlZmF1bHQuCisKIC0gSXNzdWUgIzIwNjMzOiBSZXBsYWNlIHJlbGF0aXZlIGltcG9ydCBieSBhYnNvbHV0ZSBpbXBvcnQuCiAKKy0gSXNzdWUgIzIwOTgwOiBTdG9wIHdyYXBwaW5nIGV4Y2VwdGlvbiB3aGVuIHVzaW5nIFRocmVhZFBvb2wuCisKIC0gSXNzdWUgIzIxMDgyOiBJbiBvcy5tYWtlZGlycywgZG8gbm90IHNldCB0aGUgcHJvY2Vzcy13aWRlIHVtYXNrLiBOb3RlIHRoaXMKICAgY2hhbmdlcyBiZWhhdmlvciBvZiBtYWtlZGlycyB3aGVuIGV4aXN0X29rPVRydWUuCiAKLS0gSXNzdWUgIzIwODc1OiBQcmV2ZW50IHBvc3NpYmxlIGd6aXAgIidyZWFkJyBpcyBub3QgZGVmaW5lZCIgTmFtZUVycm9yLgotICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCistIElzc3VlICMyMDk5MDogRml4IGlzc3VlcyBmb3VuZCBieSBweWZsYWtlcyBmb3IgbXVsdGlwcm9jZXNzaW5nLgorCistIElzc3VlICMyMTAxNTogU1NMIGNvbnRleHRzIHdpbGwgbm93IGF1dG9tYXRpY2FsbHkgc2VsZWN0IGFuIGVsbGlwdGljCisgIGN1cnZlIGZvciBFQ0RIIGtleSBleGNoYW5nZSBvbiBPcGVuU1NMIDEuMC4yIGFuZCBsYXRlciwgYW5kIG90aGVyd2lzZQorICBkZWZhdWx0IHRvICJwcmltZTI1NnYxIi4KKworLSBJc3N1ZSAjMjA5OTU6IEVuaGFuY2UgZGVmYXVsdCBjaXBoZXJzIHVzZWQgYnkgdGhlIHNzbCBtb2R1bGUgdG8gZW5hYmxlCisgIGJldHRlciBzZWN1cml0eSBhbiBwcmlvcml0aXplIHBlcmZlY3QgZm9yd2FyZCBzZWNyZWN5LgorCistIElzc3VlICMyMDg4NDogRG9uJ3QgYXNzdW1lIHRoYXQgX19maWxlX18gaXMgZGVmaW5lZCBvbiBpbXBvcnRsaWIuX19pbml0X18uCisKKy0gSXNzdWUgIzIxNDk5OiBJZ25vcmUgX19idWlsdGluc19fIGluIHNldmVyYWwgdGVzdF9pbXBvcnRsaWIudGVzdF9hcGkgdGVzdHMuCisKKy0gSXNzdWUgIzIwODc5OiBEZWxheSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgZW5jb2RpbmcgYW5kIGRlY29kaW5nIHRhYmxlcyBmb3IKKyAgYmFzZTMyLCBhc2NpaTg1IGFuZCBiYXNlODUgY29kZWNzIGluIHRoZSBiYXNlNjQgbW9kdWxlLCBhbmQgZGVsYXkgdGhlCisgIGluaXRpYWxpemF0aW9uIG9mIHRoZSB1bnF1b3RlX3RvX2J5dGVzKCkgdGFibGUgb2YgdGhlIHVybGxpYi5wYXJzZSBtb2R1bGUsIHRvCisgIG5vdCB3YXN0ZSBtZW1vcnkgaWYgdGhlc2UgbW9kdWxlcyBhcmUgbm90IHVzZWQuCisKKy0gSXNzdWUgIzE5MTU3OiBJbmNsdWRlIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBpbiB0aGUgdXN1YWJsZSBob3N0cyBmb3IgSVB2NgorICBpbiBpcGFkZHJlc3MuCiAKIC0gSXNzdWUgIzExNTk5OiBXaGVuIGFuIGV4dGVybmFsIGNvbW1hbmQgKGUuZy4gY29tcGlsZXIpIGZhaWxzLCBkaXN0dXRpbHMgbm93CiAgIHByaW50cyBvdXQgdGhlIHdob2xlIGNvbW1hbmQgbGluZSAoaW5zdGVhZCBvZiBqdXN0IHRoZSBjb21tYW5kIG5hbWUpIGlmIHRoZQpAQCAtMTUwLDY0ICsyMDI3LDMxMiBAQAogLSBJc3N1ZSAjNDkzMTogZGlzdHV0aWxzIHNob3VsZCBub3QgcHJvZHVjZSB1bmhlbHBmdWwgImVycm9yOiBOb25lIiBtZXNzYWdlcwogICBhbnltb3JlLiAgZGlzdHV0aWxzLnV0aWwuZ3Jva19lbnZpcm9ubWVudF9lcnJvciBpcyBrZXB0IGJ1dCBkb2MtZGVwcmVjYXRlZC4KIAorLSBJc3N1ZSAjMjA4NzU6IFByZXZlbnQgcG9zc2libGUgZ3ppcCAiJ3JlYWQnIGlzIG5vdCBkZWZpbmVkIiBOYW1lRXJyb3IuCisgIFBhdGNoIGJ5IENsYXVkaXUgUG9wYS4KKworLSBJc3N1ZSAjMTE1NTg6IGBgZW1haWwubWVzc2FnZS5NZXNzYWdlLmF0dGFjaGBgIG5vdyByZXR1cm5zIGEgbW9yZQorICB1c2VmdWwgZXJyb3IgbWVzc2FnZSBpZiBgYGF0dGFjaGBgIGlzIGNhbGxlZCBvbiBhIG1lc3NhZ2UgZm9yIHdoaWNoCisgIGBgaXNfbXVsdGlwYXJ0YGAgaXMgRmFsc2UuCisKIC0gSXNzdWUgIzIwMjgzOiBSRSBwYXR0ZXJuIG1ldGhvZHMgbm93IGFjY2VwdCB0aGUgc3RyaW5nIGtleXdvcmQgcGFyYW1ldGVycwogICBhcyBkb2N1bWVudGVkLiAgVGhlIHBhdHRlcm4gYW5kIHNvdXJjZSBrZXl3b3JkIHBhcmFtZXRlcnMgYXJlIGxlZnQgYXMKICAgZGVwcmVjYXRlZCBhbGlhc2VzLgogCi0tIElzc3VlICMyMTMyMzogRml4IGh0dHAuc2VydmVyIHRvIGFnYWluIGhhbmRsZSBzY3JpcHRzIGluIENHSSBzdWJkaXJlY3RvcmllcywKLSAgYnJva2VuIGJ5IHRoZSBmaXggZm9yIHNlY3VyaXR5IGlzc3VlICMxOTQzNS4gIFBhdGNoIGJ5IFphY2ggQnlybmUuCi0KLS0gSXNzdWUgIzIxNTI5IChDVkUtMjAxNC00NjE2KTogRml4IGFyYml0cmFyeSBtZW1vcnkgYWNjZXNzIGluCi0gIEpTT05EZWNvZGVyLnJhd19kZWNvZGUgd2l0aCBhIG5lZ2F0aXZlIHNlY29uZCBwYXJhbWV0ZXIuIEJ1ZyByZXBvcnRlZCBieSBHdWlkbwotICBWcmFua2VuLgotCi1UZXN0cwotLS0tLS0KLQotLSBJc3N1ZSAjMTc3NTI6IEZpeCBkaXN0dXRpbHMgdGVzdHMgd2hlbiBydW4gZnJvbSB0aGUgaW5zdGFsbGVkIGxvY2F0aW9uLgotCi0tIElzc3VlICMyMDk0NjogQ29ycmVjdCBhbGlnbm1lbnQgYXNzdW1wdGlvbnMgb2Ygc29tZSBjdHlwZXMgdGVzdHMuCi0KLS0gSXNzdWUgIzIwOTM5OiBGaXggdGVzdF9nZXR1cmwgZmFpbHVyZSBpbiB0ZXN0X3VybGxpYm5ldCBkdWUgdG8KLSAgbmV3IHJlZGlyZWN0IG9mIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8gdG8gaHR0cHM6Ly93d3cucHl0aG9uLm9yZy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwOS1NYXItMjAxNCoKLQotTm8gY2hhbmdlcyBmcm9tIHJlbGVhc2UgY2FuZGlkYXRlIDIuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjUgcmVsZWFzZSBjYW5kaWRhdGUgMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDAyLU1hci0yMDE0KgotCi1Db3JlIGFuZCBCdWlsdGlucwotLS0tLS0tLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMjA3MzE6IFByb3Blcmx5IHBvc2l0aW9uIGluIHNvdXJjZSBjb2RlIGZpbGVzIGV2ZW4gaWYgdGhleQotICBhcmUgb3BlbmVkIGluIHRleHQgbW9kZS4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTk2MTk6IHN0ci5lbmNvZGUsIGJ5dGVzLmRlY29kZSBhbmQgYnl0ZWFycmF5LmRlY29kZSBub3cgdXNlIGFuCi0gIGludGVybmFsIEFQSSB0byB0aHJvdyBMb29rdXBFcnJvciBmb3Iga25vd24gbm9uLXRleHQgZW5jb2RpbmdzLCByYXRoZXIKLSAgdGhhbiBhdHRlbXB0aW5nIHRoZSBlbmNvZGluZyBvciBkZWNvZGluZyBvcGVyYXRpb24gYW5kIHRoZW4gdGhyb3dpbmcgYQotICBUeXBlRXJyb3IgZm9yIGFuIHVuZXhwZWN0ZWQgb3V0cHV0IHR5cGUuIChUaGUgbGF0dGVyIG1lY2hhbmlzbSByZW1haW5zCi0gIGluIHBsYWNlIGZvciB0aGlyZCBwYXJ0eSBub24tdGV4dCBlbmNvZGluZ3MpCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQogLSBJc3N1ZSAjMjA3Nzg6IEZpeCBtb2R1bGVmaW5kZXIgdG8gd29yayB3aXRoIGJ5dGVjb2RlLW9ubHkgbW9kdWxlcy4KIAogLSBJc3N1ZSAjMjA3OTE6IGNvcHkuY29weSgpIG5vdyBkb2Vzbid0IG1ha2UgYSBjb3B5IHdoZW4gdGhlIGlucHV0IGlzCiAgIGEgYnl0ZXMgb2JqZWN0LiAgSW5pdGlhbCBwYXRjaCBieSBQZXRlciBPdHRlbi4KIAotLSBJc3N1ZSAjMjA2MjE6IEZpeGVzIGEgemlwaW1wb3J0IGJ1ZyBpbnRyb2R1Y2VkIGluIDMuMy40IHRoYXQgY291bGQgY2F1c2UKLSAgc3B1cmlvdXMgY3Jhc2hlcyBvciBTeXN0ZW1FcnJvcnMgd2hlbiBpbXBvcnRpbmcgbW9kdWxlcyBvciBwYWNrYWdlcyBmcm9tIGEKLSAgemlwIGZpbGUuICBUaGUgY2hhbmdlIGNhdXNpbmcgdGhlIHByb2JsZW0gd2FzIHJldmVydGVkLgorLSBJc3N1ZSAjMTk3NDg6IE9uIEFJWCwgdGltZS5ta3RpbWUoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgZm9yIHllYXIKKyAgb3V0c2l6ZSByYW5nZSBbMTkwMjsgMjAzN10uCisKKy0gSXNzdWUgIzIwODE2OiBGaXggaW5zcGVjdC5nZXRjYWxsYXJncygpIHRvIHJhaXNlIGNvcnJlY3QgVHlwZUVycm9yIGZvcgorICBtaXNzaW5nIGtleXdvcmQtb25seSBhcmd1bWVudHMuIFBhdGNoIGJ5IEplcmVtaWFoIExvd2luLgorCistIElzc3VlICMyMDgxNzogRml4IGluc3BlY3QuZ2V0Y2FsbGFyZ3MoKSB0byBmYWlsIGNvcnJlY3RseSBpZiBtb3JlCisgIHRoYW4gMyBhcmd1bWVudHMgYXJlIG1pc3NpbmcuIFBhdGNoIGJ5IEplcmVtaWFoIExvd2luLgorCistIElzc3VlICM2Njc2OiBFbnN1cmUgYSBtZWFuaW5nZnVsIGV4Y2VwdGlvbiBpcyByYWlzZWQgd2hlbiBhdHRlbXB0aW5nCisgIHRvIHBhcnNlIG1vcmUgdGhhbiBvbmUgWE1MIGRvY3VtZW50IHBlciBweWV4cGF0IHhtbHBhcnNlciBpbnN0YW5jZS4KKyAgKE9yaWdpbmFsIHBhdGNoZXMgYnkgSGlyb2thenUgWWFtYW1vdG8gYW5kIEFtYXVyeSBGb3JnZW90IGQnQXJjLCB3aXRoCisgIHN1Z2dlc3RlZCB3b3JkaW5nIGJ5IERhdmlkIEd1dHRlcmlkZ2UpCisKKy0gSXNzdWUgIzIxMTE3OiBGaXggaW5zcGVjdC5zaWduYXR1cmUgdG8gYmV0dGVyIHN1cHBvcnQgZnVuY3Rvb2xzLnBhcnRpYWwuCisgIER1ZSB0byB0aGUgc3BlY2lmaWNzIG9mIGZ1bmN0b29scy5wYXJ0aWFsIGltcGxlbWVudGF0aW9uLAorICBwb3NpdGlvbmFsLW9yLWtleXdvcmQgYXJndW1lbnRzIHBhc3NlZCBhcyBrZXl3b3JkIGFyZ3VtZW50cyBiZWNvbWUKKyAga2V5d29yZC1vbmx5LgorCistIElzc3VlICMyMTIwOTogRml4IGFzeW5jaW8udGFza3MuQ29yb1dyYXBwZXIgdG8gd29ya2Fyb3VuZCBhIGJ1ZworICBpbiB5aWVsZC1mcm9tIGltcGxlbWVudGF0aW9uIGluIENQeXRob25zIHByaW9yIHRvIDMuNC4xLgorCistIGFzeW5jaW86IEFkZCBnaV97ZnJhbWUscnVubmluZyxjb2RlfSBwcm9wZXJ0aWVzIHRvIENvcm9XcmFwcGVyCisgICh1cHN0cmVhbSBpc3N1ZSAjMTYzKS4KKworLSBJc3N1ZSAjMjEzMTE6IEF2b2lkIGV4Y2VwdGlvbiBpbiBfb3N4X3N1cHBvcnQgd2l0aCBub24tc3RhbmRhcmQgY29tcGlsZXIKKyAgY29uZmlndXJhdGlvbnMuICBQYXRjaCBieSBKb2huIFN6YWttZWlzdGVyLgorCistIElzc3VlICMxMTU3MTogRW5zdXJlIHRoYXQgdGhlIHR1cnRsZSB3aW5kb3cgYmVjb21lcyB0aGUgdG9wbW9zdCB3aW5kb3cKKyAgd2hlbiBsYXVuY2hlZCBvbiBPUyBYLgorCitFeHRlbnNpb24gTW9kdWxlcworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjEyNzY6IHBvc2l4bW9kdWxlOiBEb24ndCBkZWZpbmUgVVNFX1hBVFRSUyBvbiBLRnJlZUJTRCBhbmQgdGhlIEh1cmQuCisKKy0gSXNzdWUgIzIxMjI2OiBTZXQgdXAgbW9kdWxlcyBwcm9wZXJseSBpbiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdAorICAoYW5kIGZyaWVuZHMpLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzIxMTM5OiBDaGFuZ2UgZGVmYXVsdCBwYXJhZ3JhcGggd2lkdGggdG8gNzIsIHRoZSBQRVAgOCByZWNvbW1lbmRhdGlvbi4KKworLSBJc3N1ZSAjMjEyODQ6IFBhcmFncmFwaCByZWZvcm1hdCB0ZXN0IHBhc3NlcyBhZnRlciB1c2VyIGNoYW5nZXMgcmVmb3JtYXQgd2lkdGguCisKKy0gSXNzdWUgIzE3NjU0OiBFbnN1cmUgSURMRSBtZW51cyBhcmUgY3VzdG9taXplZCBwcm9wZXJseSBvbiBPUyBYIGZvcgorICBub24tZnJhbWV3b3JrIGJ1aWxkcyBhbmQgZm9yIGFsbCB2YXJpYW50cyBvZiBUay4KKworQnVpbGQKKy0tLS0tCisKKy0gVGhlIFdpbmRvd3MgYnVpbGQgbm93IGluY2x1ZGVzIE9wZW5TU0wgMS4wLjFnCisKKy0gSXNzdWUgIzIxMjg1OiBSZWZhY3RvciBhbmQgZml4IGN1cnNlcyBjb25maWd1cmUgY2hlY2sgdG8gYWx3YXlzIHNlYXJjaAorICBpbiBhIG5jdXJzZXN3IGRpcmVjdG9yeS4KKworLSBJc3N1ZSAjMTUyMzQ6IEZvciBCZXJrZWx5REIgYW5kIFNxbGl0ZSwgb25seSBhZGQgdGhlIGZvdW5kIGxpYnJhcnkgYW5kCisgIGluY2x1ZGUgZGlyZWN0b3JpZXMgaWYgdGhleSBhcmVuJ3QgYWxyZWFkeSBiZWluZyBzZWFyY2hlZC4gVGhpcyBhdm9pZHMKKyAgYW4gZXhwbGljaXQgcnVudGltZSBsaWJyYXJ5IGRlcGVuZGVuY3kuCisKKy0gSXNzdWUgIzIwNjQ0OiBPUyBYIGluc3RhbGxlciBidWlsZCBzdXBwb3J0IGZvciBkb2N1bWVudGF0aW9uIGJ1aWxkIGNoYW5nZXMKKyAgaW4gMy40LjE6IGFzc3VtZSBleHRlcm5hbGx5IHN1cHBsaWVkIHNwaGlueC1idWlsZCBpcyBhdmFpbGFibGUgaW4gL3Vzci9iaW4uCisKK0MgQVBJCistLS0tLQorCistIElzc3VlICMyMDk0MjogUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0KCkgbm8gbG9uZ2VyIHNldHMgX19maWxlX18gdG8KKyAgbWF0Y2ggd2hhdCBpbXBvcnRsaWIgZG9lczsgdGhpcyBhZmZlY3RzIF9mcm96ZW5faW1wb3J0bGliIGFzIHdlbGwgYXMgYW55CisgIG1vZHVsZSBsb2FkZWQgdXNpbmcgaW1wLmluaXRfZnJvemVuKCkuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTczODY6IEV4cGFuZGVkIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGBgRG9jL21ha2UuYmF0YGAgc2NyaXB0IHRvIG1ha2UKKyAgaXQgbXVjaCBtb3JlIGNvbXBhcmFibGUgdG8gYGBEb2MvTWFrZWZpbGVgYC4KKworLSBJc3N1ZSAjMjEwNDM6IFJlbW92ZSB0aGUgcmVjb21tZW5kYXRpb24gZm9yIHNwZWNpZmljIENBIG9yZ2FuaXphdGlvbnMgYW5kIHRvCisgIG1lbnRpb24gdGhlIGFiaWxpdHkgdG8gbG9hZCB0aGUgT1MgY2VydGlmaWNhdGVzLgorCistIElzc3VlICMyMDc2NTogQWRkIG1pc3NpbmcgZG9jdW1lbnRhdGlvbiBmb3IgUHVyZVBhdGgud2l0aF9uYW1lKCkgYW5kCisgIFB1cmVQYXRoLndpdGhfc3VmZml4KCkuCisKKy0gSXNzdWUgIzE5NDA3OiBOZXcgcGFja2FnZSBpbnN0YWxsYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBndWlkZXMgYmFzZWQgb24KKyAgdGhlIFB5dGhvbiBQYWNrYWdpbmcgQXV0aG9yaXR5IHRvb2xzLiBFeGlzdGluZyBndWlkZXMgaGF2ZSBiZWVuIHJldGFpbmVkCisgIGFzIGxlZ2FjeSBsaW5rcyBmcm9tIHRoZSBkaXN0dXRpbHMgZG9jcywgYXMgdGhleSBzdGlsbCBjb250YWluIHNvbWUKKyAgcmVxdWlyZWQgcmVmZXJlbmNlIG1hdGVyaWFsIGZvciB0b29sIGRldmVsb3BlcnMgdGhhdCBpc24ndCByZWNvcmRlZAorICBhbnl3aGVyZSBlbHNlLgorCistIElzc3VlICMxOTY5NzogRG9jdW1lbnQgY2FzZXMgd2hlcmUgX19tYWluX18uX19zcGVjX18gaXMgTm9uZS4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE4NjA0OiBDb25zb2xpZGF0ZWQgY2hlY2tzIGZvciBHVUkgYXZhaWxhYmlsaXR5LiAgQWxsIHBsYXRmb3JtcyBub3cKKyAgYXQgbGVhc3QgY2hlY2sgd2hldGhlciBUayBjYW4gYmUgaW5zdGFudGlhdGVkIHdoZW4gdGhlIEdVSSByZXNvdXJjZSBpcworICByZXF1ZXN0ZWQuCisKKy0gSXNzdWUgIzIxMjc1OiBGaXggYSBzb2NrZXQgdGVzdCBvbiBLRnJlZUJTRC4KKworLSBJc3N1ZSAjMjEyMjM6IFBhc3MgdGVzdF9zaXRlL3Rlc3Rfc3RhcnR1cF9pbXBvcnRzIHdoZW4gc29tZSBvZiB0aGUgZXh0ZW5zaW9ucworICBhcmUgYnVpbHQgYXMgYnVpbHRpbnMuCisKKy0gSXNzdWUgIzIwNjM1OiBBZGRlZCB0ZXN0cyBmb3IgVGsgZ2VvbWV0cnkgbWFuYWdlcnMuCisKKy0gQWRkIHRlc3QgY2FzZSBmb3IgZnJlZXplLgorCistIElzc3VlICMyMDc0MzogRml4IGEgcmVmZXJlbmNlIGxlYWsgaW4gdGVzdF90Y2wuCisKKy0gSXNzdWUgIzIxMDk3OiBNb3ZlIHRlc3RfbmFtZXNwYWNlX3BrZ3MgaW50byB0ZXN0X2ltcG9ydGxpYi4KKworLSBJc3N1ZSAjMjA5Mzk6IEF2b2lkIHZhcmlvdXMgbmV0d29yayB0ZXN0IGZhaWx1cmVzIGR1ZSB0byBuZXcKKyAgcmVkaXJlY3Qgb2YgaHR0cDovL3d3dy5weXRob24ub3JnLyB0byBodHRwczovL3d3dy5weXRob24ub3JnOgorICB1c2UgaHR0cDovL3d3dy5leGFtcGxlLmNvbSBpbnN0ZWFkLgorCistIElzc3VlICMyMDY2ODogYXN5bmNpbyB0ZXN0cyBubyBsb25nZXIgcmVseSBvbiB0ZXN0cy50eHQgZmlsZS4KKyAgKFBhdGNoIGJ5IFZhanJhc2t5IEtvaykKKworLSBJc3N1ZSAjMjEwOTM6IFByZXZlbnQgZmFpbHVyZXMgb2YgY3R5cGVzIHRlc3RfbWFjaG9saWIgb24gT1MgWCBpZiBhCisgIGNvcHkgb2YgbGlieiBleGlzdHMgaW4gJEhPTUUvbGliIG9yIC91c3IvbG9jYWwvbGliLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBBZGQgc3VwcG9ydCBmb3IgYGB5aWVsZCBmcm9tYGAgdG8gMnRvMy4KKworLSBBZGQgc3VwcG9ydCBmb3IgdGhlIFBFUCA0NjUgbWF0cml4IG11bHRpcGxpY2F0aW9uIG9wZXJhdG9yIHRvIDJ0bzMuCisKKy0gSXNzdWUgIzE2MDQ3OiBGaXggbW9kdWxlIGV4Y2VwdGlvbiBsaXN0IGFuZCBfX2ZpbGVfXyBoYW5kbGluZyBpbiBmcmVlemUuCisgIFBhdGNoIGJ5IE1lYWRvciBJbmdlLgorCistIElzc3VlICMxMTgyNDogQ29uc2lkZXIgQUJJIHRhZ3MgaW4gZnJlZXplLiBQYXRjaCBieSBNZWFkb3IgSW5nZS4KKworLSBJc3N1ZSAjMjA1MzU6IFBZVEhPTldBUk5JTkcgbm8gbG9uZ2VyIGFmZmVjdHMgdGhlIHJ1bl90ZXN0cy5weSBzY3JpcHQuCisgIFBhdGNoIGJ5IEFyZnJldmVyIEZyZWh0ZXMgVGFpZmVyc2FyIEFyYWhlc2lzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wPworPT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxNC0wMy0xNgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIwOTM5OiBGaXggdGVzdF9nZXR1cmwgZmFpbHVyZSBpbiB0ZXN0X3VybGxpYm5ldCBkdWUgdG8KKyAgbmV3IHJlZGlyZWN0IG9mIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8gdG8gaHR0cHM6Ly93d3cucHl0aG9uLm9yZy4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIE1lcmdlIGluIGFsbCBkb2N1bWVudGF0aW9uIGNoYW5nZXMgc2luY2UgYnJhbmNoaW5nIDMuNC4wcmMxLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIHJlbGVhc2UgY2FuZGlkYXRlIDM/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTQtMDMtMDkKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzIwNzg2OiBGaXggc2lnbmF0dXJlcyBmb3IgZGljdC5fX2RlbGl0ZW1fXyBhbmQKKyAgcHJvcGVydHkuX19kZWxldGVfXyBidWlsdGlucy4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMyMDgzOTogRG9uJ3QgdHJpZ2dlciBhIERlcHJlY2F0aW9uV2FybmluZyBpbiB0aGUgc3RpbGwgc3VwcG9ydGVkCisgIHBrZ3V0aWwuZ2V0X2xvYWRlcigpIEFQSSB3aGVuIF9fbG9hZGVyX18gaXNuJ3Qgc2V0IG9uIGEgbW9kdWxlIChub3IKKyAgd2hlbiBwa2d1dGlsLmZpbmRfbG9hZGVyKCkgaXMgY2FsbGVkIGRpcmVjdGx5KS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzE0NTEyOiBMYXVuY2ggcHlkb2MgLWIgaW5zdGVhZCBvZiBweWRvY2d1aS5weXcgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMjA3NDg6IFVuaW5zdGFsbGluZyBwaXAgZG9lcyBub3QgbGVhdmUgYmVoaW5kIHRoZSBweWMgb2YKKyAgdGhlIHVuaW5zdGFsbGVyIGFueW1vcmUuCisKKy0gSXNzdWUgIzIwNTY4OiBUaGUgV2luZG93cyBpbnN0YWxsZXIgbm93IGluc3RhbGxzIHRoZSB1bnZlcnNpb25lZCBgYHBpcGBgCisgIGNvbW1hbmQgaW4gYWRkaXRpb24gdG8gdGhlIHZlcnNpb25lZCBgYHBpcDNgYCBhbmQgYGBwaXAzLjRgYCBjb21tYW5kcy4KKworLSBJc3N1ZSAjMjA3NTc6IFRoZSBlbnN1cmVwaXAgaGVscGVyIGZvciB0aGUgV2luZG93cyB1bmluc3RhbGxlciBub3cgc2tpcHMKKyAgdW5pbnN0YWxsaW5nIHBpcCAocmF0aGVyIHRoYW4gZmFpbGluZykgaWYgdGhlIHVzZXIgaGFzIHVwZGF0ZWQgcGlwIHRvIGEKKyAgZGlmZmVyZW50IHZlcnNpb24gZnJvbSB0aGUgb25lIGJ1bmRsZWQgd2l0aCBlbnN1cmVwaXAuCisKKy0gSXNzdWUgIzIwNDY1OiBVcGRhdGUgT1MgWCBhbmQgV2luZG93cyBpbnN0YWxsZXIgYnVpbGRzIHRvIHVzZQorICBTUUxpdGUgMy44LjMuMS4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCByZWxlYXNlIGNhbmRpZGF0ZSAyPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTAyLTIzCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMyMDYyNTogUGFyYW1ldGVyIG5hbWVzIGluIF9fYW5ub3RhdGlvbnNfXyB3ZXJlIG5vdCBtYW5nbGVkIHByb3Blcmx5LgorICBEaXNjb3ZlcmVkIGJ5IEpvbmFzIFdpZWxpY2tpLCBwYXRjaCBieSBZdXJ5IFNlbGl2YW5vdi4KKworLSBJc3N1ZSAjMjAyNjE6IEluIHBpY2tsZSwgbG9va3VwIF9fZ2V0bmV3YXJnc19fIGFuZCBfX2dldG5ld2FyZ3NfZXhfXyBvbiB0aGUKKyAgdHlwZSBvZiB0aGUgb2JqZWN0LgorCistIElzc3VlICMyMDYxOTogR2l2ZSB0aGUgQVNUIG5vZGVzIG9mIGtleXdvcmQtb25seSBhcmd1bWVudHMgYSBjb2x1bW4gYW5kIGxpbmUKKyAgbnVtYmVyLgorCistIElzc3VlICMyMDUyNjogUmV2ZXJ0IGNoYW5nZXMgb2YgaXNzdWUgIzE5NDY2IHdoaWNoIGludHJvZHVjZXMgYSByZWdyZXNzaW9uOgorICBkb24ndCBjbGVhciBhbnltb3JlIHRoZSBzdGF0ZSBvZiBQeXRob24gdGhyZWFkcyBlYXJseSBkdXJpbmcgdGhlIFB5dGhvbgorICBzaHV0ZG93bi4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMyMDcxMDogVGhlIHB5ZG9jIHN1bW1hcnkgbGluZSBubyBsb25nZXIgZGlzcGxheXMgdGhlICJzZWxmIiBwYXJhbWV0ZXIKKyAgZm9yIGJvdW5kIG1ldGhvZHMuCisKKy0gSXNzdWUgIzIwNTY2OiBDaGFuZ2UgYXN5bmNpby5hc19jb21wbGV0ZWQoKSB0byB1c2UgYSBRdWV1ZSwgdG8KKyAgYXZvaWQgTyhOKioyKSBiZWhhdmlvci4KKworLSBJc3N1ZSAjMjA3MDQ6IEltcGxlbWVudCBuZXcgZGVidWcgQVBJIGluIGFzeW5jaW8uIEFkZCBuZXcgbWV0aG9kcworICBCYXNlRXZlbnRMb29wLnNldF9kZWJ1ZygpIGFuZCBCYXNlRXZlbnRMb29wLmdldF9kZWJ1ZygpLgorICBBZGQgc3VwcG9ydCBmb3Igc2V0dGluZyAnYXN5bmNpby50YXNrcy5fREVCVUcnIHZhcmlhYmxlIHdpdGgKKyAgJ1BZVEhPTkFTWU5DSU9ERUJVRycgZW52aXJvbm1lbnQgdmFyaWFibGUuCisKKy0gYXN5bmNpbzogUmVmYWN0b3JpbmcgYW5kIGZpeGVzOiBCYXNlRXZlbnRMb29wLnNvY2tfY29ubmVjdCgpIHJhaXNlcyBhbgorICBlcnJvciBpZiB0aGUgYWRkcmVzcyBpcyBub3QgcmVzb2x2ZWQ7IHVzZSBfX3Nsb3RzX18gaW4gSGFuZGxlIGFuZAorICBUaW1lckhhbmRsZTsgYXNfY29tcGxldGVkKCkgYW5kIHdhaXQoKSByYWlzZSBUeXBlRXJyb3IgaWYgdGhlIHBhc3NlZAorICBsaXN0IG9mIEZ1dHVyZXMgaXMgYSBzaW5nbGUgRnV0dXJlOyBjYWxsX3Nvb24oKSBhbmQgb3RoZXIgJ2NhbGxfKigpJworICBmdW5jdGlvbnMgcmFpc2UgVHlwZUVycm9yIGlmIHRoZSBwYXNzZWQgY2FsbGJhY2sgaXMgYSBjb3JvdXRpbmUKKyAgZnVuY3Rpb247IF9Qcm9hY3RvckJhc2VQaXBlVHJhbnNwb3J0IHVzZXMgX0Zsb3dDb250cm9sTWl4aW47CisgIFdyaXRlVHJhbnNwb3J0LnNldF93cml0ZV9idWZmZXJfc2l6ZSgpIGNhbGxzIF9tYXliZV9wYXVzZV9wcm90b2NvbCgpCisgIHRvIGNvbnNpZGVyIHBhdXNpbmcgcmVjZWl2aW5nIGlmIHRoZSB3YXRlcm1hcmsgbGltaXRzIGhhdmUgY2hhbmdlZDsKKyAgZml4IF9jaGVja19yZXNvbHZlZF9hZGRyZXNzKCkgZm9yIElQdjYgYWRkcmVzczsgYW5kIG90aGVyIG1pbm9yCisgIGltcHJvdmVtZW50cywgYWxvbmcgd2l0aCBtdWx0aXBsZSBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuCisKKy0gSXNzdWUgIzIwNjg0OiBGaXggaW5zcGVjdC5nZXRmdWxsYXJnc3BlYygpIHRvIG5vdCB0byBmb2xsb3cgX193cmFwcGVkX18KKyAgY2hhaW5zLiBNYWtlIGl0cyBiZWhhdmlvdXIgY29uc2lzdGVudCB3aXRoIGJvdW5kIG1ldGhvZHMgZmlyc3QgYXJndW1lbnQuCisgIFBhdGNoIGJ5IE5pY2sgQ29naGxhbiBhbmQgWXVyeSBTZWxpdmFub3YuCisKKy0gSXNzdWUgIzIwNjgxOiBBZGQgbmV3IGVycm9yIGhhbmRsaW5nIEFQSSBpbiBhc3luY2lvLiBOZXcgQVBJczoKKyAgbG9vcC5zZXRfZXhjZXB0aW9uX2hhbmRsZXIoKSwgbG9vcC5kZWZhdWx0X2V4Y2VwdGlvbl9oYW5kbGVyKCksIGFuZAorICBsb29wLmNhbGxfZXhjZXB0aW9uX2hhbmRsZXIoKS4KKworLSBJc3N1ZSAjMjA2NzM6IEltcGxlbWVudCBzdXBwb3J0IGZvciBVTklYIERvbWFpbiBTb2NrZXRzIGluIGFzeW5jaW8uCisgIE5ldyBBUElzOiBsb29wLmNyZWF0ZV91bml4X2Nvbm5lY3Rpb24oKSwgbG9vcC5jcmVhdGVfdW5peF9zZXJ2ZXIoKSwKKyAgc3RyZWFtcy5vcGVuX3VuaXhfY29ubmVjdGlvbigpLCBhbmQgc3RyZWFtcy5zdGFydF91bml4X3NlcnZlcigpLgorCistIElzc3VlICMyMDYxNjogQWRkIGEgZm9ybWF0KCkgbWV0aG9kIHRvIHRyYWNlbWFsbG9jLlRyYWNlYmFjay4KKworLSBJc3N1ZSAjMTk3NDQ6IHRoZSBlbnN1cmVwaXAgaW5zdGFsbGF0aW9uIHN0ZXAgbm93IGp1c3QgcHJpbnRzIGEgd2FybmluZyB0bworICBzdGRlcnIgcmF0aGVyIHRoYW4gZmFpbGluZyBvdXRyaWdodCBpZiBTU0wvVExTIGlzIHVuYXZhaWxhYmxlLiBUaGlzIGFsbG93cworICBsb2NhbCBpbnN0YWxsYXRpb24gb2YgUE9TSVggYnVpbGRzIHdpdGhvdXQgU1NML1RMUyBzdXBwb3J0LgorCistIElzc3VlICMyMDU5NDogQXZvaWQgbmFtZSBjbGFzaCB3aXRoIHRoZSBsaWJjIGZ1bmN0aW9uIHBvc2l4X2Nsb3NlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMjA2NDE6IFJ1biBNU0kgY3VzdG9tIGFjdGlvbnMgKHBpcCBpbnN0YWxsYXRpb24sIHB5YyBjb21waWxhdGlvbikKKyAgd2l0aCB0aGUgTm9JbXBlcnNvbmF0ZSBmbGFnLCB0byBzdXBwb3J0IGVsZXZhdGVkIGV4ZWN1dGlvbiAoVUFDKS4KKworLSBJc3N1ZSAjMjAyMjE6IFJlbW92ZWQgY29uZmxpY3RpbmcgKG9yIGNpcmN1bGFyKSBoeXBvdCBkZWZpbml0aW9uIHdoZW4KKyAgY29tcGlsZWQgd2l0aCBWUyAyMDEwIG9yIGFib3ZlLiAgSW5pdGlhbCBwYXRjaCBieSBUYWJyZXogTW9oYW1tZWQuCisKKy0gSXNzdWUgIzIwNjA5OiBSZXN0b3JlZCB0aGUgYWJpbGl0eSB0byBidWlsZCA2NC1iaXQgV2luZG93cyBiaW5hcmllcyBvbgorICAzMi1iaXQgV2luZG93cywgd2hpY2ggd2FzIGJyb2tlbiBieSB0aGUgY2hhbmdlIGluIGlzc3VlICMxOTc4OC4KKworCitXaGF0J3MgTmV3IGluIFB5dGhvbiAzLjQuMCByZWxlYXNlIGNhbmRpZGF0ZSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTAyLTEwCisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxOTI1NTogVGhlIGJ1aWx0aW5zIG1vZHVsZSBpcyByZXN0b3JlZCB0byBpbml0aWFsIHZhbHVlIGJlZm9yZQorICBjbGVhbmluZyBvdGhlciBtb2R1bGVzLiAgVGhlIHN5cyBhbmQgYnVpbHRpbnMgbW9kdWxlcyBhcmUgY2xlYW5lZCBsYXN0LgorCistIElzc3VlICMyMDU4ODogTWFrZSBQeXRob24tYXN0LmMgQzg5IGNvbXBsaWFudC4KKworLSBJc3N1ZSAjMjA0Mzc6IEZpeGVkIDIyIHBvdGVudGlhbCBidWdzIHdoZW4gZGVsZXRpbmcgb2JqZWN0cyByZWZlcmVuY2VzLgorCistIElzc3VlICMyMDUwMDogRGlzcGxheWluZyBhbiBleGNlcHRpb24gYXQgaW50ZXJwcmV0ZXIgc2h1dGRvd24gbm8gbG9uZ2VyCisgIHJpc2tzIHRyaWdnZXJpbmcgYW4gYXNzZXJ0aW9uIGZhaWx1cmUgaW4gUHlPYmplY3RfU3RyLgorCistIElzc3VlICMyMDUzODogVVRGLTcgaW5jcmVtZW50YWwgZGVjb2RlciBwcm9kdWNlZCBpbmNvbnNpc3RlbnQgc3RyaW5nIHdoZW4KKyAgaW5wdXQgd2FzIHRydW5jYXRlZCBpbiBCQVNFNjQgc2VjdGlvbi4KIAogLSBJc3N1ZSAjMjA0MDQ6IGlvLlRleHRJT1dyYXBwZXIgKGFuZCBoZW5jZSB0aGUgb3BlbigpIGJ1aWx0aW4pIG5vdyB1c2VzIHRoZQogICBpbnRlcm5hbCBjb2RlYyBtYXJraW5nIHN5c3RlbSBhZGRlZCBmb3IgaXNzdWUgIzE5NjE5IHRvIHRocm93IExvb2t1cEVycm9yCkBAIC0yMTUsNTYgKzIzNDAsMjEgQEAKICAgb3V0cHV0IHR5cGUgY2hlY2tzIHJlbWFpbiBpbiBwbGFjZSB0byBkZWFsIHdpdGggdW5tYXJrZWQgdGhpcmQgcGFydHkKICAgY29kZWNzLgogCi1UZXN0cwotLS0tLS0KKy0gSXNzdWUgIzE3MTYyOiBBZGQgUHlUeXBlX0dldFNsb3QuCiAKLS0gSXNzdWUgIzIwNzQzOiBGaXggYSByZWZlcmVuY2UgbGVhayBpbiB0ZXN0X3RjbC4KLQotVG9vbHMvRGVtb3MKLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzIwNTM1OiBQWVRIT05XQVJOSU5HIG5vIGxvbmdlciBhZmZlY3RzIHRoZSBydW5fdGVzdHMucHkgc2NyaXB0LgotICBQYXRjaCBieSBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpcy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNSByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjMtRmViLTIwMTQqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMyMDU4ODogTWFrZSBQeXRob24tYXN0LmMgQzg5IGNvbXBsaWFudC4KLQotLSBJc3N1ZSAjMjA0Mzc6IEZpeGVkIDIxIHBvdGVudGlhbCBidWdzIHdoZW4gZGVsZXRpbmcgb2JqZWN0cyByZWZlcmVuY2VzLgotCi0tIElzc3VlICMyMDUzODogVVRGLTcgaW5jcmVtZW50YWwgZGVjb2RlciBwcm9kdWNlZCBpbmNvbnNpc3RhbnQgc3RyaW5nIHdoZW4KLSAgaW5wdXQgd2FzIHRydW5jYXRlZCBpbiBCQVNFNjQgc2VjdGlvbi4KKy0gSXNzdWUgIzIwMTYyOiBGaXggYW4gYWxpZ25tZW50IGlzc3VlIGluIHRoZSBzaXBoYXNoMjQoKSBoYXNoIGZ1bmN0aW9uIHdoaWNoCisgIGNhdXNlZCBhIGNyYXNoIG9uIFBvd2VyUEMgNjQtYml0IChwcGM2NCkuCiAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMjA2MzU6IEZpeGVkIGdyaWRfY29sdW1uY29uZmlndXJlKCkgYW5kIGdyaWRfcm93Y29uZmlndXJlKCkgbWV0aG9kcyBvZgotICBUa2ludGVyIHdpZGdldHMgdG8gd29yayBpbiB3YW50b2JqZWN0cz1UcnVlIG1vZGUuCistIElzc3VlICMyMDUzMDogVGhlIHNpZ25hdHVyZXMgZm9yIHNsb3QgYnVpbHRpbnMgaGF2ZSBiZWVuIHVwZGF0ZWQKKyAgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZXkgb25seSBhY2NlcHQgcG9zaXRpb25hbC1vbmx5IGFyZ3VtZW50cy4KIAotLSBJc3N1ZSAjMTk2MTI6IE9uIFdpbmRvd3MsIHN1YnByb2Nlc3MuUG9wZW4uY29tbXVuaWNhdGUoKSBub3cgaWdub3JlcwotICBPU0Vycm9yKDIyLCAnSW52YWxpZCBhcmd1bWVudCcpIHdoZW4gd3JpdGluZyBpbnB1dCBkYXRhIGludG8gc3RkaW4sIHdoZXJlYXMKLSAgdGhlIHByb2Nlc3MgYWxyZWFkeSBleGl0ZWQuCistIElzc3VlICMyMDUxNzogRnVuY3Rpb25zIGluIHRoZSBvcyBtb2R1bGUgdGhhdCBhY2NlcHQgdHdvIGZpbGVuYW1lcworICBub3cgcmVnaXN0ZXIgYm90aCBmaWxlbmFtZXMgaW4gdGhlIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLgogCi0tIElzc3VlICM2ODE1OiBvcy5wYXRoLmV4cGFuZHZhcnMoKSBub3cgc3VwcG9ydHMgbm9uLUFTQ0lJIGVudmlyb25tZW50Ci0gIHZhcmlhYmxlcyBuYW1lcyBhbmQgdmFsdWVzLgotCi0tIElzc3VlICMxNzY3MTogRml4ZWQgYSBjcmFzaCB3aGVuIHVzZSBub24taW5pdGlhbGl6ZWQgaW8uQnVmZmVyZWRSV1BhaXIuCi0gIEJhc2VkIG9uIHBhdGNoIGJ5IFN0ZXBoZW4gVHUuCi0KLS0gSXNzdWUgIzg0Nzg6IFVudG9rZW5pemVyLmNvbXBhdCBwcm9jZXNzZXMgZmlyc3QgdG9rZW4gZnJvbSBpdGVyYXRvciBpbnB1dC4KLSAgUGF0Y2ggYmFzZWQgb24gbGluZXMgZnJvbSBHZW9yZyBCcmFuZGwsIEVyaWMgU25vdywgYW5kIEdhcmV0aCBSZWVzLgotCi0tIElzc3VlICMyMDU5NDogQXZvaWQgbmFtZSBjbGFzaCB3aXRoIHRoZSBsaWJjIGZ1bmN0aW9uIHBvc2l4X2Nsb3NlLgotCi0tIElzc3VlICMxOTg1Njogc2h1dGlsLm1vdmUoKSBmYWlsZWQgdG8gbW92ZSBhIGRpcmVjdG9yeSB0byBvdGhlciBkaXJlY3RvcnkKLSAgb24gV2luZG93cyBpZiBzb3VyY2UgbmFtZSBlbmRzIHdpdGggb3MuYWx0c2VwLgorLSBJc3N1ZSAjMjA1NjM6IFRoZSBpcGFkZHJlc3MgbW9kdWxlIEFQSSBpcyBub3cgY29uc2lkZXJlZCBzdGFibGUuCiAKIC0gSXNzdWUgIzE0OTgzOiBlbWFpbC5nZW5lcmF0b3Igbm93IGFsd2F5cyBhZGRzIGEgbGluZSBlbmQgYWZ0ZXIgZWFjaCBNSU1FCiAgIGJvdW5kYXJ5IG1hcmtlciwgaW5zdGVhZCBvZiBkb2luZyBzbyBvbmx5IHdoZW4gdGhlcmUgaXMgYW4gZXBpbG9ndWUuICBUaGlzCkBAIC0yODEsOSArMjM3MSwyMSBAQAogLSBJc3N1ZSAjMTk3NzI6IGVtYWlsLmdlbmVyYXRvciBubyBsb25nZXIgbXV0YXRlcyB0aGUgbWVzc2FnZSBvYmplY3Qgd2hlbgogICBkb2luZyBhIGRvd24tdHJhbnNmb3JtIGZyb20gOGJpdCB0byA3Yml0IENURXMuCiAKKy0gSXNzdWUgIzIwNTM2OiB0aGUgc3RhdGlzdGljcyBtb2R1bGUgbm93IGNvcnJlY3RseSBoYW5kbGUgRGVjaW1hbCBpbnN0YW5jZXMKKyAgd2l0aCBwb3NpdGl2ZSBleHBvbmVudHMKKwogLSBJc3N1ZSAjMTg4MDU6IHRoZSBuZXRtYXNrL2hvc3RtYXNrIHBhcnNpbmcgaW4gaXBhZGRyZXNzIG5vdyBtb3JlIHJlbGlhYmx5CiAgIGZpbHRlcnMgb3V0IGlsbGVnYWwgdmFsdWVzIGFuZCBjb3JyZWN0bHkgYWxsb3dzIGFueSB2YWxpZCBwcmVmaXggbGVuZ3RoLgogCistIElzc3VlICMyMDQ4MTogRm9yIGF0IGxlYXN0IFB5dGhvbiAzLjQsIHRoZSBzdGF0aXN0aWNzIG1vZHVsZSB3aWxsIHJlcXVpcmUKKyAgdGhhdCBhbGwgaW5wdXRzIGZvciBhIHNpbmdsZSBvcGVyYXRpb24gYmUgb2YgYSBzaW5nbGUgY29uc2lzdGVudCB0eXBlLCBvcgorICBlbHNlIGEgbWl4ZWQgb2YgaW50cyBhbmQgYSBzaW5nbGUgb3RoZXIgY29uc2lzdGVudCB0eXBlLiBUaGlzIGF2b2lkcworICBzb21lIGludGVyb3BlcmFiaWxpdHkgaXNzdWVzIHRoYXQgYXJvc2Ugd2l0aCB0aGUgcHJldmlvdXMgYXBwcm9hY2ggb2YKKyAgY29lcmNpbmcgdG8gYSBzdWl0YWJsZSBjb21tb24gdHlwZS4KKworLSBJc3N1ZSAjMjA0Nzg6IHRoZSBzdGF0aXN0aWNzIG1vZHVsZSBub3cgdHJlYXRzIGNvbGxlY3Rpb25zLkNvdW50ZXIgaW5wdXRzCisgIGxpa2UgYW55IG90aGVyIGl0ZXJhYmxlLgorCiAtIElzc3VlICMxNzM2OTogZ2V0X2ZpbGVuYW1lIHdhcyByYWlzaW5nIGFuIGV4Y2VwdGlvbiBpZiB0aGUgZmlsZW5hbWUKICAgcGFyYW1ldGVyJ3MgUkZDMjIzMSBlbmNvZGluZyB3YXMgYnJva2VuIGluIGNlcnRhaW4gd2F5cy4gIFRoaXMgd2FzCiAgIGEgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBweXRob24yLgpAQCAtMjkyLDYgKzIzOTQsMTQgQEAKICAgZGVsZXRlZCwgYW5kIGltYXBsaWIgZGlkIG5vdCBoYW5kbGUgdGhhdCBjYXNlIGdyYWNlZnVsbHkuICBOb3cgaXQKICAgaGFuZGxlcyB0aGUgJ2J5ZScgY29ycmVjdGx5LgogCistIElzc3VlICMyMDUzMTogUmV2ZXJ0IDMuNCB2ZXJzaW9uIG9mIGZpeCBmb3IgIzE5MDYzLCBhbmQgYXBwbHkgdGhlIDMuMworICB2ZXJzaW9uLiAgVGhhdCBpcywgZG8gKm5vdCogcmFpc2UgYW4gZXJyb3IgaWYgdW5pY29kZSBpcyBwYXNzZWQgdG8KKyAgZW1haWwubWVzc2FnZS5NZXNzYWdlLnNldF9wYXlsb2FkLgorCistIElzc3VlICMyMDQ3NjogSWYgYSBub24tY29tcGF0MzIgcG9saWN5IGlzIHVzZWQgd2l0aCBhbnkgb2YgdGhlIGVtYWlsIHBhcnNlcnMsCisgIEVtYWlsTWVzc2FnZSBpcyBub3cgdXNlZCBhcyB0aGUgZmFjdG9yeSBjbGFzcy4gIFRoZSBmYWN0b3J5IGNsYXNzIHNob3VsZAorICByZWFsbHkgY29tZSBmcm9tIHRoZSBwb2xpY3k7IHRoYXQgd2lsbCBnZXQgZml4ZWQgaW4gMy41LgorCiAtIElzc3VlICMxOTkyMDogVGFyRmlsZS5saXN0KCkgbm8gbG9uZ2VyIGZhaWxzIHdoZW4gb3V0cHV0cyBhIGxpc3RpbmcKICAgY29udGFpbmluZyBub24tZW5jb2RhYmxlIGNoYXJhY3RlcnMuICBCYXNlZCBvbiBwYXRjaCBieSBWYWpyYXNreSBLb2suCiAKQEAgLTI5OSw2ICsyNDA5LDkgQEAKIAogLSBJc3N1ZSAjMTkxODY6IFJlc3RvcmUgbmFtZXNwYWNpbmcgb2YgZXhwYXQgc3ltYm9scyBpbnNpZGUgdGhlIHB5ZXhwYXQgbW9kdWxlLgogCistIElzc3VlICMyMDA1MzogZW5zdXJlcGlwIChhbmQgaGVuY2UgdmVudikgYXJlIG5vIGxvbmdlciBhZmZlY3RlZCBieSB0aGUKKyAgc2V0dGluZ3MgaW4gdGhlIGRlZmF1bHQgcGlwIGNvbmZpZ3VyYXRpb24gZmlsZS4KKwogLSBJc3N1ZSAjMjA0MjY6IFdoZW4gcGFzc2luZyB0aGUgcmUuREVCVUcgZmxhZywgcmUuY29tcGlsZSgpIGRpc3BsYXlzIHRoZQogICBkZWJ1ZyBvdXRwdXQgZXZlcnkgdGltZSBpdCBpcyBjYWxsZWQsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbXBpbGF0aW9uIGNhY2hlLgogCkBAIC0zMDgsMTcgKzI0MjEsNjIgQEAKIC0gSXNzdWUgIzIwNDM1OiBGaXggX3B5aW8uU3RyaW5nSU8uZ2V0dmFsdWUoKSB0byB0YWtlIGludG8gYWNjb3VudCBuZXdsaW5lCiAgIHRyYW5zbGF0aW9uIHNldHRpbmdzLgogCistIHRyYWNlbWFsbG9jOiBGaXggc2xpY2luZyB0cmFjZXMgYW5kIGZpeCBzbGljaW5nIGEgdHJhY2ViYWNrLgorCistIElzc3VlICMyMDM1NDogRml4IGFuIGFsaWdubWVudCBpc3N1ZSBpbiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIG9uIDY0LWJpdAorICBwbGF0Zm9ybXMuIEJ1ZyBzZWVuIG9uIDY0LWJpdCBMaW51eCB3aGVuIHVzaW5nICJtYWtlIHByb2ZpbGUtb3B0Ii4KKworLSBJc3N1ZSAjMTcxNTk6IGluc3BlY3Quc2lnbmF0dXJlIG5vdyBhY2NlcHRzIGR1Y2sgdHlwZXMgb2YgZnVuY3Rpb25zLAorICB3aGljaCBhZGRzIHN1cHBvcnQgZm9yIEN5dGhvbiBmdW5jdGlvbnMuIEluaXRpYWwgcGF0Y2ggYnkgU3RlZmFuIEJlaG5lbC4KKworLSBJc3N1ZSAjMTg4MDE6IEZpeCBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzIHRvIGNvcnJlY3RseSBjbGFzc2lmeQorICBvYmplY3QuX19uZXdfXyBhbmQgb2JqZWN0Ll9faW5pdF9fLgorCistIEZpeGVkIGNtYXRoLmlzaW5mJ3MgbmFtZSBpbiBpdHMgYXJndW1lbnQgcGFyc2luZyBjb2RlLgorCistIElzc3VlICMyMDMxMSwgIzIwNDUyOiBwb2xsIGFuZCBlcG9sbCBub3cgcm91bmQgdGhlIHRpbWVvdXQgYXdheSBmcm9tIHplcm8sCisgIGluc3RlYWQgb2Ygcm91bmRpbmcgdG93YXJkcyB6ZXJvLCBpbiBzZWxlY3QgYW5kIHNlbGVjdG9ycyBtb2R1bGVzOgorICBzZWxlY3QuZXBvbGwucG9sbCgpLCBzZWxlY3RvcnMuUG9sbFNlbGVjdG9yLnBvbGwoKSBhbmQKKyAgc2VsZWN0b3JzLkVwb2xsU2VsZWN0b3IucG9sbCgpLiBGb3IgZXhhbXBsZSwgYSB0aW1lb3V0IG9mIG9uZSBtaWNyb3NlY29uZAorICAoMWUtNikgaXMgbm93IHJvdW5kZWQgdG8gb25lIG1pbGxpc2Vjb25kaSAoMWUtMyksIGluc3RlYWQgb2YgYmVpbmcgcm91bmRlZCB0bworICB6ZXJvLiAgSG93ZXZlciwgdGhlIGdyYW51bGFyaXR5IHByb3BlcnR5IGFuZCBhc3luY2lvJ3MgcmVzb2x1dGlvbiBmZWF0dXJlCisgIHdlcmUgcmVtb3ZlZCBhZ2Fpbi4KKworLSBhc3luY2lvOiBTb21lIHJlZmFjdG9yaW5nOyB2YXJpb3VzIGZpeGVzOyBhZGQgd3JpdGUgZmxvdyBjb250cm9sIHRvCisgIHVuaXggcGlwZXM7IEZ1dHVyZS5zZXRfZXhjZXB0aW9uKCkgaW5zdGFudGlhdGVzIHRoZSBleGNlcHRpb24KKyAgYXJndW1lbnQgaWYgaXQgaXMgYSBjbGFzczsgaW1wcm92ZWQgcHJvYWN0b3IgcGlwZSB0cmFuc3BvcnQ7IHN1cHBvcnQKKyAgd2FpdF9mb3IoZiwgTm9uZSk7IGRvbid0IGxvZyBicm9rZW4vZGlzY29ubmVjdGVkIHBpcGVzOyB1c2UKKyAgVmFsdWVFcnJvciBpbnN0ZWFkIG9mIGFzc2VydCBmb3IgZm9yYmlkZGVuIHN1YnByb2Nlc3Nfe3NoZWxsLGV4ZWN9CisgIGFyZ3VtZW50czsgYWRkZWQgYSBjb252ZW5pZW5jZSBBUEkgZm9yIHN1YnByb2Nlc3MgbWFuYWdlbWVudDsgYWRkZWQKKyAgU3RyZWFtUmVhZGVyLmF0X2VvZigpOyBwcm9wZXJseSBoYW5kbGUgZHVwbGljYXRlIGNvcm91dGluZXMvZnV0dXJlcworICBpbiBnYXRoZXIoKSwgd2FpdCgpLCBhc19jb21wbGV0ZWQoKTsgdXNlIGEgYnl0ZWFycmF5IGZvciBidWZmZXJpbmcKKyAgaW4gU3RyZWFtUmVhZGVyOyBhbmQgbW9yZS4KKwogLSBJc3N1ZSAjMjAyODg6IGZpeCBoYW5kbGluZyBvZiBpbnZhbGlkIG51bWVyaWMgY2hhcnJlZnMgaW4gSFRNTFBhcnNlci4KIAogLSBJc3N1ZSAjMjA0MjQ6IFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBpby5TdHJpbmdJTyBub3cgc3VwcG9ydHMgbG9uZSBzdXJyb2dhdGVzLgogCistIElzc3VlICMyMDMwODogaW5zcGVjdC5zaWduYXR1cmUgbm93IHdvcmtzIG9uIGNsYXNzZXMgd2l0aG91dCB1c2VyLWRlZmluZWQKKyAgX19pbml0X18gb3IgX19uZXdfXyBtZXRob2RzLgorCistIElzc3VlICMyMDM3MjogaW5zcGVjdC5nZXRmaWxlIChhbmQgYSBidW5jaCBvZiBvdGhlciBpbnNwZWN0IGZ1bmN0aW9ucyB0aGF0CisgIHVzZSBpdCkgZG9lc24ndCBjcmFzaCB3aXRoIHVuZXhwZWN0ZWQgQXR0cmlidXRlRXJyb3Igb24gY2xhc3NlcyBkZWZpbmVkIGluIEMKKyAgd2l0aG91dCBfX21vZHVsZV9fLgorCistIElzc3VlICMyMDM1NjogaW5zcGVjdC5zaWduYXR1cmUgZm9ybWF0dGluZyB1c2VzICcvJyB0byBzZXBhcmF0ZQorICBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycyBmcm9tIG90aGVycy4KKworLSBJc3N1ZSAjMjAyMjM6IGluc3BlY3Quc2lnbmF0dXJlIG5vdyBzdXBwb3J0cyBtZXRob2RzIGRlZmluZWQgd2l0aAorICBmdW5jdG9vbHMucGFydGlhbG1ldGhvZHMuCisKIC0gSXNzdWUgIzE5NDU2OiBudHBhdGguam9pbigpIG5vdyBqb2lucyByZWxhdGl2ZSBwYXRocyBjb3JyZWN0bHkgd2hlbiBhIGRyaXZlCiAgIGlzIHByZXNlbnQuCiAKLS0gSXNzdWUgIzE5MDc3OiB0ZW1wZmlsZS5UZW1wb3JhcnlEaXJlY3RvcnkgY2xlYW51cCBpcyBub3cgbW9zdCBsaWtlbHkKLSAgc3VjY2Vzc2Z1bCB3aGVuIGNhbGxlZCBkdXJpbmcgbnVsbGluZyBvdXQgb2YgbW9kdWxlcyBkdXJpbmcgc2h1dGRvd24uCi0gIE1pc2xlYWRpbmcgZXhjZXB0aW9uIG5vIGxvbmdlciByYWlzZWQgd2hlbiByZXNvdXJjZSB3YXJuaW5nIGlzIGVtaXR0ZWQKLSAgZHVyaW5nIHNodXRkb3duLgorLSBJc3N1ZSAjMTkwNzc6IHRlbXBmaWxlLlRlbXBvcmFyeURpcmVjdG9yeSBjbGVhbnVwIG5vIGxvbmdlciBmYWlscyB3aGVuCisgIGNhbGxlZCBkdXJpbmcgc2h1dGRvd24uICBFbWl0dGluZyByZXNvdXJjZSB3YXJuaW5nIGluIF9fZGVsX18gbm8gbG9uZ2VyIGZhaWxzLgorICBPcmlnaW5hbCBwYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKworLSBJc3N1ZSAjMjAzOTQ6IFNpbGVuY2UgQ292ZXJpdHkgd2FybmluZyBpbiBhdWRpb29wIG1vZHVsZS4KIAogLSBJc3N1ZSAjMjAzNjc6IEZpeCBiZWhhdmlvciBvZiBjb25jdXJyZW50LmZ1dHVyZXMuYXNfY29tcGxldGVkKCkgZm9yCiAgIGR1cGxpY2F0ZSBhcmd1bWVudHMuICBQYXRjaCBieSBHbGVubiBMYW5nZm9yZC4KQEAgLTMyNyw2ICsyNDg1LDE4IEBACiAgIGNvZGVjcy5TdHJlYW1SZWFkZXIgcmV0dXJuZWQgaW5jb21wbGV0ZSBkYXRhIHdoZW4gd2VyZSBjYWxsZWQgYWZ0ZXIKICAgcmVhZGxpbmUoKSBvciByZWFkKHNpemUpLiAgQmFzZWQgb24gcGF0Y2ggYnkgQW1hdXJ5IEZvcmdlb3QgZCdBcmMuCiAKKy0gSXNzdWUgIzIwMTA1OiB0aGUgY29kZWMgZXhjZXB0aW9uIGNoYWluaW5nIG5vdyBjb3JyZWN0bHkgc2V0cyB0aGUKKyAgdHJhY2ViYWNrIG9mIHRoZSBvcmlnaW5hbCBleGNlcHRpb24gYXMgaXRzIF9fdHJhY2ViYWNrX18gYXR0cmlidXRlLgorCistIElzc3VlICMxNzQ4MTogaW5zcGVjdC5nZXRmdWxsYXJnc3BlYygpIG5vdyB1c2VzIGluc3BlY3Quc2lnbmF0dXJlKCkgQVBJLgorCistIElzc3VlICMxNTMwNDogY29uY3VycmVudC5mdXR1cmVzLndhaXQoKSBjYW4gYmxvY2sgZm9yZXZlciBldmVuIGlmCisgIEZ1dHVyZXMgaGF2ZSBjb21wbGV0ZWQuIFBhdGNoIGJ5IEdsZW5uIExhbmdmb3JkLgorCistIElzc3VlICMxNDQ1NTogcGxpc3RsaWI6IGZpeCBzZXJpYWxpemluZyBpbnRlZ2VycyBpbiB0aGUgcmFuZ2UKKyAgb2YgYW4gdW5zaWduZWQgbG9uZyBsb25nIGJ1dCBvdXRzaWRlIG9mIHRoZSByYW5nZSBvZiBzaWduZWQgbG9uZyBsb25nIGZvcgorICBiaW5hcnkgcGxpc3QgZmlsZXMuCisKIElETEUKIC0tLS0KIApAQCAtMzM0LDcgKzI1MDQsNyBAQAogICBQYXRjaCBtb3N0bHkgYnkgU2VyaGl5IFN0b3JjaGFrYS4KIAogLSBVcGRhdGUgdGhlIHB5dGhvbi5naWYgaWNvbiBmb3IgdGhlIElkbGUgY2xhc3Nicm93c2VyIGFuZCBwYXRoYm93c2VyCi0gIGZyb20gdGhlIG9sZCBncmVlbiBzbmFrZSB0byB0aGUgbmV3IG5ldyBibHVlIGFuZCB5ZWxsb3cgc25ha2VzLgorICBmcm9tIHRoZSBvbGQgZ3JlZW4gc25ha2UgdG8gdGhlIG5ldyBibHVlIGFuZCB5ZWxsb3cgc25ha2VzLgogCiAtIElzc3VlICMxNzcyMTogUmVtb3ZlIG5vbi1mdW5jdGlvbmFsIGNvbmZpZ3VyYXRpb24gZGlhbG9nIGhlbHAgYnV0dG9uIHVudGlsIHdlCiAgIG1ha2UgaXQgYWN0dWFsbHkgZ2l2ZXMgc29tZSBoZWxwIHdoZW4gY2xpY2tlZC4gUGF0Y2ggYnkgR3VpbGhlcm1lIFNpbcO1ZXMuCkBAIC0zNDIsMTEgKzI1MTIsNyBAQAogVGVzdHMKIC0tLS0tCiAKLS0gSXNzdWUgIzIwNTEwOiBSZXdyb3RlIHRlc3RfZXhpdCBpbiB0ZXN0X3N5cyB0byBtYXRjaCBleGlzdGluZyBjb21tZW50cywKLSAgdXNlIG1vZGVybiB1bml0dGVzdCBmZWF0dXJlcywgYW5kIHVzZSBoZWxwZXJzIGZyb20gdGVzdC5zY3JpcHRfaGVscGVyCi0gIGluc3RlYWQgb2YgdXNpbmcgc3VicHJvY2VzcyBkaXJlY3RseS4gIFBhdGNoIGJ5IEdhcmV0aCBSZWVzLgotCi0tIElzc3VlICMyMDUzMjogVGVzdHMgd2hpY2ggdXNlIF90ZXN0Y2FwaSBhcmUgbm93IG1hcmtlZCBhcyBDUHl0aG9uIG9ubHkuCistIElzc3VlICMyMDUzMjogVGVzdHMgd2hpY2ggdXNlIF90ZXN0Y2FwaSBub3cgYXJlIG1hcmtlZCBhcyBDUHl0aG9uIG9ubHkuCiAKIC0gSXNzdWUgIzE5OTIwOiBBZGRlZCB0ZXN0cyBmb3IgVGFyRmlsZS5saXN0KCkuICBCYXNlZCBvbiBwYXRjaCBieSBWYWpyYXNreSBLb2suCiAKQEAgLTM1NSw0MyArMjUyMSw3MyBAQAogCiAtIElzc3VlICMyMDQ3NDogRml4IHRlc3Rfc29ja2V0ICJ1bmV4cGVjdGVkIHN1Y2Nlc3MiIGZhaWx1cmVzIG9uIE9TIFggMTAuNysuCiAKLS0gSXNzdWUgIzIwNjA1OiBNYWtlIHRlc3Rfc29ja2V0IGdldGFkZHJpbmZvIE9TIFggc2VnZmF1bHQgdGVzdCBtb3JlIHJvYnVzdC4KK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQogCi1Eb2N1bWVudGF0aW9uCi0tLS0tLS0tLS0tLS0tCistIElzc3VlICMyMDUzMDogQXJndW1lbnQgQ2xpbmljJ3Mgc2lnbmF0dXJlIGZvcm1hdCBoYXMgYmVlbiByZXZpc2VkIGFnYWluLgorICBUaGUgbmV3IHN5bnRheCBpcyBoaWdobHkgaHVtYW4gcmVhZGFibGUgd2hpbGUgc3RpbGwgcHJldmVudGluZyBmYWxzZQorICBwb3NpdGl2ZXMuICBUaGUgc3ludGF4IGFsc28gZXh0ZW5kcyBQeXRob24gc3ludGF4IHRvIGRlbm90ZSAic2VsZiIgYW5kCisgIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCBhbGxvd2luZyBpbnNwZWN0LlNpZ25hdHVyZSBvYmplY3RzIHRvIGJlCisgIHRvdGFsbHkgYWNjdXJhdGUgZm9yIGFsbCBzdXBwb3J0ZWQgYnVpbHRpbnMgaW4gUHl0aG9uIDMuNC4KIAotLSBJc3N1ZSAjMjA0ODg6IEltcG9ydGxpYiBpcyBubyBsb25nZXIgKmFuKiBpbXBsZW1lbnRhdGlvbiBvZiBpbXBvcnQsIGl0J3MgKnRoZSoKLSAgaW1wbGVtZW50YXRpb24uCistIElzc3VlICMyMDQ1NjogQXJndW1lbnQgQ2xpbmljIG5vdyBvYnNlcnZlcyB0aGUgQyBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwKKyAgY29tcGlsYXRpb24gc3RhdGVtZW50cyBvZiB0aGUgQyBmaWxlcyBpdCBwYXJzZXMuICBXaGVuIGEgQ2xpbmljIGJsb2NrIGlzCisgIGluc2lkZSBhIGNvbmRpdGlvbmFsIGNvZGUsIGl0IGFkanVzdHMgaXRzIG91dHB1dCB0byBtYXRjaCwgaW5jbHVkaW5nCisgIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGluZyBhbiBlbXB0eSBtZXRob2RkZWYgbWFjcm8uCisKKy0gSXNzdWUgIzIwNDU2OiBDbG9uZWQgZnVuY3Rpb25zIGluIEFyZ3VtZW50IENsaW5pYyBub3cgdXNlIHRoZSBjb3JyZWN0CisgIG5hbWUsIG5vdCB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24gdGhleSB3ZXJlIGNsb25lZCBmcm9tLCBmb3IgdGV4dAorICBzdHJpbmdzIGluc2lkZSBnZW5lcmF0ZWQgY29kZS4KKworLSBJc3N1ZSAjMjA0NTY6IEZpeGVkIEFyZ3VtZW50IENsaW5pYydzIHRlc3Qgc3VpdGUgYW5kICItLWNvbnZlcnRlcnMiIGZlYXR1cmUuCisKKy0gSXNzdWUgIzIwNDU2OiBBcmd1bWVudCBDbGluaWMgbm93IGFsbG93cyBzcGVjaWZ5aW5nIGRpZmZlcmVudCBuYW1lcworICBmb3IgYSBwYXJhbWV0ZXIgaW4gUHl0aG9uIGFuZCBDLCB1c2luZyAiYXMiIG9uIHRoZSBwYXJhbWV0ZXIgbGluZS4KKworLSBJc3N1ZSAjMjAzMjY6IEFyZ3VtZW50IENsaW5pYyBub3cgdXNlcyBhIHNpbXBsZSwgdW5pcXVlIHNpZ25hdHVyZSB0bworICBhbm5vdGF0ZSB0ZXh0IHNpZ25hdHVyZXMgaW4gZG9jc3RyaW5ncywgcmVzdWx0aW5nIGluIGZld2VyIGZhbHNlCisgIHBvc2l0aXZlcy4gICJzZWxmIiBwYXJhbWV0ZXJzIGFyZSBhbHNvIGV4cGxpY2l0bHkgbWFya2VkLCBhbGxvd2luZworICBpbnNwZWN0LlNpZ25hdHVyZSgpIHRvIGF1dGhvcml0YXRpdmVseSBkZXRlY3QgKGFuZCBza2lwKSBzYWlkIHBhcmFtZXRlcnMuCisKKy0gSXNzdWUgIzIwMzI2OiBBcmd1bWVudCBDbGluaWMgbm93IGdlbmVyYXRlcyBzZXBhcmF0ZSBjaGVja3N1bXMgZm9yIHRoZQorICBpbnB1dCBhbmQgb3V0cHV0IHNlY3Rpb25zIG9mIHRoZSBibG9jaywgYWxsb3dpbmcgZXh0ZXJuYWwgdG9vbHMgdG8gdmVyaWZ5CisgIHRoYXQgdGhlIGlucHV0IGhhcyBub3QgY2hhbmdlZCAoYW5kIHRodXMgdGhlIG91dHB1dCBpcyBub3Qgb3V0LW9mLWRhdGUpLgogCiBCdWlsZAogLS0tLS0KIAotLSBJc3N1ZSAjMjAyMjE6IFJlbW92ZWQgY29uZmxpY3RpbmcgKG9yIGNpcmN1bGFyKSBoeXBvdCBkZWZpbml0aW9uIHdoZW4KLSAgY29tcGlsZWQgd2l0aCBWUyAyMDEwIG9yIGFib3ZlLiAgSW5pdGlhbCBwYXRjaCBieSBUYWJyZXogTW9oYW1tZWQuCistIElzc3VlICMyMDQ2NTogVXBkYXRlIFNRTGl0ZSBzaGlwcGVkIHdpdGggT1MgWCBpbnN0YWxsZXIgdG8gMy44LjMuCiAKLS0gSXNzdWUgIzIwNjA5OiBSZXN0b3JlZCB0aGUgYWJpbGl0eSB0byBidWlsZCA2NC1iaXQgV2luZG93cyBiaW5hcmllcyBvbgotICAzMi1iaXQgV2luZG93cywgd2hpY2ggd2FzIGJyb2tlbiBieSB0aGUgY2hhbmdlIGluIGlzc3VlICMxOTc4OC4KK0MtQVBJCistLS0tLQorCistIElzc3VlICMyMDUxNzogQWRkZWQgbmV3IGZ1bmN0aW9ucyBhbGxvd2luZyBPU0Vycm9yIGV4Y2VwdGlvbnMgdG8gcmVmZXJlbmNlCisgIHR3byBmaWxlbmFtZXMgaW5zdGVhZCBvZiBvbmU6IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoKSBhbmQKKyAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKCkuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMjA0ODg6IENoYW5nZSB3b3JkaW5nIHRvIHNheSBpbXBvcnRsaWIgaXMgKnRoZSogaW1wbGVtZW50YXRpb24gb2YKKyAgaW1wb3J0IGluc3RlYWQgb2YganVzdCAqYW4qIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICM2Mzg2OiBDbGFyaWZ5IGluIHRoZSB0dXRvcmlhbCB0aGF0IHNwZWNpZnlpbmcgYSBzeW1saW5rIHRvIGV4ZWN1dGUKKyAgbWVhbnMgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBleGVjdXRlZCBzY3JpcHQgYW5kIG5vdCB0aGUgc3ltbGluayBpcworICBhZGRlZCB0byBzeXMucGF0aC4KIAogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuND8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQorV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQmV0YSAzPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAwOS1GZWItMjAxNCoKLQotTGlicmFyeQotLS0tLS0tLQotCi0tIElzc3VlICMyMDM3NDogRml4IGJ1aWxkIHdhcm5pbmdzIG9mIHRoZSByZWFkbGluZSBtb2R1bGUgd2l0aCBsaWJlZGl0IG9uIE1hYy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuNCByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjYtSmFuLTIwMTQqCitSZWxlYXNlIGRhdGU6IDIwMTQtMDEtMjYKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzIwMTg5OiBGb3VyIGFkZGl0aW9uYWwgYnVpbHRpbiB0eXBlcyAoUHlUeXBlT2JqZWN0LAorICBQeU1ldGhvZERlc2NyX1R5cGUsIF9QeU1ldGhvZFdyYXBwZXJfVHlwZSwgYW5kIFB5V3JhcHBlckRlc2NyX1R5cGUpCisgIGhhdmUgYmVlbiBtb2RpZmllZCB0byBwcm92aWRlIGludHJvc3BlY3Rpb24gaW5mb3JtYXRpb24gZm9yIGJ1aWx0aW5zLgorCiAtIElzc3VlICMxNzgyNTogQ3Vyc29yICJeIiBpcyBjb3JyZWN0bHkgcG9zaXRpb25lZCBmb3IgU3ludGF4RXJyb3IgYW5kCiAgIEluZGVudGF0aW9uRXJyb3IuCiAKQEAgLTQwNiwyOSArMjYwMiwyNiBAQAogICBzb3VyY2UgZW5jb2RpbmcgZGVjbGFyYXRpb25zLCBhbmQgY2FuIGJlIHVzZWQgdG8gbWFrZSBQeXRob24gYmF0Y2ggZmlsZXMKICAgb24gV2luZG93cy4KIAotLSBJc3N1ZSAjMTc0MzI6IERyb3AgVUNTMiBmcm9tIG5hbWVzIG9mIFVuaWNvZGUgZnVuY3Rpb25zIGluIHB5dGhvbjMuZGVmLgotCi0tIElzc3VlICMxOTk2OTogUHlCeXRlc19Gcm9tRm9ybWF0VigpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciBpZiAiJWMiCi0gIGFyZ3VtZW50IGlzIG5vdCBpbiByYW5nZSBbMDsgMjU1XS4KLQotLSBJc3N1ZSAjMTQ0MzI6IEdlbmVyYXRvciBub3cgY2xlYXJzIHRoZSBib3Jyb3dlZCByZWZlcmVuY2UgdG8gdGhlIHRocmVhZAotICBzdGF0ZS4gRml4IGEgY3Jhc2ggd2hlbiBhIGdlbmVyYXRvciBpcyBjcmVhdGVkIGluIGEgQyB0aHJlYWQgdGhhdCBpcwotICBkZXN0cm95ZWQgd2hpbGUgdGhlIGdlbmVyYXRvciBpcyBzdGlsbCB1c2VkLiBUaGUgaXNzdWUgd2FzIHRoYXQgYSBnZW5lcmF0b3IKLSAgY29udGFpbnMgYSBmcmFtZSwgYW5kIHRoZSBmcmFtZSBrZXB0IGEgcmVmZXJlbmNlIHRvIHRoZSBQeXRob24gc3RhdGUgb2YgdGhlCi0gIGRlc3Ryb3llZCBDIHRocmVhZC4gVGhlIGNyYXNoIG9jY3VycyB3aGVuIGEgdHJhY2UgZnVuY3Rpb24gaXMgc2V0dXAuCi0KLS0gSXNzdWUgIzE5OTMyOiBGaXggdHlwbyBpbiBpbXBvcnQuaCwgbWlzc2luZyB3aGl0ZXNwYWNlcyBpbiBmdW5jdGlvbiBwcm90b3R5cGVzLgotCi0tIElzc3VlICMxOTcyOTogSW4gc3RyLmZvcm1hdCgpLCBmaXggcmVjdXJzaXZlIGV4cGFuc2lvbiBpbiBmb3JtYXQgc3BlYy4KLQotLSBJc3N1ZSAjMTk2Mzg6IEZpeCBwb3NzaWJsZSBjcmFzaCAvIHVuZGVmaW5lZCBiZWhhdmlvdXIgZnJvbSBodWdlIChtb3JlIHRoYW4gMgotICBiaWxsaW9uIGNoYXJhY3RlcnMpIGlucHV0IHN0cmluZ3MgaW4gX1B5X2RnX3N0cnRvZC4KLQogTGlicmFyeQogLS0tLS0tLQogCi0tIElzc3VlICMxNjA0MjogQ1ZFLTIwMTMtMTc1Mjogc210cGxpYjogTGltaXQgYW1vdW50IG9mIGRhdGEgcmVhZCBieQotICBsaW1pdGluZyB0aGUgY2FsbCB0byByZWFkbGluZSgpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2hyaXN0aWFuIEhlaW1lcy4KKy0gYXN5bmNpbzogVmFyaW91cyBpbXByb3ZlbWVudHMgYW5kIHNtYWxsIGNoYW5nZXMgbm90IGFsbCBjb3ZlcmVkIGJ5CisgIGlzc3VlcyBsaXN0ZWQgYmVsb3cuICBFLmcuIHdhaXRfZm9yKCkgbm93IGNhbmNlbHMgdGhlIGlubmVyIHRhc2sgaWYKKyAgdGhlIHRpbWVvdXQgb2NjY3VyczsgdHdlYWtlZCB0aGUgc2V0IG9mIGV4cG9ydGVkIHN5bWJvbHM7IHJlbmFtZWQKKyAgRW1wdHkvRnVsbCB0byBRdWV1ZUVtcHR5L1F1ZXVlRnVsbDsgIndpdGggKHlpZWxkIGZyb20gbG9jaykiIG5vdworICB1c2VzIGEgc2VwYXJhdGUgY29udGV4dCBtYW5hZ2VyOyByZWFkZXhhY3RseSgpIHJhaXNlcyBpZiBub3QgZW5vdWdoCisgIGRhdGEgd2FzIHJlYWQ7IFBUWSBzdXBwb3J0IHR3ZWFrcy4KKworLSBJc3N1ZSAjMjAzMTE6IGFzeW5jaW86IEFkZCBhIGdyYW51bGFyaXR5IGF0dHJpYnV0ZSB0byBCYXNlRXZlbnRMb29wOiBtYXhpbXVtCisgIGJldHdlZW4gdGhlIHJlc29sdXRpb24gb2YgdGhlIEJhc2VFdmVudExvb3AudGltZSgpIG1ldGhvZCBhbmQgdGhlIHJlc29sdXRpb24KKyAgb2YgdGhlIHNlbGVjdG9yLiBUaGUgZ3JhbnVhcmlsaXR5IGlzIHVzZWQgaW4gdGhlIHNjaGVkdWxlciB0byByb3VuZCB0aW1lIGFuZAorICBkZWFkbGluZS4KKworLSBJc3N1ZSAjMjAzMTE6IHNlbGVjdG9yczogQWRkIGEgcmVzb2x1dGlvbiBhdHRyaWJ1dGUgdG8gQmFzZVNlbGVjdG9yLgorCistIElzc3VlICMyMDE4OTogdW5pdHRlc3QubW9jayBub3cgbm8gbG9uZ2VyIGFzc3VtZXMgdGhhdCBhbnkgb2JqZWN0IGZvcgorICB3aGljaCBpdCBjb3VsZCBnZXQgYW4gaW5zcGVjdC5TaWduYXR1cmUgaXMgYSBjYWxsYWJsZSB3cml0dGVuIGluIFB5dGhvbi4KKyAgRml4IGNvdXJ0ZXN5IG9mIE1pY2hhZWwgRm9vcmQuCiAKIC0gSXNzdWUgIzIwMzE3OiBFeGl0U3RhY2suX19leGl0X18gY291bGQgY3JlYXRlIGEgc2VsZi1yZWZlcmVudGlhbCBsb29wIGlmIGFuCiAgIGV4Y2VwdGlvbiByYWlzZWQgYnkgYSBjbGVhbnVwIG9wZXJhdGlvbiBhbHJlYWR5IGhhZCBpdHMgY29udGV4dCBzZXQKQEAgLTQ0MSw2ICsyNjM0LDkgQEAKIC0gSXNzdWUgIzIwMjYyOiBXYXJuaW5ncyBhcmUgcmFpc2VkIG5vdyB3aGVuIGR1cGxpY2F0ZSBuYW1lcyBhcmUgYWRkZWQgaW4gdGhlCiAgIFpJUCBmaWxlIG9yIHRvbyBsb25nIFpJUCBmaWxlIGNvbW1lbnQgaXMgdHJ1bmNhdGVkLgogCistIElzc3VlICMyMDE2NTogVGhlIHVuaXR0ZXN0IG1vZHVsZSBubyBsb25nZXIgY29uc2lkZXJzIHRlc3RzIG1hcmtlZCB3aXRoCisgIEBleHBlY3RlZEZhaWx1cmUgc3VjY2Vzc2Z1bCBpZiB0aGV5IHBhc3MuCisKIC0gSXNzdWUgIzE4NTc0OiBBZGRlZCBtaXNzaW5nIG5ld2xpbmUgaW4gMTAwLUNvbnRpbnVlIHJlcGx5IGZyb20KICAgaHR0cC5zZXJ2ZXIuQmFzZUhUVFBSZXF1ZXN0SGFuZGxlci4gUGF0Y2ggYnkgTmlrb2xhdXMgUmF0aC4KIApAQCAtNDcyLDcgKzI2NjgsNyBAQAogLSBJc3N1ZSAjMTkwOTc6IFJhaXNlIHRoZSBjb3JyZWN0IEV4Y2VwdGlvbiB3aGVuIGNnaS5GaWVsZFN0b3JhZ2UgaXMgZ2l2ZW4gYW4KICAgaW52YWxpZCBmaWxlb2JqLgogCi0tIElzc3VlICMyMDIxNzogRml4IGJ1aWxkIGluIFNDSEVEX1NQT1JBRElDIGlzIGRlZmluZWQuCistIElzc3VlICMyMDE1MjogUG9ydGVkIFB5dGhvbi9pbXBvcnQuYyBvdmVyIHRvIEFyZ3VtZW50IENsaW5pYy4KIAogLSBJc3N1ZSAjMTMxMDc6IGFyZ3BhcnNlIGFuZCBvcHRwYXJzZSBubyBsb25nZXIgcmFpc2VzIGFuIGV4Y2VwdGlvbiB3aGVuIG91dHB1dAogICBhIGhlbHAgb24gZW52aXJvbm1lbnQgd2l0aCB0b28gc21hbGwgQ09MVU1OUy4gIEJhc2VkIG9uIHBhdGNoIGJ5CkBAIC00OTAsMjAgKzI2ODYsMjA2IEBACiAtIElzc3VlICMyMDExMzogb3MucmVhZHYoKSBhbmQgb3Mud3JpdGV2KCkgbm93IHJhaXNlIGFuIE9TRXJyb3IgZXhjZXB0aW9uIG9uCiAgIGVycm9yIGluc3RlYWQgb2YgcmV0dXJuaW5nIC0xLgogCistIElzc3VlICMxOTcxOTogTWFrZSBpbXBvcnRsaWIuYWJjLk1ldGFQYXRoRmluZGVyLmZpbmRfbW9kdWxlKCksCisgIFBhdGhFbnRyeUZpbmRlci5maW5kX2xvYWRlcigpLCBhbmQgTG9hZGVyLmxvYWRfbW9kdWxlKCkgdXNlIFBFUCA0NTEgQVBJcyB0bworICBoZWxwIHdpdGggYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuCisKKy0gSXNzdWUgIzIwMTQ0OiBpbnNwZWN0LlNpZ25hdHVyZSBub3cgc3VwcG9ydHMgcGFyc2luZyBzaW1wbGUgc3ltYm9saWMKKyAgY29uc3RhbnRzIGFzIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlcyBpbiBfX3RleHRfc2lnbmF0dXJlX18uCisKIC0gSXNzdWUgIzIwMDcyOiBGaXhlZCBtdWx0aXBsZSBlcnJvcnMgaW4gdGtpbnRlciB3aXRoIHdhbnRvYmplY3RzIGlzIEZhbHNlLgogCistIElzc3VlICMyMDIyOTogQXZvaWQgcGxpc3RsaWIgZGVwcmVjYXRpb24gd2FybmluZyBpbiBwbGF0Zm9ybS5tYWNfdmVyKCkuCisKKy0gSXNzdWUgIzE0NDU1OiBGaXggc29tZSBwcm9ibGVtcyB3aXRoIHRoZSBuZXcgYmluYXJ5IHBsaXN0IHN1cHBvcnQgaW4gcGxpc3RsaWIuCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTczOTA6IEFkZCBQeXRob24gdmVyc2lvbiB0byBJZGxlIGVkaXRvciB3aW5kb3cgdGl0bGUgYmFyLgorICBPcmlnaW5hbCBwYXRjaGVzIGJ5IEVkbW9uZCBCdXJuZXR0IGFuZCBLZW50IEpvaG5zb24uCisKKy0gSXNzdWUgIzE4OTYwOiBJRExFIG5vdyBpZ25vcmVzIHRoZSBzb3VyY2UgZW5jb2RpbmcgZGVjbGFyYXRpb24gb24gdGhlIHNlY29uZAorICBsaW5lIGlmIHRoZSBmaXJzdCBsaW5lIGNvbnRhaW5zIGFueXRoaW5nIGV4Y2VwdCBhIGNvbW1lbnQuCisKK1Rlc3RzCistLS0tLQorCistIElzc3VlICMyMDM1ODogVGVzdHMgZm9yIGN1cnNlcy53aW5kb3cub3ZlcmxheSBhbmQgY3Vyc2VzLndpbmRvdy5vdmVyd3JpdGUKKyAgbm8gbG9uZ2VyIHNwZWNpZnkgbWlue3Jvdyxjb2x9ID4gbWF4e3Jvdyxjb2x9LgorCistIElzc3VlICMxOTgwNDogVGhlIHRlc3RfZmluZF9tYWMgdGVzdCBpbiB0ZXN0X3V1aWQgaXMgbm93IHNraXBwZWQgaWYgdGhlCisgIGlmY29uZmlnIGV4ZWN1dGFibGUgaXMgbm90IGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTk4ODY6IFVzZSBiZXR0ZXIgZXN0aW1hdGVkIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGJpZ21lbSB0ZXN0cy4KKworVG9vbHMvRGVtb3MKKy0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzIwMzkwOiBBcmd1bWVudCBDbGluaWMncyAiZmlsZSIgb3V0cHV0IHByZXNldCBub3cgZGVmYXVsdHMgdG8KKyAgIntkaXJuYW1lfS9jbGluaWMve2Jhc2VuYW1lfS5oIi4KKworLSBJc3N1ZSAjMjAzOTA6IEFyZ3VtZW50IENsaW5pYydzICJjbGFzcyIgZGlyZWN0aXZlIHN5bnRheCBoYXMgYmVlbiBleHRlbmRlZAorICB3aXRoIHR3byBuZXcgcmVxdWlyZWQgYXJndW1lbnRzOiAidHlwZWRlZiIgYW5kICJ0eXBlX29iamVjdCIuCisKKy0gSXNzdWUgIzIwMzkwOiBBcmd1bWVudCBDbGluaWM6IElmIF9fbmV3X18gb3IgX19pbml0X18gZnVuY3Rpb25zIGRpZG4ndCB1c2UKKyAga3dhcmdzIChvciBhcmdzKSwgdGhlIFB5QXJnX05vS2V5d29yZHMgKG9yIFB5QXJnX05vUG9zaXRpb25hbCkgY2FsbHMKKyAgZ2VuZXJhdGVkIGFyZSBvbmx5IHJ1biB3aGVuIHRoZSB0eXBlIG9iamVjdCBpcyBhbiBleGFjdCBtYXRjaC4KKworLSBJc3N1ZSAjMjAzOTA6IEFyZ3VtZW50IENsaW5pYyBub3cgZmFpbHMgaWYgeW91IGhhdmUgcmVxdWlyZWQgcGFyYW1ldGVycyBhZnRlcgorICBvcHRpb25hbCBwYXJhbWV0ZXJzLgorCistIElzc3VlICMyMDM5MDogQXJndW1lbnQgQ2xpbmljIGNvbnZlcnRlcnMgbm93IGhhdmUgYSBuZXcgdGVtcGxhdGUgdGhleSBjYW4KKyAgaW5qZWN0IGNvZGUgaW50bzogIm1vZGlmaWVycyIuICBDb2RlIHB1dCB0aGVyZSBpcyBydW4gaW4gdGhlIHBhcnNpbmcKKyAgZnVuY3Rpb24gYWZ0ZXIgYXJndW1lbnQgcGFyc2luZyBidXQgYmVmb3JlIHRoZSBjYWxsIHRvIHRoZSBpbXBsLgorCistIElzc3VlICMyMDM3NjogQXJndW1lbnQgQ2xpbmljIG5vdyBlc2NhcGVzIGJhY2tzbGFzaGVzIGluIGRvY3N0cmluZ3MuCisKKy0gSXNzdWUgIzIwMzgxOiBBcmd1bWVudCBDbGluaWMgbm93IHNhbml0eSBjaGVja3MgdGhlIGRlZmF1bHQgYXJndW1lbnQgd2hlbgorICBjX2RlZmF1bHQgaXMgYWxzbyBzcGVjaWZpZWQsIHByb3ZpZGluZyBhIG5pY2UgZmFpbHVyZSBtZXNzYWdlIGZvcgorICBkaXNhbGxvd2VkIHZhbHVlcy4KKworLSBJc3N1ZSAjMjAxODk6IEFyZ3VtZW50IENsaW5pYyBub3cgZW5zdXJlcyB0aGF0IHBhcnNlciBmdW5jdGlvbnMgZm9yCisgIF9fbmV3X18gYXJlIGFsd2F5cyBvZiB0eXBlIG5ld2Z1bmMsIHRoZSB0eXBlIG9mIHRoZSB0cF9uZXcgc2xvdC4KKyAgU2ltaWxhcmx5LCBwYXJzZXIgZnVuY3Rpb25zIGZvciBfX2luaXRfXyBhcmUgbm93IGFsd2F5cyBvZiB0eXBlIGluaXRwcm9jLAorICB0aGUgdHlwZSBvZiB0cF9pbml0LgorCistIElzc3VlICMyMDE4OTogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwcmVzc2VzIHRoZSBkb2NzdHJpbmcgZm9yIF9fbmV3X18KKyAgYW5kIF9faW5pdF9fIGZ1bmN0aW9ucyBpZiBubyBkb2NzdHJpbmcgaXMgcHJvdmlkZWQgaW4gdGhlIGlucHV0LgorCistIElzc3VlICMyMDE4OTogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwcmVzc2VzIHRoZSAic2VsZiIgcGFyYW1ldGVyIGluIHRoZQorICBpbXBsIGZvciBAc3RhdGljbWV0aG9kIGZ1bmN0aW9ucy4KKworLSBJc3N1ZSAjMjAyOTQ6IEFyZ3VtZW50IENsaW5pYyBub3cgc3VwcG9ydHMgYXJndW1lbnQgcGFyc2luZyBmb3IgX19uZXdfXyBhbmQKKyAgX19pbml0X18gZnVuY3Rpb25zLgorCistIElzc3VlICMyMDI5OTogQXJndW1lbnQgQ2xpbmljIGN1c3RvbSBjb252ZXJ0ZXJzIG1heSBub3cgY2hhbmdlIHRoZSBkZWZhdWx0CisgIHZhbHVlIG9mIGNfZGVmYXVsdCBhbmQgcHlfZGVmYXVsdCB3aXRoIGEgY2xhc3MgbWVtYmVyLgorCistIElzc3VlICMyMDI4NzogQXJndW1lbnQgQ2xpbmljJ3Mgb3V0cHV0IGlzIG5vdyBjb25maWd1cmFibGUsIGFsbG93aW5nCisgIGRlbGF5aW5nIGl0cyBvdXRwdXQgb3IgZXZlbiByZWRpcmVjdGluZyBpdCB0byBhIHNlcGFyYXRlIGZpbGUuCisKKy0gSXNzdWUgIzIwMjI2OiBBcmd1bWVudCBDbGluaWMgbm93IHBlcm1pdHMgc2ltcGxlIGV4cHJlc3Npb25zCisgIChlLmcuICJzeXMubWF4c2l6ZSAtIDEiKSBhcyBkZWZhdWx0IHZhbHVlcyBmb3IgcGFyYW1ldGVycy4KKworLSBJc3N1ZSAjMTk5MzY6IEFkZGVkIGV4ZWN1dGFibGUgYml0cyBvciBzaGViYW5nIGxpbmVzIHRvIFB5dGhvbiBzY3JpcHRzIHdoaWNoCisgIHJlcXVpcmVzIHRoZW0uICBEaXNhYmxlIGV4ZWN1dGFibGUgYml0cyBhbmQgc2hlYmFuZyBsaW5lcyBpbiB0ZXN0IGFuZAorICBiZW5jaG1hcmsgZmlsZXMgaW4gb3JkZXIgdG8gcHJldmVudCB1c2luZyBhIHJhbmRvbSBzeXN0ZW0gcHl0aG9uLCBhbmQgaW4KKyAgc291cmNlIGZpbGVzIG9mIG1vZHVsZXMgd2hpY2ggZG9uJ3QgcHJvdmlkZSBjb21tYW5kIGxpbmUgaW50ZXJmYWNlLiAgRml4ZWQKKyAgc2hlYmFuZyBsaW5lcyBpbiB0aGUgdW5pdHRlc3RndWkgYW5kIGNoZWNrcGlwIHNjcmlwdHMuCisKKy0gSXNzdWUgIzIwMjY4OiBBcmd1bWVudCBDbGluaWMgbm93IHN1cHBvcnRzIGNsb25pbmcgdGhlIHBhcmFtZXRlcnMgYW5kCisgIHJldHVybiBjb252ZXJ0ZXIgb2YgZXhpc3RpbmcgZnVuY3Rpb25zLgorCistIElzc3VlICMyMDIyODogQXJndW1lbnQgQ2xpbmljIG5vdyBoYXMgc3BlY2lhbCBzdXBwb3J0IGZvciBjbGFzcyBzcGVjaWFsCisgIG1ldGhvZHMuCisKKy0gSXNzdWUgIzIwMjE0OiBGaXhlZCBhIG51bWJlciBvZiBzbWFsbCBpc3N1ZXMgYW5kIGRvY3VtZW50YXRpb24gZXJyb3JzIGluCisgIEFyZ3VtZW50IENsaW5pYyAoc2VlIGlzc3VlIGZvciBkZXRhaWxzKS4KKworLSBJc3N1ZSAjMjAxOTY6IEZpeGVkIGEgYnVnIHdoZXJlIEFyZ3VtZW50IENsaW5pYyBkaWQgbm90IGdlbmVyYXRlIGNvcnJlY3QKKyAgcGFyc2luZyBjb2RlIGZvciBmdW5jdGlvbnMgd2l0aCBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycyB3aGVyZSBhbGwgYXJndW1lbnRzCisgIGFyZSBvcHRpb25hbC4KKworLSBJc3N1ZSAjMTg5NjA6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBpZ25vcmUgdGhlIHNvdXJjZQorICBlbmNvZGluZyBkZWNsYXJhdGlvbiBvbiB0aGUgc2Vjb25kIGxpbmUgaWYgdGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYW55dGhpbmcKKyAgZXhjZXB0IGEgY29tbWVudC4KKworLSBJc3N1ZSAjMTk3MjM6IFRoZSBtYXJrZXIgY29tbWVudHMgQXJndW1lbnQgQ2xpbmljIHVzZXMgaGF2ZSBiZWVuIGNoYW5nZWQKKyAgdG8gaW1wcm92ZSByZWFkYWJpbGl0eS4KKworLSBJc3N1ZSAjMjAxNTc6IFdoZW4gQXJndW1lbnQgQ2xpbmljIHJlbmFtZXMgYSBwYXJhbWV0ZXIgYmVjYXVzZSBpdHMgbmFtZQorICBjb2xsaWRlcyB3aXRoIGEgQyBrZXl3b3JkLCBpdCBubyBsb25nZXIgZXhwb3NlcyB0aGF0IHJlbmFtZSB0byBQeUFyZ19QYXJzZS4KKworLSBJc3N1ZSAjMjAxNDE6IEltcHJvdmVkIEFyZ3VtZW50IENsaW5pYydzIHN1cHBvcnQgZm9yIHRoZSBQeUFyZ19QYXJzZSAiTyEiCisgIGZvcm1hdCB1bml0LgorCistIElzc3VlICMyMDE0NDogQXJndW1lbnQgQ2xpbmljIG5vdyBzdXBwb3J0cyBzaW1wbGUgc3ltYm9saWMgY29uc3RhbnRzCisgIGFzIHBhcmFtZXRlciBkZWZhdWx0IHZhbHVlcy4KKworLSBJc3N1ZSAjMjAxNDM6IFRoZSBsaW5lIG51bWJlcnMgcmVwb3J0ZWQgaW4gQXJndW1lbnQgQ2xpbmljIGVycm9ycyBhcmUKKyAgbm93IG1vcmUgYWNjdXJhdGUuCisKKy0gSXNzdWUgIzIwMTQyOiBQeV9idWZmZXIgdmFyaWFibGVzIGdlbmVyYXRlZCBieSBBcmd1bWVudCBDbGluaWMgYXJlIG5vdworICBpbml0aWFsaXplZCB3aXRoIGEgZGVmYXVsdCB2YWx1ZS4KKworQnVpbGQKKy0tLS0tCisKKy0gSXNzdWUgIzEyODM3OiBTaWxlbmNlIGEgdGF1dG9sb2dpY2FsIGNvbXBhcmlzb24gd2FybmluZyBvbiBPUyBYIHVuZGVyIENsYW5nIGluCisgIHNvY2tldG1vZHVsZS5jLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEJldGEgMj8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUmVsZWFzZSBkYXRlOiAyMDE0LTAxLTA1CisKK0NvcmUgYW5kIEJ1aWx0aW5zCistLS0tLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNzQzMjogRHJvcCBVQ1MyIGZyb20gbmFtZXMgb2YgVW5pY29kZSBmdW5jdGlvbnMgaW4gcHl0aG9uMy5kZWYuCisKKy0gSXNzdWUgIzE5NTI2OiBFeGNsdWRlIGFsbCBuZXcgQVBJIGZyb20gdGhlIHN0YWJsZSBBQkkuIEV4Y2VwdGlvbnMgY2FuIGJlCisgIG1hZGUgaWYgYSBuZWVkIGlzIGRlbW9uc3RyYXRlZC4KKworLSBJc3N1ZSAjMTk5Njk6IFB5Qnl0ZXNfRnJvbUZvcm1hdFYoKSBub3cgcmFpc2VzIGFuIE92ZXJmbG93RXJyb3IgaWYgIiVjIgorICBhcmd1bWVudCBpcyBub3QgaW4gcmFuZ2UgWzA7IDI1NV0uCisKKy0gSXNzdWUgIzE5OTk1OiAlYywgJW8sICV4LCBhbmQgJVggbm93IGlzc3VlIGEgRGVwcmVjYXRpb25XYXJuaW5nIG9uIG5vbi1pbnRlZ2VyCisgIGlucHV0OyByZXdvcmRlZCBkb2NzIHRvIGNsYXJpZnkgdGhhdCBhbiBpbnRlZ2VyIHR5cGUgc2hvdWxkIGRlZmluZSBib3RoIF9faW50X18KKyAgYW5kIF9faW5kZXhfXy4KKworLSBJc3N1ZSAjMTk3ODc6IFB5VGhyZWFkX3NldF9rZXlfdmFsdWUoKSBub3cgYWx3YXlzIHNldCB0aGUgdmFsdWUuIEluIFB5dGhvbgorICAzLjMsIHRoZSBmdW5jdGlvbiBkaWQgbm90aGluZyBpZiB0aGUga2V5IGFscmVhZHkgZXhpc3RzIChpZiB0aGUgY3VycmVudCB2YWx1ZQorICBpcyBhIG5vbi1OVUxMIHBvaW50ZXIpLgorCistIElzc3VlICMxNDQzMjogUmVtb3ZlIHRoZSB0aHJlYWQgc3RhdGUgZmllbGQgZnJvbSB0aGUgZnJhbWUgc3RydWN0dXJlLiBGaXggYQorICBjcmFzaCB3aGVuIGEgZ2VuZXJhdG9yIGlzIGNyZWF0ZWQgaW4gYSBDIHRocmVhZCB0aGF0IGlzIGRlc3Ryb3llZCB3aGlsZSB0aGUKKyAgZ2VuZXJhdG9yIGlzIHN0aWxsIHVzZWQuIFRoZSBpc3N1ZSB3YXMgdGhhdCBhIGdlbmVyYXRvciBjb250YWlucyBhIGZyYW1lLCBhbmQKKyAgdGhlIGZyYW1lIGtlcHQgYSByZWZlcmVuY2UgdG8gdGhlIFB5dGhvbiBzdGF0ZSBvZiB0aGUgZGVzdHJveWVkIEMgdGhyZWFkLiBUaGUKKyAgY3Jhc2ggb2NjdXJzIHdoZW4gYSB0cmFjZSBmdW5jdGlvbiBpcyBzZXR1cC4KKworLSBJc3N1ZSAjMTk1NzY6IFB5R0lMU3RhdGVfRW5zdXJlKCkgbm93IGluaXRpYWxpemVzIHRocmVhZHMuIEF0IHN0YXJ0dXAsIFB5dGhvbgorICBoYXMgbm8gY29uY3JldGUgR0lMLiBJZiBQeUdJTFN0YXRlX0Vuc3VyZSgpIGlzIGNhbGxlZCBmcm9tIGEgbmV3IHRocmVhZCBmb3IKKyAgdGhlIGZpcnN0IHRpbWUgYW5kIFB5RXZhbF9Jbml0VGhyZWFkcygpIHdhcyBub3QgY2FsbGVkIHlldCwgYSBHSUwgbmVlZHMgdG8gYmUKKyAgY3JlYXRlZC4KKworLSBJc3N1ZSAjMTc1NzY6IERlcHJlY2F0aW9uIHdhcm5pbmcgZW1pdHRlZCBub3cgd2hlbiBfX2ludF9fKCkgb3IgX19pbmRleF9fKCkKKyAgcmV0dXJuIG5vdCBpbnQgaW5zdGFuY2UuCisKKy0gSXNzdWUgIzE5OTMyOiBGaXggdHlwbyBpbiBpbXBvcnQuaCwgbWlzc2luZyB3aGl0ZXNwYWNlcyBpbiBmdW5jdGlvbiBwcm90b3R5cGVzLgorCistIElzc3VlICMxOTczNjogQWRkIG1vZHVsZS1sZXZlbCBzdGF0dmZzIGNvbnN0YW50cyBkZWZpbmVkIGZvciBHTlUvZ2xpYmMKKyAgYmFzZWQgc3lzdGVtcy4KKworLSBJc3N1ZSAjMjAwOTc6IEZpeCBiYWQgdXNlIG9mICJzZWxmIiBpbiBpbXBvcnRsaWIncyBXaW5kb3dzUmVnaXN0cnlGaW5kZXIuCisKKy0gSXNzdWUgIzE5NzI5OiBJbiBzdHIuZm9ybWF0KCksIGZpeCByZWN1cnNpdmUgZXhwYW5zaW9uIGluIGZvcm1hdCBzcGVjLgorCistIElzc3VlICMxOTYzODogRml4IHBvc3NpYmxlIGNyYXNoIC8gdW5kZWZpbmVkIGJlaGF2aW91ciBmcm9tIGh1Z2UgKG1vcmUgdGhhbiAyCisgIGJpbGxpb24gY2hhcmFjdGVycykgaW5wdXQgc3RyaW5ncyBpbiBfUHlfZGdfc3RydG9kLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzIwMTU0OiBEZWFkbG9jayBpbiBhc3luY2lvLlN0cmVhbVJlYWRlci5yZWFkZXhhY3RseSgpLgorCistIElzc3VlICMxNjExMzogUmVtb3ZlIHNoYTMgbW9kdWxlIGFnYWluLgorCistIElzc3VlICMyMDExMTogcGF0aGxpYi5QYXRoLndpdGhfc3VmZml4KCkgbm93IHNhbml0eSBjaGVja3MgdGhlIGdpdmVuIHN1ZmZpeC4KKworLSBGaXggYnJlYWthZ2UgaW4gVGVzdFN1aXRlLmNvdW50VGVzdENhc2VzKCkgaW50cm9kdWNlZCBieSBpc3N1ZSAjMTE3OTguCisKIC0gSXNzdWUgIzIwMTA4OiBBdm9pZCBwYXJhbWV0ZXIgbmFtZSBjbGFzaCBpbiBpbnNwZWN0LmdldGNhbGxhcmdzKCkuCiAKLS0gSXNzdWUgIzEyNjkyOiBCYWNrcG9ydCB0aGUgZml4IGZvciBSZXNvdXJjZVdhcm5pbmcgaW4gdGVzdF91cmxsaWIybmV0LiBUaGlzCi0gIGFsc28gaGVscHMgaW4gY2xvc2luZyB0aGUgc29ja2V0IHdoZW4gQ29ubmVjdGlvbiBDbG9zZSBoZWFkZXIgaXMgbm90IHNlbnQuCistIElzc3VlICMxOTkxODogRml4IFB1cmVQYXRoLnJlbGF0aXZlX3RvKCkgdW5kZXIgV2luZG93cy4KIAogLSBJc3N1ZSAjMTk0MjI6IEV4cGxpY2l0bHkgZGlzYWxsb3cgbm9uLVNPQ0tfU1RSRUFNIHNvY2tldHMgaW4gdGhlIHNzbAogICBtb2R1bGUsIHJhdGhlciB0aGFuIHNpbGVudGx5IGxldCB0aGVtIGVtaXQgY2xlYXIgdGV4dCBkYXRhLgogCi0tIElzc3VlICMxODExNjogZ2V0cGFzcyB3YXMgYWx3YXlzIGdldHRpbmcgYW4gZXJyb3Igd2hlbiB0ZXN0aW5nIC9kZXYvdHR5LAotICBhbmQgdGh1cyB3YXMgYWx3YXlzIGZhbGxpbmcgYmFjayB0byBzdGRpbiwgYW5kIHdvdWxkIHRoZW4gcmFpc2UgYW4gZXhjZXB0aW9uCi0gIGlmIHN0ZGluIGNvdWxkIG5vdCBiZSB1c2VkIChzdWNoIGFzIC9kZXYvbnVsbCkuICBJdCBhbHNvIGxlYWtlZCBhbiBvcGVuIGZpbGUuCi0gIEFsbCBvZiB0aGVzZSBpc3N1ZXMgYXJlIG5vdyBmaXhlZC4KKy0gSXNzdWUgIzIwMDQ2OiBMb2NhbGUgYWxpYXMgdGFibGUgbm8gbG9uZ2VyIGNvbnRhaW5zIGVudGl0aWVzIHdoaWNoIGNhbiBiZQorICBjYWxjdWxhdGVkLiAgR2VuZXJhbGl6ZWQgc3VwcG9ydCBvZiB0aGUgZXVybyBtb2RpZmllci4KIAogLSBJc3N1ZSAjMjAwMjc6IEZpeGVkIGxvY2FsZSBhbGlhc2VzIGZvciBkZXZhbmFnYXJpIGxvY2FsZXMuCiAKQEAgLTUxMiwxNSArMjg5NCwzNyBAQAogLSBJc3N1ZSAjMTkwMjA6IFRraW50ZXIgbm93IHVzZXMgc3BsaXRsaXN0KCkgaW5zdGVhZCBvZiBzcGxpdCgpIGluIGNvbmZpZ3VyZQogICBtZXRob2RzLgogCi0tIEZpeCBUeXBlRXJyb3Igb24gInNldHVwLnB5IHVwbG9hZCAtLXNob3ctcmVzcG9uc2UiLgorLSBJc3N1ZSAjMTk3NDQ6IGVuc3VyZXBpcCBub3cgcHJvdmlkZXMgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZSB3aGVuIFB5dGhvbiBpcworICBidWlsdCB3aXRob3V0IFNTTC9UTFMgc3VwcG9ydCAocGlwIGN1cnJlbnRseSByZXF1aXJlcyB0aGF0IHN1cHBvcnQgdG8gcnVuLAorICBldmVuIGlmIG9ubHkgb3BlcmF0aW5nIHdpdGggbG9jYWwgd2hlZWwgZmlsZXMpCiAKLS0gSXNzdWUgIzEyMjI2OiBIVFRQUyBpcyBub3cgdXNlZCBieSBkZWZhdWx0IHdoZW4gY29ubmVjdGluZyB0byBQeVBJLgorLSBJc3N1ZSAjMTk3MzQ6IGVuc3VyZXBpcCBub3cgaWdub3JlcyBhbGwgcGlwIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBhdm9pZAorICBvZGQgYmVoYXZpb3VyIGJhc2VkIG9uIHVzZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncworCistIEZpeCBUeXBlRXJyb3Igb24gInNldHVwLnB5IHVwbG9hZCAtLXNob3ctcmVzcG9uc2UiLgogCiAtIElzc3VlICMyMDA0NTogRml4ICJzZXR1cC5weSByZWdpc3RlciAtLWxpc3QtY2xhc3NpZmllcnMiLgogCiAtIElzc3VlICMxODg3OTogV2hlbiBhIG1ldGhvZCBpcyBsb29rZWQgdXAgb24gYSB0ZW1wb3JhcnkgZmlsZSwgYXZvaWQgY2xvc2luZwogICB0aGUgZmlsZSBiZWZvcmUgdGhlIG1ldGhvZCBpcyBwb3NzaWJseSBjYWxsZWQuCiAKKy0gSXNzdWUgIzIwMDM3OiBBdm9pZCBjcmFzaGVzIHdoZW4gb3BlbmluZyBhIHRleHQgZmlsZSBsYXRlIGF0IGludGVycHJldGVyCisgIHNodXRkb3duLgorCistIElzc3VlICMxOTk2NzogVGhhbmtzIHRvIHRoZSBQRVAgNDQyLCBhc3luY2lvLkZ1dHVyZSBub3cgdXNlcyBhCisgIGRlc3RydWN0b3IgdG8gbG9nIHVuY2F1Z2h0IGV4Y2VwdGlvbnMsIGluc3RlYWQgb2YgdGhlIGRlZGljYXRlZAorICBfVHJhY2ViYWNrTG9nZ2VyIGNsYXNzLgorCistIEFkZGVkIGEgVGFzay5jdXJyZW50X3Rhc2soKSBjbGFzcyBtZXRob2QgdG8gYXN5bmNpby4KKworLSBJc3N1ZSAjMTk4NTA6IFNldCBTQV9SRVNUQVJUIGluIGFzeW5jaW8gd2hlbiByZWdpc3RlcmluZyBhIHNpZ25hbAorICBoYW5kbGVyIHRvIGxpbWl0IEVJTlRSIG9jY3VycmVuY2VzLgorCistIEltcGxlbWVudGVkIHdyaXRlIGZsb3cgY29udHJvbCBpbiBhc3luY2lvIGZvciBwcm9hY3RvciBldmVudCBsb29wIChXaW5kb3dzKS4KKworLSBDaGFuZ2Ugd3JpdGUgYnVmZmVyIGluIGFzeW5jaW8gdXNlIHRvIGF2b2lkIE8oTioqMikgYmVoYXZpb3IuICBNYWtlCisgIHdyaXRlKCkvc2VuZHRvKCkgYWNjZXB0IGJ5dGVhcnJheS9tZW1vcnl2aWV3LgorCiAtIElzc3VlICMyMDAzNDogVXBkYXRlZCBhbGlhcyBtYXBwaW5nIHRvIG1vc3QgcmVjZW50IGxvY2FsZS5hbGlhcyBmaWxlCiAgIGZyb20gWC5vcmcgZGlzdHJpYnV0aW9uIHVzaW5nIG1ha2Vsb2NhbGVhbGlhcy5weS4KIApAQCAtNTQwLDYgKzI5NDQsMTkgQEAKIC0gSXNzdWUgIzIwMDA3OiBIVFRQUmVzcG9uc2UucmVhZCgwKSBubyBtb3JlIHByZW1hdHVyZWx5IGNsb3NlcyBjb25uZWN0aW9uLgogICBPcmlnaW5hbCBwYXRjaCBieSBTaW1vbiBTYXBpbi4KIAorLSBJc3N1ZSAjMTk5NDY6IG11bHRpcHJvY2Vzc2luZyBub3cgdXNlcyBydW5weSB0byBpbml0aWFsaXplIF9fbWFpbl9fIGluCisgIGNoaWxkIHByb2Nlc3NlcyB3aGVuIG5lY2Vzc2FyeSwgYWxsb3dpbmcgaXQgdG8gY29ycmVjdGx5IGhhbmRsZSBzY3JpcHRzCisgIHdpdGhvdXQgc3VmZml4ZXMgYW5kIHN1Ym1vZHVsZXMgdGhhdCB1c2UgZXhwbGljaXQgcmVsYXRpdmUgaW1wb3J0cyBvcgorICBvdGhlcndpc2UgcmVseSBvbiBwYXJlbnQgbW9kdWxlcyBiZWluZyBjb3JyZWN0bHkgaW1wb3J0ZWQgcHJpb3IgdG8KKyAgZXhlY3V0aW9uLgorCistIElzc3VlICMxOTkyMTogV2hlbiBQYXRoLm1rZGlyKCkgaXMgY2FsbGVkIHdpdGggcGFyZW50cz1UcnVlLCBhbnkgbWlzc2luZworICBwYXJlbnQgaXMgY3JlYXRlZCB3aXRoIHRoZSBkZWZhdWx0IHBlcm1pc3Npb25zLCBpZ25vcmluZyB0aGUgbW9kZSBhcmd1bWVudAorICAobWltaWNraW5nIHRoZSBQT1NJWCAibWtkaXIgLXAiIGNvbW1hbmQpLgorCistIElzc3VlICMxOTg4NzogSW1wcm92ZSB0aGUgUGF0aC5yZXNvbHZlKCkgYWxnb3JpdGhtIHRvIHN1cHBvcnQgY2VydGFpbgorICBzeW1saW5rIGNoYWlucy4KKwogLSBJc3N1ZSAjMTk5MTI6IEZpeGVkIG51bWVyb3VzIGJ1Z3MgaW4gbnRwYXRoLnNwbGl0dW5jKCkuCiAKIC0gSXNzdWUgIzE5OTExOiBudHBhdGguc3BsaXRkcml2ZSgpIG5vdyBjb3JyZWN0bHkgcHJvY2Vzc2VzIHRoZSAnxLAnIGNoYXJhY3RlcgpAQCAtNTUwLDYgKzI5NjcsOSBAQAogCiAtIElzc3VlICMxOTYyMzogRml4ZWQgd3JpdGluZyB0byB1bnNlZWthYmxlIGZpbGVzIGluIHRoZSBhaWZjIG1vZHVsZS4KIAorLSBJc3N1ZSAjMTk5NDY6IG11bHRpcHJvY2Vzc2luZy5zcGF3biBub3cgcmFpc2VzIEltcG9ydEVycm9yIHdoZW4gdGhlIG1vZHVsZSB0bworICBiZSB1c2VkIGFzIHRoZSBtYWluIG1vZHVsZSBjYW5ub3QgYmUgaW1wb3J0ZWQuCisKIC0gSXNzdWUgIzE3OTE5OiBzZWxlY3QucG9sbC5yZWdpc3RlcigpIGFnYWluIHdvcmtzIHdpdGggcG9sbC5QT0xMTlZBTCBvbiBBSVguCiAgIEZpeGVkIGludGVnZXIgb3ZlcmZsb3cgaW4gdGhlIGV2ZW50bWFzayBwYXJhbWV0ZXIuCiAKQEAgLTU1NywxMSArMjk3NywxNiBAQAogICBwYWNrYWdlIHdvdWxkIGdlbmVyYXRlIGEgbWVzc2FnZSBjbGFpbWluZyB0aGUgQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZwogICB3YXMgN2JpdCwgYW5kIHByb2R1Y2UgZ2FyYmFnZSBvdXRwdXQgZm9yIHRoZSBjb250ZW50LiAgVGhpcyBub3cgd29ya3MuCiAgIEEgY291cGxlIG9mIG90aGVyIHNldF9wYXlsb2FkIG1pc2hhbmRsaW5ncyBvZiBub24tQVNDSUkgYXJlIGFsc28gZml4ZWQuCisgIEluIGFkZGl0aW9uLCBjYWxsaW5nIHNldF9wYXlsb2FkIHdpdGggYSBzdHJpbmcgYXJndW1lbnQgd2l0aG91dAorICBzcGVjaWZ5aW5nIGEgY2hhcnNldCBub3cgcmFpc2VzIGFuIGVycm9yICh0aGlzIGlzIGEgbmV3IGVycm9yIGluIDMuNCkuCiAKLS0gSXNzdWUgIzE3MjAwOiB0ZWxuZXRsaWIncyByZWFkX3VudGlsIGFuZCBleHBlY3QgdGltZW91dCB3YXMgYnJva2VuIGJ5IHRoZQotICBmaXggdG8gSXNzdWUgIzE0NjM1IGluIFB5dGhvbiAzLjMuMCB0byBiZSBpbnRlcnByZXRlZCBhcyBtaWxsaXNlY29uZHMKLSAgaW5zdGVhZCBvZiBzZWNvbmRzIHdoZW4gdGhlIHBsYXRmb3JtIHN1cHBvcnRzIHNlbGVjdC5wb2xsIChpZTogZXZlcnl3aGVyZSkuCi0gIEl0IGlzIG5vdyB0cmVhdGVkIGFzIHNlY29uZHMgb25jZSBhZ2Fpbi4KKy0gSXNzdWUgIzE1NDc1OiBBZGQgX19zaXplb2ZfXyBpbXBsZW1lbnRhdGlvbnMgZm9yIGl0ZXJ0b29scyBvYmplY3RzLgorCistIElzc3VlICMxOTk0NDogRml4IGltcG9ydGxpYi5maW5kX3NwZWMoKSBzbyBpdCBpbXBvcnRzIHBhcmVudHMgYXMgbmVlZGVkCisgIGFuZCBtb3ZlIHRoZSBmdW5jdGlvbiB0byBpbXBvcnRsaWIudXRpbC4KKworLSBJc3N1ZSAjMTk4ODA6IEZpeCBhIHJlZmVyZW5jZSBsZWFrIGluIHVuaXR0ZXN0LlRlc3RDYXNlLiBFeHBsaWNpdGx5IGJyZWFrCisgIHJlZmVyZW5jZSBjeWNsZXMgYmV0d2VlbiBmcmFtZXMgYW5kIHRoZSBfT3V0Y29tZSBpbnN0YW5jZS4KIAogLSBJc3N1ZSAjMTc0Mjk6IHBsYXRmb3JtLmxpbnV4X2Rpc3RyaWJ1dGlvbigpIG5vdyBkZWNvZGVzIGZpbGVzIGZyb20gdGhlIFVURi04CiAgIGVuY29kaW5nIHdpdGggdGhlIHN1cnJvZ2F0ZWVzY2FwZSBlcnJvciBoYW5kbGVyLCBpbnN0ZWFkIG9mIGRlY29kaW5nIGZyb20gdGhlCkBAIC01NjksNiArMjk5NCw5IEBACiAgIHByb2JhYmx5IHRoZSBmaXJzdCBtYWpvciBkaXN0cmlidXRpb24gcmVsZWFzZSB3aXRoIGEgbm9uLUFTQ0lJIG5hbWUuIFBhdGNoCiAgIHdyaXR0ZW4gYnkgVG9zaGlvIEt1cmF0b21pLgogCistIElzc3VlICMxOTM0MzogRXhwb3NlIEZyZWVCU0Qtc3BlY2lmaWMgQVBJcyBpbiByZXNvdXJjZSBtb2R1bGUuICBPcmlnaW5hbAorICBwYXRjaCBieSBLb29icy4KKwogLSBJc3N1ZSAjMTk5Mjk6IENhbGwgb3MucmVhZCB3aXRoIDMyNzY4IHdpdGhpbiBzdWJwcm9jZXNzLlBvcGVuLmNvbW11bmljYXRlCiAgIHJhdGhlciB0aGFuIDQwOTYgZm9yIGVmZmljaWVuY3kuICBBIG1pY3JvYmVuY2htYXJrIHNob3dzIExpbnV4IGFuZCBPUyBYCiAgIGJvdGggdXNpbmcgfjUwJSBsZXNzIGNwdSB0aW1lIHRoaXMgd2F5LgpAQCAtNTc2LDIxICszMDA0LDczIEBACiAtIElzc3VlICMxOTUwNjogVXNlIGEgbWVtb3J5dmlldyB0byBhdm9pZCBhIGRhdGEgY29weSB3aGVuIHBpcGluZyBkYXRhCiAgIHRvIHN0ZGluIHdpdGhpbiBzdWJwcm9jZXNzLlBvcGVuLmNvbW11bmljYXRlLiAgNS0xMCUgbGVzcyBjcHUgdXNhZ2UuCiAKKy0gSXNzdWUgIzE5ODc2OiBzZWxlY3RvcnMgdW5yZWdpc3RlcigpIG5vIGxvbmdlciByYWlzZXMgVmFsdWVFcnJvciBvciBPU0Vycm9yCisgIGlmIHRoZSBGRCBpcyBjbG9zZWQgKGFzIGxvbmcgYXMgaXQgd2FzIHJlZ2lzdGVyZWQpLgorCistIElzc3VlICMxOTkwODogcGF0aGxpYiBub3cgam9pbnMgcmVsYXRpdmUgV2luZG93cyBwYXRocyBjb3JyZWN0bHkgd2hlbiBhIGRyaXZlCisgIGlzIHByZXNlbnQuICBPcmlnaW5hbCBwYXRjaCBieSBBbnRvaW5lIFBpdHJvdS4KKworLSBJc3N1ZSAjMTkyOTY6IFNpbGVuY2UgY29tcGlsZXIgd2FybmluZyBpbiBkYm1fb3BlbgorCistIElzc3VlICM2Nzg0OiBTdHJpbmdzIGZyb20gUHl0aG9uIDIgY2FuIG5vdyBiZSB1bnBpY2tsZWQgYXMgYnl0ZXMKKyAgb2JqZWN0cyBieSBzZXR0aW5nIHRoZSBlbmNvZGluZyBhcmd1bWVudCBvZiBVbnBpY2tsZXIgdG8gYmUgJ2J5dGVzJy4KKyAgSW5pdGlhbCBwYXRjaCBieSBNZXJsaWpuIHZhbiBEZWVuLgorCiAtIElzc3VlICMxOTgzOTogRml4IHJlZ3Jlc3Npb24gaW4gYnoyIG1vZHVsZSdzIGhhbmRsaW5nIG9mIG5vbi1iemlwMiBkYXRhIGF0CiAgIEVPRiwgYW5kIGFuYWxvZ291cyBidWcgaW4gbHptYSBtb2R1bGUuCiAKKy0gSXNzdWUgIzE5ODgxOiBGaXggcGlja2xpbmcgYnVnIHdoZXJlIGNwaWNrbGUgd291bGQgZW1pdCBiYWQgcGlja2xlIGRhdGEgZm9yCisgIGxhcmdlIGJ5dGVzIHN0cmluZyAoaS5lLiwgd2l0aCBzaXplIGdyZWF0ZXIgdGhhbiAyKiozMi0xKS4KKwogLSBJc3N1ZSAjMTkxMzg6IGRvY3Rlc3QncyBJR05PUkVfRVhDRVBUSU9OX0RFVEFJTCBub3cgYWxsb3dzIGEgbWF0Y2ggd2hlbgogICBubyBleGNlcHRpb24gZGV0YWlsIGV4aXN0cyAobm8gY29sb24gZm9sbG93aW5nIHRoZSBleGNlcHRpb24ncyBuYW1lLCBvcgogICBhIGNvbG9uIGRvZXMgZm9sbG93IGJ1dCBubyB0ZXh0IGZvbGxvd3MgdGhlIGNvbG9uKS4KIAorLSBJc3N1ZSAjMTk5Mjc6IEFkZCBfX2VxX18gdG8gcGF0aC1iYXNlZCBsb2FkZXJzIGluIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTk4Mjc6IE9uIFVOSVgsIHNldGJsb2NraW5nKCkgYW5kIHNldHRpbWVvdXQoKSBtZXRob2RzIG9mCisgIHNvY2tldC5zb2NrZXQgY2FuIG5vdyBhdm9pZCBhIHNlY29uZCBzeXNjYWxsIGlmIHRoZSBpb2N0bCgpIGZ1bmN0aW9uIGNhbiBiZQorICB1c2VkLCBvciBpZiB0aGUgbm9uLWJsb2NraW5nIGZsYWcgb2YgdGhlIHNvY2tldCBpcyB1bmNoYW5nZWQuCisKKy0gSXNzdWUgIzE5Nzg1OiBzbXRwbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTc4NDogcG9wbGliIG5vdyBzdXBwb3J0cyBTU0xDb250ZXh0LmNoZWNrX2hvc3RuYW1lIGFuZCBzZXJ2ZXIgbmFtZQorICBpbmRpY2F0aW9uIGZvciBUTFMvU1NMIGNvbm5lY3Rpb25zLgorCistIElzc3VlICMxOTc4Mzogbm50cGxpYiBub3cgc3VwcG9ydHMgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZSBhbmQgc2VydmVyIG5hbWUKKyAgaW5kaWNhdGlvbiBmb3IgVExTL1NTTCBjb25uZWN0aW9ucy4KKworLSBJc3N1ZSAjMTk3ODI6IGltYXBsaWIgbm93IHN1cHBvcnRzIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlcnZlciBuYW1lCisgIGluZGljYXRpb24gZm9yIFRMUy9TU0wgY29ubmVjdGlvbnMuCisKKy0gSXNzdWUgIzIwMTIzOiBGaXggcHlkb2Muc3lub3BzaXMoKSBmb3IgImJpbmFyeSIgbW9kdWxlcy4KKwogLSBJc3N1ZSAjMTk4MzQ6IFN1cHBvcnQgdW5waWNrbGluZyBvZiBleGNlcHRpb25zIHBpY2tsZWQgYnkgUHl0aG9uIDIuCiAKKy0gSXNzdWUgIzE5NzgxOiBmdHBsaWIgbm93IHN1cHBvcnRzIFNTTENvbnRleHQuY2hlY2tfaG9zdG5hbWUgYW5kIHNlcnZlciBuYW1lCisgIGluZGljYXRpb24gZm9yIFRMUy9TU0wgY29ubmVjdGlvbnMuCisKKy0gSXNzdWUgIzE5NTA5OiBBZGQgU1NMQ29udGV4dC5jaGVja19ob3N0bmFtZSB0byBtYXRjaCB0aGUgcGVlcidzIGNlcnRpZmljYXRlCisgIHdpdGggc2VydmVyX2hvc3RuYW1lIG9uIGhhbmRzaGFrZS4KKwogLSBJc3N1ZSAjMTU3OTg6IEZpeGVkIHN1YnByb2Nlc3MuUG9wZW4oKSB0byBubyBsb25nZXIgZmFpbCBpZiBmaWxlCiAgIGRlc2NyaXB0b3IgMCwgMSBvciAyIGlzIGNsb3NlZC4KIAorLSBJc3N1ZSAjMTc4OTc6IE9wdGltaXplZCB1bnBpY2tsZSBwcmVmZXRjaGluZy4KKworLSBJc3N1ZSAjMzY5MzogTWFrZSB0aGUgZXJyb3IgbWVzc2FnZSBtb3JlIGhlbHBmdWwgd2hlbiB0aGUgYXJyYXkuYXJyYXkoKQorICBjb25zdHJ1Y3RvciBpcyBnaXZlbiBhIHN0ci4gTW92ZSB0aGUgYXJyYXkgbW9kdWxlIHR5cGVjb2RlIGRvY3VtZW50YXRpb24gdG8KKyAgdGhlIGRvY3N0cmluZyBvZiB0aGUgY29uc3RydWN0b3IuCisKIC0gSXNzdWUgIzE5MDg4OiBGaXhlZCBpbmNvcnJlY3QgY2FjaGluZyBvZiB0aGUgY29weXJlZyBtb2R1bGUgaW4KICAgb2JqZWN0Ll9fcmVkdWNlX18oKSBhbmQgb2JqZWN0Ll9fcmVkdWNlX2V4X18oKS4KIAorLSBJc3N1ZSAjMTk2OTg6IFJlbW92ZWQgZXhlY19tb2R1bGUoKSBtZXRob2RzIGZyb20KKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5CdWlsdGluSW1wb3J0ZXIgYW5kIEV4dGVuc2lvbkZpbGVMb2FkZXIuCisKKy0gSXNzdWUgIzE4ODY0OiBBZGRlZCBhIHNldHRlciBmb3IgTW9kdWxlU3BlYy5oYXNfbG9jYXRpb24uCisKIC0gRml4ZWQgX3BpY2tsZS5VbnBpY2tsZXIgdG8gbm90IGZhaWwgd2hlbiBsb2FkaW5nIGVtcHR5IHN0cmluZ3MgYXMKICAgcGVyc2lzdGVudCBJRHMuCiAKQEAgLTYwMCw2ICszMDgwLDE5IEBACiAtIElzc3VlICM2NDc3OiBBZGRlZCBzdXBwb3J0IGZvciBwaWNrbGluZyB0aGUgdHlwZXMgb2YgYnVpbHQtaW4gc2luZ2xldG9ucwogICAoaS5lLiwgRWxsaXBzaXMsIE5vdEltcGxlbWVudGVkLCBOb25lKS4KIAorLSBJc3N1ZSAjMTk3MTM6IEFkZCByZW1haW5pbmcgUEVQIDQ1MS1yZWxhdGVkIGRlcHJlY2F0aW9ucyBhbmQgbW92ZSBhd2F5CisgIGZyb20gdXNpbmcgZmluZF9tb2R1bGUvZmluZF9sb2Flci9sb2FkX21vZHVsZS4KKworLSBJc3N1ZSAjMTk3MDg6IFVwZGF0ZSBwa2d1dGlsIHRvIHVzZSB0aGUgbmV3IGltcG9ydGVyIEFQSXMuCisKKy0gSXNzdWUgIzE5NzAzOiBVcGRhdGUgcHlkb2MgdG8gdXNlIHRoZSBuZXcgaW1wb3J0ZXIgQVBJcy4KKworLSBJc3N1ZSAjMTk4NTE6IEZpeGVkIGEgcmVncmVzc2lvbiBpbiByZWxvYWRpbmcgc3ViLW1vZHVsZXMuCisKKy0gc3NsLmNyZWF0ZV9kZWZhdWx0X2NvbnRleHQoKSBzZXRzIE9QX05PX0NPTVBSRVNTSU9OIHRvIHByZXZlbnQgQ1JJTUUuCisKKy0gSXNzdWUgIzE5ODAyOiBBZGQgc29ja2V0LlNPX1BSSU9SSVRZLgorCiAtIElzc3VlICMxMTUwODogRml4ZWQgdXVpZC5nZXRub2RlKCkgYW5kIHV1aWQudXVpZDEoKSBvbiBlbnZpcm9ubWVudCB3aXRoCiAgIHZpcnR1YWwgaW50ZXJmYWNlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgS2VudCBGcmF6aWVyLgogCkBAIC02MDgsNTYgKzMxMDEsOSBAQAogLSBJc3N1ZSAjMTk1NDU6IEF2b2lkIGNoYWluZWQgZXhjZXB0aW9ucyB3aGlsZSBwYXNzaW5nIHN0cmF5ICUgdG8KICAgdGltZS5zdHJwdGltZSgpLiAgSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCiAKLS0gSXNzdWUgIzE5NjMzOiBGaXhlZCB3cml0aW5nIG5vdCBjb21wcmVzc2VkIDE2LSBhbmQgMzItYml0IHdhdmUgZmlsZXMgb24KLSAgYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzE5NDQ5OiBpbiBjc3YncyB3cml0ZXJvdywgaGFuZGxlIG5vbi1zdHJpbmcga2V5cyB3aGVuIGdlbmVyYXRpbmcgdGhlCi0gIGVycm9yIG1lc3NhZ2UgdGhhdCBjZXJ0YWluIGtleXMgYXJlIG5vdCBpbiB0aGUgJ2ZpZWxkbmFtZXMnIGxpc3QuCi0KLS0gRml4IHRlc3Quc3VwcG9ydC5iaW5kX3BvcnQoKSB0byBub3QgY2F1c2UgYW4gZXJyb3Igd2hlbiBQeXRob24gd2FzIGNvbXBpbGVkCi0gIG9uIGEgc3lzdGVtIHdpdGggU09fUkVVU0VQT1JUIGRlZmluZWQgaW4gdGhlIGhlYWRlcnMgYnV0IHJ1biBvbiBhIHN5c3RlbQotICB3aXRoIGFuIE9TIGtlcm5lbCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhhdCByZWFzb25hYmx5IG5ldyBzb2NrZXQgb3B0aW9uLgotCi0tIEZpeCBjb21waWxhdGlvbiBlcnJvciB1bmRlciBnY2Mgb2YgdGhlIGN0eXBlcyBtb2R1bGUgYnVuZGxlZCBsaWJmZmkgZm9yIGFybS4KLQotLSBJc3N1ZSAjMTk1MjM6IENsb3NlZCBGaWxlSGFuZGxlciBsZWFrIHdoaWNoIG9jY3VycmVkIHdoZW4gZGVsYXkgd2FzIHNldC4KLQotLSBJc3N1ZSAjMTM2NzQ6IFByZXZlbnRlZCB0aW1lLnN0cmZ0aW1lIGZyb20gY3Jhc2hpbmcgb24gV2luZG93cyB3aGVuIGdpdmVuCi0gIGEgeWVhciBiZWZvcmUgMTkwMCBhbmQgYSBmb3JtYXQgb2YgJXkuCi0KLS0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjNjI4NjogUmVzdG9yZSB1c2Ugb2YgdXJsbGliIG92ZXIgaHR0cCBhbGxvd2luZyB1c2UKLSAgb2YgaHR0cF9wcm94eSBmb3IgRGlzdHV0aWxzIHVwbG9hZCBjb21tYW5kLCBhIGZlYXR1cmUgYWNjaWRlbnRhbGx5IGxvc3QKLSAgaW4gdGhlIHJvbGxiYWNrIG9mIGRpc3R1dGlsczIuCi0KLS0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjNzQ1NzogUmVzdG9yZSB0aGUgcmVhZF9wa2dfZmlsZSBtZXRob2QgdG8KLSAgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uTWV0YWRhdGEgYWNjaWRlbnRhbGx5IHJlbW92ZWQgaW4gdGhlIHVuZG8gb2YKLSAgZGlzdHV0aWxzMi4KLQotLSBJc3N1ZSAjMTU3NTAyMDogRml4ZWQgc3VwcG9ydCBvZiAyNC1iaXQgd2F2ZSBmaWxlcyBvbiBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KLQotLSBJc3N1ZSAjMTk0ODA6IEhUTUxQYXJzZXIgbm93IGFjY2VwdHMgYWxsIHZhbGlkIHN0YXJ0LXRhZyBuYW1lcyBhcyBkZWZpbmVkCi0gIGJ5IHRoZSBIVE1MNSBzdGFuZGFyZC4KLQotLSBJc3N1ZSAjNjE1NzogRml4ZWQgdGtpbnRlci5UZXh0LmRlYnVnKCkuICBPcmlnaW5hbCBwYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotLSBJc3N1ZSAjNjE2MDogVGhlIGJib3goKSBtZXRob2Qgb2YgdGtpbnRlci5TcGluYm94IG5vdyByZXR1cm5zIGEgdHVwbGUgb2YKLSAgaW50ZWdlcnMgaW5zdGVhZCBvZiBhIHN0cmluZy4gIEJhc2VkIG9uIHBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgotCi0tIElzc3VlICMxMDE5NzogUmV3b3JrIHN1YnByb2Nlc3MuZ2V0W3N0YXR1c11vdXRwdXQgdG8gdXNlIHN1YnByb2Nlc3MKLSAgZnVuY3Rpb25hbGl0eSBhbmQgdGh1cyB0byB3b3JrIG9uIFdpbmRvd3MuIFBhdGNoIGJ5IE5pY2sgQ29naGxhbi4KLQotLSBJc3N1ZSAjMTkyODY6IERpcmVjdG9yaWVzIGluIGBgcGFja2FnZV9kYXRhYGAgYXJlIG5vIGxvbmdlciBhZGRlZCB0bwotICB0aGUgZmlsZWxpc3QsIHByZXZlbnRpbmcgZmFpbHVyZSBvdXRsaW5lZCBpbiB0aGUgdGlja2V0LgotCiBJRExFCiAtLS0tCiAKLS0gSXNzdWUgIzE3MzkwOiBBZGQgUHl0aG9uIHZlcnNpb24gdG8gSWRsZSBlZGl0b3Igd2luZG93IHRpdGxlIGJhci4KLSAgT3JpZ2luYWwgcGF0Y2hlcyBieSBFZG1vbmQgQnVybmV0dCBhbmQgS2VudCBKb2huc29uLgotCi0tIElzc3VlICMxODk2MDogSURMRSBub3cgaWdub3JlcyB0aGUgc291cmNlIGVuY29kaW5nIGRlY2xhcmF0aW9uIG9uIHRoZSBzZWNvbmQKLSAgbGluZSBpZiB0aGUgZmlyc3QgbGluZSBjb250YWlucyBhbnl0aGluZyBleGNlcHQgYSBjb21tZW50LgotCiAtIElzc3VlICMyMDA1ODogc3lzLnN0ZGluLnJlYWRsaW5lKCkgaW4gSURMRSBub3cgYWx3YXlzIHJldHVybnMgb25seSBvbmUgbGluZS4KIAogLSBJc3N1ZSAjMTk0ODE6IHByaW50KCkgb2Ygc3RyaW5nIHN1YmNsYXNzIGluc3RhbmNlIGluIElETEUgbm8gbG9uZ2VyIGhhbmdzLgpAQCAtNjY4LDIxICszMTE0LDE3IEBACiBUZXN0cwogLS0tLS0KIAotLSBJc3N1ZSAjMTk4MDQ6IFRoZSB0ZXN0X2ZpbmRfbWFjIHRlc3QgaW4gdGVzdF91dWlkIGlzIG5vdyBza2lwcGVkIGlmIHRoZQotICBpZmNvbmZpZyBleGVjdXRhYmxlIGlzIG5vdCBhdmFpbGFibGUuCi0KLS0gSXNzdWUgIzE5ODg2OiBVc2UgYmV0dGVyIGVzdGltYXRlZCBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBiaWdtZW0gdGVzdHMuCi0KIC0gSXNzdWUgIzIwMDU1OiBGaXggdGVzdF9zaHV0aWwgdW5kZXIgV2luZG93cyB3aXRoIHN5bWxpbmsgcHJpdmlsZWdlcyBoZWxkLgogICBQYXRjaCBieSBWYWpyYXNreSBLb2suCiAKKy0gSXNzdWUgIzIwMDcwOiBEb24ndCBydW4gdGVzdF91cmxsaWIybmV0IHdoZW4gbmV0d29yayByZXNvdXJjZXMgYXJlIG5vdAorICBlbmFibGVkLgorCiAtIElzc3VlICMxOTkzODogUmUtZW5hYmxlZCB0ZXN0X2J1Z18xMzMzOTgyIGluIHRlc3RfZGlzLCB3aGljaCBoYWQgYmVlbgogICBkaXNhYmxlZCBzaW5jZSAzLjAgZHVlIHRvIHRoZSBjaGFuZ2VzIGluIGxpc3Rjb21wIGhhbmRsaW5nLgogCiAtIElzc3VlICMxOTMyMDogdGVzdF90Y2wgbm8gbG9uZ2VyIGZhaWxzIHdoZW4gd2FudG9iamVjdHMgaXMgZmFsc2UuCiAKLS0gSXNzdWUgIzE5NjgzOiBSZW1vdmVkIGVtcHR5IHRlc3RzIGZyb20gdGVzdF9taW5pZG9tLiAgUGF0Y2ggYnkgQWppdGVzaCBHdXB0YS4KLQogLSBJc3N1ZSAjMTk5MTk6IEZpeCBmbGFreSBTU0wgdGVzdC4gY29ubmVjdF9leCgpIHNvbWV0aW1lcyByZXR1cm5zCiAgIEVXT1VMREJMT0NLIG9uIFdpbmRvd3Mgb3IgVk1zIGhvc3RlZCBvbiBXaW5kb3dzLgogCkBAIC02OTIsMjYgKzMxMzQsMzUgQEAKIAogLSBJc3N1ZSAjMTk5Mjg6IEltcGxlbWVudGVkIGEgdGVzdCBmb3IgcmVwcigpIG9mIGNlbGwgb2JqZWN0cy4KIAotLSBJc3N1ZSAjMTk1MzU6IEZpeGVkIHRlc3RfZG9jeG1scnBjIHdoZW4gcHl0aG9uIGlzIHJ1biB3aXRoIC1PTy4KKy0gSXNzdWUgIzE5NTM1OiBGaXhlZCB0ZXN0X2RvY3htbHJwYywgdGVzdF9mdW5jdG9vbHMsIHRlc3RfaW5zcGVjdCwgYW5kCisgIHRlc3Rfc3RhdGlzdGljcyB3aGVuIHB5dGhvbiBpcyBydW4gd2l0aCAtT08uCiAKIC0gSXNzdWUgIzE5OTI2OiBSZW1vdmVkIHVubmVlZGVkIHRlc3RfbWFpbiBmcm9tIHRlc3RfYWJzdHJhY3RfbnVtYmVycy4KICAgUGF0Y2ggYnkgVmFqcmFza3kgS29rLgogCistIElzc3VlICMxOTU3MjogTW9yZSBza2lwcGVkIHRlc3RzIGV4cGxpY2l0bHkgbWFya2VkIGFzIHNraXBwZWQuCisKIC0gSXNzdWUgIzE5NTk1LCAjMTk5ODc6IFJlLWVuYWJsZWQgYSBsb25nLWRpc2FibGVkIHRlc3QgaW4gdGVzdF93aW5zb3VuZC4KIAogLSBJc3N1ZSAjMTk1ODg6IEZpeGVkIHRlc3RzIGluIHRlc3RfcmFuZG9tIHRoYXQgd2VyZSBzaWxlbnRseSBza2lwcGVkIG1vc3QKICAgb2YgdGhlIHRpbWUuICBQYXRjaCBieSBKdWxpYW4gR2luZGkuCiAKLS0gSXNzdWUgIzE5NTk2OiBTZXQgdW50ZXN0YWJsZSB0ZXN0cyBpbiB0ZXN0X2ltcG9ydGxpYiB0byBOb25lIHRvIGF2b2lkCi0gIHJlcG9ydGluZyBzdWNjZXNzIG9uIGVtcHR5IHRlc3RzLgorQnVpbGQKKy0tLS0tCiAKLS0gSXNzdWUgIzE5NDQwOiBDbGVhbiB1cCB0ZXN0X2NhcGkgYnkgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgX19mdXR1cmVfXwotICBpbXBvcnQsIGNvbnZlcnRpbmcgZnJvbSB0ZXN0X21haW4gdG8gdW5pdHRlc3QubWFpbiwgYW5kIHJ1bm5pbmcgdGhlCi0gIF90ZXN0Y2FwaSBtb2R1bGUgdGVzdHMgd2l0aGluIGEgdW5pdHRlc3QgVGVzdENhc2UuCistIElzc3VlICMxOTcyODogRW5hYmxlIHBpcCBpbnN0YWxsYXRpb24gYnkgZGVmYXVsdCBvbiBXaW5kb3dzLgogCi0tIElzc3VlICMxODcwMiwgMTk1NzI6IEFsbCBza2lwcGVkIHRlc3RzIG5vdyByZXBvcnRlZCBhcyBza2lwcGVkLgorLSBJc3N1ZSAjMTYxMzY6IFJlbW92ZSBWTVMgc3VwcG9ydAogCi0tIElzc3VlICMxOTA4NTogQWRkZWQgYmFzaWMgdGVzdHMgZm9yIGFsbCB0a2ludGVyIHdpZGdldCBvcHRpb25zLgorLSBJc3N1ZSAjMTgyMTU6IEFkZCBzY3JpcHQgVG9vbHMvc3NsL3Rlc3RfbXVsdGlwbGVfdmVyc2lvbnMucHkgdG8gY29tcGlsZSBhbmQKKyAgcnVuIFB5dGhvbidzIHVuaXQgdGVzdHMgd2l0aCBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBPcGVuU1NMLgorCistIElzc3VlICMxOTkyMjogZGVmaW5lIF9JTkNMVURFX19TVERDX0ExX1NPVVJDRSBpbiBIUC1VWCB0byBpbmNsdWRlIG1ic3RhdGVfdAorICBmb3IgbWJydG93YygpLgorCistIElzc3VlICMxOTc4ODoga2lsbF9weXRob24oX2QpLmV4ZSBpcyBub3cgcnVuIGFzIGEgUHJlQnVpbGRFdmVudCBvbiB0aGUKKyAgcHl0aG9uY29yZSBzdWItcHJvamVjdC4gIFRoaXMgc2hvdWxkIHByZXZlbnQgYnVpbGQgZXJyb3JzIGR1ZSBhIHByZXZpb3VzCisgIGJ1aWxkJ3MgcHl0aG9uKF9kKS5leGUgc3RpbGwgcnVubmluZy4KIAogRG9jdW1lbnRhdGlvbgogLS0tLS0tLS0tLS0tLQpAQCAtNzI1LDkgKzMxNzYsNiBAQAogLSBJc3N1ZSAjMjAyNTM6IEZpeGVkIGEgdHlwbyBpbiB0aGUgaXBhZGRyZXNzIGRvY3MgdGhhdCBhZHZlcnRpc2VkIGFuCiAgIGlsbGVnYWwgYXR0cmlidXRlIG5hbWUuICBGb3VuZCBieSBJTkFEQSBOYW9raS4KIAotLSBJc3N1ZSAjMTk5NjM6IERvY3VtZW50IHRoYXQgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSBubyBsb25nZXIgcmVxdWlyZXMKLSAgaW1wb3J0aW5nIHBhcmVudCBwYWNrYWdlcyBzZXBhcmF0ZWx5LgotCiAtIElzc3VlICMxODg0MDogSW50cm9kdWNlIHRoZSBqc29uIG1vZHVsZSBpbiB0aGUgdHV0b3JpYWwsIGFuZCBkZS1lbXBoYXNpemUKICAgdGhlIHBpY2tsZSBtb2R1bGUuCiAKQEAgLTczNSwxNDkgKzMxODMsMjk1IEBACiAKIC0gSXNzdWUgIzE5Nzk1OiBJbXByb3ZlZCBtYXJrdXAgb2YgVHJ1ZS9GYWxzZSBjb25zdGFudHMuCiAKLS0gSXNzdWUgIzE4MzI2OiBDbGFyaWZ5IHRoYXQgbGlzdC5zb3J0J3MgYXJndW1lbnRzIGFyZSBrZXl3b3JkLW9ubHkuICBBbHNvLAotICBhdHRlbXB0IHRvIHJlZHVjZSBjb25mdXNpb24gaW4gdGhlIGdsb3NzYXJ5IGJ5IG5vdCBzYXlpbmcgdGhlcmUgYXJlCi0gIGRpZmZlcmVudCAidHlwZXMiIG9mIGFyZ3VtZW50cyBhbmQgcGFyYW1ldGVycy4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE5Nzg4OiBraWxsX3B5dGhvbihfZCkuZXhlIGlzIG5vdyBydW4gYXMgYSBQcmVCdWlsZEV2ZW50IG9uIHRoZQotICBweXRob25jb3JlIHN1Yi1wcm9qZWN0LiAgVGhpcyBzaG91bGQgcHJldmVudCBidWlsZCBlcnJvcnMgZHVlIGEgcHJldmlvdXMKLSAgYnVpbGQncyBweXRob24oX2QpLmV4ZSBzdGlsbCBydW5uaW5nLgotCi0tIEFkZCB3b3JrYXJvdW5kIGZvciBWUyAyMDEwIG5tYWtlIGNsZWFuIGlzc3VlLiBWUyAyMDEwIGRvZXNuJ3Qgc2V0IHVwIFBBVEgKLSAgZm9yIG5tYWtlLmV4ZSBjb3JyZWN0bHkuCi0KIFRvb2xzL0RlbW9zCiAtLS0tLS0tLS0tLQogCi0tIElzc3VlICMxOTkzNjogQWRkZWQgZXhlY3V0YWJsZSBiaXRzIG9yIHNoZWJhbmcgbGluZXMgdG8gUHl0aG9uIHNjcmlwdHMgd2hpY2gKLSAgcmVxdWlyZXMgdGhlbS4gIERpc2FibGUgZXhlY3V0YWJsZSBiaXRzIGFuZCBzaGViYW5nIGxpbmVzIGluIHRlc3QgYW5kCi0gIGJlbmNobWFyayBmaWxlcyBpbiBvcmRlciB0byBwcmV2ZW50IHVzaW5nIGEgcmFuZG9tIHN5c3RlbSBweXRob24sIGFuZCBpbgotICBzb3VyY2UgZmlsZXMgb2YgbW9kdWxlcyB3aGljaCBkb24ndCBwcm92aWRlIGNvbW1hbmQgbGluZSBpbnRlcmZhY2UuICBGaXhlZAotICBzaGViYW5nIGxpbmUgdG8gdXNlIHB5dGhvbjMgZXhlY3V0YWJsZSBpbiB0aGUgdW5pdHRlc3RndWkgc2NyaXB0LgorLSBJc3N1ZSAjMTk2NTk6IEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIEFyZ3VtZW50IENsaW5pYy4KIAotLSBJc3N1ZSAjMTg5NjA6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBpZ25vcmUgdGhlIHNvdXJjZQotICBlbmNvZGluZyBkZWNsYXJhdGlvbiBvbiB0aGUgc2Vjb25kIGxpbmUgaWYgdGhlIGZpcnN0IGxpbmUgY29udGFpbnMgYW55dGhpbmcKLSAgZXhjZXB0IGEgY29tbWVudC4KKy0gSXNzdWUgIzE5OTc2OiBBcmd1bWVudCBDbGluaWMgTUVUSF9OT0FSR1MgZnVuY3Rpb25zIG5vdyBhbHdheXMKKyAgdGFrZSB0d28gcGFyYW1ldGVycy4KIAogCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMz8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQorV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQmV0YSAxPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0qUmVsZWFzZSBkYXRlOiAxNy1Ob3YtMjAxMyoKLQotTm8gY2hhbmdlcyBmcm9tIHJlbGVhc2UgY2FuZGlkYXRlIDIuCi0KLQotV2hhdCdzIE5ldyBpbiBQeXRob24gMy4zLjMgcmVsZWFzZSBjYW5kaWRhdGUgMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSpSZWxlYXNlIGRhdGU6IDExLU5vdi0yMDEzKgotCi1MaWJyYXJ5Ci0tLS0tLS0tCi0KLS0gSXNzdWUgIzE5MjI3OiBBbnkgcmUtc2VlZGluZyBvZiB0aGUgT3BlblNTTCBSTkcgb24gZm9yayBoYXMgYmVlbiByZW1vdmVkOwotICB0aGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IE9wZW5TU0wgaXRzZWxmIG9yIGJ5IHRoZSBhcHBsaWNhdGlvbi4KLQotLSBJc3N1ZSAjMTk0MzU6IEZpeCBkaXJlY3RvcnkgdHJhdmVyc2FsIGF0dGFjayBvbiBDR0lIdHRwUmVxdWVzdEhhbmRsZXIuCi0KLVRlc3RzCi0tLS0tLQotCi0tIElzc3VlICMxODk2NDogRml4IHRlc3RfdGNsIHdoZW4gcnVuIHdpdGggVGNsL1RrIHZlcnNpb25zICA8IDguNS4KLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE1NjYzOiBSZXZlcnQgT1MgWCBpbnN0YWxsZXIgYnVpbHQtaW4gVGNsL1RrIHN1cHBvcnQgZm9yIDMuMy4zLgotICBTb21lIHRoaXJkLXBhcnR5IHByb2plY3RzLCBzdWNoIGFzIE1hdHBsb3RsaWIgYW5kIFBJTC9QaWxsb3csCi0gIGRlcGVuZGVkIG9uIGJlaW5nIGFibGUgdG8gYnVpbGQgd2l0aCBUY2wgYW5kIFRrIGZyYW1ld29ya3MgaW4KLSAgL0xpYnJhcnkvRnJhbWV3b3Jrcy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMyByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjctT2N0LTIwMTMqCitSZWxlYXNlIGRhdGU6IDIwMTMtMTEtMjQKIAogQ29yZSBhbmQgQnVpbHRpbnMKIC0tLS0tLS0tLS0tLS0tLS0tCiAKKy0gVXNlIHRoZSByZXByIG9mIGEgbW9kdWxlIG5hbWUgaW4gbW9yZSBwbGFjZXMgaW4gaW1wb3J0LCBlc3BlY2lhbGx5CisgIGV4Y2VwdGlvbnMuCisKKy0gSXNzdWUgIzE5NjE5OiBzdHIuZW5jb2RlLCBieXRlcy5kZWNvZGUgYW5kIGJ5dGVhcnJheS5kZWNvZGUgbm93IHVzZSBhbgorICBpbnRlcm5hbCBBUEkgdG8gdGhyb3cgTG9va3VwRXJyb3IgZm9yIGtub3duIG5vbi10ZXh0IGVuY29kaW5ncywgcmF0aGVyCisgIHRoYW4gYXR0ZW1wdGluZyB0aGUgZW5jb2Rpbmcgb3IgZGVjb2Rpbmcgb3BlcmF0aW9uIGFuZCB0aGVuIHRocm93aW5nIGEKKyAgVHlwZUVycm9yIGZvciBhbiB1bmV4cGVjdGVkIG91dHB1dCB0eXBlLiAoVGhlIGxhdHRlciBtZWNoYW5pc20gcmVtYWlucworICBpbiBwbGFjZSBmb3IgdGhpcmQgcGFydHkgbm9uLXRleHQgZW5jb2RpbmdzKQorCistIElzc3VlICMxOTE4MzogSW1wbGVtZW50IFBFUCA0NTYgJ3NlY3VyZSBhbmQgaW50ZXJjaGFuZ2VhYmxlIGhhc2ggYWxnb3JpdGhtJy4KKyAgUHl0aG9uIG5vdyB1c2VzIFNpcEhhc2gyNCBvbiBhbGwgbWFqb3IgcGxhdGZvcm1zLgorCistIElzc3VlICMxMjg5MjogVGhlIHV0Zi0xNiogYW5kIHV0Zi0zMiogZW5jb2RlcnMgbm8gbG9uZ2VyIGFsbG93IHN1cnJvZ2F0ZSBjb2RlCisgIHBvaW50cyAoVStEODAwLVUrREZGRikgdG8gYmUgZW5jb2RlZC4gIFRoZSB1dGYtMzIqIGRlY29kZXJzIG5vIGxvbmdlciBkZWNvZGUKKyAgYnl0ZSBzZXF1ZW5jZXMgdGhhdCBjb3JyZXNwb25kIHRvIHN1cnJvZ2F0ZSBjb2RlIHBvaW50cy4gIFRoZSBzdXJyb2dhdGVwYXNzCisgIGVycm9yIGhhbmRsZXIgbm93IHdvcmtzIHdpdGggdGhlIHV0Zi0xNiogYW5kIHV0Zi0zMiogY29kZWNzLiAgQmFzZWQgb24KKyAgcGF0Y2hlcyBieSBWaWN0b3IgU3Rpbm5lciBhbmQgS2FuZy1IYW8gKEtlbm55KSBMdS4KKworLSBJc3N1ZSAjMTc4MDY6IEFkZGVkIGtleXdvcmQtYXJndW1lbnQgc3VwcG9ydCBmb3IgInRhYnNpemUiIHRvCisgIHN0ci9ieXRlcy5leHBhbmR0YWJzKCkuCisKKy0gSXNzdWUgIzE3ODI4OiBPdXRwdXQgdHlwZSBlcnJvcnMgaW4gc3RyLmVuY29kZSgpLCBieXRlcy5kZWNvZGUoKSBhbmQKKyAgYnl0ZWFycmF5LmRlY29kZSgpIG5vdyBkaXJlY3QgdXNlcnMgdG8gY29kZWNzLmVuY29kZSgpIG9yIGNvZGVjcy5kZWNvZGUoKQorICBhcyBhcHByb3ByaWF0ZS4KKworLSBJc3N1ZSAjMTc4Mjg6IFRoZSBpbnRlcnByZXRlciBub3cgYXR0ZW1wdHMgdG8gY2hhaW4gZXJyb3JzIHRoYXQgb2NjdXIgaW4KKyAgY29kZWMgcHJvY2Vzc2luZyB3aXRoIGEgcmVwbGFjZW1lbnQgZXhjZXB0aW9uIG9mIHRoZSBzYW1lIHR5cGUgdGhhdAorICBpbmNsdWRlcyB0aGUgY29kZWMgbmFtZSBpbiB0aGUgZXJyb3IgbWVzc2FnZS4gSXQgZW5zdXJlcyBpdCBvbmx5IGRvZXMgdGhpcworICB3aGVuIHRoZSBjcmVhdGlvbiBvZiB0aGUgcmVwbGFjZW1lbnQgZXhjZXB0aW9uIHdvbid0IGxvc2UgYW55IGluZm9ybWF0aW9uLgorCistIElzc3VlICMxOTQ2NjogQ2xlYXIgdGhlIGZyYW1lcyBvZiBkYWVtb24gdGhyZWFkcyBlYXJsaWVyIGR1cmluZyB0aGUKKyAgUHl0aG9uIHNodXRkb3duIHRvIGNhbGwgb2JqZWN0cyBkZXN0cnVjdG9ycy4gU28gInVuY2xvc2VkIGZpbGUiIHJlc291cmNlCisgIHdhcm5pbmdzIGFyZSBub3cgY29ycmV0bHkgZW1pdHRlZCBmb3IgZGFlbW9uIHRocmVhZHMuCisKKy0gSXNzdWUgIzE5NTE0OiBEZWR1cGxpY2F0ZSBzb21lIF9QeV9JREVOVElGSUVSIGRlY2xhcmF0aW9ucy4KKyAgUGF0Y2ggYnkgQW5kcmVpIERvcmlhbiBEdW1hLgorCistIElzc3VlICMxNzkzNjogRml4IE8obioqMikgYmVoYXZpb3VyIHdoZW4gYWRkaW5nIG9yIHJlbW92aW5nIG1hbnkgc3ViY2xhc3NlcworICBvZiBhIGdpdmVuIHR5cGUuCisKKy0gSXNzdWUgIzE5NDI4OiB6aXBpbXBvcnQgbm93IGhhbmRsZXMgZXJyb3JzIHdoZW4gcmVhZGluZyB0cnVuY2F0ZWQgb3IgaW52YWxpZAorICBaSVAgYXJjaGl2ZS4KKworLSBJc3N1ZSAjMTg0MDg6IEFkZCBhIG5ldyBQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcigpIGZ1bmN0aW9uIHRvIGhhbmRsZQorICBleGNlcHRpb25zIHdoZW4gbWVyZ2luZyBmYXN0IGxvY2FscyBpbnRvIGZfbG9jYWxzIG9mIGEgZnJhbWUuCisgIFB5RXZhbF9HZXRMb2NhbHMoKSBub3cgcmFpc2VzIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIE5VTEwgb24gZmFpbHVyZS4KKworLSBJc3N1ZSAjMTkzNjk6IE9wdGltaXplZCB0aGUgdXNhZ2Ugb2YgX19sZW5ndGhfaGludF9fKCkuCisKIC0gSXNzdWUgIzE4NjAzOiBFbnN1cmUgdGhhdCBQeU9TX215c3RyaWNtcCBhbmQgUHlPU19teXN0cm5pY21wIGFyZSBpbiB0aGUKICAgUHl0aG9uIGV4ZWN1dGFibGUgYW5kIG5vdCByZW1vdmVkIGJ5IHRoZSBsaW5rZXIncyBvcHRpbWl6ZXIuCiAKLS0gSXNzdWUgIzE5Mjc5OiBVVEYtNyBkZWNvZGVyIG5vIG1vcmUgcHJvZHVjZXMgaWxsZWdhbCBzdHJpbmdzLgotCi0tIEZpeCBtYWNybyBleHBhbnNpb24gb2YgX1B5RXJyX09DQ1VSUkVEKCksIGFuZCBtYWtlIHN1cmUgdG8gdXNlIGl0IGluIGF0Ci0gIGxlYXN0IG9uZSBwbGFjZSBzbyBhcyB0byBhdm9pZCByZWdyZXNzaW9ucy4KLQotLSBJc3N1ZSAjMTkwMTQ6IG1lbW9yeXZpZXcuY2FzdCgpIGlzIG5vdyBhbGxvd2VkIG9uIHplcm8tbGVuZ3RoIHZpZXdzLgotCi0tIElzc3VlICMxOTA5ODogUHJldmVudCBvdmVyZmxvdyBpbiB0aGUgY29tcGlsZXIgd2hlbiB0aGUgcmVjdXJzaW9uIGxpbWl0IGlzIHNldAotICBhYnN1cmRseSBoaWdoLgotCi0tIElzc3VlICMxODk0Mjogc3lzLl9kZWJ1Z21hbGxvY3N0YXRzKCkgb3V0cHV0IHdhcyBkYW1hZ2VkIG9uIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE4NjY3OiBBZGQgbWlzc2luZyAiSEFWRV9GQ0hPV05BVCIgc3ltYm9sIHRvIHBvc2l4Ll9oYXZlX2Z1bmN0aW9ucy4KLQotLSBJc3N1ZSAjMTgzNjg6IFB5T1NfU3RkaW9SZWFkbGluZSgpIG5vIGxvbmdlciBsZWFrcyBtZW1vcnkgd2hlbiByZWFsbG9jKCkKLSAgZmFpbHMuCi0KLS0gSXNzdWUgIzE2NzQxOiBGaXggYW4gZXJyb3IgcmVwb3J0aW5nIGluIGludCgpLgotCi0tIElzc3VlICMxNzg5OTogRml4IHJhcmUgZmlsZSBkZXNjcmlwdG9yIGxlYWsgaW4gb3MubGlzdGRpcigpLgotCi0tIElzc3VlICMxODU1MjogQ2hlY2sgcmV0dXJuIHZhbHVlIG9mIFB5QXJlbmFfQWRkUHlPYmplY3QoKSBpbgotICBvYmoyYXN0X29iamVjdCgpLgotCi0tIElzc3VlICMxODU2MDogRml4IHBvdGVudGlhbCBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gc3VtKCkuCi0KLS0gSXNzdWUgIzE1OTA1OiBGaXggdGhlb3JldGljYWwgYnVmZmVyIG92ZXJmbG93IGluIGhhbmRsaW5nIG9mIHN5cy5hcmd2WzBdLAotICBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IGlmIHRoZSBvcGVyYXRpb24gc3lzdGVtIGRvZXMgbm90IG9iZXkgTUFYUEFUSExFTi4KLQotLSBJc3N1ZSAjMTgzNDQ6IEZpeCBwb3RlbnRpYWwgcmVmLWxlYWtzIGluIF9idWZmZXJlZHJlYWRlcl9yZWFkX2FsbCgpLgotCi0tIElzc3VlICMxNzg3MjogRml4IGEgc2VnZmF1bHQgaW4gbWFyc2hhbC5sb2FkKCkgd2hlbiBpbnB1dCBzdHJlYW0gcmV0dXJucwotICBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgotCi0tIElzc3VlICMxODQyNjogRml4IE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSBpbiBDIGV4dGVuc2lvbiBpbXBvcnQgd2hlbgotICBQeU1vZHVsZV9HZXREZWYoKSByZXR1cm5zIGFuIGVycm9yLgotCi0tIElzc3VlICMxODMyODogUmVvcmRlciBvcHMgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGUqKCkgZnVuY3Rpb25zLiBOb3cgdGhlCi0gIHRzdGF0ZSBpcyBmaXJzdCByZW1vdmVkIGZyb20gVExTIGFuZCB0aGVuIGRlYWxsb2NhdGVkLgotCi0tIElzc3VlICMxODE4NDogUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBhbmQgUHlVbmljb2RlX0Zyb21Gb3JtYXRWKCkgbm93IHJhaXNlCi0gIE92ZXJmbG93RXJyb3Igd2hlbiBhbiBhcmd1bWVudCBvZiAlYyBmb3JtYXQgaXMgb3V0IG9mIHJhbmdlLgotCi0tIElzc3VlICMxODEzNzogRGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cgb24gcHJlY2lzaW9uIGluIGZsb2F0Ll9fZm9ybWF0X18oKQotICBhbmQgY29tcGxleC5fX2Zvcm1hdF9fKCkuCi0KLS0gSXNzdWUgIzE4MTgzOiBGaXggdmFyaW91cyB1bmljb2RlIG9wZXJhdGlvbnMgb24gc3RyaW5ncyB3aXRoIGxhcmdlIHVuaWNvZGUKLSAgY29kZXBvaW50cy4KLQotLSBJc3N1ZSAjMTgxODA6IEZpeCByZWYgbGVhayBpbiBfUHlJbXBvcnRfR2V0RHluTG9hZFdpbmRvd3MoKS4KLQotLSBJc3N1ZSAjMTgwMzg6IFN5bnRheEVycm9yIHJhaXNlZCBkdXJpbmcgY29tcGlsYXRpb24gc291cmNlcyB3aXRoIGlsbGVnYWwKLSAgZW5jb2Rpbmcgbm93IGFsd2F5cyBjb250YWlucyBhbiBlbmNvZGluZyBuYW1lLgotCi0tIElzc3VlICMxNzY0NDogRml4IGEgY3Jhc2ggaW4gc3RyLmZvcm1hdCB3aGVuIGN1cmx5IGJyYWNlcyBhcmUgdXNlZCBpbiBzcXVhcmUKLSAgYnJhY2tldHMuCi0KLS0gSXNzdWUgIzE3OTgzOiBSYWlzZSBhIFN5bnRheEVycm9yIGZvciBhIGBgZ2xvYmFsIF9fY2xhc3NfX2BgIHN0YXRlbWVudCBpbiBhCi0gIGNsYXNzIGJvZHkuCi0KLS0gSXNzdWUgIzE3OTI3OiBGcmFtZSBvYmplY3RzIGtlcHQgYXJndW1lbnRzIGFsaXZlIGlmIHRoZXkgaGFkIGJlZW4gY29waWVkIGludG8KLSAgYSBjZWxsLCBldmVuIGlmIHRoZSBjZWxsIHdhcyBjbGVhcmVkLgorLSBJc3N1ZSAjMTkzMDY6IEFkZCBleHRyYSBoaW50cyB0byB0aGUgZmF1bHRoYW5kbGVyIG1vZHVsZSdzIHN0YWNrCisgIGR1bXBzIHRoYXQgdGhlc2UgYXJlICJ1cHNpZGUgZG93biIuCiAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMTkzOTU6IFJhaXNlIGFuIGV4Y2VwdGlvbiB3aGVuIGF0dGVtcHRpbmcgdG8gcGlja2xlIGEgYnoyIG9yIGx6bWEKLSAgY29tcHJlc3Nvci9kZWNvbXByZXNzb3Igb2JqZWN0LCByYXRoZXIgdGhhbiBjcmVhdGluZyBhIHBpY2tsZSB0aGF0IHdvdWxkCi0gIGNhdXNlIGEgc2VnZmF1bHQgd2hlbiBsb2FkZWQgYW5kIHVzZWQuCistIElzc3VlICMzMTU4OiBkb2N0ZXN0IGNhbiBub3cgZmluZCBkb2N0ZXN0cyBpbiBmdW5jdGlvbnMgYW5kIG1ldGhvZHMKKyAgd3JpdHRlbiBpbiBDLgorCistIElzc3VlICMxMzQ3NzogQWRkZWQgY29tbWFuZCBsaW5lIGludGVyZmFjZSB0byB0aGUgdGFyZmlsZSBtb2R1bGUuCisgIE9yaWdpbmFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE5Njc0OiBpbnNwZWN0LnNpZ25hdHVyZSgpIG5vdyBwcm9kdWNlcyBhIGNvcnJlY3Qgc2lnbmF0dXJlCisgIGZvciBzb21lIGJ1aWx0aW5zLgorCistIElzc3VlICMxOTcyMjogQWRkZWQgb3Bjb2RlLnN0YWNrX2VmZmVjdCgpLCB3aGljaAorICBjb21wdXRlcyB0aGUgc3RhY2sgZWZmZWN0IG9mIGJ5dGVjb2RlIGluc3RydWN0aW9ucy4KKworLSBJc3N1ZSAjMTk3MzU6IEltcGxlbWVudCBwcml2YXRlIGZ1bmN0aW9uIHNzbC5fY3JlYXRlX3N0ZGxpYl9jb250ZXh0KCkgdG8KKyAgY3JlYXRlIFNTTENvbnRleHQgb2JqZWN0cyBpbiBQeXRob24ncyBzdGRsaWIgbW9kdWxlLiBJdCBwcm92aWRlcyBhIHNpbmdsZQorICBjb25maWd1cmF0aW9uIHBvaW50IGFuZCBtYWtlcyB1c2Ugb2YgU1NMQ29udGV4dC5sb2FkX2RlZmF1bHRfY2VydHMoKS4KKworLSBJc3N1ZSAjMTYyMDM6IEFkZCByZS5mdWxsbWF0Y2goKSBmdW5jdGlvbiBhbmQgcmVnZXguZnVsbG1hdGNoKCkgbWV0aG9kLAorICB3aGljaCBhbmNob3IgdGhlIHBhdHRlcm4gYXQgYm90aCBlbmRzIG9mIHRoZSBzdHJpbmcgdG8gbWF0Y2guCisgIE9yaWdpbmFsIHBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTM1OTI6IEltcHJvdmVkIHRoZSByZXByIGZvciByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiBvYmplY3RzLgorICBCYXNlZCBvbiBwYXRjaCBieSBIdWdvIExvcGVzIFRhdmFyZXMuCisKKy0gSXNzdWUgIzE5NjQxOiBBZGRlZCB0aGUgYXVkaW9vcC5ieXRlc3dhcCgpIGZ1bmN0aW9uIHRvIGNvbnZlcnQgYmlnLWVuZGlhbgorICBzYW1wbGVzIHRvIGxpdHRsZS1lbmRpYW4gYW5kIHZpY2UgdmVyc2EuCisKKy0gSXNzdWUgIzE1MjA0OiBEZXByZWNhdGVkIHRoZSAnVScgbW9kZSBpbiBmaWxlLWxpa2Ugb2JqZWN0cy4KKworLSBJc3N1ZSAjMTc4MTA6IEltcGxlbWVudCBQRVAgMzE1NCwgcGlja2xlIHByb3RvY29sIDQuCisKKy0gSXNzdWUgIzE5NjY4OiBBZGRlZCBzdXBwb3J0IGZvciB0aGUgY3AxMTI1IGVuY29kaW5nLgorCistIElzc3VlICMxOTY4OTogQWRkIHNzbC5jcmVhdGVfZGVmYXVsdF9jb250ZXh0KCkgZmFjdG9yeSBmdW5jdGlvbi4gSXQgY3JlYXRlcworICBhIG5ldyBTU0xDb250ZXh0IG9iamVjdCB3aXRoIHNlY3VyZSBkZWZhdWx0IHNldHRpbmdzLgorCistIElzc3VlICMxOTcyNzogb3MudXRpbWUoLi4uLCBOb25lKSBpcyBub3cgcG90ZW50aWFsbHkgbW9yZSBwcmVjaXNlCisgIHVuZGVyIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE3MjAxOiBaSVA2NCBleHRlbnNpb25zIG5vdyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LiAgUGF0Y2ggYnkKKyAgV2lsbGlhbSBNYWxsYXJkLgorCistIElzc3VlICMxOTI5MjogQWRkIFNTTENvbnRleHQubG9hZF9kZWZhdWx0X2NlcnRzKCkgdG8gbG9hZCBkZWZhdWx0IHJvb3QgQ0EKKyAgY2VydGlmaWNhdGVzIGZyb20gZGVmYXVsdCBzdG9yZXMgb3Igc3lzdGVtIHN0b3Jlcy4gQnkgZGVmYXVsdCB0aGUgbWV0aG9kCisgIGxvYWRzIENBIGNlcnRzIGZvciBhdXRoZW50aWNhdGlvbiBvZiBzZXJ2ZXIgY2VydHMuCisKKy0gSXNzdWUgIzE5NjczOiBBZGQgcGF0aGxpYiB0byB0aGUgc3RkbGliIGFzIGEgcHJvdmlzaW9uYWwgbW9kdWxlIChQRVAgNDI4KS4KKworLSBJc3N1ZSAjMTY1OTY6IHBkYiBpbiBhIGdlbmVyYXRvciBub3cgcHJvcGVybHkgc2tpcHMgb3ZlciB5aWVsZCBhbmQKKyAgeWllbGQgZnJvbSByYXRoZXIgdGhhbiBzdGVwcGluZyBvdXQgb2YgdGhlIGdlbmVyYXRvciBpbnRvIGl0cworICBjYWxsZXIuICAoVGhpcyBpcyBlc3NlbnRpYWwgZm9yIHN0ZXBwaW5nIHRocm91Z2ggYXN5bmNpbyBjb3JvdXRpbmVzLikKKworLSBJc3N1ZSAjMTc5MTY6IEFkZGVkIGRpcy5CeXRlY29kZS5mcm9tX3RyYWNlYmFjaygpIGFuZAorICBkaXMuQnl0ZWNvZGUuY3VycmVudF9vZmZzZXQgdG8gZWFzaWx5IGRpc3BsYXkgImN1cnJlbnQgaW5zdHJ1Y3Rpb24iCisgIG1hcmtlcnMgaW4gdGhlIG5ldyBkaXNhc3NlbWJseSBBUEkgKFBhdGNoIGJ5IENsYXVkaXUgUG9wYSkuCisKKy0gSXNzdWUgIzE5NTUyOiB2ZW52IG5vdyBzdXBwb3J0cyBib290c3RyYXBwaW5nIHBpcCBpbnRvIHZpcnR1YWwgZW52aXJvbm1lbnRzCisKKy0gSXNzdWUgIzE3MTM0OiBGaW5hbGl6ZSBpbnRlcmZhY2UgdG8gV2luZG93cycgY2VydGlmaWNhdGUgc3RvcmUuIENlcnQgYW5kCisgIENSTCBlbnVtZXJhdGlvbiBhcmUgbm93IHR3byBmdW5jdGlvbnMuIGVudW1fY2VydGlmaWNhdGVzKCkgYWxzbyByZXR1cm5zCisgIHB1cnBvc2UgZmxhZ3MgYXMgc2V0IG9mIE9JRHMuCisKKy0gSXNzdWUgIzE5NTU1OiBSZXN0b3JlIHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignU08nKSwgKGFuZCB0aGUgZGlzdHV0aWxzCisgIGVxdWl2YWxlbnQpIHdpdGggYSBEZXByZWNhdGlvbldhcm5pbmcgcG9pbnRpbmcgcGVvcGxlIGF0ICRFWFRfU1VGRklYLgorCistIElzc3VlICM4ODEzOiBBZGQgU1NMQ29udGV4dC52ZXJpZnlfZmxhZ3MgdG8gY2hhbmdlIHRoZSB2ZXJpZmljYXRpb24gZmxhZ3MKKyAgb2YgdGhlIGNvbnRleHQgaW4gb3JkZXIgdG8gZW5hYmxlIGNlcnRpZmljYXRpb24gcmV2b2NhdGlvbiBsaXN0IChDUkwpCisgIGNoZWNrcyBvciBzdHJpY3QgWDUwOSBydWxlcy4KKworLSBJc3N1ZSAjMTgyOTQ6IEZpeCB0aGUgemxpYiBtb2R1bGUgdG8gbWFrZSBpdCA2NC1iaXQgc2FmZS4KKworLSBJc3N1ZSAjMTk2ODI6IEZpeCBjb21wYXRpYmlsaXR5IGlzc3VlIHdpdGggb2xkIHZlcnNpb24gb2YgT3BlblNTTCB0aGF0CisgIHdhcyBpbnRyb2R1Y2VkIGJ5IElzc3VlICMxODM3OS4KKworLSBJc3N1ZSAjMTQ0NTU6IHBsaXN0bGliIG5vdyBzdXBwb3J0cyBiaW5hcnkgcGxpc3RzIGFuZCBoYXMgYW4gdXBkYXRlZCBBUEkuCisKKy0gSXNzdWUgIzE5NjMzOiBGaXhlZCB3cml0aW5nIG5vdCBjb21wcmVzc2VkIDE2LSBhbmQgMzItYml0IHdhdmUgZmlsZXMgb24KKyAgYmlnLWVuZGlhbiBwbGF0Zm9ybXMuCisKKy0gSXNzdWUgIzE4Mzc5OiBTU0xTb2NrZXQuZ2V0cGVlcmNlcnQoKSByZXR1cm5zIENBIGlzc3VlciBBSUEgZmllbGRzLCBPQ1NQCisgIGFuZCBDUkwgZGlzdHJpYnV0aW9uIHBvaW50cy4KKworLSBJc3N1ZSAjMTgxMzg6IEltcGxlbWVudCBjYWRhdGEgYXJndW1lbnQgb2YgU1NMQ29udGV4dC5sb2FkX3ZlcmlmeV9sb2NhdGlvbigpCisgIHRvIGxvYWQgQ0EgY2VydGlmaWNhdGVzIGFuZCBDUkwgZnJvbSBtZW1vcnkuIEl0IHN1cHBvcnRzIFBFTSBhbmQgREVSCisgIGVuY29kZWQgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTg3NzU6IEFkZCBuYW1lIGFuZCBibG9ja19zaXplIGF0dHJpYnV0ZSB0byBITUFDIG9iamVjdC4gVGhleSBub3cKKyAgcHJvdmlkZSB0aGUgc2FtZSBBUEkgZWxlbWVudHMgYXMgbm9uLWtleWVkIGNyeXB0b2dyYXBoaWMgaGFzaCBmdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE3Mjc2OiBNRDUgYXMgZGVmYXVsdCBkaWdlc3Rtb2QgZm9yIEhNQUMgaXMgZGVwcmVjYXRlZC4gVGhlIEhNQUMKKyAgbW9kdWxlIHN1cHBvcnRzIGRpZ2VzdG1vZCBuYW1lcywgZS5nLiBobWFjLkhNQUMoJ3NoYTEnKS4KKworLSBJc3N1ZSAjMTk0NDk6IGluIGNzdidzIHdyaXRlcm93LCBoYW5kbGUgbm9uLXN0cmluZyBrZXlzIHdoZW4gZ2VuZXJhdGluZyB0aGUKKyAgZXJyb3IgbWVzc2FnZSB0aGF0IGNlcnRhaW4ga2V5cyBhcmUgbm90IGluIHRoZSAnZmllbGRuYW1lcycgbGlzdC4KKworLSBJc3N1ZSAjMTM2MzM6IEFkZGVkIGEgbmV3IGNvbnZlcnRfY2hhcnJlZnMga2V5d29yZCBhcmcgdG8gSFRNTFBhcnNlciB0aGF0LAorICB3aGVuIFRydWUsIGF1dG9tYXRpY2FsbHkgY29udmVydHMgYWxsIGNoYXJhY3RlciByZWZlcmVuY2VzLgorCistIElzc3VlICMyOTI3OiBBZGRlZCB0aGUgdW5lc2NhcGUoKSBmdW5jdGlvbiB0byB0aGUgaHRtbCBtb2R1bGUuCisKKy0gSXNzdWUgIzg0MDI6IEFkZGVkIHRoZSBlc2NhcGUoKSBmdW5jdGlvbiB0byB0aGUgZ2xvYiBtb2R1bGUuCisKKy0gSXNzdWUgIzE3NjE4OiBBZGQgQmFzZTg1IGFuZCBBc2NpaTg1IGVuY29kaW5nL2RlY29kaW5nIHRvIHRoZSBiYXNlNjQgbW9kdWxlLgorCistIElzc3VlICMxOTYzNDogdGltZS5zdHJmdGltZSgiJXkiKSBub3cgcmFpc2VzIGEgVmFsdWVFcnJvciBvbiBBSVggd2hlbiBnaXZlbiBhCisgIHllYXIgYmVmb3JlIDE5MDAuCisKKy0gRml4IHRlc3Quc3VwcG9ydC5iaW5kX3BvcnQoKSB0byBub3QgY2F1c2UgYW4gZXJyb3Igd2hlbiBQeXRob24gd2FzIGNvbXBpbGVkCisgIG9uIGEgc3lzdGVtIHdpdGggU09fUkVVU0VQT1JUIGRlZmluZWQgaW4gdGhlIGhlYWRlcnMgYnV0IHJ1biBvbiBhIHN5c3RlbQorICB3aXRoIGFuIE9TIGtlcm5lbCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgdGhhdCByZWFzb25hYmx5IG5ldyBzb2NrZXQgb3B0aW9uLgorCistIEZpeCBjb21waWxhdGlvbiBlcnJvciB1bmRlciBnY2Mgb2YgdGhlIGN0eXBlcyBtb2R1bGUgYnVuZGxlZCBsaWJmZmkgZm9yIGFybS4KKworLSBJc3N1ZSAjMTk0NDg6IEFkZCBwcml2YXRlIEFQSSB0byBTU0wgbW9kdWxlIHRvIGxvb2t1cCBBU04uMSBvYmplY3RzIGJ5IE9JRCwKKyAgTklELCBzaG9ydCBuYW1lIGFuZCBsb25nIG5hbWUuCisKKy0gSXNzdWUgIzE5MjgyOiBkYm0ub3BlbiBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4gKEluaXRhbAorICBwYXRjaCBieSBDbGF1ZGl1IFBvcGEpCisKKy0gSXNzdWUgIzgzMTE6IEFkZGVkIHN1cHBvcnQgZm9yIHdyaXRpbmcgYW55IGJ5dGVzLWxpa2Ugb2JqZWN0cyBpbiB0aGUgYWlmYywKKyAgc3VuYXUsIGFuZCB3YXZlIG1vZHVsZXMuCisKKy0gSXNzdWUgIzUyMDI6IEFkZGVkIHN1cHBvcnQgZm9yIHVuc2Vla2FibGUgZmlsZXMgaW4gdGhlIHdhdmUgbW9kdWxlLgorCistIElzc3VlICMxOTU0NCBhbmQgSXNzdWUgIzExODA6IFJlc3RvcmUgZ2xvYmFsIG9wdGlvbiB0byBpZ25vcmUKKyAgfi8ucHlkaXN0dXRpbHMuY2ZnIGluIERpc3R1dGlscywgYWNjaWRlbnRhbGx5IHJlbW92ZWQgaW4gYmFja291dCBvZgorICBkaXN0dXRpbHMyIGNoYW5nZXMuCisKKy0gSXNzdWUgIzE5NTIzOiBDbG9zZWQgRmlsZUhhbmRsZXIgbGVhayB3aGljaCBvY2N1cnJlZCB3aGVuIGRlbGF5IHdhcyBzZXQuCisKKy0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjNjUxNjogUmVzdG9yZSBzdXBwb3J0IGZvciAtLXVzZXIgYW5kIC0tZ3JvdXAKKyAgcGFyYW1ldGVycyB0byBzZGlzdCBjb21tYW5kIGFjY2lkZW50YWxseSByb2xsZWQgYmFjayBhcyBwYXJ0IG9mIHRoZQorICBkaXN0dXRpbHMyIHJvbGxiYWNrLgorCistIElzc3VlICMxMzY3NDogUHJldmVudGVkIHRpbWUuc3RyZnRpbWUgZnJvbSBjcmFzaGluZyBvbiBXaW5kb3dzIHdoZW4gZ2l2ZW4KKyAgYSB5ZWFyIGJlZm9yZSAxOTAwIGFuZCBhIGZvcm1hdCBvZiAleS4KKworLSBJc3N1ZSAjMTk0MDY6IGltcGxlbWVudGF0aW9uIG9mIHRoZSBlbnN1cmVwaXAgbW9kdWxlIChwYXJ0IG9mIFBFUCA0NTMpLgorICBQYXRjaCBieSBEb25hbGQgU3R1ZmZ0IGFuZCBOaWNrIENvZ2hsYW4uCisKKy0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjNjI4NjogUmVzdG9yZSB1c2Ugb2YgdXJsbGliIG92ZXIgaHR0cCBhbGxvd2luZyB1c2UKKyAgb2YgaHR0cF9wcm94eSBmb3IgRGlzdHV0aWxzIHVwbG9hZCBjb21tYW5kLCBhIGZlYXR1cmUgYWNjaWRlbnRhbGx5IGxvc3QKKyAgaW4gdGhlIHJvbGxiYWNrIG9mIGRpc3R1dGlsczIuCisKKy0gSXNzdWUgIzE5NTQ0IGFuZCBJc3N1ZSAjNzQ1NzogUmVzdG9yZSB0aGUgcmVhZF9wa2dfZmlsZSBtZXRob2QgdG8KKyAgZGlzdHV0aWxzLmRpc3QuRGlzdHJpYnV0aW9uTWV0YWRhdGEgYWNjaWRlbnRhbGx5IHJlbW92ZWQgaW4gdGhlIHVuZG8gb2YKKyAgZGlzdHV0aWxzMi4KKworLSBJc3N1ZSAjMTY2ODU6IEFkZGVkIHN1cHBvcnQgZm9yIGFueSBieXRlcy1saWtlIG9iamVjdHMgaW4gdGhlIGF1ZGlvb3AgbW9kdWxlLgorICBSZW1vdmVkIHN1cHBvcnQgZm9yIHN0cmluZ3MuCisKKy0gSXNzdWUgIzcxNzE6IEFkZCBXaW5kb3dzIGltcGxlbWVudGF0aW9uIG9mIGBgaW5ldF9udG9wYGAgYW5kIGBgaW5ldF9wdG9uYGAKKyAgdG8gc29ja2V0IG1vZHVsZS4gUGF0Y2ggYnkgQXRzdW8gSXNoaW1vdG8uCisKKy0gSXNzdWUgIzE5MjYxOiBBZGRlZCBzdXBwb3J0IGZvciB3cml0aW5nIDI0LWJpdCBzYW1wbGVzIGluIHRoZSBzdW5hdSBtb2R1bGUuCisKKy0gSXNzdWUgIzEwOTc3OTc6IEFkZGVkIENQMjczIGVuY29kaW5nLCB1c2VkIG9uIElCTSBtYWluZnJhbWVzIGluCisgIEdlcm1hbnkgYW5kIEF1c3RyaWEuICBNYXBwaW5nIHByb3ZpZGVkIGJ5IE1pY2hhZWwgQmllcmVuZmVsZC4KKworLSBJc3N1ZSAjMTU3NTAyMDogRml4ZWQgc3VwcG9ydCBvZiAyNC1iaXQgd2F2ZSBmaWxlcyBvbiBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTkzNzg6IEZpeGVkIGEgbnVtYmVyIG9mIGNhc2VzIGluIHRoZSBkaXMgbW9kdWxlIHdoZXJlIHRoZSBuZXcKKyAgImZpbGUiIHBhcmFtZXRlciB3YXMgbm90IGJlaW5nIGhvbm91cmVkIGNvcnJlY3RseQorCistIElzc3VlICMxOTM3ODogUmVtb3ZlZCB0aGUgImRpcy5CeXRlY29kZS5zaG93X2luZm8iIG1ldGhvZAorCistIElzc3VlICMxOTM3ODogUmVuYW1lZCB0aGUgImRpcy5CeXRlY29kZS5kaXNwbGF5X2NvZGUiIG1ldGhvZCB0bworICAiZGlzLkJ5dGVjb2RlLmRpcyIgYW5kIGNvbnZlcnRlZCBpdCB0byByZXR1cm5pbmcgYSBzdHJpbmcgcmF0aGVyIHRoYW4KKyAgcHJpbnRpbmcgb3V0cHV0LgorCistIElzc3VlICMxOTM3ODogdGhlICJsaW5lX29mZnNldCIgcGFyYW1ldGVyIGluIHRoZSBuZXcgImRpcy5nZXRfaW5zdHJ1Y3Rpb25zIgorICBBUEkgaGFzIGJlZW4gcmVuYW1lZCB0byAiZmlyc3RfbGluZSIgKGFuZCB0aGUgZGVmYXVsdCB2YWx1ZSBhbmQgdXNhZ2UKKyAgY2hhbmdlZCBhY2NvcmRpbmdseSkuIFRoaXMgc2hvdWxkIHJlZHVjZSBjb25mdXNpb24gd2l0aCB0aGUgbW9yZSBjb21tb24gdXNlCisgIG9mICJvZmZzZXQiIGluIHRoZSBkaXMgZG9jcyB0byByZWZlciB0byBieXRlY29kZSBvZmZzZXRzLgorCistIElzc3VlICMxODY3ODogQ29ycmVjdGVkIHNwd2Qgc3RydWN0IG1lbWJlciBuYW1lcyBpbiBzcHdkIG1vZHVsZToKKyAgc3BfbmFtLT5zcF9uYW1wLCBhbmQgc3BfcHdkLT5zcF9wd2RwLiAgVGhlIG9sZCBuYW1lcyBhcmUga2VwdCBhcyBleHRyYQorICBzdHJ1Y3RzZXEgbWVtYmVycywgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisKKy0gSXNzdWUgIzYxNTc6IEZpeGVkIHRraW50ZXIuVGV4dC5kZWJ1ZygpLiAgdGtpbnRlci5UZXh0LmJib3goKSBub3cgcmFpc2VzCisgIFR5cGVFcnJvciBpbnN0ZWFkIG9mIFRjbEVycm9yIG9uIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMuICBPcmlnaW5hbCBwYXRjaAorICBieSBHdWlsaGVybWUgUG9sby4KKworLSBJc3N1ZSAjMTAxOTc6IFJld29yayBzdWJwcm9jZXNzLmdldFtzdGF0dXNdb3V0cHV0IHRvIHVzZSBzdWJwcm9jZXNzCisgIGZ1bmN0aW9uYWxpdHkgYW5kIHRodXMgdG8gd29yayBvbiBXaW5kb3dzLiBQYXRjaCBieSBOaWNrIENvZ2hsYW4KKworLSBJc3N1ZSAjNjE2MDogVGhlIGJib3goKSBtZXRob2Qgb2YgdGtpbnRlci5TcGluYm94IG5vdyByZXR1cm5zIGEgdHVwbGUgb2YKKyAgaW50ZWdlcnMgaW5zdGVhZCBvZiBhIHN0cmluZy4gIEJhc2VkIG9uIHBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgorCistIElzc3VlICMxOTQwMzogY29udGV4dGxpYi5yZWRpcmVjdF9zdGRvdXQgaXMgbm93IHJlZW50cmFudAorCistIElzc3VlICMxOTI4NjogRGlyZWN0b3JpZXMgaW4gYGBwYWNrYWdlX2RhdGFgYCBhcmUgbm8gbG9uZ2VyIGFkZGVkIHRvCisgIHRoZSBmaWxlbGlzdCwgcHJldmVudGluZyBmYWlsdXJlIG91dGxpbmVkIGluIHRoZSB0aWNrZXQuCisKKy0gSXNzdWUgIzE5NDgwOiBIVE1MUGFyc2VyIG5vdyBhY2NlcHRzIGFsbCB2YWxpZCBzdGFydC10YWcgbmFtZXMgYXMgZGVmaW5lZAorICBieSB0aGUgSFRNTDUgc3RhbmRhcmQuCisKKy0gSXNzdWUgIzE1MTE0OiBUaGUgaHRtbC5wYXJzZXIgbW9kdWxlIG5vdyByYWlzZXMgYSBEZXByZWNhdGlvbldhcm5pbmcgd2hlbiB0aGUKKyAgc3RyaWN0IGFyZ3VtZW50IG9mIEhUTUxQYXJzZXIgb3IgdGhlIEhUTUxQYXJzZXIuZXJyb3IgbWV0aG9kIGFyZSB1c2VkLgorCistIElzc3VlICMxOTQxMDogVW5kbyB0aGUgc3BlY2lhbC1jYXNpbmcgcmVtb3ZhbCBvZiAnJyBmb3IKKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLgorCistIElzc3VlICMxOTQyNDogRml4IHRoZSB3YXJuaW5ncyBtb2R1bGUgdG8gYWNjZXB0IGZpbGVuYW1lIGNvbnRhaW5pbmcgc3Vycm9nYXRlCisgIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzE5NDM1OiBGaXggZGlyZWN0b3J5IHRyYXZlcnNhbCBhdHRhY2sgb24gQ0dJSHR0cFJlcXVlc3RIYW5kbGVyLgorCistIElzc3VlICMxOTIyNzogUmVtb3ZlIHB0aHJlYWRfYXRmb3JrKCkgaGFuZGxlci4gVGhlIGhhbmRsZXIgd2FzIGFkZGVkIHRvCisgIHNvbHZlICMxODc0NyBidXQgaGFzIGNhdXNlZCBpc3N1ZXMuCisKKy0gSXNzdWUgIzE5NDIwOiBGaXggcmVmZXJlbmNlIGxlYWsgaW4gbW9kdWxlIGluaXRhbGl6YXRpb24gY29kZSBvZgorICBfaGFzaG9wZW5zc2wuYworCistIElzc3VlICMxOTMyOTogT3B0aW1pemVkIGNvbXBpbGluZyBjaGFyc2V0cyBpbiByZWd1bGFyIGV4cHJlc3Npb25zLgogCiAtIElzc3VlICMxOTIyNzogVHJ5IHRvIGZpeCBkZWFkbG9ja3MgY2F1c2VkIGJ5IHJlLXNlZWRpbmcgdGhlbiBPcGVuU1NMCiAgIHBzZXVkby1yYW5kb20gbnVtYmVyIGdlbmVyYXRvciBvbiBmb3JrKCkuCkBAIC05MDAsMTIgKzM0OTQsMzAgQEAKIC0gSXNzdWUgIzE2MDM5OiBDVkUtMjAxMy0xNzUyOiBDaGFuZ2UgdXNlIG9mIHJlYWRsaW5lIGluIGltYXBsaWIgbW9kdWxlIHRvIGxpbWl0CiAgIGxpbmUgbGVuZ3RoLiAgUGF0Y2ggYnkgRW1pbCBMaW5kLgogCistIElzc3VlICMxOTMzMDogdGhlIHVubmVjZXNzYXJ5IHdyYXBwZXIgZnVuY3Rpb25zIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlCisgIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgbmV3IGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0IGFuZAorICBjb250ZXh0bGliLnN1cHByZXNzIGNvbnRleHQgbWFuYWdlcnMsIHdoaWNoIGFsc28gZW5zdXJlcyB0aGV5IHByb3ZpZGUKKyAgcmVhc29uYWJsZSBoZWxwKCkgb3V0cHV0IG9uIGluc3RhbmNlcworCiAtIElzc3VlICMxOTM5MzogRml4IHN5bXRhYmxlLnN5bXRhYmxlIGZ1bmN0aW9uIHRvIG5vdCBiZSBjb25mdXNlZCB3aGVuIHRoZXJlIGFyZQogICBmdW5jdGlvbnMgb3IgY2xhc3NlcyBuYW1lZCAidG9wIi4KIAorLSBJc3N1ZSAjMTg2ODU6IFJlc3RvcmUgcmUgcGVyZm9ybWFuY2UgdG8gcHJlLVBFUCAzOTMgbGV2ZWxzLgorCiAtIElzc3VlICMxOTMzOTogdGVsbmV0bGliIG1vZHVsZSBpcyBub3cgdXNpbmcgdGltZS5tb25vdG9uaWMoKSB3aGVuIGF2YWlsYWJsZQogICB0byBjb21wdXRlIHRpbWVvdXQuCiAKKy0gSXNzdWUgIzE5Mzk5OiBmaXggc3BvcmFkaWMgdGVzdF9zdWJwcm9jZXNzIGZhaWx1cmUuCisKKy0gSXNzdWUgIzEzMjM0OiBGaXggb3MubGlzdGRpciB0byB3b3JrIHdpdGggZXh0ZW5kZWQgcGF0aHMgb24gV2luZG93cy4KKyAgUGF0Y2ggYnkgU2FudG9zbyBXaWpheWEuCisKKy0gSXNzdWUgIzE5Mzc1OiBUaGUgc2l0ZSBtb2R1bGUgYWRkaW5nIGEgInNpdGUtcHl0aG9uIiBkaXJlY3RvcnkgdG8gc3lzLnBhdGgsCisgIGlmIGl0IGV4aXN0cywgaXMgbm93IGRlcHJlY2F0ZWQuCisKKy0gSXNzdWUgIzE5Mzc5OiBMYXppbHkgaW1wb3J0IGxpbmVjYWNoZSBpbiB0aGUgd2FybmluZ3MgbW9kdWxlLCB0byBtYWtlCisgIHN0YXJ0dXAgd2l0aCB3YXJuaW5ncyBmYXN0ZXIgdW50aWwgYSB3YXJuaW5nIGdldHMgcHJpbnRlZC4KKwogLSBJc3N1ZSAjMTkyODg6IEZpeGVkIHRoZSAiaW4iIG9wZXJhdG9yIG9mIGRibS5nbnUgZGF0YWJhc2VzIGZvciBzdHJpbmcKICAgYXJndW1lbnQuICBPcmlnaW5hbCBwYXRjaCBieSBBcmZyZXZlciBGcmVodGVzIFRhaWZlcnNhciBBcmFoZXNpcy4KIApAQCAtOTE0LDUyICszNTI2LDMwMSBAQAogCiAtIElzc3VlICMxOTMyNzogRml4ZWQgdGhlIHdvcmtpbmcgb2YgcmVndWxhciBleHByZXNzaW9ucyB3aXRoIHRvbyBiaWcgY2hhcnNldC4KIAorLSBJc3N1ZSAjMTc0MDA6IE5ldyAnaXNfZ2xvYmFsJyBhdHRyaWJ1dGUgZm9yIGlwYWRkcmVzcyB0byB0ZWxsIGlmIGFuIGFkZHJlc3MKKyAgaXMgYWxsb2NhdGVkIGJ5IElBTkEgZm9yIGdsb2JhbCBvciBwcml2YXRlIG5ldHdvcmtzLgorCiAtIElzc3VlICMxOTM1MDogSW5jcmVhc2luZyB0aGUgdGVzdCBjb3ZlcmFnZSBvZiBtYWN1cmwycGF0aC4gUGF0Y2ggYnkgQ29saW4KICAgV2lsbGlhbXMuCiAKKy0gSXNzdWUgIzE5MzY1OiBPcHRpbWl6ZWQgdGhlIHBhcnNpbmcgb2YgbG9uZyByZXBsYWNlbWVudCBzdHJpbmcgaW4gcmUuc3ViKigpCisgIGZ1bmN0aW9ucy4KKwogLSBJc3N1ZSAjMTkzNTI6IEZpeCB1bml0dGVzdCBkaXNjb3Zlcnkgd2hlbiBhIG1vZHVsZSBjYW4gYmUgcmVhY2hlZAogICB0aHJvdWdoIHNldmVyYWwgcGF0aHMgKGUuZy4gdW5kZXIgRGViaWFuL1VidW50dSB3aXRoIHZpcnR1YWxlbnYpLgogCiAtIElzc3VlICMxNTIwNzogRml4IG1pbWV0eXBlcyB0byByZWFkIGZyb20gY29ycmVjdCBwYXJ0IG9mIFdpbmRvd3MgcmVnaXN0cnkKICAgT3JpZ2luYWwgcGF0Y2ggYnkgRGF2ZSBDaGFtYmVycwogCistIElzc3VlICMxNjU5NTogQWRkIHBybGltaXQoKSB0byByZXNvdXJjZSBtb2R1bGUuCisKKy0gSXNzdWUgIzE5MzI0OiBFeHBvc2UgTGludXgtc3BlY2lmaWMgY29uc3RhbnRzIGluIHJlc291cmNlIG1vZHVsZS4KKworLSBMb2FkIFNTTCdzIGVycm9yIHN0cmluZ3MgaW4gaGFzaGxpYi4KKworLSBJc3N1ZSAjMTg1Mjc6IFVwZ3JhZGUgaW50ZXJuYWwgY29weSBvZiB6bGliIHRvIDEuMi44LgorCistIElzc3VlICMxOTI3NDogQWRkIGEgZmlsdGVyZnVuYyBwYXJhbWV0ZXIgdG8gUHlaaXBGaWxlLndyaXRlcHkuCisKIC0gSXNzdWUgIzg5NjQ6IGZpeCBwbGF0Zm9ybS5fc3lzX3ZlcnNpb24gdG8gaGFuZGxlIElyb25QeXRob24gMi42Ky4KICAgUGF0Y2ggYnkgTWFydGluIE1hdHVzaWFrLgogCistIElzc3VlICMxOTQxMzogUmVzdG9yZSBwcmUtMy4zIHJlbG9hZCgpIHNlbWFudGljcyBvZiByZS1maW5kaW5nIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE4OTU4OiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGpzb24ubG9hZChzKSB3aGlsZSBwYXNzaW5nIGEgc3RyaW5nCisgIHRoYXQgc3RhcnRzIHdpdGggYSBVVEYtOCBCT00uCisKKy0gSXNzdWUgIzE5MzA3OiBJbXByb3ZlIGVycm9yIG1lc3NhZ2UgZm9yIGpzb24ubG9hZChzKSB3aGlsZSBwYXNzaW5nIG9iamVjdHMKKyAgb2YgdGhlIHdyb25nIHR5cGUuCisKIC0gSXNzdWUgIzE2MDM4OiBDVkUtMjAxMy0xNzUyOiBmdHBsaWI6IExpbWl0IGFtb3VudCBvZiBkYXRhIHJlYWQgYnkKICAgbGltaXRpbmcgdGhlIGNhbGwgdG8gcmVhZGxpbmUoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1pY2hhxYIKICAgSmFzdHJ6xJlic2tpIGFuZCBHaWFtcGFvbG8gUm9kb2xhLgogCistIElzc3VlICMxNzA4NzogSW1wcm92ZWQgdGhlIHJlcHIgZm9yIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaCBvYmplY3RzLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTk2NjQ6IHRlc3RfdXNlcmRpY3QncyByZXByIHRlc3Qgbm8gbG9uZ2VyIGRlcGVuZHMgb24gdGhlIG9yZGVyCisgIG9mIGRpY3QgZWxlbWVudHMuCisKKy0gSXNzdWUgIzE5NDQwOiBDbGVhbiB1cCB0ZXN0X2NhcGkgYnkgcmVtb3ZpbmcgYW4gdW5uZWNlc3NhcnkgX19mdXR1cmVfXworICBpbXBvcnQsIGNvbnZlcnRpbmcgZnJvbSB0ZXN0X21haW4gdG8gdW5pdHRlc3QubWFpbiwgYW5kIHJ1bm5pbmcgdGhlCisgIF90ZXN0Y2FwaSBtb2R1bGUgdGVzdHMgYXMgc3ViVGVzdHMgb2YgYSB1bml0dGVzdCBUZXN0Q2FzZSBtZXRob2QuCisKKy0gSXNzdWUgIzE5Mzc4OiB0aGUgbWFpbiBkaXMgbW9kdWxlIHRlc3RzIGFyZSBub3cgcnVuIHdpdGggYm90aCBzdGRvdXQKKyAgcmVkaXJlY3Rpb24gKmFuZCogcGFzc2luZyBhbiBleHBsaWNpdCBmaWxlIHBhcmFtZXRlcgorCistIElzc3VlICMxOTM3ODogcmVtb3ZlZCB0aGUgbm90LWFjdHVhbGx5LWhlbHBmdWwgYXNzZXJ0SW5zdHJ1Y3Rpb25NYXRjaGVzCisgIGFuZCBhc3NlcnRCeXRlY29kZUV4YWN0bHlNYXRjaGVzIGhlbHBlcnMgZnJvbSBieXRlY29kZV9oZWxwZXIKKworLSBJc3N1ZSAjMTg3MDI6IEFsbCBza2lwcGVkIHRlc3RzIG5vdyByZXBvcnRlZCBhcyBza2lwcGVkLgorCistIElzc3VlICMxOTQzOTogaW50ZXJwcmV0ZXIgZW1iZWRkaW5nIHRlc3RzIGFyZSBub3cgZXhlY3V0ZWQgb24gV2luZG93cworICAoUGF0Y2ggYnkgWmFjaGFyeSBXYXJlKQorCistIElzc3VlICMxOTA4NTogQWRkZWQgYmFzaWMgdGVzdHMgZm9yIGFsbCB0a2ludGVyIHdpZGdldCBvcHRpb25zLgorCistIElzc3VlICMxOTM4NDogRml4IHRlc3RfcHlfY29tcGlsZSBmb3Igcm9vdCB1c2VyLCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTgzMjY6IENsYXJpZnkgdGhhdCBsaXN0LnNvcnQncyBhcmd1bWVudHMgYXJlIGtleXdvcmQtb25seS4gIEFsc28sCisgIGF0dGVtcHQgdG8gcmVkdWNlIGNvbmZ1c2lvbiBpbiB0aGUgZ2xvc3NhcnkgYnkgbm90IHNheWluZyB0aGVyZSBhcmUKKyAgZGlmZmVyZW50ICJ0eXBlcyIgb2YgYXJndW1lbnRzIGFuZCBwYXJhbWV0ZXJzLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTkzNTg6ICJtYWtlIGNsaW5pYyIgbm93IHJ1bnMgdGhlIEFyZ3VtZW50IENsaW5pYyBwcmVwcm9jZXNzb3IKKyAgb3ZlciBhbGwgQ1B5dGhvbiBzb3VyY2UgZmlsZXMuCisKKy0gVXBkYXRlIFNRTGl0ZSB0byAzLjguMSwgeHogdG8gNS4wLjUsIGFuZCBUY2wvVGsgdG8gOC42LjEgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTY2MzI6IEVuYWJsZSBERVAgYW5kIEFTTFIgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTc3OTE6IERyb3AgUFJFRklYIGFuZCBFWEVDX1BSRUZJWCBkZWZpbml0aW9ucyBmcm9tIFBDL3B5Y29uZmlnLmgKKworLSBBZGQgd29ya2Fyb3VuZCBmb3IgVlMgMjAxMCBubWFrZSBjbGVhbiBpc3N1ZS4gVlMgMjAxMCBkb2Vzbid0IHNldCB1cCBQQVRICisgIGZvciBubWFrZS5leGUgY29ycmVjdGx5LgorCistIElzc3VlICMxOTU1MDogSW1wbGVtZW50IFdpbmRvd3MgaW5zdGFsbGVyIGNoYW5nZXMgb2YgUEVQIDQ1MyAoZW5zdXJlcGlwKS4KKworLSBJc3N1ZSAjMTk1MjA6IEZpeCBjb21waWxlciB3YXJuaW5nIGluIHRoZSBfc2hhMyBtb2R1bGUgb24gMzJiaXQgV2luZG93cy4KKworLSBJc3N1ZSAjMTkzNTY6IEF2b2lkIHVzaW5nIGEgQyB2YXJpYWJsZWQgbmFtZWQgIl9zZWxmIiwgaXQncyBhIHJlc2VydmVkCisgIHdvcmQgaW4gc29tZSBDIGNvbXBpbGVycy4KKworLSBJc3N1ZSAjMTU3OTI6IENvcnJlY3QgYnVpbGQgb3B0aW9ucyBvbiBXaW42NC4gUGF0Y2ggYnkgSmVyZW15IEtsb3RoLgorCistIElzc3VlICMxOTM3MzogQXBwbHkgdXBzdHJlYW0gY2hhbmdlIHRvIFRrIDguNS4xNSBmaXhpbmcgT1MgWCAxMC45CisgIHNjcmVlbiByZWZyZXNoIHByb2JsZW0gZm9yIE9TIFggaW5zdGFsbGVyIGJ1aWxkLgorCistIElzc3VlICMxOTY0OTogT24gT1MgWCwgdGhlIHNhbWUgc2V0IG9mIGZpbGUgbmFtZXMgYXJlIG5vdyBpbnN0YWxsZWQKKyAgaW4gYmluIGRpcmVjdG9yaWVzIGZvciBhbGwgY29uZmlndXJhdGlvbnM6IG5vbi1mcmFtZXdvcmsgdnMgZnJhbWV3b3JrLAorICBhbmQgc2luZ2xlIGFyY2ggdnMgdW5pdmVyc2FsIGJ1aWxkcy4gIHB5dGhvbngueS0zMiBpcyBub3cgYWx3YXlzCisgIGluc3RhbGxlZCBmb3IgNjQtYml0LzMyLWJpdCB1bml2ZXJzYWwgYnVpbGRzLiAgVGhlIG9ic29sZXRlIGFuZAorICB1bmRvY3VtZW50ZWQgcHl0aG9udyogc3ltbGlua3MgYXJlIG5vIGxvbmdlciBpbnN0YWxsZWQgYW55d2hlcmUuCisKKy0gSXNzdWUgIzE5NTUzOiBQRVAgNDUzIC0gIm1ha2UgaW5zdGFsbCIgYW5kICJtYWtlIGFsdGluc3RhbGwiIG5vdyBpbnN0YWxsIG9yCisgIHVwZ3JhZGUgcGlwIGJ5IGRlZmF1bHQsIHVzaW5nIHRoZSBidW5kbGVkIHBpcCBwcm92aWRlZCBieSB0aGUgbmV3IGVuc3VyZXBpcAorICBtb2R1bGUuICBBIG5ldyBjb25maWd1cmUgb3B0aW9uLCAtLXdpdGgtZW5zdXJlcGlwWz11cGdyYWRlfGluc3RhbGx8bm9dLCBpcworICBhdmFpbGFibGUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZW5zdXJlcGlwICItLXVwZ3JhZGUiIG9wdGlvbi4gIFRoZSBvcHRpb24KKyAgY2FuIGFsc28gYmUgc2V0IHdpdGggIm1ha2UgW2FsdF1pbnN0YWxsIEVOU1VSRVBJUD1bdXBncmFkZXxpbnN0YWxsfG5vXSIuCisKKy0gSXNzdWUgIzE5NTUxOiBQRVAgNDUzIC0gdGhlIE9TIFggaW5zdGFsbGVyIG5vdyBpbnN0YWxscyBwaXAgYnkgZGVmYXVsdC4KKworLSBVcGRhdGUgdGhpcmQtcGFydHkgbGlicmFyaWVzIGZvciBPUyBYIGluc3RhbGxlcnM6IHh6IDUuMC4zIC0+IDUuMC41LAorICBTUUxpdGUgMy43LjEzIC0+IDMuOC4xCisKKy0gSXNzdWUgIzE1NjYzOiBSZXZlcnQgT1MgWCBpbnN0YWxsZXIgYnVpbHQtaW4gVGNsL1RrIHN1cHBvcnQgZm9yIDMuNC4wYjEuCisgIFNvbWUgdGhpcmQtcGFydHkgcHJvamVjdHMsIHN1Y2ggYXMgTWF0cGxvdGxpYiBhbmQgUElML1BpbGxvdywKKyAgZGVwZW5kZWQgb24gYmVpbmcgYWJsZSB0byBidWlsZCB3aXRoIFRjbCBhbmQgVGsgZnJhbWV3b3JrcyBpbgorICAvTGlicmFyeS9GcmFtZXdvcmtzLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTk3MzA6IEFyZ3VtZW50IENsaW5pYyBub3cgc3VwcG9ydHMgYWxsIHRoZSBleGlzdGluZyBQeUFyZworICAiZm9ybWF0IHVuaXRzIiBhcyBsZWdhY3kgY29udmVydGVycywgYXMgd2VsbCBhcyB0d28gbmV3IGZlYXR1cmVzOgorICAic2VsZiBjb252ZXJ0ZXJzIiBhbmQgdGhlICJ2ZXJzaW9uIiBkaXJlY3RpdmUuCisKKy0gSXNzdWUgIzE5NTUyOiBweXZlbnYgbm93IGJvb3RzdHJhcHMgcGlwIGludG8gdmlydHVhbCBlbnZpcm9ubWVudHMgYnkKKyAgZGVmYXVsdCAocGFzcyAtLXdpdGhvdXQtcGlwIHRvIHJlcXVlc3QgdGhlIG9sZCBiZWhhdmlvdXIpCisKKy0gSXNzdWUgIzE5MzkwOiBBcmd1bWVudCBDbGluaWMgbm8gbG9uZ2VyIGFjY2VwdHMgbWFsZm9ybWVkIFB5dGhvbgorICBhbmQgQyBpZHMuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQWxwaGEgND8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxMy0xMC0yMAorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTkzMDE6IEdpdmUgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWFya2VkIGdsb2JhbCBhCisgIGdsb2JhbCBxdWFsbmFtZS4KKworLSBJc3N1ZSAjMTkyNzk6IFVURi03IGRlY29kZXIgbm8gbG9uZ2VyIHByb2R1Y2VzIGlsbGVnYWwgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTY2MTI6IEFkZCAiQXJndW1lbnQgQ2xpbmljIiwgYSBjb21waWxlLXRpbWUgcHJlcHJvY2Vzc29yIGZvcgorICBDIGZpbGVzIHRvIGdlbmVyYXRlIGFyZ3VtZW50IHBhcnNpbmcgY29kZS4gIChTZWUgUEVQIDQzNi4pCisKKy0gSXNzdWUgIzE4ODEwOiBTaGlmdCBzdGF0IGNhbGxzIGluIGltcG9ydGxpYi5tYWNoaW5lcnkuRmlsZUZpbmRlciBzdWNoIHRoYXQKKyAgdGhlIGNvZGUgaXMgb3B0aW1pc3RpYyB0aGF0IGlmIHNvbWV0aGluZyBleGlzdHMgaW4gYSBkaXJlY3RvcnkgbmFtZWQgZXhhY3RseQorICBsaWtlIHRoZSBwb3NzaWJsZSBwYWNrYWdlIGJlaW5nIHNlYXJjaGVkIGZvciB0aGF0IGl0J3MgaW4gYWN0dWFsaXR5IGEKKyAgZGlyZWN0b3J5LgorCistIElzc3VlICMxODQxNjogaW1wb3J0bGliLm1hY2hpbmVyeS5QYXRoRmluZGVyIG5vdyB0cmVhdHMgJycgYXMgdGhlIGN3ZCBhbmQKKyAgaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vIGxvbmdlciBzcGVjaWFsLWNhc2VzICcnIHRvICcuJy4gVGhpcyBsZWFkcworICB0byBtb2R1bGVzIGltcG9ydGVkIGZyb20gY3dkIHRvIG5vdyBwb3NzZXNzIGFuIGFic29sdXRlIGZpbGUgcGF0aCBmb3IKKyAgX19maWxlX18gKHRoaXMgZG9lcyBub3QgYWZmZWN0IG1vZHVsZXMgc3BlY2lmaWVkIGJ5IHBhdGggb24gdGhlIENMSSBidXQgaXQKKyAgZG9lcyBhZmZlY3QgLW0vcnVucHkpLiBJdCBhbHNvIGFsbG93cyBGaWxlRmluZGVyIHRvIGJlIG1vcmUgY29uc2lzdGVudCBieSBub3QKKyAgaGF2aW5nIGFuIGVkZ2UgY2FzZS4KKworLSBJc3N1ZSAjNDU1NTogQWxsIGV4cG9ydGVkIEMgc3ltYm9scyBhcmUgbm93IHByZWZpeGVkIHdpdGggZWl0aGVyCisgICJQeSIgb3IgIl9QeSIuCisKKy0gSXNzdWUgIzE5MjE5OiBTcGVlZCB1cCBtYXJzaGFsLmxvYWRzKCksIGFuZCBtYWtlIHB5YyBmaWxlcyBzbGlnaHRseQorICAoNSUgdG8gMTAlKSBzbWFsbGVyLgorCistIElzc3VlICMxOTIyMTogVXBncmFkZSBVbmljb2RlIGRhdGFiYXNlIHRvIHZlcnNpb24gNi4zLjAuCisKKy0gSXNzdWUgIzE2NzQyOiBUaGUgcmVzdWx0IG9mIHRoZSBDIGNhbGxiYWNrIFB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIgbXVzdAorICBub3cgYmUgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IFB5TWVtX1Jhd01hbGxvYygpIG9yIFB5TWVtX1Jhd1JlYWxsb2MoKSAob3IgTlVMTAorICBpZiBhbiBlcnJvciBvY2N1cnJlZCksIGluc3RlYWQgb2YgYSBzdHJpbmcgYWxsb2NhdGVkIGJ5IFB5TWVtX01hbGxvYygpIG9yCisgIFB5TWVtX1JlYWxsb2MoKS4KKworLSBJc3N1ZSAjMTkxOTk6IFJlbW92ZSBgYFB5VGhyZWFkU3RhdGUudGlja19jb3VudGVyYGAgZmllbGQKKworLSBGaXggbWFjcm8gZXhwYW5zaW9uIG9mIF9QeUVycl9PQ0NVUlJFRCgpLCBhbmQgbWFrZSBzdXJlIHRvIHVzZSBpdCBpbiBhdAorICBsZWFzdCBvbmUgcGxhY2Ugc28gYXMgdG8gYXZvaWQgcmVncmVzc2lvbnMuCisKKy0gSXNzdWUgIzE5MDg3OiBJbXByb3ZlIGJ5dGVhcnJheSBhbGxvY2F0aW9uIGluIG9yZGVyIHRvIGFsbG93IGNoZWFwIHBvcHBpbmcKKyAgb2YgZGF0YSBhdCB0aGUgZnJvbnQgKHNsaWNlIGRlbGV0aW9uKS4KKworLSBJc3N1ZSAjMTkwMTQ6IG1lbW9yeXZpZXcuY2FzdCgpIGlzIG5vdyBhbGxvd2VkIG9uIHplcm8tbGVuZ3RoIHZpZXdzLgorCistIElzc3VlICMxODY5MDogbWVtb3J5dmlldyBpcyBub3cgYXV0b21hdGljYWxseSByZWdpc3RlcmVkIHdpdGgKKyAgY29sbGVjdGlvbnMuYWJjLlNlcXVlbmNlCisKKy0gSXNzdWUgIzE5MDc4OiBtZW1vcnl2aWV3IG5vdyBjb3JyZWN0bHkgc3VwcG9ydHMgdGhlIHJldmVyc2VkIGJ1aWx0aW4KKyAgKFBhdGNoIGJ5IENsYXVkaXUgUG9wYSkKKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxNzQ1NzogdW5pdHRlc3QgdGVzdCBkaXNjb3Zlcnkgbm93IHdvcmtzIHdpdGggbmFtZXNwYWNlIHBhY2thZ2VzLgorICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKIC0gSXNzdWUgIzE4MjM1OiBGaXggdGhlIHN5c2NvbmZpZyB2YXJpYWJsZXMgTERTSEFSRUQgYW5kIEJMRFNIQVJFRCB1bmRlciBBSVguCiAgIFBhdGNoIGJ5IERhdmlkIEVkZWxzb2huLgogCistIElzc3VlICMxODYwNjogQWRkIHRoZSBuZXcgInN0YXRpc3RpY3MiIG1vZHVsZSAoUEVQIDQ1MCkuICBDb250cmlidXRlZAorICBieSBTdGV2ZW4gRCdBcHJhbm8uCisKKy0gSXNzdWUgIzEyODY2OiBUaGUgYXVkaW9vcCBtb2R1bGUgbm93IHN1cHBvcnRzIDI0LWJpdCBzYW1wbGVzLgorCistIElzc3VlICMxOTI1NDogUHJvdmlkZSBhbiBvcHRpbWl6ZWQgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHBia2RmMl9obWFjLgorCistIElzc3VlcyAjMTkyMDEsIElzc3VlICMxOTIyMiwgSXNzdWUgIzE5MjIzOiBBZGQgIngiIG1vZGUgKGV4Y2x1c2l2ZSBjcmVhdGlvbikKKyAgaW4gb3BlbmluZyBmaWxlIHRvIGJ6MiwgZ3ppcCBhbmQgbHptYSBtb2R1bGVzLiBQYXRjaGVzIGJ5IFRpbSBIZWFuZXkgYW5kCisgIFZhanJhc2t5IEtvay4KKworLSBGaXggYSByZWZlcmVuY2UgY291bnQgbGVhayBpbiBfc3JlLgorCistIElzc3VlICMxOTI2MjogSW5pdGlhbCBjaGVjayBpbiBvZiB0aGUgJ2FzeW5jaW8nIHBhY2thZ2UgKGEuay5hLiBUdWxpcCwKKyAgYS5rLmEuIFBFUCAzMTU2KS4gIFRoZXJlIGFyZSBubyBkb2NzIHlldCwgYW5kIHRoZSBQRVAgaXMgc2xpZ2h0bHkKKyAgb3V0IG9mIGRhdGUgd2l0aCB0aGUgY29kZS4gIFRoaXMgbW9kdWxlIHdpbGwgaGF2ZSAqcHJvdmlzaW9uYWwqIHN0YXR1cworICBpbiBQeXRob24gMy40LgorCiAtIElzc3VlICMxOTI3NjogRml4ZWQgdGhlIHdhdmUgbW9kdWxlIG9uIDY0LWJpdCBiaWctZW5kaWFuIHBsYXRmb3Jtcy4KIAorLSBJc3N1ZSAjMTkyNjY6IFJlbmFtZSB0aGUgbmV3LWluLTMuNCBgYGNvbnRleHRsaWIuaWdub3JlYGAgY29udGV4dCBtYW5hZ2VyCisgIHRvIGBgY29udGV4dGxpYi5zdXBwcmVzc2BgIGluIG9yZGVyIHRvIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIGV4aXN0aW5nCisgIGRlc2NyaXB0aW9ucyBvZiB0aGF0IG9wZXJhdGlvbiBlbHNld2hlcmUgaW4gdGhlIGxhbmd1YWdlIGFuZCBzdGFuZGFyZAorICBsaWJyYXJ5IGRvY3VtZW50YXRpb24gKFBhdGNoIGJ5IFplcm8gUGlyYWV1cykuCisKKy0gSXNzdWUgIzE4ODkxOiBDb21wbGV0ZWQgdGhlIG5ldyBlbWFpbCBwYWNrYWdlIChwcm92aXNpb25hbCkgQVBJIGFkZGl0aW9ucworICBieSBhZGRpbmcgbmV3IGNsYXNzZXMgRW1haWxNZXNzYWdlLCBNSU1FUGFydCwgYW5kIENvbnRlbnRNYW5hZ2VyLgorCistIElzc3VlICMxODI4MTogVW51c2VkIHN0YXQgY29uc3RhbnRzIHJlbW92ZWQgZnJvbSBgdGFyZmlsZWAuCisKKy0gSXNzdWUgIzE4OTk5OiBNdWx0aXByb2Nlc3Npbmcgbm93IHN1cHBvcnRzICdjb250ZXh0cycgd2l0aCB0aGUgc2FtZSBBUEkKKyAgYXMgdGhlIG1vZHVsZSwgYnV0IGJvdW5kIHRvIHNwZWNpZmllZCBzdGFydCBtZXRob2RzLgorCistIElzc3VlICMxODQ2ODogVGhlIHJlLnNwbGl0LCByZS5maW5kYWxsLCBhbmQgcmUuc3ViIGZ1bmN0aW9ucyBhbmQgdGhlIGdyb3VwKCkKKyAgYW5kIGdyb3VwcygpIG1ldGhvZHMgb2YgbWF0Y2ggb2JqZWN0IG5vdyBhbHdheXMgcmV0dXJuIGEgc3RyaW5nIG9yIGEgYnl0ZXMKKyAgb2JqZWN0LgorCistIElzc3VlICMxODcyNTogVGhlIHRleHR3cmFwIG1vZHVsZSBub3cgc3VwcG9ydHMgdHJ1bmNhdGluZyBtdWx0aWxpbmUgdGV4dC4KKwogLSBJc3N1ZSAjMTg3NzY6IGF0ZXhpdCBjYWxsYmFja3Mgbm93IGRpc3BsYXkgdGhlaXIgZnVsbCB0cmFjZWJhY2sgd2hlbiB0aGV5CiAgIHJhaXNlIGFuIGV4Y2VwdGlvbi4KIAogLSBJc3N1ZSAjMTc4Mjc6IEFkZCB0aGUgbWlzc2luZyBkb2N1bWVudGF0aW9uIGZvciBgYGNvZGVjcy5lbmNvZGVgYCBhbmQKICAgYGBjb2RlY3MuZGVjb2RlYGAuCiAKLS0gSXNzdWUgIzE4NDU4OiBQcmV2ZW50IGNyYXNoZXMgd2l0aCBuZXdlciB2ZXJzaW9ucyBvZiBsaWJlZGl0LiAgSXRzIHJlYWRsaW5lCi0gIGVtdWxhdGlvbiBoYXMgY2hhbmdlZCBmcm9tIDAtYmFzZWQgaW5kZXhpbmcgdG8gMS1iYXNlZCBsaWtlIGdudSByZWFkbGluZS4KLSAgT3JpZ2luYWwgcGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuLgorLSBJc3N1ZSAjMTkyMTg6IFJlbmFtZSBjb2xsZWN0aW9ucy5hYmMgdG8gX2NvbGxlY3Rpb25zX2FiYyBpbiBvcmRlciB0bworICBzcGVlZCB1cCBpbnRlcnByZXRlciBzdGFydC4KIAotLSBJc3N1ZSAjMTg5MTk6IElmIHRoZSBjbG9zZSgpIG1ldGhvZCBvZiBhIHdyaXRlciBpbiB0aGUgc3VuYXUgb3Igd2F2ZSBtb2R1bGUKLSAgZmFpbGVkLCBzZWNvbmQgaW52b2NhdGlvbiBvZiBjbG9zZSgpIGFuZCBkZXN0cnVjdG9yIG5vIG1vcmUgcmFpc2UgYW4KLSAgZXhjZXB0aW9uLgorLSBJc3N1ZSAjMTg1ODI6IEFkZCAncGJrZGYyX2htYWMnIHRvIHRoZSBoYXNobGliIG1vZHVsZS4gSXQgaW1wbGVtZW50cyBQS0NTIzUKKyAgcGFzc3dvcmQtYmFzZWQga2V5IGRlcml2YXRpb24gZnVuY3Rpb25zIHdpdGggSE1BQyBhcyBwc2V1ZG9yYW5kb20gZnVuY3Rpb24uCiAKIC0gSXNzdWUgIzE5MTMxOiBUaGUgYWlmYyBtb2R1bGUgbm93IGNvcnJlY3RseSByZWFkcyBhbmQgd3JpdGVzIHNhbXB3aWR0aCBvZgogICBjb21wcmVzc2VkIHN0cmVhbXMuCiAKLS0gSXNzdWUgIzE5MTU4OiAgYSByYXJlIHJhY2UgaW4gQm91bmRlZFNlbWFwaG9yZSBjb3VsZCBhbGxvdyAucmVsZWFzZSgpIHRvbworLSBJc3N1ZSAjMTkyMDk6IFJlbW92ZSBpbXBvcnQgb2YgY29weXJlZyBmcm9tIHRoZSBvcyBtb2R1bGUgdG8gc3BlZWQgdXAKKyAgaW50ZXJwcmV0ZXIgc3RhcnR1cC4gc3RhdF9yZXN1bHQgYW5kIHN0YXR2ZnNfcmVzdWx0IGFyZSBub3cgaGFyZC1jb2RlZCB0bworICByZXNpZGUgaW4gdGhlIG9zIG1vZHVsZS4KKworLSBJc3N1ZSAjMTkyMDU6IERvbid0IGltcG9ydCB0aGUgJ3JlJyBtb2R1bGUgaW4gc2l0ZSBhbmQgc3lzY29uZmlnIG1vZHVsZSB0bworICBzcGVlZCB1cCBpbnRlcnByZXRlciBzdGFydC4KKworLSBJc3N1ZSAjOTU0ODogQWRkIGEgbWluaW1hbCAiX2Jvb3Rsb2NhbGUiIG1vZHVsZSB0aGF0IGlzIGltcG9ydGVkIGJ5IHRoZQorICBfaW8gbW9kdWxlIGluc3RlYWQgb2YgdGhlIGZ1bGwgbG9jYWxlIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg3NjQ6IFJlbW92ZSB0aGUgJ3ByaW50JyBhbGlhcyBmb3IgdGhlIFBEQiAncCcgY29tbWFuZCBzbyB0aGF0IGl0IG5vCisgIGxvbmdlciBzaGFkb3dzIHRoZSBwcmludCBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTkxNTg6IEEgcmFyZSByYWNlIGluIEJvdW5kZWRTZW1hcGhvcmUgY291bGQgYWxsb3cgLnJlbGVhc2UoKSB0b28KICAgb2Z0ZW4uCiAKLS0gSXNzdWUgIzE4MDM3OiAydG8zIG5vdyBlc2NhcGVzICdcdScgYW5kICdcVScgaW4gbmF0aXZlIHN0cmluZ3MuCistIElzc3VlICMxNTgwNTogQWRkIGNvbnRleHRsaWIucmVkaXJlY3Rfc3Rkb3V0KCkuCisKKy0gSXNzdWUgIzE4NzE2OiBEZXByZWNhdGUgdGhlIGZvcm1hdHRlciBtb2R1bGUuCisKKy0gSXNzdWUgIzEwNzEyOiAydG8zIGhhcyBhIG5ldyAiYXNzZXJ0cyIgZml4ZXIgdGhhdCByZXBsYWNlcyBkZXByZWNhdGVkIG5hbWVzCisgIG9mIHVuaXR0ZXN0IG1ldGhvZHMgKGUuZy4gZmFpbFVubGVzc0VxdWFsIC0+IGFzc2VydEVxdWFsKS4KKworLSBJc3N1ZSAjMTgwMzc6IDJ0bzMgbm93IGVzY2FwZXMgYGAnXHUnYGAgYW5kIGBgJ1xVJ2BgIGluIG5hdGl2ZSBzdHJpbmdzLgorCistIElzc3VlICMxNzgzOTogYmFzZTY0LmRlY29kZWJ5dGVzIGFuZCBiYXNlNjQuZW5jb2RlYnl0ZXMgbm93IGFjY2VwdCBhbnkKKyAgb2JqZWN0IHRoYXQgZXhwb3J0cyBhIDEgZGltZW5zaW9uYWwgYXJyYXkgb2YgYnl0ZXMgKHRoaXMgbWVhbnMgdGhlIHNhbWUKKyAgaXMgbm93IGFsc28gdHJ1ZSBmb3IgYmFzZTY0X2NvZGVjKQorCistIElzc3VlICMxOTEzMjogVGhlIHBwcmludCBtb2R1bGUgbm93IHN1cHBvcnRzIGNvbXBhY3QgbW9kZS4KIAogLSBJc3N1ZSAjMTkxMzc6IFRoZSBwcHJpbnQgbW9kdWxlIG5vdyBjb3JyZWN0bHkgZm9ybWF0cyBpbnN0YW5jZXMgb2Ygc2V0IGFuZAogICBmcm96ZW5zZXQgc3ViY2xhc3Nlcy4KIAorLSBJc3N1ZSAjMTAwNDI6IGZ1bmN0b29scy50b3RhbF9vcmRlcmluZyBub3cgY29ycmVjdGx5IGhhbmRsZXMKKyAgTm90SW1wbGVtZW50ZWQgYmVpbmcgcmV0dXJuZWQgYnkgdGhlIHVuZGVybHlpbmcgY29tcGFyaXNvbiBmdW5jdGlvbiAoUGF0Y2gKKyAgYnkgS2F0aWUgTWlsbGVyKQorCiAtIElzc3VlICMxOTA5MjogY29udGV4dGxpYi5FeGl0U3RhY2sgbm93IGNvcnJlY3RseSByZXJhaXNlcyBleGNlcHRpb25zCiAgIGZyb20gdGhlIF9fZXhpdF9fIGNhbGxiYWNrcyBvZiBpbm5lciBjb250ZXh0IG1hbmFnZXJzIChQYXRjaCBieSBIcnZvamUKICAgTmlrxaFpxIcpCkBAIC05NjcsMTUgKzM4MjgsOTAgQEAKIC0gSXNzdWUgIzEyNjQxOiBBdm9pZCBwYXNzaW5nICItbW5vLWN5Z3dpbiIgdG8gdGhlIG1pbmd3MzIgY29tcGlsZXIsIGV4Y2VwdAogICB3aGVuIG5lY2Vzc2FyeS4gIFBhdGNoIGJ5IE9zY2FyIEJlbmphbWluLgogCi0tIElzc3VlICMxODU5NDogVGhlIGZhc3QgcGF0aCBmb3IgY29sbGVjdGlvbnMuQ291bnRlcigpIHdhcyBuZXZlciB0YWtlbgotICBkdWUgdG8gYW4gb3Zlci1yZXN0cmljdGl2ZSB0eXBlIGNoZWNrLiAgQW5kIHRoZSBmYWxsYmFjayBwYXRoIGRpZAotICBub3QgaW1wbGVtZW50IHRoZSBzYW1lIGFsZ29yaXRobSBhcyB0aGUgcHVyZSBweXRob24gY29kZS4KKy0gSXNzdWUgIzU4NDU6IEluIHNpdGUucHksIG9ubHkgbG9hZCByZWFkbGluZSBoaXN0b3J5IGZyb20gfi8ucHl0aG9uX2hpc3RvcnkKKyAgaWYgbm8gaGlzdG9yeSBoYXMgYmVlbiByZWFkIGFscmVhZHkuICBUaGlzIGF2b2lkcyBkb3VibGUgd3JpdGVzIHRvIHRoZQorICBoaXN0b3J5IGZpbGUgYXQgc2h1dGRvd24uCiAKIC0gUHJvcGVybHkgaW5pdGlhbGl6ZSBhbGwgZmllbGRzIG9mIGEgU1NMIG9iamVjdCBhZnRlciBhbGxvY2F0aW9uLgogCistIElzc3VlICMxOTA5NTogU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkgbm93IHJhaXNlcyBWYWx1ZUVycm9yIHdoZW4gdGhlCisgIFNTTCBoYW5kc2hha2UgaGFzbid0IGJlZW4gZG9uZS4KKwogLSBJc3N1ZSAjNDM2NjogRml4IGJ1aWxkaW5nIGV4dGVuc2lvbnMgb24gYWxsIHBsYXRmb3JtcyB3aGVuIC0tZW5hYmxlLXNoYXJlZAogICBpcyB1c2VkLgogCistIElzc3VlICMxOTAzMDogRml4ZWQgYGluc3BlY3QuZ2V0bWVtYmVyc2AgYW5kIGBpbnNwZWN0LmNsYXNzaWZ5X2NsYXNzX2F0dHJzYAorICB0byBhdHRlbXB0IGFjdGl2YXRpbmcgZGVzY3JpcHRvcnMgYmVmb3JlIGZhbGxpbmcgYmFjayB0byBhIF9fZGljdF9fIHNlYXJjaAorICBmb3IgZmF1bHR5IGRlc2NyaXB0b3JzLiAgYGluc3BlY3QuY2xhc3NpZnlfY2xhc3NfYXR0cnNgIG5vIGxvbmdlciByZXR1cm5zCisgIEF0dHJpYnV0ZXMgd2hvc2UgaG9tZSBjbGFzcyBpcyBOb25lLgorCitDIEFQSQorLS0tLS0KKworLSBJc3N1ZSAjMTc3MjY3MzogVGhlIHR5cGUgb2YgYGNoYXIqYCBhcmd1bWVudHMgbm93IGNoYW5nZWQgdG8gYGNvbnN0IGNoYXIqYC4KKworLSBJc3N1ZSAjMTYxMjk6IEFkZGVkIGEgYFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmdgIHByZS1pbml0aWFsaXphdGlvbiBBUEkKKyAgdG8gYWxsb3cgZW1iZWRkaW5nIGFwcGxpY2F0aW9ucyBsaWtlIEJsZW5kZXIgdG8gZm9yY2UgYSBwYXJ0aWN1bGFyCisgIGVuY29kaW5nIGFuZCBlcnJvciBoYW5kbGVyIGZvciB0aGUgc3RhbmRhcmQgSU8gc3RyZWFtcyAoaW5pdGlhbCBwYXRjaCBieQorICBCYXN0aWVuIE1vbnRhZ25lKQorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTkyNzU6IEZpeCB0ZXN0X3NpdGUgb24gQU1ENjQgU25vdyBMZW9wYXJkCisKKy0gSXNzdWUgIzE0NDA3OiBGaXggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkgaW4gdGVzdF9jb25jdXJyZW50X2Z1dHVyZXMuCisKKy0gSXNzdWUgIzE4OTE5OiBVbmlmaWVkIGFuZCBleHRlbmRlZCB0ZXN0cyBmb3IgYXVkaW8gbW9kdWxlczogYWlmYywgc3VuYXUgYW5kCisgIHdhdmUuCisKKy0gSXNzdWUgIzE4NzE0OiBBZGRlZCB0ZXN0cyBmb3IgYGBwZGIuZmluZF9mdW5jdGlvbigpYGAuCisKK0RvY3VtZW50YXRpb24KKy0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg3NTg6IEZpeGVkIGFuZCBpbXByb3ZlZCBjcm9zcy1yZWZlcmVuY2VzLgorCistIElzc3VlICMxODk3MjogTW9kZXJuaXplIGVtYWlsIGV4YW1wbGVzIGFuZCB1c2UgdGhlIGFyZ3BhcnNlIG1vZHVsZSBpbiB0aGVtLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTkxMzA6IENvcnJlY3QgUENidWlsZC9yZWFkbWUudHh0LCBQeXRob24gMy4zIGFuZCAzLjQgcmVxdWlyZSBWUyAyMDEwLgorCistIElzc3VlICMxNTY2MzogVXBkYXRlIE9TIFggMTAuNisgaW5zdGFsbGVyIHRvIHVzZSBUY2wvVGsgOC41LjE1LgorCistIElzc3VlICMxNDQ5OTogRml4IHNldmVyYWwgcHJvYmxlbXMgd2l0aCBPUyBYIHVuaXZlcnNhbCBidWlsZCBzdXBwb3J0OgorICAgIDEuIHBwYyBhcmNoIGRldGVjdGlvbiBmb3IgZXh0ZW5zaW9uIG1vZHVsZSBidWlsZHMgYnJva2Ugd2l0aCBYY29kZSA1CisgICAgMi4gcHBjIGFyY2ggZGV0ZWN0aW9uIGluIGNvbmZpZ3VyZSBkaWQgbm90IHdvcmsgb24gT1MgWCAxMC40CisgICAgMy4gLXN5c3Jvb3QgYW5kIC1hcmNoIGZsYWdzIHdlcmUgdW5uZWNlc3NhcmlseSBkdXBsaWNhdGVkCisgICAgNC4gdGhlcmUgd2FzIG5vIG9idmlvdXMgd2F5IHRvIGNvbmZpZ3VyZSBhbiBpbnRlbC0zMiBvbmx5IGJ1aWxkLgorCistIElzc3VlICMxOTAxOTogQ2hhbmdlIHRoZSBPUyBYIGluc3RhbGxlciBidWlsZCBzY3JpcHQgdG8gdXNlIENGTEFHUyBpbnN0ZWFkCisgIG9mIE9QVCBmb3Igc3BlY2lhbCBidWlsZCBvcHRpb25zLiAgQnkgc2V0dGluZyBPUFQsIHNvbWUgY29tcGlsZXItc3BlY2lmaWMKKyAgb3B0aW9ucyBsaWtlIC1md3JhcHYgd2VyZSBvdmVycmlkZGVuIGFuZCB0aHVzIG5vdCB1c2VkLCB3aGljaCBjb3VsZCByZXN1bHQKKyAgaW4gYnJva2VuIGludGVycHJldGVycyB3aGVuIGJ1aWxkaW5nIHdpdGggY2xhbmcuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQWxwaGEgMz8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxMy0wOS0yOQorCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg4MTg6IFRoZSAiZW5jb2RpbmduYW1lIiBwYXJ0IG9mIFBZVEhPTklPRU5DT0RJTkcgaXMgbm93IG9wdGlvbmFsLgorCistIElzc3VlICMxOTA5ODogUHJldmVudCBvdmVyZmxvdyBpbiB0aGUgY29tcGlsZXIgd2hlbiB0aGUgcmVjdXJzaW9uIGxpbWl0IGlzIHNldAorICBhYnN1cmRseSBoaWdoLgorCitMaWJyYXJ5CistLS0tLS0tCisKKy0gSXNzdWUgIzE4OTI5OiBgaW5zcGVjdC5jbGFzc2lmeV9jbGFzc19hdHRycygpYCBub3cgY29ycmVjdGx5IGZpbmRzIGNsYXNzCisgIGF0dHJpYnV0ZXMgcmV0dXJuZWQgYnkgYGRpcigpYCB0aGF0IGFyZSBsb2NhdGVkIGluIHRoZSBtZXRhY2xhc3MuCisKIC0gSXNzdWUgIzE4OTUwOiBGaXggbWlzY2VsbGFuZW91cyBidWdzIGluIHRoZSBzdW5hdSBtb2R1bGUuCiAgIEF1X3JlYWQucmVhZGZyYW1lcygpIG5vdyB1cGRhdGVzIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiBhbmQgcmVhZHMgY29ycmVjdAogICBudW1iZXIgb2YgZnJhbWVzIGZyb20gbXVsdGljaGFubmVsIHN0cmVhbS4gIEF1X3dyaXRlLndyaXRlZnJhbWVzcmF3KCkgbm93CkBAIC05ODMsMTcgKzM5MTksMjkgQEAKICAgaW50ZWdlciAoYXMgaW4gUHl0aG9uIDIpLiAgQXVfcmVhZCBhbmQgQXVfd3JpdGUgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIGZpbGUKICAgb2JqZWN0IGlmIHN0YXJ0IGZpbGUgcG9zaXRpb24gaXMgbm90IGEgemVyby4KIAorLSBJc3N1ZSAjMTg1OTQ6IFRoZSBmYXN0IHBhdGggZm9yIGNvbGxlY3Rpb25zLkNvdW50ZXIoKSB3YXMgbmV2ZXIgdGFrZW4KKyAgZHVlIHRvIGFuIG92ZXItcmVzdHJpY3RpdmUgdHlwZSBjaGVjay4KKwogLSBJc3N1ZSAjMTkwNTM6IFppcEV4dEZpbGUucmVhZDEoKSB3aXRoIG5vbi16ZXJvIGFyZ3VtZW50IG5vIG1vcmUgcmV0dXJucyBlbXB0eQogICBieXRlcyB1bnRpbCBlbmQgb2YgZGF0YS4KIAotLSBJc3N1ZSAjMTkwMjg6IEZpeGVkIHRraW50ZXIuVGthcHAubWVyZ2UoKSBmb3Igbm9uLXN0cmluZyBhcmd1bWVudHMuCistIGxvZ2dpbmc6IGFkZGVkIHN1cHBvcnQgZm9yIFVuaXggZG9tYWluIHNvY2tldHMgdG8gU29ja2V0SGFuZGxlciBhbmQKKyAgRGF0YWdyYW1IYW5kbGVyLgorCistIElzc3VlICMxODk5NjogVGVzdENhc2UuYXNzZXJ0RXF1YWwoKSBub3cgbW9yZSBjbGV2ZXJseSBzaG9ydGVuIGRpZmZlcmluZworICBzdHJpbmdzIGluIGVycm9yIHJlcG9ydC4KKworLSBJc3N1ZSAjMTkwMzQ6IHJlcHIoKSBmb3IgdGtpbnRlci5UY2xfT2JqIG5vdyBleHBvc2VzIHN0cmluZyByZXBlcmVzZW50YXRpb24uCisKKy0gSXNzdWUgIzE4OTc4OiBgYHVybGxpYi5yZXF1ZXN0LlJlcXVlc3RgYCBub3cgYWxsb3dzIHRoZSBtZXRob2QgdG8gYmUKKyAgaW5kaWNhdGVkIG9uIHRoZSBjbGFzcyBhbmQgbm8gbG9uZ2VyIHNldHMgaXQgdG8gTm9uZSBpbiBgYF9faW5pdF9fYGAuCisKKy0gSXNzdWUgIzE4NjI2OiB0aGUgaW5zcGVjdCBtb2R1bGUgbm93IG9mZmVycyBhIGJhc2ljIGNvbW1hbmQgbGluZQorICBpbnRyb3NwZWN0aW9uIGludGVyZmFjZSAoSW5pdGlhbCBwYXRjaCBieSBDbGF1ZGl1IFBvcGEpCiAKIC0gSXNzdWUgIzMwMTU6IEZpeGVkIHRraW50ZXIgd2l0aCB3YW50b2JqZWN0PUZhbHNlLiAgQW55IFRjbCBjb21tYW5kIGNhbGwKICAgcmV0dXJuZWQgZW1wdHkgc3RyaW5nLgogCi0tIElzc3VlICMxODA1MDogRml4ZWQgYW4gaW5jb21wYXRpYmlsaXR5IG9mIHRoZSByZSBtb2R1bGUgd2l0aCBQeXRob24gMy4zLjAKLSAgYmluYXJpZXMuCi0KIC0gSXNzdWUgIzE5MDM3OiBUaGUgbWFpbGJveCBtb2R1bGUgbm93IG1ha2VzIGFsbCBjaGFuZ2VzIHRvIG1haWxkaXIgZmlsZXMKICAgYmVmb3JlIG1vdmluZyB0aGVtIGludG8gcGxhY2UsIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG90aGVyIHByb2dyYW1zCiAgIHRoYXQgbWF5IGJlIGFjY2Vzc2luZyB0aGUgbWFpbGRpciBkaXJlY3RvcnkuCkBAIC0xMDA3LDQyICszOTU1LDE4MSBAQAogLSBJc3N1ZSAjMTg4NzM6IFRoZSB0b2tlbml6ZSBtb2R1bGUgbm93IGRldGVjdHMgUHl0aG9uIHNvdXJjZSBjb2RlIGVuY29kaW5nCiAgIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KIAorLSBJc3N1ZSAjMTc3NjQ6IEVuYWJsZSBodHRwLnNlcnZlciB0byBiaW5kIHRvIGEgdXNlciBzcGVjaWZpZWQgbmV0d29yaworICBpbnRlcmZhY2UuICBQYXRjaCBjb250cmlidXRlZCBieSBNYWx0ZSBTd2FydC4KKworLSBJc3N1ZSAjMTg5Mzc6IEFkZCBhbiBhc3NlcnRMb2dzKCkgY29udGV4dCBtYW5hZ2VyIHRvIHVuaXR0ZXN0LlRlc3RDYXNlCisgIHRvIGVuc3VyZSB0aGF0IGEgYmxvY2sgb2YgY29kZSBlbWl0cyBhIG1lc3NhZ2UgdXNpbmcgdGhlIGxvZ2dpbmcgbW9kdWxlLgorCiAtIElzc3VlICMxNzMyNDogRml4IGh0dHAuc2VydmVyJ3MgcmVxdWVzdCBoYW5kbGluZyBjYXNlIG9uIHRyYWlsaW5nICcvJy4gUGF0Y2gKICAgY29udHJpYnV0ZWQgYnkgVmFqcmFza3kgS29rLgogCiAtIElzc3VlICMxOTAxODogVGhlIGhlYXBxLm1lcmdlKCkgZnVuY3Rpb24gbm8gbG9uZ2VyIHN1cHByZXNzZXMgSW5kZXhFcnJvcgogICBpbiB0aGUgdW5kZXJseWluZyBpdGVyYWJsZXMuCiAKLS0gSXNzdWUgIzE4Nzg0OiBUaGUgdXVpZCBtb2R1bGUgbm8gbW9yZSBhdHRlbXB0cyB0byBsb2FkIGxpYmMgdmlhIGN0eXBlcy5DRExMLAotICBpZiBhbGwgbmVjZXNzYXJ5IGZ1bmN0aW9ucyBhcmUgYWxyZWFkeSBmb3VuZCBpbiBsaWJ1dWlkLgotICBQYXRjaCBieSBFdmdlbnkgU29sb2d1Ym92LgorLSBJc3N1ZSAjMTg3ODQ6IFRoZSB1dWlkIG1vZHVsZSBubyBsb25nZXIgYXR0ZW1wdHMgdG8gbG9hZCBsaWJjIHZpYSBjdHlwZXMuQ0RMTAorICBpZiBhbGwgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gZm91bmQgaW4gbGlidXVpZC4gIFBhdGNoIGJ5CisgIEV2Z2VueSBTb2xvZ3Vib3YuCisKKy0gVGhlIDplbnZ2YXI6YFBZVEhPTkZBVUxUSEFORExFUmAgZW52aXJvbm1lbnQgdmFyaWFibGUgbm93IG9ubHkgZW5hYmxlcyB0aGUKKyAgZmF1bHRoYW5kbGVyIG1vZHVsZSBpZiB0aGUgdmFyaWFibGUgaXMgbm9uLWVtcHR5LiBTYW1lIGJlaGF2aW91ciB0aGFuIG90aGVyCisgIHZhcmlhYmxlcyBsaWtlIDplbnZ2YXI6YFBZVEhPTkRPTlRXUklURUJZVEVDT0RFYC4KKworLSBJc3N1ZSAjMTU2NTUyNTogTmV3IGZ1bmN0aW9uIGBgdHJhY2ViYWNrLmNsZWFyX2ZyYW1lc2BgIHdpbGwgY2xlYXIKKyAgdGhlIGxvY2FsIHZhcmlhYmxlcyBvZiBhbGwgdGhlIHN0YWNrIGZyYW1lcyByZWZlcmVuY2VkIGJ5IGEgdHJhY2ViYWNrCisgIG9iamVjdC4KKworVGVzdHMKKy0tLS0tCisKKy0gSXNzdWUgIzE4OTUyOiBGaXggcmVncmVzc2lvbiBpbiBzdXBwb3J0IGRhdGEgZG93bmxvYWRzIGludHJvZHVjZWQgd2hlbgorICB0ZXN0LnN1cHBvcnQgd2FzIGNvbnZlcnRlZCB0byBhIHBhY2thZ2UuIFJlZ3Jlc3Npb24gbm90aWNlZCBieSBaYWNoYXJ5CisgIFdhcmUuCisKK0lETEUKKy0tLS0KKworLSBJc3N1ZSAjMTg4NzM6IElETEUgbm93IGRldGVjdHMgUHl0aG9uIHNvdXJjZSBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudAorICBsaW5lcy4KKworLSBJc3N1ZSAjMTg5ODg6IFRoZSAiVGFiIiBrZXkgbm93IHdvcmtzIHdoZW4gYSB3b3JkIGlzIGFscmVhZHkgYXV0b2NvbXBsZXRlZC4KKworRG9jdW1lbnRhdGlvbgorLS0tLS0tLS0tLS0tLQorCistIElzc3VlICMxNzAwMzogVW5pZmllZCB0aGUgc2l6ZSBhcmd1bWVudCBuYW1lcyBpbiB0aGUgaW8gbW9kdWxlIHdpdGggY29tbW9uCisgIHByYWN0aWNlLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTg1OTY6IFN1cHBvcnQgdGhlIHVzZSBvZiBhZGRyZXNzIHNhbml0eSBjaGVja2luZyBpbiByZWNlbnQgdmVyc2lvbnMKKyAgb2YgY2xhbmcgYW5kIEdDQyBieSBhcHByb3ByaWF0ZWx5IG1hcmtpbmcga25vd24gZmFsc2UgYWxhcm1zIGluIHRoZSBzbWFsbAorICBvYmplY3QgYWxsb2NhdG9yLiBQYXRjaCBjb250cmlidXRlZCBieSBEaGlydSBLaG9saWEuCisKK1Rvb2xzL0RlbW9zCistLS0tLS0tLS0tLQorCistIElzc3VlICMxODg3MzogMnRvMyBhbmQgdGhlIGZpbmRub2NvZGluZy5weSBzY3JpcHQgbm93IGRldGVjdCBQeXRob24gc291cmNlCisgIGNvZGUgZW5jb2Rpbmcgb25seSBpbiBjb21tZW50IGxpbmVzLgorCisKK1doYXQncyBOZXcgaW4gUHl0aG9uIDMuNC4wIEFscGhhIDI/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitSZWxlYXNlIGRhdGU6IDIwMTMtMDktMDkKKworQ29yZSBhbmQgQnVpbHRpbnMKKy0tLS0tLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4OTQyOiBzeXMuX2RlYnVnbWFsbG9jc3RhdHMoKSBvdXRwdXQgd2FzIGRhbWFnZWQgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTg1NzE6IEltcGxlbWVudGF0aW9uIG9mIHRoZSBQRVAgNDQ2OiBmaWxlIGRlc2NyaXB0b3JzIGFuZCBmaWxlCisgIGhhbmRsZXMgYXJlIG5vdyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZTsgYWRkIGZ1bmN0aW9ucworICBvcy5nZXQvc2V0X2luaGVyaXRhYmxlKCksIG9zLmdldC9zZXRfaGFuZGxlX2luaGVyaXRhYmxlKCkgYW5kCisgIHNvY2tldC5zb2NrZXQuZ2V0L3NldF9pbmhlcml0YWJsZSgpLgorCistIElzc3VlICMxMTYxOTogVGhlIHBhcnNlciBhbmQgdGhlIGltcG9ydCBtYWNoaW5lcnkgZG8gbm90IGVuY29kZSBVbmljb2RlCisgIGZpbGVuYW1lcyBhbnltb3JlIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE4ODA4OiBOb24tZGFlbW9uIHRocmVhZHMgYXJlIG5vdyBhdXRvbWF0aWNhbGx5IGpvaW5lZCB3aGVuCisgIGEgc3ViLWludGVycHJldGVyIGlzIHNodXRkb3duIChpdCB3b3VsZCBwcmV2aW91c2x5IGR1bXAgYSBmYXRhbCBlcnJvcikuCisKKy0gUmVtb3ZlIHN1cHBvcnQgZm9yIGNvbXBpbGluZyBvbiBzeXN0ZW1zIHdpdGhvdXQgZ2V0Y3dkKCkuCisKKy0gSXNzdWUgIzE4Nzc0OiBSZW1vdmUgbGFzdCBiaXRzIG9mIEdOVSBQVEggdGhyZWFkIGNvZGUgYW5kIHRocmVhZF9wdGguaC4KKworLSBJc3N1ZSAjMTg3NzE6IEFkZCBvcHRpbWl6YXRpb24gdG8gc2V0IG9iamVjdCBsb29rdXBzIHRvIHJlZHVjZSB0aGUgY29zdAorICBvZiBoYXNoIGNvbGxpc2lvbnMuICBUaGUgY29yZSBpZGVhIGlzIHRvIGluc3BlY3QgYSBzZWNvbmQga2V5L2hhc2ggcGFpcgorICBmb3IgZWFjaCBjYWNoZSBsaW5lIHJldHJpZXZlZC4KKworLSBJc3N1ZSAjMTYxMDU6IFdoZW4gYSBzaWduYWwgaGFuZGxlciBmYWlscyB0byB3cml0ZSB0byB0aGUgZmlsZSBkZXNjcmlwdG9yCisgIHJlZ2lzdGVyZWQgd2l0aCBgYHNpZ25hbC5zZXRfd2FrZXVwX2ZkKClgYCwgcmVwb3J0IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkCisgIG9mIGlnbm9yaW5nIHRoZSBlcnJvci4KKworLSBJc3N1ZSAjMTg3MjI6IFJlbW92ZSB1c2VzIG9mIHRoZSAicmVnaXN0ZXIiIGtleXdvcmQgaW4gQyBjb2RlLgorCistIElzc3VlICMxODY2NzogQWRkIG1pc3NpbmcgIkhBVkVfRkNIT1dOQVQiIHN5bWJvbCB0byBwb3NpeC5faGF2ZV9mdW5jdGlvbnMuCisKKy0gSXNzdWUgIzE2NDk5OiBBZGQgY29tbWFuZCBsaW5lIG9wdGlvbiBmb3IgaXNvbGF0ZWQgbW9kZS4KKworLSBJc3N1ZSAjMTUzMDE6IFBhcnNpbmcgZmQsIHVpZCwgYW5kIGdpZCBwYXJhbWV0ZXJzIGZvciBidWlsdGlucworICBpbiBNb2R1bGVzL3Bvc2l4bW9kdWxlLmMgaXMgbm93IGZhciBtb3JlIHJvYnVzdC4KKworLSBJc3N1ZSAjMTgzNjg6IFB5T1NfU3RkaW9SZWFkbGluZSgpIG5vIGxvbmdlciBsZWFrcyBtZW1vcnkgd2hlbiByZWFsbG9jKCkKKyAgZmFpbC4KKworLSBJc3N1ZSAjMTc5MzQ6IEFkZCBhIGNsZWFyKCkgbWV0aG9kIHRvIGZyYW1lIG9iamVjdHMsIHRvIGhlbHAgY2xlYW4gdXAKKyAgZXhwZW5zaXZlIGRldGFpbHMgKGxvY2FsIHZhcmlhYmxlcykgYW5kIGJyZWFrIHJlZmVyZW5jZSBjeWNsZXMuCisKKy0gSXNzdWUgIzE4NzgwOiAlLWZvcm1hdHRpbmcgY29kZXMgJWQsICVpLCBhbmQgJXUgbm93IHRyZWF0IGludC1zdWJjbGFzc2VzCisgIGFzIGludCAoZGlzcGxheXMgdmFsdWUgb2YgaW50LXN1YmNsYXNzIGluc3RlYWQgb2Ygc3RyKGludC1zdWJjbGFzcykgKS4KKworTGlicmFyeQorLS0tLS0tLQorCistIElzc3VlICMxODgwODogVGhyZWFkLmpvaW4oKSBub3cgd2FpdHMgZm9yIHRoZSB1bmRlcmx5aW5nIHRocmVhZCBzdGF0ZSB0bworICBiZSBkZXN0cm95ZWQgYmVmb3JlIHJldHVybmluZy4gIFRoaXMgcHJldmVudHMgdW5wcmVkaWN0YWJsZSBhYm9ydHMgaW4KKyAgUHlfRW5kSW50ZXJwcmV0ZXIoKSB3aGVuIHNvbWUgbm9uLWRhZW1vbiB0aHJlYWRzIGFyZSBzdGlsbCBydW5uaW5nLgorCistIElzc3VlICMxODQ1ODogUHJldmVudCBjcmFzaGVzIHdpdGggbmV3ZXIgdmVyc2lvbnMgb2YgbGliZWRpdC4gIEl0cyByZWFkbGluZQorICBlbXVsYXRpb24gaGFzIGNoYW5nZWQgZnJvbSAwLWJhc2VkIGluZGV4aW5nIHRvIDEtYmFzZWQgbGlrZSBnbnUgcmVhZGxpbmUuCisKKy0gSXNzdWUgIzE4ODUyOiBIYW5kbGUgY2FzZSBvZiBgYHJlYWRsaW5lLl9fZG9jX19gYCBiZWluZyBgYE5vbmVgYCBpbiB0aGUgbmV3CisgIHJlYWRsaW5lIGFjdGl2YXRpb24gY29kZSBpbiBgYHNpdGUucHlgYC4KIAogLSBJc3N1ZSAjMTg2NzI6IEZpeGVkIGZvcm1hdCBzcGVjaWZpZXJzIGZvciBQeV9zc2l6ZV90IGluIGRlYnVnZ2luZyBvdXRwdXQgaW4KICAgdGhlIF9zcmUgbW9kdWxlLgogCi0tIElzc3VlICMxODgzMDogaW5zcGVjdC5nZXRjbGFzc3RyZWUoKSBubyBtb3JlIHByb2R1Y2VzIGR1cGxpY2F0ZWQgZW50cmllcyBldmVuCistIElzc3VlICMxODgzMDogaW5zcGVjdC5nZXRjbGFzc3RyZWUoKSBubyBsb25nZXIgcHJvZHVjZXMgZHVwbGljYXRlIGVudHJpZXMgZXZlbgogICB3aGVuIGlucHV0IGxpc3QgY29udGFpbnMgZHVwbGljYXRlcy4KIAorLSBJc3N1ZSAjMTg4Nzg6IHN1bmF1Lm9wZW4gbm93IHN1cHBvcnRzIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wuICBCYXNlZCBvbgorICBwYXRjaGVzIGJ5IENsYXVkaXUgUG9wYSBhbmQgUi4gRGF2aWQgTXVycmF5LgorCiAtIElzc3VlICMxODkwOTogRml4IF90a2ludGVyLnRrYXBwLmludGVycGFkZHIoKSBvbiBXaW5kb3dzIDY0LWJpdCwgZG9uJ3QgY2FzdAogICA2NC1iaXQgcG9pbnRlciB0byBsb25nICgzMiBiaXRzKS4KIAogLSBJc3N1ZSAjMTg4NzY6IFRoZSBGaWxlSU8ubW9kZSBhdHRyaWJ1dGUgbm93IGJldHRlciByZWZsZWN0cyB0aGUgYWN0dWFsIG1vZGUKICAgdW5kZXIgd2hpY2ggdGhlIGZpbGUgd2FzIG9wZW5lZC4gIFBhdGNoIGJ5IEVyaWsgQnJheS4KIAorLSBJc3N1ZSAjMTY4NTM6IEFkZCBuZXcgc2VsZWN0b3JzIG1vZHVsZS4KKworLSBJc3N1ZSAjMTg4ODI6IEFkZCB0aHJlYWRpbmcubWFpbl90aHJlYWQoKSBmdW5jdGlvbi4KKworLSBJc3N1ZSAjMTg5MDE6IFRoZSBzdW5hdSBnZXRwYXJhbXMgbWV0aG9kIG5vdyByZXR1cm5zIGEgbmFtZWR0dXBsZSByYXRoZXIgdGhhbgorICBhIHBsYWluIHR1cGxlLiAgUGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMxNzQ4NzogVGhlIHJlc3VsdCBvZiB0aGUgd2F2ZSBnZXRwYXJhbXMgbWV0aG9kIG5vdyBpcyBwaWNrbGVhYmxlIGFnYWluLgorICBQYXRjaCBieSBDbGF1ZGl1IFBvcGEuCisKKy0gSXNzdWUgIzE4NzU2OiBvcy51cmFuZG9tKCkgbm93IHVzZXMgYSBsYXppbHktb3BlbmVkIHBlcnNpc3RlbnQgZmlsZQorICBkZXNjcmlwdG9yLCBzbyBhcyB0byBhdm9pZCB1c2luZyBtYW55IGZpbGUgZGVzY3JpcHRvcnMgd2hlbiBydW4gaW4KKyAgcGFyYWxsZWwgZnJvbSBtdWx0aXBsZSB0aHJlYWRzLgorCiAtIElzc3VlICMxODQxODogQWZ0ZXIgZm9yaygpLCByZWluaXQgYWxsIHRocmVhZHMgc3RhdGVzLCBub3Qgb25seSBhY3RpdmUgb25lcy4KICAgUGF0Y2ggYnkgQS4gSmVzc2UgSmlyeXUgRGF2aXMuCiAKKy0gSXNzdWUgIzE3OTc0OiBTd2l0Y2ggdW5pdHRlc3QgZnJvbSB1c2luZyBnZXRvcHQgdG8gdXNpbmcgYXJncGFyc2UuCisKKy0gSXNzdWUgIzExNzk4OiBUZXN0U3VpdGUgbm93IGRyb3BzIHJlZmVyZW5jZXMgdG8gb3duIHRlc3RzIGFmdGVyIGV4ZWN1dGlvbi4KKwogLSBJc3N1ZSAjMTY2MTE6IGh0dHAuY29va2llIG5vdyBjb3JyZWN0bHkgcGFyc2VzIHRoZSAnc2VjdXJlJyBhbmQgJ2h0dHBvbmx5JwogICBjb29raWUgZmxhZ3MuCiAKIC0gSXNzdWUgIzExOTczOiBGaXggYSBwcm9ibGVtIGluIGtldmVudC4gVGhlIGZsYWdzIGFuZCBmZmxhZ3MgZmllbGRzIGFyZSBub3cKICAgcHJvcGVybHkgaGFuZGxlZCBhcyB1bnNpZ25lZC4KIAotLSBJc3N1ZSAjMTc3MDI6IE9uIGVycm9yLCBvcy5lbnZpcm9uYiBub3cgcmVtb3ZlcyBzdXBwcmVzcyB0aGUgZXhjZXB0IGNvbnRleHQKLSAgd2hlbiByYWlzaW5nIGEgbmV3IEtleUVycm9yIHdpdGggdGhlIG9yaWdpbmFsIGtleS4KKy0gSXNzdWUgIzE4ODA3OiBgYHB5dmVudmBgIG5vdyB0YWtlcyBhIC0tY29waWVzIGFyZ3VtZW50IGFsbG93aW5nIGNvcGllcworICBpbnN0ZWFkIG9mIHN5bWxpbmtzIGV2ZW4gd2hlcmUgc3ltbGlua3MgYXJlIGF2YWlsYWJsZSBhbmQgdGhlIGRlZmF1bHQuCiAKLS0gSXNzdWUgIzE4NzU1OiBGaXhlZCB0aGUgbG9hZGVyIHVzZWQgaW4gaW1wIHRvIGFsbG93IGdldF9kYXRhKCkgdG8gYmUgY2FsbGVkCi0gIG11bHRpcGxlIHRpbWVzLgorLSBJc3N1ZSAjMTg1Mzg6IGBgcHl0aG9uIC1tIGRpc2BgIG5vdyB1c2VzIGFyZ3BhcnNlIGZvciBhcmd1bWVudCBwcm9jZXNzaW5nLgorICBQYXRjaCBieSBNaWNoZWxlIE9ycsO5LgorCistIElzc3VlICMxODM5NDogQ2xvc2UgY2dpLkZpZWxkU3RvcmFnZSdzIG9wdGlvbmFsIGZpbGUuCisKKy0gSXNzdWUgIzE3NzAyOiBPbiBlcnJvciwgb3MuZW52aXJvbmIgbm93IHN1cHByZXNzZXMgdGhlIGV4Y2VwdGlvbiBjb250ZXh0CisgIHdoZW4gcmFpc2luZyBhIG5ldyBLZXlFcnJvciB3aXRoIHRoZSBvcmlnaW5hbCBrZXkuCiAKIC0gSXNzdWUgIzE2ODA5OiBGaXhlZCBzb21lIHRraW50ZXIgaW5jb21wYWJpbGl0aWVzIHdpdGggVGNsL1RrIDguNi4KIApAQCAtMTA1Miw2ICs0MTM5LDkgQEAKIC0gSXNzdWUgIzE4MzI0OiBzZXRfcGF5bG9hZCBub3cgY29ycmVjdGx5IGhhbmRsZXMgYmluYXJ5IGlucHV0LiAgVGhpcyBhbHNvCiAgIHN1cGVyc2VkZXMgdGhlIHByZXZpb3VzIGZpeGVzIGZvciAjMTQzNjAsICMxNzE3LCBhbmQgIzE2NTY0LgogCistIElzc3VlICMxODc5NDogQWRkIGEgZmlsZW5vKCkgbWV0aG9kIGFuZCBhIGNsb3NlZCBhdHRyaWJ1dGUgdG8gc2VsZWN0LmRldnBvbGwKKyAgb2JqZWN0cy4KKwogLSBJc3N1ZSAjMTcxMTk6IEZpeGVkIGludGVnZXIgb3ZlcmZsb3dzIHdoZW4gcHJvY2Vzc2luZyBsYXJnZSBzdHJpbmdzIGFuZCB0dXBsZXMKICAgaW4gdGhlIHRraW50ZXIgbW9kdWxlLgogCkBAIC0xMDYyLDkgKzQxNTIsNiBAQAogLSBJc3N1ZSAjODg2NTogQ29uY3VycmVudCBpbnZvY2F0aW9uIG9mIHNlbGVjdC5wb2xsLnBvbGwoKSBub3cgcmFpc2VzIGEKICAgUnVudGltZUVycm9yIGV4Y2VwdGlvbi4gIFBhdGNoIGJ5IENocmlzdGlhbiBTY2h1YmVydC4KIAotLSBJc3N1ZSAjMTM0NjE6IEZpeCBhIGNyYXNoIGluIHRoZSBUZXh0SU9XcmFwcGVyLnRlbGwgbWV0aG9kIG9uIDY0LWJpdAotICBwbGF0Zm9ybXMuICBQYXRjaCBieSBZb2dlc2ggQ2hhdWRoYXJpLgotCiAtIElzc3VlICMxODc3NzogVGhlIHNzbCBtb2R1bGUgbm93IHVzZXMgdGhlIG5ldyBDUllQVE9fVEhSRUFESUQgQVBJIG9mCiAgIE9wZW5TU0wgMS4wLjArIGluc3RlYWQgb2YgdGhlIGRlcHJlY2F0ZWQgQ1JZUFRPIGlkIGNhbGxiYWNrIGZ1bmN0aW9uLgogCkBAIC0xMDc5LDUwICs0MTY2LDYxMiBAQAogICBzdHJpbmdzIGZvciBgYHJmYzgyMk5hbWVgYCAoZW1haWwpLCBgYGROU05hbWVgYCAoRE5TKSBhbmQKICAgYGB1bmlmb3JtUmVzb3VyY2VJZGVudGlmaWVyYGAgKFVSSSkuCiAKKy0gSXNzdWUgIzE4NzAxOiBSZW1vdmUgc3VwcG9ydCBvZiBvbGQgQ1B5dGhvbiB2ZXJzaW9ucyAoPDMuMCkgZnJvbSBDIGNvZGUuCisKIC0gSXNzdWUgIzE4NzU2OiBJbXByb3ZlIGVycm9yIHJlcG9ydGluZyBpbiBvcy51cmFuZG9tKCkgd2hlbiB0aGUgZmFpbHVyZQogICBpcyBkdWUgdG8gc29tZXRoaW5nIGVsc2UgdGhhbiAvZGV2L3VyYW5kb20gbm90IGV4aXN0aW5nIChmb3IgZXhhbXBsZSwKICAgZXhoYXVzdGluZyB0aGUgZmlsZSBkZXNjcmlwdG9yIGxpbWl0KS4KIAorLSBJc3N1ZSAjMTg2NzM6IEFkZCBPX1RNUEZJTEUgdG8gb3MgbW9kdWxlLiBPX1RNUEZJTEUgcmVxdWlyZXMgTGludXgga2VybmVsCisgIDMuMTEgb3IgbmV3ZXIuIEl0J3Mgb25seSBkZWZpbmVkIG9uIHN5c3RlbSB3aXRoIDMuMTEgdWFwaSBoZWFkZXJzLCB0b28uCisKKy0gSXNzdWUgIzE4NTMyOiBDaGFuZ2UgdGhlIGJ1aWx0aW4gaGFzaCBhbGdvcml0aG1zJyBuYW1lcyB0byBsb3dlciBjYXNlIG5hbWVzCisgIGFzIHByb21pc2VkIGJ5IGhhc2hsaWIncyBkb2N1bWVudGF0aW9uLgorCistIElzc3VlICM4NzEzOiBhZGQgbmV3IHNwd2FuIGFuZCBmb3Jrc2VydmVyIHN0YXJ0IG1ldGhvZHMsIGFuZCBuZXcgZnVuY3Rpb25zCisgIGdldF9hbGxfc3RhcnRfbWV0aG9kcywgZ2V0X3N0YXJ0X21ldGhvZCwgYW5kIHNldF9zdGFydF9tZXRob2QsIHRvCisgIG11bHRpcHJvY2Vzc2luZy4KKwogLSBJc3N1ZSAjMTg0MDU6IEltcHJvdmUgdGhlIGVudHJvcHkgb2YgY3J5cHQubWtzYWx0KCkuCiAKKy0gSXNzdWUgIzEyMDE1OiBUaGUgdGVtcGZpbGUgbW9kdWxlIG5vdyB1c2VzIGEgc3VmZml4IG9mIDggcmFuZG9tIGNoYXJhY3RlcnMKKyAgaW5zdGVhZCBvZiA2LCB0byByZWR1Y2UgdGhlIHJpc2sgb2YgZmlsZW5hbWUgY29sbGlzaW9uLiBUaGUgZW50cm9weSB3YXMKKyAgcmVkdWNlZCB3aGVuIHVwcGVyY2FzZSBsZXR0ZXJzIHdlcmUgcmVtb3ZlZCBmcm9tIHRoZSBjaGFyc2V0IHVzZWQgdG8gZ2VuZXJhdGUKKyAgcmFuZG9tIGNoYXJhY3RlcnMuCisKKy0gSXNzdWUgIzE4NTg1OiBBZGQgOmZ1bmM6YHRleHR3cmFwLnNob3J0ZW5gIHRvIGNvbGxhcHNlIGFuZCB0cnVuY2F0ZSBhCisgIHBpZWNlIG9mIHRleHQgdG8gYSBnaXZlbiBsZW5ndGguCisKKy0gSXNzdWUgIzE4NTk4OiBUd2VhayBleGNlcHRpb24gbWVzc2FnZSBmb3IgaW1wb3J0bGliLmltcG9ydF9tb2R1bGUoKSB0bworICBpbmNsdWRlIHRoZSBtb2R1bGUgbmFtZSB3aGVuIGEga2V5IGFyZ3VtZW50IGlzIG1pc3NpbmcuCisKIC0gSXNzdWUgIzE5MTUxOiBGaXggZG9jc3RyaW5nIGFuZCB1c2Ugb2YgX2dldF9zdXBwb3J0ZWRfZmlsZV9sb2FkZXJzKCkgdG8KICAgcmVmbGVjdCAyLXR1cGxlcy4KIAorLSBJc3N1ZSAjMTkxNTI6IEFkZCBFeHRlbnNpb25GaWxlTG9hZGVyLmdldF9maWxlbmFtZSgpLgorCiAtIElzc3VlICMxODY3NjogQ2hhbmdlICdwb3NpdGl2ZScgdG8gJ25vbi1uZWdhdGl2ZScgaW4gcXVldWUucHkgcHV0IGFuZCBnZXQKICAgZG9jc3RyaW5ncyBhbmQgVmFsdWVFcnJvciBtZXNzYWdlcy4gUGF0Y2ggYnkgWmhvbmd5dWUgTHVvCiAKLS0gSXNzdWUgIzE4NjgxOiBGaXggYSBOYW1lRXJyb3IgaW4gaW1wLnJlbG9hZCgpIChub3RpY2VkIGJ5IFdlaXpoYW8gTGkpLgorLSBGaXggcmVmY291bnRpbmcgaXNzdWUgd2l0aCBleHRlbnNpb24gdHlwZXMgaW4gdGtpbnRlci4KIAogLSBJc3N1ZSAjODExMjogeGxtcnBjLnNlcnZlcidzIERvY1hNTFJQQ1NlcnZlciBzZXJ2ZXIgbm8gbG9uZ2VyIHJhaXNlcyBhbiBlcnJvcgogICBpZiBtZXRob2RzIGhhdmUgYW5ub3RhdGlvbnM7IGl0IG5vdyBjb3JyZWN0bHkgZGlzcGxheXMgdGhlIGFubm90YXRpb25zLgogCistIElzc3VlICMxODYwMDogQWRkZWQgcG9saWN5IGFyZ3VtZW50IHRvIGVtYWlsLm1lc3NhZ2UuTWVzc2FnZS5hc19zdHJpbmcsCisgIGFuZCBhc19ieXRlcyBhbmQgX19ieXRlc19fIG1ldGhvZHMgdG8gTWVzc2FnZS4KKworLSBJc3N1ZSAjMTg2NzE6IE91dHB1dCBtb3JlIGluZm9ybWF0aW9uIHdoZW4gbG9nZ2luZyBleGNlcHRpb25zIG9jY3VyLgorCistIElzc3VlICMxODYyMTogUHJldmVudCB0aGUgc2l0ZSBtb2R1bGUncyBwYXRjaGVkIGJ1aWx0aW5zIGZyb20ga2VlcGluZworICB0b28gbWFueSByZWZlcmVuY2VzIGFsaXZlIGZvciB0b28gbG9uZy4KKworLSBJc3N1ZSAjNDg4NTogQWRkIHdlYWtyZWYgc3VwcG9ydCB0byBtbWFwIG9iamVjdHMuICBQYXRjaCBieSBWYWxlcmllIExhbWJlcnQuCisKKy0gSXNzdWUgIzg4NjA6IEZpeGVkIHJvdW5kaW5nIGluIHRpbWVkZWx0YSBjb25zdHJ1Y3Rvci4KKworLSBJc3N1ZSAjMTg4NDk6IEZpeGVkIGEgV2luZG93cy1zcGVjaWZpYyB0ZW1wZmlsZSBidWcgd2hlcmUgY29sbGlzaW9uIHdpdGggYW4KKyAgZXhpc3RpbmcgZGlyZWN0b3J5IGNhdXNlZCBta3N0ZW1wIGFuZCByZWxhdGVkIEFQSXMgdG8gZmFpbCBpbnN0ZWFkIG9mCisgIHJldHJ5aW5nLiBSZXBvcnQgYW5kIGZpeCBieSBWbGFkIFNoY2hlcmJpbmEuCisKKy0gSXNzdWUgIzE4OTIwOiBhcmdwYXJzZSdzIGRlZmF1bHQgZGVzdGluYXRpb24gZm9yIHRoZSB2ZXJzaW9uIGFjdGlvbiAoLXYsCisgIC0tdmVyc2lvbikgaGFzIGFsc28gYmVlbiBjaGFuZ2VkIHRvIHN0ZG91dCwgdG8gbWF0Y2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlLgorCitUZXN0cworLS0tLS0KKworLSBJc3N1ZSAjMTg2MjM6IEZhY3RvciBvdXQgdGhlIF9TdXBwcmVzc0NvcmVGaWxlcyBjb250ZXh0IG1hbmFnZXIgaW50bworICB0ZXN0LnN1cHBvcnQuICBQYXRjaCBieSBWYWxlcmllIExhbWJlcnQuCisKKy0gSXNzdWUgIzEyMDM3OiBGaXggdGVzdF9lbWFpbCBmb3IgZGVza3RvcCBXaW5kb3dzLgorCistIElzc3VlICMxNTUwNzogdGVzdF9zdWJwcm9jZXNzJ3MgdGVzdF9zZW5kX3NpZ25hbCBjb3VsZCBmYWlsIGlmIHRoZSB0ZXN0CisgIHJ1bm5lciB3ZXJlIHJ1biBpbiBhbiBlbnZpcm9ubWVudCB3aGVyZSB0aGUgcHJvY2VzcyBpbmhlcml0ZWQgYW4gaWdub3JlCisgIHNldHRpbmcgZm9yIFNJR0lOVC4gIFJlc3RvcmUgdGhlIFNJR0lOVCBoYW5kbGVyIHRvIHRoZSBkZXNpcmVkCisgIEtleWJvYXJkSW50ZXJydXB0IHJhaXNpbmcgb25lIGR1cmluZyB0aGF0IHRlc3QuCisKKy0gSXNzdWUgIzE2Nzk5OiBTd2l0Y2hlZCBmcm9tIGdldG9wdCB0byBhcmdwYXJzZSBzdHlsZSBpbiByZWdydGVzdCdzIGFyZ3VtZW50CisgIHBhcnNpbmcuICBBZGRlZCBtb3JlIHRlc3RzIGZvciByZWdydGVzdCdzIGFyZ3VtZW50IHBhcnNpbmcuCisKKy0gSXNzdWUgIzE4NzkyOiBVc2UgIjEyNy4wLjAuMSIgb3IgIjo6MSIgaW5zdGVhZCBvZiAibG9jYWxob3N0IiBhcyBtdWNoIGFzCisgIHBvc3NpYmxlLCBzaW5jZSAibG9jYWxob3N0IiBnb2VzIHRocm91Z2ggYSBETlMgbG9va3VwIHVuZGVyIHJlY2VudCBXaW5kb3dzCisgIHZlcnNpb25zLgorCitJRExFCistLS0tCisKKy0gSXNzdWUgIzE4NDg5OiBBZGQgdGVzdHMgZm9yIFNlYXJjaEVuZ2luZS4gT3JpZ2luYWwgcGF0Y2ggYnkgUGhpbCBXZWJzdGVyLgorCitEb2N1bWVudGF0aW9uCistLS0tLS0tLS0tLS0tCisKKy0gSXNzdWUgIzE4NzQzOiBGaXggcmVmZXJlbmNlcyB0byBub24tZXhpc3RhbnQgIlN0cmluZ0lPIiBtb2R1bGUuCisKKy0gSXNzdWUgIzE4NzgzOiBSZW1vdmVkIGV4aXN0aW5nIG1lbnRpb25zIG9mIFB5dGhvbiBsb25nIHR5cGUgaW4gZG9jc3RyaW5ncywKKyAgZXJyb3IgbWVzc2FnZXMgYW5kIGNvbW1lbnRzLgorCitCdWlsZAorLS0tLS0KKworLSBJc3N1ZSAjMTU4NDogUHJvdmlkZSBjb25maWd1cmUgb3B0aW9ucyB0byBvdmVycmlkZSBkZWZhdWx0IHNlYXJjaCBwYXRocyBmb3IKKyAgVGNsIGFuZCBUayB3aGVuIGJ1aWxkaW5nIF90a2ludGVyLgorCistIElzc3VlICMxNTY2MzogVGNsL1RrIDguNS4xNCBpcyBub3cgaW5jbHVkZWQgd2l0aCB0aGUgT1MgWCAxMC42KyA2NC0vMzItYml0CisgIGluc3RhbGxlci4gIEl0IGlzIG5vIGxvbmdlciBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhIHRoaXJkLXBhcnR5IHZlcnNpb24gb2YKKyAgVGNsL1RrIDguNSB0byB3b3JrIGFyb3VuZCB0aGUgcHJvYmxlbXMgaW4gdGhlIEFwcGxlLXN1cHBsaWVkIFRjbC9UayA4LjUKKyAgc2hpcHBlZCBpbiBPUyBYIDEwLjYgYW5kIGxhdGVyIHJlbGVhc2VzLgorCitUb29scy9EZW1vcworLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTg5MjI6IE5vdyBUaGUgTGliL3NtdHBkLnB5IGFuZCBUb29scy9pMThuL21zZ2ZtdC5weSBzY3JpcHRzIHdyaXRlCisgIHRoZWlyIHZlcnNpb24gc3RyaW5ncyB0byBzdGRvdXQsIGFuZCBub3QgdG8gc2RlcnIuCisKKworV2hhdCdzIE5ldyBpbiBQeXRob24gMy40LjAgQWxwaGEgMT8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1JlbGVhc2UgZGF0ZTogMjAxMy0wOC0wMworCitDb3JlIGFuZCBCdWlsdGlucworLS0tLS0tLS0tLS0tLS0tLS0KKworLSBJc3N1ZSAjMTY3NDE6IEZpeCBhbiBlcnJvciByZXBvcnRpbmcgaW4gaW50KCkuCisKKy0gSXNzdWUgIzE3ODk5OiBGaXggcmFyZSBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiBvcy5saXN0ZGlyKCkuCisKKy0gSXNzdWUgIzEwMjQxOiBDbGVhciBleHRlbnNpb24gbW9kdWxlIGRpY3QgY29waWVzIGF0IGludGVycHJldGVyIHNodXRkb3duLgorICBQYXRjaCBieSBOZWlsIFNjaGVtZW5hdWVyLCBtaW5pbWFsbHkgbW9kaWZpZWQuCisKKy0gSXNzdWUgIzkwMzU6IGlzbW91bnQgbm93IHJlY29nbmlzZXMgdm9sdW1lcyBtb3VudGVkIGJlbG93IGEgZHJpdmUgcm9vdAorICBvbiBXaW5kb3dzLiBPcmlnaW5hbCBwYXRjaCBieSBBdHN1byBJc2hpbW90by4KKworLSBJc3N1ZSAjMTgyMTQ6IEltcHJvdmUgZmluYWxpemF0aW9uIG9mIFB5dGhvbiBtb2R1bGVzIHRvIGF2b2lkIHNldHRpbmcKKyAgdGhlaXIgZ2xvYmFscyB0byBOb25lLCBpbiBtb3N0IGNhc2VzLgorCistIElzc3VlICMxODExMjogUEVQIDQ0MiBpbXBsZW1lbnRhdGlvbiAoc2FmZSBvYmplY3QgZmluYWxpemF0aW9uKS4KKworLSBJc3N1ZSAjMTg1NTI6IENoZWNrIHJldHVybiB2YWx1ZSBvZiBQeUFyZW5hX0FkZFB5T2JqZWN0KCkgaW4KKyAgb2JqMmFzdF9vYmplY3QoKS4KKworLSBJc3N1ZSAjMTg1NjA6IEZpeCBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIHN1bSgpLgorCistIElzc3VlICMxODUyMDogQWRkIGEgbmV3IFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCkgZnVuY3Rpb24sIHNhbWUgdGhhbgorICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCkgZXhjZXB0IHRoYXQgaXQgaGFzIGEgcmV0dXJuIHZhbHVlICgwIG9uIHN1Y2Nlc3MsCisgIC0xIG9uIGVycm9yKS4KKworLSBJc3N1ZSAjMTU5MDU6IEZpeCB0aGVvcmV0aWNhbCBidWZmZXIgb3ZlcmZsb3cgaW4gaGFuZGxpbmcgb2Ygc3lzLmFyZ3ZbMF0sCisgIHByZWZpeCBhbmQgZXhlY19wcmVmaXggaWYgdGhlIG9wZXJhdGlvbiBzeXN0ZW0gZG9lcyBub3Qgb2JleSBNQVhQQVRITEVOLgorCistIElzc3VlICMxODQwODogRml4IG1hbnkgdmFyaW91cyBidWdzIGluIGNvZGUgaGFuZGxpbmcgZXJyb3JzLCBlc3BlY2lhbGx5CisgIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgKE1lbW9yeUVycm9yKS4KKworLSBJc3N1ZSAjMTgzNDQ6IEZpeCBwb3RlbnRpYWwgcmVmLWxlYWtzIGluIF9idWZmZXJlZHJlYWRlcl9yZWFkX2FsbCgpLgorCistIElzc3VlICMxODM0MjogVXNlIHRoZSByZXByIG9mIGEgbW9kdWxlIG5hbWUgd2hlbiBhbiBpbXBvcnQgZmFpbHMgd2hlbiB1c2luZworICBgYGZyb20gLi4uIGltcG9ydCAuLi5gYC4KKworLSBJc3N1ZSAjMTc4NzI6IEZpeCBhIHNlZ2ZhdWx0IGluIG1hcnNoYWwubG9hZCgpIHdoZW4gaW5wdXQgc3RyZWFtIHJldHVybnMKKyAgbW9yZSBieXRlcyB0aGFuIHJlcXVlc3RlZC4KKworLSBJc3N1ZSAjMTgzMzg6IGBweXRob24gLS12ZXJzaW9uYCBub3cgcHJpbnRzIHZlcnNpb24gc3RyaW5nIHRvIHN0ZG91dCwgYW5kCisgIG5vdCB0byBzdGRlcnIuICBQYXRjaCBieSBCZXJrZXIgUGVrc2FnIGFuZCBNaWNoYWVsIERpY2tlbnMuCisKKy0gSXNzdWUgIzE4NDI2OiBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGluIEMgZXh0ZW5zaW9uIGltcG9ydCB3aGVuCisgIFB5TW9kdWxlX0dldERlZigpIHJldHVybnMgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzE3MjA2OiBPbiBXaW5kb3dzLCBpbmNyZWFzZSB0aGUgc3RhY2sgc2l6ZSBmcm9tIDIgTUIgdG8gNC4yIE1CIHRvIGZpeAorICBhIHN0YWNrIG92ZXJmbG93IGluIHRoZSBtYXJzaGFsIG1vZHVsZSAoZml4IGEgY3Jhc2ggaW4gdGVzdF9tYXJzaGFsKS4KKyAgUGF0Y2ggd3JpdHRlbiBieSBKZXJlbXkgS2xvdGguCisKKy0gSXNzdWUgIzMzMjk6IEltcGxlbWVudCB0aGUgUEVQIDQ0NTogQWRkIG5ldyBBUElzIHRvIGN1c3RvbWl6ZSBQeXRob24gbWVtb3J5CisgIGFsbG9jYXRvcnMuCisKKy0gSXNzdWUgIzE4MzI4OiBSZW9yZGVyIG9wcyBpbiBQeVRocmVhZFN0YXRlX0RlbGV0ZSooKSBmdW5jdGlvbnMuIE5vdyB0aGUKKyAgdHN0YXRlIGlzIGZpcnN0IHJlbW92ZWQgZnJvbSBUTFMgYW5kIHRoZW4gZGVhbGxvY2F0ZWQuCisKKy0gSXNzdWUgIzEzNDgzOiBVc2UgVmlydHVhbEFsbG9jIGluIG9ibWFsbG9jIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE4MTg0OiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgpIGFuZCBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoKSBub3cgcmFpc2UKKyAgT3ZlcmZsb3dFcnJvciB3aGVuIGFuIGFyZ3VtZW50IG9mICVjIGZvcm1hdCBpcyBvdXQgb2YgcmFuZ2UuCisKKy0gSXNzdWUgIzE4MTExOiBUaGUgbWluKCkgYW5kIG1heCgpIGZ1bmN0aW9ucyBub3cgc3VwcG9ydCBhIGRlZmF1bHQgYXJndW1lbnQKKyAgdG8gYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiByYWlzaW5nIGEgVmFsdWVFcnJvciBvbiBhbiBlbXB0eSBzZXF1ZW5jZS4KKyAgKENvbnRyaWJ1dGVkIGJ5IEp1bGlhbiBCZXJtYW4uKQorCistIElzc3VlICMxODEzNzogRGV0ZWN0IGludGVnZXIgb3ZlcmZsb3cgb24gcHJlY2lzaW9uIGluIGZsb2F0Ll9fZm9ybWF0X18oKQorICBhbmQgY29tcGxleC5fX2Zvcm1hdF9fKCkuCisKKy0gSXNzdWUgIzE4MTgzOiBGaXggdmFyaW91cyB1bmljb2RlIG9wZXJhdGlvbnMgb24gc3RyaW5ncyB3aXRoIGxhcmdlIHVuaWNvZGUKKyAgY29kZXBvaW50cy4KKworLSBJc3N1ZSAjMTgxODA6IEZpeCByZWYgbGVhayBpbiBfUHlJbXBvcnRfR2V0RHluTG9hZFdpbmRvd3MoKS4KKworLSBJc3N1ZSAjMTgwMzg6IFN5bnRheEVycm9yIHJhaXNlZCBkdXJpbmcgY29tcGlsYXRpb24gc291cmNlcyB3aXRoIGlsbGVnYWwKKyAgZW5jb2Rpbmcgbm93IGFsd2F5cyBjb250YWlucyBhbiBlbmNvZGluZyBuYW1lLgorCistIElzc3VlICMxNzkzMTogUmVzb2x2ZSBjb25mdXNpb24gb24gV2luZG93cyBiZXR3ZWVuIHBpZHMgYW5kIHByb2Nlc3MKKyAgaGFuZGxlcy4KKworLSBUd2VhayB0aGUgZXhjZXB0aW9uIG1lc3NhZ2Ugd2hlbiB0aGUgbWFnaWMgbnVtYmVyIG9yIHNpemUgdmFsdWUgaW4gYSBieXRlY29kZQorICBmaWxlIGlzIHRydW5jYXRlZC4KKworLSBJc3N1ZSAjMTc5MzI6IEZpeCBhbiBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlIG9uIFdpbmRvd3MgNjQtYml0IGluIGl0ZXJhdG9yczoKKyAgY2hhbmdlIHRoZSBDIHR5cGUgb2Ygc2VxaXRlcm9iamVjdC5pdF9pbmRleCBmcm9tIGxvbmcgdG8gUHlfc3NpemVfdC4KKworLSBJc3N1ZSAjMTgwNjU6IERvbid0IHNldCBfX3BhdGhfXyB0byB0aGUgcGFja2FnZSBuYW1lIGZvciBmcm96ZW4gcGFja2FnZXMuCisKKy0gSXNzdWUgIzE4MDg4OiBXaGVuIHJlbG9hZGluZyBhIG1vZHVsZSwgdW5jb25kaXRpb25hbGx5IHJlc2V0IGFsbCByZWxldmFudAorICBhdHRyaWJ1dGVzIG9uIHRoZSBtb2R1bGUgKGUuZy4gX19uYW1lX18sIF9fbG9hZGVyX18sIF9fcGFja2FnZV9fLCBfX2ZpbGVfXywKKyAgX19jYWNoZWRfXykuCisKKy0gSXNzdWUgIzE3OTM3OiBUcnkgaGFyZGVyIHRvIGNvbGxlY3QgY3ljbGljIGdhcmJhZ2UgYXQgc2h1dGRvd24uCisKKy0gSXNzdWUgIzEyMzcwOiBQcmV2ZW50IGNsYXNzIGJvZGllcyBmcm9tIGludGVyZmVyaW5nIHdpdGggdGhlIF9fY2xhc3NfXworICBjbG9zdXJlLgorCistIElzc3VlICMxNzY0NDogRml4IGEgY3Jhc2ggaW4gc3RyLmZvcm1hdCB3aGVuIGN1cmx5IGJyYWNlcyBhcmUgdXNlZCBpbiBzcXVhcmUKKyAgYnJhY2tldHMuCisKKy0gSXNzdWUgIzE3MjM3OiBGaXggY3Jhc2ggaW4gdGhlIEFTQ0lJIGRlY29kZXIgb24gbTY4ay4KKworLSBJc3N1ZSAjMTc5Mjc6IEZyYW1lIG9iamVjdHMga2VwdCBhcmd1bWVudHMgYWxpdmUgaWYgdGhleSBoYWQgYmVlbgorICBjb3BpZWQgaW50byBhIGNlbGwsIGV2ZW4gaWYgdGhlIGNlbGwgd2FzIGNsZWFyZWQuCisKKy0gSXNzdWUgIzE1NDU0NjM6IEF0IHNodXRkb3duLCBkZWZlciBmaW5hbGl6YXRpb24gb2YgY29kZWMgbW9kdWxlcyBzbworICB0aGF0IHN0ZGVyciByZW1haW5zIHVzYWJsZS4KKworLSBJc3N1ZSAjNzMzMDogSW1wbGVtZW50IHdpZHRoIGFuZCBwcmVjaXNpb24gKGV4OiAiJTUuM3MiKSBmb3IgdGhlIGZvcm1hdAorICBzdHJpbmcgb2YgUHlVbmljb2RlX0Zyb21Gb3JtYXQoKSBmdW5jdGlvbiwgb3JpZ2luYWwgcGF0Y2ggd3JpdHRlbiBieSBZc2ogUmF5LgorCistIElzc3VlICMxNTQ1NDYzOiBHbG9iYWwgdmFyaWFibGVzIGNhdWdodCBpbiByZWZlcmVuY2UgY3ljbGVzIGFyZSBub3cKKyAgZ2FyYmFnZS1jb2xsZWN0ZWQgYXQgc2h1dGRvd24uCisKKy0gSXNzdWUgIzE3MDk0OiBDbGVhciBzdGFsZSB0aHJlYWQgc3RhdGVzIGFmdGVyIGZvcmsoKS4gIE5vdGUgdGhhdCB0aGlzCisgIGlzIGEgcG90ZW50aWFsbHkgZGlzcnVwdGl2ZSBjaGFuZ2Ugc2luY2UgaXQgbWF5IHJlbGVhc2Ugc29tZSBzeXN0ZW0KKyAgcmVzb3VyY2VzIHdoaWNoIHdvdWxkIG90aGVyd2lzZSByZW1haW4gcGVycGV0dWFsbHkgYWxpdmUgKGUuZy4gZGF0YWJhc2UKKyAgY29ubmVjdGlvbnMga2VwdCBpbiB0aHJlYWQtbG9jYWwgc3RvcmFnZSkuCisKKy0gSXNzdWUgIzE3NDA4OiBBdm9pZCB1c2luZyBhbiBvYnNvbGV0ZSBpbnN0YW5jZSBvZiB0aGUgY29weXJlZyBtb2R1bGUgd2hlbgorICB0aGUgaW50ZXJwcmV0ZXIgaXMgc2h1dGRvd24gYW5kIHRoZW4gc3RhcnRlZCBhZ2Fpbi4KKworLSBJc3N1ZSAjNTg0NTogRW5hYmxlIHRhYi1jb21wbGV0aW9uIGluIHRoZSBpbnRlcmFjdGl2ZSBpbnRlcnByZXRlciBieQorICBkZWZhdWx0LCB0aGFua3MgdG8gYSBuZXcgc3lzLl9faW50ZXJhY3RpdmVob29rX18uCisKKy0gSXNzdWUgIzE3MTE1LDE3MTE2OiBNb2R1bGUgaW5pdGlhbGl6YXRpb24gbm93IGluY2x1ZGVzIHNldHRpbmcgX19wYWNrYWdlX18gYW5kCisgIF9fbG9hZGVyX18gYXR0cmlidXRlcyB0byBOb25lLgorCistIElzc3VlICMxNzg1MzogRW5zdXJlIGxvY2FscyBvZiBhIGNsYXNzIHRoYXQgc2hhZG93IGZyZWUgdmFyaWFibGVzIGFsd2F5cyB3aW4KKyAgb3ZlciB0aGUgY2xvc3VyZXMuCisKKy0gSXNzdWUgIzE3ODYzOiBJbiB0aGUgaW50ZXJhY3RpdmUgY29uc29sZSwgZG9uJ3QgbG9vcCBmb3JldmVyIGlmIHRoZSBlbmNvZGluZworICBjYW4ndCBiZSBmZXRjaGVkIGZyb20gc3RkaW4uCisKKy0gSXNzdWUgIzE3ODY3OiBSYWlzZSBhbiBJbXBvcnRFcnJvciBpZiBfX2ltcG9ydF9fIGlzIG5vdCBmb3VuZCBpbiBfX2J1aWx0aW5zX18uCisKKy0gSXNzdWUgIzE4Njk4OiBFbnN1cmUgaW1wb3J0bGliLnJlbG9hZCgpIHJldHVybnMgdGhlIG1vZHVsZSBvdXQgb2Ygc3lzLm1vZHVsZXMuCisKKy0gSXNzdWUgIzE3ODU3OiBQcmV2ZW50IGJ1aWxkIGZhaWx1cmVzIHdpdGggcHJlLTMuNS4wIHZlcnNpb25zIG9mIHNxbGl0ZTMsCisgIHN1Y2ggYXMgd2FzIHNoaXBwZWQgd2l0aCBDZW50b3MgNSBhbmQgTWFjIE9TIFggMTAuNC4KKworLSBJc3N1ZSAjMTc0MTM6IHN5cy5zZXR0cmFjZSBjYWxsYmFja3Mgd2VyZSBiZWluZyBwYXNzZWQgYSBzdHJpbmcgaW5zdGVhZCBvZiBhbgorICBleGNlcHRpb24gaW5zdGFuY2UgZm9yIHRoZSAndmFsdWUnIGVsZW1lbnQgb2YgdGhlIGFyZyB0dXBsZSBpZiB0aGUgZXhjZXB0aW9uCisgIG9yaWdpbmF0ZWQgZnJvbSBDIGNvZGU7IG5vdyBhbiBleGNlcHRpb24gaW5zdGFuY2UgaXMgYWx3YXlzIHByb3ZpZGVkLgorCistIElzc3VlICMxNzc4MjogRml4IHVuZGVmaW5lZCBiZWhhdmlvdXIgb24gcGxhdGZvcm1zIHdoZXJlCisgIGBgc3RydWN0IHRpbWVzcGVjYGAncyAidHZfbnNlYyIgbWVtYmVyIGlzIG5vdCBhIEMgbG9uZy4KKworLSBJc3N1ZSAjMTc3MjI6IFdoZW4gbG9va2luZyB1cCBfX3JvdW5kX18sIHJlc29sdmUgZGVzY3JpcHRvcnMuCisKKy0gSXNzdWUgIzE2MDYxOiBTcGVlZCB1cCBzdHIucmVwbGFjZSgpIGZvciByZXBsYWNpbmcgMS1jaGFyYWN0ZXIgc3RyaW5ncy4KKworLSBJc3N1ZSAjMTc3MTU6IEZpeCBzZWdtZW50YXRpb24gZmF1bHQgZnJvbSByYWlzaW5nIGFuIGV4Y2VwdGlvbiBpbiBhIF9fdHJ1bmNfXworICBtZXRob2QuCisKKy0gSXNzdWUgIzE3NjQzOiBBZGQgX19jYWxsYmFja19fIGF0dHJpYnV0ZSB0byB3ZWFrcmVmLnJlZi4KKworLSBJc3N1ZSAjMTY0NDc6IEZpeGVkIHBvdGVudGlhbCBzZWdtZW50YXRpb24gZmF1bHQgd2hlbiBzZXR0aW5nIF9fbmFtZV9fIG9uIGEKKyAgY2xhc3MuCisKKy0gSXNzdWUgIzE3NjY5OiBGaXggY3Jhc2ggaW52b2x2aW5nIGZpbmFsaXphdGlvbiBvZiBnZW5lcmF0b3JzIHVzaW5nIHlpZWxkIGZyb20uCisKKy0gSXNzdWUgIzE0NDM5OiBQeXRob24gbm93IHByaW50cyB0aGUgdHJhY2ViYWNrIG9uIHJ1bnB5IGZhaWx1cmUgYXQgc3RhcnR1cC4KKworLSBJc3N1ZSAjMTc0Njk6IEZpeCBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKCkgYW5kIHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKQorICB3aGVuIHJ1bm5pbmcgb24gdmFsZ3JpbmQuCisKKy0gSXNzdWUgIzE3NjE5OiBNYWtlIGlucHV0KCkgY2hlY2sgZm9yIEN0cmwtQyBjb3JyZWN0bHkgb24gV2luZG93cy4KKworLSBJc3N1ZSAjMTczNTc6IEFkZCBtaXNzaW5nIHZlcmJvc2l0eSBtZXNzYWdlcyBmb3IgLXYvLXZ2IHRoYXQgd2VyZSBsb3N0IGR1cmluZworICB0aGUgaW1wb3J0bGliIHRyYW5zaXRpb24uCisKKy0gSXNzdWUgIzE3NjEwOiBEb24ndCByZWx5IG9uIG5vbi1zdGFuZGFyZCBiZWhhdmlvciBvZiB0aGUgQyBxc29ydCgpIGZ1bmN0aW9uLgorCistIElzc3VlICMxNzMyMzogVGhlICJbWCByZWZzLCBZIGJsb2Nrc10iIHByaW50ZWQgYnkgZGVidWcgYnVpbGRzIGhhcyBiZWVuCisgIGRpc2FibGVkIGJ5IGRlZmF1bHQuICBJdCBjYW4gYmUgcmUtZW5hYmxlZCB3aXRoIHRoZSBgLVggc2hvd3JlZmNvdW50YCBvcHRpb24uCisKKy0gSXNzdWUgIzE3MzI4OiBGaXggcG9zc2libGUgcmVmbGVhayBpbiBkaWN0LnNldGRlZmF1bHQuCisKKy0gSXNzdWUgIzE3Mjc1OiBDb3JyZWN0ZWQgY2xhc3MgbmFtZSBpbiBpbml0IGVycm9yIG1lc3NhZ2VzIG9mIHRoZSBDIHZlcnNpb24gb2YKKyAgQnVmZmVyZWRXcml0ZXIgYW5kIEJ1ZmZlcmVkUmFuZG9tLgorCistIElzc3VlICM3OTYzOiBGaXhlZCBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2UgdGhhdCBpc3N1ZWQgd2hlbiBvYmplY3QgaXMKKyAgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLgorCistIElzc3VlICM4NzQ1OiBTbWFsbCBzcGVlZCB1cCB6aXBpbXBvcnQgb24gV2luZG93cy4gUGF0Y2ggYnkgQ2F0YWxpbiBJYWNvYi4KKworLSBJc3N1ZSAjNTMwODogUmFpc2UgVmFsdWVFcnJvciB3aGVuIG1hcnNoYWxsaW5nIHRvbyBsYXJnZSBvYmplY3QgKGEgc2VxdWVuY2UKKyAgd2l0aCBzaXplID49IDIqKjMxKSwgaW5zdGVhZCBvZiBwcm9kdWNpbmcgaWxsZWdhbCBtYXJzaGFsIGRhdGEuCisKKy0gSXNzdWUgIzEyOTgzOiBCeXRlcyBsaXRlcmFscyB3aXRoIGludmFsaWQgYGBceGBgIGVzY2FwZSBub3cgcmFpc2UgYSBTeW50YXhFcnJvcgorICBhbmQgYSBmdWxsIHRyYWNlYmFjayBpbmNsdWRpbmcgbGluZSBudW1iZXIuCisKKy0gSXNzdWUgIzE2OTY3OiBJbiBmdW5jdGlvbiBkZWZpbml0aW9uLCBldmFsdWF0ZSBwb3NpdGlvbmFsIGRlZmF1bHRzIGJlZm9yZQorICBrZXl3b3JkLW9ubHkgZGVmYXVsdHMuCisKKy0gSXNzdWUgIzE3MTczOiBSZW1vdmUgdXNlcyBvZiBsb2NhbGUtZGVwZW5kZW50IEMgZnVuY3Rpb25zIChpc2FscGhhKCkgZXRjLikKKyAgaW4gdGhlIGludGVycHJldGVyLgorCistIElzc3VlICMxNzEzNzogV2hlbiBhbiBVbmljb2RlIHN0cmluZyBpcyByZXNpemVkLCB0aGUgaW50ZXJuYWwgd2lkZSBjaGFyYWN0ZXIKKyAgc3RyaW5nICh3c3RyKSBmb3JtYXQgaXMgbm93IGNsZWFyZWQuCisKKy0gSXNzdWUgIzE3MDQzOiBUaGUgdW5pY29kZS1pbnRlcm5hbCBkZWNvZGVyIG5vIGxvbmdlciByZWFkIHBhc3QgdGhlIGVuZCBvZgorICBpbnB1dCBidWZmZXIuCisKKy0gSXNzdWUgIzE3MDk4OiBBbGwgbW9kdWxlcyBub3cgaGF2ZSBfX2xvYWRlcl9fIHNldCBldmVuIGlmIHRoZXkgcHJlLWV4aXN0IHRoZQorICBib290c3RyYXBwaW5nIG9mIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTY5Nzk6IEZpeCBlcnJvciBoYW5kbGluZyBidWdzIGluIHRoZSB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTY3NzI6IFRoZSBiYXNlIGFyZ3VtZW50IHRvIHRoZSBpbnQgY29uc3RydWN0b3Igbm8gbG9uZ2VyIGFjY2VwdHMKKyAgZmxvYXRzLCBvciBvdGhlciBub24taW50ZWdlciBvYmplY3RzIHdpdGggYW4gX19pbnRfXyBtZXRob2QuICBPYmplY3RzCisgIHdpdGggYW4gX19pbmRleF9fIG1ldGhvZCBhcmUgbm93IGFjY2VwdGVkLgorCistIElzc3VlICMxMDE1NjogSW4gdGhlIGludGVycHJldGVyJ3MgaW5pdGlhbGl6YXRpb24gcGhhc2UsIHVuaWNvZGUgZ2xvYmFscworICBhcmUgbm93IGluaXRpYWxpemVkIGR5bmFtaWNhbGx5IGFzIG5lZWRlZC4KKworLSBJc3N1ZSAjMTY5ODA6IEZpeCBwcm9jZXNzaW5nIG9mIGVzY2FwZWQgbm9uLWFzY2lpIGJ5dGVzIGluIHRoZQorICB1bmljb2RlLWVzY2FwZS1kZWNvZGUgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTY5NzU6IEZpeCBlcnJvciBoYW5kbGluZyBidWcgaW4gdGhlIGVzY2FwZS1kZWNvZGUgYnl0ZXMgZGVjb2Rlci4KKworLSBJc3N1ZSAjMTQ4NTA6IE5vdyBhIGNoYXJtYXAgZGVjb2RlciB0cmVhdHMgVStGRkZFIGFzICJ1bmRlZmluZWQgbWFwcGluZyIKKyAgaW4gYW55IG1hcHBpbmcsIG5vdCBvbmx5IGluIGEgc3RyaW5nLgorCistIElzc3VlICMxNjYxMzogQWRkICptKiBhcmd1bWVudCB0byBgYGNvbGxlY3Rpb25zLkNoYWlubWFwLm5ld19jaGlsZGBgIHRvCisgIGFsbG93IHRoZSBuZXcgY2hpbGQgbWFwIHRvIGJlIHNwZWNpZmllZCBleHBsaWNpdGx5LgorCistIElzc3VlICMxNjczMDogaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyIG5vdyBubyBsb25nZXJzIHJhaXNlcyBhbgorICBleGNlcHRpb24gd2hlbiB0cnlpbmcgdG8gcG9wdWxhdGUgaXRzIGNhY2hlIGFuZCBpdCBmaW5kcyBvdXQgdGhlIGRpcmVjdG9yeSBpcworICB1bnJlYWRhYmxlIG9yIGhhcyB0dXJuZWQgaW50byBhIGZpbGUuIFJlcG9ydGVkIGFuZCBkaWFnbm9zZWQgYnkKKyAgRGF2aWQgUHJpdGNoYXJkLgorCistIElzc3VlICMxNjkwNjogRml4IGEgbG9naWMgZXJyb3IgdGhhdCBwcmV2ZW50ZWQgbW9zdCBzdGF0aWMgc3RyaW5ncyBmcm9tIGJlaW5nCisgIGNsZWFyZWQuCisKKy0gSXNzdWUgIzExNDYxOiBGaXggdGhlIGluY3JlbWVudGFsIFVURi0xNiBkZWNvZGVyLiBPcmlnaW5hbCBwYXRjaCBieQorICBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KKworLSBJc3N1ZSAjMTY4NTY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBmcm9tIGNhbGxpbmcgcmVwcigpIG9uIGEgZGljdCB3aXRoCisgIGEga2V5IHdob3NlIHJlcHIgcmFpc2UgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNjM2NzogRml4IEZpbGVJTy5yZWFkYWxsKCkgb24gV2luZG93cyBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gMiBHQi4KKworLSBJc3N1ZSAjMTY3NjE6IENhbGxpbmcgaW50KCkgd2l0aCBiYXNlIGFyZ3VtZW50IG9ubHkgbm93IHJhaXNlcyBUeXBlRXJyb3IuCisKKy0gSXNzdWUgIzE2NzU5OiBTdXBwb3J0IHRoZSBmdWxsIERXT1JEICh1bnNpZ25lZCBsb25nKSByYW5nZSBpbiBSZWcyUHkKKyAgd2hlbiByZXRyaWV2aW5nIGEgUkVHX0RXT1JEIHZhbHVlLiBUaGlzIGNvcnJlY3RzIGZ1bmN0aW9ucyBsaWtlCisgIHdpbnJlZy5RdWVyeVZhbHVlRXggdGhhdCBtYXkgaGF2ZSBiZWVuIHJldHVybmluZyB0cnVuY2F0ZWQgdmFsdWVzLgorCistIElzc3VlICMxNDQyMDogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUHkyUmVnCisgIHdoZW4gcGFzc2VkIGEgUkVHX0RXT1JEIHZhbHVlLiBGaXhlcyBPdmVyZmxvd0Vycm9yIGluIHdpbnJlZy5TZXRWYWx1ZUV4LgorCistIElzc3VlICMxMTkzOTogU2V0IHRoZSBzdF9kZXYgYXR0cmlidXRlIG9mIHN0YXRfcmVzdWx0IHRvIGFsbG93IFdpbmRvd3MgdG8KKyAgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG9zLnBhdGguc2FtZWZpbGUvc2FtZW9wZW5maWxlL3NhbWVzdGF0IGltcGxlbWVudGF0aW9ucworICB1c2VkIGJ5IG90aGVyIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTY3NzI6IFRoZSBpbnQoKSBjb25zdHJ1Y3RvcidzIHNlY29uZCBhcmd1bWVudCAoYmFzZSkgbm8gbG9uZ2VyCisgIGFjY2VwdHMgbm9uIGludGVnZXIgdmFsdWVzLiAgQ29uc2lzdGVudCB3aXRoIHRoZSBiZWhhdmlvciBpbiBQeXRob24gMi4KKworLSBJc3N1ZSAjMTQ0NzA6IFJlbW92ZSB3OXhwb3BlbiBzdXBwb3J0IHBlciBQRVAgMTEuCisKKy0gSXNzdWUgIzk4NTY6IFJlcGxhY2UgZGVwcmVjYXRpb24gd2FybmluZyB3aXRoIHJhaXNpbmcgVHlwZUVycm9yCisgIGluIG9iamVjdC5fX2Zvcm1hdF9fLiBQYXRjaCBieSBGbG9yZW50IFhpY2x1bmEuCisKKy0gSXNzdWUgIzE2NTk3OiBJbiBidWZmZXJlZCBhbmQgdGV4dCBJTywgY2FsbCBjbG9zZSgpIG9uIHRoZSB1bmRlcmx5aW5nIHN0cmVhbQorICBpZiBpbnZva2luZyBmbHVzaCgpIGZhaWxzLgorCistIElzc3VlICMxNjcyMjogSW4gdGhlIGJ5dGVzKCkgY29uc3RydWN0b3IsIHRyeSB0byBjYWxsIF9fYnl0ZXNfXyBvbiB0aGUKKyAgYXJndW1lbnQgYmVmb3JlIF9faW5kZXhfXy4KKworLSBJc3N1ZSAjMTY0MjE6IGxvYWRpbmcgbXVsdGlwbGUgbW9kdWxlcyBmcm9tIG9uZSBzaGFyZWQgb2JqZWN0IGlzIG5vdworICBoYW5kbGVkIGNvcnJlY3RseSAocHJldmlvdXNseSwgdGhlIGZpcnN0IG1vZHVsZSBsb2FkZWQgZnJvbSB0aGF0IGZpbGUKKyAgd2FzIHNpbGVudGx5IHJldHVybmVkKS4gUGF0Y2ggYnkgVsOhY2xhdiDFoG1pbGF1ZXIuCisKKy0gSXNzdWUgIzE2NjAyOiBXaGVuIGEgd2Vha3JlZidzIHRhcmdldCB3YXMgcGFydCBvZiBhIGxvbmcgZGVhbGxvY2F0aW9uCisgIGNoYWluLCB0aGUgb2JqZWN0IGNvdWxkIHJlbWFpbiByZWFjaGFibGUgdGhyb3VnaCBpdHMgd2Vha3JlZiBldmVuIHRob3VnaAorICBpdHMgcmVmY291bnQgaGFkIGRyb3BwZWQgdG8gemVyby4KKworLSBJc3N1ZSAjMTY0OTU6IFJlbW92ZSBleHRyYW5lb3VzIE5VTEwgZW5jb2RpbmcgY2hlY2sgZnJvbSBieXRlc19kZWNvZGUoKS4KKworLSBJc3N1ZSAjMTY2MTk6IENyZWF0ZSBOYW1lQ29uc3RhbnQgQVNUIGNsYXNzIHRvIHJlcHJlc2VudCBOb25lLCBUcnVlLCBhbmQgRmFsc2UKKyAgbGl0ZXJhbHMuIEFzIGEgcmVzdWx0LCB0aGVzZSBjb25zdGFudHMgYXJlIG5ldmVyIGxvYWRlZCBhdCBydW50aW1lIGZyb20KKyAgYnVpbHRpbnMuCisKKy0gSXNzdWUgIzE2NDU1OiBPbiBGcmVlQlNEIGFuZCBTb2xhcmlzLCBpZiB0aGUgbG9jYWxlIGlzIEMsIHRoZQorICBBU0NJSS9zdXJyb2dhdGVlc2NhcGUgY29kZWMgaXMgbm93IHVzZWQgKGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZykgdG8KKyAgZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiBUaGlzIGNoYW5nZSBmaXhlcyBpbmNvbnNpc3RlbmNpZXMgd2l0aAorICBvcy5mc2VuY29kZSgpIGFuZCBvcy5mc2RlY29kZSgpLCBiZWNhdXNlIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zIGFubm91bmNlIGFuCisgIEFTQ0lJIGxvY2FsZSBlbmNvZGluZywgYnV0IGFjdHVhbGx5IHVzZSB0aGUgSVNPLTg4NTktMSBlbmNvZGluZyBpbiBwcmFjdGljZS4KKworLSBJc3N1ZSAjMTY1NjI6IE9wdGltaXplIGRpY3QgZXF1YWxpdHkgdGVzdGluZy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2NTg4OiBTaWxlbmNlIHVudXNlZC1idXQtc2V0IHdhcm5pbmdzIGluIFB5dGhvbi90aHJlYWRfcHRocmVhZAorCistIElzc3VlICMxNjU5Mjogc3RyaW5nbGliX2J5dGVzX2pvaW4gZG9lc24ndCByYWlzZSBNZW1vcnlFcnJvciBvbiBhbGxvY2F0aW9uCisgIGZhaWx1cmUuCisKKy0gSXNzdWUgIzE2NTQ2OiBGaXg6IGFzdC5ZaWVsZEZyb20gYXJndW1lbnQgaXMgbm93IG1hbmRhdG9yeS4KKworLSBJc3N1ZSAjMTY1MTQ6IEZpeCByZWdyZXNzaW9uIGNhdXNpbmcgYSB0cmFjZWJhY2sgd2hlbiBzeXMucGF0aFswXSBpcyBOb25lCisgIChhY3R1YWxseSwgYW55IG5vbi1zdHJpbmcgb3Igbm9uLWJ5dGVzIHR5cGUpLgorCistIElzc3VlICMxNjMwNjogRml4IG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzIHdoZW4gdW5rbm93biBjb21tYW5kIGxpbmUKKyAgcGFyYW1ldGVycyB3aGVyZSBwYXNzZWQgdG8gdGhlIGludGVycHJldGVyLiAgUGF0Y2ggYnkgSGlldSBOZ3V5ZW4uCisKKy0gSXNzdWUgIzE2MjE1OiBGaXggcG90ZW50aWFsIGRvdWJsZSBtZW1vcnkgZnJlZSBpbiBzdHIucmVwbGFjZSgpLiAgUGF0Y2gKKyAgYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYyOTA6IEEgZmxvYXQgcmV0dXJuIHZhbHVlIGZyb20gdGhlIF9fY29tcGxleF9fIHNwZWNpYWwgbWV0aG9kIGlzIG5vCisgIGxvbmdlciBhY2NlcHRlZCBpbiB0aGUgY29tcGxleCgpIGNvbnN0cnVjdG9yLgorCistIElzc3VlICMxNjQxNjogT24gTWFjIE9TIFgsIG9wZXJhdGluZyBzeXN0ZW0gZGF0YSBhcmUgbm93IGFsd2F5cworICBlbmNvZGVkL2RlY29kZWQgdG8vZnJvbSBVVEYtOC9zdXJyb2dhdGVlc2NhcGUsIGluc3RlYWQgb2YgdGhlIGxvY2FsZSBlbmNvZGluZworICAod2hpY2ggbWF5IGJlIEFTQ0lJIGlmIG5vIGxvY2FsZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBzZXQpLCB0byBhdm9pZAorICBpbmNvbnNpc3RlbmNpZXMgd2l0aCBvcy5mc2VuY29kZSgpIGFuZCBvcy5mc2RlY29kZSgpIGZ1bmN0aW9ucyB3aGljaCBhcmUKKyAgYWxyZWFkeSB1c2luZyBVVEYtOC9zdXJyb2dhdGVlc2NhcGUuCisKKy0gSXNzdWUgIzE2NDUzOiBGaXggZXF1YWxpdHkgdGVzdGluZyBvZiBkZWFkIHdlYWtyZWYgb2JqZWN0cy4KKworLSBJc3N1ZSAjOTUzNTogRml4IHBlbmRpbmcgc2lnbmFscyB0aGF0IGhhdmUgYmVlbiByZWNlaXZlZCBidXQgbm90IHlldAorICBoYW5kbGVkIGJ5IFB5dGhvbiB0byBub3QgcGVyc2lzdCBhZnRlciBvcy5mb3JrKCkgaW4gdGhlIGNoaWxkIHByb2Nlc3MuCisKKy0gSXNzdWUgIzE0Nzk0OiBGaXggc2xpY2UuaW5kaWNlcyB0byByZXR1cm4gY29ycmVjdCByZXN1bHRzIGZvciBodWdlIHZhbHVlcywKKyAgcmF0aGVyIHRoYW4gcmFpc2luZyBPdmVyZmxvd0Vycm9yLgorCistIElzc3VlICMxNTAwMTogZml4IHNlZ2ZhdWx0IG9uICJkZWwgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10iLiBQYXRjaCBieSBWaWN0b3IKKyAgU3Rpbm5lci4KKworLSBJc3N1ZSAjODI3MTogdGhlIHV0Zi04IGRlY29kZXIgbm93IG91dHB1dHMgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIFUrRkZGRAorICBjaGFyYWN0ZXJzIHdoZW4gdXNlZCB3aXRoIHRoZSAncmVwbGFjZScgZXJyb3IgaGFuZGxlciBvbiBpbnZhbGlkIHV0Zi04CisgIHNlcXVlbmNlcy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EsIHRlc3RzIGJ5IEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjNTc2NTogQXBwbHkgYSBoYXJkIHJlY3Vyc2lvbiBsaW1pdCBpbiB0aGUgY29tcGlsZXIgaW5zdGVhZCBvZgorICBibG93aW5nIHRoZSBzdGFjayBhbmQgc2VnZmF1bHRpbmcuIEluaXRpYWwgcGF0Y2ggYnkgQW5kcmVhIEdyaWZmaW5pLgorCistIElzc3VlICMxNjQwMjogV2hlbiBzbGljaW5nIGEgcmFuZ2UsIGZpeCBzaGFkb3dpbmcgb2YgZXhjZXB0aW9ucyBmcm9tCisgIF9faW5kZXhfXy4KKworLSBJc3N1ZSAjMTYzMzY6IGZpeCBpbnB1dCBjaGVja2luZyBpbiB0aGUgc3Vycm9nYXRlcGFzcyBlcnJvciBoYW5kbGVyLgorICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICM4NDAxOiBhc3NpZ25pbmcgYW4gaW50IHRvIGEgYnl0ZWFycmF5IHNsaWNlIChlLmcuIGJbMzo0XSA9IDUpIG5vdworICByYWlzZXMgYW4gZXJyb3IuCisKKy0gSXNzdWUgIzczMTc6IERpc3BsYXkgZnVsbCB0cmFjZWJhY2tzIHdoZW4gYW4gZXJyb3Igb2NjdXJzIGFzeW5jaHJvbm91c2x5LgorICBQYXRjaCBieSBBbG9uIEhvcmV2IHdpdGggdXBkYXRlIGJ5IEFsZXhleSBLYWNoYXlldi4KKworLSBJc3N1ZSAjMTYzMDk6IE1ha2UgUFlUSE9OUEFUSD0iIiBiZWhhdmlvciB0aGUgc2FtZSBhcyBpZiBQWVRIT05QQVRICisgIG5vdCBzZXQgYXQgYWxsLgorCistIElzc3VlICMxMDE4OTogSW1wcm92ZSB0aGUgZXJyb3IgcmVwb3J0aW5nIG9mIFN5bnRheEVycm9ycyByZWxhdGVkIHRvIGdsb2JhbAorICBhbmQgbm9ubG9jYWwgc3RhdGVtZW50cy4KKworLSBGaXggc2VnZmF1bHRzIG9uIHNldHRpbmcgX19xdWFsbmFtZV9fIG9uIGJ1aWx0aW4gdHlwZXMgYW5kIGF0dGVtcHRpbmcgdG8KKyAgZGVsZXRlIGl0IG9uIGFueSB0eXBlLgorCistIElzc3VlICMxNDYyNTogUmV3cml0ZSB0aGUgVVRGLTMyIGRlY29kZXIuIEl0IGlzIG5vdyAzeCB0byA0eCBmYXN0ZXIuIFBhdGNoCisgIHdyaXR0ZW4gYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYzNDU6IEZpeCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gYGBmcm9ta2V5c2BgIG9uIGEgZGljdCBzdWJjbGFzcworICByZWNlaXZlZCBhIG5vbmVtcHR5IGRpY3QgZnJvbSB0aGUgY29uc3RydWN0b3IuCisKKy0gSXNzdWUgIzE2MjcxOiBGaXggc3RyYW5nZSBidWdzIHRoYXQgcmVzdWx0ZWQgZnJvbSBfX3F1YWxuYW1lX18gYXBwZWFyaW5nIGluIGEKKyAgY2xhc3MncyBfX2RpY3RfXyBhbmQgb24gdHlwZS4KKworLSBJc3N1ZSAjMTI4MDU6IE1ha2UgYnl0ZXMuam9pbiBhbmQgYnl0ZWFycmF5LmpvaW4gZmFzdGVyIHdoZW4gdGhlIHNlcGFyYXRvcgorICBpcyBlbXB0eS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzYwNzQ6IEVuc3VyZSBjYWNoZWQgYnl0ZWNvZGUgZmlsZXMgY2FuIGFsd2F5cyBiZSB1cGRhdGVkIGJ5IHRoZQorICB1c2VyIHRoYXQgY3JlYXRlZCB0aGVtLCBldmVuIHdoZW4gdGhlIHNvdXJjZSBmaWxlIGlzIHJlYWQtb25seS4KKworLSBJc3N1ZSAjMTU5NTg6IGJ5dGVzLmpvaW4gYW5kIGJ5dGVhcnJheS5qb2luIG5vdyBhY2NlcHQgYXJiaXRyYXJ5IGJ1ZmZlcgorICBvYmplY3RzLgorCistIElzc3VlICMxNDc4MzogSW1wcm92ZSBpbnQoKSBkb2NzdHJpbmcgYW5kIHN3aXRjaCBkb2NzdHJpbmdzIGZvciBzdHIoKSwKKyAgcmFuZ2UoKSwgYW5kIHNsaWNlKCkgdG8gdXNlIG11bHRpLWxpbmUgc2lnbmF0dXJlcy4KKworLSBJc3N1ZSAjMTYxNjA6IFN1YmNsYXNzIHN1cHBvcnQgbm93IHdvcmtzIGZvciB0eXBlcy5TaW1wbGVOYW1lc3BhY2UuCisKKy0gSXNzdWUgIzE2MTQ4OiBJbXBsZW1lbnQgUEVQIDQyNCwgYWRkaW5nIG9wZXJhdG9yLmxlbmd0aF9oaW50IGFuZAorICBQeU9iamVjdF9MZW5ndGhIaW50LgorCistIFVwZ3JhZGUgVW5pY29kZSBkYXRhIChVQ0QpIHRvIHZlcnNpb24gNi4yLgorCistIElzc3VlICMxNTM3OTogRml4IHBhc3Npbmcgb2Ygbm9uLUJNUCBjaGFyYWN0ZXJzIGFzIGludGVnZXJzIGZvciB0aGUgY2hhcm1hcAorICBkZWNvZGVyIChhbHJlYWR5IHdvcmtpbmcgYXMgdW5pY29kZSBzdHJpbmdzKS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE1MTQ0OiBGaXggcG9zc2libGUgaW50ZWdlciBvdmVyZmxvdyB3aGVuIGhhbmRsaW5nIHBvaW50ZXJzIGFzIGludGVnZXIKKyAgdmFsdWVzLCBieSB1c2luZyBgUHlfdWludHB0cl90YCBpbnN0ZWFkIG9mIGBzaXplX3RgLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU5NjU6IEV4cGxpY2l0bHkgY2FzdCBgQVRfRkRDV0RgIGFzIChpbnQpLiAgUmVxdWlyZWQgb24gU29sYXJpcyAxMAorICAod2hpY2ggZGVmaW5lcyBgQVRfRkRDV0RgIGFzIGBgMHhmZmQxOTU1M2BgKSwgaGFybWxlc3Mgb24gb3RoZXIgcGxhdGZvcm1zLgorCistIElzc3VlICMxNTgzOTogQ29udmVydCBTeXN0ZW1FcnJvcnMgaW4gYHN1cGVyKClgIHRvIFJ1bnRpbWVFcnJvcnMuCisKKy0gSXNzdWUgIzE1NDQ4OiBCdWZmZXJlZCBJTyBub3cgZnJlZXMgdGhlIGJ1ZmZlciB3aGVuIGNsb3NlZCwgaW5zdGVhZAorICBvZiB3aGVuIGRlYWxsb2NhdGluZy4KKworLSBJc3N1ZSAjMTU4NDY6IEZpeCBTeXN0ZW1FcnJvciB3aGljaCBoYXBwZW5lZCB3aGVuIHVzaW5nIGBhc3QucGFyc2UoKWAgaW4gYW4KKyAgZXhjZXB0aW9uIGhhbmRsZXIgb24gY29kZSB3aXRoIHN5bnRheCBlcnJvcnMuCisKKy0gSXNzdWUgIzE1ODk3OiB6aXBpbXBvcnQuYyBkb2Vzbid0IGNoZWNrIHJldHVybiB2YWx1ZSBvZiBmc2VlaygpLgorICBQYXRjaCBieSBGZWxpcGUgQ3J1ei4KKworLSBJc3N1ZSAjMTU4MDE6IE1ha2Ugc3VyZSBtYXBwaW5ncyBwYXNzZWQgdG8gJyUnIGZvcm1hdHRpbmcgYXJlIGFjdHVhbGx5CisgIHN1YnNjcmlwdGFibGUuCisKKy0gSXNzdWUgIzE1MTExOiBfX2ltcG9ydF9fIHNob3VsZCBwcm9wYWdhdGUgSW1wb3J0RXJyb3Igd2hlbiByYWlzZWQgYXMgYQorICBzaWRlLWVmZmVjdCBvZiBhIG1vZHVsZSB0cmlnZ2VyZWQgZnJvbSB1c2luZyBmcm9tbGlzdC4KKworLSBJc3N1ZSAjMTUwMjI6IEFkZCBwaWNrbGUgYW5kIGNvbXBhcmlzb24gc3VwcG9ydCB0byB0eXBlcy5TaW1wbGVOYW1lc3BhY2UuCisKK0xpYnJhcnkKKy0tLS0tLS0KKworLSBJc3N1ZSAjNDMzMTogQWRkZWQgZnVuY3Rvb2xzLnBhcnRpYWxtZXRob2QgKEluaXRpYWwgcGF0Y2ggYnkgQWxvbiBIb3JldikKKworLSBJc3N1ZSAjMTM0NjE6IEZpeCBhIGNyYXNoIGluIHRoZSBUZXh0SU9XcmFwcGVyLnRlbGwgbWV0aG9kIG9uIDY0LWJpdAorICBwbGF0Zm9ybXMuICBQYXRjaCBieSBZb2dlc2ggQ2hhdWRoYXJpLgorCistIElzc3VlICMxODY4MTogRml4IGEgTmFtZUVycm9yIGluIGltcG9ydGxpYi5yZWxvYWQoKSAobm90aWNlZCBieSBXZWl6aGFvIExpKS4KKworLSBJc3N1ZSAjMTQzMjM6IEV4cGFuZGVkIHRoZSBudW1iZXIgb2YgZGlnaXRzIGluIHRoZSBjb2VmZmljaWVudHMgZm9yIHRoZQorICBSR0IgLS0gWUlRIGNvbnZlcnNpb25zIHNvIHRoYXQgdGhleSBtYXRjaCB0aGUgRkNDIE5UU0MgdmVyc2lvbnMuCisKIC0gSXNzdWUgIzE3OTk4OiBGaXggYW4gaW50ZXJuYWwgZXJyb3IgaW4gcmVndWxhciBleHByZXNzaW9uIGVuZ2luZS4KIAogLSBJc3N1ZSAjMTc1NTc6IEZpeCBvcy5nZXRncm91cHMoKSB0byB3b3JrIHdpdGggdGhlIG1vZGlmaWVkIGJlaGF2aW9yIG9mCiAgIGdldGdyb3VwcygyKSBvbiBPUyBYIDEwLjguICBPcmlnaW5hbCBwYXRjaCBieSBNYXRldXN6IExlbmlrLgogCistIElzc3VlICMxODYwODogQXZvaWQga2VlcGluZyBhIHN0cm9uZyByZWZlcmVuY2UgdG8gdGhlIGxvY2FsZSBtb2R1bGUKKyAgaW5zaWRlIHRoZSBfaW8gbW9kdWxlLgorCistIElzc3VlICMxODYxOTogRml4IGF0ZXhpdCBsZWFraW5nIGNhbGxiYWNrcyByZWdpc3RlcmVkIGZyb20gc3ViLWludGVycHJldGVycywKKyAgYW5kIG1ha2UgaXQgR0MtYXdhcmUuCisKKy0gSXNzdWUgIzE1Njk5OiBUaGUgcmVhZGxpbmUgbW9kdWxlIG5vdyB1c2VzIFBFUCAzMTIxLXN0eWxlIG1vZHVsZQorICBpbml0aWFsaXphdGlvbiwgc28gYXMgdG8gcmVjbGFpbSBhbGxvY2F0ZWQgcmVzb3VyY2VzIChQeXRob24gY2FsbGJhY2tzKQorICBhdCBzaHV0ZG93bi4gIE9yaWdpbmFsIHBhdGNoIGJ5IFJvYmluIFNjaHJlaWJlci4KKworLSBJc3N1ZSAjMTc2MTY6IHdhdmUub3BlbiBub3cgc3VwcG9ydHMgdGhlIGNvbnRleHQgbWFuYWdlbWVudCBwcm90b2NvbC4KKwogLSBJc3N1ZSAjMTg1OTk6IEZpeCBuYW1lIGF0dHJpYnV0ZSBvZiBfc2hhMS5zaGExKCkgb2JqZWN0LiBJdCBub3cgcmV0dXJucwogICAnU0hBMScgaW5zdGVhZCBvZiAnU0hBJy4KIAorLSBJc3N1ZSAjMTMyNjY6IEFkZGVkIGluc3BlY3QudW53cmFwIHRvIGVhc2lseSB1bnJhdmVsIF9fd3JhcHBlZF9fIGNoYWlucworICAoaW5pdGlhbCBwYXRjaCBieSBEYW5pZWwgVXJiYW4gYW5kIEFhcm9uIElsZXMpCisKIC0gSXNzdWUgIzE4NTYxOiBTa2lwIG5hbWUgaW4gY3R5cGVzJyBfYnVpbGRfY2FsbGFyZ3MoKSBpZiBuYW1lIGlzIE5VTEwuCiAKIC0gSXNzdWUgIzE4NTU5OiBGaXggTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIGVycm9yIGluIF9waWNrbGUgbW9kdWxlCiAKLS0gSXNzdWUgIzE4NTU2OiBDaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgUHlVbmljb2RlX0FzV2lkZUNoYXIoKSBjYWxsIGluCi0gIGN0eXBlcycgVV9zZXQoKS4KKy0gSXNzdWUgIzE4NTU2OiBDaGVjayB0aGUgcmV0dXJuIHR5cGUgb2YgUHlVbmljb2RlX0FzV2lkZUNoYXIoKSBpbiBjdHlwZSdzCisgIFVfc2V0KCkuCisKKy0gSXNzdWUgIzE3ODE4OiBhaWZjLmdldHBhcmFtcyBub3cgcmV0dXJucyBhIG5hbWVkdHVwbGUuCiAKIC0gSXNzdWUgIzE4NTQ5OiBFbGltaW5hdGUgZGVhZCBjb2RlIGluIHNvY2tldF9udG9obCgpCiAKKy0gSXNzdWUgIzE4NTMwOiBSZW1vdmUgYWRkaXRpb25hbCBzdGF0IGNhbGwgZnJvbSBwb3NpeHBhdGguaXNtb3VudC4KKyAgUGF0Y2ggYnkgQWxleCBHYXlub3IuCisKIC0gSXNzdWUgIzE4NTE0OiBGaXggdW5yZWFjaGFibGUgUHlfREVDUkVGKCkgY2FsbCBpbiBQeUNEYXRhX0Zyb21CYXNlT2JqKCkKIAorLSBJc3N1ZSAjOTE3NzogQ2FsbGluZyByZWFkKCkgb3Igd3JpdGUoKSBub3cgcmFpc2VzIFZhbHVlRXJyb3IsIG5vdAorICBBdHRyaWJ1dGVFcnJvciwgb24gYSBjbG9zZWQgU1NMIHNvY2tldC4gIFBhdGNoIGJ5IFNlbmtvIFJhc2ljLgorCiAtIElzc3VlICMxODUxMzogRml4IGJlaGF2aW91ciBvZiBjbWF0aC5yZWN0IHcuci50LiBzaWduZWQgemVyb3Mgb24gT1MgWCAxMC44ICsKICAgZ2NjLgogCistIElzc3VlICMxODQ3OTogQ2hhbmdlZCB2ZW52IEFjdGl2YXRlLnBzMSB0byBtYWtlIGRlYWN0aXZhdGUgYSBmdW5jdGlvbiwgYW5kCisgIHJlbW92ZWQgRGVhY3RpdmF0ZS5wczEuCisKIC0gSXNzdWUgIzE4NDgwOiBBZGQgbWlzc2luZyBjYWxsIHRvIFB5VHlwZV9SZWFkeSB0byB0aGUgX2VsZW1lbnR0cmVlIGV4dGVuc2lvbi4KIAogLSBJc3N1ZSAjMTc3Nzg6IEZpeCB0ZXN0IGRpc2NvdmVyeSBmb3IgdGVzdF9tdWx0aXByb2Nlc3NpbmcuIChQYXRjaCBieQogICBaYWNoYXJ5IFdhcmUuKQogCistIElzc3VlICMxODM5MzogVGhlIHByaXZhdGUgbW9kdWxlIF9nZXN0YWx0IGFuZCBwcml2YXRlIGZ1bmN0aW9ucworICBwbGF0Zm9ybS5fbWFjX3Zlcl9nZXN0YWx0LCBwbGF0Zm9ybS5fbWFjX3Zlcl9sb29rdXAgYW5kCisgIHBsYXRmb3JtLl9iY2Qyc3RyIGhhdmUgYmVlbiByZW1vdmVkLiBUaGlzIGRvZXMgbm90IGFmZmVjdCB0aGUgcHVibGljCisgIGludGVyZmFjZSBvZiB0aGUgcGxhdGZvcm0gbW9kdWxlLgorCistIElzc3VlICMxNzQ4MjogZnVuY3Rvb2xzLnVwZGF0ZV93cmFwcGVyIChhbmQgZnVuY3Rvb2xzLndyYXBzKSBub3cgc2V0IHRoZQorICBfX3dyYXBwZWRfXyBhdHRyaWJ1dGUgY29ycmVjdGx5IGV2ZW4gaWYgdGhlIHVuZGVybHlpbmcgZnVuY3Rpb24gaGFzIGEKKyAgX193cmFwcGVkX18gYXR0cmlidXRlIHNldC4KKwogLSBJc3N1ZSAjMTg0MzE6IFRoZSBuZXcgZW1haWwgaGVhZGVyIHBhcnNlciBub3cgZGVjb2RlcyBSRkMyMDQ3IGVuY29kZWQgd29yZHMKICAgaW4gc3RydWN0dXJlZCBoZWFkZXJzLgogCkBAIC0xMTM2LDExICs0Nzg1LDE5IEBACiAtIElzc3VlICMxODEwMTogVGNsLnNwbGl0KCkgbm93IHByb2Nlc3Mgc3RyaW5ncyBuZXN0ZWQgaW4gYSB0dXBsZSBhcyBpdAogICBkbyB3aXRoIGJ5dGUgc3RyaW5ncy4KIAorLSBJc3N1ZSAjMTgxMTY6IGdldHBhc3Mgd2FzIGFsd2F5cyBnZXR0aW5nIGFuIGVycm9yIHdoZW4gdGVzdGluZyAvZGV2L3R0eSwKKyAgYW5kIHRodXMgd2FzIGFsd2F5cyBmYWxsaW5nIGJhY2sgdG8gc3RkaW4sIGFuZCB3b3VsZCB0aGVuIHJhaXNlIGFuIGV4Y2VwdGlvbgorICBpZiBzdGRpbiBjb3VsZCBub3QgYmUgdXNlZCAoc3VjaCBhcyAvZGV2L251bGwpLiAgSXQgYWxzbyBsZWFrZWQgYW4gb3BlbiBmaWxlLgorICBBbGwgb2YgdGhlc2UgaXNzdWVzIGFyZSBub3cgZml4ZWQuCisKIC0gSXNzdWUgIzE3MTk4OiBGaXggYSBOYW1lRXJyb3IgaW4gdGhlIGRibSBtb2R1bGUuICBQYXRjaCBieSBWYWxlbnRpbmEKICAgTXVraGFtZWR6aGFub3ZhLgogCiAtIElzc3VlICMxODAxMzogRml4IGNnaS5GaWVsZFN0b3JhZ2UgdG8gcGFyc2UgdGhlIFczQyBzYW1wbGUgZm9ybS4KIAorLSBJc3N1ZSAjMTgwMjA6IGltcHJvdmUgaHRtbC5lc2NhcGUgc3BlZWQgYnkgYW4gb3JkZXIgb2YgbWFnbml0dWRlLgorICBQYXRjaCBieSBNYXR0IEJyeWFudC4KKwogLSBJc3N1ZSAjMTgzNDc6IEVsZW1lbnRUcmVlJ3MgaHRtbCBzZXJpYWxpemVyIG5vdyBwcmVzZXJ2ZXMgdGhlIGNhc2Ugb2YKICAgY2xvc2luZyB0YWdzLgogCkBAIC0xMTU1LDYgKzQ4MTIsOSBAQAogLSBJc3N1ZSAjMTgzMzk6IE5lZ2F0aXZlIGludHMga2V5cyBpbiB1bnBpY2tsZXIubWVtbyBkaWN0IG5vIGxvbmdlciBjYXVzZSBhCiAgIHNlZ2ZhdWx0IGluc2lkZSB0aGUgX3BpY2tsZSBDIGV4dGVuc2lvbi4KIAorLSBJc3N1ZSAjMTgyNDA6IFRoZSBITUFDIG1vZHVsZSBpcyBubyBsb25nZXIgcmVzdHJpY3RlZCB0byBieXRlcyBhbmQgYWNjZXB0cworICBhbnkgYnl0ZXMtbGlrZSBvYmplY3QsIGUuZy4gbWVtb3J5dmlldy4gT3JpZ2luYWwgcGF0Y2ggYnkgSm9uYXMgQm9yZ3N0csO2bS4KKwogLSBJc3N1ZSAjMTgyMjQ6IFJlbW92ZWQgcHlkb2Mgc2NyaXB0IGZyb20gY3JlYXRlZCB2ZW52LCBhcyBpdCBjYXVzZXMgcHJvYmxlbXMKICAgb24gV2luZG93cyBhbmQgYWRkcyBubyB2YWx1ZSBvdmVyIGFuZCBhYm92ZSBweXRob24gLW0gcHlkb2MgLi4uCiAKQEAgLTExNjUsMzEgKzQ4MjUsOTMgQEAKIC0gSXNzdWUgIzE0MzYwOiBlbmNvZGVfcXVvcHJpIGNhbiBub3cgYmUgc3VjY2Vzc2Z1bGx5IHVzZWQgYXMgYW4gZW5jb2RlcgogICB3aGVuIGNvbnN0cnVjdGluZyBhIE1JTUVBcHBsaWNhdGlvbiBvYmplY3QuCiAKKy0gSXNzdWUgIzExMzkwOiBBZGQgLW8gYW5kIC1mIGNvbW1hbmQgbGluZSBvcHRpb25zIHRvIHRoZSBkb2N0ZXN0IENMSSB0bworICBzcGVjaWZ5IGRvY3Rlc3Qgb3B0aW9ucyAoYW5kIGNvbnZlcnQgaXQgdG8gdXNpbmcgYXJncGFyc2UpLgorCiAtIElzc3VlICMxODEzNTogc3NsLlNTTFNvY2tldC53cml0ZSgpIG5vdyByYWlzZXMgYW4gT3ZlcmZsb3dFcnJvciBpZiB0aGUgaW5wdXQKICAgc3RyaW5nIGluIGxvbmdlciB0aGFuIDIgZ2lnYWJ5dGVzLCBhbmQgc3NsLlNTTENvbnRleHQubG9hZF9jZXJ0X2NoYWluKCkKICAgcmFpc2VzIGEgVmFsdWVFcnJvciBpZiB0aGUgcGFzc3dvcmQgaXMgbG9uZ2VyIHRoYW4gMiBnaWdhYnl0ZXMuIFRoZSBzc2wKICAgbW9kdWxlIGRvZXMgbm90IHN1cHBvcnQgcGFydGlhbCB3cml0ZS4KIAorLSBJc3N1ZSAjMTEwMTY6IEFkZCBDIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdGF0IG1vZHVsZSBhcyBfc3RhdC4KKwogLSBJc3N1ZSAjMTgyNDg6IEZpeCBsaWJmZmkgYnVpbGQgb24gQUlYLgogCiAtIElzc3VlICMxODI1OTogRGVjbGFyZSBzZXRob3N0bmFtZSBpbiBzb2NrZXRtb2R1bGUuYyBmb3IgQUlYCiAKKy0gSXNzdWUgIzE4MTQ3OiBBZGQgZGlhZ25vc3RpYyBmdW5jdGlvbnMgdG8gc3NsLlNTTENvbnRleHQoKS4gZ2V0X2NhX2xpc3QoKQorICBsaXN0cyBhbGwgbG9hZGVkIENBIGNlcnRpZmljYXRlcyBhbmQgY2VydF9zdG9yZV9zdGF0cygpIHJldHVybnMgYW1vdW50IG9mCisgIGxvYWRlZCBYLjUwOSBjZXJ0cywgWC41MDkgQ0EgY2VydHMgYW5kIENSTHMuCisKIC0gSXNzdWUgIzE4MTY3OiBjZ2kuRmllbGRTdG9yYWdlIG5vIGxvbmdlciBmYWlscyB0byBoYW5kbGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YQotICB3aGVuIFxyXG4gYXBwZWFycyBhdCBlbmQgb2YgNjU1MzUgYnl0ZXMgd2l0aG91dCBvdGhlciBuZXdsaW5lcy4KKyAgd2hlbiBgYFxyXG5gYCBhcHBlYXJzIGF0IGVuZCBvZiA2NTUzNSBieXRlcyB3aXRob3V0IG90aGVyIG5ld2xpbmVzLgorCistIElzc3VlICMxODA3NjogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLmRlY29kZV9zb3VyY2UoKS4KKworLSBJc3N1ZSAjMTgzNTc6IGFkZCB0ZXN0cyBmb3IgZGljdHZpZXcgc2V0IGRpZmZlcmVuY2UuCisgIFBhdGNoIGJ5IEZyYXNlciBUd2VlZGFsZS4KKworLSBpbXBvcnRsaWIuYWJjLlNvdXJjZUxvYWRlci5nZXRfc291cmNlKCkgbm8gbG9uZ2VyIGNoYW5nZXMgU3ludGF4RXJyb3Igb3IKKyAgVW5pY29kZURlY29kZUVycm9yIGludG8gSW1wb3J0RXJyb3IuCisKKy0gSXNzdWUgIzE4MDU4LCAxODA1NzogTWFrZSB0aGUgbmFtZXNwYWNlIHBhY2thZ2UgbG9hZGVyIG1lZXQgdGhlCisgIGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlciBBQkMsIGFsbG93aW5nIGZvciBuYW1lc3BhY2UgcGFja2FnZXMgdG8gd29yayB3aXRoCisgIHJ1bnB5LgorCistIElzc3VlICMxNzE3NzogVGhlIGltcCBtb2R1bGUgaXMgcGVuZGluZyBkZXByZWNhdGlvbi4KIAogLSBzdWJwcm9jZXNzOiBQcmV2ZW50IGEgcG9zc2libGUgZG91YmxlIGNsb3NlIG9mIHBhcmVudCBwaXBlIGZkcyB3aGVuIHRoZQogICBzdWJwcm9jZXNzIGV4ZWMgcnVucyBpbnRvIGFuIGVycm9yLiAgUHJldmVudCBhIHJlZ3VsYXIgbXVsdGktY2xvc2Ugb2YgdGhlCiAgIC9kZXYvbnVsbCBmZCB3aGVuIGFueSBvZiBzdGRpbiwgc3Rkb3V0IGFuZCBzdGRlcnIgd2FzIHNldCB0byBERVZOVUxMLgogCistIElzc3VlICMxODE5NDogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlKCkgYW5kCisgIHNvdXJjZV9mcm9tX2NhY2hlKCkgd2hpbGUgZG9jdW1lbnRpbmcgdGhlIGVxdWl2YWxlbnQgZnVuY3Rpb25zIGluIGltcCBhcworICBkZXByZWNhdGVkLgorCistIElzc3VlICMxNzkwNzogRG9jdW1lbnQgaW1wLm5ld19tb2R1bGUoKSBhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZgorICB0eXBlcy5Nb2R1bGVUeXBlLgorCistIElzc3VlICMxODE5MjogSW50cm9kdWNlIGltcG9ydGxpYi51dGlsLk1BR0lDX05VTUJFUiBhbmQgZG9jdW1lbnQgYXMgZGVwcmVjYXRlZAorICBpbXAuZ2V0X21hZ2ljKCkuCisKKy0gSXNzdWUgIzE4MTQ5OiBBZGQgZmlsZWNtcC5jbGVhcl9jYWNoZSgpIHRvIG1hbnVhbGx5IGNsZWFyIHRoZSBmaWxlY21wIGNhY2hlLgorICBQYXRjaCBieSBNYXJrIExldml0dAorCistIElzc3VlICMxODE5MzogQWRkIGltcG9ydGxpYi5yZWxvYWQoKS4KKworLSBJc3N1ZSAjMTgxNTc6IFN0b3AgdXNpbmcgaW1wLmxvYWRfbW9kdWxlKCkgaW4gcHlkb2MuCisKIC0gSXNzdWUgIzE2MTAyOiBNYWtlIHV1aWQuX25ldGJpb3NfZ2V0bm9kZSgpIHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCiAKKy0gSXNzdWUgIzE3MTM0OiBBZGQgc3NsLmVudW1fY2VydF9zdG9yZSgpIGFzIGludGVyZmFjZSB0byBXaW5kb3dzJyBjZXJ0IHN0b3JlLgorCistIElzc3VlICMxODE0MzogSW1wbGVtZW50IHNzbC5nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMoKSBpbiBvcmRlciB0byBkZWJ1ZworICB0aGUgZGVmYXVsdCBsb2NhdGlvbnMgZm9yIGNhZmlsZSBhbmQgY2FwYXRoLgorCistIElzc3VlICMxNzMxNDogTW92ZSBtdWx0aXByb2Nlc3NpbmcuZm9ya2luZyBvdmVyIHRvIGltcG9ydGxpYi4KKworLSBJc3N1ZSAjMTE5NTk6IFNNVFBTZXJ2ZXIgYW5kIFNNVFBDaGFubmVsIG5vdyB0YWtlIGFuIG9wdGlvbmFsIG1hcCwgdXNlIG9mCisgIHdoaWNoIGF2b2lkcyBhZmZlY3RpbmcgZ2xvYmFsIHN0YXRlLgorCiAtIElzc3VlICMxODEwOTogb3MudW5hbWUoKSBub3cgZGVjb2RlcyBmaWVsZHMgZnJvbSB0aGUgbG9jYWxlIGVuY29kaW5nLCBhbmQKICAgc29ja2V0LmdldGhvc3RuYW1lKCkgbm93IGRlY29kZXMgdGhlIGhvc3RuYW1lIGZyb20gdGhlIGxvY2FsZSBlbmNvZGluZywKICAgaW5zdGVhZCBvZiB1c2luZyB0aGUgVVRGLTggZW5jb2RpbmcgaW4gc3RyaWN0IG1vZGUuCiAKKy0gSXNzdWUgIzE4MDg5OiBJbXBsZW1lbnQgaW1wb3J0bGliLmFiYy5JbnNwZWN0TG9hZGVyLmxvYWRfbW9kdWxlLgorCistIElzc3VlICMxODA4ODogSW50cm9kdWNlIGltcG9ydGxpYi5hYmMuTG9hZGVyLmluaXRfbW9kdWxlX2F0dHJzIGZvciBzZXR0aW5nCisgIG1vZHVsZSBhdHRyaWJ1dGVzLiBMZWFkcyB0byB0aGUgcGVuZGluZyBkZXByZWNhdGlvbiBvZgorICBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlci4KKwogLSBJc3N1ZSAjMTc0MDM6IHVybGxpYi5wYXJzZS5yb2JvdHBhcnNlciBub3JtYWxpemVzIHRoZSB1cmxzIGJlZm9yZSBhZGRpbmcgdG8KICAgcnVsZWxpbmUuIFRoaXMgaGVscHMgaW4gaGFuZGxpbmcgY2VydGFpbiB0eXBlcyBpbnZhbGlkIHVybHMgaW4gYSBjb25zZXJ2YXRpdmUKLSAgbWFubmVyLgorICBtYW5uZXIuIFBhdGNoIGNvbnRyaWJ1dGVkIGJ5IE1oZXIgTW92c2lzeWFuLgorCistIElzc3VlICMxODA3MDogSGF2ZSBpbXBvcnRsaWIudXRpbC5tb2R1bGVfZm9yX2xvYWRlcigpIHNldCBhdHRyaWJ1dGVzCisgIHVuY29uZGl0aW9uYWxseSBpbiBvcmRlciB0byBwcm9wZXJseSBzdXBwb3J0IHJlbG9hZGluZy4KKworLSBBZGRlZCBpbXBvcnRsaWIudXRpbC5tb2R1bGVfdG9fbG9hZCB0byByZXR1cm4gYSBjb250ZXh0IG1hbmFnZXIgdG8gcHJvdmlkZSB0aGUKKyAgcHJvcGVyIG1vZHVsZSBvYmplY3QgdG8gbG9hZC4KIAogLSBJc3N1ZSAjMTgwMjU6IEZpeGVkIGEgc2VnZmF1bHQgaW4gaW8uQnVmZmVyZWRJT0Jhc2UucmVhZGludG8oKSB3aGVuIHJhdwogICBzdHJlYW0ncyByZWFkKCkgcmV0dXJucyBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLgpAQCAtMTE5OCwyMCArNDkyMCw0MiBAQAogICBiaW5hc2NpaS5FcnJvciBpZiB0aGVyZSBhcmUgbm9uLWIzMi1hbHBoYWJldCBjaGFyYWN0ZXJzIHByZXNlbnQgaW4gdGhlIGlucHV0CiAgIHN0cmluZywgaW5zdGVhZCBvZiBhIFR5cGVFcnJvci4KIAotLSBJc3N1ZSAjMTM3NzI6IFJlc3RvcmVkIGRpcmVjdG9yeSBkZXRlY3Rpb24gb2YgdGFyZ2V0cyBpbiBgYG9zLnN5bWxpbmtgYCBvbgotICBXaW5kb3dzLCB3aGljaCB3YXMgdGVtcG9yYXJpbHkgcmVtb3ZlZCBpbiBQeXRob24gMy4yLjMgZHVlIHRvIGFuIGluY29tcGxldGUKLSAgaW1wbGVtZW50YXRpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBub3cgd29ya3MgZXZlbiBpZiB0aGUgc3ltbGluayBpcyBjcmVhdGVkCi0gIGluIGEgbG9jYXRpb24gb3RoZXIgdGhhbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCistIElzc3VlICMxODA3MjogSW1wbGVtZW50IGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5nZXRfY29kZSgpIGFuZAorICBpbXBvcnRsaWIuYWJjLkV4ZWN1dGlvbkxvYWRlci5nZXRfY29kZSgpLgogCi0tIElzc3VlICMxNjk4NjogRWxlbWVudFRyZWUgbm93IGNvcnJlY3RseSBwYXJzZXMgYSBzdHJpbmcgaW5wdXQgbm90IG9ubHkgd2hlbgotICBhbiBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgVVRGLTggb3IgVVMtQVNDSUkuCistIElzc3VlICM4MjQwOiBTZXQgdGhlIFNTTF9NT0RFX0FDQ0VQVF9NT1ZJTkdfV1JJVEVfQlVGRkVSIGZsYWcgb24gU1NMCisgIHNvY2tldHMuCisKKy0gSXNzdWUgIzE3MjY5OiBXb3JrYXJvdW5kIGZvciBzb2NrZXQuZ2V0YWRkcmluZm8gY3Jhc2ggb24gTWFjT1MgWAorICB3aXRoIHBvcnQgTm9uZSBvciAiMCIgYW5kIGZsYWdzIEFJX05VTUVSSUNTRVJWLgorCistIElzc3VlICMxNjk4NjogRWxlbWVudFRyZWUgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIHN0cmluZyBpbnB1dCB3aGVuIHRoZQorICBpbnRlcm5hbCBYTUwgZW5jb2RpbmcgaXMgbm90IFVURi04IG9yIFVTLUFTQ0lJLgorCistIElzc3VlICMxNzk5Njogc29ja2V0IG1vZHVsZSBub3cgZXhwb3NlcyBBRl9MSU5LIGNvbnN0YW50IG9uIEJTRCBhbmQgT1NYLgorCistIElzc3VlICMxNzkwMDogQWxsb3dlZCBwaWNrbGluZyBvZiByZWN1cnNpdmUgT3JkZXJlZERpY3RzLiAgRGVjcmVhc2VkIHBpY2tsZWQKKyAgc2l6ZSBhbmQgcGlja2xpbmcgdGltZS4KKworLSBJc3N1ZSAjMTc5MTQ6IEFkZCBvcy5jcHVfY291bnQoKS4gUGF0Y2ggYnkgWW9nZXNoIENoYXVkaGFyaSwgYmFzZWQgb24gYW4KKyAgaW5pdGlhbCBwYXRjaCBieSBUcmVudCBOZWxzb24uCiAKIC0gSXNzdWUgIzE3ODEyOiBGaXhlZCBxdWFkcmF0aWMgY29tcGxleGl0eSBvZiBiYXNlNjQuYjMyZW5jb2RlKCkuCisgIE9wdGltaXplIGJhc2U2NC5iMzJlbmNvZGUoKSBhbmQgYmFzZTY0LmIzMmRlY29kZSgpIChzcGVlZCB1cCB0byAzeCkuCiAKIC0gSXNzdWUgIzE3OTgwOiBGaXggcG9zc2libGUgYWJ1c2Ugb2Ygc3NsLm1hdGNoX2hvc3RuYW1lKCkgZm9yIGRlbmlhbCBvZgogICBzZXJ2aWNlIHVzaW5nIGNlcnRpZmljYXRlcyB3aXRoIG1hbnkgd2lsZGNhcmRzIChDVkUtMjAxMy0yMDk5KS4KIAotLSBJc3N1ZSAjMTc5ODE6IENsb3NlZCBzb2NrZXQgb24gZXJyb3IgaW4gU3lzTG9nSGFuZGxlci4KKy0gSXNzdWUgIzE1NzU4OiBGaXggRmlsZUlPLnJlYWRhbGwoKSBzbyBpdCBubyBsb25nZXIgaGFzIE8obioqMikgY29tcGxleGl0eS4KKworLSBJc3N1ZSAjMTQ1OTY6IFRoZSBzdHJ1Y3QuU3RydWN0KCkgb2JqZWN0cyBub3cgdXNlIGEgbW9yZSBjb21wYWN0CisgIGltcGxlbWVudGF0aW9uLgorCistIElzc3VlICMxNzk4MTogbG9nZ2luZydzIFN5c0xvZ0hhbmRsZXIgbm93IGNsb3NlcyB0aGUgc29ja2V0IHdoZW4gaXQgY2F0Y2hlcworICBzb2NrZXQgT1NFcnJvcnMuCisKKy0gSXNzdWUgIzE3OTY0OiBGaXggb3Muc3lzY29uZigpOiB0aGUgcmV0dXJuIHR5cGUgb2YgdGhlIEMgc3lzY29uZigpIGZ1bmN0aW9uCisgIGlzIGxvbmcsIG5vdCBpbnQuCiAKIC0gRml4IHR5cG9zIGluIHRoZSBtdWx0aXByb2Nlc3NpbmcgbW9kdWxlLgogCkBAIC0xMjE5LDEwICs0OTYzLDE2MyBAQAogCiAtIElzc3VlICMxNzk2ODogRml4IG1lbW9yeSBsZWFrIGluIG9zLmxpc3R4YXR0cigpLgogCi0tIElzc3VlICMxNzI2OTogV29ya2Fyb3VuZCBmb3Igc29ja2V0LmdldGFkZHJpbmZvIGNyYXNoIG9uIE1hY09TIFgKLSAgd2l0aCBwb3J0IE5vbmUgb3IgIjAiIGFuZCBmbGFncyBBSV9OVU1FUklDU0VSVi4KKy0gSXNzdWUgIzE3NjA2OiBGaXhlZCBzdXBwb3J0IG9mIGVuY29kZWQgYnl0ZSBzdHJpbmdzIGluIHRoZSBYTUxHZW5lcmF0b3IKKyAgY2hhcmFjdGVycygpIGFuZCBpZ25vcmFibGVXaGl0ZXNwYWNlKCkgbWV0aG9kcy4gIE9yaWdpbmFsIHBhdGNoIGJ5IFNlYmFzdGlhbgorICBPcnRpeiBWYXNxdWV6LgogCi0tIElzc3VlICMxODY5ODogRW5zdXJlIGltcC5yZWxvYWQoKSByZXR1cm5zIHRoZSBtb2R1bGUgb3V0IG9mIHN5cy5tb2R1bGVzLgorLSBJc3N1ZSAjMTc3MzI6IElnbm9yZSBkaXN0dXRpbHMuY2ZnIG9wdGlvbnMgcGVydGFpbmluZyB0byBpbnN0YWxsIHBhdGhzIGlmIGEKKyAgdmlydHVhbCBlbnZpcm9ubWVudCBpcyBhY3RpdmUuCisKKy0gSXNzdWUgIzE3OTE1OiBGaXggaW50ZXJvcGVyYWJpbGl0eSBvZiB4bWwuc2F4IHdpdGggZmlsZSBvYmplY3RzIHJldHVybmVkIGJ5CisgIGNvZGVjcy5vcGVuKCkuCisKKy0gSXNzdWUgIzE2NjAxOiBSZXN0YXJ0aW5nIGl0ZXJhdGlvbiBvdmVyIHRhcmZpbGUgcmVhbGx5IHJlc3RhcnRzIHJhdGhlcgorICB0aGFuIGNvbnRpbnVpbmcgZnJvbSB3aGVyZSBpdCBsZWZ0IG9mZi4gIFBhdGNoIGJ5IE1pY2hhZWwgQmlydHdlbGwuCisKKy0gSXNzdWUgIzE3Mjg5OiBUaGUgcmVhZGxpbmUgbW9kdWxlIG5vdyBwbGF5cyBuaWNlciB3aXRoIGV4dGVybmFsIG1vZHVsZXMKKyAgb3IgYXBwbGljYXRpb25zIGNoYW5naW5nIHRoZSBybF9jb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzIGdsb2JhbAorICB2YXJpYWJsZS4gIEluaXRpYWwgcGF0Y2ggYnkgQnJhZGxleSBGcm9laGxlLgorCistIElzc3VlICMxMjE4MTogc2VsZWN0IG1vZHVsZTogRml4IHN0cnVjdCBrZXZlbnQgZGVmaW5pdGlvbiBvbiBPcGVuQlNEIDY0LWJpdAorICBwbGF0Zm9ybXMuIFBhdGNoIGJ5IEZlZGVyaWNvIFNjaHdpbmR0LgorCistIElzc3VlICMxMTgxNjogbXVsdGlwbGUgaW1wcm92ZW1lbnRzIHRvIHRoZSBkaXMgbW9kdWxlOiBnZXRfaW5zdHJ1Y3Rpb25zCisgIGdlbmVyYXRvciwgYWJpbGl0eSB0byByZWRpcmVjdCBvdXRwdXQgdG8gYSBmaWxlLCBCeXRlY29kZSBhbmQgSW5zdHJ1Y3Rpb24KKyAgYWJzdHJhY3Rpb25zLiBQYXRjaCBieSBOaWNrIENvZ2hsYW4sIFJ5YW4gS2VsbHkgYW5kIFRob21hcyBLbHV5dmVyLgorCistIElzc3VlICMxMzgzMTogRW1iZWQgc3RyaW5naWZpY2F0aW9uIG9mIHJlbW90ZSB0cmFjZWJhY2sgaW4gbG9jYWwKKyAgdHJhY2ViYWNrIHJhaXNlZCB3aGVuIHBvb2wgdGFzayByYWlzZXMgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICMxNTUyODogQWRkIHdlYWtyZWYuZmluYWxpemUgdG8gc3VwcG9ydCBmaW5hbGl6YXRpb24gdXNpbmcKKyAgd2Vha3JlZiBjYWxsYmFja3MuCisKKy0gSXNzdWUgIzE0MTczOiBBdm9pZCBjcmFzaGluZyB3aGVuIHJlYWRpbmcgYSBzaWduYWwgaGFuZGxlciBkdXJpbmcKKyAgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCisKKy0gSXNzdWUgIzE1OTAyOiBGaXggaW1wLmxvYWRfbW9kdWxlKCkgYWNjZXB0aW5nIE5vbmUgYXMgYSBmaWxlIHdoZW4gbG9hZGluZyBhbgorICBleHRlbnNpb24gbW9kdWxlLgorCistIElzc3VlICMxMzcyMTogU1NMU29ja2V0LmdldHBlZXJjZXJ0KCkgYW5kIFNTTFNvY2tldC5kb19oYW5kc2hha2UoKSBub3cKKyAgcmFpc2UgYW4gT1NFcnJvciB3aXRoIEVOT1RDT05OLCBpbnN0ZWFkIG9mIGFuIEF0dHJpYnV0ZUVycm9yLCB3aGVuIHRoZQorICBTU0xTb2NrZXQgaXMgbm90IGNvbm5lY3RlZC4KKworLSBJc3N1ZSAjMTQ2Nzk6IGFkZCBhbiBfX2FsbF9fICh0aGF0IGNvbnRhaW5zIG9ubHkgSFRNTFBhcnNlcikgdG8gaHRtbC5wYXJzZXIuCisKKy0gSXNzdWUgIzE3ODAyOiBGaXggYW4gVW5ib3VuZExvY2FsRXJyb3IgaW4gaHRtbC5wYXJzZXIuICBJbml0aWFsIHRlc3RzIGJ5CisgIFRob21hcyBCYXJsb3cuCisKKy0gSXNzdWUgIzE3MzU4OiBNb2R1bGVzIGxvYWRlZCBieSBpbXAubG9hZF9zb3VyY2UoKSBhbmQgbG9hZF9jb21waWxlZCgpIChhbmQgYnkKKyAgZXh0ZW50aW9uIGxvYWRfbW9kdWxlKCkpIG5vdyBoYXZlIGEgYmV0dGVyIGNoYW5jZSBvZiB3b3JraW5nIHdoZW4gcmVsb2FkZWQuCisKKy0gSXNzdWUgIzE3ODA0OiBOZXcgZnVuY3Rpb24gYGBzdHJ1Y3QuaXRlcl91bnBhY2tgYCBhbGxvd3MgZm9yIHN0cmVhbWluZworICBzdHJ1Y3QgdW5wYWNraW5nLgorCistIElzc3VlICMxNzgzMDogV2hlbiBrZXl3b3JkLnB5IGlzIHVzZWQgdG8gdXBkYXRlIGEga2V5d29yZCBmaWxlLCBpdCBub3cKKyAgcHJlc2VydmVzIHRoZSBsaW5lIGVuZGluZ3Mgb2YgdGhlIG9yaWdpbmFsIGZpbGUuCisKKy0gSXNzdWUgIzE3MjcyOiBNYWtpbmcgdGhlIHVybGxpYi5yZXF1ZXN0J3MgUmVxdWVzdC5mdWxsX3VybCBhIGRlc2NyaXB0b3IuCisgIEZpeGVzIGJ1Z3Mgd2l0aCBhc3NpZ25tZW50IHRvIGZ1bGxfdXJsLiBQYXRjaCBieSBEZW1pYW4gQnJlY2h0LgorCistIElzc3VlICMxNzM1MzogUGxpc3RsaWIgZW1pdHRlZCBlbXB0eSBkYXRhIHRhZ3Mgd2l0aCBkZWVwbHkgbmVzdGVkIGRhdGFzdHJ1Y3R1cmVzCisKKy0gSXNzdWUgIzExNzE0OiBVc2UgJ3dpdGgnIHN0YXRlbWVudHMgdG8gYXNzdXJlIGEgU2VtYXBob3JlIHJlbGVhc2VzIGEKKyAgY29uZGl0aW9uIHZhcmlhYmxlLiAgT3JpZ2luYWwgcGF0Y2ggYnkgVGhvbWFzIFJhY2hlbC4KKworLSBJc3N1ZSAjMTY2MjQ6IGBzdWJwcm9jZXNzLmNoZWNrX291dHB1dGAgbm93IGFjY2VwdHMgYW4gYGlucHV0YCBhcmd1bWVudCwKKyAgYWxsb3dpbmcgdGhlIHN1YnByb2Nlc3MncyBzdGRpbiB0byBiZSBwcm92aWRlZCBhcyBhIChieXRlKSBzdHJpbmcuCisgIFBhdGNoIGJ5IFphY2sgV2VpbmJlcmcuCisKKy0gSXNzdWUgIzE3Nzk1OiBSZXZlcnRlZCBiYWNrd2FyZHMtaW5jb21wYXRpYmxlIGNoYW5nZSBpbiBTeXNMb2dIYW5kbGVyIHdpdGgKKyAgVW5peCBkb21haW4gc29ja2V0cy4KKworLSBJc3N1ZSAjMTY2OTQ6IEFkZCBhIHB1cmUgUHl0aG9uIGltcGxlbWVudGF0aW9uIG9mIHRoZSBvcGVyYXRvciBtb2R1bGUuCisgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKworLSBJc3N1ZSAjMTExODI6IHJlbW92ZSB0aGUgdW51c2VkIGFuZCB1bmRvY3VtZW50ZWQgcHlkb2MuU2Nhbm5lciBjbGFzcy4KKyAgUGF0Y2ggYnkgTWFydGluIE1vcnJpc29uLgorCistIElzc3VlICMxNzc0MTogQWRkIEVsZW1lbnRUcmVlLlhNTFB1bGxQYXJzZXIsIGFuIGV2ZW50LWRyaXZlbiBwYXJzZXIgZm9yCisgIG5vbi1ibG9ja2luZyBhcHBsaWNhdGlvbnMuCisKKy0gSXNzdWUgIzE3NTU1OiBGaXggRm9ya0F3YXJlVGhyZWFkTG9jayBzbyB0aGF0IHNpemUgb2YgYWZ0ZXIgZm9yaworICByZWdpc3RyeSBkb2VzIG5vdCBncm93IGV4cG9uZW50aWFsbHkgd2l0aCBnZW5lcmF0aW9uIG9mIHByb2Nlc3MuCisKKy0gSXNzdWUgIzE3NzA3OiBmaXggcmVncmVzc2lvbiBpbiBtdWx0aXByb2Nlc3NpbmcuUXVldWUncyBnZXQoKSBtZXRob2Qgd2hlcmUKKyAgaXQgZGlkIG5vdCBibG9jayBmb3Igc2hvcnQgdGltZW91dHMuCisKKy0gSXNzdWUgIzE3NzIwOiBGaXggdGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBwaWNrbGUuVW5waWNrbGVyIHRvIGNvcnJlY3RseQorICBwcm9jZXNzIHRoZSBBUFBFTkRTIG9wY29kZSB3aGVuIGl0IGlzIHVzZWQgb24gbm9uLWxpc3Qgb2JqZWN0cy4KKworLSBJc3N1ZSAjMTcwMTI6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBmYWxscyBiYWNrIHRvIHRoZSBQQVRIIGVudmlyb25tZW50CisgIHZhcmlhYmxlIGlmIGFuIGVtcHR5IHBhdGggYXJndW1lbnQgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTc3MTA6IEZpeCBwaWNrbGUgcmFpc2luZyBhIFN5c3RlbUVycm9yIG9uIGJvZ3VzIGlucHV0LgorCistIElzc3VlICMxNzM0MTogSW5jbHVkZSB0aGUgaW52YWxpZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHJlIGFib3V0CisgIGludmFsaWQgZ3JvdXAgbmFtZXMuCisKKy0gSXNzdWUgIzE3NzAyOiBvcy5lbnZpcm9uIG5vdyByYWlzZXMgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQKKyAgdmFyaWFibGUgbmFtZSAoc3RyIG9uIFVOSVgpLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbmNvZGVkIG5hbWUgKGJ5dGVzIG9uCisgIFVOSVgpLgorCistIElzc3VlICMxNjE2MzogTWFrZSB0aGUgaW1wb3J0bGliIGJhc2VkIHZlcnNpb24gb2YgcGtndXRpbC5pdGVyX2ltcG9ydGVycworICB3b3JrIGZvciBzdWJtb2R1bGVzLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCisKKy0gSXNzdWUgIzE2ODA0OiBGaXggYSBidWcgaW4gdGhlICdzaXRlJyBtb2R1bGUgdGhhdCBjYXVzZWQgcnVubmluZworICAncHl0aG9uIC1TIC1tIHNpdGUnIHRvIGluY29ycmVjdGx5IHRocm93IGFuIGV4Y2VwdGlvbi4KKworLSBJc3N1ZSAjMTU0ODA6IFJlbW92ZSB0aGUgZGVwcmVjYXRlZCBhbmQgdW51c2VkIFRZUEVfSU5UNjQgY29kZSBmcm9tIG1hcnNoYWwuCisgIEluaXRpYWwgcGF0Y2ggYnkgRGFuaWVsIFJpdGkuCisKKy0gSXNzdWUgIzIxMTg6IFNNVFBFeGNlcHRpb24gaXMgbm93IGEgc3ViY2xhc3Mgb2YgT1NFcnJvci4KKworLSBJc3N1ZSAjMTcwMTY6IEdldCByaWQgb2YgcG9zc2libGUgcG9pbnRlciB3cmFwYXJvdW5kcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MKKyAgaW4gdGhlIHJlIG1vZHVsZS4gIFBhdGNoIGJ5IE5pY2tvbGFpIFplbGRvdmljaC4KKworLSBJc3N1ZSAjMTY2NTg6IGFkZCBtaXNzaW5nIHJldHVybiB0byBIVFRQQ29ubmVjdGlvbi5zZW5kKCkuCisgIFBhdGNoIGJ5IEplZmYgS251cHAuCisKKy0gSXNzdWUgIzk1NTY6IHRoZSBsb2dnaW5nIHBhY2thZ2Ugbm93IGFsbG93cyBzcGVjaWZ5aW5nIGEgdGltZS1vZi1kYXkgZm9yIGEKKyAgVGltZWRSb3RhdGluZ0ZpbGVIYW5kbGVyIHRvIHJvdGF0ZS4KKworLSBJc3N1ZSAjMTQ5NzE6IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IG5vIGxvbmdlciBnZXRzIGNvbmZ1c2VkIHdoZW4gYSBmdW5jdGlvbgorICBoYXMgYSBkaWZmZXJlbnQgX19uYW1lX18gdGhhbiBpdHMgbmFtZSBpbiB0aGUgVGVzdENhc2UgY2xhc3MgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjMTc0ODc6IFRoZSB3YXZlIGdldHBhcmFtcyBtZXRob2Qgbm93IHJldHVybnMgYSBuYW1lZHR1cGxlIHJhdGhlciB0aGFuCisgIGEgcGxhaW4gdHVwbGUuCisKKy0gSXNzdWUgIzE3Njc1OiBzb2NrZXQgcmVwcigpIHByb3ZpZGVzIGxvY2FsIGFuZCByZW1vdGUgYWRkcmVzc2VzIChpZiBhbnkpLgorICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2xhJworCistIElzc3VlICMxNzA5MzogTWFrZSB0aGUgQUJDcyBpbiBpbXBvcnRsaWIuYWJjIHByb3ZpZGUgZGVmYXVsdCB2YWx1ZXMgb3IgcmFpc2UKKyAgcmVhc29uYWJsZSBleGNlcHRpb25zIGZvciB0aGVpciBtZXRob2RzIHRvIG1ha2UgdGhlbSBtb3JlIGFtZW5hYmxlIHRvIHN1cGVyKCkKKyAgY2FsbHMuCisKKy0gSXNzdWUgIzE3NTY2OiBNYWtlIGltcG9ydGxpYi5hYmMuTG9hZGVyLm1vZHVsZV9yZXByKCkgb3B0aW9uYWwgaW5zdGVhZCBvZiBhbgorICBhYnN0cmFjdG1ldGhvZDsgbm93IGl0IHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yIHNvIGFzIHRvIGJlIGlnbm9yZWQgYnkgZGVmYXVsdC4KKworLSBJc3N1ZSAjMTc2Nzg6IFJlbW92ZSB0aGUgdXNlIG9mIGRlcHJlY2F0ZWQgbWV0aG9kIGluIGh0dHAvY29va2llamFyLnB5IGJ5CisgIGNoYW5naW5nIHRoZSBjYWxsIHRvIGdldF9vcmlnaW5fcmVxX2hvc3QoKSB0byBvcmlnaW5fcmVxX2hvc3QuCisKKy0gSXNzdWUgIzE3NjY2OiBGaXggcmVhZGluZyBnemlwIGZpbGVzIHdpdGggYW4gZXh0cmEgZmllbGQuCisKKy0gSXNzdWUgIzE2NDc1OiBTdXBwb3J0IG9iamVjdCBpbnN0YW5jaW5nLCByZWN1cnNpb24gYW5kIGludGVybmVkIHN0cmluZ3MKKyAgaW4gbWFyc2hhbAorCistIElzc3VlICMxNzUwMjogUHJvY2VzcyBERUZBVUxUIHZhbHVlcyBpbiBtb2NrIHNpZGVfZWZmZWN0IHRoYXQgcmV0dXJucyBpdGVyYXRvci4KKworLSBJc3N1ZSAjMTY3OTU6IE9uIHRoZSBhc3QuYXJndW1lbnRzIG9iamVjdCwgdW5pZnkgdmFyYXJnIHdpdGggdmFyYXJnYW5ub3RhdGlvbgorICBhbmQga3dhcmcgYW5kIGt3YXJnYW5ub3RhdGlvbi4gQ2hhbmdlIHRoZSBjb2x1bW4gb2Zmc2V0IG9mIGFzdC5BdHRyaWJ1dGUgdG8gYmUKKyAgYXQgdGhlIGF0dHJpYnV0ZSBuYW1lLgorCistIElzc3VlICMxNzQzNDogUHJvcGVybHkgcmFpc2UgYSBTeW50YXhFcnJvciB3aGVuIGEgc3RyaW5nIG9jY3VycyBiZXR3ZWVuIGZ1dHVyZQorICBpbXBvcnRzLgorCistIElzc3VlICMxNzExNzogSW1wb3J0IGFuZCBAaW1wb3J0bGliLnV0aWwuc2V0X2xvYWRlciBub3cgc2V0IF9fbG9hZGVyX18gd2hlbgorICBpdCBoYXMgYSB2YWx1ZSBvZiBOb25lIG9yIHRoZSBhdHRyaWJ1dGUgZG9lc24ndCBleGlzdC4KKworLSBJc3N1ZSAjMTcwMzI6IFRoZSAiZ2xvYmFsIiBpbiB0aGUgIk5hbWVFcnJvcjogZ2xvYmFsIG5hbWUgJ3gnIGlzIG5vdCBkZWZpbmVkIgorICBlcnJvciBtZXNzYWdlIGhhcyBiZWVuIHJlbW92ZWQuICBQYXRjaCBieSBSYW0gUmFjaHVtLgogCiAtIElzc3VlICMxODA4MDogV2hlbiBidWlsZGluZyBhIEMgZXh0ZW5zaW9uIG1vZHVsZSBvbiBPUyBYLCBpZiB0aGUgY29tcGlsZXIKICAgaXMgb3ZlcnJpZGVuIHdpdGggdGhlIENDIGVudmlyb25tZW50IHZhcmlhYmxlLCB1c2UgdGhlIG5ldyBjb21waWxlciBhcwpAQCAtMTIzMiwzMSArNTEyOSw3MzQgQEAKIC0gSXNzdWUgIzE4MTEzOiBGaXhlZCBhIHJlZmNvdW50IGxlYWsgaW4gdGhlIGN1cnNlcy5wYW5lbCBtb2R1bGUncwogICBzZXRfdXNlcnB0cigpIG1ldGhvZC4gIFJlcG9ydGVkIGJ5IEF0c3VvIElzaGltb3RvLgogCi0tIElzc3VlICMxODg0OTogRml4ZWQgYSBXaW5kb3dzLXNwZWNpZmljIHRlbXBmaWxlIGJ1ZyB3aGVyZSBjb2xsaXNpb24gd2l0aCBhbgotICBleGlzdGluZyBkaXJlY3RvcnkgY2F1c2VkIG1rc3RlbXAgYW5kIHJlbGF0ZWQgQVBJcyB0byBmYWlsIGluc3RlYWQgb2YKLSAgcmV0cnlpbmcuIFJlcG9ydCBhbmQgZml4IGJ5IFZsYWQgU2hjaGVyYmluYS4KKy0gSW1wbGVtZW50IFBFUCA0NDMgIlNpbmdsZS1kaXNwYXRjaCBnZW5lcmljIGZ1bmN0aW9ucyIuCiAKLS0gSXNzdWUgIzE5NDAwOiBQcmV2ZW50IGV4dGVuc2lvbiBtb2R1bGUgYnVpbGQgZmFpbHVyZXMgd2l0aCBYY29kZSA1IG9uIE9TIFgKLSAgMTAuOCsgd2hlbiB1c2luZyBhIHVuaXZlcnNhbCBQeXRob24gdGhhdCBpbmNsdWRlZCBhIFBQQyBhcmNoaXRlY3R1cmUsCi0gIHN1Y2ggYXMgd2l0aCBhIHB5dGhvbi5vcmcgMzItYml0LW9ubHkgYmluYXJ5IGluc3RhbGxlci4KKy0gSW1wbGVtZW50IFBFUCA0MzUgIkFkZGluZyBhbiBFbnVtIHR5cGUgdG8gdGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5Ii4KIAotQyBBUEkKLS0tLS0tCistIElzc3VlICMxNTU5NjogRmFzdGVyIHBpY2tsaW5nIG9mIHVuaWNvZGUgc3RyaW5ncy4KIAotLSBJc3N1ZSAjMTgzNTE6IEZpeCB2YXJpb3VzIGlzc3VlcyB3aXRoIGEgaGVscGVyIGZ1bmN0aW9uIGluIGltcG9ydGxpYiB1c2VkCi0gIGJ5IFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIChhbmQgdGh1cyBieSBleHRlbnNpb24KLSAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoKSBhbmQgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgpKS4KKy0gSXNzdWUgIzE3NTcyOiBBdm9pZCBjaGFpbmVkIGV4Y2VwdGlvbnMgd2hlbiBwYXNzaW5nIGJhZCBkaXJlY3RpdmVzIHRvCisgIHRpbWUuc3RycHRpbWUoKS4gIEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgorCistIElzc3VlICMxNzQzNTogdGhyZWFkaW5nLlRpbWVyJ3MgX19pbml0X18gbWV0aG9kIG5vIGxvbmdlciB1c2VzIG11dGFibGUKKyAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBhcmdzIGFuZCBrd2FyZ3MgcGFyYW1ldGVycy4KKworLSBJc3N1ZSAjMTc1MjY6IGZpeCBhbiBJbmRleEVycm9yIHJhaXNlZCB3aGlsZSBwYXNzaW5nIGNvZGUgd2l0aG91dCBmaWxlbmFtZSB0bworICBpbnNwZWN0LmZpbmRzb3VyY2UoKS4gIEluaXRpYWwgcGF0Y2ggYnkgVHlsZXIgRG95bGUuCisKKy0gSXNzdWUgIzE3NTQwOiBBZGRlZCBzdHlsZSBwYXJhbWV0ZXIgdG8gbG9nZ2luZyBmb3JtYXR0ZXIgY29uZmlndXJhdGlvbiBieSBkaWN0LgorCistIElzc3VlICMxNjY5MjogVGhlIHNzbCBtb2R1bGUgbm93IHN1cHBvcnRzIFRMUyAxLjEgYW5kIFRMUyAxLjIuICBJbml0aWFsCisgIHBhdGNoIGJ5IE1pY2hlbGUgT3Jyw7kuCisKKy0gSXNzdWUgIzE3MDI1OiBtdWx0aXByb2Nlc3Npbmc6IFJlZHVjZSBRdWV1ZSBhbmQgU2ltcGxlUXVldWUgY29udGVudGlvbi4KKworLSBJc3N1ZSAjMTc1MzY6IEFkZCB0byB3ZWJicm93c2VyJ3MgYnJvd3NlciBsaXN0OiB3d3ctYnJvd3NlciwgeC13d3ctYnJvd3NlciwKKyAgaWNld2Vhc2VsLCBpY2VhcGUuCisKKy0gSXNzdWUgIzE3MTUwOiBwcHJpbnQgbm93IHVzZXMgbGluZSBjb250aW51YXRpb25zIHRvIHdyYXAgbG9uZyBzdHJpbmcKKyAgbGl0ZXJhbHMuCisKKy0gSXNzdWUgIzE3NDg4OiBDaGFuZ2UgdGhlIHN1YnByb2Nlc3MuUG9wZW4gYnVmc2l6ZSBwYXJhbWV0ZXIgZGVmYXVsdCB2YWx1ZQorICBmcm9tIHVuYnVmZmVyZWQgKDApIHRvIGJ1ZmZlcmluZyAoLTEpIHRvIG1hdGNoIHRoZSBiZWhhdmlvciBleGlzdGluZyBjb2RlCisgIGV4cGVjdHMgYW5kIG1hdGNoIHRoZSBiZWhhdmlvciBvZiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgaW4gUHl0aG9uIDIgdG8gYXZvaWQKKyAgaW50cm9kdWNpbmcgaGFyZCB0byB0cmFjayBkb3duIGJ1Z3MuCisKKy0gSXNzdWUgIzE3NTIxOiBDb3JyZWN0ZWQgbm9uLWVuYWJsaW5nIG9mIGxvZ2dlciBmb2xsb3dpbmcgdHdvIGNhbGxzIHRvCisgIGZpbGVDb25maWcoKS4KKworLSBJc3N1ZSAjMTc1MDg6IENvcnJlY3RlZCBsb2dnaW5nIE1lbW9yeUhhbmRsZXIgY29uZmlndXJhdGlvbiBpbiBkaWN0Q29uZmlnKCkKKyAgd2hlcmUgdGhlIHRhcmdldCBoYW5kbGVyIHdhc24ndCBjb25maWd1cmVkIGZpcnN0LgorCistIElzc3VlICMxNzIwOTogY3Vyc2VzLndpbmRvdy5nZXRfd2NoKCkgbm93IGNvcnJlY3RseSBoYW5kbGVzIEtleWJvYXJkSW50ZXJydXB0CisgIChDVFJMK2MpLgorCistIElzc3VlICM1NzEzOiBzbXRwbGliIG5vdyBoYW5kbGVzIDQyMSAoY2xvc2luZyBjb25uZWN0aW9uKSBlcnJvciBjb2RlcyB3aGVuCisgIHNlbmRpbmcgbWFpbCBieSBjbG9zaW5nIHRoZSBzb2NrZXQgYW5kIHJlcG9ydGluZyB0aGUgNDIxIGVycm9yIGNvZGUgdmlhIHRoZQorICBleGNlcHRpb24gYXBwcm9wcmlhdGUgdG8gdGhlIGNvbW1hbmQgdGhhdCByZWNlaXZlZCB0aGUgZXJyb3IgcmVzcG9uc2UuCisKKy0gSXNzdWUgIzE2OTk3OiB1bml0dGVzdC5UZXN0Q2FzZSBub3cgcHJvdmlkZXMgYSBzdWJUZXN0KCkgY29udGV4dCBtYW5hZ2VyCisgIHRvIHByb2NlZHVyYWxseSBnZW5lcmF0ZSwgaW4gYW4gZWFzeSB3YXksIHNtYWxsIHRlc3QgaW5zdGFuY2VzLgorCistIElzc3VlICMxNzQ4NTogQWxzbyBkZWxldGUgdGhlIFJlcXVlc3QgQ29udGVudC1MZW5ndGggaGVhZGVyIGlmIHRoZSBkYXRhCisgIGF0dHJpYnV0ZSBpcyBkZWxldGVkLiAgKEZvbGxvdyBvbiB0byBpc3N1ZSBJc3N1ZSAjMTY0NjQpLgorCistIElzc3VlICMxNTkyNzogQ1ZTIG5vdyBjb3JyZWN0bHkgcGFyc2VzIGVzY2FwZWQgbmV3bGluZXMgYW5kIGNhcnJpYWdlCisgIHdoZW4gcGFyc2luZyB3aXRoIHF1b3RpbmcgdHVybmVkIG9mZi4KKworLSBJc3N1ZSAjMTc0Njc6IGFkZCByZWFkbGluZSBhbmQgcmVhZGxpbmVzIHN1cHBvcnQgdG8gbW9ja19vcGVuIGluCisgIHVuaXR0ZXN0Lm1vY2suCisKKy0gSXNzdWUgIzEzMjQ4OiByZW1vdmVkIGRlcHJlY2F0ZWQgYW5kIHVuZG9jdW1lbnRlZCBkaWZmbGliLmlzYmp1bmssCisgIGlzYnBvcHVsYXIuCisKKy0gSXNzdWUgIzE3MTkyOiBVcGRhdGUgdGhlIGN0eXBlcyBtb2R1bGUncyBsaWJmZmkgdG8gdjMuMC4xMy4gIFRoaXMKKyAgc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBhIHN0YWNrIG1pc2FsaWdubWVudCBpc3N1ZSBvbiB4ODYgYW5kIGlzc3VlcyBvbgorICBzb21lIG1vcmUgcmVjZW50IHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjODg2MjogRml4ZWQgY3Vyc2VzIGNsZWFudXAgd2hlbiBnZXRrZXkgaXMgaW50ZXJycHV0ZWQgYnkgYSBzaWduYWwuCisKKy0gSXNzdWUgIzE3NDQzOiBpbWFwbGliLklNQVA0X3N0cmVhbSB3YXMgdXNpbmcgdGhlIGRlZmF1bHQgdW5idWZmZXJlZCBJTworICBpbiBzdWJwcm9jZXNzLCBidXQgdGhlIGltYXAgY29kZSBhc3N1bWVzIGJ1ZmZlcmVkIElPLiAgSW4gUHl0aG9uMiB0aGlzCisgIHdvcmtlZCBieSBhY2NpZGVudC4gIElNQVA0X3N0cmVhbSBub3cgZXhwbGljaXRseSB1c2VzIGJ1ZmZlcmVkIElPLgorCistIElzc3VlICMxNzQ3NjogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHVuZG9jdW1lbnRlZCBweWRvYworICAnYWxsbWV0aG9kcyc7IGl0IHdhcyBtaXNzaW5nIHVuYm91bmQgbWV0aG9kcyBvbiB0aGUgY2xhc3MuCisKKy0gSXNzdWUgIzE3NDc0OiBSZW1vdmUgdGhlIGRlcHJlY2F0ZWQgbWV0aG9kcyBvZiBSZXF1ZXN0IGNsYXNzLgorCistIElzc3VlICMxNjcwOTogdW5pdHRlc3QgZGlzY292ZXIgb3JkZXIgaXMgbm8tbG9uZ2VyIGZpbGVzeXN0ZW0gc3BlY2lmaWMuIFBhdGNoCisgIGJ5IEplZmYgUmFtbmFuaS4KKworLSBVc2UgdGhlIEhUVFBTIFB5UEkgdXJsIGZvciB1cGxvYWQsIG92ZXJyaWRpbmcgYW55IHBsYWluIEhUVFAgVVJMIGluIHB5cGlyYy4KKworLSBJc3N1ZSAjNTAyNDogc25kaGRyLndoaWNoaGRyIG5vdyByZXR1cm5zIHRoZSBmcmFtZSBjb3VudCBmb3IgV0FWIGZpbGVzCisgIHJhdGhlciB0aGFuIC0xLgorCistIElzc3VlICMxNzQ2MDogUmVtb3ZlIHRoZSBzdHJpY3QgYXJndW1lbnQgb2YgSFRUUENvbm5lY3Rpb24gYW5kIHJlbW92aW5nIHRoZQorICBEZXByZWNhdGlvbldhcm5pbmcgYmVpbmcgaXNzdWVkIGZyb20gMy4yIG9ud2FyZHMuCisKKy0gSXNzdWUgIzE2ODgwOiBEbyBub3QgYXNzdW1lIF9pbXAubG9hZF9keW5hbWljKCkgaXMgZGVmaW5lZCBpbiB0aGUgaW1wIG1vZHVsZS4KKworLSBJc3N1ZSAjMTYzODk6IEZpeGVkIGEgcGVyZm9ybWFuY2UgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24gMy4xIGluIHRoZQorICBjYWNoaW5nIG9mIGNvbXBpbGVkIHJlZ3VsYXIgZXhwcmVzc2lvbnMuCisKKy0gQWRkZWQgbWlzc2luZyBGZWVkUGFyc2VyIGFuZCBCeXRlc0ZlZWRQYXJzZXIgdG8gZW1haWwucGFyc2VyLl9fYWxsX18uCisKKy0gSXNzdWUgIzE3NDMxOiBGaXggbWlzc2luZyBpbXBvcnQgb2YgQnl0ZXNGZWVkUGFyc2VyIGluIGVtYWlsLnBhcnNlci4KKworLSBJc3N1ZSAjMTI5MjE6IGh0dHAuc2VydmVyJ3Mgc2VuZF9lcnJvciB0YWtlcyBhbiBleHBsYWluIGFyZ3VtZW50IHRvIHNlbmQgbW9yZQorICBpbmZvcm1hdGlvbiBpbiByZXNwb25zZS4gUGF0Y2ggY29udHJpYnV0ZWQgYnkgS2FybC4KKworLSBJc3N1ZSAjMTc0MTQ6IEFkZCB0aW1laXQsIHJlcGVhdCwgYW5kIGRlZmF1bHRfdGltZXIgdG8gdGltZWl0Ll9fYWxsX18uCisKKy0gSXNzdWUgIzEyODUwODY6IEdldCByaWQgb2YgdGhlIHJlZmNvdW50aW5nIGhhY2sgYW5kIHNwZWVkIHVwCisgIHVybGxpYi5wYXJzZS51bnF1b3RlKCkgYW5kIHVybGxpYi5wYXJzZS51bnF1b3RlX3RvX2J5dGVzKCkuCisKKy0gSXNzdWUgIzE3MDk5OiBIYXZlIGltcG9ydGxpYi5maW5kX2xvYWRlcigpIHJhaXNlIFZhbHVlRXJyb3Igd2hlbiBfX2xvYWRlcl9fCisgIGlzIG5vdCBzZXQsIGhhcm1vbml6aW5nIHdpdGggd2hhdCBoYXBwZW5zIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gTm9uZS4KKworLSBFeHBvc2UgdGhlIE9fUEFUSCBjb25zdGFudCBpbiB0aGUgb3MgbW9kdWxlIGlmIGl0IGlzIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTczNjg6IEZpeCBhbiBvZmYtYnktb25lIGVycm9yIGluIHRoZSBQeXRob24gSlNPTiBkZWNvZGVyIHRoYXQgY2F1c2VkCisgIGEgZmFpbHVyZSB3aGlsZSBkZWNvZGluZyBlbXB0eSBvYmplY3QgbGl0ZXJhbHMgd2hlbiBvYmplY3RfcGFpcnNfaG9vayB3YXMKKyAgc3BlY2lmaWVkLgorCistIElzc3VlICMxNzM4NTogRml4IHF1YWRyYXRpYyBiZWhhdmlvciBpbiB0aHJlYWRpbmcuQ29uZGl0aW9uLiAgVGhlIEZJRk8KKyAgcXVldWUgbm93IHVzZXMgYSBkZXF1ZSBpbnN0ZWFkIG9mIGEgbGlzdC4KKworLSBJc3N1ZSAjMTU4MDY6IEFkZCBjb250ZXh0bGliLmlnbm9yZSgpLiAgVGhpcyBjcmVhdGVzIGEgY29udGV4dCBtYW5hZ2VyIHRvCisgIGlnbm9yZSBzcGVjaWZpZWQgZXhjZXB0aW9ucywgcmVwbGFjaW5nIHRoZSAiZXhjZXB0IFNvbWVFeGNlcHRpb246IHBhc3MiIGlkaW9tLgorCistIElzc3VlICMxNDY0NTogVGhlIGVtYWlsIGdlbmVyYXRvciBjbGFzc2VzIG5vdyBwcm9kdWNlIG91dHB1dCB1c2luZyB0aGUKKyAgc3BlY2lmaWVkIGxpbmVzZXAgdGhyb3VnaG91dC4gIFByZXZpb3VzbHkgaWYgdGhlIHByb2xvZywgZXBpbG9nLCBvcgorICBib2R5IHdlcmUgc3RvcmVkIHdpdGggYSBkaWZmZXJlbnQgbGluZXNlcCwgdGhhdCBsaW5lc2VwIHdhcyB1c2VkLiAgVGhpcworICBmaXggY29ycmVjdHMgYW4gUkZDIG5vbi1jb21wbGlhbmNlIGlzc3VlIHdpdGggc210cGxpYi5zZW5kX21lc3NhZ2UuCisKKy0gSXNzdWUgIzE3Mjc4OiBGaXggYSBjcmFzaCBpbiBoZWFwcS5oZWFwcHVzaCgpIGFuZCBoZWFwcS5oZWFwcG9wKCkgd2hlbgorICB0aGUgbGlzdCBpcyBiZWluZyByZXNpemVkIGNvbmN1cnJlbnRseS4KKworLSBJc3N1ZSAjMTY5NjI6IFVzZSBnZXRkZW50czY0IGluc3RlYWQgb2YgdGhlIG9ic29sZXRlIGdldGRlbnRzIHN5c2NhbGwKKyAgaW4gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIG9uIExpbnV4LgorCistIElzc3VlICMxNjkzNTogdW5pdHRlc3Qgbm93IGNvdW50cyB0aGUgbW9kdWxlIGFzIHNraXBwZWQgaWYgaXQgcmFpc2VzIFNraXBUZXN0LAorICBpbnN0ZWFkIG9mIGNvdW50aW5nIGl0IGFzIGFuIGVycm9yLiAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgorCistIElzc3VlICMxNzAxODogTWFrZSBQcm9jZXNzLmpvaW4oKSByZXRyeSBpZiBvcy53YWl0cGlkKCkgZmFpbHMgd2l0aCBFSU5UUi4KKworLSBJc3N1ZSAjMTcyMjM6IGFycmF5IG1vZHVsZTogRml4IGEgY3Jhc2hlciB3aGVuIGNvbnZlcnRpbmcgYW4gYXJyYXkgY29udGFpbmluZworICBpbnZhbGlkIGNoYXJhY3RlcnMgKG91dHNpZGUgcmFuZ2UgW1UrMDAwMDsgVSsxMGZmZmZdKSB0byBVbmljb2RlOgorICByZXByKGFycmF5KSwgc3RyKGFycmF5KSBhbmQgYXJyYXkudG91bmljb2RlKCkuIFBhdGNoIHdyaXR0ZW4gYnkgTWFudWVsIEphY29iLgorCistIElzc3VlICMxNzE5NzogcHJvZmlsZS9jUHJvZmlsZSBtb2R1bGVzIHJlZmFjdG9yZWQgc28gdGhhdCBjb2RlIG9mIHJ1bigpIGFuZAorICBydW5jdHgoKSB1dGlsaXR5IGZ1bmN0aW9ucyBpcyBub3QgZHVwbGljYXRlZCBpbiBib3RoIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE0NzIwOiBzcWxpdGUzOiBDb252ZXJ0IGRhdGV0aW1lIG1pY3Jvc2Vjb25kcyBjb3JyZWN0bHkuCisgIFBhdGNoIGJ5IExvd2UgVGhpZGVybWFuLgorCistIElzc3VlICMxNTEzMjogQWxsb3cgYSBsaXN0IGZvciB0aGUgZGVmYXVsdFRlc3QgYXJndW1lbnQgb2YKKyAgdW5pdHRlc3QuVGVzdFByb2dyYW0uIFBhdGNoIGJ5IEp5cmtpIFB1bGxpYWluZW4uCisKKy0gSXNzdWUgIzE3MjI1OiBKU09OIGRlY29kZXIgbm93IGNvdW50cyBjb2x1bW5zIGluIHRoZSBmaXJzdCBsaW5lIHN0YXJ0aW5nCisgIHdpdGggMSwgYXMgaW4gb3RoZXIgbGluZXMuCisKKy0gSXNzdWUgIzY2MjM6IEFkZGVkIGV4cGxpY2l0IERlcHJlY2F0aW9uV2FybmluZyBmb3IgZnRwbGliLm5ldHJjLCB3aGljaCBoYXMKKyAgYmVlbiBkZXByZWNhdGVkIGFuZCB1bmRvY3VtZW50ZWQgZm9yIGEgbG9uZyB0aW1lLgorCistIElzc3VlICMxMzcwMDogRml4IGJ5dGUvc3RyaW5nIGhhbmRsaW5nIGluIGltYXBsaWIgYXV0aGVudGljYXRpb24gd2hlbiBhbgorICBhdXRob2JqZWN0IGlzIHNwZWNpZmllZC4KKworLSBJc3N1ZSAjMTMxNTM6IFRraW50ZXIgZnVuY3Rpb25zIG5vdyByYWlzZSBUY2xFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3Igd2hlbgorICBhIHN0cmluZyBhcmd1bWVudCBjb250YWlucyBub24tQk1QIGNoYXJhY3Rlci4KKworLSBJc3N1ZSAjOTY2OTogUHJvdGVjdCByZSBhZ2FpbnN0IGluZmluaXRlIGxvb3BzIG9uIHplcm8td2lkdGggbWF0Y2hpbmcgaW4KKyAgbm9uLWdyZWVkeSByZXBlYXQuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCisKKy0gSXNzdWUgIzEzMTY5OiBUaGUgbWF4aW1hbCByZXBldGl0aW9uIG51bWJlciBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBoYXMgYmVlbgorICBpbmNyZWFzZWQgZnJvbSA2NTUzNCB0byAyMTQ3NDgzNjQ3IChvbiAzMi1iaXQgcGxhdGZvcm0pIG9yIDQyOTQ5NjcyOTQgKG9uCisgIDY0LWJpdCkuCisKKy0gSXNzdWUgIzE3MTQzOiBGaXggYSBtaXNzaW5nIGltcG9ydCBpbiB0aGUgdHJhY2UgbW9kdWxlLiAgSW5pdGlhbCBwYXRjaCBieQorICBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMxNTIyMDogZW1haWwuZmVlZHBhcnNlcidzIGxpbmUgc3BsaXR0aW5nIGFsZ29yaXRobSBpcyBub3cgc2ltcGxlciBhbmQKKyAgZmFzdGVyLgorCistIElzc3VlICMxNjc0MzogRml4IG1tYXAgb3ZlcmZsb3cgY2hlY2sgb24gMzIgYml0IFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2OTk2OiB3ZWJicm93c2VyIG1vZHVsZSBub3cgdXNlcyBzaHV0aWwud2hpY2goKSB0byBmaW5kIGEKKyAgd2ViLWJyb3dzZXIgb24gdGhlIGV4ZWN1dGFibGUgc2VhcmNoIHBhdGguCisKKy0gSXNzdWUgIzE2ODAwOiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkgbm8gbG9uZ2VyIGxlZnQgdGVtcG9yYXJ5IGZpbGVzIHdoZW4KKyAgdGhlIGRpc2sgaXMgZnVsbC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFtaXIgU3pla2VseS4KKworLSBJc3N1ZSAjMTcxOTI6IEltcG9ydCBsaWJmZmktMy4wLjEyLgorCistIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKKyAgZW1haWwuZW5jb2RlcnMuZW5jb2RlXzdvcjhiaXQgd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCisKKy0gSXNzdWUgIzE3MDUyOiB1bml0dGVzdCBkaXNjb3Zlcnkgc2hvdWxkIHVzZSBzZWxmLnRlc3RMb2FkZXIuCisKKy0gSXNzdWUgIzQ1OTE6IFVpZCBhbmQgZ2lkIHZhbHVlcyBsYXJnZXIgdGhhbiAyKiozMSBhcmUgc3VwcG9ydGVkIG5vdy4KKworLSBJc3N1ZSAjMTcxNDE6IHJhbmRvbS52b25taXNlc3ZhcmlhdGUoKSBubyBsb25nZXIgaGFuZ3MgZm9yIGxhcmdlIGthcHBhcy4KKworLSBJc3N1ZSAjMTcxNDk6IEZpeCByYW5kb20udm9ubWlzZXN2YXJpYXRlIHRvIGFsd2F5cyByZXR1cm4gcmVzdWx0cyBpbgorICBbMCwgMiptYXRoLnBpXS4KKworLSBJc3N1ZSAjMTQ3MDU0ODogWE1MR2VuZXJhdG9yIG5vdyB3b3JrcyB3aXRoIGJpbmFyeSBvdXRwdXQgc3RyZWFtcy4KKworLSBJc3N1ZSAjNjk3NTogb3MucGF0aC5yZWFscGF0aCgpIG5vdyBjb3JyZWN0bHkgcmVzb2x2ZXMgbXVsdGlwbGUgbmVzdGVkCisgIHN5bWxpbmtzIG9uIFBPU0lYIHBsYXRmb3Jtcy4KKworLSBJc3N1ZSAjMTM3NzM6IHNxbGl0ZTMuY29ubmVjdCgpIGdldHMgYSBuZXcgYHVyaWAgcGFyYW1ldGVyIHRvIHBhc3MgdGhlCisgIGZpbGVuYW1lIGFzIGEgVVJJLCBhbGxvd2luZyB0byBwYXNzIGN1c3RvbSBvcHRpb25zLgorCistIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKKyAgZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3Agd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCisKKy0gSXNzdWUgIzEwMzU1OiBUaGUgbW9kZSwgbmFtZSwgZW5jb2RpbmcgYW5kIG5ld2xpbmVzIHByb3BlcnRpZXMgbm93IHdvcmsgb24KKyAgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgb2JqZWN0cyBldmVuIHdoZW4gdGhleSBoYXZlIG5vdCB5ZXQgcm9sbGVkIG92ZXIuCisgIE9ic29sZXRlIG1ldGhvZCB4cmVhZGxpbmUgKHdoaWNoIGhhcyBuZXZlciB3b3JrZWQgaW4gUHl0aG9uIDMpIGhhcyBiZWVuCisgIHJlbW92ZWQuCisKKy0gSXNzdWUgIzE2Njg2OiBGaXhlZCBhIGxvdCBvZiBidWdzIGluIGF1ZGlvb3AgbW9kdWxlLiAgRml4ZWQgY3Jhc2hlcyBpbgorICBhdmdwcCgpLCBtYXhwcCgpIGFuZCByYXRlY3YoKS4gIEZpeGVkIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYWRkKCksIGJpYXMoKSwKKyAgYW5kIHJhdGVjdigpLiAgcmV2ZXJzZSgpLCBsaW4ybGluKCkgYW5kIHJhdGVjdigpIG5vIG1vcmUgbG9zZSBwcmVjaXNpb24gZm9yCisgIDMyLWJpdCBzYW1wbGVzLiAgbWF4KCkgYW5kIHJtcygpIG5vIG1vcmUgcmV0dXJucyBhIG5lZ2F0aXZlIHJlc3VsdCBhbmQKKyAgdmFyaW91cyBvdGhlciBmdW5jdGlvbnMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggMzItYml0IHNhbXBsZSAtMHg4MDAwMDAwMC4KKworLSBJc3N1ZSAjMTcwNzM6IEZpeCBzb21lIGludGVnZXIgb3ZlcmZsb3dzIGluIHNxbGl0ZTMgbW9kdWxlLgorCistIElzc3VlICMxNjcyMzogaHR0cGxpYi5IVFRQUmVzcG9uc2Ugbm8gbG9uZ2VyIG1hcmtlZCBjbG9zZWQgd2hlbiB0aGUgY29ubmVjdGlvbgorICBpcyBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KKworLSBJc3N1ZSAjMTUzNTk6IEFkZCBDQU5fQkNNIHByb3RvY29sIHN1cHBvcnQgdG8gdGhlIHNvY2tldCBtb2R1bGUuIFBhdGNoIGJ5CisgIEJyaWFuIFRob3JuZS4KKworLSBJc3N1ZSAjMTY5NDg6IEZpeCBxdW90ZWQgcHJpbnRhYmxlIGJvZHkgZW5jb2RpbmcgZm9yIG5vbi1sYXRpbjEgY2hhcmFjdGVyCisgIHNldHMgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCisKKy0gSXNzdWUgIzE2ODExOiBGaXggZm9sZGluZyBvZiBoZWFkZXJzIHdpdGggbm8gdmFsdWUgaW4gdGhlIHByb3Zpc2lvbmFsIGVtYWlsCisgIHBvbGljaWVzLgorCistIElzc3VlICMxNzEzMjogVXBkYXRlIHN5bWJvbCBmb3IgInlpZWxkIGZyb20iIGdyYW1tYXIgY2hhbmdlcy4KKworLSBJc3N1ZSAjMTcwNzY6IE1ha2UgY29weWluZyBvZiB4YXR0cnMgbW9yZSB0b2xlcmFudCBvZiBtaXNzaW5nIEZTIHN1cHBvcnQuCisgIFBhdGNoIGJ5IFRob21hcyBXb3V0ZXJzLgorCistIElzc3VlICMxNzA4OTogRXhwYXQgcGFyc2VyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBzdHJpbmcgaW5wdXQgd2hlbiB0aGUKKyAgaW50ZXJuYWwgWE1MIGVuY29kaW5nIGlzIG5vdCBVVEYtOCBvciBVUy1BU0NJSS4gIEl0IGFsc28gbm93IGFjY2VwdHMgYnl0ZXMKKyAgYW5kIHN0cmluZ3MgbGFyZ2VyIHRoYW4gMiBHaUIuCisKKy0gSXNzdWUgIzYwODM6IEZpeCBtdWx0aXBsZSBzZWdtZW50YXRpb24gZmF1bHRzIG9jY3VyZWQgd2hlbiBQeUFyZ19QYXJzZVR1cGxlCisgIHBhcnNlcyBuZXN0ZWQgbXV0YXRpbmcgc2VxdWVuY2UuCisKKy0gSXNzdWUgIzUyODk6IEZpeCBjdHlwZXMudXRpbC5maW5kX2xpYnJhcnkgb24gU29sYXJpcy4KKworLSBJc3N1ZSAjMTcxMDY6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBpbiBpby5UZXh0SU9XcmFwcGVyIHdoZW4gYW4gdW5kZXJseWluZworICBzdHJlYW0gb3IgYSBkZWNvZGVyIHByb2R1Y2VzIGRhdGEgb2YgYW4gdW5leHBlY3RlZCB0eXBlIChpLmUuIHdoZW4KKyAgaW8uVGV4dElPV3JhcHBlciBpbml0aWFsaXplZCB3aXRoIHRleHQgc3RyZWFtIG9yIHVzZSBieXRlcy10by1ieXRlcyBjb2RlYykuCisKKy0gSXNzdWUgIzE3MDE1OiBXaGVuIGl0IGhhcyBhIHNwZWMsIGEgTW9jayBvYmplY3Qgbm93IGluc3BlY3RzIGl0cyBzaWduYXR1cmUKKyAgd2hlbiBtYXRjaGluZyBjYWxscywgc28gdGhhdCBhcmd1bWVudHMgY2FuIGJlIG1hdGNoZWQgcG9zaXRpb25hbGx5IG9yCisgIGJ5IG5hbWUuCisKKy0gSXNzdWUgIzE1NjMzOiBodHRwbGliLkhUVFBSZXNwb25zZSBpcyBub3cgbWFyayBjbG9zZWQgd2hlbiB0aGUgc2VydmVyCisgIHNlbmRzIGxlc3MgdGhhbiB0aGUgYWR2ZXJ0aXNlZCBDb250ZW50LUxlbmd0aC4KKworLSBJc3N1ZSAjMTIyNjg6IFRoZSBpbyBtb2R1bGUgZmlsZSBvYmplY3Qgd3JpdGUgbWV0aG9kcyBubyBsb25nZXIgYWJvcnQgZWFybHkKKyAgd2hlbiBvbmUgb2YgaXRzIHdyaXRlIHN5c3RlbSBjYWxscyBpcyBpbnRlcnJ1cHRlZCAoRUlOVFIpLgorCistIElzc3VlICM2OTcyOiBUaGUgemlwZmlsZSBtb2R1bGUgbm8gbG9uZ2VyIG92ZXJ3cml0ZXMgZmlsZXMgb3V0c2lkZSBvZgorICBpdHMgZGVzdGluYXRpb24gcGF0aCB3aGVuIGV4dHJhY3RpbmcgbWFsaWNpb3VzIHppcCBmaWxlcy4KKworLSBJc3N1ZSAjNDg0NDogWmlwRmlsZSBub3cgcmFpc2VzIEJhZFppcEZpbGUgd2hlbiBvcGVucyBhIFpJUCBmaWxlIHdpdGggYW4KKyAgaW5jb21wbGV0ZSAiRW5kIG9mIENlbnRyYWwgRGlyZWN0b3J5IiByZWNvcmQuICBPcmlnaW5hbCBwYXRjaCBieSBHdWlsaGVybWUKKyAgUG9sbyBhbmQgQWxhbiBNY0ludHlyZS4KKworLSBJc3N1ZSAjMTcwNzE6IFNpZ25hdHVyZS5iaW5kKCkgbm93IHdvcmtzIHdoZW4gb25lIG9mIHRoZSBrZXl3b3JkIGFyZ3VtZW50cworICBpcyBuYW1lZCBgYHNlbGZgYC4KKworLSBJc3N1ZSAjMTIwMDQ6IEZpeCBhbiBpbnRlcm5hbCBlcnJvciBpbiBQeVppcEZpbGUgd2hlbiB3cml0aW5nIGFuIGludmFsaWQKKyAgUHl0aG9uIGZpbGUuICBQYXRjaCBieSBCZW4gTW9yZ2FuLgorCistIEhhdmUgcHlfY29tcGlsZSB1c2UgaW1wb3J0bGliIGFzIG11Y2ggYXMgcG9zc2libGUgdG8gYXZvaWQgY29kZSBkdXBsaWNhdGlvbi4KKyAgQ29kZSBub3cgcmFpc2VzIEZpbGVFeGlzdHNFcnJvciBpZiB0aGUgZmlsZSBwYXRoIHRvIGJlIHVzZWQgZm9yIHRoZQorICBieXRlLWNvbXBpbGVkIGZpbGUgaXMgYSBzeW1saW5rIG9yIG5vbi1yZWd1bGFyIGZpbGUgYXMgYSB3YXJuaW5nIHRoYXQgaW1wb3J0CisgIHdpbGwgbm90IGtlZXAgdGhlIGZpbGUgcGF0aCB0eXBlIGlmIGl0IHdyaXRlcyB0byB0aGF0IHBhdGguCisKKy0gSXNzdWUgIzE2OTcyOiBIYXZlIHNpdGUuYWRkcGFja2FnZSgpIGNvbnNpZGVyIGFscmVhZHkga25vd24gcGF0aHMgZXZlbiB3aGVuCisgIG5vbmUgYXJlIGV4cGxpY2l0bHkgcGFzc2VkIGluLiBCdWcgcmVwb3J0IGFuZCBmaXggYnkgS2lyaWxsLgorCistIElzc3VlICMxNjAyMTMzOiBvbiBNYWMgT1MgWCBhIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIChgYC0tZW5hYmxlLXNoYXJlZGBgKQorICBub3cgZmlsbHMgdGhlIGBgb3MuZW52aXJvbmBgIHZhcmlhYmxlIGNvcnJlY3RseS4KKworLSBJc3N1ZSAjMTU1MDU6IGB1bml0dGVzdC5pbnN0YWxsSGFuZGxlcmAgbm8gbG9uZ2VyIGFzc3VtZXMgU0lHSU5UIGhhbmRsZXIgaXMKKyAgc2V0IHRvIGEgY2FsbGFibGUgb2JqZWN0LgorCistIElzc3VlICMxMzQ1NDogRml4IGEgY3Jhc2ggd2hlbiBkZWxldGluZyBhbiBpdGVyYXRvciBjcmVhdGVkIGJ5IGl0ZXJ0b29scy50ZWUoKQorICBpZiBhbGwgb3RoZXIgaXRlcmF0b3JzIHdlcmUgdmVyeSBhZHZhbmNlZCBiZWZvcmUuCisKKy0gSXNzdWUgIzEyNDExOiBGaXggdG8gY2dpLnBhcnNlX211bHRpcGFydCB0byBjb3JyZWN0bHkgdXNlIGJ5dGVzIGJvdW5kYXJpZXMKKyAgYW5kIGJ5dGVzIGRhdGEuIFBhdGNoIGJ5IEpvbmFzIFdhZ25lci4KKworLSBJc3N1ZSAjMTY5NTc6IHNodXRpbC53aGljaCgpIG5vIGxvbmdlciBzZWFyY2hlcyBhIGJhcmUgZmlsZSBuYW1lIGluIHRoZQorICBjdXJyZW50IGRpcmVjdG9yeSBvbiBVbml4IGFuZCBubyBsb25nZXIgc2VhcmNoZXMgYSByZWxhdGl2ZSBmaWxlIHBhdGggd2l0aAorICBhIGRpcmVjdG9yeSBwYXJ0IGluIFBBVEggZGlyZWN0b3JpZXMuICBQYXRjaCBieSBUaG9tYXMgS2x1eXZlci4KKworLSBJc3N1ZSAjMTE1OTA1MTogR3ppcEZpbGUgbm93IHJhaXNlcyBFT0ZFcnJvciB3aGVuIHJlYWRpbmcgYSBjb3JydXB0ZWQgZmlsZQorICB3aXRoIHRydW5jYXRlZCBoZWFkZXIgb3IgZm9vdGVyLgorCistIElzc3VlICMxNjk5Mzogc2h1dGlsLndoaWNoKCkgbm93IHByZXNlcnZlcyB0aGUgY2FzZSBvZiB0aGUgcGF0aCBhbmQgZXh0ZW5zaW9uCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE2OTkyOiBPbiBXaW5kb3dzIGluIHNpZ25hbC5zZXRfd2FrZXVwX2ZkLCB2YWxpZGF0ZSB0aGUgZmlsZQorICBkZXNjcmlwdG9yIGFyZ3VtZW50LgorCistIElzc3VlICMxNjQyMjogRm9yIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgUHl0aG9uIHZlcnNpb24sIHRoZSBDIHZlcnNpb24gb2YKKyAgZGVjaW1hbCBub3cgdXNlcyBzdHJpbmdzIGluc3RlYWQgb2YgaW50ZWdlcnMgZm9yIHJvdW5kaW5nIG1vZGUgY29uc3RhbnRzLgorCistIElzc3VlICMxNTg2MTogdGtpbnRlciBub3cgY29ycmVjdGx5IHdvcmtzIHdpdGggbGlzdHMgYW5kIHR1cGxlcyBjb250YWluaW5nCisgIHN0cmluZ3Mgd2l0aCB3aGl0ZXNwYWNlcywgYmFja3NsYXNoZXMgb3IgdW5iYWxhbmNlZCBicmFjZXMuCisKKy0gSXNzdWUgIzk3MjA6IHppcGZpbGUgbm93IHdyaXRlcyBjb3JyZWN0IGxvY2FsIGhlYWRlcnMgZm9yIGZpbGVzIGxhcmdlciB0aGFuCisgIDQgR2lCLgorCistIElzc3VlICMxNjk1NTogRml4IHRoZSBwb2xsKCkgbWV0aG9kIGZvciBtdWx0aXByb2Nlc3NpbmcncyBzb2NrZXQKKyAgY29ubmVjdGlvbnMgb24gV2luZG93cy4KKworLSBTU0xDb250ZXh0LmxvYWRfZGhfcGFyYW1zKCkgbm93IHByb3Blcmx5IGNsb3NlcyB0aGUgaW5wdXQgZmlsZS4KKworLSBJc3N1ZSAjMTUwMzE6IFJlZmFjdG9yIHNvbWUgLnB5YyBtYW5hZ2VtZW50IGNvZGUgdG8gY3V0IGRvd24gb24gY29kZQorICBkdXBsaWNhdGlvbi4gVGhhbmtzIHRvIFJvbmFuIExhbXkgZm9yIHRoZSByZXBvcnQgYW5kIHRha2luZyBhbiBpbml0aWFsIHN0YWIKKyAgYXQgdGhlIHByb2JsZW0uCisKKy0gSXNzdWUgIzE2Mzk4OiBPcHRpbWl6ZSBkZXF1ZS5yb3RhdGUoKSBzbyB0aGF0IGl0IG9ubHkgbW92ZXMgcG9pbnRlcnMKKyAgYW5kIGRvZXNuJ3QgdG91Y2ggdGhlIHVuZGVybHlpbmcgZGF0YSB3aXRoIGluY3JlZnMgYW5kIGRlY3JlZnMuCisKKy0gSXNzdWUgIzE2OTAwOiBJc3N1ZSBhIFJlc291cmNlV2FybmluZyB3aGVuIGFuIHNzbCBzb2NrZXQgaXMgbGVmdCB1bmNsb3NlZC4KKworLSBJc3N1ZSAjMTM4OTk6IGBgXEFgYCwgYGBcWmBgLCBhbmQgYGBcQmBgIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIEEsIFosCisgIGFuZCBCIGxpdGVyYWxzIHdoZW4gdXNlZCBpbnNpZGUgY2hhcmFjdGVyIGNsYXNzZXMgKGUuZy4gYGAnW1xBXSdgYCkuCisgIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KKworLSBJc3N1ZSAjMTU1NDU6IEZpeCByZWdyZXNzaW9uIGluIHNxbGl0ZTMncyBpdGVyZHVtcCBtZXRob2Qgd2hlcmUgaXQgd2FzCisgIGZhaWxpbmcgaWYgdGhlIGNvbm5lY3Rpb24gdXNlZCBhIHJvdyBmYWN0b3J5IChzdWNoIGFzIHNxbGl0ZTMuUm93KSB0aGF0CisgIHByb2R1Y2VkIHVuc29ydGFibGUgb2JqZWN0cy4gKFJlZ3Jlc3Npb24gd2FzIGludHJvZHVjZWQgYnkgZml4IGZvciA5NzUwKS4KKworLSBmY250bDogYWRkIEZfRFVQRkRfQ0xPRVhFQyBjb25zdGFudCwgYXZhaWxhYmxlIG9uIExpbnV4IDIuNi4yNCsuCisKKy0gSXNzdWUgIzE1OTcyOiBGaXggZXJyb3IgbWVzc2FnZXMgd2hlbiBvcyBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgZmlsZSBuYW1lIG9yCisgIGZpbGUgZGVzY3JpcHRvciByZWNlaXZlIHRoZSBpbmNvcnJlY3QgdHlwZS4KKworLSBJc3N1ZSAjODEwOTogVGhlIHNzbCBtb2R1bGUgbm93IGhhcyBzdXBwb3J0IGZvciBzZXJ2ZXItc2lkZSBTTkksIHRoYW5rcworICB0byBhIDptZXRoOmBTU0xDb250ZXh0LnNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrYCBtZXRob2QuICBQYXRjaCBieSBEYW5pZWwKKyAgQmxhY2suCisKKy0gSXNzdWUgIzE2ODYwOiBJbiB0ZW1wZmlsZSwgdXNlIE9fQ0xPRVhFQyB3aGVuIGF2YWlsYWJsZSB0byBzZXQgdGhlCisgIGNsb3NlLW9uLWV4ZWMgZmxhZyBhdG9taWNhbGx5LgorCistIElzc3VlICMxNjY3NDogcmFuZG9tLmdldHJhbmRiaXRzKCkgaXMgbm93IDIwLTQwJSBmYXN0ZXIgZm9yIHNtYWxsIGludGVnZXJzLgorCistIElzc3VlICMxNjAwOTogSlNPTiBlcnJvciBtZXNzYWdlcyBub3cgcHJvdmlkZSBtb3JlIGluZm9ybWF0aW9uLgorCistIElzc3VlICMxNjgyODogRml4IGVycm9yIGluY29ycmVjdGx5IHJhaXNlZCBieSBiejIuY29tcHJlc3MoYicnKSBhbmQKKyAgYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3MoYicnKS4gSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gUGFja21hbi4KKworLSBJc3N1ZSAjMTY4MzM6IEluIGh0dHAuY2xpZW50LkhUVFBDb25uZWN0aW9uLCBkbyBub3QgY29uY2F0ZW5hdGUgdGhlIHJlcXVlc3QKKyAgaGVhZGVycyBhbmQgYm9keSB3aGVuIHRoZSBwYXlsb2FkIGV4Y2VlZHMgMTYgS0IsIHNpbmNlIGl0IGNhbiBjb25zdW1lIG1vcmUKKyAgbWVtb3J5IGZvciBubyBiZW5lZml0LiAgUGF0Y2ggYnkgQmVubm8gTGVzbGllLgorCistIElzc3VlICMxNjU0MTogdGtfc2V0UGFsZXR0ZSgpIG5vdyB3b3JrcyB3aXRoIGtleXdvcmQgYXJndW1lbnRzLgorCistIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgcGFyc2VyLnBvcGl0ZW0oKWAgbm8gbG9uZ2VyIHJhaXNlcyBWYWx1ZUVycm9yLgorICBUaGlzIG1ha2VzIGBwYXJzZXIuY2xlYW4oKWAgd29yayBjb3JyZWN0bHkuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydzZWN0aW9uJ10gPSB7fWBgIG5vdyBwcmVzZXJ2ZXMKKyAgc2VjdGlvbiBvcmRlciB3aXRoaW4gdGhlIHBhcnNlci4gVGhpcyBtYWtlcyBgcGFyc2VyLnVwZGF0ZSgpYCBwcmVzZXJ2ZSBzZWN0aW9uCisgIG9yZGVyIGFzIHdlbGwuCisKKy0gSXNzdWUgIzE2ODIwOiBJbiBjb25maWdwYXJzZXIsIGBgcGFyc2VyWydERUZBVUxUJ10gPSB7fWBgIG5vdyBjb3JyZWN0bHkKKyAgY2xlYXJzIHByZXZpb3VzIHZhbHVlcyBzdG9yZWQgaW4gdGhlIGRlZmF1bHQgc2VjdGlvbi4gU2FtZSBnb2VzIGZvcgorICBgYHBhcnNlci51cGRhdGUoeydERUZBVUxUJzoge319KWBgLgorCistIElzc3VlICM5NTg2OiBSZWRlZmluZSBTRU1fRkFJTEVEIG9uIE1hY09TWCB0byBrZWVwIGNvbXBpbGVyIGhhcHB5LgorCistIElzc3VlICMxNjc4NzogSW5jcmVhc2UgYXN5bmNvcmUgYW5kIGFzeW5jaGF0IGRlZmF1bHQgb3V0cHV0IGJ1ZmZlcnMgc2l6ZSwgdG8KKyAgZGVjcmVhc2UgQ1BVIHVzYWdlIGFuZCBpbmNyZWFzZSB0aHJvdWdocHV0LgorCistIElzc3VlICMxMDUyNzogbWFrZSBtdWx0aXByb2Nlc3NpbmcgdXNlIHBvbGwoKSBpbnN0ZWFkIG9mIHNlbGVjdCgpIGlmIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTY2ODg6IE5vdyByZWdleGVzIGNvbnRhaW5lZCBiYWNrcmVmZXJlbmNlcyBjb3JyZWN0bHkgd29yayB3aXRoCisgIG5vbi1BU0NJSSBzdHJpbmdzLiAgUGF0Y2ggYnkgTWF0dGhldyBCYXJuZXR0LgorCistIElzc3VlICMxNjQ4NjogTWFrZSBhaWZjIGZpbGVzIGFjdCBhcyBjb250ZXh0IG1hbmFnZXJzLgorCistIElzc3VlICMxNjQ4NTogTm93IGZpbGUgZGVzY3JpcHRvcnMgYXJlIGNsb3NlZCBpZiBmaWxlIGhlYWRlciBwYXRjaGluZyBmYWlsZWQKKyAgb24gY2xvc2luZyBhbiBhaWZjIGZpbGUuCisKKy0gSXNzdWUgIzE2NjQwOiBSdW4gbGVzcyBjb2RlIHVuZGVyIGEgbG9jayBpbiBzY2hlZCBtb2R1bGUuCisKKy0gSXNzdWUgIzE2MTY1OiBzY2hlZC5zY2hlZHVsZXIucnVuKCkgbm8gbG9uZ2VyIGJsb2NrcyBhIHNjaGVkdWxlciBmb3Igb3RoZXIKKyAgdGhyZWFkcy4KKworLSBJc3N1ZSAjMTY2NDE6IERlZmF1bHQgdmFsdWVzIG9mIHNjaGVkLnNjaGVkdWxlci5lbnRlcigpIGFyZSBubyBsb25nZXIKKyAgbW9kaWZpYWJsZS4KKworLSBJc3N1ZSAjMTY2MTg6IE1ha2UgZ2xvYi5nbG9iIG1hdGNoIGNvbnNpc3RlbnRseSBhY3Jvc3Mgc3RyaW5ncyBhbmQgYnl0ZXMKKyAgcmVnYXJkaW5nIGxlYWRpbmcgZG90cy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Nzg4OiBBZGQgc2FtZXN0YXQgdG8gTGliL250cGF0aC5weQorCistIElzc3VlICMxNjcxMzogUGFyc2luZyBvZiAndGVsJyB1cmxzIHVzaW5nIHVybHBhcnNlIHNlcGFyYXRlcyBwYXJhbXMgZnJvbQorICBwYXRoLgorCistIElzc3VlICMxNjQ0MzogQWRkIGRvY3N0cmluZ3MgdG8gcmVndWxhciBleHByZXNzaW9uIG1hdGNoIG9iamVjdHMuCisgIFBhdGNoIGJ5IEFudG9uIEthc3lhbm92LgorCistIElzc3VlICMxNTcwMTogRml4IEhUVFBFcnJvciBpbmZvIG1ldGhvZCBjYWxsIHRvIHJldHVybiB0aGUgaGVhZGVycyBpbmZvcm1hdGlvbi4KKworLSBJc3N1ZSAjMTY3NTI6IEFkZCBhIG1pc3NpbmcgaW1wb3J0IHRvIG1vZHVsZWZpbmRlci4gUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KKworLSBJc3N1ZSAjMTY2NDY6IGZ0cGxpYi5GVFAubWFrZXBvcnQoKSBtaWdodCBsb3NlIHNvY2tldCBlcnJvciBkZXRhaWxzLgorICAocGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSkKKworLSBJc3N1ZSAjMTY2MjY6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4gZ2xvYi5nbG9iKCkgb24gV2luZG93cyB3aGVuIHRoZQorICBwYXR0ZXJuIGNvbnRhaW5zIGEgd2lsZGNhcmQgaW4gdGhlIGRyaXZlIG9yIFVOQyBwYXRoLiAgUGF0Y2ggYnkgU2VyaGl5CisgIFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU3ODM6IEV4Y2VwdCBmb3IgdGhlIG51bWJlciBtZXRob2RzLCB0aGUgQyB2ZXJzaW9uIG9mIGRlY2ltYWwgbm93CisgIHN1cHBvcnRzIGFsbCBOb25lIGRlZmF1bHQgdmFsdWVzIHByZXNlbnQgaW4gZGVjaW1hbC5weS4gVGhlc2UgdmFsdWVzIHdlcmUKKyAgbGFyZ2VseSB1bmRvY3VtZW50ZWQuCisKKy0gSXNzdWUgIzExMTc1OiBhcmdwYXJzZS5GaWxlVHlwZSBub3cgYWNjZXB0cyBlbmNvZGluZyBhbmQgZXJyb3JzCisgIGFyZ3VtZW50cy4gUGF0Y2ggYnkgTHVjYXMgTWF5c3RyZS4KKworLSBJc3N1ZSAjMTY0ODg6IGVwb2xsKCkgb2JqZWN0cyBub3cgc3VwcG9ydCB0aGUgYHdpdGhgIHN0YXRlbWVudC4gIFBhdGNoCisgIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2Mjk4OiBJbiBIVFRQUmVzcG9uc2UucmVhZCgpLCBjbG9zZSB0aGUgc29ja2V0IHdoZW4gdGhlcmUgaXMgbm8KKyAgQ29udGVudC1MZW5ndGggYW5kIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgZmluaXNoZWQuICBQYXRjaCBieSBFcmFuCisgIFJ1bmRzdGVpbi4KKworLSBJc3N1ZSAjMTYwNDk6IEFkZCBhYmMuQUJDIGNsYXNzIHRvIGVuYWJsZSB0aGUgdXNlIG9mIGluaGVyaXRhbmNlIHRvIGNyZWF0ZQorICBBQkNzLCByYXRoZXIgdGhhbiB0aGUgbW9yZSBjdW1iZXJzb21lIG1ldGFjbGFzcz1BQkNNZXRhLiBQYXRjaCBieSBCcnVubworICBEdXB1aXMuCisKKy0gRXhwb3NlIHRoZSBUQ1BfRkFTVE9QRU4gYW5kIE1TR19GQVNUT1BFTiBmbGFncyBpbiBzb2NrZXQgd2hlbiB0aGV5J3JlCisgIGF2YWlsYWJsZS4KKworLSBJc3N1ZSAjMTU3MDE6IEFkZCBhIC5oZWFkZXJzIGF0dHJpYnV0ZSB0byB1cmxsaWIuZXJyb3IuSFRUUEVycm9yLiBQYXRjaAorICBjb250cmlidXRlZCBieSBCZXJrZXIgUGVrc2FnLgorCistIElzc3VlICMxNTg3MjogRml4IDMuMyByZWdyZXNzaW9uIGludHJvZHVjZWQgYnkgdGhlIG5ldyBmZC1iYXNlZCBzaHV0aWwucm10cmVlCisgIHRoYXQgY2F1c2VkIGl0IHRvIG5vdCBpZ25vcmUgY2VydGFpbiBlcnJvcnMgd2hlbiBpZ25vcmVfZXJyb3JzIHdhcyBzZXQuCisgIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEgYW5kIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MjQ4OiBEaXNhYmxlIGNvZGUgZXhlY3V0aW9uIGZyb20gdGhlIHVzZXIncyBob21lIGRpcmVjdG9yeSBieQorICB0a2ludGVyIHdoZW4gdGhlIC1FIGZsYWcgaXMgcGFzc2VkIHRvIFB5dGhvbi4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKworLSBJc3N1ZSAjMTMzOTA6IE5ldyBmdW5jdGlvbiA6ZnVuYzpgc3lzLmdldGFsbG9jYXRlZGJsb2NrcygpYCByZXR1cm5zIHRoZQorICBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBjdXJyZW50bHkgYWxsb2NhdGVkLgorCistIElzc3VlICMxNjYyODogRml4IGEgbWVtb3J5IGxlYWsgaW4gY3R5cGVzLnJlc2l6ZSgpLgorCistIElzc3VlICMxMzYxNDogRml4IHNldHVwLnB5IHJlZ2lzdGVyIGZhaWx1cmUgd2l0aCBpbnZhbGlkIHJzdCBpbiBkZXNjcmlwdGlvbi4KKyAgUGF0Y2ggYnkgSnVsaWVuIENvdXJ0ZWF1IGFuZCBQaWVycmUgUGF1bCBMZWZlYnZyZS4KKworLSBJc3N1ZSAjMTM1MTI6IENyZWF0ZSB+Ly5weXBpcmMgc2VjdXJlbHkgKENWRS0yMDExLTQ5NDQpLiAgSW5pdGlhbCBwYXRjaCBieQorICBQaGlsaXAgSmVudmV5LCB0ZXN0ZWQgYnkgTWFnZWlhIGFuZCBEZWJpYW4uCisKKy0gSXNzdWUgIzc3MTk6IE1ha2UgZGlzdHV0aWxzIGlnbm9yZSBgYC5uZnMqYGAgZmlsZXMgaW5zdGVhZCBvZiBjaG9raW5nIGxhdGVyCisgIG9uLiAgSW5pdGlhbCBwYXRjaCBieSBTaWxlbnRHaG9zdCBhbmQgSmVmZiBSYW1uYW5pLgorCistIElzc3VlICMxMzEyMDogQWxsb3cgdG8gY2FsbCBwZGIuc2V0X3RyYWNlKCkgZnJvbSB0aHJlYWQuCisgIFBhdGNoIGJ5IElseWEgU2FuZGxlci4KKworLSBJc3N1ZSAjMTY1ODU6IE1ha2UgQ0pLIGVuY29kZXJzIHN1cHBvcnQgZXJyb3IgaGFuZGxlcnMgdGhhdCByZXR1cm4gYnl0ZXMgcGVyCisgIFBFUCAzODMuCisKKy0gSXNzdWUgIzEwMTgyOiBUaGUgcmUgbW9kdWxlIGRvZXNuJ3QgdHJ1bmNhdGUgaW5kaWNlcyB0byAzMiBiaXRzIGFueW1vcmUuCisgIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MzMzOiB1c2UgKCIsIiwgIjogIikgYXMgZGVmYXVsdCBzZXBhcmF0b3IgaW4ganNvbiB3aGVuIGluZGVudCBpcworICBzcGVjaWZpZWQsIHRvIGF2b2lkIHRyYWlsaW5nIHdoaXRlc3BhY2UuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjU3MzogSW4gMnRvMywgdHJlYXQgZW51bWVyYXRlKCkgbGlrZSBhIGNvbnN1bWluZyBjYWxsLCBzbyBzdXBlcmZsdW91cworICBsaXN0KCkgY2FsbHMgYXJlbid0IGFkZGVkIHRvIGZpbHRlcigpLCBtYXAoKSwgYW5kIHppcCgpIHdoaWNoIGFyZSBkaXJlY3RseQorICBwYXNzZWQgZW51bWVyYXRlKCkuCisKKy0gSXNzdWUgIzE2NDY0OiBSZXNldCB0aGUgQ29udGVudC1MZW5ndGggaGVhZGVyIHdoZW4gYSB1cmxsaWIgUmVxdWVzdCBpcyByZXVzZWQKKyAgd2l0aCBuZXcgZGF0YS4KKworLSBJc3N1ZSAjMTI4NDg6IFRoZSBwdXJlIFB5dGhvbiBwaWNrbGUgaW1wbGVtZW50YXRpb24gbm93IHRyZWF0cyBvYmplY3QKKyAgbGVuZ3RocyBhcyB1bnNpZ25lZCAzMi1iaXQgaW50ZWdlcnMsIGxpa2UgdGhlIEMgaW1wbGVtZW50YXRpb24gZG9lcy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTY0MjM6IHVybGxpYi5yZXF1ZXN0IG5vdyBoYXMgc3VwcG9ydCBmb3IgYGBkYXRhOmBgIFVSTHMuICBQYXRjaCBieQorICBNYXRoaWFzIFBhbnplbmLDtmNrLgorCistIElzc3VlICM0NDczOiBBZGQgYSBQT1AzLnN0bHMoKSB0byBzd2l0Y2ggYSBjbGVhci10ZXh0IFBPUDMgc2Vzc2lvbiBpbnRvCisgIGFuIGVuY3J5cHRlZCBQT1AzIHNlc3Npb24sIG9uIHN1cHBvcnRlZCBzZXJ2ZXJzLiAgUGF0Y2ggYnkgTG9yZW56byBDYXR1Y2NpLgorCistIElzc3VlICM0NDczOiBBZGQgYSBQT1AzLmNhcGEoKSBtZXRob2QgdG8gcXVlcnkgdGhlIGNhcGFiaWxpdGllcyBhZHZlcnRpc2VkCisgIGJ5IHRoZSBQT1AzIHNlcnZlci4gIFBhdGNoIGJ5IExvcmVuem8gQ2F0dWNjaS4KKworLSBJc3N1ZSAjNDQ3MzogRW5zdXJlIHRoZSBzb2NrZXQgaXMgc2h1dGRvd24gY2xlYW5seSBpbiBQT1AzLmNsb3NlKCkuCisgIFBhdGNoIGJ5IExvcmVuem8gQ2F0dWNjaS4KKworLSBJc3N1ZSAjMTY1MjI6IGFkZGVkIEZBSUxfRkFTVCBmbGFnIHRvIGRvY3Rlc3QuCisKKy0gSXNzdWUgIzE1NjI3OiBBZGQgdGhlIGltcG9ydGxpYi5hYmMuSW5zcGVjdExvYWRlci5zb3VyY2VfdG9fY29kZSgpIG1ldGhvZC4KKworLSBJc3N1ZSAjMTY0MDg6IEZpeCBmaWxlIGRlc2NyaXB0b3JzIG5vdCBiZWluZyBjbG9zZWQgaW4gZXJyb3IgY29uZGl0aW9ucworICBpbiB0aGUgemlwZmlsZSBtb2R1bGUuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNDYzMTogQWRkIGEgbmV3IDpjbGFzczpgd2Vha3JlZi5XZWFrTWV0aG9kYCB0byBzaW11bGF0ZSB3ZWFrCisgIHJlZmVyZW5jZXMgdG8gYm91bmQgbWV0aG9kcy4KKworLSBJc3N1ZSAjMTY0Njk6IEZpeCBleGNlcHRpb25zIGZyb20gZmxvYXQgLT4gRnJhY3Rpb24gYW5kIERlY2ltYWwgLT4gRnJhY3Rpb24KKyAgY29udmVyc2lvbnMgZm9yIHNwZWNpYWwgdmFsdWVzIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aG9zZSBmb3IgZmxvYXQgLT4gaW50CisgIGFuZCBEZWNpbWFsIC0+IGludC4gIFBhdGNoIGJ5IEFsZXhleSBLYWNoYXlldi4KKworLSBJc3N1ZSAjMTY0ODE6IG11bHRpcHJvY2Vzc2luZyBubyBsb25nZXIgbGVha3MgcHJvY2VzcyBoYW5kbGVzIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzEyNDI4OiBBZGQgYSBwdXJlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBvZiBmdW5jdG9vbHMucGFydGlhbCgpLgorICBQYXRjaCBieSBCcmlhbiBUaG9ybmUuCisKKy0gSXNzdWUgIzE2MTQwOiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIGRvdWJsZSBjbG9zZXMgaXRzIGNoaWxkCisgIHN1YnByb2Nlc3MuUElQRSBwYXJlbnQgZmlsZSBkZXNjcmlwdG9ycyBvbiBjaGlsZCBlcnJvciBwcmlvciB0byBleGVjKCkuCisKKy0gUmVtb3ZlIGEgYmFyZSBwcmludCB0byBzdGRvdXQgZnJvbSB0aGUgc3VicHJvY2VzcyBtb2R1bGUgdGhhdCBjb3VsZCBoYXZlCisgIGhhcHBlbmVkIGlmIHRoZSBjaGlsZCBwcm9jZXNzIHdyb3RlIGdhcmJhZ2UgdG8gaXRzIHByZS1leGVjIGVycm9yIHBpcGUuCisKKy0gVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vdyByYWlzZXMgaXRzIG93biBTdWJwcm9jZXNzRXJyb3IgaW5zdGVhZCBvZiBhCisgIFJ1bnRpbWVFcnJvciBpbiB2YXJpb3VzIGVycm9yIHNpdHVhdGlvbnMgd2hpY2ggc2hvdWxkIG5vdCBub3JtYWxseSBoYXBwZW4uCisKKy0gSXNzdWUgIzE2MzI3OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIGxlYWtzIGZpbGUgZGVzY3JpcHRvcnMKKyAgdXNlZCBmb3Igc3RkaW4vc3Rkb3V0L3N0ZGVyciBwaXBlcyB0byB0aGUgY2hpbGQgd2hlbiBmb3JrKCkgZmFpbHMuCisKKy0gSXNzdWUgIzE0Mzk2OiBIYW5kbGUgdGhlIG9kZCByYXJlIGNhc2Ugb2Ygd2FpdHBpZCByZXR1cm5pbmcgMCB3aGVuIG5vdAorICBleHBlY3RlZCBpbiBzdWJwcm9jZXNzLlBvcGVuLndhaXQoKS4KKworLSBJc3N1ZSAjMTY0MTE6IEZpeCBhIGJ1ZyB3aGVyZSB6bGliLmRlY29tcHJlc3NvYmooKS5mbHVzaCgpIG1pZ2h0IHRyeSB0byBhY2Nlc3MKKyAgcHJldmlvdXNseS1mcmVlZCBtZW1vcnkuIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MzU3OiBmaXggY2FsbGluZyBhY2NlcHQoKSBvbiBhIFNTTFNvY2tldCBjcmVhdGVkIHRocm91Z2gKKyAgU1NMQ29udGV4dC53cmFwX3NvY2tldCgpLiAgT3JpZ2luYWwgcGF0Y2ggYnkgSmVmZiBNY05laWwuCisKKy0gSXNzdWUgIzE2NDA5OiBUaGUgcmVwb3J0aG9vayBjYWxsYmFjayBtYWRlIGJ5IHRoZSBsZWdhY3kKKyAgdXJsbGliLnJlcXVlc3QudXJscmV0cmlldmUgQVBJIG5vdyBwcm9wZXJseSBzdXBwbGllcyBhIGNvbnN0YW50IG5vbi16ZXJvCisgIGJsb2NrX3NpemUgYXMgaXQgZGlkIGluIFB5dGhvbiAzLjIgYW5kIDIuNy4gIFRoaXMgbWF0Y2hlcyB0aGUgYmVoYXZpb3Igb2YKKyAgdXJsbGliLnJlcXVlc3QuVVJMb3BlbmVyLnJldHJpZXZlLgorCistIElzc3VlICMxNjQzMTogVXNlIHRoZSB0eXBlIGluZm9ybWF0aW9uIHdoZW4gY29uc3RydWN0aW5nIGEgRGVjaW1hbCBzdWJ0eXBlCisgIGZyb20gYSBEZWNpbWFsIGFyZ3VtZW50LgorCistIElzc3VlICMxNTY0MTogQ2xlYW4gdXAgZGVwcmVjYXRlZCBjbGFzc2VzIGZyb20gaW1wb3J0bGliLgorICBQYXRjaCBieSBUYXJhcyBMeWFwdW4uCisKKy0gSXNzdWUgIzE2MzUwOiB6bGliLmRlY29tcHJlc3NvYmooKS5kZWNvbXByZXNzKCkgbm93IGFjY3VtdWxhdGVzIGRhdGEgZnJvbQorICBzdWNjZXNzaXZlIGNhbGxzIGFmdGVyIEVPRiBpbiB1bnVzZWRfZGF0YSwgaW5zdGVhZCBvZiBvbmx5IHNhdmluZyB0aGUgYXJndW1lbnQKKyAgdG8gdGhlIGxhc3QgY2FsbC4gZGVjb21wcmVzc29iaigpLmZsdXNoKCkgbm93IGNvcnJlY3RseSBzZXRzIHVudXNlZF9kYXRhIGFuZAorICB1bmNvbnN1bWVkX3RhaWwuIEEgYnVnIGluIHRoZSBoYW5kbGluZyBvZiBNZW1vcnlFcnJvciB3aGVuIHNldHRpbmcgdGhlCisgIHVuY29uc3VtZWRfdGFpbCBhdHRyaWJ1dGUgaGFzIGFsc28gYmVlbiBmaXhlZC4gUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTI3NTk6IHNyZV9wYXJzZSBub3cgcmFpc2VzIGEgcHJvcGVyIGVycm9yIHdoZW4gdGhlIG5hbWUgb2YgdGhlIGdyb3VwCisgIGlzIG1pc3NpbmcuICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzE2MTUyOiBmaXggdG9rZW5pemUgdG8gaWdub3JlIHdoaXRlc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgY29kZSB3aGVuCisgIG5vIG5ld2xpbmUgaXMgZm91bmQuICBQYXRjaCBieSBOZWQgQmF0Y2hlbGRlci4KKworLSBJc3N1ZSAjMTYyODQ6IFByZXZlbnQga2VlcGluZyB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzIHRvIHdvcmtlciBmdW5jdGlvbnMKKyAgaW4gY29uY3VycmVudC5mdXR1cmVzIFRocmVhZFBvb2xFeGVjdXRvci4KKworLSBJc3N1ZSAjMTYyMzA6IEZpeCBhIGNyYXNoIGluIHNlbGVjdC5zZWxlY3QoKSB3aGVuIG9uZSB0aGUgbGlzdHMgY2hhbmdlcworICBzaXplIHdoaWxlIGl0ZXJhdGVkIG9uLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTYyMjg6IEZpeCBhIGNyYXNoIGluIHRoZSBqc29uIG1vZHVsZSB3aGVyZSBhIGxpc3QgY2hhbmdlcyBzaXplCisgIHdoaWxlIGl0IGlzIGJlaW5nIGVuY29kZWQuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgorCistIElzc3VlICMxNjM1MTogTmV3IGZ1bmN0aW9uIGdjLmdldF9zdGF0cygpIHJldHVybnMgcGVyLWdlbmVyYXRpb24gY29sbGVjdGlvbgorICBzdGF0aXN0aWNzLgorCistIElzc3VlICMxNDg5NzogRW5oYW5jZSBlcnJvciBtZXNzYWdlcyBvZiBzdHJ1Y3QucGFjayBhbmQKKyAgc3RydWN0LnBhY2tfaW50by4gUGF0Y2ggYnkgTWF0dGkgTcOka2kuCisKKy0gSXNzdWUgIzE2MzE2OiBtaW1ldHlwZXMgbm93IHJlY29nbml6ZXMgdGhlIC54eiBhbmQgLnR4eiAoLnRhci54eikgZXh0ZW5zaW9ucy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTI4OTA6IGNnaXRiIG5vIGxvbmdlciBwcmludHMgc3B1cmlvdXMgPHA+IHRhZ3MgaW4gdGV4dAorICBtb2RlIHdoZW4gdGhlIGxvZ2RpciBvcHRpb24gaXMgc3BlY2lmaWVkLgorCistIElzc3VlICMxNjMwNzogRml4IG11bHRpcHJvY2Vzc2luZy5Qb29sLm1hcF9hc3luYyBub3QgY2FsbGluZyBpdHMgY2FsbGJhY2tzLgorICBQYXRjaCBieSBKYW5uZSBLYXJpbGEuCisKKy0gSXNzdWUgIzE2MzA1OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgb2NjdXJyaW5nIHdoZW4gaW50ZXJydXB0aW5nCisgIG1hdGguZmFjdG9yaWFsLgorCistIElzc3VlICMxNjExNjogRml4IGluY2x1ZGUgYW5kIGxpYnJhcnkgcGF0aHMgdG8gYmUgY29ycmVjdCB3aGVuIGJ1aWxkaW5nIEMKKyAgZXh0ZW5zaW9ucyBpbiB2ZW52cy4KKworLSBJc3N1ZSAjMTYyNDU6IEZpeCB0aGUgdmFsdWUgb2YgYSBmZXcgZW50aXRpZXMgaW4gaHRtbC5lbnRpdGllcy5odG1sNS4KKworLSBJc3N1ZSAjMTYzMDE6IEZpeCB0aGUgbG9jYWxob3N0IHZlcmlmaWNhdGlvbiBpbiB1cmxsaWIvcmVxdWVzdC5weSBmb3IgZmlsZTovLworICB1cmxzLgorCistIElzc3VlICMxNjI1MDogRml4IHRoZSBpbnZvY2F0aW9ucyBvZiBVUkxFcnJvciB3aGljaCBoYWQgbWlzcGxhY2VkIGZpbGVuYW1lCisgIGF0dHJpYnV0ZSBmb3IgZXhjZXB0aW9uLgorCistIElzc3VlICMxMDgzNjogRml4IGV4Y2VwdGlvbiByYWlzZWQgd2hlbiBmaWxlIG5vdCBmb3VuZCBpbiB1cmxyZXRyaWV2ZQorICBJbml0aWFsIHBhdGNoIGJ5IEV6aW8gTWVsb3R0aS4KKworLSBJc3N1ZSAjMTQzOTg6IEZpeCBzaXplIHRydW5jYXRpb24gYW5kIG92ZXJmbG93IGJ1Z3MgaW4gdGhlIGJ6MiBtb2R1bGUuCisKKy0gSXNzdWUgIzEyNjkyOiBGaXggcmVzb3VyY2UgbGVhayBpbiB1cmxsaWIucmVxdWVzdCB3aGVuIHRhbGtpbmcgdG8gYW4gSFRUUAorICBzZXJ2ZXIgdGhhdCBkb2VzIG5vdCBpbmNsdWRlIGEgYGBDb25uZWN0aW9uOiBjbG9zZWBgIGhlYWRlciBpbiBpdHMgcmVzcG9uc2VzLgorCistIElzc3VlICMxMjAzNDogRml4IGJvZ3VzIGNhY2hpbmcgb2YgcmVzdWx0IGluIGNoZWNrX0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZS4KKyAgUGF0Y2ggYnkgQXRzdW8gSXNoaW1vdG8uCisKKy0gSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiBgbHptYS5MWk1BRmlsZWAgKHNlZSBhbHNvIGlzc3VlICMxNjAzNCkuCisKKy0gSXNzdWUgIzE2MjIwOiB3c2dpcmVmIG5vdyBhbHdheXMgY2FsbHMgY2xvc2UoKSBvbiBhbiBpdGVyYWJsZSByZXNwb25zZS4KKyAgUGF0Y2ggYnkgQnJlbnQgVHViYnMuCisKKy0gSXNzdWUgIzE2MjcwOiB1cmxsaWIgbWF5IGhhbmcgd2hlbiB1c2VkIGZvciByZXRyaWV2aW5nIGZpbGVzIHZpYSBGVFAgYnkgdXNpbmcKKyAgYSBjb250ZXh0IG1hbmFnZXIuICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2xhJy4KKworLSBJc3N1ZSAjMTY0NjE6IFdhdmUgbGlicmFyeSBzaG91bGQgYmUgYWJsZSB0byBkZWFsIHdpdGggNEdCIHdhdiBmaWxlcywKKyAgYW5kIHNhbXBsZSByYXRlIG9mIDQ0MTAwIEh6LgorCistIElzc3VlICMxNjE3NjogUHJvcGVybHkgaWRlbnRpZnkgV2luZG93cyA4IHZpYSBwbGF0Zm9ybS5wbGF0Zm9ybSgpCisKKy0gSXNzdWUgIzE2MDg4OiBCYXNlSFRUUFJlcXVlc3RIYW5kbGVyJ3Mgc2VuZF9lcnJvciBtZXRob2QgaW5jbHVkZXMgYQorICBDb250ZW50LUxlbmd0aCBoZWFkZXIgaW4gaXQncyByZXNwb25zZSBub3cuIFBhdGNoIGJ5IEFudG9pbmUgUGl0cm91LgorCistIElzc3VlICMxNjExNDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBwcm92aWRlcyBhIG1pc2xlYWRpbmcgZXJyb3IKKyAgbWVzc2FnZSBzdGF0aW5nIHRoYXQgYXJnc1swXSBkaWQgbm90IGV4aXN0IHdoZW4gZWl0aGVyIHRoZSBjd2Qgb3IgZXhlY3V0YWJsZQorICBrZXl3b3JkIGFyZ3VtZW50cyBzcGVjaWZpZWQgYSBwYXRoIHRoYXQgZGlkIG5vdCBleGlzdC4KKworLSBJc3N1ZSAjMTYxNjk6IEZpeCBjdHlwZXMuV2luRXJyb3IoKSdzIGNvbmZ1c2lvbiBiZXR3ZWVuIGVycm5vIGFuZCB3aW5lcnJvci4KKworLSBJc3N1ZSAjMTYxMTA6IGxvZ2dpbmcuZmlsZUNvbmZpZyBub3cgYWNjZXB0cyBhIHByZS1pbml0aWFsaXNlZCBDb25maWdQYXJzZXIKKyAgaW5zdGFuY2UuCisKKy0gSXNzdWUgIzE0OTI3MDQ6IHNodXRpbC5jb3B5ZmlsZSgpIHJhaXNlcyBhIGRpc3RpbmN0IFNhbWVGaWxlRXJyb3Igbm93IGlmCisgIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYXJlIHRoZSBzYW1lIGZpbGUuIFBhdGNoIGJ5IEF0c3VvIElzaGltb3RvLgorCistIElzc3VlICMxMzg5NjogTWFrZSBzaGVsZiBpbnN0YW5jZXMgd29yayB3aXRoICd3aXRoJyBhcyBjb250ZXh0IG1hbmFnZXJzLgorICBPcmlnaW5hbCBwYXRjaCBieSBGaWxpcCBHcnVzemN6ecWEc2tpLgorCistIElzc3VlICMxNTQxNzogQWRkIHN1cHBvcnQgZm9yIGNzaCBhbmQgZmlzaCBpbiB2ZW52IGFjdGl2YXRpb24gc2NyaXB0cy4KKworLSBJc3N1ZSAjMTQzNzc6IEVsZW1lbnRUcmVlLndyaXRlIGFuZCBzb21lIG9mIHRoZSBtb2R1bGUtbGV2ZWwgZnVuY3Rpb25zIGhhdmUKKyAgYSBuZXcgcGFyYW1ldGVyIC0gKnNob3J0X2VtcHR5X2VsZW1lbnRzKi4gSXQgY29udHJvbHMgaG93IGVsZW1lbnRzIHdpdGggbm8KKyAgY29udGVudHMgYXJlIGVtaXR0ZWQuCisKKy0gSXNzdWUgIzE2MDg5OiBBbGxvdyBFbGVtZW50VHJlZS5UcmVlQnVpbGRlciB0byB3b3JrIGFnYWluIHdpdGggYSBub24tRWxlbWVudAorICBlbGVtZW50X2ZhY3RvcnkgKGZpeGVzIGEgcmVncmVzc2lvbiBpbiBTaW1wbGVUQUwpLgorCistIElzc3VlICM5NjUwOiBMaXN0IGNvbW1vbmx5IHVzZWQgZm9ybWF0IGNvZGVzIGluIHRpbWUuc3RyZnRpbWUgYW5kCisgIHRpbWUuc3RycHRpbWUgZG9jc3R0aW5ncy4gIE9yaWdpbmFsIHBhdGNoIGJ5IE1pa2UgSG95LgorCistIElzc3VlICMxNTQ1MjogbG9nZ2luZyBjb25maWd1cmF0aW9uIHNvY2tldCBsaXN0ZW5lciBub3cgaGFzIGEgdmVyaWZ5IG9wdGlvbgorICB0aGF0IGFsbG93cyBhbiBhcHBsaWNhdGlvbiB0byBhcHBseSBhIHZlcmlmaWNhdGlvbiBmdW5jdGlvbiB0byB0aGUKKyAgcmVjZWl2ZWQgY29uZmlndXJhdGlvbiBkYXRhIGJlZm9yZSBpdCBpcyBhY3RlZCB1cG9uLgorCistIElzc3VlICMxNjAzNDogRml4IHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb25zIGluIHRoZSBuZXcgYGJ6Mi5CWjJGaWxlYAorICBpbXBsZW1lbnRhdGlvbi4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBgcHR5LnNwYXduKClgIG5vdyByZXR1cm5zIHRoZSBjaGlsZCBwcm9jZXNzIHN0YXR1cyByZXR1cm5lZCBieSBgb3Mud2FpdHBpZCgpYC4KKworLSBJc3N1ZSAjMTU3NTY6IGBzdWJwcm9jZXNzLnBvbGwoKWAgbm93IHByb3Blcmx5IGhhbmRsZXMgYGVycm5vLkVDSElMRGAgdG8KKyAgcmV0dXJuIGEgcmV0dXJuY29kZSBvZiAwIHdoZW4gdGhlIGNoaWxkIGhhcyBhbHJlYWR5IGV4aXRlZCBvciBjYW5ub3QgYmUgd2FpdGVkCisgIG9uLgorCistIElzc3VlICMxNTMyMzogSW1wcm92ZSBmYWlsdXJlIG1lc3NhZ2Ugb2YgYE1vY2suYXNzZXJ0X2NhbGxlZF9vbmNlX3dpdGgoKWAuCisKKy0gSXNzdWUgIzE2MDY0OiBgYHVuaXR0ZXN0IC1tYGAgY2xhaW1zIGV4ZWN1dGFibGUgaXMgInB5dGhvbiIsIG5vdCAicHl0aG9uMyIuCisKKy0gSXNzdWUgIzEyMzc2OiBQYXNzIG9uIHBhcmFtZXRlcnMgaW4gYFRleHRUZXN0UmVzdWx0Ll9faW5pdF9fKClgIHN1cGVyIGNhbGwuCisKKy0gSXNzdWUgIzE1MjIyOiBJbnNlcnQgYmxhbmsgbGluZSBhZnRlciBlYWNoIG1lc3NhZ2UgaW4gbWJveCBtYWlsYm94ZXMuCisKKy0gSXNzdWUgIzE2MDEzOiBGaXggYGNzdi5SZWFkZXJgIHBhcnNpbmcgaXNzdWUgd2l0aCBlbmRpbmcgcXVvdGUgY2hhcmFjdGVycy4KKyAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KKworLSBJc3N1ZSAjMTU0MjE6IEZpeCBhbiBPdmVyZmxvd0Vycm9yIGluIGBDYWxlbmRhci5pdGVybW9udGhkYXRlcygpYCBhZnRlcgorICBgZGF0ZXRpbWUuTUFYWUVBUmAuICBQYXRjaCBieSBDw6lkcmljIEtyaWVyLgorCistIElzc3VlICMxNjExMjogcGxhdGZvcm0uYXJjaGl0ZWN0dXJlIGRvZXMgbm90IGNvcnJlY3RseSBlc2NhcGUgYXJndW1lbnQgdG8KKyAgL3Vzci9iaW4vZmlsZS4gIFBhdGNoIGJ5IERhdmlkIEJlbmphbWluLgorCistIElzc3VlICMxNTk3MDogYHhtbC5ldHJlZS5FbGVtZW50VHJlZWAgbm93IHNlcmlhbGl6ZXMgY29ycmVjdGx5IHRoZSBlbXB0eSBIVE1MCisgIGVsZW1lbnRzICdtZXRhJyBhbmQgJ3BhcmFtJy4KKworLSBJc3N1ZSAjMTU4NDI6IFRoZSBgU29ja2V0SU8ue3JlYWRhYmxlLHdyaXRhYmxlLHNlZWthYmxlfWAgbWV0aG9kcyBub3cgcmFpc2UKKyAgVmFsdWVFcnJvciB3aGVuIHRoZSBmaWxlLWxpa2Ugb2JqZWN0IGlzIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCisKKy0gSXNzdWUgIzE1ODc2OiBGaXggYSByZWZsZWFrIGluIHRoZSBgY3Vyc2VzYCBtb2R1bGU6IHdpbmRvdy5lbmNvZGluZy4KKworLSBJc3N1ZSAjMTU4ODE6IEZpeCBgYXRleGl0YCBob29rIGluIGBtdWx0aXByb2Nlc3NpbmdgLiAgT3JpZ2luYWwgcGF0Y2ggYnkgQ2hyaXMKKyAgTWNEb25vdWdoLgorCistIElzc3VlICMxNTg0MTogVGhlIHJlYWRhYmxlKCksIHdyaXRhYmxlKCkgYW5kIHNlZWthYmxlKCkgbWV0aG9kcyBvZgorICBgaW8uQnl0ZXNJT2AgYW5kIGBpby5TdHJpbmdJT2Agb2JqZWN0cyBub3cgcmFpc2UgVmFsdWVFcnJvciB3aGVuIHRoZSBvYmplY3QKKyAgaGFzIGJlZW4gY2xvc2VkLiAgUGF0Y2ggYnkgQWxlc3NhbmRybyBNb3VyYS4KKworLSBJc3N1ZSAjMTU0NDc6IFVzZSBgc3VicHJvY2Vzcy5ERVZOVUxMYCBpbiB3ZWJicm93c2VyLCBpbnN0ZWFkIG9mIG9wZW5pbmcKKyAgYG9zLmRldm51bGxgIGV4cGxpY2l0bHkgYW5kIGxlYXZpbmcgaXQgb3Blbi4KKworLSBJc3N1ZSAjMTU1MDk6IGB3ZWJicm93c2VyLlVuaXhCcm93c2VyYCBubyBsb25nZXIgcGFzc2VzIGVtcHR5IGFyZ3VtZW50cyB0bworICBQb3BlbiB3aGVuIGBgJWFjdGlvbmBgIHN1YnN0aXR1dGlvbnMgcHJvZHVjZSBlbXB0eSBzdHJpbmdzLgorCistIElzc3VlICMxMjc3NiwgaXNzdWUgIzExODM5OiBDYWxsIGBhcmdwYXJzZWAgdHlwZSBmdW5jdGlvbiAoc3BlY2lmaWVkIGJ5CisgIGFkZF9hcmd1bWVudCkgb25seSBvbmNlLiBCZWZvcmUsIHRoZSB0eXBlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgdHdpY2UgaW4gdGhlCisgIGNhc2Ugd2hlcmUgdGhlIGRlZmF1bHQgd2FzIHNwZWNpZmllZCBhbmQgdGhlIGFyZ3VtZW50IHdhcyBnaXZlbiBhcyB3ZWxsLiAgVGhpcworICB3YXMgZXNwZWNpYWxseSBwcm9ibGVtYXRpYyBmb3IgdGhlIEZpbGVUeXBlIHR5cGUsIGFzIGEgZGVmYXVsdCBmaWxlIHdvdWxkCisgIGFsd2F5cyBiZSBvcGVuZWQsIGV2ZW4gaWYgYSBmaWxlIGFyZ3VtZW50IHdhcyBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKworLSBJc3N1ZSAjMTU5MDY6IEZpeCBhIHJlZ3Jlc3Npb24gaW4gYXJncGFyc2UgY2F1c2VkIGJ5IHRoZSBwcmVjZWRpbmcgY2hhbmdlLAorICB3aGVuIGBgYWN0aW9uPSdhcHBlbmQnYGAsIGBgdHlwZT0nc3RyJ2BgIGFuZCBgYGRlZmF1bHQ9W11gYC4KKworLSBJc3N1ZSAjMTYxMTM6IEFkZGVkIHNoYTMgbW9kdWxlIGJhc2VkIG9uIHRoZSBLZWNjYWsgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uCisgIDMuMi4gVGhlIGBoYXNobGliYCBtb2R1bGUgaGFzIGZvdXIgYWRkaXRpb25hbCBoYXNoIGFsZ29yaXRobXM6IGBzaGEzXzIyNGAsCisgIGBzaGEzXzI1NmAsIGBzaGEzXzM4NGAgYW5kIGBzaGEzXzUxMmAuIEFzIHBhcnQgb2YgdGhlIHBhdGNoIHNvbWUgY29tbW9uCisgIGNvZGUgd2FzIG1vdmVkIGZyb20gX2hhc2hvcGVuc3NsLmMgdG8gaGFzaGxpYi5oLgorCistIGN0eXBlcy5jYWxsX2NvbW1ldGhvZCB3YXMgcmVtb3ZlZCwgc2luY2UgaXRzIG9ubHkgdXNhZ2Ugd2FzIGluIHRoZSBkZWZ1bmN0CisgIHNhbXBsZXMgZGlyZWN0b3J5LgorCistIElzc3VlICMxNjY5MjogQWRkZWQgVExTdjEuMSBhbmQgVExTdjEuMiBzdXBwb3J0IGZvciB0aGUgc3NsIG1vZHVsZXMuCisKKy0gSXNzdWUgIzE2ODMyOiBhZGQgYWJjLmdldF9jYWNoZV90b2tlbigpIHRvIGV4cG9zZSBjYWNoZSB2YWxpZGl0eSBjaGVja2luZworICBzdXBwb3J0IGluIEFCQ01ldGEuCiAKIElETEUKIC0tLS0KIAotLSBJc3N1ZSAjMTg4NzM6IElETEUgbm93IGRldGVjdHMgUHl0aG9uIHNvdXJjZSBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudAotICBsaW5lcy4KLQotLSBJc3N1ZSAjMTg5ODg6IFRoZSAiVGFiIiBrZXkgbm93IHdvcmtzIHdoZW4gYSB3b3JkIGlzIGFscmVhZHkgYXV0b2NvbXBsZXRlZC4KLQotLSBJc3N1ZSAjMTg0ODk6IEFkZCB0ZXN0cyBmb3IgU2VhcmNoRW5naW5lLiBPcmlnaW5hbCBwYXRjaCBieSBQaGlsIFdlYnN0ZXIuCi0KIC0gSXNzdWUgIzE4NDI5OiBGb3JtYXQgLyBGb3JtYXQgUGFyYWdyYXBoLCBub3cgd29ya3Mgd2hlbiBjb21tZW50IGJsb2NrcwogICBhcmUgc2VsZWN0ZWQuIEFzIHdpdGggdGV4dCBibG9ja3MsIHRoaXMgd29ya3MgYmVzdCB3aGVuIHRoZSBzZWxlY3Rpb24KICAgb25seSBpbmNsdWRlcyBjb21wbGV0ZSBsaW5lcy4KQEAgLTEyODgsMzggKzU4ODgsNzMgQEAKIAogLSBJc3N1ZSAjMTQxNDY6IEhpZ2hsaWdodCBzb3VyY2UgbGluZSB3aGlsZSBkZWJ1Z2dpbmcgb24gV2luZG93cy4KIAorLSBJc3N1ZSAjMTc4Mzg6IEFsbG93IHN5cy5zdGRpbiB0byBiZSByZWFzc2lnbmVkLgorCistIElzc3VlICMxMzQ5NTogQXZvaWQgbG9hZGluZyB0aGUgY29sb3IgZGVsZWdhdG9yIHR3aWNlIGluIElETEUuCisKKy0gSXNzdWUgIzE3Nzk4OiBBbGxvdyBJRExFIHRvIGVkaXQgbmV3IGZpbGVzIHdoZW4gc3BlY2lmaWVkIG9uIGNvbW1hbmQgbGluZS4KKworLSBJc3N1ZSAjMTQ3MzU6IFVwZGF0ZSBJRExFIGRvY3MgdG8gb21pdCAiQ29udHJvbC16IG9uIFdpbmRvd3MiLgorCiAtIElzc3VlICMxNzUzMjogQWx3YXlzIGluY2x1ZGUgT3B0aW9ucyBtZW51IGZvciBJRExFIG9uIE9TIFguCiAgIFBhdGNoIGJ5IEd1aWxoZXJtZSBTaW3DtWVzLgogCistIElzc3VlICMxNzU4NTogRml4ZWQgSURMRSByZWdyZXNzaW9uLiBOb3cgY2xvc2VzIHdoZW4gdXNpbmcgZXhpdCgpIG9yIHF1aXQoKS4KKworLSBJc3N1ZSAjMTc2NTc6IFNob3cgZnVsbCBUayB2ZXJzaW9uIGluIElETEUncyBhYm91dCBkaWFsb2cuCisgIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNzYxMzogUHJldmVudCB0cmFjZWJhY2sgd2hlbiByZW1vdmluZyBzeW50YXggY29sb3JpemVyIGluIElETEUuCisKKy0gSXNzdWUgIzEyMDc1ODk6IEJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHBhdGNoIGZvciByaWdodC1jbGljayBtZW51IGluIElETEUuCisKKy0gSXNzdWUgIzE2ODg3OiBJRExFIG5vdyBhY2NlcHRzIENhbmNlbCBpbiB0YWJpZnkvdW50YWJpZnkgZGlhbG9nIGJveC4KKworLSBJc3N1ZSAjMTc2MjU6IEluIElETEUsIGNsb3NlIHRoZSByZXBsYWNlIGRpYWxvZyBhZnRlciBpdCBpcyB1c2VkLgorCistIElzc3VlICMxNDI1NDogSURMRSBub3cgaGFuZGxlcyByZWFkbGluZSBjb3JyZWN0bHkgYWNyb3NzIHNoZWxsIHJlc3RhcnRzLgorCistIElzc3VlICMxNzYxNDogSURMRSBubyBsb25nZXIgcmFpc2VzIGV4Y2VwdGlvbiB3aGVuIHF1aWNrbHkgY2xvc2luZyBhIGZpbGUuCisKKy0gSXNzdWUgIzY2OTg6IElETEUgbm93IG9wZW5zIGp1c3QgYW4gZWRpdG9yIHdpbmRvdyB3aGVuIGNvbmZpZ3VyZWQgdG8gZG8gc28uCisKKy0gSXNzdWUgIzg5MDA6IFVzaW5nIGtleWJvYXJkIHNob3J0Y3V0cyBpbiBJRExFIHRvIG9wZW4gYSBmaWxlIG5vIGxvbmdlcgorICByYWlzZXMgYW4gZXhjZXB0aW9uLgorCistIElzc3VlICM2NjQ5OiBGaXhlZCBtaXNzaW5nIGV4aXQgc3RhdHVzIGluIElETEUuIFBhdGNoIGJ5IEd1aWxoZXJtZSBQb2xvLgorCistIElzc3VlICMxNzExNDogSURMRSBub3cgdXNlcyBub24tc3RyaWN0IGNvbmZpZyBwYXJzZXIuCisKKy0gSXNzdWUgIzkyOTA6IEluIElETEUgdGhlIHN5cy5zdGQqIHN0cmVhbXMgbm93IGltcGxlbWVudCBpby5UZXh0SU9CYXNlCisgIGludGVyZmFjZSBhbmQgc3VwcG9ydCBhbGwgbWFuZGF0b3J5IG1ldGhvZHMgYW5kIHByb3BlcnRpZXMuCisKKy0gSXNzdWUgIzUwNjY6IFVwZGF0ZSBJRExFIGRvY3MuIFBhdGNoIGJ5IFRvZGQgUm92aXRvLgorCistIElzc3VlICMxNjgyOTogSURMRSBwcmludGluZyBubyBsb25nZXIgZmFpbHMgaWYgdGhlcmUgYXJlIHNwYWNlcyBvciBvdGhlcgorICBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgcGF0aC4KKworLSBJc3N1ZSAjMTY0OTE6IElETEUgbm93IHByaW50cyBjaGFpbmVkIGV4Y2VwdGlvbiB0cmFjZWJhY2tzLgorCistIElzc3VlICMxNjgxOTogSURMRSBtZXRob2QgY29tcGxldGlvbiBub3cgY29ycmVjdGx5IHdvcmtzIGZvciBieXRlcyBsaXRlcmFscy4KKworLSBJc3N1ZSAjMTY1MDQ6IElETEUgbm93IGNhdGNoZXMgU3ludGF4RXJyb3JzIHJhaXNlZCBieSB0b2tlbml6ZXIuIFBhdGNoIGJ5CisgIFJvZ2VyIFNlcnd5LgorCistIElzc3VlICMxNjUxMTogVXNlIGRlZmF1bHQgSURMRSB3aWR0aCBhbmQgaGVpZ2h0IGlmIGNvbmZpZyBwYXJhbSBpcyBub3QgdmFsaWQuCisgIFBhdGNoIFNlcmhpeSBTdG9yY2hha2EuCisKKy0gSXNzdWUgIzEyMDc1ODk6IEFkZCBDdXQvQ29weS9QYXN0ZSBpdGVtcyB0byBJRExFIHJpZ2h0IGNsaWNrIENvbnRleHQgTWVudS4KKyAgUGF0Y2ggYnkgVG9kZCBSb3ZpdG8uCisKKy0gSXNzdWUgIzE2MTIzOiBJRExFIC0gZGVwcmVjYXRlIHJ1bm5pbmcgd2l0aG91dCBhIHN1YnByb2Nlc3MuCisgIFBhdGNoIGJ5IFJvZ2VyIFNlcnd5LgorCiBUZXN0cwogLS0tLS0KIAotLSBJc3N1ZSAjMTQ0MDc6IEZpeCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeSBpbiB0ZXN0X2NvbmN1cnJlbnRfZnV0dXJlcy4KLQotLSBJc3N1ZSAjMTg5MTk6IFVuaWZpZWQgYW5kIGV4dGVuZGVkIHRlc3RzIGZvciBhdWRpbyBtb2R1bGVzOiBhaWZjLCBzdW5hdSBhbmQKLSAgd2F2ZS4KLQotLSBJc3N1ZSAjMTg5NTI6IEZpeCByZWdyZXNzaW9uIGluIHN1cHBvcnQgZGF0YSBkb3dubG9hZHMgaW50cm9kdWNlZCB3aGVuCi0gIHRlc3Quc3VwcG9ydCB3YXMgY29udmVydGVkIHRvIGEgcGFja2FnZS4gUmVncmVzc2lvbiBub3RpY2VkIGJ5IFphY2hhcnkKLSAgV2FyZS4KLQotLSBJc3N1ZSAjMTIwMzc6IEZpeCB0ZXN0X2VtYWlsIGZvciBkZXNrdG9wIFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE1NTA3OiB0ZXN0X3N1YnByb2Nlc3MncyB0ZXN0X3NlbmRfc2lnbmFsIGNvdWxkIGZhaWwgaWYgdGhlIHRlc3QKLSAgcnVubmVyIHdlcmUgcnVuIGluIGFuIGVudmlyb25tZW50IHdoZXJlIHRoZSBwcm9jZXNzIGluaGVyaXRlZCBhbiBpZ25vcmUKLSAgc2V0dGluZyBmb3IgU0lHSU5ULiAgUmVzdG9yZSB0aGUgU0lHSU5UIGhhbmRsZXIgdG8gdGhlIGRlc2lyZWQKLSAgS2V5Ym9hcmRJbnRlcnJ1cHQgcmFpc2luZyBvbmUgZHVyaW5nIHRoYXQgdGVzdC4KLQotLSBJc3N1ZSAjMTg3OTI6IFVzZSAiMTI3LjAuMC4xIiBvciAiOjoxIiBpbnN0ZWFkIG9mICJsb2NhbGhvc3QiIGFzIG11Y2ggYXMKLSAgcG9zc2libGUsIHNpbmNlICJsb2NhbGhvc3QiIGdvZXMgdGhyb3VnaCBhIEROUyBsb29rdXAgdW5kZXIgcmVjZW50IFdpbmRvd3MKLSAgdmVyc2lvbnMuCi0KIC0gSXNzdWUgIzE2NjYzMTg6IEFkZCBhIHRlc3QgdGhhdCBzaHV0aWwuY29weXRyZWUoKSByZXRhaW5zIGRpcmVjdG9yeQogICBwZXJtaXNzaW9ucy4gIFBhdGNoIGJ5IENhdGhlcmluZSBEZXZsaW4uCiAKLS0gSXNzdWUgIzE4MzU3OiBhZGQgdGVzdHMgZm9yIGRpY3R2aWV3IHNldCBkaWZmZXJlbmNlLgotICBQYXRjaCBieSBGcmFzZXIgVHdlZWRhbGUuCi0KIC0gSXNzdWUgIzE4MjczOiBtb3ZlIHRoZSB0ZXN0cyBpbiBMaWIvdGVzdC9qc29uX3Rlc3RzIHRvIExpYi90ZXN0L3Rlc3RfanNvbgogICBhbmQgbWFrZSB0aGVtIGRpc2NvdmVyYWJsZSBieSB1bml0dGVzdC4gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIApAQCAtMTM1MSwyODUgKzU5ODYsMTMgQEAKIAogLSBJc3N1ZSAjMTExODU6IEZpeCB0ZXN0X3dhaXQ0IHVuZGVyIEFJWC4gIFBhdGNoIGJ5IFPDqWJhc3RpZW4gU2FibMOpLgogCi0tIElzc3VlICMxNzY5MTogdGVzdF91bml2bmV3bGluZXMgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCi0gIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KKy0gSXNzdWUgIzE4MjA3OiBGaXggdGVzdF9zc2wgZm9yIHNvbWUgdmVyc2lvbnMgb2YgT3BlblNTTCB0aGF0IGlnbm9yZSBzZWNvbmRzCisgIGluIEFTTjFfVElNRSBmaWVsZHMuCiAKLS0gSXNzdWUgIzE4MDk0OiB0ZXN0X3V1aWQgbm8gbW9yZSByZXBvcnRzIHNraXBwZWQgdGVzdHMgYXMgcGFzc2VkLgorLSBJc3N1ZSAjMTgwOTQ6IHRlc3RfdXVpZCBubyBsb25nZXIgcmVwb3J0cyBza2lwcGVkIHRlc3RzIGFzIHBhc3NlZC4KIAotLSBJc3N1ZSAjMTE5OTU6IHRlc3RfcHlkb2MgZG9lc24ndCBpbXBvcnQgYWxsIHN5cy5wYXRoIG1vZHVsZXMgYW55bW9yZS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxOTM5MjogRG9jdW1lbnQgdGhhdCBgaW1wLnJlbG9hZCgpYCBub3cgYWxzbyByZXF1aXJlcyBgX19sb2FkZXJfX2AgdG8KLSAgYmUgc2V0IG9uIHRoZSBtb2R1bGUgYmVpbmcgcmVsb2FkZWQuCi0KLS0gSXNzdWUgIzE4NzU4OiBGaXhlZCBhbmQgaW1wcm92ZWQgY3Jvc3MtcmVmZXJlbmNlcy4KLQotLSBJc3N1ZSAjMTg3NDM6IEZpeCByZWZlcmVuY2VzIHRvIG5vbi1leGlzdGFudCAiU3RyaW5nSU8iIG1vZHVsZS4KLQotLSBJc3N1ZSAjMTg3ODM6IFJlbW92ZWQgZXhpc3RpbmcgbWVudGlvbnMgb2YgUHl0aG9uIGxvbmcgdHlwZSBpbiBkb2NzdHJpbmdzLAotICBlcnJvciBtZXNzYWdlcyBhbmQgY29tbWVudHMuCi0KLS0gSXNzdWUgIzE3NzAxOiBJbXByb3Zpbmcgc3RyZnRpbWUgZG9jdW1lbnRhdGlvbi4KLQotLSBJc3N1ZSAjMTg0NDA6IENsYXJpZnkgdGhhdCBgaGFzaCgpYCBjYW4gdHJ1bmNhdGUgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gYW4KLSAgb2JqZWN0J3MgY3VzdG9tIGBfX2hhc2hfXygpYCBtZXRob2QuCi0KLS0gSXNzdWUgIzE3OTUzOiBNZW50aW9uIHRoYXQgeW91IHNob3VsZG4ndCByZXBsYWNlIHN5cy5tb2R1bGVzIGFuZCBkZWxldGluZyBrZXkKLSAgaXRlbXMgd2lsbCBjYXVzZSBQeXRob24gdG8gbm90IGJlIGhhcHB5LgotCi0tIElzc3VlICMxNzg0NDogQWRkIGxpbmtzIHRvIGVuY29kZXJzIGFuZCBkZWNvZGVycyBmb3IgYnl0ZXMtdG8tYnl0ZXMgY29kZWNzLgotCi0tIElzc3VlICMxNDA5NzogaW1wcm92ZSB0aGUgImludHJvZHVjdGlvbiIgcGFnZSBvZiB0aGUgdHV0b3JpYWwuCi0KLS0gSXNzdWUgIzE3OTc3OiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNhZGVmYXVsdCBhcmd1bWVudCdzIGRlZmF1bHQgdmFsdWUKLSAgaW4gdXJsbGliLnJlcXVlc3QudXJsb3BlbigpIGlzIGZpeGVkIHRvIG1hdGNoIHRoZSBjb2RlLgotCi1Ub29scy9EZW1vcwotLS0tLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTg4NzM6IDJ0bzMgYW5kIHRoZSBmaW5kbm9jb2RpbmcucHkgc2NyaXB0IG5vdyBkZXRlY3QgUHl0aG9uIHNvdXJjZQotICBjb2RlIGVuY29kaW5nIG9ubHkgaW4gY29tbWVudCBsaW5lcy4KLQotLSBJc3N1ZSAjMTg4MTc6IEZpeCBhIHJlc291cmNlIHdhcm5pbmcgaW4gTGliL2FpZmMucHkgZGVtby4KLQotLSBJc3N1ZSAjMTg0Mzk6IE1ha2UgcGF0Y2hjaGVjayB3b3JrIG9uIFdpbmRvd3MgZm9yIEFDS1MsIE5FV1MuCi0KLS0gSXNzdWUgIzE4NDQ4OiBGaXggYSB0eXBvIGluIFRvb2xzL2RlbW8vZWlmZmVsLnB5LgotCi0tIElzc3VlICMxODQ1NzogRml4ZWQgc2F2aW5nIG9mIGZvcm11bGFzIGFuZCBjb21wbGV4IG51bWJlcnMgaW4KLSAgVG9vbHMvZGVtby9zczEucHkuCi0KLS0gSXNzdWUgIzE4NDQ5OiBNYWtlIFRvb2xzL2RlbW8vc3MxLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuICBQYXRjaCBieQotICBGw6l2cnkgVGhpYmF1bHQuCi0KLS0gSXNzdWUgIzE1MjM5OiBNYWtlIG1rc3RyaW5ncHJlcC5weSB3b3JrIGFnYWluIG9uIFB5dGhvbiAzLgotCi0tIElzc3VlICMxMjk5MDogVGhlICJQeXRob24gTGF1bmNoZXIiIG9uIE9TWCBjb3VsZCBub3QgbGF1bmNoIHB5dGhvbiBzY3JpcHRzCi0gIHRoYXQgaGF2ZSBwYXRocyB0aGF0IGluY2x1ZGUgd2lkZSBjaGFyYWN0ZXJzLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTkzNTY6IEF2b2lkIHVzaW5nIGEgQyB2YXJpYWJsZWQgbmFtZWQgIl9zZWxmIiwgaXQncyBhIHJlc2VydmVkCi0gIHdvcmQgaW4gc29tZSBDIGNvbXBpbGVycy4KLQotLSBJc3N1ZSAjMTkxMzA6IENvcnJlY3QgUENidWlsZC9yZWFkbWUudHh0LCBQeXRob24gMy4zIGFuZCAzLjQgcmVxdWlyZSBWUyAyMDEwLgotCi0tIElzc3VlICMxNjA2NzogQWRkIGRlc2NyaXB0aW9uIGludG8gTVNJIGZpbGUgdG8gcmVwbGFjZSBpbnN0YWxsZXIncyB0ZW1wb3JhcnkgbmFtZS4KLQotLSBJc3N1ZSAjMTgyNTY6IENvbXBpbGF0aW9uIGZpeCBmb3IgcmVjZW50IEFJWCByZWxlYXNlcy4gIFBhdGNoIGJ5Ci0gIERhdmlkIEVkZWxzb2huLgotCi0tIElzc3VlICMxNTE3MjogRG9jdW1lbnQgTkFTTSAyLjEwKyBhcyByZXF1aXJlbWVudCBmb3IgYnVpbGRpbmcgT3BlblNTTCAxLjAuMQotICBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNTg0OiBQcm92aWRlIG9wdGlvbnMgdG8gb3ZlcnJpZGUgZGVmYXVsdCBzZWFyY2ggcGF0aHMgZm9yCi0gIFRjbCBhbmQgVGsgd2hlbiBidWlsZGluZyBfdGtpbnRlci4KLQotLSBJc3N1ZSAjMTU2NjM6IFRjbC9UayA4LjUuMTUgaXMgbm93IGluY2x1ZGVkIHdpdGggdGhlIE9TIFggMTAuNisKLSAgNjQtYml0LzMyLWJpdCBpbnN0YWxsZXIgZm9yIDEwLjYrLiAgSXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeQotICB0byBpbnN0YWxsIGEgdGhpcmQtcGFydHkgdmVyc2lvbiBvZiBUY2wvVGsgOC41IHRvIHdvcmsgYXJvdW5kIHRoZQotICBwcm9ibGVtcyBpbiB0aGUgQXBwbGUtc3VwcGxpZWQgVGNsL1RrIDguNSBzaGlwcGVkIGluIE9TIFggMTAuNgotICBhbmQgbGF0ZXIgcmVsZWFzZXMuCi0KLS0gSXNzdWUgIzE5MDE5OiBDaGFuZ2UgdGhlIE9TIFggaW5zdGFsbGVyIGJ1aWxkIHNjcmlwdCB0byB1c2UgQ0ZMQUdTIGluc3RlYWQKLSAgb2YgT1BUIGZvciBzcGVjaWFsIGJ1aWxkIG9wdGlvbnMuICBCeSBzZXR0aW5nIE9QVCwgc29tZSBjb21waWxlci1zcGVjaWZpYwotICBvcHRpb25zIGxpa2UgLWZ3cmFwdiB3ZXJlIG92ZXJyaWRkZW4gYW5kIHRodXMgbm90IHVzZWQsIHdoaWNoIGNvdWxkIHJlc3VsdAotICBpbiBicm9rZW4gaW50ZXJwcmV0ZXJzIHdoZW4gYnVpbGRpbmcgd2l0aCBjbGFuZy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMj8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAxMy1NYXktMjAxMyoKLQotQ29yZSBhbmQgQnVpbHRpbnMKLS0tLS0tLS0tLS0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3MjM3OiBGaXggY3Jhc2ggaW4gdGhlIEFTQ0lJIGRlY29kZXIgb24gbTY4ay4KLQotLSBJc3N1ZSAjMTc0MDg6IEF2b2lkIHVzaW5nIGFuIG9ic29sZXRlIGluc3RhbmNlIG9mIHRoZSBjb3B5cmVnIG1vZHVsZSB3aGVuCi0gIHRoZSBpbnRlcnByZXRlciBpcyBzaHV0ZG93biBhbmQgdGhlbiBzdGFydGVkIGFnYWluLgotCi0tIElzc3VlICMxNzg2MzogSW4gdGhlIGludGVyYWN0aXZlIGNvbnNvbGUsIGRvbid0IGxvb3AgZm9yZXZlciBpZiB0aGUgZW5jb2RpbmcKLSAgY2FuJ3QgYmUgZmV0Y2hlZCBmcm9tIHN0ZGluLgotCi0tIElzc3VlICMxNzg2NzogUmFpc2UgYW4gSW1wb3J0RXJyb3IgaWYgX19pbXBvcnRfXyBpcyBub3QgZm91bmQgaW4gX19idWlsdGluc19fLgotCi0tIElzc3VlICMxNzg1NzogUHJldmVudCBidWlsZCBmYWlsdXJlcyB3aXRoIHByZS0zLjUuMCB2ZXJzaW9ucyBvZiBzcWxpdGUzLAotICBzdWNoIGFzIHdhcyBzaGlwcGVkIHdpdGggQ2VudG9zIDUgYW5kIE1hYyBPUyBYIDEwLjQuCi0KLS0gSXNzdWUgIzE3NDEzOiBzeXMuc2V0dHJhY2UgY2FsbGJhY2tzIHdlcmUgYmVpbmcgcGFzc2VkIGEgc3RyaW5nIGluc3RlYWQgb2YgYW4KLSAgZXhjZXB0aW9uIGluc3RhbmNlIGZvciB0aGUgJ3ZhbHVlJyBlbGVtZW50IG9mIHRoZSBhcmcgdHVwbGUgaWYgdGhlIGV4Y2VwdGlvbgotICBvcmlnaW5hdGVkIGZyb20gQyBjb2RlOyBub3cgYW4gZXhjZXB0aW9uIGluc3RhbmNlIGlzIGFsd2F5cyBwcm92aWRlZC4KLQotLSBJc3N1ZSAjMTc3ODI6IEZpeCB1bmRlZmluZWQgYmVoYXZpb3VyIG9uIHBsYXRmb3JtcyB3aGVyZQotICBgYHN0cnVjdCB0aW1lc3BlY2BgJ3MgInR2X25zZWMiIG1lbWJlciBpcyBub3QgYSBDIGxvbmcuCi0KLS0gSXNzdWUgIzE3NzE1OiBGaXggc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gcmFpc2luZyBhbiBleGNlcHRpb24gaW4gYSBfX3RydW5jX18KLSAgbWV0aG9kLgotCi0tIElzc3VlICMxNjQ0NzogRml4ZWQgcG90ZW50aWFsIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIHNldHRpbmcgX19uYW1lX18gb24gYQotICBjbGFzcy4KLQotLSBJc3N1ZSAjMTc2Njk6IEZpeCBjcmFzaCBpbnZvbHZpbmcgZmluYWxpemF0aW9uIG9mIGdlbmVyYXRvcnMgdXNpbmcgeWllbGQgZnJvbS4KLQotLSBJc3N1ZSAjMTc2MTk6IE1ha2UgaW5wdXQoKSBjaGVjayBmb3IgQ3RybC1DIGNvcnJlY3RseSBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNzYxMDogRG9uJ3QgcmVseSBvbiBub24tc3RhbmRhcmQgYmVoYXZpb3Igb2YgdGhlIEMgcXNvcnQoKSBmdW5jdGlvbi4KLQotLSBJc3N1ZSAjMTczNTc6IEFkZCBtaXNzaW5nIHZlcmJvc2l0eSBvdXRwdXQgd2hlbiB1c2luZyAtdi8tdnYuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc2MDY6IEZpeGVkIHN1cHBvcnQgb2YgZW5jb2RlZCBieXRlIHN0cmluZ3MgaW4gdGhlIFhNTEdlbmVyYXRvcgotICBjaGFyYWN0ZXJzKCkgYW5kIGlnbm9yYWJsZVdoaXRlc3BhY2UoKSBtZXRob2RzLiAgT3JpZ2luYWwgcGF0Y2ggYnkgU2ViYXN0aWFuCi0gIE9ydGl6IFZhc3F1ZXouCi0KLS0gSXNzdWUgIzE3NzMyOiBJZ25vcmUgZGlzdHV0aWxzLmNmZyBvcHRpb25zIHBlcnRhaW5pbmcgdG8gaW5zdGFsbCBwYXRocyBpZiBhCi0gIHZpcnR1YWwgZW52aXJvbm1lbnQgaXMgYWN0aXZlLgotCi0tIElzc3VlICMxMTU5MDUxOiBCYWNrIG91dCBhIGZpeCBmb3IgaGFuZGxpbmcgY29ycnVwdGVkIGd6aXAgZmlsZXMgdGhhdAotICBicm9rZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLQotLSBJc3N1ZSAjMTc5MTU6IEZpeCBpbnRlcm9wZXJhYmlsaXR5IG9mIHhtbC5zYXggd2l0aCBmaWxlIG9iamVjdHMgcmV0dXJuZWQgYnkKLSAgY29kZWNzLm9wZW4oKS4KLQotLSBJc3N1ZSAjMTY2MDE6IFJlc3RhcnRpbmcgaXRlcmF0aW9uIG92ZXIgdGFyZmlsZSBubyBtb3JlIGNvbnRpbnVlcyBmcm9tIHdoZXJlCi0gIGl0IGxlZnQgb2ZmLiAgUGF0Y2ggYnkgTWljaGFlbCBCaXJ0d2VsbC4KLQotLSBJc3N1ZSAjMTcyODk6IFRoZSByZWFkbGluZSBtb2R1bGUgbm93IHBsYXlzIG5pY2VyIHdpdGggZXh0ZXJuYWwgbW9kdWxlcwotICBvciBhcHBsaWNhdGlvbnMgY2hhbmdpbmcgdGhlIHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMgZ2xvYmFsCi0gIHZhcmlhYmxlLiAgSW5pdGlhbCBwYXRjaCBieSBCcmFkbGV5IEZyb2VobGUuCi0KLS0gSXNzdWUgIzEyMTgxOiBzZWxlY3QgbW9kdWxlOiBGaXggc3RydWN0IGtldmVudCBkZWZpbml0aW9uIG9uIE9wZW5CU0QgNjQtYml0Ci0gIHBsYXRmb3Jtcy4gUGF0Y2ggYnkgRmVkZXJpY28gU2Nod2luZHQuCi0KLS0gSXNzdWUgIzE0MTczOiBBdm9pZCBjcmFzaGluZyB3aGVuIHJlYWRpbmcgYSBzaWduYWwgaGFuZGxlciBkdXJpbmcKLSAgaW50ZXJwcmV0ZXIgc2h1dGRvd24uCi0KLS0gSXNzdWUgIzE2MzE2OiBtaW1ldHlwZXMgbm93IHJlY29nbml6ZXMgdGhlIC54eiBhbmQgLnR4eiAoLnRhci54eikgZXh0ZW5zaW9ucy4KLQotLSBJc3N1ZSAjMTU5MDI6IEZpeCBpbXAubG9hZF9tb2R1bGUoKSBhY2NlcHRpbmcgTm9uZSBhcyBhIGZpbGUgd2hlbiBsb2FkaW5nIGFuCi0gIGV4dGVuc2lvbiBtb2R1bGUuCi0KLS0gSXNzdWUgIzE3ODAyOiBGaXggYW4gVW5ib3VuZExvY2FsRXJyb3IgaW4gaHRtbC5wYXJzZXIuICBJbml0aWFsIHRlc3RzIGJ5Ci0gIFRob21hcyBCYXJsb3cuCi0KLS0gSXNzdWUgIzE1NTM1OiBGaXggbmFtZWR0dXBsZSBwaWNrbGVzIHdoaWNoIHdlcmUgcGlja2luZyB1cCB0aGUgT3JkZXJlZERpY3QKLSAgaW5zdGVhZCBvZiBqdXN0IHRoZSB1bmRlcmx5aW5nIHR1cGxlLgotCi0tIElzc3VlICMxNzE5MjogUmVzdG9yZSB0aGUgcGF0Y2ggZm9yIElzc3VlICMxMTcyOSB3aGljaCB3YXMgb21taXR0ZWQgaW4KLSAgMy4zLjEgd2hlbiB1cGRhdGluZyB0aGUgYnVuZGxlZCB2ZXJzaW9uIG9mIGxpYmZmaSB1c2VkIGJ5IGN0eXBlcy4gIFVwZGF0ZQotICBtYW55IGxpYmZmaSBmaWxlcyB0aGF0IHdlcmUgbWlzc2VkIGluIDMuMy4xJ3MgdXBkYXRlIHRvIGxpYmZmaS0zLjAuMTMuCi0KLS0gSXNzdWUgIzE3MzU4OiBNb2R1bGVzIGxvYWRlZCBieSBpbXAubG9hZF9zb3VyY2UoKSBhbmQgbG9hZF9jb21waWxlZCgpIChhbmQgYnkKLSAgZXh0ZW50aW9uIGxvYWRfbW9kdWxlKCkpIG5vdyBoYXZlIGEgYmV0dGVyIGNoYW5jZSBvZiB3b3JraW5nIHdoZW4gcmVsb2FkZWQuCi0KLS0gSXNzdWUgIzE3MzUzOiBQbGlzdGxpYiBlbWl0dGVkIGVtcHR5IGRhdGEgdGFncyB3aXRoIGRlZXBseSBuZXN0ZWQgZGF0YXN0cnVjdHVyZXMKLQotLSBJc3N1ZSAjMTE3MTQ6IFVzZSAnd2l0aCcgc3RhdGVtZW50cyB0byBhc3N1cmUgYSBTZW1hcGhvcmUgcmVsZWFzZXMgYQotICBjb25kaXRpb24gdmFyaWFibGUuICBPcmlnaW5hbCBwYXRjaCBieSBUaG9tYXMgUmFjaGVsLgotCi0tIElzc3VlICMxNzc5NTogUmV2ZXJ0ZWQgYmFja3dhcmRzLWluY29tcGF0aWJsZSBjaGFuZ2UgaW4gU3lzTG9nSGFuZGxlciB3aXRoCi0gIFVuaXggZG9tYWluIHNvY2tldHMuCi0KLS0gSXNzdWUgIzE3NTU1OiBGaXggRm9ya0F3YXJlVGhyZWFkTG9jayBzbyB0aGF0IHNpemUgb2YgYWZ0ZXIgZm9yawotICByZWdpc3RyeSBkb2VzIG5vdCBncm93IGV4cG9uZW50aWFsbHkgd2l0aCBnZW5lcmF0aW9uIG9mIHByb2Nlc3MuCi0KLS0gSXNzdWUgIzE3NzA3OiBtdWx0aXByb2Nlc3NpbmcuUXVldWUncyBnZXQoKSBtZXRob2QgZG9lcyBub3QgYmxvY2sgZm9yIHNob3J0Ci0gIHRpbWVvdXRzLgotCi0tIElzdXNlICMxNzcyMDogRml4IHRoZSBQeXRob24gaW1wbGVtZW50YXRpb24gb2YgcGlja2xlLlVucGlja2xlciB0byBjb3JyZWN0bHkKLSAgcHJvY2VzcyB0aGUgQVBQRU5EUyBvcGNvZGUgd2hlbiBpdCBpcyB1c2VkIG9uIG5vbi1saXN0IG9iamVjdHMuCi0KLS0gSXNzdWUgIzE3MDEyOiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgZmFsbGJhY2tzIHRvIHRoZSBQQVRIIGVudmlyb25tZW50Ci0gIHZhcmlhYmxlIGlmIGVtcHR5IHBhdGggYXJndW1lbnQgaXMgc3BlY2lmaWVkLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTc3MTA6IEZpeCBwaWNrbGUgcmFpc2luZyBhIFN5c3RlbUVycm9yIG9uIGJvZ3VzIGlucHV0LgotCi0tIElzc3VlICMxNzM0MTogSW5jbHVkZSB0aGUgaW52YWxpZCBuYW1lIGluIHRoZSBlcnJvciBtZXNzYWdlcyBmcm9tIHJlIGFib3V0Ci0gIGludmFsaWQgZ3JvdXAgbmFtZXMuCi0KLS0gSXNzdWUgIzE3NzAyOiBvcy5lbnZpcm9uIG5vdyByYWlzZXMgS2V5RXJyb3Igd2l0aCB0aGUgb3JpZ2luYWwgZW52aXJvbm1lbnQKLSAgdmFyaWFibGUgbmFtZSAoc3RyIG9uIFVOSVgpLCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBlbmNvZGVkIG5hbWUgKGJ5dGVzIG9uCi0gIFVOSVgpLgotCi0tIElzc3VlICMxNjE2MzogTWFrZSB0aGUgaW1wb3J0bGliIGJhc2VkIHZlcnNpb24gb2YgcGtndXRpbC5pdGVyX2ltcG9ydGVycwotICB3b3JrIGZvciBzdWJtb2R1bGVzLiBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcuCi0KLS0gSXNzdWUgIzE2ODA0OiBGaXggYSBidWcgaW4gdGhlICdzaXRlJyBtb2R1bGUgdGhhdCBjYXVzZWQgcnVubmluZwotICAncHl0aG9uIC1TIC1tIHNpdGUnIHRvIGluY29ycmVjdGx5IHRocm93IGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjMTcwMTY6IEdldCByaWQgb2YgcG9zc2libGUgcG9pbnRlciB3cmFwYXJvdW5kcyBhbmQgaW50ZWdlciBvdmVyZmxvd3MKLSAgaW4gdGhlIHJlIG1vZHVsZS4gIFBhdGNoIGJ5IE5pY2tvbGFpIFplbGRvdmljaC4KLQotLSBJc3N1ZSAjMTY2NTg6IGFkZCBtaXNzaW5nIHJldHVybiB0byBIVFRQQ29ubmVjdGlvbi5zZW5kKCkKLSAgUGF0Y2ggYnkgSmVmZiBLbnVwcC4KLQotLSBJc3N1ZSAjMTQ5NzE6IHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5IG5vIGxvbmdlciBnZXRzIGNvbmZ1c2VkIHdoZW4gYSBmdW5jdGlvbgotICBoYXMgYSBkaWZmZXJlbnQgX19uYW1lX18gdGhhbiBpdHMgbmFtZSBpbiB0aGUgVGVzdENhc2UgY2xhc3MgZGljdGlvbmFyeS4KLQotLSBJc3N1ZSAjMTc2Nzg6IEZpeCBEZXByZWNhdGlvbldhcm5pbmcgaW4gdGhlIGh0dHAvY29va2llamFyLnB5IGJ5IGNoYW5naW5nIHRoZQotICB1c2FnZSBvZiBnZXRfb3JpZ2luX3JlcV9ob3N0KCkgdG8gb3JpZ2luX3JlcV9ob3N0LgotCi0tIElzc3VlICMxNzY2NjogRml4IHJlYWRpbmcgZ3ppcCBmaWxlcyB3aXRoIGFuIGV4dHJhIGZpZWxkLgotCi0tIElzc3VlICMxNzUwMjogUHJvY2VzcyBERUZBVUxUIHZhbHVlcyBpbiBtb2NrIHNpZGVfZWZmZWN0IHRoYXQgcmV0dXJucyBpdGVyYXRvci4KLSAgUGF0Y2ggYnkgTWljaGFlbCBGb29yZC4KLQotLSBJc3N1ZSAjMTc1NzI6IEF2b2lkIGNoYWluZWQgZXhjZXB0aW9ucyB3aGlsZSBwYXNzaW5nIGJhZCBkaXJlY3RpdmVzIHRvCi0gIHRpbWUuc3RycHRpbWUoKS4gIEluaXRpYWwgcGF0Y2ggYnkgQ2xhdWRpdSBQb3BhLgotCi0tIElzc3VlICMxNzQzNTogdGhyZWFkaW5nLlRpbWVyJ3MgX19pbml0X18gbWV0aG9kIG5vIGxvbmdlciB1c2VzIG11dGFibGUKLSAgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBhcmdzIGFuZCBrd2FyZ3MgcGFyYW1ldGVycy4KLQotLSBJc3N1ZSAjMTc1MjY6IGZpeCBhbiBJbmRleEVycm9yIHJhaXNlZCB3aGlsZSBwYXNzaW5nIGNvZGUgd2l0aG91dCBmaWxlbmFtZSB0bwotICBpbnNwZWN0LmZpbmRzb3VyY2UoKS4gIEluaXRpYWwgcGF0Y2ggYnkgVHlsZXIgRG95bGUuCi0KLS0gSXNzdWUgIzE2NTUwOiBVcGRhdGUgdGhlIG9wY29kZSBkZXNjcmlwdGlvbnMgb2YgcGlja2xldG9vbHMgdG8gdXNlIHVuc2lnbmVkCi0gIGludGVnZXJzIHdoZXJlIGFwcHJvcHJpYXRlLiAgSW5pdGlhbCBwYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi1JRExFCi0tLS0tCi0KLS0gSXNzdWUgIzE3ODM4OiBBbGxvdyBzeXMuc3RkaW4gdG8gYmUgcmVhc3NpZ25lZC4KLQotLSBJc3N1ZSAjMTM0OTU6IEF2b2lkIGxvYWRpbmcgdGhlIGNvbG9yIGRlbGVnYXRvciB0d2ljZSBpbiBJRExFLgotCi0tIElzc3VlICMxNzc5ODogQWxsb3cgSURMRSB0byBlZGl0IG5ldyBmaWxlcyB3aGVuIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUuCi0KLS0gSXNzdWUgIzE0NzM1OiBVcGRhdGUgSURMRSBkb2NzIHRvIG9taXQgIkNvbnRyb2wteiBvbiBXaW5kb3dzIi4KLQotLSBJc3N1ZSAjMTc1ODU6IEZpeGVkIElETEUgcmVncmVzc2lvbi4gTm93IGNsb3NlcyB3aGVuIHVzaW5nIGV4aXQoKSBvciBxdWl0KCkuCi0KLS0gSXNzdWUgIzE3NjU3OiBTaG93IGZ1bGwgVGsgdmVyc2lvbiBpbiBJRExFJ3MgYWJvdXQgZGlhbG9nLgotICBQYXRjaCBieSBUb2RkIFJvdml0by4KLQotLSBJc3N1ZSAjMTc2MTM6IFByZXZlbnQgdHJhY2ViYWNrIHdoZW4gcmVtb3Zpbmcgc3ludGF4IGNvbG9yaXplciBpbiBJRExFLgotCi0tIElzc3VlICMxMjA3NTg5OiBCYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBwYXRjaCBmb3IgcmlnaHQtY2xpY2sgbWVudSBpbiBJRExFLgotCi0tIElzc3VlICMxNjg4NzogSURMRSBub3cgYWNjZXB0cyBDYW5jZWwgaW4gdGFiaWZ5L3VudGFiaWZ5IGRpYWxvZyBib3guCi0KLS0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KLQotLSBJc3N1ZSAjMTQyNTQ6IElETEUgbm93IGhhbmRsZXMgcmVhZGxpbmUgY29ycmVjdGx5IGFjcm9zcyBzaGVsbCByZXN0YXJ0cy4KLQotLSBJc3N1ZSAjMTc2MTQ6IElETEUgbm8gbG9uZ2VyIHJhaXNlcyBleGNlcHRpb24gd2hlbiBxdWlja2x5IGNsb3NpbmcgYSBmaWxlLgotCi0tIElzc3VlICM2Njk4OiBJRExFIG5vdyBvcGVucyBqdXN0IGFuIGVkaXRvciB3aW5kb3cgd2hlbiBjb25maWd1cmVkIHRvIGRvIHNvLgotCi0tIElzc3VlICM4OTAwOiBVc2luZyBrZXlib2FyZCBzaG9ydGN1dHMgaW4gSURMRSB0byBvcGVuIGEgZmlsZSBubyBsb25nZXIKLSAgcmFpc2VzIGFuIGV4Y2VwdGlvbi4KLQotLSBJc3N1ZSAjNjY0OTogRml4ZWQgbWlzc2luZyBleGl0IHN0YXR1cyBpbiBJRExFLiBQYXRjaCBieSBHdWlsaGVybWUgUG9sby4KLQotVGVzdHMKLS0tLS0tCistIElzc3VlICMxNzk5MjogQWRkIHRpbWVvdXRzIHRvIGFzeW5jb3JlIGFuZCBhc3luY2hhdCB0ZXN0cyBzbyB0aGF0IHRoZXkgd29uJ3QKKyAgYWNjaWRlbnRhbGx5IGhhbmcuCiAKIC0gSXNzdWUgIzE3ODMzOiBGaXggdGVzdF9nZGIgZmFpbHVyZXMgc2VlbiBvbiBtYWNoaW5lcyB3aGVyZSBkZWJ1ZyBzeW1ib2xzCiAgIGZvciBnbGliYyBhcmUgYXZhaWxhYmxlIChzZWVuIG9uIFBQQzY0IExpbnV4KS4KQEAgLTE2MzcsNiArNjAwMCw5IEBACiAtIElzc3VlICM3ODU1OiBBZGQgdGVzdHMgZm9yIGN0eXBlcy93aW5yZWcgZm9yIGlzc3VlcyBmb3VuZCBpbiBJcm9uUHl0aG9uLgogICBJbml0aWFsIHBhdGNoIGJ5IERpbm8gVmllaGxhbmQuCiAKKy0gSXNzdWUgIzExMDc4OiB0ZXN0X19fYWxsX18gbm93IGNoZWNrcyBmb3IgZHVwbGljYXRlcyBpbiBfX2FsbF9fLgorICBJbml0aWFsIHBhdGNoIGJ5IFIuIERhdmlkIE11cnJheS4KKwogLSBJc3N1ZSAjMTc3MTI6IEZpeCB0ZXN0X2dkYiBmYWlsdXJlcyBvbiBVYnVudHUgMTMuMDQuCiAKIC0gSXNzdWUgIzE3ODM1OiBGaXggdGVzdF9pbyB3aGVuIHRoZSBkZWZhdWx0IE9TIHBpcGUgYnVmZmVyIHNpemUgaXMgbGFyZ2VyCkBAIC0xNjQ4LDYgKzYwMTQsOSBAQAogLSBJc3N1ZSAjMTI4MjA6IGFkZCB0ZXN0cyBmb3IgdGhlIHhtbC5kb20ubWluaWNvbXBhdCBtb2R1bGUuCiAgIFBhdGNoIGJ5IEpvaG4gQ2hhbmRsZXIgYW5kIFBoaWwgQ29ubmVsbC4KIAorLSBJc3N1ZSAjMTc2OTE6IHRlc3RfdW5pdm5ld2xpbmVzIG5vdyB3b3JrcyB3aXRoIHVuaXR0ZXN0IHRlc3QgZGlzY292ZXJ5LgorICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCisKIC0gSXNzdWUgIzE3NzkwOiB0ZXN0X3NldCBub3cgd29ya3Mgd2l0aCB1bml0dGVzdCB0ZXN0IGRpc2NvdmVyeS4KICAgUGF0Y2ggYnkgWmFjaGFyeSBXYXJlLgogCkBAIC0xNjY2LDcxNiArNjAzNSw3IEBACiAtIElzc3VlICMxNzY5MjogdGVzdF9zcWxpdGUgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAgIFBhdGNoIGJ5IFphY2hhcnkgV2FyZS4KIAotLSBJc3N1ZSAjMTc4NDM6IFJlbW92ZWQgYnoyIHRlc3QgZGF0YSBmaWxlIHRoYXQgd2FzIHRyaWdnZXJpbmcgZmFsc2UtcG9zaXRpdmUKLSAgdmlydXMgd2FybmluZ3Mgd2l0aCBjZXJ0YWluIGFudGl2aXJ1cyBzb2Z0d2FyZS4KLQotRG9jdW1lbnRhdGlvbgotLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNTk0MDogU3BlY2lmeSBlZmZlY3Qgb2YgbG9jYWxlIG9uIHRpbWUgZnVuY3Rpb25zLgotCi0tIElzc3VlICM2Njk2OiBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFByb2ZpbGUgb2JqZWN0cywgYW5kIGltcHJvdmUKLSAgcHJvZmlsZS9jUHJvZmlsZSBkb2NzLiAgUGF0Y2ggYnkgVG9tIFBpbmNrbmV5LgotCi0tIElzc3VlICMxNzkxNTogRml4IGludGVyb3BlcmFiaWxpdHkgb2YgeG1sLnNheCB3aXRoIGZpbGUgb2JqZWN0cyByZXR1cm5lZCBieQotICBjb2RlY3Mub3BlbigpLgotCi1CdWlsZAotLS0tLS0KLQotLSBJc3N1ZSAjMTc1NDc6IEluIGNvbmZpZ3VyZSwgZXhwbGljaXRseSBwYXNzIC1XZm9ybWF0IGZvciB0aGUgYmVuZWZpdCBmb3IgR0NDCi0gIDQuOC4KLQotLSBJc3N1ZSAjMTc5NjI6IEJ1aWxkIHdpdGggT3BlblNTTCAxLjAuMWUgb24gV2luZG93cy4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMT8KLT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0qUmVsZWFzZSBkYXRlOiAwNy1BcHItMjAxMyoKLQotQnVpbGQKLS0tLS0tCi0KLS0gSXNzdWUgIzE3NTUwOiBGaXggdGhlIC0tZW5hYmxlLXByb2ZpbGluZyBjb25maWd1cmUgc3dpdGNoLgotCi1JRExFCi0tLS0tLS0tCi0KLS0gSXNzdWUgIzE3NjI1OiBJbiBJRExFLCBjbG9zZSB0aGUgcmVwbGFjZSBkaWFsb2cgYWZ0ZXIgaXQgaXMgdXNlZC4KLQotCi1XaGF0J3MgTmV3IGluIFB5dGhvbiAzLjMuMSByZWxlYXNlIGNhbmRpZGF0ZSAxPwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotKlJlbGVhc2UgZGF0ZTogMjQtTWFyLTIwMTMqCi0KLUNvcmUgYW5kIEJ1aWx0aW5zCi0tLS0tLS0tLS0tLS0tLS0tLQotCi0tIElzc3VlICMxNzMyODogRml4IHBvc3NpYmxlIHJlZmxlYWsgaW4gZGljdC5zZXRkZWZhdWx0LgotCi0tIElzc3VlICMxNzIyMzogRml4IFB5VW5pY29kZV9Gcm9tVW5pY29kZSgpIGZvciBzdHJpbmcgb2YgMSBjaGFyYWN0ZXIgb3V0c2lkZQotICB0aGUgcmFuZ2UgVSswMDAwLVUrMTBmZmZmLgotCi0tIElzc3VlICMxNjkyMzM1OiBNb3ZlIGluaXRpYWwgYXJncyBhc3NpZ25tZW50IHRvCi0gIEJhc2VFeGNlcHRpb24uX19uZXdfXyB0byBoZWxwIHBpY2tsaW5nIG9mIG5haXZlIHN1YmNsYXNzZXMuCi0KLS0gSXNzdWUgIzE3Mjc1OiBDb3JyZWN0ZWQgY2xhc3MgbmFtZSBpbiBpbml0IGVycm9yIG1lc3NhZ2VzIG9mIHRoZSBDIHZlcnNpb24gb2YKLSAgQnVmZmVyZWRXcml0ZXIgYW5kIEJ1ZmZlcmVkUmFuZG9tLgotCi0tIElzc3VlICM3OTYzOiBGaXhlZCBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2UgdGhhdCBpc3N1ZWQgd2hlbiBvYmplY3QgaXMKLSAgY2FsbGVkIHdpdGhvdXQgYXJndW1lbnRzLgotCi0tIElzc3VlICM1MzA4OiBSYWlzZSBWYWx1ZUVycm9yIHdoZW4gbWFyc2hhbGxpbmcgdG9vIGxhcmdlIG9iamVjdCAoYSBzZXF1ZW5jZQotICB3aXRoIHNpemUgPj0gMioqMzEpLCBpbnN0ZWFkIG9mIHByb2R1Y2luZyBpbGxlZ2FsIG1hcnNoYWwgZGF0YS4KLQotLSBJc3N1ZSAjMTI5ODM6IEJ5dGVzIGxpdGVyYWxzIHdpdGggaW52YWxpZCBceCBlc2NhcGUgbm93IHJhaXNlIGEgU3ludGF4RXJyb3IKLSAgYW5kIGEgZnVsbCB0cmFjZWJhY2sgaW5jbHVkaW5nIGxpbmUgbnVtYmVyLgotCi0tIElzc3VlICMxNzE3MzogUmVtb3ZlIHVzZXMgb2YgbG9jYWxlLWRlcGVuZGVudCBDIGZ1bmN0aW9ucyAoaXNhbHBoYSgpIGV0Yy4pCi0gIGluIHRoZSBpbnRlcnByZXRlci4KLQotLSBJc3N1ZSAjMTcxMzc6IFdoZW4gYW4gVW5pY29kZSBzdHJpbmcgaXMgcmVzaXplZCwgdGhlIGludGVybmFsIHdpZGUgY2hhcmFjdGVyCi0gIHN0cmluZyAod3N0cikgZm9ybWF0IGlzIG5vdyBjbGVhcmVkLgotCi0tIElzc3VlICMxNzA0MzogVGhlIHVuaWNvZGUtaW50ZXJuYWwgZGVjb2RlciBubyBsb25nZXIgcmVhZCBwYXN0IHRoZSBlbmQgb2YKLSAgaW5wdXQgYnVmZmVyLgotCi0tIElzc3VlICMxNzA5ODogQWxsIG1vZHVsZXMgbm93IGhhdmUgX19sb2FkZXJfXyBzZXQgZXZlbiBpZiB0aGV5IHByZS1leGlzdCB0aGUKLSAgYm9vdHN0cmFwcGluZyBvZiBpbXBvcnRsaWIuCi0KLS0gSXNzdWUgIzE2OTc5OiBGaXggZXJyb3IgaGFuZGxpbmcgYnVncyBpbiB0aGUgdW5pY29kZS1lc2NhcGUtZGVjb2RlIGRlY29kZXIuCi0KLS0gSXNzdWUgIzEwMTU2OiBJbiB0aGUgaW50ZXJwcmV0ZXIncyBpbml0aWFsaXphdGlvbiBwaGFzZSwgdW5pY29kZSBnbG9iYWxzCi0gIGFyZSBub3cgaW5pdGlhbGl6ZWQgZHluYW1pY2FsbHkgYXMgbmVlZGVkLgotCi0tIElzc3VlICMxNjk4MDogRml4IHByb2Nlc3Npbmcgb2YgZXNjYXBlZCBub24tYXNjaWkgYnl0ZXMgaW4gdGhlCi0gIHVuaWNvZGUtZXNjYXBlLWRlY29kZSBkZWNvZGVyLgotCi0tIElzc3VlICMxNjk3NTogRml4IGVycm9yIGhhbmRsaW5nIGJ1ZyBpbiB0aGUgZXNjYXBlLWRlY29kZSBieXRlcyBkZWNvZGVyLgotCi0tIElzc3VlICMxNDg1MDogTm93IGEgY2hhcm1hcCBkZWNvZGVyIHRyZWF0cyBVK0ZGRkUgYXMgInVuZGVmaW5lZCBtYXBwaW5nIgotICBpbiBhbnkgbWFwcGluZywgbm90IG9ubHkgaW4gYSBzdHJpbmcuCi0KLS0gSXNzdWUgIzE2NzMwOiBpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIgbm93IG5vIGxvbmdlcnMgcmFpc2VzIGFuCi0gIGV4Y2VwdGlvbiB3aGVuIHRyeWluZyB0byBwb3B1bGF0ZSBpdHMgY2FjaGUgYW5kIGl0IGZpbmRzIG91dCB0aGUgZGlyZWN0b3J5IGlzCi0gIHVucmVhZGFibGUgb3IgaGFzIHR1cm5lZCBpbnRvIGEgZmlsZS4gUmVwb3J0ZWQgYW5kIGRpYWdub3NlZCBieQotICBEYXZpZCBQcml0Y2hhcmQuCi0KLS0gSXNzdWUgIzE2OTA2OiBGaXggYSBsb2dpYyBlcnJvciB0aGF0IHByZXZlbnRlZCBtb3N0IHN0YXRpYyBzdHJpbmdzIGZyb20gYmVpbmcKLSAgY2xlYXJlZC4KLQotLSBJc3N1ZSAjMTE0NjE6IEZpeCB0aGUgaW5jcmVtZW50YWwgVVRGLTE2IGRlY29kZXIuIE9yaWdpbmFsIHBhdGNoIGJ5Ci0gIEFtYXVyeSBGb3JnZW90IGQnQXJjLgotCi0tIElzc3VlICMxNjg1NjogRml4IGEgc2VnbWVudGF0aW9uIGZhdWx0IGZyb20gY2FsbGluZyByZXByKCkgb24gYSBkaWN0IHdpdGgKLSAgYSBrZXkgd2hvc2UgcmVwciByYWlzZSBhbiBleGNlcHRpb24uCi0KLS0gSXNzdWUgIzE2MzY3OiBGaXggRmlsZUlPLnJlYWRhbGwoKSBvbiBXaW5kb3dzIGZvciBmaWxlcyBsYXJnZXIgdGhhbiAyIEdCLgotCi0tIElzc3VlICMxNjQ1NTogT24gRnJlZUJTRCBhbmQgU29sYXJpcywgaWYgdGhlIGxvY2FsZSBpcyBDLCB0aGUKLSAgQVNDSUkvc3Vycm9nYXRlZXNjYXBlIGNvZGVjIGlzIG5vdyB1c2VkLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcsIHRvCi0gIGRlY29kZSB0aGUgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4gVGhpcyBjaGFuZ2UgZml4ZXMgaW5jb25zaXN0ZW5jaWVzIHdpdGgKLSAgb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBiZWNhdXNlIHRoZXNlIG9wZXJhdGluZyBzeXN0ZW1zIGFubm91bmNlcyBhbgotICBBU0NJSSBsb2NhbGUgZW5jb2RpbmcsIHdoZXJlYXMgdGhlIElTTy04ODU5LTEgZW5jb2RpbmcgaXMgdXNlZCBpbiBwcmFjdGljZS4KLQotLSBJc3N1ZSAjMTY3NjE6IENhbGxpbmcgaW50KCkgd2l0aCBiYXNlIGFyZ3VtZW50IG9ubHkgbm93IHJhaXNlcyBUeXBlRXJyb3IuCi0KLS0gSXNzdWUgIzE2NzU5OiBTdXBwb3J0IHRoZSBmdWxsIERXT1JEICh1bnNpZ25lZCBsb25nKSByYW5nZSBpbiBSZWcyUHkKLSAgd2hlbiByZXRyaWV2aW5nIGEgUkVHX0RXT1JEIHZhbHVlLiBUaGlzIGNvcnJlY3RzIGZ1bmN0aW9ucyBsaWtlCi0gIHdpbnJlZy5RdWVyeVZhbHVlRXggdGhhdCBtYXkgaGF2ZSBiZWVuIHJldHVybmluZyB0cnVuY2F0ZWQgdmFsdWVzLgotCi0tIElzc3VlICMxNDQyMDogU3VwcG9ydCB0aGUgZnVsbCBEV09SRCAodW5zaWduZWQgbG9uZykgcmFuZ2UgaW4gUHkyUmVnCi0gIHdoZW4gcGFzc2VkIGEgUkVHX0RXT1JEIHZhbHVlLiBGaXhlcyBPdmVyZmxvd0Vycm9yIGluIHdpbnJlZy5TZXRWYWx1ZUV4LgotCi0tIElzc3VlICMxNjU5NzogSW4gYnVmZmVyZWQgYW5kIHRleHQgSU8sIGNhbGwgY2xvc2UoKSBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0KLSAgaWYgaW52b2tpbmcgZmx1c2goKSBmYWlscy4KLQotLSBJc3N1ZSAjMTY3MjI6IEluIHRoZSBieXRlcygpIGNvbnN0cnVjdG9yLCB0cnkgdG8gY2FsbCBfX2J5dGVzX18gb24gdGhlCi0gIGFyZ3VtZW50IGJlZm9yZSBfX2luZGV4X18uCi0KLS0gSXNzdWUgIzE2NjAyOiBXaGVuIGEgd2Vha3JlZidzIHRhcmdldCB3YXMgcGFydCBvZiBhIGxvbmcgZGVhbGxvY2F0aW9uCi0gIGNoYWluLCB0aGUgb2JqZWN0IGNvdWxkIHJlbWFpbiByZWFjaGFibGUgdGhyb3VnaCBpdHMgd2Vha3JlZiBldmVuIHRob3VnaAotICBpdHMgcmVmY291bnQgaGFkIGRyb3BwZWQgdG8gemVyby4KLQotLSBJc3N1ZSAjMTY0MTY6IE9uIE1hYyBPUyBYLCBvcGVyYXRpbmcgc3lzdGVtIGRhdGEgYXJlIG5vdyBhbHdheXMKLSAgZW5jb2RlZC9kZWNvZGVkIHRvL2Zyb20gVVRGLTgvc3Vycm9nYXRlZXNjYXBlLCBpbnN0ZWFkIG9mIHRoZSBsb2NhbGUgZW5jb2RpbmcKLSAgKHdoaWNoIG1heSBiZSBBU0NJSSBpZiBubyBsb2NhbGUgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgc2V0KSwgdG8gYXZvaWQKLSAgaW5jb25zaXN0ZW5jaWVzIHdpdGggb3MuZnNlbmNvZGUoKSBhbmQgb3MuZnNkZWNvZGUoKSBmdW5jdGlvbnMgd2hpY2ggYXJlCi0gIGFscmVhZHkgdXNpbmcgVVRGLTgvc3Vycm9nYXRlZXNjYXBlLgotCi0tIElzc3VlICMxNjU4ODogU2lsZW5jZSB1bnVzZWQtYnV0LXNldCB3YXJuaW5ncyBpbiBQeXRob24vdGhyZWFkX3B0aHJlYWQKLQotLSBJc3N1ZSAjMTY1NDY6IEZpeDogYXN0LllpZWxkRnJvbSBhcmd1bWVudCBpcyBub3cgbWFuZGF0b3J5LgotCi0tIElzc3VlICMxNjUxNDogRml4IHJlZ3Jlc3Npb24gY2F1c2luZyBhIHRyYWNlYmFjayB3aGVuIHN5cy5wYXRoWzBdIGlzIE5vbmUKLSAgKGFjdHVhbGx5LCBhbnkgbm9uLXN0cmluZyBvciBub24tYnl0ZXMgdHlwZSkuCi0KLS0gSXNzdWUgIzE2MzA2OiBGaXggbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hlbiB1bmtub3duIGNvbW1hbmQgbGluZQotICBwYXJhbWV0ZXJzIHdoZXJlIHBhc3NlZCB0byB0aGUgaW50ZXJwcmV0ZXIuICBQYXRjaCBieSBIaWV1IE5ndXllbi4KLQotLSBJc3N1ZSAjMTYyMTU6IEZpeCBwb3RlbnRpYWwgZG91YmxlIG1lbW9yeSBmcmVlIGluIHN0ci5yZXBsYWNlKCkuICBQYXRjaAotICBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQ1MzogRml4IGVxdWFsaXR5IHRlc3Rpbmcgb2YgZGVhZCB3ZWFrcmVmIG9iamVjdHMuCi0KLS0gSXNzdWUgIzk1MzU6IEZpeCBwZW5kaW5nIHNpZ25hbHMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnV0IG5vdCB5ZXQKLSAgaGFuZGxlZCBieSBQeXRob24gdG8gbm90IHBlcnNpc3QgYWZ0ZXIgb3MuZm9yaygpIGluIHRoZSBjaGlsZCBwcm9jZXNzLgotCi0tIElzc3VlICMxNTAwMTogZml4IHNlZ2ZhdWx0IG9uICJkZWwgc3lzLm1vZHVsZXNbJ19fbWFpbl9fJ10iLiBQYXRjaCBieSBWaWN0b3IKLSAgU3Rpbm5lci4KLQotLSBJc3N1ZSAjODI3MTogdGhlIHV0Zi04IGRlY29kZXIgbm93IG91dHB1dHMgdGhlIGNvcnJlY3QgbnVtYmVyIG9mIFUrRkZGRAotICBjaGFyYWN0ZXJzIHdoZW4gdXNlZCB3aXRoIHRoZSAncmVwbGFjZScgZXJyb3IgaGFuZGxlciBvbiBpbnZhbGlkIHV0Zi04Ci0gIHNlcXVlbmNlcy4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EsIHRlc3RzIGJ5IEV6aW8gTWVsb3R0aS4KLQotLSBJc3N1ZSAjNTc2NTogQXBwbHkgYSBoYXJkIHJlY3Vyc2lvbiBsaW1pdCBpbiB0aGUgY29tcGlsZXIgaW5zdGVhZCBvZgotICBibG93aW5nIHRoZSBzdGFjayBhbmQgc2VnZmF1bHRpbmcuIEluaXRpYWwgcGF0Y2ggYnkgQW5kcmVhIEdyaWZmaW5pLgotCi0tIElzc3VlICMxNjQwMjogV2hlbiBzbGljaW5nIGEgcmFuZ2UsIGZpeCBzaGFkb3dpbmcgb2YgZXhjZXB0aW9ucyBmcm9tCi0gIF9faW5kZXhfXy4KLQotLSBJc3N1ZSAjMTYzMzY6IGZpeCBpbnB1dCBjaGVja2luZyBpbiB0aGUgc3Vycm9nYXRlcGFzcyBlcnJvciBoYW5kbGVyLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICM4NDAxOiBhc3NpZ25pbmcgYW4gaW50IHRvIGEgYnl0ZWFycmF5IHNsaWNlIChlLmcuIGJbMzo0XSA9IDUpIG5vdwotICByYWlzZXMgYW4gZXJyb3IuCi0KLS0gRml4IHNlZ2ZhdWx0cyBvbiBzZXR0aW5nIF9fcXVhbG5hbWVfXyBvbiBidWlsdGluIHR5cGVzIGFuZCBhdHRlbXB0aW5nIHRvCi0gIGRlbGV0ZSBpdCBvbiBhbnkgdHlwZS4KLQotLSBJc3N1ZSAjMTYzNDU6IEZpeCBhbiBpbmZpbml0ZSBsb29wIHdoZW4gYGBmcm9ta2V5c2BgIG9uIGEgZGljdCBzdWJjbGFzcwotICByZWNlaXZlZCBhIG5vbmVtcHR5IGRpY3QgZnJvbSB0aGUgY29uc3RydWN0b3IuCi0KLS0gSXNzdWUgIzE2MjcxOiBGaXggc3RyYW5nZSBidWdzIHRoYXQgcmVzdWx0ZWQgZnJvbSBfX3F1YWxuYW1lX18gYXBwZWFyaW5nIGluIGEKLSAgY2xhc3MncyBfX2RpY3RfXyBhbmQgb24gdHlwZS4KLQotLSBJc3N1ZSAjNjA3NDogRW5zdXJlIGNhY2hlZCBieXRlY29kZSBmaWxlcyBjYW4gYWx3YXlzIGJlIHVwZGF0ZWQgYnkgdGhlCi0gIHVzZXIgdGhhdCBjcmVhdGVkIHRoZW0sIGV2ZW4gd2hlbiB0aGUgc291cmNlIGZpbGUgaXMgcmVhZC1vbmx5LgotCi0tIElzc3VlICMxNDc4MzogSW1wcm92ZSBpbnQoKSBkb2NzdHJpbmcgYW5kIHN3aXRjaCBkb2NzdHJpbmdzIGZvciBzdHIoKSwKLSAgcmFuZ2UoKSwgYW5kIHNsaWNlKCkgdG8gdXNlIG11bHRpLWxpbmUgc2lnbmF0dXJlcy4KLQotLSBJc3N1ZSAjMTYxNjA6IFN1YmNsYXNzIHN1cHBvcnQgbm93IHdvcmtzIGZvciB0eXBlcy5TaW1wbGVOYW1lc3BhY2UuCi0KLS0gSXNzdWUgIzE1Mzc5OiBGaXggcGFzc2luZyBvZiBub24tQk1QIGNoYXJhY3RlcnMgYXMgaW50ZWdlcnMgZm9yIHRoZSBjaGFybWFwCi0gIGRlY29kZXIgKGFscmVhZHkgd29ya2luZyBhcyB1bmljb2RlIHN0cmluZ3MpLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTUxNDQ6IEZpeCBwb3NzaWJsZSBpbnRlZ2VyIG92ZXJmbG93IHdoZW4gaGFuZGxpbmcgcG9pbnRlcnMgYXMgaW50ZWdlcgotICB2YWx1ZXMsIGJ5IHVzaW5nIGBQeV91aW50cHRyX3RgIGluc3RlYWQgb2YgYHNpemVfdGAuICBQYXRjaCBieSBTZXJoaXkKLSAgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNTk2NTogRXhwbGljaXRseSBjYXN0IGBBVF9GRENXRGAgYXMgKGludCkuICBSZXF1aXJlZCBvbiBTb2xhcmlzIDEwCi0gICh3aGljaCBkZWZpbmVzIGBBVF9GRENXRGAgYXMgYGAweGZmZDE5NTUzYGApLCBoYXJtbGVzcyBvbiBvdGhlciBwbGF0Zm9ybXMuCi0KLS0gSXNzdWUgIzE1ODM5OiBDb252ZXJ0IFN5c3RlbUVycm9ycyBpbiBgc3VwZXIoKWAgdG8gUnVudGltZUVycm9ycy4KLQotLSBJc3N1ZSAjMTU4NDY6IEZpeCBTeXN0ZW1FcnJvciB3aGljaCBoYXBwZW5lZCB3aGVuIHVzaW5nIGBhc3QucGFyc2UoKWAgaW4gYW4KLSAgZXhjZXB0aW9uIGhhbmRsZXIgb24gY29kZSB3aXRoIHN5bnRheCBlcnJvcnMuCi0KLS0gSXNzdWUgIzE1ODAxOiBNYWtlIHN1cmUgbWFwcGluZ3MgcGFzc2VkIHRvICclJyBmb3JtYXR0aW5nIGFyZSBhY3R1YWxseQotICBzdWJzY3JpcHRhYmxlLgotCi0tIElzc3VlICMxNTExMTogX19pbXBvcnRfXyBzaG91bGQgbGV0IEltcG9ydEVycm9yIHByb3BhZ2F0ZSB3aGVuIGEgbW9kdWxlIHRoYXQKLSAgaXMgaW1wb3J0ZWQgYXMgYSBzaWRlLWVmZmVjdCBvZiB1c2luZyBmcm9tbGlzdCB0cmllcyB0byBpbXBvcnQgYSBtb2R1bGUKLSAgdGhhdCBjYW5ub3QgYmUgZm91bmQuCi0KLUxpYnJhcnkKLS0tLS0tLS0KLQotLSBJc3N1ZSAjMTc1NDA6IEFkZGVkIHN0eWxlIHRvIGZvcm1hdHRlciBjb25maWd1cmF0aW9uIGJ5IGRpY3QuCi0KLS0gSXNzdWUgIzE3NTM2OiBBZGQgdG8gd2ViYnJvd3NlcidzIGJyb3dzZXIgbGlzdDogd3d3LWJyb3dzZXIsIHgtd3d3LWJyb3dzZXIsCi0gIGljZXdlYXNlbCwgaWNlYXBlLgotCi0tIElzc3VlICMxNzQ4ODogQ2hhbmdlIHRoZSBzdWJwcm9jZXNzLlBvcGVuIGJ1ZnNpemUgcGFyYW1ldGVyIGRlZmF1bHQgdmFsdWUKLSAgZnJvbSB1bmJ1ZmZlcmVkICgwKSB0byBidWZmZXJpbmcgKC0xKSB0byBtYXRjaCB0aGUgYmVoYXZpb3IgZXhpc3RpbmcgY29kZQotICBleHBlY3RzIGFuZCBtYXRjaCB0aGUgYmVoYXZpb3Igb2YgdGhlIHN1YnByb2Nlc3MgbW9kdWxlIGluIFB5dGhvbiAyIHRvIGF2b2lkCi0gIGludHJvZHVjaW5nIGhhcmQgdG8gdHJhY2sgZG93biBidWdzLgotCi0tIElzc3VlICMxNzUyMTogQ29ycmVjdGVkIG5vbi1lbmFibGluZyBvZiBsb2dnZXIgZm9sbG93aW5nIHR3byBjYWxscyB0bwotICBmaWxlQ29uZmlnKCkuCi0KLS0gSXNzdWUgIzE3NTA4OiBDb3JyZWN0ZWQgTWVtb3J5SGFuZGxlciBjb25maWd1cmF0aW9uIGluIGRpY3RDb25maWcoKSB3aGVyZQotICB0aGUgdGFyZ2V0IGhhbmRsZXIgd2Fzbid0IGNvbmZpZ3VyZWQgZmlyc3QuCi0KLS0gSXNzdWUgIzE3MjA5OiBjdXJzZXMud2luZG93LmdldF93Y2goKSBub3cgaGFuZGxlcyBjb3JyZWN0bHkgS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgKENUUkwrYykuCi0KLS0gSXNzdWUgIzU3MTM6IHNtdHBsaWIgbm93IGhhbmRsZXMgNDIxIChjbG9zaW5nIGNvbm5lY3Rpb24pIGVycm9yIGNvZGVzIHdoZW4KLSAgc2VuZGluZyBtYWlsIGJ5IGNsb3NpbmcgdGhlIHNvY2tldCBhbmQgcmVwb3J0aW5nIHRoZSA0MjEgZXJyb3IgY29kZSB2aWEgdGhlCi0gIGV4Y2VwdGlvbiBhcHByb3ByaWF0ZSB0byB0aGUgY29tbWFuZCB0aGF0IHJlY2VpdmVkIHRoZSBlcnJvciByZXNwb25zZS4KLQotLSBJc3N1ZSAjMTcxOTI6IFVwZGF0ZSB0aGUgY3R5cGVzIG1vZHVsZSdzIGxpYmZmaSB0byB2My4wLjEzLiAgVGhpcwotICBzcGVjaWZpY2FsbHkgYWRkcmVzc2VzIGEgc3RhY2sgbWlzYWxpZ25tZW50IGlzc3VlIG9uIHg4NiBhbmQgaXNzdWVzIG9uCi0gIHNvbWUgbW9yZSByZWNlbnQgcGxhdGZvcm1zLgotCi0tIElzc3VlICM4ODYyOiBGaXhlZCBjdXJzZXMgY2xlYW51cCB3aGVuIGdldGtleSBpcyBpbnRlcnJwdXRlZCBieSBhIHNpZ25hbC4KLQotLSBJc3N1ZSAjMTc0NDM6IGltYXBsaWIuSU1BUDRfc3RyZWFtIHdhcyB1c2luZyB0aGUgZGVmYXVsdCB1bmJ1ZmZlcmVkIElPCi0gIGluIHN1YnByb2Nlc3MsIGJ1dCB0aGUgaW1hcCBjb2RlIGFzc3VtZXMgYnVmZmVyZWQgSU8uICBJbiBQeXRob24yIHRoaXMKLSAgd29ya2VkIGJ5IGFjY2lkZW50LiAgSU1BUDRfc3RyZWFtIG5vdyBleHBsaWNpdGx5IHVzZXMgYnVmZmVyZWQgSU8uCi0KLS0gSXNzdWUgIzE3NDc2OiBGaXhlZCByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbjIgaW4gdW5kb2N1bWVudGVkIHB5ZG9jCi0gICdhbGxtZXRob2RzJzsgaXQgd2FzIG1pc3NpbmcgdW5ib3VuZCBtZXRob2RzIG9uIHRoZSBjbGFzcy4KLQotLSBJc3N1ZSAjMTY4ODA6IERvIG5vdCBhc3N1bWUgX2ltcC5sb2FkX2R5bmFtaWMoKSBpcyBkZWZpbmVkIGluIHRoZSBpbXAgbW9kdWxlLgotCi0tIElzc3VlICMxNjM4OTogRml4ZWQgYSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIHJlbGF0aXZlIHRvIFB5dGhvbiAzLjEgaW4gdGhlCi0gIGNhY2hpbmcgb2YgY29tcGlsZWQgcmVndWxhciBleHByZXNzaW9ucy4KLQotLSBJc3N1ZSAjMTc0MzE6IEZpeCBtaXNzaW5nIGltcG9ydCBvZiBCeXRlc0ZlZWRQYXJzZXIgaW4gZW1haWwucGFyc2VyLgotCi0tIElzc3VlICMxMjg1MDg2OiBHZXQgcmlkIG9mIHRoZSByZWZjb3VudGluZyBoYWNrIGFuZCBzcGVlZCB1cAotICB1cmxsaWIucGFyc2UudW5xdW90ZSgpIGFuZCB1cmxsaWIucGFyc2UudW5xdW90ZV90b19ieXRlcygpLgotCi0tIElzc3VlICMxNzM2ODogRml4IGFuIG9mZi1ieS1vbmUgZXJyb3IgaW4gdGhlIFB5dGhvbiBKU09OIGRlY29kZXIgdGhhdCBjYXVzZWQKLSAgYSBmYWlsdXJlIHdoaWxlIGRlY29kaW5nIGVtcHR5IG9iamVjdCBsaXRlcmFscyB3aGVuIG9iamVjdF9wYWlyc19ob29rIHdhcwotICBzcGVjaWZpZWQuCi0KLS0gSXNzdWUgIzE0NjQ1OiBUaGUgZW1haWwgZ2VuZXJhdG9yIGNsYXNzZXMgbm93IHByb2R1Y2Ugb3V0cHV0IHVzaW5nIHRoZQotICBzcGVjaWZpZWQgbGluZXNlcCB0aHJvdWdob3V0LiAgUHJldmlvdXNseSBpZiB0aGUgcHJvbG9nLCBlcGlsb2csIG9yCi0gIGJvZHkgd2VyZSBzdG9yZWQgd2l0aCBhIGRpZmZlcmVudCBsaW5lc2VwLCB0aGF0IGxpbmVzZXAgd2FzIHVzZWQuICBUaGlzCi0gIGZpeCBjb3JyZWN0cyBhbiBSRkMgbm9uLWNvbXBsaWFuY2UgaXNzdWUgd2l0aCBzbXRwbGliLnNlbmRfbWVzc2FnZS4KLQotLSBJc3N1ZSAjMTcyNzg6IEZpeCBhIGNyYXNoIGluIGhlYXBxLmhlYXBwdXNoKCkgYW5kIGhlYXBxLmhlYXBwb3AoKSB3aGVuCi0gIHRoZSBsaXN0IGlzIGJlaW5nIHJlc2l6ZWQgY29uY3VycmVudGx5LgotCi0tIElzc3VlICMxNjk2MjogVXNlIGdldGRlbnRzNjQgaW5zdGVhZCBvZiB0aGUgb2Jzb2xldGUgZ2V0ZGVudHMgc3lzY2FsbAotICBpbiB0aGUgc3VicHJvY2VzcyBtb2R1bGUgb24gTGludXguCi0KLS0gSXNzdWUgIzE3MDE4OiBNYWtlIFByb2Nlc3Muam9pbigpIHJldHJ5IGlmIG9zLndhaXRwaWQoKSBmYWlscyB3aXRoIEVJTlRSLgotCi0tIElzc3VlICMxNzIyMzogYXJyYXkgbW9kdWxlOiBGaXggYSBjcmFzaGVyIHdoZW4gY29udmVydGluZyBhbiBhcnJheSBjb250YWluaW5nCi0gIGludmFsaWQgY2hhcmFjdGVycyAob3V0c2lkZSByYW5nZSBbVSswMDAwOyBVKzEwZmZmZl0pIHRvIFVuaWNvZGU6Ci0gIHJlcHIoYXJyYXkpLCBzdHIoYXJyYXkpIGFuZCBhcnJheS50b3VuaWNvZGUoKS4gUGF0Y2ggd3JpdHRlbiBieSBNYW51ZWwgSmFjb2IuCi0KLS0gSXNzdWUgIzE0NzIwOiBzcWxpdGUzOiBDb252ZXJ0IGRhdGV0aW1lIG1pY3Jvc2Vjb25kcyBjb3JyZWN0bHkuCi0gIFBhdGNoIGJ5IExvd2UgVGhpZGVybWFuLgotCi0tIElzc3VlICMxNzIyNTogSlNPTiBkZWNvZGVyIG5vdyBjb3VudHMgY29sdW1ucyBpbiB0aGUgZmlyc3QgbGluZSBzdGFydGluZwotICB3aXRoIDEsIGFzIGluIG90aGVyIGxpbmVzLgotCi0tIElzc3VlICMxMzcwMDogRml4IGJ5dGUvc3RyaW5nIGhhbmRsaW5nIGluIGltYXBsaWIgYXV0aGVudGljYXRpb24gd2hlbiBhbgotICBhdXRob2JqZWN0IGlzIHNwZWNpZmllZC4KLQotLSBJc3N1ZSAjMTMxNTM6IFRraW50ZXIgZnVuY3Rpb25zIG5vdyByYWlzZSBUY2xFcnJvciBpbnN0ZWFkIG9mIFZhbHVlRXJyb3Igd2hlbgotICBhIHN0cmluZyBhcmd1bWVudCBjb250YWlucyBub24tQk1QIGNoYXJhY3Rlci4KLQotLSBJc3N1ZSAjOTY2OTogUHJvdGVjdCByZSBhZ2FpbnN0IGluZmluaXRlIGxvb3BzIG9uIHplcm8td2lkdGggbWF0Y2hpbmcgaW4KLSAgbm9uLWdyZWVkeSByZXBlYXQuICBQYXRjaCBieSBNYXR0aGV3IEJhcm5ldHQuCi0KLS0gSXNzdWUgIzEzMTY5OiBUaGUgbWF4aW1hbCByZXBldGl0aW9uIG51bWJlciBpbiBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBoYXMgYmVlbgotICBpbmNyZWFzZWQgZnJvbSA2NTUzNCB0byAyMTQ3NDgzNjQ3IChvbiAzMi1iaXQgcGxhdGZvcm0pIG9yIDQyOTQ5NjcyOTQgKG9uCi0gIDY0LWJpdCkuCi0KLS0gSXNzdWUgIzE3MTQzOiBGaXggYSBtaXNzaW5nIGltcG9ydCBpbiB0aGUgdHJhY2UgbW9kdWxlLiAgSW5pdGlhbCBwYXRjaCBieQotICBCZXJrZXIgUGVrc2FnLgotCi0tIElzc3VlICMxNjc0MzogRml4IG1tYXAgb3ZlcmZsb3cgY2hlY2sgb24gMzIgYml0IFdpbmRvd3MuCi0KLS0gSXNzdWUgIzE2ODAwOiB0ZW1wZmlsZS5nZXR0ZW1wZGlyKCkgbm8gbG9uZ2VyIGxlZnQgdGVtcG9yYXJ5IGZpbGVzIHdoZW4KLSAgdGhlIGRpc2sgaXMgZnVsbC4gIE9yaWdpbmFsIHBhdGNoIGJ5IEFtaXIgU3pla2VseS4KLQotLSBJc3N1ZSAjMTY1NjQ6IEZpeGVkIHJlZ3Jlc3Npb24gcmVsYXRpdmUgdG8gUHl0aG9uMiBpbiB0aGUgb3BlcmF0aW9uIG9mCi0gIGVtYWlsLmVuY29kZXJzLmVuY29kZV83b3I4Yml0IHdoZW4gdXNlZCB3aXRoIGJpbmFyeSBkYXRhLgotCi0tIElzc3VlICMxNzA1MjogdW5pdHRlc3QgZGlzY292ZXJ5IHNob3VsZCB1c2Ugc2VsZi50ZXN0TG9hZGVyLgotCi0tIElzc3VlICM0NTkxOiBVaWQgYW5kIGdpZCB2YWx1ZXMgbGFyZ2VyIHRoYW4gMioqMzEgYXJlIHN1cHBvcnRlZCBub3cuCi0KLS0gSXNzdWUgIzE3MTQxOiByYW5kb20udm9ubWlzZXN2YXJpYXRlKCkgbm8gbW9yZSBoYW5ncyBmb3IgbGFyZ2Uga2FwcGFzLgotCi0tIElzc3VlICMxNzE0OTogRml4IHJhbmRvbS52b25taXNlc3ZhcmlhdGUgdG8gYWx3YXlzIHJldHVybiByZXN1bHRzIGluCi0gIFswLCAyKm1hdGgucGldLgotCi0tIElzc3VlICMxNDcwNTQ4OiBYTUxHZW5lcmF0b3Igbm93IHdvcmtzIHdpdGggYmluYXJ5IG91dHB1dCBzdHJlYW1zLgotCi0tIElzc3VlICM2OTc1OiBvcy5wYXRoLnJlYWxwYXRoKCkgbm93IGNvcnJlY3RseSByZXNvbHZlcyBtdWx0aXBsZSBuZXN0ZWQKLSAgc3ltbGlua3Mgb24gUE9TSVggcGxhdGZvcm1zLgotCi0tIElzc3VlICMxNjU2NDogRml4ZWQgcmVncmVzc2lvbiByZWxhdGl2ZSB0byBQeXRob24yIGluIHRoZSBvcGVyYXRpb24gb2YKLSAgZW1haWwuZW5jb2RlcnMuZW5jb2RlX25vb3Agd2hlbiB1c2VkIHdpdGggYmluYXJ5IGRhdGEuCi0KLS0gSXNzdWUgIzEwMzU1OiBUaGUgbW9kZSwgbmFtZSwgZW5jb2RpbmcgYW5kIG5ld2xpbmVzIHByb3BlcnRpZXMgbm93IHdvcmsgb24KLSAgU3Bvb2xlZFRlbXBvcmFyeUZpbGUgb2JqZWN0cyBldmVuIHdoZW4gdGhleSBoYXZlIG5vdCB5ZXQgcm9sbGVkIG92ZXIuCi0gIE9ic29sZXRlIG1ldGhvZCB4cmVhZGxpbmUgKHdoaWNoIGhhcyBuZXZlciB3b3JrZWQgaW4gUHl0aG9uIDMpIGhhcyBiZWVuCi0gIHJlbW92ZWQuCi0KLS0gSXNzdWUgIzE2Njg2OiBGaXhlZCBhIGxvdCBvZiBidWdzIGluIGF1ZGlvb3AgbW9kdWxlLiAgRml4ZWQgY3Jhc2hlcyBpbgotICBhdmdwcCgpLCBtYXhwcCgpIGFuZCByYXRlY3YoKS4gIEZpeGVkIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYWRkKCksIGJpYXMoKSwKLSAgYW5kIHJhdGVjdigpLiAgcmV2ZXJzZSgpLCBsaW4ybGluKCkgYW5kIHJhdGVjdigpIG5vIG1vcmUgbG9zZSBwcmVjaXNpb24gZm9yCi0gIDMyLWJpdCBzYW1wbGVzLiAgbWF4KCkgYW5kIHJtcygpIG5vIG1vcmUgcmV0dXJucyBhIG5lZ2F0aXZlIHJlc3VsdCBhbmQKLSAgdmFyaW91cyBvdGhlciBmdW5jdGlvbnMgbm93IHdvcmsgY29ycmVjdGx5IHdpdGggMzItYml0IHNhbXBsZSAtMHg4MDAwMDAwMC4KLQotLSBJc3N1ZSAjMTcwNzM6IEZpeCBzb21lIGludGVnZXIgb3ZlcmZsb3dzIGluIHNxbGl0ZTMgbW9kdWxlLgotCi0tIElzc3VlICMxNjcyMzogaHR0cGxpYi5IVFRQUmVzcG9uc2Ugbm8gbG9uZ2VyIG1hcmtlZCBjbG9zZWQgd2hlbiB0aGUgY29ubmVjdGlvbgotICBpcyBhdXRvbWF0aWNhbGx5IGNsb3NlZC4KLQotLSBJc3N1ZSAjMTY5NDg6IEZpeCBxdW90ZWQgcHJpbnRhYmxlIGJvZHkgZW5jb2RpbmcgZm9yIG5vbi1sYXRpbjEgY2hhcmFjdGVyCi0gIHNldHMgaW4gdGhlIGVtYWlsIHBhY2thZ2UuCi0KLS0gSXNzdWUgIzE2ODExOiBGaXggZm9sZGluZyBvZiBoZWFkZXJzIHdpdGggbm8gdmFsdWUgaW4gdGhlIHByb3Zpc2lvbmFsIGVtYWlsCi0gIHBvbGljaWVzLgotCi0tIElzc3VlICMxNzEzMjogVXBkYXRlIHN5bWJvbCBmb3IgInlpZWxkIGZyb20iIGdyYW1tYXIgY2hhbmdlcy4KLQotLSBJc3N1ZSAjMTcwNzY6IE1ha2UgY29weWluZyBvZiB4YXR0cnMgbW9yZSBwZXJtaXNzaXZlIG9mIG1pc3NpbmcgRlMgc3VwcG9ydC4KLSAgUGF0Y2ggYnkgVGhvbWFzIFdvdXRlcnMuCi0KLS0gSXNzdWUgIzE3MDg5OiBFeHBhdCBwYXJzZXIgbm93IGNvcnJlY3RseSB3b3JrcyB3aXRoIHN0cmluZyBpbnB1dCBub3Qgb25seSB3aGVuCi0gIGFuIGludGVybmFsIFhNTCBlbmNvZGluZyBpcyBVVEYtOCBvciBVUy1BU0NJSS4gIEl0IG5vdyBhY2NlcHRzIGJ5dGVzIGFuZAotICBzdHJpbmdzIGxhcmdlciB0aGFuIDIgR2lCLgotCi0tIElzc3VlICM2MDgzOiBGaXggbXVsdGlwbGUgc2VnbWVudGF0aW9uIGZhdWx0cyBvY2N1cmVkIHdoZW4gUHlBcmdfUGFyc2VUdXBsZQotICBwYXJzZXMgbmVzdGVkIG11dGF0aW5nIHNlcXVlbmNlLgotCi0tIElzc3VlICM1Mjg5OiBGaXggY3R5cGVzLnV0aWwuZmluZF9saWJyYXJ5IG9uIFNvbGFyaXMuCi0KLS0gSXNzdWUgIzE3MTA2OiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgaW4gaW8uVGV4dElPV3JhcHBlciB3aGVuIGFuIHVuZGVybHlpbmcKLSAgc3RyZWFtIG9yIGEgZGVjb2RlciBwcm9kdWNlcyBkYXRhIG9mIGFuIHVuZXhwZWN0ZWQgdHlwZSAoaS5lLiB3aGVuCi0gIGlvLlRleHRJT1dyYXBwZXIgaW5pdGlhbGl6ZWQgd2l0aCB0ZXh0IHN0cmVhbSBvciB1c2UgYnl0ZXMtdG8tYnl0ZXMgY29kZWMpLgotCi0tIElzc3VlICMxNTYzMzogaHR0cGxpYi5IVFRQUmVzcG9uc2UgaXMgbm93IG1hcmsgY2xvc2VkIHdoZW4gdGhlIHNlcnZlcgotICBzZW5kcyBsZXNzIHRoYW4gdGhlIGFkdmVydGlzZWQgQ29udGVudC1MZW5ndGguCi0KLS0gSXNzdWUgIzEyMjY4OiBUaGUgaW8gbW9kdWxlIGZpbGUgb2JqZWN0IHdyaXRlIG1ldGhvZHMgbm8gbG9uZ2VyIGFib3J0IGVhcmx5Ci0gIHdoZW4gb25lIG9mIGl0cyB3cml0ZSBzeXN0ZW0gY2FsbHMgaXMgaW50ZXJydXB0ZWQgKEVJTlRSKS4KLQotLSBJc3N1ZSAjNjk3MjogVGhlIHppcGZpbGUgbW9kdWxlIG5vIGxvbmdlciBvdmVyd3JpdGVzIGZpbGVzIG91dHNpZGUgb2YKLSAgaXRzIGRlc3RpbmF0aW9uIHBhdGggd2hlbiBleHRyYWN0aW5nIG1hbGljaW91cyB6aXAgZmlsZXMuCi0KLS0gSXNzdWUgIzQ4NDQ6IFppcEZpbGUgbm93IHJhaXNlcyBCYWRaaXBGaWxlIHdoZW4gb3BlbnMgYSBaSVAgZmlsZSB3aXRoIGFuCi0gIGluY29tcGxldGUgIkVuZCBvZiBDZW50cmFsIERpcmVjdG9yeSIgcmVjb3JkLiAgT3JpZ2luYWwgcGF0Y2ggYnkgR3VpbGhlcm1lCi0gIFBvbG8gYW5kIEFsYW4gTWNJbnR5cmUuCi0KLS0gSXNzdWUgIzE3MDcxOiBTaWduYXR1cmUuYmluZCgpIG5vdyB3b3JrcyB3aGVuIG9uZSBvZiB0aGUga2V5d29yZCBhcmd1bWVudHMKLSAgaXMgbmFtZWQgYGBzZWxmYGAuCi0KLS0gSXNzdWUgIzEyMDA0OiBGaXggYW4gaW50ZXJuYWwgZXJyb3IgaW4gUHlaaXBGaWxlIHdoZW4gd3JpdGluZyBhbiBpbnZhbGlkCi0gIFB5dGhvbiBmaWxlLiAgUGF0Y2ggYnkgQmVuIE1vcmdhbi4KLQotLSBJc3N1ZSAjMTYwMjEzMzogb24gTWFjIE9TIFggYSBzaGFyZWQgbGlicmFyeSBidWlsZCAoYGAtLWVuYWJsZS1zaGFyZWRgYCkKLSAgbm93IGZpbGxzIHRoZSBgYG9zLmVudmlyb25gYCB2YXJpYWJsZSBjb3JyZWN0bHkuCi0KLS0gSXNzdWUgIzE1NTA1OiBgdW5pdHRlc3QuaW5zdGFsbEhhbmRsZXJgIG5vIGxvbmdlciBhc3N1bWVzIFNJR0lOVCBoYW5kbGVyIGlzCi0gIHNldCB0byBhIGNhbGxhYmxlIG9iamVjdC4KLQotLSBJc3N1ZSAjMTM0NTQ6IEZpeCBhIGNyYXNoIHdoZW4gZGVsZXRpbmcgYW4gaXRlcmF0b3IgY3JlYXRlZCBieSBpdGVydG9vbHMudGVlKCkKLSAgaWYgYWxsIG90aGVyIGl0ZXJhdG9ycyB3ZXJlIHZlcnkgYWR2YW5jZWQgYmVmb3JlLgotCi0tIElzc3VlICMxMjQxMTogRml4IHRvIGNnaS5wYXJzZV9tdWx0aXBhcnQgdG8gY29ycmVjdGx5IHVzZSBieXRlcyBib3VuZGFyaWVzCi0gIGFuZCBieXRlcyBkYXRhLiBQYXRjaCBieSBKb25hcyBXYWduZXIuCi0KLS0gSXNzdWUgIzE2OTU3OiBzaHV0aWwud2hpY2goKSBubyBsb25nZXIgc2VhcmNoZXMgYSBiYXJlIGZpbGUgbmFtZSBpbiB0aGUKLSAgY3VycmVudCBkaXJlY3Rvcnkgb24gVW5peCBhbmQgbm8gbG9uZ2VyIHNlYXJjaGVzIGEgcmVsYXRpdmUgZmlsZSBwYXRoIHdpdGgKLSAgYSBkaXJlY3RvcnkgcGFydCBpbiBQQVRIIGRpcmVjdG9yaWVzLiAgUGF0Y2ggYnkgVGhvbWFzIEtsdXl2ZXIuCi0KLS0gSXNzdWUgIzE2OTkzOiBzaHV0aWwud2hpY2goKSBub3cgcHJlc2VydmVzIHRoZSBjYXNlIG9mIHRoZSBwYXRoIGFuZCBleHRlbnNpb24KLSAgb24gV2luZG93cy4KLQotLSBJc3N1ZSAjMTY5OTI6IE9uIFdpbmRvd3MgaW4gc2lnbmFsLnNldF93YWtldXBfZmQsIHZhbGlkYXRlIHRoZSBmaWxlCi0gIGRlc2NyaXB0b3IgYXJndW1lbnQuCi0KLS0gSXNzdWUgIzE2NDIyOiBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBQeXRob24gdmVyc2lvbiwgdGhlIEMgdmVyc2lvbiBvZgotICBkZWNpbWFsIG5vdyB1c2VzIHN0cmluZ3MgaW5zdGVhZCBvZiBpbnRlZ2VycyBmb3Igcm91bmRpbmcgbW9kZSBjb25zdGFudHMuCi0KLS0gSXNzdWUgIzE1ODYxOiB0a2ludGVyIG5vdyBjb3JyZWN0bHkgd29ya3Mgd2l0aCBsaXN0cyBhbmQgdHVwbGVzIGNvbnRhaW5pbmcKLSAgc3RyaW5ncyB3aXRoIHdoaXRlc3BhY2VzLCBiYWNrc2xhc2hlcyBvciB1bmJhbGFuY2VkIGJyYWNlcy4KLQotLSBJc3N1ZSAjMTA1Mjc6IFVzZSBwb2xsKCkgaW5zdGVhZCBvZiBzZWxlY3QoKSBmb3IgbXVsdGlwcm9jZXNzaW5nIHBpcGVzLgotCi0tIElzc3VlICM5NzIwOiB6aXBmaWxlIG5vdyB3cml0ZXMgY29ycmVjdCBsb2NhbCBoZWFkZXJzIGZvciBmaWxlcyBsYXJnZXIgdGhhbgotICA0IEdpQi4KLQotLSBJc3N1ZSAjMTY5NTU6IEZpeCB0aGUgcG9sbCgpIG1ldGhvZCBmb3IgbXVsdGlwcm9jZXNzaW5nJ3Mgc29ja2V0Ci0gIGNvbm5lY3Rpb25zIG9uIFdpbmRvd3MuCi0KLS0gU1NMQ29udGV4dC5sb2FkX2RoX3BhcmFtcygpIG5vdyBwcm9wZXJseSBjbG9zZXMgdGhlIGlucHV0IGZpbGUuCi0KLS0gSXNzdWUgIzE2OTAwOiBJc3N1ZSBhIFJlc291cmNlV2FybmluZyB3aGVuIGFuIHNzbCBzb2NrZXQgaXMgbGVmdCB1bmNsb3NlZC4KLQotLSBJc3N1ZSAjMTM4OTk6IFxBLCBcWiwgYW5kIFxCIG5vdyBjb3JyZWN0bHkgbWF0Y2ggdGhlIEEsIFosIGFuZCBCIGxpdGVyYWxzCi0gIHdoZW4gdXNlZCBpbnNpZGUgY2hhcmFjdGVyIGNsYXNzZXMgKGUuZy4gJ1tcQV0nKS4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KLQotLSBJc3N1ZSAjMTU1NDU6IEZpeCByZWdyZXNzaW9uIGluIHNxbGl0ZTMncyBpdGVyZHVtcCBtZXRob2Qgd2hlcmUgaXQgd2FzCi0gIGZhaWxpbmcgaWYgdGhlIGNvbm5lY3Rpb24gdXNlZCBhIHJvdyBmYWN0b3J5IChzdWNoIGFzIHNxbGl0ZTMuUm93KSB0aGF0Ci0gIHByb2R1Y2VkIHVuc29ydGFibGUgb2JqZWN0cy4gKFJlZ3Jlc3Npb24gd2FzIGludHJvZHVjZWQgYnkgZml4IGZvciA5NzUwKS4KLQotLSBJc3N1ZSAjMTU5NzI6IEZpeCBlcnJvciBtZXNzYWdlcyB3aGVuIG9zIGZ1bmN0aW9ucyBleHBlY3RpbmcgYSBmaWxlIG5hbWUgb3IKLSAgZmlsZSBkZXNjcmlwdG9yIHJlY2VpdmUgdGhlIGluY29ycmVjdCB0eXBlLgotCi0tIElzc3VlICMxNjgyODogRml4IGVycm9yIGluY29ycmVjdGx5IHJhaXNlZCBieSBiejIuY29tcHJlc3MoYicnKSBhbmQKLSAgYnoyLkJaMkNvbXByZXNzb3IuY29tcHJlc3MoYicnKS4gSW5pdGlhbCBwYXRjaCBieSBNYXJ0aW4gUGFja21hbi4KLQotLSBJc3N1ZSAjMTY1NDE6IHRrX3NldFBhbGV0dGUoKSBub3cgd29ya3Mgd2l0aCBrZXl3b3JkIGFyZ3VtZW50cy4KLQotLSBJc3N1ZSAjMTY4MjA6IEluIGNvbmZpZ3BhcnNlciwgYHBhcnNlci5wb3BpdGVtKClgIG5vIGxvbmdlciByYWlzZXMgVmFsdWVFcnJvci4KLSAgVGhpcyBtYWtlcyBgcGFyc2VyLmNsZWFuKClgIHdvcmsgY29ycmVjdGx5LgotCi0tIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnc2VjdGlvbiddID0ge31gYCBub3cgcHJlc2VydmVzCi0gIHNlY3Rpb24gb3JkZXIgd2l0aGluIHRoZSBwYXJzZXIuIFRoaXMgbWFrZXMgYHBhcnNlci51cGRhdGUoKWAgcHJlc2VydmUgc2VjdGlvbgotICBvcmRlciBhcyB3ZWxsLgotCi0tIElzc3VlICMxNjgyMDogSW4gY29uZmlncGFyc2VyLCBgYHBhcnNlclsnREVGQVVMVCddID0ge31gYCBub3cgY29ycmVjdGx5Ci0gIGNsZWFycyBwcmV2aW91cyB2YWx1ZXMgc3RvcmVkIGluIHRoZSBkZWZhdWx0IHNlY3Rpb24uIFNhbWUgZ29lcyBmb3IKLSAgYGBwYXJzZXIudXBkYXRlKHsnREVGQVVMVCc6IHt9fSlgYC4KLQotLSBJc3N1ZSAjOTU4NjogUmVkZWZpbmUgU0VNX0ZBSUxFRCBvbiBNYWNPU1ggdG8ga2VlcCBjb21waWxlciBoYXBweS4KLQotLSBJc3N1ZSAjMTA1Mjc6IG1ha2UgbXVsdGlwcm9jZXNzaW5nIHVzZSBwb2xsKCkgaW5zdGVhZCBvZiBzZWxlY3QoKSBpZiBhdmFpbGFibGUuCi0KLS0gSXNzdWUgIzE2Njg4OiBOb3cgcmVnZXhlcyBjb250YWluZWQgYmFja3JlZmVyZW5jZXMgY29ycmVjdGx5IHdvcmsgd2l0aAotICBub24tQVNDSUkgc3RyaW5ncy4gIFBhdGNoIGJ5IE1hdHRoZXcgQmFybmV0dC4KLQotLSBJc3N1ZSAjMTY0ODU6IE5vdyBmaWxlIGRlc2NyaXB0b3JzIGFyZSBjbG9zZWQgaWYgZmlsZSBoZWFkZXIgcGF0Y2hpbmcgZmFpbGVkCi0gIG9uIGNsb3NpbmcgYW4gYWlmYyBmaWxlLgotCi0tIElzc3VlICMxNjE2NTogc2NoZWQuc2NoZWR1bGVyLnJ1bigpIG5vIGxvbmdlciBibG9ja3MgYSBzY2hlZHVsZXIgZm9yIG90aGVyCi0gIHRocmVhZHMuCi0KLS0gSXNzdWUgIzE2NjQxOiBEZWZhdWx0IHZhbHVlcyBvZiBzY2hlZC5zY2hlZHVsZXIuZW50ZXIoKSBhcmUgbm8gbG9uZ2VyCi0gIG1vZGlmaWFibGUuCi0KLS0gSXNzdWUgIzE2NjE4OiBNYWtlIGdsb2IuZ2xvYiBtYXRjaCBjb25zaXN0ZW50bHkgYWNyb3NzIHN0cmluZ3MgYW5kIGJ5dGVzCi0gIHJlZ2FyZGluZyBsZWFkaW5nIGRvdHMuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjcxMzogUGFyc2luZyBvZiAndGVsJyB1cmxzIHVzaW5nIHVybHBhcnNlIHNlcGFyYXRlcyBwYXJhbXMgZnJvbQotICBwYXRoLgotCi0tIElzc3VlICMxNjQ0MzogQWRkIGRvY3N0cmluZ3MgdG8gcmVndWxhciBleHByZXNzaW9uIG1hdGNoIG9iamVjdHMuCi0gIFBhdGNoIGJ5IEFudG9uIEthc3lhbm92LgotCi0tIElzc3VlICMxNTcwMTogRml4IEhUVFBFcnJvciBpbmZvIG1ldGhvZCBjYWxsIHRvIHJldHVybiB0aGUgaGVhZGVycyBpbmZvcm1hdGlvbi4KLQotLSBJc3N1ZSAjMTY3NTI6IEFkZCBhIG1pc3NpbmcgaW1wb3J0IHRvIG1vZHVsZWZpbmRlci4gUGF0Y2ggYnkgQmVya2VyIFBla3NhZy4KLQotLSBJc3N1ZSAjMTY2NDY6IGZ0cGxpYi5GVFAubWFrZXBvcnQoKSBtaWdodCBsb3NlIHNvY2tldCBlcnJvciBkZXRhaWxzLgotICAocGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYSkKLQotLSBJc3N1ZSAjMTY2MjY6IEZpeCBpbmZpbml0ZSByZWN1cnNpb24gaW4gZ2xvYi5nbG9iKCkgb24gV2luZG93cyB3aGVuIHRoZQotICBwYXR0ZXJuIGNvbnRhaW5zIGEgd2lsZGNhcmQgaW4gdGhlIGRyaXZlIG9yIFVOQyBwYXRoLiAgUGF0Y2ggYnkgU2VyaGl5Ci0gIFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTU3ODM6IEV4Y2VwdCBmb3IgdGhlIG51bWJlciBtZXRob2RzLCB0aGUgQyB2ZXJzaW9uIG9mIGRlY2ltYWwgbm93Ci0gIHN1cHBvcnRzIGFsbCBOb25lIGRlZmF1bHQgdmFsdWVzIHByZXNlbnQgaW4gZGVjaW1hbC5weS4gVGhlc2UgdmFsdWVzIHdlcmUKLSAgbGFyZ2VseSB1bmRvY3VtZW50ZWQuCi0KLS0gSXNzdWUgIzE2Mjk4OiBJbiBIVFRQUmVzcG9uc2UucmVhZCgpLCBjbG9zZSB0aGUgc29ja2V0IHdoZW4gdGhlcmUgaXMgbm8KLSAgQ29udGVudC1MZW5ndGggYW5kIHRoZSBpbmNvbWluZyBzdHJlYW0gaXMgZmluaXNoZWQuICBQYXRjaCBieSBFcmFuCi0gIFJ1bmRzdGVpbi4KLQotLSBJc3N1ZSAjMTU4NzI6IEZpeCAzLjMgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IHRoZSBuZXcgZmQtYmFzZWQgc2h1dGlsLnJtdHJlZQotICB0aGF0IGNhdXNlZCBpdCB0byBub3QgaWdub3JlIGNlcnRhaW4gZXJyb3JzIHdoZW4gaWdub3JlX2Vycm9ycyB3YXMgc2V0LgotICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhIGFuZCBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjI0ODogRGlzYWJsZSBjb2RlIGV4ZWN1dGlvbiBmcm9tIHRoZSB1c2VyJ3MgaG9tZSBkaXJlY3RvcnkgYnkKLSAgdGtpbnRlciB3aGVuIHRoZSAtRSBmbGFnIGlzIHBhc3NlZCB0byBQeXRob24uICBQYXRjaCBieSBaYWNoYXJ5IFdhcmUuCi0KLS0gSXNzdWUgIzE2NjI4OiBGaXggYSBtZW1vcnkgbGVhayBpbiBjdHlwZXMucmVzaXplKCkuCi0KLS0gSXNzdWUgIzEzNjE0OiBGaXggc2V0dXAucHkgcmVnaXN0ZXIgZmFpbHVyZSB3aXRoIGludmFsaWQgcnN0IGluIGRlc2NyaXB0aW9uLgotICBQYXRjaCBieSBKdWxpZW4gQ291cnRlYXUgYW5kIFBpZXJyZSBQYXVsIExlZmVidnJlLgotCi0tIElzc3VlICMxMzUxMjogQ3JlYXRlIH4vLnB5cGlyYyBzZWN1cmVseSAoQ1ZFLTIwMTEtNDk0NCkuICBJbml0aWFsIHBhdGNoIGJ5Ci0gIFBoaWxpcCBKZW52ZXksIHRlc3RlZCBieSBNYWdlaWEgYW5kIERlYmlhbi4KLQotLSBJc3N1ZSAjNzcxOTogTWFrZSBkaXN0dXRpbHMgaWdub3JlIGBgLm5mcypgYCBmaWxlcyBpbnN0ZWFkIG9mIGNob2tpbmcgbGF0ZXIKLSAgb24uICBJbml0aWFsIHBhdGNoIGJ5IFNpbGVudEdob3N0IGFuZCBKZWZmIFJhbW5hbmkuCi0KLS0gSXNzdWUgIzEzMTIwOiBBbGxvdyB0byBjYWxsIHBkYi5zZXRfdHJhY2UoKSBmcm9tIHRocmVhZC4KLSAgUGF0Y2ggYnkgSWx5YSBTYW5kbGVyLgotCi0tIElzc3VlICMxNjU4NTogTWFrZSBDSksgZW5jb2RlcnMgc3VwcG9ydCBlcnJvciBoYW5kbGVycyB0aGF0IHJldHVybiBieXRlcyBwZXIKLSAgUEVQIDM4My4KLQotLSBJc3N1ZSAjMTAxODI6IFRoZSByZSBtb2R1bGUgZG9lc24ndCB0cnVuY2F0ZSBpbmRpY2VzIHRvIDMyIGJpdHMgYW55bW9yZS4KLSAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTY1NzM6IEluIDJ0bzMsIHRyZWF0IGVudW1lcmF0ZSgpIGxpa2UgYSBjb25zdW1pbmcgY2FsbCwgc28gc3VwZXJmbHVvdXMKLSAgbGlzdCgpIGNhbGxzIGFyZW4ndCBhZGRlZCB0byBmaWx0ZXIoKSwgbWFwKCksIGFuZCB6aXAoKSB3aGljaCBhcmUgZGlyZWN0bHkKLSAgcGFzc2VkIGVudW1lcmF0ZSgpLgotCi0tIElzc3VlICMxMjg0ODogVGhlIHB1cmUgUHl0aG9uIHBpY2tsZSBpbXBsZW1lbnRhdGlvbiBub3cgdHJlYXRzIG9iamVjdAotICBsZW5ndGhzIGFzIHVuc2lnbmVkIDMyLWJpdCBpbnRlZ2VycywgbGlrZSB0aGUgQyBpbXBsZW1lbnRhdGlvbiBkb2VzLgotICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjQwODogRml4IGZpbGUgZGVzY3JpcHRvcnMgbm90IGJlaW5nIGNsb3NlZCBpbiBlcnJvciBjb25kaXRpb25zCi0gIGluIHRoZSB6aXBmaWxlIG1vZHVsZS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2NDgxOiBtdWx0aXByb2Nlc3Npbmcgbm8gbG9uZ2VyIGxlYWtzIHByb2Nlc3MgaGFuZGxlcyBvbiBXaW5kb3dzLgotCi0tIElzc3VlICMxNjE0MDogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBkb3VibGUgY2xvc2VzIGl0cyBjaGlsZAotICBzdWJwcm9jZXNzLlBJUEUgcGFyZW50IGZpbGUgZGVzY3JpcHRvcnMgb24gY2hpbGQgZXJyb3IgcHJpb3IgdG8gZXhlYygpLgotCi0tIFJlbW92ZSBhIGJhcmUgcHJpbnQgdG8gc3Rkb3V0IGZyb20gdGhlIHN1YnByb2Nlc3MgbW9kdWxlIHRoYXQgY291bGQgaGF2ZQotICBoYXBwZW5lZCBpZiB0aGUgY2hpbGQgcHJvY2VzcyB3cm90ZSBnYXJiYWdlIHRvIGl0cyBwcmUtZXhlYyBlcnJvciBwaXBlLgotCi0tIElzc3VlICMxNjMyNzogVGhlIHN1YnByb2Nlc3MgbW9kdWxlIG5vIGxvbmdlciBsZWFrcyBmaWxlIGRlc2NyaXB0b3JzCi0gIHVzZWQgZm9yIHN0ZGluL3N0ZG91dC9zdGRlcnIgcGlwZXMgdG8gdGhlIGNoaWxkIHdoZW4gZm9yaygpIGZhaWxzLgotCi0tIElzc3VlICMxNDM5NjogSGFuZGxlIHRoZSBvZGQgcmFyZSBjYXNlIG9mIHdhaXRwaWQgcmV0dXJuaW5nIDAgd2hlbiBub3QKLSAgZXhwZWN0ZWQgaW4gc3VicHJvY2Vzcy5Qb3Blbi53YWl0KCkuCi0KLS0gSXNzdWUgIzE2NDExOiBGaXggYSBidWcgd2hlcmUgemxpYi5kZWNvbXByZXNzb2JqKCkuZmx1c2goKSBtaWdodCB0cnkgdG8gYWNjZXNzCi0gIHByZXZpb3VzbHktZnJlZWQgbWVtb3J5LiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjM1NzogZml4IGNhbGxpbmcgYWNjZXB0KCkgb24gYSBTU0xTb2NrZXQgY3JlYXRlZCB0aHJvdWdoCi0gIFNTTENvbnRleHQud3JhcF9zb2NrZXQoKS4gIE9yaWdpbmFsIHBhdGNoIGJ5IEplZmYgTWNOZWlsLgotCi0tIElzc3VlICMxNjQwOTogVGhlIHJlcG9ydGhvb2sgY2FsbGJhY2sgbWFkZSBieSB0aGUgbGVnYWN5Ci0gIHVybGxpYi5yZXF1ZXN0LnVybHJldHJpZXZlIEFQSSBub3cgcHJvcGVybHkgc3VwcGxpZXMgYSBjb25zdGFudCBub24temVybwotICBibG9ja19zaXplIGFzIGl0IGRpZCBpbiBQeXRob24gMy4yIGFuZCAyLjcuICBUaGlzIG1hdGNoZXMgdGhlIGJlaGF2aW9yIG9mCi0gIHVybGxpYi5yZXF1ZXN0LlVSTG9wZW5lci5yZXRyaWV2ZS4KLQotLSBJc3N1ZSAjMTY0MzE6IFVzZSB0aGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIGNvbnN0cnVjdGluZyBhIERlY2ltYWwgc3VidHlwZQotICBmcm9tIGEgRGVjaW1hbCBhcmd1bWVudC4KLQotLSBJc3N1ZSAjMTYzNTA6IHpsaWIuZGVjb21wcmVzc29iaigpLmRlY29tcHJlc3MoKSBub3cgYWNjdW11bGF0ZXMgZGF0YSBmcm9tCi0gIHN1Y2Nlc3NpdmUgY2FsbHMgYWZ0ZXIgRU9GIGluIHVudXNlZF9kYXRhLCBpbnN0ZWFkIG9mIG9ubHkgc2F2aW5nIHRoZSBhcmd1bWVudAotICB0byB0aGUgbGFzdCBjYWxsLiBkZWNvbXByZXNzb2JqKCkuZmx1c2goKSBub3cgY29ycmVjdGx5IHNldHMgdW51c2VkX2RhdGEgYW5kCi0gIHVuY29uc3VtZWRfdGFpbC4gQSBidWcgaW4gdGhlIGhhbmRsaW5nIG9mIE1lbW9yeUVycm9yIHdoZW4gc2V0dGluZyB0aGUKLSAgdW5jb25zdW1lZF90YWlsIGF0dHJpYnV0ZSBoYXMgYWxzbyBiZWVuIGZpeGVkLiBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxMjc1OTogc3JlX3BhcnNlIG5vdyByYWlzZXMgYSBwcm9wZXIgZXJyb3Igd2hlbiB0aGUgbmFtZSBvZiB0aGUgZ3JvdXAKLSAgaXMgbWlzc2luZy4gIEluaXRpYWwgcGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KLQotLSBJc3N1ZSAjMTYxNTI6IGZpeCB0b2tlbml6ZSB0byBpZ25vcmUgd2hpdGVzcGFjZSBhdCB0aGUgZW5kIG9mIHRoZSBjb2RlIHdoZW4KLSAgbm8gbmV3bGluZSBpcyBmb3VuZC4gIFBhdGNoIGJ5IE5lZCBCYXRjaGVsZGVyLgotCi0tIElzc3VlICMxNjIzMDogRml4IGEgY3Jhc2ggaW4gc2VsZWN0LnNlbGVjdCgpIHdoZW4gb25lIHRoZSBsaXN0cyBjaGFuZ2VzCi0gIHNpemUgd2hpbGUgaXRlcmF0ZWQgb24uICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgotCi0tIElzc3VlICMxNjIyODogRml4IGEgY3Jhc2ggaW4gdGhlIGpzb24gbW9kdWxlIHdoZXJlIGEgbGlzdCBjaGFuZ2VzIHNpemUKLSAgd2hpbGUgaXQgaXMgYmVpbmcgZW5jb2RlZC4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE0ODk3OiBFbmhhbmNlIGVycm9yIG1lc3NhZ2VzIG9mIHN0cnVjdC5wYWNrIGFuZAotICBzdHJ1Y3QucGFja19pbnRvLiBQYXRjaCBieSBNYXR0aSBNw6RraS4KLQotLSBJc3N1ZSAjMTI4OTA6IGNnaXRiIG5vIGxvbmdlciBwcmludHMgc3B1cmlvdXMgPHA+IHRhZ3MgaW4gdGV4dAotICBtb2RlIHdoZW4gdGhlIGxvZ2RpciBvcHRpb24gaXMgc3BlY2lmaWVkLgotCi0tIElzc3VlICMxNjMwNzogRml4IG11bHRpcHJvY2Vzc2luZy5Qb29sLm1hcF9hc3luYyBub3QgY2FsbGluZyBpdHMgY2FsbGJhY2tzLgotICBQYXRjaCBieSBKYW5uZSBLYXJpbGEuCi0KLS0gSXNzdWUgIzE2MjUwOiBGaXggVVJMRXJyb3IgaW52b2NhdGlvbiB3aXRoIHByb3BlciBhcmdzLgotCi0tIElzc3VlICMxNjExNjogRml4IGluY2x1ZGUgYW5kIGxpYnJhcnkgcGF0aHMgdG8gYmUgY29ycmVjdCB3aGVuIGJ1aWxkaW5nIEMKLSAgZXh0ZW5zaW9ucyBpbiB2ZW52cy4KLQotLSBJc3N1ZSAjMTYyNDU6IEZpeCB0aGUgdmFsdWUgb2YgYSBmZXcgZW50aXRpZXMgaW4gaHRtbC5lbnRpdGllcy5odG1sNS4KLQotLSBJc3N1ZSAjMTQzOTg6IEZpeCBzaXplIHRydW5jYXRpb24gYW5kIG92ZXJmbG93IGJ1Z3MgaW4gdGhlIGJ6MiBtb2R1bGUuCi0KLS0gSXNzdWUgIzE2MjIwOiB3c2dpcmVmIG5vdyBhbHdheXMgY2FsbHMgY2xvc2UoKSBvbiBhbiBpdGVyYWJsZSByZXNwb25zZS4KLSAgUGF0Y2ggYnkgQnJlbnQgVHViYnMuCi0KLS0gSXNzdWUgIzE2MjcwOiB1cmxsaWIgbWF5IGhhbmcgd2hlbiB1c2VkIGZvciByZXRyaWV2aW5nIGZpbGVzIHZpYSBGVFAgYnkgdXNpbmcKLSAgYSBjb250ZXh0IG1hbmFnZXIuICBQYXRjaCBieSBHaWFtcGFvbG8gUm9kb2xhJy4KLQotLSBJc3N1ZSAjMTY0NjE6IFdhdmUgbGlicmFyeSBzaG91bGQgYmUgYWJsZSB0byBkZWFsIHdpdGggNEdCIHdhdiBmaWxlcywKLSAgYW5kIHNhbXBsZSByYXRlIG9mIDQ0MTAwIEh6LgotCi0tIElzc3VlICMxNjE3NjogUHJvcGVybHkgaWRlbnRpZnkgV2luZG93cyA4IHZpYSBwbGF0Zm9ybS5wbGF0Zm9ybSgpCi0KLS0gSXNzdWUgIzE2MTE0OiBUaGUgc3VicHJvY2VzcyBtb2R1bGUgbm8gbG9uZ2VyIHByb3ZpZGVzIGEgbWlzbGVhZGluZyBlcnJvcgotICBtZXNzYWdlIHN0YXRpbmcgdGhhdCBhcmdzWzBdIGRpZCBub3QgZXhpc3Qgd2hlbiBlaXRoZXIgdGhlIGN3ZCBvciBleGVjdXRhYmxlCi0gIGtleXdvcmQgYXJndW1lbnRzIHNwZWNpZmllZCBhIHBhdGggdGhhdCBkaWQgbm90IGV4aXN0LgotCi0tIElzc3VlICMxNjE2OTogRml4IGN0eXBlcy5XaW5FcnJvcigpJ3MgY29uZnVzaW9uIGJldHdlZW4gZXJybm8gYW5kIHdpbmVycm9yLgotCi0tIElzc3VlICMxNjA3NjogTWFkZSBfZWxlbWVudHRyZWUuRWxlbWVudCBwaWNrbGVhYmxlIGluIGEgd2F5IHRoYXQgaXMgY29tcGF0aWJsZQotICB3aXRoIHRoZSBQeXRob24gRWxlbWVudC4gUGlja2xpbmcvdW5waWNrbGluZyBvZiB4bWwuZXRyZWUuRWxlbWVudFRyZWUuRWxlbWVudAotICB3b3JrcyBhZ2FpbiAtIHRoaXMgd2FzIGEgdGVtcG9yYXJ5IHJlZ3Jlc3Npb24gZnJvbSAzLjIgd2hlcmUgdGhlIGJ5LWRlZmF1bHQKLSAgaW1wb3J0ZWQgX2VsZW1lbnR0cmVlIGhhZCBubyBwaWNrbGluZyBjYXBhYmlsaXR5LgotCi0tIElzc3VlICMxNjA4OTogQWxsb3cgRWxlbWVudFRyZWUuVHJlZUJ1aWxkZXIgdG8gd29yayBhZ2FpbiB3aXRoIGEgbm9uLUVsZW1lbnQKLSAgZWxlbWVudF9mYWN0b3J5IChmaXhlcyBhIHJlZ3Jlc3Npb24gaW4gU2ltcGxlVEFMKS4KLQotLSBJc3N1ZSAjMTY5MTM6IEZpeCBFbGVtZW50Lml0ZXJ0ZXh0KCkncyBoYW5kbGluZyBvZiB0ZXh0IHdpdGggWE1MIGVudGl0aWVzLiwKLQotLSBJc3N1ZSAjMTYwMzQ6IEZpeCBwZXJmb3JtYW5jZSByZWdyZXNzaW9ucyBpbiB0aGUgbmV3IGBiejIuQloyRmlsZWAKLSAgaW1wbGVtZW50YXRpb24uICBJbml0aWFsIHBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE2MTEyOiBwbGF0Zm9ybS5hcmNoaXRlY3R1cmUgZG9lcyBub3QgY29ycmVjdGx5IGVzY2FwZSBhcmd1bWVudCB0bwotICAvdXNyL2Jpbi9maWxlLiAgUGF0Y2ggYnkgRGF2aWQgQmVuamFtaW4uCi0KLS0gSXNzdWUgIzE1NzU2OiBgc3VicHJvY2Vzcy5wb2xsKClgIG5vdyBwcm9wZXJseSBoYW5kbGVzIGBlcnJuby5FQ0hJTERgIHRvCi0gIHJldHVybiBhIHJldHVybmNvZGUgb2YgMCB3aGVuIHRoZSBjaGlsZCBoYXMgYWxyZWFkeSBleGl0ZWQgb3IgY2Fubm90IGJlIHdhaXRlZAotICBvbi4KLQotLSBJc3N1ZSAjMTUzMjM6IEltcHJvdmUgZmFpbHVyZSBtZXNzYWdlIG9mIGBNb2NrLmFzc2VydF9jYWxsZWRfb25jZV93aXRoKClgLgotCi0tIElzc3VlICMxNjA2NDogYGB1bml0dGVzdCAtbWBgIGNsYWltcyBleGVjdXRhYmxlIGlzICJweXRob24iLCBub3QgInB5dGhvbjMiLgotCi0tIElzc3VlICMxMjM3NjogUGFzcyBvbiBwYXJhbWV0ZXJzIGluIGBUZXh0VGVzdFJlc3VsdC5fX2luaXRfXygpYCBzdXBlciBjYWxsLgotCi0tIElzc3VlICMxNTIyMjogSW5zZXJ0IGJsYW5rIGxpbmUgYWZ0ZXIgZWFjaCBtZXNzYWdlIGluIG1ib3ggbWFpbGJveGVzLgotCi0tIElzc3VlICMxNjAxMzogRml4IGBjc3YuUmVhZGVyYCBwYXJzaW5nIGlzc3VlIHdpdGggZW5kaW5nIHF1b3RlIGNoYXJhY3RlcnMuCi0gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzE1NDIxOiBGaXggYW4gT3ZlcmZsb3dFcnJvciBpbiBgQ2FsZW5kYXIuaXRlcm1vbnRoZGF0ZXMoKWAgYWZ0ZXIKLSAgYGRhdGV0aW1lLk1BWFlFQVJgLiAgUGF0Y2ggYnkgQ8OpZHJpYyBLcmllci4KLQotLSBJc3N1ZSAjMTU5NzA6IGB4bWwuZXRyZWUuRWxlbWVudFRyZWVgIG5vdyBzZXJpYWxpemVzIGNvcnJlY3RseSB0aGUgZW1wdHkgSFRNTAotICBlbGVtZW50cyAnbWV0YScgYW5kICdwYXJhbScuCi0KLS0gSXNzdWUgIzE1ODQyOiBUaGUgYFNvY2tldElPLntyZWFkYWJsZSx3cml0YWJsZSxzZWVrYWJsZX1gIG1ldGhvZHMgbm93IHJhaXNlCi0gIFZhbHVlRXJyb3Igd2hlbiB0aGUgZmlsZS1saWtlIG9iamVjdCBpcyBjbG9zZWQuICBQYXRjaCBieSBBbGVzc2FuZHJvIE1vdXJhLgotCi0tIElzc3VlICMxNTg3NjogRml4IGEgcmVmbGVhayBpbiB0aGUgYGN1cnNlc2AgbW9kdWxlOiB3aW5kb3cuZW5jb2RpbmcuCi0KLS0gSXNzdWUgIzE1ODgxOiBGaXggYGF0ZXhpdGAgaG9vayBpbiBgbXVsdGlwcm9jZXNzaW5nYC4gIE9yaWdpbmFsIHBhdGNoIGJ5IENocmlzCi0gIE1jRG9ub3VnaC4KLQotLSBJc3N1ZSAjMTU4NDE6IFRoZSByZWFkYWJsZSgpLCB3cml0YWJsZSgpIGFuZCBzZWVrYWJsZSgpIG1ldGhvZHMgb2YKLSAgYGlvLkJ5dGVzSU9gIGFuZCBgaW8uU3RyaW5nSU9gIG9iamVjdHMgbm93IHJhaXNlIFZhbHVlRXJyb3Igd2hlbiB0aGUgb2JqZWN0Ci0gIGhhcyBiZWVuIGNsb3NlZC4gIFBhdGNoIGJ5IEFsZXNzYW5kcm8gTW91cmEuCi0KLS0gSXNzdWUgIzE1NDQ3OiBVc2UgYHN1YnByb2Nlc3MuREVWTlVMTGAgaW4gd2ViYnJvd3NlciwgaW5zdGVhZCBvZiBvcGVuaW5nCi0gIGBvcy5kZXZudWxsYCBleHBsaWNpdGx5IGFuZCBsZWF2aW5nIGl0IG9wZW4uCi0KLS0gSXNzdWUgIzE1NTA5OiBgd2ViYnJvd3Nlci5Vbml4QnJvd3NlcmAgbm8gbG9uZ2VyIHBhc3NlcyBlbXB0eSBhcmd1bWVudHMgdG8KLSAgUG9wZW4gd2hlbiBgYCVhY3Rpb25gYCBzdWJzdGl0dXRpb25zIHByb2R1Y2UgZW1wdHkgc3RyaW5ncy4KLQotLSBJc3N1ZSAjMTI3NzYsIGlzc3VlICMxMTgzOTogQ2FsbCBgYXJncGFyc2VgIHR5cGUgZnVuY3Rpb24gKHNwZWNpZmllZCBieQotICBhZGRfYXJndW1lbnQpIG9ubHkgb25jZS4gIEJlZm9yZSwgdGhlIHR5cGUgZnVuY3Rpb24gd2FzIGNhbGxlZCB0d2ljZSBpbiB0aGUKLSAgY2FzZSB3aGVyZSB0aGUgZGVmYXVsdCB3YXMgc3BlY2lmaWVkIGFuZCB0aGUgYXJndW1lbnQgd2FzIGdpdmVuIGFzIHdlbGwuICBUaGlzCi0gIHdhcyBlc3BlY2lhbGx5IHByb2JsZW1hdGljIGZvciB0aGUgRmlsZVR5cGUgdHlwZSwgYXMgYSBkZWZhdWx0IGZpbGUgd291bGQKLSAgYWx3YXlzIGJlIG9wZW5lZCwgZXZlbiBpZiBhIGZpbGUgYXJndW1lbnQgd2FzIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgotCi0tIElzc3VlICMxNTkwNjogRml4IGEgcmVncmVzc2lvbiBpbiBgYXJncGFyc2VgIGNhdXNlZCBieSB0aGUgcHJlY2VkaW5nIGNoYW5nZSwKLSAgd2hlbiBgYGFjdGlvbj0nYXBwZW5kJ2BgLCBgYHR5cGU9J3N0cidgYCBhbmQgYGBkZWZhdWx0PVtdYGAuCi0KLUlETEUKLS0tLS0KLQotLSBJc3N1ZSAjMTcxMTQ6IElETEUgbm93IHVzZXMgbm9uLXN0cmljdCBjb25maWcgcGFyc2VyLgotCi0tIElzc3VlICM5MjkwOiBJbiBJRExFIHRoZSBzeXMuc3RkKiBzdHJlYW1zIG5vdyBpbXBsZW1lbnQgaW8uVGV4dElPQmFzZQotICBpbnRlcmZhY2UgYW5kIHN1cHBvcnQgYWxsIG1hbmRhdG9yeSBtZXRob2RzIGFuZCBwcm9wZXJ0aWVzLgotCi0tIElzc3VlICMxNjgyOTogSURMRSBwcmludGluZyBubyBsb25nZXIgZmFpbHMgaWYgdGhlcmUgYXJlIHNwYWNlcyBvciBvdGhlcgotICBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gdGhlIGZpbGUgcGF0aC4KLQotLSBJc3N1ZSAjMTY0OTE6IElETEUgbm93IHByaW50cyBjaGFpbmVkIGV4Y2VwdGlvbiB0cmFjZWJhY2tzLgotCi0tIElzc3VlICMxNjgxOTogSURMRSBtZXRob2QgY29tcGxldGlvbiBub3cgY29ycmVjdGx5IHdvcmtzIGZvciBieXRlcyBsaXRlcmFscy4KLQotLSBJc3N1ZSAjMTY1MDQ6IElETEUgbm93IGNhdGNoZXMgU3ludGF4RXJyb3JzIHJhaXNlZCBieSB0b2tlbml6ZXIuIFBhdGNoIGJ5Ci0gIFJvZ2VyIFNlcnd5LgotCi0tIElzc3VlICMxNjUxMTogVXNlIGRlZmF1bHQgSURMRSB3aWR0aCBhbmQgaGVpZ2h0IGlmIGNvbmZpZyBwYXJhbSBpcyBub3QgdmFsaWQuCi0gIFBhdGNoIFNlcmhpeSBTdG9yY2hha2EuCi0KLS0gSXNzdWUgIzEyMDc1ODk6IEFkZCBDdXQvQ29weS9QYXN0ZSBpdGVtcyB0byBJRExFIHJpZ2h0IGNsaWNrIENvbnRleHQgTWVudQotICBQYXRjaCBieSBUb2RkIFJvdml0by4KLQotVGVzdHMKLS0tLS0tCistIElzc3VlICMxMTk5NTogdGVzdF9weWRvYyBkb2Vzbid0IGltcG9ydCBhbGwgc3lzLnBhdGggbW9kdWxlcyBhbnltb3JlLgogCiAtIElzc3VlICMxNzQ0ODogdGVzdF9zYXggbm93IHNraXBzIGlmIHRoZXJlIGFyZSBubyB4bWwgcGFyc2VycyBhdmFpbGFibGUKICAgaW5zdGVhZCBvZiByYWlzaW5nIGFuIEltcG9ydEVycm9yLgpAQCAtMjM5NCw4ICs2MDU0LDE1IEBACiAKIC0gSXNzdWUgIzEzODk4OiB0ZXN0X3NzbCBubyBsb25nZXIgcHJpbnRzIGEgc3B1cmlvdXMgc3RhY2sgdHJhY2Ugb24gVWJ1bnR1LgogCistIElzc3VlICMxNzI4MzogU2hhcmUgY29kZSBiZXR3ZWVuIGBfX21haW5fXy5weWAgYW5kIGByZWdydGVzdC5weWAgaW4KKyAgYExpYi90ZXN0YC4KKwogLSBJc3N1ZSAjMTcyNDk6IGNvbnZlcnQgYSB0ZXN0IGluIHRlc3RfY2FwaSB0byB1c2UgdW5pdHRlc3QgYW5kIHJlYXAgdGhyZWFkcy4KIAorLSBJc3N1ZSAjMTcxMDc6IFRlc3QgY2xpZW50LXNpZGUgU05JIHN1cHBvcnQgaW4gdXJsbGliLnJlcXVlc3QgdGhhbmtzIHRvCisgIHRoZSBuZXcgc2VydmVyLXNpZGUgU05JIHN1cHBvcnQgaW4gdGhlIHNzbCBtb2R1bGUuICBJbml0aWFsIHBhdGNoIGJ5CisgIERhbmllbCBCbGFjay4KKwogLSBJc3N1ZSAjMTcwNDE6IEZpeCB0ZXN0aW5nIHdoZW4gUHl0aG9uIGlzIGNvbmZpZ3VyZWQgd2l0aCB0aGUKICAgLS13aXRob3V0LWRvYy1zdHJpbmdzLgogCkBAIC0yNDYyLDYgKzYxMjksMTEgQEAKIAogLSBJc3N1ZSAjMTY3NDg6IHRlc3RfaGVhcHEgbm93IHdvcmtzIHdpdGggdW5pdHRlc3QgdGVzdCBkaXNjb3ZlcnkuCiAKKy0gSXNzdWUgIzEwNjQ2OiBUZXN0cyByZWFycmFuZ2VkIGZvciBvcy5zYW1lZmlsZS9zYW1lc3RhdCB0byBjaGVjayBmb3Igbm90CisgIGp1c3Qgc3ltbGlua3MgYnV0IGFsc28gaGFyZCBsaW5rcy4KKworLSBJc3N1ZSAjMTUzMDI6IFN3aXRjaCByZWdydGVzdCBmcm9tIHVzaW5nIGdldG9wdCB0byB1c2luZyBhcmdwYXJzZS4KKwogLSBJc3N1ZSAjMTUzMjQ6IEZpeCByZWdydGVzdCBwYXJzaW5nIG9mIC0tZnJvbWZpbGUsIC0tbWF0Y2gsIGFuZCAtLXJhbmRvbWl6ZQogICBvcHRpb25zLgogCkBAIC0yNDcxLDYgKzYxNDMsOSBAQAogLSBJc3N1ZSAjMTY2NjQ6IEFkZCByZWdyZXNzaW9uIHRlc3RzIGZvciBnbG9iJ3MgYmVoYXZpb3VyIGNvbmNlcm5pbmcgZW50cmllcwogICBzdGFydGluZyB3aXRoIGEgIi4iLiAgUGF0Y2ggYnkgU2ViYXN0aWFuIEtyZWZ0LgogCistIElzc3VlICMxMzM5MDogVGhlIGBgLVJgYCBvcHRpb24gdG8gcmVncnRlc3Qgbm93IGFsc28gY2hlY2tzIGZvciBtZW1vcnkKKyAgYWxsb2NhdGlvbiBsZWFrcywgdXNpbmcgOmZ1bmM6YHN5cy5nZXRhbGxvY2F0ZWRibG9ja3MoKWAuCisKIC0gSXNzdWUgIzE2NTU5OiBBZGQgbW9yZSB0ZXN0cyBmb3IgdGhlIGpzb24gbW9kdWxlLCBpbmNsdWRpbmcgc29tZSBmcm9tIHRoZQogICBvZmZpY2lhbCB0ZXN0IHN1aXRlIGF0IGpzb24ub3JnLiAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KIApAQCAtMjQ4OSw3ICs2MTY0LDcgQEAKIC0gSXNzdWUgIzE1ODAyOiBGaXggdGVzdCBsb2dpYyBpbiBgVGVzdE1haWxkaXIudGVzdF9jcmVhdGVfdG1wKClgLiBQYXRjaCBieQogICBTZXJoaXkgU3RvcmNoYWthLgogCi0tIElzc3VlICMxNTU1NzogQWRkIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIGB3ZWJicm93c2VyYCBtb2R1bGUsIHRoYW5rcyB0byBBbnRvbgorLSBJc3N1ZSAjMTU1NTc6IEFkZGVkIGEgdGVzdCBzdWl0ZSBmb3IgdGhlIHdlYmJyb3dzZXIgbW9kdWxlLCB0aGFua3MgdG8gQW50b24KICAgQmFya292c2t5LgogCiAtIElzc3VlICMxNjY5ODogU2tpcCBwb3NpeCB0ZXN0X2dldGdyb3VwcyB3aGVuIGJ1aWx0IHdpdGggT1MgWApAQCAtMjQ5OCw2ICs2MTczLDMwIEBACiBCdWlsZAogLS0tLS0KIAorLSBJc3N1ZSAjMTYwNjc6IEFkZCBkZXNjcmlwdGlvbiBpbnRvIE1TSSBmaWxlIHRvIHJlcGxhY2UgaW5zdGFsbGVyJ3MKKyAgdGVtcG9yYXJ5IG5hbWUuCisKKy0gSXNzdWUgIzE4MjU3OiBGaXggcmVhZGxpbmsgdXNhZ2UgaW4gcHl0aG9uLWNvbmZpZy4gIEluc3RhbGwgdGhlIHB5dGhvbgorICB2ZXJzaW9uIGFnYWluIG9uIERhcndpbi4KKworLSBJc3N1ZSAjMTg0ODE6IEFkZCBDIGNvdmVyYWdlIHJlcG9ydGluZyB3aXRoIGdjb3YgYW5kIGxjb3YuIEEgbmV3IG1ha2UgdGFyZ2V0CisgICJjb3ZlcmFnZS1yZXBvcnQiIGNyZWF0ZXMgYW4gaW5zdHJ1bWVudGVkIFB5dGhvbiBidWlsZCwgcnVucyB1bml0IHRlc3RzCisgIGFuZCBjcmVhdGVzIGEgSFRNTC4gVGhlIHJlcG9ydCBjYW4gYmUgdXBkYXRlZCB3aXRoICJtYWtlIGNvdmVyYWdlLWxjb3YiLgorCistIElzc3VlICMxNzg0NTogQ2xhcmlmaWVkIHRoZSBtZXNzYWdlIHByaW50ZWQgd2hlbiBzb21lIG1vZHVsZSBhcmUgbm90IGJ1aWx0LgorCistIElzc3VlICMxODI1NjogQ29tcGlsYXRpb24gZml4IGZvciByZWNlbnQgQUlYIHJlbGVhc2VzLiAgUGF0Y2ggYnkKKyAgRGF2aWQgRWRlbHNvaG4uCisKKy0gSXNzdWUgIzE3NTQ3OiBJbiBjb25maWd1cmUsIGV4cGxpY2l0bHkgcGFzcyAtV2Zvcm1hdCBmb3IgdGhlIGJlbmVmaXQgZm9yIEdDQworICA0LjguCisKKy0gSXNzdWUgIzE1MTcyOiBEb2N1bWVudCBOQVNNIDIuMTArIGFzIHJlcXVpcmVtZW50IGZvciBidWlsZGluZyBPcGVuU1NMIDEuMC4xCisgIG9uIFdpbmRvd3MuCisKKy0gSXNzdWUgIzE3NTkxOiBVc2UgbG93ZXJjYXNlIGZpbGVuYW1lcyB3aGVuIGluY2x1ZGluZyBXaW5kb3dzIGhlYWRlciBmaWxlcy4KKyAgUGF0Y2ggYnkgUm91bWVuIFBldHJvdi4KKwogLSBJc3N1ZSAjMTc1NTA6IEZpeCB0aGUgLS1lbmFibGUtcHJvZmlsaW5nIGNvbmZpZ3VyZSBzd2l0Y2guCiAKIC0gSXNzdWUgIzE3NDI1OiBCdWlsZCB3aXRoIG9wZW5zc2wgMS4wLjFkIG9uIFdpbmRvd3MuCkBAIC0yNTEzLDYgKzYyMTIsMTAgQEAKIAogLSBJc3N1ZSAjMzcxODogVXNlIEFDX0FSR19WQVIgdG8gc2V0IE1BQ0hERVAgaW4gY29uZmlndXJlLmFjLgogCistIElzc3VlICMxNjIzNTogSW1wbGVtZW50IHB5dGhvbi1jb25maWcgYXMgYSBzaGVsbCBzY3JpcHQuCisKKy0gSXNzdWUgIzE2NzY5OiBSZW1vdmUgb3V0ZGF0ZWQgVmlzdWFsIFN0dWRpbyBwcm9qZWN0cy4KKwogLSBJc3N1ZSAjMTcwMzE6IEZpeCBydW5uaW5nIHJlZ2VuIGluIGNyb3NzIGJ1aWxkcy4KIAogLSBJc3N1ZSAjMzc1NDogZml4IHR5cG8gaW4gcHRocmVhZCBBQ19DQUNIRV9WQUwuCkBAIC0yNTIwLDEyICs2MjIzLDE0IEBACiAtIElzc3VlICMxNTQ4NDogRml4IF9QWVRIT05fUFJPSkVDVF9CQVNFIGZvciBzcmNkaXIgIT0gYnVpbGRkaXIgYnVpbGRzOwogICB1c2UgX1BZVEhPTl9QUk9KRUNUX0JBU0UgaW4gZGlzdHV0aWxzL3N5c2NvbmZpZy5weS4KIAorLSBEcm9wIHN1cHBvcnQgZm9yIFdpbmRvd3MgMjAwMCAoY2hhbmdlc2V0IGU1MmRmMDViNDk2YSkuCisKIC0gSXNzdWUgIzE3MDI5OiBMZXQgaDJweSBzZWFyY2ggdGhlIG11bHRpYXJjaCBzeXN0ZW0gaW5jbHVkZSBkaXJlY3RvcnkuCiAKIC0gSXNzdWUgIzE2OTUzOiBGaXggc29ja2V0IG1vZHVsZSBjb21waWxhdGlvbiBvbiBwbGF0Zm9ybXMgd2l0aAogICBIQVZFX0JST0tFTl9QT0xMLiBQYXRjaCBieSBKZWZmcmV5IEFybXN0cm9uZy4KIAotLSBJc3N1ZSAjMTY4MzY6IEVuYWJsZSBJUHY2IHN1cHBvcnQgZXZlbiBpZiBJUHY2IGlzIGRpc2FibGVkIG9uIHRoZSBidWlsZCBob3N0LgorLSBJc3N1ZSAjMTYzMjA6IFJlbW92ZSByZWR1bmRhbnQgTWFrZWZpbGUgZGVwZW5kZW5jaWVzIGZvciBzdHJpbmdzIGFuZCBieXRlcy4KIAogLSBDcm9zcyBjb21waWxpbmcgbmVlZHMgaG9zdCBhbmQgYnVpbGQgc2V0dGluZ3MuIGNvbmZpZ3VyZSBubyBsb25nZXIKICAgY3JlYXRlcyBhIGJyb2tlbiBQWVRIT05fRk9SX0JVSUxEIHZhcmlhYmxlIHdoZW4gLS1idWlsZCBpcyBtaXNzaW5nLgpAQCAtMjUzMyw2ICs2MjM4LDggQEAKIC0gRml4IGNyb3NzIGNvbXBpbGluZyBpc3N1ZSBpbiBzZXR1cC5weSwgZW5zdXJlIHRoYXQgbGliX2RpcnMgYW5kIGluY19kaXJzIGFyZQogICBkZWZpbmVkIGluIGNyb3NzIGNvbXBpbGluZyBtb2RlLCB0b28uCiAKKy0gSXNzdWUgIzE2ODM2OiBFbmFibGUgSVB2NiBzdXBwb3J0IGV2ZW4gaWYgSVB2NiBpcyBkaXNhYmxlZCBvbiB0aGUgYnVpbGQgaG9zdC4KKwogLSBJc3N1ZSAjMTY1OTM6IEhhdmUgQlNEICdtYWtlIC1zJyBkbyB0aGUgcmlnaHQgdGhpbmcsIHRoYW5rcyB0byBEYW5pZWwgU2hhaGFmCiAKIC0gSXNzdWUgIzE2MjYyOiBmaXggb3V0LW9mLXNyYy10cmVlIGJ1aWxkcywgaWYgbWVyY3VyaWFsIGlzIG5vdCBpbnN0YWxsZWQuCkBAIC0yNTQ3LDYgKzYyNTQsOCBAQAogLSBJc3N1ZSAjMTU5MjM6IEZpeCBhIG1pc3Rha2UgaW4gYGBhc2RsX2MucHlgYCB0aGF0IHJlc3VsdGVkIGluIGEgVHlwZUVycm9yCiAgIGFmdGVyIDI4MDFiZjg3NWEyNCAoc2VlICMxNTgwMSkuCiAKKy0gSXNzdWUgIzE2MTM1OiBSZW1vdmUgT1MvMiBzdXBwb3J0LgorCiAtIElzc3VlICMxNTgxOTogTWFrZSBzdXJlIHdlIGNhbiBidWlsZCBQeXRob24gb3V0LW9mLXRyZWUgZnJvbSBhIHJlYWQtb25seQogICBzb3VyY2UgZGlyZWN0b3J5LiAgKFNvbWV3aGF0IHJlbGF0ZWQgdG8gaXNzdWUgIzk4NjAuKQogCkBAIC0yNTU5LDEyICs2MjY4LDU1IEBACiBDLUFQSQogLS0tLS0KIAorLSBJc3N1ZSAjMTgzNTE6IEZpeCB2YXJpb3VzIGlzc3VlcyBpbiBhIGZ1bmN0aW9uIGluIGltcG9ydGxpYiBwcm92aWRlZCB0byBoZWxwCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcygpIChhbmQgdGh1cyBieSBleHRlbnNpb24KKyAgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoKSBhbmQgUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCgpKS4KKworLSBJc3N1ZSAjOTM2OTogVGhlIHR5cGVzIG9mIGBjaGFyKmAgYXJndW1lbnRzIG9mIFB5T2JqZWN0X0NhbGxGdW5jdGlvbigpIGFuZAorICBQeU9iamVjdF9DYWxsTWV0aG9kKCkgbm93IGNoYW5nZWQgdG8gYGNvbnN0IGNoYXIqYC4gIEJhc2VkIG9uIHBhdGNoZXMgYnkKKyAgSsO2cmcgTcO8bGxlciBhbmQgTGFycyBCdWl0aW5jay4KKworLSBJc3N1ZSAjMTcyMDY6IFB5X0NMRUFSKCksIFB5X0RFQ1JFRigpLCBQeV9YSU5DUkVGKCkgYW5kIFB5X1hERUNSRUYoKSBub3cKKyAgZXhwYW5kIHRoZWlyIGFyZ3VtZW50cyBvbmNlIGluc3RlYWQgb2YgbXVsdGlwbGUgdGltZXMuICBQYXRjaCB3cml0dGVuIGJ5IElsbGlhCisgIFBvbG9zdWtoaW4uCisKKy0gSXNzdWUgIzE3NTIyOiBBZGQgdGhlIFB5R0lMU3RhdGVfQ2hlY2soKSBBUEkuCisKKy0gSXNzdWUgIzE3MzI3OiBBZGQgUHlEaWN0X1NldERlZmF1bHQuCisKIC0gSXNzdWUgIzE2ODgxOiBGaXggUHlfQVJSQVlfTEVOR1RIIG1hY3JvIGZvciBHQ0MgPCAzLjEuCiAKKy0gSXNzdWUgIzE2NTA1OiBSZW1vdmUgdW51c2VkIFB5X1RQRkxBR1NfSU5UX1NVQkNMQVNTLgorCistIElzc3VlICMxNjA4NjogUHlUeXBlT2JqZWN0LnRwX2ZsYWdzIGFuZCBQeVR5cGVfU3BlYy5mbGFncyBhcmUgbm93IHVuc2lnbmVkCisgICh1bnNpZ25lZCBsb25nIGFuZCB1bnNpZ25lZCBpbnQpIHRvIGF2b2lkIGFuIHVuZGVmaW5lZCBiZWhhdmlvdXIgd2l0aAorICBQeV9UUEZMQUdTX1RZUEVfU1VCQ0xBU1MgKCgxIDw8IDMxKS4gUHlUeXBlX0dldEZsYWdzKCkgcmVzdWx0IHR5cGUgaXMKKyAgbm93IHVuc2lnbmVkIHRvbyAodW5zaWduZWQgbG9uZywgaW5zdGVhZCBvZiBsb25nKS4KKworLSBJc3N1ZSAjMTYxNjY6IEFkZCBQWV9MSVRUTEVfRU5ESUFOIGFuZCBQWV9CSUdfRU5ESUFOIG1hY3JvcyBhbmQgdW5pZmllZAorICBlbmRpYW5uZXNzIGRldGVjdGlvbiBhbmQgaGFuZGxpbmcuCisKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAotLSBJc3N1ZSAxNzUzODogRG9jdW1lbnQgWE1MIHZ1bG5lcmFiaWx0aWVzCistIElzc3VlICMxNzcwMTogSW1wcm92aW5nIHN0cmZ0aW1lIGRvY3VtZW50YXRpb24uCisKKy0gSXNzdWUgIzE4NDQwOiBDbGFyaWZ5IHRoYXQgYGhhc2goKWAgY2FuIHRydW5jYXRlIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tIGFuCisgIG9iamVjdCdzIGN1c3RvbSBgX19oYXNoX18oKWAgbWV0aG9kLgorCistIElzc3VlICMxNzg0NDogQWRkIGxpbmtzIHRvIGVuY29kZXJzIGFuZCBkZWNvZGVycyBmb3IgYnl0ZXMtdG8tYnl0ZXMgY29kZWNzLgorCistIElzc3VlICMxNDA5NzogaW1wcm92ZSB0aGUgImludHJvZHVjdGlvbiIgcGFnZSBvZiB0aGUgdHV0b3JpYWwuCisKKy0gSXNzdWUgIzE3OTc3OiBUaGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNhZGVmYXVsdCBhcmd1bWVudCdzIGRlZmF1bHQgdmFsdWUKKyAgaW4gdXJsbGliLnJlcXVlc3QudXJsb3BlbigpIGlzIGZpeGVkIHRvIG1hdGNoIHRoZSBjb2RlLgorCistIElzc3VlICM2Njk2OiBhZGQgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFByb2ZpbGUgb2JqZWN0cywgYW5kIGltcHJvdmUKKyAgcHJvZmlsZS9jUHJvZmlsZSBkb2NzLiAgUGF0Y2ggYnkgVG9tIFBpbmNrbmV5LgorCistIElzc3VlICMxNTk0MDogU3BlY2lmeSBlZmZlY3Qgb2YgbG9jYWxlIG9uIHRpbWUgZnVuY3Rpb25zLgorCistIElzc3VlICMxNzUzODogRG9jdW1lbnQgWE1MIHZ1bG5lcmFiaWx0aWVzCiAKIC0gSXNzdWUgIzE2NjQyOiBzY2hlZC5zY2hlZHVsZXIgdGltZWZ1bmMgaW5pdGlhbCBkZWZhdWx0IGlzIHRpbWUubW9ub3RvbmljLgogICBQYXRjaCBieSBSYW1jaGFuZHJhIEFwdGUKQEAgLTI2MDgsOCArNjM2MCw4IEBACiAKIC0gSXNzdWUgIzEzNTM4OiBJbXByb3ZlIHN0cigpIGFuZCBvYmplY3QuX19zdHJfXygpIGRvY3VtZW50YXRpb24uCiAKLS0gSXNzdWUgIzE2NDg5OiBNYWtlIGl0IGNsZWFyZXIgdGhhdCBpbXBvcnRsaWIuZmluZF9sb2FkZXIoKSByZXF1aXJlcyBhbnkgYW5kCi0gIGFsbCBwYWNrYWdlcyB0byBiZSBzZXBhcmF0ZWx5IGltcG9ydGVkLgorLSBJc3N1ZSAjMTY0ODk6IE1ha2UgaXQgY2xlYXJlciB0aGF0IGltcG9ydGxpYi5maW5kX2xvYWRlcigpIG5lZWRzIHBhcmVudAorICBwYWNrYWdlcyB0byBiZSBleHBsaWNpdGx5IGltcG9ydGVkLgogCiAtIElzc3VlICMxNjQwMDogVXBkYXRlIHRoZSBkZXNjcmlwdGlvbiBvZiB3aGljaCB2ZXJzaW9ucyBvZiBhIGdpdmVuIHBhY2thZ2UKICAgUHlQSSBkaXNwbGF5cy4KQEAgLTI2MzIsNiArNjM4NCw5IEBACiAtIElzc3VlICMxNjExNTogSW1wcm92ZSBzdWJwcm9jZXNzLlBvcGVuKCkgZG9jdW1lbnRhdGlvbiBhcm91bmQgYXJncywgc2hlbGwsCiAgIGFuZCBleGVjdXRhYmxlIGFyZ3VtZW50cy4KIAorLSBJc3N1ZSAjMTM0OTg6IENsYXJpZnkgZG9jcyBvZiBvcy5tYWtlZGlycygpJ3MgZXhpc3Rfb2sgYXJndW1lbnQuICBEb25lIHdpdGgKKyAgZ3JlYXQgbmF0aXZlLXNwZWFrZXIgaGVscCBmcm9tIFIuIERhdmlkIE11cnJheS4KKwogLSBJc3N1ZSAjMTU1MzM6IENsYXJpZnkgZG9jcyBhbmQgYWRkIHRlc3RzIGZvciBgc3VicHJvY2Vzcy5Qb3BlbigpYCdzIGN3ZAogICBhcmd1bWVudC4KIApAQCAtMjY1MiwyNCArNjQwNyw2MCBAQAogVG9vbHMvRGVtb3MKIC0tLS0tLS0tLS0tCiAKLS0gSXNzdWUgIzE3MTU2OiBweWdldHRleHQucHkgbm93IHVzZXMgYW4gZW5jb2Rpbmcgb2Ygc291cmNlIGZpbGUgYW5kIGNvcnJlY3RseQotICB3cml0ZXMgYW5kIGVzY2FwZXMgbm9uLWFzY2lpIGNoYXJhY3RlcnMuCistIElzc3VlICMxODgxNzogRml4IGEgcmVzb3VyY2Ugd2FybmluZyBpbiBMaWIvYWlmYy5weSBkZW1vLiAgUGF0Y2ggYnkKKyAgVmFqcmFza3kgS29rLgorCistIElzc3VlICMxODQzOTogTWFrZSBwYXRjaGNoZWNrIHdvcmsgb24gV2luZG93cyBmb3IgQUNLUywgTkVXUy4KKworLSBJc3N1ZSAjMTg0NDg6IEZpeCBhIHR5cG8gaW4gVG9vbHMvZGVtby9laWZmZWwucHkuCisKKy0gSXNzdWUgIzE4NDU3OiBGaXhlZCBzYXZpbmcgb2YgZm9ybXVsYXMgYW5kIGNvbXBsZXggbnVtYmVycyBpbgorICBUb29scy9kZW1vL3NzMS5weS4KKworLSBJc3N1ZSAjMTg0NDk6IE1ha2UgVG9vbHMvZGVtby9zczEucHkgd29yayBhZ2FpbiBvbiBQeXRob24gMy4gIFBhdGNoIGJ5CisgIEbDqXZyeSBUaGliYXVsdC4KKworLSBJc3N1ZSAjMTI5OTA6IFRoZSAiUHl0aG9uIExhdW5jaGVyIiBvbiBPU1ggY291bGQgbm90IGxhdW5jaCBweXRob24gc2NyaXB0cworICB0aGF0IGhhdmUgcGF0aHMgdGhhdCBpbmNsdWRlIHdpZGUgY2hhcmFjdGVycy4KKworLSBJc3N1ZSAjMTUyMzk6IE1ha2UgbWtzdHJpbmdwcmVwLnB5IHdvcmsgYWdhaW4gb24gUHl0aG9uIDMuCisKKy0gSXNzdWUgIzE3MDI4OiBBbGxvd2VkIFB5dGhvbiBhcmd1bWVudHMgdG8gYmUgc3VwcGxpZWQgdG8gdGhlIFdpbmRvd3MKKyAgbGF1bmNoZXIuCisKKy0gSXNzdWUgIzE3MTU2OiBweWdldHRleHQucHkgbm93IGRldGVjdHMgdGhlIGVuY29kaW5nIG9mIHNvdXJjZSBmaWxlcyBhbmQKKyAgY29ycmVjdGx5IHdyaXRlcyBhbmQgZXNjYXBlcyBub24tYXNjaWkgY2hhcmFjdGVycy4KIAogLSBJc3N1ZSAjMTU1Mzk6IEZpeCBhIG51bWJlciBvZiBidWdzIGluIFRvb2xzL3NjcmlwdHMvcGluZGVudC5weS4gIE5vdwogICBwaW5kZW50LnB5IHdvcmtzIHdpdGggYSAid2l0aCIgc3RhdGVtZW50LiAgcGluZGVudC5weSBubyBsb25nZXIgcHJvZHVjZXMKICAgaW1wcm9wZXIgaW5kZW50YXRpb24uICBwaW5kZW50LnB5IG5vdyB3b3JrcyB3aXRoIGNvbnRpbnVlZCBsaW5lcyBicm9rZW4gYWZ0ZXIKICAgImNsYXNzIiBvciAiZGVmIiBrZXl3b3JkcyBhbmQgd2l0aCBjb250aW51YXRpb25zIGF0IHRoZSBzdGFydCBvZiBsaW5lLgogCi0tIElzc3VlICMxNTM3ODogRml4IFRvb2xzL3VuaWNvZGUvY29tcGFyZWNvZGVjcy5weS4gIFBhdGNoIGJ5IFNlcmhpeSBTdG9yY2hha2EuCistIElzc3VlICMxMTc5NzogQWRkIGEgMnRvMyBmaXhlciB0aGF0IG1hcHMgcmVsb2FkKCkgdG8gaW1wLnJlbG9hZCgpLgogCi0tIElzc3VlICMxNjQ3NjogRml4IGpzb24udG9vbCB0byBhdm9pZCBpbmNsdWRpbmcgdHJhaWxpbmcgd2hpdGVzcGFjZS4KKy0gSXNzdWUgIzEwOTY2OiBSZW1vdmUgdGhlIGNvbmNlcHQgb2YgdW5leHBlY3RlZCBza2lwcGVkIHRlc3RzLgorCistIElzc3VlICM5ODkzOiBSZW1vdmVkIHRoZSBNaXNjL1ZpbSBkaXJlY3RvcnkuCisKKy0gUmVtb3ZlZCB0aGUgTWlzYy9UZXh0TWF0ZSBkaXJlY3RvcnkuCisKKy0gSXNzdWUgIzE2MjQ1OiBBZGQgdGhlIFRvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkgc2NyaXB0IHRvIHBhcnNlCisgIHRoZSBsaXN0IG9mIEhUTUw1IGVudGl0aWVzIGFuZCB1cGRhdGUgdGhlIGh0bWwuZW50aXRpZXMuaHRtbDUgZGljdGlvbmFyeS4KKworLSBJc3N1ZSAjMTUzNzg6IEZpeCBUb29scy91bmljb2RlL2NvbXBhcmVjb2RlY3MucHkuICBQYXRjaCBieSBTZXJoaXkgU3RvcmNoYWthLgogCiAtIElzc3VlICMxNjU0OTogTWFrZSBqc29uLnRvb2wgd29yayBhZ2FpbiBvbiBQeXRob24gMyBhbmQgYWRkIHRlc3RzLgogICBJbml0aWFsIHBhdGNoIGJ5IEJlcmtlciBQZWtzYWcgYW5kIFNlcmhpeSBTdG9yY2hha2EuCiAKLS0gSXNzdWUgIzEzMzAxOiB1c2UgYXN0LmxpdGVyYWxfZXZhbCgpIGluc3RlYWQgb2YgZXZhbCgpIGluIFRvb2xzL2kxOG4vbXNnZm10LnB5CistIElzc3VlICMxMzMwMTogdXNlIGFzdC5saXRlcmFsX2V2YWwoKSBpbnN0ZWFkIG9mIGV2YWwoKSBpbiBUb29scy9pMThuL21zZ2ZtdC5weS4KICAgUGF0Y2ggYnkgU2VyaGl5IFN0b3JjaGFrYS4KIAorV2luZG93cworLS0tLS0tLQorCistIElzc3VlICMxODU2OTogVGhlIGluc3RhbGxlciBub3cgYWRkcyAucHkgdG8gdGhlIFBBVEhFWFQgdmFyaWFibGUgd2hlbiBleHRlbnNpb25zCisgIGFyZSByZWdpc3RlcmVkLiBQYXRjaCBieSBQYXVsIE1vb3JlLgorCiAKIFdoYXQncyBOZXcgaW4gUHl0aG9uIDMuMy4wPwogPT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yNzU3LDYgKzY1NDgsOSBAQAogTGlicmFyeQogLS0tLS0tLQogCistIElzc3VlICMxNzE1ODogQWRkICdzeW1ib2xzJyB0byBoZWxwKCkgd2VsY29tZSBtZXNzYWdlOyBjbGFyaWZ5CisgICdtb2R1bGVzIHNwYW0nIG1lc3NhZ2VzLgorCiAtIElzc3VlICMxNTg0NzogRml4IGEgcmVncmVzc2lvbiBpbiBhcmdwYXJzZSwgd2hpY2ggZGlkIG5vdCBhY2NlcHQgdHVwbGVzIGFzCiAgIGFyZ3VtZW50IGxpc3RzIGFueW1vcmUuCiAKQEAgLTMyNDcsNiArNzA0MSwxMCBAQAogLSBJc3N1ZSAjMTUyNTA6IERvY3VtZW50IHRoYXQgYGZpbGVjbXAuZGlyY21wKClgIGNvbXBhcmVzIGZpbGVzIHNoYWxsb3dseS4gUGF0Y2gKICAgY29udHJpYnV0ZWQgYnkgQ2hyaXMgSmVyZG9uZWsuCiAKKy0gSXNzdWUgIzE1NDQyOiBFeHBvc2UgdGhlIGRlZmF1bHQgbGlzdCBvZiBkaXJlY3RvcmllcyBpZ25vcmVkIGJ5CisgIGBmaWxlY21wLmRpcmNtcCgpYCBhcyBhIG1vZHVsZSBhdHRyaWJ1dGUsIGFuZCBleHBhbmQgdGhlIGxpc3QgdG8gbW9yZSBtb2Rlcm4KKyAgdmFsdWVzLgorCiBUZXN0cwogLS0tLS0KIApAQCAtMzM1OSw5ICs3MTU3LDYgQEAKIExpYnJhcnkKIC0tLS0tLS0KIAotLSBJc3N1ZSAjMTYzMDU6IEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCBvY2N1cnJpbmcgd2hlbiBpbnRlcnJ1cHRpbmcKLSAgbWF0aC5mYWN0b3JpYWwuCi0KIC0gSXNzdWUgIzEyMjg4OiBDb25zaWRlciAnMCcgYW5kICcwLjAnIGFzIHZhbGlkIGluaXRpYWx2YWx1ZQogICBmb3IgdGtpbnRlciBTaW1wbGVEaWFsb2cuCiAKQEAgLTQ2MjMsNyArODQxOCw3IEBACiAgIGFuZCBieXRlYXJyYXkuc3BsaXQgbWF5IG5vdyBiZSBwYXNzZWQgYXMga2V5d29yZCBhcmd1bWVudHMuCiAKIC0gSXNzdWUgIzEzMDEyOiBUaGUgJ2tlZXBlbmRzJyBwYXJhbWV0ZXIgdG8gc3RyLnNwbGl0bGluZXMgbWF5IG5vdyBiZSBwYXNzZWQKLSAgYXMgYSBrZXl3b3JkIGFyZ3VtZW50OiAgIm15X3N0cmluZy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpIi4gIFRoZSBzYW1lCisgIGFzIGEga2V5d29yZCBhcmd1bWVudDogIm15X3N0cmluZy5zcGxpdGxpbmVzKGtlZXBlbmRzPVRydWUpIi4gIFRoZSBzYW1lCiAgIGNoYW5nZSBhbHNvIGFwcGxpZXMgdG8gYnl0ZXMuc3BsaXRsaW5lcyBhbmQgYnl0ZWFycmF5LnNwbGl0bGluZXMuCiAKIC0gSXNzdWUgIzc3MzI6IERvbid0IG9wZW4gYSBkaXJlY3RvcnkgYXMgYSBmaWxlIGFueW1vcmUgd2hpbGUgaW1wb3J0aW5nIGEKQEAgLTQ2ODksNyArODQ4NCw3IEBACiAgIGRlYWxsb2NhdG9yIGNhbGxzIG9uZSBvZiB0aGUgbWV0aG9kcyBvbiB0aGUgdHlwZSAoZS5nLiB3aGVuIHN1YmNsYXNzaW5nCiAgIElPQmFzZSkuICBEaWFnbm9zaXMgYW5kIHBhdGNoIGJ5IERhdmlkZSBSaXp6by4KIAotLSBJc3N1ZSAjOTYxMSwgIzkwMTU6IEZpbGVJTy5yZWFkKCkgY2xhbXBzIHRoZSBsZW5ndGggdG8gSU5UX01BWCBvbiBXaW5kb3dzLgorLSBJc3N1ZSAjOTYxMSwgSXNzdWUgIzkwMTU6IEZpbGVJTy5yZWFkKCkgY2xhbXBzIHRoZSBsZW5ndGggdG8gSU5UX01BWCBvbiBXaW5kb3dzLgogCiAtIElzc3VlICM5NjQyOiBVbmlmb3JtaXplIHRoZSB0ZXN0cyBvbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBtYmNzIGNvZGVjLCBhZGQKICAgYSBuZXcgSEFWRV9NQkNTIGRlZmluZS4KQEAgLTUwNTYsNyArODg1MSw3IEBACiAtIElzc3VlICMxMzU4OTogRml4IHNvbWUgc2VyaWFsaXphdGlvbiBwcmltaXRpdmVzIGluIHRoZSBhaWZjIG1vZHVsZS4KICAgUGF0Y2ggYnkgT2xlZyBQbGFraG90bnl1ay4KIAotLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIGBgdXNlcjpwYXNzd29yZGBgIGR1cmluZyBCYXNpYworLSBJc3N1ZSAjMTM2NDI6IFVucXVvdGUgYmVmb3JlIGI2NGVuY29kaW5nIHVzZXI6cGFzc3dvcmQgZHVyaW5nIEJhc2ljCiAgIEF1dGhlbnRpY2F0aW9uLiBQYXRjaCBjb250cmlidXRlZCBieSBKb29uYXMgS3VvcmlsZWh0by4KIAogLSBJc3N1ZSAjMTIzNjQ6IEZpeCBhIGhhbmcgaW4gY29uY3VycmVudC5mdXR1cmVzLlByb2Nlc3NQb29sRXhlY3V0b3IuCkBAIC01MTU3LDcgKzg5NTIsNyBAQAogICAnaW1wb3J0bGliLmFiYy5QeVB5Y0xvYWRlcicsICdubnRwbGliLk5OVFAueGd0aXRsZScsICdubnRwbGliLk5OVFAueHBhdGgnLAogICBhbmQgcHJpdmF0ZSBhdHRyaWJ1dGVzIG9mICdzbXRwZC5TTVRQQ2hhbm5lbCcuCiAKLS0gSXNzdWUgIzU5MDUsICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKKy0gSXNzdWUgIzU5MDUsIElzc3VlICMxMzU2MDogdGltZS5zdHJmdGltZSgpIGlzIG5vdyB1c2luZyB0aGUgY3VycmVudCBsb2NhbGUKICAgZW5jb2RpbmcsIGluc3RlYWQgb2YgVVRGLTgsIGlmIHRoZSB3Y3NmdGltZSgpIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUuCiAKIC0gSXNzdWUgIzEzNDY0OiBBZGQgYSByZWFkaW50bygpIG1ldGhvZCB0byBodHRwLmNsaWVudC5IVFRQUmVzcG9uc2UuICBQYXRjaApAQCAtNTUxNSw4ICs5MzEwLDggQEAKIC0gSXNzdWUgIzEyNjA3OiBJbiBzdWJwcm9jZXNzLCBmaXggaXNzdWUgd2hlcmUgaWYgc3RkaW4sIHN0ZG91dCBvciBzdGRlcnIgaXMKICAgZ2l2ZW4gYXMgYSBsb3cgZmQsIGl0IGdldHMgb3ZlcndyaXR0ZW4uCiAKLS0gSXNzdWUgIzEyNTc2OiBGaXggdXJsb3BlbiBiZWhhdmlvciBvbiBzaXRlcyB3aGljaCBkbyBub3Qgc2VuZCAob3Igb2JmdXNjYXRlKQotICBhIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIuCistIElzc3VlICMxMjU3NjogRml4IHVybG9wZW4gYmVoYXZpb3Igb24gc2l0ZXMgd2hpY2ggZG8gbm90IHNlbmQgKG9yIG9iZnVzY2F0ZXMpCisgIGBgQ29ubmVjdGlvbjogY2xvc2VgYCBoZWFkZXIuCiAKIC0gSXNzdWUgIzEyNTYwOiBCdWlsZCBsaWJweXRob24uc28gb24gT3BlbkJTRC4gUGF0Y2ggYnkgU3RlZmFuIFNwZXJsaW5nLgogCkBAIC01NjE0LDcgKzk0MDksNyBAQAogICBvZiB0aGUgdGV4dCBtb2RlICh1c2luZyB0aGUgbG9jYWxlIGVuY29kaW5nKSB0byBhdm9pZCBlbmNvZGluZyBpc3N1ZXMuCiAKIC0gSXNzdWUgIzEyMTQ3OiBBZGp1c3QgdGhlIG5ldy1pbi0zLjIgc210cGxpYi5zZW5kX21lc3NhZ2UgbWV0aG9kIGZvciBiZXR0ZXIKLSAgY29uZm9ybWFuY2UgdG8gdGhlIFJGQ3M6ICBjb3JyZWN0bHkgaGFuZGxlIFNlbmRlciBhbmQgUmVzZW50LSBoZWFkZXJzLgorICBjb25mb3JtYW5jZSB0byB0aGUgUkZDczogY29ycmVjdGx5IGhhbmRsZSBTZW5kZXIgYW5kIFJlc2VudC0gaGVhZGVycy4KIAogLSBJc3N1ZSAjMTIzNTI6IEZpeCBhIGRlYWRsb2NrIGluIG11bHRpcHJvY2Vzc2luZy5IZWFwIHdoZW4gYSBibG9jayBpcyBmcmVlZCBieQogICB0aGUgZ2FyYmFnZSBjb2xsZWN0b3Igd2hpbGUgdGhlIEhlYXAgbG9jayBpcyBoZWxkLgpAQCAtNjAxOCw3ICs5ODEzLDcgQEAKICAgbXVsdGlwYXJ0IHN1YnBhcnRzIHdpdGggYW4gOC1iaXQgQ1RFIGludG8gdW5pY29kZSBpbnN0ZWFkIG9mIHByZXNlcnZpbmcgdGhlCiAgIGJ5dGVzLgogCi0tIElzc3VlICMxNjkwNjA4OiBlbWFpbC51dGlsLmZvcm1hdGFkZHIgaXMgbm93IFJGQyAyMDQ3IGF3YXJlOiAgaXQgbm93IGhhcyBhCistIElzc3VlICMxNjkwNjA4OiBlbWFpbC51dGlsLmZvcm1hdGFkZHIgaXMgbm93IFJGQyAyMDQ3IGF3YXJlOiBpdCBub3cgaGFzIGEKICAgY2hhcnNldCBwYXJhbWV0ZXIgdGhhdCBkZWZhdWx0cyB0byB1dGYtOCBhbmQgaXMgdXNlZCBhcyB0aGUgY2hhcnNldCBmb3IgUkZDCiAgIDIwNDcgZW5jb2Rpbmcgd2hlbiB0aGUgcmVhbG5hbWUgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMuCiAKQEAgLTYwNzQsNiArOTg2OSw5IEBACiAtIElzc3VlICMxMTYzNTogRG9uJ3QgdXNlIHBvbGxpbmcgaW4gd29ya2VyIHRocmVhZHMgYW5kIHByb2Nlc3NlcyBsYXVuY2hlZCBieQogICBjb25jdXJyZW50LmZ1dHVyZXMuCiAKKy0gSXNzdWUgIzU4NDU6IEF1dG9tYXRpY2FsbHkgcmVhZCByZWFkbGluZSBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBjb21wbGV0aW9uCisgIGluIGludGVyYWN0aXZlIG1vZGUuCisKIC0gSXNzdWUgIzY4MTE6IEFsbG93IGltcG9ydGxpYiB0byBjaGFuZ2UgYSBjb2RlIG9iamVjdCdzIGNvX2ZpbGVuYW1lIGF0dHJpYnV0ZQogICB0byBtYXRjaCB0aGUgcGF0aCB0byB3aGVyZSB0aGUgc291cmNlIGNvZGUgY3VycmVudGx5IGlzLCBub3Qgd2hlcmUgdGhlIGNvZGUKICAgb2JqZWN0IG9yaWdpbmFsbHkgY2FtZSBmcm9tLgpAQCAtNjUyMiw3ICsxMDMyMCw3IEBACiAtIElzc3VlICMxMzIxODogRml4IHRlc3Rfc3NsIGZhaWx1cmVzIG9uIERlYmlhbi9VYnVudHUuCiAKIC0gUmUtZW5hYmxlIGxpYjJ0bzMncyB0ZXN0X3BhcnNlci5weSB0ZXN0cywgdGhvdWdoIHdpdGggYW4gZXhwZWN0ZWQgZmFpbHVyZQotICAoc2VlIGlzc3VlIDEzMTI1KS4KKyAgKHNlZSBpc3N1ZSAjMTMxMjUpLgogCiAtIElzc3VlICMxMjY1NjogQWRkIHRlc3RzIGZvciBJUHY2IGFuZCBVbml4IHNvY2tldHMgdG8gdGVzdF9hc3luY29yZS4KIApAQCAtNjYxMCw3ICsxMDQwOCw3IEBACiAgIFBhdGNoIGJ5IEdhcnJldHQgQ29vcGVyLgogCiAtIElzc3VlICMxMDczNjogRml4IHRlc3RfdHRrIHRlc3Rfd2lkZ2V0cyBmYWlsdXJlcyB3aXRoIENvY29hIFRrIDguNS45Ci0gIDIuOCArICBvbiBNYWMgT1MgWC4gIChQYXRjaCBieSBSb25hbGQgT3Vzc29yZW4pCisgIDIuOCsgb24gTWFjIE9TIFguICAoUGF0Y2ggYnkgUm9uYWxkIE91c3NvcmVuKQogCiAtIElzc3VlICMxMjA1NzogQWRkIHRlc3RzIGZvciBJU08gMjAyMiBjb2RlY3MgKGlzbzIwMjJfanAsIGlzbzIwMjJfanBfMiwKICAgaXNvMjAyMl9rcikuCkBAIC02NzUwLDYgKzEwNTQ4LDEwIEBACiBEb2N1bWVudGF0aW9uCiAtLS0tLS0tLS0tLS0tCiAKKy0gSXNzdWUgIzIzMDA2OiBJbXByb3ZlIHRoZSBkb2N1bWVudGF0aW9uIGFuZCBpbmRleGluZyBvZiBkaWN0Ll9fbWlzc2luZ19fLgorICBBZGQgYW4gZW50cnkgaW4gdGhlIGxhbmd1YWdlIGRhdGFtb2RlbCBzcGVjaWFsIG1ldGhvZHMgc2VjdGlvbi4KKyAgUmV2aXNlIGFuZCBpbmRleCBpdHMgZGlzY3Vzc2lvbiBpbiB0aGUgc3RkdHlwZXMgbWFwcGluZy9kaWN0IHNlY3Rpb24uCisKIC0gSXNzdWUgIzEzOTg5OiBEb2N1bWVudCB0aGF0IEd6aXBGaWxlIGRvZXMgbm90IHN1cHBvcnQgdGV4dCBtb2RlLCBhbmQgZ2l2ZSBhCiAgIG1vcmUgaGVscGZ1bCBlcnJvciBtZXNzYWdlIHdoZW4gb3BlbmVkIHdpdGggYW4gaW52YWxpZCBtb2RlIHN0cmluZy4KIApkaWZmIC0tZ2l0IGEvTWlzYy9SRUFETUUgYi9NaXNjL1JFQURNRQppbmRleCBjMWU4OTBmLi5kZGI4ZjNmIDEwMDY0NAotLS0gYS9NaXNjL1JFQURNRQorKysgYi9NaXNjL1JFQURNRQpAQCAtMjEsOSArMjEsNyBAQAogUkVBRE1FLkFJWCAgICAgICAgICAgICAgSW5mb3JtYXRpb24gYWJvdXQgdXNpbmcgUHl0aG9uIG9uIEFJWAogUkVBRE1FLmNvdmVyaXR5ICAgICAgICAgSW5mb3JtYXRpb24gYWJvdXQgcnVubmluZyBDb3Zlcml0eSdzIFByZXZlbnQgb24gUHl0aG9uCiBSRUFETUUudmFsZ3JpbmQgICAgICAgICBJbmZvcm1hdGlvbiBmb3IgVmFsZ3JpbmQgdXNlcnMsIHNlZSB2YWxncmluZC1weXRob24uc3VwcAotc3ZubWFwLnR4dCAgICAgICAgICAgICAgTWFwIG9mIG9sZCBTVk4gcmV2cyBhbmQgYnJhbmNoZXMgdG8gaGcgY2hhbmdlc2V0IGlkcwogU3BlY2lhbEJ1aWxkcy50eHQgICAgICAgRGVzY3JpYmVzIGV4dHJhIHN5bWJvbHMgeW91IGNhbiBzZXQgZm9yIGRlYnVnIGJ1aWxkcwotVGV4dE1hdGUgICAgICAgICAgICAgICAgQSBUZXh0TWF0ZSBidW5kbGUgZm9yIFB5dGhvbiBkZXZlbG9wbWVudAorc3ZubWFwLnR4dCAgICAgICAgICAgICAgTWFwIG9mIG9sZCBTVk4gcmV2cyBhbmQgYnJhbmNoZXMgdG8gaGcgY2hhbmdlc2V0IGlkcwogdmFsZ3JpbmQtcHl0aG9uLnN1cHAgICAgVmFsZ3JpbmQgc3VwcHJlc3Npb24gZmlsZSwgc2VlIFJFQURNRS52YWxncmluZAogdmdyaW5kZWZzICAgICAgICAgICAgICAgUHl0aG9uIGNvbmZpZ3VyYXRpb24gZm9yIHZncmluZCAoYSBnZW5lcmljIHByZXR0eSBwcmludGVyKQotVmltICAgICAgICAgICAgICAgICAgICAgUHl0aG9uIGRldmVsb3BtZW50IHV0aWxpdGllcyBmb3IgdGhlIFZpbSBlZGl0b3IKZGlmZiAtLWdpdCBhL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQgYi9NaXNjL1NwZWNpYWxCdWlsZHMudHh0CmluZGV4IGY4NjllN2MuLjMwMDQxNzQgMTAwNjQ0Ci0tLSBhL01pc2MvU3BlY2lhbEJ1aWxkcy50eHQKKysrIGIvTWlzYy9TcGVjaWFsQnVpbGRzLnR4dApAQCAtMTMsMTIgKzEzLDE0IEBACiAtLS0tLS0tLS0tLS0KIAogVHVybiBvbiBhZ2dyZWdhdGUgcmVmZXJlbmNlIGNvdW50aW5nLiAgVGhpcyBhcnJhbmdlcyB0aGF0IGV4dGVybiBfUHlfUmVmVG90YWwKLWhvbGQgYSBjb3VudCBvZiBhbGwgcmVmZXJlbmNlcywgdGhlIHN1bSBvZiBvYl9yZWZjbnQgYWNyb3NzIGFsbCBvYmplY3RzLiAgSW4gYQotZGVidWctbW9kZSBidWlsZCwgdGhpcyBpcyB3aGVyZSB0aGUgIjgyODgiIGNvbWVzIGZyb20gaW4KK2hvbGQgYSBjb3VudCBvZiBhbGwgcmVmZXJlbmNlcywgdGhlIHN1bSBvZiBvYl9yZWZjbnQgYWNyb3NzIGFsbCBvYmplY3RzLgorUGFzc2luZyBgYC1YIHNob3dyZWZjb3VudGBgIG9uIHRoZSBjb21tYW5kIGxpbmUgY2F1c2VzIHRoZSBpbnRlcmFjdGl2ZQoraW50ZXJwcmV0ZXIgdG8gcHJpbnQgdGhlIHJlZmVyZW5jZSBjb3VudCB0b3RhbCBhcyB3ZWxsIHRoZSBudW1iZXIgb2YgbWVtb3J5CitibG9ja3MgYWxsb2NhdGVkIGFmdGVyIGVhY2ggc3RhdGVtZW50OgogCiAgICAgPj4+IDIzCiAgICAgMjMKLSAgICBbODI4OCByZWZzXQorICAgIFs4Mjg4IHJlZnMsIDE0MzMyIGJsb2Nrc10KICAgICA+Pj4KIAogTm90ZSB0aGF0IGlmIHRoaXMgY291bnQgaW5jcmVhc2VzIHdoZW4geW91J3JlIG5vdCBzdG9yaW5nIGF3YXkgbmV3IG9iamVjdHMsCkBAIC0xMDUsNyArMTA3LDkgQEAKIHBbLTIqUzotU10KICAgICBOdW1iZXIgb2YgYnl0ZXMgb3JpZ2luYWxseSBhc2tlZCBmb3IuICBUaGlzIGlzIGEgc2l6ZV90LCBiaWctZW5kaWFuIChlYXNpZXIKICAgICB0byByZWFkIGluIGEgbWVtb3J5IGR1bXApLgotcFstUzowXQorcFstU10KKyAgICBBUEkgSUQuICBTZWUgUEVQIDQ0NS4gIFRoaXMgaXMgYSBjaGFyYWN0ZXIsIGJ1dCBzZWVtcyB1bmRvY3VtZW50ZWQuCitwWy1TKzE6MF0KICAgICBDb3BpZXMgb2YgRk9SQklEREVOQllURS4gIFVzZWQgdG8gY2F0Y2ggdW5kZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzA6Tl0KICAgICBUaGUgcmVxdWVzdGVkIG1lbW9yeSwgZmlsbGVkIHdpdGggY29waWVzIG9mIENMRUFOQllURSwgdXNlZCB0byBjYXRjaApAQCAtMjEyLDEyICsyMTYsMTEgQEAKIAogQ29tcGlsZSBpbiBzdXBwb3J0IGZvciBMb3cgTGV2ZWwgVFJBQ0UtaW5nIG9mIHRoZSBtYWluIGludGVycHJldGVyIGxvb3AuCiAKLVdoZW4gdGhpcyBwcmVwcm9jZXNzb3Igc3ltYm9sIGlzIGRlZmluZWQsIGJlZm9yZSBQeUV2YWxfRXZhbEZyYW1lIChldmFsX2ZyYW1lIGluCi0yLjMgYW5kIDIuMiwgZXZhbF9jb2RlMiBiZWZvcmUgdGhhdCkgZXhlY3V0ZXMgYSBmcmFtZSdzIGNvZGUgaXQgY2hlY2tzIHRoZQotZnJhbWUncyBnbG9iYWwgbmFtZXNwYWNlIGZvciBhIHZhcmlhYmxlICJfX2xsdHJhY2VfXyIuICBJZiBzdWNoIGEgdmFyaWFibGUgaXMKLWZvdW5kLCBtb3VuZHMgb2YgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB0aGUgaW50ZXJwcmV0ZXIgaXMgZG9pbmcgYXJlIHNwcmF5ZWQgdG8KLXN0ZG91dCwgc3VjaCBhcyBldmVyeSBvcGNvZGUgYW5kIG9wY29kZSBhcmd1bWVudCBhbmQgdmFsdWVzIHB1c2hlZCBvbnRvIGFuZAotcG9wcGVkIG9mZiB0aGUgdmFsdWUgc3RhY2suCitXaGVuIHRoaXMgcHJlcHJvY2Vzc29yIHN5bWJvbCBpcyBkZWZpbmVkLCBiZWZvcmUgUHlFdmFsX0V2YWxGcmFtZSBleGVjdXRlcyBhCitmcmFtZSdzIGNvZGUgaXQgY2hlY2tzIHRoZSBmcmFtZSdzIGdsb2JhbCBuYW1lc3BhY2UgZm9yIGEgdmFyaWFibGUKKyJfX2xsdHJhY2VfXyIuICBJZiBzdWNoIGEgdmFyaWFibGUgaXMgZm91bmQsIG1vdW5kcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB3aGF0Cit0aGUgaW50ZXJwcmV0ZXIgaXMgZG9pbmcgYXJlIHNwcmF5ZWQgdG8gc3Rkb3V0LCBzdWNoIGFzIGV2ZXJ5IG9wY29kZSBhbmQgb3Bjb2RlCithcmd1bWVudCBhbmQgdmFsdWVzIHB1c2hlZCBvbnRvIGFuZCBwb3BwZWQgb2ZmIHRoZSB2YWx1ZSBzdGFjay4KIAogTm90IHVzZWZ1bCB2ZXJ5IG9mdGVuLCBidXQgdmVyeSB1c2VmdWwgd2hlbiBuZWVkZWQuCiAKZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24udG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjZmFkYTguLjAwMDAwMDAKLS0tIGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbi50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyEvdXNyL2Jpbi9weXRob24KLSIiIkdlbmVyYXRlIGNvZGUgdG8gd2FybiBhYm91dCBhIG1vZHVsZSdzIHJlbW92YWwgaW4gUHl0aG9uIDMuMC4KLQotWFhYIE5vdCBzdXBwb3J0ZWQ6Ci0tIE1vZHVsZSdzIGluIGEgcGFja2FnZSBkbyBub3QgaGF2ZSB0aGVpciBmdWxsIG5hbWUgZ2VuZXJhdGVkLgotLSBQYWNrYWdlJ3MgX19pbml0X18gbW9kdWxlOyBzaG91bGQgZGV0ZWN0IGFuZCB1c2UgdGhlIHBhY2thZ2UncyBuYW1lIGluc3RlYWQuCi0KLSIiIgotcHlfdGVtcGxhdGUgPSAiIiJmcm9tIHdhcm5pbmdzIGltcG9ydCB3YXJucHkzawotd2FybnB5M2soInRoZSAkezE6JXN9IG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluIFB5dGhvbiAzLjAiLCBzdGFja2xldmVsPTIpCi1kZWwgd2FybnB5M2skMCIiIgotCi1jX3RlbXBsYXRlID0gIiIiCi1pZiAoUHlFcnJfV2FyblB5M2soInRoZSAkezE6JXN9IG1vZHVsZSBoYXMgYmVlbiByZW1vdmVkIGluICIKLSAgICAgICAgICAgICAgICAgICAiUHl0aG9uIDMuMCIsIDIpICZsdDsgMCkKLSAgICByZXR1cm47JDAiIiIKLQotCi1pbXBvcnQgaW1wCi1pbXBvcnQgb3MKLQotZmlsZV9uYW1lID0gb3MucGF0aC5zcGxpdChvcy5lbnZpcm9uWydUTV9GSUxFUEFUSCddKVsxXQotCi1weV9zdWZmaXhlcyA9IHJldmVyc2VkKHNvcnRlZCgoc3VmZml4WzBdIGZvciBzdWZmaXggaW4gaW1wLmdldF9zdWZmaXhlcygpIGlmIHN1ZmZpeFsyXSA9PSBpbXAuUFlfU09VUkNFKSwga2V5PWxlbikpCi1jX3N1ZmZpeGVzID0gcmV2ZXJzZWQoc29ydGVkKChvcy5wYXRoLnNwbGl0ZXh0KHN1ZmZpeFswXSlbMF0gKyAnLmMnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBzdWZmaXggaW4gaW1wLmdldF9zdWZmaXhlcygpIGlmIHN1ZmZpeFsyXSA9PSBpbXAuQ19FWFRFTlNJT04pLCBrZXk9bGVuKSkKLQotcGFpcmluZ3MgPSAoKHB5X3N1ZmZpeGVzLCBweV90ZW1wbGF0ZSksIChjX3N1ZmZpeGVzLCBjX3RlbXBsYXRlKSkKLQotZGVmIGNyZWF0ZV90ZW1wbGF0ZShzdWZmaXhlcywgdGVtcGxhdGUpOgotICAgIGZvciBzdWZmaXggaW4gc3VmZml4ZXM6Ci0gICAgICAgIGlmIG5vdCBmaWxlX25hbWUuZW5kc3dpdGgoc3VmZml4KToKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIG1vZHVsZV9uYW1lID0gZmlsZV9uYW1lWzotbGVuKHN1ZmZpeCldCi0gICAgICAgIHJldHVybiB0ZW1wbGF0ZSAlIG1vZHVsZV9uYW1lCi0gICAgZWxzZToKLSAgICAgICAgcmV0dXJuIE5vbmUKLQotZm9yIHRlbXBsYXRlIGluIChjcmVhdGVfdGVtcGxhdGUoKnBhaXIpIGZvciBwYWlyIGluIHBhaXJpbmdzKToKLSAgICBpZiBub3QgdGVtcGxhdGU6Ci0gICAgICAgIGNvbnRpbnVlCi0gICAgcHJpbnQgdGVtcGxhdGUsCi0gICAgYnJlYWsKLWVsc2U6Ci0gICAgcHJpbnQgJ1hYWCBDb3VsZCBub3QgZ2VuZXJhdGUgY29kZS4nPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+MiB0byAzIC0gTW9kdWxlIERlbGV0aW9uPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPmluc2VydEFzU25pcHBldDwvc3RyaW5nPgotCTxrZXk+dGFiVHJpZ2dlcjwva2V5PgotCTxzdHJpbmc+MnRvM21vZGRlbDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+OTUxOUMyMkItNkFCOC00MUExLTk0RjYtMDc5RTBCNDVDMTQ3PC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkIERvY3MudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0J1aWxkIERvY3MudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTRkNTNiLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZCBEb2NzLnRtQ29tbWFuZAorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5iZWZvcmVSdW5uaW5nQ29tbWFuZDwva2V5PgotCTxzdHJpbmc+bm9wPC9zdHJpbmc+Ci0JPGtleT5jb21tYW5kPC9rZXk+Ci0JPHN0cmluZz4jIFhYWCBMZW9wYXJkLXNwZWNpZmljIHVubGVzcyBoYXZlIGVhc3kgd2F5IHRvIHNwZWNpZmljIGFsdGVybmF0aXZlIFB5dGhvbiBleGVjdXRhYmxlLgotCi1jZCAkVE1fUFJPSkVDVF9ESVJFQ1RPUlkvRG9jCi1tYWtlIGh0bWwgMiZndDsmYW1wOzEgfCBwcmUKLQotcmVzY2FuX3Byb2plY3Q8L3N0cmluZz4KLQk8a2V5PmlucHV0PC9rZXk+Ci0JPHN0cmluZz5ub25lPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5CdWlsZCBEb2NzPC9zdHJpbmc+Ci0JPGtleT5vdXRwdXQ8L2tleT4KLQk8c3RyaW5nPnNob3dBc0hUTUw8L3N0cmluZz4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPjZFRjE1MUU1LTcxNDktNEY4Mi04Nzk2LTBDQzQwRkU1ODlGQTwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZC50bUNvbW1hbmQgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvQnVpbGQudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZmZkYTVjLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9CdWlsZC50bUNvbW1hbmQKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgotPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Ci08cGxpc3QgdmVyc2lvbj0iMS4wIj4KLTxkaWN0PgotCTxrZXk+YmVmb3JlUnVubmluZ0NvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm5vcDwvc3RyaW5nPgotCTxrZXk+Y29tbWFuZDwva2V5PgotCTxzdHJpbmc+IyBYWFggVE9ETwotIyAtIEhpZ2hsaWdodCBhbnkgY29tcGlsZXIgd2FybmluZ3MgZm9yIFB5dGhvbiBjb2RlLgotIyAtIFBvaW50IG91dCBpZiBjb21waWxlIGZhaWxlZC4KLQotY2QgJFRNX1BST0pFQ1RfRElSRUNUT1JZCi1tYWtlIC1zIC1qMiAyJmd0OyZhbXA7MSB8IHByZQotCi1yZXNjYW5fcHJvamVjdDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPm5vbmU8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPkJ1aWxkIFB5dGhvbjwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5zaG93QXNIVE1MPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5CNTQ1QkIxQi1BOEUxLTQyNkMtQjUwQS00MjZFNzhCOTZEMzg8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvR28gdG8gSXNzdWUudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL0dvIHRvIElzc3VlLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjVkMzBiYy4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvR28gdG8gSXNzdWUudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPm9wZW4gImh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUkKGNhdCkiPC9zdHJpbmc+Ci0JPGtleT5mYWxsYmFja0lucHV0PC9rZXk+Ci0JPHN0cmluZz53b3JkPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+c2VsZWN0aW9uPC9zdHJpbmc+Ci0JPGtleT5uYW1lPC9rZXk+Ci0JPHN0cmluZz5HbyB0byBJc3N1ZTwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5kaXNjYXJkPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5GRDI1QThEQy0yMkRDLTRFRDQtQjIyMi1COTQzQzhBOTExN0Q8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBEb2NzLnRtQ29tbWFuZCBiL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIERvY3MudG1Db21tYW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MDFiZTQzLi4wMDAwMDAwCi0tLSBhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9Db21tYW5kcy9PcGVuIERvY3MudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgU2VhcmNoIG9yZGVyOgotIyAgLSBDdXJyZW50IHByb2plY3QuCi0jICAtIFRNX1BZVEhPTkRFVl9ET0NTLgotIyAgLSBPbmxpbmUgZG9jcyBpbiBkZXZlbG9wbWVudC4KLQotaHRtbF9pbmRleD0kVE1fUFJPSkVDVF9ESVJFQ1RPUlkvRG9jL2J1aWxkL2h0bWwvaW5kZXguaHRtbAotaWYgW1sgLWYgJGh0bWxfaW5kZXggXV07IHRoZW4KLQlvcGVuICRodG1sX2luZGV4Ci1lbGlmIFtbICRUTV9QWVRIT05ERVZfRE9DUyBdXTsgdGhlbgotCW9wZW4gJFRNX1BZVEhPTkRFVl9ET0NTCi1lbHNlCi0Jb3BlbiBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldi8KLWZpPC9zdHJpbmc+Ci0JPGtleT5pbnB1dDwva2V5PgotCTxzdHJpbmc+bm9uZTwvc3RyaW5nPgotCTxrZXk+a2V5RXF1aXZhbGVudDwva2V5PgotCTxzdHJpbmc+QEg8L3N0cmluZz4KLQk8a2V5Pm5hbWU8L2tleT4KLQk8c3RyaW5nPk9wZW4gRG9jczwvc3RyaW5nPgotCTxrZXk+b3V0cHV0PC9rZXk+Ci0JPHN0cmluZz5kaXNjYXJkPC9zdHJpbmc+Ci0JPGtleT51dWlkPC9rZXk+Ci0JPHN0cmluZz5CRjMzNkZGRi1FMTRELTRCRjEtQTE1Ni03MUNGNzY4QUMwMzQ8L3N0cmluZz4KLTwvZGljdD4KLTwvcGxpc3Q+CmRpZmYgLS1naXQgYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBQRVAudG1Db21tYW5kIGIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL0NvbW1hbmRzL09wZW4gUEVQLnRtQ29tbWFuZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWY1NTMzYS4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvQ29tbWFuZHMvT3BlbiBQRVAudG1Db21tYW5kCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KLTwhRE9DVFlQRSBwbGlzdCBQVUJMSUMgIi0vL0FwcGxlLy9EVEQgUExJU1QgMS4wLy9FTiIgImh0dHA6Ly93d3cuYXBwbGUuY29tL0RURHMvUHJvcGVydHlMaXN0LTEuMC5kdGQiPgotPHBsaXN0IHZlcnNpb249IjEuMCI+Ci08ZGljdD4KLQk8a2V5PmJlZm9yZVJ1bm5pbmdDb21tYW5kPC9rZXk+Ci0JPHN0cmluZz5ub3A8L3N0cmluZz4KLQk8a2V5PmNvbW1hbmQ8L2tleT4KLQk8c3RyaW5nPiMgWFhYIFdvcnRoIHN1cHBvcnRpbmcgdXNpbmcgYSBsb2NhbCBjb3B5PwotCi0jIER1bWIgbHVjayB0aGF0IGFuIHVucmVjb2duaXplZCBudW1iZXIgbGVhZHMgdG8gYSAwIGJlaW5nIHVzZWQuCi1vcGVuIGBwcmludGYgImh0dHA6Ly93d3cucHl0aG9uLm9yZy9kZXYvcGVwcy9wZXAtJTA0ZCIgJChjYXQpYDwvc3RyaW5nPgotCTxrZXk+ZmFsbGJhY2tJbnB1dDwva2V5PgotCTxzdHJpbmc+d29yZDwvc3RyaW5nPgotCTxrZXk+aW5wdXQ8L2tleT4KLQk8c3RyaW5nPnNlbGVjdGlvbjwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+T3BlbiBQRVA8L3N0cmluZz4KLQk8a2V5Pm91dHB1dDwva2V5PgotCTxzdHJpbmc+ZGlzY2FyZDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+RURCQjAzN0YtQUFFMy00NTEyLTg2M0YtRDlBQTgyQzlFNTFFPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0ICJhL01pc2MvVGV4dE1hdGUvUHl0aG9uLURldi50bWJ1bmRsZS9TbmlwcGV0cy8yIHRvIDMgLSBNb2R1bGUgRGVsZXRpb24gXDA1MGRvY3NcMDUxLnRtU25pcHBldCIgImIvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL1NuaXBwZXRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiBcMDUwZG9jc1wwNTEudG1TbmlwcGV0IgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWRlOGJhZS4uMDAwMDAwMAotLS0gImEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL1NuaXBwZXRzLzIgdG8gMyAtIE1vZHVsZSBEZWxldGlvbiBcMDUwZG9jc1wwNTEudG1TbmlwcGV0IgorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5jb250ZW50PC9rZXk+Ci0JPHN0cmluZz4uLiBkZXByZWNhdGVkOjogMi42Ci0gICBUaGUgOm1vZDpcYCR7MX1cYCBtb2R1bGUgaGFzIGJlZW4gZGVwcmVjYXRlZCBmb3IgcmVtb3ZhbCBpbiBQeXRob24gMy4wLgotJHswfTwvc3RyaW5nPgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+MiB0byAzIC0gTW9kdWxlIERlbGV0aW9uIChkb2NzKTwvc3RyaW5nPgotCTxrZXk+dGFiVHJpZ2dlcjwva2V5PgotCTxzdHJpbmc+MnRvM2RvY2RlbDwvc3RyaW5nPgotCTxrZXk+dXVpZDwva2V5PgotCTxzdHJpbmc+MDU2ODQxMEQtRUFGMS00QUYzLUI2REUtOEFGMTMzQTkxODIxPC9zdHJpbmc+Ci08L2RpY3Q+Ci08L3BsaXN0PgpkaWZmIC0tZ2l0IGEvTWlzYy9UZXh0TWF0ZS9QeXRob24tRGV2LnRtYnVuZGxlL2luZm8ucGxpc3QgYi9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvaW5mby5wbGlzdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDUxMGQ1ZC4uMDAwMDAwMAotLS0gYS9NaXNjL1RleHRNYXRlL1B5dGhvbi1EZXYudG1idW5kbGUvaW5mby5wbGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZS8vRFREIFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5TGlzdC0xLjAuZHRkIj4KLTxwbGlzdCB2ZXJzaW9uPSIxLjAiPgotPGRpY3Q+Ci0JPGtleT5tYWluTWVudTwva2V5PgotCTxkaWN0PgotCQk8a2V5Pml0ZW1zPC9rZXk+Ci0JCTxhcnJheT4KLQkJCTxzdHJpbmc+OTUxOUMyMkItNkFCOC00MUExLTk0RjYtMDc5RTBCNDVDMTQ3PC9zdHJpbmc+Ci0JCQk8c3RyaW5nPjA1Njg0MTBELUVBRjEtNEFGMy1CNkRFLThBRjEzM0E5MTgyMTwvc3RyaW5nPgotCQkJPHN0cmluZz4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L3N0cmluZz4KLQkJCTxzdHJpbmc+QjU0NUJCMUItQThFMS00MjZDLUI1MEEtNDI2RTc4Qjk2RDM4PC9zdHJpbmc+Ci0JCQk8c3RyaW5nPjZFRjE1MUU1LTcxNDktNEY4Mi04Nzk2LTBDQzQwRkU1ODlGQTwvc3RyaW5nPgotCQkJPHN0cmluZz4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS08L3N0cmluZz4KLQkJCTxzdHJpbmc+QkYzMzZGRkYtRTE0RC00QkYxLUExNTYtNzFDRjc2OEFDMDM0PC9zdHJpbmc+Ci0JCQk8c3RyaW5nPkZEMjVBOERDLTIyREMtNEVENC1CMjIyLUI5NDNDOEE5MTE3RDwvc3RyaW5nPgotCQkJPHN0cmluZz5FREJCMDM3Ri1BQUUzLTQ1MTItODYzRi1EOUFBODJDOUU1MUU8L3N0cmluZz4KLQkJPC9hcnJheT4KLQkJPGtleT5zdWJtZW51czwva2V5PgotCQk8ZGljdC8+Ci0JPC9kaWN0PgotCTxrZXk+bmFtZTwva2V5PgotCTxzdHJpbmc+UHl0aG9uLURldjwvc3RyaW5nPgotCTxrZXk+b3JkZXJpbmc8L2tleT4KLQk8YXJyYXk+Ci0JCTxzdHJpbmc+OTUxOUMyMkItNkFCOC00MUExLTk0RjYtMDc5RTBCNDVDMTQ3PC9zdHJpbmc+Ci0JCTxzdHJpbmc+MDU2ODQxMEQtRUFGMS00QUYzLUI2REUtOEFGMTMzQTkxODIxPC9zdHJpbmc+Ci0JCTxzdHJpbmc+QjU0NUJCMUItQThFMS00MjZDLUI1MEEtNDI2RTc4Qjk2RDM4PC9zdHJpbmc+Ci0JCTxzdHJpbmc+NkVGMTUxRTUtNzE0OS00RjgyLTg3OTYtMENDNDBGRTU4OUZBPC9zdHJpbmc+Ci0JCTxzdHJpbmc+RkQyNUE4REMtMjJEQy00RUQ0LUIyMjItQjk0M0M4QTkxMTdEPC9zdHJpbmc+Ci0JCTxzdHJpbmc+QkYzMzZGRkYtRTE0RC00QkYxLUExNTYtNzFDRjc2OEFDMDM0PC9zdHJpbmc+Ci0JCTxzdHJpbmc+RURCQjAzN0YtQUFFMy00NTEyLTg2M0YtRDlBQTgyQzlFNTFFPC9zdHJpbmc+Ci0JPC9hcnJheT4KLQk8a2V5PnV1aWQ8L2tleT4KLQk8c3RyaW5nPkE5MzJFQ0QxLUQ0M0EtNEY1Ny1CN0ZCLUExQ0VDM0I2NUQyMDwvc3RyaW5nPgotPC9kaWN0PgotPC9wbGlzdD4KZGlmZiAtLWdpdCBhL01pc2MvVmltL3B5dGhvbi52aW0gYi9NaXNjL1ZpbS9weXRob24udmltCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWVlN2ViLi4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3B5dGhvbi52aW0KKysrIC9kZXYvbnVsbApAQCAtMSwxNDggKzAsMCBAQAotIiBBdXRvLWdlbmVyYXRlZCBWaW0gc3ludGF4IGZpbGUgZm9yIFB5dGhvbiAodHJ1bms6IHI2MDM3Nk0pLgotIgotIiBUbyB1c2U6IGNvcHkgb3Igc3ltbGluayB0byB+Ly52aW0vc3ludGF4L3B5dGhvbi52aW0KLQotCi1pZiBleGlzdHMoImI6Y3VycmVudF9zeW50YXgiKQotICBmaW5pc2gKLWVuZGlmCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9hbGwiKQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzID0gMQotICBsZXQgcHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyA9IDEKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfZXhjZXB0aW9ucyA9IDEKLSAgbGV0IHB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzID0gMQotZW5kaWYKLQotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIGFzIGFzc2VydCBicmVhayBjb250aW51ZSBkZWwgZXhjZXB0IGV4ZWMgZmluYWxseQotc3luIGtleXdvcmQgcHl0aG9uU3RhdGVtZW50ICAgIGdsb2JhbCBsYW1iZGEgcGFzcyBwcmludCByYWlzZSByZXR1cm4gdHJ5IHdpdGgKLXN5biBrZXl3b3JkIHB5dGhvblN0YXRlbWVudCAgICB5aWVsZAotCi1zeW4ga2V5d29yZCBweXRob25TdGF0ZW1lbnQgICAgZGVmIGNsYXNzIG5leHRncm91cD1weXRob25GdW5jdGlvbiBza2lwd2hpdGUKLQotc3luIG1hdGNoIHB5dGhvbkZ1bmN0aW9uICAgICJbYS16QS1aX11bYS16QS1aMC05X10qIiBjb250YWluZWQKLQotc3luIGtleXdvcmQgcHl0aG9uUmVwZWF0ICAgIGZvciB3aGlsZQotCi1zeW4ga2V5d29yZCBweXRob25Db25kaXRpb25hbCAgICBpZiBlbGlmIGVsc2UKLQotc3luIGtleXdvcmQgcHl0aG9uT3BlcmF0b3IgICAgYW5kIGluIGlzIG5vdCBvcgotCi1zeW4ga2V5d29yZCBweXRob25QcmVDb25kaXQgICAgaW1wb3J0IGZyb20KLQotc3luIG1hdGNoIHB5dGhvbkNvbW1lbnQgICAgIiMuKiQiIGNvbnRhaW5zPXB5dGhvblRvZG8KLQotc3luIGtleXdvcmQgcHl0aG9uVG9kbyAgICBUT0RPIEZJWE1FIFhYWCBjb250YWluZWQKLQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPScrIGVuZD0rJysgc2tpcD0rXFxcXFx8XFwnKyBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD0iKyBlbmQ9KyIrIHNraXA9K1xcXFxcfFxcIisgY29udGFpbnM9cHl0aG9uRXNjYXBlCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9IiIiKyBlbmQ9KyIiIisgIGNvbnRhaW5zPXB5dGhvbkVzY2FwZQotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPScnJysgZW5kPSsnJycrICBjb250YWlucz1weXRob25Fc2NhcGUKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdJysgZW5kPSsnKyBza2lwPStcXFxcXHxcXCcrIAotc3luIHJlZ2lvbiBweXRob25TdHJpbmcgICAgbWF0Y2hncm91cD1Ob3JtYWwgc3RhcnQ9K1t1VV1cPVtyUl0iKyBlbmQ9KyIrIHNraXA9K1xcXFxcfFxcIisgCi1zeW4gcmVnaW9uIHB5dGhvblN0cmluZyAgICBtYXRjaGdyb3VwPU5vcm1hbCBzdGFydD0rW3VVXVw9W3JSXSIiIisgZW5kPSsiIiIrICAKLXN5biByZWdpb24gcHl0aG9uU3RyaW5nICAgIG1hdGNoZ3JvdXA9Tm9ybWFsIHN0YXJ0PStbdVVdXD1bclJdJycnKyBlbmQ9KycnJysgIAotCi1zeW4gbWF0Y2ggcHl0aG9uRXNjYXBlICAgICtcXFthYmZucnR2XCciXFxdKyBjb250YWluZWQKLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlxcXG9cezEsM30iIGNvbnRhaW5lZAotc3luIG1hdGNoIHB5dGhvbkVzY2FwZSAgICAiXFx4XHhcezJ9IiBjb250YWluZWQKLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlwoXFx1XHhcezR9XHxcXFVceFx7OH1cKSIgY29udGFpbmVkCi0KLXN5biBtYXRjaCBweXRob25Fc2NhcGUgICAgIlxcJCIKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyIpCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8MHhceFwrW0xsXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8XGRcK1tMbGpKXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlwuXGRcK1woW2VFXVsrLV1cPVxkXCtcKVw9W2pKXVw9XD4iCi0gIHN5biBtYXRjaCBweXRob25OdW1iZXIgICAgIlw8XGRcK1wuXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiIKLSAgc3luIG1hdGNoIHB5dGhvbk51bWJlciAgICAiXDxcZFwrXC5cZFwrXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiIKLQotZW5kaWYKLQotCi1pZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfYnVpbHRpbnMiKQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIEVsbGlwc2lzIEZhbHNlIE5vbmUgTm90SW1wbGVtZW50ZWQgVHJ1ZSBfX2RlYnVnX18KLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBfX2ltcG9ydF9fIGFicyBhbGwgYW55IGJvb2wKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBidWZmZXIgY2FsbGFibGUgY2hyIGNsYXNzbWV0aG9kIGNtcAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGNvbXBsZXggY29weXJpZ2h0IGNyZWRpdHMgZGVsYXR0ciBkaWN0Ci0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgZGlyIGRpdm1vZCBlbnVtZXJhdGUgZXZhbCBleGVjIGV4aXQKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBmaWx0ZXIgZmxvYXQgZnJvemVuc2V0IGdldGF0dHIgZ2xvYmFscyBoYXNhdHRyCi0gIHN5biBrZXl3b3JkIHB5dGhvbkJ1aWx0aW4gICAgaGFzaCBoZWxwIGhleCBpZCBpbnQgaXNpbnN0YW5jZQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIGlzc3ViY2xhc3MgaXRlciBsZW4gbGljZW5zZSBsaXN0IGxvY2FscyBtYXAKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICBtYXggbWluIG9iamVjdCBvY3Qgb3BlbiBvcmQgcG93IHByb3BlcnR5IHF1aXQKLSAgc3luIGtleXdvcmQgcHl0aG9uQnVpbHRpbiAgICByYW5nZSByZWxvYWQgcmVwciByZXZlcnNlZCByb3VuZAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHNldCBzZXRhdHRyIHNsaWNlIHNvcnRlZCBzdGF0aWNtZXRob2Qgc3RyIHN1bQotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHN1cGVyIHRydW5jIHR1cGxlIHR5cGUgdW5pY29kZSB2YXJzIAotICBzeW4ga2V5d29yZCBweXRob25CdWlsdGluICAgIHppcAotCi1lbmRpZgotCi0KLWlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9leGNlcHRpb25zIikKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEFyaXRobWV0aWNFcnJvciBBc3NlcnRpb25FcnJvciBBdHRyaWJ1dGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgQmFzZUV4Y2VwdGlvbiBEZXByZWNhdGlvbldhcm5pbmcgRU9GRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEVudmlyb25tZW50RXJyb3IgRXhjZXB0aW9uIEZsb2F0aW5nUG9pbnRFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgRnV0dXJlV2FybmluZyBHZW5lcmF0b3JFeGl0IElPRXJyb3IgSW1wb3J0RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIEltcG9ydFdhcm5pbmcgSW5kZW50YXRpb25FcnJvciBJbmRleEVycm9yCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBLZXlFcnJvciBLZXlib2FyZEludGVycnVwdCBMb29rdXBFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgTWVtb3J5RXJyb3IgTmFtZUVycm9yIE5vdEltcGxlbWVudGVkRXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIE9TRXJyb3IgT3ZlcmZsb3dFcnJvciBQZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBSZWZlcmVuY2VFcnJvciBSdW50aW1lRXJyb3IgUnVudGltZVdhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFN0b3BJdGVyYXRpb24gU3ludGF4RXJyb3IKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFN5bnRheFdhcm5pbmcgU3lzdGVtRXJyb3IgU3lzdGVtRXhpdCBUYWJFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVHlwZUVycm9yIFVuYm91bmRMb2NhbEVycm9yIFVuaWNvZGVEZWNvZGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZUVuY29kZUVycm9yIFVuaWNvZGVFcnJvcgotICBzeW4ga2V5d29yZCBweXRob25FeGNlcHRpb24gICAgVW5pY29kZVRyYW5zbGF0ZUVycm9yIFVuaWNvZGVXYXJuaW5nCi0gIHN5biBrZXl3b3JkIHB5dGhvbkV4Y2VwdGlvbiAgICBVc2VyV2FybmluZyBWYWx1ZUVycm9yIFdhcm5pbmcKLSAgc3luIGtleXdvcmQgcHl0aG9uRXhjZXB0aW9uICAgIFplcm9EaXZpc2lvbkVycm9yCi0KLWVuZGlmCi0KLQotaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X3NwYWNlX2Vycm9ycyIpCi0gIHN5biBtYXRjaCBweXRob25TcGFjZUVycm9yICAgIGRpc3BsYXkgZXhjbHVkZW5sICJcU1xzXCskIm1zPXMrMQotICBzeW4gbWF0Y2ggcHl0aG9uU3BhY2VFcnJvciAgICBkaXNwbGF5ICIgXCtcdCIKLSAgc3luIG1hdGNoIHB5dGhvblNwYWNlRXJyb3IgICAgZGlzcGxheSAiXHRcKyAiCi0KLWVuZGlmCi0KLQotICBoaSBkZWYgbGluayBweXRob25TdGF0ZW1lbnQgU3RhdGVtZW50Ci0gIGhpIGRlZiBsaW5rIHB5dGhvblN0YXRlbWVudCBTdGF0ZW1lbnQKLSAgaGkgZGVmIGxpbmsgcHl0aG9uRnVuY3Rpb24gRnVuY3Rpb24KLSAgaGkgZGVmIGxpbmsgcHl0aG9uUmVwZWF0IFJlcGVhdAotICBoaSBkZWYgbGluayBweXRob25Db25kaXRpb25hbCBDb25kaXRpb25hbAotICBoaSBkZWYgbGluayBweXRob25PcGVyYXRvciBPcGVyYXRvcgotICBoaSBkZWYgbGluayBweXRob25QcmVDb25kaXQgUHJlQ29uZGl0Ci0gIGhpIGRlZiBsaW5rIHB5dGhvbkNvbW1lbnQgQ29tbWVudAotICBoaSBkZWYgbGluayBweXRob25Ub2RvIFRvZG8KLSAgaGkgZGVmIGxpbmsgcHl0aG9uU3RyaW5nIFN0cmluZwotICBoaSBkZWYgbGluayBweXRob25Fc2NhcGUgU3BlY2lhbAotICBoaSBkZWYgbGluayBweXRob25Fc2NhcGUgU3BlY2lhbAotCi0gIGlmIGV4aXN0cygicHl0aG9uX2hpZ2hsaWdodF9udW1iZXJzIikKLSAgICBoaSBkZWYgbGluayBweXRob25OdW1iZXIgTnVtYmVyCi0gIGVuZGlmCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2J1aWx0aW5zIikKLSAgICBoaSBkZWYgbGluayBweXRob25CdWlsdGluIEZ1bmN0aW9uCi0gIGVuZGlmCi0KLSAgaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiKQotICAgIGhpIGRlZiBsaW5rIHB5dGhvbkV4Y2VwdGlvbiBFeGNlcHRpb24KLSAgZW5kaWYKLQotICBpZiBleGlzdHMoInB5dGhvbl9oaWdobGlnaHRfc3BhY2VfZXJyb3JzIikKLSAgICBoaSBkZWYgbGluayBweXRob25TcGFjZUVycm9yIEVycm9yCi0gIGVuZGlmCi0KLQotIiBVbmNvbW1lbnQgdGhlICdtaW5saW5lcycgc3RhdGVtZW50IGxpbmUgYW5kIGNvbW1lbnQgb3V0IHRoZSAnbWF4bGluZXMnCi0iIHN0YXRlbWVudCBsaW5lOyBjaGFuZ2VzIGJlaGF2aW91ciB0byBsb29rIGF0IGxlYXN0IDIwMDAgbGluZXMgcHJldmlvdXNseSBmb3IKLSIgc3ludGF4IG1hdGNoZXMgaW5zdGVhZCBvZiBhdCBtb3N0IDIwMCBsaW5lcwotc3luIHN5bmMgbWF0Y2ggcHl0aG9uU3luYyBncm91cGhlcmUgTk9ORSAiKTokIgotc3luIHN5bmMgbWF4bGluZXM9MjAwCi0ic3luIHN5bmMgbWlubGluZXM9MjAwMAotCi1sZXQgYjpjdXJyZW50X3N5bnRheCA9ICJweXRob24iCmRpZmYgLS1naXQgYS9NaXNjL1ZpbS9zeW50YXhfdGVzdC5weSBiL01pc2MvVmltL3N5bnRheF90ZXN0LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZDIwODY2Li4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3N5bnRheF90ZXN0LnB5CisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotIiIiVGVzdCBmaWxlIGZvciBzeW50YXggaGlnaGxpZ2h0aW5nIG9mIGVkaXRvcnMuCi0KLU1lYW50IHRvIGNvdmVyIGEgd2lkZSByYW5nZSBvZiBkaWZmZXJlbnQgdHlwZXMgb2Ygc3RhdGVtZW50cyBhbmQgZXhwcmVzc2lvbnMuCi1Ob3QgbmVjZXNzYXJpbHkgc2Vuc2ljYWwgb3IgY29tcHJlaGVuc2l2ZSAoYXNzdW1lIHRoYXQgaWYgb25lIGV4Y2VwdGlvbiBpcwotaGlnaGxpZ2h0ZWQgdGhhdCBhbGwgYXJlLCBmb3IgaW5zdGFuY2UpLgotCi1FeHRyYW5lb3VzIHRyYWlsaW5nIHdoaXRlc3BhY2UgY2FuJ3QgYmUgdGVzdGVkIGJlY2F1c2Ugb2Ygc3ZuIHByZS1jb21taXQgaG9vawotY2hlY2tzIGZvciBzdWNoIHRoaW5ncy4KLQotIiIiCi0jIENvbW1lbnQKLSMgT1BUSU9OQUw6IFhYWCBjYXRjaCB5b3VyIGF0dGVudGlvbgotCi0jIFN0YXRlbWVudHMKLWZyb20gX19mdXR1cmVfXyBpbXBvcnQgd2l0aF9zdGF0ZW1lbnQgICMgSW1wb3J0Ci1mcm9tIHN5cyBpbXBvcnQgcGF0aCBhcyB0aGluZwotYXNzZXJ0IFRydWUgIyBrZXl3b3JkCi1kZWYgZm9vKCk6ICAjIGZ1bmN0aW9uIGRlZmluaXRpb24KLSAgICByZXR1cm4gW10KLWNsYXNzIEJhcihvYmplY3QpOiAgIyBDbGFzcyBkZWZpbml0aW9uCi0gICAgZGVmIF9fZW50ZXJfXyhzZWxmKToKLSAgICAgICAgcGFzcwotICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncyk6Ci0gICAgICAgIHBhc3MKLWZvbygpICAjIFVOQ09MT1VSRUQ6IGZ1bmN0aW9uIGNhbGwKLXdoaWxlIEZhbHNlOiAgIyAnd2hpbGUnCi0gICAgY29udGludWUKLWZvciB4IGluIGZvbygpOiAgIyAnZm9yJwotICAgIGJyZWFrCi13aXRoIEJhcigpIGFzIHN0dWZmOgotICAgIHBhc3MKLWlmIEZhbHNlOiBwYXNzICAjICdpZicKLWVsaWYgRmFsc2U6IHBhc3MKLWVsc2U6IHBhc3MKLQotIyBDb25zdGFudHMKLSdzaW5nbGUtcXVvdGUnLCB1J3VuaWNvZGUnICMgU3RyaW5ncyBvZiBhbGwga2luZHM7IHByZWZpeGVzIG5vdCBoaWdobGlnaHRlZAotImRvdWJsZS1xdW90ZSIKLSIiInRyaXBsZSBkb3VibGUtcXVvdGUiIiIKLScnJ3RyaXBsZSBzaW5nbGUtcXVvdGUnJycKLXIncmF3JwotdXIndW5pY29kZSByYXcnCi0nZXNjYXBlXG4nCi0nXDA0JyAgIyBvY3RhbAotJ1x4RkYnICMgaGV4Ci0nXHUxMTExJyAjIHVuaWNvZGUgY2hhcmFjdGVyCi0xICAjIEludGVncmFsCi0xTAotMS4wICAjIEZsb2F0Ci0uMQotMSsyaiAgIyBDb21wbGV4Ci0KLSMgRXhwcmVzc2lvbnMKLTEgYW5kIDIgb3IgMyAgIyBCb29sZWFuIG9wZXJhdG9ycwotMiA8IDMgICMgVU5DT0xPVVJFRDogY29tcGFyaXNvbiBvcGVyYXRvcnMKLXNwYW0gPSA0MiAgIyBVTkNPTE9VUkVEOiBhc3NpZ25tZW50Ci0yICsgMyAgIyBVTkNPTE9VUkVEOiBudW1iZXIgb3BlcmF0b3JzCi1bXSAgIyBVTkNPTE9VUkVEOiBsaXN0Ci17fSAgIyBVTkNPTE9VUkVEOiBkaWN0Ci0oMSwpICAjIFVOQ09MT1VSRUQ6IHR1cGxlCi1hbGwgICMgQnVpbHQtaW4gZnVuY3Rpb25zCi1HZW5lcmF0b3JFeGl0ICAjIEV4Y2VwdGlvbnMKZGlmZiAtLWdpdCBhL01pc2MvVmltL3ZpbV9zeW50YXgucHkgYi9NaXNjL1ZpbS92aW1fc3ludGF4LnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzJiMzUwLi4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3ZpbV9zeW50YXgucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjkgKzAsMCBAQAotZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCB3aXRoX3N0YXRlbWVudAotIyBYWFgobm5vcndpdHopOiB3aGF0IHZlcnNpb25zIG9mIHB5dGhvbiBpcyB0aGlzIGZpbGUgc3VwcG9zZWQgdG8gd29yayB3aXRoPwotIyBJdCB1c2VzIHRoZSBvbGQgcHJpbnQgc3RhdGVtZW50IG5vdCBpbiBweTNrLgotCi1pbXBvcnQga2V5d29yZAotaW1wb3J0IGV4Y2VwdGlvbnMKLWltcG9ydCBidWlsdGlucwotZnJvbSBzdHJpbmcgaW1wb3J0IFRlbXBsYXRlCi1mcm9tIHN5cyBpbXBvcnQgc3VidmVyc2lvbgotCi1jb21tZW50X2hlYWRlciA9ICcnJyIgQXV0by1nZW5lcmF0ZWQgVmltIHN5bnRheCBmaWxlIGZvciBQeXRob24gKCVzOiByJXMpLgotIgotIiBUbyB1c2U6IGNvcHkgb3Igc3ltbGluayB0byB+Ly52aW0vc3ludGF4L3B5dGhvbi52aW0nJycKLQotc3RhdGVtZW50X2hlYWRlciA9ICIiIgotaWYgZXhpc3RzKCJiOmN1cnJlbnRfc3ludGF4IikKLSAgZmluaXNoCi1lbmRpZiIiIgotCi1zdGF0ZW1lbnRfZm9vdGVyID0gJycnCi0iIFVuY29tbWVudCB0aGUgJ21pbmxpbmVzJyBzdGF0ZW1lbnQgbGluZSBhbmQgY29tbWVudCBvdXQgdGhlICdtYXhsaW5lcycKLSIgc3RhdGVtZW50IGxpbmU7IGNoYW5nZXMgYmVoYXZpb3VyIHRvIGxvb2sgYXQgbGVhc3QgMjAwMCBsaW5lcyBwcmV2aW91c2x5IGZvcgotIiBzeW50YXggbWF0Y2hlcyBpbnN0ZWFkIG9mIGF0IG1vc3QgMjAwIGxpbmVzCi1zeW4gc3luYyBtYXRjaCBweXRob25TeW5jIGdyb3VwaGVyZSBOT05FICIpOiQiCi1zeW4gc3luYyBtYXhsaW5lcz0yMDAKLSJzeW4gc3luYyBtaW5saW5lcz0yMDAwCi0KLWxldCBiOmN1cnJlbnRfc3ludGF4ID0gInB5dGhvbiInJycKLQotbG9vcGluZyA9ICgnZm9yJywgJ3doaWxlJykKLWNvbmRpdGlvbmFscyA9ICgnaWYnLCAnZWxpZicsICdlbHNlJykKLWJvb2xlYW5fb3BzID0gKCdhbmQnLCAnaW4nLCAnaXMnLCAnbm90JywgJ29yJykKLWltcG9ydF9zdG10cyA9ICgnaW1wb3J0JywgJ2Zyb20nKQotb2JqZWN0X2RlZnMgPSAoJ2RlZicsICdjbGFzcycpCi0KLWV4Y2VwdGlvbl9uYW1lcyA9IHNvcnRlZChleGMgZm9yIGV4YyBpbiBkaXIoZXhjZXB0aW9ucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IGV4Yy5zdGFydHN3aXRoKCdfXycpKQotCi0jIE5lZWQgdG8gaW5jbHVkZSBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoICdfXycgKGUuZy4sIF9faW1wb3J0X18pLCBidXQKLSMgbm90aGluZyB0aGF0IGNvbWVzIHdpdGggbW9kdWxlcyAoZS5nLiwgX19uYW1lX18pLCBzbyBqdXN0IGV4Y2x1ZGUgYW55dGhpbmcgaW4KLSMgdGhlICdleGNlcHRpb25zJyBtb2R1bGUgc2luY2Ugd2Ugd2FudCB0byBpZ25vcmUgZXhjZXB0aW9ucyAqYW5kKiB3aGF0IGFueQotIyBtb2R1bGUgd291bGQgaGF2ZQotYnVpbHRpbl9uYW1lcyA9IHNvcnRlZChidWlsdGluIGZvciBidWlsdGluIGluIGRpcihidWlsdGlucykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBidWlsdGluIG5vdCBpbiBkaXIoZXhjZXB0aW9ucykpCi0KLWVzY2FwZXMgPSAocicrXFxbYWJmbnJ0dlwnIlxcXSsnLCByJyJcXFxvXHsxLDN9IicsIHInIlxceFx4XHsyfSInLAotICAgICAgICAgICAgciciXChcXHVceFx7NH1cfFxcVVx4XHs4fVwpIicsIHInIlxcJCInKQotCi10b2RvcyA9ICgiVE9ETyIsICJGSVhNRSIsICJYWFgiKQotCi0jIFhYWCBjb2RpZnk/Ci1udW1iZXJzID0gKHInIlw8MHhceFwrW0xsXVw9XD4iJywgciciXDxcZFwrW0xsakpdXD1cPiInLAotICAgICAgICAgICAgJyJcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IicsCi0gICAgICAgICAgICAnIlw8XGRcK1wuXChbZUVdWystXVw9XGRcK1wpXD1bakpdXD1cPiInLAotICAgICAgICAgICAgJyJcPFxkXCtcLlxkXCtcKFtlRV1bKy1dXD1cZFwrXClcPVtqSl1cPVw+IicpCi0KLWNvbnRhaW5lZCA9IGxhbWJkYSB4OiAiJXMgY29udGFpbmVkIiAlIHgKLQotZGVmIHN0cl9yZWdleGVzKCk6Ci0gICAgIiIiR2VuZXJhdG9yIHRvIHlpZWxkIHZhcmlvdXMgY29tYmluYXRpb25zIG9mIHN0cmluZ3MgcmVnZXhlcyIiIgotICAgIHJlZ2V4X3RlbXBsYXRlID0gVGVtcGxhdGUoJ21hdGNoZ3JvdXA9Tm9ybWFsICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhcnQ9K1t1VV1cPSR7cmF3fSR7c2VwfSsgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmQ9KyR7c2VwfSsgJyArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcke3NraXB9ICcgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJHtjb250YWluc30nKQotICAgIHNraXBfcmVnZXggPSBUZW1wbGF0ZShyJ3NraXA9K1xcXFxcfFxcJHtzZXB9KycpCi0gICAgZm9yIHJhdyBpbiAoJycsICdbclJdJyk6Ci0gICAgICAgIGZvciBzZXBhcmF0b3IgaW4gKCInIiwgJyInLCAnIiIiJywgIicnJyIpOgotICAgICAgICAgICAgaWYgbGVuKHNlcGFyYXRvcikgPT0gMToKLSAgICAgICAgICAgICAgICBza2lwID0gc2tpcF9yZWdleC5zdWJzdGl0dXRlKHNlcD1zZXBhcmF0b3IpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNraXAgPSAnJwotICAgICAgICAgICAgY29udGFpbnMgPSAnY29udGFpbnM9cHl0aG9uRXNjYXBlJyBpZiBub3QgcmF3IGVsc2UgJycKLSAgICAgICAgICAgIHlpZWxkIHJlZ2V4X3RlbXBsYXRlLnN1YnN0aXR1dGUocmF3PXJhdywgc2VwPXNlcGFyYXRvciwgc2tpcD1za2lwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlucyA9IGNvbnRhaW5zKQotCi1zcGFjZV9lcnJvcnMgPSAocidleGNsdWRlbmwgIlxTXHNcKyQibXM9cysxJywgciciIFwrXHQiJywgciciXHRcKyAiJykKLQotc3RhdGVtZW50cyA9ICgKLSAgICAgICAgICAgICAgICAoJycsCi0gICAgICAgICAgICAgICAgICAgICMgWFhYIE1pZ2h0IG5lZWQgdG8gY2hhbmdlIHB5dGhvblN0YXRlbWVudCBzaW5jZSBoYXZlCi0gICAgICAgICAgICAgICAgICAgICMgc3BlY2lmaWMgUmVwZWF0LCBDb25kaXRpb25hbCwgT3BlcmF0b3IsIGV0Yy4gZm9yICd3aGlsZScsCi0gICAgICAgICAgICAgICAgICAgICMgZXRjLgotICAgICAgICAgICAgICAgICAgICBbKCJTdGF0ZW1lbnQiLCAicHl0aG9uU3RhdGVtZW50IiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgKGt3IGZvciBrdyBpbiBrZXl3b3JkLmt3bGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGt3IG5vdCBpbiAobG9vcGluZyArIGNvbmRpdGlvbmFscyArIGJvb2xlYW5fb3BzICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRfc3RtdHMgKyBvYmplY3RfZGVmcykpCi0gICAgICAgICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAgICAgICgiU3RhdGVtZW50IiwgInB5dGhvblN0YXRlbWVudCIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoJyAnLmpvaW4ob2JqZWN0X2RlZnMpICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyBuZXh0Z3JvdXA9cHl0aG9uRnVuY3Rpb24gc2tpcHdoaXRlJykpLAotICAgICAgICAgICAgICAgICAgICAgKCJGdW5jdGlvbiIsInB5dGhvbkZ1bmN0aW9uIiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWQoJyJbYS16QS1aX11bYS16QS1aMC05X10qIicpKSwKLSAgICAgICAgICAgICAgICAgICAgICgiUmVwZWF0IiwgInB5dGhvblJlcGVhdCIsICJrZXl3b3JkIiwgbG9vcGluZyksCi0gICAgICAgICAgICAgICAgICAgICAoIkNvbmRpdGlvbmFsIiwgInB5dGhvbkNvbmRpdGlvbmFsIiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbmFscyksCi0gICAgICAgICAgICAgICAgICAgICAoIk9wZXJhdG9yIiwgInB5dGhvbk9wZXJhdG9yIiwgImtleXdvcmQiLCBib29sZWFuX29wcyksCi0gICAgICAgICAgICAgICAgICAgICAoIlByZUNvbmRpdCIsICJweXRob25QcmVDb25kaXQiLCAia2V5d29yZCIsIGltcG9ydF9zdG10cyksCi0gICAgICAgICAgICAgICAgICAgICAoIkNvbW1lbnQiLCAicHl0aG9uQ29tbWVudCIsICJtYXRjaCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgJyIjLiokIiBjb250YWlucz1weXRob25Ub2RvJyksCi0gICAgICAgICAgICAgICAgICAgICAoIlRvZG8iLCAicHl0aG9uVG9kbyIsICJrZXl3b3JkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZWQoJyAnLmpvaW4odG9kb3MpKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlN0cmluZyIsICJweXRob25TdHJpbmciLCAicmVnaW9uIiwgc3RyX3JlZ2V4ZXMoKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlNwZWNpYWwiLCAicHl0aG9uRXNjYXBlIiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAoY29udGFpbmVkKGVzYykgZm9yIGVzYyBpbiBlc2NhcGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCAnJCcgaW4gZXNjKSksCi0gICAgICAgICAgICAgICAgICAgICAoIlNwZWNpYWwiLCAicHl0aG9uRXNjYXBlIiwgIm1hdGNoIiwgciciXFwkIicpLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAgICAgKSwKLSAgICAgICAgICAgICAgICAoInB5dGhvbl9oaWdobGlnaHRfbnVtYmVycyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIk51bWJlciIsICJweXRob25OdW1iZXIiLCAibWF0Y2giLCBudW1iZXJzKV0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9idWlsdGlucyIsCi0gICAgICAgICAgICAgICAgICAgIFsoIkZ1bmN0aW9uIiwgInB5dGhvbkJ1aWx0aW4iLCAia2V5d29yZCIsIGJ1aWx0aW5fbmFtZXMpXQotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAgICAgICAgKCJweXRob25faGlnaGxpZ2h0X2V4Y2VwdGlvbnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJFeGNlcHRpb24iLCAicHl0aG9uRXhjZXB0aW9uIiwgImtleXdvcmQiLAotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uX25hbWVzKV0KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgICgicHl0aG9uX2hpZ2hsaWdodF9zcGFjZV9lcnJvcnMiLAotICAgICAgICAgICAgICAgICAgICBbKCJFcnJvciIsICJweXRob25TcGFjZUVycm9yIiwgIm1hdGNoIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICgiZGlzcGxheSAiICsgZXJyIGZvciBlcnIgaW4gc3BhY2VfZXJyb3JzKSldCi0gICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICkKLQotZGVmIHN5bl9wcmVmaXgodHlwZV8sIGtpbmQpOgotICAgIHJldHVybiAnc3luICVzICVzICAgICcgJSAodHlwZV8sIGtpbmQpCi0KLWRlZiBmaWxsX3N0bXQoaXRlcmFibGUsIGZpbGxfbGVuKToKLSAgICAiIiJZaWVsZCBhIHN0cmluZyB0aGF0IGZpbGxzIGF0IG1vc3QgZmlsbF9sZW4gY2hhcmFjdGVycyB3aXRoIHN0cmluZ3MKLSAgICByZXR1cm5lZCBieSAnaXRlcmFibGUnIGFuZCBzZXBhcmF0ZWQgYnkgYSBzcGFjZSIiIgotICAgICMgRGVhbCB3aXRoIHRyYWlsaW5nIGNoYXIgdG8gaGFuZGxlICcgJy5qb2luKCkgY2FsY3VsYXRpb24KLSAgICBmaWxsX2xlbiArPSAxCi0gICAgb3ZlcmZsb3cgPSBOb25lCi0gICAgaXQgPSBpdGVyKGl0ZXJhYmxlKQotICAgIHdoaWxlIFRydWU6Ci0gICAgICAgIGJ1ZmZlcl8gPSBbXQotICAgICAgICB0b3RhbF9sZW4gPSAwCi0gICAgICAgIGlmIG92ZXJmbG93OgotICAgICAgICAgICAgYnVmZmVyXy5hcHBlbmQob3ZlcmZsb3cpCi0gICAgICAgICAgICB0b3RhbF9sZW4gKz0gbGVuKG92ZXJmbG93KSArIDEKLSAgICAgICAgICAgIG92ZXJmbG93ID0gTm9uZQotICAgICAgICB3aGlsZSB0b3RhbF9sZW4gPCBmaWxsX2xlbjoKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBuZXdfaXRlbSA9IG5leHQoaXQpCi0gICAgICAgICAgICAgICAgYnVmZmVyXy5hcHBlbmQobmV3X2l0ZW0pCi0gICAgICAgICAgICAgICAgdG90YWxfbGVuICs9IGxlbihuZXdfaXRlbSkgKyAxCi0gICAgICAgICAgICBleGNlcHQgU3RvcEl0ZXJhdGlvbjoKLSAgICAgICAgICAgICAgICBpZiBidWZmZXJfOgotICAgICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIGlmIG92ZXJmbG93OgotICAgICAgICAgICAgICAgICAgICB5aWVsZCBvdmVyZmxvdwotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICBpZiB0b3RhbF9sZW4gPiBmaWxsX2xlbjoKLSAgICAgICAgICAgIG92ZXJmbG93ID0gYnVmZmVyXy5wb3AoKQotICAgICAgICAgICAgdG90YWxfbGVuIC09IGxlbihvdmVyZmxvdykgLSAxCi0gICAgICAgIHJldCA9ICcgJy5qb2luKGJ1ZmZlcl8pCi0gICAgICAgIGFzc2VydCBsZW4ocmV0KSA8PSBmaWxsX2xlbgotICAgICAgICB5aWVsZCByZXQKLQotRklMTCA9IDgwCi0KLWRlZiBtYWluKGZpbGVfcGF0aCk6Ci0gICAgd2l0aCBvcGVuKGZpbGVfcGF0aCwgJ3cnKSBhcyBGSUxFOgotICAgICAgICAjIENvbW1lbnQgZm9yIGZpbGUKLSAgICAgICAgcHJpbnQ+PkZJTEUsIGNvbW1lbnRfaGVhZGVyICUgc3VidmVyc2lvblsxOl0KLSAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgU3RhdGVtZW50cyBhdCBzdGFydCBvZiBmaWxlCi0gICAgICAgIHByaW50Pj5GSUxFLCBzdGF0ZW1lbnRfaGVhZGVyCi0gICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAjIEdlbmVyYXRlIGNhc2UgZm9yIHB5dGhvbl9oaWdobGlnaHRfYWxsCi0gICAgICAgIHByaW50Pj5GSUxFLCAnaWYgZXhpc3RzKCJweXRob25faGlnaGxpZ2h0X2FsbCIpJwotICAgICAgICBmb3Igc3RhdGVtZW50X3Zhciwgc3RhdGVtZW50X3BhcnRzIGluIHN0YXRlbWVudHM6Ci0gICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnICBsZXQgJXMgPSAxJyAlIHN0YXRlbWVudF92YXIKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnZW5kaWYnCi0gICAgICAgICAgICBwcmludD4+RklMRSwgJycKLSAgICAgICAgIyBHZW5lcmF0ZSBQeXRob24gZ3JvdXBzCi0gICAgICAgIGZvciBzdGF0ZW1lbnRfdmFyLCBzdGF0ZW1lbnRfcGFydHMgaW4gc3RhdGVtZW50czoKLSAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICdpZiBleGlzdHMoIiVzIiknICUgc3RhdGVtZW50X3ZhcgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcgICcKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgaW5kZW50ID0gJycKLSAgICAgICAgICAgIGZvciBjb2xvdXJfZ3JvdXAsIGdyb3VwLCB0eXBlXywgYXJndW1lbnRzIGluIHN0YXRlbWVudF9wYXJ0czoKLSAgICAgICAgICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVudHMsIGJhc2VzdHJpbmcpOgotICAgICAgICAgICAgICAgICAgICBwcmVmaXggPSBzeW5fcHJlZml4KHR5cGVfLCBncm91cCkKLSAgICAgICAgICAgICAgICAgICAgaWYgdHlwZV8gPT0gJ2tleXdvcmQnOgotICAgICAgICAgICAgICAgICAgICAgICAgc3RtdF9pdGVyID0gZmlsbF9zdG10KGFyZ3VtZW50cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMTCAtIGxlbihwcmVmaXgpIC0gbGVuKGluZGVudCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIGluZGVudCArIHByZWZpeCArIG5leHQoc3RtdF9pdGVyKQotICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IFN0b3BJdGVyYXRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnQgaW4gYXJndW1lbnRzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCBpbmRlbnQgKyBwcmVmaXggKyBhcmd1bWVudAotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJycKLQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCBpbmRlbnQgKyBzeW5fcHJlZml4KHR5cGVfLCBncm91cCkgKyBhcmd1bWVudHMKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGlmIHN0YXRlbWVudF92YXI6Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnZW5kaWYnCi0gICAgICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnJwotICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgQXNzb2NpYXRpbmcgUHl0aG9uIGdyb3VwIHdpdGggVmltIGNvbG91ciBncm91cAotICAgICAgICBmb3Igc3RhdGVtZW50X3Zhciwgc3RhdGVtZW50X3BhcnRzIGluIHN0YXRlbWVudHM6Ci0gICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgIHByaW50Pj5GSUxFLCAnICBpZiBleGlzdHMoIiVzIiknICUgc3RhdGVtZW50X3ZhcgotICAgICAgICAgICAgICAgIGluZGVudCA9ICcgICAgJwotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpbmRlbnQgPSAnICAnCi0gICAgICAgICAgICBmb3IgY29sb3VyX2dyb3VwLCBncm91cCwgdHlwZV8sIGFyZ3VtZW50cyBpbiBzdGF0ZW1lbnRfcGFydHM6Ci0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsIChpbmRlbnQgKyAiaGkgZGVmIGxpbmsgJXMgJXMiICUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGdyb3VwLCBjb2xvdXJfZ3JvdXApKQotICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICBpZiBzdGF0ZW1lbnRfdmFyOgotICAgICAgICAgICAgICAgICAgICBwcmludD4+RklMRSwgJyAgZW5kaWYnCi0gICAgICAgICAgICAgICAgcHJpbnQ+PkZJTEUsICcnCi0gICAgICAgICMgU3RhdGVtZW50cyBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlCi0gICAgICAgIHByaW50Pj5GSUxFLCBzdGF0ZW1lbnRfZm9vdGVyCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigicHl0aG9uLnZpbSIpCmRpZmYgLS1naXQgYS9NaXNjL1ZpbS92aW1yYyBiL01pc2MvVmltL3ZpbXJjCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzk4Y2NhLi4wMDAwMDAwCi0tLSBhL01pc2MvVmltL3ZpbXJjCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotIiB2aW1yYyBmaWxlIGZvciBmb2xsb3dpbmcgdGhlIGNvZGluZyBzdGFuZGFyZHMgc3BlY2lmaWVkIGluIFBFUCA3ICYgOC4KLSIKLSIgVG8gdXNlIHRoaXMgZmlsZSwgc291cmNlIGl0IGluIHlvdXIgb3duIHBlcnNvbmFsIC52aW1yYyBmaWxlIChgYHNvdXJjZQotIiA8ZmlsZW5hbWU+YGApIG9yLCBpZiB5b3UgZG9uJ3QgaGF2ZSBhIC52aW1yYyBmaWxlLCB5b3UgY2FuIGp1c3Qgc3ltbGluayB0byBpdAotIiAoYGBsbiAtcyA8dGhpcyBmaWxlPiB+Ly52aW1yY2BgKS4gIEFsbCBvcHRpb25zIGFyZSBwcm90ZWN0ZWQgYnkgYXV0b2NtZHMKLSIgKHJlYWQgYmVsb3cgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBjb21tYW5kKSBzbyBibGluZCBzb3VyY2luZyBvZiB0aGlzIGZpbGUKLSIgaXMgc2FmZSBhbmQgd2lsbCBub3QgYWZmZWN0IHlvdXIgc2V0dGluZ3MgZm9yIG5vbi1QeXRob24gb3Igbm9uLUMgZmlsZXMuCi0iCi0iCi0iIEFsbCBzZXR0aW5nIGFyZSBwcm90ZWN0ZWQgYnkgJ2F1JyAoJ2F1dG9jbWQnKSBzdGF0ZW1lbnRzLiAgT25seSBmaWxlcyBlbmRpbmcKLSIgaW4gLnB5IG9yIC5weXcgd2lsbCB0cmlnZ2VyIHRoZSBQeXRob24gc2V0dGluZ3Mgd2hpbGUgZmlsZXMgZW5kaW5nIGluICouYyBvcgotIiAqLmggd2lsbCB0cmlnZ2VyIHRoZSBDIHNldHRpbmdzLiAgVGhpcyBtYWtlcyB0aGUgZmlsZSAic2FmZSIgaW4gdGVybXMgb2Ygb25seQotIiBhZGp1c3Rpbmcgc2V0dGluZ3MgZm9yIFB5dGhvbiBhbmQgQyBmaWxlcy4KLSIKLSIgT25seSBiYXNpYyBzZXR0aW5ncyBuZWVkZWQgdG8gZW5mb3JjZSB0aGUgc3R5bGUgZ3VpZGVsaW5lcyBhcmUgc2V0LgotIiBTb21lIHN1Z2dlc3RlZCBvcHRpb25zIGFyZSBsaXN0ZWQgYnV0IGNvbW1lbnRlZCBvdXQgYXQgdGhlIGVuZCBvZiB0aGlzIGZpbGUuCi0KLSIgTnVtYmVyIG9mIHNwYWNlcyB0aGF0IGEgcHJlLWV4aXN0aW5nIHRhYiBpcyBlcXVhbCB0by4KLSIgRm9yIHRoZSBhbW91bnQgb2Ygc3BhY2UgdXNlZCBmb3IgYSBuZXcgdGFiIHVzZSBzaGlmdHdpZHRoLgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICpweSwqcHl3LCouYywqLmggc2V0IHRhYnN0b3A9OAotCi0iIFdoYXQgdG8gdXNlIGZvciBhbiBpbmRlbnQuCi0iIFRoaXMgd2lsbCBhZmZlY3QgQ3RybC1UIGFuZCAnYXV0b2luZGVudCcuCi0iIFB5dGhvbjogNCBzcGFjZXMKLSIgQzogdGFicyAocHJlLWV4aXN0aW5nIGZpbGVzKSBvciA0IHNwYWNlcyAobmV3IGZpbGVzKQotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKnB5dyBzZXQgc2hpZnR3aWR0aD00Ci1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dyBzZXQgZXhwYW5kdGFiCi1mdSBTZWxlY3RfY19zdHlsZSgpCi0gICAgaWYgc2VhcmNoKCdeXHQnLCAnbicsIDE1MCkKLSAgICAgICAgc2V0IHNoaWZ0d2lkdGg9OAotICAgICAgICBzZXQgbm9leHBhbmR0YWIKLSAgICBlbCAKLSAgICAgICAgc2V0IHNoaWZ0d2lkdGg9NAotICAgICAgICBzZXQgZXhwYW5kdGFiCi0gICAgZW4KLWVuZGYKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLmMsKi5oIGNhbGwgU2VsZWN0X2Nfc3R5bGUoKQotYXUgQnVmUmVhZCxCdWZOZXdGaWxlIE1ha2VmaWxlKiBzZXQgbm9leHBhbmR0YWIKLQotIiBVc2UgdGhlIGJlbG93IGhpZ2hsaWdodCBncm91cCB3aGVuIGRpc3BsYXlpbmcgYmFkIHdoaXRlc3BhY2UgaXMgZGVzaXJlZC4KLWhpZ2hsaWdodCBCYWRXaGl0ZXNwYWNlIGN0ZXJtYmc9cmVkIGd1aWJnPXJlZAotCi0iIERpc3BsYXkgdGFicyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSBpbiBQeXRob24gbW9kZSBhcyBiYWQuCi1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dyBtYXRjaCBCYWRXaGl0ZXNwYWNlIC9eXHRcKy8KLSIgTWFrZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGJlIGZsYWdnZWQgYXMgYmFkLgotYXUgQnVmUmVhZCxCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCwqLnJzdCBtYXRjaCBCYWRXaGl0ZXNwYWNlIC9cc1wrJC8KLQotIiBXcmFwIHRleHQgYWZ0ZXIgYSBjZXJ0YWluIG51bWJlciBvZiBjaGFyYWN0ZXJzCi0iIFB5dGhvbjogNzkgCi0iIEM6IDc5Ci1hdSBCdWZSZWFkLEJ1Zk5ld0ZpbGUgKi5weSwqLnB5dywqLmMsKi5oIHNldCB0ZXh0d2lkdGg9NzkKLQotIiBUdXJuIG9mZiBzZXR0aW5ncyBpbiAnZm9ybWF0b3B0aW9ucycgcmVsYXRpbmcgdG8gY29tbWVudCBmb3JtYXR0aW5nLgotIiAtIGMgOiBkbyBub3QgYXV0b21hdGljYWxseSBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gd3JhcHBpbmcgYmFzZWQgb24KLSIgICAgJ3RleHR3aWR0aCcKLSIgLSBvIDogZG8gbm90IGluc2VydCB0aGUgY29tbWVudCBsZWFkZXIgd2hlbiB1c2luZyAnbycgb3IgJ08nIGZyb20gY29tbWFuZCBtb2RlCi0iIC0gciA6IGRvIG5vdCBpbnNlcnQgdGhlIGNvbW1lbnQgbGVhZGVyIHdoZW4gaGl0dGluZyA8RW50ZXI+IGluIGluc2VydCBtb2RlCi0iIFB5dGhvbjogbm90IG5lZWRlZAotIiBDOiBwcmV2ZW50cyBpbnNlcnRpb24gb2YgJyonIGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgbGluZSBpbiBhIGNvbW1lbnQKLWF1IEJ1ZlJlYWQsQnVmTmV3RmlsZSAqLmMsKi5oIHNldCBmb3JtYXRvcHRpb25zLT1jIGZvcm1hdG9wdGlvbnMtPW8gZm9ybWF0b3B0aW9ucy09cgotCi0iIFVzZSBVTklYIChcbikgbGluZSBlbmRpbmdzLgotIiBPbmx5IHVzZWQgZm9yIG5ldyBmaWxlcyBzbyBhcyB0byBub3QgZm9yY2UgZXhpc3RpbmcgZmlsZXMgdG8gY2hhbmdlIHRoZWlyCi0iIGxpbmUgZW5kaW5ncy4KLSIgUHl0aG9uOiB5ZXMKLSIgQzogeWVzCi1hdSBCdWZOZXdGaWxlICoucHksKi5weXcsKi5jLCouaCBzZXQgZmlsZWZvcm1hdD11bml4Ci0KLQotIiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0iIFRoZSBmb2xsb3dpbmcgc2VjdGlvbiBjb250YWlucyBzdWdnZXN0ZWQgc2V0dGluZ3MuICBXaGlsZSBpbiBubyB3YXkgcmVxdWlyZWQKLSIgdG8gbWVldCBjb2Rpbmcgc3RhbmRhcmRzLCB0aGV5IGFyZSBoZWxwZnVsLgotCi0iIFNldCB0aGUgZGVmYXVsdCBmaWxlIGVuY29kaW5nIHRvIFVURi04OiBgYHNldCBlbmNvZGluZz11dGYtOGBgCi0KLSIgUHV0cyBhIG1hcmtlciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBVVEYgYW5kCi0iIFVDUyBlbmNvZGluZyAoV0FSTklORzogY2FuIHRyaWNrIHNoZWxscyBpbnRvIHRoaW5raW5nIGEgdGV4dCBmaWxlIGlzIGFjdHVhbGx5Ci0iIGEgYmluYXJ5IGZpbGUgd2hlbiBleGVjdXRpbmcgdGhlIHRleHQgZmlsZSk6IGBgc2V0IGJvbWJgYAotCi0iIEZvciBmdWxsIHN5bnRheCBoaWdobGlnaHRpbmc6Ci0iYGBsZXQgcHl0aG9uX2hpZ2hsaWdodF9hbGw9MWBgCi0iYGBzeW50YXggb25gYAotCi0iIEF1dG9tYXRpY2FsbHkgaW5kZW50IGJhc2VkIG9uIGZpbGUgdHlwZTogYGBmaWxldHlwZSBpbmRlbnQgb25gYAotIiBLZWVwIGluZGVudGF0aW9uIGxldmVsIGZyb20gcHJldmlvdXMgbGluZTogYGBzZXQgYXV0b2luZGVudGBgCi0KLSIgRm9sZGluZyBiYXNlZCBvbiBpbmRlbnRhdGlvbjogYGBzZXQgZm9sZG1ldGhvZD1pbmRlbnRgYApkaWZmIC0tZ2l0IGEvTWlzYy9jb3Zlcml0eV9tb2RlbC5jIGIvTWlzYy9jb3Zlcml0eV9tb2RlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ZjNhZWIKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL2NvdmVyaXR5X21vZGVsLmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qIENvdmVyaXR5IFNjYW4gbW9kZWwKKyAqCisgKiBUaGlzIGlzIGEgbW9kZWxpbmcgZmlsZSBmb3IgQ292ZXJpdHkgU2Nhbi4gTW9kZWxpbmcgaGVscHMgdG8gYXZvaWQgZmFsc2UKKyAqIHBvc2l0aXZlcy4KKyAqCisgKiAtIEEgbW9kZWwgZmlsZSBjYW4ndCBpbXBvcnQgYW55IGhlYWRlciBmaWxlcy4KKyAqIC0gVGhlcmVmb3JlIG9ubHkgc29tZSBidWlsdC1pbiBwcmltaXRpdmVzIGxpa2UgaW50LCBjaGFyIGFuZCB2b2lkIGFyZQorICogICBhdmFpbGFibGUgYnV0IG5vdCB3Y2hhcl90LCBOVUxMIGV0Yy4KKyAqIC0gTW9kZWxpbmcgZG9lc24ndCBuZWVkIGZ1bGwgc3RydWN0cyBhbmQgdHlwZWRlZnMuIFJ1ZGltZW50YXJ5IHN0cnVjdHMKKyAqICAgYW5kIHNpbWlsYXIgdHlwZXMgYXJlIHN1ZmZpY2llbnQuCisgKiAtIEFuIHVuaW5pdGlhbGl6ZWQgbG9jYWwgcG9pbnRlciBpcyBub3QgYW4gZXJyb3IuIEl0IHNpZ25pZmllcyB0aGF0IHRoZQorICogICB2YXJpYWJsZSBjb3VsZCBiZSBlaXRoZXIgTlVMTCBvciBoYXZlIHNvbWUgZGF0YS4KKyAqCisgKiBDb3Zlcml0eSBTY2FuIGRvZXNuJ3QgcGljayB1cCBtb2RpZmljYXRpb25zIGF1dG9tYXRpY2FsbHkuIFRoZSBtb2RlbCBmaWxlCisgKiBtdXN0IGJlIHVwbG9hZGVkIGJ5IGFuIGFkbWluIGluIHRoZSBhbmFseXNpcyBzZXR0aW5ncyBvZgorICogaHR0cDovL3NjYW4uY292ZXJpdHkuY29tL3Byb2plY3RzLzIwMAorICovCisKKy8qIGR1bW15IGRlZmluaXRpb25zLCBpbiBtb3N0IGNhc2VzIHN0cnVjdCBmaWVsZHMgYXJlbid0IHJlcXVpcmVkLiAqLworCisjZGVmaW5lIE5VTEwgKHZvaWQgKikwCisjZGVmaW5lIGFzc2VydChvcCkgLyogZW1wdHkgKi8KK3R5cGVkZWYgaW50IHNkaWdpdDsKK3R5cGVkZWYgbG9uZyBQeV9zc2l6ZV90OwordHlwZWRlZiBsb25nIGxvbmcgUFlfTE9OR19MT05HOwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB3Y2hhcl90OwordHlwZWRlZiBzdHJ1Y3Qge30gUHlPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCB7fSBncmFtbWFyOwordHlwZWRlZiBzdHJ1Y3Qge30gRElSOwordHlwZWRlZiBzdHJ1Y3Qge30gUkZJTEU7CisKKy8qIFB5dGhvbi9weXRob25ydW4uYworICogcmVzb3VyZWNlIGxlYWsgZmFsc2UgcG9zaXRpdmUgKi8KKwordm9pZCBQeV9GYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1zZykgeworICAgIF9fY292ZXJpdHlfcGFuaWNfXygpOworfQorCisvKiBPYmplY3RzL2xvbmdvYmplY3QuYworICogTkVHQVRJVkVfUkVUVVJOUyBmYWxzZSBwb3NpdGl2ZSAqLworCitzdGF0aWMgUHlPYmplY3QgKmdldF9zbWFsbF9pbnQoc2RpZ2l0IGl2YWwpCit7CisgICAgLyogTmV2ZXIgcmV0dXJucyBOVUxMICovCisgICAgUHlPYmplY3QgKnA7CisgICAgYXNzZXJ0KHAgIT0gTlVMTCk7CisgICAgcmV0dXJuIHA7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbUxvbmcobG9uZyBpdmFsKQoreworICAgIFB5T2JqZWN0ICpwOworICAgIGludCBtYXliZTsKKworICAgIGlmICgoaXZhbCA+PSAtNSkgJiYgKGl2YWwgPCAyNTcgKyA1KSkgeworICAgICAgICBwID0gZ2V0X3NtYWxsX2ludChpdmFsKTsKKyAgICAgICAgYXNzZXJ0KHAgIT0gTlVMTCk7CisgICAgICAgIHJldHVybiBwOworICAgIH0KKyAgICBpZiAobWF5YmUpCisgICAgICAgIHJldHVybiBwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE5VTEw7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbUxvbmdMb25nKFBZX0xPTkdfTE9ORyBpdmFsKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaXZhbCk7Cit9CisKK1B5T2JqZWN0ICpQeUxvbmdfRnJvbVNzaXplX3QoUHlfc3NpemVfdCBpdmFsKQoreworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaXZhbCk7Cit9CisKKy8qIHRhaW50ZWQgc2lua3MKKyAqCisgKiBDb3Zlcml0eSBjb25zaWRlcnMgYXJndiwgZW52aXJvbiwgcmVhZCgpIGRhdGEgZXRjIGFzIHRhaW5lZC4KKyAqLworCitQeU9iamVjdCAqUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5T2JqZWN0ICpleGMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhmaWxlbmFtZSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFB5dGhvbi9maWxldXRpbHMuYyAqLword2NoYXJfdCAqX1B5X2NoYXIyd2NoYXIoY29uc3QgY2hhciogYXJnLCBzaXplX3QgKnNpemUpCit7CisgICB3Y2hhcl90ICp3OworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhhcmcpOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhzaXplKTsKKyAgIHJldHVybiB3OworfQorCisvKiBQYXJzZXIvcGdlbm1haW4uYyAqLworZ3JhbW1hciAqZ2V0Z3JhbW1hcihjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBncmFtbWFyICpnOworICAgIF9fY292ZXJpdHlfdGFpbnRlZF9kYXRhX3NpbmtfXyhmaWxlbmFtZSk7CisgICAgcmV0dXJuIGc7Cit9CisKKy8qIFB5dGhvbi9tYXJzaGFsLmMgKi8KKworc3RhdGljIFB5X3NzaXplX3Qgcl9zdHJpbmcoY2hhciAqcywgUHlfc3NpemVfdCBuLCBSRklMRSAqcCkKK3sKKyAgICBfX2NvdmVyaXR5X3RhaW50ZWRfc3RyaW5nX2FyZ3VtZW50X18ocyk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIHJfbG9uZyhSRklMRSAqcCkKK3sKKyAgICBsb25nIGw7CisgICAgdW5zaWduZWQgY2hhciBidWZmZXJbNF07CisKKyAgICByX3N0cmluZygoY2hhciAqKWJ1ZmZlciwgNCwgcCk7CisgICAgX19jb3Zlcml0eV90YWludGVkX3N0cmluZ19zYW5pdGl6ZV9jb250ZW50X18oYnVmZmVyKTsKKyAgICBsID0gKGxvbmcpYnVmZmVyOworICAgIHJldHVybiBsOworfQorCisvKiBDb3Zlcml0eSBkb2Vzbid0IHVuZGVyc3RhbmQgdGhhdCBmZG9wZW5kaXIoKSBtYXkgdGFrZSBvd25lcnNoaXAgb2YgZmQuICovCisKK0RJUiAqZmRvcGVuZGlyKGludCBmZCkgeworICAgIERJUiAqZDsKKyAgICBpZiAoZCkgeworICAgICAgICBfX2NvdmVyaXR5X2Nsb3NlX18oZmQpOworICAgIH0KKyAgICByZXR1cm4gZDsKK30KKwpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24tY29uZmlnLmluIGIvTWlzYy9weXRob24tY29uZmlnLmluCmluZGV4IGFjM2EyYzcuLmUxM2RhNzUgMTAwNjQ0Ci0tLSBhL01pc2MvcHl0aG9uLWNvbmZpZy5pbgorKysgYi9NaXNjL3B5dGhvbi1jb25maWcuaW4KQEAgLTEsNiArMSw4IEBACiAjIUBFWEVOQU1FQAogIyAtKi0gcHl0aG9uIC0qLQogCisjIEtlZXAgdGhpcyBzY3JpcHQgaW4gc3luYyB3aXRoIHB5dGhvbi1jb25maWcuc2guaW4KKwogaW1wb3J0IGdldG9wdAogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCkBAIC00NSw4ICs0Nyw5IEBACiAgICAgICAgIHByaW50KCcgJy5qb2luKGZsYWdzKSkKIAogICAgIGVsaWYgb3B0IGluICgnLS1saWJzJywgJy0tbGRmbGFncycpOgotICAgICAgICBsaWJzID0gZ2V0dmFyKCdMSUJTJykuc3BsaXQoKSArIGdldHZhcignU1lTTElCUycpLnNwbGl0KCkKLSAgICAgICAgbGlicy5hcHBlbmQoJy1scHl0aG9uJyArIHB5dmVyICsgc3lzLmFiaWZsYWdzKQorICAgICAgICBsaWJzID0gWyctbHB5dGhvbicgKyBweXZlciArIHN5cy5hYmlmbGFnc10KKyAgICAgICAgbGlicyArPSBnZXR2YXIoJ0xJQlMnKS5zcGxpdCgpCisgICAgICAgIGxpYnMgKz0gZ2V0dmFyKCdTWVNMSUJTJykuc3BsaXQoKQogICAgICAgICAjIGFkZCB0aGUgcHJlZml4L2xpYi9weXRob25YLlkvY29uZmlnIGRpciwgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8KICAgICAgICAgIyBzaGFyZWQgbGlicmFyeSBpbiBwcmVmaXgvbGliLy4KICAgICAgICAgaWYgb3B0ID09ICctLWxkZmxhZ3MnOgpkaWZmIC0tZ2l0IGEvTWlzYy9weXRob24tY29uZmlnLnNoLmluIGIvTWlzYy9weXRob24tY29uZmlnLnNoLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYzY5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9NaXNjL3B5dGhvbi1jb25maWcuc2guaW4KQEAgLTAsMCArMSwxMTEgQEAKKyMhL2Jpbi9zaAorCisjIEtlZXAgdGhpcyBzY3JpcHQgaW4gc3luYyB3aXRoIHB5dGhvbi1jb25maWcuaW4KKworZXhpdF93aXRoX3VzYWdlICgpCit7CisgICAgZWNobyAiVXNhZ2U6ICQwIC0tcHJlZml4fC0tZXhlYy1wcmVmaXh8LS1pbmNsdWRlc3wtLWxpYnN8LS1jZmxhZ3N8LS1sZGZsYWdzfC0tZXh0ZW5zaW9uLXN1ZmZpeHwtLWhlbHB8LS1hYmlmbGFnc3wtLWNvbmZpZ2RpciIKKyAgICBleGl0ICQxCit9CisKK2lmIFsgIiQxIiA9ICIiIF0gOyB0aGVuCisgICAgZXhpdF93aXRoX3VzYWdlIDEKK2ZpCisKKyMgUmV0dXJucyB0aGUgYWN0dWFsIHByZWZpeCB3aGVyZSB0aGlzIHNjcmlwdCB3YXMgaW5zdGFsbGVkIHRvLgoraW5zdGFsbGVkX3ByZWZpeCAoKQoreworICAgIFJFU1VMVD0kKGRpcm5hbWUgJChjZCAkKGRpcm5hbWUgIiQxIikgJiYgcHdkIC1QKSkKKyAgICBpZiB3aGljaCByZWFkbGluayA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisgICAgICAgIGlmIHJlYWRsaW5rIC1mICIkUkVTVUxUIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgICBSRVNVTFQ9JChyZWFkbGluayAtZiAiJFJFU1VMVCIpCisgICAgICAgIGZpCisgICAgZmkKKyAgICBlY2hvICRSRVNVTFQKK30KKworcHJlZml4X2J1aWxkPSJAcHJlZml4QCIKK3ByZWZpeF9yZWFsPSQoaW5zdGFsbGVkX3ByZWZpeCAiJDAiKQorCisjIFVzZSBzZWQgdG8gZml4IHBhdGhzIGZyb20gdGhlaXIgYnVpbHQtdG8gbG9jYXRpb25zIHRvIHRoZWlyIGluc3RhbGxlZC10bworIyBsb2NhdGlvbnMuCitwcmVmaXg9JChlY2hvICIkcHJlZml4X2J1aWxkIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorZXhlY19wcmVmaXhfYnVpbGQ9IkBleGVjX3ByZWZpeEAiCitleGVjX3ByZWZpeD0kKGVjaG8gIiRleGVjX3ByZWZpeF9idWlsZCIgfCBzZWQgInMjJGV4ZWNfcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQoraW5jbHVkZWRpcj0kKGVjaG8gIkBpbmNsdWRlZGlyQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK2xpYmRpcj0kKGVjaG8gIkBsaWJkaXJAIiB8IHNlZCAicyMkcHJlZml4X2J1aWxkIyRwcmVmaXhfcmVhbCMiKQorQ0ZMQUdTPSQoZWNobyAiQENGTEFHU0AiIHwgc2VkICJzIyRwcmVmaXhfYnVpbGQjJHByZWZpeF9yZWFsIyIpCitWRVJTSU9OPSJAVkVSU0lPTkAiCitMSUJNPSJATElCTUAiCitMSUJDPSJATElCQ0AiCitTWVNMSUJTPSIkTElCTSAkTElCQyIKK0FCSUZMQUdTPSJAQUJJRkxBR1NAIgorTElCUz0iLWxweXRob24ke1ZFUlNJT059JHtBQklGTEFHU30gQExJQlNAICRTWVNMSUJTIgorQkFTRUNGTEFHUz0iQEJBU0VDRkxBR1NAIgorTERMSUJSQVJZPSJATERMSUJSQVJZQCIKK0xJTktGT1JTSEFSRUQ9IkBMSU5LRk9SU0hBUkVEQCIKK09QVD0iQE9QVEAiCitQWV9FTkFCTEVfU0hBUkVEPSJAUFlfRU5BQkxFX1NIQVJFREAiCitMRFZFUlNJT049IkBMRFZFUlNJT05AIgorTElCREVTVD0ke3ByZWZpeH0vbGliL3B5dGhvbiR7VkVSU0lPTn0KK0xJQlBMPSQoZWNobyAiQExJQlBMQCIgfCBzZWQgInMjJHByZWZpeF9idWlsZCMkcHJlZml4X3JlYWwjIikKK1NPPSJARVhUX1NVRkZJWEAiCitQWVRIT05GUkFNRVdPUks9IkBQWVRIT05GUkFNRVdPUktAIgorSU5DRElSPSItSSRpbmNsdWRlZGlyL3B5dGhvbiR7VkVSU0lPTn0ke0FCSUZMQUdTfSIKK1BMQVRJTkNESVI9Ii1JJGluY2x1ZGVkaXIvcHl0aG9uJHtWRVJTSU9OfSR7QUJJRkxBR1N9IgorCisjIFNjYW4gZm9yIC0taGVscCBvciB1bmtub3duIGFyZ3VtZW50LgorZm9yIEFSRyBpbiAkKgorZG8KKyAgICBjYXNlICRBUkcgaW4KKyAgICAgICAgLS1oZWxwKQorICAgICAgICAgICAgZXhpdF93aXRoX3VzYWdlIDAKKyAgICAgICAgOzsKKyAgICAgICAgLS1wcmVmaXh8LS1leGVjLXByZWZpeHwtLWluY2x1ZGVzfC0tbGlic3wtLWNmbGFnc3wtLWxkZmxhZ3N8LS1leHRlbnNpb24tc3VmZml4fC0tYWJpZmxhZ3N8LS1jb25maWdkaXIpCisgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICBleGl0X3dpdGhfdXNhZ2UgMQorICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworZm9yIEFSRyBpbiAiJEAiCitkbworICAgIGNhc2UgIiRBUkciIGluCisgICAgICAgIC0tcHJlZml4KQorICAgICAgICAgICAgZWNobyAiJHByZWZpeCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1leGVjLXByZWZpeCkKKyAgICAgICAgICAgIGVjaG8gIiRleGVjX3ByZWZpeCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1pbmNsdWRlcykKKyAgICAgICAgICAgIGVjaG8gIiRJTkNESVIgJFBMQVRJTkNESVIiCisgICAgICAgIDs7CisgICAgICAgIC0tY2ZsYWdzKQorICAgICAgICAgICAgZWNobyAiJElOQ0RJUiAkUExBVElOQ0RJUiAkQkFTRUNGTEFHUyAkQ0ZMQUdTICRPUFQiCisgICAgICAgIDs7CisgICAgICAgIC0tbGlicykKKyAgICAgICAgICAgIGVjaG8gIiRMSUJTIgorICAgICAgICA7OworICAgICAgICAtLWxkZmxhZ3MpCisgICAgICAgICAgICBMSU5LRk9SU0hBUkVEVVNFRD0KKyAgICAgICAgICAgIGlmIFsgLXogIiRQWVRIT05GUkFNRVdPUksiIF0gOyB0aGVuCisgICAgICAgICAgICAgICAgTElOS0ZPUlNIQVJFRFVTRUQ9JExJTktGT1JTSEFSRUQKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBMSUJQTFVTRUQ9CisgICAgICAgICAgICBpZiBbICIkUFlfRU5BQkxFX1NIQVJFRCIgPSAiMCIgXSA7IHRoZW4KKyAgICAgICAgICAgICAgICBMSUJQTFVTRUQ9Ii1MJExJQlBMIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gIiRMSUJQTFVTRUQgLUwkbGliZGlyICRMSUJTICRMSU5LRk9SU0hBUkVEVVNFRCIKKyAgICAgICAgOzsKKyAgICAgICAgLS1leHRlbnNpb24tc3VmZml4KQorICAgICAgICAgICAgZWNobyAiJFNPIgorICAgICAgICA7OworICAgICAgICAtLWFiaWZsYWdzKQorICAgICAgICAgICAgZWNobyAiJEFCSUZMQUdTIgorICAgICAgICA7OworICAgICAgICAtLWNvbmZpZ2RpcikKKyAgICAgICAgICAgIGVjaG8gIiRMSUJQTCIKKyAgICAgICAgOzsKK2VzYWMKK2RvbmUKZGlmZiAtLWdpdCBhL01pc2MvcHl0aG9uLXdpbmc1LndwciBiL01pc2MvcHl0aG9uLXdpbmc1LndwcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTFhZTYzCi0tLSAvZGV2L251bGwKKysrIGIvTWlzYy9weXRob24td2luZzUud3ByCkBAIC0wLDAgKzEsMTggQEAKKyMhd2luZworIyF2ZXJzaW9uPTUuMAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFdpbmcgSURFIHByb2plY3QgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworW3Byb2plY3QgYXR0cmlidXRlc10KK3Byb2ouZGlyZWN0b3J5LWxpc3QgPSBbeydkaXJsb2MnOiBsb2MoJy4uJyksCisgICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZXMnOiBbdScuaGcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUnTGliL3VuaXR0ZXN0L19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0xpYi91bml0dGVzdC90ZXN0L19fcHljYWNoZV9fJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1J0xpYi9fX3B5Y2FjaGVfXycsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdidWlsZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdSdEb2MvYnVpbGQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdmaWx0ZXInOiAnKicsCisgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9oaWRkZW4nOiBGYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdyZWN1cnNpdmUnOiBUcnVlLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3dhdGNoX2Zvcl9jaGFuZ2VzJzogVHJ1ZX1dCitwcm9qLmZpbGUtdHlwZSA9ICdzaGFyZWQnCmRpZmYgLS1naXQgYS9NaXNjL3B5dGhvbi5tYW4gYi9NaXNjL3B5dGhvbi5tYW4KaW5kZXggYmNiM2VjOC4uYWYyNmI3YyAxMDA2NDQKLS0tIGEvTWlzYy9weXRob24ubWFuCisrKyBiL01pc2MvcHl0aG9uLm1hbgpAQCAtMSw0ICsxLDQgQEAKLS5USCBQWVRIT04gIjEiICIkRGF0ZSQiCisuVEggUFlUSE9OICIxIgogCiAuXCIgVG8gdmlldyB0aGlzIGZpbGUgd2hpbGUgZWRpdGluZywgcnVuIGl0IHRocm91Z2ggZ3JvZmY6CiAuXCIgICBncm9mZiAtVGFzY2lpIC1tYW4gcHl0aG9uLm1hbiB8IGxlc3MKQEAgLTI2LDExICsyNiwxNCBAQAogLkIgXC1pCiBdCiBbCi0uQiBcLW0KLS5JIG1vZHVsZS1uYW1lCisuQiBcLUkKIF0KIC5icgogICAgICAgIFsKKy5CIFwtbQorLkkgbW9kdWxlLW5hbWUKK10KK1sKIC5CIFwtcQogXQogWwpAQCAtODQsOCArODcsNyBAQAogLlNIIERFU0NSSVBUSU9OCiBQeXRob24gaXMgYW4gaW50ZXJwcmV0ZWQsIGludGVyYWN0aXZlLCBvYmplY3Qtb3JpZW50ZWQgcHJvZ3JhbW1pbmcKIGxhbmd1YWdlIHRoYXQgY29tYmluZXMgcmVtYXJrYWJsZSBwb3dlciB3aXRoIHZlcnkgY2xlYXIgc3ludGF4LgotRm9yIGFuIGludHJvZHVjdGlvbiB0byBwcm9ncmFtbWluZyBpbiBQeXRob24geW91IGFyZSByZWZlcnJlZCB0byB0aGUKLVB5dGhvbiBUdXRvcmlhbC4KK0ZvciBhbiBpbnRyb2R1Y3Rpb24gdG8gcHJvZ3JhbW1pbmcgaW4gUHl0aG9uLCBzZWUgdGhlIFB5dGhvbiBUdXRvcmlhbC4KIFRoZSBQeXRob24gTGlicmFyeSBSZWZlcmVuY2UgZG9jdW1lbnRzIGJ1aWx0LWluIGFuZCBzdGFuZGFyZCB0eXBlcywKIGNvbnN0YW50cywgZnVuY3Rpb25zIGFuZCBtb2R1bGVzLgogRmluYWxseSwgdGhlIFB5dGhvbiBSZWZlcmVuY2UgTWFudWFsIGRlc2NyaWJlcyB0aGUgc3ludGF4IGFuZApAQCAtMTM5LDYgKzE0MSwxMyBAQAogdXNlZnVsIHRvIGluc3BlY3QgZ2xvYmFsIHZhcmlhYmxlcyBvciBhIHN0YWNrIHRyYWNlIHdoZW4gYSBzY3JpcHQKIHJhaXNlcyBhbiBleGNlcHRpb24uCiAuVFAKKy5CIFwtSQorUnVuIFB5dGhvbiBpbiBpc29sYXRlZCBtb2RlLiBUaGlzIGFsc28gaW1wbGllcyBcZkJcLUVcZlAgYW5kIFxmQlwtc1xmUC4gSW4KK2lzb2xhdGVkIG1vZGUgc3lzLnBhdGggY29udGFpbnMgbmVpdGhlciB0aGUgc2NyaXB04oCZcyBkaXJlY3Rvcnkgbm9yIHRoZSB1c2Vy4oCZcworc2l0ZS1wYWNrYWdlcyBkaXJlY3RvcnkuIEFsbCBQWVRIT04qIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaWdub3JlZCwgdG9vLgorRnVydGhlciByZXN0cmljdGlvbnMgbWF5IGJlIGltcG9zZWQgdG8gcHJldmVudCB0aGUgdXNlciBmcm9tIGluamVjdGluZworbWFsaWNpb3VzIGNvZGUuCisuVFAKIC5CSSAiXC1tICIgbW9kdWxlLW5hbWUKIFNlYXJjaGVzIAogLkkgc3lzLnBhdGggCkBAIC0zNzQsMTEgKzM4Myw2IEBACiBhbmQKIC5JIHN5cy5wczIKIGluIHRoaXMgZmlsZS4KLS5JUCBQWVRIT05ZMksKLVNldCB0aGlzIHRvIGEgbm9uLWVtcHR5IHN0cmluZyB0byBjYXVzZSB0aGUgXGZJdGltZVxmUCBtb2R1bGUgdG8KLXJlcXVpcmUgZGF0ZXMgc3BlY2lmaWVkIGFzIHN0cmluZ3MgdG8gaW5jbHVkZSA0LWRpZ2l0IHllYXJzLCBvdGhlcndpc2UKLTItZGlnaXQgeWVhcnMgYXJlIGNvbnZlcnRlZCBiYXNlZCBvbiBydWxlcyBkZXNjcmliZWQgaW4gdGhlIFxmSXRpbWVcZlAKLW1vZHVsZSBkb2N1bWVudGF0aW9uLgogLklQIFBZVEhPTk9QVElNSVpFCiBJZiB0aGlzIGlzIHNldCB0byBhIG5vbi1lbXB0eSBzdHJpbmcgaXQgaXMgZXF1aXZhbGVudCB0byBzcGVjaWZ5aW5nCiB0aGUgXGZCXC1PXGZQIG9wdGlvbi4gSWYgc2V0IHRvIGFuIGludGVnZXIsIGl0IGlzIGVxdWl2YWxlbnQgdG8KQEAgLTQzMCwxNyArNDM0LDE3IEBACiBUaGUgaW50ZWdlciBtdXN0IGJlIGEgZGVjaW1hbCBudW1iZXIgaW4gdGhlIHJhbmdlIFswLDQyOTQ5NjcyOTVdLiAgU3BlY2lmeWluZwogdGhlIHZhbHVlIDAgd2lsbCBkaXNhYmxlIGhhc2ggcmFuZG9taXphdGlvbi4KIC5TSCBBVVRIT1IKLVRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjogaHR0cDovL3d3dy5weXRob24ub3JnL3BzZgorVGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOiBodHRwczovL3d3dy5weXRob24ub3JnL3BzZi8KIC5TSCBJTlRFUk5FVCBSRVNPVVJDRVMKLU1haW4gd2Vic2l0ZTogIGh0dHA6Ly93d3cucHl0aG9uLm9yZy8KK01haW4gd2Vic2l0ZTogIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvCiAuYnIKLURvY3VtZW50YXRpb246ICBodHRwOi8vZG9jcy5weXRob24ub3JnL3B5M2svCitEb2N1bWVudGF0aW9uOiAgaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvCiAuYnIKLURldmVsb3BlciByZXNvdXJjZXM6ICBodHRwOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlLworRGV2ZWxvcGVyIHJlc291cmNlczogIGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldmd1aWRlLwogLmJyCi1Eb3dubG9hZHM6ICBodHRwOi8vcHl0aG9uLm9yZy9kb3dubG9hZC8KK0Rvd25sb2FkczogIGh0dHBzOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWRzLwogLmJyCi1Nb2R1bGUgcmVwb3NpdG9yeTogIGh0dHA6Ly9weXBpLnB5dGhvbi5vcmcvCitNb2R1bGUgcmVwb3NpdG9yeTogIGh0dHBzOi8vcHlwaS5weXRob24ub3JnLwogLmJyCiBOZXdzZ3JvdXBzOiAgY29tcC5sYW5nLnB5dGhvbiwgY29tcC5sYW5nLnB5dGhvbi5hbm5vdW5jZQogLlNIIExJQ0VOU0lORwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9TZXR1cC5kaXN0IGIvTW9kdWxlcy9TZXR1cC5kaXN0CmluZGV4IGY0NWRlNWMuLmI2MGI1OTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvU2V0dXAuZGlzdAorKysgYi9Nb2R1bGVzL1NldHVwLmRpc3QKQEAgLTkxLDcgKzkxLDcgQEAKIFRFU1RQQVRIPQogCiAjIFBhdGggY29tcG9uZW50cyBmb3IgbWFjaGluZS0gb3Igc3lzdGVtLWRlcGVuZGVudCBtb2R1bGVzIGFuZCBzaGFyZWQgbGlicmFyaWVzCi1NQUNIREVQUEFUSD06cGxhdC0kKE1BQ0hERVApCitNQUNIREVQUEFUSD06JChQTEFURElSKQogRVhUUkFNQUNIREVQUEFUSD0KIAogQ09SRVBZVEhPTlBBVEg9JChERVNUUEFUSCkkKFNJVEVQQVRIKSQoVEVTVFBBVEgpJChNQUNIREVQUEFUSCkkKEVYVFJBTUFDSERFUFBBVEgpCkBAIC0xMDIsNyArMTAyLDcgQEAKICMgdmFyaW91cyByZWFzb25zOyB0aGVyZWZvcmUgdGhleSBhcmUgbGlzdGVkIGhlcmUgaW5zdGVhZCBvZiBpbiB0aGUKICMgbm9ybWFsIG9yZGVyLgogCi0jIFRoaXMgb25seSBjb250YWlucyB0aGUgbWluaW1hbCBzZXQgb2YgbW9kdWxlcyByZXF1aXJlZCB0byBydW4gdGhlIAorIyBUaGlzIG9ubHkgY29udGFpbnMgdGhlIG1pbmltYWwgc2V0IG9mIG1vZHVsZXMgcmVxdWlyZWQgdG8gcnVuIHRoZQogIyBzZXR1cC5weSBzY3JpcHQgaW4gdGhlIHJvb3Qgb2YgdGhlIFB5dGhvbiBzb3VyY2UgdHJlZS4KIAogcG9zaXggcG9zaXhtb2R1bGUuYwkJIyBwb3NpeCAoVU5JWCkgc3lzdGVtIGNhbGxzCkBAIC0xMTMsOSArMTEzLDExIEBACiBfY29kZWNzIF9jb2RlY3Ntb2R1bGUuYwkJIyBhY2Nlc3MgdG8gdGhlIGJ1aWx0aW4gY29kZWNzIGFuZCBjb2RlYyByZWdpc3RyeQogX3dlYWtyZWYgX3dlYWtyZWYuYwkJIyB3ZWFrIHJlZmVyZW5jZXMKIF9mdW5jdG9vbHMgX2Z1bmN0b29sc21vZHVsZS5jICAgIyBUb29scyBmb3Igd29ya2luZyB3aXRoIGZ1bmN0aW9ucyBhbmQgY2FsbGFibGUgb2JqZWN0cwotb3BlcmF0b3Igb3BlcmF0b3IuYwkgICAgICAgICMgb3BlcmF0b3IuYWRkKCkgYW5kIHNpbWlsYXIgZ29vZGllcworX29wZXJhdG9yIF9vcGVyYXRvci5jCSAgICAgICAgIyBvcGVyYXRvci5hZGQoKSBhbmQgc2ltaWxhciBnb29kaWVzCiBfY29sbGVjdGlvbnMgX2NvbGxlY3Rpb25zbW9kdWxlLmMgIyBDb250YWluZXIgdHlwZXMKLWl0ZXJ0b29scyBpdGVydG9vbHNtb2R1bGUuYyAgICAjIEZ1bmN0aW9ucyBjcmVhdGluZyBpdGVyYXRvcnMgZm9yIGVmZmljaWVudCBsb29waW5nIAoraXRlcnRvb2xzIGl0ZXJ0b29sc21vZHVsZS5jICAgICMgRnVuY3Rpb25zIGNyZWF0aW5nIGl0ZXJhdG9ycyBmb3IgZWZmaWNpZW50IGxvb3BpbmcKK2F0ZXhpdCBhdGV4aXRtb2R1bGUuYyAgICAgICMgUmVnaXN0ZXIgZnVuY3Rpb25zIHRvIGJlIHJ1biBhdCBpbnRlcnByZXRlci1zaHV0ZG93bgorX3N0YXQgX3N0YXQuYwkJCSMgc3RhdC5oIGludGVyZmFjZQogCiAjIGFjY2VzcyB0byBJU08gQyBsb2NhbGUgc3VwcG9ydAogX2xvY2FsZSBfbG9jYWxlbW9kdWxlLmMgICMgLWxpbnRsCkBAIC0xMzAsMTIgKzEzMiwxNSBAQAogIyBmYXVsdGhhbmRsZXIgbW9kdWxlCiBmYXVsdGhhbmRsZXIgZmF1bHRoYW5kbGVyLmMKIAorIyBkZWJ1ZyB0b29sIHRvIHRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbgorX3RyYWNlbWFsbG9jIF90cmFjZW1hbGxvYy5jIGhhc2h0YWJsZS5jCisKICMgVGhlIHJlc3Qgb2YgdGhlIG1vZHVsZXMgbGlzdGVkIGluIHRoaXMgZmlsZSBhcmUgYWxsIGNvbW1lbnRlZCBvdXQgYnkKICMgZGVmYXVsdC4gIFVzdWFsbHkgdGhleSBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGJ1aWx0IGFzIGR5bmFtaWNhbGx5CiAjIGxvYWRlZCBtb2R1bGVzIGJ5IHRoZSBuZXcgc2V0dXAucHkgc2NyaXB0IGFkZGVkIGluIFB5dGhvbiAyLjEuICBJZgotIyB5b3UncmUgb24gYSBwbGF0Zm9ybSB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBkeW5hbWljIGxvYWRpbmcsIHdhbnQgdG8gCi0jIGNvbXBpbGUgbW9kdWxlcyBzdGF0aWNhbGx5IGludG8gdGhlIFB5dGhvbiBiaW5hcnksIG9yIG5lZWQgdG8gCi0jIHNwZWNpZnkgc29tZSBvZGQgc2V0IG9mIGNvbXBpbGVyIHN3aXRjaGVzLCB5b3UgY2FuIHVuY29tbWVudCB0aGUgCisjIHlvdSdyZSBvbiBhIHBsYXRmb3JtIHRoYXQgZG9lc24ndCBzdXBwb3J0IGR5bmFtaWMgbG9hZGluZywgd2FudCB0bworIyBjb21waWxlIG1vZHVsZXMgc3RhdGljYWxseSBpbnRvIHRoZSBQeXRob24gYmluYXJ5LCBvciBuZWVkIHRvCisjIHNwZWNpZnkgc29tZSBvZGQgc2V0IG9mIGNvbXBpbGVyIHN3aXRjaGVzLCB5b3UgY2FuIHVuY29tbWVudCB0aGUKICMgYXBwcm9wcmlhdGUgbGluZXMgYmVsb3cuCiAKICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTcwLDcgKzE3NSw2IEBACiAjX3dlYWtyZWYgX3dlYWtyZWYuYwkjIGJhc2ljIHdlYWsgcmVmZXJlbmNlIHN1cHBvcnQKICNfdGVzdGNhcGkgX3Rlc3RjYXBpbW9kdWxlLmMgICAgIyBQeXRob24gQyBBUEkgdGVzdCBtb2R1bGUKICNfcmFuZG9tIF9yYW5kb21tb2R1bGUuYwkjIFJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yCi0jYXRleGl0IGF0ZXhpdG1vZHVsZS5jICAgICAgIyBSZWdpc3RlciBmdW5jdGlvbnMgdG8gYmUgcnVuIGF0IGludGVycHJldGVyLXNodXRkb3duCiAjX2VsZW1lbnR0cmVlIC1JJChzcmNkaXIpL01vZHVsZXMvZXhwYXQgLURIQVZFX0VYUEFUX0NPTkZJR19IIC1EVVNFX1BZRVhQQVRfQ0FQSSBfZWxlbWVudHRyZWUuYwkjIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCiAjX3BpY2tsZSBfcGlja2xlLmMJIyBwaWNrbGUgYWNjZWxlcmF0b3IKICNfZGF0ZXRpbWUgX2RhdGV0aW1lbW9kdWxlLmMJIyBkYXRldGltZSBhY2NlbGVyYXRvcgpAQCAtMTg1LDcgKzE4OSw3IEBACiAjIHN1cHBvcnRlZC4uLikKIAogI2ZjbnRsIGZjbnRsbW9kdWxlLmMJIyBmY250bCgyKSBhbmQgaW9jdGwoMikKLSNzcHdkIHNwd2Rtb2R1bGUuYwkJIyBzcHdkKDMpIAorI3Nwd2Qgc3B3ZG1vZHVsZS5jCQkjIHNwd2QoMykKICNncnAgZ3JwbW9kdWxlLmMJCSMgZ3JwKDMpCiAjc2VsZWN0IHNlbGVjdG1vZHVsZS5jCSMgc2VsZWN0KDIpOyBub3Qgb24gYW5jaWVudCBTeXN0ZW0gVgogCkBAIC0zMDEsNyArMzA1LDcgQEAKIAogI19jdXJzZXMgX2N1cnNlc21vZHVsZS5jIC1sY3Vyc2VzIC1sdGVybWNhcAogIyBXcmFwcGVyIGZvciB0aGUgcGFuZWwgbGlicmFyeSB0aGF0J3MgcGFydCBvZiBuY3Vyc2VzIGFuZCBTWVNWIGN1cnNlcy4KLSNfY3Vyc2VzX3BhbmVsIF9jdXJzZXNfcGFuZWwuYyAtbHBhbmVsIC1sbmN1cnNlcyAKKyNfY3Vyc2VzX3BhbmVsIF9jdXJzZXNfcGFuZWwuYyAtbHBhbmVsIC1sbmN1cnNlcwogCiAKICMgTW9kdWxlcyB0aGF0IHByb3ZpZGUgcGVyc2lzdGVudCBkaWN0aW9uYXJ5LWxpa2Ugc2VtYW50aWNzLiAgWW91IHdpbGwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Jpc2VjdG1vZHVsZS5jIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKaW5kZXggZmFjYThjZi4uMDJiNTVkMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fYmlzZWN0bW9kdWxlLmMKQEAgLTYsNiArNiw4IEBACiAjZGVmaW5lIFBZX1NTSVpFX1RfQ0xFQU4KICNpbmNsdWRlICJQeXRob24uaCIKIAorX1B5X0lERU5USUZJRVIoaW5zZXJ0KTsKKwogc3RhdGljIFB5X3NzaXplX3QKIGludGVybmFsX2Jpc2VjdF9yaWdodChQeU9iamVjdCAqbGlzdCwgUHlPYmplY3QgKml0ZW0sIFB5X3NzaXplX3QgbG8sIFB5X3NzaXplX3QgaGkpCiB7CkBAIC05MCw4ICs5Miw2IEBACiAgICAgICAgIGlmIChQeUxpc3RfSW5zZXJ0KGxpc3QsIGluZGV4LCBpdGVtKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihpbnNlcnQpOwotCiAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQobGlzdCwgJlB5SWRfaW5zZXJ0LCAibk8iLCBpbmRleCwgaXRlbSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTk1LDcgKzE5NSw2IEBACiAgICAgICAgIGlmIChQeUxpc3RfSW5zZXJ0KGxpc3QsIGluZGV4LCBpdGVtKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihpbnNlcnQpOwogICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGxpc3QsICZQeUlkX2luc2VydCwgIm5PIiwgaW5kZXgsIGl0ZW0pOwogICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2J6Mm1vZHVsZS5jIGIvTW9kdWxlcy9fYnoybW9kdWxlLmMKaW5kZXggM2Y3YTZjZi4uZTY1MmY0ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fYnoybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fYnoybW9kdWxlLmMKQEAgLTM2LDggKzM2LDYgQEAKICNkZWZpbmUgUkVMRUFTRV9MT0NLKG9iaikKICNlbmRpZgogCi0jZGVmaW5lIE1JTihYLCBZKSAoKChYKSA8IChZKSkgPyAoWCkgOiAoWSkpCi0KIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTU4LDYgKzU2LDggQEAKICNlbmRpZgogfSBCWjJEZWNvbXByZXNzb3I7CiAKK3N0YXRpYyBQeVR5cGVPYmplY3QgQloyQ29tcHJlc3Nvcl9UeXBlOworc3RhdGljIFB5VHlwZU9iamVjdCBCWjJEZWNvbXByZXNzb3JfVHlwZTsKIAogLyogSGVscGVyIGZ1bmN0aW9ucy4gKi8KIApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgYy0+YnpzLm5leHRfaW4gPSBkYXRhOwogICAgIGMtPmJ6cy5hdmFpbF9pbiA9IDA7CiAgICAgYy0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KTsKLSAgICBjLT5ienMuYXZhaWxfb3V0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgIGMtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOwogICAgIGZvciAoOzspIHsKICAgICAgICAgY2hhciAqdGhpc19vdXQ7CiAgICAgICAgIGludCBiemVycm9yOwpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCiAgICAgICAgICAgIERvIGNvbXByZXNzaW9uIGluIGNodW5rcyBvZiBubyBtb3JlIHRoYW4gVUlOVF9NQVggYnl0ZXMgZWFjaC4gKi8KICAgICAgICAgaWYgKGMtPmJ6cy5hdmFpbF9pbiA9PSAwICYmIGxlbiA+IDApIHsKLSAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9IE1JTihsZW4sIFVJTlRfTUFYKTsKKyAgICAgICAgICAgIGMtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgbGVuIC09IGMtPmJ6cy5hdmFpbF9pbjsKICAgICAgICAgfQogCkBAIC0xNzMsNyArMTczLDcgQEAKICAgICAgICAgICAgICAgICBjLT5ienMubmV4dF9vdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHQpICsgZGF0YV9zaXplOwogICAgICAgICAgICAgICAgIGJ1ZmZlcl9sZWZ0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIC0gZGF0YV9zaXplOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9IE1JTihidWZmZXJfbGVmdCwgVUlOVF9NQVgpOworICAgICAgICAgICAgYy0+YnpzLmF2YWlsX291dCA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CiAgICAgICAgIH0KIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCkBAIC0xOTgsNDQgKzE5OCw1OCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoQloyQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3MoZGF0YSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LiBSZXR1cm5zIGEgY2h1bmsgb2ZcbiIKLSJjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuXG4iCi0iXG4iCi0iV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBwcm92aWRpbmcgZGF0YSB0byB0aGUgY29tcHJlc3NvciwgY2FsbCB0aGVcbiIKLSJmbHVzaCgpIG1ldGhvZCB0byBmaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIF9iejIKK2NsYXNzIF9iejIuQloyQ29tcHJlc3NvciAiQloyQ29tcHJlc3NvciAqIiAiJkJaMkNvbXByZXNzb3JfVHlwZSIKK2NsYXNzIF9iejIuQloyRGVjb21wcmVzc29yICJCWjJEZWNvbXByZXNzb3IgKiIgIiZCWjJEZWNvbXByZXNzb3JfVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWUzYjEzOTkyNGY1ZTE4Y2NdKi8KKworI2luY2x1ZGUgImNsaW5pYy9fYnoybW9kdWxlLmMuaCIKKworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJDb21wcmVzc29yLmNvbXByZXNzCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK1Byb3ZpZGUgZGF0YSB0byB0aGUgY29tcHJlc3NvciBvYmplY3QuCisKK1JldHVybnMgYSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuCisKK1doZW4geW91IGhhdmUgZmluaXNoZWQgcHJvdmlkaW5nIGRhdGEgdG8gdGhlIGNvbXByZXNzb3IsIGNhbGwgdGhlCitmbHVzaCgpIG1ldGhvZCB0byBmaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1CWjJDb21wcmVzc29yX2NvbXByZXNzKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU5MzY1NDI2ZTk0MWZiY2MgaW5wdXQ9ODVjOTYzMjE4MDcwZmM0Y10qLwogewotICAgIFB5X2J1ZmZlciBidWZmZXI7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5mbHVzaGVkKQogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkNvbXByZXNzb3IgaGFzIGJlZW4gZmx1c2hlZCIpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgYnVmZmVyLmJ1ZiwgYnVmZmVyLmxlbiwgQlpfUlVOKTsKKyAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgZGF0YS0+YnVmLCBkYXRhLT5sZW4sIEJaX1JVTik7CiAgICAgUkVMRUFTRV9MT0NLKHNlbGYpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotUHlEb2NfU1RSVkFSKEJaMkNvbXByZXNzb3JfZmx1c2hfX2RvY19fLAotImZsdXNoKCkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJGaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuIFJldHVybnMgdGhlIGNvbXByZXNzZWQgZGF0YSBsZWZ0XG4iCi0iaW4gaW50ZXJuYWwgYnVmZmVycy5cbiIKLSJcbiIKLSJUaGUgY29tcHJlc3NvciBvYmplY3QgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJDb21wcmVzc29yLmZsdXNoCisKK0ZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KKworUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnQgaW4gaW50ZXJuYWwgYnVmZmVycy4KKworVGhlIGNvbXByZXNzb3Igb2JqZWN0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1CWjJDb21wcmVzc29yX2ZsdXNoKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2hfaW1wbChCWjJDb21wcmVzc29yICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNlZjAzZmMxYjA5MmE3MDEgaW5wdXQ9ZDY0NDA1ZDNjNmY3NjY5MV0qLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCkBAIC0yNTgsMTQgKzI3Miw0MiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50Ci1CWjJDb21wcmVzc29yX2luaXQoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitzdGF0aWMgdm9pZCoKK0JaMl9NYWxsb2Modm9pZCogY3R4LCBpbnQgaXRlbXMsIGludCBzaXplKQogewotICAgIGludCBjb21wcmVzc2xldmVsID0gOTsKKyAgICBpZiAoaXRlbXMgPCAwIHx8IHNpemUgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoKHNpemVfdClpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyAoc2l6ZV90KXNpemUpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIC8qIFB5TWVtX01hbGxvYygpIGNhbm5vdCBiZSB1c2VkOiBjb21wcmVzcygpIGFuZCBkZWNvbXByZXNzKCkKKyAgICAgICByZWxlYXNlIHRoZSBHSUwgKi8KKyAgICByZXR1cm4gUHlNZW1fUmF3TWFsbG9jKGl0ZW1zICogc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitCWjJfRnJlZSh2b2lkKiBjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19iejIuQloyQ29tcHJlc3Nvci5fX2luaXRfXworCisgICAgY29tcHJlc3NsZXZlbDogaW50ID0gOQorICAgICAgICBDb21wcmVzc2lvbiBsZXZlbCwgYXMgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCA5LgorICAgIC8KKworQ3JlYXRlIGEgY29tcHJlc3NvciBvYmplY3QgZm9yIGNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS4KKworRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIGludAorX2J6Ml9CWjJDb21wcmVzc29yX19faW5pdF9fX2ltcGwoQloyQ29tcHJlc3NvciAqc2VsZiwgaW50IGNvbXByZXNzbGV2ZWwpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzRlNmFkZmQwMjk2MzgyNyBpbnB1dD00ZTFmZjdiODM5NGI2ZTlhXSovCit7CiAgICAgaW50IGJ6ZXJyb3I7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOkJaMkNvbXByZXNzb3IiLCAmY29tcHJlc3NsZXZlbCkpCi0gICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoISgxIDw9IGNvbXByZXNzbGV2ZWwgJiYgY29tcHJlc3NsZXZlbCA8PSA5KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjb21wcmVzc2xldmVsIG11c3QgYmUgYmV0d2VlbiAxIGFuZCA5Iik7CkBAIC0yODAsNiArMzIyLDkgQEAKICAgICB9CiAjZW5kaWYKIAorICAgIHNlbGYtPmJ6cy5vcGFxdWUgPSBOVUxMOworICAgIHNlbGYtPmJ6cy5iemFsbG9jID0gQloyX01hbGxvYzsKKyAgICBzZWxmLT5ienMuYnpmcmVlID0gQloyX0ZyZWU7CiAgICAgYnplcnJvciA9IEJaMl9iekNvbXByZXNzSW5pdCgmc2VsZi0+YnpzLCBjb21wcmVzc2xldmVsLCAwLCAwKTsKICAgICBpZiAoY2F0Y2hfYnoyX2Vycm9yKGJ6ZXJyb3IpKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzA2LDIyICszNTEsMTIgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIEJaMkNvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiY29tcHJlc3MiLCAgICAgKFB5Q0Z1bmN0aW9uKUJaMkNvbXByZXNzb3JfY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgQloyQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX199LAotICAgIHsiZmx1c2giLCAgICAgICAgKFB5Q0Z1bmN0aW9uKUJaMkNvbXByZXNzb3JfZmx1c2gsICAgIE1FVEhfTk9BUkdTLAotICAgICBCWjJDb21wcmVzc29yX2ZsdXNoX19kb2NfX30sCisgICAgX0JaMl9CWjJDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRgorICAgIF9CWjJfQloyQ09NUFJFU1NPUl9GTFVTSF9NRVRIT0RERUYKICAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilCWjJDb21wcmVzc29yX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCiAgICAge05VTEx9CiB9OwogCi1QeURvY19TVFJWQVIoQloyQ29tcHJlc3Nvcl9fZG9jX18sCi0iQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsPTkpXG4iCi0iXG4iCi0iQ3JlYXRlIGEgY29tcHJlc3NvciBvYmplY3QgZm9yIGNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKLSJcbiIKLSJjb21wcmVzc2xldmVsLCBpZiBnaXZlbiwgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIDEgYW5kIDkuXG4iCi0iXG4iCi0iRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC5cbiIpOwogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IEJaMkNvbXByZXNzb3JfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKQEAgLTM0NCw3ICszNzksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KLSAgICBCWjJDb21wcmVzc29yX19kb2NfXywgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X19fX2RvY19fLCAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCkBAIC0zNTksNyArMzk0LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9nZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0b2Zmc2V0ICovCi0gICAgKGluaXRwcm9jKUJaMkNvbXByZXNzb3JfaW5pdCwgICAgICAgLyogdHBfaW5pdCAqLworICAgIF9iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfXywgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKQEAgLTM3OSwxMCArNDE0LDEwIEBACiAgICAgZC0+YnpzLm5leHRfaW4gPSBkYXRhOwogICAgIC8qIE9uIGEgNjQtYml0IHN5c3RlbSwgbGVuIG1pZ2h0IG5vdCBmaXQgaW4gYXZhaWxfaW4gKGFuIHVuc2lnbmVkIGludCkuCiAgICAgICAgRG8gZGVjb21wcmVzc2lvbiBpbiBjaHVua3Mgb2Ygbm8gbW9yZSB0aGFuIFVJTlRfTUFYIGJ5dGVzIGVhY2guICovCi0gICAgZC0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgIGQtPmJ6cy5hdmFpbF9pbiA9ICh1bnNpZ25lZCBpbnQpUHlfTUlOKGxlbiwgVUlOVF9NQVgpOwogICAgIGxlbiAtPSBkLT5ienMuYXZhaWxfaW47CiAgICAgZC0+YnpzLm5leHRfb3V0ID0gUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KTsKLSAgICBkLT5ienMuYXZhaWxfb3V0ID0gUHlCeXRlc19HRVRfU0laRShyZXN1bHQpOworICAgIGQtPmJ6cy5hdmFpbF9vdXQgPSBTTUFMTENIVU5LOwogICAgIGZvciAoOzspIHsKICAgICAgICAgY2hhciAqdGhpc19vdXQ7CiAgICAgICAgIGludCBiemVycm9yOwpAQCAtNDA4LDcgKzQ0Myw3IEBACiAgICAgICAgIGlmIChkLT5ienMuYXZhaWxfaW4gPT0gMCkgewogICAgICAgICAgICAgaWYgKGxlbiA9PSAwKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZC0+YnpzLmF2YWlsX2luID0gTUlOKGxlbiwgVUlOVF9NQVgpOworICAgICAgICAgICAgZC0+YnpzLmF2YWlsX2luID0gKHVuc2lnbmVkIGludClQeV9NSU4obGVuLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBsZW4gLT0gZC0+YnpzLmF2YWlsX2luOwogICAgICAgICB9CiAgICAgICAgIGlmIChkLT5ienMuYXZhaWxfb3V0ID09IDApIHsKQEAgLTQxOSw3ICs0NTQsNyBAQAogICAgICAgICAgICAgICAgIGQtPmJ6cy5uZXh0X291dCA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBkYXRhX3NpemU7CiAgICAgICAgICAgICAgICAgYnVmZmVyX2xlZnQgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlc3VsdCkgLSBkYXRhX3NpemU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBkLT5ienMuYXZhaWxfb3V0ID0gTUlOKGJ1ZmZlcl9sZWZ0LCBVSU5UX01BWCk7CisgICAgICAgICAgICBkLT5ienMuYXZhaWxfb3V0ID0gKHVuc2lnbmVkIGludClQeV9NSU4oYnVmZmVyX2xlZnQsIFVJTlRfTUFYKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZGF0YV9zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSkKQEAgLTQzMiwzMiArNDY3LDMzIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihCWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcyhkYXRhKSAtPiBieXRlc1xuIgotIlxuIgotIlByb3ZpZGUgZGF0YSB0byB0aGUgZGVjb21wcmVzc29yIG9iamVjdC4gUmV0dXJucyBhIGNodW5rIG9mXG4iCi0iZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuXG4iCi0iXG4iCi0iQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZFxuIgotInJhaXNlcyBhbiBFT0ZFcnJvci4gQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtXG4iCi0iaXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIHVudXNlZF9kYXRhIGF0dHJpYnV0ZS5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2J6Mi5CWjJEZWNvbXByZXNzb3IuZGVjb21wcmVzcworCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuCisKK1JldHVybnMgYSBjaHVuayBvZiBkZWNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS4KKworQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZAorcmFpc2VzIGFuIEVPRkVycm9yLiAgQW55IGRhdGEgZm91bmQgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtCitpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3MoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19iejJfQloyRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChCWjJEZWNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wODZlNGI5OWU2MGNiM2Y2IGlucHV0PTYxNmMyYTZkYjUyNjk5NjFdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpkZWNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5lb2YpCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwgIkVuZCBvZiBzdHJlYW0gYWxyZWFkeSByZWFjaGVkIik7CiAgICAgZWxzZQotICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzKHNlbGYsIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4pOworICAgICAgICByZXN1bHQgPSBkZWNvbXByZXNzKHNlbGYsIGRhdGEtPmJ1ZiwgZGF0YS0+bGVuKTsKICAgICBSRUxFQVNFX0xPQ0soc2VsZik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NjksMTQgKzUwNSwyMCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfYnoyLkJaMkRlY29tcHJlc3Nvci5fX2luaXRfXworCitDcmVhdGUgYSBkZWNvbXByZXNzb3Igb2JqZWN0IGZvciBkZWNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS4KKworRm9yIG9uZS1zaG90IGRlY29tcHJlc3Npb24sIHVzZSB0aGUgZGVjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBpbnQKLUJaMkRlY29tcHJlc3Nvcl9pbml0KEJaMkRlY29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKEJaMkRlY29tcHJlc3NvciAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNGQyYjliYjg2NmFiOGYxIGlucHV0PTk1ZjY1MDBkY2RhNjAwODhdKi8KIHsKICAgICBpbnQgYnplcnJvcjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiOkJaMkRlY29tcHJlc3NvciIpKQotICAgICAgICByZXR1cm4gLTE7Ci0KICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHNlbGYtPmxvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CiAgICAgaWYgKHNlbGYtPmxvY2sgPT0gTlVMTCkgewpAQCAtNTE3LDggKzU1OSw3IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBCWjJEZWNvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilCWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBCWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19fZG9jX199LAorICAgIF9CWjJfQloyREVDT01QUkVTU09SX0RFQ09NUFJFU1NfTUVUSE9EREVGCiAgICAgeyJfX2dldHN0YXRlX18iLCAoUHlDRnVuY3Rpb24pQloyRGVjb21wcmVzc29yX2dldHN0YXRlLCBNRVRIX05PQVJHU30sCiAgICAge05VTEx9CiB9OwpAQCAtNTM3LDEzICs1NzgsNiBAQAogICAgIHtOVUxMfQogfTsKIAotUHlEb2NfU1RSVkFSKEJaMkRlY29tcHJlc3Nvcl9fZG9jX18sCi0iQloyRGVjb21wcmVzc29yKClcbiIKLSJcbiIKLSJDcmVhdGUgYSBkZWNvbXByZXNzb3Igb2JqZWN0IGZvciBkZWNvbXByZXNzaW5nIGRhdGEgaW5jcmVtZW50YWxseS5cbiIKLSJcbiIKLSJGb3Igb25lLXNob3QgZGVjb21wcmVzc2lvbiwgdXNlIHRoZSBkZWNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC5cbiIpOwotCiBzdGF0aWMgUHlUeXBlT2JqZWN0IEJaMkRlY29tcHJlc3Nvcl9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfYnoyLkJaMkRlY29tcHJlc3NvciIsICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KQEAgLTU2NSw3ICs1OTksNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfYnVmZmVyICovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxULCAgICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KLSAgICBCWjJEZWNvbXByZXNzb3JfX2RvY19fLCAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBfYnoyX0JaMkRlY29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KQEAgLTU4MCw3ICs2MTQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX3NldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3RvZmZzZXQgKi8KLSAgICAoaW5pdHByb2MpQloyRGVjb21wcmVzc29yX2luaXQsICAgICAvKiB0cF9pbml0ICovCisgICAgX2J6Ml9CWjJEZWNvbXByZXNzb3JfX19pbml0X18sICAgICAgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwppbmRleCA0MDAzN2IxLi41MmYzNDc5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2RlY3Ntb2R1bGUuYwpAQCAtNDIsMTUgKzQyLDIxIEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfY29kZWNzCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1lMTM5MGUzZGEzY2I5ZGViXSovCisKKwogLyogLS0tIFJlZ2lzdHJ5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIFB5RG9jX1NUUlZBUihyZWdpc3Rlcl9fZG9jX18sCiAicmVnaXN0ZXIoc2VhcmNoX2Z1bmN0aW9uKVxuXAogXG5cCiBSZWdpc3RlciBhIGNvZGVjIHNlYXJjaCBmdW5jdGlvbi4gU2VhcmNoIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gdGFrZVxuXAotb25lIGFyZ3VtZW50LCB0aGUgZW5jb2RpbmcgbmFtZSBpbiBhbGwgbG93ZXIgY2FzZSBsZXR0ZXJzLCBhbmQgcmV0dXJuXG5cCi1hIHR1cGxlIG9mIGZ1bmN0aW9ucyAoZW5jb2RlciwgZGVjb2Rlciwgc3RyZWFtX3JlYWRlciwgc3RyZWFtX3dyaXRlcilcblwKLShvciBhIENvZGVjSW5mbyBvYmplY3QpLiIpOworb25lIGFyZ3VtZW50LCB0aGUgZW5jb2RpbmcgbmFtZSBpbiBhbGwgbG93ZXIgY2FzZSBsZXR0ZXJzLCBhbmQgZWl0aGVyXG5cCityZXR1cm4gTm9uZSwgb3IgYSB0dXBsZSBvZiBmdW5jdGlvbnMgKGVuY29kZXIsIGRlY29kZXIsIHN0cmVhbV9yZWFkZXIsXG5cCitzdHJlYW1fd3JpdGVyKSAob3IgYSBDb2RlY0luZm8gb2JqZWN0KS4iKTsKIAogc3RhdGljCiBQeU9iamVjdCAqY29kZWNfcmVnaXN0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZWFyY2hfZnVuY3Rpb24pCkBAIC0xMzQsNiArMTQwLDUzIEBACiAKIC8qIC0tLSBIZWxwZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCisvKltjbGluaWMgaW5wdXRdCitfY29kZWNzLl9mb3JnZXRfY29kZWMKKworICAgIGVuY29kaW5nOiBzdHIKKyAgICAvCisKK1B1cmdlIHRoZSBuYW1lZCBjb2RlYyBmcm9tIHRoZSBpbnRlcm5hbCBjb2RlYyBsb29rdXAgY2FjaGUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9jb2RlY3NfX2ZvcmdldF9jb2RlY19fZG9jX18sCisiX2ZvcmdldF9jb2RlYygkbW9kdWxlLCBlbmNvZGluZywgLylcbiIKKyItLVxuIgorIlxuIgorIlB1cmdlIHRoZSBuYW1lZCBjb2RlYyBmcm9tIHRoZSBpbnRlcm5hbCBjb2RlYyBsb29rdXAgY2FjaGUiKTsKKworI2RlZmluZSBfQ09ERUNTX19GT1JHRVRfQ09ERUNfTUVUSE9EREVGICAgIFwKKyAgICB7Il9mb3JnZXRfY29kZWMiLCAoUHlDRnVuY3Rpb24pX2NvZGVjc19fZm9yZ2V0X2NvZGVjLCBNRVRIX1ZBUkFSR1MsIF9jb2RlY3NfX2ZvcmdldF9jb2RlY19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19fZm9yZ2V0X2NvZGVjX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqZW5jb2RpbmcpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2NvZGVjc19fZm9yZ2V0X2NvZGVjKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJzOl9mb3JnZXRfY29kZWMiLAorICAgICAgICAmZW5jb2RpbmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2NvZGVjc19fZm9yZ2V0X2NvZGVjX2ltcGwobW9kdWxlLCBlbmNvZGluZyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19jb2RlY3NfX2ZvcmdldF9jb2RlY19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKmVuY29kaW5nKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE3NWU2MzE1OTE3MDJhNWMgaW5wdXQ9MThkNWQ5MmQwZTM4NmMzOF0qLworeworICAgIGlmIChfUHlDb2RlY19Gb3JnZXQoZW5jb2RpbmcpIDwgMCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9OworICAgIFB5X1JFVFVSTl9OT05FOworfQorCiBzdGF0aWMKIFB5T2JqZWN0ICpjb2RlY190dXBsZShQeU9iamVjdCAqdW5pY29kZSwKICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbikKQEAgLTE4OSw5ICsyNDIsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciBjOwotICAgICAgICByZWdpc3RlciBjaGFyICpwID0gUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgY2hhciBjOworICAgICAgICBjaGFyICpwID0gUHlCeXRlc19BU19TVFJJTkcodik7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCBlbm91Z2ggcm9vbSBmb3IgYSBoZXggZXNjYXBlICovCkBAIC0yMzEsOCArMjg0LDYgQEAKIHsKICAgICBQeU9iamVjdCAqb2JqOwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqZGF0YTsKLSAgICBQeV9zc2l6ZV90IHNpemU7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98ejp1bmljb2RlX2ludGVybmFsX2RlY29kZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICZvYmosICZlcnJvcnMpKQpAQCAtMjQ1LDExICsyOTYsMTYgQEAKICAgICAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKG9iaiwgUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoUHlPYmplY3RfQXNSZWFkQnVmZmVyKG9iaiwgKGNvbnN0IHZvaWQgKiopJmRhdGEsICZzaXplKSkKKyAgICAgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIob2JqLCAmdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKF9QeVVuaWNvZGVfRGVjb2RlVW5pY29kZUludGVybmFsKGRhdGEsIHNpemUsIGVycm9ycyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKTsKKyAgICAgICAgcmVzdWx0ID0gY29kZWNfdHVwbGUoCisgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9EZWNvZGVVbmljb2RlSW50ZXJuYWwodmlldy5idWYsIHZpZXcubGVuLCBlcnJvcnMpLAorICAgICAgICAgICAgICAgIHZpZXcubGVuKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogfQogCkBAIC02NzQsOCArNzMwLDYgQEAKIHsKICAgICBQeU9iamVjdCAqb2JqOwogICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqZGF0YTsKLSAgICBQeV9zc2l6ZV90IGxlbiwgc2l6ZTsKIAogICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAogICAgICAgICAgICAgICAgICAgICAgInVuaWNvZGVfaW50ZXJuYWwgY29kZWMgaGFzIGJlZW4gZGVwcmVjYXRlZCIsCkBAIC02ODgsNiArNzQyLDcgQEAKIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sob2JqKSkgewogICAgICAgICBQeV9VTklDT0RFICp1OworICAgICAgICBQeV9zc2l6ZV90IGxlbiwgc2l6ZTsKIAogICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKG9iaikgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MDIsOSArNzU3LDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChQeU9iamVjdF9Bc1JlYWRCdWZmZXIob2JqLCAoY29uc3Qgdm9pZCAqKikmZGF0YSwgJnNpemUpKQorICAgICAgICBQeV9idWZmZXIgdmlldzsKKyAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihvYmosICZ2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcmV0dXJuIGNvZGVjX3R1cGxlKFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoZGF0YSwgc2l6ZSksIHNpemUpOworICAgICAgICByZXN1bHQgPSBjb2RlY190dXBsZShQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHZpZXcuYnVmLCB2aWV3LmxlbiksIHZpZXcubGVuKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogfQogCkBAIC0xMTY4LDYgKzEyMjcsNyBAQAogICAgICAgICByZWdpc3Rlcl9lcnJvcl9fZG9jX199LAogICAgIHsibG9va3VwX2Vycm9yIiwgICAgICAgICAgICBsb29rdXBfZXJyb3IsICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUywKICAgICAgICAgbG9va3VwX2Vycm9yX19kb2NfX30sCisgICAgX0NPREVDU19fRk9SR0VUX0NPREVDX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYyBiL01vZHVsZXMvX2NvbGxlY3Rpb25zbW9kdWxlLmMKaW5kZXggZGZlYmZiOS4uNjExNWM3MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY29sbGVjdGlvbnNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jb2xsZWN0aW9uc21vZHVsZS5jCkBAIC02LDI1ICs2LDI3IEBACiAqLwogCiAvKiBUaGUgYmxvY2sgbGVuZ3RoIG1heSBiZSBzZXQgdG8gYW55IG51bWJlciBvdmVyIDEuICBMYXJnZXIgbnVtYmVycwotICogcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FsbHMgdG8gdGhlIG1lbW9yeSBhbGxvY2F0b3IgYnV0IHRha2UgbW9yZQotICogbWVtb3J5LiAgSWRlYWxseSwgQkxPQ0tMRU4gc2hvdWxkIGJlIHNldCB3aXRoIGFuIGV5ZSB0byB0aGUKLSAqIGxlbmd0aCBvZiBhIGNhY2hlIGxpbmUuCisgKiByZWR1Y2UgdGhlIG51bWJlciBvZiBjYWxscyB0byB0aGUgbWVtb3J5IGFsbG9jYXRvciwgZ2l2ZSBmYXN0ZXIKKyAqIGluZGV4aW5nIGFuZCByb3RhdGlvbiwgYW5kIHJlZHVjZSB0aGUgbGluazo6ZGF0YSBvdmVyaGVhZCByYXRpby4KKyAqCisgKiBJZGVhbGx5LCB0aGUgYmxvY2sgbGVuZ3RoIHdpbGwgYmUgc2V0IHRvIHR3byBsZXNzIHRoYW4gc29tZQorICogbXVsdGlwbGUgb2YgdGhlIGNhY2hlLWxpbmUgbGVuZ3RoIChzbyB0aGF0IHRoZSBmdWxsIGJsb2NrCisgKiBpbmNsdWRpbmcgdGhlIGxlZnRsaW5rIGFuZCByaWdodGxpbmsgd2lsbCBmaXQgbmVhdGx5IGludG8KKyAqIGNhY2hlIGxpbmVzKS4KICAqLwogCiAjZGVmaW5lIEJMT0NLTEVOIDYyCiAjZGVmaW5lIENFTlRFUiAoKEJMT0NLTEVOIC0gMSkgLyAyKQogCiAvKiBBIGBkZXF1ZW9iamVjdGAgaXMgY29tcG9zZWQgb2YgYSBkb3VibHktbGlua2VkIGxpc3Qgb2YgYGJsb2NrYCBub2Rlcy4KLSAqIFRoaXMgbGlzdCBpcyBub3QgY2lyY3VsYXIgKHRoZSBsZWZ0bW9zdCBibG9jayBoYXMgbGVmdGxpbms9PU5VTEwsCi0gKiBhbmQgdGhlIHJpZ2h0bW9zdCBibG9jayBoYXMgcmlnaHRsaW5rPT1OVUxMKS4gIEEgZGVxdWUgZCdzIGZpcnN0Ci0gKiBlbGVtZW50IGlzIGF0IGQubGVmdGJsb2NrW2xlZnRpbmRleF0gYW5kIGl0cyBsYXN0IGVsZW1lbnQgaXMgYXQKLSAqIGQucmlnaHRibG9ja1tyaWdodGluZGV4XTsgbm90ZSB0aGF0LCB1bmxpa2UgYXMgZm9yIFB5dGhvbiBzbGljZQotICogaW5kaWNlcywgdGhlc2UgaW5kaWNlcyBhcmUgaW5jbHVzaXZlIG9uIGJvdGggZW5kcy4gIEJ5IGJlaW5nIGluY2x1c2l2ZQotICogb24gYm90aCBlbmRzLCBhbGdvcml0aG1zIGZvciBsZWZ0IGFuZCByaWdodCBvcGVyYXRpb25zIGJlY29tZQotICogc3ltbWV0cmljYWwgd2hpY2ggc2ltcGxpZmllcyB0aGUgZGVzaWduLgotICoKICAqIFRoZSBsaXN0IG9mIGJsb2NrcyBpcyBuZXZlciBlbXB0eSwgc28gZC5sZWZ0YmxvY2sgYW5kIGQucmlnaHRibG9jawotICogYXJlIG5ldmVyIGVxdWFsIHRvIE5VTEwuCisgKiBhcmUgbmV2ZXIgZXF1YWwgdG8gTlVMTC4gIFRoZSBsaXN0IGlzIG5vdCBjaXJjdWxhci4KKyAqCisgKiBBIGRlcXVlIGQncyBmaXJzdCBlbGVtZW50IGlzIGF0IGQubGVmdGJsb2NrW2xlZnRpbmRleF0KKyAqIGFuZCBpdHMgbGFzdCBlbGVtZW50IGlzIGF0IGQucmlnaHRibG9ja1tyaWdodGluZGV4XS4KKyAqIFVubGlrZSBQeXRob24gc2xpY2UgaW5kaWNlcywgdGhlc2UgaW5kaWNlcyBhcmUgaW5jbHVzaXZlCisgKiBvbiBib3RoIGVuZHMuICBUaGlzIG1ha2VzIHRoZSBhbGdvcml0aG1zIGZvciBsZWZ0IGFuZAorICogcmlnaHQgb3BlcmF0aW9ucyBtb3JlIHN5bW1ldHJpY2FsIGFuZCBzaW1wbGlmaWVzIHRoZSBkZXNpZ24uCiAgKgogICogVGhlIGluZGljZXMsIGQubGVmdGluZGV4IGFuZCBkLnJpZ2h0aW5kZXggYXJlIGFsd2F5cyBpbiB0aGUgcmFuZ2UKICAqICAgICAwIDw9IGluZGV4IDwgQkxPQ0tMRU4uCkBAIC00NSw0MiArNDcsNjAgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgQkxPQ0sgewogICAgIHN0cnVjdCBCTE9DSyAqbGVmdGxpbms7Ci0gICAgc3RydWN0IEJMT0NLICpyaWdodGxpbms7CiAgICAgUHlPYmplY3QgKmRhdGFbQkxPQ0tMRU5dOworICAgIHN0cnVjdCBCTE9DSyAqcmlnaHRsaW5rOwogfSBibG9jazsKIAorLyogRm9yIGRlYnVnIGJ1aWxkcywgYWRkIGVycm9yIGNoZWNraW5nIHRvIHRyYWNrIHRoZSBlbmRwb2ludHMKKyAqIGluIHRoZSBjaGFpbiBvZiBsaW5rcy4gIFRoZSBnb2FsIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGxpbmsKKyAqIGFzc2lnbm1lbnRzIG9ubHkgdGFrZSBwbGFjZSBhdCBlbmRwb2ludHMgc28gdGhhdCBsaW5rcyBhbHJlYWR5CisgKiBpbiB1c2UgZG8gbm90IGdldCBvdmVyd3JpdHRlbi4KKyAqCisgKiBDSEVDS19FTkQgc2hvdWxkIGhhcHBlbiBiZWZvcmUgZWFjaCBhc3NpZ25tZW50IHRvIGEgYmxvY2sncyBsaW5rIGZpZWxkLgorICogTUFSS19FTkQgc2hvdWxkIGhhcHBlbiB3aGVuZXZlciBhIGxpbmsgZmllbGQgYmVjb21lcyBhIG5ldyBlbmRwb2ludC4KKyAqIFRoaXMgaGFwcGVucyB3aGVuIG5ldyBibG9ja3MgYXJlIGFkZGVkIG9yIHdoZW5ldmVyIGFuIGV4aXN0aW5nCisgKiBibG9jayBpcyBmcmVlZCBsZWF2aW5nIGFub3RoZXIgZXhpc3RpbmcgYmxvY2sgYXMgdGhlIG5ldyBlbmRwb2ludC4KKyAqLworCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBNQVJLX0VORChsaW5rKSAgbGluayA9IE5VTEw7CisjZGVmaW5lIENIRUNLX0VORChsaW5rKSBhc3NlcnQobGluayA9PSBOVUxMKTsKKyNkZWZpbmUgQ0hFQ0tfTk9UX0VORChsaW5rKSBhc3NlcnQobGluayAhPSBOVUxMKTsKKyNlbHNlCisjZGVmaW5lIE1BUktfRU5EKGxpbmspCisjZGVmaW5lIENIRUNLX0VORChsaW5rKQorI2RlZmluZSBDSEVDS19OT1RfRU5EKGxpbmspCisjZW5kaWYKKworLyogQSBzaW1wbGUgZnJlZWxpc3Rpbmcgc2NoZW1lIGlzIHVzZWQgdG8gbWluaW1pemUgY2FsbHMgdG8gdGhlIG1lbW9yeQorICAgYWxsb2NhdG9yLiAgSXQgYWNjb21vZGF0ZXMgY29tbW9uIHVzZSBjYXNlcyB3aGVyZSBuZXcgYmxvY2tzIGFyZSBiZWluZworICAgYWRkZWQgYXQgYWJvdXQgdGhlIHNhbWUgcmF0ZSBhcyBvbGQgYmxvY2tzIGFyZSBiZWluZyBmcmVlZC4KKyAqLworCiAjZGVmaW5lIE1BWEZSRUVCTE9DS1MgMTAKIHN0YXRpYyBQeV9zc2l6ZV90IG51bWZyZWVibG9ja3MgPSAwOwogc3RhdGljIGJsb2NrICpmcmVlYmxvY2tzW01BWEZSRUVCTE9DS1NdOwogCiBzdGF0aWMgYmxvY2sgKgotbmV3YmxvY2soYmxvY2sgKmxlZnRsaW5rLCBibG9jayAqcmlnaHRsaW5rLCBQeV9zc2l6ZV90IGxlbikgeworbmV3YmxvY2soUHlfc3NpemVfdCBsZW4pIHsKICAgICBibG9jayAqYjsKLSAgICAvKiBUbyBwcmV2ZW50IGxlbiBmcm9tIG92ZXJmbG93aW5nIFBZX1NTSVpFX1RfTUFYIG9uIDY0LWJpdCBtYWNoaW5lcywgd2UKLSAgICAgKiByZWZ1c2UgdG8gYWxsb2NhdGUgbmV3IGJsb2NrcyBpZiB0aGUgY3VycmVudCBsZW4gaXMgZGFuZ2Vyb3VzbHkKLSAgICAgKiBjbG9zZS4gIFRoZXJlIGlzIHNvbWUgZXh0cmEgbWFyZ2luIHRvIHByZXZlbnQgc3B1cmlvdXMgYXJpdGhtZXRpYwotICAgICAqIG92ZXJmbG93cyBhdCB2YXJpb3VzIHBsYWNlcy4gIFRoZSBmb2xsb3dpbmcgY2hlY2sgZW5zdXJlcyB0aGF0Ci0gICAgICogdGhlIGJsb2NrcyBhbGxvY2F0ZWQgdG8gdGhlIGRlcXVlLCBpbiB0aGUgd29yc3QgY2FzZSwgY2FuIG9ubHkKLSAgICAgKiBoYXZlIFBZX1NTSVpFX1RfTUFYLTIgZW50cmllcyBpbiB0b3RhbC4KLSAgICAgKi8KKyAgICAvKiBUbyBwcmV2ZW50IGxlbiBmcm9tIG92ZXJmbG93aW5nIFBZX1NTSVpFX1RfTUFYLCB3ZSByZWZ1c2UgdG8KKyAgICAgKiBhbGxvY2F0ZSBuZXcgYmxvY2tzIGlmIHRoZSBjdXJyZW50IGxlbiBpcyBuZWFyaW5nIG92ZXJmbG93LiAqLwogICAgIGlmIChsZW4gPj0gUFlfU1NJWkVfVF9NQVggLSAyKkJMT0NLTEVOKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBhZGQgbW9yZSBibG9ja3MgdG8gdGhlIGRlcXVlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAobnVtZnJlZWJsb2NrcykgewotICAgICAgICBudW1mcmVlYmxvY2tzIC09IDE7Ci0gICAgICAgIGIgPSBmcmVlYmxvY2tzW251bWZyZWVibG9ja3NdOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGIgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKGJsb2NrKSk7Ci0gICAgICAgIGlmIChiID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQorICAgICAgICBudW1mcmVlYmxvY2tzLS07CisgICAgICAgIHJldHVybiBmcmVlYmxvY2tzW251bWZyZWVibG9ja3NdOwogICAgIH0KLSAgICBiLT5sZWZ0bGluayA9IGxlZnRsaW5rOwotICAgIGItPnJpZ2h0bGluayA9IHJpZ2h0bGluazsKLSAgICByZXR1cm4gYjsKKyAgICBiID0gUHlNZW1fTWFsbG9jKHNpemVvZihibG9jaykpOworICAgIGlmIChiICE9IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGI7CisgICAgfQorICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC05NSwxNCArMTE1LDEzIEBACiB9CiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9IRUFECisgICAgUHlPYmplY3RfVkFSX0hFQUQKICAgICBibG9jayAqbGVmdGJsb2NrOwogICAgIGJsb2NrICpyaWdodGJsb2NrOwogICAgIFB5X3NzaXplX3QgbGVmdGluZGV4OyAgICAgICAvKiBpbiByYW5nZShCTE9DS0xFTikgKi8KICAgICBQeV9zc2l6ZV90IHJpZ2h0aW5kZXg7ICAgICAgLyogaW4gcmFuZ2UoQkxPQ0tMRU4pICovCi0gICAgUHlfc3NpemVfdCBsZW47CisgICAgbG9uZyBzdGF0ZTsgICAgICAgICAgICAgICAgIC8qIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBpbmRpY2VzIG1vdmUgKi8KICAgICBQeV9zc2l6ZV90IG1heGxlbjsKLSAgICBsb25nIHN0YXRlOyAgICAgICAgIC8qIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSBpbmRpY2VzIG1vdmUgKi8KICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCiB9IGRlcXVlb2JqZWN0OwogCkBAIC0xMTYsOSArMTM1LDkgQEAKICAqLwogCiAjZGVmaW5lIFRSSU0oZCwgcG9wZnVuY3Rpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChkLT5tYXhsZW4gIT0gLTEgJiYgZC0+bGVuID4gZC0+bWF4bGVuKSB7ICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoZC0+bWF4bGVuICE9IC0xICYmIFB5X1NJWkUoZCkgPiBkLT5tYXhsZW4pIHsgICAgICAgXAogICAgICAgICBQeU9iamVjdCAqcnYgPSBwb3BmdW5jdGlvbihkLCBOVUxMKTsgICAgICAgICAgICAgICAgXAotICAgICAgICBhc3NlcnQocnYgIT0gTlVMTCAgJiYgIGQtPmxlbiA8PSBkLT5tYXhsZW4pOyAgICAgICAgXAorICAgICAgICBhc3NlcnQocnYgIT0gTlVMTCAgJiYgIFB5X1NJWkUoZCkgPD0gZC0+bWF4bGVuKTsgICAgXAogICAgICAgICBQeV9ERUNSRUYocnYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIApAQCAtMTM1LDE4ICsxNTQsMjAgQEAKICAgICBpZiAoZGVxdWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBiID0gbmV3YmxvY2soTlVMTCwgTlVMTCwgMCk7CisgICAgYiA9IG5ld2Jsb2NrKDApOwogICAgIGlmIChiID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKGRlcXVlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIE1BUktfRU5EKGItPmxlZnRsaW5rKTsKKyAgICBNQVJLX0VORChiLT5yaWdodGxpbmspOwogCiAgICAgYXNzZXJ0KEJMT0NLTEVOID49IDIpOwogICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOwogICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQ0VOVEVSICsgMTsKICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IENFTlRFUjsKLSAgICBkZXF1ZS0+bGVuID0gMDsKKyAgICBQeV9TSVpFKGRlcXVlKSA9IDA7CiAgICAgZGVxdWUtPnN0YXRlID0gMDsKICAgICBkZXF1ZS0+d2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIGRlcXVlLT5tYXhsZW4gPSAtMTsKQEAgLTE2MCwxNyArMTgxLDE3IEBACiAgICAgUHlPYmplY3QgKml0ZW07CiAgICAgYmxvY2sgKnByZXZibG9jazsKIAotICAgIGlmIChkZXF1ZS0+bGVuID09IDApIHsKKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInBvcCBmcm9tIGFuIGVtcHR5IGRlcXVlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpdGVtID0gZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXhdOwogICAgIGRlcXVlLT5yaWdodGluZGV4LS07Ci0gICAgZGVxdWUtPmxlbi0tOworICAgIFB5X1NJWkUoZGVxdWUpLS07CiAgICAgZGVxdWUtPnN0YXRlKys7CiAKICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gLTEpIHsKLSAgICAgICAgaWYgKGRlcXVlLT5sZW4gPT0gMCkgeworICAgICAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgewogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgPT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CiAgICAgICAgICAgICAvKiByZS1jZW50ZXIgaW5zdGVhZCBvZiBmcmVlaW5nIGEgYmxvY2sgKi8KQEAgLTE4MCw3ICsyMDEsOCBAQAogICAgICAgICAgICAgcHJldmJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2stPmxlZnRsaW5rOwogICAgICAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0YmxvY2sgIT0gZGVxdWUtPnJpZ2h0YmxvY2spOwogICAgICAgICAgICAgZnJlZWJsb2NrKGRlcXVlLT5yaWdodGJsb2NrKTsKLSAgICAgICAgICAgIHByZXZibG9jay0+cmlnaHRsaW5rID0gTlVMTDsKKyAgICAgICAgICAgIENIRUNLX05PVF9FTkQocHJldmJsb2NrKTsKKyAgICAgICAgICAgIE1BUktfRU5EKHByZXZibG9jay0+cmlnaHRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gcHJldmJsb2NrOwogICAgICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDE7CiAgICAgICAgIH0KQEAgLTE5NiwxOCArMjE4LDE4IEBACiAgICAgUHlPYmplY3QgKml0ZW07CiAgICAgYmxvY2sgKnByZXZibG9jazsKIAotICAgIGlmIChkZXF1ZS0+bGVuID09IDApIHsKKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInBvcCBmcm9tIGFuIGVtcHR5IGRlcXVlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBOVUxMKTsKICAgICBpdGVtID0gZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XTsKICAgICBkZXF1ZS0+bGVmdGluZGV4Kys7Ci0gICAgZGVxdWUtPmxlbi0tOworICAgIFB5X1NJWkUoZGVxdWUpLS07CiAgICAgZGVxdWUtPnN0YXRlKys7CiAKICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSBCTE9DS0xFTikgewotICAgICAgICBpZiAoZGVxdWUtPmxlbiA9PSAwKSB7CisgICAgICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7CiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRpbmRleCA9PSBkZXF1ZS0+cmlnaHRpbmRleCsxKTsKICAgICAgICAgICAgIC8qIHJlLWNlbnRlciBpbnN0ZWFkIG9mIGZyZWVpbmcgYSBibG9jayAqLwpAQCAtMjE3LDggKzIzOSw4IEBACiAgICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7CiAgICAgICAgICAgICBwcmV2YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrLT5yaWdodGxpbms7CiAgICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPmxlZnRibG9jayk7Ci0gICAgICAgICAgICBhc3NlcnQocHJldmJsb2NrICE9IE5VTEwpOwotICAgICAgICAgICAgcHJldmJsb2NrLT5sZWZ0bGluayA9IE5VTEw7CisgICAgICAgICAgICBDSEVDS19OT1RfRU5EKHByZXZibG9jayk7CisgICAgICAgICAgICBNQVJLX0VORChwcmV2YmxvY2stPmxlZnRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBwcmV2YmxvY2s7CiAgICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gMDsKICAgICAgICAgfQpAQCAtMjMzLDE2ICsyNTUsMTggQEAKIHsKICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICBpZiAoZGVxdWUtPnJpZ2h0aW5kZXggPT0gQkxPQ0tMRU4tMSkgewotICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKGRlcXVlLT5yaWdodGJsb2NrLCBOVUxMLCBkZXF1ZS0+bGVuKTsKKyAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhQeV9TSVpFKGRlcXVlKSk7CiAgICAgICAgIGlmIChiID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXNzZXJ0KGRlcXVlLT5yaWdodGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCk7CisgICAgICAgIGItPmxlZnRsaW5rID0gZGVxdWUtPnJpZ2h0YmxvY2s7CisgICAgICAgIENIRUNLX0VORChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rKTsKICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9IGI7CiAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKKyAgICAgICAgTUFSS19FTkQoYi0+cmlnaHRsaW5rKTsKICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXggPSAtMTsKICAgICB9CiAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgIGRlcXVlLT5sZW4rKzsKKyAgICBQeV9TSVpFKGRlcXVlKSsrOwogICAgIGRlcXVlLT5yaWdodGluZGV4Kys7CiAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXhdID0gaXRlbTsKICAgICBUUklNKGRlcXVlLCBkZXF1ZV9wb3BsZWZ0KTsKQEAgLTI1NiwxNiArMjgwLDE4IEBACiB7CiAgICAgZGVxdWUtPnN0YXRlKys7CiAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gMCkgewotICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKE5VTEwsIGRlcXVlLT5sZWZ0YmxvY2ssIGRlcXVlLT5sZW4pOworICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKFB5X1NJWkUoZGVxdWUpKTsKICAgICAgICAgaWYgKGIgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCk7CisgICAgICAgIGItPnJpZ2h0bGluayA9IGRlcXVlLT5sZWZ0YmxvY2s7CisgICAgICAgIENIRUNLX0VORChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayk7CiAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID0gYjsKICAgICAgICAgZGVxdWUtPmxlZnRibG9jayA9IGI7CisgICAgICAgIE1BUktfRU5EKGItPmxlZnRsaW5rKTsKICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IEJMT0NLTEVOOwogICAgIH0KICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgZGVxdWUtPmxlbisrOworICAgIFB5X1NJWkUoZGVxdWUpKys7CiAgICAgZGVxdWUtPmxlZnRpbmRleC0tOwogICAgIGRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF0gPSBpdGVtOwogICAgIFRSSU0oZGVxdWUsIGRlcXVlX3BvcCk7CkBAIC0zMDcsNiArMzMzLDE0IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgLyogU3BhY2Ugc2F2aW5nIGhldXJpc3RpYy4gIFN0YXJ0IGZpbGxpbmcgZnJvbSB0aGUgbGVmdCAqLworICAgIGlmIChQeV9TSVpFKGRlcXVlKSA9PSAwKSB7CisgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrID09IGRlcXVlLT5yaWdodGJsb2NrKTsKKyAgICAgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggPT0gZGVxdWUtPnJpZ2h0aW5kZXgrMSk7CisgICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggPSAxOworICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IDA7CisgICAgfQorCiAgICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZXJhYmxlKTsKICAgICBpZiAoaXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMTcsMTkgKzM1MSwyMCBAQAogICAgIHdoaWxlICgoaXRlbSA9IFB5SXRlcl9OZXh0KGl0KSkgIT0gTlVMTCkgewogICAgICAgICBkZXF1ZS0+c3RhdGUrKzsKICAgICAgICAgaWYgKGRlcXVlLT5yaWdodGluZGV4ID09IEJMT0NLTEVOLTEpIHsKLSAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soZGVxdWUtPnJpZ2h0YmxvY2ssIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcXVlLT5sZW4pOworICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhQeV9TSVpFKGRlcXVlKSk7CiAgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKTsKKyAgICAgICAgICAgIGItPmxlZnRsaW5rID0gZGVxdWUtPnJpZ2h0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19FTkQoZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID0gYjsKICAgICAgICAgICAgIGRlcXVlLT5yaWdodGJsb2NrID0gYjsKKyAgICAgICAgICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CiAgICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IC0xOwogICAgICAgICB9Ci0gICAgICAgIGRlcXVlLT5sZW4rKzsKKyAgICAgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICAgICAgZGVxdWUtPnJpZ2h0aW5kZXgrKzsKICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPmRhdGFbZGVxdWUtPnJpZ2h0aW5kZXhdID0gaXRlbTsKICAgICAgICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wbGVmdCk7CkBAIC0zNTksNiArMzk0LDE0IEBACiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCisgICAgLyogU3BhY2Ugc2F2aW5nIGhldXJpc3RpYy4gIFN0YXJ0IGZpbGxpbmcgZnJvbSB0aGUgcmlnaHQgKi8KKyAgICBpZiAoUHlfU0laRShkZXF1ZSkgPT0gMCkgeworICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayk7CisgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID09IGRlcXVlLT5yaWdodGluZGV4KzEpOworICAgICAgICBkZXF1ZS0+bGVmdGluZGV4ID0gQkxPQ0tMRU4gLSAxOworICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IEJMT0NLTEVOIC0gMjsKKyAgICB9CisKICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlcmFibGUpOwogICAgIGlmIChpdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTM2OSwxOSArNDEyLDIwIEBACiAgICAgd2hpbGUgKChpdGVtID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CiAgICAgICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKE5VTEwsIGRlcXVlLT5sZWZ0YmxvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcXVlLT5sZW4pOworICAgICAgICAgICAgYmxvY2sgKmIgPSBuZXdibG9jayhQeV9TSVpFKGRlcXVlKSk7CiAgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihpdCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCk7CisgICAgICAgICAgICBiLT5yaWdodGxpbmsgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfRU5EKGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rKTsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID0gYjsKICAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOworICAgICAgICAgICAgTUFSS19FTkQoYi0+bGVmdGxpbmspOwogICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IEJMT0NLTEVOOwogICAgICAgICB9Ci0gICAgICAgIGRlcXVlLT5sZW4rKzsKKyAgICAgICAgUHlfU0laRShkZXF1ZSkrKzsKICAgICAgICAgZGVxdWUtPmxlZnRpbmRleC0tOwogICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrLT5kYXRhW2RlcXVlLT5sZWZ0aW5kZXhdID0gaXRlbTsKICAgICAgICAgVFJJTShkZXF1ZSwgZGVxdWVfcG9wKTsKQEAgLTQxMSw3ICs0NTUsMTMgQEAKIHN0YXRpYyBpbnQKIF9kZXF1ZV9yb3RhdGUoZGVxdWVvYmplY3QgKmRlcXVlLCBQeV9zc2l6ZV90IG4pCiB7Ci0gICAgUHlfc3NpemVfdCBtLCBsZW49ZGVxdWUtPmxlbiwgaGFsZmxlbj1sZW4+PjE7CisgICAgYmxvY2sgKmIgPSBOVUxMOworICAgIGJsb2NrICpsZWZ0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgIGJsb2NrICpyaWdodGJsb2NrID0gZGVxdWUtPnJpZ2h0YmxvY2s7CisgICAgUHlfc3NpemVfdCBsZWZ0aW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OworICAgIFB5X3NzaXplX3QgcmlnaHRpbmRleCA9IGRlcXVlLT5yaWdodGluZGV4OworICAgIFB5X3NzaXplX3QgbGVuPVB5X1NJWkUoZGVxdWUpLCBoYWxmbGVuPWxlbj4+MTsKKyAgICBpbnQgcnYgPSAtMTsKIAogICAgIGlmIChsZW4gPD0gMSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00MjcsNzYgKzQ3NywxMDMgQEAKIAogICAgIGRlcXVlLT5zdGF0ZSsrOwogICAgIHdoaWxlIChuID4gMCkgewotICAgICAgICBpZiAoZGVxdWUtPmxlZnRpbmRleCA9PSAwKSB7Ci0gICAgICAgICAgICBibG9jayAqYiA9IG5ld2Jsb2NrKE5VTEwsIGRlcXVlLT5sZWZ0YmxvY2ssIGxlbik7Ci0gICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrLT5sZWZ0bGluayA9PSBOVUxMKTsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2stPmxlZnRsaW5rID0gYjsKLSAgICAgICAgICAgIGRlcXVlLT5sZWZ0YmxvY2sgPSBiOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IEJMT0NLTEVOOworICAgICAgICBpZiAobGVmdGluZGV4ID09IDApIHsKKyAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBiID0gbmV3YmxvY2sobGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiLT5yaWdodGxpbmsgPSBsZWZ0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19FTkQobGVmdGJsb2NrLT5sZWZ0bGluayk7CisgICAgICAgICAgICBsZWZ0YmxvY2stPmxlZnRsaW5rID0gYjsKKyAgICAgICAgICAgIGxlZnRibG9jayA9IGI7CisgICAgICAgICAgICBNQVJLX0VORChiLT5sZWZ0bGluayk7CisgICAgICAgICAgICBsZWZ0aW5kZXggPSBCTE9DS0xFTjsKKyAgICAgICAgICAgIGIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGluZGV4ID4gMCk7CisgICAgICAgIGFzc2VydChsZWZ0aW5kZXggPiAwKTsKKyAgICAgICAgeworICAgICAgICAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbSA9IG47CiAKLSAgICAgICAgbSA9IG47Ci0gICAgICAgIGlmIChtID4gZGVxdWUtPnJpZ2h0aW5kZXggKyAxKQotICAgICAgICAgICAgbSA9IGRlcXVlLT5yaWdodGluZGV4ICsgMTsKLSAgICAgICAgaWYgKG0gPiBkZXF1ZS0+bGVmdGluZGV4KQotICAgICAgICAgICAgbSA9IGRlcXVlLT5sZWZ0aW5kZXg7Ci0gICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOwotICAgICAgICBtZW1jcHkoJmRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleCAtIG1dLAotICAgICAgICAgICAgICAgJmRlcXVlLT5yaWdodGJsb2NrLT5kYXRhW2RlcXVlLT5yaWdodGluZGV4ICsgMSAtIG1dLAotICAgICAgICAgICAgICAgbSAqIHNpemVvZihQeU9iamVjdCAqKSk7Ci0gICAgICAgIGRlcXVlLT5yaWdodGluZGV4IC09IG07Ci0gICAgICAgIGRlcXVlLT5sZWZ0aW5kZXggLT0gbTsKLSAgICAgICAgbiAtPSBtOwotCi0gICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSAtMSkgewotICAgICAgICAgICAgYmxvY2sgKnByZXZibG9jayA9IGRlcXVlLT5yaWdodGJsb2NrLT5sZWZ0bGluazsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+cmlnaHRibG9jayAhPSBOVUxMKTsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+bGVmdGJsb2NrICE9IGRlcXVlLT5yaWdodGJsb2NrKTsKLSAgICAgICAgICAgIGZyZWVibG9jayhkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBwcmV2YmxvY2stPnJpZ2h0bGluayA9IE5VTEw7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IHByZXZibG9jazsKLSAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4ID0gQkxPQ0tMRU4gLSAxOworICAgICAgICAgICAgaWYgKG0gPiByaWdodGluZGV4ICsgMSkKKyAgICAgICAgICAgICAgICBtID0gcmlnaHRpbmRleCArIDE7CisgICAgICAgICAgICBpZiAobSA+IGxlZnRpbmRleCkKKyAgICAgICAgICAgICAgICBtID0gbGVmdGluZGV4OworICAgICAgICAgICAgYXNzZXJ0IChtID4gMCAmJiBtIDw9IGxlbik7CisgICAgICAgICAgICBzcmMgPSAmcmlnaHRibG9jay0+ZGF0YVtyaWdodGluZGV4XTsKKyAgICAgICAgICAgIGRlc3QgPSAmbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleCAtIDFdOworICAgICAgICAgICAgcmlnaHRpbmRleCAtPSBtOworICAgICAgICAgICAgbGVmdGluZGV4IC09IG07CisgICAgICAgICAgICBuIC09IG07CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgKihkZXN0LS0pID0gKihzcmMtLSk7CisgICAgICAgICAgICB9IHdoaWxlICgtLW0pOworICAgICAgICB9CisgICAgICAgIGlmIChyaWdodGluZGV4ID09IC0xKSB7CisgICAgICAgICAgICBhc3NlcnQobGVmdGJsb2NrICE9IHJpZ2h0YmxvY2spOworICAgICAgICAgICAgYXNzZXJ0KGIgPT0gTlVMTCk7CisgICAgICAgICAgICBiID0gcmlnaHRibG9jazsKKyAgICAgICAgICAgIENIRUNLX05PVF9FTkQocmlnaHRibG9jay0+bGVmdGxpbmspOworICAgICAgICAgICAgcmlnaHRibG9jayA9IHJpZ2h0YmxvY2stPmxlZnRsaW5rOworICAgICAgICAgICAgTUFSS19FTkQocmlnaHRibG9jay0+cmlnaHRsaW5rKTsKKyAgICAgICAgICAgIHJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDE7CiAgICAgICAgIH0KICAgICB9CiAgICAgd2hpbGUgKG4gPCAwKSB7Ci0gICAgICAgIGlmIChkZXF1ZS0+cmlnaHRpbmRleCA9PSBCTE9DS0xFTiAtIDEpIHsKLSAgICAgICAgICAgIGJsb2NrICpiID0gbmV3YmxvY2soZGVxdWUtPnJpZ2h0YmxvY2ssIE5VTEwsIGxlbik7Ci0gICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGFzc2VydChkZXF1ZS0+cmlnaHRibG9jay0+cmlnaHRsaW5rID09IE5VTEwpOwotICAgICAgICAgICAgZGVxdWUtPnJpZ2h0YmxvY2stPnJpZ2h0bGluayA9IGI7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRibG9jayA9IGI7Ci0gICAgICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCA9IC0xOworICAgICAgICBpZiAocmlnaHRpbmRleCA9PSBCTE9DS0xFTiAtIDEpIHsKKyAgICAgICAgICAgIGlmIChiID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBiID0gbmV3YmxvY2sobGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiLT5sZWZ0bGluayA9IHJpZ2h0YmxvY2s7CisgICAgICAgICAgICBDSEVDS19FTkQocmlnaHRibG9jay0+cmlnaHRsaW5rKTsKKyAgICAgICAgICAgIHJpZ2h0YmxvY2stPnJpZ2h0bGluayA9IGI7CisgICAgICAgICAgICByaWdodGJsb2NrID0gYjsKKyAgICAgICAgICAgIE1BUktfRU5EKGItPnJpZ2h0bGluayk7CisgICAgICAgICAgICByaWdodGluZGV4ID0gLTE7CisgICAgICAgICAgICBiID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBhc3NlcnQgKGRlcXVlLT5yaWdodGluZGV4IDwgQkxPQ0tMRU4gLSAxKTsKKyAgICAgICAgYXNzZXJ0IChyaWdodGluZGV4IDwgQkxPQ0tMRU4gLSAxKTsKKyAgICAgICAgeworICAgICAgICAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbSA9IC1uOwogCi0gICAgICAgIG0gPSAtbjsKLSAgICAgICAgaWYgKG0gPiBCTE9DS0xFTiAtIGRlcXVlLT5sZWZ0aW5kZXgpCi0gICAgICAgICAgICBtID0gQkxPQ0tMRU4gLSBkZXF1ZS0+bGVmdGluZGV4OwotICAgICAgICBpZiAobSA+IEJMT0NLTEVOIC0gMSAtIGRlcXVlLT5yaWdodGluZGV4KQotICAgICAgICAgICAgbSA9IEJMT0NLTEVOIC0gMSAtIGRlcXVlLT5yaWdodGluZGV4OwotICAgICAgICBhc3NlcnQgKG0gPiAwICYmIG0gPD0gbGVuKTsKLSAgICAgICAgbWVtY3B5KCZkZXF1ZS0+cmlnaHRibG9jay0+ZGF0YVtkZXF1ZS0+cmlnaHRpbmRleCArIDFdLAotICAgICAgICAgICAgICAgJmRlcXVlLT5sZWZ0YmxvY2stPmRhdGFbZGVxdWUtPmxlZnRpbmRleF0sCi0gICAgICAgICAgICAgICBtICogc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICAgICAgZGVxdWUtPmxlZnRpbmRleCArPSBtOwotICAgICAgICBkZXF1ZS0+cmlnaHRpbmRleCArPSBtOwotICAgICAgICBuICs9IG07Ci0KLSAgICAgICAgaWYgKGRlcXVlLT5sZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgICAgIGJsb2NrICpuZXh0YmxvY2sgPSBkZXF1ZS0+bGVmdGJsb2NrLT5yaWdodGxpbms7Ci0gICAgICAgICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayAhPSBkZXF1ZS0+cmlnaHRibG9jayk7Ci0gICAgICAgICAgICBmcmVlYmxvY2soZGVxdWUtPmxlZnRibG9jayk7Ci0gICAgICAgICAgICBhc3NlcnQobmV4dGJsb2NrICE9IE5VTEwpOwotICAgICAgICAgICAgbmV4dGJsb2NrLT5sZWZ0bGluayA9IE5VTEw7Ci0gICAgICAgICAgICBkZXF1ZS0+bGVmdGJsb2NrID0gbmV4dGJsb2NrOwotICAgICAgICAgICAgZGVxdWUtPmxlZnRpbmRleCA9IDA7CisgICAgICAgICAgICBpZiAobSA+IEJMT0NLTEVOIC0gbGVmdGluZGV4KQorICAgICAgICAgICAgICAgIG0gPSBCTE9DS0xFTiAtIGxlZnRpbmRleDsKKyAgICAgICAgICAgIGlmIChtID4gQkxPQ0tMRU4gLSAxIC0gcmlnaHRpbmRleCkKKyAgICAgICAgICAgICAgICBtID0gQkxPQ0tMRU4gLSAxIC0gcmlnaHRpbmRleDsKKyAgICAgICAgICAgIGFzc2VydCAobSA+IDAgJiYgbSA8PSBsZW4pOworICAgICAgICAgICAgc3JjID0gJmxlZnRibG9jay0+ZGF0YVtsZWZ0aW5kZXhdOworICAgICAgICAgICAgZGVzdCA9ICZyaWdodGJsb2NrLT5kYXRhW3JpZ2h0aW5kZXggKyAxXTsKKyAgICAgICAgICAgIGxlZnRpbmRleCArPSBtOworICAgICAgICAgICAgcmlnaHRpbmRleCArPSBtOworICAgICAgICAgICAgbiArPSBtOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICooZGVzdCsrKSA9ICooc3JjKyspOworICAgICAgICAgICAgfSB3aGlsZSAoLS1tKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobGVmdGluZGV4ID09IEJMT0NLTEVOKSB7CisgICAgICAgICAgICBhc3NlcnQobGVmdGJsb2NrICE9IHJpZ2h0YmxvY2spOworICAgICAgICAgICAgYXNzZXJ0KGIgPT0gTlVMTCk7CisgICAgICAgICAgICBiID0gbGVmdGJsb2NrOworICAgICAgICAgICAgQ0hFQ0tfTk9UX0VORChsZWZ0YmxvY2stPnJpZ2h0bGluayk7CisgICAgICAgICAgICBsZWZ0YmxvY2sgPSBsZWZ0YmxvY2stPnJpZ2h0bGluazsKKyAgICAgICAgICAgIE1BUktfRU5EKGxlZnRibG9jay0+bGVmdGxpbmspOworICAgICAgICAgICAgbGVmdGluZGV4ID0gMDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICBydiA9IDA7Citkb25lOgorICAgIGlmIChiICE9IE5VTEwpCisgICAgICAgIGZyZWVibG9jayhiKTsKKyAgICBkZXF1ZS0+bGVmdGJsb2NrID0gbGVmdGJsb2NrOworICAgIGRlcXVlLT5yaWdodGJsb2NrID0gcmlnaHRibG9jazsKKyAgICBkZXF1ZS0+bGVmdGluZGV4ID0gbGVmdGluZGV4OworICAgIGRlcXVlLT5yaWdodGluZGV4ID0gcmlnaHRpbmRleDsKKworICAgIHJldHVybiBydjsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTUyMSwxMyArNTk4LDE1IEBACiAgICAgYmxvY2sgKnJpZ2h0YmxvY2sgPSBkZXF1ZS0+cmlnaHRibG9jazsKICAgICBQeV9zc2l6ZV90IGxlZnRpbmRleCA9IGRlcXVlLT5sZWZ0aW5kZXg7CiAgICAgUHlfc3NpemVfdCByaWdodGluZGV4ID0gZGVxdWUtPnJpZ2h0aW5kZXg7Ci0gICAgUHlfc3NpemVfdCBuID0gKGRlcXVlLT5sZW4pLzI7CisgICAgUHlfc3NpemVfdCBuID0gKFB5X1NJWkUoZGVxdWUpKS8yOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqdG1wOwogCiAgICAgZm9yIChpPTAgOyBpPG4gOyBpKyspIHsKICAgICAgICAgLyogVmFsaWRhdGUgdGhhdCBwb2ludGVycyBoYXZlbid0IG1ldCBpbiB0aGUgbWlkZGxlICovCiAgICAgICAgIGFzc2VydChsZWZ0YmxvY2sgIT0gcmlnaHRibG9jayB8fCBsZWZ0aW5kZXggPCByaWdodGluZGV4KTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChsZWZ0YmxvY2spOworICAgICAgICBDSEVDS19OT1RfRU5EKHJpZ2h0YmxvY2spOwogCiAgICAgICAgIC8qIFN3YXAgKi8KICAgICAgICAgdG1wID0gbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF07CkBAIC01MzcsOCArNjE2LDYgQEAKICAgICAgICAgLyogQWR2YW5jZSBsZWZ0IGJsb2NrL2luZGV4IHBhaXIgKi8KICAgICAgICAgbGVmdGluZGV4Kys7CiAgICAgICAgIGlmIChsZWZ0aW5kZXggPT0gQkxPQ0tMRU4pIHsKLSAgICAgICAgICAgIGlmIChsZWZ0YmxvY2stPnJpZ2h0bGluayA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbGVmdGJsb2NrID0gbGVmdGJsb2NrLT5yaWdodGxpbms7CiAgICAgICAgICAgICBsZWZ0aW5kZXggPSAwOwogICAgICAgICB9CkBAIC01NDYsOCArNjIzLDYgQEAKICAgICAgICAgLyogU3RlcCBiYWNrd2FyZHMgd2l0aCB0aGUgcmlnaHQgYmxvY2svaW5kZXggcGFpciAqLwogICAgICAgICByaWdodGluZGV4LS07CiAgICAgICAgIGlmIChyaWdodGluZGV4ID09IC0xKSB7Ci0gICAgICAgICAgICBpZiAocmlnaHRibG9jay0+bGVmdGxpbmsgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJpZ2h0YmxvY2sgPSByaWdodGJsb2NrLT5sZWZ0bGluazsKICAgICAgICAgICAgIHJpZ2h0aW5kZXggPSBCTE9DS0xFTiAtIDE7CiAgICAgICAgIH0KQEAgLTU2MSw5ICs2MzYsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGRlcXVlX2NvdW50KGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlPYmplY3QgKnYpCiB7Ci0gICAgYmxvY2sgKmxlZnRibG9jayA9IGRlcXVlLT5sZWZ0YmxvY2s7Ci0gICAgUHlfc3NpemVfdCBsZWZ0aW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OwotICAgIFB5X3NzaXplX3QgbiA9IGRlcXVlLT5sZW47CisgICAgYmxvY2sgKmIgPSBkZXF1ZS0+bGVmdGJsb2NrOworICAgIFB5X3NzaXplX3QgaW5kZXggPSBkZXF1ZS0+bGVmdGluZGV4OworICAgIFB5X3NzaXplX3QgbiA9IFB5X1NJWkUoZGVxdWUpOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IGNvdW50ID0gMDsKICAgICBQeU9iamVjdCAqaXRlbTsKQEAgLTU3MSw3ICs2NDYsOCBAQAogICAgIGludCBjbXA7CiAKICAgICBmb3IgKGk9MCA7IGk8biA7IGkrKykgewotICAgICAgICBpdGVtID0gbGVmdGJsb2NrLT5kYXRhW2xlZnRpbmRleF07CisgICAgICAgIENIRUNLX05PVF9FTkQoYik7CisgICAgICAgIGl0ZW0gPSBiLT5kYXRhW2luZGV4XTsKICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0sIHYsIFB5X0VRKTsKICAgICAgICAgaWYgKGNtcCA+IDApCiAgICAgICAgICAgICBjb3VudCsrOwpAQCAtNTg1LDEyICs2NjEsMTAgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIEFkdmFuY2UgbGVmdCBibG9jay9pbmRleCBwYWlyICovCi0gICAgICAgIGxlZnRpbmRleCsrOwotICAgICAgICBpZiAobGVmdGluZGV4ID09IEJMT0NLTEVOKSB7Ci0gICAgICAgICAgICBpZiAobGVmdGJsb2NrLT5yaWdodGxpbmsgPT0gTlVMTCkgIC8qIGNhbiBvY2N1ciB3aGVuIGk9PW4tMSAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgbGVmdGJsb2NrID0gbGVmdGJsb2NrLT5yaWdodGxpbms7Ci0gICAgICAgICAgICBsZWZ0aW5kZXggPSAwOworICAgICAgICBpbmRleCsrOworICAgICAgICBpZiAoaW5kZXggPT0gQkxPQ0tMRU4pIHsKKyAgICAgICAgICAgIGIgPSBiLT5yaWdodGxpbms7CisgICAgICAgICAgICBpbmRleCA9IDA7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChjb3VudCk7CkBAIC02MDIsMTkgKzY3NiwxOSBAQAogc3RhdGljIFB5X3NzaXplX3QKIGRlcXVlX2xlbihkZXF1ZW9iamVjdCAqZGVxdWUpCiB7Ci0gICAgcmV0dXJuIGRlcXVlLT5sZW47CisgICAgcmV0dXJuIFB5X1NJWkUoZGVxdWUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogZGVxdWVfcmVtb3ZlKGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlPYmplY3QgKnZhbHVlKQogewotICAgIFB5X3NzaXplX3QgaSwgbj1kZXF1ZS0+bGVuOworICAgIFB5X3NzaXplX3QgaSwgbj1QeV9TSVpFKGRlcXVlKTsKIAogICAgIGZvciAoaT0wIDsgaTxuIDsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gZGVxdWUtPmxlZnRibG9jay0+ZGF0YVtkZXF1ZS0+bGVmdGluZGV4XTsKICAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdGVtLCB2YWx1ZSwgUHlfRVEpOwogCi0gICAgICAgIGlmIChkZXF1ZS0+bGVuICE9IG4pIHsKKyAgICAgICAgaWYgKFB5X1NJWkUoZGVxdWUpICE9IG4pIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLAogICAgICAgICAgICAgICAgICJkZXF1ZSBtdXRhdGVkIGR1cmluZyByZW1vdmUoKS4iKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjIyLDkgKzY5Niw5IEBACiAgICAgICAgIGlmIChjbXAgPiAwKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdGd0ID0gZGVxdWVfcG9wbGVmdChkZXF1ZSwgTlVMTCk7CiAgICAgICAgICAgICBhc3NlcnQgKHRndCAhPSBOVUxMKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih0Z3QpOwotICAgICAgICAgICAgaWYgKF9kZXF1ZV9yb3RhdGUoZGVxdWUsIGkpID09IC0xKQorICAgICAgICAgICAgaWYgKF9kZXF1ZV9yb3RhdGUoZGVxdWUsIGkpKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgUHlfREVDUkVGKHRndCk7CiAgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjbXAgPCAwKSB7CkBAIC02NDUsMTQgKzcxOSwxNCBAQAogewogICAgIFB5T2JqZWN0ICppdGVtOwogCi0gICAgd2hpbGUgKGRlcXVlLT5sZW4pIHsKKyAgICB3aGlsZSAoUHlfU0laRShkZXF1ZSkpIHsKICAgICAgICAgaXRlbSA9IGRlcXVlX3BvcChkZXF1ZSwgTlVMTCk7CiAgICAgICAgIGFzc2VydCAoaXRlbSAhPSBOVUxMKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgIH0KICAgICBhc3NlcnQoZGVxdWUtPmxlZnRibG9jayA9PSBkZXF1ZS0+cmlnaHRibG9jayAmJgogICAgICAgICAgICBkZXF1ZS0+bGVmdGluZGV4IC0gMSA9PSBkZXF1ZS0+cmlnaHRpbmRleCAmJgotICAgICAgICAgICBkZXF1ZS0+bGVuID09IDApOworICAgICAgICAgICBQeV9TSVpFKGRlcXVlKSA9PSAwKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTY2Miw3ICs3MzYsNyBAQAogICAgIFB5T2JqZWN0ICppdGVtOwogICAgIFB5X3NzaXplX3QgbiwgaW5kZXg9aTsKIAotICAgIGlmIChpIDwgMCB8fCBpID49IGRlcXVlLT5sZW4pIHsKKyAgICBpZiAoaSA8IDAgfHwgaSA+PSBQeV9TSVpFKGRlcXVlKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJkZXF1ZSBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC02NzEsMTkgKzc0NSwxOSBAQAogICAgIGlmIChpID09IDApIHsKICAgICAgICAgaSA9IGRlcXVlLT5sZWZ0aW5kZXg7CiAgICAgICAgIGIgPSBkZXF1ZS0+bGVmdGJsb2NrOwotICAgIH0gZWxzZSBpZiAoaSA9PSBkZXF1ZS0+bGVuIC0gMSkgeworICAgIH0gZWxzZSBpZiAoaSA9PSBQeV9TSVpFKGRlcXVlKSAtIDEpIHsKICAgICAgICAgaSA9IGRlcXVlLT5yaWdodGluZGV4OwogICAgICAgICBiID0gZGVxdWUtPnJpZ2h0YmxvY2s7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaSArPSBkZXF1ZS0+bGVmdGluZGV4OwogICAgICAgICBuID0gaSAvIEJMT0NLTEVOOwogICAgICAgICBpICU9IEJMT0NLTEVOOwotICAgICAgICBpZiAoaW5kZXggPCAoZGVxdWUtPmxlbiA+PiAxKSkgeworICAgICAgICBpZiAoaW5kZXggPCAoUHlfU0laRShkZXF1ZSkgPj4gMSkpIHsKICAgICAgICAgICAgIGIgPSBkZXF1ZS0+bGVmdGJsb2NrOwogICAgICAgICAgICAgd2hpbGUgKG4tLSkKICAgICAgICAgICAgICAgICBiID0gYi0+cmlnaHRsaW5rOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbiA9IChkZXF1ZS0+bGVmdGluZGV4ICsgZGVxdWUtPmxlbiAtIDEpIC8gQkxPQ0tMRU4gLSBuOworICAgICAgICAgICAgbiA9IChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgLSAxKSAvIEJMT0NLTEVOIC0gbjsKICAgICAgICAgICAgIGIgPSBkZXF1ZS0+cmlnaHRibG9jazsKICAgICAgICAgICAgIHdoaWxlIChuLS0pCiAgICAgICAgICAgICAgICAgYiA9IGItPmxlZnRsaW5rOwpAQCAtNzA1LDE2ICs3NzksMTYgQEAKIGRlcXVlX2RlbF9pdGVtKGRlcXVlb2JqZWN0ICpkZXF1ZSwgUHlfc3NpemVfdCBpKQogewogICAgIFB5T2JqZWN0ICppdGVtOworICAgIGludCBydjsKIAotICAgIGFzc2VydCAoaSA+PSAwICYmIGkgPCBkZXF1ZS0+bGVuKTsKLSAgICBpZiAoX2RlcXVlX3JvdGF0ZShkZXF1ZSwgLWkpID09IC0xKQorICAgIGFzc2VydCAoaSA+PSAwICYmIGkgPCBQeV9TSVpFKGRlcXVlKSk7CisgICAgaWYgKF9kZXF1ZV9yb3RhdGUoZGVxdWUsIC1pKSkKICAgICAgICAgcmV0dXJuIC0xOwotCiAgICAgaXRlbSA9IGRlcXVlX3BvcGxlZnQoZGVxdWUsIE5VTEwpOworICAgIHJ2ID0gX2RlcXVlX3JvdGF0ZShkZXF1ZSwgaSk7CiAgICAgYXNzZXJ0IChpdGVtICE9IE5VTEwpOwogICAgIFB5X0RFQ1JFRihpdGVtKTsKLQotICAgIHJldHVybiBfZGVxdWVfcm90YXRlKGRlcXVlLCBpKTsKKyAgICByZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTcyMiw3ICs3OTYsNyBAQAogewogICAgIFB5T2JqZWN0ICpvbGRfdmFsdWU7CiAgICAgYmxvY2sgKmI7Ci0gICAgUHlfc3NpemVfdCBuLCBsZW49ZGVxdWUtPmxlbiwgaGFsZmxlbj0obGVuKzEpPj4xLCBpbmRleD1pOworICAgIFB5X3NzaXplX3QgbiwgbGVuPVB5X1NJWkUoZGVxdWUpLCBoYWxmbGVuPShsZW4rMSk+PjEsIGluZGV4PWk7CiAKICAgICBpZiAoaSA8IDAgfHwgaSA+PSBsZW4pIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsCkBAIC03ODUsMTcgKzg1OSwxNyBAQAogICAgIFB5X3NzaXplX3QgaW5kZXg7CiAgICAgUHlfc3NpemVfdCBpbmRleGxvID0gZGVxdWUtPmxlZnRpbmRleDsKIAotICAgIGZvciAoYiA9IGRlcXVlLT5sZWZ0YmxvY2s7IGIgIT0gTlVMTDsgYiA9IGItPnJpZ2h0bGluaykgewotICAgICAgICBjb25zdCBQeV9zc2l6ZV90IGluZGV4aGkgPSBiID09IGRlcXVlLT5yaWdodGJsb2NrID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlcXVlLT5yaWdodGluZGV4IDoKLSAgICAgICAgICAgICAgICAgICAgIEJMT0NLTEVOIC0gMTsKLQotICAgICAgICBmb3IgKGluZGV4ID0gaW5kZXhsbzsgaW5kZXggPD0gaW5kZXhoaTsgKytpbmRleCkgeworICAgIGZvciAoYiA9IGRlcXVlLT5sZWZ0YmxvY2s7IGIgIT0gZGVxdWUtPnJpZ2h0YmxvY2s7IGIgPSBiLT5yaWdodGxpbmspIHsKKyAgICAgICAgZm9yIChpbmRleCA9IGluZGV4bG87IGluZGV4IDwgQkxPQ0tMRU4gOyBpbmRleCsrKSB7CiAgICAgICAgICAgICBpdGVtID0gYi0+ZGF0YVtpbmRleF07CiAgICAgICAgICAgICBQeV9WSVNJVChpdGVtKTsKICAgICAgICAgfQogICAgICAgICBpbmRleGxvID0gMDsKICAgICB9CisgICAgZm9yIChpbmRleCA9IGluZGV4bG87IGluZGV4IDw9IGRlcXVlLT5yaWdodGluZGV4OyBpbmRleCsrKSB7CisgICAgICAgIGl0ZW0gPSBiLT5kYXRhW2luZGV4XTsKKyAgICAgICAgUHlfVklTSVQoaXRlbSk7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC04ODUsOCArOTU5LDggQEAKICAgICB9CiAKICAgICAvKiBTaG9ydGN1dHMgKi8KLSAgICB2cyA9ICgoZGVxdWVvYmplY3QgKil2KS0+bGVuOwotICAgIHdzID0gKChkZXF1ZW9iamVjdCAqKXcpLT5sZW47CisgICAgdnMgPSBQeV9TSVpFKChkZXF1ZW9iamVjdCAqKXYpOworICAgIHdzID0gUHlfU0laRSgoZGVxdWVvYmplY3QgKil3KTsKICAgICBpZiAob3AgPT0gUHlfRVEpIHsKICAgICAgICAgaWYgKHYgPT0gdykKICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwpAQCAtOTg3LDggKzEwNjEsOCBAQAogICAgIFB5X3NzaXplX3QgYmxvY2tzOwogCiAgICAgcmVzID0gc2l6ZW9mKGRlcXVlb2JqZWN0KTsKLSAgICBibG9ja3MgPSAoZGVxdWUtPmxlZnRpbmRleCArIGRlcXVlLT5sZW4gKyBCTE9DS0xFTiAtIDEpIC8gQkxPQ0tMRU47Ci0gICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggKyBkZXF1ZS0+bGVuIC0gMSA9PQorICAgIGJsb2NrcyA9IChkZXF1ZS0+bGVmdGluZGV4ICsgUHlfU0laRShkZXF1ZSkgKyBCTE9DS0xFTiAtIDEpIC8gQkxPQ0tMRU47CisgICAgYXNzZXJ0KGRlcXVlLT5sZWZ0aW5kZXggKyBQeV9TSVpFKGRlcXVlKSAtIDEgPT0KICAgICAgICAgICAgKGJsb2NrcyAtIDEpICogQkxPQ0tMRU4gKyBkZXF1ZS0+cmlnaHRpbmRleCk7CiAgICAgcmVzICs9IGJsb2NrcyAqIHNpemVvZihibG9jayk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOwpAQCAtMTE0MSw3ICsxMjE1LDcgQEAKICAgICBQeV9JTkNSRUYoZGVxdWUpOwogICAgIGl0LT5kZXF1ZSA9IGRlcXVlOwogICAgIGl0LT5zdGF0ZSA9IGRlcXVlLT5zdGF0ZTsKLSAgICBpdC0+Y291bnRlciA9IGRlcXVlLT5sZW47CisgICAgaXQtPmNvdW50ZXIgPSBQeV9TSVpFKGRlcXVlKTsKICAgICBQeU9iamVjdF9HQ19UcmFjayhpdCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWl0OwogfQpAQCAtMTE4MCw3ICsxMjU0LDcgQEAKICAgICBpdC0+aW5kZXgrKzsKICAgICBpdC0+Y291bnRlci0tOwogICAgIGlmIChpdC0+aW5kZXggPT0gQkxPQ0tMRU4gJiYgaXQtPmNvdW50ZXIgPiAwKSB7Ci0gICAgICAgIGFzc2VydCAoaXQtPmItPnJpZ2h0bGluayAhPSBOVUxMKTsKKyAgICAgICAgQ0hFQ0tfTk9UX0VORChpdC0+Yi0+cmlnaHRsaW5rKTsKICAgICAgICAgaXQtPmIgPSBpdC0+Yi0+cmlnaHRsaW5rOwogICAgICAgICBpdC0+aW5kZXggPSAwOwogICAgIH0KQEAgLTEyMjgsNyArMTMwMiw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGVxdWVpdGVyX3JlZHVjZShkZXF1ZWl0ZXJvYmplY3QgKml0KQogewotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9uKSIsIFB5X1RZUEUoaXQpLCBpdC0+ZGVxdWUsIGl0LT5kZXF1ZS0+bGVuIC0gaXQtPmNvdW50ZXIpOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJPKE9uKSIsIFB5X1RZUEUoaXQpLCBpdC0+ZGVxdWUsIFB5X1NJWkUoaXQtPmRlcXVlKSAtIGl0LT5jb3VudGVyKTsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGRlcXVlaXRlcl9tZXRob2RzW10gPSB7CkBAIC0xMjk3LDcgKzEzNzEsNyBAQAogICAgIFB5X0lOQ1JFRihkZXF1ZSk7CiAgICAgaXQtPmRlcXVlID0gZGVxdWU7CiAgICAgaXQtPnN0YXRlID0gZGVxdWUtPnN0YXRlOwotICAgIGl0LT5jb3VudGVyID0gZGVxdWUtPmxlbjsKKyAgICBpdC0+Y291bnRlciA9IFB5X1NJWkUoZGVxdWUpOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKGl0KTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopaXQ7CiB9CkBAIC0xMzIyLDcgKzEzOTYsNyBAQAogICAgIGl0LT5pbmRleC0tOwogICAgIGl0LT5jb3VudGVyLS07CiAgICAgaWYgKGl0LT5pbmRleCA9PSAtMSAmJiBpdC0+Y291bnRlciA+IDApIHsKLSAgICAgICAgYXNzZXJ0IChpdC0+Yi0+bGVmdGxpbmsgIT0gTlVMTCk7CisgICAgICAgIENIRUNLX05PVF9FTkQoaXQtPmItPmxlZnRsaW5rKTsKICAgICAgICAgaXQtPmIgPSBpdC0+Yi0+bGVmdGxpbms7CiAgICAgICAgIGl0LT5pbmRleCA9IEJMT0NLTEVOIC0gMTsKICAgICB9CkBAIC0xNjA2LDcgKzE2ODAsNyBAQAogICAgICAgICAgICAgbmV3ZGVmYXVsdCA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCk7CiAgICAgICAgICAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2sobmV3ZGVmYXVsdCkgJiYgbmV3ZGVmYXVsdCAhPSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgY2FsbGFibGUiKTsKKyAgICAgICAgICAgICAgICAgICAgImZpcnN0IGFyZ3VtZW50IG11c3QgYmUgY2FsbGFibGUgb3IgTm9uZSIpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTc0Miw3ICsxODE2LDcgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgYm91bmRfZ2V0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtYXBwaW5nLCAiZ2V0Iik7CisgICAgICAgIGJvdW5kX2dldCA9IF9QeU9iamVjdF9HZXRBdHRySWQobWFwcGluZywgJlB5SWRfZ2V0KTsKICAgICAgICAgaWYgKGJvdW5kX2dldCA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBkb25lOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jcnlwdG1vZHVsZS5jIGIvTW9kdWxlcy9fY3J5cHRtb2R1bGUuYwppbmRleCA1MTAwNzg4Li5kYTQ0ZWYzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jcnlwdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2NyeXB0bW9kdWxlLmMKQEAgLTUsNDAgKzUsNzYgQEAKIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCi0jaWZkZWYgX19WTVMKLSNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotI2VuZGlmCi0KIC8qIE1vZHVsZSBjcnlwdCAqLwogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgY3J5cHQKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PWM2MjUyY2Y0ZjJmMmFlODFdKi8KIAotc3RhdGljIFB5T2JqZWN0ICpjcnlwdF9jcnlwdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisKKy8qW2NsaW5pYyBpbnB1dF0KK2NyeXB0LmNyeXB0CisKKyAgICB3b3JkOiAncycKKyAgICBzYWx0OiAncycKKyAgICAvCisKK0hhc2ggYSAqd29yZCogd2l0aCB0aGUgZ2l2ZW4gKnNhbHQqIGFuZCByZXR1cm4gdGhlIGhhc2hlZCBwYXNzd29yZC4KKworKndvcmQqIHdpbGwgdXN1YWxseSBiZSBhIHVzZXIncyBwYXNzd29yZC4gICpzYWx0KiAoZWl0aGVyIGEgcmFuZG9tIDIgb3IgMTYKK2NoYXJhY3RlciBzdHJpbmcsIHBvc3NpYmx5IHByZWZpeGVkIHdpdGggJGRpZ2l0JCB0byBpbmRpY2F0ZSB0aGUgbWV0aG9kKQord2lsbCBiZSB1c2VkIHRvIHBlcnR1cmIgdGhlIGVuY3J5cHRpb24gYWxnb3JpdGhtIGFuZCBwcm9kdWNlIGRpc3RpbmN0CityZXN1bHRzIGZvciBhIGdpdmVuICp3b3JkKi4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoY3J5cHRfY3J5cHRfX2RvY19fLAorImNyeXB0KCRtb2R1bGUsIHdvcmQsIHNhbHQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJIYXNoIGEgKndvcmQqIHdpdGggdGhlIGdpdmVuICpzYWx0KiBhbmQgcmV0dXJuIHRoZSBoYXNoZWQgcGFzc3dvcmQuXG4iCisiXG4iCisiKndvcmQqIHdpbGwgdXN1YWxseSBiZSBhIHVzZXJcJ3MgcGFzc3dvcmQuICAqc2FsdCogKGVpdGhlciBhIHJhbmRvbSAyIG9yIDE2XG4iCisiY2hhcmFjdGVyIHN0cmluZywgcG9zc2libHkgcHJlZml4ZWQgd2l0aCAkZGlnaXQkIHRvIGluZGljYXRlIHRoZSBtZXRob2QpXG4iCisid2lsbCBiZSB1c2VkIHRvIHBlcnR1cmIgdGhlIGVuY3J5cHRpb24gYWxnb3JpdGhtIGFuZCBwcm9kdWNlIGRpc3RpbmN0XG4iCisicmVzdWx0cyBmb3IgYSBnaXZlbiAqd29yZCouIik7CisKKyNkZWZpbmUgQ1JZUFRfQ1JZUFRfTUVUSE9EREVGICAgIFwKKyAgICB7ImNyeXB0IiwgKFB5Q0Z1bmN0aW9uKWNyeXB0X2NyeXB0LCBNRVRIX1ZBUkFSR1MsIGNyeXB0X2NyeXB0X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitjcnlwdF9jcnlwdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGNvbnN0IGNoYXIgKndvcmQsIGNvbnN0IGNoYXIgKnNhbHQpOworCitzdGF0aWMgUHlPYmplY3QgKgorY3J5cHRfY3J5cHQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgY2hhciAqd29yZCwgKnNhbHQ7Ci0jaWZuZGVmIF9fVk1TCi0gICAgZXh0ZXJuIGNoYXIgKiBjcnlwdChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Ci0jZW5kaWYKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICp3b3JkOworICAgIGNvbnN0IGNoYXIgKnNhbHQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNzOmNyeXB0IiwgJndvcmQsICZzYWx0KSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJzczpjcnlwdCIsCisgICAgICAgICZ3b3JkLCAmc2FsdCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBjcnlwdF9jcnlwdF9pbXBsKG1vZHVsZSwgd29yZCwgc2FsdCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2NyeXB0X2NyeXB0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqd29yZCwgY29uc3QgY2hhciAqc2FsdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zZWFhY2RmOTk0YTZmZjIzIGlucHV0PTRkOTNiNmQwZjQxZmJmNThdKi8KK3sKICAgICAvKiBPbiBzb21lIHBsYXRmb3JtcyAoQXRoZU9TKSBjcnlwdCByZXR1cm5zIE5VTEwgZm9yIGFuIGludmFsaWQKICAgICAgICBzYWx0LiBSZXR1cm4gTm9uZSBpbiB0aGF0IGNhc2UuIFhYWCBNYXliZSByYWlzZSBhbiBleGNlcHRpb24/ICAqLwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJzIiwgY3J5cHQod29yZCwgc2FsdCkpOwotCiB9CiAKLVB5RG9jX1NUUlZBUihjcnlwdF9jcnlwdF9fZG9jX18sCi0iY3J5cHQod29yZCwgc2FsdCkgLT4gc3RyaW5nXG5cCi13b3JkIHdpbGwgdXN1YWxseSBiZSBhIHVzZXIncyBwYXNzd29yZC4gc2FsdCBpcyBhIDItY2hhcmFjdGVyIHN0cmluZ1xuXAotd2hpY2ggd2lsbCBiZSB1c2VkIHRvIHNlbGVjdCBvbmUgb2YgNDA5NiB2YXJpYXRpb25zIG9mIERFUy4gVGhlIGNoYXJhY3RlcnNcblwKLWluIHNhbHQgbXVzdCBiZSBlaXRoZXIgXCIuXCIsIFwiL1wiLCBvciBhbiBhbHBoYW51bWVyaWMgY2hhcmFjdGVyLiBSZXR1cm5zXG5cCi10aGUgaGFzaGVkIHBhc3N3b3JkIGFzIGEgc3RyaW5nLCB3aGljaCB3aWxsIGJlIGNvbXBvc2VkIG9mIGNoYXJhY3RlcnMgZnJvbVxuXAotdGhlIHNhbWUgYWxwaGFiZXQgYXMgdGhlIHNhbHQuIik7Ci0KIAogc3RhdGljIFB5TWV0aG9kRGVmIGNyeXB0X21ldGhvZHNbXSA9IHsKLSAgICB7ImNyeXB0IiwgICAgICAgICAgIGNyeXB0X2NyeXB0LCBNRVRIX1ZBUkFSR1MsIGNyeXB0X2NyeXB0X19kb2NfX30sCisgICAgQ1JZUFRfQ1JZUFRfTUVUSE9EREVGCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Nzdi5jIGIvTW9kdWxlcy9fY3N2LmMKaW5kZXggZGNiNjcxZS4uZWQ2MDU1ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3N2LmMKKysrIGIvTW9kdWxlcy9fY3N2LmMKQEAgLTUxLDcgKzUxLDcgQEAKIHR5cGVkZWYgZW51bSB7CiAgICAgU1RBUlRfUkVDT1JELCBTVEFSVF9GSUVMRCwgRVNDQVBFRF9DSEFSLCBJTl9GSUVMRCwKICAgICBJTl9RVU9URURfRklFTEQsIEVTQ0FQRV9JTl9RVU9URURfRklFTEQsIFFVT1RFX0lOX1FVT1RFRF9GSUVMRCwKLSAgICBFQVRfQ1JOTAorICAgIEVBVF9DUk5MLEFGVEVSX0VTQ0FQRURfQ1JOTAogfSBQYXJzZXJTdGF0ZTsKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTU1Myw3ICs1NTMsMTAgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZmllbGQgPSB0bXA7CiAgICAgfQotICAgIFB5TGlzdF9BcHBlbmQoc2VsZi0+ZmllbGRzLCBmaWVsZCk7CisgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VsZi0+ZmllbGRzLCBmaWVsZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihmaWVsZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgUHlfREVDUkVGKGZpZWxkKTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTY1MSw2ICs2NTQsMTIgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVTQ0FQRURfQ0hBUjoKKyAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjPT0nXHInKSB7CisgICAgICAgICAgICBpZiAocGFyc2VfYWRkX2NoYXIoc2VsZiwgYykgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHNlbGYtPnN0YXRlID0gQUZURVJfRVNDQVBFRF9DUk5MOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgaWYgKGMgPT0gJ1wwJykKICAgICAgICAgICAgIGMgPSAnXG4nOwogICAgICAgICBpZiAocGFyc2VfYWRkX2NoYXIoc2VsZiwgYykgPCAwKQpAQCAtNjU4LDYgKzY2NywxMSBAQAogICAgICAgICBzZWxmLT5zdGF0ZSA9IElOX0ZJRUxEOwogICAgICAgICBicmVhazsKIAorICAgIGNhc2UgQUZURVJfRVNDQVBFRF9DUk5MOgorICAgICAgICBpZiAoYyA9PSAnXDAnKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qZmFsbHRocnUqLworCiAgICAgY2FzZSBJTl9GSUVMRDoKICAgICAgICAgLyogaW4gdW5xdW90ZWQgZmllbGQgKi8KICAgICAgICAgaWYgKGMgPT0gJ1xuJyB8fCBjID09ICdccicgfHwgYyA9PSAnXDAnKSB7CkBAIC0xNTY0LDcgKzE1NzgsNyBAQAogInByb3ZpZGVkIGJ5IHRoZSBkaWFsZWN0LlxuIgogIlxuIgogIlRoZSByZXR1cm5lZCBvYmplY3QgaXMgYW4gaXRlcmF0b3IuICBFYWNoIGl0ZXJhdGlvbiByZXR1cm5zIGEgcm93XG4iCi0ib2YgdGhlIENTViBmaWxlICh3aGljaCBjYW4gc3BhbiBtdWx0aXBsZSBpbnB1dCBsaW5lcyk6XG4iKTsKKyJvZiB0aGUgQ1NWIGZpbGUgKHdoaWNoIGNhbiBzcGFuIG11bHRpcGxlIGlucHV0IGxpbmVzKS5cbiIpOwogCiBQeURvY19TVFJWQVIoY3N2X3dyaXRlcl9kb2MsCiAiICAgIGNzdl93cml0ZXIgPSBjc3Yud3JpdGVyKGZpbGVvYmogWywgZGlhbGVjdD0nZXhjZWwnXVxuIgpAQCAtMTU5MCw3ICsxNjA0LDcgQEAKIAogUHlEb2NfU1RSVkFSKGNzdl9yZWdpc3Rlcl9kaWFsZWN0X2RvYywKICJDcmVhdGUgYSBtYXBwaW5nIGZyb20gYSBzdHJpbmcgbmFtZSB0byBhIGRpYWxlY3QgY2xhc3MuXG4iCi0iICAgIGRpYWxlY3QgPSBjc3YucmVnaXN0ZXJfZGlhbGVjdChuYW1lLCBkaWFsZWN0KSIpOworIiAgICBkaWFsZWN0ID0gY3N2LnJlZ2lzdGVyX2RpYWxlY3QobmFtZVssIGRpYWxlY3RbLCAqKmZtdHBhcmFtc11dKSIpOwogCiBQeURvY19TVFJWQVIoY3N2X3VucmVnaXN0ZXJfZGlhbGVjdF9kb2MsCiAiRGVsZXRlIHRoZSBuYW1lL2RpYWxlY3QgbWFwcGluZyBhc3NvY2lhdGVkIHdpdGggYSBzdHJpbmcgbmFtZS5cbiIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMgYi9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlcy5jCmluZGV4IDQ4MzUxYmUuLjJiMjdlZDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXMuYwpAQCAtMjc2LDggKzI3NiwxMCBAQAogICAgIGlmIChwcmVmaXgpCiAgICAgICAgIGxlbiArPSBzdHJsZW4ocHJlZml4KTsKICAgICByZXN1bHQgPSBQeU1lbV9NYWxsb2MobGVuICsgMSk7Ci0gICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgaWYgKHByZWZpeCkKICAgICAgICAgc3RyY3B5KHJlc3VsdCwgcHJlZml4KTsKICAgICBlbHNlCkBAIC0yODcsNiArMjg5LDQ4IEBACiB9CiAKIC8qCisgIEFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrIGZvciBhIHBlcDMxMTggZm9ybWF0IHN0cmluZywgYWRkaW5nCisgIHRoZSBnaXZlbiBwcmVmaXggKGlmIG5vbi1udWxsKSwgYW4gYWRkaXRpb25hbCBzaGFwZSBwcmVmaXgsIGFuZCBhIHN1ZmZpeC4KKyAgUmV0dXJucyBOVUxMIG9uIGZhaWx1cmUsIHdpdGggdGhlIGVycm9yIGluZGljYXRvciBzZXQuICBJZiBjYWxsZWQgd2l0aAorICBhIHN1ZmZpeCBvZiBOVUxMIHRoZSBlcnJvciBpbmRpY2F0b3IgbXVzdCBhbHJlYWR5IGJlIHNldC4KKyAqLworY2hhciAqCitfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmdfd2l0aF9zaGFwZShpbnQgbmRpbSwgY29uc3QgUHlfc3NpemVfdCAqc2hhcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKyAgICBjaGFyICpuZXdfcHJlZml4OworICAgIGNoYXIgKnJlc3VsdDsKKyAgICBjaGFyIGJ1ZlszMl07CisgICAgaW50IHByZWZpeF9sZW47CisgICAgaW50IGs7CisKKyAgICBwcmVmaXhfbGVuID0gMzIgKiBuZGltICsgMzsKKyAgICBpZiAocHJlZml4KQorICAgICAgICBwcmVmaXhfbGVuICs9IHN0cmxlbihwcmVmaXgpOworICAgIG5ld19wcmVmaXggPSBQeU1lbV9NYWxsb2MocHJlZml4X2xlbik7CisgICAgaWYgKG5ld19wcmVmaXggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbmV3X3ByZWZpeFswXSA9ICdcMCc7CisgICAgaWYgKHByZWZpeCkKKyAgICAgICAgc3RyY3B5KG5ld19wcmVmaXgsIHByZWZpeCk7CisgICAgaWYgKG5kaW0gPiAwKSB7CisgICAgICAgIC8qIEFkZCB0aGUgcHJlZml4ICIoc2hhcGVbMF0sc2hhcGVbMV0sLi4uLHNoYXBlW25kaW0tMV0pIiAqLworICAgICAgICBzdHJjYXQobmV3X3ByZWZpeCwgIigiKTsKKyAgICAgICAgZm9yIChrID0gMDsgayA8IG5kaW07ICsraykgeworICAgICAgICAgICAgaWYgKGsgPCBuZGltLTEpIHsKKyAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZiwgIiUiUFlfRk9STUFUX1NJWkVfVCJkLCIsIHNoYXBlW2tdKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICIlIlBZX0ZPUk1BVF9TSVpFX1QiZCkiLCBzaGFwZVtrXSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdHJjYXQobmV3X3ByZWZpeCwgYnVmKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXN1bHQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcobmV3X3ByZWZpeCwgc3VmZml4KTsKKyAgICBQeU1lbV9GcmVlKG5ld19wcmVmaXgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qCiAgIFB5Q1N0cnVjdFR5cGVfVHlwZSAtIGEgbWV0YSB0eXBlL2NsYXNzLiAgQ3JlYXRpbmcgYSBuZXcgY2xhc3MgdXNpbmcgdGhpcyBvbmUgYXMKICAgX19tZXRhY2xhc3NfXyB3aWxsIGNhbGwgdGhlIGNvbnRydWN0b3IgU3RydWN0VW5pb25UeXBlX25ldy4gIEl0IHJlcGxhY2VzIHRoZQogICB0cF9kaWN0IG1lbWJlciB3aXRoIGEgbmV3IGluc3RhbmNlIG9mIFN0Z0RpY3QsIGFuZCBpbml0aWFsaXplcyB0aGUgQwpAQCAtNDE5LDUwICs0NjMsNjUgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBDRGF0YVR5cGVfZnJvbV9idWZmZXIoUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHZvaWQgKmJ1ZmZlcjsKLSAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9sZW47CisgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeU9iamVjdCAqbXY7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeV9idWZmZXIgKmJ1ZmZlcjsKICAgICBQeV9zc2l6ZV90IG9mZnNldCA9IDA7Ci0gICAgUHlPYmplY3QgKm9iaiwgKnJlc3VsdDsKKwogICAgIFN0Z0RpY3RPYmplY3QgKmRpY3QgPSBQeVR5cGVfc3RnZGljdCh0eXBlKTsKICAgICBhc3NlcnQgKGRpY3QpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCi0jaWYgKFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk98aTpmcm9tX2J1ZmZlciIsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xuOmZyb21fYnVmZmVyIiwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAmb2JqLCAmb2Zmc2V0KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98bjpmcm9tX2J1ZmZlciIsICZvYmosICZvZmZzZXQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICgtMSA9PSBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyKG9iaiwgJmJ1ZmZlciwgJmJ1ZmZlcl9sZW4pKQorICAgIG12ID0gUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Qob2JqKTsKKyAgICBpZiAobXYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBidWZmZXIgPSBQeU1lbW9yeVZpZXdfR0VUX0JVRkZFUihtdik7CisKKyAgICBpZiAoYnVmZmVyLT5yZWFkb25seSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgInVuZGVybHlpbmcgYnVmZmVyIGlzIG5vdCB3cml0YWJsZSIpOworICAgICAgICBQeV9ERUNSRUYobXYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIVB5QnVmZmVyX0lzQ29udGlndW91cyhidWZmZXIsICdDJykpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJ1bmRlcmx5aW5nIGJ1ZmZlciBpcyBub3QgQyBjb250aWd1b3VzIik7CisgICAgICAgIFB5X0RFQ1JFRihtdik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIGlmIChvZmZzZXQgPCAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm9mZnNldCBjYW5ub3QgYmUgbmVnYXRpdmUiKTsKKyAgICAgICAgUHlfREVDUkVGKG12KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChkaWN0LT5zaXplID4gYnVmZmVyX2xlbiAtIG9mZnNldCkgeworCisgICAgaWYgKGRpY3QtPnNpemUgPiBidWZmZXItPmxlbiAtIG9mZnNldCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJWQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlZCBieXRlcykiLAotI2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCV6ZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICV6ZCBieXRlcykiLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuLCBkaWN0LT5zaXplICsgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgIgorICAgICAgICAgICAgICAgICAgICAgIiglemQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlemQgYnl0ZXMpIiwKKyAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci0+bGVuLCBkaWN0LT5zaXplICsgb2Zmc2V0KTsKKyAgICAgICAgUHlfREVDUkVGKG12KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gUHlDRGF0YV9BdEFkZHJlc3ModHlwZSwgKGNoYXIgKilidWZmZXIgKyBvZmZzZXQpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICByZXN1bHQgPSBQeUNEYXRhX0F0QWRkcmVzcyh0eXBlLCAoY2hhciAqKWJ1ZmZlci0+YnVmICsgb2Zmc2V0KTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG12KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgUHlfSU5DUkVGKG9iaik7Ci0gICAgaWYgKC0xID09IEtlZXBSZWYoKENEYXRhT2JqZWN0ICopcmVzdWx0LCAtMSwgb2JqKSkgeworICAgIGlmICgtMSA9PSBLZWVwUmVmKChDRGF0YU9iamVjdCAqKXJlc3VsdCwgLTEsIG12KSkgewogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNDc1LDQ3ICs1MzQsMzYgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBDRGF0YVR5cGVfZnJvbV9idWZmZXJfY29weShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgY29uc3Qgdm9pZCAqYnVmZmVyOwotICAgIFB5X3NzaXplX3QgYnVmZmVyX2xlbjsKKyAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5X3NzaXplX3Qgb2Zmc2V0ID0gMDsKLSAgICBQeU9iamVjdCAqb2JqLCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CiAgICAgU3RnRGljdE9iamVjdCAqZGljdCA9IFB5VHlwZV9zdGdkaWN0KHR5cGUpOwogICAgIGFzc2VydCAoZGljdCk7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgICAgICAiT3xpOmZyb21fYnVmZmVyIiwKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJPfG46ZnJvbV9idWZmZXIiLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZvYmosICZvZmZzZXQpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmICgtMSA9PSBQeU9iamVjdF9Bc1JlYWRCdWZmZXIob2JqLCAoY29uc3Qgdm9pZCoqKSZidWZmZXIsICZidWZmZXJfbGVuKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfG46ZnJvbV9idWZmZXIiLCAmYnVmZmVyLCAmb2Zmc2V0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAob2Zmc2V0IDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJvZmZzZXQgY2Fubm90IGJlIG5lZ2F0aXZlIik7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChkaWN0LT5zaXplID4gYnVmZmVyX2xlbiAtIG9mZnNldCkgeworICAgIGlmIChkaWN0LT5zaXplID4gYnVmZmVyLmxlbiAtIG9mZnNldCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSNpZiAoUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwKQotICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBzaXplIHRvbyBzbWFsbCAoJWQgaW5zdGVhZCBvZiBhdCBsZWFzdCAlZCBieXRlcykiLAotI2Vsc2UKICAgICAgICAgICAgICAgICAgICAgICJCdWZmZXIgc2l6ZSB0b28gc21hbGwgKCV6ZCBpbnN0ZWFkIG9mIGF0IGxlYXN0ICV6ZCBieXRlcykiLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICBidWZmZXJfbGVuLCBkaWN0LT5zaXplICsgb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5sZW4sIGRpY3QtPnNpemUgKyBvZmZzZXQpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICByZXN1bHQgPSBHZW5lcmljUHlDRGF0YV9uZXcoKFB5VHlwZU9iamVjdCAqKXR5cGUsIE5VTEwsIE5VTEwpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbWVtY3B5KCgoQ0RhdGFPYmplY3QgKilyZXN1bHQpLT5iX3B0ciwKLSAgICAgICAgICAgKGNoYXIgKilidWZmZXIrb2Zmc2V0LCBkaWN0LT5zaXplKTsKKyAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKKyAgICAgICAgbWVtY3B5KCgoQ0RhdGFPYmplY3QgKilyZXN1bHQpLT5iX3B0ciwKKyAgICAgICAgICAgICAgIChjaGFyICopYnVmZmVyLmJ1ZiArIG9mZnNldCwgZGljdC0+c2l6ZSk7CisgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtNTY1LDcgKzYxMyw3IEBACiAjaWZkZWYgX19DWUdXSU5fXwogLyogZGxlcnJvcigpIGlzbid0IHZlcnkgaGVscGZ1bCBvbiBjeWd3aW4gKi8KICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAic3ltYm9sICclcycgbm90IGZvdW5kICglcykgIiwKKyAgICAgICAgICAgICAgICAgICAgICJzeW1ib2wgJyVzJyBub3QgZm91bmQiLAogICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAjZWxzZQogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgY3R5cGVzX2RsZXJyb3IoKSk7CkBAIC04NzksMTQgKzkyNywyMSBAQAogCiAgICAgaWYgKHByb3RvKSB7CiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKml0ZW1kaWN0ID0gUHlUeXBlX3N0Z2RpY3QocHJvdG8pOworICAgICAgICBjb25zdCBjaGFyICpjdXJyZW50X2Zvcm1hdDsKICAgICAgICAgYXNzZXJ0KGl0ZW1kaWN0KTsKICAgICAgICAgLyogSWYgaXRlbWRpY3QtPmZvcm1hdCBpcyBOVUxMLCB0aGVuIHRoaXMgaXMgYSBwb2ludGVyIHRvIGFuCiAgICAgICAgICAgIGluY29tcGxldGUgdHlwZS4gIFdlIGNyZWF0ZSBhIGdlbmVyaWMgZm9ybWF0IHN0cmluZwogICAgICAgICAgICAncG9pbnRlciB0byBieXRlcycgaW4gdGhpcyBjYXNlLiAgWFhYIEJldHRlciB3b3VsZCBiZSB0bwogICAgICAgICAgICBmaXggdGhlIGZvcm1hdCBzdHJpbmcgbGF0ZXIuLi4KICAgICAgICAgKi8KLSAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKCImIiwKLSAgICAgICAgICAgICAgICAgICAgICBpdGVtZGljdC0+Zm9ybWF0ID8gaXRlbWRpY3QtPmZvcm1hdCA6ICJCIik7CisgICAgICAgIGN1cnJlbnRfZm9ybWF0ID0gaXRlbWRpY3QtPmZvcm1hdCA/IGl0ZW1kaWN0LT5mb3JtYXQgOiAiQiI7CisgICAgICAgIGlmIChpdGVtZGljdC0+c2hhcGUgIT0gTlVMTCkgeworICAgICAgICAgICAgLyogcG9pbnRlciB0byBhbiBhcnJheTogdGhlIHNoYXBlIG5lZWRzIHRvIGJlIHByZWZpeGVkICovCisgICAgICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmdfd2l0aF9zaGFwZSgKKyAgICAgICAgICAgICAgICBpdGVtZGljdC0+bmRpbSwgaXRlbWRpY3QtPnNoYXBlLCAiJiIsIGN1cnJlbnRfZm9ybWF0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZygiJiIsIGN1cnJlbnRfZm9ybWF0KTsKKyAgICAgICAgfQogICAgICAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRigoUHlPYmplY3QgKilzdGdkaWN0KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTA1MCw3ICsxMTA1LDcgQEAKICAgICBwdHIgPSB2aWV3LmJ1ZjsKICAgICBpZiAoc2l6ZSA+IHNlbGYtPmJfc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxvbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJieXRlIHN0cmluZyB0b28gbG9uZyIpOwogICAgICAgICBnb3RvIGZhaWw7CiAgICAgfQogCkBAIC0xMTAyLDcgKzExNTcsNyBAQAogICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHZhbHVlKTsKICAgICBpZiAoc2l6ZSA+IHNlbGYtPmJfc2l6ZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxvbmciKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJieXRlIHN0cmluZyB0b28gbG9uZyIpOwogICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMTI2NCw3ICsxMzE5LDYgQEAKICAgICBsb25nIGxlbmd0aDsKICAgICBpbnQgb3ZlcmZsb3c7CiAgICAgUHlfc3NpemVfdCBpdGVtc2l6ZSwgaXRlbWFsaWduOwotICAgIGNoYXIgYnVmWzMyXTsKIAogICAgIC8qIGNyZWF0ZSB0aGUgbmV3IGluc3RhbmNlICh3aGljaCBpcyBhIGNsYXNzLAogICAgICAgIHNpbmNlIHdlIGFyZSBhIG1ldGF0eXBlISkgKi8KQEAgLTEzMTQsMTkgKzEzNjgsMTUgQEAKICAgICB9CiAKICAgICBhc3NlcnQoaXRlbWRpY3QtPmZvcm1hdCk7Ci0gICAgaWYgKGl0ZW1kaWN0LT5mb3JtYXRbMF0gPT0gJygnKSB7Ci0gICAgICAgIHNwcmludGYoYnVmLCAiKCVsZCwiLCBsZW5ndGgpOwotICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoYnVmLCBpdGVtZGljdC0+Zm9ybWF0KzEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHNwcmludGYoYnVmLCAiKCVsZCkiLCBsZW5ndGgpOwotICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoYnVmLCBpdGVtZGljdC0+Zm9ybWF0KTsKLSAgICB9CisgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsIGl0ZW1kaWN0LT5mb3JtYXQpOwogICAgIGlmIChzdGdkaWN0LT5mb3JtYXQgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBzdGdkaWN0LT5uZGltID0gaXRlbWRpY3QtPm5kaW0gKyAxOwotICAgIHN0Z2RpY3QtPnNoYXBlID0gUHlNZW1fTWFsbG9jKHNpemVvZihQeV9zc2l6ZV90ICopICogc3RnZGljdC0+bmRpbSk7Ci0gICAgaWYgKHN0Z2RpY3QtPnNoYXBlID09IE5VTEwpCisgICAgc3RnZGljdC0+c2hhcGUgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5X3NzaXplX3QpICogc3RnZGljdC0+bmRpbSk7CisgICAgaWYgKHN0Z2RpY3QtPnNoYXBlID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgc3RnZGljdC0+c2hhcGVbMF0gPSBsZW5ndGg7CiAgICAgbWVtbW92ZSgmc3RnZGljdC0+c2hhcGVbMV0sIGl0ZW1kaWN0LT5zaGFwZSwKICAgICAgICAgc2l6ZW9mKFB5X3NzaXplX3QpICogKHN0Z2RpY3QtPm5kaW0gLSAxKSk7CkBAIC0xMzU3LDcgKzE0MDcsOCBAQAogICAgIGlmICgtMSA9PSBQeURpY3RfVXBkYXRlKChQeU9iamVjdCAqKXN0Z2RpY3QsIHJlc3VsdC0+dHBfZGljdCkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgUHlfREVDUkVGKHJlc3VsdC0+dHBfZGljdCk7Ci0gICAgcmVzdWx0LT50cF9kaWN0ID0gKFB5T2JqZWN0ICopc3RnZGljdDsKKyAgICByZXN1bHQtPnRwX2RpY3QgPSAoUHlPYmplY3QgKilzdGdkaWN0OyAgLyogc3RlYWwgdGhlIHJlZmVyZW5jZSAqLworICAgIHN0Z2RpY3QgPSBOVUxMOwogCiAgICAgLyogU3BlY2lhbCBjYXNlIGZvciBjaGFyYWN0ZXIgYXJyYXlzLgogICAgICAgIEEgcGVybWFuZW50IGFubm95YW5jZTogY2hhciBhcnJheXMgYXJlIGFsc28gc3RyaW5ncyEKQEAgLTE0NDUsNyArMTQ5Niw3IEBACiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgcmV0dXJuIFB5X05vbmU7CiAgICAgfQotICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpIHx8IFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKSB7CisgICAgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgUHlDQXJnT2JqZWN0ICpwYXJnOwogICAgICAgICBzdHJ1Y3QgZmllbGRkZXNjICpmZCA9IF9jdHlwZXNfZ2V0X2ZpZWxkZGVzYygiWiIpOwogCkBAIC0xNTk3LDI1ICsxNjQ4LDggQEAKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKXBhcmc7CiAgICAgfQogICAgIC8qIFhYWCBzdHJ1bmk6IHJlbW92ZSBsYXRlciAqLwotLyogc3RyaW5nICovCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIFB5Q0FyZ09iamVjdCAqcGFyZzsKLSAgICAgICAgc3RydWN0IGZpZWxkZGVzYyAqZmQgPSBfY3R5cGVzX2dldF9maWVsZGRlc2MoInoiKTsKLQotICAgICAgICBwYXJnID0gUHlDQXJnT2JqZWN0X25ldygpOwotICAgICAgICBpZiAocGFyZyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHBhcmctPnBmZmlfdHlwZSA9ICZmZmlfdHlwZV9wb2ludGVyOwotICAgICAgICBwYXJnLT50YWcgPSAneic7Ci0gICAgICAgIHBhcmctPm9iaiA9IGZkLT5zZXRmdW5jKCZwYXJnLT52YWx1ZSwgdmFsdWUsIDApOwotICAgICAgICBpZiAocGFyZy0+b2JqID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihwYXJnKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAoUHlPYmplY3QgKilwYXJnOwotICAgIH0KIC8qIGJ5dGVzICovCi0gICAgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKHZhbHVlKSkgeworICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSkgewogICAgICAgICBQeUNBcmdPYmplY3QgKnBhcmc7CiAgICAgICAgIHN0cnVjdCBmaWVsZGRlc2MgKmZkID0gX2N0eXBlc19nZXRfZmllbGRkZXNjKCJ6Iik7CiAKQEAgLTIyNTksNiArMjI5MywxMCBAQAogICAgICAgIGFyZ3R5cGVzIHdvdWxkIGJlIGEgY3R5cGVzIHR5cGUpLgogICAgICovCiAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKE5VTEwsICJYe30iKTsKKyAgICBpZiAoc3RnZGljdC0+Zm9ybWF0ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKChQeU9iamVjdCAqKXN0Z2RpY3QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgc3RnZGljdC0+ZmxhZ3MgfD0gVFlQRUZMQUdfSVNQT0lOVEVSOwogCiAgICAgLyogY3JlYXRlIHRoZSBuZXcgaW5zdGFuY2UgKHdoaWNoIGlzIGEgY2xhc3MsCkBAIC0yMzQxLDYgKzIzNzksOCBAQAogICAgIGlmIChzZWxmLT5iX29iamVjdHMgPT0gTlVMTCkgewogICAgICAgICBpZiAoc2VsZi0+Yl9sZW5ndGgpIHsKICAgICAgICAgICAgIHNlbGYtPmJfb2JqZWN0cyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgIGlmIChzZWxmLT5iX29iamVjdHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgICAgIHNlbGYtPmJfb2JqZWN0cyA9IFB5X05vbmU7CkBAIC0yMzUyLDcgKzIzOTIsMTEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBHZXRLZWVwZWRPYmplY3RzKENEYXRhT2JqZWN0ICp0YXJnZXQpCiB7Ci0gICAgcmV0dXJuIFB5Q0RhdGFfR2V0Q29udGFpbmVyKHRhcmdldCktPmJfb2JqZWN0czsKKyAgICBDRGF0YU9iamVjdCAqY29udGFpbmVyOworICAgIGNvbnRhaW5lciA9IFB5Q0RhdGFfR2V0Q29udGFpbmVyKHRhcmdldCk7CisgICAgaWYgKGNvbnRhaW5lciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gY29udGFpbmVyLT5iX29iamVjdHM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDA5LDYgKzI0NTMsMTAgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIG9iID0gUHlDRGF0YV9HZXRDb250YWluZXIodGFyZ2V0KTsKKyAgICBpZiAob2IgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoa2VlcCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgaWYgKG9iLT5iX29iamVjdHMgPT0gTlVMTCB8fCAhUHlEaWN0X0NoZWNrRXhhY3Qob2ItPmJfb2JqZWN0cykpIHsKICAgICAgICAgUHlfWERFQ1JFRihvYi0+Yl9vYmplY3RzKTsKICAgICAgICAgb2ItPmJfb2JqZWN0cyA9IGtlZXA7IC8qIHJlZmNvdW50IGNvbnN1bWVkICovCkBAIC0yNzk1LDYgKzI4NDMsOSBAQAogICAgICAgICAgICAgLyogWFhYICovOwogCiAgICAgICAgIHZhbHVlID0gR2V0S2VlcGVkT2JqZWN0cyhzcmMpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CkBAIC0yODE4LDYgKzI4NjksOSBAQAogICAgICAgICAqKHZvaWQgKiopcHRyID0gc3JjLT5iX3B0cjsKIAogICAgICAgICBrZWVwID0gR2V0S2VlcGVkT2JqZWN0cyhzcmMpOworICAgICAgICBpZiAoa2VlcCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICAgICAgLyoKICAgICAgICAgICBXZSBhcmUgYXNzaWduaW5nIGFuIGFycmF5IG9iamVjdCB0byBhIGZpZWxkIHdoaWNoIHJlcHJlc2VudHMKICAgICAgICAgICBhIHBvaW50ZXIuIFRoaXMgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBjb252ZXJ0aW5nIGFuIGFycmF5CkBAIC0zMTcyLDcgKzMyMjYsNyBAQAogICAgICAgICByZXR1cm4gKnBuYW1lID8gMSA6IDA7CiAgICAgfQogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiBuYW1lIG11c3QgYmUgc3RyaW5nIG9yIGludGVnZXIiKTsKKyAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBzdHJpbmcsIGJ5dGVzIG9iamVjdCBvciBpbnRlZ2VyIik7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMyNDUsNyArMzI5OSw3IEBACiAjaWZkZWYgX19DWUdXSU5fXwogLyogZGxlcnJvcigpIGlzbid0IHZlcnkgaGVscGZ1bCBvbiBjeWd3aW4gKi8KICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImZ1bmN0aW9uICclcycgbm90IGZvdW5kICglcykgIiwKKyAgICAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiAnJXMnIG5vdCBmb3VuZCIsCiAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKICNlbHNlCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19BdHRyaWJ1dGVFcnJvciwgY3R5cGVzX2RsZXJyb3IoKSk7CkBAIC0zODI4LDcgKzM4ODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxhcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgICAgIC8qIElmIHRoZSBlcnJjaGVjayBmdW50aW9uIGZhaWxlZCwgcmV0dXJuIE5VTEwuCisgICAgICAgIC8qIElmIHRoZSBlcnJjaGVjayBmdW5jdGlvbiBmYWlsZWQsIHJldHVybiBOVUxMLgogICAgICAgICAgICBJZiB0aGUgZXJyY2hlY2sgZnVuY3Rpb24gcmV0dXJuZWQgY2FsbGFyZ3MgdW5jaGFuZ2VkLAogICAgICAgICAgICBjb250aW51ZSBub3JtYWwgcHJvY2Vzc2luZy4KICAgICAgICAgICAgSWYgdGhlIGVycmNoZWNrIGZ1bmN0aW9uIHJldHVybmVkIHNvbWV0aGluZyBlbHNlLApAQCAtNDA0NCw4ICs0MDk4LDggQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSkgewotICAgICAgICBpbnQgcmVzID0gX2luaXRfcG9zX2FyZ3Moc2VsZiwgUHlfVFlQRShzZWxmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MsIGt3ZHMsIDApOworICAgICAgICBQeV9zc2l6ZV90IHJlcyA9IF9pbml0X3Bvc19hcmdzKHNlbGYsIFB5X1RZUEUoc2VsZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncywga3dkcywgMCk7CiAgICAgICAgIGlmIChyZXMgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChyZXMgPCBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpKSB7CkBAIC00MjE2LDcgKzQyNzAsNyBAQAogICAgICAgICAgICAgaSArPSBzZWxmLT5iX2xlbmd0aDsKICAgICAgICAgcmV0dXJuIEFycmF5X2l0ZW0obXlzZWxmLCBpKTsKICAgICB9Ci0gICAgZWxzZSBpZiBQeVNsaWNlX0NoZWNrKGl0ZW0pIHsKKyAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGl0ZW0pKSB7CiAgICAgICAgIFN0Z0RpY3RPYmplY3QgKnN0Z2RpY3QsICppdGVtZGljdDsKICAgICAgICAgUHlPYmplY3QgKnByb3RvOwogICAgICAgICBQeU9iamVjdCAqbnA7CkBAIC00MjcxLDggKzQzMjUsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZWxlbik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGRlc3QgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsaWNlbGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgICAgIGRlc3QgPSBQeU1lbV9OZXcod2NoYXJfdCwgc2xpY2VsZW4pOworICAgICAgICAgICAgaWYgKGRlc3QgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGZvciAoY3VyID0gc3RhcnQsIGkgPSAwOyBpIDwgc2xpY2VsZW47CiAgICAgICAgICAgICAgICAgIGN1ciArPSBzdGVwLCBpKyspIHsKQEAgLTQyOTIsNiArNDM0OSwxMCBAQAogICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOwogICAgICAgICAgICAgIGN1ciArPSBzdGVwLCBpKyspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gQXJyYXlfaXRlbShteXNlbGYsIGN1cik7CisgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5wKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShucCwgaSwgdik7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG5wOwpAQCAtNDc5Nyw3ICs0ODU4LDcgQEAKICAgICAqKHZvaWQgKiopc2VsZi0+Yl9wdHIgPSBkc3QtPmJfcHRyOwogCiAgICAgLyoKLSAgICAgICBBIFBvaW50ZXIgaW5zdGFuY2UgbXVzdCBrZWVwIGEgdGhlIHZhbHVlIGl0IHBvaW50cyB0byBhbGl2ZS4gIFNvLCBhCisgICAgICAgQSBQb2ludGVyIGluc3RhbmNlIG11c3Qga2VlcCB0aGUgdmFsdWUgaXQgcG9pbnRzIHRvIGFsaXZlLiAgU28sIGEKICAgICAgICBwb2ludGVyIGluc3RhbmNlIGhhcyBiX2xlbmd0aCBzZXQgdG8gMiBpbnN0ZWFkIG9mIDEsIGFuZCB3ZSBzZXQKICAgICAgICAndmFsdWUnIGl0c2VsZiBhcyB0aGUgc2Vjb25kIGl0ZW0gb2YgdGhlIGJfb2JqZWN0cyBsaXN0LCBhZGRpdGlvbmFsbHkuCiAgICAgKi8KQEAgLTQ4MDYsNiArNDg2Nyw5IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGtlZXAgPSBHZXRLZWVwZWRPYmplY3RzKGRzdCk7CisgICAgaWYgKGtlZXAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCiAgICAgUHlfSU5DUkVGKGtlZXApOwogICAgIHJldHVybiBLZWVwUmVmKHNlbGYsIDAsIGtlZXApOwogfQpAQCAtNDk0NSw3ICs1MDA5LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihwdHIgKyBzdGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW4pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVzdCA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgICAgICBkZXN0ID0gUHlNZW1fTmV3KHdjaGFyX3QsIGxlbik7CiAgICAgICAgICAgICBpZiAoZGVzdCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgZm9yIChjdXIgPSBzdGFydCwgaSA9IDA7IGkgPCBsZW47IGN1ciArPSBzdGVwLCBpKyspIHsKQEAgLTUyMTIsOSArNTI3NiwxNCBAQAogICAgICAqLwogICAgIGlmIChDRGF0YU9iamVjdF9DaGVjayhzcmMpKSB7CiAgICAgICAgIENEYXRhT2JqZWN0ICpvYmogPSAoQ0RhdGFPYmplY3QgKilzcmM7CisgICAgICAgIENEYXRhT2JqZWN0ICpjb250YWluZXI7CisKICAgICAgICAgLyogUHlDRGF0YV9HZXRDb250YWluZXIgd2lsbCBpbml0aWFsaXplIHNyYy5iX29iamVjdHMsIHdlIG5lZWQKICAgICAgICAgICAgdGhpcyBzbyBpdCBjYW4gYmUgc2hhcmVkICovCi0gICAgICAgIFB5Q0RhdGFfR2V0Q29udGFpbmVyKG9iaik7CisgICAgICAgIGNvbnRhaW5lciA9IFB5Q0RhdGFfR2V0Q29udGFpbmVyKG9iaik7CisgICAgICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZmFpbGVkOworCiAgICAgICAgIC8qIEJ1dCB3ZSBuZWVkIGEgZGljdGlvbmFyeSEgKi8KICAgICAgICAgaWYgKG9iai0+Yl9vYmplY3RzID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihQeV9Ob25lKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzX3Rlc3QuYyBiL01vZHVsZXMvX2N0eXBlcy9fY3R5cGVzX3Rlc3QuYwppbmRleCBhMjczZWU3Li4zYzdmODkyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvX2N0eXBlc190ZXN0LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL19jdHlwZXNfdGVzdC5jCkBAIC01NDUsNiArNTQ1LDQ5IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKK0VYUE9SVChsb25nIGxlZnQgPSAxMCk7CitFWFBPUlQobG9uZyB0b3AgPSAyMCk7CitFWFBPUlQobG9uZyByaWdodCA9IDMwKTsKK0VYUE9SVChsb25nIGJvdHRvbSA9IDQwKTsKKworRVhQT1JUKFJFQ1QpIFJldHVyblJlY3QoaW50IGksIFJFQ1QgYXIsIFJFQ1QqIGJyLCBQT0lOVCBjcCwgUkVDVCBkciwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFQ1QgKmVyLCBQT0lOVCBmcCwgUkVDVCBncikKK3sKKyAgICAvKkNoZWNrIGlucHV0ICovCisgICAgaWYgKGFyLmxlZnQgKyBici0+bGVmdCArIGRyLmxlZnQgKyBlci0+bGVmdCArIGdyLmxlZnQgIT0gbGVmdCAqIDUpCisgICAgeworICAgICAgICBhci5sZWZ0ID0gMTAwOworICAgICAgICByZXR1cm4gYXI7CisgICAgfQorICAgIGlmIChhci5yaWdodCArIGJyLT5yaWdodCArIGRyLnJpZ2h0ICsgZXItPnJpZ2h0ICsgZ3IucmlnaHQgIT0gcmlnaHQgKiA1KQorICAgIHsKKyAgICAgICAgYXIucmlnaHQgPSAxMDA7CisgICAgICAgIHJldHVybiBhcjsKKyAgICB9CisgICAgaWYgKGNwLnggIT0gZnAueCkKKyAgICB7CisgICAgICAgIGFyLmxlZnQgPSAtMTAwOworICAgIH0KKyAgICBpZiAoY3AueSAhPSBmcC55KQorICAgIHsKKyAgICAgICAgYXIubGVmdCA9IC0yMDA7CisgICAgfQorICAgIHN3aXRjaChpKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBhcjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxOgorICAgICAgICByZXR1cm4gZHI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgcmV0dXJuIGdyOworICAgICAgICBicmVhazsKKworICAgIH0KKyAgICByZXR1cm4gYXI7Cit9CisKIHR5cGVkZWYgc3RydWN0IHsKICAgICBzaG9ydCB4OwogICAgIHNob3J0IHk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMgYi9Nb2R1bGVzL19jdHlwZXMvY2FsbGJhY2tzLmMKaW5kZXggYTNkMjMyMS4uN2NkNjE2NCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2NhbGxiYWNrcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxsYmFja3MuYwpAQCAtOTIsMzIgKzkyLDYgQEAKIH0KIAogCi0vKiBhZnRlciBjb2RlIHRoYXQgcHlyZXggZ2VuZXJhdGVzICovCi12b2lkIF9jdHlwZXNfYWRkX3RyYWNlYmFjayhjaGFyICpmdW5jbmFtZSwgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCi17Ci0gICAgUHlPYmplY3QgKnB5X2dsb2JhbHMgPSAwOwotICAgIFB5Q29kZU9iamVjdCAqcHlfY29kZSA9IDA7Ci0gICAgUHlGcmFtZU9iamVjdCAqcHlfZnJhbWUgPSAwOwotCi0gICAgcHlfZ2xvYmFscyA9IFB5RGljdF9OZXcoKTsKLSAgICBpZiAoIXB5X2dsb2JhbHMpIGdvdG8gYmFkOwotICAgIHB5X2NvZGUgPSBQeUNvZGVfTmV3RW1wdHkoZmlsZW5hbWUsIGZ1bmNuYW1lLCBsaW5lbm8pOwotICAgIGlmICghcHlfY29kZSkgZ290byBiYWQ7Ci0gICAgcHlfZnJhbWUgPSBQeUZyYW1lX05ldygKLSAgICAgICAgUHlUaHJlYWRTdGF0ZV9HZXQoKSwgLypQeVRocmVhZFN0YXRlICp0c3RhdGUsKi8KLSAgICAgICAgcHlfY29kZSwgICAgICAgICAgICAgLypQeUNvZGVPYmplY3QgKmNvZGUsKi8KLSAgICAgICAgcHlfZ2xvYmFscywgICAgICAgICAgLypQeU9iamVjdCAqZ2xvYmFscywqLwotICAgICAgICAwICAgICAgICAgICAgICAgICAgICAvKlB5T2JqZWN0ICpsb2NhbHMqLwotICAgICAgICApOwotICAgIGlmICghcHlfZnJhbWUpIGdvdG8gYmFkOwotICAgIHB5X2ZyYW1lLT5mX2xpbmVubyA9IGxpbmVubzsKLSAgICBQeVRyYWNlQmFja19IZXJlKHB5X2ZyYW1lKTsKLSAgYmFkOgotICAgIFB5X1hERUNSRUYocHlfZ2xvYmFscyk7Ci0gICAgUHlfWERFQ1JFRihweV9jb2RlKTsKLSAgICBQeV9YREVDUkVGKHB5X2ZyYW1lKTsKLX0KLQogI2lmZGVmIE1TX1dJTjMyCiAvKgogICogV2UgbXVzdCBjYWxsIEFkZFJlZigpIG9uIG5vbi1OVUxMIENPTSBwb2ludGVycyB3ZSByZWNlaXZlIGFzIGFyZ3VtZW50cwpAQCAtMjM3LDcgKzIxMSw3IEBACiAgICAgfQogCiAjZGVmaW5lIENIRUNLKHdoYXQsIHgpIFwKLWlmICh4ID09IE5VTEwpIF9jdHlwZXNfYWRkX3RyYWNlYmFjayh3aGF0LCAiX2N0eXBlcy9jYWxsYmFja3MuYyIsIF9fTElORV9fIC0gMSksIFB5RXJyX1ByaW50KCkKK2lmICh4ID09IE5VTEwpIF9QeVRyYWNlYmFja19BZGQod2hhdCwgIl9jdHlwZXMvY2FsbGJhY2tzLmMiLCBfX0xJTkVfXyAtIDEpLCBQeUVycl9QcmludCgpCiAKICAgICBpZiAoZmxhZ3MgJiAoRlVOQ0ZMQUdfVVNFX0VSUk5PIHwgRlVOQ0ZMQUdfVVNFX0xBU1RFUlJPUikpIHsKICAgICAgICAgZXJyb3Jfb2JqZWN0ID0gX2N0eXBlc19nZXRfZXJyb2JqKCZzcGFjZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvY2FsbHByb2MuYyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCmluZGV4IDA5ZWI2NTMuLjhkYWVmZmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9jYWxscHJvYy5jCkBAIC0yNjEsMTggKzI2MSwxOCBAQAogICAgICAgICAgICB0byBhIHZpcnR1YWwgYWRkcmVzcyBmb3Igd2hpY2ggaXQgZG9lcyBub3QKICAgICAgICAgICAgaGF2ZSB0aGUgYXBwcm9wcmlhdGUgYWNjZXNzLiAqLwogICAgICAgICBpZiAocHItPkV4Y2VwdGlvbkluZm9ybWF0aW9uWzBdID09IDApCi0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYWNjZXNzIHZpb2xhdGlvbiByZWFkaW5nICVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMV0pOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYWNjZXNzIHZpb2xhdGlvbiB3cml0aW5nICVwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICBwci0+RXhjZXB0aW9uSW5mb3JtYXRpb25bMV0pOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0JSRUFLUE9JTlQ6CiAgICAgICAgIC8qIEEgYnJlYWtwb2ludCB3YXMgZW5jb3VudGVyZWQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYnJlYWtwb2ludCBlbmNvdW50ZXJlZCIpOwogICAgICAgICBicmVhazsKIApAQCAtMjgyLDE0ICsyODIsMTQgQEAKICAgICAgICAgICAgYWxpZ25tZW50LiBGb3IgZXhhbXBsZSwgMTYtYml0IHZhbHVlcyBtdXN0IGJlCiAgICAgICAgICAgIGFsaWduZWQgb24gMi1ieXRlIGJvdW5kYXJpZXMsIDMyLWJpdCB2YWx1ZXMgb24KICAgICAgICAgICAgNC1ieXRlIGJvdW5kYXJpZXMsIGFuZCBzbyBvbi4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBkYXRhdHlwZSBtaXNhbGlnbm1lbnQiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9TSU5HTEVfU1RFUDoKICAgICAgICAgLyogQSB0cmFjZSB0cmFwIG9yIG90aGVyIHNpbmdsZS1pbnN0cnVjdGlvbiBtZWNoYW5pc20KICAgICAgICAgICAgc2lnbmFsZWQgdGhhdCBvbmUgaW5zdHJ1Y3Rpb24gaGFzIGJlZW4gZXhlY3V0ZWQuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc2luZ2xlIHN0ZXAiKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTI5Nyw3ICsyOTcsNyBAQAogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBhY2Nlc3MgYW4gYXJyYXkgZWxlbWVudAogICAgICAgICAgICB0aGF0IGlzIG91dCBvZiBib3VuZHMsIGFuZCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZQogICAgICAgICAgICBzdXBwb3J0cyBib3VuZHMgY2hlY2tpbmcuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogYXJyYXkgYm91bmRzIGV4Y2VlZGVkIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zMDYsMjggKzMwNiwyOCBAQAogICAgICAgICAgICBpcyBkZW5vcm1hbC4gQSBkZW5vcm1hbCB2YWx1ZSBpcyBvbmUgdGhhdCBpcyB0b28KICAgICAgICAgICAgc21hbGwgdG8gcmVwcmVzZW50IGFzIGEgc3RhbmRhcmQgZmxvYXRpbmctcG9pbnQKICAgICAgICAgICAgdmFsdWUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXRpbmctcG9pbnQgb3BlcmFuZCBkZW5vcm1hbCIpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgRVhDRVBUSU9OX0ZMVF9ESVZJREVfQllfWkVSTzoKICAgICAgICAgLyogVGhlIHRocmVhZCBhdHRlbXB0ZWQgdG8gZGl2aWRlIGEgZmxvYXRpbmctcG9pbnQKICAgICAgICAgICAgdmFsdWUgYnkgYSBmbG9hdGluZy1wb2ludCBkaXZpc29yIG9mIHplcm8uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgZGl2aWRlIGJ5IHplcm8iKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfSU5FWEFDVF9SRVNVTFQ6CiAgICAgICAgIC8qIFRoZSByZXN1bHQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gY2Fubm90IGJlCiAgICAgICAgICAgIHJlcHJlc2VudGVkIGV4YWN0bHkgYXMgYSBkZWNpbWFsIGZyYWN0aW9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGluZXhhY3QiKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9GTFRfSU5WQUxJRF9PUEVSQVRJT046CiAgICAgICAgIC8qIFRoaXMgZXhjZXB0aW9uIHJlcHJlc2VudHMgYW55IGZsb2F0aW5nLXBvaW50CiAgICAgICAgICAgIGV4Y2VwdGlvbiBub3QgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IGludmFsaWQgb3BlcmF0aW9uIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zMzUsMjEgKzMzNSwyMSBAQAogICAgICAgICAvKiBUaGUgZXhwb25lbnQgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24gaXMKICAgICAgICAgICAgZ3JlYXRlciB0aGFuIHRoZSBtYWduaXR1ZGUgYWxsb3dlZCBieSB0aGUKICAgICAgICAgICAgY29ycmVzcG9uZGluZyB0eXBlLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IGZsb2F0IG92ZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fRkxUX1NUQUNLX0NIRUNLOgogICAgICAgICAvKiBUaGUgc3RhY2sgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCBhcyB0aGUgcmVzdWx0CiAgICAgICAgICAgIG9mIGEgZmxvYXRpbmctcG9pbnQgb3BlcmF0aW9uLiAqLwotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfV2luZG93c0Vycm9yLAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRpb246IHN0YWNrIG92ZXIvdW5kZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fU1RBQ0tfT1ZFUkZMT1c6CiAgICAgICAgIC8qIFRoZSBzdGFjayBvdmVyZmxvd2VkIG9yIHVuZGVyZmxvd2VkIGFzIHRoZSByZXN1bHQKICAgICAgICAgICAgb2YgYSBmbG9hdGluZy1wb2ludCBvcGVyYXRpb24uICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogc3RhY2sgb3ZlcmZsb3ciKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM1NywyMSArMzU3LDIxIEBACiAgICAgICAgIC8qIFRoZSBleHBvbmVudCBvZiBhIGZsb2F0aW5nLXBvaW50IG9wZXJhdGlvbiBpcyBsZXNzCiAgICAgICAgICAgIHRoYW4gdGhlIG1hZ25pdHVkZSBhbGxvd2VkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCiAgICAgICAgICAgIHR5cGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogZmxvYXQgdW5kZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fSU5UX0RJVklERV9CWV9aRVJPOgogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBkaXZpZGUgYW4gaW50ZWdlciB2YWx1ZSBieQogICAgICAgICAgICBhbiBpbnRlZ2VyIGRpdmlzb3Igb2YgemVyby4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBpbnRlZ2VyIGRpdmlkZSBieSB6ZXJvIik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBFWENFUFRJT05fSU5UX09WRVJGTE9XOgogICAgICAgICAvKiBUaGUgcmVzdWx0IG9mIGFuIGludGVnZXIgb3BlcmF0aW9uIGNhdXNlZCBhIGNhcnJ5CiAgICAgICAgICAgIG91dCBvZiB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIHJlc3VsdC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBpbnRlZ2VyIG92ZXJmbG93Iik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0zNzksMTQgKzM3OSwxNCBAQAogICAgICAgICAvKiBUaGUgdGhyZWFkIGF0dGVtcHRlZCB0byBleGVjdXRlIGFuIGluc3RydWN0aW9uCiAgICAgICAgICAgIHdob3NlIG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBpbiB0aGUgY3VycmVudAogICAgICAgICAgICBtYWNoaW5lIG1vZGUuICovCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PU0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImV4Y2VwdGlvbjogcHJpdmlsZWRnZWQgaW5zdHJ1Y3Rpb24iKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEVYQ0VQVElPTl9OT05DT05USU5VQUJMRV9FWENFUFRJT046CiAgICAgICAgIC8qIFRoZSB0aHJlYWQgYXR0ZW1wdGVkIHRvIGNvbnRpbnVlIGV4ZWN1dGlvbiBhZnRlciBhCiAgICAgICAgICAgIG5vbmNvbnRpbnVhYmxlIGV4Y2VwdGlvbiBvY2N1cnJlZC4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiZXhjZXB0aW9uOiBub2NvbnRpbnVhYmxlIik7CiAgICAgICAgIGJyZWFrOwogCkBAIC02MjAsNiArNjIwLDggQEAKICAgICAgICAgYXNzZXJ0KGRpY3QtPnBhcmFtZnVuYyk7CiAgICAgICAgIC8qIElmIGl0IGhhcyBhbiBzdGdkaWN0LCBpdCBpcyBhIENEYXRhT2JqZWN0ICovCiAgICAgICAgIGNhcmcgPSBkaWN0LT5wYXJhbWZ1bmMoKENEYXRhT2JqZWN0ICopb2JqKTsKKyAgICAgICAgaWYgKGNhcmcgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcGEtPmZmaV90eXBlID0gY2FyZy0+cGZmaV90eXBlOwogICAgICAgICBtZW1jcHkoJnBhLT52YWx1ZSwgJmNhcmctPnZhbHVlLCBzaXplb2YocGEtPnZhbHVlKSk7CiAgICAgICAgIHBhLT5rZWVwID0gKFB5T2JqZWN0ICopY2FyZzsKQEAgLTkxNyw3ICs5MTksNyBAQAogCiAgICAgdiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY2hlY2tlciwgcmV0dmFsLCBOVUxMKTsKICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBfY3R5cGVzX2FkZF90cmFjZWJhY2soIkdldFJlc3VsdCIsICJfY3R5cGVzL2NhbGxwcm9jLmMiLCBfX0xJTkVfXy0yKTsKKyAgICAgICAgX1B5VHJhY2ViYWNrX0FkZCgiR2V0UmVzdWx0IiwgIl9jdHlwZXMvY2FsbHByb2MuYyIsIF9fTElORV9fLTIpOwogICAgIFB5X0RFQ1JFRihyZXR2YWwpOwogICAgIHJldHVybiB2OwogfQpAQCAtMTEwNSw5ICsxMTA3LDcgQEAKICAgICAgICAgaWYgKGFyZ3R5cGVzICYmIGFyZ3R5cGVfY291bnQgPiBpKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqdjsKICAgICAgICAgICAgIGNvbnZlcnRlciA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHlwZXMsIGkpOwotICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoY29udmVydGVyLCBhcmcsIE5VTEwpOwogICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIF9jdHlwZXNfZXh0ZW5kX2Vycm9yKFB5RXhjX0FyZ0Vycm9yLCAiYXJndW1lbnQgJWQ6ICIsIGkrMSk7CiAgICAgICAgICAgICAgICAgZ290byBjbGVhbnVwOwpAQCAtMTE0MCw5ICsxMTQwLDYgQEAKICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnY291bnQ7ICsraSkgewogICAgICAgICBhdHlwZXNbaV0gPSBhcmdzW2ldLmZmaV90eXBlOwogICAgICAgICBpZiAoYXR5cGVzW2ldLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAotI2lmZGVmIF9XSU42NAotICAgICAgICAgICAgJiYgYXR5cGVzW2ldLT5zaXplIDw9IHNpemVvZih2b2lkICopCi0jZW5kaWYKICAgICAgICAgICAgICkKICAgICAgICAgICAgIGF2YWx1ZXNbaV0gPSAodm9pZCAqKWFyZ3NbaV0udmFsdWUucDsKICAgICAgICAgZWxzZQpAQCAtMTI3Miw2MiArMTI2OSw2IEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKLS8qIG9ic29sZXRlLCBzaG91bGQgYmUgcmVtb3ZlZCAqLwotLyogT25seSB1c2VkIGJ5IHNhbXBsZSBjb2RlIChpbiBzYW1wbGVzXFdpbmRvd3NcQ09NLnB5KSAqLwotc3RhdGljIFB5T2JqZWN0ICoKLWNhbGxfY29tbWV0aG9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBJVW5rbm93biAqcEl1bms7Ci0gICAgaW50IGluZGV4OwotICAgIFB5T2JqZWN0ICphcmd1bWVudHM7Ci0gICAgUFBST0MgKmxwVnRibDsKLSAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIENEYXRhT2JqZWN0ICpwY29tOwotICAgIFB5T2JqZWN0ICphcmd0eXBlcyA9IE5VTEw7Ci0KLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIk9pTyF8TyEiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGNvbSwgJmluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlUdXBsZV9UeXBlLCAmYXJndW1lbnRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlUdXBsZV9UeXBlLCAmYXJndHlwZXMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChhcmd0eXBlcyAmJiAoUHlUdXBsZV9HRVRfU0laRShhcmd1bWVudHMpICE9IFB5VHVwbGVfR0VUX1NJWkUoYXJndHlwZXMpKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIk1ldGhvZCB0YWtlcyAlZCBhcmd1bWVudHMgKCVkIGdpdmVuKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKGFyZ3R5cGVzKSwgUHlUdXBsZV9HRVRfU0laRShhcmd1bWVudHMpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFDRGF0YU9iamVjdF9DaGVjayhwY29tKSB8fCAocGNvbS0+Yl9zaXplICE9IHNpemVvZih2b2lkICopKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgIkNPTSBQb2ludGVyIGV4cGVjdGVkIGluc3RlYWQgb2YgJXMgaW5zdGFuY2UiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShwY29tKS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICgoKih2b2lkICoqKShwY29tLT5iX3B0cikpID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiVGhlIENPTSAndGhpcycgcG9pbnRlciBpcyBOVUxMIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHBJdW5rID0gKElVbmtub3duICopKCoodm9pZCAqKikocGNvbS0+Yl9wdHIpKTsKLSAgICBscFZ0YmwgPSAoUFBST0MgKikocEl1bmstPmxwVnRibCk7Ci0KLSAgICByZXN1bHQgPSAgX2N0eXBlc19jYWxscHJvYyhscFZ0YmxbaW5kZXhdLAotICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzLAotI2lmZGVmIE1TX1dJTjMyCi0gICAgICAgICAgICAgICAgICAgICAgICBwSXVuaywKLSAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIEZVTkNGTEFHX0hSRVNVTFQsIC8qIGZsYWdzICovCi0gICAgICAgICAgICAgICAgYXJndHlwZXMsIC8qIHNlbGYtPmFyZ3R5cGVzICovCi0gICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+cmVzdHlwZSAqLwotICAgICAgICAgICAgICAgIE5VTEwpOyAvKiBjaGVja2VyICovCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIGNoYXIgY29weV9jb21fcG9pbnRlcl9kb2NbXSA9CiAiQ29weUNvbVBvaW50ZXIoc3JjLCBkc3QpIC0+IEhSRVNVTFQgdmFsdWVcbiI7CiAKQEAgLTE0ODksOSArMTQzMCw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBGVU5DRkxBR19DREVDTCwgLyogZmxhZ3MgKi8KLSAgICAgICAgICAgICAgICBOVUxMLCAvKiBzZWxmLT5hcmd0eXBlcyAqLwotICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPnJlc3R5cGUgKi8KLSAgICAgICAgICAgICAgICBOVUxMKTsgLyogY2hlY2tlciAqLworICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogc2VsZi0+YXJndHlwZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIC8qIHNlbGYtPnJlc3R5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOyAvKiBjaGVja2VyICovCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTcyOCwyNCArMTY2OSwzMCBAQAogICAgIH0KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QoY2xzKSkgewogICAgICAgICBjaGFyICpuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhjbHMpOwotICAgICAgICBidWYgPSBhbGxvY2Eoc3RybGVuKG5hbWUpICsgMyArIDEpOworICAgICAgICBidWYgPSBQeU1lbV9NYWxsb2Moc3RybGVuKG5hbWUpICsgMyArIDEpOworICAgICAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgc3ByaW50ZihidWYsICJMUF8lcyIsIG5hbWUpOwogICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopUHlfVFlQRSgmUHlDUG9pbnRlcl9UeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzKE8pe30iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5Q1BvaW50ZXJfVHlwZSk7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKHJlc3VsdCk7CiAgICAgfSBlbHNlIGlmIChQeVR5cGVfQ2hlY2soY2xzKSkgewogICAgICAgICB0eXAgPSAoUHlUeXBlT2JqZWN0ICopY2xzOwotICAgICAgICBidWYgPSBhbGxvY2Eoc3RybGVuKHR5cC0+dHBfbmFtZSkgKyAzICsgMSk7CisgICAgICAgIGJ1ZiA9IFB5TWVtX01hbGxvYyhzdHJsZW4odHlwLT50cF9uYW1lKSArIDMgKyAxKTsKKyAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHNwcmludGYoYnVmLCAiTFBfJXMiLCB0eXAtPnRwX25hbWUpOwogICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0ICopUHlfVFlQRSgmUHlDUG9pbnRlcl9UeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzKE8pe3NPfSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlDUG9pbnRlcl9UeXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl90eXBlXyIsIGNscyk7CisgICAgICAgIFB5TWVtX0ZyZWUoYnVmKTsKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgUHlfSU5DUkVGKGNscyk7CkBAIC0xODIyLDcgKzE3NjksNiBAQAogICAgIHsiRm9ybWF0RXJyb3IiLCBmb3JtYXRfZXJyb3IsIE1FVEhfVkFSQVJHUywgZm9ybWF0X2Vycm9yX2RvY30sCiAgICAgeyJMb2FkTGlicmFyeSIsIGxvYWRfbGlicmFyeSwgTUVUSF9WQVJBUkdTLCBsb2FkX2xpYnJhcnlfZG9jfSwKICAgICB7IkZyZWVMaWJyYXJ5IiwgZnJlZV9saWJyYXJ5LCBNRVRIX1ZBUkFSR1MsIGZyZWVfbGlicmFyeV9kb2N9LAotICAgIHsiY2FsbF9jb21tZXRob2QiLCBjYWxsX2NvbW1ldGhvZCwgTUVUSF9WQVJBUkdTIH0sCiAgICAgeyJfY2hlY2tfSFJFU1VMVCIsIGNoZWNrX2hyZXN1bHQsIE1FVEhfVkFSQVJHU30sCiAjZWxzZQogICAgIHsiZGxvcGVuIiwgcHlfZGxfb3BlbiwgTUVUSF9WQVJBUkdTLApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jIGIvTW9kdWxlcy9fY3R5cGVzL2NmaWVsZC5jCmluZGV4IDc5ZDYwZjMuLmM4OWQ5MTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9jZmllbGQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvY2ZpZWxkLmMKQEAgLTc2NSw2ICs3NjUsNyBAQAogICAgIGlmIChnZXRfdWxvbmcodmFsdWUsICZ2YWwpIDwgMCkKICAgICAgICAgcmV0dXJuICBOVUxMOwogICAgIG1lbWNweSgmZmllbGQsIHB0ciwgc2l6ZW9mKGZpZWxkKSk7CisgICAgZmllbGQgPSBTV0FQX0lOVChmaWVsZCk7CiAgICAgZmllbGQgPSBTRVQodW5zaWduZWQgaW50LCBmaWVsZCwgKHVuc2lnbmVkIGludCl2YWwsIHNpemUpOwogICAgIGZpZWxkID0gU1dBUF9JTlQoZmllbGQpOwogICAgIG1lbWNweShwdHIsICZmaWVsZCwgc2l6ZW9mKGZpZWxkKSk7CkBAIC0xMTYwLDcgKzExNjEsNyBAQAogICAgIH0KICAgZXJyb3I6CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgIm9uZSBjaGFyYWN0ZXIgc3RyaW5nIGV4cGVjdGVkIik7CisgICAgICAgICAgICAgICAgICJvbmUgY2hhcmFjdGVyIGJ5dGVzLCBieXRlYXJyYXkgb3IgaW50ZWdlciBleHBlY3RlZCIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMjk1LDcgKzEyOTYsNyBAQAogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgc3RyaW5nLCAlcyBmb3VuZCIsCisgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYnl0ZXMsICVzIGZvdW5kIiwKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5vYl90eXBlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTMxMSw3ICsxMzEyLDcgQEAKICAgICAgICAgKytzaXplOwogICAgIH0gZWxzZSBpZiAoc2l6ZSA+IGxlbmd0aCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxvbmcgKCV6ZCwgbWF4aW11bSBsZW5ndGggJXpkKSIsCisgICAgICAgICAgICAgICAgICAgICAiYnl0ZXMgdG9vIGxvbmcgKCV6ZCwgbWF4aW11bSBsZW5ndGggJXpkKSIsCiAgICAgICAgICAgICAgICAgICAgICBzaXplLCBsZW5ndGgpOwogICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9jdHlwZXMuaCBiL01vZHVsZXMvX2N0eXBlcy9jdHlwZXMuaAppbmRleCA1MjM3YWMyLi4wZDNmNzI0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvY3R5cGVzLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2N0eXBlcy5oCkBAIC0xOTEsNyArMTkxLDcgQEAKICAgIHJlbWVtYmVyIGlzIHRoYXQgaW4gUHlDQXJyYXlUeXBlX25ldyB0aGUgZmZpX3R5cGUgZmllbGRzIG11c3QgYmUgZmlsbGVkIGluIC0KICAgIHNvIGZhciBpdCB3YXMgdW5uZWVkZWQgYmVjYXVzZSBsaWJmZmkgZG9lc24ndCBzdXBwb3J0IGFycmF5cyBhdCBhbGwKICAgIChiZWNhdXNlIHRoZXkgYXJlIHBhc3NlZCBhcyBwb2ludGVycyB0byBmdW5jdGlvbiBjYWxscyBhbnl3YXkpLiAgQnV0IGl0J3MKLSAgIHRvbyBtdWNoIHJpc2sgdG8gY2hhbmdlIHRoYXQgbm93LCBhbmQgdGhlcmUgYXJlIG90aGVyIGZpZWxkcyB3aGljaCBkb2VuJ3QKKyAgIHRvbyBtdWNoIHJpc2sgdG8gY2hhbmdlIHRoYXQgbm93LCBhbmQgdGhlcmUgYXJlIG90aGVyIGZpZWxkcyB3aGljaCBkb2Vzbid0CiAgICBiZWxvbmcgaW50byB0aGlzIHN0cnVjdHVyZSBhbnl3YXkuICBNYXliZSBpbiBjdHlwZXMgMi4wLi4uIChjdHlwZXMgMjAwMD8pCiAqLwogICAgIFB5X3NzaXplX3Qgc2l6ZTsgICAgICAgICAgICAvKiBudW1iZXIgb2YgYnl0ZXMgKi8KQEAgLTM1MywxMCArMzUzLDExIEBACiBleHRlcm4gdm9pZCBfY3R5cGVzX2ZyZWVfY2xvc3VyZSh2b2lkICopOwogZXh0ZXJuIHZvaWQgKl9jdHlwZXNfYWxsb2NfY2xvc3VyZSh2b2lkKTsKIAotZXh0ZXJuIHZvaWQgX2N0eXBlc19hZGRfdHJhY2ViYWNrKGNoYXIgKiwgY2hhciAqLCBpbnQpOwotCiBleHRlcm4gUHlPYmplY3QgKlB5Q0RhdGFfRnJvbUJhc2VPYmooUHlPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICpiYXNlLCBQeV9zc2l6ZV90IGluZGV4LCBjaGFyICphZHIpOwogZXh0ZXJuIGNoYXIgKl9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhjb25zdCBjaGFyICpwcmVmaXgsIGNvbnN0IGNoYXIgKnN1ZmZpeCk7CitleHRlcm4gY2hhciAqX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nX3dpdGhfc2hhcGUoaW50IG5kaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9zc2l6ZV90ICpzaGFwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqc3VmZml4KTsKIAogZXh0ZXJuIGludCBfY3R5cGVzX3NpbXBsZV9pbnN0YW5jZShQeU9iamVjdCAqb2JqKTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS5kaWZmIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS5kaWZmCmluZGV4IGFkZTI4ZTUuLmZmYTdiYWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkuZGlmZgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLmRpZmYKQEAgLTEsOCArMSw3IEBACi1kaWZmIC1yIC1OIC11IGxpYmZmaS5vcmlnL2F1dG9tNHRlLmNhY2hlL291dHB1dC4wIGxpYmZmaS9hdXRvbTR0ZS5jYWNoZS9vdXRwdXQuMAotZGlmZiAtciAtTiAtdSBsaWJmZmkub3JpZy9jb25maWd1cmUgbGliZmZpL2NvbmZpZ3VyZQotLS0tIGxpYmZmaS5vcmlnL2NvbmZpZ3VyZQkyMDEzLTAzLTE3IDE1OjM3OjUwLjAwMDAwMDAwMCAtMDcwMAotKysrIGxpYmZmaS9jb25maWd1cmUJMjAxMy0wMy0xOCAxNToxMTozOS42MTE1NzUxNjMgLTA3MDAKLUBAIC0xMzM2OCw2ICsxMzM2OCwxMCBAQAorZGlmZiAtdXJOIGxpYmZmaS0zLjEvY29uZmlndXJlIGxpYmZmaS9jb25maWd1cmUKKy0tLSBsaWJmZmktMy4xL2NvbmZpZ3VyZQkyMDE0LTA1LTE5IDE1OjQ0OjAzLjAwMDAwMDAwMCArMDIwMAorKysrIGxpYmZmaS9jb25maWd1cmUJMjAxNC0wOC0wOSAyMTo1MTowNy44Nzc4NzE0NDMgKzAyMDAKK0BAIC0xNzIzNiw2ICsxNzIzNiwxMCBAQAogIAlmaQogIAk7OwogIApAQCAtMTMsMjIgKzEyLDIyIEBACiAgICB4ODZfNjQtKi1kYXJ3aW4qKQogIAlUQVJHRVQ9WDg2X0RBUldJTjsgVEFSR0VURElSPXg4NgogIAk7OwotQEAgLTEzNDI2LDEyICsxMzQzMCwxMiBAQAorQEAgLTE3Mjk4LDEyICsxNzMwMiwxMiBAQAogIAk7OwogIAogICAgbWlwcy1zZ2ktaXJpeDUuKiB8IG1pcHMtc2dpLWlyaXg2LiogfCBtaXBzKi0qLXJ0ZW1zKikKIC0JVEFSR0VUPU1JUFM7IFRBUkdFVERJUj1taXBzCiArCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAgCTs7Ci0gICBtaXBzKi0qLWxpbnV4KiB8IG1pcHMqLSotb3BlbmJzZCopCisgICBtaXBzKi0qbGludXgqIHwgbWlwcyotKi1vcGVuYnNkKikKICAJIyBTdXBwb3J0IDEyOC1iaXQgbG9uZyBkb3VibGUgZm9yIE5ld0FCSS4KICAJSEFWRV9MT05HX0RPVUJMRT0nZGVmaW5lZChfX21pcHM2NCknCiAtCVRBUkdFVD1NSVBTOyBUQVJHRVRESVI9bWlwcwotKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcworKwlUQVJHRVQ9TUlQU19MSU5VWDsgVEFSR0VURElSPW1pcHMKICAJOzsKICAKLSAgIHBvd2VycGMqLSotbGludXgqIHwgcG93ZXJwYy0qLXN5c3YqKQotQEAgLTEzNDkxLDcgKzEzNDk1LDcgQEAKKyAgIG5pb3MyKi1saW51eCopCitAQCAtMTczNzMsNyArMTczNzcsNyBAQAogICAgYXNfZm5fZXJyb3IgJD8gIlwibGliZmZpIGhhcyBub3QgYmVlbiBwb3J0ZWQgdG8gJGhvc3QuXCIiICIkTElORU5PIiA1CiAgZmkKICAKQEAgLTM3LDcgKzM2LDcgQEAKICAgIE1JUFNfVFJVRT0KICAgIE1JUFNfRkFMU0U9JyMnCiAgZWxzZQotQEAgLTE0ODYyLDYgKzE0ODY2LDEyIEBACitAQCAtMTg4MTQsNiArMTg4MTgsMTIgQEAKICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL2ZmaS5oIE1ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBtYW4vTWFrZWZpbGUgbGliZmZpLnBjIgogIAogIApAQCAtNTAsNyArNDksNyBAQAogIGNhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgogICMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQogICMgdGVzdHMgcnVuIG9uIHRoaXMgc3lzdGVtIHNvIHRoZXkgY2FuIGJlIHNoYXJlZCBiZXR3ZWVuIGNvbmZpZ3VyZQotQEAgLTE2MDQ3LDYgKzE2MDU3LDggQEAKK0BAIC0yMDEyNiw2ICsyMDEzNiw4IEBACiAgICAgICJ0ZXN0c3VpdGUvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdHN1aXRlL01ha2VmaWxlIiA7OwogICAgICAibWFuL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1hbi9NYWtlZmlsZSIgOzsKICAgICAgImxpYmZmaS5wYyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsaWJmZmkucGMiIDs7CkBAIC01OSw5ICs1OCw5IEBACiAgCiAgICAqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBhcmd1bWVudDogXGAkYWNfY29uZmlnX3RhcmdldCciICIkTElORU5PIiA1OzsKICAgIGVzYWMKLWRpZmYgLXIgLU4gLXUgbGliZmZpLm9yaWcvY29uZmlndXJlLmFjIGxpYmZmaS9jb25maWd1cmUuYWMKLS0tLSBsaWJmZmkub3JpZy9jb25maWd1cmUuYWMJMjAxMy0wMy0xNyAxNTozNzo1MC4wMDAwMDAwMDAgLTA3MDAKLSsrKyBsaWJmZmkvY29uZmlndXJlLmFjCTIwMTMtMDMtMTggMTU6MTE6MTEuMzkyOTg5MTM2IC0wNzAwCitkaWZmIC11ck4gbGliZmZpLTMuMS9jb25maWd1cmUuYWMgbGliZmZpL2NvbmZpZ3VyZS5hYworLS0tIGxpYmZmaS0zLjEvY29uZmlndXJlLmFjCTIwMTQtMDUtMTEgMTU6NTc6NDkuMDAwMDAwMDAwICswMjAwCisrKysgbGliZmZpL2NvbmZpZ3VyZS5hYwkyMDE0LTA4LTA5IDIxOjUxOjA3Ljg3Nzg3MTQ0MyArMDIwMAogQEAgLTEsNCArMSw3IEBACiAgZG5sIFByb2Nlc3MgdGhpcyB3aXRoIGF1dG9jb25mIHRvIGNyZWF0ZSBjb25maWd1cmUKICsjCkBAIC03MCwzMyArNjksMzIgQEAKICAKICBBQ19QUkVSRVEoMi42OCkKICAKLUBAIC0xNDYsNiArMTQ5LDEwIEBACi0gCWZpCSAgCitAQCAtMTQ0LDYgKzE0Nyw5IEBACisgCSAgQU1fTFRMREZMQUdTPSctbm8tdW5kZWZpbmVkIC1iaW5kaXIgIiQoYmluZGlyKSInOworIAlmaQogIAk7OwotIAogKyAgaSo4Ni0qLW50by1xbngqKSAKICsgICAgICAgIFRBUkdFVD1YODY7IFRBUkdFVERJUj14ODYKICsgICAgICAgIDs7Ci0rCi0gICB4ODZfNjQtKi1kYXJ3aW4qKQorICAgaT84Ni0qLWRhcndpbiopCiAgCVRBUkdFVD1YODZfREFSV0lOOyBUQVJHRVRESVI9eDg2CiAgCTs7Ci1AQCAtMjA0LDEyICsyMTEsMTIgQEAKK0BAIC0yMTgsMTIgKzIyNCwxMiBAQAogIAk7OwogIAogICAgbWlwcy1zZ2ktaXJpeDUuKiB8IG1pcHMtc2dpLWlyaXg2LiogfCBtaXBzKi0qLXJ0ZW1zKikKIC0JVEFSR0VUPU1JUFM7IFRBUkdFVERJUj1taXBzCiArCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAgCTs7Ci0gICBtaXBzKi0qLWxpbnV4KiB8IG1pcHMqLSotb3BlbmJzZCopCisgICBtaXBzKi0qbGludXgqIHwgbWlwcyotKi1vcGVuYnNkKikKICAJIyBTdXBwb3J0IDEyOC1iaXQgbG9uZyBkb3VibGUgZm9yIE5ld0FCSS4KICAJSEFWRV9MT05HX0RPVUJMRT0nZGVmaW5lZChfX21pcHM2NCknCiAtCVRBUkdFVD1NSVBTOyBUQVJHRVRESVI9bWlwcwotKwlUQVJHRVQ9TUlQU19JUklYOyBUQVJHRVRESVI9bWlwcworKwlUQVJHRVQ9TUlQU19MSU5VWDsgVEFSR0VURElSPW1pcHMKICAJOzsKICAKLSAgIHBvd2VycGMqLSotbGludXgqIHwgcG93ZXJwYy0qLXN5c3YqKQotQEAgLTI2OSw3ICsyNzYsNyBAQAorICAgbmlvczIqLWxpbnV4KikKK0BAIC0yOTMsNyArMjk5LDcgQEAKICAgIEFDX01TR19FUlJPUihbImxpYmZmaSBoYXMgbm90IGJlZW4gcG9ydGVkIHRvICRob3N0LiJdKQogIGZpCiAgCkBAIC0xMDUsNyArMTAzLDcgQEAKICBBTV9DT05ESVRJT05BTChCRklOLCB0ZXN0IHgkVEFSR0VUID0geEJGSU4pCiAgQU1fQ09ORElUSU9OQUwoU1BBUkMsIHRlc3QgeCRUQVJHRVQgPSB4U1BBUkMpCiAgQU1fQ09ORElUSU9OQUwoWDg2LCB0ZXN0IHgkVEFSR0VUID0geFg4NikKLUBAIC01NjcsNCArNTc0LDggQEAKK0BAIC02MTcsNCArNjIzLDggQEAKICAKICBBQ19DT05GSUdfRklMRVMoaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL2ZmaS5oIE1ha2VmaWxlIHRlc3RzdWl0ZS9NYWtlZmlsZSBtYW4vTWFrZWZpbGUgbGliZmZpLnBjKQogIApAQCAtMTE0LDE5ICsxMTIsMTkgQEAKICtBQ19DT05GSUdfRklMRVMoZmZpY29uZmlnLnB5KQogKwogIEFDX09VVFBVVAotLS0tIGxpYmZmaS0zLjAuMTEvZmZpY29uZmlnLnB5LmluCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCi0rKysgbGliZmZpL2ZmaWNvbmZpZy5weS5pbgkyMDEyLTAzLTE1IDAxOjA0OjI3LjAwMDAwMDAwMCArMDEwMAorZGlmZiAtdXJOIGxpYmZmaS0zLjEvZmZpY29uZmlnLnB5LmluIGxpYmZmaS9mZmljb25maWcucHkuaW4KKy0tLSBsaWJmZmktMy4xL2ZmaWNvbmZpZy5weS5pbgkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysrIGxpYmZmaS9mZmljb25maWcucHkuaW4JMjAxNC0wOC0wOSAyMTo0MzoyNS4yMjk4NzE4MjcgKzAyMDAKIEBAIC0wLDAgKzEsMzUgQEAKICtmZmlfc291cmNlcyA9ICIiIgogK3NyYy9wcmVwX2NpZi5jCiArc3JjL2Nsb3N1cmVzLmMKLStzcmMvZGxtYWxsb2MuYwogKyIiIi5zcGxpdCgpCiArCiArZmZpX3BsYXRmb3JtcyA9IHsKICsgICAgJ01JUFNfSVJJWCc6IFsnc3JjL21pcHMvZmZpLmMnLCAnc3JjL21pcHMvbzMyLlMnLCAnc3JjL21pcHMvbjMyLlMnXSwKICsgICAgJ01JUFNfTElOVVgnOiBbJ3NyYy9taXBzL2ZmaS5jJywgJ3NyYy9taXBzL28zMi5TJ10sCi0rICAgICdYODYnOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni9zeXN2LlMnXSwKKysgICAgJ1g4Nic6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L3N5c3YuUycsICdzcmMveDg2L3dpbjMyLlMnXSwKICsgICAgJ1g4Nl9GUkVFQlNEJzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvZnJlZWJzZC5TJ10sCiArICAgICdYODZfV0lOMzInOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni93aW4zMi5TJ10sCiArICAgICdTUEFSQyc6IFsnc3JjL3NwYXJjL2ZmaS5jJywgJ3NyYy9zcGFyYy92OC5TJywgJ3NyYy9zcGFyYy92OS5TJ10sCkBAIC0xMzQsOSArMTMyLDEwIEBACiArICAgICdJQTY0JzogWydzcmMvaWE2NC9mZmkuYycsICdzcmMvaWE2NC91bml4LlMnXSwKICsgICAgJ00zMlInOiBbJ3NyYy9tMzJyL3N5c3YuUycsICdzcmMvbTMyci9mZmkuYyddLAogKyAgICAnTTY4Syc6IFsnc3JjL202OGsvZmZpLmMnLCAnc3JjL202OGsvc3lzdi5TJ10sCi0rICAgICdQT1dFUlBDJzogWydzcmMvcG93ZXJwYy9mZmkuYycsICdzcmMvcG93ZXJwYy9zeXN2LlMnLCAnc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUycsICdzcmMvcG93ZXJwYy9saW51eDY0LlMnLCAnc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMnXSwKKysgICAgJ1BPV0VSUEMnOiBbJ3NyYy9wb3dlcnBjL2ZmaS5jJywgJ3NyYy9wb3dlcnBjL2ZmaV9zeXN2LmMnLCAnc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYycsICdzcmMvcG93ZXJwYy9zeXN2LlMnLCAnc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUycsICdzcmMvcG93ZXJwYy9saW51eDY0LlMnLCAnc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMnXSwKICsgICAgJ1BPV0VSUENfQUlYJzogWydzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMnLCAnc3JjL3Bvd2VycGMvYWl4LlMnLCAnc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUyddLAogKyAgICAnUE9XRVJQQ19GUkVFQlNEJzogWydzcmMvcG93ZXJwYy9mZmkuYycsICdzcmMvcG93ZXJwYy9zeXN2LlMnLCAnc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyddLAorKyAgICAnQUFSQ0g2NCc6IFsnc3JjL2FhcmNoNjQvc3lzdi5TJywgJ3NyYy9hYXJjaDY0L2ZmaS5jJ10sCiArICAgICdBUk0nOiBbJ3NyYy9hcm0vc3lzdi5TJywgJ3NyYy9hcm0vZmZpLmMnXSwKICsgICAgJ0xJQkZGSV9DUklTJzogWydzcmMvY3Jpcy9zeXN2LlMnLCAnc3JjL2NyaXMvZmZpLmMnXSwKICsgICAgJ0ZSVic6IFsnc3JjL2Zydi9lYWJpLlMnLCAnc3JjL2Zydi9mZmkuYyddLApAQCAtMTUyLDkgKzE1MSw5IEBACiArZmZpX3NvdXJjZXMgKz0gZmZpX3BsYXRmb3Jtc1snQFRBUkdFVEAnXQogKwogK2ZmaV9jZmxhZ3MgPSAnQENGTEFHU0AnCi1kaWZmIC11ck4gbGliZmZpLTMuMC4xMS9zcmMvZGxtYWxsb2MuYyBsaWJmZmkvc3JjL2RsbWFsbG9jLmMKLS0tLSBsaWJmZmktMy4wLjExL3NyYy9kbG1hbGxvYy5jCTIwMTItMDQtMTIgMDQ6NDY6MDYuMDAwMDAwMDAwICswMjAwCi0rKysgbGliZmZpL3NyYy9kbG1hbGxvYy5jCTIwMTItMDYtMjYgMTU6MTU6NTguOTQ5NTQ3NDYxICswMjAwCitkaWZmIC11ck4gbGliZmZpLTMuMS9zcmMvZGxtYWxsb2MuYyBsaWJmZmkvc3JjL2RsbWFsbG9jLmMKKy0tLSBsaWJmZmktMy4xL3NyYy9kbG1hbGxvYy5jCTIwMTQtMDQtMjUgMTk6NDU6MTMuMDAwMDAwMDAwICswMjAwCisrKysgbGliZmZpL3NyYy9kbG1hbGxvYy5jCTIwMTQtMDgtMDkgMjE6NTE6MDcuODgxODcxNDQzICswMjAwCiBAQCAtNDU3LDYgKzQ1NywxMSBAQAogICNkZWZpbmUgTEFDS1NfRVJSTk9fSAogICNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OCkBAIC0xNjcsMyArMTY2LDQ0IEBACiAgI2VuZGlmICAvKiBXSU4zMiAqLwogIAogICNpZmRlZiBfX09TMl9fCitAQCAtNDQ5Nyw3ICs0NTAyLDcgQEAKKyAgICAgY2hhciogdGJhc2UgPSAoY2hhciopKENBTExfTU1BUCh0c2l6ZSkpOworICAgICBpZiAodGJhc2UgIT0gQ01GQUlMKSB7CisgICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKKy0gICAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBJU19NTUFQUEVEX0JJVCk7CisrICAgICAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgSVNfTU1BUFBFRF9CSVQpOworICAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgICAgIH0KKyAgIH0KK0BAIC00NTEyLDcgKzQ1MTcsNyBAQAorICAgaWYgKGNhcGFjaXR5ID4gbXNpemUgKyBUT1BfRk9PVF9TSVpFICYmCisgICAgICAgY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgICBtID0gaW5pdF91c2VyX21zdGF0ZSgoY2hhciopYmFzZSwgY2FwYWNpdHkpOworLSAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBFWFRFUk5fQklUKTsKKysgICAgKHZvaWQpc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgRVhURVJOX0JJVCk7CisgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgICB9CisgICByZXR1cm4gKG1zcGFjZSltOworZGlmZiAtdXJOIGxpYmZmaS0zLjEvc3JjL2FybS9mZmkuYyBsaWJmZmkvc3JjL2FybS9mZmkuYworLS0tIGxpYmZmaS0zLjEvc3JjL2FybS9mZmkuYwlTYXQgQXVnIDA5IDIzOjUyOjM0IDIwMTQgKzAyMDAKKysrKyBsaWJmZmkvc3JjL2FybS9mZmkuYwlTYXQgQXVnIDA5IDIzOjU4OjM4IDIwMTQgKzAyMDAKK0BAIC0xNTQsOSArMTU0LDYgQEAKKyAKKyBpbnQgZmZpX3ByZXBfYXJnc19WRlAoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZiwgZmxvYXQgKnZmcF9zcGFjZSkKKyB7CistICAvLyBtYWtlIHN1cmUgd2UgYXJlIHVzaW5nIEZGSV9WRlAKKy0gIEZGSV9BU1NFUlQoZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX1ZGUCk7CistCisgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaSwgdmkgPSAwOworICAgcmVnaXN0ZXIgdm9pZCAqKnBfYXJndjsKKyAgIHJlZ2lzdGVyIGNoYXIgKmFyZ3AsICpyZWdwLCAqZW9fcmVncDsKK0BAIC0xNjUsNiArMTYyLDkgQEAKKyAgIGNoYXIgZG9uZV93aXRoX3JlZ3MgPSAwOworICAgY2hhciBpc192ZnBfdHlwZTsKKyAKKysgIC8vIG1ha2Ugc3VyZSB3ZSBhcmUgdXNpbmcgRkZJX1ZGUAorKyAgRkZJX0FTU0VSVChlY2lmLT5jaWYtPmFiaSA9PSBGRklfVkZQKTsKKysKKyAgIC8qIHRoZSBmaXJzdCA0IHdvcmRzIG9uIHRoZSBzdGFjayBhcmUgdXNlZCBmb3IgdmFsdWVzIHBhc3NlZCBpbiBjb3JlCisgICAgKiByZWdpc3RlcnMuICovCisgICByZWdwID0gc3RhY2s7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLy5naXRpZ25vcmUgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLy5naXRpZ25vcmUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhZjc2YWMuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS8uZ2l0aWdub3JlCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLmxpYnMKLS5kZXBzCi0qLm8KLSoubG8KLS5kaXJzdGFtcAotKi5sYQotTWFrZWZpbGUKLWNvbmZpZy5sb2cKLWNvbmZpZy5zdGF0dXMKLSp+Ci1mZmljb25maWcuaAotaW5jbHVkZS9mZmkuaAotaW5jbHVkZS9mZml0YXJnZXQuaAotbGliZmZpLnBjCi1saWJ0b29sCi1zdGFtcC1oMQotbGliZmZpKmd6Ci1hdXRvbTR0ZS5jYWNoZQotbGliZmZpLnhjb2RlcHJvai94Y3VzZXJkYXRhCi1saWJmZmkueGNvZGVwcm9qL3Byb2plY3QueGN3b3Jrc3BhY2UKLWlvcy8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvLnRyYXZpcy55bWwgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpLy50cmF2aXMueW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTZhNDI1Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvLnRyYXZpcy55bWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWxhbmd1YWdlOiBjCi1jb21waWxlcjoKLSAgLSBnY2MKLSAgLSBjbGFuZwotCi1iZWZvcmVfc2NyaXB0OiBzdWRvIGFwdC1nZXQgaW5zdGFsbCBkZWphZ251Ci0KLXNjcmlwdDogLi9jb25maWd1cmUgJiYgbWFrZSAmJiBtYWtlIGNoZWNrCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nCmluZGV4IGUwYjA1N2MuLmM4NWNiZTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nCkBAIC0xLDU1MDkgKzEsNTEwNSBAQAotMjAxMy0wMy0xNyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDA0MDNmMzMyYjFmNDc4Njk2YzMwZDNkOGEwZTJmNmVlZjI0YWFmODgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBNYXkgMTkgMDk6NDE6MzIgMjAxNCAtMDQwMAogCi0JKiBSRUFETUU6IFVwZGF0ZSBmb3IgMy4wLjEzLgotCSogY29uZmlndXJlLmFjOiBEaXR0by4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGRvYy8qOiBVcGRhdGUgdmVyc2lvbi4KKyAgICBVcGRhdGUgZGF0ZS4gQW5ub3VjaW5nIDMuMSB0b2RheS4KIAotMjAxMy0wMy0xNyAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+Citjb21taXQgOTRhYzBjMTY4ZWU3YjExNTQwOTEyMWQ4OGIyNWE0OTc5NDQ2YzhkYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE1heSAxOSAwOTozNzoyMSAyMDE0IC0wNDAwCiAKLQkqIHNyYy9jbG9zdXJlcy5jIChpc19lbXV0cmFtcF9lbmFibGVkCi0JWyFGRklfTU1BUF9FWEVDX0VNVVRSQU1QX1BBWF0pOiBNb3ZlIGRlZmF1bHQgZGVmaW5pdGlvbiBvdXRzaWRlCi0JZW5jbG9zaW5nICNpZiBzY29wZS4KKyAgICBJbmNyZW1lbnQgbGlidG9vbCBsaWJyYXJ5IHJldmlzaW9uIG51bWJlcgogCi0yMDEzLTAzLTE3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgNTc0NjU3NDRiNmUxMjk1ZDcyMDJkZTVhNzczNGRmNTg5NTE4ZjFjOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1heSAxMSAxMDozMDoyMiAyMDE0IC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogT25seSBtb2RpZnkgdG9vbGV4ZWNkaXIgaW4gY2VydGFpbiBjYXNlcy4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBVcGRhdGUgdG8gdmVyc2lvbiAzLjEKIAotMjAxMy0wMy0xNiAgR2lsbGVzIFRhbGlzICA8Z2lsbGVzLnRhbGlzQGdtYWlsLmNvbT4KK2NvbW1pdCAwYzIyNTFhNDJkZjUxMDhiNmQ5ZWJlNWZlMWNmODNkMGJjZGY2NjBlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWF5IDExIDEwOjIyOjMwIDIwMTQgLTA0MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IERvbid0IHVzZQotCWZwYXJnX2NvdW50LGV0YyBvbiBfX05PX0ZQUlNfXyB0YXJnZXRzLgorICAgIFN1cHBvcnQgdmVyc2lvbnMgb2YgZ2l0IG9sZGVyIHRoYW4gMS44LjUKIAotMjAxMy0wMy0xNiAgQWxhbiBIb3VyaWhhbmUgIDxhbGFuaEBmYWlybGl0ZS5jby51az4KK2NvbW1pdCA3MGMzMDNjYjg4ZTIzYWFlZTkxYzg3YzU2YjEwOGM1MGFiNGYzYzJmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWF5IDExIDA5OjU2OjQwIDIwMTQgLTA0MDAKIAotCSogc3JjL202OGsvc3lzdi5TIChlcGlsb2d1ZSk6IERvbid0IHVzZSBleHRiIGluc3RydWN0aW9uIG9uCi0JbTY4MDAwMCBtYWNoaW5lcy4KKyAgICBGaXggdGVzdHN1aXRlIGZvciBHQ0MgNC45LjAKIAotMjAxMy0wMy0xNiAgQWxleCBHYXlub3IgPGFsZXguZ2F5bm9yQGdtYWlsLmNvbT4KK2NvbW1pdCA1MmIzNDU3MDkzZWQxOWIyYTdjNWZjZjI0M2M0MDE0YzkwY2U2MjI1CitBdXRob3I6IE1hZ251cyBHcmFuYmVyZyA8em9ycnlAZ2VudG9vLm9yZz4KK0RhdGU6ICAgU3VuIE1heSAxMSAwOTo1NToyOCAyMDE0IC0wNDAwCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWx3YXlzIGFsaWduIHN0YWNrLgorICAgIENoZWNrIC9wcm9jL3NlbGYvc3RhdHVzIGZvciBQYVggc3RhdHVzLgogCi0yMDEzLTAzLTEzICBNYXJrb3MgQ2hhbmRyYXMgPG1hcmtvcy5jaGFuZHJhc0BpbWd0ZWMuY29tPgorY29tbWl0IDdiYTRjNWQ3MmFhNDQwYTRiMjFmYjU3ZTk5OWU2N2M1OTU3NzYxZGEKK0F1dGhvcjogRG9taW5payBWb2d0IDxkb21pbmlrLnZvZ3RAZ214LmRlPgorRGF0ZTogICBTdW4gTWF5IDExIDA5OjUyOjQ3IDIwMTQgLTA0MDAKIAotCSogY29uZmlndXJlLmFjOiBBZGQgc3VwcG9ydCBmb3IgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIE1ldGEuCi0JKiBNYWtlZmlsZS5hbTogTGlrZXdpc2UuCi0JKiBSRUFETUU6IEFkZCBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTWV0YSBkZXRhaWxzLgotCSogc3JjL21ldGFnL2ZmaS5jOiBOZXcuCi0JKiBzcmMvbWV0YWcvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgotCSogc3JjL21ldGFnL3N5c3YuUzogTGlrZXdpc2UuCisgICAgVXNlIHRvIGdldCBjb3JyZWN0IGRpcgogCi0yMDEzLTAyLTI0ICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBsaW51eC1tNjhrLm9yZz4KK2NvbW1pdCAzMWUwZDRlY2ZmNmRjMmE2Yzc1YTA2NmVlMDk5YjUyYTQzZjZiYTI3CitNZXJnZTogMWMwZTlhNyA5OTkwOWViCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgQXByIDIzIDE5OjI0OjQ3IDIwMTQgLTA0MDAKIAotCSogZG9jL2xpYmZmaS50ZXhpIChTdHJ1Y3R1cmVzKTogRml4IG1pc3NpbmcgY2F0ZWdvcnkgYXJndW1lbnQgb2YKLQlAZGVmdHAuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMTkgZnJvbSBqb3NodHJpcGxldHQvZmFzdGNhbGwtZmFzdGJhbGwKKyAgICAKKyAgICBzcmMveDg2L3dpbjMyLlM6IERlZmluZSBmZmlfY2xvc3VyZV9GQVNUQ0FMTCBpbiB0aGUgTUFTTSBzZWN0aW9uLCB0b28KIAotMjAxMy0wMi0xMSAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgOTk5MDllYjYxODRiNjI0MDhkODhiNmI0ZTdhYjM4ZTg0ZTZkMGJmMworQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFR1ZSBBcHIgMjIgMjE6MTc6NTIgMjAxNCAtMDcwMAogCi0JKiBjb25maWd1cmUuYWM6IFVwZGF0ZSByZWxlYXNlIG51bWJlciB0byAzLjAuMTIuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBSRUFETUU6IFVwZGF0ZSByZWxlYXNlIGluZm8uCisgICAgc3JjL3g4Ni93aW4zMi5TOiBEZWZpbmUgZmZpX2Nsb3N1cmVfRkFTVENBTEwgaW4gdGhlIE1BU00gc2VjdGlvbiwgdG9vCiAKLTIwMTMtMDItMTAgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDFjMGU5YTcyOTdjZWQxNTQxM2MyZDJkNWQzNWY2YzY1MGM0YjQ2YzkKK01lcmdlOiA5M2EyNGYyIGQzNjk1MjIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBBcHIgMjEgMTI6NDE6NTYgMjAxNCAtMDQwMAogCi0JKiBSRUFETUU6IEFkZCBNb3hpZS4KLQkqIHNyYy9tb3hpZS9mZmkuYzogQ3JlYXRlZC4KLQkqIHNyYy9tb3hpZS9lYWJpLlM6IENyZWF0ZWQuCi0JKiBzcmMvbW94aWUvZmZpdGFyZ2V0Lmg6IENyZWF0ZWQuCi0JKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIE1veGllLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuYWM6IEFkZCBNb3hpZS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBEaXNhYmxlIGZvcm1hdCBzdHJpbmcKLQl3YXJuaW5ncyBmb3IgbW94aWUqLSotZWxmIHRlc3RzLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTAxIGZyb20gam9zaHRyaXBsZXR0L2Zhc3RjYWxsLWNsb3N1cmVzCisgICAgCisgICAgU3VwcG9ydCBjbG9zdXJlcyBmb3IgZmFzdGNhbGwKIAotMjAxMy0wMi0xMCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgZDM2OTUyMjczZDRmYWZiZGE5MWVjYzIwNWZjMDgyNGY3Y2M2NWU3MAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBBcHIgMjAgMTI6MDM6MjUgMjAxNCAtMDcwMAogCi0JKiBNYWtlZmlsZS5hbSAoTFRMREZMQUdTKTogRml4IHJlZmVyZW5jZS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgIFN1cHBvcnQgZmFzdGNhbGwgY2xvc3VyZXMKKyAgICAKKyAgICBsaWJmZmkgb24gMzItYml0IHg4NiBub3cgc3VwcG9ydHMgY2xvc3VyZXMgZm9yIGFsbCBzdXBwb3J0ZWQgQUJJcy4KKyAgICBUaHVzLCByZXdyaXRlIHRoZSBsYXN0IHJlbWFpbmluZyBkdXBsaWNhdGVkLWJ5LUFCSSB0ZXN0IChjbG9zdXJlX3N0ZGNhbGwKKyAgICBhbmQgY2xvc3VyZV90aGlzY2FsbCkgdG8gdXNlIHRoZSBnZW5lcmljIEFCSV9OVU0vQUJJX0FUVFIgbWVjaGFuaXNtLgogCi0yMDEzLTAyLTEwICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA5M2EyNGYyMTZiY2RkMTAxOGI5NzZkNjk3MTc5YzZkNDkwMDQwMTVhCitNZXJnZTogZGQxMWEwNCAyMzQ5ZmVjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgQXByIDEyIDE5OjM4OjA3IDIwMTQgLTA0MDAKIAotCSogUkVBRE1FOiBVcGRhdGUgc3VwcG9ydGVkIHBsYXRmb3Jtcy4gIFVwZGF0ZSB0ZXN0IHJlc3VsdHMgbGluay4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzgwIGZyb20gdWVuby9kZXZlbAorICAgIAorICAgIEZpeCB0eXBvIGluIGRvYwogCi0yMDEzLTAyLTA5ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBkZDExYTA0MDYxY2I0OWNlMWQ3MDI1NDU2OTNjMjRlYjEyNjdkNjQ4CitNZXJnZTogOGZhMjgxMiAwM2NhODgwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgQXByIDEyIDE5OjM3OjIxIDIwMTQgLTA0MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jOiBSZW1vdmUgZm9yY2VkIC1PMi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Mi5jIChmb28pOiBSZW1vdmUgR0NDaXNtLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQWRkIGRlZmF1bHQgUFJJdVBUUiBkZWZpbml0aW9uLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjODYgZnJvbSBqb3NodHJpcGxldHQvdGVzdHN1aXRlLUNDLUNYWAorICAgIAorICAgIHRlc3RzdWl0ZSBpZ25vcmVzIENDIHBhcmFtZXRlciBzdXBwbGllZCB0byBjb25maWd1cmUgb3IgbWFrZQogCi0JKiBzcmMvc3BhcmMvdjguUyAoZmZpX2Nsb3N1cmVfdjgpOiBJbXBvcnQgYW5jaWVudCB1bG9uZ2xvbmcKLQljbG9zdXJlIHJldHVybiB0eXBlIGZpeCBkZXZlbG9wZWQgYnkgTWFydGluIHYuIEzDtndpcyBmb3IgY3B5dGhvbgotCWZvcmsuCitjb21taXQgOGZhMjgxMjM1NWU2ODVhNDJhYmY5YTYyZmJjNjc0ZDYxNmIyZWRlZQorTWVyZ2U6IDhhNThlNmIgNDE5NTAzZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEFwciAxMiAxOTozMjowOCAyMDE0IC0wNDAwCiAKLTIwMTMtMDItMDggIEFuZHJlYXMgVG9ibGVyICA8YW5kcmVhc3RAZmd6bmV0LmNoPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTE2IGZyb20gZnJpZGEvZml4L2Rhcndpbi1hYXJjaDY0LXZhcmlhZGljCisgICAgCisgICAgRml4IGhhbmRsaW5nIG9mIHZhcmlhZGljIGNhbGxzIG9uIERhcndpbi9BQXJjaDY0CiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeCBzbWFsbCBzdHJ1Y3QKLQlzdXBwb3J0LgotCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBEaXR0by4KK2NvbW1pdCA4YTU4ZTZiNzgwNWI3MzZkZWYxOTdiOGJhZjhlNDY1YTJhM2Y2OTEzCitNZXJnZTogMzBiNzdjNSBhNTM5ZjdmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgQXByIDEyIDE5OjMwOjE4IDIwMTQgLTA0MDAKIAotMjAxMy0wMi0wOCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMTUgZnJvbSBmcmlkYS9maXgvZGFyd2luLWFhcmNoNjQtYWxpZ25tZW50CisgICAgCisgICAgRml4IGFsaWdubWVudCBvZiBBQXJjaDY0IGFzc2VtYmxlciBmdW5jdGlvbnMKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmM6IFJlbW92ZSB4ZmFpbCBmb3IKLQlhcm0qLSotKi4KK2NvbW1pdCAzMGI3N2M1NmY5NWM2M2VjZDgzMzk5YWFmZGJhZDdiMDczMzBmMmZkCitNZXJnZTogZGMzM2NiMyAzZTJiODRkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgQXByIDEyIDE5OjI5OjEzIDIwMTQgLTA0MDAKIAotMjAxMy0wMi0wOCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMTcgZnJvbSBmcmlkYS9maXgvd2luZG93cy1yZWdyZXNzaW9uCisgICAgCisgICAgRml4IFdpbmRvd3MgcmVncmVzc2lvbgogCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRml4IGNhY2hlIGZsdXNoaW5nIGZvciBHQ0MuCitjb21taXQgM2UyYjg0ZDI5NTUzMTcyMDkxN2JmNDZhZmM1MzJmYzZkODc3ZTNlYworQXV0aG9yOiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGlsbGl0ZWNoLmNvbT4KK0RhdGU6ICAgU2F0IEFwciAxMiAwMTowNDowNCAyMDE0ICswMjAwCiAKLTIwMTMtMDItMDggIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorICAgIEZpeCBXaW5kb3dzIHJlZ3Jlc3Npb24KKyAgICAKKyAgICBJbnRyb2R1Y2VkIGJ5IGI1ZmVkNjAxOTQ4MjM3MDM3NTEzYTliN2Y5NjdjOGZjNmM5ZmYxZjYuCiAKLQkqIG1hbi9mZmlfcHJlcF9jaWYuMzogQ2xlYW4gdXAgZm9yIGRlYmlhbiBsaW50ZXIuCitjb21taXQgNDE5NTAzZjQwOWMzMjFmZTMxZmY1OWQ5NjNlZjM0YmI5MTM0MjBkMAorQXV0aG9yOiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGlsbGl0ZWNoLmNvbT4KK0RhdGU6ICAgU3VuIEFwciA2IDIwOjU0OjEzIDIwMTQgKzAyMDAKIAotMjAxMy0wMi0wOCAgUGV0ZXIgQmVyZ25lciAgPGJlcmduZXJAdm5ldC5pYm0uY29tPgorICAgIEZpeCBoYW5kbGluZyBvZiB2YXJpYWRpYyBjYWxscyBvbiBEYXJ3aW4vQUFyY2g2NAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQWNjb3VudCBmb3IgRlAgYXJncyBwdXNoZWQKLQlvbiB0aGUgc3RhY2suCitjb21taXQgYTUzOWY3ZmZkNjc4M2FhMTEzNTNkMTMyNjU1MjBlNDUzYzU2NWZiNAorQXV0aG9yOiBPbGUgQW5kcsOpIFZhZGxhIFJhdm7DpXMgPG9sZS5hbmRyZS5yYXZuYXNAdGlsbGl0ZWNoLmNvbT4KK0RhdGU6ICAgU3VuIEFwciA2IDIwOjUzOjAyIDIwMTQgKzAyMDAKIAotMjAxMy0wMi0wOCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgRml4IGFsaWdubWVudCBvZiBBQXJjaDY0IGFzc2VtYmxlciBmdW5jdGlvbnMKIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbWlzc2luZyBmaWxlcy4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERpdHRvLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgZGMzM2NiM2M5OThkYTUyMWE5NjAzODVjMTI2OWMzYWVmNTUyZjY5ZgorTWVyZ2U6IGM4NjBhOTkgYjVmZWQ2MAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEFwciA1IDIzOjQxOjIyIDIwMTQgLTA0MDAKIAotMjAxMy0wMi0wOCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMTQgZnJvbSBqb3NodHJpcGxldHQvYm91bmNlLW9uLWEtdGlueS10cmFtcG9saW5lCisgICAgCisgICAgRml4IEFCSSBvbiAzMi1iaXQgbm9uLVdpbmRvd3MgeDg2OiBnbyBiYWNrIHRvIHRyYW1wb2xpbmUgc2l6ZSAxMAogCi0JKiBjb25maWd1cmUuYWM6IE1vdmUgc3BhcmMgYXNtIGNvbmZpZyBjaGVja3MgdG8gd2l0aGluIGZ1bmN0aW9ucwotCWZvciBjb21wYXRpYmlsaXR5IHdpdGggc3VuIHRvb2xzLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZsdXNoIGNhY2hlIG9uIHY5Ci0Jc3lzdGVtcy4KLQkqIHNyYy9zcGFyYy92OC5TIChmZmlfZmx1c2hfaWNhY2hlKTogSW1wbGVtZW50IGEgc3BhcmMgdjkgY2FjaGUKLQlmbHVzaGVyLgorY29tbWl0IGI1ZmVkNjAxOTQ4MjM3MDM3NTEzYTliN2Y5NjdjOGZjNmM5ZmYxZjYKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTYXQgQXByIDUgMTc6MzM6NDIgMjAxNCAtMDcwMAogCi0yMDEzLTAyLTA4ICBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorICAgIEZpeCBBQkkgb24gMzItYml0IG5vbi1XaW5kb3dzIHg4NjogZ28gYmFjayB0byB0cmFtcG9saW5lIHNpemUgMTAKKyAgICAKKyAgICBUaGUgdHJhbXBvbGluZSBzaXplIGlzIHBhcnQgb2YgdGhlIEFCSSwgc28gaXQgY2Fubm90IGNoYW5nZS4gIE1vdmUgdGhlCisgICAgbG9naWMgZnJvbSB0aGUgc3RkY2FsbCBhbmQgdGhpc2NhbGwgdHJhbXBvbGluZXMgdG8gdGhlIGZ1bmN0aW9ucyB0aGV5CisgICAgY2FsbCwgdG8gcmVkdWNlIHRoZW0gYm90aCB0byAxMCBieXRlcy4KKyAgICAKKyAgICBUaGlzIGRyb3BzIHRoZSBwcmV2aW91c2x5IGFkZGVkIHN1cHBvcnQgZm9yIHJhdyBUSElTQ0FMTCBjbG9zdXJlcyBvbgorICAgIG5vbi1XaW5kb3dzLiAgKE5vbi1yYXcgVEhJU0NBTEwgY2xvc3VyZXMgc3RpbGwgd29yay4pCiAKLQkqIHNyYy9taWNyb2JsYXplL2ZmaS5jIChmZmlfY2xvc3VyZV9jYWxsX1NZU1YpOiBGaXggaGFuZGxpbmcgb2YKLQlzbWFsbCBiaWctZW5kaWFuIHN0cnVjdHVyZXMuCi0JKGZmaV9wcmVwX2FyZ3MpOiBEaXR0by4KK2NvbW1pdCAwM2NhODgwMDgxYjIyZWZhYjA5YmE3MjI2ODI3MGY4MzAxN2QzZDdiCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgVGh1IE1hciAyNyAwODo0NDozNCAyMDE0IC0wNzAwCiAKLTIwMTMtMDItMDcgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIFJFQURNRTogTm90ZSB0aGUgdGVzdHN1aXRlIGNoYW5nZXMgdG8gcmVzcGVjdCAkQ0MgYW5kICRDWFgKIAotCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jYWxsX3Y4KTogRml4IHR5cG8gZnJvbSBsYXN0IHBhdGNoCi0JKGVmZmVjdGl2ZWx5IGhpZGluZyBmZmlfY2FsbF92OCkuCitjb21taXQgZDc0ZGY4YzVkOGM2NzIyZWNiOTA4ZGE5OGM4NmNjOGUyYzc1NWI4NAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFRodSBNYXIgMjcgMDA6NDQ6MTIgMjAxNCAtMDcwMAogCi0yMDEzLTAyLTA3ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBSRUFETUU6IFVwZGF0ZSBXaW5kb3dzIGV4YW1wbGUgdG8gc2V0IGJvdGggQ0MgYW5kIENYWAogCi0JKiBjb25maWd1cmUuYWM6IFVwZGF0ZSBidWcgcmVwb3J0aW5nIGFkZHJlc3MuCi0JKiBjb25maWd1cmUuaW46IFJlYnVpbGQuCitjb21taXQgN2Q2OTgxMjViMWYwNTE3M2YzNjU2YTg5NzU1YTJlYjU4ODEzYjAwMgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjYgMjM6MTc6NTYgMjAxNCAtMDcwMAogCi0JKiBzcmMvc3BhcmMvdjguUyAoZmZpX2ZsdXNoX2ljYWNoZSk6IE91dC1vZi1saW5lIGNhY2hlIGZsdXNoZXIgZm9yCi0JU3VuIGNvbXBpbGVyLgotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfY2FsbCk6IFJlbW92ZSB3YXJuaW5nLgotCUNhbGwgZmZpX2ZsdXNoX2ljYWNoZSBmb3Igbm9uLUdDQyBidWlsZHMuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVXNlIGZmaV9mbHVzaF9pY2FjaGUuCisgICAgVXNlIHRoZSBwcm9wZXIgQysrIGNvbXBpbGVyIHRvIHJ1biBDKysgdGVzdHMKKyAgICAKKyAgICBSdW5uaW5nIHRoZSBDIGNvbXBpbGVyIHdpdGggLXNoYXJlZC1saWJnY2MgLWxzdGRjKysgZG9lcyBub3Qgd29yayBvbgorICAgIG5vbi1HQ0MgY29tcGlsZXJzLgogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBsaWJ0b29sLWxkZmxhZ3MuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGxpYnRvb2wtbGRmbGFnczogTmV3IGZpbGUuCitjb21taXQgZmE1ZTg4ZjE3MGNiMzdjN2IyYjliYjAxNWM4YzViODU0ZmZkOGEzZQorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjYgMjM6NTM6NTcgMjAxNCAtMDcwMAogCi0yMDEzLTAyLTA3ICBEYW5pZWwgU2NoZXBsZXIgPGRzY2hlcGxlckBnbWFpbC5jb20+CisgICAgLnRyYXZpcy55bWw6IE1ha2UgdGhlIGJ1aWxkIGNvbW1hbmQgbW9yZSByZWFkYWJsZSBieSBzcGxpdHRpbmcgYXQgJiYKKyAgICAKKyAgICAic2NyaXB0IiBjYW4gY29udGFpbiBtdWx0aXBsZSBjb21tYW5kcyB0byBydW4gaW4gc2VxdWVuY2UuCiAKLQkqIGNvbmZpZ3VyZS5hYzogQ29ycmVjdGx5IGlkZW50aWZ5IHgzMiBzeXN0ZW1zIGFzIDY0LWJpdC4KLQkqIG00L2xpYnRvb2wubTQ6IFJlbW92ZSBsaWJ0b29sIGV4cHIgZXJyb3IuCi0JKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgMGMzODI0NzAyZDNkNTlkMzdmOGMxNzdkNjQ2MzAzZjU0NjE4NzY4MworQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjYgMTQ6NTE6MzIgMjAxNCAtMDcwMAogCi0yMDEzLTAyLTA3ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBBbHdheXMgc2V0IENDX0ZPUl9UQVJHRVQgZm9yIGRlamFnbnUsIHRvIG1ha2UgdGhlIHRlc3RzdWl0ZSByZXNwZWN0ICRDQworICAgIAorICAgIFRoaXMgZml4ZXMgY3Jvc3MtY29tcGlsYXRpb24gYW5kIGNvbXBpbGF0aW9uIHdpdGggQ0M9ImdjYyAtbTMyIi4KIAotCSogY29uZmlndXJlLmFjOiBGaXggR0NDIHVzYWdlIHRlc3QuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBSRUFETUU6IE1lbnRpb24gTExWTS9HQ0MgeDg2XzY0IGlzc3VlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IDk5NDZhOTJhZjMxYjMwY2I3NzYwMTUwZDFmOGNhNmMxMWIwMWFlZWEKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBXZWQgTWFyIDI2IDIwOjE4OjU4IDIwMTQgLTA3MDAKIAotMjAxMy0wMi0wNyAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgU3RvcCBsb29raW5nIGZvciBleHBlY3QgYW5kIHJ1bnRlc3QgYWJvdmUgdG9wX2J1aWxkZGlyCisgICAgCisgICAgVXNlcnMgd2lzaGluZyB0byB0ZXN0IGhhbmQtY29tcGlsZWQgdmVyc2lvbnMgb2YgZXhwZWN0IGFuZCBydW50ZXN0IGNhbgorICAgIGVhc2lseSBlbm91Z2ggcHV0IHRoZW0gaW4gdGhlaXIgcGF0aCBvciBzZXQgRVhQRUNUIGFuZCBSVU5URVNUCisgICAgdGhlbXNlbHZlcy4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyAobWFpbik6IFJlcGxhY2UgLy8gc3R5bGUKLQljb21tZW50cyB3aXRoIC8qICovIGZvciB4bGMgY29tcGlsZXIuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdF92YS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyAobWFpbik6IERpdHRvLgorY29tbWl0IGFjYjIwMjMyNTIxNTA1ODYzOTIzNGVmYjdhZjFmMDRjMWM4YTFmNDQKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBXZWQgTWFyIDI2IDIwOjE4OjQxIDIwMTQgLTA3MDAKIAotMjAxMy0wMi0wNiAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgU3RvcCBzZXR0aW5nIGFuIGVtcHR5IEFNX1JVTlRFU1RGTEFHUwogCi0JKiBtYW4vZmZpX3ByZXBfY2lmLjM6IENsZWFuIHVwIGZvciBkZWJpYW4gbGludGlhbiBjaGVja2VyLgorY29tbWl0IGM4NjBhOTkyZmVmNWQ3Y2Q3YmIwOTc1YjE2MzJkMTdhOWZhZmUwMDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMjUgMTc6MDI6NTEgMjAxNCAtMDQwMAogCi0yMDEzLTAyLTA2ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBVcGdyYWRlIHZlcnNpb24gdG8gMy4xLXJjMQogCi0JKiBNYWtlZmlsZS5hbSAocGtnY29uZmlnZGlyKTogQWRkIG1pc3NpbmcgcGtnY29uZmlnIGluc3RhbGwgYml0cy4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWxkLgorY29tbWl0IDk4MzcwNzNlNjIwMzA0OGExNjJhMjI2Nzk4YzVkMjUyNjAwMjE5ZWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMjUgMTY6MjQ6MTQgMjAxNCAtMDQwMAogCi0yMDEzLTAyLTAyICBNYXJrIEggV2VhdmVyIDxtaHdAbmV0cmlzLm9yZz4KKyAgICBVcGRhdGUgY29weXJpZ2h0IGRhdGUgYW5kIGNsZWFuIHVwIFJFQURNRSBub3Rlcy4KIAotCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfY2FsbCk6IFNpZ24tZXh0ZW5kIGludGVnZXIgYXJndW1lbnRzIHBhc3NlZAotCXZpYSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLgorY29tbWl0IDE4ZDNiYWE5ZjU5N2IwMjY2NzViYWExYjRlNWE1ZWVlZjc1NzdhMDgKK01lcmdlOiBhZmVlNTM3IGYwYzhhMzEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMjUgMTY6MTI6NTMgMjAxNCAtMDQwMAogCi0yMDEzLTAxLTIxICBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTA4IGZyb20gam9zaHRyaXBsZXR0L2ZyZWVic2QKKyAgICAKKyAgICBbMy4xIGJsb2NrZXJdIEZpeCBGcmVlQlNEIHN1cHBvcnQKIAotCSogUkVBRE1FOiBBZGQgTWljcm9CbGF6ZSBkZXRhaWxzLgotCSogTWFrZWZpbGUuYW06IEFkZCBNaWNyb0JsYXplIHN1cHBvcnQuCi0JKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgotCSogc3JjL21pY3JvYmxhemUvZmZpLmM6IE5ldy4KLQkqIHNyYy9taWNyb2JsYXplL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KLQkqIHNyYy9taWNyb2JsYXplL3N5c3YuUzogTGlrZXdpc2UuCitjb21taXQgYWZlZTUzNzM4YTk5NWUyM2JkMmY4OWZkMGY3YjMwYjM4MDU2NjEwNgorTWVyZ2U6IDdkMjQ3ODUgYjJkNjEwZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE1hciAyNSAxNjoxMjozNSAyMDE0IC0wNDAwCiAKLTIwMTMtMDEtMjEgIE5hdGhhbiBSb3NzaSA8bmF0aGFuLnJvc3NpQHhpbGlueC5jb20+Ci0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3VjLmM6IEZpeGVkIGlzc3VlLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMTA2IGZyb20gam9zaHRyaXBsZXR0L2Rhcndpbi1hd2FyZAorICAgIAorICAgIFszLjEgYmxvY2tlcl0gVXBkYXRlIE9TIFggYnVpbGQgc3lzdGVtIHRvIGluY2x1ZGUgd2luMzIuUyBvbiAzMi1iaXQKIAotMjAxMy0wMS0yMSAgQ2hyaXMgWmFua2VsICAgPGNocmlzQHphbmtlbC5uZXQ+Citjb21taXQgN2QyNDc4NTY4ZWQ5ZjAzY2JmNTc2MjdmNDQ5YTJkMmNmNGQxNTcxYworTWVyZ2U6IGJlYWI1ZjMgNTZiZTQ3ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE1hciAyNSAxNjoxMjoxNyAyMDE0IC0wNDAwCiAKLQkqIFJFQURNRTogQWRkIFh0ZW5zYSBzdXBwb3J0LgotCSogTWFrZWZpbGUuYW06IExpa2V3aXNlLgotCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluIFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmU6IExpa2V3aXNlLgotCSogc3JjL3ByZXBfY2lmLmM6IEhhbmRsZSBYdGVuc2EuCi0JKiBzcmMveHRlbnNhOiBOZXcgZGlyZWN0b3J5LgotCSogc3JjL3h0ZW5zYS9mZmkuYzogTmV3IGZpbGUuCi0JKiBzcmMveHRlbnNhL2ZmaXRhcmdldC5oOiBEaXR0by4KLQkqIHNyYy94dGVuc2Evc3lzdi5TOiBEaXR0by4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzExMCBmcm9tIGpvc2h0cmlwbGV0dC93NjQKKyAgICAKKyAgICBGaXggNjQtYml0IFdpbmRvd3Mgc3VwcG9ydAogCi0yMDEzLTAxLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgYmVhYjVmMzM0ZDllYzViOGI5MWQxY2M3MjdkMTAyOWI0MDM1OGU3ZQorTWVyZ2U6IDI4ZmIxOTcgZWY1ODkwZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE1hciAyNSAxNjowNzo0NyAyMDE0IC0wNDAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IFJlcGxhY2UgLy8gc3R5bGUKLQljb21tZW50cyB3aXRoIC8qICovIGZvciB4bGMgY29tcGlsZXIuCi0JKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfQUlYKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChhbGxvY2F0ZV9tbWFwKTogRGVsZXRlCi0JZGVwcmVjYXRlZCBpbmxpbmUgZnVuY3Rpb24uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBEaXR0by4KLQkqIFJFQURNRTogQWRkIHVwZGF0ZSBmb3IgQUlYIHN1cHBvcnQuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMDUgZnJvbSBqb3NodHJpcGxldHQvd2luMzItcmVsb2NhdGlvbnMKKyAgICAKKyAgICBbMy4xIGJsb2NrZXJdIHdpbjMyLlMgbmVlZHMgdG8gaGFuZGxlIHJlbG9jYXRpb25zL0dPVAogCi0yMDEzLTAxLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgZjBjOGEzMTU3NzE3MjEwNDA0OTI4M2YwYTgwYzcyMzA4NGE1YmQ3NworQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjQgMjI6MTQ6MjYgMjAxNCAtMDcwMAogCi0JKiBjb25maWd1cmUuYWM6IFJvYnVzdGlmeSBwYyByZWxhdGl2ZSByZWxvYyBjaGVjay4KLQkqIG00L2F4X2NjX21heG9wdC5tNDogRG9uJ3QgLW1hbGlnbi1kb3VibGUuICBUaGlzIGlzIGFuIEFCSQotCWNoYW5naW5nIG9wdGlvbiBmb3IgMzItYml0IHg4Ni4KLQkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIFJFQURNRTogVXBkYXRlIHN1cHBvcnRlZCB0YXJnZXQgbGlzdC4KKyAgICBDb21waWxlIHdpbjMyLlMgb24gRnJlZUJTRAogCi0yMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgYjJkNjEwZTAyOGI1Y2U0OGQxYWQ3ZTVkMGRlYmM5YzMyMWQ4OTFiMgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIEZyaSBNYXIgMjEgMTE6MTA6MTMgMjAxNCAtMDcwMAogCi0JKiBSRUFETUUgKHRlc3RlZCk6IEFkZCBDb21waWxlciBjb2x1bW4gdG8gdGFibGUuCisgICAgQ29tcGlsZSB3aW4zMi5TIG9uIDMyLWJpdCBEYXJ3aW4gYXMgd2VsbAogCi0yMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgYmU1MGI4N2E0OTBlNzk0MzYyY2I0YTI3YWRhMmZiYWFiMjAyYWRiOAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjQgMjE6NDQ6MTMgMjAxNCAtMDcwMAogCi0JKiBzcmMveDg2L2ZmaTY0LmMgKHN0cnVjdCByZWdpc3Rlcl9hcmdzKTogTWFrZSBzc2UgYXJyYXkgYW5kIGFycmF5Ci0Jb2YgdW5pb25zIGZvciBzdW5wcm8gY29tcGlsZXIgY29tcGF0aWJpbGl0eS4KKyAgICBBbHdheXMgdXNlIGNvbmZpZ3VyZSB0byBkZXRlY3Qgd2hldGhlciBnbG9iYWwgc3ltYm9scyBuZWVkIHVuZGVyc2NvcmVzCisgICAgCisgICAgNjQtYml0IFdpbmRvd3MgYWxyZWFkeSB1c2VkIHRoaXMgY2hlY2s7IG1ha2UgaXQgdW5pdmVyc2FsLCBhbmQgdXNlIGl0IGluCisgICAgcGxhY2Ugb2YgYW4gaWZkZWYgb24gWDg2X1dJTjMyLCB0byBoYW5kbGUgbm9uLVdpbmRvd3MgcGxhdGZvcm1zIHRoYXQgdXNlCisgICAgdGhlIHVuZGVyc2NvcmUsIHN1Y2ggYXMgRGFyd2luLgogCi0yMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgNTZiZTQ3Zjg3NjI5ZTMxYWZiY2IwNzc0YWE2NTczNWY1MzllZTk3MgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjQgMjE6MjQ6NTMgMjAxNCAtMDcwMAogCi0JKiBjb25maWd1cmUuYWM6IFRlc3QgdGFyZ2V0IHBsYXRmb3JtIHNpemVfdCBzaXplLiAgSGFuZGxlIGJvdGggMzIKLQlhbmQgNjQtYml0IGJ1aWxkcyBmb3IgeDg2XzY0LSogYW5kIGk/ODYtKiB0YXJnZXRzIChhbGxvd2luZyBmb3IKLQlDRkxBRyBvcHRpb24gdG8gY2hhbmdlIGRlZmF1bHQgc2V0dGluZ3MpLgotCSogY29uZmlndXJlLCBhY2xvY2FsLm00OiBSZWJ1aWx0LgorICAgIEZpeCBhIHdhcm5pbmcgb24gNjQtYml0IFdpbmRvd3MKKyAgICAKKyAgICBXaGVuIHNpemVvZihzaXplX3QpICE9IHNpemVvZih1bnNpZ25lZCksIGFkZGluZyBhIHNpemVfdCB0byBjaWYtPmJ5dGVzCisgICAgcHJvZHVjZXMgYSAicG9zc2libGUgbG9zcyBvZiBkYXRhIiB3YXJuaW5nLiAgSG93ZXZlciwgdGhlIHNpemVfdCBpbgorICAgIHF1ZXN0aW9uIHJlZmVycyB0byB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBwYXJhbWV0ZXIuICBVc2UgYSBjYXN0IHRvIGF2b2lkCisgICAgdGhlIHdhcm5pbmcuCiAKLTIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA0OGE4ZWRhNzRhYWQ4YTIxYjZmMjZkZjVkZjA4ZmU2NGMwNDNkMjA4CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNCAyMToyMToxMiAyMDE0IC0wNzAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogT25seSBydW4gZXhjZXB0aW9uCi0JaGFuZGxpbmcgdGVzdHMgd2hlbiB1c2luZyBHTlUgY29tcGlsZXIuCisgICAgQXZvaWQgcmVmZXJlbmNpbmcgdW5kZWZpbmVkIEFCSXMgb24gNjQtYml0IFdpbmRvd3MgYnVpbGRzCisgICAgCisgICAgNjQtYml0IFdpbmRvd3MgZG9lcyBub3QgaGF2ZSBGRklfU1REQ0FMTCwgRkZJX1RISVNDQUxMLCBvciBGRklfRkFTVENBTEwuCiAKLQkqIG00L2F4X2NvbXBpbGVyX3ZlbmRvci5tNDogTmV3IGZpbGUuCi0JKiBjb25maWd1cmUuYWM6IFRlc3QgZm9yIGNvbXBpbGVyIHZlbmRvciBhbmQgZG9uJ3QgdXNlCi0JQVhfQ0ZMQUdTX1dBUk5fQUxMIHdpdGggdGhlIHN1biBjb21waWxlci4KLQkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCBmMGY0MTM4ZjkwMzQ1ZDdkNjdkZmE2NzgzYTdlMWM3Y2MzMGQzYzZmCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU2F0IE1hciAyMiAxMDowMDo1MyAyMDE0IC0wNzAwCiAKLTIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICB3aW4zMi5TOiBBZGQgaGFuZGxpbmcgZm9yIHBvc2l0aW9uLWluZGVwZW5kZW50IGNvZGUgb24gRGFyd2luCisgICAgCisgICAgTmV3ZXIgdmVyc2lvbnMgb2YgRGFyd2luIGdlbmVyYXRlIHRoZSBuZWNlc3Nhcnkgc3R1YiBmdW5jdGlvbnMKKyAgICBhdXRvbWF0aWNhbGx5IGFuZCBqdXN0IG5lZWQgYSBjYWxsIGluc3RydWN0aW9uLCBidXQgYWNjb21vZGF0aW5nIG9sZGVyCisgICAgdmVyc2lvbnMgYXMgd2VsbCByZXF1aXJlcyBhZGRpbmcgdGhlIHN0dWIuCiAKLQkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBEb24ndCB1c2UgR0NDaXNtcyB0byBkZWZpbmUgdHlwZXMgd2hlbgotCWJ1aWxkaW5nIHdpdGggdGhlIFNVTlBSTyBjb21waWxlci4KK2NvbW1pdCBlZjU4OTBlYmFmYjdjZDJmYmY5YWNmMTYxZWRiNTVmZTEzODI4NzFjCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgRnJpIE1hciAyMSAxMTowMTozOSAyMDE0IC0wNzAwCiAKLTIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICB3aW4zMi5TOiBVc2Ugc2hpZnRpbmcgZm9yIG11bHRpcGxpY2F0aW9uIHJhdGhlciB0aGFuIHJlcGVhdGVkIGFkZGl0aW9uCisgICAgCisgICAgVGhlIGp1bXAgdGFibGUgY29kZSBhZGRlZCBhIHJlZ2lzdGVyIHRvIGl0c2VsZiB0d2ljZSB0byBtdWx0aXBseSBieSA0OworICAgIHNoaWZ0IHRoZSByZWdpc3RlciBsZWZ0IGJ5IDIgaW5zdGVhZC4KIAotCSogY29uZmlndXJlLmFjOiBQdXQgbG9jYWwuZXhwIGluIHRoZSByaWdodCBwbGFjZS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCA0ZmNhNDg5MDFlN2U0ZjUzYmY0OTBlZDIyNjA3YjJkMmQ4ZjRiZmNjCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgRnJpIE1hciAyMSAxMTowMDo0MSAyMDE0IC0wNzAwCiAKLQkqIHNyYy94ODYvZmZpLmM6IFVwZGF0ZSBjb21tZW50IGFib3V0IHJlZ3Bhcm0gZnVuY3Rpb24gYXR0cmlidXRlcy4KLQkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogVGhlIFNVTlBSTyBjb21waWxlciByZXF1aXJlcwotCXRoYXQgYWxsIGZ1bmN0aW9uIGFyZ3VtZW50cyBiZSBwYXNzZWQgb24gdGhlIHN0YWNrIChubyByZWdwYXJtCi0Jc3VwcG9ydCkuCisgICAgd2luMzIuUzogTWFrZSB0aGUganVtcCB0YWJsZXMgcG9zaXRpb24taW5kZXBlbmRlbnQKKyAgICAKKyAgICBOb3cgdGhhdCBub24tV2luZG93cyBwbGF0Zm9ybXMgaW5jbHVkZSB3aW4zMi5TLCBpdCBuZWVkcyB0byBzdXBwb3J0CisgICAgYnVpbGRpbmcgYXMgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZS4gIFRoaXMgZml4ZXMgYnVpbGQgZmFpbHVyZXMgb24KKyAgICB0YXJnZXQgcGxhdGZvcm1zIHRoYXQgZG8gbm90IGFsbG93IHRleHQgcmVsb2NhdGlvbnMuCiAKLTIwMTMtMDEtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCAyMDg3ZGNmNzM2Mjc0Mjg2Zjc2YzY5ZDM5ODhmYjZkN2NjNGZkMGY1CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgRnJpIE1hciAyMSAxMDo1NzowNiAyMDE0IC0wNzAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogR2VuZXJhdGUgbG9jYWwuZXhwLiAgVGhpcyBzZXRzIENDX0ZPUl9UQVJHRVQKLQl3aGVuIHdlIGFyZSB1c2luZyB0aGUgdmVuZG9yIGNvbXBpbGVyLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtIChFWFRSQV9ERUpBR05VX1NJVEVfQ09ORklHKTogUG9pbnQgdG8KLQkuLi9sb2NhbC5leHAuCi0JKiBjb25maWd1cmUsIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICB3aW4zMi5TOiBNYWtlIGNhbGxzIHRvIGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIgcG9zaXRpb24taW5kZXBlbmRlbnQKKyAgICAKKyAgICBOb3cgdGhhdCBub24tV2luZG93cyBwbGF0Zm9ybXMgaW5jbHVkZSB3aW4zMi5TLCBpdCBuZWVkcyB0byBzdXBwb3J0CisgICAgYnVpbGRpbmcgYXMgcG9zaXRpb24taW5kZXBlbmRlbnQgY29kZS4gIFRoaXMgZml4ZXMgb25lIHNvdXJjZSBvZiBidWlsZAorICAgIGZhaWx1cmVzIG9uIHRhcmdldCBwbGF0Zm9ybXMgdGhhdCBkbyBub3QgYWxsb3cgdGV4dCByZWxvY2F0aW9ucy4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBSdW4gdGVzdHMgd2l0aCBkaWZmZXJlbnQKLQlvcHRpb25zLCBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3Qgd2UgYXJlIHVzaW5nIGdjYyBvciB0aGUKLQl2ZW5kb3IgY29tcGlsZXIuCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS5leHAgKGxpYmZmaS1pbml0KTogU2V0IHVzaW5nX2djYyBiYXNlZCBvbgotCXdoZXRoZXIgb3Igbm90IHdlIGFyZSBidWlsZGluZy90ZXN0aW5nIHdpdGggZ2NjLgorY29tbWl0IDI4ZmIxOTcwNzljZjFkMTFkYTRlZWY3YzhjMjQzYWIwNTU5MGM1MjgKK01lcmdlOiBjNjk3NDcyIGMzZGQwYTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBNYXIgMTggMTI6MTk6MzYgMjAxNCAtMDQwMAogCi0yMDEzLTAxLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMDcgZnJvbSBydmFuZGVybWV1bGVuL21zdmNjCisgICAgCisgICAgVmFyaW91cyBjb21wYXRpYmlsaXR5IGZpeGVzIGFuZCBpbXByb3ZlbWVudHMgdG8gbXN2Y2Muc2guCiAKLQkqIGNvbmZpZ3VyZS5hYzogU3dpdGNoIHg4NiBzb2xhcmlzIHRhcmdldCB0byBYODYgYnkgZGVmYXVsdC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCBjM2RkMGExYTAyNDVmYzE3NDM2MWE3MDg3NmU4OGFlMjQyODVmODYxCitBdXRob3I6IFJ5YW4gVmFuZGVyTWV1bGVuIDxyeWFudm1AZ21haWwuY29tPgorRGF0ZTogICBUdWUgTWFyIDE4IDEyOjA5OjQ1IDIwMTQgLTA0MDAKIAotMjAxMy0wMS0wOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIFZhcmlvdXMgY29tcGF0aWJpbGl0eSBmaXhlcyBhbmQgaW1wcm92ZW1lbnRzIHRvIG1zdmNjLnNoLgorICAgIAorICAgICogRG9uJ3QgdHJ5IHRvIG1peCBpbmNvbXBhdGlibGUgb3B0aW1pemF0aW9uIGZsYWdzIGluIGRlYnVnIGJ1aWxkcy4KKyAgICAqIFdvcmthcm91bmQgYXhfY2NfbWF4b3B0Lm00IG5vdCBzdXBwb3J0aW5nIE1TVkMgYW5kIGNoYW5nZSAtTzMgdG8gLU8yLgorICAgICogRml4IE1TVkMgd2FybmluZyBieSBwcm9wZXJseSBwYXNzaW5nIGxpbmtlciBmbGFncyB0byBjb21waWxlci4KKyAgICAqIE1ha2UgbXN2Y2Muc2ggcmV0dXJuIDEgaWYgaW52YWxpZCBjb21tYW5kIGxpbmUgb3B0aW9ucyBhcmUgdXNlZCByYXRoZXIgdGhhbiBzaWxlbnRseSBlYXRpbmcgdGhlbS4KKyAgICAqIEFkZCBtb3JlIGNvbW1lbnRzLgogCi0JKiBjb25maWd1cmUuYWM6IEZpeCB0ZXN0IGZvciByZWFkLW9ubHkgZWhfZnJhbWUuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgYzY5NzQ3MmZjY2ZiYjViODdiMDA3YzA1M2NkYTllZjAxNGIzNDZiOQorTWVyZ2U6IDgzZmQyYmMgZTQ4OTE4ZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxNyAwMDozMjo0MiAyMDE0IC0wNDAwCiAKLTIwMTMtMDEtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzEwMiBmcm9tIGpvc2h0cmlwbGV0dC90ZXN0LWdlbmVyaWMKKyAgICAKKyAgICBBZGQgQUJJcyB0byB0aGUgdGVzdCBtYXRyaXg7IHVuaWZ5IG1hbnkgYml0cyBvZiB0aGUgdGVzdHN1aXRlCiAKLQkqIHNyYy94ODYvc3lzdi5TLCBzcmMveDg2L3VuaXg2NC5TOiBPbmx5IGVtaXQgRFdBUkYgdW53aW5kIGluZm8KLQl3aGVuIGJ1aWxkaW5nIHdpdGggdGhlIEdOVSB0b29sY2hhaW4uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChDSEVDSyk6IEZpeCBmb3IgU29sYXJpcyB2ZW5kb3IKLQljb21waWxlci4KK2NvbW1pdCBlNDg5MThlY2Y4NzZiYzg1ZDA0MGZjNTBhMjMyMDU5YzU2NjU1M2E4CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAyMDoyOToyNyAyMDE0IC0wNzAwCiAKLTIwMTMtMDEtMDcgIFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLm9yZz4KKyAgICB0ZXN0c3VpdGU6IEFkZCBBQklzIHRvIHRoZSB0ZXN0IG1hdHJpeDsgdW5pZnkgdGVzdHMgYWNyb3NzIEFCSXMKKyAgICAKKyAgICBUaGlzIGVsaW1pbmF0ZXMgYWxsIHRoZSAqX3dpbjMyLmMgdGVzdHMgaW4gZmF2b3Igb2YgdGhlIHRlc3RzIHRoZXkgd2VyZQorICAgIGJyYW5jaGVkIGZyb20sIGFuZCBleHBhbmRzIHRlc3QgY292ZXJhZ2UgdG8gcnVuIG1hbnkgbW9yZSB0ZXN0cyBvbgorICAgIHN0ZGNhbGwsIHRoaXNjYWxsLCBhbmQgZmFzdGNhbGwuCisgICAgCisgICAgVGhpcyBzYW1lIG1lY2hhbmlzbSBhbHNvIHN1cHBvcnRzIHRlc3RpbmcgYW55IG90aGVyIHRhcmdldCB0aGF0IGhhcworICAgIG11bHRpcGxlIEFCSXMuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXJfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydF92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV8xLmM6IFRlc3RzdWl0ZSBmaXhlcy4KK2NvbW1pdCA0ZDRkMzY4ZTVhNTVkOTQ0M2M0YzUzYjFiNzBkNThhYjZkOGM5NDFjCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAxNzowMjowNSAyMDE0IC0wNzAwCiAKLTIwMTMtMDEtMDcgIFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLm9yZz4KKyAgICB0ZXN0c3VpdGU6IFJlcGxhY2UgZmZpdGVzdGN4eC5oIHdpdGggZmZpdGVzdC5oCisgICAgCisgICAgZmZpdGVzdC5oIGNvbnRhaW5zIGEgc3VwZXJzZXQgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgZmZpdGVzdGN4eC5oOworICAgIG1ha2UgdGhlIEMrKyB0ZXN0cyBpbmNsdWRlIGZmaXRlc3QuaCBpbnN0ZWFkLCBhbmQgcmVtb3ZlIGZmaXRlc3RjeHguaC4KIAotCSogc3JjL202OGsvZmZpLmMgKENJRl9GTEFHU19TSU5UOCwgQ0lGX0ZMQUdTX1NJTlQxNik6IERlZmluZS4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggOC1iaXQgYW5kIDE2LWJpdCBzaWduZWQgY2FsbHMuCi0JKiBzcmMvbTY4ay9zeXN2LlMgKGZmaV9jYWxsX1NZU1YsIGZmaV9jbG9zdXJlX1NZU1YpOiBEaXR0by4KK2NvbW1pdCAzZjk3Y2YzNDEzYzQ2Y2FmMmE3OWYzMmFjOWNkYTQ2MjA5NzJjMmQ3CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAxNjo1Mzo0MiAyMDE0IC0wNzAwCiAKLTIwMTMtMDEtMDQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICB0ZXN0c3VpdGU6IFVuaWZ5IHRoZSBDIGFuZCBDKysgdGVzdHN1aXRlcworICAgIAorICAgIFRoZXNlIHR3byB0ZXN0c3VpdGVzIGRpZmZlciBvbmx5IGluIHRoZSBzb3VyY2UgZmlsZSBnbG9iIGFuZCBhIGNvdXBsZSBvZgorICAgIGFkZGl0aW9uYWwgY29tcGlsZXIgb3B0aW9uczsgdW5pZnkgdGhlIHJlbWFpbmluZyBiaXRzLgogCi0JKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgLWZleGNlcHRpb25zCi0JYW5kIC1XYWxsLiAgVGhpcyBpcyBzZXQgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYWZ0ZXIgdGVzdGluZyBmb3IKLQlHQ0MuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCAwZDljY2U4ZWRiOTM3YmJlNzcxYTZjZGQyNWY2NzFlZGYwNmQyMTI4CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAxNjoyMjo1OCAyMDE0IC0wNzAwCiAKLTIwMTMtMDEtMDIgIHJvZmwwciA8aHR0cHM6Ly9naXRodWIuY29tL3JvZmwwcj4KKyAgICB0ZXN0c3VpdGU6IGZmaXRlc3QuaDogUGFyZW50aGVzaXplIHRoZSBDSEVDSyBtYWNybwogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggYnVpbGQgZXJyb3Igb24gcHBjCi0Jd2hlbiBsb25nIGRvdWJsZSA9PSBkb3VibGUuCitjb21taXQgNTY5NWVjMTQ0NGM1MzIzZTQ4ZmU0MzE0ZjhjOGYwMjc2MjVlNjdkZgorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMTY6MDQ6NTggMjAxNCAtMDcwMAogCi0yMDEzLTAxLTAyICBSZWluaSBVcmJhbiAgPHJ1cmJhbkB4LXJheS5hdD4KKyAgICB0ZXN0c3VpdGU6IEZhY3RvciBvdXQgYSBmdW5jdGlvbiB0byBydW4gYSBtYXRyaXggb2YgdGVzdHMKKyAgICAKKyAgICBUaGlzIGNvbW1vbnMgdXAgY29kZSBmcm9tIGxpYmZmaS5jYWxsL2NhbGwuZXhwIGFuZAorICAgIGxpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwLCB1bmlmaWVzIHRoZSBvcHRpbWl6YXRpb24gb3B0aW9uIG1hdHJpeAorICAgIGJldHdlZW4gdGhlIHR3bywgYW5kIG1ha2VzIGl0IGVhc2llciB0byBhZGQgbW9yZSBheGVzIHRvIHRoZSBtYXRyaXgKKyAgICBpbiB0aGUgZnV0dXJlLgogCi0JKiBNYWtlZmlsZS5hbSAobGliZmZpX2xhX0xERkxBR1MpOiBBZGQgLW5vLXVuZGVmaW5lZCB0byBMREZMQUdTCi0JKHJlcXVpcmVkIGZvciBzaGFyZWQgbGlicyBvbiBjeWd3aW4vbWluZ3cpLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgZGZkYjAyY2M4Njk4NTVkM2I2ODU3MWU1ZjdhYTc3YWU4YzlkMjU0YQorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMTU6MjY6MjYgMjAxNCAtMDcwMAogCi0yMDEyLTEwLTMxICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKyAgICB0ZXN0c3VpdGU6IEludHJvZHVjZSBhIF9fVEhJU0NBTExfXyBjb21waWxlci1zcGVjaWZpYyBtYWNybwogCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogQWRkIG5ldyBBQkkgc3VwcG9ydC4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCitjb21taXQgODNmZDJiY2UwNDU2MjI0NDgzNDM1ZDRiNzY0MDYzZjQ1MTNmZDQ2NAorTWVyZ2U6IDM2NThhMDcgMDZmZjkyNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAyMjowMzoyOSAyMDE0IC0wNDAwCiAKLTIwMTItMTAtMzAgIE1hZ251cyBHcmFuYmVyZyAgPHpvcnJ5QGdlbnRvby5vcmc+Ci0JICAgIFBhdmVsIExhYnVzaGV2ICA8cGF2ZWwubGFidXNoZXZAcnVuYm94LnJ1PgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTkgZnJvbSBqb3NodHJpcGxldHQvZ2l0aWdub3JlCisgICAgCisgICAgLmdpdGlnbm9yZTogSWdub3JlIG1vcmUgZ2VuZXJhdGVkIGZpbGVzCiAKLQkqIGNvbmZpZ3VyZS5hYzogTmV3IG9wdGlvbnMgcGF4X2VtdXRyYW1wCi0JKiBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlZAotCSogc3JjL2Nsb3N1cmVzLmM6IE5ldyBmdW5jdGlvbiBlbXV0cmFtcF9lbmFibGVkX2NoZWNrKCkgYW5kCi0JY2hlY2tzLgorY29tbWl0IDM2NThhMDcwMGE1MGQzN2EyZmRiYTA0ZmQ5ZDc5YWQyZjcwNmQ5ZjUKK01lcmdlOiBkOTQ4ZDBhIDQ2YzVkM2MKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMjE6Mzc6NDIgMjAxNCAtMDQwMAogCi0yMDEyLTEwLTMwICBGcmVkZXJpY2sgQ2hldW5nICA8ZnJlZGVyaWNrLmNoZXVuZ0BnbWFpbC5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMxMDAgZnJvbSBydmFuZGVybWV1bGVuL2J1Zy03NTY3NDAKKyAgICAKKyAgICBDaGFuZ2UgZG91YmxlIHF1b3RlcyBpbiBNYWtlZmlsZS5hbSB0byBzaW5nbGUgcXVvdGVzLgogCi0JKiBjb25maWd1cmUuYWM6IEVuYWJsZSBGRklfTUFQX0VYRUNfV1JJVCBmb3IgRGFyd2luIDEyIChtb3VudGFpbgotCWxpb24pIGFuZCBmdXR1cmUgdmVyc2lvbi4KLQkqIGNvbmZpZ3VyZTogUmVidWlsZC4KK2NvbW1pdCA0NmM1ZDNjMzBmZGMyYjQzYzA3NmFkOTU1MDc4ZDdjNWYxZTc1YjM3CitBdXRob3I6IFJ5YW4gVmFuZGVyTWV1bGVuIDxyeWFudm1AZ21haWwuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDIxOjE2OjA4IDIwMTQgLTA0MDAKIAotMjAxMi0xMC0zMCAgSmFtZXMgR3JlZW5oYWxnaCAgPGphbWVzLmdyZWVuaGFsZ2ggYXQgYXJtLmNvbT4KLSAgICAgICAgICAgIE1hcmN1cyBTaGF3Y3JvZnQgIDxtYXJjdXMuc2hhd2Nyb2Z0IGF0IGFybS5jb20+CisgICAgQ2hhbmdlIGRvdWJsZSBxdW90ZXMgaW4gTWFrZWZpbGUuYW0gdG8gc2luZ2xlIHF1b3Rlcy4KKyAgICAKKyAgICBUaGlzIHdhcyBvcmlnaW5hbGx5IGRvbmUgaW4gUFIgIzg0LCBleGNlcHQgdGhlIGNoYW5nZSB3YXMgbWFkZSB0byBNYWtlZmlsZS5pbiBpbnN0ZWFkIG9mIE1ha2VmaWxlLmFtIGFuZCB3YXMgdGhlcmVmb3JlIHJldmVydGVkIHRoZSBuZXh0IHRpbWUgdGhlIGZpbGVzIHdlcmUgcmVnZW5lcmF0ZWQuCiAKLSAgICAgICAgKiBSRUFETUU6IEFkZCBkZXRhaWxzIG9mIGFhcmNoNjQgcG9ydC4KLSAgICAgICAgKiBzcmMvYWFyY2g2NC9mZmkuYzogTmV3LgotICAgICAgICAqIHNyYy9hYXJjaDY0L2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KLSAgICAgICAgKiBzcmMvYWFyY2g2NC9zeXN2LlM6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuYW06IFN1cHBvcnQgYWFyY2g2NC4KLQkqIGNvbmZpZ3VyZS5hYzogU3VwcG9ydCBhYXJjaDY0LgotCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCAwNmZmOTI0MjE1YTJmOTczOWVmYTJjMDU5ZGM1OTViYzRlYzFjODUxCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAxNjoxOTo0NiAyMDE0IC0wNzAwCiAKLTIwMTItMTAtMzAgIEphbWVzIEdyZWVuaGFsZ2ggIDxqYW1lcy5ncmVlbmhhbGdoIGF0IGFybS5jb20+Ci0gICAgICAgICAgICBNYXJjdXMgU2hhd2Nyb2Z0ICA8bWFyY3VzLnNoYXdjcm9mdCBhdCBhcm0uY29tPgorICAgIC5naXRpZ25vcmU6IElnbm9yZSBtb3JlIGdlbmVyYXRlZCBmaWxlcworICAgIAorICAgIFRoZSBidWlsZCBwcm9jZXNzIGdlbmVyYXRlcyBkb2MvbGliZmZpLmluZm8gYW5kIGZmaWNvbmZpZy5oLmluLCBzbyBhZGQKKyAgICB0aGVtIHRvIC5naXRpZ25vcmUuCiAKLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS5leHA6IEFkZCBzdXBwb3J0IGZvciBhYXJjaDY0LgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jOiBOZXcuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhcl92YS5jOiBMaWtld2lzZS4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnRfdmEuYzogTGlrZXdpc2UuCi0gICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ192YS5jOiBMaWtld2lzZS4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydF92YS5jOiBMaWtld2lzZS4KLSAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDExLmM6IExpa2V3aXNlLgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC91bmluaXRpYWxpemVkLmM6IExpa2V3aXNlLgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV8xLmM6IExpa2V3aXNlLgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QxLmM6IExpa2V3aXNlLgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QyLmM6IExpa2V3aXNlLgotICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorY29tbWl0IGJhZDg5NDgzNDZlOWI4ODEzMDIzYTBjYzc4YTNiNmViOGQ5YzE0YzYKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDE1OjE2OjE4IDIwMTQgLTA3MDAKIAotMjAxMi0xMC0xMiAgV2FsdGVyIExlZSAgPHdhbHRAdGlsZXJhLmNvbT4KKyAgICB0ZXN0c3VpdGU6IEludHJvZHVjZSBhIF9fU1REQ0FMTF9fIGNvbXBpbGVyLXNwZWNpZmljIG1hY3JvCisgICAgCisgICAgU2V2ZXJhbCB0ZXN0cyB3YW50IHRvIHVzZSBzdGRjYWxsLCB3aGljaCBkaWZmZXJzIGluIHN5bnRheCBieSBjb21waWxlciwKKyAgICBzbyBpbnRyb2R1Y2UgYSBtYWNybyBmb3IgaXQgaW4gZmZpdGVzdC5oLgogCi0gICAgICAgICogTWFrZWZpbGUuYW06IEFkZCBUSUxFLUd4L1RJTEVQcm8gc3VwcG9ydC4KLSAgICAgICAgKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgotICAgICAgICAqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotICAgICAgICAqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCi0gICAgICAgICogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZl9jb3JlKTogSGFuZGxlIFRJTEUtR3gvVElMRVByby4KLSAgICAgICAgKiBzcmMvdGlsZTogTmV3IGRpcmVjdG9yeS4KLSAgICAgICAgKiBzcmMvdGlsZS9mZmkuYzogTmV3IGZpbGUuCi0gICAgICAgICogc3JjL3RpbGUvZmZpdGFyZ2V0Lmg6IERpdHRvLgotICAgICAgICAqIHNyYy90aWxlL3RpbGUuUzogRGl0dG8uCitjb21taXQgOThhNzkzZmEzNmE0YWIzYmEyNGQwNTljYjgwYTI4OTFjZGI5NDBlMQorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMTU6MjA6MzYgMjAxNCAtMDcwMAogCi0yMDEyLTEwLTEyICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKyAgICB0ZXN0c3VpdGU6IENvbW1vbiB1cCB0aGUgaWZkZWYgYmxvY2tzIGZvciBjb21waWxlci1zcGVjaWZpYyBtYWNyb3MKIAotCSogZ2VuZXJhdGUtb3N4LXNvdXJjZS1hbmQtaGVhZGVycy5weTogTm9ybWFsaXplIHdoaXRlc3BhY2UuCitjb21taXQgZDk0OGQwYTcyOWM5MzRiMDIyNDc0OTMzOGEzYmEwYTJjOGY1MWM0NQorTWVyZ2U6IGI2MWI0NzIgYTg2YmQzMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAxMDo1Mzo0OCAyMDE0IC0wNDAwCiAKLTIwMTItMDktMTQgIERhdmlkIEVkZWxzb2huICA8ZGplLmdjY0BnbWFpbC5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM5OCBmcm9tIGpvc2h0cmlwbGV0dC91bmNvbmZpZ3VyZS5ob3N0CisgICAgCisgICAgTWVyZ2UgY29uZmlndXJlLmhvc3QgaW50byBjb25maWd1cmUuYWMKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KK2NvbW1pdCBhODZiZDMxOGUyNDI0ZDg3OWQ3ODRlZTdiMjlkNjUzNmQ3YTE3YzE4CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNjo1ODo1OSAyMDE0IC0wNzAwCiAKLTIwMTItMDgtMjYgIEFuZHJldyBQaW5za2kgIDxhcGluc2tpQGNhdml1bS5jb20+CisgICAgTWVyZ2UgY29uZmlndXJlLmhvc3QgaW50byBjb25maWd1cmUuYWMKKyAgICAKKyAgICBjb25maWd1cmUuaG9zdCBvbmx5IGhhcyBhIHNpbmdsZSBlbnRyeSwgYW5kIHNob3dzIG5vIHNpZ25zIG9mIG5lZWRpbmcKKyAgICBtb3JlIGFkZGVkLgogCi0JUFIgbGliZmZpLzUzMDE0Ci0JKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBbGxvdyBuMzIgd2l0aCBzb2Z0LWZsb2F0IGFuZCBuNjQgd2l0aAotCXNvZnQtZmxvYXQuCitjb21taXQgYjYxYjQ3MmJkMDY0NzAwNmQ2Njg1MjM4NzIxMDAyMDE3ZjFkMTE5YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwOTo0NTo1NSAyMDE0IC0wNDAwCiAKLTIwMTItMDgtMDggIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisgICAgVXBkYXRlIHZlcnNpb24gdG8gMy4xLXJjMC4gIENsZWFuIHVwIFJFQURNRS4KIAotCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRG9uJ3QgQVNTRVJUIEFCSSB0ZXN0LAotCWp1c3QgcmV0dXJuIEZGSV9CQURfQUJJIHdoZW4gdGhpbmdzIGFyZSB3cm9uZy4KK2NvbW1pdCA3YTY0ZTdkYmJhNTRlNmU5ZjY5OTU0YWRmYjk0M2JlMTg1NmZmOTI4CitNZXJnZTogMTFhNWM1YyBlZWYyZTAyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA5OjM5OjA4IDIwMTQgLTA0MDAKIAotMjAxMi0wNy0xOCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTcgZnJvbSBqb3NodHJpcGxldHQvcmVtb3ZlLW1vcmUtZ2VuZXJhdGVkLWZpbGVzCisgICAgCisgICAgUmVtb3ZlIG1vcmUgZ2VuZXJhdGVkIGZpbGVzCiAKLQlQUiBsaWJmZmkvNTM5ODIKLQlQUiBsaWJmZmkvNTM5NzMKLQkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IENoZWNrIF9fSUxQMzJfXyBpbnN0ZWFkIG9mIF9fTFA2NF9fIGZvciB4MzIuCi0JKEZGSV9TSVpFT0ZfSkFWQV9SQVcpOiBEZWZpbmVkIHRvIDQgZm9yIHgzMi4KK2NvbW1pdCAxMWE1YzVjMzlmNTg2MTAxMWY2YzVkZGY3OTVkYTNhMzJiNWYwMDgyCitNZXJnZTogOWE2MmEyMSAxYzY4YzA3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA5OjM4OjQ3IDIwMTQgLTA0MDAKIAotMjAxMi0wNS0xNiAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTYgZnJvbSBqb3NodHJpcGxldHQvc2F3aW5nLWNoYW5nZWxvZ3MKKyAgICAKKyAgICBHZW5lcmF0ZSBDaGFuZ2VMb2cgZnJvbSBnaXQgaW4gbWFrZSBkaXN0OyByZW1vdmUgaXQgZnJvbSB2ZXJzaW9uIGNvbnRyb2wKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KK2NvbW1pdCBlZWYyZTAyYTEzZDdkMWM4MTQ1ZDQ3YTY0NDY3ZjY1NDQwNmEzNTQ4CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNjoyNjowMyAyMDE0IC0wNzAwCiAKLTIwMTItMDUtMDUgIE5pY29sYXMgTGVsb25nCisgICAgZG9jOiBSZW1vdmUgYXV0b2dlbmVyYXRlZCBpbmZvIGZpbGUgYW5kIHN0YW1wCiAKLQkqIGxpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBGaXhlcy4KLQkqIFJFQURNRTogVXBkYXRlIGZvciBpT1MgYnVpbGRzLgorY29tbWl0IDlmYjQwM2QzYzVkOTY0M2UwZjU2MWNhYjZkNGEwN2IxZTU0OTA3ZmYKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA2OjI1OjUyIDIwMTQgLTA3MDAKIAotMjAxMi0wNC0yMyAgQWxleGFuZHJlIEtldW5lY2tlIEkuIGRlIE1lbmRvbmNhIDxhbGV4YW5kcmUua2V1bmVja2VAZ21haWwuY29tPgorICAgIGZmaWNvbmZpZy5oLmluOiBSZW1vdmUsIGNvbmZpZ3VyZSBnZW5lcmF0ZXMgaXQKIAotCSogY29uZmlndXJlLmFjOiBBZGQgQmxhY2tmaW4vc3lzdiBzdXBwb3J0Ci0JKiBNYWtlZmlsZS5hbTogQWRkIEJsYWNrZmluL3N5c3Ygc3VwcG9ydAotCSogc3JjL2JmaW4vZmZpLmM6ICBBZGQgQmxhY2tmaW4vc3lzdiBzdXBwb3J0Ci0JKiBzcmMvYmZpbi9mZml0YXJnZXQuaDogQWRkIEJsYWNrZmluL3N5c3Ygc3VwcG9ydAorY29tbWl0IDFjNjhjMDcyMTdmZGE3OGE3Nzk3NzhjMTQ4MGZlZGVmN2E1OGQ1YjQKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA2OjExOjU4IDIwMTQgLTA3MDAKIAotMjAxMi0wNC0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIEdlbmVyYXRlIENoYW5nZUxvZyBmcm9tIGdpdCBpbiBtYWtlIGRpc3QKKyAgICAKKyAgICBBcmNoaXZlIHRoZSBleGlzdGluZyBDaGFuZ2VMb2cgdG8gQ2hhbmdlTG9nLmxpYmZmaS0zLjEKIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbmV3IHNjcmlwdC4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IGM2NWVkNTVlNjU1NzExZTAwODI4MmVkYmRkODJjZTk1ZDAwOGI0ZjYKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA1OjUyOjAwIDIwMTQgLTA3MDAKIAotMjAxMi0wNC0xMSAgWmFjaGFyeSBXYWxkb3dza2kgIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KKyAgICBDaGFuZ2VMb2cudjE6IEZpeCB0eXBvIGluIGV4cGxhbmF0b3J5IGhlYWRlci4KIAotCSogZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weSwKLQlsaWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogU3VwcG9ydCBhIE1hYyBzdGF0aWMgbGlicmFyeSB2aWEKLQlYY29kZS4gU2V0IGlPUyBjb21wYXRpYmlsaXR5IHRvIDQuMC4gIE1vdmUgaU9TIHRyYW1wb2xpbmUKLQlnZW5lcmF0aW9uIGludG8gYW4gWGNvZGUgInJ1biBzY3JpcHQiIHBoYXNlLiAgSW5jbHVkZSBib3RoIGFzCi0JWGNvZGUgYnVpbGQgc2NyaXB0cy4gRG9uJ3QgYWx3YXlzIHJlZ2VuZXJhdGUgY29uZmlnIGZpbGVzLgorY29tbWl0IDlhNjJhMjFmNWMzYThlMWRhNDYzMjI5ZjMxNzBjOGFiMzAzMWQ5MjAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTYgMDk6MDM6NTcgMjAxNCAtMDQwMAogCi0yMDEyLTA0LTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisgICAgQWRkIG1pc3NpbmcgQ2hhbmdlTG9nIGVudHJ5LiAgQ2xlYW4gdXAgc29tZSBlbnRyaWVzLgogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBBZGQgbWlzc2luZyBzZW1pY29sb24uCitjb21taXQgOWJjNzA0YzU4Y2I3YTA0OWQ4Njc4MzdlM2ExMWUyZTMxODg2ZWM2NgorTWVyZ2U6IDY5NDQ0N2EgZTg5MmU1OAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwODo0MTowMCAyMDE0IC0wNDAwCiAKLTIwMTItMDQtMDYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzk1IGZyb20gam9zaHRyaXBsZXR0L25ld3MKKyAgICAKKyAgICBSRUFETUU6IFVwZGF0ZSBuZXdzIGZvciAzLjAuMTQKIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbmV3IGlPUy94Y29kZSBmaWxlcy4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IGU4OTJlNTgxZDE4MzhhMDZjMThjN2VjZDUwZWJkNzk5MTVjZmY5MmIKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA1OjM4OjI0IDIwMTQgLTA3MDAKIAotMjAxMi0wNC0wNiAgTWlrZSBMZXdpcyAgPG1pa2VsaWtlc3BpZUBnbWFpbC5jb20+CisgICAgUkVBRE1FOiBVcGRhdGUgbmV3cyBmb3IgMy4wLjE0CiAKLQkqIGdlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHk6IE5ldyBmaWxlLgotCSogbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE5ldyBmaWxlLgotCSogUkVBRE1FOiBVcGRhdGUgaW5zdHJ1Y3Rpb25zIG9uIGJ1aWxkaW5nIGlPUyBiaW5hcnkuCi0JKiBidWlsZC1pb3Muc2g6IERlbGV0ZS4KK2NvbW1pdCA2OTQ0NDdhYTI5ZGVhZGQ1NzFlZmI0ZTlhMjZlZTNmNjhlZGUxNDkzCitNZXJnZTogZmRjODdmMyA0NWE2YzIxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA4OjMyOjA1IDIwMTQgLTA0MDAKIAotMjAxMi0wNC0wNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTMgZnJvbSBqb3NodHJpcGxldHQvdHJhdmlzLWRpc3QKKyAgICAKKyAgICBNYWtlIFRyYXZpcyBjaGVjayAibWFrZSBkaXN0IgogCi0JKiBzcmMveDg2L2ZmaTY0LmMgKFVJTlQxMjgpOiBEZWZpbmUgZGlmZmVyZW50bHkgZm9yIEludGVsIGFuZCBHTlUKLQljb21waWxlcnMsIHRoZW4gdXNlIGl0LgorY29tbWl0IDQ1YTZjMjFlZmE5NDRiNTIwODQyZTYzMWRjNTQ5MTliMDQ4ODQ3NDQKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDA1OjI5OjA4IDIwMTQgLTA3MDAKIAotMjAxMi0wNC0wNiAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorICAgIC50cmF2aXMueW1sOiBUZXN0ICJtYWtlIGRpc3QiIHRvby4KIAotCSogbTQvbGlidG9vbC5tNCAoX0xUX0VOQUJMRV9MT0NLKTogU3VwcG9ydCB4MzIuCitjb21taXQgZmRjODdmM2IyZWEzN2I1OGE0YTlhZTZjMzUwODNmNTQ0OTA5ZmUzYworTWVyZ2U6IDc0MTJiODMgZTE5MTFmNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwODowNTo1MSAyMDE0IC0wNDAwCiAKLTIwMTItMDQtMDYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzg1IGZyb20gam9zaHRyaXBsZXR0L3N0ZGNhbGwKKyAgICAKKyAgICBzdGRjYWxsIHN1cHBvcnQgb24gTGludXgKIAotCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG1pc3NpbmcgdGVzdCBjYXNlcy4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCBlMTkxMWY3OGRmMTEzY2E1ODczOGI2NjA4OWEwNzBkNGNmNzQ3ZGU3CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwMzoyNTo1MyAyMDE0IC0wNzAwCiAKLTIwMTItMDQtMDUgIFphY2hhcnkgV2FsZG93c2tpICA8endhbGRvd3NraUBnbWFpbC5jb20+CisgICAgQWRkIHN1cHBvcnQgZm9yIHN0ZGNhbGwsIHRoaXNjYWxsLCBhbmQgZmFzdGNhbGwgb24gbm9uLVdpbmRvd3MgeDg2LTMyCisgICAgCisgICAgTGludXggc3VwcG9ydHMgdGhlIHN0ZGNhbGwgY2FsbGluZyBjb252ZW50aW9uLCBlaXRoZXIgdmlhIGZ1bmN0aW9ucworICAgIGV4cGxpY2l0bHkgZGVjbGFyZWQgd2l0aCB0aGUgc3RkY2FsbCBhdHRyaWJ1dGUsIG9yIHZpYSBjb2RlIGNvbXBpbGVkCisgICAgd2l0aCAtbXJ0ZCB3aGljaCBlZmZlY3RpdmVseSBtYWtlcyBzdGRjYWxsIHRoZSBkZWZhdWx0LgorICAgIAorICAgIFRoaXMgaW50cm9kdWNlcyBGRklfU1REQ0FMTCwgRkZJX1RISVNDQUxMLCBhbmQgRkZJX0ZBU1RDQUxMIG9uCisgICAgbm9uLVdpbmRvd3MgeDg2LTMyIHBsYXRmb3JtcywgYXMgbm9uLWRlZmF1bHQgY2FsbGluZyBjb252ZW50aW9ucy4KIAotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIG1pc3NpbmcgdHJhbXBvbGluZSB0YWJsZSBmaWVsZHMuCi0JKiBzcmMvYXJtL3N5c3YuUzogRml4IEVOVFJZIGRlZmluaXRpb24sIGFuZCB3cmFwIHN5bWJvbCByZWZlcmVuY2VzCi0JaW4gQ05BTUUuCi0JKiBzcmMveDg2L2ZmaS5jOiBXcmFwIFdpbmRvd3Mgc3BlY2lmaWMgY29kZSBpbiBpZmRlZnMuCitjb21taXQgNzQxMmI4MzhkNTQzYWFlNGZhOTI1ODYyYmQ1NzAyZDNkYWNiYzI5YQorTWVyZ2U6IGMwY2M1ZmQgOTUzMWQwNQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNzo1ODoxNiAyMDE0IC0wNDAwCiAKLTIwMTItMDQtMDIgIFBldGVyIEJlcmduZXIgIDxiZXJnbmVyQHZuZXQuaWJtLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzkwIGZyb20gam9zaHRyaXBsZXR0L3dpbjMyLXVuaWZkZWYKKyAgICAKKyAgICBwcmVwX2NpZi5jOiBSZW1vdmUgdW5uZWNlc3NhcnkgaWZkZWYgZm9yIFg4Nl9XSU4zMgogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogRGVjbGFyZSBkb3VibGVfdG1wLgotCVNpbGVuY2UgY2FzdGluZyBwb2ludGVyIHRvIGludGVnZXIgb2YgZGlmZmVyZW50IHNpemUgd2FybmluZy4KLQlEZWxldGUgZ290byB0byBwcmV2aW91c2x5IGRlbGV0ZWQgbGFiZWwuCi0JKGZmaV9jYWxsKTogU2lsZW5jZSBwb3NzaWJseSB1bmRlZmluZWQgd2FybmluZy4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBEZWNsYXJlIHZhcmlhYmxlIHR5cGUuCitjb21taXQgYzBjYzVmZGFhMjM3YjY3ZTg2ZjIyZDJmNmUxM2YzYjQyZDlhYWUzMworTWVyZ2U6IDk4YjUyOTYgYjNhNWRhMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNzo1Nzo1OSAyMDE0IC0wNDAwCiAKLTIwMTItMDQtMDIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzg5IGZyb20gam9zaHRyaXBsZXR0L3RyYXZpczMyCisgICAgCisgICAgLnRyYXZpcy55bWw6IFRlc3Qgb24gYm90aCAzMi1iaXQgYW5kIDY0LWJpdAogCi0JKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jYWxsX3dpbjMyKTogU2lnbi96ZXJvIGV4dGVuZCB0aGUgcmV0dXJuCi0JdmFsdWUgaW4gdGhlIEludGVsIHZlcnNpb24gYXMgaXMgYWxyZWFkeSBkb25lIGZvciB0aGUgQVQmVCB2ZXJzaW9uLgotCShmZmlfY2xvc3VyZV9TWVNWKTogTGlrZXdpc2UuCi0JKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTGlrZXdpc2UuCi0JKGZmaV9jbG9zdXJlX1NURENBTEwpOiBMaWtld2lzZS4KK2NvbW1pdCA5NTMxZDA1ZjY0YzJhNjc0ZTAxOTcxNThmZmFkNjhkNjlmMTc3YmQwCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwMTo1MDowMiAyMDE0IC0wNzAwCiAKLTIwMTItMDMtMjkgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBwcmVwX2NpZi5jOiBSZW1vdmUgdW5uZWNlc3NhcnkgaWZkZWYgZm9yIFg4Nl9XSU4zMgorICAgIAorICAgIGZmaV9wcmVwX2NpZl9jb3JlIGhhZCBhIHNwZWNpYWwgY2FzZSBmb3IgWDg2X1dJTjMyLCBjaGVja2luZyBmb3IKKyAgICBGRklfVEhJU0NBTEwgaW4gYWRkaXRpb24gdG8gdGhlIEZGSV9GSVJTVF9BQkktdG8tRkZJX0xBU1RfQUJJIHJhbmdlCisgICAgYmVmb3JlIHJldHVybmluZyBGRklfQkFEX0FCSS4gIEhvd2V2ZXIsIG9uIFg4Nl9XSU4zMiwgRkZJX1RISVNDQUxMCisgICAgYWxyZWFkeSBmYWxscyBpbiB0aGF0IHJhbmdlLCBtYWtpbmcgdGhlIHNwZWNpYWwgY2FzZSB1bm5lY2Vzc2FyeS4KKyAgICBSZW1vdmUgaXQuCiAKLQkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMKTogVW5pZnkgdGhlIGZyYW1lCi0JZ2VuZXJhdGlvbiwgZml4IHRoZSBFTkRQIGxhYmVsIGFuZCByZW1vdmUgdGhlIHN1cnBsdXMgdGhpcmQgYXJnCi0JZnJvbSB0aGUgJ2xlYScgaW5zbi4KK2NvbW1pdCBiM2E1ZGEwNjhhYmQyZjI5ODNkOWU2N2FkYmY0MWIwZTBmMzRlMzdmCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU2F0IE1hciAxNSAyMzoyNzo1NiAyMDE0IC0wNzAwCiAKLTIwMTItMDMtMjkgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICAudHJhdmlzLnltbDogVGVzdCBvbiBib3RoIDMyLWJpdCBhbmQgNjQtYml0CiAKLQkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBNYWtlIHRoZSAnc3R1YnJhdycgbGFiZWwKLQl2aXNpYmxlIG91dHNpZGUgdGhlIFBST0MsIHNvIHRoYXQgZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMIGNhbiBzZWUKLQlpdC4gIEFsc28gaW5zdHJ1Y3QgdGhlIGFzc2VtYmxlciB0byBhZGQgYSBmcmFtZSB0byB0aGUgZnVuY3Rpb24uCitjb21taXQgOThiNTI5NjA0ODVhMjYxMzk5ZjA4MTkxNWYzNjA2M2RlMzg1NGE1ZgorTWVyZ2U6IDEzNGNlNGMgZjZkZDE4NAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNzo1MTozMyAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMjMgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzk0IGZyb20gam9zaHRyaXBsZXR0L2VzcC1leHRyYS1zdGFja2VyeS1wZXJjZXB0aW9uCisgICAgCisgICAgQ2hhbmdlTG9nOiBEb2N1bWVudCB0ZXN0c3VpdGUgY2hhbmdlcyB0byByZW1vdmUgZnJhZ2lsZSBzdGFjayBwb2ludGVyIGNoZWNrcwogCi0JKiBNYWtlZmlsZS5hbSAoQU1fQ1BQRkxBR1MpOiBBZGQgLURGRklfQlVJTERJTkcuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGluY2x1ZGUvZmZpLmguaW4gW01TVkNdOiBBZGQgX19kZWNsc3BlYyhkbGxpbXBvcnQpIGRlY29yYXRpb25zCi0JdG8gYWxsIGRhdGEgZXhwb3J0cywgd2hlbiBjb21waWxpbmcgbGliZmZpIGNsaWVudHMgdXNpbmcgTVNWQy4KK2NvbW1pdCBmNmRkMTg0NTQzNGRkNTNlMjIxMjliZWNkZmEwOTJjMDgyZGYzMDdjCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNDo0OTozNiAyMDE0IC0wNzAwCiAKLTIwMTItMDMtMjkgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBDaGFuZ2VMb2c6IERvY3VtZW50IHRlc3RzdWl0ZSBjaGFuZ2VzIHRvIHJlbW92ZSBmcmFnaWxlIHN0YWNrIHBvaW50ZXIgY2hlY2tzCiAKLQkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgbmV3IEFCSSBGRklfTVNfQ0RFQ0wgYW5kCi0JbWFrZSBpdCB0aGUgZGVmYXVsdCBmb3IgTVNWQy4KLQkoRkZJX1RZUEVfTVNfU1RSVUNUKTogTmV3IHN0cnVjdHVyZSByZXR1cm4gY29udmVudGlvbi4KLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogVHdlYWsgdGhlIHN0cnVjdHVyZQotCXJldHVybiBjb252ZW50aW9uIGZvciBGRklfTVNfQ0RFQ0wgdG8gYmUgRkZJX1RZUEVfTVNfU1RSVUNUCi0JaW5zdGVhZCBvZiBhbiBvcmRpbmFyeSBGRklfVFlQRV9TVFJVQ1QuCi0JKGZmaV9wcmVwX2FyZ3MpOiBUcmVhdCBGRklfVFlQRV9NU19TVFJVQ1QgYXMgRkZJX1RZUEVfU1RSVUNULgotCShmZmlfY2FsbCk6IExpa2V3aXNlLgotCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBMaWtld2lzZS4KLQkoZmZpX3Jhd19jYWxsKTogTGlrZXdpc2UuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVHJlYXQgRkZJX01TX0NERUNMIGFzIEZGSV9TWVNWLgotCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9TWVNWKTogRm9yIEZGSV9UWVBFX01TX1NUUlVDVCwKLQlyZXR1cm4gYSBwb2ludGVyIHRvIHRoZSByZXN1bHQgc3RydWN0dXJlIGluIGVheCBhbmQgZG9uJ3QgcG9wCi0JdGhhdCBwb2ludGVyIGZyb20gdGhlIHN0YWNrLCB0aGUgY2FsbGVyIHRha2VzIGNhcmUgb2YgaXQuCi0JKGZmaV9jYWxsX3dpbjMyKTogVHJlYXQgRkZJX1RZUEVfTVNfU1RSVUNUIGFzIEZGSV9UWVBFX1NUUlVDVC4KLQkoZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBMaWtld2lzZS4KK2NvbW1pdCAxMzRjZTRjMDI2NmJmOTk0ZjA3NTE4ZmM1MzRkZTUzZjFkM2M4ZGU4CitNZXJnZTogMjY4MGU5ZSA5YzI3OTMyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA3OjQ3OjE3IDIwMTQgLTA0MDAKIAotMjAxMi0wMy0yMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjOTEgZnJvbSBqb3NodHJpcGxldHQvZXNwLWV4dHJhLXN0YWNrZXJ5LXBlcmNlcHRpb24KKyAgICAKKyAgICB0ZXN0c3VpdGU6IFJlbW92ZSBmcmFnaWxlIHN0YWNrIHBvaW50ZXIgY2hlY2tzCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYyBbTVNWQ106IEFkZCBpbmxpbmUKLQlhc3NlbWJseSB2ZXJzaW9uIHdpdGggSW50ZWwgc3ludGF4LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYyBbTVNWQ106IExpa2V3aXNlLgorY29tbWl0IDljMjc5MzI4ZWUxMmZjODY5YWRmZjYzY2E4MWYxMjMwOTc3YmQ0MmIKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTdW4gTWFyIDE2IDAyOjMxOjE5IDIwMTQgLTA3MDAKIAotMjAxMi0wMy0yMyAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIHRlc3RzdWl0ZTogUmVtb3ZlIGZyYWdpbGUgc3RhY2sgcG9pbnRlciBjaGVja3MKKyAgICAKKyAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMgYW5kCisgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYyBpbmNsdWRlIGlubGluZSBhc3NlbWJseSB0byBzYXZlCisgICAgdGhlIHN0YWNrIHBvaW50ZXIgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2FsbCwgYW5kIGNvbXBhcmUgdGhlIHZhbHVlcy4KKyAgICBIb3dldmVyLCBjb21waWxlcnMgY2FuIGFuZCBkbyBsZWF2ZSB0aGUgc3RhY2sgaW4gZGlmZmVyZW50IHN0YXRlcyBmb3IKKyAgICB0aGVzZSB0d28gcGllY2VzIG9mIGlubGluZSBhc3NlbWJseSwgc3VjaCBhcyBieSBzYXZpbmcgYSB0ZW1wb3JhcnkgdmFsdWUKKyAgICBvbiB0aGUgc3RhY2sgYWNyb3NzIHRoZSBjYWxsOyBvYnNlcnZlZCB3aXRoIGdjYyAtT3MsIGFuZCB2ZXJpZmllZCBhcworICAgIHNwdXJpb3VzIHRocm91Z2ggY2FyZWZ1bCBpbnNwZWN0aW9uIG9mIGRpc2Fzc2VtYmx5LgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBQcm92aWRlIGFic3RyYXRpb24gb2YKLQlfX2F0dHJpYnV0ZV9fKChmYXN0Y2FsbCkpIGluIHRoZSBmb3JtIG9mIGEgX19GQVNUQ0FMTF9fCi0JZGVmaW5lLiAgRGVmaW5lIGl0IHRvIF9fZmFzdGNhbGwgZm9yIE1TVkMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmM6IFVzZSB0aGUgYWJvdmUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jOiBMaWtld2lzZS4KK2NvbW1pdCAyNjgwZTllYTliNGM4N2VhODA0MmE2MWU1NTFiZDY2NzQ5M2Q0YmQzCitNZXJnZTogMDcxZWFiMyA4MmY4Y2IyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA3OjQ0OjA4IDIwMTQgLTA0MDAKIAotMjAxMi0wMy0yMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjODggZnJvbSBqb3NodHJpcGxldHQvc3VjaC1wcmVjaXNpb24tbWFueS1mYWlsLXdvdworICAgIAorICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmM6IEF2b2lkIHNwdXJpb3VzIGZhaWx1cmUgZHVlIHRvIGV4Y2VzcyBwcmVjaXNpb24KIAotCSogc3JjL3g4Ni93aW4zMi5TIFtNU1ZDXSAoZmZpX2Nsb3N1cmVfVEhJU0NBTEwpOiBSZW1vdmUgdGhlIG1hbnVhbAotCWZyYW1lIG9uIGZ1bmN0aW9uIGVudHJ5LCBNQVNNIGFkZHMgb25lIGF1dG9tYXRpY2FsbHkuCitjb21taXQgODJmOGNiMjRhMWQ5NzZkYjM1YWUzMWE0Yjg2Y2VjODkyNmRhMzI3ZAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFN1biBNYXIgMTYgMDQ6Mjc6MzIgMjAxNCAtMDcwMAogCi0yMDEyLTAzLTIyICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgQ2hhbmdlTG9nOiBEb2N1bWVudCBtYW55LmMgYW5kIG1hbnlfd2luMzIuYyBjaGFuZ2VzIHRvIGF2b2lkIHNwdXJpb3VzIGZhaWx1cmVzCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggW01TVkNdOiBBZGQga2x1ZGdlIGZvciBtaXNzaW5nCi0JYml0cyBpbiB0aGUgTVNWQyBoZWFkZXJzLgorY29tbWl0IDg4ZDU2MmE4YjU5MTJlOTkzMDYwNjNmZTNiYzI4OWJhYjZjYTZlYmUKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBTYXQgTWFyIDE1IDIyOjA4OjE5IDIwMTQgLTA3MDAKIAotMjAxMi0wMy0yMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IEF2b2lkIHNwdXJpb3VzIGZhaWx1cmUgZHVlIHRvIGV4Y2VzcyBwcmVjaXNpb24KKyAgICAKKyAgICBUaGUgdGVzdCBjYXNlIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMgY2FuIHNwdXJpb3VzbHkgZmFpbCBkdWUKKyAgICB0byBleGNlc3MgZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uLiAgSW5zdHJ1bWVudGluZyBpdCB3aXRoIHNvbWUgcHJpbnRmCisgICAgY2FsbHMgc2hvd3MgZGlmZmVyZW5jZXMgd2VsbCBhYm92ZSBGTFRfRVBTSUxPTi4gIChOb3RlIHdoZW4KKyAgICBpbnN0cnVtZW50aW5nIGl0IHRoYXQgbXVsdGlwbGUgY29tcHV0YXRpb25zIG9mIHRoZSBkaWZmZXJlbmNlLCBzdWNoIGFzCisgICAgb25lIGluIGEgcHJpbnQgYW5kIGFub3RoZXIgaW4gdGhlIGNvbmRpdGlvbmFsLCBtYXkgcHJvZHVjZSBkaWZmZXJlbnQKKyAgICByZXN1bHRzLikKKyAgICAKKyAgICBSYXRoZXIgdGhhbiBjb21wbGljYXRpbmcgdGhlIHRlc3Qgc3VpdGUgd2l0aCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MKKyAgICB0byBhdm9pZCBleGNlc3MgcHJlY2lzaW9uLCBqdXN0IHNpbXBsaWZ5IHRoZSBmbG9hdGluZy1wb2ludCBjb21wdXRhdGlvbgorICAgIHRvIGF2b2lkIGEgZGVwZW5kZW5jeSBvbiBwb3RlbnRpYWwgZXhjZXNzIHByZWNpc2lvbi4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogQWRqdXN0IHRvIHRoZSBDODkgc3R5bGUKLQl3aXRoIG5vIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q3LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDguYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jOiBMaWtld2lzZS4KK2NvbW1pdCBjMDBhNDllY2QxNjViMmQwNmMxYzliMjQ5ZDIxMmRjODQzZmExMTZmCitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU2F0IE1hciAxNSAyMjowODoxOSAyMDE0IC0wNzAwCiAKLTIwMTItMDMtMjEgIFBldGVyIFJvc2luCSA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jOiBBdm9pZCBzcHVyaW91cyBmYWlsdXJlIGR1ZSB0byBleGNlc3MgcHJlY2lzaW9uCisgICAgCisgICAgVGhlIHRlc3QgY2FzZSB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jIGNhbiBzcHVyaW91c2x5IGZhaWwgZHVlIHRvCisgICAgZXhjZXNzIGZsb2F0aW5nLXBvaW50IHByZWNpc2lvbi4gIEluc3RydW1lbnRpbmcgaXQgd2l0aCBzb21lIHByaW50ZgorICAgIGNhbGxzIHNob3dzIGRpZmZlcmVuY2VzIHdlbGwgYWJvdmUgRkxUX0VQU0lMT04uICAoTm90ZSB3aGVuCisgICAgaW5zdHJ1bWVudGluZyBpdCB0aGF0IG11bHRpcGxlIGNvbXB1dGF0aW9ucyBvZiB0aGUgZGlmZmVyZW5jZSwgc3VjaCBhcworICAgIG9uZSBpbiBhIHByaW50IGFuZCBhbm90aGVyIGluIHRoZSBjb25kaXRpb25hbCwgbWF5IHByb2R1Y2UgZGlmZmVyZW50CisgICAgcmVzdWx0cy4pCisgICAgCisgICAgUmF0aGVyIHRoYW4gY29tcGxpY2F0aW5nIHRoZSB0ZXN0IHN1aXRlIHdpdGggYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZsYWdzCisgICAgdG8gYXZvaWQgZXhjZXNzIHByZWNpc2lvbiwganVzdCBzaW1wbGlmeSB0aGUgZmxvYXRpbmctcG9pbnQgY29tcHV0YXRpb24KKyAgICB0byBhdm9pZCBhIGRlcGVuZGVuY3kgb24gcG90ZW50aWFsIGV4Y2VzcyBwcmVjaXNpb24uCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdF92YS5jIChmbG9hdF92YV9mbik6IFVzZSAlZiB3aGVuCi0JcHJpbnRpbmcgZG91YmxlcyAoJWxmIGlzIGZvciBsb25nIGRvdWJsZXMpLgotCShtYWluKTogTGlrZXdpc2UuCitjb21taXQgMDcxZWFiMzJhN2Y5ZmJiZWY0NmMwZDhmMzdkOTk4NWJjOWNjZWIzNworTWVyZ2U6IDIyMjhjN2EgMmY0NDk1MgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNzozNjo1MiAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMjEgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzkyIGZyb20gam9zaHRyaXBsZXR0L2F1dG9nZW4KKyAgICAKKyAgICBSZS1hZGQgbGlidG9vbC1sZGZsYWdzCiAKLQkqIHRlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwIFsqLSotY3lnd2luKiwgKi0qLW1pbmd3Kl0KLQkoc2V0X2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IEFkZCB0aGUgbGlicmFyeSBzZWFyY2ggZGlyIHRvIFBBVEgKLQkoYW5kIHNhdmUgUEFUSCBmb3IgbGF0ZXIpLgotCShyZXN0b3JlX2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IFJlc3RvcmUgUEFUSC4KK2NvbW1pdCAyZjQ0OTUyYzk1NzY1YzE0ODZmYWQ2NmY1NzIzNWY4ZDQ1OWE5NzQ4CitBdXRob3I6IEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KK0RhdGU6ICAgU3VuIE1hciAxNiAwNDozNToxMiAyMDE0IC0wNzAwCiAKLTIwMTItMDMtMjEgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKyAgICBSZS1hZGQgbGlidG9vbC1sZGZsYWdzCiAKLQkqIHRlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwIFsqLSotY3lnd2luKiwgKi0qLW1pbmd3Kl0KLQkoc2V0X2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IEFkZCB0aGUgbGlicmFyeSBzZWFyY2ggZGlyIHRvIFBBVEgKLQkoYW5kIHNhdmUgUEFUSCBmb3IgbGF0ZXIpLgotCShyZXN0b3JlX2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IFJlc3RvcmUgUEFUSC4KK2NvbW1pdCAyMjI4YzdhYjE5MGYzYzUyOWI5MDE4NDk1NDY3Yjg0MWZhMjFjYmEyCitNZXJnZTogNzZkMTlkMCAzNTYzNGRiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE2IDA3OjI1OjE4IDIwMTQgLTA0MDAKIAotMjAxMi0wMy0yMCAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjODcgZnJvbSBqb3NodHJpcGxldHQvYXV0b2dlbgorICAgIAorICAgIFJlbW92ZSBhdXRvZ2VuZXJhdGVkIGZpbGVzIGZyb20gdGhlIHJlcG9zaXRvcnkKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYyAobWFpbik6IFJlbW92ZSBidWcuCi0JKiBzcmMveDg2L3dpbjMyLlMgW01TVkNdIChmZmlfY2xvc3VyZV9TWVNWKTogTWFrZSB0aGUgJ3N0dWInIGxhYmVsCi0JdmlzaWJsZSBvdXRzaWRlIHRoZSBQUk9DLCBzbyB0aGF0IGZmaV9jbG9zdXJlX1RISVNDQUxMIGNhbiBzZWUgaXQuCitjb21taXQgMzU2MzRkYmNlYWFjMGExNTQ0ZjczODVhZGRjMDFkMjFlZjFlZjZhOAorQXV0aG9yOiBKb3NoIFRyaXBsZXR0IDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CitEYXRlOiAgIFNhdCBNYXIgMTUgMTg6MTE6MTYgMjAxNCAtMDcwMAogCi0yMDEyLTAzLTIwICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisgICAgUmVtb3ZlIGF1dG9nZW5lcmF0ZWQgZmlsZXMgZnJvbSB0aGUgcmVwb3NpdG9yeQorICAgIAorICAgIEFkZCBhbiBhdXRvZ2VuLnNoIHRvIHJlZ2VuZXJhdGUgdGhlbS4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYyAobWFpbik6IFJlbW92ZSBidWcuCi0JKiBzcmMveDg2L3dpbjMyLlMgW01TVkNdIChmZmlfY2xvc3VyZV9TWVNWKTogTWFrZSB0aGUgJ3N0dWInIGxhYmVsCi0JdmlzaWJsZSBvdXRzaWRlIHRoZSBQUk9DLCBzbyB0aGF0IGZmaV9jbG9zdXJlX1RISVNDQUxMIGNhbiBzZWUgaXQuCitjb21taXQgNzZkMTlkMDA0ZTM2ZTk5ZDI2MWVlNzgyNjFlMmY1MmNlYTVlNGFiMQorTWVyZ2U6IGM4NmQ5YjYgYTFhNmY3MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIE1hciAxNCAxNjo1NDozMSAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMTkgIEFsYW4gSG91cmloYW5lICA8YWxhbmhAZmFpcmxpdGUuY28udWs+CisgICAgRW5zdXJlIHRoZSBsaW5rZXIgc3VwcG9ydHMgQHVud2luZCBzZWN0aW9ucyBpbiBsaWJmZmkuCiAKLQkqIHNyYy9tNjhrL2ZmaS5jOiBBZGQgTUlOVCBzdXBwb3J0LgotCSogc3JjL202OGsvc3lzdi5TOiBEaXR0by4KK2NvbW1pdCBjODZkOWI2Y2M2ZTE2ZWUyNjI4NDRhMzNiNDA0NDEzNzQ0MDA3NThjCitNZXJnZTogNGVmYjdkYiBmOGNkZjExCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgTWFyIDE0IDE2OjUxOjIwIDIwMTQgLTA0MDAKIAotMjAxMi0wMy0wNiAgQ2h1bmctTGluIFRhbmcgIDxjbHRhbmdAY29kZXNvdXJjZXJ5LmNvbT4KKyAgICBGaXggbWVyZ2UKIAotCSogc3JjL2FybS9mZmkuYyAoZmZpX2NhbGwpOiBBZGQgX19BUk1fRUFCSV9fIGd1YXJkIGFyb3VuZCBjYWxsIHRvCi0JZmZpX2NhbGxfVkZQKCkuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWRkIF9fQVJNX0VBQklfXyBndWFyZCBhcm91bmQgdXNlIG9mCi0JZmZpX2Nsb3N1cmVfVkZQLgotCSogc3JjL2FybS9zeXN2LlM6IEFkZCBfX0FSTV9FQUJJX18gZ3VhcmQgYXJvdW5kIFZGUCBjb2RlLgorY29tbWl0IDRlZmI3ZGJmZDk0MjdjNDc4YTk0OGNkMGQ0NjQyMTAxMjNkYjhkZTgKK01lcmdlOiA2MzRhNDc1IDE4ZWI4MWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBNYXIgMTQgMTY6NDc6NTcgMjAxNCAtMDQwMAogCi0yMDEyLTAzLTE5ICBjaGVubmFtICA8Y3NpdEBheHdheS5jb20+CisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM4MSBmcm9tIHJ2YW5kZXJtZXVsZW4vYnVnLTc1Njc0MAorICAgIAorICAgIEFsbG93IGJ1aWxkaW5nIGZvciBtaXBzZWwgd2l0aCBBbmRyb2lkIE5ESyByOC4KIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZpeCBBSVggY2xvc3VyZQotCXN1cHBvcnQuCitjb21taXQgYTFhNmY3MWJmZTQxOTkyOTMwNDNiMmU0Y2ZiNGM4ZDNjYjExMTJmOQorQXV0aG9yOiBSeWFuIFZhbmRlck1ldWxlbiA8cnlhbnZtQGdtYWlsLmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxMCAxNToxMjo0NyAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMTMgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIFJlbW92ZSBzdHJheSBodW5rIHRoYXQgc2hvdWxkbid0IGhhdmUgYmVlbiBpbmNsdWRlZCBpbiB0aGlzIHBhdGNoLgogCi0JKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRG9uJ3QgQVNTRVJUIEFCSSB0ZXN0LAotCWp1c3QgcmV0dXJuIEZGSV9CQURfQUJJIHdoZW4gdGhpbmdzIGFyZSB3cm9uZy4KLQkqIHNyYy9zaDY0L2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgorY29tbWl0IGY4Y2RmMTE0NjcxODFmMmE5YTZiN2U3NDgxNjc1NjlhYTU4ZTNhODEKK0F1dGhvcjogUnlhbiBWYW5kZXJNZXVsZW4gPHJ5YW52bUBnbWFpbC5jb20+CitEYXRlOiAgIE1vbiBNYXIgMTAgMTU6MDQ6NTggMjAxNCAtMDQwMAogCi0yMDEyLTAzLTA5ICBEYXZpZCBFZGVsc29obiAgPGRqZS5nY2NAZ21haWwuY29tPgorICAgIFJlcGxhY2UgZG91YmxlIHF1b3RlcyB3aXRoIHNpbmdsZSBxdW90ZXMgaW4gTWFrZWZpbGUuaW4gdG8gaW1wcm92ZSBjb21wYXRpYmlsaXR5IGJldHdlZW4gc29tZSB2ZXJzaW9ucyBvZiBNU1lTIGFuZCBnbWFrZS4gRnJvbSBNb3ppbGxhIGJ1ZyA5NDM3MjguCisgICAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQzNzI4CiAKLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0FTTSk6IEFkanVzdCBmb3IgRGFyd2luNjQKLQljaGFuZ2UgdG8gcmV0dXJuIHZhbHVlIG9mIGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4gYW5kIGxvYWQgdHlwZQotCWZyb20gcmV0dXJuIHR5cGUuCitjb21taXQgZGZhMzczODczMmUxYmMzYTdmNDEzMDM5NWFlNGJhYjU1ZmNlYmI5OQorQXV0aG9yOiBSeWFuIFZhbmRlck1ldWxlbiA8cnlhbnZtQGdtYWlsLmNvbT4KK0RhdGU6ICAgTW9uIE1hciAxMCAxNDo1Mzo0OCAyMDE0IC0wNDAwCiAKLTIwMTItMDMtMDMgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KKyAgICBFbnN1cmUgdGhlIGxpbmtlciBzdXBwb3J0cyBAdW53aW5kIHNlY3Rpb25zIGluIGxpYmZmaS4gRnJvbSBNb3ppbGxhIGJ1ZyA3NTY3NDAuCisgICAgaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Nzc4NDE0CisgICAgCisgICAgQWxzbyB0cmFja2VkIGFzIGlzc3VlICM0Mi4KKyAgICBodHRwczovL2dpdGh1Yi5jb20vYXRncmVlbi9saWJmZmkvaXNzdWVzLzQyCiAKLQkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX2NhbGwpOiBDYXN0IHRoZSByZXR1cm4gdmFsdWUgdG8gdW5zaWduZWQKLQlsb25nLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IENhc3QgdG8gNjRiaXQgYWRkcmVzcyBpbiB0cmFtcG9saW5lLgotCShmZmlfY2xvc3VyZV91bml4NjRfaW5uZXIpOiBDYXN0IHJldHVybiBwb2ludGVyIHRvIHVuc2lnbmVkIGxvbmcKLQlmaXJzdC4KK2NvbW1pdCAxOGViODFkMDMyZjI5ZDY0NWQwNDk4YmE5MmJkZGZkNjUxZjAwOWFlCitBdXRob3I6IFJ5YW4gVmFuZGVyTWV1bGVuIDxyeWFudm1AZ21haWwuY29tPgorRGF0ZTogICBNb24gTWFyIDEwIDE0OjQzOjM3IDIwMTQgLTA0MDAKIAotCSogc3JjL3g4Ni9mZml0YXJnZXQuaCAoRkZJX1NJWkVPRl9BUkcpOiBEZWZpbmVkIHRvIDggZm9yIHgzMi4KLQkoZmZpX2FyZyk6IFNldCB0byB1bnNpZ25lZCBsb25nIGxvbmcgZm9yIHgzMi4KLQkoZmZpX3NhcmcpOiBTZXQgdG8gbG9uZyBsb25nIGZvciB4MzIuCisgICAgQWxsb3cgYnVpbGRpbmcgZm9yIG1pcHNlbCB3aXRoIEFuZHJvaWQgTkRLIHI4LiBGcm9tIE1vemlsbGEgYnVnIDc1Njc0MC4KKyAgICBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD03NTY3NDAKIAotMjAxMi0wMy0wMyAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorY29tbWl0IDIzNDlmZWM5YTgxOGZiNTJmZDJmMjk0YmNiYzdiMzE1NmNkMTEzZGUKK0F1dGhvcjogRGFpa2kgVWVubyA8dWVub0BnbnUub3JnPgorRGF0ZTogICBXZWQgTWFyIDUgMTc6NTM6MDIgMjAxNCArMDkwMAogCi0JKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmX2NvcmUpOiBQcm9wZXJseSBjaGVjayBiYWQgQUJJLgorICAgIEZpeCB0eXBvIGluIGRvYwogCi0yMDEyLTAzLTAzICBBbmRvbmkgTW9yYWxlcyBBbGFzdHJ1ZXkgIDx5bGF0dXlhQGdtYWlsLmNvbT4KK2NvbW1pdCA2MzRhNDc1ZWFmMWJlZTMxYzA5ZjdkNTE5ZTMxYzEzYjY0Y2QyNGRmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDEgMTg6Mzc6MjkgMjAxNCAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCAtbm8tdW5kZWZpbmVkIGZvciBib3RoIDMyLSBhbmQgNjQtYml0IHg4NgotCXdpbmRvd3MtbGlrZSBob3N0cy4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBVcGRhdGUgTWFrZWZpbGUgZm9yIG5ldyBkYXJ3aW4gc2NyaXB0cwogCi0yMDEyLTAyLTI3ICBNaWthZWwgUGV0dGVyc3NvbiAgPG1pa3BlQGl0LnV1LnNlPgorY29tbWl0IGM3YjY3ZTg3NGJiODk4NTlmOWEwN2QxY2Y5NjA2MDUyYjZjMGRjYzEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMSAxODozNDoxOCAyMDE0IC0wNTAwCiAKLQlQUiBsaWJmZmkvNTIyMjMKLQkqIE1ha2VmaWxlLmFtIChGTEFHU19UT19QQVNTKTogRGVmaW5lLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisgICAgQWRkIFJFQURNRSBub3RlCiAKLTIwMTItMDItMjMgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBhMDRlMzBiYTNkYzMwMzEzM2Q0NTljMWFjMjczY2VlZmU0ZDQ5YjMyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDE3OjIwOjU5IDIwMTQgLTA1MDAKIAotCSogc3JjLyovZmZpdGFyZ2V0Lmg6IEVuc3VyZSB0aGF0IHVzZXJzIG5ldmVyIGluY2x1ZGUgZmZpdGFyZ2V0LmgKLQlkaXJlY3RseS4KKyAgICBBZGQgbWlzc2luZyAtREZGSV9ERUJVRyBmbGFnCiAKLTIwMTItMDItMjMgIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorY29tbWl0IDkzNGRjMWI1YzhkNmE5ZTcyN2JlZGM3MjM0MjgzMWViN2Q2MmMzNWYKK01lcmdlOiAxMWQ3YWE5IDY3ZmJlZjMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDE6MTA6MTcgMjAxNCAtMDUwMAogCi0JUFIgbGliZmZpLzUyMjIxCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwpOiBOZXcKLQlwcm90b3R5cGUuCi0JKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IFVzZSBmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwgZm9yCi0JdGhpc2NhbGwtY29udmVudGlvbi4KLQkoZmZpX3Jhd19jYWxsKTogVXNlIGZmaV9wcmVwX2FyZ3NfcmF3LgotCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwpOiBBZGQKLQlpbXBsZW1lbnRhdGlvbiBmb3Igc3R1Yi4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotMjAxMi0wMi0xMCAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+Citjb21taXQgMTFkN2FhOWQ3YTRiYmU2NDI5NDRlZGMwZjA3Y2Y5NmRiOWIyNzBiNgorTWVyZ2U6IGI0MGFlZGEgM2I0NGQ0MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMTowNjo0OCAyMDE0IC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoQU1fTFRMREZMQUdTKTogQWRkIC1uby11bmRlZmluZSBmb3IgeDY0Ci0Jd2luZG93cyB0YXJnZXQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNDYgZnJvbSBtYWtvdG9rYXRvL2FuZHJvaWQtY2xhbmcKKyAgICAKKyAgICBGaXggYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIGNsYW5nIGZvciBBbmRyb2lkCiAKLTIwMTItMDItMDggIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorY29tbWl0IDY3ZmJlZjNiNTZmZjBlZjg4ZjliMWE3ZmU0OGNiNzcyMjJmYTZjZWMKK01lcmdlOiBiNDBhZWRhIDNiNDRkNDEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDE6MDY6NDggMjAxNCAtMDUwMAogCi0JKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogQWxsb3cgZm9yIFg4Nl9XSU4zMgotCWFsc28gRkZJX1RISVNDQUxMLgotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfVEhJU0NBTEwpOiBBZGQgcHJvdG90eXBlLgotCShGRklfSU5JVF9UUkFNUE9MSU5FX1RISVNDQUxMKTogTmV3IHRyYW1wb2xpbmUgY29kZS4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBBZGQgRkZJX1RISVNDQUxMIHN1cHBvcnQuCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oIChGRklfVFJBTVBPTElORV9TSVpFKTogQWRqdXN0IHNpemUuCi0JKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX1RISVNDQUxMKTogTmV3IGNsb3N1cmUgY29kZQotCWZvciB0aGlzY2FsbC1jYWxsaW5nIGNvbnZlbnRpb24uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jOiBOZXcgdGVzdC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzQ2IGZyb20gbWFrb3Rva2F0by9hbmRyb2lkLWNsYW5nCisgICAgCisgICAgRml4IGJ1aWxkIGZhaWx1cmUgd2hlbiB1c2luZyBjbGFuZyBmb3IgQW5kcm9pZAogCi0yMDEyLTAxLTI4ICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KK2NvbW1pdCBiNDBhZWRhMzFhNzRkOTVhMzdjNzIzYjYyNDNhYWJhYzQ2NmU2N2M0CitNZXJnZTogMjA2OThhYiA1M2NlYWYxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAxOjAxOjI5IDIwMTQgLTA1MDAKIAotCSogc3JjL2xpYmZmaS9zcmMveDg2L2ZmaS5jIChmZmlfY2FsbF93aW4zMik6IEFkZCBuZXcKLQlhcmd1bWVudCB0byBwcm90b3R5cGUgZm9yIHNwZWNpZnkgY2FsbGluZy1jb252ZW50aW9uLgotCShmZmlfY2FsbCk6IEFkZCBzdXBwb3J0IGZvciBzdGRjYWxsL3RoaXNjYWxsIGNvbnZlbnRpb24uCi0JKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KLQkoZmZpX3Jhd19jYWxsKTogTGlrZXdpc2UuCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQWRkIEZGSV9USElTQ0FMTCBhbmQKLQlGRklfRkFTVENBTEwuCi0JKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2FsbF93aW4zMik6IEFkZCBzdXBwb3J0IGZvcgotCWZhc3RjYWxsL3RoaXNjYWxsIGNhbGxpbmctY29udmVudGlvbiBjYWxscy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYzogTmV3IHRlc3QuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmM6IE5ldyB0ZXN0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jOiBOZXcgdGVzdC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmM6IE5ldyB0ZXN0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyX3dpbjMyLmM6IE5ldyB0ZXN0LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYzogTmV3IHRlc3QuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jOiBOZXcgdGVzdC4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotMjAxMi0wMS0yMyAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KK2NvbW1pdCA1M2NlYWYxNGM1ZWViMTZiYTA5NzQ1ZjBjYTg3Y2NhMzY3ZDQxYTkwCitNZXJnZTogODYwZmU2NiBjYzliNTE4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAxOjAxOjAyIDIwMTQgLTA1MDAKIAotCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IENoZWNrIGZvciBiYWQgQUJJLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNDAgZnJvbSB3b2pkeXIvbWFzdGVyCisgICAgCisgICAgQ29ycmVjdCB0aGUgLUwgZmxhZyBpbiBsaWJmZmkucGMuaW4KIAotMjAxMi0wMS0yMyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgotCSAgICBDaHJpcyBZb3VuZyAgPGNkeW91bmdAbnRsd29ybGQuY29tPgorY29tbWl0IDIwNjk4YWJjNmEwMDA5MmZkN2ZkM2U0MzRhM2EyOWRjMGYwNDhmMWUKK01lcmdlOiA2NGJkMDY5IDFhMGIwMWUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6NTY6MjcgMjAxNCAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBBbWlnYSBzdXBwb3J0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNjYgZnJvbSBwcGl6YXJyby9tYXN0ZXIKKyAgICAKKyAgICBCbGFja0ZpbiBmaXhlcyAtIEZhdGFsIGVycm9yIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIGRlZmluZWQgaW4gYSBzaGFyZWQgbGlicmFyeSBmcm9tIHdpdGhpbiB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IEZGSQogCi0yMDEyLTAxLTIzICBEbWl0cnkgTmFkZXpoaW4gIDxkbWl0cnkubmFkZXpoaW5AZ21haWwuY29tPgorY29tbWl0IDg2MGZlNjY0NmY1YWU2MDNlOTlhOGQxZDcyMmRkZGRiYThiNzU3NjkKK01lcmdlOiA2NGJkMDY5IDFhMGIwMWUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6NTY6MjcgMjAxNCAtMDUwMAogCi0JKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoTElLRUxZLCBVTkxJS0VMWSk6IEZpeCBkZWZpbml0aW9ucy4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzY2IGZyb20gcHBpemFycm8vbWFzdGVyCisgICAgCisgICAgQmxhY2tGaW4gZml4ZXMgLSBGYXRhbCBlcnJvciB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiBkZWZpbmVkIGluIGEgc2hhcmVkIGxpYnJhcnkgZnJvbSB3aXRoaW4gdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSBGRkkKIAotMjAxMi0wMS0yMyAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAbGludXgtbTY4ay5vcmc+Citjb21taXQgNjRiZDA2OTkwYTdhY2NmNzIyNzE1MTZhMjExMGI4NmNkY2NkOGRmNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDo1Mjo1NiAyMDE0IC0wNTAwCiAKLQkqIHNyYy9tNjhrL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFByb3Blcmx5IHRlc3QgZm9yIHBsYWluCi0JbWM2ODAwMC4gIFRlc3QgZm9yIF9fSEFWRV82ODg4MV9fIGluIGFkZGl0aW9uIHRvIF9fTUM2ODg4MV9fLgorICAgIEFkZCBDaGFuZ2VMb2cgZW50cnkgZm9yIEpvc2gncyBjaGFuZ2UKIAotMjAxMi0wMS0xOSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+Citjb21taXQgZWRmMjljNTE2OWIwNmZjZmMyNDE0NDVlMTUyZTMyNWJjM2M1MGUwZQorTWVyZ2U6IDMzYzk5NTQgMzk5OGQyNgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDo1MDoyNSAyMDE0IC0wNTAwCiAKLQlQUiBydGwtb3B0aW1pemF0aW9uLzQ4NDk2Ci0JKiBzcmMvaWE2NC9mZmkuYyAoZmZpX2NhbGwpOiBGaXggdXAgYWxpYXNpbmcgdmlvbGF0aW9ucy4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzc1IGZyb20gam9zaHRyaXBsZXR0L2xvbmdkb3VibGUKKyAgICAKKyAgICBGaXggYnVpbGQgZXJyb3Igb24geDg2IHdpdGhvdXQgZGlzdGluY3QgbG9uZyBkb3VibGUKIAotMjAxMi0wMS0wOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgMzNjOTk1NGYyZWVjNTM5MDExYTBmOTMyNzBhYWYwMTMzMTg4MzdhZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDozODo0MSAyMDE0IC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoaT84Ni0qLSopOiBTZXQgVEFSR0VUIHRvIFg4Nl82NC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBSZWJ1aWx0IHdpdGggbmV3IGxpYnRvb2wKIAotMjAxMS0xMi0wNyAgQW5kcmV3IFBpbnNraSAgPGFwaW5za2lAY2F2aXVtLmNvbT4KK2NvbW1pdCA5MjZiNjk4OWZiZDA4NDg4YjkxMDU5NDMyOTMzNTNkNDVhYzUyN2UwCitNZXJnZTogNWE4OGM4NSBjYzgyMDUxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjI2OjU3IDIwMTQgLTA1MDAKIAotCVBSIGxpYmZmaS81MDA1MQotCSogc3JjL21pcHMvbjMyLlM6IEFkZCAiLnNldCBtaXBzNCIuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlDaGFuZ2VMb2cKIAotMjAxMS0xMS0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhbmRyZWFzdEBmZ3puZXQuY2g+Citjb21taXQgNWE4OGM4NWZkZTMwNDA1MmJlZDE1ODFlZDBiNjQ1MmFjMmM2ODgzOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDoyMzowNCAyMDE0IC0wNTAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBGaXggc3BlbGxpbmcgZXJyb3JzCiAKLTIwMTEtMTEtMTIgIERhdmlkIEdpbGJlcnQgPGRhdmlkLmdpbGJlcnRAbGluYXJvLm9yZz4KK2NvbW1pdCBjYzgyMDUxYzdlODBjZWE3NzJjNGI3MmRhMDI2ZWI3ZTY4ZDU5OGZjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI4IDAwOjIzOjA0IDIwMTQgLTA1MDAKIAotCSogZG9jL2xpYmZmaS50ZXhpLCBpbmNsdWRlL2ZmaS5oLmluLCBpbmNsdWRlL2ZmaV9jb21tb24uaCwKLQltYW4vTWFrZWZpbGUuYW0sIG1hbi9mZmkuMywgbWFuL2ZmaV9wcmVwX2NpZi4zLAotCW1hbi9mZmlfcHJlcF9jaWZfdmFyLjMsIHNyYy9hcm0vZmZpLmMsIHNyYy9hcm0vZmZpdGFyZ2V0LmgsCi0Jc3JjL2NyaXMvZmZpLmMsIHNyYy9wcmVwX2NpZi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0X3ZhLmM6IE1hbnkgY2hhbmdlcyB0byBzdXBwb3J0IHZhcmlhZGljCi0JZnVuY3Rpb24gY2FsbHMuCisgICAgRml4IHNwZWxsaW5nIGVycm9ycwogCi0yMDExLTExLTEyICBLeWxlIE1vZmZldHQgPEt5bGUuRC5Nb2ZmZXR0QGJvZWluZy5jb20+Citjb21taXQgMDAxYWFmNGIxYjU2MzQ5NTk2YmI2ZjZiNWMxNjEzZGNiYmQ4NGVhOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyOCAwMDoyMDoxNyAyMDE0IC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jLCBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCwKLQlzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TLCBzcmMvcG93ZXJwYy9zeXN2LlM6IE1hbnkgY2hhbmdlcyBmb3IKLQlzb2Z0ZmxvYXQgcG93ZXJwYyB2YXJpYW50cy4KKyAgICBXaGVuIG5vIFZGUCBhcmd1bWVudHMgYXJlIHByZXNlbnQgdGhlIElQIHJlZ2lzdGVyIGlzIHVzZWQKKyAgICB1bmluaXRpYWxpemVkLiBJbml0aWFsaXplIGl0IHRvIHRoZSB2YWx1ZSBvZiBGUC4KKyAgICAKKyAgICBUaGlzIGZpeGVzIGEgbnVtYmVyIG9mIHRlc3RzdWl0ZSBmYWlsdXJlcyB3aGVuIGNvbmZpZ3VyZWQgZm9yCisgICAgYXJtdjdsLXVua25vd24tbGludXgtZ251ZWFiaWhmCiAKLTIwMTEtMTEtMTIgIFBldHIgU2FsaW5nZXIgPFBldHIuU2FsaW5nZXJAc2V6bmFtLmN6PgorY29tbWl0IDQ5Zjc3MjljM2NlNjk3YzEyNDA4YzQyY2NiMjljZGY0ZWI2NmJiODUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMjggMDA6MTc6MTYgMjAxNCAtMDUwMAogCi0JKiBjb25maWd1cmUuYWMgKEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUpOiBGaXgga2ZyZWVic2Qgc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBhYXJjaDY0IGZpeAogCi0yMDExLTExLTEyICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+Citjb21taXQgNDQ3NDgzZDUxYzZhYTlkZjcxMTZmMzQ2YTczZmMxY2Y3OTVmNGMyYgorTWVyZ2U6IDUxMzc3YmQgYjRkZjljZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiAyNyAxNTo0Mjo0MSAyMDE0IC0wNTAwCiAKLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IE1heAotCWFsaWdubWVudCBvZiA0IGZvciB3aW5jZSBvbiBBUk0uCisgICAgRml4IENoYW5nZUxvZyBtZXJnZQogCi0yMDExLTExLTEyICBLeWxlIE1vZmZldHQgPEt5bGUuRC5Nb2ZmZXR0QGJvZWluZy5jb20+Ci0JICAgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDM5OThkMjYwNGI1YzBkNDVhMDk4ZmYzMTE5YTlmZDk3MTBlZjQyOWQKK0F1dGhvcjogSm9zaCBUcmlwbGV0dCA8am9zaEBqb3NodHJpcGxldHQub3JnPgorRGF0ZTogICBNb24gRmViIDE3IDExOjIwOjMzIDIwMTQgLTA4MDAKIAotCSogc3JjL3BwYy9zeXN2LlMsIHNyYy9wcGMvZmZpLmM6IFJlbW92ZSB1c2Ugb2YgcHBjIHN0cmluZwotCWluc3RydWN0aW9ucyAobm90IGF2YWlsYWJsZSBvbiBzb21lIGNvcmVzLCBsaWtlIHRoZSBQUEM0NDApLgorICAgIEZpeCBidWlsZCBlcnJvciBvbiB4ODYgd2l0aG91dCBkaXN0aW5jdCBsb25nIGRvdWJsZQorICAgIAorICAgIHNyYy94ODYvZmZpNjQuYzogSW4gZnVuY3Rpb24gJ2NsYXNzaWZ5X2FyZ3VtZW50JzoKKyAgICBzcmMveDg2L2ZmaTY0LmM6MjA1OjU6IGVycm9yOiBkdXBsaWNhdGUgY2FzZSB2YWx1ZQorICAgICAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorICAgICAgICAgXgorICAgIHNyYy94ODYvZmZpNjQuYzoyMDI6NTogZXJyb3I6IHByZXZpb3VzbHkgdXNlZCBoZXJlCisgICAgICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyAgICAgICAgIF4KIAotMjAxMS0xMS0xMiAgS2ltdXJhIFdhdGFydSAgPGtpbXVyYXdAaS5uaWZ0eS5qcD4KK2NvbW1pdCA1MTM3N2JkYTlhZWQwYjJjMTMwOWM4MTg0NjBjYWI5ZDlhYjNkNDZlCitNZXJnZTogZjA4ZGE1NCA0MDkyN2JkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgRmViIDE1IDA4OjA2OjI5IDIwMTQgLTA1MDAKIAotCSogbTQvYXhfZW5hYmxlX2J1aWxkZGlyOiBDaGFuZ2UgZnJvbSBzdHJpbmcgY29tcGFyaXNvbiB0byBudW1lcmljCi0JY29tcGFyaXNvbiBmb3Igd2Mgb3V0cHV0LgotCSogY29uZmlndXJlLmFjOiBFbmFibGUgRkZJX01NQVBfRVhFQ19XUklUIGZvciBkYXJ3aW4xMSBha2EgTWFjIE9TCi0JWCAxMC43LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNzIgZnJvbSBoZWloZXIvZGV2ZWwKKyAgICAKKyAgICBNSVBTIE4zMjogRml4IGNhbGwgZmxvYXRpbmcgcG9pbnQgdmEgZnVuY3Rpb24KIAotMjAxMS0xMS0xMiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IGYwOGRhNTQ2NTQ2M2U2MGEyOGY1ZTkyMWYyM2ViZjJiYTk4NGMxNDgKK01lcmdlOiAzZGMzZjMyIGZhNWYyNWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBGZWIgMTUgMDg6MDY6MTEgMjAxNCAtMDUwMAogCi0JKiBNYWtlZmlsZS5hbSAoQU1fQ0NBU0ZMQUdTKTogQWRkIC1nIG9wdGlvbiB0byBidWlsZCBhc3NlbWJseQotCWZpbGVzIHdpdGggZGVidWcgaW5mby4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNjggZnJvbSB6ZWxkaW4vbWFzdGVyCisgICAgCisgICAgTGludXgvcHBjNjQ6IFJlbW92ZSBhc3N1bXB0aW9uIG9uIGNvbnRlbnRzIG9mIHIxMSBpbiBjbG9zdXJlCiAKLTIwMTEtMTEtMTIgIEphc3BlciBMaWV2aXNzZSBBZHJpYWFuc2UgPGphc3BlckBvcGVuYnNkLm9yZz4KK2NvbW1pdCA0MDkyN2JkM2UxZTdjNjAwNzAyNWJhMTA4NTRmZDhhMDY2NGU0N2RmCitBdXRob3I6IEhlaWhlciA8ckBoZXYuY2M+CitEYXRlOiAgIFR1ZSBKYW4gMjEgMjM6MTg6MjcgMjAxNCArMDgwMAogCi0JKiBSRUFETUU6IFVwZGF0ZSBsaXN0IG9mIHN1cHBvcnRlZCBPcGVuQlNEIHN5c3RlbXMuCisgICAgRml4IGNhbGwgZmxvYXRpbmcgcG9pbnQgdmEgZnVuY3Rpb24KKyAgICAKKyAgICBJJ20gbm90IHN1cmUgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzIGluIEdQUiBvciBGUFIgYmVmb3JlIGNhbGxpbmcKKyAgICB2YXJpYWJsZSBudW1iZXIgYXJndW1lbnRzIGZ1bmN0aW9uLiBzbywgbG9hZCBhbGwgYXJndW1lbnRzIHRvIEdQUiBhbmQKKyAgICBGUFIuCiAKLTIwMTEtMTEtMTIgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBiNGRmOWNmOWNjNGE5YTk0MDFhNTNmZDZiZWExZjNjMmMyODNiOTdiCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgV2VkIEZlYiA1IDE0OjIyOjUyIDIwMTQgLTA1MDAKIAotCSogbGlidG9vbC12ZXJzaW9uOiBVcGRhdGUuCi0JKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIHNyYy9kZWJ1Zy5jIGlmCi0JRkZJX0RFQlVHLgotCShsaWJmZmlfbGFfU09VUkNFUyk6IFJlbW92ZSBzcmMvZGVidWcuYwotCShFWFRSQV9ESVNUKTogQWRkIHNyYy9kZWJ1Zy5jCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIFJFQURNRTogVXBkYXRlIGZvciAzLjAuMTEuCisgICAgQUFyY2g2NDogRml4IHZvaWQgZmFsbC10aHJvdWdoIGNhc2Ugd2hlbiBhc3NlcnRpb25zIGFyZSBlbmFibGVkCiAKLTIwMTEtMTEtMTAgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Citjb21taXQgZjQ2NmFhZDBkOTFhMTE3ZTQyNTcxZDFkNmZiNDM0ZmEwNDMzYzkzMAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFR1ZSBKYW4gMjEgMTY6Mzg6MzEgMjAxNCAtMDUwMAogCi0JKiBjb25maWd1cmUuYWMgKEdDQ19BU19DRklfUFNFVURPX09QKTogVXNlIGl0IGluc3RlYWQgb2YgaW5saW5lIGNoZWNrLgotCSogY29uZmlndXJlLCBhY2xvY2FsLm00OiBSZWJ1aWxkLgorICAgIEFBcmNoNjQ6IEZpeCBtaXNzaW5nIHNlbWljb2xvbnMgd2hlbiBhc3NlcnRpb25zIGFyZSBlbmFibGVkCiAKLTIwMTEtMDktMDQgIElhaW4gU2FuZG9lICA8aWFpbnNAZ2NjLmdudS5vcmc+Citjb21taXQgN2VhNjc3NzMzYmQ5ODkxNzI0MTg1MmI4OTAxYTZiNzU4MDcyODg5NQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAyMDo1ODozMSAyMDEzIC0wNTAwCiAKLQlQUiBsaWJmZmkvNDk1OTQKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMgKHN0dWJzKTogTWFrZSB0aGUgc3R1YiBiaW5kaW5nCi0JaGVscGVyIHJlZmVyZW5jZSB0cmFjayB0aGUgYXJjaGl0ZWN0dXJlIHBvaW50ZXIgc2l6ZS4KKyAgICBSZW1vdmUgYnVpbGQtaW9zIGZyb20gTWFrZWZpbGUKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCUNoYW5nZUxvZwogCi0yMDExLTA4LTI1ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCA2YWUwNDZjYzU5YzEyYjJjZDQwMTU4ZDZiY2I5NmY0YTU5ODg2MTU5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDIxOjA2OjUxIDIwMTMgLTA1MDAKIAotCSogc3JjL2FybS9mZmkuYyAoRkZJX0lOSVRfVFJBTVBPTElORSk6IFJlbW92ZSBoYXJkLWNvZGVkIGFzc2VtYmx5Ci0JaW5zdHJ1Y3Rpb25zLgotCSogc3JjL2FybS9zeXN2LlMgKGZmaV9hcm1fdHJhbXBvbGluZSk6IFB1dCB0aGVtIGhlcmUgaW5zdGVhZC4KKyAgICBNZW50aW9uIEFhcmNoNjQgb24gaU9TCiAKLTIwMTEtMDctMTEgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGJmYzA2YjNmZGIzMmFiZTkwY2UwNzQ5YWVkZmVjNjQ5ZGY4NWE3ZWYKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE3OjM2OjM5IDIwMTMgLTA1MDAKIAotICAgICAgICAqIHNyYy9hcm0vZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBDbGVhciBpY2FjaGUuCisgICAgVXBkYXRlIENoYW5nZUxvZwogCi0yMDExLTA2LTI5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCAwYTBmMTJjZTFmN2JlODEwMDZiMDhhM2M4MWE2MzY5MjZkMjgzYTliCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgVGh1IEphbiA5IDEzOjUwOjE3IDIwMTQgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogTW92ZSBQUiBudW1iZXIgdG8gY29tbWVudC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBMaWtld2lzZS4KKyAgICBBQXJjaDY0OiBSZW1vdmUgZHVwbGljaXRvdXMgZWxlbWVudF9jb3VudCBjYWxsLgorICAgIAorICAgIFRoaXMgaW5oaWJpdHMgYW4gYW5hbHl6ZXIgd2FybmluZyBieSBDbGFuZy4KIAotMjAxMS0wNi0yOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgNDMzMGZkY2Q5MmU2N2M4MTYyODhkNjRhYjIzMDIzNzA2NTc2ODIwNgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFRodSBKYW4gOSAxMzo1MzozMCAyMDE0IC0wNTAwCiAKLQlQUiBsaWJmZmkvNDY2NjAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmM6IHhmYWlsIGRnLW91dHB1dCBvbgotCW1pcHMtc2dpLWlyaXg2Ki4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBMaWtld2lzZS4KKyAgICBEYXJ3aW4vYWFyY2g2NDogUmVzcGVjdCBpT1MgQUJJIHJlOiBzdGFjayBhcmd1bWVudCBhbGlnbm1lbnQKIAotMjAxMS0wNi0xNCAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgMGEzMzNkNmMzOTczOTM1ZDRmZTAyYWFlNzZiMTBlMzlkM2M4OGUwNworQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIFRodSBKYW4gOSAxNDowMzoyOSAyMDE0IC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jICh0ZXN0X2xhcmdlX2ZuKTogVXNlIFBSSXU4LAotCVBSSWQ4IGluc3RlYWQgb2YgJWhodSwgJWhoZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggW19fYWxwaGFfXyAmJiBfX29zZl9fXSAoUFJJZDgsCi0JUFJJdTgpOiBEZWZpbmUuCi0JW19fc2dpX19dIChQUklkOCwgUFJJdTgpOiBEZWZpbmUuCisgICAgRGFyd2luL2FhcmNoNjQ6IEZpeCBzaXplX3QgYXNzdW1wdGlvbnMKIAotMjAxMS0wNC0yOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgMmMxOGUzYzc2YWFkMWI0MjY2MTdkYjA1YTQzODRlN2MzYTkyMDE3NgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTY6MTQ6MDIgMjAxMyAtMDUwMAogCi0JKiBzcmMvYWxwaGEvb3NmLlMgKFVBX1NJLCBGREVfRU5DT0RJTkcsIEZERV9FTkNPREUsIEZERV9BUkFOR0UpOgotCURlZmluZS4KLQlVc2UgdGhlbSB0byBoYW5kbGUgRUxGIHZzLiBFQ09GRiBkaWZmZXJlbmNlcy4KLQlbX19vc2ZfX10gKF9HTE9CQUxfX0ZfZmZpX2NhbGxfb3NmKTogRGVmaW5lLgorICAgIERhcndpbi9hYXJjaDY0OiBGaXggInNoYWRvd3MgZGVjbGFyYXRpb24iIHdhcm5pbmdzCiAKLTIwMTEtMDMtMzAgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KK2NvbW1pdCAxYjhhOGUyMGUzNDRmM2M1NTQ5NWFiNmViNDZiZDE0ZTg0M2Q0YjNlCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgVGh1IEphbiA5IDEzOjU1OjIxIDIwMTQgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEZpeCB1bmtub3duIEZERSBlbmNvZGluZy4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IGRpdHRvLgorICAgIERhcndpbi9hYXJjaDY0OiBVc2UgQ2xhbmcgY2FjaGUgaW52YWxpZGF0aW9uIGJ1aWx0aW4KIAotMjAxMS0wMi0yNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorY29tbWl0IDYwMzBjZGNhZTc3NmY4ZmI1ODc2YTUzMTY4ZjdkMWU3NWQyOGEyNDIKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBNb24gRGVjIDMwIDE1OjQ1OjUxIDIwMTMgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWxsb3cgZm9yIG1vcmUKLQkzMi1iaXQgQUJJcy4KKyAgICBEYXJ3aW4vYWFyY2g2NDogQWNjb3VudCBmb3IgbG9uZyBkb3VibGUgYmVpbmcgZXF1YWwgdG8gZG91YmxlCiAKLTIwMTEtMDItMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA1NjU4YjA4OTI2ODNkMmUyNGU0ZDU4NDI5NzhjMTg0YTdhZDMzODU4CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNjozMzo0NyAyMDEzIC0wNTAwCiAKLQkqIG00L2F4X2NjX21heG9wdC5tNDogRG9uJ3QgLW1hbGlnbi1kb3VibGUgb3IgdXNlIC1mZmFzdC1tYXRoLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIERhcndpbi9hYXJjaDY0OiBVc2UgQ05BTUUsIHJlc3RyaWN0IC5zaXplIGxpa2UgQVJNCiAKLTIwMTEtMDItMTMgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+Citjb21taXQgMDcxNzU3ODA4MDJhY2VjNWRjNDlmZGVkZDZkMjBhNjI0MDlhNjcwNworQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTc6NDg6MjIgMjAxMyAtMDUwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRGFyd2luL2FhcmNoNjQ6IEZpeCBpbnZhbGlkIHJlZmVyZW5jZSBpbiBhc3NlbWJseQogCi0yMDExLTAyLTEzICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgOWRhMjhiNDQyNzdmZWEzYWViODI3YzM1ZGQ2M2Q2MDlkMjUyNGE4YgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTY6MjM6MjEgMjAxMyAtMDUwMAogCi0JKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoVU5MSUtFTFksIExJS0VMWSk6IERlZmluZS4KLQkqIHNyYy94ODYvZmZpNjQuYyAoVU5MSUtFTFksIExJS0VMWSk6IFJlbW92ZSBkZWZpbml0aW9uLgotCSogc3JjL3ByZXBfY2lmLmMgKFVOTElLRUxZLCBMSUtFTFkpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKyAgICBEYXJ3aW4veDg2XzY0OiBGaXggNjQtYml0IHR5cGUgc2hvcnRlbmluZyB3YXJuaW5ncwogCi0JKiBzcmMvcHJlcF9jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUpOiBDb252ZXJ0IGFzc2VydGlvbiBpbnRvCi0JRkZJX0JBRF9UWVBFREVGIHJldHVybi4gIEluaXRpYWxpemUgYXJnIHNpemUgYW5kIGFsaWdubWVudCB0byAwLgorY29tbWl0IDgyMWQzOThmMDhiZDFkNTQwYTViMjM1NTA3ODEyZmZlZWU0OWI1ODAKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHphY2hAd2FsZG93c2tpLm1lPgorRGF0ZTogICBUaHUgSmFuIDkgMTM6MTU6MDYgMjAxNCAtMDUwMAogCi0JKiBzcmMvcGEvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRG9uJ3QgQVNTRVJUIEFCSSB0ZXN0LAotCWp1c3QgcmV0dXJuIEZGSV9CQURfQUJJIHdoZW4gdGhpbmdzIGFyZSB3cm9uZy4KLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KLQkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgotCSogc3JjL2lhNjQvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCi0JKiBzcmMvYXZyMzIvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCisgICAgRGFyd2luOiBNZXJnZSBidWlsZCBzY3JpcHRzLCByZWRvIHByb2plY3QsIGluY2wuIGFybTY0CiAKLTIwMTEtMDItMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA2ZWZmOWZmOWU3MjQ2M2I5NzgzYmUyNTE0Zjk0NGI2ZjA1NjkyMDU0CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNzo0ODoxMCAyMDEzIC0wNTAwCiAKLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEb24ndCBBU1NFUlQgQUJJIHRlc3QsCi0JanVzdCByZXR1cm4gRkZJX0JBRF9BQkkgd2hlbiB0aGluZ3MgYXJlIHdyb25nLgorICAgIERhcndpbi9pT1M6IEltcHJvdmUgdW5pZmllZCBzeW50YXggdXNlIGZvciBMTFZNCiAKLTIwMTItMDItMTEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+Citjb21taXQgYmEwZWE5OWM4MmFhZGQ1OTU3Mzg2YTAzMWUzMTIyMDExYmQzNmQ1MgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTU6Mjc6NDQgMjAxMyAtMDUwMAogCi0JKiBzcmMvc3BhcmMvdjkuUyAoU1RBQ0tGUkFNRSk6IEJ1bXAgdG8gMTc2LgorICAgIEZpeCBkbG1hbGxvYyB3YXJuaW5ncyBkdWUgdG8gc2V0X3NlZ21lbnRfZmxhZ3MsIHNpemVvZihzaXplX3QpCiAKLTIwMTEtMDItMDkgIFN0dWFydCBTaGVsdG9uICA8c3Jjc2hlbHRvbkBnbWFpbC5jb20+Citjb21taXQgOTk0YmUzYTVjMWQwZDE3YjE5MTAzMzk2MTAzZTEyODUxN2ZkNjJmOQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8emFjaEB3YWxkb3dza2kubWU+CitEYXRlOiAgIE1vbiBEZWMgMzAgMTU6Mjc6MTQgMjAxMyAtMDUwMAogCi0JaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg2OTExCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogQ2xlYW4gdXAgZXJyb3IgbWVzc2FnZXMuCi0JKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzKTogQ2FzdCByYXcgYXJnIHRvCi0JZmZpX3JhdyouCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgcHJhZ21hIGZvciBTR0kgY29tcGlsZXIuCisgICAgRGFyd2luL2lPUzogRml4IG1pcy10eXBpbmcgb2YgdmZwX3JlZ19mcmVlCiAKLTIwMTEtMDItMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCBhOGUwYTgzNWFiMWY2MmQwM2FkNjM5MTc2MGUzZThiNzczMmQyNGY4CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgTW9uIERlYyAzMCAxNToyNjoyMCAyMDEzIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIHBvd2VycGM2NC0qLWRhcndpbiogc3VwcG9ydC4KKyAgICBEYXJ3aW4vQVJNOiBBc3NlcnQgb24gTlVMTCBkZXJlZmVyZW5jZQorICAgIAorICAgIFRoaXMgaW5oaWJpdHMgYW4gYW5hbHl6ZXIgd2FybmluZyBieSBDbGFuZyBvbiBhbGwgcGxhdGZvcm1zLgogCi0yMDExLTAyLTA5ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCAxMzY3NTM0MTU4MWM0ODllZDlkZjhiYTM5MGM4ZTA4YTczMmRlY2IyCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgVGh1IEphbiA5IDEzOjQyOjA4IDIwMTQgLTA1MDAKIAotCSogUkVBRE1FOiBNZW50aW9uIEludGVyaXguCisgICAgRGFyd2luL2kzODY6IEluaGliaXQgQ2xhbmcgcHJldmlvdXMgcHJvdG90eXBlIHdhcm5pbmdzCiAKLTIwMTEtMDItMDkgIEpvbmF0aGFuIENhbGxlbiAgPGFiY2RAZ2VudG9vLm9yZz4KK2NvbW1pdCA2NjQ2OWMzODFlMmUyY2M5NmU3ZDQwOTI2NmRlYTBmZmUxNzdlZWNhCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgVGh1IEphbiA5IDEzOjQxOjQ1IDIwMTQgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBBZGQgSW50ZXJpeCB0byB3aW4zMi9jeWd3aW4vbWluZ3cgY2FzZS4KLQkqIGNvbmZpZ3VyZTogRGl0dG8uCi0JKiBzcmMvY2xvc3VyZXMuYzogVHJlYXQgSW50ZXJpeCBsaWtlIEN5Z3dpbiwgaW5zdGVhZCBvZiBhcyBhCi0JZ2VuZXJpYyB3aW4zMi4KKyAgICBEYXJ3aW4vQVJNOiBJbmhpYml0IENsYW5nIHByZXZpb3VzIHByb3RvdHlwZSB3YXJuaW5ncwogCi0yMDExLTAyLTA5ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK2NvbW1pdCA1YmZlNjJhMDBkMmQ2NTllZWM5ZjE5YjM5ODAyYjZlNjk4NDRmYzI3CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6YWNoQHdhbGRvd3NraS5tZT4KK0RhdGU6ICAgVGh1IEphbiA5IDEzOjQxOjI3IDIwMTQgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBSZW1vdmUgeGZhaWwuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogUmVtb3ZlIHhmYWlsLgotCSogc3JjL3g4Ni9mZmk2NC5jIChVTkxJS0VMWSwgTElLRUxZKTogRGVmaW5lLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IENoZWNrIGZvciBiYWQgQUJJLgotCSogc3JjL3ByZXBfY2lmLmMgKFVOTElLRUxZLCBMSUtFTFkpOiBEZWZpbmUuCi0JKGluaXRpYWxpemVfYWdncmVnYXRlKTogQ2hlY2sgZm9yIGJhZCB0eXBlcy4KKyAgICBEYXJ3aW4vQUFyY2g2NDogSW5oaWJpdCBDbGFuZyBwcmV2aW91cyBwcm90b3R5cGUgd2FybmluZ3MKIAotMjAxMS0wMi0wOSAgTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBwbGF1c2libGUuY29vcD4KK2NvbW1pdCBmYTVmMjVjMjBmNzZhNmVmNWU5NTBhN2NjYmNlODI2NjcyYzhhNjIwCitBdXRob3I6IE1hcmN1cyBDb21zdGVkdCA8bWFyY3VzQG1jLnBwLnNlPgorRGF0ZTogICBTYXQgSmFuIDQgMTk6MDA6MDggMjAxNCArMDEwMAogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBidWlsZC1pb3Muc2gsIHNyYy9hcm0vZ2VudHJhbXAuc2gsCi0Jc3JjL2FybS90cmFtcG9saW5lLlMuCi0JKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBzcmMvYXJjL3RyYW1wb2xpbmUuUy4KLQkqIGNvbmZpZ3VyZS5hYyAoRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSk6IERlZmluZS4KLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV90cmFtcG9saW5lX3RhYmxlKQotCShmZmlfY2xvc3VyZV90cmFtcG9saW5lX3RhYmxlX3BhZ2UsIGZmaV90cmFtcG9saW5lX3RhYmxlX2VudHJ5KQotCShGRklfVFJBTVBPTElORV9DT0RFTE9DX0NPTkZJRywgRkZJX1RSQU1QT0xJTkVfQ09ORklHX1BBR0VfT0ZGU0VUKQotCShGRklfVFJBTVBPTElORV9DT1VOVCwgZmZpX3RyYW1wb2xpbmVfbG9jaywgZmZpX3RyYW1wb2xpbmVfdGFibGVzKQotCShmZmlfdHJhbXBvbGluZV90YWJsZV9hbGxvYywgZmZpX2Nsb3N1cmVfYWxsb2MsIGZmaV9jbG9zdXJlX2ZyZWUpOgotCURlZmluZSBmb3IgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSBjYXNlIChpT1MpLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEhhbmRsIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUgY2FzZQotCXNlcGFyYXRlbHkuCi0JKiBzcmMvYXJtL3N5c3YuUzogSGFuZGxlIEFwcGxlIGlPUyBob3N0LgotCSogc3JjL2Nsb3N1cmVzLmM6IEhhbmRsZSBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFIGNhc2UuCi0JKiBidWlsZC1pb3Muc2g6IE5ldyBmaWxlLgotCSogZmZpY29uZmlnLmguaW4sIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBSRUFETUU6IE1lbnRpb24gQVJNIGlPUy4KKyAgICBMaW51eC9wcGM2NDogUmVtb3ZlIGFzc3VtcHRpb24gb24gY29udGVudHMgb2YgcjExIGluIGNsb3N1cmUKIAotMjAxMS0wMi0wOCAgT3JlbiBIZWxkICA8b3JlbmhlQGlsLmlibS5jb20+Citjb21taXQgMWEwYjAxZTE3MWU5Yzc1MDQzN2NlZjJmMTg5MTdmNWE2ZTMyYzQ5OAorQXV0aG9yOiBQYXVsbyBQaXphcnJvIDxwYXVsby5waXphcnJvQGdtYWlsLmNvbT4KK0RhdGU6ICAgVGh1IEphbiAyIDE2OjE3OjU5IDIwMTQgLTAyMDAKIAotCSogc3JjL2RsbWFsbG9jLmMgKF9TVFJVQ1RfTUFMTElORk8pOiBEZWZpbmUgaW4gb3JkZXIgdG8gYXZvaWQKLQlyZWRlZmluaXRpb24gb2YgbWFsbGluZm8gb24gSFAtVVguCisgICAgV2hlbiB0aGUgZnVuY3Rpb24gY2FsbGVkIGJ5IHRoZSBmZmkgY2FsbGVkIGEgZnVuY3Rpb24gZGVmaW5lZCBpbiBhIHNoYXJlZCBsaWJyYXJ5IGdlbmVyYXRlIGEgZmF0YWwgZXJyb3IKKyAgICBUaGUgY29ycmVjdGlvbiB3YXMgdG8gdGFrZSBpbnRvIGNvbnNpZGVyYXRpb24gdGhlIEdPVC4KIAotMjAxMS0wMi0wOCAgR2lubiBDaGVuICA8Z2lubi5jaGVuQG9yYWNsZS5jb20+Citjb21taXQgM2RjM2YzMmMzNWRiNWFiOTk1YTgzNTIyNWY2ODE1MzY5NzM1Y2ViNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IERlYyA1IDE2OjIzOjI1IDIwMTMgLTA1MDAKIAotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfY2FsbCk6IE1ha2UgY29tcGF0aWJsZSB3aXRoIFNvbGFyaXMgU3R1ZGlvCi0JYWdncmVnYXRlIHJldHVybiBBQkkuICBGbHVzaCBjYWNoZS4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGbHVzaCBjYWNoZS4KKyAgICBVbmRvIGlPUyBBUk02NCBjaGFuZ2VzLgogCi0yMDExLTAyLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+Citjb21taXQgMzU2YjJjYmMzMDRiZmU1YmRjMjhiOGQxYzY4ZDFmZjA4NGU5ZWMzNworTWVyZ2U6IDQ4NGE3NTggMDczNDVhMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAyMjozODoxMyAyMDEzIC0wNTAwCiAKLQlGcm9tIFRvbSBIb25lcm1hbm4gPHRvbS5ob25lcm1hbm5Ab3JhY2xlLmNvbT46Ci0JKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfQUlYKTogU3VwcG9ydCBmb3IgeGxjIHRvb2xjaGFpbiBvbgotCUFJWC4gIERlY2xhcmUgLmZmaV9wcmVwX2FyZ3MuICBJbnNlcnQgbm9wcyBhZnRlciBicmFuY2gKLQlpbnN0cnVjdGlvbnMgc28gdGhhdCB0aGUgQUlYIGxpbmtlciBjYW4gaW5zZXJ0IFRPQyByZWxvYWQKLQlpbnN0cnVjdGlvbnMuCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBEZWNsYXJlIC5mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOLgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0yMDExLTAyLTA4ICBFZCAgPGVkQGtkdGMubmV0PgorY29tbWl0IDQ4NGE3NTg0MjYwZTJmYmIzOTljZTkwMDgzMDQ2ODM0MjcxYmY5ZmYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMjE6MDY6NTEgMjAxMyAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9hc20uaDogRml4IGdyYW1tYXIgbml0IGluIGNvbW1lbnQuCisgICAgTWVudGlvbiBBYXJjaDY0IG9uIGlPUwogCi0yMDExLTAyLTA4ICBVbGkgTGluayAgPHVsLm1jYW1hZmlhQGxpbmtpdHVwLmRlPgorY29tbWl0IDA3MzQ1YTMwZWMwYTJmYTQ1YTdjMzYzZDMwMWY1NzcyMzY5MGNmYTAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMjE6MDY6NTEgMjAxMyAtMDUwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfNjRfQklUX01BWCk6IERlZmluZSBhbmQgdXNlLgorICAgIE1lbnRpb24gQWFyY2g2NCBvbiBpT1MKIAotMjAxMS0wMi0wOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgZDRiOTMxYzFiODcyMzc4YzM1ZjEyZGRiYjlhNmQ1NWU3ZjE3YzY1ZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAyMDo1ODozMSAyMDEzIC0wNTAwCiAKLQlQUiBsaWJmZmkvNDY2NjEKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jIChtYWluKTogQ2FzdCB2b2lkICogdG8KLQl1aW50cHRyX3QgZmlyc3QuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYyAobWFpbik6IExpa2V3aXNlLgorICAgIFJlbW92ZSBidWlsZC1pb3MgZnJvbSBNYWtlZmlsZQogCi0yMDExLTAyLTA4ICBSYWZhZWwgQXZpbGEgZGUgRXNwaW5kb2xhICA8cmVzcGluZG9sYUBtb3ppbGxhLmNvbT4KK2NvbW1pdCBkZmJmMjM2ZDcwZmMxZWM2OGU2ZmYxOTM1ODRhMTU0MzUzNTA4ZTJmCitNZXJnZTogODUyYWMzYiBiYjk3NDBlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDIwOjU0OjU0IDIwMTMgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBGaXggeDg2IHRlc3QgZm9yIHBjIHJlbGF0ZWQgcmVsb2NzLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQorICAgIEFkZCBDaGFuZ2VMb2cgZW50cnkuCiAKLTIwMTEtMDItMDcgIEpvZWwgU2hlcnJpbGwgPGpvZWwuc2hlcnJpbGxAb2FyY29ycC5jb20+Citjb21taXQgYmI5NzQwZTU0NTIwNWY5M2E1MjVjNzdhYTZkMWNiZjRjYTkzNzFmMworTWVyZ2U6IGFjNzUzNjggNGQ3MDFlMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAxNzo1NDozOSAyMDEzIC0wODAwCiAKLQkqIGxpYmZmaS9zcmMvbTY4ay9mZmkuYzogQWRkIFJURU1TIHN1cHBvcnQgZm9yIGNhY2hlIGZsdXNoaW5nLgotCUhhbmRsZSBjYXNlIHdoZW4gQ1BVIHZhcmlhbnQgZG9lcyBub3QgaGF2ZSBsb25nIGRvdWJsZSBzdXBwb3J0LgotCSogbGliZmZpL3NyYy9tNjhrL3N5c3YuUzogQWRkIHN1cHBvcnQgZm9yIG1jNjgwMDAsIENvbGRmaXJlLAotCWFuZCBjb3JlcyB3aXRoIHNvZnQgZmxvYXRpbmcgcG9pbnQuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICM2MCBmcm9tIHp3YWxkb3dza2kvaW9zLXJlZG8KKyAgICAKKyAgICBNYWMvaU9TIHN1cHBvcnQsIGluY2x1ZGluZyBhYXJjaDY0IHBvcnQKIAotMjAxMS0wMi0wNyAgSm9lbCBTaGVycmlsbCA8am9lbC5zaGVycmlsbEBvYXJjb3JwLmNvbT4KK2NvbW1pdCA0ZDcwMWUwM2ZhYTQ3NWE1ZWIzYjU0YjkwMDQ2MTE0YTFlMjdiODEzCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAxMzoyNToyNyAyMDEzIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIG1pcHMqLSotcnRlbXMqIHN1cHBvcnQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogRW5zdXJlIG5lZWRlZCBjb25zdGFudHMgYXJlIGF2YWlsYWJsZQotCWZvciB0YXJnZXRzIHdoaWNoIGRvIG5vdCBoYXZlIHNnaWRlZnMuaC4KKyAgICBEYXJ3aW46IFByb3Blcmx5IGV4cG9ydCBoZWFkZXJzIGZyb20gWGNvZGUgcHJvamVjdAogCi0yMDExLTAxLTI2ICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KK2NvbW1pdCAwMjJmMTJlYjlhZDIyNjRlODM4ZmE1ZmI0NTM3MzNmNTE3Nzg4OGY0CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAxMjoyMTozOCAyMDEzIC0wNTAwCiAKLQlQUiB0YXJnZXQvNDAxMjUKLQkqIGNvbmZpZ3VyZS5hYyAoQU1fTFRMREZMQUdTKTogQWRkIC1iaW5kaXIgb3B0aW9uIGZvciB3aW5kb3dzIERMTHMuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRGFyd2luOiBGcmVzaGVuIGdlbiBzY3JpcHRzLCByZW1vdmUgb2xkIGJ1aWxkLWlvcy5zaAogCi0yMDEwLTEyLTE4ICBJYWluIFNhbmRvZSAgPGlhaW5zQGdjYy5nbnUub3JnPgorY29tbWl0IGU4MjBmZTIwMjVkN2FkM2RmNzU4NDQwNzk0NmRmYWFkMmFmNjk1OTkKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDEyOjAzOjUxIDIwMTMgLTA1MDAKIAotCVBSIGxpYmZmaS8yOTE1MgotCVBSIGxpYmZmaS80MjM3OAotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogUHJvdmlkZSBEYXJ3aW42NCBpbXBsZW1lbnRhdGlvbiwKLQl1cGRhdGUgY29tbWVudHMuCi0JKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoUE9XRVJQQ19EQVJXSU42NCk6IE5ldywKLQkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IFVwZGF0ZSBmb3IgRGFyd2luNjQuCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogUHJvdmlkZSBEYXJ3aW42NCBpbXBsZW1lbnRhdGlvbiwKLQl1cGRhdGUgY29tbWVudHMuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorICAgIERhcndpbi9pT1M6IEluY2x1ZGUgeDg2XzY0K2FhcmNoNjQgcGllY2VzIGluIGxpYnJhcnkKIAotMjAxMC0xMi0wNiAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgMDI3ODI4NGU0NzBlYzkxZGI3Y2RjMTVhYzNkY2Q2NDY4MzMwNTg0OAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDM6MDM6MzcgMjAxMyAtMDUwMAogCi0JKiBjb25maWd1cmUuYWMgKGxpYmZmaV9jdl9hc19hc2NpaV9wc2V1ZG9fb3ApOiBVc2UgZG91YmxlCi0JYmFja3NsYXNoZXMuCi0JKGxpYmZmaV9jdl9hc19zdHJpbmdfcHNldWRvX29wKTogTGlrZXdpc2UuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRGFyd2luL2FhcmNoNjQ6IHNpemVfdCBhc3N1bXB0aW9ucwogCi0yMDEwLTEyLTAzICBDaHVuZy1MaW4gVGFuZyAgPGNsdGFuZ0Bjb2Rlc291cmNlcnkuY29tPgorY29tbWl0IDk3NzU0NDZiNjQ0MWM5MWNkOTA1OTIxNWMxMDZhYTNiY2Y5NDk3NjcKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAyOjM5OjM0IDIwMTMgLTA1MDAKIAotCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBBZGQgVU5XSU5EIHRvIC5wYWQgZGlyZWN0aXZlLgotCShmZmlfY2xvc3VyZV9WRlApOiBTYW1lLgotCShmZmlfY2FsbF9WRlApOiBNb3ZlIGRvd24gdG8gYmVmb3JlIGZmaV9jbG9zdXJlX1ZGUC4gQWRkICcuZnB1IHZmcCcKLQlkaXJlY3RpdmUuCisgICAgRGFyd2luL2FhcmNoNjQ6IEZpeCDigJxzaGFkb3dzIGRlY2xhcmF0aW9u4oCdIHdhcm5pbmdzCiAKLTIwMTAtMTItMDEgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDQyNjBiYWRjMzc3MDVkMzYxOGU3NzRkZmU2MTE4NGFjNzA5ODgxYzEKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAyOjA4OjE0IDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCBbX19zZ2ldIChQUklkNjQsIFBSSXU2NCk6IERlZmluZS4KLQkoUFJJdVBUUik6IERlZmluZS4KKyAgICBEYXJ3aW4vYWFyY2g2NDogVXNlIENsYW5nIGNhY2hlIGludmFsaWRhdGlvbiBidWlsdGluCiAKLTIwMTAtMTEtMjkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Ci0JICAgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorY29tbWl0IDlmYTc5OThkNWY5MjUwOTA4Y2JmMTJhNjcxNDc5ODUyZWJhZGY5ZDEKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAyOjA3OjQ4IDIwMTMgLTA1MDAKIAotCSogc3JjL3g4Ni9zeXN2LlMgKEZERV9FTkNPRElORywgRkRFX0VOQ09ERSk6IERlZmluZS4KLQkoLmVoX2ZyYW1lKTogVXNlIEZERV9FTkNPRElORy4KLQkoLkxBU0ZERTEsIC5MQVNGREUyLCBMQVNGREUzKTogU2ltcGxpZnkgd2l0aCBGREVfRU5DT0RFLgorICAgIERhcndpbi9hYXJjaDY0OiBJbmhpYml0IFhjb2RlIHdhcm5pbmcKIAotMjAxMC0xMS0yMiAgSmFjZWsgQ2FiYW4gPGphY2VrQGNvZGV3ZWF2ZXJzLmNvbT4KK2NvbW1pdCAwZTgzMjA0OGE5MzgzMDU3NWIwOTc2NDA2NDQ0ZTEzNGU2NDlhNGY3CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMjowNzozNCAyMDEzIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIHN5bWJvbCB1bmRlcnNjb3JlcyBvbiBtaW5ndy13NjQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBzcmMveDg2L3dpbjY0LlM6IENvcnJlY3RseSBhY2Nlc3MgZXh0ZXJuIHN5bWJvbHMgaW4gcmVzcGVjdCB0bwotCXVuZGVyc2NvcmVzLgorICAgIERhcndpbi9hYXJjaDY0OiBkb3VibGUgPT0gbG9uZyBkb3VibGUKIAotMjAxMC0xMS0xNSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgNjAyZGMyMmQ3NjkzMTA5MjYxMDIzNGNmMDYzZjlmMWI4ZGJjMWE1MQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDI6MDY6MDAgMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFJlbmFtZSAuLi4KLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLmV4cDogLi4uIHRvIHRoaXMuCi0JKiBsaWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBEb24ndCBsb2FkIGxpYmZmaS1kZy5leHAuCi0JKiBsaWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBMaWtld2lzZS4KKyAgICBEYXJ3aW4vaU9TIHByZXAgc2NyaXB0OiB0cnkgYW5kIGNvbXBpbGUgZm9yIGFybTY0CiAKLTIwMTAtMTAtMjggIENodW5nLUxpbiBUYW5nICA8Y2x0YW5nQGNvZGVzb3VyY2VyeS5jb20+Citjb21taXQgYjUxM2RmZTc5ZGU0NzI1ZThhNzE3MzI1YTllM2I1YjlmNjlmNjNkYworQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDI6MDU6MjIgMjAxMyAtMDUwMAogCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogQWRkIFZGUCByZWdpc3RlciBhcmd1bWVudCBoYW5kbGluZwotCWNvZGUsIG5ldyBwYXJhbWV0ZXIsIGFuZCByZXR1cm4gdmFsdWUuIFVwZGF0ZSBjb21tZW50cy4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgY2FzZSBmb3IgVkZQIHN0cnVjdCByZXR1cm4gdmFsdWVzLiBBZGQKLQljYWxsIHRvIGxheW91dF92ZnBfYXJncygpLgotCShmZmlfY2FsbF9TWVNWKTogVXBkYXRlIGRlY2xhcmF0aW9uLgotCShmZmlfY2FsbF9WRlApOiBOZXcgZGVjbGFyYXRpb24uCi0JKGZmaV9jYWxsKTogQWRkIFZGUCBzdHJ1Y3QgcmV0dXJuIGNvbmRpdGlvbnMuIENhbGwgZmZpX2NhbGxfVkZQKCkKLQl3aGVuIEFCSSBpcyBGRklfVkZQLgotCShmZmlfY2xvc3VyZV9WRlApOiBOZXcgZGVjbGFyYXRpb24uCi0JKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpOiBBZGQgbmV3IHZmcF9hcmdzIHBhcmFtZXRlciwgdXBkYXRlIGNhbGwgdG8KLQlmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YoKS4KLQkoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogVXBkYXRlIHBhcmFtZXRlcnMuIEFkZCBWRlAgYXJndW1lbnQKLQljYXNlIGhhbmRsaW5nLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFBhc3MgZmZpX2Nsb3N1cmVfVkZQIHRvIHRyYW1wb2xpbmUKLQljb25zdHJ1Y3Rpb24gdW5kZXIgVkZQIGhhcmQtZmxvYXQuCi0JKHJlY192ZnBfdHlwZV9wKTogTmV3IGZ1bmN0aW9uLgotCSh2ZnBfdHlwZV9wKTogU2FtZS4KLQkocGxhY2VfdmZwX2FyZyk6IFNhbWUuCi0JKGxheW91dF92ZnBfYXJncyk6IFNhbWUuCi0JKiBzcmMvYXJtL2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQWRkIEZGSV9WRlAuIERlZmluZSBGRklfREVGQVVMVF9BQkkKLQliYXNlZCBvbiBfX0FSTV9QQ1NfVkZQLgotCShGRklfRVhUUkFfQ0lGX0ZJRUxEUyk6IERlZmluZSBmb3IgYWRkaW5nIFZGUCBoYXJkLWZsb2F0IHNwZWNpZmljCi0JZmllbGRzLgotCShGRklfVFlQRV9TVFJVQ1RfVkZQX0ZMT0FUKTogRGVmaW5lIGludGVybmFsbHkgdXNlZCB0eXBlIGNvZGUuCi0JKEZGSV9UWVBFX1NUUlVDVF9WRlBfRE9VQkxFKTogU2FtZS4KLQkqIHNyYy9hcm0vc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogQ2hhbmdlIGNhbGwgb2YgZmZpX3ByZXBfYXJncygpIHRvCi0JZGlyZWN0IGNhbGwuIE1vdmUgZnVuY3Rpb24gcG9pbnRlciBsb2FkIHVwd2FyZHMuCi0JKGZmaV9jYWxsX1ZGUCk6IE5ldyBmdW5jdGlvbi4KLQkoZmZpX2Nsb3N1cmVfVkZQKTogU2FtZS4KKyAgICBEYXJ3aW4vYWFyY2g2NDogUmVzdHJpY3QgLnNpemUgdG8gRUxGIGxpa2UgYXJtMzIuCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAoY2hlY2stZmxhZ3MpOiBOZXcgZnVuY3Rpb24uCi0JKGRnLXNraXAtaWYpOiBOZXcgZnVuY3Rpb24uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jOiBTa2lwIGlmIHRhcmdldCBpcyBhcm0qLSotKgotCWFuZCBjb21waWxlciBvcHRpb25zIGluY2x1ZGUgLW1mbG9hdC1hYmk9aGFyZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBTYW1lLgorY29tbWl0IGJjOTc4MDk5YmYyODEyZGU3NTVjMDc2YjY3ZWY5YzI1NDc2MDc1NzIKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDAyOjA0OjU3IDIwMTMgLTA1MDAKIAotMjAxMC0xMC0wMSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgRGFyd2luL2FhcmNoNjQ6IFBvdGVudGlhbGx5KD8pIGZpeCBjb21waWxlIGVycm9yCiAKLQlQUiBsaWJmZmkvNDU2NzcKLQkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBFbnN1cmUgY2lmLT5ieXRlcyBpcwotCWEgbXVsdGlwbGUgb2YgOC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Mi5jOiBOZXcgdGVzdC4KK2NvbW1pdCBkNmJiOTMxNDQ2N2M2ZTA2ODMxNTY1NTlkMjNjYTM0MWM0M2ZhM2M4CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMjowNDoyMiAyMDEzIC0wNTAwCiAKLTIwMTAtMDgtMjAgIE1hcmsgV2llbGFhcmQgIDxtandAcmVkaGF0LmNvbT4KKyAgICBEYXJ3aW4vYWFyY2g2NDogVXNlIENOQU1FIHJlZnMKIAotCSogc3JjL2Nsb3N1cmVzLmMgKG9wZW5fdGVtcF9leGVjX2ZpbGVfbW50KTogQ2hlY2sgaWYgZ2V0bW50ZW50X3IKLQlyZXR1cm5zIE5VTEwuCitjb21taXQgMzNjNDZjZTU2ODBlZWEyOGQzNDM3Yzg3NzFlYzFkMTM3ZTIyNmI0NQorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDQ6MTM6NDIgMjAxMyAtMDUwMAogCi0yMDEwLTA4LTA5ICBBbmRyZWFzIFRvYmxlciAgPGFuZHJlYXN0QGZnem5ldC5jaD4KKyAgICBEYXJ3aW4vTWFjOiBGaXggNjQvMzIgc2hvcnRlbmluZyB3YXJuaW5ncwogCi0JKiBjb25maWd1cmUuYWM6IEFkZCB0YXJnZXQgcG93ZXJwYzY0LSotZnJlZWJzZCouCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYzogUGFzcwotCS1tbG9uZy1kb3VibGUtMTI4IG9ubHkgdG8gbGludXggdGFyZ2V0cy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogTGlrZXdpc2UuCitjb21taXQgMDYxMjA4MWU2YzE2MWQ5ZDgyMDc0MmY5OTU5NzVkMzVkYTJhZGJjMgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDM6MDM6MDAgMjAxMyAtMDUwMAogCi0yMDEwLTA4LTA1ICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisgICAgRGFyd2luOiBNaXNjIHNpemVfdCB3YXJuaW5ncwogCi0gICAgICAgICogTWFrZWZpbGUuYW06IFBhc3MgRkZJX0RFQlVHIGRlZmluZSB0byBtc3ZjYy5zaCBmb3IgbGlua2luZyB0byB0aGUKLSAgICAgICAgZGVidWcgQ1JUIHdoZW4gLS1lbmFibGUtZGVidWcgaXMgZ2l2ZW4uCi0gICAgICAgICogY29uZmlndXJlLmFjOiBEZWZpbmUgaXQuCi0gICAgICAgICogbXN2Y2Muc2g6IFRyYW5zbGF0ZSAtZyBhbmQgLURGRklfREVCVUcgYXBwcm9wcmlhdGVseS4KK2NvbW1pdCA2YTYyNDdkMTc5ZWMzODU5MzExYzJkODc3NTg0MWI4ODRmMzA5ZjY2CitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMjo1NTo0OCAyMDEzIC0wNTAwCiAKLTIwMTAtMDgtMDQgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKyAgICBEYXJ3aW46IEZpeCBkbG1hbGxvYyB3YXJuaW5ncyBkdWUgdG8gc2l6ZW9mKHNpemVfdCkKIAotCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogQWRkIFg4Nl9BTlkgZGVmaW5lIGZvciBhbGwgeDg2L3g4Nl82NAotCXBsYXRmb3Jtcy4KLQkqIHNyYy94ODYvZmZpLmM6IFJlbW92ZSByZWR1bmRhbnQgaWZkZWYgY2hlY2tzLgotCSogc3JjL3ByZXBfY2lmLmM6IFB1c2ggc3RhY2sgc3BhY2UgY29tcHV0YXRpb24gaW50byBzcmMveDg2L2ZmaS5jCi0JZm9yIFg4Nl9BTlkgc28gcmV0dXJuIHZhbHVlIHNwYWNlIGRvZXNuJ3QgZ2V0IGFkZGVkIHR3aWNlLgorY29tbWl0IDRkNjBkOWUxZTMyZGU2MTY2ZmZkNjNiYmU5Y2U1NGNmOTYxYzc4ZmMKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDMwIDA0OjA5OjMwIDIwMTMgLTA1MDAKIAotMjAxMC0wOC0wMyAgTmVpbCBSYXNoYnJvb2tlIDxuZWlsQHBhcmt3YXljYy5jby51az4KKyAgICBEYXJ3aW46IFJlYnVpbGQgWGNvZGUgcHJvamVjdAogCi0JKiBtc3ZjYy5zaDogRG9uJ3QgcGFzcyAtc2FmZXNlaCB0byBtbDY0IGJlY2F1c2UgYmVoYXZpb3IgaXMgYnVnZ3kuCitjb21taXQgY2I3MTlhNWMxYzJlYjM5MWQ2YTVmNWUwMjQ4NGJhNGFhOTkwYTUxYgorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDQ6MDk6MTggMjAxMyAtMDUwMAogCi0yMDEwLTA3LTIyICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisgICAgRGFyd2luL2lPUzogRml4IExMVk0gMy4zIHdhcm5pbmcgcmU6IG1lbWNweS4KIAotCSogc3JjLyovZmZpdGFyZ2V0Lmg6IE1ha2UgRkZJX0xBU1RfQUJJIG9uZSBwYXN0IHRoZSBsYXN0IHZhbGlkIEFCSS4KLQkqIHNyYy9wcmVwX2NpZi5jOiBGaXggQUJJIGFzc2VydGlvbi4KLSAgICAgICAgKiBzcmMvY3Jpcy9mZmkuYzogRGl0dG8uCitjb21taXQgMjFiZGU5MmM5YWJiMzc4ZjljNDU2YTlkOTVlNmY5Yjk5ZWY4YzkyMAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMzAgMDM6NDM6NDIgMjAxMyAtMDUwMAogCi0yMDEwLTA3LTEwICBFdmFuIFBob2VuaXggIDxldmFuQGZhbGxpbmdzbm93Lm5ldD4KKyAgICBEYXJ3aW46IENsZWFuIHVwLCBtb2Rlcm5pemUgZ2VuZXJhdG9yIHNjcmlwdHMKIAotCSogc3JjL2Nsb3N1cmVzLmMgKHNlbGludXhfZW5hYmxlZF9jaGVjayk6IEZpeCBzdHJuY21wIHVzYWdlIGJ1Zy4KK2NvbW1pdCBmZDU0ZWFiNzRjZWY3ODkxZTRhY2FhYWZiNzFlNzgzMTQyZWNiNjllCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAzMCAwMzozODowMiAyMDEzIC0wNTAwCiAKLTIwMTAtMDctMDcgIERhbiBIb3LDoWsgPGRhbkBkYW5ueS5jej4KKyAgICBEYXJ3aW4vTWFjOiBBbHNvIGV4Y2x1ZGUgT1MgWCBnZW5lcmF0ZWQgc291cmNlCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IFByb3RlY3QgI2RlZmluZSB3aXRoICNpZm5kZWYuCi0JKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogRGl0dG8uCi0JKiBzcmMvczM5MC9mZml0YXJnZXQuaDogRGl0dG8uCi0JKiBzcmMvc3BhcmMvZmZpdGFyZ2V0Lmg6IERpdHRvLgorY29tbWl0IDk1M2I2ZjE0YzY1NTE0MWY5ZTdkODI1NTBhMzEyYzNlZWI5NjEwOTEKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBUdWUgQXByIDI0IDExOjE2OjIwIDIwMTIgLTA0MDAKIAotMjAxMC0wNy0wNyAgIE5laWwgUm9iZXJ0cyA8bmVpbEBsaW51eC5pbnRlbC5jb20+CisgICAgRGFyd2luL2lPUzogTW9yZSB1bmlmaWVkIHN5bnRheCBzdXBwb3J0IHcvIENsYW5nLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KIAotCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciB0bwotCTE2LWJ5dGVzLgorY29tbWl0IGM3MTNhNTUzNzk0ODFjMzM5ODc3ZjJlMDAwM2Q5N2NiOGQ5ZWQ4MGUKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBUdWUgQXByIDI0IDEwOjI1OjI5IDIwMTIgLTA0MDAKIAotMjAxMC0wNy0wMiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgRGFyd2luL2lPUzogU2ltcGxpZnkgUkVUTERNIGFyZ3VtZW50cyBmb3IgTExWTSAzLjEKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CiAKLQkqIE1ha2VmaWxlLmFtIChBTV9NQUtFRkxBR1MpOiBQYXNzIGFsc28gbWFuZGlyIHRvIHN1Ym1ha2VzLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorY29tbWl0IDE2YmExYjgwMDI4ZGI1Y2I3MWNmODZlNWY3OWY1ZTQ4MzE3ZjgzYzgKK0F1dGhvcjogWmFjaGFyeSBXYWxkb3dza2kgPHp3YWxkb3dza2lAZ21haWwuY29tPgorRGF0ZTogICBXZWQgQXByIDExIDIzOjI2OjA0IDIwMTIgLTA0MDAKIAotMjAxMC0wNS0xOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisgICAgRGFyd2luOiBTaWxlbmNlIENsYW5nIHdhcm5pbmdzLgogCi0JKiBjb25maWd1cmUuYWMgKGxpYmZmaV9jdl9hc194ODZfcGNyZWwpOiBDaGVjayBmb3IgaWxsZWdhbCBpbiBhcwotCW91dHB1dCwgdG9vLgotCShsaWJmZmlfY3ZfYXNfYXNjaWlfcHNldWRvX29wKTogQ2hlY2sgZm9yIC5hc2NpaS4KLQkobGliZmZpX2N2X2FzX3N0cmluZ19wc2V1ZG9fb3ApOiBDaGVjayBmb3IgLnN0cmluZy4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgotCSogc3JjL3g4Ni9zeXN2LlMgKC5laF9mcmFtZSk6IFVzZSAuYXNjaWksIC5zdHJpbmcgb3IgZXJyb3IuCitjb21taXQgODUyYWMzYmQzMDJkNmVkOTdiMWVmNjVmNGNiZWQ2OWMyNThhNDhkZgorTWVyZ2U6IGFiNzlkNmUgYWM3NTM2OAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IE5vdiAyMSAyMToyNTo0NCAyMDEzIC0wNTAwCiAKLTIwMTAtMDUtMTEgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCUNoYW5nZUxvZwogCi0JKiBkb2MvbGliZmZpLnRleDogRG9jdW1lbnQgcHJldmlvdXMgY2hhbmdlLgorY29tbWl0IGFiNzlkNmUyMTk5MmRkODYxMzliYTA3NTMwZmY4ODg4MzNiNzhhMDQKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgVGh1IE5vdiAyMSAwNjoxMjozNSAyMDEzIC0wNTAwCiAKLTIwMTAtMDUtMTEgIE1ha290byBLYXRvIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4KKyAgICBUaGlzIHNlcGFyYXRlcyB0aGUgMzItYml0IHN5c3YvbGludXgvYnNkIGNvZGUgZnJvbSB0aGUgNjQtYml0IGxpbnV4CisgICAgY29kZSwgYW5kIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGxpbmsgY29kZSBjb21waWxlZCB3aXRoIGRpZmZlcmVudAorICAgIG9wdGlvbnMgdG8gdGhvc2UgdXNlZCB0byBjb21waWxlIGxpYmZmaS4gIEZvciBleGFtcGxlLCBhCisgICAgLW1sb25nLWRvdWJsZS0xMjggbGliZmZpIGNhbiBiZSB1c2VkIHdpdGggLW1sb25nLWRvdWJsZS02NCBjb2RlLgorICAgIAorICAgIFVzaW5nIHRoZSByZXR1cm4gdmFsdWUgYXJlYSBhcyBhIHBsYWNlIHRvIHBhc3MgcGFyYW1ldGVycyB3YXNuJ3Qgc3VjaAorICAgIGEgZ29vZCBpZGVhLCBjYXVzaW5nIGEgZmFpbHVyZSBvZiBjbHNfdWxvbmdsb25nLmMuICBJIGRpZG4ndCBzZWUgdGhpcworICAgIHdoZW4gcnVubmluZyB0aGUgbWFpbmxpbmUgZ2NjIGxpYmZmaSB0ZXN0c3VpdGUgYmVjYXVzZSB0aGF0IHZlcnNpb24gb2YKKyAgICB0aGUgdGVzdCBpcyBpbmZlcmlvciB0byB0aGUgdXBzdHJlYW1tIGxpYmZmaSB0ZXN0LgorICAgIAorICAgIFVzaW5nIE5VTV9GUFJfQVJHX1JFR0lTVEVSUyByYXRoZXIgdGhhbiBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCBtZWFudAorICAgIHRoYXQgYSBwYXJhbWV0ZXIgc2F2ZSBhcmVhIGNvdWxkIGJlIGFsbG9jYXRlZCBiZWZvcmUgaXQgd2FzIHN0cmljdGx5CisgICAgbmVjZXNzYXJ5LiAgV3JvbmcgYnV0IGhhcm1sZXNzLiAgRm91bmQgd2hlbiBzcGxpdHRpbmcgYXBhcnQgZmZpLmMKKyAgICBpbnRvIDMyLWJpdCBhbmQgNjQtYml0IHN1cHBvcnQuCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9jYWxsKTogRG9uJ3QgY29weSBzdHJ1Y3RzIHBhc3NlZCBieSB2YWx1ZS4KK2NvbW1pdCBhYzc1MzY4ODkzMzRkNGJlNTA3MDkwMDZkN2UyMzUzNjM2NGQ3ODkxCitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIFRodSBOb3YgMjEgMDY6MTI6MzUgMjAxMyAtMDUwMAogCi0yMDEwLTA1LTA1ICBNaWNoYWVsIEtvaGxlciA8bWljaGFlbGtvaGxlckBsaXZlLmNvbT4KKyAgICBUaGlzIHNlcGFyYXRlcyB0aGUgMzItYml0IHN5c3YvbGludXgvYnNkIGNvZGUgZnJvbSB0aGUgNjQtYml0IGxpbnV4CisgICAgY29kZSwgYW5kIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGxpbmsgY29kZSBjb21waWxlZCB3aXRoIGRpZmZlcmVudAorICAgIG9wdGlvbnMgdG8gdGhvc2UgdXNlZCB0byBjb21waWxlIGxpYmZmaS4gIEZvciBleGFtcGxlLCBhCisgICAgLW1sb25nLWRvdWJsZS0xMjggbGliZmZpIGNhbiBiZSB1c2VkIHdpdGggLW1sb25nLWRvdWJsZS02NCBjb2RlLgorICAgIAorICAgIFVzaW5nIHRoZSByZXR1cm4gdmFsdWUgYXJlYSBhcyBhIHBsYWNlIHRvIHBhc3MgcGFyYW1ldGVycyB3YXNuJ3Qgc3VjaAorICAgIGEgZ29vZCBpZGVhLCBjYXVzaW5nIGEgZmFpbHVyZSBvZiBjbHNfdWxvbmdsb25nLmMuICBJIGRpZG4ndCBzZWUgdGhpcworICAgIHdoZW4gcnVubmluZyB0aGUgbWFpbmxpbmUgZ2NjIGxpYmZmaSB0ZXN0c3VpdGUgYmVjYXVzZSB0aGF0IHZlcnNpb24gb2YKKyAgICB0aGUgdGVzdCBpcyBpbmZlcmlvciB0byB0aGUgdXBzdHJlYW1tIGxpYmZmaSB0ZXN0LgorICAgIAorICAgIFVzaW5nIE5VTV9GUFJfQVJHX1JFR0lTVEVSUyByYXRoZXIgdGhhbiBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCBtZWFudAorICAgIHRoYXQgYSBwYXJhbWV0ZXIgc2F2ZSBhcmVhIGNvdWxkIGJlIGFsbG9jYXRlZCBiZWZvcmUgaXQgd2FzIHN0cmljdGx5CisgICAgbmVjZXNzYXJ5LiAgV3JvbmcgYnV0IGhhcm1sZXNzLiAgRm91bmQgd2hlbiBzcGxpdHRpbmcgYXBhcnQgZmZpLmMKKyAgICBpbnRvIDMyLWJpdCBhbmQgNjQtYml0IHN1cHBvcnQuCiAKLQkqIHNyYy9kbG1hbGxvYy5jIChkbGZyZWUpOiBGaXggc3BlbGxpbmcuCi0JKiBzcmMvaWE2NC9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEaXR0by4KLQkqIGNvbmZpZ3VyZS5hYzogRGl0dG8uCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgNjlkZjkxY2ZiNGZhNmJjYjY0NDM1MGE4MGJmZjk3MGYyNzQ3OGE2YQorTWVyZ2U6IDJmNDUwODIgYWExZjYyYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE5vdiAxOCAwNjozNDowNCAyMDEzIC0wODAwCiAKLTIwMTAtMDQtMTMgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzU5IGZyb20gaWFpbnMvcG93ZXJwYy1kYXJ3aW4tdW53aW5kLWZpeAorICAgIAorICAgIEZpeCBQb3dlclBDIERhcndpbiBGREUgZW5jb2RpbmdzIHRvIHVzZSBwY3JlbCBjb3JyZWN0bHkuICBNb2Rlcm5pc2UgdGhlIHBpY2Jhc2UgbGFiZWxzLgogCi0JKiBtc3ZjYy5zaDogQnVpbGQgd2l0aCAtVzMgaW5zdGVhZCBvZiAtV2FsbC4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogUmVtb3ZlIGJ1aWxkIHdhcm5pbmdzLgotCSogc3JjL3g4Ni9mZmkuYzogRGl0dG8uCi0JKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBEaXR0by4KK2NvbW1pdCBhYTFmNjJjMGEwOTNjMzAzMjVkZmYxZDRkMmI2YjRiMjJlYjk2OTI5CitBdXRob3I6IElhaW4gU2FuZG9lIDxpYWluQGNvZGVzb3VyY2VyeS5jb20+CitEYXRlOiAgIE1vbiBOb3YgMTggMTM6MTE6NTYgMjAxMyArMDAwMAogCi0yMDEwLTA0LTEyICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+Ci0JICAgIFdhbHRlciBNZWlubCA8d3Vub0Bsc3Z3LmRlPgorICAgIEZpeCBQb3dlclBDIERhcndpbiBGREUgZW5jb2RpbmdzIHRvIHVzZSBwY3JlbCBjb3JyZWN0bHkuICBNb2Rlcm5pc2UgdGhlIHBpY2Jhc2UgbGFiZWxzLgogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBPUy8yIHN1cHBvcnQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBzcmMvY2xvc3VyZXMuYzogRGl0dG8uCi0JKiBzcmMvZGxtYWxsb2MuYzogRGl0dG8uCi0JKiBzcmMveDg2L3dpbjMyLlM6IERpdHRvLgorY29tbWl0IDJmNDUwODIyYTg2OThiYTg4NDQxYzU2ZDE1MmM3ZGM4OTI0YjEyN2YKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBOb3YgMTggMDY6NTI6MjkgMjAxMyAtMDUwMAogCi0yMDEwLTA0LTA3ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICBDbGVhbiB1cCBjb2RlIHRvIGFwcGVhc2UgbW9kZXJuIEdDQyBjb21waWxlci4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IFJlbW92ZSB1bnVzZWQgYXJncyB2YXJpYWJsZS4KK2NvbW1pdCAxNmQ1NmM1MWFkZWQzNzQ3MzA5MjBhNGFjZGU3NmZmM2QyODYwYWUxCitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIE1vbiBOb3YgMTggMDY6MzY6MDMgMjAxMyAtMDUwMAogCi0yMDEwLTA0LTAyICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorICAgIEFuICNlbmRpZiBpbiB0aGUgd3JvbmcgcGxhY2Ugd291bGQgY2F1c2UgY29tcGlsZSBmYWlsdXJlIG9uIHBvd2VycGNsZS4KKyAgICBVc2luZyBibCBpbnN0ZWFkIG9mIGIgZG9lc24ndCBjYXVzZSBydW50aW1lIGZhaWx1cmVzIGFzIHlvdSBtaWdodCB0aGluaywKKyAgICBidXQgZG9lcyBtZXNzIHRoZSBwcm9jZXNzb3IgYnJhbmNoIHByZWRpY3Rpb24uCiAKLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBtYW4vTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCitjb21taXQgMzRmODc4YTVlZjI4NjYzZjZiMWQ3ZmQyNmZiMDk5NDI5ZWExNTc5ZQorTWVyZ2U6IDgzZjY1YjYgMWZkMDQ1NworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxNiAwNjo1Nzo1NCAyMDEzIC0wNTAwCiAKLTIwMTAtMDMtMzAgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCUNoYW5nZUxvZworICAgIAlzcmMvcG93ZXJwYy9mZmkuYwogCi0JKiBtc3ZjYy5zaDogRGlzYWJsZSBidWlsZCB3YXJuaW5ncy4KLQkqIFJFQURNRSAodGVzdGVkKTogQ2xhcmlmeSB3aW5kb3dzIGJ1aWxkIHByb2NlZHVyZS4KK2NvbW1pdCA4M2Y2NWI2M2Q5NzY0YTljYzc2ODhmYzVjZGE1ZWUyYmQyM2ZhZjU0CitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTYgMDY6NTM6NTAgMjAxMyAtMDUwMAogCi0yMDEwLTAzLTE1ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBGaW5hbGx5LCB0aGlzIGFkZHMgX0NBTExfRUxGID09IDIgc3VwcG9ydC4gIEVMRnYxIG9iamVjdHMgY2FuJ3QgYmUKKyAgICBsaW5rZWQgd2l0aCBFTEZ2MiBvYmplY3RzLCBzbyB0aGlzIGlzIG9uZSBjYXNlIHdoZXJlIHByZXByb2Nlc3NvcgorICAgIHRlc3RzIGluIGZmaS5jIGFyZSBmaW5lLiAgQWxzbywgdGhlcmUgaXMgbm8gbmVlZCB0byBkZWZpbmUgYSBuZXcKKyAgICBGRklfRUxGdjIgb3Igc29tZXN1Y2ggdmFsdWUgaW4gZW51bSBmZmlfYWJpLiAgRkZJX0xJTlVYNjQgd2lsbCBoYXBwaWx5CisgICAgc2VydmUgYm90aCBBQklzLgogCi0JKiBjb25maWd1cmUuYWMgKGxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZSk6IE5ldyB0ZXN0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCi0JKiBsaWJmZmkvc3JjL3g4Ni91bml4NjQuUyAoLmVoX2ZyYW1lKQotCVtIQVZFX0FTX1g4Nl82NF9VTldJTkRfU0VDVElPTl9UWVBFXTogVXNlIEB1bndpbmQgc2VjdGlvbiB0eXBlLgorY29tbWl0IDFmZDA0NTc4NGNhYzg3NGI1ZDc2YjdmYTkzMWY2NzIwOWE4MjgwZDMKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxNiAwNjo1Mzo1MCAyMDEzIC0wNTAwCiAKLTIwMTAtMDMtMTQgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorICAgIEZpbmFsbHksIHRoaXMgYWRkcyBfQ0FMTF9FTEYgPT0gMiBzdXBwb3J0LiAgRUxGdjEgb2JqZWN0cyBjYW4ndCBiZQorICAgIGxpbmtlZCB3aXRoIEVMRnYyIG9iamVjdHMsIHNvIHRoaXMgaXMgb25lIGNhc2Ugd2hlcmUgcHJlcHJvY2Vzc29yCisgICAgdGVzdHMgaW4gZmZpLmMgYXJlIGZpbmUuICBBbHNvLCB0aGVyZSBpcyBubyBuZWVkIHRvIGRlZmluZSBhIG5ldworICAgIEZGSV9FTEZ2MiBvciBzb21lc3VjaCB2YWx1ZSBpbiBlbnVtIGZmaV9hYmkuICBGRklfTElOVVg2NCB3aWxsIGhhcHBpbHkKKyAgICBzZXJ2ZSBib3RoIEFCSXMuCiAKLQkqIHNyYy94ODYvZmZpNjQuYzogRml4IHR5cG8gaW4gY29tbWVudC4KLQkqIHNyYy94ODYvZmZpLmM6IFVzZSAvKiAuLi4gKi8gY29tbWVudCBzdHlsZS4KK2NvbW1pdCAzNjI4NTEzNzlhNDljZTA3ZDNlMzZlODJjNGU1YzdiNmNjMTZhMzUyCitBdXRob3I6IEFsYW4gTW9kcmEgPGFtb2RyYUBnbWFpbC5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTYgMDY6NTI6NDMgMjAxMyAtMDUwMAogCi0yMDEwLTAyLTI0ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBBbmRyZWFzJyAyMDEzLTAyLTA4IGNoYW5nZSByZXZlcnRlZCBzb21lIGJyZWFrYWdlIGZvciBzdHJ1Y3QgcmV0dXJuCisgICAgdmFsdWVzIGZyb20gMjAxMS0xMS0xMiwgYnV0IGluIHNvIGRvaW5nIHJlaW50cm9kdWNlZCBzdHJpbmcKKyAgICBpbnN0cnVjdGlvbnMgdG8gc3lzdi5TIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHBvd2VycGMgdmFyaWFudHMuCisgICAgVGhpcyBwYXRjaCBwcm9wZXJseSBjb3BpZXMgdGhlIGJvdW5jZSBidWZmZXIgdG8gZGVzdGluYXRpb24gaW4gQyBjb2RlCisgICAgcmF0aGVyIHRoYW4gaW4gYXNtLgorICAgIAorICAgIEkgaGF2ZSB0ZXN0ZWQgdGhpcyBvbiBwb3dlcnBjNjQtbGludXgsIHBvd2VycGMtbGludXggYW5kCisgICAgcG93ZXJwYy1mcmVlYnNkLiAgV2VsbCwgdGhlIGxhc3Qgb24gcG93ZXJwYy1saW51eCBieSBseWluZyB0bworICAgIGNvbmZpZ3VyZSB3aXRoCisgICAgCisgICAgQ0M9ImdjYyAtbTMyIC1tc3ZyNC1zdHJ1Y3QtcmV0dXJuIC1tbG9uZy1kb3VibGUtNjQiIFwKKyAgICBDWFg9ImcrKyAtbTMyIC1tc3ZyNC1zdHJ1Y3QtcmV0dXJuIC1tbG9uZy1kb3VibGUtNjQiIFwKKyAgICAvc3JjL2xpYmZmaS1jdXJyZW50L2NvbmZpZ3VyZSAtLWJ1aWxkPXBvd2VycGMtZnJlZWJzZAorICAgIAorICAgIGFuZCB0aGVuCisgICAgCisgICAgbWFrZSAmJiBtYWtlIENDPSJnY2MgLW0zMiIgQ1hYPSJnKysgLW0zMiIgXAorICAgIFJVTlRFU1RGTEFHUz0tLXRhcmdldF9ib2FyZD11bml4Ly1tMzIvLW1zdnI0LXN0cnVjdC1yZXR1cm4vLW1sb25nLWRvdWJsZS02NFwKKyAgICAgY2hlY2sKIAotCSogZG9jL2xpYmZmaS50ZXhpIChUaGUgQ2xvc3VyZSBBUEkpOiBGaXggdHlwby4KLQkqIGRvYy9saWJmZmkuaW5mbzogUmVtb3ZlLgorY29tbWl0IDFjMDY1MTVkOTI3ZDlkZTE1ODI0MzhkNGViNTk1Mzg5MGU3OWM1YzcKK0F1dGhvcjogQWxhbiBNb2RyYSA8YW1vZHJhQGdtYWlsLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxNiAwNjo0MTozNiAyMDEzIC0wNTAwCiAKLTIwMTAtMDItMTUgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorICAgIFRoZSBwb3dlcnBjNjQgQUJJcyBhbGlnbiBzdHJ1Y3RzIHBhc3NlZCBieSB2YWx1ZSwgYSBmYWN0IGlnbm9yZWQgYnkKKyAgICBnY2MgZm9yIHF1aXRlIHNvbWUgdGltZS4gIFNpbmNlIGdjYyBub3cgZG9lcyB0aGUgY29ycmVjdCBhbGlnbm1lbnQsCisgICAgbGliZmZpIG5lZWRzIHRvIGZvbGxvdyBzdWl0LiAgVGhpcyBvdWdodCB0byBiZSBtYWRlIHNlbGVjdGFibGUgdmlhCisgICAgYSBuZXcgYWJpIHZhbHVlLCBhbmQgdGhlICNpZmRlZnMgcmVtb3ZlZCBmcm9tIGZmaS5jIGFsb25nIHdpdGggbWFueQorICAgIG90aGVyICNpZmRlZnMgcHJlc2VudCB0aGVyZSBhbmQgaW4gYXNzZW1ibHkuICBJJ2xsIGRvIHRoYXQgd2l0aCBhCisgICAgZm9sbG93dXAgcGF0Y2ggc29tZXRpbWUuCisgICAgCisgICAgVGhpcyBpcyBhIHJldmlzZWQgdmVyc2lvbiBvZgorICAgIGh0dHBzOi8vc291cmNld2FyZS5vcmcvbWwvbGliZmZpLWRpc2N1c3MvMjAxMy9tc2cwMDE2Mi5odG1sCiAKLQkqIHNyYy9hcm0vc3lzdi5TIChfX0FSTV9BUkNIX18pOiBEZWZpbmUgZm9yIHByb2Nlc3NvcgotCV9fQVJNX0FSQ0hfN0VNX18uCitjb21taXQgYTk3Y2YxZmFlNTc1ZDhiZmQ1MjU5YzVjNDIyMDI1YWQ0MzkxMTMyNgorQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDE2IDA2OjQwOjEzIDIwMTMgLTA1MDAKIAotMjAxMC0wMS0xNSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgVGhpcyBwYXRjaCBwcmVwYXJlcyBmb3IgRUxGdjIsIHdoZXJlIHNpemVzIG9mIHRoZXNlIGFyZWFzIGNoYW5nZS4gIEl0CisgICAgYWxzbyBtYWtlcyBzb21lIG1pbm9yIGNoYW5nZXMgdG8gaW1wcm92ZSBjb2RlIGVmZmljaWVuY3kuCiAKLQkqIFJFQURNRTogQWRkIG5vdGVzIG9uIGJ1aWxkaW5nIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKysuCitjb21taXQgMTY0MjgzZjRhYzU5NzJjZTJhYjVlMDE1Y2MyYWIxMDE0YzIzMjc2YworQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBTYXQgTm92IDE2IDA2OjM4OjU1IDIwMTMgLTA1MDAKIAotMjAxMC0wMS0xNSAgRGFuaWVsIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorICAgIFRoZSBwb3dlcnBjNjQgc3VwcG9ydCBvcHRlZCB0byBwYXNzIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBib3RoIGluIHRoZQorICAgIGZwciBhcmVhIGFuZCB0aGUgcGFyYW1ldGVyIHNhdmUgYXJlYSwgbmVjZXNzYXJ5IHdoZW4gdGhlIGJhY2tlbmQKKyAgICBkb2Vzbid0IGtub3cgaWYgYSBmdW5jdGlvbiBhcmd1bWVudCBjb3JyZXNwb25kcyB0byB0aGUgZWxsaXBzaXMKKyAgICBhcmd1bWVudHMgb2YgYSB2YXJpYWRpYyBmdW5jdGlvbi4gIFRoaXMgcGF0Y2ggYWRkcyBwb3dlcnBjIHN1cHBvcnQgZm9yCisgICAgdmFyaWFkaWMgZnVuY3Rpb25zLCBhbmQgY2hhbmdlcyB0aGUgY29kZSB0byBvbmx5IHBhc3MgZnAgaW4gdGhlIEFCSQorICAgIG1hbmRhdGVkIGFyZWEuICBFTEZ2MiBuZWVkcyB0aGlzIGNoYW5nZSBzaW5jZSB0aGUgcGFyYW1ldGVyIHNhdmUgYXJlYQorICAgIG1heSBub3QgZXhpc3QgdGhlcmUuCisgICAgCisgICAgVGhpcyBhbHNvIGZpeGVzIHR3byBmYXVsdHkgdGVzdHMgdGhhdCB1c2VkIGEgbm9uLXZhcmlhZGljIGZ1bmN0aW9uCisgICAgY2FzdCB0byBjYWxsIGEgdmFyaWFkaWMgZnVuY3Rpb24sIGFuZCBzcHVyaW91c2x5IHJlYXNvbmVkIHRoYXQgdGhpcyBpcworICAgIHNvbWVob3cgbmVjZXNzYXJ5IGZvciBzdGF0aWMgZnVuY3Rpb25zLi4KIAotCSogbXN2Y2Muc2g6IE5ldyBmaWxlLgorY29tbWl0IDMxMjU3YjMxODlmODFhMTk5YmMyOTAyYzIyYmM1ZjJkN2M1NGNjZGUKK0F1dGhvcjogQW5kcmV3IEhhbGV5IDxhcGhAcmVkaGF0LmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxNiAwNjozNTo1MSAyMDEzIC0wNTAwCiAKLQkqIHNyYy94ODYvd2luMzIuUzogUG9ydCBhc3NlbWJseSByb3V0aW5lcyB0byBNU1ZDIGFuZCAjaWZkZWYuCi0JKiBzcmMveDg2L2ZmaS5jOiBUd2VhayBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgcmVtb3ZlIGV4Y2VzcwotCXBhcmVucy4KLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBfX2RlY2xzcGVjKGFsaWduKDgpKSB0byB0eXBlZGVmIHN0cnVjdAotCWZmaV9jbG9zdXJlLgorICAgIEZpeCBzYW1wbGUgY2xvc3VyZSBjb2RlCiAKLQkqIHNyYy94ODYvZmZpLmM6IE1lcmdlIGZmaV9jYWxsX1NZU1YgYW5kIGZmaV9jYWxsX1NURENBTEwgaW50byBuZXcKLQlmdW5jdGlvbiBmZmlfY2FsbF93aW4zMiBvbiBYODZfV0lOMzIuCi0JKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jYWxsX1NZU1YpOiBSZW5hbWUgdG8gZmZpX2NhbGxfd2luMzIuCi0JKGZmaV9jYWxsX1NURENBTEwpOiBSZW1vdmUuCitjb21taXQgZGIwYWNlM2EzODQ5NmFmNzNlYWUzZGYwMmVmMzUzNzM2ZDE2OTA5ZgorQXV0aG9yOiBBbmRyZXcgSGFsZXkgPGFwaEByZWRoYXQuY29tPgorRGF0ZTogICBTYXQgTm92IDE2IDA2OjI5OjI1IDIwMTMgLTA1MDAKIAotCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IE1vdmUgc3RhY2sgc3BhY2UgYWxsb2NhdGlvbiBjb2RlCi0JdG8gZmZpX3ByZXBfY2lmX21hY2hkZXAgZm9yIHg4Ni4KLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogVG8gaGVyZS4KKyAgICBGaXggYnJva2VuIHRlc3QgY2FzZXMKIAotMjAxMC0wMS0xNSAgT2xpdmVyIEtpZGRsZSAgPG9raWRkbGVAeWFob28uY28udWs+Citjb21taXQgZGUxMGY1MDM5ZWQ3YTUzMzgyZGRjYzk1YzM2OGQwM2U1MzVlZGI5OAorTWVyZ2U6IDU4YzI1NzcgZjM2NTdkYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IE5vdiAxNCAxMDo1NjoyOSAyMDEzIC0wNTAwCiAKLQkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBDaGVjayBmb3IgX19pMzg2IGFuZCBfX2FtZDY0IGZvcgotCVN1biBTdHVkaW8gY29tcGlsZXIgY29tcGF0aWJpbGl0eS4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgaHR0cHM6Ly9naXRodWIuY29tL2JpdmFiL2xpYmZmaQorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAJQ2hhbmdlTG9nCiAKLTIwMTAtMDEtMTIgIENvbnJhZCBJcndpbiA8Y29ucmFkLmlyd2luQGdtYWlsLmNvbT4KK2NvbW1pdCBmMzY1N2RhMjc4ZGQ2M2FmY2RkODc2Mjg5NGE5YmRhZWE4ZWYwMjhhCitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBUaHUgTm92IDE0IDEzOjAyOjE2IDIwMTMgKzAxMDAKIAotCSogZG9jL2xpYmZmaS50ZXhpOiBBZGQgY2xvc3VyZSBleGFtcGxlLgorICAgIHVwZGF0ZSBDaGFuZ2Vsb2cKIAotMjAxMC0wMS0wNyAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgNThjMjU3N2EzZmY4MGU3NDE2ZWYwNDM0NzY5ZTJhZjIzMzY1NzE5YworQXV0aG9yOiBBbGFuIE1vZHJhIDxhbW9kcmFAZ21haWwuY29tPgorRGF0ZTogICBXZWQgTm92IDEzIDE2OjU1OjM2IDIwMTMgLTA1MDAKIAotCVBSIGxpYmZmaS80MDcwMQotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCBbX19hbHBoYV9fICYmIF9fb3NmX19dIChQUklkTEwsCi0JUFJJdUxMLCBQUklkNjQsIFBSSXU2NCwgUFJJdVBUUik6IERlZmluZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IEFkZCAtV25vLWZvcm1hdCBvbgotCWFscGhhKi1kZWMtb3NmKi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoYWxsb2NhdGVfbW1hcCk6IENhc3QKLQlNQVBfRkFJTEVEIHRvIGNoYXIgKi4KKyAgICBUaGlzIGVuc2hyaW5lcyB0aGUgY3VycmVudCB0ZXN0c3VpdGUgcHJhY3RpY2Ugb2YgdXNpbmcgZmZpX2FyZyBmb3IKKyAgICByZXR1cm5lZCB2YWx1ZXMuICBJdCB3b3VsZCBiZSByZWFzb25hYmxlIGFuZCBsb2dpY2FsIHRvIHVzZSB0aGUgYWN0dWFsCisgICAgcmV0dXJuIGFyZ3VtZW50IHR5cGUgYXMgcGFzc2VkIHRvIGZmaV9wcmVwX2NpZiwgYnV0IHRoaXMgd291bGQgbWVhbgorICAgIGNoYW5naW5nIGEgbGFyZ2UgbnVtYmVyIG9mIHRlc3RzIHRoYXQgdXNlIGZmaV9hcmcgYW5kIGFsbCBiYWNrZW5kcworICAgIHRoYXQgd3JpdGUgcmVzdWx0cyB0byBhbiBmZmlfYXJnLgogCi0yMDEwLTAxLTA2ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KK2NvbW1pdCA4YWY0MmY5OTQ0ZjdlZDcyYzgxYWUzNjBhYWM2YTg0ZGMxMWY4OWRjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgTm92IDEzIDE2OjQwOjI4IDIwMTMgLTA1MDAKIAotCSogc3JjL21pcHMvbjMyLlM6IFVzZSAuYWJpY2FsbHMgYW5kIC5laF9mcmFtZSB3aXRoIF9fR05VQ19fLgorICAgIFJlc3BlY3QgSEFWRV9BTExPQ0FfSAogCi0yMDA5LTEyLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KK2NvbW1pdCBjZGY0MDVkNTc0ZjQ3OWI3ODI0NTQ1MTYzNjZiZDRmNGI5YjM0MTVlCitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBXZWQgTm92IDEzIDE1OjUwOjIxIDIwMTMgKzAxMDAKIAotCSogUkVBRE1FOiBVcGRhdGUgZm9yIGxpYmZmaSAzLjAuOS4KKyAgICBhZGQgYSB0ZXN0Y2FzZSBmb3IgdGhlIGRvdWJsZS9mbG9hdCBpc3N1ZSBvbiBBUk1IRgogCi0yMDA5LTEyLTI3ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KK2NvbW1pdCA3N2Y4MjNlMzFmZmI1NTdhNDY2YjI0ZjdmYmE4NDVmYmY3ODMxNzk4CitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBXZWQgTm92IDEzIDE0OjI2OjU3IDIwMTMgKzAxMDAKIAotCSogY29uZmlndXJlLmFjIChIQVZFX0xPTkdfRE9VQkxFKTogRGVmaW5lIGZvciBtaXBzIHdoZW4KLQlhcHByb3ByaWF0ZS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBzdG9wIHRyeWluZyB0byBhc3NpbmcgdmZwIHJlZ3Mgb25jZSB3ZSBhcmUgZG9uZSB3aXRoIHRoZSByZWdpc3RlcnMKIAotMjAwOS0xMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+Citjb21taXQgMzcwNjdlYzUwMzZmMmE2ZWQ3YTQ3OTlmODNmOGY1MzE2MDQ2MDM0NAorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgVHVlIE5vdiAxMiAxOTo0OTowMSAyMDEzICswMTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBNYXJrIGFzIHhmYWlsIGZvcgotCWF2cjMyKi0qLSouCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jOiBEaXR0by4KKyAgICBtYXJrIGFsbCB2ZnAgcmVnaXN0ZXJzIGFzIHVzZWQgd2hlbiBkb25lLgorICAgIAorICAgIFRvIGF2b2lkIGFzc2lnbmluZyByZWdpc3RlcnMgdGhlIHdvdWxkIGZpdCwgb25jZSBhcmd1bWVudHMgaGF2ZSBiZWVuIG9uCisgICAgdGhlIHN0YWNrLCB3ZSBtYXJrIGFsbCByZWdpc3RlcnMgYXMgdXNlZCBvbmNlIHdlIGRvIG5vdCBmaW5kIGEgZnJlZQorICAgIHJlZ2lzdGVyIGZvciB0aGUgZmlyc3QgdGltZS4KIAotMjAwOS0xMi0yNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCAyZjViN2NlNTQ1NDczYTdmNmU0MTE5M2VkYzI5NDA3Y2JlYmU4MmQ1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDkgMDY6MTY6MzIgMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBDb25kaXRpb25hbGx5IGluY2x1ZGUgc3RkaW50LmgKLQlhbmQgaW50dHlwZXMuaC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBEaXR0by4KKyAgICBVbHRyYVNQQVJDIElJaSBmaXguICBVcGRhdGUgUkVBRE1FIGFuZCBidWlsZCBjb25maWd1cnkuCiAKLTIwMDktMTItMjYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgYmVjZDc1NDQzNDE3MzAzMmY0MjZkMjJmZmNiZmUyNGY1NWIzYzEzNworQXV0aG9yOiBNYXJrIEtldHRlbmlzIDxrZXR0ZW5pc0BnbnUub3JnPgorRGF0ZTogICBXZWQgTm92IDYgMDY6NDM6NDkgMjAxMyAtMDUwMAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLW9wZW5ic2QqLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBMaW5rCi0Jb3BlbmJzZCBwcm9ncmFtcyB3aXRoIC1scHRocmVhZC4KKyAgICBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciB0byAxNi1ieXRlcy4KIAotMjAwOS0xMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+Citjb21taXQgMDVjMzEwOTM0MDlmN2IzZTZkNzk1ZmFjMjFkMmM5NTQzMTNkODE2MgorQXV0aG9yOiBLb25zdGFudGluIEJlbG91c292IDxraWJAZnJlZWJzZC5vcmc+CitEYXRlOiAgIFdlZCBOb3YgNiAwNjo0MDo1OCAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IFJlbW92ZSB4ZmFpbCBmb3IKLQltaXBzKi0qLSogYW5kIGFybSotKi0qLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogUmVtb3ZlIHhmYWlsIGZvciBhcm0qLSotKi4KKyAgICBNYXJrIGV4ZWN1dGFibGUgYXMgbm90IHJlcXVpcmluZyBleGVjdXRhYmxlIHN0YWNrLgogCi0yMDA5LTEyLTMxICBLYXkgVGlldHogIDxrdGlldHo3MEBnb29nbGVtYWlsLmNvbT4KK2NvbW1pdCBjZjZiZjk4MThlODM5NGNmY2RiMDdhNDBjNmE1ZTJlZTZiMDFkMzMzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDIgMTc6MjM6NTkgMjAxMyAtMDQwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oLAotCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggKFBSSWRMTCwgUFJ1TEwpOiBGaXgKLQlkZWZpbml0aW9ucy4KKyAgICBGaXggdXAgZG9jcwogCi0yMDA5LTEyLTMxICBDYXJsbyBCcmFtaW5pICA8Y2FybG8uYnJhbWl4QGxpYmVyby5pdD4KK2NvbW1pdCAwMjE3NzE3Njg1NGQxNmZjMGYxYTU5NThhYTM0ZGEyZjMwNjYzMGVlCitNZXJnZTogYzI0MjIxNyBjMjY1YjRjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDIgMTc6MTE6MjIgMjAxMyAtMDQwMAogCi0JKiBjb25maWd1cmUuYWMgKEFNX0xUTERGTEFHUyk6IERlZmluZSBmb3Igd2luZG93cyBob3N0cy4KLQkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfTERGTEFHUyk6IEFkZCBBTV9MVExERkxBR1MuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotMjAwOS0xMi0zMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+Ci0JICAgIEJsYWtlIENoYWZmaW4uCitjb21taXQgYzI0MjIxNzRiM2VkYzBkZTBiMTQ4ZGZkNmI2NzA4N2JiODgxYzRhNgorTWVyZ2U6IGY0Yjg0M2YgZDkxOGQ0NworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAyIDE0OjA4OjIzIDIwMTMgLTA3MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IE5ldyB0ZXN0IGNhc2UgZnJvbSBCbGFrZQotCUNoYWZmaW4gQCBBcHBsZS4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzQ1IGZyb20gZm9zcy1mb3Itc3lub3BzeXMtZHdjLWFyYy1wcm9jZXNzb3JzL2FyY19zdXBwb3J0CisgICAgCisgICAgYXJjOiBGaXggYnVpbGQgZXJyb3IKIAotMjAwOS0xMi0yOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IGMyNjViNGNhY2I5MTMwZjA0MjY5OWE4NWRlOWM3MjQyYjNmNDljYzMKK01lcmdlOiBmNGI4NDNmIGQ5MThkNDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMiAxNDowODoyMyAyMDEzIC0wNzAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IENvcHkgYWJpIGFuZCBuYXJncyB0bwotCWxvY2FsIHZhcmlhYmxlcy4KLQkoYWl4X2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMpOiBOZXcgZnVuY3Rpb24uCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ2FsbCBpdC4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzQ1IGZyb20gZm9zcy1mb3Itc3lub3BzeXMtZHdjLWFyYy1wcm9jZXNzb3JzL2FyY19zdXBwb3J0CisgICAgCisgICAgYXJjOiBGaXggYnVpbGQgZXJyb3IKIAotMjAwOS0xMi0yNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCBmNGI4NDNmODM3MTBhYzM3OGM0OGFiZDg3ZmU2NmJiNTE5ZDMwZDJlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDIgMTc6MDE6MTUgMjAxMyAtMDQwMAogCi0JKiBjb25maWd1cmUuYWM6IERlZmluZSBGRklfTU1BUF9FWEVDX1dSSVQgZm9yIHRoZSBnaXZlbiB0YXJnZXRzLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgotCSogc3JjL2Nsb3N1cmVzLmM6IFJlbW92ZSB0aGUgRkZJX01NQVBfRVhFQ19XUklUIGRlZmluaXRpb24gZm9yCi0JU29sYXJpcy94ODYuCisgICAgRG9uJ3QgYWxpZ24gc3RhY2sgZm9yIHdpbjMyCiAKLTIwMDktMTItMjYgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGxpbnV4LW02OGsub3JnPgorY29tbWl0IGYzY2QzOTM0NTcxM2RiOGU0MTRjZjY0MmI2Y2I2NWE0Y2ZlNjAxOGMKK01lcmdlOiA2NjZmM2U3IDZhYTE1OTAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMiAxMzoxNzo1NyAyMDEzIC0wNzAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBBZHZhbmNlIGludGFyZ19jb3VudAotCXdoZW4gYSBmbG9hdCBhcmd1bWVudHMgaXMgcGFzc2VkIGluIG1lbW9yeS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBNYXJrIGdlbmVyYWwgcmVnaXN0ZXJzIGFzIHVzZWQgdXAgd2hlbgotCWEgNjRiaXQgb3Igc29mdC1mbG9hdCBsb25nIGRvdWJsZSBhcmd1bWVudCBpcyBwYXNzZWQgaW4gbWVtb3J5LgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNTEgZnJvbSB2YnVkb3Zza2kvZm9yX3Vwc3RyZWFtCisgICAgCisgICAgRG9uJ3QgdXNlIDE2IGJ5dGUgYWxpZ25lZCBzdGFjayBmb3IgV0lOMzIKIAotMjAwOS0xMi0yNSAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+Citjb21taXQgNjY2ZjNlNzFiNTZkOTJjNDlmY2QyZDdmMzQ5YjhmOGViY2EwZjhhMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE9jdCAyNiAwOToxMjo0MiAyMDEzIC0wNDAwCiAKLQkqIG1hbi9mZmlfY2FsbC4zOiBGaXggI2luY2x1ZGUgaW4gZXhhbXBsZXMuCi0JKiBkb2MvbGliZmZpLnRleGk6IEFkZCBkaXJjYXRlZ29yeS4KKyAgICBBZGQgbW9yZSBjcmVkaXRzIHRvIFJFQURNRS4gIFRpZHkgdXAuCiAKLTIwMDktMTItMjUgIEZyYW5rIEV2ZXJkaWogPGYucC54LmV2ZXJkaWpAdHVkZWxmdC5ubD4KK2NvbW1pdCA3M2FkYTE0ZTc1NmJhZDk3ZmFkMGU2OTE1YTgyMWEzYzdlMDc5ZjgxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgT2N0IDI2IDA5OjA5OjQ1IDIwMTMgLTA0MDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogUGxhY2VkICdfX0dOVUNfXycgaWZkZWYgYXJvdW5kCi0JJ19fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKScgaW4gZmZpX2Nsb3N1cmUsIGZpeGVzIGNvbXBpbGUgZm9yCi0JSVJJWCBNSVBTUHJvIGM5OS4KLQkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBBZGRlZCAnX19zZ2knIGRlZmluZSB0byBub24KLQknX19hdHRyaWJ1dGVfXygoX19tb2RlX18oKSkpJyBpbnRlZ2VyIHR5cGVkZWZzLgotCSogc3JjL21pcHMvZmZpLmMgKGZmaV9jYWxsLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMiwKLQlmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEFkZGVkICdkZWZpbmVkKF9NSVBTRUIpJyB0byBCRSBjaGVjay4KLQkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogQWRkZWQKLQlGRklfTE9OR0RPVUJMRSBzdXBwb3J0IGFuZCBhbGlnbm1lbnQoTjMyIG9ubHkpLgotCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IENvcnJlY3RlZCAnI2luY2x1ZGUgPHNnaWRlZnMuaD4nIGZvciBJUklYIGFuZAotCWZpeGVkIG5vbiAnX19hdHRyaWJ1dGVfXygoX19tb2RlX18oKSkpJyBpbnRlZ2VyIHR5cGVkZWZzLgotCSogc3JjL21pcHMvbjMyLlM6IFB1dCAnI2lmZGVmIGxpbnV4JyBhcm91bmQgJy5hYmljYWxscycgYW5kICcuZWhfZnJhbWUnCi0Jc2luY2UgdGhleSBhcmUgTGludXgvR05VIEFzc2VtYmxlciBzcGVjaWZpYy4KKyAgICBVcGRhdGUgUkVBRE1FCiAKLTIwMDktMTItMjUgIEJyYWRsZXkgU21pdGggIDxicmFkQGJyYWQtc21pdGguY28udWs+Citjb21taXQgZDMzNzJjNTRjZTcxMTdlODBkMzg5YmE4NzVkYzViNmIyMjEzYzcxZQorQXV0aG9yOiBNYXJrIEggV2VhdmVyIDxtaHdAbmV0cmlzLm9yZz4KK0RhdGU6ICAgU2F0IE9jdCAyNiAwODozMDowNiAyMDEzIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYywgTWFrZWZpbGUuYW0sIHNyYy9hdnIzMi9mZmkuYywKLQlzcmMvYXZyMzIvZmZpdGFyZ2V0LmgsCi0Jc3JjL2F2cjMyL3N5c3YuUzogQWRkIEFWUjMyIHBvcnQuCi0JKiBjb25maWd1cmUsIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgIEZpeCBOMzIgQUJJIGlzc3VlIGZvciBNSVBTLgogCi0yMDA5LTEyLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IGQ2NzE2YWJhODExOGViMDUxMzg4NWNmZTU1N2JlZGViYjcwMTZlOGIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMTUgMTU6NDI6NDkgMjAxMyAtMDQwMAogCi0JKiBjb25maWd1cmUuYWM6IE1ha2UgaT84NiBidWlsZCBvbiBGcmVlQlNEIGFuZCBPcGVuQlNELgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIFVwZGF0ZSB0cmF2aXMtY2kgYnVpbGQgZGVwZW5kZW5jaWVzIHRvIGluY2x1ZGUgdGV4aW5mbwogCi0yMDA5LTEyLTE1ICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorY29tbWl0IDE2YjkzYTIxMWJjZmJlNGJkMGVmZGNmOTRkZTIyNWE3MWFhMGVlMDIKK0F1dGhvcjogU2FuZHJhIExvb3NlbW9yZSA8c2FuZHJhQGNvZGVzb3VyY2VyeS5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMTUgMTU6MzM6NTkgMjAxMyAtMDQwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBEZWZpbmUgUFJJdVBUUiBvbiBQQSBIUC1VWC4KKyAgICBBZGQgbmlvczIgcG9ydC4KIAotMjAwOS0xMi0xMyAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KK2NvbW1pdCAyZjU2MjZjZTAyZmNlODI2N2FiNDhjZWI2ZDdkMGVkN2Q2NzJhNzVlCitBdXRob3I6IFNhbmRyYSBMb29zZW1vcmUgPHNhbmRyYUBjb2Rlc291cmNlcnkuY29tPgorRGF0ZTogICBUdWUgT2N0IDE1IDE1OjMyOjE2IDIwMTMgLTA0MDAKIAotCSogc3JjL3BhL2ZmaS5jIChmZmlfY2xvc3VyZV9pbm5lcl9wYTMyKTogSGFuZGxlIEZGSV9UWVBFX0xPTkdET1VCTEUKLQl0eXBlIG9uIEhQLVVYLgorICAgIEZpeCB0ZXN0c3VpdGUgYnVnCiAKLTIwMTItMDItMTMgIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorY29tbWl0IGY2NGU0YTg2NTU1N2U0NDA3NzQ0MzZiNGMyYjJmZDczNzQyOTBlOTcKK0F1dGhvcjogTWFyY3VzIFNoYXdjcm9mdCA8bWFyY3VzLnNoYXdjcm9mdEBhcm0uY29tPgorRGF0ZTogICBUdWUgT2N0IDE1IDE1OjIwOjE0IDIwMTMgLTA0MDAKIAotCVBSIGxpYmZmaS81MjIyMQotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogQWRkIHRoaXNjYWxsCi0Jc3VwcG9ydCBmb3IgWDg2X1dJTjMyLgotCShGRklfSU5JVF9UUkFNUE9MSU5FX1RISVNDQUxMKTogRml4IGRpc3BsYWNlbWVudC4KKyAgICBGaXggbWFueS5jIHRlc3RjYXNlIGZvciBBYXJjaDY0CiAKLTIwMDktMTItMTEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+Citjb21taXQgMTI4Y2QxZDJmMzU4ZjI2ZDlmYTc1YTI3Y2YyYjMwMzU2ZjVkZDkwMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCA4IDA2OjQ1OjUxIDIwMTMgLTA0MDAKIAotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OSk6IFByb3Blcmx5IGFsaWduICdsb25nCi0JZG91YmxlJyBhcmd1bWVudHMuCisgICAgRml4IHNwZWxsaW5nIGVycm9ycwogCi0yMDA5LTEyLTExICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorY29tbWl0IGZmMDYyNjlkNzA3Y2FmYmZlZjJhODhhZmIwN2E3OWM5ZDE0ODBjNWYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgOCAwNjozMjoxOCAyMDEzIC0wNDAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IERlZmluZSBQUkl1UFRSIG9uIFNvbGFyaXMgPCAxMC4KKyAgICBVcGRhdGUgUkVBRE1FIGZvciBNODhLIGFuZCBWQVgKIAotMjAwOS0xMi0xMCAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgZDJmY2JjZGZiZWE3NTBkMWY2YTlmNDkzZTJlNmM0ZDVmZmE3MWIzNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCA4IDA2OjI3OjQ2IDIwMTMgLTA0MDAKIAotCVBSIGxpYmZmaS80MDcwMAotCSogc3JjL2Nsb3N1cmVzLmMgW1g4Nl82NCAmJiBfX3N1bl9fICYmIF9fc3ZyNF9fXQotCShGRklfTU1BUF9FWEVDX1dSSVQpOiBEZWZpbmUuCisgICAgQWRkIG04OGsgYW5kIFZBWCBzdXBwb3J0LiBVcGRhdGUgc29tZSBjb25maWd1cnkgYml0cy4KIAotMjAwOS0xMi0wOCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAY2F2aXVtbmV0d29ya3MuY29tPgorY29tbWl0IDZhYTE1OTAwYWNjYzBhNjQ4Y2RlYmYxMWVjMTFkMTE2OTdlYmZmZmQKK0F1dGhvcjogVml0YWx5IEJ1ZG92c2tpIDx2YnVkb3Zza2lAZ21haWwuY29tPgorRGF0ZTogICBUaHUgU2VwIDUgMTI6MDU6MDYgMjAxMyArMTAwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IFJlbW92ZSB4ZmFpbCBmb3IgbWlwcyotKi0qCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IFNhbWUuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYzogU2FtZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jOiBTYW1lLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jOiBTYW1lLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogU2FtZS4KKyAgICBEb24ndCB1c2UgMTYgYnl0ZSBhbGlnbmVkIHN0YWNrIGZvciBXSU4zMgorICAgIAorICAgIFRoaXMgZml4ZXMgYSBjcmFzaCB3aGVuIGFjY2Vzc2luZyBfX3N0ZGNhbGwgZnVuY3Rpb25zIGluIFB5dGhvbiBjdHlwZXMuCiAKLTIwMDktMTItMDcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCAzYjQ0ZDQxMTU2MTQ5YWY4ZGEyYTU4ODI1ZmVmZGZhMjMyNzRhZTdhCitBdXRob3I6IE1ha290byBLYXRvIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4KK0RhdGU6ICAgV2VkIEp1bCAxMCAxNTozNDo1MyAyMDEzICswOTAwCiAKLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMgKGxpYmZmaV9jbG9zdXJlX0FTTSk6IEZpeCB0YWJsZWp1bXAKLQl0eXBvLgorICAgIEZpeCBidWlsZCBmYWlsdXJlIHdoZW4gdXNpbmcgY2xhbmcgZm9yIEFuZHJvaWQKKyAgICAKKyAgICBjbGFuZyBmb3IgQW5kcm9pZCBnZW5lcmF0ZXMgX19nbnVfbGludXhfXyBkZWZpbmUsIGJ1dCBnY2MgZm9yIEFuZHJvaWQgZG9lc24ndC4gIFNvIHdlIHNob3VsZCBhZGQgY2hlY2sgaXQgZm9yIEFuZHJvaWQKIAotMjAwOS0xMi0wNSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IGQ5MThkNDc4MDljMTc0ZDYyMjgzMzA2YjI4Mjc0OWY4ZGI5MzY2MWYKK0F1dGhvcjogTWlzY2hhIEpvbmtlciA8bWpvbmtlckBzeW5vcHN5cy5jb20+CitEYXRlOiAgIE1vbiBKdWwgOCAxNTo1MTozNiAyMDEzICswMjAwCiAKLQkqIHNyYy9wb3dlcnBjL2FpeC5TOiBVcGRhdGUgQUlYMzIgY29kZSB0byBiZSBjb25zaXN0ZW50IHdpdGggQUlYNjQKLQljb2RlLgotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogU2FtZS4KKyAgICBhcmM6IEZpeCBidWlsZCBlcnJvcgorICAgIAorICAgIE9uZSBwYXJ0IG9mIHRoZSBwYXRjaCBmb3IgQVJDIHN1cHBvcnQgd2FzIG1pc3NpbmcgaW4gdGhlIHVwc3RyZWFtZWQKKyAgICB2ZXJzaW9uLgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IE1pc2NoYSBKb25rZXIgPG1qb25rZXJAc3lub3BzeXMuY29tPgogCi0yMDA5LTEyLTA1ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorY29tbWl0IGQzZDA5OWI0MGMxMjI1NTAyNzk3ODkyMDAyNjMzNDZmMTIwZjY5MDkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMiAxNjoxMTozOCAyMDEzIC0wNDAwCiAKLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIG1hbi9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICBsaXR0bGUtZW5kaWFuIHBwYzY0IHN1cHBvcnQKIAotMjAwOS0xMi0wNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IDBmODY5MGE4NGM4NzRlYzA5YTA5MGM4YzZhZGZiOTNjNTk0YWNhYzYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMiAxNTo1NDo0MCAyMDEzIC0wNDAwCiAKLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFJlb3JnYW5pemUgNjQtYml0IGNvZGUgdG8gbWF0Y2gKLQlsaW51eDY0X2Nsb3N1cmUuUy4KKyAgICBSZWJ1aWxkIGZvciBBUkMgYWRkaXRpb25zCiAKLTIwMDktMTItMDQgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+Citjb21taXQgZjg4MTE4YjM0NWYyN2M0NmY1NDQ1ZDZlNDgzMmM0OThmZjlhNmQ4NQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEp1bCAyIDE1OjUxOjI3IDIwMTMgLTA0MDAKIAotCVBSIGxpYmZmaS80MTkwOAotCSogc3JjL3g4Ni9mZmk2NC5jIChjbGFzc2lmeV9hcmd1bWVudCk6IFVwZGF0ZSBmcm9tCi0JZ2NjL2NvbmZpZy9pMzg2L2kzODYuYy4KLQkoZmZpX2Nsb3N1cmVfdW5peDY0X2lubmVyKTogRG8gbm90IHVzZSB0aGUgYWRkcmVzcyBvZiB0d28gY29uc2VjdXRpdmUKLQlTU0UgcmVnaXN0ZXJzIGRpcmVjdGx5LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jIChtYWluKTogUmVtb3ZlIHhmYWlsCi0JZm9yIHg4Nl82NCBsaW51eCB0YXJnZXRzLgorICAgIFJldmVydCAiTWVyZ2UgcHVsbCByZXF1ZXN0ICMzNiBmcm9tIGFiZXJnbWVpZXIvZW1zY3JpcHRlbl9maXgiCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCA2YTRkOTAxZGRlN2IzZjg3OTg0YzU2MzUwNTcxN2NkZTMxMTNkMTZlLCByZXZlcnNpbmcKKyAgICBjaGFuZ2VzIG1hZGUgdG8gYjUwYTEzYjljMDdlYzA5YWY0Yjk2OTdlNDgyYWNkYWQ1NzFlNjk2MS4KIAotMjAwOS0xMi0wNCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IDZhNGQ5MDFkZGU3YjNmODc5ODRjNTYzNTA1NzE3Y2RlMzExM2QxNmUKK01lcmdlOiBiNTBhMTNiIDU4NzAwMmMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMiAxMjoxMjozNCAyMDEzIC0wNzAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IEluY3JlbWVudAotCXBmciBmb3IgbG9uZyBkb3VibGUgc3BsaXQgYmV0d2VlbiBmcHIxMyBhbmQgc3RhY2suCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMzNiBmcm9tIGFiZXJnbWVpZXIvZW1zY3JpcHRlbl9maXgKKyAgICAKKyAgICBGaXhlcyBmb3IgYnVpbGRpbmcgd2l0aCBFbXNjcmlwdGVuCiAKLTIwMDktMTItMDMgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCBiNTBhMTNiOWMwN2VjMDlhZjRiOTY5N2U0ODJhY2RhZDU3MWU2OTYxCitNZXJnZTogNzY3ZjFmOSBiMDgyZTE1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSnVsIDIgMTI6MTA6MjYgMjAxMyAtMDcwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBJbmNyZW1lbnQgbmV4dF9hcmcgYW5kCi0JZnBhcmdfY291bnQgdHdpY2UgZm9yIGxvbmcgZG91YmxlLgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjNDQgZnJvbSBmb3NzLWZvci1zeW5vcHN5cy1kd2MtYXJjLXByb2Nlc3NvcnMvYXJjX3N1cHBvcnQKKyAgICAKKyAgICBBZGQgQVJDIHN1cHBvcnQKIAotMjAwOS0xMi0wMyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IDc2N2YxZjk2ZTUyODJkYTQ0ZDczNDBlNjgxNWU5ODIwYTNmNzhlMzkKK01lcmdlOiBjM2M0MGUwIGI4YTkxZDgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKdWwgMiAxMjowODowNCAyMDEzIC0wNzAwCiAKLQlQUiBsaWJmZmkvNDIyNDMKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IFJlbW92ZSBleHRyYSBwYXJlbnRoZXNlcy4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzQzIGZyb20gSmVuc1RpbW1lcm1hbi9fX20xMjgKKyAgICAKKyAgICBhZGRlZCBpbmNsdWRlIGZvciB4bW1pbnRyaW4uaAogCi0yMDA5LTEyLTAzICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorY29tbWl0IGI4YTkxZDgxYmU3N2Q0NzkzMjdmZGI2YmRkOWZkYWU2ZDE4ZTZlNjMKK0F1dGhvcjogSmVucyBUaW1tZXJtYW4gPGplbnMudGltbWVybWFuQHVnZW50LmJlPgorRGF0ZTogICBUdWUgSnVsIDIgMTA6NTc6MzcgMjAxMyArMDIwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyAobWFpbik6IEZpeCBmb3JtYXQgc3RyaW5nLgotCVJlbW92ZSB4ZmFpbHMgZm9yIHg4NiBsaW51eCB0YXJnZXRzLgorICAgIGFkZGVkIGluY2x1ZGUgZm9yIHhtbWludHJpbi5oCiAKLTIwMDktMTItMDIgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCBiMDgyZTE1MDkxOTYxMzczYzAzZDEwZWQwMjUxZjYxOWViYjZlZDc2CitBdXRob3I6IE1pc2NoYSBKb25rZXIgPG1qb25rZXJAc3lub3BzeXMuY29tPgorRGF0ZTogICBNb24gSnVuIDEwIDE2OjE5OjMzIDIwMTMgKzAyMDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogRml4IHR5cG8gaW4gSU5UNjQKLQljYXNlLgorICAgIEFkZCBBUkMgc3VwcG9ydAorICAgIAorICAgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgQVJDIGFyY2hpdGVjdHVyZSB0byBsaWJmZmkuIERlc2lnbldhcmUgQVJDCisgICAgaXMgYSBmYW1pbHkgb2YgcHJvY2Vzc29ycyBmcm9tIFN5bm9wc3lzLCBJbmMuCisgICAgCisgICAgVGhpcyBwYXRjaCBoYXMgYmVlbiB0ZXN0ZWQgb24gYSBsaXR0bGUtZW5kaWFuIHN5c3RlbSBhbmQgcGFzc2VzCisgICAgdGhlIHRlc3RzdWl0ZS4KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBNaXNjaGEgSm9ua2VyIDxtam9ua2VyQHN5bm9wc3lzLmNvbT4KIAotMjAwOS0xMi0wMSAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IGNjOWI1MTg2ODdlNDZiMGQxYWNhZmRkNGJjM2YzYjI4MWMyNWEzZDkKK0F1dGhvcjogTWFyY2luIFdvamR5ciA8d29qZHlyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIE1heSAxNCAxNTowMToyMyAyMDEzICswMjAwCiAKLQkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9BSVgpOiBDb252ZXJ0IHRvIG1vcmUgc3RhbmRhcmQKLQlyZWdpc3RlciB1c2FnZS4gIENhbGwgZmZpX3ByZXBfYXJncyBkaXJlY3RseS4gIEFkZCBsb25nIGRvdWJsZQotCXJldHVybiB2YWx1ZSBzdXBwb3J0LgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogRG91YmxlIGFyZyBpbmNyZW1lbnQKLQlhcHBsaWVzIHRvIEZGSV9UWVBFX0RPVUJMRS4gIENvcnJlY3QgZnByX2Jhc2UgaW5jcmVtZW50IHR5cG8uCi0JU2VwYXJhdGUgRkZJX1RZUEVfU0lOVDMyIGFuZCBGRklfVFlQRV9VSU5UMzIgY2FzZXMuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogT25seSAxNiBieXRlIHN0YWNrIGFsaWdubWVudCBpbiA2NCBiaXQKLQltb2RlLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogUmVtb3ZlIG5mIGFuZCBuZyBjb3VudGVycy4gIE1vdmUgdGVtcAotCWludG8gY2FzZS4KLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IE1haW50YWluIDE2IGJ5dGUgc3RhY2sgYWxpZ25tZW50LgotCUFsbG9jYXRlIHJlc3VsdCBhcmVhIGJldHdlZW4gcGFyYW1zIGFuZCBGUFJzLgorICAgIFVwZGF0ZSBsaWJmZmkucGMuaW4KKyAgICAKKyAgICB1c2UgLUwke3Rvb2xleGVjbGliZGlyfSBpbnN0ZWFkIG9mIC1MJHtsaWJkaXJ9CisgICAgdG8gYmUgY29uc2lzdGVudCB3aXRoIE1ha2VmaWxlLmFtCiAKLTIwMDktMTEtMzAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCA1ODcwMDJjMDkyY2ZmZTZlN2E4ZDcwMjhmMjQ2YzI0MWQwM2I3MzhjCitBdXRob3I6IEFuZHJlYXMgQmVyZ21laWVyIDxhbmRyZWFzLmJlcmdtZWllckBnbXgubmV0PgorRGF0ZTogICBGcmkgQXByIDE5IDE3OjEyOjI0IDIwMTMgKzAyMDAKIAotCVBSIHRhcmdldC8zNTQ4NAotCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmggKFBPV0VSUEM2NCk6IERlZmluZSBmb3IgUFBDNjQgTGludXggYW5kCi0JQUlYNjQuCi0JKiBzcmMvcG93ZXJwYy9haXguUzogSW1wbGVtZW50IEFJWDY0IHZlcnNpb24uCi0JKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBJbXBsZW1lbnQgQUlYNjQgdmVyc2lvbi4KLQkoZmZpX2Nsb3N1cmVfQVNNKTogVXNlIGV4dHNiLCBsaGEgYW5kIGRpc3BsYW1lbnQgYWRkcmVzc2VzLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogSW1wbGVtZW50IEFJWDY0Ci0Jc3VwcG9ydC4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTYW1lLgotCShmZmlfY2FsbCk6IFNhbWUuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBTYW1lLgorICAgIEVuYWJsZSBkaXNhYmxpbmcgb2YgbGlidG9vbCBvbiBwbGF0Zm9ybXMgd2hlcmUgaXQgZG9lcyBub3Qgd29yayAoZS5nLiBMTFZNKS4KKyAgICBCdWlsZCBsaWJyYXJpZXMgbm9ybWFsbHkgdGhlbi4KIAotMjAwOS0xMS0wMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCBjM2M0MGUwMjkwMzc3ZDdjZjk0OGIwNzJlZWRkODMxN2M0YmYyMTVlCitNZXJnZTogZWRlOTZlNCA0NzUwZTNjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDMwIDA1OjI0OjE0IDIwMTMgLTA3MDAKIAotCVBSIGxpYmZmaS80MTkwOAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmM6IE5ldyB0ZXN0LgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMzQgZnJvbSBkYXZpZHNjaC9hcm1oZgorICAgIAorICAgIEZpeCBBUk0gaGFyZC1mbG9hdCBzdXBwb3J0IGZvciBsYXJnZSBudW1iZXJzIG9mIFZGUCBhcmd1bWVudHMKIAotMjAwOS0wOS0yOCAgS2FpIFRpZXR6ICA8a2FpLnRpZXR6QG9uZXZpc2lvbi5jb20+Citjb21taXQgNDc1MGUzYzY2MmZkOTU2OWNiM2UyZDI4ZjUzOTY4NWZkMWNhOGNhZgorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgVGh1IE1hciAyOCAxNjo1NjozNiAyMDEzICswMTAwCiAKLQkqIHNyYy94ODYvd2luNjQuUyAoX2ZmaV9jYWxsX3dpbjY0IHN0YWNrKTogUmVtb3ZlIGZvciBnbnUKLQlhc3NlbWJseSB2ZXJzaW9uIHVzZSBvZiBfX19jaGtzdGsuCisgICAgdXBkYXRlIGNoYW5nZWxvZwogCi0yMDA5LTA5LTIzICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KK2NvbW1pdCA5NzA4ZTdjZjA5ZjFiZjgxNWY0ZDY0ODVlYjFmMTgwZmFiYjM1ODA0CitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBXZWQgTWFyIDI3IDE5OjMxOjA0IDIwMTMgKzAxMDAKIAotCVBSIGxpYmZmaS80MDI0MiwgUFIgbGliZmZpLzQxNDQzCi0JKiBzcmMvYXJtL3N5c3YuUyAoX19BUk1fQVJDSF9fKTogRGVmaW5lIGZvciBwcm9jZXNzb3JzCi0JX19BUk1fQVJDSF82VDJfXywgX19BUk1fQVJDSF82TV9fLCBfX0FSTV9BUkNIXzdfXywKLQlfX0FSTV9BUkNIXzdBX18sIF9fQVJNX0FSQ0hfN1JfXywgX19BUk1fQVJDSF83TV9fLgotCUNoYW5nZSB0aGUgY29uZGl0aW9uYWxzIHRvIF9fU09GVEZQX18gfHwgX19BUk1fRUFCSV9fCi0JZm9yIC1tZmxvYXQtYWJpPXNvZnRmcCB0byB3b3JrLgorICAgIGZvbG93IHRoZSBBUk0gaGFyZC1mbG9hdCBBQkkgaW4gZmZpX3ByZXBfaW5jb21pbmdfYXJnc19WRlAKIAotMjAwOS0wOS0xNyAgTG9yZW4gSi4gUml0dGxlICA8bGpyaXR0bGVAYWNtLm9yZz4KK2NvbW1pdCBiNDExMjA5ODFlNWU0OWNhMmRhMTBiOTRiMTU0Nzc1ZjUwZGE1ZjM2CitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBXZWQgTWFyIDI3IDE2OjM4OjM1IDIwMTMgKzAxMDAKIAotCVBSIHRlc3RzdWl0ZS8zMjg0MyAoc3RyaWtlcyBhZ2FpbikKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIFg4Nl9GUkVFQlNEIHRvCi0JZW5hYmxlIHByb3BlciBleHRlbnNpb24gb24gY2hhciBhbmQgc2hvcnQuCisgICAgY3JlYXRlIHNlcGFyYXRlZCB2ZXJzaW9ucyBvZiBmZmlfcHJlcF9pbmNvbWluZ19hcmdzXyogZm9yIFNZU1YgYW5kIFZGUCBBQklzLgorICAgIAorICAgIFRoZSBkaWZmZXJlbnQgdmVyc2lvbnMgd2lsbCBiZSBjYWxsZWQgZGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBvZiBjaWYtPmFiaQogCi0yMDA5LTA5LTE1ICBEYXZpZCBEYW5leSAgPGRkYW5leUBjYXZpdW1uZXR3b3Jrcy5jb20+Citjb21taXQgZGQyNmYxZjM5YzU0ODYxYzViOTE5MzFmMGYzN2E3Mjk0MmMyYTA3MgorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgVGh1IE1hciAyOCAxNTozOTowMSAyMDEzICswMTAwCiAKLQkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IFJlbW92ZSBzcGVjaWFsCi0JaGFuZGxpbmcgZm9yIEZGSV9UWVBFX1BPSU5URVIuCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX1RZUEVfU1RSVUNUX0RfU09GVCwKLQlGRklfVFlQRV9TVFJVQ1RfRl9TT0ZULCBGRklfVFlQRV9TVFJVQ1RfRERfU09GVCwKLQlGRklfVFlQRV9TVFJVQ1RfRkZfU09GVCwgRkZJX1RZUEVfU1RSVUNUX0ZEX1NPRlQsCi0JRkZJX1RZUEVfU1RSVUNUX0RGX1NPRlQsIEZGSV9UWVBFX1NUUlVDVF9TT0ZUKTogTmV3IGRlZmluZXMuCi0JKEZGSV9OMzJfU09GVF9GTE9BVCwgRkZJX042NF9TT0ZUX0ZMT0FUKTogTmV3IGZmaV9hYmkgZW51bWVyYXRpb25zLgotCShlbnVtIGZmaV9hYmkpOiBTZXQgRkZJX0RFRkFVTFRfQUJJIGZvciBzb2Z0LWZsb2F0LgotCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jYWxsX04zMik6IEFkZCBoYW5kbGluZyBmb3Igc29mdC1mbG9hdAotCXN0cnVjdHVyZSBhbmQgcG9pbnRlciByZXR1cm5zLgotCShmZmlfY2xvc3VyZV9OMzIpOiBBZGQgaGFuZGxpbmcgZm9yIHBvaW50ZXIgcmV0dXJucy4KLQkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBjYWxjX24zMl9zdHJ1Y3RfZmxhZ3MsCi0JY2FsY19uMzJfcmV0dXJuX3N0cnVjdF9mbGFncyk6IEhhbmRsZSBzb2Z0LWZsb2F0LgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6ICBIYW5kbGUgc29mdC1mbG9hdCwgZml4IHBvaW50ZXIgaGFuZGxpbmcuCi0JKGZmaV9jYWxsX04zMik6IERlY2xhcmUgcHJvcGVyIGFyZ3VtZW50IHR5cGVzLgotCShmZmlfY2FsbCwgY29weV9zdHJ1Y3RfTjMyLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEhhbmRsZQotCXNvZnQtZmxvYXQuCisgICAgYWRkIGEgZmFpbGluZyB0ZXN0IGZvciBjbG9zdXJlcyBvbiBBUk0gaGFyZGZsb2F0CiAKLTIwMDktMDgtMjQgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+Citjb21taXQgM2MxNjA4NjEzYWIzYzIxODQyMjJiOThjNTQ4MmNkZGVkZDZiNTU5YgorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgVHVlIE1hciAyNiAxOToyNDo0NyAyMDEzICswMTAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoQUNfUFJFUkVRKTogQnVtcCB0byAyLjY0LgorICAgIGV4dGVuZCBmZmlfcHJlcGFyZV9hcmdzIGZvciBGRklfVkZQIChoYXJkLWZsb2F0IEFCSSksIGZpeGluZyBhbiBpc3N1ZSB3aXRoIHBhc3NpbmcgVkZQIGFyZ3VtZW50cyBpbiBWRlAgcmVnaXN0ZXJzIGFuZCB0aGUgc3RhY2ssIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgbm90IHVzaW5nIGFsbCBjb3JlIHJlZ2lzdGVycy4KIAotMjAwOS0wOC0yMiAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KK2NvbW1pdCAwZjJmZjJkNGM5MjcxOWJlODkzNjE3OWY5YWI2NzRmNGQxYTNmZDE0CitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBUdWUgTWFyIDI2IDE5OjIyOjAyIDIwMTMgKzAxMDAKIAotCSogTWFrZWZpbGUuYW0gKGluc3RhbGwtaHRtbCwgaW5zdGFsbC1wZGYpOiBSZW1vdmUuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICBzZXBhcmF0ZSBBUk0gZmZpX3ByZXBhcmVfYXJncyBpbiBhIHZlcnNpb24gaW1wbGVtZW50aW5nIHRoZSBzaW1wbGUgU1lTViBjYWxsaW5nIGNvbnZlbnRpb24gYW5kIG9uZSBmb3IgdGhlIGhhcmQtZmxvYXQgY2FsbGluZyBjb252ZW50aW9uCiAKLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIG1hbi9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KK2NvbW1pdCAzYTM1MmI4YTgyNTI0MDBhODNkZTIyYzdjNDI0YmYxODg3YjRhMmVmCitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBUdWUgTWFyIDI2IDE0OjI0OjA0IDIwMTMgKzAxMDAKIAotMjAxMS0wOC0yMiAgSmFzcGVyIExpZXZpc3NlIEFkcmlhYW5zZSA8amFzcGVyQG9wZW5ic2Qub3JnPgorICAgIG1vdmUgdGhlIGhhcmRmbG9hdCBzcGVjaWZpYyBhcmd1bWVudCBjb3B5aW5nIGNvZGUgdG8gdGhlIGhlbHBlciBmdW5jdGlvbgogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBPcGVuQlNEL2hwcGEgYW5kIE9wZW5CU0QvcG93ZXJwYyBzdXBwb3J0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDVkZjZiNzk0NGE0MjI1YjZlYjMyOWYzODg2YmU2NGUwNGU5NjZmMjkKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFR1ZSBNYXIgMjYgMTQ6MDI6MjEgMjAxMyArMDEwMAogCi0yMDA5LTA3LTMwICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorICAgIGV4dHJhY3Qgc2V0dGluZyBvZiBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIGEgaGVscGVyIGZ1bmN0aW9uCiAKLQkqIGNvbmZpZ3VyZS5hYyAoX0FDX0FSR19WQVJfUFJFQ0lPVVMpOiBVc2UgbTRfcmVuYW1lX2ZvcmNlLgorY29tbWl0IDdkMTA0OGM0NzFiYjRiMWY5ZDY3YTllOWY4ZTk1ZjlhMWQyZTZkNDUKK0F1dGhvcjogRGF2aWQgU2NobmVpZGVyIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CitEYXRlOiAgIFR1ZSBNYXIgMjYgMTE6MzM6MzMgMjAxMyArMDEwMAogCi0yMDA5LTA3LTI0ICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKyAgICBleHRyYWN0IGNvZGUgdG8gYWxpZ24gdGhlIGFyZ3VtZW50IHN0b3JhZ2UgcG9pbnRlciB0byBhIGhlbHBlciBmdW5jdGlvbgogCi0JUFIgbGliZmZpLzQwODA3Ci0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFsc28gdXNlIHNpZ24vemVyby1leHRlbmRpbmcKLQlyZXR1cm4gdHlwZXMgZm9yIFg4Nl9XSU4zMi4KLQkqIHNyYy94ODYvd2luMzIuUyAoX2ZmaV9jYWxsX1NZU1YpOiBIYW5kbGUgb21pdHRlZCByZXR1cm4gdHlwZXMuCi0JKF9mZmlfY2FsbF9TVERDQUxMLCBfZmZpX2Nsb3N1cmVfU1lTViwgX2ZmaV9jbG9zdXJlX3Jhd19TWVNWLAotCV9mZmlfY2xvc3VyZV9TVERDQUxMKTogTGlrZXdpc2UuCitjb21taXQgYjlmMDEzNzg4ZjBmMzg0YzQyM2FkOTYzNDc1YWFhY2I1NTU5ODEzNQorQXV0aG9yOiBEYXZpZCBTY2huZWlkZXIgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KK0RhdGU6ICAgTW9uIE1hciAyNSAxMzoyNzozNiAyMDEzICswMTAwCiAKLQkqIHNyYy9jbG9zdXJlcy5jIChpc19zZWxpbnV4X2VuYWJsZWQpOiBEZWZpbmUgdG8gY29uc3QgMCBmb3IgQ3lnd2luLgotCShkbG1tYXAsIGRsbXVubWFwKTogQWxzbyB1c2UgdGhlc2UgZnVuY3Rpb25zIG9uIEN5Z3dpbi4KKyAgICBhZGQgYSB0ZXN0Y2FzZSwgdGhhdCBvbiBBUk0gaGFyZGZsb2F0IG5lZWRzIG1vcmUgdGhhbiB0aGUgOCAgVkZQIGFyZ3VtZW50IHJlZ2lzdGVycyB0byBwYXNzIGFyZ3VtZW50cyB0byBhIGNhbGwKIAotMjAwOS0wNy0xMSAgUmljaGFyZCBTYW5kaWZvcmQgIDxyZHNhbmRpZm9yZEBnb29nbGVtYWlsLmNvbT4KK2NvbW1pdCAyZmJkYjBmMjMxY2FmZGI3N2IwMjVkM2NkOGFmZTkwY2RhOTliM2JhCitBdXRob3I6IERhdmlkIFNjaG5laWRlciA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorRGF0ZTogICBNb24gTWFyIDI1IDEzOjI2OjAyIDIwMTMgKzAxMDAKIAotCVBSIHRlc3RzdWl0ZS80MDY5OQotCVBSIHRlc3RzdWl0ZS80MDcwNwotCVBSIHRlc3RzdWl0ZS80MDcwOQotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBSZXZlcnQgMjAwOS0wNy0wMiwgMjAwOS0wNy0wMSBhbmQKLQkyMDA5LTA2LTMwIGNvbW1pdHMuCisgICAgdXNlIHRoZSBhYnNvbHV0ZSB2YWx1ZSB0byBjaGVjayB0aGUgdGVzdCByZXN1bHQgYWdhaW5zdCBhbiBlcHNpbG9uCiAKLTIwMDktMDctMDEgIFJpY2hhcmQgU2FuZGlmb3JkICA8ci5zYW5kaWZvcmRAdWsuaWJtLmNvbT4KK2NvbW1pdCBlZGU5NmU0ZWI2NjBiYmYzZTBmZTA0ODEzNWVmYTgxMDZmNDhhZjVkCitNZXJnZTogZjIyYWIzYyA5ZTM0OTkyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE3IDE4OjM4OjIxIDIwMTMgLTA0MDAKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IFNldCBsZF9saWJyYXJ5X3BhdGgKLQl0byAiIiBiZWZvcmUgYWRkaW5nIHBhdGhzLiAgKFRoaXMgcmVpbnN0YXRlcyBhbiBhc3NpZ25tZW50IHRoYXQKLQl3YXMgcmVtb3ZlZCBieSBteSAyMDA5LTA2LTMwIGNvbW1pdCwgYnV0IGNoYW5nZXMgdGhlIGluaXRpYWwKLQl2YWx1ZSBmcm9tICIuIiB0byAiIi4pCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLTIwMDktMDctMDEgIEguSi4gTHUgIDxob25naml1Lmx1QGludGVsLmNvbT4KK2NvbW1pdCBmMjJhYjNjNjg3N2NiZGQwN2YwNThiNjg4MTZiMDA4NmIxY2IwZTFlCitNZXJnZTogMTJiMTg4NiBkMDgxMjRiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTWFyIDE3IDE4OjM0OjU0IDIwMTMgLTA0MDAKIAotCVBSIHRlc3RzdWl0ZS80MDYwMQotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IFByb3Blcmx5IHNldAotCWdjY2Rpci4gIEFkanVzdCBsZF9saWJyYXJ5X3BhdGggZm9yIGdjYyBvbmx5IGlmIGdjY2RpciBpc24ndAotCWVtcHR5LgorICAgIE1lcmdlIGJyYW5jaCAnbWFzdGVyJyBvZiBnaXRodWIuY29tOi9hdGdyZWVuL2xpYmZmaQogCi0yMDA5LTA2LTMwICBSaWNoYXJkIFNhbmRpZm9yZCAgPHIuc2FuZGlmb3JkQHVrLmlibS5jb20+Citjb21taXQgOWUzNDk5MmE1ZWEyZmRhMWRiYTU4NzViZjk2ZGM5MWE3MjMwZjUxZgorTWVyZ2U6IDEyYjE4ODYgZDA4MTI0YgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNyAxODozNDo1NCAyMDEzIC0wNDAwCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBEb24ndCBhZGQgIi4iCi0JdG8gbGRfbGlicmFyeV9wYXRoLiAgVXNlIGFkZF9wYXRoLiAgQWRkIGp1c3QgZmluZF9saWJnY2NfcwotCXRvIGxkX2xpYnJhcnlfcGF0aCwgbm90IGV2ZXJ5IGxpYmdjYyBtdWx0aWxpYiBkaXJlY3RvcnkuCisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLTIwMDktMDYtMTYgIFdpbSBMZXdpcyAgPHdpbWxAaGhoaC5vcmc+Citjb21taXQgMTJiMTg4NmQ3YjFmOGFhMjY0YjFkMzQ4YmZhNDdhMGUxNDcxMmRmNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE1hciAxNyAxODozMjoxMiAyMDEzIC0wNDAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBdm9pZCBjbG9iYmVyaW5nIGNyMyBhbmQgY3I0LCB3aGljaCBhcmUKLQlzdXBwb3NlZCB0byBiZSBjYWxsZWUtc2F2ZWQuCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlMgKHNtYWxsX3N0cnVjdF9yZXR1cm5fdmFsdWUpOiBGaXggb3ZlcnJ1biBvZgotCXJldHVybiBidWZmZXIgZm9yIG9kZC1zaXplIHN0cnVjdHMuCisgICAgY3lnd2luIGZpeCAmIHVwZGF0ZXMgZm9yIDMuMC4xMwogCi0yMDA5LTA2LTE2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IGQwODEyNGJlZGYyYzZkNjE4NzRmZTIxNTQwNDc4M2FlYjlmNmYxYWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTcgMTg6MzI6MTIgMjAxMyAtMDQwMAogCi0JUFIgbGliZmZpLzQwNDQ0Ci0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaV90YXJnZXRfY29tcGlsZSk6IEFkZAotCWFsbG93X3N0YWNrX2V4ZWN1dGUgZm9yIERhcndpbi4KKyAgICBjeWd3aW4gZml4ICYgdXBkYXRlcyBmb3IgMy4wLjEzCiAKLTIwMDktMDYtMTYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGNiMzJjODEyZDA0ZDFkZmE3MjAwMmNjMDQ5MjRlN2U0ZmVmODllMDIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBNYXIgMTcgMDk6Mjc6NTUgMjAxMyAtMDQwMAogCi0JKiBjb25maWd1cmUuYWMgKFRBUkdFVERJUik6IEFkZCBtaXNzaW5nIGJsYW5rIGxpbmVzLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIEZpeCBsaWIgaW5zdGFsbCBkaXIKIAotMjAwOS0wNi0xNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgZWZkNzg2NmEzNjFhNmY2MzZiYWU4NDAwZDI2YzY4MTFlNTZjYTIwNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwODozNTo1NyAyMDEzIC0wNDAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKLQlzcGVjaWZpZXJzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCwKLQl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIChQUklkTEwsIFBSSXVMTCk6IERlZmluZS4KKyAgICAyLjAuMTNyYzEKIAotMjAwOS0wNi0xNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgZmY2NDdhZDRkZmYyZjA3ZGQxNTNmMjk1YTFmNzBiMWQ5MDZjZDZjYQorTWVyZ2U6IDRhY2YwMDUgZDlkZDQxNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwODoyMDo0MCAyMDEzIC0wNDAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogeGZhaWwgZXZlcnl3aGVyZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBMaWtld2lzZS4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCUNoYW5nZUxvZwogCi0yMDA5LTA2LTEyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCA0YWNmMDA1NmY1NWM3NTc0OTBkYWU2YzI5YTY1YjAzMjEzMjdlYThhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA4OjE4OjQ1IDIwMTMgLTA0MDAKIAotCSogTWFrZWZpbGUuYW06IFJlbW92ZSBpbmZvX1RFWElORk9TLgorICAgIEJ1aWxkIGZpeCBmb3Igc29mdC1mbG9hdCBwb3dlciB0YXJnZXRzCiAKLTIwMDktMDYtMTIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDY3NWM5ODM5MjI0ZTQyNjgxODdmMWVjNmY1MTIxMjdmOWRiNTU1ZDAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDg6MTI6MzggMjAxMyAtMDQwMAogCi0JKiBDaGFuZ2VMb2cubGliZmZpOiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEZpeCBwcmludGYgZm9ybWF0Ci0Jc3BlY2lmaWVycy4KLQl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogaW5jbHVkZSBzdGRpbnQuaC4KKyAgICBEb2N1bWVudGF0aW9uIGZpeAogCi0yMDA5LTA2LTExICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+Citjb21taXQgOGEyODZmNTcwY2NkNDFkYjgxZjc0ZWE3ZjI0OGRhNjIyNDFkODk4YQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwODowMToxOSAyMDEzIC0wNDAwCiAKLQkqIE1ha2VmaWxlLmFtLAotCWNvbmZpZ3VyZS5hYywKLQlpbmNsdWRlL2ZmaS5oLmluLAotCWluY2x1ZGUvZmZpX2NvbW1vbi5oLAotCXNyYy9jbG9zdXJlcy5jLAotCXNyYy9kbG1hbGxvYy5jLAotCXNyYy94ODYvZmZpLmMsCi0Jc3JjL3g4Ni9mZml0YXJnZXQuaCwKLQlzcmMveDg2L3dpbjY0LlMgKG5ldyksCi0JUkVBRE1FOiBBZGRlZCB3aW42NCBzdXBwb3J0IChtaW5ndyBvciBNU1ZDKQotCSogTWFrZWZpbGUuaW4sCi0JaW5jbHVkZS9NYWtlZmlsZS5pbiwKLQltYW4vTWFrZWZpbGUuaW4sCi0JdGVzdHN1aXRlL01ha2VmaWxlLmluLAotCWNvbmZpZ3VyZSwKLQlhY2xvY2FsLm00OiBSZWdlbmVyYXRlZAotCSogbHRjZi1jLnNoOiBwcm9wZXJseSBlc2NhcGUgY3lnd2luL3czMiBwYXRoCi0JKiBtYW4vZmZpX2NhbGwuMzogQ2xhcmlmeSBzaXplIHJlcXVpcmVtZW50cyBmb3IgcmV0dXJuIHZhbHVlLgotCSogc3JjL3g4Ni9mZmk2NC5jOiBGaXggZmlsZW5hbWUgaW4gY29tbWVudC4KLQkqIHNyYy94ODYvd2luMzIuUzogUmVtb3ZlIHVudXNlZCBleHRlcm4uCisgICAgRml4IGZvciBtNjgwMDAgc3lzdGVtcwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMsCi0gCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYywKLSAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jLAotIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiB1c2UgZmZpX2Nsb3N1cmVfYWxsb2MgaW5zdGVhZAotCW9mIGNoZWNraW5nIGZvciBNTUFQLiAgVXNlIGludHB0cl90IGluc3RlYWQgb2YgbG9uZyBjYXN0cy4KK2NvbW1pdCBkOWRkNDE3YjA5NTY2YWY1NWI3YjMwMDBiYjUzY2NhZjJlMWQ2YzkyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA4OjAxOjE5IDIwMTMgLTA0MDAKIAotMjAwOS0wNi0xMSAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgRml4IGZvciBtNjgwMDAgc3lzdGVtcwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogQWRkIHhmYWlsIHNoKi0qLWxpbnV4LSouCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQWRkIHhmYWlsIHNoKi0qLSouCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IExpa2V3aXNlLgorY29tbWl0IDIxNTc2M2QwMTJhOTQ0ZDk1NDA2YjM5NGQ2MDEzYjgwZDIyMGU4NzAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDc6NTc6MzUgMjAxMyAtMDQwMAogCi0yMDA5LTA2LTA5ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICBVcGRhdGUgY29uZmlndXJ5LgogCi0JKiBzcmMveDg2L2ZyZWVic2QuUzogQWRkIG1pc3NpbmcgZmlsZS4KK2NvbW1pdCA5MTgwZDhmMzljOWI2YWZlMTdiNzgyNzdjMjcxMWE1ZDk5NDhlODI0CitNZXJnZTogMmZiNTI3YSA3ZTFiMzI2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTWFyIDE2IDA3OjQ2OjU1IDIwMTMgLTA0MDAKIAotMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLQlJbXBvcnQgZnJvbSBsaWJmZmkgMy4wLjg6Citjb21taXQgMmZiNTI3YTAxN2E0OTQzZTE3NmE0ODlmZjEwMzIzMWI4NjQ2NGI1OQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwNzo0NjozOCAyMDEzIC0wNDAwCiAKLQkqIGRvYy9saWJmZmkudGV4aTogTmV3IGZpbGUuCi0JKiBkb2MvbGliZmZpLmluZm86IExpa2V3aXNlLgotCSogZG9jL3N0YW1wLXZ0aTogTGlrZXdpc2UuCi0JKiBtYW4vTWFrZWZpbGUuYW06IE5ldyBmaWxlLgotCSogbWFuL2ZmaV9jYWxsLjM6IE5ldyBmaWxlLgorICAgIEFkZCBNZXRhIHByb2Nlc3NvciBzdXBwb3J0CiAKLQkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIHNyYy94ODYvZGFyd2luNjQuUywKLQlzcmMvZGxtYWxsb2MuYy4KLQkobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIFg4Nl9GUkVFQlNELgorY29tbWl0IDIxMWE5ZWJmNGQxYTk4MDFlMTVlMTAzNTY2YWVkMmI4YzQyNzkwYmUKK01lcmdlOiBmMzA4ZmFmIGVlMTg3NjYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMTYgMDQ6MjQ6NDAgMjAxMyAtMDcwMAogCi0JKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuOC4KLQlwYXJpc2MqLSotbGludXgqOiBBZGQuCi0JaTM4Ni0qLWZyZWVic2QqIHwgaTM4Ni0qLW9wZW5ic2QqOiBBZGQuCi0JcG93ZXJwYy0qLWJlb3MqOiBBZGQuCi0JQU1fQ09ORElUSU9OQUwgWDg2X0ZSRUVCU0Q6IEFkZC4KLQlBQ19DT05GSUdfRklMRVM6IEFkZCBtYW4vTWFrZWZpbGUuCisgICAgTWVyZ2UgcHVsbCByZXF1ZXN0ICMzMiBmcm9tIGFsZXgvcGF0Y2gtMQorICAgIAorICAgIEZpeCBmb3IgYSBjcmFzaGVyIGR1ZSB0byBtaXNhbGlnbmVkIHN0YWNrIG9uIHg4Ni0zMi4KIAotCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX0ZOKTogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCitjb21taXQgN2UxYjMyNjQ5ZWZkMjQ4MTRlODYxNzJlMTk2ZjM5MDU2NmY5ZTk3MAorTWVyZ2U6IGYzMDhmYWYgZWUxODc2NgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAxNiAwNDoyNDo0MCAyMDEzIC0wNzAwCiAKLTIwMDktMDYtMDggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMzIgZnJvbSBhbGV4L3BhdGNoLTEKKyAgICAKKyAgICBGaXggZm9yIGEgY3Jhc2hlciBkdWUgdG8gbWlzYWxpZ25lZCBzdGFjayBvbiB4ODYtMzIuCiAKLQkqIFJFQURNRTogSW1wb3J0IGZyb20gbGliZmZpIDMuMC44LgorY29tbWl0IGVlMTg3NjZiMTY5ODExNDI2YzE0YjAxMWZiYjQ2ZDgxZTM0NGY5MjYKK0F1dGhvcjogQWxleCBHYXlub3IgPGFsZXguZ2F5bm9yQGdtYWlsLmNvbT4KK0RhdGU6ICAgVGh1IE1hciAxNCAxNTowMDozMyAyMDEzIC0wNzAwCiAKLTIwMDktMDYtMDggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIEZpeCBmb3IgYSBjcmFzaGVyIGR1ZSB0byBtaXNhbGlnbmVkIHN0YWNrIG9uIHg4Ni0zMi4KKyAgICAKKyAgICBGdWxsIGluZm9ybWF0aW9uIG9uIHJlcHJvZHVjdGlvbiAodXNpbmcgUHl0aG9uJ3MgY3R5cGVzIGF2YWlsYWJsZSBoZXJlOsKgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTE3NDIzKQogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQWRkIHhmYWlscy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBBZGQgeGZhaWxzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jOiBBZGQgeGZhaWwgeDg2XzY0LSotbGludXgtKi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogQWRkIHhmYWlscy4KK2NvbW1pdCBmMzA4ZmFmMWVhYmFmOGRjMjQ5NjZhYjE3ZmJmOTQzNjhmNDZiOWM3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gRmViIDExIDE0OjI1OjEzIDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogQWRkIF9fVU5VU0VEX18gdG8gYXJncy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmM6ICBMaWtld2lzZS4KKyAgICBBZGQgbW94aWUgc3VwcG9ydC4gIFJlbGVhc2UgMy4wLjEyLgogCi0yMDA4LTEyLTI2ICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+Citjb21taXQgNGVhMjJlNTRlM2IxNDNmZTA1YzQxM2Y2ZGRkZDIzNmFmNmJjYmZiMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIEZlYiAxMCAwODo0ODozOCAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogbWFyayBleHBlY3RlZAotCWZhaWx1cmVzIG9uIHg4Nl82NCBjeWd3aW4vbWluZ3cuCisgICAgVXBkYXRlIFJFQURNRQogCi0yMDA4LTEyLTIyICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+Citjb21taXQgMTBlNzcyMjdiNmFlODVmNDZmMjg1OTBiZmIwOWNhMzYwODU1NDM1OAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIEZlYiAxMCAwODo0NzoyNiAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmM6IHVzZSBwb3J0YWJsZSBjYXN0IGZyb20KLQlwb2ludGVyIHRvIGludGVnZXIgKGludHB0cl90KS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jOiBkaXNhYmxlIGZvciB3aW42NC4KKyAgICBtZW5kCiAKLTIwMDgtMDctMjQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorY29tbWl0IGE5NTIxNDExYTUzZDU4ZjJiZjg4MTk5MjQyMjAwY2ViMGQ0ZGFlM2EKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBGZWIgOSAwNjo1NDo0MCAyMDEzIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBDbGVhbiB1cCBmYWlsdXJlcyBmcm9tCi0JY29tcGlsZXIgd2FybmluZ3MuCisgICAgc3BhcmMgdjggYW5kIHRlc3RzdWl0ZSBmaXhlcwogCi0yMDA4LTAzLTA0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KLQkgICAgQmxha2UgQ2hhZmZpbgotCSAgICBob3NAdGFtYW5lZ2kub3JnCitjb21taXQgNzBiMTFiNDdlZWE5M2JmNDM2Mjc1ODhkNDk0ZDBiM2IwZDA2MjQ4MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiA4IDE2OjEyOjE5IDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGUuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMKLQkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jCi0JICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYwotCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBOZXcgdGVzdHMgZnJvbSBBcHBsZS4KKyAgICBGaXggc21hbGwgc3RydWN0IHBhc3Npbmcgb24gcHBjCiAKLTIwMDktMDYtMDUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDYzYmExZmE3OWY3YzRjZTQyZGU4NDhkZWJlMjMzYWFiMzFhZWNiNTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgOCAxNToxODoxOSAyMDEzIC0wNTAwCiAKLQkqIHNyYy94ODYvZmZpdGFyZ2V0LmgsIHNyYy94ODYvZmZpLmM6IE1lcmdlIHN0ZGNhbGwgY2hhbmdlcyBmcm9tCi0JbGliZmZpLgorICAgIFJlbW92ZSB4ZmFpbCBmb3IgYXJtKi0qLSouCiAKLTIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDI0ZmJjYTRjMWQ1N2Q0ZWE2MjhjMGE4YmE2NDM2ODRkYWY1NGEzN2UKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgOCAxNDoxOTo1NiAyMDEzIC0wNTAwCiAKLQkqIHNyYy94ODYvZmZpdGFyZ2V0LmgsIHNyYy94ODYvd2luMzIuUywgc3JjL3g4Ni9mZmkuYzogQmFjayBvdXQKLQlzdGRjYWxsIGNoYW5nZXMuCisgICAgRml4IHR5cG8KIAotMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+Ci0JICAgIFRob21hcyBIZWxsZXIgIDx0aGVsbGVyQGN0eXBlcy5vcmc+Citjb21taXQgYjBmYTExY2IwYTk0Y2U2YmFjYTA1OGVhYjliMTBlNDA0NzVlNzFkNgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiA4IDE0OjE3OjEzIDIwMTMgLTA1MDAKIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IENoYW5nZSBDKysgY29tbWVudCB0byBDCi0JY29tbWVudC4KKyAgICBNb3JlIG1hbiBwYWdlIGNsZWFudXAKIAotMjAwOC0wMi0wMyAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorY29tbWl0IDhiZDE1ZDEzOWE1OGE2ZTQ2ZGM5MGExY2IyZDg5ZjU5ZjMyZjA2YzcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgOCAxMzo1NjozNyAyMDEzIC0wNTAwCiAKLQkqIHNyYy94ODYvZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCk6IENhbGN1bGF0ZSBqdW1wIHJldHVybgotCSAgb2Zmc2V0IGJhc2VkIG9uIGNvZGUgcG9pbnRlciwgbm90IGRhdGEgcG9pbnRlci4KKyAgICBGaXggbWFueS5jIHRlc3RjYXNlIGZvciBwcGMKIAotMjAwOC0wMS0zMSAgVGltb3RoeSBXYWxsIDx0d2FsbEB1c2Vycy5zZi5uZXQ+Citjb21taXQgN2FhYjgyNWNmMTk4YmU4NTQ5MGQzY2Q4MGU3NzhkNDE1ZDg1YWQ5YgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiA4IDEzOjI2OjIxIDIwMTMgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jOiBBZGQgdGVzdCBmb3Igc3RkY2FsbAotCWNsb3N1cmVzLgotCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogSW5jcmVhc2Ugc2l6ZSBvZiB0cmFtcG9saW5lIGZvciBzdGRjYWxsCi0JY2xvc3VyZXMuCi0JKiBzcmMveDg2L3dpbjMyLlM6IEFkZCBhc3NlbWJseSBmb3Igc3RkY2FsbCBjbG9zdXJlLgotCSogc3JjL3g4Ni9mZmkuYzogSW5pdGlhbGl6ZSBzdGRjYWxsIGNsb3N1cmUgdHJhbXBvbGluZS4KKyAgICBBZGQgbWlzc2luZyBmaWxlcyB0byBkaXN0CiAKLTIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGNiMDNlYThmNGViMDgwMjRlNDRhYmU0MzkyZWRjNzdiODlmYmZiYWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgOCAxMjoyNToxOCAyMDEzIC0wNTAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgotCSogc3JjL3g4Ni9mZmkuYzogTGlrZXdpc2UuCisgICAgc3BhcmMgdjkgZml4ZXMgZm9yIHN1biB0b29scwogCi0yMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCAzNWVlOGQ0NGYzMWRkM2QzYjg4MDgzYzgzN2RjMzUxNTkzZTEzY2MyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDggMDc6MTI6NDEgMjAxMyAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBJbnNlcnQgbGljZW5jZSBoZWFkZXIuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCi0JKiBzcmMvbTY4ay9zeXN2LlM6IExpa2V3aXNlLgorICAgIEZpeCBtaWNyb2JsYXplIGJpZy1lbmRpYW4gc3RydWN0IGlzc3VlCiAKLQkqIHNyYy9zaDY0L2ZmaS5jOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCi0JKiBzcmMvbTMyci9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvc2g2NC9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMveDg2L2ZmaTY0LmM6IExpa2V3aXNlLgotCSogc3JjL2FscGhhL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9hbHBoYS9vc2YuUzogTGlrZXdpc2UuCi0JKiBzcmMvZnJ2L2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9zMzkwL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9wYS9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvcGEvaHB1eDMyLlM6IExpa2V3aXNlLgotCSogc3JjL2lhNjQvdW5peC5TOiBMaWtld2lzZS4KLQkqIHNyYy9pYTY0L2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9zcGFyYy9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvbWlwcy9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvc2gvZmZpLmM6IExpa2V3aXNlLgorY29tbWl0IDlkYjdlMWE5NThmYzQ4NGJhMTQ5ZWZlMDI3MDA4YjlhMTcwMzk1ZmIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgNyAyMTowNjowOCAyMDEzIC0wNTAwCiAKLTIwMDgtMDItMTUgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisgICAgRml4IGJvdGNoZWQgc3BhcmMgcGF0Y2guIFVwZGF0ZSB2ZXJzaW9uLgogCi0JKiBzcmMvbWlwcy9mZmkuYyAoVVNFX19CVUlMVElOX19fQ0xFQVJfQ0FDSEUpOgotCURlZmluZSAoY29uZGl0aW9uYWxseSksIGFuZCB1c2UgaXQgdG8gaW5jbHVkZSBjYWNoZWN0bC5oLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZpeCBjYWNoZSBmbHVzaGluZy4KLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChfQUJJTjMyLCBfQUJJNjQsIF9BQklPMzIpOiBEZWZpbmUuCitjb21taXQgY2UwMTM4ZTYxNDU1ZjI2OGFmMzI2ZTI2OTA4Yjk2ODBlYzJjNGJlYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiA3IDE4OjA0OjAxIDIwMTMgLTA1MDAKIAotMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgVXBkYXRlIGJ1ZyByZXBvcnQgYWRkcmVzcy4gcmMyLgogCi0JaW5jbHVkZS9mZmkuaC5pbiwKLQlzcmMvYXJtL2ZmaXRhcmdldC5oLAotCXNyYy9hcm0vZmZpLmMsCi0Jc3JjL2FybS9zeXN2LlMsCi0Jc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgsCi0Jc3JjL2Nsb3N1cmVzLmMsCi0Jc3JjL3NoNjQvZmZpdGFyZ2V0LmgsCi0Jc3JjL3NoNjQvZmZpLmMsCi0Jc3JjL3NoNjQvc3lzdi5TLAotCXNyYy90eXBlcy5jLAotCXNyYy94ODYvZmZpNjQuYywKLQlzcmMveDg2L2ZmaXRhcmdldC5oLAotCXNyYy94ODYvd2luMzIuUywKLQlzcmMveDg2L2Rhcndpbi5TLAotCXNyYy94ODYvZmZpLmMsCi0Jc3JjL3g4Ni9zeXN2LlMsCi0Jc3JjL3g4Ni91bml4NjQuUywKLQlzcmMvYWxwaGEvZmZpdGFyZ2V0LmgsCi0Jc3JjL2FscGhhL2ZmaS5jLAotCXNyYy9hbHBoYS9vc2YuUywKLQlzcmMvbTY4ay9mZml0YXJnZXQuaCwKLQlzcmMvZnJ2L2ZmaXRhcmdldC5oLAotCXNyYy9mcnYvZmZpLmMsCi0Jc3JjL3MzOTAvZmZpdGFyZ2V0LmgsCi0Jc3JjL3MzOTAvc3lzdi5TLAotCXNyYy9jcmlzL2ZmaXRhcmdldC5oLAotCXNyYy9wYS9saW51eC5TLAotCXNyYy9wYS9mZml0YXJnZXQuaCwKLQlzcmMvcGEvZmZpLmMsCi0Jc3JjL3Jhd19hcGkuYywKLQlzcmMvaWE2NC9mZml0YXJnZXQuaCwKLQlzcmMvaWE2NC91bml4LlMsCi0Jc3JjL2lhNjQvZmZpLmMsCi0Jc3JjL2lhNjQvaWE2NF9mbGFncy5oLAotCXNyYy9qYXZhX3Jhd19hcGkuYywKLQlzcmMvZGVidWcuYywKLQlzcmMvc3BhcmMvdjkuUywKLQlzcmMvc3BhcmMvZmZpdGFyZ2V0LmgsCi0Jc3JjL3NwYXJjL2ZmaS5jLAotCXNyYy9zcGFyYy92OC5TLAotCXNyYy9taXBzL2ZmaXRhcmdldC5oLAotCXNyYy9taXBzL24zMi5TLAotCXNyYy9taXBzL28zMi5TLAotCXNyYy9taXBzL2ZmaS5jLAotCXNyYy9wcmVwX2NpZi5jLAotCXNyYy9zaC9mZml0YXJnZXQuaCwKLQlzcmMvc2gvZmZpLmMsCi0Jc3JjL3NoL3N5c3YuUzogVXBkYXRlIGxpY2Vuc2UgdGV4dC4KK2NvbW1pdCBmZDA3YzllNDA0NTFlMGVjMWQwNDc1Y2Q1NGE4M2Q0NWNjYWVhMmMwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDcgMTg6MDA6MzYgMjAxMyAtMDUwMAogCi0yMDA5LTA1LTIyICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKyAgICBBZGQgY2FjaGUgZmx1c2hpbmcgcm91dGluZSBmb3Igc3VuIGNvbXBpbGVyIG9uIHNwYXJjIHNvbGFyaXMgMi44CiAKLQkqIHNyYy94ODYvd2luMzIuUyAoX2ZmaV9jbG9zdXJlX1NURENBTEwpOiAgTmV3IGZ1bmN0aW9uLgotCSguZWhfZnJhbWUpOiAgQWRkIEZERSBmb3IgaXQuCitjb21taXQgZWQ2YWU5NTAxYjJiYWI0NWRhZjkzYjQ5MzVlYjBjOTc3NjM1Yjc2MworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiA3IDE2OjQzOjM2IDIwMTMgLTA1MDAKIAotMjAwOS0wNS0yMiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisgICAgQWRkIGxpYnRvb2wtbGRmbGFncy4gRGVmaW5lIHRvb2xleGVjbGliZGlyIGZvciBub24tR0NDIGJ1aWxkcy4KIAotCSogY29uZmlndXJlLmFjOiAgQWxzbyBjaGVjayBpZiBhc3NlbWJsZXIgc3VwcG9ydHMgcGMtcmVsYXRpdmUKLQlyZWxvY3Mgb24gWDg2X1dJTjMyIHRhcmdldHMuCi0JKiBjb25maWd1cmU6ICBSZWdlbmVyYXRlLgotCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfcHJlcF9hcmdzKTogIERlY2xhcmUgZXh0ZXJuLCBub3QgZ2xvYmFsLgotCShfZmZpX2NhbGxfU1lTVik6ICBBZGQgbWlzc2luZyBmdW5jdGlvbiB0eXBlIHN5bWJvbCAuZGVmIGFuZAotCWFkZCBFSCBtYXJrdXAgbGFiZWxzLgotCShfZmZpX2NhbGxfU1REQ0FMTCk6ICBMaWtld2lzZS4KLQkoX2ZmaV9jbG9zdXJlX1NZU1YpOiAgTGlrZXdpc2UuCi0JKF9mZmlfY2xvc3VyZV9yYXdfU1lTVik6ICBMaWtld2lzZS4KLQkoLmVoX2ZyYW1lKTogIEFkZCBoYW5kLWNyYWZ0ZWQgRUggZGF0YS4KK2NvbW1pdCBmZmVmMmUwNDZhYWVjODUzYmUzNTZmMGI4NzcwYTMzNTE4NWVhOWNmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDcgMTU6NDc6MDEgMjAxMyAtMDUwMAogCi0yMDA5LTA0LTA5ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICB4MzIgYW5kIGxpYnRvb2wgZml4ZXMKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBDaGFuZ2UgY29weXJpZ2h0IGhlYWRlciB0byByZWZlciB0bwotCXZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRvIHBvaW50IHJlYWRlcnMKLQlhdCB0aGUgQ09QWUlORzMgZmlsZSBhbmQgdGhlIEZTRidzIGxpY2Vuc2Ugd2ViIHBhZ2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBMaWtld2lzZS4KK2NvbW1pdCA5NWVlY2ViYjI4NThkYzZmMTQ5NWE2MTA3MmZmMzZkMGE4MTI3MTQ0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDcgMTU6MzI6NDYgMjAxMyAtMDUwMAogCi0yMDA5LTAzLTAxICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorICAgIFJlbW92ZSBhLm91dCBjcnVmdCBmcm9tIGRpc3QKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IDE3NmFhOWQyZTIzZDljZDU3ZDZmMjUwNjkyZDkxMGI0MDhmOWE2NTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBGZWIgNyAxNToyOToyMiAyMDEzIC0wNTAwCiAKLTIwMDgtMTItMTggIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIEZpeCBHQ0MgdXNhZ2UgdGVzdCBhbmQgdXBkYXRlIFJFQURNRQogCi0JUFIgbGliZmZpLzI2MDQ4Ci0JKiBjb25maWd1cmUuYWMgKEhBVkVfQVNfWDg2X1BDUkVMKTogTmV3IHRlc3QuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KLQkqIHNyYy94ODYvc3lzdi5TIFshRkZJX05PX1JBV19BUEldOiBQcmVjYWxjdWxhdGUKLQlSQVdfQ0xPU1VSRV9DSUZfT0ZGU0VULCBSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VULAotCVJBV19DTE9TVVJFX1VTRVJfREFUQV9PRkZTRVQgZm9yIHRoZSBTb2xhcmlzIDEwL3g4NiBhc3NlbWJsZXIuCi0JKC5laF9mcmFtZSk6IE9ubHkgdXNlIFNZTUJPTC0uIGlmZiBIQVZFX0FTX1g4Nl9QQ1JFTC4KLQkqIHNyYy94ODYvdW5peDY0LlMgKC5Mc3RvcmVfdGFibGUpOiBNb3ZlIHRvIC50ZXh0IHNlY3Rpb24uCi0JKC5MbG9hZF90YWJsZSk6IExpa2V3aXNlLgotCSguZWhfZnJhbWUpOiBPbmx5IHVzZSBTWU1CT0wtLiBpZmYgSEFWRV9BU19YODZfUENSRUwuCitjb21taXQgZjNhNGYzZmRkZTg5YjA0ZDY2OTgzYTQyYTI1ZDA5MTYxYzVkNGQ1NAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiA3IDA5OjU3OjIwIDIwMTMgLTA1MDAKIAotMjAwOC0xMi0xOCAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKyAgICBGaXhlcyBmb3IgQUlYIHhsYyBjb21waWxlci4KIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IDUyMmY4ZmVmNDk4NDg5Mjc0ODJiYzYzYzk0YWZhZWE1Yjg0ZTVlYzEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgNiAyMDozMTozMSAyMDEzIC0wNTAwCiAKLTIwMDgtMTEtMjEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+CisgICAgRml4IG1hbiBwYWdlLiBDbGVhbiBvdXQganVuay4KIAotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBzdXBwb3J0IGZvcgotCXNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2IHJldHVybiB2YWx1ZXMuCi0JKiBzcmMvc3BhcmMvdjguUyAoZmZpX2NhbGxfdjgpOiBMaWtld2lzZS4KLQkoZmZpX2Nsb3N1cmVfdjgpOiBMaWtld2lzZS4KK2NvbW1pdCBjNGRmYTI1OWViNGU4ZTZmNGMzOTc4NjhkN2ZlZTgwYWEwYmI2YTEyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDYgMTc6NDM6MjQgMjAxMyAtMDUwMAogCi0yMDA4LTA5LTI2ICBQZXRlciBPJ0dvcm1hbiAgPHBvZ21hQHRoZXdyaXR0ZW53b3JkLmNvbT4KLQkgICAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+CisgICAgQnVtcCBzb3ZlcnNpb24KIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBuZXcgbGlidG9vbC4KLQkqIE1ha2VmaWxlLmluOiBEaXR0by4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IERpdHRvLgotCSogYWNsb2NhbC5tNDogRGl0dG8uCitjb21taXQgZjYyYmQ2M2ZlNjEyM2NhZGVkYjhiMmIyYzcyZWI1NDljNDBmYmNlOQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA2IDE3OjM4OjMyIDIwMTMgLTA1MDAKIAotMjAwOC0wOC0yNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKyAgICBSZWxlYXNlIGNhbmRpZGF0ZSAxCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQWRkIEZGSV9MSU5VWCBhbmQKLQlGRklfTElOVVhfU09GVF9GTE9BVCB0byB0aGUgUE9XRVJQQ19GUkVFQlNEIGVudW0uCi0JQWRkIG5vdGUgYWJvdXQgZmxhZyBiaXRzIHVzZWQgZm9yIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNULgotCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgotCSogc3JjL3Bvd2VycGMvZmZpLmM6IEFkZCB0d28gbmV3IGZsYWdzIHRvIGluZGljYXRlIGlmIHdlIGhhdmUgb25lCi0JcmVnaXN0ZXIgb3IgdHdvIHJlZ2lzdGVyIHRvIHVzZSBmb3IgRkZJX1NZU1Ygc3RydWN0cy4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBQYXNzIHRoZSByaWdodCByZWdpc3RlciBmbGFnIGludHJvZHVjZWQgYWJvdmUuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogRml4IHRoZSByZXR1cm4gdHlwZSBmb3IKLQlGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVC4gQ29tbWVudC4KLQlBZGp1c3QgY29weXJpZ2h0IG5vdGljZS4KK2NvbW1pdCBmN2NkNjFlOWU2OGE0YTUxMTQ3ZGYwNGQ3NWJmZTViOTFiOWQ5Mjg2CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDYgMTc6Mzg6MDQgMjAxMyAtMDUwMAogCi0yMDA4LTA3LTE2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICBGaXggcGtnY29uZmlnIGluc3RhbGwgYml0cwogCi0JKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogVHVybiBJTlNOIGludG8gYW4gdW5zaWduZWQKLQlpbnQuCitjb21taXQgNmE3OTAxMjk0MjcxMjFmN2RiMmQ4NzZlNzIxOGEzMTA0ZTZkMjc0MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA2IDE3OjM3OjE1IDIwMTMgLTA1MDAKIAotMjAwOC0wNi0xNyAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKyAgICBXb3JrIGFyb3VuZCBMTFZNIEFCSSBwcm9ibGVtIG9uIHg4Ni02NAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorY29tbWl0IDM3MDExMjkzOGU3MDUxMjhmZDVkZDQwMTdmYzFhMTIxMGJkMDI3MWEKK01lcmdlOiBiYWRhMmUzIGJjYzBjMjgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBKYW4gMjcgMDU6MDk6MDQgMjAxMyAtMDgwMAogCi0yMDA4LTA2LTA3ICBKb3NlcGggTXllcnMgIDxqb3NlcGhAY29kZXNvdXJjZXJ5LmNvbT4KKyAgICBNZXJnZSBwdWxsIHJlcXVlc3QgIzI4IGZyb20ganJhbGxzL21hc3RlcgorICAgIAorICAgIFJlb3JkZXIgeDg2XzY0IGNoZWNrcwogCi0JKiBjb25maWd1cmUuYWMgKHBhcmlzYyotKi1saW51eCosIHBvd2VycGMtKi1zeXN2KiwKLQlwb3dlcnBjLSotYmVvcyopOiBSZW1vdmUuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgYmNjMGMyODAwMWI2ZDQyN2Q1Y2Q4MDM3ZDJlM2M4OTJiYWJjNmI0YworQXV0aG9yOiBKb2huIFJhbGxzIDxqcmFsbHNAY2VyaWR3ZW4udXM+CitEYXRlOiAgIFNhdCBKYW4gMjYgMTU6MjE6MTQgMjAxMyAtMDgwMAogCi0yMDA4LTA1LTA5ICBKdWxpYW4gQnJvd24gIDxqdWxpYW5AY29kZXNvdXJjZXJ5LmNvbT4KKyAgICBSZW9yZGVyIHg4Nl82NCB0ZXN0cworICAgIAorICAgIFNvIHRoYXQgZGFyd2luIGFuZCBjeWd3aW4vbWluZ3cgYXJlIHRlc3RlZCBiZWZvcmUgdGhlIGdlbmVyaWMgY2hlY2sgLS0KKyAgICB3aGljaCBhbGxvd3MgdGhlbSB0byBhY3R1YWxseSBiZSBzZXQuCiAKLQkqIE1ha2VmaWxlLmFtIChMVExERkxBR1MpOiBOZXcuCi0JKGxpYmZmaV9sYV9MREZMQUdTKTogVXNlIGFib3ZlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCitjb21taXQgYmFkYTJlMzI2ZDlhOWFjZjNhZTQwY2ZhNGY1ZDdhOWJhOTdiMmVhOAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMSAwODowMjowNyAyMDEzIC0wNTAwCiAKLTIwMDgtMDQtMTggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisgICAgVXBkYXRlIFJFQURNRQogCi0JUFIgYm9vdHN0cmFwLzM1NDU3Ci0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IDY1NWJiOGYzNjkwZmViYThlODQwYTVmMTg1NGIxZDc4ZWQwOGY2OTIKK01lcmdlOiAxMDM1ZmZiIDg0MGY5NzUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjEgMDg6MDE6MjQgMjAxMyAtMDUwMAogCi0yMDA4LTAzLTI2ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTovYXRncmVlbi9saWJmZmkKIAotCSogc3JjL3NoL3N5c3YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KLQkqIHNyYy9zaDY0L3N5c3YuUzogTGlrZXdpc2UuCitjb21taXQgMTAzNWZmYjJmNDY4ZTFhMWM0MDFkNThjZmY3ZTdhYmI2OTgzOGU2OAorTWVyZ2U6IGFlYjg3MTkgNDA4NjAyNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMSAwNzo1NTo1MyAyMDEzIC0wNTAwCiAKLTIwMDgtMDMtMjYgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CisgICAgVXBkYXRlIFJFQURNRQogCi0JKiBzcmMvYXJtL3N5c3YuUzogRml4IEFSTSBjb21tZW50IG1hcmtlci4KK2NvbW1pdCA4NDBmOTc1ODY2MDUyZmRkOTFiMmMyMjRkNTZlMDFhZTU5MDBiNjBkCitNZXJnZTogYWViODcxOSA0MDg2MDI0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIxIDA3OjU1OjUzIDIwMTMgLTA1MDAKIAotMjAwOC0wMy0yNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGdpdGh1Yi5jb206L2F0Z3JlZW4vbGliZmZpCiAKLQkqIHNyYy9hbHBoYS9vc2YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KLQkqIHNyYy9zMzkwL3N5c3YuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCi0JKiBzcmMveDg2L3VuaXg2NC5TOiBMaWtld2lzZS4KLQkqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4KLQkqIHNyYy9zcGFyYy92OC5TOiBMaWtld2lzZS4KLQkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KLQkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCi0JKiBzcmMvYXJtL3N5c3YuUzogTGlrZXdpc2UuCitjb21taXQgYWViODcxOWEzNDc1Njk2OTk3MDYwM2ZjYTQ1Njg1MzBkNTY3MDhhZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMSAwNzozNzozMCAyMDEzIC0wNTAwCiAKLTIwMDgtMDMtMTYgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisgICAgTmV3IG1pY3JvYmxhemUgc3VwcG9ydAogCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KK2NvbW1pdCA0MDg2MDI0NWE0ZmQ5MWExYjg4YWRjOTE3MWVjOTkzYzU0OWU0NWQ1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIxIDA3OjM3OjMwIDIwMTMgLTA1MDAKIAotMjAwOC0wMi0xMiAgQmpvZXJuIEtvZW5pZyAgPGJrb2VuaWdAYWxwaGEtdGllcmNoZW4uZGU+Ci0JICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisgICAgTmV3IG1pY3JvYmxhemUgc3VwcG9ydAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLWZyZWVic2QqIHRhcmdldC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCAyMGNhZTMyYjE1MmI0MzY3OWFlNjVhODVkYjlhMWM2YmI4YTE0M2RkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIxIDA3OjA3OjM4IDIwMTMgLTA1MDAKIAotMjAwOC0wMS0zMCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorICAgIFh0ZW5zYSBzdXBwb3J0CiAKLQlQUiBsaWJmZmkvMzQ2MTIKLQkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogUG9wIDQgYnl0ZSBmcm9tIHN0YWNrIHdoZW4KLQlyZXR1cm5pbmcgc3RydWN0LgorY29tbWl0IDk3NDJmOTE3ODJmYWVmNGExNTk0MTUwOGEyMmM0MDhmYjdkMWQyMjcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjEgMDc6MDM6NDEgMjAxMyAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IEFkZCAiLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIgotCXRlc3RzLgorICAgIE1lbnRpb24gSUJNIFhMIGNvbXBpbGVyIHN1cHBvcnQgb24gQUlYLgogCi0yMDA4LTAxLTI0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+Citjb21taXQgZjAzZWFiMDgyNDhmMTIyY2UzYjYyM2ExOGRmOWUxOWZhZTFiNmU5OAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEphbiAxMSAxNzoxNDoxMSAyMDEzIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKyAgICBSZW1vdmUgb2Jzb2xldGUgaW5saW5lIHRlc3QgZnVuY3Rpb25zCiAKLTIwMDgtMDEtMDYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+Citjb21taXQgMDVmYmUxZmFlZGM3YjI1ODBkNWYxNDAxMGQwMGU5ZTNjZWU3Mzk1MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEphbiAxMSAxNjo1NDo0MCAyMDEzIC0wNTAwCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4IHRoaW5rby4KKyAgICB4bGMgY29tcGlsZXIgc3VwcG9ydAogCi0yMDA4LTAxLTA1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IDBiNDk4NmE3ODg5ZWQxODY0Njc0MTkyMjI4ZjExNjJjMWI1NzcwYTgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBKYW4gMTEgMTE6MTk6NTIgMjAxMyAtMDUwMAogCi0JUFIgdGVzdHN1aXRlLzMyODQzCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBjb2RlIGZvcgotCXNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2IGZvciBYODZfREFSV0lOLgotCVVwZGF0ZWQgY29weXJpZ2h0IGluZm8uCi0JSGFuZGxlIG9uZSBhbmQgdHdvIGJ5dGUgc3RydWN0cyB3aXRoIHNwZWNpYWwgY2lmLT5mbGFncy4KLQkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IEFkZCBzcGVjaWFsIHR5cGVzIGZvciBvbmUgYW5kIHR3byBieXRlIHN0cnVjdHMuCi0JVXBkYXRlZCBjb3B5cmlnaHQgaW5mby4KLQkqIHNyYy94ODYvZGFyd2luLlMgKGZmaV9jYWxsX1NZU1YpOiBSZXdyaXRlIHRvIHVzZSBhIGp1bXAgdGFibGUgbGlrZQotCXN5c3YuUwotCVJlbW92ZSBjb2RlIHRvIHBvcCBhcmdzIGZyb20gdGhlIHN0YWNrIGFmdGVyIGNhbGwuCi0JU3BlY2lhbC1jYXNlIHNpZ25lZC91bnNpZ25lZCBmb3IgaW50OC8xNiwgb25lIGFuZCB0d28gYnl0ZSBzdHJ1Y3RzLgotCShmZmlfY2xvc3VyZV9yYXdfU1lTVik6IEhhbmRsZSBGRklfVFlQRV9VSU5UOCwKLQlGRklfVFlQRV9TSU5UOCwgRkZJX1RZUEVfVUlOVDE2LCBGRklfVFlQRV9TSU5UMTYsIEZGSV9UWVBFX1VJTlQzMiwKLQlGRklfVFlQRV9TSU5UMzIuCi0JVXBkYXRlZCBjb3B5cmlnaHQgaW5mby4KKyAgICBbdHJhdmlzXSBpbnN0YWxsIGRlamFnbnUgd2l0aCBzdWRvCiAKLTIwMDctMTItMDggIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgM2MzMzdlZWY1MWFiOWE0OTkzZmM4NzViZmEyNjI4OWRkNmEwODg4MQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEphbiAxMSAxMToxODoxNCAyMDEzIC0wNTAwCiAKLQkqIHNyYy9taXBzL24zMi5TIChmZmlfY2FsbF9OMzIpOiAgUmVwbGFjZSBkYWRkIHdpdGggQUREVSwgZHN1YiB3aXRoCi0JU1VCVSwgYWRkIHdpdGggQUREVSBhbmQgdXNlIHNtYWxsZXIgY29kZSBzZXF1ZW5jZXMuCisgICAgW3RyYXZpc10gaW5zdGFsbCBkZWphZ251CiAKLTIwMDctMTItMDcgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgOTA3MjA5NjJjZTFiYWY5ZmMzNWQxYmRlMTczODEwMmJjZDViZDVlZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEphbiAxMSAxMDo1NzozMCAyMDEzIC0wNTAwCiAKLQkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBsb25nIGRvdWJsZSByZXR1cm4KLQl0eXBlLgorICAgIEFkZCBmaXJzdCB0cmF2aXMgY29uZmlnIGZpbGUKIAotMjAwNy0xMi0wNiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCBiZmYwNTJkOWNkNWJlNDFiYTllNDdjNzYxMTQwNTRhZjQ4N2QzYzMwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgSmFuIDExIDEwOjI0OjMyIDIwMTMgLTA1MDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX1NJWkVPRl9KQVZBX1JBVyk6IERlZmluZSBpZiBub3QJYWxyZWFkeQotCWRlZmluZWQuCi0JKGZmaV9qYXZhX3Jhdyk6IE5ldyB0eXBlZGVmLgotCShmZmlfamF2YV9yYXdfY2FsbCwgZmZpX2phdmFfcHRyYXJyYXlfdG9fcmF3LAotCWZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IENoYW5nZSBwYXJhbWV0ZXIgdHlwZXMgZnJvbSBmZmlfcmF3IHRvCi0JZmZpX2phdmFfcmF3LgotCShmZmlfamF2YV9yYXdfY2xvc3VyZSkgOiBTYW1lLgotCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlLCBmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYyk6IENoYW5nZQotCXBhcmFtZXRlciB0eXBlcy4KLQkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3NpemUpOiAgUmVwbGFjZSBGRklfU0laRU9GX0FSRyB3aXRoCi0JRkZJX1NJWkVPRl9KQVZBX1JBVy4KLQkoZmZpX2phdmFfcmF3X3RvX3B0cmFycmF5KTogQ2hhbmdlIHR5cGUgb2YgcmF3IHRvIGZmaV9qYXZhX3Jhdy4KLQlSZXBsYWNlIEZGSV9TSVpFT0ZfQVJHIHdpdGggRkZJX1NJWkVPRl9KQVZBX1JBVy4gVXNlCi0Jc2l6ZW9mKGZmaV9qYXZhX3JhdykgZm9yIGFsaWdubWVudCBjYWxjdWxhdGlvbnMuCi0JKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IFNhbWUuCi0JKGZmaV9qYXZhX3J2YWx1ZV90b19yYXcpOiBBZGQgc3BlY2lhbCBoYW5kbGluZyBmb3IgRkZJX1RZUEVfUE9JTlRFUgotCWlmIEZGSV9TSVpFT0ZfSkFWQV9SQVcgPT0gNC4KLQkoZmZpX2phdmFfcmF3X3RvX3J2YWx1ZSk6IFNhbWUuCi0JKGZmaV9qYXZhX3Jhd19jYWxsKTogQ2hhbmdlIHR5cGUgb2YgcmF3IHRvIGZmaV9qYXZhX3Jhdy4KLQkoZmZpX2phdmFfdHJhbnNsYXRlX2FyZ3MpOiBTYW1lLgotCShmZmlfcHJlcF9qYXZhX3Jhd19jbG9zdXJlX2xvYywgZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSk6IENoYW5nZQotCXBhcmFtZXRlciB0eXBlcy4KLQkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfU0laRU9GX0pBVkFfUkFXKTogRGVmaW5lIGZvciBOMzIgQUJJLgorICAgIDMyLWJpdCB4ODYgZml4IGFuZCBtb3JlCiAKLTIwMDctMTItMDYgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgY2Q0MWFlYWI2MTc2ZjgzOTE2Nzk1NWMwMTZlY2MxOWY2NWY3NWRmMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEphbiAxMCAxNzoyNTo0NSAyMDEzIC0wNTAwCiAKLQkqIHNyYy9taXBzL24zMi5TIChmZmlfY2xvc3VyZV9OMzIpOiBVc2UgNjQtYml0IGFkZCBpbnN0cnVjdGlvbiBvbgotCXBvaW50ZXIgdmFsdWVzLgorICAgIEFkZCBjb21waWxlciBjb2x1bW4gdG8gdGFibGUKIAotMjAwNy0xMi0wMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCA4YmY5ODdkNGRmN2M0ZDIxNDM1YjkyMTFmNmNjODZhYmY1OTA0YjQyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgSmFuIDEwIDE3OjI0OjUxIDIwMTMgLTA1MDAKIAotCVBSIGxpYmZmaS8zMTkzNwotCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEludHJvZHVjZSBuZXcgQUJJIEZGSV9MSU5VWF9TT0ZUX0ZMT0FULgotCUFkZCBsb2NhbCBGRklfVFlQRV9VSU5UMTI4IHRvIGhhbmRsZSBzb2Z0LWZsb2F0IGxvbmctZG91YmxlLTEyOC4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBEaXN0aW5ndWlzaCBiZXR3ZWVuIF9fTk9fRlBSU19fIGFuZCBub3QgYW5kCi0Jc2V0IHRoZSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgYWNjb3JkaW5nIHRvLgotCUFkZCBzdXBwb3J0IGZvciBwb3RlbnRpYWwgc29mdC1mbG9hdCBzdXBwb3J0IHVuZGVyIGhhcmQtZmxvYXQKLQlhcmNoaXRlY3R1cmUuCi0JKGZmaV9wcmVwX2FyZ3NfU1lTVik6IFNldCBOVU1fRlBSX0FSR19SRUdJU1RFUlMgdG8gMCBpbiBjYXNlIG9mCi0JRkZJX0xJTlVYX1NPRlRfRkxPQVQsIGhhbmRsZSBmbG9hdCwgZG91YmxlcyBhbmQgbG9uZy1kb3VibGVzIGFjY29yZGluZwotCXRvIHRoZSBGRklfTElOVVhfU09GVF9GTE9BVCBBQkkuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBNYWtlIHN1cmUgbm90IHRvIHN0b3JlIGZsb2F0L2RvdWJsZQotCW9uIGFyY2hzIHdoZXJlIF9fTk9fRlBSU19fIGlzIHRydWUuCi0JQWRkIEZGSV9UWVBFX1VJTlQxMjggc3VwcG9ydC4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUzogQWRkIHN1cHBvcnQgZm9yIHNvZnQtZmxvYXQgbG9uZy1kb3VibGUtMTI4LgotCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorICAgIEZpeCBmb3Igc3VucHJvIGNvbXBpbGVyIG9uIFNvbGFyaXMKIAotMjAwNy0xMS0yNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCAzZWU3NGZkNmRjOGNjZDMyYjYwOGJiZmY3MzUyNjgzOGZjMzRmNzBiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgSmFuIDEwIDE3OjE1OjAzIDIwMTMgLTA1MDAKIAotCSogc3JjL2Nsb3N1cmVzLmM6IE1vdmUgZGVmaW50aW9uIG9mIE1BWUJFX1VOVVNFRCBmcm9tIGhlcmUgdG8gLi4uCi0JKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogLi4uIGhlcmUuCi0JVXBkYXRlIGNvcHlyaWdodC4KKyAgICBVcGRhdGUgZG9jdW1lbnRhdGlvbiB2ZXJzaW9uLgogCi0yMDA3LTExLTE3ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IDEzZTJkN2I5MjU1N2E5NTExYTA0MTRkZjgyYmYyZGYzZWRjNTVjYmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBKYW4gMTAgMTA6NTI6MDIgMjAxMyAtMDUwMAogCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExvYWQgY29ycmVjdCBjciB0byBjb21wYXJlIGlmIHdlIGhhdmUgbG9uZyBkb3VibGUuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvZmZpLmM6IEFkZCBhIGNvbW1lbnQgdG8gc2hvdyB3aGljaCBwYXJ0IGdvZXMgaW50byBjcjYuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xkbC5jOiBOZXcgdGVzdC4KKyAgICBIYW5kbGUgYm90aCAzMiBhbmQgNjQtYml0IHg4NiBidWlsZHMgcmVnYXJkbGVzcyBvZiB0YXJnZXQgdHJpcGxlCiAKLTIwMDctMDktMDQgICAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDUxNDE1NDMwMDBmYzg2YTNkNDlhOTA3YTIzMTM3MTNlZTc5ZTUwNGQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBKYW4gMTAgMDc6MzU6NTMgMjAxMyAtMDUwMAogCi0JKiBzcmMvYXJtL3N5c3YuUyAoVU5XSU5EKTogTmV3LgotCShXaG9sZSBmaWxlKTogQ29uZGl0aW9uYWxseSBjb21waWxlIHVud2luZGVyIGRpcmVjdGl2ZXMuCi0JKiBzcmMvYXJtL3N5c3YuUzogQWRkIHVud2luZGVyIGRpcmVjdGl2ZXMuCisgICAgRG9uJ3QgcnVuIEVIIHRlc3RzIHdpdGggbm9uLUdOVSBjb21waWxlcgogCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogQWxpZ24gc3RydWN0cyBieSBhdCBsZWFzdCA0IGJ5dGVzLgotCU9ubHkgdHJlYXQgcjAgYXMgYSBzdHJ1Y3QgYWRkcmVzcyBpZiB3ZSdyZSBhY3R1YWxseSByZXR1cm5pbmcgYQotCXN0cnVjdCBieSBhZGRyZXNzLgotCU9ubHkgY29weSB0aGUgYnl0ZXMgdGhhdCBhcmUgYWN0dWFsbHkgd2l0aGluIGEgc3RydWN0LgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEEgQ29tcG9zaXRlIFR5cGUgbm90IGxhcmdlciB0aGFuIDQgYnl0ZXMKLQlpcyByZXR1cm5lZCBpbiByMCwgbm90IHBhc3NlZCBieSBhZGRyZXNzLgotCShmZmlfY2FsbCk6IEFsbG9jYXRlIGEgd29yZC1zaXplZCB0ZW1wb3JhcnkgZm9yIHRoZSBjYXNlIHdoZXJlCi0JYSBjb21wb3NpdGUgaXMgcmV0dXJuZWQgaW4gcjAuCi0JKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IEFsaWduIGFzIG5lY2Vzc2FyeS4KK2NvbW1pdCA1NmJhOGQ4NmY0NzkzN2EwYWZiODFhMmI5ZTc3YzlkMjM1ZDlkYjQ1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgSmFuIDEwIDA3OjI1OjEwIDIwMTMgLTA1MDAKIAotMjAwNy0wOC0wNSAgU3RldmVuIE5ld2J1cnkgIDxzX2pfbmV3YnVyeUB5YWhvby5jby51az4KKyAgICBEb24ndCB1c2Ugd2FybmluZyBjaGVja2luZyBtYWNybyB3aXRoIHN1biBjb21waWxlcgogCi0JKiBzcmMvYXJtL2ZmaS5jIChGRklfSU5JVF9UUkFNUE9MSU5FKTogVXNlIF9fY2xlYXJfY2FjaGUgaW5zdGVhZCBvZgotCWRpcmVjdGx5IHVzaW5nIHRoZSBzeXNfY2FjaGVmbHVzaCBzeXNjYWxsLgorY29tbWl0IDZhMDI4Y2FlYzFiMmM3OTA0ZmViNGM0ZjljYjdlMTEyNWUxZDFiNjAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBKYW4gMTAgMDE6MTk6NDMgMjAxMyAtMDUwMAogCi0yMDA3LTA3LTI3ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICBEb24ndCB1c2UgR0NDaXNtcyB0byBkZWZpbmUgdHlwZXMgd2hlbgorICAgICsgICAgICAgYnVpbGRpbmcgd2l0aCB0aGUgU1VOUFJPIGNvbXBpbGVyLgogCi0JKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCBzb2Z0LWZsb2F0LgorY29tbWl0IDJkOWIzOTM5NzUxYjNlZjk3MzkwNDk1MDlkMzUzYWRlMTBiMzJhOGYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gOSAyMToxNDo1NCAyMDEzIC0wNTAwCiAKLTIwMDctMDktMDMgIE1hY2llaiBXLiBSb3p5Y2tpICA8bWFjcm9AbGludXgtbWlwcy5vcmc+CisgICAgRml4IGZvciBjbG9zdXJlcyB3aXRoIHN1bnBybyBjb21waWxlcgogCi0JKiBNYWtlZmlsZS5hbTogVW5pZnkgTUlQU19JUklYIGFuZCBNSVBTX0xJTlVYIGludG8gTUlQUy4KLQkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCitjb21taXQgODMwODk4NGU0NzllMzI3NGEzNmU5OGU4MjcyYjVhZGJiNmI3NzRjMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEphbiA4IDE1OjE0OjIxIDIwMTMgLTA1MDAKIAotMjAwNy0wOC0yNCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKyAgICBNYWtlIHN1cmUgd2UncmUgcnVubmluZyBkZWphZ251IHRlc3RzIHdpdGggdGhlIHJpZ2h0IGNvbXBpbGVyLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NsLmM6IE5ldyB0ZXN0LgorY29tbWl0IGYyNmM3Y2E2NzE0NzQ1MGRiMmZlMjVlYTkzMjk0NGU2Y2YxNDVkNWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKYW4gOCAxNDo0NzowNSAyMDEzIC0wNTAwCiAKLTIwMDctMDgtMTAgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisgICAgTWFrZSBjb21waWxlciBvcHRpb25zIGluIGRlamFnbnUgcnVucyBjb21waWxlciBzcGVjaWZpYwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYywKLQl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogUmVtb3ZlIHhmYWlsIGZvciBtaXBzNjQqLSotKi4KK2NvbW1pdCA3NGM3NzZlMjE5MDdmYzJlNTkyNTdjMDIxZjIzMDc3ZjhiNzk2NmNiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSmFuIDggMTI6MjU6NTQgMjAxMyAtMDUwMAogCi0yMDA3LTA4LTEwICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorICAgIFN3aXRjaCB4ODYgU29sYXJpcyB0byBYODYgZnJvbSBYODZfNjQKIAotCVBSIGxpYmZmaS8yODMxMwotCSogY29uZmlndXJlLmFjOiBEb24ndCB0cmVhdCBtaXBzNjQgYXMgYSBzcGVjaWFsIGNhc2UuCi0JKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIG4zMi5TLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlCi0JKiBNYWtlZmlsZS5pbjogRGl0dG8uCi0JKiBmZmljb25maWcuaC5pbjogRGl0dG8uCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoUkVHX0wsIFJFR19TLCBTVUJVLCBBRERVLCBTUkwsIExJKTogSW5kZW50LgotCShMQSwgRUhfRlJBTUVfQUxJR04sIEZERV9BRERSX0JZVEVTKTogTmV3IHByZXByb2Nlc3NvciBtYWNyb3MuCi0JKEZGSV9ERUZBVUxUX0FCSSk6IFNldCBmb3IgbjY0IGNhc2UuCi0JKEZGSV9DTE9TVVJFUywgRkZJX1RSQU1QT0xJTkVfU0laRSk6IERlZmluZSBmb3IgbjMyIGFuZCBuNjQgY2FzZXMuCi0JKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2NhbGxfTjMyKTogQWRkIGRlYnVnIG1hY3JvcyBhbmQgbGFiZWxzIGZvciBGREUuCi0JKGZmaV9jbG9zdXJlX04zMik6IE5ldyBmdW5jdGlvbi4KLQkoLmVoX2ZyYW1lKTogTmV3IHNlY3Rpb24KLQkqIHNyYy9taXBzL28zMi5TOiBDbGVhbiB1cCBjb21tZW50cy4KLQkoZmZpX2Nsb3N1cmVfTzMyKTogUGFzcyBmZmlfY2xvc3VyZSBwYXJhbWV0ZXIgaW4gJDEyLgotCSogc3JjL21pcHMvZmZpLmM6IFVzZSBGRklfTUlQU19OMzIgaW5zdGVhZCBvZgotCV9NSVBTX1NJTSA9PSBfQUJJTjMyIHRocm91Z2hvdXQuCi0JKEZGSV9NSVBTX1NUT1BfSEVSRSk6IE5ldywgdXNlIGluIHBsYWNlIG9mCi0JZmZpX3N0b3BfaGVyZS4KLQkoZmZpX3ByZXBfYXJncyk6IFVzZSB1bnNpZ25lZCBsb25nIHRvIGhvbGQgcG9pbnRlciB2YWx1ZXMuICBSZXdyaXRlCi0JdG8gc3VwcG9ydCBuMzIvbjY0IEFCSXMuCi0JKGNhbGNfbjMyX3N0cnVjdF9mbGFncyk6IFJld3JpdGUuCi0JKGNhbGNfbjMyX3JldHVybl9zdHJ1Y3RfZmxhZ3MpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLiAgUmV2ZXJzZQotCXBvc2l0aW9uIG9mIGZsYWcgYml0cy4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBSZXdyaXRlIG4zMiBwb3J0aW9uLgotCShmZmlfY2FsbCk6IEVuYWJsZSBmb3IgbjY0LiAgQWRkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHNtYWxsIHN0cnVjdHVyZQotCXJldHVybiB2YWx1ZXMuCi0JKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWRkIG4zMiBhbmQgbjY0IHN1cHBvcnQuCi0JKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogQWRkIGNhc3QgdG8gc2lsZW5jZSB3YXJuaW5nLgotCShjb3B5X3N0cnVjdF9OMzIsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogTmV3IGZ1bmN0aW9ucy4KK2NvbW1pdCA4OTYyYzhjOGQwNjgwM2UzMTBiYWMwZmZjOGU4NGVhMTVkYWVmZjNmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSmFuIDggMTI6MjI6MjQgMjAxMyAtMDUwMAorCisgICAgRml4IHJlYWQtb25seSBlaF9mcmFtZSB0ZXN0CisKK2NvbW1pdCAzNWRkYjY5YzJiNDk3NDZkOTQwZTkxOWNhMjI2ZWNjMWJlOTRmMTRhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgSmFuIDggMDc6NTM6MzcgMjAxMyAtMDUwMAorCisgICAgT25seSBlbWl0IERXQVJGIHVud2luZCBpbmZvIHdoZW4gYnVpbGRpbmcgd2l0aCBHQ0MKKworY29tbWl0IGY3ODc5YmMzZjNhOGQwYmJmY2MzODc3MTczMmMxNjBhNThiYTljZDgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBKYW4gOCAwNzozMDoyOCAyMDEzIC0wNTAwCisKKyAgICBUZXN0c3VpdGUgZml4IGZvciBTb2xhcmlzIHZlbmRvciBjb21waWxlcgorCitjb21taXQgNjdjZWE5MGZjMDg5NzAyMTQ2NmZkMTAyNjcxMDE5ZDMwZGI0NzRjZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiA3IDA2OjMwOjI0IDIwMTMgLTA1MDAKKworICAgIG1lbmQKKworY29tbWl0IDBkZTMyNzdiMThjZjU0YmUzYjgxZDUwOWI5YmU5YjQ3ZDliYzFlODIKK0F1dGhvcjogVGhvcnN0ZW4gR2xhc2VyIDx0Z0BtaXJic2QuZGU+CitEYXRlOiAgIE1vbiBEZWMgMyAwMDowMjozMSAyMDEyICswMDAwCisKKyAgICBUZXN0c3VpdGUgZml4ZXMgKHdhcyBSZTogW1BBVENIXSBGaXggbGliZmZpIG9uIG02OGstbGludXgtZ251LCBjb21wbGV0ZWx5KQorICAgIAorICAgIERpeGkgcXVvZOKApgorICAgIAorICAgID5hbHRob3VnaCBJIGJlbGlldmUgc29tZSAzLjAuMTEgY2hlY2tzIHRvIGJlIGJyb2tlbjoKKyAgICAKKyAgICBBbmQgaW5kZWVkLCB3aXRoIGEgZmV3IG1pbm9yIGNoYW5nZXMgb24gdG9wIG9mIGdpdCBtYXN0ZXIsCisgICAgSSBzdGlsbCBnZXQgYSBmdWxsIHJ1biBvZiBQQVNTIHBsdXMgb25lIFhQQVNTIG9uIGFtZDY0LWxpbnV4IQorICAgIAorICAgIFdpdGggdGhlIG90aGVyIHBhdGNoZXMgKGZyb20gdGhpcyBtZXNzYWdl4oCZcyBwYXJlbnQpIGFuZAorICAgIHRoZXNlIGFwcGxpZWQsIEkgZ2V0IGEgZnVsbCBQQVNTIG9uIG02OGstbGludXggYXMgd2VsbC4KKyAgICAKKyAgICBTbywgcGxlYXNlIGdpdCBhbSB0aGVzZSB0aHJlZSBkaWZmcyDimLoKKyAgICAKKyAgICBieWUsCisgICAgLy9taXJhYmlsb3MKKyAgICAtLQorICAgIEZXSVcsIEknbSBxdWl0ZSBpbXByZXNzZWQgd2l0aCBta3NoIGludGVyYWN0aXZlbHkuIEkgdGhvdWdodCBpdCB3YXMgbXVjaAorICAgICptdWNoKiBtb3JlIGJhcmUgYm9uZXMuIEJ1dCBpdCB0dXJucyBvdXQgaXQgYmVhdHMgdGhlIGxpdmluZyBoZWxsIG91dCBvZgorICAgIGtzaDkzIGluIHRoYXQgcmVzcGVjdC4gSSdkIGV2ZW4gY29uc2lkZXIgaXQgZm9yIG15IGRhaWx5IHVzZSBpZiBJIGhhZG4ndAorICAgIHdhc3RlZCBoYWxmIG15IGxpZmUgb24gbXkgenNoIHNldHVwLiA6LSkgLS0gRnJhbmsgVGVyYmVjayBpbiAjIS9iaW4vbWtzaAorICAgIEZyb20gNWNiMTVhM2JhZDFmMGZiMzYwNTIwZGQ0OGJmYzkzOGM4MjFjZGNjYSBNb24gU2VwIDE3IDAwOjAwOjAwIDIwMDEKKyAgICBGcm9tOiBUaG9yc3RlbiBHbGFzZXIgPHRnQG1pcmJzZC5vcmc+CisgICAgRGF0ZTogU3VuLCAyIERlYyAyMDEyIDIzOjIwOjU2ICswMDAwCisgICAgU3ViamVjdDogW1BBVENIIDEvMl0gRml4IHRlc3RzIHdyaXRpbmcgdG8gYSBjbG9zdXJlIHJldHZhbCB2aWEgcG9pbnRlciBjYXN0cworICAgIAorICAgIEFzIGV4cGxhaW5lZCBpbiA8UGluZS5CU00uNC42NEwuMTIxMjAyMjAxNDQ5MC4yMzQ0MkBoZXJjLm1pcmJzZC5vcmc+CisgICAgYWxsIG90aGVyIHRlc3RzIHRoYXQgZG8gdGhlIHNhbWUgY2FzdCB0byBhbiBmZmlfYXJnIHBvaW50ZXIgaW5zdGVhZC4KKyAgICAKKyAgICBQQVNTIG9uIGFtZDY0LWxpbnV4IChYZW4gZG9tVSkgYW5kIG02OGstbGludXggKEFSQW55TSkKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBUaG9yc3RlbiBHbGFzZXIgPHRnQG1pcmJzZC5vcmc+CisKK2NvbW1pdCA4ZjQ3NzJmMzgzYWJkNzFjZmExNDFjOGE3MGJhMTFjMWFhNGViZTJjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDcgMDY6MTQ6NTMgMjAxMyAtMDUwMAorCisgICAgbTY4ayBmaXhlcyBmb3Igc2lnbmVkIDggYW5kIDE2LWJpdCBjYWxscy4KKworY29tbWl0IGVhN2Y4NDQwZDU4YWZiZWJiMTgxZTI5NWZmNTY0ZmRmM2Q2NTkwYTAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBKYW4gNCAwOTowOTozMiAyMDEzIC0wNTAwCisKKyAgICByZW1vdmUgZ2NjLWlzbQorCitjb21taXQgZjA2YzBmMTAzNzdhYzA0ZWViYTVlNjMyZGJlNWM2MmM2MjlkZjRlNgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA5OjM5OjE3IDIwMTMgLTA1MDAKKworICAgIEFkZCBtaXNzaW5nIENoYW5nZUxvZyBlbnRyeSBhbmQgZ2VuZXJhdGVkIGZpbGVzLgorCitjb21taXQgMWY4Njc1ZDRjMTAxZDE5ZDY3Y2EwYTU1ZmYyYmE5NzMzNDk1NThhZAorTWVyZ2U6IDMzNWY0MTkgZjZiNThkMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA2OjM0OjM4IDIwMTMgLTA4MDAKKworICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMjYgZnJvbSByb2ZsMHIvbWFzdGVyCisgICAgCisgICAgZml4IGJ1aWxkIGVycm9yIG9uIHBwYyB3aGVuIGxvbmcgZG91YmxlID09IGRvdWJsZQorCitjb21taXQgMzM1ZjQxOWE4NjA5MGNkYTlmMjE1ZDE0OTU3MmY5NDgxYzNhZDAzNAorTWVyZ2U6IDUzMjM2ZDUgNmQ2ZjcxMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA2OjMwOjAzIDIwMTMgLTA4MDAKKworICAgIE1lcmdlIHB1bGwgcmVxdWVzdCAjMjMgZnJvbSBydXJiYW4vbWFzdGVyCisgICAgCisgICAgY3lnd2luL21pbmd3IHNoYXJlZCBsaWJzIG5lZWQgbGlidG9vbCBMREZMQUdTID0gLW5vLXVuZGVmaW5lZAorCitjb21taXQgNTMyMzZkNTA2MTAzNGNjMGE3ZjQ2NDdmYzFiZDA1YmExYWViM2QyYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA5OjI0OjU1IDIwMTMgLTA1MDAKKworICAgIFJlZ2VuZXJhdGUgZmlsZXMKKworY29tbWl0IDcyMjIyY2EzZmJlNTYwZTEzYzhkYzg5Y2E0NDFiMjhiN2NjNzRkYWYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwOTowNjozOCAyMDEzIC0wNTAwCisKKyAgICBVcGRhdGUgdGV4aW5mby50ZXgKKworY29tbWl0IDFlMzI2Yzk1NDMxZmM5ODk2NDIyZmEzNjY1OWYzZTgzMzg1MjU3OWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwOTowNTowMiAyMDEzIC0wNTAwCisKKyAgICBVcGRhdGUgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViCisKK2NvbW1pdCBjYjY2NzFmNWI4YTk1OTZmZjk2OGM2YjZjMzA0ZjcwYWRmNzFiMzY4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDg6NTY6MDcgMjAxMyAtMDUwMAorCisgICAgTWlzc2luZyAuZ2l0aWdub3JlIGNoYW5nZXMgZm9yIHhjb2RlIHN1cHBvcnQKKworY29tbWl0IGViYmU3Nzk2Njg1NTM5NWEyYTQ3ZWQyYzA5YTM4ZjkzZWIwNDgxY2YKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwODo1NDowNSAyMDEzIC0wNTAwCisKKyAgICBtaXNzZWQgeDMyIGxpYnRvb2wgcGF0Y2guCisKK2NvbW1pdCA0Mzk0MDk2ZGEwYWNhMGRkNDIyYjQ3OWEwNDNjMThiNGYwNWM1NzcwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgSmFuIDIgMDg6NTE6MzUgMjAxMyAtMDUwMAorCisgICAgbWlzc2VkIHRyYW1wb2xpbmVfdGFibGUgcGF0Y2guIE1vdmUgdG8gR0NDLgorCitjb21taXQgZWQ3YTU5YzNmZjdjODRiZDk1YzM3NGE1YWZmMjE1OTlmNzA1ZTZkYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA4OjQ4OjAxIDIwMTMgLTA1MDAKKworICAgIFdpbmRvd3Mgc3ltYm9sIGV4cG9ydCBmaXguICBNb3ZlIHRvIEdDQy4KKworY29tbWl0IGNjZWUwOWE0ZmY4NDNiMTFjN2Q4YjY4MTk3NzZmNTdkMTg3MzA1YzcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBKYW4gMiAwODo0MTo1NSAyMDEzIC0wNTAwCisKKyAgICArMjAxMi0wMy0yMSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorICAgICsKKyAgICArICAgICAgICogdGVzdHN1aXRlL2xpYi90YXJnZXQtbGlicGF0aC5leHAgWyotKi1jeWd3aW4qLCAqLSotbWluZ3cqXQorICAgICsgICAgICAgKHNldF9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBBZGQgdGhlIGxpYnJhcnkgc2VhcmNoIGRpciB0byBQQVRICisgICAgKyAgICAgICAoYW5kIHNhdmUgUEFUSCBmb3IgbGF0ZXIpLgorICAgICsgICAgICAgKHJlc3RvcmVfbGRfbGlicmFyeV9wYXRoX2Vudl92YXJzKTogUmVzdG9yZSBQQVRILgorCitjb21taXQgMDg5ZGJjZTdjYzA4ODllYjI2NDQ0ZDg5YWUwNjJjNzNjNjlmMjZmMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA4OjM3OjM1IDIwMTMgLTA1MDAKKworICAgIG1lZAorCitjb21taXQgOTgwYTMzNGM0MmI0YjBlZmYzMmU1NTkyOWVjNjcyN2QxMzI2YjA1ZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA3OjM2OjQyIDIwMTMgLTA1MDAKKworICAgIFRlc3QgR0NDIHVwZGF0ZQorCitjb21taXQgOGJhZDY3OWFkZTUwMDBlNTdjZGM5Y2FjZGUyMmU4Yjk5ODQwOTMwZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA4OjI4OjM1IDIwMTMgLTA1MDAKKworICAgIE5ldyBzdGFuZC1hbG9uZSBwYXRjaAorCitjb21taXQgOTgxYzMyZWUxMTVlOWYwZDY1NDZhNzQ1OTI4NzVlMTM4MjIyYTlkMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEphbiAyIDA3OjM0OjAzIDIwMTMgLTA1MDAKKworICAgIE1lcmdlIHdpdGggR0NDLiAgRWxpbWluYXRlIHF1aWx0IGJpdHMuCisKK2NvbW1pdCA2MWEwNTQ5Mjk1MTdmYjgwYzQzN2JhNzFjOTFmM2UyMGNmZmY1ODFhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgTm92IDI4IDA2OjA3OjQxIDIwMTIgLTA1MDAKKworICAgIFJlZnJlc2ggY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViCisKK2NvbW1pdCBmNmI1OGQyYmRjMGEyNGNlOTRkZWRjZTU5ODAyZjA5MTk3OWRmMjY1CitBdXRob3I6IHJvZmwwciA8cmV0bnlnQGdteC5uZXQ+CitEYXRlOiAgIFRodSBOb3YgMjIgMTY6MjY6MjEgMjAxMiArMDEwMAorCisgICAgZml4IGJ1aWxkIG9uIHBwYyB3aGVuIGxvbmcgZG91YmxlID09IGRvdWJsZQorCitjb21taXQgNjlkYTMzYTA3NjFhZWFjNzNmOWU5NjQ2MjY5ZGE2MWM5MDZkNjAyMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE5vdiAxMiAxNToyNTo0NyAyMDEyIC0wNTAwCisKKyAgICBQdWxsIGluIGNvbmZpZy5zdWIgZm9yIGFhcmNoNjQgc3VwcG9ydCBhbmQgbW9yZQorCitjb21taXQgZjY4MGI1OThiN2JkZGUzMjVhYzkzNDllOGMzNTE1MWMyMjhiZjJkZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE5vdiA2IDE2OjAwOjQwIDIwMTIgLTA1MDAKKworICAgIEFkZCBtaXNzaW5nIGFhcmNoNjQgY29uZmlndXJ5IGJpdHMKKworY29tbWl0IGRmYWRmYjE5ODUzYzU3Yzg2MjNjNDM2ZDBlZjJiZGFmYWIyNGI0MzMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBPY3QgMzEgMDY6NDY6NDEgMjAxMiAtMDQwMAorCisgICAgUmViYXNlIGZvciBwcGM2NCBmaXgKKworY29tbWl0IGU5NDRiOGM3ZWIxZTJlZWI5YzBmM2I5NzQyYjRkN2Y0NzY4NjBjZTEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMzAgMTQ6MDY6MDkgMjAxMiAtMDQwMAorCisgICAgQWRkIFBhWCB3b3JrLWFyb3VuZAorCitjb21taXQgOWNjZDUxYmUxZmRlYjk5ZjhiNGY0MmY5MDUxNjZjMmFiYmJhOGFjMAorTWVyZ2U6IGYzNDI5OTYgZmE1ZDc0NworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAzMCAxMzozNzozNyAyMDEyIC0wNDAwCisKKyAgICBGaXggY29tbWl0IGNvbmZsaWN0cworCitjb21taXQgZjM0Mjk5NmNiNTBlYjIzYjg2OGFmY2ZmNWFjMGNkYmI2YjUwNWQ2MworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAzMCAwNzo0MjoyNyAyMDEyIC0wNDAwCisKKyAgICBEYXJ3aW4xMiBmaXgKKworY29tbWl0IDU4ZThiNjZmNzBjZWYyZTNjOWIwZTVhNzA3YjQ1ZDYzNGNiYmY1ZDkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBPY3QgMzAgMDc6MDc6MTkgMjAxMiAtMDQwMAorCisgICAgQUFyY2g2NCBwb3J0CisKK2NvbW1pdCBmYTVkNzQ3OTA1NDcyNTcxZmQ0NzJjMDdkNDcyNjAxNzYyNGY2NmIzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgT2N0IDMwIDA3OjA3OjE5IDIwMTIgLTA0MDAKKworICAgIEFBcmNoNjQgcG9ydAorCitjb21taXQgNjk5M2E2Njg2ZjQzZjIzMTNiMTgxNDJjMWU5NjE4OWEyN2RiMmFhMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIE9jdCAzMCAwNjo1OTozMiAyMDEyIC0wNDAwCisKKyAgICBGaXggYXV0b2NvbmYgbWFjcm9zCisKK2NvbW1pdCA3MDA4NGU3MGRkYjEzYjI5ZGQwNWM3NTFiMTkwNGRlMjA2YmJlNzkwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgT2N0IDEyIDIzOjU1OjA2IDIwMTIgLTA0MDAKKworICAgIFVwZGF0ZSBUaWxlKiBwb3J0IGluZm8KKworY29tbWl0IDljMDBhM2Y2NzQyZDYxNDA0YjMxMjY4Y2M3NzNlNzEzMGZmNDMzMzEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBPY3QgMTIgMTY6NDY6MDYgMjAxMiAtMDQwMAorCisgICAgVElMRS1HeC9USUxFUHJvIHN1cHBvcnQKKworY29tbWl0IDA0OGQyZjQxYzNhNjY2NGI0YjY0YmYyMWU4MDQ2ODY2NjJkYTQxNjAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBPY3QgMTEgMTA6NTU6MjUgMjAxMiAtMDQwMAorCisgICAgUmViYXNlCisKK2NvbW1pdCA2ZDZmNzExMDgwNjRmNTA2OWVkZDdiZjc3MTA1OWQzYjgyNjQwMTM1CitBdXRob3I6IFJlaW5pIFVyYmFuIDxydXJiYW5AY3BhbmVsLm5ldD4KK0RhdGU6ICAgU2F0IEp1bCA3IDEyOjQyOjAwIDIwMTIgLTA1MDAKKworICAgIGN5Z3dpbi9taW5ndyBzaGFyZWQgbGlicyBuZWVkIGxpYnRvb2wgTERGTEFHUyA9IC1uby11bmRlZmluZWQKKyAgICAKKyAgICBvdGhlcndpc2Ugb25seSBzdGF0aWMgbGlicyBhcmUgY3JlYXRlZC4KKworY29tbWl0IGQzMzBmMTkyOTJkYThmMzlhNzhhOWUyYjBiYTA4ZGY4MDk0ZTNiYzUKK0F1dGhvcjogTmljb2xhcyBMZWxvbmcgPHJvdG9nbHVwPgorRGF0ZTogICBTYXQgTWF5IDUgMDk6Mzc6MDIgMjAxMiAtMDQwMAorCisgICAgaU9TIGJ1aWxkIGZpeGVzLgorCitjb21taXQgMDliMjNjZmMxZDZkMTUzNjFlZWUxODgxODg1MWZkM2NhY2IyNjU1OQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEFwciAyNyAwODoyOTo0OCAyMDEyIC0wNDAwCisKKyAgICBVcGRhdGUgUkVBRE1FIHdpdGggQmxhY2tmaW4vdUNsaW51eCBzdXBwb3J0CisKK2NvbW1pdCAyMTNlZDE1YzcwZTcyZDY2NjE1NGMwOGUyYjQxZGFlM2Y2MWYyMGQzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgQXByIDI3IDAxOjM0OjE1IDIwMTIgLTA0MDAKKworICAgIEFkZCBibGFja2ZpbiBzdXBwcnQgZnJvbSBBbGV4YW5kcmUgS2V1bmVja2UuCisKK2NvbW1pdCBmZjNkNzZmZDQyNzM4MmNlN2QyYjJlZDU0YWNkZDBiY2U0NzBjYTRmCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgQXByIDExIDIzOjE2OjQ4IDIwMTIgLTA0MDAKKworICAgIDMuMC4xMQorCitjb21taXQgN2UwYTQxMmM0ZmQ5Y2JlNzdiNDY3YTliZjg2ZjU2YWVhNjI2MzJjMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEFwciAxMSAyMjo0Nzo0NCAyMDEyIC0wNDAwCisKKyAgICBVcGRhdGUgZmlsZXMgdG8gc2hpcAorCitjb21taXQgMzllNmE1ODYwNDE2ZjdiYWQ5OTIxNDk4MTdlMWRhMWJhN2M0NjBkNAorQXV0aG9yOiBaYWNoYXJ5IFdhbGRvd3NraSA8endhbGRvd3NraUBnbWFpbC5jb20+CitEYXRlOiAgIFdlZCBBcHIgMTEgMjI6Mzk6NDYgMjAxMiAtMDQwMAorCisgICAgTW9yZSBtYWMvaW9zIGJ1aWxkIGltcHJvdmVtZW50cworCitjb21taXQgODUzY2M3MjJhMTZmOGQxMjU0NTczZWYzYmI3M2M3YjhmM2Q4YTExMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEFwciAxMCAwNjozMzozMyAyMDEyIC0wNDAwCisKKyAgICBGaXggdHlwbyBmb3IgZGFyd2luIHRhcmdldHMKKworY29tbWl0IDNmNTAyMzA2OGNkYTA3YTNkZDZkYWNiYWE4NzVhNWI1ZmM5NmQ0YmIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBBcHIgNiAyMDozNDo1MSAyMDEyIC0wNDAwCisKKyAgICBtZW5kCisKK2NvbW1pdCBlYmI4ZTg5NDU2ODFjZTBhZjdhNWM0N2E5ODAyODdlOGVjZTg0Yjg0CitBdXRob3I6IE1pa2UgTGV3aXMgPG1pa2VsaWtlc3BpZUBnbWFpbC5jb20+CitEYXRlOiAgIEZyaSBBcHIgNiAyMDowMjowOCAyMDEyIC0wNDAwCisKKyAgICBCdWlsZCBpT1MgbGlicmFyeSB3aXRoIHhjb2RlCisKK2NvbW1pdCBhMDk4YjQ0ZjRjNTkyYzIxOTJmY2RlZjRmYWQ2MTA4ZWIzZjQzMDFjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgQXByIDYgMTc6MDQ6MzUgMjAxMiAtMDQwMAorCisgICAgUmVhcHBseSBtaXNzaW5nIHRlc3RzdWl0ZSBjaGFuZ2VzIGZvciBhcm0KKworY29tbWl0IDEwZDFlNTEzOTNmMDhjMTQwNDVkYjg1ODQzMjA4ZjQ0ZjlmMWU5YmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBBcHIgNiAxMTo1NzoxNCAyMDEyIC0wNDAwCisKKyAgICBVcGRhdGUgdG8gcmM0LiAgVXBncmFkZSBhdXRvY29uZiB2ZXJzaW9uLgorCitjb21taXQgOWJjYzg4NDI3NmRjMGE4MDdiMjYwNWU1MTBiMTFiMTc0MGRkOWFhMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEFwciA2IDExOjUzOjA3IDIwMTIgLTA0MDAKKworICAgIEZpeCBMaW51eC94MzIgcmVmZXJlbmNlIGluIFJFQURNRQorCitjb21taXQgYTA0NGE1NmIxY2QyYTA5MjRmNWVjMGQ2YjVhNTA4OWQxNGZjZDFhMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEFwciA2IDEwOjM5OjEwIDIwMTIgLTA0MDAKKworICAgIExpbnV4L3gzMiBsaWJ0b29sIGZpeAorCitjb21taXQgNTliYjYxYTM2NjYxYjk3MmU4NDQzNTMxZDNiN2JjNzM2ZTEzMWE0YgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEFwciA2IDA4OjI2OjE0IDIwMTIgLTA0MDAKKworICAgIFVwZGF0ZSBsaWJ0b29sIHZlcnNpb24sIFJFQURNRSwgdGVzdHMgZGlzdHMKKworY29tbWl0IGYyOTgxNDU0Y2JlMjVjZjk0MTFiNzEwZjQ2YzVmNTU1MjAwM2ExMjMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBBcHIgNSAxNTo0NToxOSAyMDEyIC0wNDAwCisKKyAgICBSZXZlcnQgZGVidWcgY29kZSBjaGFuZ2VzCisKK2NvbW1pdCAzOWRjY2RkYjYwNmY2ZmRiOGRjYjE3N2Q0MTZlODg0MDQxZGE2ZTMwCitBdXRob3I6IFphY2hhcnkgV2FsZG93c2tpIDx6d2FsZG93c2tpQGdtYWlsLmNvbT4KK0RhdGU6ICAgVGh1IEFwciA1IDEyOjMyOjQxIDIwMTIgLTA0MDAKKworICAgIEZpeCBidWlsZGluZyB3aXRoIENsYW5nIGZvciBEYXJ3aW4gKE9TIFggMTAuNisgYW5kIGlPUworICAgICA0LjArKQorCitjb21taXQgM2FmYWE5YTM0YTgxYTMwNTIyN2FlOGNmNGYxMmI5ZDA0ODRkMDU1ZQorQXV0aG9yOiBQZXRlciBSb3NpbiA8cGVkYUBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIEFwciAzIDA3OjQwOjMxIDIwMTIgLTA0MDAKKworICAgIEZpeCByZXR1cm5fdWMuYyB0ZXN0IGNhc2Ugb24gd2luZG93cy4KKworY29tbWl0IDY1ZjQwYzM1YTI4NzNkODMyODM1OWVjNDUxMmJkMDczNmRiZTMyYzcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBBcHIgMyAwNzozNTo1OSAyMDEyIC0wNDAwCisKKyAgICBSZXBhaXIgcHBjIGJ1aWxkIHJlZ3Jlc3Npb24uCisKK2NvbW1pdCAwYTFhYjEyYThkMTVjYWE4OTQxMTZhODIyNDk1NTFmMjNlZjY1NjEyCitBdXRob3I6IFBldGVyIFJvc2luIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgTWFyIDMwIDA4OjE0OjA4IDIwMTIgLTA0MDAKKworICAgIFZhcmlvdXMgTVNWQy1yZWxhdGVkIGNoYW5nZXMuCisKK2NvbW1pdCBlMTUzOTI2NmU2YzZkZGUzYzk5ODMyMzIzNTg2ZjMzZjk3N2QxZGMwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgTWFyIDMwIDAwOjQwOjE4IDIwMTIgLTA0MDAKKworICAgIEFSTSBWRlAgZml4IGZvciBvbGQgdG9vbGNoYWlucworCitjb21taXQgN2M1ZTYwYjVmNDdkNzI1MDM2YTcyMTYyZjEzNjI3MmJjNDA3ZTNhMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IE1hciAyOSAwODo0ODoyMiAyMDEyIC0wNDAwCisKKyAgICBSZWJhc2Ugb24gZml4ZWQgR0NDIHNvdXJjZXMKKworY29tbWl0IGU3MmVkNWVlYWE5Y2ZiMGZkYzg2ZjZiMzQyMjczNDE3N2I2NTlmOTYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBNYXIgMjEgMDk6NTI6MjggMjAxMiAtMDQwMAorCisgICAgRml4IHZhcmFyZyBmbG9hdCB0ZXN0CisKK2NvbW1pdCBiZDc4YzljMzMxMTI0NGRkNWY4NzdjOTE1YjBkZmY5MTYyMWRkMjUzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgTWFyIDIxIDA4OjA5OjMwIDIwMTIgLTA0MDAKKworICAgIE1vcmUgY3lnd2luIGZpeGVzCisKK2NvbW1pdCA4NGQzMjUzZjg2ZGFkNmI0ZjI2MTIzMTkzNTY3NWQzNWZkOTY0YjA1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gTWFyIDE5IDIzOjA3OjM1IDIwMTIgLTA0MDAKKworICAgIFJlYmFzZSBwb3N0IEdDQyBtZXJnZQorCitjb21taXQgOTY0YzViOTNmODBkY2FhY2Y3MzA1NmI3ZDE1YTRkMmI0YjdhMjE3YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE1hciAzIDE0OjQ2OjIwIDIwMTIgLTA1MDAKKworICAgIGFiaSBjaGVjayBmaXhlcyBhbmQgTGludXgveDMyIHN1cHBvcnQKKworY29tbWl0IDZjMTk0MjMzYTVmNmYxZDI3NDY2OWFmYzU5MjRhOWUxZjY5ZDQ4NzYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBNYXIgMyAxNDoxNzo1NCAyMDEyIC0wNTAwCisKKyAgICBBZGQgLW5vLXVuZGVmaW5lZCBmb3IgYm90aCAzMi0gYW5kIDY0LWJpdCB4ODYKKyAgICB3aW5kb3dzLWxpa2UgaG9zdHMuCisKK2NvbW1pdCA4MzYwYmYxY2QwYWJhOGRiNTU4MjI2NmRhNzA0NjdkZTdlODlhNTdhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgRmViIDIzIDA3OjAxOjEzIDIwMTIgLTA1MDAKKworICAgIEVuc3VyZSB0aGF0IHVzZXJzIGRvbid0IGluY2x1ZGUgZmZpdGFyZ2V0LmggZGlyZWN0bHkKKworY29tbWl0IGQ1NzhiODk2MTljZjNkMmJhZmYwMjdiMjAzNjE5ZGMzMDdmYzEyZTMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgMTUgMDA6MTg6MTggMjAxMiAtMDUwMAorCisgICAgRml4IEFCSSBjaGVjayByZWdyZXNzaW9uCisKK2NvbW1pdCBkZWUyMGY4ZTQ1YzQ4NmY1MDE4ZjMxZTA5YmIzNjI5OTJhYTQ5OGMzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDEwIDEzOjA2OjQ2IDIwMTIgLTA1MDAKKworICAgIFJlYmFzZWQgZnJvbSBnY2MKIAotMjAwNy0wOC0wOCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCA0MTMwZTE5NzJkMDAxMTQzZTVlOWYzYzZiNjVmMmE2Zjk1MjQxNjllCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDMgMTM6MTg6MjcgMjAxMiAtMDYwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChmZmlfdHlwZV9teWxvbmcpOiBSZW1vdmUgZGVmaW5pdGlvbi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMgKG1haW4pOiBVc2UgY29ycmVjdCB0eXBlCi0Jc3BlY2lmaWVycy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMi5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwxLmMgKG1haW4pOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jIChtYWluKTogRGl0dG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYyAobWFpbik6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYyAobWFpbik6IERpdHRvLgorICAgIFJlZnJlc2ggYXV0b2NvbmYtYXJjaGl2ZSBtNCBzY3JpcHRzCiAKLTIwMDctMDgtMDcgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDFmZjljNjA0YmIyMTRiNWEzMDUwNjRhZjEwNDk1NzdlZjc4MzczMGEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgMSAxNjozNDozMCAyMDEyIC0wNjAwCiAKLQkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9yYXdfU1lTVik6IEZpeCB0eXBvIGluIHByZXZpb3VzCi0JY2hlY2tpbi4KKyAgICBSZWJhc2UgZnJvbSBHQ0MKIAotMjAwNy0wOC0wNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgMjExMDYwZWI4ZjcxNGFmMGU5MzU0MzBlZmE2YmI0NWU4ZTNmZmM1ZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMyAxNDoyNDowMSAyMDEyIC0wNTAwCiAKLQlQUiB0ZXN0c3VpdGUvMzI4NDMKLQkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9yYXdfU1lTVik6IEhhbmRsZSBGRklfVFlQRV9VSU5UOCwKLQlGRklfVFlQRV9TSU5UOCwgRkZJX1RZUEVfVUlOVDE2LCBGRklfVFlQRV9TSU5UMTYsIEZGSV9UWVBFX1VJTlQzMiwKLQlGRklfVFlQRV9TSU5UMzIuCisgICAgQWxwaGEgZml4CiAKLTIwMDctMDgtMDIgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgNzhkOWM2MzhiYTBkZTZlZGZiYzYwM2ZkNjVkMTljNjU2MjY2MzI0OAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMyAxNDoxNzoyNCAyMDEyIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWwuYyAobWFpbik6IERlZmluZSByZXR1cm4gdHlwZSBhcwotCWZmaV9hcmcuICBVc2UgcHJvcGVyIHByaW50ZiBjb252ZXJzaW9uIHNwZWNpZmllci4KKyAgICBtZW5kCiAKLTIwMDctMDctMzAgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IGFmYWYzMzgxNjA0YmQ4MTgwM2Q4YTVmM2JmNGQ0NjIyOTlmMWFhYzMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjMgMTQ6MTc6MTMgMjAxMiAtMDUwMAogCi0JUFIgdGVzdHN1aXRlLzMyODQzCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IGluIHg4NiBjYXNlLCBhZGQgY29kZSBmb3IKLQlzaWduZWQvdW5zaWduZWQgaW50OC8xNi4KLQkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogUmV3cml0ZSB0bzoKLQlVc2UgYSBqdW1wIHRhYmxlLgotCVJlbW92ZSBjb2RlIHRvIHBvcCBhcmdzIGZyb20gdGhlIHN0YWNrIGFmdGVyIGNhbGwuCi0JU3BlY2lhbC1jYXNlIHNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jIChtYWluKTogUmV2ZXJ0LgorICAgIG1lbmQKIAotMjAwNy0wNy0yNiAgUmljaGFyZCBHdWVudGhlciAgPHJndWVudGhlckBzdXNlLmRlPgorY29tbWl0IDllOWM0YWViNzdkZTU2MDhkNjAyMTA5ZjIyMTAwYzFjMGM3OWZhYWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjMgMTQ6MTE6MjMgMjAxMiAtMDUwMAogCi0JUFIgdGVzdHN1aXRlLzMyODQzCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgKG1haW4pOiBWZXJpZnkgY2FsbAotCXJlc3VsdCBhcyBzaWduZWQgY2hhciwgbm90IGZmaV9hcmcuCisgICAgQWRkIEFtaWdhIHN1cHBvcnQKIAotMjAwNy0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+Citjb21taXQgOGVmYzBiMWY0MDI3ZDVhM2NiZjIwNWU1NWQ0MjJkOTRlNjBmMzIyNgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMyAxMzo0NzozOCAyMDEyIC0wNTAwCiAKLQkqIGNvbmZpZ3VyZS5hYyAoaT84Ni0qLXNvbGFyaXMyLjFbMC05XSk6IFNldCBUQVJHRVQgdG8gWDg2XzY0LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIFVubGlrZWx5IGZpeGVzCiAKLTIwMDctMDctMTEgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+Citjb21taXQgMWRmNTEzOThhZTE4M2RjMjA4YmE0NTk5ZWU4NjcyNzhiMDRkMTNkMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEphbiAyMyAxMzo0Mzo1OSAyMDEyIC0wNTAwCiAKLQkqIHNyYy9taXBzL2ZmaS5jOiBEb24ndCBpbmNsdWRlIHN5cy9jYWNoZWN0bC5oLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFVzZSBfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSgpIGluc3RlYWQgb2YKLQljYWNoZWZsdXNoKCkuCisgICAgbWVuZAogCi0yMDA3LTA1LTE4ICBBdXJlbGllbiBKYXJubyAgPGF1cmVsaWVuQGF1cmVsMzIubmV0PgorY29tbWl0IGNkMjI3N2NjNzk2Yjk2YjE0OWNkMjg0YWU4NTMyNjUyOWZlN2ZiOWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKYW4gMjMgMTM6NDM6MzggMjAxMiAtMDUwMAogCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kIGFqdXN0ZWQKLQlmcm9tIChmZmlfcHJlcF9jbG9zdXJlKTogLi4uIHRoaXMuCi0JKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBBZGp1c3QuCisgICAgbWVuZAogCi0yMDA1LTEyLTMxICBQaGlsIEJsdW5kZWxsICA8cGJAcmVjaXZhLmNvbT4KK2NvbW1pdCAxNjRlNmZlMDRiMTg5NzQ2YzhiZDU4MTBjNmUzZTkxOTc3MGJiOWQ0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIzIDEyOjQxOjA2IDIwMTIgLTA1MDAKIAotCSogc3JjL2FybS9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWLAotCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIsIGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcsIGFkZCBjbG9zdXJlIHN1cHBvcnQuCi0JKiBzcmMvYXJtL3N5c3YuUyhmZmlfY2xvc3VyZV9TWVNWKTogTGlrZXdpc2UuCi0JKiBzcmMvYXJtL2ZmaXRhcmdldC5oIChGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCi0JKEZGSV9DTE9TVVJFUyk6IEVuYWJsZSBjbG9zdXJlIHN1cHBvcnQuCisgICAgbTY4ayBmaXhlcwogCi0yMDA3LTA3LTAzICBBbmRyZXcgSGFsZXkgIDxhcGhAaGVkZ2VzLmJpbGxnYXRsaWZmLmNvbT4KK2NvbW1pdCBjMzY1ZWU3NTc3YmVmMDBjYjNjMmMwYjUyMjQxNDdhZWEwNDEzOGQ4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gSmFuIDIzIDExOjEzOjE4IDIwMTIgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKLQl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jLAotCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCi0JdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MsCi0JdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IEVuYWJsZSBmb3IgQVJNLgorICAgIFJlZnJlc2gKIAotMjAwNy0wNy0wNSAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorY29tbWl0IGYyMmMzOGJiZDkzYmNjMGMwNGJmMjZjM2U0MTQ1NTZiMzE3N2MzODUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBOb3YgMTggMTU6MTM6NDEgMjAxMSAtMDUwMAogCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlZC4KKyAgICBVcGRhdGUgdmFyaWFkaWMgcGF0Y2gKIAotMjAwNy0wNi0wMiAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KK2NvbW1pdCAwM2U5ZWUzMjFhM2MyMDhmODhkMjQzMjU4N2NlNDBiMmJiMjQzMGJhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgTm92IDE4IDE1OjEzOjAwIDIwMTEgLTA1MDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIEZpeCBjbHNfZG91YmxlX3ZhLmMgYW5kIHVwZGF0ZSBkb2NzCiAKLTIwMDctMDUtMjMgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorY29tbWl0IDk1ZjMxMTUxZWM3OTI4MDljZmI4MGQzODUzNTBmOWY1NmQ5NWFhMjUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMjM6NDY6MDUgMjAxMSAtMDUwMAogCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgIFJlcnVuIGF1dG9tYWtlCiAKLTIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorY29tbWl0IDE5OGVkMWVmODVjZjE4MzQyNjI3ZjhkNDRiYzNmMTJjOTk3NWE0OWQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMjM6NDU6MjAgMjAxMSAtMDUwMAogCi0JKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWLAotCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIsZmZpX3ByZXBfY2xvc3VyZSk6IE5ldywgYWRkIGNsb3N1cmUgc3VwcG9ydC4KLQkqIHNyYy9tNjhrL3N5c3YuUyhmZmlfY2xvc3VyZV9TWVNWLGZmaV9jbG9zdXJlX3N0cnVjdF9TWVNWKTogTGlrZXdpc2UuCi0JKiBzcmMvbTY4ay9mZml0YXJnZXQuaCAoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgotCShGRklfQ0xPU1VSRVMpOiBFbmFibGUgY2xvc3VyZSBzdXBwb3J0LgorICAgIFVwZGF0ZSB2ZXJzaW9uIG51bWJlcgogCi0yMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KK2NvbW1pdCA0ZjE3ZTFmMTQyZTgwNWIxMzk1OWJhMjU5NGVlNzM1ZWFlNDM5ZjRlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDE3OjIyOjI0IDIwMTEgLTA1MDAKIAotCSogY29uZmlndXJlLmFjIChIQVZFX0FTX0NGSV9QU0VVRE9fT1ApOiBOZXcgdGVzdC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgotCSogc3JjL202OGsvc3lzdi5TIChDRklfU1RBUlRQUk9DLENGSV9FTkRQUk9DLAotCUNGSV9PRkZTRVQsQ0ZJX0RFRl9DRkEpOiBOZXcgbWFjcm9zLgotCShmZmlfY2FsbF9TWVNWKTogQWRkIGNhbGxmcmFtZSBhbm5vdGF0aW9uLgorICAgIEZpeCBsYXN0IHBhdGNoCiAKLTIwMDctMDUtMTAgIFJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgorY29tbWl0IGZmOTQ1NGRhNDQ4NTk3MTZhNWJkNGVhYTM0NDQ5OTI4OGM3OTY5NGYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMTc6MTg6NTEgMjAxMSAtMDUwMAogCi0JKiBzcmMvbTY4ay9mZmkuYyAoZmZpX3ByZXBfYXJncyxmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEZpeAotCW51bWVyb3VzIHRlc3Qgc3VpdGUgZmFpbHVyZXMuCi0JKiBzcmMvbTY4ay9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBMaWtld2lzZS4KKyAgICBBZGQgRGF2aWQgR2lsYmVydCdzIHZhcmlhZGljIGZ1bmN0aW9uIGNhbGwgc3VwcG9ydAogCi0yMDA3LTA0LTExICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorY29tbWl0IGVhMTRhZTg1ZThmNTRmZjA0NmI3ZmI4YTljZmUzNDk0NzUyNzIwNDQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMTY6MzY6NTkgMjAxMSAtMDUwMAogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEJyaW5nIHVwIHRvIGRhdGUuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHNyYy9mcnYvZWFiaS5TOiBSZW1vdmUgUkNTIGtleXdvcmQuCisgICAgY2xlYW4gdXAKIAotMjAwNy0wNC0wNiAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KK2NvbW1pdCA1Mjg5MWY4YTkzZjliOGRlODAxY2NhNGNmMDU2Mzk0MjJkYzk3NzNlCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDE2OjM1OjU1IDIwMTEgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBUaWR5IHRhcmdldCBjYXNlLgotCShIQVZFX0xPTkdfRE9VQkxFKTogQWxsb3cgdGhlIHRhcmdldCB0byBvdmVycmlkZS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvZmZpLmguaW46IERvbid0IGRlZmluZSBmZmlfdHlwZV9mb28gaWYKLQlMSUJGRklfSElERV9CQVNJQ19UWVBFUyBpcyBkZWZpbmVkLgotCShmZmlfdHlwZV9sb25nZG91YmxlKTogSWYgbm90IEhBVkVfTE9OR19ET1VCTEUsIGRlZmluZQotCXRvIGZmaV90eXBlX2RvdWJsZS4KLQkqIHR5cGVzLmMgKExJQkZGSV9ISURFX0JBU0lDX1RZUEVTKTogRGVmaW5lLgotCShGRklfVFlQRURFRiwgZmZpX3R5cGVfdm9pZCk6IE1hcmsgdGhlIGRhdGEgY29uc3QuCi0JKGZmaV90eXBlX2xvbmdkb3VibGUpOiBTcGVjaWFsIGNhc2UgZm9yIEFscGhhLiAgRG9uJ3QgZGVmaW5lCi0JaWYgbG9uZyBkb3VibGUgPT0gZG91YmxlLgorICAgIEFkZCBwb3dlcnBjIHNvZnQgZmxvYXQgc3VwcG9ydAogCi0JKiBzcmMvYWxwaGEvZmZpLmMgKEZGSV9UWVBFX0xPTkdET1VCTEUpOiBBc3NlcnQgdW5pcXVlIHZhbHVlLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBpdCBhcyB0aGUgMTI4LWJpdCB0eXBlLgotCShmZmlfY2FsbCwgZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogTGlrZXdpc2UuCi0JKGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IExpa2V3aXNlLiAgTWFyayBoaWRkZW4uCi0JKGZmaV9jYWxsX29zZiwgZmZpX2Nsb3N1cmVfb3NmKTogTWFyayBoaWRkZW4uCi0JKiBzcmMvYWxwaGEvZmZpdGFyZ2V0LmggKEZGSV9MQVNUX0FCSSk6IFRpZHkgZGVmaW5pdGlvbi4KLQkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2NhbGxfb3NmLCBmZmlfY2xvc3VyZV9vc2YpOiBNYXJrIGhpZGRlbi4KLQkobG9hZF90YWJsZSk6IEhhbmRsZSAxMjgtYml0IGxvbmcgZG91YmxlLgorY29tbWl0IGM4ZjFiZGU4ZTI1NjZjNWE4NzQ3NGI0ZDA4YWE5MzRkNmQyOGVlNzUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMTY6MjE6MDIgMjAxMSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQ0LmM6IEFkZCAtbWllZWUgZm9yIGFscGhhLgorICAgIFJlbW92ZSBqdW5rIGZpbGUKIAotMjAwNy0wNC0wNiAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorY29tbWl0IDZhNmU3Zjg2MmYzY2M2NzdlMTkxMzE1ODdjYWE2MTllN2Y5YzdmZmQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMTY6MjA6NDIgMjAxMSAtMDUwMAogCi0JUFIgbGliZmZpLzMxNDkxOgotCSogUkVBRE1FOiBGaXhlZCBidWcgaW4gZXhhbXBsZS4KKyAgICBGaXgga2ZyZWVic2QKIAotMjAwNy0wNC0wMyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+Citjb21taXQgZDUyZmJlZDA1Y2NiZGVlOWVkOGI5YzkxMWNiYjRmODViMGZmMGYyYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IE5vdiAxMiAxNjoxMzo0MSAyMDExIC0wNTAwCiAKLQkqIHNyYy9jbG9zdXJlcy5jOiBJbmNsdWRlIHN5cy9zdGF0ZnMuaC4KLQkoX0dOVV9TT1VSQ0UpOiBEZWZpbmUgb24gTGludXguCi0JKEZGSV9NTUFQX0VYRUNfU0VMSU5VWCk6IERlZmluZS4KLQkoc2VsaW51eF9lbmFibGVkKTogTmV3IHZhcmlhYmxlLgotCShzZWxpbnV4X2VuYWJsZWRfY2hlY2spOiBOZXcgZnVuY3Rpb24uCi0JKGlzX3NlbGludXhfZW5hYmxlZCk6IERlZmluZS4KLQkoZGxtbWFwKTogVXNlIGl0LgorICAgIEFkZCBtaXNzaW5nIENoYW5nZUxvZyBlbnRyeQogCi0yMDA3LTAzLTI0ICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorY29tbWl0IDMyMjA1MmNlNjVjNGZkYWM4NWJlZGMyNDcyNmZkMGUwMDk0YmE1MjEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMTY6MTE6NDkgMjAxMSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIChyZXR1cm5fZmwpOiBNYXJrIGFzIHN0YXRpYy4KLQlVc2UgJ3ZvbGF0aWxlIGZsb2F0IHN1bScgdG8gY3JlYXRlIHN1bSBvZiBmbG9hdHMgdG8gYXZvaWQgZmFsc2UKLQluZWdhdGl2ZSBkdWUgdG8gZXhjZXNzIHByZWNpc2lvbiBvbiBpeDg2IHRhcmdldHMuCi0JKG1haW4pOiBEaXR0by4KKyAgICBGaXggYXJtIHdpbmNlIGFsaWdubWVudCBpc3N1ZQogCi0yMDA3LTAzLTA4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KK2NvbW1pdCBhZjE4ZGYyYmMyZjUyZGY4MWU3YjVjNjE5YmQ4NmRiODQ4OWRjODczCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgTm92IDEyIDE1OjUyOjA4IDIwMTEgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZsdXNoX2ljYWNoZSk6IEZpeCBsZWZ0LW92ZXIgZnJvbSBwcmV2aW91cwotCXBhdGNoLgotCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFJlbW92ZSB1bm5lZWRlZCBjYXN0cy4gIEFkZCBuZWVkZWQgb25lcy4KKyAgICBSZW1vdmUgdXNlIG9mIHBwYyBzdHJpbmcgaW5zdHJ1Y3Rpb25zCiAKLTIwMDctMDMtMDcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorY29tbWl0IDIzNmM5MzkxMzIxZjgzYWQ0MGRhZjAzZjQwYzM1YzllYmMxZGE2YjMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMDc6Mzc6NDAgMjAxMSAtMDUwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfY2xvc3VyZV9hbGxvYywgZmZpX2Nsb3N1cmVfZnJlZSk6IE5ldy4KLQkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBOZXcuCi0JKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IE5ldy4KLQkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MpOiBOZXcuCi0JKiBzcmMvY2xvc3VyZXMuYzogTmV3IGZpbGUuCi0JKiBzcmMvZGxtYWxsb2MuYyBbRkZJX01NQVBfRVhFQ19XUklUXSAoc3RydWN0IG1hbGxvY19zZWdtZW50KToKLQlSZXBsYWNlIHNmbGFncyB3aXRoIGV4ZWNfb2Zmc2V0LgotCVtGRklfTU1BUF9FWEVDX1dSSVRdIChtbWFwX2V4ZWNfb2Zmc2V0LCBhZGRfc2VnbWVudF9leGVjX29mZnNldCwKLQlzdWJfc2VnbWVudF9leGVjX29mZnNldCk6IE5ldyBtYWNyb3MuCi0JKGdldF9zZWdtZW50X2ZsYWdzLCBzZXRfc2VnbWVudF9mbGFncywgY2hlY2tfc2VnbWVudF9tZXJnZSk6IE5ldwotCW1hY3Jvcy4KLQkoaXNfbW1hcHBlZF9zZWdtZW50LCBpc19leHRlcm5fc2VnbWVudCk6IFVzZSBnZXRfc2VnbWVudF9mbGFncy4KLQkoYWRkX3NlZ21lbnQsIHN5c19hbGxvYywgY3JlYXRlX21zcGFjZSwgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UsCi0JZGVzdHJveV9tc3BhY2UpOiBVc2UgbmV3IG1hY3Jvcy4KLQkoc3lzX2FsbG9jKTogU2lsZW5jZSB3YXJuaW5nLgotCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIHNyYy9jbG9zdXJlcy5jLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBzcmMvcHJlcF9jaWYgW0ZGSV9DTE9TVVJFU10gKGZmaV9wcmVwX2Nsb3N1cmUpOiBJbXBsZW1lbnQgaW4KLQl0ZXJtcyBvZiBmZmlfcHJlcF9jbG9zdXJlX2xvYy4KLQkqIHNyYy9yYXdfYXBpLmMgKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kIGFkanVzdGVkCi0JZnJvbS4uLgotCShmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IC4uLiB0aGlzLiAgUmUtaW1wbGVtZW50IGluIHRlcm1zIG9mIHRoZQotCXJlbmFtZWQgdmVyc2lvbi4KLQkqIHNyYy9qYXZhX3Jhd19hcGkgKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQKLQlhZGp1c3RlZCBmcm9tLi4uCi0JKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmUpOiAuLi4gdGhpcy4gIFJlLWltcGxlbWVudCBpbiB0ZXJtcyBvZgotCXRoZSByZW5hbWVkIHZlcnNpb24uCi0JKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBmcm9tCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiAuLi4gdGhpcy4KLQkqIHNyYy9wYS9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvY3Jpcy9mZmkuYzogTGlrZXdpc2UuICBBZGp1c3QuCi0JKiBzcmMvZnJ2L2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9pYTY0L2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9taXBzL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCi0JKiBzcmMvczM5MC9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvc2gvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3NoNjQvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3NwYXJjL2ZmaS5jOiBMaWtld2lzZS4KLQkqIHNyYy94ODYvZmZpNjQuYzogTGlrZXdpc2UuCi0JKiBzcmMveDg2L2ZmaS5jOiBMaWtld2lzZS4KLQkoRkZJX0lOSVRfVFJBTVBPTElORSk6IEFkanVzdC4KLQkoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQgYWRqdXN0ZWQgZnJvbS4uLgotCShmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IC4uLiB0aGlzLgotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBmcm9tCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiAuLi4gdGhpcy4KLQkoZmx1c2hfaWNhY2hlKTogQWRqdXN0LgorICAgIEZpeCBkYXJ3aW4xMSBidWlsZCBwcm9ibGVtCiAKLTIwMDctMDMtMDcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorY29tbWl0IGM0MTFmMTQwZjMwNWViYjAwZDMzYzkyYjdjYjI3NDJiY2QyNDFiNmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMDc6MzI6MzYgMjAxMSAtMDUwMAogCi0JKiBzcmMvZGxtYWxsb2MuYzogTmV3IGZpbGUsIGltcG9ydGVkIHZlcnNpb24gMi44LjMgb2YgRG91ZwotCUxlYSdzIG1hbGxvYy4KKyAgICBGaXggYXhfZW5hYmxlX2J1aWxkZGlyIG1hY3JvIG9uIEJTRCBzeXN0ZW1zCiAKLTIwMDctMDMtMDEgIEJyb29rcyBNb3NlcyAgPGJyb29rcy5tb3Nlc0Bjb2Rlc291cmNlcnkuY29tPgorY29tbWl0IDNkNTYxMDZiMDc3MzVhYmVmNmFlOWYwMzJlOTRmNTYwYTBlZDJmMzAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBOb3YgMTIgMDc6MjA6MjQgMjAxMSAtMDUwMAogCi0JKiBNYWtlZmlsZS5hbTogQWRkIGR1bW15IGluc3RhbGwtcGRmIHRhcmdldC4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlCisgICAgUmViYXNlCiAKLTIwMDctMDItMTMgIEFuZHJlYXMgS3JlYmJlbCAgPGtyZWJiZWwxQGRlLmlibS5jb20+Citjb21taXQgOGMwMTk1NGM1MGJmOGVmMmUwMGEzZGIxNjYwNjBhMWI4ZjgzYTIwZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIFNlcCA2IDE0OjI2OjMyIDIwMTEgLTA0MDAKIAotCSogc3JjL3MzOTAvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGZmaV9wcmVwX2NpZl9tYWNoZGVwLAotCWZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogQWRkIGxvbmcgZG91YmxlIGhhbmRsaW5nLgorICAgIEJ1aWxkIGFzc2VtYmx5IGZpbGVzIHdpdGggZGVidWcgaW5mbwogCi0yMDA3LTAyLTAyICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KK2NvbW1pdCBmZWQ2NDZhMjA3ODk2OWY0Y2U4OWMyOTEwN2YxZTcyZTAzZjRhOTc3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgU2VwIDYgMDk6NTA6MjAgMjAxMSAtMDQwMAogCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBNb3ZlIHJlc3RvcmUgb2YgcjIKLQlpbW1lZGlhdGVseSBhZnRlciBiY3RybCBpbnN0cnVjdGlvbi4KKyAgICBSZWdlbmVyYXRlIGNvbmZpZ3VyeSB3aXRoIG1pc3NpbmcgbTQgbWFjcm9zCiAKLTIwMDctMDEtMTggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorY29tbWl0IGQ3NjQ0MWNmNzEyMTZmOGYxZTYyZTdlYzg1MmE3ZjRlMjEzNzFlYzgKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBBdWcgMjQgMTA6MTQ6MjMgMjAxMSAtMDQwMAogCi0JKiBNYWtlZmlsZS5hbSAoYWxsLXJlY3Vyc2l2ZSwgaW5zdGFsbC1yZWN1cnNpdmUsCi0JbW9zdGx5Y2xlYW4tcmVjdXJzaXZlLCBjbGVhbi1yZWN1cnNpdmUsIGRpc3RjbGVhbi1yZWN1cnNpdmUsCi0JbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUpOiBBZGQgbWlzc2luZyB0YXJnZXRzLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgVXBkYXRlIGxpc3Qgb2Ygc3VwcG9ydGVkIE9wZW5CU0Qgc3lzdGVtcwogCi0yMDA2LTEyLTE0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorY29tbWl0IGVlNjY5NmZkZjQ3NjhiYTZkZDAzN2ZiNmRkOTk0MzVhZmExMzgxNmUKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBBdWcgMjMgMTI6MzA6MjkgMjAxMSAtMDQwMAogCi0JKiBjb25maWd1cmUuYWM6IEFkZCBUQVJHRVQgZm9yIHg4Nl82NC0qLWRhcndpbiouCi0JKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIHJ1bGVzIGZvciA2NC1iaXQgc291cmNlcwotCWZvciBYODZfREFSV0lOLgotCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogU2V0IHRyYW1wb2xpbmUgc2l6ZSBmb3IgeDg2XzY0LSotZGFyd2luKi4KLQkqIHNyYy94ODYvZGFyd2luNjQuUzogTmV3IGZpbGUgZm9yIHg4Nl82NC0qLWRhcndpbiogc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjOiBOZXcgdGVzdCBjYXNlIGZvcgotCWZmaV9jYWxsIG9ubHkuCisgICAgMy4wLjExLXJjMS4gc29uYW1lIGJ1bXAuCiAKLTIwMDYtMTItMTMgIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KK2NvbW1pdCBjNjI2NWMzNmE5MWVhYjgxNzVkMGU3MmRiODRkODIyNTQxOGYyMzc5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgQXVnIDIzIDEwOjMxOjMzIDIwMTEgLTA0MDAKIAotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZSB3aXRoIGFjbG9jYWwgLUkgLi4gYXMgd3JpdHRlbiBpbiB0aGUKLQlNYWtlZmlsZS5hbS4KKyAgICBWZXJzaW9uIDMuMC4xMAogCi0yMDA2LTEwLTMxICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KK2NvbW1pdCBjYzVlNDFiZjMyZDE4YTE0ZGJkZDY1M2Q1MmVhY2RiZGM5MzRjMzkyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gQXVnIDIyIDE2OjM0OjI0IDIwMTEgLTA0MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChkYXJ3aW5fYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyk6IE5ldy4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDYWxsIGRhcndpbl9hZGp1c3RfYWdncmVnYXRlX3NpemVzIGZvcgotCURhcndpbi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBSZW1vdmUgRGFyd2luIFhGQUlMLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IFJlbW92ZSBEYXJ3aW4gWEZBSUwuCisgICAgRml4IHVzZSBvZiBhdXRvY29uZiBtYWNyb3MKIAotMjAwNi0xMC0xMCAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KLQkgICAgU2FuZHJvIFRvbGFpbmkgIDx0b2xhaW5pQGxpYmVyby5pdD4KK2NvbW1pdCAwNDlkODM4NmZmNTIzOTllNjlhNTMwYjU1YjlmZWVkYzhhMjU4OWQyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gQXVnIDIyIDE0OjUwOjEwIDIwMTEgLTA0MDAKIAotCSogY29uZmlndXJlLmFjIFtpKjg2LSotZGFyd2luKl06IFNldCBYODZfREFSV0lOIHN5bWJvbCBhbmQKLQljb25kaXRpb25hbC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCi0JKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKSBbWDg2X0RBUldJTl06IE5ldyBjYXNlLgotCShFWFRSQV9ESVNUKTogQWRkIHNyYy94ODYvZGFyd2luLlMuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisgICAgTWFueSBuZXcgcGF0Y2hlcwogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCkgW1g4Nl9EQVJXSU5dOiBUcmVhdCBsaWtlCi0JWDg2X1dJTjMyLCBhbmQgYWRkaXRpb25hbGx5IGFsaWduIHN0YWNrIHRvIDE2IGJ5dGVzLgotCSogc3JjL3g4Ni9kYXJ3aW4uUzogTmV3LCBiYXNlZCBvbiBzeXN2LlMuCi0JKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKSBbWDg2X0RBUldJTl06IEFsaWduID4gOC1ieXRlIHN0cnVjdHMuCitjb21taXQgM2I3ZWZhNGU3NGYwZGNlYmY3MGI0NDczOTE5ODdhZWRkMzQ3MzMwNgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEF1ZyAxNSAxMzoyNToxMyAyMDExIC0wNDAwCiAKLTIwMDYtMDktMTIgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisgICAgUmV2ZXJ0IHJlbW92ZS1kZWJ1Zy1jb2RlIHBhdGNoIHRlbXBvcmFyaWx5IChmb3IgQVJNIEZlZG9yYSByZWxlYXNlKQogCi0JUFIgbGliZmZpLzIzOTM1Ci0JKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBJbnN0YWxsIGJvdGggZmZpLmggYW5kIGZmaXRhcmdldC5oIGluCi0JJChsaWJkaXIpL2djYy8kKHRhcmdldF9hbGlhcykvJChnY2NfdmVyc2lvbikvaW5jbHVkZS4KLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkIGZvciBhdXRvbWFrZSAxLjkuNi4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KK2NvbW1pdCBkOTkyYWM1NGEyYTllN2UwNjRmZmViY2I5MWUwNWU3Y2I4NjE4NWM3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIEp1bCAyOSAxNzozMjo1MyAyMDExIC0wNDAwCiAKLTIwMDYtMDgtMTcgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBSZWZyZXNoIGZyb20gR0NDCiAKLQkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChzdHJ1Y3QpOiBSZXZlcnQgYWNjaWRlbnRhbCBjb21taXQuCitjb21taXQgMmQzZmIzNjQyMGUwOTMwNDIyMGVlNmMwNjUyYmFlNWVjY2RiOTY1ZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIE1hciAzMCAxNjo1NDo0MiAyMDExIC0wNDAwCiAKLTIwMDYtMDgtMTUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBGaXggZGFyd2luIEVICiAKLQkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLgotCSogaW5jbHVkZS9mZmkuaC5pbjogTGlrZXdpc2UuCitjb21taXQgMzBmZjI4ZTFkOGNkOWVkNTMxOWYxZmJlOWM3Y2NjYWNjODE2MWZiMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIEZlYiAyOCAxNTozNjoyMyAyMDExIC0wNTAwCiAKLTIwMDYtMDctMjUgIFRvcnN0ZW4gU2Nob2VuZmVsZCAgPGthZmZlZXRpc2NoQGdteC5kZT4KKyAgICBGaXggcGVybWlzc2lvbnMKIAotCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX3R5cGVfdWxvbmcsIGZmaV90eXBlX3Nsb25nKTogRGVmaW5lIGNvcnJlY3RseQotCWZvciAzMi1iaXQgYXJjaGl0ZWN0dXJlcy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWwuYzogTmV3IHRlc3QgY2FzZS4KK2NvbW1pdCAwOWY4ZjMxMGY0ZjUzYTI0Mjg5NjgyZDNkMjhmNDM5OWQ3YmFmYzNiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gRmViIDI4IDE1OjM2OjA3IDIwMTEgLTA1MDAKIAotMjAwNi0wNy0xOSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKyAgICBNb3JlIEFJWCBmaXhlcy4gcmM5LgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYzogUmVtb3ZlIHhmYWlsIGZvciBtaXBzLAotCXhmYWlsIHJlbWFpbnMgZm9yIG1pcHM2NC4KK2NvbW1pdCA1M2Q3YjE2NTY0MmMyMjBhYTUxNjZiYTM1MGI0OTA4MDJmMzU5YjU0CitNZXJnZTogMThkZDg1ZCAzMDAwZGMyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gRmViIDI4IDE1OjIzOjMxIDIwMTEgLTA1MDAKIAotMjAwNi0wNS0yMyAgQ2FybG9zIE8nRG9uZWxsICA8Y2FybG9zQGNvZGVzb3VyY2VyeS5jb20+CisgICAgTWVyZ2UgYnJhbmNoICdtYXN0ZXInIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9sYW5kb25mL2xpYmZmaS1pb3MKIAotCSogTWFrZWZpbGUuYW06IEFkZCBpbnN0YWxsLWh0bWwgdGFyZ2V0LiBBZGQgaW5zdGFsbC1odG1sIHRvIC5QSE9OWQotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KK2NvbW1pdCAxOGRkODVkNmNiOWYzZjNlZWEyYTNiNzBlYjRlMTUwMDQ1OTA1YzU1CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDI1IDE2OjIzOjA0IDIwMTEgLTA1MDAKIAotMjAwNi0wNS0xOCAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKyAgICByYzguIGZpeCBsYXN0IHBhdGNoLgogCi0JKiBwYS9mZmkuYyAoZmZpX3ByZXBfYXJnc19wYTMyKTogTG9hZCBmbG9hdGluZyBwb2ludCBhcmd1bWVudHMgZnJvbQotCXN0YWNrIHNsb3QuCitjb21taXQgNzRlZTZlYThiNDJlNjBkNDRhM2FlODkzOGIxZTQyYTM4YzFlNjZiNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyNSAxNTo1MjoxNCAyMDExIC0wNTAwCiAKLTIwMDYtMDQtMjIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICByYzcuICBNb3JlIEFJWCBmaXhlcy4KIAotCSogUkVBRE1FOiBSZW1vdmUgbm90aWNlIGFib3V0ICdDcmF6eSBDb21tZW50cycuCi0JKiBzcmMvZGVidWcuYzogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4gQ2xlYW51cCB3aGl0ZSBzcGFjZXMuCi0JKiBzcmMvamF2YV9yYXdfYXBpLmM6IExpa2V3aXNlLgotCSogc3JjL3ByZXBfY2lmLmM6IExpa2V3aXNlLgotCSogc3JjL3Jhd19hcGkuYzogTGlrZXdpc2UuCi0JKiBzcmMvZmZpdGVzdC5jOiBEZWxldGUuIE5vIGxvbmdlciBuZWVkZWQsIGFsbCB0ZXN0IGNhc2VzIG1pZ3JhdGVkCi0JdG8gdGhlIHRlc3RzdWl0ZS4KLQkqIHNyYy9hcm0vZmZpLmM6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuCi0JKiBzcmMvbTMyci9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvcGEvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KLQkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMvc2g2NC9mZmkuYzogTGlrZXdpc2UuCi0JKiBzcmMveDg2L2ZmaS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYzogTGlrZXdpc2UuCitjb21taXQgMjU0MTY3OWRiZDNkYjAwMTQ4OTBmNDIxOTJkYmY4MDA4YWI5MjNmYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAyNSAxNTowOToxMyAyMDExIC0wNTAwCiAKLTIwMDYtMDQtMTMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBGaXggcHBjMzIgYnVnCiAKLQkqIHNyYy9wYS9ocHV4MzIuUzogQ29ycmVjdCB1bndpbmQgb2Zmc2V0IGNhbGN1bGF0aW9uIGZvcgotCWZmaV9jbG9zdXJlX3BhMzIuCi0JKiBzcmMvcGEvbGludXguUzogTGlrZXdpc2UuCitjb21taXQgY2JiMDYyY2MzNWM1MTgwMDRmMWFiNDVjODQ3ZjhlYzRmNjYwNjlhZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVGh1IEZlYiAxNyAyMDozOToyMSAyMDExIC0wNTAwCiAKLTIwMDYtMDQtMTIgIEphbWVzIEUgV2lsc29uICA8d2lsc29uQHNwZWNpZml4LmNvbT4KKyAgICBBbm90aGVyIG5vbi1HQ0MgY29uZmlndXJ5IGZpeAogCi0JUFIgbGliZ2NqLzI2NDgzCi0JKiBzcmMvaWE2NC9mZmkuYyAoc3RmX3NwaWxsLCBsZGZfZmlsbCk6IFJld3JpdGUgYXMgbWFjcm9zLgotCShoZmFfdHlwZV9sb2FkKTogQ2FsbCBzdGZfc3BpbGwuCi0JKGhmYV90eXBlX3N0b3JlKTogQ2FsbCBsZGZfZmlsbC4KLQkoZmZpX2NhbGwpOiBBZGp1c3QgY2FsbHMgdG8gYWJvdmUgcm91dGluZXMuICBBZGQgbG9jYWwgdGVtcHMgZm9yCi0JbWFjcm8gcmVzdWx0LgorY29tbWl0IDhjZjg4Nzg0MjVlOTk3MTg2NmZhNmIyN2EzZTQ5MTQ3MjlhZDM5NjAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgMTUgMTU6MTk6NDkgMjAxMSAtMDUwMAogCi0yMDA2LTA0LTEwICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KKyAgICBGaXggYXhfY2NfbWF4b3B0Lm00CiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpLWluaXQpOiBSZWNvZ25pemUgbXVsdGlsaWIKLQlkaXJlY3RvcnkgbmFtZXMgY29udGFpbmluZyB1bmRlcnNjb3Jlcy4KK2NvbW1pdCAyNGI3MjA3MGMwOTM3ZjkwMDA3NDRjNzdhNjM2ZjA3ZTA0Nzg2YjZhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gRmViIDE0IDE1OjMwOjU3IDIwMTEgLTA1MDAKIAotMjAwNi0wNC0wNyAgSmFtZXMgRSBXaWxzb24gIDx3aWxzb25Ac3BlY2lmaXguY29tPgorICAgIEZpeCB3YXJuaW5nIGFuZCBtc3ZjYyBwYXRjaGVzCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDQuYzogTmV3IHRlc3RjYXNlLgorY29tbWl0IGQ3MmM0OWU1NTZhOGM1MTZlOTdmNjcyMmQxYmUyZjEyMDljMjEyMDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBGZWIgMTMgMTE6NDE6MDUgMjAxMSAtMDUwMAogCi0yMDA2LTA0LTA1ICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgotCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgQWRkIG1pc3NpbmcgbXN2Y2Muc2gKIAotCSogTWFrZWZpbGUuYW06IEFkZCBQQV9IUFVYIHBvcnQuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIGNvbmZpZ3VyZS5hYzogQWRkIFBBX0hQVVggcnVsZXMuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBzcmMvcGEvZmZpdGFyZ2V0Lmg6IFJlbmFtZSBsaW51eCB0YXJnZXQgdG8gUEFfTElOVVguCi0JQWRkIFBBX0hQVVggYW5kIFBBNjRfSFBVWC4KLQlSZW5hbWUgRkZJX0xJTlVYIEFCSSB0byBGRklfUEEzMiBBQkkuCi0JKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgZm9yIDMyLWJpdCBIUC1VWCB0YXJnZXRzLgotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1QyKTogRGVmaW5lLgotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q0KTogTGlrZXdpc2UuCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDgpOiBMaWtld2lzZS4KLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUMyk6IFJlZGVmaW5lLgotCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q1KTogTGlrZXdpc2UuCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDYpOiBMaWtld2lzZS4KLQkoRkZJX1RZUEVfU01BTExfU1RSVUNUNyk6IExpa2V3aXNlLgotCSogc3JjL3BhL2ZmaS5jIChST1VORF9ET1dOKTogRGVsZXRlLgotCShmbGR3LCBmc3R3LCBmbGRkLCBmc3RkKTogVXNlICdfX2FzbV9fJy4KLQkoZmZpX3N0cnVjdF90eXBlKTogQWRkIHN1cHBvcnQgZm9yIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIsCi0JRkZJX1RZUEVfU01BTExfU1RSVUNUNCBhbmQgRkZJX1RZUEVfU01BTExfU1RSVUNUOC4KLQkoZmZpX3ByZXBfYXJnc19MSU5VWCk6IFJlbmFtZSB0byBmZmlfcHJlcF9hcmdzX3BhMzIuIFVwZGF0ZSBjb21tZW50LgotCVNpbXBsaWZ5IGluY3JlbWVudGluZyBvZiBzdGFjayBzbG90IHZhcmlhYmxlLiBDaGFuZ2UgdHlwZSBvZiBsb2NhbAotCSduJyB0byB1bnNpZ25lZCBpbnQuCi0JKGZmaV9zaXplX3N0YWNrX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9zaXplX3N0YWNrX3BhMzIuIEhhbmRsZSBsb25nCi0JZG91YmxlIG9uIFBBX0hQVVguCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCi0JKGZmaV9jYWxsKTogTGlrZXdpc2UuCi0JKGZmaV9jbG9zdXJlX2lubmVyX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX2lubmVyX3BhMzIuIENoYW5nZQotCXJldHVybiB0eXBlIHRvIGZmaV9zdGF0dXMuIFNpbXBsaWZ5IGluY3JlbWVudGluZyBvZiBzdGFjayBzbG90Ci0JdmFyaWFibGUuIE9ubHkgY29weSBmbG9hdGluZyBwb2ludCBhcmd1bWVudCByZWdpc3RlcnMgd2hlbiBQQV9MSU5VWAotCWlzIHRydWUuIFJlZm9ybWF0IGRlYnVnIHN0YXRlbWVudC4KLQlBZGQgc3VwcG9ydCBmb3IgRkZJX1RZUEVfU01BTExfU1RSVUNUMiwgRkZJX1RZUEVfU01BTExfU1RSVUNUNCBhbmQKLQlGRklfVFlQRV9TTUFMTF9TVFJVQ1Q4LgotCShmZmlfY2xvc3VyZV9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2xvc3VyZV9wYTMyLiBBZGQgJ2V4dGVybicgdG8KLQlkZWNsYXJhdGlvbi4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IE1ha2UgbGludXggdHJhbXBvbGluZSBjb25kaXRpb25hbCBvbiBQQV9MSU5VWC4KLQlBZGQgbm9wcyB0byBjYWNoZSBmbHVzaC4gIEFkZCB0cmFtcG9saW5lIGZvciBQQV9IUFVYLgotCSogc3JjL3BhL2hwdXgzMi5TOiBOZXcgZmlsZS4KLQkqIHNyYy9wYS9saW51eC5TIChmZmlfY2FsbF9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2FsbF9wYTMyLiBSZW5hbWUKLQlmZmlfcHJlcF9hcmdzX0xJTlVYIHRvIGZmaV9wcmVwX2FyZ3NfcGEzMi4KLQlMb2NhbGl6ZSBsYWJlbHMuIEFkZCBzdXBwb3J0IGZvciAyLCA0IGFuZCA4LWJ5dGUgc21hbGwgc3RydWN0cy4gSGFuZGxlCi0JdW5hbGlnbmVkIGRlc3RpbmF0aW9ucyBpbiAzLCA1LCA2IGFuZCA3LWJ5dGUgc21hbGwgc3RydWN0cy4gT3JkZXIKLQlhcmd1bWVudCB0eXBlIGNoZWNrcyBzbyB0aGF0IGNvbW1vbiBhcmd1bWVudCB0eXBlcyBhcHBlYXIgZmlyc3QuCi0JKGZmaV9jbG9zdXJlX0xJTlVYKTogUmVuYW1lIHRvIGZmaV9jbG9zdXJlX3BhMzIuIFJlbmFtZQotCWZmaV9jbG9zdXJlX2lubmVyX0xJTlVYIHRvIGZmaV9jbG9zdXJlX2lubmVyX3BhMzIuCitjb21taXQgMzAwMGRjMjM3ZjYwMTdhNzQ0NWQ4NDA0MDk3YTRmNDZiNzNmZGQyOQorTWVyZ2U6IDU1ZTRhNWEgMWZiZjlkYworQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gRmViIDEzIDA4OjU1OjUzIDIwMTEgLTA1MDAKIAotMjAwNi0wMy0yNCAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICBNZXJnZSByZW1vdGUgYnJhbmNoICd1cHN0cmVhbS9tYXN0ZXInCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChlbnVtIGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYLiAgRGVmYXVsdAotCWZvciAzMi1iaXQgdXNpbmcgSUJNIGV4dGVuZGVkIGRvdWJsZSBmb3JtYXQuICBGaXggRkZJX0xBU1RfQUJJLgotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEhhbmRsZSBsaW51eCB2YXJpYW50IG9mCi0JRkZJX1RZUEVfTE9OR0RPVUJMRS4KLQkoZmZpX3ByZXBfYXJnczY0KTogQXNzZXJ0IHVzaW5nIElCTSBleHRlbmRlZCBkb3VibGUuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRG9uJ3QgbXVuZ2UgRkZJX1RZUEVfTE9OR0RPVUJMRSB0eXBlLgotCUhhbmRsZSBGRklfTElOVVggRkZJX1RZUEVfTE9OR0RPVUJMRSByZXR1cm4gYW5kIGFyZ3MuCi0JKGZmaV9jYWxsKTogSGFuZGxlIEZGSV9MSU5VWC4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBOb24gRkZJX0xJTlVYIGxvbmcgZG91YmxlIHJldHVybiBuZWVkcwotCWdwcjMgcmV0dXJuIHBvaW50ZXIgYXMgZm9yIHN0cnVjdCByZXR1cm4uICBIYW5kbGUgRkZJX0xJTlVYCi0JRkZJX1RZUEVfTE9OR0RPVUJMRSByZXR1cm4gYW5kIGFyZ3MuICBEb24ndCBpbmNyZW1lbnQgIm5mIgotCXVubmVjZXNzYXJpbHkuCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogTG9hZCBib3RoIGYxIGFuZCBmMgotCWZvciBGRklfVFlQRV9MT05HRE9VQkxFLiAgTW92ZSBlcGlsb2d1ZSBpbnNucyBpbnRvIGNhc2UgdGFibGUuCi0JRG9uJ3QgdXNlIHI2IGFzIHBvaW50ZXIgdG8gcmVzdWx0cywgaW5zdGVhZCB1c2Ugc3Agb2Zmc2V0LiAgRG9uJ3QKLQltYWtlIGEgc3BlY2lhbCBjYWxsIHRvIGxvYWQgbHIgd2l0aCBjYXNlIHRhYmxlIGFkZHJlc3MsIGluc3RlYWQKLQl1c2Ugb2Zmc2V0IGZyb20gcHJldmlvdXMgY2FsbC4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFNhdmUgbG9uZyBkb3VibGUgcmV0dXJuLgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogU2ltcGxpZnkgbG9uZyBkb3VibGUKLQlyZXR1cm4uCitjb21taXQgMWZiZjlkYzQ0ZmVlYTU2NGU4NGFkNzQwNmQxN2M1ZDU5MDZjZTBlMAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIEZlYiAxMyAwODowNjozOSAyMDExIC0wNTAwCiAKLTIwMDYtMDMtMTUgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIEZpeCBiYWRfYWJpIHRlc3QuIHJjNS4KIAotCSogc3JjL3NoNjQvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGZsb2F0IGFyZ3VtZW50cwotCXBhc3NlZCB3aXRoIEZQIHJlZ2lzdGVycyBjb3JyZWN0bHkuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCi0JKiBzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorY29tbWl0IDkwYWYxNWVmNWMxNjE0Yjc2MzcwYzRkMTM5NTQ1ODZmYWJmOWU4ZTMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTI6Mjk6MzYgMjAxMSAtMDUwMAogCi0yMDA2LTAzLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgaU9TIGZpeGVzCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjIChjbG9zdXJlX3Rlc3RfZm4pOiBNYXJrIGNpZiwKLQlhcmdzIGFuZCB1c2VyZGF0YSB1bnVzZWQuCi0JKGNsb3N1cmVfdGVzdF9mbjEpOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgotCShtYWluKTogUmVtb3ZlIHVudXNlZCByZXMuCitjb21taXQgNTVlNGE1YWExNTY4NTU4YTA0YWE0MGYxNmZjMDIyZTQ1OWFmNTNlMworQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDEyOjEzOjQ2IDIwMTEgLTA1MDAKIAotMjAwNi0wMi0yOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEFkZCBzdXBwb3J0IGZvciBidWlsZGluZyBhIGZ1bGwgYXJtdjYvYXJtdjcvaTM4NiB1bml2ZXJzYWwgaU9TIGxpYnJhcnkKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBBZGp1c3QgRlNGIGFkZHJlc3MuIEFkZCB0ZXN0IHJ1bnMgZm9yCi0JLU8yLCAtTzMsIC1PcyBhbmQgdGhlIHdhcm5pbmcgZmxhZ3MgLVcgLVdhbGwuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQWRkIGFuIF9fVU5VU0VEX18gbWFjcm8gdG8gbWFyawotCXVudXNlZCBwYXJhbWV0ZXIgdW51c2VkIGZvciBnY2Mgb3IgZWxzZSBkbyBub3RoaW5nLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jIChjbHNfc3RydWN0XzEyYnl0ZV9nbik6IE1hcmsgY2lmCi0JYW5kIHVzZXJkYXRhIHVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMgKGNsc19zdHJ1Y3RfMTZieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jIChjbHNfc3RydWN0XzE4Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYyAoY2xzX3N0cnVjdF8xOWJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jIChjbHNfc3RydWN0XzFfMWJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMgKGNsc19zdHJ1Y3RfMjBieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYyAoY2xzX3N0cnVjdF8yMGJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMgKGNsc19zdHJ1Y3RfMjRieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMgKGNsc19zdHJ1Y3RfMmJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jIChjbHNfc3RydWN0XzNfMWJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMgKGNsc19zdHJ1Y3RfM2J5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMgKGNsc19zdHJ1Y3RfM2J5dGVfZ24xKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYyAoY2xzX3N0cnVjdF80XzFieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMgKGNsc19zdHJ1Y3RfNGJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYyAoY2xzX3N0cnVjdF81Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jIChjbHNfc3RydWN0XzVieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jIChjbHNfc3RydWN0XzY0Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jIChjbHNfc3RydWN0XzZieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMgKGNsc19zdHJ1Y3RfNmJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYyAoY2xzX3N0cnVjdF83Ynl0ZV9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jIChjbHNfc3RydWN0XzdieXRlX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgKGNsc19zdHJ1Y3RfOGJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMgKGNsc19zdHJ1Y3RfOWJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgKGNsc19zdHJ1Y3RfOWJ5dGVfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgotCUxpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jIChjbHNfc3RydWN0X2FsaWduX2duKToKLQlMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jIChjbHNfc3RydWN0X2FsaWduX2duKToKLQlMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jIChjbHNfc3RydWN0X2FsaWduX2ZuKTogQ2FzdAotCXZvaWQqIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcuCi0JKG1haW4pOiBMaWtld2lzZS4KLQkoY2xzX3N0cnVjdF9hbGlnbl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKLQlMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgotCUxpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6Ci0JTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKLQlMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgotCUxpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYyAoY2xzX3JldF9kb3VibGVfZm4pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYyAoY2xzX3JldF9mbG9hdF9mbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZiBhbmQKLQlkYXRhIHVudXNlZC4KLQkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZiBhbmQKLQlkYXRhIHVudXNlZC4KLQkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYKLQlhbmQgZGF0YSB1bnVzZWQuCi0JKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZiBhbmQKLQlkYXRhIHVudXNlZC4KLQkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZiBhbmQKLQlkYXRhIHVudXNlZC4KLQkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYKLQlhbmQgZGF0YSB1bnVzZWQuCi0JKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jIChjbHNfcmV0X3NjaGFyX2ZuKTogTWFyayBjaWYgYW5kCi0JdXNlcmRhdGEgdW51c2VkLgotCShjbHNfcmV0X3NjaGFyX2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMgKGNsc19yZXRfc2ludF9mbik6IE1hcmsgY2lmIGFuZAotCXVzZXJkYXRhIHVudXNlZC4KLQkoY2xzX3JldF9zaW50X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyAoY2xzX3JldF9zc2hvcnRfZm4pOiBNYXJrIGNpZiBhbmQKLQl1c2VyZGF0YSB1bnVzZWQuCi0JKGNsc19yZXRfc3Nob3J0X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jIChjbHNfcmV0X3VjaGFyX2ZuKTogIE1hcmsgY2lmIGFuZAotCXVzZXJkYXRhIHVudXNlZC4KLQkoY2xzX3JldF91Y2hhcl9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIChjbHNfcmV0X3VpbnRfZm4pOiBNYXJrIGNpZiBhbmQKLQl1c2VyZGF0YSB1bnVzZWQuCi0JKGNsc19yZXRfdWludF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMgKGNsc19yZXRfdWxvbmdsb25nX2ZuKTogTWFyayBjaWYKLQlhbmQgdXNlcmRhdGEgdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYyAoY2xzX3JldF91c2hvcnRfZm4pOiBNYXJrIGNpZiBhbmQKLQl1c2VyZGF0YSB1bnVzZWQuCi0JKGNsc19yZXRfdXNob3J0X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmMgKGZsb2F0aW5nKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYyAobWFpbik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaS4KLQlDbGVhbnVwIHdoaXRlIHNwYWNlcy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYyAoY2hlY2tpbmcpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGkuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIChjbHNfc3RydWN0X2NvbWJpbmVkX2duKTogTWFyawotCWNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgKGNsc19zdHJ1Y3RfY29tYmluZWRfZ24pOgotCUxpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIChCX2duKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYyAoQl9mbik6IEFkanVzdCBwcmludGYKLQlmb3JtYXR0ZXJzIHRvIHNpbGVuY2UgZ2NjLgotCShCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jIChCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhCi0JdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IE1lbnRpb24gcmVsYXRlZCBQUi4KLQkoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYyAoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YQotCXVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBNZW50aW9uIHJlbGF0ZWQgUFIuCi0JKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMgKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEKLQl1bnVzZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYyAoQl9nbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMgKEJfZ24pOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jIChzdHViKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMgKG1haW4pOiBDYXN0IHRoZSByZXN1bHQgdG8gc2lsZW5jZQotCWdjYy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IEFkZCB0aGUgbm90ZSBtZW50aW9uZWQKLQlpbiB0aGUgbGFzdCBjb21taXQgZm9yIHRoaXMgdGVzdCBjYXNlIGluIHRoZSB0ZXN0IGNhc2UgaXRzZWxmLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgKGNsb3N1cmVfdGVzdF9mbjApOiBNYXJrIGNpZiBhcwotCXVudXNlZC4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIChjbG9zdXJlX3Rlc3RfZm4xKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAoY2xvc3VyZV90ZXN0X2ZuMik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMgKGNsb3N1cmVfdGVzdF9mbjMpOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jIChjbG9zdXJlX3Rlc3RfZm4wKTogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyAoY2xvc3VyZV90ZXN0X2ZuNSk6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMgKGNsb3N1cmVfdGVzdF9mbjApOiBMaWtld2lzZS4KK2NvbW1pdCBhMGM4MGYyNzliODczM2QwMDFjYjVlNWM1YTMyODllY2I3YTZlNTZhCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTE6NDM6NDkgMjAxMSAtMDUwMAogCi0yMDA2LTAyLTIyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICBVcGRhdGUgbXkgZS1tYWlsIGFkZHJlc3MuCiAKLQkqIHNyYy9zaC9zeXN2LlM6IEZpeCByZWdpc3RlciBudW1iZXJzIGluIHRoZSBGREUgZm9yCi0JZmZpX2Nsb3N1cmVfU1lTVi4KK2NvbW1pdCA4MTk1ZTBlMTFkZjdhNTNmYTQ3NGNhYTkzNzVmNzNjYTExMzZlZDY2CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTE6Mjc6MDAgMjAxMSAtMDUwMAogCi0yMDA2LTAyLTIwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgRml4IHN5bWJvbCBwcmVmaXhlcyBvbiBEYXJ3aW4uCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IFJlbW92ZSBzdGF0aWMKLQlkZWNsYXJhdGlvbiB0byBhdm9pZCBhIGZhbHNlIG5lZ2F0aXZlIG9uIGl4ODYuIFNlZSBQUjMyMy4KK2NvbW1pdCA1NmIzZjhjZWYwZjI4Y2VmYWEwZjQwZmUwY2Y3YzUyNGFkZWYxMzFkCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTE6MTQ6NTQgMjAxMSAtMDUwMAogCi0yMDA2LTAyLTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICBNb2RpZnkgdGhlIGZmaV9jbG9zdXJlIHN0cnVjdHVyZXMgdG8gaG9sZCB0YWJsZS90YWJsZSBlbnRyeSBwb2ludGVycyBpbnN0ZWFkIG9mIGEgY29kZSBidWZmZXIuCisgICAgCisgICAgVGhpcyByZS1pbnRlZ3JhdGVzIGNvbW1pdCBkYTI3NzNlMDJhYjI2Y2MxMWE3Zi4KIAotCSogc3JjL3NoL2ZmaS5jIChmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUKLQlhbmQgY2FzdCBpbnRlZ2VyIHRvIHZvaWQgKiBpZiBuZWVkZWQuICBVcGRhdGUgdGhlIHBvaW50ZXIgdG8KLQl0aGUgRlAgcmVnaXN0ZXIgc2F2ZWQgYXJlYSBjb3JyZWN0bHkuCitjb21taXQgMjhhMDBmNjFmZjNmNjRjNGViMjI2OWNlMmFlYTNkNDkzMjc0NDY5ZQorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDExOjAxOjQ4IDIwMTEgLTA1MDAKIAotMjAwNi0wMi0xNyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEFwcGxlIGFzc2VtYmxlciBzdXBwb3J0OyBmaXhlZCBtb3N0IGdhcy9FTEYtaXNtcy4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmM6IFhGQUlMIHRoaXMgdGVzdCB1bnRpbCBQUjI1NjMwCi0JaXMgZml4ZWQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTGlrZXdpc2UuCitjb21taXQgN2YyZWEzM2E4MGJmY2VkNWU0OGVkNzI5MmYzYjhmMDU3ZDU0ZmY4ZgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgRmViIDEyIDEwOjM5OjE4IDIwMTEgLTA1MDAKIAotMjAwNi0wMi0xNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIFJlcGxhY2UgUkVUTERNIG1hY3JvLgorICAgIAorICAgIFRoZSBtYWNybyBpcyBpbmNvbXBhdGlibGUgd2l0aCBBcHBsZSdzIGFzc2VtYmxlcjsgc3dpdGNoIHRvCisgICAgYSBzaW1wbGUgaW5saW5lIHZlcnNpb24uCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsLmM6IE5ldyB0ZXN0IGNhc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwzLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmM6IExpa2V3aXNlLgorY29tbWl0IDkyZmYyM2U3N2ZhNTg2NDU1YjQyN2I3MWY0OWUxZDk1MDI0NzBlNmUKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMDoyNDo0OSAyMDExIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBSZW1vdmUgZmZpX3R5cGVfbXlsb25nCi0JZGVmaW5pdGlvbi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBmZmlfdHlwZV9teWxvbmcgZGVmaW5pdGlvbgotCWhlcmUgdG8gYmUgdXNlZCBieSBvdGhlciB0ZXN0IGNhc2VzIHRvby4KKyAgICBTd2l0Y2ggdG8gdGhlIGN1cnJlbnQgaU9TIDQuMiBTREsuCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYzogTmV3IHRlc3QgY2FzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBMaWtld2lzZS4KK2NvbW1pdCA1OGZiOGNhMmRmYjg5YWQ3MDI4NGJiOTY3OGQzZDRkYmI2NThjOGE3CitNZXJnZTogY2MzZmJkOSA3MWM3OTJmCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTA6MjM6MTkgMjAxMSAtMDUwMAogCi0yMDA2LTAxLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgTWVyZ2UgcmVtb3RlIGJyYW5jaCAndXBzdHJlYW0vbWFzdGVyJwogCi0JKiBjb25maWd1cmUuYWM6IEVuYWJsZSBsaWJmZmkgZm9yIHNwYXJjNjQtKi1mcmVlYnNkKi4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCBjYzNmYmQ5NzVjZTkzNjZkNGM0MGE2ZmY2YzEwOGY2NjQ4NjdiZDdjCitNZXJnZTogZTQ0OWE0MyBmNmFiM2VkCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMTIgMTA6MjE6MDIgMjAxMSAtMDUwMAogCi0yMDA2LTAxLTE4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0aHViLmNvbTpsYW5kb25mL2xpYmZmaS1pb3MKIAotCSogc3JjL3Bvd2VycGMvc3lzdi5TIChzbXN0X3R3b19yZWdpc3Rlcik6IERvbid0IGNhbGwgX19hc2hsZGkzLAotCWluc3RlYWQgZG8gdGhlIHNoaWZ0aW5nIGlubGluZS4KLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBEb24ndCBjb21wdXRlICVyNQotCXNoaWZ0IGNvdW50IHVuY29uZGl0aW9uYWxseS4gIFNpbXBsaWZ5IGxvYWQgc2VxdWVuY2VzIGZvciAxLCAyLCAzLCA0Ci0JYW5kIDggYnl0ZSBzdHJ1Y3RzLCBmb3IgdGhlIHJlbWFpbmluZyBzdHJ1Y3Qgc2l6ZXMgZG9uJ3QgY2FsbAotCV9fbHNocmRpMywgaW5zdGVhZCBkbyB0aGUgc2hpZnRpbmcgaW5saW5lLgorY29tbWl0IGU0NDlhNDNiYmUxMmY4MTE5Mzk5OTI4ZGIxYWUyNmFkYzcxZGRlMTQKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAxMiAxMDoyMDo0MiAyMDExIC0wNTAwCiAKLTIwMDUtMTItMDcgIFRoaWVtbyBTZXVmZXIgIDx0aHNAbmV0d29ya25vLmRlPgorICAgIEFsbG93IHNwZWNpZmljYXRpb24gb2YgdGhlIG1pbmltdW0gc3VwcG9ydGVkIGlPUyB2ZXJzaW9uLgogCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogUmVtb3ZlIG9ic29sZXRlIHNnaWRlZnMuaCBpbmNsdWRlLiBBZGQKLQltaXNzaW5nIHBhcmVudGhlc2VzLgotCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jYWxsX08zMik6IENvZGUgZm9ybWF0dGluZy4gRGVmaW5lCi0JYW5kIHVzZSBBM19PRkYsIEZQX09GRiwgUkFfT0ZGLiBNaWNyby1vcHRpbWl6YXRpb25zLgotCShmZmlfY2xvc3VyZV9PMzIpOiBMaWtld2lzZSwgYnV0IHdpdGggbmV3bHkgZGVmaW5lZCBBM19PRkYyLAotCUEyX09GRjIsIEExX09GRjIsIEEwX09GRjIsIFJBX09GRjIsIEZQX09GRjIsIFMwX09GRjIsIEdQX09GRjIsCi0JVjFfT0ZGMiwgVjBfT0ZGMiwgRkFfMV8xX09GRjIsIEZBXzFfMF9PRkYyLCBGQV8wXzFfT0ZGMiwKLQlGQV8wXzBfT0ZGMi4KLQkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogQ29kZSBmb3JtYXR0aW5nLiBGaXgKLQllbmRpYW5uZXNzIGJ1Z3MuCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBJbXByb3ZlIHRyYW1wb2xpbmUgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZy4KLQkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBGaXggZW5kaWFubmVzcyBidWdzLgorY29tbWl0IDcxYzc5MmY1MWJjZjNlMmYzMzRlNWVhMWZiMWE4YjY2N2NiM2FlZGIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFNhdCBGZWIgMTIgMDk6MzM6MTEgMjAxMSAtMDUwMAogCi0yMDA1LTEyLTAzICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIHJjNAogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYzogRm9ybWF0dGluZy4KLQkoZmZpX3ByZXBfYXJnc19TWVNWKTogQXZvaWQgcG9zc2libGUgYWxpYXNpbmcgcHJvYmxlbXMgYnkgdXNpbmcgdW5pb25zLgotCShmZmlfcHJlcF9hcmdzNjQpOiBMaWtld2lzZS4KK2NvbW1pdCA3YzdjOWYzMjcyOTkzMzEwMjJmNjAwMDYwM2EzNWYyMzEwZGZlMzA4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTYXQgRmViIDEyIDA5OjI5OjI5IDIwMTEgLTA1MDAKIAotMjAwNS0wOS0zMCAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+CisgICAgdW5nY2NpZnkgcGFydHMgb2YgdGhlIGJ1aWxkCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogRm9yCi0JZGFyd2luLCB1c2UgLXNoYXJlZC1saWJnY2Mgbm90IC1sZ2NjX3MsIGFuZCBleHBsYWluIHdoeS4KK2NvbW1pdCBlZDYyZTQ4Yjk1YTBmYTYwYjY4NWY2NDdjYjczYzllMTkwZWVjMzVjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgRmViIDExIDEyOjIzOjU4IDIwMTEgLTA1MDAKIAotMjAwNS0wOS0yNiAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorICAgIEZpeCBwZXJtaXNzaW9ucwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmMgKHZhbHVlX3R5cGUpOiBOZXcgdHlwZWRlZi4KLQkoQ0FOQVJZKTogTmV3IGRlZmluZS4KLQkobWFpbik6IENoZWNrIGZvciByZXN1bHQgYnVmZmVyIG92ZXJmbG93LgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBIYW5kbGUgbGludXg2NCBsb25nIGRvdWJsZSByZXR1cm5zLgotCSogc3JjL3Bvd2VycGMvZmZpLmMgKEZMQUdfUkVUVVJOU18xMjhCSVRTKTogTmV3IGNvbnN0YW50LgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBsaW51eDY0IGxvbmcgZG91YmxlIHJldHVybnMuCitjb21taXQgMTdkOWU5ZTY4ZGRiMWI5MTVhMGI5NzUxNzEzMDMzODYxYjU5ODU3NQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAxMSAxMjoyMzoyMCAyMDExIC0wNTAwCiAKLTIwMDUtMDgtMjUgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgVXNlIG5ld2VyIGF1dG90b29scy4gIE9ubHkgYnVpbGQgZGVidWcuYyB3aGVuIC0tZW5hYmxlLWRlYnVnLgogCi0JUFIgdGFyZ2V0LzIzNDA0Ci0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnc19TWVNWKTogQ29ycmVjdCBwbGFjZW1lbnQgb2Ygc3RhY2sKLQlob21lZCBmcCBhcmdzLgotCShmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ29ycmVjdCBzdGFjayBzaXppbmcgZm9yIHNhbWUuCitjb21taXQgNjk3MmE0ZmZkYTc1NzYxZWFhYjdkZmJlMGZiMTUxNmIyNTVlOGUwYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgRnJpIEZlYiAxMSAwNzozMjo1MSAyMDExIC0wNTAwCiAKLTIwMDUtMDgtMTEgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIEZpeCB4bGMgYnVpbGQgb24gQUlYCiAKLQkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9ISURERU5fVklTSUJJTElUWV9BVFRSSUJVVEUpOiBOZXcgdGVzdC4KLQkoQUhfQk9UVE9NKTogQWRkIEZGSV9ISURERU4gZGVmaW5pdGlvbi4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGhpZGRlbik6IFJlbW92ZS4KLQkoZmZpX2Nsb3N1cmVfTElOVVg2NCwgZmZpX3ByZXBfYXJnczY0LCBmZmlfY2FsbF9MSU5VWDY0LAotCWZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogVXNlIEZGSV9ISURERU4gaW5zdGVhZCBvZiBoaWRkZW4uCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCwKLQkuZmZpX2Nsb3N1cmVfTElOVVg2NCk6IFVzZSBGRklfSElEREVOIGluc3RlYWQgb2YgLmhpZGRlbi4KLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1YsIGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogUmVtb3ZlLAotCWFkZCBGRklfSElEREVOIHRvIGl0cyBwcm90b3R5cGUuCi0JKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpOiBOZXcuCi0JKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBOZXcuCi0JKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX1NZU1YsIGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTmV3LgorY29tbWl0IDE4MzNhYTBmYjk4MzFlYjA3MjViNjNlMzU4ODZjMGY2ZDM1ZGY0ODAKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBGZWIgMTEgMDc6MTE6MDQgMjAxMSAtMDUwMAogCi0yMDA1LTA4LTEwICBBbGZyZWQgTS4gU3ptaWR0ICA8YW1zQGdudS5vcmc+CisgICAgc3BhcmMgQUJJIHRlc3QgZml4LgogCi0JUFIgbGliZmZpLzIxODE5OgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmFjOiBIYW5kbGUgaSo4Ni0qLWdudSouCitjb21taXQgZjFmYjEzOWI0ZTI4M2ZmZmRjZjIwNWE5MDM5NDNkNWU5ZDJiYjJhMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDE4OjMwOjAyIDIwMTEgLTA1MDAKIAotMjAwNS0wOC0wOSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgRml4IHRlc3RzCiAKLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBVc2UKLQlEV19DRkFfb2Zmc2V0X2V4dGVuZGVkX3NmIHJhdGhlciB0aGFuCi0JRFdfQ0ZBX0dOVV9uZWdhdGl2ZV9vZmZzZXRfZXh0ZW5kZWQuCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBMaWtld2lzZS4KK2NvbW1pdCA1Y2I0NzAzMzFkMTgxYzg0ZDVkNjIxZTg4ODY4MzI3YTMyNGE1ODk4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMTU6MjM6MDYgMjAxMSAtMDUwMAogCi0yMDA1LTA3LTIyICBTVUdJT0tBIFRvc2hpbm9idSAgPHN1Z2lva2FAaXRvbmV0LmNvLmpwPgorICAgIEZpeCBwZXJtaXNzaW9ucwogCi0JKiBzcmMvc2gvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogU3RvcCBhcmd1bWVudCBwb3BwaW5nIGNvcnJlY3RseQotCW9uIHNoMy4KLQkoZmZpX2Nsb3N1cmVfU1lTVik6IENoYW5nZSB0aGUgc3RhY2sgbGF5b3V0IGZvciBzaDMgc3RydWN0IGFyZ3VtZW50LgotCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IHNoMyBhcmd1bWVudCBjb3B5LCB3aGVuIGl0IGlzCi0JcGFydGlhbGx5IG9uIHJlZ2lzdGVyLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERvbid0IHNldCB0b28gbWFueSBjaWYtPmZsYWdzLgorY29tbWl0IDI2OWRlZWY2ZGJiYjQyNjY5NTkxOWQzMzk4MzU3ZmFkYTNiYjI4OGMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAxNToyMjoyMyAyMDExIC0wNTAwCiAKLTIwMDUtMDctMjAgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIHJjMwogCi0JKiBzcmMvc2gvZmZpLmMgKGZmaV9jYWxsKTogSGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMgY29ycmVjdGx5LgotCVJlbW92ZSBlbXB0eSBsaW5lLgotCSogc3JjL3NoNjQvZmZpLmMgKHNpbXBsZV90eXBlKTogUmVtb3ZlLgotCShyZXR1cm5fdHlwZSk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGNvcnJlY3RseS4KLQkoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgotCShmZmlfY2FsbCk6IExpa2V3aXNlLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgotCSogc3JjL3NoNjQvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogSGFuZGxlIDEsIDIgYW5kIDQtYnl0ZSByZXR1cm4uCi0JRW1pdCBwb3NpdGlvbiBpbmRlcGVuZGVudCBjb2RlIGlmIFBJQyBhbmQgcmVtb3ZlIHdyb25nIGRhdGFsYWJlbAotCXByZWZpeGVzIGZyb20gRUggZGF0YS4KK2NvbW1pdCA0MjY5NWU3MjUwNGY2NDc0NDRiOGU4ZTliOTBiZDI0ZjFlMzIyMGUxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMTU6MTI6MzUgMjAxMSAtMDUwMAogCi0yMDA1LTA3LTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgRml4IElSSVggc3VwcG9ydAogCi0JKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIFBPV0VSUENfRlJFRUJTRC4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogY29uZmlndXJlLmFjOiBBZGQgUE9XRVJQQ19GUkVFQlNEIHJ1bGVzLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgotCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEFkZCBQT1dFUlBDX0ZSRUVCU0QgcnVsZXMuCi0JKEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUKTogRGVmaW5lLgotCSogc3JjL3Bvd2VycGMvZmZpLmM6IEFkZCBmbGFncyB0byBoYW5kbGUgc21hbGwgc3RydWN0dXJlIHJldHVybnMKLQlpbiBmZmlfY2FsbF9TWVNWLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGZvciBTWVNWIDQgQUJJLgotCUFrYSBGRklfU1lTVi4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IEFkZCByZXR1cm4gdHlwZXMgZm9yIHNtYWxsIHN0cnVjdHVyZXMuCi0JKiBzcmMvcG93ZXJwYy9zeXN2LlM6IEFkZCBiaXRzIHRvIGhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmVzIGZvcgotCWZpbmFsIFNZU1YgNCBBQkkuCitjb21taXQgYTZlNTZiOTdmNjJhM2ZlZWIzMzAxYzI0YTJlNGNhZTU1ZTU0NjAyMQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDE1OjAwOjQyIDIwMTEgLTA1MDAKIAotMjAwNS0wNy0xMCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEFkZCBwb3dlcnBjNjQtKi1kYXJ3aW4qIHN1cHBvcnQKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181XzFfYnl0ZS5jOiBOZXcgdGVzdCBmaWxlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYzogTGlrZXdpc2UuCitjb21taXQgNzQ3ZDZjMzJkNGFiYjA3YzEwYzNhMWY5MzU3OWMzOTI5YWFhMjQ4NworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgV2VkIEZlYiA5IDE0OjU2OjIzIDIwMTEgLTA1MDAKIAotMjAwNS0wNy0wNSAgUmFuZG9scGggQ2h1bmcgIDx0YXVzcUBkZWJpYW4ub3JnPgorICAgIEFkZCBJbnRlcml4IHN1cHBvcnQKIAotCSogc3JjL3BhL2ZmaS5jIChmZmlfc3RydWN0X3R5cGUpOiBSZW5hbWUgRkZJX1RZUEVfU01BTExfU1RSVUNUMQotCWFzIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMuICBCcmVhayBvdXQgaGFuZGxpbmcgZm9yIDUtNyBieXRlCi0Jc3RydWN0dXJlcy4gIEtpbGwgY29tcGlsYXRpb24gd2FybmluZ3MuCi0JKGZmaV9jbG9zdXJlX2lubmVyX0xJTlVYKTogUHJpbnQgcmV0dXJuIHZhbHVlcyBhcyBoZXggaW4gZGVidWcKLQltZXNzYWdlLiAgUmVuYW1lIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEgYXMgRkZJX1RZUEVfU01BTExfU1RSVUNUMy4KLQlQcm9wZXJseSBoYW5kbGUgNS03IGJ5dGUgc3RydWN0dXJlIHJldHVybnMuCi0JKiBzcmMvcGEvZmZpdGFyZ2V0LmggKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDEpCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIpOiBSZW1vdmUuCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMsIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDUpCi0JKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDYsIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDcpOiBEZWZpbmUuCi0JKiBzcmMvcGEvbGludXguUzogTWFyayBzb3VyY2UgZmlsZSBhcyB1c2luZyBQQTEuMSBhc3NlbWJseS4KLQkoY2hlY2tzbXN0MSwgY2hlY2tzbXN0Mik6IFJlbW92ZS4KLQkoY2hlY2tzbXN0Myk6IE9wdGltaXplIGhhbmRsaW5nIG9mIDMtYnl0ZSBzdHJ1Y3QgcmV0dXJucy4KLQkoY2hlY2tzbXN0NTY3KTogUHJvcGVybHkgaGFuZGxlIDUtNyBieXRlIHN0cnVjdCByZXR1cm5zLgorY29tbWl0IGVhYjZlNDFjZGUzODJhYTA3ZGU2YzAxMWQ1MTRhMTRjMGQ2MmViNDcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAxMDoxNTowMiAyMDExIC0wNTAwCiAKLTIwMDUtMDYtMTUgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIFJlbW92ZSBSRUFETUUubWFya2Rvd24gZm9ybSBsaWJmZmktaW9zCiAKLQlQUiBsaWJnY2ovMjE5NDMKLQkqIHNyYy9taXBzL24zMi5TOiBFbmZvcmNlIFBJQyBjb2RlLgotCSogc3JjL21pcHMvbzMyLlM6IExpa2V3aXNlLgorY29tbWl0IDY5ZGJlODQ1ZjRlZTNlNmNlODk5OWYxN2ExZTRmMjE3OWVmN2RhODkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFdlZCBGZWIgOSAwNzozODo0MyAyMDExIC0wNTAwCiAKLTIwMDUtMDYtMTUgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIEZpeCB4ZmFpbHMKIAotCSogY29uZmlndXJlLmFjOiBUcmVhdCBpKjg2LSotc29sYXJpczIuMTAgYW5kIHVwIGFzIFg4Nl82NC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCBmNDk4MzE4YzA3Yjk1MTM3ZmUyNTlkODZiZGJlMTUzNDc1ODhiODRhCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMDY6MjY6NDYgMjAxMSAtMDUwMAogCi0yMDA1LTA2LTAxICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIFVwZGF0ZSBSRUFETUUgZm9yIGlPUyBhZ2FpbgogCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9TWVNWKTogRG9uJ3QgdXNlIEpVTVBUQVJHRVQKLQl0byBjYWxsIGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWLiAgQXBwZW5kIEBsb2NhbCBpbnN0ZWFkLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogTGlrZXdpc2UgZm9yIGZmaV9wcmVwX2FyZ3NfU1lTVi4KK2NvbW1pdCA2MzBiOWMwYWM0M2M3ZWRjYmZkODkyZTIzYzA5ZmIyNjcyNGY0YWMwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMDY6MjQ6MjMgMjAxMSAtMDUwMAogCi0yMDA1LTA1LTE3ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorICAgIFVwZGF0ZSB0byByYzIKIAotCSogY29uZmlndXJlLmFjOiBVc2UgQUNfQ19CSUdFTkRJQU4gaW5zdGVhZCBvZiBBQ19DX0JJR0VORElBTl9DUk9TUy4KLQlVc2UgQUNfQ0hFQ0tfU0laRU9GIGluc3RlYWQgb2YgQUNfQ09NUElMRV9DSEVDS19TSVpFT0YuCi0JKiBNYWtlZmlsZS5hbSAoQUNMT0NBTF9BTUZMQUdTKTogUmVtb3ZlIC1JIC4uL2NvbmZpZy4KLQkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZSwgZmZpY29uZmlnLmguaW4sIE1ha2VmaWxlLmluLAotCWluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KK2NvbW1pdCAwY2FkNDM4NmZhNGM5ZWE1ZjhjYTg4YjE2MjQ3ZGI0ZTVjOGZlYTkwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBXZWQgRmViIDkgMDY6MTE6NDYgMjAxMSAtMDUwMAogCi0yMDA1LTA1LTA5ICBNaWtlIFN0dW1wICA8bXJzQGFwcGxlLmNvbT4KKyAgICBBZGQgQ2hhbmdlTG9nIGVudHJ5LiAgRml4IGNvcHlyaWdodCBoZWFkZXJzLgogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgMDljYjc2ZjI2NDViZDJjMTUxODQ2ZTkyNDlkOGVhNzA3YmEwMWU4YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDIwOjM5OjUxIDIwMTEgLTA1MDAKIAotMjAwNS0wNS0wOCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKyAgICBBZGQgbWlzc2luZyBjaGFuZ2UKIAotCVBSIGxpYmZmaS8yMTI4NQotCSogc3JjL2FscGhhL29zZi5TOiBVcGRhdGUgdW53aW5kIGludG8gdG8gbWF0Y2ggY29kZS4KK2NvbW1pdCAyZTNhNDhjY2RkNTQzNDA5ODNjNDZhMjlhMGI0MTk4NWUzZTc4OWFjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMjA6Mzc6MjYgMjAxMSAtMDUwMAogCi0yMDA1LTA1LTA0ICBBbmRyZWFzIERlZ2VydCA8YWRAcGFweXJ1cy1nbWJoLmRlPgotCSAgICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorICAgIEZpeCBtYWtlIGRpc3QKIAotCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNhdmUgc3NlLXVzZWQgZmxhZyBpbgotCWJpdCAxMSBvZiBmbGFncy4KLQkoZmZpX2NhbGwpOiBNYXNrIHJldHVybiB0eXBlIGZpZWxkLiAgUGFzcyBzc2Vjb3VudCB0byBmZmlfY2FsbF91bml4NjQuCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBTZXQgY2FycnkgYml0IGlmIHNzZS11c2VkIGZsYWcgc2V0LgotCSogc3JjL3g4Ni91bml4NjQuUyAoZmZpX2NhbGxfdW5peDY0KTogQWRkIHNzZWNvdW50IGFyZ3VtZW50LgotCU9ubHkgbG9hZCBzc2UgcmVnaXN0ZXJzIGlmIHNzZWNvdW50IG5vbi16ZXJvLgotCShmZmlfY2xvc3VyZV91bml4NjQpOiBPbmx5IHNhdmUgc3NlIHJlZ2lzdGVycyBpZiBjYXJyeSBzZXQgb24gZW50cnkuCitjb21taXQgNWU0ODE0ZDk5MjhlMjM2YTJhNGFmZTg0ZDZlMWQ0ZmRhYTQ3MzIwNgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDE5OjQ2OjI4IDIwMTEgLTA1MDAKIAotMjAwNS0wNC0yOSAgUmFsZiBDb3JzZXBpdXMgIDxyYWxmLmNvcnNlcGl1c0BydGVtcy5vcmc+CisgICAgZml4IHBlcm1pc3Npb25zCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIGkqODYtKi1ydGVtcyosIHNwYXJjKi0qLXJ0ZW1zKiwKLQlwb3dlcnBjLSpydGVtcyosIGFybSotKi1ydGVtcyosIHNoLSotcnRlbXMqLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorY29tbWl0IDVjMGNjNmYxNTM2YWExNzM4Nzk1YTk3MzAzODEwYTgyM2M3ZmEyY2IKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxOTo0NTo1OSAyMDExIC0wNTAwCiAKLTIwMDUtMDQtMjAgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgorICAgIDMuMC4xMHJjMQogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1kZy10ZXN0LTEpOiBJbiByZWdzdWIgdXNlLAotCWhhdmUgVGNsOC4zLWNvbXBhdGlibGUgaW50ZXJtZWRpYXRlIHZhcmlhYmxlLgorY29tbWl0IDg1N2ZlM2RlNDZkMjI4NmFmYTJmZTc3MjkyMGVjZjRhZWZhMTY4OGYKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxOTozOToyMCAyMDExIC0wNTAwCiAKLTIwMDUtMDQtMTggIFNpbW9uIFBvc25qYWsgPHNpbW9uLnBvc25qYWtAc2lvbC5uZXQ+Ci0JICAgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgorICAgIENsZWFuIHVwcwogCi0JKiBNYWtlZmlsZS5hbTogQWRkIENSSVMgc3VwcG9ydC4KLQkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW4sCi0JaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHNyYy9jcmlzOiBOZXcgZGlyZWN0b3J5LgotCSogc3JjL2NyaXMvZmZpLmMsIHNyYy9jcmlzL3N5c3YuUywgc3JjL2NyaXMvZmZpdGFyZ2V0Lmg6IE5ldyBmaWxlcy4KLQkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBXcmFwIGluICNpZm5kZWYgX19DUklTX18uCitjb21taXQgZTIyMTRmOGFkYjU1NzdjMjQ3NDUyZTJjYzlmNGNiZTMwNGQ3Y2E5ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDE5OjIyOjU2IDIwMTEgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktZGctdGVzdC0xKTogUmVwbGFjZSBcbiB3aXRoCi0JXHI/XG4gaW4gb3V0cHV0IHRlc3RzLgorICAgIFVwZGF0ZSBSRUFETUUKIAotMjAwNS0wNC0xMiAgTWlrZSBTdHVtcCAgPG1yc0BhcHBsZS5jb20+Citjb21taXQgMTEwNjIyOWE1NzIxYTY1OWRhNWMyMzFlYzBlODIxMTExOTYxNTM5NAorTWVyZ2U6IGJjOWQwYmUgZjZhYjNlZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDE5OjIwOjA5IDIwMTEgLTA1MDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIEFkZCBpT1Mgc3VwcG9ydAogCi0yMDA1LTAzLTMwICBIYW5zIEJvZWhtICA8SGFucy5Cb2VobUBocC5jb20+Citjb21taXQgYmM5ZDBiZTI5NThjZTQ3NTc1N2YzNGRkMmM4Nzg5NDhhYTc3YTM5ZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDE3OjA0OjI2IDIwMTEgLTA1MDAKIAotCSogc3JjL2lhNjQvZmZpdGFyZ2V0LmggKGZmaV9hcmcpOiBVc2UgbG9uZyBsb25nIGluc3RlYWQgb2YgREkuCisgICAgMy4wLjEwcmMwIGNoYW5nZXMKIAotMjAwNS0wMy0zMCAgU3RldmUgRWxsY2V5ICA8c2plQGN1cC5ocC5jb20+Citjb21taXQgM2I4MzYyNDlmZWFlNmQwOGQzZTY4ODc0ODZlNGI5OTYxZGRhZmEwOQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDE0OjI4OjU5IDIwMTEgLTA1MDAKIAotCSogc3JjL2lhNjQvZmZpdGFyZ2V0LmggKGZmaV9hcmcpIEFERCBESSBhdHRyaWJ1dGUuCi0JKGZmaV9zYXJnKSBEaXR0by4KLQkqIHNyYy9pYTY0L3VuaXguUyAoZmZpX2Nsb3N1cmVfdW5peCk6IEV4dGVuZCBncAotCXRvIDY0IGJpdHMgaW4gSUxQMzIgbW9kZS4KLQlMb2FkIDY0IGJpdHMgZXZlbiBmb3Igc2hvcnQgZGF0YS4KKyAgICBSZWJhc2UgZnJvbSBHQ0MKIAotMjAwNS0wMy0yMyAgTWlrZSBTdHVtcCAgPG1yc0BhcHBsZS5jb20+Citjb21taXQgYTI2ZTM5NDA2MTlmYWViYTZkZTU0ODI0Yzk1NDBjOTBiMWFhYjUxMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDEzOjU2OjEyIDIwMTEgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IFVwZGF0ZSBmb3IgLW02NCBtdWx0aWxpYi4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorICAgIGNvcHlyaWdodCB1cGRhdGVzIHBhdGNoCiAKLTIwMDUtMDMtMjEgIFphY2sgV2VpbmJlcmcgIDx6YWNrQGNvZGVzb3VyY2VyeS5jb20+Citjb21taXQgYjgwOTk1MzlmMDBlMjI0MTA3NTk0MTAxZTk3NjBiNmRjMDgxYTA1NgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDEzOjUwOjQzIDIwMTEgLTA1MDAKIAotCSogY29uZmlndXJlLmFjOiBEbyBub3QgaW52b2tlIFRMX0FDX0dDQ19WRVJTSU9OLgotCURvIG5vdCBzZXQgdG9vbF9pbmNsdWRlX2Rpci4KLQkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjoKLQlSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogU2V0IGdjY192ZXJzaW9uIGFuZCB0b29sbGliZmZpZGlyLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICBGaXggbXN2Y2Muc2ggYm90Y2gKIAotMjAwNS0wMi0yMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgZGM0MTFlOGY5OTExM2EzNDY1NmJmZDJkM2FlNTEyNTk5NzI0ODhjYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDEwOjQ5OjI5IDIwMTEgLTA1MDAKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQnVtcCBhbGlnbm1lbnQgdG8KLQlvZGQtbnVtYmVyZWQgcmVnaXN0ZXIgcGFpcnMgZm9yIDY0LWJpdCBpbnRlZ2VyIHR5cGVzLgorICAgIEZpeCBIUC1VWCBidWlsZAogCi0yMDA1LTAyLTIzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgNDA0NTg1ZDEzNDhlMzBhYzU4MjAzYmJkODc2ZDkxMzFlNWFlZDg3NAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDEwOjQ0OjM2IDIwMTEgLTA1MDAKIAotCVBSIGxpYmZmaS8yMDEwNAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYzogTmV3IHRlc3QgY2FzZS4KKyAgICBGaXggc3BhcmMgdjggYWdncmVnYXRlIHR5cGUgcmV0dXJucyBmb3Igc3VuJ3MgY29tcGlsZXIKIAotMjAwNS0wMi0xMSAgSmFuaXMgSm9obnNvbiAgPGphbmlzMTg3QHVzLmlibS5jb20+Citjb21taXQgMTljZTcxMzE4OGUxOTNlNDUyMjc0MGQyNGMyMDE3MDQxMTg4M2QyZAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDEwOjM0OjIzIDIwMTEgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IFJlbW92ZSBkZy1vcHRpb25zLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmM6IERpdHRvLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBEaXR0by4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYzogRGl0dG8uCisgICAgZ3JhbW1hciBmaXgKIAotMjAwNS0wMi0wOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IDg5Mjg0ZmU1NWYxYThhZDNiZGRiZWE3OTZlZTAwZDBlM2JhNDExY2UKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxMDoxOToxOSAyMDExIC0wNTAwCiAKLQkqIHNyYy9mcnYvZmZpdGFyZ2V0Lmg6IFJlbW92ZSBQUEMgc3R1ZmYgd2hpY2ggZG9lcyBub3QgYmVsb25nIHRvIGZydi4KKyAgICBGaXggQUlYIGJ1aWxkIHdpdGggSUJNIFhMQwogCi0yMDA1LTAxLTEyICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorY29tbWl0IGJhMDIyYzMzOGFmOTdjYjE4ZDlmOGVkNWE2MDdmZDQ4M2E2MWMwOWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxMDoxMjo0OCAyMDExIC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cCAoY3h4X29wdGlvbnMpOiBBZGQKLQktc2hhcmVkLWxpYmdjYy4KKyAgICBmaXggd2luNjQtdW5kZXJzY29yZSBwYXRjaAogCi0yMDA0LTEyLTMxICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorY29tbWl0IDA5N2U1ZjM5MjRlZTkyYTNiYTZjZDcyZjc4N2RhOGEzZWIxNGZlYTMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBGZWIgOCAxMDoxMTowMCAyMDExIC0wNTAwCiAKLQkqIHNyYy90eXBlcy5jIChGRklfQUdHUkVHQVRFX1RZUEVERUYpOiBSZW1vdmUuCi0JKEZGSV9UWVBFREVGKTogUmVuYW1lIGZyb20gRkZJX0lOVEVHUkFMX1RZUEVERUYuICBSZXBsYWNlIHNpemUgYW5kCi0Jb2Zmc2V0IHBhcmFtZXRlcnMgd2l0aCBhIHR5cGUgcGFyYW1ldGVyOyBkZWR1Y2Ugc2l6ZSBhbmQgc3RydWN0dXJlCi0JYWxpZ25tZW50LiAgVXBkYXRlIGFsbCB1c2Vycy4KKyAgICB4ODYgcGNyZWwgdGVzdCBwYXJ0IDIKIAotMjAwNC0xMi0zMSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBlZDJjNTE4ZDk2MGI5MWQ0NDRiZTc0ZTVhNTU3NzlhOWM0NjAyZjNiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUdWUgRmViIDggMTA6MTA6MDcgMjAxMSAtMDUwMAogCi0JKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IERlZmluZSB3aXRoIHNpemVvZi4KLQkoRkZJX1RZUEVfTE9OR0RPVUJMRSk6IEZpeCBmb3IgaWE2NC4KLQkqIHNyYy9pYTY0L2ZmaXRhcmdldC5oIChzdHJ1Y3QgZmZpX2lhNjRfdHJhbXBvbGluZV9zdHJ1Y3QpOiBNb3ZlCi0JaW50byBmZmlfcHJlcF9jbG9zdXJlLgotCSogc3JjL2lhNjQvaWE2NF9mbGFncy5oLCBzcmMvaWE2NC9mZmkuYywgc3JjL2lhNjQvdW5peC5TOiBSZXdyaXRlCi0JZnJvbSBzY3JhdGNoLgorICAgIHg4NiBwY3JlbCB0ZXN0CiAKLTIwMDQtMTItMjcgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+Citjb21taXQgMGU1ODQzOTk1ZjQ2OTAwZWYyMTI1MzEyODFlMDhiMjI0NDY0ZjQxMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgVHVlIEZlYiA4IDA3OjUyOjQwIDIwMTEgLTA1MDAKIAotCSogc3JjL3g4Ni91bml4NjQuUzogRml4IHR5cG8gaW4gdW53aW5kIGluZm8uCisgICAgUmVmcmVzaCBmcm9tIEdDQwogCi0yMDA0LTEyLTI1ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorY29tbWl0IDViOWNkNTI3ODQzMzlhNDJlNDE3MTc0YTU1ZTMxMGUyMTRkNDM1ZjkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBOb3YgMjIgMTU6MTk6NTcgMjAxMCAtMDUwMAogCi0JKiBzcmMveDg2L2ZmaTY0LmMgKHN0cnVjdCByZWdpc3Rlcl9hcmdzKTogUmVuYW1lIGZyb20gc3RhY2tMYXlvdXQuCi0JKGVudW0geDg2XzY0X3JlZ19jbGFzcyk6IEFkZCBYODZfNjRfQ09NUExFWF9YODdfQ0xBU1MuCi0JKG1lcmdlX2NsYXNzZXMpOiBDaGVjayBmb3IgaXQuCi0JKFNTRV9DTEFTU19QKTogTmV3LgotCShjbGFzc2lmeV9hcmd1bWVudCk6IFBhc3MgYnl0ZV9vZmZzZXQgYnkgdmFsdWU7IHBlcmZvcm0gYWxsIHVwZGF0ZXMKLQlpbnNpZGUgc3RydWN0IGNhc2UuCi0JKGV4YW1pbmVfYXJndW1lbnQpOiBBZGQgY2xhc3NlcyBhcmd1bWVudDsgaGFuZGxlCi0JWDg2XzY0X0NPTVBMRVhfWDg3X0NMQVNTLgotCShmZmlfcHJlcF9hcmdzKTogTWVyZ2UgaW50byAuLi4KLQkoZmZpX2NhbGwpOiAuLi4gaGVyZS4gIFNoYXJlIHN0YWNrIGZyYW1lIHdpdGggZmZpX2NhbGxfdW5peDY0LgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFNldHVwIGNpZi0+ZmxhZ3MgZm9yIHByb3BlciBzdHJ1Y3R1cmUgcmV0dXJuLgotCShmZmlfZmlsbF9yZXR1cm5fdmFsdWUpOiBSZW1vdmUuCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBSZW1vdmUgZGVhZCBhc3NlcnQuCi0JKGZmaV9jbG9zdXJlX3VuaXg2NF9pbm5lcik6IFJlbmFtZSBmcm9tIGZmaV9jbG9zdXJlX1VOSVg2NF9pbm5lci4KLQlSZXdyaXRlIHRvIHVzZSBzdHJ1Y3QgcmVnaXN0ZXJfYXJncyBpbnN0ZWFkIG9mIHZhX2xpc3QuICBDcmVhdGUKLQlmbGFncyBmb3IgaGFuZGxpbmcgc3RydWN0dXJlIHJldHVybnMuCi0JKiBzcmMveDg2L3VuaXg2NC5TOiBSZW1vdmUgZGVhZCBzdHJpbmdzLgotCShmZmlfY2FsbF91bml4NjQpOiBSZW5hbWUgZnJvbSBmZmlfY2FsbF9VTklYNjQuICBSZXdyaXRlIHRvIHNoYXJlCi0Jc3RhY2sgZnJhbWUgd2l0aCBmZmlfY2FsbC4gIEhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJucyBwcm9wZXJseS4KLQkoZmxvYXQyc3NlLCBmbG9hdGZsb2F0MnNzZSwgZG91YmxlMnNzZSk6IFJlbW92ZS4KLQkoc3NlMmZsb2F0LCBzc2UyZG91YmxlLCBzc2UyZmxvYXRmbG9hdCk6IFJlbW92ZS4KLQkoZmZpX2Nsb3N1cmVfdW5peDY0KTogUmVuYW1lIGZyb20gZmZpX2Nsb3N1cmVfVU5JWDY0LiAgUmV3cml0ZQotCXRvIGhhbmRsZSBzdHJ1Y3R1cmUgcmV0dXJucyBwcm9wZXJseS4KKyAgICB3aW42NC11bmRlcnNjb3JlIHBhdGNoCiAKLTIwMDQtMTItMDggIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KK2NvbW1pdCAyZGI3MjYxNWI1MGViNWMwZjI5NzI1YzAyYzc0MGEyZjBkN2ZjN2Q5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gTm92IDIxIDEwOjUwOjU2IDIwMTAgLTA1MDAKIAotCSogTWFrZWZpbGUuYW0gKEFNX01BS0VGTEFHUyk6IFJlbW92ZSBkdXBsaWNhdGUgTElCQ0ZMQUdTIGFuZAotCVBJQ0ZMQUcuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisgICAgUmViYXNlCiAKLTIwMDQtMTItMDIgIFJpY2hhcmQgU2FuZGlmb3JkICA8cnNhbmRpZm9AcmVkaGF0LmNvbT4KK2NvbW1pdCBmNmFiM2VkYzIzZGM4ZmM3YzQ3YTMxYzg5NjA0NDE1MGMyM2YwNGI1CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAcGxhdXNpYmxlLmNvb3A+CitEYXRlOiAgIFdlZCBPY3QgMjcgMTk6MzQ6NTEgMjAxMCAtMDQwMAogCi0JKiBjb25maWd1cmUuYWM6IFVzZSBUTF9BQ19HQ0NfVkVSU0lPTiB0byBzZXQgZ2NjX3ZlcnNpb24uCi0JKiBjb25maWd1cmUsIGFjbG9jYWwubTQsIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgIEluY2x1ZGUgdGhlIGxpY2Vuc2UgaGVhZGVyIGluIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LgogCi0yMDA0LTExLTI5ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorY29tbWl0IGNlZjYxOTQ2Mjg4N2ZhMGYzNjBlM2VlNzAyZDFlMDRmMTEyYjViMzgKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgV2VkIE9jdCAyNyAxMzo1OTozMCAyMDEwIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgbGlidG9vbCBjaGFuZ2UuCisgICAgQWRkIG1pc3NpbmcgY29weXJpZ2h0L2xpY2Vuc2UgaGVhZGVyLgogCi0yMDA0LTExLTI1ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorY29tbWl0IDUzZjM4N2IyMDM0MTNjOWFhNmUzMWY0OWRiYjcwZDM3ZDgxNjMzMGIKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxOTo1NzoxNyAyMDEwIC0wNzAwCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgbGlidG9vbCByZXZlcnNpb24uCisgICAgTWlub3IgUkVBRE1FIGZpeC4KIAotMjAwNC0xMS0yNCAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KK2NvbW1pdCA0ZmJjYjViNWZiY2UxMWY0YjE2ODA2MGUwMDYzOWRiMzNjODViNzViCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTk6NTA6MzcgMjAxMCAtMDcwMAogCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGxpYnRvb2wgY2hhbmdlLgorICAgIE1pbm9yIFJFQURNRSBmaXguCiAKLTIwMDQtMTEtMjMgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+Citjb21taXQgOGU3NjUyZWY2YWNhYjVkYjdhMjlmNzg2Njg2YTU0ZjA1Y2RiZGM3ZAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDE5OjQ5OjM5IDIwMTAgLTA3MDAKIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBVc2UgbmV3IHByb2NzIGluIHRhcmdldC1saWJwYXRoLmV4cC4KKyAgICBBZGQgYSBsaWJmZmktaW9zLXNwZWNpZmljIGdpdGh1YiBSRUFETUUuCiAKLTIwMDQtMTEtMjMgIFJpY2hhcmQgU2FuZGlmb3JkICA8cnNhbmRpZm9AcmVkaGF0LmNvbT4KK2NvbW1pdCA4MzAzOGNmMjRhYTFhOTJiNjJiOTFmZmVlMWRjYzI1ZDc5MjQzNDg0CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTQ6MzY6NDUgMjAxMCAtMDcwMAogCi0JKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2NhbGxfTzMyLCBmZmlfY2xvc3VyZV9PMzIpOiBVc2UgamFsciBpbnN0ZWFkCi0Jb2YgamFsLiAgVXNlIGFuIGFic29sdXRlIGVuY29kaW5nIGZvciB0aGUgZnJhbWUgaW5mb3JtYXRpb24uCisgICAgSW1wbGVtZW50IEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUgYWxsb2NhdG9yIGZvciBpT1MvQVJNLgorICAgIAorICAgIFRoaXMgcHJvdmlkZXMgd29ya2luZyBjbG9zdXJlIHN1cHBvcnQgb24gaU9TL0FSTSBkZXZpY2VzIHdoZXJlCisgICAgUFJPVF9XUklURXxQUk9UX0VYRUMgaXMgbm90IHBlcm1pdHRlZC4gVGhlIGNvZGUgcGFzc2VzIGJhc2ljCisgICAgc21va2UgdGVzdHMsIGJ1dCByZXF1aXJlcyBmdXJ0aGVyIHJldmlldy4KIAotMjAwNC0xMS0yMyAgS2VsbGV5IENvb2sgIDxrY29va0BnY2MuZ251Lm9yZz4KK2NvbW1pdCBiMDBmZjNlOThmZGRlNjIyY2VmNjE3MDMwZTE0ZDUzNTZkZmY5ODhmCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTQ6MjI6MjYgMjAxMCAtMDcwMAogCi0JKiBNYWtlZmlsZS5hbTogUmVtb3ZlIG5vLWRlcGVuZGVuY2llcy4gIEFkZCBBQ0xPQ0FMX0FNRkxBR1MuCi0JKiBhY2luY2x1ZGUubTQ6IERlbGV0ZSBsb2dpYyBmb3Igc2luY2x1ZGVzLgotCSogYWNsb2NhbC5tNCwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGU6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlOiBMaWtld2lzZS4KKyAgICBSZW5hbWUgdGhlIGdlbmVyYXRlZCBzeW1ib2wKIAotMjAwNC0xMS0yMiAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KK2NvbW1pdCBkYTI3NzNlMDJhYjI2Y2MxMWE3ZmU4N2U5ODU1OTlmMzVjZGYwNjQ5CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTQ6MjE6MzcgMjAxMCAtMDcwMAogCi0JKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBBbGlnbiBkb3VibGVzIGFuZCA2NC1iaXQgaW50ZWdlcnMKLQlvbiBhIDgtYnl0ZSBib3VuZGFyeS4KLQkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2xvc3VyZV92OCk6IFJlc2VydmUgZnJhbWUgc3BhY2UgZm9yIGFyZ3VtZW50cy4KKyAgICBNb2RpZnkgdGhlIGZmaV9jbG9zdXJlIHN0cnVjdHVyZXMgdG8gaG9sZCB0YWJsZS90YWJsZSBlbnRyeSBwb2ludGVycyBpbnN0ZWFkIG9mIGEgY29kZSBidWZmZXIuCiAKLTIwMDQtMTAtMjcgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorY29tbWl0IDAxZDcxYjdiZWQ0MTg0NGY4MGNiOWZlZWYyMGRjYzVlY2U1YmEyZDAKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxNDoyMToxNCAyMDEwIC0wNzAwCiAKLQkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGZ1bmN0aW9ucyB0aGF0IHJldHVybgotCWxvbmcgbG9uZyB2YWx1ZXMuICBSb3VuZCBzdGFjayBhbGxvY2F0aW9uIHRvIGEgbXVsdGlwbGUgb2YgOCBieXRlcwotCWZvciBBVFBDUyBjb21wYXRpYmlsaXR5LgotCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBSZXdvcmsgdG8gYXZvaWQgdXNlIG9mIEFQQ1MgcmVnaXN0ZXIKLQluYW1lcy4gIEhhbmRsZSByZXR1cm5pbmcgbG9uZyBsb25nIHR5cGVzLiAgQWRkIFRodW1iIGFuZCBpbnRlcndvcmtpbmcKLQlzdXBwb3J0LiAgSW1wcm92ZSBzb2Z0LWZsb2F0IGNvZGUuCisgICAgUmVnZW5lcmF0ZWQgdGhlIGF1dG9jb25mIHNjcmlwdAogCi0yMDA0LTEwLTI3ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KK2NvbW1pdCAxOWFmZGEwMDY5YzQyZTUxYzgxZGNhN2IxMGE1Y2Y4ODRiNGNkY2UwCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMTQ6MjA6NTIgMjAxMCAtMDcwMAogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kYi5leHAgKGxvYWRfZ2NjX2xpYik6IE5ldyBmdW5jdGlvbi4KLQkobGliZmZpX2V4aXQpOiBOZXcgZnVuY3Rpb24uCi0JKGxpYmZmaV9pbml0KTogQnVpbGQgdGhlIHRlc3RnbHVlIHdyYXBwZXIgaWYgbmVlZGVkLgorICAgIEVuYWJsZSBBQ19TVUJTVCBmb3IgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRQogCi0yMDA0LTEwLTI1ICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorY29tbWl0IDllMTE5NjQ0NGU3OGFlZjIwMDI4YzE4ODkxZjQ0ZWJlMzlhODE1ZmQKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAxMDo0MzowNiAyMDEwIC0wNzAwCiAKLQlQUiBvdGhlci8xODEzOAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBY2NlcHQgbW9yZSB0aGFuIG9uZSBtdWx0aWxpYiBsaWJnY2MuCisgICAgQWRkIGEgaGFyZC1jb2RlZCBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFIGFybSBpbXBsZW1lbnRhdGlvbi4KKyAgICAKKyAgICBUaGlzIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgcmUtbWFwcGluZyBhIHNoYXJlZCB0YWJsZSBvZiBleGVjdXRhYmxlCisgICAgdHJhbXBvbGluZXMgZGlyZWN0bHkgaW4gZnJvbnQgb2YgYSB3cml0YWJsZSBjb25maWd1cmF0aW9uIHBhZ2UsIHdvcmtpbmcKKyAgICBhcm91bmQgUFJPVF9XUklURSByZXN0cmljdGlvbnMgZm9yIHNhbmRib3hlZCBhcHBsaWNhdGlvbnMgb24gQXBwbGUncworICAgIGlPUy4KKyAgICAKKyAgICBUaGlzIGltcGxlbWVudGF0aW9uIGlzIGZvciB0ZXN0aW5nIHB1cnBvc2VzOyBhIHByb3BlciBhbGxvY2F0b3IgaXMgc3RpbGwKKyAgICBuZWNlc3NhcnksIGFuZCBBUk0tc3BlY2lmaWMgY29kZSBuZWVkcyB0byBiZSBtb3ZlZCBvdXQgb2YKKyAgICBzcmMvY2xvc3VyZXMuYy4KIAotMjAwNC0xMC0yNSAgS2F6dWhpcm8gSW5hb2thIDxpbmFva2Eua2F6dWhpcm9AcmVuZXNhcy5jb20+Citjb21taXQgZjM4MzY0YjM5OTE4NGU2ODJmYzNlNzg1MDg0YmQ0OTc4MjdiYzVhZgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDEwOjQyOjM2IDIwMTAgLTA3MDAKIAotCSogc3JjL20zMnIvbGliZmZpdGFyZ2V0LmggKEZGSV9DTE9TVVJFUyk6IFNldCB0byAwLgorICAgIEZpeCBzeW1ib2wgcHJlZml4IGZvciBmZmlfY2xvc3VyZV9TWVNWX2lubmVyIG9uIERhcndpbi4KIAotMjAwNC0xMC0yMCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+Citjb21taXQgMzY4NDllNzcxNmI3N2FhMjVlNDE3NWQxZjRiZTFiOTNkYmY0N2FhYworQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDA5OjM1OjA0IDIwMTAgLTA3MDAKIAotCSogc3JjL3NoL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IERvbid0IGFsaWduIGZvciBkb3VibGUgZGF0YS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYzogTmV3IHRlc3QgY2FzZS4KKyAgICBXaGl0ZXNwYWNlL2NvbW1lbnQgZml4ZXMuCiAKLTIwMDQtMTAtMTggIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorY29tbWl0IGI3NjQxNjI1MjY4NTQ2ODZlNTc5YTQ4YjZhYzU5ODFmNGViODg2YTMKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAwOTowNDozNCAyMDEwIC0wNzAwCiAKLQkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IFNldCBUIGJpdCBpbiB0cmFtcG9saW5lIGZvcgotCXRoZSBmdW5jdGlvbiByZXR1cm5pbmcgYSBzdHJ1Y3R1cmUgcG9pbnRlZCB3aXRoIFIyLgotCSogc3JjL3NoL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFVzZSBSMiBhcyB0aGUgcG9pbnRlciB0bwotCXRoZSBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlIGlmIFQgYml0IHNldC4gIEVtaXQgcG9zaXRpb24KLQlpbmRlcGVuZGVudCBjb2RlIGFuZCBFSCBkYXRhIGlmIFBJQy4KKyAgICBGaXggdGhlIHNjcmlwdCBuYW1lIChidWlsZC1pcGhvbmUuc2ggLT4gYnVpbGQtaW9zLnNoKQogCi0yMDA0LTEwLTEzICBLYXp1aGlybyBJbmFva2EgIDxpbmFva2Eua2F6dWhpcm9AcmVuZXNhcy5jb20+Citjb21taXQgYTNkOWFhODUwMTMzNDE0NTFlYTk3NzY2NDg1YjdhMTE4NTJkMzJiMgorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDA5OjAzOjUyIDIwMTAgLTA3MDAKIAotCSogTWFrZWZpbGUuYW06IEFkZCBtMzJyIHN1cHBvcnQuCi0JKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBjb25maXVncmU6IFJlZ2VuZXJhdGUuCi0JKiBzcmMvdHlwZXMuYzogQWRkIG0zMnIgcG9ydCB0byBGRklfSU5URVJOQUxfVFlQRURFRgotCSh1aW50NjQsIHNpbnQ2NCwgZG91YmxlLCBsb25nZG91YmxlKQotCSogc3JjL20zMnI6IE5ldyBkaXJlY3RvcnkuCi0JKiBzcmMvbTMyci9mZmkuYzogTmV3IGZpbGUuCi0JKiBzcmMvbTMyci9zeXN2LlM6IExpa2V3aXNlLgotCSogc3JjL20zMnIvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgorICAgIFVwZGF0ZSB0aGUgYXV0b2dlbmVyYXRlZCBhdXRvY29uZi9hdXRvbWFrZSBmaWxlcy4KIAotMjAwNC0xMC0wMiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+Citjb21taXQgYzcxNDgwZWFmODM5ZjI2YmJkZmNkODk2NWY2NWFjNGQ4ZGVmZGRjMAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTdW4gU2VwIDE5IDA5OjAyOjA1IDIwMTAgLTA3MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jOiBOZXcgdGVzdCBjYXNlLgorICAgIFVwZGF0ZSBhdXRvbWFrZS9hdXRvY29uZiB0byBjb25kaXRpb25hbGx5IGJ1aWxkIHNyYy9hcm0vdHJhbXBvbGluZS5TIGlmIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUgaXMgZW5hYmxlZC4KIAotMjAwNC0wOS0xNCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorY29tbWl0IDlhZjkyOTFiNzNiYzVlMjdlY2Q5NDliZWM4MTU3ZjIwNDI2ZDY1YjgKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAxOSAwODo1MjozMyAyMDEwIC0wNzAwCiAKLQlQUiBsaWJnY2ovMTc0NjUKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogRG9uJ3QgdXNlIGdsb2JhbCBsZF9saWJyYXJ5X3BhdGguCi0JU2V0IHVwIExEX0xJQlJBUllfUEFUSCwgU0hMSUJfUEFUSCwgTERfTElCUkFSWU4zMl9QQVRILAotCUxEX0xJQlJBUlk2NF9QQVRILCBMRF9MSUJSQVJZX1BBVEhfMzIsIExEX0xJQlJBUllfUEFUSF82NCBhbmQKLQlEWUxEX0xJQlJBUllfUEFUSC4KKyAgICBBZGQgdGhlIHRyYW1wb2xpbmUgdGFibGUgZ2VuZXJhdGVkIGJ5IGdlbnRyYW1wLnNoCiAKLTIwMDQtMDktMDUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCA2OGNlMGMzODNlY2U4NGY2OTk0NWQxYzhjM2ZlZDAzZjdmOWNiNWQ2CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTkgMDg6Mzg6MTkgMjAxMCAtMDcwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jOiBSZW1vdmUgd2hpdGVzcGFjZXMuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbC5jOiBSZW1vdmUgdW51c2VkIHZhci4gQ2xlYW51cAotCXdoaXRlc3BhY2VzLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYzogTGlrZXdpc2UuCisgICAgQWRkIGEgc2hlbGwgc2NyaXB0IHRoYXQgZ2VuZXJhdGVzIHRoZSBBUk0gdHJhbXBvbGluZSBwYWdlLgorICAgIAorICAgIFRoaXMgZ2VuZXJhdGVzIGEgcGFnZSBvZiAzNDAgdHJhbXBvbGluZXMsIGFsaWduZWQgd2l0aGluIG9uZSBwYWdlLiBUaGUKKyAgICB0cmFtcG9saW5lcyB1c2UgcGMtcmVsYXRpdmUgYWRkcmVzc2luZyB0byByZWZlcmVuY2UgY29uZmlnIGRhdGEKKyAgICAoY29udGV4dCwganVtcCBhZGRyZXNzKSBmcm9tIGEgcGFnZSBwbGFjZWQgZGlyZWN0bHkgcHJpb3IgdG8gdGhlCisgICAgdHJhbXBvbGluZSBwYWdlLiBUaGlzIGNhbiBiZSB1c2VkIG9uIHN5c3RlbXMgLS0gc3VjaCBhcyBpT1MgLS0gdGhhdCBkbyBub3QKKyAgICBzdXBwb3J0IHdyaXRhYmxlLCBleGVjdXRhYmxlIG1lbW9yeSBieSByZW1hcHBpbmcgdGhlIGV4ZWN1dGFibGUgcGFnZQorICAgIGNvbnRhaW5pbmcgdGhlIHRyYW1wb2xpbmVzIGRpcmVjdGx5IGFib3ZlIGEgbmV3bHkgYWxsb2NhdGVkIHdyaXRhYmxlCisgICAgY29uZmlnIHBhZ2UuCiAKLTIwMDQtMDktMDUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCA3NWFmMDg2YmU4ODMwYThlYWZlOWIxZWJkYTE5OWQ3ODhiY2IwYzYyCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMTggMTg6MTI6MTkgMjAxMCAtMDcwMAogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogRml4IGNvbW1lbnRzIGFuZCBpZGVudGF0aW9uLgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisgICAgVXBkYXRlIGF1dG9jb25mIGZpbGVzCiAKLTIwMDQtMDktMDIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCAxYWM5MmNjYTliMDJlZjhkNmE3NjlmMGRlMWFkY2NkNWM5NjMwMzU1CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMTggMTg6MDg6MTQgMjAxMCAtMDcwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IEFkZCBmbGFnIGZvciBsb25nZG91YmxlIHJldHVybiB2YWx1ZXMuCi0JKGZmaV9wcmVwX2FyZ3MpOiBIYW5kbGUgbG9uZ2RvdWJsZSBhcmd1bWVudHMuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2V0IGZsYWdzIGZvciBsb25nZG91YmxlLiBDYWxjdWxhdGUgc3BhY2UgZm9yCi0JbG9uZ2RvdWJsZS4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IEFkZCBjbG9zdXJlIGhhbmRsaW5nIGZvciBsb25nZG91YmxlLgotCSogc3JjL3Bvd2VycGMvZGFyd2luLlMgKF9mZmlfY2FsbF9EQVJXSU4pOiBBZGQgaGFuZGxpbmcgb2YgbG9uZ2RvdWJsZQotCXZhbHVlcy4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMgKF9mZmlfY2xvc3VyZV9BU00pOiBMaWtld2lzZS4KLQkqIHNyYy90eXBlcy5jOiBEZWZpbmVkIGxvbmdkb3VibGUgc2l6ZSBhbmQgYWxpZ25tZW50IGZvciBkYXJ3aW4uCisgICAgQWRkIGF1dG9jb25mIGNoZWNrIGZvciBXXlggcGxhdGZvcm1zIHRoYXQgcmVxdWlyZSBhIHRyYW1wb2xpbmUgdGFibGUuCisgICAgCisgICAgVGhpcyBhZGRzIHRoZSBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFLiBUaGUgZmxhZyBpcyBlbmFibGVkIGZvcgorICAgIGFybS1hcHBsZS1kYXJ3aW4sIHdoZXJlIFBST1RfRVhFQyBvbiB3cml0YWJsZSAob3IgZm9ybWVybHkgd3JpdGFibGUpIHBhZ2VzIGlzCisgICAgbm90IHBlcm1pdHRlZCBmb3Igc2FuZGJveGVkIGJpbmFyaWVzLgogCi0yMDA0LTA5LTAyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgYmU3MmZiYWIyOWI3MTkwYzcwMmQ4ZTFhYzNkMTQ5ODU1ZTk1ODc5ZAorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgU2VwIDE4IDE4OjAyOjI1IDIwMTAgLTA3MDAKIAotCSogc3JjL3Bvd2VycGMvYWl4LlM6IFJlbW92ZSB3aGl0ZXNwYWNlcy4KLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvYXNtLmg6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvZmZpLmM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKyAgICBVc2UgdGhlIGNvcnJlY3QgaG9zdCB0cmlwbGUgZm9yIGFybS9kYXJ3aW4KIAotMjAwNC0wOC0zMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+Citjb21taXQgNzAxNTBiZGY0NTA5MjY5OTY1YzcyZjIwMzJiZjc0ZjI4NTc2N2FmZQorQXV0aG9yOiBMYW5kb24gRnVsbGVyIDxsYW5kb25mQGJpa2Vtb25rZXkub3JnPgorRGF0ZTogICBTYXQgU2VwIDE4IDE2OjM4OjAzIDIwMTAgLTA3MDAKIAotCSogTWFrZWZpbGUuYW06IEFkZCBmcnYgc3VwcG9ydC4KLQkqIE1ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuYWM6IFJlYWQgY29uZmlndXJlLmhvc3QuCi0JKiBjb25maWd1cmUuaW46IFJlYWQgY29uZmlndXJlLmhvc3QuCi0JKiBjb25maWd1cmUuaG9zdDogTmV3IGZpbGUuICBmcnYtZWxmIG5lZWRzIGxpYmdsb3NzLgotCSogaW5jbHVkZS9mZmkuaC5pbjogRm9yY2UgZmZpX2Nsb3N1cmUgdG8gaGF2ZSBhIG5pY2UgYmlnICg4KQotCWFsaWdubWVudC4gIFRoaXMgaXMgbmVlZGVkIHRvIGZydiBhbmQgc2hvdWxkbid0IGhhcm0gdGhlIG90aGVycy4KLQkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChBTElHTl9ET1dOKTogTmV3IG1hY3JvLgotCSogc3JjL2Zydi9mZmkuYywgc3JjL2Zydi9mZml0YXJnZXQuaCwgc3JjL2Zydi9lYWJpLlM6IE5ldyBmaWxlcy4KKyAgICBBZGQgbWlzc2luZyBVTldJTkQgZW50cnk7IGRpc2FibGVzIC5wYWQgb24gbm9uLUVBQkkgdGFyZ2V0cy4KIAotMjAwNC0wOC0yNCAgRGF2aWQgRGFuZXkgIDxkYW5leUBhdnRyZXguY29tPgorY29tbWl0IDZiNDUyYmFmYWVjNDk4ZGY5NzViYThhYzRjOTlkZTE3NGU1Zjc0ZjcKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAxOCAxNjoyMTozMiAyMDEwIC0wNzAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBYZmFpbCBtaXBzNjQqIGluc3RlYWQgb2YgbWlwcyouCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAgTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDE2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdWNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZSBhbmQgc2V0IHJldHVybiB2YWx1ZQotCXRvIHplcm8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisgICAgQXBwbGUgYXNzZW1ibGVyIHN1cHBvcnQ7IGZpeGVkIG1vc3QgZ2FzL0VMRi1pc21zLgogCi0yMDA0LTA4LTIzICBEYXZpZCBEYW5leSA8ZGFuZXlAYXZ0cmV4LmNvbT4KK2NvbW1pdCA4ZGRhYzgzNWI2ZjhiNTRlZGU3NjRkMGVhOTc3ZGVlNGM4MmUyZDY3CitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMTggMTU6Mzg6MDYgMjAxMCAtMDcwMAogCi0JUFIgbGliZ2NqLzEzMTQxCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX08zMl9TT0ZUX0ZMT0FUKTogTmV3IEFCSS4KLQkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IGFsaWdubWVudCBjYWxjdWxhdGlvbi4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgRkZJX08zMl9TT0ZUX0ZMT0FUIGZsb2F0aW5nIHBvaW50Ci0JcGFyYW1ldGVycyBhbmQgcmV0dXJuIHR5cGVzLgotCShmZmlfY2FsbCk6IEhhbmRsZSBGRklfTzMyX1NPRlRfRkxPQVQgQUJJLgotCShmZmlfcHJlcF9jbG9zdXJlKTogRGl0dG8uCi0JKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogSGFuZGxlIEZGSV9PMzJfU09GVF9GTE9BVCBBQkksIGZpeAotCWFsaWdubWVudCBjYWxjdWxhdGlvbnMuCi0JKiBzcmMvbWlwcy9vMzIuUyAoZmZpX2Nsb3N1cmVfTzMyKTogRG9uJ3QgdXNlIGZsb2F0aW5nIHBvaW50Ci0JaW5zdHJ1Y3Rpb25zIGlmIEZGSV9PMzJfU09GVF9GTE9BVCwgbWFrZSBzdGFjayBmcmFtZSBBQkkgY29tcGxpYW50LgorICAgIEZpeCBwbGFjZW1lbnQgb2YgdGhlIF9fQVBQTEVfXyBtYWNyby4KIAotMjAwNC0wOC0xNCAgQ2FzZXkgTWFyc2hhbGwgPGNzbUBnbnUub3JnPgorY29tbWl0IDY5MDQzZDAyOTM2YmIwNTc5YWM1OWI0ZWUxZWQ4ZGVjMzhjMzhkYjcKK0F1dGhvcjogTGFuZG9uIEZ1bGxlciA8bGFuZG9uZkBiaWtlbW9ua2V5Lm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAxOCAxNTozMjowOCAyMDEwIC0wNzAwCiAKLQkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlZl9jaWZfbWFjaGRlcCk6IHNldCBgY2lmLT5mbGFncycgdG8KLQljb250YWluIGBGRklfVFlQRV9VSU5UNjQnIGFzIHJldHVybiB0eXBlIGZvciBhbnkgNjQtYml0Ci0JaW50ZWdlciAoTzMyIEFCSSBvbmx5KS4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IG5ldyBmdW5jdGlvbi4KLQkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBuZXcgZnVuY3Rpb24uCi0JKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogRGVmaW5lIGBGRklfQ0xPU1VSRVMnIGFuZAotCWBGRklfVFJBTVBPTElORV9TSVpFJyBhcHByb3ByaWF0ZWx5IGlmIHRoZSBBQkkgaXMgbzMyLgotCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jYWxsX08zMik6IGFkZCBsYWJlbHMgZm9yIC5laF9mcmFtZS4gUmV0dXJuCi0JNjQgYml0IGludGVnZXJzIGNvcnJlY3RseS4KLQkoZmZpX2Nsb3N1cmVfTzMyKTogbmV3IGZ1bmN0aW9uLgotCUFkZGVkIERXQVJGLTIgdW53aW5kIGluZm8gZm9yIGJvdGggZnVuY3Rpb25zLgorICAgIFdvcmstYXJvdW5kIGxpYmZmaSdzIEZQIEFCSSBkZXRlY3Rpb24uCisgICAgCisgICAgT24gaU9TLCB3ZSBtdXN0IHVzZSB0aGUgQUFQQ1MgZmxvYXRpbmcgcG9pbnQgcmV0dXJuIHZhbHVlIGNhbGxpbmcKKyAgICBjb252ZW50aW9ucy4gbGliZmZpJ3MgQVJNIGltcGxlbWVudGF0aW9uIHdpbGwgb25seSB1c2UgdGhlc2UgY29udmVudGlvbnMKKyAgICBpZiBfX1NPRlRGUF9fIGlzIGRlZmluZWQsIHdoaWNoIGlzIG5vdCB0aGUgY2FzZSB3aGVuIEdDQydzCisgICAgLW1mbG9hdC1hYmkgZGVmYXVsdHMgdG8gJ3NvZnRmcCcgaW5zdGVhZCBvZiAnc29mdCcuIFRvIHdvcmsgYXJvdW5kIHRoaXMKKyAgICB3ZSBtYW51YWxseSBkZWZpbmUgX19TT0ZURlBfXyBmb3IgQXBwbGUgcGxhdGZvcm1zIGluIHRoZSBBUk0tc3BlY2lmaWMKKyAgICBzeXN2LlMuCisgICAgCisgICAgU2VlIGFsc286CisgICAgICBodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9saWJyYXJ5L2lvcy8jZG9jdW1lbnRhdGlvbi9YY29kZS9Db25jZXB0dWFsL2lQaG9uZU9TQUJJUmVmZXJlbmNlL0ludHJvZHVjdGlvbi9JbnRyb2R1Y3Rpb24uaHRtbAorICAgICAgaHR0cDovL2luZm9jZW50ZXIuYXJtLmNvbS9oZWxwL3RvcGljL2NvbS5hcm0uZG9jLmloaTAwNDJkL0lISTAwNDJEX2FhcGNzLnBkZgogCi0yMDA0LTA4LTEwICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBhODJlNmMzNTRlYTgwNTExNDY0MmE2ZTQ0MGFiZDA4MzJjYjFkMjNmCitBdXRob3I6IExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAYmlrZW1vbmtleS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMTggMTQ6NDQ6MjQgMjAxMCAtMDcwMAogCi0JKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MgKTogOC1hbGlnbiBhbGwgc3RhY2sgYXJndW1lbnRzLgorICAgIEFkZCBhIHN0dWIgaU9TIGJ1aWxkIHNjcmlwdCB0byBkcml2ZSBhdXRvY29uZgogCi0yMDA0LTA4LTAxICBSb2JlcnQgTWlsbGFuICA8cm9iZXJ0bWhAZ251Lm9yZz4KK2NvbW1pdCA4NGU4ZGU2ZTlmYzE5Mzg4ZjZmMTEwMmMwMTNiN2QwZDUyOTQwZWNjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBGcmkgQXVnIDYgMDE6MzU6MTIgMjAxMCAtMDQwMAogCi0JKiBjb25maWd1cmUuYWM6IERldGVjdCBrbmV0YnNkLWdudSBhbmQga2ZyZWVic2QtZ251LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIFJlc3RvcmUgZXhlY3V0ZSBwZXJtaXNzaW9ucwogCi0yMDA0LTA3LTMwICBNYWNpZWogVy4gUm96eWNraSAgPG1hY3JvQGxpbnV4LW1pcHMub3JnPgorY29tbWl0IDNhZWVjYzllYjFhNmZlYmE2NTQ5ODQ5Y2RkMzM1YzkyNjQxNWE0ZmMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBBdWcgNSAxNToxOTowMCAyMDEwIC0wNDAwCiAKLQkqIGFjaW5jbHVkZS5tNCAoQUNfRlVOQ19NTUFQX0JMQUNLTElTVCk6IENoZWNrIGZvciA8c3lzL21tYW4uaD4KLQlhbmQgbW1hcCgpIGV4cGxpY2l0bHkgaW5zdGVhZCBvZiByZWx5aW5nIG9uIHByZXNldCBhdXRvY29uZiBjYWNoZQotCXZhcmlhYmxlcy4KLQkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRml4IHdpbjY0LXN0cnVjdC1hcmdzIHBhdGNoCiAKLTIwMDQtMDctMTEgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KK2NvbW1pdCAwMGQwYjU5Y2QxM2Y4OWFiOGI0NGJkODk0ZWI3ZjBhMTMxZmNiNDcyCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgQXVnIDUgMTQ6NTY6NTMgMjAxMCAtMDQwMAogCi0JKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEZpeCBDIGFsaWFzaW5nIHZpb2xhdGlvbi4KLQkoZmZpX2NoZWNrX2Zsb2F0X3N0cnVjdCk6IFJlbW92ZSB1bnVzZWQgcHJvdG90eXBlLgorICAgIEZpeCBkZWJ1ZyBidWlsZCBmb3Igd2luZG93cwogCi0yMDA0LTA2LTMwICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KK2NvbW1pdCBiZGE0ODdlODcwNjRmMjc5NjUxNTU0NTlhNjJkYzUyYTc0NDc3OGQwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgQXVnIDUgMDk6MDI6NDEgMjAxMCAtMDQwMAogCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZsdXNoX2ljYWNoZSk6ICc7JyBpcyBhIGNvbW1lbnQKLQljaGFyYWN0ZXIgb24gRGFyd2luLCB1c2UgJ1xuXHQnIGluc3RlYWQuCisgICAgRG9uJ3QgdXNlIC1zYWZlc2VoIHdpdGggbWw2NAogCi0yMDA0LTA2LTI2ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KK2NvbW1pdCBjMWQyOGJhOGQ1MDI5Nzk1YWYzMTNmZmViODFjOTdlZmM2ZDRjODQ3CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgQXVnIDUgMDg6NDg6MTYgMjAxMCAtMDQwMAogCi0JKiBsaWJ0b29sLXZlcnNpb246IEZpeCB0eXBvIGluIHJldmlzaW9uL2FnZS4KKyAgICBzdGRjYWxsLXg4Ni1jbG9zdXJlLWZpeAogCi0yMDA0LTA2LTE3ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KK2NvbW1pdCA1ZmVhY2FkNGE1NmM4NWIzZjIzYTI2N2EzMGIyY2Y0MjRjZDU5NTQ4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBUaHUgQXVnIDUgMDg6MzA6MDQgMjAxMCAtMDQwMAogCi0JKiBsaWJ0b29sLXZlcnNpb246IE5ldy4KLQkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfTERGTEFHUyk6IFVzZSAtdmVyc2lvbi1pbmZvIGZvciBzb25hbWUuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICBkZWZpbmUgZ2VuZXJpYyBzeW1ib2xzIGNhcmVmdWxseQogCi0yMDA0LTA2LTE1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorY29tbWl0IDEwZWE4NDg5MDBiYzMwMThhYzIxM2NlZjUyYjQ0Y2FjYmU1Y2JlYmMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFRodSBBdWcgNSAwODoyNDoyNyAyMDEwIC0wNDAwCiAKLQkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgdXNlbGVzcyBtdWx0aWxpYiBydWxlcy4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZSB3aXRoIGF1dG9tYWtlIDEuOC41LgotCSogY29uZmlndXJlLmFjOiBSZW1vdmUgdXNlbGVzcyBtdWx0aWxpYiBjb25maWd1cnkuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgZG9uJ3QgY29weSB3aW42NCBzdHJ1Y3QgYXJncwogCi0yMDA0LTA2LTE1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorY29tbWl0IGQxNDE3OGJlNGM0OWMzYWRhNDRhOWZlOWVmZTExZDQ0NDM3MmRkYWIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIEZyaSBKdWwgMjMgMDk6MTQ6MDAgMjAxMCAtMDQwMAogCi0JKiAuY3ZzaWdub3JlOiBOZXcgZmlsZS4KKyAgICBGRklfTEFTVF9BQkkgZml4CiAKLTIwMDQtMDYtMTAgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorY29tbWl0IDNmNWIxMzc1YWIxZTJiOGUzZDU5M2UyMWIyNzA5N2E0YTUwZjliODMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIE1vbiBKdWwgMTIgMTQ6Mzk6MTggMjAxMCAtMDQwMAogCi0JKiBzcmMvaWE2NC91bml4LlMgKGZmaV9jYWxsX3VuaXgpOiBJbnNlcnQgZ3JvdXAgYmFycmllciBicmVhawotCWZwX2RvbmUuCi0JKGZmaV9jbG9zdXJlX1VOSVgpOiBGaXggZjE0L2YxNSBhZGp1c3RtZW50IGlmIEZMT0FUX1NaIGlzIGV2ZXIKLQljaGFuZ2VkIGZyb20gOC4KKyAgICByZWJhc2UKIAotMjAwNC0wNi0wNiAgU2VhbiBNY05laWwgIDxzZWFuQG1jbmVpbC5jb20+Citjb21taXQgZWFmNDQ0ZWFiYzRjNzg3MDNjMGY5OGFjMDE5N2IxNjE5YzFiMWJlZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU2F0IEp1bCAxMCAwODo1OTowOSAyMDEwIC0wNDAwCiAKLQkqIGNvbmZpZ3VyZS5hYzogQWRkIHg4Nl82NC0qLWZyZWVic2QqIHN1cHBvcnQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRml4IHNlbGludXggdGVzdAogCi0yMDA0LTA0LTI2ICBKb2UgQnVjayA8amJ1Y2tAd2Vsc2gtYnVjay5vcmc+Citjb21taXQgNjMwOTc0MTUyMjQ3ZjEwMGVjZTRkNDRmMTBjMzcyMWJiNDU5OWZiZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFdlZCBNYXkgNSAyMDoxNDo1NiAyMDEwIC0wNDAwCiAKLQlCdWcgMTUwOTMKLQkqIGNvbmZpZ3VyZS5hYzogVGVzdCBmb3IgZXhpc3RlbmNlIG9mIG1tYXAgYW5kIHN5cy9tbWFuLmggYmVmb3JlCi0JY2hlY2tpbmcgYmxhY2tsaXN0LiAgRml4IHN1Z2dlc3RlZCBieSBKaW0gV2lsc29uLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIE1pY2hhcmwgS29obGVyJ3Mgc3BlbGxpbmcgZml4ZXMKIAotMjAwNC0wNC0yNiAgTWF0dCBBdXN0ZXJuICA8YXVzdGVybkBhcHBsZS5jb20+Citjb21taXQgOWRjOWEyOTNmM2Q0NTg5ZmNhZjAyZGQ0Mjg4YzhjZWJhZWZhNTA4ZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFR1ZSBBcHIgMTMgMTA6MzM6NTIgMjAxMCAtMDQwMAogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogR28gdGhyb3VnaCBhIG5vbi1sYXp5IHBvaW50ZXIgZm9yIGluaXRpYWwKLQlGREUgbG9jYXRpb24uCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKyAgICBSZWJhc2UgdG8gbGF0ZXN0IEdDQyBzb3VyY2VzCiAKLTIwMDQtMDQtMjQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCBmMmMyYTRmY2U5YjNlY2E5ZjM5YjRmMzU0NTExOGJjMjU2ZGE0YTczCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVHVlIEFwciAxMyAxMDoxOToyOCAyMDEwIC0wNDAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYyAobWFpbik6IEZpeCBpbml0aWFsaXphdGlvbgotCWVycm9yLiBSZXBvcnRlZCBieSBUaG9tYXMgSGVsbGVyIDx0aGVsbGVyQHB5dGhvbi5uZXQ+LgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyAobWFpbik6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYyAobWFpbik6IExpa2V3aXNlLgorICAgIFJlbW92ZSB3YXJuaW5ncyBhbmQgYWRkIE9TLzIgc3VwcG9ydAogCi0yMDA0LTAzLTIwICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KK2NvbW1pdCBjMGI2OWU1N2Q1MjllMzNkMThiNjU4Y2M1NTcyYTIxZTM2NjMyNDdjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVHVlIE1hciAzMCAwODozMDoyMiAyMDEwIC0wNDAwCiAKLQkqIHNyYy9wYS9saW51eC5TOiBGaXggdHlwby4KKyAgICBEYW4gV2l0dGUncyB3aW5kb3dzIGJ1aWxkIGZpeGVzLgogCi0yMDA0LTAzLTE5ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KK2NvbW1pdCA1OWEyNTlmNGQzNDhmNTkzYjQ1ZjQ1MjMwOWY0ZDAyMGEyODA1MWM0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgTW9uIE1hciAxNSAwNTo1Nzo1MSAyMDEwIC0wNDAwCiAKLQkqIE1ha2VmaWxlLmFtOiBVcGRhdGUuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHNyYy9wYS9mZmkuaC5pbjogUmVtb3ZlLgotCSogc3JjL3BhL2ZmaXRhcmdldC5oOiBOZXcgZmlsZS4KKyAgICBSZW1vdmUganVuayBmaWxlCiAKLTIwMDQtMDItMTAgIFJhbmRvbHBoIENodW5nICA8dGF1c3FAZGViaWFuLm9yZz4KK2NvbW1pdCAzZGUxZWIzNmQzN2E2NjgyOWU2MDY0MjE5Mzk4NzRkMGQ2MGQ4MTZkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgTW9uIE1hciAxNSAwNTo1NzoyNCAyMDEwIC0wNDAwCiAKLQkqIE1ha2VmaWxlLmFtOiBBZGQgUEEgc3VwcG9ydC4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGNvbmZpZ3VyZS5hYzogQWRkIFBBIHRhcmdldC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIHNyYy9wYS9mZmkuYzogTmV3IGZpbGUuCi0JKiBzcmMvcGEvZmZpLmguaW46IEFkZCBQQSBzdXBwb3J0LgotCSogc3JjL3BhL2xpbnV4LlM6IE5ldyBmaWxlLgotCSogcHJlcF9jaWYuYzogQWRkIFBBIHN1cHBvcnQuCisgICAgZml4LWNvbW1lbnRzIHBhdGNoCiAKLTIwMDQtMDMtMTYgIEhvc2FrYSBZdWppICA8aG9zQHRhbWFuZWdpLm9yZz4KK2NvbW1pdCBjMzgxM2I2ZDdmOGE3Nzc3MDBmNGM1ODYyMTkwYzBkYjE0OGQ0ZGU4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVHVlIEphbiAyNiAxNjo0ODo1NiAyMDEwIC0wNTAwCiAKLQkqIHNyYy90eXBlcy5jOiBGaXggYWxpZ25tZW50IHNpemUgb2YgWDg2X1dJTjMyIGNhc2UgaW50NjQgYW5kCi0JZG91YmxlLgotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlcGxhY2UgZWNpZi0+Y2lmLT5ydHlwZS0+dHlwZQotCXdpdGggZWNpZi0+Y2lmLT5mbGFncy4KLQkoZmZpX2NhbGwsIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IFJlcGxhY2UgY2lmLT5ydHlwZS0+dHlwZQotCXdpdGggY2lmLT5mbGFncy4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgWDg2X1dJTjMyIHN0cnVjdCBjYXNlLgotCShmZmlfY2xvc3VyZV9TWVNWKTogQWRkIDEgb3IgMi1ieXRlcyBzdHJ1Y3QgY2FzZSBmb3IgWDg2X1dJTjMyLgotCSogc3JjL3g4Ni93aW4zMi5TIChyZXRzdHJ1Y3QxYiwgcmV0c3RydWN0MmIsIHNjX3JldHN0cnVjdDFiLAotCXNjX3JldHN0cnVjdDJiKTogQWRkIGZvciAxIG9yIDItYnl0ZXMgc3RydWN0IGNhc2UuCisgICAgUmVidWlsZCBNYWtlZmlsZXMgd2l0aCBhdXRvbWFrZSAxLjExLjEgZm9yIENWRS0yMDA5LTQwMjkuCiAKLTIwMDQtMDMtMTUgS2VsbGV5IENvb2sgPGtjb29rQGdjYy5nbnUub3JnPgorY29tbWl0IDhkMjdmNjhiYWEzNjViZjg4M2I2MDUzYzVmNmJjODE5NjQ2ZDU0MzQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBGcmkgSmFuIDE1IDExOjM1OjM3IDIwMTAgLTA1MDAKIAotCSogY29uZmlndXJlLmluOiBSZW5hbWUgZmlsZSB0byAuLi4KLQkqIGNvbmZpZ3VyZS5hYzogLi4uIHRoaXMuCi0JKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKyAgICBNZW50aW9uIHJlY2VudCBjaGFuZ2VzIGluIFJFQURNRQogCi0yMDA0LTAzLTEyICBNYXR0IEF1c3Rlcm4gIDxhdXN0ZXJuQGFwcGxlLmNvbT4KK2NvbW1pdCBmZjNjZDY4YjhjZjJkOWEyOGNhZDdhYTliZWZmNDYyMzZlYWNlYzhjCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIEphbiAxNSAxMToyNzoyNCAyMDEwIC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBGaXggRUggaW5mb3JtYXRpb24gc28gaXQgY29ycmVzcG9uZHMgdG8KLQljaGFuZ2VzIGluIEVIIGZvcm1hdCByZXN1bHRpbmcgZnJvbSBhZGRpdGlvbiBvZiBsaW5rb25jZSBzdXBwb3J0LgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisgICAgQWRkIG1zdmMuc2ggd3JhcHBlcgogCi0yMDA0LTAzLTExICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Ci0JICAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+Citjb21taXQgY2FkZWJhNmNiNTM0MTRhMTI1MzU4MmYxNzE5YzI4NjY2NWRlN2I2YworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBKYW4gMTUgMTA6NDY6NTEgMjAxMCAtMDUwMAogCi0JKiBNYWtlZmlsZS5hbSAoQVVUT01BS0VfT1BUSU9OUyk6IFNldCB0aGVtLgotCVJlbW92ZSBWUEFUSC4gUmVtb3ZlIHJ1bGVzIGZvciBvYmplY3QgZmlsZXMuIFJlbW92ZSBtdWx0aWxpYiBzdXBwb3J0LgotCShBTV9DQ0FTRkxBR1MpOiBBZGQuCi0JKiBjb25maWd1cmUuaW4gKEFDX0NPTkZJR19IRUFERVJTKTogUmVsYWNlIEFNX0NPTkZJR19IRUFERVIuCi0JKEFDX1BSRVJFUSk6IEJ1bXAgdmVyc2lvbiB0byAyLjU5LgotCShBQ19JTklUKTogRmlsbCB3aXRoIHZlcnNpb24gaW5mbyBhbmQgYnVnIGFkZHJlc3MuCi0JKE9SSUdJTkFMX0xEX0ZPUl9NVUxUSUxJQlMpOiBSZW1vdmUuCi0JKEFNX0VOQUJMRV9NVUxUSUxJQik6IFVzZSB0aGlzIGluc3RlYWQgb2YgQUNfQVJHX0VOQUJMRS4KLQlEZS1wcmVjaW91cyBDQyBzbyB0aGF0IHRoZSByaWdodCBmbGFncyBhcmUgcGFzc2VkIGRvd24gdG8gbXVsdGlsaWJzLgotCShBQ19NU0dfRVJST1IpOiBSZXBsYWNlIG9ic29sZXRlIG1hY3JvIEFDX0VSUk9SLgotCShBQ19DT05GSUdfRklMRVMpOiBSZXBsYWNlIG9ic29sZXRlIG1hY3JvIEFDX0xJTktfRklMRVMuCi0JKEFDX09VVFBVVCk6IFJlb3JnYW5pemUgdGhlIG91dHB1dCB3aXRoIEFDX0NPTkZJR19DT01NQU5EUy4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGFjbG9jYWwubTQ6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCisgICAgTWljcm9zb2Z0IFZpc3VhbCBDIHBvcnQKIAotMjAwNC0wMy0xMSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KK2NvbW1pdCAwNzM5ZTdkYzAwZGI3NjZlYjY0ZjUwMmVjNDEzN2I4MTc2MzhjOWExCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIEphbiAxNSAwOTo0ODozMyAyMDEwIC0wNTAwCiAKLQkqIHNyYy9pYTY0L2ZmaS5jIChmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1VOSVgpOiBHZXQgZmxvYXRpbmcgcG9pbnQKLQlhcmd1bWVudHMgZnJvbSBmcCByZWdpc3RlcnMgb25seSBmb3IgdGhlIGZpcnN0IDggcGFyYW1ldGVyIHNsb3RzLgotCURvbid0IGNvbnZlcnQgYSBmbG9hdCBwYXJhbWV0ZXIgd2hlbiBwYXNzZWQgaW4gbWVtb3J5LgorICAgIEFkZCB4ODYgU3VuIFN0dWRpbyBjb21waWxlciBzdXBwb3J0CiAKLTIwMDQtMDMtMDkgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgorY29tbWl0IGVkZmRmZDJlODViOGQwMWQyNDU1OTM0ZjFkN2Y0ZDdlYjJmM2NmMWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBXZWQgSmFuIDEzIDAyOjU2OjE5IDIwMTAgLTA1MDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBjb25maWcvYWNjcm9zcy5tNCBjb3JyZWN0aW9uLgorICAgIEFkZCBjbG9zdXJlIGV4YW1wbGUgZG9jCiAKLTIwMDQtMDItMjUgIE1hdHQgS3JhYWkgIDxrcmFhaUBhbHVtbmkuY211LmVkdT4KK2NvbW1pdCA3YjdhNDJmMjIxY2YxNzFlOGQwOWRmMzRjYWM2ZGMxZmQ4NDU4Y2MzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVHVlIEphbiAxMiAwOToxNDoxNCAyMDEwIC0wNTAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBDaGFuZ2UKLQllY2lmLT5jaWYtPmJ5dGVzIHRvIGJ5dGVzLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBicmFjZXMgYXJvdW5kIG5lc3RlZCBpZiBzdGF0ZW1lbnQuCisgICAgUmViYXNlIGZyb20gR0NDCiAKLTIwMDQtMDItMDkgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+Citjb21taXQgNGIxOGQxZjczZGM3NzMzMTM3ODY5ZTRhYjU3MjVjYjkwYzFjOGZkZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBKYW4gMSAxMDoyNDoyNyAyMDEwIC0wNTAwCiAKLQkqIHNyYy90eXBlcy5jIChwb2ludGVyKTogUE9XRVJQQzY0IGhhcyA4IGJ5dGUgcG9pbnRlcnMuCisgICAgQWRkIHg4Ni02NCBNaW5nVyB0byBSRUFETUUKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3M2NCk6IENvcnJlY3QgbG9uZyBkb3VibGUgaGFuZGxpbmcuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogRml4IHR5cG8uCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogUGFzcyAtbWxvbmctZG91YmxlLTEyOAotCWZvciBwb3dlcnBjNjQtKi0qLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBMaWtld2lzZS4KK2NvbW1pdCBjMzA0MmFmYWYzZjg0YWJiYmU5YzkxYmY5YmM5ODk2YjBkOWViMDAzCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIEphbiAxIDA4OjA4OjAyIDIwMTAgLTA1MDAKIAotMjAwNC0wMi0wOCAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICBSZXNldCBxdWlsdCBwYXRjaGVzIHBvc3QgMy4wLjkgbWVyZ2Ugd2l0aCBHQ0MKIAotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwIDxGRklfTElOVVg2ND4pOiBDb3JyZWN0Ci0JbG9uZyBkb3VibGUgZnVuY3Rpb24gcmV0dXJuIGFuZCBsb25nIGRvdWJsZSBhcmcgaGFuZGxpbmcuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogRm9ybWF0dGluZy4gIERlbGV0ZSB1bnVzZWQgIm5nIiB2YXIuCi0JVXNlICJlbmRfcGZyIiBpbnN0ZWFkIG9mICJuZiIuICBDb3JyZWN0IGxvbmcgZG91YmxlIGhhbmRsaW5nLgotCUxvY2FsaXNlICJ0ZW1wIi4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IFNhdmUgZjIgbG9uZyBkb3VibGUKLQlyZXR1cm4gdmFsdWUuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IEFsbG9jYXRlCi0Jc3BhY2UgZm9yIGxvbmcgZG91YmxlIHJldHVybiB2YWx1ZS4gIEFkanVzdCBzdGFjayBmcmFtZSBhbmQgb2Zmc2V0cy4KLQlMb2FkIGYyIGxvbmcgZG91YmxlIHJldHVybi4KK2NvbW1pdCBiMDMwNGU5Njc5YmRmZWM2YWM0NWE1N2I1Yzk2NTQyNjk3MjQ5NDE4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgVGh1IERlYyAzMSAxMTozMjo0MCAyMDA5IC0wNTAwCiAKLTIwMDQtMDItMDcgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgVXBkYXRlIHZlcnNpb24KIAotCSogc3JjL3R5cGVzLmM6IFVzZSAxNiBieXRlIGxvbmcgZG91YmxlIGZvciBQT1dFUlBDNjQuCitjb21taXQgMmU3ZTAzZDAxNGQ5YzliZjQwZTk3Y2U3NWNiYTA4OWFkMDUyZmE2YgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFRodSBEZWMgMzEgMDc6NDM6MjIgMjAwOSAtMDUwMAogCi0yMDA0LTAxLTI1ICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorICAgIEZpbmFsIHVwZGF0ZXMgYmVmb3JlIDMuMC45CiAKLQkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfYXJnc192OSk6IFNoaWZ0IHRoZSBwYXJhbWV0ZXIgYXJyYXkKLQl3aGVuIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MgaXMgcGFzc2VkIGluICVvMC4KLQkoZmZpX1Y5X3JldHVybl9zdHJ1Y3QpOiBSZW5hbWUgaW50byBmZmlfdjlfbGF5b3V0X3N0cnVjdC4KLQkoZmZpX3Y5X2xheW91dF9zdHJ1Y3QpOiBBbGlnbiB0aGUgZmllbGQgZm9sbG93aW5nIGEgbmVzdGVkIHN0cnVjdHVyZQotCW9uIGEgd29yZCBib3VuZGFyeS4gIFVzZSBtZW1tb3ZlIGluc3RlYWQgb2YgbWVtY3B5LgotCShmZmlfY2FsbCk6IFVwZGF0ZSBjYWxsIHRvIGZmaV9WOV9yZXR1cm5fc3RydWN0LgotCShmZmlfcHJlcF9jbG9zdXJlKTogRGVmaW5lICdjdHgnIG9ubHkgZm9yIFY4LgotCShmZmlfY2xvc3VyZV9zcGFyY19pbm5lcik6IENsb25lIGludG8gZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjgKLQlhbmQgZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkuCi0JKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y4KTogUmV0dXJuIGxvbmcgZG91YmxlcyBieSByZWZlcmVuY2UuCi0JQWx3YXlzIHNraXAgdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gIEZvciBzdHJ1Y3R1cmVzIGFuZCBsb25nCi0JZG91YmxlcywgY29weSB0aGUgYXJndW1lbnQgZGlyZWN0bHkuCi0JKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y5KTogU2tpcCB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzIG9ubHkKLQlpZiByZXF1aXJlZC4gIFNoaWZ0IHRoZSBtYXhpbXVtIGZsb2F0aW5nLXBvaW50IHNsb3QgYWNjb3JkaW5nbHkuICBGb3IKLQliaWcgc3RydWN0dXJlcywgY29weSB0aGUgYXJndW1lbnQgZGlyZWN0bHk7IG90aGVyd2lzZSwgbGVmdC1qdXN0aWZ5IHRoZQotCWFyZ3VtZW50IGFuZCBjYWxsIGZmaV92OV9sYXlvdXRfc3RydWN0IHRvIGxheSBvdXQgdGhlIHN0cnVjdHVyZSBvbgotCXRoZSBzdGFjay4KLQkqIHNyYy9zcGFyYy92OC5TOiBVbmRlZiBTVEFDS0ZSQU1FIGJlZm9yZSBkZWZpbmluZyBpdC4KLQkoZmZpX2Nsb3N1cmVfdjgpOiBQYXNzIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MuICBVcGRhdGUgY2FsbCB0bwotCWZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y4LiAgU2hvcnQtY2lyY3VpdCBGRklfVFlQRV9JTlQgaGFuZGxpbmcuCi0JU2tpcCB0aGUgJ3VuaW1wJyBpbnNuIHdoZW4gcmV0dXJuaW5nIGxvbmcgZG91YmxlcyBhbmQgc3RydWN0dXJlcy4KLQkqIHNyYy9zcGFyYy92OS5TOiBVbmRlZiBTVEFDS0ZSQU1FIGJlZm9yZSBkZWZpbmluZyBpdC4KLQkoZmZpX2Nsb3N1cmVfdjkpOiBJbmNyZWFzZSB0aGUgZnJhbWUgc2l6ZSBieSAyIHdvcmRzLiAgU2hvcnQtY2lyY3VpdAotCUZGSV9UWVBFX0lOVCBoYW5kbGluZy4gIExvYWQgc3RydWN0dXJlcyBib3RoIGluIGludGVnZXJzIGFuZAotCWZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBvbiByZXR1cm4uCi0JKiBSRUFETUU6IFVwZGF0ZSBzdGF0dXMgb2YgdGhlIFNQQVJDIHBvcnQuCitjb21taXQgYWVhNzA2YzUyODI1YzhlZWU2NzdmZmE3ZmRiZGQzYWVkMTcyNTQ5MgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFR1ZSBEZWMgMjkgMTA6MDk6MzEgMjAwOSAtMDUwMAogCi0yMDA0LTAxLTI0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgcmVhbGx5IDMuMC45cmMxMgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMgKG1haW4pOiBUcmVhdCByZXN1bHQgdmFsdWUKLQlhcyBvZiB0eXBlIGZmaV9hcmcuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jIChtYWluKTogRml4IENIRUNLLgorY29tbWl0IDBjZmU2MGU5ZDEzZjEzMmI4ODk5NWNmZWU0MWYyMTU2MzQ0ZjZmYTIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUdWUgRGVjIDI5IDEwOjA2OjA0IDIwMDkgLTA1MDAKIAotMjAwNC0wMS0yMiAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorICAgIDMuMC45cmMxMgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYyAoY2xzX3JldF91aW50X2ZuKTogVHJlYXQgcmVzdWx0Ci0JdmFsdWUgYXMgb2YgdHlwZSBmZmlfYXJnLCBub3QgdW5zaWduZWQgaW50LgorY29tbWl0IDE0ZTJlOTJlODY0NTgwNGI2OTQwYjNlOTZjOThlOWY3ZjM4NGE2YjIKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTdW4gRGVjIDI3IDIxOjAzOjMzIDIwMDkgLTA1MDAKIAotMjAwNC0wMS0yMSAgTWljaGFlbCBSaXR6ZXJ0ICA8cml0emVydEB0LW9ubGluZS5kZT4KKyAgICAzLjAuOXJjMTEKIAotCSogZmZpNjQuYyAoZmZpX3ByZXBfYXJncyk6IENhc3QgdGhlIFJIUyBvZiBhbiBhc3NpZ25tZW50IGluc3RlYWQKLQlvZiB0aGUgTEhTLgorY29tbWl0IDg4NDQwMjc4N2JmOGVhZjdlYzIwNzA4NTAzN2NmOGFjZTJmNjYwZWMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTYXQgRGVjIDI2IDEyOjU3OjIzIDIwMDkgLTA1MDAKIAotMjAwNC0wMS0xMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEhQVVggc3VwcG9ydCBhbmQgYXZyMzIgdGVzdCBmaXhlcy4KIAotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBTZXQgTERfTElCUkFSWV9QQVRIXzMyIGZvcgotCVNvbGFyaXMuCitjb21taXQgMDFjNzg3NTZhZmYyMmVmYjFmMTIyZjhlOTNlMDY4ZDdiZjIxODVjNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFNhdCBEZWMgMjYgMTA6MDU6MTggMjAwOSAtMDUwMAogCi0yMDA0LTAxLTA4ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICAzLjAuOXJjOQogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChhbGxvY2F0ZV9tbWFwKTogQ2FzdCBNQVBfRkFJTEVECi0JdG8gdm9pZCAqLgorY29tbWl0IDcwODY4NDY0NjUxMzIwMjY4ZDc5YzY4OTRkYjVhNTBmZGMxMTAzMmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTYXQgRGVjIDI2IDA5OjU4OjAzIDIwMDkgLTA1MDAKIAotMjAwMy0xMi0xMCAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKyAgICBSZW1vdmUgeGZhaWxzIGZvciBtaXBzIGFuZCBhcm0KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IENhc3QgcG9pbnRlcnMgdG8KLQlzaXplX3QgaW5zdGVhZCBvZiBpbnQuCitjb21taXQgODM4ZDRhZDkyMGVjODVjZjVjYTNiNTExMjIxZDY3ZjZkOWE5OTAyNAorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFNhdCBEZWMgMjYgMDk6NTc6MjcgMjAwOSAtMDUwMAogCi0yMDAzLTEyLTA0ICBIb3Nha2EgWXVqaSAgPGhvc0B0YW1hbmVnaS5vcmc+CisgICAgUmVtb3ZlIGEgYnVuY2ggb2YgeGZhaWxzLgogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jOiBJbmNsdWRlIDxmbG9hdC5oPi4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMgKG1haW4pOiBSZXBsYWNlIHZhcmlhYmxlCi0JaW50IGkgd2l0aCB1bnNpZ25lZCBsb25nIHVsLgorY29tbWl0IDdlMzdlYWFmNzcyZjQ4OTA2ZTY5NjE4Yzc3M2IwYTM2YzM5MjdkZTkKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBTYXQgRGVjIDI2IDA3OjQ2OjUwIDIwMDkgLTA1MDAKIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTmV3IHRlc3QgY2FzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYzogTGlrZXdpc2UuCisgICAgRml4IGh1Z2Vfc3RydWN0IGZvciBzb2xhcmlzCiAKLTIwMDMtMTItMDIgIEhvc2FrYSBZdWppICA8aG9zQHRhbWFuZWdpLm9yZz4KK2NvbW1pdCAwN2NjN2EzNzE5NGJjMzQwNjRlYmVkN2YyNzI0MzMzYTc5ODQxMWM4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgU2F0IERlYyAyNiAwNzoyMzowNCAyMDA5IC0wNTAwCiAKLQlQUiBvdGhlci8xMzIyMQotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncywgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKToKLQlBbGlnbiBhcmd1bWVudHMgdG8gMzIgYml0cy4KKyAgICAzLjAuOXJjOAogCi0yMDAzLTEyLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgMmI5YmUxNmZmYWJjODEzMjYxMjhiYzFiYmRkZGZmOGRkYzVkMTNkMworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFNhdCBEZWMgMjYgMDc6MDQ6NDUgMjAwOSAtMDUwMAogCi0JUFIgb3RoZXIvMTMyMjEKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmM6IE5ldyB0ZXN0IGNhc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmM6IExpa2V3aXNlLgorICAgIDMuMC45cmM4CiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBDb3NtZXRpY3MuCitjb21taXQgOTQ1OGQ4OGY2NzZlOWEyMWFiODk5M2E1NGUxNjc1NGIxMTY4NzQxOQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFNhdCBEZWMgMjYgMDc6MDI6MjcgMjAwOSAtMDUwMAogCi0yMDAzLTExLTI2ICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CisgICAgUmViYXNlIGZyb20gR0NDCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEluY2x1ZGUgPGZjbnRsLmg+LgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCitjb21taXQgNmEzNDEyNDE3NTkzZjA2OGEwNGRjNjE2M2Y0MjY5Y2IyOTVhZDVjYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFNhdCBEZWMgMjYgMDY6NTE6MzMgMjAwOSAtMDUwMAogCi0yMDAzLTExLTIyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgQWRkIEFuZHJlYXMgU2Nod2FiJ3MgcG93ZXJwYyBmaXgKIAotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBjb25maWd1cmU6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IENvbnZlcnQgdGhlIG1tYXAgdG8KLQl0aGUgcmlnaHQgdHlwZS4KK2NvbW1pdCAzOWM4NzkyZWNlMTA0M2Y0MWY0YzM5NWEyY2U3MWY0Y2YwZmY0Njc0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIERlYyAyNSAyMTo1MjoyOCAyMDA5IC0wNTAwCiAKLTIwMDMtMTEtMjEgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KLQkgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIDMuMC45cmM3CiAKLQkqIGFjaW5jbHVkZS5tNDogQWRkIEFDX0ZVTkNfTU1BUF9CTEFDS0xJU1QuCi0JKiBjb25maWd1cmUuaW46IENhbGwgQUNfRlVOQ19NTUFQX0JMQUNLTElTVC4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogYWNsb2NhbC5tNDogTGlrZXdpc2UuCi0JKiBjb25maWd1cmU6IExpa2V3aXNlLgotCSogZmZpY29uZmlnLmguaW46IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBBZGQgaW5jbHVkZSBkaXIuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBBZGQgTU1BUCBkZWZpbml0aW9ucy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFVzZSBNTUFQIGZ1bmN0aW9uYWxpdHkKLQlmb3IgZmZpX2Nsb3N1cmUgaWYgYXZhaWxhYmxlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCitjb21taXQgMWQwNGFmNTJlM2UyNGRiNjlmNzQyMDY0Njk0YzIyZjhkZjVjYzcwZQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBEZWMgMjUgMDk6NTA6MzYgMjAwOSAtMDUwMAogCi0yMDAzLTExLTIwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgVXBkYXRlZCBzb21lIG1pcHMgWEZBSUxzCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogTWFrZSB0aGUgLWxnY2NfcyBjb25kaXRpb25hbC4KK2NvbW1pdCAyNmU5NTA5YzliNzkyOWJjNGZjZjY5NzA3MTY5OTA1MWE2NTJiMWZkCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIERlYyAyNSAwMjoxOToyMyAyMDA5IC0wNTAwCiAKLTIwMDMtMTEtMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBDbGVhbiB1cCBDaGFuZ2VMb2cubGliZmZpIGZvciBvbGRlciBwYXRjaGVzLgogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IEFkZCBEWUxEX0xJQlJBUllfUEFUSCBmb3IgZGFyd2luLgotCUFkZCAtbGdjY19zIHRvIGFkZGl0aW9uYWwgZmxhZ3MuCitjb21taXQgOWMxNTdkMzIxNWU0MzkzNzc3ZjgzZWI2ZmE4MDFkZjY1MjhmNDBkNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIEZyaSBEZWMgMjUgMDI6MTU6NDAgMjAwOSAtMDUwMAogCi0yMDAzLTExLTEyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgQ2xlYW4gdXAgdW5kZWZpbmVfQUNfQVJHX1ZBUl9QUkVDSU9VUyBwYXRjaC4KIAotCSogY29uZmlndXJlLmluLCBpbmNsdWRlL01ha2VmaWxlLmFtOiBQUiBsaWJnY2ovMTExNDcsIGluc3RhbGwKLQl0aGUgZmZpdGFyZ2V0LmggaGVhZGVyIGZpbGUgaW4gYSBnY2MgdmVyc2lvbmVkIGFuZCB0YXJnZXQKLQlkZXBlbmRlbnQgcGxhY2UuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgotCSogTWFrZWZpbGUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KK2NvbW1pdCBkMjJkZTA1YjBiZmM0ODA3NjZiYzEyNDA2MTVjZTI4MzBlZWU3MWI4CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIERlYyAyNSAwMjowNDoyMyAyMDA5IC0wNTAwCiAKLTIwMDMtMTEtMDkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBGaXggcGF0Y2hlcwogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogUHJpbnQgcmVzdWx0IGFuZCBjaGVjawotCXdpdGggZGctb3V0cHV0IHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KK2NvbW1pdCAxZmUzZGM3YzIwZGM0ZGJkOGZlZDBkMTljODYxODAyN2Q0NGVkOTcxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIERlYyAyNSAwMTozOTowMCAyMDA5IC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBNYWtlIGZmaV9jbG9zdXJlCi0Jc3RhdGljLgorICAgIEFkZCB3aW5kb3dzIHN1cHBvcnQgcGF0Y2guCiAKLTIwMDMtMTEtMDggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCBmN2MwYmM2MTNhODhmN2RiYzJkMThiMzQ1YzEwZmE0Mzg4MzNjMTcwCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQGdtYWNoaW5lLihub25lKT4KK0RhdGU6ICAgRnJpIERlYyAyNSAwMToyMjoxMSAyMDA5IC0wNTAwCiAKLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmM6IE5ldyB0ZXN0IGNhc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jOiBMaWtld2lzZS4KKyAgICAzLjAuOXJjNgogCi0yMDAzLTExLTA4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgYzdmYTJkYTgyNjAyNThjMTFhYjFkYzdhYzA2ZmI2MTFhMmMxYjUwZgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFRodSBEZWMgMjQgMDc6MjI6NDQgMjAwOSAtMDUwMAogCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBEbyBhIGNoZWNrIG9uIHRoZSByZXN1bHQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fc2MuYzogQ2xlYW51cCB3aGl0ZXNwYWNlcy4KKyAgICAzLjAuOXJjNgogCi0yMDAzLTExLTA2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgZGExMWJlY2UwZmRlNjZmYzAyNjhkYjNhMDEyMDdkZGE4NTdlMjVkMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFRodSBEZWMgMjQgMDU6MzQ6NDYgMjAwOSAtMDUwMAogCi0JKiBzcmMvcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogTW92ZSB0aGUgdmFsaWRpdHkgY2hlY2sgYWZ0ZXIKLQl0aGUgaW5pdGlhbGl6YXRpb24uCisgICAgUmVsZWFzZSAzLjAuOXJjNQogCi0yMDAzLTEwLTIzICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgZTMzOTliMTFlZGVhYjU0NmIwNjZiZmMxODU3NGYzZWRiOTA1ZDBkYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFRodSBEZWMgMjQgMDE6MDk6MzIgMjAwOSAtMDUwMAogCi0JKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IFJlcGxhY2UKLQlGRklfQVNTRVJUKEZBTFNFKSB3aXRoIEZGSV9BU1NFUlQoMCkuCisgICAgVXBkYXRlIFJFQURNRQogCi0yMDAzLTEwLTIyICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorY29tbWl0IDExNWFiMzZmY2VlZTY5NzQwYTAxY2U0OWJjMjdlMTkwOGNjMjM3YjEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AZ21hY2hpbmUuKG5vbmUpPgorRGF0ZTogICBUaHUgRGVjIDI0IDAwOjIyOjAwIDIwMDkgLTA1MDAKIAotCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IFJlcGxhY2UgdW5kZWZpbmVkIFVJTlQzMiBhbmQgZnJpZW5kcyB3aXRoCi0JX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpIGFuZCBmcmllbmRzLgorICAgIFVwZGF0ZSBtaXNzaW5nIGNoYW5nZXMgZm9yIDMuMC45cjQuCiAKLTIwMDMtMTAtMjIgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+Citjb21taXQgZjhjN2EyNDViZjVhODBiZDdlNzMwZWMwM2ZjYWQxN2M4ZGNmY2IwNworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBnbWFjaGluZS4obm9uZSk+CitEYXRlOiAgIFdlZCBEZWMgMjMgMjM6NDY6MjIgMjAwOSAtMDUwMAogCi0JKiBzcmMvaWE2NC9mZmkuYzogUmVwbGFjZSBGQUxTRS9UUlVFIHdpdGggZmFsc2UvdHJ1ZS4KKyAgICBTd2l0Y2ggdG8gcXVpbHQuIFJlYmFzZSB0byBsYXRlc3QgR0NDLgogCi0yMDAzLTEwLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Citjb21taXQgY2U4MDY3NzJmMDIzODdiOWE3NGY2NDk2YTI2M2EzNjhiY2NkNWQ1OQorTWVyZ2U6IGNkOTg4MTMgZGNjMWY2YgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE9jdCA1IDAwOjQxOjM1IDIwMDkgLTA0MDAKIAotCSogY29uZmlndXJlLmluOiBBQ19MSU5LX0ZJTEVTKGZmaXRhcmdldC5oKS4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIE1ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KKyAgICBNZXJnZSBicmFuY2ggJ21hc3Rlcicgb2YgZ2l0QGdpdGh1Yi5jb206YXRncmVlbi9saWJmZmkKIAotMjAwMy0xMC0yMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KLQkgICAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBkY2MxZjZiNGYxZmZkMjcxM2JmNjhiNzkxYTEzZjg1ZDQ1NWM4YjFiCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gT2N0IDUgMDA6Mjk6MzMgMjAwOSAtMDQwMAogCi0JQXZvaWQgdGhhdCBmZmkuaCBpbmNsdWRlcyBmZmljb25maWcuaC4KKyAgICBNb3JlIGNsZWFuIHVwLgogCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEluY2x1ZGUgZmZpdGFyZ2V0LmggZmlsZXMKLQkoVEFSR0VUX1NSQ19NSVBTX0dDQyk6IFJlbmFtZWQgdG8gVEFSR0VUX1NSQ19NSVBTX0lSSVguCi0JKFRBUkdFVF9TUkNfTUlQU19TR0kpOiBSZW1vdmVkLgotCShNSVBTX0dDQyk6IFJlbmFtZWQgdG8gVEFSR0VUX1NSQ19NSVBTX0lSSVguCi0JKE1JUFNfU0dJKTogUmVtb3ZlZC4KLQkoQ0xFQU5GSUxFUyk6IFJlbW92ZWQuCi0JKG1vc3RseWNsZWFuLWFtLCBjbGVhbi1hbSwgbW9zdGx5Y2xlYW4tc3ViLCBjbGVhbi1zdWIpOiBOZXcKLQl0YXJnZXRzLgotCSogYWNjb25maWcuaDogUmVtb3ZlZC4KLQkqIGNvbmZpZ3VyZS5pbjogQ29tcHV0ZSBzaXplb2ZzIG9ubHkgZm9yIGRvdWJsZSBhbmQgbG9uZyBkb3VibGUuCi0JVXNlIHRoZW0gdG8gZGVmaW5lIGFuZCBzdWJzdCBIQVZFX0xPTkdfRE9VQkxFLiAgSW5jbHVkZSBjb21tZW50cwotCWludG8gQUNfREVGSU5FIGluc3RlYWQgb2YgdXNpbmcgYWNjb25maWcuaC4gIENyZWF0ZQotCWluY2x1ZGUvZmZpdGFyZ2V0LmggaW5zdGVhZCBvZiBpbmNsdWRlL2ZmaWNvbmZpZy5oLiAgUmVuYW1lCi0JTUlQU19HQ0MgdG8gTUlQU19JUklYLCBkcm9wIE1JUFNfU0dJIHNpbmNlIHdlIGFyZSBpbiBnY2MncyB0cmVlLgotCUFDX0RFRklORSBFSF9GUkFNRV9GTEFHUy4KLQkqIGluY2x1ZGUvTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogTmV3IGF1dG9tYWtlIG1hY3JvLgotCShoYWNrX0RBVEEpOiBBZGQgZmZpdGFyZ2V0LmguCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBSZW1vdmUgYWxsIHN5c3RlbSBzcGVjaWZpYyBkZWZpbml0aW9ucy4KLQlEZWNsYXJlIHJhdyBBUEkgZXZlbiBpZiBpdCBpcyBub3QgaW5zdGFsbGVkLCB3aHkgYm90aGVyPwotCVVzZSBsaW1pdHMuaCBpbnN0ZWFkIG9mIFNJWkVPRl8qIHRvIGRlZmluZSBmZmlfdHlwZV8qLiAgRG8KLQlub3QgZGVmaW5lIEVIX0ZSQU1FX0ZMQUdTLCBpdCBpcyBpbiBmZmljb25maWcuaCBub3cuICBJbmNsdWRlCi0JZmZpdGFyZ2V0LmggaW5zdGVhZCBvZiBmZmljb25maWcuaC4gIFJlbW92ZSBBTElHTiBtYWNyby4KLQkoVUlOVF9BUkcsIElOVF9BUkcpOiBSZW1vdmVkLCB1c2UgZmZpX2FyZyBhbmQgZmZpX3NhcmcgaW5zdGVhZC4KLQkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChib29sKTogRG8gbm90IGRlZmluZS4KLQkoZmZpX2Fzc2VydCk6IEFjY2VwdCBmYWlsZWQgYXNzZXJ0aW9uLgotCShmZmlfdHlwZV90ZXN0KTogUmV0dXJuIHZvaWQgYW5kIGFjY2VwdCBmaWxlL2xpbmUuCi0JKEZGSV9BU1NFUlQpOiBQYXNzIHN0cmluZ2l6ZWQgZmFpbGVkIGFzc2VydGlvbi4KLQkoRkZJX0FTU0VSVF9BVCk6IE5ldyBtYWNyby4KLQkoRkZJX0FTU0VSVF9WQUxJRF9UWVBFKTogTmV3IG1hY3JvLgotCShVSU5UOCwgU0lOVDgsIFVJTlQxNiwgU0lOVDE2LCBVSU5UMzIsIFNJTlQzMiwKLQlVSU5UNjQsIFNJTlQ2NCk6IERlZmluZSBoZXJlIHdpdGggZ2NjJ3MgX19hdHRyaWJ1dGVfXyBtYWNybwotCWluc3RlYWQgb2YgaW4gZmZpLmgKLQkoRkxPQVQzMiwgQUxJR04pOiBEZWZpbmUgaGVyZSBpbnN0ZWFkIG9mIGluIGZmaS5oCi0JKiBpbmNsdWRlL2ZmaS1taXBzLmg6IFJlbW92ZWQuICBJdHMgY29udGVudCBtb3ZlZCB0bwotCXNyYy9taXBzL2ZmaXRhcmdldC5oIGFmdGVyIHNlcGFyYXRpbmcgYXNzZW1ibHkgYW5kIEMgc2VjdGlvbnMuCi0JKiBzcmMvYWxwaGEvZmZpLmMsIHNyYy9hbHBoYS9mZmkuYywgc3JjL2phdmFfcmF3X2FwaS5jCi0Jc3JjL3ByZXBfY2lmLmMsIHNyYy9yYXdfYXBpLmMsIHNyYy9pYTY0L2ZmaS5jLAotCXNyYy9taXBzL2ZmaS5jLCBzcmMvbWlwcy9uMzIuUywgc3JjL21pcHMvbzMyLlMsCi0Jc3JjL21pcHMvZmZpdGFyZ2V0LmgsIHNyYy9zcGFyYy9mZmkuYywgc3JjL3g4Ni9mZmk2NC5jOgotCVNJWkVPRl9BUkcgLT4gRkZJX1NJWkVPRl9BUkcuCi0JKiBzcmMvaWE2NC9mZmkuYzogSW5jbHVkZSBzdGRib29sLmggKHByb3ZpZGVkIGJ5IEdDQyAyLjk1KykuCi0JKiBzcmMvZGVidWcuYyAoZmZpX2Fzc2VydCk6IEFjY2VwdCBzdHJpbmdpemVkIGZhaWxlZCBhc3NlcnRpb24uCi0JKGZmaV90eXBlX3Rlc3QpOiBSZXdyaXR0ZW4uCi0JKiBzcmMvcHJlcC1jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUsIGZmaV9wcmVwX2NpZik6IENhbGwKLQlGRklfQVNTRVJUX1ZBTElEX1RZUEUuCi0JKiBzcmMvYWxwaGEvZmZpdGFyZ2V0LmgsIHNyYy9hcm0vZmZpdGFyZ2V0LmgsCi0Jc3JjL2lhNjQvZmZpdGFyZ2V0LmgsIHNyYy9tNjhrL2ZmaXRhcmdldC5oLAotCXNyYy9taXBzL2ZmaXRhcmdldC5oLCBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCwKLQlzcmMvczM5MC9mZml0YXJnZXQuaCwgc3JjL3NoL2ZmaXRhcmdldC5oLAotCXNyYy9zaDY0L2ZmaXRhcmdldC5oLCBzcmMvc3BhcmMvZmZpdGFyZ2V0LmgsCi0Jc3JjL3g4Ni9mZml0YXJnZXQuaDogTmV3IGZpbGVzLgotCSogc3JjL2FscGhhL29zZi5TLCBzcmMvYXJtL3N5c3YuUywgc3JjL2lhNjQvdW5peC5TLAotCXNyYy9tNjhrL3N5c3YuUywgc3JjL21pcHMvbjMyLlMsIHNyYy9taXBzL28zMi5TLAotCXNyYy9wb3dlcnBjL2FpeC5TLCBzcmMvcG93ZXJwYy9kYXJ3aW4uUywKLQlzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMsIHNyYy9wb3dlcnBjL2xpbnV4NjQuUywKLQlzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUywgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUywKLQlzcmMvcG93ZXJwYy9zeXN2LlMsIHNyYy9zMzkwL3N5c3YuUywgc3JjL3NoL3N5c3YuUywKLQlzcmMvc2g2NC9zeXN2LlMsIHNyYy9zcGFyYy92OC5TLCBzcmMvc3BhcmMvdjkuUywKLQlzcmMveDg2L3N5c3YuUywgc3JjL3g4Ni91bml4NjQuUywgc3JjL3g4Ni93aW4zMi5TOgotCWluY2x1ZGUgZmZpY29uZmlnLmgKK2NvbW1pdCAyODI5ZjU5NDFhMjIzYjlkODUxZDhhYjYzMTgzMThlNjE5N2Q3ZTAxCitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gT2N0IDUgMDA6Mjg6MDMgMjAwOSAtMDQwMAogCi0yMDAzLTEwLTIwICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBDbGVhbiB1cAogCi0JKiBzcmMvbWlwcy9mZmkuYzogVXNlIF9BQklOMzIsIF9BQklPMzIgaW5zdGVhZCBvZiBleHRlcm5hbAotCV9NSVBTX1NJTV9OQUJJMzIsIF9NSVBTX1NJTV9BQkkzMi4KK2NvbW1pdCBjZDk4ODEzZGU1MTdlYTY0MDQxNjM3ZTNlNzhkMjdhMDAxZDZkM2I0CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBNb24gT2N0IDUgMDA6MjU6MjkgMjAwOSAtMDQwMAogCi0yMDAzLTEwLTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgRnJvbSBKZW5zIFJlaHNhY2suICBGaXggZm9yIDY0LWJpdCBBSVguCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IERlY2xhcmUgYnl0ZXMgYWdhaW4uCi0JVXNlZCB3aGVuIEZGSV9ERUJVRyA9IDEuCitjb21taXQgZTRhOTFkZTc2NmFjYzQ3ZjZjNTBmMTNjYzExNzE5YTY1ZTIzZWNiYQorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgTW9uIE9jdCA1IDAwOjE2OjE3IDIwMDkgLTA0MDAKIAotMjAwMy0xMC0xNCAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICBGcm9tIEFiZHVsYXppeiBHaHVsb3VtLiAgQWRkcyBzcGVjaWFsIGNhc2UgZm9yIFNub3cgTGVvcGFyZC4KIAotCSogc3JjL3R5cGVzLmMgKGRvdWJsZSwgbG9uZ2RvdWJsZSk6IERlZmF1bHQgUE9XRVJQQzY0IHRvIDggYnl0ZSBzaXplCi0JYW5kIGFsaWduLgorY29tbWl0IDM0MjVhNzYzYmNkYWFkYjhiNDMwMjI2ZjQyN2VjODMzYWZkY2M5NmEKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBPY3QgNCAyMzo1NzoyOSAyMDA5IC0wNDAwCiAKLTIwMDMtMTAtMDYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorICAgIEZpeCBkZXRlY3Rpb24gb2YgZnJlZS9vcGVuYnNkLiAgRnJvbSBBbGV4aXMgQmFsbGllci4KIAotCSogaW5jbHVkZS9mZmlfbWlwcy5oOiBEZWZpbmUgRkZJX01JUFNfTjMyIGZvciBOMzIvTjY0IEFCSXMsCi0JRkZJX01JUFNfTzMyIGZvciBPMzIgQUJJLgorY29tbWl0IDIzNDBlN2E3Nzc5MDJkZTYxNDk5ZDQ3ODIzYWQ4ZDVlMGVlYjYyMDMKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFN1biBPY3QgNCAyMzo1MzoxNyAyMDA5IC0wNDAwCiAKLTIwMDMtMTAtMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICBBVlIgc3VwcG9ydAogCi0JKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFNldCBMRF9MSUJSQVJZX1BBVEhfNjQgZm9yCi0JU1BBUkM2NC4gQ2xlYW51cCB3aGl0ZXNwYWNlcy4KK2NvbW1pdCA1Y2JlMjA1OGMxMjhlODQ4NDQ2YWU3OWZlMTVlZTU0MjYwYTkwNTU5CitBdXRob3I6IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorRGF0ZTogICBTdW4gT2N0IDQgMjM6NTM6MTEgMjAwOSAtMDQwMAogCi0yMDAzLTA5LTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgSW5pdGlhbCBzdGFuZC1hbG9uZSBwYXRjaC4KIAotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmM6IFhmYWlsIG1pcHMsIGFybSwKLQlzdHJvbmdhcm0sIHhzY2FsZS4gQ2xlYW51cCB3aGl0ZXNwYWNlcy4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmM6IENsZWFudXAgd2hpdGVzcGFjZXMuCitjb21taXQgYzZkZGRiZDAyYmFkOTY1NGVkNThjZGIwZmViMzYwOTM0ZDEwNWRlYworQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE9jdCA0IDA4OjExOjMzIDIwMDkgLTA0MDAKIAotMjAwMy0wOS0xOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorICAgIEluaXRpYWwgY29tbWl0CiAKLQkqIHNyYy9wb3dlcnBjL2FpeC5TOiBDbGVhbnVwIHdoaXRlc3BhY2VzLgotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogTGlrZXdpc2UuCitjb21taXQgNWZmYzBjMzc0ODZmYjE1MzhiY2NjMGNhN2FjYzgwN2Q0ZjFhZjkzMgorQXV0aG9yOiBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KK0RhdGU6ICAgU3VuIE9jdCA0IDA3OjU4OjIyIDIwMDkgLTA0MDAKIAotMjAwMy0wOS0xOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIFVwZGF0ZSB2ZXJzaW9uIHRvIDMuMC45cmMxLiAgQWRkIG1vcmUgdXNlZnVsIHRoaW5ncyB0byAuZ2l0aWdub3JlLgogCi0JKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogQ2xlYW51cCB3aGl0ZXNwYWNlcywgY29tbWVudCBmb3JtYXR0aW5nLgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorY29tbWl0IGJkMjlmODNlZTlmNmZhNmI2NWFkZWU5ZDNmNTc4MzRmMzY0ZDk4ODcKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBTZXAgMjkgMTI6MDc6MjYgMjAwOSAtMDQwMAogCi0yMDAzLTA5LTE4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+Ci0JICAgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKyAgICBBZGQgLmdpdGlnbm9yZQogCi0JKiBzcmMvdHlwZXMuYyAoZG91YmxlKTogQWRkIEFJWCBhbmQgRGFyd2luIHRvIHRoZSByaWdodCBUWVBFREVGLgotCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogUmVtb3ZlIHRoZSBwb2ludGVyIHRvIHRoZSBvdXRnb2luZwotCXBhcmFtZXRlciBzdGFjay4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogSGFuZGxlIHN0cnVjdHVyZXMKLQlhY2NvcmRpbmcgdG8gdGhlIERhcndpbi9BSVggQUJJLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogTGlrZXdpc2UuCi0JUmVtb3ZlIHRoZSBvdXRnb2luZyBwYXJhbWV0ZXIgc3RhY2sgbG9naWMuIFNpbXBsaWZ5IHRoZSBldmFsdWF0aW9uCi0Jb2YgdGhlIGRpZmZlcmVudCBDQVNFIHR5cGVzLgotCShmZmlfcHJlcF9jbG91c3VyZSk6IEF2b2lkIHRoZSBjYXN0cyBvbiBsdmFsdWVzLiBDaGFuZ2UgdGhlIGJyYW5jaAotCXN0YXRlbWVudCBpbiB0aGUgdHJhbXBvbGluZSBjb2RlLgorY29tbWl0IDk0NzRmODUzZjgzZTNmMDE2N2MxYjMwNjE3NzMyMWJmY2M5M2U1NmQKK0F1dGhvcjogQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CitEYXRlOiAgIFR1ZSBTZXAgMjkgMTE6MTM6MDIgMjAwOSAtMDQwMAogCi0yMDAzLTA5LTE4ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKyAgICBSZW1vdmUgb2xkIENWU1JPT1QgZmlsZXMuCiAKLQkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFRha2UgYWNjb3VudCBpbnRvIHRoZSBhbGlnbmVtZW50Ci0JZm9yIHRoZSByZWdpc3RlciBzaXplLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEhhbmRsZSB0aGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZQotCWFkZHJlc3MgY29ycmVjdGx5LgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFJldHVybiB0aGUgYXBwcm9wcmlhdGUgdHlwZSB3aGVuCi0JdGhlIHJlZ2lzdGVycyBhcmUgdXNlZCBmb3IgdGhlIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUuCi0JKiBzcmMvc2gvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogRml4IHRoZSBzdGFjayBsYXlvdXQgZm9yCi0JdGhlIDY0LWJpdCByZXR1cm4gdmFsdWUuICBVcGRhdGUgY29weXJpZ2h0IHllYXJzLgorY29tbWl0IDBjMjUyNzVlYzI0YmZlMmMyYzI1YTAwMDQ2NWYwOTUwZWY5ZGQ1MWIKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBXZWQgQXVnIDE5IDEyOjU3OjM0IDIwMDkgKzAwMDAKIAotMjAwMy0wOS0xNyAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgQXBwbHkgRGF2ZSBLb3JuJ3MgY3lnd2luL0dDQyBjaGFuZ2VzCiAKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogU2VhcmNoIGluCi0Jc3JjZGlyIGZvciBmZmlfbWlwcy5oLgorY29tbWl0IDM5MjI4YzI3ZWQzZjY3N2E5NWI0NjM4MGE4ZDMxNjAyYjU3NzdlMWEKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFR1ZSBKdW4gMTYgMTg6MDA6NDcgMjAwOSArMDAwMAogCi0yMDAzLTA5LTEyICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIDIwMDktMDYtMTYgIFdpbSBMZXdpcyAgPHdpbWxAaGhoaC5vcmc+CisgICAgCisgICAgCSogc3JjL3Bvd2VycGMvZmZpLmM6IEF2b2lkIGNsb2JiZXJpbmcgY3IzIGFuZCBjcjQsIHdoaWNoIGFyZQorICAgIAlzdXBwb3NlZCB0byBiZSBjYWxsZWUtc2F2ZWQuCisgICAgCSogc3JjL3Bvd2VycGMvc3lzdi5TIChzbWFsbF9zdHJ1Y3RfcmV0dXJuX3ZhbHVlKTogRml4IG92ZXJydW4gb2YKKyAgICAJcmV0dXJuIGJ1ZmZlciBmb3Igb2RkLXNpemUgc3RydWN0cy4KIAotCSogc3JjL3ByZXBfY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlKTogSW5jbHVkZSB0YWlsIHBhZGRpbmcgaW4KLQlzdHJ1Y3R1cmUgc2l6ZS4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogQ29ycmVjdAotCXBsYWNlbWVudCBvZiBmbG9hdCByZXN1bHQuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyAoY2xvc3VyZV90ZXN0X2ZuMSk6IENvcnJlY3QKLQljYXN0IG9mICJyZXNwIiBmb3IgYmlnLWVuZGlhbiA2NCBiaXQgbWFjaGluZXMuCitjb21taXQgNWU5M2NjNzA0ZDEyN2MyYzhhZTdmNWQyY2VmNjIxMTQ1ZDQzZTc3NworQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgVHVlIEp1biAxNiAxNzo0MTo0NyAyMDA5ICswMDAwCiAKLTIwMDMtMDktMTEgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisgICAgMjAwOS0wNi0xNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKyAgICAKKyAgICAJUFIgbGliZmZpLzQwNDQ0CisgICAgCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBBZGQKKyAgICAJYWxsb3dfc3RhY2tfZXhlY3V0ZSBmb3IgRGFyd2luLgogCi0JKiBzcmMvdHlwZXMuYyAoZG91YmxlLCBsb25nZG91YmxlKTogTWVyZ2UgaWRlbnRpY2FsIFNIIGFuZCBBUk0KLQl0eXBlZGVmcywgYW5kIGFkZCBQT1dFUlBDNjQuCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogQ29ycmVjdCBuZXh0X2FyZyBjYWxjIGZvcgotCXN0cnVjdCBzcGxpdCBvdmVyIGdwciBhbmQgcmVzdC4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDb3JyZWN0IGludGFyZ19jb3VudCBmb3Igc3RydWN0dXJlcy4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IEZpeCBncHIgb2Zmc2V0cy4KK2NvbW1pdCBiNTA5YWY4OTU5ZGMzNzFiOTIzOTJjNjIzNTIyZWE2ZjQ5NDZhNzFkCitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUdWUgSnVuIDE2IDE2OjE3OjUyIDIwMDkgKzAwMDAKIAotMjAwMy0wOS0wOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIDIwMDktMDYtMTYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgIAkqIGNvbmZpZ3VyZS5hYyAoVEFSR0VURElSKTogQWRkIG1pc3NpbmcgYmxhbmsgbGluZXMuCisgICAgCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgogCi0JKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpIEhhbmRsZSBzdHJ1Y3QKLQlwYXNzaW5nIGNvcnJlY3RseS4KK2NvbW1pdCBkNTdlOTZkYzU2ZWU3NmZiYmI5YjU5ZDczYWVhYTkyMzU0ZGI1ZWNiCitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUdWUgSnVuIDE2IDA5OjU5OjAyIDIwMDkgKzAwMDAKIAotMjAwMy0wOS0wOSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKyAgICAyMDA5LTA2LTE2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmMsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYywKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYzogRml4IHByaW50ZiBmb3JtYXQKKyAgICAgICAgICAgIHNwZWNpZmllcnMuCisgICAgICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBBZCB4ODYgWEZBSUxzLgorICAgICAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IEZpeCBkZy1leGNlc3MtZXJyb3JzLgorICAgICAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoUFJJZExMLCBQUkl1TEwpOiBEZWZpbmUuCiAKLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KK2NvbW1pdCBiMDFkNmQxOTgyYzllMDIwNTA3MDI5YmZkNWE1OGE4YzYwZDExMWZhCitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUdWUgSnVuIDE2IDA5OjQ0OjU0IDIwMDkgKzAwMDAKIAotMjAwMy0wOS0wNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIDIwMDktMDYtMTYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogeGZhaWwgZXZlcnl3aGVyZS4KKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogTGlrZXdpc2UuCiAKLQkqIE1ha2VmaWxlLmFtOiBSZW1vdmUgYnVpbGQgcnVsZXMgZm9yIGZmaXRlc3QuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCAzNWI2ZGVkMTM4NTkxOTAwYTg4MDU1YThhOGFjMWZhZGMyOWE3NmQ2CitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBGcmkgSnVuIDEyIDE1OjI5OjIwIDIwMDkgKzAwMDAKIAotMjAwMy0wOS0wNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIDIwMDktMDYtMTEgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorICAgIAorICAgICAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogQWRkIHhmYWlsIHNoKi0qLWxpbnV4LSouCisgICAgICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBBZGQgeGZhaWwgc2gqLSotKi4KKyAgICAgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBMaWtld2lzZS4KIAotCSogc3JjL2phdmFfcmF3X2FwaS5jOiBJbmNsdWRlIDxzdGRsaWIuaD4gdG8gZml4IGNvbXBpbGVyIHdhcm5pbmcKLQlhYm91dCBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBhYm9ydCgpLgorY29tbWl0IGFjYzQ2NjA1ZjJkOTVkNjdkNjkzOThlNzY0NDYxMGYxMGExNTdjZTMKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIEZyaSBKdW4gMTIgMTQ6MjE6MjggMjAwOSArMDAwMAogCi0yMDAzLTA5LTA0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgMjAwOS0wNi0xMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIENoYW5nZUxvZy5saWJmZmk6IHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYywKKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBGaXggcHJpbnRmIGZvcm1hdAorICAgICAgICAgICAgc3BlY2lmaWVycy4KKyAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBpbmNsdWRlIHN0ZGludC5oLgogCi0JKiBNYWtlZmlsZS5hbTogQWRkIGRlamFnbnUgdGVzdCBmcmFtZXdvcmsuIEZpeGVzIFBSIG90aGVyLzExNDExLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuaW46IEFkZCBkZWphZ251IHRlc3QgZnJhbWV3b3JrLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDE2ZDE5OTZlZDA3OTdiZDdjMTFhY2EyYjBmZTdlNzc0ODc1MWFhZjYKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBUaHUgSnVuIDExIDE0OjI3OjQyIDIwMDkgKzAwMDAKIAotCSogdGVzdHN1aXRlL01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KLQkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogQnVpbHQKLQkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogTmV3IGZpbGUuCi0JKiB0ZXN0c3VpdGUvY29uZmlnL2RlZmF1bHQuZXhwOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0MS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl91Yy5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4uYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYzogTGlrZXdpc2UuCi0JKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jOiBMaWtld2lzZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmM6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBOZXcgZmlsZS4KLQkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgotCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgorICAgIHVwZGF0ZSBjaGFuZ2Vsb2cKIAorY29tbWl0IDkyYTUxNWMzM2VmZTkxYmUzY2IwMjU4ZjAxYzYzYWZmMjA4NDg5YzcKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBUaHUgSnVuIDExIDE0OjI3OjI4IDIwMDkgKzAwMDAKIAotMjAwMy0wOC0xMyAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgdXNlIGZmaV9jbG9zdXJlX2FsbG9jIGluc3RlYWQgb2Ygc3RhY2stYmFzZWQgY2xvc3VyZQogCi0JKiBzcmMvc2gvZmZpLmMgKE9GU19JTlQxNik6IFNldCAwIGZvciBsaXR0bGUgZW5kaWFuIGNhc2UuICBVcGRhdGUKLQljb3B5cmlnaHQgeWVhcnMuCitjb21taXQgZTQzNjMxNjBiYTllNTAxNjdmOWNhMGE3Mzk5ZDUzN2ExZDJjZDBjZQorQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIFRodSBKdW4gMTEgMTQ6MjY6MjMgMjAwOSArMDAwMAogCi0yMDAzLTA4LTAyICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorICAgIHJlbW92ZSB1bnVzZWQgZXh0ZXJuCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBNb2RpZnkgZm9yIGNoYW5nZWQgZ2NjCi0Jc3RydWN0dXJlIHBhc3NpbmcuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogTGlrZXdpc2UuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IFJlbW92ZSBjb2RlIHdyaXRpbmcgdG8gcGFybSBzYXZlIGFyZWEuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IFVzZSByZXR1cm4KLQlhZGRyZXNzIGluIGxyIGZyb20gZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQgY2FsbCB0byBjYWxjdWxhdGUKLQl0YWJsZSBhZGRyZXNzLiAgT3B0aW1pemUgZnVuY3Rpb24gdGFpbC4KK2NvbW1pdCAxZGMyNzgxZDJiYTM4ZjVmMDAwZmY3MDA2OWQ2MTdmYjIxZTFkMmFmCitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgVGh1IEp1biAxMSAxMTozNjoxNiAyMDA5ICswMDAwCiAKLTIwMDMtMDctMjggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKyAgICByZW1vdmUgbm90LXlldC1hcHBsaWVkIGNoYW5nZWxvZyBlbnRyaWVzCiAKLQkqIHNyYy9zcGFyYy9mZmkuYzogSGFuZGxlIGFsbCBmbG9hdGluZyBwb2ludCByZWdpc3RlcnMuCi0JKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuIEZpeGVzIHNlY29uZCBwYXJ0IG9mIFBSIHRhcmdldC8xMTQxMC4KK2NvbW1pdCBiYjI3NzM1ZmU2ODlkYWM5N2VjMGRjODQ3ZWQ4ZDNkNTE5NjIwMTA5CitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgV2VkIEp1biAxMCAxMDo0MjozNiAyMDA5ICswMDAwCiAKLTIwMDMtMDctMTEgIEdlcmFsZCBQZmVpZmVyICA8cGZlaWZlckBkYmFpLnR1d2llbi5hYy5hdD4KKyAgICBhZGQgd2luNjQgc3VwcG9ydAogCi0JKiBSRUFETUU6IE5vdGUgdGhhdCBsaWJmZmkgaXMgbm90IHBhcnQgb2YgR0NDLiAgVXBkYXRlIHRoZSBwcm9qZWN0Ci0JVVJMIGFuZCBzdGF0dXMuCitjb21taXQgYjJhNTRjMTAwYzc0ODU0YTQwOTgyMDgxN2Q1NDYxN2ZkZGEzOWViOAorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgTW9uIEp1biA4IDE2OjUwOjQ5IDIwMDkgKzAwMDAKIAotMjAwMy0wNi0xOSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgorICAgIDIwMDktMDYtMDggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBBZGQgeGZhaWxzLgorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jOiBBZGQgeGZhaWxzLgorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZGJsc19zdHJ1Y3QuYzogQWRkIHhmYWlsIHg4Nl82NC0qLWxpbnV4LSouCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBBZGQgeGZhaWxzLgorICAgIAorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IEFkZCBfX1VOVVNFRF9fIHRvIGFyZ3MuCisgICAgCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBMaWtld2lzZS4KKyAgICAJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IExpa2V3aXNlLgorICAgIAkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiAgTGlrZXdpc2UuCiAKLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IEluY2x1ZGUgZmZpLmguCitjb21taXQgMjU3MjNlNzE0MWY3M2QzNzM2ZDcyNDRiOTgwYzg5ZDk3ZGI4NTJiNgorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgRnJpIEp1biA1IDEzOjAzOjQwIDIwMDkgKzAwMDAKIAotMjAwMy0wNi0xMyAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgMjAwOS0wNi0wNSAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIHNyYy94ODYvd2luMzIuUyAoX2ZmaV9jbG9zdXJlX1NURENBTEwpOiBJbXBvcnQgZnJvbSBnY2MuCiAKLQkqIHNyYy94ODYvc3lzdi5TOiBBdm9pZCBnYXMtb25seSAudWxlYjEyOC8uc2xlYjEyOCBkaXJlY3RpdmVzLgotCVVzZSBDIHN0eWxlIGNvbW1lbnRzLgorY29tbWl0IDcwNzU4MTk5YzdjZDQxZjQxMTk4NzM2MGNjYjMwMmI0OTdhNTZkYzkKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFRodSBKdW4gNCAxNjoyOTo1OCAyMDA5ICswMDAwCiAKLTIwMDMtMDYtMTMgIEtheiBLb2ppbWEgIDxra29qaW1hQHJyLmlpajR1Lm9yLmpwPgorICAgICAyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmg6IEZpeCBtaXNhcHBsaWVkIG1lcmdlIGZyb20gZ2NjLgogCi0JKiBNYWtlZmlsZS5hbTogQWRkIFNIbWVkaWEgc3VwcG9ydC4gIEZpeCBhIHR5cG8gb2YgU0ggc3VwcG9ydC4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlLmluIChzaDY0LSotbGludXgqLCBzaDUqLSotbGludXgqKTogQWRkIHRhcmdldC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBTSG1lZGlhIHN1cHBvcnQuCi0JKiBzcmMvc2g2NC9mZmkuYzogTmV3IGZpbGUuCi0JKiBzcmMvc2g2NC9zeXN2LlM6IE5ldyBmaWxlLgorY29tbWl0IGU4YmIxMjU2M2Y5YWEyM2RkZjM2ZmE2YTViOTJiMTZiNWMzZTFhN2YKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFRodSBKdW4gNCAxNDo1OToxOCAyMDA5ICswMDAwCiAKLTIwMDMtMDUtMTYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIDIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgIAkqIHNyYy9taXBzL28zMi5TLAorICAgIAlzcmMvbWlwcy9uMzIuUzogRml4IGxpY2VuY2UgZm9ybWF0dGluZy4KIAotCSogY29uZmlndXJlLmluIChIQVZFX1JPX0VIX0ZSQU1FKTogQ2hlY2sgd2hldGhlciAuZWhfZnJhbWUgc2VjdGlvbgotCXNob3VsZCBiZSByZWFkLW9ubHkuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KLQkqIGluY2x1ZGUvZmZpLmguaW4gKEVIX0ZSQU1FX0ZMQUdTKTogRGVmaW5lLgotCSogc3JjL2FscGhhL29zZi5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgotCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLiAgSW5jbHVkZSBmZmkuaC4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLiAgVXNlIHBjcmVsIGVuY29kaW5nCi0JaWYgLWZwaWMvLWZQSUMvLW1yZWxvY2F0YWJsZS4KLQkqIHNyYy9wb3dlcnBjL3Bvd2VycGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KLQkqIHNyYy9zcGFyYy92OC5TOiBJZiBIQVZFX1JPX0VIX0ZSQU1FIGlzIGRlZmluZWQsIGRvbid0IGluY2x1ZGUKLQkjd3JpdGUgaW4gLmVoX2ZyYW1lIGZsYWdzLgotCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgotCSogc3JjL3g4Ni91bml4NjQuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLgotCSogc3JjL3g4Ni9zeXN2LlM6IExpa2V3aXNlLiAgVXNlIHBjcmVsIGVuY29kaW5nIGlmIC1mcGljLy1mUElDLgotCSogc3JjL3MzOTAvc3lzdi5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuICBJbmNsdWRlIGZmaS5oLgorY29tbWl0IGQ2NmE4ZTMyYzM2NzE0NzllM2NlMGY2ODE5NjczZTU5MzJiYTZiN2YKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFRodSBKdW4gNCAxNDo0Mzo0MCAyMDA5ICswMDAwCiAKLTIwMDMtMDUtMDcgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKyAgICAyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAJKiBzcmMveDg2L2Rhcndpbi5TOiBGaXggbGljZW5jZSBmb3JtYXR0aW5nLgorICAgIAlzcmMveDg2L3dpbjMyLlM6IExpa2V3aXNlLgorICAgIAlzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorICAgIAlzcmMvc2gvc3lzdi5TOiBMaWtld2lzZS4KIAotCUZpeGVzIFBSIGJvb3RzdHJhcC8xMDY1NgotCSogY29uZmlndXJlLmluIChIQVZFX0FTX1JFR0lTVEVSX1BTRVVET19PUCk6IFRlc3QgYXNzZW1ibGVyCi0Jc3VwcG9ydCBmb3IgLnJlZ2lzdGVyIHBzZXVkby1vcC4KLQkqIHNyYy9zcGFyYy92OC5TOiBVc2UgaXQuCi0JKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCA3YzNiN2ZkNmI1ZGI3NDZiNWIwOWE3MThmMzA0NGY4MTEzNzJmOTQxCitBdXRob3I6IGFwaCA8YXBoPgorRGF0ZTogICBUaHUgSnVuIDQgMTQ6Mzk6MjAgMjAwOSArMDAwMAogCi0yMDAzLTA0LTE4ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKyAgICAyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICAKKyAgICAJKiBzcmMvc2g2NC9mZmkuYzogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4gIFdhcyBtaXNzaW5nIGZyb20gbWVyZ2UKKyAgICAJb2YgQW5kcmVhcyBUb2JsZXIncyBwYXRjaCBmcm9tIDIwMDYtMDQtMjIuCiAKLQkqIGluY2x1ZGUvZmZpLmguaW4gKFBPV0VSUEM2NCk6IERlZmluZSBpZiA2NC1iaXQuCi0JKGVudW0gZmZpX2FiaSk6IEFkZCBGRklfTElOVVg2NCBvbiBQT1dFUlBDLgotCU1ha2UgaXQgdGhlIGRlZmF1bHQgb24gUE9XRVJQQzY0LgotCShGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIHRvIDI0IG9uIFBPV0VSUEM2NC4KLQkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIHBvd2VycGMtKi1saW51eCogaW50byBwb3dlcnBjKi0qLWxpbnV4Ki4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIHNyYy9wb3dlcnBjL2ZmaS5jIChoaWRkZW4pOiBEZWZpbmUuCi0JKGZmaV9wcmVwX2FyZ3NfU1lTVik6IFJlbmFtZWQgZnJvbQotCWZmaV9wcmVwX2FyZ3MuICBDYXN0IHBvaW50ZXJzIHRvIHVuc2lnbmVkIGxvbmcgdG8gc2h1dCB1cCB3YXJuaW5ncy4KLQkoTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQsIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0LAotCUFTTV9ORUVEU19SRUdJU1RFUlM2NCk6IE5ldy4KLQkoZmZpX3ByZXBfYXJnczY0KTogTmV3IGZ1bmN0aW9uLgotCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBGRklfTElOVVg2NCBBQkkuCi0JKGZmaV9jYWxsKTogTGlrZXdpc2UuCi0JKGZmaV9wcmVwX2Nsb3N1cmUpOiBMaWtld2lzZS4KLQkoZmx1c2hfaWNhY2hlKTogU3Vycm91bmQgYnkgI2lmbmRlZiBQT1dFUlBDNjQuCi0JKGZmaV9kYmxmbCk6IE5ldyB1bmlvbiB0eXBlLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IFVzZSBpdCB0byBhdm9pZCBhbGlhc2luZyBwcm9ibGVtcy4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQpOiBOZXcgZnVuY3Rpb24uCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBTdXJyb3VuZCB3aG9sZSBmaWxlIGJ5ICNpZm5kZWYKLQlfX3Bvd2VycGM2NF9fLgotCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KLQkoZmZpX2NhbGxfU1lTVik6IFJlbmFtZSBmZmlfcHJlcF9hcmdzIHRvIGZmaV9wcmVwX2FyZ3NfU1lTVi4KLQkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTmV3IGZpbGUuCi0JKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTmV3IGZpbGUuCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBzcmMvcG93ZXJwYy9saW51eDY0LlMgYW5kCi0Jc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMuCi0JKFRBUkdFVF9TUkNfUE9XRVJQQyk6IExpa2V3aXNlLgorY29tbWl0IDFhMmY5M2E4YjM2MmRiMTM2MzhhZmQ5ZmNiM2YyNjUwMTgwYmZhMTcKK0F1dGhvcjogYXBoIDxhcGg+CitEYXRlOiAgIFRodSBKdW4gNCAxMDo0NTo1MSAyMDA5ICswMDAwCiAKLQkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbiwgY2xvc3VyZV90ZXN0X2ZuMSwgY2xvc3VyZV90ZXN0X2ZuMiwKLQljbG9zdXJlX3Rlc3RfZm4zKTogRml4IHJlc3VsdCBwcmludGluZyBvbiBiaWctZW5kaWFuIDY0LWJpdAotCW1hY2hpbmVzLgotCShtYWluKTogUHJpbnQgdHN0Ml9hcmcgaW5zdGVhZCBvZiB1bmluaXRpYWxpemVkIHRzdDJfcmVzdWx0LgorICAgIDIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiBzcmMvc2gvZmZpLmM6IEFwcGx5IG1pc3NpbmcgaHVuayBmcm9tIEFsZXhhbmRyZSBPbGl2YSdzIHBhdGNoIG9mCisgICAgICAgICAgICAyMDA3LTAzLTA3LgogCi0JKiBzcmMvZmZpdGVzdC5jIChtYWluKTogSGlkZSB3aGF0IGNsb3N1cmUgcG9pbnRlciByZWFsbHkgcG9pbnRzIHRvCi0JZnJvbSB0aGUgY29tcGlsZXIuCitjb21taXQgOTQ0Yzk1Y2Y3YWFhYWY3YzVmYTM2OGNkYTQ2NzNkZDM4ZjQ1MDIwZQorQXV0aG9yOiBhcGggPGFwaD4KK0RhdGU6ICAgV2VkIEp1biAzIDE3OjQyOjU2IDIwMDkgKzAwMDAKIAotMjAwMy0wNC0xNiAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CisgICAgMjAwOS0wNS0yMiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisgICAgCisgICAgICAgICAgICogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2Nsb3N1cmVfU1REQ0FMTCk6ICBOZXcgZnVuY3Rpb24uCisgICAgICAgICAgICguZWhfZnJhbWUpOiAgQWRkIEZERSBmb3IgaXQuCisgICAgCisgICAgMjAwOS0wNS0yMiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisgICAgCisgICAgICAgICAgICogY29uZmlndXJlLmFjOiAgQWxzbyBjaGVjayBpZiBhc3NlbWJsZXIgc3VwcG9ydHMgcGMtcmVsYXRpdmUKKyAgICAgICAgICAgcmVsb2NzIG9uIFg4Nl9XSU4zMiB0YXJnZXRzLgorICAgICAgICAgICAqIGNvbmZpZ3VyZTogIFJlZ2VuZXJhdGUuCisgICAgICAgICAgICogc3JjL3g4Ni93aW4zMi5TIChmZmlfcHJlcF9hcmdzKTogIERlY2xhcmUgZXh0ZXJuLCBub3QgZ2xvYmFsLgorICAgICAgICAgICAoX2ZmaV9jYWxsX1NZU1YpOiAgQWRkIG1pc3NpbmcgZnVuY3Rpb24gdHlwZSBzeW1ib2wgLmRlZiBhbmQKKyAgICAgICAgICAgYWRkIEVIIG1hcmt1cCBsYWJlbHMuCisgICAgICAgICAgIChfZmZpX2NhbGxfU1REQ0FMTCk6ICBMaWtld2lzZS4KKyAgICAgICAgICAgKF9mZmlfY2xvc3VyZV9TWVNWKTogIExpa2V3aXNlLgorICAgICAgICAgICAoX2ZmaV9jbG9zdXJlX3Jhd19TWVNWKTogIExpa2V3aXNlLgorICAgICAgICAgICAoLmVoX2ZyYW1lKTogIEFkZCBoYW5kLWNyYWZ0ZWQgRUggZGF0YS4KKyAgICAKKyAgICAyMDA4LTExLTIxICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorICAgIAorICAgICAgICAgICAqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgc3VwcG9ydCBmb3IKKyAgICAgICAgICAgc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYgcmV0dXJuIHZhbHVlcy4KKyAgICAgICAgICAgKiBzcmMvc3BhcmMvdjguUyAoZmZpX2NhbGxfdjgpOiBMaWtld2lzZS4KKyAgICAgICAgICAgKGZmaV9jbG9zdXJlX3Y4KTogTGlrZXdpc2UuCisgICAgCisgICAgMjAwOC0wMy0yNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisgICAgCisgICAgICAgICAgICogc3JjL3NoL3N5c3YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKyAgICAgICAgICAgKiBzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorICAgIAorICAgIDIwMDgtMDMtMjYgIERhbmllbCBKYWNvYm93aXR6ICA8ZGFuQGRlYmlhbi5vcmc+CisgICAgCisgICAgICAgICAgICogc3JjL2FybS9zeXN2LlM6IEZpeCBBUk0gY29tbWVudCBtYXJrZXIuCiAKLQkqIGNvbmZpZ3VyZS5pbiAoYXJtLSotbmV0YnNkZWxmKik6IEFkZCBjb25maWd1cmF0aW9uLgotCShjb25maWd1cmUpOiBSZWdlbmVyYXRlZC4KK2NvbW1pdCAwMGZhOTcyNDMwYmIxNTM1YTRiMzRiZjAyOWViY2FkNTAwMDI3YjBjCitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgU2F0IERlYyAyNyAxNjo1OTowNSAyMDA4ICswMDAwCiAKLTIwMDMtMDQtMDQgIExvcmVuIEouIFJpdHRsZSAgPGxqcml0dGxlQGFjbS5vcmc+CisgICAgcHJvcGVybHkgZ2xvYi1tYXRjaAogCi0JKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorY29tbWl0IGY1MTc5ZTY3OTRhYzM1YWYyNmZlODZlNDY4Yjg1MDhhN2E1NzBjNTUKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBGcmkgRGVjIDI2IDE5OjA2OjI4IDIwMDggKzAwMDAKIAotMjAwMy0wMy0yMSAgWmRlbmVrIER2b3JhayAgPHJha2R2ZXJAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PgorICAgIE1hcmsgWEZBSUwgb24gbG9uZ2RvdWJsZSB0ZXN0cyBmb3IgeDg2XzY0L21pbmd3CiAKLQkqIGxpYmZmaS9pbmNsdWRlL2ZmaS5oLmluOiBEZWZpbmUgWDg2IGluc3RlYWQgb2YgWDg2XzY0IGluIDMyCi0JYml0IG1vZGUuCi0JKiBsaWJmZmkvc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOgotCVJlY2VpdmUgY2xvc3VyZSBwb2ludGVyIHRocm91Z2ggcGFyYW1ldGVyLCByZWFkIGFyZ3MgdXNpbmcKLQlfX2J1aWx0aW5fZHdhcmZfY2ZhLgotCShGRklfSU5JVF9UUkFNUE9MSU5FKTogU2VuZCBjbG9zdXJlIHJlZmVyZW5jZSB0aHJvdWdoIGVheC4KK2NvbW1pdCA4MGUyYjVhNzQ5MjA4YzhhMThmOTk0ZWM1YmVlODQ1OTRkMDUxY2M4CitBdXRob3I6IHR3YWxsIDx0d2FsbD4KK0RhdGU6ICAgTW9uIERlYyAyMiAxNToyMToxNSAyMDA4ICswMDAwCiAKLTIwMDMtMDMtMTIgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisgICAgY2xlYW4gdXAgdGVzdHMgZm9yIHdpbjY0IHVzZQogCi0JKiBjb25maWd1cmUuaW46IEF2b2lkIHRyYWlsaW5nIC8uIGluIHRvb2xleGVjbGliZGlyLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDcwNjNkOTk5NmY3NDI1NzYwOTVjN2IwZWI1MDE2YzBmOWE2NzBhZWMKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRGVjIDE5IDE2OjEzOjQ2IDIwMDggKzAwMDAKIAotMjAwMy0wMy0wMyAgQW5kcmVhcyBUb2JsZXIgPGEudG9ibGVyQHNjaHdlaXouY2g+CisgICAgVmVyc2lvbiAzLjAuOCB3aXRoIHg4Ni1zb2xhcmlzIHN1cHBvcnQKIAotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogUmVjb2RlIHRvIGZpdCBkeW5hbWljIGxpYnJhcmllcy4KK2NvbW1pdCBiZGZlYjEzZjBkZjBhNjNiMTlkNjI1OTc1MTcyMzdiNTRkOTIyMjhiCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIERlYyAxOSAxNTo0Nzo0NCAyMDA4ICswMDAwCiAKLTIwMDMtMDItMDYgIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorICAgIEJ1bXAgdG8gMy4wLjcKIAotCSogbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6Ci0JRml4IGFsaWduZW1lbnQgYnVnLCBhbGxvY2F0ZSA4IGJ5dGVzIGZvciB0aGUgcmVzdWx0LgotCSogbGliZmZpL3NyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6Ci0JTGlrZXdpc2UuCi0JKiBsaWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOgotCVVwZGF0ZSBzdGFja2ZyYW1lIGRlc2NyaXB0aW9uIGZvciBhaXgvZGFyd2luX2Nsb3N1cmUuUy4KK2NvbW1pdCA2OTIwNWRlMTdkNmFjNGMxMWQ0YmE5MmQ2YTViNDBhMGM1ZjI0NmIyCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEp1bCAyNCAxODowMzo0OCAyMDA4ICswMDAwCiAKLTIwMDMtMDItMDYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorICAgIE1hbnkgdGVzdCBmaXhlcyAoZmFpbHVyZXMgZHVlIHRvIGV4Y2Vzc2l2ZSBjb21waWxlciB3YXJuaW5ncykuCiAKLQkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEFkZCBoaWRkZW4gdmlzaWJpbGl0eQotCWF0dHJpYnV0ZS4KK2NvbW1pdCAyNjBkNTEzZmVhMDBiMzYxM2ZlOTU3YTQ0YTE1N2ZlNzJjNGNhMjllCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEp1bCAxNyAxMzoxMzo1MiAyMDA4ICswMDAwCiAKLTIwMDMtMDEtMzEgIENocmlzdGlhbiBDb3JuZWxzc2VuICA8Y2Nvcm5AY3MudHUtYmVybGluLmRlPiwKLQkgICAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKyAgICBWZXJzaW9uIDMuMC42LiAgc2gvc2g2NCBmaXhlcy4KIAotCSogY29uZmlndXJlLmluOiBBZGp1c3QgY29tbWFuZCB0byBzb3VyY2UgY29uZmlnLW1sLmluIHRvIGFjY291bnQKLQlmb3IgY2hhbmdlcyB0byB0aGUgbGliZmZpX2Jhc2VkaXIgZGVmaW5pdGlvbi4KLQkobGliZmZpX2Jhc2VkaXIpOiBSZW1vdmUgJHtzcmNkaXJ9IGZyb20gdmFsdWUgYW5kIGluY2x1ZGUgdHJhaWxpbmcKLQlzbGFzaCBpZiBub25lbXB0eS4KK2NvbW1pdCAzNzA0MDMxODc1ZmVhYmI3NGUzNjU1ZWQwM2NmZjRjMmIzYzc2YWM2CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEFwciAzIDE4OjU3OjU3IDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIFJldiAzLjAuNS4KIAotMjAwMy0wMS0yOSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgorY29tbWl0IDg0MDZmNWY0OGY3ZjU4YTFjOTgyYTkzYTk1ZDUyMWNmODJiMzI0MWYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgQXByIDMgMTg6NTc6MzQgMjAwOCArMDAwMAogCi0JKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBSZWNvZGUgdG8gZml0IHNoYXJlZCBsaWJzLgorICAgIDMuMC41CiAKLTIwMDMtMDEtMjggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorY29tbWl0IDIzYTllNzMyMTJiNjJmOTY4NGNlZGIwY2U3MGU5MmM1OWNmZGFmZmEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBXZWQgTWFyIDUgMDA6MDc6MDIgMjAwOCArMDAwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBFbmFibGUgRkZJX0NMT1NVUkVTIGZvciB4ODZfNjQuCi0JKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcuCi0JKGZmaV9jbG9zdXJlX1VOSVg2NF9pbm5lcik6IE5ldy4KLQkqIHNyYy94ODYvdW5peDY0LlMgKGZmaV9jbG9zdXJlX1VOSVg2NCk6IE5ldy4KKyAgICAyMDA4LTAzLTA0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKyAgICAgICAgICAgICAgICBCbGFrZSBDaGFmZmluCisgICAgICAgICAgICAgICAgaG9zQHRhbWFuZWdpLm9yZworICAgIAorICAgICAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmMKKyAgICAgICAgICAgICAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYworICAgICAgICAgICAgICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jCisgICAgICAgICAgICAgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogTmV3IHRlc3RzIGZyb20gQXBwbGUuCiAKLTIwMDMtMDEtMjcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorY29tbWl0IDQyOWUzN2QzYWQ2NTNlNTJlNzViZjcyNWM4ODNhYjc5ZTg1OWY4OWEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDI4IDA0OjUwOjE5IDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluICh0b29sZXhlY2RpciwgdG9vbGV4ZWNsaWJkaXIpOiBTZXQgYW5kIEFDX1NVQlNULgotCVJlbW92ZSBVU0VfTElCRElSIGNvbmRpdGlvbmFsLgotCSogTWFrZWZpbGUuYW0gKHRvb2xleGVjZGlyLCB0b29sZXhlY2xpYmRpcik6IERvbid0IG92ZXJyaWRlLgotCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBjbGlja3kKIAotMjAwMy0wMTAyNyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorY29tbWl0IDUxZTc5YzQyODM0OGMwMzMzMTRmNTRiY2IzMGY3ZTM4OGM1OWUzNDcKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDI4IDA0OjQ3OjM1IDIwMDggKzAwMDAKIAotCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfUE9XRVJQQ19BSVgpOiBGaXggdHlwby4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgIGdldGNsaWNreQogCi0yMDAzLTAxLTIyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBhZmZjYWIwNGUyODBlZmVhY2U0NWE3MmM0ZGM2MTUyYzBlNGYxYjdmCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVHVlIEZlYiAyNiAxOTowMTo1MyAyMDA4ICswMDAwCiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfQUlYKTogQWRkIEF1Z21lbnRhdGlvbiBzaXplIHRvCi0JdW53aW5kIGluZm8uCisgICAgMjAwOC0wMi0yNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisgICAgICAgICAgICAgICAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIHNyYy9hbHBoYS9vc2YuUzogQWRkIC5ub3RlLkdOVS1zdGFjayBvbiBMaW51eC4KKyAgICAgICAgICAgICogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL3g4Ni91bml4NjQuUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy94ODYvc3lzdi5TOiBMaWtld2lzZS4KKyAgICAgICAgICAgICogc3JjL3NwYXJjL3Y4LlM6IExpa2V3aXNlLgorICAgICAgICAgICAgKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy9pYTY0L3VuaXguUzogTGlrZXdpc2UuCisgICAgICAgICAgICAqIHNyYy9hcm0vc3lzdi5TOiBMaWtld2lzZS4KIAotMjAwMy0wMS0yMSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorY29tbWl0IDU5Njg5ZDU1MjJjMTU5YTNhYzk2N2FkYjZiODkxY2Y1ZjIyYzg5MGYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgRmViIDI2IDE3OjQwOjUxIDIwMDggKzAwMDAKIAotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEFkZCB1bndpbmQgaW5mby4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorICAgIDIwMDgtMDItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgICAgICAgICAgICAgIFRob21hcyBIZWxsZXIgIDx0aGVsbGVyQGN0eXBlcy5vcmc+CisgICAgCisgICAgICAgICAgICAqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpOiBDaGFuZ2UgQysrIGNvbW1lbnQgdG8gQworICAgICAgICAgICAgY29tbWVudC4KIAotMjAwMy0wMS0xNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+Citjb21taXQgYjEzYzg0Y2Y0NjY4ODI4ZmY4NDI5YmE0YTJmOTRjZDFlYjU3NGFlMAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBGZWIgMjYgMTc6Mzg6MTUgMjAwOCArMDAwMAogCi0JKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2FyZ3MpOiBDaGVjayBmb3Igdm9pZCByZXR2YWwuCi0JKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCi0JKiBzcmMveDg2L3VuaXg2NC5TOiBBZGQgdW53aW5kIGluZm8uCisgICAgMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5vcmc+CisgICAgICAgICAgICAgICAgVGhvbWFzIEhlbGxlciA8dGhlbGxlckBjdHlwZXMub3JnPgorICAgIAorICAgICAgICAgICAgKiBpbmNsdWRlL2ZmaS5oLmluOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KIAotMjAwMy0wMS0xNCAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgorY29tbWl0IDI2NTI4OWY2NzlmZmQyNGE4OGFlMWFhMmNlZjBlNGFhMTQ3MDNjZDgKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUdWUgRmViIDI2IDE3OjM0OjM2IDIwMDggKzAwMDAKIAotCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IE9ubHkgdXNlIGZmaV9jbG9zdXJlcyBpZiB0aG9zZSBhcmUKLQlzdXBwb3J0ZWQuCisgICAgMjAwOC0wMi0yNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHNwaW5kYXp6bGUub3JnPgorICAgIAorICAgICAgICAgICAgKiBzcmMvYWxwaGEvZmZpLmM6IENoYW5nZSB2b2lkICgqKSgpIHRvIHZvaWQgKCopKHZvaWQpLgorICAgICAgICAgICAgc3JjL2FscGhhL29zZi5TLCBzcmMvYXJtL2ZmaS5jLCBzcmMvZnJ2L2ZmaS5jLCBzcmMvaWE2NC9mZmkuYywKKyAgICAgICAgICAgIHNyYy9pYTY0L3VuaXguUywgc3JjL2phdmFfcmF3X2FwaS5jLCBzcmMvbTMyci9mZmkuYywKKyAgICAgICAgICAgIHNyYy9taXBzL2ZmaS5jLCBzcmMvcGEvZmZpLmMsIHNyYy9wYS9ocHV4MzIuUywgc3JjL3BhL2xpbnV4LlMsCisgICAgICAgICAgICBzcmMvcG93ZXJwYy9mZmkuYywgc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jLCBzcmMvcmF3X2FwaS5jLAorICAgICAgICAgICAgc3JjL3MzOTAvZmZpLmMsIHNyYy9zaC9mZmkuYywgc3JjL3NoNjQvZmZpLmMsIHNyYy9zcGFyYy9mZmkuYywKKyAgICAgICAgICAgIHNyYy94ODYvZmZpLmMsIHNyYy94ODYvdW5peDY0LlMsIHNyYy94ODYvZGFyd2luNjQuUyw+ICAgICAgICAgc3JjL3g4Ni9mZmk2NC5jOiBEaXR0by4KIAotMjAwMy0wMS0xMyBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCBmYjUwMzZjZDZkMGY5MDk5MThlOTBmN2QyZDlmZDgwZDQ2NjgyZDVkCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEZlYiAyNCAxNzoyNToyNSAyMDA4ICswMDAwCiAKLQkqIGxpYmZmaS9zcmMvZmZpdGVzdC5jCi0JIGFkZCBjbG9zdXJlIHRlc3RjYXNlcworICAgIGZpeCBkYXRlCiAKLTIwMDMtMDEtMTMgS2V2aW4gQi4gSGVuZHJpY2tzIDxraGVuZHJpY2tzQGl2ZXkudXdvLmNhPgorY29tbWl0IDQwYmVjMTA4ZTdkMDE4MWU2Yzk5MjhhYTdhMzMxODdiY2MwZjNkNmYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gRmViIDI0IDE3OjI1OjAyIDIwMDggKzAwMDAKIAotCSogbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jCi0JIGZpeCBhbGlnbm1lbnQgYnVnIGZvciBmbG9hdCAoNCBieXRlIGFsaWduZWQgaXNvIDggYnl0ZSkKKyAgICBOZXcgcmVsZWFzZQogCi0yMDAzLTAxLTA5ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KK2NvbW1pdCBiOTIyMDQ4ZmE4MmVhMTA5YTRhZjI2OWVlNDdiYmMyYTU4NmJiYWMyCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEZlYiAyNCAxNzoyNDowMCAyMDA4ICswMDAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogUmVtb3ZlIFJDUyB2ZXJzaW9uIHN0cmluZy4KLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBSZW1vdmUgUkNTIHZlcnNpb24gc3RyaW5nLgorICAgIDIwMDgtMDItMjQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBzcGluZGF6emxlLm9yZz4KKyAgICAKKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBBY2NlcHQgb3BlbmJzZCosIG5vdCBqdXN0IG9wZW5ic2QuCisgICAgICAgICAgICBCdW1wIHZlcnNpb24gdG8gMy4wLjQuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKyAgICAgICAgICAgICogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisgICAgICAgICAgICAqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KIAotMjAwMy0wMS0wMyAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorY29tbWl0IGFmZmNhNGI5MmQwNmU1NTU0Nzg0YzdlOWIyMzMwMjllZjgzZjdkOGEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDIyIDIxOjUzOjI5IDIwMDggKzAwMDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIGNsb3N1cmUgZGVmaW5lcyBmb3IgU1BBUkMsIFNQQVJDNjQuCi0JKiBzcmMvZmZpdGVzdC5jIChtYWluKTogVXNlIHN0YXRpYyBzdG9yYWdlIGZvciBjbG9zdXJlLgotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlLCBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcik6IE5ldy4KLQkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2xvc3VyZV92OCk6IE5ldy4KLQkqIHNyYy9zcGFyYy92OS5TIChmZmlfY2xvc3VyZV92OSk6IE5ldy4KKyAgICBzeW5jIHJlYWRtZSB3aXRoIHdlYiBwYWdlLgogCi0yMDAyLTExLTEwICBSYW5qaXQgTWF0aGV3IDxybWF0aGV3QGhvdG1haWwuY29tPgorY29tbWl0IDNlNTNkODc1MmVhNzQ4NTliNGM2NGZiYmY5MzVlNjJhOTM3YzRkNzgKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDIyIDIxOjUyOjM4IDIwMDggKzAwMDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkZWQgRkZJX1NURENBTEwgZmZpX3R5cGUKLQkgIGVudW1lcmF0aW9uIGZvciBYODZfV0lOMzIuCi0JKiBzcmMveDg2L3dpbjMyLlM6IEFkZGVkIGZmaV9jYWxsX1NURENBTEwgZnVuY3Rpb24KLQkgIGRlZmluaXRpb24uCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfY2FsbC9mZmlfcmF3X2NhbGwpOiBBZGRlZAotCSAgc3dpdGNoIGNhc2VzIGZvciByZWNvZ25pc2luZyBGRklfU1REQ0FMTCBhbmQKLQkgIGNhbGxpbmcgZmZpX2NhbGxfU1REQ0FMTCBpZiB0YXJnZXQgaXMgWDg2X1dJTjMyLgotCSogc3JjL2ZmaXRlc3QuYyAobXlfc3RkY2FsbF9zdHJsZW4vc3RkY2FsbF9tYW55KToKLQkgIHN0ZGNhbGwgdmVyc2lvbnMgb2YgdGhlICJteV9zdHJsZW4iIGFuZCAibWFueSIKLQkgIHRlc3QgZnVuY3Rpb25zIChmb3IgWDg2X1dJTjMyKS4KLQkgIEFkZGVkIHRlc3QgY2FzZXMgdG8gdGVzdCBzdGRjYWxsIGludm9jYXRpb24gdXNpbmcKLQkgIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICBOZXcgcmVsZWFzZQogCi0yMDAyLTEyLTAyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KK2NvbW1pdCA0ZDkyZjZjOGU3OGZlMDg0YmU2NWYzZThiNThiODU5OTAxYmE3OTZkCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAyMiAyMTo0OTo0NiAyMDA4ICswMDAwCiAKLQkqIHNyYy9zaC9zeXN2LlM6IEFkZCBEV0FSRjIgdW53aW5kIGluZm8uCisgICAgMjAwOC0wMi0yMiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisgICAgCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC4zLgorICAgICAgICAgICAgKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisgICAgICAgICAgICAqIGxpYnRvb2wtdmVyc2lvbjogSW5jcmVtZW50IHJldmlzaW9uLgorICAgICAgICAgICAgKiBSRUFETUU6IFVwZGF0ZSBmb3IgbmV3IHJlbGVhc2UuICBDbGVhbiB1cCB0ZXN0IGRvY3MuCiAKLTIwMDItMTEtMjcgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KK2NvbW1pdCAwZTE4NWZhMTFhMDFmODE2ODI0YmEyNjg3ZWQzNzE1YWI2MjE5YmVmCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAyMiAyMTo0MzoxOCAyMDA4ICswMDAwCiAKLQkqIHNyYy9zMzkwL3N5c3YuUyAoLmVoX2ZyYW1lIHNlY3Rpb24pOiBNYWtlIHNlY3Rpb24gcmVhZC1vbmx5LgorICAgIFVwZGF0ZSBjb25maWd1cmUgc2NyaXB0LgogCi0yMDAyLTExLTI2ICBKaW0gV2lsc29uICA8d2lsc29uQHJlZGhhdC5jb20+Citjb21taXQgZjczOTg2YmQyMTFjZmJiYWE1OTNkMTMwOTUwNGQwZGM2ODYyNjE5MQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMjIgMjE6NDA6NTMgMjAwOCArMDAwMAogCi0JKiBzcmMvdHlwZXMuYyAoRkZJX1RZUEVfUE9JTlRFUik6IEhhcyBzaXplIDggb24gSUE2NC4KKyAgICAyMDA4LTAyLTIyICBCam9lcm4gS29lbmlnICA8YmtvZW5pZ0BhbHBoYS10aWVyY2hlbi5kZT4KKyAgICAgICAgICAgICAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorICAgIAorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEFkZCBhbWQ2NC0qLWZyZWVic2QqIHRhcmdldC4KKyAgICAgICAgICAgICogY29uZmlndXJlOiBSZWdlbmVyYXRlLgogCi0yMDAyLTExLTIzICBILkouIEx1IDxoamxAZ251Lm9yZz4KK2NvbW1pdCAwMjA4ZjY4ZmU1ZGUzMGMzM2U3ZjcwZWJjMjgxNjM1OTE3MDEzZjVhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAyMiAyMToxNTo0NCAyMDA4ICswMDAwCiAKLQkqIGFjaW5jbHVkZS5tNDogQWRkIGR1bW15IEFNX1BST0dfTElCVE9PTC4KLQlJbmNsdWRlIC4uL2NvbmZpZy9hY2Nyb3NzLm00LgotCSogYWNsb2NhbC5tNDsgUmVidWlsZC4KLQkqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisgICAgMjAwOC0wMi0yMiAgVGhvbWFzIEhlbGxlciA8dGhlbGxlckBjdHlwZXMub3JnPgorICAgIAorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEFkZCB4ODYgT3BlbkJTRCBzdXBwb3J0LgorICAgICAgICAgICAgKiBjb25maWd1cmU6IFJlYnVpbHQuCiAKLTIwMDItMTEtMTUgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KK2NvbW1pdCAwMWFkYjBlNjM4YTg2Y2YwZDVlNjY4ZWQ4ZTA4YmU5YjBjZDI1MDVmCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAyMSAxNjoxNzoyNiAyMDA4ICswMDAwCiAKLQkqIHNyYy9zMzkwL3N5c3YuUyAoLmVoX2ZyYW1lIHNlY3Rpb24pOiBBZGFwdCB0byBwY3JlbCBGREUgZW5jb2RpbmcuCisgICAgRml4IFJFQURNRS4KIAotMjAwMi0xMS0xMSAgREogRGVsb3JpZSAgPGRqQHJlZGhhdC5jb20+Citjb21taXQgMWVkZDQ1NjMyMjU5ODFhMTRmN2Q0ZmI5OTE5YjFlZDg4ZTM4MDgyZgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMjEgMTM6Mzk6MDEgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW46IExvb2sgZm9yIGNvbW1vbiBmaWxlcyBpbiB0aGUgcmlnaHQgcGxhY2UuCisgICAgMy4wLjIKIAotMjAwMi0xMC0wOCAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorY29tbWl0IGM5YjU0MjgwMDg2NGUyMjA0ZGI2ZTgzZjM4NDNhMTc4MTNiYTYxNjUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDIxIDEzOjM2OjQzIDIwMDggKzAwMDAKIAotCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkpOiBJbnRlcnByZXQKLQlyYXcgZGF0YSBhcyBfSnZfd29yZCB2YWx1ZXMsIG5vdCBmZmlfcmF3LgotCShmZmlfamF2YV9wdHJhcnJheV90b19yYXcpOiBMaWtld2lzZS4KLQkoZmZpX2phdmFfcnZhbHVlX3RvX3Jhdyk6IE5ldyBmdW5jdGlvbi4KLQkoZmZpX2phdmFfcmF3X2NhbGwpOiBDYWxsIGl0LgotCShmZmlfamF2YV9yYXdfdG9fcnZhbHVlKTogTmV3IGZ1bmN0aW9uLgotCShmZmlfamF2YV90cmFuc2xhdGVfYXJncyk6IENhbGwgaXQuCi0JKiBzcmMvZmZpdGVzdC5jIChjbG9zdXJlX3Rlc3RfZm4pOiBJbnRlcnByZXQgcmV0dXJuIHZhbHVlCi0JYXMgZmZpX2FyZywgbm90IGludC4KLQkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBtaXNzaW5nCi0JRkZJX1RZUEVfUE9JTlRFUiBjYXNlLgotCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLiAgQWxzbywgYXNzdW1lIHJldHVybgotCXZhbHVlcyBleHRlbmRlZCB0byB3b3JkIHNpemUuCisgICAgYWRkIG1pc3NpbmcgZmlsZQogCi0yMDAyLTEwLTAyICBBbmRyZWFzIEphZWdlciAgPGFqQHN1c2UuZGU+Citjb21taXQgZDVmYTU2MzNkNWM4ZDNjMjEyYTIyNjdjZmEzOGZiYTQwOTFiYWEyYworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMjEgMTM6MzY6MTkgMjAwOCArMDAwMAogCi0JKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUmVtb3ZlIGRlYnVnIG91dHB1dC4KKyAgICAyMDA4LTAyLTIxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjIuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKyAgICAgICAgICAgICogbGlidG9vbC12ZXJzaW9uOiBJbmNyZW1lbnQgcmV2aXNpb24uCisgICAgICAgICAgICAqIFJFQURNRTogVXBkYXRlIGZvciBuZXcgcmVsZWFzZS4KKyAgICAKKyAgICAyMDA4LTAyLTIxICBCasO2cm4gS8O2bmlnIDxia29lbmlnQGFscGhhLXRpZXJjaGVuLmRlPgorICAgIAorICAgICAgICAgICAgKiBzcmMveDg2L2ZyZWVic2QuUzogTmV3IGZpbGUuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogQWRkIHg4NiBGcmVlQlNEIHN1cHBvcnQuCisgICAgICAgICAgICAqIE1ha2VmaWxlLmFtOiBEaXR0by4KIAotMjAwMi0xMC0wMSAgQm8gVGhvcnNlbiAgPGJvQHNtZXRhbmEuc3VzZS5kZT4KK2NvbW1pdCBhYzM1YmZjNmZjYWRkODg4MGMxZWZjZTM2NzI0ODIwZjkwNzRiMzE4CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU2F0IEZlYiAxNiAwMTowMzo1NiAyMDA4ICswMDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IEZpeCBpMzg2IHdpbjMyIGNvbXBpbGF0aW9uLgorICAgIFVwZGF0ZWQKIAotMjAwMi0wOS0zMCAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorY29tbWl0IGY3OTQyOTc1ZmVlN2IwMTYyNjQ3ZGQ3OWUyNjUyNjE1YjczN2U5OGUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTYXQgRmViIDE2IDAxOjAyOjAwIDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluOiBBZGQgczM5MHgtKi1saW51eC0qIHRhcmdldC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvZmZpLmguaW46IERlZmluZSBTMzkwWCBmb3IgczM5MHggdGFyZ2V0cy4KLQkoRkZJX0NMT1NVUkVTKTogRGVmaW5lIGZvciBzMzkwL3MzOTB4LgotCShGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCi0JKEZGSV9OQVRJVkVfUkFXX0FQSSk6IExpa2V3aXNlLgotCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IERvIG5vdCBjb21wdXRlIHN0YWNrIHNwYWNlIGZvciBzMzkwLgotCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBVc2UgOC1ieXRlIHBvaW50ZXJzIG9uIHMzOTB4LgotCSogc3JjL3MzOTAvZmZpLmM6IE1ham9yIHJld29yayBvZiBleGlzdGluZyBjb2RlLiAgQWRkIHN1cHBvcnQgZm9yCi0JczM5MHggdGFyZ2V0cy4gIEFkZCBjbG9zdXJlIHN1cHBvcnQuCi0JKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgorICAgIDIwMDgtMDItMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorICAgIAorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAzLjAuMS4KKyAgICAgICAgICAgICogY29uZmlndXJlLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBsaWJ0b29sLXZlcnNpb246IEluY3JlbWVudCByZXZpc2lvbi4KKyAgICAgICAgICAgICogUkVBRE1FOiBVcGRhdGUgZm9yIG5ldyByZWxlYXNlLgorICAgIAorICAgIDIwMDgtMDItMTUgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisgICAgCisgICAgICAgICAgICAqIHNyYy9taXBzL2ZmaS5jOiBSZW1vdmUgZXh0cmEgJz4nIGZyb20gaW5jbHVkZSBkaXJlY3RpdmUuCisgICAgICAgICAgICAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBVc2UgY2xlYXJfbG9jYXRpb24gaW5zdGVhZCBvZiB0cmFtcC4KIAotMjAwMi0wOS0yOSAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+Citjb21taXQgNTlhYTZiYjFiZmM4NmE2MTBhYzFhOGIxMjM0NDNlZmQ3NTg1NGRkMQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMjA6NTI6MjYgMjAwOCArMDAwMAogCi0JKiBzcmMvYXJtL3N5c3YuUzogRml4IHR5cG8uCisgICAgQWRkIG1vcmUgcGxhdGZvcm1zLgogCi0yMDAyLTA5LTI4ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KK2NvbW1pdCA0NWE0NWFiOTkwNzQ0NDhiZTBhZTFhOGQyYWRlNTBkMjhiNjBmOGRlCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAxOToxNjozNiAyMDA4ICswMDAwCiAKLQkqIHNyYy9hcm0vc3lzdi5TOiBJZiB3ZSBkb24ndCBoYXZlIG1hY2hpbmUvYXNtLmggYW5kIHRoZSBwcmUtcHJvY2Vzc29yCi0JaGFzIGRlZmluZWQgX19VU0VSX0xBQkVMX1BSRUZJWF9fLCB0aGVuIHVzZSBpdCBpbiBDTkFNRS4KLQkoZmZpX2NhbGxfU1lTVik6IEhhbmRsZSBzb2Z0LWZsb2F0LgorICAgIDMuMCBub3RlcwogCi0yMDAyLTA5LTI3ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KK2NvbW1pdCA0ZGI3NGNiZWE4ODhjOWYxMjUxYjg1YmFmMDBkOTliODNkM2I5OTRkCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAxOToxMDoyNiAyMDA4ICswMDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IEZpeCBtdWx0aWxpYiB4ODYtNjQgc3VwcG9ydC4KKyAgICBVcGRhdGUKIAotMjAwMi0wOS0yMiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgorY29tbWl0IGMzZTExMDFmZmFiZjQ0ZDhhMmVlNDZlMDNiYTlhYjU4MjA1MGE4MjUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDE4OjQzOjQwIDIwMDggKzAwMDAKIAotCSogTWFrZWZpbGUuYW0gKGFsbC1tdWx0aSk6IEZpeCBtdWx0aWxpYiBwYXJhbGxlbCBidWlsZC4KKyAgICAyMDA4LTAyLTE1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKyAgICAKKyAgICAgICAgICAgICogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMy4wLjAsCisgICAgICAgICAgICAqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KKyAgICAKKyAgICAyMDA4LTAyLTE1ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorICAgIAorICAgICAgICAgICAgKiBzcmMvbWlwcy9mZmkuYyAoVVNFX19CVUlMVElOX19fQ0xFQVJfQ0FDSEUpOgorICAgICAgICAgICAgRGVmaW5lIChjb25kaXRpb25hbGx5KSwgYW5kIHVzZSBpdCB0byBpbmNsdWRlIGNhY2hlY3RsLmguCisgICAgICAgICAgICAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGaXggY2FjaGUgZmx1c2hpbmcuCisgICAgICAgICAgICAqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChfQUJJTjMyLCBfQUJJNjQsIF9BQklPMzIpOiBEZWZpbmUuCiAKLTIwMDItMDctMTkgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorY29tbWl0IDdlMGNjMTJlOTIzM2FkMjg1ZGI0MWNlOGRiZGRhNjFlZDJhN2ZiMDYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDE1OjUxOjAzIDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluIChzaFszNF0qLSotbGludXgqKTogQWRkIGJyYWNrZXRzLgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorICAgIE5ldyByZWxlYXNlCiAKLTIwMDItMDctMTggIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorY29tbWl0IDJkN2RjODg1ZWM0MGQ1Mzg2NmYyOTk4NGQ1OTU1MTE5NDJjOGI2ODYKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDE1IDE1OjMwOjI2IDIwMDggKzAwMDAKIAotCSogTWFrZWZpbGUuYW06IEFkZCBTSCBzdXBwb3J0LgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCi0JKiBjb25maWd1cmUuaW4gKHNoLSotbGludXgqLCBzaFszNF0qLSotbGludXgqKTogQWRkIHRhcmdldC4KLQkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBTSCBzdXBwb3J0LgotCSogc3JjL3NoL2ZmaS5jOiBOZXcgZmlsZS4KLQkqIHNyYy9zaC9zeXN2LlM6IE5ldyBmaWxlLgotCSogc3JjL3R5cGVzLmM6IEFkZCBTSCBzdXBwb3J0LgorICAgICAgICAgICAgKiBtYW4vZmZpX2NhbGwuMywgbWFuL2ZmaV9wcmVwX2NpZi4zLCBtYW4vZmZpLjM6CisgICAgICAgICAgICBVcGRhdGUgZGF0ZXMgYW5kIHJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byBmZmlfcHJlcF9jbG9zdXJlLgorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjkuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KIAotMjAwMi0wNy0xNiAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+Citjb21taXQgYTA1MjVmMDNlZWFhZWQzM2IxZWFjODBlMGMwMTY0NTVjZWUzNjE1ZAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMTU6MTQ6MzAgMjAwOCArMDAwMAogCi0JKiBzcmMveDg2L2ZmaTY0LmM6IE5ldyBmaWxlIHRoYXQgYWRkcyB4ODYtNjQgc3VwcG9ydC4KLQkqIHNyYy94ODYvdW5peDY0LlM6IE5ldyBmaWxlIHRoYXQgaGFuZGxlcyBhcmd1bWVudCBzZXR1cCBmb3IKLQl4ODYtNjQuCi0JKiBzcmMveDg2L3N5c3YuUzogRG9uJ3QgdXNlIHRoaXMgb24geDg2LTY0LgotCSogc3JjL3g4Ni9mZmkuYzogRG9uJ3QgdXNlIHRoaXMgb24geDg2LTY0LgotCVJlbW92ZSB1bnVzZWQgdmFycy4KLQkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBEb24ndCBkbyBzdGFjayBzaXplIGNhbGN1bGF0aW9uCi0JZm9yIHg4Ni02NC4KLQkqIHNyYy9mZml0ZXN0LmMgKHN0cnVjdDYpOiBOZXcgdGVzdCB0aGF0IHRlc3RzIGEgc3BlY2lhbCBjYXNlIGluCi0JdGhlIHg4Ni02NCBBQkkuCi0JKHN0cnVjdDcpOiBMaWtld2lzZS4KLQkoc3RydWN0OCk6IExpa2V3aXNlLgotCShzdHJ1Y3Q5KTogTGlrZXdpc2UuCi0JKGNsb3N1cmVfdGVzdF9mbik6IFNpbGVuY2Ugd2FybmluZyBhYm91dCB0aGlzIHdoZW4gaXQncyBub3QgdXNlZC4KLQkobWFpbik6IEFkZCB0aGUgbmV3IHRlc3RzLgotCShtYWluKTogRml4IGEgY291cGxlIG9mIHdyb25nIGNhc3RzIGFuZCBzaWxlbmNlIHNvbWUgY29tcGlsZXIgd2FybmluZ3MuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgeDg2LTY0IEFCSSBkZWZpbml0aW9uLgotCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCi0JKiBNYWtlZmlsZS5hbTogQWRkIHg4Ni02NCBzdXBwb3J0LgotCSogY29uZmlndXJlLmluOiBMaWtld2lzZS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlOiBMaWtld2lzZS4KKyAgICBOZXcgcmVsZWFzZS4KIAotMjAwMi0wNi0yNCAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+Citjb21taXQgMmIzMGRmYjMxNDZlZTI2YWQ5NTZkMDBlZTA1ZWI4MzVjYTFhOTViNAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMTU6MTI6NDMgMjAwOCArMDAwMAogCi0JKiBzcmMvdHlwZXMuYzogTWVyZ2Ugc2V0dGluZ3MgZm9yIHNpbWlsYXIgYXJjaGl0ZWN0dXJlcy4KLQlBZGQgeDg2LTY0IHNpemVzIGFuZCBhbGlnbm1lbnRzLgorICAgICAgICAgICAgKiBtYW4vZmZpX3ByZXBfY2xvc3VyZS4zOiBEZWxldGUuCisgICAgICAgICAgICAqIG1hbi9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IFJlbW92ZSBmZmlfcHJlcF9jbG9zdXJlLjMuCisgICAgICAgICAgICAobWFuX01BTlMpOiBEaXR0by4KKyAgICAgICAgICAgICogbWFuL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IEJ1bXAgdmVyc2lvbiB0byAyLjk5LjguCisgICAgICAgICAgICAqIGNvbmZpZ3VyZSwgZG9jL3N0YW1wLXZ0aSwgZG9jL3ZlcnNpb24udGV4aTogUmVidWlsdC4KIAotMjAwMi0wNi0yMyAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+Citjb21taXQgYmY0MWU2NDg0MGViY2I2Y2MzMWE2ZjAyODI1M2MxZmRlODI3MDVkOAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMTUgMDE6NTY6NTAgMjAwOCArMDAwMAogCi0JKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHVudXNlZCB2YXJzLgotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3Y4KTogTGlrZXdpc2UuCi0JKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgotCSogc3JjL202OGsvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KKyAgICBVcGRhdGUuCiAKLTIwMDItMDctMTggIEguSi4gTHUgIChoamxAZ251Lm9yZykKK2NvbW1pdCA0ZDM5ZGRlZTY3N2JiYjYxZDYyMTg5M2I5MWUxMWVhYzVlN2M0YWY3CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAwMToyNDowNiAyMDA4ICswMDAwCiAKLQkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX01JUFNfTElOVVgpOiBOZXcuCi0JKGxpYmZmaV9sYV9TT1VSQ0VTKTogU3VwcG9ydCBNSVBTX0xJTlVYLgotCShsaWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyk6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorICAgICogY29uZmlndXJlLmFjOiBCdW1wIHZlcnNpb24gdG8gMi45OS43LgorICAgICAgICAgICAgKiBjb25maWd1cmUsIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisgICAgICAgICAgICAqIGluY2x1ZGUvZmZpLmguaW4gTElDRU5TRSBzcmMvZGVidWcuYyBzcmMvY2xvc3VyZXMuYworICAgICAgICAgICAgICBzcmMvZmZpdGVzdC5jIHNyYy9zMzkwL3N5c3YuUyBzcmMvczM5MC9mZml0YXJnZXQuaAorICAgICAgICAgICAgICBzcmMvdHlwZXMuYyBzcmMvbTY4ay9mZml0YXJnZXQuaCBzcmMvcmF3X2FwaS5jIHNyYy9mcnYvZmZpLmMKKyAgICAgICAgICAgICAgc3JjL2Zydi9mZml0YXJnZXQuaCBzcmMvc2gvZmZpLmMgc3JjL3NoL3N5c3YuUworICAgICAgICAgICAgICBzcmMvc2gvZmZpdGFyZ2V0Lmggc3JjL3Bvd2VycGMvZmZpdGFyZ2V0Lmggc3JjL3BhL2ZmaS5jCisgICAgICAgICAgICAgIHNyYy9wYS9mZml0YXJnZXQuaCBzcmMvcGEvbGludXguUyBzcmMvamF2YV9yYXdfYXBpLmMKKyAgICAgICAgICAgICAgc3JjL2NyaXMvZmZpdGFyZ2V0Lmggc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUworICAgICAgICAgICAgICBzcmMveDg2L3VuaXg2NC5TIHNyYy94ODYvd2luMzIuUyBzcmMveDg2L2ZmaXRhcmdldC5oCisgICAgICAgICAgICAgIHNyYy94ODYvZmZpNjQuYyBzcmMveDg2L2Rhcndpbi5TIHNyYy9pYTY0L2ZmaS5jCisgICAgICAgICAgICAgIHNyYy9pYTY0L2ZmaXRhcmdldC5oIHNyYy9pYTY0L2lhNjRfZmxhZ3MuaCBzcmMvaWE2NC91bml4LlMKKyAgICAgICAgICAgICAgc3JjL3NwYXJjL2ZmaS5jIHNyYy9zcGFyYy92OS5TIHNyYy9zcGFyYy9mZml0YXJnZXQuaAorICAgICAgICAgICAgICBzcmMvc3BhcmMvdjguUyBzcmMvYWxwaGEvZmZpLmMgc3JjL2FscGhhL2ZmaXRhcmdldC5oCisgICAgICAgICAgICAgIHNyYy9hbHBoYS9vc2YuUyBzcmMvc2g2NC9mZmkuYyBzcmMvc2g2NC9zeXN2LlMKKyAgICAgICAgICAgICAgc3JjL3NoNjQvZmZpdGFyZ2V0Lmggc3JjL21pcHMvZmZpLmMgc3JjL21pcHMvZmZpdGFyZ2V0LmgKKyAgICAgICAgICAgICAgc3JjL21pcHMvbjMyLlMgc3JjL21pcHMvbzMyLlMgc3JjL2FybS9mZmkuYyBzcmMvYXJtL3N5c3YuUworICAgICAgICAgICAgICBzcmMvYXJtL2ZmaXRhcmdldC5oIHNyYy9wcmVwX2NpZi5jOiBVcGRhdGUgbGljZW5zZSB0ZXh0LgogCi0JKiBjb25maWd1cmUuaW4gKG1pcHM2NCotKik6IFNraXAuCi0JKG1pcHMqLSotbGludXgqKTogTmV3LgotCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KK2NvbW1pdCBkNThiMDMyYjQxYTEyYmQzZDcyMTQ4ZGE2ODIyYWI1OWRkNjk4ZmY5CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAwMDo1OToyNSAyMDA4ICswMDAwCiAKLQkqIHNyYy9taXBzL2ZmaS5jOiBJbmNsdWRlIDxzZ2lkZWZzLmg+LgorICAgIE5ldyByZWxlYXNlCiAKLTIwMDItMDYtMDYgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KK2NvbW1pdCA5MWU1NDc4ZGY2ZDVhYzYzZWZiYjEwZjAyNTgwN2I0NjA2YWZhYjU2CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAwMDo1MDozMCAyMDA4ICswMDAwCiAKLQkqIHNyYy9zMzkwL3N5c3YuUzogU2F2ZS9yZXN0b3JlICVyNi4gIEFkZCBEV0FSRi0yIHVud2luZCBpbmZvLgorICAgIFVwZGF0ZSBzdXBwb3J0ZWQgcGxhdGZvcm1zLiAgQnVtcCB2ZXJzaW9uLgogCi0yMDAyLTA1LTI3ICBSb2dlciBTYXlsZSAgPHJvZ2VyQGV5ZXNvcGVuLmNvbT4KK2NvbW1pdCBiZDA3NjhmODc3YzhmN2ZkMGQzNmFmMjE5MWIyMDNkNGQwNTdiMWNlCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgRnJpIEZlYiAxNSAwMDo0NTozMyAyMDA4ICswMDAwCiAKLQkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgcmVmZXJlbmNlIHRvIGF2bi4KKyAgICAqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDIuOTkuNS4KKyAgICAgICAgICAgICogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBkYXJ3aW42NC5TCisgICAgICAgICAgICAqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFJlbW92ZSBsaWJzdGRjKysgYml0cyBmcm9tIEdDQyB0cmVlLgorICAgICAgICAgICAgKiBMSUNFTlNFOiBVcGRhdGUgV0FSUkFOVFkuCiAKLTIwMDItMDUtMjcgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorY29tbWl0IDQ5ZDM0NWY3NjdiZDJjZmVlOTUxYmNlYWFiNmExYTA3OTg2Y2YyOTMKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDIzOjQzOjI3IDIwMDggKzAwMDAKIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYW5kCi0JZml4IGZvcm1hdHRpbmcuCisgICAgdXBkYXRlIGxpY2Vuc2UgcmVmZXJlbmNlCiAKLTIwMDItMDUtMTMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KK2NvbW1pdCAxMmFjNDhmYzc5YjUxNWRiN2M5YWNjZDlmY2FhODdiMGRjZWZjY2RiCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAyMzo0MjowOCAyMDA4ICswMDAwCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfY2xvc3VyZSk6IERlY2xhcmUgZmQgYXQKLQliZWdpbm5pbmcgb2YgZnVuY3Rpb24gKGZvciBvbGRlciBhcHBsZSBjYykuCisgICAgVXBkYXRlIFdBUlJBTlRZCiAKLTIwMDItMDUtMDggIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorY29tbWl0IDZiOTFjNDFkYTg3ZTc4NTUyZjI5OTBkZmM1MDRhMGEzMzQ5ZjM0MGIKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDIzOjM4OjI3IDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluIChPUklHSU5BTF9MRF9GT1JfTVVMVElMSUJTKTogUHJlc2VydmUgTEQgYXQKLQlzY3JpcHQgZW50cnksIGFuZCBzZXQgTEQgdG8gaXQgd2hlbiBjb25maWd1cmluZyBtdWx0aWxpYnMuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgZml4IHRhcmJhbGwgcmVmZXJlbmNlCiAKLTIwMDItMDUtMDUgIEphc29uIFRob3JwZSAgPHRob3JwZWpAd2FzYWJpc3lzdGVtcy5jb20+Citjb21taXQgMmI1OTU3OWUzNTMzMzM0YmVlNDc4OGUwNzZiNGU1MjBjMmFiNTE4YworQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMjM6MzU6NTggMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW4gKHNwYXJjNjQtKi1uZXRic2QqKTogQWRkIHRhcmdldC4KLQkoc3BhcmMtKi1uZXRic2RlbGYqKTogTGlrZXdpc2UuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRmlyc3QgdXBkYXRlIGluIDUgeWVhcnMhCiAKLTIwMDItMDQtMjggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+Citjb21taXQgNmNiZGYzZjNhMzc3N2E5MzM4MmEyZDUwOGRkZWYxYzM1M2ZmMDk1NQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMjI6NDQ6MDYgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZTogRml4IFNQQVJDIHRlc3QgaW4gcHJldmlvdXMgY2hhbmdlLgorICAgIEZpeCAucGMgZmlsZSBidWcgYW5kIGJ1bXAgdmVyc2lvbgogCi0yMDAyLTA0LTI5ICBHZXJoYXJkIFRvbm4gIDxHZXJoYXJkVG9ubkBzd29sLmRlPgorY29tbWl0IDFkMWRjODExMDRiMjA5ZGYzY2ZlZjA4NDA3MzVjNTllZmFlMmY2NTUKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDIyOjAzOjM3IDIwMDggKzAwMDAKIAotCSogTWFrZWZpbGUuYW06IEFkZCBMaW51eCBmb3IgUy8zOTAgc3VwcG9ydC4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlLmluOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCi0JKiBzcmMvczM5MC9mZmkuYzogTmV3IGZpbGUgZnJvbSBsaWJmZmkgQ1ZTIHRyZWUuCi0JKiBzcmMvczM5MC9zeXN2LlM6IE5ldyBmaWxlIGZyb20gbGliZmZpIENWUyB0cmVlLgorICAgIEFkZCBtYW4gZmlsZXMgYW5kIGluZm8gZmlsZS4gVXBkYXRlIFJFQURNRS4gIFRhZyBhcyAyLjk5LjMuCiAKLTIwMDItMDQtMjggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorY29tbWl0IGYwNDVhMjM2N2Y3OTNmYThiMDE1MzRjZjJlMjViY2M0NmFmYzhmYTEKK0F1dGhvcjogdHJvbWV5IDx0cm9tZXk+CitEYXRlOiAgIFRodSBGZWIgMTQgMjA6NDY6NTcgMjAwOCArMDAwMAogCi0JKiBjb25maWd1cmUuaW4gKEhBVkVfQVNfU1BBUkNfVUFfUENSRUwpOiBDaGVjayBmb3Igd29ya2luZwotCSVyX2Rpc3AzMigpLgotCSogc3JjL3NwYXJjL3Y4LlM6IFVzZSBpdC4KLQkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIE1vdmUgZW50cnkgZnJvbSBDaGFuZ2VMb2cgdG8gQ2hhbmdlTG9nLmxpYmZmaQogCi0yMDAyLTA0LTA4ICBIYW5zIEJvZWhtICA8SGFuc19Cb2VobUBocC5jb20+Citjb21taXQgNjI1N2YwN2QxYTllZmQyN2ZhODM2MzljZmJhMjgxZjVkMzE4ODczMQorQXV0aG9yOiB0cm9tZXkgPHRyb21leT4KK0RhdGU6ICAgVGh1IEZlYiAxNCAyMDozMzoxNyAyMDA4ICswMDAwCiAKLQkqIHNyYy9qYXZhX3Jhd19hcGkuYyAoZmZpX2phdmFfcmF3X3NpemUpOiBIYW5kbGUgRkZJX1RZUEVfRE9VQkxFCi0JY29ycmVjdGx5LgotCSogc3JjL2lhNjQvdW5peC5TOiBBZGQgdW53aW5kIGluZm9ybWF0aW9uLiBGaXggY29tbWVudHMuCi0JU2F2ZSBzcCBpbiBhIHdheSB0aGF0J3MgY29tcGF0aWJsZSB3aXRoIHVud2luZCBpbmZvLgotCShmZmlfY2FsbF91bml4KTogQ29ycmVjdGx5IHJlc3RvcmUgc3AgaW4gYWxsIGNhc2VzLgotCSogc3JjL2lhNjQvZmZpLmM6IEFkZCwgZml4IGNvbW1lbnRzLgorICAgIAkqIGFjbG9jYWwubTQsIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorICAgIAkqIG1kYXRlLXNoLCB0ZXhpbmZvLnRleDogTmV3IGZpbGVzLgorICAgIAkqIE1ha2VmaWxlLmFtIChpbmZvX1RFWElORk9TKTogTmV3IHZhcmlhYmxlLgorICAgIAkqIGRvYy9saWJmZmkudGV4aTogTmV3IGZpbGUuCisgICAgCSogZG9jL3ZlcnNpb24udGV4aTogTGlrZXdpc2UuCiAKLTIwMDItMDQtMDggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorY29tbWl0IDQyMzJhZjU2M2M1NTA5YzM3NjBhMzNlMzY4NGEyYjk1OGJlNzU1ZTEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDE2OjE5OjIxIDIwMDggKzAwMDAKIAotCSogc3JjL3NwYXJjL3Y4LlM6IE1ha2UgLmVoX2ZyYW1lIGRlcGVuZGVudCBvbiB0YXJnZXQgd29yZCBzaXplLgorICAgICAgICAgICAgKiBNYWtlZmlsZS5hbSAoQU1fQ0ZMQUdTKTogRG9uJ3QgY29tcGlsZSB3aXRoIC1ELgorICAgICAgICAgICAgKGxpYl9MVExJQlJBUklFUyk6IERlZmluZS4KKyAgICAgICAgICAgICh0b29sZXhlY2xpYl9MSUJSQVJJRVMpOiBVbmRlZmluZS4KKyAgICAgICAgICAgICogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5hYzogUmVzZXQgdmVyc2lvbiB0byAyLjk5LjEuCisgICAgICAgICAgICAqIGNvbmZpZ3VyZS5pbjogUmVidWlsdC4KIAotMjAwMi0wNC0wNiAgSmFzb24gVGhvcnBlICA8dGhvcnBlakB3YXNhYmlzeXN0ZW1zLmNvbT4KK2NvbW1pdCA5NjE1NDM2MTVjMzFmMDkyYjU3OGE0YjRjZGE5MTRkYjY0ZjlkMGZhCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAxNTo1Nzo0MCAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbiAoYWxwaGEqLSotbmV0YnNkKik6IEFkZCB0YXJnZXQuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisgICAgRml4IHR5cG8uCiAKLTIwMDItMDQtMDQgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KK2NvbW1pdCBhZWIwYWJhYjg3MjIyZjYzN2ZiZjM1MmQ0ZWZmZDNiNzZiNTJlZDI2CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAxNTo1NDoyNyAyMDA4ICswMDAwCiAKLQkqIHNyYy9zcGFyYy92OC5TOiBBZGQgdW53aW5kIGluZm8uCi0JKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisgICAgICAgICAgKiBsaWJmZmkucGMuaW46IFVzc2UgQFBBQ0tBR0VfTkFNRUAgYW5kIEBQQUNLQUdFX1ZFUlNJT05ALgorICAgICAgICAgICAgKiBjb25maWd1cmUuYWM6IFJlc2V0IHZlcnNpb24gdG8gMi45OS4xLgorICAgICAgICAgICAgKiBjb25maWd1cmUuaW46IFJlYnVpbHQuCisgICAgICAgICAgICAqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIENoYW5nZUxvZy5saWJmZmkuCisgICAgICAgICAgICAqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgICAgICAgICAgKiBMSUNFTlNFOiBVcGRhdGUgY29weXJpZ2h0IG5vdGljZS4KIAotMjAwMi0wMy0zMCAgS3Jpc3RlciBXYWxmcmlkc3NvbiAgPGNhdG9AZGYubHRoLnNlPgorY29tbWl0IDc3ZmUyNDM1NTY0MzNlYWUxMTlkOGJkNzQ2OWJmY2NkZDViZDhhMWEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgRmViIDE0IDE1OjM3OjAwIDIwMDggKzAwMDAKIAotCSogY29uZmlndXJlLmluOiBFbmFibGUgaSo4Ni0qLW5ldGJzZGVsZiouCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgRml4IG1ha2UgZGlzdCBhZ2FpbgogCi0yMDAyLTAzLTI5ICBEYXZpZCBCaWxsaW5naHVyc3QgPERhdmlkLkJpbGxpbmdodXJzdEByaW90aW50by5jb20+Citjb21taXQgZDQ5NzBjZjQ1Mjk0NTliZjBmMGU0M2M2MDJjYWMzOTY3ODZjNjgwMgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBGZWIgMTQgMTU6MTg6NTYgMjAwOCArMDAwMAogCi0JUFIgb3RoZXIvMjYyMAotCSogc3JjL21pcHMvbjMyLnM6IERlbGV0ZQotCSogc3JjL21pcHMvbzMyLnM6IERlbGV0ZQorICAgIEZpeCBtYWtlIGRpc3QKIAotMjAwMi0wMy0yMSAgTG9yZW4gSi4gUml0dGxlICA8bGpyaXR0bGVAYWNtLm9yZz4KK2NvbW1pdCBmMGIxNDYyZjJkMzAyNDkyMmFkNzE0MjFiZDVjNDMxMWZjYjE2ZGE1CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEZlYiAxNCAxNTowMTo0MSAyMDA4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogRW5hYmxlIGFscGhhKi0qLWZyZWVic2QqLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIFVzZSBwa2djb25maWcuICBJbmNyZW1lbnQgbGlidG9vbCBDVVJSRU5UIHZlcnNpb24uCiAKLTIwMDItMDMtMTcgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KK2NvbW1pdCAyN2U1MmYzM2JhYTA2OTAxMmE1YWRiMmEzODA3ZjljYTFmMjE2NWFiCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEZlYiAzIDEzOjU5OjQ4IDIwMDggKzAwMDAKIAotCSogTWFrZWZpbGUuYW06IGxpYmZmaWNvbnZlbmllbmNlIC0+IGxpYmZmaV9jb252ZW5pZW5jZS4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorICAgIEZpeCBoZWFkZXIgaW5zdGFsbHMgd2hlbiB1c2luZyBERVNURElSLgogCi0JKiBNYWtlZmlsZS5hbTogRGVmaW5lIGZmaXRlc3RfT0JKRUNUUy4KLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorY29tbWl0IGZhZGFiMjhlYjZlMzNmYjZkY2RkN2I5MzIzZTE0NzE0MjIxNmQ1NDgKK0F1dGhvcjogdHdhbGwgPHR3YWxsPgorRGF0ZTogICBTdW4gRmViIDMgMTI6MzI6MjIgMjAwOCArMDAwMAogCi0yMDAyLTAzLTA3ICBBbmRyZWFzIFRvYmxlciAgPHRvYUBwb3AuYWdyaS5jaD4KLQkgICAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorICAgIHVwZGF0ZSBjaGFuZ2Vsb2cKIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgRGFyd2luIGFuZCBBSVggY2xvc3VyZSBmaWxlcy4KLQkoVEFSR0VUX1NSQ19QT1dFUlBDX0FJWCk6IEFkZCBhaXhfY2xvc3VyZS5TLgotCShUQVJHRVRfU1JDX1BPV0VSUENfREFSV0lOKTogQWRkIGRhcndpbl9jbG9zdXJlLlMuCi0JKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBBSVggYW5kIERhcndpbiBjbG9zdXJlIGRlZmluaXRpb25zLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9jbG9zdXJlKTogTmV3IGZ1bmN0aW9uLgotCShmbHVzaF9pY2FjaGUsIGZsdXNoX3JhbmdlKTogTmV3IGZ1bmN0aW9ucy4KLQkoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IE5ldyBmdW5jdGlvbi4KLQkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IE5ldyBmaWxlLgotCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTmV3IGZpbGUuCitjb21taXQgYjVlNDRjOGRmYTkyYzg3Yjk5NzYyYzMwM2NmNTU3NGExNmRiOGYyNworQXV0aG9yOiB0d2FsbCA8dHdhbGw+CitEYXRlOiAgIFN1biBGZWIgMyAwMToxMjozMiAyMDA4ICswMDAwCiAKLTIwMDItMDItMjQgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKyAgICBvZmZzZXQgZnJvbSBjb2RlIGJhc2UgYWRkcmVzcywgbm90IGRhdGEgYmFzZSBhZGRyZXNzCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCB0eXBlZGVmIGZvciBmZmlfYXJnLgotCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IERlY2xhcmUgcmludCB3aXRoIGZmaV9hcmcuCitjb21taXQgZjM1OTg0OGQxYTk5NWMwZTQ0NTY2ZDgxNWYyMTg3MjlkYzk5NmUyMgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBGZWIgMSAyMToyOTo0MyAyMDA4ICswMDAwCiAKLTIwMDItMDItMjEgIEFuZHJlYXMgVG9ibGVyICA8dG9hQHBvcC5hZ3JpLmNoPgorICAgIEZpeCBoZWFkZXIgaW5zdGFsbHMuCiAKLQkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IFNraXAgYXBwcm9wcmlhdGUKLQludW1iZXIgb2YgR1BScyBmb3IgZmxvYXRpbmctcG9pbnQgYXJndW1lbnRzLgorY29tbWl0IGMzMGRmNDllMTU3YzdiZmM4ZTE5ZTNmOGE3MmI5NDY0ZmUyMjVlNTQKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBGcmkgRmViIDEgMjE6MTM6NTUgMjAwOCArMDAwMAogCi0yMDAyLTAxLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKyAgICBSZXZlcnQgbXkgYnJva2VuIGNoYW5nZXMgdG8gdHdhbGwncyBwYXRjaC4KIAotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmluOiBSZXBsYWNlIENIRUNLX1NJWkVPRiBhbmQgZW5kaWFuIHRlc3RzIHdpdGgKLQljcm9zcy1jb21waWxlciBmcmllbmRseSBtYWNyb3MuCi0JKiBhY2xvY2FsLm00IChBQ19DT01QSUxFX0NIRUNLX1NJWkVPRiwgQUNfQ19CSUdFTkRJQU5fQ1JPU1MpOiBOZXcKLQltYWNyb3MuCitjb21taXQgNjc1NTYxYmI5YWEwNzMyYzc2Njk4ZGYxMGRkMzAwN2I1ZDBlYzc1OQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFRodSBKYW4gMzEgMTM6NDQ6MjUgMjAwOCArMDAwMAogCi0yMDAyLTAxLTE4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisgICAgRml4IG1ha2UgZGlzdCAuCiAKLQkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfQUlYKTogTmV3LgotCSogc3JjL3Bvd2VycGMvYWl4LlMgKGZmaV9jYWxsX0RBUldJTik6IE5ldy4KK2NvbW1pdCBhYmMwYmJmMzgxM2RjNDNlMjNkNGMyM2U2ZmU3OTRkYmYyODc2MzliCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEphbiAzMSAxMTo1ODo1NyAyMDA4ICswMDAwCiAKLTIwMDItMDEtMTcgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKyAgICBBZGQgVGltIFdhbGwncyB4ODYgd2luZG93cyBwYXRjaC4KIAotCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgRGFyd2luIGFuZCBBSVggZmlsZXMuCi0JKFRBUkdFVF9TUkNfUE9XRVJQQ19BSVgpOiBOZXcuCi0JKFBPV0VSUENfQUlYKTogTmV3IHN0YW56YS4KLQkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgotCSogY29uZmlndXJlLmluOiBBZGQgQUlYIGNhc2UuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfYWJpKTogQWRkIEZGSV9BSVguCi0JKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9zdGF0dXMpOiBVc2UgImxvbmciIHRvIHNjYWxlIGZyYW1lCi0Jc2l6ZS4gIEZpeCAibG9uZyBkb3VibGUiIHN1cHBvcnQuCi0JKGZmaV9jYWxsKTogQWRkIEZGSV9BSVggY2FzZS4KLQkqIHNyYy9wb3dlcnBjL2FpeC5TOiBOZXcuCitjb21taXQgZTMzMjM2NmQxNWEzMTE5ODczNWI1OTNlYzhmN2ZjMDU1OGQ3ODNiOAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFdlZCBKYW4gMzAgMTM6MjE6MDIgMjAwOCArMDAwMAogCi0yMDAxLTEwLTA5ICBKb2huIEhvcm5rdmlzdCAgPGpvaG5AdG9hc3RlZG1hcnNobWFsbG93LmNvbT4KKyAgICBBZGQgSEoncyAtZm9taXQtZnJhbWUtcG9pbnRlciBzdHJ1Y3QgcmV0dXJuIGZpeAogCi0JSW1wbGVtZW50IERhcndpbiBQb3dlclBDIEFCSS4KLQkqIGNvbmZpZ3VyZS5pbjogSGFuZGxlIHBvd2VycGMtKi1kYXJ3aW4qLgotCSogTWFrZWZpbGUuYW06IFNldCBzb3VyY2UgZmlsZXMgZm9yIFBPV0VSUENfREFSV0lOLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBEZWZpbmUgRkZJX0RBUldJTiBhbmQgRkZJX0RFRkFVTFRfQUJJIGZvcgotCVBPV0VSUENfREFSV0lOLgotCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IE5ldyBmaWxlLgotCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBOZXcgZmlsZS4KK2NvbW1pdCBkNDIwNDI0MDM5MmFmNWI3NzUwYTA4NjcxYjA4ZTljMjJkZmY1ZTkzCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgV2VkIEphbiAzMCAxMjo0MjozNCAyMDA4ICswMDAwCiAKLTIwMDEtMTAtMDcgIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KKyAgICBDbGVhbiB1cCBmb3IgbmV3IGF1dG9tYWtlLgogCi0JKiBzcmMveDg2L2ZmaS5jOiBGaXggc3BlbGxpbmcgZXJyb3Igb2YgInNlcGFyYXRlIiBhcyAic2VwZXJhdGUiLgorY29tbWl0IGY0OTMyZGQwMjBkZjU3NDYzN2M5ZmIzZmMxYmIxOGU1YThmMzA0Y2MKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBXZWQgSmFuIDMwIDEyOjQwOjI1IDIwMDggKzAwMDAKIAotMjAwMS0wNy0xNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisgICAgRml4ZXMgdG8gcnVuIHRlc3RzdWl0ZQogCi0JKiBzcmMveDg2L3N5c3YuUzogQXZvaWQgZ2FzLW9ubHkgLmJhbGlnbiBkaXJlY3RpdmUuCi0JVXNlIEMgc3R5bGUgY29tbWVudHMuCitjb21taXQgMDg1NTIwZGRjOGRiNmE5MTZiZmM0MTZiODcxZmNiMmQwMDA3NGQ0MAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBKYW4gMjkgMTU6MTY6NDMgMjAwOCArMDAwMAogCi0yMDAxLTA3LTE2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBOZXcgZmlsZXMgZnJvbSBnY2MgdHJlZS4KIAotCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlKTogQXZvaWQgZ2FzLW9ubHkgbW5lbW9uaWMuCi0JRml4ZXMgUFIgYm9vdHN0cmFwLzM1NjMuCitjb21taXQgNzcxNzViM2Y3MjM0ZTQ4NzVhNGVmNTU0ZWQxZmU5ZmRjNDEzMzc5NAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBKYW4gMjkgMTU6MTU6MjAgMjAwOCArMDAwMAogCi0yMDAxLTA2LTI2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBMYXRlc3QgZ2NjIHN2biBzb3VyY2VzCiAKLQkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2Nsb3N1cmVfb3NmKTogVXNlIC5yZGF0YSBmb3IgRUNPRkYuCitjb21taXQgMjU0NGU0NWEwYjJiNjM0MDUzZGYwMmRhM2EyZWQ5NjgwZWVlZDJhMQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBKYW4gMjkgMTQ6Mjg6MTMgMjAwOCArMDAwMAogCi0yMDAxLTA2LTI1ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKyAgICBJbnN0YWxsIGZmaXRhcmdldC5oIGluICRwcmVmaXgvaW5jbHVkZS4KIAotCSogY29uZmlndXJlLmluOiBSZWNvZ25pemUgc3BhcmMqLXN1bi0qIGhvc3QuCi0JKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCitjb21taXQgNjAwMjIxMWIxY2M0ZGFlYjU4N2QwNTRiNGY4Mzk2OGJkYTJjOTgxZQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBKYW4gMjkgMTI6MzA6MTAgMjAwOCArMDAwMAogCi0yMDAxLTA2LTA2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICBBZGQgbmV3IGZpbGVzLgogCi0JKiBzcmMvYWxwaGEvb3NmLlMgKF9fRlJBTUVfQkVHSU5fXyk6IENvbmRpdGlvbmFsaXplIGZvciBFTEYuCitjb21taXQgY2NhYmQyYjE2YmU4ODNjZDAzZTVmMGNkODhjY2ZkZDZjYTM5MjM5ZAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBKYW4gMjkgMTI6Mjg6MTUgMjAwOCArMDAwMAogCi0yMDAxLTA2LTAzICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKyAgICBNZXJnZSBmcm9tIGdjYwogCi0JKiBzcmMvYWxwaGEvb3NmLlM6IEFkZCB1bndpbmQgaW5mby4KLQkqIHNyYy9wb3dlcnBjL3N5c3YuUzogQWRkIHVud2luZCBpbmZvLgotCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCitjb21taXQgZTY4MGVjZmJmY2ExZGE4ZDE4MjNlNDhiYzg5YjgzNzVlNjZlMTI4YgorQXV0aG9yOiB0cm9tZXkgPHRyb21leT4KK0RhdGU6ICAgU3VuIERlYyAyNCAyMzoxMjoxNSAyMDA2ICswMDAwCiAKLTIwMDAtMDUtMzEgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKyAgICBQdWxsZWQgaW4gbGliZmZpIGZyb20gZ2NjIHRydW5rLgorICAgIEZpeGVkIGJ1aWxkIGFuZCBpbnN0YWxsIGZvciBzdGFuZGFsb25lIHVzZS4KIAotCSogY29uZmlndXJlLmluOiBGaXggQUNfQVJHX0VOQUJMRSB1c2FnZS4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KK2NvbW1pdCBlN2JhMDg5NjU5NDJjZTg3MmZkYmM2OWY3MGY5ODQ4Y2MzZDBiYWQ2CitBdXRob3I6IHJvb3QgPHJvb3Q+CitEYXRlOiAgIFN1biBKdW4gNCAyMzoyMjoyNCAyMDA2ICswMDAwCiAKLTIwMDEtMDUtMDYgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAd2FpdGFraS5vdGFnby5hYy5uej4KKyAgICBzb3VyY3dhcmUub3JnCiAKLQkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIHdhcm5pbmcgYWJvdXQgYmV0YSBjb2RlLgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgorY29tbWl0IDBjZDRhYTI0ZTIxYWFhOTY0ZGZiZGViYzI1ZWM1YzgxODgwNDkzNzUKK0F1dGhvcjogcm9vdCA8cm9vdD4KK0RhdGU6ICAgU3VuIE1heSAzMCAwMTo1MTo1NyAyMDA0ICswMDAwCiAKLTIwMDEtMDQtMjUgIEhhbnMgQm9laG0gPEhhbnNfQm9laG1AaHAuY29tPgorICAgIEFkZCBMb2NrRGlyCiAKLQkqIHNyYy9pYTY0L3VuaXguUzogUmVzdG9yZSBzdGFjayBwb2ludGVyIHdoZW4gcmV0dXJuaW5nIGZyb20KLQlmZmlfY2xvc3VyZV9VTklYLgotCSogc3JjL2lhNjQvZmZpLmM6IEZpeCB0eXBvIGluIGNvbW1lbnQuCitjb21taXQgNTgyNjEyMGZiZDk0MGQyNmNjYTc2ZWQyNTIyMTg3NTA1NTgxZTFlZAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFR1ZSBOb3YgNCAwNjowOTowOCAyMDAzICswMDAwCiAKLTIwMDEtMDQtMTggIEppbSBXaWxzb24gIDx3aWxzb25AcmVkaGF0LmNvbT4KKyAgICBBZGQgbGluayB0byBHaWFubmkncyB3ZWIgc2l0ZS4KIAotCSogc3JjL2lhNjQvdW5peC5TOiBEZWxldGUgdW5uZWNlc3NhcnkgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQgb2YgbG9jMgotCXRvIGVsaW1pbmF0ZSBSQVcgRFYuCitjb21taXQgMjIwYWE0YjI3ZGI0MmQ3ZmZhYWM1MDU2MDAwZDUxNzlmMDBkNWVhMworQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgVHVlIEphbiAyMSAwODowNzo0MiAyMDAzICswMDAwCiAKLTIwMDEtMDQtMTIgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorICAgIE5ld2VyLCBiZXR0ZXIsIGluY3JlYXNlZCBmcm9tIGJlZm9yZSEgIChsaXN0IG9mIGFjY2VwdGFibGUgYW5vbiB1c2VybmFtZXMpCiAKLQkqIE1ha2VmaWxlLmFtOiBNYWtlIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgMWMzYWRjODkyY2MxNDAzZGM0ZDNkNzAwM2EyMzg1ODk5ODM2NjEyZQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIEZyaSBEZWMgNiAwMToyODowMyAyMDAyICswMDAwCiAKLTIwMDEtMDMtMjkgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorICAgIEZpeGVkIEN5Z251cyByZWZlcmVuY2VzLgogCi0JKiBjb25maWd1cmUuaW46IFVzZSBkaWZmZXJlbnQgc3ludGF4IGZvciBzdWJkaXJlY3RvcnkgY3JlYXRpb24uCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCitjb21taXQgNGFmNjZiYjYyZmFiOWE4ZTMxOGFmM2JmMDFlNTQ4NjU5NmEwYzhkNAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBPY3QgMjEgMTk6MTg6NDIgMjAwMSArMDAwMAogCi0yMDAxLTAzLTI3ICBKb24gQmVuaXN0b24gIDxqb25AYmVuaXN0b24uY29tPgorICAgIFRlc3RzdWl0ZSBmaXhlcy4KIAotCSogY29uZmlndXJlLmluOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IChXaW4zMiwgQ3lnV2luLCBNaW5nVykuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBNYWtlZmlsZS5hbTogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCBzdXBwb3J0LgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCitjb21taXQgNTQzNTk2NWY5MDE1Y2U0MDU4NGM5OGQzODE2YzNkMDVlN2RlMWQyMQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIE1vbiBBcHIgMjMgMDA6MzI6MDMgMjAwMSArMDAwMAogCi0JKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IHN1cHBvcnQuCisgICAgICAgICAgICAqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBEZWxldGUsIGFmdGVyIG1vdmluZyBjb250ZW50cyB0by4uLgorICAgICAgICAgICAgKiBpbmNsdWRlL2ZmaV9wcml2YXRlLmg6IFN1YnN1bWUgY29udGVudHMgb2YgZmZpX2NvbW1vbi5oLgorICAgICAgICAgICAgKiBpbmNsdWRlL01ha2VmaWxlLmFtIChub2luc3RfSEVBREVSUyk6IFJlbW92ZSBmZmlfY29tbW9uLmguCisgICAgICAgICAgICAqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgICAgICAgICAqIGFybS9mZmkuYywgbTY4ay9mZmkuYywgbWlwcy9mZmkuYywgcG93ZXJwYy9mZmkuYywgczM5MC9mZmkuYywKKyAgICAgICAgICAgIGlhNjQvZmZpLmM6IEluY2x1ZGUgZmZpX3ByaXZhdGUuaCwgbm90IGZmaV9jb21tb24uaC4KKyAgICAgICAgICAgICogYWxwaGEvZmZpLmMsIHNwYXJjL2ZmaS5jLCB4ODYvZmZpLmM6IERvbid0IGluY2x1ZGUgZmZpX2NvbW1vbi5oLgorICAgICAgICAgICAgKiB0eXBlcy5jLCByYXdfYXBpLmMsIGphdmFfcmF3X2FwaS5jLCBwcmVwX2NpZi5jOiBEb24ndCBpbmNsdWRlCisgICAgICAgICAgICBmZmlfY29tbW9uLmguCisgICAgICAgICAgICAqIGRlYnVnLmM6IEluY2x1ZGUgZmZpX3ByaXZhdGUuaCBpbnN0ZWFkIG9mIGZmaV9jb21tb24uaC4KKyAgICAKKyAgICAgICAgICAgICogbWlwcy9mZmkuYyAoY2FsY19uMzJfc3RydWN0X2ZsYWdzKTogTWFrZSBzdGF0aWMuCisgICAgICAgICAgICAoRklYX0FSR1ApOiBSZW1vdmUgY2FsbCB0byBkZWJ1Z2dpbmcgcm91dGluZSBmZmlfc3RvcF9oZXJlLgorICAgIAorICAgICAgICAgICAgKiBtaXBzL24zMi5TOiBJbmNsdWRlIGZmaV9wcml2YXRlLmguCisgICAgICAgICAgICAqIG1pcHMvbzMyLlM6IEluY2x1ZGUgZmZpX3ByaXZhdGUuaC4KIAotCSogc3JjL2ZmaXRlc3QuYzogRG9lc24ndCBydW4gc3RydWN0dXJlIHRlc3RzIGZvciBYODZfV0lOMzIgdGFyZ2V0cy4KLQkqIHNyYy90eXBlcy5jOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IHN1cHBvcnQuCitjb21taXQgNmZkYjdkZTBmZTNiNzM4NWUxZmQ3ODgxMmFlNjlkOWIzMDY5ZDk5NAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTk6Mzg6MzQgMjAwMSArMDAwMAogCi0JKiBzcmMveDg2L3dpbjMyLlM6IE5ldyBmaWxlLiBCYXNlZCBvbiBzeXN2LlMsIGJ1dCB3aXRoIEVICi0Jc3R1ZmYgcmVtb3ZlZCBhbmQgbWFkZSB0byB3b3JrIHdpdGggQ3lnV2luJ3MgZ2FzLgorICAgICAgICAgICAgKiBSRUFETUU6IFVwZGF0ZSBzb21lIGNvbW1lbnRzLgorICAgIAorICAgICAgICAgICAgKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCBpbmNsdWRlIHNvIGZmaS5oIGdldHMgaW5zdGFsbGVkLgorICAgICAgICAgICAgKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKyAgICAKKyAgICAgICAgICAgICogaW5jbHVkZS9mZmkuaDogQ2hhbmdlIEFMUEhBIHRvIF9fYWxwaGFfXyBhbmQgU1BBUkMgdG8gX19zcGFyY19fLgorICAgICAgICAgICAgKiB0eXBlcy5jOiBEaXR0by4KKyAgICAgICAgICAgICogcHJlcF9jaWYuYyAoZmZpX3ByZXBfY2lmKTogRGl0dG8uCisgICAgCisgICAgICAgICAgICAqIGFscGhhL2ZmaS5jLCBhbHBoYS9vc2YuUywgc3BhcmMvZmZpLmMsIHNwYXJjL3Y4LlMsIHNwYXJjL3Y5LlM6CisgICAgICAgICAgICBJbmNsdWRlIGZmaV9wcml2YXRlLmguCisgICAgCisgICAgICAgICAgICAqIGluY2x1ZGUvZmZpX3ByaXZhdGUuaCAoRkZJX1RZUEVfTEFTVCk6IERlZmluZS4KIAotMjAwMS0wMy0yNiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+Citjb21taXQgYmM3MTQ0YjAxYjk3MDdlZjM1ZjFhMmUzZTY5OTZlMDA1ZTgyOTUzYQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6Mjg6MzYgMjAwMSArMDAwMAogCi0JKiBjb25maWd1cmUuaW46IE1ha2UgdGFyZ2V0IHN1YmRpcmVjdG9yeSBpbiBidWlsZCBkaXIuCi0JKiBNYWtlZmlsZS5hbTogT3ZlcnJpZGUgc3VmZml4IGJhc2VkIHJ1bGVzIHRvIHNwZWNpZnkgY29ycmVjdCBvdXRwdXQKLQlzdWJkaXJlY3RvcnkuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBNb3ZlZCBmaWxlcyBmcm9tIG9sZCBob21lCiAKLTIwMDEtMDMtMjMgIEtldmluIEIgSGVuZHJpY2tzICA8a2hlbmRyaWNrc0BpdmV5LnV3by5jYT4KK2NvbW1pdCBlNTcyNzk4MzFlMjAzNjhjMWFhMWQyYjM1NDYyYjg2MjliZTczOTU5CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODoyMzo0NyAyMDAxICswMDAwCiAKLQkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IE5ldyBmaWxlLgotCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBGaXhlZCBBQkkgY29tcGF0aWJpbGl0eSBidWcKLQlpbnZvbHZpbmcgbG9uZyBsb25nIGFuZCByZWdpc3RlciBwYWlycy4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IE5ldyBmdW5jdGlvbi4KLQkoZmx1c2hfaWNhY2hlKTogTGlrZXdpc2UuCi0JKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChGRklfQ0xPU1VSRVMpOiBEZWZpbmUgb24gUFBDLgotCShGRklfVFJBTVBPTElORV9TSVpFKTogTGlrZXdpc2UuCi0JKEZGSV9OQVRJVkVfUkFXX0FQSSk6IExpa2V3aXNlLgotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCi0JKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZGVkIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMuCi0JKFRBUkdFVF9TUkNfUE9XRVJQQyk6IExpa2V3aXNlLgorICAgIFRoZXNlIGFyZSBkZWFkLgogCi0yMDAxLTAzLTE5ICBUb20gVHJvbWV5ICA8dHJvbWV5QHJlZGhhdC5jb20+Citjb21taXQgNzI0NzQzNmI1ZmU3MTc2N2IyOWRjMDJiNGRhMGZlMThiMDgwODJlNgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6MjI6NDMgMjAwMSArMDAwMAogCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIE1ha2VmaWxlLmFtIChmZml0ZXN0X0xERkxBR1MpOiBOZXcgbWFjcm8uCisgICAgQWxsIHRoZXNlIGZpbGVzIGxpdmUgc29tZXdoZXJlIGVsc2Ugbm93LgogCi0yMDAxLTAzLTAyICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgorY29tbWl0IGE4YjBkNDBmZjkwOGUyNzUwMjhmNjc2ODcwYzMxZDBkNzAyNzRhOTgKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXByIDIyIDE4OjE3OjE0IDIwMDEgKzAwMDAKIAotCSogaW5jbHVkZS9mZmkuaC5pbjogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBpbmNsdWRlL2ZmaV9taXBzLmg6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL2RlYnVnLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL2ZmaXRlc3QuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvcHJlcF9jaWYuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvdHlwZXMuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCi0JKiBzcmMvYWxwaGEvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL2FscGhhL29zZi5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9hcm0vZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL2FybS9zeXN2LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL21pcHMvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL21pcHMvbjMyLlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL21pcHMvbzMyLlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL3NwYXJjL2ZmaS5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9zcGFyYy92OC5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy9zcGFyYy92OS5TOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KLQkqIHNyYy94ODYvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgotCSogc3JjL3g4Ni9zeXN2LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorICAgIE1hbnkgY2hhbmdlcy4gIE5vdCBxdWl0ZSB0aGVyZSB5ZXQuCiAKLTIwMDEtMDItMDggIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KK2NvbW1pdCBmODkzZDIyNzMzNTU3MTBhMjkwYTI2ZmFlYmY1ZjEyYzNhMzRkMGUzCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODoxMzoyMiAyMDAxICswMDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IENoYW5nZSBzb3VyY2V3YXJlLmN5Z251cy5jb20gcmVmZXJlbmNlcyB0bwotCWdjYy5nbnUub3JnLgorICAgIE1vdmVkIG02OGsgZmlsZXMKIAotMjAwMC0xMi0wOSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KK2NvbW1pdCA2ODhkZGZlY2VkODljYmI5ZDM3YjUzMDA1ZTFmN2YyYjljNzhhOGQ3CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODoxMjozMyAyMDAxICswMDAwCiAKLQkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX2NhbGwpOiBTaW1wbGlmeSBzdHJ1Y3QgcmV0dXJuIHRlc3QuCi0JKGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IEluZGV4IHJhdGhlciB0aGFuIGluY3JlbWVudCBhdmFsdWUKLQlhbmQgYXJnX3R5cGVzLiAgR2l2ZSBmZmlfY2xvc3VyZV9vc2YgdGhlIHJhdyByZXR1cm4gdmFsdWUgdHlwZS4KLQkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2Nsb3N1cmVfb3NmKTogSGFuZGxlIHJldHVybiB2YWx1ZSB0eXBlCi0JcHJvbW90aW9uLgorICAgIE5ldywgdGFyZ2V0IGluZGVwZW50ZW50LCBoZWFkZXIKIAotMjAwMC0xMi0wNyAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KK2NvbW1pdCBmOWU0MDc3NmQ0ODhkNWVjZjQzYjNhZTIxNDQ0YTFhMmY2ZWNhNTI4CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODoxMTo1NyAyMDAxICswMDAwCiAKLQkqIHNyYy9yYXdfYXBpLmMgKGZmaV90cmFuc2xhdGVfYXJncyk6IEZpeCB0eXBvLgotCShmZmlfcHJlcF9jbG9zdXJlKTogTGlrZXdpc2UuCisgICAgTWFueSBjaGFuZ2VzLgogCi0JKiBpbmNsdWRlL2ZmaS5oLmluIFtBTFBIQV06IERlZmluZSBGRklfQ0xPU1VSRVMgYW5kCi0JRkZJX1RSQU1QT0xJTkVfU0laRS4KLQkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGp1c3QgbWluaW1hbAotCWNpZi0+Ynl0ZXMgZm9yIG5ldyBmZmlfY2FsbF9vc2YgaW1wbGVtZW50YXRpb24uCi0JKGZmaV9wcmVwX2FyZ3MpOiBBYnNvcmIgaW50byAuLi4KLQkoZmZpX2NhbGwpOiAuLi4gaGVyZS4gIERvIGFsbCBzdGFjayBhbGxvY2F0aW9uIGhlcmUgYW5kCi0JYXZvaWQgYSBjYWxsYmFjayBmdW5jdGlvbi4KLQkoZmZpX3ByZXBfY2xvc3VyZSwgZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogTmV3LgotCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2FsbF9vc2YpOiBSZWltcGxlbWVudCB3aXRoIG5vIGNhbGxiYWNrLgotCShmZmlfY2xvc3VyZV9vc2YpOiBOZXcuCitjb21taXQgOGMxZDJlYjQ3ZjZiYzMxNGM0MzFiNzVjODVjMTA3ZThlNDNjNGE3NgorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIFN1biBBcHIgMjIgMTg6MTA6NDcgMjAwMSArMDAwMAogCi0yMDAwLTA5LTEwICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKyAgICBNYW55IGNoYW5nZXMKIAotCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBpbnN0YWxsLXNoOiBSZW1vdmVkLgotCSogbHRjb25maWcsIGx0bWFpbi5zaCwgbWlzc2luZywgbWtpbnN0YWxsZGlyczogTGlrZXdpc2UuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCAxMzU5ZGZjNjU4MjY4MGExNThiM2NhYTNlZmI3YTM2OGRhNGFhMTJkCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODoxMDoyMCAyMDAxICswMDAwCiAKLQkqIGFjaW5jbHVkZS5tNDogSW5jbHVkZSBsaWJ0b29sIG1hY3JvcyBmcm9tIHRoZSB0b3AgbGV2ZWwuCi0JKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgTW92ZWQgaWE2NCBmaWxlcwogCi0yMDAwLTA4LTIyICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KK2NvbW1pdCA2ZTJkZTVlZWUzMTZhNDU3OTg2OWFmZjUwYzdjNWY2ZjQ3ODU4MmQ4CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEFwciAyMiAxODowODoxMSAyMDAxICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbiBbaSo4Ni0qLWZyZWVic2QqXSAoVEFSR0VULCBUQVJHRVRESVIpOiBTZXQuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgTW92ZWQgYXJtIGZpbGVzCiAKLTIwMDAtMDUtMTEgIFNjb3R0IEJhbWJyb3VnaCAgPHNjb3R0YkBuZXR3aW5kZXIub3JnPgorY29tbWl0IDg4MDczNTVhZjM0Y2JhOGZmZTg3YWVlNTExNTJkZmNjZWMyNzcxZmEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBNb24gQXByIDkgMDA6NTg6MzggMjAwMSArMDAwMAogCi0JKiBsaWJmZmkvc3JjL2FybS9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBEb3VibGVzIGFyZSBub3Qgc2F2ZWQgdG8KLQltZW1vcnkgY29ycmVjdGx5LiAgVXNlIGNvbmRpdGlvbmFsIGluc3RydWN0aW9ucywgbm90IGJyYW5jaGVzIHdoZXJlCi0JcG9zc2libGUuCisgICAgTWFueSBtYW55IHVwZGF0ZXMuICBNZXJnZSBmcm9tIGdjYyBhbmQgdGhlbiBzb21lLgogCi0yMDAwLTA1LTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+Citjb21taXQgZjdlOWY5MWFkZWM0ZmYxYzJlN2ExM2IzZGU4MWQyYzVhM2Y1NWU3ZQorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIE1vbiBBcHIgMTcgMDM6MzI6MzcgMjAwMCArMDAwMAogCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuaW46IE1hdGNoIGBhcm0qLSotbGludXgtKicuCi0JRnJvbSBDaHJpcyBEb3JuYW4gPGNkb3JuYW5AYXJtLmNvbT4uCisgICAgTW5heSBmaXhlcy4KIAotMjAwMC0wNC0yOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+Citjb21taXQgYzQ4NjBkZTYxOGY0OTU2MjgzZjVjODIzMGEyNTQ0ZTQwM2RmZTM5MAorQXV0aG9yOiBncmVlbiA8Z3JlZW4+CitEYXRlOiAgIE1vbiBBcHIgMTcgMDM6MTg6NDYgMjAwMCArMDAwMAogCi0JKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IERlZmluZS4KLQkoQU1fTUFLRUZMQUdTKTogTGlrZXdpc2UuCi0JKE11bHRpbGliIHN1cHBvcnQuKTogQWRkIHNlY3Rpb24uCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KLQkqIGx0Y29uZmlnIChleHRyYV9jb21waWxlcl9mbGFncywgZXh0cmFfY29tcGlsZXJfZmxhZ3NfdmFsdWUpOgotCU5ldyB2YXJpYWJsZXMuIFNldCBmb3IgZ2NjIHVzaW5nIC1wcmludC1tdWx0aS1saWIuIEV4cG9ydCB0aGVtCi0JdG8gbGlidG9vbC4KLQkoc3BhcmM2NC0qLWxpbnV4LWdudSopOiBVc2UgbGlic3VmZiA2NCBmb3Igc2VhcmNoIHBhdGhzLgotCSogbHRtYWluLnNoIChCfGJ8Vik6IERvbid0IHRocm93IGF3YXkgZ2NjJ3MgLUIsIC1iIGFuZCAtViBvcHRpb25zCi0JZm9yIC1zaGFyZWQgbGlua3MuCi0JKGV4dHJhX2NvbXBpbGVyX2ZsYWdzX3ZhbHVlLCBleHRyYV9jb21waWxlcl9mbGFncyk6IENoZWNrIHRoZXNlCi0JZm9yIGV4dHJhIGNvbXBpbGVyIG9wdGlvbnMgd2hpY2ggbmVlZCB0byBiZSBwYXNzZWQgZG93biBpbgotCWNvbXBpbGVyX2ZsYWdzLgorICAgIE1lcmdlIGZyb20gbGliZ2NqLiAgTWVyZ2VkIHBhdGNoZXMgZnJvbSBuZXQuICBTZWUgQ2hhbmdlTG9nIGZvciBkZXRhaWxzLgogCi0yMDAwLTA0LTE2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KK2NvbW1pdCBjNTc4YjU4MzE0OTkwYzM4NTM0MjkyOTdjMzhiYTE0MDE1ZmVjNWZhCitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBTYXQgT2N0IDkgMjA6MTg6MTYgMTk5OSArMDAwMAogCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuaW46IENoYW5nZSBpKjg2LXBjLWxpbnV4KiB0byBpKjg2LSotbGludXgqLgorICAgIDE5OTktMTAtMDkgIEphc29uIE1vbGVuZGEgIChqc21AYnVnc2hhY2suY3lnbnVzLmNvbSkKKyAgICAKKyAgICAJKiBDVlNST09UL2F1dG9fY2hlY2tvdXQsIENWU1JPT1QvY29tbWl0X3ByZXAsIENWU1JPT1QvbG9nX2FjY3VtOgorICAgIAlEZWxldGVkOyBnZW5lcmljIHZlcnNpb25zIG5vdyB1c2VkIGZvciBhbGwgcmVwb3NpdG9yaWVzLgorICAgIAorICAgIAkqIENWU1JPT1QvY29tbWl0aW5mbywgQ1ZTUk9PVC9sb2dpbmZvOiAgQ2hhbmdlIHBhdGhuYW1lcyB0bworICAgIAlnZW5lcmljIHZlcnNpb25zLgorICAgIAorICAgICAgICAgICAgKiBDVlNST09UL2NoZWNrb3V0bGlzdDogIERvbid0IHRyeSB0byBjaGVjayBvdXQgdGhlIHJlbW92ZWQKKyAgICAgICAgICAgIGZpbGVzIGFueSBsb25nZXIuCiAKLTIwMDAtMDQtMTQgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorY29tbWl0IGFjZGIyMDA1MTIwN2ZlZDc2NTJkZDlmMTIyZjY1ZGU1NDU4YzQ3NGMKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIFNhdCBPY3QgOSAyMDoxODoxNSAxOTk5ICswMDAwCiAKLQkqIGluY2x1ZGUvZmZpLmguaW4gKFNQQVJDNjQpOiBEZWZpbmUgZm9yIDY0Yml0IFNQQVJDIGJ1aWxkcy4KLQlTZXQgU1BBUkMgRkZJX0RFRkFVTFRfQUJJIGJhc2VkIG9uIFNQQVJDNjQgZGVmaW5lLgotCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3Y4KTogUmVuYW1lZCBmcm9tIGZmaV9wcmVwX2FyZ3MuCi0JUmVwbGFjZSBhbGwgdm9pZCAqIHNpemVvZnMgd2l0aCBzaXplb2YoaW50KS4KLQlPbmx5IGNvbXBhcmUgdHlwZSB3aXRoIEZGSV9UWVBFX0xPTkdET1VCTEUgaWYgTE9OR0RPVUJMRSBpcwotCWRpZmZlcmVudCB0aGFuIERPVUJMRS4KLQlSZW1vdmUgRkZJX1RZUEVfU0lOVDMyIGFuZCBGRklfVFlQRV9VSU5UMzIgY2FzZXMgKGhhbmRsZWQgZWxzZXdoZXJlKS4KLQkoZmZpX3ByZXBfYXJnc192OSk6IE5ldyBmdW5jdGlvbi4KLQkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgVjkgQUJJIGFuZCBsb25nIGxvbmcgb24gVjguCi0JKGZmaV9WOV9yZXR1cm5fc3RydWN0KTogTmV3IGZ1bmN0aW9uLgotCShmZmlfY2FsbCk6IEhhbmRsZSBGRklfVjkgQUJJIGZyb20gNjRiaXQgY29kZSBhbmQgRkZJX1Y4IEFCSSBmcm9tCi0JMzJiaXQgY29kZSAobm90IHlldCBjcm9zcy1hcmNoIGNhbGxzKS4KLQkqIHNyYy9zcGFyYy92OC5TOiBBZGQgc3RydWN0IHJldHVybiBkZWxheSBub3AuCi0JSGFuZGxlIGxvbmcgbG9uZy4KLQkqIHNyYy9zcGFyYy92OS5TOiBOZXcgZmlsZS4KLQkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBSZXR1cm4gc3RydWN0dXJlIHBvaW50ZXIKLQlpcyB1c2VkIG9uIHNwYXJjNjQgb25seSBmb3Igc3RydWN0dXJlcyBsYXJnZXIgdGhhbiAzMiBieXRlcy4KLQlQYXNzIGJ5IHJlZmVyZW5jZSBmb3Igc3RydWN0dXJlcyBpcyBkb25lIGZvciBzdHJ1Y3R1cmUgYXJndW1lbnRzCi0JbGFyZ2VyIHRoYW4gMTYgYnl0ZXMuCi0JKiBzcmMvZmZpdGVzdC5jIChtYWluKTogVXNlIDY0Yml0IHJpbnQgb24gc3BhcmM2NC4KLQlSdW4gbG9uZyBsb25nIHRlc3RzIG9uIHNwYXJjLgotCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBQb2ludGVyIGlzIDY0Yml0IG9uIGFscGhhIGFuZAotCXNwYXJjNjQuCi0JKEZGSV9UWVBFX0xPTkdET1VCTEUpOiBsb25nIGRvdWJsZSBpcyAxMjggYml0IGFsaWduZWQgdG8gMTI4IGJpdHMKLQlvbiBzcGFyYzY0LgotCSogY29uZmlndXJlLmluIChzcGFyYy0qLWxpbnV4Kik6IE5ldyBzdXBwb3J0ZWQgdGFyZ2V0LgotCShzcGFyYzY0LSotbGludXgqKTogTGlrZXdpc2UuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBNYWtlZmlsZS5hbTogQWRkIHY5LlMgdG8gU1BBUkMgZmlsZXMuCi0JKiBNYWtlZmlsZS5pbjogTGlrZXdpc2UuCi0JKExJTkspOiBTdXJyb3VuZCAkKENDTEQpIGludG8gZG91YmxlIHF1b3Rlcywgc28gdGhhdCBtdWx0aWxpYgotCWNvbXBpbGVzIHdvcmsgY29ycmVjdGx5LgorICAgIDE5OTktMTAtMDkgIEphc29uIE1vbGVuZGEgIChqc21AYnVnc2hhY2suY3lnbnVzLmNvbSkKKyAgICAKKyAgICAJKiBDVlNST09UL2F1dG9fY2hlY2tvdXQsIENWU1JPT1QvY29tbWl0X3ByZXAsIENWU1JPT1QvbG9nX2FjY3VtOgorICAgIAlEZWxldGVkOyBnZW5lcmljIHZlcnNpb25zIG5vdyB1c2VkIGZvciBhbGwgcmVwb3NpdG9yaWVzLgorICAgIAorICAgIAkqIENWU1JPT1QvY29tbWl0aW5mbywgQ1ZTUk9PVC9sb2dpbmZvOiAgQ2hhbmdlIHBhdGhuYW1lcyB0bworICAgIAlnZW5lcmljIHZlcnNpb25zLgorICAgIAorICAgICAgICAgICAgKiBDVlNST09UL2NoZWNrb3V0bGlzdDogIERvbid0IHRyeSB0byBjaGVjayBvdXQgdGhlIHJlbW92ZWQKKyAgICAgICAgICAgIGZpbGVzIGFueSBsb25nZXIuCiAKLTIwMDAtMDQtMDQgIEFsZXhhbmRyZSBQZXRpdC1CaWFuY28gIDxhcGJpYW5jb0BjeWdudXMuY29tPgorY29tbWl0IGU3NWJlNjU1Y2VlZGY3YWIyNGM0ZTk5ZDc1ZWVjOWVmZWI5NzliYzcKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gQXVnIDggMTM6MTY6NDEgMTk5OSArMDAwMAogCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuaW46IChpKjg2LSotc29sYXJpcyopOiBOZXcgbGliZmZpIHRhcmdldC4gUGF0Y2gKLQlwcm9wb3NlZCBieSBCcnljZSBNY0tpbmxheS4KKyAgICBOZXcgY29uZmlndXJ5CiAKLTIwMDAtMDMtMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KK2NvbW1pdCBkNjY2OWEwZGQ1YjI2NjAwNTMyNWJiZjZkNWE4ZmYzNDU3NGQ4MDllCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIEF1ZyA4IDEzOjA1OjEyIDE5OTkgKzAwMDAKIAotCSogTWFrZWZpbGUuaW46IEhhbmQgZWRpdCBmb3IgamF2YV9yYXdfYXBpLmxvLgorICAgIAkqIGluY2x1ZGUvZmZpLmguaW46IFRyeSB0byB3b3JrIGFyb3VuZCBtZXNzeSBoZWFkZXIgcHJvYmxlbQorICAgIAl3aXRoIFBBQ0tBR0UgYW5kIFZFUlNJT04uCisgICAgCisgICAgCSogY29uZmlndXJlOiBSZWJ1aWx0LgorICAgIAkqIGNvbmZpZ3VyZS5pbjogQ2hhbmdlIHZlcnNpb24gdG8gMi4wMC1iZXRhLgorICAgIAorICAgICAgICAgICAgKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKyAgICAJKiBhY2NvbmZpZy5oIChGRklfTk9fU1RSVUNUUywgRkZJX05PX1JBV19BUEkpOiBEZWZpbmUuCisgICAgCisgICAgCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3Jhd19jYWxsKTogUmVuYW1lLgogCi0yMDAwLTAzLTA4ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KK2NvbW1pdCA0ODE5ZDUyYjAwNzkzNGE0MGQ2ZDI5YTc1ZWUzMGU4NTdjNGE5M2FlCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgV2VkIEF1ZyA0IDE4OjAyOjM0IDE5OTkgKzAwMDAKIAotCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViOiBVcGRhdGUgZnJvbSB0aGUgZ2NjIHRyZWUuCi0JRml4IGZvciBQUiBsaWJnY2ovMTY4LgorICAgIE5ldyBmaWxlIGZvciBLcmVzdGVuJ3MgY2xvc3VyZSB3b3JrCiAKLTIwMDAtMDMtMDMgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KK2NvbW1pdCAyZGJmODAxZWI0MjdjYmY1MDIxYTllMWU1MTJiNWZjNTIzNTI0NzAwCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgV2VkIEF1ZyA0IDE4OjAwOjA1IDE5OTkgKzAwMDAKIAotCSogTWFrZWZpbGUuaW46IEZpeGVkIGlhNjQgYnkgaGFuZC4KKyAgICBLcmVzdGVuJ3MgY2xvc3VyZSB3b3JrLiBJbml0aWFsIGNoZWNraW4uCiAKLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KLQkqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtbXVsdGlsaWIpOiBOZXcgb3B0aW9uLgotCShsaWJmZmlfYmFzZWRpcik6IE5ldyBzdWJzdC4KLQkoQUNfT1VUUFVUKTogQWRkZWQgbXVsdGlsaWIgY29kZS4KK2NvbW1pdCBkMTcwOTYxNzAxYjBmMmJmN2U4MjRkN2NhYmEyZWJlMTAwMDJlZDg0CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgVGh1IEp1bCA4IDE0OjM2OjUyIDE5OTkgKzAwMDAKIAotMjAwMC0wMy0wMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorICAgIAkqIGNvbmZpZ3VyZS5pbjogQWRkIHg4NiBhbmQgcG93ZXJwYyBCZU9TIGNvbmZpZ3VyYXRpb25zLgorICAgIAlGcm9tIE1ha290byBLYXRvIDxtX2thdG9AZ2EyLnNvLW5ldC5uZS5qcD4uCiAKLQkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgotCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfSUE2NCk6IFVzZSBgaWE2NCcsIG5vdCBgYWxwaGEnLCBhcwotCWRpcmVjdG9yeSBuYW1lLgorY29tbWl0IGM3NzQ3ZDk3NjkyNGVjNmYyMjI5Y2JjZmJiZGI5OGQzNjRlMTBkZTkKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIFdlZCBNYXkgMTIgMjM6MzI6MTYgMTk5OSArMDAwMAogCi0yMDAwLTAyLTI1ICBIYW5zIEJvZWhtIDxib2VobUBhY20ub3JnPgorICAgIDE5OTktMDUtMTIgIEphc29uIE1vbGVuZGEgIChqc21AYnVnc2hhY2suY3lnbnVzLmNvbSkKKyAgICAgICAgICAgICogaW5kZXguaHRtbDogQWRkIGxpbmtzIHRvIGxpYmZmaSogbWFpbCBsaXN0IGFyY2hpdmVzLgogCi0JKiBzcmMvaWE2NC9mZmkuYywgc3JjL2lhNjQvaWE2NF9mbGFncy5oLCBzcmMvaWE2NC91bml4LlM6IE5ldwotCWZpbGVzLgotCSogc3JjL3Jhd19hcGkuYyAoZmZpX3RyYW5zbGF0ZV9hcmdzKTogRml4ZWQgdHlwbyBpbiBhcmd1bWVudAotCWxpc3QuCi0JKGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogVXNlIGZmaV90cmFuc2xhdGVfYXJncywgbm90Ci0JZmZpX2Nsb3N1cmVfdHJhbnNsYXRlLgotCSogc3JjL2phdmFfcmF3X2FwaS5jOiBOZXcgZmlsZS4KLQkqIHNyYy9mZml0ZXN0LmMgKGNsb3N1cmVfdGVzdF9mbik6IE5ldyBmdW5jdGlvbi4KLQkobWFpbik6IERlZmluZSBgcmludCcgYXMgbG9uZyBsb25nIG9uIElBNjQuICBBZGRlZCBuZXcgdGVzdCB3aGVuCi0JRkZJX0NMT1NVUkVTIGlzIGRlZmluZWQuCi0JKiBpbmNsdWRlL2ZmaS5oLmluIChBTElHTik6IFVzZSBzaXplX3QsIG5vdCB1bnNpZ25lZC4KLQkoZmZpX2FiaSk6IFJlY29nbml6ZSBJQTY0LgotCShmZmlfcmF3KTogQWRkZWQgYGZsdCcgZmllbGQuCi0JQWRkZWQgIkphdmEgcmF3IEFQSSIgY29kZS4KLQkqIGNvbmZpZ3VyZS5pbjogUmVjb2duaXplIGlhNjQuCi0JKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19JQTY0KTogTmV3IG1hY3JvLgotCShsaWJmZmlfbGFfY29tbW9uX1NPVVJDRVMpOiBBZGRlZCBqYXZhX3Jhd19hcGkuYy4KLQkobGliZmZpX2xhX1NPVVJDRVMpOiBEZWZpbmUgaW4gSUE2NCBjYXNlLgorY29tbWl0IGRkMmFhOWE4ZGUyMmUyNmRmM2JiYzg1ZDA2ODM1ODY0MWY2MjAyZjcKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBUaHUgTWF5IDYgMDU6MzQ6MzYgMTk5OSArMDAwMAogCi0yMDAwLTAxLTA0ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisgICAgCSogY29uZmlndXJlLmluOiBBZGQgd2FybmluZyBhYm91dCB0aGlzIGJlaW5nIGJldGEgY29kZS4KKyAgICAJUmVtb3ZlIHNyYy9NYWtlZmlsZS5hbSBmcm9tIHRoZSBwaWN0dXJlLgorICAgIAkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICAJKiBNYWtlZmlsZS5hbTogTW92ZSBsb2dpYyBmcm9tIHNyYy9NYWtlZmlsZS5hbS4gIEFkZCBjaGFuZ2VzCisgICAgCXRvIHN1cHBvcnQgbGliZmZpIGFzIGEgdGFyZ2V0IGxpYnJhcnkuCisgICAgCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisgICAgCSogYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBsdGNvbmZpZywgbHRtYWluLnNoOgorICAgIAlVcGdyYWRlZCB0byBuZXcgYXV0b2NvbmYsIGF1dG9tYWtlLCBsaWJ0b29sLgorICAgIAkqIFJFQURNRTogVHdlYWtzLgorICAgIAkqIExJQ0VOU0U6IFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZS4KKyAgICAJKiBzcmMvTWFrZWZpbGUuYW0sIHNyYy9NYWtlZmlsZS5pbjogUmVtb3ZlZC4KIAotCSogTWFrZWZpbGUuaW46IFJlYnVpbHQgd2l0aCBuZXdlciBhdXRvbWFrZS4KK2NvbW1pdCA0ZTk0NTJhYmVkNThhMzA1OGNjZGI0NDZmOTZhMjlkNTBkZGExZjM0CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgV2VkIE1heSA1IDIyOjA2OjEzIDE5OTkgKzAwMDAKIAotMTk5OS0xMi0zMSAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorICAgIFVwZGF0ZWQgdG8gbmV3IGF1dG9tYWtlLCBsaWJ0b29sLCBhdXRvY29uZiAtIG5vdGhpbmcgd29ya3MgOi0pCiAKLQkqIE1ha2VmaWxlLmFtIChJTkNMVURFUyk6IEFkZGVkIC1JJCh0b3Bfc3JjZGlyKS9zcmMuCitjb21taXQgNmQzYjJiZGRhZjQ5NjdmYmE4Yjg2NTZjMDFiZmM3N2VjMGYyODAwYworQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgTW9uIEFwciAyNiAxNTo1NToyOCAxOTk5ICswMDAwCiAKLTE5OTktMDktMDEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKyAgICAxOTk5LTA0LTI2ICBKYXNvbiBNb2xlbmRhICAoanNtQGJ1Z3NoYWNrLmN5Z251cy5jb20pCisgICAgICAgICAgICAqIGluZGV4Lmh0bWw6IE1pc3NlZCBhIHJlZmVyZW5jZSB0byBsaWJmZmktZGlzY3Vzc0BjeWdudXMuY29tLiAgRml4ZWQuCiAKLQkqIGluY2x1ZGUvZmZpLmguaW46IFJlbW92ZWQgUEFDS0FHRSBhbmQgVkVSU0lPTiBkZWZpbmVzIGFuZAotCXVuZGVmcy4KLQkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgotCSogY29uZmlndXJlOiBSZWJ1aWx0LgotCSogY29uZmlndXJlLmluOiBQYXNzIDNyZCBhcmd1bWVudCB0byBBTV9JTklUX0FVVE9NQUtFLgotCVVzZSBBTV9QUk9HX0xJQlRPT0wgKGF1dG9tYWtlIDEuNCBjb21wYXRpYmlsaXR5KS4KLQkqIGFjY29uZmlnLmg6IERvbid0ICN1bmRlZiBQQUNLQUdFIG9yIFZFUlNJT04uCitjb21taXQgZWJjNmE5YzI4YWY4MzFkM2QxODdhZjhmZjE3MzE5ZjBmMzA5YmQ5OAorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgTW9uIEFwciAyNiAxNTo1MzoyOSAxOTk5ICswMDAwCiAKLTE5OTktMDgtMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorICAgIDE5OTktMDQtMjYgIEphc29uIE1vbGVuZGEgIChqc21AYnVnc2hhY2suY3lnbnVzLmNvbSkKKyAgICAgICAgICAgICogaW5kZXguaHRtbDogQ2hhbmdlIGxpbmtzIHRvIGZ0cCBkaXJlY3RvcnkgdG8gcG9pbnQgdG8gc291cmNld2FyZQorICAgICAgICAgICAgZGlyZWN0b3J5LgorICAgICAgICAgICAgQ2hhbmdlIG1haWxpbmcgbGlzdCBzdWJzY3JpcHRpb24gZm9ybXMgdG8gcG9pbnQgdG8gc291cmNld2FyZSBsaXN0cy4KIAotCSogaW5jbHVkZS9mZmkuaC5pbjogVHJ5IHRvIHdvcmsgYXJvdW5kIG1lc3N5IGhlYWRlciBwcm9ibGVtCi0Jd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OLgorY29tbWl0IDc4ZmZjNTJhOGIyNTcwNjEzNDhjNTc2Y2NiNmZiYmY4YjQ4YjBmZmYKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIFN1biBBcHIgMTggMDE6MzM6MjEgMTk5OSArMDAwMAogCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCi0JKiBjb25maWd1cmUuaW46IENoYW5nZSB2ZXJzaW9uIHRvIDIuMDAtYmV0YS4KKyAgICBTdGFuZGFyZCBzb3VyY2V3YXJlIHNldHVwLgogCi0JKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KLQkqIGFjY29uZmlnLmggKEZGSV9OT19TVFJVQ1RTLCBGRklfTk9fUkFXX0FQSSk6IERlZmluZS4KK2NvbW1pdCBiNGQ3N2U4MjdkN2ViZWY3ZTU3ZWJjZDcxZTcxYzE1YzYyZjFlMGE4CitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBNb24gTm92IDMwIDExOjExOjI1IDE5OTggKzAwMDAKIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3Jhd19jYWxsKTogUmVuYW1lLgorICAgIFNtYWxsIHR5cGVvLiAgKEkgd291bGRuJ3QgYm90aGVyIGV4Y2VwdCB0aGF0IGl0IG1hZGUgdGhlIHNlbnRlbmNlIGhhcmQKKyAgICBmb3IgbWUgdG8gcGFyc2Ugb24gYSBjYXN1YWwgcmVhZC4pCiAKLTE5OTktMDgtMDIgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIDxrcmFiQGRvbWluaXEuaXMucy51LXRva3lvLmFjLmpwPgorY29tbWl0IGJmYjczZjA4ZmRjOTg3ZTM3MDcwYzVmYjBiMTk2ZmJkMjg4NzI4ODgKK0F1dGhvcjoganNtIDxqc20+CitEYXRlOiAgIE1vbiBOb3YgMzAgMTA6NDQ6NTUgMTk5OCArMDAwMAogCi0JKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWKTogTmV3IGZ1bmN0aW9uLgotCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBEaXR0by4KLQkoZmZpX3ByZXBfY2xvc3VyZSk6IERpdHRvLgotCShmZmlfY2xvc3VyZV9yYXdfU1lTVik6IERpdHRvLgotCShmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IE1vcmUgZGl0dG8uCi0JKGZmaV9jYWxsX3Jhdyk6IEZpbmFsIGRpdHRvLgorICAgIEEgZmV3IGNsZWFudXBzLiAgTW9zdCBub3RhYmx5LCBwb2ludCB0byB0aGUgY29ycmVjdCBzdWJzY3JpYmUgY2dpLWJpbgorICAgIHNjcmlwdC4KIAotCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIGRlZmluaXRpb25zIGZvciBjbG9zdXJlIGFuZCByYXcgQVBJLgorY29tbWl0IGFmOGI3ZjAzN2NjZWUzYjc5MzllZTIyNmExYTJiYmMyZjA1N2IzNWMKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBNb24gTm92IDMwIDA2OjIwOjA1IDE5OTggKzAwMDAKIAotCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGRlZCBjYXNlIGZvcgotCUZGSV9UWVBFX1VJTlQ2NC4KKyAgICAJKiBpbmRleC5odG1sOiBSZWZvcm1hdHRlZCBhbmQgdXBkYXRlZCB0byByZWZsZWN0IGhvc3Rpbmcgb24KKyAgICAJc291cmNld2FyZS5jeWdudXMuY29tIChuZXcgbWFpbGluZyBsaXN0cywgZXRjKS4KIAotCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9jb21tb25fU09VUkNFUyk6IEFkZGVkIHJhd19hcGkuYworY29tbWl0IDMzNGYwYjA2MDk0MmFmZjhkMjZiYWRhZjdkZGU3ODMwNDUwZGM1ZGEKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gTm92IDI5IDE2OjU2OjEyIDE5OTggKzAwMDAKIAotCSogc3JjL3Jhd19hcGkuYzogTmV3IGZpbGUuCisgICAgaW5pdGlhbCBzbmFwc2hvdCBvZiBkb2N1bWVudGF0aW9uCiAKLQkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV9yYXcpOiBOZXcgdHlwZS4KLQkoVUlOVF9BUkcsIFNJTlRfQVJHKTogTmV3IGRlZmluZXMuCi0JKGZmaV9jbG9zdXJlLCBmZmlfcmF3X2Nsb3N1cmUpOiBOZXcgdHlwZXMuCi0JKGZmaV9wcmVwX2Nsb3N1cmUsIGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogTmV3IGRlY2xhcmF0aW9ucy4KK2NvbW1pdCAzYWI1Y2I0YTFkY2M3ZWNkN2U3NzNjOTc1ODJiMDA5OTk3NmM0NzUzCitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIE5vdiAyOSAxNjo1NjoxMCAxOTk4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZS5pbjogQWRkIGNoZWNrIGZvciBlbmRpYW5uZXNzIGFuZCBzaXplb2Ygdm9pZCouCisgICAgSW5pdGlhbCByZXZpc2lvbgogCi0JKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IENhbGwgZml4dXAgcm91dGluZSB2aWEgYXJndW1lbnQsCi0JaW5zdGVhZCBvZiBkaXJlY3RseS4KK2NvbW1pdCBkMmE5ZWI1YThiN2NiYzhiNzY5ODA5Y2FkNTljODJiOTc1YzE3OGUyCitNZXJnZTogZDM3ODJlYyBiYzc1YzU0CitBdXRob3I6IGdyZWVuIDxncmVlbj4KK0RhdGU6ICAgU3VuIE5vdiAyOSAxNjo0ODoxNiAxOTk4ICswMDAwCiAKLQkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKyAgICBUaGlzIGNvbW1pdCB3YXMgZ2VuZXJhdGVkIGJ5IGN2czJzdm4gdG8gY29tcGVuc2F0ZSBmb3IgY2hhbmdlcyBpbiByNywgd2hpY2gKKyAgICBpbmNsdWRlZCBjb21taXRzIHRvIFJDUyBmaWxlcyB3aXRoIG5vbi10cnVuayBkZWZhdWx0IGJyYW5jaGVzLgogCi1UaHUgSnVsICA4IDE0OjI4OjQyIDE5OTkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBjeWdudXMuY29tPgorY29tbWl0IGJjNzVjNTRiZDMxMTY1ODAwNWIwNjVmMWJmMjAxYjIwNGM4MWNiY2EKK0F1dGhvcjogZ3JlZW4gPGdyZWVuPgorRGF0ZTogICBTdW4gTm92IDI5IDE2OjQ4OjE2IDE5OTggKzAwMDAKIAotCSogY29uZmlndXJlLmluOiBBZGQgeDg2IGFuZCBwb3dlcnBjIEJlT1MgY29uZmlndXJhdGlvbnMuCi0JRnJvbSBNYWtvdG8gS2F0byA8bV9rYXRvQGdhMi5zby1uZXQubmUuanA+LgorICAgIEltcG9ydCBvZiB2MSBjb2RlLgogCi0xOTk5LTA1LTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KK2NvbW1pdCBkMzc4MmVjODE2MGM2NDQ0MjFkY2VhMTdiNjA1ZmVjNmUzMjhmMTRlCitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBGcmkgTm92IDIwIDIwOjE4OjAwIDE5OTggKzAwMDAKIAotCSogY29uZmlndXJlLmluOiBBZGQgd2FybmluZyBhYm91dCB0aGlzIGJlaW5nIGJldGEgY29kZS4KLQlSZW1vdmUgc3JjL01ha2VmaWxlLmFtIGZyb20gdGhlIHBpY3R1cmUuCi0JKiBjb25maWd1cmU6IFJlYnVpbHQuCisgICAgU2VuZCBjb21taXQgbWVzc2FnZXMgdG8gbWFpbGluZyBsaXN0cy4KIAotCSogTWFrZWZpbGUuYW06IE1vdmUgbG9naWMgZnJvbSBzcmMvTWFrZWZpbGUuYW0uICBBZGQgY2hhbmdlcwotCXRvIHN1cHBvcnQgbGliZmZpIGFzIGEgdGFyZ2V0IGxpYnJhcnkuCi0JKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KK2NvbW1pdCA4ZDhkMzg0M2M0ODRjMmJiNzBkODM3NWIyYjc5OWY3NWViMDNmNzA5CitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBUaHUgT2N0IDEgMjI6MDg6MzYgMTk5OCArMDAwMAogCi0JKiBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGx0Y29uZmlnLCBsdG1haW4uc2g6Ci0JVXBncmFkZWQgdG8gbmV3IGF1dG9jb25mLCBhdXRvbWFrZSwgbGlidG9vbC4KKyAgICBpbml0aWFsIGNoZWNraW4KIAotCSogUkVBRE1FOiBUd2Vha3MuCitjb21taXQgNDk2MzRmM2JmMjIxY2MxOTM5YWJhZmM3ODhmN2U0ZTMxMjkzZmU3MworQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgVGh1IE9jdCAxIDIyOjA4OjM1IDE5OTggKzAwMDAKIAotCSogTElDRU5TRTogVXBkYXRlIGNvcHlyaWdodCBkYXRlLgorICAgIEFkZCBzdGFuZGFyZCBzZXR1cC4KIAotCSogc3JjL01ha2VmaWxlLmFtLCBzcmMvTWFrZWZpbGUuaW46IFJlbW92ZWQuCitjb21taXQgYzY0YTg0Yzc2OTNmOGNkNDAwZmI5NGJiYTNjOWJjZmQ5YWQxZmMzNgorQXV0aG9yOiBqc20gPGpzbT4KK0RhdGU6ICAgVGh1IE9jdCAxIDIyOjA4OjM0IDE5OTggKzAwMDAKIAotMTk5OC0xMS0yOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisgICAgQWRkIHJlYWRlcnMgYW5kIHN0YW5kYXJkIG1vZHVsZXMgZmlsZS4KIAotCSogaW5jbHVkZS9DaGFuZ2VMb2c6IFJlbW92ZWQuCi0JKiBzcmMvQ2hhbmdlTG9nOiBSZW1vdmVkLgotCSogc3JjL21pcHMvQ2hhbmdlTG9nOiBSZW1vdmVkLgotCSogc3JjL3NwYXJjL0NoYW5nZUxvZzogUmVtYm92ZWQuCi0JKiBzcmMveDg2L0NoYW5nZUxvZzogUmVtb3ZlZC4KK2NvbW1pdCA5ODEzMjczYjA3ZmQwODJkYTU3M2IzYjZiZmI4ZDIzODA5YjU5ZWVhCitBdXRob3I6IGpzbSA8anNtPgorRGF0ZTogICBUaHUgT2N0IDEgMjI6MDg6MzMgMTk5OCArMDAwMAogCi0JKiBDaGFuZ2VMb2cudjE6IENyZWF0ZWQuCisgICAgaW5pdGlhbCBjaGVja2luCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0NoYW5nZUxvZy5saWJmZmktMy4xIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZmZpLTMuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjdmNTBkCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cubGliZmZpLTMuMQpAQCAtMCwwICsxLDYwMDAgQEAKKzIwMTQtMDMtMTYgIEpvc2ggVHJpcGxldHQgIDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CisKKwkqIENoYW5nZUxvZzogQXJjaGl2ZSB0byBDaGFuZ2VMb2cubGliZmZpLTMuMSBhbmQgZGVsZXRlLiAgRnV0dXJlCisJY2hhbmdlbG9ncyB3aWxsIGNvbWUgZnJvbSBnaXQsIHdpdGggYXV0b2dlbmVyYXRlZCBzbmFwc2hvdHMgc2hpcHBlZCBpbgorCWRpc3RyaWJ1dGVkIHRhcmJhbGxzLgorCisyMDE0LTAzLTE2ICBKb3NoIFRyaXBsZXR0ICA8am9zaEBqb3NodHJpcGxldHQub3JnPgorCisJQWRkIHN1cHBvcnQgZm9yIHN0ZGNhbGwsIHRoaXNjYWxsLCBhbmQgZmFzdGNhbGwgb24gbm9uLVdpbmRvd3MKKwl4ODYtMzIuCisKKwlMaW51eCBzdXBwb3J0cyB0aGUgc3RkY2FsbCBjYWxsaW5nIGNvbnZlbnRpb24sIGVpdGhlciB2aWEKKwlmdW5jdGlvbnMgZXhwbGljaXRseSBkZWNsYXJlZCB3aXRoIHRoZSBzdGRjYWxsIGF0dHJpYnV0ZSwgb3IgdmlhCisJY29kZSBjb21waWxlZCB3aXRoIC1tcnRkIHdoaWNoIGVmZmVjdGl2ZWx5IG1ha2VzIHN0ZGNhbGwgdGhlCisJZGVmYXVsdC4KKworCVRoaXMgaW50cm9kdWNlcyBGRklfU1REQ0FMTCwgRkZJX1RISVNDQUxMLCBhbmQgRkZJX0ZBU1RDQUxMIG9uCisJbm9uLVdpbmRvd3MgeDg2LTMyIHBsYXRmb3JtcywgYXMgbm9uLWRlZmF1bHQgY2FsbGluZyBjb252ZW50aW9ucy4KKworCSogTWFrZWZpbGUuYW06IENvbXBpbGUgaW4gc3JjL3g4Ni93aW4zMi5TIG9uIG5vbi1XaW5kb3dzIHg4Ni0zMi4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IEFkZCBGRklfU1REQ0FMTCwgRkZJX1RISVNDQUxMLCBhbmQKKwlGRklfRkFTVENBTEwgb24gbm9uLVdpbmRvd3MgeDg2LTMyLiAgSW5jcmVhc2UgdHJhbXBvbGluZSBzaXplIHRvCisJYWNjb21vZGF0ZSB0aGVzZSBjYWxsaW5nIGNvbnZlbnRpb25zLCBhbmQgdW5pZnkgc29tZSBpZmRlZmZlcnkuCisJKiBzcmMveDg2L2ZmaS5jOiBBZGQgc3VwcG9ydCBmb3IgRkZJX1NURENBTEwsIEZGSV9USElTQ0FMTCwgYW5kCisJRkZJX0ZBU1RDQUxMIG9uIG5vbi1XaW5kb3dzIHg4Ni0zMiBwbGF0Zm9ybXM7IHVwZGF0ZSBpZmRlZmZlcnkuCisJKiBzcmMveDg2L3dpbjMyLlM6IFN1cHBvcnQgY29tcGlsaW5nIG9uIG5vbi1XaW5kb3dzIHg4Ni0zMgorCXBsYXRmb3Jtcy4gIE9uIHRob3NlIHBsYXRmb3JtcywgYXZvaWQgcmVkZWZpbmluZyB0aGUgU1lTViBzeW1ib2xzCisJYWxyZWFkeSBwcm92aWRlZCBieSBzcmMveDg2L3N5c3YuUy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYzogUnVuIG9uIG5vbi1XaW5kb3dzLgorCSNkZWZpbmUgX19zdGRjYWxsIGlmIG5lZWRlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmM6IFJ1biBvbiBub24tV2luZG93cy4KKwkjZGVmaW5lIF9fZmFzdGNhbGwgaWYgbmVlZGVkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jOiBSdW4gb24gbm9uLVdpbmRvd3MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Ml93aW4zMi5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYzogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jOiBEaXR0by4KKworMjAxNC0wMy0xNiAgSm9zaCBUcmlwbGV0dCAgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KKworCSogcHJlcF9jaWYuYzogUmVtb3ZlIHVubmVjZXNzYXJ5IGlmZGVmIGZvciBYODZfV0lOMzIuCisJZmZpX3ByZXBfY2lmX2NvcmUgaGFkIGEgc3BlY2lhbCBjYXNlIGZvciBYODZfV0lOMzIsIGNoZWNraW5nIGZvcgorCUZGSV9USElTQ0FMTCBpbiBhZGRpdGlvbiB0byB0aGUgRkZJX0ZJUlNUX0FCSS10by1GRklfTEFTVF9BQkkKKwlyYW5nZSBiZWZvcmUgcmV0dXJuaW5nIEZGSV9CQURfQUJJLiAgSG93ZXZlciwgb24gWDg2X1dJTjMyLAorCUZGSV9USElTQ0FMTCBhbHJlYWR5IGZhbGxzIGluIHRoYXQgcmFuZ2UsIG1ha2luZyB0aGUgc3BlY2lhbCBjYXNlCisJdW5uZWNlc3NhcnkuICBSZW1vdmUgaXQuCisKKzIwMTQtMDMtMTYgIEpvc2ggVHJpcGxldHQgIDxqb3NoQGpvc2h0cmlwbGV0dC5vcmc+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jOiBSZW1vdmUgZnJhZ2lsZSBzdGFjaworCXBvaW50ZXIgY2hlY2tzLiAgVGhlc2UgZmlsZXMgaW5jbHVkZWQgaW5saW5lIGFzc2VtYmx5IHRvIHNhdmUgdGhlCisJc3RhY2sgcG9pbnRlciBiZWZvcmUgYW5kIGFmdGVyIHRoZSBjYWxsLCBhbmQgY29tcGFyZSB0aGUgdmFsdWVzLgorCUhvd2V2ZXIsIGNvbXBpbGVycyBjYW4gYW5kIGRvIGxlYXZlIHRoZSBzdGFjayBpbiBkaWZmZXJlbnQgc3RhdGVzCisJZm9yIHRoZXNlIHR3byBwaWVjZXMgb2YgaW5saW5lIGFzc2VtYmx5LCBzdWNoIGFzIGJ5IHNhdmluZyBhCisJdGVtcG9yYXJ5IHZhbHVlIG9uIHRoZSBzdGFjayBhY3Jvc3MgdGhlIGNhbGw7IG9ic2VydmVkIHdpdGggZ2NjCisJLU9zLCBhbmQgdmVyaWZpZWQgYXMgc3B1cmlvdXMgdGhyb3VnaCBjYXJlZnVsIGluc3BlY3Rpb24gb2YKKwlkaXNhc3NlbWJseS4KKworMjAxNC0wMy0xNiAgSm9zaCBUcmlwbGV0dCAgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYzogQXZvaWQgc3B1cmlvdXMgZmFpbHVyZSBkdWUgdG8KKwlleGNlc3MgZmxvYXRpbmctcG9pbnQgcHJlY2lzaW9uLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnlfd2luMzIuYzogRGl0dG8uCisKKzIwMTQtMDMtMTYgIEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KKworCSogbGlidG9vbC1sZGZsYWdzOiBSZS1hZGQuCisKKzIwMTQtMDMtMTYgIEpvc2ggVHJpcGxldHQgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KKworCSogTWFrZWZpbGUuaW4sIGFjbG9jYWwubTQsIGNvbXBpbGUsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwKKwljb25maWd1cmUsIGRlcGNvbXAsIGluY2x1ZGUvTWFrZWZpbGUuaW4sIGluc3RhbGwtc2gsCisJbGlidG9vbC1sZGZsYWdzLCBsdG1haW4uc2gsIG00L2xpYnRvb2wubTQsIG00L2x0b3B0aW9ucy5tNCwKKwltNC9sdHN1Z2FyLm00LCBtNC9sdHZlcnNpb24ubTQsIG00L2x0fm9ic29sZXRlLm00LAorCW1hbi9NYWtlZmlsZS5pbiwgbWRhdGUtc2gsIG1pc3NpbmcsIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogRGVsZXRlCisJYXV0b2dlbmVyYXRlZCBmaWxlcyBmcm9tIHZlcnNpb24gY29udHJvbC4KKwkqIC5naXRpZ25vcmU6IEFkZCBhdXRvZ2VuZXJhdGVkIGZpbGVzLgorCSogYXV0b2dlbi5zaDogTmV3IHNjcmlwdCB0byBnZW5lcmF0ZSB0aGUgYXV0b2dlbmVyYXRlZCBmaWxlcy4KKwkqIFJFQURNRTogRG9jdW1lbnQgcmVxdWlyZW1lbnQgdG8gcnVuIGF1dG9nZW4uc2ggd2hlbiBidWlsZGluZworCWRpcmVjdGx5IGZyb20gdmVyc2lvbiBjb250cm9sLgorCSogLnRyYXZpcy55bWw6IFJ1biBhdXRvZ2VuLnNoCisKKzIwMTQtMDMtMTQgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUsIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDE0LTAzLTEwICBNaWtlIEhvbW1leSA8bWgrbW96aWxsYUBnbGFuZGl1bS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWxsb3cgYnVpbGRpbmcgZm9yIG1pcHNlbCB3aXRoIEFuZHJvaWQgTkRLIHI4LgorCSogTWFrZWZpbGUuYW0gKEFNX01BS0VGTEFHUyk6IFJlcGxhY2UgZG91YmxlIHF1b3RlcyB3aXRoIHNpbmdsZQorCXF1b3Rlcy4KKworMjAxNC0wMy0xMCAgTGFuZHJ5IEJyZXVpbCA8bGFuZHJ5QG9wZW5ic2Qub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEVuc3VyZSB0aGUgbGlua2VyIHN1cHBvcnRzIEB1bndpbmQgc2VjdGlvbnMgaW4gbGliZmZpLgorCisyMDE0LTAzLTAxICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogUmVwbGFjZSBvbGQgc2NyaXB0cyB3aXRoCisJZ2VuZXJhdGUtZGFyd2luLXNvdXJjZS1hbmQtaGVhZGVycy5weS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDE0LTAyLTI4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChBTV9DRkxBR1MpOiBSZWludHJvZHVjZSBtaXNzaW5nIC1ERkZJX0RFQlVHIGZvcgorCS0tZW5hYmxlLWRlYnVnIGJ1aWxkcy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDE0LTAyLTI4ICBNYWtvdG8gS2F0byAgPG1fa2F0b0BnYTIuc28tbmV0Lm5lLmpwPgorCisJKiBzcmMvY2xvc3VyZXMuYzogRml4IGJ1aWxkIGZhaWx1cmUgd2hlbiB1c2luZyBjbGFuZyBmb3IgQW5kcm9pZC4KKworMjAxNC0wMi0yOCAgTWFyY2luIFdvamR5ciAgPHdvamR5ckBnbWFpbC5jb20+CisKKwkqIGxpYmZmaS5wYy5pbiAodG9vbGV4ZWNsaWJkaXIpOiB1c2UgLUwke3Rvb2xleGVjbGliZGlyfSBpbnN0ZWFkCisJb2YgLUwke2xpYmRpcn0uCisKKzIwMTQtMDItMjggIFBhdWxvIFBpemFycm8gIDxwYXVsby5waXphcnJvQGdtYWlsLmNvbT4KKworCSogc3JjL2JmaW4vc3lzdi5TOiBDYWxsaW5nIGZ1bmN0aW9ucyBpbiBzaGFyZWQgbGlicmFyaWVzIHJlcXVpcmVzCisJY29uc2lkZXJpbmcgdGhlIEdPVC4KKworMjAxNC0wMi0yOCAgSm9zaCBUcmlwbGV0dCAgPGpvc2hAam9zaHRyaXBsZXR0Lm9yZz4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChjbGFzc2lmeV9hcmd1bWVudCk6IEhhbmRsZSBjYXNlIHdoZXJlCisJRkZJX1RZUEVfTE9OR0RPVUJMRSA9PSBGRklfVFlQRV9ET1VCTEUuCisKKzIwMTQtMDItMjggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogbHRtYWluLnNoOiBHZW5lcmF0ZSB3aXRoIGxpYnRvb2wtMi40LjIuNDE4LgorCSogbTQvbGlidG9vbC5tNCwgbTQvbHRvcHRpb25zLm00LCBtNC9sdHZlcnNpb24ubTQ6IERpdHRvLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDE0LTAyLTI4ICBEb21pbmlrIFZvZ3QgIDx2b2d0QGxpbnV4LnZuZXQuaWJtLmNvbT4KKworCSogY29uZmlndXJlLmFjIChBQ19BUkdfRU5BQkxFIHN0cnVjdCk6IEZpeCB0eXBvIGluIGhlbHAKKwltZXNzYWdlLgorCShBQ19BUkdfRU5BQkxFIHJhd19hcGkpOiBEaXR0by4KKwkqIGNvbmZpZ3VyZSwgZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisKKzIwMTQtMDItMjggIFdpbGwgTmV3dG9uICA8d2lsbC5uZXd0b25AbGluYXJvLm9yZz4KKworCSogc3JjL2FybS9zeXN2LlM6IEluaXRpYWxpemUgSVAgcmVnaXN0ZXIgd2l0aCBGUC4KKworMjAxNC0wMi0yOCAgWXVmZW5nIFpoYW5nICA8eXVmZW5nLnpoYW5nQGFybS5jb20+CisKKwkqIHNyYy9hYXJjaDY0L3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IFVzZSB4MjkgYXMgdGhlCisJbWFpbiBDRkEgcmVnOyB1cGRhdGUgY2ZpX3JlbF9vZmZzZXQuCisKKzIwMTQtMDItMTUgIE1hcmN1cyBDb21zdGVkdCAgPG1hcmN1c0BtYy5wcC5zZT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYywgc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IFJlbW92ZQorCWFzc3VtcHRpb24gb24gY29udGVudHMgb2YgcjExIGluIGNsb3N1cmUuCisKKzIwMTQtMDItMDkgIEhlaWhlciAgPHJAaGV2LmNjPgorCisJKiBzcmMvbWlwcy9uMzIuUzogRml4IGNhbGwgZmxvYXRpbmcgcG9pbnQgdmEgZnVuY3Rpb24uCisKKzIwMTQtMDEtMjEgIFphY2hhcnkgV2FsZG93c2tpICA8emFjaEB3YWxkb3dza2kubWU+CisKKwkqIHNyYy9hYXJjaDY0L2ZmaS5jOiBGaXggbWlzc2luZyBzZW1pY29sb25zIG9uIGFzc2VydGlvbnMgdW5kZXIKKwlkZWJ1ZyBtb2RlLgorCisyMDEzLTEyLTMwICBaYWNoYXJ5IFdhbGRvd3NraSAgPHphY2hAd2FsZG93c2tpLm1lPgorCisJKiAuZ2l0aWdub3JlOiBFeGNsdWRlIGRhcndpbl8qIGdlbmVyYXRlZCBzb3VyY2UgYW5kIGJ1aWxkXyogdHJlZXMuCisJKiBzcmMvYWFyY2g2NC9mZmkuYywgc3JjL2FybS9mZmkuYywgc3JjL3g4Ni9mZmkuYzogSW5oaWJpdCBDbGFuZworCXByZXZpb3VzIHByb3RvdHlwZSB3YXJuaW5ncy4KKwkqIHNyYy9hcm0vZmZpLmM6IFByZXZlbnQgTlVMTCBkZXJlZmVyZW5jZSwgZml4IHNob3J0IHR5cGUgd2FybmluZworCSogc3JjL2RsbWFsbG9jLmM6IEZpeCB3YXJuaW5ncyBmcm9tIHNldF9zZWdtZW50X2ZsYWdzIHJldHVybiB0eXBlLAorCWFuZCB0aGUgbmF0aXZlIHVzZSBvZiBzaXplX3QgZm9yIG1hbGxvYyBvbiBwbGF0Zm9ybXMKKwkqIHNyYy9hcm0vc3lzdi5TOiBVc2UgdW5pZmllZCBzeW50YXguIENsYW5nIGNsZWFuLXVwcyBmb3IKKwlBUk1fRlVOQ19TVEFSVC4KKwkqIGdlbmVyYXRlLW9zeC1zb3VyY2UtYW5kLWhlYWRlcnMucHk6IFJlbW92ZS4KKwkqIGJ1aWxkLWlvcy5zaDogUmVtb3ZlLgorCSogbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IFJlYnVpbGQgdGFyZ2V0cy4gSW5jbHVkZQorCXg4Nl82NCthYXJjaDY0IHBpZWNlcyBpbiBsaWJyYXJ5LiAgRXhwb3J0IGhlYWRlcnMgcHJvcGVybHkuCisJKiBzcmMveDg2L2ZmaTY0LmM6IE1vcmUgQ2xhbmcgd2FybmluZyBjbGVhbi11cHMuCisJKiBzcmMvY2xvc3VyZXMuYyAob3Blbl90ZW1wX2V4ZWNfZmlsZV9kaXIpOiBVc2Ugc2l6ZV90LgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZl9jb3JlKTogQ2FzdCBBTElHTiByZXN1bHQuCisJKiBzcmMvYWFyY2g2NC9zeXN2LlM6IFVzZSBDTkFNRSBmb3IgZ2xvYmFsIHN5bWJvbHMuICBPbmx5IHVzZQorCS5zaXplIGZvciBFTEYgdGFyZ2V0cy4KKwkqIHNyYy9hYXJjaDY0L2ZmaS5jOiBDbGVhbiB1cCBmb3IgZG91YmxlID09IGxvbmcgZG91YmxlLiAgQ2xlYW4gdXAKKwlmcm9tIENsYW5nIHdhcm5pbmdzLiAgVXNlIENsYW5nIGNhY2hlIGludmFsaWRhdGlvbiBidWlsdGluLiAgVXNlCisJc2l6ZV90IGluIHBsYWNlIG9mIHVuc2lnbmVkIGluIG1hbnkgcGxhY2VzLiAgQWNjb21tb2RhdGUgZm9yCisJZGlmZmVyZW5jZXMgaW4gQXBwbGUgQUFyY2g2NCBBQkkuCisKKzIwMTMtMTItMDIgIERhbmllbCBSb2Ryw61ndWV6IFRyb2l0acOxbyAgPGRyb2RyaWd1ZXp0cm9pdGlub0B5YWhvby5lcz4KKworCSogZ2VuZXJhdGUtZGFyd2luLXNvdXJjZS1hbmQtaGVhZGVycy5weTogQ2xlYW4gdXAsIG1vZGVybml6ZSwKKwltZXJnZWQgdmVyc2lvbiBvZiBwcmV2aW91cyBzY3JpcHRzLgorCisyMDEzLTExLTIxICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuaW4sIGluY2x1ZGUvZmZpLmguaW4sCisJbWFuL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW4sIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCisyMDEzLTExLTIxICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbmV3IHNyYy9wb3dlcnBjIGZpbGVzLgorCShub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgPFBPV0VSUEMsIFBPV0VSUENfRlJFRUJTRD4pOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UKTogRGVmaW5lIGZvciBwb3dlcnBjLgorCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX3ByZXBfdHlwZXMpOiBEZWNsYXJlLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZl9jb3JlKTogQ2FsbCBmZmlfcHJlcF90eXBlcy4KKwkqIHNyYy90eXBlcy5jIChGRklfTk9OQ09OU1RfVFlQRURFRik6IERlZmluZSBhbmQgdXNlIGZvcgorCUhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVC4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9wb3dlcnBjLmg6IE5ldyBmaWxlLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IFNwbGl0IGludG8uLgorCSogc3JjL3Bvd2VycGMvZmZpX3N5c3YuYzogLi5uZXcgZmlsZSwgYW5kLi4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmM6IC4ubmV3IGZpbGUsIHJld3JpdGluZyBwYXJ0cy4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChlbnVtIGZmaV9hYmkpOiBSZXdyaXRlIHBvd2VycGMgQUJJCisJc2VsZWN0aW9uIGFzIGJpdHMgY29udHJvbGxpbmcgZmVhdHVyZXMuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IEZvciBjb25zaXN0ZW5jeSwgdXNlIFBPV0VSUEM2NCByYXRoZXIKKwl0aGFuIF9fcG93ZXJwYzY0X18uCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4gIE1vdmUgLm5vdGUuRk5VLXN0YWNrCisJaW5zaWRlIGd1YXJkLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMTMtMTEtMjAgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXBfY29yZSk6IFVzZQorCU5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0IGFuZCBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCBub3QgdGhlaXIKKwkzMi1iaXQgdmVyc2lvbnMgZm9yIDY0LWJpdCBjb2RlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IERvbid0IHVzZSB0aGUgcmV0dXJuIHZhbHVlIGFyZWEKKwlhcyBhIHBhcmFtZXRlciBzYXZlIGFyZWEgb24gRUxGdjIuCisKKzIwMTMtMTEtMTggIElhaW4gU2FuZG9lICA8aWFpbkBjb2Rlc291cmNlcnkuY29tPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUyAoRUgpOiBDb3JyZWN0IHVzZSBvZiBwY3JlbCBGREUgZW5jb2RpbmcuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TIChFSCk6IExpa2V3aXNlLiBNb2Rlcm5pc2UgcGljYmFzZQorCWxhYmVscy4KKworMjAxMy0xMS0xOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfY2FsbCk6IEhvaXN0IGRlY2xhcmF0aW9uIG9mIHRlbXAgdG8gdG9wIG9mCisJZnVuY3Rpb24uCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfY2xvc3VyZV9pbm5lcik6IE1vZGVyaXplIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCisJdG8gYXBwZWFzZSBjb21waWxlci4KKwlUaGFua3MgZm9yIEdyZWdvcnkgUC4gU21pdGggPGdyZWdAa3J5cHRvLm9yZz4uCisKKzIwMTMtMTEtMTggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogUkVBRE1FICh0ZXN0ZWQpOiBNZW50aW9uIFBvd2VyUEMgRUxGdjIuCisKKzIwMTMtMTEtMTYgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBNb3ZlIGVycmFudCAjZW5kaWYgdG8gd2hlcmUgaXQgYmVsb25ncy4KKwlEb24ndCBibCAuTHVpbnQxMjguCisKKzIwMTMtMTEtMTYgIEFsYW4gTW9kcmEgIDxhbW9kcmFAZ21haWwuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXBfY29yZSk6IFVzZSAjaWYgX0NBTExfRUxGCisJdGVzdCB0byBzZWxlY3QgcGFyYW1ldGVyIHNhdmUgc2l6aW5nIGZvciBFTEZ2MiB2cy4gRUxGdjEuCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoRkZJX1YyX1RZUEVfRkxPQVRfSE9NT0csCisJRkZJX1YyX1RZUEVfRE9VQkxFX0hPTU9HLCBGRklfVjJfVFlQRV9TTUFMTF9TVFJVQ1QpOiBEZWZpbmUuCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBEZWZpbmUgdmFyaWFudCBmb3IgRUxGdjIuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoRkxBR19BUkdfTkVFRFNfUFNBVkUpOiBEZWZpbmUuCisJKGRpc2NvdmVyX2hvbW9nZW5lb3VzX2FnZ3JlZ2F0ZSk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX3ByZXBfYXJnczY0KTogQWRqdXN0IHN0YXJ0IG9mIHBhcmFtIHNhdmUgYXJlYSBmb3IgRUxGdjIuCisJSGFuZGxlIGhvbW9nZW5vdXMgZmxvYXRpbmcgcG9pbnQgc3RydWN0IHBhcm1zLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcF9jb3JlKTogQWRqdXN0IHNwYWNlIGNhbGN1bGF0aW9uIGZvciBFTEZ2Mi4KKwlIYW5kbGUgRUxGdjIgcmV0dXJuIHZhbHVlcy4gIFNldCBGTEFHX0FSR19ORUVEU19QU0FWRS4gIEhhbmRsZQorCWhvbW9nZW5vdXMgZmxvYXRpbmcgcG9pbnQgc3RydWN0cy4KKwkoZmZpX2NhbGwpOiBJbmNyZWFzZSBzaXplIG9mIHNtc3RfYnVmZmVyIGZvciBFTEZ2Mi4gIEhhbmRsZSBFTEZ2Mi4KKwkoZmx1c2hfaWNhY2hlKTogQ29tcGlsZSBmb3IgRUxGdjIuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogU2V0IHVwIEVMRnYyIHRyYW1wb2xpbmUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogRG9uJ3QgcmV0dXJuIGFsbCBzdHJ1Y3RzIGRpcmVjdGx5CisJdG8gY2FsbGVyLiAgSGFuZGxlIGhvbW9nZW5vdXMgZmxvYXRpbmcgcG9pbnQgc3RydWN0cy4gIEhhbmRsZQorCUVMRnYyIHN0cnVjdCByZXR1cm4gdmFsdWVzLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogU2V0IHVwIHIyIGZvcgorCUVMRnYyLiAgQWRqdXN0IHRvYyBzYXZlIGxvY2F0aW9uLiAgQ2FsbCBmdW5jdGlvbiBwb2ludGVyIHVzaW5nCisJcjEyLiAgSGFuZGxlIEZMQUdfUkVUVVJOU19TTVNULiAgRG9uJ3QgcHJlZGljdCBicmFuY2hlcy4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChmZmlfY2xvc3VyZV9MSU5VWDY0KTogU2V0IHVwIHIyCisJZm9yIEVMRnYyLiAgRGVmaW5lIEVMRnYyIHZlcnNpb25zIG9mIFNUQUNLRlJBTUUsIFBBUk1TQVZFLCBhbmQKKwlSRVRWQUwuICBIYW5kbGUgcG9zc2libHkgbWlzc2luZyBwYXJhbWV0ZXIgc2F2ZSBhcmVhLiAgSGFuZGxlCisJRUxGdjIgcmV0dXJuIHZhbHVlcy4KKwkoLm5vdGUuR05VLXN0YWNrKTogTW92ZSBpbnNpZGUgb3V0ZXIgI2lmZGVmLgorCisyMDEzLTExLTE2ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogUmV2ZXJ0IDIwMTMtMDItMDgKKwljaGFuZ2UuICBEbyBub3QgY29uc3VtZSBhbiBpbnQgYXJnIHdoZW4gcmV0dXJuaW5nIGEgc21hbGwgc3RydWN0CisJZm9yIEZGSV9TWVNWIEFCSS4KKwkoZmZpX2NhbGwpOiBPbmx5IHVzZSBib3VuY2UgYnVmZmVyIHdoZW4gRkxBR19SRVRVUk5TX1NNU1QuCisJUHJvcGVybHkgY29weSBib3VuY2UgYnVmZmVyIHRvIGRlc3RpbmF0aW9uLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBSZXZlcnQgMjAxMy0wMi0wOCBjaGFuZ2UuCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBSZW1vdmUgc3RyYXkgJysnLgorCisyMDEzLTExLTE2ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3M2NCk6IEFsaWduIHN0cnVjdCBwYXJhbWV0ZXJzCisJYWNjb3JkaW5nIHRvIF9fU1RSVUNUX1BBUk1fQUxJR05fXy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXBfY29yZSk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IExpa2V3aXNlLgorCisyMDEzLTExLTE2ICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvbGludXg2NC5TIChmZmlfY2FsbF9MSU5VWDY0KTogVHdlYWsgcmVzdG9yZSBvZiByMjguCisJKC5ub3RlLkdOVS1zdGFjayk6IE1vdmUgaW5zaWRlIG91dGVyICNpZmRlZi4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIChTVEFDS0ZSQU1FLCBQQVJNU0FWRSwKKwlSRVRWQUwpOiBEZWZpbmUgYW5kIHVzZSB0aHJvdWdob3V0LgorCShmZmlfY2xvc3VyZV9MSU5VWDY0KTogU2F2ZSBmcHJzIGJlZm9yZSBidXlpbmcgc3RhY2suCisJKC5ub3RlLkdOVS1zdGFjayk6IE1vdmUgaW5zaWRlIG91dGVyICNpZmRlZi4KKworMjAxMy0xMS0xNiAgQWxhbiBNb2RyYSAgPGFtb2RyYUBnbWFpbC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChGRklfVEFSR0VUX1NQRUNJRklDX1ZBUklBRElDKTogRGVmaW5lLgorCShGRklfRVhUUkFfQ0lGX0ZJRUxEUyk6IERlZmluZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzNjQpOiBTYXZlIGZwcnMgYXMgcGVyIHRoZQorCUFCSSwgbm90IHRvIGJvdGggZnByIGFuZCBwYXJhbSBzYXZlIGFyZWEuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwX2NvcmUpOiBSZW5hbWVkIGZyb20gZmZpX3ByZXBfY2lmX21hY2hkZXAuCisJS2VlcCBpbml0aWFsIGZsYWdzLiAgRm9ybWF0dGluZy4gIFJlbW92ZSBkZWFkIEZGSV9MSU5VWF9TT0ZUX0ZMT0FUCisJY29kZS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXAsIGZmaV9wcmVwX2NpZl9tYWNoZGVwX3Zhcik6IE5ldyBmdW5jdGlvbnMuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogUGFzcyBmbG9hdGluZyBwb2ludCBhcyBwZXIgQUJJLAorCW5vdCB0byBib3RoIGZwciBhbmQgcGFyYW1ldGVyIHNhdmUgYXJlYXMuCisKKwkqIGxpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jIChtYWluKTogQ29ycmVjdAorCWZ1bmN0aW9uIGNhc3QgYW5kIGRvbid0IGNhbGwgZmZpX3ByZXBfY2lmLgorCSogbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jIChtYWluKTogTGlrZXdpc2UuCisKKzIwMTMtMTEtMTUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBkb2MvbGliZmZpLnRleGkgKENsb3N1cmUgRXhhbXBsZSk6IEZpeCB0aGUgc2FtcGxlIGNvZGUuCisJKiBkb2MvbGliZmZpLmluZm8sIGRvYy9zdGFtcC12dGksIGRvYy92ZXJzaW9uLnRleGk6IFJlYnVpbHQuCisKKzIwMTMtMTEtMTUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0MS5jIChtYWluKTogRml4IGJyb2tlbiB0ZXN0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50X3ZhLmMgKGNsc19yZXRfVF9mbik6IExpa2V3aXNlCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYyAodGVzdF9mbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhXzEuYyAobWFpbik6IExpa2V3aXNlLgorCisyMDEzLTExLTE0ICBEYXZpZCBTY2huZWlkZXIgIDxkYXZpZC5zY2huZWlkZXJAYml2YWIuZGU+CisKKwkqIHNyYy9hcm0vZmZpLmM6IEZpeCByZWdpc3RlciBhbGxvY2F0aW9uIGZvciBtaXhlZCBmbG9hdCBhbmQKKwlkb3VibGVzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tYW55X21peGVkX2Zsb2F0X2RvdWJsZS5jOiBUZXN0Y2FzZQorCWZvciBtYW55IG1peGVkIGZsb2F0IGFuZCBkb3VibGUgYXJndW1lbnRzLgorCisyMDEzLTExLTEzICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogZG9jL2xpYmZmaS50ZXhpIChTaW1wbGUgRXhhbXBsZSk6IENvcnJlY3QgZXhhbXBsZSBjb2RlLgorCSogZG9jL2xpYmZmaS5pbmZvLCBkb2Mvc3RhbXAtdnRpLCBkb2MvdmVyc2lvbi50ZXhpOiBSZWJ1aWx0LgorCisyMDEzLTExLTEzICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBSZXNwZWN0IEhBVkVfQUxMT0NBX0ggZm9yIEdOVSBjb21waWxlcgorCWJhc2VkIGJ1aWxkLiAoVGhhbmtzIHRvIHRtcjExMTExNiBvbiBnaXRodWIpCisKKzIwMTMtMTEtMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogbTQvbGlidG9vbC5tNDogUmVmcmVzaC4KKwkqIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBSRUFETUU6IEFkZCBtb3JlIG5vdGVzIGFib3V0IG5leHQgcmVsZWFzZS4KKworMjAxMy0xMS0wOSAgU2hpZ2VoYXJ1IFRBS0VOTyAgPHNoaWdlQGllZS5uaWl0LmFjLmpwPgorCisJKiBtNC9heF9nY2NfYXJjaGZsYWcubTQgKGF4X2djY19hcmNoKTogRG9uJ3QgcmVjb2duaXplCisJVWx0cmFTUEFSQy1JSWkgYXMgdWx0cmFzcGFyYzMuCisKKzIwMTMtMTEtMDYgIE1hcmsgS2V0dGVuaXMgIDxrZXR0ZW5pc0BnbnUub3JnPgorCisJKiBzcmMveDg2L2ZyZWVic2QuUyAoZmZpX2NhbGxfU1lTVik6IEFsaWduIHRoZSBzdGFjayBwb2ludGVyIHRvCisgICAgICAgIDE2LWJ5dGVzLgorCisyMDEzLTExLTA2ICBLb25zdGFudGluIEJlbG91c292IDxraWJAZnJlZWJzZC5vcmc+CisKKwkqIHNyYy94ODYvZnJlZWJzZC5TIChmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE1hcmsgdGhlIGFzc2VtYmxlcgorCXNvdXJjZSBhcyBub3QgcmVxdWlyaW5nIGV4ZWN1dGFibGUgc3RhY2suCisKKzIwMTMtMTEtMDIgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogZG9jL2xpYmZmaS50ZXhpIChUaGUgQmFzaWNzKTogQ2xhcmlmeSByZXR1cm4gdmFsdWUgYnVmZmVyIHNpemUKKwlyZXF1aXJlbWVudHMuICBBbHNvLCBOVUxMIHJlc3VsdCBidWZmZXIgcG9pbnRlcnMgYXJlIG5vIGxvbmdlcgorCXN1cHBvcnRlZC4KKwkqIGRvYy9saWJmZmkuaW5mbzogUmVidWlsdC4KKworMjAxMy0xMS0wMiAgTWlzY2hhIEpvbmtlciAgPG1qb25rZXJAc3lub3BzeXMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogRml4IGJ1aWxkIGVycm9yLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTMtMTEtMDIgIERhdmlkIFNjaG5laWRlciAgPGRhdmlkLnNjaG5laWRlckBiaXZhYi5kZT4KKworCSogc3JjL2FybS9mZmkuYzogbW9yZSByb2J1c3QgYXJndW1lbnQgaGFuZGxpbmcgZm9yIGNsb3N1cmVzIG9uIGFybSBoYXJkZmxvYXQKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X21peGVkLmM6IE5ldyBmaWxlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tYW55X21peGVkX2FyZ3MuYzogTW9yZSB0ZXN0cy4KKworMjAxMy0xMS0wMiAgVml0YWx5IEJ1ZG92c2tpCisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRG9uJ3QgYWxpZ24gc3RhY2sgZm9yIHdpbjMyLgorCisyMDEzLTEwLTIzICBNYXJrIEggV2VhdmVyICA8bWh3QG5ldHJpcy5vcmc+CisKKwkqIHNyYy9taXBzL2ZmaS5jOiBGaXggaGFuZGxpbmcgb2YgdWludDMyX3QgYXJndW1lbnRzIG9uIHRoZQorCU1JUFMgTjMyIEFCSS4KKworMjAxMy0xMC0xMyAgU2FuZHJhIExvb3NlbW9yZSAgPHNhbmRyYUBjb2Rlc291cmNlcnkuY29tPgorCisJKiBSRUFETUU6IEFkZCBOaW9zIElJIHRvIHRhYmxlIG9mIHN1cHBvcnRlZCBwbGF0Zm9ybXMuCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBuaW9zMiBmaWxlcy4KKwkobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZWQuCisJKiBjb25maWd1cmUuYWMgKG5pb3MyKi1saW51eCopOiBOZXcgaG9zdC4KKwkoTklPUzIpOiBBZGQgQU1fQ09ORElUSU9OQUwuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCSogc3JjL25pb3MyL2ZmaS5jOiBOZXcuCisJKiBzcmMvbmlvczIvZmZpdGFyZ2V0Lmg6IE5ldy4KKwkqIHNyYy9uaW9zMi9zeXN2LlM6IE5ldy4KKwkqIHNyYy9wcmVwX2NpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IEhhbmRsZSBleHRyYSBzdHJ1Y3R1cmUKKwlhbGlnbm1lbnQgdmlhIEZGSV9BR0dSRUdBVEVfQUxJR05NRU5ULgorCShmZmlfcHJlcF9jaWZfY29yZSk6IENvbmRpdGlvbmFsaXplIHN0cnVjdHVyZSByZXR1cm4gZm9yIE5JT1MyLgorCisyMDEzLTEwLTEwICBTYW5kcmEgTG9vc2Vtb3JlICA8c2FuZHJhQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbWFueV9taXhlZF9hcmdzLmMgKGNsc19yZXRfZG91YmxlX2ZuKToKKwlGaXggdW5pbml0aWFsaXplZCB2YXJpYWJsZS4KKworMjAxMy0xMC0xMSAgTWFyY3VzIFNoYXdjcm9mdCAgPG1hcmN1cy5zaGF3Y3JvZnRAYXJtLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYyAobWFueSk6IFJlcGxhY2UgKiB3aXRoICsuCisKKzIwMTMtMTAtMDggIE9uZMWZZWogQsOtbGthICA8bmVsZWFpQHNlem5hbS5jej4KKworCSogc3JjL2FhcmNoNjQvZmZpLmMsIHNyYy9hYXJjaDY0L3N5c3YuUywgc3JjL2FybS9mZmkuYywKKwlzcmMvYXJtL2dlbnRyYW1wLnNoLCBzcmMvYmZpbi9zeXN2LlMsIHNyYy9jbG9zdXJlcy5jLAorCXNyYy9kbG1hbGxvYy5jLCBzcmMvaWE2NC9mZmkuYywgc3JjL21pY3JvYmxhemUvZmZpLmMsCisJc3JjL21pY3JvYmxhemUvc3lzdi5TLCBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TLAorCXNyYy9wb3dlcnBjL2ZmaS5jLCBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMsIHNyYy9zaC9mZmkuYywKKwlzcmMvdGlsZS90aWxlLlMsIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTEuYzogRml4CisJc3BlbGxpbmcgZXJyb3JzLgorCisyMDEzLTEwLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGFjbG9jYWwubTQsIGNvbXBpbGUsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgZGVwY29tcCwKKwlpbnN0YWxsLXNoLCBtZGF0ZS1zaCwgbWlzc2luZywgdGV4aW5mby50ZXg6IFVwZGF0ZSBmcm9tIHVwc3RyZWFtLgorCSogY29uZmlndXJlLmFjOiBVcGRhdGUgdmVyc2lvbiB0byAzLjAuMTQtcmMwLgorCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuaW4sCisJbWFuL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBSRUFETUU6IE1lbnRpb24gTTg4SyBhbmQgVkFYLgorCisyMDEzLTA3LTE1ICBNaW9kIFZhbGxhdCAgPG1pb2RAb3BlbmJzZC5vcmc+CisKKwkqIE1ha2VmaWxlLmFtLAorCWNvbmZpZ3VyZS5hYywKKwlzcmMvbTg4ay9mZmkuYywKKwlzcmMvbTg4ay9mZml0YXJnZXQuaCwKKwlzcmMvbTg4ay9vYnNkLlMsCisJc3JjL3ZheC9lbGZic2QuUywKKwlzcmMvdmF4L2ZmaS5jLAorCXNyYy92YXgvZmZpdGFyZ2V0Lmg6IEFkZCBtODhrIGFuZCB2YXggc3VwcG9ydC4KKworMjAxMy0wNi0yNCBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IE1vdmUgdmFyIGRlY2xhcmF0aW9uCisJYmVmb3JlIHN0YXRlbWVudHMuCisJKGZmaV9wcmVwX2FyZ3M2NCk6IFN1cHBvcnQgbGl0dGxlLWVuZGlhbi4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YsIGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IExpa2V3aXNlLgorCisyMDEzLTA2LTEyICBNaXNjaGEgSm9ua2VyICA8bWpvbmtlckBzeW5vcHN5cy5jb20+CisKKwkgKiBjb25maWd1cmUuYWM6IEFkZCBzdXBwb3J0IGZvciBBUkMuCisJICogTWFrZWZpbGUuYW06IExpa2V3aXNlLgorCSAqIFJFQURNRTogQWRkIEFSQyBkZXRhaWxzLgorCSAqIHNyYy9hcmMvYXJjb21wYWN0LlM6IE5ldy4KKwkgKiBzcmMvYXJjL2ZmaS5jOiBMaWtld2lzZS4KKwkgKiBzcmMvYXJjL2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKworMjAxMy0wMy0yOCAgRGF2aWQgU2NobmVpZGVyICA8ZGF2aWQuc2NobmVpZGVyQGJpdmFiLmRlPgorCisJICogc3JjL2FybS9mZmkuYzogRml4IHN1cHBvcnQgZm9yIEFSTSBoYXJkLWZsb2F0IGNhbGxpbmcgY29udmVudGlvbi4KKwkgKiBzcmMvYXJtL3N5c3YuUzogY2FsbCBkaWZmZXJlbnQgbWV0aG9kcyBmb3IgU1lTViBhbmQgVkZQIEFCSXMuCisJICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tYW55X21peGVkX2FyZ3MuYzogdGVzdGNhc2UgZm9yIGEgY2xvc3VyZSB3aXRoCisJIG1peGVkIGFyZ3VtZW50cywgbWFueSBkb3VibGVzLgorCSAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X2RvdWJsZS5jOiB0ZXN0Y2FzZSBmb3IgY2FsbGluZyBhIGZ1bmN0aW9uIHVzaW5nCisJIG1vcmUgdGhhbiA4IGRvdWJsZXMuCisJICogdGVzdGNhc2UvbGliZmZpLmNhbGwvbWFueS5jOiB1c2UgYWJzb2x1dGUgdmFsdWUgdG8gY2hlY2sgcmVzdWx0IGFnYWluc3QgYW4KKwkgZXBzaWxvbgorCisyMDEzLTAzLTE3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIFJFQURNRTogVXBkYXRlIGZvciAzLjAuMTMuCisJKiBjb25maWd1cmUuYWM6IERpdHRvLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogZG9jLyo6IFVwZGF0ZSB2ZXJzaW9uLgorCisyMDEzLTAzLTE3ICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCSogc3JjL2Nsb3N1cmVzLmMgKGlzX2VtdXRyYW1wX2VuYWJsZWQKKwlbIUZGSV9NTUFQX0VYRUNfRU1VVFJBTVBfUEFYXSk6IE1vdmUgZGVmYXVsdCBkZWZpbml0aW9uIG91dHNpZGUKKwllbmNsb3NpbmcgI2lmIHNjb3BlLgorCisyMDEzLTAzLTE3ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogT25seSBtb2RpZnkgdG9vbGV4ZWNkaXIgaW4gY2VydGFpbiBjYXNlcy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMy0wMy0xNiAgR2lsbGVzIFRhbGlzICA8Z2lsbGVzLnRhbGlzQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IERvbid0IHVzZQorCWZwYXJnX2NvdW50LGV0YyBvbiBfX05PX0ZQUlNfXyB0YXJnZXRzLgorCisyMDEzLTAzLTE2ICBBbGFuIEhvdXJpaGFuZSAgPGFsYW5oQGZhaXJsaXRlLmNvLnVrPgorCisJKiBzcmMvbTY4ay9zeXN2LlMgKGVwaWxvZ3VlKTogRG9uJ3QgdXNlIGV4dGIgaW5zdHJ1Y3Rpb24gb24KKwltNjgwMDAwIG1hY2hpbmVzLgorCisyMDEzLTAzLTE2ICBBbGV4IEdheW5vciA8YWxleC5nYXlub3JAZ21haWwuY29tPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFsd2F5cyBhbGlnbiBzdGFjay4KKworMjAxMy0wMy0xMyAgTWFya29zIENoYW5kcmFzIDxtYXJrb3MuY2hhbmRyYXNAaW1ndGVjLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBBZGQgc3VwcG9ydCBmb3IgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzIE1ldGEuCisJKiBNYWtlZmlsZS5hbTogTGlrZXdpc2UuCisJKiBSRUFETUU6IEFkZCBJbWFnaW5hdGlvbiBUZWNobm9sb2dpZXMgTWV0YSBkZXRhaWxzLgorCSogc3JjL21ldGFnL2ZmaS5jOiBOZXcuCisJKiBzcmMvbWV0YWcvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgorCSogc3JjL21ldGFnL3N5c3YuUzogTGlrZXdpc2UuCisKKzIwMTMtMDItMjQgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQGxpbnV4LW02OGsub3JnPgorCisJKiBkb2MvbGliZmZpLnRleGkgKFN0cnVjdHVyZXMpOiBGaXggbWlzc2luZyBjYXRlZ29yeSBhcmd1bWVudCBvZgorCUBkZWZ0cC4KKworMjAxMy0wMi0xMSAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIHJlbGVhc2UgbnVtYmVyIHRvIDMuMC4xMi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIFJFQURNRTogVXBkYXRlIHJlbGVhc2UgaW5mby4KKworMjAxMy0wMi0xMCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIFJFQURNRTogQWRkIE1veGllLgorCSogc3JjL21veGllL2ZmaS5jOiBDcmVhdGVkLgorCSogc3JjL21veGllL2VhYmkuUzogQ3JlYXRlZC4KKwkqIHNyYy9tb3hpZS9mZml0YXJnZXQuaDogQ3JlYXRlZC4KKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgTW94aWUuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIE1veGllLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IERpc2FibGUgZm9ybWF0IHN0cmluZworCXdhcm5pbmdzIGZvciBtb3hpZSotKi1lbGYgdGVzdHMuCisKKzIwMTMtMDItMTAgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoTFRMREZMQUdTKTogRml4IHJlZmVyZW5jZS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDEzLTAyLTEwICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogUkVBRE1FOiBVcGRhdGUgc3VwcG9ydGVkIHBsYXRmb3Jtcy4gIFVwZGF0ZSB0ZXN0IHJlc3VsdHMgbGluay4KKworMjAxMy0wMi0wOSAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYzogUmVtb3ZlIGZvcmNlZCAtTzIuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTIuYyAoZm9vKTogUmVtb3ZlIEdDQ2lzbS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IEFkZCBkZWZhdWx0IFBSSXVQVFIgZGVmaW5pdGlvbi4KKworCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jbG9zdXJlX3Y4KTogSW1wb3J0IGFuY2llbnQgdWxvbmdsb25nCisJY2xvc3VyZSByZXR1cm4gdHlwZSBmaXggZGV2ZWxvcGVkIGJ5IE1hcnRpbiB2LiBMw7Z3aXMgZm9yIGNweXRob24KKwlmb3JrLgorCisyMDEzLTAyLTA4ICBBbmRyZWFzIFRvYmxlciAgPGFuZHJlYXN0QGZnem5ldC5jaD4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4IHNtYWxsIHN0cnVjdAorCXN1cHBvcnQuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IERpdHRvLgorCisyMDEzLTAyLTA4ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmM6IFJlbW92ZSB4ZmFpbCBmb3IKKwlhcm0qLSotKi4KKworMjAxMy0wMi0wOCAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGaXggY2FjaGUgZmx1c2hpbmcgZm9yIEdDQy4KKworMjAxMy0wMi0wOCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIG1hbi9mZmlfcHJlcF9jaWYuMzogQ2xlYW4gdXAgZm9yIGRlYmlhbiBsaW50ZXIuCisKKzIwMTMtMDItMDggIFBldGVyIEJlcmduZXIgIDxiZXJnbmVyQHZuZXQuaWJtLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IEFjY291bnQgZm9yIEZQIGFyZ3MgcHVzaGVkCisJb24gdGhlIHN0YWNrLgorCisyMDEzLTAyLTA4ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbWlzc2luZyBmaWxlcy4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IERpdHRvLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTMtMDItMDggIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IE1vdmUgc3BhcmMgYXNtIGNvbmZpZyBjaGVja3MgdG8gd2l0aGluIGZ1bmN0aW9ucworCWZvciBjb21wYXRpYmlsaXR5IHdpdGggc3VuIHRvb2xzLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZsdXNoIGNhY2hlIG9uIHY5CisJc3lzdGVtcy4KKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfZmx1c2hfaWNhY2hlKTogSW1wbGVtZW50IGEgc3BhcmMgdjkgY2FjaGUKKwlmbHVzaGVyLgorCisyMDEzLTAyLTA4ICBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorCisJKiBzcmMvbWljcm9ibGF6ZS9mZmkuYyAoZmZpX2Nsb3N1cmVfY2FsbF9TWVNWKTogRml4IGhhbmRsaW5nIG9mCisJc21hbGwgYmlnLWVuZGlhbiBzdHJ1Y3R1cmVzLgorCShmZmlfcHJlcF9hcmdzKTogRGl0dG8uCisKKzIwMTMtMDItMDcgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2NhbGxfdjgpOiBGaXggdHlwbyBmcm9tIGxhc3QgcGF0Y2gKKwkoZWZmZWN0aXZlbHkgaGlkaW5nIGZmaV9jYWxsX3Y4KS4KKworMjAxMy0wMi0wNyAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogVXBkYXRlIGJ1ZyByZXBvcnRpbmcgYWRkcmVzcy4KKwkqIGNvbmZpZ3VyZS5pbjogUmVidWlsZC4KKworCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9mbHVzaF9pY2FjaGUpOiBPdXQtb2YtbGluZSBjYWNoZSBmbHVzaGVyIGZvcgorCVN1biBjb21waWxlci4KKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX2NhbGwpOiBSZW1vdmUgd2FybmluZy4KKwlDYWxsIGZmaV9mbHVzaF9pY2FjaGUgZm9yIG5vbi1HQ0MgYnVpbGRzLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFVzZSBmZmlfZmx1c2hfaWNhY2hlLgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBsaWJ0b29sLWxkZmxhZ3MuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGxpYnRvb2wtbGRmbGFnczogTmV3IGZpbGUuCisKKzIwMTMtMDItMDcgIERhbmllbCBTY2hlcGxlciA8ZHNjaGVwbGVyQGdtYWlsLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBDb3JyZWN0bHkgaWRlbnRpZnkgeDMyIHN5c3RlbXMgYXMgNjQtYml0LgorCSogbTQvbGlidG9vbC5tNDogUmVtb3ZlIGxpYnRvb2wgZXhwciBlcnJvci4KKwkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMy0wMi0wNyAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogRml4IEdDQyB1c2FnZSB0ZXN0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogUkVBRE1FOiBNZW50aW9uIExMVk0vR0NDIHg4Nl82NCBpc3N1ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMy0wMi0wNyAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMgKG1haW4pOiBSZXBsYWNlIC8vIHN0eWxlCisJY29tbWVudHMgd2l0aCAvKiAqLyBmb3IgeGxjIGNvbXBpbGVyLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X2xhcmdlLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXRfdmEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMgKG1haW4pOiBEaXR0by4KKworMjAxMy0wMi0wNiAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIG1hbi9mZmlfcHJlcF9jaWYuMzogQ2xlYW4gdXAgZm9yIGRlYmlhbiBsaW50aWFuIGNoZWNrZXIuCisKKzIwMTMtMDItMDYgIEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBNYWtlZmlsZS5hbSAocGtnY29uZmlnZGlyKTogQWRkIG1pc3NpbmcgcGtnY29uZmlnIGluc3RhbGwgYml0cy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWxkLgorCisyMDEzLTAyLTAyICBNYXJrIEggV2VhdmVyIDxtaHdAbmV0cmlzLm9yZz4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfY2FsbCk6IFNpZ24tZXh0ZW5kIGludGVnZXIgYXJndW1lbnRzIHBhc3NlZAorCXZpYSBnZW5lcmFsIHB1cnBvc2UgcmVnaXN0ZXJzLgorCisyMDEzLTAxLTIxICBOYXRoYW4gUm9zc2kgPG5hdGhhbi5yb3NzaUB4aWxpbnguY29tPgorCisJKiBSRUFETUU6IEFkZCBNaWNyb0JsYXplIGRldGFpbHMuCisJKiBNYWtlZmlsZS5hbTogQWRkIE1pY3JvQmxhemUgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBzcmMvbWljcm9ibGF6ZS9mZmkuYzogTmV3LgorCSogc3JjL21pY3JvYmxhemUvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgorCSogc3JjL21pY3JvYmxhemUvc3lzdi5TOiBMaWtld2lzZS4KKworMjAxMy0wMS0yMSAgTmF0aGFuIFJvc3NpIDxuYXRoYW4ucm9zc2lAeGlsaW54LmNvbT4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYzogRml4ZWQgaXNzdWUuCisKKzIwMTMtMDEtMjEgIENocmlzIFphbmtlbCAgIDxjaHJpc0B6YW5rZWwubmV0PgorCisJKiBSRUFETUU6IEFkZCBYdGVuc2Egc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmFtOiBMaWtld2lzZS4KKwkqIGNvbmZpZ3VyZS5hYzogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKwkqIHNyYy9wcmVwX2NpZi5jOiBIYW5kbGUgWHRlbnNhLgorCSogc3JjL3h0ZW5zYTogTmV3IGRpcmVjdG9yeS4KKwkqIHNyYy94dGVuc2EvZmZpLmM6IE5ldyBmaWxlLgorCSogc3JjL3h0ZW5zYS9mZml0YXJnZXQuaDogRGl0dG8uCisJKiBzcmMveHRlbnNhL3N5c3YuUzogRGl0dG8uCisKKzIwMTMtMDEtMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogUmVwbGFjZSAvLyBzdHlsZQorCWNvbW1lbnRzIHdpdGggLyogKi8gZm9yIHhsYyBjb21waWxlci4KKwkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9BSVgpOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggKGFsbG9jYXRlX21tYXApOiBEZWxldGUKKwlkZXByZWNhdGVkIGlubGluZSBmdW5jdGlvbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IERpdHRvLgorCSogUkVBRE1FOiBBZGQgdXBkYXRlIGZvciBBSVggc3VwcG9ydC4KKworMjAxMy0wMS0xMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBjb25maWd1cmUuYWM6IFJvYnVzdGlmeSBwYyByZWxhdGl2ZSByZWxvYyBjaGVjay4KKwkqIG00L2F4X2NjX21heG9wdC5tNDogRG9uJ3QgLW1hbGlnbi1kb3VibGUuICBUaGlzIGlzIGFuIEFCSQorCWNoYW5naW5nIG9wdGlvbiBmb3IgMzItYml0IHg4Ni4KKwkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIFJFQURNRTogVXBkYXRlIHN1cHBvcnRlZCB0YXJnZXQgbGlzdC4KKworMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBSRUFETUUgKHRlc3RlZCk6IEFkZCBDb21waWxlciBjb2x1bW4gdG8gdGFibGUuCisKKzIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChzdHJ1Y3QgcmVnaXN0ZXJfYXJncyk6IE1ha2Ugc3NlIGFycmF5IGFuZCBhcnJheQorCW9mIHVuaW9ucyBmb3Igc3VucHJvIGNvbXBpbGVyIGNvbXBhdGliaWxpdHkuCisKKzIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBUZXN0IHRhcmdldCBwbGF0Zm9ybSBzaXplX3Qgc2l6ZS4gIEhhbmRsZSBib3RoIDMyCisJYW5kIDY0LWJpdCBidWlsZHMgZm9yIHg4Nl82NC0qIGFuZCBpPzg2LSogdGFyZ2V0cyAoYWxsb3dpbmcgZm9yCisJQ0ZMQUcgb3B0aW9uIHRvIGNoYW5nZSBkZWZhdWx0IHNldHRpbmdzKS4KKwkqIGNvbmZpZ3VyZSwgYWNsb2NhbC5tNDogUmVidWlsdC4KKworMjAxMy0wMS0xMCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IE9ubHkgcnVuIGV4Y2VwdGlvbgorCWhhbmRsaW5nIHRlc3RzIHdoZW4gdXNpbmcgR05VIGNvbXBpbGVyLgorCisJKiBtNC9heF9jb21waWxlcl92ZW5kb3IubTQ6IE5ldyBmaWxlLgorCSogY29uZmlndXJlLmFjOiBUZXN0IGZvciBjb21waWxlciB2ZW5kb3IgYW5kIGRvbid0IHVzZQorCUFYX0NGTEFHU19XQVJOX0FMTCB3aXRoIHRoZSBzdW4gY29tcGlsZXIuCisJKiBhY2xvY2FsLm00LCBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTMtMDEtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogaW5jbHVkZS9mZmlfY29tbW9uLmg6IERvbid0IHVzZSBHQ0Npc21zIHRvIGRlZmluZSB0eXBlcyB3aGVuCisJYnVpbGRpbmcgd2l0aCB0aGUgU1VOUFJPIGNvbXBpbGVyLgorCisyMDEzLTAxLTEwICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogUHV0IGxvY2FsLmV4cCBpbiB0aGUgcmlnaHQgcGxhY2UuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKwkqIHNyYy94ODYvZmZpLmM6IFVwZGF0ZSBjb21tZW50IGFib3V0IHJlZ3Bhcm0gZnVuY3Rpb24gYXR0cmlidXRlcy4KKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogVGhlIFNVTlBSTyBjb21waWxlciByZXF1aXJlcworCXRoYXQgYWxsIGZ1bmN0aW9uIGFyZ3VtZW50cyBiZSBwYXNzZWQgb24gdGhlIHN0YWNrIChubyByZWdwYXJtCisJc3VwcG9ydCkuCisKKzIwMTMtMDEtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBHZW5lcmF0ZSBsb2NhbC5leHAuICBUaGlzIHNldHMgQ0NfRk9SX1RBUkdFVAorCXdoZW4gd2UgYXJlIHVzaW5nIHRoZSB2ZW5kb3IgY29tcGlsZXIuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuYW0gKEVYVFJBX0RFSkFHTlVfU0lURV9DT05GSUcpOiBQb2ludCB0bworCS4uL2xvY2FsLmV4cC4KKwkqIGNvbmZpZ3VyZSwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IFJ1biB0ZXN0cyB3aXRoIGRpZmZlcmVudAorCW9wdGlvbnMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgdXNpbmcgZ2NjIG9yIHRoZQorCXZlbmRvciBjb21waWxlci4KKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLmV4cCAobGliZmZpLWluaXQpOiBTZXQgdXNpbmdfZ2NjIGJhc2VkIG9uCisJd2hldGhlciBvciBub3Qgd2UgYXJlIGJ1aWxkaW5nL3Rlc3Rpbmcgd2l0aCBnY2MuCisKKzIwMTMtMDEtMDggIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBTd2l0Y2ggeDg2IHNvbGFyaXMgdGFyZ2V0IHRvIFg4NiBieSBkZWZhdWx0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDEzLTAxLTA4ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogRml4IHRlc3QgZm9yIHJlYWQtb25seSBlaF9mcmFtZS4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMy0wMS0wOCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMveDg2L3N5c3YuUywgc3JjL3g4Ni91bml4NjQuUzogT25seSBlbWl0IERXQVJGIHVud2luZCBpbmZvCisJd2hlbiBidWlsZGluZyB3aXRoIHRoZSBHTlUgdG9vbGNoYWluLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCAoQ0hFQ0spOiBGaXggZm9yIFNvbGFyaXMgdmVuZG9yCisJY29tcGlsZXIuCisKKzIwMTMtMDEtMDcgIFRob3JzdGVuIEdsYXNlciA8dGdAbWlyYnNkLm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhcl92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0X3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhXzEuYzogVGVzdHN1aXRlIGZpeGVzLgorCisyMDEzLTAxLTA3ICBUaG9yc3RlbiBHbGFzZXIgPHRnQG1pcmJzZC5vcmc+CisKKwkqIHNyYy9tNjhrL2ZmaS5jIChDSUZfRkxBR1NfU0lOVDgsIENJRl9GTEFHU19TSU5UMTYpOiBEZWZpbmUuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4IDgtYml0IGFuZCAxNi1iaXQgc2lnbmVkIGNhbGxzLgorCSogc3JjL202OGsvc3lzdi5TIChmZmlfY2FsbF9TWVNWLCBmZmlfY2xvc3VyZV9TWVNWKTogRGl0dG8uCisKKzIwMTMtMDEtMDQgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEFNX0NGTEFHUyk6IERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIC1mZXhjZXB0aW9ucworCWFuZCAtV2FsbC4gIFRoaXMgaXMgc2V0IGluIHRoZSBjb25maWd1cmUgc2NyaXB0IGFmdGVyIHRlc3RpbmcgZm9yCisJR0NDLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTMtMDEtMDIgIHJvZmwwciA8aHR0cHM6Ly9naXRodWIuY29tL3JvZmwwcj4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4IGJ1aWxkIGVycm9yIG9uIHBwYworCXdoZW4gbG9uZyBkb3VibGUgPT0gZG91YmxlLgorCisyMDEzLTAxLTAyICBSZWluaSBVcmJhbiAgPHJ1cmJhbkB4LXJheS5hdD4KKworCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9MREZMQUdTKTogQWRkIC1uby11bmRlZmluZWQgdG8gTERGTEFHUworCShyZXF1aXJlZCBmb3Igc2hhcmVkIGxpYnMgb24gY3lnd2luL21pbmd3KS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDEyLTEwLTMxICBBbGFuIE1vZHJhICA8YW1vZHJhQGdtYWlsLmNvPgorCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUzogQWRkIG5ldyBBQkkgc3VwcG9ydC4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUzogTGlrZXdpc2UuCisKKzIwMTItMTAtMzAgIE1hZ251cyBHcmFuYmVyZyAgPHpvcnJ5QGdlbnRvby5vcmc+CisJICAgIFBhdmVsIExhYnVzaGV2ICA8cGF2ZWwubGFidXNoZXZAcnVuYm94LnJ1PgorCisJKiBjb25maWd1cmUuYWM6IE5ldyBvcHRpb25zIHBheF9lbXV0cmFtcAorCSogY29uZmlndXJlLCBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZWQKKwkqIHNyYy9jbG9zdXJlcy5jOiBOZXcgZnVuY3Rpb24gZW11dHJhbXBfZW5hYmxlZF9jaGVjaygpIGFuZAorCWNoZWNrcy4KKworMjAxMi0xMC0zMCAgRnJlZGVyaWNrIENoZXVuZyAgPGZyZWRlcmljay5jaGV1bmdAZ21haWwuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEVuYWJsZSBGRklfTUFQX0VYRUNfV1JJVCBmb3IgRGFyd2luIDEyIChtb3VudGFpbgorCWxpb24pIGFuZCBmdXR1cmUgdmVyc2lvbi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsZC4KKworMjAxMi0xMC0zMCAgSmFtZXMgR3JlZW5oYWxnaCAgPGphbWVzLmdyZWVuaGFsZ2ggYXQgYXJtLmNvbT4KKyAgICAgICAgICAgIE1hcmN1cyBTaGF3Y3JvZnQgIDxtYXJjdXMuc2hhd2Nyb2Z0IGF0IGFybS5jb20+CisKKyAgICAgICAgKiBSRUFETUU6IEFkZCBkZXRhaWxzIG9mIGFhcmNoNjQgcG9ydC4KKyAgICAgICAgKiBzcmMvYWFyY2g2NC9mZmkuYzogTmV3LgorICAgICAgICAqIHNyYy9hYXJjaDY0L2ZmaXRhcmdldC5oOiBMaWtld2lzZS4KKyAgICAgICAgKiBzcmMvYWFyY2g2NC9zeXN2LlM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuYW06IFN1cHBvcnQgYWFyY2g2NC4KKwkqIGNvbmZpZ3VyZS5hYzogU3VwcG9ydCBhYXJjaDY0LgorCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMi0xMC0zMCAgSmFtZXMgR3JlZW5oYWxnaCAgPGphbWVzLmdyZWVuaGFsZ2ggYXQgYXJtLmNvbT4KKyAgICAgICAgICAgIE1hcmN1cyBTaGF3Y3JvZnQgIDxtYXJjdXMuc2hhd2Nyb2Z0IGF0IGFybS5jb20+CisKKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS5leHA6IEFkZCBzdXBwb3J0IGZvciBhYXJjaDY0LgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jOiBOZXcuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhcl92YS5jOiBMaWtld2lzZS4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnRfdmEuYzogTGlrZXdpc2UuCisgICAgICAgICogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ192YS5jOiBMaWtld2lzZS4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydF92YS5jOiBMaWtld2lzZS4KKyAgICAgICAgKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDExLmM6IExpa2V3aXNlLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC91bmluaXRpYWxpemVkLmM6IExpa2V3aXNlLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV8xLmM6IExpa2V3aXNlLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QyLmM6IExpa2V3aXNlLgorICAgICAgICAqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorCisyMDEyLTEwLTEyICBXYWx0ZXIgTGVlICA8d2FsdEB0aWxlcmEuY29tPgorCisgICAgICAgICogTWFrZWZpbGUuYW06IEFkZCBUSUxFLUd4L1RJTEVQcm8gc3VwcG9ydC4KKyAgICAgICAgKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgorICAgICAgICAqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorICAgICAgICAqIGNvbmZpZ3VyZTogTGlrZXdpc2UuCisgICAgICAgICogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZl9jb3JlKTogSGFuZGxlIFRJTEUtR3gvVElMRVByby4KKyAgICAgICAgKiBzcmMvdGlsZTogTmV3IGRpcmVjdG9yeS4KKyAgICAgICAgKiBzcmMvdGlsZS9mZmkuYzogTmV3IGZpbGUuCisgICAgICAgICogc3JjL3RpbGUvZmZpdGFyZ2V0Lmg6IERpdHRvLgorICAgICAgICAqIHNyYy90aWxlL3RpbGUuUzogRGl0dG8uCisKKzIwMTItMTAtMTIgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBnZW5lcmF0ZS1vc3gtc291cmNlLWFuZC1oZWFkZXJzLnB5OiBOb3JtYWxpemUgd2hpdGVzcGFjZS4KKworMjAxMi0wOS0xNCAgRGF2aWQgRWRlbHNvaG4gIDxkamUuZ2NjQGdtYWlsLmNvbT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworMjAxMi0wOC0yNiAgQW5kcmV3IFBpbnNraSAgPGFwaW5za2lAY2F2aXVtLmNvbT4KKworCVBSIGxpYmZmaS81MzAxNAorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWxsb3cgbjMyIHdpdGggc29mdC1mbG9hdCBhbmQgbjY0IHdpdGgKKwlzb2Z0LWZsb2F0LgorCisyMDEyLTA4LTA4ICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorCisJKiBzcmMvczM5MC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEb24ndCBBU1NFUlQgQUJJIHRlc3QsCisJanVzdCByZXR1cm4gRkZJX0JBRF9BQkkgd2hlbiB0aGluZ3MgYXJlIHdyb25nLgorCisyMDEyLTA3LTE4ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwlQUiBsaWJmZmkvNTM5ODIKKwlQUiBsaWJmZmkvNTM5NzMKKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IENoZWNrIF9fSUxQMzJfXyBpbnN0ZWFkIG9mIF9fTFA2NF9fIGZvciB4MzIuCisJKEZGSV9TSVpFT0ZfSkFWQV9SQVcpOiBEZWZpbmVkIHRvIDQgZm9yIHgzMi4KKworMjAxMi0wNS0xNiAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCisyMDEyLTA1LTA1ICBOaWNvbGFzIExlbG9uZworCisJKiBsaWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRml4ZXMuCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgaU9TIGJ1aWxkcy4KKworMjAxMi0wNC0yMyAgQWxleGFuZHJlIEtldW5lY2tlIEkuIGRlIE1lbmRvbmNhIDxhbGV4YW5kcmUua2V1bmVja2VAZ21haWwuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBCbGFja2Zpbi9zeXN2IHN1cHBvcnQKKwkqIE1ha2VmaWxlLmFtOiBBZGQgQmxhY2tmaW4vc3lzdiBzdXBwb3J0CisJKiBzcmMvYmZpbi9mZmkuYzogIEFkZCBCbGFja2Zpbi9zeXN2IHN1cHBvcnQKKwkqIHNyYy9iZmluL2ZmaXRhcmdldC5oOiBBZGQgQmxhY2tmaW4vc3lzdiBzdXBwb3J0CisKKzIwMTItMDQtMTEgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgbmV3IHNjcmlwdC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDEyLTA0LTExICBaYWNoYXJ5IFdhbGRvd3NraSAgPHp3YWxkb3dza2lAZ21haWwuY29tPgorCisJKiBnZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5LAorCWxpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBTdXBwb3J0IGEgTWFjIHN0YXRpYyBsaWJyYXJ5IHZpYQorCVhjb2RlLiBTZXQgaU9TIGNvbXBhdGliaWxpdHkgdG8gNC4wLiAgTW92ZSBpT1MgdHJhbXBvbGluZQorCWdlbmVyYXRpb24gaW50byBhbiBYY29kZSAicnVuIHNjcmlwdCIgcGhhc2UuICBJbmNsdWRlIGJvdGggYXMKKwlYY29kZSBidWlsZCBzY3JpcHRzLiBEb24ndCBhbHdheXMgcmVnZW5lcmF0ZSBjb25maWcgZmlsZXMuCisKKzIwMTItMDQtMTAgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogQWRkIG1pc3Npbmcgc2VtaWNvbG9uLgorCisyMDEyLTA0LTA2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIG5ldyBpT1MveGNvZGUgZmlsZXMuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKworMjAxMi0wNC0wNiAgTWlrZSBMZXdpcyAgPG1pa2VsaWtlc3BpZUBnbWFpbC5jb20+CisKKwkqIGdlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHk6IE5ldyBmaWxlLgorCSogbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IE5ldyBmaWxlLgorCSogUkVBRE1FOiBVcGRhdGUgaW5zdHJ1Y3Rpb25zIG9uIGJ1aWxkaW5nIGlPUyBiaW5hcnkuCisJKiBidWlsZC1pb3Muc2g6IERlbGV0ZS4KKworMjAxMi0wNC0wNiAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKFVJTlQxMjgpOiBEZWZpbmUgZGlmZmVyZW50bHkgZm9yIEludGVsIGFuZCBHTlUKKwljb21waWxlcnMsIHRoZW4gdXNlIGl0LgorCisyMDEyLTA0LTA2ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwkqIG00L2xpYnRvb2wubTQgKF9MVF9FTkFCTEVfTE9DSyk6IFN1cHBvcnQgeDMyLgorCisyMDEyLTA0LTA2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBtaXNzaW5nIHRlc3QgY2FzZXMuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTItMDQtMDUgIFphY2hhcnkgV2FsZG93c2tpICA8endhbGRvd3NraUBnbWFpbC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBtaXNzaW5nIHRyYW1wb2xpbmUgdGFibGUgZmllbGRzLgorCSogc3JjL2FybS9zeXN2LlM6IEZpeCBFTlRSWSBkZWZpbml0aW9uLCBhbmQgd3JhcCBzeW1ib2wgcmVmZXJlbmNlcworCWluIENOQU1FLgorCSogc3JjL3g4Ni9mZmkuYzogV3JhcCBXaW5kb3dzIHNwZWNpZmljIGNvZGUgaW4gaWZkZWZzLgorCisyMDEyLTA0LTAyICBQZXRlciBCZXJnbmVyICA8YmVyZ25lckB2bmV0LmlibS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBEZWNsYXJlIGRvdWJsZV90bXAuCisJU2lsZW5jZSBjYXN0aW5nIHBvaW50ZXIgdG8gaW50ZWdlciBvZiBkaWZmZXJlbnQgc2l6ZSB3YXJuaW5nLgorCURlbGV0ZSBnb3RvIHRvIHByZXZpb3VzbHkgZGVsZXRlZCBsYWJlbC4KKwkoZmZpX2NhbGwpOiBTaWxlbmNlIHBvc3NpYmx5IHVuZGVmaW5lZCB3YXJuaW5nLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IERlY2xhcmUgdmFyaWFibGUgdHlwZS4KKworMjAxMi0wNC0wMiAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jYWxsX3dpbjMyKTogU2lnbi96ZXJvIGV4dGVuZCB0aGUgcmV0dXJuCisJdmFsdWUgaW4gdGhlIEludGVsIHZlcnNpb24gYXMgaXMgYWxyZWFkeSBkb25lIGZvciB0aGUgQVQmVCB2ZXJzaW9uLgorCShmZmlfY2xvc3VyZV9TWVNWKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX1NURENBTEwpOiBMaWtld2lzZS4KKworMjAxMi0wMy0yOSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCk6IFVuaWZ5IHRoZSBmcmFtZQorCWdlbmVyYXRpb24sIGZpeCB0aGUgRU5EUCBsYWJlbCBhbmQgcmVtb3ZlIHRoZSBzdXJwbHVzIHRoaXJkIGFyZworCWZyb20gdGhlICdsZWEnIGluc24uCisKKzIwMTItMDMtMjkgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogc3JjL3g4Ni93aW4zMi5TIChmZmlfY2xvc3VyZV9yYXdfU1lTVik6IE1ha2UgdGhlICdzdHVicmF3JyBsYWJlbAorCXZpc2libGUgb3V0c2lkZSB0aGUgUFJPQywgc28gdGhhdCBmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwgY2FuIHNlZQorCWl0LiAgQWxzbyBpbnN0cnVjdCB0aGUgYXNzZW1ibGVyIHRvIGFkZCBhIGZyYW1lIHRvIHRoZSBmdW5jdGlvbi4KKworMjAxMi0wMy0yMyAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fQ1BQRkxBR1MpOiBBZGQgLURGRklfQlVJTERJTkcuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGluY2x1ZGUvZmZpLmguaW4gW01TVkNdOiBBZGQgX19kZWNsc3BlYyhkbGxpbXBvcnQpIGRlY29yYXRpb25zCisJdG8gYWxsIGRhdGEgZXhwb3J0cywgd2hlbiBjb21waWxpbmcgbGliZmZpIGNsaWVudHMgdXNpbmcgTVNWQy4KKworMjAxMi0wMy0yOSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQWRkIG5ldyBBQkkgRkZJX01TX0NERUNMIGFuZAorCW1ha2UgaXQgdGhlIGRlZmF1bHQgZm9yIE1TVkMuCisJKEZGSV9UWVBFX01TX1NUUlVDVCk6IE5ldyBzdHJ1Y3R1cmUgcmV0dXJuIGNvbnZlbnRpb24uCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFR3ZWFrIHRoZSBzdHJ1Y3R1cmUKKwlyZXR1cm4gY29udmVudGlvbiBmb3IgRkZJX01TX0NERUNMIHRvIGJlIEZGSV9UWVBFX01TX1NUUlVDVAorCWluc3RlYWQgb2YgYW4gb3JkaW5hcnkgRkZJX1RZUEVfU1RSVUNULgorCShmZmlfcHJlcF9hcmdzKTogVHJlYXQgRkZJX1RZUEVfTVNfU1RSVUNUIGFzIEZGSV9UWVBFX1NUUlVDVC4KKwkoZmZpX2NhbGwpOiBMaWtld2lzZS4KKwkoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogTGlrZXdpc2UuCisJKGZmaV9yYXdfY2FsbCk6IExpa2V3aXNlLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFRyZWF0IEZGSV9NU19DREVDTCBhcyBGRklfU1lTVi4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEZvciBGRklfVFlQRV9NU19TVFJVQ1QsCisJcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgcmVzdWx0IHN0cnVjdHVyZSBpbiBlYXggYW5kIGRvbid0IHBvcAorCXRoYXQgcG9pbnRlciBmcm9tIHRoZSBzdGFjaywgdGhlIGNhbGxlciB0YWtlcyBjYXJlIG9mIGl0LgorCShmZmlfY2FsbF93aW4zMik6IFRyZWF0IEZGSV9UWVBFX01TX1NUUlVDVCBhcyBGRklfVFlQRV9TVFJVQ1QuCisJKGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTGlrZXdpc2UuCisKKzIwMTItMDMtMjIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jIFtNU1ZDXTogQWRkIGlubGluZQorCWFzc2VtYmx5IHZlcnNpb24gd2l0aCBJbnRlbCBzeW50YXguCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV90aGlzY2FsbC5jIFtNU1ZDXTogTGlrZXdpc2UuCisKKzIwMTItMDMtMjMgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogUHJvdmlkZSBhYnN0cmF0aW9uIG9mCisJX19hdHRyaWJ1dGVfXygoZmFzdGNhbGwpKSBpbiB0aGUgZm9ybSBvZiBhIF9fRkFTVENBTExfXworCWRlZmluZS4gIERlZmluZSBpdCB0byBfX2Zhc3RjYWxsIGZvciBNU1ZDLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jOiBVc2UgdGhlIGFib3ZlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMl93aW4zMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMl93aW4zMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYzogTGlrZXdpc2UuCisKKzIwMTItMDMtMjIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogc3JjL3g4Ni93aW4zMi5TIFtNU1ZDXSAoZmZpX2Nsb3N1cmVfVEhJU0NBTEwpOiBSZW1vdmUgdGhlIG1hbnVhbAorCWZyYW1lIG9uIGZ1bmN0aW9uIGVudHJ5LCBNQVNNIGFkZHMgb25lIGF1dG9tYXRpY2FsbHkuCisKKzIwMTItMDMtMjIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCBbTVNWQ106IEFkZCBrbHVkZ2UgZm9yIG1pc3NpbmcKKwliaXRzIGluIHRoZSBNU1ZDIGhlYWRlcnMuCisKKzIwMTItMDMtMjIgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogQWRqdXN0IHRvIHRoZSBDODkgc3R5bGUKKwl3aXRoIG5vIGRlY2xhcmF0aW9ucyBhZnRlciBzdGF0ZW1lbnRzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvaHVnZV9zdHJ1Y3QuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q3LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDguYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC90ZXN0Y2xvc3VyZS5jOiBMaWtld2lzZS4KKworMjAxMi0wMy0yMSAgUGV0ZXIgUm9zaW4JIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXRfdmEuYyAoZmxvYXRfdmFfZm4pOiBVc2UgJWYgd2hlbgorCXByaW50aW5nIGRvdWJsZXMgKCVsZiBpcyBmb3IgbG9uZyBkb3VibGVzKS4KKwkobWFpbik6IExpa2V3aXNlLgorCisyMDEyLTAzLTIxICBQZXRlciBSb3NpbiAgPHBlZGFAbHlzYXRvci5saXUuc2U+CisKKwkqIHRlc3RzdWl0ZS9saWIvdGFyZ2V0LWxpYnBhdGguZXhwIFsqLSotY3lnd2luKiwgKi0qLW1pbmd3Kl0KKwkoc2V0X2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IEFkZCB0aGUgbGlicmFyeSBzZWFyY2ggZGlyIHRvIFBBVEgKKwkoYW5kIHNhdmUgUEFUSCBmb3IgbGF0ZXIpLgorCShyZXN0b3JlX2xkX2xpYnJhcnlfcGF0aF9lbnZfdmFycyk6IFJlc3RvcmUgUEFUSC4KKworMjAxMi0wMy0yMSAgUGV0ZXIgUm9zaW4gIDxwZWRhQGx5c2F0b3IubGl1LnNlPgorCisJKiB0ZXN0c3VpdGUvbGliL3RhcmdldC1saWJwYXRoLmV4cCBbKi0qLWN5Z3dpbiosICotKi1taW5ndypdCisJKHNldF9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBBZGQgdGhlIGxpYnJhcnkgc2VhcmNoIGRpciB0byBQQVRICisJKGFuZCBzYXZlIFBBVEggZm9yIGxhdGVyKS4KKwkocmVzdG9yZV9sZF9saWJyYXJ5X3BhdGhfZW52X3ZhcnMpOiBSZXN0b3JlIFBBVEguCisKKzIwMTItMDMtMjAgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYyAobWFpbik6IFJlbW92ZSBidWcuCisJKiBzcmMveDg2L3dpbjMyLlMgW01TVkNdIChmZmlfY2xvc3VyZV9TWVNWKTogTWFrZSB0aGUgJ3N0dWInIGxhYmVsCisJdmlzaWJsZSBvdXRzaWRlIHRoZSBQUk9DLCBzbyB0aGF0IGZmaV9jbG9zdXJlX1RISVNDQUxMIGNhbiBzZWUgaXQuCisKKzIwMTItMDMtMjAgIFBldGVyIFJvc2luICA8cGVkYUBseXNhdG9yLmxpdS5zZT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYyAobWFpbik6IFJlbW92ZSBidWcuCisJKiBzcmMveDg2L3dpbjMyLlMgW01TVkNdIChmZmlfY2xvc3VyZV9TWVNWKTogTWFrZSB0aGUgJ3N0dWInIGxhYmVsCisJdmlzaWJsZSBvdXRzaWRlIHRoZSBQUk9DLCBzbyB0aGF0IGZmaV9jbG9zdXJlX1RISVNDQUxMIGNhbiBzZWUgaXQuCisKKzIwMTItMDMtMTkgIEFsYW4gSG91cmloYW5lICA8YWxhbmhAZmFpcmxpdGUuY28udWs+CisKKwkqIHNyYy9tNjhrL2ZmaS5jOiBBZGQgTUlOVCBzdXBwb3J0LgorCSogc3JjL202OGsvc3lzdi5TOiBEaXR0by4KKworMjAxMi0wMy0wNiAgQ2h1bmctTGluIFRhbmcgIDxjbHRhbmdAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogc3JjL2FybS9mZmkuYyAoZmZpX2NhbGwpOiBBZGQgX19BUk1fRUFCSV9fIGd1YXJkIGFyb3VuZCBjYWxsIHRvCisJZmZpX2NhbGxfVkZQKCkuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWRkIF9fQVJNX0VBQklfXyBndWFyZCBhcm91bmQgdXNlIG9mCisJZmZpX2Nsb3N1cmVfVkZQLgorCSogc3JjL2FybS9zeXN2LlM6IEFkZCBfX0FSTV9FQUJJX18gZ3VhcmQgYXJvdW5kIFZGUCBjb2RlLgorCisyMDEyLTAzLTE5ICBjaGVubmFtICA8Y3NpdEBheHdheS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBGaXggQUlYIGNsb3N1cmUKKwlzdXBwb3J0LgorCisyMDEyLTAzLTEzICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERvbid0IEFTU0VSVCBBQkkgdGVzdCwKKwlqdXN0IHJldHVybiBGRklfQkFEX0FCSSB3aGVuIHRoaW5ncyBhcmUgd3JvbmcuCisJKiBzcmMvc2g2NC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KKworMjAxMi0wMy0wOSAgRGF2aWQgRWRlbHNvaG4gIDxkamUuZ2NjQGdtYWlsLmNvbT4KKworCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfQVNNKTogQWRqdXN0IGZvciBEYXJ3aW42NAorCWNoYW5nZSB0byByZXR1cm4gdmFsdWUgb2YgZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTiBhbmQgbG9hZCB0eXBlCisJZnJvbSByZXR1cm4gdHlwZS4KKworMjAxMi0wMy0wMyAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9jYWxsKTogQ2FzdCB0aGUgcmV0dXJuIHZhbHVlIHRvIHVuc2lnbmVkCisJbG9uZy4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBDYXN0IHRvIDY0Yml0IGFkZHJlc3MgaW4gdHJhbXBvbGluZS4KKwkoZmZpX2Nsb3N1cmVfdW5peDY0X2lubmVyKTogQ2FzdCByZXR1cm4gcG9pbnRlciB0byB1bnNpZ25lZCBsb25nCisJZmlyc3QuCisKKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKEZGSV9TSVpFT0ZfQVJHKTogRGVmaW5lZCB0byA4IGZvciB4MzIuCisJKGZmaV9hcmcpOiBTZXQgdG8gdW5zaWduZWQgbG9uZyBsb25nIGZvciB4MzIuCisJKGZmaV9zYXJnKTogU2V0IHRvIGxvbmcgbG9uZyBmb3IgeDMyLgorCisyMDEyLTAzLTAzICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWZfY29yZSk6IFByb3Blcmx5IGNoZWNrIGJhZCBBQkkuCisKKzIwMTItMDMtMDMgIEFuZG9uaSBNb3JhbGVzIEFsYXN0cnVleSAgPHlsYXR1eWFAZ21haWwuY29tPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCAtbm8tdW5kZWZpbmVkIGZvciBib3RoIDMyLSBhbmQgNjQtYml0IHg4NgorCXdpbmRvd3MtbGlrZSBob3N0cy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMi0wMi0yNyAgTWlrYWVsIFBldHRlcnNzb24gIDxtaWtwZUBpdC51dS5zZT4KKworCVBSIGxpYmZmaS81MjIyMworCSogTWFrZWZpbGUuYW0gKEZMQUdTX1RPX1BBU1MpOiBEZWZpbmUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAxMi0wMi0yMyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBzcmMvKi9mZml0YXJnZXQuaDogRW5zdXJlIHRoYXQgdXNlcnMgbmV2ZXIgaW5jbHVkZSBmZml0YXJnZXQuaAorCWRpcmVjdGx5LgorCisyMDEyLTAyLTIzICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KKworCVBSIGxpYmZmaS81MjIyMQorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMKTogTmV3CisJcHJvdG90eXBlLgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZV9sb2MpOiBVc2UgZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMIGZvcgorCXRoaXNjYWxsLWNvbnZlbnRpb24uCisJKGZmaV9yYXdfY2FsbCk6IFVzZSBmZmlfcHJlcF9hcmdzX3Jhdy4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMKTogQWRkCisJaW1wbGVtZW50YXRpb24gZm9yIHN0dWIuCisKKzIwMTItMDItMTAgIEthaSBUaWV0eiAgPGt0aWV0ekByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWMgKEFNX0xUTERGTEFHUyk6IEFkZCAtbm8tdW5kZWZpbmUgZm9yIHg2NAorCXdpbmRvd3MgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKworMjAxMi0wMi0wOCAgS2FpIFRpZXR6ICA8a3RpZXR6QHJlZGhhdC5jb20+CisKKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBBbGxvdyBmb3IgWDg2X1dJTjMyCisJYWxzbyBGRklfVEhJU0NBTEwuCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9USElTQ0FMTCk6IEFkZCBwcm90b3R5cGUuCisJKEZGSV9JTklUX1RSQU1QT0xJTkVfVEhJU0NBTEwpOiBOZXcgdHJhbXBvbGluZSBjb2RlLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFkZCBGRklfVEhJU0NBTEwgc3VwcG9ydC4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0LmggKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBBZGp1c3Qgc2l6ZS4KKwkqIHNyYy94ODYvd2luMzIuUyAoZmZpX2Nsb3N1cmVfVEhJU0NBTEwpOiBOZXcgY2xvc3VyZSBjb2RlCisJZm9yIHRoaXNjYWxsLWNhbGxpbmcgY29udmVudGlvbi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmM6IE5ldyB0ZXN0LgorCisyMDEyLTAxLTI4ICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KKworCSogc3JjL2xpYmZmaS9zcmMveDg2L2ZmaS5jIChmZmlfY2FsbF93aW4zMik6IEFkZCBuZXcKKwlhcmd1bWVudCB0byBwcm90b3R5cGUgZm9yIHNwZWNpZnkgY2FsbGluZy1jb252ZW50aW9uLgorCShmZmlfY2FsbCk6IEFkZCBzdXBwb3J0IGZvciBzdGRjYWxsL3RoaXNjYWxsIGNvbnZlbnRpb24uCisJKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KKwkoZmZpX3Jhd19jYWxsKTogTGlrZXdpc2UuCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQWRkIEZGSV9USElTQ0FMTCBhbmQKKwlGRklfRkFTVENBTEwuCisJKiBzcmMveDg2L3dpbjMyLlMgKF9mZmlfY2FsbF93aW4zMik6IEFkZCBzdXBwb3J0IGZvcgorCWZhc3RjYWxsL3RoaXNjYWxsIGNhbGxpbmctY29udmVudGlvbiBjYWxscy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYzogTmV3IHRlc3QuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmM6IE5ldyB0ZXN0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jOiBOZXcgdGVzdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmM6IE5ldyB0ZXN0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyX3dpbjMyLmM6IE5ldyB0ZXN0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYzogTmV3IHRlc3QuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ml93aW4zMi5jOiBOZXcgdGVzdC4KKworMjAxMi0wMS0yMyAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KKworCSogc3JjL2FscGhhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IENoZWNrIGZvciBiYWQgQUJJLgorCisyMDEyLTAxLTIzICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisJICAgIENocmlzIFlvdW5nICA8Y2R5b3VuZ0BudGx3b3JsZC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIEFtaWdhIHN1cHBvcnQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTItMDEtMjMgIERtaXRyeSBOYWRlemhpbiAgPGRtaXRyeS5uYWRlemhpbkBnbWFpbC5jb20+CisKKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChMSUtFTFksIFVOTElLRUxZKTogRml4IGRlZmluaXRpb25zLgorCisyMDEyLTAxLTIzICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBsaW51eC1tNjhrLm9yZz4KKworCSogc3JjL202OGsvc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogUHJvcGVybHkgdGVzdCBmb3IgcGxhaW4KKwltYzY4MDAwLiAgVGVzdCBmb3IgX19IQVZFXzY4ODgxX18gaW4gYWRkaXRpb24gdG8gX19NQzY4ODgxX18uCisKKzIwMTItMDEtMTkgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJUFIgcnRsLW9wdGltaXphdGlvbi80ODQ5NgorCSogc3JjL2lhNjQvZmZpLmMgKGZmaV9jYWxsKTogRml4IHVwIGFsaWFzaW5nIHZpb2xhdGlvbnMuCisKKzIwMTItMDEtMDkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuYWMgKGk/ODYtKi0qKTogU2V0IFRBUkdFVCB0byBYODZfNjQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMTEtMTItMDcgIEFuZHJldyBQaW5za2kgIDxhcGluc2tpQGNhdml1bS5jb20+CisKKwlQUiBsaWJmZmkvNTAwNTEKKwkqIHNyYy9taXBzL24zMi5TOiBBZGQgIi5zZXQgbWlwczQiLgorCisyMDExLTExLTIxICBBbmRyZWFzIFRvYmxlciAgPGFuZHJlYXN0QGZnem5ldC5jaD4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDExLTExLTEyICBEYXZpZCBHaWxiZXJ0IDxkYXZpZC5naWxiZXJ0QGxpbmFyby5vcmc+CisKKwkqIGRvYy9saWJmZmkudGV4aSwgaW5jbHVkZS9mZmkuaC5pbiwgaW5jbHVkZS9mZmlfY29tbW9uLmgsCisJbWFuL01ha2VmaWxlLmFtLCBtYW4vZmZpLjMsIG1hbi9mZmlfcHJlcF9jaWYuMywKKwltYW4vZmZpX3ByZXBfY2lmX3Zhci4zLCBzcmMvYXJtL2ZmaS5jLCBzcmMvYXJtL2ZmaXRhcmdldC5oLAorCXNyYy9jcmlzL2ZmaS5jLCBzcmMvcHJlcF9jaWYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdF92YS5jOiBNYW55IGNoYW5nZXMgdG8gc3VwcG9ydCB2YXJpYWRpYworCWZ1bmN0aW9uIGNhbGxzLgorCisyMDExLTExLTEyICBLeWxlIE1vZmZldHQgPEt5bGUuRC5Nb2ZmZXR0QGJvZWluZy5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jLCBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCwKKwlzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TLCBzcmMvcG93ZXJwYy9zeXN2LlM6IE1hbnkgY2hhbmdlcyBmb3IKKwlzb2Z0ZmxvYXQgcG93ZXJwYyB2YXJpYW50cy4KKworMjAxMS0xMS0xMiAgUGV0ciBTYWxpbmdlciA8UGV0ci5TYWxpbmdlckBzZXpuYW0uY3o+CisKKwkqIGNvbmZpZ3VyZS5hYyAoRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSk6IEZpeCBrZnJlZWJzZCBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDExLTExLTEyICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6IE1heAorCWFsaWdubWVudCBvZiA0IGZvciB3aW5jZSBvbiBBUk0uCisKKzIwMTEtMTEtMTIgIEt5bGUgTW9mZmV0dCA8S3lsZS5ELk1vZmZldHRAYm9laW5nLmNvbT4KKwkgICAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy9wcGMvc3lzdi5TLCBzcmMvcHBjL2ZmaS5jOiBSZW1vdmUgdXNlIG9mIHBwYyBzdHJpbmcKKwlpbnN0cnVjdGlvbnMgKG5vdCBhdmFpbGFibGUgb24gc29tZSBjb3JlcywgbGlrZSB0aGUgUFBDNDQwKS4KKworMjAxMS0xMS0xMiAgS2ltdXJhIFdhdGFydSAgPGtpbXVyYXdAaS5uaWZ0eS5qcD4KKworCSogbTQvYXhfZW5hYmxlX2J1aWxkZGlyOiBDaGFuZ2UgZnJvbSBzdHJpbmcgY29tcGFyaXNvbiB0byBudW1lcmljCisJY29tcGFyaXNvbiBmb3Igd2Mgb3V0cHV0LgorCSogY29uZmlndXJlLmFjOiBFbmFibGUgRkZJX01NQVBfRVhFQ19XUklUIGZvciBkYXJ3aW4xMSBha2EgTWFjIE9TCisJWCAxMC43LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDExLTExLTEyICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChBTV9DQ0FTRkxBR1MpOiBBZGQgLWcgb3B0aW9uIHRvIGJ1aWxkIGFzc2VtYmx5CisJZmlsZXMgd2l0aCBkZWJ1ZyBpbmZvLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMTEtMTEtMTIgIEphc3BlciBMaWV2aXNzZSBBZHJpYWFuc2UgPGphc3BlckBvcGVuYnNkLm9yZz4KKworCSogUkVBRE1FOiBVcGRhdGUgbGlzdCBvZiBzdXBwb3J0ZWQgT3BlbkJTRCBzeXN0ZW1zLgorCisyMDExLTExLTEyICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIGxpYnRvb2wtdmVyc2lvbjogVXBkYXRlLgorCSogTWFrZWZpbGUuYW0gKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyk6IEFkZCBzcmMvZGVidWcuYyBpZgorCUZGSV9ERUJVRy4KKwkobGliZmZpX2xhX1NPVVJDRVMpOiBSZW1vdmUgc3JjL2RlYnVnLmMKKwkoRVhUUkFfRElTVCk6IEFkZCBzcmMvZGVidWcuYworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBSRUFETUU6IFVwZGF0ZSBmb3IgMy4wLjExLgorCisyMDExLTExLTEwICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWMgKEdDQ19BU19DRklfUFNFVURPX09QKTogVXNlIGl0IGluc3RlYWQgb2YgaW5saW5lIGNoZWNrLgorCSogY29uZmlndXJlLCBhY2xvY2FsLm00OiBSZWJ1aWxkLgorCisyMDExLTA5LTA0ICBJYWluIFNhbmRvZSAgPGlhaW5zQGdjYy5nbnUub3JnPgorCisJUFIgbGliZmZpLzQ5NTk0CisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TIChzdHVicyk6IE1ha2UgdGhlIHN0dWIgYmluZGluZworCWhlbHBlciByZWZlcmVuY2UgdHJhY2sgdGhlIGFyY2hpdGVjdHVyZSBwb2ludGVyIHNpemUuCisKKzIwMTEtMDgtMjUgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvYXJtL2ZmaS5jIChGRklfSU5JVF9UUkFNUE9MSU5FKTogUmVtb3ZlIGhhcmQtY29kZWQgYXNzZW1ibHkKKwlpbnN0cnVjdGlvbnMuCisJKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2FybV90cmFtcG9saW5lKTogUHV0IHRoZW0gaGVyZSBpbnN0ZWFkLgorCisyMDExLTA3LTExICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworICAgICAgICAqIHNyYy9hcm0vZmZpLmMgKEZGSV9JTklUX1RSQU1QT0xJTkUpOiBDbGVhciBpY2FjaGUuCisKKzIwMTEtMDYtMjkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jOiBNb3ZlIFBSIG51bWJlciB0byBjb21tZW50LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IExpa2V3aXNlLgorCisyMDExLTA2LTI5ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCVBSIGxpYmZmaS80NjY2MAorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogeGZhaWwgZGctb3V0cHV0IG9uCisJbWlwcy1zZ2ktaXJpeDYqLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IExpa2V3aXNlLgorCisyMDExLTA2LTE0ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMgKHRlc3RfbGFyZ2VfZm4pOiBVc2UgUFJJdTgsCisJUFJJZDggaW5zdGVhZCBvZiAlaGh1LCAlaGhkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCBbX19hbHBoYV9fICYmIF9fb3NmX19dIChQUklkOCwKKwlQUkl1OCk6IERlZmluZS4KKwlbX19zZ2lfX10gKFBSSWQ4LCBQUkl1OCk6IERlZmluZS4KKworMjAxMS0wNC0yOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy9hbHBoYS9vc2YuUyAoVUFfU0ksIEZERV9FTkNPRElORywgRkRFX0VOQ09ERSwgRkRFX0FSQU5HRSk6CisJRGVmaW5lLgorCVVzZSB0aGVtIHRvIGhhbmRsZSBFTEYgdnMuIEVDT0ZGIGRpZmZlcmVuY2VzLgorCVtfX29zZl9fXSAoX0dMT0JBTF9fRl9mZmlfY2FsbF9vc2YpOiBEZWZpbmUuCisKKzIwMTEtMDMtMzAgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEZpeCB1bmtub3duIEZERSBlbmNvZGluZy4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IGRpdHRvLgorCisyMDExLTAyLTI1ICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEFsbG93IGZvciBtb3JlCisJMzItYml0IEFCSXMuCisKKzIwMTEtMDItMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogbTQvYXhfY2NfbWF4b3B0Lm00OiBEb24ndCAtbWFsaWduLWRvdWJsZSBvciB1c2UgLWZmYXN0LW1hdGguCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTEtMDItMTMgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAxMS0wMi0xMyAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQG1veGllbG9naWMuY29tPgorCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoVU5MSUtFTFksIExJS0VMWSk6IERlZmluZS4KKwkqIHNyYy94ODYvZmZpNjQuYyAoVU5MSUtFTFksIExJS0VMWSk6IFJlbW92ZSBkZWZpbml0aW9uLgorCSogc3JjL3ByZXBfY2lmLmMgKFVOTElLRUxZLCBMSUtFTFkpOiBSZW1vdmUgZGVmaW5pdGlvbi4KKworCSogc3JjL3ByZXBfY2lmLmMgKGluaXRpYWxpemVfYWdncmVnYXRlKTogQ29udmVydCBhc3NlcnRpb24gaW50bworCUZGSV9CQURfVFlQRURFRiByZXR1cm4uICBJbml0aWFsaXplIGFyZyBzaXplIGFuZCBhbGlnbm1lbnQgdG8gMC4KKworCSogc3JjL3BhL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERvbid0IEFTU0VSVCBBQkkgdGVzdCwKKwlqdXN0IHJldHVybiBGRklfQkFEX0FCSSB3aGVuIHRoaW5ncyBhcmUgd3JvbmcuCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogRGl0dG8uCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEaXR0by4KKwkqIHNyYy9pYTY0L2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgorCSogc3JjL2F2cjMyL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IERpdHRvLgorCisyMDExLTAyLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBEb24ndCBBU1NFUlQgQUJJIHRlc3QsCisJanVzdCByZXR1cm4gRkZJX0JBRF9BQkkgd2hlbiB0aGluZ3MgYXJlIHdyb25nLgorCisyMDEyLTAyLTExICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGFkYWNvcmUuY29tPgorCisJKiBzcmMvc3BhcmMvdjkuUyAoU1RBQ0tGUkFNRSk6IEJ1bXAgdG8gMTc2LgorCisyMDExLTAyLTA5ICBTdHVhcnQgU2hlbHRvbiAgPHNyY3NoZWx0b25AZ21haWwuY29tPgorCisJaHR0cDovL2J1Z3MuZ2VudG9vLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjg2OTExCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogQ2xlYW4gdXAgZXJyb3IgbWVzc2FnZXMuCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzKTogQ2FzdCByYXcgYXJnIHRvCisJZmZpX3JhdyouCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgcHJhZ21hIGZvciBTR0kgY29tcGlsZXIuCisKKzIwMTEtMDItMDkgIEFudGhvbnkgR3JlZW4gIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBBZGQgcG93ZXJwYzY0LSotZGFyd2luKiBzdXBwb3J0LgorCisyMDExLTAyLTA5ICBBbnRob255IEdyZWVuIDxncmVlbkBtb3hpZWxvZ2ljLmNvbT4KKworCSogUkVBRE1FOiBNZW50aW9uIEludGVyaXguCisKKzIwMTEtMDItMDkgIEpvbmF0aGFuIENhbGxlbiAgPGFiY2RAZ2VudG9vLm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgSW50ZXJpeCB0byB3aW4zMi9jeWd3aW4vbWluZ3cgY2FzZS4KKwkqIGNvbmZpZ3VyZTogRGl0dG8uCisJKiBzcmMvY2xvc3VyZXMuYzogVHJlYXQgSW50ZXJpeCBsaWtlIEN5Z3dpbiwgaW5zdGVhZCBvZiBhcyBhCisJZ2VuZXJpYyB3aW4zMi4KKworMjAxMS0wMi0wOSAgQW50aG9ueSBHcmVlbiA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX3R5cGVkZWYuYzogUmVtb3ZlIHhmYWlsLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IFJlbW92ZSB4ZmFpbC4KKwkqIHNyYy94ODYvZmZpNjQuYyAoVU5MSUtFTFksIExJS0VMWSk6IERlZmluZS4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBDaGVjayBmb3IgYmFkIEFCSS4KKwkqIHNyYy9wcmVwX2NpZi5jIChVTkxJS0VMWSwgTElLRUxZKTogRGVmaW5lLgorCShpbml0aWFsaXplX2FnZ3JlZ2F0ZSk6IENoZWNrIGZvciBiYWQgdHlwZXMuCisKKzIwMTEtMDItMDkgIExhbmRvbiBGdWxsZXIgPGxhbmRvbmZAcGxhdXNpYmxlLmNvb3A+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIGJ1aWxkLWlvcy5zaCwgc3JjL2FybS9nZW50cmFtcC5zaCwKKwlzcmMvYXJtL3RyYW1wb2xpbmUuUy4KKwkobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIHNyYy9hcmMvdHJhbXBvbGluZS5TLgorCSogY29uZmlndXJlLmFjIChGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFKTogRGVmaW5lLgorCSogc3JjL2FybS9mZmkuYyAoZmZpX3RyYW1wb2xpbmVfdGFibGUpCisJKGZmaV9jbG9zdXJlX3RyYW1wb2xpbmVfdGFibGVfcGFnZSwgZmZpX3RyYW1wb2xpbmVfdGFibGVfZW50cnkpCisJKEZGSV9UUkFNUE9MSU5FX0NPREVMT0NfQ09ORklHLCBGRklfVFJBTVBPTElORV9DT05GSUdfUEFHRV9PRkZTRVQpCisJKEZGSV9UUkFNUE9MSU5FX0NPVU5ULCBmZmlfdHJhbXBvbGluZV9sb2NrLCBmZmlfdHJhbXBvbGluZV90YWJsZXMpCisJKGZmaV90cmFtcG9saW5lX3RhYmxlX2FsbG9jLCBmZmlfY2xvc3VyZV9hbGxvYywgZmZpX2Nsb3N1cmVfZnJlZSk6CisJRGVmaW5lIGZvciBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFIGNhc2UgKGlPUykuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogSGFuZGwgRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRSBjYXNlCisJc2VwYXJhdGVseS4KKwkqIHNyYy9hcm0vc3lzdi5TOiBIYW5kbGUgQXBwbGUgaU9TIGhvc3QuCisJKiBzcmMvY2xvc3VyZXMuYzogSGFuZGxlIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUgY2FzZS4KKwkqIGJ1aWxkLWlvcy5zaDogTmV3IGZpbGUuCisJKiBmZmljb25maWcuaC5pbiwgY29uZmlndXJlLCBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIFJFQURNRTogTWVudGlvbiBBUk0gaU9TLgorCisyMDExLTAyLTA4ICBPcmVuIEhlbGQgIDxvcmVuaGVAaWwuaWJtLmNvbT4KKworCSogc3JjL2RsbWFsbG9jLmMgKF9TVFJVQ1RfTUFMTElORk8pOiBEZWZpbmUgaW4gb3JkZXIgdG8gYXZvaWQKKwlyZWRlZmluaXRpb24gb2YgbWFsbGluZm8gb24gSFAtVVguCisKKzIwMTEtMDItMDggIEdpbm4gQ2hlbiAgPGdpbm4uY2hlbkBvcmFjbGUuY29tPgorCisJKiBzcmMvc3BhcmMvZmZpLmMgKGZmaV9jYWxsKTogTWFrZSBjb21wYXRpYmxlIHdpdGggU29sYXJpcyBTdHVkaW8KKwlhZ2dyZWdhdGUgcmV0dXJuIEFCSS4gIEZsdXNoIGNhY2hlLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZsdXNoIGNhY2hlLgorCisyMDExLTAyLTExICBBbnRob255IEdyZWVuICA8Z3JlZW5AbW94aWVsb2dpYy5jb20+CisKKwlGcm9tIFRvbSBIb25lcm1hbm4gPHRvbS5ob25lcm1hbm5Ab3JhY2xlLmNvbT46CisJKiBzcmMvcG93ZXJwYy9haXguUyAoZmZpX2NhbGxfQUlYKTogU3VwcG9ydCBmb3IgeGxjIHRvb2xjaGFpbiBvbgorCUFJWC4gIERlY2xhcmUgLmZmaV9wcmVwX2FyZ3MuICBJbnNlcnQgbm9wcyBhZnRlciBicmFuY2gKKwlpbnN0cnVjdGlvbnMgc28gdGhhdCB0aGUgQUlYIGxpbmtlciBjYW4gaW5zZXJ0IFRPQyByZWxvYWQKKwlpbnN0cnVjdGlvbnMuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBEZWNsYXJlIC5mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOLgorCisyMDExLTAyLTA4ICBFZCAgPGVkQGtkdGMubmV0PgorCisJKiBzcmMvcG93ZXJwYy9hc20uaDogRml4IGdyYW1tYXIgbml0IGluIGNvbW1lbnQuCisKKzIwMTEtMDItMDggIFVsaSBMaW5rICA8dWwubWNhbWFmaWFAbGlua2l0dXAuZGU+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKEZGSV82NF9CSVRfTUFYKTogRGVmaW5lIGFuZCB1c2UuCisKKzIwMTEtMDItMDkgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZmZpLzQ2NjYxCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYyAobWFpbik6IENhc3Qgdm9pZCAqIHRvCisJdWludHB0cl90IGZpcnN0LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMgKG1haW4pOiBMaWtld2lzZS4KKworMjAxMS0wMi0wOCAgUmFmYWVsIEF2aWxhIGRlIEVzcGluZG9sYSAgPHJlc3BpbmRvbGFAbW96aWxsYS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogRml4IHg4NiB0ZXN0IGZvciBwYyByZWxhdGVkIHJlbG9jcy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAxMS0wMi0wNyAgSm9lbCBTaGVycmlsbCA8am9lbC5zaGVycmlsbEBvYXJjb3JwLmNvbT4KKworCSogbGliZmZpL3NyYy9tNjhrL2ZmaS5jOiBBZGQgUlRFTVMgc3VwcG9ydCBmb3IgY2FjaGUgZmx1c2hpbmcuCisJSGFuZGxlIGNhc2Ugd2hlbiBDUFUgdmFyaWFudCBkb2VzIG5vdCBoYXZlIGxvbmcgZG91YmxlIHN1cHBvcnQuCisJKiBsaWJmZmkvc3JjL202OGsvc3lzdi5TOiBBZGQgc3VwcG9ydCBmb3IgbWM2ODAwMCwgQ29sZGZpcmUsCisJYW5kIGNvcmVzIHdpdGggc29mdCBmbG9hdGluZyBwb2ludC4KKworMjAxMS0wMi0wNyAgSm9lbCBTaGVycmlsbCA8am9lbC5zaGVycmlsbEBvYXJjb3JwLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBBZGQgbWlwcyotKi1ydGVtcyogc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBFbnN1cmUgbmVlZGVkIGNvbnN0YW50cyBhcmUgYXZhaWxhYmxlCisJZm9yIHRhcmdldHMgd2hpY2ggZG8gbm90IGhhdmUgc2dpZGVmcy5oLgorCisyMDExLTAxLTI2ICBEYXZlIEtvcm4gIDxkYXZlLmtvcm4uY3lnd2luQGdtYWlsLmNvbT4KKworCVBSIHRhcmdldC80MDEyNQorCSogY29uZmlndXJlLmFjIChBTV9MVExERkxBR1MpOiBBZGQgLWJpbmRpciBvcHRpb24gZm9yIHdpbmRvd3MgRExMcy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAxMC0xMi0xOCAgSWFpbiBTYW5kb2UgIDxpYWluc0BnY2MuZ251Lm9yZz4KKworCVBSIGxpYmZmaS8yOTE1MgorCVBSIGxpYmZmaS80MjM3OAorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogUHJvdmlkZSBEYXJ3aW42NCBpbXBsZW1lbnRhdGlvbiwKKwl1cGRhdGUgY29tbWVudHMuCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoUE9XRVJQQ19EQVJXSU42NCk6IE5ldywKKwkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IFVwZGF0ZSBmb3IgRGFyd2luNjQuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogUHJvdmlkZSBEYXJ3aW42NCBpbXBsZW1lbnRhdGlvbiwKKwl1cGRhdGUgY29tbWVudHMuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IExpa2V3aXNlLgorCisyMDEwLTEyLTA2ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmFjIChsaWJmZmlfY3ZfYXNfYXNjaWlfcHNldWRvX29wKTogVXNlIGRvdWJsZQorCWJhY2tzbGFzaGVzLgorCShsaWJmZmlfY3ZfYXNfc3RyaW5nX3BzZXVkb19vcCk6IExpa2V3aXNlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDEwLTEyLTAzICBDaHVuZy1MaW4gVGFuZyAgPGNsdGFuZ0Bjb2Rlc291cmNlcnkuY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEFkZCBVTldJTkQgdG8gLnBhZCBkaXJlY3RpdmUuCisJKGZmaV9jbG9zdXJlX1ZGUCk6IFNhbWUuCisJKGZmaV9jYWxsX1ZGUCk6IE1vdmUgZG93biB0byBiZWZvcmUgZmZpX2Nsb3N1cmVfVkZQLiBBZGQgJy5mcHUgdmZwJworCWRpcmVjdGl2ZS4KKworMjAxMC0xMi0wMSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmggW19fc2dpXSAoUFJJZDY0LCBQUkl1NjQpOiBEZWZpbmUuCisJKFBSSXVQVFIpOiBEZWZpbmUuCisKKzIwMTAtMTEtMjkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisJICAgIFJhaW5lciBPcnRoICA8cm9AQ2VCaVRlYy5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMveDg2L3N5c3YuUyAoRkRFX0VOQ09ESU5HLCBGREVfRU5DT0RFKTogRGVmaW5lLgorCSguZWhfZnJhbWUpOiBVc2UgRkRFX0VOQ09ESU5HLgorCSguTEFTRkRFMSwgLkxBU0ZERTIsIExBU0ZERTMpOiBTaW1wbGlmeSB3aXRoIEZERV9FTkNPREUuCisKKzIwMTAtMTEtMjIgIEphY2VrIENhYmFuIDxqYWNla0Bjb2Rld2VhdmVycy5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogQ2hlY2sgZm9yIHN5bWJvbCB1bmRlcnNjb3JlcyBvbiBtaW5ndy13NjQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBzcmMveDg2L3dpbjY0LlM6IENvcnJlY3RseSBhY2Nlc3MgZXh0ZXJuIHN5bWJvbHMgaW4gcmVzcGVjdCB0bworCXVuZGVyc2NvcmVzLgorCisyMDEwLTExLTE1ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBSZW5hbWUgLi4uCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS5leHA6IC4uLiB0byB0aGlzLgorCSogbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jYWxsLmV4cDogRG9uJ3QgbG9hZCBsaWJmZmktZGcuZXhwLgorCSogbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTGlrZXdpc2UuCisKKzIwMTAtMTAtMjggIENodW5nLUxpbiBUYW5nICA8Y2x0YW5nQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBBZGQgVkZQIHJlZ2lzdGVyIGFyZ3VtZW50IGhhbmRsaW5nCisJY29kZSwgbmV3IHBhcmFtZXRlciwgYW5kIHJldHVybiB2YWx1ZS4gVXBkYXRlIGNvbW1lbnRzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBjYXNlIGZvciBWRlAgc3RydWN0IHJldHVybiB2YWx1ZXMuIEFkZAorCWNhbGwgdG8gbGF5b3V0X3ZmcF9hcmdzKCkuCisJKGZmaV9jYWxsX1NZU1YpOiBVcGRhdGUgZGVjbGFyYXRpb24uCisJKGZmaV9jYWxsX1ZGUCk6IE5ldyBkZWNsYXJhdGlvbi4KKwkoZmZpX2NhbGwpOiBBZGQgVkZQIHN0cnVjdCByZXR1cm4gY29uZGl0aW9ucy4gQ2FsbCBmZmlfY2FsbF9WRlAoKQorCXdoZW4gQUJJIGlzIEZGSV9WRlAuCisJKGZmaV9jbG9zdXJlX1ZGUCk6IE5ldyBkZWNsYXJhdGlvbi4KKwkoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IEFkZCBuZXcgdmZwX2FyZ3MgcGFyYW1ldGVyLCB1cGRhdGUgY2FsbCB0bworCWZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVigpLgorCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBVcGRhdGUgcGFyYW1ldGVycy4gQWRkIFZGUCBhcmd1bWVudAorCWNhc2UgaGFuZGxpbmcuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUGFzcyBmZmlfY2xvc3VyZV9WRlAgdG8gdHJhbXBvbGluZQorCWNvbnN0cnVjdGlvbiB1bmRlciBWRlAgaGFyZC1mbG9hdC4KKwkocmVjX3ZmcF90eXBlX3ApOiBOZXcgZnVuY3Rpb24uCisJKHZmcF90eXBlX3ApOiBTYW1lLgorCShwbGFjZV92ZnBfYXJnKTogU2FtZS4KKwkobGF5b3V0X3ZmcF9hcmdzKTogU2FtZS4KKwkqIHNyYy9hcm0vZmZpdGFyZ2V0LmggKGZmaV9hYmkpOiBBZGQgRkZJX1ZGUC4gRGVmaW5lIEZGSV9ERUZBVUxUX0FCSQorCWJhc2VkIG9uIF9fQVJNX1BDU19WRlAuCisJKEZGSV9FWFRSQV9DSUZfRklFTERTKTogRGVmaW5lIGZvciBhZGRpbmcgVkZQIGhhcmQtZmxvYXQgc3BlY2lmaWMKKwlmaWVsZHMuCisJKEZGSV9UWVBFX1NUUlVDVF9WRlBfRkxPQVQpOiBEZWZpbmUgaW50ZXJuYWxseSB1c2VkIHR5cGUgY29kZS4KKwkoRkZJX1RZUEVfU1RSVUNUX1ZGUF9ET1VCTEUpOiBTYW1lLgorCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBDaGFuZ2UgY2FsbCBvZiBmZmlfcHJlcF9hcmdzKCkgdG8KKwlkaXJlY3QgY2FsbC4gTW92ZSBmdW5jdGlvbiBwb2ludGVyIGxvYWQgdXB3YXJkcy4KKwkoZmZpX2NhbGxfVkZQKTogTmV3IGZ1bmN0aW9uLgorCShmZmlfY2xvc3VyZV9WRlApOiBTYW1lLgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGNoZWNrLWZsYWdzKTogTmV3IGZ1bmN0aW9uLgorCShkZy1za2lwLWlmKTogTmV3IGZ1bmN0aW9uLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYzogU2tpcCBpZiB0YXJnZXQgaXMgYXJtKi0qLSoKKwlhbmQgY29tcGlsZXIgb3B0aW9ucyBpbmNsdWRlIC1tZmxvYXQtYWJpPWhhcmQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogU2FtZS4KKworMjAxMC0xMC0wMSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwlQUiBsaWJmZmkvNDU2NzcKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBFbnN1cmUgY2lmLT5ieXRlcyBpcworCWEgbXVsdGlwbGUgb2YgOC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Mi5jOiBOZXcgdGVzdC4KKworMjAxMC0wOC0yMCAgTWFyayBXaWVsYWFyZCAgPG1qd0ByZWRoYXQuY29tPgorCisJKiBzcmMvY2xvc3VyZXMuYyAob3Blbl90ZW1wX2V4ZWNfZmlsZV9tbnQpOiBDaGVjayBpZiBnZXRtbnRlbnRfcgorCXJldHVybnMgTlVMTC4KKworMjAxMC0wOC0wOSAgQW5kcmVhcyBUb2JsZXIgIDxhbmRyZWFzdEBmZ3puZXQuY2g+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIHRhcmdldCBwb3dlcnBjNjQtKi1mcmVlYnNkKi4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jOiBQYXNzCisJLW1sb25nLWRvdWJsZS0xMjggb25seSB0byBsaW51eCB0YXJnZXRzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0Mi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jOiBMaWtld2lzZS4KKworMjAxMC0wOC0wNSAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorCisgICAgICAgICogTWFrZWZpbGUuYW06IFBhc3MgRkZJX0RFQlVHIGRlZmluZSB0byBtc3ZjYy5zaCBmb3IgbGlua2luZyB0byB0aGUKKyAgICAgICAgZGVidWcgQ1JUIHdoZW4gLS1lbmFibGUtZGVidWcgaXMgZ2l2ZW4uCisgICAgICAgICogY29uZmlndXJlLmFjOiBEZWZpbmUgaXQuCisgICAgICAgICogbXN2Y2Muc2g6IFRyYW5zbGF0ZSAtZyBhbmQgLURGRklfREVCVUcgYXBwcm9wcmlhdGVseS4KKworMjAxMC0wOC0wNCAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBBZGQgWDg2X0FOWSBkZWZpbmUgZm9yIGFsbCB4ODYveDg2XzY0CisJcGxhdGZvcm1zLgorCSogc3JjL3g4Ni9mZmkuYzogUmVtb3ZlIHJlZHVuZGFudCBpZmRlZiBjaGVja3MuCisJKiBzcmMvcHJlcF9jaWYuYzogUHVzaCBzdGFjayBzcGFjZSBjb21wdXRhdGlvbiBpbnRvIHNyYy94ODYvZmZpLmMKKwlmb3IgWDg2X0FOWSBzbyByZXR1cm4gdmFsdWUgc3BhY2UgZG9lc24ndCBnZXQgYWRkZWQgdHdpY2UuCisKKzIwMTAtMDgtMDMgIE5laWwgUmFzaGJyb29rZSA8bmVpbEBwYXJrd2F5Y2MuY28udWs+CisKKwkqIG1zdmNjLnNoOiBEb24ndCBwYXNzIC1zYWZlc2VoIHRvIG1sNjQgYmVjYXVzZSBiZWhhdmlvciBpcyBidWdneS4KKworMjAxMC0wNy0yMiAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorCisJKiBzcmMvKi9mZml0YXJnZXQuaDogTWFrZSBGRklfTEFTVF9BQkkgb25lIHBhc3QgdGhlIGxhc3QgdmFsaWQgQUJJLgorCSogc3JjL3ByZXBfY2lmLmM6IEZpeCBBQkkgYXNzZXJ0aW9uLgorICAgICAgICAqIHNyYy9jcmlzL2ZmaS5jOiBEaXR0by4KKworMjAxMC0wNy0xMCAgRXZhbiBQaG9lbml4ICA8ZXZhbkBmYWxsaW5nc25vdy5uZXQ+CisKKwkqIHNyYy9jbG9zdXJlcy5jIChzZWxpbnV4X2VuYWJsZWRfY2hlY2spOiBGaXggc3RybmNtcCB1c2FnZSBidWcuCisKKzIwMTAtMDctMDcgIERhbiBIb3LDoWsgPGRhbkBkYW5ueS5jej4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogUHJvdGVjdCAjZGVmaW5lIHdpdGggI2lmbmRlZi4KKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBEaXR0by4KKwkqIHNyYy9zMzkwL2ZmaXRhcmdldC5oOiBEaXR0by4KKwkqIHNyYy9zcGFyYy9mZml0YXJnZXQuaDogRGl0dG8uCisKKzIwMTAtMDctMDcgICBOZWlsIFJvYmVydHMgPG5laWxAbGludXguaW50ZWwuY29tPgorCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IEFsaWduIHRoZSBzdGFjayBwb2ludGVyIHRvCisJMTYtYnl0ZXMuCisKKzIwMTAtMDctMDIgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoQU1fTUFLRUZMQUdTKTogUGFzcyBhbHNvIG1hbmRpciB0byBzdWJtYWtlcy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworMjAxMC0wNS0xOSAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5hYyAobGliZmZpX2N2X2FzX3g4Nl9wY3JlbCk6IENoZWNrIGZvciBpbGxlZ2FsIGluIGFzCisJb3V0cHV0LCB0b28uCisJKGxpYmZmaV9jdl9hc19hc2NpaV9wc2V1ZG9fb3ApOiBDaGVjayBmb3IgLmFzY2lpLgorCShsaWJmZmlfY3ZfYXNfc3RyaW5nX3BzZXVkb19vcCk6IENoZWNrIGZvciAuc3RyaW5nLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMveDg2L3N5c3YuUyAoLmVoX2ZyYW1lKTogVXNlIC5hc2NpaSwgLnN0cmluZyBvciBlcnJvci4KKworMjAxMC0wNS0xMSAgRGFuIFdpdHRlICA8ZHdpdHRlQG1vemlsbGEuY29tPgorCisJKiBkb2MvbGliZmZpLnRleDogRG9jdW1lbnQgcHJldmlvdXMgY2hhbmdlLgorCisyMDEwLTA1LTExICBNYWtvdG8gS2F0byA8bV9rYXRvQGdhMi5zby1uZXQubmUuanA+CisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jYWxsKTogRG9uJ3QgY29weSBzdHJ1Y3RzIHBhc3NlZCBieSB2YWx1ZS4KKworMjAxMC0wNS0wNSAgTWljaGFlbCBLb2hsZXIgPG1pY2hhZWxrb2hsZXJAbGl2ZS5jb20+CisKKwkqIHNyYy9kbG1hbGxvYy5jIChkbGZyZWUpOiBGaXggc3BlbGxpbmcuCisJKiBzcmMvaWE2NC9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEaXR0by4KKwkqIGNvbmZpZ3VyZS5hYzogRGl0dG8uCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMTAtMDQtMTMgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKworCSogbXN2Y2Muc2g6IEJ1aWxkIHdpdGggLVczIGluc3RlYWQgb2YgLVdhbGwuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IFJlbW92ZSBidWlsZCB3YXJuaW5ncy4KKwkqIHNyYy94ODYvZmZpLmM6IERpdHRvLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogRGl0dG8uCisKKzIwMTAtMDQtMTIgIERhbiBXaXR0ZSAgPGR3aXR0ZUBtb3ppbGxhLmNvbT4KKwkgICAgV2FsdGVyIE1laW5sIDx3dW5vQGxzdncuZGU+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIE9TLzIgc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIHNyYy9jbG9zdXJlcy5jOiBEaXR0by4KKwkqIHNyYy9kbG1hbGxvYy5jOiBEaXR0by4KKwkqIHNyYy94ODYvd2luMzIuUzogRGl0dG8uCisKKzIwMTAtMDQtMDcgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogUmVtb3ZlIHVudXNlZCBhcmdzIHZhcmlhYmxlLgorCisyMDEwLTA0LTAyICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogbWFuL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDEwLTAzLTMwICBEYW4gV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisKKwkqIG1zdmNjLnNoOiBEaXNhYmxlIGJ1aWxkIHdhcm5pbmdzLgorCSogUkVBRE1FICh0ZXN0ZWQpOiBDbGFyaWZ5IHdpbmRvd3MgYnVpbGQgcHJvY2VkdXJlLgorCisyMDEwLTAzLTE1ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmFjIChsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGUpOiBOZXcgdGVzdC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogbGliZmZpL3NyYy94ODYvdW5peDY0LlMgKC5laF9mcmFtZSkKKwlbSEFWRV9BU19YODZfNjRfVU5XSU5EX1NFQ1RJT05fVFlQRV06IFVzZSBAdW53aW5kIHNlY3Rpb24gdHlwZS4KKworMjAxMC0wMy0xNCAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYzogRml4IHR5cG8gaW4gY29tbWVudC4KKwkqIHNyYy94ODYvZmZpLmM6IFVzZSAvKiAuLi4gKi8gY29tbWVudCBzdHlsZS4KKworMjAxMC0wMi0yNCAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGRvYy9saWJmZmkudGV4aSAoVGhlIENsb3N1cmUgQVBJKTogRml4IHR5cG8uCisJKiBkb2MvbGliZmZpLmluZm86IFJlbW92ZS4KKworMjAxMC0wMi0xNSAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwkqIHNyYy9hcm0vc3lzdi5TIChfX0FSTV9BUkNIX18pOiBEZWZpbmUgZm9yIHByb2Nlc3NvcgorCV9fQVJNX0FSQ0hfN0VNX18uCisKKzIwMTAtMDEtMTUgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiBSRUFETUU6IEFkZCBub3RlcyBvbiBidWlsZGluZyB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorCisyMDEwLTAxLTE1ICBEYW5pZWwgV2l0dGUgIDxkd2l0dGVAbW96aWxsYS5jb20+CisKKwkqIG1zdmNjLnNoOiBOZXcgZmlsZS4KKworCSogc3JjL3g4Ni93aW4zMi5TOiBQb3J0IGFzc2VtYmx5IHJvdXRpbmVzIHRvIE1TVkMgYW5kICNpZmRlZi4KKwkqIHNyYy94ODYvZmZpLmM6IFR3ZWFrIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGFuZCByZW1vdmUgZXhjZXNzCisJcGFyZW5zLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIF9fZGVjbHNwZWMoYWxpZ24oOCkpIHRvIHR5cGVkZWYgc3RydWN0CisJZmZpX2Nsb3N1cmUuCisKKwkqIHNyYy94ODYvZmZpLmM6IE1lcmdlIGZmaV9jYWxsX1NZU1YgYW5kIGZmaV9jYWxsX1NURENBTEwgaW50byBuZXcKKwlmdW5jdGlvbiBmZmlfY2FsbF93aW4zMiBvbiBYODZfV0lOMzIuCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jYWxsX1NZU1YpOiBSZW5hbWUgdG8gZmZpX2NhbGxfd2luMzIuCisJKGZmaV9jYWxsX1NURENBTEwpOiBSZW1vdmUuCisKKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBNb3ZlIHN0YWNrIHNwYWNlIGFsbG9jYXRpb24gY29kZQorCXRvIGZmaV9wcmVwX2NpZl9tYWNoZGVwIGZvciB4ODYuCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFRvIGhlcmUuCisKKzIwMTAtMDEtMTUgIE9saXZlciBLaWRkbGUgIDxva2lkZGxlQHlhaG9vLmNvLnVrPgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQ2hlY2sgZm9yIF9faTM4NiBhbmQgX19hbWQ2NCBmb3IKKwlTdW4gU3R1ZGlvIGNvbXBpbGVyIGNvbXBhdGliaWxpdHkuCisKKzIwMTAtMDEtMTIgIENvbnJhZCBJcndpbiA8Y29ucmFkLmlyd2luQGdtYWlsLmNvbT4KKworCSogZG9jL2xpYmZmaS50ZXhpOiBBZGQgY2xvc3VyZSBleGFtcGxlLgorCisyMDEwLTAxLTA3ICBSYWluZXIgT3J0aCAgPHJvQENlQmlUZWMuVW5pLUJpZWxlZmVsZC5ERT4KKworCVBSIGxpYmZmaS80MDcwMQorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCBbX19hbHBoYV9fICYmIF9fb3NmX19dIChQUklkTEwsCisJUFJJdUxMLCBQUklkNjQsIFBSSXU2NCwgUFJJdVBUUik6IERlZmluZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmM6IEFkZCAtV25vLWZvcm1hdCBvbgorCWFscGhhKi1kZWMtb3NmKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDY0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaCAoYWxsb2NhdGVfbW1hcCk6IENhc3QKKwlNQVBfRkFJTEVEIHRvIGNoYXIgKi4KKworMjAxMC0wMS0wNiAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy9taXBzL24zMi5TOiBVc2UgLmFiaWNhbGxzIGFuZCAuZWhfZnJhbWUgd2l0aCBfX0dOVUNfXy4KKworMjAwOS0xMi0zMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIFJFQURNRTogVXBkYXRlIGZvciBsaWJmZmkgMy4wLjkuCisKKzIwMDktMTItMjcgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0B1YnVudHUuY29tPgorCisJKiBjb25maWd1cmUuYWMgKEhBVkVfTE9OR19ET1VCTEUpOiBEZWZpbmUgZm9yIG1pcHMgd2hlbgorCWFwcHJvcHJpYXRlLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDA5LTEyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IE1hcmsgYXMgeGZhaWwgZm9yCisJYXZyMzIqLSotKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmM6IERpdHRvLgorCisyMDA5LTEyLTI2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBDb25kaXRpb25hbGx5IGluY2x1ZGUgc3RkaW50LmgKKwlhbmQgaW50dHlwZXMuaC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBEaXR0by4KKworMjAwOS0xMi0yNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogY29uZmlndXJlLmFjOiBBZGQgYW1kNjQtKi1vcGVuYnNkKi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogTGluaworCW9wZW5ic2QgcHJvZ3JhbXMgd2l0aCAtbHB0aHJlYWQuCisKKzIwMDktMTItMjYgIEFudGhvbnkgR3JlZW4gIDxncmVlbkByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jOiBSZW1vdmUgeGZhaWwgZm9yCisJbWlwcyotKi0qIGFuZCBhcm0qLSotKi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IFJlbW92ZSB4ZmFpbCBmb3IgYXJtKi0qLSouCisKKzIwMDktMTItMzEgIEtheSBUaWV0eiAgPGt0aWV0ejcwQGdvb2dsZW1haWwuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggKFBSSWRMTCwgUFJ1TEwpOiBGaXgKKwlkZWZpbml0aW9ucy4KKworMjAwOS0xMi0zMSAgQ2FybG8gQnJhbWluaSAgPGNhcmxvLmJyYW1peEBsaWJlcm8uaXQ+CisKKwkqIGNvbmZpZ3VyZS5hYyAoQU1fTFRMREZMQUdTKTogRGVmaW5lIGZvciB3aW5kb3dzIGhvc3RzLgorCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9MREZMQUdTKTogQWRkIEFNX0xUTERGTEFHUy4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDA5LTEyLTMxICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKwkgICAgQmxha2UgQ2hhZmZpbi4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmM6IE5ldyB0ZXN0IGNhc2UgZnJvbSBCbGFrZQorCUNoYWZmaW4gQCBBcHBsZS4KKworMjAwOS0xMi0yOCAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBDb3B5IGFiaSBhbmQgbmFyZ3MgdG8KKwlsb2NhbCB2YXJpYWJsZXMuCisJKGFpeF9hZGp1c3RfYWdncmVnYXRlX3NpemVzKTogTmV3IGZ1bmN0aW9uLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IENhbGwgaXQuCisKKzIwMDktMTItMjYgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogRGVmaW5lIEZGSV9NTUFQX0VYRUNfV1JJVCBmb3IgdGhlIGdpdmVuIHRhcmdldHMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogTGlrZXdpc2UuCisJKiBzcmMvY2xvc3VyZXMuYzogUmVtb3ZlIHRoZSBGRklfTU1BUF9FWEVDX1dSSVQgZGVmaW5pdGlvbiBmb3IKKwlTb2xhcmlzL3g4Ni4KKworMjAwOS0xMi0yNiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAbGludXgtbTY4ay5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBBZHZhbmNlIGludGFyZ19jb3VudAorCXdoZW4gYSBmbG9hdCBhcmd1bWVudHMgaXMgcGFzc2VkIGluIG1lbW9yeS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBNYXJrIGdlbmVyYWwgcmVnaXN0ZXJzIGFzIHVzZWQgdXAgd2hlbgorCWEgNjRiaXQgb3Igc29mdC1mbG9hdCBsb25nIGRvdWJsZSBhcmd1bWVudCBpcyBwYXNzZWQgaW4gbWVtb3J5LgorCisyMDA5LTEyLTI1ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AdWJ1bnR1LmNvbT4KKworCSogbWFuL2ZmaV9jYWxsLjM6IEZpeCAjaW5jbHVkZSBpbiBleGFtcGxlcy4KKwkqIGRvYy9saWJmZmkudGV4aTogQWRkIGRpcmNhdGVnb3J5LgorCisyMDA5LTEyLTI1ICBGcmFuayBFdmVyZGlqIDxmLnAueC5ldmVyZGlqQHR1ZGVsZnQubmw+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFBsYWNlZCAnX19HTlVDX18nIGlmZGVmIGFyb3VuZAorCSdfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSknIGluIGZmaV9jbG9zdXJlLCBmaXhlcyBjb21waWxlIGZvcgorCUlSSVggTUlQU1BybyBjOTkuCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogQWRkZWQgJ19fc2dpJyBkZWZpbmUgdG8gbm9uCisJJ19fYXR0cmlidXRlX18oKF9fbW9kZV9fKCkpKScgaW50ZWdlciB0eXBlZGVmcy4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfY2FsbCwgZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIsCisJZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9OMzIpOiBBZGRlZCAnZGVmaW5lZChfTUlQU0VCKScgdG8gQkUgY2hlY2suCisJKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyLCBmZmlfY2xvc3VyZV9taXBzX2lubmVyX04zMik6IEFkZGVkCisJRkZJX0xPTkdET1VCTEUgc3VwcG9ydCBhbmQgYWxpZ25tZW50KE4zMiBvbmx5KS4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBDb3JyZWN0ZWQgJyNpbmNsdWRlIDxzZ2lkZWZzLmg+JyBmb3IgSVJJWCBhbmQKKwlmaXhlZCBub24gJ19fYXR0cmlidXRlX18oKF9fbW9kZV9fKCkpKScgaW50ZWdlciB0eXBlZGVmcy4KKwkqIHNyYy9taXBzL24zMi5TOiBQdXQgJyNpZmRlZiBsaW51eCcgYXJvdW5kICcuYWJpY2FsbHMnIGFuZCAnLmVoX2ZyYW1lJworCXNpbmNlIHRoZXkgYXJlIExpbnV4L0dOVSBBc3NlbWJsZXIgc3BlY2lmaWMuCisKKzIwMDktMTItMjUgIEJyYWRsZXkgU21pdGggIDxicmFkQGJyYWQtc21pdGguY28udWs+CisKKwkqIGNvbmZpZ3VyZS5hYywgTWFrZWZpbGUuYW0sIHNyYy9hdnIzMi9mZmkuYywKKwlzcmMvYXZyMzIvZmZpdGFyZ2V0LmgsCisJc3JjL2F2cjMyL3N5c3YuUzogQWRkIEFWUjMyIHBvcnQuCisJKiBjb25maWd1cmUsIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDA5LTEyLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IE1ha2UgaT84NiBidWlsZCBvbiBGcmVlQlNEIGFuZCBPcGVuQlNELgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA5LTEyLTE1ICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBEZWZpbmUgUFJJdVBUUiBvbiBQQSBIUC1VWC4KKworMjAwOS0xMi0xMyAgSm9obiBEYXZpZCBBbmdsaW4gIDxkYXZlLmFuZ2xpbkBucmMtY25yYy5nYy5jYT4KKworCSogc3JjL3BhL2ZmaS5jIChmZmlfY2xvc3VyZV9pbm5lcl9wYTMyKTogSGFuZGxlIEZGSV9UWVBFX0xPTkdET1VCTEUKKwl0eXBlIG9uIEhQLVVYLgorCisyMDEyLTAyLTEzICBLYWkgVGlldHogIDxrdGlldHpAcmVkaGF0LmNvbT4KKworCVBSIGxpYmZmaS81MjIyMQorCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogQWRkIHRoaXNjYWxsCisJc3VwcG9ydCBmb3IgWDg2X1dJTjMyLgorCShGRklfSU5JVF9UUkFNUE9MSU5FX1RISVNDQUxMKTogRml4IGRpc3BsYWNlbWVudC4KKworMjAwOS0xMi0xMSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBhZGFjb3JlLmNvbT4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfY2xvc3VyZV9zcGFyY19pbm5lcl92OSk6IFByb3Blcmx5IGFsaWduICdsb25nCisJZG91YmxlJyBhcmd1bWVudHMuCisKKzIwMDktMTItMTEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0Lmg6IERlZmluZSBQUkl1UFRSIG9uIFNvbGFyaXMgPCAxMC4KKworMjAwOS0xMi0xMCAgUmFpbmVyIE9ydGggIDxyb0BDZUJpVGVjLlVuaS1CaWVsZWZlbGQuREU+CisKKwlQUiBsaWJmZmkvNDA3MDAKKwkqIHNyYy9jbG9zdXJlcy5jIFtYODZfNjQgJiYgX19zdW5fXyAmJiBfX3N2cjRfX10KKwkoRkZJX01NQVBfRVhFQ19XUklUKTogRGVmaW5lLgorCisyMDA5LTEyLTA4ICBEYXZpZCBEYW5leSAgPGRkYW5leUBjYXZpdW1uZXR3b3Jrcy5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYzogUmVtb3ZlIHhmYWlsIGZvciBtaXBzKi0qLSoKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogU2FtZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jOiBTYW1lLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmM6IFNhbWUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmM6IFNhbWUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBTYW1lLgorCisyMDA5LTEyLTA3ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMgKGxpYmZmaV9jbG9zdXJlX0FTTSk6IEZpeCB0YWJsZWp1bXAKKwl0eXBvLgorCisyMDA5LTEyLTA1ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBVcGRhdGUgQUlYMzIgY29kZSB0byBiZSBjb25zaXN0ZW50IHdpdGggQUlYNjQKKwljb2RlLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogU2FtZS4KKworMjAwOS0xMi0wNSAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogbWFuL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA5LTEyLTA0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IFJlb3JnYW5pemUgNjQtYml0IGNvZGUgdG8gbWF0Y2gKKwlsaW51eDY0X2Nsb3N1cmUuUy4KKworMjAwOS0xMi0wNCAgVXJvcyBCaXpqYWsgIDx1Yml6amFrQGdtYWlsLmNvbT4KKworCVBSIGxpYmZmaS80MTkwOAorCSogc3JjL3g4Ni9mZmk2NC5jIChjbGFzc2lmeV9hcmd1bWVudCk6IFVwZGF0ZSBmcm9tCisJZ2NjL2NvbmZpZy9pMzg2L2kzODYuYy4KKwkoZmZpX2Nsb3N1cmVfdW5peDY0X2lubmVyKTogRG8gbm90IHVzZSB0aGUgYWRkcmVzcyBvZiB0d28gY29uc2VjdXRpdmUKKwlTU0UgcmVnaXN0ZXJzIGRpcmVjdGx5LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jIChtYWluKTogUmVtb3ZlIHhmYWlsCisJZm9yIHg4Nl82NCBsaW51eCB0YXJnZXRzLgorCisyMDA5LTEyLTA0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTik6IEluY3JlbWVudAorCXBmciBmb3IgbG9uZyBkb3VibGUgc3BsaXQgYmV0d2VlbiBmcHIxMyBhbmQgc3RhY2suCisKKzIwMDktMTItMDMgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogSW5jcmVtZW50IG5leHRfYXJnIGFuZAorCWZwYXJnX2NvdW50IHR3aWNlIGZvciBsb25nIGRvdWJsZS4KKworMjAwOS0xMi0wMyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJUFIgbGliZmZpLzQyMjQzCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBSZW1vdmUgZXh0cmEgcGFyZW50aGVzZXMuCisKKzIwMDktMTItMDMgIFVyb3MgQml6amFrICA8dWJpempha0BnbWFpbC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jIChtYWluKTogRml4IGZvcm1hdCBzdHJpbmcuCisJUmVtb3ZlIHhmYWlscyBmb3IgeDg2IGxpbnV4IHRhcmdldHMuCisKKzIwMDktMTItMDIgIERhdmlkIEVkZWxzb2huICA8ZWRlbHNvaG5AZ251Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogRml4IHR5cG8gaW4gSU5UNjQKKwljYXNlLgorCisyMDA5LTEyLTAxICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2FpeC5TIChmZmlfY2FsbF9BSVgpOiBDb252ZXJ0IHRvIG1vcmUgc3RhbmRhcmQKKwlyZWdpc3RlciB1c2FnZS4gIENhbGwgZmZpX3ByZXBfYXJncyBkaXJlY3RseS4gIEFkZCBsb25nIGRvdWJsZQorCXJldHVybiB2YWx1ZSBzdXBwb3J0LgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogRG91YmxlIGFyZyBpbmNyZW1lbnQKKwlhcHBsaWVzIHRvIEZGSV9UWVBFX0RPVUJMRS4gIENvcnJlY3QgZnByX2Jhc2UgaW5jcmVtZW50IHR5cG8uCisJU2VwYXJhdGUgRkZJX1RZUEVfU0lOVDMyIGFuZCBGRklfVFlQRV9VSU5UMzIgY2FzZXMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogT25seSAxNiBieXRlIHN0YWNrIGFsaWdubWVudCBpbiA2NCBiaXQKKwltb2RlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogUmVtb3ZlIG5mIGFuZCBuZyBjb3VudGVycy4gIE1vdmUgdGVtcAorCWludG8gY2FzZS4KKwkqIHNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6IE1haW50YWluIDE2IGJ5dGUgc3RhY2sgYWxpZ25tZW50LgorCUFsbG9jYXRlIHJlc3VsdCBhcmVhIGJldHdlZW4gcGFyYW1zIGFuZCBGUFJzLgorCisyMDA5LTExLTMwICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwlQUiB0YXJnZXQvMzU0ODQKKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChQT1dFUlBDNjQpOiBEZWZpbmUgZm9yIFBQQzY0IExpbnV4IGFuZAorCUFJWDY0LgorCSogc3JjL3Bvd2VycGMvYWl4LlM6IEltcGxlbWVudCBBSVg2NCB2ZXJzaW9uLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogSW1wbGVtZW50IEFJWDY0IHZlcnNpb24uCisJKGZmaV9jbG9zdXJlX0FTTSk6IFVzZSBleHRzYiwgbGhhIGFuZCBkaXNwbGFtZW50IGFkZHJlc3Nlcy4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfYXJncyk6IEltcGxlbWVudCBBSVg2NAorCXN1cHBvcnQuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2FtZS4KKwkoZmZpX2NhbGwpOiBTYW1lLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogU2FtZS4KKworMjAwOS0xMS0wMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCVBSIGxpYmZmaS80MTkwOAorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Rlc3RjbG9zdXJlLmM6IE5ldyB0ZXN0LgorCisyMDA5LTA5LTI4ICBLYWkgVGlldHogIDxrYWkudGlldHpAb25ldmlzaW9uLmNvbT4KKworCSogc3JjL3g4Ni93aW42NC5TIChfZmZpX2NhbGxfd2luNjQgc3RhY2spOiBSZW1vdmUgZm9yIGdudQorCWFzc2VtYmx5IHZlcnNpb24gdXNlIG9mIF9fX2Noa3N0ay4KKworMjAwOS0wOS0yMyAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQHVidW50dS5jb20+CisKKwlQUiBsaWJmZmkvNDAyNDIsIFBSIGxpYmZmaS80MTQ0MworCSogc3JjL2FybS9zeXN2LlMgKF9fQVJNX0FSQ0hfXyk6IERlZmluZSBmb3IgcHJvY2Vzc29ycworCV9fQVJNX0FSQ0hfNlQyX18sIF9fQVJNX0FSQ0hfNk1fXywgX19BUk1fQVJDSF83X18sCisJX19BUk1fQVJDSF83QV9fLCBfX0FSTV9BUkNIXzdSX18sIF9fQVJNX0FSQ0hfN01fXy4KKwlDaGFuZ2UgdGhlIGNvbmRpdGlvbmFscyB0byBfX1NPRlRGUF9fIHx8IF9fQVJNX0VBQklfXworCWZvciAtbWZsb2F0LWFiaT1zb2Z0ZnAgdG8gd29yay4KKworMjAwOS0wOS0xNyAgTG9yZW4gSi4gUml0dGxlICA8bGpyaXR0bGVAYWNtLm9yZz4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MyAoc3RyaWtlcyBhZ2FpbikKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIFg4Nl9GUkVFQlNEIHRvCisJZW5hYmxlIHByb3BlciBleHRlbnNpb24gb24gY2hhciBhbmQgc2hvcnQuCisKKzIwMDktMDktMTUgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGNhdml1bW5ldHdvcmtzLmNvbT4KKworCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfdG9fcnZhbHVlKTogUmVtb3ZlIHNwZWNpYWwKKwloYW5kbGluZyBmb3IgRkZJX1RZUEVfUE9JTlRFUi4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChGRklfVFlQRV9TVFJVQ1RfRF9TT0ZULAorCUZGSV9UWVBFX1NUUlVDVF9GX1NPRlQsIEZGSV9UWVBFX1NUUlVDVF9ERF9TT0ZULAorCUZGSV9UWVBFX1NUUlVDVF9GRl9TT0ZULCBGRklfVFlQRV9TVFJVQ1RfRkRfU09GVCwKKwlGRklfVFlQRV9TVFJVQ1RfREZfU09GVCwgRkZJX1RZUEVfU1RSVUNUX1NPRlQpOiBOZXcgZGVmaW5lcy4KKwkoRkZJX04zMl9TT0ZUX0ZMT0FULCBGRklfTjY0X1NPRlRfRkxPQVQpOiBOZXcgZmZpX2FiaSBlbnVtZXJhdGlvbnMuCisJKGVudW0gZmZpX2FiaSk6IFNldCBGRklfREVGQVVMVF9BQkkgZm9yIHNvZnQtZmxvYXQuCisJKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2NhbGxfTjMyKTogQWRkIGhhbmRsaW5nIGZvciBzb2Z0LWZsb2F0CisJc3RydWN0dXJlIGFuZCBwb2ludGVyIHJldHVybnMuCisJKGZmaV9jbG9zdXJlX04zMik6IEFkZCBoYW5kbGluZyBmb3IgcG9pbnRlciByZXR1cm5zLgorCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGNhbGNfbjMyX3N0cnVjdF9mbGFncywKKwljYWxjX24zMl9yZXR1cm5fc3RydWN0X2ZsYWdzKTogSGFuZGxlIHNvZnQtZmxvYXQuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogIEhhbmRsZSBzb2Z0LWZsb2F0LCBmaXggcG9pbnRlciBoYW5kbGluZy4KKwkoZmZpX2NhbGxfTjMyKTogRGVjbGFyZSBwcm9wZXIgYXJndW1lbnQgdHlwZXMuCisJKGZmaV9jYWxsLCBjb3B5X3N0cnVjdF9OMzIsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogSGFuZGxlCisJc29mdC1mbG9hdC4KKworMjAwOS0wOC0yNCAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogY29uZmlndXJlLmFjIChBQ19QUkVSRVEpOiBCdW1wIHRvIDIuNjQuCisKKzIwMDktMDgtMjIgIFJhbGYgV2lsZGVuaHVlcyAgPFJhbGYuV2lsZGVuaHVlc0BnbXguZGU+CisKKwkqIE1ha2VmaWxlLmFtIChpbnN0YWxsLWh0bWwsIGluc3RhbGwtcGRmKTogUmVtb3ZlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIG1hbi9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAxMS0wOC0yMiAgSmFzcGVyIExpZXZpc3NlIEFkcmlhYW5zZSA8amFzcGVyQG9wZW5ic2Qub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBPcGVuQlNEL2hwcGEgYW5kIE9wZW5CU0QvcG93ZXJwYyBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDA5LTA3LTMwICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmUuYWMgKF9BQ19BUkdfVkFSX1BSRUNJT1VTKTogVXNlIG00X3JlbmFtZV9mb3JjZS4KKworMjAwOS0wNy0yNCAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisKKwlQUiBsaWJmZmkvNDA4MDcKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWxzbyB1c2Ugc2lnbi96ZXJvLWV4dGVuZGluZworCXJldHVybiB0eXBlcyBmb3IgWDg2X1dJTjMyLgorCSogc3JjL3g4Ni93aW4zMi5TIChfZmZpX2NhbGxfU1lTVik6IEhhbmRsZSBvbWl0dGVkIHJldHVybiB0eXBlcy4KKwkoX2ZmaV9jYWxsX1NURENBTEwsIF9mZmlfY2xvc3VyZV9TWVNWLCBfZmZpX2Nsb3N1cmVfcmF3X1NZU1YsCisJX2ZmaV9jbG9zdXJlX1NURENBTEwpOiBMaWtld2lzZS4KKworCSogc3JjL2Nsb3N1cmVzLmMgKGlzX3NlbGludXhfZW5hYmxlZCk6IERlZmluZSB0byBjb25zdCAwIGZvciBDeWd3aW4uCisJKGRsbW1hcCwgZGxtdW5tYXApOiBBbHNvIHVzZSB0aGVzZSBmdW5jdGlvbnMgb24gQ3lnd2luLgorCisyMDA5LTA3LTExICBSaWNoYXJkIFNhbmRpZm9yZCAgPHJkc2FuZGlmb3JkQGdvb2dsZW1haWwuY29tPgorCisJUFIgdGVzdHN1aXRlLzQwNjk5CisJUFIgdGVzdHN1aXRlLzQwNzA3CisJUFIgdGVzdHN1aXRlLzQwNzA5CisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IFJldmVydCAyMDA5LTA3LTAyLCAyMDA5LTA3LTAxIGFuZAorCTIwMDktMDYtMzAgY29tbWl0cy4KKworMjAwOS0wNy0wMSAgUmljaGFyZCBTYW5kaWZvcmQgIDxyLnNhbmRpZm9yZEB1ay5pYm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogU2V0IGxkX2xpYnJhcnlfcGF0aAorCXRvICIiIGJlZm9yZSBhZGRpbmcgcGF0aHMuICAoVGhpcyByZWluc3RhdGVzIGFuIGFzc2lnbm1lbnQgdGhhdAorCXdhcyByZW1vdmVkIGJ5IG15IDIwMDktMDYtMzAgY29tbWl0LCBidXQgY2hhbmdlcyB0aGUgaW5pdGlhbAorCXZhbHVlIGZyb20gIi4iIHRvICIiLikKKworMjAwOS0wNy0wMSAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgorCisJUFIgdGVzdHN1aXRlLzQwNjAxCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHAgKGxpYmZmaS1pbml0KTogUHJvcGVybHkgc2V0CisJZ2NjZGlyLiAgQWRqdXN0IGxkX2xpYnJhcnlfcGF0aCBmb3IgZ2NjIG9ubHkgaWYgZ2NjZGlyIGlzbid0CisJZW1wdHkuCisKKzIwMDktMDYtMzAgIFJpY2hhcmQgU2FuZGlmb3JkICA8ci5zYW5kaWZvcmRAdWsuaWJtLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IERvbid0IGFkZCAiLiIKKwl0byBsZF9saWJyYXJ5X3BhdGguICBVc2UgYWRkX3BhdGguICBBZGQganVzdCBmaW5kX2xpYmdjY19zCisJdG8gbGRfbGlicmFyeV9wYXRoLCBub3QgZXZlcnkgbGliZ2NjIG11bHRpbGliIGRpcmVjdG9yeS4KKworMjAwOS0wNi0xNiAgV2ltIExld2lzICA8d2ltbEBoaGhoLm9yZz4KKworCSogc3JjL3Bvd2VycGMvZmZpLmM6IEF2b2lkIGNsb2JiZXJpbmcgY3IzIGFuZCBjcjQsIHdoaWNoIGFyZQorCXN1cHBvc2VkIHRvIGJlIGNhbGxlZS1zYXZlZC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUyAoc21hbGxfc3RydWN0X3JldHVybl92YWx1ZSk6IEZpeCBvdmVycnVuIG9mCisJcmV0dXJuIGJ1ZmZlciBmb3Igb2RkLXNpemUgc3RydWN0cy4KKworMjAwOS0wNi0xNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCVBSIGxpYmZmaS80MDQ0NAorCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmlfdGFyZ2V0X2NvbXBpbGUpOiBBZGQKKwlhbGxvd19zdGFja19leGVjdXRlIGZvciBEYXJ3aW4uCisKKzIwMDktMDYtMTYgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuYWMgKFRBUkdFVERJUik6IEFkZCBtaXNzaW5nIGJsYW5rIGxpbmVzLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA5LTA2LTE2ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBGaXggcHJpbnRmIGZvcm1hdAorCXNwZWNpZmllcnMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oLAorCXRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggKFBSSWRMTCwgUFJJdUxMKTogRGVmaW5lLgorCisyMDA5LTA2LTE1ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiB4ZmFpbCBldmVyeXdoZXJlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IExpa2V3aXNlLgorCisyMDA5LTA2LTEyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW06IFJlbW92ZSBpbmZvX1RFWElORk9TLgorCisyMDA5LTA2LTEyICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogQ2hhbmdlTG9nLmxpYmZmaTogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBGaXggcHJpbnRmIGZvcm1hdAorCXNwZWNpZmllcnMuCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IGluY2x1ZGUgc3RkaW50LmguCisKKzIwMDktMDYtMTEgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogTWFrZWZpbGUuYW0sCisJY29uZmlndXJlLmFjLAorCWluY2x1ZGUvZmZpLmguaW4sCisJaW5jbHVkZS9mZmlfY29tbW9uLmgsCisJc3JjL2Nsb3N1cmVzLmMsCisJc3JjL2RsbWFsbG9jLmMsCisJc3JjL3g4Ni9mZmkuYywKKwlzcmMveDg2L2ZmaXRhcmdldC5oLAorCXNyYy94ODYvd2luNjQuUyAobmV3KSwKKwlSRUFETUU6IEFkZGVkIHdpbjY0IHN1cHBvcnQgKG1pbmd3IG9yIE1TVkMpCisJKiBNYWtlZmlsZS5pbiwKKwlpbmNsdWRlL01ha2VmaWxlLmluLAorCW1hbi9NYWtlZmlsZS5pbiwKKwl0ZXN0c3VpdGUvTWFrZWZpbGUuaW4sCisJY29uZmlndXJlLAorCWFjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkCisJKiBsdGNmLWMuc2g6IHByb3Blcmx5IGVzY2FwZSBjeWd3aW4vdzMyIHBhdGgKKwkqIG1hbi9mZmlfY2FsbC4zOiBDbGFyaWZ5IHNpemUgcmVxdWlyZW1lbnRzIGZvciByZXR1cm4gdmFsdWUuCisJKiBzcmMveDg2L2ZmaTY0LmM6IEZpeCBmaWxlbmFtZSBpbiBjb21tZW50LgorCSogc3JjL3g4Ni93aW4zMi5TOiBSZW1vdmUgdW51c2VkIGV4dGVybi4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQzMi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2h1Z2Vfc3RydWN0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDMuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGRsLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fbGwxLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jLAorIAl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMsCisgCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYywKKyAJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogdXNlIGZmaV9jbG9zdXJlX2FsbG9jIGluc3RlYWQKKwlvZiBjaGVja2luZyBmb3IgTU1BUC4gIFVzZSBpbnRwdHJfdCBpbnN0ZWFkIG9mIGxvbmcgY2FzdHMuCisKKzIwMDktMDYtMTEgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYzogQWRkIHhmYWlsIHNoKi0qLWxpbnV4LSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYzogQWRkIHhmYWlsIHNoKi0qLSouCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF90eXBlZGVmLmM6IExpa2V3aXNlLgorCisyMDA5LTA2LTA5ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mcmVlYnNkLlM6IEFkZCBtaXNzaW5nIGZpbGUuCisKKzIwMDktMDYtMDggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJSW1wb3J0IGZyb20gbGliZmZpIDMuMC44OgorCisJKiBkb2MvbGliZmZpLnRleGk6IE5ldyBmaWxlLgorCSogZG9jL2xpYmZmaS5pbmZvOiBMaWtld2lzZS4KKwkqIGRvYy9zdGFtcC12dGk6IExpa2V3aXNlLgorCSogbWFuL01ha2VmaWxlLmFtOiBOZXcgZmlsZS4KKwkqIG1hbi9mZmlfY2FsbC4zOiBOZXcgZmlsZS4KKworCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgc3JjL3g4Ni9kYXJ3aW42NC5TLAorCXNyYy9kbG1hbGxvYy5jLgorCShub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgWDg2X0ZSRUVCU0QuCisKKwkqIGNvbmZpZ3VyZS5hYzogQnVtcCB2ZXJzaW9uIHRvIDMuMC44LgorCXBhcmlzYyotKi1saW51eCo6IEFkZC4KKwlpMzg2LSotZnJlZWJzZCogfCBpMzg2LSotb3BlbmJzZCo6IEFkZC4KKwlwb3dlcnBjLSotYmVvcyo6IEFkZC4KKwlBTV9DT05ESVRJT05BTCBYODZfRlJFRUJTRDogQWRkLgorCUFDX0NPTkZJR19GSUxFUzogQWRkIG1hbi9NYWtlZmlsZS4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoRkZJX0ZOKTogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCisKKzIwMDktMDYtMDggIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBSRUFETUU6IEltcG9ydCBmcm9tIGxpYmZmaSAzLjAuOC4KKworMjAwOS0wNi0wOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9lcnJfYmFkX2FiaS5jOiBBZGQgeGZhaWxzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmM6IEFkZCB4ZmFpbHMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmM6IEFkZCB4ZmFpbCB4ODZfNjQtKi1saW51eC0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jOiBBZGQgeGZhaWxzLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jOiBBZGQgX19VTlVTRURfXyB0byBhcmdzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UuYzogIExpa2V3aXNlLgorCisyMDA4LTEyLTI2ICBUaW1vdGh5IFdhbGwgIDx0d2FsbEB1c2Vycy5zZi5uZXQ+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdDIuYzogbWFyayBleHBlY3RlZAorCWZhaWx1cmVzIG9uIHg4Nl82NCBjeWd3aW4vbWluZ3cuCisKKzIwMDgtMTItMjIgIFRpbW90aHkgV2FsbCAgPHR3YWxsQHVzZXJzLnNmLm5ldD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfbG9jX2ZuMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3BvaW50ZXJfc3RhY2suYzogdXNlIHBvcnRhYmxlIGNhc3QgZnJvbQorCXBvaW50ZXIgdG8gaW50ZWdlciAoaW50cHRyX3QpLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmM6IGRpc2FibGUgZm9yIHdpbjY0LgorCisyMDA4LTA3LTI0ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kYmxzX3N0cnVjdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyX3N0YWNrLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfYWJpLmM6IENsZWFuIHVwIGZhaWx1cmVzIGZyb20KKwljb21waWxlciB3YXJuaW5ncy4KKworMjAwOC0wMy0wNCAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisJICAgIEJsYWtlIENoYWZmaW4KKwkgICAgaG9zQHRhbWFuZWdpLm9yZworCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQyLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZV9zcGxpdC5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RibHNfc3RydWN0LmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19wb2ludGVyLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfcG9pbnRlcl9zdGFjay5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZXJyX2JhZF9hYmkuYworCSAgdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbGFyZ2UyLmMKKwkgIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJldF9sYXJnZS5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtMi5jCisJICB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RyZXRfbWVkaXVtLmM6IE5ldyB0ZXN0cyBmcm9tIEFwcGxlLgorCisyMDA5LTA2LTA1ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni9mZml0YXJnZXQuaCwgc3JjL3g4Ni9mZmkuYzogTWVyZ2Ugc3RkY2FsbCBjaGFuZ2VzIGZyb20KKwlsaWJmZmkuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oLCBzcmMveDg2L3dpbjMyLlMsIHNyYy94ODYvZmZpLmM6IEJhY2sgb3V0CisJc3RkY2FsbCBjaGFuZ2VzLgorCisyMDA4LTAyLTI2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKwkgICAgVGhvbWFzIEhlbGxlciAgPHRoZWxsZXJAY3R5cGVzLm9yZz4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcik6IENoYW5nZSBDKysgY29tbWVudCB0byBDCisJY29tbWVudC4KKworMjAwOC0wMi0wMyAgVGltb3RoeSBXYWxsICA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiBzcmMveDg2L2ZmaS5jIChGRklfSU5JVF9UUkFNUE9MSU5FX1NURENBTEwpOiBDYWxjdWxhdGUganVtcCByZXR1cm4KKwkgIG9mZnNldCBiYXNlZCBvbiBjb2RlIHBvaW50ZXIsIG5vdCBkYXRhIHBvaW50ZXIuCisKKzIwMDgtMDEtMzEgIFRpbW90aHkgV2FsbCA8dHdhbGxAdXNlcnMuc2YubmV0PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmM6IEFkZCB0ZXN0IGZvciBzdGRjYWxsCisJY2xvc3VyZXMuCisJKiBzcmMveDg2L2ZmaXRhcmdldC5oOiBJbmNyZWFzZSBzaXplIG9mIHRyYW1wb2xpbmUgZm9yIHN0ZGNhbGwKKwljbG9zdXJlcy4KKwkqIHNyYy94ODYvd2luMzIuUzogQWRkIGFzc2VtYmx5IGZvciBzdGRjYWxsIGNsb3N1cmUuCisJKiBzcmMveDg2L2ZmaS5jOiBJbml0aWFsaXplIHN0ZGNhbGwgY2xvc3VyZSB0cmFtcG9saW5lLgorCisyMDA5LTA2LTA0ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQ2hhbmdlIHZvaWQgKCopKCkgdG8gdm9pZCAoKikodm9pZCkuCisJKiBzcmMveDg2L2ZmaS5jOiBMaWtld2lzZS4KKworMjAwOS0wNi0wNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlM6IEluc2VydCBsaWNlbmNlIGhlYWRlci4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9tNjhrL3N5c3YuUzogTGlrZXdpc2UuCisKKwkqIHNyYy9zaDY0L2ZmaS5jOiBDaGFuZ2Ugdm9pZCAoKikoKSB0byB2b2lkICgqKSh2b2lkKS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCisJKiBzcmMvbTMyci9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc2g2NC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMveDg2L2ZmaTY0LmM6IExpa2V3aXNlLgorCSogc3JjL2FscGhhL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9hbHBoYS9vc2YuUzogTGlrZXdpc2UuCisJKiBzcmMvZnJ2L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zMzkwL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wYS9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcGEvaHB1eDMyLlM6IExpa2V3aXNlLgorCSogc3JjL2lhNjQvdW5peC5TOiBMaWtld2lzZS4KKwkqIHNyYy9pYTY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvbWlwcy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc2gvZmZpLmM6IExpa2V3aXNlLgorCisyMDA4LTAyLTE1ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiBzcmMvbWlwcy9mZmkuYyAoVVNFX19CVUlMVElOX19fQ0xFQVJfQ0FDSEUpOgorCURlZmluZSAoY29uZGl0aW9uYWxseSksIGFuZCB1c2UgaXQgdG8gaW5jbHVkZSBjYWNoZWN0bC5oLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IEZpeCBjYWNoZSBmbHVzaGluZy4KKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oIChfQUJJTjMyLCBfQUJJNjQsIF9BQklPMzIpOiBEZWZpbmUuCisKKzIwMDktMDYtMDQgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJaW5jbHVkZS9mZmkuaC5pbiwKKwlzcmMvYXJtL2ZmaXRhcmdldC5oLAorCXNyYy9hcm0vZmZpLmMsCisJc3JjL2FybS9zeXN2LlMsCisJc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgsCisJc3JjL2Nsb3N1cmVzLmMsCisJc3JjL3NoNjQvZmZpdGFyZ2V0LmgsCisJc3JjL3NoNjQvZmZpLmMsCisJc3JjL3NoNjQvc3lzdi5TLAorCXNyYy90eXBlcy5jLAorCXNyYy94ODYvZmZpNjQuYywKKwlzcmMveDg2L2ZmaXRhcmdldC5oLAorCXNyYy94ODYvd2luMzIuUywKKwlzcmMveDg2L2Rhcndpbi5TLAorCXNyYy94ODYvZmZpLmMsCisJc3JjL3g4Ni9zeXN2LlMsCisJc3JjL3g4Ni91bml4NjQuUywKKwlzcmMvYWxwaGEvZmZpdGFyZ2V0LmgsCisJc3JjL2FscGhhL2ZmaS5jLAorCXNyYy9hbHBoYS9vc2YuUywKKwlzcmMvbTY4ay9mZml0YXJnZXQuaCwKKwlzcmMvZnJ2L2ZmaXRhcmdldC5oLAorCXNyYy9mcnYvZmZpLmMsCisJc3JjL3MzOTAvZmZpdGFyZ2V0LmgsCisJc3JjL3MzOTAvc3lzdi5TLAorCXNyYy9jcmlzL2ZmaXRhcmdldC5oLAorCXNyYy9wYS9saW51eC5TLAorCXNyYy9wYS9mZml0YXJnZXQuaCwKKwlzcmMvcGEvZmZpLmMsCisJc3JjL3Jhd19hcGkuYywKKwlzcmMvaWE2NC9mZml0YXJnZXQuaCwKKwlzcmMvaWE2NC91bml4LlMsCisJc3JjL2lhNjQvZmZpLmMsCisJc3JjL2lhNjQvaWE2NF9mbGFncy5oLAorCXNyYy9qYXZhX3Jhd19hcGkuYywKKwlzcmMvZGVidWcuYywKKwlzcmMvc3BhcmMvdjkuUywKKwlzcmMvc3BhcmMvZmZpdGFyZ2V0LmgsCisJc3JjL3NwYXJjL2ZmaS5jLAorCXNyYy9zcGFyYy92OC5TLAorCXNyYy9taXBzL2ZmaXRhcmdldC5oLAorCXNyYy9taXBzL24zMi5TLAorCXNyYy9taXBzL28zMi5TLAorCXNyYy9taXBzL2ZmaS5jLAorCXNyYy9wcmVwX2NpZi5jLAorCXNyYy9zaC9mZml0YXJnZXQuaCwKKwlzcmMvc2gvZmZpLmMsCisJc3JjL3NoL3N5c3YuUzogVXBkYXRlIGxpY2Vuc2UgdGV4dC4KKworMjAwOS0wNS0yMiAgRGF2ZSBLb3JuICA8ZGF2ZS5rb3JuLmN5Z3dpbkBnbWFpbC5jb20+CisKKwkqIHNyYy94ODYvd2luMzIuUyAoX2ZmaV9jbG9zdXJlX1NURENBTEwpOiAgTmV3IGZ1bmN0aW9uLgorCSguZWhfZnJhbWUpOiAgQWRkIEZERSBmb3IgaXQuCisKKzIwMDktMDUtMjIgIERhdmUgS29ybiAgPGRhdmUua29ybi5jeWd3aW5AZ21haWwuY29tPgorCisJKiBjb25maWd1cmUuYWM6ICBBbHNvIGNoZWNrIGlmIGFzc2VtYmxlciBzdXBwb3J0cyBwYy1yZWxhdGl2ZQorCXJlbG9jcyBvbiBYODZfV0lOMzIgdGFyZ2V0cy4KKwkqIGNvbmZpZ3VyZTogIFJlZ2VuZXJhdGUuCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9wcmVwX2FyZ3MpOiAgRGVjbGFyZSBleHRlcm4sIG5vdCBnbG9iYWwuCisJKF9mZmlfY2FsbF9TWVNWKTogIEFkZCBtaXNzaW5nIGZ1bmN0aW9uIHR5cGUgc3ltYm9sIC5kZWYgYW5kCisJYWRkIEVIIG1hcmt1cCBsYWJlbHMuCisJKF9mZmlfY2FsbF9TVERDQUxMKTogIExpa2V3aXNlLgorCShfZmZpX2Nsb3N1cmVfU1lTVik6ICBMaWtld2lzZS4KKwkoX2ZmaV9jbG9zdXJlX3Jhd19TWVNWKTogIExpa2V3aXNlLgorCSguZWhfZnJhbWUpOiAgQWRkIGhhbmQtY3JhZnRlZCBFSCBkYXRhLgorCisyMDA5LTA0LTA5ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBDaGFuZ2UgY29weXJpZ2h0IGhlYWRlciB0byByZWZlciB0bworCXZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kIHRvIHBvaW50IHJlYWRlcnMKKwlhdCB0aGUgQ09QWUlORzMgZmlsZSBhbmQgdGhlIEZTRidzIGxpY2Vuc2Ugd2ViIHBhZ2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwOiBMaWtld2lzZS4KKworMjAwOS0wMy0wMSAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTEyLTE4ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCVBSIGxpYmZmaS8yNjA0OAorCSogY29uZmlndXJlLmFjIChIQVZFX0FTX1g4Nl9QQ1JFTCk6IE5ldyB0ZXN0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCisJKiBzcmMveDg2L3N5c3YuUyBbIUZGSV9OT19SQVdfQVBJXTogUHJlY2FsY3VsYXRlCisJUkFXX0NMT1NVUkVfQ0lGX09GRlNFVCwgUkFXX0NMT1NVUkVfRlVOX09GRlNFVCwKKwlSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUIGZvciB0aGUgU29sYXJpcyAxMC94ODYgYXNzZW1ibGVyLgorCSguZWhfZnJhbWUpOiBPbmx5IHVzZSBTWU1CT0wtLiBpZmYgSEFWRV9BU19YODZfUENSRUwuCisJKiBzcmMveDg2L3VuaXg2NC5TICguTHN0b3JlX3RhYmxlKTogTW92ZSB0byAudGV4dCBzZWN0aW9uLgorCSguTGxvYWRfdGFibGUpOiBMaWtld2lzZS4KKwkoLmVoX2ZyYW1lKTogT25seSB1c2UgU1lNQk9MLS4gaWZmIEhBVkVfQVNfWDg2X1BDUkVMLgorCisyMDA4LTEyLTE4ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMTEtMjEgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAYWRhY29yZS5jb20+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGQgc3VwcG9ydCBmb3IKKwlzaWduZWQvdW5zaWduZWQgaW50OC8xNiByZXR1cm4gdmFsdWVzLgorCSogc3JjL3NwYXJjL3Y4LlMgKGZmaV9jYWxsX3Y4KTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX3Y4KTogTGlrZXdpc2UuCisKKzIwMDgtMDktMjYgIFBldGVyIE8nR29ybWFuICA8cG9nbWFAdGhld3JpdHRlbndvcmQuY29tPgorCSAgICBTdGV2ZSBFbGxjZXkgIDxzamVAY3VwLmhwLmNvbT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlIGZvciBuZXcgbGlidG9vbC4KKwkqIE1ha2VmaWxlLmluOiBEaXR0by4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IERpdHRvLgorCSogYWNsb2NhbC5tNDogRGl0dG8uCisKKzIwMDgtMDgtMjUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIChmZmlfYWJpKTogQWRkIEZGSV9MSU5VWCBhbmQKKwlGRklfTElOVVhfU09GVF9GTE9BVCB0byB0aGUgUE9XRVJQQ19GUkVFQlNEIGVudW0uCisJQWRkIG5vdGUgYWJvdXQgZmxhZyBiaXRzIHVzZWQgZm9yIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNULgorCUFkanVzdCBjb3B5cmlnaHQgbm90aWNlLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IEFkZCB0d28gbmV3IGZsYWdzIHRvIGluZGljYXRlIGlmIHdlIGhhdmUgb25lCisJcmVnaXN0ZXIgb3IgdHdvIHJlZ2lzdGVyIHRvIHVzZSBmb3IgRkZJX1NZU1Ygc3RydWN0cy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBQYXNzIHRoZSByaWdodCByZWdpc3RlciBmbGFnIGludHJvZHVjZWQgYWJvdmUuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogRml4IHRoZSByZXR1cm4gdHlwZSBmb3IKKwlGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVC4gQ29tbWVudC4KKwlBZGp1c3QgY29weXJpZ2h0IG5vdGljZS4KKworMjAwOC0wNy0xNiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBUdXJuIElOU04gaW50byBhbiB1bnNpZ25lZAorCWludC4KKworMjAwOC0wNi0xNyAgUmFsZiBXaWxkZW5odWVzICA8UmFsZi5XaWxkZW5odWVzQGdteC5kZT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwOC0wNi0wNyAgSm9zZXBoIE15ZXJzICA8am9zZXBoQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAocGFyaXNjKi0qLWxpbnV4KiwgcG93ZXJwYy0qLXN5c3YqLAorCXBvd2VycGMtKi1iZW9zKik6IFJlbW92ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0wNS0wOSAgSnVsaWFuIEJyb3duICA8anVsaWFuQGNvZGVzb3VyY2VyeS5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChMVExERkxBR1MpOiBOZXcuCisJKGxpYmZmaV9sYV9MREZMQUdTKTogVXNlIGFib3ZlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDQtMTggIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwlQUiBib290c3RyYXAvMzU0NTcKKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDgtMDMtMjYgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvc3lzdi5TOiBBZGQgLm5vdGUuR05VLXN0YWNrIG9uIExpbnV4LgorCSogc3JjL3NoNjQvc3lzdi5TOiBMaWtld2lzZS4KKworMjAwOC0wMy0yNiAgRGFuaWVsIEphY29ib3dpdHogIDxkYW5AZGViaWFuLm9yZz4KKworCSogc3JjL2FybS9zeXN2LlM6IEZpeCBBUk0gY29tbWVudCBtYXJrZXIuCisKKzIwMDgtMDMtMjYgIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvYWxwaGEvb3NmLlM6IEFkZCAubm90ZS5HTlUtc3RhY2sgb24gTGludXguCisJKiBzcmMvczM5MC9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni91bml4NjQuUzogTGlrZXdpc2UuCisJKiBzcmMveDg2L3N5c3YuUzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvdjguUzogTGlrZXdpc2UuCisJKiBzcmMvc3BhcmMvdjkuUzogTGlrZXdpc2UuCisJKiBzcmMvbTY4ay9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL2FybS9zeXN2LlM6IExpa2V3aXNlLgorCisyMDA4LTAzLTE2ICBSYWxmIFdpbGRlbmh1ZXMgIDxSYWxmLldpbGRlbmh1ZXNAZ214LmRlPgorCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKworMjAwOC0wMi0xMiAgQmpvZXJuIEtvZW5pZyAgPGJrb2VuaWdAYWxwaGEtdGllcmNoZW4uZGU+CisJICAgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIGFtZDY0LSotZnJlZWJzZCogdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA4LTAxLTMwICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwlQUiBsaWJmZmkvMzQ2MTIKKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9TWVNWKTogUG9wIDQgYnl0ZSBmcm9tIHN0YWNrIHdoZW4KKwlyZXR1cm5pbmcgc3RydWN0LgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IEFkZCAiLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIgorCXRlc3RzLgorCisyMDA4LTAxLTI0ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwOC0wMS0wNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBGaXggdGhpbmtvLgorCisyMDA4LTAxLTA1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJUFIgdGVzdHN1aXRlLzMyODQzCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBjb2RlIGZvcgorCXNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2IGZvciBYODZfREFSV0lOLgorCVVwZGF0ZWQgY29weXJpZ2h0IGluZm8uCisJSGFuZGxlIG9uZSBhbmQgdHdvIGJ5dGUgc3RydWN0cyB3aXRoIHNwZWNpYWwgY2lmLT5mbGFncy4KKwkqIHNyYy94ODYvZmZpdGFyZ2V0Lmg6IEFkZCBzcGVjaWFsIHR5cGVzIGZvciBvbmUgYW5kIHR3byBieXRlIHN0cnVjdHMuCisJVXBkYXRlZCBjb3B5cmlnaHQgaW5mby4KKwkqIHNyYy94ODYvZGFyd2luLlMgKGZmaV9jYWxsX1NZU1YpOiBSZXdyaXRlIHRvIHVzZSBhIGp1bXAgdGFibGUgbGlrZQorCXN5c3YuUworCVJlbW92ZSBjb2RlIHRvIHBvcCBhcmdzIGZyb20gdGhlIHN0YWNrIGFmdGVyIGNhbGwuCisJU3BlY2lhbC1jYXNlIHNpZ25lZC91bnNpZ25lZCBmb3IgaW50OC8xNiwgb25lIGFuZCB0d28gYnl0ZSBzdHJ1Y3RzLgorCShmZmlfY2xvc3VyZV9yYXdfU1lTVik6IEhhbmRsZSBGRklfVFlQRV9VSU5UOCwKKwlGRklfVFlQRV9TSU5UOCwgRkZJX1RZUEVfVUlOVDE2LCBGRklfVFlQRV9TSU5UMTYsIEZGSV9UWVBFX1VJTlQzMiwKKwlGRklfVFlQRV9TSU5UMzIuCisJVXBkYXRlZCBjb3B5cmlnaHQgaW5mby4KKworMjAwNy0xMi0wOCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jYWxsX04zMik6ICBSZXBsYWNlIGRhZGQgd2l0aCBBRERVLCBkc3ViIHdpdGgKKwlTVUJVLCBhZGQgd2l0aCBBRERVIGFuZCB1c2Ugc21hbGxlciBjb2RlIHNlcXVlbmNlcy4KKworMjAwNy0xMi0wNyAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGxvbmcgZG91YmxlIHJldHVybgorCXR5cGUuCisKKzIwMDctMTItMDYgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKEZGSV9TSVpFT0ZfSkFWQV9SQVcpOiBEZWZpbmUgaWYgbm90CWFscmVhZHkKKwlkZWZpbmVkLgorCShmZmlfamF2YV9yYXcpOiBOZXcgdHlwZWRlZi4KKwkoZmZpX2phdmFfcmF3X2NhbGwsIGZmaV9qYXZhX3B0cmFycmF5X3RvX3JhdywKKwlmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkpOiBDaGFuZ2UgcGFyYW1ldGVyIHR5cGVzIGZyb20gZmZpX3JhdyB0bworCWZmaV9qYXZhX3Jhdy4KKwkoZmZpX2phdmFfcmF3X2Nsb3N1cmUpIDogU2FtZS4KKwkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZSwgZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MpOiBDaGFuZ2UKKwlwYXJhbWV0ZXIgdHlwZXMuCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3Jhd19zaXplKTogIFJlcGxhY2UgRkZJX1NJWkVPRl9BUkcgd2l0aAorCUZGSV9TSVpFT0ZfSkFWQV9SQVcuCisJKGZmaV9qYXZhX3Jhd190b19wdHJhcnJheSk6IENoYW5nZSB0eXBlIG9mIHJhdyB0byBmZmlfamF2YV9yYXcuCisJUmVwbGFjZSBGRklfU0laRU9GX0FSRyB3aXRoIEZGSV9TSVpFT0ZfSkFWQV9SQVcuIFVzZQorCXNpemVvZihmZmlfamF2YV9yYXcpIGZvciBhbGlnbm1lbnQgY2FsY3VsYXRpb25zLgorCShmZmlfamF2YV9wdHJhcnJheV90b19yYXcpOiBTYW1lLgorCShmZmlfamF2YV9ydmFsdWVfdG9fcmF3KTogQWRkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIEZGSV9UWVBFX1BPSU5URVIKKwlpZiBGRklfU0laRU9GX0pBVkFfUkFXID09IDQuCisJKGZmaV9qYXZhX3Jhd190b19ydmFsdWUpOiBTYW1lLgorCShmZmlfamF2YV9yYXdfY2FsbCk6IENoYW5nZSB0eXBlIG9mIHJhdyB0byBmZmlfamF2YV9yYXcuCisJKGZmaV9qYXZhX3RyYW5zbGF0ZV9hcmdzKTogU2FtZS4KKwkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MsIGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmUpOiBDaGFuZ2UKKwlwYXJhbWV0ZXIgdHlwZXMuCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoRkZJX1NJWkVPRl9KQVZBX1JBVyk6IERlZmluZSBmb3IgTjMyIEFCSS4KKworMjAwNy0xMi0wNiAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogc3JjL21pcHMvbjMyLlMgKGZmaV9jbG9zdXJlX04zMik6IFVzZSA2NC1iaXQgYWRkIGluc3RydWN0aW9uIG9uCisJcG9pbnRlciB2YWx1ZXMuCisKKzIwMDctMTItMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5vcmc+CisKKwlQUiBsaWJmZmkvMzE5MzcKKwkqIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oOiBJbnRyb2R1Y2UgbmV3IEFCSSBGRklfTElOVVhfU09GVF9GTE9BVC4KKwlBZGQgbG9jYWwgRkZJX1RZUEVfVUlOVDEyOCB0byBoYW5kbGUgc29mdC1mbG9hdCBsb25nLWRvdWJsZS0xMjguCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogRGlzdGluZ3Vpc2ggYmV0d2VlbiBfX05PX0ZQUlNfXyBhbmQgbm90IGFuZAorCXNldCB0aGUgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIGFjY29yZGluZyB0by4KKwlBZGQgc3VwcG9ydCBmb3IgcG90ZW50aWFsIHNvZnQtZmxvYXQgc3VwcG9ydCB1bmRlciBoYXJkLWZsb2F0CisJYXJjaGl0ZWN0dXJlLgorCShmZmlfcHJlcF9hcmdzX1NZU1YpOiBTZXQgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIHRvIDAgaW4gY2FzZSBvZgorCUZGSV9MSU5VWF9TT0ZUX0ZMT0FULCBoYW5kbGUgZmxvYXQsIGRvdWJsZXMgYW5kIGxvbmctZG91YmxlcyBhY2NvcmRpbmcKKwl0byB0aGUgRkZJX0xJTlVYX1NPRlRfRkxPQVQgQUJJLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTWFrZSBzdXJlIG5vdCB0byBzdG9yZSBmbG9hdC9kb3VibGUKKwlvbiBhcmNocyB3aGVyZSBfX05PX0ZQUlNfXyBpcyB0cnVlLgorCUFkZCBGRklfVFlQRV9VSU5UMTI4IHN1cHBvcnQuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IEFkZCBzdXBwb3J0IGZvciBzb2Z0LWZsb2F0IGxvbmctZG91YmxlLTEyOC4KKwlBZGp1c3QgY29weXJpZ2h0IG5vdGljZS4KKworMjAwNy0xMS0yNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogc3JjL2Nsb3N1cmVzLmM6IE1vdmUgZGVmaW50aW9uIG9mIE1BWUJFX1VOVVNFRCBmcm9tIGhlcmUgdG8gLi4uCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaDogLi4uIGhlcmUuCisJVXBkYXRlIGNvcHlyaWdodC4KKworMjAwNy0xMS0xNyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBMb2FkIGNvcnJlY3QgY3IgdG8gY29tcGFyZSBpZiB3ZSBoYXZlIGxvbmcgZG91YmxlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jOiBBZGQgYSBjb21tZW50IHRvIHNob3cgd2hpY2ggcGFydCBnb2VzIGludG8gY3I2LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYzogTmV3IHRlc3QuCisKKzIwMDctMDktMDQgICAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvYXJtL3N5c3YuUyAoVU5XSU5EKTogTmV3LgorCShXaG9sZSBmaWxlKTogQ29uZGl0aW9uYWxseSBjb21waWxlIHVud2luZGVyIGRpcmVjdGl2ZXMuCisJKiBzcmMvYXJtL3N5c3YuUzogQWRkIHVud2luZGVyIGRpcmVjdGl2ZXMuCisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBBbGlnbiBzdHJ1Y3RzIGJ5IGF0IGxlYXN0IDQgYnl0ZXMuCisJT25seSB0cmVhdCByMCBhcyBhIHN0cnVjdCBhZGRyZXNzIGlmIHdlJ3JlIGFjdHVhbGx5IHJldHVybmluZyBhCisJc3RydWN0IGJ5IGFkZHJlc3MuCisJT25seSBjb3B5IHRoZSBieXRlcyB0aGF0IGFyZSBhY3R1YWxseSB3aXRoaW4gYSBzdHJ1Y3QuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQSBDb21wb3NpdGUgVHlwZSBub3QgbGFyZ2VyIHRoYW4gNCBieXRlcworCWlzIHJldHVybmVkIGluIHIwLCBub3QgcGFzc2VkIGJ5IGFkZHJlc3MuCisJKGZmaV9jYWxsKTogQWxsb2NhdGUgYSB3b3JkLXNpemVkIHRlbXBvcmFyeSBmb3IgdGhlIGNhc2Ugd2hlcmUKKwlhIGNvbXBvc2l0ZSBpcyByZXR1cm5lZCBpbiByMC4KKwkoZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogQWxpZ24gYXMgbmVjZXNzYXJ5LgorCisyMDA3LTA4LTA1ICBTdGV2ZW4gTmV3YnVyeSAgPHNfal9uZXdidXJ5QHlhaG9vLmNvLnVrPgorCisJKiBzcmMvYXJtL2ZmaS5jIChGRklfSU5JVF9UUkFNUE9MSU5FKTogVXNlIF9fY2xlYXJfY2FjaGUgaW5zdGVhZCBvZgorCWRpcmVjdGx5IHVzaW5nIHRoZSBzeXNfY2FjaGVmbHVzaCBzeXNjYWxsLgorCisyMDA3LTA3LTI3ICBBbmRyZXcgSGFsZXkgIDxhcGhAcmVkaGF0LmNvbT4KKworCSogc3JjL2FybS9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBBZGQgc29mdC1mbG9hdC4KKworMjAwNy0wOS0wMyAgTWFjaWVqIFcuIFJvenlja2kgIDxtYWNyb0BsaW51eC1taXBzLm9yZz4KKworCSogTWFrZWZpbGUuYW06IFVuaWZ5IE1JUFNfSVJJWCBhbmQgTUlQU19MSU5VWCBpbnRvIE1JUFMuCisJKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCisyMDA3LTA4LTI0ICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NsLmM6IE5ldyB0ZXN0LgorCisyMDA3LTA4LTEwICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvYmxlbTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19mbG9hdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Mi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNjRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q4LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnRjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNl8xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MzIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYywKKwl0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYzogUmVtb3ZlIHhmYWlsIGZvciBtaXBzNjQqLSotKi4KKworMjAwNy0wOC0xMCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCVBSIGxpYmZmaS8yODMxMworCSogY29uZmlndXJlLmFjOiBEb24ndCB0cmVhdCBtaXBzNjQgYXMgYSBzcGVjaWFsIGNhc2UuCisJKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIG4zMi5TLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlCisJKiBNYWtlZmlsZS5pbjogRGl0dG8uCisJKiBmZmljb25maWcuaC5pbjogRGl0dG8uCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaCAoUkVHX0wsIFJFR19TLCBTVUJVLCBBRERVLCBTUkwsIExJKTogSW5kZW50LgorCShMQSwgRUhfRlJBTUVfQUxJR04sIEZERV9BRERSX0JZVEVTKTogTmV3IHByZXByb2Nlc3NvciBtYWNyb3MuCisJKEZGSV9ERUZBVUxUX0FCSSk6IFNldCBmb3IgbjY0IGNhc2UuCisJKEZGSV9DTE9TVVJFUywgRkZJX1RSQU1QT0xJTkVfU0laRSk6IERlZmluZSBmb3IgbjMyIGFuZCBuNjQgY2FzZXMuCisJKiBzcmMvbWlwcy9uMzIuUyAoZmZpX2NhbGxfTjMyKTogQWRkIGRlYnVnIG1hY3JvcyBhbmQgbGFiZWxzIGZvciBGREUuCisJKGZmaV9jbG9zdXJlX04zMik6IE5ldyBmdW5jdGlvbi4KKwkoLmVoX2ZyYW1lKTogTmV3IHNlY3Rpb24KKwkqIHNyYy9taXBzL28zMi5TOiBDbGVhbiB1cCBjb21tZW50cy4KKwkoZmZpX2Nsb3N1cmVfTzMyKTogUGFzcyBmZmlfY2xvc3VyZSBwYXJhbWV0ZXIgaW4gJDEyLgorCSogc3JjL21pcHMvZmZpLmM6IFVzZSBGRklfTUlQU19OMzIgaW5zdGVhZCBvZgorCV9NSVBTX1NJTSA9PSBfQUJJTjMyIHRocm91Z2hvdXQuCisJKEZGSV9NSVBTX1NUT1BfSEVSRSk6IE5ldywgdXNlIGluIHBsYWNlIG9mCisJZmZpX3N0b3BfaGVyZS4KKwkoZmZpX3ByZXBfYXJncyk6IFVzZSB1bnNpZ25lZCBsb25nIHRvIGhvbGQgcG9pbnRlciB2YWx1ZXMuICBSZXdyaXRlCisJdG8gc3VwcG9ydCBuMzIvbjY0IEFCSXMuCisJKGNhbGNfbjMyX3N0cnVjdF9mbGFncyk6IFJld3JpdGUuCisJKGNhbGNfbjMyX3JldHVybl9zdHJ1Y3RfZmxhZ3MpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLiAgUmV2ZXJzZQorCXBvc2l0aW9uIG9mIGZsYWcgYml0cy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBSZXdyaXRlIG4zMiBwb3J0aW9uLgorCShmZmlfY2FsbCk6IEVuYWJsZSBmb3IgbjY0LiAgQWRkIHNwZWNpYWwgaGFuZGxpbmcgZm9yIHNtYWxsIHN0cnVjdHVyZQorCXJldHVybiB2YWx1ZXMuCisJKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogQWRkIG4zMiBhbmQgbjY0IHN1cHBvcnQuCisJKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogQWRkIGNhc3QgdG8gc2lsZW5jZSB3YXJuaW5nLgorCShjb3B5X3N0cnVjdF9OMzIsIGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTjMyKTogTmV3IGZ1bmN0aW9ucy4KKworMjAwNy0wOC0wOCAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCAoZmZpX3R5cGVfbXlsb25nKTogUmVtb3ZlIGRlZmluaXRpb24uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jIChtYWluKTogVXNlIGNvcnJlY3QgdHlwZQorCXNwZWNpZmllcnMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibDIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDMuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbDEuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZGJsMS5jIChtYWluKTogRGl0dG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjQuYyAobWFpbik6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMgKG1haW4pOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMgKG1haW4pOiBEaXR0by4KKworMjAwNy0wOC0wNyAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9yYXdfU1lTVik6IEZpeCB0eXBvIGluIHByZXZpb3VzCisJY2hlY2tpbi4KKworMjAwNy0wOC0wNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMKKwkqIHNyYy94ODYvc3lzdi5TIChmZmlfY2xvc3VyZV9yYXdfU1lTVik6IEhhbmRsZSBGRklfVFlQRV9VSU5UOCwKKwlGRklfVFlQRV9TSU5UOCwgRkZJX1RZUEVfVUlOVDE2LCBGRklfVFlQRV9TSU5UMTYsIEZGSV9UWVBFX1VJTlQzMiwKKwlGRklfVFlQRV9TSU5UMzIuCisKKzIwMDctMDgtMDIgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWwuYyAobWFpbik6IERlZmluZSByZXR1cm4gdHlwZSBhcworCWZmaV9hcmcuICBVc2UgcHJvcGVyIHByaW50ZiBjb252ZXJzaW9uIHNwZWNpZmllci4KKworMjAwNy0wNy0zMCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwlQUiB0ZXN0c3VpdGUvMzI4NDMKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogaW4geDg2IGNhc2UsIGFkZCBjb2RlIGZvcgorCXNpZ25lZC91bnNpZ25lZCBpbnQ4LzE2LgorCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBSZXdyaXRlIHRvOgorCVVzZSBhIGp1bXAgdGFibGUuCisJUmVtb3ZlIGNvZGUgdG8gcG9wIGFyZ3MgZnJvbSB0aGUgc3RhY2sgYWZ0ZXIgY2FsbC4KKwlTcGVjaWFsLWNhc2Ugc2lnbmVkL3Vuc2lnbmVkIGludDgvMTYuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgKG1haW4pOiBSZXZlcnQuCisKKzIwMDctMDctMjYgIFJpY2hhcmQgR3VlbnRoZXIgIDxyZ3VlbnRoZXJAc3VzZS5kZT4KKworCVBSIHRlc3RzdWl0ZS8zMjg0MworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jIChtYWluKTogVmVyaWZ5IGNhbGwKKwlyZXN1bHQgYXMgc2lnbmVkIGNoYXIsIG5vdCBmZmlfYXJnLgorCisyMDA3LTA3LTE2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogY29uZmlndXJlLmFjIChpPzg2LSotc29sYXJpczIuMVswLTldKTogU2V0IFRBUkdFVCB0byBYODZfNjQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDctMDctMTEgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaS5jOiBEb24ndCBpbmNsdWRlIHN5cy9jYWNoZWN0bC5oLgorCShmZmlfcHJlcF9jbG9zdXJlX2xvYyk6IFVzZSBfX2J1aWx0aW5fX19jbGVhcl9jYWNoZSgpIGluc3RlYWQgb2YKKwljYWNoZWZsdXNoKCkuCisKKzIwMDctMDUtMTggIEF1cmVsaWVuIEphcm5vICA8YXVyZWxpZW5AYXVyZWwzMi5uZXQ+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQgYWp1c3RlZAorCWZyb20gKGZmaV9wcmVwX2Nsb3N1cmUpOiAuLi4gdGhpcy4KKwkoRkZJX0lOSVRfVFJBTVBPTElORSk6IEFkanVzdC4KKworMjAwNS0xMi0zMSAgUGhpbCBCbHVuZGVsbCAgPHBiQHJlY2l2YS5jb20+CisKKwkqIHNyYy9hcm0vZmZpLmMgKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTViwKKwlmZmlfY2xvc3VyZV9TWVNWX2lubmVyLCBmZmlfcHJlcF9jbG9zdXJlKTogTmV3LCBhZGQgY2xvc3VyZSBzdXBwb3J0LgorCSogc3JjL2FybS9zeXN2LlMoZmZpX2Nsb3N1cmVfU1lTVik6IExpa2V3aXNlLgorCSogc3JjL2FybS9mZml0YXJnZXQuaCAoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgorCShGRklfQ0xPU1VSRVMpOiBFbmFibGUgY2xvc3VyZSBzdXBwb3J0LgorCisyMDA3LTA3LTAzICBBbmRyZXcgSGFsZXkgIDxhcGhAaGVkZ2VzLmJpbGxnYXRsaWZmLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ny5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlMS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc3Nob3J0Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTAuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50MTYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2Zsb2F0LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0OC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfdXNob3J0Y2hhci5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2NoYXIuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYywKKwl0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9wb2ludGVyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jLAorCXRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MsCisJdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IEVuYWJsZSBmb3IgQVJNLgorCisyMDA3LTA3LTA1ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkLgorCisyMDA3LTA2LTAyICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDctMDUtMjMgIFN0ZXZlIEVsbGNleSAgPHNqZUBjdXAuaHAuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA3LTA1LTEwICBSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KKworCSogc3JjL202OGsvZmZpLmMgKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTViwKKwlmZmlfY2xvc3VyZV9TWVNWX2lubmVyLGZmaV9wcmVwX2Nsb3N1cmUpOiBOZXcsIGFkZCBjbG9zdXJlIHN1cHBvcnQuCisJKiBzcmMvbTY4ay9zeXN2LlMoZmZpX2Nsb3N1cmVfU1lTVixmZmlfY2xvc3VyZV9zdHJ1Y3RfU1lTVik6IExpa2V3aXNlLgorCSogc3JjL202OGsvZmZpdGFyZ2V0LmggKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KKwkoRkZJX0NMT1NVUkVTKTogRW5hYmxlIGNsb3N1cmUgc3VwcG9ydC4KKworMjAwNy0wNS0xMCAgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9BU19DRklfUFNFVURPX09QKTogTmV3IHRlc3QuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBmZmljb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy9tNjhrL3N5c3YuUyAoQ0ZJX1NUQVJUUFJPQyxDRklfRU5EUFJPQywKKwlDRklfT0ZGU0VULENGSV9ERUZfQ0ZBKTogTmV3IG1hY3Jvcy4KKwkoZmZpX2NhbGxfU1lTVik6IEFkZCBjYWxsZnJhbWUgYW5ub3RhdGlvbi4KKworMjAwNy0wNS0xMCAgUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CisKKwkqIHNyYy9tNjhrL2ZmaS5jIChmZmlfcHJlcF9hcmdzLGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogRml4CisJbnVtZXJvdXMgdGVzdCBzdWl0ZSBmYWlsdXJlcy4KKwkqIHNyYy9tNjhrL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IExpa2V3aXNlLgorCisyMDA3LTA0LTExICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEJyaW5nIHVwIHRvIGRhdGUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHNyYy9mcnYvZWFiaS5TOiBSZW1vdmUgUkNTIGtleXdvcmQuCisKKzIwMDctMDQtMDYgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogVGlkeSB0YXJnZXQgY2FzZS4KKwkoSEFWRV9MT05HX0RPVUJMRSk6IEFsbG93IHRoZSB0YXJnZXQgdG8gb3ZlcnJpZGUuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBEb24ndCBkZWZpbmUgZmZpX3R5cGVfZm9vIGlmCisJTElCRkZJX0hJREVfQkFTSUNfVFlQRVMgaXMgZGVmaW5lZC4KKwkoZmZpX3R5cGVfbG9uZ2RvdWJsZSk6IElmIG5vdCBIQVZFX0xPTkdfRE9VQkxFLCBkZWZpbmUKKwl0byBmZmlfdHlwZV9kb3VibGUuCisJKiB0eXBlcy5jIChMSUJGRklfSElERV9CQVNJQ19UWVBFUyk6IERlZmluZS4KKwkoRkZJX1RZUEVERUYsIGZmaV90eXBlX3ZvaWQpOiBNYXJrIHRoZSBkYXRhIGNvbnN0LgorCShmZmlfdHlwZV9sb25nZG91YmxlKTogU3BlY2lhbCBjYXNlIGZvciBBbHBoYS4gIERvbid0IGRlZmluZQorCWlmIGxvbmcgZG91YmxlID09IGRvdWJsZS4KKworCSogc3JjL2FscGhhL2ZmaS5jIChGRklfVFlQRV9MT05HRE9VQkxFKTogQXNzZXJ0IHVuaXF1ZSB2YWx1ZS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgaXQgYXMgdGhlIDEyOC1iaXQgdHlwZS4KKwkoZmZpX2NhbGwsIGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9vc2ZfaW5uZXIpOiBMaWtld2lzZS4gIE1hcmsgaGlkZGVuLgorCShmZmlfY2FsbF9vc2YsIGZmaV9jbG9zdXJlX29zZik6IE1hcmsgaGlkZGVuLgorCSogc3JjL2FscGhhL2ZmaXRhcmdldC5oIChGRklfTEFTVF9BQkkpOiBUaWR5IGRlZmluaXRpb24uCisJKiBzcmMvYWxwaGEvb3NmLlMgKGZmaV9jYWxsX29zZiwgZmZpX2Nsb3N1cmVfb3NmKTogTWFyayBoaWRkZW4uCisJKGxvYWRfdGFibGUpOiBIYW5kbGUgMTI4LWJpdCBsb25nIGRvdWJsZS4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0NC5jOiBBZGQgLW1pZWVlIGZvciBhbHBoYS4KKworMjAwNy0wNC0wNiAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorCisJUFIgbGliZmZpLzMxNDkxOgorCSogUkVBRE1FOiBGaXhlZCBidWcgaW4gZXhhbXBsZS4KKworMjAwNy0wNC0wMyAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9jbG9zdXJlcy5jOiBJbmNsdWRlIHN5cy9zdGF0ZnMuaC4KKwkoX0dOVV9TT1VSQ0UpOiBEZWZpbmUgb24gTGludXguCisJKEZGSV9NTUFQX0VYRUNfU0VMSU5VWCk6IERlZmluZS4KKwkoc2VsaW51eF9lbmFibGVkKTogTmV3IHZhcmlhYmxlLgorCShzZWxpbnV4X2VuYWJsZWRfY2hlY2spOiBOZXcgZnVuY3Rpb24uCisJKGlzX3NlbGludXhfZW5hYmxlZCk6IERlZmluZS4KKwkoZGxtbWFwKTogVXNlIGl0LgorCisyMDA3LTAzLTI0ICBVcm9zIEJpemphayAgPHViaXpqYWtAZ21haWwuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIChyZXR1cm5fZmwpOiBNYXJrIGFzIHN0YXRpYy4KKwlVc2UgJ3ZvbGF0aWxlIGZsb2F0IHN1bScgdG8gY3JlYXRlIHN1bSBvZiBmbG9hdHMgdG8gYXZvaWQgZmFsc2UKKwluZWdhdGl2ZSBkdWUgdG8gZXhjZXNzIHByZWNpc2lvbiBvbiBpeDg2IHRhcmdldHMuCisJKG1haW4pOiBEaXR0by4KKworMjAwNy0wMy0wOCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmbHVzaF9pY2FjaGUpOiBGaXggbGVmdC1vdmVyIGZyb20gcHJldmlvdXMKKwlwYXRjaC4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBSZW1vdmUgdW5uZWVkZWQgY2FzdHMuICBBZGQgbmVlZGVkIG9uZXMuCisKKzIwMDctMDMtMDcgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChmZmlfY2xvc3VyZV9hbGxvYywgZmZpX2Nsb3N1cmVfZnJlZSk6IE5ldy4KKwkoZmZpX3ByZXBfY2xvc3VyZV9sb2MpOiBOZXcuCisJKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IE5ldy4KKwkoZmZpX3ByZXBfamF2YV9yYXdfY2xvc3VyZV9sb2MpOiBOZXcuCisJKiBzcmMvY2xvc3VyZXMuYzogTmV3IGZpbGUuCisJKiBzcmMvZGxtYWxsb2MuYyBbRkZJX01NQVBfRVhFQ19XUklUXSAoc3RydWN0IG1hbGxvY19zZWdtZW50KToKKwlSZXBsYWNlIHNmbGFncyB3aXRoIGV4ZWNfb2Zmc2V0LgorCVtGRklfTU1BUF9FWEVDX1dSSVRdIChtbWFwX2V4ZWNfb2Zmc2V0LCBhZGRfc2VnbWVudF9leGVjX29mZnNldCwKKwlzdWJfc2VnbWVudF9leGVjX29mZnNldCk6IE5ldyBtYWNyb3MuCisJKGdldF9zZWdtZW50X2ZsYWdzLCBzZXRfc2VnbWVudF9mbGFncywgY2hlY2tfc2VnbWVudF9tZXJnZSk6IE5ldworCW1hY3Jvcy4KKwkoaXNfbW1hcHBlZF9zZWdtZW50LCBpc19leHRlcm5fc2VnbWVudCk6IFVzZSBnZXRfc2VnbWVudF9mbGFncy4KKwkoYWRkX3NlZ21lbnQsIHN5c19hbGxvYywgY3JlYXRlX21zcGFjZSwgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2UsCisJZGVzdHJveV9tc3BhY2UpOiBVc2UgbmV3IG1hY3Jvcy4KKwkoc3lzX2FsbG9jKTogU2lsZW5jZSB3YXJuaW5nLgorCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIHNyYy9jbG9zdXJlcy5jLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBzcmMvcHJlcF9jaWYgW0ZGSV9DTE9TVVJFU10gKGZmaV9wcmVwX2Nsb3N1cmUpOiBJbXBsZW1lbnQgaW4KKwl0ZXJtcyBvZiBmZmlfcHJlcF9jbG9zdXJlX2xvYy4KKwkqIHNyYy9yYXdfYXBpLmMgKGZmaV9wcmVwX3Jhd19jbG9zdXJlX2xvYyk6IFJlbmFtZWQgYW5kIGFkanVzdGVkCisJZnJvbS4uLgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IC4uLiB0aGlzLiAgUmUtaW1wbGVtZW50IGluIHRlcm1zIG9mIHRoZQorCXJlbmFtZWQgdmVyc2lvbi4KKwkqIHNyYy9qYXZhX3Jhd19hcGkgKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQKKwlhZGp1c3RlZCBmcm9tLi4uCisJKGZmaV9wcmVwX2phdmFfcmF3X2Nsb3N1cmUpOiAuLi4gdGhpcy4gIFJlLWltcGxlbWVudCBpbiB0ZXJtcyBvZgorCXRoZSByZW5hbWVkIHZlcnNpb24uCisJKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBmcm9tCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiAuLi4gdGhpcy4KKwkqIHNyYy9wYS9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvY3Jpcy9mZmkuYzogTGlrZXdpc2UuICBBZGp1c3QuCisJKiBzcmMvZnJ2L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9pYTY0L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9taXBzL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogTGlrZXdpc2UuCisJKiBzcmMvczM5MC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc2gvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NoNjQvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3NwYXJjL2ZmaS5jOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvZmZpNjQuYzogTGlrZXdpc2UuCisJKiBzcmMveDg2L2ZmaS5jOiBMaWtld2lzZS4KKwkoRkZJX0lOSVRfVFJBTVBPTElORSk6IEFkanVzdC4KKwkoZmZpX3ByZXBfcmF3X2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBhbmQgYWRqdXN0ZWQgZnJvbS4uLgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IC4uLiB0aGlzLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKTogUmVuYW1lZCBmcm9tCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiAuLi4gdGhpcy4KKwkoZmx1c2hfaWNhY2hlKTogQWRqdXN0LgorCisyMDA3LTAzLTA3ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogc3JjL2RsbWFsbG9jLmM6IE5ldyBmaWxlLCBpbXBvcnRlZCB2ZXJzaW9uIDIuOC4zIG9mIERvdWcKKwlMZWEncyBtYWxsb2MuCisKKzIwMDctMDMtMDEgIEJyb29rcyBNb3NlcyAgPGJyb29rcy5tb3Nlc0Bjb2Rlc291cmNlcnkuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIGR1bW15IGluc3RhbGwtcGRmIHRhcmdldC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlCisKKzIwMDctMDItMTMgIEFuZHJlYXMgS3JlYmJlbCAgPGtyZWJiZWwxQGRlLmlibS5jb20+CisKKwkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfcHJlcF9hcmdzLCBmZmlfcHJlcF9jaWZfbWFjaGRlcCwKKwlmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEFkZCBsb25nIGRvdWJsZSBoYW5kbGluZy4KKworMjAwNy0wMi0wMiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IE1vdmUgcmVzdG9yZSBvZiByMgorCWltbWVkaWF0ZWx5IGFmdGVyIGJjdHJsIGluc3RydWN0aW9uLgorCisyMDA3LTAxLTE4ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW0gKGFsbC1yZWN1cnNpdmUsIGluc3RhbGwtcmVjdXJzaXZlLAorCW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSwgY2xlYW4tcmVjdXJzaXZlLCBkaXN0Y2xlYW4tcmVjdXJzaXZlLAorCW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlKTogQWRkIG1pc3NpbmcgdGFyZ2V0cy4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisyMDA2LTEyLTE0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXoub3JnPgorCisJKiBjb25maWd1cmUuYWM6IEFkZCBUQVJHRVQgZm9yIHg4Nl82NC0qLWRhcndpbiouCisJKiBNYWtlZmlsZS5hbSAobm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTKTogQWRkIHJ1bGVzIGZvciA2NC1iaXQgc291cmNlcworCWZvciBYODZfREFSV0lOLgorCSogc3JjL3g4Ni9mZml0YXJnZXQuaDogU2V0IHRyYW1wb2xpbmUgc2l6ZSBmb3IgeDg2XzY0LSotZGFyd2luKi4KKwkqIHNyYy94ODYvZGFyd2luNjQuUzogTmV3IGZpbGUgZm9yIHg4Nl82NC0qLWRhcndpbiogc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjOiBOZXcgdGVzdCBjYXNlIGZvcgorCWZmaV9jYWxsIG9ubHkuCisKKzIwMDYtMTItMTMgIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6Lm9yZz4KKworCSogYWNsb2NhbC5tNDogUmVnZW5lcmF0ZSB3aXRoIGFjbG9jYWwgLUkgLi4gYXMgd3JpdHRlbiBpbiB0aGUKKwlNYWtlZmlsZS5hbS4KKworMjAwNi0xMC0zMSAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZGFyd2luX2FkanVzdF9hZ2dyZWdhdGVfc2l6ZXMpOiBOZXcuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ2FsbCBkYXJ3aW5fYWRqdXN0X2FnZ3JlZ2F0ZV9zaXplcyBmb3IKKwlEYXJ3aW4uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogUmVtb3ZlIERhcndpbiBYRkFJTC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBSZW1vdmUgRGFyd2luIFhGQUlMLgorCisyMDA2LTEwLTEwICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCSAgICBTYW5kcm8gVG9sYWluaSAgPHRvbGFpbmlAbGliZXJvLml0PgorCisJKiBjb25maWd1cmUuYWMgW2kqODYtKi1kYXJ3aW4qXTogU2V0IFg4Nl9EQVJXSU4gc3ltYm9sIGFuZAorCWNvbmRpdGlvbmFsLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlZC4KKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpIFtYODZfREFSV0lOXTogTmV3IGNhc2UuCisJKEVYVFJBX0RJU1QpOiBBZGQgc3JjL3g4Ni9kYXJ3aW4uUy4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApIFtYODZfREFSV0lOXTogVHJlYXQgbGlrZQorCVg4Nl9XSU4zMiwgYW5kIGFkZGl0aW9uYWxseSBhbGlnbiBzdGFjayB0byAxNiBieXRlcy4KKwkqIHNyYy94ODYvZGFyd2luLlM6IE5ldywgYmFzZWQgb24gc3lzdi5TLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZikgW1g4Nl9EQVJXSU5dOiBBbGlnbiA+IDgtYnl0ZSBzdHJ1Y3RzLgorCisyMDA2LTA5LTEyICBEYXZpZCBEYW5leSAgPGRkYW5leUBhdnRyZXguY29tPgorCisJUFIgbGliZmZpLzIzOTM1CisJKiBpbmNsdWRlL01ha2VmaWxlLmFtOiBJbnN0YWxsIGJvdGggZmZpLmggYW5kIGZmaXRhcmdldC5oIGluCisJJChsaWJkaXIpL2djYy8kKHRhcmdldF9hbGlhcykvJChnY2NfdmVyc2lvbikvaW5jbHVkZS4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGVkIGZvciBhdXRvbWFrZSAxLjkuNi4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworMjAwNi0wOC0xNyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBpbmNsdWRlL2ZmaV9jb21tb24uaCAoc3RydWN0KTogUmV2ZXJ0IGFjY2lkZW50YWwgY29tbWl0LgorCisyMDA2LTA4LTE1ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oOiBSZW1vdmUgbGludCBkaXJlY3RpdmVzLgorCSogaW5jbHVkZS9mZmkuaC5pbjogTGlrZXdpc2UuCisKKzIwMDYtMDctMjUgIFRvcnN0ZW4gU2Nob2VuZmVsZCAgPGthZmZlZXRpc2NoQGdteC5kZT4KKworCSogaW5jbHVkZS9mZmkuaC5pbiAoZmZpX3R5cGVfdWxvbmcsIGZmaV90eXBlX3Nsb25nKTogRGVmaW5lIGNvcnJlY3RseQorCWZvciAzMi1iaXQgYXJjaGl0ZWN0dXJlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWwuYzogTmV3IHRlc3QgY2FzZS4KKworMjAwNi0wNy0xOSAgRGF2aWQgRGFuZXkgIDxkZGFuZXlAYXZ0cmV4LmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmM6IFJlbW92ZSB4ZmFpbCBmb3IgbWlwcywKKwl4ZmFpbCByZW1haW5zIGZvciBtaXBzNjQuCisKKzIwMDYtMDUtMjMgIENhcmxvcyBPJ0RvbmVsbCAgPGNhcmxvc0Bjb2Rlc291cmNlcnkuY29tPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIGluc3RhbGwtaHRtbCB0YXJnZXQuIEFkZCBpbnN0YWxsLWh0bWwgdG8gLlBIT05ZCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA2LTA1LTE4ICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorCisJKiBwYS9mZmkuYyAoZmZpX3ByZXBfYXJnc19wYTMyKTogTG9hZCBmbG9hdGluZyBwb2ludCBhcmd1bWVudHMgZnJvbQorCXN0YWNrIHNsb3QuCisKKzIwMDYtMDQtMjIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogUkVBRE1FOiBSZW1vdmUgbm90aWNlIGFib3V0ICdDcmF6eSBDb21tZW50cycuCisJKiBzcmMvZGVidWcuYzogUmVtb3ZlIGxpbnQgZGlyZWN0aXZlcy4gQ2xlYW51cCB3aGl0ZSBzcGFjZXMuCisJKiBzcmMvamF2YV9yYXdfYXBpLmM6IExpa2V3aXNlLgorCSogc3JjL3ByZXBfY2lmLmM6IExpa2V3aXNlLgorCSogc3JjL3Jhd19hcGkuYzogTGlrZXdpc2UuCisJKiBzcmMvZmZpdGVzdC5jOiBEZWxldGUuIE5vIGxvbmdlciBuZWVkZWQsIGFsbCB0ZXN0IGNhc2VzIG1pZ3JhdGVkCisJdG8gdGhlIHRlc3RzdWl0ZS4KKwkqIHNyYy9hcm0vZmZpLmM6IFJlbW92ZSBsaW50IGRpcmVjdGl2ZXMuCisJKiBzcmMvbTMyci9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcGEvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpLmM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKwkqIHNyYy9zaC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvc2g2NC9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMveDg2L2ZmaS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYzogTGlrZXdpc2UuCisKKzIwMDYtMDQtMTMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3BhL2hwdXgzMi5TOiBDb3JyZWN0IHVud2luZCBvZmZzZXQgY2FsY3VsYXRpb24gZm9yCisJZmZpX2Nsb3N1cmVfcGEzMi4KKwkqIHNyYy9wYS9saW51eC5TOiBMaWtld2lzZS4KKworMjAwNi0wNC0xMiAgSmFtZXMgRSBXaWxzb24gIDx3aWxzb25Ac3BlY2lmaXguY29tPgorCisJUFIgbGliZ2NqLzI2NDgzCisJKiBzcmMvaWE2NC9mZmkuYyAoc3RmX3NwaWxsLCBsZGZfZmlsbCk6IFJld3JpdGUgYXMgbWFjcm9zLgorCShoZmFfdHlwZV9sb2FkKTogQ2FsbCBzdGZfc3BpbGwuCisJKGhmYV90eXBlX3N0b3JlKTogQ2FsbCBsZGZfZmlsbC4KKwkoZmZpX2NhbGwpOiBBZGp1c3QgY2FsbHMgdG8gYWJvdmUgcm91dGluZXMuICBBZGQgbG9jYWwgdGVtcHMgZm9yCisJbWFjcm8gcmVzdWx0LgorCisyMDA2LTA0LTEwICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktaW5pdCk6IFJlY29nbml6ZSBtdWx0aWxpYgorCWRpcmVjdG9yeSBuYW1lcyBjb250YWluaW5nIHVuZGVyc2NvcmVzLgorCisyMDA2LTA0LTA3ICBKYW1lcyBFIFdpbHNvbiAgPHdpbHNvbkBzcGVjaWZpeC5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDQuYzogTmV3IHRlc3RjYXNlLgorCisyMDA2LTA0LTA1ICBKb2huIERhdmlkIEFuZ2xpbiAgPGRhdmUuYW5nbGluQG5yYy1jbnJjLmdjLmNhPgorCSAgICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgUEFfSFBVWCBwb3J0LgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBjb25maWd1cmUuYWM6IEFkZCBQQV9IUFVYIHJ1bGVzLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogc3JjL3BhL2ZmaXRhcmdldC5oOiBSZW5hbWUgbGludXggdGFyZ2V0IHRvIFBBX0xJTlVYLgorCUFkZCBQQV9IUFVYIGFuZCBQQTY0X0hQVVguCisJUmVuYW1lIEZGSV9MSU5VWCBBQkkgdG8gRkZJX1BBMzIgQUJJLgorCShGRklfVFJBTVBPTElORV9TSVpFKTogRGVmaW5lIGZvciAzMi1iaXQgSFAtVVggdGFyZ2V0cy4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUMik6IERlZmluZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUNCk6IExpa2V3aXNlLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q4KTogTGlrZXdpc2UuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDMpOiBSZWRlZmluZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUNSk6IExpa2V3aXNlLgorCShGRklfVFlQRV9TTUFMTF9TVFJVQ1Q2KTogTGlrZXdpc2UuCisJKEZGSV9UWVBFX1NNQUxMX1NUUlVDVDcpOiBMaWtld2lzZS4KKwkqIHNyYy9wYS9mZmkuYyAoUk9VTkRfRE9XTik6IERlbGV0ZS4KKwkoZmxkdywgZnN0dywgZmxkZCwgZnN0ZCk6IFVzZSAnX19hc21fXycuCisJKGZmaV9zdHJ1Y3RfdHlwZSk6IEFkZCBzdXBwb3J0IGZvciBGRklfVFlQRV9TTUFMTF9TVFJVQ1QyLAorCUZGSV9UWVBFX1NNQUxMX1NUUlVDVDQgYW5kIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDguCisJKGZmaV9wcmVwX2FyZ3NfTElOVVgpOiBSZW5hbWUgdG8gZmZpX3ByZXBfYXJnc19wYTMyLiBVcGRhdGUgY29tbWVudC4KKwlTaW1wbGlmeSBpbmNyZW1lbnRpbmcgb2Ygc3RhY2sgc2xvdCB2YXJpYWJsZS4gQ2hhbmdlIHR5cGUgb2YgbG9jYWwKKwknbicgdG8gdW5zaWduZWQgaW50LgorCShmZmlfc2l6ZV9zdGFja19MSU5VWCk6IFJlbmFtZSB0byBmZmlfc2l6ZV9zdGFja19wYTMyLiBIYW5kbGUgbG9uZworCWRvdWJsZSBvbiBQQV9IUFVYLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IExpa2V3aXNlLgorCShmZmlfY2FsbCk6IExpa2V3aXNlLgorCShmZmlfY2xvc3VyZV9pbm5lcl9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2xvc3VyZV9pbm5lcl9wYTMyLiBDaGFuZ2UKKwlyZXR1cm4gdHlwZSB0byBmZmlfc3RhdHVzLiBTaW1wbGlmeSBpbmNyZW1lbnRpbmcgb2Ygc3RhY2sgc2xvdAorCXZhcmlhYmxlLiBPbmx5IGNvcHkgZmxvYXRpbmcgcG9pbnQgYXJndW1lbnQgcmVnaXN0ZXJzIHdoZW4gUEFfTElOVVgKKwlpcyB0cnVlLiBSZWZvcm1hdCBkZWJ1ZyBzdGF0ZW1lbnQuCisJQWRkIHN1cHBvcnQgZm9yIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDIsIEZGSV9UWVBFX1NNQUxMX1NUUlVDVDQgYW5kCisJRkZJX1RZUEVfU01BTExfU1RSVUNUOC4KKwkoZmZpX2Nsb3N1cmVfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2Nsb3N1cmVfcGEzMi4gQWRkICdleHRlcm4nIHRvCisJZGVjbGFyYXRpb24uCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBNYWtlIGxpbnV4IHRyYW1wb2xpbmUgY29uZGl0aW9uYWwgb24gUEFfTElOVVguCisJQWRkIG5vcHMgdG8gY2FjaGUgZmx1c2guICBBZGQgdHJhbXBvbGluZSBmb3IgUEFfSFBVWC4KKwkqIHNyYy9wYS9ocHV4MzIuUzogTmV3IGZpbGUuCisJKiBzcmMvcGEvbGludXguUyAoZmZpX2NhbGxfTElOVVgpOiBSZW5hbWUgdG8gZmZpX2NhbGxfcGEzMi4gUmVuYW1lCisJZmZpX3ByZXBfYXJnc19MSU5VWCB0byBmZmlfcHJlcF9hcmdzX3BhMzIuCisJTG9jYWxpemUgbGFiZWxzLiBBZGQgc3VwcG9ydCBmb3IgMiwgNCBhbmQgOC1ieXRlIHNtYWxsIHN0cnVjdHMuIEhhbmRsZQorCXVuYWxpZ25lZCBkZXN0aW5hdGlvbnMgaW4gMywgNSwgNiBhbmQgNy1ieXRlIHNtYWxsIHN0cnVjdHMuIE9yZGVyCisJYXJndW1lbnQgdHlwZSBjaGVja3Mgc28gdGhhdCBjb21tb24gYXJndW1lbnQgdHlwZXMgYXBwZWFyIGZpcnN0LgorCShmZmlfY2xvc3VyZV9MSU5VWCk6IFJlbmFtZSB0byBmZmlfY2xvc3VyZV9wYTMyLiBSZW5hbWUKKwlmZmlfY2xvc3VyZV9pbm5lcl9MSU5VWCB0byBmZmlfY2xvc3VyZV9pbm5lcl9wYTMyLgorCisyMDA2LTAzLTI0ICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaCAoZW51bSBmZmlfYWJpKTogQWRkIEZGSV9MSU5VWC4gIERlZmF1bHQKKwlmb3IgMzItYml0IHVzaW5nIElCTSBleHRlbmRlZCBkb3VibGUgZm9ybWF0LiAgRml4IEZGSV9MQVNUX0FCSS4KKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBIYW5kbGUgbGludXggdmFyaWFudCBvZgorCUZGSV9UWVBFX0xPTkdET1VCTEUuCisJKGZmaV9wcmVwX2FyZ3M2NCk6IEFzc2VydCB1c2luZyBJQk0gZXh0ZW5kZWQgZG91YmxlLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IERvbid0IG11bmdlIEZGSV9UWVBFX0xPTkdET1VCTEUgdHlwZS4KKwlIYW5kbGUgRkZJX0xJTlVYIEZGSV9UWVBFX0xPTkdET1VCTEUgcmV0dXJuIGFuZCBhcmdzLgorCShmZmlfY2FsbCk6IEhhbmRsZSBGRklfTElOVVguCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTm9uIEZGSV9MSU5VWCBsb25nIGRvdWJsZSByZXR1cm4gbmVlZHMKKwlncHIzIHJldHVybiBwb2ludGVyIGFzIGZvciBzdHJ1Y3QgcmV0dXJuLiAgSGFuZGxlIEZGSV9MSU5VWAorCUZGSV9UWVBFX0xPTkdET1VCTEUgcmV0dXJuIGFuZCBhcmdzLiAgRG9uJ3QgaW5jcmVtZW50ICJuZiIKKwl1bm5lY2Vzc2FyaWx5LgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IExvYWQgYm90aCBmMSBhbmQgZjIKKwlmb3IgRkZJX1RZUEVfTE9OR0RPVUJMRS4gIE1vdmUgZXBpbG9ndWUgaW5zbnMgaW50byBjYXNlIHRhYmxlLgorCURvbid0IHVzZSByNiBhcyBwb2ludGVyIHRvIHJlc3VsdHMsIGluc3RlYWQgdXNlIHNwIG9mZnNldC4gIERvbid0CisJbWFrZSBhIHNwZWNpYWwgY2FsbCB0byBsb2FkIGxyIHdpdGggY2FzZSB0YWJsZSBhZGRyZXNzLCBpbnN0ZWFkCisJdXNlIG9mZnNldCBmcm9tIHByZXZpb3VzIGNhbGwuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBTYXZlIGxvbmcgZG91YmxlIHJldHVybi4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IFNpbXBsaWZ5IGxvbmcgZG91YmxlCisJcmV0dXJuLgorCisyMDA2LTAzLTE1ICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoNjQvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIGZsb2F0IGFyZ3VtZW50cworCXBhc3NlZCB3aXRoIEZQIHJlZ2lzdGVycyBjb3JyZWN0bHkuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvc2g2NC9zeXN2LlM6IExpa2V3aXNlLgorCisyMDA2LTAzLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjIChjbG9zdXJlX3Rlc3RfZm4pOiBNYXJrIGNpZiwKKwlhcmdzIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKGNsb3N1cmVfdGVzdF9mbjEpOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCShtYWluKTogUmVtb3ZlIHVudXNlZCByZXMuCisKKzIwMDYtMDItMjggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwOiBBZGp1c3QgRlNGIGFkZHJlc3MuIEFkZCB0ZXN0IHJ1bnMgZm9yCisJLU8yLCAtTzMsIC1PcyBhbmQgdGhlIHdhcm5pbmcgZmxhZ3MgLVcgLVdhbGwuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHA6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQWRkIGFuIF9fVU5VU0VEX18gbWFjcm8gdG8gbWFyaworCXVudXNlZCBwYXJhbWV0ZXIgdW51c2VkIGZvciBnY2Mgb3IgZWxzZSBkbyBub3RoaW5nLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL2ZmaXRlc3RjeHguaDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jIChjbHNfc3RydWN0XzEyYnl0ZV9nbik6IE1hcmsgY2lmCisJYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmMgKGNsc19zdHJ1Y3RfMTZieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jIChjbHNfc3RydWN0XzE4Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYyAoY2xzX3N0cnVjdF8xOWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jIChjbHNfc3RydWN0XzFfMWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmMgKGNsc19zdHJ1Y3RfMjBieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYyAoY2xzX3N0cnVjdF8yMGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjRieXRlLmMgKGNsc19zdHJ1Y3RfMjRieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmMgKGNsc19zdHJ1Y3RfMmJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jIChjbHNfc3RydWN0XzNfMWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUxLmMgKGNsc19zdHJ1Y3RfM2J5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMgKGNsc19zdHJ1Y3RfM2J5dGVfZ24xKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYyAoY2xzX3N0cnVjdF80XzFieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRieXRlLmMgKGNsc19zdHJ1Y3RfNGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNV8xX2J5dGUuYyAoY2xzX3N0cnVjdF81Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc181Ynl0ZS5jIChjbHNfc3RydWN0XzVieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jIChjbHNfc3RydWN0XzY0Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jIChjbHNfc3RydWN0XzZieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmMgKGNsc19zdHJ1Y3RfNmJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN18xX2J5dGUuYyAoY2xzX3N0cnVjdF83Ynl0ZV9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jIChjbHNfc3RydWN0XzdieXRlX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmMgKGNsc19zdHJ1Y3RfOGJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMgKGNsc19zdHJ1Y3RfOWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgKGNsc19zdHJ1Y3RfOWJ5dGVfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZG91YmxlLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jIChjbHNfc3RydWN0X2FsaWduX2ZuKTogQ2FzdAorCXZvaWQqIHRvIGF2b2lkIGNvbXBpbGVyIHdhcm5pbmcuCisJKG1haW4pOiBMaWtld2lzZS4KKwkoY2xzX3N0cnVjdF9hbGlnbl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYyAoY2xzX3N0cnVjdF9hbGlnbl9nbik6CisJTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jIChjbHNfc3RydWN0X2FsaWduX2duKToKKwlMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmMgKGNsc19zdHJ1Y3RfYWxpZ25fZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGUuYyAoY2xzX3JldF9kb3VibGVfZm4pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYyAoY2xzX3JldF9mbG9hdF9mbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zY2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZiBhbmQKKwlkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZiBhbmQKKwlkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYKKwlhbmQgZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZiBhbmQKKwlkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jICh0ZXN0X2Z1bmNfZ24pOiBNYXJrIGNpZiBhbmQKKwlkYXRhIHVudXNlZC4KKwkobWFpbik6IENhc3QgcmVzX2NhbGwgdG8gc2lsZW5jZSBnY2MuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYyAodGVzdF9mdW5jX2duKTogTWFyayBjaWYKKwlhbmQgZGF0YSB1bnVzZWQuCisJKG1haW4pOiBDYXN0IHJlc19jYWxsIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jIChjbHNfcmV0X3NjaGFyX2ZuKTogTWFyayBjaWYgYW5kCisJdXNlcmRhdGEgdW51c2VkLgorCShjbHNfcmV0X3NjaGFyX2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmMgKGNsc19yZXRfc2ludF9mbik6IE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF9zaW50X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyAoY2xzX3JldF9zc2hvcnRfZm4pOiBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfc3Nob3J0X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191Y2hhci5jIChjbHNfcmV0X3VjaGFyX2ZuKTogIE1hcmsgY2lmIGFuZAorCXVzZXJkYXRhIHVudXNlZC4KKwkoY2xzX3JldF91Y2hhcl9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludC5jIChjbHNfcmV0X3VpbnRfZm4pOiBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfdWludF9mbik6IENhc3QgcHJpbnRmIHBhcmFtZXRlciB0byBzaWxlbmNlIGdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWxvbmdsb25nLmMgKGNsc19yZXRfdWxvbmdsb25nX2ZuKTogTWFyayBjaWYKKwlhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191c2hvcnQuYyAoY2xzX3JldF91c2hvcnRfZm4pOiBNYXJrIGNpZiBhbmQKKwl1c2VyZGF0YSB1bnVzZWQuCisJKGNsc19yZXRfdXNob3J0X2ZuKTogQ2FzdCBwcmludGYgcGFyYW1ldGVyIHRvIHNpbGVuY2UgZ2NjLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmMgKGZsb2F0aW5nKTogUmVtb3ZlIHVudXNlZCBwYXJhbWV0ZXIgZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYyAobWFpbik6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgaS4KKwlDbGVhbnVwIHdoaXRlIHNwYWNlcy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZWdpbnQuYyAoY2hlY2tpbmcpOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGkuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIChjbHNfc3RydWN0X2NvbWJpbmVkX2duKTogTWFyaworCWNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmMgKGNsc19zdHJ1Y3RfY29tYmluZWRfZ24pOgorCUxpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIChCX2duKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDIuYyAoQl9mbik6IEFkanVzdCBwcmludGYKKwlmb3JtYXR0ZXJzIHRvIHNpbGVuY2UgZ2NjLgorCShCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhIHVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0My5jIChCX2duKTogTWFyayBjaWYgYW5kIHVzZXJkYXRhCisJdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q0LmM6IE1lbnRpb24gcmVsYXRlZCBQUi4KKwkoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YSB1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYyAoQl9nbik6IE1hcmsgY2lmIGFuZCB1c2VyZGF0YQorCXVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0Ni5jOiBNZW50aW9uIHJlbGF0ZWQgUFIuCisJKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEgdW51c2VkLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMgKEJfZ24pOiBNYXJrIGNpZiBhbmQgdXNlcmRhdGEKKwl1bnVzZWQuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYyAoQl9nbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMgKEJfZ24pOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jIChzdHViKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMgKG1haW4pOiBDYXN0IHRoZSByZXN1bHQgdG8gc2lsZW5jZQorCWdjYy4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwyLmMgKHJldHVybl9mbCk6IEFkZCB0aGUgbm90ZSBtZW50aW9uZWQKKwlpbiB0aGUgbGFzdCBjb21taXQgZm9yIHRoaXMgdGVzdCBjYXNlIGluIHRoZSB0ZXN0IGNhc2UgaXRzZWxmLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgKGNsb3N1cmVfdGVzdF9mbjApOiBNYXJrIGNpZiBhcworCXVudXNlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIChjbG9zdXJlX3Rlc3RfZm4xKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYyAoY2xvc3VyZV90ZXN0X2ZuMik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmMgKGNsb3N1cmVfdGVzdF9mbjMpOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jIChjbG9zdXJlX3Rlc3RfZm4wKTogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjUuYyAoY2xvc3VyZV90ZXN0X2ZuNSk6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMgKGNsb3N1cmVfdGVzdF9mbjApOiBMaWtld2lzZS4KKworMjAwNi0wMi0yMiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9zeXN2LlM6IEZpeCByZWdpc3RlciBudW1iZXJzIGluIHRoZSBGREUgZm9yCisJZmZpX2Nsb3N1cmVfU1lTVi4KKworMjAwNi0wMi0yMCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIChyZXR1cm5fZmwpOiBSZW1vdmUgc3RhdGljCisJZGVjbGFyYXRpb24gdG8gYXZvaWQgYSBmYWxzZSBuZWdhdGl2ZSBvbiBpeDg2LiBTZWUgUFIzMjMuCisKKzIwMDYtMDItMTggIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCWFuZCBjYXN0IGludGVnZXIgdG8gdm9pZCAqIGlmIG5lZWRlZC4gIFVwZGF0ZSB0aGUgcG9pbnRlciB0bworCXRoZSBGUCByZWdpc3RlciBzYXZlZCBhcmVhIGNvcnJlY3RseS4KKworMjAwNi0wMi0xNyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogWEZBSUwgdGhpcyB0ZXN0IHVudGlsIFBSMjU2MzAKKwlpcyBmaXhlZC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0NC5jOiBMaWtld2lzZS4KKworMjAwNi0wMi0xNiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2RibC5jOiBOZXcgdGVzdCBjYXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9kYmwyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fZmwxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9mbDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNi5jOiBMaWtld2lzZS4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IFJlbW92ZSBmZmlfdHlwZV9teWxvbmcKKwlkZWZpbml0aW9uLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQWRkIGZmaV90eXBlX215bG9uZyBkZWZpbml0aW9uCisJaGVyZSB0byBiZSB1c2VkIGJ5IG90aGVyIHRlc3QgY2FzZXMgdG9vLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmM6IE5ldyB0ZXN0IGNhc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDkuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDQuYzogTGlrZXdpc2UuCisKKzIwMDYtMDEtMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogY29uZmlndXJlLmFjOiBFbmFibGUgbGliZmZpIGZvciBzcGFyYzY0LSotZnJlZWJzZCouCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDYtMDEtMTggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9zeXN2LlMgKHNtc3RfdHdvX3JlZ2lzdGVyKTogRG9uJ3QgY2FsbCBfX2FzaGxkaTMsCisJaW5zdGVhZCBkbyB0aGUgc2hpZnRpbmcgaW5saW5lLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IERvbid0IGNvbXB1dGUgJXI1CisJc2hpZnQgY291bnQgdW5jb25kaXRpb25hbGx5LiAgU2ltcGxpZnkgbG9hZCBzZXF1ZW5jZXMgZm9yIDEsIDIsIDMsIDQKKwlhbmQgOCBieXRlIHN0cnVjdHMsIGZvciB0aGUgcmVtYWluaW5nIHN0cnVjdCBzaXplcyBkb24ndCBjYWxsCisJX19sc2hyZGkzLCBpbnN0ZWFkIGRvIHRoZSBzaGlmdGluZyBpbmxpbmUuCisKKzIwMDUtMTItMDcgIFRoaWVtbyBTZXVmZXIgIDx0aHNAbmV0d29ya25vLmRlPgorCisJKiBzcmMvbWlwcy9mZml0YXJnZXQuaDogUmVtb3ZlIG9ic29sZXRlIHNnaWRlZnMuaCBpbmNsdWRlLiBBZGQKKwltaXNzaW5nIHBhcmVudGhlc2VzLgorCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jYWxsX08zMik6IENvZGUgZm9ybWF0dGluZy4gRGVmaW5lCisJYW5kIHVzZSBBM19PRkYsIEZQX09GRiwgUkFfT0ZGLiBNaWNyby1vcHRpbWl6YXRpb25zLgorCShmZmlfY2xvc3VyZV9PMzIpOiBMaWtld2lzZSwgYnV0IHdpdGggbmV3bHkgZGVmaW5lZCBBM19PRkYyLAorCUEyX09GRjIsIEExX09GRjIsIEEwX09GRjIsIFJBX09GRjIsIEZQX09GRjIsIFMwX09GRjIsIEdQX09GRjIsCisJVjFfT0ZGMiwgVjBfT0ZGMiwgRkFfMV8xX09GRjIsIEZBXzFfMF9PRkYyLCBGQV8wXzFfT0ZGMiwKKwlGQV8wXzBfT0ZGMi4KKwkqIHNyYy9taXBzL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogQ29kZSBmb3JtYXR0aW5nLiBGaXgKKwllbmRpYW5uZXNzIGJ1Z3MuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBJbXByb3ZlIHRyYW1wb2xpbmUgaW5zdHJ1Y3Rpb24gc2NoZWR1bGluZy4KKwkoZmZpX2Nsb3N1cmVfbWlwc19pbm5lcl9PMzIpOiBGaXggZW5kaWFubmVzcyBidWdzLgorCisyMDA1LTEyLTAzICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogRm9ybWF0dGluZy4KKwkoZmZpX3ByZXBfYXJnc19TWVNWKTogQXZvaWQgcG9zc2libGUgYWxpYXNpbmcgcHJvYmxlbXMgYnkgdXNpbmcgdW5pb25zLgorCShmZmlfcHJlcF9hcmdzNjQpOiBMaWtld2lzZS4KKworMjAwNS0wOS0zMCAgR2VvZmZyZXkgS2VhdGluZyAgPGdlb2Zma0BhcHBsZS5jb20+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogRm9yCisJZGFyd2luLCB1c2UgLXNoYXJlZC1saWJnY2Mgbm90IC1sZ2NjX3MsIGFuZCBleHBsYWluIHdoeS4KKworMjAwNS0wOS0yNiAgVG9tIFRyb21leSAgPHRyb21leUByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQxLmMgKHZhbHVlX3R5cGUpOiBOZXcgdHlwZWRlZi4KKwkoQ0FOQVJZKTogTmV3IGRlZmluZS4KKwkobWFpbik6IENoZWNrIGZvciByZXN1bHQgYnVmZmVyIG92ZXJmbG93LgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBIYW5kbGUgbGludXg2NCBsb25nIGRvdWJsZSByZXR1cm5zLgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKEZMQUdfUkVUVVJOU18xMjhCSVRTKTogTmV3IGNvbnN0YW50LgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBsaW51eDY0IGxvbmcgZG91YmxlIHJldHVybnMuCisKKzIwMDUtMDgtMjUgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwlQUiB0YXJnZXQvMjM0MDQKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX1NZU1YpOiBDb3JyZWN0IHBsYWNlbWVudCBvZiBzdGFjaworCWhvbWVkIGZwIGFyZ3MuCisJKGZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmX21hY2hkZXApOiBDb3JyZWN0IHN0YWNrIHNpemluZyBmb3Igc2FtZS4KKworMjAwNS0wOC0xMSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYyAoSEFWRV9ISURERU5fVklTSUJJTElUWV9BVFRSSUJVVEUpOiBOZXcgdGVzdC4KKwkoQUhfQk9UVE9NKTogQWRkIEZGSV9ISURERU4gZGVmaW5pdGlvbi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGhpZGRlbik6IFJlbW92ZS4KKwkoZmZpX2Nsb3N1cmVfTElOVVg2NCwgZmZpX3ByZXBfYXJnczY0LCBmZmlfY2FsbF9MSU5VWDY0LAorCWZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogVXNlIEZGSV9ISURERU4gaW5zdGVhZCBvZiBoaWRkZW4uCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCwKKwkuZmZpX2Nsb3N1cmVfTElOVVg2NCk6IFVzZSBGRklfSElEREVOIGluc3RlYWQgb2YgLmhpZGRlbi4KKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1YsIGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogUmVtb3ZlLAorCWFkZCBGRklfSElEREVOIHRvIGl0cyBwcm90b3R5cGUuCisJKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpOiBOZXcuCisJKiBzcmMveDg2L3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTViwgZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOiBOZXcuCisJKiBzcmMveDg2L3dpbjMyLlMgKGZmaV9jbG9zdXJlX1NZU1YsIGZmaV9jbG9zdXJlX3Jhd19TWVNWKTogTmV3LgorCisyMDA1LTA4LTEwICBBbGZyZWQgTS4gU3ptaWR0ICA8YW1zQGdudS5vcmc+CisKKwlQUiBsaWJmZmkvMjE4MTk6CisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IEhhbmRsZSBpKjg2LSotZ251Ki4KKworMjAwNS0wOC0wOSAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBVc2UKKwlEV19DRkFfb2Zmc2V0X2V4dGVuZGVkX3NmIHJhdGhlciB0aGFuCisJRFdfQ0ZBX0dOVV9uZWdhdGl2ZV9vZmZzZXRfZXh0ZW5kZWQuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBMaWtld2lzZS4KKworMjAwNS0wNy0yMiAgU1VHSU9LQSBUb3NoaW5vYnUgIDxzdWdpb2thQGl0b25ldC5jby5qcD4KKworCSogc3JjL3NoL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IFN0b3AgYXJndW1lbnQgcG9wcGluZyBjb3JyZWN0bHkKKwlvbiBzaDMuCisJKGZmaV9jbG9zdXJlX1NZU1YpOiBDaGFuZ2UgdGhlIHN0YWNrIGxheW91dCBmb3Igc2gzIHN0cnVjdCBhcmd1bWVudC4KKwkqIHNyYy9zaC9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEZpeCBzaDMgYXJndW1lbnQgY29weSwgd2hlbiBpdCBpcworCXBhcnRpYWxseSBvbiByZWdpc3Rlci4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBEb24ndCBzZXQgdG9vIG1hbnkgY2lmLT5mbGFncy4KKworMjAwNS0wNy0yMCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9mZmkuYyAoZmZpX2NhbGwpOiBIYW5kbGUgc21hbGwgc3RydWN0dXJlcyBjb3JyZWN0bHkuCisJUmVtb3ZlIGVtcHR5IGxpbmUuCisJKiBzcmMvc2g2NC9mZmkuYyAoc2ltcGxlX3R5cGUpOiBSZW1vdmUuCisJKHJldHVybl90eXBlKTogSGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMgY29ycmVjdGx5LgorCShmZmlfcHJlcF9hcmdzKTogTGlrZXdpc2UuCisJKGZmaV9jYWxsKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKTogTGlrZXdpc2UuCisJKiBzcmMvc2g2NC9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBIYW5kbGUgMSwgMiBhbmQgNC1ieXRlIHJldHVybi4KKwlFbWl0IHBvc2l0aW9uIGluZGVwZW5kZW50IGNvZGUgaWYgUElDIGFuZCByZW1vdmUgd3JvbmcgZGF0YWxhYmVsCisJcHJlZml4ZXMgZnJvbSBFSCBkYXRhLgorCisyMDA1LTA3LTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIE1ha2VmaWxlLmFtIChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpOiBBZGQgUE9XRVJQQ19GUkVFQlNELgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKiBjb25maWd1cmUuYWM6IEFkZCBQT1dFUlBDX0ZSRUVCU0QgcnVsZXMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogQWRkIFBPV0VSUENfRlJFRUJTRCBydWxlcy4KKwkoRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QpOiBEZWZpbmUuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogQWRkIGZsYWdzIHRvIGhhbmRsZSBzbWFsbCBzdHJ1Y3R1cmUgcmV0dXJucworCWluIGZmaV9jYWxsX1NZU1YuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMgZm9yIFNZU1YgNCBBQkkuCisJQWthIEZGSV9TWVNWLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogQWRkIHJldHVybiB0eXBlcyBmb3Igc21hbGwgc3RydWN0dXJlcy4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogQWRkIGJpdHMgdG8gaGFuZGxlIHNtYWxsIHN0cnVjdHVyZXMgZm9yCisJZmluYWwgU1lTViA0IEFCSS4KKworMjAwNS0wNy0xMCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmM6IE5ldyB0ZXN0IGZpbGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZfMV9ieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183XzFfYnl0ZS5jOiBMaWtld2lzZS4KKworMjAwNS0wNy0wNSAgUmFuZG9scGggQ2h1bmcgIDx0YXVzcUBkZWJpYW4ub3JnPgorCisJKiBzcmMvcGEvZmZpLmMgKGZmaV9zdHJ1Y3RfdHlwZSk6IFJlbmFtZSBGRklfVFlQRV9TTUFMTF9TVFJVQ1QxCisJYXMgRkZJX1RZUEVfU01BTExfU1RSVUNUMy4gIEJyZWFrIG91dCBoYW5kbGluZyBmb3IgNS03IGJ5dGUKKwlzdHJ1Y3R1cmVzLiAgS2lsbCBjb21waWxhdGlvbiB3YXJuaW5ncy4KKwkoZmZpX2Nsb3N1cmVfaW5uZXJfTElOVVgpOiBQcmludCByZXR1cm4gdmFsdWVzIGFzIGhleCBpbiBkZWJ1ZworCW1lc3NhZ2UuICBSZW5hbWUgRkZJX1RZUEVfU01BTExfU1RSVUNUMSBhcyBGRklfVFlQRV9TTUFMTF9TVFJVQ1QzLgorCVByb3Blcmx5IGhhbmRsZSA1LTcgYnl0ZSBzdHJ1Y3R1cmUgcmV0dXJucy4KKwkqIHNyYy9wYS9mZml0YXJnZXQuaCAoRkZJX1RZUEVfU01BTExfU1RSVUNUMSkKKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUMik6IFJlbW92ZS4KKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUMywgRkZJX1RZUEVfU01BTExfU1RSVUNUNSkKKwkoRkZJX1RZUEVfU01BTExfU1RSVUNUNiwgRkZJX1RZUEVfU01BTExfU1RSVUNUNyk6IERlZmluZS4KKwkqIHNyYy9wYS9saW51eC5TOiBNYXJrIHNvdXJjZSBmaWxlIGFzIHVzaW5nIFBBMS4xIGFzc2VtYmx5LgorCShjaGVja3Ntc3QxLCBjaGVja3Ntc3QyKTogUmVtb3ZlLgorCShjaGVja3Ntc3QzKTogT3B0aW1pemUgaGFuZGxpbmcgb2YgMy1ieXRlIHN0cnVjdCByZXR1cm5zLgorCShjaGVja3Ntc3Q1NjcpOiBQcm9wZXJseSBoYW5kbGUgNS03IGJ5dGUgc3RydWN0IHJldHVybnMuCisKKzIwMDUtMDYtMTUgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJUFIgbGliZ2NqLzIxOTQzCisJKiBzcmMvbWlwcy9uMzIuUzogRW5mb3JjZSBQSUMgY29kZS4KKwkqIHNyYy9taXBzL28zMi5TOiBMaWtld2lzZS4KKworMjAwNS0wNi0xNSAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIGNvbmZpZ3VyZS5hYzogVHJlYXQgaSo4Ni0qLXNvbGFyaXMyLjEwIGFuZCB1cCBhcyBYODZfNjQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDUtMDYtMDEgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBEb24ndCB1c2UgSlVNUFRBUkdFVAorCXRvIGNhbGwgZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YuICBBcHBlbmQgQGxvY2FsIGluc3RlYWQuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBMaWtld2lzZSBmb3IgZmZpX3ByZXBfYXJnc19TWVNWLgorCisyMDA1LTA1LTE3ICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmUuYWM6IFVzZSBBQ19DX0JJR0VORElBTiBpbnN0ZWFkIG9mIEFDX0NfQklHRU5ESUFOX0NST1NTLgorCVVzZSBBQ19DSEVDS19TSVpFT0YgaW5zdGVhZCBvZiBBQ19DT01QSUxFX0NIRUNLX1NJWkVPRi4KKwkqIE1ha2VmaWxlLmFtIChBQ0xPQ0FMX0FNRkxBR1MpOiBSZW1vdmUgLUkgLi4vY29uZmlnLgorCSogYWNsb2NhbC5tNCwgY29uZmlndXJlLCBmZmljb25maWcuaC5pbiwgTWFrZWZpbGUuaW4sCisJaW5jbHVkZS9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA1LTA1LTA5ICBNaWtlIFN0dW1wICA8bXJzQGFwcGxlLmNvbT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA1LTA1LTA4ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJUFIgbGliZmZpLzIxMjg1CisJKiBzcmMvYWxwaGEvb3NmLlM6IFVwZGF0ZSB1bndpbmQgaW50byB0byBtYXRjaCBjb2RlLgorCisyMDA1LTA1LTA0ICBBbmRyZWFzIERlZ2VydCA8YWRAcGFweXJ1cy1nbWJoLmRlPgorCSAgICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMveDg2L2ZmaTY0LmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2F2ZSBzc2UtdXNlZCBmbGFnIGluCisJYml0IDExIG9mIGZsYWdzLgorCShmZmlfY2FsbCk6IE1hc2sgcmV0dXJuIHR5cGUgZmllbGQuICBQYXNzIHNzZWNvdW50IHRvIGZmaV9jYWxsX3VuaXg2NC4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IFNldCBjYXJyeSBiaXQgaWYgc3NlLXVzZWQgZmxhZyBzZXQuCisJKiBzcmMveDg2L3VuaXg2NC5TIChmZmlfY2FsbF91bml4NjQpOiBBZGQgc3NlY291bnQgYXJndW1lbnQuCisJT25seSBsb2FkIHNzZSByZWdpc3RlcnMgaWYgc3NlY291bnQgbm9uLXplcm8uCisJKGZmaV9jbG9zdXJlX3VuaXg2NCk6IE9ubHkgc2F2ZSBzc2UgcmVnaXN0ZXJzIGlmIGNhcnJ5IHNldCBvbiBlbnRyeS4KKworMjAwNS0wNC0yOSAgUmFsZiBDb3JzZXBpdXMgIDxyYWxmLmNvcnNlcGl1c0BydGVtcy5vcmc+CisKKwkqIGNvbmZpZ3VyZS5hYzogQWRkIGkqODYtKi1ydGVtcyosIHNwYXJjKi0qLXJ0ZW1zKiwKKwlwb3dlcnBjLSpydGVtcyosIGFybSotKi1ydGVtcyosIHNoLSotcnRlbXMqLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA1LTA0LTIwICBIYW5zLVBldGVyIE5pbHNzb24gIDxocEBheGlzLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktZGctdGVzdC0xKTogSW4gcmVnc3ViIHVzZSwKKwloYXZlIFRjbDguMy1jb21wYXRpYmxlIGludGVybWVkaWF0ZSB2YXJpYWJsZS4KKworMjAwNS0wNC0xOCAgU2ltb24gUG9zbmphayA8c2ltb24ucG9zbmpha0BzaW9sLm5ldD4KKwkgICAgSGFucy1QZXRlciBOaWxzc29uICA8aHBAYXhpcy5jb20+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgQ1JJUyBzdXBwb3J0LgorCSogY29uZmlndXJlLmFjOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbiwKKwlpbmNsdWRlL01ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL2NyaXM6IE5ldyBkaXJlY3RvcnkuCisJKiBzcmMvY3Jpcy9mZmkuYywgc3JjL2NyaXMvc3lzdi5TLCBzcmMvY3Jpcy9mZml0YXJnZXQuaDogTmV3IGZpbGVzLgorCSogc3JjL3ByZXBfY2lmLmMgKGZmaV9wcmVwX2NpZik6IFdyYXAgaW4gI2lmbmRlZiBfX0NSSVNfXy4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwIChsaWJmZmktZGctdGVzdC0xKTogUmVwbGFjZSBcbiB3aXRoCisJXHI/XG4gaW4gb3V0cHV0IHRlc3RzLgorCisyMDA1LTA0LTEyICBNaWtlIFN0dW1wICA8bXJzQGFwcGxlLmNvbT4KKworCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA1LTAzLTMwICBIYW5zIEJvZWhtICA8SGFucy5Cb2VobUBocC5jb20+CisKKwkqIHNyYy9pYTY0L2ZmaXRhcmdldC5oIChmZmlfYXJnKTogVXNlIGxvbmcgbG9uZyBpbnN0ZWFkIG9mIERJLgorCisyMDA1LTAzLTMwICBTdGV2ZSBFbGxjZXkgIDxzamVAY3VwLmhwLmNvbT4KKworCSogc3JjL2lhNjQvZmZpdGFyZ2V0LmggKGZmaV9hcmcpIEFERCBESSBhdHRyaWJ1dGUuCisJKGZmaV9zYXJnKSBEaXR0by4KKwkqIHNyYy9pYTY0L3VuaXguUyAoZmZpX2Nsb3N1cmVfdW5peCk6IEV4dGVuZCBncAorCXRvIDY0IGJpdHMgaW4gSUxQMzIgbW9kZS4KKwlMb2FkIDY0IGJpdHMgZXZlbiBmb3Igc2hvcnQgZGF0YS4KKworMjAwNS0wMy0yMyAgTWlrZSBTdHVtcCAgPG1yc0BhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBVcGRhdGUgZm9yIC1tNjQgbXVsdGlsaWIuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwNS0wMy0yMSAgWmFjayBXZWluYmVyZyAgPHphY2tAY29kZXNvdXJjZXJ5LmNvbT4KKworCSogY29uZmlndXJlLmFjOiBEbyBub3QgaW52b2tlIFRMX0FDX0dDQ19WRVJTSU9OLgorCURvIG5vdCBzZXQgdG9vbF9pbmNsdWRlX2Rpci4KKwkqIGFjbG9jYWwubTQsIGNvbmZpZ3VyZSwgTWFrZWZpbGUuaW4sIHRlc3RzdWl0ZS9NYWtlZmlsZS5pbjoKKwlSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5hbTogU2V0IGdjY192ZXJzaW9uIGFuZCB0b29sbGliZmZpZGlyLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwNS0wMi0yMiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEJ1bXAgYWxpZ25tZW50IHRvCisJb2RkLW51bWJlcmVkIHJlZ2lzdGVyIHBhaXJzIGZvciA2NC1iaXQgaW50ZWdlciB0eXBlcy4KKworMjAwNS0wMi0yMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJUFIgbGliZmZpLzIwMTA0CisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsMS5jOiBOZXcgdGVzdCBjYXNlLgorCisyMDA1LTAyLTExICBKYW5pcyBKb2huc29uICA8amFuaXMxODdAdXMuaWJtLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlLmM6IFJlbW92ZSBkZy1vcHRpb25zLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmM6IERpdHRvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBEaXR0by4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDMuYzogRGl0dG8uCisKKzIwMDUtMDItMDggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL2Zydi9mZml0YXJnZXQuaDogUmVtb3ZlIFBQQyBzdHVmZiB3aGljaCBkb2VzIG5vdCBiZWxvbmcgdG8gZnJ2LgorCisyMDA1LTAxLTEyICBFcmljIEJvdGNhem91ICA8ZWJvdGNhem91QGxpYmVydHlzdXJmLmZyPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAgKGN4eF9vcHRpb25zKTogQWRkCisJLXNoYXJlZC1saWJnY2MuCisKKzIwMDQtMTItMzEgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy90eXBlcy5jIChGRklfQUdHUkVHQVRFX1RZUEVERUYpOiBSZW1vdmUuCisJKEZGSV9UWVBFREVGKTogUmVuYW1lIGZyb20gRkZJX0lOVEVHUkFMX1RZUEVERUYuICBSZXBsYWNlIHNpemUgYW5kCisJb2Zmc2V0IHBhcmFtZXRlcnMgd2l0aCBhIHR5cGUgcGFyYW1ldGVyOyBkZWR1Y2Ugc2l6ZSBhbmQgc3RydWN0dXJlCisJYWxpZ25tZW50LiAgVXBkYXRlIGFsbCB1c2Vycy4KKworMjAwNC0xMi0zMSAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBEZWZpbmUgd2l0aCBzaXplb2YuCisJKEZGSV9UWVBFX0xPTkdET1VCTEUpOiBGaXggZm9yIGlhNjQuCisJKiBzcmMvaWE2NC9mZml0YXJnZXQuaCAoc3RydWN0IGZmaV9pYTY0X3RyYW1wb2xpbmVfc3RydWN0KTogTW92ZQorCWludG8gZmZpX3ByZXBfY2xvc3VyZS4KKwkqIHNyYy9pYTY0L2lhNjRfZmxhZ3MuaCwgc3JjL2lhNjQvZmZpLmMsIHNyYy9pYTY0L3VuaXguUzogUmV3cml0ZQorCWZyb20gc2NyYXRjaC4KKworMjAwNC0xMi0yNyAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCSogc3JjL3g4Ni91bml4NjQuUzogRml4IHR5cG8gaW4gdW53aW5kIGluZm8uCisKKzIwMDQtMTItMjUgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoc3RydWN0IHJlZ2lzdGVyX2FyZ3MpOiBSZW5hbWUgZnJvbSBzdGFja0xheW91dC4KKwkoZW51bSB4ODZfNjRfcmVnX2NsYXNzKTogQWRkIFg4Nl82NF9DT01QTEVYX1g4N19DTEFTUy4KKwkobWVyZ2VfY2xhc3Nlcyk6IENoZWNrIGZvciBpdC4KKwkoU1NFX0NMQVNTX1ApOiBOZXcuCisJKGNsYXNzaWZ5X2FyZ3VtZW50KTogUGFzcyBieXRlX29mZnNldCBieSB2YWx1ZTsgcGVyZm9ybSBhbGwgdXBkYXRlcworCWluc2lkZSBzdHJ1Y3QgY2FzZS4KKwkoZXhhbWluZV9hcmd1bWVudCk6IEFkZCBjbGFzc2VzIGFyZ3VtZW50OyBoYW5kbGUKKwlYODZfNjRfQ09NUExFWF9YODdfQ0xBU1MuCisJKGZmaV9wcmVwX2FyZ3MpOiBNZXJnZSBpbnRvIC4uLgorCShmZmlfY2FsbCk6IC4uLiBoZXJlLiAgU2hhcmUgc3RhY2sgZnJhbWUgd2l0aCBmZmlfY2FsbF91bml4NjQuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogU2V0dXAgY2lmLT5mbGFncyBmb3IgcHJvcGVyIHN0cnVjdHVyZSByZXR1cm4uCisJKGZmaV9maWxsX3JldHVybl92YWx1ZSk6IFJlbW92ZS4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IFJlbW92ZSBkZWFkIGFzc2VydC4KKwkoZmZpX2Nsb3N1cmVfdW5peDY0X2lubmVyKTogUmVuYW1lIGZyb20gZmZpX2Nsb3N1cmVfVU5JWDY0X2lubmVyLgorCVJld3JpdGUgdG8gdXNlIHN0cnVjdCByZWdpc3Rlcl9hcmdzIGluc3RlYWQgb2YgdmFfbGlzdC4gIENyZWF0ZQorCWZsYWdzIGZvciBoYW5kbGluZyBzdHJ1Y3R1cmUgcmV0dXJucy4KKwkqIHNyYy94ODYvdW5peDY0LlM6IFJlbW92ZSBkZWFkIHN0cmluZ3MuCisJKGZmaV9jYWxsX3VuaXg2NCk6IFJlbmFtZSBmcm9tIGZmaV9jYWxsX1VOSVg2NC4gIFJld3JpdGUgdG8gc2hhcmUKKwlzdGFjayBmcmFtZSB3aXRoIGZmaV9jYWxsLiAgSGFuZGxlIHN0cnVjdHVyZSByZXR1cm5zIHByb3Blcmx5LgorCShmbG9hdDJzc2UsIGZsb2F0ZmxvYXQyc3NlLCBkb3VibGUyc3NlKTogUmVtb3ZlLgorCShzc2UyZmxvYXQsIHNzZTJkb3VibGUsIHNzZTJmbG9hdGZsb2F0KTogUmVtb3ZlLgorCShmZmlfY2xvc3VyZV91bml4NjQpOiBSZW5hbWUgZnJvbSBmZmlfY2xvc3VyZV9VTklYNjQuICBSZXdyaXRlCisJdG8gaGFuZGxlIHN0cnVjdHVyZSByZXR1cm5zIHByb3Blcmx5LgorCisyMDA0LTEyLTA4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChBTV9NQUtFRkxBR1MpOiBSZW1vdmUgZHVwbGljYXRlIExJQkNGTEFHUyBhbmQKKwlQSUNGTEFHLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGVkLgorCisyMDA0LTEyLTAyICBSaWNoYXJkIFNhbmRpZm9yZCAgPHJzYW5kaWZvQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5hYzogVXNlIFRMX0FDX0dDQ19WRVJTSU9OIHRvIHNldCBnY2NfdmVyc2lvbi4KKwkqIGNvbmZpZ3VyZSwgYWNsb2NhbC5tNCwgTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL01ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDQtMTEtMjkgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgbGlidG9vbCBjaGFuZ2UuCisKKzIwMDQtMTEtMjUgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgbGlidG9vbCByZXZlcnNpb24uCisKKzIwMDQtMTEtMjQgIEtlbGxleSBDb29rICA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZSBmb3IgbGlidG9vbCBjaGFuZ2UuCisKKzIwMDQtMTEtMjMgIEpvaG4gRGF2aWQgQW5nbGluICA8ZGF2ZS5hbmdsaW5AbnJjLWNucmMuZ2MuY2E+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogVXNlIG5ldyBwcm9jcyBpbiB0YXJnZXQtbGlicGF0aC5leHAuCisKKzIwMDQtMTEtMjMgIFJpY2hhcmQgU2FuZGlmb3JkICA8cnNhbmRpZm9AcmVkaGF0LmNvbT4KKworCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jYWxsX08zMiwgZmZpX2Nsb3N1cmVfTzMyKTogVXNlIGphbHIgaW5zdGVhZAorCW9mIGphbC4gIFVzZSBhbiBhYnNvbHV0ZSBlbmNvZGluZyBmb3IgdGhlIGZyYW1lIGluZm9ybWF0aW9uLgorCisyMDA0LTExLTIzICBLZWxsZXkgQ29vayAgPGtjb29rQGdjYy5nbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIG5vLWRlcGVuZGVuY2llcy4gIEFkZCBBQ0xPQ0FMX0FNRkxBR1MuCisJKiBhY2luY2x1ZGUubTQ6IERlbGV0ZSBsb2dpYyBmb3Igc2luY2x1ZGVzLgorCSogYWNsb2NhbC5tNCwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGU6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlOiBMaWtld2lzZS4KKworMjAwNC0xMS0yMiAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KKworCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlKTogQWxpZ24gZG91YmxlcyBhbmQgNjQtYml0IGludGVnZXJzCisJb24gYSA4LWJ5dGUgYm91bmRhcnkuCisJKiBzcmMvc3BhcmMvdjguUyAoZmZpX2Nsb3N1cmVfdjgpOiBSZXNlcnZlIGZyYW1lIHNwYWNlIGZvciBhcmd1bWVudHMuCisKKzIwMDQtMTAtMjcgIFJpY2hhcmQgRWFybnNoYXcgIDxyZWFybnNoYUBhcm0uY29tPgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEhhbmRsZSBmdW5jdGlvbnMgdGhhdCByZXR1cm4KKwlsb25nIGxvbmcgdmFsdWVzLiAgUm91bmQgc3RhY2sgYWxsb2NhdGlvbiB0byBhIG11bHRpcGxlIG9mIDggYnl0ZXMKKwlmb3IgQVRQQ1MgY29tcGF0aWJpbGl0eS4KKwkqIHNyYy9hcm0vc3lzdi5TIChmZmlfY2FsbF9TWVNWKTogUmV3b3JrIHRvIGF2b2lkIHVzZSBvZiBBUENTIHJlZ2lzdGVyCisJbmFtZXMuICBIYW5kbGUgcmV0dXJuaW5nIGxvbmcgbG9uZyB0eXBlcy4gIEFkZCBUaHVtYiBhbmQgaW50ZXJ3b3JraW5nCisJc3VwcG9ydC4gIEltcHJvdmUgc29mdC1mbG9hdCBjb2RlLgorCisyMDA0LTEwLTI3ICBSaWNoYXJkIEVhcm5zaGF3ICA8cmVhcm5zaGFAYXJtLmNvbT4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGIuZXhwIChsb2FkX2djY19saWIpOiBOZXcgZnVuY3Rpb24uCisJKGxpYmZmaV9leGl0KTogTmV3IGZ1bmN0aW9uLgorCShsaWJmZmlfaW5pdCk6IEJ1aWxkIHRoZSB0ZXN0Z2x1ZSB3cmFwcGVyIGlmIG5lZWRlZC4KKworMjAwNC0xMC0yNSAgRXJpYyBCb3RjYXpvdSAgPGVib3RjYXpvdUBsaWJlcnR5c3VyZi5mcj4KKworCVBSIG90aGVyLzE4MTM4CisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IEFjY2VwdCBtb3JlIHRoYW4gb25lIG11bHRpbGliIGxpYmdjYy4KKworMjAwNC0xMC0yNSAgS2F6dWhpcm8gSW5hb2thIDxpbmFva2Eua2F6dWhpcm9AcmVuZXNhcy5jb20+CisKKwkqIHNyYy9tMzJyL2xpYmZmaXRhcmdldC5oIChGRklfQ0xPU1VSRVMpOiBTZXQgdG8gMC4KKworMjAwNC0xMC0yMCAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBEb24ndCBhbGlnbiBmb3IgZG91YmxlIGRhdGEuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQzLmM6IE5ldyB0ZXN0IGNhc2UuCisKKzIwMDQtMTAtMTggIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBTZXQgVCBiaXQgaW4gdHJhbXBvbGluZSBmb3IKKwl0aGUgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RydWN0dXJlIHBvaW50ZWQgd2l0aCBSMi4KKwkqIHNyYy9zaC9zeXN2LlMgKGZmaV9jbG9zdXJlX1NZU1YpOiBVc2UgUjIgYXMgdGhlIHBvaW50ZXIgdG8KKwl0aGUgc3RydWN0dXJlIHJldHVybiB2YWx1ZSBpZiBUIGJpdCBzZXQuICBFbWl0IHBvc2l0aW9uCisJaW5kZXBlbmRlbnQgY29kZSBhbmQgRUggZGF0YSBpZiBQSUMuCisKKzIwMDQtMTAtMTMgIEthenVoaXJvIEluYW9rYSAgPGluYW9rYS5rYXp1aGlyb0ByZW5lc2FzLmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBtMzJyIHN1cHBvcnQuCisJKiBjb25maWd1cmUuYWM6IExpa2V3aXNlLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maXVncmU6IFJlZ2VuZXJhdGUuCisJKiBzcmMvdHlwZXMuYzogQWRkIG0zMnIgcG9ydCB0byBGRklfSU5URVJOQUxfVFlQRURFRgorCSh1aW50NjQsIHNpbnQ2NCwgZG91YmxlLCBsb25nZG91YmxlKQorCSogc3JjL20zMnI6IE5ldyBkaXJlY3RvcnkuCisJKiBzcmMvbTMyci9mZmkuYzogTmV3IGZpbGUuCisJKiBzcmMvbTMyci9zeXN2LlM6IExpa2V3aXNlLgorCSogc3JjL20zMnIvZmZpdGFyZ2V0Lmg6IExpa2V3aXNlLgorCisyMDA0LTEwLTAyICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lZ2ludC5jOiBOZXcgdGVzdCBjYXNlLgorCisyMDA0LTA5LTE0ICBILkouIEx1ICA8aG9uZ2ppdS5sdUBpbnRlbC5jb20+CisKKwlQUiBsaWJnY2ovMTc0NjUKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogRG9uJ3QgdXNlIGdsb2JhbCBsZF9saWJyYXJ5X3BhdGguCisJU2V0IHVwIExEX0xJQlJBUllfUEFUSCwgU0hMSUJfUEFUSCwgTERfTElCUkFSWU4zMl9QQVRILAorCUxEX0xJQlJBUlk2NF9QQVRILCBMRF9MSUJSQVJZX1BBVEhfMzIsIExEX0xJQlJBUllfUEFUSF82NCBhbmQKKwlEWUxEX0xJQlJBUllfUEFUSC4KKworMjAwNC0wOS0wNSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jOiBSZW1vdmUgd2hpdGVzcGFjZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcHJvbW90aW9uLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9sbC5jOiBSZW1vdmUgdW51c2VkIHZhci4gQ2xlYW51cAorCXdoaXRlc3BhY2VzLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYzogTGlrZXdpc2UuCisKKzIwMDQtMDktMDUgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IEZpeCBjb21tZW50cyBhbmQgaWRlbnRhdGlvbi4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDA0LTA5LTAyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYzogQWRkIGZsYWcgZm9yIGxvbmdkb3VibGUgcmV0dXJuIHZhbHVlcy4KKwkoZmZpX3ByZXBfYXJncyk6IEhhbmRsZSBsb25nZG91YmxlIGFyZ3VtZW50cy4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBTZXQgZmxhZ3MgZm9yIGxvbmdkb3VibGUuIENhbGN1bGF0ZSBzcGFjZSBmb3IKKwlsb25nZG91YmxlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOKTogQWRkIGNsb3N1cmUgaGFuZGxpbmcgZm9yIGxvbmdkb3VibGUuCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUyAoX2ZmaV9jYWxsX0RBUldJTik6IEFkZCBoYW5kbGluZyBvZiBsb25nZG91YmxlCisJdmFsdWVzLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUyAoX2ZmaV9jbG9zdXJlX0FTTSk6IExpa2V3aXNlLgorCSogc3JjL3R5cGVzLmM6IERlZmluZWQgbG9uZ2RvdWJsZSBzaXplIGFuZCBhbGlnbm1lbnQgZm9yIGRhcndpbi4KKworMjAwNC0wOS0wMiAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9haXguUzogUmVtb3ZlIHdoaXRlc3BhY2VzLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9hc20uaDogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmkuYzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZml0YXJnZXQuaDogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9zeXN2LlM6IExpa2V3aXNlLgorCisyMDA0LTA4LTMwICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuYW06IEFkZCBmcnYgc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluLCB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmUuYWM6IFJlYWQgY29uZmlndXJlLmhvc3QuCisJKiBjb25maWd1cmUuaW46IFJlYWQgY29uZmlndXJlLmhvc3QuCisJKiBjb25maWd1cmUuaG9zdDogTmV3IGZpbGUuICBmcnYtZWxmIG5lZWRzIGxpYmdsb3NzLgorCSogaW5jbHVkZS9mZmkuaC5pbjogRm9yY2UgZmZpX2Nsb3N1cmUgdG8gaGF2ZSBhIG5pY2UgYmlnICg4KQorCWFsaWdubWVudC4gIFRoaXMgaXMgbmVlZGVkIHRvIGZydiBhbmQgc2hvdWxkbid0IGhhcm0gdGhlIG90aGVycy4KKwkqIGluY2x1ZGUvZmZpX2NvbW1vbi5oIChBTElHTl9ET1dOKTogTmV3IG1hY3JvLgorCSogc3JjL2Zydi9mZmkuYywgc3JjL2Zydi9mZml0YXJnZXQuaCwgc3JjL2Zydi9lYWJpLlM6IE5ldyBmaWxlcy4KKworMjAwNC0wOC0yNCAgRGF2aWQgRGFuZXkgIDxkYW5leUBhdnRyZXguY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogWGZhaWwgbWlwczY0KiBpbnN0ZWFkIG9mIG1pcHMqLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMgIExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4zLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNF8xYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydGNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UgYW5kIHNldCByZXR1cm4gdmFsdWUKKwl0byB6ZXJvLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorCisyMDA0LTA4LTIzICBEYXZpZCBEYW5leSA8ZGFuZXlAYXZ0cmV4LmNvbT4KKworCVBSIGxpYmdjai8xMzE0MQorCSogc3JjL21pcHMvZmZpdGFyZ2V0LmggKEZGSV9PMzJfU09GVF9GTE9BVCk6IE5ldyBBQkkuCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEZpeCBhbGlnbm1lbnQgY2FsY3VsYXRpb24uCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogSGFuZGxlIEZGSV9PMzJfU09GVF9GTE9BVCBmbG9hdGluZyBwb2ludAorCXBhcmFtZXRlcnMgYW5kIHJldHVybiB0eXBlcy4KKwkoZmZpX2NhbGwpOiBIYW5kbGUgRkZJX08zMl9TT0ZUX0ZMT0FUIEFCSS4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IERpdHRvLgorCShmZmlfY2xvc3VyZV9taXBzX2lubmVyX08zMik6IEhhbmRsZSBGRklfTzMyX1NPRlRfRkxPQVQgQUJJLCBmaXgKKwlhbGlnbm1lbnQgY2FsY3VsYXRpb25zLgorCSogc3JjL21pcHMvbzMyLlMgKGZmaV9jbG9zdXJlX08zMik6IERvbid0IHVzZSBmbG9hdGluZyBwb2ludAorCWluc3RydWN0aW9ucyBpZiBGRklfTzMyX1NPRlRfRkxPQVQsIG1ha2Ugc3RhY2sgZnJhbWUgQUJJIGNvbXBsaWFudC4KKworMjAwNC0wOC0xNCAgQ2FzZXkgTWFyc2hhbGwgPGNzbUBnbnUub3JnPgorCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZWZfY2lmX21hY2hkZXApOiBzZXQgYGNpZi0+ZmxhZ3MnIHRvCisJY29udGFpbiBgRkZJX1RZUEVfVUlOVDY0JyBhcyByZXR1cm4gdHlwZSBmb3IgYW55IDY0LWJpdAorCWludGVnZXIgKE8zMiBBQkkgb25seSkuCisJKGZmaV9wcmVwX2Nsb3N1cmUpOiBuZXcgZnVuY3Rpb24uCisJKGZmaV9jbG9zdXJlX21pcHNfaW5uZXJfTzMyKTogbmV3IGZ1bmN0aW9uLgorCSogc3JjL21pcHMvZmZpdGFyZ2V0Lmg6IERlZmluZSBgRkZJX0NMT1NVUkVTJyBhbmQKKwlgRkZJX1RSQU1QT0xJTkVfU0laRScgYXBwcm9wcmlhdGVseSBpZiB0aGUgQUJJIGlzIG8zMi4KKwkqIHNyYy9taXBzL28zMi5TIChmZmlfY2FsbF9PMzIpOiBhZGQgbGFiZWxzIGZvciAuZWhfZnJhbWUuIFJldHVybgorCTY0IGJpdCBpbnRlZ2VycyBjb3JyZWN0bHkuCisJKGZmaV9jbG9zdXJlX08zMik6IG5ldyBmdW5jdGlvbi4KKwlBZGRlZCBEV0FSRi0yIHVud2luZCBpbmZvIGZvciBib3RoIGZ1bmN0aW9ucy4KKworMjAwNC0wOC0xMCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfYXJncyApOiA4LWFsaWduIGFsbCBzdGFjayBhcmd1bWVudHMuCisKKzIwMDQtMDgtMDEgIFJvYmVydCBNaWxsYW4gIDxyb2JlcnRtaEBnbnUub3JnPgorCisJKiBjb25maWd1cmUuYWM6IERldGVjdCBrbmV0YnNkLWdudSBhbmQga2ZyZWVic2QtZ251LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA0LTA3LTMwICBNYWNpZWogVy4gUm96eWNraSAgPG1hY3JvQGxpbnV4LW1pcHMub3JnPgorCisJKiBhY2luY2x1ZGUubTQgKEFDX0ZVTkNfTU1BUF9CTEFDS0xJU1QpOiBDaGVjayBmb3IgPHN5cy9tbWFuLmg+CisJYW5kIG1tYXAoKSBleHBsaWNpdGx5IGluc3RlYWQgb2YgcmVseWluZyBvbiBwcmVzZXQgYXV0b2NvbmYgY2FjaGUKKwl2YXJpYWJsZXMuCisJKiBhY2xvY2FsLm00OiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA0LTA3LTExICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogRml4IEMgYWxpYXNpbmcgdmlvbGF0aW9uLgorCShmZmlfY2hlY2tfZmxvYXRfc3RydWN0KTogUmVtb3ZlIHVudXNlZCBwcm90b3R5cGUuCisKKzIwMDQtMDYtMzAgIEdlb2ZmcmV5IEtlYXRpbmcgIDxnZW9mZmtAYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZsdXNoX2ljYWNoZSk6ICc7JyBpcyBhIGNvbW1lbnQKKwljaGFyYWN0ZXIgb24gRGFyd2luLCB1c2UgJ1xuXHQnIGluc3RlYWQuCisKKzIwMDQtMDYtMjYgIE1hdHRoaWFzIEtsb3NlICA8ZG9rb0BkZWJpYW4ub3JnPgorCisJKiBsaWJ0b29sLXZlcnNpb246IEZpeCB0eXBvIGluIHJldmlzaW9uL2FnZS4KKworMjAwNC0wNi0xNyAgTWF0dGhpYXMgS2xvc2UgIDxkb2tvQGRlYmlhbi5vcmc+CisKKwkqIGxpYnRvb2wtdmVyc2lvbjogTmV3LgorCSogTWFrZWZpbGUuYW0gKGxpYmZmaV9sYV9MREZMQUdTKTogVXNlIC12ZXJzaW9uLWluZm8gZm9yIHNvbmFtZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCisyMDA0LTA2LTE1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIHVzZWxlc3MgbXVsdGlsaWIgcnVsZXMuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGFjbG9jYWwubTQ6IFJlZ2VuZXJhdGUgd2l0aCBhdXRvbWFrZSAxLjguNS4KKwkqIGNvbmZpZ3VyZS5hYzogUmVtb3ZlIHVzZWxlc3MgbXVsdGlsaWIgY29uZmlndXJ5LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCisyMDA0LTA2LTE1ICBQYW9sbyBCb256aW5pICA8Ym9uemluaUBnbnUub3JnPgorCisJKiAuY3ZzaWdub3JlOiBOZXcgZmlsZS4KKworMjAwNC0wNi0xMCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9pYTY0L3VuaXguUyAoZmZpX2NhbGxfdW5peCk6IEluc2VydCBncm91cCBiYXJyaWVyIGJyZWFrCisJZnBfZG9uZS4KKwkoZmZpX2Nsb3N1cmVfVU5JWCk6IEZpeCBmMTQvZjE1IGFkanVzdG1lbnQgaWYgRkxPQVRfU1ogaXMgZXZlcgorCWNoYW5nZWQgZnJvbSA4LgorCisyMDA0LTA2LTA2ICBTZWFuIE1jTmVpbCAgPHNlYW5AbWNuZWlsLmNvbT4KKworCSogY29uZmlndXJlLmFjOiBBZGQgeDg2XzY0LSotZnJlZWJzZCogc3VwcG9ydC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNC0wNC0yNiAgSm9lIEJ1Y2sgPGpidWNrQHdlbHNoLWJ1Y2sub3JnPgorCisJQnVnIDE1MDkzCisJKiBjb25maWd1cmUuYWM6IFRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBtbWFwIGFuZCBzeXMvbW1hbi5oIGJlZm9yZQorCWNoZWNraW5nIGJsYWNrbGlzdC4gIEZpeCBzdWdnZXN0ZWQgYnkgSmltIFdpbHNvbi4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwNC0wNC0yNiAgTWF0dCBBdXN0ZXJuICA8YXVzdGVybkBhcHBsZS5jb20+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBHbyB0aHJvdWdoIGEgbm9uLWxhenkgcG9pbnRlciBmb3IgaW5pdGlhbAorCUZERSBsb2NhdGlvbi4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDA0LTA0LTI0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYyAobWFpbik6IEZpeCBpbml0aWFsaXphdGlvbgorCWVycm9yLiBSZXBvcnRlZCBieSBUaG9tYXMgSGVsbGVyIDx0aGVsbGVyQHB5dGhvbi5uZXQ+LgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyAobWFpbik6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91c2hvcnQuYyAobWFpbik6IExpa2V3aXNlLgorCisyMDA0LTAzLTIwICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KKworCSogc3JjL3BhL2xpbnV4LlM6IEZpeCB0eXBvLgorCisyMDA0LTAzLTE5ICBNYXR0aGlhcyBLbG9zZSAgPGRva29AZGViaWFuLm9yZz4KKworCSogTWFrZWZpbGUuYW06IFVwZGF0ZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogc3JjL3BhL2ZmaS5oLmluOiBSZW1vdmUuCisJKiBzcmMvcGEvZmZpdGFyZ2V0Lmg6IE5ldyBmaWxlLgorCisyMDA0LTAyLTEwICBSYW5kb2xwaCBDaHVuZyAgPHRhdXNxQGRlYmlhbi5vcmc+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgUEEgc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZS5hYzogQWRkIFBBIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIHNyYy9wYS9mZmkuYzogTmV3IGZpbGUuCisJKiBzcmMvcGEvZmZpLmguaW46IEFkZCBQQSBzdXBwb3J0LgorCSogc3JjL3BhL2xpbnV4LlM6IE5ldyBmaWxlLgorCSogcHJlcF9jaWYuYzogQWRkIFBBIHN1cHBvcnQuCisKKzIwMDQtMDMtMTYgIEhvc2FrYSBZdWppICA8aG9zQHRhbWFuZWdpLm9yZz4KKworCSogc3JjL3R5cGVzLmM6IEZpeCBhbGlnbm1lbnQgc2l6ZSBvZiBYODZfV0lOMzIgY2FzZSBpbnQ2NCBhbmQKKwlkb3VibGUuCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVwbGFjZSBlY2lmLT5jaWYtPnJ0eXBlLT50eXBlCisJd2l0aCBlY2lmLT5jaWYtPmZsYWdzLgorCShmZmlfY2FsbCwgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKTogUmVwbGFjZSBjaWYtPnJ0eXBlLT50eXBlCisJd2l0aCBjaWYtPmZsYWdzLgorCShmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBYODZfV0lOMzIgc3RydWN0IGNhc2UuCisJKGZmaV9jbG9zdXJlX1NZU1YpOiBBZGQgMSBvciAyLWJ5dGVzIHN0cnVjdCBjYXNlIGZvciBYODZfV0lOMzIuCisJKiBzcmMveDg2L3dpbjMyLlMgKHJldHN0cnVjdDFiLCByZXRzdHJ1Y3QyYiwgc2NfcmV0c3RydWN0MWIsCisJc2NfcmV0c3RydWN0MmIpOiBBZGQgZm9yIDEgb3IgMi1ieXRlcyBzdHJ1Y3QgY2FzZS4KKworMjAwNC0wMy0xNSBLZWxsZXkgQ29vayA8a2Nvb2tAZ2NjLmdudS5vcmc+CisKKwkqIGNvbmZpZ3VyZS5pbjogUmVuYW1lIGZpbGUgdG8gLi4uCisJKiBjb25maWd1cmUuYWM6IC4uLiB0aGlzLgorCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDQtMDMtMTIgIE1hdHQgQXVzdGVybiAgPGF1c3Rlcm5AYXBwbGUuY29tPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogRml4IEVIIGluZm9ybWF0aW9uIHNvIGl0IGNvcnJlc3BvbmRzIHRvCisJY2hhbmdlcyBpbiBFSCBmb3JtYXQgcmVzdWx0aW5nIGZyb20gYWRkaXRpb24gb2YgbGlua29uY2Ugc3VwcG9ydC4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCisyMDA0LTAzLTExICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisJICAgIFBhb2xvIEJvbnppbmkgIDxib256aW5pQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChBVVRPTUFLRV9PUFRJT05TKTogU2V0IHRoZW0uCisJUmVtb3ZlIFZQQVRILiBSZW1vdmUgcnVsZXMgZm9yIG9iamVjdCBmaWxlcy4gUmVtb3ZlIG11bHRpbGliIHN1cHBvcnQuCisJKEFNX0NDQVNGTEFHUyk6IEFkZC4KKwkqIGNvbmZpZ3VyZS5pbiAoQUNfQ09ORklHX0hFQURFUlMpOiBSZWxhY2UgQU1fQ09ORklHX0hFQURFUi4KKwkoQUNfUFJFUkVRKTogQnVtcCB2ZXJzaW9uIHRvIDIuNTkuCisJKEFDX0lOSVQpOiBGaWxsIHdpdGggdmVyc2lvbiBpbmZvIGFuZCBidWcgYWRkcmVzcy4KKwkoT1JJR0lOQUxfTERfRk9SX01VTFRJTElCUyk6IFJlbW92ZS4KKwkoQU1fRU5BQkxFX01VTFRJTElCKTogVXNlIHRoaXMgaW5zdGVhZCBvZiBBQ19BUkdfRU5BQkxFLgorCURlLXByZWNpb3VzIENDIHNvIHRoYXQgdGhlIHJpZ2h0IGZsYWdzIGFyZSBwYXNzZWQgZG93biB0byBtdWx0aWxpYnMuCisJKEFDX01TR19FUlJPUik6IFJlcGxhY2Ugb2Jzb2xldGUgbWFjcm8gQUNfRVJST1IuCisJKEFDX0NPTkZJR19GSUxFUyk6IFJlcGxhY2Ugb2Jzb2xldGUgbWFjcm8gQUNfTElOS19GSUxFUy4KKwkoQUNfT1VUUFVUKTogUmVvcmdhbml6ZSB0aGUgb3V0cHV0IHdpdGggQUNfQ09ORklHX0NPTU1BTkRTLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogYWNsb2NhbC5tNDogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbiwgaW5jbHVkZS9NYWtlZmlsZS5pbiwgdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KKworMjAwNC0wMy0xMSAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKworCSogc3JjL2lhNjQvZmZpLmMgKGZmaV9wcmVwX2luY29taW5nX2FyZ3NfVU5JWCk6IEdldCBmbG9hdGluZyBwb2ludAorCWFyZ3VtZW50cyBmcm9tIGZwIHJlZ2lzdGVycyBvbmx5IGZvciB0aGUgZmlyc3QgOCBwYXJhbWV0ZXIgc2xvdHMuCisJRG9uJ3QgY29udmVydCBhIGZsb2F0IHBhcmFtZXRlciB3aGVuIHBhc3NlZCBpbiBtZW1vcnkuCisKKzIwMDQtMDMtMDkgIEhhbnMtUGV0ZXIgTmlsc3NvbiAgPGhwQGF4aXMuY29tPgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUgZm9yIGNvbmZpZy9hY2Nyb3NzLm00IGNvcnJlY3Rpb24uCisKKzIwMDQtMDItMjUgIE1hdHQgS3JhYWkgIDxrcmFhaUBhbHVtbmkuY211LmVkdT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3NfU1lTVik6IENoYW5nZQorCWVjaWYtPmNpZi0+Ynl0ZXMgdG8gYnl0ZXMuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkIGJyYWNlcyBhcm91bmQgbmVzdGVkIGlmIHN0YXRlbWVudC4KKworMjAwNC0wMi0wOSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3R5cGVzLmMgKHBvaW50ZXIpOiBQT1dFUlBDNjQgaGFzIDggYnl0ZSBwb2ludGVycy4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3M2NCk6IENvcnJlY3QgbG9uZyBkb3VibGUgaGFuZGxpbmcuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogRml4IHR5cG8uCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYzogUGFzcyAtbWxvbmctZG91YmxlLTEyOAorCWZvciBwb3dlcnBjNjQtKi0qLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zsb2F0Mi5jOiBMaWtld2lzZS4KKworMjAwNC0wMi0wOCAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwIDxGRklfTElOVVg2ND4pOiBDb3JyZWN0CisJbG9uZyBkb3VibGUgZnVuY3Rpb24gcmV0dXJuIGFuZCBsb25nIGRvdWJsZSBhcmcgaGFuZGxpbmcuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogRm9ybWF0dGluZy4gIERlbGV0ZSB1bnVzZWQgIm5nIiB2YXIuCisJVXNlICJlbmRfcGZyIiBpbnN0ZWFkIG9mICJuZiIuICBDb3JyZWN0IGxvbmcgZG91YmxlIGhhbmRsaW5nLgorCUxvY2FsaXNlICJ0ZW1wIi4KKwkqIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyAoZmZpX2NhbGxfTElOVVg2NCk6IFNhdmUgZjIgbG9uZyBkb3VibGUKKwlyZXR1cm4gdmFsdWUuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyAoZmZpX2Nsb3N1cmVfTElOVVg2NCk6IEFsbG9jYXRlCisJc3BhY2UgZm9yIGxvbmcgZG91YmxlIHJldHVybiB2YWx1ZS4gIEFkanVzdCBzdGFjayBmcmFtZSBhbmQgb2Zmc2V0cy4KKwlMb2FkIGYyIGxvbmcgZG91YmxlIHJldHVybi4KKworMjAwNC0wMi0wNyAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3R5cGVzLmM6IFVzZSAxNiBieXRlIGxvbmcgZG91YmxlIGZvciBQT1dFUlBDNjQuCisKKzIwMDQtMDEtMjUgIEVyaWMgQm90Y2F6b3UgIDxlYm90Y2F6b3VAbGliZXJ0eXN1cmYuZnI+CisKKwkqIHNyYy9zcGFyYy9mZmkuYyAoZmZpX3ByZXBfYXJnc192OSk6IFNoaWZ0IHRoZSBwYXJhbWV0ZXIgYXJyYXkKKwl3aGVuIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MgaXMgcGFzc2VkIGluICVvMC4KKwkoZmZpX1Y5X3JldHVybl9zdHJ1Y3QpOiBSZW5hbWUgaW50byBmZmlfdjlfbGF5b3V0X3N0cnVjdC4KKwkoZmZpX3Y5X2xheW91dF9zdHJ1Y3QpOiBBbGlnbiB0aGUgZmllbGQgZm9sbG93aW5nIGEgbmVzdGVkIHN0cnVjdHVyZQorCW9uIGEgd29yZCBib3VuZGFyeS4gIFVzZSBtZW1tb3ZlIGluc3RlYWQgb2YgbWVtY3B5LgorCShmZmlfY2FsbCk6IFVwZGF0ZSBjYWxsIHRvIGZmaV9WOV9yZXR1cm5fc3RydWN0LgorCShmZmlfcHJlcF9jbG9zdXJlKTogRGVmaW5lICdjdHgnIG9ubHkgZm9yIFY4LgorCShmZmlfY2xvc3VyZV9zcGFyY19pbm5lcik6IENsb25lIGludG8gZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjgKKwlhbmQgZmZpX2Nsb3N1cmVfc3BhcmNfaW5uZXJfdjkuCisJKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y4KTogUmV0dXJuIGxvbmcgZG91YmxlcyBieSByZWZlcmVuY2UuCisJQWx3YXlzIHNraXAgdGhlIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gIEZvciBzdHJ1Y3R1cmVzIGFuZCBsb25nCisJZG91YmxlcywgY29weSB0aGUgYXJndW1lbnQgZGlyZWN0bHkuCisJKGZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y5KTogU2tpcCB0aGUgc3RydWN0dXJlIHJldHVybiBhZGRyZXNzIG9ubHkKKwlpZiByZXF1aXJlZC4gIFNoaWZ0IHRoZSBtYXhpbXVtIGZsb2F0aW5nLXBvaW50IHNsb3QgYWNjb3JkaW5nbHkuICBGb3IKKwliaWcgc3RydWN0dXJlcywgY29weSB0aGUgYXJndW1lbnQgZGlyZWN0bHk7IG90aGVyd2lzZSwgbGVmdC1qdXN0aWZ5IHRoZQorCWFyZ3VtZW50IGFuZCBjYWxsIGZmaV92OV9sYXlvdXRfc3RydWN0IHRvIGxheSBvdXQgdGhlIHN0cnVjdHVyZSBvbgorCXRoZSBzdGFjay4KKwkqIHNyYy9zcGFyYy92OC5TOiBVbmRlZiBTVEFDS0ZSQU1FIGJlZm9yZSBkZWZpbmluZyBpdC4KKwkoZmZpX2Nsb3N1cmVfdjgpOiBQYXNzIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIGFkZHJlc3MuICBVcGRhdGUgY2FsbCB0bworCWZmaV9jbG9zdXJlX3NwYXJjX2lubmVyX3Y4LiAgU2hvcnQtY2lyY3VpdCBGRklfVFlQRV9JTlQgaGFuZGxpbmcuCisJU2tpcCB0aGUgJ3VuaW1wJyBpbnNuIHdoZW4gcmV0dXJuaW5nIGxvbmcgZG91YmxlcyBhbmQgc3RydWN0dXJlcy4KKwkqIHNyYy9zcGFyYy92OS5TOiBVbmRlZiBTVEFDS0ZSQU1FIGJlZm9yZSBkZWZpbmluZyBpdC4KKwkoZmZpX2Nsb3N1cmVfdjkpOiBJbmNyZWFzZSB0aGUgZnJhbWUgc2l6ZSBieSAyIHdvcmRzLiAgU2hvcnQtY2lyY3VpdAorCUZGSV9UWVBFX0lOVCBoYW5kbGluZy4gIExvYWQgc3RydWN0dXJlcyBib3RoIGluIGludGVnZXJzIGFuZAorCWZsb2F0aW5nLXBvaW50IHJlZ2lzdGVycyBvbiByZXR1cm4uCisJKiBSRUFETUU6IFVwZGF0ZSBzdGF0dXMgb2YgdGhlIFNQQVJDIHBvcnQuCisKKzIwMDQtMDEtMjQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jIChtYWluKTogVHJlYXQgcmVzdWx0IHZhbHVlCisJYXMgb2YgdHlwZSBmZmlfYXJnLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYyAobWFpbik6IEZpeCBDSEVDSy4KKworMjAwNC0wMS0yMiAgVWxyaWNoIFdlaWdhbmQgIDx1d2VpZ2FuZEBkZS5pYm0uY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYyAoY2xzX3JldF91aW50X2ZuKTogVHJlYXQgcmVzdWx0CisJdmFsdWUgYXMgb2YgdHlwZSBmZmlfYXJnLCBub3QgdW5zaWduZWQgaW50LgorCisyMDA0LTAxLTIxICBNaWNoYWVsIFJpdHplcnQgIDxyaXR6ZXJ0QHQtb25saW5lLmRlPgorCisJKiBmZmk2NC5jIChmZmlfcHJlcF9hcmdzKTogQ2FzdCB0aGUgUkhTIG9mIGFuIGFzc2lnbm1lbnQgaW5zdGVhZAorCW9mIHRoZSBMSFMuCisKKzIwMDQtMDEtMTIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYi9saWJmZmktZGcuZXhwOiBTZXQgTERfTElCUkFSWV9QQVRIXzMyIGZvcgorCVNvbGFyaXMuCisKKzIwMDQtMDEtMDggIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oIChhbGxvY2F0ZV9tbWFwKTogQ2FzdCBNQVBfRkFJTEVECisJdG8gdm9pZCAqLgorCisyMDAzLTEyLTEwICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYzogQ2FzdCBwb2ludGVycyB0bworCXNpemVfdCBpbnN0ZWFkIG9mIGludC4KKworMjAwMy0xMi0wNCAgSG9zYWthIFl1amkgIDxob3NAdGFtYW5lZ2kub3JnPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jOiBJbmNsdWRlIDxmbG9hdC5oPi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMgKG1haW4pOiBSZXBsYWNlIHZhcmlhYmxlCisJaW50IGkgd2l0aCB1bnNpZ25lZCBsb25nIHVsLgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQ2NC5jOiBOZXcgdGVzdCBjYXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDMyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQxNi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jOiBMaWtld2lzZS4KKworMjAwMy0xMi0wMiAgSG9zYWthIFl1amkgIDxob3NAdGFtYW5lZ2kub3JnPgorCisJUFIgb3RoZXIvMTMyMjEKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2FyZ3MsIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfU1lTVik6CisJQWxpZ24gYXJndW1lbnRzIHRvIDMyIGJpdHMuCisKKzIwMDMtMTItMDEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCVBSIG90aGVyLzEzMjIxCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3NzaG9ydC5jOiBOZXcgdGVzdCBjYXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnRjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbXVsdGlfc2NoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydC5jOiBMaWtld2lzZS4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IENvc21ldGljcy4KKworMjAwMy0xMS0yNiAgS2F2ZWggUi4gR2hhemkgIDxnaGF6aUBjYWlwLnJ1dGdlcnMuZWR1PgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oOiBJbmNsdWRlIDxmY250bC5oPi4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4Lmg6IExpa2V3aXNlLgorCisyMDAzLTExLTIyICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBDb252ZXJ0IHRoZSBtbWFwIHRvCisJdGhlIHJpZ2h0IHR5cGUuCisKKzIwMDMtMTEtMjEgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KKwkgICAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBhY2luY2x1ZGUubTQ6IEFkZCBBQ19GVU5DX01NQVBfQkxBQ0tMSVNULgorCSogY29uZmlndXJlLmluOiBDYWxsIEFDX0ZVTkNfTU1BUF9CTEFDS0xJU1QuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGFjbG9jYWwubTQ6IExpa2V3aXNlLgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogQWRkIGluY2x1ZGUgZGlyLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogQWRkIE1NQVAgZGVmaW5pdGlvbnMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBVc2UgTU1BUCBmdW5jdGlvbmFsaXR5CisJZm9yIGZmaV9jbG9zdXJlIGlmIGF2YWlsYWJsZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgorCisyMDAzLTExLTIwICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogTWFrZSB0aGUgLWxnY2NfcyBjb25kaXRpb25hbC4KKworMjAwMy0xMS0xOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IEFkZCBEWUxEX0xJQlJBUllfUEFUSCBmb3IgZGFyd2luLgorCUFkZCAtbGdjY19zIHRvIGFkZGl0aW9uYWwgZmxhZ3MuCisKKzIwMDMtMTEtMTIgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogY29uZmlndXJlLmluLCBpbmNsdWRlL01ha2VmaWxlLmFtOiBQUiBsaWJnY2ovMTExNDcsIGluc3RhbGwKKwl0aGUgZmZpdGFyZ2V0LmggaGVhZGVyIGZpbGUgaW4gYSBnY2MgdmVyc2lvbmVkIGFuZCB0YXJnZXQKKwlkZXBlbmRlbnQgcGxhY2UuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGVkLgorCSogTWFrZWZpbGUuaW4sIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKworMjAwMy0xMS0wOSAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogUHJpbnQgcmVzdWx0IGFuZCBjaGVjaworCXdpdGggZGctb3V0cHV0IHRvIG1ha2UgZGVidWdnaW5nIGVhc2llci4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE4Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTlieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzdieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc184Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3NjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zaW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IE1ha2UgZmZpX2Nsb3N1cmUKKwlzdGF0aWMuCisKKzIwMDMtMTEtMDggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc185Ynl0ZTIuYzogTmV3IHRlc3QgY2FzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182NGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzIwYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE5Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMThieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm40LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm41LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zY2hhci5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc2ludC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QzLmM6IExpa2V3aXNlLgorCisyMDAzLTExLTA4ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlLmM6IERvIGEgY2hlY2sgb24gdGhlIHJlc3VsdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWNoYXIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3Vsb25nbG9uZy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdXNob3J0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jOiBDbGVhbnVwIHdoaXRlc3BhY2VzLgorCisyMDAzLTExLTA2ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBNb3ZlIHRoZSB2YWxpZGl0eSBjaGVjayBhZnRlcgorCXRoZSBpbml0aWFsaXphdGlvbi4KKworMjAwMy0xMC0yMyAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvamF2YV9yYXdfYXBpLmMgKGZmaV9qYXZhX3B0cmFycmF5X3RvX3Jhdyk6IFJlcGxhY2UKKwlGRklfQVNTRVJUKEZBTFNFKSB3aXRoIEZGSV9BU1NFUlQoMCkuCisKKzIwMDMtMTAtMjIgIERhdmlkIERhbmV5ICA8ZGRhbmV5QGF2dHJleC5jb20+CisKKwkqIHNyYy9taXBzL2ZmaXRhcmdldC5oOiBSZXBsYWNlIHVuZGVmaW5lZCBVSU5UMzIgYW5kIGZyaWVuZHMgd2l0aAorCV9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKSBhbmQgZnJpZW5kcy4KKworMjAwMy0xMC0yMiAgQW5kcmVhcyBTY2h3YWIgIDxzY2h3YWJAc3VzZS5kZT4KKworCSogc3JjL2lhNjQvZmZpLmM6IFJlcGxhY2UgRkFMU0UvVFJVRSB3aXRoIGZhbHNlL3RydWUuCisKKzIwMDMtMTAtMjEgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogY29uZmlndXJlLmluOiBBQ19MSU5LX0ZJTEVTKGZmaXRhcmdldC5oKS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIE1ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGluY2x1ZGUvTWFrZWZpbGUuaW46IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL01ha2VmaWxlLmluOiBMaWtld2lzZS4KKwkqIGZmaWNvbmZpZy5oLmluOiBMaWtld2lzZS4KKworMjAwMy0xMC0yMSAgUGFvbG8gQm9uemluaSAgPGJvbnppbmlAZ251Lm9yZz4KKwkgICAgUmljaGFyZCBIZW5kZXJzb24gIDxydGhAcmVkaGF0LmNvbT4KKworCUF2b2lkIHRoYXQgZmZpLmggaW5jbHVkZXMgZmZpY29uZmlnLmguCisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogSW5jbHVkZSBmZml0YXJnZXQuaCBmaWxlcworCShUQVJHRVRfU1JDX01JUFNfR0NDKTogUmVuYW1lZCB0byBUQVJHRVRfU1JDX01JUFNfSVJJWC4KKwkoVEFSR0VUX1NSQ19NSVBTX1NHSSk6IFJlbW92ZWQuCisJKE1JUFNfR0NDKTogUmVuYW1lZCB0byBUQVJHRVRfU1JDX01JUFNfSVJJWC4KKwkoTUlQU19TR0kpOiBSZW1vdmVkLgorCShDTEVBTkZJTEVTKTogUmVtb3ZlZC4KKwkobW9zdGx5Y2xlYW4tYW0sIGNsZWFuLWFtLCBtb3N0bHljbGVhbi1zdWIsIGNsZWFuLXN1Yik6IE5ldworCXRhcmdldHMuCisJKiBhY2NvbmZpZy5oOiBSZW1vdmVkLgorCSogY29uZmlndXJlLmluOiBDb21wdXRlIHNpemVvZnMgb25seSBmb3IgZG91YmxlIGFuZCBsb25nIGRvdWJsZS4KKwlVc2UgdGhlbSB0byBkZWZpbmUgYW5kIHN1YnN0IEhBVkVfTE9OR19ET1VCTEUuICBJbmNsdWRlIGNvbW1lbnRzCisJaW50byBBQ19ERUZJTkUgaW5zdGVhZCBvZiB1c2luZyBhY2NvbmZpZy5oLiAgQ3JlYXRlCisJaW5jbHVkZS9mZml0YXJnZXQuaCBpbnN0ZWFkIG9mIGluY2x1ZGUvZmZpY29uZmlnLmguICBSZW5hbWUKKwlNSVBTX0dDQyB0byBNSVBTX0lSSVgsIGRyb3AgTUlQU19TR0kgc2luY2Ugd2UgYXJlIGluIGdjYydzIHRyZWUuCisJQUNfREVGSU5FIEVIX0ZSQU1FX0ZMQUdTLgorCSogaW5jbHVkZS9NYWtlZmlsZS5hbSAoRElTVENMRUFORklMRVMpOiBOZXcgYXV0b21ha2UgbWFjcm8uCisJKGhhY2tfREFUQSk6IEFkZCBmZml0YXJnZXQuaC4KKwkqIGluY2x1ZGUvZmZpLmguaW46IFJlbW92ZSBhbGwgc3lzdGVtIHNwZWNpZmljIGRlZmluaXRpb25zLgorCURlY2xhcmUgcmF3IEFQSSBldmVuIGlmIGl0IGlzIG5vdCBpbnN0YWxsZWQsIHdoeSBib3RoZXI/CisJVXNlIGxpbWl0cy5oIGluc3RlYWQgb2YgU0laRU9GXyogdG8gZGVmaW5lIGZmaV90eXBlXyouICBEbworCW5vdCBkZWZpbmUgRUhfRlJBTUVfRkxBR1MsIGl0IGlzIGluIGZmaWNvbmZpZy5oIG5vdy4gIEluY2x1ZGUKKwlmZml0YXJnZXQuaCBpbnN0ZWFkIG9mIGZmaWNvbmZpZy5oLiAgUmVtb3ZlIEFMSUdOIG1hY3JvLgorCShVSU5UX0FSRywgSU5UX0FSRyk6IFJlbW92ZWQsIHVzZSBmZmlfYXJnIGFuZCBmZmlfc2FyZyBpbnN0ZWFkLgorCSogaW5jbHVkZS9mZmlfY29tbW9uLmggKGJvb2wpOiBEbyBub3QgZGVmaW5lLgorCShmZmlfYXNzZXJ0KTogQWNjZXB0IGZhaWxlZCBhc3NlcnRpb24uCisJKGZmaV90eXBlX3Rlc3QpOiBSZXR1cm4gdm9pZCBhbmQgYWNjZXB0IGZpbGUvbGluZS4KKwkoRkZJX0FTU0VSVCk6IFBhc3Mgc3RyaW5naXplZCBmYWlsZWQgYXNzZXJ0aW9uLgorCShGRklfQVNTRVJUX0FUKTogTmV3IG1hY3JvLgorCShGRklfQVNTRVJUX1ZBTElEX1RZUEUpOiBOZXcgbWFjcm8uCisJKFVJTlQ4LCBTSU5UOCwgVUlOVDE2LCBTSU5UMTYsIFVJTlQzMiwgU0lOVDMyLAorCVVJTlQ2NCwgU0lOVDY0KTogRGVmaW5lIGhlcmUgd2l0aCBnY2MncyBfX2F0dHJpYnV0ZV9fIG1hY3JvCisJaW5zdGVhZCBvZiBpbiBmZmkuaAorCShGTE9BVDMyLCBBTElHTik6IERlZmluZSBoZXJlIGluc3RlYWQgb2YgaW4gZmZpLmgKKwkqIGluY2x1ZGUvZmZpLW1pcHMuaDogUmVtb3ZlZC4gIEl0cyBjb250ZW50IG1vdmVkIHRvCisJc3JjL21pcHMvZmZpdGFyZ2V0LmggYWZ0ZXIgc2VwYXJhdGluZyBhc3NlbWJseSBhbmQgQyBzZWN0aW9ucy4KKwkqIHNyYy9hbHBoYS9mZmkuYywgc3JjL2FscGhhL2ZmaS5jLCBzcmMvamF2YV9yYXdfYXBpLmMKKwlzcmMvcHJlcF9jaWYuYywgc3JjL3Jhd19hcGkuYywgc3JjL2lhNjQvZmZpLmMsCisJc3JjL21pcHMvZmZpLmMsIHNyYy9taXBzL24zMi5TLCBzcmMvbWlwcy9vMzIuUywKKwlzcmMvbWlwcy9mZml0YXJnZXQuaCwgc3JjL3NwYXJjL2ZmaS5jLCBzcmMveDg2L2ZmaTY0LmM6CisJU0laRU9GX0FSRyAtPiBGRklfU0laRU9GX0FSRy4KKwkqIHNyYy9pYTY0L2ZmaS5jOiBJbmNsdWRlIHN0ZGJvb2wuaCAocHJvdmlkZWQgYnkgR0NDIDIuOTUrKS4KKwkqIHNyYy9kZWJ1Zy5jIChmZmlfYXNzZXJ0KTogQWNjZXB0IHN0cmluZ2l6ZWQgZmFpbGVkIGFzc2VydGlvbi4KKwkoZmZpX3R5cGVfdGVzdCk6IFJld3JpdHRlbi4KKwkqIHNyYy9wcmVwLWNpZi5jIChpbml0aWFsaXplX2FnZ3JlZ2F0ZSwgZmZpX3ByZXBfY2lmKTogQ2FsbAorCUZGSV9BU1NFUlRfVkFMSURfVFlQRS4KKwkqIHNyYy9hbHBoYS9mZml0YXJnZXQuaCwgc3JjL2FybS9mZml0YXJnZXQuaCwKKwlzcmMvaWE2NC9mZml0YXJnZXQuaCwgc3JjL202OGsvZmZpdGFyZ2V0LmgsCisJc3JjL21pcHMvZmZpdGFyZ2V0LmgsIHNyYy9wb3dlcnBjL2ZmaXRhcmdldC5oLAorCXNyYy9zMzkwL2ZmaXRhcmdldC5oLCBzcmMvc2gvZmZpdGFyZ2V0LmgsCisJc3JjL3NoNjQvZmZpdGFyZ2V0LmgsIHNyYy9zcGFyYy9mZml0YXJnZXQuaCwKKwlzcmMveDg2L2ZmaXRhcmdldC5oOiBOZXcgZmlsZXMuCisJKiBzcmMvYWxwaGEvb3NmLlMsIHNyYy9hcm0vc3lzdi5TLCBzcmMvaWE2NC91bml4LlMsCisJc3JjL202OGsvc3lzdi5TLCBzcmMvbWlwcy9uMzIuUywgc3JjL21pcHMvbzMyLlMsCisJc3JjL3Bvd2VycGMvYWl4LlMsIHNyYy9wb3dlcnBjL2Rhcndpbi5TLAorCXNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYywgc3JjL3Bvd2VycGMvbGludXg2NC5TLAorCXNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TLCBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TLAorCXNyYy9wb3dlcnBjL3N5c3YuUywgc3JjL3MzOTAvc3lzdi5TLCBzcmMvc2gvc3lzdi5TLAorCXNyYy9zaDY0L3N5c3YuUywgc3JjL3NwYXJjL3Y4LlMsIHNyYy9zcGFyYy92OS5TLAorCXNyYy94ODYvc3lzdi5TLCBzcmMveDg2L3VuaXg2NC5TLCBzcmMveDg2L3dpbjMyLlM6CisJaW5jbHVkZSBmZmljb25maWcuaAorCisyMDAzLTEwLTIwICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL21pcHMvZmZpLmM6IFVzZSBfQUJJTjMyLCBfQUJJTzMyIGluc3RlYWQgb2YgZXh0ZXJuYWwKKwlfTUlQU19TSU1fTkFCSTMyLCBfTUlQU19TSU1fQUJJMzIuCisKKzIwMDMtMTAtMTkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9hcmdzKTogRGVjbGFyZSBieXRlcyBhZ2Fpbi4KKwlVc2VkIHdoZW4gRkZJX0RFQlVHID0gMS4KKworMjAwMy0xMC0xNCAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3R5cGVzLmMgKGRvdWJsZSwgbG9uZ2RvdWJsZSk6IERlZmF1bHQgUE9XRVJQQzY0IHRvIDggYnl0ZSBzaXplCisJYW5kIGFsaWduLgorCisyMDAzLTEwLTA2ICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogaW5jbHVkZS9mZmlfbWlwcy5oOiBEZWZpbmUgRkZJX01JUFNfTjMyIGZvciBOMzIvTjY0IEFCSXMsCisJRkZJX01JUFNfTzMyIGZvciBPMzIgQUJJLgorCisyMDAzLTEwLTAxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cDogU2V0IExEX0xJQlJBUllfUEFUSF82NCBmb3IKKwlTUEFSQzY0LiBDbGVhbnVwIHdoaXRlc3BhY2VzLgorCisyMDAzLTA5LTE5ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMC5jOiBYZmFpbCBtaXBzLCBhcm0sCisJc3Ryb25nYXJtLCB4c2NhbGUuIENsZWFudXAgd2hpdGVzcGFjZXMuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzEyYnl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMTZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfM2J5dGUyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180XzFieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc180Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzZieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc183Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfOGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Byb2JsZW0xLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3QuY2M6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jOiBDbGVhbnVwIHdoaXRlc3BhY2VzLgorCisyMDAzLTA5LTE4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2FpeC5TOiBDbGVhbnVwIHdoaXRlc3BhY2VzLgorCSogc3JjL3Bvd2VycGMvYWl4X2Nsb3N1cmUuUzogTGlrZXdpc2UuCisKKzIwMDMtMDktMTggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IENsZWFudXAgd2hpdGVzcGFjZXMsIGNvbW1lbnQgZm9ybWF0dGluZy4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBMaWtld2lzZS4KKworMjAwMy0wOS0xOCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCSAgICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy90eXBlcy5jIChkb3VibGUpOiBBZGQgQUlYIGFuZCBEYXJ3aW4gdG8gdGhlIHJpZ2h0IFRZUEVERUYuCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBSZW1vdmUgdGhlIHBvaW50ZXIgdG8gdGhlIG91dGdvaW5nCisJcGFyYW1ldGVyIHN0YWNrLgorCSogc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUzogTGlrZXdpc2UuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBIYW5kbGUgc3RydWN0dXJlcworCWFjY29yZGluZyB0byB0aGUgRGFyd2luL0FJWCBBQkkuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogTGlrZXdpc2UuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBMaWtld2lzZS4KKwlSZW1vdmUgdGhlIG91dGdvaW5nIHBhcmFtZXRlciBzdGFjayBsb2dpYy4gU2ltcGxpZnkgdGhlIGV2YWx1YXRpb24KKwlvZiB0aGUgZGlmZmVyZW50IENBU0UgdHlwZXMuCisJKGZmaV9wcmVwX2Nsb3VzdXJlKTogQXZvaWQgdGhlIGNhc3RzIG9uIGx2YWx1ZXMuIENoYW5nZSB0aGUgYnJhbmNoCisJc3RhdGVtZW50IGluIHRoZSB0cmFtcG9saW5lIGNvZGUuCisKKzIwMDMtMDktMTggIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBzcmMvc2gvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBUYWtlIGFjY291bnQgaW50byB0aGUgYWxpZ25lbWVudAorCWZvciB0aGUgcmVnaXN0ZXIgc2l6ZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBIYW5kbGUgdGhlIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUKKwlhZGRyZXNzIGNvcnJlY3RseS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIHR5cGUgd2hlbgorCXRoZSByZWdpc3RlcnMgYXJlIHVzZWQgZm9yIHRoZSBzdHJ1Y3R1cmUgcmV0dXJuIHZhbHVlLgorCSogc3JjL3NoL3N5c3YuUyAoZmZpX2Nsb3N1cmVfU1lTVik6IEZpeCB0aGUgc3RhY2sgbGF5b3V0IGZvcgorCXRoZSA2NC1iaXQgcmV0dXJuIHZhbHVlLiAgVXBkYXRlIGNvcHlyaWdodCB5ZWFycy4KKworMjAwMy0wOS0xNyAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHRlc3RzdWl0ZS9saWIvbGliZmZpLWRnLmV4cCAobGliZmZpX3RhcmdldF9jb21waWxlKTogU2VhcmNoIGluCisJc3JjZGlyIGZvciBmZmlfbWlwcy5oLgorCisyMDAzLTA5LTEyICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvcHJlcF9jaWYuYyAoaW5pdGlhbGl6ZV9hZ2dyZWdhdGUpOiBJbmNsdWRlIHRhaWwgcGFkZGluZyBpbgorCXN0cnVjdHVyZSBzaXplLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBDb3JyZWN0CisJcGxhY2VtZW50IG9mIGZsb2F0IHJlc3VsdC4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjIChjbG9zdXJlX3Rlc3RfZm4xKTogQ29ycmVjdAorCWNhc3Qgb2YgInJlc3AiIGZvciBiaWctZW5kaWFuIDY0IGJpdCBtYWNoaW5lcy4KKworMjAwMy0wOS0xMSAgQWxhbiBNb2RyYSAgPGFtb2RyYUBiaWdwb25kLm5ldC5hdT4KKworCSogc3JjL3R5cGVzLmMgKGRvdWJsZSwgbG9uZ2RvdWJsZSk6IE1lcmdlIGlkZW50aWNhbCBTSCBhbmQgQVJNCisJdHlwZWRlZnMsIGFuZCBhZGQgUE9XRVJQQzY0LgorCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9wcmVwX2FyZ3M2NCk6IENvcnJlY3QgbmV4dF9hcmcgY2FsYyBmb3IKKwlzdHJ1Y3Qgc3BsaXQgb3ZlciBncHIgYW5kIHJlc3QuCisJKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQ29ycmVjdCBpbnRhcmdfY291bnQgZm9yIHN0cnVjdHVyZXMuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlMgKGZmaV9jYWxsX0xJTlVYNjQpOiBGaXggZ3ByIG9mZnNldHMuCisKKzIwMDMtMDktMDkgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZmZpLmMgKGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWKSBIYW5kbGUgc3RydWN0CisJcGFzc2luZyBjb3JyZWN0bHkuCisKKzIwMDMtMDktMDkgIEFsYW4gTW9kcmEgIDxhbW9kcmFAYmlncG9uZC5uZXQuYXU+CisKKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMy0wOS0wNCAgQW5kcmVhcyBUb2JsZXIgIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBNYWtlZmlsZS5hbTogUmVtb3ZlIGJ1aWxkIHJ1bGVzIGZvciBmZml0ZXN0LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDMtMDktMDQgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL2phdmFfcmF3X2FwaS5jOiBJbmNsdWRlIDxzdGRsaWIuaD4gdG8gZml4IGNvbXBpbGVyIHdhcm5pbmcKKwlhYm91dCBpbXBsaWNpdCBkZWNsYXJhdGlvbiBvZiBhYm9ydCgpLgorCisyMDAzLTA5LTA0ICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgZGVqYWdudSB0ZXN0IGZyYW1ld29yay4gRml4ZXMgUFIgb3RoZXIvMTE0MTEuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogQWRkIGRlamFnbnUgdGVzdCBmcmFtZXdvcmsuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKwkqIHRlc3RzdWl0ZS9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCisJKiB0ZXN0c3VpdGUvTWFrZWZpbGUuaW46IEJ1aWx0CisJKiB0ZXN0c3VpdGUvbGliL2xpYmZmaS1kZy5leHA6IE5ldyBmaWxlLgorCSogdGVzdHN1aXRlL2NvbmZpZy9kZWZhdWx0LmV4cDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHA6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaDogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzFfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzRfMWJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzJieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzNieXRlMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzVieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfN2J5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzhieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18xMmJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzXzE2Ynl0ZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfMjBieXRlLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc18yNGJ5dGUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZmxvYXQuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VjaGFyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191bG9uZ2xvbmcuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VzaG9ydC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdC5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9mbG9hdDEuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmxvYXQyLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3B5b2JqYy10Yy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9ibGVtMS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9wcm9tb3Rpb24uYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvcmV0dXJuX2xsLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3JldHVybl9zYy5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9yZXR1cm5fdWMuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q0LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q3LmM6IExpa2V3aXNlLgorCSogdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDguYzogTGlrZXdpc2UuCisJKiB0ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cDogTmV3IGZpbGUuCisJKiB0ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oOiBMaWtld2lzZS4KKwkqIHRlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0LmNjOiBMaWtld2lzZS4KKworCisyMDAzLTA4LTEzICBLYXogS29qaW1hICA8a2tvamltYUBnY2MuZ251Lm9yZz4KKworCSogc3JjL3NoL2ZmaS5jIChPRlNfSU5UMTYpOiBTZXQgMCBmb3IgbGl0dGxlIGVuZGlhbiBjYXNlLiAgVXBkYXRlCisJY29weXJpZ2h0IHllYXJzLgorCisyMDAzLTA4LTAyICBBbGFuIE1vZHJhICA8YW1vZHJhQGJpZ3BvbmQubmV0LmF1PgorCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJnczY0KTogTW9kaWZ5IGZvciBjaGFuZ2VkIGdjYworCXN0cnVjdHVyZSBwYXNzaW5nLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NCk6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NC5TOiBSZW1vdmUgY29kZSB3cml0aW5nIHRvIHBhcm0gc2F2ZSBhcmVhLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgKGZmaV9jbG9zdXJlX0xJTlVYNjQpOiBVc2UgcmV0dXJuCisJYWRkcmVzcyBpbiBsciBmcm9tIGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0IGNhbGwgdG8gY2FsY3VsYXRlCisJdGFibGUgYWRkcmVzcy4gIE9wdGltaXplIGZ1bmN0aW9uIHRhaWwuCisKKzIwMDMtMDctMjggIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3NwYXJjL2ZmaS5jOiBIYW5kbGUgYWxsIGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycy4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4gRml4ZXMgc2Vjb25kIHBhcnQgb2YgUFIgdGFyZ2V0LzExNDEwLgorCisyMDAzLTA3LTExICBHZXJhbGQgUGZlaWZlciAgPHBmZWlmZXJAZGJhaS50dXdpZW4uYWMuYXQ+CisKKwkqIFJFQURNRTogTm90ZSB0aGF0IGxpYmZmaSBpcyBub3QgcGFydCBvZiBHQ0MuICBVcGRhdGUgdGhlIHByb2plY3QKKwlVUkwgYW5kIHN0YXR1cy4KKworMjAwMy0wNi0xOSAgRnJhbnogU2lybCAgPEZyYW56LlNpcmwta2VybmVsQGxhdXRlcmJhY2guY29tPgorCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBJbmNsdWRlIGZmaS5oLgorCisyMDAzLTA2LTEzICBSYWluZXIgT3J0aCAgPHJvQFRlY2hGYWsuVW5pLUJpZWxlZmVsZC5ERT4KKworCSogc3JjL3g4Ni9zeXN2LlM6IEF2b2lkIGdhcy1vbmx5IC51bGViMTI4Ly5zbGViMTI4IGRpcmVjdGl2ZXMuCisJVXNlIEMgc3R5bGUgY29tbWVudHMuCisKKzIwMDMtMDYtMTMgIEtheiBLb2ppbWEgIDxra29qaW1hQHJyLmlpajR1Lm9yLmpwPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIFNIbWVkaWEgc3VwcG9ydC4gIEZpeCBhIHR5cG8gb2YgU0ggc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlLmluIChzaDY0LSotbGludXgqLCBzaDUqLSotbGludXgqKTogQWRkIHRhcmdldC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCBTSG1lZGlhIHN1cHBvcnQuCisJKiBzcmMvc2g2NC9mZmkuYzogTmV3IGZpbGUuCisJKiBzcmMvc2g2NC9zeXN2LlM6IE5ldyBmaWxlLgorCisyMDAzLTA1LTE2ICBKYWt1YiBKZWxpbmVrICA8amFrdWJAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluIChIQVZFX1JPX0VIX0ZSQU1FKTogQ2hlY2sgd2hldGhlciAuZWhfZnJhbWUgc2VjdGlvbgorCXNob3VsZCBiZSByZWFkLW9ubHkuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBmZmljb25maWcuaC5pbjogUmVidWlsdC4KKwkqIGluY2x1ZGUvZmZpLmguaW4gKEVIX0ZSQU1FX0ZMQUdTKTogRGVmaW5lLgorCSogc3JjL2FscGhhL29zZi5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IExpa2V3aXNlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IExpa2V3aXNlLiAgSW5jbHVkZSBmZmkuaC4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLiAgVXNlIHBjcmVsIGVuY29kaW5nCisJaWYgLWZwaWMvLWZQSUMvLW1yZWxvY2F0YWJsZS4KKwkqIHNyYy9wb3dlcnBjL3Bvd2VycGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKwkqIHNyYy9zcGFyYy92OC5TOiBJZiBIQVZFX1JPX0VIX0ZSQU1FIGlzIGRlZmluZWQsIGRvbid0IGluY2x1ZGUKKwkjd3JpdGUgaW4gLmVoX2ZyYW1lIGZsYWdzLgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCSogc3JjL3g4Ni91bml4NjQuUzogVXNlIEVIX0ZSQU1FX0ZMQUdTLgorCSogc3JjL3g4Ni9zeXN2LlM6IExpa2V3aXNlLiAgVXNlIHBjcmVsIGVuY29kaW5nIGlmIC1mcGljLy1mUElDLgorCSogc3JjL3MzOTAvc3lzdi5TOiBVc2UgRUhfRlJBTUVfRkxBR1MuICBJbmNsdWRlIGZmaS5oLgorCisyMDAzLTA1LTA3ICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisKKwlGaXhlcyBQUiBib290c3RyYXAvMTA2NTYKKwkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9BU19SRUdJU1RFUl9QU0VVRE9fT1ApOiBUZXN0IGFzc2VtYmxlcgorCXN1cHBvcnQgZm9yIC5yZWdpc3RlciBwc2V1ZG8tb3AuCisJKiBzcmMvc3BhcmMvdjguUzogVXNlIGl0LgorCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDMtMDQtMTggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIChQT1dFUlBDNjQpOiBEZWZpbmUgaWYgNjQtYml0LgorCShlbnVtIGZmaV9hYmkpOiBBZGQgRkZJX0xJTlVYNjQgb24gUE9XRVJQQy4KKwlNYWtlIGl0IHRoZSBkZWZhdWx0IG9uIFBPV0VSUEM2NC4KKwkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IERlZmluZSB0byAyNCBvbiBQT1dFUlBDNjQuCisJKiBjb25maWd1cmUuaW46IENoYW5nZSBwb3dlcnBjLSotbGludXgqIGludG8gcG93ZXJwYyotKi1saW51eCouCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoaGlkZGVuKTogRGVmaW5lLgorCShmZmlfcHJlcF9hcmdzX1NZU1YpOiBSZW5hbWVkIGZyb20KKwlmZmlfcHJlcF9hcmdzLiAgQ2FzdCBwb2ludGVycyB0byB1bnNpZ25lZCBsb25nIHRvIHNodXQgdXAgd2FybmluZ3MuCisJKE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0LCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCwKKwlBU01fTkVFRFNfUkVHSVNURVJTNjQpOiBOZXcuCisJKGZmaV9wcmVwX2FyZ3M2NCk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgRkZJX0xJTlVYNjQgQUJJLgorCShmZmlfY2FsbCk6IExpa2V3aXNlLgorCShmZmlfcHJlcF9jbG9zdXJlKTogTGlrZXdpc2UuCisJKGZsdXNoX2ljYWNoZSk6IFN1cnJvdW5kIGJ5ICNpZm5kZWYgUE9XRVJQQzY0LgorCShmZmlfZGJsZmwpOiBOZXcgdW5pb24gdHlwZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBVc2UgaXQgdG8gYXZvaWQgYWxpYXNpbmcgcHJvYmxlbXMuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0KTogTmV3IGZ1bmN0aW9uLgorCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogU3Vycm91bmQgd2hvbGUgZmlsZSBieSAjaWZuZGVmCisJX19wb3dlcnBjNjRfXy4KKwkqIHNyYy9wb3dlcnBjL3N5c3YuUzogTGlrZXdpc2UuCisJKGZmaV9jYWxsX1NZU1YpOiBSZW5hbWUgZmZpX3ByZXBfYXJncyB0byBmZmlfcHJlcF9hcmdzX1NZU1YuCisJKiBzcmMvcG93ZXJwYy9saW51eDY0LlM6IE5ldyBmaWxlLgorCSogc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlM6IE5ldyBmaWxlLgorCSogTWFrZWZpbGUuYW0gKEVYVFJBX0RJU1QpOiBBZGQgc3JjL3Bvd2VycGMvbGludXg2NC5TIGFuZAorCXNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TLgorCShUQVJHRVRfU1JDX1BPV0VSUEMpOiBMaWtld2lzZS4KKworCSogc3JjL2ZmaXRlc3QuYyAoY2xvc3VyZV90ZXN0X2ZuLCBjbG9zdXJlX3Rlc3RfZm4xLCBjbG9zdXJlX3Rlc3RfZm4yLAorCWNsb3N1cmVfdGVzdF9mbjMpOiBGaXggcmVzdWx0IHByaW50aW5nIG9uIGJpZy1lbmRpYW4gNjQtYml0CisJbWFjaGluZXMuCisJKG1haW4pOiBQcmludCB0c3QyX2FyZyBpbnN0ZWFkIG9mIHVuaW5pdGlhbGl6ZWQgdHN0Ml9yZXN1bHQuCisKKwkqIHNyYy9mZml0ZXN0LmMgKG1haW4pOiBIaWRlIHdoYXQgY2xvc3VyZSBwb2ludGVyIHJlYWxseSBwb2ludHMgdG8KKwlmcm9tIHRoZSBjb21waWxlci4KKworMjAwMy0wNC0xNiAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoYXJtLSotbmV0YnNkZWxmKik6IEFkZCBjb25maWd1cmF0aW9uLgorCShjb25maWd1cmUpOiBSZWdlbmVyYXRlZC4KKworMjAwMy0wNC0wNCAgTG9yZW4gSi4gUml0dGxlICA8bGpyaXR0bGVAYWNtLm9yZz4KKworCSogaW5jbHVkZS9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKworMjAwMy0wMy0yMSAgWmRlbmVrIER2b3JhayAgPHJha2R2ZXJAYXRyZXkua2FybGluLm1mZi5jdW5pLmN6PgorCisJKiBsaWJmZmkvaW5jbHVkZS9mZmkuaC5pbjogRGVmaW5lIFg4NiBpbnN0ZWFkIG9mIFg4Nl82NCBpbiAzMgorCWJpdCBtb2RlLgorCSogbGliZmZpL3NyYy94ODYvZmZpLmMgKGZmaV9jbG9zdXJlX1NZU1YsIGZmaV9jbG9zdXJlX3Jhd19TWVNWKToKKwlSZWNlaXZlIGNsb3N1cmUgcG9pbnRlciB0aHJvdWdoIHBhcmFtZXRlciwgcmVhZCBhcmdzIHVzaW5nCisJX19idWlsdGluX2R3YXJmX2NmYS4KKwkoRkZJX0lOSVRfVFJBTVBPTElORSk6IFNlbmQgY2xvc3VyZSByZWZlcmVuY2UgdGhyb3VnaCBlYXguCisKKzIwMDMtMDMtMTIgIEFuZHJlYXMgU2Nod2FiICA8c2Nod2FiQHN1c2UuZGU+CisKKwkqIGNvbmZpZ3VyZS5pbjogQXZvaWQgdHJhaWxpbmcgLy4gaW4gdG9vbGV4ZWNsaWJkaXIuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDMtMDMtMDMgIEFuZHJlYXMgVG9ibGVyIDxhLnRvYmxlckBzY2h3ZWl6LmNoPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBSZWNvZGUgdG8gZml0IGR5bmFtaWMgbGlicmFyaWVzLgorCisyMDAzLTAyLTA2ICBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6CisJRml4IGFsaWduZW1lbnQgYnVnLCBhbGxvY2F0ZSA4IGJ5dGVzIGZvciB0aGUgcmVzdWx0LgorCSogbGliZmZpL3NyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlM6CisJTGlrZXdpc2UuCisJKiBsaWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOgorCVVwZGF0ZSBzdGFja2ZyYW1lIGRlc2NyaXB0aW9uIGZvciBhaXgvZGFyd2luX2Nsb3N1cmUuUy4KKworMjAwMy0wMi0wNiAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IEFkZCBoaWRkZW4gdmlzaWJpbGl0eQorCWF0dHJpYnV0ZS4KKworMjAwMy0wMS0zMSAgQ2hyaXN0aWFuIENvcm5lbHNzZW4gIDxjY29ybkBjcy50dS1iZXJsaW4uZGU+LAorCSAgICBBbmRyZWFzIFNjaHdhYiAgPHNjaHdhYkBzdXNlLmRlPgorCisJKiBjb25maWd1cmUuaW46IEFkanVzdCBjb21tYW5kIHRvIHNvdXJjZSBjb25maWctbWwuaW4gdG8gYWNjb3VudAorCWZvciBjaGFuZ2VzIHRvIHRoZSBsaWJmZmlfYmFzZWRpciBkZWZpbml0aW9uLgorCShsaWJmZmlfYmFzZWRpcik6IFJlbW92ZSAke3NyY2Rpcn0gZnJvbSB2YWx1ZSBhbmQgaW5jbHVkZSB0cmFpbGluZworCXNsYXNoIGlmIG5vbmVtcHR5LgorCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDMtMDEtMjkgIEZyYW56IFNpcmwgIDxGcmFuei5TaXJsLWtlcm5lbEBsYXV0ZXJiYWNoLmNvbT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogUmVjb2RlIHRvIGZpdCBzaGFyZWQgbGlicy4KKworMjAwMy0wMS0yOCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEVuYWJsZSBGRklfQ0xPU1VSRVMgZm9yIHg4Nl82NC4KKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfY2xvc3VyZSk6IE5ldy4KKwkoZmZpX2Nsb3N1cmVfVU5JWDY0X2lubmVyKTogTmV3LgorCSogc3JjL3g4Ni91bml4NjQuUyAoZmZpX2Nsb3N1cmVfVU5JWDY0KTogTmV3LgorCisyMDAzLTAxLTI3ICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluICh0b29sZXhlY2RpciwgdG9vbGV4ZWNsaWJkaXIpOiBTZXQgYW5kIEFDX1NVQlNULgorCVJlbW92ZSBVU0VfTElCRElSIGNvbmRpdGlvbmFsLgorCSogTWFrZWZpbGUuYW0gKHRvb2xleGVjZGlyLCB0b29sZXhlY2xpYmRpcik6IERvbid0IG92ZXJyaWRlLgorCSogTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMy0wMTAyNyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19QT1dFUlBDX0FJWCk6IEZpeCB0eXBvLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisKKzIwMDMtMDEtMjIgIEFuZHJldyBIYWxleSAgPGFwaEByZWRoYXQuY29tPgorCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUyAoX2ZmaV9jYWxsX0FJWCk6IEFkZCBBdWdtZW50YXRpb24gc2l6ZSB0bworCXVud2luZCBpbmZvLgorCisyMDAzLTAxLTIxICBBbmRyZWFzIFRvYmxlciAgPGEudG9ibGVyQHNjaHdlaXouY2g+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TOiBBZGQgdW53aW5kIGluZm8uCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwMy0wMS0xNCAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy94ODYvZmZpNjQuYyAoZmZpX3ByZXBfYXJncyk6IENoZWNrIGZvciB2b2lkIHJldHZhbC4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBMaWtld2lzZS4KKwkqIHNyYy94ODYvdW5peDY0LlM6IEFkZCB1bndpbmQgaW5mby4KKworMjAwMy0wMS0xNCAgQW5kcmVhcyBKYWVnZXIgIDxhakBzdXNlLmRlPgorCisJKiBzcmMvZmZpdGVzdC5jIChtYWluKTogT25seSB1c2UgZmZpX2Nsb3N1cmVzIGlmIHRob3NlIGFyZQorCXN1cHBvcnRlZC4KKworMjAwMy0wMS0xMyBBbmRyZWFzIFRvYmxlciA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogbGliZmZpL3NyYy9mZml0ZXN0LmMKKwkgYWRkIGNsb3N1cmUgdGVzdGNhc2VzCisKKzIwMDMtMDEtMTMgS2V2aW4gQi4gSGVuZHJpY2tzIDxraGVuZHJpY2tzQGl2ZXkudXdvLmNhPgorCisJKiBsaWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMKKwkgZml4IGFsaWdubWVudCBidWcgZm9yIGZsb2F0ICg0IGJ5dGUgYWxpZ25lZCBpc28gOCBieXRlKQorCisyMDAzLTAxLTA5ICBHZW9mZnJleSBLZWF0aW5nICA8Z2VvZmZrQGFwcGxlLmNvbT4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jOiBSZW1vdmUgUkNTIHZlcnNpb24gc3RyaW5nLgorCSogc3JjL3Bvd2VycGMvZGFyd2luLlM6IFJlbW92ZSBSQ1MgdmVyc2lvbiBzdHJpbmcuCisKKzIwMDMtMDEtMDMgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIGNsb3N1cmUgZGVmaW5lcyBmb3IgU1BBUkMsIFNQQVJDNjQuCisJKiBzcmMvZmZpdGVzdC5jIChtYWluKTogVXNlIHN0YXRpYyBzdG9yYWdlIGZvciBjbG9zdXJlLgorCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9jbG9zdXJlLCBmZmlfY2xvc3VyZV9zcGFyY19pbm5lcik6IE5ldy4KKwkqIHNyYy9zcGFyYy92OC5TIChmZmlfY2xvc3VyZV92OCk6IE5ldy4KKwkqIHNyYy9zcGFyYy92OS5TIChmZmlfY2xvc3VyZV92OSk6IE5ldy4KKworMjAwMi0xMS0xMCAgUmFuaml0IE1hdGhldyA8cm1hdGhld0Bob3RtYWlsLmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkZWQgRkZJX1NURENBTEwgZmZpX3R5cGUKKwkgIGVudW1lcmF0aW9uIGZvciBYODZfV0lOMzIuCisJKiBzcmMveDg2L3dpbjMyLlM6IEFkZGVkIGZmaV9jYWxsX1NURENBTEwgZnVuY3Rpb24KKwkgIGRlZmluaXRpb24uCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2FsbC9mZmlfcmF3X2NhbGwpOiBBZGRlZAorCSAgc3dpdGNoIGNhc2VzIGZvciByZWNvZ25pc2luZyBGRklfU1REQ0FMTCBhbmQKKwkgIGNhbGxpbmcgZmZpX2NhbGxfU1REQ0FMTCBpZiB0YXJnZXQgaXMgWDg2X1dJTjMyLgorCSogc3JjL2ZmaXRlc3QuYyAobXlfc3RkY2FsbF9zdHJsZW4vc3RkY2FsbF9tYW55KToKKwkgIHN0ZGNhbGwgdmVyc2lvbnMgb2YgdGhlICJteV9zdHJsZW4iIGFuZCAibWFueSIKKwkgIHRlc3QgZnVuY3Rpb25zIChmb3IgWDg2X1dJTjMyKS4KKwkgIEFkZGVkIHRlc3QgY2FzZXMgdG8gdGVzdCBzdGRjYWxsIGludm9jYXRpb24gdXNpbmcKKwkgIHRoZXNlIGZ1bmN0aW9ucy4KKworMjAwMi0xMi0wMiAgS2F6IEtvamltYSAgPGtrb2ppbWFAZ2NjLmdudS5vcmc+CisKKwkqIHNyYy9zaC9zeXN2LlM6IEFkZCBEV0FSRjIgdW53aW5kIGluZm8uCisKKzIwMDItMTEtMjcgIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL3MzOTAvc3lzdi5TICguZWhfZnJhbWUgc2VjdGlvbik6IE1ha2Ugc2VjdGlvbiByZWFkLW9ubHkuCisKKzIwMDItMTEtMjYgIEppbSBXaWxzb24gIDx3aWxzb25AcmVkaGF0LmNvbT4KKworCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBIYXMgc2l6ZSA4IG9uIElBNjQuCisKKzIwMDItMTEtMjMgIEguSi4gTHUgPGhqbEBnbnUub3JnPgorCisJKiBhY2luY2x1ZGUubTQ6IEFkZCBkdW1teSBBTV9QUk9HX0xJQlRPT0wuCisJSW5jbHVkZSAuLi9jb25maWcvYWNjcm9zcy5tNC4KKwkqIGFjbG9jYWwubTQ7IFJlYnVpbGQuCisJKiBjb25maWd1cmU6IExpa2V3aXNlLgorCisyMDAyLTExLTE1ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHNyYy9zMzkwL3N5c3YuUyAoLmVoX2ZyYW1lIHNlY3Rpb24pOiBBZGFwdCB0byBwY3JlbCBGREUgZW5jb2RpbmcuCisKKzIwMDItMTEtMTEgIERKIERlbG9yaWUgIDxkakByZWRoYXQuY29tPgorCisJKiBjb25maWd1cmUuaW46IExvb2sgZm9yIGNvbW1vbiBmaWxlcyBpbiB0aGUgcmlnaHQgcGxhY2UuCisKKzIwMDItMTAtMDggIFVscmljaCBXZWlnYW5kICA8dXdlaWdhbmRAZGUuaWJtLmNvbT4KKworCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfdG9fcHRyYXJyYXkpOiBJbnRlcnByZXQKKwlyYXcgZGF0YSBhcyBfSnZfd29yZCB2YWx1ZXMsIG5vdCBmZmlfcmF3LgorCShmZmlfamF2YV9wdHJhcnJheV90b19yYXcpOiBMaWtld2lzZS4KKwkoZmZpX2phdmFfcnZhbHVlX3RvX3Jhdyk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX2phdmFfcmF3X2NhbGwpOiBDYWxsIGl0LgorCShmZmlfamF2YV9yYXdfdG9fcnZhbHVlKTogTmV3IGZ1bmN0aW9uLgorCShmZmlfamF2YV90cmFuc2xhdGVfYXJncyk6IENhbGwgaXQuCisJKiBzcmMvZmZpdGVzdC5jIChjbG9zdXJlX3Rlc3RfZm4pOiBJbnRlcnByZXQgcmV0dXJuIHZhbHVlCisJYXMgZmZpX2FyZywgbm90IGludC4KKwkqIHNyYy9zMzkwL2ZmaS5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IEFkZCBtaXNzaW5nCisJRkZJX1RZUEVfUE9JTlRFUiBjYXNlLgorCShmZmlfY2xvc3VyZV9oZWxwZXJfU1lTVik6IExpa2V3aXNlLiAgQWxzbywgYXNzdW1lIHJldHVybgorCXZhbHVlcyBleHRlbmRlZCB0byB3b3JkIHNpemUuCisKKzIwMDItMTAtMDIgIEFuZHJlYXMgSmFlZ2VyICA8YWpAc3VzZS5kZT4KKworCSogc3JjL3g4Ni9mZmk2NC5jIChmZmlfcHJlcF9jaWZfbWFjaGRlcCk6IFJlbW92ZSBkZWJ1ZyBvdXRwdXQuCisKKzIwMDItMTAtMDEgIEJvIFRob3JzZW4gIDxib0BzbWV0YW5hLnN1c2UuZGU+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEZpeCBpMzg2IHdpbjMyIGNvbXBpbGF0aW9uLgorCisyMDAyLTA5LTMwICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkIHMzOTB4LSotbGludXgtKiB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBEZWZpbmUgUzM5MFggZm9yIHMzOTB4IHRhcmdldHMuCisJKEZGSV9DTE9TVVJFUyk6IERlZmluZSBmb3IgczM5MC9zMzkweC4KKwkoRkZJX1RSQU1QT0xJTkVfU0laRSk6IExpa2V3aXNlLgorCShGRklfTkFUSVZFX1JBV19BUEkpOiBMaWtld2lzZS4KKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBEbyBub3QgY29tcHV0ZSBzdGFjayBzcGFjZSBmb3IgczM5MC4KKwkqIHNyYy90eXBlcy5jIChGRklfVFlQRV9QT0lOVEVSKTogVXNlIDgtYnl0ZSBwb2ludGVycyBvbiBzMzkweC4KKwkqIHNyYy9zMzkwL2ZmaS5jOiBNYWpvciByZXdvcmsgb2YgZXhpc3RpbmcgY29kZS4gIEFkZCBzdXBwb3J0IGZvcgorCXMzOTB4IHRhcmdldHMuICBBZGQgY2xvc3VyZSBzdXBwb3J0LgorCSogc3JjL3MzOTAvc3lzdi5TOiBMaWtld2lzZS4KKworMjAwMi0wOS0yOSAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CisKKwkqIHNyYy9hcm0vc3lzdi5TOiBGaXggdHlwby4KKworMjAwMi0wOS0yOCAgUmljaGFyZCBFYXJuc2hhdyAgPHJlYXJuc2hhQGFybS5jb20+CisKKwkqIHNyYy9hcm0vc3lzdi5TOiBJZiB3ZSBkb24ndCBoYXZlIG1hY2hpbmUvYXNtLmggYW5kIHRoZSBwcmUtcHJvY2Vzc29yCisJaGFzIGRlZmluZWQgX19VU0VSX0xBQkVMX1BSRUZJWF9fLCB0aGVuIHVzZSBpdCBpbiBDTkFNRS4KKwkoZmZpX2NhbGxfU1lTVik6IEhhbmRsZSBzb2Z0LWZsb2F0LgorCisyMDAyLTA5LTI3ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogRml4IG11bHRpbGliIHg4Ni02NCBzdXBwb3J0LgorCisyMDAyLTA5LTIyICBLYXZlaCBSLiBHaGF6aSAgPGdoYXppQGNhaXAucnV0Z2Vycy5lZHU+CisKKwkqIE1ha2VmaWxlLmFtIChhbGwtbXVsdGkpOiBGaXggbXVsdGlsaWIgcGFyYWxsZWwgYnVpbGQuCisKKzIwMDItMDctMTkgIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBjb25maWd1cmUuaW4gKHNoWzM0XSotKi1saW51eCopOiBBZGQgYnJhY2tldHMuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDItMDctMTggIEtheiBLb2ppbWEgIDxra29qaW1hQGdjYy5nbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbTogQWRkIFNIIHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZS5pbiAoc2gtKi1saW51eCosIHNoWzM0XSotKi1saW51eCopOiBBZGQgdGFyZ2V0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIFNIIHN1cHBvcnQuCisJKiBzcmMvc2gvZmZpLmM6IE5ldyBmaWxlLgorCSogc3JjL3NoL3N5c3YuUzogTmV3IGZpbGUuCisJKiBzcmMvdHlwZXMuYzogQWRkIFNIIHN1cHBvcnQuCisKKzIwMDItMDctMTYgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBzcmMveDg2L2ZmaTY0LmM6IE5ldyBmaWxlIHRoYXQgYWRkcyB4ODYtNjQgc3VwcG9ydC4KKwkqIHNyYy94ODYvdW5peDY0LlM6IE5ldyBmaWxlIHRoYXQgaGFuZGxlcyBhcmd1bWVudCBzZXR1cCBmb3IKKwl4ODYtNjQuCisJKiBzcmMveDg2L3N5c3YuUzogRG9uJ3QgdXNlIHRoaXMgb24geDg2LTY0LgorCSogc3JjL3g4Ni9mZmkuYzogRG9uJ3QgdXNlIHRoaXMgb24geDg2LTY0LgorCVJlbW92ZSB1bnVzZWQgdmFycy4KKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBEb24ndCBkbyBzdGFjayBzaXplIGNhbGN1bGF0aW9uCisJZm9yIHg4Ni02NC4KKwkqIHNyYy9mZml0ZXN0LmMgKHN0cnVjdDYpOiBOZXcgdGVzdCB0aGF0IHRlc3RzIGEgc3BlY2lhbCBjYXNlIGluCisJdGhlIHg4Ni02NCBBQkkuCisJKHN0cnVjdDcpOiBMaWtld2lzZS4KKwkoc3RydWN0OCk6IExpa2V3aXNlLgorCShzdHJ1Y3Q5KTogTGlrZXdpc2UuCisJKGNsb3N1cmVfdGVzdF9mbik6IFNpbGVuY2Ugd2FybmluZyBhYm91dCB0aGlzIHdoZW4gaXQncyBub3QgdXNlZC4KKwkobWFpbik6IEFkZCB0aGUgbmV3IHRlc3RzLgorCShtYWluKTogRml4IGEgY291cGxlIG9mIHdyb25nIGNhc3RzIGFuZCBzaWxlbmNlIHNvbWUgY29tcGlsZXIgd2FybmluZ3MuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgeDg2LTY0IEFCSSBkZWZpbml0aW9uLgorCSogZmZpY29uZmlnLmguaW46IFJlZ2VuZXJhdGUuCisJKiBNYWtlZmlsZS5hbTogQWRkIHg4Ni02NCBzdXBwb3J0LgorCSogY29uZmlndXJlLmluOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlLgorCSogY29uZmlndXJlOiBMaWtld2lzZS4KKworMjAwMi0wNi0yNCAgQm8gVGhvcnNlbiAgPGJvQHN1c2UuZGU+CisKKwkqIHNyYy90eXBlcy5jOiBNZXJnZSBzZXR0aW5ncyBmb3Igc2ltaWxhciBhcmNoaXRlY3R1cmVzLgorCUFkZCB4ODYtNjQgc2l6ZXMgYW5kIGFsaWdubWVudHMuCisKKzIwMDItMDYtMjMgIEJvIFRob3JzZW4gIDxib0BzdXNlLmRlPgorCisJKiBzcmMvYXJtL2ZmaS5jIChmZmlfcHJlcF9hcmdzKTogUmVtb3ZlIHVudXNlZCB2YXJzLgorCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3Y4KTogTGlrZXdpc2UuCisJKiBzcmMvbWlwcy9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IExpa2V3aXNlLgorCSogc3JjL202OGsvZmZpLmMgKGZmaV9wcmVwX2FyZ3MpOiBMaWtld2lzZS4KKworMjAwMi0wNy0xOCAgSC5KLiBMdSAgKGhqbEBnbnUub3JnKQorCisJKiBNYWtlZmlsZS5hbSAoVEFSR0VUX1NSQ19NSVBTX0xJTlVYKTogTmV3LgorCShsaWJmZmlfbGFfU09VUkNFUyk6IFN1cHBvcnQgTUlQU19MSU5VWC4KKwkobGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMpOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWdlbmVyYXRlZC4KKworCSogY29uZmlndXJlLmluIChtaXBzNjQqLSopOiBTa2lwLgorCShtaXBzKi0qLWxpbnV4Kik6IE5ldy4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZWQuCisKKwkqIHNyYy9taXBzL2ZmaS5jOiBJbmNsdWRlIDxzZ2lkZWZzLmg+LgorCisyMDAyLTA2LTA2ICBVbHJpY2ggV2VpZ2FuZCAgPHV3ZWlnYW5kQGRlLmlibS5jb20+CisKKwkqIHNyYy9zMzkwL3N5c3YuUzogU2F2ZS9yZXN0b3JlICVyNi4gIEFkZCBEV0FSRi0yIHVud2luZCBpbmZvLgorCisyMDAyLTA1LTI3ICBSb2dlciBTYXlsZSAgPHJvZ2VyQGV5ZXNvcGVuLmNvbT4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlbW92ZSByZWZlcmVuY2UgdG8gYXZuLgorCisyMDAyLTA1LTI3ICBCbyBUaG9yc2VuICA8Ym9Ac3VzZS5kZT4KKworCSogc3JjL3g4Ni9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgYW5kCisJZml4IGZvcm1hdHRpbmcuCisKKzIwMDItMDUtMTMgIEFuZHJlYXMgVG9ibGVyICA8YS50b2JsZXJAc2Nod2Vpei5jaD4KKworCSogc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIChmZmlfcHJlcF9jbG9zdXJlKTogRGVjbGFyZSBmZCBhdAorCWJlZ2lubmluZyBvZiBmdW5jdGlvbiAoZm9yIG9sZGVyIGFwcGxlIGNjKS4KKworMjAwMi0wNS0wOCAgQWxleGFuZHJlIE9saXZhICA8YW9saXZhQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoT1JJR0lOQUxfTERfRk9SX01VTFRJTElCUyk6IFByZXNlcnZlIExEIGF0CisJc2NyaXB0IGVudHJ5LCBhbmQgc2V0IExEIHRvIGl0IHdoZW4gY29uZmlndXJpbmcgbXVsdGlsaWJzLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAyLTA1LTA1ICBKYXNvbiBUaG9ycGUgIDx0aG9ycGVqQHdhc2FiaXN5c3RlbXMuY29tPgorCisJKiBjb25maWd1cmUuaW4gKHNwYXJjNjQtKi1uZXRic2QqKTogQWRkIHRhcmdldC4KKwkoc3BhcmMtKi1uZXRic2RlbGYqKTogTGlrZXdpc2UuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDItMDQtMjggIERhdmlkIFMuIE1pbGxlciAgPGRhdmVtQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlOiBGaXggU1BBUkMgdGVzdCBpbiBwcmV2aW91cyBjaGFuZ2UuCisKKzIwMDItMDQtMjkgIEdlcmhhcmQgVG9ubiAgPEdlcmhhcmRUb25uQHN3b2wuZGU+CisKKwkqIE1ha2VmaWxlLmFtOiBBZGQgTGludXggZm9yIFMvMzkwIHN1cHBvcnQuCisJKiBNYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KKwkqIGNvbmZpZ3VyZS5pbjogQWRkIExpbnV4IGZvciBTLzM5MCBzdXBwb3J0LgorCSogY29uZmlndXJlOiBSZWdlbmVyYXRlLgorCSogaW5jbHVkZS9mZmkuaC5pbjogQWRkIExpbnV4IGZvciBTLzM5MCBzdXBwb3J0LgorCSogc3JjL3MzOTAvZmZpLmM6IE5ldyBmaWxlIGZyb20gbGliZmZpIENWUyB0cmVlLgorCSogc3JjL3MzOTAvc3lzdi5TOiBOZXcgZmlsZSBmcm9tIGxpYmZmaSBDVlMgdHJlZS4KKworMjAwMi0wNC0yOCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoSEFWRV9BU19TUEFSQ19VQV9QQ1JFTCk6IENoZWNrIGZvciB3b3JraW5nCisJJXJfZGlzcDMyKCkuCisJKiBzcmMvc3BhcmMvdjguUzogVXNlIGl0LgorCSogc3JjL3NwYXJjL3Y5LlM6IExpa2V3aXNlLgorCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDItMDQtMDggIEhhbnMgQm9laG0gIDxIYW5zX0JvZWhtQGhwLmNvbT4KKworCSogc3JjL2phdmFfcmF3X2FwaS5jIChmZmlfamF2YV9yYXdfc2l6ZSk6IEhhbmRsZSBGRklfVFlQRV9ET1VCTEUKKwljb3JyZWN0bHkuCisJKiBzcmMvaWE2NC91bml4LlM6IEFkZCB1bndpbmQgaW5mb3JtYXRpb24uIEZpeCBjb21tZW50cy4KKwlTYXZlIHNwIGluIGEgd2F5IHRoYXQncyBjb21wYXRpYmxlIHdpdGggdW53aW5kIGluZm8uCisJKGZmaV9jYWxsX3VuaXgpOiBDb3JyZWN0bHkgcmVzdG9yZSBzcCBpbiBhbGwgY2FzZXMuCisJKiBzcmMvaWE2NC9mZmkuYzogQWRkLCBmaXggY29tbWVudHMuCisKKzIwMDItMDQtMDggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBzcmMvc3BhcmMvdjguUzogTWFrZSAuZWhfZnJhbWUgZGVwZW5kZW50IG9uIHRhcmdldCB3b3JkIHNpemUuCisKKzIwMDItMDQtMDYgIEphc29uIFRob3JwZSAgPHRob3JwZWpAd2FzYWJpc3lzdGVtcy5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbiAoYWxwaGEqLSotbmV0YnNkKik6IEFkZCB0YXJnZXQuCisJKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCisKKzIwMDItMDQtMDQgIEplZmYgU3R1cm0gIDxqc3R1cm1Ab25lLXBvaW50LmNvbT4KKworCSogc3JjL3NwYXJjL3Y4LlM6IEFkZCB1bndpbmQgaW5mby4KKwkqIHNyYy9zcGFyYy92OS5TOiBMaWtld2lzZS4KKworMjAwMi0wMy0zMCAgS3Jpc3RlciBXYWxmcmlkc3NvbiAgPGNhdG9AZGYubHRoLnNlPgorCisJKiBjb25maWd1cmUuaW46IEVuYWJsZSBpKjg2LSotbmV0YnNkZWxmKi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMi0wMy0yOSAgRGF2aWQgQmlsbGluZ2h1cnN0IDxEYXZpZC5CaWxsaW5naHVyc3RAcmlvdGludG8uY29tPgorCisJUFIgb3RoZXIvMjYyMAorCSogc3JjL21pcHMvbjMyLnM6IERlbGV0ZQorCSogc3JjL21pcHMvbzMyLnM6IERlbGV0ZQorCisyMDAyLTAzLTIxICBMb3JlbiBKLiBSaXR0bGUgIDxsanJpdHRsZUBhY20ub3JnPgorCisJKiBjb25maWd1cmUuaW46IEVuYWJsZSBhbHBoYSotKi1mcmVlYnNkKi4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMi0wMy0xNyAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUB3YWl0YWtpLm90YWdvLmFjLm56PgorCisJKiBNYWtlZmlsZS5hbTogbGliZmZpY29udmVuaWVuY2UgLT4gbGliZmZpX2NvbnZlbmllbmNlLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIE1ha2VmaWxlLmFtOiBEZWZpbmUgZmZpdGVzdF9PQkpFQ1RTLgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDItMDMtMDcgIEFuZHJlYXMgVG9ibGVyICA8dG9hQHBvcC5hZ3JpLmNoPgorCSAgICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkIERhcndpbiBhbmQgQUlYIGNsb3N1cmUgZmlsZXMuCisJKFRBUkdFVF9TUkNfUE9XRVJQQ19BSVgpOiBBZGQgYWl4X2Nsb3N1cmUuUy4KKwkoVEFSR0VUX1NSQ19QT1dFUlBDX0RBUldJTik6IEFkZCBkYXJ3aW5fY2xvc3VyZS5TLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgQUlYIGFuZCBEYXJ3aW4gY2xvc3VyZSBkZWZpbml0aW9ucy4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3ByZXBfY2xvc3VyZSk6IE5ldyBmdW5jdGlvbi4KKwkoZmx1c2hfaWNhY2hlLCBmbHVzaF9yYW5nZSk6IE5ldyBmdW5jdGlvbnMuCisJKGZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4pOiBOZXcgZnVuY3Rpb24uCisJKiBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlM6IE5ldyBmaWxlLgorCisyMDAyLTAyLTI0ICBKZWZmIFN0dXJtICA8anN0dXJtQG9uZS1wb2ludC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IEFkZCB0eXBlZGVmIGZvciBmZmlfYXJnLgorCSogc3JjL2ZmaXRlc3QuYyAobWFpbik6IERlY2xhcmUgcmludCB3aXRoIGZmaV9hcmcuCisKKzIwMDItMDItMjEgIEFuZHJlYXMgVG9ibGVyICA8dG9hQHBvcC5hZ3JpLmNoPgorCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMgKGZmaV9wcmVwX2FyZ3MpOiBTa2lwIGFwcHJvcHJpYXRlCisJbnVtYmVyIG9mIEdQUnMgZm9yIGZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cy4KKworMjAwMi0wMS0zMSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQHJlZGhhdC5jb20+CisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbjogUmVwbGFjZSBDSEVDS19TSVpFT0YgYW5kIGVuZGlhbiB0ZXN0cyB3aXRoCisJY3Jvc3MtY29tcGlsZXIgZnJpZW5kbHkgbWFjcm9zLgorCSogYWNsb2NhbC5tNCAoQUNfQ09NUElMRV9DSEVDS19TSVpFT0YsIEFDX0NfQklHRU5ESUFOX0NST1NTKTogTmV3CisJbWFjcm9zLgorCisyMDAyLTAxLTE4ICBEYXZpZCBFZGVsc29obiAgPGVkZWxzb2huQGdudS5vcmc+CisKKwkqIHNyYy9wb3dlcnBjL2Rhcndpbi5TIChfZmZpX2NhbGxfQUlYKTogTmV3LgorCSogc3JjL3Bvd2VycGMvYWl4LlMgKGZmaV9jYWxsX0RBUldJTik6IE5ldy4KKworMjAwMi0wMS0xNyAgRGF2aWQgRWRlbHNvaG4gIDxlZGVsc29obkBnbnUub3JnPgorCisJKiBNYWtlZmlsZS5hbSAoRVhUUkFfRElTVCk6IEFkZCBEYXJ3aW4gYW5kIEFJWCBmaWxlcy4KKwkoVEFSR0VUX1NSQ19QT1dFUlBDX0FJWCk6IE5ldy4KKwkoUE9XRVJQQ19BSVgpOiBOZXcgc3RhbnphLgorCSogTWFrZWZpbGUuaW46IFJlZ2VuZXJhdGUuCisJKiBjb25maWd1cmUuaW46IEFkZCBBSVggY2FzZS4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKwkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV9hYmkpOiBBZGQgRkZJX0FJWC4KKwkqIHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyAoZmZpX3N0YXR1cyk6IFVzZSAibG9uZyIgdG8gc2NhbGUgZnJhbWUKKwlzaXplLiAgRml4ICJsb25nIGRvdWJsZSIgc3VwcG9ydC4KKwkoZmZpX2NhbGwpOiBBZGQgRkZJX0FJWCBjYXNlLgorCSogc3JjL3Bvd2VycGMvYWl4LlM6IE5ldy4KKworMjAwMS0xMC0wOSAgSm9obiBIb3Jua3Zpc3QgIDxqb2huQHRvYXN0ZWRtYXJzaG1hbGxvdy5jb20+CisKKwlJbXBsZW1lbnQgRGFyd2luIFBvd2VyUEMgQUJJLgorCSogY29uZmlndXJlLmluOiBIYW5kbGUgcG93ZXJwYy0qLWRhcndpbiouCisJKiBNYWtlZmlsZS5hbTogU2V0IHNvdXJjZSBmaWxlcyBmb3IgUE9XRVJQQ19EQVJXSU4uCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGluY2x1ZGUvZmZpLmguaW46IERlZmluZSBGRklfREFSV0lOIGFuZCBGRklfREVGQVVMVF9BQkkgZm9yCisJUE9XRVJQQ19EQVJXSU4uCisJKiBzcmMvcG93ZXJwYy9kYXJ3aW4uUzogTmV3IGZpbGUuCisJKiBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmM6IE5ldyBmaWxlLgorCisyMDAxLTEwLTA3ICBKb3NlcGggUy4gTXllcnMgIDxqc20yOEBjYW0uYWMudWs+CisKKwkqIHNyYy94ODYvZmZpLmM6IEZpeCBzcGVsbGluZyBlcnJvciBvZiAic2VwYXJhdGUiIGFzICJzZXBlcmF0ZSIuCisKKzIwMDEtMDctMTYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMveDg2L3N5c3YuUzogQXZvaWQgZ2FzLW9ubHkgLmJhbGlnbiBkaXJlY3RpdmUuCisJVXNlIEMgc3R5bGUgY29tbWVudHMuCisKKzIwMDEtMDctMTYgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBzcmMvYWxwaGEvZmZpLmMgKGZmaV9wcmVwX2Nsb3N1cmUpOiBBdm9pZCBnYXMtb25seSBtbmVtb25pYy4KKwlGaXhlcyBQUiBib290c3RyYXAvMzU2My4KKworMjAwMS0wNi0yNiAgUmFpbmVyIE9ydGggIDxyb0BUZWNoRmFrLlVuaS1CaWVsZWZlbGQuREU+CisKKwkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2Nsb3N1cmVfb3NmKTogVXNlIC5yZGF0YSBmb3IgRUNPRkYuCisKKzIwMDEtMDYtMjUgIFJhaW5lciBPcnRoICA8cm9AVGVjaEZhay5VbmktQmllbGVmZWxkLkRFPgorCisJKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSBzcGFyYyotc3VuLSogaG9zdC4KKwkqIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZS4KKworMjAwMS0wNi0wNiAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hbHBoYS9vc2YuUyAoX19GUkFNRV9CRUdJTl9fKTogQ29uZGl0aW9uYWxpemUgZm9yIEVMRi4KKworMjAwMS0wNi0wMyAgQW5kcmV3IEhhbGV5ICA8YXBoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hbHBoYS9vc2YuUzogQWRkIHVud2luZCBpbmZvLgorCSogc3JjL3Bvd2VycGMvc3lzdi5TOiBBZGQgdW53aW5kIGluZm8uCisJKiBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TOiBMaWtld2lzZS4KKworMjAwMC0wNS0zMSAgSmVmZiBTdHVybSAgPGpzdHVybUBvbmUtcG9pbnQuY29tPgorCisJKiBjb25maWd1cmUuaW46IEZpeCBBQ19BUkdfRU5BQkxFIHVzYWdlLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAxLTA1LTA2ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQHdhaXRha2kub3RhZ28uYWMubno+CisKKwkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIHdhcm5pbmcgYWJvdXQgYmV0YSBjb2RlLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAxLTA0LTI1ICBIYW5zIEJvZWhtIDxIYW5zX0JvZWhtQGhwLmNvbT4KKworCSogc3JjL2lhNjQvdW5peC5TOiBSZXN0b3JlIHN0YWNrIHBvaW50ZXIgd2hlbiByZXR1cm5pbmcgZnJvbQorCWZmaV9jbG9zdXJlX1VOSVguCisJKiBzcmMvaWE2NC9mZmkuYzogRml4IHR5cG8gaW4gY29tbWVudC4KKworMjAwMS0wNC0xOCAgSmltIFdpbHNvbiAgPHdpbHNvbkByZWRoYXQuY29tPgorCisJKiBzcmMvaWE2NC91bml4LlM6IERlbGV0ZSB1bm5lY2Vzc2FyeSBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudCBvZiBsb2MyCisJdG8gZWxpbWluYXRlIFJBVyBEVi4KKworMjAwMS0wNC0xMiAgQnJ5Y2UgTWNLaW5sYXkgIDxicnljZUBhbGJhdHJvc3MuY28ubno+CisKKwkqIE1ha2VmaWxlLmFtOiBNYWtlIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKzIwMDEtMDMtMjkgIEJyeWNlIE1jS2lubGF5ICA8YnJ5Y2VAYWxiYXRyb3NzLmNvLm56PgorCisJKiBjb25maWd1cmUuaW46IFVzZSBkaWZmZXJlbnQgc3ludGF4IGZvciBzdWJkaXJlY3RvcnkgY3JlYXRpb24uCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDEtMDMtMjcgIEpvbiBCZW5pc3RvbiAgPGpvbkBiZW5pc3Rvbi5jb20+CisKKwkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCAoV2luMzIsIEN5Z1dpbiwgTWluZ1cpLgorCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogTWFrZWZpbGUuYW06IEFkZGVkIFg4Nl9XSU4zMiB0YXJnZXQgc3VwcG9ydC4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGRlZCBYODZfV0lOMzIgdGFyZ2V0IHN1cHBvcnQuCisKKwkqIHNyYy9mZml0ZXN0LmM6IERvZXNuJ3QgcnVuIHN0cnVjdHVyZSB0ZXN0cyBmb3IgWDg2X1dJTjMyIHRhcmdldHMuCisJKiBzcmMvdHlwZXMuYzogQWRkZWQgWDg2X1dJTjMyIHRhcmdldCBzdXBwb3J0LgorCisJKiBzcmMveDg2L3dpbjMyLlM6IE5ldyBmaWxlLiBCYXNlZCBvbiBzeXN2LlMsIGJ1dCB3aXRoIEVICisJc3R1ZmYgcmVtb3ZlZCBhbmQgbWFkZSB0byB3b3JrIHdpdGggQ3lnV2luJ3MgZ2FzLgorCisyMDAxLTAzLTI2ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KKworCSogY29uZmlndXJlLmluOiBNYWtlIHRhcmdldCBzdWJkaXJlY3RvcnkgaW4gYnVpbGQgZGlyLgorCSogTWFrZWZpbGUuYW06IE92ZXJyaWRlIHN1ZmZpeCBiYXNlZCBydWxlcyB0byBzcGVjaWZ5IGNvcnJlY3Qgb3V0cHV0CisJc3ViZGlyZWN0b3J5LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKzIwMDEtMDMtMjMgIEtldmluIEIgSGVuZHJpY2tzICA8a2hlbmRyaWNrc0BpdmV5LnV3by5jYT4KKworCSogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUzogTmV3IGZpbGUuCisJKiBzcmMvcG93ZXJwYy9mZmkuYyAoZmZpX3ByZXBfYXJncyk6IEZpeGVkIEFCSSBjb21wYXRpYmlsaXR5IGJ1ZworCWludm9sdmluZyBsb25nIGxvbmcgYW5kIHJlZ2lzdGVyIHBhaXJzLgorCShmZmlfcHJlcF9jbG9zdXJlKTogTmV3IGZ1bmN0aW9uLgorCShmbHVzaF9pY2FjaGUpOiBMaWtld2lzZS4KKwkoZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YpOiBMaWtld2lzZS4KKwkqIGluY2x1ZGUvZmZpLmguaW4gKEZGSV9DTE9TVVJFUyk6IERlZmluZSBvbiBQUEMuCisJKEZGSV9UUkFNUE9MSU5FX1NJWkUpOiBMaWtld2lzZS4KKwkoRkZJX05BVElWRV9SQVdfQVBJKTogTGlrZXdpc2UuCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChFWFRSQV9ESVNUKTogQWRkZWQgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUy4KKwkoVEFSR0VUX1NSQ19QT1dFUlBDKTogTGlrZXdpc2UuCisKKzIwMDEtMDMtMTkgIFRvbSBUcm9tZXkgIDx0cm9tZXlAcmVkaGF0LmNvbT4KKworCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbSAoZmZpdGVzdF9MREZMQUdTKTogTmV3IG1hY3JvLgorCisyMDAxLTAzLTAyICBOaWNrIENsaWZ0b24gIDxuaWNrY0ByZWRoYXQuY29tPgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIGluY2x1ZGUvZmZpX21pcHMuaDogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvZGVidWcuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvZmZpdGVzdC5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9wcmVwX2NpZi5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy90eXBlcy5jOiBSZW1vdmUgUkNTIGlkZW50IHN0cmluZy4KKwkqIHNyYy9hbHBoYS9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvYWxwaGEvb3NmLlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL2FybS9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvYXJtL3N5c3YuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvbWlwcy9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvbWlwcy9uMzIuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvbWlwcy9vMzIuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMvc3BhcmMvZmZpLmM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3NwYXJjL3Y4LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3NwYXJjL3Y5LlM6IFJlbW92ZSBSQ1MgaWRlbnQgc3RyaW5nLgorCSogc3JjL3g4Ni9mZmkuYzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisJKiBzcmMveDg2L3N5c3YuUzogUmVtb3ZlIFJDUyBpZGVudCBzdHJpbmcuCisKKzIwMDEtMDItMDggIEpvc2VwaCBTLiBNeWVycyAgPGpzbTI4QGNhbS5hYy51az4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogQ2hhbmdlIHNvdXJjZXdhcmUuY3lnbnVzLmNvbSByZWZlcmVuY2VzIHRvCisJZ2NjLmdudS5vcmcuCisKKzIwMDAtMTItMDkgIFJpY2hhcmQgSGVuZGVyc29uICA8cnRoQHJlZGhhdC5jb20+CisKKwkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX2NhbGwpOiBTaW1wbGlmeSBzdHJ1Y3QgcmV0dXJuIHRlc3QuCisJKGZmaV9jbG9zdXJlX29zZl9pbm5lcik6IEluZGV4IHJhdGhlciB0aGFuIGluY3JlbWVudCBhdmFsdWUKKwlhbmQgYXJnX3R5cGVzLiAgR2l2ZSBmZmlfY2xvc3VyZV9vc2YgdGhlIHJhdyByZXR1cm4gdmFsdWUgdHlwZS4KKwkqIHNyYy9hbHBoYS9vc2YuUyAoZmZpX2Nsb3N1cmVfb3NmKTogSGFuZGxlIHJldHVybiB2YWx1ZSB0eXBlCisJcHJvbW90aW9uLgorCisyMDAwLTEyLTA3ICBSaWNoYXJkIEhlbmRlcnNvbiAgPHJ0aEByZWRoYXQuY29tPgorCisJKiBzcmMvcmF3X2FwaS5jIChmZmlfdHJhbnNsYXRlX2FyZ3MpOiBGaXggdHlwby4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IExpa2V3aXNlLgorCisJKiBpbmNsdWRlL2ZmaS5oLmluIFtBTFBIQV06IERlZmluZSBGRklfQ0xPU1VSRVMgYW5kCisJRkZJX1RSQU1QT0xJTkVfU0laRS4KKwkqIHNyYy9hbHBoYS9mZmkuYyAoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBBZGp1c3QgbWluaW1hbAorCWNpZi0+Ynl0ZXMgZm9yIG5ldyBmZmlfY2FsbF9vc2YgaW1wbGVtZW50YXRpb24uCisJKGZmaV9wcmVwX2FyZ3MpOiBBYnNvcmIgaW50byAuLi4KKwkoZmZpX2NhbGwpOiAuLi4gaGVyZS4gIERvIGFsbCBzdGFjayBhbGxvY2F0aW9uIGhlcmUgYW5kCisJYXZvaWQgYSBjYWxsYmFjayBmdW5jdGlvbi4KKwkoZmZpX3ByZXBfY2xvc3VyZSwgZmZpX2Nsb3N1cmVfb3NmX2lubmVyKTogTmV3LgorCSogc3JjL2FscGhhL29zZi5TIChmZmlfY2FsbF9vc2YpOiBSZWltcGxlbWVudCB3aXRoIG5vIGNhbGxiYWNrLgorCShmZmlfY2xvc3VyZV9vc2YpOiBOZXcuCisKKzIwMDAtMDktMTAgIEFsZXhhbmRyZSBPbGl2YSAgPGFvbGl2YUByZWRoYXQuY29tPgorCisJKiBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGluc3RhbGwtc2g6IFJlbW92ZWQuCisJKiBsdGNvbmZpZywgbHRtYWluLnNoLCBtaXNzaW5nLCBta2luc3RhbGxkaXJzOiBMaWtld2lzZS4KKwkqIE1ha2VmaWxlLmluOiBSZWJ1aWx0LgorCisJKiBhY2luY2x1ZGUubTQ6IEluY2x1ZGUgbGlidG9vbCBtYWNyb3MgZnJvbSB0aGUgdG9wIGxldmVsLgorCSogYWNsb2NhbC5tNCwgY29uZmlndXJlOiBSZWJ1aWx0LgorCisyMDAwLTA4LTIyICBBbGV4YW5kcmUgT2xpdmEgIDxhb2xpdmFAcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlLmluIFtpKjg2LSotZnJlZWJzZCpdIChUQVJHRVQsIFRBUkdFVERJUik6IFNldC4KKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworMjAwMC0wNS0xMSAgU2NvdHQgQmFtYnJvdWdoICA8c2NvdHRiQG5ldHdpbmRlci5vcmc+CisKKwkqIGxpYmZmaS9zcmMvYXJtL3N5c3YuUyAoZmZpX2NhbGxfU1lTVik6IERvdWJsZXMgYXJlIG5vdCBzYXZlZCB0bworCW1lbW9yeSBjb3JyZWN0bHkuICBVc2UgY29uZGl0aW9uYWwgaW5zdHJ1Y3Rpb25zLCBub3QgYnJhbmNoZXMgd2hlcmUKKwlwb3NzaWJsZS4KKworMjAwMC0wNS0wNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IE1hdGNoIGBhcm0qLSotbGludXgtKicuCisJRnJvbSBDaHJpcyBEb3JuYW4gPGNkb3JuYW5AYXJtLmNvbT4uCisKKzIwMDAtMDQtMjggIEpha3ViIEplbGluZWsgIDxqYWt1YkByZWRoYXQuY29tPgorCisJKiBNYWtlZmlsZS5hbSAoU1VCRElSUyk6IERlZmluZS4KKwkoQU1fTUFLRUZMQUdTKTogTGlrZXdpc2UuCisJKE11bHRpbGliIHN1cHBvcnQuKTogQWRkIHNlY3Rpb24uCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIGx0Y29uZmlnIChleHRyYV9jb21waWxlcl9mbGFncywgZXh0cmFfY29tcGlsZXJfZmxhZ3NfdmFsdWUpOgorCU5ldyB2YXJpYWJsZXMuIFNldCBmb3IgZ2NjIHVzaW5nIC1wcmludC1tdWx0aS1saWIuIEV4cG9ydCB0aGVtCisJdG8gbGlidG9vbC4KKwkoc3BhcmM2NC0qLWxpbnV4LWdudSopOiBVc2UgbGlic3VmZiA2NCBmb3Igc2VhcmNoIHBhdGhzLgorCSogbHRtYWluLnNoIChCfGJ8Vik6IERvbid0IHRocm93IGF3YXkgZ2NjJ3MgLUIsIC1iIGFuZCAtViBvcHRpb25zCisJZm9yIC1zaGFyZWQgbGlua3MuCisJKGV4dHJhX2NvbXBpbGVyX2ZsYWdzX3ZhbHVlLCBleHRyYV9jb21waWxlcl9mbGFncyk6IENoZWNrIHRoZXNlCisJZm9yIGV4dHJhIGNvbXBpbGVyIG9wdGlvbnMgd2hpY2ggbmVlZCB0byBiZSBwYXNzZWQgZG93biBpbgorCWNvbXBpbGVyX2ZsYWdzLgorCisyMDAwLTA0LTE2ICBBbnRob255IEdyZWVuICA8Z3JlZW5AcmVkaGF0LmNvbT4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBDaGFuZ2UgaSo4Ni1wYy1saW51eCogdG8gaSo4Ni0qLWxpbnV4Ki4KKworMjAwMC0wNC0xNCAgSmFrdWIgSmVsaW5layAgPGpha3ViQHJlZGhhdC5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKFNQQVJDNjQpOiBEZWZpbmUgZm9yIDY0Yml0IFNQQVJDIGJ1aWxkcy4KKwlTZXQgU1BBUkMgRkZJX0RFRkFVTFRfQUJJIGJhc2VkIG9uIFNQQVJDNjQgZGVmaW5lLgorCSogc3JjL3NwYXJjL2ZmaS5jIChmZmlfcHJlcF9hcmdzX3Y4KTogUmVuYW1lZCBmcm9tIGZmaV9wcmVwX2FyZ3MuCisJUmVwbGFjZSBhbGwgdm9pZCAqIHNpemVvZnMgd2l0aCBzaXplb2YoaW50KS4KKwlPbmx5IGNvbXBhcmUgdHlwZSB3aXRoIEZGSV9UWVBFX0xPTkdET1VCTEUgaWYgTE9OR0RPVUJMRSBpcworCWRpZmZlcmVudCB0aGFuIERPVUJMRS4KKwlSZW1vdmUgRkZJX1RZUEVfU0lOVDMyIGFuZCBGRklfVFlQRV9VSU5UMzIgY2FzZXMgKGhhbmRsZWQgZWxzZXdoZXJlKS4KKwkoZmZpX3ByZXBfYXJnc192OSk6IE5ldyBmdW5jdGlvbi4KKwkoZmZpX3ByZXBfY2lmX21hY2hkZXApOiBIYW5kbGUgVjkgQUJJIGFuZCBsb25nIGxvbmcgb24gVjguCisJKGZmaV9WOV9yZXR1cm5fc3RydWN0KTogTmV3IGZ1bmN0aW9uLgorCShmZmlfY2FsbCk6IEhhbmRsZSBGRklfVjkgQUJJIGZyb20gNjRiaXQgY29kZSBhbmQgRkZJX1Y4IEFCSSBmcm9tCisJMzJiaXQgY29kZSAobm90IHlldCBjcm9zcy1hcmNoIGNhbGxzKS4KKwkqIHNyYy9zcGFyYy92OC5TOiBBZGQgc3RydWN0IHJldHVybiBkZWxheSBub3AuCisJSGFuZGxlIGxvbmcgbG9uZy4KKwkqIHNyYy9zcGFyYy92OS5TOiBOZXcgZmlsZS4KKwkqIHNyYy9wcmVwX2NpZi5jIChmZmlfcHJlcF9jaWYpOiBSZXR1cm4gc3RydWN0dXJlIHBvaW50ZXIKKwlpcyB1c2VkIG9uIHNwYXJjNjQgb25seSBmb3Igc3RydWN0dXJlcyBsYXJnZXIgdGhhbiAzMiBieXRlcy4KKwlQYXNzIGJ5IHJlZmVyZW5jZSBmb3Igc3RydWN0dXJlcyBpcyBkb25lIGZvciBzdHJ1Y3R1cmUgYXJndW1lbnRzCisJbGFyZ2VyIHRoYW4gMTYgYnl0ZXMuCisJKiBzcmMvZmZpdGVzdC5jIChtYWluKTogVXNlIDY0Yml0IHJpbnQgb24gc3BhcmM2NC4KKwlSdW4gbG9uZyBsb25nIHRlc3RzIG9uIHNwYXJjLgorCSogc3JjL3R5cGVzLmMgKEZGSV9UWVBFX1BPSU5URVIpOiBQb2ludGVyIGlzIDY0Yml0IG9uIGFscGhhIGFuZAorCXNwYXJjNjQuCisJKEZGSV9UWVBFX0xPTkdET1VCTEUpOiBsb25nIGRvdWJsZSBpcyAxMjggYml0IGFsaWduZWQgdG8gMTI4IGJpdHMKKwlvbiBzcGFyYzY0LgorCSogY29uZmlndXJlLmluIChzcGFyYy0qLWxpbnV4Kik6IE5ldyBzdXBwb3J0ZWQgdGFyZ2V0LgorCShzcGFyYzY0LSotbGludXgqKTogTGlrZXdpc2UuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBNYWtlZmlsZS5hbTogQWRkIHY5LlMgdG8gU1BBUkMgZmlsZXMuCisJKiBNYWtlZmlsZS5pbjogTGlrZXdpc2UuCisJKExJTkspOiBTdXJyb3VuZCAkKENDTEQpIGludG8gZG91YmxlIHF1b3Rlcywgc28gdGhhdCBtdWx0aWxpYgorCWNvbXBpbGVzIHdvcmsgY29ycmVjdGx5LgorCisyMDAwLTA0LTA0ICBBbGV4YW5kcmUgUGV0aXQtQmlhbmNvICA8YXBiaWFuY29AY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiAoaSo4Ni0qLXNvbGFyaXMqKTogTmV3IGxpYmZmaSB0YXJnZXQuIFBhdGNoCisJcHJvcG9zZWQgYnkgQnJ5Y2UgTWNLaW5sYXkuCisKKzIwMDAtMDMtMjAgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogTWFrZWZpbGUuaW46IEhhbmQgZWRpdCBmb3IgamF2YV9yYXdfYXBpLmxvLgorCisyMDAwLTAzLTA4ICBCcnljZSBNY0tpbmxheSAgPGJyeWNlQGFsYmF0cm9zcy5jby5uej4KKworCSogY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViOiBVcGRhdGUgZnJvbSB0aGUgZ2NjIHRyZWUuCisJRml4IGZvciBQUiBsaWJnY2ovMTY4LgorCisyMDAwLTAzLTAzICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmluOiBGaXhlZCBpYTY0IGJ5IGhhbmQuCisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKwkqIGNvbmZpZ3VyZS5pbiAoLS1lbmFibGUtbXVsdGlsaWIpOiBOZXcgb3B0aW9uLgorCShsaWJmZmlfYmFzZWRpcik6IE5ldyBzdWJzdC4KKwkoQUNfT1VUUFVUKTogQWRkZWQgbXVsdGlsaWIgY29kZS4KKworMjAwMC0wMy0wMiAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdC4KKwkqIE1ha2VmaWxlLmFtIChUQVJHRVRfU1JDX0lBNjQpOiBVc2UgYGlhNjQnLCBub3QgYGFscGhhJywgYXMKKwlkaXJlY3RvcnkgbmFtZS4KKworMjAwMC0wMi0yNSAgSGFucyBCb2VobSA8Ym9laG1AYWNtLm9yZz4KKworCSogc3JjL2lhNjQvZmZpLmMsIHNyYy9pYTY0L2lhNjRfZmxhZ3MuaCwgc3JjL2lhNjQvdW5peC5TOiBOZXcKKwlmaWxlcy4KKwkqIHNyYy9yYXdfYXBpLmMgKGZmaV90cmFuc2xhdGVfYXJncyk6IEZpeGVkIHR5cG8gaW4gYXJndW1lbnQKKwlsaXN0LgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IFVzZSBmZmlfdHJhbnNsYXRlX2FyZ3MsIG5vdAorCWZmaV9jbG9zdXJlX3RyYW5zbGF0ZS4KKwkqIHNyYy9qYXZhX3Jhd19hcGkuYzogTmV3IGZpbGUuCisJKiBzcmMvZmZpdGVzdC5jIChjbG9zdXJlX3Rlc3RfZm4pOiBOZXcgZnVuY3Rpb24uCisJKG1haW4pOiBEZWZpbmUgYHJpbnQnIGFzIGxvbmcgbG9uZyBvbiBJQTY0LiAgQWRkZWQgbmV3IHRlc3Qgd2hlbgorCUZGSV9DTE9TVVJFUyBpcyBkZWZpbmVkLgorCSogaW5jbHVkZS9mZmkuaC5pbiAoQUxJR04pOiBVc2Ugc2l6ZV90LCBub3QgdW5zaWduZWQuCisJKGZmaV9hYmkpOiBSZWNvZ25pemUgSUE2NC4KKwkoZmZpX3Jhdyk6IEFkZGVkIGBmbHQnIGZpZWxkLgorCUFkZGVkICJKYXZhIHJhdyBBUEkiIGNvZGUuCisJKiBjb25maWd1cmUuaW46IFJlY29nbml6ZSBpYTY0LgorCSogTWFrZWZpbGUuYW0gKFRBUkdFVF9TUkNfSUE2NCk6IE5ldyBtYWNyby4KKwkobGliZmZpX2xhX2NvbW1vbl9TT1VSQ0VTKTogQWRkZWQgamF2YV9yYXdfYXBpLmMuCisJKGxpYmZmaV9sYV9TT1VSQ0VTKTogRGVmaW5lIGluIElBNjQgY2FzZS4KKworMjAwMC0wMS0wNCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgorCisJKiBNYWtlZmlsZS5pbjogUmVidWlsdCB3aXRoIG5ld2VyIGF1dG9tYWtlLgorCisxOTk5LTEyLTMxICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChJTkNMVURFUyk6IEFkZGVkIC1JJCh0b3Bfc3JjZGlyKS9zcmMuCisKKzE5OTktMDktMDEgIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KKworCSogaW5jbHVkZS9mZmkuaC5pbjogUmVtb3ZlZCBQQUNLQUdFIGFuZCBWRVJTSU9OIGRlZmluZXMgYW5kCisJdW5kZWZzLgorCSogZmZpY29uZmlnLmguaW46IFJlYnVpbHQuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisJKiBjb25maWd1cmUuaW46IFBhc3MgM3JkIGFyZ3VtZW50IHRvIEFNX0lOSVRfQVVUT01BS0UuCisJVXNlIEFNX1BST0dfTElCVE9PTCAoYXV0b21ha2UgMS40IGNvbXBhdGliaWxpdHkpLgorCSogYWNjb25maWcuaDogRG9uJ3QgI3VuZGVmIFBBQ0tBR0Ugb3IgVkVSU0lPTi4KKworMTk5OS0wOC0wOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisKKwkqIGluY2x1ZGUvZmZpLmguaW46IFRyeSB0byB3b3JrIGFyb3VuZCBtZXNzeSBoZWFkZXIgcHJvYmxlbQorCXdpdGggUEFDS0FHRSBhbmQgVkVSU0lPTi4KKworCSogY29uZmlndXJlOiBSZWJ1aWx0LgorCSogY29uZmlndXJlLmluOiBDaGFuZ2UgdmVyc2lvbiB0byAyLjAwLWJldGEuCisKKwkqIGZmaWNvbmZpZy5oLmluOiBSZWJ1aWx0LgorCSogYWNjb25maWcuaCAoRkZJX05PX1NUUlVDVFMsIEZGSV9OT19SQVdfQVBJKTogRGVmaW5lLgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfcmF3X2NhbGwpOiBSZW5hbWUuCisKKzE5OTktMDgtMDIgIEtyZXN0ZW4gS3JhYiBUaG9ydXAgIDxrcmFiQGRvbWluaXEuaXMucy51LXRva3lvLmFjLmpwPgorCisJKiBzcmMveDg2L2ZmaS5jIChmZmlfY2xvc3VyZV9TWVNWKTogTmV3IGZ1bmN0aW9uLgorCShmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YpOiBEaXR0by4KKwkoZmZpX3ByZXBfY2xvc3VyZSk6IERpdHRvLgorCShmZmlfY2xvc3VyZV9yYXdfU1lTVik6IERpdHRvLgorCShmZmlfcHJlcF9yYXdfY2xvc3VyZSk6IE1vcmUgZGl0dG8uCisJKGZmaV9jYWxsX3Jhdyk6IEZpbmFsIGRpdHRvLgorCisJKiBpbmNsdWRlL2ZmaS5oLmluOiBBZGQgZGVmaW5pdGlvbnMgZm9yIGNsb3N1cmUgYW5kIHJhdyBBUEkuCisKKwkqIHNyYy94ODYvZmZpLmMgKGZmaV9wcmVwX2NpZl9tYWNoZGVwKTogQWRkZWQgY2FzZSBmb3IKKwlGRklfVFlQRV9VSU5UNjQuCisKKwkqIE1ha2VmaWxlLmFtIChsaWJmZmlfbGFfY29tbW9uX1NPVVJDRVMpOiBBZGRlZCByYXdfYXBpLmMKKworCSogc3JjL3Jhd19hcGkuYzogTmV3IGZpbGUuCisKKwkqIGluY2x1ZGUvZmZpLmguaW4gKGZmaV9yYXcpOiBOZXcgdHlwZS4KKwkoVUlOVF9BUkcsIFNJTlRfQVJHKTogTmV3IGRlZmluZXMuCisJKGZmaV9jbG9zdXJlLCBmZmlfcmF3X2Nsb3N1cmUpOiBOZXcgdHlwZXMuCisJKGZmaV9wcmVwX2Nsb3N1cmUsIGZmaV9wcmVwX3Jhd19jbG9zdXJlKTogTmV3IGRlY2xhcmF0aW9ucy4KKworCSogY29uZmlndXJlLmluOiBBZGQgY2hlY2sgZm9yIGVuZGlhbm5lc3MgYW5kIHNpemVvZiB2b2lkKi4KKworCSogc3JjL3g4Ni9zeXN2LlMgKGZmaV9jYWxsX1NZU1YpOiBDYWxsIGZpeHVwIHJvdXRpbmUgdmlhIGFyZ3VtZW50LAorCWluc3RlYWQgb2YgZGlyZWN0bHkuCisKKwkqIGNvbmZpZ3VyZTogUmVidWlsdC4KKworVGh1IEp1bCAgOCAxNDoyODo0MiAxOTk5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluOiBBZGQgeDg2IGFuZCBwb3dlcnBjIEJlT1MgY29uZmlndXJhdGlvbnMuCisJRnJvbSBNYWtvdG8gS2F0byA8bV9rYXRvQGdhMi5zby1uZXQubmUuanA+LgorCisxOTk5LTA1LTA5ICBBbnRob255IEdyZWVuICA8Z3JlZW5AY3lnbnVzLmNvbT4KKworCSogY29uZmlndXJlLmluOiBBZGQgd2FybmluZyBhYm91dCB0aGlzIGJlaW5nIGJldGEgY29kZS4KKwlSZW1vdmUgc3JjL01ha2VmaWxlLmFtIGZyb20gdGhlIHBpY3R1cmUuCisJKiBjb25maWd1cmU6IFJlYnVpbHQuCisKKwkqIE1ha2VmaWxlLmFtOiBNb3ZlIGxvZ2ljIGZyb20gc3JjL01ha2VmaWxlLmFtLiAgQWRkIGNoYW5nZXMKKwl0byBzdXBwb3J0IGxpYmZmaSBhcyBhIHRhcmdldCBsaWJyYXJ5LgorCSogTWFrZWZpbGUuaW46IFJlYnVpbHQuCisKKwkqIGFjbG9jYWwubTQsIGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwgbHRjb25maWcsIGx0bWFpbi5zaDoKKwlVcGdyYWRlZCB0byBuZXcgYXV0b2NvbmYsIGF1dG9tYWtlLCBsaWJ0b29sLgorCisJKiBSRUFETUU6IFR3ZWFrcy4KKworCSogTElDRU5TRTogVXBkYXRlIGNvcHlyaWdodCBkYXRlLgorCisJKiBzcmMvTWFrZWZpbGUuYW0sIHNyYy9NYWtlZmlsZS5pbjogUmVtb3ZlZC4KKworMTk5OC0xMS0yOSAgQW50aG9ueSBHcmVlbiAgPGdyZWVuQGN5Z251cy5jb20+CisKKwkqIGluY2x1ZGUvQ2hhbmdlTG9nOiBSZW1vdmVkLgorCSogc3JjL0NoYW5nZUxvZzogUmVtb3ZlZC4KKwkqIHNyYy9taXBzL0NoYW5nZUxvZzogUmVtb3ZlZC4KKwkqIHNyYy9zcGFyYy9DaGFuZ2VMb2c6IFJlbWJvdmVkLgorCSogc3JjL3g4Ni9DaGFuZ2VMb2c6IFJlbW92ZWQuCisKKwkqIENoYW5nZUxvZy52MTogQ3JlYXRlZC4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvQ2hhbmdlTG9nLnYxIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cudjEKaW5kZXggMzY5ODIwYy4uYWYzYTM3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cudjEKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9DaGFuZ2VMb2cudjEKQEAgLTIsNyArMiw3IEBACiAKIFZlcnNpb24gMSBvZiBsaWJmZmkgaGFkIHBlci1kaXJlY3RvcnkgQ2hhbmdlTG9ncy4gIEN1cnJlbnQgYW5kIGZ1dHVyZQogdmVyc2lvbnMgaGF2ZSBhIHNpbmdsZSBDaGFuZ2VMb2cgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3RvcnkuICBUaGUKLXZlcnNpb24gMSBDaGFuZ2VMb2dzIGhhdmUgYWxsIGJlZW4gY29uY2F0b25hdGVkIGludG8gdGhpcyBmaWxlIGZvcgordmVyc2lvbiAxIENoYW5nZUxvZ3MgaGF2ZSBhbGwgYmVlbiBjb25jYXRlbmF0ZWQgaW50byB0aGlzIGZpbGUgZm9yCiBmdXR1cmUgcmVmZXJlbmNlIG9ubHkuCiAKIC0tLSBsaWJmZmkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9MSUNFTlNFIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9MSUNFTlNFCmluZGV4IGFhNjAzNDIuLmE2NmZhYjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTElDRU5TRQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL0xJQ0VOU0UKQEAgLTEsNCArMSw0IEBACi1saWJmZmkgLSBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxMiAgQW50aG9ueSBHcmVlbiwgUmVkIEhhdCwgSW5jIGFuZCBvdGhlcnMuCitsaWJmZmkgLSBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNCAgQW50aG9ueSBHcmVlbiwgUmVkIEhhdCwgSW5jIGFuZCBvdGhlcnMuCiBTZWUgc291cmNlIGZpbGVzIGZvciBkZXRhaWxzLgogCiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuYW0gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmFtCmluZGV4IGJmMDE1NmYuLjFkY2RjODEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuYW0KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5hbQpAQCAtNiwxMCArNiwxMSBAQAogCiBTVUJESVJTID0gaW5jbHVkZSB0ZXN0c3VpdGUgbWFuCiAKLUVYVFJBX0RJU1QgPSBMSUNFTlNFIENoYW5nZUxvZy52MSBDaGFuZ2VMb2cubGliZ2NqIGNvbmZpZ3VyZS5ob3N0CVwKK0VYVFJBX0RJU1QgPSBMSUNFTlNFIENoYW5nZUxvZy52MSBDaGFuZ2VMb2cubGliZ2NqCQkJXAogCSBzcmMvYWFyY2g2NC9mZmkuYyBzcmMvYWFyY2g2NC9mZml0YXJnZXQuaCBzcmMvYWFyY2g2NC9zeXN2LlMJXAotCSBidWlsZC1pb3Muc2ggc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9vc2YuUwkJCVwKLQkgc3JjL2FscGhhL2ZmaXRhcmdldC5oIHNyYy9hcm0vZmZpLmMgc3JjL2FybS9zeXN2LlMJCVwKKwkgc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9vc2YuUwkJCVwKKwkgc3JjL2FscGhhL2ZmaXRhcmdldC5oIHNyYy9hcmMvZmZpLmMgc3JjL2FyYy9hcmNvbXBhY3QuUwlcCisJIHNyYy9hcmMvZmZpdGFyZ2V0Lmggc3JjL2FybS9mZmkuYyBzcmMvYXJtL3N5c3YuUwkJXAogCSBzcmMvYXJtL2ZmaXRhcmdldC5oIHNyYy9hdnIzMi9mZmkuYyBzcmMvYXZyMzIvc3lzdi5TCQlcCiAJIHNyYy9hdnIzMi9mZml0YXJnZXQuaCBzcmMvY3Jpcy9mZmkuYyBzcmMvY3Jpcy9zeXN2LlMJCVwKIAkgc3JjL2NyaXMvZmZpdGFyZ2V0Lmggc3JjL2lhNjQvZmZpLmMgc3JjL2lhNjQvZmZpdGFyZ2V0LmgJXApAQCAtMTksOCArMjAsMTIgQEAKIAkgc3JjL21veGllL2ZmaXRhcmdldC5oIHNyYy9tb3hpZS9lYWJpLlMgc3JjL21pcHMvZmZpdGFyZ2V0LmgJXAogCSBzcmMvbTMyci9mZmkuYyBzcmMvbTMyci9zeXN2LlMgc3JjL20zMnIvZmZpdGFyZ2V0LmgJCVwKIAkgc3JjL202OGsvZmZpLmMgc3JjL202OGsvc3lzdi5TIHNyYy9tNjhrL2ZmaXRhcmdldC5oCQlcCisJIHNyYy9tODhrL2ZmaS5jIHNyYy9tODhrL29ic2QuUyBzcmMvbTg4ay9mZml0YXJnZXQuaAkJXAogCSBzcmMvbWljcm9ibGF6ZS9mZmkuYyBzcmMvbWljcm9ibGF6ZS9zeXN2LlMJCQlcCi0JIHNyYy9taWNyb2JsYXplL2ZmaXRhcmdldC5oIHNyYy9wb3dlcnBjL2ZmaS5jCQkJXAorCSBzcmMvbWljcm9ibGF6ZS9mZml0YXJnZXQuaAkJCQkJXAorCSBzcmMvbmlvczIvZmZpLmMgc3JjL25pb3MyL2ZmaXRhcmdldC5oIHNyYy9uaW9zMi9zeXN2LlMJCVwKKwkgc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvZmZpX3Bvd2VycGMuaAkJCVwKKwkgc3JjL3Bvd2VycGMvZmZpX3N5c3YuYyBzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jCQlcCiAJIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9saW51eDY0LlMJCQlcCiAJIHNyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMJXAogCSBzcmMvcG93ZXJwYy9hc20uaCBzcmMvcG93ZXJwYy9haXguUyBzcmMvcG93ZXJwYy9kYXJ3aW4uUwlcCkBAIC0zOCwxNCArNDMsMTQgQEAKIAkgc3JjL2JmaW4vZmZpdGFyZ2V0Lmggc3JjL2JmaW4vc3lzdi5TIHNyYy9mcnYvZWFiaS5TCQlcCiAJIHNyYy9mcnYvZmZpdGFyZ2V0Lmggc3JjL2RsbWFsbG9jLmMgc3JjL3RpbGUvZmZpLmMJCVwKIAkgc3JjL3RpbGUvZmZpdGFyZ2V0Lmggc3JjL3RpbGUvdGlsZS5TIGxpYnRvb2wtdmVyc2lvbgkJXAorCSBzcmMvdmF4L2ZmaS5jIHNyYy92YXgvZmZpdGFyZ2V0Lmggc3JjL3ZheC9lbGZic2QuUwkJXAogCSBzcmMveHRlbnNhL2ZmaXRhcmdldC5oIHNyYy94dGVuc2EvZmZpLmMgc3JjL3h0ZW5zYS9zeXN2LlMJXAogCSBDaGFuZ2VMb2cubGliZmZpIG00L2xpYnRvb2wubTQgbTQvbHR+b2Jzb2xldGUubTQJCVwKIAkgbTQvbHRvcHRpb25zLm00IG00L2x0c3VnYXIubTQgbTQvbHR2ZXJzaW9uLm00CQkJXAogCSBtNC9sdHZlcnNpb24ubTQgc3JjL2FybS9nZW50cmFtcC5zaCBzcmMvZGVidWcuYyBtc3ZjYy5zaAlcCi0JIGdlbmVyYXRlLWlvcy1zb3VyY2UtYW5kLWhlYWRlcnMucHkJCQkJXAotCSBnZW5lcmF0ZS1vc3gtc291cmNlLWFuZC1oZWFkZXJzLnB5CQkJCVwKKwkgZ2VuZXJhdGUtZGFyd2luLXNvdXJjZS1hbmQtaGVhZGVycy5weQkJCQlcCiAJIGxpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIHNyYy9hcm0vdHJhbXBvbGluZS5TCQlcCi0JIGxpYnRvb2wtbGRmbGFncworCSBsaWJ0b29sLWxkZmxhZ3MgQ2hhbmdlTG9nLmxpYmZmaS0zLjEKIAogaW5mb19URVhJTkZPUyA9IGRvYy9saWJmZmkudGV4aQogCkBAIC01OSwzOSArNjQsMzkgQEAKICMgdmFsdWVzIGRlZmluZWQgaW4gdGVybXMgb2YgbWFrZSB2YXJpYWJsZXMsIGFzIGlzIHRoZSBjYXNlIGZvciBDQyBhbmQKICMgZnJpZW5kcyB3aGVuIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgdG9wIGxldmVsIE1ha2VmaWxlLgogQU1fTUFLRUZMQUdTID0gXAotCSJBUl9GTEFHUz0kKEFSX0ZMQUdTKSIgXAotCSJDQ19GT1JfQlVJTEQ9JChDQ19GT1JfQlVJTEQpIiBcCi0JIkNGTEFHUz0kKENGTEFHUykiIFwKLQkiQ1hYRkxBR1M9JChDWFhGTEFHUykiIFwKLQkiQ0ZMQUdTX0ZPUl9CVUlMRD0kKENGTEFHU19GT1JfQlVJTEQpIiBcCi0JIkNGTEFHU19GT1JfVEFSR0VUPSQoQ0ZMQUdTX0ZPUl9UQVJHRVQpIiBcCi0JIklOU1RBTEw9JChJTlNUQUxMKSIgXAotCSJJTlNUQUxMX0RBVEE9JChJTlNUQUxMX0RBVEEpIiBcCi0JIklOU1RBTExfUFJPR1JBTT0kKElOU1RBTExfUFJPR1JBTSkiIFwKLQkiSU5TVEFMTF9TQ1JJUFQ9JChJTlNUQUxMX1NDUklQVCkiIFwKLQkiSkMxRkxBR1M9JChKQzFGTEFHUykiIFwKLQkiTERGTEFHUz0kKExERkxBR1MpIiBcCi0JIkxJQkNGTEFHUz0kKExJQkNGTEFHUykiIFwKLQkiTElCQ0ZMQUdTX0ZPUl9UQVJHRVQ9JChMSUJDRkxBR1NfRk9SX1RBUkdFVCkiIFwKLQkiTUFLRT0kKE1BS0UpIiBcCi0JIk1BS0VJTkZPPSQoTUFLRUlORk8pICQoTUFLRUlORk9GTEFHUykiIFwKLQkiUElDRkxBRz0kKFBJQ0ZMQUcpIiBcCi0JIlBJQ0ZMQUdfRk9SX1RBUkdFVD0kKFBJQ0ZMQUdfRk9SX1RBUkdFVCkiIFwKLQkiUlVOVEVTVEZMQUdTPSQoUlVOVEVTVEZMQUdTKSIgXAotCSJTSEVMTD0kKFNIRUxMKSIgXAotCSJleGVjX3ByZWZpeD0kKGV4ZWNfcHJlZml4KSIgXAotCSJpbmZvZGlyPSQoaW5mb2RpcikiIFwKLQkibGliZGlyPSQobGliZGlyKSIgXAotCSJtYW5kaXI9JChtYW5kaXIpIiBcCi0JInByZWZpeD0kKHByZWZpeCkiIFwKLQkiQVI9JChBUikiIFwKLQkiQVM9JChBUykiIFwKLQkiQ0M9JChDQykiIFwKLQkiQ1hYPSQoQ1hYKSIgXAotCSJMRD0kKExEKSIgXAotCSJOTT0kKE5NKSIgXAotCSJSQU5MSUI9JChSQU5MSUIpIiBcCi0JIkRFU1RESVI9JChERVNURElSKSIKKwknQVJfRkxBR1M9JChBUl9GTEFHUyknIFwKKwknQ0NfRk9SX0JVSUxEPSQoQ0NfRk9SX0JVSUxEKScgXAorCSdDRkxBR1M9JChDRkxBR1MpJyBcCisJJ0NYWEZMQUdTPSQoQ1hYRkxBR1MpJyBcCisJJ0NGTEFHU19GT1JfQlVJTEQ9JChDRkxBR1NfRk9SX0JVSUxEKScgXAorCSdDRkxBR1NfRk9SX1RBUkdFVD0kKENGTEFHU19GT1JfVEFSR0VUKScgXAorCSdJTlNUQUxMPSQoSU5TVEFMTCknIFwKKwknSU5TVEFMTF9EQVRBPSQoSU5TVEFMTF9EQVRBKScgXAorCSdJTlNUQUxMX1BST0dSQU09JChJTlNUQUxMX1BST0dSQU0pJyBcCisJJ0lOU1RBTExfU0NSSVBUPSQoSU5TVEFMTF9TQ1JJUFQpJyBcCisJJ0pDMUZMQUdTPSQoSkMxRkxBR1MpJyBcCisJJ0xERkxBR1M9JChMREZMQUdTKScgXAorCSdMSUJDRkxBR1M9JChMSUJDRkxBR1MpJyBcCisJJ0xJQkNGTEFHU19GT1JfVEFSR0VUPSQoTElCQ0ZMQUdTX0ZPUl9UQVJHRVQpJyBcCisJJ01BS0U9JChNQUtFKScgXAorCSdNQUtFSU5GTz0kKE1BS0VJTkZPKSAkKE1BS0VJTkZPRkxBR1MpJyBcCisJJ1BJQ0ZMQUc9JChQSUNGTEFHKScgXAorCSdQSUNGTEFHX0ZPUl9UQVJHRVQ9JChQSUNGTEFHX0ZPUl9UQVJHRVQpJyBcCisJJ1JVTlRFU1RGTEFHUz0kKFJVTlRFU1RGTEFHUyknIFwKKwknU0hFTEw9JChTSEVMTCknIFwKKwknZXhlY19wcmVmaXg9JChleGVjX3ByZWZpeCknIFwKKwknaW5mb2Rpcj0kKGluZm9kaXIpJyBcCisJJ2xpYmRpcj0kKGxpYmRpciknIFwKKwknbWFuZGlyPSQobWFuZGlyKScgXAorCSdwcmVmaXg9JChwcmVmaXgpJyBcCisJJ0FSPSQoQVIpJyBcCisJJ0FTPSQoQVMpJyBcCisJJ0NDPSQoQ0MpJyBcCisJJ0NYWD0kKENYWCknIFwKKwknTEQ9JChMRCknIFwKKwknTk09JChOTSknIFwKKwknUkFOTElCPSQoUkFOTElCKScgXAorCSdERVNURElSPSQoREVTVERJUiknCiAKICMgU3ViZGlyIHJ1bGVzIHJlbHkgb24gJChGTEFHU19UT19QQVNTKQogRkxBR1NfVE9fUEFTUyA9ICQoQU1fTUFLRUZMQUdTKQpAQCAtMTIwLDEwICsxMjUsMTAgQEAKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvYmZpbi9mZmkuYyBzcmMvYmZpbi9zeXN2LlMKIGVuZGlmCiBpZiBYODYKLW5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUyBzcmMveDg2L3dpbjMyLlMKIGVuZGlmCiBpZiBYODZfRlJFRUJTRAotbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9mcmVlYnNkLlMKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZnJlZWJzZC5TIHNyYy94ODYvd2luMzIuUwogZW5kaWYKIGlmIFg4Nl9XSU4zMgogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni93aW4zMi5TCkBAIC0xMzMsNiArMTM4LDkgQEAKIGVuZGlmCiBpZiBYODZfREFSV0lOCiBub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L2Rhcndpbi5TIHNyYy94ODYvZmZpNjQuYyBzcmMveDg2L2RhcndpbjY0LlMKK2lmIFg4Nl9EQVJXSU4zMgorbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy94ODYvd2luMzIuUworZW5kaWYKIGVuZGlmCiBpZiBTUEFSQwogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9zcGFyYy9mZmkuYyBzcmMvc3BhcmMvdjguUyBzcmMvc3BhcmMvdjkuUwpAQCAtMTQ5LDE0ICsxNTcsMjAgQEAKIGlmIE02OEsKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvbTY4ay9mZmkuYyBzcmMvbTY4ay9zeXN2LlMKIGVuZGlmCitpZiBNODhLCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL204OGsvZmZpLmMgc3JjL204OGsvb2JzZC5TCitlbmRpZgogaWYgTU9YSUUKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvbW94aWUvZmZpLmMgc3JjL21veGllL2VhYmkuUwogZW5kaWYKIGlmIE1JQ1JPQkxBWkUKIG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvbWljcm9ibGF6ZS9mZmkuYyBzcmMvbWljcm9ibGF6ZS9zeXN2LlMKIGVuZGlmCitpZiBOSU9TMgorbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9uaW9zMi9zeXN2LlMgc3JjL25pb3MyL2ZmaS5jCitlbmRpZgogaWYgUE9XRVJQQwotbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUworbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL2ZmaV9zeXN2LmMgc3JjL3Bvd2VycGMvZmZpX2xpbnV4NjQuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyBzcmMvcG93ZXJwYy9saW51eDY0LlMgc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMKIGVuZGlmCiBpZiBQT1dFUlBDX0FJWAogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9haXguUyBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCkBAIC0xNjUsMTEgKzE3OSwxNCBAQAogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9kYXJ3aW4uUyBzcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TCiBlbmRpZgogaWYgUE9XRVJQQ19GUkVFQlNECi1ub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKK25vZGlzdF9saWJmZmlfbGFfU09VUkNFUyArPSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9mZmlfc3lzdi5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCiBlbmRpZgogaWYgQUFSQ0g2NAogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9hYXJjaDY0L3N5c3YuUyBzcmMvYWFyY2g2NC9mZmkuYwogZW5kaWYKK2lmIEFSQworbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9hcmMvYXJjb21wYWN0LlMgc3JjL2FyYy9mZmkuYworZW5kaWYKIGlmIEFSTQogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9hcm0vc3lzdi5TIHNyYy9hcm0vZmZpLmMKIGlmIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUKQEAgLTIxMiwxNCArMjI5LDI2IEBACiBpZiBNRVRBRwogbm9kaXN0X2xpYmZmaV9sYV9TT1VSQ0VTICs9IHNyYy9tZXRhZy9zeXN2LlMgc3JjL21ldGFnL2ZmaS5jCiBlbmRpZgoraWYgVkFYCitub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMgKz0gc3JjL3ZheC9lbGZic2QuUyBzcmMvdmF4L2ZmaS5jCitlbmRpZgogCiBsaWJmZmlfY29udmVuaWVuY2VfbGFfU09VUkNFUyA9ICQobGliZmZpX2xhX1NPVVJDRVMpCiBub2Rpc3RfbGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMgPSAkKG5vZGlzdF9saWJmZmlfbGFfU09VUkNFUykKIAogTFRMREZMQUdTID0gJChzaGVsbCAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2xpYnRvb2wtbGRmbGFncyAkKExERkxBR1MpKQogCitBTV9DRkxBR1MgPQoraWYgRkZJX0RFQlVHCisjIEJ1aWxkIGRlYnVnLiBEZWZpbmUgRkZJX0RFQlVHIG9uIHRoZSBjb21tYW5kbGluZSBzbyB0aGF0LCB3aGVuIGJ1aWxkaW5nIHdpdGgKKyMgTVNWQywgaXQgY2FuIGxpbmsgYWdhaW5zdCB0aGUgZGVidWcgQ1JULgorQU1fQ0ZMQUdTICs9IC1ERkZJX0RFQlVHCitlbmRpZgorCiBsaWJmZmlfbGFfTERGTEFHUyA9IC1uby11bmRlZmluZWQgLXZlcnNpb24taW5mbyBgZ3JlcCAtdiAnXlwjJyAkKHNyY2RpcikvbGlidG9vbC12ZXJzaW9uYCAkKExUTERGTEFHUykgJChBTV9MVExERkxBR1MpCiAKIEFNX0NQUEZMQUdTID0gLUkuIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1JaW5jbHVkZSAtSSQodG9wX3NyY2Rpcikvc3JjCiBBTV9DQ0FTRkxBR1MgPSAkKEFNX0NQUEZMQUdTKQogCitkaXN0LWhvb2s6CisJaWYgWyAtZCAkKHRvcF9zcmNkaXIpLy5naXQgXSA7IHRoZW4gKGNkICQodG9wX3NyY2Rpcik7IGdpdCBsb2cgLS1uby1kZWNvcmF0ZSkgOyBlbHNlIGVjaG8gJ1NlZSBnaXQgbG9nIGZvciBoaXN0b3J5LicgOyBmaSA+ICQoZGlzdGRpcikvQ2hhbmdlTG9nCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9NYWtlZmlsZS5pbgppbmRleCA0YjZhYmU1Li40YTU3YWJkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvTWFrZWZpbGUuaW4KQEAgLTEsNyArMSw3IEBACi0jIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEyLjIgZnJvbSBNYWtlZmlsZS5hbS4KKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuMTMuNCBmcm9tIE1ha2VmaWxlLmFtLgogIyBAY29uZmlndXJlX2lucHV0QAogCi0jIENvcHlyaWdodCAoQykgMTk5NC0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKQEAgLTE2LDIzICsxNiw1MSBAQAogCiAKIFZQQVRIID0gQHNyY2RpckAKLWFtX19tYWtlX2RyeXJ1biA9IFwKLSAgeyBcCi0gICAgYW1fX2RyeT1ubzsgXAorYW1fX2lzX2dudV9tYWtlID0gdGVzdCAtbiAnJChNQUtFRklMRV9MSVNUKScgJiYgdGVzdCAtbiAnJChNQUtFTEVWRUwpJworYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbiA9IFwKKyAgY2FzZSAkJHt0YXJnZXRfb3B0aW9uLX0gaW4gXAorICAgICAgPykgOzsgXAorICAgICAgKikgZWNobyAiYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbjogaW50ZXJuYWwgZXJyb3I6IGludmFsaWQiIFwKKyAgICAgICAgICAgICAgInRhcmdldCBvcHRpb24gJyQke3RhcmdldF9vcHRpb24tfScgc3BlY2lmaWVkIiA+JjI7IFwKKyAgICAgICAgIGV4aXQgMTs7IFwKKyAgZXNhYzsgXAorICBoYXNfb3B0PW5vOyBcCisgIHNhbmVfbWFrZWZsYWdzPSQkTUFLRUZMQUdTOyBcCisgIGlmICQoYW1fX2lzX2dudV9tYWtlKTsgdGhlbiBcCisgICAgc2FuZV9tYWtlZmxhZ3M9JCRNRkxBR1M7IFwKKyAgZWxzZSBcCiAgICAgY2FzZSAkJE1BS0VGTEFHUyBpbiBcCiAgICAgICAqXFxbXCBcCV0qKSBcCi0gICAgICAgIGVjaG8gJ2FtLS1lY2hvOiA7IEBlY2hvICJBTSIgIE9LJyB8ICQoTUFLRSkgLWYgLSAyPi9kZXYvbnVsbCBcCi0gICAgICAgICAgfCBncmVwICdeQU0gT0skJCcgPi9kZXYvbnVsbCB8fCBhbV9fZHJ5PXllczs7IFwKLSAgICAgICopIFwKLSAgICAgICAgZm9yIGFtX19mbGcgaW4gJCRNQUtFRkxBR1M7IGRvIFwKLSAgICAgICAgICBjYXNlICQkYW1fX2ZsZyBpbiBcCi0gICAgICAgICAgICAqPSp8LS0qKSA7OyBcCi0gICAgICAgICAgICAqbiopIGFtX19kcnk9eWVzOyBicmVhazs7IFwKLSAgICAgICAgICBlc2FjOyBcCi0gICAgICAgIGRvbmU7OyBcCisgICAgICAgIGJzPVxcOyBcCisgICAgICAgIHNhbmVfbWFrZWZsYWdzPWBwcmludGYgJyVzXG4nICIkJE1BS0VGTEFHUyIgXAorICAgICAgICAgIHwgc2VkICJzLyQkYnMkJGJzWyQkYnMgJCRicwldKi8vZyJgOzsgXAogICAgIGVzYWM7IFwKLSAgICB0ZXN0ICQkYW1fX2RyeSA9IHllczsgXAotICB9CisgIGZpOyBcCisgIHNraXBfbmV4dD1ubzsgXAorICBzdHJpcF90cmFpbG9wdCAoKSBcCisgIHsgXAorICAgIGZsZz1gcHJpbnRmICclc1xuJyAiJCRmbGciIHwgc2VkICJzLyQkMS4qJCQvLyJgOyBcCisgIH07IFwKKyAgZm9yIGZsZyBpbiAkJHNhbmVfbWFrZWZsYWdzOyBkbyBcCisgICAgdGVzdCAkJHNraXBfbmV4dCA9IHllcyAmJiB7IHNraXBfbmV4dD1ubzsgY29udGludWU7IH07IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICo9KnwtLSopIGNvbnRpbnVlOzsgXAorICAgICAgICAtKkkpIHN0cmlwX3RyYWlsb3B0ICdJJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qST8qKSBzdHJpcF90cmFpbG9wdCAnSSc7OyBcCisgICAgICAgIC0qTykgc3RyaXBfdHJhaWxvcHQgJ08nOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpPPyopIHN0cmlwX3RyYWlsb3B0ICdPJzs7IFwKKyAgICAgICAgLSpsKSBzdHJpcF90cmFpbG9wdCAnbCc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKmw/Kikgc3RyaXBfdHJhaWxvcHQgJ2wnOzsgXAorICAgICAgLVtkRURtXSkgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC1bSlRdKSBza2lwX25leHQ9eWVzOzsgXAorICAgIGVzYWM7IFwKKyAgICBjYXNlICQkZmxnIGluIFwKKyAgICAgICokJHRhcmdldF9vcHRpb24qKSBoYXNfb3B0PXllczsgYnJlYWs7OyBcCisgICAgZXNhYzsgXAorICBkb25lOyBcCisgIHRlc3QgJCRoYXNfb3B0ID0geWVzCithbV9fbWFrZV9kcnlydW4gPSAodGFyZ2V0X29wdGlvbj1uOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQorYW1fX21ha2Vfa2VlcGdvaW5nID0gKHRhcmdldF9vcHRpb249azsgJChhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uKSkKIHBrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAogcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACiBwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACkBAIC01NSw0NCArODMsNTIgQEAKIEBGRklfREVCVUdfVFJVRUBhbV9fYXBwZW5kXzEgPSBzcmMvZGVidWcuYwogQE1JUFNfVFJVRUBhbV9fYXBwZW5kXzIgPSBzcmMvbWlwcy9mZmkuYyBzcmMvbWlwcy9vMzIuUyBzcmMvbWlwcy9uMzIuUwogQEJGSU5fVFJVRUBhbV9fYXBwZW5kXzMgPSBzcmMvYmZpbi9mZmkuYyBzcmMvYmZpbi9zeXN2LlMKLUBYODZfVFJVRUBhbV9fYXBwZW5kXzQgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvc3lzdi5TCi1AWDg2X0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzUgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZnJlZWJzZC5TCitAWDg2X1RSVUVAYW1fX2FwcGVuZF80ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUyBzcmMveDg2L3dpbjMyLlMKK0BYODZfRlJFRUJTRF9UUlVFQGFtX19hcHBlbmRfNSA9IHNyYy94ODYvZmZpLmMgc3JjL3g4Ni9mcmVlYnNkLlMgc3JjL3g4Ni93aW4zMi5TCiBAWDg2X1dJTjMyX1RSVUVAYW1fX2FwcGVuZF82ID0gc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3dpbjMyLlMKIEBYODZfV0lONjRfVFJVRUBhbV9fYXBwZW5kXzcgPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvd2luNjQuUwogQFg4Nl9EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzggPSBzcmMveDg2L2ZmaS5jIHNyYy94ODYvZGFyd2luLlMgc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvZGFyd2luNjQuUwotQFNQQVJDX1RSVUVAYW1fX2FwcGVuZF85ID0gc3JjL3NwYXJjL2ZmaS5jIHNyYy9zcGFyYy92OC5TIHNyYy9zcGFyYy92OS5TCi1AQUxQSEFfVFJVRUBhbV9fYXBwZW5kXzEwID0gc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9vc2YuUwotQElBNjRfVFJVRUBhbV9fYXBwZW5kXzExID0gc3JjL2lhNjQvZmZpLmMgc3JjL2lhNjQvdW5peC5TCi1ATTMyUl9UUlVFQGFtX19hcHBlbmRfMTIgPSBzcmMvbTMyci9zeXN2LlMgc3JjL20zMnIvZmZpLmMKLUBNNjhLX1RSVUVAYW1fX2FwcGVuZF8xMyA9IHNyYy9tNjhrL2ZmaS5jIHNyYy9tNjhrL3N5c3YuUwotQE1PWElFX1RSVUVAYW1fX2FwcGVuZF8xNCA9IHNyYy9tb3hpZS9mZmkuYyBzcmMvbW94aWUvZWFiaS5TCi1ATUlDUk9CTEFaRV9UUlVFQGFtX19hcHBlbmRfMTUgPSBzcmMvbWljcm9ibGF6ZS9mZmkuYyBzcmMvbWljcm9ibGF6ZS9zeXN2LlMKLUBQT1dFUlBDX1RSVUVAYW1fX2FwcGVuZF8xNiA9IHNyYy9wb3dlcnBjL2ZmaS5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwotQFBPV0VSUENfQUlYX1RSVUVAYW1fX2FwcGVuZF8xNyA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9haXguUyBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCi1AUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzE4ID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2Rhcndpbi5TIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKLUBQT1dFUlBDX0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzE5ID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKLUBBQVJDSDY0X1RSVUVAYW1fX2FwcGVuZF8yMCA9IHNyYy9hYXJjaDY0L3N5c3YuUyBzcmMvYWFyY2g2NC9mZmkuYwotQEFSTV9UUlVFQGFtX19hcHBlbmRfMjEgPSBzcmMvYXJtL3N5c3YuUyBzcmMvYXJtL2ZmaS5jCi1AQVJNX1RSVUVAQEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEVfVFJVRUBhbV9fYXBwZW5kXzIyID0gc3JjL2FybS90cmFtcG9saW5lLlMKLUBBVlIzMl9UUlVFQGFtX19hcHBlbmRfMjMgPSBzcmMvYXZyMzIvc3lzdi5TIHNyYy9hdnIzMi9mZmkuYwotQExJQkZGSV9DUklTX1RSVUVAYW1fX2FwcGVuZF8yNCA9IHNyYy9jcmlzL3N5c3YuUyBzcmMvY3Jpcy9mZmkuYwotQEZSVl9UUlVFQGFtX19hcHBlbmRfMjUgPSBzcmMvZnJ2L2VhYmkuUyBzcmMvZnJ2L2ZmaS5jCi1AUzM5MF9UUlVFQGFtX19hcHBlbmRfMjYgPSBzcmMvczM5MC9zeXN2LlMgc3JjL3MzOTAvZmZpLmMKLUBYODZfNjRfVFJVRUBhbV9fYXBwZW5kXzI3ID0gc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvdW5peDY0LlMgc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUwotQFNIX1RSVUVAYW1fX2FwcGVuZF8yOCA9IHNyYy9zaC9zeXN2LlMgc3JjL3NoL2ZmaS5jCi1AU0g2NF9UUlVFQGFtX19hcHBlbmRfMjkgPSBzcmMvc2g2NC9zeXN2LlMgc3JjL3NoNjQvZmZpLmMKLUBQQV9MSU5VWF9UUlVFQGFtX19hcHBlbmRfMzAgPSBzcmMvcGEvbGludXguUyBzcmMvcGEvZmZpLmMKLUBQQV9IUFVYX1RSVUVAYW1fX2FwcGVuZF8zMSA9IHNyYy9wYS9ocHV4MzIuUyBzcmMvcGEvZmZpLmMKLUBUSUxFX1RSVUVAYW1fX2FwcGVuZF8zMiA9IHNyYy90aWxlL3RpbGUuUyBzcmMvdGlsZS9mZmkuYwotQFhURU5TQV9UUlVFQGFtX19hcHBlbmRfMzMgPSBzcmMveHRlbnNhL3N5c3YuUyBzcmMveHRlbnNhL2ZmaS5jCi1ATUVUQUdfVFJVRUBhbV9fYXBwZW5kXzM0ID0gc3JjL21ldGFnL3N5c3YuUyBzcmMvbWV0YWcvZmZpLmMKK0BYODZfREFSV0lOMzJfVFJVRUBAWDg2X0RBUldJTl9UUlVFQGFtX19hcHBlbmRfOSA9IHNyYy94ODYvd2luMzIuUworQFNQQVJDX1RSVUVAYW1fX2FwcGVuZF8xMCA9IHNyYy9zcGFyYy9mZmkuYyBzcmMvc3BhcmMvdjguUyBzcmMvc3BhcmMvdjkuUworQEFMUEhBX1RSVUVAYW1fX2FwcGVuZF8xMSA9IHNyYy9hbHBoYS9mZmkuYyBzcmMvYWxwaGEvb3NmLlMKK0BJQTY0X1RSVUVAYW1fX2FwcGVuZF8xMiA9IHNyYy9pYTY0L2ZmaS5jIHNyYy9pYTY0L3VuaXguUworQE0zMlJfVFJVRUBhbV9fYXBwZW5kXzEzID0gc3JjL20zMnIvc3lzdi5TIHNyYy9tMzJyL2ZmaS5jCitATTY4S19UUlVFQGFtX19hcHBlbmRfMTQgPSBzcmMvbTY4ay9mZmkuYyBzcmMvbTY4ay9zeXN2LlMKK0BNODhLX1RSVUVAYW1fX2FwcGVuZF8xNSA9IHNyYy9tODhrL2ZmaS5jIHNyYy9tODhrL29ic2QuUworQE1PWElFX1RSVUVAYW1fX2FwcGVuZF8xNiA9IHNyYy9tb3hpZS9mZmkuYyBzcmMvbW94aWUvZWFiaS5TCitATUlDUk9CTEFaRV9UUlVFQGFtX19hcHBlbmRfMTcgPSBzcmMvbWljcm9ibGF6ZS9mZmkuYyBzcmMvbWljcm9ibGF6ZS9zeXN2LlMKK0BOSU9TMl9UUlVFQGFtX19hcHBlbmRfMTggPSBzcmMvbmlvczIvc3lzdi5TIHNyYy9uaW9zMi9mZmkuYworQFBPV0VSUENfVFJVRUBhbV9fYXBwZW5kXzE5ID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvZmZpX3N5c3YuYyBzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jIHNyYy9wb3dlcnBjL3N5c3YuUyBzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUyBzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUworQFBPV0VSUENfQUlYX1RSVUVAYW1fX2FwcGVuZF8yMCA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4uYyBzcmMvcG93ZXJwYy9haXguUyBzcmMvcG93ZXJwYy9haXhfY2xvc3VyZS5TCitAUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fYXBwZW5kXzIxID0gc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIHNyYy9wb3dlcnBjL2Rhcndpbi5TIHNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKK0BQT1dFUlBDX0ZSRUVCU0RfVFJVRUBhbV9fYXBwZW5kXzIyID0gc3JjL3Bvd2VycGMvZmZpLmMgc3JjL3Bvd2VycGMvZmZpX3N5c3YuYyBzcmMvcG93ZXJwYy9zeXN2LlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUworQEFBUkNINjRfVFJVRUBhbV9fYXBwZW5kXzIzID0gc3JjL2FhcmNoNjQvc3lzdi5TIHNyYy9hYXJjaDY0L2ZmaS5jCitAQVJDX1RSVUVAYW1fX2FwcGVuZF8yNCA9IHNyYy9hcmMvYXJjb21wYWN0LlMgc3JjL2FyYy9mZmkuYworQEFSTV9UUlVFQGFtX19hcHBlbmRfMjUgPSBzcmMvYXJtL3N5c3YuUyBzcmMvYXJtL2ZmaS5jCitAQVJNX1RSVUVAQEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEVfVFJVRUBhbV9fYXBwZW5kXzI2ID0gc3JjL2FybS90cmFtcG9saW5lLlMKK0BBVlIzMl9UUlVFQGFtX19hcHBlbmRfMjcgPSBzcmMvYXZyMzIvc3lzdi5TIHNyYy9hdnIzMi9mZmkuYworQExJQkZGSV9DUklTX1RSVUVAYW1fX2FwcGVuZF8yOCA9IHNyYy9jcmlzL3N5c3YuUyBzcmMvY3Jpcy9mZmkuYworQEZSVl9UUlVFQGFtX19hcHBlbmRfMjkgPSBzcmMvZnJ2L2VhYmkuUyBzcmMvZnJ2L2ZmaS5jCitAUzM5MF9UUlVFQGFtX19hcHBlbmRfMzAgPSBzcmMvczM5MC9zeXN2LlMgc3JjL3MzOTAvZmZpLmMKK0BYODZfNjRfVFJVRUBhbV9fYXBwZW5kXzMxID0gc3JjL3g4Ni9mZmk2NC5jIHNyYy94ODYvdW5peDY0LlMgc3JjL3g4Ni9mZmkuYyBzcmMveDg2L3N5c3YuUworQFNIX1RSVUVAYW1fX2FwcGVuZF8zMiA9IHNyYy9zaC9zeXN2LlMgc3JjL3NoL2ZmaS5jCitAU0g2NF9UUlVFQGFtX19hcHBlbmRfMzMgPSBzcmMvc2g2NC9zeXN2LlMgc3JjL3NoNjQvZmZpLmMKK0BQQV9MSU5VWF9UUlVFQGFtX19hcHBlbmRfMzQgPSBzcmMvcGEvbGludXguUyBzcmMvcGEvZmZpLmMKK0BQQV9IUFVYX1RSVUVAYW1fX2FwcGVuZF8zNSA9IHNyYy9wYS9ocHV4MzIuUyBzcmMvcGEvZmZpLmMKK0BUSUxFX1RSVUVAYW1fX2FwcGVuZF8zNiA9IHNyYy90aWxlL3RpbGUuUyBzcmMvdGlsZS9mZmkuYworQFhURU5TQV9UUlVFQGFtX19hcHBlbmRfMzcgPSBzcmMveHRlbnNhL3N5c3YuUyBzcmMveHRlbnNhL2ZmaS5jCitATUVUQUdfVFJVRUBhbV9fYXBwZW5kXzM4ID0gc3JjL21ldGFnL3N5c3YuUyBzcmMvbWV0YWcvZmZpLmMKK0BWQVhfVFJVRUBhbV9fYXBwZW5kXzM5ID0gc3JjL3ZheC9lbGZic2QuUyBzcmMvdmF4L2ZmaS5jCisjIEJ1aWxkIGRlYnVnLiBEZWZpbmUgRkZJX0RFQlVHIG9uIHRoZSBjb21tYW5kbGluZSBzbyB0aGF0LCB3aGVuIGJ1aWxkaW5nIHdpdGgKKyMgTVNWQywgaXQgY2FuIGxpbmsgYWdhaW5zdCB0aGUgZGVidWcgQ1JULgorQEZGSV9ERUJVR19UUlVFQGFtX19hcHBlbmRfNDAgPSAtREZGSV9ERUJVRwogc3ViZGlyID0gLgotRElTVF9DT01NT04gPSBSRUFETUUgJChhbV9fY29uZmlndXJlX2RlcHMpICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCi0JJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9kb2Mvc3RhbXAtdnRpIFwKLQkkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aSAkKHNyY2RpcikvZmZpY29uZmlnLmguaW4gXAotCSQoc3JjZGlyKS9saWJmZmkucGMuaW4gJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgQ2hhbmdlTG9nIFwKLQljb21waWxlIGNvbmZpZy5ndWVzcyBjb25maWcuc3ViIGRlcGNvbXAgaW5zdGFsbC1zaCBsdG1haW4uc2ggXAotCW1kYXRlLXNoIG1pc3NpbmcgdGV4aW5mby50ZXgKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChhbV9fY29uZmlndXJlX2RlcHMpIFwKKwkkKHNyY2RpcikvZmZpY29uZmlnLmguaW4gJChzcmNkaXIpL2xpYmZmaS5wYy5pbiBkZXBjb21wIFwKKwltZGF0ZS1zaCAkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aSAkKHNyY2RpcikvZG9jL3N0YW1wLXZ0aSBcCisJdGV4aW5mby50ZXggUkVBRE1FIGNvbXBpbGUgY29uZmlnLmd1ZXNzIGNvbmZpZy5zdWIgaW5zdGFsbC1zaCBcCisJbWlzc2luZyBsdG1haW4uc2gKIEFDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKIGFtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL200L2FzbWNmaS5tNCBcCiAJJCh0b3Bfc3JjZGlyKS9tNC9heF9hcHBlbmRfZmxhZy5tNCBcCkBAIC0xNTQsNTAgKzE5MCw2MCBAQAogQE1JUFNfVFJVRUBhbV9fb2JqZWN0c18yID0gc3JjL21pcHMvZmZpLmxvIHNyYy9taXBzL28zMi5sbyBcCiBATUlQU19UUlVFQAlzcmMvbWlwcy9uMzIubG8KIEBCRklOX1RSVUVAYW1fX29iamVjdHNfMyA9IHNyYy9iZmluL2ZmaS5sbyBzcmMvYmZpbi9zeXN2LmxvCi1AWDg2X1RSVUVAYW1fX29iamVjdHNfNCA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvc3lzdi5sbwotQFg4Nl9GUkVFQlNEX1RSVUVAYW1fX29iamVjdHNfNSA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvZnJlZWJzZC5sbworQFg4Nl9UUlVFQGFtX19vYmplY3RzXzQgPSBzcmMveDg2L2ZmaS5sbyBzcmMveDg2L3N5c3YubG8gXAorQFg4Nl9UUlVFQAlzcmMveDg2L3dpbjMyLmxvCitAWDg2X0ZSRUVCU0RfVFJVRUBhbV9fb2JqZWN0c181ID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9mcmVlYnNkLmxvIFwKK0BYODZfRlJFRUJTRF9UUlVFQAlzcmMveDg2L3dpbjMyLmxvCiBAWDg2X1dJTjMyX1RSVUVAYW1fX29iamVjdHNfNiA9IHNyYy94ODYvZmZpLmxvIHNyYy94ODYvd2luMzIubG8KIEBYODZfV0lONjRfVFJVRUBhbV9fb2JqZWN0c183ID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni93aW42NC5sbwogQFg4Nl9EQVJXSU5fVFJVRUBhbV9fb2JqZWN0c184ID0gc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9kYXJ3aW4ubG8gXAogQFg4Nl9EQVJXSU5fVFJVRUAJc3JjL3g4Ni9mZmk2NC5sbyBzcmMveDg2L2RhcndpbjY0LmxvCi1AU1BBUkNfVFJVRUBhbV9fb2JqZWN0c185ID0gc3JjL3NwYXJjL2ZmaS5sbyBzcmMvc3BhcmMvdjgubG8gXAorQFg4Nl9EQVJXSU4zMl9UUlVFQEBYODZfREFSV0lOX1RSVUVAYW1fX29iamVjdHNfOSA9IHNyYy94ODYvd2luMzIubG8KK0BTUEFSQ19UUlVFQGFtX19vYmplY3RzXzEwID0gc3JjL3NwYXJjL2ZmaS5sbyBzcmMvc3BhcmMvdjgubG8gXAogQFNQQVJDX1RSVUVACXNyYy9zcGFyYy92OS5sbwotQEFMUEhBX1RSVUVAYW1fX29iamVjdHNfMTAgPSBzcmMvYWxwaGEvZmZpLmxvIHNyYy9hbHBoYS9vc2YubG8KLUBJQTY0X1RSVUVAYW1fX29iamVjdHNfMTEgPSBzcmMvaWE2NC9mZmkubG8gc3JjL2lhNjQvdW5peC5sbwotQE0zMlJfVFJVRUBhbV9fb2JqZWN0c18xMiA9IHNyYy9tMzJyL3N5c3YubG8gc3JjL20zMnIvZmZpLmxvCi1ATTY4S19UUlVFQGFtX19vYmplY3RzXzEzID0gc3JjL202OGsvZmZpLmxvIHNyYy9tNjhrL3N5c3YubG8KLUBNT1hJRV9UUlVFQGFtX19vYmplY3RzXzE0ID0gc3JjL21veGllL2ZmaS5sbyBzcmMvbW94aWUvZWFiaS5sbwotQE1JQ1JPQkxBWkVfVFJVRUBhbV9fb2JqZWN0c18xNSA9IHNyYy9taWNyb2JsYXplL2ZmaS5sbyBcCitAQUxQSEFfVFJVRUBhbV9fb2JqZWN0c18xMSA9IHNyYy9hbHBoYS9mZmkubG8gc3JjL2FscGhhL29zZi5sbworQElBNjRfVFJVRUBhbV9fb2JqZWN0c18xMiA9IHNyYy9pYTY0L2ZmaS5sbyBzcmMvaWE2NC91bml4LmxvCitATTMyUl9UUlVFQGFtX19vYmplY3RzXzEzID0gc3JjL20zMnIvc3lzdi5sbyBzcmMvbTMyci9mZmkubG8KK0BNNjhLX1RSVUVAYW1fX29iamVjdHNfMTQgPSBzcmMvbTY4ay9mZmkubG8gc3JjL202OGsvc3lzdi5sbworQE04OEtfVFJVRUBhbV9fb2JqZWN0c18xNSA9IHNyYy9tODhrL2ZmaS5sbyBzcmMvbTg4ay9vYnNkLmxvCitATU9YSUVfVFJVRUBhbV9fb2JqZWN0c18xNiA9IHNyYy9tb3hpZS9mZmkubG8gc3JjL21veGllL2VhYmkubG8KK0BNSUNST0JMQVpFX1RSVUVAYW1fX29iamVjdHNfMTcgPSBzcmMvbWljcm9ibGF6ZS9mZmkubG8gXAogQE1JQ1JPQkxBWkVfVFJVRUAJc3JjL21pY3JvYmxhemUvc3lzdi5sbwotQFBPV0VSUENfVFJVRUBhbV9fb2JqZWN0c18xNiA9IHNyYy9wb3dlcnBjL2ZmaS5sbyBzcmMvcG93ZXJwYy9zeXN2LmxvIFwKK0BOSU9TMl9UUlVFQGFtX19vYmplY3RzXzE4ID0gc3JjL25pb3MyL3N5c3YubG8gc3JjL25pb3MyL2ZmaS5sbworQFBPV0VSUENfVFJVRUBhbV9fb2JqZWN0c18xOSA9IHNyYy9wb3dlcnBjL2ZmaS5sbyBcCitAUE9XRVJQQ19UUlVFQAlzcmMvcG93ZXJwYy9mZmlfc3lzdi5sbyBcCitAUE9XRVJQQ19UUlVFQAlzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5sbyBzcmMvcG93ZXJwYy9zeXN2LmxvIFwKIEBQT1dFUlBDX1RSVUVACXNyYy9wb3dlcnBjL3BwY19jbG9zdXJlLmxvIFwKIEBQT1dFUlBDX1RSVUVACXNyYy9wb3dlcnBjL2xpbnV4NjQubG8gXAogQFBPV0VSUENfVFJVRUAJc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLmxvCi1AUE9XRVJQQ19BSVhfVFJVRUBhbV9fb2JqZWN0c18xNyA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAorQFBPV0VSUENfQUlYX1RSVUVAYW1fX29iamVjdHNfMjAgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmxvIFwKIEBQT1dFUlBDX0FJWF9UUlVFQAlzcmMvcG93ZXJwYy9haXgubG8gXAogQFBPV0VSUENfQUlYX1RSVUVACXNyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLmxvCi1AUE9XRVJQQ19EQVJXSU5fVFJVRUBhbV9fb2JqZWN0c18xOCA9IHNyYy9wb3dlcnBjL2ZmaV9kYXJ3aW4ubG8gXAorQFBPV0VSUENfREFSV0lOX1RSVUVAYW1fX29iamVjdHNfMjEgPSBzcmMvcG93ZXJwYy9mZmlfZGFyd2luLmxvIFwKIEBQT1dFUlBDX0RBUldJTl9UUlVFQAlzcmMvcG93ZXJwYy9kYXJ3aW4ubG8gXAogQFBPV0VSUENfREFSV0lOX1RSVUVACXNyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLmxvCi1AUE9XRVJQQ19GUkVFQlNEX1RSVUVAYW1fX29iamVjdHNfMTkgPSBzcmMvcG93ZXJwYy9mZmkubG8gXAorQFBPV0VSUENfRlJFRUJTRF9UUlVFQGFtX19vYmplY3RzXzIyID0gc3JjL3Bvd2VycGMvZmZpLmxvIFwKK0BQT1dFUlBDX0ZSRUVCU0RfVFJVRUAJc3JjL3Bvd2VycGMvZmZpX3N5c3YubG8gXAogQFBPV0VSUENfRlJFRUJTRF9UUlVFQAlzcmMvcG93ZXJwYy9zeXN2LmxvIFwKIEBQT1dFUlBDX0ZSRUVCU0RfVFJVRUAJc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUubG8KLUBBQVJDSDY0X1RSVUVAYW1fX29iamVjdHNfMjAgPSBzcmMvYWFyY2g2NC9zeXN2LmxvIHNyYy9hYXJjaDY0L2ZmaS5sbwotQEFSTV9UUlVFQGFtX19vYmplY3RzXzIxID0gc3JjL2FybS9zeXN2LmxvIHNyYy9hcm0vZmZpLmxvCi1AQVJNX1RSVUVAQEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEVfVFJVRUBhbV9fb2JqZWN0c18yMiA9IHNyYy9hcm0vdHJhbXBvbGluZS5sbwotQEFWUjMyX1RSVUVAYW1fX29iamVjdHNfMjMgPSBzcmMvYXZyMzIvc3lzdi5sbyBzcmMvYXZyMzIvZmZpLmxvCi1ATElCRkZJX0NSSVNfVFJVRUBhbV9fb2JqZWN0c18yNCA9IHNyYy9jcmlzL3N5c3YubG8gc3JjL2NyaXMvZmZpLmxvCi1ARlJWX1RSVUVAYW1fX29iamVjdHNfMjUgPSBzcmMvZnJ2L2VhYmkubG8gc3JjL2Zydi9mZmkubG8KLUBTMzkwX1RSVUVAYW1fX29iamVjdHNfMjYgPSBzcmMvczM5MC9zeXN2LmxvIHNyYy9zMzkwL2ZmaS5sbwotQFg4Nl82NF9UUlVFQGFtX19vYmplY3RzXzI3ID0gc3JjL3g4Ni9mZmk2NC5sbyBzcmMveDg2L3VuaXg2NC5sbyBcCitAQUFSQ0g2NF9UUlVFQGFtX19vYmplY3RzXzIzID0gc3JjL2FhcmNoNjQvc3lzdi5sbyBzcmMvYWFyY2g2NC9mZmkubG8KK0BBUkNfVFJVRUBhbV9fb2JqZWN0c18yNCA9IHNyYy9hcmMvYXJjb21wYWN0LmxvIHNyYy9hcmMvZmZpLmxvCitAQVJNX1RSVUVAYW1fX29iamVjdHNfMjUgPSBzcmMvYXJtL3N5c3YubG8gc3JjL2FybS9mZmkubG8KK0BBUk1fVFJVRUBARkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRV9UUlVFQGFtX19vYmplY3RzXzI2ID0gc3JjL2FybS90cmFtcG9saW5lLmxvCitAQVZSMzJfVFJVRUBhbV9fb2JqZWN0c18yNyA9IHNyYy9hdnIzMi9zeXN2LmxvIHNyYy9hdnIzMi9mZmkubG8KK0BMSUJGRklfQ1JJU19UUlVFQGFtX19vYmplY3RzXzI4ID0gc3JjL2NyaXMvc3lzdi5sbyBzcmMvY3Jpcy9mZmkubG8KK0BGUlZfVFJVRUBhbV9fb2JqZWN0c18yOSA9IHNyYy9mcnYvZWFiaS5sbyBzcmMvZnJ2L2ZmaS5sbworQFMzOTBfVFJVRUBhbV9fb2JqZWN0c18zMCA9IHNyYy9zMzkwL3N5c3YubG8gc3JjL3MzOTAvZmZpLmxvCitAWDg2XzY0X1RSVUVAYW1fX29iamVjdHNfMzEgPSBzcmMveDg2L2ZmaTY0LmxvIHNyYy94ODYvdW5peDY0LmxvIFwKIEBYODZfNjRfVFJVRUAJc3JjL3g4Ni9mZmkubG8gc3JjL3g4Ni9zeXN2LmxvCi1AU0hfVFJVRUBhbV9fb2JqZWN0c18yOCA9IHNyYy9zaC9zeXN2LmxvIHNyYy9zaC9mZmkubG8KLUBTSDY0X1RSVUVAYW1fX29iamVjdHNfMjkgPSBzcmMvc2g2NC9zeXN2LmxvIHNyYy9zaDY0L2ZmaS5sbwotQFBBX0xJTlVYX1RSVUVAYW1fX29iamVjdHNfMzAgPSBzcmMvcGEvbGludXgubG8gc3JjL3BhL2ZmaS5sbwotQFBBX0hQVVhfVFJVRUBhbV9fb2JqZWN0c18zMSA9IHNyYy9wYS9ocHV4MzIubG8gc3JjL3BhL2ZmaS5sbwotQFRJTEVfVFJVRUBhbV9fb2JqZWN0c18zMiA9IHNyYy90aWxlL3RpbGUubG8gc3JjL3RpbGUvZmZpLmxvCi1AWFRFTlNBX1RSVUVAYW1fX29iamVjdHNfMzMgPSBzcmMveHRlbnNhL3N5c3YubG8gc3JjL3h0ZW5zYS9mZmkubG8KLUBNRVRBR19UUlVFQGFtX19vYmplY3RzXzM0ID0gc3JjL21ldGFnL3N5c3YubG8gc3JjL21ldGFnL2ZmaS5sbworQFNIX1RSVUVAYW1fX29iamVjdHNfMzIgPSBzcmMvc2gvc3lzdi5sbyBzcmMvc2gvZmZpLmxvCitAU0g2NF9UUlVFQGFtX19vYmplY3RzXzMzID0gc3JjL3NoNjQvc3lzdi5sbyBzcmMvc2g2NC9mZmkubG8KK0BQQV9MSU5VWF9UUlVFQGFtX19vYmplY3RzXzM0ID0gc3JjL3BhL2xpbnV4LmxvIHNyYy9wYS9mZmkubG8KK0BQQV9IUFVYX1RSVUVAYW1fX29iamVjdHNfMzUgPSBzcmMvcGEvaHB1eDMyLmxvIHNyYy9wYS9mZmkubG8KK0BUSUxFX1RSVUVAYW1fX29iamVjdHNfMzYgPSBzcmMvdGlsZS90aWxlLmxvIHNyYy90aWxlL2ZmaS5sbworQFhURU5TQV9UUlVFQGFtX19vYmplY3RzXzM3ID0gc3JjL3h0ZW5zYS9zeXN2LmxvIHNyYy94dGVuc2EvZmZpLmxvCitATUVUQUdfVFJVRUBhbV9fb2JqZWN0c18zOCA9IHNyYy9tZXRhZy9zeXN2LmxvIHNyYy9tZXRhZy9mZmkubG8KK0BWQVhfVFJVRUBhbV9fb2JqZWN0c18zOSA9IHNyYy92YXgvZWxmYnNkLmxvIHNyYy92YXgvZmZpLmxvCiBub2Rpc3RfbGliZmZpX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgXAogCSQoYW1fX29iamVjdHNfMykgJChhbV9fb2JqZWN0c180KSAkKGFtX19vYmplY3RzXzUpIFwKIAkkKGFtX19vYmplY3RzXzYpICQoYW1fX29iamVjdHNfNykgJChhbV9fb2JqZWN0c184KSBcCkBAIC0yMDksMTcgKzI1NSwyMyBAQAogCSQoYW1fX29iamVjdHNfMjQpICQoYW1fX29iamVjdHNfMjUpICQoYW1fX29iamVjdHNfMjYpIFwKIAkkKGFtX19vYmplY3RzXzI3KSAkKGFtX19vYmplY3RzXzI4KSAkKGFtX19vYmplY3RzXzI5KSBcCiAJJChhbV9fb2JqZWN0c18zMCkgJChhbV9fb2JqZWN0c18zMSkgJChhbV9fb2JqZWN0c18zMikgXAotCSQoYW1fX29iamVjdHNfMzMpICQoYW1fX29iamVjdHNfMzQpCisJJChhbV9fb2JqZWN0c18zMykgJChhbV9fb2JqZWN0c18zNCkgJChhbV9fb2JqZWN0c18zNSkgXAorCSQoYW1fX29iamVjdHNfMzYpICQoYW1fX29iamVjdHNfMzcpICQoYW1fX29iamVjdHNfMzgpIFwKKwkkKGFtX19vYmplY3RzXzM5KQogbGliZmZpX2xhX09CSkVDVFMgPSAkKGFtX2xpYmZmaV9sYV9PQkpFQ1RTKSBcCiAJJChub2Rpc3RfbGliZmZpX2xhX09CSkVDVFMpCi1saWJmZmlfbGFfTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgJChBTV9MSUJUT09MRkxBR1MpIFwKK0FNX1ZfbHQgPSAkKGFtX192X2x0X0BBTV9WQCkKK2FtX192X2x0XyA9ICQoYW1fX3ZfbHRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9sdF8wID0gLS1zaWxlbnQKK2FtX192X2x0XzEgPSAKK2xpYmZmaV9sYV9MSU5LID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCiAJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCiAJJChsaWJmZmlfbGFfTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAogbGliZmZpX2NvbnZlbmllbmNlX2xhX0xJQkFERCA9Ci1hbV9fb2JqZWN0c18zNSA9IHNyYy9wcmVwX2NpZi5sbyBzcmMvdHlwZXMubG8gc3JjL3Jhd19hcGkubG8gXAorYW1fX29iamVjdHNfNDAgPSBzcmMvcHJlcF9jaWYubG8gc3JjL3R5cGVzLmxvIHNyYy9yYXdfYXBpLmxvIFwKIAlzcmMvamF2YV9yYXdfYXBpLmxvIHNyYy9jbG9zdXJlcy5sbwotYW1fbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzM1KQotYW1fX29iamVjdHNfMzYgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikgJChhbV9fb2JqZWN0c18zKSBcCithbV9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfNDApCithbV9fb2JqZWN0c180MSA9ICQoYW1fX29iamVjdHNfMSkgJChhbV9fb2JqZWN0c18yKSAkKGFtX19vYmplY3RzXzMpIFwKIAkkKGFtX19vYmplY3RzXzQpICQoYW1fX29iamVjdHNfNSkgJChhbV9fb2JqZWN0c182KSBcCiAJJChhbV9fb2JqZWN0c183KSAkKGFtX19vYmplY3RzXzgpICQoYW1fX29iamVjdHNfOSkgXAogCSQoYW1fX29iamVjdHNfMTApICQoYW1fX29iamVjdHNfMTEpICQoYW1fX29iamVjdHNfMTIpIFwKQEAgLTIzMCwzMiArMjgyLDg3IEBACiAJJChhbV9fb2JqZWN0c18yNSkgJChhbV9fb2JqZWN0c18yNikgJChhbV9fb2JqZWN0c18yNykgXAogCSQoYW1fX29iamVjdHNfMjgpICQoYW1fX29iamVjdHNfMjkpICQoYW1fX29iamVjdHNfMzApIFwKIAkkKGFtX19vYmplY3RzXzMxKSAkKGFtX19vYmplY3RzXzMyKSAkKGFtX19vYmplY3RzXzMzKSBcCi0JJChhbV9fb2JqZWN0c18zNCkKLW5vZGlzdF9saWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fX29iamVjdHNfMzYpCisJJChhbV9fb2JqZWN0c18zNCkgJChhbV9fb2JqZWN0c18zNSkgJChhbV9fb2JqZWN0c18zNikgXAorCSQoYW1fX29iamVjdHNfMzcpICQoYW1fX29iamVjdHNfMzgpICQoYW1fX29iamVjdHNfMzkpCitub2Rpc3RfbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzQxKQogbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMgPSAkKGFtX2xpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTKSBcCiAJJChub2Rpc3RfbGliZmZpX2NvbnZlbmllbmNlX2xhX09CSkVDVFMpCitBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCithbV9fdl9QXzAgPSBmYWxzZQorYW1fX3ZfUF8xID0gOgorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKK2FtX192X0dFTl8xID0gCitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK2FtX192X2F0XzEgPSAKIERFRkFVTFRfSU5DTFVERVMgPSAtSS5AYW1fX2lzcmNACiBkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9kZXBjb21wCiBhbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcwogYW1fX212ID0gbXYgLWYKIENQUEFTQ09NUElMRSA9ICQoQ0NBUykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpIFwKIAkkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSAkKEFNX0NDQVNGTEFHUykgJChDQ0FTRkxBR1MpCi1MVENQUEFTQ09NUElMRSA9ICQoTElCVE9PTCkgJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCi0JLS1tb2RlPWNvbXBpbGUgJChDQ0FTKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgXAotCSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ0NBU0ZMQUdTKSAkKENDQVNGTEFHUykKK0xUQ1BQQVNDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0NBUykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DQ0FTRkxBR1MpICQoQ0NBU0ZMQUdTKQorQU1fVl9DUFBBUyA9ICQoYW1fX3ZfQ1BQQVNfQEFNX1ZAKQorYW1fX3ZfQ1BQQVNfID0gJChhbV9fdl9DUFBBU19AQU1fREVGQVVMVF9WQCkKK2FtX192X0NQUEFTXzAgPSBAZWNobyAiICBDUFBBUyAgICIgJEA7CithbV9fdl9DUFBBU18xID0gCiBDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKIAkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCi1MVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSAkKExJQlRPT0xGTEFHUykgXAotCS0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSBcCi0JJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAkKEFNX1ZfbHQpIC0tdGFnPUNDICQoQU1fTElCVE9PTEZMQUdTKSBcCisJJChMSUJUT09MRkxBR1MpIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0FNX1ZfQ0MgPSAkKGFtX192X0NDX0BBTV9WQCkKK2FtX192X0NDXyA9ICQoYW1fX3ZfQ0NfQEFNX0RFRkFVTFRfVkApCithbV9fdl9DQ18wID0gQGVjaG8gIiAgQ0MgICAgICAiICRAOworYW1fX3ZfQ0NfMSA9IAogQ0NMRCA9ICQoQ0MpCi1MSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09MRkxBR1MpIFwKLQktLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgJChBTV9MREZMQUdTKSBcCi0JJChMREZMQUdTKSAtbyAkQAorTElOSyA9ICQoTElCVE9PTCkgJChBTV9WX2x0KSAtLXRhZz1DQyAkKEFNX0xJQlRPT0xGTEFHUykgXAorCSQoTElCVE9PTEZMQUdTKSAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorQU1fVl9DQ0xEID0gJChhbV9fdl9DQ0xEX0BBTV9WQCkKK2FtX192X0NDTERfID0gJChhbV9fdl9DQ0xEX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfQ0NMRF8wID0gQGVjaG8gIiAgQ0NMRCAgICAiICRAOworYW1fX3ZfQ0NMRF8xID0gCiBTT1VSQ0VTID0gJChsaWJmZmlfbGFfU09VUkNFUykgJChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpIFwKIAkkKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTKSBcCiAJJChub2Rpc3RfbGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMpCiBESVNUX1NPVVJDRVMgPSAkKGxpYmZmaV9sYV9TT1VSQ0VTKSAkKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTKQorQU1fVl9EVklQUyA9ICQoYW1fX3ZfRFZJUFNfQEFNX1ZAKQorYW1fX3ZfRFZJUFNfID0gJChhbV9fdl9EVklQU19AQU1fREVGQVVMVF9WQCkKK2FtX192X0RWSVBTXzAgPSBAZWNobyAiICBEVklQUyAgICIgJEA7CithbV9fdl9EVklQU18xID0gCitBTV9WX01BS0VJTkZPID0gJChhbV9fdl9NQUtFSU5GT19AQU1fVkApCithbV9fdl9NQUtFSU5GT18gPSAkKGFtX192X01BS0VJTkZPX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfTUFLRUlORk9fMCA9IEBlY2hvICIgIE1BS0VJTkZPIiAkQDsKK2FtX192X01BS0VJTkZPXzEgPSAKK0FNX1ZfSU5GT0hUTUwgPSAkKGFtX192X0lORk9IVE1MX0BBTV9WQCkKK2FtX192X0lORk9IVE1MXyA9ICQoYW1fX3ZfSU5GT0hUTUxfQEFNX0RFRkFVTFRfVkApCithbV9fdl9JTkZPSFRNTF8wID0gQGVjaG8gIiAgSU5GT0hUTUwiICRAOworYW1fX3ZfSU5GT0hUTUxfMSA9IAorQU1fVl9URVhJMkRWSSA9ICQoYW1fX3ZfVEVYSTJEVklfQEFNX1ZAKQorYW1fX3ZfVEVYSTJEVklfID0gJChhbV9fdl9URVhJMkRWSV9AQU1fREVGQVVMVF9WQCkKK2FtX192X1RFWEkyRFZJXzAgPSBAZWNobyAiICBURVhJMkRWSSIgJEA7CithbV9fdl9URVhJMkRWSV8xID0gCitBTV9WX1RFWEkyUERGID0gJChhbV9fdl9URVhJMlBERl9AQU1fVkApCithbV9fdl9URVhJMlBERl8gPSAkKGFtX192X1RFWEkyUERGX0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfVEVYSTJQREZfMCA9IEBlY2hvICIgIFRFWEkyUERGIiAkQDsKK2FtX192X1RFWEkyUERGXzEgPSAKK0FNX1ZfdGV4aW5mbyA9ICQoYW1fX3ZfdGV4aW5mb19AQU1fVkApCithbV9fdl90ZXhpbmZvXyA9ICQoYW1fX3ZfdGV4aW5mb19AQU1fREVGQVVMVF9WQCkKK2FtX192X3RleGluZm9fMCA9IC1xCithbV9fdl90ZXhpbmZvXzEgPSAKK0FNX1ZfdGV4aWRldm51bGwgPSAkKGFtX192X3RleGlkZXZudWxsX0BBTV9WQCkKK2FtX192X3RleGlkZXZudWxsXyA9ICQoYW1fX3ZfdGV4aWRldm51bGxfQEFNX0RFRkFVTFRfVkApCithbV9fdl90ZXhpZGV2bnVsbF8wID0gPiAvZGV2L251bGwKK2FtX192X3RleGlkZXZudWxsXzEgPSAKIElORk9fREVQUyA9ICQoc3JjZGlyKS9kb2MvbGliZmZpLmluZm8KIGFtX19URVhJTkZPX1RFWF9ESVIgPSAkKHNyY2RpcikKIERWSVMgPSBkb2MvbGliZmZpLmR2aQpAQCAtMjY4LDEzICszNzUsMTQgQEAKIE1BS0VJTkZPSFRNTCA9ICQoTUFLRUlORk8pIC0taHRtbAogQU1fTUFLRUlORk9IVE1MRkxBR1MgPSAkKEFNX01BS0VJTkZPRkxBR1MpCiBEVklQUyA9IGR2aXBzCi1SRUNVUlNJVkVfVEFSR0VUUyA9IGFsbC1yZWN1cnNpdmUgY2hlY2stcmVjdXJzaXZlIGR2aS1yZWN1cnNpdmUgXAotCWh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIGluc3RhbGwtZGF0YS1yZWN1cnNpdmUgXAotCWluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIFwKLQlpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAotCWluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBpbnN0YWxsLXBzLXJlY3Vyc2l2ZSBpbnN0YWxsLXJlY3Vyc2l2ZSBcCi0JaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBpbnN0YWxsZGlycy1yZWN1cnNpdmUgcGRmLXJlY3Vyc2l2ZSBcCi0JcHMtcmVjdXJzaXZlIHVuaW5zdGFsbC1yZWN1cnNpdmUKK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgY3Njb3BlbGlzdC1yZWN1cnNpdmUgXAorCWN0YWdzLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIGh0bWwtcmVjdXJzaXZlIGluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIGluc3RhbGwtZHZpLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWh0bWwtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWluZm8tcmVjdXJzaXZlIGluc3RhbGwtcGRmLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1wcy1yZWN1cnNpdmUgaW5zdGFsbC1yZWN1cnNpdmUgaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbGRpcnMtcmVjdXJzaXZlIHBkZi1yZWN1cnNpdmUgcHMtcmVjdXJzaXZlIFwKKwl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtcmVjdXJzaXZlCiBhbV9fY2FuX3J1bl9pbnN0YWxsaW5mbyA9IFwKICAgY2FzZSAkJEFNX1VQREFURV9JTkZPX0RJUiBpbiBcCiAgICAgbnxub3xOTykgZmFsc2U7OyBcCkBAIC0yODMsOSArMzkxLDMwIEBACiBEQVRBID0gJChwa2djb25maWdfREFUQSkKIFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTID0gbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZQlcCiAgIGRpc3RjbGVhbi1yZWN1cnNpdmUgbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKLUFNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChSRUNVUlNJVkVfVEFSR0VUUzotcmVjdXJzaXZlPSkgXAotCSQoUkVDVVJTSVZFX0NMRUFOX1RBUkdFVFM6LXJlY3Vyc2l2ZT0pIHRhZ3MgVEFHUyBjdGFncyBDVEFHUyBcCithbV9fcmVjdXJzaXZlX3RhcmdldHMgPSBcCisgICQoUkVDVVJTSVZFX1RBUkdFVFMpIFwKKyAgJChSRUNVUlNJVkVfQ0xFQU5fVEFSR0VUUykgXAorICAkKGFtX19leHRyYV9yZWN1cnNpdmVfdGFyZ2V0cykKK0FNX1JFQ1VSU0lWRV9UQVJHRVRTID0gJChhbV9fcmVjdXJzaXZlX3RhcmdldHM6LXJlY3Vyc2l2ZT0pIFRBR1MgQ1RBR1MgXAogCWNzY29wZSBkaXN0ZGlyIGRpc3QgZGlzdC1hbGwgZGlzdGNoZWNrCithbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgXAorCSQoTElTUClmZmljb25maWcuaC5pbgorIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCisjICpub3QqIHByZXNlcnZlZC4KK2FtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAorICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCisgIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorJworIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAorIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCisjIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgorYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKKyAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKyAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKyAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKyAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKIEVUQUdTID0gZXRhZ3MKIENUQUdTID0gY3RhZ3MKIENTQ09QRSA9IGNzY29wZQpAQCAtMzM1LDYgKzQ2NCw3IEBACiBBQ0xPQ0FMID0gQEFDTE9DQUxACiBBTExPQ0EgPSBAQUxMT0NBQAogQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKIEFNX0xUTERGTEFHUyA9IEBBTV9MVExERkxBR1NACiBBTV9SVU5URVNURkxBR1MgPSBAQU1fUlVOVEVTVEZMQUdTQAogQVIgPSBAQVJACkBAIC0zNTAsNiArNDgwLDEwIEBACiBDRkxBR1MgPSBAQ0ZMQUdTQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKIENZR1BBVEhfVyA9IEBDWUdQQVRIX1dACiBERUZTID0gQERFRlNACiBERVBESVIgPSBAREVQRElSQApAQCAtMzY1LDYgKzQ5OSw3IEBACiBGR1JFUCA9IEBGR1JFUEAKIEdSRVAgPSBAR1JFUEAKIEhBVkVfTE9OR19ET1VCTEUgPSBASEFWRV9MT05HX0RPVUJMRUAKK0hBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCA9IEBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlRACiBJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKQEAgLTQxMSw2ICs1NDYsNyBAQAogYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9BUiA9IEBhY19jdF9BUkAKIGFjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKIGFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKIGFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAogYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKQEAgLTQ2OCwxMCArNjA0LDExIEBACiBBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBzdWJkaXItb2JqZWN0cwogQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQKIFNVQkRJUlMgPSBpbmNsdWRlIHRlc3RzdWl0ZSBtYW4KLUVYVFJBX0RJU1QgPSBMSUNFTlNFIENoYW5nZUxvZy52MSBDaGFuZ2VMb2cubGliZ2NqIGNvbmZpZ3VyZS5ob3N0CVwKK0VYVFJBX0RJU1QgPSBMSUNFTlNFIENoYW5nZUxvZy52MSBDaGFuZ2VMb2cubGliZ2NqCQkJXAogCSBzcmMvYWFyY2g2NC9mZmkuYyBzcmMvYWFyY2g2NC9mZml0YXJnZXQuaCBzcmMvYWFyY2g2NC9zeXN2LlMJXAotCSBidWlsZC1pb3Muc2ggc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9vc2YuUwkJCVwKLQkgc3JjL2FscGhhL2ZmaXRhcmdldC5oIHNyYy9hcm0vZmZpLmMgc3JjL2FybS9zeXN2LlMJCVwKKwkgc3JjL2FscGhhL2ZmaS5jIHNyYy9hbHBoYS9vc2YuUwkJCVwKKwkgc3JjL2FscGhhL2ZmaXRhcmdldC5oIHNyYy9hcmMvZmZpLmMgc3JjL2FyYy9hcmNvbXBhY3QuUwlcCisJIHNyYy9hcmMvZmZpdGFyZ2V0Lmggc3JjL2FybS9mZmkuYyBzcmMvYXJtL3N5c3YuUwkJXAogCSBzcmMvYXJtL2ZmaXRhcmdldC5oIHNyYy9hdnIzMi9mZmkuYyBzcmMvYXZyMzIvc3lzdi5TCQlcCiAJIHNyYy9hdnIzMi9mZml0YXJnZXQuaCBzcmMvY3Jpcy9mZmkuYyBzcmMvY3Jpcy9zeXN2LlMJCVwKIAkgc3JjL2NyaXMvZmZpdGFyZ2V0Lmggc3JjL2lhNjQvZmZpLmMgc3JjL2lhNjQvZmZpdGFyZ2V0LmgJXApAQCAtNDgxLDggKzYxOCwxMiBAQAogCSBzcmMvbW94aWUvZmZpdGFyZ2V0Lmggc3JjL21veGllL2VhYmkuUyBzcmMvbWlwcy9mZml0YXJnZXQuaAlcCiAJIHNyYy9tMzJyL2ZmaS5jIHNyYy9tMzJyL3N5c3YuUyBzcmMvbTMyci9mZml0YXJnZXQuaAkJXAogCSBzcmMvbTY4ay9mZmkuYyBzcmMvbTY4ay9zeXN2LlMgc3JjL202OGsvZmZpdGFyZ2V0LmgJCVwKKwkgc3JjL204OGsvZmZpLmMgc3JjL204OGsvb2JzZC5TIHNyYy9tODhrL2ZmaXRhcmdldC5oCQlcCiAJIHNyYy9taWNyb2JsYXplL2ZmaS5jIHNyYy9taWNyb2JsYXplL3N5c3YuUwkJCVwKLQkgc3JjL21pY3JvYmxhemUvZmZpdGFyZ2V0Lmggc3JjL3Bvd2VycGMvZmZpLmMJCQlcCisJIHNyYy9taWNyb2JsYXplL2ZmaXRhcmdldC5oCQkJCQlcCisJIHNyYy9uaW9zMi9mZmkuYyBzcmMvbmlvczIvZmZpdGFyZ2V0Lmggc3JjL25pb3MyL3N5c3YuUwkJXAorCSBzcmMvcG93ZXJwYy9mZmkuYyBzcmMvcG93ZXJwYy9mZmlfcG93ZXJwYy5oCQkJXAorCSBzcmMvcG93ZXJwYy9mZmlfc3lzdi5jIHNyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMJCVwKIAkgc3JjL3Bvd2VycGMvc3lzdi5TIHNyYy9wb3dlcnBjL2xpbnV4NjQuUwkJCVwKIAkgc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUwlcCiAJIHNyYy9wb3dlcnBjL2FzbS5oIHNyYy9wb3dlcnBjL2FpeC5TIHNyYy9wb3dlcnBjL2Rhcndpbi5TCVwKQEAgLTUwMCwxNCArNjQxLDE0IEBACiAJIHNyYy9iZmluL2ZmaXRhcmdldC5oIHNyYy9iZmluL3N5c3YuUyBzcmMvZnJ2L2VhYmkuUwkJXAogCSBzcmMvZnJ2L2ZmaXRhcmdldC5oIHNyYy9kbG1hbGxvYy5jIHNyYy90aWxlL2ZmaS5jCQlcCiAJIHNyYy90aWxlL2ZmaXRhcmdldC5oIHNyYy90aWxlL3RpbGUuUyBsaWJ0b29sLXZlcnNpb24JCVwKKwkgc3JjL3ZheC9mZmkuYyBzcmMvdmF4L2ZmaXRhcmdldC5oIHNyYy92YXgvZWxmYnNkLlMJCVwKIAkgc3JjL3h0ZW5zYS9mZml0YXJnZXQuaCBzcmMveHRlbnNhL2ZmaS5jIHNyYy94dGVuc2Evc3lzdi5TCVwKIAkgQ2hhbmdlTG9nLmxpYmZmaSBtNC9saWJ0b29sLm00IG00L2x0fm9ic29sZXRlLm00CQlcCiAJIG00L2x0b3B0aW9ucy5tNCBtNC9sdHN1Z2FyLm00IG00L2x0dmVyc2lvbi5tNAkJCVwKIAkgbTQvbHR2ZXJzaW9uLm00IHNyYy9hcm0vZ2VudHJhbXAuc2ggc3JjL2RlYnVnLmMgbXN2Y2Muc2gJXAotCSBnZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5CQkJCVwKLQkgZ2VuZXJhdGUtb3N4LXNvdXJjZS1hbmQtaGVhZGVycy5weQkJCQlcCisJIGdlbmVyYXRlLWRhcndpbi1zb3VyY2UtYW5kLWhlYWRlcnMucHkJCQkJXAogCSBsaWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBzcmMvYXJtL3RyYW1wb2xpbmUuUwkJXAotCSBsaWJ0b29sLWxkZmxhZ3MKKwkgbGlidG9vbC1sZGZsYWdzIENoYW5nZUxvZy5saWJmZmktMy4xCiAKIGluZm9fVEVYSU5GT1MgPSBkb2MvbGliZmZpLnRleGkKIApAQCAtNTE1LDM5ICs2NTYsMzkgQEAKICMgdmFsdWVzIGRlZmluZWQgaW4gdGVybXMgb2YgbWFrZSB2YXJpYWJsZXMsIGFzIGlzIHRoZSBjYXNlIGZvciBDQyBhbmQKICMgZnJpZW5kcyB3aGVuIHdlIGFyZSBjYWxsZWQgZnJvbSB0aGUgdG9wIGxldmVsIE1ha2VmaWxlLgogQU1fTUFLRUZMQUdTID0gXAotCSJBUl9GTEFHUz0kKEFSX0ZMQUdTKSIgXAotCSJDQ19GT1JfQlVJTEQ9JChDQ19GT1JfQlVJTEQpIiBcCi0JIkNGTEFHUz0kKENGTEFHUykiIFwKLQkiQ1hYRkxBR1M9JChDWFhGTEFHUykiIFwKLQkiQ0ZMQUdTX0ZPUl9CVUlMRD0kKENGTEFHU19GT1JfQlVJTEQpIiBcCi0JIkNGTEFHU19GT1JfVEFSR0VUPSQoQ0ZMQUdTX0ZPUl9UQVJHRVQpIiBcCi0JIklOU1RBTEw9JChJTlNUQUxMKSIgXAotCSJJTlNUQUxMX0RBVEE9JChJTlNUQUxMX0RBVEEpIiBcCi0JIklOU1RBTExfUFJPR1JBTT0kKElOU1RBTExfUFJPR1JBTSkiIFwKLQkiSU5TVEFMTF9TQ1JJUFQ9JChJTlNUQUxMX1NDUklQVCkiIFwKLQkiSkMxRkxBR1M9JChKQzFGTEFHUykiIFwKLQkiTERGTEFHUz0kKExERkxBR1MpIiBcCi0JIkxJQkNGTEFHUz0kKExJQkNGTEFHUykiIFwKLQkiTElCQ0ZMQUdTX0ZPUl9UQVJHRVQ9JChMSUJDRkxBR1NfRk9SX1RBUkdFVCkiIFwKLQkiTUFLRT0kKE1BS0UpIiBcCi0JIk1BS0VJTkZPPSQoTUFLRUlORk8pICQoTUFLRUlORk9GTEFHUykiIFwKLQkiUElDRkxBRz0kKFBJQ0ZMQUcpIiBcCi0JIlBJQ0ZMQUdfRk9SX1RBUkdFVD0kKFBJQ0ZMQUdfRk9SX1RBUkdFVCkiIFwKLQkiUlVOVEVTVEZMQUdTPSQoUlVOVEVTVEZMQUdTKSIgXAotCSJTSEVMTD0kKFNIRUxMKSIgXAotCSJleGVjX3ByZWZpeD0kKGV4ZWNfcHJlZml4KSIgXAotCSJpbmZvZGlyPSQoaW5mb2RpcikiIFwKLQkibGliZGlyPSQobGliZGlyKSIgXAotCSJtYW5kaXI9JChtYW5kaXIpIiBcCi0JInByZWZpeD0kKHByZWZpeCkiIFwKLQkiQVI9JChBUikiIFwKLQkiQVM9JChBUykiIFwKLQkiQ0M9JChDQykiIFwKLQkiQ1hYPSQoQ1hYKSIgXAotCSJMRD0kKExEKSIgXAotCSJOTT0kKE5NKSIgXAotCSJSQU5MSUI9JChSQU5MSUIpIiBcCi0JIkRFU1RESVI9JChERVNURElSKSIKKwknQVJfRkxBR1M9JChBUl9GTEFHUyknIFwKKwknQ0NfRk9SX0JVSUxEPSQoQ0NfRk9SX0JVSUxEKScgXAorCSdDRkxBR1M9JChDRkxBR1MpJyBcCisJJ0NYWEZMQUdTPSQoQ1hYRkxBR1MpJyBcCisJJ0NGTEFHU19GT1JfQlVJTEQ9JChDRkxBR1NfRk9SX0JVSUxEKScgXAorCSdDRkxBR1NfRk9SX1RBUkdFVD0kKENGTEFHU19GT1JfVEFSR0VUKScgXAorCSdJTlNUQUxMPSQoSU5TVEFMTCknIFwKKwknSU5TVEFMTF9EQVRBPSQoSU5TVEFMTF9EQVRBKScgXAorCSdJTlNUQUxMX1BST0dSQU09JChJTlNUQUxMX1BST0dSQU0pJyBcCisJJ0lOU1RBTExfU0NSSVBUPSQoSU5TVEFMTF9TQ1JJUFQpJyBcCisJJ0pDMUZMQUdTPSQoSkMxRkxBR1MpJyBcCisJJ0xERkxBR1M9JChMREZMQUdTKScgXAorCSdMSUJDRkxBR1M9JChMSUJDRkxBR1MpJyBcCisJJ0xJQkNGTEFHU19GT1JfVEFSR0VUPSQoTElCQ0ZMQUdTX0ZPUl9UQVJHRVQpJyBcCisJJ01BS0U9JChNQUtFKScgXAorCSdNQUtFSU5GTz0kKE1BS0VJTkZPKSAkKE1BS0VJTkZPRkxBR1MpJyBcCisJJ1BJQ0ZMQUc9JChQSUNGTEFHKScgXAorCSdQSUNGTEFHX0ZPUl9UQVJHRVQ9JChQSUNGTEFHX0ZPUl9UQVJHRVQpJyBcCisJJ1JVTlRFU1RGTEFHUz0kKFJVTlRFU1RGTEFHUyknIFwKKwknU0hFTEw9JChTSEVMTCknIFwKKwknZXhlY19wcmVmaXg9JChleGVjX3ByZWZpeCknIFwKKwknaW5mb2Rpcj0kKGluZm9kaXIpJyBcCisJJ2xpYmRpcj0kKGxpYmRpciknIFwKKwknbWFuZGlyPSQobWFuZGlyKScgXAorCSdwcmVmaXg9JChwcmVmaXgpJyBcCisJJ0FSPSQoQVIpJyBcCisJJ0FTPSQoQVMpJyBcCisJJ0NDPSQoQ0MpJyBcCisJJ0NYWD0kKENYWCknIFwKKwknTEQ9JChMRCknIFwKKwknTk09JChOTSknIFwKKwknUkFOTElCPSQoUkFOTElCKScgXAorCSdERVNURElSPSQoREVTVERJUiknCiAKIAogIyBTdWJkaXIgcnVsZXMgcmVseSBvbiAkKEZMQUdTX1RPX1BBU1MpCkBAIC01NzEsMTAgKzcxMiwxMyBAQAogCSQoYW1fX2FwcGVuZF8yNCkgJChhbV9fYXBwZW5kXzI1KSAkKGFtX19hcHBlbmRfMjYpIFwKIAkkKGFtX19hcHBlbmRfMjcpICQoYW1fX2FwcGVuZF8yOCkgJChhbV9fYXBwZW5kXzI5KSBcCiAJJChhbV9fYXBwZW5kXzMwKSAkKGFtX19hcHBlbmRfMzEpICQoYW1fX2FwcGVuZF8zMikgXAotCSQoYW1fX2FwcGVuZF8zMykgJChhbV9fYXBwZW5kXzM0KQorCSQoYW1fX2FwcGVuZF8zMykgJChhbV9fYXBwZW5kXzM0KSAkKGFtX19hcHBlbmRfMzUpIFwKKwkkKGFtX19hcHBlbmRfMzYpICQoYW1fX2FwcGVuZF8zNykgJChhbV9fYXBwZW5kXzM4KSBcCisJJChhbV9fYXBwZW5kXzM5KQogbGliZmZpX2NvbnZlbmllbmNlX2xhX1NPVVJDRVMgPSAkKGxpYmZmaV9sYV9TT1VSQ0VTKQogbm9kaXN0X2xpYmZmaV9jb252ZW5pZW5jZV9sYV9TT1VSQ0VTID0gJChub2Rpc3RfbGliZmZpX2xhX1NPVVJDRVMpCiBMVExERkxBR1MgPSAkKHNoZWxsICQoU0hFTEwpICQodG9wX3NyY2RpcikvbGlidG9vbC1sZGZsYWdzICQoTERGTEFHUykpCitBTV9DRkxBR1MgPSAkKGFtX19hcHBlbmRfNDApCiBsaWJmZmlfbGFfTERGTEFHUyA9IC1uby11bmRlZmluZWQgLXZlcnNpb24taW5mbyBgZ3JlcCAtdiAnXlwjJyAkKHNyY2RpcikvbGlidG9vbC12ZXJzaW9uYCAkKExUTERGTEFHUykgJChBTV9MVExERkxBR1MpCiBBTV9DUFBGTEFHUyA9IC1JLiAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSWluY2x1ZGUgLUkkKHRvcF9zcmNkaXIpL3NyYwogQU1fQ0NBU0ZMQUdTID0gJChBTV9DUFBGTEFHUykKQEAgLTY0NSw2ICs3ODksNyBAQAogCSAgZWNobyBybSAtZiAkJHtsb2NzfTsgXAogCSAgcm0gLWYgJCR7bG9jc307IFwKIAl9CisKIGluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUzogJCh0b29sZXhlY2xpYl9MVExJQlJBUklFUykKIAlAJChOT1JNQUxfSU5TVEFMTCkKIAlAbGlzdD0nJCh0b29sZXhlY2xpYl9MVExJQlJBUklFUyknOyB0ZXN0IC1uICIkKHRvb2xleGVjbGliZGlyKSIgfHwgbGlzdD07IFwKQEAgLTcyMywxMCArODY4LDEwIEBACiAJc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMveDg2L3N5c3YubG86IHNyYy94ODYvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMveDg2LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKLXNyYy94ODYvZnJlZWJzZC5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAotCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3g4Ni93aW4zMi5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL3g4Ni9mcmVlYnNkLmxvOiBzcmMveDg2LyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMveDg2L3dpbjY0LmxvOiBzcmMveDg2LyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL3g4Ni8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMveDg2L2Rhcndpbi5sbzogc3JjL3g4Ni8kKGFtX19kaXJzdGFtcCkgXApAQCAtNzg3LDYgKzkzMiwxNiBAQAogCXNyYy9tNjhrLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9tNjhrL3N5c3YubG86IHNyYy9tNjhrLyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL202OGsvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL204OGsvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy9tODhrCisJQDogPiBzcmMvbTg4ay8kKGFtX19kaXJzdGFtcCkKK3NyYy9tODhrLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL204OGsvJChERVBESVIpCisJQDogPiBzcmMvbTg4ay8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbTg4ay9mZmkubG86IHNyYy9tODhrLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL204OGsvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL204OGsvb2JzZC5sbzogc3JjL204OGsvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvbTg4ay8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvbW94aWUvJChhbV9fZGlyc3RhbXApOgogCUAkKE1LRElSX1ApIHNyYy9tb3hpZQogCUA6ID4gc3JjL21veGllLyQoYW1fX2RpcnN0YW1wKQpAQCAtODA3LDYgKzk2MiwxNiBAQAogCXNyYy9taWNyb2JsYXplLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9taWNyb2JsYXplL3N5c3YubG86IHNyYy9taWNyb2JsYXplLyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL21pY3JvYmxhemUvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL25pb3MyLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBzcmMvbmlvczIKKwlAOiA+IHNyYy9uaW9zMi8kKGFtX19kaXJzdGFtcCkKK3NyYy9uaW9zMi8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy9uaW9zMi8kKERFUERJUikKKwlAOiA+IHNyYy9uaW9zMi8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvbmlvczIvc3lzdi5sbzogc3JjL25pb3MyLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL25pb3MyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9uaW9zMi9mZmkubG86IHNyYy9uaW9zMi8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy9uaW9zMi8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvcG93ZXJwYy8kKGFtX19kaXJzdGFtcCk6CiAJQCQoTUtESVJfUCkgc3JjL3Bvd2VycGMKIAlAOiA+IHNyYy9wb3dlcnBjLyQoYW1fX2RpcnN0YW1wKQpAQCAtODE1LDYgKzk4MCwxMCBAQAogCUA6ID4gc3JjL3Bvd2VycGMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3Bvd2VycGMvZmZpLmxvOiBzcmMvcG93ZXJwYy8kKGFtX19kaXJzdGFtcCkgXAogCXNyYy9wb3dlcnBjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9wb3dlcnBjL2ZmaV9zeXN2LmxvOiBzcmMvcG93ZXJwYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy9wb3dlcnBjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmxvOiBzcmMvcG93ZXJwYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy9wb3dlcnBjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9wb3dlcnBjL3N5c3YubG86IHNyYy9wb3dlcnBjLyQoYW1fX2RpcnN0YW1wKSBcCiAJc3JjL3Bvd2VycGMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUubG86IHNyYy9wb3dlcnBjLyQoYW1fX2RpcnN0YW1wKSBcCkBAIC04NDMsNiArMTAxMiwxNiBAQAogCXNyYy9hYXJjaDY0LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIHNyYy9hYXJjaDY0L2ZmaS5sbzogc3JjL2FhcmNoNjQvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMvYWFyY2g2NC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvYXJjLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBzcmMvYXJjCisJQDogPiBzcmMvYXJjLyQoYW1fX2RpcnN0YW1wKQorc3JjL2FyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApOgorCUAkKE1LRElSX1ApIHNyYy9hcmMvJChERVBESVIpCisJQDogPiBzcmMvYXJjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKK3NyYy9hcmMvYXJjb21wYWN0LmxvOiBzcmMvYXJjLyQoYW1fX2RpcnN0YW1wKSBcCisJc3JjL2FyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvYXJjL2ZmaS5sbzogc3JjL2FyYy8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy9hcmMvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogc3JjL2FybS8kKGFtX19kaXJzdGFtcCk6CiAJQCQoTUtESVJfUCkgc3JjL2FybQogCUA6ID4gc3JjL2FybS8kKGFtX19kaXJzdGFtcCkKQEAgLTk1NywxMCArMTEzNiwyMiBAQAogCXNyYy9tZXRhZy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiBzcmMvbWV0YWcvZmZpLmxvOiBzcmMvbWV0YWcvJChhbV9fZGlyc3RhbXApIFwKIAlzcmMvbWV0YWcvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL3ZheC8kKGFtX19kaXJzdGFtcCk6CisJQCQoTUtESVJfUCkgc3JjL3ZheAorCUA6ID4gc3JjL3ZheC8kKGFtX19kaXJzdGFtcCkKK3NyYy92YXgvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKToKKwlAJChNS0RJUl9QKSBzcmMvdmF4LyQoREVQRElSKQorCUA6ID4gc3JjL3ZheC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCitzcmMvdmF4L2VsZmJzZC5sbzogc3JjL3ZheC8kKGFtX19kaXJzdGFtcCkgXAorCXNyYy92YXgvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQorc3JjL3ZheC9mZmkubG86IHNyYy92YXgvJChhbV9fZGlyc3RhbXApIFwKKwlzcmMvdmF4LyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKwogbGliZmZpLmxhOiAkKGxpYmZmaV9sYV9PQkpFQ1RTKSAkKGxpYmZmaV9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZmZpX2xhX0RFUEVOREVOQ0lFUykgCi0JJChsaWJmZmlfbGFfTElOSykgLXJwYXRoICQodG9vbGV4ZWNsaWJkaXIpICQobGliZmZpX2xhX09CSkVDVFMpICQobGliZmZpX2xhX0xJQkFERCkgJChMSUJTKQorCSQoQU1fVl9DQ0xEKSQobGliZmZpX2xhX0xJTkspIC1ycGF0aCAkKHRvb2xleGVjbGliZGlyKSAkKGxpYmZmaV9sYV9PQkpFQ1RTKSAkKGxpYmZmaV9sYV9MSUJBREQpICQoTElCUykKKwogbGliZmZpX2NvbnZlbmllbmNlLmxhOiAkKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9PQkpFQ1RTKSAkKGxpYmZmaV9jb252ZW5pZW5jZV9sYV9ERVBFTkRFTkNJRVMpICQoRVhUUkFfbGliZmZpX2NvbnZlbmllbmNlX2xhX0RFUEVOREVOQ0lFUykgCi0JJChMSU5LKSAgJChsaWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUykgJChsaWJmZmlfY29udmVuaWVuY2VfbGFfTElCQUREKSAkKExJQlMpCisJJChBTV9WX0NDTEQpJChMSU5LKSAgJChsaWJmZmlfY29udmVuaWVuY2VfbGFfT0JKRUNUUykgJChsaWJmZmlfY29udmVuaWVuY2VfbGFfTElCQUREKSAkKExJQlMpCiAKIG1vc3RseWNsZWFuLWNvbXBpbGU6CiAJLXJtIC1mICouJChPQkpFWFQpCkBAIC05NzAsNiArMTE2MSw4IEBACiAJLXJtIC1mIHNyYy9hYXJjaDY0LyoubG8KIAktcm0gLWYgc3JjL2FscGhhLyouJChPQkpFWFQpCiAJLXJtIC1mIHNyYy9hbHBoYS8qLmxvCisJLXJtIC1mIHNyYy9hcmMvKi4kKE9CSkVYVCkKKwktcm0gLWYgc3JjL2FyYy8qLmxvCiAJLXJtIC1mIHNyYy9hcm0vKi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL2FybS8qLmxvCiAJLXJtIC1mIHNyYy9hdnIzMi8qLiQoT0JKRVhUKQpAQCAtOTg2LDYgKzExNzksOCBAQAogCS1ybSAtZiBzcmMvbTMyci8qLmxvCiAJLXJtIC1mIHNyYy9tNjhrLyouJChPQkpFWFQpCiAJLXJtIC1mIHNyYy9tNjhrLyoubG8KKwktcm0gLWYgc3JjL204OGsvKi4kKE9CSkVYVCkKKwktcm0gLWYgc3JjL204OGsvKi5sbwogCS1ybSAtZiBzcmMvbWV0YWcvKi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL21ldGFnLyoubG8KIAktcm0gLWYgc3JjL21pY3JvYmxhemUvKi4kKE9CSkVYVCkKQEAgLTk5NCw2ICsxMTg5LDggQEAKIAktcm0gLWYgc3JjL21pcHMvKi5sbwogCS1ybSAtZiBzcmMvbW94aWUvKi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL21veGllLyoubG8KKwktcm0gLWYgc3JjL25pb3MyLyouJChPQkpFWFQpCisJLXJtIC1mIHNyYy9uaW9zMi8qLmxvCiAJLXJtIC1mIHNyYy9wYS8qLiQoT0JKRVhUKQogCS1ybSAtZiBzcmMvcGEvKi5sbwogCS1ybSAtZiBzcmMvcG93ZXJwYy8qLiQoT0JKRVhUKQpAQCAtMTAwOCw2ICsxMjA1LDggQEAKIAktcm0gLWYgc3JjL3NwYXJjLyoubG8KIAktcm0gLWYgc3JjL3RpbGUvKi4kKE9CSkVYVCkKIAktcm0gLWYgc3JjL3RpbGUvKi5sbworCS1ybSAtZiBzcmMvdmF4LyouJChPQkpFWFQpCisJLXJtIC1mIHNyYy92YXgvKi5sbwogCS1ybSAtZiBzcmMveDg2LyouJChPQkpFWFQpCiAJLXJtIC1mIHNyYy94ODYvKi5sbwogCS1ybSAtZiBzcmMveHRlbnNhLyouJChPQkpFWFQpCkBAIC0xMDI2LDYgKzEyMjUsOCBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hYXJjaDY0LyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL2FscGhhLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYWxwaGEvJChERVBESVIpL29zZi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hcmMvJChERVBESVIpL2FyY29tcGFjdC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hcmMvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hcm0vJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9hcm0vJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvYXJtLyQoREVQRElSKS90cmFtcG9saW5lLlBsb0BhbV9fcXVvdGVACkBAIC0xMDQzLDYgKzEyNDQsOCBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9tMzJyLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL202OGsvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9tNjhrLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL204OGsvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9tODhrLyQoREVQRElSKS9vYnNkLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL21ldGFnLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbWV0YWcvJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbWljcm9ibGF6ZS8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACkBAIC0xMDUyLDYgKzEyNTUsOCBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9taXBzLyQoREVQRElSKS9vMzIuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbW94aWUvJChERVBESVIpL2VhYmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvbW94aWUvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9uaW9zMi8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL25pb3MyLyQoREVQRElSKS9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3BhLyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcGEvJChERVBESVIpL2hwdXgzMi5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wYS8kKERFUERJUikvbGludXguUGxvQGFtX19xdW90ZUAKQEAgLTEwNjEsNiArMTI2Niw4IEBACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3Bvd2VycGMvJChERVBESVIpL2Rhcndpbl9jbG9zdXJlLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3Bvd2VycGMvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9wb3dlcnBjLyQoREVQRElSKS9mZmlfZGFyd2luLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3Bvd2VycGMvJChERVBESVIpL2ZmaV9saW51eDY0LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3Bvd2VycGMvJChERVBESVIpL2ZmaV9zeXN2LlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3Bvd2VycGMvJChERVBESVIpL2xpbnV4NjQuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvcG93ZXJwYy8kKERFUERJUikvbGludXg2NF9jbG9zdXJlLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3Bvd2VycGMvJChERVBESVIpL3BwY19jbG9zdXJlLlBsb0BhbV9fcXVvdGVACkBAIC0xMDc2LDYgKzEyODMsOCBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy9zcGFyYy8kKERFUERJUikvdjkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvdGlsZS8kKERFUERJUikvZmZpLlBsb0BhbV9fcXVvdGVACiBAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVAc3JjL3RpbGUvJChERVBESVIpL3RpbGUuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvdmF4LyQoREVQRElSKS9lbGZic2QuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMvdmF4LyQoREVQRElSKS9mZmkuUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveDg2LyQoREVQRElSKS9kYXJ3aW4uUGxvQGFtX19xdW90ZUAKIEBBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUBzcmMveDg2LyQoREVQRElSKS9kYXJ3aW42NC5QbG9AYW1fX3F1b3RlQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy94ODYvJChERVBESVIpL2ZmaS5QbG9AYW1fX3F1b3RlQApAQCAtMTA4OSw1MiArMTI5OCw1MiBAQAogQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQHNyYy94dGVuc2EvJChERVBESVIpL3N5c3YuUGxvQGFtX19xdW90ZUAKIAogLlMubzoKLUBhbV9fZmFzdGRlcENDQVNfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubyQkfHwnYDtcCitAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQU1fVl9DUFBBUylkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChDUFBBU0NPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAICQ8ICYmXAogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTQGFtX19ub2RlcEApJChDUFBBU0NPTVBJTEUpIC1jIC1vICRAICQ8CiAKIC5TLm9iajoKLUBhbV9fZmFzdGRlcENDQVNfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwub2JqJCR8fCdgO1wKK0BhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChBTV9WX0NQUEFTKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ0FTX1RSVUVACSQoQ1BQQVNDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgICYmXAogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAogQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDQVNERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDQVNfRkFMU0VACSQoQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKEFNX1ZfQ1BQQVNAYW1fX25vZGVwQCkkKENQUEFTQ09NUElMRSkgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYAogCiAuUy5sbzoKLUBhbV9fZmFzdGRlcENDQVNfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAorQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKEFNX1ZfQ1BQQVMpZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NBU19UUlVFQAkkKExUQ1BQQVNDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKIEBhbV9fZmFzdGRlcENDQVNfVFJVRUAJJChhbV9fbXYpICQkZGVwYmFzZS5UcG8gJCRkZXBiYXNlLlBsbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDQVNfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0FTREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ0FTX0ZBTFNFQAkkKExUQ1BQQVNDT01QSUxFKSAtYyAtbyAkQCAkPAorQGFtX19mYXN0ZGVwQ0NBU19GQUxTRUAJJChBTV9WX0NQUEFTQGFtX19ub2RlcEApJChMVENQUEFTQ09NUElMRSkgLWMgLW8gJEAgJDwKIAogLmMubzoKLUBhbV9fZmFzdGRlcENDX1RSVUVACWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm8kJHx8J2A7XAogQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbwotQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQU1fVl9DQylzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIC1vICRAICQ8CitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCAkPAogCiAuYy5vYmo6Ci1AYW1fX2Zhc3RkZXBDQ19UUlVFQAlkZXBiYXNlPWBlY2hvICRAIHwgc2VkICdzfFteL10qJCR8JChERVBESVIpLyZ8O3N8XC5vYmokJHx8J2A7XAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLm9iaiQkfHwnYDtcCiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAkJGRlcGJhc2UuVHBvIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2AgJiZcCiBAYW1fX2Zhc3RkZXBDQ19UUlVFQAkkKGFtX19tdikgJCRkZXBiYXNlLlRwbyAkJGRlcGJhc2UuUG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0Mpc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACiBAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACi1AYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDQGFtX19ub2RlcEApJChDT01QSUxFKSAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgCiAKIC5jLmxvOgotQGFtX19mYXN0ZGVwQ0NfVFJVRUAJZGVwYmFzZT1gZWNobyAkQCB8IHNlZCAnc3xbXi9dKiQkfCQoREVQRElSKS8mfDtzfFwubG8kJHx8J2A7XAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJJChBTV9WX0NDKWRlcGJhc2U9YGVjaG8gJEAgfCBzZWQgJ3N8W14vXSokJHwkKERFUERJUikvJnw7c3xcLmxvJCR8fCdgO1wKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgJCRkZXBiYXNlLlRwbyAtYyAtbyAkQCAkPCAmJlwKIEBhbV9fZmFzdGRlcENDX1RSVUVACSQoYW1fX212KSAkJGRlcGJhc2UuVHBvICQkZGVwYmFzZS5QbG8KLUBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChBTV9WX0NDKXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKIEBBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKLUBhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKEFNX1ZfQ0NAYW1fX25vZGVwQCkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKIAogbW9zdGx5Y2xlYW4tbGlidG9vbDoKIAktcm0gLWYgKi5sbwpAQCAtMTE0NCw2ICsxMzUzLDcgQEAKIAktcm0gLXJmIHNyYy8ubGlicyBzcmMvX2xpYnMKIAktcm0gLXJmIHNyYy9hYXJjaDY0Ly5saWJzIHNyYy9hYXJjaDY0L19saWJzCiAJLXJtIC1yZiBzcmMvYWxwaGEvLmxpYnMgc3JjL2FscGhhL19saWJzCisJLXJtIC1yZiBzcmMvYXJjLy5saWJzIHNyYy9hcmMvX2xpYnMKIAktcm0gLXJmIHNyYy9hcm0vLmxpYnMgc3JjL2FybS9fbGlicwogCS1ybSAtcmYgc3JjL2F2cjMyLy5saWJzIHNyYy9hdnIzMi9fbGlicwogCS1ybSAtcmYgc3JjL2JmaW4vLmxpYnMgc3JjL2JmaW4vX2xpYnMKQEAgLTExNTIsMTAgKzEzNjIsMTIgQEAKIAktcm0gLXJmIHNyYy9pYTY0Ly5saWJzIHNyYy9pYTY0L19saWJzCiAJLXJtIC1yZiBzcmMvbTMyci8ubGlicyBzcmMvbTMyci9fbGlicwogCS1ybSAtcmYgc3JjL202OGsvLmxpYnMgc3JjL202OGsvX2xpYnMKKwktcm0gLXJmIHNyYy9tODhrLy5saWJzIHNyYy9tODhrL19saWJzCiAJLXJtIC1yZiBzcmMvbWV0YWcvLmxpYnMgc3JjL21ldGFnL19saWJzCiAJLXJtIC1yZiBzcmMvbWljcm9ibGF6ZS8ubGlicyBzcmMvbWljcm9ibGF6ZS9fbGlicwogCS1ybSAtcmYgc3JjL21pcHMvLmxpYnMgc3JjL21pcHMvX2xpYnMKIAktcm0gLXJmIHNyYy9tb3hpZS8ubGlicyBzcmMvbW94aWUvX2xpYnMKKwktcm0gLXJmIHNyYy9uaW9zMi8ubGlicyBzcmMvbmlvczIvX2xpYnMKIAktcm0gLXJmIHNyYy9wYS8ubGlicyBzcmMvcGEvX2xpYnMKIAktcm0gLXJmIHNyYy9wb3dlcnBjLy5saWJzIHNyYy9wb3dlcnBjL19saWJzCiAJLXJtIC1yZiBzcmMvczM5MC8ubGlicyBzcmMvczM5MC9fbGlicwpAQCAtMTE2Myw2ICsxMzc1LDcgQEAKIAktcm0gLXJmIHNyYy9zaDY0Ly5saWJzIHNyYy9zaDY0L19saWJzCiAJLXJtIC1yZiBzcmMvc3BhcmMvLmxpYnMgc3JjL3NwYXJjL19saWJzCiAJLXJtIC1yZiBzcmMvdGlsZS8ubGlicyBzcmMvdGlsZS9fbGlicworCS1ybSAtcmYgc3JjL3ZheC8ubGlicyBzcmMvdmF4L19saWJzCiAJLXJtIC1yZiBzcmMveDg2Ly5saWJzIHNyYy94ODYvX2xpYnMKIAktcm0gLXJmIHNyYy94dGVuc2EvLmxpYnMgc3JjL3h0ZW5zYS9fbGlicwogCkBAIC0xMTczLDcgKzEzODYsNyBAQAogCUA6ID4gZG9jLyQoYW1fX2RpcnN0YW1wKQogCiAkKHNyY2RpcikvZG9jL2xpYmZmaS5pbmZvOiBkb2MvbGliZmZpLnRleGkgJChzcmNkaXIpL2RvYy92ZXJzaW9uLnRleGkKLQlyZXN0b3JlPTogJiYgYmFja3VwZGlyPSIkKGFtX19sZWFkaW5nX2RvdClhbSQkJCQiICYmIFwKKwkkKEFNX1ZfTUFLRUlORk8pcmVzdG9yZT06ICYmIGJhY2t1cGRpcj0iJChhbV9fbGVhZGluZ19kb3QpYW0kJCQkIiAmJiBcCiAJYW1fX2N3ZD1gcHdkYCAmJiAkKGFtX19jZCkgJChzcmNkaXIpICYmIFwKIAlybSAtcmYgJCRiYWNrdXBkaXIgJiYgbWtkaXIgJCRiYWNrdXBkaXIgJiYgXAogCWlmICgkKE1BS0VJTkZPKSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCkBAIC0xMTk1LDE4ICsxNDA4LDIwIEBACiAJcm0gLXJmICQkYmFja3VwZGlyOyBleGl0ICQkcmMKIAogZG9jL2xpYmZmaS5kdmk6IGRvYy9saWJmZmkudGV4aSAkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aSBkb2MvJChhbV9fZGlyc3RhbXApCi0JVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAorCSQoQU1fVl9URVhJMkRWSSlURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCiAJTUFLRUlORk89JyQoTUFLRUlORk8pICQoQU1fTUFLRUlORk9GTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSBkb2MgLUkgJChzcmNkaXIpL2RvYycgXAotCSQoVEVYSTJEVkkpICAtLWNsZWFuIC1vICRAIGB0ZXN0IC1mICdkb2MvbGliZmZpLnRleGknIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRvYy9saWJmZmkudGV4aSAKKwkkKFRFWEkyRFZJKSAkKEFNX1ZfdGV4aW5mbykgLS1idWlsZC1kaXI9JChAOi5kdmk9LnQyZCkgLW8gJEAgJChBTV9WX3RleGlkZXZudWxsKSBcCisJYHRlc3QgLWYgJ2RvYy9saWJmZmkudGV4aScgfHwgZWNobyAnJChzcmNkaXIpLydgZG9jL2xpYmZmaS50ZXhpCiAKIGRvYy9saWJmZmkucGRmOiBkb2MvbGliZmZpLnRleGkgJChzcmNkaXIpL2RvYy92ZXJzaW9uLnRleGkgZG9jLyQoYW1fX2RpcnN0YW1wKQotCVRFWElOUFVUUz0iJChhbV9fVEVYSU5GT19URVhfRElSKSQoUEFUSF9TRVBBUkFUT1IpJCRURVhJTlBVVFMiIFwKKwkkKEFNX1ZfVEVYSTJQREYpVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAogCU1BS0VJTkZPPSckKE1BS0VJTkZPKSAkKEFNX01BS0VJTkZPRkxBR1MpICQoTUFLRUlORk9GTEFHUykgLUkgZG9jIC1JICQoc3JjZGlyKS9kb2MnIFwKLQkkKFRFWEkyUERGKSAgLS1jbGVhbiAtbyAkQCBgdGVzdCAtZiAnZG9jL2xpYmZmaS50ZXhpJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb2MvbGliZmZpLnRleGkgCisJJChURVhJMlBERikgJChBTV9WX3RleGluZm8pIC0tYnVpbGQtZGlyPSQoQDoucGRmPS50MnApIC1vICRAICQoQU1fVl90ZXhpZGV2bnVsbCkgXAorCWB0ZXN0IC1mICdkb2MvbGliZmZpLnRleGknIHx8IGVjaG8gJyQoc3JjZGlyKS8nYGRvYy9saWJmZmkudGV4aQogCiBkb2MvbGliZmZpLmh0bWw6IGRvYy9saWJmZmkudGV4aSAkKHNyY2RpcikvZG9jL3ZlcnNpb24udGV4aSBkb2MvJChhbV9fZGlyc3RhbXApCi0Jcm0gLXJmICQoQDouaHRtbD0uaHRwKQotCWlmICQoTUFLRUlORk9IVE1MKSAkKEFNX01BS0VJTkZPSFRNTEZMQUdTKSAkKE1BS0VJTkZPRkxBR1MpIC1JIGRvYyAtSSAkKHNyY2RpcikvZG9jIFwKKwkkKEFNX1ZfTUFLRUlORk8pcm0gLXJmICQoQDouaHRtbD0uaHRwKQorCSQoQU1fVl9hdClpZiAkKE1BS0VJTkZPSFRNTCkgJChBTV9NQUtFSU5GT0hUTUxGTEFHUykgJChNQUtFSU5GT0ZMQUdTKSAtSSBkb2MgLUkgJChzcmNkaXIpL2RvYyBcCiAJIC1vICQoQDouaHRtbD0uaHRwKSBgdGVzdCAtZiAnZG9jL2xpYmZmaS50ZXhpJyB8fCBlY2hvICckKHNyY2RpcikvJ2Bkb2MvbGliZmZpLnRleGk7IFwKIAl0aGVuIFwKIAkgIHJtIC1yZiAkQDsgXApAQCAtMTIzOCw4ICsxNDUzLDggQEAKIG1haW50YWluZXItY2xlYW4tdnRpOgogQE1BSU5UQUlORVJfTU9ERV9UUlVFQAktcm0gLWYgJChzcmNkaXIpL2RvYy9zdGFtcC12dGkgJChzcmNkaXIpL2RvYy92ZXJzaW9uLnRleGkKIC5kdmkucHM6Ci0JVEVYSU5QVVRTPSIkKGFtX19URVhJTkZPX1RFWF9ESVIpJChQQVRIX1NFUEFSQVRPUikkJFRFWElOUFVUUyIgXAotCSQoRFZJUFMpICAtbyAkQCAkPAorCSQoQU1fVl9EVklQUylURVhJTlBVVFM9IiQoYW1fX1RFWElORk9fVEVYX0RJUikkKFBBVEhfU0VQQVJBVE9SKSQkVEVYSU5QVVRTIiBcCisJJChEVklQUykgJChBTV9WX3RleGluZm8pIC1vICRAICQ8CiAKIHVuaW5zdGFsbC1kdmktYW06CiAJQCQoTk9STUFMX1VOSU5TVEFMTCkKQEAgLTEzMTgsOCArMTUzMyw3IEBACiAJZG9uZQogCiBtb3N0bHljbGVhbi1hbWluZm86Ci0JLXJtIC1yZiBsaWJmZmkuYXV4IGxpYmZmaS5jcCBsaWJmZmkuY3BzIGxpYmZmaS5mbiBsaWJmZmkua3kgbGliZmZpLmxvZyBcCi0JICBsaWJmZmkucGcgbGliZmZpLnRtcCBsaWJmZmkudG9jIGxpYmZmaS50cCBsaWJmZmkudnIKKwktcm0gLXJmIGRvYy9saWJmZmkudDJkIGRvYy9saWJmZmkudDJwCiAKIGNsZWFuLWFtaW5mbzoKIAktdGVzdCAteiAiZG9jL2xpYmZmaS5kdmkgZG9jL2xpYmZmaS5wZGYgZG9jL2xpYmZmaS5wcyBkb2MvbGliZmZpLmh0bWwiIFwKQEAgLTEzNTksMTQgKzE1NzMsMTMgQEAKICMgKDEpIGlmIHRoZSB2YXJpYWJsZSBpcyBzZXQgaW4gJ2NvbmZpZy5zdGF0dXMnLCBlZGl0ICdjb25maWcuc3RhdHVzJwogIyAgICAgKHdoaWNoIHdpbGwgY2F1c2UgdGhlIE1ha2VmaWxlcyB0byBiZSByZWdlbmVyYXRlZCB3aGVuIHlvdSBydW4gJ21ha2UnKTsKICMgKDIpIG90aGVyd2lzZSwgcGFzcyB0aGUgZGVzaXJlZCB2YWx1ZXMgb24gdGhlICdtYWtlJyBjb21tYW5kIGxpbmUuCi0kKFJFQ1VSU0lWRV9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKToKLQlAZmFpbD0gZmFpbGNvbT0nZXhpdCAxJzsgXAotCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKLQkgIGNhc2UgJCRmIGluIFwKLQkgICAgKj0qIHwgLS1bIWtdKik7OyBcCi0JICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAotCSAgZXNhYzsgXAotCWRvbmU7IFwKKyQoYW1fX3JlY3Vyc2l2ZV90YXJnZXRzKToKKwlAZmFpbD07IFwKKwlpZiAkKGFtX19tYWtlX2tlZXBnb2luZyk7IHRoZW4gXAorCSAgZmFpbGNvbT0nZmFpbD15ZXMnOyBcCisJZWxzZSBcCisJICBmYWlsY29tPSdleGl0IDEnOyBcCisJZmk7IFwKIAlkb3Rfc2Vlbj1ubzsgXAogCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKIAljYXNlICIkQCIgaW4gXApAQCAtMTM4NywzMSArMTYwMCwxMyBAQAogCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCiAJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAogCWZpOyB0ZXN0IC16ICIkJGZhaWwiCi10YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAotCWRvbmUKLWN0YWdzLXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKLQlkb25lCi1jc2NvcGVsaXN0LXJlY3Vyc2l2ZToKLQlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKLQkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKCQoYW1fX2NkKSAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjc2NvcGVsaXN0KTsgXAotCWRvbmUKIAotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiB0YWdzLXJlY3Vyc2l2ZQorVEFHUzogdGFncwogCi1UQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgZmZpY29uZmlnLmguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKK3RhZ3MtYW06ICQoVEFHU19ERVBFTkRFTkNJRVMpICQoYW1fX3RhZ2dlZF9maWxlcykKIAlzZXQgeDsgXAogCWhlcmU9YHB3ZGA7IFwKIAlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKQEAgLTE0MjcsMTIgKzE2MjIsNyBAQAogCSAgICAgIHNldCAiJCRAIiAiJCRpbmNsdWRlX29wdGlvbj0kJGhlcmUvJCRzdWJkaXIvVEFHUyI7IFwKIAkgIGZpOyBcCiAJZG9uZTsgXAotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBmZmljb25maWcuaC5pbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKIAlzaGlmdDsgXAogCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCiAJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCkBAIC0xNDQ0LDE1ICsxNjM0LDExIEBACiAJICAgICAgJCR1bmlxdWU7IFwKIAkgIGZpOyBcCiAJZmkKLWN0YWdzOiBDVEFHUwotQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgZmZpY29uZmlnLmguaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAotCQkkKFRBR1NfRklMRVMpICQoTElTUCkKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgZmZpY29uZmlnLmguaW4gJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKK2N0YWdzOiBjdGFncy1yZWN1cnNpdmUKKworQ1RBR1M6IGN0YWdzCitjdGFncy1hbTogJChUQUdTX0RFUEVOREVOQ0lFUykgJChhbV9fdGFnZ2VkX2ZpbGVzKQorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKIAl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR1bmlxdWUiIFwKIAkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKIAkgICAgICQkdW5pcXVlCkBAIC0xNDYxLDE4ICsxNjQ3LDE2IEBACiAJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKIAkgICYmICQoYW1fX2NkKSAkKHRvcF9zcmNkaXIpIFwKIAkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgIiQkaGVyZSIKLQogY3Njb3BlOiBjc2NvcGUuZmlsZXMKIAl0ZXN0ICEgLXMgY3Njb3BlLmZpbGVzIFwKIAkgIHx8ICQoQ1NDT1BFKSAtYiAtcSAkKEFNX0NTQ09QRUZMQUdTKSAkKENTQ09QRUZMQUdTKSAtaSBjc2NvcGUuZmlsZXMgJChDU0NPUEVfQVJHUykKLQogY2xlYW4tY3Njb3BlOgogCS1ybSAtZiBjc2NvcGUuZmlsZXMKK2NzY29wZS5maWxlczogY2xlYW4tY3Njb3BlIGNzY29wZWxpc3QKK2NzY29wZWxpc3Q6IGNzY29wZWxpc3QtcmVjdXJzaXZlCiAKLWNzY29wZS5maWxlczogY2xlYW4tY3Njb3BlIGNzY29wZWxpc3QtcmVjdXJzaXZlIGNzY29wZWxpc3QKLQotY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSc7IFwKK2NzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKKwlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAogCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAogCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAogCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKQEAgLTE1NDgsNyArMTczMiw3IEBACiAJZG9uZQogCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIFwKIAkgIHRvcF9kaXN0ZGlyPSIkKHRvcF9kaXN0ZGlyKSIgZGlzdGRpcj0iJChkaXN0ZGlyKSIgXAotCSAgZGlzdC1pbmZvCisJICBkaXN0LWluZm8gZGlzdC1ob29rCiAJLXRlc3QgLW4gIiQoYW1fX3NraXBfbW9kZV9maXgpIiBcCiAJfHwgZmluZCAiJChkaXN0ZGlyKSIgLXR5cGUgZCAhIC1wZXJtIC03NTUgXAogCQktZXhlYyBjaG1vZCB1K3J3eCxnbytyeCB7fSBcOyAtbyBcCkBAIC0xNjA5LDkgKzE3OTMsOSBAQAogCSouemlwKikgXAogCSAgdW56aXAgJChkaXN0ZGlyKS56aXAgOztcCiAJZXNhYwotCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpOyBjaG1vZCB1K3cgJChkaXN0ZGlyKQotCW1rZGlyICQoZGlzdGRpcikvX2J1aWxkCi0JbWtkaXIgJChkaXN0ZGlyKS9faW5zdAorCWNobW9kIC1SIGEtdyAkKGRpc3RkaXIpCisJY2htb2QgdSt3ICQoZGlzdGRpcikKKwlta2RpciAkKGRpc3RkaXIpL19idWlsZCAkKGRpc3RkaXIpL19pbnN0CiAJY2htb2QgYS13ICQoZGlzdGRpcikKIAl0ZXN0IC1kICQoZGlzdGRpcikvX2J1aWxkIHx8IGV4aXQgMDsgXAogCWRjX2luc3RhbGxfYmFzZT1gJChhbV9fY2QpICQoZGlzdGRpcikvX2luc3QgJiYgcHdkIHwgc2VkIC1lICdzLF5bXjpcXC9dOltcXC9dLC8sJ2AgXApAQCAtMTcxNCw2ICsxODk4LDggQEAKIAktcm0gLWYgc3JjL2FhcmNoNjQvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9hbHBoYS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9hbHBoYS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL2FyYy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCisJLXJtIC1mIHNyYy9hcmMvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9hcm0vJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvYXJtLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvYXZyMzIvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQpAQCAtMTczMCw2ICsxOTE2LDggQEAKIAktcm0gLWYgc3JjL20zMnIvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9tNjhrLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL202OGsvJChhbV9fZGlyc3RhbXApCisJLXJtIC1mIHNyYy9tODhrLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL204OGsvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9tZXRhZy8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9tZXRhZy8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL21pY3JvYmxhemUvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQpAQCAtMTczOCw2ICsxOTI2LDggQEAKIAktcm0gLWYgc3JjL21pcHMvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9tb3hpZS8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9tb3hpZS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL25pb3MyLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL25pb3MyLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvcGEvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvcGEvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy9wb3dlcnBjLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKQEAgLTE3NTIsNiArMTk0Miw4IEBACiAJLXJtIC1mIHNyYy9zcGFyYy8kKGFtX19kaXJzdGFtcCkKIAktcm0gLWYgc3JjL3RpbGUvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMvdGlsZS8kKGFtX19kaXJzdGFtcCkKKwktcm0gLWYgc3JjL3ZheC8kKERFUERJUikvJChhbV9fZGlyc3RhbXApCisJLXJtIC1mIHNyYy92YXgvJChhbV9fZGlyc3RhbXApCiAJLXJtIC1mIHNyYy94ODYvJChERVBESVIpLyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMveDg2LyQoYW1fX2RpcnN0YW1wKQogCS1ybSAtZiBzcmMveHRlbnNhLyQoREVQRElSKS8kKGFtX19kaXJzdGFtcCkKQEAgLTE3NjgsNyArMTk2MCw3IEBACiAKIGRpc3RjbGVhbjogZGlzdGNsZWFuLXJlY3Vyc2l2ZQogCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQotCS1ybSAtcmYgc3JjLyQoREVQRElSKSBzcmMvYWFyY2g2NC8kKERFUERJUikgc3JjL2FscGhhLyQoREVQRElSKSBzcmMvYXJtLyQoREVQRElSKSBzcmMvYXZyMzIvJChERVBESVIpIHNyYy9iZmluLyQoREVQRElSKSBzcmMvY3Jpcy8kKERFUERJUikgc3JjL2Zydi8kKERFUERJUikgc3JjL2lhNjQvJChERVBESVIpIHNyYy9tMzJyLyQoREVQRElSKSBzcmMvbTY4ay8kKERFUERJUikgc3JjL21ldGFnLyQoREVQRElSKSBzcmMvbWljcm9ibGF6ZS8kKERFUERJUikgc3JjL21pcHMvJChERVBESVIpIHNyYy9tb3hpZS8kKERFUERJUikgc3JjL3BhLyQoREVQRElSKSBzcmMvcG93ZXJwYy8kKERFUERJUikgc3JjL3MzOTAvJChERVBESVIpIHNyYy9zaC8kKERFUERJUikgc3JjL3NoNjQvJChERVBESVIpIHNyYy9zcGFyYy8kKERFUERJUikgc3JjL3RpbGUvJChERVBESVIpIHNyYy94ODYvJChERVBESVIpIHNyYy94dGVuc2EvJChERVBESVIpCisJLXJtIC1yZiBzcmMvJChERVBESVIpIHNyYy9hYXJjaDY0LyQoREVQRElSKSBzcmMvYWxwaGEvJChERVBESVIpIHNyYy9hcmMvJChERVBESVIpIHNyYy9hcm0vJChERVBESVIpIHNyYy9hdnIzMi8kKERFUERJUikgc3JjL2JmaW4vJChERVBESVIpIHNyYy9jcmlzLyQoREVQRElSKSBzcmMvZnJ2LyQoREVQRElSKSBzcmMvaWE2NC8kKERFUERJUikgc3JjL20zMnIvJChERVBESVIpIHNyYy9tNjhrLyQoREVQRElSKSBzcmMvbTg4ay8kKERFUERJUikgc3JjL21ldGFnLyQoREVQRElSKSBzcmMvbWljcm9ibGF6ZS8kKERFUERJUikgc3JjL21pcHMvJChERVBESVIpIHNyYy9tb3hpZS8kKERFUERJUikgc3JjL25pb3MyLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMvdGlsZS8kKERFUERJUikgc3JjL3ZheC8kKERFUERJUikgc3JjL3g4Ni8kKERFUERJUikgc3JjL3h0ZW5zYS8kKERFUERJUikKIAktcm0gLWYgTWFrZWZpbGUKIGRpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAogCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MKQEAgLTE5MDcsNyArMjA5OSw3IEBACiBtYWludGFpbmVyLWNsZWFuOiBtYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZQogCS1ybSAtZiAkKGFtX19DT05GSUdfRElTVENMRUFOX0ZJTEVTKQogCS1ybSAtcmYgJCh0b3Bfc3JjZGlyKS9hdXRvbTR0ZS5jYWNoZQotCS1ybSAtcmYgc3JjLyQoREVQRElSKSBzcmMvYWFyY2g2NC8kKERFUERJUikgc3JjL2FscGhhLyQoREVQRElSKSBzcmMvYXJtLyQoREVQRElSKSBzcmMvYXZyMzIvJChERVBESVIpIHNyYy9iZmluLyQoREVQRElSKSBzcmMvY3Jpcy8kKERFUERJUikgc3JjL2Zydi8kKERFUERJUikgc3JjL2lhNjQvJChERVBESVIpIHNyYy9tMzJyLyQoREVQRElSKSBzcmMvbTY4ay8kKERFUERJUikgc3JjL21ldGFnLyQoREVQRElSKSBzcmMvbWljcm9ibGF6ZS8kKERFUERJUikgc3JjL21pcHMvJChERVBESVIpIHNyYy9tb3hpZS8kKERFUERJUikgc3JjL3BhLyQoREVQRElSKSBzcmMvcG93ZXJwYy8kKERFUERJUikgc3JjL3MzOTAvJChERVBESVIpIHNyYy9zaC8kKERFUERJUikgc3JjL3NoNjQvJChERVBESVIpIHNyYy9zcGFyYy8kKERFUERJUikgc3JjL3RpbGUvJChERVBESVIpIHNyYy94ODYvJChERVBESVIpIHNyYy94dGVuc2EvJChERVBESVIpCisJLXJtIC1yZiBzcmMvJChERVBESVIpIHNyYy9hYXJjaDY0LyQoREVQRElSKSBzcmMvYWxwaGEvJChERVBESVIpIHNyYy9hcmMvJChERVBESVIpIHNyYy9hcm0vJChERVBESVIpIHNyYy9hdnIzMi8kKERFUERJUikgc3JjL2JmaW4vJChERVBESVIpIHNyYy9jcmlzLyQoREVQRElSKSBzcmMvZnJ2LyQoREVQRElSKSBzcmMvaWE2NC8kKERFUERJUikgc3JjL20zMnIvJChERVBESVIpIHNyYy9tNjhrLyQoREVQRElSKSBzcmMvbTg4ay8kKERFUERJUikgc3JjL21ldGFnLyQoREVQRElSKSBzcmMvbWljcm9ibGF6ZS8kKERFUERJUikgc3JjL21pcHMvJChERVBESVIpIHNyYy9tb3hpZS8kKERFUERJUikgc3JjL25pb3MyLyQoREVQRElSKSBzcmMvcGEvJChERVBESVIpIHNyYy9wb3dlcnBjLyQoREVQRElSKSBzcmMvczM5MC8kKERFUERJUikgc3JjL3NoLyQoREVQRElSKSBzcmMvc2g2NC8kKERFUERJUikgc3JjL3NwYXJjLyQoREVQRElSKSBzcmMvdGlsZS8kKERFUERJUikgc3JjL3ZheC8kKERFUERJUikgc3JjL3g4Ni8kKERFUERJUikgc3JjL3h0ZW5zYS8kKERFUERJUikKIAktcm0gLWYgTWFrZWZpbGUKIG1haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWFtaW5mbyBcCiAJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tdnRpCkBAIC0xOTI5LDM2ICsyMTIxLDM2IEBACiAJdW5pbnN0YWxsLXBkZi1hbSB1bmluc3RhbGwtcGtnY29uZmlnREFUQSB1bmluc3RhbGwtcHMtYW0gXAogCXVuaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTCiAKLS5NQUtFOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBhbGwgXAotCWNzY29wZWxpc3QtcmVjdXJzaXZlIGN0YWdzLXJlY3Vyc2l2ZSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAgXAotCXRhZ3MtcmVjdXJzaXZlCisuTUFLRTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKIAotLlBIT05ZOiAkKFJFQ1VSU0lWRV9DTEVBTl9UQVJHRVRTKSAkKFJFQ1VSU0lWRV9UQVJHRVRTKSBDVEFHUyBHVEFHUyBcCi0JYWxsIGFsbC1hbSBhbS0tcmVmcmVzaCBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1hbWluZm8gXAotCWNsZWFuLWNzY29wZSBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAotCWNsZWFuLW5vaW5zdExUTElCUkFSSUVTIGNsZWFuLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgY3Njb3BlIFwKLQljc2NvcGVsaXN0IGNzY29wZWxpc3QtcmVjdXJzaXZlIGN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0IFwKLQlkaXN0LWFsbCBkaXN0LWJ6aXAyIGRpc3QtZ3ppcCBkaXN0LWluZm8gZGlzdC1semlwIGRpc3Qtc2hhciBcCi0JZGlzdC10YXJaIGRpc3QteHogZGlzdC16aXAgZGlzdGNoZWNrIGRpc3RjbGVhbiBcCi0JZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWhkciBcCi0JZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGNsZWFuY2hlY2sgZGlzdGRpciBcCi0JZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCi0JaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgXAotCWluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIFwKLQlpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBcCi0JaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wa2djb25maWdEQVRBIGluc3RhbGwtcHMgXAotCWluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBpbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMgXAotCWluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gXAotCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1hbWluZm8gXAotCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtYWludGFpbmVyLWNsZWFuLXZ0aSBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tYW1pbmZvIG1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCi0JbW9zdGx5Y2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi12dGkgcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIFwKLQl0YWdzLXJlY3Vyc2l2ZSB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1kdmktYW0gXAotCXVuaW5zdGFsbC1odG1sLWFtIHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1wZGYtYW0gXAotCXVuaW5zdGFsbC1wa2djb25maWdEQVRBIHVuaW5zdGFsbC1wcy1hbSBcCi0JdW5pbnN0YWxsLXRvb2xleGVjbGliTFRMSUJSQVJJRVMKKy5QSE9OWTogJChhbV9fcmVjdXJzaXZlX3RhcmdldHMpIENUQUdTIEdUQUdTIFRBR1MgYWxsIGFsbC1hbSBcCisJYW0tLXJlZnJlc2ggY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tYW1pbmZvIGNsZWFuLWNzY29wZSBcCisJY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdExUTElCUkFSSUVTIFwKKwljbGVhbi10b29sZXhlY2xpYkxUTElCUkFSSUVTIGNzY29wZSBjc2NvcGVsaXN0LWFtIGN0YWdzIFwKKwljdGFncy1hbSBkaXN0IGRpc3QtYWxsIGRpc3QtYnppcDIgZGlzdC1nemlwIGRpc3QtaG9vayBcCisJZGlzdC1pbmZvIGRpc3QtbHppcCBkaXN0LXNoYXIgZGlzdC10YXJaIGRpc3QteHogZGlzdC16aXAgXAorCWRpc3RjaGVjayBkaXN0Y2xlYW4gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1oZHIgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGNsZWFuY2hlY2sgXAorCWRpc3RkaXIgZGlzdHVuaW5zdGFsbGNoZWNrIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gXAorCWluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gXAorCWluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gXAorCWluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisJaW5zdGFsbC1tYW4gaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gaW5zdGFsbC1wa2djb25maWdEQVRBIFwKKwlpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbC10b29sZXhlY2xpYkxUTElCUkFSSUVTIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gXAorCWluc3RhbGxkaXJzIGluc3RhbGxkaXJzLWFtIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tYW1pbmZvIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBcCisJbWFpbnRhaW5lci1jbGVhbi12dGkgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tYW1pbmZvIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJbW9zdGx5Y2xlYW4tdnRpIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCBcCisJdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1kdmktYW0gdW5pbnN0YWxsLWh0bWwtYW0gXAorCXVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1wZGYtYW0gdW5pbnN0YWxsLXBrZ2NvbmZpZ0RBVEEgXAorCXVuaW5zdGFsbC1wcy1hbSB1bmluc3RhbGwtdG9vbGV4ZWNsaWJMVExJQlJBUklFUwogCiAKK2Rpc3QtaG9vazoKKwlpZiBbIC1kICQodG9wX3NyY2RpcikvLmdpdCBdIDsgdGhlbiAoY2QgJCh0b3Bfc3JjZGlyKTsgZ2l0IGxvZyAtLW5vLWRlY29yYXRlKSA7IGVsc2UgZWNobyAnU2VlIGdpdCBsb2cgZm9yIGhpc3RvcnkuJyA7IGZpID4gJChkaXN0ZGlyKS9DaGFuZ2VMb2cKKwogIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KICMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgogLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9SRUFETUUgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL1JFQURNRQppbmRleCAxOTE1NmZlLi44NGI5NDI2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL1JFQURNRQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL1JFQURNRQpAQCAtMSw4ICsxLDggQEAKIFN0YXR1cwogPT09PT09CiAKLWxpYmZmaS0zLjAuMTMgd2FzIHJlbGVhc2VkIG9uIE1hcmNoIDE3LCAyMDEzLiAgQ2hlY2sgdGhlIGxpYmZmaSB3ZWIKLXBhZ2UgZm9yIHVwZGF0ZXM6IDxVUkw6aHR0cDovL3NvdXJjZXdhcmUub3JnL2xpYmZmaS8+LgorbGliZmZpLTMuMSB3YXMgcmVsZWFzZWQgb24gTWF5IDE5LCAyMDE0LiAgQ2hlY2sgdGhlIGxpYmZmaSB3ZWIgcGFnZQorZm9yIHVwZGF0ZXM6IDxVUkw6aHR0cDovL3NvdXJjZXdhcmUub3JnL2xpYmZmaS8+LgogCiAKIFdoYXQgaXMgbGliZmZpPwpAQCAtNDMsNyArNDMsNyBAQAogRm9yIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZGV0YWlscyBhbmQgdGVzdGluZyBzdGF0dXMsIHBsZWFzZQogcmVmZXIgdG8gdGhlIHdpa2kgcGFnZSBoZXJlOgogCi0gaHR0cDovL3d3dy5tb3hpZWxvZ2ljLm9yZy93aWtpL2luZGV4LnBocD90aXRsZT1MaWJmZmlfMy4wLjEzCisgaHR0cDovL3d3dy5tb3hpZWxvZ2ljLm9yZy93aWtpL2luZGV4LnBocD90aXRsZT1MaWJmZmlfMy4xCiAKIEF0IHRoZSB0aW1lIG9mIHJlbGVhc2UsIHRoZSBmb2xsb3dpbmcgYmFzaWMgY29uZmlndXJhdGlvbnMgaGF2ZSBiZWVuCiB0ZXN0ZWQ6CkBAIC01MSw5ICs1MSwxMSBAQAogfC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAogfCBBcmNoaXRlY3R1cmUgICAgfCBPcGVyYXRpbmcgU3lzdGVtIHwgQ29tcGlsZXIgICAgICAgICAgICAgICAgfAogfC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAorfCBBQXJjaDY0IChBUk02NCkgfCBpT1MgICAgICAgICAgICAgIHwgQ2xhbmcgICAgICAgICAgICAgICAgICAgfAogfCBBQXJjaDY0ICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBBbHBoYSAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBBbHBoYSAgICAgICAgICAgfCBUcnU2NCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAorfCBBUkMgICAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBBUk0gICAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBBUk0gICAgICAgICAgICAgfCBpT1MgICAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfAogfCBBVlIzMiAgICAgICAgICAgfCBMaW51eCAgICAgICAgICAgIHwgR0NDICAgICAgICAgICAgICAgICAgICAgfApAQCAtNjEsMTUgKzYzLDE3IEBACiB8IEhQUEEgICAgICAgICAgICB8IEhQVVggICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IElBLTY0ICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IE02OEsgICAgICAgICAgICB8IEZyZWVNaU5UICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Ci18IE02OEsgICAgICAgICAgICB8IExpbnV4CSAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Cit8IE02OEsgICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IE02OEsgICAgICAgICAgICB8IFJURU1TICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Cit8IE04OEsgICAgICAgICAgICB8IE9wZW5CU0QvbXZtZTg4ayAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IE1ldGEgICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IE1pY3JvQmxhemUgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IE1JUFMgICAgICAgICAgICB8IElSSVggICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IE1JUFMgICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IE1JUFMgICAgICAgICAgICB8IFJURU1TICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IE1JUFM2NCAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Ci18IE1veGllCQkgIHwgQmFyZSBtZXRhbAkgICAgIHwgR0NDCit8IE1veGllICAgICAgICAgICB8IEJhcmUgbWV0YWwgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Cit8IE5pb3MgSUkgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFBvd2VyUEMgMzItYml0ICB8IEFJWCAgICAgICAgICAgICAgfCBJQk0gWEwgQyAgICAgICAgICAgICAgICB8CiB8IFBvd2VyUEMgNjQtYml0ICB8IEFJWCAgICAgICAgICAgICAgfCBJQk0gWEwgQyAgICAgICAgICAgICAgICB8CiB8IFBvd2VyUEMgICAgICAgICB8IEFNSUdBICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CkBAIC03Nyw3ICs4MSw4IEBACiB8IFBvd2VyUEMgICAgICAgICB8IE1hYyBPU1ggICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFBvd2VyUEMgICAgICAgICB8IEZyZWVCU0QgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFBvd2VyUEMgNjQtYml0ICB8IEZyZWVCU0QgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Ci18IFBvd2VyUEMgNjQtYml0ICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Cit8IFBvd2VyUEMgNjQtYml0ICB8IExpbnV4IEVMRnYxICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Cit8IFBvd2VyUEMgNjQtYml0ICB8IExpbnV4IEVMRnYyICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFMzOTAgICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFMzOTBYICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFNQQVJDICAgICAgICAgICB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CkBAIC04Nyw2ICs5Miw3IEBACiB8IFNQQVJDNjQgICAgICAgICB8IEZyZWVCU0QgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFNQQVJDNjQgICAgICAgICB8IFNvbGFyaXMgICAgICAgICAgfCBPcmFjbGUgU29sYXJpcyBTdHVkaW8gQyB8CiB8IFRJTEUtR3gvVElMRVBybyB8IExpbnV4ICAgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8Cit8IFZBWCAgICAgICAgICAgICB8IE9wZW5CU0QvdmF4ICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFg4NiAgICAgICAgICAgICB8IEZyZWVCU0QgICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFg4NiAgICAgICAgICAgICB8IEdOVSBIVVJEICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CiB8IFg4NiAgICAgICAgICAgICB8IEludGVyaXggICAgICAgICAgfCBHQ0MgICAgICAgICAgICAgICAgICAgICB8CkBAIC0xMjAsNiArMTI2LDkgQEAKICJjb25maWd1cmUiIHByb2dyYW0gZm91bmQgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBsaWJmZmkgc291cmNlCiBkaXN0cmlidXRpb24uCiAKK0lmIHlvdSdyZSBidWlsZGluZyBsaWJmZmkgZGlyZWN0bHkgZnJvbSB2ZXJzaW9uIGNvbnRyb2wsIGNvbmZpZ3VyZSB3b24ndAorZXhpc3QgeWV0OyBydW4gLi9hdXRvZ2VuLnNoIGZpcnN0LgorCiBZb3UgbWF5IHdhbnQgdG8gdGVsbCBjb25maWd1cmUgd2hlcmUgdG8gaW5zdGFsbCB0aGUgbGliZmZpIGxpYnJhcnkgYW5kCiBoZWFkZXIgZmlsZXMuIFRvIGRvIHRoYXQsIHVzZSB0aGUgLS1wcmVmaXggY29uZmlndXJlIHN3aXRjaC4gIExpYmZmaQogd2lsbCBpbnN0YWxsIHVuZGVyIC91c3IvbG9jYWwgYnkgZGVmYXVsdC4gCkBAIC0xMzcsMTMgKzE0NiwxNiBAQAogTWljcm9zb2Z0J3MgVmlzdWFsIEMrKyBjb21waWxlci4gIEluIHRoaXMgY2FzZSwgdXNlIHRoZSBtc3ZjYy5zaAogd3JhcHBlciBzY3JpcHQgZHVyaW5nIGNvbmZpZ3VyYXRpb24gbGlrZSBzbzoKIAotcGF0aC90by9jb25maWd1cmUgQ0M9cGF0aC90by9tc3ZjYy5zaCBMRD1saW5rIENQUD1cImNsIC1ub2xvZ28gLUVQXCIKK3BhdGgvdG8vY29uZmlndXJlIENDPXBhdGgvdG8vbXN2Y2Muc2ggQ1hYPXBhdGgvdG8vbXN2Y2Muc2ggTEQ9bGluayBDUFA9XCJjbCAtbm9sb2dvIC1FUFwiCiAKLUZvciA2NC1iaXQgV2luZG93cyBidWlsZHMsIHVzZSBDQz0icGF0aC90by9tc3ZjYy5zaCAtbTY0Ii4KLVlvdSBtYXkgYWxzbyBuZWVkIHRvIHNwZWNpZnkgLS1idWlsZCBhcHByb3ByaWF0ZWx5LiBXaGVuIGJ1aWxkaW5nIHdpdGggTVNWQwotdW5kZXIgYSBNaW5nVyBlbnZpcm9ubWVudCwgeW91IG1heSBuZWVkIHRvIHJlbW92ZSB0aGUgbGluZSBpbiBjb25maWd1cmUKLXRoYXQgc2V0cyAnZml4X3NyY2ZpbGVfcGF0aCcgdG8gYSAnY3lncGF0aCcgY29tbWFuZC4gKCdjeWdwYXRoJyBpcyBub3QKLXByZXNlbnQgaW4gTWluZ1csIGFuZCBpcyBub3QgcmVxdWlyZWQgd2hlbiB1c2luZyBNaW5nVy1zdHlsZSBwYXRocy4pCitGb3IgNjQtYml0IFdpbmRvd3MgYnVpbGRzLCB1c2UgQ0M9InBhdGgvdG8vbXN2Y2Muc2ggLW02NCIgYW5kCitDWFg9InBhdGgvdG8vbXN2Y2Muc2ggLW02NCIuICBZb3UgbWF5IGFsc28gbmVlZCB0byBzcGVjaWZ5IC0tYnVpbGQKK2FwcHJvcHJpYXRlbHkuCisKK1doZW4gYnVpbGRpbmcgd2l0aCBNU1ZDIHVuZGVyIGEgTWluZ1cgZW52aXJvbm1lbnQsIHlvdSBtYXkgbmVlZCB0bworcmVtb3ZlIHRoZSBsaW5lIGluIGNvbmZpZ3VyZSB0aGF0IHNldHMgJ2ZpeF9zcmNmaWxlX3BhdGgnIHRvIGEgJ2N5Z3BhdGgnCitjb21tYW5kLiAgKCdjeWdwYXRoJyBpcyBub3QgcHJlc2VudCBpbiBNaW5nVywgYW5kIGlzIG5vdCByZXF1aXJlZCB3aGVuCit1c2luZyBNaW5nVy1zdHlsZSBwYXRocy4pCiAKIEZvciBpT1MgYnVpbGRzLCB0aGUgJ2xpYmZmaS54Y29kZXByb2onIFhjb2RlIHByb2plY3QgaXMgYXZhaWxhYmxlLgogCkBAIC0xNjEsNyArMTczLDIwIEBACiBIaXN0b3J5CiA9PT09PT09CiAKLVNlZSB0aGUgQ2hhbmdlTG9nIGZpbGVzIGZvciBkZXRhaWxzLgorU2VlIHRoZSBnaXQgbG9nIGZvciBkZXRhaWxzIGF0IGh0dHA6Ly9naXRodWIuY29tL2F0Z3JlZW4vbGliZmZpLgorCiszLjEgTWF5LTE5LTE0CisgICAgICAgIEFkZCBBQXJjaDY0IChBUk02NCkgaU9TIHN1cHBvcnQuCisgICAgICAgIEFkZCBOaW9zIElJIHN1cHBvcnQuCisgICAgICAgIEFkZCBtODhrIGFuZCBERUMgVkFYIHN1cHBvcnQuCisJQWRkIHN1cHBvcnQgZm9yIHN0ZGNhbGwsIHRoaXNjYWxsLCBhbmQgZmFzdGNhbGwgb24gbm9uLVdpbmRvd3MKKwkgIDMyLWJpdCB4ODYgdGFyZ2V0cyBzdWNoIGFzIExpbnV4LgorCVZhcmlvdXMgQW5kcm9pZCwgTUlQUyBOMzIsIHg4NiwgRnJlZUJTRCBhbmQgVWx0cmFTUEFSQyBJSWkKKwkgIGZpeGVzLgorCU1ha2UgdGhlIHRlc3RzdWl0ZSBtb3JlIHJvYnVzdDogZWxpbWluYXRlIHNldmVyYWwgc3B1cmlvdXMKKwkgIGZhaWx1cmVzLCBhbmQgcmVzcGVjdCB0aGUgJENDIGFuZCAkQ1hYIGVudmlyb25tZW50IHZhcmlhYmxlcy4KKwlBcmNoaXZlIG9mZiB0aGUgbWFudWFsbHkgbWFpbnRhaW5lZCBDaGFuZ2VMb2cgaW4gZmF2b3Igb2YgZ2l0CisJICBsb2cuCiAKIDMuMC4xMyBNYXItMTctMTMKIAlBZGQgTWV0YSBzdXBwb3J0LgpAQCAtMTg3LDcgKzIxMiw2IEBACiAKIDMuMC4xMSBBcHItMTEtMTIKICAgICAgICAgTG90cyBvZiBidWlsZCBmaXhlcy4KLQlBZGQgQW1pZ2EgbmV3ZXIgTWFjT1Mgc3VwcG9ydC4KIAlBZGQgc3VwcG9ydCBmb3IgdmFyaWFkaWMgZnVuY3Rpb25zIChmZmlfcHJlcF9jaWZfdmFyKS4KIAlBZGQgTGludXgveDMyIHN1cHBvcnQuCiAJQWRkIHRoaXNjYWxsLCBmYXN0Y2FsbCBhbmQgTVNWQyBjZGVjbCBzdXBwb3J0IG9uIFdpbmRvd3MuCkBAIC0zMzksNyArMzYzLDcgQEAKIEF1dGhvcnMgJiBDcmVkaXRzCiA9PT09PT09PT09PT09PT09PQogCi1saWJmZmkgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbnRob255IEdyZWVuIDxncmVlbkByZWRoYXQuY29tPi4KK2xpYmZmaSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEFudGhvbnkgR3JlZW4gPGdyZWVuQG1veGllbG9naWMuY29tPi4KIAogVGhlIGRldmVsb3BlcnMgb2YgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uIHByb2plY3QgaGF2ZSBtYWRlCiBpbm51bWVyYWJsZSB2YWx1YWJsZSBjb250cmlidXRpb25zLiAgU2VlIHRoZSBDaGFuZ2VMb2cgZmlsZSBmb3IKQEAgLTM2MywxMCArMzg3LDEyIEBACiBpYTY0CQlIYW5zIEJvZWhtCiBtMzJyCQlLYXp1aGlybyBJbmFva2EKIG02OGsJCUFuZHJlYXMgU2Nod2FiCittODhrCQlNaW9kIFZhbGxhdAogbWljcm9ibGF6ZQlOYXRoYW4gUm9zc2kKIG1pcHMJCUFudGhvbnkgR3JlZW4sIENhc2V5IE1hcnNoYWxsCiBtaXBzNjQJCURhdmlkIERhbmV5CiBtb3hpZQkJQW50aG9ueSBHcmVlbgorbmlvcyBpaQkJU2FuZHJhIExvb3NlbW9yZQogcGEJCVJhbmRvbHBoIENodW5nLCBEYXZlIEFuZ2xpbiwgQW5kcmVhcyBUb2JsZXIKIHBvd2VycGMJCUdlb2ZmcmV5IEtlYXRpbmcsIEFuZHJlYXMgVG9ibGVyLCAKIAkJCSBEYXZpZCBFZGVsc29obiwgSm9obiBIb3Jua3Zpc3QKQEAgLTM3Niw2ICs0MDIsNyBAQAogc2g2NAkJS2F6IEtvamltYQogc3BhcmMJCUFudGhvbnkgR3JlZW4sIEdvcmRvbiBJcmxhbQogdGlsZS1neC90aWxlcHJvIFdhbHRlciBMZWUKK3ZheAkJTWlvZCBWYWxsYXQKIHg4NgkJQW50aG9ueSBHcmVlbiwgSm9uIEJlbmlzdG9uCiB4ODYtNjQJCUJvIFRob3JzZW4KIHh0ZW5zYQkJQ2hyaXMgWmFua2VsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2FjbG9jYWwubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2FjbG9jYWwubTQKaW5kZXggYzNhYjI3Mi4uNjI5MmZiYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9hY2xvY2FsLm00CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvYWNsb2NhbC5tNApAQCAtMSw2ICsxLDYgQEAKLSMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjEyLjIgLSotIEF1dG9jb25mIC0qLQorIyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBhY2xvY2FsIDEuMTMuNCAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCkBAIC0xMSw2ICsxMSw3IEBACiAjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKICMgUEFSVElDVUxBUiBQVVJQT1NFLgogCittNF9pZm5kZWYoW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW200X2RlZnVuKFtfQU1fQ09ORklHX01BQ1JPX0RJUlNdLCBbXSltNF9kZWZ1bihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbX0FNX0NPTkZJR19NQUNST19ESVJTKCRAKV0pXSkKIG00X2lmbmRlZihbQUNfQVVUT0NPTkZfVkVSU0lPTl0sCiAgIFttNF9jb3B5KFttNF9QQUNLQUdFX1ZFUlNJT05dLCBbQUNfQVVUT0NPTkZfVkVSU0lPTl0pXSlkbmwKIG00X2lmKG00X2RlZm4oW0FDX0FVVE9DT05GX1ZFUlNJT05dKSwgWzIuNjldLCwKQEAgLTgzNywyNCArODM4LDIyIEBACiBkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CiBkbmwgQUNfREVGVU4oW0FDX0xURExfRExTWU1fVVNDT1JFXSwgW10pCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAyLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDgKLQogIyBBTV9BVVRPTUFLRV9WRVJTSU9OKFZFUlNJT04pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQXV0b21ha2UgWC5ZIHRyYWNlcyB0aGlzIG1hY3JvIHRvIGVuc3VyZSBhY2xvY2FsLm00IGhhcyBiZWVuCiAjIGdlbmVyYXRlZCBmcm9tIHRoZSBtNCBmaWxlcyBhY2NvbXBhbnlpbmcgQXV0b21ha2UgWC5ZLgogIyAoVGhpcyBwcml2YXRlIG1hY3JvIHNob3VsZCBub3QgYmUgY2FsbGVkIG91dHNpZGUgdGhpcyBmaWxlLikKIEFDX0RFRlVOKFtBTV9BVVRPTUFLRV9WRVJTSU9OXSwKLVthbV9fYXBpX3ZlcnNpb249JzEuMTInCitbYW1fX2FwaV92ZXJzaW9uPScxLjEzJwogZG5sIFNvbWUgdXNlcnMgZmluZCBBTV9BVVRPTUFLRV9WRVJTSU9OIGFuZCBtaXN0YWtlIGl0IGZvciBhIHdheSB0bwogZG5sIHJlcXVpcmUgc29tZSBtaW5pbXVtIHZlcnNpb24uICBQb2ludCB0aGVtIHRvIHRoZSByaWdodCBtYWNyby4KLW00X2lmKFskMV0sIFsxLjEyLjJdLCBbXSwKK200X2lmKFskMV0sIFsxLjEzLjRdLCBbXSwKICAgICAgIFtBQ19GQVRBTChbRG8gbm90IGNhbGwgJDAsIHVzZSBBTV9JTklUX0FVVE9NQUtFKFskMV0pLl0pXSlkbmwKIF0pCiAKQEAgLTg3MCwyMSArODY5LDE5IEBACiAjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBhbmQgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyB0aGV5IGNhbiBiZSB0cmFjZWQuCiAjIFRoaXMgZnVuY3Rpb24gaXMgQUNfUkVRVUlSRWQgYnkgQU1fSU5JVF9BVVRPTUFLRS4KIEFDX0RFRlVOKFtBTV9TRVRfQ1VSUkVOVF9BVVRPTUFLRV9WRVJTSU9OXSwKLVtBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjEyLjJdKWRubAorW0FNX0FVVE9NQUtFX1ZFUlNJT04oWzEuMTMuNF0pZG5sCiBtNF9pZm5kZWYoW0FDX0FVVE9DT05GX1ZFUlNJT05dLAogICBbbTRfY29weShbbTRfUEFDS0FHRV9WRVJTSU9OXSwgW0FDX0FVVE9DT05GX1ZFUlNJT05dKV0pZG5sCiBfQU1fQVVUT0NPTkZfVkVSU0lPTihtNF9kZWZuKFtBQ19BVVRPQ09ORl9WRVJTSU9OXSkpXSkKIAogIyBGaWd1cmUgb3V0IGhvdyB0byBydW4gdGhlIGFzc2VtYmxlci4gICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA1Ci0KICMgQU1fUFJPR19BUwogIyAtLS0tLS0tLS0tCiBBQ19ERUZVTihbQU1fUFJPR19BU10sCkBAIC04OTksMTQgKzg5NiwxMiBAQAogCiAjIEFNX0FVWF9ESVJfRVhQQU5EICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwMS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDIKLQogIyBGb3IgcHJvamVjdHMgdXNpbmcgQUNfQ09ORklHX0FVWF9ESVIoW2Zvb10pLCBBdXRvY29uZiBzZXRzCiAjICRhY19hdXhfZGlyIHRvICckc3JjZGlyL2ZvbycuICBJbiBvdGhlciBwcm9qZWN0cywgaXQgaXMgc2V0IHRvCiAjICckc3JjZGlyJywgJyRzcmNkaXIvLi4nLCBvciAnJHNyY2Rpci8uLi8uLicuCkBAIC05NTQsMTQgKzk0OSwxMiBAQAogCiAjIEFNX0NPTkRJVElPTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDEwCi0KICMgQU1fQ09ORElUSU9OQUwoTkFNRSwgU0hFTEwtQ09ORElUSU9OKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIERlZmluZSBhIGNvbmRpdGlvbmFsLgpAQCAtOTg3LDEzICs5ODAsMTIgQEAKIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5Ll1dKQogZmldKV0pCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDE3CiAKICMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgJ0FDX1BST0dfQ0MnIGJlCiAjIHdyaXR0ZW4gaW4gY2xlYXIsIGluIHdoaWNoIGNhc2UgYXV0b21ha2UsIHdoZW4gcmVhZGluZyBhY2xvY2FsLm00LApAQCAtMTE3OSwxOSArMTE3MSwxOCBAQAogCiAjIEdlbmVyYXRlIGNvZGUgdG8gc2V0IHVwIGRlcGVuZGVuY3kgdHJhY2tpbmcuICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5OS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDYKIAogIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBQ19ERUZVTihbX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKIFt7Ci0gICMgQXV0b2NvbmYgMi42MiBxdW90ZXMgLS1maWxlIGFyZ3VtZW50cyBmb3IgZXZhbCwgYnV0IG5vdCB3aGVuIGZpbGVzCisgICMgT2xkZXIgQXV0b2NvbmYgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcwogICAjIGFyZSBsaXN0ZWQgd2l0aG91dCAtLWZpbGUuICBMZXQncyBwbGF5IHNhZmUgYW5kIG9ubHkgZW5hYmxlIHRoZSBldmFsCiAgICMgaWYgd2UgZGV0ZWN0IHRoZSBxdW90aW5nLgogICBjYXNlICRDT05GSUdfRklMRVMgaW4KQEAgLTEyMjAsNyArMTIxMSw3IEBACiAgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKICAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQogICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAotICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIHRlc3QgLXogIiRhbV9faW5jbHVkZSIgJiYgY29udGludWUKICAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAogICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKICAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKQEAgLTEyNTYsMTQgKzEyNDcsMTIgQEAKIAogIyBEbyBhbGwgdGhlIHdvcmsgZm9yIEF1dG9tYWtlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMTk5Ni0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAxOQotCiAjIFRoaXMgbWFjcm8gYWN0dWFsbHkgZG9lcyB0b28gbXVjaC4gIFNvbWUgY2hlY2tzIGFyZSBvbmx5IG5lZWRlZCBpZgogIyB5b3VyIHBhY2thZ2UgZG9lcyBjZXJ0YWluIHRoaW5ncy4gIEJ1dCB0aGlzIGlzbid0IHJlYWxseSBhIGJpZyBkZWFsLgogCkBAIC0xMjc5LDcgKzEyNjgsNyBAQAogIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCiAjIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCiBBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCi1bQUNfUFJFUkVRKFsyLjYyXSlkbmwKK1tBQ19QUkVSRVEoWzIuNjVdKWRubAogZG5sIEF1dG9jb25mIHdhbnRzIHRvIGRpc2FsbG93IEFNXyBuYW1lcy4gIFdlIGV4cGxpY2l0bHkgYWxsb3cKIGRubCB0aGUgb25lcyB3ZSBjYXJlIGFib3V0LgogbTRfcGF0dGVybl9hbGxvdyhbXkFNX1tBLVpdK0ZMQUdTJF0pZG5sCkBAIC0xMzA5LDggKzEyOTgsNyBAQAogZG5sIERpc3Rpbmd1aXNoIGJldHdlZW4gb2xkLXN0eWxlIGFuZCBuZXctc3R5bGUgY2FsbHMuCiBtNF9pZnZhbChbJDJdLAogW0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCi1bJDA6IHR3by0gYW5kIHRocmVlLWFyZ3VtZW50cyBmb3JtcyBhcmUgZGVwcmVjYXRlZC4gIEZvciBtb3JlIGluZm8sIHNlZToKLWh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9hdXRvbWFrZS9tYW51YWwvYXV0b21ha2UuaHRtbCNNb2Rlcm5pemUtQU1fSU5JVF9BVVRPTUFLRS1pbnZvY2F0aW9uXSkKKyAgICAgICAgICAgICBbJDA6IHR3by0gYW5kIHRocmVlLWFyZ3VtZW50cyBmb3JtcyBhcmUgZGVwcmVjYXRlZC5dKQogbTRfaWZ2YWwoWyQzXSwgW19BTV9TRVRfT1BUSU9OKFtuby1kZWZpbmVdKV0pZG5sCiAgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJDFdKWRubAogIEFDX1NVQlNUKFtWRVJTSU9OXSwgWyQyXSldLApAQCAtMTM2NCwxOCArMTM1MiwxNSBAQAogCQkgIFtfQU1fREVQRU5ERU5DSUVTKFtPQkpDXSldLAogCQkgIFttNF9kZWZpbmUoW0FDX1BST0dfT0JKQ10sCiAJCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ10pW19BTV9ERVBFTkRFTkNJRVMoW09CSkNdKV0pXSlkbmwKLWRubCBTdXBwb3J0IGZvciBPYmplY3RpdmUgQysrIHdhcyBvbmx5IGludHJvZHVjZWQgaW4gQXV0b2NvbmYgMi42NSwKLWRubCBidXQgd2Ugc3RpbGwgY2F0ZXIgdG8gQXV0b2NvbmYgMi42Mi4KLW00X2lmZGVmKFtBQ19QUk9HX09CSkNYWF0sCi1bQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfT0JKQ1hYXSwKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX09CSkNYWF0sCiAJCSAgW19BTV9ERVBFTkRFTkNJRVMoW09CSkNYWF0pXSwKIAkJICBbbTRfZGVmaW5lKFtBQ19QUk9HX09CSkNYWF0sCi0JCQkgICAgIG00X2RlZm4oW0FDX1BST0dfT0JKQ1hYXSlbX0FNX0RFUEVOREVOQ0lFUyhbT0JKQ1hYXSldKV0pXSlkbmwKKwkJCSAgICAgbTRfZGVmbihbQUNfUFJPR19PQkpDWFhdKVtfQU1fREVQRU5ERU5DSUVTKFtPQkpDWFhdKV0pXSlkbmwKIF0pCi1fQU1fSUZfT1BUSU9OKFtzaWxlbnQtcnVsZXNdLCBbQUNfUkVRVUlSRShbQU1fU0lMRU5UX1JVTEVTXSldKWRubAotZG5sIFRoZSAncGFyYWxsZWwtdGVzdHMnIGRyaXZlciBtYXkgbmVlZCB0byBrbm93IGFib3V0IEVYRUVYVCwgc28gYWRkIHRoZQotZG5sICdhbV9fRVhFRVhUJyBjb25kaXRpb25hbCBpZiBfQU1fQ09NUElMRVJfRVhFRVhUIHdhcyBzZWVuLiAgVGhpcyBtYWNybwotZG5sIGlzIGhvb2tlZCBvbnRvIF9BQ19DT01QSUxFUl9FWEVFWFQgZWFybHksIHNlZSBiZWxvdy4KK0FDX1JFUVVJUkUoW0FNX1NJTEVOVF9SVUxFU10pZG5sCitkbmwgVGhlIHRlc3RzdWl0ZSBkcml2ZXIgbWF5IG5lZWQgdG8ga25vdyBhYm91dCBFWEVFWFQsIHNvIGFkZCB0aGUKK2RubCAnYW1fX0VYRUVYVCcgY29uZGl0aW9uYWwgaWYgX0FNX0NPTVBJTEVSX0VYRUVYVCB3YXMgc2Vlbi4gIFRoaXMKK2RubCBtYWNybyBpcyBob29rZWQgb250byBfQUNfQ09NUElMRVJfRVhFRVhUIGVhcmx5LCBzZWUgYmVsb3cuCiBBQ19DT05GSUdfQ09NTUFORFNfUFJFKGRubAogW200X3Byb3ZpZGVfaWYoW19BTV9DT01QSUxFUl9FWEVFWFRdLAogICBbQU1fQ09ORElUSU9OQUwoW2FtX19FWEVFWFRdLCBbdGVzdCAtbiAiJEVYRUVYVCJdKV0pXSlkbmwKQEAgLTE0MDksMTQgKzEzOTQsMTIgQEAKIGRvbmUKIGVjaG8gInRpbWVzdGFtcCBmb3IgJF9hbV9hcmciID5gQVNfRElSTkFNRShbIiRfYW1fYXJnIl0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgOAotCiAjIEFNX1BST0dfSU5TVEFMTF9TSAogIyAtLS0tLS0tLS0tLS0tLS0tLS0KICMgRGVmaW5lICRpbnN0YWxsX3NoLgpAQCAtMTQzMiwxNCArMTQxNSwxMiBAQAogZmkKIEFDX1NVQlNUKFtpbnN0YWxsX3NoXSldKQogCi0jIENvcHlyaWdodCAoQykgMjAwMy0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCAyCi0KICMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKICMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgogQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCkBAIC0xNDU2LDE0ICsxNDM3LDEyIEBACiAjIEFkZCAtLWVuYWJsZS1tYWludGFpbmVyLW1vZGUgb3B0aW9uIHRvIGNvbmZpZ3VyZS4gICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAjIEZyb20gSmltIE1leWVyaW5nCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDcKLQogIyBBTV9NQUlOVEFJTkVSX01PREUoW0RFRkFVTFQtTU9ERV0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ29udHJvbCBtYWludGFpbmVyLXNwZWNpZmljIHBvcnRpb25zIG9mIE1ha2VmaWxlcy4KQEAgLTE0OTEsMTggKzE0NzAsMTQgQEAKIF0KICkKIAotQVVfREVGVU4oW2ptX01BSU5UQUlORVJfTU9ERV0sIFtBTV9NQUlOVEFJTkVSX01PREVdKQotCiAjIENoZWNrIHRvIHNlZSBob3cgJ21ha2UnIHRyZWF0cyBpbmNsdWRlcy4JICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQogCi0jIENvcHlyaWdodCAoQykgMjAwMS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA1Ci0KICMgQU1fTUFLRV9JTkNMVURFKCkKICMgLS0tLS0tLS0tLS0tLS0tLS0KICMgQ2hlY2sgdG8gc2VlIGhvdyBtYWtlIHRyZWF0cyBpbmNsdWRlcy4KQEAgLTE1NDUsMTQgKzE1MjAsMTIgQEAKIHJtIC1mIGNvbmZpbmMgY29uZm1mCiBdKQogCi0jIENvcHlyaWdodCAoQykgMTk5OS0yMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBDb3B5cmlnaHQgKEMpIDE5OTktMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgogCi0jIHNlcmlhbCA2Ci0KICMgQU1fUFJPR19DQ19DX08KICMgLS0tLS0tLS0tLS0tLS0KICMgTGlrZSBBQ19QUk9HX0NDX0NfTywgYnV0IGNoYW5nZWQgZm9yIGF1dG9tYWtlLgpAQCAtMTU4MSwxNCArMTU1NCwxMiBAQAogCiAjIEZha2UgdGhlIGV4aXN0ZW5jZSBvZiBwcm9ncmFtcyB0aGF0IEdOVSBtYWludGFpbmVycyB1c2UuICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk3LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5Ny0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDcKLQogIyBBTV9NSVNTSU5HX1BST0coTkFNRSwgUFJPR1JBTSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBQ19ERUZVTihbQU1fTUlTU0lOR19QUk9HXSwKQEAgLTE1OTYsMTEgKzE1NjcsMTAgQEAKICQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQogQUNfU1VCU1QoJDEpXSkKIAotCiAjIEFNX01JU1NJTkdfSEFTX1JVTgogIyAtLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgotIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCisjIERlZmluZSBNSVNTSU5HIGlmIG5vdCBkZWZpbmVkIHNvIGZhciBhbmQgdGVzdCBpZiBpdCBpcyBtb2Rlcm4gZW5vdWdoLgorIyBJZiBpdCBpcywgc2V0IGFtX21pc3NpbmdfcnVuIHRvIHVzZSBpdCwgb3RoZXJ3aXNlLCB0byBub3RoaW5nLgogQUNfREVGVU4oW0FNX01JU1NJTkdfSEFTX1JVTl0sCiBbQUNfUkVRVUlSRShbQU1fQVVYX0RJUl9FWFBBTkRdKWRubAogQUNfUkVRVUlSRV9BVVhfRklMRShbbWlzc2luZ10pZG5sCkBAIC0xNjEzLDggKzE1ODMsOCBAQAogICBlc2FjCiBmaQogIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCi1pZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgotICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgoraWYgZXZhbCAiJE1JU1NJTkcgLS1pcy1saWdodHdlaWdodCI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HICIKIGVsc2UKICAgYW1fbWlzc2luZ19ydW49CiAgIEFDX01TR19XQVJOKFsnbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCkBAIC0xNjIzLDE0ICsxNTkzLDEyIEBACiAKICMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KIAotIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgNgotCiAjIF9BTV9NQU5HTEVfT1BUSU9OKE5BTUUpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBQ19ERUZVTihbX0FNX01BTkdMRV9PUFRJT05dLApAQCAtMTY1NiwxNCArMTYyNCwxMiBAQAogCiAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBidWlsZCBlbnZpcm9ubWVudCBpcyBzYW5lLiAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDkKLQogIyBBTV9TQU5JVFlfQ0hFQ0sKICMgLS0tLS0tLS0tLS0tLS0tCiBBQ19ERUZVTihbQU1fU0FOSVRZX0NIRUNLXSwKQEAgLTE3MzksMTMgKzE3MDUsNzEgQEAKIHJtIC1mIGNvbmZ0ZXN0LmZpbGUKIF0pCiAKLSMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwOS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDIKKyMgQU1fU0lMRU5UX1JVTEVTKFtERUZBVUxUXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGxlc3MgdmVyYm9zZSBidWlsZCBydWxlczsgd2l0aCB0aGUgZGVmYXVsdCBzZXQgdG8gREVGQVVMVAorIyAoInllcyIgYmVpbmcgbGVzcyB2ZXJib3NlLCAibm8iIG9yIGVtcHR5IGJlaW5nIHZlcmJvc2UpLgorQUNfREVGVU4oW0FNX1NJTEVOVF9SVUxFU10sCitbQUNfQVJHX0VOQUJMRShbc2lsZW50LXJ1bGVzXSwgW2RubAorQVNfSEVMUF9TVFJJTkcoCisgIFstLWVuYWJsZS1zaWxlbnQtcnVsZXNdLAorICBbbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0xIildKQorQVNfSEVMUF9TVFJJTkcoCisgIFstLWRpc2FibGUtc2lsZW50LXJ1bGVzXSwKKyAgW3ZlcmJvc2UgYnVpbGQgb3V0cHV0ICh1bmRvOiAibWFrZSBWPTAiKV0pZG5sCitdKQorY2FzZSAkZW5hYmxlX3NpbGVudF9ydWxlcyBpbiBAJTpAICgoKAorICB5ZXMpIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTA7OworICAgbm8pIEFNX0RFRkFVTFRfVkVSQk9TSVRZPTE7OworICAgICopIEFNX0RFRkFVTFRfVkVSQk9TSVRZPW00X2lmKFskMV0sIFt5ZXNdLCBbMF0sIFsxXSk7OworZXNhYworZG5sCitkbmwgQSBmZXcgJ21ha2UnIGltcGxlbWVudGF0aW9ucyAoZS5nLiwgTm9uU3RvcCBPUyBhbmQgTmV4dFN0ZXApCitkbmwgZG8gbm90IHN1cHBvcnQgbmVzdGVkIHZhcmlhYmxlIGV4cGFuc2lvbnMuCitkbmwgU2VlIGF1dG9tYWtlIGJ1ZyM5OTI4IGFuZCBidWcjMTAyMzcuCithbV9tYWtlPSR7TUFLRS1tYWtlfQorQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlc10sCisgICBbYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXNdLAorICAgW2lmIEFTX0VDSE8oW1snVFJVRT0kKEJBUiQoVikpCitCQVIwPWZhbHNlCitCQVIxPXRydWUKK1Y9MQorYW1fX2RvaXQ6CisJQCQoVFJVRSkKKy5QSE9OWTogYW1fX2RvaXQnXV0pIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCitlbHNlCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCitmaV0pCitpZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgorICBkbmwgVXNpbmcgJyRWJyBpbnN0ZWFkIG9mICckKFYpJyBicmVha3MgSVJJWCBtYWtlLgorICBBTV9WPSckKFYpJworICBBTV9ERUZBVUxUX1Y9JyQoQU1fREVGQVVMVF9WRVJCT1NJVFkpJworZWxzZQorICBBTV9WPSRBTV9ERUZBVUxUX1ZFUkJPU0lUWQorICBBTV9ERUZBVUxUX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCitmaQorQUNfU1VCU1QoW0FNX1ZdKWRubAorQU1fU1VCU1RfTk9UTUFLRShbQU1fVl0pZG5sCitBQ19TVUJTVChbQU1fREVGQVVMVF9WXSlkbmwKK0FNX1NVQlNUX05PVE1BS0UoW0FNX0RFRkFVTFRfVl0pZG5sCitBQ19TVUJTVChbQU1fREVGQVVMVF9WRVJCT1NJVFldKWRubAorQU1fQkFDS1NMQVNIPSdcJworQUNfU1VCU1QoW0FNX0JBQ0tTTEFTSF0pZG5sCitfQU1fU1VCU1RfTk9UTUFLRShbQU1fQkFDS1NMQVNIXSlkbmwKK10pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAogIyBBTV9QUk9HX0lOU1RBTExfU1RSSVAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzY5LDE0ICsxNzkzLDEyIEBACiBJTlNUQUxMX1NUUklQX1BST0dSQU09IlwkKGluc3RhbGxfc2gpIC1jIC1zIgogQUNfU1VCU1QoW0lOU1RBTExfU1RSSVBfUFJPR1JBTV0pXSkKIAotIyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAyMDA2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCiAjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KIAotIyBzZXJpYWwgMwotCiAjIF9BTV9TVUJTVF9OT1RNQUtFKFZBUklBQkxFKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgUHJldmVudCBBdXRvbWFrZSBmcm9tIG91dHB1dHRpbmcgVkFSSUFCTEUgPSBAVkFSSUFCTEVAIGluIE1ha2VmaWxlLmluLgpAQCAtMTc5MCwxNCArMTgxMiwxMiBAQAogCiAjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCiAKLSMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAogIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDMKLQogIyBfQU1fUFJPR19UQVIoRk9STUFUKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbCBpbiBmb3JtYXQgRk9STUFULgpAQCAtMTgxMSw3NiArMTgzMSwxMTQgQEAKICMgU3Vic3RpdHV0ZSBhIHZhcmlhYmxlICQoYW1fX3VudGFyKSB0aGF0IGV4dHJhY3Qgc3VjaAogIyBhIHRhcmJhbGwgcmVhZCBmcm9tIHN0ZGluLgogIyAgICAgJChhbV9fdW50YXIpIDwgcmVzdWx0LnRhcgorIwogQUNfREVGVU4oW19BTV9QUk9HX1RBUl0sCiBbIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAgWWVzLCBpdCdzIHN0aWxsIHVzZWQKICMgaW4gdGhlIHdpbGQgOi0oICBXZSBzaG91bGQgZmluZCBhIHByb3BlciB3YXkgdG8gZGVwcmVjYXRlIGl0IC4uLgogQUNfU1VCU1QoW0FNVEFSXSwgWyckJHtUQVItdGFyfSddKQotbTRfaWYoWyQxXSwgW3Y3XSwKLSAgICAgW2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nXSwKLSAgICAgW200X2Nhc2UoWyQxXSwgW3VzdGFyXSwsIFtwYXhdLCwKLSAgICAgICAgICAgICAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCi1BQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjcmVhdGUgYSAkMSB0YXIgYXJjaGl2ZV0pCi0jIExvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCisKKyMgV2UnbGwgbG9vcCBvdmVyIGFsbCBrbm93biBtZXRob2RzIHRvIGNyZWF0ZSBhIHRhciBhcmNoaXZlIHVudGlsIG9uZSB3b3Jrcy4KIF9hbV90b29scz0nZ251dGFyIG00X2lmKFskMV0sIFt1c3Rhcl0sIFtwbGFpbnRhcl0pIHBheCBjcGlvIG5vbmUnCi1fYW1fdG9vbHM9JHthbV9jdl9wcm9nX3Rhcl8kMS0kX2FtX3Rvb2xzfQotIyBEbyBub3QgZm9sZCB0aGUgYWJvdmUgdHdvIGxpbmUgaW50byBvbmUsIGJlY2F1c2UgVHJ1NjQgc2ggYW5kCi0jIFNvbGFyaXMgc2ggd2lsbCBub3QgZ3JvayBzcGFjZXMgaW4gdGhlIHJocyBvZiAnLScuCi1mb3IgX2FtX3Rvb2wgaW4gJF9hbV90b29scwotZG8KLSAgY2FzZSAkX2FtX3Rvb2wgaW4KLSAgZ251dGFyKQotICAgIGZvciBfYW1fdGFyIGluIHRhciBnbnV0YXIgZ3RhcjsKLSAgICBkbwotICAgICAgQU1fUlVOX0xPRyhbJF9hbV90YXIgLS12ZXJzaW9uXSkgJiYgYnJlYWsKLSAgICBkb25lCi0gICAgYW1fX3Rhcj0iJF9hbV90YXIgLS1mb3JtYXQ9bTRfaWYoWyQxXSwgW3BheF0sIFtwb3NpeF0sIFskMV0pIC1jaGYgLSAiJyIkJHRhcmRpciInCi0gICAgYW1fX3Rhcl89IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJHRhcmRpciInCi0gICAgYW1fX3VudGFyPSIkX2FtX3RhciAteGYgLSIKLSAgICA7OwotICBwbGFpbnRhcikKLSAgICAjIE11c3Qgc2tpcCBHTlUgdGFyOiBpZiBpdCBkb2VzIG5vdCBzdXBwb3J0IC0tZm9ybWF0PSBpdCBkb2Vzbid0IGNyZWF0ZQotICAgICMgdXN0YXIgdGFyYmFsbCBlaXRoZXIuCi0gICAgKHRhciAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMSAmJiBjb250aW51ZQotICAgIGFtX190YXI9J3RhciBjaGYgLSAiJCR0YXJkaXIiJwotICAgIGFtX190YXJfPSd0YXIgY2hmIC0gIiR0YXJkaXIiJwotICAgIGFtX191bnRhcj0ndGFyIHhmIC0nCi0gICAgOzsKLSAgcGF4KQotICAgIGFtX190YXI9J3BheCAtTCAteCAkMSAtdyAiJCR0YXJkaXIiJwotICAgIGFtX190YXJfPSdwYXggLUwgLXggJDEgLXcgIiR0YXJkaXIiJwotICAgIGFtX191bnRhcj0ncGF4IC1yJwotICAgIDs7Ci0gIGNwaW8pCi0gICAgYW1fX3Rhcj0nZmluZCAiJCR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCi0gICAgYW1fX3Rhcl89J2ZpbmQgIiR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCi0gICAgYW1fX3VudGFyPSdjcGlvIC1pIC1IICQxIC1kJwotICAgIDs7Ci0gIG5vbmUpCi0gICAgYW1fX3Rhcj1mYWxzZQotICAgIGFtX190YXJfPWZhbHNlCi0gICAgYW1fX3VudGFyPWZhbHNlCi0gICAgOzsKLSAgZXNhYwogCi0gICMgSWYgdGhlIHZhbHVlIHdhcyBjYWNoZWQsIHN0b3Agbm93LiAgV2UganVzdCB3YW50ZWQgdG8gaGF2ZSBhbV9fdGFyCi0gICMgYW5kIGFtX191bnRhciBzZXQuCi0gIHRlc3QgLW4gIiR7YW1fY3ZfcHJvZ190YXJfJDF9IiAmJiBicmVhaworbTRfaWYoWyQxXSwgW3Y3XSwKKyAgW2FtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nXSwKIAotICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MKKyAgW200X2Nhc2UoWyQxXSwKKyAgICBbdXN0YXJdLAorICAgICBbIyBUaGUgUE9TSVggMTk4OCAndXN0YXInIGZvcm1hdCBpcyBkZWZpbmVkIHdpdGggZml4ZWQtc2l6ZSBmaWVsZHMuCisgICAgICAjIFRoZXJlIGlzIG5vdGFibHkgYSAyMSBiaXRzIGxpbWl0IGZvciB0aGUgVUlEIGFuZCB0aGUgR0lELiAgSW4gZmFjdCwKKyAgICAgICMgdGhlICdwYXgnIHV0aWxpdHkgY2FuIGhhbmcgb24gYmlnZ2VyIFVJRC9HSUQgKHNlZSBhdXRvbWFrZSBidWcjODM0MworICAgICAgIyBhbmQgYnVnIzEzNTg4KS4KKyAgICAgIGFtX21heF91aWQ9MjA5NzE1MSAjIDJeMjEgLSAxCisgICAgICBhbV9tYXhfZ2lkPSRhbV9tYXhfdWlkCisgICAgICAjIFRoZSAkVUlEIGFuZCAkR0lEIHZhcmlhYmxlcyBhcmUgbm90IHBvcnRhYmxlLCBzbyB3ZSBuZWVkIHRvIHJlc29ydAorICAgICAgIyB0byB0aGUgUE9TSVgtbWFuZGF0ZWQgaWQoMSkgdXRpbGl0eS4gIEVycm9ycyBpbiB0aGUgJ2lkJyBjYWxscworICAgICAgIyBiZWxvdyBhcmUgZGVmaW5pdGVseSB1bmV4cGVjdGVkLCBzbyBhbGxvdyB0aGUgdXNlcnMgdG8gc2VlIHRoZW0KKyAgICAgICMgKHRoYXQgaXMsIGF2b2lkIHN0ZGVyciByZWRpcmVjdGlvbikuCisgICAgICBhbV91aWQ9YGlkIC11IHx8IGVjaG8gdW5rbm93bmAKKyAgICAgIGFtX2dpZD1gaWQgLWcgfHwgZWNobyB1bmtub3duYAorICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIFVJRCAnJGFtX3VpZCcgaXMgc3VwcG9ydGVkIGJ5IHVzdGFyIGZvcm1hdF0pCisgICAgICBpZiB0ZXN0ICRhbV91aWQgLWxlICRhbV9tYXhfdWlkOyB0aGVuCisgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgZWxzZQorICAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgICAgICAgX2FtX3Rvb2xzPW5vbmUKKyAgICAgIGZpCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgR0lEICckYW1fZ2lkJyBpcyBzdXBwb3J0ZWQgYnkgdXN0YXIgZm9ybWF0XSkKKyAgICAgIGlmIHRlc3QgJGFtX2dpZCAtbGUgJGFtX21heF9naWQ7IHRoZW4KKyAgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisgICAgICBlbHNlCisgICAgICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICAgICAgX2FtX3Rvb2xzPW5vbmUKKyAgICAgIGZpXSwKKworICBbcGF4XSwKKyAgICBbXSwKKworICBbbTRfZmF0YWwoW1Vua25vd24gdGFyIGZvcm1hdF0pXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjcmVhdGUgYSAkMSB0YXIgYXJjaGl2ZV0pCisKKyAgIyBHbyBhaGVhZCBldmVuIGlmIHdlIGhhdmUgdGhlIHZhbHVlIGFscmVhZHkgY2FjaGVkLiAgV2UgZG8gc28gYmVjYXVzZSB3ZQorICAjIG5lZWQgdG8gc2V0IHRoZSB2YWx1ZXMgZm9yIHRoZSAnYW1fX3RhcicgYW5kICdhbV9fdW50YXInIHZhcmlhYmxlcy4KKyAgX2FtX3Rvb2xzPSR7YW1fY3ZfcHJvZ190YXJfJDEtJF9hbV90b29sc30KKworICBmb3IgX2FtX3Rvb2wgaW4gJF9hbV90b29sczsgZG8KKyAgICBjYXNlICRfYW1fdG9vbCBpbgorICAgIGdudXRhcikKKyAgICAgIGZvciBfYW1fdGFyIGluIHRhciBnbnV0YXIgZ3RhcjsgZG8KKyAgICAgICAgQU1fUlVOX0xPRyhbJF9hbV90YXIgLS12ZXJzaW9uXSkgJiYgYnJlYWsKKyAgICAgIGRvbmUKKyAgICAgIGFtX190YXI9IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJCR0YXJkaXIiJworICAgICAgYW1fX3Rhcl89IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJHRhcmRpciInCisgICAgICBhbV9fdW50YXI9IiRfYW1fdGFyIC14ZiAtIgorICAgICAgOzsKKyAgICBwbGFpbnRhcikKKyAgICAgICMgTXVzdCBza2lwIEdOVSB0YXI6IGlmIGl0IGRvZXMgbm90IHN1cHBvcnQgLS1mb3JtYXQ9IGl0IGRvZXNuJ3QgY3JlYXRlCisgICAgICAjIHVzdGFyIHRhcmJhbGwgZWl0aGVyLgorICAgICAgKHRhciAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMSAmJiBjb250aW51ZQorICAgICAgYW1fX3Rhcj0ndGFyIGNoZiAtICIkJHRhcmRpciInCisgICAgICBhbV9fdGFyXz0ndGFyIGNoZiAtICIkdGFyZGlyIicKKyAgICAgIGFtX191bnRhcj0ndGFyIHhmIC0nCisgICAgICA7OworICAgIHBheCkKKyAgICAgIGFtX190YXI9J3BheCAtTCAteCAkMSAtdyAiJCR0YXJkaXIiJworICAgICAgYW1fX3Rhcl89J3BheCAtTCAteCAkMSAtdyAiJHRhcmRpciInCisgICAgICBhbV9fdW50YXI9J3BheCAtcicKKyAgICAgIDs7CisgICAgY3BpbykKKyAgICAgIGFtX190YXI9J2ZpbmQgIiQkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgICAgYW1fX3Rhcl89J2ZpbmQgIiR0YXJkaXIiIC1wcmludCB8IGNwaW8gLW8gLUggJDEgLUwnCisgICAgICBhbV9fdW50YXI9J2NwaW8gLWkgLUggJDEgLWQnCisgICAgICA7OworICAgIG5vbmUpCisgICAgICBhbV9fdGFyPWZhbHNlCisgICAgICBhbV9fdGFyXz1mYWxzZQorICAgICAgYW1fX3VudGFyPWZhbHNlCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgSWYgdGhlIHZhbHVlIHdhcyBjYWNoZWQsIHN0b3Agbm93LiAgV2UganVzdCB3YW50ZWQgdG8gaGF2ZSBhbV9fdGFyCisgICAgIyBhbmQgYW1fX3VudGFyIHNldC4KKyAgICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyXyQxfSIgJiYgYnJlYWsKKworICAgICMgdGFyL3VudGFyIGEgZHVtbXkgZGlyZWN0b3J5LCBhbmQgc3RvcCBpZiB0aGUgY29tbWFuZCB3b3Jrcy4KKyAgICBybSAtcmYgY29uZnRlc3QuZGlyCisgICAgbWtkaXIgY29uZnRlc3QuZGlyCisgICAgZWNobyBHcmVwTWUgPiBjb25mdGVzdC5kaXIvZmlsZQorICAgIEFNX1JVTl9MT0coW3RhcmRpcj1jb25mdGVzdC5kaXIgJiYgZXZhbCAkYW1fX3Rhcl8gPmNvbmZ0ZXN0LnRhcl0pCisgICAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICAgIGlmIHRlc3QgLXMgY29uZnRlc3QudGFyOyB0aGVuCisgICAgICBBTV9SVU5fTE9HKFskYW1fX3VudGFyIDxjb25mdGVzdC50YXJdKQorICAgICAgQU1fUlVOX0xPRyhbY2F0IGNvbmZ0ZXN0LmRpci9maWxlXSkKKyAgICAgIGdyZXAgR3JlcE1lIGNvbmZ0ZXN0LmRpci9maWxlID4vZGV2L251bGwgMj4mMSAmJiBicmVhaworICAgIGZpCisgIGRvbmUKICAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgotICBta2RpciBjb25mdGVzdC5kaXIKLSAgZWNobyBHcmVwTWUgPiBjb25mdGVzdC5kaXIvZmlsZQotICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQotICBybSAtcmYgY29uZnRlc3QuZGlyCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QudGFyOyB0aGVuCi0gICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKLSAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKLSAgZmkKLWRvbmUKLXJtIC1yZiBjb25mdGVzdC5kaXIKIAotQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQotQUNfTVNHX1JFU1VMVChbJGFtX2N2X3Byb2dfdGFyXyQxXSldKQorICBBQ19DQUNIRV9WQUwoW2FtX2N2X3Byb2dfdGFyXyQxXSwgW2FtX2N2X3Byb2dfdGFyXyQxPSRfYW1fdG9vbF0pCisgIEFDX01TR19SRVNVTFQoWyRhbV9jdl9wcm9nX3Rhcl8kMV0pXSkKKwogQUNfU1VCU1QoW2FtX190YXJdKQogQUNfU1VCU1QoW2FtX191bnRhcl0pCiBdKSAjIF9BTV9QUk9HX1RBUgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9idWlsZC1pb3Muc2ggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2J1aWxkLWlvcy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggM2RlYTI0Mi4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2J1aWxkLWlvcy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1QTEFURk9STV9JT1M9L0RldmVsb3Blci9QbGF0Zm9ybXMvaVBob25lT1MucGxhdGZvcm0vCi1QTEFURk9STV9JT1NfU0lNPS9EZXZlbG9wZXIvUGxhdGZvcm1zL2lQaG9uZVNpbXVsYXRvci5wbGF0Zm9ybS8KLVNES19JT1NfVkVSU0lPTj0iNC4yIgotTUlOX0lPU19WRVJTSU9OPSIzLjAiCi1PVVRQVVRfRElSPSJ1bml2ZXJzYWwtaW9zIgotCi1idWlsZF90YXJnZXQgKCkgewotICAgIGxvY2FsIHBsYXRmb3JtPSQxCi0gICAgbG9jYWwgc2RrPSQyCi0gICAgbG9jYWwgYXJjaD0kMwotICAgIGxvY2FsIHRyaXBsZT0kNAotICAgIGxvY2FsIGJ1aWxkZGlyPSQ1Ci0KLSAgICBta2RpciAtcCAiJHtidWlsZGRpcn0iCi0gICAgcHVzaGQgIiR7YnVpbGRkaXJ9IgotICAgIGV4cG9ydCBDQz0iJHtwbGF0Zm9ybX0iL0RldmVsb3Blci91c3IvYmluL2djYy00LjIKLSAgICBleHBvcnQgQ0ZMQUdTPSItYXJjaCAke2FyY2h9IC1pc3lzcm9vdCAke3Nka30gLW1pcGhvbmVvcy12ZXJzaW9uLW1pbj0ke01JTl9JT1NfVkVSU0lPTn0iCi0gICAgLi4vY29uZmlndXJlIC0taG9zdD0ke3RyaXBsZX0gJiYgbWFrZQotICAgIHBvcGQKLX0KLQotIyBCdWlsZCBhbGwgdGFyZ2V0cwotYnVpbGRfdGFyZ2V0ICIke1BMQVRGT1JNX0lPU30iICIke1BMQVRGT1JNX0lPU30vRGV2ZWxvcGVyL1NES3MvaVBob25lT1Mke1NES19JT1NfVkVSU0lPTn0uc2RrLyIgYXJtdjYgYXJtLWFwcGxlLWRhcndpbjEwIGFybXY2LWlvcwotYnVpbGRfdGFyZ2V0ICIke1BMQVRGT1JNX0lPU30iICIke1BMQVRGT1JNX0lPU30vRGV2ZWxvcGVyL1NES3MvaVBob25lT1Mke1NES19JT1NfVkVSU0lPTn0uc2RrLyIgYXJtdjcgYXJtLWFwcGxlLWRhcndpbjEwIGFybXY3LWlvcwotYnVpbGRfdGFyZ2V0ICIke1BMQVRGT1JNX0lPU19TSU19IiAiJHtQTEFURk9STV9JT1NfU0lNfS9EZXZlbG9wZXIvU0RLcy9pUGhvbmVTaW11bGF0b3Ike1NES19JT1NfVkVSU0lPTn0uc2RrLyIgaTM4NiBpMzg2LWFwcGxlLWRhcndpbjEwIGkzODYtaW9zLXNpbQotCi0jIENyZWF0ZSB1bml2ZXJzYWwgb3V0cHV0IGRpcmVjdG9yaWVzCi1ta2RpciAtcCAiJHtPVVRQVVRfRElSfSIKLW1rZGlyIC1wICIke09VVFBVVF9ESVJ9L2luY2x1ZGUiCi1ta2RpciAtcCAiJHtPVVRQVVRfRElSfS9pbmNsdWRlL2FybXY2IgotbWtkaXIgLXAgIiR7T1VUUFVUX0RJUn0vaW5jbHVkZS9hcm12NyIKLW1rZGlyIC1wICIke09VVFBVVF9ESVJ9L2luY2x1ZGUvaTM4NiIKLQotIyBDcmVhdGUgdGhlIHVuaXZlcnNhbCBiaW5hcnkKLWxpcG8gLWNyZWF0ZSBhcm12Ni1pb3MvLmxpYnMvbGliZmZpLmEgYXJtdjctaW9zLy5saWJzL2xpYmZmaS5hIGkzODYtaW9zLXNpbS8ubGlicy9saWJmZmkuYSAtb3V0cHV0ICIke09VVFBVVF9ESVJ9L2xpYmZmaS5hIgotCi0jIENvcHkgaW4gdGhlIGhlYWRlcnMKLWNvcHlfaGVhZGVycyAoKSB7Ci0gICAgbG9jYWwgc3JjPSQxCi0gICAgbG9jYWwgZGVzdD0kMgotCi0gICAgIyBGaXggbm9uLXJlbGF0aXZlIGhlYWRlciByZWZlcmVuY2UKLSAgICBzZWQgJ3MvPGZmaXRhcmdldC5oPi8iZmZpdGFyZ2V0LmgiLycgPCAiJHtzcmN9L2luY2x1ZGUvZmZpLmgiID4gIiR7ZGVzdH0vZmZpLmgiCi0gICAgY3AgIiR7c3JjfS9pbmNsdWRlL2ZmaXRhcmdldC5oIiAiJHtkZXN0fSIKLX0KLQotY29weV9oZWFkZXJzIGFybXY2LWlvcyAiJHtPVVRQVVRfRElSfS9pbmNsdWRlL2FybXY2IgotY29weV9oZWFkZXJzIGFybXY3LWlvcyAiJHtPVVRQVVRfRElSfS9pbmNsdWRlL2FybXY3IgotY29weV9oZWFkZXJzIGkzODYtaW9zLXNpbSAiJHtPVVRQVVRfRElSfS9pbmNsdWRlL2kzODYiCi0KLSMgQ3JlYXRlIHRvcC1sZXZlbCBoZWFkZXIKLSgKLWNhdCA8PCBFT0YKLSNpZmRlZiBfX2FybV9fCi0gICNpbmNsdWRlIDxhcm0vYXJjaC5oPgotICAjaWZkZWYgX0FSTV9BUkNIXzYKLSAgICAjaW5jbHVkZSAiaW5jbHVkZS9hcm12Ni9mZmkuaCIKLSAgI2VsaWYgX0FSTV9BUkNIXzcKLSAgICAjaW5jbHVkZSAiaW5jbHVkZS9hcm12Ny9mZmkuaCIKLSAgI2VuZGlmCi0jZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQotICAjaW5jbHVkZSAiaW5jbHVkZS9pMzg2L2ZmaS5oIgotI2VuZGlmCi1FT0YKLSkgPiAiJHtPVVRQVVRfRElSfS9mZmkuaCIKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29tcGlsZSBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29tcGlsZQppbmRleCBjMDA5NmE3Li41MzExMzZiIDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbXBpbGUKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb21waWxlCkBAIC0xLDEwICsxLDkgQEAKICMhIC9iaW4vc2gKLSMgV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kIGAtYyAtbycuCisjIFdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCAnLWMgLW8nLgogCi1zY3JpcHR2ZXJzaW9uPTIwMDktMTAtMDYuMjA7ICMgVVRDCitzY3JpcHR2ZXJzaW9uPTIwMTItMTAtMTQuMTE7ICMgVVRDCiAKLSMgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA5ICBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgogIwogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMjksMjEgKzI4LDIyNCBAQAogIyBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4gb3Igc2VuZCBwYXRjaGVzIHRvCiAjIDxhdXRvbWFrZS1wYXRjaGVzQGdudS5vcmc+LgogCitubD0nCisnCisKKyMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuICBRdW90aW5nIGlzCisjIHRoZXJlIHRvIHByZXZlbnQgdG9vbHMgZnJvbSBjb21wbGFpbmluZyBhYm91dCB3aGl0ZXNwYWNlIHVzYWdlLgorSUZTPSIgIiIJJG5sIgorCitmaWxlX2NvbnY9CisKKyMgZnVuY19maWxlX2NvbnYgYnVpbGRfZmlsZSBsYXp5CisjIENvbnZlcnQgYSAkYnVpbGQgZmlsZSB0byAkaG9zdCBmb3JtIGFuZCBzdG9yZSBpdCBpbiAkZmlsZQorIyBDdXJyZW50bHkgb25seSBzdXBwb3J0cyBXaW5kb3dzIGhvc3RzLiBJZiB0aGUgZGV0ZXJtaW5lZCBjb252ZXJzaW9uCisjIHR5cGUgaXMgbGlzdGVkIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHdpbGwKKyMgdGFrZSBwbGFjZS4KK2Z1bmNfZmlsZV9jb252ICgpCit7CisgIGZpbGU9JDEKKyAgY2FzZSAkZmlsZSBpbgorICAgIC8gfCAvWyEvXSopICMgYWJzb2x1dGUgZmlsZSwgYW5kIG5vdCBhIFVOQyBmaWxlCisgICAgICBpZiB0ZXN0IC16ICIkZmlsZV9jb252IjsgdGhlbgorCSMgbGF6aWx5IGRldGVybWluZSBob3cgdG8gY29udmVydCBhYnMgZmlsZXMKKwljYXNlIGB1bmFtZSAtc2AgaW4KKwkgIE1JTkdXKikKKwkgICAgZmlsZV9jb252PW1pbmd3CisJICAgIDs7CisJICBDWUdXSU4qKQorCSAgICBmaWxlX2NvbnY9Y3lnd2luCisJICAgIDs7CisJICAqKQorCSAgICBmaWxlX2NvbnY9d2luZQorCSAgICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBjYXNlICRmaWxlX2NvbnYvLCQyLCBpbgorCSosJGZpbGVfY29udiwqKQorCSAgOzsKKwltaW5ndy8qKQorCSAgZmlsZT1gY21kIC8vQyBlY2hvICIkZmlsZSAiIHwgc2VkIC1lICdzLyJcKC4qXCkgIiAqJC9cMS8nYAorCSAgOzsKKwljeWd3aW4vKikKKwkgIGZpbGU9YGN5Z3BhdGggLW0gIiRmaWxlIiB8fCBlY2hvICIkZmlsZSJgCisJICA7OworCXdpbmUvKikKKwkgIGZpbGU9YHdpbmVwYXRoIC13ICIkZmlsZSIgfHwgZWNobyAiJGZpbGUiYAorCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2NsX2Rhc2hMIGxpbmtkaXIKKyMgTWFrZSBjbCBsb29rIGZvciBsaWJyYXJpZXMgaW4gTElOS0RJUgorZnVuY19jbF9kYXNoTCAoKQoreworICBmdW5jX2ZpbGVfY29udiAiJDEiCisgIGlmIHRlc3QgLXogIiRsaWJfcGF0aCI7IHRoZW4KKyAgICBsaWJfcGF0aD0kZmlsZQorICBlbHNlCisgICAgbGliX3BhdGg9IiRsaWJfcGF0aDskZmlsZSIKKyAgZmkKKyAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAtTElCUEFUSDokZmlsZSIKK30KKworIyBmdW5jX2NsX2Rhc2hsIGxpYnJhcnkKKyMgRG8gYSBsaWJyYXJ5IHNlYXJjaC1wYXRoIGxvb2t1cCBmb3IgY2wKK2Z1bmNfY2xfZGFzaGwgKCkKK3sKKyAgbGliPSQxCisgIGZvdW5kPW5vCisgIHNhdmVfSUZTPSRJRlMKKyAgSUZTPSc7JworICBmb3IgZGlyIGluICRsaWJfcGF0aCAkTElCCisgIGRvCisgICAgSUZTPSRzYXZlX0lGUworICAgIGlmICRzaGFyZWQgJiYgdGVzdCAtZiAiJGRpci8kbGliLmRsbC5saWIiOyB0aGVuCisgICAgICBmb3VuZD15ZXMKKyAgICAgIGxpYj0kZGlyLyRsaWIuZGxsLmxpYgorICAgICAgYnJlYWsKKyAgICBmaQorICAgIGlmIHRlc3QgLWYgIiRkaXIvJGxpYi5saWIiOyB0aGVuCisgICAgICBmb3VuZD15ZXMKKyAgICAgIGxpYj0kZGlyLyRsaWIubGliCisgICAgICBicmVhaworICAgIGZpCisgICAgaWYgdGVzdCAtZiAiJGRpci9saWIkbGliLmEiOyB0aGVuCisgICAgICBmb3VuZD15ZXMKKyAgICAgIGxpYj0kZGlyL2xpYiRsaWIuYQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0kc2F2ZV9JRlMKKworICBpZiB0ZXN0ICIkZm91bmQiICE9IHllczsgdGhlbgorICAgIGxpYj0kbGliLmxpYgorICBmaQorfQorCisjIGZ1bmNfY2xfd3JhcHBlciBjbCBhcmcuLi4KKyMgQWRqdXN0IGNvbXBpbGUgY29tbWFuZCB0byBzdWl0IGNsCitmdW5jX2NsX3dyYXBwZXIgKCkKK3sKKyAgIyBBc3N1bWUgYSBjYXBhYmxlIHNoZWxsCisgIGxpYl9wYXRoPQorICBzaGFyZWQ9OgorICBsaW5rZXJfb3B0cz0KKyAgZm9yIGFyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRlYXQiOyB0aGVuCisgICAgICBlYXQ9CisgICAgZWxzZQorICAgICAgY2FzZSAkMSBpbgorCS1vKQorCSAgIyBjb25maWd1cmUgbWlnaHQgY2hvb3NlIHRvIHJ1biBjb21waWxlIGFzICdjb21waWxlIGNjIC1vIGZvbyBmb28uYycuCisJICBlYXQ9MQorCSAgY2FzZSAkMiBpbgorCSAgICAqLm8gfCAqLltvT11bYkJdW2pKXSkKKwkgICAgICBmdW5jX2ZpbGVfY29udiAiJDIiCisJICAgICAgc2V0IHggIiRAIiAtRm8iJGZpbGUiCisJICAgICAgc2hpZnQKKwkgICAgICA7OworCSAgICAqKQorCSAgICAgIGZ1bmNfZmlsZV9jb252ICIkMiIKKwkgICAgICBzZXQgeCAiJEAiIC1GZSIkZmlsZSIKKwkgICAgICBzaGlmdAorCSAgICAgIDs7CisJICBlc2FjCisJICA7OworCS1JKQorCSAgZWF0PTEKKwkgIGZ1bmNfZmlsZV9jb252ICIkMiIgbWluZ3cKKwkgIHNldCB4ICIkQCIgLUkiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwktSSopCisJICBmdW5jX2ZpbGVfY29udiAiJHsxIy1JfSIgbWluZ3cKKwkgIHNldCB4ICIkQCIgLUkiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwktbCkKKwkgIGVhdD0xCisJICBmdW5jX2NsX2Rhc2hsICIkMiIKKwkgIHNldCB4ICIkQCIgIiRsaWIiCisJICBzaGlmdAorCSAgOzsKKwktbCopCisJICBmdW5jX2NsX2Rhc2hsICIkezEjLWx9IgorCSAgc2V0IHggIiRAIiAiJGxpYiIKKwkgIHNoaWZ0CisJICA7OworCS1MKQorCSAgZWF0PTEKKwkgIGZ1bmNfY2xfZGFzaEwgIiQyIgorCSAgOzsKKwktTCopCisJICBmdW5jX2NsX2Rhc2hMICIkezEjLUx9IgorCSAgOzsKKwktc3RhdGljKQorCSAgc2hhcmVkPWZhbHNlCisJICA7OworCS1XbCwqKQorCSAgYXJnPSR7MSMtV2wsfQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBmb3IgZmxhZyBpbiAkYXJnOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgbGlua2VyX29wdHM9IiRsaW5rZXJfb3B0cyAkZmxhZyIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgOzsKKwktWGxpbmtlcikKKwkgIGVhdD0xCisJICBsaW5rZXJfb3B0cz0iJGxpbmtlcl9vcHRzICQyIgorCSAgOzsKKwktKikKKwkgIHNldCB4ICIkQCIgIiQxIgorCSAgc2hpZnQKKwkgIDs7CisJKi5jYyB8ICouQ0MgfCAqLmN4eCB8ICouQ1hYIHwgKi5bY0NdKyspCisJICBmdW5jX2ZpbGVfY29udiAiJDEiCisJICBzZXQgeCAiJEAiIC1UcCIkZmlsZSIKKwkgIHNoaWZ0CisJICA7OworCSouYyB8ICouY3BwIHwgKi5DUFAgfCAqLmxpYiB8ICouTElCIHwgKi5MaWIgfCAqLk9CSiB8ICoub2JqIHwgKi5bb09dKQorCSAgZnVuY19maWxlX2NvbnYgIiQxIiBtaW5ndworCSAgc2V0IHggIiRAIiAiJGZpbGUiCisJICBzaGlmdAorCSAgOzsKKwkqKQorCSAgc2V0IHggIiRAIiAiJDEiCisJICBzaGlmdAorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIHNoaWZ0CisgIGRvbmUKKyAgaWYgdGVzdCAtbiAiJGxpbmtlcl9vcHRzIjsgdGhlbgorICAgIGxpbmtlcl9vcHRzPSItbGluayRsaW5rZXJfb3B0cyIKKyAgZmkKKyAgZXhlYyAiJEAiICRsaW5rZXJfb3B0cworICBleGl0IDEKK30KKworZWF0PQorCiBjYXNlICQxIGluCiAgICcnKQotICAgICBlY2hvICIkMDogTm8gY29tbWFuZC4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgogICAgICBleGl0IDE7CiAgICAgIDs7CiAgIC1oIHwgLS1oKikKICAgICBjYXQgPDxcRU9GCiBVc2FnZTogY29tcGlsZSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQogCi1XcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgYC1jIC1vJy4KLVJlbW92ZSBgLW8gZGVzdC5vJyBmcm9tIEFSR1MsIHJ1biBQUk9HUkFNIHdpdGggdGhlIHJlbWFpbmluZworV3JhcHBlciBmb3IgY29tcGlsZXJzIHdoaWNoIGRvIG5vdCB1bmRlcnN0YW5kICctYyAtbycuCitSZW1vdmUgJy1vIGRlc3QubycgZnJvbSBBUkdTLCBydW4gUFJPR1JBTSB3aXRoIHRoZSByZW1haW5pbmcKIGFyZ3VtZW50cywgYW5kIHJlbmFtZSB0aGUgb3V0cHV0IGFzIGV4cGVjdGVkLgogCiBJZiB5b3UgYXJlIHRyeWluZyB0byBidWlsZCBhIHdob2xlIHBhY2thZ2UgdGhpcyBpcyBub3QgdGhlCi1yaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSBgSU5TVEFMTCcuCityaWdodCBzY3JpcHQgdG8gcnVuOiBwbGVhc2Ugc3RhcnQgYnkgcmVhZGluZyB0aGUgZmlsZSAnSU5TVEFMTCcuCiAKIFJlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCiBFT0YKQEAgLTUzLDExICsyNTUsMTMgQEAKICAgICBlY2hvICJjb21waWxlICRzY3JpcHR2ZXJzaW9uIgogICAgIGV4aXQgJD8KICAgICA7OworICBjbCB8ICpbL1xcXWNsIHwgY2wuZXhlIHwgKlsvXFxdY2wuZXhlICkKKyAgICBmdW5jX2NsX3dyYXBwZXIgIiRAIiAgICAgICMgRG9lc24ndCByZXR1cm4uLi4KKyAgICA7OwogZXNhYwogCiBvZmlsZT0KIGNmaWxlPQotZWF0PQogCiBmb3IgYXJnCiBkbwpAQCAtNjYsOCArMjcwLDggQEAKICAgZWxzZQogICAgIGNhc2UgJDEgaW4KICAgICAgIC1vKQotCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyBgY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgotCSMgU28gd2Ugc3RyaXAgYC1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgorCSMgY29uZmlndXJlIG1pZ2h0IGNob29zZSB0byBydW4gY29tcGlsZSBhcyAnY29tcGlsZSBjYyAtbyBmb28gZm9vLmMnLgorCSMgU28gd2Ugc3RyaXAgJy1vIGFyZycgb25seSBpZiBhcmcgaXMgYW4gb2JqZWN0LgogCWVhdD0xCiAJY2FzZSAkMiBpbgogCSAgKi5vIHwgKi5vYmopCkBAIC05NCwxMCArMjk4LDEwIEBACiBkb25lCiAKIGlmIHRlc3QgLXogIiRvZmlsZSIgfHwgdGVzdCAteiAiJGNmaWxlIjsgdGhlbgotICAjIElmIG5vIGAtbycgb3B0aW9uIHdhcyBzZWVuIHRoZW4gd2UgbWlnaHQgaGF2ZSBiZWVuIGludm9rZWQgZnJvbSBhCisgICMgSWYgbm8gJy1vJyBvcHRpb24gd2FzIHNlZW4gdGhlbiB3ZSBtaWdodCBoYXZlIGJlZW4gaW52b2tlZCBmcm9tIGEKICAgIyBwYXR0ZXJuIHJ1bGUgd2hlcmUgd2UgZG9uJ3QgbmVlZCBvbmUuICBUaGF0IGlzIG9rIC0tIHRoaXMgaXMgYQogICAjIG5vcm1hbCBjb21waWxhdGlvbiB0aGF0IHRoZSBsb3NpbmcgY29tcGlsZXIgY2FuIGhhbmRsZS4gIElmIG5vCi0gICMgYC5jJyBmaWxlIHdhcyBzZWVuIHRoZW4gd2UgYXJlIHByb2JhYmx5IGxpbmtpbmcuICBUaGF0IGlzIGFsc28KKyAgIyAnLmMnIGZpbGUgd2FzIHNlZW4gdGhlbiB3ZSBhcmUgcHJvYmFibHkgbGlua2luZy4gIFRoYXQgaXMgYWxzbwogICAjIG9rLgogICBleGVjICIkQCIKIGZpCkBAIC0xMDYsNyArMzEwLDcgQEAKIGNvZmlsZT1gZWNobyAiJGNmaWxlIiB8IHNlZCAnc3xeLipbXFwvXXx8OyBzfF5bYS16QS1aXTp8fDsgcy9cLmMkLy5vLydgCiAKICMgQ3JlYXRlIHRoZSBsb2NrIGRpcmVjdG9yeS4KLSMgTm90ZTogdXNlIGBbL1xcOi4tXScgaGVyZSB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCB1c2UgdGhlIHNhbWUgbmFtZQorIyBOb3RlOiB1c2UgJ1svXFw6Li1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCiAjIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCiAjIG9iamVjdCBmaWxlIG5hbWUsIHNpbmNlIHRoYXQgaXMgd2hhdCBtYXR0ZXJzIHdpdGggYSBwYXJhbGxlbCBidWlsZC4KIGxvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvXFw6Li1dfF98ZydgLmQKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLmd1ZXNzIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MKaW5kZXggMTgwNGU5Zi4uYjc5MjUyZCAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuZ3Vlc3MKQEAgLTEsMTAgKzEsOCBAQAogIyEgL2Jpbi9zaAogIyBBdHRlbXB0IHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lLgotIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKLSMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLAotIyAgIDIwMTEsIDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotdGltZXN0YW1wPScyMDEyLTEyLTI5JwordGltZXN0YW1wPScyMDEzLTA2LTEwJwogCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0yNiw3ICsyNCw3IEBACiAjIHByb2dyYW0uICBUaGlzIEV4Y2VwdGlvbiBpcyBhbiBhZGRpdGlvbmFsIHBlcm1pc3Npb24gdW5kZXIgc2VjdGlvbiA3CiAjIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzICgiR1BMdjMiKS4KICMKLSMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLiAKKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLgogIwogIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKICMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECkBAIC01Miw5ICs1MCw3IEBACiBHTlUgY29uZmlnLmd1ZXNzICgkdGltZXN0YW1wKQogCiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIuCi1Db3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCi0yMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLAotMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCkBAIC0xMzYsNiArMTMyLDI3IEBACiBVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fCBVTkFNRV9TWVNURU09dW5rbm93bgogVU5BTUVfVkVSU0lPTj1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfVkVSU0lPTj11bmtub3duCiAKK2Nhc2UgIiR7VU5BTUVfU1lTVEVNfSIgaW4KK0xpbnV4fEdOVXxHTlUvKikKKwkjIElmIHRoZSBzeXN0ZW0gbGFja3MgYSBjb21waWxlciwgdGhlbiBqdXN0IHBpY2sgZ2xpYmMuCisJIyBXZSBjb3VsZCBwcm9iYWJseSB0cnkgaGFyZGVyLgorCUxJQkM9Z251CisKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJY2F0IDw8LUVPRiA+ICRkdW1teS5jCisJI2luY2x1ZGUgPGZlYXR1cmVzLmg+CisJI2lmIGRlZmluZWQoX19VQ0xJQkNfXykKKwlMSUJDPXVjbGliYworCSNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQorCUxJQkM9ZGlldGxpYmMKKwkjZWxzZQorCUxJQkM9Z251CisJI2VuZGlmCisJRU9GCisJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKKwk7OworZXNhYworCiAjIE5vdGU6IG9yZGVyIGlzIHNpZ25pZmljYW50IC0gdGhlIGNhc2UgYnJhbmNoZXMgYXJlIG5vdCBleGNsdXNpdmUuCiAKIGNhc2UgIiR7VU5BTUVfTUFDSElORX06JHtVTkFNRV9TWVNURU19OiR7VU5BTUVfUkVMRUFTRX06JHtVTkFNRV9WRVJTSU9OfSIgaW4KQEAgLTg1NywyMSArODc0LDIxIEBACiAJZXhpdCA7OwogICAgICo6R05VOio6KikKIAkjIHRoZSBHTlUgc3lzdGVtCi0JZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLWdudWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzLC8uKiQsLCdgCisJZWNobyBgZWNobyAke1VOQU1FX01BQ0hJTkV9fHNlZCAtZSAncyxbLS9dLiokLCwnYC11bmtub3duLSR7TElCQ31gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncywvLiokLCwnYAogCWV4aXQgOzsKICAgICAqOkdOVS8qOio6KikKIAkjIG90aGVyIHN5c3RlbXMgd2l0aCBHTlUgbGliYyBhbmQgdXNlcmxhbmQKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1gZWNobyAke1VOQU1FX1NZU1RFTX0gfCBzZWQgJ3MsXlteL10qLywsJyB8IHRyICdbQS1aXScgJ1thLXpdJ2BgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLShdLiovLydgLWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWBlY2hvICR7VU5BTUVfU1lTVEVNfSB8IHNlZCAncyxeW14vXSovLCwnIHwgdHIgJ1tBLVpdJyAnW2Etel0nYGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AtJHtMSUJDfQogCWV4aXQgOzsKICAgICBpKjg2Ok1pbml4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluaXgKIAlleGl0IDs7CiAgICAgYWFyY2g2NDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBhYXJjaDY0X2JlOkxpbnV4Oio6KikKIAlVTkFNRV9NQUNISU5FPWFhcmNoNjRfYmUKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGFscGhhOkxpbnV4Oio6KikKIAljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgpAQCAtODg0LDU5ICs5MDEsNTQgQEAKIAkgIEVWNjgqKSBVTkFNRV9NQUNISU5FPWFscGhhZXY2OCA7OwogCWVzYWMKIAlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKLQlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJnbnVsaWJjMSIgOyBmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKwlleGl0IDs7CisgICAgYXJjOkxpbnV4Oio6KiB8IGFyY2ViOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGFybSo6TGludXg6KjoqKQogCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKIAlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCiAJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KIAl0aGVuCi0JICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZWxzZQogCSAgICBpZiBlY2hvIF9fQVJNX1BDU19WRlAgfCAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwgXAogCQl8IGdyZXAgLXEgX19BUk1fUENTX1ZGUAogCSAgICB0aGVuCi0JCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudWVhYmkKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmkKIAkgICAgZWxzZQotCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnVlYWJpaGYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfWVhYmloZgogCSAgICBmaQogCWZpCiAJZXhpdCA7OwogICAgIGF2cjMyKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBjcmlzOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXhpcy1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGNyaXN2MzI6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1heGlzLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgZnJ2OkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGhleGFnb246TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgaSo4NjpMaW51eDoqOiopCi0JTElCQz1nbnUKLQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCi0Jc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKLQkjaWZkZWYgX19kaWV0bGliY19fCi0JTElCQz1kaWV0bGliYwotCSNlbmRpZgotRU9GCi0JZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15MSUJDJ2AKLQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30iCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgaWE2NDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBtMzJyKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBtNjgqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIG1pcHM6TGludXg6KjoqIHwgbWlwczY0OkxpbnV4Oio6KikKIAlldmFsICRzZXRfY2NfZm9yX2J1aWxkCkBAIC05NTUsNTQgKzk2Nyw2MyBAQAogCSNlbmRpZgogRU9GCiAJZXZhbCBgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IGdyZXAgJ15DUFUnYAotCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LSR7TElCQ30iOyBleGl0OyB9CiAJOzsKKyAgICBvcjFrOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OwogICAgIG9yMzI6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgcGFkcmU6TGludXg6KjoqKQotCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC1nbnUKKwllY2hvIHNwYXJjLXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBwYXJpc2M2NDpMaW51eDoqOiogfCBocHBhNjQ6TGludXg6KjoqKQotCWVjaG8gaHBwYTY0LXVua25vd24tbGludXgtZ251CisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHBhcmlzYzpMaW51eDoqOiogfCBocHBhOkxpbnV4Oio6KikKIAkjIExvb2sgZm9yIENQVSBsZXZlbAogCWNhc2UgYGdyZXAgJ15jcHVbXmEtel0qOicgL3Byb2MvY3B1aW5mbyAyPi9kZXYvbnVsbCB8IGN1dCAtZCcgJyAtZjJgIGluCi0JICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC1nbnUgOzsKLQkgIFBBOCopIGVjaG8gaHBwYTIuMC11bmtub3duLWxpbnV4LWdudSA7OwotCSAgKikgICAgZWNobyBocHBhLXVua25vd24tbGludXgtZ251IDs7CisJICBQQTcqKSBlY2hvIGhwcGExLjEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CisJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC0ke0xJQkN9IDs7CiAJZXNhYwogCWV4aXQgOzsKICAgICBwcGM2NDpMaW51eDoqOiopCi0JZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKwllY2hvIHBvd2VycGM2NC11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgcHBjOkxpbnV4Oio6KikKLQllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBwYzY0bGU6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0bGUtdW5rbm93bi1saW51eC0ke0xJQkN9CisJZXhpdCA7OworICAgIHBwY2xlOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGNsZS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eAorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBzaDY0KjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBzaCo6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7CiAgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICB0aWxlKjpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICB2YXg6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWRlYy1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIHg4Nl82NDpMaW51eDoqOiopCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICB4dGVuc2EqOkxpbnV4Oio6KikKLQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC0ke0xJQkN9CiAJZXhpdCA7OwogICAgIGkqODY6RFlOSVgvcHR4OjQqOiopCiAJIyBwdHggNC4wIGRvZXMgdW5hbWUgLXMgY29ycmVjdGx5LCB3aXRoIERZTklYL3B0eCBpbiB0aGVyZS4KQEAgLTEyMzUsMTkgKzEyNTYsMjEgQEAKIAlleGl0IDs7CiAgICAgKjpEYXJ3aW46KjoqKQogCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgIHx8IFVOQU1FX1BST0NFU1NPUj11bmtub3duCi0JY2FzZSAkVU5BTUVfUFJPQ0VTU09SIGluCi0JICAgIGkzODYpCi0JCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKLQkJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCi0JCSAgaWYgKGVjaG8gJyNpZmRlZiBfX0xQNjRfXyc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCi0JCSAgICAgIChDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCi0JCSAgICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCi0JCSAgdGhlbgotCQkgICAgICBVTkFNRV9QUk9DRVNTT1I9Ing4Nl82NCIKLQkJICBmaQotCQlmaSA7OwotCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OwotCWVzYWMKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB1bmtub3duIDsgdGhlbgorCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYworCWZpCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCSAgICB0aGVuCisJCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCQkgICAgaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OworCQkgICAgcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OworCQllc2FjCisJICAgIGZpCisJZmkKIAllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwogICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuc3ViIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWcuc3ViCmluZGV4IDgwMmEyMjQuLmM3NjViMzQgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlnLnN1YgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZy5zdWIKQEAgLTEsMTAgKzEsOCBAQAogIyEgL2Jpbi9zaAogIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCi0jICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAotIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsCi0jICAgMjAxMSwgMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMTItMTItMjknCit0aW1lc3RhbXA9JzIwMTMtMDQtMjQnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTcwLDkgKzY4LDcgQEAKIHZlcnNpb249IlwKIEdOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQogCi1Db3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCi0yMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExLAotMjAxMiwgMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCkBAIC0yNTYsNyArMjUyLDcgQEAKIAl8IGFscGhhIHwgYWxwaGFldls0LThdIHwgYWxwaGFldjU2IHwgYWxwaGFldjZbNzhdIHwgYWxwaGFwY2E1WzY3XSBcCiAJfCBhbHBoYTY0IHwgYWxwaGE2NGV2WzQtOF0gfCBhbHBoYTY0ZXY1NiB8IGFscGhhNjRldjZbNzhdIHwgYWxwaGE2NHBjYTVbNjddIFwKIAl8IGFtMzNfMi4wIFwKLQl8IGFyYyBcCisJfCBhcmMgfCBhcmNlYiBcCiAJfCBhcm0gfCBhcm1bYmxdZSB8IGFybWVbbGJdIHwgYXJtdlsyLThdIHwgYXJtdlszLThdW2xiXSB8IGFybXY3W2FybV0gXAogCXwgYXZyIHwgYXZyMzIgXAogCXwgYmUzMiB8IGJlNjQgXApAQCAtMjkwLDE2ICsyODYsMTcgQEAKIAl8IG1pcHNpc2E2NHIyIHwgbWlwc2lzYTY0cjJlbCBcCiAJfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCiAJfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNyNzFrZWwgXAorCXwgbWlwc3I1OTAwIHwgbWlwc3I1OTAwZWwgXAogCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKIAl8IG1uMTAyMDAgfCBtbjEwMzAwIFwKIAl8IG1veGllIFwKIAl8IG10IFwKIAl8IG1zcDQzMCBcCiAJfCBuZHMzMiB8IG5kczMybGUgfCBuZHMzMmJlIFwKLQl8IG5pb3MgfCBuaW9zMiBcCisJfCBuaW9zIHwgbmlvczIgfCBuaW9zMmViIHwgbmlvczJlbCBcCiAJfCBuczE2ayB8IG5zMzJrIFwKIAl8IG9wZW44IFwKLQl8IG9yMzIgXAorCXwgb3IxayB8IG9yMzIgXAogCXwgcGRwMTAgfCBwZHAxMSB8IHBqIHwgcGpsIFwKIAl8IHBvd2VycGMgfCBwb3dlcnBjNjQgfCBwb3dlcnBjNjRsZSB8IHBvd2VycGNsZSBcCiAJfCBweXJhbWlkIFwKQEAgLTM2OSw3ICszNjYsNyBAQAogCXwgYWFyY2g2NC0qIHwgYWFyY2g2NF9iZS0qIFwKIAl8IGFscGhhLSogfCBhbHBoYWV2WzQtOF0tKiB8IGFscGhhZXY1Ni0qIHwgYWxwaGFldjZbNzhdLSogXAogCXwgYWxwaGE2NC0qIHwgYWxwaGE2NGV2WzQtOF0tKiB8IGFscGhhNjRldjU2LSogfCBhbHBoYTY0ZXY2Wzc4XS0qIFwKLQl8IGFscGhhcGNhNVs2N10tKiB8IGFscGhhNjRwY2E1WzY3XS0qIHwgYXJjLSogXAorCXwgYWxwaGFwY2E1WzY3XS0qIHwgYWxwaGE2NHBjYTVbNjddLSogfCBhcmMtKiB8IGFyY2ViLSogXAogCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCiAJfCBhdnItKiB8IGF2cjMyLSogXAogCXwgYmUzMi0qIHwgYmU2NC0qIFwKQEAgLTQwNywxMiArNDA0LDEzIEBACiAJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKIAl8IG1pcHNpc2E2NHNiMS0qIHwgbWlwc2lzYTY0c2IxZWwtKiBcCiAJfCBtaXBzaXNhNjRzcjcxay0qIHwgbWlwc2lzYTY0c3I3MWtlbC0qIFwKKwl8IG1pcHNyNTkwMC0qIHwgbWlwc3I1OTAwZWwtKiBcCiAJfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKIAl8IG1taXgtKiBcCiAJfCBtdC0qIFwKIAl8IG1zcDQzMC0qIFwKIAl8IG5kczMyLSogfCBuZHMzMmxlLSogfCBuZHMzMmJlLSogXAotCXwgbmlvcy0qIHwgbmlvczItKiBcCisJfCBuaW9zLSogfCBuaW9zMi0qIHwgbmlvczJlYi0qIHwgbmlvczJlbC0qIFwKIAl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAogCXwgb3BlbjgtKiBcCiAJfCBvcmlvbi0qIFwKQEAgLTEwMDgsNyArMTAwNiw3IEBACiAJCTs7CiAJcHBjNjQpCWJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LXVua25vd24KIAkJOzsKLQlwcGM2NC0qKSBiYXNpY19tYWNoaW5lPXBvd2VycGM2NC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCXBwYzY0LSogfCBwcGM2NHA3LSopIGJhc2ljX21hY2hpbmU9cG93ZXJwYzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCiAJCTs7CiAJcHBjNjRsZSB8IHBvd2VycGM2NGxpdHRsZSB8IHBwYzY0LWxlIHwgcG93ZXJwYzY0LWxpdHRsZSkKIAkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS11bmtub3duCkBAIC0xMzU0LDcgKzEzNTIsNyBAQAogCS1nbnUqIHwgLWJzZCogfCAtbWFjaCogfCAtbWluaXgqIHwgLWdlbml4KiB8IC11bHRyaXgqIHwgLWlyaXgqIFwKIAkgICAgICB8IC0qdm1zKiB8IC1zY28qIHwgLWVzaXgqIHwgLWlzYyogfCAtYWl4KiB8IC1jbmsqIHwgLXN1bm9zIHwgLXN1bm9zWzM0XSpcCiAJICAgICAgfCAtaHB1eCogfCAtdW5vcyogfCAtb3NmKiB8IC1sdW5hKiB8IC1kZ3V4KiB8IC1hdXJvcmF1eCogfCAtc29sYXJpcyogXAotCSAgICAgIHwgLXN5bSogfCAta29wZW5zb2xhcmlzKiBcCisJICAgICAgfCAtc3ltKiB8IC1rb3BlbnNvbGFyaXMqIHwgLXBsYW45KiBcCiAJICAgICAgfCAtYW1pZ2FvcyogfCAtYW1pZ2Fkb3MqIHwgLW1zZG9zKiB8IC1uZXdzb3MqIHwgLXVuaWNvcyogfCAtYW9mKiBcCiAJICAgICAgfCAtYW9zKiB8IC1hcm9zKiBcCiAJICAgICAgfCAtbmluZHkqIHwgLXZ4c2ltKiB8IC12eHdvcmtzKiB8IC1lYm1vbiogfCAtaG1zKiB8IC1tdnMqIFwKQEAgLTE1MDAsOSArMTQ5OCw2IEBACiAJLWFyb3MqKQogCQlvcz0tYXJvcwogCQk7OwotCS1rYW9zKikKLQkJb3M9LWthb3MKLQkJOzsKIAktenZtb2UpCiAJCW9zPS16dm1vZQogCQk7OwpAQCAtMTU5NCw2ICsxNTg5LDkgQEAKIAltaXBzKi0qKQogCQlvcz0tZWxmCiAJCTs7CisJb3Ixay0qKQorCQlvcz0tZWxmCisJCTs7CiAJb3IzMi0qKQogCQlvcz0tY29mZgogCQk7OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZQppbmRleCA4MjMwODMwLi43NWY2MmE3IDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZQpAQCAtMSw2ICsxLDYgQEAKICMhIC9iaW4vc2gKICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBsaWJmZmkgMy4wLjEzLgorIyBHZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkgZm9yIGxpYmZmaSAzLjEuCiAjCiAjIFJlcG9ydCBidWdzIHRvIDxodHRwOi8vZ2l0aHViLmNvbS9hdGdyZWVuL2xpYmZmaS9pc3N1ZXM+LgogIwpAQCAtNTkwLDggKzU5MCw4IEBACiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0nbGliZmZpJwogUEFDS0FHRV9UQVJOQU1FPSdsaWJmZmknCi1QQUNLQUdFX1ZFUlNJT049JzMuMC4xMycKLVBBQ0tBR0VfU1RSSU5HPSdsaWJmZmkgMy4wLjEzJworUEFDS0FHRV9WRVJTSU9OPSczLjEnCitQQUNLQUdFX1NUUklORz0nbGliZmZpIDMuMScKIFBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vZ2l0aHViLmNvbS9hdGdyZWVuL2xpYmZmaS9pc3N1ZXMnCiBQQUNLQUdFX1VSTD0nJwogCkBAIC02NDUsMTAgKzY0NSwxMyBAQAogRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRV9GQUxTRQogRkZJX0VYRUNfVFJBTVBPTElORV9UQUJMRV9UUlVFCiBzeXNfc3ltYm9sX3VuZGVyc2NvcmUKK0hBVkVfTE9OR19ET1VCTEVfVkFSSUFOVAogSEFWRV9MT05HX0RPVUJMRQogQUxMT0NBCiBYVEVOU0FfRkFMU0UKIFhURU5TQV9UUlVFCitWQVhfRkFMU0UKK1ZBWF9UUlVFCiBUSUxFX0ZBTFNFCiBUSUxFX1RSVUUKIFBBNjRfSFBVWF9GQUxTRQpAQCAtNjczLDYgKzY3Niw4IEBACiBBVlIzMl9UUlVFCiBBUk1fRkFMU0UKIEFSTV9UUlVFCitBUkNfRkFMU0UKK0FSQ19UUlVFCiBBQVJDSDY0X0ZBTFNFCiBBQVJDSDY0X1RSVUUKIFBPV0VSUENfRlJFRUJTRF9GQUxTRQpAQCAtNjgzLDEyICs2ODgsMTYgQEAKIFBPV0VSUENfQUlYX1RSVUUKIFBPV0VSUENfRkFMU0UKIFBPV0VSUENfVFJVRQorTklPUzJfRkFMU0UKK05JT1MyX1RSVUUKIE1PWElFX0ZBTFNFCiBNT1hJRV9UUlVFCiBNRVRBR19GQUxTRQogTUVUQUdfVFJVRQogTUlDUk9CTEFaRV9GQUxTRQogTUlDUk9CTEFaRV9UUlVFCitNODhLX0ZBTFNFCitNODhLX1RSVUUKIE02OEtfRkFMU0UKIE02OEtfVFJVRQogTTMyUl9GQUxTRQpAQCAtNjk3LDYgKzcwNiwxMCBAQAogSUE2NF9UUlVFCiBBTFBIQV9GQUxTRQogQUxQSEFfVFJVRQorWDg2X0RBUldJTjY0X0ZBTFNFCitYODZfREFSV0lONjRfVFJVRQorWDg2X0RBUldJTjMyX0ZBTFNFCitYODZfREFSV0lOMzJfVFJVRQogWDg2X0RBUldJTl9GQUxTRQogWDg2X0RBUldJTl9UUlVFCiBYODZfV0lONjRfRkFMU0UKQEAgLTcyMSw2ICs3MzQsNyBAQAogTUFJTlRBSU5FUl9NT0RFX0ZBTFNFCiBNQUlOVEFJTkVSX01PREVfVFJVRQogUFJURElBRworQ1hYQ1BQCiBDUFAKIE9UT09MNjQKIE9UT09MCkBAIC03NDgsNiArNzYyLDEyIEBACiBDQ0FTREVQTU9ERQogQ0NBU0ZMQUdTCiBDQ0FTCithbV9fZmFzdGRlcENYWF9GQUxTRQorYW1fX2Zhc3RkZXBDWFhfVFJVRQorQ1hYREVQTU9ERQorYWNfY3RfQ1hYCitDWFhGTEFHUworQ1hYCiBhbV9fZmFzdGRlcENDX0ZBTFNFCiBhbV9fZmFzdGRlcENDX1RSVUUKIENDREVQTU9ERQpAQCAtNzY1LDYgKzc4NSwxMCBAQAogTERGTEFHUwogQ0ZMQUdTCiBDQworQU1fQkFDS1NMQVNICitBTV9ERUZBVUxUX1ZFUkJPU0lUWQorQU1fREVGQVVMVF9WCitBTV9WCiBhbV9fdW50YXIKIGFtX190YXIKIEFNVEFSCkBAIC04NDMsNiArODY3LDcgQEAKIGFjX3VzZXJfb3B0cz0nCiBlbmFibGVfb3B0aW9uX2NoZWNraW5nCiBlbmFibGVfYnVpbGRkaXIKK2VuYWJsZV9zaWxlbnRfcnVsZXMKIGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nCiBlbmFibGVfc2hhcmVkCiBlbmFibGVfc3RhdGljCkBAIC04NjYsNyArODkxLDggQEAKIENDQVMKIENDQVNGTEFHUwogQ1BQCi1DUFBGTEFHUycKK0NQUEZMQUdTCitDWFhDUFAnCiAKIAogIyBJbml0aWFsaXplIHNvbWUgdmFyaWFibGVzIHNldCBieSBvcHRpb25zLgpAQCAtMTQwNyw3ICsxNDMzLDcgQEAKICAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCiAgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KICAgY2F0IDw8X0FDRU9GCi1cYGNvbmZpZ3VyZScgY29uZmlndXJlcyBsaWJmZmkgMy4wLjEzIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KK1xgY29uZmlndXJlJyBjb25maWd1cmVzIGxpYmZmaSAzLjEgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgogCiBVc2FnZTogJDAgW09QVElPTl0uLi4gW1ZBUj1WQUxVRV0uLi4KIApAQCAtMTQ3OCw3ICsxNTA0LDcgQEAKIAogaWYgdGVzdCAtbiAiJGFjX2luaXRfaGVscCI7IHRoZW4KICAgY2FzZSAkYWNfaW5pdF9oZWxwIGluCi0gICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBsaWJmZmkgMy4wLjEzOiI7OworICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgbGliZmZpIDMuMToiOzsKICAgIGVzYWMKICAgY2F0IDw8XF9BQ0VPRgogCkBAIC0xNDg4LDYgKzE1MTQsOCBAQAogICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCiAgIC0tZGlzYWJsZS1idWlsZGRpciAgICAgIGRpc2FibGUgYXV0b21hdGljIGJ1aWxkIGluIHN1YmRpciBvZiBzb3VyY2VzCiAKKyAgLS1lbmFibGUtc2lsZW50LXJ1bGVzICAgbGVzcyB2ZXJib3NlIGJ1aWxkIG91dHB1dCAodW5kbzogIm1ha2UgVj0xIikKKyAgLS1kaXNhYmxlLXNpbGVudC1ydWxlcyAgdmVyYm9zZSBidWlsZCBvdXRwdXQgKHVuZG86ICJtYWtlIFY9MCIpCiAgIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9ycwogICAtLWRpc2FibGUtZGVwZW5kZW5jeS10cmFja2luZwpAQCAtMTUxNSw4ICsxNTQzLDggQEAKICAgLS13aXRoLXBpY1s9UEtHU10gICAgICAgdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgW2RlZmF1bHQ9dXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdGhdCiAgIC0td2l0aC1nbnUtbGQgICAgICAgICAgIGFzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBbZGVmYXVsdD1ub10KLSAgLS13aXRoLXN5c3Jvb3Q9RElSIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCi0gICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS4KKyAgLS13aXRoLXN5c3Jvb3RbPURJUl0gICAgU2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzIHdpdGhpbiBESVIgKG9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCiAgIC0td2l0aC1nY2MtYXJjaD08YXJjaD4gIHVzZSBhcmNoaXRlY3R1cmUgPGFyY2g+IGZvciBnY2MgLW1hcmNoLy1tdHVuZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGVhZCBvZiBndWVzc2luZwogCkBAIC0xNTI4LDkgKzE1NTYsMTIgQEAKICAgTElCUyAgICAgICAgbGlicmFyaWVzIHRvIHBhc3MgdG8gdGhlIGxpbmtlciwgZS5nLiAtbDxsaWJyYXJ5PgogICBDUFBGTEFHUyAgICAoT2JqZWN0aXZlKSBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmCiAgICAgICAgICAgICAgIHlvdSBoYXZlIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBDWFggICAgICAgICBDKysgY29tcGlsZXIgY29tbWFuZAorICBDWFhGTEFHUyAgICBDKysgY29tcGlsZXIgZmxhZ3MKICAgQ0NBUyAgICAgICAgYXNzZW1ibGVyIGNvbXBpbGVyIGNvbW1hbmQgKGRlZmF1bHRzIHRvIENDKQogICBDQ0FTRkxBR1MgICBhc3NlbWJsZXIgY29tcGlsZXIgZmxhZ3MgKGRlZmF1bHRzIHRvIENGTEFHUykKICAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKKyAgQ1hYQ1BQICAgICAgQysrIHByZXByb2Nlc3NvcgogCiBVc2UgdGhlc2UgdmFyaWFibGVzIHRvIG92ZXJyaWRlIHRoZSBjaG9pY2VzIG1hZGUgYnkgYGNvbmZpZ3VyZScgb3IgdG8gaGVscAogaXQgdG8gZmluZCBsaWJyYXJpZXMgYW5kIHByb2dyYW1zIHdpdGggbm9uc3RhbmRhcmQgbmFtZXMvbG9jYXRpb25zLgpAQCAtMTU5OCw3ICsxNjI5LDcgQEAKIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwogaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgogICBjYXQgPDxcX0FDRU9GCi1saWJmZmkgY29uZmlndXJlIDMuMC4xMworbGliZmZpIGNvbmZpZ3VyZSAzLjEKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OQogCiBDb3B5cmlnaHQgKEMpIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCkBAIC0xNjUwLDYgKzE2ODEsNDQgQEAKIAogfSAjIGFjX2ZuX2NfdHJ5X2NvbXBpbGUKIAorIyBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY3h4X3RyeV9jb21waWxlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAorICBpZiB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGUiKSAyPmNvbmZ0ZXN0LmVycgorICBhY19zdGF0dXM9JD8KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMQorICAgIGNhdCBjb25mdGVzdC5lcjEgPiY1CisgICAgbXYgLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICBmaQorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB7CisJIHRlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dDsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2N4eF90cnlfY29tcGlsZQorCiAjIGFjX2ZuX2NfdHJ5X2xpbmsgTElORU5PCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFRyeSB0byBsaW5rIGNvbmZ0ZXN0LiRhY19leHQsIGFuZCByZXR1cm4gd2hldGhlciB0aGlzIHN1Y2NlZWRlZC4KQEAgLTE4NzMsNiArMTk0Miw4OSBAQAogCiB9ICMgYWNfZm5fY19jaGVja19mdW5jCiAKKyMgYWNfZm5fY3h4X3RyeV9jcHAgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jeHhfdHJ5X2NwcCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHsgeyBhY190cnk9IiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gPiBjb25mdGVzdC5pICYmIHsKKwkgdGVzdCAteiAiJGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyRhY19jeHhfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICBhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9jcHAKKworIyBhY19mbl9jeHhfdHJ5X2xpbmsgTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY3h4X3RyeV9saW5rICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIiB8fAorCSB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyCisgICAgICAgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAmJiB7CisJIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIHx8CisJIHRlc3QgLXggY29uZnRlc3QkYWNfZXhlZXh0CisgICAgICAgfTsgdGhlbiA6CisgIGFjX3JldHZhbD0wCitlbHNlCisgICRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisJYWNfcmV0dmFsPTEKK2ZpCisgICMgRGVsZXRlIHRoZSBJUEEvSVBPIChJbnRlciBQcm9jZWR1cmFsIEFuYWx5c2lzL09wdGltaXphdGlvbikgaW5mb3JtYXRpb24KKyAgIyBjcmVhdGVkIGJ5IHRoZSBQR0kgY29tcGlsZXIgKGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28pLCBhcyBpdCB3b3VsZAorICAjIGludGVyZmVyZSB3aXRoIHRoZSBuZXh0IGxpbmsgY29tbWFuZDsgYWxzbyBkZWxldGUgYSBkaXJlY3RvcnkgdGhhdCBpcworICAjIGxlZnQgYmVoaW5kIGJ5IEFwcGxlJ3MgY29tcGlsZXIuICBXZSBkbyB0aGlzIGJlZm9yZSBleGVjdXRpbmcgdGhlIGFjdGlvbnMuCisgIHJtIC1yZiBjb25mdGVzdC5kU1lNIGNvbmZ0ZXN0X2lwYThfY29uZnRlc3Qub28KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY3h4X3RyeV9saW5rCisKICMgYWNfZm5fY19jb21wdXRlX2ludCBMSU5FTk8gRVhQUiBWQVIgSU5DTFVERVMKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgVHJpZXMgdG8gZmluZCB0aGUgY29tcGlsZS10aW1lIHZhbHVlIG9mIEVYUFIgaW4gYSBwcm9ncmFtIHRoYXQgaW5jbHVkZXMKQEAgLTIyMDQsNyArMjM1Niw3IEBACiBUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQogcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KIAotSXQgd2FzIGNyZWF0ZWQgYnkgbGliZmZpICRhc19tZSAzLjAuMTMsIHdoaWNoIHdhcworSXQgd2FzIGNyZWF0ZWQgYnkgbGliZmZpICRhc19tZSAzLjEsIHdoaWNoIHdhcwogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQApAQCAtMjY5Nyw3ICsyODQ5LDExIEBACiAKIHRhcmdldF9hbGlhcz0ke3RhcmdldF9hbGlhcy0kaG9zdF9hbGlhc30KIAotLiAke3NyY2Rpcn0vY29uZmlndXJlLmhvc3QKK2Nhc2UgIiR7aG9zdH0iIGluCisgIGZydiotZWxmKQorICAgIExERkxBR1M9YGVjaG8gJExERkxBR1MgfCBzZWQgInMvXC1CXiAqbGliZ2xvc3NcL2ZydlwvLy8iYFwgLUJgcHdkYC8uLi9saWJnbG9zcy9mcnYvCisgICAgOzsKK2VzYWMKIAogCiAgICAjIFskXUAgaXMgdW5zYWJsZSBpbiAyLjYwKyBidXQgZWFybGllciBhdXRvY29uZiBoYWQgbm8gYWNfY29uZmlndXJlX2FyZ3MKQEAgLTI4MDMsNyArMjk1OSw3IEBACiBhY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgYnVpbGRpciIKIAogCi1hbV9fYXBpX3ZlcnNpb249JzEuMTInCithbV9fYXBpX3ZlcnNpb249JzEuMTMnCiAKICMgRmluZCBhIGdvb2QgaW5zdGFsbCBwcm9ncmFtLiAgV2UgcHJlZmVyIGEgQyBwcm9ncmFtIChmYXN0ZXIpLAogIyBzbyBvbmUgc2NyaXB0IGlzIGFzIGdvb2QgYXMgYW5vdGhlci4gIEJ1dCBhdm9pZCB0aGUgYnJva2VuIG9yCkBAIC0yOTg0LDggKzMxNDAsOCBAQAogICBlc2FjCiBmaQogIyBVc2UgZXZhbCB0byBleHBhbmQgJFNIRUxMCi1pZiBldmFsICIkTUlTU0lORyAtLXJ1biB0cnVlIjsgdGhlbgotICBhbV9taXNzaW5nX3J1bj0iJE1JU1NJTkcgLS1ydW4gIgoraWYgZXZhbCAiJE1JU1NJTkcgLS1pcy1saWdodHdlaWdodCI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HICIKIGVsc2UKICAgYW1fbWlzc2luZ19ydW49CiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJ21pc3NpbmcnIHNjcmlwdCBpcyB0b28gb2xkIG9yIG1pc3NpbmciID4mNQpAQCAtMzIyNSw2ICszMzgxLDQ1IEBACiBmaQogcm1kaXIgLnRzdCAyPi9kZXYvbnVsbAogCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2lsZW50LXJ1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NpbGVudF9ydWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NpbGVudF9ydWxlczsKK2ZpCisKK2Nhc2UgJGVuYWJsZV9zaWxlbnRfcnVsZXMgaW4gIyAoKCgKKyAgeWVzKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0wOzsKKyAgIG5vKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKKyAgICAqKSBBTV9ERUZBVUxUX1ZFUkJPU0lUWT0xOzsKK2VzYWMKK2FtX21ha2U9JHtNQUtFLW1ha2V9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFtX21ha2Ugc3VwcG9ydHMgbmVzdGVkIHZhcmlhYmxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhbV9tYWtlIHN1cHBvcnRzIG5lc3RlZCB2YXJpYWJsZXMuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiAkYXNfZWNobyAnVFJVRT0kKEJBUiQoVikpCitCQVIwPWZhbHNlCitCQVIxPXRydWUKK1Y9MQorYW1fX2RvaXQ6CisJQCQoVFJVRSkKKy5QSE9OWTogYW1fX2RvaXQnIHwgJGFtX21ha2UgLWYgLSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXM9eWVzCitlbHNlCisgIGFtX2N2X21ha2Vfc3VwcG9ydF9uZXN0ZWRfdmFyaWFibGVzPW5vCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfbWFrZV9zdXBwb3J0X25lc3RlZF92YXJpYWJsZXMiID4mNQorJGFzX2VjaG8gIiRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyIgPiY2OyB9CitpZiB0ZXN0ICRhbV9jdl9tYWtlX3N1cHBvcnRfbmVzdGVkX3ZhcmlhYmxlcyA9IHllczsgdGhlbgorICAgIEFNX1Y9JyQoViknCisgIEFNX0RFRkFVTFRfVj0nJChBTV9ERUZBVUxUX1ZFUkJPU0lUWSknCitlbHNlCisgIEFNX1Y9JEFNX0RFRkFVTFRfVkVSQk9TSVRZCisgIEFNX0RFRkFVTFRfVj0kQU1fREVGQVVMVF9WRVJCT1NJVFkKK2ZpCitBTV9CQUNLU0xBU0g9J1wnCisKIGlmIHRlc3QgImBjZCAkc3JjZGlyICYmIHB3ZGAiICE9ICJgcHdkYCI7IHRoZW4KICAgIyBVc2UgLUkkKHNyY2Rpcikgb25seSB3aGVuICQoc3JjZGlyKSAhPSAuLCBzbyB0aGF0IG1ha2UncyBvdXRwdXQKICAgIyBpcyBub3QgcG9sbHV0ZWQgd2l0aCByZXBlYXRlZCAiLUkuIgpAQCAtMzI0Nyw3ICszNDQyLDcgQEAKIAogIyBEZWZpbmUgdGhlIGlkZW50aXR5IG9mIHRoZSBwYWNrYWdlLgogIFBBQ0tBR0U9J2xpYmZmaScKLSBWRVJTSU9OPSczLjAuMTMnCisgVkVSU0lPTj0nMy4xJwogCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKQEAgLTMyODcsNiArMzQ4MiwxMCBAQAogIyBpbiB0aGUgd2lsZCA6LSggIFdlIHNob3VsZCBmaW5kIGEgcHJvcGVyIHdheSB0byBkZXByZWNhdGUgaXQgLi4uCiBBTVRBUj0nJCR7VEFSLXRhcn0nCiAKKworIyBXZSdsbCBsb29wIG92ZXIgYWxsIGtub3duIG1ldGhvZHMgdG8gY3JlYXRlIGEgdGFyIGFyY2hpdmUgdW50aWwgb25lIHdvcmtzLgorX2FtX3Rvb2xzPSdnbnV0YXIgIHBheCBjcGlvIG5vbmUnCisKIGFtX190YXI9JyQke1RBUi10YXJ9IGNob2YgLSAiJCR0YXJkaXIiJyBhbV9fdW50YXI9JyQke1RBUi10YXJ9IHhmIC0nCiAKIApAQCAtMzI5NCw2ICszNDkzLDcgQEAKIAogCiAKKwogIyBUaGUgc2FtZSBhcyBpbiBib2VobS1nYyBhbmQgbGlic3RkYysrLiBIYXZlIHRvIGJvcnJvdyBpdCBmcm9tIHRoZXJlLgogIyBXZSBtdXN0IGZvcmNlIENDIHRvIC9ub3QvIGJlIHByZWNpb3VzIHZhcmlhYmxlczsgb3RoZXJ3aXNlCiAjIHRoZSB3cm9uZywgbm9uLW11bHRpbGliLWFkanVzdGVkIHZhbHVlIHdpbGwgYmUgdXNlZCBpbiBtdWx0aWxpYnMuCkBAIC00Mjg0LDYgKzQ0ODQsMzkxIEBACiBmaQogCiAKK2FjX2V4dD1jcHAKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CitpZiB0ZXN0IC16ICIkQ1hYIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkQ0NDIjsgdGhlbgorICAgIENYWD0kQ0NDCisgIGVsc2UKKyAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIGFjX2N2X3Byb2dfQ1hYPSIkQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitDWFg9JGFjX2N2X3Byb2dfQ1hYCitpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENYWCIgPiY1CiskYXNfZWNobyAiJENYWCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgICAgdGVzdCAtbiAiJENYWCIgJiYgYnJlYWsKKyAgZG9uZQorZmkKK2lmIHRlc3QgLXogIiRDWFgiOyB0aGVuCisgIGFjX2N0X0NYWD0kQ1hYCisgIGZvciBhY19wcm9nIGluIGcrKyBjKysgZ3BwIGFDQyBDQyBjeHggY2MrKyBjbC5leGUgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0NYWD0kYWNfY3ZfcHJvZ19hY19jdF9DWFgKK2lmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ1hYIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0NYWCIgJiYgYnJlYWsKK2RvbmUKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0NYWCIgPSB4OyB0aGVuCisgICAgQ1hYPSJnKysiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQ1hYPSRhY19jdF9DWFgKKyAgZmkKK2ZpCisKKyAgZmkKK2ZpCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQorc2V0IFggJGFjX2NvbXBpbGUKK2FjX2NvbXBpbGVyPSQyCitmb3IgYWNfb3B0aW9uIGluIC0tdmVyc2lvbiAtdiAtViAtcXZlcnNpb247IGRvCisgIHsgeyBhY190cnk9IiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2NvbXBpbGVyICRhY19vcHRpb24gPiY1IikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgc2VkICcxMGFcCisuLi4gcmVzdCBvZiBzdGRlcnIgb3V0cHV0IGRlbGV0ZWQgLi4uCisgICAgICAgICAxMHEnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QuZXIxIGNvbmZ0ZXN0LmVycgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorZG9uZQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBhY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2FjX2N2X2N4eF9jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9jeHhfY29tcGlsZXJfZ251IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR1hYPXllcworZWxzZQorICBHWFg9CitmaQorYWNfdGVzdF9DWFhGTEFHUz0ke0NYWEZMQUdTK3NldH0KK2FjX3NhdmVfQ1hYRkxBR1M9JENYWEZMQUdTCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfY3h4X2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19zYXZlX2N4eF93ZXJyb3JfZmxhZz0kYWNfY3h4X3dlcnJvcl9mbGFnCisgICBhY19jeHhfd2Vycm9yX2ZsYWc9eWVzCisgICBhY19jdl9wcm9nX2N4eF9nPW5vCisgICBDWFhGTEFHUz0iLWciCisgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2N4eF9nPXllcworZWxzZQorICBDWFhGTEFHUz0iIgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworZWxzZQorICBhY19jeHhfd2Vycm9yX2ZsYWc9JGFjX3NhdmVfY3h4X3dlcnJvcl9mbGFnCisJIENYWEZMQUdTPSItZyIKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGFjX2N4eF93ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jeHhfd2Vycm9yX2ZsYWcKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY3h4X2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2N4eF9nIiA+JjY7IH0KK2lmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgorICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1nIC1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBDWFhGTEFHUz0iLU8yIgorICBlbHNlCisgICAgQ1hYRkxBR1M9CisgIGZpCitmaQorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gIiA+JjY7IH0KK2lmICR7YW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJEFNREVQX1RSVUUiICYmIHRlc3QgLWYgIiRhbV9kZXBjb21wIjsgdGhlbgorICAjIFdlIG1ha2UgYSBzdWJkaXIgYW5kIGRvIHRoZSB0ZXN0cyB0aGVyZS4gIE90aGVyd2lzZSB3ZSBjYW4gZW5kIHVwCisgICMgbWFraW5nIGJvZ3VzIGZpbGVzIHRoYXQgd2UgZG9uJ3Qga25vdyBhYm91dCBhbmQgbmV2ZXIgcmVtb3ZlLiAgRm9yCisgICMgaW5zdGFuY2UgaXQgd2FzIHJlcG9ydGVkIHRoYXQgb24gSFAtVVggdGhlIGdjYyB0ZXN0IHdpbGwgZW5kIHVwCisgICMgbWFraW5nIGEgZHVtbXkgZmlsZSBuYW1lZCAnRCcgLS0gYmVjYXVzZSAnLU1EJyBtZWFucyAicHV0IHRoZSBvdXRwdXQKKyAgIyBpbiBEIi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBhbV9fdW5pdmVyc2FsPWZhbHNlCisgIGNhc2UgIiAkZGVwY2MgIiBpbiAjKAorICAgICAqXCAtYXJjaFwgKlwgLWFyY2hcICopIGFtX191bml2ZXJzYWw9dHJ1ZSA7OworICAgICBlc2FjCisKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyAiOiA+IHN1Yi9jb25mdHN0JGkuaCIgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyAxMCAvYmluL3NoLgorICAgICAgZWNobyAnLyogZHVtbXkgKi8nID4gc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgICMgV2UgY2hlY2sgd2l0aCAnLWMnIGFuZCAnLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgJy1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuICBBbHNvLCBzb21lIEludGVsCisgICAgIyB2ZXJzaW9ucyBoYWQgdHJvdWJsZSB3aXRoIG91dHB1dCBpbiBzdWJkaXJzLgorICAgIGFtX19vYmo9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99CisgICAgYW1fX21pbnVzX29iaj0iLW8gJGFtX19vYmoiCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIGdjYykKKyAgICAgICMgVGhpcyBkZXBtb2RlIGNhdXNlcyBhIGNvbXBpbGVyIHJhY2UgaW4gdW5pdmVyc2FsIG1vZGUuCisgICAgICB0ZXN0ICIkYW1fX3VuaXZlcnNhbCIgPSBmYWxzZSB8fCBjb250aW51ZQorICAgICAgOzsKKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIEFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQuCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBtc3ZjNyB8IG1zdmM3bXN5cyB8IG1zdmlzdWFsY3BwIHwgbXN2Y21zeXMpCisgICAgICAjIFRoaXMgY29tcGlsZXIgd29uJ3QgZ3JvayAnLWMgLW8nLCBidXQgYWxzbywgdGhlIG1pbnVzbyB0ZXN0IGhhcworICAgICAgIyBub3QgcnVuIHlldC4gIFRoZXNlIGRlcG1vZGVzIGFyZSBsYXRlIGVub3VnaCBpbiB0aGUgZ2FtZSwgYW5kCisgICAgICAjIHNvIHdlYWsgdGhhdCB0aGVpciBmdW5jdGlvbmluZyBzaG91bGQgbm90IGJlIGltcGFjdGVkLgorICAgICAgYW1fX29iaj1jb25mdGVzdC4ke09CSkVYVC1vfQorICAgICAgYW1fX21pbnVzX29iaj0KKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD0kYW1fX29iaiBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAkYW1fX21pbnVzX29iaiBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDEuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwICRhbV9fb2JqIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjUKKyRhc19lY2hvICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA+JjY7IH0KK0NYWERFUE1PREU9ZGVwbW9kZT0kYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKyBpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ1hYX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlIiA9IGdjYzM7IHRoZW4KKyAgYW1fX2Zhc3RkZXBDWFhfVFJVRT0KKyAgYW1fX2Zhc3RkZXBDWFhfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9JyMnCisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPQorZmkKKworCiBDRkxBR1M9JHNhdmVfQ0ZMQUdTCiAKIApAQCAtNDU1Nyw4ICs1MTQyLDggQEAKIAogCiAKLW1hY3JvX3ZlcnNpb249JzIuNC4yJwotbWFjcm9fcmV2aXNpb249JzEuMzMzNycKK21hY3JvX3ZlcnNpb249JzIuNC4yLjQxOCcKK21hY3JvX3JldmlzaW9uPScyLjQuMi40MTgnCiAKIAogCkBAIC00NTcyLDcgKzUxNTcsNyBAQAogCiAKIAotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitsdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCiAKICMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KICMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgpAQCAtNDYyMSw3ICs1MjA2LDcgQEAKICAgICAkRUNITyAiIgogfQogCi1jYXNlICIkRUNITyIgaW4KK2Nhc2UgJEVDSE8gaW4KICAgcHJpbnRmKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50ZiIgPiY1CiAkYXNfZWNobyAicHJpbnRmIiA+JjY7IH0gOzsKICAgcHJpbnQqKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcHJpbnQgLXIiID4mNQpAQCAtNDk0NCwxOSArNTUyOSwxOSBAQAogCiAjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCiBpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKLSAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcworICB3aXRodmFsPSR3aXRoX2dudV9sZDsgdGVzdCBubyA9ICIkd2l0aHZhbCIgfHwgd2l0aF9nbnVfbGQ9eWVzCiBlbHNlCiAgIHdpdGhfZ251X2xkPW5vCiBmaQogCiBhY19wcm9nPWxkCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQogICBjYXNlICRob3N0IGluCiAgICotKi1taW5ndyopCi0gICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuIHdoaWNoIHVwc2V0cyBtaW5ndworICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiwgd2hpY2ggdXBzZXRzIG1pbmd3CiAgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwogICAqKQogICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKQEAgLTQ5NzAsNyArNTU1NSw3IEBACiAgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCiAJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCiAgICAgICBkb25lCi0gICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9JGFjX3Byb2cKICAgICAgIDs7CiAgICIiKQogICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgpAQCAtNDk4MSw3ICs1NTY2LDcgQEAKICAgICB3aXRoX2dudV9sZD11bmtub3duCiAgICAgOzsKICAgZXNhYwotZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCitlbGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgR05VIGxkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBHTlUgbGQuLi4gIiA+JjY7IH0KIGVsc2UKQEAgLTQ5OTIsMzIgKzU1NzcsMzIgQEAKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogICBmb3IgYWNfZGlyIGluICRQQVRIOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgogICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgIGx0X2N2X3BhdGhfTEQ9JGFjX2Rpci8kYWNfcHJvZwogICAgICAgIyBDaGVjayB0byBzZWUgaWYgdGhlIHByb2dyYW0gaXMgR05VIGxkLiAgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uLAogICAgICAgIyBidXQgYXBwYXJlbnRseSBzb21lIHZhcmlhbnRzIG9mIEdOVSBsZCBvbmx5IGFjY2VwdCAtdi4KICAgICAgICMgQnJlYWsgb25seSBpZiBpdCB3YXMgdGhlIEdOVS9ub24tR05VIGxkIHRoYXQgd2UgcHJlZmVyLgogICAgICAgY2FzZSBgIiRsdF9jdl9wYXRoX0xEIiAtdiAyPiYxIDwvZGV2L251bGxgIGluCiAgICAgICAqR05VKiB8ICond2l0aCBCRkQnKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IG5vICYmIGJyZWFrCisJdGVzdCBubyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhawogCTs7CiAgICAgICAqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJdGVzdCB5ZXMgIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKIAk7OwogICAgICAgZXNhYwogICAgIGZpCiAgIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIElGUz0kbHRfc2F2ZV9pZnMKIGVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgbHRfY3ZfcGF0aF9MRD0kTEQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCiBmaQogZmkKIAotTEQ9IiRsdF9jdl9wYXRoX0xEIgorTEQ9JGx0X2N2X3BhdGhfTEQKIGlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiAkYXNfZWNobyAiJExEIiA+JjY7IH0KQEAgLTUwNjAsMzMgKzU2NDUsMzMgQEAKIGVsc2UKICAgaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgogICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLSAgbHRfY3ZfcGF0aF9OTT0iJE5NIgorICBsdF9jdl9wYXRoX05NPSROTQogZWxzZQotICBsdF9ubV90b19jaGVjaz0iJHthY190b29sX3ByZWZpeH1ubSIKKyAgbHRfbm1fdG9fY2hlY2s9JHthY190b29sX3ByZWZpeH1ubQogICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCiAgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKICAgZmkKICAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCi0gICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogICAgIGZvciBhY19kaXIgaW4gJFBBVEggL3Vzci9jY3MvYmluL2VsZiAvdXNyL2Njcy9iaW4gL3Vzci91Y2IgL2JpbjsgZG8KLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICAgIHRtcF9ubT0iJGFjX2Rpci8kbHRfdG1wX25tIgotICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiIDsgdGhlbgorICAgICAgdG1wX25tPSRhY19kaXIvJGx0X3RtcF9ubQorICAgICAgaWYgdGVzdCAtZiAiJHRtcF9ubSIgfHwgdGVzdCAtZiAiJHRtcF9ubSRhY19leGVleHQiOyB0aGVuCiAJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0JIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjIEFkZGluZyB0aGUgJ3NlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgogCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKIAkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKIAljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KIAkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCiAJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgotCSAgYnJlYWsKKwkgIGJyZWFrIDIKIAkgIDs7CiAJKikKIAkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgogCSAgKi9kZXYvbnVsbCopCiAJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCi0JICAgIGJyZWFrCisJICAgIGJyZWFrIDIKIAkgICAgOzsKIAkgICopCiAJICAgIGx0X2N2X3BhdGhfTk09JHtsdF9jdl9wYXRoX05NPSIkdG1wX25tIn0gIyBrZWVwIHRoZSBmaXJzdCBtYXRjaCwgYnV0CkBAIC01MDk3LDE1ICs1NjgyLDE1IEBACiAJZXNhYwogICAgICAgZmkKICAgICBkb25lCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgSUZTPSRsdF9zYXZlX2lmcwogICBkb25lCiAgIDogJHtsdF9jdl9wYXRoX05NPW5vfQogZmkKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQogJGFzX2VjaG8gIiRsdF9jdl9wYXRoX05NIiA+JjY7IH0KLWlmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCi0gIE5NPSIkbHRfY3ZfcGF0aF9OTSIKK2lmIHRlc3Qgbm8gIT0gIiRsdF9jdl9wYXRoX05NIjsgdGhlbgorICBOTT0kbHRfY3ZfcGF0aF9OTQogZWxzZQogICAjIERpZG4ndCBmaW5kIGFueSBCU0QgY29tcGF0aWJsZSBuYW1lIGxpc3RlciwgbG9vayBmb3IgZHVtcGJpbi4KICAgaWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuIDoKQEAgLTUyMTEsOSArNTc5Niw5IEBACiAgIGZpCiBmaQogCi0gICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICBjYXNlIGAkRFVNUEJJTiAtc3ltYm9scyAtaGVhZGVycyAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgogICAgICpDT0ZGKikKLSAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIgorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMiCiAgICAgICA7OwogICAgICopCiAgICAgICBEVU1QQklOPToKQEAgLTUyMjEsOCArNTgwNiw4IEBACiAgICAgZXNhYwogICBmaQogCi0gIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KLSAgICBOTT0iJERVTVBCSU4iCisgIGlmIHRlc3QgOiAhPSAiJERVTVBCSU4iOyB0aGVuCisgICAgTk09JERVTVBCSU4KICAgZmkKIGZpCiB0ZXN0IC16ICIkTk0iICYmIE5NPW5tCkBAIC01MjczLDcgKzU4NTgsNyBAQAogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAgIGk9MAotICB0ZXN0c3RyaW5nPSJBQkNEIgorICB0ZXN0c3RyaW5nPUFCQ0QKIAogICBjYXNlICRidWlsZF9vcyBpbgogICBtc2Rvc2RqZ3BwKikKQEAgLTUzMTMsNyArNTg5OCw3IEBACiAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CiAgICAgOzsKIAotICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICBiaXRyaWcqIHwgZGFyd2luKiB8IGRyYWdvbmZseSogfCBmcmVlYnNkKiB8IG5ldGJzZCogfCBvcGVuYnNkKikKICAgICAjIFRoaXMgaGFzIGJlZW4gYXJvdW5kIHNpbmNlIDM4NkJTRCwgYXQgbGVhc3QuICBMaWtlbHkgZnVydGhlci4KICAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2N0bDsgdGhlbgogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCkBAIC01MzY0LDIyICs1OTQ5LDIyIEBACiAgICopCiAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAoZ2V0Y29uZiBBUkdfTUFYKSAyPiAvZGV2L251bGxgCiAgICAgaWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiIgJiYgXAotICAgICAgdGVzdCB1bmRlZmluZWQgIT0gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICAgdGVzdCB1bmRlZmluZWQgIT0gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKICAgICBlbHNlCiAgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCiAgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCi0gICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDYgNyA4OyBkbwogICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKICAgICAgIGRvbmUKICAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CiAgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQogICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKICAgICAgICMgd2UgY2FuJ3QgdGVsbC4KLSAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZW52IGVjaG8gIiR0ZXN0c3RyaW5nJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCisgICAgICB3aGlsZSB7IHRlc3QgWGBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKIAkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisJICAgICAgdGVzdCAxNyAhPSAiJGkiICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKICAgICAgIGRvCiAgICAgICAgIGk9YGV4cHIgJGkgKyAxYAogICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKQEAgLTUzOTcsNyArNTk4Miw3IEBACiAKIGZpCiAKLWlmIHRlc3QgLW4gJGx0X2N2X3N5c19tYXhfY21kX2xlbiA7IHRoZW4KK2lmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKICRhc19lY2hvICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjY7IH0KIGVsc2UKQEAgLTU0MTUsMzAgKzYwMDAsNiBAQAogOiAke01WPSJtdiAtZiJ9CiA6ICR7Uk09InJtIC1mIn0KIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7IH0KLSMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCi14c2lfc2hlbGw9bm8KLSggX2x0X2R1bW15PSJhL2IvYyIKLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKLSAgICAgID0gYyxhL2IsYi9jLCBcCi0gICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAotICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCi0gICYmIHhzaV9zaGVsbD15ZXMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkeHNpX3NoZWxsIiA+JjUKLSRhc19lY2hvICIkeHNpX3NoZWxsIiA+JjY7IH0KLQotCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIuLi4gIiA+JjY7IH0KLWx0X3NoZWxsX2FwcGVuZD1ubwotKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJDErPVwkMiIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCi0gICAgPi9kZXYvbnVsbCAyPiYxIFwKLSAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcwoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9zaGVsbF9hcHBlbmQiID4mNQotJGFzX2VjaG8gIiRsdF9zaGVsbF9hcHBlbmQiID4mNjsgfQotCi0KIGlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgogICBsdF91bnNldD11bnNldAogZWxzZQpAQCAtNTU2MSwxMyArNjEyMiwxMyBAQAogcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwogY2FzZSAkaG9zdF9vcyBpbgogICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgIT0gIiRHQ0MiOyB0aGVuCiAgICAgICByZWxvYWRfY21kcz1mYWxzZQogICAgIGZpCiAgICAgOzsKICAgZGFyd2luKikKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAkd2wtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwogICAgIGVsc2UKICAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKICAgICBmaQpAQCAtNTY5NSwxMyArNjI1NiwxMyBAQAogIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CiAjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCiAjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KLSMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAndW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCiAjICdwYXNzX2FsbCcgLS0gYWxsIGRlcGVuZGVuY2llcyBwYXNzZWQgd2l0aCBubyBjaGVja3MuCiAjICd0ZXN0X2NvbXBpbGUnIC0tIGNoZWNrIGJ5IG1ha2luZyB0ZXN0IHByb2dyYW0uCiAjICdmaWxlX21hZ2ljIFtbcmVnZXhdXScgLS0gY2hlY2sgYnkgbG9va2luZyBmb3IgZmlsZXMgaW4gbGlicmFyeSBwYXRoCi0jIHdoaWNoIHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgotIyBJZiB5b3UgaGF2ZSBgZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCi0jIHdoZXRoZXIgYHBhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgorIyB0aGF0IHJlc3BvbmRzIHRvIHRoZSAkZmlsZV9tYWdpY19jbWQgd2l0aCBhIGdpdmVuIGV4dGVuZGVkIHJlZ2V4LgorIyBJZiB5b3UgaGF2ZSAnZmlsZScgb3IgZXF1aXZhbGVudCBvbiB5b3VyIHN5c3RlbSBhbmQgeW91J3JlIG5vdCBzdXJlCisjIHdoZXRoZXIgJ3Bhc3NfYWxsJyB3aWxsICphbHdheXMqIHdvcmssIHlvdSBwcm9iYWJseSB3YW50IHRoaXMgb25lLgogCiBjYXNlICRob3N0X29zIGluCiBhaXhbNC05XSopCkBAIC01NzI4LDggKzYyODksNyBAQAogICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CiAgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAogICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgotICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCi0gIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgaWYgKCBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJwogICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJwogICBlbHNlCkBAIC01NzY1LDEwICs2MzI1LDYgQEAKICAgZmkKICAgOzsKIAotZ251KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQogaGFpa3UqKQogICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAogICA7OwpAQCAtNTgwNyw3ICs2MzYzLDcgQEAKICAgOzsKIAogIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIApAQCAtNTgyOSw4ICs2Mzg1LDggQEAKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKIAotb3BlbmJzZCopCi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KK29wZW5ic2QqIHwgYml0cmlnKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfFwuc298X3BpY1wuYSkkJwogICBlbHNlCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKQEAgLTYwNDAsOCArNjU5Niw4IEBACiAKIGNhc2UgJGhvc3Rfb3MgaW4KIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAotICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisgICMgdHdvIGRpZmZlcmVudCBzaGVsbCBmdW5jdGlvbnMgZGVmaW5lZCBpbiBsdG1haW4uc2g7CisgICMgZGVjaWRlIHdoaWNoIG9uZSB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCiAgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgogICAqLS1pZGVudGlmeS1zdHJpY3QqKQogICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgpAQCAtNjA1Myw3ICs2NjA5LDcgQEAKICAgOzsKICopCiAgICMgZmFsbGJhY2s6IGFzc3VtZSBsaW5rbGliIElTIHNoYXJlZGxpYgotICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0iJEVDSE8iCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRFQ0hPCiAgIDs7CiBlc2FjCiAKQEAgLTYyMDgsNyArNjc2NCw3IEBACiAgIGFjX3N0YXR1cz0kPwogICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQotICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKyAgICAgIGlmIHRlc3QgMCAtZXEgIiRhY19zdGF0dXMiOyB0aGVuCiAJIyBFbnN1cmUgdGhlIGFyY2hpdmVyIGZhaWxzIHVwb24gYm9ndXMgZmlsZSBuYW1lcy4KIAlybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGxpYmNvbmZ0ZXN0LmEKIAl7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQpAQCAtNjIxNiw3ICs2NzcyLDcgQEAKICAgYWNfc3RhdHVzPSQ/CiAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Ci0JaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKwlpZiB0ZXN0IDAgLW5lICIkYWNfc3RhdHVzIjsgdGhlbgogICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAogICAgICAgICBmaQogICAgICAgZmkKQEAgLTYyMjksNyArNjc4NSw3IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FyX2F0X2ZpbGUiID4mNQogJGFzX2VjaG8gIiRsdF9jdl9hcl9hdF9maWxlIiA+JjY7IH0KIAotaWYgdGVzdCAieCRsdF9jdl9hcl9hdF9maWxlIiA9IHhubzsgdGhlbgoraWYgdGVzdCBubyA9ICIkbHRfY3ZfYXJfYXRfZmlsZSI7IHRoZW4KICAgYXJjaGl2ZXJfbGlzdF9zcGVjPQogZWxzZQogICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKQEAgLTY0NDYsNyArNzAwMiw3IEBACiAKIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgb3BlbmJzZCopCisgIGJpdHJpZyogfCBvcGVuYnNkKikKICAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkdG9vbF9vbGRsaWIiCiAgICAgOzsKICAgKikKQEAgLTY1MzYsNyArNzA5Miw3IEBACiAgIHN5bWNvZGU9J1tBQkNER0lTVFddJwogICA7OwogaHB1eCopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAgICAgc3ltY29kZT0nW0FCQ0RFR1JTVF0nCiAgIGZpCiAgIDs7CkBAIC02NTY5LDE0ICs3MTI1LDQ0IEBACiAgIHN5bWNvZGU9J1tBQkNER0lSU1RXXScgOzsKIGVzYWMKIAoraWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgIyBHZXRzIGxpc3Qgb2YgZGF0YSBzeW1ib2xzIHRvIGltcG9ydC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSJzZWQgLW4gLWUgJ3MvXkkgLiogXCguKlwpJC9cMS9wJyIKKyAgIyBBZGp1c3QgdGhlIGJlbG93IGdsb2JhbCBzeW1ib2wgdHJhbnNmb3JtcyB0byBmaXh1cCBpbXBvcnRlZCB2YXJpYWJsZXMuCisgIGx0X2NkZWNsX2hvb2s9IiAtZSAncy9eSSAuKiBcKC4qXCkkL2V4dGVybiBfX2RlY2xzcGVjKGRsbGltcG9ydCkgY2hhciBcMTsvcCciCisgIGx0X2NfbmFtZV9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyIKKyAgbHRfY19uYW1lX2xpYl9ob29rPSJcCisgIC1lICdzL15JIC4qIFwobGliLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCdcCisgIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSAwfSwvcCciCitlbHNlCisgICMgRGlzYWJsZSBob29rcyBieSBkZWZhdWx0LgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQ9CisgIGx0X2NkZWNsX2hvb2s9CisgIGx0X2NfbmFtZV9ob29rPQorICBsdF9jX25hbWVfbGliX2hvb2s9CitmaQorCiAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uLgogIyBTb21lIHN5c3RlbXMgKGVzcC4gb24gaWE2NCkgbGluayBkYXRhIGFuZCBjb2RlIHN5bWJvbHMgZGlmZmVyZW50bHksCiAjIHNvIHVzZSB0aGlzIGdlbmVyYWwgYXBwcm9hY2guCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiJcCiskbHRfY2RlY2xfaG9va1wKKyIgLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgogCiAjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpWyBdKiQvICB7XFxcIlwxXFxcIiwgKHZvaWQgKikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwobGliW14gXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4iXAorJGx0X2NfbmFtZV9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIHdpdGggbGliIHByZWZpeCBhbmQKKyMgc3ltYm9sIGFkZHJlc3MuCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4iXAorJGx0X2NfbmFtZV9saWJfaG9va1wKKyIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCiAKICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgogb3B0X2NyPQpAQCAtNjU5NCwyMSArNzE4MCwyNCBAQAogCiAgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KICAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KLSAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgotICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24sCisgICAgIyBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlIGFuZCBJIGZvciBhbnkgaW1wb3J0ZWQgdmFyaWFibGUuCiAgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCiAgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLICciXAogIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCiAiICAgICAvXkNPRkYgU1lNQk9MIFRBQkxFL3tmb3IoaSBpbiBoaWRlKSBkZWxldGUgaGlkZVtpXX07IlwKICIgICAgIC9TZWN0aW9uIGxlbmd0aCAuKiNyZWxvY3MuKihwaWNrIGFueSkve2hpZGVbbGFzdF9zZWN0aW9uXT0xfTsiXAorIiAgICAgL14gKlN5bWJvbCBuYW1lICo6IC97c3BsaXQoXCQgMCxzbixcIjpcIik7IHNpPXN1YnN0cihzblsyXSwyKX07IlwKKyIgICAgIC9eICpUeXBlICo6IGNvZGUve3ByaW50IFwiVFwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAorIiAgICAgL14gKlR5cGUgKjogZGF0YS97cHJpbnQgXCJJXCIsc2ksc3Vic3RyKHNpLGxlbmd0aChwcmZ4KSl9OyJcCiAiICAgICBcJCAwIX4vRXh0ZXJuYWwgKlx8L3tuZXh0fTsiXAogIiAgICAgLyAwKyBVTkRFRiAve25leHR9OyAvIFVOREVGIFwoW158XVwpKigpL3tuZXh0fTsiXAogIiAgICAge2lmKGhpZGVbc2VjdGlvbl0pIG5leHR9OyJcCi0iICAgICB7Zj0wfTsgXCQgMH4vXChcKS4qXHwve2Y9MX07IHtwcmludGYgZiA/IFwiVCBcIiA6IFwiRCBcIn07IlwKLSIgICAgIHtzcGxpdChcJCAwLCBhLCAvXHx8XHIvKTsgc3BsaXQoYVsyXSwgcyl9OyJcCi0iICAgICBzWzFdfi9eW0A/XS97cHJpbnQgc1sxXSwgc1sxXTsgbmV4dH07IlwKLSIgICAgIHNbMV1+cHJmeCB7c3BsaXQoc1sxXSx0LFwiQFwiKTsgcHJpbnQgdFsxXSwgc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAorIiAgICAge2Y9XCJEXCJ9OyBcJCAwfi9cKFwpLipcfC97Zj1cIlRcIn07IlwKKyIgICAgIHtzcGxpdChcJCAwLGEsL1x8fFxyLyk7IHNwbGl0KGFbMl0scyl9OyJcCisiICAgICBzWzFdfi9eW0A/XS97cHJpbnQgZixzWzFdLHNbMV07IG5leHR9OyJcCisiICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IGYsdFsxXSxzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCiAiICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgogICBlbHNlCiAgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKQEAgLTY2NTYsMTEgKzcyNDUsMTEgQEAKIAlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KIAkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CiAvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KLSNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCi0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyNpZiBkZWZpbmVkIF9XSU4zMiB8fCBkZWZpbmVkIF9fQ1lHV0lOX18gfHwgZGVmaW5lZCBfV0lOMzJfV0NFCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNhbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKICAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KICMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCi0jZWxpZiBkZWZpbmVkKF9fb3NmX18pCisjZWxpZiBkZWZpbmVkIF9fb3NmX18KIC8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwogIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKICNlbHNlCkBAIC02Njg2LDcgKzcyNzUsNyBAQAogewogICB7ICJAUFJPR1JBTUAiLCAodm9pZCAqKSAwIH0sCiBfTFRfRU9GCi0JICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiBcKC4qXCkgXCguKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CiAJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CiAgIHswLCAodm9pZCAqKSAwfQogfTsKQEAgLTY3MDYsMTMgKzcyOTUsMTMgQEAKIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAogCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKIAkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwotCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIExJQlM9Y29uZnRzdG0uJGFjX29iamV4dAogCSAgQ0ZMQUdTPSIkQ0ZMQUdTJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIgogCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CiAgIChldmFsICRhY19saW5rKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwogICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KIAkgICAgcGlwZV93b3Jrcz15ZXMKIAkgIGZpCiAJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUwpAQCAtNjczMyw3ICs3MzIyLDcgQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgogCiAgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KLSAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiRwaXBlX3dvcmtzIjsgdGhlbgogICAgIGJyZWFrCiAgIGVsc2UKICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQpAQCAtNjc4Niw2ICs3Mzc1LDE2IEBACiAKIAogCisKKworCisKKworCisKKworCisKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN5c3Jvb3QiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHN5c3Jvb3QuLi4gIiA+JjY7IH0KIApAQCAtNjc5OCw5ICs3Mzk3LDkgQEAKIAogCiBsdF9zeXNyb290PQotY2FzZSAke3dpdGhfc3lzcm9vdH0gaW4gIygKK2Nhc2UgJHdpdGhfc3lzcm9vdCBpbiAjKAogIHllcykKLSAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogICAgICBsdF9zeXNyb290PWAkQ0MgLS1wcmludC1zeXNyb290IDI+L2Rldi9udWxsYAogICAgZmkKICAgIDs7ICMoCkBAIC02ODEwLDggKzc0MDksOCBAQAogIG5vfCcnKQogICAgOzsgIygKICAqKQotICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7d2l0aF9zeXNyb290fSIgPiY1Ci0kYXNfZWNobyAiJHt3aXRoX3N5c3Jvb3R9IiA+JjY7IH0KKyAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aF9zeXNyb290IiA+JjUKKyRhc19lY2hvICIkd2l0aF9zeXNyb290IiA+JjY7IH0KICAgIGFzX2ZuX2Vycm9yICQ/ICJUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguIiAiJExJTkVOTyIgNQogICAgOzsKIGVzYWMKQEAgLTY4MjgsMTMgKzc0MjcsMTQgQEAKICAgZW5hYmxldmFsPSRlbmFibGVfbGlidG9vbF9sb2NrOwogZmkKIAotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKK3Rlc3Qgbm8gPSAiJGVuYWJsZV9saWJ0b29sX2xvY2siIHx8IGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCiAKICMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAogIyBsaWJ0b29sIHN1cHBvcnQuCiBjYXNlICRob3N0IGluCiBpYTY0LSotaHB1eCopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IG1vZGUKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAogICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKQEAgLTY4NDMsMjQgKzc0NDMsMjUgQEAKICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgogICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KICAgICAgICpFTEYtMzIqKQotCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwlIUFVYX0lBNjRfTU9ERT0zMgogCTs7CiAgICAgICAqRUxGLTY0KikKLQlIUFVYX0lBNjRfTU9ERT0iNjQiCisJSFBVWF9JQTY0X01PREU9NjQKIAk7OwogICAgIGVzYWMKICAgZmkKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICA7OwogKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbGlua2VyCisgICMgb3B0aW9ucyBhY2NvcmRpbmdseS4KICAgZWNobyAnI2xpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwogICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgotICAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCiAgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCiAJKjMyLWJpdCopCiAJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgpAQCAtNjg4OSw5ICs3NDkwLDUwIEBACiAgIHJtIC1yZiBjb25mdGVzdCoKICAgOzsKIAoteDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCittaXBzNjQqLSpsaW51eCopCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgorICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgZW11bD1lbGYKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqMzItYml0KikKKwllbXVsPSIke2VtdWx9MzIiCisJOzsKKyAgICAgICo2NC1iaXQqKQorCWVtdWw9IiR7ZW11bH02NCIKKwk7OworICAgIGVzYWMKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqTVNCKikKKwllbXVsPSIke2VtdWx9YnRzbWlwIgorCTs7CisgICAgICAqTFNCKikKKwllbXVsPSIke2VtdWx9bHRzbWlwIgorCTs7CisgICAgZXNhYworICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpOMzIqKQorCWVtdWw9IiR7ZW11bH1uMzIiCisJOzsKKyAgICBlc2FjCisgICAgTEQ9IiR7TEQtbGR9IC1tICRlbXVsIgorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCiBzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LiAgTm90ZSB0aGF0IHRoZSBsaXN0ZWQgY2FzZXMgb25seSBjb3ZlciB0aGUKKyAgIyBzaXR1YXRpb25zIHdoZXJlIGFkZGl0aW9uYWwgbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCAoc3VjaCBhcyB3aGVuCisgICMgZG9pbmcgMzItYml0IGNvbXBpbGF0aW9uIGZvciBhIGhvc3Qgd2hlcmUgbGQgZGVmYXVsdHMgdG8gNjQtYml0LCBvcgorICAjIHZpY2UgdmVyc2EpOyB0aGUgY29tbW9uIGNhc2VzIHdoZXJlIG5vIGxpbmtlciBvcHRpb25zIGFyZSBuZWVkZWQgZG8KKyAgIyBub3QgYXBwZWFyIGluIHRoZSBsaXN0LgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAogICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKQEAgLTY5MDcsMTQgKzc1NDksMTcgQEAKIAkgIHg4Nl82NC0qbGludXgqKQogCSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCiAJICAgICAgKng4Ni02NCopCi0JICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3g4Nl82NCIKLQkgICAgICAgICA7OworCQlMRD0iJHtMRC1sZH0gLW0gZWxmMzJfeDg2XzY0IgorCQk7OwogCSAgICAgICopCi0JICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgotCSAgICAgICAgIDs7CisJCUxEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKwkJOzsKIAkgICAgZXNhYwogCSAgICA7OwotCSAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKwkgIHBvd2VycGM2NGxlLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMmxwcGNsaW51eCIKKwkgICAgOzsKKwkgIHBvd2VycGM2NC0qbGludXgqKQogCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKIAkgICAgOzsKIAkgIHMzOTB4LSpsaW51eCopCkBAIC02OTMzLDcgKzc1NzgsMTAgQEAKIAkgIHg4Nl82NC0qbGludXgqKQogCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKIAkgICAgOzsKLQkgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorCSAgcG93ZXJwY2xlLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NGxwcGMiCisJICAgIDs7CisJICBwb3dlcnBjLSpsaW51eCopCiAJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKIAkgICAgOzsKIAkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCkBAIC02OTUxLDcgKzc1OTksNyBAQAogCiAqLSotc2NvMy4ydjUqKQogICAjIE9uIFNDTyBPcGVuU2VydmVyIDUsIHdlIG5lZWQgLWJlbGYgdG8gZ2V0IGZ1bGwtZmVhdHVyZWQgYmluYXJpZXMuCi0gIFNBVkVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICBTQVZFX0NGTEFHUz0kQ0ZMQUdTCiAgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gIiA+JjY7IH0KQEAgLTY5OTEsMTMgKzc2MzksMTQgQEAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQogJGFzX2VjaG8gIiRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjY7IH0KLSAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9jY19uZWVkc19iZWxmIjsgdGhlbgogICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICAgIENGTEFHUz0kU0FWRV9DRkxBR1MKICAgZmkKICAgOzsKICotKnNvbGFyaXMqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAogICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKQEAgLTcwMDksNyArNzY1OCw3IEBACiAgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgogICAgICAgeWVzKikKICAgICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICBpPzg2LSotc29sYXJpcyopCisgICAgICAgIGk/ODYtKi1zb2xhcmlzKnx4ODZfNjQtKi1zb2xhcmlzKikKICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKICAgICAgICAgICA7OwogICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKQEAgLTcwMTgsNyArNzY2Nyw3IEBACiAgICAgICAgIGVzYWMKICAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCiAgICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICBMRD0iJHtMRC1sZH1fc29sMiIKKyAgICAgICAgICBMRD0ke0xELWxkfV9zb2wyCiAgICAgICAgIGZpCiAgICAgICAgIDs7CiAgICAgICAqKQpAQCAtNzAzNCw3ICs3NjgzLDcgQEAKICAgOzsKIGVzYWMKIAotbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCituZWVkX2xvY2tzPSRlbmFibGVfbGlidG9vbF9sb2NrCiAKIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KQEAgLTcxNDUsNyArNzc5NCw3IEBACiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNQogJGFzX2VjaG8gIiRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiID4mNjsgfQotaWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzICE9ICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIjsgdGhlbgogICBNQU5JRkVTVF9UT09MPToKIGZpCiAKQEAgLTc2NDgsNyArODI5Nyw3IEBACiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KLSAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLXogIiRMVF9NVUxUSV9NT0RVTEUiOyB0aGVuCiAJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCiAJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCiAJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQpAQCAtNzY2Niw3ICs4MzE1LDcgQEAKIAkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CiAJIyBPdGhlcndpc2UsIGlmIHRoZSBvdXRwdXQgd2FzIGNyZWF0ZWQgd2l0aCBhIDAgZXhpdCBjb2RlIGZyb20KIAkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgotCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwOyB0aGVuCisJZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCI7IHRoZW4KIAkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCiAJZWxzZQogCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKQEAgLTc3MDUsNyArODM1NCw3IEBACiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCUxERkxBR1M9JHNhdmVfTERGTEFHUwogCiBmaQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQpAQCAtNzczNCw3ICs4MzgzLDcgQEAKICAgICAgIF9sdF9yZXN1bHQ9JD8KICAgICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyICYmICRHUkVQIGZvcmNlX2xvYWQgY29uZnRlc3QuZXJyOyB0aGVuCiAJY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMTsgdGhlbgogCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCiAgICAgICBlbHNlCiAJY2F0IGNvbmZ0ZXN0LmVyciA+JjUKQEAgLTc3NDcsMzIgKzgzOTYsMzIgQEAKICRhc19lY2hvICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY2OyB9CiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwogICAgIGRhcndpbjEuKikKLSAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwogICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgogICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cwogICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKICAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PwogICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgogCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luWzkxXSopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OwogCTEwLlswMTJdKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtZmxhdF9uYW1lc3BhY2UgJHdsLXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwogCTEwLiopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OwogICAgICAgZXNhYwogICAgIDs7CiAgIGVzYWMKLSAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIjsgdGhlbgogICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKICAgICBmaQotICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IjsgdGhlbgorICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR3bC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUtc3ltYm9scy5leHBzeW0nCiAgICAgZWxzZQotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nfiROTUVESVQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8kbGlibmFtZS1zeW1ib2xzLmV4cHN5bSAkbGliJwogICAgIGZpCi0gICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiIgJiYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gIm5vIjsgdGhlbgorICAgIGlmIHRlc3QgOiAhPSAiJERTWU1VVElMIiAmJiB0ZXN0IG5vID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgogICAgICAgX2x0X2RzeW11dGlsPSd+JERTWU1VVElMICRsaWIgfHwgOicKICAgICBlbHNlCiAgICAgICBfbHRfZHN5bXV0aWw9CkBAIC04MDYzLDYgKzg3MTIsMTcgQEAKIAogCiAKK2Z1bmNfc3RyaXBuYW1lX2NuZiAoKQoreworICBjYXNlICQyIGluCisgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkMyIgfCAkU0VEICJzJV4kMSUlOyBzJVxcXFwkMlwkJSUiYDs7CisgICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkMyIgfCAkU0VEICJzJV4kMSUlOyBzJSQyXCQlJSJgOzsKKyAgZXNhYworfSAjIGZ1bmNfc3RyaXBuYW1lX2NuZgorCisKKworCiAKICMgU2V0IG9wdGlvbnMKIApAQCAtODA4MywxNCArODc0MywxNCBAQAogICAgICopCiAgICAgICBlbmFibGVfc2hhcmVkPW5vCiAgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAogICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgorCUlGUz0kbHRfc2F2ZV9pZnMKIAlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgogCSAgZW5hYmxlX3NoYXJlZD15ZXMKIAlmaQogICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICA7OwogICAgIGVzYWMKIGVsc2UKQEAgLTgxMTQsMTQgKzg3NzQsMTQgQEAKICAgICAqKQogICAgICBlbmFibGVfc3RhdGljPW5vCiAgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAogICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgorCUlGUz0kbHRfc2F2ZV9pZnMKIAlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgogCSAgZW5hYmxlX3N0YXRpYz15ZXMKIAlmaQogICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICA7OwogICAgIGVzYWMKIGVsc2UKQEAgLTgxNDUsMTQgKzg4MDUsMTQgQEAKICAgICAqKQogICAgICAgcGljX21vZGU9ZGVmYXVsdAogICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKICAgICAgIGZvciBsdF9wa2cgaW4gJHdpdGh2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCisJSUZTPSRsdF9zYXZlX2lmcwogCWlmIHRlc3QgIlgkbHRfcGtnIiA9ICJYJGx0X3AiOyB0aGVuCiAJICBwaWNfbW9kZT15ZXMKIAlmaQogICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICA7OwogICAgIGVzYWMKIGVsc2UKQEAgLTgxNjAsOCArODgyMCw2IEBACiBmaQogCiAKLXRlc3QgLXogIiRwaWNfbW9kZSIgJiYgcGljX21vZGU9ZGVmYXVsdAotCiAKIAogCkBAIC04MTc3LDE0ICs4ODM1LDE0IEBACiAgICAgKikKICAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KICAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRJRlMkUEFUSF9TRVBBUkFUT1IsCiAgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCisJSUZTPSRsdF9zYXZlX2lmcwogCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCiAJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwogCWZpCiAgICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIDs7CiAgICAgZXNhYwogZWxzZQpAQCAtODIwMiw3ICs4ODYwLDcgQEAKIAogCiAjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCi1MSUJUT09MX0RFUFM9IiRsdG1haW4iCitMSUJUT09MX0RFUFM9JGx0bWFpbgogCiAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgogTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCkBAIC04MjUxLDcgKzg5MDksNyBAQAogCiAKIAotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBmaQogCkBAIC04MjkwLDcgKzg5NDgsNyBAQAogICAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKICAgIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCiAgICMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLSAgaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIGlmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KICAgICBDT0xMRUNUX05BTUVTPQogICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCiAgIGZpCkBAIC04MzAxLDE0ICs4OTU5LDE0IEBACiBvZmlsZT1saWJ0b29sCiBjYW5fYnVpbGRfc2hhcmVkPXllcwogCi0jIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAogIyB3aGljaCBuZWVkcyAnLmxpYicpLgogbGliZXh0PWEKIAotd2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAogCi1vbGRfQ0M9IiRDQyIKLW9sZF9DRkxBR1M9IiRDRkxBR1MiCitvbGRfQ0M9JENDCitvbGRfQ0ZMQUdTPSRDRkxBR1MKIAogIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKIHRlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKQEAgLTgzNDAsMjIgKzg5OTgsMjIgQEAKIGVsc2UKICAgY2FzZSAkTUFHSUNfQ01EIGluCiBbXFwvKl0gfCAgPzpbXFwvXSopCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JE1BR0lDX0NNRCAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KICAgOzsKICopCi0gIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9JE1BR0lDX0NNRAorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiAgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgogICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJHthY190b29sX3ByZWZpeH1maWxlOyB0aGVuCi0gICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGUiCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGUiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kYWNfZGlyLyIke2FjX3Rvb2xfcHJlZml4fWZpbGUiCiAgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCiAJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KIAkiZmlsZV9tYWdpYyAiKikKIAkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAotCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECiAJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CiAJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgIDoKQEAgLTgzNzgsMTMgKzkwMzYsMTMgQEAKICAgICAgIGJyZWFrCiAgICAgZmkKICAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIElGUz0kbHRfc2F2ZV9pZnMKKyAgTUFHSUNfQ01EPSRsdF9zYXZlX01BR0lDX0NNRAogICA7OwogZXNhYwogZmkKIAotTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitNQUdJQ19DTUQ9JGx0X2N2X3BhdGhfTUFHSUNfQ01ECiBpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CiAkYXNfZWNobyAiJE1BR0lDX0NNRCIgPiY2OyB9CkBAIC04NDA2LDIyICs5MDY0LDIyIEBACiBlbHNlCiAgIGNhc2UgJE1BR0lDX0NNRCBpbgogW1xcLypdIHwgID86W1xcL10qKQotICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSRNQUdJQ19DTUQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCiAgIDs7CiAqKQotICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGx0X3NhdmVfTUFHSUNfQ01EPSRNQUdJQ19DTUQKKyAgbHRfc2F2ZV9pZnM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogICBhY19kdW1teT0iL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCIKICAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCi0gICAgaWYgdGVzdCAtZiAkYWNfZGlyL2ZpbGU7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyL2ZpbGUiCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci9maWxlIjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9JGFjX2Rpci8iZmlsZSIKICAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KIAljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgogCSJmaWxlX21hZ2ljICIqKQogCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCi0JICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIE1BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKIAkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKIAkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgOgpAQCAtODQ0NCwxMyArOTEwMiwxMyBAQAogICAgICAgYnJlYWsKICAgICBmaQogICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgSUZTPSRsdF9zYXZlX2lmcworICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECiAgIDs7CiBlc2FjCiBmaQogCi1NQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKK01BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKIGlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKICRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KQEAgLTg0NzEsNyArOTEyOSw3IEBACiAKICMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0CiAKLWx0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfQ0M9JENDCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKIGFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKQEAgLTg1MzMsNyArOTE5MSw3IEBACiAKIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQogCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgbnZjYyopCiAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKQEAgLTg1NDksNyArOTIwNyw3IEBACiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCiAgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKICAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCiAgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCkBAIC04NTc5LDcgKzkyMzcsNyBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjY7IH0KIAotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPSB4eWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiOyB0aGVuCiAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgogZWxzZQogICAgIDoKQEAgLTg1OTcsMTcgKzkyNTUsMTggQEAKIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQogCiAKLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwogICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJwogCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgYWl4KikKICAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCiAJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwogICAgICAgZmkKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKICAgICAgIDs7CiAKICAgICBhbWlnYW9zKikKQEAgLTg2MTgsOCArOTI3Nyw4IEBACiAgICAgICAgIDs7CiAgICAgICBtNjhrKQogICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgIyBhZGRpbmcgdGhlICctbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgJy1tNjgwNDAnLgogICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKICAgICAgICAgOzsKICAgICAgIGVzYWMKQEAgLTg3MDUsNyArOTM2NCw3IEBACiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGFpeCopCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCiAgICAgICBlbHNlCkBAIC04NzEzLDYgKzkzNzIsMjAgQEAKICAgICAgIGZpCiAgICAgICA7OwogCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZm5vLWNvbW1vbicKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBuYWdmb3IqKQorICAgICAgICAjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1QSUMnCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKICAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQogICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwogICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KQEAgLTg3MzIsNyArOTQwNSw3IEBACiAJOzsKICAgICAgIGVzYWMKICAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9JyR3bC1hICR7d2x9YXJjaGl2ZScKICAgICAgIDs7CiAKICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQpAQCAtODc0MSw5ICs5NDE0LDkgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKICAgICAgIDs7CiAKLSAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KICAgICAgIGVjYyopCiAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCkBAIC04NzY4LDYgKzk0NDEsMTIgQEAKIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCiAJOzsKKyAgICAgIHRjYyopCisJIyBGYWJyaWNlIEJlbGxhcmQgZXQgYWwncyBUaW55IEMgQ29tcGlsZXIKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKwk7OwogICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQogICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAogCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCkBAIC04ODY1LDcgKzk1NDQsNyBAQAogICAgICAgOzsKIAogICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KIAlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtjb25mb3JtX3BpYycKIAlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCiAgICAgICBmaQpAQCAtODg5NCw3ICs5NTczLDcgQEAKICAgZmkKIAogY2FzZSAkaG9zdF9vcyBpbgotICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgIyBGb3IgcGxhdGZvcm1zIHRoYXQgZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKICAgKmRqZ3BwKikKICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KICAgICA7OwpAQCAtODkyNiw3ICs5NjA1LDcgQEAKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KICAgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKICAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCiAgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCkBAIC04OTU2LDcgKzk2MzUsNyBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY1CiAkYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjY7IH0KIAotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPSB4eWVzOyB0aGVuCitpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiOyB0aGVuCiAgICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWMgaW4KICAgICAgIiIgfCAiICIqKSA7OwogICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgOzsKQEAgLTg5ODgsNyArOTY2Nyw3IEBACiAgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCiAgICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgogICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KQEAgLTkwMDcsMTMgKzk2ODYsMTMgQEAKICAgICAgZmkKICAgIGZpCiAgICAkUk0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCiAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNjsgfQogCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyI7IHRoZW4KICAgICA6CiBlbHNlCiAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CkBAIC05MTMzLDggKzk4MTIsOCBAQAogCiAKIAotaGFyZF9saW5rcz0ibm90dGVzdGVkIgotaWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgoraGFyZF9saW5rcz1ub3R0ZXN0ZWQKK2lmIHRlc3Qgbm8gPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiAmJiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KICAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcy4uLiAiID4mNjsgfQpAQCAtOTE0Niw5ICs5ODI1LDkgQEAKICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKICRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgIGlmIHRlc3Qgbm8gPSAiJGhhcmRfbGlua3MiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CiAgICAgbmVlZF9sb2Nrcz13YXJuCiAgIGZpCiBlbHNlCkBAIC05MTkxLDkgKzk4NzAsOSBAQAogICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAogICBpbmNsdWRlX2V4cHN5bXM9CiAgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgJyAoJyBhbmQgJykkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogJ2F8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyAnYScgYW5kICdiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgJ2QnLgogICBleGNsdWRlX2V4cHN5bXM9J19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKicKICAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CiAgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgpAQCAtOTIwOCw3ICs5ODg3LDcgQEAKICAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCiAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgogICAgICAgd2l0aF9nbnVfbGQ9bm8KICAgICBmaQogICAgIDs7CkBAIC05MjE2LDcgKzk4OTUsNyBAQAogICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCiAgICAgd2l0aF9nbnVfbGQ9eWVzCiAgICAgOzsKLSAgb3BlbmJzZCopCisgIG9wZW5ic2QqIHwgYml0cmlnKikKICAgICB3aXRoX2dudV9sZD1ubwogICAgIDs7CiAgIGVzYWMKQEAgLTkyMjYsNyArOTkwNSw3IEBACiAgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgogICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgYWl4KikKIAkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKQEAgLTkyNDgsMjQgKzk5MjcsMjQgQEAKICAgICBlc2FjCiAgIGZpCiAKLSAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCiAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHt3bH0nCisgICAgd2xhcmM9JyR3bCcKIAogICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCiAgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCiAgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgogICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLS1leHBvcnQtZHluYW1pYycKICAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCiAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCiAgICAgZWxzZQogICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CiAgICAgZmkKICAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KLSAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICBjYXNlIGAkTEQgLXYgfCAkU0VEIC1lICdzLyheKVwrKVxzXCsvLycgMj4mMWAgaW4KICAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CiAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCiAgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgpAQCAtOTI3OCw3ICs5OTU3LDcgQEAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgYWl4WzMtOV0qKQogICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisgICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KIAlsZF9zaGxpYnM9bm8KIAljYXQgPDxfTFRfRU9GIDE+JjIKIApAQCAtOTI5Nyw3ICs5OTc2LDcgQEAKICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCiAgICAgICBwb3dlcnBjKQogICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAotICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJwogICAgICAgICA7OwogICAgICAgbTY4aykKQEAgLTkzMTMsNyArOTk5Miw3IEBACiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKIAkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCiAJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KICAgICAgIGZpCkBAIC05MzIzLDcgKzEwMDAyLDcgQEAKICAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCApIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAogICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCiAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAogICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCiAgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwpAQCAtOTMzMSw2MSArMTAwMTAsNjEgQEAKICAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJwogCiAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQllbHNlCi0JICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZml+Ci0JJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHdsLS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCisJIyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kIEVYUE9SVFMuLi4KKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCisgICAgICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICBlbHNlCisgICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZml+CisgICAgICAgICRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgaGFpa3UqKQotICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKICAgICAgIDs7CiAKICAgICBpbnRlcml4WzMtOV0qKQogICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1FJwogICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgogICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQogICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQogICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAogICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawogICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgInN8XnxffCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwogICAgICAgOzsKIAogICAgIGdudSogfCBsaW51eCogfCB0cGYqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQogICAgICAgdG1wX2RpZXQ9bm8KLSAgICAgIGlmIHRlc3QgIiRob3N0X29zIiA9IGxpbnV4LWRpZXRsaWJjOyB0aGVuCisgICAgICBpZiB0ZXN0IGxpbnV4LWRpZXRsaWJjID0gIiRob3N0X29zIjsgdGhlbgogCWNhc2UgJGNjX2Jhc2VuYW1lIGluCiAJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKIAllc2FjCiAgICAgICBmaQogICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAotCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKwkgJiYgdGVzdCBubyA9ICIkdG1wX2RpZXQiCiAgICAgICB0aGVuCiAJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCiAJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCiAJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCiAgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCiAJICA7OwogCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KiB8IHBnZm9ydHJhbiopCiAJCQkJCSMgUG9ydGxhbmQgR3JvdXAgZjc3IGFuZCBmOTAgY29tcGlsZXJzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OwogCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAogCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwpAQCAtOTM5Niw0MiArMTAwNzUsNDQgQEAKIAlsZjk1KikJCQkJIyBMYWhleSBGb3J0cmFuIDguMQogCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CiAJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisgICAgICAgIG5hZ2ZvciopICAgICAgICAgICAgICAgICAgICAgICAgIyBOQUdGT1IgNS4zCisgICAgICAgICAgdG1wX3NoYXJlZGZsYWc9Jy1XbCwtc2hhcmVkJyA7OwogCXhsW2NDXSogfCBiZ3hsW2NDXSogfCBtcGl4bFtjQ10qKSAjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCiAJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKIAkgIHRtcF9hZGRmbGFnPSA7OwogCW52Y2MqKQkjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR3bC0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICBjb21waWxlcl9uZWVkc19vYmplY3Q9eWVzCiAJICA7OwogCWVzYWMKIAljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KIAkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcwogCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwogCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCiAJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CiAJZXNhYwotCWFyY2hpdmVfY21kcz0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogCi0gICAgICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXZlcnNpb24tc2NyaXB0ICR3bCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwogICAgICAgICBmaQogCiAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KIAl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCiAJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCiAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlIC0tbm8td2hvbGUtYXJjaGl2ZScKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJwotCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KIAkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgICAgJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLXZlcnNpb24tc2NyaXB0ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCiAJICBmaQogCSAgOzsKIAllc2FjCkBAIC05NDQ1LDggKzEwMTI2LDggQEAKIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCiAJd2xhcmM9CiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGZpCiAgICAgICA7OwogCkBAIC05NDY0LDggKzEwMTQ1LDggQEAKIAogX0xUX0VPRgogICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KICAgICAgIGZpCkBAIC05NDc3LDcgKzEwMTU4LDcgQEAKIAlsZF9zaGxpYnM9bm8KIAljYXQgPDxfTFRfRU9GIDE+JjIKIAotKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW5ub3QKICoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAogKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQogKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKQEAgLTk0OTIsOSArMTAxNzMsOSBAQAogCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KIAkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCiAJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQkgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAkgIGVsc2UKIAkgICAgbGRfc2hsaWJzPW5vCiAJICBmaQpAQCAtOTUxMSwxNSArMTAxOTIsMTUgQEAKIAogICAgICopCiAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KICAgICAgIGZpCiAgICAgICA7OwogICAgIGVzYWMKIAotICAgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICBpZiB0ZXN0IG5vID0gIiRsZF9zaGxpYnMiOyB0aGVuCiAgICAgICBydW5wYXRoX3Zhcj0KICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9CiAgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9CkBAIC05NTM1LDcgKzEwMjE2LDcgQEAKICAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCiAgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCiAgICAgICBoYXJkY29kZV9taW51c19MPXllcwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyIgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgogCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQogCSMgYnJva2VuIGNvbGxlY3QyLgogCWhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZApAQCAtOTU0MywxMiArMTAyMjQsMTIgQEAKICAgICAgIDs7CiAKICAgICBhaXhbNC05XSopCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KIAkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CiAJIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCiAJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwogCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0iIgorCW5vX2VudHJ5X2ZsYWc9CiAgICAgICBlbHNlCiAJIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCiAJIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQpAQCAtOTU2Niw3ICsxMDI0Nyw3IEBACiAJIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KIAljYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCiAJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisJICBpZiAodGVzdCB4LWJydGwgPSAieCRsZF9mbGFnIiB8fCB0ZXN0IHgtV2wsLWJydGwgPSAieCRsZF9mbGFnIik7IHRoZW4KIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKIAkgICAgYnJlYWsKIAkgIGZpCkBAIC05NTg5LDEzICsxMDI3MCwxMyBAQAogICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKICAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCi0gICAgICBmaWxlX2xpc3Rfc3BlYz0nJHt3bH0tZiwnCisgICAgICBmaWxlX2xpc3Rfc3BlYz0nJHdsLWYsJwogCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KIAljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQogCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawogCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKIAkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCiAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKIAkgIHRoZW4KQEAgLTk2MTQsMzUgKzEwMjk1LDM1IEBACiAJICA7OwogCWVzYWMKIAlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR3bC1HJwogCWZpCiAgICAgICBlbHNlCiAJIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCiAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKIAkgIHNoYXJlZF9mbGFnPSctRycKIAllbHNlCi0JICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR3bC1HJwogCSAgZWxzZQotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgICBzaGFyZWRfZmxhZz0nJHdsLWJNOlNSRScKIAkgIGZpCiAJZmkKICAgICAgIGZpCiAKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tYmV4cGFsbCcKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLWJleHBhbGwnCiAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCiAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgogCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAogCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwogICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgICAgICAgIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KICAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCiBlbHNlCiAgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKQEAgLTk2NzcsNyArMTAzNTgsNyBAQAogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPS91c3IvbGliOi9saWIKICAgZmkKIAogZmkKQEAgLTk2ODUsMTcgKzEwMzY2LDE3IEBACiAgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KIGZpCiAKLSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bCckbm9fZW50cnlfZmxhZycgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0IC1uICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR3bCRhbGxvd191bmRlZmluZWRfZmxhZyI7IGVsc2UgOjsgZmlgICR3bCckZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMnICckc2hhcmVkX2ZsYWcKICAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKIAkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIteiBub2RlZnMiCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR3bCRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR3bCRhbGxvd191bmRlZmluZWRfZmxhZyAnIlwkd2wkZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCiAJZWxzZQogCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KIAkgIyBlbXB0eSBleGVjdXRhYmxlLgotCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisJIGlmIHRlc3Qgc2V0ID0gIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSI7IHRoZW4KICAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCiBlbHNlCiAgIGlmICR7bHRfY3ZfYWl4X2xpYnBhdGhfKzp9IGZhbHNlOyB0aGVuIDoKQEAgLTk3MzAsNyArMTA0MTEsNyBAQAogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKICAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoXyI7IHRoZW4KLSAgICBsdF9jdl9haXhfbGlicGF0aF89Ii91c3IvbGliOi9saWIiCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPS91c3IvbGliOi9saWIKICAgZmkKIAogZmkKQEAgLTk3MzgsMjEgKzEwNDE5LDIxIEBACiAgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KIGZpCiAKLQkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCiAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAogCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJub3RvaycKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVyb2snCi0JICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICBub191bmRlZmluZWRfZmxhZz0nICR3bC1iZXJub3RvaycKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHdsLWJlcm9rJworCSAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogCSAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgotCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgZWxzZQogCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKIAkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKIAkgIGZpCiAJICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKIAkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAkd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCiAJZmkKICAgICAgIGZpCiAgICAgICA7OwpAQCAtOTc2MSw3ICsxMDQ0Miw3IEBACiAgICAgICBjYXNlICRob3N0X2NwdSBpbgogICAgICAgcG93ZXJwYykKICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKICAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKICAgICAgICAgOzsKICAgICAgIG02OGspCkBAIC05NzkxLDE2ICsxMDQ3MiwxNyBAQAogCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCiAJbGliZXh0PWxpYgogCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotCXNocmV4dF9jbWRzPSIuZGxsIgorCXNocmV4dF9jbWRzPS5kbGwKIAkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgZWxzZQotCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgZml+Ci0JICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+Ci0JICBsaW5rbmFtZXM9JworCWFyY2hpdmVfY21kcz0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmICAgdGVzdCBERUYgPSAiYCRTRUQgLW4gICAgIC1lICdcJydzL15bCSBdKi8vJ1wnJyAgICAgLWUgJ1wnJy9eXCg7LipcKSokL2QnXCcnICAgICAtZSAnXCcncy9eXChFWFBPUlRTXHxMSUJSQVJZXClcKFsJIF0uKlwpKiQvREVGL3AnXCcnICAgICAtZSBxICAgICAkZXhwb3J0X3N5bWJvbHNgIiA7IHRoZW4KKyAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7CisgICAgICAgICAgICBlY2hvICIkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5kZWYiID4gIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwIjsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworICAgICAgICAgIGZpfgorICAgICAgICAgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKyAgICAgICAgICBsaW5rbmFtZXM9JwogCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KIAkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgKT0ndHJ1ZScKIAllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcwpAQCAtOTgwOSwxOCArMTA0OTEsMTggQEAKIAkjIERvbid0IHVzZSByYW5saWIKIAlvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCiAJcG9zdGxpbmtfY21kcz0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgotCSAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KLQkgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KLQkgICAgKi5leGV8Ki5FWEUpIDs7Ci0JICAgICopCi0JICAgICAgbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgotCSAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iJGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUiCi0JICAgICAgOzsKLQkgIGVzYWN+Ci0JICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgotCSAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOwotCSAgICAkUk0gIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsKLQkgIGZpJworICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisgICAgICAgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBsdF9vdXRwdXRmaWxlPSRsdF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICBlc2FjfgorICAgICAgICAgIGlmIHRlc3QgOiAhPSAiJE1BTklGRVNUX1RPT0wiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKyAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworICAgICAgICAgIGZpJwogCTs7CiAgICAgICAqKQogCSMgQXNzdW1lIE1TVkMgd3JhcHBlcgpAQCAtOTgyOSw3ICsxMDUxMSw3IEBACiAJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KIAlsaWJleHQ9bGliCiAJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9Ii5kbGwiCisJc2hyZXh0X2NtZHM9LmRsbAogCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KIAlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwogCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCkBAIC05ODQ4LDI0ICsxMDUzMCwyNCBAQAogICBoYXJkY29kZV9kaXJlY3Q9bm8KICAgaGFyZGNvZGVfYXV0b21hdGljPXllcwogICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCi0gIGlmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJ5ZXMiOyB0aGVuCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCI7IHRoZW4KKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR3bC1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJwogCiAgIGVsc2UKICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJwogICBmaQogICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICBhbGxvd191bmRlZmluZWRfZmxhZz0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgorICBhbGxvd191bmRlZmluZWRfZmxhZz0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgIGlmb3J0KnxuYWdmb3IqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CiAgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CiAgIGVzYWMKLSAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgogICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLSAgICBhcmNoaXZlX2NtZHM9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCi0gICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgYXJjaGl2ZV9jbWRzPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKKyAgICBtb2R1bGVfY21kcz0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kc3ltdXRpbCIKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIG1vZHVsZV9leHBzeW1fY21kcz0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgogCiAgIGVsc2UKICAgbGRfc2hsaWJzPW5vCkBAIC05OTA3LDMzICsxMDU4OSwzMyBAQAogICAgICAgOzsKIAogICAgIGhwdXg5KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgZWxzZQotCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bCtiICR3bCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKIAogICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgogICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCiAgICAgICA7OwogCiAgICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKIAlhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wrYiAkd2wkbGliZGlyJwogCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogCWhhcmRjb2RlX2RpcmVjdD15ZXMKIAloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCiAJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKIAkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KIAloYXJkY29kZV9taW51c19MPXllcwpAQCAtOTk0MSwyNSArMTA2MjMsMjUgQEAKICAgICAgIDs7CiAKICAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyxubyA9ICIkR0NDLCR3aXRoX2dudV9sZCI7IHRoZW4KIAljYXNlICRob3N0X2NwdSBpbgogCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJaWE2NCopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAkqKQotCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAllc2FjCiAgICAgICBlbHNlCiAJY2FzZSAkaG9zdF9jcHUgaW4KIAlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJaWE2NCopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAkqKQogCkBAIC05OTcxLDcgKzEwNjUzLDcgQEAKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj1ubwotICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIHNhdmVfTERGTEFHUz0kTERGTEFHUwogICAgTERGTEFHUz0iJExERkxBR1MgLWIiCiAgICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKICAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgpAQCAtOTk5MCwxNCArMTA2NzIsMTQgQEAKICAgICAgZmkKICAgIGZpCiAgICAkUk0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCiAKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiID4mNQogJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjY7IH0KIAotaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA9IHh5ZXM7IHRoZW4KLSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfX2IiOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiBlbHNlCiAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogZmkKQEAgLTEwMDA1LDggKzEwNjg3LDggQEAKIAkgIDs7CiAJZXNhYwogICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsK2IgJHdsJGxpYmRpcicKIAloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKIAogCWNhc2UgJGhvc3RfY3B1IGluCkBAIC0xMDAxNyw3ICsxMDY5OSw3IEBACiAJKikKIAkgIGhhcmRjb2RlX2RpcmVjdD15ZXMKIAkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCiAKIAkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCiAJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KQEAgLTEwMDI4LDggKzEwNzEwLDggQEAKICAgICAgIDs7CiAKICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CiAJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAogCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCkBAIC0xMDAzOSw4ICsxMDcyMSw4IEBACiBpZiAke2x0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLQkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisgIHNhdmVfTERGTEFHUz0kTERGTEFHUworCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHdsLWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bC9kZXYvbnVsbCIKIAkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiBpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CkBAIC0xMDA1MiwxOSArMTA3MzQsMTkgQEAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgICAgICAgICBMREZMQUdTPSRzYXZlX0xERkxBR1MKIGZpCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKICRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQotCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAkd2wtZXhwb3J0c19maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCWZpCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLWV4cG9ydHNfZmlsZSAkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBmaQogICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKICAgICAgIGluaGVyaXRfcnBhdGg9eWVzCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwpAQCAtMTAwODQsNyArMTA3NjYsNyBAQAogICAgIG5ld3NvczYpCiAgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCiAgICAgICA7OwpAQCAtMTAwOTIsMjcgKzEwNzc0LDE5IEBACiAgICAgKm50byogfCAqcW54KikKICAgICAgIDs7CiAKLSAgICBvcGVuYnNkKikKKyAgICBvcGVuYnNkKiB8IGJpdHJpZyopCiAgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgogCWhhcmRjb2RlX2RpcmVjdD15ZXMKIAloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCiAJaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KIAkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHdsLUUnCiAJZWxzZQotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCi0JICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCi0JICAgICA7OwotCSAgICopCi0JICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgICA7OwotCSAgZXNhYworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGgsJGxpYmRpcicKIAlmaQogICAgICAgZWxzZQogCWxkX3NobGlicz1ubwpAQCAtMTAxMjgsMjggKzEwODAyLDI4IEBACiAgICAgICA7OwogCiAgICAgb3NmMyopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogICAgICAgZWxzZQogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAgICAgIGZpCiAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSckd2wtcnBhdGggJHdsJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgogICAgICAgOzsKIAogICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1tc3ltICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogICAgICAgZWxzZQogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1pbnB1dCAkd2wkbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKIAogCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKQEAgLTEwMTYwLDI0ICsxMDgzNCwyNCBAQAogCiAgICAgc29sYXJpcyopCiAgICAgICBub191bmRlZmluZWRfZmxhZz0nIC16IGRlZnMnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCXdsYXJjPScke3dsfScKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJd2xhcmM9JyR3bCcKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wteiAke3dsfXRleHQgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAlhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogICAgICAgZWxzZQogCWNhc2UgYCRDQyAtViAyPiYxYCBpbgogCSoiQ29tcGlsZXJzIDUuMCIqKQogCSAgd2xhcmM9JycKLQkgIGFyY2hpdmVfY21kcz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAgICRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAJICA7OwogCSopCi0JICB3bGFyYz0nJHt3bH0nCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICB3bGFyYz0nJHdsJworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogCSAgOzsKIAllc2FjCiAgICAgICBmaQpAQCAtMTAxODcsMTEgKzEwODYxLDExIEBACiAgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CiAgICAgICAqKQogCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IHVuZGVyc3RhbmRzICcteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCAnJHdsJywKIAkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHdsLXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR3bC16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCiAJZWxzZQogCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCiAJZmkKQEAgLTEwMjAxLDEwICsxMDg3NSwxMCBAQAogICAgICAgOzsKIAogICAgIHN1bm9zNCopCi0gICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisgICAgICBpZiB0ZXN0IHNlcXVlbnQgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgogCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KIAkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHdsLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKIAlhcmNoaXZlX2NtZHM9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICBmaQpAQCAtMTAyNTMsNDMgKzEwOTI3LDQzIEBACiAgICAgICA7OwogCiAgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScke3dsfS16LHRleHQnCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHdsLXosdGV4dCcKICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCiAgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCiAKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBmaQogICAgICAgOzsKIAogICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBOb3RlOiBXZSBDQU5OT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAogICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwogICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCiAgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CiAgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKICAgICAgICMgYXMgLXogZGVmcy4KLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScke3dsfS16LHRleHQnCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0teixub2RlZnMnCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHdsLXosdGV4dCcKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSckd2wteixub2RlZnMnCiAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHdsLVIsJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JzonCiAgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CZXhwb3J0JworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSckd2wtQmV4cG9ydCcKICAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKIAotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGZpCiAgICAgICA7OwogCkBAIC0xMDMwNCwxMCArMTA5NzgsMTAgQEAKICAgICAgIDs7CiAgICAgZXNhYwogCi0gICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgIGlmIHRlc3Qgc25pID0gIiRob3N0X3ZlbmRvciI7IHRoZW4KICAgICAgIGNhc2UgJGhvc3QgaW4KICAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR3bC1CbGFyZ2VkeW5zeW0nCiAJOzsKICAgICAgIGVzYWMKICAgICBmaQpAQCAtMTAzMTUsNyArMTA5ODksNyBAQAogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CiAkYXNfZWNobyAiJGxkX3NobGlicyIgPiY2OyB9Ci10ZXN0ICIkbGRfc2hsaWJzIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KK3Rlc3Qgbm8gPSAiJGxkX3NobGlicyIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCiB3aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKIApAQCAtMTAzNDEsNyArMTEwMTUsNyBAQAogICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCiAgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcwogCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyx5ZXMgPSAiJEdDQywkZW5hYmxlX3NoYXJlZCI7IHRoZW4KICAgICBjYXNlICRhcmNoaXZlX2NtZHMgaW4KICAgICAqJ34nKikKICAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KQEAgLTEwNTU2LDE0ICsxMTIzMCwxNCBAQAogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KIAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7Ci0gICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovLC9MUi8nIDs7CisgICAgKikgbHRfYXdrX2FyZz0nL15saWJyYXJpZXM6LycgOzsKICAgZXNhYwogICBjYXNlICRob3N0X29zIGluCi0gICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW0EtWmEtel06XCksXDEsZyIgOzsKLSAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OworICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VkX3N0cmlwX2VxPSdzfD1cKFtBLVphLXpdOlwpfFwxfGcnIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSdzfD0vfC98ZycgOzsKICAgZXNhYwogICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAogICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCkBAIC0xMDU3OSwyOCArMTEyNTMsMzUgQEAKICAgICA7OwogICBlc2FjCiAgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0Ci0gICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4uLgogICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KLSAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgbHRfbXVsdGlfb3NfZGlyPS9gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgICMgLi4uYnV0IGlmIHNvbWUgcGF0aCBjb21wb25lbnQgYWxyZWFkeSBlbmRzIHdpdGggdGhlIG11bHRpbGliIGRpciB3ZSBhc3N1bWUKKyAgIyB0aGF0IGFsbCBpcyBmaW5lIGFuZCB0cnVzdCAtcHJpbnQtc2VhcmNoLWRpcnMgYXMgaXMgKEdDQyA0LjI/IG9yIG5ld2VyKS4KKyAgY2FzZSAiJGx0X211bHRpX29zX2RpcjsgJGx0X3NlYXJjaF9wYXRoX3NwZWMgIiBpbgorICAiLzsgIiogfCAiLy47ICIqIHwgIi8uLzsgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIgIiogfCAqIiRsdF9tdWx0aV9vc19kaXIvICIqKQorICAgIGx0X211bHRpX29zX2Rpcj0KKyAgICA7OworICBlc2FjCiAgIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KLSAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KLSAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCi0gICAgZWxzZQorICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCisgICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCRsdF9tdWx0aV9vc19kaXIiCisgICAgZWxpZiB0ZXN0IC1uICIkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgogICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCiAJbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCiAgICAgZmkKICAgZG9uZQogICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCi1CRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7Ci0gIGx0X2Zvbz0iIjsKLSAgbHRfY291bnQ9MDsKK0JFR0lOIHtSUyA9ICIgIjsgRlMgPSAiL3xcbiI7fSB7CisgIGx0X2ZvbyA9ICIiOworICBsdF9jb3VudCA9IDA7CiAgIGZvciAobHRfaSA9IE5GOyBsdF9pID4gMDsgbHRfaS0tKSB7CiAgICAgaWYgKCRsdF9pICE9ICIiICYmICRsdF9pICE9ICIuIikgewogICAgICAgaWYgKCRsdF9pID09ICIuLiIpIHsKICAgICAgICAgbHRfY291bnQrKzsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChsdF9jb3VudCA9PSAwKSB7Ci0gICAgICAgICAgbHRfZm9vPSIvIiAkbHRfaSBsdF9mb287CisgICAgICAgICAgbHRfZm9vID0gIi8iICRsdF9pIGx0X2ZvbzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICBsdF9jb3VudC0tOwogICAgICAgICB9CkBAIC0xMDYxNCw3ICsxMTI5NSw3IEBACiAgICMgZm9yIHRoZXNlIGhvc3RzLgogICBjYXNlICRob3N0X29zIGluCiAgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCi0gICAgICAkU0VEICdzLC9cKFtBLVphLXpdOlwpLFwxLGcnYCA7OworICAgICAgJFNFRCAnc3wvXChbQS1aYS16XTpcKXxcMXxnJ2AgOzsKICAgZXNhYwogICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCiBlbHNlCkBAIC0xMDYyMyw3ICsxMTMwNCw3IEBACiBsaWJyYXJ5X25hbWVzX3NwZWM9CiBsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJwogc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgorc2hyZXh0X2NtZHM9LnNvCiBwb3N0aW5zdGFsbF9jbWRzPQogcG9zdHVuaW5zdGFsbF9jbWRzPQogZmluaXNoX2NtZHM9CkBAIC0xMDY0MywxMSArMTEzMjQsMTEgQEAKIGNhc2UgJGhvc3Rfb3MgaW4KIGFpeDMqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUuYScKICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICiAKICAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICA7OwogCiBhaXhbNC05XSopCkBAIC0xMDY1NSw0MCArMTEzMzYsNDAgQEAKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JwogICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIGVsc2UKICAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCiAgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAotICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KLSAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgdGhlIGxpbmUgJyMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiAnLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgogICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQogICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKIAkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgogCToKICAgICAgIGVsc2UKIAljYW5fYnVpbGRfc2hhcmVkPW5vCiAgICAgICBmaQogICAgICAgOzsKICAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW5ub3QgaGFyZGNvZGUgY29ycmVjdAogICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KICAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgogICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCiAgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAogICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgICAgZWxzZQogICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKICAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgICAgZmkKICAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKICAgZmkKQEAgLTEwNjk5LDE4ICsxMTM4MCwxOCBAQAogICBwb3dlcnBjKQogICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KICAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICAgIDs7CiAgIG02OGspCiAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKICAgICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgotICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKICAgICA7OwogICBlc2FjCiAgIDs7CiAKIGJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKICAgOzsKQEAgLTEwNzE4LDggKzExMzk5LDggQEAKIGJzZGlbNDVdKikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKQEAgLTEwNzMxLDcgKzExNDEyLDcgQEAKIAogY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKKyAgc2hyZXh0X2NtZHM9LmRsbAogICBuZWVkX3ZlcnNpb249bm8KICAgbmVlZF9saWJfcHJlZml4PW5vCiAKQEAgLTEwNzQwLDggKzExNDIxLDggQEAKICAgICAjIGdjYwogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCiAgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcwotICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgotICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwkZmlsZWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wkYmFzZV9maWxlJ1wnJ2k7IGVjaG8gXCRkbG5hbWUnXCcnYH4KICAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KICAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgogICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgpAQCAtMTA3NTcsMTcgKzExNDM4LDE3IEBACiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGN5Z3dpbiopCiAgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCiAKICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiCiAgICAgICA7OwogICAgIG1pbmd3KiB8IGNlZ2NjKikKICAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwogICAgICAgOzsKICAgICBwdzMyKikKICAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKICAgICAgIDs7CiAgICAgZXNhYwogICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCkBAIC0xMDc3Niw4ICsxMTQ1Nyw4IEBACiAgICosY2wqKQogICAgICMgTmF0aXZlIE1TVkMKICAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmxpYicKIAogICAgIGNhc2UgJGJ1aWxkX29zIGluCiAgICAgbWluZ3cqKQpAQCAtMTA4MDQsNyArMTE0ODUsNyBAQAogICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKICAgICAgIDs7CiAgICAgKikKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kTElCCiAgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSC4KICAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKQEAgLTEwODE3LDggKzExNDk4LDggQEAKICAgICBlc2FjCiAKICAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgogICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgogICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CiAgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCkBAIC0xMDgzMSw3ICsxMTUxMiw3IEBACiAKICAgKikKICAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1suXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCAkbGlibmFtZS5saWInCiAgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKICAgICA7OwogICBlc2FjCkBAIC0xMDg0NCw4ICsxMTUyNSw4IEBACiAgIHZlcnNpb25fdHlwZT1kYXJ3aW4KICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAogICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKQEAgLTEwODU4LDggKzExNTM5LDggQEAKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICA7OwogCkBAIC0xMDg3NywxMiArMTE1NTgsMTIgQEAKICAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAogICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KICAgICBmcmVlYnNkLWVsZiopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgICAgIG5lZWRfdmVyc2lvbj1ubwogICAgICAgbmVlZF9saWJfcHJlZml4PW5vCiAgICAgICA7OwogICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwogICAgICAgbmVlZF92ZXJzaW9uPXllcwogICAgICAgOzsKICAgZXNhYwpAQCAtMTA5MDcsMjYgKzExNTg4LDE1IEBACiAgIGVzYWMKICAgOzsKIAotZ251KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQogaGFpa3UqKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy9ib290L2hvbWUvY29uZmlnL2xpYiAvYm9vdC9jb21tb24vbGliIC9ib290L3N5c3RlbS9saWInCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgOzsKQEAgLTEwOTQ0LDkgKzExNjE0LDkgQEAKICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgogICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBpZiB0ZXN0IDMyID0gIiRIUFVYX0lBNjRfTU9ERSI7IHRoZW4KICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKICAgICBlbHNlCiAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCkBAIC0xMDk1OSw4ICsxMTYyOSw4IEBACiAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCiAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwogICAgIDs7CkBAIC0xMDk2OSw4ICsxMTYzOSw4IEBACiAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKICAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgICAgOzsKICAgZXNhYwogICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCkBAIC0xMDk4Myw4ICsxMTY1Myw4IEBACiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KQEAgLTEwOTk1LDcgKzExNjY1LDcgQEAKICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKICAgICAqKQotCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfcHJvZ19nbnVfbGQiOyB0aGVuCiAJCXZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKIAllbHNlCiAJCXZlcnNpb25fdHlwZT1pcml4CkBAIC0xMTAwMyw4ICsxMTY3Myw4IEBACiAgIGVzYWMKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgaXJpeDUqIHwgbm9uc3RvcHV4KikKICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CkBAIC0xMTAyMyw4ICsxMTY5Myw4IEBACiAgIGVzYWMKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiAvdXNyL2xvY2FsL2xpYiRsaWJzdWZmIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYiCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgOzsKIApAQCAtMTEwMzMsMTMgKzExNzAzLDMzIEBACiAgIGR5bmFtaWNfbGlua2VyPW5vCiAgIDs7CiAKK2xpbnV4KmFuZHJvaWQqKQorICB2ZXJzaW9uX3R5cGU9bm9uZSAjIEFuZHJvaWQgZG9lc24ndCBzdXBwb3J0IHZlcnNpb25lZCBsaWJyYXJpZXMuCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIGZpbmlzaF9jbWRzPQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgZHluYW1pY19saW5rZXI9J0FuZHJvaWQgbGlua2VyJworICAjIERvbid0IGVtYmVkIC1ycGF0aCBkaXJlY3RvcmllcyBzaW5jZSB0aGUgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgIDs7CisKICMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KQEAgLTExMDgzLDE0ICsxMTc3MywxMCBAQAogICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAKLSAgIyBBZGQgQUJJLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBzeXN0ZW0gbGlicmFyeSBwYXRoLgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYjY0IC91c3IvbGliNjQgL2xpYiAvdXNyL2xpYiIKLQogICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAogICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgogICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyAkbHRfbGRfZXh0cmEiCi0KKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCiAgIGZpCiAKICAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCkBAIC0xMTEwNywxMiArMTE3OTMsMTIgQEAKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwogICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JwogICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCiAgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwogICBlbHNlCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJwogICBmaQogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSApAQCAtMTExMjIsNyArMTE4MDgsNyBAQAogCiBuZXdzb3M2KQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgOzsKQEAgLTExMTMxLDQ1ICsxMTgxNywzNCBAQAogICB2ZXJzaW9uX3R5cGU9cW54CiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJwogICA7OwogCi1vcGVuYnNkKikKK29wZW5ic2QqIHwgYml0cmlnKikKICAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIKICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7Ci0gIGVzYWMKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiOyB0aGVuCisgICAgbmVlZF92ZXJzaW9uPW5vCisgIGVsc2UKKyAgICBuZWVkX3ZlcnNpb249eWVzCisgIGZpCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgOzsKIAogb3MyKikKICAgbGlibmFtZV9zcGVjPSckbmFtZScKLSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIHNocmV4dF9jbWRzPS5kbGwKICAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCAkbGlibmFtZS5hJwogICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCiAgIHNobGlicGF0aF92YXI9TElCUEFUSAogICA7OwpAQCAtMTExNzgsMTEgKzExODUzLDExIEBACiAgIHZlcnNpb25fdHlwZT1vc2YKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwogICA7OwogCiByZG9zKikKQEAgLTExMTkzLDggKzExODY4LDggQEAKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwpAQCAtMTEyMDQsMTEgKzExODc5LDExIEBACiAKIHN1bm9zNCopCiAgIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAgICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIGZpCiAgIG5lZWRfdmVyc2lvbj15ZXMKQEAgLTExMjE2LDggKzExODkxLDggQEAKIAogc3lzdjQgfCBzeXN2NC4zKikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBjYXNlICRob3N0X3ZlbmRvciBpbgogICAgIHNuaSkKQEAgLTExMjM4LDEwICsxMTkxMywxMCBAQAogICA7OwogCiBzeXN2NCpNUCopCi0gIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgogICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dC4kdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJG1ham9yJwogICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIGZpCiAgIDs7CkBAIC0xMTI1MCwxMiArMTE5MjUsMTIgQEAKICAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwogICBlbHNlCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCkBAIC0xMTI3Myw3ICsxMTk0OCw3IEBACiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KICAgaGFyZGNvZGVfaW50b19saWJzPXllcwpAQCAtMTEyODEsOCArMTE5NTYsOCBAQAogCiB1dHM0KikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICA7OwogCkBAIC0xMTI5MiwxOCArMTE5NjcsMTggQEAKIGVzYWMKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQogJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Ci10ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwordGVzdCBubyA9ICIkZHluYW1pY19saW5rZXIiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KIAogdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgogZmkKIAotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgoraWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKIGZpCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwogZmkKIAogCkBAIC0xMTQwMiwxNSArMTIwNzcsMTUgQEAKIGhhcmRjb2RlX2FjdGlvbj0KIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIiB8fAogICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiB8fAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gIlh5ZXMiIDsgdGhlbgorICAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyI7IHRoZW4KIAogICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiICE9IG5vICYmCisgIGlmIHRlc3Qgbm8gIT0gIiRoYXJkY29kZV9kaXJlY3QiICYmCiAgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKICAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQogICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICkiICE9IG5vICYmCi0gICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSBubzsgdGhlbgorICAgICAjIyB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCApIiAmJgorICAgICB0ZXN0IG5vICE9ICIkaGFyZGNvZGVfbWludXNfTCI7IHRoZW4KICAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgogICAgIGhhcmRjb2RlX2FjdGlvbj1yZWxpbmsKICAgZWxzZQpAQCAtMTE0MjUsMTIgKzEyMTAwLDEyIEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CiAkYXNfZWNobyAiJGhhcmRjb2RlX2FjdGlvbiIgPiY2OyB9CiAKLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rIHx8Ci0gICB0ZXN0ICIkaW5oZXJpdF9ycGF0aCIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgcmVsaW5rID0gIiRoYXJkY29kZV9hY3Rpb24iIHx8CisgICB0ZXN0IHllcyA9ICIkaW5oZXJpdF9ycGF0aCI7IHRoZW4KICAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCiAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KK2VsaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfHwKKyAgICAgdGVzdCBubyA9ICIkZW5hYmxlX3NoYXJlZCI7IHRoZW4KICAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CiAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKIGZpCkBAIC0xMTQ0MCw3ICsxMjExNSw3IEBACiAKIAogCi0gIGlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBpZiB0ZXN0IHllcyAhPSAiJGVuYWJsZV9kbG9wZW4iOyB0aGVuCiAgIGVuYWJsZV9kbG9wZW49dW5rbm93bgogICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgogICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KQEAgLTExNDUwLDIzICsxMjEyNSwyMyBAQAogCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgYmVvcyopCi0gICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKKyAgICBsdF9jdl9kbG9wZW49bG9hZF9hZGRfb24KICAgICBsdF9jdl9kbG9wZW5fbGlicz0KICAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKICAgICA7OwogCiAgIG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCisgICAgbHRfY3ZfZGxvcGVuPUxvYWRMaWJyYXJ5CiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CiAgICAgOzsKIAogICBjeWd3aW4qKQotICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgorICAgIGx0X2N2X2Rsb3Blbj1kbG9wZW4KICAgICBsdF9jdl9kbG9wZW5fbGlicz0KICAgICA7OwogCiAgIGRhcndpbiopCi0gICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KIGlmICR7YWNfY3ZfbGliX2RsX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CkBAIC0xMTUwNCwxMCArMTIxNzksMTAgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQogaWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCisgIGx0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbAogZWxzZQogCi0gICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbj1keWxkCiAgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CiAgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCiAKQEAgLTExNTE1LDEwICsxMjE5MCwxOCBAQAogCiAgICAgOzsKIAorICB0cGYqKQorICAgICMgRG9uJ3QgdHJ5IHRvIHJ1biBhbnkgbGluayB0ZXN0cyBmb3IgVFBGLiAgV2Uga25vdyBpdCdzIGltcG9zc2libGUKKyAgICAjIGJlY2F1c2UgVFBGIGlzIGEgY3Jvc3MtY29tcGlsZXIsIGFuZCB3ZSBrbm93IGhvdyB3ZSBvcGVuIERTT3MuCisgICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vCisgICAgOzsKKwogICAqKQogICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInNobF9sb2FkIiAiYWNfY3ZfZnVuY19zaGxfbG9hZCIKIGlmIHRlc3QgIngkYWNfY3ZfZnVuY19zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKKyAgbHRfY3ZfZGxvcGVuPXNobF9sb2FkCiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAiID4mNjsgfQpAQCAtMTE1NTcsMTEgKzEyMjQwLDExIEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQogJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjY7IH0KIGlmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgorICBsdF9jdl9kbG9wZW49c2hsX2xvYWQgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGQKIGVsc2UKICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgbHRfY3ZfZGxvcGVuPWRsb3BlbgogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KQEAgLTExNjAwLDcgKzEyMjgzLDcgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNjsgfQogaWYgdGVzdCAieCRhY19jdl9saWJfZGxfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgotICBsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiCisgIGx0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbAogZWxzZQogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICIgPiY2OyB9CkBAIC0xMTYzOSw3ICsxMjMyMiw3IEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CiAkYXNfZWNobyAiJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKLSAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiCisgIGx0X2N2X2Rsb3Blbj1kbG9wZW4gbHRfY3ZfZGxvcGVuX2xpYnM9LWxzdmxkCiBlbHNlCiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbGRfbGluayBpbiAtbGRsZC4uLiAiID4mNjsgfQpAQCAtMTE2NzgsNyArMTIzNjEsNyBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjUKICRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID0geHllczsgdGhlbiA6Ci0gIGx0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKKyAgbHRfY3ZfZGxvcGVuPWRsZF9saW5rIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxkCiBmaQogCiAKQEAgLTExNjk5LDIxICsxMjM4MiwyMSBAQAogICAgIDs7CiAgIGVzYWMKIAotICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCi0gICAgZW5hYmxlX2Rsb3Blbj15ZXMKLSAgZWxzZQorICBpZiB0ZXN0IG5vID0gIiRsdF9jdl9kbG9wZW4iOyB0aGVuCiAgICAgZW5hYmxlX2Rsb3Blbj1ubworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKICAgZmkKIAogICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KICAgZGxvcGVuKQotICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKyAgICBzYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworICAgIHRlc3QgeWVzID0gIiRhY19jdl9oZWFkZXJfZGxmY25faCIgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKIAotICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCiAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgogCi0gICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBzYXZlX0xJQlM9JExJQlMKICAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCiAKICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKQEAgLTExNzIxLDcgKzEyNDA0LDcgQEAKIGlmICR7bHRfY3ZfZGxvcGVuX3NlbGYrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIAkgIGlmIHRlc3QgeWVzID0gIiRjcm9zc19jb21waWxpbmciOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MKIGVsc2UKICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgpAQCAtMTE3NzAsNyArMTI0NTMsNyBAQAogCiAvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCiAgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCi0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKKyNpZiBkZWZpbmVkIF9fR05VQ19fICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCiBpbnQgZm5vcmQgKCkgX19hdHRyaWJ1dGVfXygodmlzaWJpbGl0eSgiZGVmYXVsdCIpKSk7CiAjZW5kaWYKIApAQCAtMTE4MDAsNyArMTI0ODMsNyBAQAogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKICAgICBsdF9zdGF0dXM9JD8KICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCkBAIC0xMTgyMCwxNCArMTI1MDMsMTQgQEAKIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQogJGFzX2VjaG8gIiRsdF9jdl9kbG9wZW5fc2VsZiIgPiY2OyB9CiAKLSAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfZGxvcGVuX3NlbGYiOyB0aGVuCiAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYuLi4gIiA+JjY7IH0KIGlmICR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICAJICBpZiB0ZXN0IHllcyA9ICIkY3Jvc3NfY29tcGlsaW5nIjsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1jcm9zcwogZWxzZQogICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCkBAIC0xMTg3Niw3ICsxMjU1OSw3IEBACiAKIC8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKICAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KLSNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQorI2lmIGRlZmluZWQgX19HTlVDX18gJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKIGludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKICNlbmRpZgogCkBAIC0xMTkwNiw3ICsxMjU4OSw3IEBACiAgIChldmFsICRhY19saW5rKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwogICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyAiY29uZnRlc3QkYWNfZXhlZXh0IiAyPi9kZXYvbnVsbDsgdGhlbgogICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAogICAgIGx0X3N0YXR1cz0kPwogICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KQEAgLTExOTI3LDkgKzEyNjEwLDkgQEAKICRhc19lY2hvICIkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIiA+JjY7IH0KICAgICBmaQogCi0gICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0gICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICBDUFBGTEFHUz0kc2F2ZV9DUFBGTEFHUworICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIExJQlM9JHNhdmVfTElCUwogICAgIDs7CiAgIGVzYWMKIApAQCAtMTE5NzMsNyArMTI2NTYsNyBAQAogIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgZGFyd2luKikKLSAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KICAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCiAgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQpAQCAtMTIwMDEsNyArMTI2ODQsNyBAQAogCiAKIAotICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgIyBSZXBvcnQgd2hhdCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CiAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1CkBAIC0xMjAwOSwxMyArMTI2OTIsMTMgQEAKIAogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KLSAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KIAogICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgogICBjYXNlICRob3N0X29zIGluCiAgIGFpeDMqKQotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgogICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgogICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwpAQCAtMTIwMjMsOCArMTI3MDYsOCBAQAogICAgIDs7CiAKICAgYWl4WzQtOV0qKQotICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiICYmIHRlc3Qgbm8gPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisgICAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwogICAgIGZpCiAgICAgOzsKICAgZXNhYwpAQCAtMTIwMzQsNyArMTI3MTcsNyBAQAogICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKICRhc19lY2hvICIkZW5hYmxlX3N0YXRpYyIgPiY2OyB9CiAKQEAgLTEyMDQ4LDcgKzEyNzMxLDMxODcgQEAKIGFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCiBhY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CiAKLUNDPSIkbHRfc2F2ZV9DQyIKK0NDPSRsdF9zYXZlX0NDCisKKyAgICAgIGlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCBubyAhPSAiJENYWCIgJiYKKyAgICAoICh0ZXN0IGcrKyA9ICIkQ1hYIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0IGcrKyAhPSAiJENYWCIpKSk7IHRoZW4KKyAgYWNfZXh0PWNwcAorYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yLi4uICIgPiY2OyB9CitpZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgorICBpZiAke2FjX2N2X3Byb2dfQ1hYQ1BQKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENYWENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKworZmkKKyAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAorZWxzZQorICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDWFhDUFAiID4mNQorJGFzX2VjaG8gIiRDWFhDUFAiID4mNjsgfQorYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CisgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCitjb250aW51ZQorZWxzZQorICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKKworZG9uZQorIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCitybSAtZiBjb25mdGVzdC5pIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbiA6CisKK2Vsc2UKKyAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2Vsc2UKKyAgX2x0X2NhdWdodF9DWFhfZXJyb3I9eWVzCitmaQorCithY19leHQ9Y3BwCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCithcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KK2Fsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPQorY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD1ubworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0KK2hhcmRjb2RlX2RpcmVjdF9DWFg9bm8KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV9DWFg9bm8KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CitoYXJkY29kZV9taW51c19MX0NYWD1ubworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKK2hhcmRjb2RlX2F1dG9tYXRpY19DWFg9bm8KK2luaGVyaXRfcnBhdGhfQ1hYPW5vCittb2R1bGVfY21kc19DWFg9Cittb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPQorbGlua19hbGxfZGVwbGlic19DWFg9dW5rbm93bgorb2xkX2FyY2hpdmVfY21kc19DWFg9JG9sZF9hcmNoaXZlX2NtZHMKK3JlbG9hZF9mbGFnX0NYWD0kcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzX0NYWD0kcmVsb2FkX2NtZHMKK25vX3VuZGVmaW5lZF9mbGFnX0NYWD0KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPW5vCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWNwcAorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHRfQ1hYPSRvYmpleHQKKworIyBObyBzZW5zZSBpbiBydW5uaW5nIGFsbCB0aGVzZSB0ZXN0cyBpZiB3ZSBhbHJlYWR5IGRldGVybWluZWQgdGhhdAorIyB0aGUgQ1hYIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIjsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCisKKyAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKKyAgbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbihpbnQsIGNoYXIgKltdKSB7IHJldHVybigwKTsgfScKKworICAjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCisKKworCisKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworICAjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRSTSBjb25mdGVzdCoKKworICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCisKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgQ0ZMQUdTPSRDWFhGTEFHUworICBjb21waWxlcj0kQ0MKKyAgY29tcGlsZXJfQ1hYPSRDQworICBmb3IgY2NfdGVtcCBpbiAkY29tcGlsZXIiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1xcL11jb21waWxlIHwgY2NhY2hlIHwgKltcXC9dY2NhY2hlICkgOzsKKyAgICBkaXN0Y2MgfCAqW1xcL11kaXN0Y2MgfCBwdXJpZnkgfCAqW1xcL11wdXJpZnkgKSA7OworICAgIFwtKikgOzsKKyAgICAqKSBicmVhazs7CisgIGVzYWMKK2RvbmUKK2NjX2Jhc2VuYW1lPWAkRUNITyAiJGNjX3RlbXAiIHwgJFNFRCAicyUuKi8lJTsgcyVeJGhvc3RfYWxpYXMtJSUiYAorCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorICAgICMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKKyAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPScgLWZuby1idWlsdGluJworICAgIGVsc2UKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0KKyAgICBmaQorCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3Qgbm8gPSAiJHdpdGh2YWwiIHx8IHdpdGhfZ251X2xkPXllcworZWxzZQorICB3aXRoX2dudV9sZD1ubworZmkKKworYWNfcHJvZz1sZAoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAiID4mNjsgfQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyopCisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuLCB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbXFwvXSogfCA/OltcXC9dKikKKyAgICAgIHJlX2RpcmVsdD0nL1teL11bXi9dKi9cLlwuLycKKyAgICAgICMgQ2Fub25pY2FsaXplIHRoZSBwYXRobmFtZSBvZiBsZAorICAgICAgYWNfcHJvZz1gJEVDSE8gIiRhY19wcm9nInwgJFNFRCAncyVcXFxcJS8lZydgCisgICAgICB3aGlsZSAkRUNITyAiJGFjX3Byb2ciIHwgJEdSRVAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gJEVDSE8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSRhY19wcm9nCisgICAgICA7OworICAiIikKKyAgICAjIElmIGl0IGZhaWxzLCB0aGVuIHByZXRlbmQgd2UgYXJlbid0IHVzaW5nIEdDQy4KKyAgICBhY19wcm9nPWxkCisgICAgOzsKKyAgKikKKyAgICAjIElmIGl0IGlzIHJlbGF0aXZlLCB0aGVuIHNlYXJjaCBmb3IgdGhlIGZpcnN0IGxkIGluIFBBVEguCisgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgorICAgIDs7CisgIGVzYWMKK2VsaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBub24tR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBub24tR05VIGxkLi4uICIgPiY2OyB9CitmaQoraWYgJHtsdF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSRsdF9zYXZlX2lmcworICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyIgfHwgdGVzdCAtZiAiJGFjX2Rpci8kYWNfcHJvZyRhY19leGVleHQiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX0xEPSRhY19kaXIvJGFjX3Byb2cKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCBubyAhPSAiJHdpdGhfZ251X2xkIiAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgeWVzICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0kbHRfc2F2ZV9pZnMKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0kTEQgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCitmaQorZmkKKworTEQ9JGx0X2N2X3BhdGhfTEQKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQordGVzdCAteiAiJExEIiAmJiBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEgiICIkTElORU5PIiA1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfZ251X2xkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2dudV9sZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfZ251X2xkIiA+JjY7IH0KK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorCisKKworCisKKworCisgICAgICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKKyAgICAgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgJHBpY19mbGFnIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisKKyAgICAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICAgICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bworICAgICAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorICAgICAgICB3bGFyYz0nJHdsJworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIGVsc2UKKyAgICAgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9CisgICAgICAgIGZpCisgICAgICBlbHNlCisgICAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgICAgIHdsYXJjPQorCisgICAgICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisgICAgICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCisgICAgICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCisgICAgICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorICAgICAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgICBmaQorCisgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKyAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisgICAgZWxzZQorICAgICAgR1hYPW5vCisgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgd2xhcmM9CisgICAgZmkKKworICAgICMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgICBsZF9zaGxpYnNfQ1hYPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDMqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworICAgICAgYWl4WzQtOV0qKQorICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KKyAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICAgICAgZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKKyAgICAgICAgICBub19lbnRyeV9mbGFnPQorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXhbNS05XSopCisJICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICAgICAqLWJydGwqKQorCSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICAgIGJyZWFrCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JycKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD15ZXMKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCisgICAgICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICAgICAgICBmaWxlX2xpc3Rfc3BlY19DWFg9JyR3bC1mLCcKKworICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCRDQyAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYKKwkgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgICA6CisJICBlbHNlCisJICAgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD11bnN1cHBvcnRlZAorCSAgICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1MJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CisJICBmaQorICAgICAgICAgIGVzYWMKKyAgICAgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0kc2hhcmVkX2ZsYWcnICR3bC1HJworCSAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPSckd2wtRycKKwkgICAgZWxzZQorCSAgICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJworCSAgICBmaQorICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKKyAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoX19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorCisgIGx0X2FpeF9saWJwYXRoX3NlZD0nCisgICAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7CisJICAvXjAvIHsKKwkgICAgICBzL14wICAqXChbXiBdKlwpICokL1wxLworCSAgICAgIHAKKwkgIH0KKyAgICAgIH0nCisgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgICMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBpZiB0ZXN0IC16ICIkbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWCI7IHRoZW4KKyAgICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPS91c3IvbGliOi9saWIKKyAgZmkKKworZmkKKworICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWAorZmkKKworICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKworICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wnJG5vX2VudHJ5X2ZsYWcnICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAtbiAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbiBmdW5jX2VjaG9fYWxsICIkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyBlbHNlIDo7IGZpYCAkd2wnJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzJyAnJHNoYXJlZF9mbGFnCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ii16IG5vZGVmcyIKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorICAgICAgICAgIGVsc2UKKwkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgICAgaWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9haXhfbGlicGF0aCtzZXR9IjsgdGhlbgorICBhaXhfbGlicGF0aD0kbHRfY3ZfYWl4X2xpYnBhdGgKK2Vsc2UKKyAgaWYgJHtsdF9jdl9haXhfbGlicGF0aF9fQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jeHhfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICBsdF9haXhfbGlicGF0aF9zZWQ9JworICAgICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geworCSAgL14wLyB7CisJICAgICAgcy9eMCAgKlwoW14gXSpcKSAqJC9cMS8KKwkgICAgICBwCisJICB9CisgICAgICB9JworICBsdF9jdl9haXhfbGlicGF0aF9fQ1hYPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF9fQ1hYIjsgdGhlbgorICAgIGx0X2N2X2FpeF9saWJwYXRoX19DWFg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCisgIGZpCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgdGVzdCAteiAiJGx0X2N2X2FpeF9saWJwYXRoX19DWFgiOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfX0NYWD0vdXNyL2xpYjovbGliCisgIGZpCisKK2ZpCisKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoX19DWFgKK2ZpCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC1iZXJub3RvaycKKwkgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLWJlcm9rJworCSAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIGVsc2UKKwkgICAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyRjb252ZW5pZW5jZScKKwkgICAgZmkKKwkgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCSAgICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQKKwkgICAgIyBsaWJyYXJpZXMuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsLWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAkd2wtYkU6JGV4cG9ydF9zeW1ib2xzJGFsbG93X3VuZGVmaW5lZF9mbGFnfiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKworICAgICAgYmVvcyopCisJaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCisJICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWVsc2UKKwkgIGxkX3NobGlic19DWFg9bm8KKwlmaQorCTs7CisKKyAgICAgIGNob3J1cyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgKikKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgbGRfc2hsaWJzX0NYWD1ubworCSAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJY2FzZSAkR1hYLCRjY19iYXNlbmFtZSBpbgorCSxjbCogfCBubyxjbCopCisJICAjIE5hdGl2ZSBNU1ZDCisJICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisJICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyAnCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCisJICBmaWxlX2xpc3Rfc3BlY19DWFg9J0AnCisJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorCSAgbGliZXh0PWxpYgorCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJICBzaHJleHRfY21kcz0uZGxsCisJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0naWYgICB0ZXN0IERFRiA9ICJgJFNFRCAtbiAgICAgLWUgJ1wnJ3MvXlsJIF0qLy8nXCcnICAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoWwkgXS4qXCkqJC9ERUYvcCdcJycgICAgIC1lIHEgICAgICRleHBvcnRfc3ltYm9sc2AiIDsgdGhlbgorICAgICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOworICAgICAgICAgICAgICBlY2hvICIkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5kZWYiID4gIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwIjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKyAgICAgICAgICAgIGZpfgorICAgICAgICAgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgorICAgICAgICAgICAgbGlua25hbWVzPScKKwkgICMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkgICMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCBDWFgpPSd0cnVlJworCSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9eWVzCisJICAjIERvbid0IHVzZSByYW5saWIKKwkgIG9sZF9wb3N0aW5zdGFsbF9jbWRzX0NYWD0nY2htb2QgNjQ0ICRvbGRsaWInCisJICBwb3N0bGlua19jbWRzX0NYWD0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKyAgICAgICAgICAgIGNhc2UgJGx0X291dHB1dGZpbGUgaW4KKyAgICAgICAgICAgICAgKi5leGV8Ki5FWEUpIDs7CisgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgbHRfb3V0cHV0ZmlsZT0kbHRfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgICBsdF90b29sX291dHB1dGZpbGU9JGx0X3Rvb2xfb3V0cHV0ZmlsZS5leGUKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhY34KKyAgICAgICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkbHRfb3V0cHV0ZmlsZSJ+CisgICAgICAgICAgICBpZiB0ZXN0IDogIT0gIiRNQU5JRkVTVF9UT09MIiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KKyAgICAgICAgICAgICAgJE1BTklGRVNUX1RPT0wgLW1hbmlmZXN0ICIkbHRfdG9vbF9vdXRwdXRmaWxlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6IiRsdF90b29sX291dHB1dGZpbGUiIHx8IGV4aXQgMTsKKyAgICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisgICAgICAgICAgICBmaScKKwkgIDs7CisJKikKKwkgICMgZysrCisJICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKwkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9dW5zdXBwb3J0ZWQKKwkgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKwkgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcworCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSwgdXNlIGl0IGFzCisJICAgICMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZCBFWFBPUlRTLi4uCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiAgIHRlc3QgREVGID0gImAkU0VEIC1uICAgICAtZSAnXCcncy9eWwkgXSovLydcJycgICAgIC1lICdcJycvXlwoOy4qXCkqJC9kJ1wnJyAgICAgLWUgJ1wnJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJ1wnJyAgICAgLWUgcSAgICAgJGV4cG9ydF9zeW1ib2xzYCIgOyB0aGVuCisgICAgICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICBmaX4KKyAgICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJICBlbHNlCisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgIGZpCisJICA7OworCWVzYWMKKwk7OworICAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKworCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9eWVzCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPXVuc3VwcG9ydGVkCisgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR3bC1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworCisgIGVsc2UKKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JycKKyAgZmkKKyAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqfG5hZ2ZvciopIF9sdF9kYXJfY2FuX3NoYXJlZD15ZXMgOzsKKyAgICAgKikgX2x0X2Rhcl9jYW5fc2hhcmVkPSRHQ0MgOzsKKyAgZXNhYworICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBhcmNoaXZlX2NtZHNfQ1hYPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJF9sdF9kc3ltdXRpbCIKKyAgICBtb2R1bGVfY21kc19DWFg9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyRfbHRfZHN5bXV0aWwiCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9InNlZCAnc3xefF98JyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0ic2VkIC1lICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgICAgIGlmIHRlc3QgeWVzICE9ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJGxpYi1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGliLW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyRfbHRfZHN5bXV0aWwiCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kYXJfZXhwb3J0X3N5bXMkX2x0X2RzeW11dGlsIgorICAgIGZpCisKKyAgZWxzZQorICBsZF9zaGxpYnNfQ1hYPW5vCisgIGZpCisKKwk7OworCisgICAgICBkZ3V4KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBlYysrKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGZyZWVic2QyLiopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgbGRfc2hsaWJzX0NYWD15ZXMKKyAgICAgICAgOzsKKworICAgICAgaGFpa3UqKQorICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIGxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworICAgICAgICA7OworCisgICAgICBocHV4OSopCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wrYiAkd2wkbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisgICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1FJworICAgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworICAgICAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSAgICAgICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCSAgICAgICAgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgICAgICA7OworICAgICAgICAgIGFDQyopCisgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSA7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgICAgICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICJ4JG91dHB1dF9vYmpkaXIvJHNvbmFtZSIgPSAieCRsaWIiIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGhwdXgxMCp8aHB1eDExKikKKyAgICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsK2IgJHdsJGxpYmRpcicKKwkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworICAgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICAgICAgICBocHBhKjY0KnxpYTY0KikKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICopCisJICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHdsLUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworICAgICAgICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGVfQ1hYPXllcworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICA7OworCSAgICAgIGlhNjQqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICAqKQorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKyAgICAgICAgICAqKQorCSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgICAgICAgaHBwYSo2NCopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICAqKQorCSAgICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgIGVzYWMKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICAgIGludGVyaXhbMy05XSopCisJaGFyZGNvZGVfZGlyZWN0X0NYWD1ubworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1FJworCSMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKwkjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisJIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorCSMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKwkjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisJIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisJYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgInN8XnxffCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCTs7CisgICAgICBpcml4NSogfCBpcml4NiopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFNHSSBDKysKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgIGlmIHRlc3QgeWVzID0gIiRHWFgiOyB0aGVuCisJICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICBlbHNlCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKyAgICAgICAgaW5oZXJpdF9ycGF0aF9DWFg9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKworCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoLCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIDs7CisgICAgICAgICAgcGdDQyogfCBwZ2NwcCopCisgICAgICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCSAgICBjYXNlIGAkQ0MgLVZgIGluCisJICAgICpwZ0NDXCBbMS01XS4qIHwgKnBnY3BwXCBbMS01XS4qKQorCSAgICAgIHByZWxpbmtfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KKyAgICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisJICAgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKyAgICAgICAgICAgICAgICAkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKyAgICAgICAgICAgICAgICAkUkFOTElCICRvbGRsaWInCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKyAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgorICAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgICRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgorICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgICopICMgVmVyc2lvbiA2IGFuZCBhYm92ZSB1c2Ugd2VhayBzeW1ib2xzCisJICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgOzsKKwkgICAgZXNhYworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtLXJwYXRoICR3bCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisJICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisKKwkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICMKKwkgICAgIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJICAgICMgZGVwZW5kZW5jaWVzLgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgIHhsKiB8IG1waXhsKiB8IGJneGwqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLXJwYXRoICR3bCRsaWJkaXInCisJICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCisJICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyI7IHRoZW4KKwkgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICAgJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtdmVyc2lvbi1zY3JpcHQgJHdsJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICAgIGZpCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJworCSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHdsLS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJworCSAgICAgIGNvbXBpbGVyX25lZWRzX29iamVjdF9DWFg9eWVzCisKKwkgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCisJICAgICAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQorCSAgICAgICMgd291bGQgYmUgYmV0dGVyLgorCSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisKKyAgICAgIGx5bnhvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworCisgICAgICBtODhrKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKwk7OworCisgICAgICBtdnMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGN4eCopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisJICAqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBuZXRic2QqKQorICAgICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCisJICB3bGFyYz0KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCisJICBoYXJkY29kZV9kaXJlY3RfQ1hYPXllcworCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwlmaQorCSMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisJOzsKKworICAgICAgKm50byogfCAqcW54KikKKyAgICAgICAgbGRfc2hsaWJzX0NYWD15ZXMKKwk7OworCisgICAgICBvcGVuYnNkKiB8IGJpdHJpZyopCisJaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKwkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCSAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD15ZXMKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiOyB0aGVuCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPSckd2wtRScKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCisJICBmaQorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorCWVsc2UKKwkgIGxkX3NobGlic19DWFg9bm8KKwlmaQorCTs7CisKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIGFyY2hpdmVfY21kc19DWFg9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW14oKTAtOUEtWmEtent9XVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCQk7OworCSAgICAgICopCisJICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgorICAgICAgICAgICAgICAgICAgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHdsLWlucHV0ICR3bCRsaWIuZXhwICBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKyAgICAgICAgICAgICAgICAgICRSTSAkbGliLmV4cCcKKwkgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKKwkJOzsKKwkgICAgZXNhYworCisJICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiIHwgJEdSRVAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZnVuY19lY2hvX2FsbCAiJHRlbXBsaXN0IiB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IDsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR3bC1leHBlY3RfdW5yZXNvbHZlZCAkd2xcKicKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgICBvc2YzKikKKwkgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJCSAgOzsKKwkgICAgICAgICopCisJICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgIGVzYWMKKworCSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgcHNvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgIDs7CisKKyAgICAgIHN1bm9zNCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgbGRfc2hsaWJzX0NYWD1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgc29sYXJpcyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nIC16ZGVmcycKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1NICR3bCRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKwkgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKwkgICAgICAqKQorCQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAorCQkjIGJ1dCB1bmRlcnN0YW5kcyAnLXogbGlua2VyX2ZsYWcnLgorCSAgICAgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKworCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkgICAgIyAiQ0MgLXhhciIsIHdoZXJlICJDQyIgaXMgdGhlIFN1biBDKysgY29tcGlsZXIuICBUaGlzIGlzCisJICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAjIGluIHRoZSBhcmNoaXZlLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC14YXIgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwkgICAgOzsKKyAgICAgICAgICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgorCSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKKwkgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdYWCwkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHdsLXogJHt3bH1kZWZzJworCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkd2wtTSAkd2wkbGliLmV4cCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBlbHNlCisJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlICctRycgTk9UICctc2hhcmVkJyBvbiB0aGlzCisJICAgICAgICAjIHBsYXRmb3JtLgorCSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKyAgICAgICAgICAgICAgICAgICRDQyAtRyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHdsLVIgJHdsJGxpYmRpcicKKwkgICAgICBjYXNlICRob3N0X29zIGluCisJCXNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKwkJKikKKwkJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR3bC16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAkd2wteiAke3dsfWRlZmF1bHRleHRyYWN0JworCQkgIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuWzAyNF0qKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPSckd2wteix0ZXh0JworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBDQyopCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisJIyBOb3RlOiBXZSBDQU5OT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKwkjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKwkjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisJIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisJIyBhcyAteiBkZWZzLgorCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHdsLXosdGV4dCcKKwlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR3bC16LG5vZGVmcycKKwlhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSckd2wtUiwkbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPSc6JworCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR3bC1CZXhwb3J0JworCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkb2xkb2Jqc34KKyAgICAgICAgICAgICAgJyIkb2xkX2FyY2hpdmVfY21kc19DWFgiCisJICAgIHJlbG9hZF9jbWRzX0NYWD0nJENDIC1UcHJlbGlua19vYmplY3RzICRyZWxvYWRfb2Jqc34KKyAgICAgICAgICAgICAgJyIkcmVsb2FkX2NtZHNfQ1hYIgorCSAgICA7OworCSAgKikKKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICA7OworCWVzYWMKKyAgICAgIDs7CisKKyAgICAgIHRhbmRlbSopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBsZF9zaGxpYnNfQ1hYPW5vCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIGxkX3NobGlic19DWFg9bm8KKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgICB2eHdvcmtzKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQorJGFzX2VjaG8gIiRsZF9zaGxpYnNfQ1hYIiA+JjY7IH0KKyAgICB0ZXN0IG5vID0gIiRsZF9zaGxpYnNfQ1hYIiAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyAgICBHQ0NfQ1hYPSRHWFgKKyAgICBMRF9DWFg9JExECisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICAjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorcHJlZGVwX29iamVjdHNfQ1hYPQorcG9zdGRlcF9vYmplY3RzX0NYWD0KK3ByZWRlcHNfQ1hYPQorcG9zdGRlcHNfQ1hYPQorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0KKworY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK2NsYXNzIEZvbworeworcHVibGljOgorICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KK3ByaXZhdGU6CisgIGludCBhOworfTsKK19MVF9FT0YKKworCitfbHRfbGliZGVwc19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitjYXNlICIkQ0MgJENGTEFHUyAiIGluICMoCisqXCAtZmx0bypcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLWx0byIgOzsKKypcIC1md2hvcHIqXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby13aG9wciIgOzsKKypcIC1mdXNlLWxpbmtlci1wbHVnaW4qXCAqKSBDRkxBR1M9IiRDRkxBR1MgLWZuby11c2UtbGlua2VyLXBsdWdpbiIgOzsKK2VzYWMKKworaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbgorICAjIFBhcnNlIHRoZSBjb21waWxlciBvdXRwdXQgYW5kIGV4dHJhY3QgdGhlIG5lY2Vzc2FyeQorICAjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KKworICAjIFNlbnRpbmVsIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB3aGV0aGVyIG9yIG5vdCB3ZSBhcmUgYmVmb3JlCisgICMgdGhlIGNvbmZ0ZXN0IG9iamVjdCBmaWxlLgorICBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPW5vCisKKyAgZm9yIHAgaW4gYGV2YWwgIiRvdXRwdXRfdmVyYm9zZV9saW5rX2NtZCJgOyBkbworICAgIGNhc2UgJHByZXYkcCBpbgorCisgICAgLUwqIHwgLVIqIHwgLWwqKQorICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCisgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgorICAgICAgIGlmIHRlc3QgeC1MID0gIiRwIiB8fAorICAgICAgICAgIHRlc3QgeC1SID0gIiRwIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisgICAgICAgICBjYXNlICRwIGluCisgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICBlc2FjCisgICAgICAgZmkKKyAgICAgICBjYXNlICRwIGluCisgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICBlc2FjCisgICAgICAgaWYgdGVzdCBubyA9ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSI7IHRoZW4KKwkgY2FzZSAkcHJldiBpbgorCSAtTCB8IC1SKQorCSAgICMgSW50ZXJuYWwgY29tcGlsZXIgbGlicmFyeSBwYXRocyBzaG91bGQgY29tZSBhZnRlciB0aG9zZQorCSAgICMgcHJvdmlkZWQgdGhlIHVzZXIuICBUaGUgcG9zdGRlcHMgYWxyZWFkeSBjb21lIGFmdGVyIHRoZQorCSAgICMgdXNlciBzdXBwbGllZCBsaWJzIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8gcHJvY2VzcyB0aGVtLgorCSAgIGlmIHRlc3QgLXogIiRjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIjsgdGhlbgorCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0kcHJldiRwCisJICAgZWxzZQorCSAgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0iJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSAkcHJldiRwIgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRwb3N0ZGVwc19DWFgiOyB0aGVuCisJICAgcG9zdGRlcHNfQ1hYPSRwcmV2JHAKKwkgZWxzZQorCSAgIHBvc3RkZXBzX0NYWD0iJHtwb3N0ZGVwc19DWFh9ICRwcmV2JHAiCisJIGZpCisgICAgICAgZmkKKyAgICAgICBwcmV2PQorICAgICAgIDs7CisKKyAgICAqLmx0by4kb2JqZXh0KSA7OyAjIElnbm9yZSBHQ0MgTFRPIG9iamVjdHMKKyAgICAqLiRvYmpleHQpCisgICAgICAgIyBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgdGVzdCBvYmplY3QgZmlsZSBvbmx5IHNob3dzIHVwCisgICAgICAgIyBvbmNlIGluIHRoZSBjb21waWxlciBvdXRwdXQuCisgICAgICAgaWYgdGVzdCAiJHAiID0gImNvbmZ0ZXN0LiRvYmpleHQiOyB0aGVuCisJIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9eWVzCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCisJIGlmIHRlc3QgLXogIiRwcmVkZXBfb2JqZWN0c19DWFgiOyB0aGVuCisJICAgcHJlZGVwX29iamVjdHNfQ1hYPSRwCisJIGVsc2UKKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSRwCisJIGVsc2UKKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcG9zdGRlcF9vYmplY3RzX0NYWCAkcCIKKwkgZmkKKyAgICAgICBmaQorICAgICAgIDs7CisKKyAgICAqKSA7OyAjIElnbm9yZSB0aGUgcmVzdC4KKworICAgIGVzYWMKKyAgZG9uZQorCisgICMgQ2xlYW4gdXAuCisgIHJtIC1mIGEub3V0IGEuZXhlCitlbHNlCisgIGVjaG8gImxpYnRvb2wubTQ6IGVycm9yOiBwcm9ibGVtIGNvbXBpbGluZyBDWFggdGVzdCBwcm9ncmFtIgorZmkKKworJFJNIC1mIGNvbmZlc3QuJG9iamV4dAorQ0ZMQUdTPSRfbHRfbGliZGVwc19zYXZlX0NGTEFHUworCisjIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgorY2FzZSAkaG9zdF9vcyBpbgoraW50ZXJpeFszLTldKikKKyAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgorICBwcmVkZXBfb2JqZWN0c19DWFg9CisgIHBvc3RkZXBfb2JqZWN0c19DWFg9CisgIHBvc3RkZXBzX0NYWD0KKyAgOzsKKworbGludXgqKQorICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgKlN1blwgQyopCisgICAgIyBTdW4gQysrIDUuOQorCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgeWVzICE9ICIkc29sYXJpc191c2Vfc3RscG9ydDQiOyB0aGVuCisgICAgICBwb3N0ZGVwc19DWFg9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKKyAgICBmaQorICAgIDs7CisgIGVzYWMKKyAgOzsKKworc29sYXJpcyopCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIENDKiB8IHN1bkNDKikKKyAgICAjIFRoZSBtb3JlIHN0YW5kYXJkcy1jb25mb3JtaW5nIHN0bHBvcnQ0IGxpYnJhcnkgaXMKKyAgICAjIGluY29tcGF0aWJsZSB3aXRoIHRoZSBDc3RkIGxpYnJhcnkuIEF2b2lkIHNwZWNpZnlpbmcKKyAgICAjIGl0IGlmIGl0J3MgaW4gQ1hYRkxBR1MuIElnbm9yZSBsaWJDcnVuIGFzCisgICAgIyAtbGlicmFyeT1zdGxwb3J0NCBkZXBlbmRzIG9uIGl0LgorICAgIGNhc2UgIiAkQ1hYICRDWFhGTEFHUyAiIGluCisgICAgKiIgLWxpYnJhcnk9c3RscG9ydDQgIiopCisgICAgICBzb2xhcmlzX3VzZV9zdGxwb3J0ND15ZXMKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBpZiB0ZXN0IHllcyAhPSAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IjsgdGhlbgorICAgICAgcG9zdGRlcHNfQ1hYPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCisgICAgZmkKKyAgICA7OworICBlc2FjCisgIDs7Citlc2FjCisKKworY2FzZSAiICRwb3N0ZGVwc19DWFggIiBpbgorKiIgLWxjICIqKSBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8gOzsKK2VzYWMKKyBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPQoraWYgdGVzdCAtbiAiJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSI7IHRoZW4KKyBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPWBlY2hvICIgJHtjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYfSIgfCAkU0VEIC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPQorbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorCisKKyAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgorICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgJy1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSAnLW02ODA0MCcuCisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgICA7OworICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KKyAgICAgIDs7CisgICAgaW50ZXJpeFszLTldKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbNC05XSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwllbHNlCisJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsIENYWCk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKKwkgIDs7CisJZXNhYworCTs7CisgICAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqIHwgY2VnY2MqKQorCSMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKwkjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworCTs7CisgICAgICBkZ3V4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZWMrKyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIDs7CisJICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKwkjIEZyZWVCU0QgdXNlcyBHTlUgQysrCisJOzsKKyAgICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR3bC1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR3bC1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgICMgS0FJIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCisJICAgIDs7CisJICBlY3BjKiApCisJICAgICMgb2xkIEludGVsIEMrKyBmb3IgeDg2XzY0LCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZwaWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqIHwgYmd4bFtjQ10qIHwgbXBpeGxbY0NdKikKKwkgICAgIyBJQk0gWEwgOC4wLCA5LjAgb24gUFBDIGFuZCBCbHVlR2VuZQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcXBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctcXN0YXRpY2xpbmsnCisJICAgIDs7CisJICAqKQorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkgICAgKlN1blwgQyopCisJICAgICAgIyBTdW4gQysrIDUuOQorCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVFvcHRpb24gbGQgJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGx5bnhvcyopCisJOzsKKyAgICAgIG04OGsqKQorCTs7CisgICAgICBtdnMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBjeHgqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1XIGMsZXhwb3J0YWxsJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIG5ldGJzZCopCisJOzsKKyAgICAgICpxbngqIHwgKm50byopCisgICAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZlBJQyAtc2hhcmVkJworICAgICAgICA7OworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCisJICAgIDs7CisJICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBwc29zKikKKwk7OworICAgICAgc29sYXJpcyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKiB8IHN1bkNDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVFvcHRpb24gbGQgJworCSAgICA7OworCSAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN1bm9zNCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1Cc3RhdGljJworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdGFuZGVtKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgTkNDKikKKwkgICAgIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdnh3b3JrcyopCisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubworCTs7CisgICAgZXNhYworICBmaQorCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6CisgICpkamdwcCopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorICAgIDs7CisgICopCisgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgorICAgIDs7Citlc2FjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfQ1hYPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2OyB9CitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX0NYWAorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD1ubworICAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiICAjIyBleGNsdWRlIGZyb20gc2NfdXNlbGVzc19xdW90ZXNfaW5fYXNzaWdubWVudAorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjY7IH0KKworaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCI7IHRoZW4KKyAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA7OworICAgICBlc2FjCitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCitmaQorCitmaQorCisKKworCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK3dsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFhcIgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9bm8KKyAgIHNhdmVfTERGTEFHUz0kTERGTEFHUworICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCisgICAgIGZpCisgICBmaQorICAgJFJNIC1yIGNvbmZ0ZXN0KgorICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY2OyB9CisKK2lmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiOyB0aGVuCisgICAgOgorZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KK2ZpCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjY7IH0KKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFg9bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiY1CisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjY7IH0KKworCisKKworaGFyZF9saW5rcz1ub3R0ZXN0ZWQKK2lmIHRlc3Qgbm8gPSAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCIgJiYgdGVzdCBubyAhPSAiJG5lZWRfbG9ja3MiOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KKyAgaGFyZF9saW5rcz15ZXMKKyAgJFJNIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKKyRhc19lY2hvICIkaGFyZF9saW5rcyIgPiY2OyB9CisgIGlmIHRlc3Qgbm8gPSAiJGhhcmRfbGlua3MiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAnJENDJyBkb2VzIG5vdCBzdXBwb3J0ICctYyAtbycsIHNvICdtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICckQ0MnIGRvZXMgbm90IHN1cHBvcnQgJy1jIC1vJywgc28gJ21ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisKKyAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgZXhjbHVkZV9leHBzeW1zX0NYWD0nX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJworICBjYXNlICRob3N0X29zIGluCisgIGFpeFs0LTldKikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisgICAgIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQKKyAgICAjIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoc3Vic3RyKFwkIDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkIDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisgICAgZWxzZQorICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGZpCisgICAgOzsKKyAgcHczMiopCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JGx0ZGxsX2NtZHMKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgY2wqKQorICAgICAgZXhjbHVkZV9leHBzeW1zX0NYWD0nX05VTExfSU1QT1JUX0RFU0NSSVBUT1J8X0lNUE9SVF9ERVNDUklQVE9SXy4qJworICAgICAgOzsKKyAgICAqKQorICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIGV4Y2x1ZGVfZXhwc3ltc19DWFg9J1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZScKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICopCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICA7OworICBlc2FjCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlic19DWFgiID4mNjsgfQordGVzdCBubyA9ICIkbGRfc2hsaWJzX0NYWCIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit3aXRoX2dudV9sZF9DWFg9JHdpdGhfZ251X2xkCisKKworCisKKworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisKKyAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0NYWCBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAkUk0gY29uZnRlc3QqCisJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKwlpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCisJICBzb25hbWU9Y29uZnRlc3QKKwkgIGxpYj1jb25mdGVzdAorCSAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0CisJICBkZXBsaWJzPQorCSAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCisJICBwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPQorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCSAgdGhlbgorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KKwkgIGVsc2UKKwkgICAgbHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcworCSAgZmkKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorCWZpCisJJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNjsgfQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gIiA+JjY7IH0KKworbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9LnNvCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgOzsKKworYWl4WzQtOV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lICcjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gJy4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICRDQyAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2Fubm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UuYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgcG93ZXJwYykKKyAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCisgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICA7OworICBtNjhrKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbNDVdKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9LmRsbAorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRjY19iYXNlbmFtZSBpbgorICB5ZXMsKikKKyAgICAjIGdjYworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisKKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY2VnY2MqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICRsaWJuYW1lIHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JworICAgICAgOzsKKyAgICBlc2FjCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgICA7OworCisgICosY2wqKQorICAgICMgTmF0aXZlIE1TVkMKKyAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bLl0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwubGliJworCisgICAgY2FzZSAkYnVpbGRfb3MgaW4KKyAgICBtaW5ndyopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9CisgICAgICBsdF9zYXZlX2lmcz0kSUZTCisgICAgICBJRlM9JzsnCisgICAgICBmb3IgbHRfcGF0aCBpbiAkTElCCisgICAgICBkbworICAgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAgICMgTGV0IERPUyB2YXJpYWJsZSBleHBhbnNpb24gcHJpbnQgdGhlIHNob3J0IDguMyBzdHlsZSBmaWxlIG5hbWUuCisgICAgICAgIGx0X3BhdGg9YGNkICIkbHRfcGF0aCIgMj4vZGV2L251bGwgJiYgY21kIC8vQyAiZm9yICVpIGluICgiLiIpIGRvIEBlY2hvICV+c2kiYAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgJGx0X3BhdGgiCisgICAgICBkb25lCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCisgICAgICAjIENvbnZlcnQgdG8gTVNZUyBzdHlsZS4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgc2VkIC1lICdzfFxcXFx8L3xnJyAtZSAnc3wgXFwoW2EtekEtWl1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JExJQgorICAgICAgaWYgJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICAjIEZJWE1FOiBmaW5kIHRoZSBzaG9ydCBuYW1lIG9yIHRoZSBwYXRoIGNvbXBvbmVudHMsIGFzIHNwYWNlcyBhcmUKKyAgICAgICMgY29tbW9uLiAoZS5nLiAiUHJvZ3JhbSBGaWxlcyIgLT4gIlBST0dSQX4xIikKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCRmaWxlYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCRiYXNlX2ZpbGUnXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJFJNIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGluay5leGUnCisgICAgOzsKKworICAqKQorICAgICMgQXNzdW1lIE1TVkMgd3JhcHBlcgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0ICRsaWJuYW1lLmxpYicKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisgIGVzYWMKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRtYWpvciRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzIzXS4qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyLiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCisgIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgICopICMgZnJvbSA0LjYgb24sIGFuZCBEcmFnb25GbHkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworaGFpa3UqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIHJ1bnRpbWVfbG9hZGVyIgorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBpZiB0ZXN0IDMyID0gIiRIUFVYX0lBNjRfTU9ERSI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUsIC4uLgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgIyBvciBmYWlscyBvdXRyaWdodCwgc28gb3ZlcnJpZGUgYXRvbWljYWxseToKKyAgaW5zdGFsbF9vdmVycmlkZV9tb2RlPTU1NQorICA7OworCitpbnRlcml4WzMtOV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYgL3Vzci9sb2NhbC9saWIkbGlic3VmZiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJGxpYnN1ZmYgL2xpYiRsaWJzdWZmIgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2xpbnV4KmFuZHJvaWQqKQorICB2ZXJzaW9uX3R5cGU9bm9uZSAjIEFuZHJvaWQgZG9lc24ndCBzdXBwb3J0IHZlcnNpb25lZCBsaWJyYXJpZXMuCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQnCisgIGZpbmlzaF9jbWRzPQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgZHluYW1pY19saW5rZXI9J0FuZHJvaWQgbGlua2VyJworICAjIERvbid0IGVtYmVkIC1ycGF0aCBkaXJlY3RvcmllcyBzaW5jZSB0aGUgbGlua2VyIGRvZXNuJ3Qgc3VwcG9ydCB0aGVtLgorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworICA7OworCisjIFRoaXMgbXVzdCBiZSBnbGliYy9FTEYuCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgaWYgJHtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYXCI7IFwKKwkgTERGTEFHUz1cIlwkTERGTEFHUyAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFhcIiIKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2N4eF90cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBpZiAgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsOyB0aGVuIDoKKyAgbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIExERkxBR1M9JHNhdmVfTERGTEFHUworICAgIGxpYmRpcj0kc2F2ZV9saWJkaXIKKworZmkKKworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JGx0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKKyAgZmkKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK25ld3NvczYpCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKKyAgOzsKKworb3BlbmJzZCogfCBiaXRyaWcqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9L3Vzci9saWIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIG5lZWRfdmVyc2lvbj1ubworICBlbHNlCisgICAgbmVlZF92ZXJzaW9uPXllcworICBmaQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9LmRsbAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICA7OworCityZG9zKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAjIGxkZCBjb21wbGFpbnMgdW5sZXNzIGxpYnJhcmllcyBhcmUgZXhlY3V0YWJsZQorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCAreCAkbGliJworICA7OworCitzdW5vczQqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQkdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCB5ZXMgPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc2NvMy4ydjUqKQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL2xpYiIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJworICA7OworCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorJGFzX2VjaG8gIiRkeW5hbWljX2xpbmtlciIgPiY2OyB9Cit0ZXN0IG5vID0gIiRkeW5hbWljX2xpbmtlciIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCitmaQoraWYgdGVzdCBzZXQgPSAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CitoYXJkY29kZV9hY3Rpb25fQ1hYPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8fAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0NYWCIgfHwKKyAgIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIjsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCBubyAhPSAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIENYWCkiICYmCisgICAgIHRlc3Qgbm8gIT0gIiRoYXJkY29kZV9taW51c19MX0NYWCI7IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIGhhcmRjb2RlX2FjdGlvbl9DWFg9dW5zdXBwb3J0ZWQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNQorJGFzX2VjaG8gIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiA+JjY7IH0KKworaWYgdGVzdCByZWxpbmsgPSAiJGhhcmRjb2RlX2FjdGlvbl9DWFgiIHx8CisgICB0ZXN0IHllcyA9ICIkaW5oZXJpdF9ycGF0aF9DWFgiOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IHN1cHBvcnRlZAorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCitlbGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHx8CisgICAgIHRlc3Qgbm8gPSAiJGVuYWJsZV9zaGFyZWQiOyB0aGVuCisgICMgRmFzdCBpbnN0YWxsYXRpb24gaXMgbm90IG5lY2Vzc2FyeQorICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCitmaQorCisKKworCisKKworCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKIAogCiAKQEAgLTEyODExLDcgKzE2Njc0LDcgQEAKIAogCiAgICAgIGNwdXR5cGU9YCgoKGdyZXAgY3B1IC9wcm9jL2NwdWluZm8gfCBjdXQgLWQ6IC1mMikgOyAoJFBSVERJQUcgLXYgfGdyZXAgLWkgc3BhcmMpIDsgZ3JlcCAtaSBjcHUgL3Zhci9ydW4vZG1lc2cuYm9vdCApIHwgaGVhZCAtbiAxKSAyPiAvZGV2L251bGxgCi0gICAgIGNwdXR5cGU9YGVjaG8gIiRjcHV0eXBlIiB8IHRyIC1kICcgLScgfHRyICRhc19jcl9MRVRURVJTICRhc19jcl9sZXR0ZXJzYAorICAgICBjcHV0eXBlPWBlY2hvICIkY3B1dHlwZSIgfCB0ciAtZCAnIC0nIHwgc2VkICdzL1NQQVJDSUlpL1NQQVJDSUkvJyB8IHRyICRhc19jcl9MRVRURVJTICRhc19jcl9sZXR0ZXJzYAogICAgICBjYXNlICRjcHV0eXBlIGluCiAgICAgICAgICAqdWx0cmFzcGFyY2l2KikgYXhfZ2NjX2FyY2g9InVsdHJhc3BhcmM0IHVsdHJhc3BhcmMzIHVsdHJhc3BhcmMgdjkiIDs7CiAgICAgICAgICAqdWx0cmFzcGFyY2lpaSopIGF4X2djY19hcmNoPSJ1bHRyYXNwYXJjMyB1bHRyYXNwYXJjIHY5IiA7OwpAQCAtMTMwODIsMTMgKzE2OTQ1LDEzIEBACiAKIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgogICBDRkxBR1M9IiRDRkxBR1MgLWZleGNlcHRpb25zIgotICB0b3VjaCBsb2NhbC5leHAKLWVsc2UKLSAgY2F0ID4gbG9jYWwuZXhwIDw8RU9GCi1zZXQgQ0NfRk9SX1RBUkdFVCAiJENDIgotRU9GCiBmaQogCitjYXQgPiBsb2NhbC5leHAgPDxFT0YKK3NldCBDQ19GT1JfVEFSR0VUICIkQ0MiCitzZXQgQ1hYX0ZPUl9UQVJHRVQgIiRDWFgiCitFT0YKKwogCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzLi4uICIgPiY2OyB9CkBAIC0xMzI4OCw2ICsxNzE1MSw3IEBACiAKIAogVEFSR0VURElSPSJ1bmtub3duIgorSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UPTAKIGNhc2UgIiRob3N0IiBpbgogICBhYXJjaDY0Ki0qLSopCiAJVEFSR0VUPUFBUkNINjQ7IFRBUkdFVERJUj1hYXJjaDY0CkBAIC0xMzI5OSw2ICsxNzE2MywxMCBAQAogCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19MT05HX0RPVUJMRV8xMjhfXyknCiAJOzsKIAorICBhcmMqLSotKikKKwlUQVJHRVQ9QVJDOyBUQVJHRVRESVI9YXJjCisJOzsKKwogICBhcm0qLSotKikKIAlUQVJHRVQ9QVJNOyBUQVJHRVRESVI9YXJtCiAJOzsKQEAgLTEzNDE3LDYgKzE3Mjg1LDEwIEBACiAJVEFSR0VUPU02OEs7IFRBUkdFVERJUj1tNjhrCiAJOzsKIAorICBtODhrLSotKikKKwlUQVJHRVQ9TTg4SzsgVEFSR0VURElSPW04OGsKKwk7OworCiAgIG1pY3JvYmxhemUqLSotKikKIAlUQVJHRVQ9TUlDUk9CTEFaRTsgVEFSR0VURElSPW1pY3JvYmxhemUKIAk7OwpAQCAtMTM0MzIsMTQgKzE3MzA0LDE5IEBACiAgIG1pcHMtc2dpLWlyaXg1LiogfCBtaXBzLXNnaS1pcml4Ni4qIHwgbWlwcyotKi1ydGVtcyopCiAJVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKIAk7OwotICBtaXBzKi0qLWxpbnV4KiB8IG1pcHMqLSotb3BlbmJzZCopCisgIG1pcHMqLSpsaW51eCogfCBtaXBzKi0qLW9wZW5ic2QqKQogCSMgU3VwcG9ydCAxMjgtYml0IGxvbmcgZG91YmxlIGZvciBOZXdBQkkuCiAJSEFWRV9MT05HX0RPVUJMRT0nZGVmaW5lZChfX21pcHM2NCknCi0JVEFSR0VUPU1JUFNfSVJJWDsgVEFSR0VURElSPW1pcHMKKwlUQVJHRVQ9TUlQU19MSU5VWDsgVEFSR0VURElSPW1pcHMKKwk7OworCisgIG5pb3MyKi1saW51eCopCisJVEFSR0VUPU5JT1MyOyBUQVJHRVRESVI9bmlvczIKIAk7OwogCiAgIHBvd2VycGMqLSotbGludXgqIHwgcG93ZXJwYy0qLXN5c3YqKQogCVRBUkdFVD1QT1dFUlBDOyBUQVJHRVRESVI9cG93ZXJwYworCUhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVD0xCiAJOzsKICAgcG93ZXJwYy0qLWFtaWdhb3MqKQogCVRBUkdFVD1QT1dFUlBDOyBUQVJHRVRESVI9cG93ZXJwYwpAQCAtMTM0NTUsNiArMTczMzIsNyBAQAogCTs7CiAgIHBvd2VycGMtKi1mcmVlYnNkKiB8IHBvd2VycGMtKi1vcGVuYnNkKikKIAlUQVJHRVQ9UE9XRVJQQ19GUkVFQlNEOyBUQVJHRVRESVI9cG93ZXJwYworCUhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVD0xCiAJOzsKICAgcG93ZXJwYzY0LSotZnJlZWJzZCopCiAJVEFSR0VUPVBPV0VSUEM7IFRBUkdFVERJUj1wb3dlcnBjCkBAIC0xMzQ4Miw2ICsxNzM2MCwxMCBAQAogICAgICAgICBUQVJHRVQ9VElMRTsgVEFSR0VURElSPXRpbGUKICAgICAgICAgOzsKIAorICB2YXgtKi0qKQorCVRBUkdFVD1WQVg7IFRBUkdFVERJUj12YXgKKwk7OworCiAgIHh0ZW5zYSotKikKIAlUQVJHRVQ9WFRFTlNBOyBUQVJHRVRESVI9eHRlbnNhCiAJOzsKQEAgLTEzNTU5LDYgKzE3NDQxLDIyIEBACiAgIFg4Nl9EQVJXSU5fRkFMU0U9CiBmaQogCisgaWYgdGVzdCB4JFRBUkdFVCA9IHhYODZfREFSV0lOICYmIHRlc3QgJGFjX2N2X3NpemVvZl9zaXplX3QgPSA0OyB0aGVuCisgIFg4Nl9EQVJXSU4zMl9UUlVFPQorICBYODZfREFSV0lOMzJfRkFMU0U9JyMnCitlbHNlCisgIFg4Nl9EQVJXSU4zMl9UUlVFPScjJworICBYODZfREFSV0lOMzJfRkFMU0U9CitmaQorCisgaWYgdGVzdCB4JFRBUkdFVCA9IHhYODZfREFSV0lOICYmIHRlc3QgJGFjX2N2X3NpemVvZl9zaXplX3QgPSA4OyB0aGVuCisgIFg4Nl9EQVJXSU42NF9UUlVFPQorICBYODZfREFSV0lONjRfRkFMU0U9JyMnCitlbHNlCisgIFg4Nl9EQVJXSU42NF9UUlVFPScjJworICBYODZfREFSV0lONjRfRkFMU0U9CitmaQorCiAgaWYgdGVzdCB4JFRBUkdFVCA9IHhBTFBIQTsgdGhlbgogICBBTFBIQV9UUlVFPQogICBBTFBIQV9GQUxTRT0nIycKQEAgLTEzNTkxLDYgKzE3NDg5LDE0IEBACiAgIE02OEtfRkFMU0U9CiBmaQogCisgaWYgdGVzdCB4JFRBUkdFVCA9IHhNODhLOyB0aGVuCisgIE04OEtfVFJVRT0KKyAgTTg4S19GQUxTRT0nIycKK2Vsc2UKKyAgTTg4S19UUlVFPScjJworICBNODhLX0ZBTFNFPQorZmkKKwogIGlmIHRlc3QgeCRUQVJHRVQgPSB4TUlDUk9CTEFaRTsgdGhlbgogICBNSUNST0JMQVpFX1RSVUU9CiAgIE1JQ1JPQkxBWkVfRkFMU0U9JyMnCkBAIC0xMzYxNSw2ICsxNzUyMSwxNCBAQAogICBNT1hJRV9GQUxTRT0KIGZpCiAKKyBpZiB0ZXN0IHgkVEFSR0VUID0geE5JT1MyOyB0aGVuCisgIE5JT1MyX1RSVUU9CisgIE5JT1MyX0ZBTFNFPScjJworZWxzZQorICBOSU9TMl9UUlVFPScjJworICBOSU9TMl9GQUxTRT0KK2ZpCisKICBpZiB0ZXN0IHgkVEFSR0VUID0geFBPV0VSUEM7IHRoZW4KICAgUE9XRVJQQ19UUlVFPQogICBQT1dFUlBDX0ZBTFNFPScjJwpAQCAtMTM2NTUsNiArMTc1NjksMTQgQEAKICAgQUFSQ0g2NF9GQUxTRT0KIGZpCiAKKyBpZiB0ZXN0IHgkVEFSR0VUID0geEFSQzsgdGhlbgorICBBUkNfVFJVRT0KKyAgQVJDX0ZBTFNFPScjJworZWxzZQorICBBUkNfVFJVRT0nIycKKyAgQVJDX0ZBTFNFPQorZmkKKwogIGlmIHRlc3QgeCRUQVJHRVQgPSB4QVJNOyB0aGVuCiAgIEFSTV9UUlVFPQogICBBUk1fRkFMU0U9JyMnCkBAIC0xMzc1MSw2ICsxNzY3MywxNCBAQAogICBUSUxFX0ZBTFNFPQogZmkKIAorIGlmIHRlc3QgeCRUQVJHRVQgPSB4VkFYOyB0aGVuCisgIFZBWF9UUlVFPQorICBWQVhfRkFMU0U9JyMnCitlbHNlCisgIFZBWF9UUlVFPScjJworICBWQVhfRkFMU0U9CitmaQorCiAgaWYgdGVzdCB4JFRBUkdFVCA9IHhYVEVOU0E7IHRoZW4KICAgWFRFTlNBX1RSVUU9CiAgIFhURU5TQV9GQUxTRT0nIycKQEAgLTE0MTUxLDE3ICsxODA4MSwyNSBAQAogIyBBbHNvIEFDX1NVQlNUIHRoaXMgdmFyaWFibGUgZm9yIGZmaS5oLgogaWYgdGVzdCAteiAiJEhBVkVfTE9OR19ET1VCTEUiOyB0aGVuCiAgIEhBVkVfTE9OR19ET1VCTEU9MAotICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfZG91YmxlICE9ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGU7IHRoZW4KLSAgICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUgIT0gMDsgdGhlbgorICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUgIT0gMDsgdGhlbgorICAgIGlmIHRlc3QgJEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCAhPSAwOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCAxIiA+PmNvbmZkZWZzLmgKKwogICAgICAgSEFWRV9MT05HX0RPVUJMRT0xCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAkYWNfY3Zfc2l6ZW9mX2RvdWJsZSAhPSAkYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlOyB0aGVuCisgICAgICAgIEhBVkVfTE9OR19ET1VCTEU9MQogCiAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0xPTkdfRE9VQkxFIDEiID4+Y29uZmRlZnMuaAogCisgICAgICBmaQogICAgIGZpCiAgIGZpCiBmaQogCiAKKwogIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9CiBpZiAke2FjX2N2X2NfYmlnZW5kaWFuKzp9IGZhbHNlOyB0aGVuIDoKQEAgLTE0NjAyLDggKzE4NTQwLDcgQEAKIGZpCiAKIAotaWYgdGVzdCB4JFRBUkdFVCA9IHhYODZfV0lONjQ7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfIHByZWZpeCBpbiBjb21waWxlZCBzeW1ib2xzIiA+JjUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF8gcHJlZml4IGluIGNvbXBpbGVkIHN5bWJvbHMiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF8gcHJlZml4IGluIGNvbXBpbGVkIHN5bWJvbHMuLi4gIiA+JjY7IH0KIGlmICR7bHRfY3Zfc3lzX3N5bWJvbF91bmRlcnNjb3JlKzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKQEAgLTE0NjUwLDExICsxODU4NywxMCBAQAogICBzeXNfc3ltYm9sX3VuZGVyc2NvcmU9JGx0X2N2X3N5c19zeW1ib2xfdW5kZXJzY29yZQogCiAKLSAgICBpZiB0ZXN0ICJ4JHN5c19zeW1ib2xfdW5kZXJzY29yZSIgPSB4eWVzOyB0aGVuCitpZiB0ZXN0ICJ4JHN5c19zeW1ib2xfdW5kZXJzY29yZSIgPSB4eWVzOyB0aGVuCiAKICRhc19lY2hvICIjZGVmaW5lIFNZTUJPTF9VTkRFUlNDT1JFIDEiID4+Y29uZmRlZnMuaAogCi0gICAgZmkKIGZpCiAKIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEU9MApAQCAtMTQ2ODIsMTYgKzE4NjE4LDMyIEBACiAKIAogaWYgdGVzdCB4JFRBUkdFVCA9IHhYODZfNjQ7IHRoZW4KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGFzc2VtYmxlciBzdXBwb3J0cyB1bndpbmQgc2VjdGlvbiB0eXBlIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGFzc2VtYmxlciBzdXBwb3J0cyB1bndpbmQgc2VjdGlvbiB0eXBlLi4uICIgPiY2OyB9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0b29sY2hhaW4gc3VwcG9ydHMgdW53aW5kIHNlY3Rpb24gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0b29sY2hhaW4gc3VwcG9ydHMgdW53aW5kIHNlY3Rpb24gdHlwZS4uLiAiID4mNjsgfQogaWYgJHtsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGUrOn0gZmFsc2U7IHRoZW4gOgogICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCi0JbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlPXllcwotCWVjaG8gJy5zZWN0aW9uIC5laF9mcmFtZSwiYSIsQHVud2luZCcgPiBjb25mdGVzdC5zCi0JaWYgJENDICRDRkxBR1MgLWMgY29uZnRlc3QucyAyPiYxIHwgZ3JlcCAtaSB3YXJuaW5nID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIGxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZT1ubworICAgICAgICBjYXQgID4gY29uZnRlc3QxLnMgPDwgRU9GCisudGV4dAorLmdsb2JsIGZvbworZm9vOgoram1wIGJhcgorLnNlY3Rpb24gLmVoX2ZyYW1lLCJhIixAdW53aW5kCitiYXI6CitFT0YKKworICAgICAgICBjYXQgPiBjb25mdGVzdDIuYyAgPDwgRU9GCitleHRlcm4gdm9pZCBmb28oKTsKK2ludCBtYWluKCl7Zm9vKCk7fQorRU9GCisKKwlsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGU9bm8KKwkjIHdlIGVuc3VyZSB0aGF0IHdlIGNhbiBjb21waWxlIF9hbmRfIGxpbmsgYW4gYXNzZW1ibHkgZmlsZSBjb250YWluaW5nIGFuIEB1bndpbmQgc2VjdGlvbgorCSMgc2luY2UgdGhlIGNvbXBpbGVyIGNhbiBzdXBwb3J0IGl0IGFuZCBub3QgdGhlIGxpbmtlciAoaWUgb2xkIGJpbnV0aWxzKQorCWlmICRDQyAtV2EsLS1mYXRhbC13YXJuaW5ncyAkQ0ZMQUdTIC1jIGNvbmZ0ZXN0MS5zID4gL2Rldi9udWxsIDI+JjEgJiYgXAorICAgICAgICAgICAkQ0MgY29uZnRlc3QyLmMgY29uZnRlc3QxLm8gPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KKwkgICAgbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlPXllcwogCWZpCiAKIGZpCkBAIC0xNDg0NCw3ICsxODc5Niw3IEBACiAgICAgdG9vbGV4ZWNkaXI9JyQobGliZGlyKS9nY2MtbGliLyQodGFyZ2V0X2FsaWFzKScKICAgICB0b29sZXhlY2xpYmRpcj0nJChsaWJkaXIpJwogICBmaQotICBtdWx0aV9vc19kaXJlY3Rvcnk9YCRDQyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5YAorICBtdWx0aV9vc19kaXJlY3Rvcnk9YCRDQyAkQ0ZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnlgCiAgIGNhc2UgJG11bHRpX29zX2RpcmVjdG9yeSBpbgogICAgIC4pIDs7ICMgQXZvaWQgdHJhaWxpbmcgLy4KICAgICAuLi8qKSB0b29sZXhlY2xpYmRpcj0kdG9vbGV4ZWNsaWJkaXIvJG11bHRpX29zX2RpcmVjdG9yeSA7OwpAQCAtMTUwMDUsNiArMTg5NTcsMTAgQEAKICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiYW1fX2Zhc3RkZXBDQ1wiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQogZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKIGlmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDQ0FTX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NBU19GQUxTRX0iOyB0aGVuCiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NBU1wiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQpAQCAtMTUwNDksNiArMTkwMDUsMTQgQEAKICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiWDg2X0RBUldJTlwiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQogZmkKK2lmIHRlc3QgLXogIiR7WDg2X0RBUldJTjMyX1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9EQVJXSU4zMl9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlg4Nl9EQVJXSU4zMlwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgLXogIiR7WDg2X0RBUldJTjY0X1RSVUV9IiAmJiB0ZXN0IC16ICIke1g4Nl9EQVJXSU42NF9GQUxTRX0iOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlg4Nl9EQVJXSU42NFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKIGlmIHRlc3QgLXogIiR7QUxQSEFfVFJVRX0iICYmIHRlc3QgLXogIiR7QUxQSEFfRkFMU0V9IjsgdGhlbgogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJBTFBIQVwiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQpAQCAtMTUwNjUsNiArMTkwMjksMTAgQEAKICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTTY4S1wiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQogZmkKK2lmIHRlc3QgLXogIiR7TTg4S19UUlVFfSIgJiYgdGVzdCAteiAiJHtNODhLX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTTg4S1wiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQorZmkKIGlmIHRlc3QgLXogIiR7TUlDUk9CTEFaRV9UUlVFfSIgJiYgdGVzdCAteiAiJHtNSUNST0JMQVpFX0ZBTFNFfSI7IHRoZW4KICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTUlDUk9CTEFaRVwiIHdhcyBuZXZlciBkZWZpbmVkLgogVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiAiJExJTkVOTyIgNQpAQCAtMTUwNzcsNiArMTkwNDUsMTAgQEAKICAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTU9YSUVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKIGZpCitpZiB0ZXN0IC16ICIke05JT1MyX1RSVUV9IiAmJiB0ZXN0IC16ICIke05JT1MyX0ZBTFNFfSI7IHRoZW4KKyAgYXNfZm5fZXJyb3IgJD8gImNvbmRpdGlvbmFsIFwiTklPUzJcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCiBpZiB0ZXN0IC16ICIke1BPV0VSUENfVFJVRX0iICYmIHRlc3QgLXogIiR7UE9XRVJQQ19GQUxTRX0iOyB0aGVuCiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlBPV0VSUENcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKQEAgLTE1MDk3LDYgKzE5MDY5LDEwIEBACiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIkFBUkNINjRcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKIGZpCitpZiB0ZXN0IC16ICIke0FSQ19UUlVFfSIgJiYgdGVzdCAteiAiJHtBUkNfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJBUkNcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCiBpZiB0ZXN0IC16ICIke0FSTV9UUlVFfSIgJiYgdGVzdCAteiAiJHtBUk1fRkFMU0V9IjsgdGhlbgogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJBUk1cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKQEAgLTE1MTQ1LDYgKzE5MTIxLDEwIEBACiAgIGFzX2ZuX2Vycm9yICQ/ICJjb25kaXRpb25hbCBcIlRJTEVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKIGZpCitpZiB0ZXN0IC16ICIke1ZBWF9UUlVFfSIgJiYgdGVzdCAteiAiJHtWQVhfRkFMU0V9IjsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJWQVhcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKK2ZpCiBpZiB0ZXN0IC16ICIke1hURU5TQV9UUlVFfSIgJiYgdGVzdCAteiAiJHtYVEVOU0FfRkFMU0V9IjsgdGhlbgogICBhc19mbl9lcnJvciAkPyAiY29uZGl0aW9uYWwgXCJYVEVOU0FcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KIFVzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgIiRMSU5FTk8iIDUKQEAgLTE1NTU5LDcgKzE5NTM5LDcgQEAKICMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgogIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4KIGFjX2xvZz0iCi1UaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IGxpYmZmaSAkYXNfbWUgMy4wLjEzLCB3aGljaCB3YXMKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbGliZmZpICRhc19tZSAzLjEsIHdoaWNoIHdhcwogZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgQ09ORklHX0ZJTEVTICAgID0gJENPTkZJR19GSUxFUwpAQCAtMTU2MjksNyArMTk2MDksNyBAQAogY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBhY19jc19jb25maWc9ImAkYXNfZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9eIC8vOyBzL1tcXCIiXGBcJF0vXFxcXCYvZydgIgogYWNfY3NfdmVyc2lvbj0iXFwKLWxpYmZmaSBjb25maWcuc3RhdHVzIDMuMC4xMworbGliZmZpIGNvbmZpZy5zdGF0dXMgMy4xCiBjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjksCiAgIHdpdGggb3B0aW9ucyBcXCJcJGFjX2NzX2NvbmZpZ1xcIgogCkBAIC0xNTgyMSw4ICsxOTgwMSwxMCBAQAogR0NDPSdgJEVDSE8gIiRHQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCiBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSdgJEVDSE8gIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfbm1faW50ZXJmYWNlPSdgJEVDSE8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKIGx0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwpAQCAtMTU4OTYsNiArMTk4NzgsNjAgQEAKIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogb2xkX3N0cmlwbGliPSdgJEVDSE8gIiRvbGRfc3RyaXBsaWIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogc3RyaXBsaWI9J2AkRUNITyAiJHN0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0nYCRFQ0hPICIkY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcF9vYmplY3RzPSdgJEVDSE8gIiRwcmVkZXBfb2JqZWN0cyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0ZGVwX29iamVjdHM9J2AkRUNITyAiJHBvc3RkZXBfb2JqZWN0cyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVkZXBzPSdgJEVDSE8gIiRwcmVkZXBzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBzPSdgJEVDSE8gIiRwb3N0ZGVwcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMRF9DWFg9J2AkRUNITyAiJExEX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfZmxhZ19DWFg9J2AkRUNITyAiJHJlbG9hZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCityZWxvYWRfY21kc19DWFg9J2AkRUNITyAiJHJlbG9hZF9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDX0NYWD0nYCRFQ0hPICIkR0NDX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nYCRFQ0hPICIkbHRfcHJvZ19jb21waWxlcl93bF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPSdgJEVDSE8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPSdgJEVDSE8gIiRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9J2AkRUNITyAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSdgJEVDSE8gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWD0nYCRFQ0hPICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nYCRFQ0hPICIkYXJjaGl2ZV9leHBzeW1fY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHNfQ1hYPSdgJEVDSE8gIiRtb2R1bGVfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit3aXRoX2dudV9sZF9DWFg9J2AkRUNITyAiJHdpdGhfZ251X2xkX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiJGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitub191bmRlZmluZWRfZmxhZ19DWFg9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9taW51c19MX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfbWludXNfTF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9J2AkRUNITyAiJGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2F1dG9tYXRpY19DWFg9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaW5oZXJpdF9ycGF0aF9DWFg9J2AkRUNITyAiJGluaGVyaXRfcnBhdGhfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnNfQ1hYPSdgJEVDSE8gIiRsaW5rX2FsbF9kZXBsaWJzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSdgJEVDSE8gIiRleHBvcnRfc3ltYm9sc19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXNfQ1hYPSdgJEVDSE8gIiRleGNsdWRlX2V4cHN5bXNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luY2x1ZGVfZXhwc3ltc19DWFg9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlbGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcHJlbGlua19jbWRzX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0bGlua19jbWRzX0NYWD0nYCRFQ0hPICIkcG9zdGxpbmtfY21kc19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9saXN0X3NwZWNfQ1hYPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlY19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uX0NYWD0nYCRFQ0hPICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPSdgJEVDSE8gIiRjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3ByZWRlcF9vYmplY3RzX0NYWD0nYCRFQ0hPICIkcHJlZGVwX29iamVjdHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBfb2JqZWN0c19DWFg9J2AkRUNITyAiJHBvc3RkZXBfb2JqZWN0c19DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcHJlZGVwc19DWFg9J2AkRUNITyAiJHByZWRlcHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RkZXBzX0NYWD0nYCRFQ0hPICIkcG9zdGRlcHNfQ1hYIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9J2AkRUNITyAiJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwogCiBMVENDPSckTFRDQycKIExUQ0ZMQUdTPSckTFRDRkxBR1MnCkBAIC0xNTk0MCw4ICsxOTk3NiwxMCBAQAogY29tcGlsZXIgXAogbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCiBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQgXAogbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAogbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeCBcCitsdF9jdl9ubV9pbnRlcmZhY2UgXAogbm1fZmlsZV9saXN0X3NwZWMgXAogbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcgXAogbHRfcHJvZ19jb21waWxlcl9waWMgXApAQCAtMTU5NzQsMTAgKzIwMDEyLDQxIEBACiBpbnN0YWxsX292ZXJyaWRlX21vZGUgXAogZmluaXNoX2V2YWwgXAogb2xkX3N0cmlwbGliIFwKLXN0cmlwbGliOyBkbworc3RyaXBsaWIgXAorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzIFwKK3ByZWRlcF9vYmplY3RzIFwKK3Bvc3RkZXBfb2JqZWN0cyBcCitwcmVkZXBzIFwKK3Bvc3RkZXBzIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCBcCitMRF9DWFggXAorcmVsb2FkX2ZsYWdfQ1hYIFwKK2NvbXBpbGVyX0NYWCBcCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAorbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIFwKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFggXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWCBcCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFggXAorY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWCBcCit3aXRoX2dudV9sZF9DWFggXAorYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKK25vX3VuZGVmaW5lZF9mbGFnX0NYWCBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCitleGNsdWRlX2V4cHN5bXNfQ1hYIFwKK2luY2x1ZGVfZXhwc3ltc19DWFggXAorZmlsZV9saXN0X3NwZWNfQ1hYIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFggXAorcHJlZGVwX29iamVjdHNfQ1hYIFwKK3Bvc3RkZXBfb2JqZWN0c19DWFggXAorcHJlZGVwc19DWFggXAorcG9zdGRlcHNfQ1hYIFwKK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg7IGRvCiAgICAgY2FzZSBcYGV2YWwgXFxcXFwkRUNITyBcXFxcIiJcXFxcXCRcJHZhciJcXFxcIlxgIGluCiAgICAgKltcXFxcXFxcYFxcIlxcXCRdKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcwogICAgICAgOzsKICAgICAqKQogICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCkBAIC0xNjAwNCwxMCArMjAwNzMsMjEgQEAKIHBvc3R1bmluc3RhbGxfY21kcyBcCiBmaW5pc2hfY21kcyBcCiBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgXAotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM7IGRvCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCityZWxvYWRfY21kc19DWFggXAorb2xkX2FyY2hpdmVfY21kc19DWFggXAorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFggXAorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIFwKK2FyY2hpdmVfY21kc19DWFggXAorYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAorbW9kdWxlX2NtZHNfQ1hYIFwKK21vZHVsZV9leHBzeW1fY21kc19DWFggXAorZXhwb3J0X3N5bWJvbHNfY21kc19DWFggXAorcHJlbGlua19jbWRzX0NYWCBcCitwb3N0bGlua19jbWRzX0NYWDsgZG8KICAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KICAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQotICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIC1lIFxcIlxcXCRkb3VibGVfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkZGVsYXlfdmFyaWFibGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiICMjIGV4Y2x1ZGUgZnJvbSBzY19wcm9oaWJpdF9uZXN0ZWRfcXVvdGVzCiAgICAgICA7OwogICAgICopCiAgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKQEAgLTE2MDE2LDI0ICsyMDA5NiwyMyBAQAogZG9uZQogCiBhY19hdXhfZGlyPSckYWNfYXV4X2RpcicKLXhzaV9zaGVsbD0nJHhzaV9zaGVsbCcKLWx0X3NoZWxsX2FwcGVuZD0nJGx0X3NoZWxsX2FwcGVuZCcKIAotIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCiAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcyBJTklULgotaWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgogICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGZpCiAKIAogICAgIFBBQ0tBR0U9JyRQQUNLQUdFJwogICAgIFZFUlNJT049JyRWRVJTSU9OJwotICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKICAgICBSTT0nJFJNJwogICAgIG9maWxlPSckb2ZpbGUnCiAKIAogCisKKwogVEFSR0VURElSPSIkVEFSR0VURElSIgogCiBfQUNFT0YKQEAgLTE2ODMxLDcgKzIwOTEwLDcgQEAKICAgZmkKICA7OwogICAgICJkZXBmaWxlcyI6QykgdGVzdCB4IiRBTURFUF9UUlVFIiAhPSB4IiIgfHwgewotICAjIEF1dG9jb25mIDIuNjIgcXVvdGVzIC0tZmlsZSBhcmd1bWVudHMgZm9yIGV2YWwsIGJ1dCBub3Qgd2hlbiBmaWxlcworICAjIE9sZGVyIEF1dG9jb25mIHF1b3RlcyAtLWZpbGUgYXJndW1lbnRzIGZvciBldmFsLCBidXQgbm90IHdoZW4gZmlsZXMKICAgIyBhcmUgbGlzdGVkIHdpdGhvdXQgLS1maWxlLiAgTGV0J3MgcGxheSBzYWZlIGFuZCBvbmx5IGVuYWJsZSB0aGUgZXZhbAogICAjIGlmIHdlIGRldGVjdCB0aGUgcXVvdGluZy4KICAgY2FzZSAkQ09ORklHX0ZJTEVTIGluCkBAIC0xNjg4Miw3ICsyMDk2MSw3IEBACiAgICAgREVQRElSPWBzZWQgLW4gJ3MvXkRFUERJUiA9IC8vcCcgPCAiJG1mImAKICAgICB0ZXN0IC16ICIkREVQRElSIiAmJiBjb250aW51ZQogICAgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAotICAgIHRlc3QgLXogImFtX19pbmNsdWRlIiAmJiBjb250aW51ZQorICAgIHRlc3QgLXogIiRhbV9faW5jbHVkZSIgJiYgY29udGludWUKICAgICBhbV9fcXVvdGU9YHNlZCAtbiAncy9eYW1fX3F1b3RlID0gLy9wJyA8ICIkbWYiYAogICAgICMgRmluZCBhbGwgZGVwZW5kZW5jeSBvdXRwdXQgZmlsZXMsIHRoZXkgYXJlIGluY2x1ZGVkIGZpbGVzIHdpdGgKICAgICAjICQoREVQRElSKSBpbiB0aGVpciBuYW1lcy4gIFdlIGludm9rZSBzZWQgdHdpY2UgYmVjYXVzZSBpdCBpcyB0aGUKQEAgLTE2OTI1LDEzICsyMTAwNCwxMyBAQAogIDs7CiAgICAgImxpYnRvb2wiOkMpCiAKLSAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCiAgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCiAgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogICAgIGZpCiAKLSAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgY2ZnZmlsZT0ke29maWxlfVQKICAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQogICAgICRSTSAiJGNmZ2ZpbGUiCiAKQEAgLTE2OTM5LDcgKzIxMDE4LDcgQEAKICMhICRTSEVMTAogCiAjIGAkRUNITyAiJG9maWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgotIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJGFzX21lICgkUEFDS0FHRSkgJFZFUlNJT04KICMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKICMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgogIwpAQCAtMTY5NzMsNyArMjEwNTIsNyBAQAogCiAKICMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotYXZhaWxhYmxlX3RhZ3M9IiIKK2F2YWlsYWJsZV90YWdzPSdDWFggJwogCiAjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRwogCkBAIC0xNzExMCwxNiArMjExODksMjIgQEAKICMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KIGdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCiAKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW50byBhIGxpc3Qgb2Ygc3ltYm9scyB0byBtYW51YWxseSByZWxvY2F0ZS4KK2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnQKKwogIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIuCiBnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwogCiAjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkLgogZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4CiAKKyMgVGhlIG5hbWUgbGlzdGVyIGludGVyZmFjZS4KK25tX2ludGVyZmFjZT0kbHRfbHRfY3Zfbm1faW50ZXJmYWNlCisKICMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzIGZvciBcJE5NLgogbm1fZmlsZV9saXN0X3NwZWM9JGx0X25tX2ZpbGVfbGlzdF9zcGVjCiAKLSMgVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBkZXBlbmRlbnQgbGlicmFyaWVzLGFuZCBpbiB3aGljaCBvdXIgbGlicmFyaWVzIHNob3VsZCBiZSBpbnN0YWxsZWQuCisjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgd2hlcmUgb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgogbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAogCiAjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KQEAgLTE3MzA2LDEzICsyMTM5MSwxMyBAQAogIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgogaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgogCi0jIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCiAjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgogaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKIAotIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcwogIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKLSMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyMgImFic29sdXRlIixpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyBcJHNobGlicGF0aF92YXIgaWYgdGhlCiAjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgogaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUKIApAQCAtMTczNjAsNiArMjE0NDUsMjAgQEAKICMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCiBoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgogCisjIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisjIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0cworcHJlZGVwcz0kbHRfcHJlZGVwcworcG9zdGRlcHM9JGx0X3Bvc3RkZXBzCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoCisKICMgIyMjIEVORCBMSUJUT09MIENPTkZJRwogCiBfTFRfRU9GCkBAIC0xNzM3MCw3ICsyMTQ2OSw3IEBACiAjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwogIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotaWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCitpZiB0ZXN0IHNldCAhPSAiJHtDT0xMRUNUX05BTUVTK3NldH0iOyB0aGVuCiAgIENPTExFQ1RfTkFNRVM9CiAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCiBmaQpAQCAtMTczNzksNyArMjE0NzgsNyBAQAogICBlc2FjCiAKIAotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitsdG1haW49JGFjX2F1eF9kaXIvbHRtYWluLnNoCiAKIAogICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKQEAgLTE3Mzg5LDE2OSArMjE0ODgsMTYzIEBACiAgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKIAotICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCi0gIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCi1mdW5jX2Rpcm5hbWUgKClcCi17XAotXCAgICBjYXNlICR7MX0gaW5cCi1cICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCi1cICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKLVwgICAgZXNhY1wKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKLWZ1bmNfYmFzZW5hbWUgKClcCi17XAotXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCi17XAotXCAgICBjYXNlICR7MX0gaW5cCi1cICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCi1cICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKLVwgICAgZXNhY1wKLVwgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKLWZ1bmNfc3RyaXBuYW1lICgpXAote1wKLVwgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKLVwgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKLVwgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCi1cICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAotXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAotZnVuY19zcGxpdF9sb25nX29wdCAoKVwKLXtcCi1cICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKLVwgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKLWZ1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAote1wKLVwgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCi1cICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCi1mdW5jX2xvMm8gKClcCi17XAotXCAgICBjYXNlICR7MX0gaW5cCi1cICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCi1cICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAotXCAgICBlc2FjXAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAotZnVuY194Zm9ybSAoKVwKLXtcCi0gICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLQotICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCi1mdW5jX2FyaXRoICgpXAote1wKLSAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCi19ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCi1mdW5jX2xlbiAoKVwKLXtcCi0gICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAotfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci0KLWZpCi0KLWlmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KLSAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCi1mdW5jX2FwcGVuZCAoKVwKLXtcCi0gICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCi0gICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi10ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotCi0KLSAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kX3F1b3RlZCAoKSQvLC9efSAjIGZ1bmNfYXBwZW5kX3F1b3RlZCAvY1wKLWZ1bmNfYXBwZW5kX3F1b3RlZCAoKVwKLXtcCi1cICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iXAotXCAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IlwKLX0gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZF9xdW90ZWQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAotICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLQotCi0gICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKLSAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW2EtekEtWl9dXHsxLFx9XCkgIiVcMSs9IiVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCi0gICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQotICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgotZWxzZQotICAjIFNhdmUgYSBgZnVuY19hcHBlbmQnIGZ1bmN0aW9uIGNhbGwgZXZlbiB3aGVuICcrPScgaXMgbm90IGF2YWlsYWJsZQotICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAotICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAotICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLSAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKLWZpCi0KLWlmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCi0gIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZSIgPiY1Ci0kYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjI7fQotZmkKLQotCiAgICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8CiAgICAgKHJtIC1mICIkb2ZpbGUiICYmIGNwICIkY2ZnZmlsZSIgIiRvZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlIikKICAgY2htb2QgK3ggIiRvZmlsZSIKIAorCisgICAgY2F0IDw8X0xUX0VPRiA+PiAiJG9maWxlIgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IENYWAorCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTERfQ1hYCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZ19DWFgKK3JlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19DWFgKKworIyBBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyX0NYWAorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQ19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgKKworIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Citjb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgKKworIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KK2NvbXBpbGVyX25lZWRzX29iamVjdD0kbHRfY29tcGlsZXJfbmVlZHNfb2JqZWN0X0NYWAorCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWAorCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFgKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19DWFgKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSBpZiBkaWZmZXJlbnQgZnJvbSBidWlsZGluZworIyBhIHNoYXJlZCBhcmNoaXZlLgorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0NYWAorbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYCisKKyMgV2hldGhlciB3ZSBhcmUgYnVpbGRpbmcgd2l0aCBHTlUgbGQgb3Igbm90Lgord2l0aF9nbnVfbGQ9JGx0X3dpdGhfZ251X2xkX0NYWAorCisjIEZsYWcgdGhhdCBhbGxvd3Mgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHVuZGVmaW5lZCBzeW1ib2xzIHRvIGJlIGJ1aWx0LgorYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGx0X2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAorCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19DWFgKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCRzaGFyZWRfZXh0IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworIyBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBESVIvbGliTkFNRVwkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisjICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgXCRzaGxpYnBhdGhfdmFyIGlmIHRoZQorIyBsaWJyYXJ5IGlzIHJlbG9jYXRlZC4KK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0kaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlX0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0NYWAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWAorCisjIFNldCB0byAieWVzIiBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorIyBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYCisKKyMgU2V0IHRvIHllcyBpZiBsaW5rZXIgYWRkcyBydW50aW1lIHBhdGhzIG9mIGRlcGVuZGVudCBsaWJyYXJpZXMKKyMgdG8gcnVudGltZSBwYXRoIGxpc3QuCitpbmhlcml0X3JwYXRoPSRpbmhlcml0X3JwYXRoX0NYWAorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0NYWAorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAorCisjIENvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzLgorcHJlbGlua19jbWRzPSRsdF9wcmVsaW5rX2NtZHNfQ1hYCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHNfQ1hYCisKKyMgU3BlY2lmeSBmaWxlbmFtZSBjb250YWluaW5nIGlucHV0IGZpbGVzLgorZmlsZV9saXN0X3NwZWM9JGx0X2ZpbGVfbGlzdF9zcGVjX0NYWAorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fQ1hYCisKKyMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvCisjIGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0NYWAorcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfQ1hYCitwcmVkZXBzPSRsdF9wcmVkZXBzX0NYWAorcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0NYWAorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFgKKworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogQ1hYCitfTFRfRU9GCisKICA7OwogICAgICJpbmNsdWRlIjpDKSB0ZXN0IC1kIGluY2x1ZGUgfHwgbWtkaXIgaW5jbHVkZSA7OwogICAgICJzcmMiOkMpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5hYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlLmFjCmluZGV4IDdmZTVmZjUuLjVjODg4NWYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlLmFjCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvY29uZmlndXJlLmFjCkBAIC01LDEzICs1LDE3IEBACiAKIEFDX1BSRVJFUSgyLjY4KQogCi1BQ19JTklUKFtsaWJmZmldLCBbMy4wLjEzXSwgW2h0dHA6Ly9naXRodWIuY29tL2F0Z3JlZW4vbGliZmZpL2lzc3Vlc10pCitBQ19JTklUKFtsaWJmZmldLCBbMy4xXSwgW2h0dHA6Ly9naXRodWIuY29tL2F0Z3JlZW4vbGliZmZpL2lzc3Vlc10pCiBBQ19DT05GSUdfSEVBREVSUyhbZmZpY29uZmlnLmhdKQogCiBBQ19DQU5PTklDQUxfU1lTVEVNCiB0YXJnZXRfYWxpYXM9JHt0YXJnZXRfYWxpYXMtJGhvc3RfYWxpYXN9CiAKLS4gJHtzcmNkaXJ9L2NvbmZpZ3VyZS5ob3N0CitjYXNlICIke2hvc3R9IiBpbgorICBmcnYqLWVsZikKKyAgICBMREZMQUdTPWBlY2hvICRMREZMQUdTIHwgc2VkICJzL1wtQlteIF0qbGliZ2xvc3NcL2ZydlwvLy8iYFwgLUJgcHdkYC8uLi9saWJnbG9zcy9mcnYvCisgICAgOzsKK2VzYWMKIAogQVhfRU5BQkxFX0JVSUxERElSCiAKQEAgLTI4LDYgKzMyLDcgQEAKIG00X2RlZmluZShbX0FDX0FSR19WQVJfUFJFQ0lPVVNdLFtdKQogc2F2ZV9DRkxBR1M9JENGTEFHUwogQUNfUFJPR19DQworQUNfUFJPR19DWFgKIENGTEFHUz0kc2F2ZV9DRkxBR1MKIG00X3VuZGVmaW5lKFtfQUNfQVJHX1ZBUl9QUkVDSU9VU10pCiBtNF9yZW5hbWVfZm9yY2UoW3JlYWxfUFJFQ0lPVVNdLFtfQUNfQVJHX1ZBUl9QUkVDSU9VU10pCkBAIC01MiwxMyArNTcsMTMgQEAKIAogaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCiAgIENGTEFHUz0iJENGTEFHUyAtZmV4Y2VwdGlvbnMiCi0gIHRvdWNoIGxvY2FsLmV4cAotZWxzZQotICBjYXQgPiBsb2NhbC5leHAgPDxFT0YKLXNldCBDQ19GT1JfVEFSR0VUICIkQ0MiCi1FT0YKIGZpCiAKK2NhdCA+IGxvY2FsLmV4cCA8PEVPRgorc2V0IENDX0ZPUl9UQVJHRVQgIiRDQyIKK3NldCBDWFhfRk9SX1RBUkdFVCAiJENYWCIKK0VPRgorCiBBTV9NQUlOVEFJTkVSX01PREUKIAogQUNfQ0hFQ0tfSEVBREVSUyhzeXMvbW1hbi5oKQpAQCAtNjksNiArNzQsNyBAQAogQU1fQ09ORElUSU9OQUwoVEVTVFNVQkRJUiwgdGVzdCAtZCAkc3JjZGlyL3Rlc3RzdWl0ZSkKIAogVEFSR0VURElSPSJ1bmtub3duIgorSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UPTAKIGNhc2UgIiRob3N0IiBpbgogICBhYXJjaDY0Ki0qLSopCiAJVEFSR0VUPUFBUkNINjQ7IFRBUkdFVERJUj1hYXJjaDY0CkBAIC04MCw2ICs4NiwxMCBAQAogCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19MT05HX0RPVUJMRV8xMjhfXyknCiAJOzsKIAorICBhcmMqLSotKikKKwlUQVJHRVQ9QVJDOyBUQVJHRVRESVI9YXJjCisJOzsKKwogICBhcm0qLSotKikKIAlUQVJHRVQ9QVJNOyBUQVJHRVRESVI9YXJtCiAJOzsKQEAgLTEzNyw2ICsxNDcsOSBAQAogCSAgQU1fTFRMREZMQUdTPSctbm8tdW5kZWZpbmVkIC1iaW5kaXIgIiQoYmluZGlyKSInOwogCWZpCiAJOzsKKyAgaSo4Ni0qLW50by1xbngqKSAKKyAgICAgICAgVEFSR0VUPVg4NjsgVEFSR0VURElSPXg4NgorICAgICAgICA7OwogICBpPzg2LSotZGFyd2luKikKIAlUQVJHRVQ9WDg2X0RBUldJTjsgVEFSR0VURElSPXg4NgogCTs7CkBAIC0xNDksMTAgKzE2Miw2IEBACiAJZmkJICAKIAk7OwogCi0gIGkqODYtKi1udG8tcW54KikgCi0gICAgICAgIFRBUkdFVD1YODY7IFRBUkdFVERJUj14ODYKLSAgICAgICAgOzsKLQogICB4ODZfNjQtKi1kYXJ3aW4qKQogCVRBUkdFVD1YODZfREFSV0lOOyBUQVJHRVRESVI9eDg2CiAJOzsKQEAgLTE5OCw2ICsyMDcsMTAgQEAKIAlUQVJHRVQ9TTY4SzsgVEFSR0VURElSPW02OGsKIAk7OwogCisgIG04OGstKi0qKQorCVRBUkdFVD1NODhLOyBUQVJHRVRESVI9bTg4aworCTs7CisKICAgbWljcm9ibGF6ZSotKi0qKQogCVRBUkdFVD1NSUNST0JMQVpFOyBUQVJHRVRESVI9bWljcm9ibGF6ZQogCTs7CkBAIC0yMTMsMTQgKzIyNiwxOSBAQAogICBtaXBzLXNnaS1pcml4NS4qIHwgbWlwcy1zZ2ktaXJpeDYuKiB8IG1pcHMqLSotcnRlbXMqKQogCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCiAJOzsKLSAgbWlwcyotKi1saW51eCogfCBtaXBzKi0qLW9wZW5ic2QqKQorICBtaXBzKi0qbGludXgqIHwgbWlwcyotKi1vcGVuYnNkKikKIAkjIFN1cHBvcnQgMTI4LWJpdCBsb25nIGRvdWJsZSBmb3IgTmV3QUJJLgogCUhBVkVfTE9OR19ET1VCTEU9J2RlZmluZWQoX19taXBzNjQpJwotCVRBUkdFVD1NSVBTX0lSSVg7IFRBUkdFVERJUj1taXBzCisJVEFSR0VUPU1JUFNfTElOVVg7IFRBUkdFVERJUj1taXBzCisJOzsKKworICBuaW9zMiotbGludXgqKQorCVRBUkdFVD1OSU9TMjsgVEFSR0VURElSPW5pb3MyCiAJOzsKIAogICBwb3dlcnBjKi0qLWxpbnV4KiB8IHBvd2VycGMtKi1zeXN2KikKIAlUQVJHRVQ9UE9XRVJQQzsgVEFSR0VURElSPXBvd2VycGMKKwlIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQ9MQogCTs7CiAgIHBvd2VycGMtKi1hbWlnYW9zKikKIAlUQVJHRVQ9UE9XRVJQQzsgVEFSR0VURElSPXBvd2VycGMKQEAgLTIzNiw2ICsyNTQsNyBAQAogCTs7CiAgIHBvd2VycGMtKi1mcmVlYnNkKiB8IHBvd2VycGMtKi1vcGVuYnNkKikKIAlUQVJHRVQ9UE9XRVJQQ19GUkVFQlNEOyBUQVJHRVRESVI9cG93ZXJwYworCUhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVD0xCiAJOzsKICAgcG93ZXJwYzY0LSotZnJlZWJzZCopCiAJVEFSR0VUPVBPV0VSUEM7IFRBUkdFVERJUj1wb3dlcnBjCkBAIC0yNjMsNiArMjgyLDEwIEBACiAgICAgICAgIFRBUkdFVD1USUxFOyBUQVJHRVRESVI9dGlsZQogICAgICAgICA7OwogCisgIHZheC0qLSopCisJVEFSR0VUPVZBWDsgVEFSR0VURElSPXZheAorCTs7CisKICAgeHRlbnNhKi0qKQogCVRBUkdFVD1YVEVOU0E7IFRBUkdFVERJUj14dGVuc2EKIAk7OwpAQCAtMjg0LDE4ICszMDcsMjMgQEAKIEFNX0NPTkRJVElPTkFMKFg4Nl9XSU4zMiwgdGVzdCB4JFRBUkdFVCA9IHhYODZfV0lOMzIpCiBBTV9DT05ESVRJT05BTChYODZfV0lONjQsIHRlc3QgeCRUQVJHRVQgPSB4WDg2X1dJTjY0KQogQU1fQ09ORElUSU9OQUwoWDg2X0RBUldJTiwgdGVzdCB4JFRBUkdFVCA9IHhYODZfREFSV0lOKQorQU1fQ09ORElUSU9OQUwoWDg2X0RBUldJTjMyLCB0ZXN0IHgkVEFSR0VUID0geFg4Nl9EQVJXSU4gJiYgdGVzdCAkYWNfY3Zfc2l6ZW9mX3NpemVfdCA9IDQpCitBTV9DT05ESVRJT05BTChYODZfREFSV0lONjQsIHRlc3QgeCRUQVJHRVQgPSB4WDg2X0RBUldJTiAmJiB0ZXN0ICRhY19jdl9zaXplb2Zfc2l6ZV90ID0gOCkKIEFNX0NPTkRJVElPTkFMKEFMUEhBLCB0ZXN0IHgkVEFSR0VUID0geEFMUEhBKQogQU1fQ09ORElUSU9OQUwoSUE2NCwgdGVzdCB4JFRBUkdFVCA9IHhJQTY0KQogQU1fQ09ORElUSU9OQUwoTTMyUiwgdGVzdCB4JFRBUkdFVCA9IHhNMzJSKQogQU1fQ09ORElUSU9OQUwoTTY4SywgdGVzdCB4JFRBUkdFVCA9IHhNNjhLKQorQU1fQ09ORElUSU9OQUwoTTg4SywgdGVzdCB4JFRBUkdFVCA9IHhNODhLKQogQU1fQ09ORElUSU9OQUwoTUlDUk9CTEFaRSwgdGVzdCB4JFRBUkdFVCA9IHhNSUNST0JMQVpFKQogQU1fQ09ORElUSU9OQUwoTUVUQUcsIHRlc3QgeCRUQVJHRVQgPSB4TUVUQUcpCiBBTV9DT05ESVRJT05BTChNT1hJRSwgdGVzdCB4JFRBUkdFVCA9IHhNT1hJRSkKK0FNX0NPTkRJVElPTkFMKE5JT1MyLCB0ZXN0IHgkVEFSR0VUID0geE5JT1MyKQogQU1fQ09ORElUSU9OQUwoUE9XRVJQQywgdGVzdCB4JFRBUkdFVCA9IHhQT1dFUlBDKQogQU1fQ09ORElUSU9OQUwoUE9XRVJQQ19BSVgsIHRlc3QgeCRUQVJHRVQgPSB4UE9XRVJQQ19BSVgpCiBBTV9DT05ESVRJT05BTChQT1dFUlBDX0RBUldJTiwgdGVzdCB4JFRBUkdFVCA9IHhQT1dFUlBDX0RBUldJTikKIEFNX0NPTkRJVElPTkFMKFBPV0VSUENfRlJFRUJTRCwgdGVzdCB4JFRBUkdFVCA9IHhQT1dFUlBDX0ZSRUVCU0QpCiBBTV9DT05ESVRJT05BTChBQVJDSDY0LCB0ZXN0IHgkVEFSR0VUID0geEFBUkNINjQpCitBTV9DT05ESVRJT05BTChBUkMsIHRlc3QgeCRUQVJHRVQgPSB4QVJDKQogQU1fQ09ORElUSU9OQUwoQVJNLCB0ZXN0IHgkVEFSR0VUID0geEFSTSkKIEFNX0NPTkRJVElPTkFMKEFWUjMyLCB0ZXN0IHgkVEFSR0VUID0geEFWUjMyKQogQU1fQ09ORElUSU9OQUwoTElCRkZJX0NSSVMsIHRlc3QgeCRUQVJHRVQgPSB4TElCRkZJX0NSSVMpCkBAIC0zMDgsNiArMzM2LDcgQEAKIEFNX0NPTkRJVElPTkFMKFBBX0hQVVgsIHRlc3QgeCRUQVJHRVQgPSB4UEFfSFBVWCkKIEFNX0NPTkRJVElPTkFMKFBBNjRfSFBVWCwgdGVzdCB4JFRBUkdFVCA9IHhQQTY0X0hQVVgpCiBBTV9DT05ESVRJT05BTChUSUxFLCB0ZXN0IHgkVEFSR0VUID0geFRJTEUpCitBTV9DT05ESVRJT05BTChWQVgsIHRlc3QgeCRUQVJHRVQgPSB4VkFYKQogQU1fQ09ORElUSU9OQUwoWFRFTlNBLCB0ZXN0IHgkVEFSR0VUID0geFhURU5TQSkKIAogQUNfSEVBREVSX1NUREMKQEAgLTMyMCwxNCArMzQ5LDIwIEBACiAjIEFsc28gQUNfU1VCU1QgdGhpcyB2YXJpYWJsZSBmb3IgZmZpLmguCiBpZiB0ZXN0IC16ICIkSEFWRV9MT05HX0RPVUJMRSI7IHRoZW4KICAgSEFWRV9MT05HX0RPVUJMRT0wCi0gIGlmIHRlc3QgJGFjX2N2X3NpemVvZl9kb3VibGUgIT0gJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZTsgdGhlbgotICAgIGlmIHRlc3QgJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSAhPSAwOyB0aGVuCisgIGlmIHRlc3QgJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSAhPSAwOyB0aGVuCisgICAgaWYgdGVzdCAkSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UICE9IDA7IHRoZW4KKyAgICAgIEFDX0RFRklORShIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQsIDEsIFtEZWZpbmUgaWYgeW91IHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBzaXplIG9mIHRoZSBsb25nIGRvdWJsZSB0eXBlXSkKICAgICAgIEhBVkVfTE9OR19ET1VCTEU9MQotICAgICAgQUNfREVGSU5FKEhBVkVfTE9OR19ET1VCTEUsIDEsIFtEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGxvbmcgZG91YmxlIHR5cGUgYW5kIGl0IGlzIGJpZ2dlciB0aGFuIGEgZG91YmxlXSkKKyAgICBlbHNlCisgICAgICBpZiB0ZXN0ICRhY19jdl9zaXplb2ZfZG91YmxlICE9ICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGU7IHRoZW4KKyAgICAgICAgSEFWRV9MT05HX0RPVUJMRT0xCisgICAgICAgIEFDX0RFRklORShIQVZFX0xPTkdfRE9VQkxFLCAxLCBbRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBsb25nIGRvdWJsZSB0eXBlIGFuZCBpdCBpcyBiaWdnZXIgdGhhbiBhIGRvdWJsZV0pCisgICAgICBmaQogICAgIGZpCiAgIGZpCiBmaQogQUNfU1VCU1QoSEFWRV9MT05HX0RPVUJMRSkKK0FDX1NVQlNUKEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCkKIAogQUNfQ19CSUdFTkRJQU4KIApAQCAtNDEzLDExICs0NDgsOSBAQAogICAgICAgW0RlZmluZSB0aGlzIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBwYXggZW11bGF0ZWQgdHJhbXBvbGluZXNdKQogICBmaSkKIAotaWYgdGVzdCB4JFRBUkdFVCA9IHhYODZfV0lONjQ7IHRoZW4KLSAgICBMVF9TWVNfU1lNQk9MX1VTQ09SRQotICAgIGlmIHRlc3QgIngkc3lzX3N5bWJvbF91bmRlcnNjb3JlIiA9IHh5ZXM7IHRoZW4KLSAgICAgICAgQUNfREVGSU5FKFNZTUJPTF9VTkRFUlNDT1JFLCAxLCBbRGVmaW5lIGlmIHN5bWJvbHMgYXJlIHVuZGVyc2NvcmVkLl0pCi0gICAgZmkKK0xUX1NZU19TWU1CT0xfVVNDT1JFCitpZiB0ZXN0ICJ4JHN5c19zeW1ib2xfdW5kZXJzY29yZSIgPSB4eWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFNZTUJPTF9VTkRFUlNDT1JFLCAxLCBbRGVmaW5lIGlmIHN5bWJvbHMgYXJlIHVuZGVyc2NvcmVkLl0pCiBmaQogCiBGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFPTAKQEAgLTQzOCwxMiArNDcxLDI4IEBACiBBQ19TVUJTVChGRklfRVhFQ19UUkFNUE9MSU5FX1RBQkxFKQogCiBpZiB0ZXN0IHgkVEFSR0VUID0geFg4Nl82NDsgdGhlbgotICAgIEFDX0NBQ0hFX0NIRUNLKFthc3NlbWJsZXIgc3VwcG9ydHMgdW53aW5kIHNlY3Rpb24gdHlwZV0sCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3Rvb2xjaGFpbiBzdXBwb3J0cyB1bndpbmQgc2VjdGlvbiB0eXBlXSwKIAlsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGUsIFsKLQlsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGU9eWVzCi0JZWNobyAnLnNlY3Rpb24gLmVoX2ZyYW1lLCJhIixAdW53aW5kJyA+IGNvbmZ0ZXN0LnMKLQlpZiAkQ0MgJENGTEFHUyAtYyBjb25mdGVzdC5zIDI+JjEgfCBncmVwIC1pIHdhcm5pbmcgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlPW5vCisgICAgICAgIGNhdCAgPiBjb25mdGVzdDEucyA8PCBFT0YKKy50ZXh0CisuZ2xvYmwgZm9vCitmb286CitqbXAgYmFyCisuc2VjdGlvbiAuZWhfZnJhbWUsImEiLEB1bndpbmQKK2JhcjoKK0VPRgorCisgICAgICAgIGNhdCA+IGNvbmZ0ZXN0Mi5jICA8PCBFT0YKK2V4dGVybiB2b2lkIGZvbygpOworaW50IG1haW4oKXtmb28oKTt9CitFT0YKKworCWxpYmZmaV9jdl9hc194ODZfNjRfdW53aW5kX3NlY3Rpb25fdHlwZT1ubworCSMgd2UgZW5zdXJlIHRoYXQgd2UgY2FuIGNvbXBpbGUgX2FuZF8gbGluayBhbiBhc3NlbWJseSBmaWxlIGNvbnRhaW5pbmcgYW4gQHVud2luZCBzZWN0aW9uCisJIyBzaW5jZSB0aGUgY29tcGlsZXIgY2FuIHN1cHBvcnQgaXQgYW5kIG5vdCB0aGUgbGlua2VyIChpZSBvbGQgYmludXRpbHMpCisJaWYgJENDIC1XYSwtLWZhdGFsLXdhcm5pbmdzICRDRkxBR1MgLWMgY29uZnRlc3QxLnMgPiAvZGV2L251bGwgMj4mMSAmJiBcCisgICAgICAgICAgICRDQyBjb25mdGVzdDIuYyBjb25mdGVzdDEubyA+IC9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgICBsaWJmZmlfY3ZfYXNfeDg2XzY0X3Vud2luZF9zZWN0aW9uX3R5cGU9eWVzCiAJZmkKIAldKQogICAgIGlmIHRlc3QgIngkbGliZmZpX2N2X2FzX3g4Nl82NF91bndpbmRfc2VjdGlvbl90eXBlIiA9IHh5ZXM7IHRoZW4KQEAgLTUyNiwxNCArNTc1LDE0IEBACiBBQ19BUkdfRU5BQkxFKHN0cnVjdHMsCiBbICAtLWRpc2FibGUtc3RydWN0cyAgICAgICBvbWl0IGNvZGUgZm9yIHN0cnVjdCBzdXBwb3J0XSwKICAgaWYgdGVzdCAiJGVuYWJsZV9zdHJ1Y3RzIiA9ICJubyI7IHRoZW4KLSAgICBBQ19ERUZJTkUoRkZJX05PX1NUUlVDVFMsIDEsIFtEZWZpbmUgdGhpcyBpcyB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgYWdncmVnYXRlIHR5cGVzLl0pCisgICAgQUNfREVGSU5FKEZGSV9OT19TVFJVQ1RTLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIGFnZ3JlZ2F0ZSB0eXBlcy5dKQogICBmaSkKIEFNX0NPTkRJVElPTkFMKEZGSV9ERUJVRywgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAieWVzIikKIAogQUNfQVJHX0VOQUJMRShyYXctYXBpLAogWyAgLS1kaXNhYmxlLXJhdy1hcGkgICAgICAgbWFrZSB0aGUgcmF3IGFwaSB1bmF2YWlsYWJsZV0sCiAgIGlmIHRlc3QgIiRlbmFibGVfcmF3X2FwaSIgPSAibm8iOyB0aGVuCi0gICAgQUNfREVGSU5FKEZGSV9OT19SQVdfQVBJLCAxLCBbRGVmaW5lIHRoaXMgaXMgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIHRoZSByYXcgQVBJLl0pCisgICAgQUNfREVGSU5FKEZGSV9OT19SQVdfQVBJLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIHRoZSByYXcgQVBJLl0pCiAgIGZpKQogCiBBQ19BUkdfRU5BQkxFKHB1cmlmeS1zYWZldHksCkBAIC01NTMsNyArNjAyLDcgQEAKICAgICB0b29sZXhlY2Rpcj0nJChsaWJkaXIpL2djYy1saWIvJCh0YXJnZXRfYWxpYXMpJwogICAgIHRvb2xleGVjbGliZGlyPSckKGxpYmRpciknCiAgIGZpCi0gIG11bHRpX29zX2RpcmVjdG9yeT1gJENDIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnlgCisgIG11bHRpX29zX2RpcmVjdG9yeT1gJENDICRDRkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeWAKICAgY2FzZSAkbXVsdGlfb3NfZGlyZWN0b3J5IGluCiAgICAgLikgOzsgIyBBdm9pZCB0cmFpbGluZyAvLgogICAgIC4uLyopIHRvb2xleGVjbGliZGlyPSR0b29sZXhlY2xpYmRpci8kbXVsdGlfb3NfZGlyZWN0b3J5IDs7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5ob3N0IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9jb25maWd1cmUuaG9zdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjUyNDU3Yi4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2NvbmZpZ3VyZS5ob3N0CisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotIyBjb25maWd1cmUuaG9zdAotIwotIyBUaGlzIHNoZWxsIHNjcmlwdCBoYW5kbGVzIGFsbCBob3N0IGJhc2VkIGNvbmZpZ3VyYXRpb24gZm9yIGxpYmZmaS4KLSMgCi0KLSMgVEhJUyBUQUJMRSBJUyBTT1JURUQuICBLRUVQIElUIFRIQVQgV0FZLgotY2FzZSAiJHtob3N0fSIgaW4KLSAgZnJ2Ki1lbGYpCi0gICAgTERGTEFHUz1gZWNobyAkTERGTEFHUyB8IHNlZCAicy9cLUJbXiBdKmxpYmdsb3NzXC9mcnZcLy8vImBcIC1CYHB3ZGAvLi4vbGliZ2xvc3MvZnJ2LwotICAgIDs7Ci1lc2FjCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RlcGNvbXAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RlcGNvbXAKaW5kZXggZGY4ZWVhNy4uNGViZDViMyAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kZXBjb21wCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZGVwY29tcApAQCAtMSwxMCArMSw5IEBACiAjISAvYmluL3NoCiAjIGRlcGNvbXAgLSBjb21waWxlIGEgcHJvZ3JhbSBnZW5lcmF0aW5nIGRlcGVuZGVuY2llcyBhcyBzaWRlLWVmZmVjdHMKIAotc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworc2NyaXB0dmVyc2lvbj0yMDEzLTA1LTMwLjA3OyAjIFVUQwogCi0jIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOSBGcmVlCi0jIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk5LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI4LDkgKzI3LDkgQEAKIAogY2FzZSAkMSBpbgogICAnJykKLSAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgotICAgICBleGl0IDE7Ci0gICAgIDs7CisgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgZXhpdCAxOworICAgIDs7CiAgIC1oIHwgLS1oKikKICAgICBjYXQgPDxcRU9GCiBVc2FnZTogZGVwY29tcCBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQpAQCAtNDAsMTEgKzM5LDExIEBACiAKIEVudmlyb25tZW50IHZhcmlhYmxlczoKICAgZGVwbW9kZSAgICAgRGVwZW5kZW5jeSB0cmFja2luZyBtb2RlLgotICBzb3VyY2UgICAgICBTb3VyY2UgZmlsZSByZWFkIGJ5IGBQUk9HUkFNUyBBUkdTJy4KLSAgb2JqZWN0ICAgICAgT2JqZWN0IGZpbGUgb3V0cHV0IGJ5IGBQUk9HUkFNUyBBUkdTJy4KKyAgc291cmNlICAgICAgU291cmNlIGZpbGUgcmVhZCBieSAnUFJPR1JBTVMgQVJHUycuCisgIG9iamVjdCAgICAgIE9iamVjdCBmaWxlIG91dHB1dCBieSAnUFJPR1JBTVMgQVJHUycuCiAgIERFUERJUiAgICAgIGRpcmVjdG9yeSB3aGVyZSB0byBzdG9yZSBkZXBlbmRlbmNpZXMuCiAgIGRlcGZpbGUgICAgIERlcGVuZGVuY3kgZmlsZSB0byBvdXRwdXQuCi0gIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dGluZyBkZXBlbmRlbmNpZXMuCisgIHRtcGRlcGZpbGUgIFRlbXBvcmFyeSBmaWxlIHRvIHVzZSB3aGVuIG91dHB1dHRpbmcgZGVwZW5kZW5jaWVzLgogICBsaWJ0b29sICAgICBXaGV0aGVyIGxpYnRvb2wgaXMgdXNlZCAoeWVzL25vKS4KIAogUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KQEAgLTU3LDYgKzU2LDY2IEBACiAgICAgOzsKIGVzYWMKIAorIyBHZXQgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgb2YgdGhlIGdpdmVuIHBhdGgsIGFuZCBzYXZlIGl0IGluIHRoZQorIyBnbG9iYWwgdmFyaWFibGVzICckZGlyJy4gIE5vdGUgdGhhdCB0aGlzIGRpcmVjdG9yeSBjb21wb25lbnQgd2lsbAorIyBiZSBlaXRoZXIgZW1wdHkgb3IgZW5kaW5nIHdpdGggYSAnLycgY2hhcmFjdGVyLiAgVGhpcyBpcyBkZWxpYmVyYXRlLgorc2V0X2Rpcl9mcm9tICgpCit7CisgIGNhc2UgJDEgaW4KKyAgICAqLyopIGRpcj1gZWNobyAiJDEiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYDs7CisgICAgICAqKSBkaXI9OzsKKyAgZXNhYworfQorCisjIEdldCB0aGUgc3VmZml4LXN0cmlwcGVkIGJhc2VuYW1lIG9mIHRoZSBnaXZlbiBwYXRoLCBhbmQgc2F2ZSBpdCB0aGUKKyMgZ2xvYmFsIHZhcmlhYmxlICckYmFzZScuCitzZXRfYmFzZV9mcm9tICgpCit7CisgIGJhc2U9YGVjaG8gIiQxIiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wuW14uXSokLy8nYAorfQorCisjIElmIG5vIGRlcGVuZGVuY3kgZmlsZSB3YXMgYWN0dWFsbHkgY3JlYXRlZCBieSB0aGUgY29tcGlsZXIgaW52b2NhdGlvbiwKKyMgd2Ugc3RpbGwgaGF2ZSB0byBjcmVhdGUgYSBkdW1teSBkZXBmaWxlLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUKKyMgTWFrZWZpbGUgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCittYWtlX2R1bW15X2RlcGZpbGUgKCkKK3sKKyAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKK30KKworIyBGYWN0b3Igb3V0IHNvbWUgY29tbW9uIHBvc3QtcHJvY2Vzc2luZyBvZiB0aGUgZ2VuZXJhdGVkIGRlcGZpbGUuCisjIFJlcXVpcmVzIHRoZSBhdXhpbGlhcnkgZ2xvYmFsIHZhcmlhYmxlICckdG1wZGVwZmlsZScgdG8gYmUgc2V0LgorYWl4X3Bvc3RfcHJvY2Vzc19kZXBmaWxlICgpCit7CisgICMgSWYgdGhlIGNvbXBpbGVyIGFjdHVhbGx5IG1hbmFnZWQgdG8gcHJvZHVjZSBhIGRlcGVuZGVuY3kgZmlsZSwKKyAgIyBwb3N0LXByb2Nlc3MgaXQuCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtICdmb28ubzogZGVwZW5kZW5jeS5oJy4KKyAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bworICAgICMgICAkb2JqZWN0OiBkZXBlbmRlbmN5LmgKKyAgICAjIGFuZCBvbmUgdG8gc2ltcGx5IG91dHB1dAorICAgICMgICBkZXBlbmRlbmN5Lmg6CisgICAgIyB3aGljaCBpcyBuZWVkZWQgdG8gYXZvaWQgdGhlIGRlbGV0ZWQtaGVhZGVyIHByb2JsZW0uCisgICAgeyBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiCisgICAgICBzZWQgLWUgInMsXi4qXC5bJGxvd2VyXSo6WyR0YWIgXSosLCIgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiCisgICAgfSA+ICIkZGVwZmlsZSIKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIGVsc2UKKyAgICBtYWtlX2R1bW15X2RlcGZpbGUKKyAgZmkKK30KKworIyBBIHRhYnVsYXRpb24gY2hhcmFjdGVyLgordGFiPScJJworIyBBIG5ld2xpbmUgY2hhcmFjdGVyLgorbmw9JworJworIyBDaGFyYWN0ZXIgcmFuZ2VzIG1pZ2h0IGJlIHByb2JsZW1hdGljIG91dHNpZGUgdGhlIEMgbG9jYWxlLgorIyBUaGVzZSBkZWZpbml0aW9ucyBoZWxwLgordXBwZXI9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoKK2xvd2VyPWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6CitkaWdpdHM9MDEyMzQ1Njc4OQorYWxwaGE9JHt1cHBlcn0ke2xvd2VyfQorCiBpZiB0ZXN0IC16ICIkZGVwbW9kZSIgfHwgdGVzdCAteiAiJHNvdXJjZSIgfHwgdGVzdCAteiAiJG9iamVjdCI7IHRoZW4KICAgZWNobyAiZGVwY29tcDogVmFyaWFibGVzIHNvdXJjZSwgb2JqZWN0IGFuZCBkZXBtb2RlIG11c3QgYmUgc2V0IiAxPiYyCiAgIGV4aXQgMQpAQCAtNjksNiArMTI4LDkgQEAKIAogcm0gLWYgIiR0bXBkZXBmaWxlIgogCisjIEF2b2lkIGludGVyZmVyZW5jZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuCitnY2NmbGFnPSBkYXNobWZsYWc9CisKICMgU29tZSBtb2RlcyB3b3JrIGp1c3QgbGlrZSBvdGhlciBtb2RlcywgYnV0IHVzZSBkaWZmZXJlbnQgZmxhZ3MuICBXZQogIyBwYXJhbWV0ZXJpemUgaGVyZSwgYnV0IHN0aWxsIGxpc3QgdGhlIG1vZGVzIGluIHRoZSBiaWcgY2FzZSBiZWxvdywKICMgdG8gbWFrZSBkZXBlbmQubTQgZWFzaWVyIHRvIHdyaXRlLiAgTm90ZSB0aGF0IHdlICpjYW5ub3QqIHVzZSBhIGNhc2UKQEAgLTgwLDE4ICsxNDIsMzIgQEAKIGZpCiAKIGlmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgotICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgotICAgZGFzaG1mbGFnPS14TQotICAgZGVwbW9kZT1kYXNobXN0ZG91dAorICAjIFRoaXMgaXMganVzdCBsaWtlIGRhc2htc3Rkb3V0IHdpdGggYSBkaWZmZXJlbnQgYXJndW1lbnQuCisgIGRhc2htZmxhZz0teE0KKyAgZGVwbW9kZT1kYXNobXN0ZG91dAogZmkKIAogY3lncGF0aF91PSJjeWdwYXRoIC11IC1mIC0iCiBpZiB0ZXN0ICIkZGVwbW9kZSIgPSBtc3ZjbXN5czsgdGhlbgotICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBtc3Zpc3VhbGNwcCBidXQgdy9vIGN5Z3BhdGggdHJhbnNsYXRpb24uCi0gICAjIEp1c3QgY29udmVydCB0aGUgYmFja3NsYXNoLWVzY2FwZWQgYmFja3NsYXNoZXMgdG8gc2luZ2xlIGZvcndhcmQKLSAgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAotICAgY3lncGF0aF91PSJzZWQgcyxcXFxcXFxcXCwvLGciCi0gICBkZXBtb2RlPW1zdmlzdWFsY3BwCisgICMgVGhpcyBpcyBqdXN0IGxpa2UgbXN2aXN1YWxjcHAgYnV0IHcvbyBjeWdwYXRoIHRyYW5zbGF0aW9uLgorICAjIEp1c3QgY29udmVydCB0aGUgYmFja3NsYXNoLWVzY2FwZWQgYmFja3NsYXNoZXMgdG8gc2luZ2xlIGZvcndhcmQKKyAgIyBzbGFzaGVzIHRvIHNhdGlzZnkgZGVwZW5kLm00CisgIGN5Z3BhdGhfdT0nc2VkIHMsXFxcXCwvLGcnCisgIGRlcG1vZGU9bXN2aXN1YWxjcHAKK2ZpCisKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IG1zdmM3bXN5czsgdGhlbgorICAjIFRoaXMgaXMganVzdCBsaWtlIG1zdmM3IGJ1dCB3L28gY3lncGF0aCB0cmFuc2xhdGlvbi4KKyAgIyBKdXN0IGNvbnZlcnQgdGhlIGJhY2tzbGFzaC1lc2NhcGVkIGJhY2tzbGFzaGVzIHRvIHNpbmdsZSBmb3J3YXJkCisgICMgc2xhc2hlcyB0byBzYXRpc2Z5IGRlcGVuZC5tNAorICBjeWdwYXRoX3U9J3NlZCBzLFxcXFwsLyxnJworICBkZXBtb2RlPW1zdmM3CitmaQorCitpZiB0ZXN0ICIkZGVwbW9kZSIgPSB4bGM7IHRoZW4KKyAgIyBJQk0gQy9DKysgQ29tcGlsZXJzIHhsYy94bEMgY2FuIG91dHB1dCBnY2MtbGlrZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uLgorICBnY2NmbGFnPS1xbWFrZWRlcD1nY2MsLU1GCisgIGRlcG1vZGU9Z2NjCiBmaQogCiBjYXNlICIkZGVwbW9kZSIgaW4KQEAgLTExNCw4ICsxOTAsNyBAQAogICBkb25lCiAgICIkQCIKICAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQorICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCiAgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICAgIGV4aXQgJHN0YXQKICAgZmkKQEAgLTEyMywxMyArMTk4LDE3IEBACiAgIDs7CiAKIGdjYykKKyMjIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QganVzdCBjYXRlciB0byBvYnNvc2V0ZSBwcmUtMy54IEdDQyBjb21waWxlcnMuCisjIyBidXQgYWxzbyB0byBpbi11c2UgY29tcGlsZXJzIGxpa2UgSU1CIHhsYy94bEMgYW5kIHRoZSBIUCBDIGNvbXBpbGVyLgorIyMgKHNlZSB0aGUgY29uZGl0aW9uYWwgYXNzaWdubWVudCB0byAkZ2NjZmxhZyBhYm92ZSkuCiAjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncwogIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6CiAjIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAogIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgogIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKICMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCi0jIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4KKyMjICAgLU1NLCBub3QgLU0gKGRlc3BpdGUgd2hhdCB0aGUgZG9jcyBzYXkpLiAgQWxzbywgaXQgbWlnaHQgbm90IGJlCisjIyAgIHN1cHBvcnRlZCBieSB0aGUgb3RoZXIgY29tcGlsZXJzIHdoaWNoIHVzZSB0aGUgJ2djYycgZGVwbW9kZS4KICMjIC0gVXNpbmcgLU0gZGlyZWN0bHkgbWVhbnMgcnVubmluZyB0aGUgY29tcGlsZXIgdHdpY2UgKGV2ZW4gd29yc2UKICMjICAgdGhhbiByZW5hbWluZykuCiAgIGlmIHRlc3QgLXogIiRnY2NmbGFnIjsgdGhlbgpAQCAtMTM3LDMxICsyMTYsMzEgQEAKICAgZmkKICAgIiRAIiAtV3AsIiRnY2NmbGFnJHRtcGRlcGZpbGUiCiAgIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gIGVsc2UKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgogICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgICBleGl0ICRzdGF0CiAgIGZpCiAgIHJtIC1mICIkZGVwZmlsZSIKICAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKLSAgYWxwaGE9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egotIyMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZSBsZXR0ZXJzLgorICAjIFRoZSBzZWNvbmQgLWUgZXhwcmVzc2lvbiBoYW5kbGVzIERPUy1zdHlsZSBmaWxlIG5hbWVzIHdpdGggZHJpdmUKKyAgIyBsZXR0ZXJzLgogICBzZWQgLWUgJ3MvXlteOl0qOiAvIC8nIFwKICAgICAgIC1lICdzL15bJyRhbHBoYSddOlwvW146XSo6IC8gLycgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKLSMjIFRoaXMgbmV4dCBwaWVjZSBvZiBtYWdpYyBhdm9pZHMgdGhlIGBkZWxldGVkIGhlYWRlciBmaWxlJyBwcm9ibGVtLgorIyMgVGhpcyBuZXh0IHBpZWNlIG9mIG1hZ2ljIGF2b2lkcyB0aGUgImRlbGV0ZWQgaGVhZGVyIGZpbGUiIHByb2JsZW0uCiAjIyBUaGUgcHJvYmxlbSBpcyB0aGF0IHdoZW4gYSBoZWFkZXIgZmlsZSB3aGljaCBhcHBlYXJzIGluIGEgLlAgZmlsZQogIyMgaXMgZGVsZXRlZCwgdGhlIGRlcGVuZGVuY3kgY2F1c2VzIG1ha2UgdG8gZGllIChiZWNhdXNlIHRoZXJlIGlzCiAjIyB0eXBpY2FsbHkgbm8gd2F5IHRvIHJlYnVpbGQgdGhlIGhlYWRlcikuICBXZSBhdm9pZCB0aGlzIGJ5IGFkZGluZwogIyMgZHVtbXkgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGhlYWRlciBmaWxlLiAgVG9vIGJhZCBnY2MgZG9lc24ndCBkbwogIyMgdGhpcyBmb3IgdXMgZGlyZWN0bHkuCi0gIHRyICcgJyAnCi0nIDwgIiR0bXBkZXBmaWxlIiB8Ci0jIyBTb21lIHZlcnNpb25zIG9mIGdjYyBwdXQgYSBzcGFjZSBiZWZvcmUgdGhlIGA6Jy4gIE9uIHRoZSB0aGVvcnkKKyMjIFNvbWUgdmVyc2lvbnMgb2YgZ2NjIHB1dCBhIHNwYWNlIGJlZm9yZSB0aGUgJzonLiAgT24gdGhlIHRoZW9yeQogIyMgdGhhdCB0aGUgc3BhY2UgbWVhbnMgc29tZXRoaW5nLCB3ZSBhZGQgYSBzcGFjZSB0byB0aGUgb3V0cHV0IGFzCi0jIyB3ZWxsLgorIyMgd2VsbC4gIGhwIGRlcG1vZGUgYWxzbyBhZGRzIHRoYXQgc3BhY2UsIGJ1dCBhbHNvIHByZWZpeGVzIHRoZSBWUEFUSAorIyMgdG8gdGhlIG9iamVjdC4gIFRha2UgY2FyZSB0byBub3QgcmVwZWF0IGl0IGluIHRoZSBvdXRwdXQuCiAjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgogIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICJzfC4qJG9iamVjdCR8fCIgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICA7OwogCkBAIC0xNzksOCArMjU4LDcgQEAKICAgICAiJEAiIC1NRHVwZGF0ZSAiJHRtcGRlcGZpbGUiCiAgIGZpCiAgIHN0YXQ9JD8KLSAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gIGVsc2UKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgogICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgICBleGl0ICRzdGF0CiAgIGZpCkBAIC0xODgsNDMgKzI2Niw0MSBAQAogCiAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbiAgIyB5ZXMsIHRoZSBzb3VyY2VmaWxlIGRlcGVuZCBvbiBvdGhlciBmaWxlcwogICAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0KICAgICAjIENsaXAgb2ZmIHRoZSBpbml0aWFsIGVsZW1lbnQgKHRoZSBkZXBlbmRlbnQpLiAgRG9uJ3QgdHJ5IHRvIGJlCiAgICAgIyBjbGV2ZXIgYW5kIHJlcGxhY2UgdGhpcyB3aXRoIHNlZCBjb2RlLCBhcyBJUklYIHNlZCB3b24ndCBoYW5kbGUKICAgICAjIGxpbmVzIHdpdGggbW9yZSB0aGFuIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgKDQwOTYgaW4KICAgICAjIElSSVggNi4yIHNlZCwgODE5MiBpbiBJUklYIDYuNSkuICBXZSBhbHNvIHJlbW92ZSBjb21tZW50IGxpbmVzOwotICAgICMgdGhlIElSSVggY2MgYWRkcyBjb21tZW50cyBsaWtlIGAjOmZlYycgdG8gdGhlIGVuZCBvZiB0aGUKKyAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSAnIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCiAgICAgIyBkZXBlbmRlbmN5IGxpbmUuCi0gICAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIFwKLSAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgfCBcCi0gICAgdHIgJwotJyAnICcgPj4gIiRkZXBmaWxlIgorICAgIHRyICcgJyAiJG5sIiA8ICIkdG1wZGVwZmlsZSIgXAorICAgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIFwKKyAgICAgIHwgdHIgIiRubCIgJyAnID4+ICIkZGVwZmlsZSIKICAgICBlY2hvID4+ICIkZGVwZmlsZSIKLQogICAgICMgVGhlIHNlY29uZCBwYXNzIGdlbmVyYXRlcyBhIGR1bW15IGVudHJ5IGZvciBlYWNoIGhlYWRlciBmaWxlLgotICAgIHRyICcgJyAnCi0nIDwgIiR0bXBkZXBmaWxlIiBcCi0gICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgLWUgJ3MvJC86LycgXAotICAgPj4gIiRkZXBmaWxlIgorICAgIHRyICcgJyAiJG5sIiA8ICIkdG1wZGVwZmlsZSIgXAorICAgICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKKyAgICAgID4+ICIkZGVwZmlsZSIKICAgZWxzZQotICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0Ci0gICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCi0gICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KLSAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICAgIG1ha2VfZHVtbXlfZGVwZmlsZQogICBmaQogICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgIDs7CiAKK3hsYykKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKIGFpeCkKICAgIyBUaGUgQyBmb3IgQUlYIENvbXBpbGVyIHVzZXMgLU0gYW5kIG91dHB1dHMgdGhlIGRlcGVuZGVuY2llcwogICAjIGluIGEgLnUgZmlsZS4gIEluIG9sZGVyIHZlcnNpb25zLCB0aGlzIGZpbGUgYWx3YXlzIGxpdmVzIGluIHRoZQotICAjIGN1cnJlbnQgZGlyZWN0b3J5LiAgQWxzbywgdGhlIEFJWCBjb21waWxlciBwdXRzIGAkb2JqZWN0OicgYXQgdGhlCisgICMgY3VycmVudCBkaXJlY3RvcnkuICBBbHNvLCB0aGUgQUlYIGNvbXBpbGVyIHB1dHMgJyRvYmplY3Q6JyBhdCB0aGUKICAgIyBzdGFydCBvZiBlYWNoIGxpbmU7ICRvYmplY3QgZG9lc24ndCBoYXZlIGRpcmVjdG9yeSBpbmZvcm1hdGlvbi4KICAgIyBWZXJzaW9uIDYgdXNlcyB0aGUgZGlyZWN0b3J5IGluIGJvdGggY2FzZXMuCi0gIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCi0gIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQotICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgIHNldF9kaXJfZnJvbSAiJG9iamVjdCIKKyAgc2V0X2Jhc2VfZnJvbSAiJG9iamVjdCIKICAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCiAgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKICAgICB0bXBkZXBmaWxlMj0kYmFzZS51CkBAIC0yMzcsOSArMzEzLDcgQEAKICAgICAiJEAiIC1NCiAgIGZpCiAgIHN0YXQ9JD8KLQotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQorICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCiAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKICAgICBleGl0ICRzdGF0CiAgIGZpCkBAIC0yNDgsNDQgKzMyMiwxMDAgQEAKICAgZG8KICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKICAgZG9uZQotICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KLSAgICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJy4KLSAgICAjIERvIHR3byBwYXNzZXMsIG9uZSB0byBqdXN0IGNoYW5nZSB0aGVzZSB0bwotICAgICMgYCRvYmplY3Q6IGRlcGVuZGVudC5oJyBhbmQgb25lIHRvIHNpbXBseSBgZGVwZW5kZW50Lmg6Jy4KLSAgICBzZWQgLWUgInMsXi4qXC5bYS16XSo6LCRvYmplY3Q6LCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgotICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KLSAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKLSAgZWxzZQotICAgICMgVGhlIHNvdXJjZWZpbGUgZG9lcyBub3QgY29udGFpbiBhbnkgZGVwZW5kZW5jaWVzLCBzbyBqdXN0Ci0gICAgIyBzdG9yZSBhIGR1bW15IGNvbW1lbnQgbGluZSwgdG8gYXZvaWQgZXJyb3JzIHdpdGggdGhlIE1ha2VmaWxlCi0gICAgIyAiaW5jbHVkZSBiYXNlbmFtZS5QbG8iIHNjaGVtZS4KLSAgICBlY2hvICIjZHVtbXkiID4gIiRkZXBmaWxlIgorICBhaXhfcG9zdF9wcm9jZXNzX2RlcGZpbGUKKyAgOzsKKwordGNjKQorICAjIHRjYyAoVGlueSBDIENvbXBpbGVyKSB1bmRlcnN0YW5kICctTUQgLU1GIGZpbGUnIHNpbmNlIHZlcnNpb24gMC45LjI2CisgICMgRklYTUU6IFRoYXQgdmVyc2lvbiBzdGlsbCB1bmRlciBkZXZlbG9wbWVudCBhdCB0aGUgbW9tZW50IG9mIHdyaXRpbmcuCisgICMgICAgICAgIE1ha2UgdGhhdCB0aGlzIHN0YXRlbWVudCByZW1haW5zIHRydWUgYWxzbyBmb3Igc3RhYmxlLCByZWxlYXNlZAorICAjICAgICAgICB2ZXJzaW9ucy4KKyAgIyBJdCB3aWxsIHdyYXAgbGluZXMgKGRvZXNuJ3QgbWF0dGVyIHdoZXRoZXIgbG9uZyBvciBzaG9ydCkgd2l0aCBhCisgICMgdHJhaWxpbmcgJ1wnLCBhcyBpbjoKKyAgIworICAjICAgZm9vLm8gOiBcCisgICMgICAgZm9vLmMgXAorICAjICAgIGZvby5oIFwKKyAgIworICAjIEl0IHdpbGwgcHV0IGEgdHJhaWxpbmcgJ1wnIGV2ZW4gb24gdGhlIGxhc3QgbGluZSwgYW5kIHdpbGwgdXNlIGxlYWRpbmcKKyAgIyBzcGFjZXMgcmF0aGVyIHRoYW4gbGVhZGluZyB0YWJzIChhdCBsZWFzdCBzaW5jZSBpdHMgY29tbWl0IDAzOTRjYWY3CisgICMgIkVtaXQgc3BhY2VzIGZvciAtTUQiKS4KKyAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKICAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbm9uLWVtcHR5IGxpbmUgaXMgb2YgdGhlIGZvcm0gJ2Zvby5vIDogXCcgb3IgJyBkZXAuaCBcJy4KKyAgIyBXZSBoYXZlIHRvIGNoYW5nZSBsaW5lcyBvZiB0aGUgZmlyc3Qga2luZCB0byAnJG9iamVjdDogXCcuCisgIHNlZCAtZSAic3wuKjp8JG9iamVjdCA6fCIgPCAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAjIEFuZCBmb3IgZWFjaCBsaW5lIG9mIHRoZSBzZWNvbmQga2luZCwgd2UgaGF2ZSB0byBlbWl0IGEgJ2RlcC5oOicKKyAgIyBkdW1teSBkZXBlbmRlbmN5LCB0byBhdm9pZCB0aGUgZGVsZXRlZC1oZWFkZXIgcHJvYmxlbS4KKyAgc2VkIC1uIC1lICdzfF4gICpcKC4qXCkgKlxcJHxcMTp8cCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKICAgcm0gLWYgIiR0bXBkZXBmaWxlIgogICA7OwogCi1pY2MpCi0gICMgSW50ZWwncyBDIGNvbXBpbGVyIHVuZGVyc3RhbmRzIGAtTUQgLU1GIGZpbGUnLiAgSG93ZXZlciBvbgotICAjICAgIGljYyAtTUQgLU1GIGZvby5kIC1jIC1vIHN1Yi9mb28ubyBzdWIvZm9vLmMKLSAgIyBJQ0MgNy4wIHdpbGwgZmlsbCBmb28uZCB3aXRoIHNvbWV0aGluZyBsaWtlCi0gICMgICAgZm9vLm86IHN1Yi9mb28uYwotICAjICAgIGZvby5vOiBzdWIvZm9vLmgKLSAgIyB3aGljaCBpcyB3cm9uZy4gIFdlIHdhbnQ6Ci0gICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmMKLSAgIyAgICBzdWIvZm9vLm86IHN1Yi9mb28uaAotICAjICAgIHN1Yi9mb28uYzoKLSAgIyAgICBzdWIvZm9vLmg6Ci0gICMgSUNDIDcuMSB3aWxsIG91dHB1dAorIyMgVGhlIG9yZGVyIG9mIHRoaXMgb3B0aW9uIGluIHRoZSBjYXNlIHN0YXRlbWVudCBpcyBpbXBvcnRhbnQsIHNpbmNlIHRoZQorIyMgc2hlbGwgY29kZSBpbiBjb25maWd1cmUgd2lsbCB0cnkgZWFjaCBvZiB0aGVzZSBmb3JtYXRzIGluIHRoZSBvcmRlcgorIyMgbGlzdGVkIGluIHRoaXMgZmlsZS4gIEEgcGxhaW4gJy1NRCcgb3B0aW9uIHdvdWxkIGJlIHVuZGVyc3Rvb2QgYnkgbWFueQorIyMgY29tcGlsZXJzLCBzbyB3ZSBtdXN0IGVuc3VyZSB0aGlzIGNvbWVzIGFmdGVyIHRoZSBnY2MgYW5kIGljYyBvcHRpb25zLgorcGdjYykKKyAgIyBQb3J0bGFuZCdzIEMgY29tcGlsZXIgdW5kZXJzdGFuZHMgJy1NRCcuCisgICMgV2lsbCBhbHdheXMgb3V0cHV0IGRlcHMgdG8gJ2ZpbGUuZCcgd2hlcmUgZmlsZSBpcyB0aGUgcm9vdCBuYW1lIG9mIHRoZQorICAjIHNvdXJjZSBmaWxlIHVuZGVyIGNvbXBpbGF0aW9uLCBldmVuIGlmIGZpbGUgcmVzaWRlcyBpbiBhIHN1YmRpcmVjdG9yeS4KKyAgIyBUaGUgb2JqZWN0IGZpbGUgbmFtZSBkb2VzIG5vdCBhZmZlY3QgdGhlIG5hbWUgb2YgdGhlICcuZCcgZmlsZS4KKyAgIyBwZ2NjIDEwLjIgd2lsbCBvdXRwdXQKICAgIyAgICBmb28ubzogc3ViL2Zvby5jIHN1Yi9mb28uaAotICAjIGFuZCB3aWxsIHdyYXAgbG9uZyBsaW5lcyB1c2luZyBcIDoKKyAgIyBhbmQgd2lsbCB3cmFwIGxvbmcgbGluZXMgdXNpbmcgJ1wnIDoKICAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCiAgICMgICAgIHN1Yi9mb28uaCAuLi4gXAogICAjICAgICAuLi4KKyAgc2V0X2Rpcl9mcm9tICIkb2JqZWN0IgorICAjIFVzZSB0aGUgc291cmNlLCBub3QgdGhlIG9iamVjdCwgdG8gZGV0ZXJtaW5lIHRoZSBiYXNlIG5hbWUsIHNpbmNlCisgICMgdGhhdCdzIHNhZGx5IHdoYXQgcGdjYyB3aWxsIGRvIHRvby4KKyAgc2V0X2Jhc2VfZnJvbSAiJHNvdXJjZSIKKyAgdG1wZGVwZmlsZT0kYmFzZS5kCiAKLSAgIiRAIiAtTUQgLU1GICIkdG1wZGVwZmlsZSIKLSAgc3RhdD0kPwotICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKLSAgZWxzZQorICAjIEZvciBwcm9qZWN0cyB0aGF0IGJ1aWxkIHRoZSBzYW1lIHNvdXJjZSBmaWxlIHR3aWNlIGludG8gZGlmZmVyZW50IG9iamVjdAorICAjIGZpbGVzLCB0aGUgcGdjYyBhcHByb2FjaCBvZiB1c2luZyB0aGUgKnNvdXJjZSogZmlsZSByb290IG5hbWUgY2FuIGNhdXNlCisgICMgcHJvYmxlbXMgaW4gcGFyYWxsZWwgYnVpbGRzLiAgVXNlIGEgbG9ja2luZyBzdHJhdGVneSB0byBhdm9pZCBzdG9tcGluZyBvbgorICAjIHRoZSBzYW1lICR0bXBkZXBmaWxlLgorICBsb2NrZGlyPSRiYXNlLmQtbG9jaworICB0cmFwICIKKyAgICBlY2hvICckMDogY2F1Z2h0IHNpZ25hbCwgY2xlYW5pbmcgdXAuLi4nID4mMgorICAgIHJtZGlyICckbG9ja2RpcicKKyAgICBleGl0IDEKKyAgIiAxIDIgMTMgMTUKKyAgbnVtdHJpZXM9MTAwCisgIGk9JG51bXRyaWVzCisgIHdoaWxlIHRlc3QgJGkgLWd0IDA7IGRvCisgICAgIyBta2RpciBpcyBhIHBvcnRhYmxlIHRlc3QtYW5kLXNldC4KKyAgICBpZiBta2RpciAiJGxvY2tkaXIiIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAjIFRoaXMgcHJvY2VzcyBhY3F1aXJlZCB0aGUgbG9jay4KKyAgICAgICIkQCIgLU1ECisgICAgICBzdGF0PSQ/CisgICAgICAjIFJlbGVhc2UgdGhlIGxvY2suCisgICAgICBybWRpciAiJGxvY2tkaXIiCisgICAgICBicmVhaworICAgIGVsc2UKKyAgICAgICMgSWYgdGhlIGxvY2sgaXMgYmVpbmcgaGVsZCBieSBhIGRpZmZlcmVudCBwcm9jZXNzLCB3YWl0CisgICAgICAjIHVudGlsIHRoZSB3aW5uaW5nIHByb2Nlc3MgaXMgZG9uZSBvciB3ZSB0aW1lb3V0LgorICAgICAgd2hpbGUgdGVzdCAtZCAiJGxvY2tkaXIiICYmIHRlc3QgJGkgLWd0IDA7IGRvCisgICAgICAgIHNsZWVwIDEKKyAgICAgICAgaT1gZXhwciAkaSAtIDFgCisgICAgICBkb25lCisgICAgZmkKKyAgICBpPWBleHByICRpIC0gMWAKKyAgZG9uZQorICB0cmFwIC0gMSAyIDEzIDE1CisgIGlmIHRlc3QgJGkgLWxlIDA7IHRoZW4KKyAgICBlY2hvICIkMDogZmFpbGVkIHRvIGFjcXVpcmUgbG9jayBhZnRlciAkbnVtdHJpZXMgYXR0ZW1wdHMiID4mMgorICAgIGVjaG8gIiQwOiBjaGVjayBsb2NrZGlyICckbG9ja2RpciciID4mMgorICAgIGV4aXQgMQorICBmaQorCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KICAgICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgICAgZXhpdCAkc3RhdAogICBmaQpAQCAtMjk3LDggKzQyNyw4IEBACiAgIHNlZCAicyxeW146XSo6LCRvYmplY3QgOiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKICAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgogICAjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gIHNlZCAncyxeW146XSo6IFwoLipcKSQsXDEsO3MvXlxcJC8vOy9eJC9kOy86JC9kJyA8ICIkdG1wZGVwZmlsZSIgfAotICAgIHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy8kLyA6LycgPj4gIiRkZXBmaWxlIgogICBybSAtZiAiJHRtcGRlcGZpbGUiCiAgIDs7CiAKQEAgLTMwOSw5ICs0MzksOCBAQAogICAjICdmb28uZCcsIHdoaWNoIGxhbmRzIG5leHQgdG8gdGhlIG9iamVjdCBmaWxlLCB3aGVyZXZlciB0aGF0CiAgICMgaGFwcGVucyB0byBiZS4KICAgIyBNdWNoIG9mIHRoaXMgaXMgc2ltaWxhciB0byB0aGUgdHJ1NjQgY2FzZTsgc2VlIGNvbW1lbnRzIHRoZXJlLgotICBkaXI9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfC9bXi9dKiR8L3wnYAotICB0ZXN0ICJ4JGRpciIgPSAieCRvYmplY3QiICYmIGRpcj0KLSAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICBzZXRfZGlyX2Zyb20gICIkb2JqZWN0IgorICBzZXRfYmFzZV9mcm9tICIkb2JqZWN0IgogICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KICAgICB0bXBkZXBmaWxlMT0kZGlyJGJhc2UuZAogICAgIHRtcGRlcGZpbGUyPSRkaXIubGlicy8kYmFzZS5kCkBAIC0zMjIsOCArNDUxLDcgQEAKICAgICAiJEAiICtNYWtlZAogICBmaQogICBzdGF0PSQ/Ci0gIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgotICBlbHNlCisgIGlmIHRlc3QgJHN0YXQgLW5lIDA7IHRoZW4KICAgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIKICAgICAgZXhpdCAkc3RhdAogICBmaQpAQCAtMzMzLDc3ICs0NjEsMTA3IEBACiAgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCiAgIGRvbmUKICAgaWYgdGVzdCAtZiAiJHRtcGRlcGZpbGUiOyB0aGVuCi0gICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCi0gICAgIyBBZGQgYGRlcGVuZGVudC5oOicgbGluZXMuCisgICAgc2VkIC1lICJzLF4uKlwuWyRsb3dlcl0qOiwkb2JqZWN0OiwiICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgIyBBZGQgJ2RlcGVuZGVudC5oOicgbGluZXMuCiAgICAgc2VkIC1uZSAnMiwkewotCSAgICAgICBzL14gKi8vCi0JICAgICAgIHMvIFxcKiQvLwotCSAgICAgICBzLyQvOi8KLQkgICAgICAgcAotCSAgICAgfScgIiR0bXBkZXBmaWxlIiA+PiAiJGRlcGZpbGUiCisgICAgICAgICAgICAgICBzL14gKi8vCisgICAgICAgICAgICAgICBzLyBcXCokLy8KKyAgICAgICAgICAgICAgIHMvJC86LworICAgICAgICAgICAgICAgcAorICAgICAgICAgICAgIH0nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgogICBlbHNlCi0gICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgICBtYWtlX2R1bW15X2RlcGZpbGUKICAgZmkKICAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUyIgogICA7OwogCiB0cnU2NCkKLSAgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKLSAgICMgZWZmZWN0LiAgYGNjIC1NRCAtbyBmb28ubyAuLi4nIHB1dHMgdGhlIGRlcGVuZGVuY2llcyBpbnRvIGBmb28uby5kJy4KLSAgICMgQXQgbGVhc3Qgb24gQWxwaGEvUmVkaGF0IDYuMSwgQ29tcGFxIENDQyBWNi4yLTUwNCBzZWVtcyB0byBwdXQKLSAgICMgZGVwZW5kZW5jaWVzIGluIGBmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgotICAgIyBTdWJkaXJlY3RvcmllcyBhcmUgcmVzcGVjdGVkLgotICAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKLSAgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQotICAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorICAjIFRoZSBUcnU2NCBjb21waWxlciB1c2VzIC1NRCB0byBnZW5lcmF0ZSBkZXBlbmRlbmNpZXMgYXMgYSBzaWRlCisgICMgZWZmZWN0LiAgJ2NjIC1NRCAtbyBmb28ubyAuLi4nIHB1dHMgdGhlIGRlcGVuZGVuY2llcyBpbnRvICdmb28uby5kJy4KKyAgIyBBdCBsZWFzdCBvbiBBbHBoYS9SZWRoYXQgNi4xLCBDb21wYXEgQ0NDIFY2LjItNTA0IHNlZW1zIHRvIHB1dAorICAjIGRlcGVuZGVuY2llcyBpbiAnZm9vLmQnIGluc3RlYWQsIHNvIHdlIGNoZWNrIGZvciB0aGF0IHRvby4KKyAgIyBTdWJkaXJlY3RvcmllcyBhcmUgcmVzcGVjdGVkLgorICBzZXRfZGlyX2Zyb20gICIkb2JqZWN0IgorICBzZXRfYmFzZV9mcm9tICIkb2JqZWN0IgogCi0gICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KLSAgICAgICMgV2l0aCBUcnU2NCBjYywgc2hhcmVkIG9iamVjdHMgY2FuIGFsc28gYmUgdXNlZCB0byBtYWtlIGEKLSAgICAgICMgc3RhdGljIGxpYnJhcnkuICBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGluIGxpYnRvb2wgMS40IHNlcmllcyB0bwotICAgICAgIyBoYW5kbGUgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgaW4gYSBzaW5nbGUgY29tcGlsYXRpb24uCi0gICAgICAjIFdpdGggbGlidG9vbCAxLjQsIGRlcGVuZGVuY2llcyB3ZXJlIG91dHB1dCBpbiAkZGlyLmxpYnMvJGJhc2UubG8uZC4KLSAgICAgICMKLSAgICAgICMgV2l0aCBsaWJ0b29sIDEuNSB0aGlzIGV4Y2VwdGlvbiB3YXMgcmVtb3ZlZCwgYW5kIGxpYnRvb2wgbm93Ci0gICAgICAjIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlIHR3bwotICAgICAgIyBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAotICAgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQotICAgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgotICAgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKLSAgICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCi0gICAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KLSAgICAgIHRtcGRlcGZpbGUxPSRkaXIubGlicy8kYmFzZS5sby5kICAgIyBsaWJ0b29sIDEuNAotICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41Ci0gICAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgbGlidG9vbCAxLjUKLSAgICAgIHRtcGRlcGZpbGU0PSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0Ci0gICAgICAiJEAiIC1XYywtTUQKLSAgIGVsc2UKLSAgICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQKLSAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCi0gICAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAotICAgICAgdG1wZGVwZmlsZTQ9JGRpciRiYXNlLmQKLSAgICAgICIkQCIgLU1ECi0gICBmaQorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAjIExpYnRvb2wgZ2VuZXJhdGVzIDIgc2VwYXJhdGUgb2JqZWN0cyBmb3IgdGhlIDIgbGlicmFyaWVzLiAgVGhlc2UKKyAgICAjIHR3byBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAorICAgICMgaW4gJGRpciRiYXNlLm8uZC4gIFdlIGhhdmUgdG8gY2hlY2sgZm9yIGJvdGggZmlsZXMsIGJlY2F1c2UKKyAgICAjIG9uZSBvZiB0aGUgdHdvIGNvbXBpbGF0aW9ucyBjYW4gYmUgZGlzYWJsZWQuICBXZSBzaG91bGQgcHJlZmVyCisgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKKyAgICAjIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB3aGVuIC5saWJzLyBpcyBkZWxldGVkLCB3aGlsZSBpZ25vcmluZworICAgICMgdGhlIGZvcm1lciB3b3VsZCBjYXVzZSBhIGRpc3RjbGVhbmNoZWNrIHBhbmljLgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQgICAgICAgICAgIyBsaWJ0b29sIDEuNQorICAgIHRtcGRlcGZpbGUyPSRkaXIubGlicy8kYmFzZS5vLmQgICAgIyBMaWtld2lzZS4KKyAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2UuZCAgICAgICMgQ29tcGFxIENDQyBWNi4yLTUwNAorICAgICIkQCIgLVdjLC1NRAorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLmQKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UuZAorICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS5kCisgICAgIiRAIiAtTUQKKyAgZmkKIAotICAgc3RhdD0kPwotICAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6Ci0gICBlbHNlCi0gICAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgotICAgICAgZXhpdCAkc3RhdAotICAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1uZSAwOyB0aGVuCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlMSIgIiR0bXBkZXBmaWxlMiIgIiR0bXBkZXBmaWxlMyIKKyAgICBleGl0ICRzdGF0CisgIGZpCiAKLSAgIGZvciB0bXBkZXBmaWxlIGluICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCi0gICBkbwotICAgICB0ZXN0IC1mICIkdG1wZGVwZmlsZSIgJiYgYnJlYWsKLSAgIGRvbmUKLSAgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgotICAgICAgc2VkIC1lICJzLF4uKlwuW2Etel0qOiwkb2JqZWN0OiwiIDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgICAgICMgVGhhdCdzIGEgdGFiIGFuZCBhIHNwYWNlIGluIHRoZSBbXS4KLSAgICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgotICAgZWxzZQotICAgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKLSAgIGZpCi0gICBybSAtZiAiJHRtcGRlcGZpbGUiCi0gICA7OworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgICMgU2FtZSBwb3N0LXByb2Nlc3NpbmcgdGhhdCBpcyByZXF1aXJlZCBmb3IgQUlYIG1vZGUuCisgIGFpeF9wb3N0X3Byb2Nlc3NfZGVwZmlsZQorICA7OworCittc3ZjNykKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgc2hvd0luY2x1ZGVzPS1XYywtc2hvd0luY2x1ZGVzCisgIGVsc2UKKyAgICBzaG93SW5jbHVkZXM9LXNob3dJbmNsdWRlcworICBmaQorICAiJEAiICRzaG93SW5jbHVkZXMgPiAiJHRtcGRlcGZpbGUiCisgIHN0YXQ9JD8KKyAgZ3JlcCAtdiAnXk5vdGU6IGluY2x1ZGluZyBmaWxlOiAnICIkdG1wZGVwZmlsZSIKKyAgaWYgdGVzdCAkc3RhdCAtbmUgMDsgdGhlbgorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgIyBUaGUgZmlyc3Qgc2VkIHByb2dyYW0gYmVsb3cgZXh0cmFjdHMgdGhlIGZpbGUgbmFtZXMgYW5kIGVzY2FwZXMKKyAgIyBiYWNrc2xhc2hlcyBmb3IgY3lncGF0aC4gIFRoZSBzZWNvbmQgc2VkIHByb2dyYW0gb3V0cHV0cyB0aGUgZmlsZQorICAjIG5hbWUgd2hlbiByZWFkaW5nLCBidXQgYWxzbyBhY2N1bXVsYXRlcyBhbGwgaW5jbHVkZSBmaWxlcyBpbiB0aGUKKyAgIyBob2xkIGJ1ZmZlciBpbiBvcmRlciB0byBvdXRwdXQgdGhlbSBhZ2FpbiBhdCB0aGUgZW5kLiAgVGhpcyBvbmx5CisgICMgd29ya3Mgd2l0aCBzZWQgaW1wbGVtZW50YXRpb25zIHRoYXQgY2FuIGhhbmRsZSBsYXJnZSBidWZmZXJzLgorICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uICcKKy9eTm90ZTogaW5jbHVkaW5nIGZpbGU6ICAqXCguKlwpLyB7CisgIHMvL1wxLworICBzL1xcL1xcXFwvZworICBwCit9JyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11IHwgc2VkIC1uICcKK3MvIC9cXCAvZworcy9cKC4qXCkvJyIkdGFiIidcMSBcXC9wCitzLy5cKC4qXCkgXFwvXDE6LworSAorJCB7CisgIHMvLiovJyIkdGFiIicvCisgIEcKKyAgcAorfScgPj4gIiRkZXBmaWxlIgorICBlY2hvID4+ICIkZGVwZmlsZSIgIyBtYWtlIHN1cmUgdGhlIGZyYWdtZW50IGRvZXNuJ3QgZW5kIHdpdGggYSBiYWNrc2xhc2gKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCittc3ZjN21zeXMpCisgICMgVGhpcyBjYXNlIGV4aXN0cyBvbmx5IHRvIGxldCBkZXBlbmQubTQgZG8gaXRzIHdvcmsuICBJdCB3b3JrcyBieQorICAjIGxvb2tpbmcgYXQgdGhlIHRleHQgb2YgdGhpcyBzY3JpcHQuICBUaGlzIGNhc2Ugd2lsbCBuZXZlciBiZSBydW4sCisgICMgc2luY2UgaXQgaXMgY2hlY2tlZCBmb3IgYWJvdmUuCisgIGV4aXQgMQorICA7OwogCiAjbm9zaWRlZWZmZWN0KQogICAjIFRoaXMgY29tbWVudCBhYm92ZSBpcyB1c2VkIGJ5IGF1dG9tYWtlIHRvIHRlbGwgc2lkZS1lZmZlY3QKQEAgLTQyMiw3ICs1ODAsNyBAQAogICAgIHNoaWZ0CiAgIGZpCiAKLSAgIyBSZW1vdmUgYC1vICRvYmplY3QnLgorICAjIFJlbW92ZSAnLW8gJG9iamVjdCcuCiAgIElGUz0iICIKICAgZm9yIGFyZwogICBkbwpAQCAtNDQyLDE4ICs2MDAsMTggQEAKICAgZG9uZQogCiAgIHRlc3QgLXogIiRkYXNobWZsYWciICYmIGRhc2htZmxhZz0tTQotICAjIFJlcXVpcmUgYXQgbGVhc3QgdHdvIGNoYXJhY3RlcnMgYmVmb3JlIHNlYXJjaGluZyBmb3IgYDonCisgICMgUmVxdWlyZSBhdCBsZWFzdCB0d28gY2hhcmFjdGVycyBiZWZvcmUgc2VhcmNoaW5nIGZvciAnOicKICAgIyBpbiB0aGUgdGFyZ2V0IG5hbWUuICBUaGlzIGlzIHRvIGNvcGUgd2l0aCBET1Mtc3R5bGUgZmlsZW5hbWVzOgotICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzIGBjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCBgYycgb3RoZXJ3aXNlLgorICAjIGEgZGVwZW5kZW5jeSBzdWNoIGFzICdjOi9mb28vYmFyJyBjb3VsZCBiZSBzZWVuIGFzIHRhcmdldCAnYycgb3RoZXJ3aXNlLgogICAiJEAiICRkYXNobWZsYWcgfAotICAgIHNlZCAnczpeWyAgXSpbXjogXVteOl1bXjpdKlw6WyAgICBdKjonIiRvYmplY3QiJ1w6IDonID4gIiR0bXBkZXBmaWxlIgorICAgIHNlZCAic3xeWyR0YWIgXSpbXjokdGFiIF1bXjpdW146XSo6WyR0YWIgXSp8JG9iamVjdDogfCIgPiAiJHRtcGRlcGZpbGUiCiAgIHJtIC1mICIkZGVwZmlsZSIKICAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgdHIgJyAnICcKLScgPCAiJHRtcGRlcGZpbGUiIHwgXAotIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KLSMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCi0gICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIHNlZCBpbnZvY2F0aW9uCisgICMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgdHIgJyAnICIkbmwiIDwgIiR0bXBkZXBmaWxlIiBcCisgICAgfCBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgXAorICAgIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCiAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgOzsKIApAQCAtNTAzLDEyICs2NjEsMTUgQEAKICAgdG91Y2ggIiR0bXBkZXBmaWxlIgogICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCiAgIHJtIC1mICIkZGVwZmlsZSIKLSAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKLSAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIHwgdHIgJyAnICcKLScgfCBcCi0jIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgotIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KLSAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgIyBtYWtlZGVwZW5kIG1heSBwcmVwZW5kIHRoZSBWUEFUSCBmcm9tIHRoZSBzb3VyY2UgZmlsZSBuYW1lIHRvIHRoZSBvYmplY3QuCisgICMgTm8gbmVlZCB0byByZWdleC1lc2NhcGUgJG9iamVjdCwgZXhjZXNzIG1hdGNoaW5nIG9mICcuJyBpcyBoYXJtbGVzcy4KKyAgc2VkICJzfF4uKlwoJG9iamVjdCAqOlwpfFwxfCIgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoZSBsYXN0IGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJzEsMmQnICIkdG1wZGVwZmlsZSIgXAorICAgIHwgdHIgJyAnICIkbmwiIFwKKyAgICB8IHNlZCAtZSAncy9eXFwkLy8nIC1lICcvXiQvZCcgLWUgJy86JC9kJyBcCisgICAgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKICAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhawogICA7OwogCkBAIC01MjUsNyArNjg2LDcgQEAKICAgICBzaGlmdAogICBmaQogCi0gICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgIyBSZW1vdmUgJy1vICRvYmplY3QnLgogICBJRlM9IiAiCiAgIGZvciBhcmcKICAgZG8KQEAgLTU0NCwxMCArNzA1LDEwIEBACiAgICAgZXNhYwogICBkb25lCiAKLSAgIiRAIiAtRSB8Ci0gICAgc2VkIC1uIC1lICcvXiMgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKLSAgICAgICAtZSAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgfAotICAgIHNlZCAnJCBzOiBcXCQ6OicgPiAiJHRtcGRlcGZpbGUiCisgICIkQCIgLUUgXAorICAgIHwgc2VkIC1uIC1lICcvXiMgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIFwKKyAgICAgICAgICAgICAtZSAnL14jbGluZSBbMC05XVswLTldKiAiXChbXiJdKlwpIi4qLyBzOjogXDEgXFw6cCcgXAorICAgIHwgc2VkICckIHM6IFxcJDo6JyA+ICIkdG1wZGVwZmlsZSIKICAgcm0gLWYgIiRkZXBmaWxlIgogICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgogICBjYXQgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKQEAgLTU3OSwyMyArNzQwLDIzIEBACiAgICAgICBzaGlmdAogICAgICAgOzsKICAgICAiLUdtInwiL0dtInwiLUdpInwiL0dpInwiLVpJInwiL1pJIikKLQlzZXQgZm5vcmQgIiRAIgotCXNoaWZ0Ci0Jc2hpZnQKLQk7OworICAgICAgICBzZXQgZm5vcmQgIiRAIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICA7OwogICAgICopCi0Jc2V0IGZub3JkICIkQCIgIiRhcmciCi0Jc2hpZnQKLQlzaGlmdAotCTs7CisgICAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgICBzaGlmdAorICAgICAgICBzaGlmdAorICAgICAgICA7OwogICAgIGVzYWMKICAgZG9uZQogICAiJEAiIC1FIDI+L2Rldi9udWxsIHwKICAgc2VkIC1uICcvXiNsaW5lIFswLTldWzAtOV0qICJcKFteIl0qXCkiLyBzOjpcMTpwJyB8ICRjeWdwYXRoX3UgfCBzb3J0IC11ID4gIiR0bXBkZXBmaWxlIgogICBybSAtZiAiJGRlcGZpbGUiCiAgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCi0gIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6CVwxIFxcOnAnID4+ICIkZGVwZmlsZSIKLSAgZWNobyAiCSIgPj4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiIC1uIC1lICdzJSAlXFwgJWcnIC1lICcvXlwoLipcKSQvIHM6OiciJHRhYiInXDEgXFw6cCcgPj4gIiRkZXBmaWxlIgorICBlY2hvICIkdGFiIiA+PiAiJGRlcGZpbGUiCiAgIHNlZCA8ICIkdG1wZGVwZmlsZSIgLW4gLWUgJ3MlICVcXCAlZycgLWUgJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCiAgIHJtIC1mICIkdG1wZGVwZmlsZSIKICAgOzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL2xpYmZmaS5pbmZvIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLmluZm8KaW5kZXggNmQ1YWNmOC4uMzk5MDkzOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLmluZm8KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvbGliZmZpLnRleGkgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkudGV4aQppbmRleCA1YzA1NTJiLi5hMmIxMjQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkudGV4aQorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9saWJmZmkudGV4aQpAQCAtMTg0LDExICsxODQsMTEgQEAKIAogQHZhcntydmFsdWV9IGlzIGEgcG9pbnRlciB0byBhIGNodW5rIG9mIG1lbW9yeSB0aGF0IHdpbGwgaG9sZCB0aGUKIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb24gY2FsbC4gIFRoaXMgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCB0aGUKLXJlc3VsdCBhbmQgbXVzdCBiZSBzdWl0YWJseSBhbGlnbmVkOyBpdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkKK3Jlc3VsdCwgbm8gc21hbGxlciB0aGFuIHRoZSBzeXN0ZW0gcmVnaXN0ZXIgc2l6ZSAoZ2VuZXJhbGx5IDMyIG9yIDY0CitiaXRzKSwgYW5kIG11c3QgYmUgc3VpdGFibHkgYWxpZ25lZDsgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5CiB0byBlbnN1cmUgdGhpcy4gIElmIEB2YXJ7Y2lmfSBkZWNsYXJlcyB0aGF0IHRoZSBmdW5jdGlvbiByZXR1cm5zCiBAY29kZXt2b2lkfSAodXNpbmcgQGNvZGV7ZmZpX3R5cGVfdm9pZH0pLCB0aGVuIEB2YXJ7cnZhbHVlfSBpcwotaWdub3JlZC4gIElmIEB2YXJ7cnZhbHVlfSBpcyBAc2FtcHtOVUxMfSwgdGhlbiB0aGUgcmV0dXJuIHZhbHVlIGlzCi1kaXNjYXJkZWQuCitpZ25vcmVkLgogCiBAdmFye2F2YWx1ZXN9IGlzIGEgdmVjdG9yIG9mIEBjb2Rle3ZvaWQgKn0gcG9pbnRlcnMgdGhhdCBwb2ludCB0byB0aGUKIG1lbW9yeSBsb2NhdGlvbnMgaG9sZGluZyB0aGUgYXJndW1lbnQgdmFsdWVzIGZvciBhIGNhbGwuICBJZiBAdmFye2NpZn0KQEAgLTIxNCw3ICsyMTQsNyBAQAogICBmZmlfdHlwZSAqYXJnc1sxXTsKICAgdm9pZCAqdmFsdWVzWzFdOwogICBjaGFyICpzOwotICBpbnQgcmM7CisgIGZmaV9hcmcgcmM7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBhcmd1bWVudCBpbmZvIHZlY3RvcnMgKi8gICAgCiAgIGFyZ3NbMF0gPSAmZmZpX3R5cGVfcG9pbnRlcjsKQEAgLTIyMiw3ICsyMjIsNyBAQAogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCiAgIGlmIChmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAKLQkJICAgICAgICZmZmlfdHlwZV91aW50LCBhcmdzKSA9PSBGRklfT0spCisJCSAgICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKQogICAgIEB7CiAgICAgICBzID0gIkhlbGxvIFdvcmxkISI7CiAgICAgICBmZmlfY2FsbCgmY2lmLCBwdXRzLCAmcmMsIHZhbHVlcyk7CkBAIC00MTQsNiArNDE0LDcgQEAKICAgICAgIGludCBpOwogCiAgICAgICB0bV90eXBlLnNpemUgPSB0bV90eXBlLmFsaWdubWVudCA9IDA7CisgICAgICB0bV90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CiAgICAgICB0bV90eXBlLmVsZW1lbnRzID0gJnRtX3R5cGVfZWxlbWVudHM7CiAgICAgCiAgICAgICBmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQpAQCAtNTMzLDI4ICs1MzQsMzAgQEAKIEBzZWN0aW9uIENsb3N1cmUgRXhhbXBsZQogCiBBIHRyaXZpYWwgZXhhbXBsZSB0aGF0IGNyZWF0ZXMgYSBuZXcgQGNvZGV7cHV0c30gYnkgYmluZGluZyAKLUBjb2Rle2ZwdXRzfSB3aXRoIEBjb2Rle3N0ZGlufS4KK0Bjb2Rle2ZwdXRzfSB3aXRoIEBjb2Rle3N0ZG91dH0uCiAKIEBleGFtcGxlCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxmZmkuaD4KIAogLyogQWN0cyBsaWtlIHB1dHMgd2l0aCB0aGUgZmlsZSBnaXZlbiBhdCB0aW1lIG9mIGVuY2xvc3VyZS4gKi8KLXZvaWQgcHV0c19iaW5kaW5nKGZmaV9jaWYgKmNpZiwgdW5zaWduZWQgaW50ICpyZXQsIHZvaWQqIGFyZ3NbXSwgCi0gICAgICAgICAgICAgICAgICBGSUxFICpzdHJlYW0pCit2b2lkIHB1dHNfYmluZGluZyhmZmlfY2lmICpjaWYsIHZvaWQgKnJldCwgdm9pZCogYXJnc1tdLAorICAgICAgICAgICAgICAgICAgdm9pZCAqc3RyZWFtKQogQHsKLSAgKnJldCA9IGZwdXRzKCooY2hhciAqKilhcmdzWzBdLCBzdHJlYW0pOworICAqKGZmaV9hcmcgKilyZXQgPSBmcHV0cygqKGNoYXIgKiopYXJnc1swXSwgKEZJTEUgKilzdHJlYW0pOwogQH0KIAordHlwZWRlZiBpbnQgKCpwdXRzX3QpKGNoYXIgKik7CisKIGludCBtYWluKCkKIEB7CiAgIGZmaV9jaWYgY2lmOwogICBmZmlfdHlwZSAqYXJnc1sxXTsKICAgZmZpX2Nsb3N1cmUgKmNsb3N1cmU7CiAKLSAgaW50ICgqYm91bmRfcHV0cykoY2hhciAqKTsKKyAgdm9pZCAqYm91bmRfcHV0czsKICAgaW50IHJjOwotICAKKwogICAvKiBBbGxvY2F0ZSBjbG9zdXJlIGFuZCBib3VuZF9wdXRzICovCiAgIGNsb3N1cmUgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmYm91bmRfcHV0cyk7CiAKQEAgLTU2NSwxMyArNTY4LDEzIEBACiAKICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwogICAgICAgaWYgKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICZmZmlfdHlwZV91aW50LCBhcmdzKSA9PSBGRklfT0spCisgICAgICAgICAgICAgICAgICAgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spCiAgICAgICAgIEB7CiAgICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgY2xvc3VyZSwgc2V0dGluZyBzdHJlYW0gdG8gc3Rkb3V0ICovCi0gICAgICAgICAgaWYgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKGNsb3N1cmUsICZjaWYsIHB1dHNfYmluZGluZywgCisgICAgICAgICAgaWYgKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKGNsb3N1cmUsICZjaWYsIHB1dHNfYmluZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rkb3V0LCBib3VuZF9wdXRzKSA9PSBGRklfT0spCiAgICAgICAgICAgICBAewotICAgICAgICAgICAgICByYyA9IGJvdW5kX3B1dHMoIkhlbGxvIFdvcmxkISIpOworICAgICAgICAgICAgICByYyA9ICgocHV0c190KWJvdW5kX3B1dHMpKCJIZWxsbyBXb3JsZCEiKTsKICAgICAgICAgICAgICAgLyogcmMgbm93IGhvbGRzIHRoZSByZXN1bHQgb2YgdGhlIGNhbGwgdG8gZnB1dHMgKi8KICAgICAgICAgICAgIEB9CiAgICAgICAgIEB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9zdGFtcC12dGkgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy9zdGFtcC12dGkKaW5kZXggNTQyNTViYS4uMzc4NTk1MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2Mvc3RhbXAtdnRpCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3N0YW1wLXZ0aQpAQCAtMSw0ICsxLDQgQEAKLUBzZXQgVVBEQVRFRCAxNiBNYXJjaCAyMDEzCi1Ac2V0IFVQREFURUQtTU9OVEggTWFyY2ggMjAxMwotQHNldCBFRElUSU9OIDMuMC4xMwotQHNldCBWRVJTSU9OIDMuMC4xMworQHNldCBVUERBVEVEIDI1IEFwcmlsIDIwMTQKK0BzZXQgVVBEQVRFRC1NT05USCBBcHJpbCAyMDE0CitAc2V0IEVESVRJT04gMy4xCitAc2V0IFZFUlNJT04gMy4xCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy92ZXJzaW9uLnRleGkgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2RvYy92ZXJzaW9uLnRleGkKaW5kZXggNTQyNTViYS4uMzc4NTk1MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9kb2MvdmVyc2lvbi50ZXhpCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZG9jL3ZlcnNpb24udGV4aQpAQCAtMSw0ICsxLDQgQEAKLUBzZXQgVVBEQVRFRCAxNiBNYXJjaCAyMDEzCi1Ac2V0IFVQREFURUQtTU9OVEggTWFyY2ggMjAxMwotQHNldCBFRElUSU9OIDMuMC4xMwotQHNldCBWRVJTSU9OIDMuMC4xMworQHNldCBVUERBVEVEIDI1IEFwcmlsIDIwMTQKK0BzZXQgVVBEQVRFRC1NT05USCBBcHJpbCAyMDE0CitAc2V0IEVESVRJT04gMy4xCitAc2V0IFZFUlNJT04gMy4xCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5oLmluIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcuaC5pbgppbmRleCBjNzc1ODVkLi5jZGVmOTFiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5oLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZmZpY29uZmlnLmguaW4KQEAgLTI2LDEwICsyNiwxMCBAQAogLyogQ2Fubm90IHVzZSBtYWxsb2Mgb24gdGhpcyB0YXJnZXQsIHNvLCB3ZSByZXZlcnQgdG8gYWx0ZXJuYXRpdmUgbWVhbnMgKi8KICN1bmRlZiBGRklfTU1BUF9FWEVDX1dSSVQKIAotLyogRGVmaW5lIHRoaXMgaXMgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIHRoZSByYXcgQVBJLiAqLworLyogRGVmaW5lIHRoaXMgaWYgeW91IGRvIG5vdCB3YW50IHN1cHBvcnQgZm9yIHRoZSByYXcgQVBJLiAqLwogI3VuZGVmIEZGSV9OT19SQVdfQVBJCiAKLS8qIERlZmluZSB0aGlzIGlzIHlvdSBkbyBub3Qgd2FudCBzdXBwb3J0IGZvciBhZ2dyZWdhdGUgdHlwZXMuICovCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgZG8gbm90IHdhbnQgc3VwcG9ydCBmb3IgYWdncmVnYXRlIHR5cGVzLiAqLwogI3VuZGVmIEZGSV9OT19TVFJVQ1RTCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIGBhbGxvY2EnLCBhcyBhIGZ1bmN0aW9uIG9yIG1hY3JvLiAqLwpAQCAtNzMsNiArNzMsOSBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBsb25nIGRvdWJsZSB0eXBlIGFuZCBpdCBpcyBiaWdnZXIgdGhhbiBhIGRvdWJsZSAqLwogI3VuZGVmIEhBVkVfTE9OR19ET1VCTEUKIAorLyogRGVmaW5lIGlmIHlvdSBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgc2l6ZSBvZiB0aGUgbG9uZyBkb3VibGUgdHlwZSAqLworI3VuZGVmIEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbWNweScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9NRU1DUFkKIApAQCAtMTE4LDggKzEyMSw3IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1VOSVNURF9ICiAKLS8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCi0gICAqLworLyogRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IHdoZXJlIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy4gKi8KICN1bmRlZiBMVF9PQkpESVIKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91ciBDIGNvbXBpbGVyIGRvZXNuJ3QgYWNjZXB0IC1jIGFuZCAtbyB0b2dldGhlci4gKi8KQEAgLTE1Miw2ICsxNTQsOSBAQAogLyogVGhlIHNpemUgb2YgYGxvbmcgZG91YmxlJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9MT05HX0RPVUJMRQogCisvKiBUaGUgc2l6ZSBvZiBgc2l6ZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9TSVpFX1QKKwogLyogSWYgdXNpbmcgdGhlIEMgaW1wbGVtZW50YXRpb24gb2YgYWxsb2NhLCBkZWZpbmUgaWYgeW91IGtub3cgdGhlCiAgICBkaXJlY3Rpb24gb2Ygc3RhY2sgZ3Jvd3RoIGZvciB5b3VyIHN5c3RlbTsgb3RoZXJ3aXNlIGl0IHdpbGwgYmUKICAgIGF1dG9tYXRpY2FsbHkgZGVkdWNlZCBhdCBydW50aW1lLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9mZmljb25maWcucHkuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbgppbmRleCAzNWJlMjljLi5kMTAyNDk4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2ZmaWNvbmZpZy5weS5pbgpAQCAtNiw3ICs2LDcgQEAKIGZmaV9wbGF0Zm9ybXMgPSB7CiAgICAgJ01JUFNfSVJJWCc6IFsnc3JjL21pcHMvZmZpLmMnLCAnc3JjL21pcHMvbzMyLlMnLCAnc3JjL21pcHMvbjMyLlMnXSwKICAgICAnTUlQU19MSU5VWCc6IFsnc3JjL21pcHMvZmZpLmMnLCAnc3JjL21pcHMvbzMyLlMnXSwKLSAgICAnWDg2JzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvc3lzdi5TJ10sCisgICAgJ1g4Nic6IFsnc3JjL3g4Ni9mZmkuYycsICdzcmMveDg2L3N5c3YuUycsICdzcmMveDg2L3dpbjMyLlMnXSwKICAgICAnWDg2X0ZSRUVCU0QnOiBbJ3NyYy94ODYvZmZpLmMnLCAnc3JjL3g4Ni9mcmVlYnNkLlMnXSwKICAgICAnWDg2X1dJTjMyJzogWydzcmMveDg2L2ZmaS5jJywgJ3NyYy94ODYvd2luMzIuUyddLAogICAgICdTUEFSQyc6IFsnc3JjL3NwYXJjL2ZmaS5jJywgJ3NyYy9zcGFyYy92OC5TJywgJ3NyYy9zcGFyYy92OS5TJ10sCkBAIC0xNCw5ICsxNCwxMCBAQAogICAgICdJQTY0JzogWydzcmMvaWE2NC9mZmkuYycsICdzcmMvaWE2NC91bml4LlMnXSwKICAgICAnTTMyUic6IFsnc3JjL20zMnIvc3lzdi5TJywgJ3NyYy9tMzJyL2ZmaS5jJ10sCiAgICAgJ002OEsnOiBbJ3NyYy9tNjhrL2ZmaS5jJywgJ3NyYy9tNjhrL3N5c3YuUyddLAotICAgICdQT1dFUlBDJzogWydzcmMvcG93ZXJwYy9mZmkuYycsICdzcmMvcG93ZXJwYy9zeXN2LlMnLCAnc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUycsICdzcmMvcG93ZXJwYy9saW51eDY0LlMnLCAnc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMnXSwKKyAgICAnUE9XRVJQQyc6IFsnc3JjL3Bvd2VycGMvZmZpLmMnLCAnc3JjL3Bvd2VycGMvZmZpX3N5c3YuYycsICdzcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jJywgJ3NyYy9wb3dlcnBjL3N5c3YuUycsICdzcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TJywgJ3NyYy9wb3dlcnBjL2xpbnV4NjQuUycsICdzcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUyddLAogICAgICdQT1dFUlBDX0FJWCc6IFsnc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jJywgJ3NyYy9wb3dlcnBjL2FpeC5TJywgJ3NyYy9wb3dlcnBjL2FpeF9jbG9zdXJlLlMnXSwKICAgICAnUE9XRVJQQ19GUkVFQlNEJzogWydzcmMvcG93ZXJwYy9mZmkuYycsICdzcmMvcG93ZXJwYy9zeXN2LlMnLCAnc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyddLAorICAgICdBQVJDSDY0JzogWydzcmMvYWFyY2g2NC9zeXN2LlMnLCAnc3JjL2FhcmNoNjQvZmZpLmMnXSwKICAgICAnQVJNJzogWydzcmMvYXJtL3N5c3YuUycsICdzcmMvYXJtL2ZmaS5jJ10sCiAgICAgJ0xJQkZGSV9DUklTJzogWydzcmMvY3Jpcy9zeXN2LlMnLCAnc3JjL2NyaXMvZmZpLmMnXSwKICAgICAnRlJWJzogWydzcmMvZnJ2L2VhYmkuUycsICdzcmMvZnJ2L2ZmaS5jJ10sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2dlbmVyYXRlLWRhcndpbi1zb3VyY2UtYW5kLWhlYWRlcnMucHkgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2dlbmVyYXRlLWRhcndpbi1zb3VyY2UtYW5kLWhlYWRlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0ZTg2MQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZ2VuZXJhdGUtZGFyd2luLXNvdXJjZS1hbmQtaGVhZGVycy5weQpAQCAtMCwwICsxLDIwOSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IG9zCitpbXBvcnQgZXJybm8KK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGdsb2IKK2ltcG9ydCBhcmdwYXJzZQorCitjbGFzcyBQbGF0Zm9ybShvYmplY3QpOgorICAgIHBhc3MKKworY2xhc3Mgc2ltdWxhdG9yX3BsYXRmb3JtKFBsYXRmb3JtKToKKyAgICBkaXJlY3RvcnkgPSAnZGFyd2luX2lvcycKKyAgICBzZGsgPSAnaXBob25lc2ltdWxhdG9yJworICAgIGFyY2ggPSAnaTM4NicKKyAgICB0cmlwbGUgPSAnaTM4Ni1hcHBsZS1kYXJ3aW4xMScKKyAgICB2ZXJzaW9uX21pbiA9ICctbWlwaG9uZW9zLXZlcnNpb24tbWluPTUuMS4xJworCisgICAgcHJlZml4ID0gIiNpZmRlZiBfX2kzODZfX1xuXG4iCisgICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCisgICAgc3JjX2RpciA9ICd4ODYnCisgICAgc3JjX2ZpbGVzID0gWydkYXJ3aW4uUycsICd3aW4zMi5TJywgJ2ZmaS5jJ10KKworCitjbGFzcyBzaW11bGF0b3I2NF9wbGF0Zm9ybShQbGF0Zm9ybSk6CisgICAgZGlyZWN0b3J5ID0gJ2Rhcndpbl9pb3MnCisgICAgc2RrID0gJ2lwaG9uZXNpbXVsYXRvcicKKyAgICBhcmNoID0gJ3g4Nl82NCcKKyAgICB0cmlwbGUgPSAneDg2XzY0LWFwcGxlLWRhcndpbjEzJworICAgIHZlcnNpb25fbWluID0gJy1taXBob25lb3MtdmVyc2lvbi1taW49Ny4wJworCisgICAgcHJlZml4ID0gIiNpZmRlZiBfX3g4Nl82NF9fXG5cbiIKKyAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKKyAgICBzcmNfZGlyID0gJ3g4NicKKyAgICBzcmNfZmlsZXMgPSBbJ2RhcndpbjY0LlMnLCAnZmZpNjQuYyddCisKKworY2xhc3MgZGV2aWNlX3BsYXRmb3JtKFBsYXRmb3JtKToKKyAgICBkaXJlY3RvcnkgPSAnZGFyd2luX2lvcycKKyAgICBzZGsgPSAnaXBob25lb3MnCisgICAgYXJjaCA9ICdhcm12NycKKyAgICB0cmlwbGUgPSAnYXJtLWFwcGxlLWRhcndpbjExJworICAgIHZlcnNpb25fbWluID0gJy1taXBob25lb3MtdmVyc2lvbi1taW49NS4xLjEnCisKKyAgICBwcmVmaXggPSAiI2lmZGVmIF9fYXJtX19cblxuIgorICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgorICAgIHNyY19kaXIgPSAnYXJtJworICAgIHNyY19maWxlcyA9IFsnc3lzdi5TJywgJ3RyYW1wb2xpbmUuUycsICdmZmkuYyddCisKKworY2xhc3MgZGV2aWNlNjRfcGxhdGZvcm0oUGxhdGZvcm0pOgorICAgIGRpcmVjdG9yeSA9ICdkYXJ3aW5faW9zJworICAgIHNkayA9ICdpcGhvbmVvcycKKyAgICBhcmNoID0gJ2FybTY0JworICAgIHRyaXBsZSA9ICdhYXJjaDY0LWFwcGxlLWRhcndpbjEzJworICAgIHZlcnNpb25fbWluID0gJy1taXBob25lb3MtdmVyc2lvbi1taW49Ny4wJworCisgICAgcHJlZml4ID0gIiNpZmRlZiBfX2FybTY0X19cblxuIgorICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgorICAgIHNyY19kaXIgPSAnYWFyY2g2NCcKKyAgICBzcmNfZmlsZXMgPSBbJ3N5c3YuUycsICdmZmkuYyddCisKKworY2xhc3MgZGVza3RvcDMyX3BsYXRmb3JtKFBsYXRmb3JtKToKKyAgICBkaXJlY3RvcnkgPSAnZGFyd2luX29zeCcKKyAgICBzZGsgPSAnbWFjb3N4JworICAgIGFyY2ggPSAnaTM4NicKKyAgICB0cmlwbGUgPSAnaTM4Ni1hcHBsZS1kYXJ3aW4xMCcKKyAgICB2ZXJzaW9uX21pbiA9ICctbW1hY29zeC12ZXJzaW9uLW1pbj0xMC42JworICAgIHNyY19kaXIgPSAneDg2JworICAgIHNyY19maWxlcyA9IFsnZGFyd2luLlMnLCAnd2luMzIuUycsICdmZmkuYyddCisKKyAgICBwcmVmaXggPSAiI2lmZGVmIF9faTM4Nl9fXG5cbiIKKyAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKKworCitjbGFzcyBkZXNrdG9wNjRfcGxhdGZvcm0oUGxhdGZvcm0pOgorICAgIGRpcmVjdG9yeSA9ICdkYXJ3aW5fb3N4JworICAgIHNkayA9ICdtYWNvc3gnCisgICAgYXJjaCA9ICd4ODZfNjQnCisgICAgdHJpcGxlID0gJ3g4Nl82NC1hcHBsZS1kYXJ3aW4xMCcKKyAgICB2ZXJzaW9uX21pbiA9ICctbW1hY29zeC12ZXJzaW9uLW1pbj0xMC42JworCisgICAgcHJlZml4ID0gIiNpZmRlZiBfX3g4Nl82NF9fXG5cbiIKKyAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKKyAgICBzcmNfZGlyID0gJ3g4NicKKyAgICBzcmNfZmlsZXMgPSBbJ2RhcndpbjY0LlMnLCAnZmZpNjQuYyddCisKKworZGVmIG1rZGlyX3AocGF0aCk6CisgICAgdHJ5OgorICAgICAgICBvcy5tYWtlZGlycyhwYXRoKQorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIGV4YzogICMgUHl0aG9uID4yLjUKKyAgICAgICAgaWYgZXhjLmVycm5vID09IGVycm5vLkVFWElTVDoKKyAgICAgICAgICAgIHBhc3MKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlCisKKworZGVmIG1vdmVfZmlsZShzcmNfZGlyLCBkc3RfZGlyLCBmaWxlbmFtZSwgZmlsZV9zdWZmaXg9Tm9uZSwgcHJlZml4PScnLCBzdWZmaXg9JycpOgorICAgIG1rZGlyX3AoZHN0X2RpcikKKyAgICBvdXRfZmlsZW5hbWUgPSBmaWxlbmFtZQorCisgICAgaWYgZmlsZV9zdWZmaXg6CisgICAgICAgIHNwbGl0X25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICBvdXRfZmlsZW5hbWUgPSAiJXNfJXMlcyIgJSAoc3BsaXRfbmFtZVswXSwgZmlsZV9zdWZmaXgsIHNwbGl0X25hbWVbMV0pCisKKyAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNyY19kaXIsIGZpbGVuYW1lKSkgYXMgaW5fZmlsZToKKyAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkc3RfZGlyLCBvdXRfZmlsZW5hbWUpLCAndycpIGFzIG91dF9maWxlOgorICAgICAgICAgICAgaWYgcHJlZml4OgorICAgICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHByZWZpeCkKKworICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoaW5fZmlsZS5yZWFkKCkpCisKKyAgICAgICAgICAgIGlmIHN1ZmZpeDoKKyAgICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzdWZmaXgpCisKKworZGVmIGxpc3RfZmlsZXMoc3JjX2RpciwgcGF0dGVybj1Ob25lLCBmaWxlbGlzdD1Ob25lKToKKyAgICBpZiBwYXR0ZXJuOiBmaWxlbGlzdCA9IGdsb2IuaWdsb2Iob3MucGF0aC5qb2luKHNyY19kaXIsIHBhdHRlcm4pKQorICAgIGZvciBmaWxlIGluIGZpbGVsaXN0OgorICAgICAgICB5aWVsZCBvcy5wYXRoLmJhc2VuYW1lKGZpbGUpCisKKworZGVmIGNvcHlfZmlsZXMoc3JjX2RpciwgZHN0X2RpciwgcGF0dGVybj1Ob25lLCBmaWxlbGlzdD1Ob25lLCBmaWxlX3N1ZmZpeD1Ob25lLCBwcmVmaXg9Tm9uZSwgc3VmZml4PU5vbmUpOgorICAgIGZvciBmaWxlbmFtZSBpbiBsaXN0X2ZpbGVzKHNyY19kaXIsIHBhdHRlcm49cGF0dGVybiwgZmlsZWxpc3Q9ZmlsZWxpc3QpOgorICAgICAgICBtb3ZlX2ZpbGUoc3JjX2RpciwgZHN0X2RpciwgZmlsZW5hbWUsIGZpbGVfc3VmZml4PWZpbGVfc3VmZml4LCBwcmVmaXg9cHJlZml4LCBzdWZmaXg9c3VmZml4KQorCisKK2RlZiBjb3B5X3NyY19wbGF0Zm9ybV9maWxlcyhwbGF0Zm9ybSk6CisgICAgc3JjX2RpciA9IG9zLnBhdGguam9pbignc3JjJywgcGxhdGZvcm0uc3JjX2RpcikKKyAgICBkc3RfZGlyID0gb3MucGF0aC5qb2luKHBsYXRmb3JtLmRpcmVjdG9yeSwgJ3NyYycsIHBsYXRmb3JtLnNyY19kaXIpCisgICAgY29weV9maWxlcyhzcmNfZGlyLCBkc3RfZGlyLCBmaWxlbGlzdD1wbGF0Zm9ybS5zcmNfZmlsZXMsIGZpbGVfc3VmZml4PXBsYXRmb3JtLmFyY2gsIHByZWZpeD1wbGF0Zm9ybS5wcmVmaXgsIHN1ZmZpeD1wbGF0Zm9ybS5zdWZmaXgpCisKKworZGVmIGJ1aWxkX3RhcmdldChwbGF0Zm9ybSwgcGxhdGZvcm1faGVhZGVycyk6CisgICAgZGVmIHhjcnVuX2NtZChjbWQpOgorICAgICAgICByZXR1cm4gJ3hjcnVuIC1zZGsgJXMgJXMgLWFyY2ggJXMnICUgKHBsYXRmb3JtLnNkaywgY21kLCBwbGF0Zm9ybS5hcmNoKQorCisgICAgdGFnPSclcy0lcycgJSAocGxhdGZvcm0uc2RrLCBwbGF0Zm9ybS5hcmNoKQorICAgIGJ1aWxkX2RpciA9ICdidWlsZF8lcycgJSB0YWcKKyAgICBta2Rpcl9wKGJ1aWxkX2RpcikKKyAgICBlbnYgPSBkaWN0KENDPXhjcnVuX2NtZCgnY2xhbmcnKSwKKyAgICAgICAgICAgICAgIExEPXhjcnVuX2NtZCgnbGQnKSwKKyAgICAgICAgICAgICAgIENGTEFHUz0nJXMnICUgKHBsYXRmb3JtLnZlcnNpb25fbWluKSkKKyAgICB3b3JraW5nX2RpciA9IG9zLmdldGN3ZCgpCisgICAgdHJ5OgorICAgICAgICBvcy5jaGRpcihidWlsZF9kaXIpCisgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbJy4uL2NvbmZpZ3VyZScsICctaG9zdCcsIHBsYXRmb3JtLnRyaXBsZV0sIGVudj1lbnYpCisgICAgZmluYWxseToKKyAgICAgICAgb3MuY2hkaXIod29ya2luZ19kaXIpCisKKyAgICBmb3Igc3JjX2RpciBpbiBbYnVpbGRfZGlyLCBvcy5wYXRoLmpvaW4oYnVpbGRfZGlyLCAnaW5jbHVkZScpXToKKyAgICAgICAgY29weV9maWxlcyhzcmNfZGlyLAorICAgICAgICAgICAgICAgICAgIG9zLnBhdGguam9pbihwbGF0Zm9ybS5kaXJlY3RvcnksICdpbmNsdWRlJyksCisgICAgICAgICAgICAgICAgICAgcGF0dGVybj0nKi5oJywKKyAgICAgICAgICAgICAgICAgICBmaWxlX3N1ZmZpeD1wbGF0Zm9ybS5hcmNoLAorICAgICAgICAgICAgICAgICAgIHByZWZpeD1wbGF0Zm9ybS5wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgc3VmZml4PXBsYXRmb3JtLnN1ZmZpeCkKKworICAgICAgICBmb3IgZmlsZW5hbWUgaW4gbGlzdF9maWxlcyhzcmNfZGlyLCBwYXR0ZXJuPScqLmgnKToKKyAgICAgICAgICAgIHBsYXRmb3JtX2hlYWRlcnNbZmlsZW5hbWVdLmFkZCgocGxhdGZvcm0ucHJlZml4LCBwbGF0Zm9ybS5hcmNoLCBwbGF0Zm9ybS5zdWZmaXgpKQorCisKK2RlZiBtYWtlX3RyYW1wKCk6CisgICAgd2l0aCBvcGVuKCdzcmMvYXJtL3RyYW1wb2xpbmUuUycsICd3JykgYXMgdHJhbXBfb3V0OgorICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2Jhc2gnLCAnc3JjL2FybS9nZW50cmFtcC5zaCddLCBzdGRvdXQ9dHJhbXBfb3V0KQorICAgICAgICBwLndhaXQoKQorCisKK2RlZiBnZW5lcmF0ZV9zb3VyY2VfYW5kX2hlYWRlcnMoZ2VuZXJhdGVfb3N4PVRydWUsIGdlbmVyYXRlX2lvcz1UcnVlKToKKyAgICBjb3B5X2ZpbGVzKCdzcmMnLCAnZGFyd2luX2NvbW1vbi9zcmMnLCBwYXR0ZXJuPScqLmMnKQorICAgIGNvcHlfZmlsZXMoJ2luY2x1ZGUnLCAnZGFyd2luX2NvbW1vbi9pbmNsdWRlJywgcGF0dGVybj0nKi5oJykKKworICAgIGlmIGdlbmVyYXRlX2lvczoKKyAgICAgICAgbWFrZV90cmFtcCgpCisgICAgICAgIGNvcHlfc3JjX3BsYXRmb3JtX2ZpbGVzKHNpbXVsYXRvcl9wbGF0Zm9ybSkKKyAgICAgICAgY29weV9zcmNfcGxhdGZvcm1fZmlsZXMoc2ltdWxhdG9yNjRfcGxhdGZvcm0pCisgICAgICAgIGNvcHlfc3JjX3BsYXRmb3JtX2ZpbGVzKGRldmljZV9wbGF0Zm9ybSkKKyAgICAgICAgY29weV9zcmNfcGxhdGZvcm1fZmlsZXMoZGV2aWNlNjRfcGxhdGZvcm0pCisgICAgaWYgZ2VuZXJhdGVfb3N4OgorICAgICAgICBjb3B5X3NyY19wbGF0Zm9ybV9maWxlcyhkZXNrdG9wMzJfcGxhdGZvcm0pCisgICAgICAgIGNvcHlfc3JjX3BsYXRmb3JtX2ZpbGVzKGRlc2t0b3A2NF9wbGF0Zm9ybSkKKworICAgIHBsYXRmb3JtX2hlYWRlcnMgPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChzZXQpCisKKyAgICBpZiBnZW5lcmF0ZV9pb3M6CisgICAgICAgIGJ1aWxkX3RhcmdldChzaW11bGF0b3JfcGxhdGZvcm0sIHBsYXRmb3JtX2hlYWRlcnMpCisgICAgICAgIGJ1aWxkX3RhcmdldChzaW11bGF0b3I2NF9wbGF0Zm9ybSwgcGxhdGZvcm1faGVhZGVycykKKyAgICAgICAgYnVpbGRfdGFyZ2V0KGRldmljZV9wbGF0Zm9ybSwgcGxhdGZvcm1faGVhZGVycykKKyAgICAgICAgYnVpbGRfdGFyZ2V0KGRldmljZTY0X3BsYXRmb3JtLCBwbGF0Zm9ybV9oZWFkZXJzKQorICAgIGlmIGdlbmVyYXRlX29zeDoKKyAgICAgICAgYnVpbGRfdGFyZ2V0KGRlc2t0b3AzMl9wbGF0Zm9ybSwgcGxhdGZvcm1faGVhZGVycykKKyAgICAgICAgYnVpbGRfdGFyZ2V0KGRlc2t0b3A2NF9wbGF0Zm9ybSwgcGxhdGZvcm1faGVhZGVycykKKworICAgIG1rZGlyX3AoJ2Rhcndpbl9jb21tb24vaW5jbHVkZScpCisgICAgZm9yIGhlYWRlcl9uYW1lLCB0YWdfdHVwbGVzIGluIHBsYXRmb3JtX2hlYWRlcnMuaXRlcml0ZW1zKCk6CisgICAgICAgIGJhc2VuYW1lLCBzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KGhlYWRlcl9uYW1lKQorICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdkYXJ3aW5fY29tbW9uL2luY2x1ZGUnLCBoZWFkZXJfbmFtZSksICd3JykgYXMgaGVhZGVyOgorICAgICAgICAgICAgZm9yIHRhZ190dXBsZSBpbiB0YWdfdHVwbGVzOgorICAgICAgICAgICAgICAgIGhlYWRlci53cml0ZSgnJXMjaW5jbHVkZSA8JXNfJXMlcz5cbiVzXG4nICUgKHRhZ190dXBsZVswXSwgYmFzZW5hbWUsIHRhZ190dXBsZVsxXSwgc3VmZml4LCB0YWdfdHVwbGVbMl0pKQorCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKCkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW9ubHktaW9zJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSkKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW9ubHktb3N4JywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSkKKyAgICBhcmdzID0gcGFyc2VyLnBhcnNlX2FyZ3MoKQorCisgICAgZ2VuZXJhdGVfc291cmNlX2FuZF9oZWFkZXJzKGdlbmVyYXRlX29zeD1ub3QgYXJncy5vbmx5X2lvcywgZ2VuZXJhdGVfaW9zPW5vdCBhcmdzLm9ubHlfb3N4KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9nZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9nZW5lcmF0ZS1pb3Mtc291cmNlLWFuZC1oZWFkZXJzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjMmJjYTczLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weQorKysgL2Rldi9udWxsCkBAIC0xLDE2MCArMCwwIEBACi0jIS91c3IvYmluL2VudiBweXRob24KLQotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCByZQotaW1wb3J0IG9zCi1pbXBvcnQgZXJybm8KLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IHN5cwotCi1jbGFzcyBQbGF0Zm9ybShvYmplY3QpOgotICAgIHBhc3MKLQotc2RrX3JlID0gcmUuY29tcGlsZShyJy4qLXNkayAoW2EtekEtWjAtOS5dKiknKQotCi1kZWYgc2RraW5mbyhzZGtuYW1lKToKLSAgICByZXQgPSB7fQotICAgIGZvciBsaW5lIGluIHN1YnByb2Nlc3MuUG9wZW4oWyd4Y29kZWJ1aWxkJywgJy1zZGsnLCBzZGtuYW1lLCAnLXZlcnNpb24nXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0OgotICAgICAgICBrdiA9IGxpbmUuc3RyaXAoKS5zcGxpdCgnOiAnLCAxKQotICAgICAgICBpZiBsZW4oa3YpID09IDI6Ci0gICAgICAgICAgICBrLHYgPSBrdgotICAgICAgICAgICAgcmV0W2tdID0gdgotICAgIHJldHVybiByZXQKLQotc2ltX3Nka19pbmZvID0gc2RraW5mbygnaXBob25lc2ltdWxhdG9yJykKLWRldmljZV9zZGtfaW5mbyA9IHNka2luZm8oJ2lwaG9uZW9zJykKLQotZGVmIGxhdGVzdF9zZGtzKCk6Ci0gICAgbGF0ZXN0X3NpbSA9IE5vbmUKLSAgICBsYXRlc3RfZGV2aWNlID0gTm9uZQotICAgIGZvciBsaW5lIGluIHN1YnByb2Nlc3MuUG9wZW4oWyd4Y29kZWJ1aWxkJywgJy1zaG93c2RrcyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQ6Ci0gICAgICAgIG1hdGNoID0gc2RrX3JlLm1hdGNoKGxpbmUpCi0gICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgaWYgJ1NpbXVsYXRvcicgaW4gbGluZToKLSAgICAgICAgICAgICAgICBsYXRlc3Rfc2ltID0gbWF0Y2guZ3JvdXAoMSkKLSAgICAgICAgICAgIGVsaWYgJ2lPUycgaW4gbGluZToKLSAgICAgICAgICAgICAgICBsYXRlc3RfZGV2aWNlID0gbWF0Y2guZ3JvdXAoMSkKLQotICAgIHJldHVybiBsYXRlc3Rfc2ltLCBsYXRlc3RfZGV2aWNlCi0KLXNpbV9zZGssIGRldmljZV9zZGsgPSBsYXRlc3Rfc2RrcygpCi0KLWNsYXNzIHNpbXVsYXRvcl9wbGF0Zm9ybShQbGF0Zm9ybSk6Ci0gICAgc2RrPSdpcGhvbmVzaW11bGF0b3InCi0gICAgYXJjaCA9ICdpMzg2JwotICAgIG5hbWUgPSAnc2ltdWxhdG9yJwotICAgIHRyaXBsZSA9ICdpMzg2LWFwcGxlLWRhcndpbjEwJwotICAgIHNka3Jvb3QgPSBzaW1fc2RrX2luZm9bJ1BhdGgnXQotCi0gICAgcHJlZml4ID0gIiNpZiAhZGVmaW5lZChfX2FybV9fKSAmJiBkZWZpbmVkKF9faTM4Nl9fKVxuXG4iCi0gICAgc3VmZml4ID0gIlxuXG4jZW5kaWYiCi0KLWNsYXNzIGRldmljZV9wbGF0Zm9ybShQbGF0Zm9ybSk6Ci0gICAgc2RrPSdpcGhvbmVvcycKLSAgICBuYW1lID0gJ2lvcycKLSAgICBhcmNoID0gJ2FybXY3JwotICAgIHRyaXBsZSA9ICdhcm0tYXBwbGUtZGFyd2luMTAnCi0gICAgc2Rrcm9vdCA9IGRldmljZV9zZGtfaW5mb1snUGF0aCddCi0KLSAgICBwcmVmaXggPSAiI2lmZGVmIF9fYXJtX19cblxuIgotICAgIHN1ZmZpeCA9ICJcblxuI2VuZGlmIgotCi0KLWRlZiBtb3ZlX2ZpbGUoc3JjX2RpciwgZHN0X2RpciwgZmlsZW5hbWUsIGZpbGVfc3VmZml4PU5vbmUsIHByZWZpeD0nJywgc3VmZml4PScnKToKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZHN0X2Rpcik6Ci0gICAgICAgIG9zLm1ha2VkaXJzKGRzdF9kaXIpCi0KLSAgICBvdXRfZmlsZW5hbWUgPSBmaWxlbmFtZQotCi0gICAgaWYgZmlsZV9zdWZmaXg6Ci0gICAgICAgIHNwbGl0X25hbWUgPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQotICAgICAgICBvdXRfZmlsZW5hbWUgPSAgIiVzXyVzJXMiICUgKHNwbGl0X25hbWVbMF0sIGZpbGVfc3VmZml4LCBzcGxpdF9uYW1lWzFdKQotCi0gICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihzcmNfZGlyLCBmaWxlbmFtZSkpIGFzIGluX2ZpbGU6Ci0gICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4oZHN0X2Rpciwgb3V0X2ZpbGVuYW1lKSwgJ3cnKSBhcyBvdXRfZmlsZToKLSAgICAgICAgICAgIGlmIHByZWZpeDoKLSAgICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShwcmVmaXgpCi0KLSAgICAgICAgICAgIG91dF9maWxlLndyaXRlKGluX2ZpbGUucmVhZCgpKQotCi0gICAgICAgICAgICBpZiBzdWZmaXg6Ci0gICAgICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoc3VmZml4KQotCi1oZWFkZXJzX3NlZW4gPSBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChzZXQpCi0KLWRlZiBtb3ZlX3NvdXJjZV90cmVlKHNyY19kaXIsIGRlc3RfZGlyLCBkZXN0X2luY2x1ZGVfZGlyLCBhcmNoPU5vbmUsIHByZWZpeD1Ob25lLCBzdWZmaXg9Tm9uZSk6Ci0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoc3JjX2RpciwgZm9sbG93bGlua3M9VHJ1ZSk6Ci0gICAgICAgIHJlbHJvb3QgPSBvcy5wYXRoLnJlbHBhdGgocm9vdCxzcmNfZGlyKQotCi0gICAgICAgIGRlZiBtb3ZlX2RpcihhcmNoLCBwcmVmaXg9JycsIHN1ZmZpeD0nJywgZmlsZXM9W10pOgotICAgICAgICAgICAgZm9yIGZpbGUgaW4gZmlsZXM6Ci0gICAgICAgICAgICAgICAgZmlsZV9zdWZmaXggPSBOb25lCi0gICAgICAgICAgICAgICAgaWYgZmlsZS5lbmRzd2l0aCgnLmgnKToKLSAgICAgICAgICAgICAgICAgICAgaWYgZGVzdF9pbmNsdWRlX2RpcjoKLSAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc3VmZml4ID0gYXJjaAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgYXJjaDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzX3NlZW5bZmlsZV0uYWRkKGFyY2gpCi0gICAgICAgICAgICAgICAgICAgICAgICBtb3ZlX2ZpbGUocm9vdCwgZGVzdF9pbmNsdWRlX2RpciwgZmlsZSwgYXJjaCwgcHJlZml4PXByZWZpeCwgc3VmZml4PXN1ZmZpeCkKLQotICAgICAgICAgICAgICAgIGVsaWYgZGVzdF9kaXI6Ci0gICAgICAgICAgICAgICAgICAgIG91dHJvb3QgPSBvcy5wYXRoLmpvaW4oZGVzdF9kaXIsIHJlbHJvb3QpCi0gICAgICAgICAgICAgICAgICAgIG1vdmVfZmlsZShyb290LCBvdXRyb290LCBmaWxlLCBwcmVmaXg9cHJlZml4LCBzdWZmaXg9c3VmZml4KQotCi0gICAgICAgIGlmIHJlbHJvb3QgPT0gJy4nOgotICAgICAgICAgICAgbW92ZV9kaXIoYXJjaD1hcmNoLAotICAgICAgICAgICAgICAgICAgICAgZmlsZXM9ZmlsZXMsCi0gICAgICAgICAgICAgICAgICAgICBwcmVmaXg9cHJlZml4LAotICAgICAgICAgICAgICAgICAgICAgc3VmZml4PXN1ZmZpeCkKLSAgICAgICAgZWxpZiByZWxyb290ID09ICdhcm0nOgotICAgICAgICAgICAgbW92ZV9kaXIoYXJjaD0nYXJtJywKLSAgICAgICAgICAgICAgICAgICAgIHByZWZpeD0iI2lmZGVmIF9fYXJtX19cblxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD0iXG5cbiNlbmRpZiIsCi0gICAgICAgICAgICAgICAgICAgICBmaWxlcz1maWxlcykKLSAgICAgICAgZWxpZiByZWxyb290ID09ICd4ODYnOgotICAgICAgICAgICAgbW92ZV9kaXIoYXJjaD0naTM4NicsCi0gICAgICAgICAgICAgICAgICAgICBwcmVmaXg9IiNpZiAhZGVmaW5lZChfX2FybV9fKSAmJiBkZWZpbmVkKF9faTM4Nl9fKVxuXG4iLAotICAgICAgICAgICAgICAgICAgICAgc3VmZml4PSJcblxuI2VuZGlmIiwKLSAgICAgICAgICAgICAgICAgICAgIGZpbGVzPWZpbGVzKQotCi1kZWYgYnVpbGRfdGFyZ2V0KHBsYXRmb3JtKToKLSAgICBkZWYgeGNydW5fY21kKGNtZCk6Ci0gICAgICAgIHJldHVybiBzdWJwcm9jZXNzLmNoZWNrX291dHB1dChbJ3hjcnVuJywgJy1zZGsnLCBwbGF0Zm9ybS5zZGtyb290LCAnLWZpbmQnLCBjbWRdKS5zdHJpcCgpCi0KLSAgICBidWlsZF9kaXIgPSAnYnVpbGRfJyArIHBsYXRmb3JtLm5hbWUKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoYnVpbGRfZGlyKToKLSAgICAgICAgb3MubWFrZWRpcnMoYnVpbGRfZGlyKQotICAgICAgICBlbnYgPSBkaWN0KENDPXhjcnVuX2NtZCgnY2xhbmcnKSwKLSAgICAgICAgICAgICAgICAgICBMRD14Y3J1bl9jbWQoJ2xkJyksCi0gICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSctYXJjaCAlcyAtaXN5c3Jvb3QgJXMgLW1pcGhvbmVvcy12ZXJzaW9uLW1pbj00LjAnICUgKHBsYXRmb3JtLmFyY2gsIHBsYXRmb3JtLnNka3Jvb3QpKQotICAgICAgICB3b3JraW5nX2Rpcj1vcy5nZXRjd2QoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5jaGRpcihidWlsZF9kaXIpCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWycuLi9jb25maWd1cmUnLCAnLWhvc3QnLCBwbGF0Zm9ybS50cmlwbGVdLCBlbnY9ZW52KQotICAgICAgICAgICAgbW92ZV9zb3VyY2VfdHJlZSgnLicsIE5vbmUsICcuLi9pb3MvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2g9cGxhdGZvcm0uYXJjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PXBsYXRmb3JtLnByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4PXBsYXRmb3JtLnN1ZmZpeCkKLSAgICAgICAgICAgIG1vdmVfc291cmNlX3RyZWUoJy4vaW5jbHVkZScsIE5vbmUsICcuLi9pb3MvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaD1wbGF0Zm9ybS5hcmNoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1wbGF0Zm9ybS5wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4PXBsYXRmb3JtLnN1ZmZpeCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKHdvcmtpbmdfZGlyKQotCi0gICAgICAgIGZvciBoZWFkZXJfbmFtZSwgYXJjaHMgaW4gaGVhZGVyc19zZWVuLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgYmFzZW5hbWUsIHN1ZmZpeCA9IG9zLnBhdGguc3BsaXRleHQoaGVhZGVyX25hbWUpCi0KLWRlZiBtYWluKCk6Ci0gICAgbW92ZV9zb3VyY2VfdHJlZSgnc3JjJywgJ2lvcy9zcmMnLCAnaW9zL2luY2x1ZGUnKQotICAgIG1vdmVfc291cmNlX3RyZWUoJ2luY2x1ZGUnLCBOb25lLCAnaW9zL2luY2x1ZGUnKQotICAgIGJ1aWxkX3RhcmdldChzaW11bGF0b3JfcGxhdGZvcm0pCi0gICAgYnVpbGRfdGFyZ2V0KGRldmljZV9wbGF0Zm9ybSkKLQotICAgIGZvciBoZWFkZXJfbmFtZSwgYXJjaHMgaW4gaGVhZGVyc19zZWVuLml0ZXJpdGVtcygpOgotICAgICAgICBiYXNlbmFtZSwgc3VmZml4ID0gb3MucGF0aC5zcGxpdGV4dChoZWFkZXJfbmFtZSkKLSAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbignaW9zL2luY2x1ZGUnLCBoZWFkZXJfbmFtZSksICd3JykgYXMgaGVhZGVyOgotICAgICAgICAgICAgZm9yIGFyY2ggaW4gYXJjaHM6Ci0gICAgICAgICAgICAgICAgaGVhZGVyLndyaXRlKCcjaW5jbHVkZSA8JXNfJXMlcz5cbicgJSAoYmFzZW5hbWUsIGFyY2gsIHN1ZmZpeCkpCi0KLWlmIF9fbmFtZV9fID09ICdfX21haW5fXyc6Ci0gICAgbWFpbigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2dlbmVyYXRlLW9zeC1zb3VyY2UtYW5kLWhlYWRlcnMucHkgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2dlbmVyYXRlLW9zeC1zb3VyY2UtYW5kLWhlYWRlcnMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDY0MzEzYzEuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9nZW5lcmF0ZS1vc3gtc291cmNlLWFuZC1oZWFkZXJzLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTUzICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotaW1wb3J0IHN1YnByb2Nlc3MKLWltcG9ydCByZQotaW1wb3J0IG9zCi1pbXBvcnQgZXJybm8KLWltcG9ydCBjb2xsZWN0aW9ucwotaW1wb3J0IHN5cwotCi1jbGFzcyBQbGF0Zm9ybShvYmplY3QpOgotICAgIHBhc3MKLQotc2RrX3JlID0gcmUuY29tcGlsZShyJy4qLXNkayAoW2EtekEtWjAtOS5dKiknKQotCi1kZWYgc2RraW5mbyhzZGtuYW1lKToKLSAgICByZXQgPSB7fQotICAgIGZvciBsaW5lIGluIHN1YnByb2Nlc3MuUG9wZW4oWyd4Y29kZWJ1aWxkJywgJy1zZGsnLCBzZGtuYW1lLCAnLXZlcnNpb24nXSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkuc3Rkb3V0OgotICAgICAgICBrdiA9IGxpbmUuc3RyaXAoKS5zcGxpdCgnOiAnLCAxKQotICAgICAgICBpZiBsZW4oa3YpID09IDI6Ci0gICAgICAgICAgICBrLHYgPSBrdgotICAgICAgICAgICAgcmV0W2tdID0gdgotICAgIHJldHVybiByZXQKLQotZGVza3RvcF9zZGtfaW5mbyA9IHNka2luZm8oJ21hY29zeCcpCi0KLWRlZiBsYXRlc3Rfc2RrcygpOgotICAgIGxhdGVzdF9kZXNrdG9wID0gTm9uZQotICAgIGZvciBsaW5lIGluIHN1YnByb2Nlc3MuUG9wZW4oWyd4Y29kZWJ1aWxkJywgJy1zaG93c2RrcyddLCBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFKS5zdGRvdXQ6Ci0gICAgICAgIG1hdGNoID0gc2RrX3JlLm1hdGNoKGxpbmUpCi0gICAgICAgIGlmIG1hdGNoOgotICAgICAgICAgICAgaWYgJ09TIFgnIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgbGF0ZXN0X2Rlc2t0b3AgPSBtYXRjaC5ncm91cCgxKQotCi0gICAgcmV0dXJuIGxhdGVzdF9kZXNrdG9wCi0KLWRlc2t0b3Bfc2RrID0gbGF0ZXN0X3Nka3MoKQotCi1jbGFzcyBkZXNrdG9wX3BsYXRmb3JtXzMyKFBsYXRmb3JtKToKLSAgICBzZGs9J21hY29zeCcKLSAgICBhcmNoID0gJ2kzODYnCi0gICAgbmFtZSA9ICdtYWMzMicKLSAgICB0cmlwbGUgPSAnaTM4Ni1hcHBsZS1kYXJ3aW4xMCcKLSAgICBzZGtyb290ID0gZGVza3RvcF9zZGtfaW5mb1snUGF0aCddCi0KLSAgICBwcmVmaXggPSAiI2lmIGRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKF9feDg2XzY0X18pXG5cbiIKLSAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKLQotY2xhc3MgZGVza3RvcF9wbGF0Zm9ybV82NChQbGF0Zm9ybSk6Ci0gICAgc2RrPSdtYWNvc3gnCi0gICAgYXJjaCA9ICd4ODZfNjQnCi0gICAgbmFtZSA9ICdtYWMnCi0gICAgdHJpcGxlID0gJ3g4Nl82NC1hcHBsZS1kYXJ3aW4xMCcKLSAgICBzZGtyb290ID0gZGVza3RvcF9zZGtfaW5mb1snUGF0aCddCi0KLSAgICBwcmVmaXggPSAiI2lmICFkZWZpbmVkKF9faTM4Nl9fKSAmJiBkZWZpbmVkKF9feDg2XzY0X18pXG5cbiIKLSAgICBzdWZmaXggPSAiXG5cbiNlbmRpZiIKLQotZGVmIG1vdmVfZmlsZShzcmNfZGlyLCBkc3RfZGlyLCBmaWxlbmFtZSwgZmlsZV9zdWZmaXg9Tm9uZSwgcHJlZml4PScnLCBzdWZmaXg9JycpOgotICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhkc3RfZGlyKToKLSAgICAgICAgb3MubWFrZWRpcnMoZHN0X2RpcikKLQotICAgIG91dF9maWxlbmFtZSA9IGZpbGVuYW1lCi0KLSAgICBpZiBmaWxlX3N1ZmZpeDoKLSAgICAgICAgc3BsaXRfbmFtZSA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpCi0gICAgICAgIG91dF9maWxlbmFtZSA9ICAiJXNfJXMlcyIgJSAoc3BsaXRfbmFtZVswXSwgZmlsZV9zdWZmaXgsIHNwbGl0X25hbWVbMV0pCi0KLSAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKHNyY19kaXIsIGZpbGVuYW1lKSkgYXMgaW5fZmlsZToKLSAgICAgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihkc3RfZGlyLCBvdXRfZmlsZW5hbWUpLCAndycpIGFzIG91dF9maWxlOgotICAgICAgICAgICAgaWYgcHJlZml4OgotICAgICAgICAgICAgICAgIG91dF9maWxlLndyaXRlKHByZWZpeCkKLQotICAgICAgICAgICAgb3V0X2ZpbGUud3JpdGUoaW5fZmlsZS5yZWFkKCkpCi0KLSAgICAgICAgICAgIGlmIHN1ZmZpeDoKLSAgICAgICAgICAgICAgICBvdXRfZmlsZS53cml0ZShzdWZmaXgpCi0KLWhlYWRlcnNfc2VlbiA9IGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KHNldCkKLQotZGVmIG1vdmVfc291cmNlX3RyZWUoc3JjX2RpciwgZGVzdF9kaXIsIGRlc3RfaW5jbHVkZV9kaXIsIGFyY2g9Tm9uZSwgcHJlZml4PU5vbmUsIHN1ZmZpeD1Ob25lKToKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhzcmNfZGlyLCBmb2xsb3dsaW5rcz1UcnVlKToKLSAgICAgICAgcmVscm9vdCA9IG9zLnBhdGgucmVscGF0aChyb290LHNyY19kaXIpCi0KLSAgICAgICAgZGVmIG1vdmVfZGlyKGFyY2gsIHByZWZpeD0nJywgc3VmZml4PScnLCBmaWxlcz1bXSk6Ci0gICAgICAgICAgICBmb3IgZmlsZSBpbiBmaWxlczoKLSAgICAgICAgICAgICAgICBmaWxlX3N1ZmZpeCA9IE5vbmUKLSAgICAgICAgICAgICAgICBpZiBmaWxlLmVuZHN3aXRoKCcuaCcpOgotICAgICAgICAgICAgICAgICAgICBpZiBkZXN0X2luY2x1ZGVfZGlyOgotICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9zdWZmaXggPSBhcmNoCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBhcmNoOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnNfc2VlbltmaWxlXS5hZGQoYXJjaCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVfZmlsZShyb290LCBkZXN0X2luY2x1ZGVfZGlyLCBmaWxlLCBhcmNoLCBwcmVmaXg9cHJlZml4LCBzdWZmaXg9c3VmZml4KQotCi0gICAgICAgICAgICAgICAgZWxpZiBkZXN0X2RpcjoKLSAgICAgICAgICAgICAgICAgICAgb3V0cm9vdCA9IG9zLnBhdGguam9pbihkZXN0X2RpciwgcmVscm9vdCkKLSAgICAgICAgICAgICAgICAgICAgbW92ZV9maWxlKHJvb3QsIG91dHJvb3QsIGZpbGUsIHByZWZpeD1wcmVmaXgsIHN1ZmZpeD1zdWZmaXgpCi0KLSAgICAgICAgaWYgcmVscm9vdCA9PSAnLic6Ci0gICAgICAgICAgICBtb3ZlX2RpcihhcmNoPWFyY2gsCi0gICAgICAgICAgICAgICAgICAgICBmaWxlcz1maWxlcywKLSAgICAgICAgICAgICAgICAgICAgIHByZWZpeD1wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICBzdWZmaXg9c3VmZml4KQotICAgICAgICBlbGlmIHJlbHJvb3QgPT0gJ3g4Nic6Ci0gICAgICAgICAgICBtb3ZlX2RpcihhcmNoPSdpMzg2JywKLSAgICAgICAgICAgICAgICAgICAgIHByZWZpeD0iI2lmIGRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKF9feDg2XzY0X18pXG5cbiIsCi0gICAgICAgICAgICAgICAgICAgICBzdWZmaXg9IlxuXG4jZW5kaWYiLAotICAgICAgICAgICAgICAgICAgICAgZmlsZXM9ZmlsZXMpCi0gICAgICAgICAgICBtb3ZlX2RpcihhcmNoPSd4ODZfNjQnLAotICAgICAgICAgICAgICAgICAgICAgcHJlZml4PSIjaWYgIWRlZmluZWQoX19pMzg2X18pICYmIGRlZmluZWQoX194ODZfNjRfXylcblxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHN1ZmZpeD0iXG5cbiNlbmRpZiIsCi0gICAgICAgICAgICAgICAgICAgICBmaWxlcz1maWxlcykKLQotZGVmIGJ1aWxkX3RhcmdldChwbGF0Zm9ybSk6Ci0gICAgZGVmIHhjcnVuX2NtZChjbWQpOgotICAgICAgICByZXR1cm4gc3VicHJvY2Vzcy5jaGVja19vdXRwdXQoWyd4Y3J1bicsICctc2RrJywgcGxhdGZvcm0uc2Rrcm9vdCwgJy1maW5kJywgY21kXSkuc3RyaXAoKQotCi0gICAgYnVpbGRfZGlyID0gJ2J1aWxkXycgKyBwbGF0Zm9ybS5uYW1lCi0gICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKGJ1aWxkX2Rpcik6Ci0gICAgICAgIG9zLm1ha2VkaXJzKGJ1aWxkX2RpcikKLSAgICAgICAgZW52ID0gZGljdChDQz14Y3J1bl9jbWQoJ2NsYW5nJyksCi0gICAgICAgICAgICAgICAgICAgTEQ9eGNydW5fY21kKCdsZCcpLAotICAgICAgICAgICAgICAgICAgIENGTEFHUz0nLWFyY2ggJXMgLWlzeXNyb290ICVzIC1tbWFjb3N4LXZlcnNpb24tbWluPTEwLjYnICUgKHBsYXRmb3JtLmFyY2gsIHBsYXRmb3JtLnNka3Jvb3QpKQotICAgICAgICB3b3JraW5nX2Rpcj1vcy5nZXRjd2QoKQotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBvcy5jaGRpcihidWlsZF9kaXIpCi0gICAgICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWycuLi9jb25maWd1cmUnLCAnLWhvc3QnLCBwbGF0Zm9ybS50cmlwbGVdLCBlbnY9ZW52KQotICAgICAgICAgICAgbW92ZV9zb3VyY2VfdHJlZSgnLicsIE5vbmUsICcuLi9vc3gvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2g9cGxhdGZvcm0uYXJjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PXBsYXRmb3JtLnByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4PXBsYXRmb3JtLnN1ZmZpeCkKLSAgICAgICAgICAgIG1vdmVfc291cmNlX3RyZWUoJy4vaW5jbHVkZScsIE5vbmUsICcuLi9vc3gvaW5jbHVkZScsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyY2g9cGxhdGZvcm0uYXJjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4PXBsYXRmb3JtLnByZWZpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4PXBsYXRmb3JtLnN1ZmZpeCkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIG9zLmNoZGlyKHdvcmtpbmdfZGlyKQotCi0gICAgICAgIGZvciBoZWFkZXJfbmFtZSwgYXJjaHMgaW4gaGVhZGVyc19zZWVuLml0ZXJpdGVtcygpOgotICAgICAgICAgICAgYmFzZW5hbWUsIHN1ZmZpeCA9IG9zLnBhdGguc3BsaXRleHQoaGVhZGVyX25hbWUpCi0KLWRlZiBtYWluKCk6Ci0gICAgbW92ZV9zb3VyY2VfdHJlZSgnc3JjJywgJ29zeC9zcmMnLCAnb3N4L2luY2x1ZGUnKQotICAgIG1vdmVfc291cmNlX3RyZWUoJ2luY2x1ZGUnLCBOb25lLCAnb3N4L2luY2x1ZGUnKQotICAgIGJ1aWxkX3RhcmdldChkZXNrdG9wX3BsYXRmb3JtXzMyKQotICAgIGJ1aWxkX3RhcmdldChkZXNrdG9wX3BsYXRmb3JtXzY0KQotCi0gICAgZm9yIGhlYWRlcl9uYW1lLCBhcmNocyBpbiBoZWFkZXJzX3NlZW4uaXRlcml0ZW1zKCk6Ci0gICAgICAgIGJhc2VuYW1lLCBzdWZmaXggPSBvcy5wYXRoLnNwbGl0ZXh0KGhlYWRlcl9uYW1lKQotICAgICAgICB3aXRoIG9wZW4ob3MucGF0aC5qb2luKCdvc3gvaW5jbHVkZScsIGhlYWRlcl9uYW1lKSwgJ3cnKSBhcyBoZWFkZXI6Ci0gICAgICAgICAgICBmb3IgYXJjaCBpbiBhcmNoczoKLSAgICAgICAgICAgICAgICBoZWFkZXIud3JpdGUoJyNpbmNsdWRlIDwlc18lcyVzPlxuJyAlIChiYXNlbmFtZSwgYXJjaCwgc3VmZml4KSkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9NYWtlZmlsZS5pbgppbmRleCAyYzM2ZTM2Li45ZDc0N2U4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvTWFrZWZpbGUuaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL01ha2VmaWxlLmluCkBAIC0xLDcgKzEsNyBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMi4yIGZyb20gTWFrZWZpbGUuYW0uCisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEzLjQgZnJvbSBNYWtlZmlsZS5hbS4KICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCkBAIC0xNSwyMyArMTUsNTEgQEAKIEBTRVRfTUFLRUAKIAogVlBBVEggPSBAc3JjZGlyQAotYW1fX21ha2VfZHJ5cnVuID0gXAotICB7IFwKLSAgICBhbV9fZHJ5PW5vOyBcCithbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCithbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisgICAgICA/KSA7OyBcCisgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorICAgICAgICAgZXhpdCAxOzsgXAorICBlc2FjOyBcCisgIGhhc19vcHQ9bm87IFwKKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorICBlbHNlIFwKICAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKICAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKLSAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAotICAgICAgKikgXAotICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAotICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKLSAgICAgICAgICAgICo9KnwtLSopIDs7IFwKLSAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAotICAgICAgICAgIGVzYWM7IFwKLSAgICAgICAgZG9uZTs7IFwKKyAgICAgICAgYnM9XFw7IFwKKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCiAgICAgZXNhYzsgXAotICAgIHRlc3QgJCRhbV9fZHJ5ID0geWVzOyBcCi0gIH0KKyAgZmk7IFwKKyAgc2tpcF9uZXh0PW5vOyBcCisgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKyAgeyBcCisgICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKKyAgfTsgXAorICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKyAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisgICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAorICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisgICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgZXNhYzsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKyAgICBlc2FjOyBcCisgIGRvbmU7IFwKKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCithbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQogcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACiBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKIHBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKQEAgLTUyLDcgKzgwLDcgQEAKIGhvc3RfdHJpcGxldCA9IEBob3N0QAogdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAogc3ViZGlyID0gaW5jbHVkZQotRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluIFwKK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbSBcCiAJJChzcmNkaXIpL2ZmaS5oLmluCiBBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CiBhbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9tNC9hc21jZmkubTQgXApAQCAtNzUsNiArMTAzLDE4IEBACiBDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2ZmaWNvbmZpZy5oCiBDT05GSUdfQ0xFQU5fRklMRVMgPSBmZmkuaCBmZml0YXJnZXQuaAogQ09ORklHX0NMRUFOX1ZQQVRIX0ZJTEVTID0KK0FNX1ZfUCA9ICQoYW1fX3ZfUF9AQU1fVkApCithbV9fdl9QXyA9ICQoYW1fX3ZfUF9AQU1fREVGQVVMVF9WQCkKK2FtX192X1BfMCA9IGZhbHNlCithbV9fdl9QXzEgPSA6CitBTV9WX0dFTiA9ICQoYW1fX3ZfR0VOX0BBTV9WQCkKK2FtX192X0dFTl8gPSAkKGFtX192X0dFTl9AQU1fREVGQVVMVF9WQCkKK2FtX192X0dFTl8wID0gQGVjaG8gIiAgR0VOICAgICAiICRAOworYW1fX3ZfR0VOXzEgPSAKK0FNX1ZfYXQgPSAkKGFtX192X2F0X0BBTV9WQCkKK2FtX192X2F0XyA9ICQoYW1fX3ZfYXRfQEFNX0RFRkFVTFRfVkApCithbV9fdl9hdF8wID0gQAorYW1fX3ZfYXRfMSA9IAogU09VUkNFUyA9CiBESVNUX1NPVVJDRVMgPQogYW1fX2Nhbl9ydW5faW5zdGFsbGluZm8gPSBcCkBAIC0xMTEsMTIgKzE1MSwzMCBAQAogICB9CiBhbV9faW5zdGFsbGRpcnMgPSAiJChERVNURElSKSQoaW5jbHVkZXNkaXIpIgogSEVBREVSUyA9ICQobm9kaXN0X2luY2x1ZGVzX0hFQURFUlMpCithbV9fdGFnZ2VkX2ZpbGVzID0gJChIRUFERVJTKSAkKFNPVVJDRVMpICQoVEFHU19GSUxFUykgJChMSVNQKQorIyBSZWFkIGEgbGlzdCBvZiBuZXdsaW5lLXNlcGFyYXRlZCBzdHJpbmdzIGZyb20gdGhlIHN0YW5kYXJkIGlucHV0LAorIyBhbmQgcHJpbnQgZWFjaCBvZiB0aGVtIG9uY2UsIHdpdGhvdXQgZHVwbGljYXRlcy4gIElucHV0IG9yZGVyIGlzCisjICpub3QqIHByZXNlcnZlZC4KK2FtX191bmlxdWlmeV9pbnB1dCA9ICQoQVdLKSAnXAorICBCRUdJTiB7IG5vbmVtcHR5ID0gMDsgfSBcCisgIHsgaXRlbXNbJCQwXSA9IDE7IG5vbmVtcHR5ID0gMTsgfSBcCisgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gaXRlbXMpIHByaW50IGk7IH07IH0gXAorJworIyBNYWtlIHN1cmUgdGhlIGxpc3Qgb2Ygc291cmNlcyBpcyB1bmlxdWUuICBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlLAorIyBlLmcuLCB0aGUgc2FtZSBzb3VyY2UgZmlsZSBtaWdodCBiZSBzaGFyZWQgYW1vbmcgX1NPVVJDRVMgdmFyaWFibGVzCisjIGZvciBkaWZmZXJlbnQgcHJvZ3JhbXMvbGlicmFyaWVzLgorYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyA9IFwKKyAgbGlzdD0nJChhbV9fdGFnZ2VkX2ZpbGVzKSc7IFwKKyAgdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKyAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKyAgZG9uZSB8ICQoYW1fX3VuaXF1aWZ5X2lucHV0KWAKIEVUQUdTID0gZXRhZ3MKIENUQUdTID0gY3RhZ3MKIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCiBBQ0xPQ0FMID0gQEFDTE9DQUxACiBBTExPQ0EgPSBAQUxMT0NBQAogQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKIEFNX0xUTERGTEFHUyA9IEBBTV9MVExERkxBR1NACiBBTV9SVU5URVNURkxBR1MgPSBAQU1fUlVOVEVTVEZMQUdTQAogQVIgPSBAQVJACkBAIC0xMzIsNiArMTkwLDEwIEBACiBDRkxBR1MgPSBAQ0ZMQUdTQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKIENZR1BBVEhfVyA9IEBDWUdQQVRIX1dACiBERUZTID0gQERFRlNACiBERVBESVIgPSBAREVQRElSQApAQCAtMTQ3LDYgKzIwOSw3IEBACiBGR1JFUCA9IEBGR1JFUEAKIEdSRVAgPSBAR1JFUEAKIEhBVkVfTE9OR19ET1VCTEUgPSBASEFWRV9MT05HX0RPVUJMRUAKK0hBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCA9IEBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlRACiBJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKQEAgLTE5Myw2ICsyNTYsNyBAQAogYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9BUiA9IEBhY19jdF9BUkAKIGFjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKIGFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKIGFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAogYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKQEAgLTMxNSwyNiArMzc5LDE1IEBACiAJZmlsZXM9YGZvciBwIGluICQkbGlzdDsgZG8gZWNobyAkJHA7IGRvbmUgfCBzZWQgLWUgJ3N8Xi4qL3x8J2A7IFwKIAlkaXI9JyQoREVTVERJUikkKGluY2x1ZGVzZGlyKSc7ICQoYW1fX3VuaW5zdGFsbF9maWxlc19mcm9tX2RpcikKIAotSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKLQlta2lkIC1mSUQgJCR1bmlxdWUKLXRhZ3M6IFRBR1MKK0lEOiAkKGFtX190YWdnZWRfZmlsZXMpCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiB0YWdzLWFtCitUQUdTOiB0YWdzCiAKLVRBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKLQkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCit0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCiAJc2V0IHg7IFwKIAloZXJlPWBwd2RgOyBcCi0JbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCi0JdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCi0JICBkb25lIHwgXAotCSAgJChBV0spICd7IGZpbGVzWyQkMF0gPSAxOyBub25lbXB0eSA9IDE7IH0gXAotCSAgICAgIEVORCB7IGlmIChub25lbXB0eSkgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH07IH0nYDsgXAorCSQoYW1fX2RlZmluZV91bmlxX3RhZ2dlZF9maWxlcyk7IFwKIAlzaGlmdDsgXAogCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJCokJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCiAJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCkBAIC0zNDYsMTUgKzM5OSwxMSBAQAogCSAgICAgICQkdW5pcXVlOyBcCiAJICBmaTsgXAogCWZpCi1jdGFnczogQ1RBR1MKLUNUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCi0JCSQoVEFHU19GSUxFUykgJChMSVNQKQotCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAotCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAotCSAgZG9uZSB8IFwKLQkgICQoQVdLKSAneyBmaWxlc1skJDBdID0gMTsgbm9uZW1wdHkgPSAxOyB9IFwKLQkgICAgICBFTkQgeyBpZiAobm9uZW1wdHkpIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9OyB9J2A7IFwKK2N0YWdzOiBjdGFncy1hbQorCitDVEFHUzogY3RhZ3MKK2N0YWdzLWFtOiAkKFRBR1NfREVQRU5ERU5DSUVTKSAkKGFtX190YWdnZWRfZmlsZXMpCisJJChhbV9fZGVmaW5lX3VuaXFfdGFnZ2VkX2ZpbGVzKTsgXAogCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHVuaXF1ZSIgXAogCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAogCSAgICAgJCR1bmlxdWUKQEAgLTM2Myw5ICs0MTIsMTAgQEAKIAloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAogCSAgJiYgJChhbV9fY2QpICQodG9wX3NyY2RpcikgXAogCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAiJCRoZXJlIgorY3Njb3BlbGlzdDogY3Njb3BlbGlzdC1hbQogCi1jc2NvcGVsaXN0OiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkKLQlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSc7IFwKK2NzY29wZWxpc3QtYW06ICQoYW1fX3RhZ2dlZF9maWxlcykKKwlsaXN0PSckKGFtX190YWdnZWRfZmlsZXMpJzsgXAogCWNhc2UgIiQoc3JjZGlyKSIgaW4gXAogCSAgW1xcL10qIHwgPzpbXFwvXSopIHNkaXI9IiQoc3JjZGlyKSIgOzsgXAogCSAgKikgc2Rpcj0kKHN1YmRpcikvJChzcmNkaXIpIDs7IFwKQEAgLTUxNywxOCArNTY3LDE5IEBACiAKIC5NQUtFOiBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKIAotLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAotCWNsZWFuLWxpYnRvb2wgY3Njb3BlbGlzdCBjdGFncyBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIFwKLQlodG1sLWFtIGluZm8gaW5mby1hbSBpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIFwKLQlpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1kdmkgaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIFwKLQlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1odG1sIGluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gXAotCWluc3RhbGwtaW5mby1hbSBpbnN0YWxsLW1hbiBpbnN0YWxsLW5vZGlzdF9pbmNsdWRlc0hFQURFUlMgXAotCWluc3RhbGwtcGRmIGluc3RhbGwtcGRmLWFtIGluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBcCi0JaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKLQltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCi0JbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAotCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtbm9kaXN0X2luY2x1ZGVzSEVBREVSUworLlBIT05ZOiBDVEFHUyBHVEFHUyBUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzIGN0YWdzLWFtIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgXAorCWR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLW5vZGlzdF9pbmNsdWRlc0hFQURFUlMgaW5zdGFsbC1wZGYgaW5zdGFsbC1wZGYtYW0gXAorCWluc3RhbGwtcHMgaW5zdGFsbC1wcy1hbSBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gdGFncyB0YWdzLWFtIHVuaW5zdGFsbCBcCisJdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1ub2Rpc3RfaW5jbHVkZXNIRUFERVJTCiAKIAogIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmkuaC5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmkuaC5pbgppbmRleCBhNTE1ODNiLi45M2M3NzZmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpLmguaW4KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaS5oLmluCkBAIC0yMjEsNiArMjIxLDExIEBACiAjZW5kaWYKIH0gZmZpX2NpZjsKIAorI2lmIEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVAorLyogVXNlZCB0byBhZGp1c3Qgc2l6ZS9hbGlnbm1lbnQgb2YgZmZpIHR5cGVzLiAgKi8KK3ZvaWQgZmZpX3ByZXBfdHlwZXMgKGZmaV9hYmkgYWJpKTsKKyMgZW5kaWYKKwogLyogVXNlZCBpbnRlcm5hbGx5LCBidXQgb3ZlcnJpZGRlbiBieSBzb21lIGFyY2hpdGVjdHVyZXMgKi8KIGZmaV9zdGF0dXMgZmZpX3ByZXBfY2lmX2NvcmUoZmZpX2NpZiAqY2lmLAogCQkJICAgICBmZmlfYWJpIGFiaSwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmlfY29tbW9uLmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luY2x1ZGUvZmZpX2NvbW1vbi5oCmluZGV4IDY1MGNhNjkuLjM3ZjVhOWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5jbHVkZS9mZmlfY29tbW9uLmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbmNsdWRlL2ZmaV9jb21tb24uaApAQCAtMSw1ICsxLDUgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBmZmlfY29tbW9uLmggLSBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgIEFudGhvbnkgR3JlZW4KKyAgIGZmaV9jb21tb24uaCAtIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiwgMjAxMyAgQW50aG9ueSBHcmVlbgogICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA3ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYwogICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTk2ICBSZWQgSGF0LCBJbmMuCiAgICAgICAgICAgICAgICAgICAKQEAgLTE5LDEwICsxOSwxNCBAQAogLyogRG8gbm90IG1vdmUgdGhpcy4gU29tZSB2ZXJzaW9ucyBvZiBBSVggYXJlIHZlcnkgcGlja3kgYWJvdXQgd2hlcmUKICAgIHRoaXMgaXMgcG9zaXRpb25lZC4gKi8KICNpZmRlZiBfX0dOVUNfXwotLyogbWluZ3c2NCBkZWZpbmVzIHRoaXMgYWxyZWFkeSBpbiBtYWxsb2MuaC4gKi8KLSNpZm5kZWYgYWxsb2NhCi0jIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQotI2VuZGlmCisjIGlmIEhBVkVfQUxMT0NBX0gKKyMgIGluY2x1ZGUgPGFsbG9jYS5oPgorIyBlbHNlCisgIC8qIG1pbmd3NjQgZGVmaW5lcyB0aGlzIGFscmVhZHkgaW4gbWFsbG9jLmguICovCisjICBpZm5kZWYgYWxsb2NhCisjICAgIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQorIyAgZW5kaWYKKyMgZW5kaWYKICMgZGVmaW5lIE1BWUJFX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKICNlbHNlCiAjIGRlZmluZSBNQVlCRV9VTlVTRUQKQEAgLTMwLDE3ICszNCwxNyBAQAogIyAgaW5jbHVkZSA8YWxsb2NhLmg+CiAjIGVsc2UKICMgIGlmZGVmIF9BSVgKLSAjcHJhZ21hIGFsbG9jYQorIyAgIHByYWdtYSBhbGxvY2EKICMgIGVsc2UKICMgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLwogIyAgICBpZmRlZiBfTVNDX1ZFUgogIyAgICAgZGVmaW5lIGFsbG9jYSBfYWxsb2NhCiAjICAgIGVsc2UKIGNoYXIgKmFsbG9jYSAoKTsKLSMgICAgZW5kaWYKICMgICBlbmRpZgogIyAgZW5kaWYKICMgZW5kaWYKKyMgZW5kaWYKICNlbmRpZgogCiAvKiBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiBtZW1jcHkuICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luc3RhbGwtc2ggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2luc3RhbGwtc2gKaW5kZXggNjc4MWI5OC4uMzc3YmI4NiAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9pbnN0YWxsLXNoCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvaW5zdGFsbC1zaApAQCAtMSw3ICsxLDcgQEAKICMhL2Jpbi9zaAogIyBpbnN0YWxsIC0gaW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCwgb3IgZGF0YWZpbGUKIAotc2NyaXB0dmVyc2lvbj0yMDA5LTA0LTI4LjIxOyAjIFVUQworc2NyaXB0dmVyc2lvbj0yMDExLTExLTIwLjA3OyAjIFVUQwogCiAjIFRoaXMgb3JpZ2luYXRlcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLCB3aGljaCB3YXMKICMgbGF0ZXIgcmVsZWFzZWQgaW4gWDExUjYgKHhjL2NvbmZpZy91dGlsL2luc3RhbGwuc2gpIHdpdGggdGhlCkBAIC0zNSw3ICszNSw3IEBACiAjIEZTRiBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBhcmUgaW4gdGhlIHB1YmxpYyBkb21haW4uCiAjCiAjIENhbGxpbmcgdGhpcyBzY3JpcHQgaW5zdGFsbC1zaCBpcyBwcmVmZXJyZWQgb3ZlciBpbnN0YWxsLnNoLCB0byBwcmV2ZW50Ci0jIGBtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CisjICdtYWtlJyBpbXBsaWNpdCBydWxlcyBmcm9tIGNyZWF0aW5nIGEgZmlsZSBjYWxsZWQgaW5zdGFsbCBmcm9tIGl0CiAjIHdoZW4gdGhlcmUgaXMgbm8gTWFrZWZpbGUuCiAjCiAjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KQEAgLTE1Niw2ICsxNTYsMTAgQEAKICAgICAtcykgc3RyaXBjbWQ9JHN0cmlwcHJvZzs7CiAKICAgICAtdCkgZHN0X2FyZz0kMgorCSMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCisJY2FzZSAkZHN0X2FyZyBpbgorCSAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKKwllc2FjCiAJc2hpZnQ7OwogCiAgICAgLVQpIG5vX3RhcmdldF9kaXJlY3Rvcnk9dHJ1ZTs7CkBAIC0xODYsNiArMTkwLDEwIEBACiAgICAgZmkKICAgICBzaGlmdCAjIGFyZwogICAgIGRzdF9hcmc9JGFyZworICAgICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCisgICAgY2FzZSAkZHN0X2FyZyBpbgorICAgICAgLSogfCBbPVwoXCkhXSkgZHN0X2FyZz0uLyRkc3RfYXJnOzsKKyAgICBlc2FjCiAgIGRvbmUKIGZpCiAKQEAgLTE5NCwxMyArMjAyLDE3IEBACiAgICAgZWNobyAiJDA6IG5vIGlucHV0IGZpbGUgc3BlY2lmaWVkLiIgPiYyCiAgICAgZXhpdCAxCiAgIGZpCi0gICMgSXQncyBPSyB0byBjYWxsIGBpbnN0YWxsLXNoIC1kJyB3aXRob3V0IGFyZ3VtZW50LgorICAjIEl0J3MgT0sgdG8gY2FsbCAnaW5zdGFsbC1zaCAtZCcgd2l0aG91dCBhcmd1bWVudC4KICAgIyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBjcmVhdGluZyBjb25kaXRpb25hbCBkaXJlY3Rvcmllcy4KICAgZXhpdCAwCiBmaQogCiBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KLSAgdHJhcCAnKGV4aXQgJD8pOyBleGl0JyAxIDIgMTMgMTUKKyAgZG9fZXhpdD0nKGV4aXQgJHJldCk7IGV4aXQgJHJldCcKKyAgdHJhcCAicmV0PTEyOTsgJGRvX2V4aXQiIDEKKyAgdHJhcCAicmV0PTEzMDsgJGRvX2V4aXQiIDIKKyAgdHJhcCAicmV0PTE0MTsgJGRvX2V4aXQiIDEzCisgIHRyYXAgInJldD0xNDM7ICRkb19leGl0IiAxNQogCiAgICMgU2V0IHVtYXNrIHNvIGFzIG5vdCB0byBjcmVhdGUgdGVtcHMgd2l0aCB0b28tZ2VuZXJvdXMgbW9kZXMuCiAgICMgSG93ZXZlciwgJ3N0cmlwJyByZXF1aXJlcyBib3RoIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyB0byB0ZW1wcy4KQEAgLTIyOCw5ICsyNDAsOSBAQAogCiBmb3Igc3JjCiBkbwotICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgICMgUHJvdGVjdCBuYW1lcyBwcm9ibGVtYXRpYyBmb3IgJ3Rlc3QnIGFuZCBvdGhlciB1dGlsaXRpZXMuCiAgIGNhc2UgJHNyYyBpbgotICAgIC0qKSBzcmM9Li8kc3JjOzsKKyAgICAtKiB8IFs9XChcKSFdKSBzcmM9Li8kc3JjOzsKICAgZXNhYwogCiAgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgpAQCAtMjUyLDEyICsyNjQsNyBAQAogICAgICAgZWNobyAiJDA6IG5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZC4iID4mMgogICAgICAgZXhpdCAxCiAgICAgZmkKLQogICAgIGRzdD0kZHN0X2FyZwotICAgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KLSAgICBjYXNlICRkc3QgaW4KLSAgICAgIC0qKSBkc3Q9Li8kZHN0OzsKLSAgICBlc2FjCiAKICAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCiAgICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KQEAgLTM0Nyw3ICszNTQsNyBAQAogCSAgICAgIGlmIHRlc3QgLXogIiRkaXJfYXJnIiB8fCB7CiAJCSAgICMgQ2hlY2sgZm9yIFBPU0lYIGluY29tcGF0aWJpbGl0aWVzIHdpdGggLW0uCiAJCSAgICMgSFAtVVggMTEuMjMgYW5kIElSSVggNi41IG1rZGlyIC1tIC1wIHNldHMgZ3JvdXAtIG9yCi0JCSAgICMgb3RoZXItd3JpdGVhYmxlIGJpdCBvZiBwYXJlbnQgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkbid0LgorCQkgICAjIG90aGVyLXdyaXRhYmxlIGJpdCBvZiBwYXJlbnQgZGlyZWN0b3J5IHdoZW4gaXQgc2hvdWxkbid0LgogCQkgICAjIEZyZWVCU0QgNi4xIG1rZGlyIC1tIC1wIHNldHMgbW9kZSBvZiBleGlzdGluZyBkaXJlY3RvcnkuCiAJCSAgIGxzX2xkX3RtcGRpcj1gbHMgLWxkICIkdG1wZGlyImAKIAkJICAgY2FzZSAkbHNfbGRfdG1wZGlyIGluCkBAIC0zODUsNyArMzkyLDcgQEAKIAogICAgICAgY2FzZSAkZHN0ZGlyIGluCiAJLyopIHByZWZpeD0nLyc7OwotCS0qKSBwcmVmaXg9Jy4vJzs7CisJWy09XChcKSFdKikgcHJlZml4PScuLyc7OwogCSopICBwcmVmaXg9Jyc7OwogICAgICAgZXNhYwogCkBAIC00MDMsNyArNDEwLDcgQEAKIAogICAgICAgZm9yIGQKICAgICAgIGRvCi0JdGVzdCAteiAiJGQiICYmIGNvbnRpbnVlCisJdGVzdCBYIiRkIiA9IFggJiYgY29udGludWUKIAogCXByZWZpeD0kcHJlZml4JGQKIAlpZiB0ZXN0IC1kICIkcHJlZml4IjsgdGhlbgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkucGMuaW4gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS5wYy5pbgppbmRleCBjMmUxYzdiLi5lZGY2ZmRlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS5wYy5pbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS5wYy5pbgpAQCAtMSwxMCArMSwxMSBAQAogcHJlZml4PUBwcmVmaXhACiBleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACiBsaWJkaXI9QGxpYmRpckAKK3Rvb2xleGVjbGliZGlyPUB0b29sZXhlY2xpYmRpckAKIGluY2x1ZGVkaXI9JHtsaWJkaXJ9L0BQQUNLQUdFX05BTUVALUBQQUNLQUdFX1ZFUlNJT05AL2luY2x1ZGUKIAogTmFtZTogQFBBQ0tBR0VfTkFNRUAKIERlc2NyaXB0aW9uOiBMaWJyYXJ5IHN1cHBvcnRpbmcgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2VzCiBWZXJzaW9uOiBAUEFDS0FHRV9WRVJTSU9OQAotTGliczogLUwke2xpYmRpcn0gLWxmZmkKK0xpYnM6IC1MJHt0b29sZXhlY2xpYmRpcn0gLWxmZmkKIENmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJmZmkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxNGMzOWEyLi4xY2YzOTZmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYmZmaS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbGliZmZpLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTcsNDczICs3LDQ0OCBAQAogCW9iamVjdHMgPSB7CiAKIC8qIEJlZ2luIFBCWEJ1aWxkRmlsZSBzZWN0aW9uICovCi0JCTZDNDNDQkRDMTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQkJEMTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyAqLzsgfTsKLQkJNkM0M0NCREQxNTM0Rjc2RjAwMTYyMzY0IC8qIHN5c3YuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQkJGMTUzNEY3NkYwMDE2MjM2NCAvKiBzeXN2LlMgKi87IH07Ci0JCTZDNDNDQkRFMTUzNEY3NkYwMDE2MjM2NCAvKiB0cmFtcG9saW5lLlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0JDMDE1MzRGNzZGMDAxNjIzNjQgLyogdHJhbXBvbGluZS5TICovOyB9OwotCQk2QzQzQ0JFNjE1MzRGNzZGMDAxNjIzNjQgLyogZGFyd2luLlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0JDOTE1MzRGNzZGMDAxNjIzNjQgLyogZGFyd2luLlMgKi87IH07Ci0JCTZDNDNDQkU4MTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQkNCMTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyAqLzsgfTsKLQkJNkM0M0NDMUYxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbi5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMDUxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbi5TICovOyB9OwotCQk2QzQzQ0MyMDE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luNjQuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzA2MTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW42NC5TICovOyB9OwotCQk2QzQzQ0MyMTE1MzRGNzc4MDAxNjIzNjQgLyogZmZpLmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0MwNzE1MzRGNzc4MDAxNjIzNjQgLyogZmZpLmMgKi87IH07Ci0JCTZDNDNDQzIyMTUzNEY3NzgwMDE2MjM2NCAvKiBmZmk2NC5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMDgxNTM0Rjc3ODAwMTYyMzY0IC8qIGZmaTY0LmMgKi87IH07Ci0JCTZDNDNDQzJGMTUzNEY3QkUwMDE2MjM2NCAvKiBjbG9zdXJlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMjgxNTM0RjdCRTAwMTYyMzY0IC8qIGNsb3N1cmVzLmMgKi87IH07Ci0JCTZDNDNDQzMwMTUzNEY3QkUwMDE2MjM2NCAvKiBjbG9zdXJlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMjgxNTM0RjdCRTAwMTYyMzY0IC8qIGNsb3N1cmVzLmMgKi87IH07Ci0JCTZDNDNDQzM1MTUzNEY3QkUwMDE2MjM2NCAvKiBqYXZhX3Jhd19hcGkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzJCMTUzNEY3QkUwMDE2MjM2NCAvKiBqYXZhX3Jhd19hcGkuYyAqLzsgfTsKLQkJNkM0M0NDMzYxNTM0RjdCRTAwMTYyMzY0IC8qIGphdmFfcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMkIxNTM0RjdCRTAwMTYyMzY0IC8qIGphdmFfcmF3X2FwaS5jICovOyB9OwotCQk2QzQzQ0MzNzE1MzRGN0JFMDAxNjIzNjQgLyogcHJlcF9jaWYuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzJDMTUzNEY3QkUwMDE2MjM2NCAvKiBwcmVwX2NpZi5jICovOyB9OwotCQk2QzQzQ0MzODE1MzRGN0JFMDAxNjIzNjQgLyogcHJlcF9jaWYuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzJDMTUzNEY3QkUwMDE2MjM2NCAvKiBwcmVwX2NpZi5jICovOyB9OwotCQk2QzQzQ0MzOTE1MzRGN0JFMDAxNjIzNjQgLyogcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMkQxNTM0RjdCRTAwMTYyMzY0IC8qIHJhd19hcGkuYyAqLzsgfTsKLQkJNkM0M0NDM0ExNTM0RjdCRTAwMTYyMzY0IC8qIHJhd19hcGkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzJEMTUzNEY3QkUwMDE2MjM2NCAvKiByYXdfYXBpLmMgKi87IH07Ci0JCTZDNDNDQzNCMTUzNEY3QkUwMDE2MjM2NCAvKiB0eXBlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMkUxNTM0RjdCRTAwMTYyMzY0IC8qIHR5cGVzLmMgKi87IH07Ci0JCTZDNDNDQzNDMTUzNEY3QkUwMDE2MjM2NCAvKiB0eXBlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDMkUxNTM0RjdCRTAwMTYyMzY0IC8qIHR5cGVzLmMgKi87IH07Ci0JCTZDNDNDQzk3MTUzNTAzMjYwMDE2MjM2NCAvKiBmZmkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzhEMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQzk4MTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M4RTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDOTkxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9pMzg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M4RjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2kzODYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQzlBMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfeDg2XzY0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M5MDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX3g4Nl82NC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDOUIxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOTExNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oICovOyB9OwotCQk2QzQzQ0M5QzE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQzkyMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oICovOyB9OwotCQk2QzQzQ0M5RDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX3g4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOTMxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ194ODZfNjQuaCAqLzsgfTsKLQkJNkM0M0NDOUUxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDOTQxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDOUYxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M5NTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQ0EwMTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfeDg2XzY0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0M5NjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X3g4Nl82NC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDQUQxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQTIxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDQUUxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9hcm12Ny5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQTMxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9hcm12Ny5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDQUYxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0E0MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHVibGljLCApOyB9OyB9OwotCQk2QzQzQ0NCMDE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2kzODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0E1MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDQjExNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQTYxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZy5oICovOyB9OwotCQk2QzQzQ0NCMjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2FybXY3LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBNzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2FybXY3LmggKi87IH07Ci0JCTZDNDNDQ0IzMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQTgxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19pMzg2LmggKi87IH07Ci0JCTZDNDNDQ0I0MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDZDNDNDQ0E5MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07Ci0JCTZDNDNDQ0I1MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBQTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDQjYxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm12Ny5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0M0NDQUIxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm12Ny5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFB1YmxpYywgKTsgfTsgfTsKLQkJNkM0M0NDQjcxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9pMzg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QzQzQ0NBQzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQdWJsaWMsICk7IH07IH07CisJCURCRkE3MTRBMTg3RjFEODYwMEE3NjI2MiAvKiBmZmkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTNFMTg3RjFEODYwMEE3NjI2MiAvKiBmZmkuaCAqLzsgfTsKKwkJREJGQTcxNEIxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaV9jb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTNGMTg3RjFEODYwMEE3NjI2MiAvKiBmZmlfY29tbW9uLmggKi87IH07CisJCURCRkE3MTRDMTg3RjFEODYwMEE3NjI2MiAvKiBmZmljb25maWcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQwMTg3RjFEODYwMEE3NjI2MiAvKiBmZmljb25maWcuaCAqLzsgfTsKKwkJREJGQTcxNEQxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaXRhcmdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDExODdGMUQ4NjAwQTc2MjYyIC8qIGZmaXRhcmdldC5oICovOyB9OworCQlEQkZBNzE0RTE4N0YxRDg2MDBBNzYyNjIgLyogY2xvc3VyZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQzMTg3RjFEODYwMEE3NjI2MiAvKiBjbG9zdXJlcy5jICovOyB9OworCQlEQkZBNzE0RjE4N0YxRDg2MDBBNzYyNjIgLyogY2xvc3VyZXMuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQzMTg3RjFEODYwMEE3NjI2MiAvKiBjbG9zdXJlcy5jICovOyB9OworCQlEQkZBNzE1NjE4N0YxRDg2MDBBNzYyNjIgLyogcHJlcF9jaWYuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQ3MTg3RjFEODYwMEE3NjI2MiAvKiBwcmVwX2NpZi5jICovOyB9OworCQlEQkZBNzE1NzE4N0YxRDg2MDBBNzYyNjIgLyogcHJlcF9jaWYuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQ3MTg3RjFEODYwMEE3NjI2MiAvKiBwcmVwX2NpZi5jICovOyB9OworCQlEQkZBNzE1ODE4N0YxRDg2MDBBNzYyNjIgLyogcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDgxODdGMUQ4NjAwQTc2MjYyIC8qIHJhd19hcGkuYyAqLzsgfTsKKwkJREJGQTcxNTkxODdGMUQ4NjAwQTc2MjYyIC8qIHJhd19hcGkuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTQ4MTg3RjFEODYwMEE3NjI2MiAvKiByYXdfYXBpLmMgKi87IH07CisJCURCRkE3MTVBMTg3RjFEODYwMEE3NjI2MiAvKiB0eXBlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDkxODdGMUQ4NjAwQTc2MjYyIC8qIHR5cGVzLmMgKi87IH07CisJCURCRkE3MTVCMTg3RjFEODYwMEE3NjI2MiAvKiB0eXBlcy5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNDkxODdGMUQ4NjAwQTc2MjYyIC8qIHR5cGVzLmMgKi87IH07CisJCURCRkE3MTc3MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtNjQuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTZDMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtNjQuYyAqLzsgfTsKKwkJREJGQTcxNzgxODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtNjQuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTZEMTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybTY0LlMgKi87IH07CisJCURCRkE3MTc5MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtdjcuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTZGMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtdjcuYyAqLzsgfTsKKwkJREJGQTcxN0ExODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtdjcuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTcwMTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybXY3LlMgKi87IH07CisJCURCRkE3MTdCMTg3RjFEOUIwMEE3NjI2MiAvKiB0cmFtcG9saW5lX2FybXY3LlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE3MTE4N0YxRDlCMDBBNzYyNjIgLyogdHJhbXBvbGluZV9hcm12Ny5TICovOyB9OworCQlEQkZBNzE3QzE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE3MzE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgKi87IH07CisJCURCRkE3MTdEMTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxNzQxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgKi87IH07CisJCURCRkE3MTdFMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTc1MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyAqLzsgfTsKKwkJREJGQTcxN0YxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE3NjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2kzODYuYyAqLzsgfTsKKwkJREJGQTcxOEUxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4MjE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuaCAqLzsgfTsKKwkJREJGQTcxOEYxODdGMURBMTAwQTc2MjYyIC8qIGZmaV94ODZfNjQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTgzMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfeDg2XzY0LmggKi87IH07CisJCURCRkE3MTkwMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfaTM4Ni5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxODQxODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ19pMzg2LmggKi87IH07CisJCURCRkE3MTkxMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfeDg2XzY0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4NTE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX3g4Nl82NC5oICovOyB9OworCQlEQkZBNzE5MjE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2kzODYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MTg2MTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfaTM4Ni5oICovOyB9OworCQlEQkZBNzE5MzE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X3g4Nl82NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxODcxODdGMURBMTAwQTc2MjYyIC8qIGZmaXRhcmdldF94ODZfNjQuaCAqLzsgfTsKKwkJREJGQTcxOTQxODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxOEExODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TICovOyB9OworCQlEQkZBNzE5NTE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERCRkE3MThCMTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TICovOyB9OworCQlEQkZBNzE5NjE4N0YxREExMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQkZBNzE4QzE4N0YxREExMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgKi87IH07CisJCURCRkE3MTk3MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREJGQTcxOEQxODdGMURBMTAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgKi87IH07CiAvKiBFbmQgUEJYQnVpbGRGaWxlIHNlY3Rpb24gKi8KIAorLyogQmVnaW4gUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCisJCURCMTNCMTY0MTg0OURGMUUwMDEwRjQyRCAvKiBDb3B5RmlsZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhDb3B5RmlsZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gODsKKwkJCWRzdFBhdGggPSAiaW5jbHVkZS8kKFBST0RVQ1RfTkFNRSkiOworCQkJZHN0U3ViZm9sZGVyU3BlYyA9IDE2OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDE7CisJCX07CisvKiBFbmQgUEJYQ29weUZpbGVzQnVpbGRQaGFzZSBzZWN0aW9uICovCisKIC8qIEJlZ2luIFBCWEZpbGVSZWZlcmVuY2Ugc2VjdGlvbiAqLwotCQk2QzQzQ0IzRDE1MzRFOUQxMDAxNjIzNjQgLyogbGliZmZpLmEgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9IGFyY2hpdmUuYXI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGxpYmZmaS5hOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwotCQk2QzQzQ0JCRDE1MzRGNzZGMDAxNjIzNjQgLyogZmZpLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0JCRjE1MzRGNzZGMDAxNjIzNjQgLyogc3lzdi5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBzeXN2LlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQkMwMTUzNEY3NkYwMDE2MjM2NCAvKiB0cmFtcG9saW5lLlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IHRyYW1wb2xpbmUuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NCQzkxNTM0Rjc2RjAwMTYyMzY0IC8qIGRhcndpbi5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBkYXJ3aW4uUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NCQ0IxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmkuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDMDUxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbi5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBkYXJ3aW4uUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDMDYxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbjY0LlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IGRhcndpbjY0LlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzA3MTUzNEY3NzgwMDE2MjM2NCAvKiBmZmkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQzA4MTUzNEY3NzgwMDE2MjM2NCAvKiBmZmk2NC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmk2NC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0MyODE1MzRGN0JFMDAxNjIzNjQgLyogY2xvc3VyZXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gY2xvc3VyZXMuYzsgcGF0aCA9IHNyYy9jbG9zdXJlcy5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07Ci0JCTZDNDNDQzJCMTUzNEY3QkUwMDE2MjM2NCAvKiBqYXZhX3Jhd19hcGkuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gamF2YV9yYXdfYXBpLmM7IHBhdGggPSBzcmMvamF2YV9yYXdfYXBpLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKLQkJNkM0M0NDMkMxNTM0RjdCRTAwMTYyMzY0IC8qIHByZXBfY2lmLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHByZXBfY2lmLmM7IHBhdGggPSBzcmMvcHJlcF9jaWYuYzsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OwotCQk2QzQzQ0MyRDE1MzRGN0JFMDAxNjIzNjQgLyogcmF3X2FwaS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSByYXdfYXBpLmM7IHBhdGggPSBzcmMvcmF3X2FwaS5jOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07Ci0JCTZDNDNDQzJFMTUzNEY3QkUwMDE2MjM2NCAvKiB0eXBlcy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB0eXBlcy5jOyBwYXRoID0gc3JjL3R5cGVzLmM7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKLQkJNkM0M0NDOEQxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDOEUxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2NvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0M4RjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDOTAxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV94ODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX3g4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0M5MTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0M5MjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDOTMxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ194ODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX3g4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0M5NDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0M5NTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDOTYxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF94ODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X3g4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBMjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBMzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2FybXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9hcm12Ny5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBNDE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2NvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfY29tbW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZDNDNDQ0E1MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBNjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBNzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2FybXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ19hcm12Ny5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBODE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQTkxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkM0M0NDQUExNTM1MDM5NjAwMTYyMzY0IC8qIGZmaXRhcmdldF9hcm0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X2FybS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBQjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF9hcm12Ny5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QzQzQ0NBQzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRjZGOTgwQkExNDczODYxMzAwMDhGMTIxIC8qIGxpYmZmaS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJmZmkuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJREIxM0IxNjYxODQ5REYxRTAwMTBGNDJEIC8qIGxpYmZmaS5hICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSBhcmNoaXZlLmFyOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSBsaWJmZmkuYTsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJREIxM0IxOTExODQ5REY1MTAwMTBGNDJEIC8qIGZmaS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IGZmaS5keWxpYjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKKwkJREJGQTcxM0UxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxM0YxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaV9jb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2NvbW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE0MDE4N0YxRDg2MDBBNzYyNjIgLyogZmZpY29uZmlnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE0MTE4N0YxRDg2MDBBNzYyNjIgLyogZmZpdGFyZ2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE0MzE4N0YxRDg2MDBBNzYyNjIgLyogY2xvc3VyZXMuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gY2xvc3VyZXMuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNDUxODdGMUQ4NjAwQTc2MjYyIC8qIGRsbWFsbG9jLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGRsbWFsbG9jLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTQ3MTg3RjFEODYwMEE3NjI2MiAvKiBwcmVwX2NpZi5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBwcmVwX2NpZi5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE0ODE4N0YxRDg2MDBBNzYyNjIgLyogcmF3X2FwaS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSByYXdfYXBpLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTQ5MTg3RjFEODYwMEE3NjI2MiAvKiB0eXBlcy5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSB0eXBlcy5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE1RTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybTY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9hcm02NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE1RjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaV9hcm12Ny5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2MDE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjExODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV94ODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpX3g4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2MjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpY29uZmlnX2FybTY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ19hcm02NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2MzE4N0YxRDlCMDBBNzYyNjIgLyogZmZpY29uZmlnX2FybXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaWNvbmZpZ19hcm12Ny5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2NDE4N0YxRDlCMDBBNzYyNjIgLyogZmZpY29uZmlnX2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjUxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaWNvbmZpZ194ODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpY29uZmlnX3g4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2NjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2FybTY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF9hcm02NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2NzE4N0YxRDlCMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2FybXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IGZmaXRhcmdldF9hcm12Ny5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2ODE4N0YxRDlCMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2kzODYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X2kzODYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNjkxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaXRhcmdldF94ODZfNjQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gZmZpdGFyZ2V0X3g4Nl82NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2QzE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybTY0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaV9hcm02NC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE2RDE4N0YxRDlCMDBBNzYyNjIgLyogc3lzdl9hcm02NC5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBzeXN2X2FybTY0LlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTZGMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtdjcuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpX2FybXY3LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTcwMTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybXY3LlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IHN5c3ZfYXJtdjcuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNzExODdGMUQ5QjAwQTc2MjYyIC8qIHRyYW1wb2xpbmVfYXJtdjcuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gdHJhbXBvbGluZV9hcm12Ny5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE3MzE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbTsgcGF0aCA9IGRhcndpbjY0X3g4Nl82NC5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE3NDE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gZGFyd2luX2kzODYuUzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNzUxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBmZmk2NF94ODZfNjQuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREJGQTcxNzYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaV9pMzg2LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTgyMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4MzE4N0YxREExMDBBNzYyNjIgLyogZmZpX3g4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmlfeDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTg0MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4NTE4N0YxREExMDBBNzYyNjIgLyogZmZpY29uZmlnX3g4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZmljb25maWdfeDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MTg2MTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfaTM4Ni5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfaTM4Ni5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4NzE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X3g4Nl82NC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBmZml0YXJnZXRfeDg2XzY0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MThBMTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtOyBwYXRoID0gZGFyd2luNjRfeDg2XzY0LlM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURCRkE3MThCMTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5hc207IHBhdGggPSBkYXJ3aW5faTM4Ni5TOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4QzE4N0YxREExMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgcGF0aCA9IGZmaTY0X3g4Nl82NC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQkZBNzE4RDE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gZmZpX2kzODYuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIC8qIEVuZCBQQlhGaWxlUmVmZXJlbmNlIHNlY3Rpb24gKi8KIAotLyogQmVnaW4gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQk2QzQzQ0IzQTE1MzRFOUQxMDAxNjIzNjQgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlGNkY5ODBCNzE0NzM4NjEzMDAwOEYxMjEgLyogRnJhbWV3b3JrcyAqLyA9IHsKLQkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotLyogRW5kIFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQogLyogQmVnaW4gUEJYR3JvdXAgc2VjdGlvbiAqLwotCQk2QzQzQ0JBRjE1MzRGNzZGMDAxNjIzNjQgLyogaU9TICovID0geworCQlEQjEzQjE1QjE4NDlERUI3MDAxMEY0MkQgPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQ0ExMTUzNTAzOTYwMDE2MjM2NCAvKiBpbmNsdWRlICovLAotCQkJCTZDNDNDQkJCMTUzNEY3NkYwMDE2MjM2NCAvKiBzcmMgKi8sCisJCQkJREJGQTcxM0MxODdGMUQ4NjAwQTc2MjYyIC8qIGRhcndpbl9jb21tb24gKi8sCisJCQkJREJGQTcxNUMxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbl9pb3MgKi8sCisJCQkJREJGQTcxODAxODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbl9vc3ggKi8sCisJCQkJREIxM0IxNjcxODQ5REYxRTAwMTBGNDJEIC8qIFByb2R1Y3RzICovLAogCQkJKTsKLQkJCW5hbWUgPSBpT1M7Ci0JCQlwYXRoID0gaW9zOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJNkM0M0NCQkIxNTM0Rjc2RjAwMTYyMzY0IC8qIHNyYyAqLyA9IHsKKwkJREIxM0IxNjcxODQ5REYxRTAwMTBGNDJEIC8qIFByb2R1Y3RzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0JDODE1MzRGNzZGMDAxNjIzNjQgLyogeDg2ICovLAotCQkJCTZDNDNDQkJDMTUzNEY3NkYwMDE2MjM2NCAvKiBhcm0gKi8sCisJCQkJREIxM0IxNjYxODQ5REYxRTAwMTBGNDJEIC8qIGxpYmZmaS5hICovLAorCQkJCURCMTNCMTkxMTg0OURGNTEwMDEwRjQyRCAvKiBmZmkuZHlsaWIgKi8sCisJCQkpOworCQkJbmFtZSA9IFByb2R1Y3RzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJREJGQTcxM0MxODdGMUQ4NjAwQTc2MjYyIC8qIGRhcndpbl9jb21tb24gKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURCRkE3MTNEMTg3RjFEODYwMEE3NjI2MiAvKiBpbmNsdWRlICovLAorCQkJCURCRkE3MTQyMTg3RjFEODYwMEE3NjI2MiAvKiBzcmMgKi8sCisJCQkpOworCQkJcGF0aCA9ICJkYXJ3aW5fY29tbW9uIjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCURCRkE3MTNEMTg3RjFEODYwMEE3NjI2MiAvKiBpbmNsdWRlICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlEQkZBNzEzRTE4N0YxRDg2MDBBNzYyNjIgLyogZmZpLmggKi8sCisJCQkJREJGQTcxM0YxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaV9jb21tb24uaCAqLywKKwkJCQlEQkZBNzE0MDE4N0YxRDg2MDBBNzYyNjIgLyogZmZpY29uZmlnLmggKi8sCisJCQkJREJGQTcxNDExODdGMUQ4NjAwQTc2MjYyIC8qIGZmaXRhcmdldC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBpbmNsdWRlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJREJGQTcxNDIxODdGMUQ4NjAwQTc2MjYyIC8qIHNyYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJREJGQTcxNDMxODdGMUQ4NjAwQTc2MjYyIC8qIGNsb3N1cmVzLmMgKi8sCisJCQkJREJGQTcxNDUxODdGMUQ4NjAwQTc2MjYyIC8qIGRsbWFsbG9jLmMgKi8sCisJCQkJREJGQTcxNDcxODdGMUQ4NjAwQTc2MjYyIC8qIHByZXBfY2lmLmMgKi8sCisJCQkJREJGQTcxNDgxODdGMUQ4NjAwQTc2MjYyIC8qIHJhd19hcGkuYyAqLywKKwkJCQlEQkZBNzE0OTE4N0YxRDg2MDBBNzYyNjIgLyogdHlwZXMuYyAqLywKIAkJCSk7CiAJCQlwYXRoID0gc3JjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJNkM0M0NCQkMxNTM0Rjc2RjAwMTYyMzY0IC8qIGFybSAqLyA9IHsKKwkJREJGQTcxNUMxODdGMUQ5QjAwQTc2MjYyIC8qIGRhcndpbl9pb3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQkJEMTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyAqLywKLQkJCQk2QzQzQ0JCRjE1MzRGNzZGMDAxNjIzNjQgLyogc3lzdi5TICovLAotCQkJCTZDNDNDQkMwMTUzNEY3NkYwMDE2MjM2NCAvKiB0cmFtcG9saW5lLlMgKi8sCisJCQkJREJGQTcxNUQxODdGMUQ5QjAwQTc2MjYyIC8qIGluY2x1ZGUgKi8sCisJCQkJREJGQTcxNkExODdGMUQ5QjAwQTc2MjYyIC8qIHNyYyAqLywKKwkJCSk7CisJCQlwYXRoID0gImRhcndpbl9pb3MiOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJREJGQTcxNUQxODdGMUQ5QjAwQTc2MjYyIC8qIGluY2x1ZGUgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCURCRkE3MTVFMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtNjQuaCAqLywKKwkJCQlEQkZBNzE1RjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybXY3LmggKi8sCisJCQkJREJGQTcxNjAxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9pMzg2LmggKi8sCisJCQkJREJGQTcxNjExODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV94ODZfNjQuaCAqLywKKwkJCQlEQkZBNzE2MjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpY29uZmlnX2FybTY0LmggKi8sCisJCQkJREJGQTcxNjMxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaWNvbmZpZ19hcm12Ny5oICovLAorCQkJCURCRkE3MTY0MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmljb25maWdfaTM4Ni5oICovLAorCQkJCURCRkE3MTY1MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmljb25maWdfeDg2XzY0LmggKi8sCisJCQkJREJGQTcxNjYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaXRhcmdldF9hcm02NC5oICovLAorCQkJCURCRkE3MTY3MTg3RjFEOUIwMEE3NjI2MiAvKiBmZml0YXJnZXRfYXJtdjcuaCAqLywKKwkJCQlEQkZBNzE2ODE4N0YxRDlCMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2kzODYuaCAqLywKKwkJCQlEQkZBNzE2OTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpdGFyZ2V0X3g4Nl82NC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBpbmNsdWRlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJREJGQTcxNkExODdGMUQ5QjAwQTc2MjYyIC8qIHNyYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJREJGQTcxNkIxODdGMUQ5QjAwQTc2MjYyIC8qIGFhcmNoNjQgKi8sCisJCQkJREJGQTcxNkUxODdGMUQ5QjAwQTc2MjYyIC8qIGFybSAqLywKKwkJCQlEQkZBNzE3MjE4N0YxRDlCMDBBNzYyNjIgLyogeDg2ICovLAorCQkJKTsKKwkJCXBhdGggPSBzcmM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlEQkZBNzE2QjE4N0YxRDlCMDBBNzYyNjIgLyogYWFyY2g2NCAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJREJGQTcxNkMxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm02NC5jICovLAorCQkJCURCRkE3MTZEMTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybTY0LlMgKi8sCisJCQkpOworCQkJcGF0aCA9IGFhcmNoNjQ7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlEQkZBNzE2RTE4N0YxRDlCMDBBNzYyNjIgLyogYXJtICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlEQkZBNzE2RjE4N0YxRDlCMDBBNzYyNjIgLyogZmZpX2FybXY3LmMgKi8sCisJCQkJREJGQTcxNzAxODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtdjcuUyAqLywKKwkJCQlEQkZBNzE3MTE4N0YxRDlCMDBBNzYyNjIgLyogdHJhbXBvbGluZV9hcm12Ny5TICovLAogCQkJKTsKIAkJCXBhdGggPSBhcm07CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQk2QzQzQ0JDODE1MzRGNzZGMDAxNjIzNjQgLyogeDg2ICovID0geworCQlEQkZBNzE3MjE4N0YxRDlCMDBBNzYyNjIgLyogeDg2ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0JDOTE1MzRGNzZGMDAxNjIzNjQgLyogZGFyd2luLlMgKi8sCi0JCQkJNkM0M0NCQ0IxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jICovLAorCQkJCURCRkE3MTczMTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyAqLywKKwkJCQlEQkZBNzE3NDE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyAqLywKKwkJCQlEQkZBNzE3NTE4N0YxRDlCMDBBNzYyNjIgLyogZmZpNjRfeDg2XzY0LmMgKi8sCisJCQkJREJGQTcxNzYxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgKi8sCiAJCQkpOwogCQkJcGF0aCA9IHg4NjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTZDNDNDQkYwMTUzNEY3NzgwMDE2MjM2NCAvKiBPUyBYICovID0geworCQlEQkZBNzE4MDE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luX29zeCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NDOEMxNTM1MDMyNjAwMTYyMzY0IC8qIGluY2x1ZGUgKi8sCi0JCQkJNkM0M0NCRkMxNTM0Rjc3ODAwMTYyMzY0IC8qIHNyYyAqLywKKwkJCQlEQkZBNzE4MTE4N0YxREExMDBBNzYyNjIgLyogaW5jbHVkZSAqLywKKwkJCQlEQkZBNzE4ODE4N0YxREExMDBBNzYyNjIgLyogc3JjICovLAogCQkJKTsKLQkJCW5hbWUgPSAiT1MgWCI7Ci0JCQlwYXRoID0gb3N4OworCQkJcGF0aCA9ICJkYXJ3aW5fb3N4IjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTZDNDNDQkZDMTUzNEY3NzgwMDE2MjM2NCAvKiBzcmMgKi8gPSB7CisJCURCRkE3MTgxMTg3RjFEQTEwMEE3NjI2MiAvKiBpbmNsdWRlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0MwNDE1MzRGNzc4MDAxNjIzNjQgLyogeDg2ICovLAorCQkJCURCRkE3MTgyMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5oICovLAorCQkJCURCRkE3MTgzMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfeDg2XzY0LmggKi8sCisJCQkJREJGQTcxODQxODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ19pMzg2LmggKi8sCisJCQkJREJGQTcxODUxODdGMURBMTAwQTc2MjYyIC8qIGZmaWNvbmZpZ194ODZfNjQuaCAqLywKKwkJCQlEQkZBNzE4NjE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2kzODYuaCAqLywKKwkJCQlEQkZBNzE4NzE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X3g4Nl82NC5oICovLAorCQkJKTsKKwkJCXBhdGggPSBpbmNsdWRlOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJREJGQTcxODgxODdGMURBMTAwQTc2MjYyIC8qIHNyYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJREJGQTcxODkxODdGMURBMTAwQTc2MjYyIC8qIHg4NiAqLywKIAkJCSk7CiAJCQlwYXRoID0gc3JjOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKLQkJNkM0M0NDMDQxNTM0Rjc3ODAwMTYyMzY0IC8qIHg4NiAqLyA9IHsKKwkJREJGQTcxODkxODdGMURBMTAwQTc2MjYyIC8qIHg4NiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NDMDUxNTM0Rjc3ODAwMTYyMzY0IC8qIGRhcndpbi5TICovLAotCQkJCTZDNDNDQzA2MTUzNEY3NzgwMDE2MjM2NCAvKiBkYXJ3aW42NC5TICovLAotCQkJCTZDNDNDQzA3MTUzNEY3NzgwMDE2MjM2NCAvKiBmZmkuYyAqLywKLQkJCQk2QzQzQ0MwODE1MzRGNzc4MDAxNjIzNjQgLyogZmZpNjQuYyAqLywKKwkJCQlEQkZBNzE4QTE4N0YxREExMDBBNzYyNjIgLyogZGFyd2luNjRfeDg2XzY0LlMgKi8sCisJCQkJREJGQTcxOEIxODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbl9pMzg2LlMgKi8sCisJCQkJREJGQTcxOEMxODdGMURBMTAwQTc2MjYyIC8qIGZmaTY0X3g4Nl82NC5jICovLAorCQkJCURCRkE3MThEMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmlfaTM4Ni5jICovLAogCQkJKTsKIAkJCXBhdGggPSB4ODY7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwotCQk2QzQzQ0MzRDE1MzRGN0M0MDAxNjIzNjQgLyogc3JjICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0MyODE1MzRGN0JFMDAxNjIzNjQgLyogY2xvc3VyZXMuYyAqLywKLQkJCQk2QzQzQ0MyQjE1MzRGN0JFMDAxNjIzNjQgLyogamF2YV9yYXdfYXBpLmMgKi8sCi0JCQkJNkM0M0NDMkMxNTM0RjdCRTAwMTYyMzY0IC8qIHByZXBfY2lmLmMgKi8sCi0JCQkJNkM0M0NDMkQxNTM0RjdCRTAwMTYyMzY0IC8qIHJhd19hcGkuYyAqLywKLQkJCQk2QzQzQ0MyRTE1MzRGN0JFMDAxNjIzNjQgLyogdHlwZXMuYyAqLywKLQkJCSk7Ci0JCQluYW1lID0gc3JjOwotCQkJcGF0aCA9IGlvczsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCTZDNDNDQzhDMTUzNTAzMjYwMDE2MjM2NCAvKiBpbmNsdWRlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQk2QzQzQ0M4RDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpLmggKi8sCi0JCQkJNkM0M0NDOEUxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCAqLywKLQkJCQk2QzQzQ0M4RjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX2kzODYuaCAqLywKLQkJCQk2QzQzQ0M5MDE1MzUwMzI2MDAxNjIzNjQgLyogZmZpX3g4Nl82NC5oICovLAotCQkJCTZDNDNDQzkxMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWcuaCAqLywKLQkJCQk2QzQzQ0M5MjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX2kzODYuaCAqLywKLQkJCQk2QzQzQ0M5MzE1MzUwMzI2MDAxNjIzNjQgLyogZmZpY29uZmlnX3g4Nl82NC5oICovLAotCQkJCTZDNDNDQzk0MTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCAqLywKLQkJCQk2QzQzQ0M5NTE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCAqLywKLQkJCQk2QzQzQ0M5NjE1MzUwMzI2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X3g4Nl82NC5oICovLAotCQkJKTsKLQkJCXBhdGggPSBpbmNsdWRlOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKLQkJNkM0M0NDQTExNTM1MDM5NjAwMTYyMzY0IC8qIGluY2x1ZGUgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCTZDNDNDQ0EyMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmkuaCAqLywKLQkJCQk2QzQzQ0NBMzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2FybXY3LmggKi8sCi0JCQkJNkM0M0NDQTQxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCAqLywKLQkJCQk2QzQzQ0NBNTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2kzODYuaCAqLywKLQkJCQk2QzQzQ0NBNjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpY29uZmlnLmggKi8sCi0JCQkJNkM0M0NDQTcxNTM1MDM5NjAwMTYyMzY0IC8qIGZmaWNvbmZpZ19hcm12Ny5oICovLAotCQkJCTZDNDNDQ0E4MTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oICovLAotCQkJCTZDNDNDQ0E5MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCAqLywKLQkJCQk2QzQzQ0NBQTE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybS5oICovLAotCQkJCTZDNDNDQ0FCMTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtdjcuaCAqLywKLQkJCQk2QzQzQ0NBQzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0gaW5jbHVkZTsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7Ci0JCX07Ci0JCUY2QjA4Mzk1MTQ3MjFFRTUwMDMxRDhBMSA9IHsKLQkJCWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJNkM0M0NDM0QxNTM0RjdDNDAwMTYyMzY0IC8qIHNyYyAqLywKLQkJCQk2QzQzQ0JBRjE1MzRGNzZGMDAxNjIzNjQgLyogaU9TICovLAotCQkJCTZDNDNDQkYwMTUzNEY3NzgwMDE2MjM2NCAvKiBPUyBYICovLAotCQkJCUY2Rjk4MEM2MTQ3Mzg2MjYwMDA4RjEyMSAvKiBQcm9kdWN0cyAqLywKLQkJCSk7Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwotCQl9OwotCQlGNkY5ODBDNjE0NzM4NjI2MDAwOEYxMjEgLyogUHJvZHVjdHMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVuID0gKAotCQkJCUY2Rjk4MEJBMTQ3Mzg2MTMwMDA4RjEyMSAvKiBsaWJmZmkuYSAqLywKLQkJCQk2QzQzQ0IzRDE1MzRFOUQxMDAxNjIzNjQgLyogbGliZmZpLmEgKi8sCi0JCQkpOwotCQkJbmFtZSA9IFByb2R1Y3RzOwotCQkJcGF0aCA9IC4uLy4uOwotCQkJc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsKLQkJfTsKIC8qIEVuZCBQQlhHcm91cCBzZWN0aW9uICovCiAKIC8qIEJlZ2luIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJNkM0M0NCM0IxNTM0RTlEMTAwMTYyMzY0IC8qIEhlYWRlcnMgKi8gPSB7CisJCURCMTNCMThGMTg0OURGNTEwMDEwRjQyRCAvKiBIZWFkZXJzICovID0gewogCQkJaXNhID0gUEJYSGVhZGVyc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwogCQkJZmlsZXMgPSAoCi0JCQkJNkM0M0NDOTcxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDOTgxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV9jb21tb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQzk5MTUzNTAzMjYwMDE2MjM2NCAvKiBmZmlfaTM4Ni5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDOUExNTM1MDMyNjAwMTYyMzY0IC8qIGZmaV94ODZfNjQuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQzlFMTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQzlGMTUzNTAzMjYwMDE2MjM2NCAvKiBmZml0YXJnZXRfaTM4Ni5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDQTAxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaXRhcmdldF94ODZfNjQuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQzlCMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWcuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQzlDMTUzNTAzMjYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkM0M0NDOUQxNTM1MDMyNjAwMTYyMzY0IC8qIGZmaWNvbmZpZ194ODZfNjQuaCBpbiBIZWFkZXJzICovLAotCQkJKTsKLQkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwotCQl9OwotCQlGNkY5ODBCODE0NzM4NjEzMDAwOEYxMjEgLyogSGVhZGVycyAqLyA9IHsKLQkJCWlzYSA9IFBCWEhlYWRlcnNCdWlsZFBoYXNlOwotCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKLQkJCWZpbGVzID0gKAotCQkJCTZDNDNDQ0FEMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmkuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0FFMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfYXJtdjcuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0FGMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmlfY29tbW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NCMDE1MzUwMzk2MDAxNjIzNjQgLyogZmZpX2kzODYuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0I0MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXQuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0I1MTUzNTAzOTYwMDE2MjM2NCAvKiBmZml0YXJnZXRfYXJtLmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NCNjE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2FybXY3LmggaW4gSGVhZGVycyAqLywKLQkJCQk2QzQzQ0NCNzE1MzUwMzk2MDAxNjIzNjQgLyogZmZpdGFyZ2V0X2kzODYuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0IxMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWcuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0IyMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfYXJtdjcuaCBpbiBIZWFkZXJzICovLAotCQkJCTZDNDNDQ0IzMTUzNTAzOTYwMDE2MjM2NCAvKiBmZmljb25maWdfaTM4Ni5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxNEMxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaWNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxNEQxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaXRhcmdldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxNEExODdGMUQ4NjAwQTc2MjYyIC8qIGZmaS5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxOEYxODdGMURBMTAwQTc2MjYyIC8qIGZmaV94ODZfNjQuaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MTkxMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfeDg2XzY0LmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE4RTE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MTkwMTg3RjFEQTEwMEE3NjI2MiAvKiBmZmljb25maWdfaTM4Ni5oIGluIEhlYWRlcnMgKi8sCisJCQkJREJGQTcxNEIxODdGMUQ4NjAwQTc2MjYyIC8qIGZmaV9jb21tb24uaCBpbiBIZWFkZXJzICovLAorCQkJCURCRkE3MTkzMTg3RjFEQTEwMEE3NjI2MiAvKiBmZml0YXJnZXRfeDg2XzY0LmggaW4gSGVhZGVycyAqLywKKwkJCQlEQkZBNzE5MjE4N0YxREExMDBBNzYyNjIgLyogZmZpdGFyZ2V0X2kzODYuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwogLyogRW5kIFBCWEhlYWRlcnNCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KLQkJNkM0M0NCM0MxNTM0RTlEMTAwMTYyMzY0IC8qIGxpYmZmaSBPUyBYICovID0geworCQlEQjEzQjE2NTE4NDlERjFFMDAxMEY0MkQgLyogbGliZmZpLWlPUyAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSA2QzQzQ0I0QTE1MzRFOUQxMDAxNjIzNjQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYmZmaSBPUyBYIiAqLzsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBEQjEzQjE4QjE4NDlERjFFMDAxMEY0MkQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYmZmaS1pT1MiICovOwogCQkJYnVpbGRQaGFzZXMgPSAoCi0JCQkJNkM0M0NDNDAxNTM0RkYzQjAwMTYyMzY0IC8qIEdlbmVyYXRlIFNvdXJjZSBhbmQgSGVhZGVycyAqLywKLQkJCQk2QzQzQ0IzOTE1MzRFOUQxMDAxNjIzNjQgLyogU291cmNlcyAqLywKLQkJCQk2QzQzQ0IzQTE1MzRFOUQxMDAxNjIzNjQgLyogRnJhbWV3b3JrcyAqLywKLQkJCQk2QzQzQ0IzQjE1MzRFOUQxMDAxNjIzNjQgLyogSGVhZGVycyAqLywKKwkJCQlEQjEzQjMwNTE4NDlFMDFDMDAxMEY0MkQgLyogU2hlbGxTY3JpcHQgKi8sCisJCQkJREIxM0IxNjIxODQ5REYxRTAwMTBGNDJEIC8qIFNvdXJjZXMgKi8sCisJCQkJREIxM0IxNjQxODQ5REYxRTAwMTBGNDJEIC8qIENvcHlGaWxlcyAqLywKIAkJCSk7CiAJCQlidWlsZFJ1bGVzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgKIAkJCSk7Ci0JCQluYW1lID0gImxpYmZmaSBPUyBYIjsKLQkJCXByb2R1Y3ROYW1lID0gImZmaSBPUyBYIjsKLQkJCXByb2R1Y3RSZWZlcmVuY2UgPSA2QzQzQ0IzRDE1MzRFOUQxMDAxNjIzNjQgLyogbGliZmZpLmEgKi87CisJCQluYW1lID0gImxpYmZmaS1pT1MiOworCQkJcHJvZHVjdE5hbWUgPSBmZmk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gREIxM0IxNjYxODQ5REYxRTAwMTBGNDJEIC8qIGxpYmZmaS5hICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LnN0YXRpYyI7CiAJCX07Ci0JCUY2Rjk4MEI5MTQ3Mzg2MTMwMDA4RjEyMSAvKiBsaWJmZmkgaU9TICovID0geworCQlEQjEzQjE5MDE4NDlERjUxMDAxMEY0MkQgLyogbGliZmZpLU1hYyAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKLQkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSBGNkY5ODBDNDE0NzM4NjEzMDAwOEYxMjEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYmZmaSBpT1MiICovOworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IERCMTNCMUIwMTg0OURGNTIwMDEwRjQyRCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGliZmZpLU1hYyIgKi87CiAJCQlidWlsZFBoYXNlcyA9ICgKLQkJCQk2QzQzQ0MzRTE1MzRGOEUyMDAxNjIzNjQgLyogR2VuZXJhdGUgVHJhbXBvbGluZSAqLywKLQkJCQk2QzQzQ0MzRjE1MzRGRjFCMDAxNjIzNjQgLyogR2VuZXJhdGUgU291cmNlIGFuZCBIZWFkZXJzICovLAotCQkJCUY2Rjk4MEI2MTQ3Mzg2MTMwMDA4RjEyMSAvKiBTb3VyY2VzICovLAotCQkJCUY2Rjk4MEI3MTQ3Mzg2MTMwMDA4RjEyMSAvKiBGcmFtZXdvcmtzICovLAotCQkJCUY2Rjk4MEI4MTQ3Mzg2MTMwMDA4RjEyMSAvKiBIZWFkZXJzICovLAorCQkJCURCMTNCMzA2MTg0OUUwNDkwMDEwRjQyRCAvKiBTaGVsbFNjcmlwdCAqLywKKwkJCQlEQjEzQjE4RDE4NDlERjUxMDAxMEY0MkQgLyogU291cmNlcyAqLywKKwkJCQlEQjEzQjE4RjE4NDlERjUxMDAxMEY0MkQgLyogSGVhZGVycyAqLywKIAkJCSk7CiAJCQlidWlsZFJ1bGVzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgKIAkJCSk7Ci0JCQluYW1lID0gImxpYmZmaSBpT1MiOworCQkJbmFtZSA9ICJsaWJmZmktTWFjIjsKIAkJCXByb2R1Y3ROYW1lID0gZmZpOwotCQkJcHJvZHVjdFJlZmVyZW5jZSA9IEY2Rjk4MEJBMTQ3Mzg2MTMwMDA4RjEyMSAvKiBsaWJmZmkuYSAqLzsKLQkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5zdGF0aWMiOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IERCMTNCMTkxMTg0OURGNTEwMDEwRjQyRCAvKiBmZmkuZHlsaWIgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYyI7CiAJCX07CiAvKiBFbmQgUEJYTmF0aXZlVGFyZ2V0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYUHJvamVjdCBzZWN0aW9uICovCi0JCUY2QjA4Mzk3MTQ3MjFFRTUwMDMxRDhBMSAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsKKwkJREIxM0IxNUMxODQ5REVCNzAwMTBGNDJEIC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA0MzA7CisJCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA1MTA7CiAJCQl9OwotCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IEY2QjA4MzlBMTQ3MjFFRTUwMDMxRDhBMSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgImxpYmZmaSIgKi87CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gREIxM0IxNUYxODQ5REVCNzAwMTBGNDJEIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJvamVjdCAibGliZmZpIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlWZXJzaW9uID0gIlhjb2RlIDMuMiI7CiAJCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMDsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQllbiwKIAkJCSk7Ci0JCQltYWluR3JvdXAgPSBGNkIwODM5NTE0NzIxRUU1MDAzMUQ4QTE7Ci0JCQlwcm9kdWN0UmVmR3JvdXAgPSBGNkIwODM5NTE0NzIxRUU1MDAzMUQ4QTE7CisJCQltYWluR3JvdXAgPSBEQjEzQjE1QjE4NDlERUI3MDAxMEY0MkQ7CisJCQlwcm9kdWN0UmVmR3JvdXAgPSBEQjEzQjE2NzE4NDlERjFFMDAxMEY0MkQgLyogUHJvZHVjdHMgKi87CiAJCQlwcm9qZWN0RGlyUGF0aCA9ICIiOwogCQkJcHJvamVjdFJvb3QgPSAiIjsKIAkJCXRhcmdldHMgPSAoCi0JCQkJRjZGOTgwQjkxNDczODYxMzAwMDhGMTIxIC8qIGxpYmZmaSBpT1MgKi8sCi0JCQkJNkM0M0NCM0MxNTM0RTlEMTAwMTYyMzY0IC8qIGxpYmZmaSBPUyBYICovLAorCQkJCURCMTNCMTY1MTg0OURGMUUwMDEwRjQyRCAvKiBsaWJmZmktaU9TICovLAorCQkJCURCMTNCMTkwMTg0OURGNTEwMDEwRjQyRCAvKiBsaWJmZmktTWFjICovLAogCQkJKTsKIAkJfTsKIC8qIEVuZCBQQlhQcm9qZWN0IHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KLQkJNkM0M0NDM0UxNTM0RjhFMjAwMTYyMzY0IC8qIEdlbmVyYXRlIFRyYW1wb2xpbmUgKi8gPSB7CisJCURCMTNCMzA1MTg0OUUwMUMwMDEwRjQyRCAvKiBTaGVsbFNjcmlwdCAqLyA9IHsKIAkJCWlzYSA9IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKIAkJCSk7CiAJCQlpbnB1dFBhdGhzID0gKAogCQkJKTsKLQkJCW5hbWUgPSAiR2VuZXJhdGUgVHJhbXBvbGluZSI7Ci0JCQlvdXRwdXRQYXRocyA9ICgKLQkJCSk7Ci0JCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKLQkJCXNoZWxsUGF0aCA9IC91c3IvYmluL3B5dGhvbjsKLQkJCXNoZWxsU2NyaXB0ID0gImltcG9ydCBzdWJwcm9jZXNzXG5pbXBvcnQgcmVcbmltcG9ydCBvc1xuaW1wb3J0IGVycm5vXG5pbXBvcnQgc3lzXG5cbmRlZiBtYWluKCk6XG4gICAgd2l0aCBvcGVuKCdzcmMvYXJtL3RyYW1wb2xpbmUuUycsICd3JykgYXMgdHJhbXBfb3V0OlxuICAgICAgICBwID0gc3VicHJvY2Vzcy5Qb3BlbihbJ2Jhc2gnLCAnc3JjL2FybS9nZW50cmFtcC5zaCddLCBzdGRvdXQ9dHJhbXBfb3V0KVxuICAgICAgICBwLndhaXQoKVxuXG5pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOlxuICAgIG1haW4oKSI7Ci0JCX07Ci0JCTZDNDNDQzNGMTUzNEZGMUIwMDE2MjM2NCAvKiBHZW5lcmF0ZSBTb3VyY2UgYW5kIEhlYWRlcnMgKi8gPSB7Ci0JCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7Ci0JCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwotCQkJZmlsZXMgPSAoCi0JCQkpOwotCQkJaW5wdXRQYXRocyA9ICgKLQkJCSk7Ci0JCQluYW1lID0gIkdlbmVyYXRlIFNvdXJjZSBhbmQgSGVhZGVycyI7CiAJCQlvdXRwdXRQYXRocyA9ICgKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7Ci0JCQlzaGVsbFNjcmlwdCA9ICIvdXNyL2Jpbi9weXRob24gZ2VuZXJhdGUtaW9zLXNvdXJjZS1hbmQtaGVhZGVycy5weSI7CisJCQlzaGVsbFNjcmlwdCA9ICIvdXNyL2Jpbi9weXRob24gZ2VuZXJhdGUtZGFyd2luLXNvdXJjZS1hbmQtaGVhZGVycy5weSAtLW9ubHktaW9zIjsKIAkJfTsKLQkJNkM0M0NDNDAxNTM0RkYzQjAwMTYyMzY0IC8qIEdlbmVyYXRlIFNvdXJjZSBhbmQgSGVhZGVycyAqLyA9IHsKKwkJREIxM0IzMDYxODQ5RTA0OTAwMTBGNDJEIC8qIFNoZWxsU2NyaXB0ICovID0gewogCQkJaXNhID0gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAogCQkJKTsKIAkJCWlucHV0UGF0aHMgPSAoCiAJCQkpOwotCQkJbmFtZSA9ICJHZW5lcmF0ZSBTb3VyY2UgYW5kIEhlYWRlcnMiOwogCQkJb3V0cHV0UGF0aHMgPSAoCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCQlzaGVsbFBhdGggPSAvYmluL3NoOwotCQkJc2hlbGxTY3JpcHQgPSAiL3Vzci9iaW4vcHl0aG9uIGdlbmVyYXRlLW9zeC1zb3VyY2UtYW5kLWhlYWRlcnMucHkiOworCQkJc2hlbGxTY3JpcHQgPSAiL3Vzci9iaW4vcHl0aG9uIGdlbmVyYXRlLWRhcndpbi1zb3VyY2UtYW5kLWhlYWRlcnMucHkgLS1vbmx5LW9zeCI7CiAJCX07CiAvKiBFbmQgUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwotCQk2QzQzQ0IzOTE1MzRFOUQxMDAxNjIzNjQgLyogU291cmNlcyAqLyA9IHsKKwkJREIxM0IxNjIxODQ5REYxRTAwMTBGNDJEIC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CiAJCQlmaWxlcyA9ICgKLQkJCQk2QzQzQ0MxRjE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luLlMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MyMDE1MzRGNzc4MDAxNjIzNjQgLyogZGFyd2luNjQuUyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzIxMTUzNEY3NzgwMDE2MjM2NCAvKiBmZmkuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzIyMTUzNEY3NzgwMDE2MjM2NCAvKiBmZmk2NC5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMzAxNTM0RjdCRTAwMTYyMzY0IC8qIGNsb3N1cmVzLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MzNjE1MzRGN0JFMDAxNjIzNjQgLyogamF2YV9yYXdfYXBpLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MzODE1MzRGN0JFMDAxNjIzNjQgLyogcHJlcF9jaWYuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzNBMTUzNEY3QkUwMDE2MjM2NCAvKiByYXdfYXBpLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MzQzE1MzRGN0JFMDAxNjIzNjQgLyogdHlwZXMuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTdFMTg3RjFEOUIwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTc5MTg3RjFEOUIwMEE3NjI2MiAvKiBmZmlfYXJtdjcuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTdCMTg3RjFEOUIwMEE3NjI2MiAvKiB0cmFtcG9saW5lX2FybXY3LlMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE0RTE4N0YxRDg2MDBBNzYyNjIgLyogY2xvc3VyZXMuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTdBMTg3RjFEOUIwMEE3NjI2MiAvKiBzeXN2X2FybXY3LlMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE3RDE4N0YxRDlCMDBBNzYyNjIgLyogZGFyd2luX2kzODYuUyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTU2MTg3RjFEODYwMEE3NjI2MiAvKiBwcmVwX2NpZi5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxN0YxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9pMzg2LmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE1ODE4N0YxRDg2MDBBNzYyNjIgLyogcmF3X2FwaS5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNzgxODdGMUQ5QjAwQTc2MjYyIC8qIHN5c3ZfYXJtNjQuUyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTdDMTg3RjFEOUIwMEE3NjI2MiAvKiBkYXJ3aW42NF94ODZfNjQuUyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTVBMTg3RjFEODYwMEE3NjI2MiAvKiB0eXBlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNzcxODdGMUQ5QjAwQTc2MjYyIC8qIGZmaV9hcm02NC5jIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Ci0JCUY2Rjk4MEI2MTQ3Mzg2MTMwMDA4RjEyMSAvKiBTb3VyY2VzICovID0geworCQlEQjEzQjE4RDE4NDlERjUxMDAxMEY0MkQgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKIAkJCWZpbGVzID0gKAotCQkJCTZDNDNDQkRDMTUzNEY3NkYwMDE2MjM2NCAvKiBmZmkuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQkREMTUzNEY3NkYwMDE2MjM2NCAvKiBzeXN2LlMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0JERTE1MzRGNzZGMDAxNjIzNjQgLyogdHJhbXBvbGluZS5TIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NCRTYxNTM0Rjc2RjAwMTYyMzY0IC8qIGRhcndpbi5TIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NCRTgxNTM0Rjc2RjAwMTYyMzY0IC8qIGZmaS5jIGluIFNvdXJjZXMgKi8sCi0JCQkJNkM0M0NDMkYxNTM0RjdCRTAwMTYyMzY0IC8qIGNsb3N1cmVzLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MzNTE1MzRGN0JFMDAxNjIzNjQgLyogamF2YV9yYXdfYXBpLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MzNzE1MzRGN0JFMDAxNjIzNjQgLyogcHJlcF9jaWYuYyBpbiBTb3VyY2VzICovLAotCQkJCTZDNDNDQzM5MTUzNEY3QkUwMDE2MjM2NCAvKiByYXdfYXBpLmMgaW4gU291cmNlcyAqLywKLQkJCQk2QzQzQ0MzQjE1MzRGN0JFMDAxNjIzNjQgLyogdHlwZXMuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTk2MTg3RjFEQTEwMEE3NjI2MiAvKiBmZmk2NF94ODZfNjQuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTk1MTg3RjFEQTEwMEE3NjI2MiAvKiBkYXJ3aW5faTM4Ni5TIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNTcxODdGMUQ4NjAwQTc2MjYyIC8qIHByZXBfY2lmLmMgaW4gU291cmNlcyAqLywKKwkJCQlEQkZBNzE5NzE4N0YxREExMDBBNzYyNjIgLyogZmZpX2kzODYuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTVCMTg3RjFEODYwMEE3NjI2MiAvKiB0eXBlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxNTkxODdGMUQ4NjAwQTc2MjYyIC8qIHJhd19hcGkuYyBpbiBTb3VyY2VzICovLAorCQkJCURCRkE3MTRGMTg3RjFEODYwMEE3NjI2MiAvKiBjbG9zdXJlcy5jIGluIFNvdXJjZXMgKi8sCisJCQkJREJGQTcxOTQxODdGMURBMTAwQTc2MjYyIC8qIGRhcndpbjY0X3g4Nl82NC5TIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CiAvKiBFbmQgUEJYU291cmNlc0J1aWxkUGhhc2Ugc2VjdGlvbiAqLwogCiAvKiBCZWdpbiBYQ0J1aWxkQ29uZmlndXJhdGlvbiBzZWN0aW9uICovCi0JCTZDNDNDQjRCMTUzNEU5RDEwMDE2MjM2NCAvKiBEZWJ1ZyAqLyA9IHsKKwkJREIxM0IxNjAxODQ5REVCNzAwMTBGNDJEIC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewotCQkJCUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfMzJfNjRfQklUKSI7Ci0JCQkJRFNUUk9PVCA9IC90bXAvZmZpLmRzdDsKLQkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gKAorCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCiAJCQkJCSIkKGluaGVyaXRlZCkiLAotCQkJCQkiXCIkKFNZU1RFTV9BUFBTX0RJUikvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9MaWJyYXJ5L0ZyYW1ld29ya3NcIiIsCisJCQkJCSJkYXJ3aW5fY29tbW9uL2luY2x1ZGUiLAogCQkJCSk7Ci0JCQkJR0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7Ci0JCQkJR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOwotCQkJCUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVM7Ci0JCQkJTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gMTAuNjsKIAkJCQlPTkxZX0FDVElWRV9BUkNIID0gWUVTOwotCQkJCVBST0RVQ1RfTkFNRSA9IGZmaTsKLQkJCQlTREtST09UID0gbWFjb3N4OwogCQkJfTsKIAkJCW5hbWUgPSBEZWJ1ZzsKIAkJfTsKLQkJNkM0M0NCNEMxNTM0RTlEMTAwMTYyMzY0IC8qIFJlbGVhc2UgKi8gPSB7CisJCURCMTNCMTYxMTg0OURFQjcwMDEwRjQyRCAvKiBSZWxlYXNlICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewotCQkJCUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfMzJfNjRfQklUKSI7Ci0JCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7Ci0JCQkJRFNUUk9PVCA9IC90bXAvZmZpLmRzdDsKLQkJCQlGUkFNRVdPUktfU0VBUkNIX1BBVEhTID0gKAorCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCiAJCQkJCSIkKGluaGVyaXRlZCkiLAotCQkJCQkiXCIkKFNZU1RFTV9BUFBTX0RJUikvWGNvZGUuYXBwL0NvbnRlbnRzL0RldmVsb3Blci9MaWJyYXJ5L0ZyYW1ld29ya3NcIiIsCisJCQkJCSJkYXJ3aW5fY29tbW9uL2luY2x1ZGUiLAogCQkJCSk7Ci0JCQkJR0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7Ci0JCQkJR0NDX1ZFUlNJT04gPSBjb20uYXBwbGUuY29tcGlsZXJzLmxsdm0uY2xhbmcuMV8wOwotCQkJCUdDQ19XQVJOXzY0X1RPXzMyX0JJVF9DT05WRVJTSU9OID0gWUVTOwotCQkJCUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVM7Ci0JCQkJTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUID0gMTAuNjsKLQkJCQlQUk9EVUNUX05BTUUgPSBmZmk7Ci0JCQkJU0RLUk9PVCA9IG1hY29zeDsKIAkJCX07CiAJCQluYW1lID0gUmVsZWFzZTsKIAkJfTsKLQkJRjZCMDgzQUIxNDcyMUVFNTAwMzFEOEExIC8qIERlYnVnICovID0geworCQlEQjEzQjE4NzE4NDlERjFFMDAxMEY0MkQgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87Ci0JCQkJQVJDSFMgPSAiJChBUkNIU19TVEFOREFSRF8zMl9CSVQpIjsKKwkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEX0lOQ0xVRElOR182NF9CSVQpIjsKKwkJCQlDTEFOR19DWFhfTEFOR1VBR0VfU1RBTkRBUkQgPSAiZ251KysweCI7CisJCQkJQ0xBTkdfQ1hYX0xJQlJBUlkgPSAibGliYysrIjsKKwkJCQlDTEFOR19FTkFCTEVfTU9EVUxFUyA9IFlFUzsKKwkJCQlDTEFOR19FTkFCTEVfT0JKQ19BUkMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9CT09MX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9DT05TVEFOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRElSRUNUX09CSkNfSVNBX1VTQUdFID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fRU1QVFlfQk9EWSA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0VOVU1fQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0lOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fT0JKQ19ST09UX0NMQVNTID0gWUVTX0VSUk9SOworCQkJCUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CiAJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCURTVFJPT1QgPSAvdG1wL2ZmaS5kc3Q7CiAJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKIAkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsKIAkJCQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0gMDsKQEAgLTQ4Miw5OCArNDU3LDE4MSBAQAogCQkJCQkiJChpbmhlcml0ZWQpIiwKIAkJCQkpOwogCQkJCUdDQ19TWU1CT0xTX1BSSVZBVEVfRVhURVJOID0gTk87Ci0JCQkJR0NDX1dBUk5fQUJPVVRfTUlTU0lOR19QUk9UT1RZUEVTID0gTk87Ci0JCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVM7Ci0JCQkJR0NDX1dBUk5fVU5VU0VEX1ZBTFVFID0gTk87CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVNfRVJST1I7CisJCQkJR0NDX1dBUk5fVU5ERUNMQVJFRF9TRUxFQ1RPUiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTklOSVRJQUxJWkVEX0FVVE9TID0gWUVTX0FHR1JFU1NJVkU7CisJCQkJR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTOwogCQkJCUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUzsKLQkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gaW9zL2luY2x1ZGU7CisJCQkJSEVBREVSX1NFQVJDSF9QQVRIUyA9ICgKKwkJCQkJIiQoaW5oZXJpdGVkKSIsCisJCQkJCSJkYXJ3aW5faW9zL2luY2x1ZGUiLAorCQkJCSk7CisJCQkJSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVQgPSA1LjA7CisJCQkJIklQSE9ORU9TX0RFUExPWU1FTlRfVEFSR0VUW2FyY2g9YXJtNjRdIiA9IDcuMDsKKwkJCQlPVEhFUl9MREZMQUdTID0gIi1PYmpDIjsKKwkJCQlQUk9EVUNUX05BTUUgPSBmZmk7CiAJCQkJU0RLUk9PVCA9IGlwaG9uZW9zOworCQkJCVNLSVBfSU5TVEFMTCA9IFlFUzsKIAkJCX07CiAJCQluYW1lID0gRGVidWc7CiAJCX07Ci0JCUY2QjA4M0FDMTQ3MjFFRTUwMDMxRDhBMSAvKiBSZWxlYXNlICovID0geworCQlEQjEzQjE4ODE4NDlERjFFMDAxMEY0MkQgLyogUmVsZWFzZSAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKLQkJCQlBUkNIUyA9ICIkKEFSQ0hTX1NUQU5EQVJEXzMyX0JJVCkiOworCQkJCUFSQ0hTID0gIiQoQVJDSFNfU1RBTkRBUkRfSU5DTFVESU5HXzY0X0JJVCkiOworCQkJCUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9ICJnbnUrKzB4IjsKKwkJCQlDTEFOR19DWFhfTElCUkFSWSA9ICJsaWJjKysiOworCQkJCUNMQU5HX0VOQUJMRV9NT0RVTEVTID0gWUVTOworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0JPT0xfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0NPTlNUQU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9ESVJFQ1RfT0JKQ19JU0FfVVNBR0UgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9PQkpDX1JPT1RfQ0xBU1MgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9fRFVQTElDQVRFX01FVEhPRF9NQVRDSCA9IFlFUzsKIAkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJCURTVFJPT1QgPSAvdG1wL2ZmaS5kc3Q7CisJCQkJRU5BQkxFX05TX0FTU0VSVElPTlMgPSBOTzsKIAkJCQlHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5OwotCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAiIjsKLQkJCQlHQ0NfV0FSTl9BQk9VVF9NSVNTSU5HX1BST1RPVFlQRVMgPSBOTzsKLQkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFUzsKLQkJCQlHQ0NfV0FSTl9VTlVTRURfVkFMVUUgPSBOTzsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFU19FUlJPUjsKKwkJCQlHQ0NfV0FSTl9VTkRFQ0xBUkVEX1NFTEVDVE9SID0gWUVTOworCQkJCUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVNfQUdHUkVTU0lWRTsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVM7CiAJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOwotCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSBpb3MvaW5jbHVkZTsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJImRhcndpbl9pb3MvaW5jbHVkZSIsCisJCQkJKTsKKwkJCQlJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVCA9IDUuMDsKKwkJCQkiSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVRbYXJjaD1hcm02NF0iID0gNy4wOworCQkJCU9USEVSX0xERkxBR1MgPSAiLU9iakMiOworCQkJCVBST0RVQ1RfTkFNRSA9IGZmaTsKIAkJCQlTREtST09UID0gaXBob25lb3M7CisJCQkJU0tJUF9JTlNUQUxMID0gWUVTOwogCQkJCVZBTElEQVRFX1BST0RVQ1QgPSBZRVM7CiAJCQl9OwogCQkJbmFtZSA9IFJlbGVhc2U7CiAJCX07Ci0JCUY2Rjk4MEMyMTQ3Mzg2MTMwMDA4RjEyMSAvKiBEZWJ1ZyAqLyA9IHsKKwkJREIxM0IxQjExODQ5REY1MjAwMTBGNDJEIC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQlidWlsZFNldHRpbmdzID0gewotCQkJCUFSQ0hTID0gKAotCQkJCQlhcm12NiwKLQkJCQkJYXJtdjcsCisJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ0xBTkdfQ1hYX0xBTkdVQUdFX1NUQU5EQVJEID0gImdudSsrMHgiOworCQkJCUNMQU5HX0NYWF9MSUJSQVJZID0gImxpYmMrKyI7CisJCQkJQ0xBTkdfRU5BQkxFX09CSkNfQVJDID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQk9PTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RJUkVDVF9PQkpDX0lTQV9VU0FHRSA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX0VNUFRZX0JPRFkgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9FTlVNX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9JTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX09CSkNfUk9PVF9DTEFTUyA9IFlFU19FUlJPUjsKKwkJCQlDTEFOR19XQVJOX19EVVBMSUNBVEVfTUVUSE9EX01BVENIID0gWUVTOworCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBOTzsKKwkJCQlEWUxJQl9DT01QQVRJQklMSVRZX1ZFUlNJT04gPSAxOworCQkJCURZTElCX0NVUlJFTlRfVkVSU0lPTiA9IDE7CisJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKKwkJCQlHQ0NfRFlOQU1JQ19OT19QSUMgPSBOTzsKKwkJCQlHQ0NfRU5BQkxFX09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKKwkJCQlHQ0NfT1BUSU1JWkFUSU9OX0xFVkVMID0gMDsKKwkJCQlHQ0NfUFJFUFJPQ0VTU09SX0RFRklOSVRJT05TID0gKAorCQkJCQkiREVCVUc9MSIsCisJCQkJCSIkKGluaGVyaXRlZCkiLAogCQkJCSk7Ci0JCQkJRFNUUk9PVCA9IC90bXAvZmZpLmRzdDsKLQkJCQlHQ0NfUFJFQ09NUElMRV9QUkVGSVhfSEVBREVSID0gWUVTOwotCQkJCUdDQ19USFVNQl9TVVBQT1JUID0gTk87Ci0JCQkJSVBIT05FT1NfREVQTE9ZTUVOVF9UQVJHRVQgPSA0LjA7Ci0JCQkJT1RIRVJfTERGTEFHUyA9ICItT2JqQyI7CisJCQkJR0NDX1NZTUJPTFNfUFJJVkFURV9FWFRFUk4gPSBOTzsKKwkJCQlHQ0NfV0FSTl82NF9UT18zMl9CSVRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9BQk9VVF9SRVRVUk5fVFlQRSA9IFlFU19FUlJPUjsKKwkJCQlHQ0NfV0FSTl9VTkRFQ0xBUkVEX1NFTEVDVE9SID0gWUVTOworCQkJCUdDQ19XQVJOX1VOSU5JVElBTElaRURfQVVUT1MgPSBZRVNfQUdHUkVTU0lWRTsKKwkJCQlHQ0NfV0FSTl9VTlVTRURfRlVOQ1RJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fVU5VU0VEX1ZBUklBQkxFID0gWUVTOworCQkJCUhFQURFUl9TRUFSQ0hfUEFUSFMgPSAoCisJCQkJCSIkKGluaGVyaXRlZCkiLAorCQkJCQkiZGFyd2luX29zeC9pbmNsdWRlIiwKKwkJCQkpOworCQkJCU1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCA9IDEwLjY7CisJCQkJT05MWV9BQ1RJVkVfQVJDSCA9IFlFUzsKKwkJCQlPVEhFUl9MREZMQUdTID0gIi1XbCwtbm9fY29tcGFjdF91bndpbmQiOwogCQkJCVBST0RVQ1RfTkFNRSA9IGZmaTsKLQkJCQlTS0lQX0lOU1RBTEwgPSBZRVM7CisJCQkJU0RLUk9PVCA9IG1hY29zeDsKIAkJCX07CiAJCQluYW1lID0gRGVidWc7CiAJCX07Ci0JCUY2Rjk4MEMzMTQ3Mzg2MTMwMDA4RjEyMSAvKiBSZWxlYXNlICovID0geworCQlEQjEzQjFCMjE4NDlERjUyMDAxMEY0MkQgLyogUmVsZWFzZSAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlBUkNIUyA9ICgKLQkJCQkJYXJtdjYsCi0JCQkJCWFybXY3LAorCQkJCUFMV0FZU19TRUFSQ0hfVVNFUl9QQVRIUyA9IE5POworCQkJCUNMQU5HX0NYWF9MQU5HVUFHRV9TVEFOREFSRCA9ICJnbnUrKzB4IjsKKwkJCQlDTEFOR19DWFhfTElCUkFSWSA9ICJsaWJjKysiOworCQkJCUNMQU5HX0VOQUJMRV9PQkpDX0FSQyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0JPT0xfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0NPTlNUQU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9ESVJFQ1RfT0JKQ19JU0FfVVNBR0UgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZID0gWUVTOworCQkJCUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9PQkpDX1JPT1RfQ0xBU1MgPSBZRVNfRVJST1I7CisJCQkJQ0xBTkdfV0FSTl9fRFVQTElDQVRFX01FVEhPRF9NQVRDSCA9IFlFUzsKKwkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVTOworCQkJCURFQlVHX0lORk9STUFUSU9OX0ZPUk1BVCA9ICJkd2FyZi13aXRoLWRzeW0iOworCQkJCURZTElCX0NPTVBBVElCSUxJVFlfVkVSU0lPTiA9IDE7CisJCQkJRFlMSUJfQ1VSUkVOVF9WRVJTSU9OID0gMTsKKwkJCQlFTkFCTEVfTlNfQVNTRVJUSU9OUyA9IE5POworCQkJCUdDQ19DX0xBTkdVQUdFX1NUQU5EQVJEID0gZ251OTk7CisJCQkJR0NDX0VOQUJMRV9PQkpDX0VYQ0VQVElPTlMgPSBZRVM7CisJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJR0NDX1dBUk5fQUJPVVRfUkVUVVJOX1RZUEUgPSBZRVNfRVJST1I7CisJCQkJR0NDX1dBUk5fVU5ERUNMQVJFRF9TRUxFQ1RPUiA9IFlFUzsKKwkJCQlHQ0NfV0FSTl9VTklOSVRJQUxJWkVEX0FVVE9TID0gWUVTX0FHR1JFU1NJVkU7CisJCQkJR0NDX1dBUk5fVU5VU0VEX0ZVTkNUSU9OID0gWUVTOworCQkJCUdDQ19XQVJOX1VOVVNFRF9WQVJJQUJMRSA9IFlFUzsKKwkJCQlIRUFERVJfU0VBUkNIX1BBVEhTID0gKAorCQkJCQkiJChpbmhlcml0ZWQpIiwKKwkJCQkJImRhcndpbl9vc3gvaW5jbHVkZSIsCiAJCQkJKTsKLQkJCQlEU1RST09UID0gL3RtcC9mZmkuZHN0OwotCQkJCUdDQ19QUkVDT01QSUxFX1BSRUZJWF9IRUFERVIgPSBZRVM7Ci0JCQkJR0NDX1RIVU1CX1NVUFBPUlQgPSBOTzsKLQkJCQlJUEhPTkVPU19ERVBMT1lNRU5UX1RBUkdFVCA9IDQuMDsKLQkJCQlPVEhFUl9MREZMQUdTID0gIi1PYmpDIjsKKwkJCQlNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgPSAxMC42OworCQkJCU9USEVSX0xERkxBR1MgPSAiLVdsLC1ub19jb21wYWN0X3Vud2luZCI7CiAJCQkJUFJPRFVDVF9OQU1FID0gZmZpOwotCQkJCVNLSVBfSU5TVEFMTCA9IFlFUzsKKwkJCQlTREtST09UID0gbWFjb3N4OwogCQkJfTsKIAkJCW5hbWUgPSBSZWxlYXNlOwogCQl9OwogLyogRW5kIFhDQnVpbGRDb25maWd1cmF0aW9uIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gWENDb25maWd1cmF0aW9uTGlzdCBzZWN0aW9uICovCi0JCTZDNDNDQjRBMTUzNEU5RDEwMDE2MjM2NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAibGliZmZpIE9TIFgiICovID0geworCQlEQjEzQjE1RjE4NDlERUI3MDAxMEY0MkQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJsaWJmZmkiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJNkM0M0NCNEIxNTM0RTlEMTAwMTYyMzY0IC8qIERlYnVnICovLAotCQkJCTZDNDNDQjRDMTUzNEU5RDEwMDE2MjM2NCAvKiBSZWxlYXNlICovLAorCQkJCURCMTNCMTYwMTg0OURFQjcwMDEwRjQyRCAvKiBEZWJ1ZyAqLywKKwkJCQlEQjEzQjE2MTE4NDlERUI3MDAxMEY0MkQgLyogUmVsZWFzZSAqLywKIAkJCSk7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwogCQl9OwotCQlGNkIwODM5QTE0NzIxRUU1MDAzMUQ4QTEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhQcm9qZWN0ICJsaWJmZmkiICovID0geworCQlEQjEzQjE4QjE4NDlERjFFMDAxMEY0MkQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYmZmaS1pT1MiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJRjZCMDgzQUIxNDcyMUVFNTAwMzFEOEExIC8qIERlYnVnICovLAotCQkJCUY2QjA4M0FDMTQ3MjFFRTUwMDMxRDhBMSAvKiBSZWxlYXNlICovLAorCQkJCURCMTNCMTg3MTg0OURGMUUwMDEwRjQyRCAvKiBEZWJ1ZyAqLywKKwkJCQlEQjEzQjE4ODE4NDlERjFFMDAxMEY0MkQgLyogUmVsZWFzZSAqLywKIAkJCSk7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwogCQl9OwotCQlGNkY5ODBDNDE0NzM4NjEzMDAwOEYxMjEgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYmZmaSBpT1MiICovID0geworCQlEQjEzQjFCMDE4NDlERjUyMDAxMEY0MkQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgImxpYmZmaS1NYWMiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCi0JCQkJRjZGOTgwQzIxNDczODYxMzAwMDhGMTIxIC8qIERlYnVnICovLAotCQkJCUY2Rjk4MEMzMTQ3Mzg2MTMwMDA4RjEyMSAvKiBSZWxlYXNlICovLAorCQkJCURCMTNCMUIxMTg0OURGNTIwMDEwRjQyRCAvKiBEZWJ1ZyAqLywKKwkJCQlEQjEzQjFCMjE4NDlERjUyMDAxMEY0MkQgLyogUmVsZWFzZSAqLywKIAkJCSk7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBSZWxlYXNlOwogCQl9OwogLyogRW5kIFhDQ29uZmlndXJhdGlvbkxpc3Qgc2VjdGlvbiAqLwogCX07Ci0Jcm9vdE9iamVjdCA9IEY2QjA4Mzk3MTQ3MjFFRTUwMDMxRDhBMSAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwlyb290T2JqZWN0ID0gREIxM0IxNUMxODQ5REVCNzAwMTBGNDJEIC8qIFByb2plY3Qgb2JqZWN0ICovOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9saWJ0b29sLXZlcnNpb24gYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYnRvb2wtdmVyc2lvbgppbmRleCBlNzg0ZmM0Li5kNGY1MDFjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYnRvb2wtdmVyc2lvbgorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2xpYnRvb2wtdmVyc2lvbgpAQCAtMjYsNCArMjYsNCBAQAogIyAgICByZWxlYXNlLCB0aGVuIHNldCBhZ2UgdG8gMC4KICMKICMgQ1VSUkVOVDpSRVZJU0lPTjpBR0UKLTY6MTowCis2OjI6MApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9sdG1haW4uc2ggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL2x0bWFpbi5zaApvbGQgbW9kZSAxMDA3NTUKbmV3IG1vZGUgMTAwNjQ0CmluZGV4IDYzYWU2OWQuLjA1OTU5ODAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9sdG1haW4uc2gKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9sdG1haW4uc2gKQEAgLTEsOSArMSwxMCBAQAorIyEgL2Jpbi9zaAogCi0jIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQuMgorIyBsaWJ0b29sIChHTlUgbGlidG9vbCkgMi40LjIuNDE4CisjIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgogIyBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgogCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKLSMgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAxMSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiAjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogCkBAIC0yMywxNjYgKzI0LDU2MiBAQAogIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKLSMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsCi0jIG9yIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgogCi0jIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgotIwotIyBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMKLSMgICAgICAgLS1jb25maWcgICAgICAgICAgICAgc2hvdyBhbGwgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMKLSMgICAgICAgLS1kZWJ1ZyAgICAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZwotIyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcwotIyAgICAgICAtLWZlYXR1cmVzICAgICAgICAgICBkaXNwbGF5IGJhc2ljIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSMgICAgICAgLS1tb2RlPU1PREUgICAgICAgICAgdXNlIG9wZXJhdGlvbiBtb2RlIE1PREUKLSMgICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcyAgZG9uJ3QgcmVtb3ZlIGR1cGxpY2F0ZSBkZXBlbmRlbmN5IGxpYnJhcmllcwotIyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCi0jICAgICAgIC0tbm8tcXVpZXQsIC0tbm8tc2lsZW50Ci0jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgKGRlZmF1bHQpCi0jICAgICAgIC0tbm8td2FybiAgICAgICAgICAgIGRvbid0IGRpc3BsYXkgd2FybmluZyBtZXNzYWdlcwotIyAgICAgICAtLXRhZz1UQUcgICAgICAgICAgICB1c2UgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZnJvbSB0YWcgVEFHCi0jICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKLSMgICAgICAgLS1uby12ZXJib3NlICAgICAgICAgZG9uJ3QgcHJpbnQgdGhlIGV4dHJhIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKLSMgICAgICAgLS12ZXJzaW9uICAgICAgICAgICAgcHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbgotIyAgIC1oLCAtLWhlbHAsIC0taGVscC1hbGwgICBwcmludCBzaG9ydCwgbG9uZywgb3IgZGV0YWlsZWQgaGVscCBtZXNzYWdlCi0jCi0jIE1PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLSMKLSMgICAgICAgICBjbGVhbiAgICAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQotIyAgICAgICAgIGNvbXBpbGUgICAgICAgICAgICBjb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgb2JqZWN0Ci0jICAgICAgICAgZXhlY3V0ZSAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtCi0jICAgICAgICAgZmluaXNoICAgICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKLSMgICAgICAgICBpbnN0YWxsICAgICAgICAgICAgaW5zdGFsbCBsaWJyYXJpZXMgb3IgZXhlY3V0YWJsZXMKLSMgICAgICAgICBsaW5rICAgICAgICAgICAgICAgY3JlYXRlIGEgbGlicmFyeSBvciBhbiBleGVjdXRhYmxlCi0jICAgICAgICAgdW5pbnN0YWxsICAgICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5Ci0jCi0jIE1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFdoZW4gcGFzc2VkIGFzIGZpcnN0IG9wdGlvbiwKLSMgYC0tbW9kZT1NT0RFJyBtYXkgYmUgYWJicmV2aWF0ZWQgYXMgYE1PREUnIG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbiBvZiB0aGF0LgotIyBUcnkgYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgTU9ERS4KLSMKLSMgV2hlbiByZXBvcnRpbmcgYSBidWcsIHBsZWFzZSBkZXNjcmliZSBhIHRlc3QgY2FzZSB0byByZXByb2R1Y2UgaXQgYW5kCi0jIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKLSMKLSMgICAgICAgICBob3N0LXRyaXBsZXQ6CSRob3N0Ci0jICAgICAgICAgc2hlbGw6CQkkU0hFTEwKLSMgICAgICAgICBjb21waWxlcjoJCSRMVENDCi0jICAgICAgICAgY29tcGlsZXIgZmxhZ3M6CQkkTFRDRkxBR1MKLSMgICAgICAgICBsaW5rZXI6CQkkTEQgKGdudT8gJHdpdGhfZ251X2xkKQotIyAgICAgICAgICRwcm9nbmFtZToJKEdOVSBsaWJ0b29sKSAyLjQuMgotIyAgICAgICAgIGF1dG9tYWtlOgkkYXV0b21ha2VfdmVyc2lvbgotIyAgICAgICAgIGF1dG9jb25mOgkkYXV0b2NvbmZfdmVyc2lvbgotIwotIyBSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uCi0jIEdOVSBsaWJ0b29sIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0b29sLz4uCi0jIEdlbmVyYWwgaGVscCB1c2luZyBHTlUgc29mdHdhcmU6IDxodHRwOi8vd3d3LmdudS5vcmcvZ2V0aGVscC8+LgogCiBQUk9HUkFNPWxpYnRvb2wKIFBBQ0tBR0U9bGlidG9vbAotVkVSU0lPTj0yLjQuMgotVElNRVNUQU1QPSIiCi1wYWNrYWdlX3JldmlzaW9uPTEuMzMzNworVkVSU0lPTj0yLjQuMi40MTgKK3BhY2thZ2VfcmV2aXNpb249Mi40LjIuNDE4CiAKLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorCisjIyAtLS0tLS0gIyMKKyMjIFVzYWdlLiAjIworIyMgLS0tLS0tICMjCisKKyMgUnVuICcuL2xpYnRvb2wgLS1oZWxwJyBmb3IgaGVscCB3aXRoIHVzaW5nIHRoaXMgc2NyaXB0IGZyb20gdGhlCisjIGNvbW1hbmQgbGluZS4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVc2VyIG92ZXJyaWRhYmxlIGNvbW1hbmQgcGF0aHMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQWZ0ZXIgY29uZmlndXJlIGNvbXBsZXRlcywgaXQgaGFzIGEgYmV0dGVyIGlkZWEgb2Ygc29tZSBvZiB0aGUKKyMgc2hlbGwgdG9vbHMgd2UgbmVlZCB0aGFuIHRoZSBkZWZhdWx0cyB1c2VkIGJ5IHRoZSBmdW5jdGlvbnMgc2hhcmVkCisjIHdpdGggYm9vdHN0cmFwLCBzbyBzZXQgdGhvc2UgaGVyZSB3aGVyZSB0aGV5IGNhbiBzdGlsbCBiZSBvdmVyLQorIyByaWRkZW4gYnkgdGhlIHVzZXIsIGJ1dCBvdGhlcndpc2UgdGFrZSBwcmVjZWRlbmNlLgorCis6ICR7QVVUT0NPTkY9ImF1dG9jb25mIn0KKzogJHtBVVRPTUFLRT0iYXV0b21ha2UifQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBTb3VyY2UgZXh0ZXJuYWwgbGlicmFyaWVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBNdWNoIG9mIG91ciBsb3ctbGV2ZWwgZnVuY3Rpb25hbGl0eSBuZWVkcyB0byBiZSBzb3VyY2VkIGZyb20gZXh0ZXJuYWwKKyMgbGlicmFyaWVzLCB3aGljaCBhcmUgaW5zdGFsbGVkIHRvICRwa2dhdXhkaXIuCisKKyMgU2V0IGEgdmVyc2lvbiBzdHJpbmcgZm9yIHRoaXMgc2NyaXB0Lgorc2NyaXB0dmVyc2lvbj0yMDEzLTA4LTIzLjIwOyAjIFVUQworCisjIEdlbmVyYWwgc2hlbGwgc2NyaXB0IGJvaWxlciBwbGF0ZSwgYW5kIGhlbHBlciBmdW5jdGlvbnMuCisjIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisKKyMgQ29weXJpZ2h0IChDKSAyMDA0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCisjIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdSBkaXN0cmlidXRlCisjIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsCisjIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZQorIyBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgUGxlYXNlIHJlcG9ydCBidWdzIG9yIHByb3Bvc2UgcGF0Y2hlcyB0byBnYXJ5QGdudS5vcmcuCisKKworIyMgLS0tLS0tICMjCisjIyBVc2FnZS4gIyMKKyMjIC0tLS0tLSAjIworCisjIEV2YWx1YXRlIHRoaXMgZmlsZSBuZWFyIHRoZSB0b3Agb2YgeW91ciBzY3JpcHQgdG8gZ2FpbiBhY2Nlc3MgdG8KKyMgdGhlIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGRlZmluZWQgaGVyZToKKyMKKyMgICAuIGBlY2hvICIkMCIgfCAke1NFRC1zZWR9ICdzfFteL10qJHx8J2AvYnVpbGQtYXV4L2Z1bmNsaWIuc2gKKyMKKyMgSWYgeW91IG5lZWQgdG8gb3ZlcnJpZGUgYW55IG9mIHRoZSBkZWZhdWx0IGVudmlyb25tZW50IHZhcmlhYmxlCisjIHNldHRpbmdzLCBkbyB0aGF0IGJlZm9yZSBldmFsdWF0aW5nIHRoaXMgZmlsZS4KKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgU2hlbGwgbm9ybWFsaXNhdGlvbi4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgU29tZSBzaGVsbHMgbmVlZCBhIGxpdHRsZSBoZWxwIHRvIGJlIGFzIEJvdXJuZSBjb21wYXRpYmxlIGFzIHBvc3NpYmxlLgorIyBCZWZvcmUgZG9pbmcgYW55dGhpbmcgZWxzZSwgbWFrZSBzdXJlIGFsbCB0aGF0IGhlbHAgaGFzIGJlZW4gcHJvdmlkZWQhCisKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGVtdWxhdGUgc2gKICAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCiAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwogICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZWxzZQotICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4OzsgZXNhYworICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gKnBvc2l4Kikgc2V0IC1vIHBvc2l4IDs7IGVzYWMKIGZpCi1CSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAotRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAogCi0jIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCi1mdW5jX2ZhbGxiYWNrX2VjaG8gKCkKLXsKLSAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKLSQxCi1fTFRFQ0hPX0VPRicKLX0KLQotIyBOTFMgbnVpc2FuY2VzOiBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KLWx0X3VzZXJfbG9jYWxlPQotbHRfc2FmZV9sb2NhbGU9Ci1mb3IgbHRfdmFyIGluIExBTkcgTEFOR1VBR0UgTENfQUxMIExDX0NUWVBFIExDX0NPTExBVEUgTENfTUVTU0FHRVMKKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyBpbiBjYXNlIHRoZXkgYXJlIHJlcXVpcmVkIGxhdGVyLgorX0dfdXNlcl9sb2NhbGU9CitfR19zYWZlX2xvY2FsZT0KK2ZvciBfR192YXIgaW4gTEFORyBMQU5HVUFHRSBMQ19BTEwgTENfQ1RZUEUgTENfQ09MTEFURSBMQ19NRVNTQUdFUwogZG8KLSAgZXZhbCAiaWYgdGVzdCBcIlwkeyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCi0gICAgICAgICAgc2F2ZV8kbHRfdmFyPVwkJGx0X3ZhcgotICAgICAgICAgICRsdF92YXI9QwotCSAgZXhwb3J0ICRsdF92YXIKLQkgIGx0X3VzZXJfbG9jYWxlPVwiJGx0X3Zhcj1cXFwkc2F2ZV9cJGx0X3ZhcjsgXCRsdF91c2VyX2xvY2FsZVwiCi0JICBsdF9zYWZlX2xvY2FsZT1cIiRsdF92YXI9QzsgXCRsdF9zYWZlX2xvY2FsZVwiCisgIGV2YWwgImlmIHRlc3Qgc2V0ID0gXCJcJHskX0dfdmFyK3NldH1cIjsgdGhlbgorICAgICAgICAgIHNhdmVfJF9HX3Zhcj1cJCRfR192YXIKKyAgICAgICAgICAkX0dfdmFyPUMKKwkgIGV4cG9ydCAkX0dfdmFyCisJICBfR191c2VyX2xvY2FsZT1cIiRfR192YXI9XFxcJHNhdmVfXCRfR192YXI7IFwkX0dfdXNlcl9sb2NhbGVcIgorCSAgX0dfc2FmZV9sb2NhbGU9XCIkX0dfdmFyPUM7IFwkX0dfc2FmZV9sb2NhbGVcIgogCWZpIgogZG9uZQotTENfQUxMPUMKLUxBTkdVQUdFPUMKLWV4cG9ydCBMQU5HVUFHRSBMQ19BTEwKIAotJGx0X3Vuc2V0IENEUEFUSAorIyBDRFBBVEguCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICiAKKyMgTWFrZSBzdXJlIElGUyBoYXMgYSBzZW5zaWJsZSBkZWZhdWx0CitzcD0nICcKK25sPScKKycKK0lGUz0iJHNwCSRubCIKKworIyBUaGVyZSBhcmUgc3RpbGwgbW9kZXJuIHN5c3RlbXMgdGhhdCBoYXZlIHByb2JsZW1zIHdpdGggJ2VjaG8nIG1pcy0KKyMgaGFuZGxpbmcgYmFja3NsYXNoZXMsIGFtb25nIG90aGVycywgc28gbWFrZSBzdXJlICRic19lY2hvIGlzIHNldCB0byBhCisjIGNvbW1hbmQgdGhhdCBjb3JyZWN0bHkgaW50ZXJwcmV0cyBiYWNrc2xhc2hlcy4KKyMgKHRoaXMgY29kZSBmcm9tIEF1dG9jb25mIDIuNjgpCisKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCitic19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYnNfZWNobz0kYnNfZWNobyRic19lY2hvJGJzX2VjaG8kYnNfZWNobyRic19lY2hvCitic19lY2hvPSRic19lY2hvJGJzX2VjaG8kYnNfZWNobyRic19lY2hvJGJzX2VjaG8kYnNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRic19lY2hvYCIgPSAiWCRic19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYnNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGJzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGJzX2VjaG9gIiA9ICJYJGJzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBic19lY2hvPSdwcmludGYgJXNcbicKKyAgYnNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGJzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRic19lY2hvIjsgdGhlbgorICAgIGJzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRubCInCisgICAgYnNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYnNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBic19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJG5sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJG5sIgorICAgICcKKyAgICBleHBvcnQgYnNfZWNob19uX2JvZHkKKyAgICBic19lY2hvX249J3NoIC1jICRic19lY2hvX25fYm9keSBic19lY2hvJworICBmaQorICBleHBvcnQgYnNfZWNob19ib2R5CisgIGJzX2VjaG89J3NoIC1jICRic19lY2hvX2JvZHkgYnNfZWNobycKK2ZpCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgVXNlciBvdmVycmlkYWJsZSBjb21tYW5kIHBhdGhzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIEFsbCB1cHBlcmNhc2UgdmFyaWFibGUgbmFtZXMgYXJlIHVzZWQgZm9yIGVudmlyb25tZW50IHZhcmlhYmxlcy4gIFRoZXNlCisjIHZhcmlhYmxlcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgdXNlciBiZWZvcmUgY2FsbGluZyBhIHNjcmlwdCB0aGF0CisjIHVzZXMgdGhlbSBpZiBhIHN1aXRhYmxlIGNvbW1hbmQgb2YgdGhhdCBuYW1lIGlzIG5vdCBhbHJlYWR5IGF2YWlsYWJsZQorIyBpbiB0aGUgY29tbWFuZCBzZWFyY2ggUEFUSC4KKworOiAke0NQPSJjcCAtZiJ9Cis6ICR7RUNITz0iJGJzX2VjaG8ifQorOiAke0VHUkVQPSJncmVwIC1FIn0KKzogJHtGR1JFUD0iZ3JlcCAtRiJ9Cis6ICR7R1JFUD0iZ3JlcCJ9Cis6ICR7TE5fUz0ibG4gLXMifQorOiAke01BS0U9Im1ha2UifQorOiAke01LRElSPSJta2RpciJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorOiAke1NFRD0ic2VkIn0KKzogJHtTSEVMTD0iJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0ifQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBVc2VmdWwgc2VkIHNuaXBwZXRzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworc2VkX2Rpcm5hbWU9J3N8L1teL10qJHx8Jworc2VkX2Jhc2VuYW1lPSdzfF4uKi98fCcKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0nc3xcKFtgIiRcXF1cKXxcXFwxfGcnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorc2VkX2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKKyMgc3RyaW5nIGxpdGVyYWxseS4KK3NlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3N8W10uW14kXFwqXC9dfFxcJnxnJworCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAorIyB0aGF0IGNvbnRhaW5zIGZvcndhcmQgc2xhc2hlcywgaW50byBvbmUgdGhhdCBjb250YWlucworIyAoZXNjYXBlZCkgYmFja3NsYXNoZXMuICBBIHZlcnkgbmFpdmUgaW1wbGVtZW50YXRpb24uCitzZWRfbmFpdmVfYmFja3NsYXNoaWZ5PSdzfFxcXFwqfFxcfGc7c3wvfFxcfGc7c3xcXHxcXFxcfGcnCisKKyMgUmUtJ1wnIHBhcmFtZXRlciBleHBhbnNpb25zIGluIG91dHB1dCBvZiBzZWRfZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQKKyMgd2VyZSAnXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mICdcJyBwcmVjZWRlZCBhCisjICckJyBpbiBpbnB1dCB0byBzZWRfZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20KKyMgZXhwYW5zaW9uLiAgU2luY2UgZWFjaCBpbnB1dCAnXCcgaXMgbm93IHR3byAnXCdzLCBsb29rIGZvciBhbnkgbnVtYmVyCisjIG9mIHJ1bnMgb2YgZm91ciAnXCdzIGZvbGxvd2VkIGJ5IHR3byAnXCdzIGFuZCB0aGVuIGEgJyQnLiAgJ1wnIHRoYXQgJyQnLgorX0dfYnM9J1xcJworX0dfYnMyPSdcXFxcJworX0dfYnM0PSdcXFxcXFxcXCcKK19HX2RvbGxhcj0nXCQnCitzZWRfZG91YmxlX2JhY2tzbGFzaD0iXAorICBzLyRfR19iczQvJlxcCisvZworICBzL14kX0dfYnMyJF9HX2RvbGxhci8kX0dfYnMmLworICBzL1xcKFteJF9HX2JzXVxcKSRfR19iczIkX0dfZG9sbGFyL1xcMSRfR19iczIkX0dfYnMkX0dfZG9sbGFyL2cKKyAgcy9cbi8vZyIKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgR2xvYmFsIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgRXhjZXB0IGZvciB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBleHBsaWNpdGx5IGxpc3RlZCBiZWxvdywgdGhlIGZvbGxvd2luZworIyBmdW5jdGlvbnMgaW4gdGhlICdeZnVuY18nIG5hbWVzcGFjZSwgYW5kIHRoZSAnXnJlcXVpcmVfJyBuYW1lc3BhY2UKKyMgdmFyaWFibGVzIGluaXRpYWxpc2VkIGluIHRoZSAnUmVzb3VyY2UgbWFuYWdlbWVudCcgc2VjdGlvbiwgc291cmNpbmcKKyMgdGhpcyBmaWxlIHdpbGwgbm90IHBvbGx1dGUgeW91ciBnbG9iYWwgbmFtZXNwYWNlIHdpdGggYW55dGhpbmcKKyMgZWxzZS4gVGhlcmUncyBubyBwb3J0YWJsZSB3YXkgdG8gc2NvcGUgdmFyaWFibGVzIGluIEJvdXJuZSBzaGVsbAorIyB0aG91Z2gsIHNvIGFjdHVhbGx5IHJ1bm5pbmcgdGhlc2UgZnVuY3Rpb25zIHdpbGwgc29tZXRpbWVzIHBsYWNlCisjIHJlc3VsdHMgaW50byBhIHZhcmlhYmxlIG5hbWVkIGFmdGVyIHRoZSBmdW5jdGlvbiwgYW5kIG9mdGVuIHVzZQorIyB0ZW1wb3JhcnkgdmFyaWFibGVzIGluIHRoZSAnXl9HXycgbmFtZXNwYWNlLiBJZiB5b3UgYXJlIGNhcmVmdWwgdG8KKyMgYXZvaWQgdXNpbmcgdGhvc2UgbmFtZXNwYWNlcyBjYXN1YWxseSBpbiB5b3VyIHNvdXJjaW5nIHNjcmlwdCwgdGhpbmdzCisjIHNob3VsZCBjb250aW51ZSB0byB3b3JrIGFzIHlvdSBleHBlY3QuIEFuZCwgb2YgY291cnNlLCB5b3UgY2FuIGZyZWVseQorIyBvdmVyd3JpdGUgYW55IG9mIHRoZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIGRlZmluZWQgaGVyZSBiZWZvcmUKKyMgY2FsbGluZyBhbnl0aGluZyB0byBjdXN0b21pemUgdGhlbS4KKworRVhJVF9TVUNDRVNTPTAKK0VYSVRfRkFJTFVSRT0xCitFWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCitFWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KKworIyBBbGxvdyBvdmVycmlkaW5nLCBlZyBhc3N1bWluZyB0aGF0IHlvdSBmb2xsb3cgdGhlIGNvbnZlbnRpb24gb2YKKyMgcHV0dGluZyAnJGRlYnVnX2NtZCcgYXQgdGhlIHN0YXJ0IG9mIGFsbCB5b3VyIGZ1bmN0aW9ucywgeW91IGNhbiBnZXQKKyMgYmFzaCB0byBzaG93IGZ1bmN0aW9uIGNhbGwgdHJhY2Ugd2l0aDoKKyMKKyMgICAgZGVidWdfY21kPSdldmFsIGVjaG8gIiR7RlVOQ05BTUVbMF19ICQqIiA+JjInIGJhc2ggeW91ci1zY3JpcHQtbmFtZQorZGVidWdfY21kPSR7ZGVidWdfY21kLSI6In0KK2V4aXRfY21kPToKKworIyBCeSBjb252ZW50aW9uLCBmaW5pc2ggeW91ciBzY3JpcHQgd2l0aDoKKyMKKyMgICAgZXhpdCAkZXhpdF9zdGF0dXMKKyMKKyMgc28gdGhhdCB5b3UgY2FuIHNldCBleGl0X3N0YXR1cyB0byBub24temVybyBpZiB5b3Ugd2FudCB0byBpbmRpY2F0ZQorIyBzb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgZXhlY3V0aW9uIHdpdGhvdXQgYWN0dWFsbHkgYmFpbGluZyBvdXQgYXQKKyMgdGhlIHBvaW50IG9mIGZhaWx1cmUuCitleGl0X3N0YXR1cz0kRVhJVF9TVUNDRVNTCiAKICMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAogIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKICMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCiAjIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKICMgZnVuY3Rpb24uCi1wcm9ncGF0aD0iJDAiCitwcm9ncGF0aD0kMAorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbS4KK3Byb2duYW1lPWAkYnNfZWNobyAiJHByb2dwYXRoIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgCisKKyMgTWFrZSBzdXJlIHdlIGhhdmUgYW4gYWJzb2x1dGUgcHJvZ3BhdGggZm9yIHJlZXhlY3V0aW9uOgorY2FzZSAkcHJvZ3BhdGggaW4KKyAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKKyAgKltcXC9dKikKKyAgICAgcHJvZ2Rpcj1gJGJzX2VjaG8gIiRwcm9ncGF0aCIgfCRTRUQgIiRzZWRfZGlybmFtZSJgCisgICAgIHByb2dkaXI9YGNkICIkcHJvZ2RpciIgJiYgcHdkYAorICAgICBwcm9ncGF0aD0kcHJvZ2Rpci8kcHJvZ25hbWUKKyAgICAgOzsKKyAgKikKKyAgICAgX0dfSUZTPSRJRlMKKyAgICAgSUZTPSR7UEFUSF9TRVBBUkFUT1ItOn0KKyAgICAgZm9yIHByb2dkaXIgaW4gJFBBVEg7IGRvCisgICAgICAgSUZTPSRfR19JRlMKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSRfR19JRlMKKyAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKKyAgICAgcHJvZ3BhdGg9JHByb2dkaXIvJHByb2duYW1lCisgICAgIDs7Citlc2FjCiAKIAorIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFN0YW5kYXJkIG9wdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwogCi06ICR7Q1A9ImNwIC1mIn0KLXRlc3QgIiR7RUNITytzZXR9IiA9IHNldCB8fCBFQ0hPPSR7YXNfZWNoby0ncHJpbnRmICVzXG4nfQotOiAke01BS0U9Im1ha2UifQotOiAke01LRElSPSJta2RpciJ9Ci06ICR7TVY9Im12IC1mIn0KLTogJHtSTT0icm0gLWYifQotOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9Ci06ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKyMgVGhlIGZvbGxvd2luZyBvcHRpb25zIGFmZmVjdCB0aGUgb3BlcmF0aW9uIG9mIHRoZSBmdW5jdGlvbnMgZGVmaW5lZAorIyBiZWxvdywgYW5kIHNob3VsZCBiZSBzZXQgYXBwcm9wcmlhdGVseSBkZXBlbmRpbmcgb24gcnVuLXRpbWUgcGFyYS0KKyMgbWV0ZXJzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgogCi0jIEdsb2JhbCB2YXJpYWJsZXM6Ci1FWElUX1NVQ0NFU1M9MAotRVhJVF9GQUlMVVJFPTEKLUVYSVRfTUlTTUFUQ0g9NjMgICMgJD8gPSA2MyBpcyB1c2VkIHRvIGluZGljYXRlIHZlcnNpb24gbWlzbWF0Y2ggdG8gbWlzc2luZy4KLUVYSVRfU0tJUD03NwkgICMgJD8gPSA3NyBpcyB1c2VkIHRvIGluZGljYXRlIGEgc2tpcHBlZCB0ZXN0IHRvIGF1dG9tYWtlLgorb3B0X2RyeV9ydW49ZmFsc2UKK29wdF9xdWlldD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKIAotZXhpdF9zdGF0dXM9JEVYSVRfU1VDQ0VTUworIyBDYXRlZ29yaWVzICdhbGwnIGFuZCAnbm9uZScgYXJlIGFsd2F5cyBhdmFpbGFibGUuICBBcHBlbmQgYW55IG90aGVycworIyB5b3Ugd2lsbCBwYXNzIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBmdW5jX3dhcm5pbmcgZnJvbSB5b3VyIG93bgorIyBjb2RlLgord2FybmluZ19jYXRlZ29yaWVzPQogCi0jIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAotbHRfbmw9JwotJwotSUZTPSIgCSRsdF9ubCIKKyMgQnkgZGVmYXVsdCwgZGlzcGxheSB3YXJuaW5ncyBhY2NvcmRpbmcgdG8gJ29wdF93YXJuaW5nX3R5cGVzJy4gIFNldAorIyAnd2FybmluZ19mdW5jJyAgdG8gJzonIHRvIGVsaWRlIGFsbCB3YXJuaW5ncywgb3IgZnVuY19mYXRhbF9lcnJvciB0bworIyB0cmVhdCB0aGUgbmV4dCBkaXNwbGF5ZWQgd2FybmluZyBhcyBhIGZhdGFsIGVycm9yLgord2FybmluZ19mdW5jPWZ1bmNfd2Fybl9hbmRfY29udGludWUKIAotZGlybmFtZT0icywvW14vXSokLCwiCi1iYXNlbmFtZT0icyxeLiovLCwiCisjIFNldCB0byAnYWxsJyB0byBkaXNwbGF5IGFsbCB3YXJuaW5ncywgJ25vbmUnIHRvIHN1cHByZXNzIGFsbAorIyB3YXJuaW5ncywgb3IgYSBzcGFjZSBkZWxpbWl0ZWQgbGlzdCBvZiBzb21lIHN1YnNldCBvZgorIyAnd2FybmluZ19jYXRlZ29yaWVzJyB0byBkaXNwbGF5IG9ubHkgdGhlIGxpc3RlZCB3YXJuaW5ncy4KK29wdF93YXJuaW5nX3R5cGVzPWFsbAogCi0jIGZ1bmNfZGlybmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlc291cmNlIG1hbmFnZW1lbnQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFRoaXMgc2VjdGlvbiBjb250YWlucyBkZWZpbml0aW9ucyBmb3IgZnVuY3Rpb25zIHRoYXQgZWFjaCBlbnN1cmUgYQorIyBwYXJ0aWN1bGFyIHJlc291cmNlIChhIGZpbGUsIG9yIGEgbm9uLWVtcHR5IGNvbmZpZ3VyYXRpb24gdmFyaWFibGUgZm9yCisjIGV4YW1wbGUpIGlzIGF2YWlsYWJsZSwgYW5kIGlmIGFwcHJvcHJpYXRlIHRvIGV4dHJhY3QgZGVmYXVsdCB2YWx1ZXMKKyMgZnJvbSBwZXJ0aW5lbnQgcGFja2FnZSBmaWxlcy4gQ2FsbCB0aGVtIHVzaW5nIHRoZWlyIGFzc29jaWF0ZWQKKyMgJ3JlcXVpcmVfKicgdmFyaWFibGUgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgZXhlY3V0ZWQsIGF0IG1vc3QsIG9uY2UuCisjCisjIEl0J3MgZW50aXJlbHkgZGVsaWJlcmF0ZSB0aGF0IGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGNhbiBzZXQKKyMgdmFyaWFibGVzIHRoYXQgZG9uJ3Qgb2JleSB0aGUgbmFtZXNwYWNlIGxpbWl0YXRpb25zIG9iZXllZCBieSB0aGUgcmVzdAorIyBvZiB0aGlzIGZpbGUsIGluIG9yZGVyIHRoYXQgdGhhdCB0aGV5IGJlIGFzIHVzZWZ1bCBhcyBwb3NzaWJsZSB0bworIyBjYWxsZXJzLgorCisKKyMgcmVxdWlyZV90ZXJtX2NvbG9ycworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbG93IGRpc3BsYXkgb2YgYm9sZCB0ZXh0IG9uIHRlcm1pbmFscyB0aGF0IHN1cHBvcnQgaXQuCityZXF1aXJlX3Rlcm1fY29sb3JzPWZ1bmNfcmVxdWlyZV90ZXJtX2NvbG9ycworZnVuY19yZXF1aXJlX3Rlcm1fY29sb3JzICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgdGVzdCAtdCAxICYmIHsKKyAgICAgICMgQ09MT1JURVJNIGFuZCBVU0VfQU5TSV9DT0xPUlMgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRha2UKKyAgICAgICMgcHJlY2VkZW5jZSwgYmVjYXVzZSBtb3N0IHRlcm1pbmZvIGRhdGFiYXNlcyBuZWdsZWN0IHRvIGRlc2NyaWJlCisgICAgICAjIHdoZXRoZXIgY29sb3Igc2VxdWVuY2VzIGFyZSBzdXBwb3J0ZWQuCisgICAgICB0ZXN0IC1uICIke0NPTE9SVEVSTStzZXR9IiAmJiA6ICR7VVNFX0FOU0lfQ09MT1JTPSIxIn0KKworICAgICAgaWYgdGVzdCAxID0gIiRVU0VfQU5TSV9DT0xPUlMiOyB0aGVuCisgICAgICAgICMgU3RhbmRhcmQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzCisgICAgICAgIHRjX3Jlc2V0PScbWzBtJworICAgICAgICB0Y19ib2xkPScbWzFtJzsgICB0Y19zdGFuZG91dD0nG1s3bScKKyAgICAgICAgdGNfcmVkPScbWzMxbSc7ICAgdGNfZ3JlZW49JxtbMzJtJworICAgICAgICB0Y19ibHVlPScbWzM0bSc7ICB0Y19jeWFuPScbWzM2bScKKyAgICAgIGVsc2UKKyAgICAgICAgIyBPdGhlcndpc2UgdHJ1c3QgdGhlIHRlcm1pbmZvIGRhdGFiYXNlIGFmdGVyIGFsbC4KKyAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2dyMCAyPi9kZXYvbnVsbGAiICYmIHsKKyAgICAgICAgICB0Y19yZXNldD1gdHB1dCBzZ3IwYAorICAgICAgICAgIHRlc3QgLW4gImB0cHV0IGJvbGQgMj4vZGV2L251bGxgIiAmJiB0Y19ib2xkPWB0cHV0IGJvbGRgCisgICAgICAgICAgdGNfc3RhbmRvdXQ9JHRjX2JvbGQKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzbXNvIDI+L2Rldi9udWxsYCIgJiYgdGNfc3RhbmRvdXQ9YHRwdXQgc21zb2AKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiAxIDI+L2Rldi9udWxsYCIgJiYgdGNfcmVkPWB0cHV0IHNldGFmIDFgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgMiAyPi9kZXYvbnVsbGAiICYmIHRjX2dyZWVuPWB0cHV0IHNldGFmIDJgCisgICAgICAgICAgdGVzdCAtbiAiYHRwdXQgc2V0YWYgNCAyPi9kZXYvbnVsbGAiICYmIHRjX2JsdWU9YHRwdXQgc2V0YWYgNGAKKyAgICAgICAgICB0ZXN0IC1uICJgdHB1dCBzZXRhZiA1IDI+L2Rldi9udWxsYCIgJiYgdGNfY3lhbj1gdHB1dCBzZXRhZiA1YAorICAgICAgICB9CisgICAgICBmaQorICAgIH0KKworICAgIHJlcXVpcmVfdGVybV9jb2xvcnM9OgorfQorCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBGdW5jdGlvbiBsaWJyYXJ5LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBUaGlzIHNlY3Rpb24gY29udGFpbnMgYSB2YXJpZXR5IG9mIHVzZWZ1bCBmdW5jdGlvbnMgdG8gY2FsbCBpbiB5b3VyCisjIHNjcmlwdHMuIFRha2Ugbm90ZSBvZiB0aGUgcG9ydGFibGUgd3JhcHBlcnMgZm9yIGZlYXR1cmVzIHByb3ZpZGVkIGJ5CisjIHNvbWUgbW9kZXJuIHNoZWxscywgd2hpY2ggd2lsbCBmYWxsIGJhY2sgdG8gc2xvd2VyIGVxdWl2YWxlbnRzIG9uCisjIGxlc3MgZmVhdHVyZWZ1bCBzaGVsbHMuCisKKworIyBmdW5jX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFwcGVuZCBWQUxVRSBvbnRvIHRoZSBleGlzdGluZyBjb250ZW50cyBvZiBWQVIuCisKKyAgIyBXZSBzaG91bGQgdHJ5IHRvIG1pbmltaXNlIGZvcmtzLCBlc3BlY2lhbGx5IG9uIFdpbmRvd3Mgd2hlcmUgdGhleSBhcmUKKyAgIyB1bnJlYXNvbmFibHkgc2xvdywgc28gc2tpcCB0aGUgZmVhdHVyZSBwcm9iZXMgd2hlbiBiYXNoIG9yIHpzaCBhcmUKKyAgIyBiZWluZyB1c2VkOgorICBpZiB0ZXN0IHNldCA9ICIke0JBU0hfVkVSU0lPTitzZXR9JHtaU0hfVkVSU0lPTitzZXR9IjsgdGhlbgorICAgIDogJHtfR19IQVZFX0FSSVRIX09QPSJ5ZXMifQorICAgIDogJHtfR19IQVZFX1hTSV9PUFM9InllcyJ9CisgICAgIyBUaGUgKz0gb3BlcmF0b3Igd2FzIGludHJvZHVjZWQgaW4gYmFzaCAzLjEKKyAgICBjYXNlICRCQVNIX1ZFUlNJT04gaW4KKyAgICAgIFsxMl0uKiB8IDMuMCB8IDMuMCopIDs7CisgICAgICAqKQorICAgICAgICA6ICR7X0dfSEFWRV9QTFVTRVFfT1A9InllcyJ9CisgICAgICAgIDs7CisgICAgZXNhYworICBmaQorCisgICMgX0dfSEFWRV9QTFVTRVFfT1AKKyAgIyBDYW4gYmUgZW1wdHksIGluIHdoaWNoIGNhc2UgdGhlIHNoZWxsIGlzIHByb2JlZCwgInllcyIgaWYgKz0gaXMKKyAgIyB1c2VhYmxlIG9yIGFueXRoaW5nIGVsc2UgaWYgaXQgZG9lcyBub3Qgd29yay4KKyAgdGVzdCAteiAiJF9HX0hBVkVfUExVU0VRX09QIiBcCisgICAgJiYgKGV2YWwgJ3g9YTsgeCs9IiBiIjsgdGVzdCAiYSBiIiA9ICIkeCInKSAyPi9kZXYvbnVsbCBcCisgICAgJiYgX0dfSEFWRV9QTFVTRVFfT1A9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1BMVVNFUV9PUCIKK3RoZW4KKyAgIyBUaGlzIGlzIGFuIFhTSSBjb21wYXRpYmxlIHNoZWxsLCBhbGxvd2luZyBhIGZhc3RlciBpbXBsZW1lbnRhdGlvbi4uLgorICBldmFsICdmdW5jX2FwcGVuZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCAiJDErPVwkMiIKKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KKyAgZnVuY19hcHBlbmQgKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGV2YWwgIiQxPVwkJDFcJDIiCisgIH0KK2ZpCisKKworIyBmdW5jX2FwcGVuZF9xdW90ZWQgVkFSIFZBTFVFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUXVvdGUgVkFMVUUgYW5kIGFwcGVuZCB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUiwgc2VwYXJhdGVkCisjIGJ5IGEgc3BhY2UuCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9QTFVTRVFfT1AiOyB0aGVuCisgIGV2YWwgJ2Z1bmNfYXBwZW5kX3F1b3RlZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJDIiCisgICAgZXZhbCAiJDErPVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgIH0nCitlbHNlCisgIGZ1bmNfYXBwZW5kX3F1b3RlZCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJDIiCisgICAgZXZhbCAiJDE9XCQkMVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgIH0KK2ZpCisKKworIyBmdW5jX2FwcGVuZF91bmlxIFZBUiBWQUxVRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdW5pcXVlIFZBTFVFIG9udG8gdGhlIGV4aXN0aW5nIGNvbnRlbnRzIG9mIFZBUiwgYXNzdW1pbmcKKyMgZW50cmllcyBhcmUgZGVsaW1pdGVkIGJ5IHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgVkFMVUUuICBGb3IgZXhhbXBsZToKKyMKKyMgICBmdW5jX2FwcGVuZF91bmlxIG9wdGlvbnMgIiAtLWFub3RoZXItb3B0aW9uIG9wdGlvbi1hcmd1bWVudCIKKyMKKyMgd2lsbCBvbmx5IGFwcGVuZCB0byAkb3B0aW9ucyBpZiAiIC0tYW5vdGhlci1vcHRpb24gb3B0aW9uLWFyZ3VtZW50ICIKKyMgaXMgbm90IGFscmVhZHkgcHJlc2VudCBzb21ld2hlcmUgaW4gJG9wdGlvbnMgYWxyZWFkeSAobm90ZSBzcGFjZXMgYXQKKyMgZWFjaCBlbmQgaW1wbGllZCBieSBsZWFkaW5nIHNwYWNlIGluIHNlY29uZCBhcmd1bWVudCkuCitmdW5jX2FwcGVuZF91bmlxICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZXZhbCBfR19jdXJyZW50X3ZhbHVlPSdgJGJzX2VjaG8gJCckMSdgJworICAgIF9HX2RlbGltPWBleHByICIkMiIgOiAnXCguXCknYAorCisgICAgY2FzZSAkX0dfZGVsaW0kX0dfY3VycmVudF92YWx1ZSRfR19kZWxpbSBpbgorICAgICAgKiIkMiRfR19kZWxpbSIqKSA7OworICAgICAgKikgZnVuY19hcHBlbmQgIiRAIiA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfYXJpdGggVEVSTS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfYXJpdGhfcmVzdWx0IHRvIHRoZSByZXN1bHQgb2YgZXZhbHVhdGluZyBURVJNcy4KKyAgdGVzdCAteiAiJF9HX0hBVkVfQVJJVEhfT1AiIFwKKyAgICAmJiAoZXZhbCAndGVzdCAyID0gJCgoIDEgKyAxICkpJykgMj4vZGV2L251bGwgXAorICAgICYmIF9HX0hBVkVfQVJJVEhfT1A9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX0FSSVRIX09QIjsgdGhlbgorICBldmFsICdmdW5jX2FyaXRoICgpCisgIHsKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSkKKyAgfScKK2Vsc2UKKyAgZnVuY19hcml0aCAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiRAImAKKyAgfQorZmkKKworCisjIGZ1bmNfYmFzZW5hbWUgRklMRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfYmFzZW5hbWVfcmVzdWx0IHRvIEZJTEUgd2l0aCBldmVyeXRoaW5nIHVwIHRvIGFuZCBpbmNsdWRpbmcKKyMgdGhlIGxhc3QgLyBzdHJpcHBlZC4KK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiOyB0aGVuCisgICMgSWYgdGhpcyBzaGVsbCBzdXBwb3J0cyBzdWZmaXggcGF0dGVybiByZW1vdmFsLCB0aGVuIHVzZSBpdCB0byBhdm9pZAorICAjIGZvcmtpbmcuIEhpZGUgdGhlIGRlZmluaXRpb25zIHNpbmdsZSBxdW90ZXMgaW4gY2FzZSB0aGUgc2hlbGwgY2hva2VzCisgICMgb24gdW5zdXBwb3J0ZWQgc3ludGF4Li4uCisgIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0kezEjIyovfScKKyAgX2Q9J2Nhc2UgJDEgaW4KKyAgICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSR7MSUvKn0kMiA7OworICAgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9JDMgICAgICAgIDs7CisgICAgICBlc2FjJworCitlbHNlCisgICMgLi4ub3RoZXJ3aXNlIGZhbGwgYmFjayB0byB1c2luZyBzZWQuCisgIF9iPSdmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiB8JFNFRCAiJHNlZF9iYXNlbmFtZSJgJworICBfZD0nZnVuY19kaXJuYW1lX3Jlc3VsdD1gJEVDSE8gIiQxIiAgfCRTRUQgIiRzZWRfZGlybmFtZSJgCisgICAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkMSI7IHRoZW4KKyAgICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0kMworICAgICAgZWxzZQorICAgICAgICBmdW5jX2FwcGVuZCBmdW5jX2Rpcm5hbWVfcmVzdWx0ICIkMiIKKyAgICAgIGZpJworZmkKKworZXZhbCAnZnVuY19iYXNlbmFtZSAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICciJF9iIicKK30nCisKKworIyBmdW5jX2Rpcm5hbWUgRklMRSBBUFBFTkQgTk9ORElSX1JFUExBQ0VNRU5UCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwKICMgb3RoZXJ3aXNlIHNldCByZXN1bHQgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgotZnVuY19kaXJuYW1lICgpCitldmFsICdmdW5jX2Rpcm5hbWUgKCkKIHsKLSAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkZGlybmFtZSJgCi0gICAgaWYgdGVzdCAiWCRmdW5jX2Rpcm5hbWVfcmVzdWx0IiA9ICJYJHsxfSI7IHRoZW4KLSAgICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iCi0gICAgZWxzZQotICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQkezJ9IgotICAgIGZpCi19ICMgZnVuY19kaXJuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorICAgICRkZWJ1Z19jbWQKKworICAgICciJF9kIicKK30nCiAKIAotIyBmdW5jX2Jhc2VuYW1lIGZpbGUKLWZ1bmNfYmFzZW5hbWUgKCkKLXsKLSAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKLX0gIyBmdW5jX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotCi0KLSMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKLSMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBGSUxFIEFQUEVORCBOT05ESVJfUkVQTEFDRU1FTlQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KICMgY2FsbDoKICMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCiAjICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKQEAgLTE5MCwyNjMgKzU4NywzMjcgQEAKICMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgogIyAgIGJhc2VuYW1lOiBDb21wdXRlIGZpbGVuYW1lIG9mIEZJTEUuCiAjICAgICAgICAgICAgIHZhbHVlIHJldHVuZWQgaW4gIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLSMgSW1wbGVtZW50YXRpb24gbXVzdCBiZSBrZXB0IHN5bmNocm9uaXplZCB3aXRoIGZ1bmNfZGlybmFtZQotIyBhbmQgZnVuY19iYXNlbmFtZS4gRm9yIGVmZmljaWVuY3ksIHdlIGRvIG5vdCBkZWxlZ2F0ZSB0bwotIyB0aG9zZSBmdW5jdGlvbnMgYnV0IGluc3RlYWQgZHVwbGljYXRlIHRoZSBmdW5jdGlvbmFsaXR5IGhlcmUuCi1mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpCisjIEZvciBlZmZpY2llbmN5LCB3ZSBkbyBub3QgZGVsZWdhdGUgdG8gdGhlIGZ1bmN0aW9ucyBhYm92ZSBidXQgaW5zdGVhZAorIyBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KK2V2YWwgJ2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKIHsKLSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKLSAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgotICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKLSAgICBlbHNlCi0gICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgICAgJGRlYnVnX2NtZAorCisgICAgJyIkX2IiJworICAgICciJF9kIicKK30nCisKKworIyBmdW5jX2VjaG8gQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZS4KK2Z1bmNfZWNobyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIF9HX21lc3NhZ2U9JCoKKworICAgIGZ1bmNfZWNob19JRlM9JElGUworICAgIElGUz0kbmwKKyAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KKyAgICAgIElGUz0kZnVuY19lY2hvX0lGUworICAgICAgJGJzX2VjaG8gIiRwcm9nbmFtZTogJF9HX2xpbmUiCisgICAgZG9uZQorICAgIElGUz0kZnVuY19lY2hvX0lGUworfQorCisKKyMgZnVuY19lY2hvX2FsbCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiJCoiCit9CisKKworIyBmdW5jX2VjaG9faW5maXhfMSBJTkZJWCBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lLCBmb2xsb3dlZCBieSBJTkZJWCBvbiB0aGUgZmlyc3QgbGluZSwgd2l0aCBhbnkKKyMgYWRkaXRpb25hbCBsaW5lcyBub3Qgc2hvd2luZyBJTkZJWC4KK2Z1bmNfZWNob19pbmZpeF8xICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgJHJlcXVpcmVfdGVybV9jb2xvcnMKKworICAgIF9HX2luZml4PSQxOyBzaGlmdAorICAgIF9HX2luZGVudD0kX0dfaW5maXgKKyAgICBfR19wcmVmaXg9IiRwcm9nbmFtZTogJF9HX2luZml4OiAiCisgICAgX0dfbWVzc2FnZT0kKgorCisgICAgIyBTdHJpcCBjb2xvciBlc2NhcGUgc2VxdWVuY2VzIGJlZm9yZSBjb3VudGluZyBwcmludGFibGUgbGVuZ3RoCisgICAgZm9yIF9HX3RjIGluICIkdGNfcmVzZXQiICIkdGNfYm9sZCIgIiR0Y19zdGFuZG91dCIgIiR0Y19yZWQiICIkdGNfZ3JlZW4iICIkdGNfYmx1ZSIgIiR0Y19jeWFuIgorICAgIGRvCisgICAgICB0ZXN0IC1uICIkX0dfdGMiICYmIHsKKyAgICAgICAgX0dfZXNjX3RjPWAkYnNfZWNobyAiJF9HX3RjIiB8IHNlZCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorICAgICAgICBfR19pbmRlbnQ9YCRic19lY2hvICIkX0dfaW5kZW50IiB8IHNlZCAic3wkX0dfZXNjX3RjfHxnImAKKyAgICAgIH0KKyAgICBkb25lCisgICAgX0dfaW5kZW50PSIkcHJvZ25hbWU6ICJgZWNobyAiJF9HX2luZGVudCIgfCBzZWQgJ3N8LnwgfGcnYCIgICIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKKworICAgIGZ1bmNfZWNob19pbmZpeF8xX0lGUz0kSUZTCisgICAgSUZTPSRubAorICAgIGZvciBfR19saW5lIGluICRfR19tZXNzYWdlOyBkbworICAgICAgSUZTPSRmdW5jX2VjaG9faW5maXhfMV9JRlMKKyAgICAgICRic19lY2hvICIkX0dfcHJlZml4JHRjX2JvbGQkX0dfbGluZSR0Y19yZXNldCIgPiYyCisgICAgICBfR19wcmVmaXg9JF9HX2luZGVudAorICAgIGRvbmUKKyAgICBJRlM9JGZ1bmNfZWNob19pbmZpeF8xX0lGUworfQorCisKKyMgZnVuY19lcnJvciBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfZXJyb3IgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICAkcmVxdWlyZV90ZXJtX2NvbG9ycworCisgICAgZnVuY19lY2hvX2luZml4XzEgIiAgJHRjX3N0YW5kb3V0JHt0Y19yZWR9ZXJyb3IkdGNfcmVzZXQiICIkKiIgPiYyCit9CisKKworIyBmdW5jX2ZhdGFsX2Vycm9yIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfZXJyb3IgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2Vycm9yICIkKiIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKK30KKworCisjIGZ1bmNfZ3JlcCBFWFBSRVNTSU9OIEZJTEVOQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgRVhQUkVTU0lPTiBtYXRjaGVzIGFueSBsaW5lIG9mIEZJTEVOQU1FLCB3aXRob3V0IG91dHB1dC4KK2Z1bmNfZ3JlcCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICRHUkVQICIkMSIgIiQyIiA+L2Rldi9udWxsIDI+JjEKK30KKworCisjIGZ1bmNfbGVuIFNUUklORworIyAtLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfbGVuX3Jlc3VsdCB0byB0aGUgbGVuZ3RoIG9mIFNUUklORy4gU1RSSU5HIG1heSBub3QKKyMgc3RhcnQgd2l0aCBhIGh5cGhlbi4KKyAgdGVzdCAteiAiJF9HX0hBVkVfWFNJX09QUyIgXAorICAgICYmIChldmFsICd4PWEvYi9jOworICAgICAgdGVzdCA1YWEvYmIvY2MgPSAiJHsjeH0ke3glJS8qfSR7eCUvKn0ke3gjKi99JHt4IyMqL30iJykgMj4vZGV2L251bGwgXAorICAgICYmIF9HX0hBVkVfWFNJX09QUz15ZXMKKworaWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KKyAgZXZhbCAnZnVuY19sZW4gKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGZ1bmNfbGVuX3Jlc3VsdD0keyMxfQorICB9JworZWxzZQorICBmdW5jX2xlbiAoKQorICB7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19sZW5fcmVzdWx0PWBleHByICIkMSIgOiAiLioiIDI+L2Rldi9udWxsIHx8IGVjaG8gJG1heF9jbWRfbGVuYAorICB9CitmaQorCisKKyMgZnVuY19ta2Rpcl9wIERJUkVDVE9SWS1QQVRICisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIHN1cmUgdGhlIGVudGlyZSBwYXRoIHRvIERJUkVDVE9SWS1QQVRIIGlzIGF2YWlsYWJsZS4KK2Z1bmNfbWtkaXJfcCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIF9HX2RpcmVjdG9yeV9wYXRoPSQxCisgICAgX0dfZGlyX2xpc3Q9CisKKyAgICBpZiB0ZXN0IC1uICIkX0dfZGlyZWN0b3J5X3BhdGgiICYmIHRlc3QgOiAhPSAiJG9wdF9kcnlfcnVuIjsgdGhlbgorCisgICAgICAjIFByb3RlY3QgZGlyZWN0b3J5IG5hbWVzIHN0YXJ0aW5nIHdpdGggJy0nCisgICAgICBjYXNlICRfR19kaXJlY3RvcnlfcGF0aCBpbgorICAgICAgICAtKikgX0dfZGlyZWN0b3J5X3BhdGg9Li8kX0dfZGlyZWN0b3J5X3BhdGggOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBXaGlsZSBzb21lIHBvcnRpb24gb2YgRElSIGRvZXMgbm90IHlldCBleGlzdC4uLgorICAgICAgd2hpbGUgdGVzdCAhIC1kICIkX0dfZGlyZWN0b3J5X3BhdGgiOyBkbworICAgICAgICAjIC4uLm1ha2UgYSBsaXN0IGluIHRvcG1vc3QgZmlyc3Qgb3JkZXIuICBVc2UgYSBjb2xvbiBkZWxpbWl0ZWQKKwkjIGxpc3QgaW5jYXNlIHNvbWUgcG9ydGlvbiBvZiBwYXRoIGNvbnRhaW5zIHdoaXRlc3BhY2UuCisgICAgICAgIF9HX2Rpcl9saXN0PSRfR19kaXJlY3RvcnlfcGF0aDokX0dfZGlyX2xpc3QKKworICAgICAgICAjIElmIHRoZSBsYXN0IHBvcnRpb24gYWRkZWQgaGFzIG5vIHNsYXNoIGluIGl0LCB0aGUgbGlzdCBpcyBkb25lCisgICAgICAgIGNhc2UgJF9HX2RpcmVjdG9yeV9wYXRoIGluICovKikgOzsgKikgYnJlYWsgOzsgZXNhYworCisgICAgICAgICMgLi4ub3RoZXJ3aXNlIHRocm93IGF3YXkgdGhlIGNoaWxkIGRpcmVjdG9yeSBhbmQgbG9vcAorICAgICAgICBfR19kaXJlY3RvcnlfcGF0aD1gJEVDSE8gIiRfR19kaXJlY3RvcnlfcGF0aCIgfCAkU0VEIC1lICIkc2VkX2Rpcm5hbWUiYAorICAgICAgZG9uZQorICAgICAgX0dfZGlyX2xpc3Q9YCRFQ0hPICIkX0dfZGlyX2xpc3QiIHwgJFNFRCAnc3w6KiR8fCdgCisKKyAgICAgIGZ1bmNfbWtkaXJfcF9JRlM9JElGUzsgSUZTPToKKyAgICAgIGZvciBfR19kaXIgaW4gJF9HX2Rpcl9saXN0OyBkbworCUlGUz0kZnVuY19ta2Rpcl9wX0lGUworICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSAnRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcworICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAorICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQorICAgICAgICAkTUtESVIgIiRfR19kaXIiIDI+L2Rldi9udWxsIHx8IDoKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kZnVuY19ta2Rpcl9wX0lGUworCisgICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCisgICAgICB0ZXN0IC1kICIkX0dfZGlyZWN0b3J5X3BhdGgiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSAnJDEnIgogICAgIGZpCi0gICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRiYXNlbmFtZSJgCi19ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KK30KIAogCi0jIGZ1bmNfc3RyaXBuYW1lIHByZWZpeCBzdWZmaXggbmFtZQotIyBzdHJpcCBQUkVGSVggYW5kIFNVRkZJWCBvZmYgb2YgTkFNRS4KLSMgUFJFRklYIGFuZCBTVUZGSVggbXVzdCBub3QgY29udGFpbiBnbG9iYmluZyBvciByZWdleCBzcGVjaWFsCi0jIGNoYXJhY3RlcnMsIGhhc2hlcywgcGVyY2VudCBzaWducywgYnV0IFNVRkZJWCBtYXkgY29udGFpbiBhIGxlYWRpbmcKLSMgZG90IChpbiB3aGljaCBjYXNlIHRoYXQgbWF0Y2hlcyBvbmx5IGEgZG90KS4KLSMgZnVuY19zdHJpcF9zdWZmaXggcHJlZml4IG5hbWUKLWZ1bmNfc3RyaXBuYW1lICgpCisjIGZ1bmNfbWt0ZW1wZGlyIFtCQVNFTkFNRV0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZworIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgorIyBnaXZlbiwgQkFTRU5BTUUgaXMgdGhlIGJhc2VuYW1lIGZvciB0aGF0IGRpcmVjdG9yeS4KK2Z1bmNfbWt0ZW1wZGlyICgpCiB7Ci0gICAgY2FzZSAkezJ9IGluCi0gICAgICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlXFxcXCR7Mn1cJCUlImA7OwotICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OwotICAgIGVzYWMKLX0gIyBmdW5jX3N0cmlwbmFtZSBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKyAgICAkZGVidWdfY21kCiAKKyAgICBfR190ZW1wbGF0ZT0ke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfQogCi0jIFRoZXNlIFNFRCBzY3JpcHRzIHByZXN1cHBvc2UgYW4gYWJzb2x1dGUgcGF0aCB3aXRoIGEgdHJhaWxpbmcgc2xhc2guCi1wYXRoY2FyPSdzLF4vXChbXi9dKlwpLiokLFwxLCcKLXBhdGhjZHI9J3MsXi9bXi9dKiwsJwotcmVtb3ZlZG90cGFydHM9Jzpkb3RzbAotCQlzQC9cLi9AL0BnCi0JCXQgZG90c2wKLQkJcywvXC4kLC8sJwotY29sbGFwc2VzbGFzaGVzPSdzQC9cezEsXH1AL0BnJwotZmluYWxzbGFzaD0ncywvKiQsLywnCisgICAgaWYgdGVzdCA6ID0gIiRvcHRfZHJ5X3J1biI7IHRoZW4KKyAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCisgICAgICBfR190bXBkaXI9JF9HX3RlbXBsYXRlLSQkCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBfR190bXBkaXI9YG1rdGVtcCAtZCAiJF9HX3RlbXBsYXRlLVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKKworICAgICAgaWYgdGVzdCAhIC1kICIkX0dfdG1wZGlyIjsgdGhlbgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgX0dfdG1wZGlyPSRfR190ZW1wbGF0ZS0ke1JBTkRPTS0wfSQkCisKKyAgICAgICAgZnVuY19ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorICAgICAgICB1bWFzayAwMDc3CisgICAgICAgICRNS0RJUiAiJF9HX3RtcGRpciIKKyAgICAgICAgdW1hc2sgJGZ1bmNfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRfR190bXBkaXIiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGNyZWF0ZSB0ZW1wb3JhcnkgZGlyZWN0b3J5ICckX0dfdG1wZGlyJyIKKyAgICBmaQorCisgICAgJEVDSE8gIiRfR190bXBkaXIiCit9CisKIAogIyBmdW5jX25vcm1hbF9hYnNwYXRoIFBBVEgKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIFJlbW92ZSBkb3VibGVkLXVwIGFuZCB0cmFpbGluZyBzbGFzaGVzLCAiLiIgcGF0aCBjb21wb25lbnRzLAogIyBhbmQgY2FuY2VsIG91dCBhbnkgIi4uIiBwYXRoIGNvbXBvbmVudHMgaW4gUEFUSCBhZnRlciBtYWtpbmcKICMgaXQgYW4gYWJzb2x1dGUgcGF0aC4KLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKIGZ1bmNfbm9ybWFsX2Fic3BhdGggKCkKIHsKLSAgIyBTdGFydCBmcm9tIHJvb3QgZGlyIGFuZCByZWFzc2VtYmxlIHRoZSBwYXRoLgotICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0KLSAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD0kMQotICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0KLSAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCBpbgotICAgICIiKQotICAgICAgIyBFbXB0eSBwYXRoLCB0aGF0IGp1c3QgbWVhbnMgJGN3ZC4KLSAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCi0gICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0gICAgICByZXR1cm4KLSAgICA7OwotICAgICMgVGhlIG5leHQgdGhyZWUgZW50cmllcyBhcmUgdXNlZCB0byBzcG90IGEgcnVuIG9mIHByZWNpc2VseQotICAgICMgdHdvIGxlYWRpbmcgc2xhc2hlcyB3aXRob3V0IHVzaW5nIG5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzZXM7Ci0gICAgIyB3ZSB0YWtlIGFkdmFudGFnZSBvZiBjYXNlJ3MgZmlyc3QtbWF0Y2ggYmVoYXZpb3VyLgotICAgIC8vLyopCi0gICAgICAjIFVudXN1YWwgZm9ybSBvZiBhYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgotICAgIDs7Ci0gICAgLy8qKQotICAgICAgIyBOb3QgbmVjZXNzYXJpbHkgYW4gb3JkaW5hcnkgcGF0aDsgUE9TSVggcmVzZXJ2ZXMgbGVhZGluZyAnLy8nCi0gICAgICAjIGFuZCBmb3IgZXhhbXBsZSBDeWd3aW4gdXNlcyBpdCB0byBhY2Nlc3MgcmVtb3RlIGZpbGUgc2hhcmVzCi0gICAgICAjIG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYgZm91bmQuCi0gICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZT0vCi0gICAgOzsKLSAgICAvKikKLSAgICAgICMgQWJzb2x1dGUgcGF0aCwgZG8gbm90aGluZy4KLSAgICA7OwotICAgICopCi0gICAgICAjIFJlbGF0aXZlIHBhdGgsIHByZXBlbmQgJGN3ZC4KLSAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YHB3ZGAvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgKLSAgICA7OwotICBlc2FjCi0gICMgQ2FuY2VsIG91dCBhbGwgdGhlIHNpbXBsZSBzdHVmZiB0byBzYXZlIGl0ZXJhdGlvbnMuICBXZSBhbHNvIHdhbnQKLSAgIyB0aGUgcGF0aCB0byBlbmQgd2l0aCBhIHNsYXNoIGZvciBlYXNlIG9mIHBhcnNpbmcsIHNvIG1ha2Ugc3VyZQotICAjIHRoZXJlIGlzIG9uZSAoYW5kIG9ubHkgb25lKSBoZXJlLgotICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCi0gICAgICAgIC1lICIkcmVtb3ZlZG90cGFydHMiIC1lICIkY29sbGFwc2VzbGFzaGVzIiAtZSAiJGZpbmFsc2xhc2giYAotICB3aGlsZSA6OyBkbwotICAgICMgUHJvY2Vzc2VkIGl0IGFsbCB5ZXQ/Ci0gICAgaWYgdGVzdCAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiID0gLyA7IHRoZW4KLSAgICAgICMgSWYgd2UgYXNjZW5kZWQgdG8gdGhlIHJvb3QgdXNpbmcgIi4uIiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eSBub3cuCi0gICAgICBpZiB0ZXN0IC16ICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiIDsgdGhlbgotICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0vCi0gICAgICBmaQotICAgICAgYnJlYWsKLSAgICBmaQotICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAotICAgICAgICAtZSAiJHBhdGhjYXIiYAotICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKLSAgICAgICAgLWUgIiRwYXRoY2RyImAKLSAgICAjIEZpZ3VyZSBvdXQgd2hhdCB0byBkbyB3aXRoIGl0Ci0gICAgY2FzZSAkZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IGluCisgICAgJGRlYnVnX2NtZAorCisgICAgIyBUaGVzZSBTRUQgc2NyaXB0cyBwcmVzdXBwb3NlIGFuIGFic29sdXRlIHBhdGggd2l0aCBhIHRyYWlsaW5nIHNsYXNoLgorICAgIF9HX3BhdGhjYXI9J3N8Xi9cKFteL10qXCkuKiR8XDF8JworICAgIF9HX3BhdGhjZHI9J3N8Xi9bXi9dKnx8JworICAgIF9HX3JlbW92ZWRvdHBhcnRzPSc6ZG90c2wKKwkJc3wvXC4vfC98ZworCQl0IGRvdHNsCisJCXN8L1wuJHwvfCcKKyAgICBfR19jb2xsYXBzZXNsYXNoZXM9J3N8L1x7MSxcfXwvfGcnCisgICAgX0dfZmluYWxzbGFzaD0nc3wvKiR8L3wnCisKKyAgICAjIFN0YXJ0IGZyb20gcm9vdCBkaXIgYW5kIHJlYXNzZW1ibGUgdGhlIHBhdGguCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9CisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD0kMQorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPQorICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGggaW4KICAgICAgICIiKQotICAgICAgICAjIFRyYWlsaW5nIGVtcHR5IHBhdGggY29tcG9uZW50LCBpZ25vcmUgaXQuCi0gICAgICA7OwotICAgICAgLi4pCi0gICAgICAgICMgUGFyZW50IGRpcjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9uZW50IGZyb20gcmVzdWx0LgotICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKLSAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQKLSAgICAgIDs7Ci0gICAgICAqKQotICAgICAgICAjIEFjdHVhbCBwYXRoIGNvbXBvbmVudCwgYXBwZW5kIGl0LgotICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudAotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLSAgIyBSZXN0b3JlIGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCi0gIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAotfQotCi0jIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCi0jIGdlbmVyYXRlcyBhIHJlbGF0aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElSLCB3aXRoIGEgdHJhaWxpbmcKLSMgc2xhc2ggaWYgbm9uLWVtcHR5LCBzdWl0YWJsZSBmb3IgaW1tZWRpYXRlbHkgYXBwZW5kaW5nIGEgZmlsZW5hbWUKLSMgd2l0aG91dCBuZWVkaW5nIHRvIGFwcGVuZCBhIHNlcGFyYXRvci4KLSMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgotZnVuY19yZWxhdGl2ZV9wYXRoICgpCi17Ci0gIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Ci0gIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQxIgotICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKLSAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCi0gIGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAotCi0gICMgQXNjZW5kIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb20gbGliZGlyCi0gIHdoaWxlIDo7IGRvCi0gICAgIyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGEgcHJlZml4IG9mIGJpbmRpcgotICAgIGNhc2UgJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIGluCi0gICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCi0gICAgICAgICMgZm91bmQgYW4gZXhhY3QgbWF0Y2gKLSAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9Ci0gICAgICAgIGJyZWFrCisgICAgICAgICMgRW1wdHkgcGF0aCwgdGhhdCBqdXN0IG1lYW5zICRjd2QuCisgICAgICAgIGZ1bmNfc3RyaXBuYW1lICcnICcvJyAiYHB3ZGAiCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgcmV0dXJuCiAgICAgICAgIDs7Ci0gICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIqKQotICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4Ci0gICAgICAgIGZ1bmNfc3RyaXBuYW1lICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIiCi0gICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCi0gICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCi0gICAgICAgIGZpCi0gICAgICAgIGJyZWFrCisgICAgICAjIFRoZSBuZXh0IHRocmVlIGVudHJpZXMgYXJlIHVzZWQgdG8gc3BvdCBhIHJ1biBvZiBwcmVjaXNlbHkKKyAgICAgICMgdHdvIGxlYWRpbmcgc2xhc2hlcyB3aXRob3V0IHVzaW5nIG5lZ2F0ZWQgY2hhcmFjdGVyIGNsYXNzZXM7CisgICAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCisgICAgICAvLy8qKQorICAgICAgICAjIFVudXN1YWwgZm9ybSBvZiBhYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgICAgICA7OworICAgICAgLy8qKQorICAgICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBwYXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKKyAgICAgICAgIyBhbmQgZm9yIGV4YW1wbGUgQ3lnd2luIHVzZXMgaXQgdG8gYWNjZXNzIHJlbW90ZSBmaWxlIHNoYXJlcworICAgICAgICAjIG92ZXIgQ0lGUy9TTUIsIHNvIHdlIGNvbnNlcnZlIGEgbGVhZGluZyBkb3VibGUgc2xhc2ggaWYgZm91bmQuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KKyAgICAgICAgOzsKKyAgICAgIC8qKQorICAgICAgICAjIEFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCiAgICAgICAgIDs7CiAgICAgICAqKQotICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyCi0gICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSR7ZnVuY19kaXJuYW1lX3Jlc3VsdH0KLSAgICAgICAgaWYgdGVzdCAieCRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgPSB4IDsgdGhlbgotICAgICAgICAgICMgSGF2ZSB0byBkZXNjZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IQotICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKLSAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIKLSAgICAgICAgICBicmVhawotICAgICAgICBmaQotICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgICMgUmVsYXRpdmUgcGF0aCwgcHJlcGVuZCAkY3dkLgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWBwd2RgLyRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoCiAgICAgICAgIDs7CiAgICAgZXNhYwotICBkb25lCiAKLSAgIyBOb3cgY2FsY3VsYXRlIHBhdGg7IHRha2UgY2FyZSB0byBhdm9pZCBkb3VibGluZy11cCBzbGFzaGVzLgotICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgotICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgZnVuY19zdHJpcG5hbWUgJy8nICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkIgotICBpZiB0ZXN0ICJ4JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIgIT0geCA7IHRoZW4KLSAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSR7ZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdH0vJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9Ci0gIGZpCi0KLSAgIyBOb3JtYWxpc2F0aW9uLiBJZiBiaW5kaXIgaXMgbGliZGlyLCByZXR1cm4gZW1wdHkgc3RyaW5nLAotICAjIGVsc2UgcmVsYXRpdmUgcGF0aCBlbmRpbmcgd2l0aCBhIHNsYXNoOyBlaXRoZXIgd2F5LCB0YXJnZXQKLSAgIyBmaWxlIG5hbWUgY2FuIGJlIGRpcmVjdGx5IGFwcGVuZGVkLgotICBpZiB0ZXN0ICEgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgotICAgIGZ1bmNfc3RyaXBuYW1lICcuLycgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0LyIKLSAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLSAgZmkKKyAgICAjIENhbmNlbCBvdXQgYWxsIHRoZSBzaW1wbGUgc3R1ZmYgdG8gc2F2ZSBpdGVyYXRpb25zLiAgV2UgYWxzbyB3YW50CisgICAgIyB0aGUgcGF0aCB0byBlbmQgd2l0aCBhIHNsYXNoIGZvciBlYXNlIG9mIHBhcnNpbmcsIHNvIG1ha2Ugc3VyZQorICAgICMgdGhlcmUgaXMgb25lIChhbmQgb25seSBvbmUpIGhlcmUuCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAgIC1lICIkX0dfcmVtb3ZlZG90cGFydHMiIC1lICIkX0dfY29sbGFwc2VzbGFzaGVzIiAtZSAiJF9HX2ZpbmFsc2xhc2giYAorICAgIHdoaWxlIDo7IGRvCisgICAgICAjIFByb2Nlc3NlZCBpdCBhbGwgeWV0PworICAgICAgaWYgdGVzdCAvID0gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIjsgdGhlbgorICAgICAgICAjIElmIHdlIGFzY2VuZGVkIHRvIHRoZSByb290IHVzaW5nICIuLiIgdGhlIHJlc3VsdCBtYXkgYmUgZW1wdHkgbm93LgorICAgICAgICBpZiB0ZXN0IC16ICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9LworICAgICAgICBmaQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAgIC1lICIkX0dfcGF0aGNhciJgCisgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgICAgLWUgIiRfR19wYXRoY2RyImAKKyAgICAgICMgRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQKKyAgICAgIGNhc2UgJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudCBpbgorICAgICAgICAiIikKKyAgICAgICAgICAjIFRyYWlsaW5nIGVtcHR5IHBhdGggY29tcG9uZW50LCBpZ25vcmUgaXQuCisgICAgICAgICAgOzsKKyAgICAgICAgLi4pCisgICAgICAgICAgIyBQYXJlbnQgZGlyOyBzdHJpcCBsYXN0IGFzc2VtYmxlZCBjb21wb25lbnQgZnJvbSByZXN1bHQuCisgICAgICAgICAgZnVuY19kaXJuYW1lICIkZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQiCisgICAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICMgQWN0dWFsIHBhdGggY29tcG9uZW50LCBhcHBlbmQgaXQuCisgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQgIi8kZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50IgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgICMgUmVzdG9yZSBsZWFkaW5nIGRvdWJsZS1zbGFzaCBpZiBvbmUgd2FzIGZvdW5kIG9uIGVudHJ5LgorICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAogfQogCi0jIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKLWZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRwcm9ncGF0aCIKLXByb2duYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCi0jIE1ha2Ugc3VyZSB3ZSBoYXZlIGFuIGFic29sdXRlIHBhdGggZm9yIHJlZXhlY3V0aW9uOgotY2FzZSAkcHJvZ3BhdGggaW4KLSAgW1xcL10qfFtBLVphLXpdOlxcKikgOzsKLSAgKltcXC9dKikKLSAgICAgcHJvZ2Rpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAotICAgICBwcm9nZGlyPWBjZCAiJHByb2dkaXIiICYmIHB3ZGAKLSAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKLSAgICAgOzsKLSAgKikKLSAgICAgc2F2ZV9JRlM9IiRJRlMiCi0gICAgIElGUz0ke1BBVEhfU0VQQVJBVE9SLTp9Ci0gICAgIGZvciBwcm9nZGlyIGluICRQQVRIOyBkbwotICAgICAgIElGUz0iJHNhdmVfSUZTIgotICAgICAgIHRlc3QgLXggIiRwcm9nZGlyLyRwcm9nbmFtZSIgJiYgYnJlYWsKLSAgICAgZG9uZQotICAgICBJRlM9IiRzYXZlX0lGUyIKLSAgICAgdGVzdCAtbiAiJHByb2dkaXIiIHx8IHByb2dkaXI9YHB3ZGAKLSAgICAgcHJvZ3BhdGg9IiRwcm9nZGlyLyRwcm9nbmFtZSIKLSAgICAgOzsKLWVzYWMKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCi1zZWRfcXVvdGVfc3Vic3Q9J3MvXChbYCIkXFxdXCkvXFxcMS9nJwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLWRvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFsiYFxcXVwpL1xcXDEvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgdHVybnMgYSBzdHJpbmcgaW50byBhIHJlZ2V4IG1hdGNoaW5nIGZvciB0aGUKLSMgc3RyaW5nIGxpdGVyYWxseS4KLXNlZF9tYWtlX2xpdGVyYWxfcmVnZXg9J3MsW10uW14kXFwqXC9dLFxcJixnJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBjb252ZXJ0cyBhIHczMiBmaWxlIG5hbWUgb3IgcGF0aAotIyB3aGljaCBjb250YWlucyBmb3J3YXJkIHNsYXNoZXMsIGludG8gb25lIHRoYXQgY29udGFpbnMKLSMgKGVzY2FwZWQpIGJhY2tzbGFzaGVzLiAgQSB2ZXJ5IG5haXZlIGltcGxlbWVudGF0aW9uLgotbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeT0nc3xcXFxcKnxcXHxnO3N8L3xcXHxnO3N8XFx8XFxcXHxnJwotCi0jIFJlLWBcJyBwYXJhbWV0ZXIgZXhwYW5zaW9ucyBpbiBvdXRwdXQgb2YgZG91YmxlX3F1b3RlX3N1YnN0IHRoYXQgd2VyZQotIyBgXCctZWQgaW4gaW5wdXQgdG8gdGhlIHNhbWUuICBJZiBhbiBvZGQgbnVtYmVyIG9mIGBcJyBwcmVjZWRlZCBhICckJwotIyBpbiBpbnB1dCB0byBkb3VibGVfcXVvdGVfc3Vic3QsIHRoYXQgJyQnIHdhcyBwcm90ZWN0ZWQgZnJvbSBleHBhbnNpb24uCi0jIFNpbmNlIGVhY2ggaW5wdXQgYFwnIGlzIG5vdyB0d28gYFwncywgbG9vayBmb3IgYW55IG51bWJlciBvZiBydW5zIG9mCi0jIGZvdXIgYFwncyBmb2xsb3dlZCBieSB0d28gYFwncyBhbmQgdGhlbiBhICckJy4gIGBcJyB0aGF0ICckJy4KLWJzPSdcXCcKLWJzMj0nXFxcXCcKLWJzND0nXFxcXFxcXFwnCi1kb2xsYXI9J1wkJwotc2VkX2RvdWJsZV9iYWNrc2xhc2g9IlwKLSAgcy8kYnM0LyZcXAotL2cKLSAgcy9eJGJzMiRkb2xsYXIvJGJzJi8KLSAgcy9cXChbXiRic11cXCkkYnMyJGRvbGxhci9cXDEkYnMyJGJzJGRvbGxhci9nCi0gIHMvXG4vL2ciCi0KLSMgU3RhbmRhcmQgb3B0aW9uczoKLW9wdF9kcnlfcnVuPWZhbHNlCi1vcHRfaGVscD1mYWxzZQotb3B0X3F1aWV0PWZhbHNlCi1vcHRfdmVyYm9zZT1mYWxzZQotb3B0X3dhcm5pbmc9OgotCi0jIGZ1bmNfZWNobyBhcmcuLi4KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSwgYWxvbmcgd2l0aCB0aGUgY3VycmVudCBtb2RlCi0jIG5hbWUgaWYgaXQgaGFzIGJlZW4gc2V0IHlldC4KLWZ1bmNfZWNobyAoKQorIyBmdW5jX25vdHF1aWV0IEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIG9ubHkgd2hlbiBub3QgaW4gcXVpZXQgbW9kZS4KK2Z1bmNfbm90cXVpZXQgKCkKIHsKLSAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSQqIgotfQorICAgICRkZWJ1Z19jbWQKIAotIyBmdW5jX3ZlcmJvc2UgYXJnLi4uCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCi1mdW5jX3ZlcmJvc2UgKCkKLXsKLSAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICR7MSsiJEAifQorICAgICRvcHRfcXVpZXQgfHwgZnVuY19lY2hvICR7MSsiJEAifQogCiAgICAgIyBBIGJ1ZyBpbiBiYXNoIGhhbHRzIHRoZSBzY3JpcHQgaWYgdGhlIGxhc3QgbGluZSBvZiBhIGZ1bmN0aW9uCiAgICAgIyBmYWlscyB3aGVuIHNldCAtZSBpcyBpbiBmb3JjZSwgc28gd2UgbmVlZCBhbm90aGVyIGNvbW1hbmQgdG8KQEAgLTQ1NCw0NTAgKzkxNSwxMTIyIEBACiAgICAgOgogfQogCi0jIGZ1bmNfZWNob19hbGwgYXJnLi4uCi0jIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCi1mdW5jX2VjaG9fYWxsICgpCi17Ci0gICAgJEVDSE8gIiQqIgotfQogCi0jIGZ1bmNfZXJyb3IgYXJnLi4uCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCi1mdW5jX2Vycm9yICgpCisjIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IHRvIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gU1JDRElSIHRvIERTVERJUi4KK2Z1bmNfcmVsYXRpdmVfcGF0aCAoKQogewotICAgICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9IiR7MSsiJEAifSAxPiYyCi19CisgICAgJGRlYnVnX2NtZAogCi0jIGZ1bmNfd2FybmluZyBhcmcuLi4KLSMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgotZnVuY193YXJuaW5nICgpCi17Ci0gICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9d2FybmluZzogIiR7MSsiJEAifSAxPiYyCisgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0KKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMSIKKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKyAgICBmdW5jX25vcm1hbF9hYnNwYXRoICIkMiIKKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGJpbmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKIAotICAgICMgYmFzaCBidWcgYWdhaW46CisgICAgIyBBc2NlbmQgdGhlIHRyZWUgc3RhcnRpbmcgZnJvbSBsaWJkaXIKKyAgICB3aGlsZSA6OyBkbworICAgICAgIyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGEgcHJlZml4IG9mIGJpbmRpcgorICAgICAgY2FzZSAkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIgaW4KKyAgICAgICAgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyKQorICAgICAgICAgICMgZm91bmQgYW4gZXhhY3QgbWF0Y2gKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0KKyAgICAgICAgICBicmVhaworICAgICAgICAgIDs7CisgICAgICAgICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciopCisgICAgICAgICAgIyBmb3VuZCBhIG1hdGNoaW5nIHByZWZpeAorICAgICAgICAgIGZ1bmNfc3RyaXBuYW1lICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIiCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorICAgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCisgICAgICAgICAgZmkKKyAgICAgICAgICBicmVhaworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgZnVuY19kaXJuYW1lICRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcgorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyIjsgdGhlbgorICAgICAgICAgICAgIyBIYXZlIHRvIGRlc2NlbmQgYWxsIHRoZSB3YXkgdG8gdGhlIHJvb3QhCisgICAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgZmkKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICAjIE5vdyBjYWxjdWxhdGUgcGF0aDsgdGFrZSBjYXJlIHRvIGF2b2lkIGRvdWJsaW5nLXVwIHNsYXNoZXMuCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX3N0cmlwbmFtZSAnLycgJy8nICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQiCisgICAgaWYgdGVzdCAtbiAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7IHRoZW4KKyAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQgIi8kZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorICAgIGZpCisKKyAgICAjIE5vcm1hbGlzYXRpb24uIElmIGJpbmRpciBpcyBsaWJkaXIsIHJldHVybiAnLicgZWxzZSByZWxhdGl2ZSBwYXRoLgorICAgIGlmIHRlc3QgLW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorICAgICAgZnVuY19zdHJpcG5hbWUgJy4vJyAnJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiCisgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmaQorCisgICAgdGVzdCAtbiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiIHx8IGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9LgorCiAgICAgOgogfQogCi0jIGZ1bmNfZmF0YWxfZXJyb3IgYXJnLi4uCi0jIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGFuZCBleGl0LgotZnVuY19mYXRhbF9lcnJvciAoKQotewotICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9Ci0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCi19CiAKLSMgZnVuY19mYXRhbF9oZWxwIGFyZy4uLgotIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQotIyBhIGhlbHAgaGludCwgYW5kIGV4aXQuCi1mdW5jX2ZhdGFsX2hlbHAgKCkKLXsKLSAgICBmdW5jX2Vycm9yICR7MSsiJEAifQotICAgIGZ1bmNfZmF0YWxfZXJyb3IgIiRoZWxwIgotfQotaGVscD0iVHJ5IFxgJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAgIyMgZGVmYXVsdAotCi0KLSMgZnVuY19ncmVwIGV4cHJlc3Npb24gZmlsZW5hbWUKLSMgQ2hlY2sgd2hldGhlciBFWFBSRVNTSU9OIG1hdGNoZXMgYW55IGxpbmUgb2YgRklMRU5BTUUsIHdpdGhvdXQgb3V0cHV0LgotZnVuY19ncmVwICgpCi17Ci0gICAgJEdSRVAgIiQxIiAiJDIiID4vZGV2L251bGwgMj4mMQotfQotCi0KLSMgZnVuY19ta2Rpcl9wIGRpcmVjdG9yeS1wYXRoCi0jIE1ha2Ugc3VyZSB0aGUgZW50aXJlIHBhdGggdG8gRElSRUNUT1JZLVBBVEggaXMgYXZhaWxhYmxlLgotZnVuY19ta2Rpcl9wICgpCi17Ci0gICAgbXlfZGlyZWN0b3J5X3BhdGg9IiQxIgotICAgIG15X2Rpcl9saXN0PQotCi0gICAgaWYgdGVzdCAtbiAiJG15X2RpcmVjdG9yeV9wYXRoIiAmJiB0ZXN0ICIkb3B0X2RyeV9ydW4iICE9ICI6IjsgdGhlbgotCi0gICAgICAjIFByb3RlY3QgZGlyZWN0b3J5IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nCi0gICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbgotICAgICAgICAtKikgbXlfZGlyZWN0b3J5X3BhdGg9Ii4vJG15X2RpcmVjdG9yeV9wYXRoIiA7OwotICAgICAgZXNhYwotCi0gICAgICAjIFdoaWxlIHNvbWUgcG9ydGlvbiBvZiBESVIgZG9lcyBub3QgeWV0IGV4aXN0Li4uCi0gICAgICB3aGlsZSB0ZXN0ICEgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCI7IGRvCi0gICAgICAgICMgLi4ubWFrZSBhIGxpc3QgaW4gdG9wbW9zdCBmaXJzdCBvcmRlci4gIFVzZSBhIGNvbG9uIGRlbGltaXRlZAotCSMgbGlzdCBpbmNhc2Ugc29tZSBwb3J0aW9uIG9mIHBhdGggY29udGFpbnMgd2hpdGVzcGFjZS4KLSAgICAgICAgbXlfZGlyX2xpc3Q9IiRteV9kaXJlY3RvcnlfcGF0aDokbXlfZGlyX2xpc3QiCi0KLSAgICAgICAgIyBJZiB0aGUgbGFzdCBwb3J0aW9uIGFkZGVkIGhhcyBubyBzbGFzaCBpbiBpdCwgdGhlIGxpc3QgaXMgZG9uZQotICAgICAgICBjYXNlICRteV9kaXJlY3RvcnlfcGF0aCBpbiAqLyopIDs7ICopIGJyZWFrIDs7IGVzYWMKLQotICAgICAgICAjIC4uLm90aGVyd2lzZSB0aHJvdyBhd2F5IHRoZSBjaGlsZCBkaXJlY3RvcnkgYW5kIGxvb3AKLSAgICAgICAgbXlfZGlyZWN0b3J5X3BhdGg9YCRFQ0hPICIkbXlfZGlyZWN0b3J5X3BhdGgiIHwgJFNFRCAtZSAiJGRpcm5hbWUiYAotICAgICAgZG9uZQotICAgICAgbXlfZGlyX2xpc3Q9YCRFQ0hPICIkbXlfZGlyX2xpc3QiIHwgJFNFRCAncyw6KiQsLCdgCi0KLSAgICAgIHNhdmVfbWtkaXJfcF9JRlM9IiRJRlMiOyBJRlM9JzonCi0gICAgICBmb3IgbXlfZGlyIGluICRteV9kaXJfbGlzdDsgZG8KLQlJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgotICAgICAgICAjIG1rZGlyIGNhbiBmYWlsIHdpdGggYSBgRmlsZSBleGlzdCcgZXJyb3IgaWYgdHdvIHByb2Nlc3NlcwotICAgICAgICAjIHRyeSB0byBjcmVhdGUgb25lIG9mIHRoZSBkaXJlY3RvcmllcyBjb25jdXJyZW50bHkuICBEb24ndAotICAgICAgICAjIHN0b3AgaW4gdGhhdCBjYXNlIQotICAgICAgICAkTUtESVIgIiRteV9kaXIiIDI+L2Rldi9udWxsIHx8IDoKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJHNhdmVfbWtkaXJfcF9JRlMiCi0KLSAgICAgICMgQmFpbCBvdXQgaWYgd2UgKG9yIHNvbWUgb3RoZXIgcHJvY2VzcykgZmFpbGVkIHRvIGNyZWF0ZSBhIGRpcmVjdG9yeS4KLSAgICAgIHRlc3QgLWQgIiRteV9kaXJlY3RvcnlfcGF0aCIgfHwgXAotICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYWlsZWQgdG8gY3JlYXRlIFxgJDEnIgotICAgIGZpCi19Ci0KLQotIyBmdW5jX21rdGVtcGRpciBbc3RyaW5nXQotIyBNYWtlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSB0aGF0IHdvbid0IGNsYXNoIHdpdGggb3RoZXIgcnVubmluZwotIyBsaWJ0b29sIHByb2Nlc3NlcywgYW5kIGF2b2lkcyByYWNlIGNvbmRpdGlvbnMgaWYgcG9zc2libGUuICBJZgotIyBnaXZlbiwgU1RSSU5HIGlzIHRoZSBiYXNlbmFtZSBmb3IgdGhhdCBkaXJlY3RvcnkuCi1mdW5jX21rdGVtcGRpciAoKQotewotICAgIG15X3RlbXBsYXRlPSIke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfSIKLQotICAgIGlmIHRlc3QgIiRvcHRfZHJ5X3J1biIgPSAiOiI7IHRoZW4KLSAgICAgICMgUmV0dXJuIGEgZGlyZWN0b3J5IG5hbWUsIGJ1dCBkb24ndCBjcmVhdGUgaXQgaW4gZHJ5LXJ1biBtb2RlCi0gICAgICBteV90bXBkaXI9IiR7bXlfdGVtcGxhdGV9LSQkIgotICAgIGVsc2UKLQotICAgICAgIyBJZiBta3RlbXAgd29ya3MsIHVzZSB0aGF0IGZpcnN0IGFuZCBmb3JlbW9zdAotICAgICAgbXlfdG1wZGlyPWBta3RlbXAgLWQgIiR7bXlfdGVtcGxhdGV9LVhYWFhYWFhYIiAyPi9kZXYvbnVsbGAKLQotICAgICAgaWYgdGVzdCAhIC1kICIkbXlfdG1wZGlyIjsgdGhlbgotICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKLSAgICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgotCi0gICAgICAgIHNhdmVfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKLSAgICAgICAgdW1hc2sgMDA3NwotICAgICAgICAkTUtESVIgIiRteV90bXBkaXIiCi0gICAgICAgIHVtYXNrICRzYXZlX21rdGVtcGRpcl91bWFzawotICAgICAgZmkKLQotICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCi0gICAgICB0ZXN0IC1kICIkbXlfdG1wZGlyIiB8fCBcCi0gICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIgotICAgIGZpCi0KLSAgICAkRUNITyAiJG15X3RtcGRpciIKLX0KLQotCi0jIGZ1bmNfcXVvdGVfZm9yX2V2YWwgYXJnCi0jIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlci4KLSMgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHR3byB2YWx1ZXM6IEZVTkNfUVVPVEVfRk9SX0VWQUxfUkVTVUxUCi0jIGlzIGRvdWJsZS1xdW90ZWQsIHN1aXRhYmxlIGZvciBhIHN1YnNlcXVlbnQgZXZhbCwgd2hlcmVhcwotIyBGVU5DX1FVT1RFX0ZPUl9FVkFMX1VOUVVPVEVEX1JFU1VMVCBoYXMgbWVyZWx5IGFsbCBjaGFyYWN0ZXJzCi0jIHdoaWNoIGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZSBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCisjIGZ1bmNfcXVvdGVfZm9yX2V2YWwgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHcyB0byBiZSBldmFsZWQgbGF0ZXIuCisjIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0d28gdmFsdWVzOgorIyAgIGkpIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisjICAgICAgZG91YmxlLXF1b3RlZCwgc3VpdGFibGUgZm9yIGEgc3Vic2VxdWVudCBldmFsCisjICBpaSkgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQKKyMgICAgICBoYXMgYWxsIGNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUKKyMgICAgICBxdW90ZXMgYmFja3NsYXNoaWZpZWQuCiBmdW5jX3F1b3RlX2Zvcl9ldmFsICgpCiB7Ci0gICAgY2FzZSAkMSBpbgotICAgICAgKltcXFxgXCJcJF0qKQotCWZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAiJHNlZF9xdW90ZV9zdWJzdCJgIDs7Ci0gICAgICAqKQotICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD0iJDEiIDs7Ci0gICAgZXNhYworICAgICRkZWJ1Z19jbWQKIAotICAgIGNhc2UgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IGluCi0gICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKLSAgICAgICMgd29yZCBzcGxpdHRpbmcsIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGFuZCBhbmQgdmFyaWFibGUKLSAgICAgICMgZXhwYW5zaW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KLSAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5Ci0gICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgotICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0gICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSJcIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdFwiIgotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCIKLSAgICBlc2FjCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9CisgICAgd2hpbGUgdGVzdCAwIC1sdCAkIzsgZG8KKyAgICAgIGNhc2UgJDEgaW4KKyAgICAgICAgKltcXFxgXCJcJF0qKQorCSAgX0dfdW5xdW90ZWRfYXJnPWBwcmludGYgJyVzXG4nICIkMSIgfCRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OworICAgICAgICAqKQorICAgICAgICAgIF9HX3VucXVvdGVkX2FyZz0kMSA7OworICAgICAgZXNhYworICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0ICIgJF9HX3VucXVvdGVkX2FyZyIKKyAgICAgIGVsc2UKKyAgICAgICAgZnVuY19hcHBlbmQgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQgIiRfR191bnF1b3RlZF9hcmciCisgICAgICBmaQorCisgICAgICBjYXNlICRfR191bnF1b3RlZF9hcmcgaW4KKyAgICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGFjaGFyYWN0ZXJzIHRvIGRlbGF5CisgICAgICAgICMgd29yZCBzcGxpdHRpbmcsIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGFuZCB2YXJpYWJsZSBleHBhbnNpb24KKyAgICAgICAgIyBmb3IgYSBzdWJzZXF1ZW50IGV2YWwuCisgICAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorICAgICAgICAgIF9HX3F1b3RlZF9hcmc9XCIkX0dfdW5xdW90ZWRfYXJnXCIKKyAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgIF9HX3F1b3RlZF9hcmc9JF9HX3VucXVvdGVkX2FyZworCSAgOzsKKyAgICAgIGVzYWMKKworICAgICAgaWYgdGVzdCAtbiAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIgJF9HX3F1b3RlZF9hcmciCisgICAgICBlbHNlCisgICAgICAgIGZ1bmNfYXBwZW5kIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0ICIkX0dfcXVvdGVkX2FyZyIKKyAgICAgIGZpCisgICAgICBzaGlmdAorICAgIGRvbmUKIH0KIAogCi0jIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCBhcmcKKyMgZnVuY19xdW90ZV9mb3JfZXhwYW5kIEFSRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlcjsgc2FtZSBhcyBhYm92ZSwKICMgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgogZnVuY19xdW90ZV9mb3JfZXhwYW5kICgpCiB7CisgICAgJGRlYnVnX2NtZAorCiAgICAgY2FzZSAkMSBpbgogICAgICAgKltcXFxgXCJdKikKLQlteV9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEIFwKLQkgICAgLWUgIiRkb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworCV9HX2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgXAorCSAgICAtZSAiJHNlZF9kb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OwogICAgICAgKikKLSAgICAgICAgbXlfYXJnPSIkMSIgOzsKKyAgICAgICAgX0dfYXJnPSQxIDs7CiAgICAgZXNhYwogCi0gICAgY2FzZSAkbXlfYXJnIGluCisgICAgY2FzZSAkX0dfYXJnIGluCiAgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKICAgICAgICMgd29yZCBzcGxpdHRpbmcgYW5kIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KICAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CiAgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgogICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0gICAgICAgIG15X2FyZz0iXCIkbXlfYXJnXCIiCisgICAgICAgIF9HX2FyZz1cIiRfR19hcmdcIgogICAgICAgICA7OwogICAgIGVzYWMKIAotICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQ9IiRteV9hcmciCisgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdD0kX0dfYXJnCiB9CiAKIAotIyBmdW5jX3Nob3dfZXZhbCBjbWQgW2ZhaWxfZXhwXQotIyBVbmxlc3Mgb3B0X3NpbGVudCBpcyB0cnVlLCB0aGVuIG91dHB1dCBDTUQuICBUaGVuLCBpZiBvcHRfZHJ5cnVuIGlzCisjIGZ1bmNfc3RyaXBuYW1lIFBSRUZJWCBTVUZGSVggTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggZnJvbSBOQU1FLCBhbmQgc3RvcmUgaW4gZnVuY19zdHJpcG5hbWVfcmVzdWx0LgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgoraWYgdGVzdCB5ZXMgPSAiJF9HX0hBVkVfWFNJX09QUyI7IHRoZW4KKyAgZXZhbCAnZnVuY19zdHJpcG5hbWUgKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKKyAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSB2YXJpYWJsZSBmaXJzdC4KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JDMKKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiQxIn0KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiQyIn0KKyAgfScKK2Vsc2UKKyAgZnVuY19zdHJpcG5hbWUgKCkKKyAgeworICAgICRkZWJ1Z19jbWQKKworICAgIGNhc2UgJDIgaW4KKyAgICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkMyIgfCAkU0VEIC1lICJzJV4kMSUlIiAtZSAicyVcXFxcJDJcJCUlImA7OworICAgICAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiQzIiB8ICRTRUQgLWUgInMlXiQxJSUiIC1lICJzJSQyXCQlJSJgOzsKKyAgICBlc2FjCisgIH0KK2ZpCisKKworIyBmdW5jX3Nob3dfZXZhbCBDTUQgW0ZBSUxfRVhQXQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVbmxlc3Mgb3B0X3F1aWV0IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKICMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCiAjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LgogZnVuY19zaG93X2V2YWwgKCkKIHsKLSAgICBteV9jbWQ9IiQxIgotICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisgICAgJGRlYnVnX2NtZAogCi0gICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7Ci0gICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCi0gICAgICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCi0gICAgfQorICAgIF9HX2NtZD0kMQorICAgIF9HX2ZhaWxfZXhwPSR7Mi0nOid9CiAKLSAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCi0gICAgICBldmFsICIkbXlfY21kIgotICAgICAgbXlfc3RhdHVzPSQ/Ci0gICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCi0JZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRfR19jbWQiCisgICAgZXZhbCAiZnVuY19ub3RxdWlldCAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKworICAgICRvcHRfZHJ5X3J1biB8fCB7CisgICAgICBldmFsICIkX0dfY21kIgorICAgICAgX0dfc3RhdHVzPSQ/CisgICAgICBpZiB0ZXN0IDAgLW5lICIkX0dfc3RhdHVzIjsgdGhlbgorCWV2YWwgIihleGl0ICRfR19zdGF0dXMpOyAkX0dfZmFpbF9leHAiCiAgICAgICBmaQotICAgIGZpCisgICAgfQogfQogCiAKLSMgZnVuY19zaG93X2V2YWxfbG9jYWxlIGNtZCBbZmFpbF9leHBdCi0jIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgZnVuY19zaG93X2V2YWxfbG9jYWxlIENNRCBbRkFJTF9FWFBdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBVbmxlc3Mgb3B0X3F1aWV0IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKICMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCiAjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBzYXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCiBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKIHsKLSAgICBteV9jbWQ9IiQxIgotICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisgICAgJGRlYnVnX2NtZAogCi0gICAgJHtvcHRfc2lsZW50LWZhbHNlfSB8fCB7Ci0gICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRteV9jbWQiCisgICAgX0dfY21kPSQxCisgICAgX0dfZmFpbF9leHA9JHsyLSc6J30KKworICAgICRvcHRfcXVpZXQgfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkX0dfY21kIgogICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgogICAgIH0KIAotICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKLSAgICAgIGV2YWwgIiRsdF91c2VyX2xvY2FsZQotCSAgICAkbXlfY21kIgotICAgICAgbXlfc3RhdHVzPSQ/Ci0gICAgICBldmFsICIkbHRfc2FmZV9sb2NhbGUiCi0gICAgICBpZiB0ZXN0ICIkbXlfc3RhdHVzIiAtZXEgMDsgdGhlbiA6OyBlbHNlCi0JZXZhbCAiKGV4aXQgJG15X3N0YXR1cyk7ICRteV9mYWlsX2V4cCIKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgZXZhbCAiJF9HX3VzZXJfbG9jYWxlCisJICAgICRfR19jbWQiCisgICAgICBfR19zdGF0dXM9JD8KKyAgICAgIGV2YWwgIiRfR19zYWZlX2xvY2FsZSIKKyAgICAgIGlmIHRlc3QgMCAtbmUgIiRfR19zdGF0dXMiOyB0aGVuCisJZXZhbCAiKGV4aXQgJF9HX3N0YXR1cyk7ICRfR19mYWlsX2V4cCIKICAgICAgIGZpCi0gICAgZmkKKyAgICB9CiB9CiAKKwogIyBmdW5jX3RyX3NoCisjIC0tLS0tLS0tLS0KICMgVHVybiAkMSBpbnRvIGEgc3RyaW5nIHN1aXRhYmxlIGZvciBhIHNoZWxsIHZhcmlhYmxlIG5hbWUuCiAjIFJlc3VsdCBpcyBzdG9yZWQgaW4gJGZ1bmNfdHJfc2hfcmVzdWx0LiAgQWxsIGNoYXJhY3RlcnMKICMgbm90IGluIHRoZSBzZXQgYS16QS1aMC05XyBhcmUgcmVwbGFjZWQgd2l0aCAnXycuIEZ1cnRoZXIsCiAjIGlmICQxIGJlZ2lucyB3aXRoIGEgZGlnaXQsIGEgJ18nIGlzIHByZXBlbmRlZCBhcyB3ZWxsLgogZnVuY190cl9zaCAoKQogewotICBjYXNlICQxIGluCi0gIFswLTldKiB8ICpbIWEtekEtWjAtOV9dKikKLSAgICBmdW5jX3RyX3NoX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgJ3MvXlwoWzAtOV1cKS9fXDEvOyBzL1teYS16QS1aMC05X10vXy9nJ2AKLSAgICA7OwotICAqICkKLSAgICBmdW5jX3RyX3NoX3Jlc3VsdD0kMQotICAgIDs7Ci0gIGVzYWMKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICQxIGluCisgICAgWzAtOV0qIHwgKlshYS16QS1aMC05X10qKQorICAgICAgZnVuY190cl9zaF9yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEIC1lICdzL15cKFswLTldXCkvX1wxLycgLWUgJ3MvW15hLXpBLVowLTlfXS9fL2cnYAorICAgICAgOzsKKyAgICAqICkKKyAgICAgIGZ1bmNfdHJfc2hfcmVzdWx0PSQxCisgICAgICA7OworICAgIGVzYWMKIH0KIAogCi0jIGZ1bmNfdmVyc2lvbgotIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCi1mdW5jX3ZlcnNpb24gKCkKKyMgZnVuY192ZXJib3NlIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgaW4gdmVyYm9zZSBtb2RlIG9ubHkuCitmdW5jX3ZlcmJvc2UgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAogCi0gICAgJFNFRCAtbiAnLyhDKS8hYiBnbwotCTptb3JlCi0JL1wuLyF7Ci0JICBOCi0JICBzL1xuIyAvIC8KLQkgIGIgbW9yZQotCX0KLQk6Z28KLQkvXiMgJyRQUk9HUkFNJyAoR05VIC8sLyMgd2FycmFudHk7IC8gewotICAgICAgICBzL14jIC8vCi0Jcy9eIyAqJC8vCi0gICAgICAgIHMvXCgoQylcKVsgMC05LC1dKlwoIFsxLTldWzAtOV0qXCkvXDFcMi8KLSAgICAgICAgcAotICAgICB9JyA8ICIkcHJvZ3BhdGgiCi0gICAgIGV4aXQgJD8KKyAgICAkb3B0X3ZlcmJvc2UgJiYgZnVuY19lY2hvICIkKiIKKworICAgIDoKIH0KIAotIyBmdW5jX3VzYWdlCi0jIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KLWZ1bmNfdXNhZ2UgKCkKKworIyBmdW5jX3dhcm5fYW5kX2NvbnRpbnVlIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCB3YXJuaW5nIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IuCitmdW5jX3dhcm5fYW5kX2NvbnRpbnVlICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKIAotICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC9eIyAgKi4qLS1oZWxwLyB7Ci0gICAgICAgIHMvXiMgLy8KLQlzL14jICokLy8KLQlzL1wkcHJvZ25hbWUvJyRwcm9nbmFtZScvCi0JcAotICAgIH0nIDwgIiRwcm9ncGF0aCIKLSAgICBlY2hvCi0gICAgJEVDSE8gInJ1biBcYCRwcm9nbmFtZSAtLWhlbHAgfCBtb3JlJyBmb3IgZnVsbCB1c2FnZSIKLSAgICBleGl0ICQ/CisgICAgJHJlcXVpcmVfdGVybV9jb2xvcnMKKworICAgIGZ1bmNfZWNob19pbmZpeF8xICIke3RjX3JlZH13YXJuaW5nJHRjX3Jlc2V0IiAiJCoiID4mMgogfQogCi0jIGZ1bmNfaGVscCBbTk9FWElUXQotIyBFY2hvIGxvbmcgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdCwKLSMgdW5sZXNzICdub2V4aXQnIGlzIHBhc3NlZCBhcyBhcmd1bWVudC4KKworIyBmdW5jX3dhcm5pbmcgQ0FURUdPUlkgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLiBXYXJuaW5nCisjIG1lc3NhZ2VzIGNhbiBiZSBmaWx0ZXJlZCBhY2NvcmRpbmcgdG8gQ0FURUdPUlksIHdoZXJlIHRoaXMgZnVuY3Rpb24KKyMgZWxpZGVzIG1lc3NhZ2VzIHdoZXJlIENBVEVHT1JZIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGdsb2JhbCB2YXJpYWJsZQorIyAnb3B0X3dhcm5pbmdfdHlwZXMnLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBDQVRFR09SWSBtdXN0IGJlIGluIHRoZSB3YXJuaW5nX2NhdGVnb3JpZXMgbGlzdCEKKyAgICBjYXNlICIgJHdhcm5pbmdfY2F0ZWdvcmllcyAiIGluCisgICAgICAqIiAkMSAiKikgOzsKKyAgICAgICopIGZ1bmNfaW50ZXJuYWxfZXJyb3IgImludmFsaWQgd2FybmluZyBjYXRlZ29yeSAnJDEnIiA7OworICAgIGVzYWMKKworICAgIF9HX2NhdGVnb3J5PSQxCisgICAgc2hpZnQKKworICAgIGNhc2UgIiAkb3B0X3dhcm5pbmdfdHlwZXMgIiBpbgorICAgICAgKiIgJF9HX2NhdGVnb3J5ICIqKSAkd2FybmluZ19mdW5jICR7MSsiJEAifSA7OworICAgIGVzYWMKK30KKworCisjIGZ1bmNfc29ydF92ZXIgVkVSMSBWRVIyCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjICdzb3J0IC1WJyBpcyBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZS4KKyMgTm90ZSB0aGlzIGRldmlhdGVzIGZyb20gdGhlIHZlcnNpb24gY29tcGFyaXNvbiBpbiBhdXRvbWFrZQorIyBpbiB0aGF0IGl0IHRyZWF0cyAxLjUgPCAxLjUuMCwgYW5kIHRyZWF0cyAxLjQuNGEgPCAxLjQtcDNhCisjIGJ1dCB0aGlzIHNob3VsZCBzdWZmaWNlIGFzIHdlIHdvbid0IGJlIHNwZWNpZnlpbmcgb2xkCisjIHZlcnNpb24gZm9ybWF0cyBvciByZWR1bmRhbnQgdHJhaWxpbmcgLjAgaW4gYm9vdHN0cmFwLmNvbmYuCisjIElmIHdlIGRpZCB3YW50IGZ1bGwgY29tcGF0aWJpbGl0eSB0aGVuIHdlIHNob3VsZCBwcm9iYWJseQorIyB1c2UgbTRfdmVyc2lvbl9jb21wYXJlIGZyb20gYXV0b2NvbmYuCitmdW5jX3NvcnRfdmVyICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgdmVyMT0kMQorICAgIHZlcjI9JDIKKworICAgICMgU3BsaXQgb24gJy4nIGFuZCBjb21wYXJlIGVhY2ggY29tcG9uZW50LgorICAgIGk9MQorICAgIHdoaWxlIDo7IGRvCisgICAgICBwMT1gZWNobyAiJHZlcjEiIHxjdXQgLWQuIC1mJGlgCisgICAgICBwMj1gZWNobyAiJHZlcjIiIHxjdXQgLWQuIC1mJGlgCisgICAgICBpZiB0ZXN0ICEgIiRwMSI7IHRoZW4KKyAgICAgICAgZWNobyAiJDEgJDIiCisgICAgICAgIGJyZWFrCisgICAgICBlbGlmIHRlc3QgISAiJHAyIjsgdGhlbgorICAgICAgICBlY2hvICIkMiAkMSIKKyAgICAgICAgYnJlYWsKKyAgICAgIGVsaWYgdGVzdCAhICIkcDEiID0gIiRwMiI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAiJHAxIiAtZ3QgIiRwMiIgMj4vZGV2L251bGw7IHRoZW4gIyBudW1lcmljIGNvbXBhcmlzb24KKyAgICAgICAgICBlY2hvICIkMiAkMSIKKyAgICAgICAgZWxpZiB0ZXN0ICIkcDIiIC1ndCAiJHAxIiAyPi9kZXYvbnVsbDsgdGhlbiAjIG51bWVyaWMgY29tcGFyaXNvbgorICAgICAgICAgIGVjaG8gIiQxICQyIgorICAgICAgICBlbHNlICMgbnVtZXJpYywgdGhlbiBsZXhpY29ncmFwaGljIGNvbXBhcmlzb24KKyAgICAgICAgICBscD1gcHJpbnRmICIkcDFcbiRwMlxuIiB8c29ydCAtbiB8dGFpbCAtbjFgCisgICAgICAgICAgaWYgdGVzdCAiJGxwIiA9ICIkcDIiOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkMSAkMiIKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICIkMiAkMSIKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgIGRvbmUKK30KKworCisjIExvY2FsIHZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1wYXR0ZXJuOiAiMTAvc2NyaXB0dmVyc2lvbj0lOnktJTAybS0lMDJkLiUwMkg7ICMgVVRDIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgRW5kOgorIyEgL2Jpbi9zaAorCisjIFNldCBhIHZlcnNpb24gc3RyaW5nIGZvciB0aGlzIHNjcmlwdC4KK3NjcmlwdHZlcnNpb249MjAxMi0xMC0yMS4xMTsgIyBVVEMKKworIyBBIHBvcnRhYmxlLCBwbHVnZ2FibGUgb3B0aW9uIHBhcnNlciBmb3IgQm91cm5lIHNoZWxsLgorIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAxMAorCisjIENvcHlyaWdodCAoQykgMjAxMC0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgUGxlYXNlIHJlcG9ydCBidWdzIG9yIHByb3Bvc2UgcGF0Y2hlcyB0byBnYXJ5QGdudS5vcmcuCisKKworIyMgLS0tLS0tICMjCisjIyBVc2FnZS4gIyMKKyMjIC0tLS0tLSAjIworCisjIFRoaXMgZmlsZSBpcyBhIGxpYnJhcnkgZm9yIHBhcnNpbmcgb3B0aW9ucyBpbiB5b3VyIHNoZWxsIHNjcmlwdHMgYWxvbmcKKyMgd2l0aCBhc3NvcnRlZCBvdGhlciB1c2VmdWwgc3VwcG9ydGluZyBmZWF0dXJlcyB0aGF0IHlvdSBjYW4gbWFrZSB1c2UKKyMgb2YgdG9vLgorIworIyBGb3IgdGhlIHNpbXBsZXN0IHNjcmlwdHMgeW91IG1pZ2h0IG5lZWQgb25seToKKyMKKyMgICAjIS9iaW4vc2gKKyMgICAuIHJlbGF0aXZlL3BhdGgvdG8vZnVuY2xpYi5zaAorIyAgIC4gcmVsYXRpdmUvcGF0aC90by9vcHRpb25zLXBhcnNlcgorIyAgIHNjcmlwdHZlcnNpb249MS4wCisjICAgZnVuY19vcHRpb25zICR7MSsiJEAifQorIyAgIGV2YWwgc2V0IGR1bW15ICIkZnVuY19vcHRpb25zX3Jlc3VsdCI7IHNoaWZ0CisjICAgLi4ucmVzdCBvZiB5b3VyIHNjcmlwdC4uLgorIworIyBJbiBvcmRlciBmb3IgdGhlICctLXZlcnNpb24nIG9wdGlvbiB0byB3b3JrLCB5b3Ugd2lsbCBuZWVkIHRvIGhhdmUgYQorIyBzdWl0YWJseSBmb3JtYXR0ZWQgY29tbWVudCBsaWtlIHRoZSBvbmUgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUKKyMgc3RhcnRpbmcgd2l0aCAnIyBXcml0dGVuIGJ5ICcgYW5kIGVuZGluZyB3aXRoICcjIHdhcnJhbnR5OyAnLgorIworIyBGb3IgJy1oJyBhbmQgJy0taGVscCcgdG8gd29yaywgeW91IHdpbGwgYWxzbyBuZWVkIGEgb25lIGxpbmUKKyMgZGVzY3JpcHRpb24gb2YgeW91ciBzY3JpcHQncyBwdXJwb3NlIGluIGEgY29tbWVudCBkaXJlY3RseSBhYm92ZSB0aGUKKyMgJyMgV3JpdHRlbiBieSAnIGxpbmUsIGxpa2UgdGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS4KKyMKKyMgVGhlIGRlZmF1bHQgb3B0aW9ucyBhbHNvIHN1cHBvcnQgJy0tZGVidWcnLCB3aGljaCB3aWxsIHR1cm4gb24gc2hlbGwKKyMgZXhlY3V0aW9uIHRyYWNpbmcgKHNlZSB0aGUgY29tbWVudCBhYm92ZSBkZWJ1Z19jbWQgYmVsb3cgZm9yIGFub3RoZXIKKyMgdXNlKSwgYW5kICctLXZlcmJvc2UnIGFuZCB0aGUgZnVuY192ZXJib3NlIGZ1bmN0aW9uIHRvIGFsbG93IHlvdXIgc2NyaXB0CisjIHRvIGRpc3BsYXkgdmVyYm9zZSBtZXNzYWdlcyBvbmx5IHdoZW4geW91ciB1c2VyIGhhcyBzcGVjaWZpZWQKKyMgJy0tdmVyYm9zZScuCisjCisjIEFmdGVyIHNvdXJjaW5nIHRoaXMgZmlsZSwgeW91IGNhbiBwbHVnIHByb2Nlc3NpbmcgZm9yIGFkZGl0aW9uYWwKKyMgb3B0aW9ucyBieSBhbWVuZGluZyB0aGUgdmFyaWFibGVzIGZyb20gdGhlICdDb25maWd1cmF0aW9uJyBzZWN0aW9uCisjIGJlbG93LCBhbmQgZm9sbG93aW5nIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlICdPcHRpb24gcGFyc2luZycKKyMgc2VjdGlvbiBmdXJ0aGVyIGRvd24uCisKKyMjIC0tLS0tLS0tLS0tLS0tICMjCisjIyBDb25maWd1cmF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0gIyMKKworIyBZb3Ugc2hvdWxkIG92ZXJyaWRlIHRoZXNlIHZhcmlhYmxlcyBpbiB5b3VyIHNjcmlwdCBhZnRlciBzb3VyY2luZyB0aGlzCisjIGZpbGUgc28gdGhhdCB0aGV5IHJlZmxlY3QgdGhlIGN1c3RvbWlzYXRpb25zIHlvdSBoYXZlIGFkZGVkIHRvIHRoZQorIyBvcHRpb24gcGFyc2VyLgorCisjIFRoZSB1c2FnZSBsaW5lIGZvciBvcHRpb24gcGFyc2luZyBlcnJvcnMgYW5kIHRoZSBzdGFydCBvZiAnLWgnIGFuZAorIyAnLS1oZWxwJyBvdXRwdXQgbWVzc2FnZXMuIFlvdSBjYW4gZW1iZWQgc2hlbGwgdmFyaWFibGVzIGZvciBkZWxheWVkCisjIGV4cGFuc2lvbiBhdCB0aGUgdGltZSB0aGUgbWVzc2FnZSBpcyBkaXNwbGF5ZWQsIGJ1dCB5b3Ugd2lsbCBuZWVkIHRvCisjIHF1b3RlIG90aGVyIHNoZWxsIG1ldGEtY2hhcmFjdGVycyBjYXJlZnVsbHkgdG8gcHJldmVudCB0aGVtIGJlaW5nCisjIGV4cGFuZGVkIHdoZW4gdGhlIGNvbnRlbnRzIGFyZSBldmFsZWQuCit1c2FnZT0nJHByb2dwYXRoIFtPUFRJT05dLi4uJworCisjIFNob3J0IGhlbHAgbWVzc2FnZSBpbiByZXNwb25zZSB0byAnLWgnIGFuZCAnLS1oZWxwJy4gIEFkZCB0byB0aGlzIG9yCisjIG92ZXJyaWRlIGl0IGFmdGVyIHNvdXJjaW5nIHRoaXMgbGlicmFyeSB0byByZWZsZWN0IHRoZSBmdWxsIHNldCBvZgorIyBvcHRpb25zIHlvdXIgc2NyaXB0IGFjY2VwdHMuCit1c2FnZV9tZXNzYWdlPSJcCisgICAgICAgLS1kZWJ1ZyAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZworICAgLVcsIC0td2FybmluZ3M9Q0FURUdPUlkKKyAgICAgICAgICAgICAgICAgICAgICByZXBvcnQgdGhlIHdhcm5pbmdzIGZhbGxpbmcgaW4gQ0FURUdPUlkgW2FsbF0KKyAgIC12LCAtLXZlcmJvc2UgICAgICB2ZXJib3NlbHkgcmVwb3J0IHByb2Nlc3NpbmcKKyAgICAgICAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgc2hvcnQgb3IgbG9uZyBoZWxwIG1lc3NhZ2UgYW5kIGV4aXQKKyIKKworIyBBZGRpdGlvbmFsIHRleHQgYXBwZW5kZWQgdG8gJ3VzYWdlX21lc3NhZ2UnIGluIHJlc3BvbnNlIHRvICctLWhlbHAnLgorbG9uZ19oZWxwX21lc3NhZ2U9IgorV2FybmluZyBjYXRlZ29yaWVzIGluY2x1ZGU6CisgICAgICAgJ2FsbCcgICAgICAgICAgc2hvdyBhbGwgd2FybmluZ3MKKyAgICAgICAnbm9uZScgICAgICAgICB0dXJuIG9mZiBhbGwgdGhlIHdhcm5pbmdzCisgICAgICAgJ2Vycm9yJyAgICAgICAgd2FybmluZ3MgYXJlIHRyZWF0ZWQgYXMgZmF0YWwgZXJyb3JzIgorCisjIEhlbHAgbWVzc2FnZSBwcmludGVkIGJlZm9yZSBmYXRhbCBvcHRpb24gcGFyc2luZyBlcnJvcnMuCitmYXRhbF9oZWxwPSJUcnkgJ1wkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBIb29rIGZ1bmN0aW9uIG1hbmFnZW1lbnQuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgYWRkaW5nLCByZW1vdmluZywgYW5kIHJ1bm5pbmcgaG9va3MKKyMgdG8gdGhlIG1haW4gY29kZS4gIEEgaG9vayBpcyBqdXN0IGEgbmFtZWQgbGlzdCBvZiBvZiBmdW5jdGlvbiwgdGhhdCBjYW4KKyMgYmUgcnVuIGluIG9yZGVyIGxhdGVyIG9uLgorCisjIGZ1bmNfaG9va2FibGUgRlVOQ19OQU1FCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlY2xhcmUgdGhhdCBGVU5DX05BTUUgd2lsbCBydW4gaG9va3MgYWRkZWQgd2l0aAorIyAnZnVuY19hZGRfaG9vayBGVU5DX05BTUUgLi4uJy4KK2Z1bmNfaG9va2FibGUgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX2FwcGVuZCBob29rYWJsZV9mbnMgIiAkMSIKK30KKworCisjIGZ1bmNfYWRkX2hvb2sgRlVOQ19OQU1FIEhPT0tfRlVOQworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVxdWVzdCB0aGF0IEZVTkNfTkFNRSBjYWxsIEhPT0tfRlVOQyBiZWZvcmUgaXQgcmV0dXJucy4gIEZVTkNfTkFNRSBtdXN0CisjIGZpcnN0IGhhdmUgYmVlbiBkZWNsYXJlZCAiaG9va2FibGUiIGJ5IGEgY2FsbCB0byAnZnVuY19ob29rYWJsZScuCitmdW5jX2FkZF9ob29rICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgY2FzZSAiICRob29rYWJsZV9mbnMgIiBpbgorICAgICAgKiIgJDEgIiopIDs7CisgICAgICAqKSBmdW5jX2ZhdGFsX2Vycm9yICInJDEnIGRvZXMgbm90IGFjY2VwdCBob29rIGZ1bmN0aW9ucy4iIDs7CisgICAgZXNhYworCisgICAgZXZhbCBmdW5jX2FwcGVuZCAkezF9X2hvb2tzICciICQyIicKK30KKworCisjIGZ1bmNfcmVtb3ZlX2hvb2sgRlVOQ19OQU1FIEhPT0tfRlVOQworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVtb3ZlIEhPT0tfRlVOQyBmcm9tIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyBjYWxsZWQgYnkgRlVOQ19OQU1FLgorZnVuY19yZW1vdmVfaG9vayAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGV2YWwgJHsxfV9ob29rcz0nYCRic19lY2hvICJcJCckMSdfaG9va3MiIHwkU0VEICJzfCAnJDInfHwiYCcKK30KKworCisjIGZ1bmNfcnVuX2hvb2tzIEZVTkNfTkFNRSBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUnVuIGFsbCBob29rIGZ1bmN0aW9ucyByZWdpc3RlcmVkIHRvIEZVTkNfTkFNRS4KKyMgSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBsaXN0IG9mIGhvb2sgZnVuY3Rpb25zIGNvbnRhaW5zIG5vdGhpbmcgbW9yZQorIyB0aGFuIGEgd2hpdGVzcGFjZS1kZWxpbWl0ZWQgbGlzdCBvZiBsZWdhbCBzaGVsbCBmdW5jdGlvbiBuYW1lcywgYW5kCisjIG5vIGVmZm9ydCBpcyB3YXN0ZWQgdHJ5aW5nIHRvIGNhdGNoIHNoZWxsIG1ldGEtY2hhcmFjdGVycyBvciBwcmVzZXJ2ZQorIyB3aGl0ZXNwYWNlLgorZnVuY19ydW5faG9va3MgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBjYXNlICIgJGhvb2thYmxlX2ZucyAiIGluCisgICAgICAqIiAkMSAiKikgOzsKKyAgICAgICopIGZ1bmNfZmF0YWxfZXJyb3IgIickMScgZG9lcyBub3Qgc3VwcG9ydCBob29rIGZ1bmN0aW9ucy4iIDs7CisgICAgZXNhYworCisgICAgZXZhbCBfR19ob29rX2Zucz1cJCQxX2hvb2tzOyBzaGlmdAorCisgICAgZm9yIF9HX2hvb2sgaW4gJF9HX2hvb2tfZm5zOyBkbworICAgICAgZXZhbCAkX0dfaG9vayAnIiRAIicKKworICAgICAgIyBzdG9yZSByZXR1cm5lZCBvcHRpb25zIGxpc3QgYmFjayBpbnRvIHBvc2l0aW9uYWwKKyAgICAgICMgcGFyYW1ldGVycyBmb3IgbmV4dCAnY21kJyBleGVjdXRpb24uCisgICAgICBldmFsIF9HX2hvb2tfcmVzdWx0PVwkJHtfR19ob29rfV9yZXN1bHQKKyAgICAgIGV2YWwgc2V0IGR1bW15ICIkX0dfaG9va19yZXN1bHQiOyBzaGlmdAorICAgIGRvbmUKKworICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisgICAgZnVuY19ydW5faG9va3NfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPcHRpb24gcGFyc2luZy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLSAjIworCisjIEluIG9yZGVyIHRvIGFkZCB5b3VyIG93biBvcHRpb24gcGFyc2luZyBob29rcywgeW91IG11c3QgYWNjZXB0IHRoZQorIyBmdWxsIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGxpc3QgaW4geW91ciBob29rIGZ1bmN0aW9uLCByZW1vdmUgYW55CisjIG9wdGlvbnMgdGhhdCB5b3UgYWN0aW9uLCBhbmQgdGhlbiBwYXNzIGJhY2sgdGhlIHJlbWFpbmluZyB1bnByb2Nlc3NlZAorIyBvcHRpb25zIGluICc8aG9va2VkX2Z1bmN0aW9uX25hbWU+X3Jlc3VsdCcsIGVzY2FwZWQgc3VpdGFibHkgZm9yCisjICdldmFsJy4gIExpa2UgdGhpczoKKyMKKyMgICAgbXlfb3B0aW9uc19wcmVwICgpCisjICAgIHsKKyMgICAgICAgICRkZWJ1Z19jbWQKKyMKKyMgICAgICAgICMgRXh0ZW5kIHRoZSBleGlzdGluZyB1c2FnZSBtZXNzYWdlLgorIyAgICAgICAgdXNhZ2VfbWVzc2FnZT0kdXNhZ2VfbWVzc2FnZScKKyMgICAgICAtcywgLS1zaWxlbnQgICAgICAgZG9uJ1wnJ3QgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcworIyAgICAnCisjCisjICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICR7MSsiJEAifQorIyAgICAgICAgbXlfb3B0aW9uc19wcmVwX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyMgICAgfQorIyAgICBmdW5jX2FkZF9ob29rIGZ1bmNfb3B0aW9uc19wcmVwIG15X29wdGlvbnNfcHJlcAorIworIworIyAgICBteV9zaWxlbnRfb3B0aW9uICgpCisjICAgIHsKKyMgICAgICAgICRkZWJ1Z19jbWQKKyMKKyMgICAgICAgICMgTm90ZSB0aGF0IGZvciBlZmZpY2llbmN5LCB3ZSBwYXJzZSBhcyBtYW55IG9wdGlvbnMgYXMgd2UgY2FuCisjICAgICAgICAjIHJlY29nbmlzZSBpbiBhIGxvb3AgYmVmb3JlIHBhc3NpbmcgdGhlIHJlbWFpbmRlciBiYWNrIHRvIHRoZQorIyAgICAgICAgIyBjYWxsZXIgb24gdGhlIGZpcnN0IHVucmVjb2duaXNlZCBhcmd1bWVudCB3ZSBlbmNvdW50ZXIuCisjICAgICAgICB3aGlsZSB0ZXN0ICQjIC1ndCAwOyBkbworIyAgICAgICAgICBvcHQ9JDE7IHNoaWZ0CisjICAgICAgICAgIGNhc2UgJG9wdCBpbgorIyAgICAgICAgICAgIC0tc2lsZW50fC1zKSBvcHRfc2lsZW50PTogOzsKKyMgICAgICAgICAgICAjIFNlcGFyYXRlIG5vbi1hcmd1bWVudCBzaG9ydCBvcHRpb25zOgorIyAgICAgICAgICAgIC1zKikgICAgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdCAiJF9HX29wdCIKKyMgICAgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0kZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIiAkezErIiRAIn0KKyMgICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyMgICAgICAgICAgICAqKSAgICAgICAgICAgIHNldCBkdW1teSAiJF9HX29wdCIgIiQqIjsgc2hpZnQ7IGJyZWFrIDs7CisjICAgICAgICAgIGVzYWMKKyMgICAgICAgIGRvbmUKKyMKKyMgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisjICAgICAgICBteV9zaWxlbnRfb3B0aW9uX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKKyMgICAgfQorIyAgICBmdW5jX2FkZF9ob29rIGZ1bmNfcGFyc2Vfb3B0aW9ucyBteV9zaWxlbnRfb3B0aW9uCisjCisjCisjICAgIG15X29wdGlvbl92YWxpZGF0aW9uICgpCisjICAgIHsKKyMgICAgICAgICRkZWJ1Z19jbWQKKyMKKyMgICAgICAgICRvcHRfc2lsZW50ICYmICRvcHRfdmVyYm9zZSAmJiBmdW5jX2ZhdGFsX2hlbHAgIlwKKyMgICAgJy0tc2lsZW50JyBhbmQgJy0tdmVyYm9zZScgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLiIKKyMKKyMgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisjICAgICAgICBteV9vcHRpb25fdmFsaWRhdGlvbl9yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CisjICAgIH0KKyMgICAgZnVuY19hZGRfaG9vayBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgbXlfb3B0aW9uX3ZhbGlkYXRpb24KKyMKKyMgWW91J2xsIGFsc2UgbmVlZCB0byBtYW51YWxseSBhbWVuZCAkdXNhZ2VfbWVzc2FnZSB0byByZWZsZWN0IHRoZSBleHRyYQorIyBvcHRpb25zIHlvdSBwYXJzZS4gIEl0J3MgcHJlZmVyYWJsZSB0byBhcHBlbmQgaWYgeW91IGNhbiwgc28gdGhhdAorIyBtdWx0aXBsZSBvcHRpb24gcGFyc2luZyBob29rcyBjYW4gYmUgYWRkZWQgc2FmZWx5LgorCisKKyMgZnVuY19vcHRpb25zIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBbGwgdGhlIGZ1bmN0aW9ucyBjYWxsZWQgaW5zaWRlIGZ1bmNfb3B0aW9ucyBhcmUgaG9va2FibGUuIFNlZSB0aGUKKyMgaW5kaXZpZHVhbCBpbXBsZW1lbnRhdGlvbnMgZm9yIGRldGFpbHMuCitmdW5jX2hvb2thYmxlIGZ1bmNfb3B0aW9ucworZnVuY19vcHRpb25zICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgZnVuY19vcHRpb25zX3ByZXAgJHsxKyIkQCJ9CisgICAgZXZhbCBmdW5jX3BhcnNlX29wdGlvbnMgXAorICAgICAgICAke2Z1bmNfb3B0aW9uc19wcmVwX3Jlc3VsdCsiJGZ1bmNfb3B0aW9uc19wcmVwX3Jlc3VsdCJ9CisgICAgZXZhbCBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgXAorICAgICAgICAke2Z1bmNfcGFyc2Vfb3B0aW9uc19yZXN1bHQrIiRmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0In0KKworICAgIGV2YWwgZnVuY19ydW5faG9va3MgZnVuY19vcHRpb25zIFwKKyAgICAgICAgJHtmdW5jX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0KyIkZnVuY192YWxpZGF0ZV9vcHRpb25zX3Jlc3VsdCJ9CisKKyAgICAjIHNhdmUgbW9kaWZpZWQgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGZvciBjYWxsZXIKKyAgICBmdW5jX29wdGlvbnNfcmVzdWx0PSRmdW5jX3J1bl9ob29rc19yZXN1bHQKK30KKworCisjIGZ1bmNfb3B0aW9uc19wcmVwIFtBUkddLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEFsbCBpbml0aWFsaXNhdGlvbnMgcmVxdWlyZWQgYmVmb3JlIHN0YXJ0aW5nIHRoZSBvcHRpb24gcGFyc2UgbG9vcC4KKyMgTm90ZSB0aGF0IHdoZW4gY2FsbGluZyBob29rIGZ1bmN0aW9ucywgd2UgcGFzcyB0aHJvdWdoIHRoZSBsaXN0IG9mCisjIHBvc2l0aW9uYWwgcGFyYW1ldGVycy4gIElmIGEgaG9vayBmdW5jdGlvbiBtb2RpZmllcyB0aGF0IGxpc3QsIGFuZAorIyBuZWVkcyB0byBwcm9wb2dhdGUgdGhhdCBiYWNrIHRvIHJlc3Qgb2YgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIGNvbXBsZXRlCisjIG1vZGlmaWVkIGxpc3QgbXVzdCBiZSBwdXQgaW4gJ2Z1bmNfcnVuX2hvb2tzX3Jlc3VsdCcgYmVmb3JlCisjIHJldHVybmluZy4KK2Z1bmNfaG9va2FibGUgZnVuY19vcHRpb25zX3ByZXAKK2Z1bmNfb3B0aW9uc19wcmVwICgpCit7CisgICAgJGRlYnVnX2NtZAorCisgICAgIyBPcHRpb24gZGVmYXVsdHM6CisgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKyAgICBvcHRfd2FybmluZ190eXBlcz0KKworICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfb3B0aW9uc19wcmVwICR7MSsiJEAifQorCisgICAgIyBzYXZlIG1vZGlmaWVkIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgY2FsbGVyCisgICAgZnVuY19vcHRpb25zX3ByZXBfcmVzdWx0PSRmdW5jX3J1bl9ob29rc19yZXN1bHQKK30KKworCisjIGZ1bmNfcGFyc2Vfb3B0aW9ucyBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIG1haW4gb3B0aW9uIHBhcnNpbmcgbG9vcC4KK2Z1bmNfaG9va2FibGUgZnVuY19wYXJzZV9vcHRpb25zCitmdW5jX3BhcnNlX29wdGlvbnMgKCkKK3sKKyAgICAkZGVidWdfY21kCisKKyAgICBmdW5jX3BhcnNlX29wdGlvbnNfcmVzdWx0PQorCisgICAgIyB0aGlzIGp1c3QgZWFzZXMgZXhpdCBoYW5kbGluZworICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICAgICAjIERlZmVyIHRvIGhvb2sgZnVuY3Rpb25zIGZvciBpbml0aWFsIG9wdGlvbiBwYXJzaW5nLCBzbyB0aGV5CisgICAgICAjIGdldCBwcmlvcml0eSBpbiB0aGUgZXZlbnQgb2YgcmV1c2luZyBhbiBvcHRpb24gbmFtZS4KKyAgICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfcGFyc2Vfb3B0aW9ucyAkezErIiRAIn0KKworICAgICAgIyBBZGp1c3QgZnVuY19wYXJzZV9vcHRpb25zIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0byBtYXRjaAorICAgICAgZXZhbCBzZXQgZHVtbXkgIiRmdW5jX3J1bl9ob29rc19yZXN1bHQiOyBzaGlmdAorCisgICAgICAjIEJyZWFrIG91dCBvZiB0aGUgbG9vcCBpZiB3ZSBhbHJlYWR5IHBhcnNlZCBldmVyeSBvcHRpb24uCisgICAgICB0ZXN0ICQjIC1ndCAwIHx8IGJyZWFrCisKKyAgICAgIF9HX29wdD0kMQorICAgICAgc2hpZnQKKyAgICAgIGNhc2UgJF9HX29wdCBpbgorICAgICAgICAtLWRlYnVnfC14KSAgIGRlYnVnX2NtZD0nc2V0IC14JworICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfZWNobyAiZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKyAgICAgICAgICAgICAgICAgICAgICAkZGVidWdfY21kCisgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLW5vLXdhcm5pbmdzfC0tbm8td2FybmluZ3wtLW5vLXdhcm4pCisgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15IC0td2FybmluZ3Mgbm9uZSAkezErIiRAIn0KKyAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorCQkgICAgICA7OworCisgICAgICAgIC0td2FybmluZ3N8LS13YXJuaW5nfC1XKQorICAgICAgICAgICAgICAgICAgICAgIHRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJF9HX29wdCAmJiBicmVhaworICAgICAgICAgICAgICAgICAgICAgIGNhc2UgIiAkd2FybmluZ19jYXRlZ29yaWVzICQxIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgKiIgJDEgIiopCisgICAgICAgICAgICAgICAgICAgICAgICAgICMgdHJhaWxpbmcgc3BhY2UgcHJldmVudHMgbWF0Y2hpbmcgbGFzdCAkMSBhYm92ZQorICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZF91bmlxIG9wdF93YXJuaW5nX3R5cGVzICIgJDEiCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAqYWxsKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz0kd2FybmluZ19jYXRlZ29yaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAqbm9uZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3dhcm5pbmdfdHlwZXM9bm9uZQorICAgICAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nX2Z1bmM9OgorICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgKmVycm9yKQorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfd2FybmluZ190eXBlcz0kd2FybmluZ19jYXRlZ29yaWVzCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmdfZnVuYz1mdW5jX2ZhdGFsX2Vycm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIHdhcm5pbmcgY2F0ZWdvcnk6ICckMSciCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLXZlcmJvc2V8LXYpIG9wdF92ZXJib3NlPTogOzsKKyAgICAgICAgLS12ZXJzaW9uKSAgICBmdW5jX3ZlcnNpb24gOzsKKyAgICAgICAgLVw/fC1oKSAgICAgICBmdW5jX3VzYWdlIDs7CisgICAgICAgIC0taGVscCkgICAgICAgZnVuY19oZWxwIDs7CisKKwkjIFNlcGFyYXRlIG9wdGFyZ3MgdG8gbG9uZyBvcHRpb25zIChwbHVnaW5zIG1heSBuZWVkIHRoaXMpOgorCS0tKj0qKSAgICAgICAgZnVuY19zcGxpdF9lcXVhbHMgIiRfR19vcHQiCisJICAgICAgICAgICAgICBzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2VxdWFsc19saHMiIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiRmdW5jX3NwbGl0X2VxdWFsc19yaHMiICR7MSsiJEAifQorICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBzaG9ydCBvcHRpb25zOgorICAgICAgICAtVyopCisgICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9CisgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisgICAgICAgIC1cPyp8LWgqfC12KnwteCopCisgICAgICAgICAgICAgICAgICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgc2V0IGR1bW15ICIkZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZSIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorICAgICAgICAgICAgICAgICAgICAgIHNoaWZ0CisgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLSkgICAgICAgICAgIGJyZWFrIDs7CisgICAgICAgIC0qKSAgICAgICAgICAgZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbmlzZWQgb3B0aW9uOiAnJF9HX29wdCciIDs7CisgICAgICAgICopICAgICAgICAgICAgc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07IHNoaWZ0OyBicmVhayA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisgICAgZnVuY19wYXJzZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKK30KKworCisjIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyBbQVJHXS4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhbnkgc2FuaXR5IGNoZWNrcyBvbiBvcHRpb24gc2V0dGluZ3MgYW5kL29yIHVuY29uc3VtZWQKKyMgYXJndW1lbnRzLgorZnVuY19ob29rYWJsZSBmdW5jX3ZhbGlkYXRlX29wdGlvbnMKK2Z1bmNfdmFsaWRhdGVfb3B0aW9ucyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICMgRGlzcGxheSBhbGwgd2FybmluZ3MgaWYgLVcgd2FzIG5vdCBnaXZlbi4KKyAgICB0ZXN0IC1uICIkb3B0X3dhcm5pbmdfdHlwZXMiIHx8IG9wdF93YXJuaW5nX3R5cGVzPSIgJHdhcm5pbmdfY2F0ZWdvcmllcyIKKworICAgIGZ1bmNfcnVuX2hvb2tzIGZ1bmNfdmFsaWRhdGVfb3B0aW9ucyAkezErIiRAIn0KKworICAgICMgQmFpbCBpZiB0aGUgb3B0aW9ucyB3ZXJlIHNjcmV3ZWQhCisgICAgJGV4aXRfY21kICRFWElUX0ZBSUxVUkUKKworICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorICAgIGZ1bmNfdmFsaWRhdGVfb3B0aW9uc19yZXN1bHQ9JGZ1bmNfcnVuX2hvb2tzX3Jlc3VsdAorfQorCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMjIEhlbHBlciBmdW5jdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0jIworCisjIFRoaXMgc2VjdGlvbiBjb250YWlucyB0aGUgaGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSByZXN0IG9mIHRoZQorIyBob29rYWJsZSBvcHRpb24gcGFyc2VyIGZyYW1ld29yayBpbiBhc2NpaS1iZXRpY2FsIG9yZGVyLgorCisKKyMgZnVuY19mYXRhbF9oZWxwIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IsIGZvbGxvd2VkIGJ5CisjIGEgaGVscCBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfaGVscCAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgIGV2YWwgXCRic19lY2hvIFwiIlVzYWdlOiAkdXNhZ2UiXCIKKyAgICBldmFsIFwkYnNfZWNobyBcIiIkZmF0YWxfaGVscCJcIgorICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCit9CisKKworIyBmdW5jX2hlbHAKKyMgLS0tLS0tLS0tCisjIEVjaG8gbG9uZyBoZWxwIG1lc3NhZ2UgdG8gc3RhbmRhcmQgb3V0cHV0IGFuZCBleGl0LgogZnVuY19oZWxwICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKIAotICAgICRTRUQgLW4gJy9eIyBVc2FnZTovLC8jIFJlcG9ydCBidWdzIHRvLyB7Ci0JOnByaW50Ci0gICAgICAgIHMvXiMgLy8KLQlzL14jICokLy8KLQlzKlwkcHJvZ25hbWUqJyRwcm9nbmFtZScqCi0JcypcJGhvc3QqJyIkaG9zdCInKgotCXMqXCRTSEVMTConIiRTSEVMTCInKgotCXMqXCRMVENDKiciJExUQ0MiJyoKLQlzKlwkTFRDRkxBR1MqJyIkTFRDRkxBR1MiJyoKLQlzKlwkTEQqJyIkTEQiJyoKLQlzL1wkd2l0aF9nbnVfbGQvJyIkd2l0aF9nbnVfbGQiJy8KLQlzL1wkYXV0b21ha2VfdmVyc2lvbi8nImAoJHtBVVRPTUFLRS1hdXRvbWFrZX0gLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KLQlzL1wkYXV0b2NvbmZfdmVyc2lvbi8nImAoJHtBVVRPQ09ORi1hdXRvY29uZn0gLS12ZXJzaW9uKSAyPi9kZXYvbnVsbCB8JFNFRCAxcWAiJy8KLQlwCi0JZAotICAgICB9Ci0gICAgIC9eIyAuKiBob21lIHBhZ2U6L2IgcHJpbnQKLSAgICAgL14jIEdlbmVyYWwgaGVscCB1c2luZy9iIHByaW50Ci0gICAgICcgPCAiJHByb2dwYXRoIgotICAgIHJldD0kPwotICAgIGlmIHRlc3QgLXogIiQxIjsgdGhlbgotICAgICAgZXhpdCAkcmV0Ci0gICAgZmkKKyAgICBmdW5jX3VzYWdlX21lc3NhZ2UKKyAgICAkYnNfZWNobyAiJGxvbmdfaGVscF9tZXNzYWdlIgorICAgIGV4aXQgMAogfQogCi0jIGZ1bmNfbWlzc2luZ19hcmcgYXJnbmFtZQorCisjIGZ1bmNfbWlzc2luZ19hcmcgQVJHTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciBhbmQgc2V0IGdsb2JhbAogIyBleGl0X2NtZC4KIGZ1bmNfbWlzc2luZ19hcmcgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAogCi0gICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEuIgorICAgIGZ1bmNfZXJyb3IgIk1pc3NpbmcgYXJndW1lbnQgZm9yICckMScuIgogICAgIGV4aXRfY21kPWV4aXQKIH0KIAogCi0jIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IHNob3J0b3B0CisjIGZ1bmNfc3BsaXRfZXF1YWxzIFNUUklORworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2V0IGZ1bmNfc3BsaXRfZXF1YWxzX2xocyBhbmQgZnVuY19zcGxpdF9lcXVhbHNfcmhzIHNoZWxsIHZhcmlhYmxlcyBhZnRlcgorIyBzcGxpdHRpbmcgU1RSSU5HIGF0IHRoZSAnPScgc2lnbi4KK3Rlc3QgLXogIiRfR19IQVZFX1hTSV9PUFMiIFwKKyAgICAmJiAoZXZhbCAneD1hL2IvYzsKKyAgICAgIHRlc3QgNWFhL2JiL2NjID0gIiR7I3h9JHt4JSUvKn0ke3glLyp9JHt4IyovfSR7eCMjKi99IicpIDI+L2Rldi9udWxsIFwKKyAgICAmJiBfR19IQVZFX1hTSV9PUFM9eWVzCisKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiCit0aGVuCisgICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dpbmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KKyAgZXZhbCAnZnVuY19zcGxpdF9lcXVhbHMgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19saHM9JHsxJSU9Kn0KKyAgICAgIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0kezEjKj19CisgICAgICB0ZXN0ICJ4JGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgPSAieCQxIiBcCisgICAgICAgICYmIGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz0KKyAgfScKK2Vsc2UKKyAgIyAuLi5vdGhlcndpc2UgZmFsbCBiYWNrIHRvIHVzaW5nIGV4cHIsIHdoaWNoIGlzIG9mdGVuIGEgc2hlbGwgYnVpbHRpbi4KKyAgZnVuY19zcGxpdF9lcXVhbHMgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19saHM9YGV4cHIgIngkMSIgOiAneFwoW149XSpcKSdgCisgICAgICBmdW5jX3NwbGl0X2VxdWFsc19yaHM9CisgICAgICB0ZXN0ICJ4JGZ1bmNfc3BsaXRfZXF1YWxzX2xocyIgPSAieCQxIiBcCisgICAgICAgIHx8IGZ1bmNfc3BsaXRfZXF1YWxzX3Jocz1gZXhwciAieCQxIiA6ICd4W149XSo9XCguKlwpJCdgCisgIH0KK2ZpICNmdW5jX3NwbGl0X2VxdWFscworCisKKyMgZnVuY19zcGxpdF9zaG9ydF9vcHQgU0hPUlRPUFQKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgU2V0IGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUgYW5kIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyBzaGVsbAogIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIFNIT1JUT1BUIGFmdGVyIHRoZSAybmQgY2hhcmFjdGVyLgotZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKK2lmIHRlc3QgeWVzID0gIiRfR19IQVZFX1hTSV9PUFMiCit0aGVuCisgICMgVGhpcyBpcyBhbiBYU0kgY29tcGF0aWJsZSBzaGVsbCwgYWxsb3dpbmcgYSBmYXN0ZXIgaW1wbGVtZW50YXRpb24uLi4KKyAgZXZhbCAnZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkKKyAgeworICAgICAgJGRlYnVnX2NtZAorCisgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9JHsxIz8/fQorICAgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifQorICB9JworZWxzZQorICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgZXhwciwgd2hpY2ggaXMgb2Z0ZW4gYSBzaGVsbCBidWlsdGluLgorICBmdW5jX3NwbGl0X3Nob3J0X29wdCAoKQorICB7CisgICAgICAkZGVidWdfY21kCisKKyAgICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9YGV4cHIgIngkMSIgOiAneC1cKC5cKSdgCisgICAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmc9YGV4cHIgIngkMSIgOiAneC0uXCguKlwpJCdgCisgIH0KK2ZpICNmdW5jX3NwbGl0X3Nob3J0X29wdAorCisKKyMgZnVuY191c2FnZQorIyAtLS0tLS0tLS0tCisjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdXNhZ2UgKCkKIHsKLSAgICBteV9zZWRfc2hvcnRfb3B0PScxcy9eXCguLlwpLiokL1wxLztxJwotICAgIG15X3NlZF9zaG9ydF9yZXN0PScxcy9eLi5cKC4qXCkkL1wxLztxJworICAgICRkZWJ1Z19jbWQKIAotICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X29wdCJgCi0gICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9yZXN0ImAKLX0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKyAgICBmdW5jX3VzYWdlX21lc3NhZ2UKKyAgICAkYnNfZWNobyAiUnVuICckcHJvZ25hbWUgLS1oZWxwIHwke1BBR0VSLW1vcmV9JyBmb3IgZnVsbCB1c2FnZSIKKyAgICBleGl0IDAKK30KIAogCi0jIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbG9uZ29wdAotIyBTZXQgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyBzaGVsbAotIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIExPTkdPUFQgYXQgdGhlIGA9JyBzaWduLgotZnVuY19zcGxpdF9sb25nX29wdCAoKQorIyBmdW5jX3VzYWdlX21lc3NhZ2UKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVjaG8gc2hvcnQgaGVscCBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dC4KK2Z1bmNfdXNhZ2VfbWVzc2FnZSAoKQogewotICAgIG15X3NlZF9sb25nX29wdD0nMXMvXlwoLS1bXj1dKlwpPS4qL1wxLztxJwotICAgIG15X3NlZF9sb25nX2FyZz0nMXMvXi0tW149XSo9Ly8nCisgICAgJGRlYnVnX2NtZAogCi0gICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9sb25nX29wdCJgCi0gICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfYXJnImAKLX0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotCi1leGl0X2NtZD06CisgICAgZXZhbCBcJGJzX2VjaG8gXCIiVXNhZ2U6ICR1c2FnZSJcIgorICAgIGVjaG8KKyAgICAkU0VEIC1uICdzfF4jIHx8CisgICAgICAgIC9eV3JpdHRlbiBieS97CisgICAgICAgICAgeDtwO3gKKyAgICAgICAgfQorCWgKKwkvXldyaXR0ZW4gYnkvcScgPCAiJHByb2dwYXRoIgorICAgIGVjaG8KKyAgICBldmFsIFwkYnNfZWNobyBcIiIkdXNhZ2VfbWVzc2FnZSJcIgorfQogCiAKLQotCi0KLW1hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKLW1hZ2ljX2V4ZT0iJSUlTUFHSUMgRVhFIHZhcmlhYmxlJSUlIgotCi0jIEdsb2JhbCB2YXJpYWJsZXMuCi1ub25vcHQ9Ci1wcmVzZXJ2ZV9hcmdzPQotbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgotbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgotZXh0cmFjdGVkX2FyY2hpdmVzPQotZXh0cmFjdGVkX3NlcmlhbD0wCi0KLSMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAotIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCi0jIGxlZnQgb3ZlciBieSBzaGVsbHMuCi1leGVjX2NtZD0KLQotIyBmdW5jX2FwcGVuZCB2YXIgdmFsdWUKLSMgQXBwZW5kIFZBTFVFIHRvIHRoZSBlbmQgb2Ygc2hlbGwgdmFyaWFibGUgVkFSLgotZnVuY19hcHBlbmQgKCkKKyMgZnVuY192ZXJzaW9uCisjIC0tLS0tLS0tLS0tLQorIyBFY2hvIHZlcnNpb24gbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3ZlcnNpb24gKCkKIHsKLSAgICBldmFsICIkezF9PVwkJHsxfVwkezJ9IgotfSAjIGZ1bmNfYXBwZW5kIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorICAgICRkZWJ1Z19jbWQKIAotIyBmdW5jX2FwcGVuZF9xdW90ZWQgdmFyIHZhbHVlCi0jIFF1b3RlIFZBTFVFIGFuZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAotIyBieSBhIHNwYWNlLgotZnVuY19hcHBlbmRfcXVvdGVkICgpCisgICAgcHJpbnRmICclc1xuJyAiJHByb2duYW1lICRzY3JpcHR2ZXJzaW9uIgorICAgICRTRUQgLW4gJy9eIyMvcQorICAgICAgICAvKEMpLyFiIGdvCisgICAgICAgIDptb3JlCisgICAgICAgIC9cLi8heworICAgICAgICAgIE4KKyAgICAgICAgICBzfFxuIyB8IHwKKyAgICAgICAgICBiIG1vcmUKKyAgICAgICAgfQorICAgICAgICA6Z28KKyAgICAgICAgL14jIFdyaXR0ZW4gYnkgLywvIyB3YXJyYW50eTsgLyB7CisgICAgICAgICAgc3xeIyB8fAorICAgICAgICAgIHN8XiMgKiR8fAorICAgICAgICAgIHN8XCgoQylcKVsgMC05LC1dKlsgLC1dXChbMS05XVswLTldKiBcKXxcMSBcMnwKKyAgICAgICAgICBwCisgICAgICAgIH0KKyAgICAgICAgL14jIFdyaXR0ZW4gYnkgLyB7CisgICAgICAgICAgc3xeIyB8fAorICAgICAgICAgIHAKKyAgICAgICAgfQorICAgICAgICAvXndhcnJhbnR5OyAvcScgPCAiJHByb2dwYXRoIgorCisgICAgZXhpdCAkPworfQorCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXBhdHRlcm46ICIxMC9zY3JpcHR2ZXJzaW9uPSU6eS0lMDJtLSUwMmQuJTAySDsgIyBVVEMiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyBFbmQ6CisKKyMgU2V0IGEgdmVyc2lvbiBzdHJpbmcuCitzY3JpcHR2ZXJzaW9uPScoR05VIGxpYnRvb2wpIDIuNC4yLjQxOCcKKworCisjIGZ1bmNfZWNobyBBUkcuLi4KKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBMaWJ0b29sIGFsc28gZGlzcGxheXMgdGhlIGN1cnJlbnQgbW9kZSBpbiBtZXNzYWdlcywgc28gb3ZlcnJpZGUKKyMgZnVuY2xpYi5zaCBmdW5jX2VjaG8gd2l0aCB0aGlzIGN1c3RvbSBkZWZpbml0aW9uLgorZnVuY19lY2hvICgpCiB7Ci0gICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKLSAgICBldmFsICIkezF9PVwkJHsxfVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCi19ICMgZnVuY19hcHBlbmRfcXVvdGVkIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorICAgICRkZWJ1Z19jbWQKKworICAgIF9HX21lc3NhZ2U9JCoKKworICAgIGZ1bmNfZWNob19JRlM9JElGUworICAgIElGUz0kbmwKKyAgICBmb3IgX0dfbGluZSBpbiAkX0dfbWVzc2FnZTsgZG8KKyAgICAgIElGUz0kZnVuY19lY2hvX0lGUworICAgICAgJGJzX2VjaG8gIiRwcm9nbmFtZSR7b3B0X21vZGUrOiAkb3B0X21vZGV9OiAkX0dfbGluZSIKKyAgICBkb25lCisgICAgSUZTPSRmdW5jX2VjaG9fSUZTCit9CiAKIAotIyBmdW5jX2FyaXRoIGFyaXRobWV0aWMtdGVybS4uLgotZnVuY19hcml0aCAoKQorIyBmdW5jX3dhcm5pbmcgQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlidG9vbCB3YXJuaW5ncyBhcmUgbm90IGNhdGVnb3JpemVkLCBzbyBvdmVycmlkZSBmdW5jbGliLnNoCisjIGZ1bmNfd2FybmluZyB3aXRoIHRoaXMgc2ltcGxlciBkZWZpbml0aW9uLgorZnVuY193YXJuaW5nICgpCiB7Ci0gICAgZnVuY19hcml0aF9yZXN1bHQ9YGV4cHIgIiR7QH0iYAotfSAjIGZ1bmNfYXJpdGggbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisgICAgJGRlYnVnX2NtZAorCisgICAgJHdhcm5pbmdfZnVuYyAkezErIiRAIn0KK30KIAogCi0jIGZ1bmNfbGVuIHN0cmluZwotIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgotZnVuY19sZW4gKCkKLXsKLSAgICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiR7MX0iIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKLX0gIyBmdW5jX2xlbiBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE9wdGlvbnMgcGFyc2luZy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBIb29rIGluIHRoZSBmdW5jdGlvbnMgdG8gbWFrZSBzdXJlIG91ciBvd24gb3B0aW9ucyBhcmUgcGFyc2VkIGR1cmluZworIyB0aGUgb3B0aW9uIHBhcnNpbmcgbG9vcC4KKwordXNhZ2U9JyRwcm9ncGF0aCBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uJworCisjIFNob3J0IGhlbHAgbWVzc2FnZSBpbiByZXNwb25zZSB0byAnLWgnLgordXNhZ2VfbWVzc2FnZT0iT3B0aW9uczoKKyAgICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworICAgICAgIC0tZGVidWcgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIHNoZWxsIHRyYWNpbmcKKyAgIC1uLCAtLWRyeS1ydW4gICAgICAgICAgICBkaXNwbGF5IGNvbW1hbmRzIHdpdGhvdXQgbW9kaWZ5aW5nIGFueSBmaWxlcworICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorICAgICAgIC0tbW9kZT1NT0RFICAgICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFCisgICAgICAgLS1uby13YXJuaW5ncyAgICAgICAgZXF1aXZhbGVudCB0byAnLVdub25lJworICAgICAgIC0tcHJlc2VydmUtZHVwLWRlcHMgIGRvbid0IHJlbW92ZSBkdXBsaWNhdGUgZGVwZW5kZW5jeSBsaWJyYXJpZXMKKyAgICAgICAtLXF1aWV0LCAtLXNpbGVudCAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworICAgLXYsIC0tdmVyYm9zZSAgICAgICAgICAgIHByaW50IG1vcmUgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGFuIGRlZmF1bHQKKyAgICAgICAtLXZlcnNpb24gICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uCisgICAtVywgLS13YXJuaW5ncz1DQVRFR09SWSAgcmVwb3J0IHRoZSB3YXJuaW5ncyBmYWxsaW5nIGluIENBVEVHT1JZIFthbGxdCisgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQorIgorCisjIEFkZGl0aW9uYWwgdGV4dCBhcHBlbmRlZCB0byAndXNhZ2VfbWVzc2FnZScgaW4gcmVzcG9uc2UgdG8gJy0taGVscCcuCitsb25nX2hlbHBfbWVzc2FnZT0kbG9uZ19oZWxwX21lc3NhZ2UiCisKK01PREUgbXVzdCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGNsZWFuICAgICAgICAgICByZW1vdmUgZmlsZXMgZnJvbSB0aGUgYnVpbGQgZGlyZWN0b3J5CisgICAgICAgY29tcGlsZSAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyAgICAgICBleGVjdXRlICAgICAgICAgYXV0b21hdGljYWxseSBzZXQgbGlicmFyeSBwYXRoLCB0aGVuIHJ1biBhIHByb2dyYW0KKyAgICAgICBmaW5pc2ggICAgICAgICAgY29tcGxldGUgdGhlIGluc3RhbGxhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcworICAgICAgIGluc3RhbGwgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworICAgICAgIGxpbmsgICAgICAgICAgICBjcmVhdGUgYSBsaWJyYXJ5IG9yIGFuIGV4ZWN1dGFibGUKKyAgICAgICB1bmluc3RhbGwgICAgICAgcmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxlZCBkaXJlY3RvcnkKKworTU9ERS1BUkdTIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBNT0RFLiAgV2hlbiBwYXNzZWQgYXMgZmlyc3Qgb3B0aW9uLAorJy0tbW9kZT1NT0RFJyBtYXkgYmUgYWJicmV2aWF0ZWQgYXMgJ01PREUnIG9yIGEgdW5pcXVlIGFiYnJldmlhdGlvbiBvZiB0aGF0LgorVHJ5ICckcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisKK1doZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAoraW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOgorCisgICAgICAgaG9zdC10cmlwbGV0OiAgICRob3N0CisgICAgICAgc2hlbGw6ICAgICAgICAgICRTSEVMTAorICAgICAgIGNvbXBpbGVyOiAgICAgICAkTFRDQworICAgICAgIGNvbXBpbGVyIGZsYWdzOiAkTFRDRkxBR1MKKyAgICAgICBsaW5rZXI6ICAgICAgICAgJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyAgICAgICB2ZXJzaW9uOiAgICAgICAgJHByb2duYW1lIChHTlUgbGlidG9vbCkgMi40LjIuNDE4CisgICAgICAgYXV0b21ha2U6ICAgICAgIGAoJEFVVE9NQUtFIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgCisgICAgICAgYXV0b2NvbmY6ICAgICAgIGAoJEFVVE9DT05GIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KK0dOVSBsaWJ0b29sIGhvbWUgcGFnZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9saWJ0b29sLz4uCitHZW5lcmFsIGhlbHAgdXNpbmcgR05VIHNvZnR3YXJlOiA8aHR0cDovL3d3dy5nbnUub3JnL2dldGhlbHAvPi4iCiAKIAotIyBmdW5jX2xvMm8gb2JqZWN0Ci1mdW5jX2xvMm8gKCkKLXsKLSAgICBmdW5jX2xvMm9fcmVzdWx0PWAkRUNITyAiJHsxfSIgfCAkU0VEICIkbG8ybyJgCi19ICMgZnVuY19sbzJvIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorIyBmdW5jX2xvMm8gT0JKRUNULU5BTUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyYW5zZm9ybSBPQkpFQ1QtTkFNRSBmcm9tIGEgJy5sbycgc3VmZml4IHRvIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYworIyBvYmplY3Qgc3VmZml4LgorCitsbzJvPXMvXFwubG9cJC8uJG9iamV4dC8KK28ybG89cy9cXC4kb2JqZXh0XCQvLmxvLworCitpZiB0ZXN0IHllcyA9ICIkX0dfSEFWRV9YU0lfT1BTIjsgdGhlbgorICBldmFsICdmdW5jX2xvMm8gKCkKKyAgeworICAgIGNhc2UgJDEgaW4KKyAgICAgICoubG8pIGZ1bmNfbG8yb19yZXN1bHQ9JHsxJS5sb30uJG9iamV4dCA7OworICAgICAgKiAgICkgZnVuY19sbzJvX3Jlc3VsdD0kMSAgICAgICAgICAgICAgIDs7CisgICAgZXNhYworICB9JworCisgICMgZnVuY194Zm9ybSBMSUJPQkotT1ItU09VUkNFCisgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICMgVHJhbnNmb3JtIExJQk9CSi1PUi1TT1VSQ0UgZnJvbSBhICcubycgb3IgJy5jJyAob3Igb3RoZXJ3aXNlKQorICAjIHN1ZmZpeCB0byBhICcubG8nIGxpYnRvb2wtb2JqZWN0IHN1ZmZpeC4KKyAgZXZhbCAnZnVuY194Zm9ybSAoKQorICB7CisgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sbworICB9JworZWxzZQorICAjIC4uLm90aGVyd2lzZSBmYWxsIGJhY2sgdG8gdXNpbmcgc2VkLgorICBmdW5jX2xvMm8gKCkKKyAgeworICAgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkMSIgfCAkU0VEICIkbG8ybyJgCisgIH0KKworICBmdW5jX3hmb3JtICgpCisgIHsKKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgJ3N8XC5bXi5dKiR8LmxvfCdgCisgIH0KK2ZpCiAKIAotIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKLWZ1bmNfeGZvcm0gKCkKLXsKLSAgICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKLX0gIyBmdW5jX3hmb3JtIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgotCi0KLSMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIGFyZy4uLgorIyBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gQVJHLi4uCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKICMgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUgaGludCwgYW5kIGV4aXQuCiBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gKCkKIHsKLSAgICBmdW5jX2Vycm9yICR7MSsiJEAifQotICAgIGZ1bmNfZXJyb3IgIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi0gICAgZnVuY19mYXRhbF9lcnJvciAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCisgICAgZnVuY19fZmF0YWxfZXJyb3IgJHsxKyIkQCJ9IFwKKyAgICAgICJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uIiBcCisgICAgICAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4iCiB9CiAKIAogIyBmdW5jX2NvbmZpZworIyAtLS0tLS0tLS0tLQogIyBEaXNwbGF5IHRoZSBjb25maWd1cmF0aW9uIGZvciBhbGwgdGhlIHRhZ3MgaW4gdGhpcyBzY3JpcHQuCiBmdW5jX2NvbmZpZyAoKQogewpAQCAtOTE1LDE3ICsyMDQ4LDE5IEBACiAgICAgZXhpdCAkPwogfQogCisKICMgZnVuY19mZWF0dXJlcworIyAtLS0tLS0tLS0tLS0tCiAjIERpc3BsYXkgdGhlIGZlYXR1cmVzIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KIGZ1bmNfZmVhdHVyZXMgKCkKIHsKICAgICBlY2hvICJob3N0OiAkaG9zdCIKLSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAgICAgICBlY2hvICJlbmFibGUgc2hhcmVkIGxpYnJhcmllcyIKICAgICBlbHNlCiAgICAgICBlY2hvICJkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMiCiAgICAgZmkKLSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgogICAgICAgZWNobyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCiAgICAgZWxzZQogICAgICAgZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgpAQCAtOTM0LDI5OCArMjA2OSwzMjUgQEAKICAgICBleGl0ICQ/CiB9CiAKLSMgZnVuY19lbmFibGVfdGFnIHRhZ25hbWUKKworIyBmdW5jX2VuYWJsZV90YWcgVEFHTkFNRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBWZXJpZnkgdGhhdCBUQUdOQU1FIGlzIHZhbGlkLCBhbmQgZWl0aGVyIGZsYWcgYW4gZXJyb3IgYW5kIGV4aXQsIG9yCiAjIGVuYWJsZSB0aGUgVEFHTkFNRSB0YWcuICBXZSBhbHNvIGFkZCBUQUdOQU1FIHRvIHRoZSBnbG9iYWwgJHRhZ2xpc3QKICMgdmFyaWFibGUgaGVyZS4KIGZ1bmNfZW5hYmxlX3RhZyAoKQogewotICAjIEdsb2JhbCB2YXJpYWJsZToKLSAgdGFnbmFtZT0iJDEiCisgICAgIyBHbG9iYWwgdmFyaWFibGU6CisgICAgdGFnbmFtZT0kMQogCi0gIHJlX2JlZ2luY2Y9Il4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCi0gIHJlX2VuZGNmPSJeIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKLSAgc2VkX2V4dHJhY3RjZj0iLyRyZV9iZWdpbmNmLywvJHJlX2VuZGNmL3AiCisgICAgcmVfYmVnaW5jZj0iXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVcJCIKKyAgICByZV9lbmRjZj0iXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgICAgc2VkX2V4dHJhY3RjZj0vJHJlX2JlZ2luY2YvLC8kcmVfZW5kY2YvcAogCi0gICMgVmFsaWRhdGUgdGFnbmFtZS4KLSAgY2FzZSAkdGFnbmFtZSBpbgotICAgICpbIS1fQS1aYS16MC05LC9dKikKLSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIgotICAgICAgOzsKLSAgZXNhYworICAgICMgVmFsaWRhdGUgdGFnbmFtZS4KKyAgICBjYXNlICR0YWduYW1lIGluCisgICAgICAqWyEtX0EtWmEtejAtOSwvXSopCisgICAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIgorICAgICAgICA7OworICAgIGVzYWMKIAotICAjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3cgaXQncwotICAjIHRoZXJlIGJ1dCBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KLSAgY2FzZSAkdGFnbmFtZSBpbgotICAgIENDKSA7OworICAgICMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdyBpdCdzCisgICAgIyB0aGVyZSBidXQgbm90IHNwZWNpYWxseSBtYXJrZWQuCisgICAgY2FzZSAkdGFnbmFtZSBpbgorICAgICAgICBDQykgOzsKICAgICAqKQotICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQl0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKyAgICAgICAgaWYgJEdSRVAgIiRyZV9iZWdpbmNmIiAiJHByb2dwYXRoIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIHRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgogCi0JIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4gIEJlIGNhcmVmdWwgdG8gcXVvdGUgdGhlIHBhdGgKLQkjIGFuZCB0aGUgc2VkIHNjcmlwdCwgdG8gYXZvaWQgc3BsaXR0aW5nIG9uIHdoaXRlc3BhY2UsIGJ1dAotCSMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KLQkjIHF1b3RlcyB3ZSBoYXZlIHRvIGRvIGl0IGluIDIgc3RlcHM6Ci0JZXh0cmFjdGVkY2Y9YCRTRUQgLW4gLWUgIiRzZWRfZXh0cmFjdGNmIiA8ICIkcHJvZ3BhdGgiYAotCWV2YWwgIiRleHRyYWN0ZWRjZiIKLSAgICAgIGVsc2UKLQlmdW5jX2Vycm9yICJpZ25vcmluZyB1bmtub3duIHRhZyAkdGFnbmFtZSIKLSAgICAgIGZpCi0gICAgICA7OwotICBlc2FjCisJICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgQmUgY2FyZWZ1bCB0byBxdW90ZSB0aGUgcGF0aAorCSAgIyBhbmQgdGhlIHNlZCBzY3JpcHQsIHRvIGF2b2lkIHNwbGl0dGluZyBvbiB3aGl0ZXNwYWNlLCBidXQKKwkgICMgYWxzbyBkb24ndCB1c2Ugbm9uLXBvcnRhYmxlIHF1b3RlcyB3aXRoaW4gYmFja3F1b3RlcyB3aXRoaW4KKwkgICMgcXVvdGVzIHdlIGhhdmUgdG8gZG8gaXQgaW4gMiBzdGVwczoKKwkgIGV4dHJhY3RlZGNmPWAkU0VEIC1uIC1lICIkc2VkX2V4dHJhY3RjZiIgPCAiJHByb2dwYXRoImAKKwkgIGV2YWwgIiRleHRyYWN0ZWRjZiIKKyAgICAgICAgZWxzZQorCSAgZnVuY19lcnJvciAiaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgZXNhYwogfQogCisKICMgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFbnN1cmUgdGhhdCB3ZSBhcmUgdXNpbmcgbTQgbWFjcm9zLCBhbmQgbGlidG9vbCBzY3JpcHQgZnJvbSB0aGUgc2FtZQogIyByZWxlYXNlIG9mIGxpYnRvb2wuCiBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2ggKCkKIHsKLSAgaWYgdGVzdCAiJHBhY2thZ2VfcmV2aXNpb24iICE9ICIkbWFjcm9fcmV2aXNpb24iOyB0aGVuCi0gICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KLSAgICAgIGlmIHRlc3QgLXogIiRtYWNyb192ZXJzaW9uIjsgdGhlbgotICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorICAgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgorICAgICAgaWYgdGVzdCAiJFZFUlNJT04iICE9ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAteiAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKICRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKICRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgogJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgogJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgogX0xUX0VPRgotICAgICAgZWxzZQotICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorICAgICAgICBlbHNlCisgICAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKICRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKICRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSAkUEFDS0FHRSAkbWFjcm9fdmVyc2lvbi4KICRwcm9nbmFtZTogWW91IHNob3VsZCByZWNyZWF0ZSBhY2xvY2FsLm00IHdpdGggbWFjcm9zIGZyb20gJFBBQ0tBR0UgJFZFUlNJT04KICRwcm9nbmFtZTogYW5kIHJ1biBhdXRvY29uZiBhZ2Fpbi4KIF9MVF9FT0YKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKICRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uLAogJHByb2duYW1lOiBidXQgdGhlIGRlZmluaXRpb24gb2YgdGhpcyBMVF9JTklUIGNvbWVzIGZyb20gcmV2aXNpb24gJG1hY3JvX3JldmlzaW9uLgogJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSByZXZpc2lvbiAkcGFja2FnZV9yZXZpc2lvbgogJHByb2duYW1lOiBvZiAkUEFDS0FHRSAkVkVSU0lPTiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgogX0xUX0VPRgotICAgIGZpCisgICAgICBmaQogCi0gICAgZXhpdCAkRVhJVF9NSVNNQVRDSAotICBmaQorICAgICAgZXhpdCAkRVhJVF9NSVNNQVRDSAorICAgIGZpCiB9CiAKIAotIyBTaG9ydGhhbmQgZm9yIC0tbW9kZT1mb28sIG9ubHkgdmFsaWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50Ci1jYXNlICQxIGluCi1jbGVhbnxjbGVhfGNsZXxjbCkKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY2xlYW4gJHsxKyIkQCJ9OyBzaGlmdAotICA7OwotY29tcGlsZXxjb21waWx8Y29tcGl8Y29tcHxjb218Y298YykKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgY29tcGlsZSAkezErIiRAIn07IHNoaWZ0Ci0gIDs7Ci1leGVjdXRlfGV4ZWN1dHxleGVjdXxleGVjfGV4ZXxleHxlKQotICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBleGVjdXRlICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLWZpbmlzaHxmaW5pc3xmaW5pfGZpbnxmaXxmKQotICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBmaW5pc2ggJHsxKyIkQCJ9OyBzaGlmdAotICA7OwotaW5zdGFsbHxpbnN0YWx8aW5zdGF8aW5zdHxpbnN8aW58aSkKLSAgc2hpZnQ7IHNldCBkdW1teSAtLW1vZGUgaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0Ci0gIDs7Ci1saW5rfGxpbnxsaXxsKQotICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBsaW5rICR7MSsiJEAifTsgc2hpZnQKLSAgOzsKLXVuaW5zdGFsbHx1bmluc3RhbHx1bmluc3RhfHVuaW5zdHx1bmluc3x1bmlufHVuaXx1bnx1KQotICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSB1bmluc3RhbGwgJHsxKyIkQCJ9OyBzaGlmdAotICA7OwotZXNhYwotCi0KLQotIyBPcHRpb24gZGVmYXVsdHM6Ci1vcHRfZGVidWc9Ogotb3B0X2RyeV9ydW49ZmFsc2UKLW9wdF9jb25maWc9ZmFsc2UKLW9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz1mYWxzZQotb3B0X2ZlYXR1cmVzPWZhbHNlCi1vcHRfZmluaXNoPWZhbHNlCi1vcHRfaGVscD1mYWxzZQotb3B0X2hlbHBfYWxsPWZhbHNlCi1vcHRfc2lsZW50PToKLW9wdF93YXJuaW5nPToKLW9wdF92ZXJib3NlPToKLW9wdF9zaWxlbnQ9ZmFsc2UKLW9wdF92ZXJib3NlPWZhbHNlCi0KLQotIyBQYXJzZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuICBUaGlzIGNvbWVzIGFzIHNvb24gYXMgcG9zc2libGUgaW4gdGhlCi0jIHNjcmlwdCB0byBtYWtlIHRoaW5ncyBsaWtlIGAtLXZlcnNpb24nIGhhcHBlbiBhcyBxdWlja2x5IGFzIHdlIGNhbi4KKyMgbGlidG9vbF9vcHRpb25zX3ByZXAgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJlcGFyYXRpb24gZm9yIG9wdGlvbnMgcGFyc2VkIGJ5IGxpYnRvb2wuCitsaWJ0b29sX29wdGlvbnNfcHJlcCAoKQogewotICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCi0gIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCi0gICAgb3B0PSIkMSIKLSAgICBzaGlmdAotICAgIGNhc2UgJG9wdCBpbgotICAgICAgLS1kZWJ1Z3wteCkJb3B0X2RlYnVnPSdzZXQgLXgnCi0JCQlmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCi0JCQkkb3B0X2RlYnVnCi0JCQk7OwotICAgICAgLS1kcnktcnVufC0tZHJ5cnVufC1uKQotCQkJb3B0X2RyeV9ydW49OgotCQkJOzsKLSAgICAgIC0tY29uZmlnKQotCQkJb3B0X2NvbmZpZz06Ci1mdW5jX2NvbmZpZwotCQkJOzsKLSAgICAgIC0tZGxvcGVufC1kbG9wZW4pCi0JCQlvcHRhcmc9IiQxIgotCQkJb3B0X2Rsb3Blbj0iJHtvcHRfZGxvcGVuKyRvcHRfZGxvcGVuCi19JG9wdGFyZyIKLQkJCXNoaWZ0Ci0JCQk7OwotICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKLQkJCW9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz06Ci0JCQk7OwotICAgICAgLS1mZWF0dXJlcykKLQkJCW9wdF9mZWF0dXJlcz06Ci1mdW5jX2ZlYXR1cmVzCi0JCQk7OwotICAgICAgLS1maW5pc2gpCi0JCQlvcHRfZmluaXNoPToKLXNldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKLQkJCTs7Ci0gICAgICAtLWhlbHApCi0JCQlvcHRfaGVscD06Ci0JCQk7OwotICAgICAgLS1oZWxwLWFsbCkKLQkJCW9wdF9oZWxwX2FsbD06Ci1vcHRfaGVscD0nOiBoZWxwLWFsbCcKLQkJCTs7Ci0gICAgICAtLW1vZGUpCi0JCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKLQkJCW9wdGFyZz0iJDEiCi0JCQlvcHRfbW9kZT0iJG9wdGFyZyIKLWNhc2UgJG9wdGFyZyBpbgotICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgotICBjbGVhbnxjb21waWxlfGV4ZWN1dGV8ZmluaXNofGluc3RhbGx8bGlua3xyZWxpbmt8dW5pbnN0YWxsKSA7OworICAgICRkZWJ1Z19tb2RlCiAKLSAgIyBDYXRjaCBhbnl0aGluZyBlbHNlIGFzIGFuIGVycm9yCi0gICopIGZ1bmNfZXJyb3IgImludmFsaWQgYXJndW1lbnQgZm9yICRvcHQiCi0gICAgIGV4aXRfY21kPWV4aXQKLSAgICAgYnJlYWsKLSAgICAgOzsKLWVzYWMKLQkJCXNoaWZ0Ci0JCQk7OwotICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKLQkJCW9wdF9zaWxlbnQ9ZmFsc2UKLWZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgotCQkJOzsKLSAgICAgIC0tbm8td2FybmluZ3wtLW5vLXdhcm4pCi0JCQlvcHRfd2FybmluZz1mYWxzZQotZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCi0JCQk7OwotICAgICAgLS1uby12ZXJib3NlKQotCQkJb3B0X3ZlcmJvc2U9ZmFsc2UKLWZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgotCQkJOzsKLSAgICAgIC0tc2lsZW50fC0tcXVpZXQpCi0JCQlvcHRfc2lsZW50PToKLWZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0IgotICAgICAgICBvcHRfdmVyYm9zZT1mYWxzZQotCQkJOzsKLSAgICAgIC0tdmVyYm9zZXwtdikKLQkJCW9wdF92ZXJib3NlPToKLWZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0Igotb3B0X3NpbGVudD1mYWxzZQotCQkJOzsKLSAgICAgIC0tdGFnKQotCQkJdGVzdCAkIyA9IDAgJiYgZnVuY19taXNzaW5nX2FyZyAkb3B0ICYmIGJyZWFrCi0JCQlvcHRhcmc9IiQxIgotCQkJb3B0X3RhZz0iJG9wdGFyZyIKLWZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkb3B0ICRvcHRhcmciCi1mdW5jX2VuYWJsZV90YWcgIiRvcHRhcmciCi0JCQlzaGlmdAotCQkJOzsKKyAgICAjIE9wdGlvbiBkZWZhdWx0czoKKyAgICBvcHRfY29uZmlnPWZhbHNlCisgICAgb3B0X2Rsb3Blbj0KKyAgICBvcHRfZHJ5X3J1bj1mYWxzZQorICAgIG9wdF9oZWxwPWZhbHNlCisgICAgb3B0X21vZGU9CisgICAgb3B0X3ByZXNlcnZlX2R1cF9kZXBzPWZhbHNlCisgICAgb3B0X3F1aWV0PWZhbHNlCiAKLSAgICAgIC1cP3wtaCkJCWZ1bmNfdXNhZ2UJCQkJOzsKLSAgICAgIC0taGVscCkJCWZ1bmNfaGVscAkJCQk7OwotICAgICAgLS12ZXJzaW9uKQlmdW5jX3ZlcnNpb24JCQkJOzsKKyAgICBub25vcHQ9CisgICAgcHJlc2VydmVfYXJncz0KIAotICAgICAgIyBTZXBhcmF0ZSBvcHRhcmdzIHRvIGxvbmcgb3B0aW9uczoKLSAgICAgIC0tKj0qKQotCQkJZnVuY19zcGxpdF9sb25nX29wdCAiJG9wdCIKLQkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZSIgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyIgJHsxKyIkQCJ9Ci0JCQlzaGlmdAotCQkJOzsKLQotICAgICAgIyBTZXBhcmF0ZSBub24tYXJndW1lbnQgc2hvcnQgb3B0aW9uczoKLSAgICAgIC1cPyp8LWgqfC1uKnwtdiopCi0JCQlmdW5jX3NwbGl0X3Nob3J0X29wdCAiJG9wdCIKLQkJCXNldCBkdW1teSAiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWUiICItJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyIgJHsxKyIkQCJ9Ci0JCQlzaGlmdAotCQkJOzsKLQotICAgICAgLS0pCQlicmVhawkJCQkJOzsKLSAgICAgIC0qKQkJZnVuY19mYXRhbF9oZWxwICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgJG9wdCciIDs7Ci0gICAgICAqKQkJc2V0IGR1bW15ICIkb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKyAgICAjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKKyAgICBjYXNlICQxIGluCisgICAgY2xlYW58Y2xlYXxjbGV8Y2wpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIGNvbXBpbGV8Y29tcGlsfGNvbXBpfGNvbXB8Y29tfGNvfGMpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgZXhlY3V0ZXxleGVjdXR8ZXhlY3V8ZXhlY3xleGV8ZXh8ZSkKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICBmaW5pc2h8ZmluaXN8ZmluaXxmaW58Zml8ZikKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OworICAgIGluc3RhbGx8aW5zdGFsfGluc3RhfGluc3R8aW5zfGlufGkpCisgICAgICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgICAgIDs7CisgICAgbGlua3xsaW58bGl8bCkKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorICAgICAgOzsKKyAgICB1bmluc3RhbGx8dW5pbnN0YWx8dW5pbnN0YXx1bmluc3R8dW5pbnN8dW5pbnx1bml8dW58dSkKKyAgICAgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgICAgICA7OwogICAgIGVzYWMKLSAgZG9uZQogCi0gICMgVmFsaWRhdGUgb3B0aW9uczoKLQotICAjIHNhdmUgZmlyc3Qgbm9uLW9wdGlvbiBhcmd1bWVudAotICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KLSAgICBub25vcHQ9IiRvcHQiCi0gICAgc2hpZnQKLSAgZmkKLQotICAjIHByZXNlcnZlIC0tZGVidWcKLSAgdGVzdCAiJG9wdF9kZWJ1ZyIgPSA6IHx8IGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAtLWRlYnVnIgotCi0gIGNhc2UgJGhvc3QgaW4KLSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqKQotICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKLSAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9OgotICAgICAgOzsKLSAgICAqKQotICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kb3B0X3ByZXNlcnZlX2R1cF9kZXBzCi0gICAgICA7OwotICBlc2FjCi0KLSAgJG9wdF9oZWxwIHx8IHsKLSAgICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6Ci0gICAgZnVuY19jaGVja192ZXJzaW9uX21hdGNoCi0KLSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXMgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiAhPSB5ZXM7IHRoZW4KLSAgICAgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAibm90IGNvbmZpZ3VyZWQgdG8gYnVpbGQgYW55IGtpbmQgb2YgbGlicmFyeSIKLSAgICBmaQotCi0gICAgIyBEYXJ3aW4gc3Vja3MKLSAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgotCi0gICAgIyBPbmx5IGV4ZWN1dGUgbW9kZSBpcyBhbGxvd2VkIHRvIGhhdmUgLWRsb3BlbiBmbGFncy4KLSAgICBpZiB0ZXN0IC1uICIkb3B0X2Rsb3BlbiIgJiYgdGVzdCAiJG9wdF9tb2RlIiAhPSBleGVjdXRlOyB0aGVuCi0gICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uIFxgLWRsb3BlbiciCi0gICAgICAkRUNITyAiJGhlbHAiIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCi0KLSAgICAjIENoYW5nZSB0aGUgaGVscCBtZXNzYWdlIHRvIGEgbW9kZS1zcGVjaWZpYyBvbmUuCi0gICAgZ2VuZXJpY19oZWxwPSIkaGVscCIKLSAgICBoZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT0kb3B0X21vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKLSAgfQotCi0KLSAgIyBCYWlsIGlmIHRoZSBvcHRpb25zIHdlcmUgc2NyZXdlZAotICAkZXhpdF9jbWQgJEVYSVRfRkFJTFVSRQorICAgICMgUGFzcyBiYWNrIHRoZSBsaXN0IG9mIG9wdGlvbnMuCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBsaWJ0b29sX29wdGlvbnNfcHJlcF9yZXN1bHQ9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CiB9CitmdW5jX2FkZF9ob29rIGZ1bmNfb3B0aW9uc19wcmVwIGxpYnRvb2xfb3B0aW9uc19wcmVwCiAKIAorIyBsaWJ0b29sX3BhcnNlX29wdGlvbnMgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb3ZpZGUgaGFuZGxpbmcgZm9yIGxpYnRvb2wgc3BlY2lmaWMgb3B0aW9ucy4KK2xpYnRvb2xfcGFyc2Vfb3B0aW9ucyAoKQoreworICAgICRkZWJ1Z19jbWQKKworICAgICMgUGVyZm9ybSBvdXIgb3duIGxvb3AgdG8gY29uc3VtZSBhcyBtYW55IG9wdGlvbnMgYXMgcG9zc2libGUgaW4KKyAgICAjIGVhY2ggaXRlcmF0aW9uLgorICAgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICAgICBfR19vcHQ9JDEKKyAgICAgIHNoaWZ0CisgICAgICBjYXNlICRfR19vcHQgaW4KKyAgICAgICAgLS1kcnktcnVufC0tZHJ5cnVufC1uKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2RyeV9ydW49OgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLWNvbmZpZykgICAgICAgZnVuY19jb25maWcgOzsKKworICAgICAgICAtLWRsb3BlbnwtZGxvcGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X2Rsb3Blbj0iJHtvcHRfZGxvcGVuKyRvcHRfZGxvcGVuCit9JDEiCisgICAgICAgICAgICAgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ByZXNlcnZlX2R1cF9kZXBzPTogOzsKKworICAgICAgICAtLWZlYXR1cmVzKSAgICAgZnVuY19mZWF0dXJlcyA7OworCisgICAgICAgIC0tZmluaXNoKSAgICAgICBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0IDs7CisKKyAgICAgICAgLS1oZWxwKSAgICAgICAgIG9wdF9oZWxwPTogOzsKKworICAgICAgICAtLWhlbHAtYWxsKSAgICAgb3B0X2hlbHA9JzogaGVscC1hbGwnIDs7CisKKyAgICAgICAgLS1tb2RlKSAgICAgICAgIHRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJF9HX29wdCAmJiBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgb3B0X21vZGU9JDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJDEgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIyBWYWxpZCBtb2RlIGFyZ3VtZW50czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYW58Y29tcGlsZXxleGVjdXRlfGZpbmlzaHxpbnN0YWxsfGxpbmt8cmVsaW5rfHVuaW5zdGFsbCkgOzsKKworICAgICAgICAgICAgICAgICAgICAgICAgICAjIENhdGNoIGFueXRoaW5nIGVsc2UgYXMgYW4gZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKikgZnVuY19lcnJvciAiaW52YWxpZCBhcmd1bWVudCBmb3IgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdF9jbWQ9ZXhpdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1uby1zaWxlbnR8LS1uby1xdWlldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9xdWlldD1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisgICAgICAgIC0tbm8td2FybmluZ3N8LS1uby13YXJuaW5nfC0tbm8td2FybikKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF93YXJuaW5nPWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS1uby12ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ZlcmJvc2U9ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHByZXNlcnZlX2FyZ3MgIiAkX0dfb3B0IgorICAgICAgICAgICAgICAgICAgICAgICAgOzsKKworICAgICAgICAtLXNpbGVudHwtLXF1aWV0KQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3F1aWV0PToKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJF9HX29wdCIKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS10YWcpICAgICAgICAgIHRlc3QgJCMgPSAwICYmIGZ1bmNfbWlzc2luZ19hcmcgJF9HX29wdCAmJiBicmVhaworICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3RhZz0kMQorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQgJDEiCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jX2VuYWJsZV90YWcgIiQxIgorICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnQKKyAgICAgICAgICAgICAgICAgICAgICAgIDs7CisKKyAgICAgICAgLS12ZXJib3NlfC12KSAgIG9wdF9xdWlldD1mYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3ZlcmJvc2U9OgorICAgICAgICAgICAgICAgICAgICAgICAgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRfR19vcHQiCisgICAgICAgICAgICAgICAgICAgICAgICA7OworCisJIyBBbiBvcHRpb24gbm90IGhhbmRsZWQgYnkgdGhpcyBob29rIGZ1bmN0aW9uOgorICAgICAgICAqKQkJc2V0IGR1bW15ICIkX0dfb3B0IiAkezErIiRAIn07CXNoaWZ0OyBicmVhayAgOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKworICAgICMgc2F2ZSBtb2RpZmllZCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGNhbGxlcgorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgJHsxKyIkQCJ9CisgICAgbGlidG9vbF9wYXJzZV9vcHRpb25zX3Jlc3VsdD0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKK30KK2Z1bmNfYWRkX2hvb2sgZnVuY19wYXJzZV9vcHRpb25zIGxpYnRvb2xfcGFyc2Vfb3B0aW9ucworCisKKworIyBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnMgW0FSR10uLi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFBlcmZvcm0gYW55IHNhbml0eSBjaGVja3Mgb24gb3B0aW9uIHNldHRpbmdzIGFuZC9vciB1bmNvbnN1bWVkCisjIGFyZ3VtZW50cy4KK2xpYnRvb2xfdmFsaWRhdGVfb3B0aW9ucyAoKQoreworICAgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50CisgICAgaWYgdGVzdCAwIC1sdCAkIzsgdGhlbgorICAgICAgbm9ub3B0PSQxCisgICAgICBzaGlmdAorICAgIGZpCisKKyAgICAjIHByZXNlcnZlIC0tZGVidWcKKyAgICB0ZXN0IDogPSAiJGRlYnVnX2NtZCIgfHwgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiIC0tZGVidWciCisKKyAgICBjYXNlICRob3N0IGluCisgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqcHczMiogfCAqY2VnY2MqKQorICAgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPToKKyAgICAgICAgOzsKKyAgICAgICopCisgICAgICAgIG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcworICAgICAgICA7OworICAgIGVzYWMKKworICAgICRvcHRfaGVscCB8fCB7CisgICAgICAjIFNhbml0eSBjaGVja3MgZmlyc3Q6CisgICAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKworICAgICAgdGVzdCB5ZXMgIT0gIiRidWlsZF9saWJ0b29sX2xpYnMiIFwKKyAgICAgICAgJiYgdGVzdCB5ZXMgIT0gIiRidWlsZF9vbGRfbGlicyIgXAorICAgICAgICAmJiBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gIm5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiCisKKyAgICAgICMgRGFyd2luIHN1Y2tzCisgICAgICBldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgorCisgICAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICAgICAgaWYgdGVzdCAtbiAiJG9wdF9kbG9wZW4iICYmIHRlc3QgZXhlY3V0ZSAhPSAiJG9wdF9tb2RlIjsgdGhlbgorICAgICAgICBmdW5jX2Vycm9yICJ1bnJlY29nbml6ZWQgb3B0aW9uICctZGxvcGVuJyIKKyAgICAgICAgJEVDSE8gIiRoZWxwIiAxPiYyCisgICAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKworICAgICAgIyBDaGFuZ2UgdGhlIGhlbHAgbWVzc2FnZSB0byBhIG1vZGUtc3BlY2lmaWMgb25lLgorICAgICAgZ2VuZXJpY19oZWxwPSRoZWxwCisgICAgICBoZWxwPSJUcnkgJyRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICAgIH0KKworICAgICMgUGFzcyBiYWNrIHRoZSB1bnBhcnNlZCBhcmd1bWVudCBsaXN0CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAkezErIiRAIn0KKyAgICBsaWJ0b29sX3ZhbGlkYXRlX29wdGlvbnNfcmVzdWx0PSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAorfQorZnVuY19hZGRfaG9vayBmdW5jX3ZhbGlkYXRlX29wdGlvbnMgbGlidG9vbF92YWxpZGF0ZV9vcHRpb25zCisKKworIyBQcm9jZXNzIG9wdGlvbnMgYXMgZWFybHkgYXMgcG9zc2libGUgc28gdGhhdCAtLWhlbHAgYW5kIC0tdmVyc2lvbgorIyBjYW4gcmV0dXJuIHF1aWNrbHkuCitmdW5jX29wdGlvbnMgJHsxKyIkQCJ9CitldmFsIHNldCBkdW1teSAiJGZ1bmNfb3B0aW9uc19yZXN1bHQiOyBzaGlmdAorCiAKIAogIyMgLS0tLS0tLS0tLS0gIyMKICMjICAgIE1haW4uICAgICMjCiAjIyAtLS0tLS0tLS0tLSAjIwogCittYWdpYz0nJSUlTUFHSUMgdmFyaWFibGUlJSUnCittYWdpY19leGU9JyUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJScKKworIyBHbG9iYWwgdmFyaWFibGVzLgorZXh0cmFjdGVkX2FyY2hpdmVzPQorZXh0cmFjdGVkX3NlcmlhbD0wCisKKyMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisjIGxlZnQgb3ZlciBieSBzaGVsbHMuCitleGVjX2NtZD0KKworCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKK30KKwogIyBmdW5jX2xhbGliX3AgZmlsZQotIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCAnLmxhJyBsaWJyYXJ5IG9yICcubG8nIG9iamVjdCBmaWxlLgogIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAogIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KIGZ1bmNfbGFsaWJfcCAoKQpAQCAtMTIzNiwxMiArMjM5OCwxMiBAQAogfQogCiAjIGZ1bmNfbGFsaWJfdW5zYWZlX3AgZmlsZQotIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCAnLmxhJyBsaWJyYXJ5IG9yICcubG8nIG9iamVjdCBmaWxlLgogIyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHNhbWUgY2hlY2sgYXMgZnVuY19sYWxpYl9wIHdpdGhvdXQKICMgcmVzb3J0aW5nIHRvIGV4dGVybmFsIHByb2dyYW1zLiAgVG8gdGhpcyBlbmQsIGl0IHJlZGlyZWN0cyBzdGRpbiBhbmQKICMgY2xvc2VzIGl0IGFmdGVyd2FyZHMsIHdpdGhvdXQgc2F2aW5nIHRoZSBvcmlnaW5hbCBmaWxlIGRlc2NyaXB0b3IuCiAjIEFzIGEgc2FmZXR5IG1lYXN1cmUsIHVzZSBpdCBvbmx5IHdoZXJlIGEgbmVnYXRpdmUgcmVzdWx0IHdvdWxkIGJlCi0jIGZhdGFsIGFueXdheS4gIFdvcmtzIGlmIGBmaWxlJyBkb2VzIG5vdCBleGlzdC4KKyMgZmF0YWwgYW55d2F5LiAgV29ya3MgaWYgJ2ZpbGUnIGRvZXMgbm90IGV4aXN0LgogZnVuY19sYWxpYl91bnNhZmVfcCAoKQogewogICAgIGxhbGliX3A9bm8KQEAgLTEyNDksMTMgKzI0MTEsMTMgQEAKIAlmb3IgbGFsaWJfcF9sIGluIDEgMiAzIDQKIAlkbwogCSAgICByZWFkIGxhbGliX3BfbGluZQotCSAgICBjYXNlICIkbGFsaWJfcF9saW5lIiBpbgorCSAgICBjYXNlICRsYWxpYl9wX2xpbmUgaW4KIAkJXCNcIEdlbmVyYXRlZFwgYnlcICokUEFDS0FHRSogKSBsYWxpYl9wPXllczsgYnJlYWs7OwogCSAgICBlc2FjCiAJZG9uZQogCWV4ZWMgMDwmNSA1PCYtCiAgICAgZmkKLSAgICB0ZXN0ICIkbGFsaWJfcCIgPSB5ZXMKKyAgICB0ZXN0IHllcyA9ICIkbGFsaWJfcCIKIH0KIAogIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCBmaWxlCkBAIC0xMjg5LDcgKzI0NTEsNyBAQAogewogICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCisgICAgZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIKIH0KIAogIyBmdW5jX2x0d3JhcHBlcl9wIGZpbGUKQEAgLTEzMDgsMTEgKzI0NzAsMTMgQEAKICMgRkFJTF9DTUQgbWF5IHJlYWQtYWNjZXNzIHRoZSBjdXJyZW50IGNvbW1hbmQgaW4gdmFyaWFibGUgQ01EIQogZnVuY19leGVjdXRlX2NtZHMgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAorCiAgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwogICAgIGZvciBjbWQgaW4gJDE7IGRvCi0gICAgICBJRlM9JHNhdmVfaWZzCisgICAgICBJRlM9JHNwJG5sCiAgICAgICBldmFsIGNtZD1cIiRjbWRcIgorICAgICAgSUZTPSRzYXZlX2lmcwogICAgICAgZnVuY19zaG93X2V2YWwgIiRjbWQiICIkezItOn0iCiAgICAgZG9uZQogICAgIElGUz0kc2F2ZV9pZnMKQEAgLTEzMjQsMTAgKzI0ODgsMTEgQEAKICMgTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gY3lnd2luL21pbmd3IHRvIGFwcGVuZCBhIGRvdCB0bwogIyBGSUxFIGV2ZW4gaWYgYm90aCBGSUxFIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCiAjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKLSMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KKyMgJ0ZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KIGZ1bmNfc291cmNlICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKKwogICAgIGNhc2UgJDEgaW4KICAgICAqLyogfCAqXFwqKQkuICIkMSIgOzsKICAgICAqKQkJLiAiLi8kMSIgOzsKQEAgLTEzNTQsMTAgKzI1MTksMTAgQEAKICMgc3RvcmUgdGhlIHJlc3VsdCBpbnRvIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdC4KIGZ1bmNfcmVwbGFjZV9zeXNyb290ICgpCiB7Ci0gIGNhc2UgIiRsdF9zeXNyb290OiQxIiBpbgorICBjYXNlICRsdF9zeXNyb290OiQxIGluCiAgID8qOiIkbHRfc3lzcm9vdCIqKQogICAgIGZ1bmNfc3RyaXBuYW1lICIkbHRfc3lzcm9vdCIgJycgIiQxIgotICAgIGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdD0iPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSc9JyRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKICAgICA7OwogICAqKQogICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCkBAIC0xMzc0LDcgKzI1MzksOCBAQAogIyBhcmcgaXMgdXN1YWxseSBvZiB0aGUgZm9ybSAnZ2NjIC4uLicKIGZ1bmNfaW5mZXJfdGFnICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKKwogICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCiAgICAgICBDQ19xdW90ZWQ9CiAgICAgICBmb3IgYXJnIGluICRDQzsgZG8KQEAgLTEzOTMsNyArMjU1OSw3IEBACiAJZm9yIHogaW4gJGF2YWlsYWJsZV90YWdzOyBkbwogCSAgaWYgJEdSRVAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR6JCIgPCAiJHByb2dwYXRoIiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgICAjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLgotCSAgICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR6JyQvcCcgPCAkcHJvZ3BhdGhgIgorCSAgICBldmFsICJgJFNFRCAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKIAkgICAgQ0NfcXVvdGVkPQogCSAgICBmb3IgYXJnIGluICRDQzsgZG8KIAkgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCkBAIC0xNDE4LDcgKzI1ODQsNyBAQAogCSMgbGluZSBvcHRpb24gbXVzdCBiZSB1c2VkLgogCWlmIHRlc3QgLXogIiR0YWduYW1lIjsgdGhlbgogCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciCisJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggJy0tdGFnJyIKICMJZWxzZQogIwkgIGZ1bmNfdmVyYm9zZSAidXNpbmcgJHRhZ25hbWUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCiAJZmkKQEAgLTE0MzQsMTUgKzI2MDAsMTUgQEAKICMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCiBmdW5jX3dyaXRlX2xpYnRvb2xfb2JqZWN0ICgpCiB7Ci0gICAgd3JpdGVfbGlib2JqPSR7MX0KLSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgotICAgICAgd3JpdGVfbG9iaj1cJyR7Mn1cJworICAgIHdyaXRlX2xpYm9iaj0kMQorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCisgICAgICB3cml0ZV9sb2JqPVwnJDJcJwogICAgIGVsc2UKICAgICAgIHdyaXRlX2xvYmo9bm9uZQogICAgIGZpCiAKLSAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCi0gICAgICB3cml0ZV9vbGRvYmo9XCckezN9XCcKKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisgICAgICB3cml0ZV9vbGRvYmo9XCckM1wnCiAgICAgZWxzZQogICAgICAgd3JpdGVfb2xkb2JqPW5vbmUKICAgICBmaQpAQCAtMTQ1MCw3ICsyNjE2LDcgQEAKICAgICAkb3B0X2RyeV9ydW4gfHwgewogICAgICAgY2F0ID4ke3dyaXRlX2xpYm9ian1UIDw8RU9GCiAjICR3cml0ZV9saWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKLSMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KICMKICMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQogIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCkBAIC0xNDYyLDcgKzI2MjgsNyBAQAogbm9uX3BpY19vYmplY3Q9JHdyaXRlX29sZG9iagogCiBFT0YKLSAgICAgICRNViAiJHt3cml0ZV9saWJvYmp9VCIgIiR7d3JpdGVfbGlib2JqfSIKKyAgICAgICRNViAiJHt3cml0ZV9saWJvYmp9VCIgIiR3cml0ZV9saWJvYmoiCiAgICAgfQogfQogCkBAIC0xNDgyLDggKzI2NDgsOSBAQAogIyBiZSBlbXB0eSBvbiBlcnJvciAob3Igd2hlbiBBUkcgaXMgZW1wdHkpCiBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgIyBVbmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2VzIG5vdCBleGl0IHdpdGggYSBub24temVybyBlcnJvciBjb2RlLCBzbyB3ZQogICAgICMgYXJlIGZvcmNlZCB0byBjaGVjayB0aGUgY29udGVudHMgb2Ygc3Rkb3V0LiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgdGhlCkBAIC0xNDkxLDkgKzI2NTgsOSBAQAogICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBlcnJvciBjb2RlIG9mCiAgICAgIyB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcD1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKLSAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcH0iOyB0aGVuCisgICAgaWYgdGVzdCAiJD8iIC1lcSAwICYmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCI7IHRoZW4KICAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PWAkRUNITyAiJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfdG1wIiB8Ci0gICAgICAgICRTRUQgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAgICAgJFNFRCAtZSAiJHNlZF9uYWl2ZV9iYWNrc2xhc2hpZnkiYAogICAgIGVsc2UKICAgICAgIGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0PQogICAgIGZpCkBAIC0xNTE0LDE4ICsyNjgxLDE5IEBACiAjIGFyZSBjb252ZXJ0aWJsZSwgdGhlbiB0aGUgcmVzdWx0IG1heSBiZSBlbXB0eS4KIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgIyB1bmZvcnR1bmF0ZWx5LCB3aW5lcGF0aCBkb2Vzbid0IGNvbnZlcnQgcGF0aHMsIG9ubHkgZmlsZSBuYW1lcwotICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iIgorICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0KICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgb2xkSUZTPSRJRlMKICAgICBJRlM9OgogICAgIGZvciBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YgaW4gJDE7IGRvCiAgICAgICBJRlM9JG9sZElGUwogICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiIKLSAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIgOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiOyB0aGVuCiAgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KLSAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgICAgICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdAogICAgICAgICBlbHNlCiAgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQgIjskZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCiAgICAgICAgIGZpCkBAIC0xNTU0LDcgKzI3MjIsOCBAQAogIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZG8gbm90IHB1dCBpdCBpbiAkUEFUSC4KIGZ1bmNfY3lncGF0aCAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICBpZiB0ZXN0IC1uICIkTFRfQ1lHUEFUSCIgJiYgdGVzdCAtZiAiJExUX0NZR1BBVEgiOyB0aGVuCiAgICAgZnVuY19jeWdwYXRoX3Jlc3VsdD1gJExUX0NZR1BBVEggIiRAIiAyPi9kZXYvbnVsbGAKICAgICBpZiB0ZXN0ICIkPyIgLW5lIDA7IHRoZW4KQEAgLTE1NjMsNyArMjczMiw3IEBACiAgICAgZmkKICAgZWxzZQogICAgIGZ1bmNfY3lncGF0aF9yZXN1bHQ9Ci0gICAgZnVuY19lcnJvciAiTFRfQ1lHUEFUSCBpcyBlbXB0eSBvciBzcGVjaWZpZXMgbm9uLWV4aXN0ZW50IGZpbGU6IFxgJExUX0NZR1BBVEgnIgorICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiAnJExUX0NZR1BBVEgnIgogICBmaQogfQogI2VuZDogZnVuY19jeWdwYXRoCkBAIC0xNTc0LDEwICsyNzQzLDExIEBACiAjIHJlc3VsdCBpbiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAoKQogewotICAkb3B0X2RlYnVnCisgICRkZWJ1Z19jbWQKKwogICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAotICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKKyAgICAkU0VEIC1lICdzL1sgXSokLy8nIC1lICIkc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCiB9CiAjZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMgogCkBAIC0xNTg4LDEzICsyNzU4LDE0IEBACiAjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBBUkcxKS4KIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgaWYgdGVzdCAteiAiJDIiICYmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgJGRlYnVnX2NtZAorCisgIGlmIHRlc3QgLXogIiQyIiAmJiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCi0gICAgZnVuY19lcnJvciAiICBcYCQxJyIKKyAgICBmdW5jX2Vycm9yICIgICckMSciCiAgICAgZnVuY19lcnJvciAiQ29udGludWluZywgYnV0IHVuaW5zdGFsbGVkIGV4ZWN1dGFibGVzIG1heSBub3Qgd29yay4iCiAgICAgIyBGYWxsYmFjazoKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQogICBmaQogfQogIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sKQEAgLTE2MDYsMTAgKzI3NzcsMTEgQEAKICMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IHRvIGEgc2ltcGxpc3RpYyBmYWxsYmFjayB2YWx1ZSAoc2VlIGJlbG93KS4KIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgIGlmIHRlc3QgLXogIiQ0IiAmJiB0ZXN0IC1uICIkMyI7IHRoZW4KICAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKLSAgICBmdW5jX2Vycm9yICIgIFxgJDMnIgorICAgIGZ1bmNfZXJyb3IgIiAgJyQzJyIKICAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKICAgICAjIEZhbGxiYWNrLiAgVGhpcyBpcyBhIGRlbGliZXJhdGVseSBzaW1wbGlzdGljICJjb252ZXJzaW9uIiBhbmQKICAgICAjIHNob3VsZCBub3QgYmUgImltcHJvdmVkIi4gIFNlZSBsaWJ0b29sLmluZm8uCkBAIC0xNjE4LDcgKzI3OTAsNyBAQAogICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PWBlY2hvICIkMyIgfAogICAgICAgICAkU0VEIC1lICIkbHRfcmVwbGFjZV9wYXRoc2VwX2NoYXJzImAKICAgICBlbHNlCi0gICAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQzIgorICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQzCiAgICAgZmkKICAgZmkKIH0KQEAgLTE2MzAsOSArMjgwMiwxMCBAQAogIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCiBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgY2FzZSAkNCBpbgotICAkMSApIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDMkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAkMSApIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQKICAgICA7OwogICBlc2FjCiAgIGNhc2UgJDQgaW4KQEAgLTE2NDYsNyArMjgxOSw3IEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyAkYnVpbGQgdG8gJGhvc3QgRklMRSBOQU1FIENPTlZFUlNJT04gRlVOQ1RJT05TICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGludm9rZWQgdmlhIGAkdG9faG9zdF9maWxlX2NtZCBBUkcnCisjIGludm9rZWQgdmlhICckdG9faG9zdF9maWxlX2NtZCBBUkcnCiAjCiAjIEluIGVhY2ggY2FzZSwgQVJHIGlzIHRoZSBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCB0byAkaG9zdCBmb3JtYXQuCiAjIFJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgpAQCAtMTY1Nyw3ICsyODMwLDggQEAKICMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY190b19ob3N0X2ZpbGUgKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgJHRvX2hvc3RfZmlsZV9jbWQgIiQxIgogfQogIyBlbmQgZnVuY190b19ob3N0X2ZpbGUKQEAgLTE2NjksNyArMjg0Myw4IEBACiAjIGluICh0aGUgY29tbWEgc2VwYXJhdGVkKSBMQVpZLCBubyBjb252ZXJzaW9uIHRha2VzIHBsYWNlLgogZnVuY190b190b29sX2ZpbGUgKCkKIHsKLSAgJG9wdF9kZWJ1ZworICAkZGVidWdfY21kCisKICAgY2FzZSAsJDIsIGluCiAgICAgKiwiJHRvX3Rvb2xfZmlsZV9jbWQiLCopCiAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQ9JDEKQEAgLTE2ODcsNyArMjg2Miw3IEBACiAjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9maWxlX25vb3AgKCkKIHsKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiB9CiAjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9ub29wCiAKQEAgLTE2OTgsMTEgKzI4NzMsMTIgQEAKICMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQKICAgZmkKICAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKIH0KQEAgLTE3MTQsOCArMjg5MCw5IEBACiAjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9maWxlX2N5Z3dpbl90b193MzIgKCkKIHsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICAkZGVidWdfY21kCisKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSQxCiAgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgogICAgICMgYmVjYXVzZSAkYnVpbGQgaXMgY3lnd2luLCB3ZSBjYWxsICJ0aGUiIGN5Z3BhdGggaW4gJFBBVEg7IG5vIG5lZWQgdG8gdXNlCiAgICAgIyBMVF9DWUdQQVRIIGluIHRoaXMgY2FzZS4KQEAgLTE3MzEsMTEgKzI5MDgsMTIgQEAKICMgYW5kIGEgd29ya2luZyB3aW5lcGF0aC4gUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJDEiCi0gICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdAogICBmaQogICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgogfQpAQCAtMTc0NywxMiArMjkyNSwxMyBAQAogIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiQxIgogICAgIGZ1bmNfY3lncGF0aCAtdSAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAogICBmaQogICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgogfQpAQCAtMTc2NSwxMyArMjk0NCwxNCBAQAogIyBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiBmdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICAjIGNvbnZlcnQgZnJvbSAqbml4IHRvIHczMiwgdGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZyb20gdzMyIHRvIGN5Z3dpbi4KICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKICAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKLSAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAogICBmaQogICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgogfQpAQCAtMTc4MSw3ICsyOTYxLDcgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyAkYnVpbGQgdG8gJGhvc3QgUEFUSCBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgaW52b2tlZCB2aWEgYCR0b19ob3N0X3BhdGhfY21kIEFSRycKKyMgaW52b2tlZCB2aWEgJyR0b19ob3N0X3BhdGhfY21kIEFSRycKICMKICMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KICMgVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgpAQCAtMTgwNSwxMCArMjk4NSwxMSBAQAogdG9faG9zdF9wYXRoX2NtZD0KIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgIGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21kIjsgdGhlbgogICAgIGZ1bmNfc3RyaXBuYW1lICdmdW5jX2NvbnZlcnRfZmlsZV8nICcnICIkdG9faG9zdF9maWxlX2NtZCIKLSAgICB0b19ob3N0X3BhdGhfY21kPSJmdW5jX2NvbnZlcnRfcGF0aF8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0iCisgICAgdG9faG9zdF9wYXRoX2NtZD1mdW5jX2NvbnZlcnRfcGF0aF8kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgIGZpCiB9CiAKQEAgLTE4MTgsNyArMjk5OSw4IEBACiAjIGluIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KIGZ1bmNfdG9faG9zdF9wYXRoICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCiAgICR0b19ob3N0X3BhdGhfY21kICIkMSIKIH0KQEAgLTE4MjksNyArMzAxMSw3IEBACiAjIENvcHkgQVJHIHRvIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9wYXRoX25vb3AgKCkKIHsKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSQxCiB9CiAjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9ub29wCiAKQEAgLTE4NDAsOCArMzAyMiw5IEBACiAjIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20gQVJHLiAgTVNZUwogICAgICMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmU7IGN5Z3BhdGggdHVybnMgdGhlbSBpbnRvICcuOycgYW5kICc7Lic7CkBAIC0xODQ5LDcgKzMwMzIsNyBAQAogICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCiAgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgotICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdAogICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKICAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCiAgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgpAQCAtMTg2Myw4ICszMDQ2LDkgQEAKICMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CiAgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKQEAgLTE4ODMsMTQgKzMwNjcsMTUgQEAKICMgYSB3b3JraW5nIHdpbmVwYXRoLiAgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgIyBTZWUgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzI6CiAgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0CiAgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAogICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKICAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCkBAIC0xOTA0LDE1ICszMDg5LDE2IEBACiAjIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fY3lnd2luICgpCiB7Ci0gICRvcHRfZGVidWcKLSAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMSIKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kMQogICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KICAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKICAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgogICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKICAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCi0gICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jeWdwYXRoX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JGZ1bmNfY3lncGF0aF9yZXN1bHQKICAgICBmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayA6IDogXAogICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKICAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiIDogIiQxIgpAQCAtMTkyNyw4ICszMTEzLDkgQEAKICMgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgogZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiAoKQogewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9JDEKICAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCiAgICAgIyBSZW1vdmUgbGVhZGluZyBhbmQgdHJhaWxpbmcgcGF0aCBzZXBhcmF0b3IgY2hhcmFjdGVycyBmcm9tCiAgICAgIyBBUkcuIG1zeXMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmUsIGN5Z3BhdGggdHVybnMgdGhlbQpAQCAtMTkzNyw3ICszMTI0LDcgQEAKICAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIKICAgICBmdW5jX2N5Z3BhdGggLXUgLXAgIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCIKLSAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0kZnVuY19jeWdwYXRoX3Jlc3VsdAogICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCiAgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgogICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCkBAIC0xOTQ2LDEzICszMTMzLDMxIEBACiAjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fY3lnd2luCiAKIAorIyBmdW5jX2RsbF9kZWZfcCBGSUxFCisjIFRydWUgaWZmIEZJTEUgaXMgYSBXaW5kb3dzIERMTCAnLmRlZicgZmlsZS4KKyMgS2VlcCBpbiBzeW5jIHdpdGggX0xUX0RMTF9ERUZfUCBpbiBsaWJ0b29sLm00CitmdW5jX2RsbF9kZWZfcCAoKQoreworICAkZGVidWdfY21kCisKKyAgZnVuY19kbGxfZGVmX3BfdG1wPWAkU0VEIC1uIFwKKyAgICAtZSAncy9eWwkgXSovLycgXAorICAgIC1lICcvXlwoOy4qXCkqJC9kJyBcCisgICAgLWUgJ3MvXlwoRVhQT1JUU1x8TElCUkFSWVwpXChbCSBdLipcKSokL0RFRi9wJyBcCisgICAgLWUgcSBcCisgICAgIiQxImAKKyAgdGVzdCBERUYgPSAiJGZ1bmNfZGxsX2RlZl9wX3RtcCIKK30KKworCiAjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgogZnVuY19tb2RlX2NvbXBpbGUgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAorCiAgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KICAgICBiYXNlX2NvbXBpbGU9Ci0gICAgc3JjZmlsZT0iJG5vbm9wdCIgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgorICAgIHNyY2ZpbGU9JG5vbm9wdCAgIyAgYWx3YXlzIGtlZXAgYSBub24tZW1wdHkgdmFsdWUgaW4gInNyY2ZpbGUiCiAgICAgc3VwcHJlc3Nfb3B0PXllcwogICAgIHN1cHByZXNzX291dHB1dD0KICAgICBhcmdfbW9kZT1ub3JtYWwKQEAgLTE5NjUsMTIgKzMxNzAsMTIgQEAKICAgICAgIGNhc2UgJGFyZ19tb2RlIGluCiAgICAgICBhcmcgICkKIAkjIGRvIG5vdCAiY29udGludWUiLiAgSW5zdGVhZCwgYWRkIHRoaXMgdG8gYmFzZV9jb21waWxlCi0JbGFzdGFyZz0iJGFyZyIKKwlsYXN0YXJnPSRhcmcKIAlhcmdfbW9kZT1ub3JtYWwKIAk7OwogCiAgICAgICB0YXJnZXQgKQotCWxpYm9iaj0iJGFyZyIKKwlsaWJvYmo9JGFyZwogCWFyZ19tb2RlPW5vcm1hbAogCWNvbnRpbnVlCiAJOzsKQEAgLTE5ODAsNyArMzE4NSw3IEBACiAJY2FzZSAkYXJnIGluCiAJLW8pCiAJICB0ZXN0IC1uICIkbGlib2JqIiAmJiBcCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIKKwkgICAgZnVuY19mYXRhbF9lcnJvciAieW91IGNhbm5vdCBzcGVjaWZ5ICctbycgbW9yZSB0aGFuIG9uY2UiCiAJICBhcmdfbW9kZT10YXJnZXQKIAkgIGNvbnRpbnVlCiAJICA7OwpAQCAtMjAwOSwxMiArMzIxNCwxMiBAQAogCSAgZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgogCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJICBsYXN0YXJnPQotCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJICBzYXZlX2lmcz0kSUZTOyBJRlM9LAogCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KLQkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIElGUz0kc2F2ZV9pZnMKIAkgICAgZnVuY19hcHBlbmRfcXVvdGVkIGxhc3RhcmcgIiRhcmciCiAJICBkb25lCi0JICBJRlM9IiRzYXZlX2lmcyIKKwkgIElGUz0kc2F2ZV9pZnMKIAkgIGZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGxhc3RhcmciCiAJICBsYXN0YXJnPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIApAQCAtMjAyNyw4ICszMjMyLDggQEAKIAkgICMgQWNjZXB0IHRoZSBjdXJyZW50IGFyZ3VtZW50IGFzIHRoZSBzb3VyY2UgZmlsZS4KIAkgICMgVGhlIHByZXZpb3VzICJzcmNmaWxlIiBiZWNvbWVzIHRoZSBjdXJyZW50IGFyZ3VtZW50LgogCSAgIwotCSAgbGFzdGFyZz0iJHNyY2ZpbGUiCi0JICBzcmNmaWxlPSIkYXJnIgorCSAgbGFzdGFyZz0kc3JjZmlsZQorCSAgc3JjZmlsZT0kYXJnCiAJICA7OwogCWVzYWMgICMgIGNhc2UgJGFyZwogCTs7CkBAIC0yMDQzLDEzICszMjQ4LDEzIEBACiAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCiAgICAgICA7OwogICAgIHRhcmdldCkKLSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCBcYC1vJyIKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCAnLW8nIgogICAgICAgOzsKICAgICAqKQogICAgICAgIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgb2JqZWN0LgogICAgICAgdGVzdCAteiAiJGxpYm9iaiIgJiYgewogCWZ1bmNfYmFzZW5hbWUgIiRzcmNmaWxlIgotCWxpYm9iaj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCWxpYm9iaj0kZnVuY19iYXNlbmFtZV9yZXN1bHQKICAgICAgIH0KICAgICAgIDs7CiAgICAgZXNhYwpAQCAtMjA2OSw3ICszMjc0LDcgQEAKICAgICBjYXNlICRsaWJvYmogaW4KICAgICAqLmxvKSBmdW5jX2xvMm8gIiRsaWJvYmoiOyBvYmo9JGZ1bmNfbG8yb19yZXN1bHQgOzsKICAgICAqKQotICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gXGAkbGlib2JqJyIKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tICckbGlib2JqJyIKICAgICAgIDs7CiAgICAgZXNhYwogCkBAIC0yMDc4LDggKzMyODMsOCBAQAogICAgIGZvciBhcmcgaW4gJGxhdGVyOyBkbwogICAgICAgY2FzZSAkYXJnIGluCiAgICAgICAtc2hhcmVkKQotCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCi0JICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwl0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiBcCisJICB8fCBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbm5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgogCWJ1aWxkX29sZF9saWJzPW5vCiAJY29udGludWUKIAk7OwpAQCAtMjEwNSwxNyArMzMxMCwxNyBAQAogICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRsaWJvYmoiCiAgICAgdGVzdCAiWCRsaWJvYmoiICE9ICJYJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IiBcCiAgICAgICAmJiAkRUNITyAiWCRsaWJvYmoiIHwgJEdSRVAgJ1tdfiNeKnt9Ozw+PyInIiciJwkgJigpfGAkW10nIFwKLSAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICAgICYmIGZ1bmNfd2FybmluZyAibGlib2JqIG5hbWUgJyRsaWJvYmonIG1heSBub3QgY29udGFpbiBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIgogICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvYmoiICIvIiAiIgotICAgIG9iam5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLSAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKLSAgICBsb2JqPSR7eGRpcn0kb2JqZGlyLyRvYmpuYW1lCisgICAgb2JqbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKyAgICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgbG9iaj0keGRpciRvYmpkaXIvJG9iam5hbWUKIAogICAgIHRlc3QgLXogIiRiYXNlX2NvbXBpbGUiICYmIFwKICAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiCiAKICAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgotICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCiAgICAgICByZW1vdmVsaXN0PSIkb2JqICRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKICAgICBlbHNlCiAgICAgICByZW1vdmVsaXN0PSIkbG9iaiAkbGlib2JqICR7bGlib2JqfVQiCkBAIC0yMTI3LDE2ICszMzMyLDE2IEBACiAgICAgICBwaWNfbW9kZT1kZWZhdWx0CiAgICAgICA7OwogICAgIGVzYWMKLSAgICBpZiB0ZXN0ICIkcGljX21vZGUiID0gbm8gJiYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorICAgIGlmIHRlc3Qgbm8gPSAiJHBpY19tb2RlIiAmJiB0ZXN0IHBhc3NfYWxsICE9ICIkZGVwbGlic19jaGVja19tZXRob2QiOyB0aGVuCiAgICAgICAjIG5vbi1QSUMgY29kZSBpbiBzaGFyZWQgbGlicmFyaWVzIGlzIG5vdCBzdXBwb3J0ZWQKICAgICAgIHBpY19tb2RlPWRlZmF1bHQKICAgICBmaQogCiAgICAgIyBDYWxjdWxhdGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBvdXRwdXQgb2JqZWN0IGlmIGNvbXBpbGVyIGRvZXMKICAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKLSAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IG5vOyB0aGVuCi0gICAgICBvdXRwdXRfb2JqPWAkRUNITyAiJHNyY2ZpbGUiIHwgJFNFRCAncyVeLiovJSU7IHMlXC5bXi5dKiQlJSdgLiR7b2JqZXh0fQotICAgICAgbG9ja2ZpbGU9IiRvdXRwdXRfb2JqLmxvY2siCisgICAgaWYgdGVzdCBubyA9ICIkY29tcGlsZXJfY19vIjsgdGhlbgorICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIiRzcmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwuW14uXSokJSUnYC4kb2JqZXh0CisgICAgICBsb2NrZmlsZT0kb3V0cHV0X29iai5sb2NrCiAgICAgZWxzZQogICAgICAgb3V0cHV0X29iaj0KICAgICAgIG5lZWRfbG9ja3M9bm8KQEAgLTIxNDUsMTIgKzMzNTAsMTIgQEAKIAogICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCiAgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQotICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRuZWVkX2xvY2tzIjsgdGhlbgogICAgICAgdW50aWwgJG9wdF9kcnlfcnVuIHx8IGxuICIkcHJvZ3BhdGgiICIkbG9ja2ZpbGUiIDI+L2Rldi9udWxsOyBkbwogCWZ1bmNfZWNobyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCiAJc2xlZXAgMgogICAgICAgZG9uZQotICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgorICAgIGVsaWYgdGVzdCB3YXJuID0gIiRuZWVkX2xvY2tzIjsgdGhlbgogICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgogCSRFQ0hPICJcCiAqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgpAQCAtMjE1OCw3ICszMzYzLDcgQEAKIAogVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQogdGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoteW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKIHJlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKIGF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCiBjb21waWxlci4iCkBAIC0yMTgwLDExICszMzg1LDExIEBACiAgICAgcXNyY2ZpbGU9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CiAKICAgICAjIE9ubHkgYnVpbGQgYSBQSUMgb2JqZWN0IGlmIHdlIGFyZSBidWlsZGluZyBsaWJ0b29sIGxpYnJhcmllcy4KLSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiOyB0aGVuCiAgICAgICAjIFdpdGhvdXQgdGhpcyBhc3NpZ25tZW50LCBiYXNlX2NvbXBpbGUgZ2V0cyBlbXB0aWVkLgogICAgICAgZmJzZF9oaWRlb3VzX3NoX2J1Zz0kYmFzZV9jb21waWxlCiAKLSAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3Qgbm8gIT0gIiRwaWNfbW9kZSI7IHRoZW4KIAljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCiAgICAgICBlbHNlCiAJIyBEb24ndCBidWlsZCBQSUMgY29kZQpAQCAtMjIwMSw3ICszNDA2LDcgQEAKICAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiCVwKICAgICAgICAgICAndGVzdCAtbiAiJG91dHB1dF9vYmoiICYmICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJwogCi0gICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisgICAgICBpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiICYmCiAJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCiAJJEVDSE8gIlwKICoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgpAQCAtMjIxMiw3ICszNDE3LDcgQEAKIAogVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQogdGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoteW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKIHJlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKIGF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCiBjb21waWxlci4iCkBAIC0yMjI4LDIwICszNDMzLDIwIEBACiAgICAgICBmaQogCiAgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCi0gICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJHN1cHByZXNzX29wdCI7IHRoZW4KIAlzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCiAgICAgICBmaQogICAgIGZpCiAKICAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCi0gICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgotICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyAhPSAiJHBpY19tb2RlIjsgdGhlbgogCSMgRG9uJ3QgYnVpbGQgUElDIGNvZGUKIAljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSRwaWVfZmxhZyIKICAgICAgIGVsc2UKIAljb21tYW5kPSIkYmFzZV9jb21waWxlICRxc3JjZmlsZSAkcGljX2ZsYWciCiAgICAgICBmaQotICAgICAgaWYgdGVzdCAiJGNvbXBpbGVyX2NfbyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRjb21waWxlcl9jX28iOyB0aGVuCiAJZnVuY19hcHBlbmQgY29tbWFuZCAiIC1vICRvYmoiCiAgICAgICBmaQogCkBAIC0yMjUwLDcgKzM0NTUsNyBAQAogICAgICAgZnVuY19zaG93X2V2YWxfbG9jYWxlICIkY29tbWFuZCIgXAogICAgICAgICAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJwogCi0gICAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuICYmCisgICAgICBpZiB0ZXN0IHdhcm4gPSAiJG5lZWRfbG9ja3MiICYmCiAJIHRlc3QgIlhgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAiICE9ICJYJHNyY2ZpbGUiOyB0aGVuCiAJJEVDSE8gIlwKICoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgpAQCAtMjI2MSw3ICszNDY2LDcgQEAKIAogVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQogdGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoteW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0ICctYycgYW5kICctbycgdG9nZXRoZXIuICBJZiB5b3UKIHJlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKIGF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCiBjb21waWxlci4iCkBAIC0yMjgxLDcgKzM0ODYsNyBAQAogICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKIAogICAgICAgIyBVbmxvY2sgdGhlIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgd2FzIGxvY2tlZAotICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KIAlyZW1vdmVsaXN0PSRsb2NrZmlsZQogICAgICAgICAkUk0gIiRsb2NrZmlsZSIKICAgICAgIGZpCkBAIC0yMjkxLDcgKzM0OTYsNyBAQAogfQogCiAkb3B0X2hlbHAgfHwgewotICB0ZXN0ICIkb3B0X21vZGUiID0gY29tcGlsZSAmJiBmdW5jX21vZGVfY29tcGlsZSAkezErIiRAIn0KKyAgdGVzdCBjb21waWxlID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9CiB9CiAKIGZ1bmNfbW9kZV9oZWxwICgpCkBAIC0yMzExLDcgKzM1MTYsNyBAQAogUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KIAogUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCi0odHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCisodHlwaWNhbGx5ICcvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzICctZicpIHRvIGJlIHBhc3NlZAogdG8gUk0uCiAKIElmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKQEAgLTIzMzAsMTYgKzM1MzUsMTYgQEAKICAgLW5vLXN1cHByZXNzICAgICAgZG8gbm90IHN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBmb3IgbXVsdGlwbGUgcGFzc2VzCiAgIC1wcmVmZXItcGljICAgICAgIHRyeSB0byBidWlsZCBQSUMgb2JqZWN0cyBvbmx5CiAgIC1wcmVmZXItbm9uLXBpYyAgIHRyeSB0byBidWlsZCBub24tUElDIG9iamVjdHMgb25seQotICAtc2hhcmVkICAgICAgICAgICBkbyBub3QgYnVpbGQgYSBcYC5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZwotICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgJy5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZworICAtc3RhdGljICAgICAgICAgICBvbmx5IGJ1aWxkIGEgJy5vJyBmaWxlIHN1aXRhYmxlIGZvciBzdGF0aWMgbGlua2luZwogICAtV2MsRkxBRyAgICAgICAgICBwYXNzIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCiAKLUNPTVBJTEUtQ09NTUFORCBpcyBhIGNvbW1hbmQgdG8gYmUgdXNlZCBpbiBjcmVhdGluZyBhIFxgc3RhbmRhcmQnIG9iamVjdCBmaWxlCitDT01QSUxFLUNPTU1BTkQgaXMgYSBjb21tYW5kIHRvIGJlIHVzZWQgaW4gY3JlYXRpbmcgYSAnc3RhbmRhcmQnIG9iamVjdCBmaWxlCiBmcm9tIHRoZSBnaXZlbiBTT1VSQ0VGSUxFLgogCiBUaGUgb3V0cHV0IGZpbGUgbmFtZSBpcyBkZXRlcm1pbmVkIGJ5IHJlbW92aW5nIHRoZSBkaXJlY3RvcnkgY29tcG9uZW50IGZyb20KLVNPVVJDRUZJTEUsIHRoZW4gc3Vic3RpdHV0aW5nIHRoZSBDIHNvdXJjZSBjb2RlIHN1ZmZpeCBcYC5jJyB3aXRoIHRoZQotbGlicmFyeSBvYmplY3Qgc3VmZml4LCBcYC5sbycuIgorU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4ICcuYycgd2l0aCB0aGUKK2xpYnJhcnkgb2JqZWN0IHN1ZmZpeCwgJy5sbycuIgogICAgICAgICA7OwogCiAgICAgICBleGVjdXRlKQpAQCAtMjM1Miw3ICszNTU3LDcgQEAKIAogICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAogCi1UaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCitUaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byAnLWRsb3BlbicKIGZsYWdzLgogCiBJZiBhbnkgb2YgdGhlIEFSR1MgYXJlIGxpYnRvb2wgZXhlY3V0YWJsZSB3cmFwcGVycywgdGhlbiB0aGV5IGFyZSB0cmFuc2xhdGVkCkBAIC0yMzcxLDcgKzM1NzYsNyBAQAogRWFjaCBMSUJESVIgaXMgYSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyBsaWJ0b29sIGxpYnJhcmllcy4KIAogVGhlIGNvbW1hbmRzIHRoYXQgdGhpcyBtb2RlIGV4ZWN1dGVzIG1heSByZXF1aXJlIHN1cGVydXNlciBwcml2aWxlZ2VzLiAgVXNlCi10aGUgXGAtLWRyeS1ydW4nIG9wdGlvbiBpZiB5b3UganVzdCB3YW50IHRvIHNlZSB3aGF0IHdvdWxkIGJlIGV4ZWN1dGVkLiIKK3RoZSAnLS1kcnktcnVuJyBvcHRpb24gaWYgeW91IGp1c3Qgd2FudCB0byBzZWUgd2hhdCB3b3VsZCBiZSBleGVjdXRlZC4iCiAgICAgICAgIDs7CiAKICAgICAgIGluc3RhbGwpCkBAIC0yMzgxLDcgKzM1ODYsNyBAQAogSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCiAKIElOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQotZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCitlaXRoZXIgdGhlICdpbnN0YWxsJyBvciAnY3AnIHByb2dyYW0uCiAKIFRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgogCkBAIC0yNDA3LDcgKzM2MTIsNyBAQAogICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKICAgLWJpbmRpciBCSU5ESVIgICAgc3BlY2lmeSBwYXRoIHRvIGJpbmFyaWVzIGRpcmVjdG9yeSAoZm9yIHN5c3RlbXMgd2hlcmUKICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIG11c3QgYmUgZm91bmQgaW4gdGhlIFBBVEggc2V0dGluZyBhdCBydW50aW1lKQotICAtZGxvcGVuIEZJTEUgICAgICBcYC1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKKyAgLWRsb3BlbiBGSUxFICAgICAgJy1kbHByZW9wZW4nIEZJTEUgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkIGF0IHJ1bnRpbWUKICAgLWRscHJlb3BlbiBGSUxFICAgbGluayBpbiBGSUxFIGFuZCBhZGQgaXRzIHN5bWJvbHMgdG8gbHRfcHJlbG9hZGVkX3N5bWJvbHMKICAgLWV4cG9ydC1keW5hbWljICAgYWxsb3cgc3ltYm9scyBmcm9tIE9VVFBVVC1GSUxFIHRvIGJlIHJlc29sdmVkIHdpdGggZGxzeW0oMykKICAgLWV4cG9ydC1zeW1ib2xzIFNZTUZJTEUKQEAgLTI0NDEsMjAgKzM2NDYsMjAgQEAKICAgLVhsaW5rZXIgRkxBRyAgICAgcGFzcyBsaW5rZXItc3BlY2lmaWMgRkxBRyBkaXJlY3RseSB0byB0aGUgbGlua2VyCiAgIC1YQ0NsaW5rZXIgRkxBRyAgIHBhc3MgbGluay1zcGVjaWZpYyBGTEFHIHRvIHRoZSBjb21waWxlciBkcml2ZXIgKENDKQogCi1BbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCAnLScpIGFyZSBpZ25vcmVkLgogCi1FdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQorRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluICcubGEnIGFyZQogdHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKIG9iamVjdCBmaWxlcy4KIAotSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCi1vbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCitJZiB0aGUgT1VUUFVULUZJTEUgZW5kcyBpbiAnLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAorb25seSBsaWJyYXJ5IG9iamVjdHMgKCcubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgJy1ycGF0aCcgaXMKIHJlcXVpcmVkLCBleGNlcHQgd2hlbiBjcmVhdGluZyBhIGNvbnZlbmllbmNlIGxpYnJhcnkuCiAKLUlmIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAuYScgb3IgXGAubGliJywgdGhlbiBhIHN0YW5kYXJkIGxpYnJhcnkgaXMgY3JlYXRlZAotdXNpbmcgXGBhcicgYW5kIFxgcmFubGliJywgb3Igb24gV2luZG93cyB1c2luZyBcYGxpYicuCitJZiBPVVRQVVQtRklMRSBlbmRzIGluICcuYScgb3IgJy5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCit1c2luZyAnYXInIGFuZCAncmFubGliJywgb3Igb24gV2luZG93cyB1c2luZyAnbGliJy4KIAotSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKK0lmIE9VVFBVVC1GSUxFIGVuZHMgaW4gJy5sbycgb3IgJy4kb2JqZXh0JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKIGlzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCiAgICAgICAgIDs7CiAKQEAgLTI0NjUsNyArMzY3MCw3IEBACiBSZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGF0aW9uIGRpcmVjdG9yeS4KIAogUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCi0odHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCisodHlwaWNhbGx5ICcvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzICctZicpIHRvIGJlIHBhc3NlZAogdG8gUk0uCiAKIElmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgpAQCAtMjQ3MywxNyArMzY3OCwxNyBAQAogICAgICAgICA7OwogCiAgICAgICAqKQotICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgXGAkb3B0X21vZGUnIgorICAgICAgICBmdW5jX2ZhdGFsX2hlbHAgImludmFsaWQgb3BlcmF0aW9uIG1vZGUgJyRvcHRfbW9kZSciCiAgICAgICAgIDs7CiAgICAgZXNhYwogCiAgICAgZWNobwotICAgICRFQ0hPICJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCisgICAgJEVDSE8gIlRyeSAnJHByb2duYW1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMuIgogfQogCiAjIE5vdyB0aGF0IHdlJ3ZlIGNvbGxlY3RlZCBhIHBvc3NpYmxlIC0tbW9kZSBhcmcsIHNob3cgaGVscCBpZiBuZWNlc3NhcnkKIGlmICRvcHRfaGVscDsgdGhlbgotICBpZiB0ZXN0ICIkb3B0X2hlbHAiID0gOjsgdGhlbgorICBpZiB0ZXN0IDogPSAiJG9wdF9oZWxwIjsgdGhlbgogICAgIGZ1bmNfbW9kZV9oZWxwCiAgIGVsc2UKICAgICB7CkBAIC0yNTE2LDE2ICszNzIxLDE3IEBACiAjIGZ1bmNfbW9kZV9leGVjdXRlIGFyZy4uLgogZnVuY19tb2RlX2V4ZWN1dGUgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAorCiAgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KLSAgICBjbWQ9IiRub25vcHQiCisgICAgY21kPSRub25vcHQKICAgICB0ZXN0IC16ICIkY21kIiAmJiBcCiAgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIgogCiAgICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KICAgICBmb3IgZmlsZSBpbiAkb3B0X2Rsb3BlbjsgZG8KICAgICAgIHRlc3QgLWYgIiRmaWxlIiBcCi0JfHwgZnVuY19mYXRhbF9oZWxwICJcYCRmaWxlJyBpcyBub3QgYSBmaWxlIgorCXx8IGZ1bmNfZmF0YWxfaGVscCAiJyRmaWxlJyBpcyBub3QgYSBmaWxlIgogCiAgICAgICBkaXI9CiAgICAgICBjYXNlICRmaWxlIGluCkBAIC0yNTM1LDcgKzM3NDEsNyBAQAogCiAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KIAlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAotCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiJyRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKIAogCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgogCWRsbmFtZT0KQEAgLTI1NDYsMTggKzM3NTIsMTggQEAKIAlpZiB0ZXN0IC16ICIkZGxuYW1lIjsgdGhlbgogCSAgIyBXYXJuIGlmIGl0IHdhcyBhIHNoYXJlZCBsaWJyYXJ5LgogCSAgdGVzdCAtbiAiJGxpYnJhcnlfbmFtZXMiICYmIFwKLQkgICAgZnVuY193YXJuaW5nICJcYCRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoIFxgLWV4cG9ydC1keW5hbWljJyIKKwkgICAgZnVuY193YXJuaW5nICInJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggJy1leHBvcnQtZHluYW1pYyciCiAJICBjb250aW51ZQogCWZpCiAKIAlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKLQlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCiAJaWYgdGVzdCAtZiAiJGRpci8kb2JqZGlyLyRkbG5hbWUiOyB0aGVuCiAJICBmdW5jX2FwcGVuZCBkaXIgIi8kb2JqZGlyIgogCWVsc2UKIAkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCAnJGRsbmFtZScgaW4gJyRkaXInIG9yICckZGlyLyRvYmpkaXInIgogCSAgZmkKIAlmaQogCTs7CkBAIC0yNTY1LDE4ICszNzcxLDE4IEBACiAgICAgICAqLmxvKQogCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KIAlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKLQlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCWRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCTs7CiAKICAgICAgICopCi0JZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKKwlmdW5jX3dhcm5pbmcgIictZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiCiAJY29udGludWUKIAk7OwogICAgICAgZXNhYwogCiAgICAgICAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUuCiAgICAgICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCi0gICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCisgICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9JGFic2RpcgogCiAgICAgICAjIE5vdyBhZGQgdGhlIGRpcmVjdG9yeSB0byBzaGxpYnBhdGhfdmFyLgogICAgICAgaWYgZXZhbCAidGVzdCAteiBcIlwkJHNobGlicGF0aF92YXJcIiI7IHRoZW4KQEAgLTI1ODgsNyArMzc5NCw3IEBACiAKICAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKICAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCi0gICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSRtYWdpYwogCiAgICAgIyBDaGVjayBpZiBhbnkgb2YgdGhlIGFyZ3VtZW50cyBpcyBhIHdyYXBwZXIgc2NyaXB0LgogICAgIGFyZ3M9CkBAIC0yNjAxLDEyICszODA3LDEyIEBACiAJaWYgZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgIiRmaWxlIjsgdGhlbgogCSAgZnVuY19zb3VyY2UgIiRmaWxlIgogCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KLQkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgorCSAgZmlsZT0kcHJvZ2Rpci8kcHJvZ3JhbQogCWVsaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KIAkgIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgIiRmaWxlIgogCSAgZnVuY19zb3VyY2UgIiRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdCIKIAkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCi0JICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwkgIGZpbGU9JHByb2dkaXIvJHByb2dyYW0KIAlmaQogCTs7CiAgICAgICBlc2FjCkBAIC0yNjE0LDcgKzM4MjAsMTUgQEAKICAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKICAgICBkb25lCiAKLSAgICBpZiB0ZXN0ICJYJG9wdF9kcnlfcnVuIiA9IFhmYWxzZTsgdGhlbgorICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgorICAgICAgIyBEaXNwbGF5IHdoYXQgd291bGQgYmUgZG9uZS4KKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWV2YWwgIlwkRUNITyBcIlwkc2hsaWJwYXRoX3Zhcj1cJCRzaGxpYnBhdGhfdmFyXCIiCisJZWNobyAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKyAgICAgICRFQ0hPICIkY21kJGFyZ3MiCisgICAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICBlbHNlCiAgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KIAkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KIAlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCkBAIC0yNjMxLDI1ICszODQ1LDE4IEBACiAgICAgICBkb25lCiAKICAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KLSAgICAgIGV4ZWNfY21kPSJcJGNtZCRhcmdzIgotICAgIGVsc2UKLSAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCi0gICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLQlldmFsICJcJEVDSE8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgotCWVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKLSAgICAgIGZpCi0gICAgICAkRUNITyAiJGNtZCRhcmdzIgotICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBleGVjX2NtZD1cJGNtZCRhcmdzCiAgICAgZmkKIH0KIAotdGVzdCAiJG9wdF9tb2RlIiA9IGV4ZWN1dGUgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9Cit0ZXN0IGV4ZWN1dGUgPSAiJG9wdF9tb2RlIiAmJiBmdW5jX21vZGVfZXhlY3V0ZSAkezErIiRAIn0KIAogCiAjIGZ1bmNfbW9kZV9maW5pc2ggYXJnLi4uCiBmdW5jX21vZGVfZmluaXNoICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZworICAgICRkZWJ1Z19jbWQKKwogICAgIGxpYnM9CiAgICAgbGliZGlycz0KICAgICBhZG1pbmNtZHM9CkBAIC0yNjYzLDExICszODcwLDExIEBACiAJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJG9wdCI7IHRoZW4KIAkgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkb3B0IgogCWVsc2UKLQkgIGZ1bmNfd2FybmluZyAiXGAkb3B0JyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJICBmdW5jX3dhcm5pbmcgIickb3B0JyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCiAJZmkKIAogICAgICAgZWxzZQotCWZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgYXJndW1lbnQgXGAkb3B0JyIKKwlmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50ICckb3B0JyIKICAgICAgIGZpCiAgICAgZG9uZQogCkBAIC0yNjgyLDEyICszODg5LDEyIEBACiAgICAgICAjIFJlbW92ZSBzeXNyb290IHJlZmVyZW5jZXMKICAgICAgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgogICAgICAgICBmb3IgbGliIGluICRsaWJzOyBkbwotICAgICAgICAgIGVjaG8gInJlbW92aW5nIHJlZmVyZW5jZXMgdG8gJGx0X3N5c3Jvb3QgYW5kIFxgPScgcHJlZml4ZXMgZnJvbSAkbGliIgorICAgICAgICAgIGVjaG8gInJlbW92aW5nIHJlZmVyZW5jZXMgdG8gJGx0X3N5c3Jvb3QgYW5kICc9JyBwcmVmaXhlcyBmcm9tICRsaWIiCiAgICAgICAgIGRvbmUKICAgICAgIGVsc2UKICAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKICAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KLQkgIHNlZCAtZSAiJHtzeXNyb290X2NtZH0gcy9cKFsgJ10tW0xSXVwpPS9cMS9nOyBzL1woWyAnXVwpPS9cMS9nIiAkbGliIFwKKwkgIHNlZCAtZSAiJHN5c3Jvb3RfY21kIHMvXChbICddLVtMUl1cKT0vXDEvZzsgcy9cKFsgJ11cKT0vXDEvZyIgJGxpYiBcCiAJICAgID4gJHRtcGRpci90bXAtbGEKIAkgIG12IC1mICR0bXBkaXIvdG1wLWxhICRsaWIKIAlkb25lCkBAIC0yNzEyLDcgKzM5MTksNyBAQAogICAgIGZpCiAKICAgICAjIEV4aXQgaGVyZSBpZiB0aGV5IHdhbnRlZCBzaWxlbnQgbW9kZS4KLSAgICAkb3B0X3NpbGVudCAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAkb3B0X3F1aWV0ICYmIGV4aXQgJEVYSVRfU1VDQ0VTUwogCiAgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KICAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCkBAIC0yNzIzLDI3ICszOTMwLDI3IEBACiAgICAgICBlY2hvCiAgICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKICAgICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgotICAgICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKyAgICAgIGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgJy1MTElCRElSJyIKICAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKICAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgotCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSAnJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgogCWVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKICAgICAgIGZpCiAgICAgICBpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCi0JZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSBcYCRydW5wYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgLSBhZGQgTElCRElSIHRvIHRoZSAnJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKIAllY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgogICAgICAgZmkKICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgogCWxpYmRpcj1MSUJESVIKIAlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCiAKLQkkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorCSRFQ0hPICIgICAtIHVzZSB0aGUgJyRmbGFnJyBsaW5rZXIgZmxhZyIKICAgICAgIGZpCiAgICAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgogCSRFQ0hPICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBydW4gdGhlc2UgY29tbWFuZHM6JGFkbWluY21kcyIKICAgICAgIGZpCiAgICAgICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotCWVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gXGAvZXRjL2xkLnNvLmNvbmYnIgorCWVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIGFkZCBMSUJESVIgdG8gJy9ldGMvbGQuc28uY29uZiciCiAgICAgICBmaQogICAgICAgZWNobwogCkBAIC0yNzYyLDE4ICszOTY5LDIwIEBACiAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCiB9CiAKLXRlc3QgIiRvcHRfbW9kZSIgPSBmaW5pc2ggJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KK3Rlc3QgZmluaXNoID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2ZpbmlzaCAkezErIiRAIn0KIAogCiAjIGZ1bmNfbW9kZV9pbnN0YWxsIGFyZy4uLgogZnVuY19tb2RlX2luc3RhbGwgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAorCiAgICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgogICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgotICAgIGlmIHRlc3QgIiRub25vcHQiID0gIiRTSEVMTCIgfHwgdGVzdCAiJG5vbm9wdCIgPSAvYmluL3NoIHx8CisgICAgaWYgdGVzdCAiJFNIRUxMIiA9ICIkbm9ub3B0IiB8fCB0ZXN0IC9iaW4vc2ggPSAiJG5vbm9wdCIgfHwKICAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KLSAgICAgICBjYXNlICRub25vcHQgaW4gKnNodG9vbCopIDo7OyAqKSBmYWxzZTs7IGVzYWM7IHRoZW4KKyAgICAgICBjYXNlICRub25vcHQgaW4gKnNodG9vbCopIDo7OyAqKSBmYWxzZTs7IGVzYWMKKyAgICB0aGVuCiAgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCiAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkbm9ub3B0IgogICAgICAgaW5zdGFsbF9wcm9nPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQgIgpAQCAtMjgwMCw3ICs0MDA5LDcgQEAKICAgICBvcHRzPQogICAgIHByZXY9CiAgICAgaW5zdGFsbF90eXBlPQotICAgIGlzZGlyPW5vCisgICAgaXNkaXI9ZmFsc2UKICAgICBzdHJpcG1lPQogICAgIG5vX21vZGU9OgogICAgIGZvciBhcmcKQEAgLTI4MTMsNyArNDAyMiw3IEBACiAgICAgICBmaQogCiAgICAgICBjYXNlICRhcmcgaW4KLSAgICAgIC1kKSBpc2Rpcj15ZXMgOzsKKyAgICAgIC1kKSBpc2Rpcj06IDs7CiAgICAgICAtZikKIAlpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCiAJICBwcmV2PSRhcmcKQEAgLTI4MzEsNyArNDA0MCw3IEBACiAgICAgICAqKQogCSMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkZWQgYW4gYXJndW1lbnQsIHRoZW4gc2tpcCBpdC4KIAlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KLQkgIGlmIHRlc3QgIngkcHJldiIgPSB4LW0gJiYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSI7IHRoZW4KKwkgIGlmIHRlc3QgWC1tID0gIlgkcHJldiIgJiYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSI7IHRoZW4KIAkgICAgYXJnMj0kaW5zdGFsbF9vdmVycmlkZV9tb2RlCiAJICAgIG5vX21vZGU9ZmFsc2UKIAkgIGZpCkBAIC0yODU2LDcgKzQwNjUsNyBAQAogICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIKIAogICAgIHRlc3QgLW4gIiRwcmV2IiAmJiBcCi0gICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSBcYCRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInRoZSAnJHByZXYnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKIAogICAgIGlmIHRlc3QgLW4gIiRpbnN0YWxsX292ZXJyaWRlX21vZGUiICYmICRub19tb2RlOyB0aGVuCiAgICAgICBpZiAkaW5zdGFsbF9jcDsgdGhlbiA6OyBlbHNlCkBAIC0yODc4LDE5ICs0MDg3LDE5IEBACiAgICAgZGVzdD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAKICAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KLSAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCi0gICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgotICAgICAgZGVzdGRpcj0iJGRlc3QiCisgICAgdGVzdCAtZCAiJGRlc3QiICYmIGlzZGlyPToKKyAgICBpZiAkaXNkaXI7IHRoZW4KKyAgICAgIGRlc3RkaXI9JGRlc3QKICAgICAgIGRlc3RuYW1lPQogICAgIGVsc2UKICAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKLSAgICAgIGRlc3RkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotICAgICAgZGVzdG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIGRlc3RkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgIGRlc3RuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCiAgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCiAgICAgICBzZXQgZHVtbXkgJGZpbGVzOyBzaGlmdAogICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKLQlmdW5jX2ZhdGFsX2hlbHAgIlxgJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIKKwlmdW5jX2ZhdGFsX2hlbHAgIickZGVzdCcgaXMgbm90IGEgZGlyZWN0b3J5IgogICAgIGZpCiAgICAgY2FzZSAkZGVzdGRpciBpbgogICAgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKQEAgLTI4OTksNyArNDEwOCw3IEBACiAJY2FzZSAkZmlsZSBpbgogCSoubG8pIDs7CiAJKikKLQkgIGZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKKwkgIGZ1bmNfZmF0YWxfaGVscCAiJyRkZXN0ZGlyJyBtdXN0IGJlIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIgogCSAgOzsKIAllc2FjCiAgICAgICBkb25lCkBAIC0yOTA4LDcgKzQxMTcsNyBAQAogCiAgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCiAgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCi0gICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSRtYWdpYwogCiAgICAgc3RhdGljbGlicz0KICAgICBmdXR1cmVfbGliZGlycz0KQEAgLTI5MjgsNyArNDEzNyw3IEBACiAKIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgogCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRmaWxlIiBcCi0JICB8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiJyRmaWxlJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCiAKIAlsaWJyYXJ5X25hbWVzPQogCW9sZF9saWJyYXJ5PQpAQCAtMjk1MCw3ICs0MTU5LDcgQEAKIAlmaQogCiAJZnVuY19kaXJuYW1lICIkZmlsZSIgIi8iICIiCi0JZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwlkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAlmdW5jX2FwcGVuZCBkaXIgIiRvYmpkaXIiCiAKIAlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCkBAIC0yOTY0LDcgKzQxNzMsNyBAQAogCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQogCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCiAJICB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciIgJiYgXAotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgXGAkZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogY2Fubm90IGluc3RhbGwgJyRmaWxlJyB0byBhIGRpcmVjdG9yeSBub3QgZW5kaW5nIGluICRsaWJkaXIiCiAKIAkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCiAJICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KQEAgLTI5NzMsMjkgKzQxODIsMjkgQEAKIAkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKIAkgIGZpCiAKLQkgIGZ1bmNfd2FybmluZyAicmVsaW5raW5nIFxgJGZpbGUnIgorCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgJyRmaWxlJyIKIAkgIGZ1bmNfc2hvd19ldmFsICIkcmVsaW5rX2NvbW1hbmQiIFwKLQkgICAgJ2Z1bmNfZmF0YWxfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCisJICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rICdcJyckZmlsZSdcJycgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCInCiAJZmkKIAogCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCiAJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzOyBzaGlmdAogCWlmIHRlc3QgLW4gIiQxIjsgdGhlbgotCSAgcmVhbG5hbWU9IiQxIgorCSAgcmVhbG5hbWU9JDEKIAkgIHNoaWZ0CiAKLQkgIHNyY25hbWU9IiRyZWFsbmFtZSIKLQkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKKwkgIHNyY25hbWU9JHJlYWxuYW1lCisJICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9JHtyZWFsbmFtZX1UCiAKIAkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KIAkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9zaGFyZWRfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgXAogCSAgICAgICdleGl0ICQ/JwotCSAgdHN0cmlwbWU9IiRzdHJpcG1lIgorCSAgdHN0cmlwbWU9JHN0cmlwbWUKIAkgIGNhc2UgJGhvc3Rfb3MgaW4KIAkgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKIAkgICAgY2FzZSAkcmVhbG5hbWUgaW4KIAkgICAgKi5kbGwuYSkKLQkgICAgICB0c3RyaXBtZT0iIgorCSAgICAgIHRzdHJpcG1lPQogCSAgICAgIDs7CiAJICAgIGVzYWMKIAkgICAgOzsKQEAgLTMwMDYsNyArNDIxNSw3IEBACiAKIAkgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgogCSAgICAjIERlbGV0ZSB0aGUgb2xkIHN5bWxpbmtzLCBhbmQgY3JlYXRlIG5ldyBvbmVzLgotCSAgICAjIFRyeSBgbG4gLXNmJyBmaXJzdCwgYmVjYXVzZSB0aGUgYGxuJyBiaW5hcnkgbWlnaHQgZGVwZW5kIG9uCisJICAgICMgVHJ5ICdsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSAnbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KIAkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCiAJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KIAkgICAgZm9yIGxpbmtuYW1lCkBAIC0zMDE3LDE0ICs0MjI2LDE0IEBACiAJICBmaQogCiAJICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCi0JICBsaWI9IiRkZXN0ZGlyLyRyZWFsbmFtZSIKKwkgIGxpYj0kZGVzdGRpci8kcmVhbG5hbWUKIAkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGluc3RhbGxfY21kcyIgJ2V4aXQgJD8nCiAJZmkKIAogCSMgSW5zdGFsbCB0aGUgcHNldWRvLWxpYnJhcnkgZm9yIGluZm9ybWF0aW9uIHB1cnBvc2VzLgogCWZ1bmNfYmFzZW5hbWUgIiRmaWxlIgotCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQlpbnN0bmFtZT0iJGRpci8kbmFtZSJpCisJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwlpbnN0bmFtZT0kZGlyLyR7bmFtZX1pCiAJZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiAnZXhpdCAkPycKIAogCSMgTWF5YmUgaW5zdGFsbCB0aGUgc3RhdGljIGxpYnJhcnksIHRvby4KQEAgLTMwMzYsMTEgKzQyNDUsMTEgQEAKIAogCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KIAlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RuYW1lCiAJZWxzZQogCSAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCi0JICBkZXN0ZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgZGVzdGZpbGU9JGRlc3RkaXIvJGRlc3RmaWxlCiAJZmkKIAogCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCkBAIC0zMDUwLDExICs0MjU5LDExIEBACiAJICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0CiAJICA7OwogCSouJG9iamV4dCkKLQkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKwkgIHN0YXRpY2Rlc3Q9JGRlc3RmaWxlCiAJICBkZXN0ZmlsZT0KIAkgIDs7CiAJKikKLQkgIGZ1bmNfZmF0YWxfaGVscCAiY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciCisJICBmdW5jX2ZhdGFsX2hlbHAgImNhbm5vdCBjb3B5IGEgbGlidG9vbCBvYmplY3QgdG8gJyRkZXN0ZmlsZSciCiAJICA7OwogCWVzYWMKIApAQCAtMzA2Myw3ICs0MjcyLDcgQEAKIAkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgJ2V4aXQgJD8nCiAKIAkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KLQlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgogCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KIAkgIGZ1bmNfbG8ybyAiJGZpbGUiCiAJICBzdGF0aWNvYmo9JGZ1bmNfbG8yb19yZXN1bHQKQEAgLTMwNzUsMjMgKzQyODQsMjMgQEAKICAgICAgICopCiAJIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgogCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCisJICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdG5hbWUKIAllbHNlCiAJICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLQkgIGRlc3RmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCSAgZGVzdGZpbGU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICBkZXN0ZmlsZT0kZGVzdGRpci8kZGVzdGZpbGUKIAlmaQogCiAJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CiAJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bwogCSMgaW5zdGFsbAotCXN0cmlwcGVkX2V4dD0iIgorCXN0cmlwcGVkX2V4dD0KIAljYXNlICRmaWxlIGluCiAJICAqLmV4ZSkKIAkgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KIAkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgogCSAgICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAotCSAgICAgIHN0cmlwcGVkX2V4dD0iLmV4ZSIKKwkgICAgICBzdHJpcHBlZF9leHQ9LmV4ZQogCSAgICBmaQogCSAgICA7OwogCWVzYWMKQEAgLTMxMTksMTkgKzQzMjgsMTkgQEAKIAogCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCiAJICB0ZXN0IC16ICIkZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbiIgJiYgXAotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgbGlidG9vbCB3cmFwcGVyIHNjcmlwdCAnJHdyYXBwZXInIgogCi0JICBmaW5hbGl6ZT15ZXMKKwkgIGZpbmFsaXplPToKIAkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KIAkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgogCSAgICBsaWJkaXI9CiAJICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCiAJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCiAJICAgIGZpCi0JICAgIGxpYmZpbGU9IiRsaWJkaXIvImAkRUNITyAiJGxpYiIgfCAkU0VEICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwkgICAgbGliZmlsZT0kbGliZGlyL2AkRUNITyAiJGxpYiIgfCAkU0VEICdzJV4uKi8lJWcnYAogCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgotCSAgICAgIGZ1bmNfd2FybmluZyAiXGAkbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluIFxgJGxpYmRpciciCi0JICAgICAgZmluYWxpemU9bm8KKwkgICAgICBmdW5jX3dhcm5pbmcgIickbGliJyBoYXMgbm90IGJlZW4gaW5zdGFsbGVkIGluICckbGliZGlyJyIKKwkgICAgICBmaW5hbGl6ZT1mYWxzZQogCSAgICBmaQogCSAgZG9uZQogCkBAIC0zMTM5LDI5ICs0MzQ4LDI5IEBACiAJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCiAKIAkgIG91dHB1dG5hbWU9Ci0JICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgIGlmIHRlc3Qgbm8gPSAiJGZhc3RfaW5zdGFsbCIgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgogCSAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiAkZmluYWxpemU7IHRoZW4KIAkgICAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCiAJCWZ1bmNfYmFzZW5hbWUgIiRmaWxlJHN0cmlwcGVkX2V4dCIKLQkJZmlsZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgotCSAgICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKKwkJZmlsZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkgICAgICAgIG91dHB1dG5hbWU9JHRtcGRpci8kZmlsZQogCSAgICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgogCSAgICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCiAKLQkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgICAgICRvcHRfcXVpZXQgfHwgewogCSAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRyZWxpbmtfY29tbWFuZCIKIAkJICBldmFsICJmdW5jX2VjaG8gJGZ1bmNfcXVvdGVfZm9yX2V4cGFuZF9yZXN1bHQiCiAJICAgICAgICB9CiAJICAgICAgICBpZiBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKIAkgICAgICAgICAgZWxzZQotCQkgIGZ1bmNfZXJyb3IgImVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIKKwkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rICckZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIKIAkJICAkb3B0X2RyeV9ydW4gfHwgJHtSTX1yICIkdG1wZGlyIgogCQkgIGNvbnRpbnVlCiAJICAgICAgICBmaQotCSAgICAgICAgZmlsZT0iJG91dHB1dG5hbWUiCisJICAgICAgICBmaWxlPSRvdXRwdXRuYW1lCiAJICAgICAgZWxzZQotCSAgICAgICAgZnVuY193YXJuaW5nICJjYW5ub3QgcmVsaW5rIFxgJGZpbGUnIgorCSAgICAgICAgZnVuY193YXJuaW5nICJjYW5ub3QgcmVsaW5rICckZmlsZSciCiAJICAgICAgZmkKIAkgICAgfQogCSAgZWxzZQpAQCAtMzE5OCwxMCArNDQwNywxMCBAQAogCiAgICAgZm9yIGZpbGUgaW4gJHN0YXRpY2xpYnM7IGRvCiAgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLSAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICAgIG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAKICAgICAgICMgU2V0IHVwIHRoZSByYW5saWIgcGFyYW1ldGVycy4KLSAgICAgIG9sZGxpYj0iJGRlc3RkaXIvJG5hbWUiCisgICAgICBvbGRsaWI9JGRlc3RkaXIvJG5hbWUKICAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2xkbGliIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgogICAgICAgdG9vbF9vbGRsaWI9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAogCkBAIC0zMjE2LDE4ICs0NDI1LDE4IEBACiAgICAgZG9uZQogCiAgICAgdGVzdCAtbiAiJGZ1dHVyZV9saWJkaXJzIiAmJiBcCi0gICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biBcYCRwcm9nbmFtZSAtLWZpbmlzaCRmdXR1cmVfbGliZGlycyciCisgICAgICBmdW5jX3dhcm5pbmcgInJlbWVtYmVyIHRvIHJ1biAnJHByb2duYW1lIC0tZmluaXNoJGZ1dHVyZV9saWJkaXJzJyIKIAogICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCiAgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgogICAgICAgJG9wdF9kcnlfcnVuICYmIGN1cnJlbnRfbGliZGlycz0iIC1uJGN1cnJlbnRfbGliZGlycyIKLSAgICAgIGV4ZWNfY21kPSckU0hFTEwgJHByb2dwYXRoICRwcmVzZXJ2ZV9hcmdzIC0tZmluaXNoJGN1cnJlbnRfbGliZGlycycKKyAgICAgIGV4ZWNfY21kPSckU0hFTEwgIiRwcm9ncGF0aCIgJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJwogICAgIGVsc2UKICAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwogICAgIGZpCiB9CiAKLXRlc3QgIiRvcHRfbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQordGVzdCBpbnN0YWxsID0gIiRvcHRfbW9kZSIgJiYgZnVuY19tb2RlX2luc3RhbGwgJHsxKyIkQCJ9CiAKIAogIyBmdW5jX2dlbmVyYXRlX2Rsc3ltcyBvdXRwdXRuYW1lIG9yaWdpbmF0b3IgcGljX3AKQEAgLTMyMzUsMTYgKzQ0NDQsMTcgQEAKICMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgogZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKIHsKLSAgICAkb3B0X2RlYnVnCi0gICAgbXlfb3V0cHV0bmFtZT0iJDEiCi0gICAgbXlfb3JpZ2luYXRvcj0iJDIiCi0gICAgbXlfcGljX3A9IiR7My1ub30iCisgICAgJGRlYnVnX2NtZAorCisgICAgbXlfb3V0cHV0bmFtZT0kMQorICAgIG15X29yaWdpbmF0b3I9JDIKKyAgICBteV9waWNfcD0kezMtZmFsc2V9CiAgICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgc2VkICdzJVteYS16QS1aMC05XSVfJWcnYAogICAgIG15X2Rsc3ltcz0KIAotICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRsc2VsZiI7IHRoZW4KICAgICAgIGlmIHRlc3QgLW4gIiROTSIgJiYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLQlteV9kbHN5bXM9IiR7bXlfb3V0cHV0bmFtZX1TLmMiCisJbXlfZGxzeW1zPSR7bXlfb3V0cHV0bmFtZX1TLmMKICAgICAgIGVsc2UKIAlmdW5jX2Vycm9yICJub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiCiAgICAgICBmaQpAQCAtMzI1NSw3ICs0NDY1LDcgQEAKICAgICAgICIiKSA7OwogICAgICAgKi5jKQogCSMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCi0Jbmxpc3Q9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX0ubm0iCisJbmxpc3Q9JG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUubm0KIAogCWZ1bmNfc2hvd19ldmFsICIkUk0gJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCiAKQEAgLTMyNjMsMzQgKzQ0NzMsMzYgQEAKIAlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCiAKIAkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKLS8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLwotLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTiAqLworLyogJG15X2Rsc3ltcyAtIHN5bWJvbCByZXNvbHV0aW9uIHRhYmxlIGZvciAnJG15X291dHB1dG5hbWUnIGRsc3ltIGVtdWxhdGlvbi4gKi8KKy8qIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTiAqLwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiBcIkNcIiB7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSA0KSAmJiAoX19HTlVDX01JTk9SX18gPj0gNCkpIHx8IChfX0dOVUNfXyA+IDQpKQogI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVdzdHJpY3QtcHJvdG90eXBlc1wiCiAjZW5kaWYKIAogLyogS2VlcCB0aGlzIGNvZGUgaW4gc3luYyBiZXR3ZWVuIGxpYnRvb2wubTQsIGx0bWFpbiwgbHRfc3lzdGVtLmgsIGFuZCB0ZXN0cy4gICovCi0jaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfV0lOMzJfV0NFKQotLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjb24ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCisjaWYgZGVmaW5lZCBfV0lOMzIgfHwgZGVmaW5lZCBfX0NZR1dJTl9fIHx8IGRlZmluZWQgX1dJTjMyX1dDRQorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZSBydW50aW1lCiAgICByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24gb24gcHNldWRvLXJlbG9jcy4gICovCiAjIGRlZmluZSBMVF9ETFNZTV9DT05TVAotI2VsaWYgZGVmaW5lZChfX29zZl9fKQorI2VsaWYgZGVmaW5lZCBfX29zZl9fCiAvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KICMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCiAjZWxzZQogIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKICNlbmRpZgogCisjZGVmaW5lIFNUUkVRKHMxLCBzMikgKHN0cmNtcCAoKHMxKSwgKHMyKSkgPT0gMCkKKwogLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKICIKIAotCWlmIHRlc3QgIiRkbHNlbGYiID0geWVzOyB0aGVuCi0JICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisJaWYgdGVzdCB5ZXMgPSAiJGRsc2VsZiI7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgJyRvdXRwdXQnIgogCiAJICAkb3B0X2RyeV9ydW4gfHwgZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCiAKQEAgLTMyOTgsNyArNDUxMCw3IEBACiAJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCiAJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KIAkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLQkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQnIgorCSAgICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tICckZnVuY190b190b29sX2ZpbGVfcmVzdWx0JyIKIAkgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiROTSAkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKIAkgIGRvbmUKIApAQCAtMzMxOCwxMCArNDUzMCwxMCBAQAogCiAJICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scwogCSAgaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgotCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgorCSAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAKIAkgICAgJG9wdF9kcnlfcnVuIHx8IHsKIAkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCi0JICAgICAgZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCisJICAgICAgZXZhbCAiJFNFRCAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJwogCSAgICAgIGNhc2UgJGhvc3QgaW4KIAkgICAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKICAgICAgICAgICAgICAgICBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwpAQCAtMzMzMSw3ICs0NTQzLDcgQEAKIAkgICAgfQogCSAgZWxzZQogCSAgICAkb3B0X2RyeV9ydW4gfHwgewotCSAgICAgIGV2YWwgIiR7U0VEfSAtZSAncy9cKFtdLlsqXiRdXCkvXFxcXFwxL2cnIC1lICdzL14vIC8nIC1lICdzLyQvJC8nIicgPCAiJGV4cG9ydF9zeW1ib2xzIiA+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiJworCSAgICAgIGV2YWwgIiRTRUQgLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKIAkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJwogCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCiAJICAgICAgY2FzZSAkaG9zdCBpbgpAQCAtMzM0NSwyMiArNDU1NywyMiBAQAogCWZpCiAKIAlmb3IgZGxwcmVmaWxlIGluICRkbHByZWZpbGVzOyBkbwotCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRkbHByZWZpbGUnIgorCSAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSAnJGRscHJlZmlsZSciCiAJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgotCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKICAgICAgICAgICBjYXNlICRob3N0IGluCiAJICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQogCSAgICAgICMgaWYgYW4gaW1wb3J0IGxpYnJhcnksIHdlIG5lZWQgdG8gb2J0YWluIGRsbmFtZQogCSAgICAgIGlmIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wICIkZGxwcmVmaWxlIjsgdGhlbgogCSAgICAgICAgZnVuY190cl9zaCAiJGRscHJlZmlsZSIKIAkgICAgICAgIGV2YWwgImN1cnJfbGFmaWxlPVwkbGliZmlsZV8kZnVuY190cl9zaF9yZXN1bHQiCi0JICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iIgorCSAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9CiAJICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgogCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcwogCSAgICAgICAgICBkbHByZWZpbGVfZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xhZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCi0JICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIiA7IHRoZW4KKwkgICAgICAgICAgaWYgdGVzdCAtbiAiJGRscHJlZmlsZV9kbG5hbWUiOyB0aGVuCiAJICAgICAgICAgICAgZnVuY19iYXNlbmFtZSAiJGRscHJlZmlsZV9kbG5hbWUiCi0JICAgICAgICAgICAgZGxwcmVmaWxlX2RsYmFzZW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAkgICAgICAgICAgZWxzZQogCSAgICAgICAgICAgICMgbm8gbGFmaWxlLiB1c2VyIGV4cGxpY2l0bHkgcmVxdWVzdGVkIC1kbHByZW9wZW4gPGltcG9ydCBsaWJyYXJ5Pi4KIAkgICAgICAgICAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgIiRkbHByZWZpbGUiCkBAIC0zMzY4LDcgKzQ1ODAsNyBAQAogCSAgICAgICAgICBmaQogCSAgICAgICAgZmkKIAkgICAgICAgICRvcHRfZHJ5X3J1biB8fCB7Ci0JICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxiYXNlbmFtZSIgOyB0aGVuCisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxiYXNlbmFtZSI7IHRoZW4KIAkgICAgICAgICAgICBldmFsICckRUNITyAiOiAkZGxwcmVmaWxlX2RsYmFzZW5hbWUiID4+ICIkbmxpc3QiJwogCSAgICAgICAgICBlbHNlCiAJICAgICAgICAgICAgZnVuY193YXJuaW5nICJDb3VsZCBub3QgY29tcHV0ZSBETEwgbmFtZSBmcm9tICRuYW1lIgpAQCAtMzQyNCw2ICs0NjM2LDExIEBACiAJICAgIGVjaG8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIgogCSAgZmkKIAorCSAgZnVuY19zaG93X2V2YWwgJyRSTSAiJHtubGlzdH1JIicKKwkgIGlmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydCI7IHRoZW4KKwkgICAgZXZhbCAiJGdsb2JhbF9zeW1ib2xfdG9faW1wb3J0IicgPCAiJG5saXN0IlMgPiAiJG5saXN0IkknCisJICBmaQorCiAJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAogCiAvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCkBAIC0zNDMyLDExICs0NjQ5LDMwIEBACiAgIHZvaWQgKmFkZHJlc3M7CiB9IGx0X2Rsc3ltbGlzdDsKIGV4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKLWx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTtcCisiCisKKwkgIGlmIHRlc3QgLXMgIiRubGlzdCJJOyB0aGVuCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCitzdGF0aWMgdm9pZCBsdF9zeW1pbml0KHZvaWQpCit7CisgIExUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdCAqc3ltYm9sID0gbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKKyAgZm9yICg7IHN5bWJvbC0+bmFtZTsgKytzeW1ib2wpCisgICAgeyIKKwkgICAgJFNFRCAncy8uKi8gICAgICBpZiAoU1RSRVEgKHN5bWJvbC0+bmFtZSwgXCImXCIpKSBzeW1ib2wtPmFkZHJlc3MgPSAodm9pZCAqKSBcJiY7LycgPCAiJG5saXN0IkkgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiICJcCisgICAgfQorfSIKKwkgIGZpCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAogTFRfRExTWU1fQ09OU1QgbHRfZGxzeW1saXN0CiBsdF8ke215X3ByZWZpeH1fTFRYX3ByZWxvYWRlZF9zeW1ib2xzW10gPQote1wKLSAgeyBcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDAgfSwiCit7IHtcIiRteV9vcmlnaW5hdG9yXCIsICh2b2lkICopIDB9LCIKKworCSAgaWYgdGVzdCAtcyAiJG5saXN0Ikk7IHRoZW4KKwkgICAgZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKyAge1wiQElOSVRAXCIsICh2b2lkICopICZsdF9zeW1pbml0fSwiCisJICBmaQogCiAJICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KIAkgIG5vKQpAQCAtMzQ3OCw5ICs0NzE0LDcgQEAKIAkgICotKi1ocHV4KikKIAkgICAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPSIgJHBpY19mbGFnIiAgOzsKIAkgICopCi0JICAgIGlmIHRlc3QgIlgkbXlfcGljX3AiICE9IFhubzsgdGhlbgotCSAgICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIKLQkgICAgZmkKKwkgICAgJG15X3BpY19wICYmIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIKIAkgICAgOzsKIAkgIGVzYWMKIAkgIDs7CkBAIC0zNDk3LDEwICs0NzMxLDEwIEBACiAJZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCiAKIAkjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCi0JZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCInCisJZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCIgIiR7bmxpc3R9SSInCiAKIAkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgotCXN5bWZpbGVvYmo9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQiCisJc3ltZmlsZW9iaj0kb3V0cHV0X29iamRpci8ke215X291dHB1dG5hbWV9Uy4kb2JqZXh0CiAJY2FzZSAkaG9zdCBpbgogCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQogCSAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmIjsgdGhlbgpAQCAtMzUxOCw3ICs0NzUyLDcgQEAKIAllc2FjCiAJOzsKICAgICAgICopCi0JZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yIFxgJG15X2Rsc3ltcyciCisJZnVuY19mYXRhbF9lcnJvciAidW5rbm93biBzdWZmaXggZm9yICckbXlfZGxzeW1zJyIKIAk7OwogICAgICAgZXNhYwogICAgIGVsc2UKQEAgLTM1MzIsNiArNDc2NiwzMiBAQAogICAgIGZpCiB9CiAKKyMgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCBBUkcKKyMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgorIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKKyMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KK2Z1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKK3sKKyAgJGRlYnVnX2NtZAorCisgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkRUdSRVAgJyAoX2hlYWRfW0EtWmEtejAtOV9dK19bYWRdbCp8W0EtWmEtejAtOV9dK19bYWRdbCpfaW5hbWUpJCdgCisgIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXAiCit9CisKKyMgZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wIEFSRworIyBUaGlzIHByZWRpY2F0ZSByZXR1cm5zIHdpdGggemVybyBzdGF0dXMgKFRSVUUpIGlmCisjIEFSRyBpcyBhbiBNUy1zdHlsZSBpbXBvcnQgbGlicmFyeS4gUmV0dXJucworIyB3aXRoIG5vbnplcm8gc3RhdHVzIChGQUxTRSkgb3RoZXJ3aXNlLgorZnVuY19jeWdtaW5nX21zX2ltcGxpYl9wICgpCit7CisgICRkZWJ1Z19jbWQKKworICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAorICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCit9CisKICMgZnVuY193aW4zMl9saWJpZCBhcmcKICMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJwogIwpAQCAtMzU0MSw4ICs0ODAxLDkgQEAKICMgRGVzcGl0ZSB0aGUgbmFtZSwgYWxzbyBkZWFsIHdpdGggNjQgYml0IGJpbmFyaWVzLgogZnVuY193aW4zMl9saWJpZCAoKQogewotICAkb3B0X2RlYnVnCi0gIHdpbjMyX2xpYmlkX3R5cGU9InVua25vd24iCisgICRkZWJ1Z19jbWQKKworICB3aW4zMl9saWJpZF90eXBlPXVua25vd24KICAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgogICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKQEAgLTM1NTIsMTYgKzQ4MTMsMjkgQEAKICAgICAjIEtlZXAgdGhlIGVncmVwIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lDX01FVEhPRC4KICAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CiAgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KLSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8Ci0JJFNFRCAtbiAtZSAnCisgICAgICBjYXNlICRubV9pbnRlcmZhY2UgaW4KKyAgICAgICJNUyBkdW1wYmluIikKKwlpZiBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgIiQxIiB8fAorCSAgIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIgorCXRoZW4KKwkgIHdpbjMyX25tcmVzPWltcG9ydAorCWVsc2UKKwkgIHdpbjMyX25tcmVzPQorCWZpCisJOzsKKyAgICAgICopCisJZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorCXdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8CisJICAkU0VEIC1uIC1lICcKIAkgICAgMSwxMDB7CiAJCS8gSSAvewotCQkgICAgcywuKixpbXBvcnQsCisJCSAgICBzfC4qfGltcG9ydHwKIAkJICAgIHAKIAkJICAgIHEKIAkJfQogCSAgICB9J2AKKwk7OworICAgICAgZXNhYwogICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KICAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKICAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKQEAgLTM1OTMsNyArNDg2Nyw4IEBACiAjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAogZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PWAkRExMVE9PTCAtLWlkZW50aWZ5LXN0cmljdCAtLWlkZW50aWZ5ICIkMSJgCiB9CiAKQEAgLTM2MTAsNyArNDg4NSw4IEBACiAjIHNwZWNpZmllZCBpbXBvcnQgbGlicmFyeS4KIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICgpCiB7Ci0gICRvcHRfZGVidWcKKyAgJGRlYnVnX2NtZAorCiAgIG1hdGNoX2xpdGVyYWw9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCiAgICRPQkpEVU1QIC1zIC0tc2VjdGlvbiAiJDEiICIkMiIgMj4vZGV2L251bGwgfAogICAgICRTRUQgJy9eQ29udGVudHMgb2Ygc2VjdGlvbiAnIiRtYXRjaF9saXRlcmFsIic6L3sKQEAgLTM2NDYsOCArNDkyMiw4IEBACiAgICAgICAvLi9wJyB8CiAgICAgIyB3ZSBub3cgaGF2ZSBhIGxpc3QsIG9uZSBlbnRyeSBwZXIgbGluZSwgb2YgdGhlIHN0cmluZ2lmaWVkCiAgICAgIyBjb250ZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiBhbGwgbWVtYmVycyBvZiB0aGUKLSAgICAjIGFyY2hpdmUgd2hpY2ggcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCi0gICAgIyBhbGwgdGhvc2Ugd2hpY2ggaGF2ZSBhIGZpcnN0IG9yIHNlY29uZCBjaGFyYWN0ZXIgdGhhdCBpcworICAgICMgYXJjaGl2ZSB0aGF0IHBvc3Nlc3MgdGhhdCBzZWN0aW9uLiBIZXVyaXN0aWM6IGVsaW1pbmF0ZQorICAgICMgYWxsIHRob3NlIHRoYXQgaGF2ZSBhIGZpcnN0IG9yIHNlY29uZCBjaGFyYWN0ZXIgdGhhdCBpcwogICAgICMgYSAnLicgKHRoYXQgaXMsIG9iamR1bXAncyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnByaW50YWJsZQogICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCiAgICAgIyAweDMwMmYgZXhwb3J0cyAtLSBidXQgd2lsbCBmYWlsIGZvciBETExzIHdob3NlIG5hbWUgYWN0dWFsbHkKQEAgLTM2NTgsMzAgKzQ5MzQsNiBAQAogICAgICRTRUQgLWUgJy9eXC4vZDsvXi5cLi9kO3EnCiB9CiAKLSMgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCBBUkcKLSMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgotIyBBUkcgaXMgYSBHTlUvYmludXRpbHMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKLSMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KLWZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgKCkKLXsKLSAgJG9wdF9kZWJ1ZwotICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCi0gIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcD1gJE5NICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiB8IGV2YWwgIiRnbG9iYWxfc3ltYm9sX3BpcGUiIHwgJEVHUkVQICcgKF9oZWFkX1tBLVphLXowLTlfXStfW2FkXWwqfFtBLVphLXowLTlfXStfW2FkXWwqX2luYW1lKSQnYAotICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfdG1wIgotfQotCi0jIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCBBUkcKLSMgVGhpcyBwcmVkaWNhdGUgcmV0dXJucyB3aXRoIHplcm8gc3RhdHVzIChUUlVFKSBpZgotIyBBUkcgaXMgYW4gTVMtc3R5bGUgaW1wb3J0IGxpYnJhcnkuIFJldHVybnMKLSMgd2l0aCBub256ZXJvIHN0YXR1cyAoRkFMU0UpIG90aGVyd2lzZS4KLWZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAoKQotewotICAkb3B0X2RlYnVnCi0gIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKLSAgZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRHUkVQICdfTlVMTF9JTVBPUlRfREVTQ1JJUFRPUidgCi0gIHRlc3QgLW4gIiRmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3RtcCIKLX0KLQogIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sgQVJHCiAjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCiAjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZApAQCAtMzY5NSwxNiArNDk0NywxNyBAQAogIyAgICAkc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKIGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFjayAoKQogewotICAkb3B0X2RlYnVnCi0gIGlmIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIiA7IHRoZW4KKyAgJGRlYnVnX2NtZAorCisgIGlmIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgIiQxIjsgdGhlbgogICAgICMgYmludXRpbHMgaW1wb3J0IGxpYnJhcnkKICAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ3JyAiJDEiYAotICBlbGlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIDsgdGhlbgorICBlbGlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiOyB0aGVuCiAgICAgIyBtcy1nZW5lcmF0ZWQgaW1wb3J0IGxpYnJhcnkKICAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ2JyAiJDEiYAogICBlbHNlCiAgICAgIyB1bmtub3duCi0gICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9IiIKKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD0KICAgZmkKIH0KIApAQCAtMzcxMiwxMCArNDk2NSwxMSBAQAogIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCiBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQogewotICAgICRvcHRfZGVidWcKLSAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAotICAgIGZfZXhfYW5fYXJfb2xkbGliPSIkMSIKLSAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgorICAgICRkZWJ1Z19jbWQKKworICAgIGZfZXhfYW5fYXJfZGlyPSQxOyBzaGlmdAorICAgIGZfZXhfYW5fYXJfb2xkbGliPSQxCisgICAgaWYgdGVzdCB5ZXMgPSAiJGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbiI7IHRoZW4KICAgICAgIGxvY2tmaWxlPSRmX2V4X2FuX2FyX29sZGxpYi5sb2NrCiAgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCiAJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKQEAgLTM3MjQsNyArNDk3OCw3IEBACiAgICAgZmkKICAgICBmdW5jX3Nob3dfZXZhbCAiKGNkIFwkZl9leF9hbl9hcl9kaXIgJiYgJEFSIHggXCJcJGZfZXhfYW5fYXJfb2xkbGliXCIpIiBcCiAJCSAgICdzdGF0PSQ/OyBybSAtZiAiJGxvY2tmaWxlIjsgZXhpdCAkc3RhdCcKLSAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iOyB0aGVuCiAgICAgICAkb3B0X2RyeV9ydW4gfHwgcm0gLWYgIiRsb2NrZmlsZSIKICAgICBmaQogICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCkBAIC0zNzM4LDIyICs0OTkyLDIzIEBACiAjIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyBnZW50b3Agb2xkbGliIC4uLgogZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCiB7Ci0gICAgJG9wdF9kZWJ1ZwotICAgIG15X2dlbnRvcD0iJDEiOyBzaGlmdAorICAgICRkZWJ1Z19jbWQKKworICAgIG15X2dlbnRvcD0kMTsgc2hpZnQKICAgICBteV9vbGRsaWJzPSR7MSsiJEAifQotICAgIG15X29sZG9ianM9IiIKLSAgICBteV94bGliPSIiCi0gICAgbXlfeGFicz0iIgotICAgIG15X3hkaXI9IiIKKyAgICBteV9vbGRvYmpzPQorICAgIG15X3hsaWI9CisgICAgbXlfeGFicz0KKyAgICBteV94ZGlyPQogCiAgICAgZm9yIG15X3hsaWIgaW4gJG15X29sZGxpYnM7IGRvCiAgICAgICAjIEV4dHJhY3QgdGhlIG9iamVjdHMuCiAgICAgICBjYXNlICRteV94bGliIGluCi0JW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBteV94YWJzPSIkbXlfeGxpYiIgOzsKKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9JG15X3hsaWIgOzsKIAkqKSBteV94YWJzPWBwd2RgIi8kbXlfeGxpYiIgOzsKICAgICAgIGVzYWMKICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRteV94bGliIgotICAgICAgbXlfeGxpYj0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgbXlfeGxpYj0kZnVuY19iYXNlbmFtZV9yZXN1bHQKICAgICAgIG15X3hsaWJfdT0kbXlfeGxpYgogICAgICAgd2hpbGUgOjsgZG8KICAgICAgICAgY2FzZSAiICRleHRyYWN0ZWRfYXJjaGl2ZXMgIiBpbgpAQCAtMzc2NSw3ICs1MDIwLDcgQEAKIAllc2FjCiAgICAgICBkb25lCiAgICAgICBleHRyYWN0ZWRfYXJjaGl2ZXM9IiRleHRyYWN0ZWRfYXJjaGl2ZXMgJG15X3hsaWJfdSIKLSAgICAgIG15X3hkaXI9IiRteV9nZW50b3AvJG15X3hsaWJfdSIKKyAgICAgIG15X3hkaXI9JG15X2dlbnRvcC8kbXlfeGxpYl91CiAKICAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCiAKQEAgLTM3NzgsMTkgKzUwMzMsMjAgQEAKIAkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KIAkgIGRhcndpbl9hcmNoaXZlPSRteV94YWJzCiAJICBkYXJ3aW5fY3VyZGlyPWBwd2RgCi0JICBkYXJ3aW5fYmFzZV9hcmNoaXZlPWBiYXNlbmFtZSAiJGRhcndpbl9hcmNoaXZlImAKKwkgIGZ1bmNfYmFzZW5hbWUgIiRkYXJ3aW5fYXJjaGl2ZSIKKwkgIGRhcndpbl9iYXNlX2FyY2hpdmU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAJICBkYXJ3aW5fYXJjaGVzPWAkTElQTyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRHUkVQIEFyY2hpdGVjdHVyZXMgMj4vZGV2L251bGwgfHwgdHJ1ZWAKIAkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbgogCSAgICBkYXJ3aW5fYXJjaGVzPWAkRUNITyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCiAJICAgIGRhcndpbl9hcmNoPQogCSAgICBmdW5jX3ZlcmJvc2UgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgotCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KLQkgICAgICBmdW5jX21rZGlyX3AgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0iCi0JICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIgIiR7ZGFyd2luX2FyY2hpdmV9IgotCSAgICAgIGNkICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgotCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCisJICAgIGZvciBkYXJ3aW5fYXJjaCBpbiAgJGRhcndpbl9hcmNoZXM7IGRvCisJICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8kZGFyd2luX2Jhc2VfYXJjaGl2ZS0kZGFyd2luX2FyY2giCisJICAgICAgJExJUE8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaC8kZGFyd2luX2Jhc2VfYXJjaGl2ZSIgIiRkYXJ3aW5fYXJjaGl2ZSIKKwkgICAgICBjZCAidW5mYXQtJCQvJGRhcndpbl9iYXNlX2FyY2hpdmUtJGRhcndpbl9hcmNoIgorCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIgogCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKLQkgICAgICAkUk0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgICAkUk0gInVuZmF0LSQkLyRkYXJ3aW5fYmFzZV9hcmNoaXZlLSRkYXJ3aW5fYXJjaC8kZGFyd2luX2Jhc2VfYXJjaGl2ZSIKIAkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCiAgICAgICAgICAgICAjIyBPa2F5IG5vdyB3ZSd2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKIAkgICAgZGFyd2luX2ZpbGVsaXN0PWBmaW5kIHVuZmF0LSQkIC10eXBlIGYgLW5hbWUgXCoubyAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJFNFRCAtZSAiJGJhc2VuYW1lIiB8IHNvcnQgLXVgCkBAIC0zODE1LDcgKzUwNzEsNyBAQAogICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8IHNvcnQgfCAkTkwyU1BgCiAgICAgZG9uZQogCi0gICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCisgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0kbXlfb2xkb2JqcwogfQogCiAKQEAgLTM4MzAsNyArNTA4Niw3IEBACiAjCiAjIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKICMgdmFyaWFibGUgd2lsbCB0YWtlLiAgSWYgJ3llcycsIHRoZW4gdGhlIGVtaXR0ZWQgc2NyaXB0Ci0jIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBpcyBzdG9yZWQgaXMKKyMgd2lsbCBhc3N1bWUgdGhhdCB0aGUgZGlyZWN0b3J5IHdoZXJlIGl0IGlzIHN0b3JlZCBpcwogIyB0aGUgJG9iamRpciBkaXJlY3RvcnkuICBUaGlzIGlzIGEgY3lnd2luL21pbmd3LXNwZWNpZmljCiAjIGJlaGF2aW9yLgogZnVuY19lbWl0X3dyYXBwZXIgKCkKQEAgLTM4NDEsNyArNTA5Nyw3IEBACiAjISAkU0hFTEwKIAogIyAkb3V0cHV0IC0gdGVtcG9yYXJ5IHdyYXBwZXIgc2NyaXB0IGZvciAkb2JqZGlyLyRvdXRwdXRuYW1lCi0jIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCiAjCiAjIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAogIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCkBAIC0zODk4LDkgKzUxNTQsOSBAQAogCiAjIFZlcnkgYmFzaWMgb3B0aW9uIHBhcnNpbmcuIFRoZXNlIG9wdGlvbnMgYXJlIChhKSBzcGVjaWZpYyB0bwogIyB0aGUgbGlidG9vbCB3cmFwcGVyLCAoYikgYXJlIGlkZW50aWNhbCBiZXR3ZWVuIHRoZSB3cmFwcGVyCi0jIC9zY3JpcHQvIGFuZCB0aGUgd3JhcHBlciAvZXhlY3V0YWJsZS8gd2hpY2ggaXMgdXNlZCBvbmx5IG9uCisjIC9zY3JpcHQvIGFuZCB0aGUgd3JhcHBlciAvZXhlY3V0YWJsZS8gdGhhdCBpcyB1c2VkIG9ubHkgb24KICMgd2luZG93cyBwbGF0Zm9ybXMsIGFuZCAoYykgYWxsIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiLS1sdC0iCi0jIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHdoaWNoIG1hdGNoCisjIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHRoYXQgbWF0Y2gKICMgdGhpcyBwYXR0ZXJuKS4KICMKICMgVGhlcmUgYXJlIG9ubHkgdHdvIHN1cHBvcnRlZCBvcHRpb25zOiAtLWx0LWRlYnVnIGFuZApAQCAtMzkzMyw3ICs1MTg5LDcgQEAKIAogICAjIFByaW50IHRoZSBkZWJ1ZyBiYW5uZXIgaW1tZWRpYXRlbHk6CiAgIGlmIHRlc3QgLW4gXCJcJGx0X29wdGlvbl9kZWJ1Z1wiOyB0aGVuCi0gICAgZWNobyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT05cIiAxPiYyCisgICAgZWNobyBcIiRvdXRwdXRuYW1lOiRvdXRwdXQ6XCRMSU5FTk86IGxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFKSAkVkVSU0lPTlwiIDE+JjIKICAgZmkKIH0KIApAQCAtMzk0NCw3ICs1MjAwLDcgQEAKICAgbHRfZHVtcF9hcmdzX049MTsKICAgZm9yIGx0X2FyZwogICBkbwotICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbXCRsdF9kdW1wX2FyZ3NfTl06IFwkbHRfYXJnXCIKKyAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBuZXdhcmd2W1wkbHRfZHVtcF9hcmdzX05dOiBcJGx0X2FyZ1wiCiAgICAgbHRfZHVtcF9hcmdzX049XGBleHByIFwkbHRfZHVtcF9hcmdzX04gKyAxXGAKICAgZG9uZQogfQpAQCAtMzk1OCw3ICs1MjE0LDcgQEAKICAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKICAgICAkRUNITyAiXAogICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KLSAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgXCRFQ0hPIFwiJG91dHB1dG5hbWU6JG91dHB1dDpcJExJTkVOTzogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKICAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCiAgICAgICBmaQogICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CkBAIC0zOTY4LDcgKzUyMjQsNyBAQAogICAqKQogICAgICRFQ0hPICJcCiAgICAgICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgotICAgICAgICBcJEVDSE8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBuZXdhcmd2WzBdOiBcJHByb2dkaXIvXCRwcm9ncmFtXCIgMT4mMgorICAgICAgICBcJEVDSE8gXCIkb3V0cHV0bmFtZTokb3V0cHV0OlwkTElORU5POiBuZXdhcmd2WzBdOiBcJHByb2dkaXIvXCRwcm9ncmFtXCIgMT4mMgogICAgICAgICBmdW5jX2x0X2R1bXBfYXJncyBcJHsxK1wiXCRAXCJ9IDE+JjIKICAgICAgIGZpCiAgICAgICBleGVjIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwkezErXCJcJEBcIn0KQEAgLTQwNDMsMTMgKzUyOTksMTMgQEAKICAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKICIKIAotCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCI7IHRoZW4KIAkgICRFQ0hPICJcCiAgIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKICAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKIAogICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwKLSAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICR7U0VEfSAxcVxgOyBcXAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJFNFRCAxcVxgOyBcXAogICAgICAgIHRlc3QgXCJYXCRmaWxlXCIgIT0gXCJYXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9OyB0aGVuCiAKICAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgpAQCAtNDEwMSw3ICs1MzU3LDcgQEAKIAlmaQogCiAJIyBFeHBvcnQgb3VyIHNobGlicGF0aF92YXIgaWYgd2UgaGF2ZSBvbmUuCi0JaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLW4gIiR0ZW1wX3JwYXRoIjsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KIAkgICRFQ0hPICJcCiAgICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKICAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCkBAIC00MTIxLDcgKzUzNzcsNyBAQAogICAgIGZpCiAgIGVsc2UKICAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCi0gICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogXFxcYFwkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgorICAgIFwkRUNITyBcIlwkMDogZXJyb3I6ICdcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKICAgICBcJEVDSE8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKICAgICBcJEVDSE8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgogICAgIGV4aXQgMQpAQCAtNDE0MCw3ICs1Mzk2LDcgQEAKIAljYXQgPDxFT0YKIAogLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQotICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OCiAKICAgIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAogICAgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgpAQCAtNDE3NSw0NyArNTQzMSw0NSBAQAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KIAorI2RlZmluZSBTVFJFUShzMSwgczIpIChzdHJjbXAgKChzMSksIChzMikpID09IDApCisKIC8qIGRlY2xhcmF0aW9ucyBvZiBub24tQU5TSSBmdW5jdGlvbnMgKi8KLSNpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorI2lmIGRlZmluZWQgX19NSU5HVzMyX18KICMgaWZkZWYgX19TVFJJQ1RfQU5TSV9fCiBpbnQgX3B1dGVudiAoY29uc3QgY2hhciAqKTsKICMgZW5kaWYKLSNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykKKyNlbGlmIGRlZmluZWQgX19DWUdXSU5fXwogIyBpZmRlZiBfX1NUUklDVF9BTlNJX18KIGNoYXIgKnJlYWxwYXRoIChjb25zdCBjaGFyICosIGNoYXIgKik7CiBpbnQgcHV0ZW52IChjaGFyICopOwogaW50IHNldGVudiAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CiAjIGVuZGlmCi0vKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworLyogI2VsaWYgZGVmaW5lZCBvdGhlcl9wbGF0Zm9ybSB8fCBkZWZpbmVkIC4uLiAqLwogI2VuZGlmCiAKIC8qIHBvcnRhYmlsaXR5IGRlZmluZXMsIGV4Y2x1ZGluZyBwYXRoIGhhbmRsaW5nIG1hY3JvcyAqLwotI2lmIGRlZmluZWQoX01TQ19WRVIpCisjaWYgZGVmaW5lZCBfTVNDX1ZFUgogIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQogIyBkZWZpbmUgc3RhdCAgICBfc3RhdAogIyBkZWZpbmUgY2htb2QgICBfY2htb2QKICMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAogIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52CiAjIGRlZmluZSBTX0lYVVNSIF9TX0lFWEVDCi0jIGlmbmRlZiBfSU5UUFRSX1RfREVGSU5FRAotIyAgZGVmaW5lIF9JTlRQVFJfVF9ERUZJTkVECi0jICBkZWZpbmUgaW50cHRyX3QgaW50Ci0jIGVuZGlmCi0jZWxpZiBkZWZpbmVkKF9fTUlOR1czMl9fKQorI2VsaWYgZGVmaW5lZCBfX01JTkdXMzJfXwogIyBkZWZpbmUgc2V0bW9kZSBfc2V0bW9kZQogIyBkZWZpbmUgc3RhdCAgICBfc3RhdAogIyBkZWZpbmUgY2htb2QgICBfY2htb2QKICMgZGVmaW5lIGdldGN3ZCAgX2dldGN3ZAogIyBkZWZpbmUgcHV0ZW52ICBfcHV0ZW52Ci0jZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjZWxpZiBkZWZpbmVkIF9fQ1lHV0lOX18KICMgZGVmaW5lIEhBVkVfU0VURU5WCiAjIGRlZmluZSBGT1BFTl9XQiAid2IiCi0vKiAjZWxpZiBkZWZpbmVkIChvdGhlciBwbGF0Zm9ybXMpIC4uLiAqLworLyogI2VsaWYgZGVmaW5lZCBvdGhlciBwbGF0Zm9ybXMgLi4uICovCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUEFUSF9NQVgpCisjaWYgZGVmaW5lZCBQQVRIX01BWAogIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAotI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorI2VsaWYgZGVmaW5lZCBNQVhQQVRITEVOCiAjIGRlZmluZSBMVF9QQVRITUFYIE1BWFBBVEhMRU4KICNlbHNlCiAjIGRlZmluZSBMVF9QQVRITUFYIDEwMjQKQEAgLTQyMzQsOCArNTQ4OCw4IEBACiAjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKICNlbmRpZgogCi0jaWYgZGVmaW5lZCAoX1dJTjMyKSB8fCBkZWZpbmVkIChfX01TRE9TX18pIHx8IGRlZmluZWQgKF9fREpHUFBfXykgfHwgXAotICBkZWZpbmVkIChfX09TMl9fKQorI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19NU0RPU19fIHx8IGRlZmluZWQgX19ESkdQUF9fIHx8IFwKKyAgZGVmaW5lZCBfX09TMl9fCiAjIGRlZmluZSBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQogIyBkZWZpbmUgRk9QRU5fV0IgIndiIgogIyBpZm5kZWYgRElSX1NFUEFSQVRPUl8yCkBAIC00MjY4LDEwICs1NTIyLDEwIEBACiAKICNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKICNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAotICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorICBpZiAoc3RhbGUpIHsgZnJlZSAoc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAogfSB3aGlsZSAoMCkKIAotI2lmIGRlZmluZWQoTFRfREVCVUdXUkFQUEVSKQorI2lmIGRlZmluZWQgTFRfREVCVUdXUkFQUEVSCiBzdGF0aWMgaW50IGx0X2RlYnVnID0gMTsKICNlbHNlCiBzdGF0aWMgaW50IGx0X2RlYnVnID0gMDsKQEAgLTQzMDQsNyArNTU1OCw3IEBACiBjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CiBFT0YKIAotCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzID0gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KICAgICAgICAgICAgICAgZnVuY190b19ob3N0X3BhdGggIiR0ZW1wX3JwYXRoIgogCSAgICAgIGNhdCA8PEVPRgogY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCI7CkBAIC00MzI4LDcgKzU1ODIsNyBAQAogRU9GCiAJICAgIGZpCiAKLQkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGZhc3RfaW5zdGFsbCI7IHRoZW4KIAkgICAgICBjYXQgPDxFT0YKIGNvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gImx0LSRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCiBFT0YKQEAgLTQzNTcsMTIgKzU2MTEsMTIgQEAKICAgY2hhciAqYWN0dWFsX2N3cmFwcGVyX25hbWU7CiAgIGNoYXIgKnRhcmdldF9uYW1lOwogICBjaGFyICpsdF9hcmd2X3plcm87Ci0gIGludHB0cl90IHJ2YWwgPSAxMjc7CisgIGludCBydmFsID0gMTI3OwogCiAgIGludCBpOwogCiAgIHByb2dyYW1fbmFtZSA9IChjaGFyICopIHhzdHJkdXAgKGJhc2VfbmFtZSAoYXJndlswXSkpOwotICBuZXdhcmd6ID0gWE1BTExPQyAoY2hhciAqLCBhcmdjICsgMSk7CisgIG5ld2FyZ3ogPSBYTUFMTE9DIChjaGFyICosIChzaXplX3QpIGFyZ2MgKyAxKTsKIAogICAvKiB2ZXJ5IHNpbXBsZSBhcmcgcGFyc2luZzsgZG9uJ3Qgd2FudCB0byByZWx5IG9uIGdldG9wdAogICAgKiBhbHNvLCBjb3B5IGFsbCBub24gY3dyYXBwZXIgb3B0aW9ucyB0byBuZXdhcmd6LCBleGNlcHQKQEAgLTQzNzEsMTAgKzU2MjUsMTAgQEAKICAgbmV3YXJnYz0wOwogICBmb3IgKGkgPSAxOyBpIDwgYXJnYzsgaSsrKQogICAgIHsKLSAgICAgIGlmIChzdHJjbXAgKGFyZ3ZbaV0sIGR1bXBzY3JpcHRfb3B0KSA9PSAwKQorICAgICAgaWYgKFNUUkVRIChhcmd2W2ldLCBkdW1wc2NyaXB0X29wdCkpCiAJewogRU9GCi0JICAgIGNhc2UgIiRob3N0IiBpbgorCSAgICBjYXNlICRob3N0IGluCiAJICAgICAgKm1pbmd3KiB8ICpjeWd3aW4qICkKIAkJIyBtYWtlIHN0ZG91dCB1c2UgInVuaXgiIGxpbmUgZW5kaW5ncwogCQllY2hvICIgICAgICAgICAgc2V0bW9kZSgxLF9PX0JJTkFSWSk7IgpAQCAtNDM4NSwxMiArNTYzOSwxMiBAQAogCSAgbHRfZHVtcF9zY3JpcHQgKHN0ZG91dCk7CiAJICByZXR1cm4gMDsKIAl9Ci0gICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBkZWJ1Z19vcHQpID09IDApCisgICAgICBpZiAoU1RSRVEgKGFyZ3ZbaV0sIGRlYnVnX29wdCkpCiAJewogICAgICAgICAgIGx0X2RlYnVnID0gMTsKICAgICAgICAgICBjb250aW51ZTsKIAl9Ci0gICAgICBpZiAoc3RyY21wIChhcmd2W2ldLCBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCkgPT0gMCkKKyAgICAgIGlmIChTVFJFUSAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgpKQogICAgICAgICB7CiAgICAgICAgICAgLyogaG93ZXZlciwgaWYgdGhlcmUgaXMgYW4gb3B0aW9uIGluIHRoZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWAogICAgICAgICAgICAgIG5hbWVzcGFjZSwgYnV0IGl0IGlzIG5vdCBvbmUgb2YgdGhlIG9uZXMgd2Uga25vdyBhYm91dCBhbmQKQEAgLTQ0MTMsNyArNTY2Nyw3IEBACiBFT0YKIAkgICAgY2F0IDw8RU9GCiAgIC8qIFRoZSBHTlUgYmFubmVyIG11c3QgYmUgdGhlIGZpcnN0IG5vbi1lcnJvciBkZWJ1ZyBtZXNzYWdlICovCi0gIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICJsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXG4iKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgImxpYnRvb2wgd3JhcHBlciAoR05VICRQQUNLQUdFKSAkVkVSU0lPTlxuIik7CiBFT0YKIAkgICAgY2F0IDw8IkVPRiIKICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBhcmd2WzBdOiAlc1xuIiwgYXJndlswXSk7CkBAIC00NTI0LDcgKzU3NzgsNyBAQAogCQljYXQgPDwiRU9GIgogICAvKiBleGVjdiBkb2Vzbid0IGFjdHVhbGx5IHdvcmsgb24gbWluZ3cgYXMgZXhwZWN0ZWQgb24gdW5peCAqLwogICBuZXdhcmd6ID0gcHJlcGFyZV9zcGF3biAobmV3YXJneik7Ci0gIHJ2YWwgPSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CisgIHJ2YWwgPSAoaW50KSBfc3Bhd252IChfUF9XQUlULCBsdF9hcmd2X3plcm8sIChjb25zdCBjaGFyICogY29uc3QgKikgbmV3YXJneik7CiAgIGlmIChydmFsID09IC0xKQogICAgIHsKICAgICAgIC8qIGZhaWxlZCB0byBzdGFydCBwcm9jZXNzICovCkBAIC00NTY5LDcgKzU4MjMsNyBAQAogewogICBjb25zdCBjaGFyICpiYXNlOwogCi0jaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisjaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQogICAvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCiAgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCiAgICAgbmFtZSArPSAyOwpAQCAtNDYyOCw3ICs1ODgyLDcgQEAKICAgY29uc3QgY2hhciAqcF9uZXh0OwogICAvKiBzdGF0aWMgYnVmZmVyIGZvciBnZXRjd2QgKi8KICAgY2hhciB0bXBbTFRfUEFUSE1BWCArIDFdOwotICBpbnQgdG1wX2xlbjsKKyAgc2l6ZV90IHRtcF9sZW47CiAgIGNoYXIgKmNvbmNhdF9uYW1lOwogCiAgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCkBAIC00NjM4LDcgKzU4OTIsNyBAQAogICAgIHJldHVybiBOVUxMOwogCiAgIC8qIEFic29sdXRlIHBhdGg/ICovCi0jaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisjaWYgZGVmaW5lZCBIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTQogICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpIHdyYXBwZXJbMF0pICYmIHdyYXBwZXJbMV0gPT0gJzonKQogICAgIHsKICAgICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CkBAIC00NjU2LDcgKzU5MTAsNyBAQAogCSAgICByZXR1cm4gY29uY2F0X25hbWU7CiAJICBYRlJFRSAoY29uY2F0X25hbWUpOwogCX0KLSNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyNpZiBkZWZpbmVkIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCiAgICAgfQogI2VuZGlmCiAKQEAgLTQ2NzksNyArNTkzMyw3IEBACiAJICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKIAkJaWYgKElTX1BBVEhfU0VQQVJBVE9SICgqcSkpCiAJCSAgYnJlYWs7Ci0JICAgICAgcF9sZW4gPSBxIC0gcDsKKwkgICAgICBwX2xlbiA9IChzaXplX3QpIChxIC0gcCk7CiAJICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOwogCSAgICAgIGlmIChwX2xlbiA9PSAwKQogCQl7CkBAIC00Nzk4LDcgKzYwNTIsNyBAQAogICBpZiAocGF0bGVuIDw9IGxlbikKICAgICB7CiAgICAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOwotICAgICAgaWYgKHN0cmNtcCAoc3RyLCBwYXQpID09IDApCisgICAgICBpZiAoU1RSRVEgKHN0ciwgcGF0KSkKIAkqc3RyID0gJ1wwJzsKICAgICB9CiAgIHJldHVybiBzdHI7CkBAIC00ODYzLDcgKzYxMTcsNyBAQAogICAgIGNoYXIgKnN0ciA9IHhzdHJkdXAgKHZhbHVlKTsKICAgICBzZXRlbnYgKG5hbWUsIHN0ciwgMSk7CiAjZWxzZQotICAgIGludCBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMSArIHN0cmxlbiAodmFsdWUpICsgMTsKKyAgICBzaXplX3QgbGVuID0gc3RybGVuIChuYW1lKSArIDEgKyBzdHJsZW4gKHZhbHVlKSArIDE7CiAgICAgY2hhciAqc3RyID0gWE1BTExPQyAoY2hhciwgbGVuKTsKICAgICBzcHJpbnRmIChzdHIsICIlcz0lcyIsIG5hbWUsIHZhbHVlKTsKICAgICBpZiAocHV0ZW52IChzdHIpICE9IEVYSVRfU1VDQ0VTUykKQEAgLTQ4ODAsOCArNjEzNCw4IEBACiAgIGNoYXIgKm5ld192YWx1ZTsKICAgaWYgKG9yaWdfdmFsdWUgJiYgKm9yaWdfdmFsdWUpCiAgICAgewotICAgICAgaW50IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKLSAgICAgIGludCBhZGRfbGVuID0gc3RybGVuIChhZGQpOworICAgICAgc2l6ZV90IG9yaWdfdmFsdWVfbGVuID0gc3RybGVuIChvcmlnX3ZhbHVlKTsKKyAgICAgIHNpemVfdCBhZGRfbGVuID0gc3RybGVuIChhZGQpOwogICAgICAgbmV3X3ZhbHVlID0gWE1BTExPQyAoY2hhciwgYWRkX2xlbiArIG9yaWdfdmFsdWVfbGVuICsgMSk7CiAgICAgICBpZiAodG9fZW5kKQogICAgICAgICB7CkBAIC00OTEyLDEwICs2MTY2LDEwIEBACiAgICAgewogICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOwogICAgICAgLyogc29tZSBzeXN0ZW1zIGNhbid0IGNvcGUgd2l0aCBhICc6Jy10ZXJtaW5hdGVkIHBhdGggIycgKi8KLSAgICAgIGludCBsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSk7Ci0gICAgICB3aGlsZSAoKChsZW4gPSBzdHJsZW4gKG5ld192YWx1ZSkpID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQorICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKKyAgICAgIHdoaWxlICgobGVuID4gMCkgJiYgSVNfUEFUSF9TRVBBUkFUT1IgKG5ld192YWx1ZVtsZW4tMV0pKQogICAgICAgICB7Ci0gICAgICAgICAgbmV3X3ZhbHVlW2xlbi0xXSA9ICdcMCc7CisgICAgICAgICAgbmV3X3ZhbHVlWy0tbGVuXSA9ICdcMCc7CiAgICAgICAgIH0KICAgICAgIGx0X3NldGVudiAobmFtZSwgbmV3X3ZhbHVlKTsKICAgICAgIFhGUkVFIChuZXdfdmFsdWUpOwpAQCAtNTA4Miw3ICs2MzM2LDggQEAKICMgVHJ1ZSBpZiBBUkcgaXMgYW4gaW1wb3J0IGxpYiwgYXMgaW5kaWNhdGVkIGJ5ICRmaWxlX21hZ2ljX2NtZAogZnVuY193aW4zMl9pbXBvcnRfbGliX3AgKCkKIHsKLSAgICAkb3B0X2RlYnVnCisgICAgJGRlYnVnX2NtZAorCiAgICAgY2FzZSBgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCJcJDFcIiAyPi9kZXYvbnVsbCB8ICRTRUQgLWUgMTBxYCBpbgogICAgICppbXBvcnQqKSA6IDs7CiAgICAgKikgZmFsc2UgOzsKQEAgLTUwOTIsMTcgKzYzNDcsMTggQEAKICMgZnVuY19tb2RlX2xpbmsgYXJnLi4uCiBmdW5jX21vZGVfbGluayAoKQogewotICAgICRvcHRfZGVidWcKKyAgICAkZGVidWdfY21kCisKICAgICBjYXNlICRob3N0IGluCiAgICAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKICAgICAgICMgSXQgaXMgaW1wb3NzaWJsZSB0byBsaW5rIGEgZGxsIHdpdGhvdXQgdGhpcyBzZXR0aW5nLCBhbmQKICAgICAgICMgd2Ugc2hvdWxkbid0IGZvcmNlIHRoZSBtYWtlZmlsZSBtYWludGFpbmVyIHRvIGZpZ3VyZSBvdXQKLSAgICAgICMgd2hpY2ggc3lzdGVtIHdlIGFyZSBjb21waWxpbmcgZm9yIGluIG9yZGVyIHRvIHBhc3MgYW4gZXh0cmEKKyAgICAgICMgd2hhdCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQogICAgICAgIyBmbGFnIGZvciBldmVyeSBsaWJ0b29sIGludm9jYXRpb24uCiAgICAgICAjIGFsbG93X3VuZGVmaW5lZD1ubwogCiAgICAgICAjIEZJWE1FOiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0aGUgYWJvdmUgd2hlbiB0cnlpbmcKLSAgICAgICMgdG8gbWFrZSBhIGRsbCB3aGljaCBoYXMgdW5kZWZpbmVkIHN5bWJvbHMsIGluIHdoaWNoIGNhc2Ugbm90CisgICAgICAjIHRvIG1ha2UgYSBkbGwgdGhhdCBoYXMgdW5kZWZpbmVkIHN5bWJvbHMsIGluIHdoaWNoIGNhc2Ugbm90CiAgICAgICAjIGV2ZW4gYSBzdGF0aWMgbGlicmFyeSBpcyBidWlsdC4gIEZvciBub3csIHdlIG5lZWQgdG8gc3BlY2lmeQogICAgICAgIyAtbm8tdW5kZWZpbmVkIG9uIHRoZSBsaWJ0b29sIGxpbmsgbGluZSB3aGVuIHdlIGNhbiBiZSBjZXJ0YWluCiAgICAgICAjIHRoYXQgYWxsIHN5bWJvbHMgYXJlIHNhdGlzZmllZCwgb3RoZXJ3aXNlIHdlIGdldCBhIHN0YXRpYyBsaWJyYXJ5LgpAQCAtNTE0OSw3ICs2NDA1LDcgQEAKICAgICBub25fcGljX29iamVjdHM9CiAgICAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9CiAgICAgcHJlZmVyX3N0YXRpY19saWJzPW5vCi0gICAgcHJlbG9hZD1ubworICAgIHByZWxvYWQ9ZmFsc2UKICAgICBwcmV2PQogICAgIHByZXZhcmc9CiAgICAgcmVsZWFzZT0KQEAgLTUxNjEsNyArNjQxNyw3IEBACiAgICAgdmluZm89CiAgICAgdmluZm9fbnVtYmVyPW5vCiAgICAgd2Vha19saWJzPQotICAgIHNpbmdsZV9tb2R1bGU9IiR7d2x9LXNpbmdsZV9tb2R1bGUiCisgICAgc2luZ2xlX21vZHVsZT0kd2wtc2luZ2xlX21vZHVsZQogICAgIGZ1bmNfaW5mZXJfdGFnICRiYXNlX2NvbXBpbGUKIAogICAgICMgV2UgbmVlZCB0byBrbm93IC1zdGF0aWMsIHRvIGdldCB0aGUgcmlnaHQgb3V0cHV0IGZpbGVuYW1lcy4KQEAgLTUxNjksMTUgKzY0MjUsMTUgQEAKICAgICBkbwogICAgICAgY2FzZSAkYXJnIGluCiAgICAgICAtc2hhcmVkKQotCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCi0JICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwl0ZXN0IHllcyAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgXAorCSAgJiYgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJjYW5ub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKIAlidWlsZF9vbGRfbGlicz1ubwogCWJyZWFrCiAJOzsKICAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQogCWNhc2UgJGFyZyBpbgogCS1hbGwtc3RhdGljKQotCSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IC16ICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KIAkgICAgZnVuY193YXJuaW5nICJjb21wbGV0ZSBzdGF0aWMgbGlua2luZyBpcyBpbXBvc3NpYmxlIGluIHRoaXMgY29uZmlndXJhdGlvbiIKIAkgIGZpCiAJICBpZiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KQEAgLTUyMTAsNyArNjQ2Niw3IEBACiAKICAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KICAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCi0gICAgICBhcmc9IiQxIgorICAgICAgYXJnPSQxCiAgICAgICBzaGlmdAogICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKICAgICAgIHFhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0CkBAIC01MjI3LDIxICs2NDgzLDIxIEBACiAKIAljYXNlICRwcmV2IGluCiAJYmluZGlyKQotCSAgYmluZGlyPSIkYXJnIgorCSAgYmluZGlyPSRhcmcKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKIAlkbGZpbGVzfGRscHJlZmlsZXMpCi0JICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSBubzsgdGhlbgorCSAgJHByZWxvYWQgfHwgewogCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgogCSAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiBAU1lNRklMRUAiCiAJICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiBAU1lNRklMRUAiCi0JICAgIHByZWxvYWQ9eWVzCi0JICBmaQorCSAgICBwcmVsb2FkPToKKwkgIH0KIAkgIGNhc2UgJGFyZyBpbgogCSAgKi5sYSB8ICoubG8pIDs7ICAjIFdlIGhhbmRsZSB0aGVzZSBjYXNlcyBiZWxvdy4KIAkgIGZvcmNlKQotCSAgICBpZiB0ZXN0ICIkZGxzZWxmIiA9IG5vOyB0aGVuCisJICAgIGlmIHRlc3Qgbm8gPSAiJGRsc2VsZiI7IHRoZW4KIAkgICAgICBkbHNlbGY9bmVlZGxlc3MKIAkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKIAkgICAgZmkKQEAgLTUyNDksOSArNjUwNSw5IEBACiAJICAgIGNvbnRpbnVlCiAJICAgIDs7CiAJICBzZWxmKQotCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgIGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KIAkgICAgICBkbHNlbGY9eWVzCi0JICAgIGVsaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlcyAmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiICE9IHllczsgdGhlbgorCSAgICBlbGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiIgJiYgdGVzdCB5ZXMgIT0gIiRkbG9wZW5fc2VsZiI7IHRoZW4KIAkgICAgICBkbHNlbGY9eWVzCiAJICAgIGVsc2UKIAkgICAgICBkbHNlbGY9bmVlZGxlc3MKQEAgLTUyNjEsNyArNjUxNyw3IEBACiAJICAgIGNvbnRpbnVlCiAJICAgIDs7CiAJICAqKQotCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJICAgIGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KIAkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGFyZyIKIAkgICAgZWxzZQogCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkYXJnIgpAQCAtNTI3MiwxNCArNjUyOCwxNCBAQAogCSAgZXNhYwogCSAgOzsKIAlleHBzeW1zKQotCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCisJICBleHBvcnRfc3ltYm9scz0kYXJnCiAJICB0ZXN0IC1mICIkYXJnIiBcCi0JICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICAgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgInN5bWJvbCBmaWxlICckYXJnJyBkb2VzIG5vdCBleGlzdCIKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKIAlleHBzeW1zX3JlZ2V4KQotCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9IiRhcmciCisJICBleHBvcnRfc3ltYm9sc19yZWdleD0kYXJnCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CkBAIC01Mjk3LDcgKzY1NTMsMTMgQEAKIAkgIGNvbnRpbnVlCiAJICA7OwogCWluc3RfcHJlZml4KQotCSAgaW5zdF9wcmVmaXhfZGlyPSIkYXJnIgorCSAgaW5zdF9wcmVmaXhfZGlyPSRhcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwltbGx2bSkKKwkgICMgQ2xhbmcgZG9lcyBub3QgdXNlIExMVk0gdG8gbGluaywgc28gd2UgY2FuIHNpbXBseSBkaXNjYXJkIGFueQorCSAgIyAnLW1sbHZtICRhcmcnIG9wdGlvbnMgd2hlbiBkb2luZyB0aGUgbGluayBzdGVwLgogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwpAQCAtNTMyMSwyMSArNjU4MywyMSBAQAogCiAJCWlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fAogCQkgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8Ci0JCSAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKLQkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KLQkJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkJICAgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IiAmJgorCQkgICB0ZXN0IG5vbmUgPSAiJG5vbl9waWNfb2JqZWN0IjsgdGhlbgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciAnJGFyZyciCiAJCWZpCiAKIAkJIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KIAkJZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKLQkJeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJCXhkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKIAotCQlpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQlpZiB0ZXN0IG5vbmUgIT0gIiRwaWNfb2JqZWN0IjsgdGhlbgogCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JCSAgcGljX29iamVjdD0iJHhkaXIkcGljX29iamVjdCIKKwkJICBwaWNfb2JqZWN0PSR4ZGlyJHBpY19vYmplY3QKIAotCQkgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLQkJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB5ZXM7IHRoZW4KKwkJICBpZiB0ZXN0IGRsZmlsZXMgPSAiJHByZXYiOyB0aGVuCisJCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IHllcyA9ICIkZGxvcGVuX3N1cHBvcnQiOyB0aGVuCiAJCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKIAkJICAgICAgcHJldj0KIAkJICAgICAgY29udGludWUKQEAgLTUzNDYsNyArNjYwOCw3IEBACiAJCSAgZmkKIAogCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCi0JCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCQkgIGlmIHRlc3QgZGxwcmVmaWxlcyA9ICIkcHJldiI7IHRoZW4KIAkJICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KIAkJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKIAkJICAgIHByZXY9CkBAIC01MzU0LDIzICs2NjE2LDIzIEBACiAKIAkJICAjIEEgUElDIG9iamVjdC4KIAkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCi0JCSAgYXJnPSIkcGljX29iamVjdCIKKwkJICBhcmc9JHBpY19vYmplY3QKIAkJZmkKIAogCQkjIE5vbi1QSUMgb2JqZWN0LgotCQlpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJaWYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCiAJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KLQkJICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisJCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkbm9uX3BpY19vYmplY3QKIAogCQkgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAogCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKLQkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KLQkJICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCQkgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0IG5vbmUgPSAiJHBpY19vYmplY3QiOyB0aGVuCisJCSAgICBhcmc9JG5vbl9waWNfb2JqZWN0CiAJCSAgZmkKIAkJZWxzZQogCQkgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KIAkJICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCi0JCSAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCQkgIG5vbl9waWNfb2JqZWN0PSRwaWNfb2JqZWN0CiAJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgogCQlmaQogCSAgICAgIGVsc2UKQEAgLTUzNzgsNyArNjY0MCw3IEBACiAJCWlmICRvcHRfZHJ5X3J1bjsgdGhlbgogCQkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCiAJCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKLQkJICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkJICB4ZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAKIAkJICBmdW5jX2xvMm8gIiRhcmciCiAJCSAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKQEAgLTUzODYsMjQgKzY2NDgsMjQgQEAKIAkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCiAJCSAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgogCSAgICAgICAgZWxzZQotCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCisJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgogCQlmaQogCSAgICAgIGZpCiAJICAgIGRvbmUKIAkgIGVsc2UKLQkgICAgZnVuY19mYXRhbF9lcnJvciAibGluayBpbnB1dCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSAnJGFyZycgZG9lcyBub3QgZXhpc3QiCiAJICBmaQogCSAgYXJnPSRzYXZlX2FyZwogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwogCXByZWNpb3VzX3JlZ2V4KQotCSAgcHJlY2lvdXNfZmlsZXNfcmVnZXg9IiRhcmciCisJICBwcmVjaW91c19maWxlc19yZWdleD0kYXJnCiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CiAJcmVsZWFzZSkKLQkgIHJlbGVhc2U9Ii0kYXJnIgorCSAgcmVsZWFzZT0tJGFyZwogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwpAQCAtNTQxNSw3ICs2Njc3LDcgQEAKIAkgICAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCiAJICAgIDs7CiAJICBlc2FjCi0JICBpZiB0ZXN0ICIkcHJldiIgPSBycGF0aDsgdGhlbgorCSAgaWYgdGVzdCBycGF0aCA9ICIkcHJldiI7IHRoZW4KIAkgICAgY2FzZSAiJHJwYXRoICIgaW4KIAkgICAgKiIgJGFyZyAiKikgOzsKIAkgICAgKikgZnVuY19hcHBlbmQgcnBhdGggIiAkYXJnIiA7OwpAQCAtNTQzMCw3ICs2NjkyLDcgQEAKIAkgIGNvbnRpbnVlCiAJICA7OwogCXNocmV4dCkKLQkgIHNocmV4dF9jbWRzPSIkYXJnIgorCSAgc2hyZXh0X2NtZHM9JGFyZwogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OwpAQCAtNTQ3MCw3ICs2NzMyLDcgQEAKIAllc2FjCiAgICAgICBmaSAjIHRlc3QgLW4gIiRwcmV2IgogCi0gICAgICBwcmV2YXJnPSIkYXJnIgorICAgICAgcHJldmFyZz0kYXJnCiAKICAgICAgIGNhc2UgJGFyZyBpbgogICAgICAgLWFsbC1zdGF0aWMpCkBAIC01NDg0LDcgKzY3NDYsNyBAQAogCiAgICAgICAtYWxsb3ctdW5kZWZpbmVkKQogCSMgRklYTUU6IHJlbW92ZSB0aGlzIGZsYWcgc29tZXRpbWUgaW4gdGhlIGZ1dHVyZS4KLQlmdW5jX2ZhdGFsX2Vycm9yICJcYC1hbGxvdy11bmRlZmluZWQnIG11c3Qgbm90IGJlIHVzZWQgYmVjYXVzZSBpdCBpcyB0aGUgZGVmYXVsdCIKKwlmdW5jX2ZhdGFsX2Vycm9yICInLWFsbG93LXVuZGVmaW5lZCcgbXVzdCBub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IgogCTs7CiAKICAgICAgIC1hdm9pZC12ZXJzaW9uKQpAQCAtNTUxNiw3ICs2Nzc4LDcgQEAKIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KIAkgIGZ1bmNfZmF0YWxfZXJyb3IgIm1vcmUgdGhhbiBvbmUgLWV4cG9ydGVkLXN5bWJvbHMgYXJndW1lbnQgaXMgbm90IGFsbG93ZWQiCiAJZmkKLQlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1leHBvcnQtc3ltYm9scyI7IHRoZW4KKwlpZiB0ZXN0IFgtZXhwb3J0LXN5bWJvbHMgPSAiWCRhcmciOyB0aGVuCiAJICBwcmV2PWV4cHN5bXMKIAllbHNlCiAJICBwcmV2PWV4cHN5bXNfcmVnZXgKQEAgLTU1NTAsOSArNjgxMiw5IEBACiAJZnVuY19zdHJpcG5hbWUgIi1MIiAnJyAiJGFyZyIKIAlpZiB0ZXN0IC16ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IjsgdGhlbgogCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiBcYC1MJyBhbmQgXGAkMSciCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInJlcXVpcmUgbm8gc3BhY2UgYmV0d2VlbiAnLUwnIGFuZCAnJDEnIgogCSAgZWxzZQotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJuZWVkIHBhdGggZm9yIFxgLUwnIG9wdGlvbiIKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciAnLUwnIG9wdGlvbiIKIAkgIGZpCiAJZmkKIAlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKQEAgLTU1NjMsOCArNjgyNSw4IEBACiAJKikKIAkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKIAkgIHRlc3QgLXogIiRhYnNkaXIiICYmIFwKLQkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgotCSAgZGlyPSIkYWJzZGlyIgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckZGlyJyIKKwkgIGRpcj0kYWJzZGlyCiAJICA7OwogCWVzYWMKIAljYXNlICIkZGVwbGlicyAiIGluCkBAIC01NTk5LDcgKzY4NjEsNyBAQAogCTs7CiAKICAgICAgIC1sKikKLQlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgfHwgdGVzdCAiWCRhcmciID0gIlgtbG0iOyB0aGVuCisJaWYgdGVzdCBYLWxjID0gIlgkYXJnIiB8fCB0ZXN0IFgtbG0gPSAiWCRhcmciOyB0aGVuCiAJICBjYXNlICRob3N0IGluCiAJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCiAJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBvciBtYXRoIGxpYnJhcnkgKGFzIHN1Y2gpCkBAIC01NjA3LDExICs2ODY5LDExIEBACiAJICAgIDs7CiAJICAqLSotb3MyKikKIAkgICAgIyBUaGVzZSBzeXN0ZW1zIGRvbid0IGFjdHVhbGx5IGhhdmUgYSBDIGxpYnJhcnkgKGFzIHN1Y2gpCi0JICAgIHRlc3QgIlgkYXJnIiA9ICJYLWxjIiAmJiBjb250aW51ZQorCSAgICB0ZXN0IFgtbGMgPSAiWCRhcmciICYmIGNvbnRpbnVlCiAJICAgIDs7Ci0JICAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KikKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqIHwgKi0qLWJpdHJpZyopCiAJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgotCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQogCSAgICA7OwogCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQogCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yawpAQCAtNTYyMCwxNiArNjg4MiwxNiBAQAogCSAgICA7OwogCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQogCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKLQkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIHRlc3QgWC1sYyA9ICJYJGFyZyIgJiYgY29udGludWUKIAkgICAgOzsKIAkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKIAkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yawotCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgdGVzdCBYLWxjID0gIlgkYXJnIiAmJiBjb250aW51ZQogCSAgICA7OwogCSAgZXNhYwotCWVsaWYgdGVzdCAiWCRhcmciID0gIlgtbGNfciI7IHRoZW4KKwllbGlmIHRlc3QgWC1sY19yID0gIlgkYXJnIjsgdGhlbgogCSBjYXNlICRob3N0IGluCi0JICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAqLSotb3BlbmJzZCogfCAqLSotZnJlZWJzZCogfCAqLSotZHJhZ29uZmx5KiB8ICotKi1iaXRyaWcqKQogCSAgICMgRG8gbm90IGluY2x1ZGUgbGliY19yIGRpcmVjdGx5LCB1c2UgLXB0aHJlYWQgZmxhZy4KIAkgICBjb250aW51ZQogCSAgIDs7CkBAIC01NjM5LDYgKzY5MDEsMTEgQEAKIAljb250aW51ZQogCTs7CiAKKyAgICAgIC1tbGx2bSkKKwlwcmV2PW1sbHZtCisJY29udGludWUKKwk7OworCiAgICAgICAtbW9kdWxlKQogCW1vZHVsZT15ZXMKIAljb250aW51ZQpAQCAtNTY2OCw3ICs2OTM1LDcgQEAKIAk7OwogCiAgICAgICAtbXVsdGlfbW9kdWxlKQotCXNpbmdsZV9tb2R1bGU9IiR7d2x9LW11bHRpX21vZHVsZSIKKwlzaW5nbGVfbW9kdWxlPSR3bC1tdWx0aV9tb2R1bGUKIAljb250aW51ZQogCTs7CiAKQEAgLTU2ODIsOCArNjk0OSw4IEBACiAJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKiB8ICotY2VnY2MqKQogCSAgIyBUaGUgUEFUSCBoYWNrZXJ5IGluIHdyYXBwZXIgc2NyaXB0cyBpcyByZXF1aXJlZCBvbiBXaW5kb3dzCiAJICAjIGFuZCBEYXJ3aW4gaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KLQkgIGZ1bmNfd2FybmluZyAiXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiCi0JICBmdW5jX3dhcm5pbmcgImFzc3VtaW5nIFxgLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIKKwkgIGZ1bmNfd2FybmluZyAiJy1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKKwkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgJy1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiCiAJICBmYXN0X2luc3RhbGw9bm8KIAkgIDs7CiAJKikgbm9faW5zdGFsbD15ZXMgOzsKQEAgLTU3ODgsMTQgKzcwNTUsMTQgQEAKIAlmdW5jX3N0cmlwbmFtZSAnLVdjLCcgJycgIiRhcmciCiAJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJYXJnPQotCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCXNhdmVfaWZzPSRJRlM7IElGUz0sCiAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCi0JICBJRlM9IiRzYXZlX2lmcyIKKwkgIElGUz0kc2F2ZV9pZnMKICAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKIAkgIGZ1bmNfYXBwZW5kIGFyZyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCWRvbmUKLQlJRlM9IiRzYXZlX2lmcyIKKwlJRlM9JHNhdmVfaWZzCiAJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgogCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJOzsKQEAgLTU4MDQsMTUgKzcwNzEsMTUgQEAKIAlmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCiAJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJYXJnPQotCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCXNhdmVfaWZzPSRJRlM7IElGUz0sCiAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCi0JICBJRlM9IiRzYXZlX2lmcyIKKwkgIElGUz0kc2F2ZV9pZnMKICAgICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkZmxhZyIKIAkgIGZ1bmNfYXBwZW5kIGFyZyAiICR3bCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCWRvbmUKLQlJRlM9IiRzYXZlX2lmcyIKKwlJRlM9JHNhdmVfaWZzCiAJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgogCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJOzsKQEAgLTU4MzUsNyArNzEwMiw3IEBACiAgICAgICAjIC1tc2dfKiBmb3Igb3NmIGNjCiAgICAgICAtbXNnXyopCiAJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKLQlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwlhcmc9JGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0CiAJOzsKIAogICAgICAgIyBGbGFncyB0byBiZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQsIHdpdGggcmF0aW9uYWxlOgpAQCAtNTg1MCwxMiArNzExNywxMyBAQAogICAgICAgIyBAZmlsZSAgICAgICAgICAgICAgICBHQ0MgcmVzcG9uc2UgZmlsZXMKICAgICAgICMgLXRwPSogICAgICAgICAgICAgICAgUG9ydGxhbmQgcGdjYyB0YXJnZXQgcHJvY2Vzc29yIHNlbGVjdGlvbgogICAgICAgIyAtLXN5c3Jvb3Q9KiAgICAgICAgICBmb3Igc3lzcm9vdCBzdXBwb3J0Ci0gICAgICAjIC1PKiwgLWZsdG8qLCAtZndob3ByKiwgLWZ1c2UtbGlua2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGltaXphdGlvbgorICAgICAgIyAtTyosIC1nKiwgLWZsdG8qLCAtZndob3ByKiwgLWZ1c2UtbGlua2VyLXBsdWdpbiBHQ0MgbGluay10aW1lIG9wdGltaXphdGlvbgorICAgICAgIyAtc3RkbGliPSogICAgICAgICAgICBzZWxlY3QgYysrIHN0ZCBsaWIgd2l0aCBjbGFuZwogICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCiAgICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCp8LXRwPSp8LS1zeXNyb290PSp8IFwKLSAgICAgIC1PKnwtZmx0byp8LWZ3aG9wcip8LWZ1c2UtbGlua2VyLXBsdWdpbikKKyAgICAgIC1PKnwtZyp8LWZsdG8qfC1md2hvcHIqfC1mdXNlLWxpbmtlci1wbHVnaW58LXN0ZGxpYj0qKQogICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgotCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCWFyZz0kZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQKICAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKICAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCiAgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKQEAgLTU4NjUsNyArNzEzMyw3IEBACiAgICAgICAjIFNvbWUgb3RoZXIgY29tcGlsZXIgZmxhZy4KICAgICAgIC0qIHwgKyopCiAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0JYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAogCTs7CiAKICAgICAgICouJG9iamV4dCkKQEAgLTU4ODYsMjEgKzcxNTQsMjEgQEAKIAogCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CiAJICAgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8Ci0JICAgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmCi0JICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKKwkgICAgIHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3Qgbm9uZSA9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciAnJGFyZyciCiAJICBmaQogCiAJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgogCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKLQkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCSAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCi0JICBpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgdGVzdCBub25lID0gIiRwaWNfb2JqZWN0IiB8fCB7CiAJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JICAgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisJICAgIHBpY19vYmplY3Q9JHhkaXIkcGljX29iamVjdAogCi0JICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLQkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgZGxmaWxlcyA9ICIkcHJldiI7IHRoZW4KKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIiAmJiB0ZXN0IHllcyA9ICIkZGxvcGVuX3N1cHBvcnQiOyB0aGVuCiAJCWZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkcGljX29iamVjdCIKIAkJcHJldj0KIAkJY29udGludWUKQEAgLTU5MTEsNyArNzE3OSw3IEBACiAJICAgIGZpCiAKIAkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKLQkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCSAgICBpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCiAJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgogCSAgICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkcGljX29iamVjdCIKIAkgICAgICBwcmV2PQpAQCAtNTkxOSwyMyArNzE4NywyMyBAQAogCiAJICAgICMgQSBQSUMgb2JqZWN0LgogCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCi0JICAgIGFyZz0iJHBpY19vYmplY3QiCi0JICBmaQorCSAgICBhcmc9JHBpY19vYmplY3QKKwkgIH0KIAogCSAgIyBOb24tUElDIG9iamVjdC4KLQkgIGlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgaWYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCiAJICAgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JICAgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKwkgICAgbm9uX3BpY19vYmplY3Q9JHhkaXIkbm9uX3BpY19vYmplY3QKIAogCSAgICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKIAkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgotCSAgICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KLQkgICAgICBhcmc9IiRub25fcGljX29iamVjdCIKKwkgICAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IHRlc3Qgbm9uZSA9ICIkcGljX29iamVjdCI7IHRoZW4KKwkgICAgICBhcmc9JG5vbl9waWNfb2JqZWN0CiAJICAgIGZpCiAJICBlbHNlCiAJICAgICMgSWYgdGhlIFBJQyBvYmplY3QgZXhpc3RzLCB1c2UgaXQgaW5zdGVhZC4KIAkgICAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgotCSAgICBub25fcGljX29iamVjdD0iJHBpY19vYmplY3QiCisJICAgIG5vbl9waWNfb2JqZWN0PSRwaWNfb2JqZWN0CiAJICAgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKIAkgIGZpCiAJZWxzZQpAQCAtNTk0Myw3ICs3MjExLDcgQEAKIAkgIGlmICRvcHRfZHJ5X3J1bjsgdGhlbgogCSAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgogCSAgICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgotCSAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkgICAgeGRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdAogCiAJICAgIGZ1bmNfbG8ybyAiJGFyZyIKIAkgICAgcGljX29iamVjdD0keGRpciRvYmpkaXIvJGZ1bmNfbG8yb19yZXN1bHQKQEAgLTU5NTEsNyArNzIxOSw3IEBACiAJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKIAkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgogCSAgZWxzZQotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRhcmcnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgb2JqZWN0IgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICInJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCiAJICBmaQogCWZpCiAJOzsKQEAgLTU5NjcsMTEgKzcyMzUsMTEgQEAKIAkjIEEgbGlidG9vbC1jb250cm9sbGVkIGxpYnJhcnkuCiAKIAlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGFyZyIKLQlpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJaWYgdGVzdCBkbGZpbGVzID0gIiRwcmV2IjsgdGhlbgogCSAgIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbG9wZW4uCiAJICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgIHByZXY9Ci0JZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJZWxpZiB0ZXN0IGRscHJlZmlsZXMgPSAiJHByZXYiOyB0aGVuCiAJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgogCSAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICBwcmV2PQpAQCAtNTk4Niw3ICs3MjU0LDcgQEAKIAkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKIAkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgogCWZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCi0JYXJnPSIkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAogCTs7CiAgICAgICBlc2FjICMgYXJnCiAKQEAgLTU5OTgsOSArNzI2Niw5IEBACiAgICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAogCiAgICAgdGVzdCAtbiAiJHByZXYiICYmIFwKLSAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlIFxgJHByZXZhcmcnIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCIKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAidGhlICckcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgogCi0gICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRleHBvcnRfZHluYW1pYyIgJiYgdGVzdCAtbiAiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYyI7IHRoZW4KICAgICAgIGV2YWwgYXJnPVwiJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCiAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgogICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCkBAIC02MDA5LDEyICs3Mjc3LDEyIEBACiAgICAgb2xkbGlicz0KICAgICAjIGNhbGN1bGF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMgZGlyZWN0b3J5CiAgICAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKLSAgICBvdXRwdXRuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0gICAgbGlib2Jqc19zYXZlPSIkbGlib2JqcyIKKyAgICBvdXRwdXRuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorICAgIGxpYm9ianNfc2F2ZT0kbGlib2JqcwogCiAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCiAgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCi0gICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRFQ0hPIFwiXCR7JHNobGlicGF0aF92YXJ9XCIgXHwgXCRTRUQgXCdzLzovIC9nXCdcYAorICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlwkJHNobGlicGF0aF92YXJcIiBcfCBcJFNFRCBcJ3MvOi8gL2dcJ1xgCiAgICAgZWxzZQogICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CiAgICAgZmkKQEAgLTYwMjIsNyArNzI5MCw3IEBACiAgICAgZXZhbCBzeXNfbGliX2Rsc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWNcIgogCiAgICAgZnVuY19kaXJuYW1lICIkb3V0cHV0IiAiLyIgIiIKLSAgICBvdXRwdXRfb2JqZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIiCisgICAgb3V0cHV0X29iamRpcj0kZnVuY19kaXJuYW1lX3Jlc3VsdCRvYmpkaXIKICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvIgogICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CiAgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCkBAIC02MDQ1LDcgKzczMTMsNyBAQAogICAgICMgRmluZCBhbGwgaW50ZXJkZXBlbmRlbnQgZGVwbGlicyBieSBzZWFyY2hpbmcgZm9yIGxpYnJhcmllcwogICAgICMgdGhhdCBhcmUgbGlua2VkIG1vcmUgdGhhbiBvbmNlIChlLmcuIC1sYSAtbGIgLWxhKQogICAgIGZvciBkZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0gICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorICAgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgogCWNhc2UgIiRsaWJzICIgaW4KIAkqIiAkZGVwbGliICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRkZXBsaWIiIDs7CiAJZXNhYwpAQCAtNjA1Myw3ICs3MzIxLDcgQEAKICAgICAgIGZ1bmNfYXBwZW5kIGxpYnMgIiAkZGVwbGliIgogICAgIGRvbmUKIAotICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKyAgICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCiAgICAgICBsaWJzPSIkcHJlZGVwcyAkbGlicyAkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoICRwb3N0ZGVwcyIKIAogICAgICAgIyBDb21wdXRlIGxpYnJhcmllcyB0aGF0IGFyZSBsaXN0ZWQgbW9yZSB0aGFuIG9uY2UgaW4gJHByZWRlcHMKQEAgLTYwODUsNyArNzM1Myw3IEBACiAJICBjYXNlICRmaWxlIGluCiAJICAqLmxhKSA7OwogCSAgKikKLQkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCisJICAgIGZ1bmNfZmF0YWxfaGVscCAibGlicmFyaWVzIGNhbiAnLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCiAJICAgIDs7CiAJICBlc2FjCiAJZG9uZQpAQCAtNjA5Myw3ICs3MzYxLDcgQEAKICAgICBwcm9nKQogCWNvbXBpbGVfZGVwbGlicz0KIAlmaW5hbGl6ZV9kZXBsaWJzPQotCWFsbGRlcGxpYnM9bm8KKwlhbGxkZXBsaWJzPWZhbHNlCiAJbmV3ZGxmaWxlcz0KIAluZXdkbHByZWZpbGVzPQogCXBhc3Nlcz0iY29udiBzY2FuIGRsb3BlbiBkbHByZW9wZW4gbGluayIKQEAgLTYxMDUsMjkgKzczNzMsMjkgQEAKICAgICBmb3IgcGFzcyBpbiAkcGFzc2VzOyBkbwogICAgICAgIyBUaGUgcHJlb3BlbiBwYXNzIGluIGxpYiBtb2RlIHJldmVyc2VzICRkZXBsaWJzOyBwdXQgaXQgYmFjayBoZXJlCiAgICAgICAjIHNvIHRoYXQgLUwgY29tZXMgYmVmb3JlIGxpYnMgdGhhdCBuZWVkIGl0IGZvciBpbnN0YW5jZS4uLgotICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayI7IHRoZW4KKyAgICAgIGlmIHRlc3QgbGliLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgogCSMjIEZJWE1FOiBGaW5kIHRoZSBwbGFjZSB3aGVyZSB0aGUgbGlzdCBpcyByZWJ1aWx0IGluIHRoZSB3cm9uZwogCSMjICAgICAgICBvcmRlciwgYW5kIGZpeCBpdCB0aGVyZSBwcm9wZXJseQogICAgICAgICB0bXBfZGVwbGlicz0KIAlmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbwogCSAgdG1wX2RlcGxpYnM9IiRkZXBsaWIgJHRtcF9kZXBsaWJzIgogCWRvbmUKLQlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisJZGVwbGlicz0kdG1wX2RlcGxpYnMKICAgICAgIGZpCiAKLSAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8Ci0JIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIjsgdGhlbgotCWxpYnM9IiRkZXBsaWJzIgorICAgICAgaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiIHx8CisJIHRlc3QgcHJvZyxzY2FuID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwlsaWJzPSRkZXBsaWJzCiAJZGVwbGlicz0KICAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorICAgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KIAljYXNlICRwYXNzIGluCi0JZGxvcGVuKSBsaWJzPSIkZGxmaWxlcyIgOzsKLQlkbHByZW9wZW4pIGxpYnM9IiRkbHByZWZpbGVzIiA7OworCWRsb3BlbikgbGlicz0kZGxmaWxlcyA7OworCWRscHJlb3BlbikgbGlicz0kZGxwcmVmaWxlcyA7OwogCWxpbmspIGxpYnM9IiRkZXBsaWJzICVERVBMSUJTJSAkZGVwZW5kZW5jeV9saWJzIiA7OwogCWVzYWMKICAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixkbHByZW9wZW4iOyB0aGVuCisgICAgICBpZiB0ZXN0IGxpYixkbHByZW9wZW4gPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgogCSMgQ29sbGVjdCBhbmQgZm9yd2FyZCBkZXBsaWJzIG9mIHByZW9wZW5lZCBsaWJ0b29sIGxpYnMKIAlmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbwogCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicwpAQCAtNjE0OCwyNiArNzQxNiwyNiBAQAogCSAgICBlc2FjCiAJICBkb25lCiAJZG9uZQotCWxpYnM9IiRkbHByZWZpbGVzIgorCWxpYnM9JGRscHJlZmlsZXMKICAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKyAgICAgIGlmIHRlc3QgZGxvcGVuID0gIiRwYXNzIjsgdGhlbgogCSMgQ29sbGVjdCBkbHByZW9wZW5lZCBsaWJyYXJpZXMKLQlzYXZlX2RlcGxpYnM9IiRkZXBsaWJzIgorCXNhdmVfZGVwbGlicz0kZGVwbGlicwogCWRlcGxpYnM9CiAgICAgICBmaQogCiAgICAgICBmb3IgZGVwbGliIGluICRsaWJzOyBkbwogCWxpYj0KLQlmb3VuZD1ubworCWZvdW5kPWZhbHNlCiAJY2FzZSAkZGVwbGliIGluCiAJLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSBcCiAgICAgICAgIHwtdGhyZWFkc3wtZm9wZW5tcHwtb3Blbm1wfC1tcHwteG9wZW5tcHwtb21wfC1xc21wPSopCi0JICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KIAkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCiAJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCiAJICBlbHNlCiAJICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGRlcGxpYiIKLQkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiA7IHRoZW4KKwkgICAgaWYgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgogCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgogCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKIAkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CkBAIC02MTc3LDEzICs3NDQ1LDEzIEBACiAJICBjb250aW51ZQogCSAgOzsKIAktbCopCi0JICBpZiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYiAmJiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2c7IHRoZW4KLQkgICAgZnVuY193YXJuaW5nICJcYC1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgorCSAgaWYgdGVzdCBsaWIgIT0gIiRsaW5rbW9kZSIgJiYgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiOyB0aGVuCisJICAgIGZ1bmNfd2FybmluZyAiJy1sJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgogCSAgICBjb250aW51ZQogCSAgZmkKIAkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCiAJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgIGlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgogCSAgZWxzZQogCSAgICBzZWFyY2hkaXJzPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsaWJfc2VhcmNoX3BhdGggJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgpAQCAtNjE5MSwzMSArNzQ1OSwyMiBAQAogCSAgZm9yIHNlYXJjaGRpciBpbiAkc2VhcmNoZGlyczsgZG8KIAkgICAgZm9yIHNlYXJjaF9leHQgaW4gLmxhICRzdGRfc2hyZXh0IC5zbyAuYTsgZG8KIAkgICAgICAjIFNlYXJjaCB0aGUgbGlidG9vbCBsaWJyYXJ5Ci0JICAgICAgbGliPSIkc2VhcmNoZGlyL2xpYiR7bmFtZX0ke3NlYXJjaF9leHR9IgorCSAgICAgIGxpYj0kc2VhcmNoZGlyL2xpYiRuYW1lJHNlYXJjaF9leHQKIAkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgotCQlpZiB0ZXN0ICIkc2VhcmNoX2V4dCIgPSAiLmxhIjsgdGhlbgotCQkgIGZvdW5kPXllcworCQlpZiB0ZXN0IC5sYSA9ICIkc2VhcmNoX2V4dCI7IHRoZW4KKwkJICBmb3VuZD06CiAJCWVsc2UKLQkJICBmb3VuZD1ubworCQkgIGZvdW5kPWZhbHNlCiAJCWZpCiAJCWJyZWFrIDIKIAkgICAgICBmaQogCSAgICBkb25lCiAJICBkb25lCi0JICBpZiB0ZXN0ICIkZm91bmQiICE9IHllczsgdGhlbgotCSAgICAjIGRlcGxpYiBkb2Vzbid0IHNlZW0gdG8gYmUgYSBsaWJ0b29sIGxpYnJhcnkKLQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCi0JICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCi0JICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKLQkgICAgZWxzZQotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgICAgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKLQkgICAgZmkKLQkgICAgY29udGludWUKLQkgIGVsc2UgIyBkZXBsaWIgaXMgYSBsaWJ0b29sIGxpYnJhcnkKKwkgIGlmICRmb3VuZDsgdGhlbgorCSAgICAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQogCSAgICAjIElmICRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0ZGxpYiwKIAkgICAgIyBXZSBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCB0aGluZ3MgaGVyZSwgYW5kIG5vdCBsYXRlci4KLQkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgogCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCSAgICAgICoiICRkZXBsaWIgIiopCiAJCWlmIGZ1bmNfbGFsaWJfcCAiJGxpYiI7IHRoZW4KQEAgLTYyMjMsMTkgKzc0ODIsMTkgQEAKIAkJICBvbGRfbGlicmFyeT0KIAkJICBmdW5jX3NvdXJjZSAiJGxpYiIKIAkJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCi0JCSAgICBsbD0iJGwiCisJCSAgICBsbD0kbAogCQkgIGRvbmUKLQkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IiA7IHRoZW4gIyBvbmx5IHN0YXRpYyB2ZXJzaW9uIGF2YWlsYWJsZQotCQkgICAgZm91bmQ9bm8KKwkJICBpZiB0ZXN0ICJYJGxsIiA9ICJYJG9sZF9saWJyYXJ5IjsgdGhlbiAjIG9ubHkgc3RhdGljIHZlcnNpb24gYXZhaWxhYmxlCisJCSAgICBmb3VuZD1mYWxzZQogCQkgICAgZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKLQkJICAgIGxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKwkJICAgIGxhZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQotCQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJCSAgICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCiAJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgogCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgogCQkgICAgZWxzZQogCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgogCQkgICAgZmkKIAkJICAgIGNvbnRpbnVlCiAJCSAgZmkKQEAgLTYyNDQsMTUgKzc1MDMsMjUgQEAKIAkgICAgICAqKSA7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBkZXBsaWIgZG9lc24ndCBzZWVtIHRvIGJlIGEgbGlidG9vbCBsaWJyYXJ5CisJICAgIGlmIHRlc3QgcHJvZyxsaW5rID0gIiRsaW5rbW9kZSwkcGFzcyI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQogCSAgZmkKIAkgIDs7ICMgLWwKIAkqLmx0ZnJhbWV3b3JrKQotCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICBpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCiAJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgogCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgZWxzZQogCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCSAgICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCiAJCWNhc2UgIiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCiAJCSAgICAqIiAkZGVwbGliICIqKSA7OwogCQkgICAgKiApIGZ1bmNfYXBwZW5kIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICIgJGRlcGxpYiIgOzsKQEAgLTYyNjUsMTggKzc1MzQsMTggQEAKIAkgIGNhc2UgJGxpbmttb2RlIGluCiAJICBsaWIpCiAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKwkgICAgdGVzdCBjb252ID0gIiRwYXNzIiAmJiBjb250aW51ZQogCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKIAkgICAgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKIAkgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCiAJICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICAgIDs7CiAJICBwcm9nKQotCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KIAkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgogCSAgICAgIGNvbnRpbnVlCiAJICAgIGZpCi0JICAgIGlmIHRlc3QgIiRwYXNzIiA9IHNjYW47IHRoZW4KKwkgICAgaWYgdGVzdCBzY2FuID0gIiRwYXNzIjsgdGhlbgogCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCiAJICAgIGVsc2UKIAkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKQEAgLTYyODcsMTMgKzc1NTYsMTMgQEAKIAkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgICAgOzsKIAkgICopCi0JICAgIGZ1bmNfd2FybmluZyAiXGAtTCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIKKwkgICAgZnVuY193YXJuaW5nICInLUwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCiAJICAgIDs7CiAJICBlc2FjICMgbGlua21vZGUKIAkgIGNvbnRpbnVlCiAJICA7OyAjIC1MCiAJLVIqKQotCSAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCSAgaWYgdGVzdCBsaW5rID0gIiRwYXNzIjsgdGhlbgogCSAgICBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkZGVwbGliIgogCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKIAkgICAgZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKQEAgLTYzMTEsNyArNzU4MCw3IEBACiAJICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAogCSAgOzsKIAkqLiRsaWJleHQpCi0JICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICBpZiB0ZXN0IGNvbnYgPSAiJHBhc3MiOyB0aGVuCiAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCiAJICAgIGNvbnRpbnVlCiAJICBmaQpAQCAtNjMyMiwyMSArNzU5MSwyNiBAQAogCSAgICBjYXNlICIgJGRscHJlY29udmVuaWVuY2VsaWJzICIgaW4KIAkgICAgKiIgJGRlcGxpYiAiKikgOzsKIAkgICAgKikKLQkgICAgICB2YWxpZF9hX2xpYj1ubworCSAgICAgIHZhbGlkX2FfbGliPWZhbHNlCiAJICAgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KIAkJbWF0Y2hfcGF0dGVybiopCiAJCSAgc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZDsgc2hpZnQKIAkJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCiAJCSAgaWYgZXZhbCAiXCRFQ0hPIFwiJGRlcGxpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIFwKIAkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KLQkJICAgIHZhbGlkX2FfbGliPXllcworCQkgICAgdmFsaWRfYV9saWI9OgogCQkgIGZpCiAJCTs7CiAJCXBhc3NfYWxsKQotCQkgIHZhbGlkX2FfbGliPXllcworCQkgIHZhbGlkX2FfbGliPToKIAkJOzsKIAkgICAgICBlc2FjCi0JICAgICAgaWYgdGVzdCAiJHZhbGlkX2FfbGliIiAhPSB5ZXM7IHRoZW4KKwkgICAgICBpZiAkdmFsaWRfYV9saWI7IHRoZW4KKwkJZWNobworCQkkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUiCisJCSRFQ0hPICIqKiogc3RhdGljIGxpYnJhcnkgJGRlcGxpYiBpcyBub3QgcG9ydGFibGUhIgorCQlkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICAgIGVsc2UKIAkJZWNobwogCQkkRUNITyAiKioqIFdhcm5pbmc6IFRyeWluZyB0byBsaW5rIHdpdGggc3RhdGljIGxpYiBhcmNoaXZlICRkZXBsaWIuIgogCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgpAQCAtNjM0NCwxOCArNzYxOCwxMyBAQAogCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCiAJCWVjaG8gIioqKiBiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgogCQllY2hvICIqKiogdGhhdCBpdCBpcyBqdXN0IGEgc3RhdGljIGFyY2hpdmUgdGhhdCBJIHNob3VsZCBub3QgdXNlIGhlcmUuIgotCSAgICAgIGVsc2UKLQkJZWNobwotCQkkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUiCi0JCSRFQ0hPICIqKiogc3RhdGljIGxpYnJhcnkgJGRlcGxpYiBpcyBub3QgcG9ydGFibGUhIgotCQlkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgogCSAgICAgIGZpCiAJICAgICAgOzsKIAkgICAgZXNhYwogCSAgICBjb250aW51ZQogCSAgICA7OwogCSAgcHJvZykKLQkgICAgaWYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KKwkgICAgaWYgdGVzdCBsaW5rICE9ICIkcGFzcyI7IHRoZW4KIAkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgogCSAgICBlbHNlCiAJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCkBAIC02MzY2LDEwICs3NjM1LDEwIEBACiAJICBlc2FjICMgbGlua21vZGUKIAkgIDs7ICMgKi4kbGliZXh0CiAJKi5sbyB8ICouJG9iamV4dCkKLQkgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgIGlmIHRlc3QgY29udiA9ICIkcGFzcyI7IHRoZW4KIAkgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKLQkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KLQkgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuIHx8IHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgIGVsaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgaWYgdGVzdCBkbHByZW9wZW4gPSAiJHBhc3MiIHx8IHRlc3QgeWVzICE9ICIkZGxvcGVuX3N1cHBvcnQiIHx8IHRlc3Qgbm8gPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KIAkgICAgICAjIElmIHRoZXJlIGlzIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcgc3RhdGljYWxseSwKIAkgICAgICAjIHdlIG5lZWQgdG8gcHJlbG9hZC4KIAkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGRlcGxpYiIKQEAgLTYzODIsMjIgKzc2NTEsMjAgQEAKIAkgIGNvbnRpbnVlCiAJICA7OwogCSVERVBMSUJTJSkKLQkgIGFsbGRlcGxpYnM9eWVzCisJICBhbGxkZXBsaWJzPToKIAkgIGNvbnRpbnVlCiAJICA7OwogCWVzYWMgIyBjYXNlICRkZXBsaWIKIAotCWlmIHRlc3QgIiRmb3VuZCIgPSB5ZXMgfHwgdGVzdCAtZiAiJGxpYiI7IHRoZW4gOgotCWVsc2UKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50IFxgJGRlcGxpYiciCi0JZmkKKwkkZm91bmQgfHwgdGVzdCAtZiAiJGxpYiIgXAorCSAgfHwgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgdGhlIGxpYnJhcnkgJyRsaWInIG9yIHVuaGFuZGxlZCBhcmd1bWVudCAnJGRlcGxpYiciCiAKIAkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgogCWZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRsaWIiIFwKLQkgIHx8IGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCSAgfHwgZnVuY19mYXRhbF9lcnJvciAiJyRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKIAogCWZ1bmNfZGlybmFtZSAiJGxpYiIgIiIgIi4iCi0JbGFkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCWxhZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAKIAlkbG5hbWU9CiAJZGxvcGVuPQpAQCAtNjQyNywzMCArNzY5NCwzMCBAQAogCSAgZG9uZQogCWZpCiAJZGVwZW5kZW5jeV9saWJzPWAkRUNITyAiICRkZXBlbmRlbmN5X2xpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKLQlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAotCSAgIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxzY2FuIiB8fAotCSAgIHsgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB9OyB0aGVuCisJaWYgdGVzdCBsaWIsbGluayA9ICIkbGlua21vZGUsJHBhc3MiIHx8CisJICAgdGVzdCBwcm9nLHNjYW4gPSAiJGxpbmttb2RlLCRwYXNzIiB8fAorCSAgIHsgdGVzdCBwcm9nICE9ICIkbGlua21vZGUiICYmIHRlc3QgbGliICE9ICIkbGlua21vZGUiOyB9OyB0aGVuCiAJICB0ZXN0IC1uICIkZGxvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGRsb3BlbiIKIAkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkZGxwcmVvcGVuIgogCWZpCiAKLQlpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJaWYgdGVzdCBjb252ID0gIiRwYXNzIjsgdGhlbgogCSAgIyBPbmx5IGNoZWNrIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMKIAkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCiAJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgogCSAgICBpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB0aGVuCi0JICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yICckbGliJyIKIAkgICAgZmkKIAkgICAgIyBJdCBpcyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeSwgc28gYWRkIGluIGl0cyBvYmplY3RzLgogCSAgICBmdW5jX2FwcGVuZCBjb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKIAkgICAgZnVuY19hcHBlbmQgb2xkX2NvbnZlbmllbmNlICIgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgotCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KLQkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgorCSAgZWxpZiB0ZXN0IHByb2cgIT0gIiRsaW5rbW9kZSIgJiYgdGVzdCBsaWIgIT0gIiRsaW5rbW9kZSI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiJyRsaWInIGlzIG5vdCBhIGNvbnZlbmllbmNlIGxpYnJhcnkiCiAJICBmaQogCSAgdG1wX2xpYnM9CiAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCiAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0JICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHMgOyB0aGVuCisJICAgIGlmICRvcHRfcHJlc2VydmVfZHVwX2RlcHM7IHRoZW4KIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgogCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKIAkgICAgICBlc2FjCkBAIC02NDY0LDI2ICs3NzMxLDI2IEBACiAJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgogCWxpbmtsaWI9CiAJaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJgotCSAgIHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSB5ZXMgfHwKLQkgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQsbm8iOyB9OyB0aGVuCisJICAgeyB0ZXN0IHllcyA9ICIkcHJlZmVyX3N0YXRpY19saWJzIiB8fAorCSAgICAgdGVzdCBidWlsdCxubyA9ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiOyB9OyB0aGVuCiAJICBsaW5rbGliPSRvbGRfbGlicmFyeQogCWVsc2UKIAkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KLQkgICAgbGlua2xpYj0iJGwiCisJICAgIGxpbmtsaWI9JGwKIAkgIGRvbmUKIAlmaQogCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgotCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciCisJICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgJyRsaWInIgogCWZpCiAKIAkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KLQlpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KLQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKLQkgIGZpCisJaWYgdGVzdCBkbG9wZW4gPSAiJHBhc3MiOyB0aGVuCisJICB0ZXN0IC16ICIkbGliZGlyIiBcCisJICAgICYmIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogJyRsaWInIgogCSAgaWYgdGVzdCAteiAiJGRsbmFtZSIgfHwKLQkgICAgIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgIT0geWVzIHx8Ci0JICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICB0ZXN0IHllcyAhPSAiJGRsb3Blbl9zdXBwb3J0IiB8fAorCSAgICAgdGVzdCBubyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIgorCSAgdGhlbgogCSAgICAjIElmIHRoZXJlIGlzIG5vIGRsbmFtZSwgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZwogCSAgICAjIHN0YXRpY2FsbHksIHdlIG5lZWQgdG8gcHJlbG9hZC4gIFdlIGFsc28gbmVlZCB0byBwcmVsb2FkIGFueQogCSAgICAjIGRlcGVuZGVudCBsaWJyYXJpZXMgc28gbGlibHRkbCdzIGRlcGxpYiBwcmVsb2FkZXIgZG9lc24ndApAQCAtNjQ5Nyw0MCArNzc2NCw0MCBAQAogCiAJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCiAJY2FzZSAkbGFkaXIgaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFic19sYWRpcj0iJGxhZGlyIiA7OworCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSRsYWRpciA7OwogCSopCiAJICBhYnNfbGFkaXI9YGNkICIkbGFkaXIiICYmIHB3ZGAKIAkgIGlmIHRlc3QgLXogIiRhYnNfbGFkaXIiOyB0aGVuCi0JICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRsYWRpciciCisJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiAnJGxhZGlyJyIKIAkgICAgZnVuY193YXJuaW5nICJwYXNzaW5nIGl0IGxpdGVyYWxseSB0byB0aGUgbGlua2VyLCBhbHRob3VnaCBpdCBtaWdodCBmYWlsIgotCSAgICBhYnNfbGFkaXI9IiRsYWRpciIKKwkgICAgYWJzX2xhZGlyPSRsYWRpcgogCSAgZmkKIAkgIDs7CiAJZXNhYwogCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCi0JbGFuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJbGFuYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCiAJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCi0JaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRpbnN0YWxsZWQiOyB0aGVuCiAJICBpZiB0ZXN0ICEgLWYgIiRsdF9zeXNyb290JGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KLQkgICAgZnVuY193YXJuaW5nICJsaWJyYXJ5IFxgJGxpYicgd2FzIG1vdmVkLiIKLQkgICAgZGlyPSIkbGFkaXIiCi0JICAgIGFic2Rpcj0iJGFic19sYWRpciIKLQkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgorCSAgICBmdW5jX3dhcm5pbmcgImxpYnJhcnkgJyRsaWInIHdhcyBtb3ZlZC4iCisJICAgIGRpcj0kbGFkaXIKKwkgICAgYWJzZGlyPSRhYnNfbGFkaXIKKwkgICAgbGliZGlyPSRhYnNfbGFkaXIKIAkgIGVsc2UKLQkgICAgZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCi0JICAgIGFic2Rpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgorCSAgICBkaXI9JGx0X3N5c3Jvb3QkbGliZGlyCisJICAgIGFic2Rpcj0kbHRfc3lzcm9vdCRsaWJkaXIKIAkgIGZpCi0JICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSBYeWVzICYmIGF2b2lkdGVtcHJwYXRoPXllcworCSAgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCiAJZWxzZQogCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KLQkgICAgZGlyPSIkbGFkaXIiCi0JICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgZGlyPSRsYWRpcgorCSAgICBhYnNkaXI9JGFic19sYWRpcgogCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCiAJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCiAJICBlbHNlCi0JICAgIGRpcj0iJGxhZGlyLyRvYmpkaXIiCi0JICAgIGFic2Rpcj0iJGFic19sYWRpci8kb2JqZGlyIgorCSAgICBkaXI9JGxhZGlyLyRvYmpkaXIKKwkgICAgYWJzZGlyPSRhYnNfbGFkaXIvJG9iamRpcgogCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCiAJICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfcGF0aCAiICRhYnNfbGFkaXIiCiAJICBmaQpAQCAtNjUzOSwxMSArNzgwNiwxMSBAQAogCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCiAJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCi0JaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCi0JICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgotCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciCisJaWYgdGVzdCBkbHByZW9wZW4gPSAiJHBhc3MiOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIiAmJiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGxpYnJhcmllcyBtYXkgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6ICckbGliJyIKIAkgIGZpCi0JICBjYXNlICIkaG9zdCIgaW4KKwkgIGNhc2UgJGhvc3QgaW4KIAkgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQRS1ETExzLgogCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKIAkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKQEAgLTY1ODcsOSArNzg1NCw5IEBACiAKIAlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgogCSAgIyBMaW5rIHRoZSBjb252ZW5pZW5jZSBsaWJyYXJ5Ci0JICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliOyB0aGVuCisJICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiOyB0aGVuCiAJICAgIGRlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRkZXBsaWJzIgotCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgIGVsaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgogCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCiAJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgZWxzZQpAQCAtNjU5OSwxNCArNzg2NiwxNCBAQAogCWZpCiAKIAotCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nICYmIHRlc3QgIiRwYXNzIiAhPSBsaW5rOyB0aGVuCisJaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgJiYgdGVzdCBsaW5rICE9ICIkcGFzcyI7IHRoZW4KIAkgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRsYWRpciIKIAkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCiAKLQkgIGxpbmthbGxkZXBsaWJzPW5vCi0JICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8Ci0JICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCi0JICAgIGxpbmthbGxkZXBsaWJzPXllcworCSAgbGlua2FsbGRlcGxpYnM9ZmFsc2UKKwkgIGlmIHRlc3Qgbm8gIT0gIiRsaW5rX2FsbF9kZXBsaWJzIiB8fCB0ZXN0IC16ICIkbGlicmFyeV9uYW1lcyIgfHwKKwkgICAgIHRlc3Qgbm8gPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwkgICAgbGlua2FsbGRlcGxpYnM9OgogCSAgZmkKIAogCSAgdG1wX2xpYnM9CkBAIC02NjE4LDE0ICs3ODg1LDE0IEBACiAJCSA7OwogCSAgICBlc2FjCiAJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KLQkgICAgaWYgdGVzdCAiJGxpbmthbGxkZXBsaWJzIiA9IHllczsgdGhlbgorCSAgICBpZiAkbGlua2FsbGRlcGxpYnM7IHRoZW4KIAkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgogCSAgICBlbHNlCiAJICAgICAgIyBOZWVkIHRvIGhhcmRjb2RlIHNoYXJlZCBsaWJyYXJ5IHBhdGhzCiAJICAgICAgIyBvci9hbmQgbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJyYXJpZXMKIAkgICAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKIAkgICAgZmkKLQkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgogCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCiAJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwogCSAgICAgIGVzYWMKQEAgLTY2MzUsMTUgKzc5MDIsMTUgQEAKIAkgIGNvbnRpbnVlCiAJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCiAKLQlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwlpZiB0ZXN0IHByb2csbGluayA9ICIkbGlua21vZGUsJHBhc3MiOyB0aGVuCiAJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKLQkgICAgIHsgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IG5vIHx8Ci0JICAgICAgICAgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicywkaW5zdGFsbGVkIiA9ICJidWlsdCx5ZXMiOyB9IHx8CisJICAgICB7IHsgdGVzdCBubyA9ICIkcHJlZmVyX3N0YXRpY19saWJzIiB8fAorCSAgICAgICAgIHRlc3QgYnVpbHQseWVzID0gIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCI7IH0gfHwKIAkgICAgICAgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgogCSAgICAjIFdlIG5lZWQgdG8gaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aAotCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIiA7IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCI7IHRoZW4KIAkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCi0JICAgICAgY2FzZSAiJHRlbXBfcnBhdGg6IiBpbgorCSAgICAgIGNhc2UgJHRlbXBfcnBhdGg6IGluCiAJICAgICAgKiIkYWJzZGlyOiIqKSA7OwogCSAgICAgICopIGZ1bmNfYXBwZW5kIHRlbXBfcnBhdGggIiRhYnNkaXI6IiA7OwogCSAgICAgIGVzYWMKQEAgLTY2NzIsOSArNzkzOSw5IEBACiAJICAgIGVzYWMKIAkgIGZpICMgJGxpbmttb2RlLCRwYXNzID0gcHJvZyxsaW5rLi4uCiAKLQkgIGlmIHRlc3QgIiRhbGxkZXBsaWJzIiA9IHllcyAmJgotCSAgICAgeyB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiID0gcGFzc19hbGwgfHwKLQkgICAgICAgeyB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJgorCSAgaWYgJGFsbGRlcGxpYnMgJiYKKwkgICAgIHsgdGVzdCBwYXNzX2FsbCA9ICIkZGVwbGlic19jaGVja19tZXRob2QiIHx8CisJICAgICAgIHsgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgJiYKIAkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgogCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKIAkgICAgY29udGludWUKQEAgLTY2ODMsMTEgKzc5NTAsMTEgQEAKIAogCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKIAl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicwotCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IGJ1aWx0ID0gIiR1c2Vfc3RhdGljX2xpYnMiICYmIHRlc3QgeWVzID0gIiRpbnN0YWxsZWQiOyB0aGVuCiAJICB1c2Vfc3RhdGljX2xpYnM9bm8KIAlmaQogCWlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgotCSAgIHsgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBubyB8fCB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICAgeyB0ZXN0IG5vID0gIiR1c2Vfc3RhdGljX2xpYnMiIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KIAkgIGNhc2UgJGhvc3QgaW4KIAkgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyopCiAJICAgICAgIyBObyBwb2ludCBpbiByZWxpbmtpbmcgRExMcyBiZWNhdXNlIHBhdGhzIGFyZSBub3QgZW5jb2RlZApAQCAtNjY5NSw3ICs3OTYyLDcgQEAKIAkgICAgICBuZWVkX3JlbGluaz1ubwogCSAgICA7OwogCSAgKikKLQkgICAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgorCSAgICBpZiB0ZXN0IG5vID0gIiRpbnN0YWxsZWQiOyB0aGVuCiAJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKIAkgICAgICBuZWVkX3JlbGluaz15ZXMKIAkgICAgZmkKQEAgLTY3MDUsMjQgKzc5NzIsMjQgQEAKIAogCSAgIyBXYXJuIGFib3V0IHBvcnRhYmlsaXR5LCBjYW4ndCBsaW5rIGFnYWluc3QgLW1vZHVsZSdzIG9uIHNvbWUKIAkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQotCSAgZGxvcGVubW9kdWxlPSIiCisJICBkbG9wZW5tb2R1bGU9CiAJICBmb3IgZGxwcmVtb2R1bGV0ZXN0IGluICRkbHByZWZpbGVzOyBkbwogCSAgICBpZiB0ZXN0ICJYJGRscHJlbW9kdWxldGVzdCIgPSAiWCRsaWIiOyB0aGVuCi0JICAgICAgZGxvcGVubW9kdWxlPSIkZGxwcmVtb2R1bGV0ZXN0IgorCSAgICAgIGRsb3Blbm1vZHVsZT0kZGxwcmVtb2R1bGV0ZXN0CiAJICAgICAgYnJlYWsKIAkgICAgZmkKIAkgIGRvbmUKLQkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkZGxvcGVubW9kdWxlIiAmJiB0ZXN0IHllcyA9ICIkc2hvdWxkbm90bGluayIgJiYgdGVzdCBsaW5rID0gIiRwYXNzIjsgdGhlbgogCSAgICBlY2hvCi0JICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiOyB0aGVuCiAJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBleGVjdXRhYmxlICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgogCSAgICBlbHNlCiAJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIGxvYWRhYmxlIG1vZHVsZSIKIAkgICAgZmkKIAkgICAgJEVDSE8gIioqKiAkbGlua2xpYiBpcyBub3QgcG9ydGFibGUhIgogCSAgZmkKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWIgJiYKLQkgICAgIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0IGxpYiA9ICIkbGlua21vZGUiICYmCisJICAgICB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfaW50b19saWJzIjsgdGhlbgogCSAgICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGguCiAJICAgICMgU2tpcCBkaXJlY3RvcmllcyB0aGF0IGFyZSBpbiB0aGUgc3lzdGVtIGRlZmF1bHQgcnVuLXRpbWUKIAkgICAgIyBzZWFyY2ggcGF0aC4KQEAgLTY3NTAsNDMgKzgwMTcsNDMgQEAKIAkgICAgIyBmaWd1cmUgb3V0IHRoZSBzb25hbWUKIAkgICAgc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCiAJICAgIHNoaWZ0Ci0JICAgIHJlYWxuYW1lPSIkMSIKKwkgICAgcmVhbG5hbWU9JDEKIAkgICAgc2hpZnQKIAkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCiAJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPwogCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgotCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKKwkgICAgICBzb25hbWU9JGRsbmFtZQogCSAgICBlbGlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KIAkgICAgICAjIGJsZWggd2luZG93cwogCSAgICAgIGNhc2UgJGhvc3QgaW4KIAkgICAgICAqY3lnd2luKiB8IG1pbmd3KiB8ICpjZWdjYyopCiAJICAgICAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQogCQltYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKLQkJdmVyc3VmZml4PSItJG1ham9yIgorCQl2ZXJzdWZmaXg9LSRtYWpvcgogCQk7OwogCSAgICAgIGVzYWMKIAkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCiAJICAgIGVsc2UKLQkgICAgICBzb25hbWU9IiRyZWFsbmFtZSIKKwkgICAgICBzb25hbWU9JHJlYWxuYW1lCiAJICAgIGZpCiAKIAkgICAgIyBNYWtlIGEgbmV3IG5hbWUgZm9yIHRoZSBleHRyYWN0X2V4cHN5bXNfY21kcyB0byB1c2UKLQkgICAgc29yb290PSIkc29uYW1lIgorCSAgICBzb3Jvb3Q9JHNvbmFtZQogCSAgICBmdW5jX2Jhc2VuYW1lICIkc29yb290IgotCSAgICBzb25hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgICAgc29uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCSAgICBmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmRsbCcgIiRzb25hbWUiCiAJICAgIG5ld2xpYj1saWJpbXAtJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5hCiAKIAkgICAgIyBJZiB0aGUgbGlicmFyeSBoYXMgbm8gZXhwb3J0IGxpc3QsIHRoZW4gY3JlYXRlIG9uZSBub3cKIAkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS1kZWYiOyB0aGVuIDoKIAkgICAgZWxzZQotCSAgICAgIGZ1bmNfdmVyYm9zZSAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisJICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gJyRzb25hbWUnIgogCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiICdleGl0ICQ/JwogCSAgICBmaQogCiAJICAgICMgQ3JlYXRlICRuZXdsaWIKIAkgICAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG5ld2xpYiI7IHRoZW4gOjsgZWxzZQotCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX3ZlcmJvc2UgImdlbmVyYXRpbmcgaW1wb3J0IGxpYnJhcnkgZm9yICckc29uYW1lJyIKIAkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKIAkgICAgZmkKIAkgICAgIyBtYWtlIHN1cmUgdGhlIGxpYnJhcnkgdmFyaWFibGVzIGFyZSBwb2ludGluZyB0byB0aGUgbmV3IGxpYnJhcnkKQEAgLTY3OTQsNTggKzgwNjEsNTggQEAKIAkgICAgbGlua2xpYj0kbmV3bGliCiAJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKIAotCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbms7IHRoZW4KKwkgIGlmIHRlc3QgcHJvZyA9ICIkbGlua21vZGUiIHx8IHRlc3QgcmVsaW5rICE9ICIkb3B0X21vZGUiOyB0aGVuCiAJICAgIGFkZF9zaGxpYnBhdGg9CiAJICAgIGFkZF9kaXI9CiAJICAgIGFkZD0KIAkgICAgbGliX2xpbmtlZD15ZXMKIAkgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uIGluCiAJICAgIGltbWVkaWF0ZSB8IHVuc3VwcG9ydGVkKQotCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0gbm87IHRoZW4KLQkJYWRkPSIkZGlyLyRsaW5rbGliIgorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2RpcmVjdCI7IHRoZW4KKwkJYWRkPSRkaXIvJGxpbmtsaWIKIAkJY2FzZSAkaG9zdCBpbgotCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0iLUwkZGlyIiA7OwotCQkgICotKi1zeXN2NCp1dzIqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXNjbzMuMnY1LjAuWzAyNF0qKSBhZGRfZGlyPS1MJGRpciA7OworCQkgICotKi1zeXN2NCp1dzIqKSBhZGRfZGlyPS1MJGRpciA7OwogCQkgICotKi1zeXN2NU9wZW5VTklYKiB8ICotKi1zeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgXAotCQkgICAgKi0qLXVuaXh3YXJlNyopIGFkZF9kaXI9Ii1MJGRpciIgOzsKKwkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPS1MJGRpciA7OwogCQkgICotKi1kYXJ3aW4qICkKLQkJICAgICMgaWYgdGhlIGxpYiBpcyBhIChub24tZGxvcGVuZWQpIG1vZHVsZSB0aGVuIHdlIGNhbiBub3QKKwkJICAgICMgaWYgdGhlIGxpYiBpcyBhIChub24tZGxvcGVuZWQpIG1vZHVsZSB0aGVuIHdlIGNhbm5vdAogCQkgICAgIyBsaW5rIGFnYWluc3QgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIGVhcmxpZXIgd2FybmluZ3MKIAkJICAgIGlmIC91c3IvYmluL2ZpbGUgLUwgJGFkZCAyPiAvZGV2L251bGwgfAotCQkJICRHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJCSAkR1JFUCAiOiBbXjpdKiBidW5kbGUiID4vZGV2L251bGw7IHRoZW4KIAkJICAgICAgaWYgdGVzdCAiWCRkbG9wZW5tb2R1bGUiICE9ICJYJGxpYiI7IHRoZW4KIAkJCSRFQ0hPICIqKiogV2FybmluZzogbGliICRsaW5rbGliIGlzIGEgbW9kdWxlLCBub3QgYSBzaGFyZWQgbGlicmFyeSIKLQkJCWlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCQlpZiB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB0aGVuCiAJCQkgIGVjaG8KIAkJCSAgZWNobyAiKioqIEFuZCB0aGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBzdGF0aWMgYXJjaGl2ZSBhdmFpbGFibGUiCiAJCQkgIGVjaG8gIioqKiBUaGUgbGluayB3aWxsIHByb2JhYmx5IGZhaWwsIHNvcnJ5IgogCQkJZWxzZQotCQkJICBhZGQ9IiRkaXIvJG9sZF9saWJyYXJ5IgorCQkJICBhZGQ9JGRpci8kb2xkX2xpYnJhcnkKIAkJCWZpCiAJCSAgICAgIGVsaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCQkJYWRkPSIkZGlyLyRvbGRfbGlicmFyeSIKKwkJCWFkZD0kZGlyLyRvbGRfbGlicmFyeQogCQkgICAgICBmaQogCQkgICAgZmkKIAkJZXNhYwotCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0gbm87IHRoZW4KKwkgICAgICBlbGlmIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCiAJCWNhc2UgJGhvc3QgaW4KLQkJKi0qLXN1bm9zKikgYWRkX3NobGlicGF0aD0iJGRpciIgOzsKKwkJKi0qLXN1bm9zKikgYWRkX3NobGlicGF0aD0kZGlyIDs7CiAJCWVzYWMKLQkJYWRkX2Rpcj0iLUwkZGlyIgotCQlhZGQ9Ii1sJG5hbWUiCi0JICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSBubzsgdGhlbgotCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgotCQlhZGQ9Ii1sJG5hbWUiCisJCWFkZF9kaXI9LUwkZGlyCisJCWFkZD0tbCRuYW1lCisJICAgICAgZWxpZiB0ZXN0IG5vID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSRkaXIKKwkJYWRkPS1sJG5hbWUKIAkgICAgICBlbHNlCiAJCWxpYl9saW5rZWQ9bm8KIAkgICAgICBmaQogCSAgICAgIDs7CiAJICAgIHJlbGluaykKLQkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IHllcyAmJgotCSAgICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KLQkJYWRkPSIkZGlyLyRsaW5rbGliIgotCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCi0JCWFkZF9kaXI9Ii1MJGFic2RpciIKKwkgICAgICBpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfZGlyZWN0IiAmJgorCSAgICAgICAgIHRlc3Qgbm8gPSAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSI7IHRoZW4KKwkJYWRkPSRkaXIvJGxpbmtsaWIKKwkgICAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9taW51c19MIjsgdGhlbgorCQlhZGRfZGlyPS1MJGFic2RpcgogCQkjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCiAJCWlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCiAJCSAgY2FzZSAkbGliZGlyIGluCkBAIC02ODU0LDEwICs4MTIxLDEwIEBACiAJCSAgICAgIDs7CiAJCSAgZXNhYwogCQlmaQotCQlhZGQ9Ii1sJG5hbWUiCi0JICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KLQkJYWRkX3NobGlicGF0aD0iJGRpciIKLQkJYWRkPSItbCRuYW1lIgorCQlhZGQ9LWwkbmFtZQorCSAgICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9JGRpcgorCQlhZGQ9LWwkbmFtZQogCSAgICAgIGVsc2UKIAkJbGliX2xpbmtlZD1ubwogCSAgICAgIGZpCkBAIC02ODY1LDcgKzgxMzIsNyBAQAogCSAgICAqKSBsaWJfbGlua2VkPW5vIDs7CiAJICAgIGVzYWMKIAotCSAgICBpZiB0ZXN0ICIkbGliX2xpbmtlZCIgIT0geWVzOyB0aGVuCisJICAgIGlmIHRlc3QgeWVzICE9ICIkbGliX2xpbmtlZCI7IHRoZW4KIAkgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCiAJICAgIGZpCiAKQEAgLTY4NzUsMTUgKzgxNDIsMTUgQEAKIAkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3NobGlicGF0aCAiJGFkZF9zaGxpYnBhdGg6IiA7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKLQkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkX2RpciAkY29tcGlsZV9kZXBsaWJzIgogCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZCAkY29tcGlsZV9kZXBsaWJzIgogCSAgICBlbHNlCiAJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgogCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCi0JICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0geWVzICYmCi0JCSB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0geWVzICYmCi0JCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0IHllcyAhPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKwkJIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfbWludXNfTCIgJiYKKwkJIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgogCQljYXNlIDokZmluYWxpemVfc2hsaWJwYXRoOiBpbgogCQkqIjokbGliZGlyOiIqKSA7OwogCQkqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OwpAQCAtNjg5MiwzMyArODE1OSwzMyBAQAogCSAgICBmaQogCSAgZmkKIAotCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgfHwgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgogCSAgICBhZGRfc2hsaWJwYXRoPQogCSAgICBhZGRfZGlyPQogCSAgICBhZGQ9CiAJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCi0JICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzICYmCi0JICAgICAgIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUiID0gbm87IHRoZW4KLQkgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCi0JICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCi0JICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgotCSAgICAgIGFkZD0iLWwkbmFtZSIKLQkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2RpcmVjdCIgJiYKKwkgICAgICAgdGVzdCBubyA9ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIjsgdGhlbgorCSAgICAgIGFkZD0kbGliZGlyLyRsaW5rbGliCisJICAgIGVsaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX21pbnVzX0wiOyB0aGVuCisJICAgICAgYWRkX2Rpcj0tTCRsaWJkaXIKKwkgICAgICBhZGQ9LWwkbmFtZQorCSAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9zaGxpYnBhdGhfdmFyIjsgdGhlbgogCSAgICAgIGNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCiAJICAgICAgKiI6JGxpYmRpcjoiKikgOzsKIAkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9zaGxpYnBhdGggIiRsaWJkaXI6IiA7OwogCSAgICAgIGVzYWMKLQkgICAgICBhZGQ9Ii1sJG5hbWUiCi0JICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KKwkgICAgICBhZGQ9LWwkbmFtZQorCSAgICBlbGlmIHRlc3QgeWVzID0gIiRoYXJkY29kZV9hdXRvbWF0aWMiOyB0aGVuCiAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciIgJiYKLQkJIHRlc3QgLWYgIiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIiA7IHRoZW4KLQkJYWRkPSIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIKKwkJIHRlc3QgLWYgIiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIjsgdGhlbgorCQlhZGQ9JGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIKIAkgICAgICBlbHNlCi0JCWFkZD0iJGxpYmRpci8kbGlua2xpYiIKKwkJYWRkPSRsaWJkaXIvJGxpbmtsaWIKIAkgICAgICBmaQogCSAgICBlbHNlCiAJICAgICAgIyBXZSBjYW5ub3Qgc2VlbSB0byBoYXJkY29kZSBpdCwgZ3Vlc3Mgd2UnbGwgZmFrZSBpdC4KLQkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCisJICAgICAgYWRkX2Rpcj0tTCRsaWJkaXIKIAkgICAgICAjIFRyeSBsb29raW5nIGZpcnN0IGluIHRoZSBsb2NhdGlvbiB3ZSdyZSBiZWluZyBpbnN0YWxsZWQgdG8uCiAJICAgICAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KIAkJY2FzZSAkbGliZGlyIGluCkBAIC02OTI3LDEwICs4MTk0LDEwIEBACiAJCSAgICA7OwogCQllc2FjCiAJICAgICAgZmkKLQkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgICAgYWRkPS1sJG5hbWUKIAkgICAgZmkKIAotCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgogCSAgICAgIHRlc3QgLW4gIiRhZGRfZGlyIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkX2RpciAkZmluYWxpemVfZGVwbGlicyIKIAkgICAgICB0ZXN0IC1uICIkYWRkIiAmJiBmaW5hbGl6ZV9kZXBsaWJzPSIkYWRkICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgICBlbHNlCkBAIC02OTM4LDQzICs4MjA1LDQzIEBACiAJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKIAkgICAgZmkKIAkgIGZpCi0JZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCWVsaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkgICMgSGVyZSB3ZSBhc3N1bWUgdGhhdCBvbmUgb2YgaGFyZGNvZGVfZGlyZWN0IG9yIGhhcmRjb2RlX21pbnVzX0wKIAkgICMgaXMgbm90IHVuc3VwcG9ydGVkLiAgVGhpcyBpcyB2YWxpZCBvbiBhbGwga25vd24gc3RhdGljIGFuZAogCSAgIyBzaGFyZWQgcGxhdGZvcm1zLgotCSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gdW5zdXBwb3J0ZWQ7IHRoZW4KLQkgICAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBsaW5rbGliPSIkb2xkX2xpYnJhcnkiCisJICBpZiB0ZXN0IHVuc3VwcG9ydGVkICE9ICIkaGFyZGNvZGVfZGlyZWN0IjsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9JG9sZF9saWJyYXJ5CiAJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRpci8kbGlua2xpYiAkY29tcGlsZV9kZXBsaWJzIgogCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgZWxzZQogCSAgICBjb21waWxlX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRjb21waWxlX2RlcGxpYnMiCiAJICAgIGZpbmFsaXplX2RlcGxpYnM9Ii1sJG5hbWUgLUwkZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgZmkKLQllbGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJZWxpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgogCSAgIyBOb3QgYSBzaGFyZWQgbGlicmFyeQotCSAgaWYgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAhPSBwYXNzX2FsbDsgdGhlbgorCSAgaWYgdGVzdCBwYXNzX2FsbCAhPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIjsgdGhlbgogCSAgICAjIFdlJ3JlIHRyeWluZyBsaW5rIGEgc2hhcmVkIGxpYnJhcnkgYWdhaW5zdCBhIHN0YXRpYyBvbmUKIAkgICAgIyBidXQgdGhlIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgaXQuCiAKIAkgICAgIyBKdXN0IHByaW50IGEgd2FybmluZyBhbmQgYWRkIHRoZSBsaWJyYXJ5IHRvIGRlcGVuZGVuY3lfbGlicyBzbwogCSAgICAjIHRoYXQgdGhlIHByb2dyYW0gY2FuIGJlIGxpbmtlZCBhZ2FpbnN0IHRoZSBzdGF0aWMgbGlicmFyeS4KIAkgICAgZWNobwotCSAgICAkRUNITyAiKioqIFdhcm5pbmc6IFRoaXMgc3lzdGVtIGNhbiBub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCisJICAgICRFQ0hPICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2Fubm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgogCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgogCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgogCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgotCSAgICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIjsgdGhlbgogCSAgICAgIGVjaG8gIioqKiBCdXQgYXMgeW91IHRyeSB0byBidWlsZCBhIG1vZHVsZSBsaWJyYXJ5LCBsaWJ0b29sIHdpbGwgc3RpbGwgY3JlYXRlICIKIAkgICAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKIAkgICAgICBlY2hvICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCiAJICAgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KIAkJZWNobwogCQllY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKLQkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkJZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyAnbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgogCQllY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCi0JCWVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCQllY2hvICIqKiogJ25tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgogCSAgICAgIGZpCi0JICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgaWYgdGVzdCBubyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCiAJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKIAkJYnVpbGRfb2xkX2xpYnM9eWVzCiAJICAgICAgZWxzZQpAQCAtNjk4NywxMSArODI1NCwxMSBAQAogCSAgZmkKIAlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PwogCi0JaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCWlmIHRlc3QgbGliID0gIiRsaW5rbW9kZSI7IHRoZW4KIAkgIGlmIHRlc3QgLW4gIiRkZXBlbmRlbmN5X2xpYnMiICYmCi0JICAgICB7IHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiICE9IHllcyB8fAotCSAgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzIHx8Ci0JICAgICAgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSB5ZXM7IH07IHRoZW4KKwkgICAgIHsgdGVzdCB5ZXMgIT0gIiRoYXJkY29kZV9pbnRvX2xpYnMiIHx8CisJICAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyIgfHwKKwkgICAgICAgdGVzdCB5ZXMgPSAiJGxpbmtfc3RhdGljIjsgfTsgdGhlbgogCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKIAkgICAgdGVtcF9kZXBsaWJzPQogCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCkBAIC03MDA1LDEyICs4MjcyLDEyIEBACiAJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9kZXBsaWJzICIgJGxpYmRpciI7OwogCSAgICAgIGVzYWMKIAkgICAgZG9uZQotCSAgICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX2RlcGxpYnMiCisJICAgIGRlcGVuZGVuY3lfbGlicz0kdGVtcF9kZXBsaWJzCiAJICBmaQogCiAJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkYWJzZGlyIgogCSAgIyBMaW5rIGFnYWluc3QgdGhpcyBsaWJyYXJ5Ci0JICB0ZXN0ICIkbGlua19zdGF0aWMiID0gbm8gJiYgbmV3ZGVwZW5kZW5jeV9saWJzPSIkYWJzX2xhZGlyLyRsYW5hbWUgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgIHRlc3Qgbm8gPSAiJGxpbmtfc3RhdGljIiAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgogCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKIAkgIHRtcF9saWJzPQogCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwpAQCAtNzAyMCw3ICs4Mjg3LDcgQEAKICAgICAgICAgICAgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7OwogICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKICAgICAgICAgICAgIGVzYWMKLQkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwczsgdGhlbgogCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCiAJICAgICAgKiIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCAiKikKICAgICAgICAgICAgICAgICBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiIDs7CkBAIC03MDI5LDEyICs4Mjk2LDEyIEBACiAJICAgIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgIGRvbmUKIAotCSAgaWYgdGVzdCAiJGxpbmtfYWxsX2RlcGxpYnMiICE9IG5vOyB0aGVuCisJICBpZiB0ZXN0IG5vICE9ICIkbGlua19hbGxfZGVwbGlicyI7IHRoZW4KIAkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKIAkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwogCSAgICAgIHBhdGg9CiAJICAgICAgY2FzZSAkZGVwbGliIGluCi0JICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OworCSAgICAgIC1MKikgcGF0aD0kZGVwbGliIDs7CiAJICAgICAgKi5sYSkKIAkgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZGVwbGliIgogCSAgICAgICAgZGVwbGliPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKQEAgLTcwNDIsMTIgKzgzMDksMTIgQEAKIAkJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgogCQljYXNlICRkaXIgaW4KLQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9IiRkaXIiIDs7CisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSRkaXIgOzsKIAkJKikKIAkJICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCiAJCSAgaWYgdGVzdCAteiAiJGFic2RpciI7IHRoZW4KLQkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgotCQkgICAgYWJzZGlyPSIkZGlyIgorCQkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mICckZGlyJyIKKwkJICAgIGFic2Rpcj0kZGlyCiAJCSAgZmkKIAkJICA7OwogCQllc2FjCkBAIC03MDU1LDM1ICs4MzIyLDM1IEBACiAJCWNhc2UgJGhvc3QgaW4KIAkJKi0qLWRhcndpbiopCiAJCSAgZGVwZGVwbD0KLQkJICBldmFsIGRlcGxpYnJhcnlfbmFtZXM9YCR7U0VEfSAtbiAtZSAncy9ebGlicmFyeV9uYW1lcz1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCi0JCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiIDsgdGhlbgotCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lcyA7IGRvCisJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAkU0VEIC1uIC1lICdzL15saWJyYXJ5X25hbWVzPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKKwkJICBpZiB0ZXN0IC1uICIkZGVwbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXM7IGRvCiAJCSAgICAgIGRlcGRlcGw9JHRtcAogCQkgICAgZG9uZQotCQkgICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIiA7IHRoZW4KLQkJICAgICAgZGVwZGVwbD0iJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIgotCQkgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MfSAtTCAkZGVwZGVwbCB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKwkJICAgIGlmIHRlc3QgLWYgIiRhYnNkaXIvJG9iamRpci8kZGVwZGVwbCI7IHRoZW4KKwkJICAgICAgZGVwZGVwbD0kYWJzZGlyLyRvYmpkaXIvJGRlcGRlcGwKKwkJICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJE9UT09MIC1MICRkZXBkZXBsIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAogICAgICAgICAgICAgICAgICAgICAgIGlmIHRlc3QgLXogIiRkYXJ3aW5faW5zdGFsbF9uYW1lIjsgdGhlbgotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MNjR9IC1MICRkZXBkZXBsICB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJE9UT09MNjQgLUwgJGRlcGRlcGwgIHwgYXdrICd7aWYgKE5SID09IDIpIHtwcmludCAkMTtleGl0fX0nYAogICAgICAgICAgICAgICAgICAgICAgIGZpCi0JCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHt3bH0tZHlsaWJfZmlsZSAke3dsfSR7ZGFyd2luX2luc3RhbGxfbmFtZX06JHtkZXBkZXBsfSIKLQkJICAgICAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgLWR5bGliX2ZpbGUgJHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorCQkgICAgICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICR3bC1keWxpYl9maWxlICR3bCRkYXJ3aW5faW5zdGFsbF9uYW1lOiRkZXBkZXBsIgorCQkgICAgICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAtZHlsaWJfZmlsZSAkZGFyd2luX2luc3RhbGxfbmFtZTokZGVwZGVwbCIKIAkJICAgICAgcGF0aD0KIAkJICAgIGZpCiAJCSAgZmkKIAkJICA7OwogCQkqKQotCQkgIHBhdGg9Ii1MJGFic2Rpci8kb2JqZGlyIgorCQkgIHBhdGg9LUwkYWJzZGlyLyRvYmpkaXIKIAkJICA7OwogCQllc2FjCiAJCWVsc2UKLQkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAogCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgICAgZnVuY19mYXRhbF9lcnJvciAiJyRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKIAkJICB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciIgJiYgXAotCQkgICAgZnVuY193YXJuaW5nICJcYCRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIgorCQkgICAgZnVuY193YXJuaW5nICInJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCiAKLQkJICBwYXRoPSItTCRhYnNkaXIiCisJCSAgcGF0aD0tTCRhYnNkaXIKIAkJZmkKIAkJOzsKIAkgICAgICBlc2FjCkBAIC03MDk1LDIzICs4MzYyLDIzIEBACiAJICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KIAlmaSAjIGxpbmttb2RlID0gbGliCiAgICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicwotICAgICAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgotCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSAicHJvZyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgbGluayA9ICIkcGFzcyI7IHRoZW4KKwlpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgogCSAgY29tcGlsZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGNvbXBpbGVfZGVwbGlicyIKIAkgIGZpbmFsaXplX2RlcGxpYnM9IiRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAkZmluYWxpemVfZGVwbGlicyIKIAllbHNlCiAJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICJgJEVDSE8gIiAkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKIAlmaQogICAgICAgZmkKLSAgICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKLSAgICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbjsgdGhlbgorICAgICAgZGVwZW5kZW5jeV9saWJzPSRuZXdkZXBlbmRlbmN5X2xpYnMKKyAgICAgIGlmIHRlc3QgZGxwcmVvcGVuID0gIiRwYXNzIjsgdGhlbgogCSMgTGluayB0aGUgZGxwcmVvcGVuZWQgbGlicmFyaWVzIGJlZm9yZSBvdGhlciBsaWJyYXJpZXMKIAlmb3IgZGVwbGliIGluICRzYXZlX2RlcGxpYnM7IGRvCiAJICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgogCWRvbmUKICAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gZGxvcGVuOyB0aGVuCi0JaWYgdGVzdCAiJHBhc3MiICE9IGNvbnY7IHRoZW4KKyAgICAgIGlmIHRlc3QgZGxvcGVuICE9ICIkcGFzcyI7IHRoZW4KKwl0ZXN0IGNvbnYgPSAiJHBhc3MiIHx8IHsKIAkgICMgTWFrZSBzdXJlIGxpYl9zZWFyY2hfcGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KIAkgIGxpYl9zZWFyY2hfcGF0aD0KIAkgIGZvciBkaXIgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aDsgZG8KQEAgLTcxMjEsMTIgKzgzODgsMTIgQEAKIAkgICAgZXNhYwogCSAgZG9uZQogCSAgbmV3bGliX3NlYXJjaF9wYXRoPQotCWZpCisJfQogCi0JaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgotCSAgdmFycz0iZGVwbGlicyIKLQllbHNlCisJaWYgdGVzdCBwcm9nLGxpbmsgPSAiJGxpbmttb2RlLCRwYXNzIjsgdGhlbgogCSAgdmFycz0iY29tcGlsZV9kZXBsaWJzIGZpbmFsaXplX2RlcGxpYnMiCisJZWxzZQorCSAgdmFycz1kZXBsaWJzCiAJZmkKIAlmb3IgdmFyIGluICR2YXJzIGRlcGVuZGVuY3lfbGliczsgZG8KIAkgICMgQWRkIGxpYnJhcmllcyB0byAkdmFyIGluIHJldmVyc2Ugb3JkZXIKQEAgLTcxODcsNTkgKzg0NTQsNTkgQEAKICAgICAgICMgTGFzdCBzdGVwOiByZW1vdmUgcnVudGltZSBsaWJzIGZyb20gZGVwZW5kZW5jeV9saWJzCiAgICAgICAjICh0aGV5IHN0YXkgaW4gZGVwbGlicykKICAgICAgIHRtcF9saWJzPQotICAgICAgZm9yIGkgaW4gJGRlcGVuZGVuY3lfbGlicyA7IGRvCisgICAgICBmb3IgaSBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwogCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCiAJKiIgJGkgIiopCi0JICBpPSIiCisJICBpPQogCSAgOzsKIAllc2FjCi0JaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCWlmIHRlc3QgLW4gIiRpIjsgdGhlbgogCSAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkaSIKIAlmaQogICAgICAgZG9uZQogICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicwogICAgIGRvbmUgIyBmb3IgcGFzcwotICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCi0gICAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKyAgICBpZiB0ZXN0IHByb2cgPSAiJGxpbmttb2RlIjsgdGhlbgorICAgICAgZGxmaWxlcz0kbmV3ZGxmaWxlcwogICAgIGZpCi0gICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgotICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgaWYgdGVzdCBwcm9nID0gIiRsaW5rbW9kZSIgfHwgdGVzdCBsaWIgPSAiJGxpbmttb2RlIjsgdGhlbgorICAgICAgZGxwcmVmaWxlcz0kbmV3ZGxwcmVmaWxlcwogICAgIGZpCiAKICAgICBjYXNlICRsaW5rbW9kZSBpbgogICAgIG9sZGxpYikKLSAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCi0JZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRsc2VsZiI7IHRoZW4KKwlmdW5jX3dhcm5pbmcgIictZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKICAgICAgIGZpCiAKICAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KICAgICAgICpcIC1sKiB8ICpcIC1MKikKLQlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDs7CisJZnVuY193YXJuaW5nICInLWwnIGFuZCAnLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgOzsKICAgICAgIGVzYWMKIAogICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisJZnVuY193YXJuaW5nICInLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAogICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisJZnVuY193YXJuaW5nICInLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCiAgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAogICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorCWZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAogICAgICAgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCisJZnVuY193YXJuaW5nICInLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAogICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCiAgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLSAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCisgICAgICBvbGRsaWJzPSRvdXRwdXQKICAgICAgIGZ1bmNfYXBwZW5kIG9ianMgIiRvbGRfZGVwbGlicyIKICAgICAgIDs7CiAKICAgICBsaWIpCi0gICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSBgbGliTkFNRS5sYScuCisgICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSAnbGliTkFNRS5sYScuCiAgICAgICBjYXNlICRvdXRwdXRuYW1lIGluCiAgICAgICBsaWIqKQogCWZ1bmNfc3RyaXBuYW1lICdsaWInICcubGEnICIkb3V0cHV0bmFtZSIKQEAgLTcyNDgsMTAgKzg1MTUsMTAgQEAKIAlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKIAk7OwogICAgICAgKikKLQl0ZXN0ICIkbW9kdWxlIiA9IG5vICYmIFwKLQkgIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5IFxgJG91dHB1dCcgbXVzdCBiZWdpbiB3aXRoIFxgbGliJyIKKwl0ZXN0IG5vID0gIiRtb2R1bGUiIFwKKwkgICYmIGZ1bmNfZmF0YWxfaGVscCAibGlidG9vbCBsaWJyYXJ5ICckb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggJ2xpYiciCiAKLQlpZiB0ZXN0ICIkbmVlZF9saWJfcHJlZml4IiAhPSBubzsgdGhlbgorCWlmIHRlc3Qgbm8gIT0gIiRuZWVkX2xpYl9wcmVmaXgiOyB0aGVuCiAJICAjIEFkZCB0aGUgImxpYiIgcHJlZml4IGZvciBtb2R1bGVzIGlmIHJlcXVpcmVkCiAJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCiAJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKQEAgLTcyNjUsOCArODUzMiw4IEBACiAgICAgICBlc2FjCiAKICAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgotCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KLQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgorCWlmIHRlc3QgcGFzc19hbGwgIT0gIiRkZXBsaWJzX2NoZWNrX21ldGhvZCI7IHRoZW4KKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgJyRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyBvbiB0aGlzIGhvc3Q6JG9ianMiCiAJZWxzZQogCSAgZWNobwogCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgpAQCAtNzI3NSwyMSArODU0MiwyMSBAQAogCWZpCiAgICAgICBmaQogCi0gICAgICB0ZXN0ICIkZGxzZWxmIiAhPSBubyAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiCisgICAgICB0ZXN0IG5vID0gIiRkbHNlbGYiIFwKKwl8fCBmdW5jX3dhcm5pbmcgIictZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIgogCiAgICAgICBzZXQgZHVtbXkgJHJwYXRoCiAgICAgICBzaGlmdAotICAgICAgdGVzdCAiJCMiIC1ndCAxICYmIFwKLQlmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IgorICAgICAgdGVzdCAxIC1sdCAiJCMiIFwKKwkmJiBmdW5jX3dhcm5pbmcgImlnbm9yaW5nIG11bHRpcGxlICctcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCiAKLSAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKKyAgICAgIGluc3RhbGxfbGliZGlyPSQxCiAKICAgICAgIG9sZGxpYnM9CiAgICAgICBpZiB0ZXN0IC16ICIkcnBhdGgiOyB0aGVuCi0JaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgogCSAgIyBCdWlsZGluZyBhIGxpYnRvb2wgY29udmVuaWVuY2UgbGlicmFyeS4KLQkgICMgU29tZSBjb21waWxlcnMgaGF2ZSBwcm9ibGVtcyB3aXRoIGEgYC5hbCcgZXh0ZW5zaW9uIHNvCisJICAjIFNvbWUgY29tcGlsZXJzIGhhdmUgcHJvYmxlbXMgd2l0aCBhICcuYWwnIGV4dGVuc2lvbiBzbwogCSAgIyBjb252ZW5pZW5jZSBsaWJyYXJpZXMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgZXh0ZW5zaW9uIGFuCiAJICAjIGFyY2hpdmUgbm9ybWFsbHkgd291bGQuCiAJICBvbGRsaWJzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0ICRvbGRsaWJzIgpAQCAtNzI5OCwyMCArODU2NSwyMCBAQAogCWZpCiAKIAl0ZXN0IC1uICIkdmluZm8iICYmIFwKLQkgIGZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgorCSAgZnVuY193YXJuaW5nICInLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKIAogCXRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCi0JICBmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIKKwkgIGZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCiAgICAgICBlbHNlCiAKIAkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgotCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JworCXNhdmVfaWZzPSRJRlM7IElGUz06CiAJc2V0IGR1bW15ICR2aW5mbyAwIDAgMAogCXNoaWZ0Ci0JSUZTPSIkc2F2ZV9pZnMiCisJSUZTPSRzYXZlX2lmcwogCiAJdGVzdCAtbiAiJDciICYmIFwKLQkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIgorCSAgZnVuY19mYXRhbF9oZWxwICJ0b28gbWFueSBwYXJhbWV0ZXJzIHRvICctdmVyc2lvbi1pbmZvJyIKIAogCSMgY29udmVydCBhYnNvbHV0ZSB2ZXJzaW9uIG51bWJlcnMgdG8gbGlidG9vbCBhZ2VzCiAJIyB0aGlzIHJldGFpbnMgY29tcGF0aWJpbGl0eSB3aXRoIC5sYSBmaWxlcyBhbmQgYXR0ZW1wdHMKQEAgLTczMTksNDIgKzg1ODYsNDIgQEAKIAogCWNhc2UgJHZpbmZvX251bWJlciBpbgogCXllcykKLQkgIG51bWJlcl9tYWpvcj0iJDEiCi0JICBudW1iZXJfbWlub3I9IiQyIgotCSAgbnVtYmVyX3JldmlzaW9uPSIkMyIKKwkgIG51bWJlcl9tYWpvcj0kMQorCSAgbnVtYmVyX21pbm9yPSQyCisJICBudW1iZXJfcmV2aXNpb249JDMKIAkgICMKIAkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CiAJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgogCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKIAkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKLQkgICMgd2hpY2ggaGFzIGFuIGV4dHJhIDEgYWRkZWQganVzdCBmb3IgZnVuCisJICAjIHRoYXQgaGFzIGFuIGV4dHJhIDEgYWRkZWQganVzdCBmb3IgZnVuCiAJICAjCiAJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KIAkgICMgY29ycmVjdCBsaW51eCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogCSAgZGFyd2lufGxpbnV4fG9zZnx3aW5kb3dzfG5vbmUpCiAJICAgIGZ1bmNfYXJpdGggJG51bWJlcl9tYWpvciArICRudW1iZXJfbWlub3IKIAkgICAgY3VycmVudD0kZnVuY19hcml0aF9yZXN1bHQKLQkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgotCSAgICByZXZpc2lvbj0iJG51bWJlcl9yZXZpc2lvbiIKKwkgICAgYWdlPSRudW1iZXJfbWlub3IKKwkgICAgcmV2aXNpb249JG51bWJlcl9yZXZpc2lvbgogCSAgICA7OwogCSAgZnJlZWJzZC1hb3V0fGZyZWVic2QtZWxmfHFueHxzdW5vcykKLQkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKLQkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCi0JICAgIGFnZT0iMCIKKwkgICAgY3VycmVudD0kbnVtYmVyX21ham9yCisJICAgIHJldmlzaW9uPSRudW1iZXJfbWlub3IKKwkgICAgYWdlPTAKIAkgICAgOzsKIAkgIGlyaXh8bm9uc3RvcHV4KQogCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCiAJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIGFnZT0iJG51bWJlcl9taW5vciIKLQkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGFnZT0kbnVtYmVyX21pbm9yCisJICAgIHJldmlzaW9uPSRudW1iZXJfbWlub3IKIAkgICAgbHRfaXJpeF9pbmNyZW1lbnQ9bm8KIAkgICAgOzsKIAkgIGVzYWMKIAkgIDs7CiAJbm8pCi0JICBjdXJyZW50PSIkMSIKLQkgIHJldmlzaW9uPSIkMiIKLQkgIGFnZT0iJDMiCisJICBjdXJyZW50PSQxCisJICByZXZpc2lvbj0kMgorCSAgYWdlPSQzCiAJICA7OwogCWVzYWMKIApAQCAtNzM2MiwzMCArODYyOSwzMCBAQAogCWNhc2UgJGN1cnJlbnQgaW4KIAkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CiAJKikKLQkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICBmdW5jX2Vycm9yICJDVVJSRU5UICckY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICInJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKIAkgIDs7CiAJZXNhYwogCiAJY2FzZSAkcmV2aXNpb24gaW4KIAkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CiAJKikKLQkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OIFxgJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIGZ1bmNfZXJyb3IgIlJFVklTSU9OICckcmV2aXNpb24nIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCiAJICA7OwogCWVzYWMKIAogCWNhc2UgJGFnZSBpbgogCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKIAkqKQotCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCi0JICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCisJICBmdW5jX2Vycm9yICJBR0UgJyRhZ2UnIG11c3QgYmUgYSBub25uZWdhdGl2ZSBpbnRlZ2VyIgorCSAgZnVuY19mYXRhbF9lcnJvciAiJyR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCiAJICA7OwogCWVzYWMKIAogCWlmIHRlc3QgIiRhZ2UiIC1ndCAiJGN1cnJlbnQiOyB0aGVuCi0JICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBpcyBncmVhdGVyIHRoYW4gdGhlIGN1cnJlbnQgaW50ZXJmYWNlIG51bWJlciBcYCRjdXJyZW50JyIKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKKwkgIGZ1bmNfZXJyb3IgIkFHRSAnJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgJyRjdXJyZW50JyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIickdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIgogCWZpCiAKIAkjIENhbGN1bGF0ZSB0aGUgdmVyc2lvbiB2YXJpYWJsZXMuCkBAIC03NDAwLDI2ICs4NjY3LDM1IEBACiAJICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCiAJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQogCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCisJICB2ZXJzdWZmaXg9JG1ham9yLiRhZ2UuJHJldmlzaW9uCiAJICAjIERhcndpbiBsZCBkb2Vzbid0IGxpa2UgMCBmb3IgdGhlc2Ugb3B0aW9ucy4uLgogCSAgZnVuY19hcml0aCAkY3VycmVudCArIDEKIAkgIG1pbm9yX2N1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB4bGN2ZXJzdHJpbmc9IiR7d2x9LWNvbXBhdGliaWxpdHlfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50ICR7d2x9LWN1cnJlbnRfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKwkgIHhsY3ZlcnN0cmluZz0iJHdsLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkd2wkbWlub3JfY3VycmVudCAkd2wtY3VycmVudF92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKIAkgIHZlcnN0cmluZz0iLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJzaW9uICRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKyAgICAgICAgICAjIE9uIERhcndpbiBvdGhlciBjb21waWxlcnMKKyAgICAgICAgICBjYXNlICRDQyBpbgorICAgICAgICAgICAgICBuYWdmb3IqKQorICAgICAgICAgICAgICAgICAgdmVyc3RyaW5nPSIkd2wtY29tcGF0aWJpbGl0eV92ZXJzaW9uICR3bCRtaW5vcl9jdXJyZW50ICR3bC1jdXJyZW50X3ZlcnNpb24gJHdsJG1pbm9yX2N1cnJlbnQuJHJldmlzaW9uIgorICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgIHZlcnN0cmluZz0iLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJzaW9uICRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKKyAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYwogCSAgOzsKIAogCWZyZWVic2QtYW91dCkKLQkgIG1ham9yPSIuJGN1cnJlbnQiCi0JICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iOworCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50LiRyZXZpc2lvbgogCSAgOzsKIAogCWZyZWVic2QtZWxmKQotCSAgbWFqb3I9Ii4kY3VycmVudCIKLQkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgorCSAgbWFqb3I9LiRjdXJyZW50CisJICB2ZXJzdWZmaXg9LiRjdXJyZW50CiAJICA7OwogCiAJaXJpeCB8IG5vbnN0b3B1eCkKLQkgIGlmIHRlc3QgIlgkbHRfaXJpeF9pbmNyZW1lbnQiID0gIlhubyI7IHRoZW4KKwkgIGlmIHRlc3Qgbm8gPSAiJGx0X2lyaXhfaW5jcmVtZW50IjsgdGhlbgogCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQogCSAgZWxzZQogCSAgICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZSArIDEKQEAgLTc0MzAsNjkgKzg3MDYsNjkgQEAKIAkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OwogCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CiAJICBlc2FjCi0JICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKwkgIHZlcnN0cmluZz0kdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kcmV2aXNpb24KIAogCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KIAkgIGxvb3A9JHJldmlzaW9uCi0JICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICB3aGlsZSB0ZXN0IDAgLW5lICIkbG9vcCI7IGRvCiAJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKIAkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCiAJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmciCisJICAgIHZlcnN0cmluZz0kdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZwogCSAgZG9uZQogCi0JICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFqb3IgbXVzdCBub3QgY29udGFpbiBgLicuCisJICAjIEJlZm9yZSB0aGlzIHBvaW50LCAkbWFqb3IgbXVzdCBub3QgY29udGFpbiAnLicuCiAJICBtYWpvcj0uJG1ham9yCi0JICB2ZXJzdWZmaXg9IiRtYWpvci4kcmV2aXNpb24iCisJICB2ZXJzdWZmaXg9JG1ham9yLiRyZXZpc2lvbgogCSAgOzsKIAogCWxpbnV4KSAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKIAkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCiAJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0Ci0JICB2ZXJzdWZmaXg9IiRtYWpvci4kYWdlLiRyZXZpc2lvbiIKKwkgIHZlcnN1ZmZpeD0kbWFqb3IuJGFnZS4kcmV2aXNpb24KIAkgIDs7CiAKIAlvc2YpCiAJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQogCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCi0JICB2ZXJzdHJpbmc9IiRjdXJyZW50LiRhZ2UuJHJldmlzaW9uIgorCSAgdmVyc3VmZml4PS4kY3VycmVudC4kYWdlLiRyZXZpc2lvbgorCSAgdmVyc3RyaW5nPSRjdXJyZW50LiRhZ2UuJHJldmlzaW9uCiAKIAkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCiAJICBsb29wPSRhZ2UKLQkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgIHdoaWxlIHRlc3QgMCAtbmUgIiRsb29wIjsgZG8KIAkgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRsb29wCiAJICAgIGlmYWNlPSRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgICBmdW5jX2FyaXRoICRsb29wIC0gMQogCSAgICBsb29wPSRmdW5jX2FyaXRoX3Jlc3VsdAotCSAgICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtpZmFjZX0uMCIKKwkgICAgdmVyc3RyaW5nPSR2ZXJzdHJpbmc6JGlmYWNlLjAKIAkgIGRvbmUKIAogCSAgIyBNYWtlIGV4ZWN1dGFibGVzIGRlcGVuZCBvbiBvdXIgY3VycmVudCB2ZXJzaW9uLgotCSAgZnVuY19hcHBlbmQgdmVyc3RyaW5nICI6JHtjdXJyZW50fS4wIgorCSAgZnVuY19hcHBlbmQgdmVyc3RyaW5nICI6JGN1cnJlbnQuMCIKIAkgIDs7CiAKIAlxbngpCi0JICBtYWpvcj0iLiRjdXJyZW50IgotCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiCisJICBtYWpvcj0uJGN1cnJlbnQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQKIAkgIDs7CiAKIAlzdW5vcykKLQkgIG1ham9yPSIuJGN1cnJlbnQiCi0JICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kcmV2aXNpb24iCisJICBtYWpvcj0uJGN1cnJlbnQKKwkgIHZlcnN1ZmZpeD0uJGN1cnJlbnQuJHJldmlzaW9uCiAJICA7OwogCiAJd2luZG93cykKIAkgICMgVXNlICctJyByYXRoZXIgdGhhbiAnLicsIHNpbmNlIHdlIG9ubHkgd2FudCBvbmUKLQkgICMgZXh0ZW5zaW9uIG9uIERPUyA4LjMgZmlsZXN5c3RlbXMuCisJICAjIGV4dGVuc2lvbiBvbiBET1MgOC4zIGZpbGUgc3lzdGVtcy4KIAkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCiAJICBtYWpvcj0kZnVuY19hcml0aF9yZXN1bHQKLQkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIHZlcnN1ZmZpeD0tJG1ham9yCiAJICA7OwogCiAJKikKLQkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAidW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSBcYCR2ZXJzaW9uX3R5cGUnIgorCSAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJ1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlICckdmVyc2lvbl90eXBlJyIKIAkgIDs7CiAJZXNhYwogCkBAIC03NTA2LDQyICs4NzgyLDQ1IEBACiAJICAgIHZlcnN0cmluZz0KIAkgICAgOzsKIAkgICopCi0JICAgIHZlcnN0cmluZz0iMC4wIgorCSAgICB2ZXJzdHJpbmc9MC4wCiAJICAgIDs7CiAJICBlc2FjCi0JICBpZiB0ZXN0ICIkbmVlZF92ZXJzaW9uIiA9IG5vOyB0aGVuCisJICBpZiB0ZXN0IG5vID0gIiRuZWVkX3ZlcnNpb24iOyB0aGVuCiAJICAgIHZlcnN1ZmZpeD0KIAkgIGVsc2UKLQkgICAgdmVyc3VmZml4PSIuMC4wIgorCSAgICB2ZXJzdWZmaXg9LjAuMAogCSAgZmkKIAlmaQogCiAJIyBSZW1vdmUgdmVyc2lvbiBpbmZvIGZyb20gbmFtZSBpZiB2ZXJzaW9uaW5nIHNob3VsZCBiZSBhdm9pZGVkCi0JaWYgdGVzdCAiJGF2b2lkX3ZlcnNpb24iID0geWVzICYmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwlpZiB0ZXN0IHllcyxubyA9ICIkYXZvaWRfdmVyc2lvbiwkbmVlZF92ZXJzaW9uIjsgdGhlbgogCSAgbWFqb3I9CiAJICB2ZXJzdWZmaXg9Ci0JICB2ZXJzdHJpbmc9IiIKKwkgIHZlcnN0cmluZz0KIAlmaQogCiAJIyBDaGVjayB0byBzZWUgaWYgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIHVuZGVmaW5lZCBzeW1ib2xzLgotCWlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0geWVzOyB0aGVuCi0JICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciID0gdW5zdXBwb3J0ZWQ7IHRoZW4KLQkgICAgZnVuY193YXJuaW5nICJ1bmRlZmluZWQgc3ltYm9scyBub3QgYWxsb3dlZCBpbiAkaG9zdCBzaGFyZWQgbGlicmFyaWVzIgotCSAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLQkgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJaWYgdGVzdCB5ZXMgPSAiJGFsbG93X3VuZGVmaW5lZCI7IHRoZW4KKwkgIGlmIHRlc3QgdW5zdXBwb3J0ZWQgPSAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisJICAgICAgZnVuY193YXJuaW5nICJ1bmRlZmluZWQgc3ltYm9scyBub3QgYWxsb3dlZCBpbiAkaG9zdCBzaGFyZWQgbGlicmFyaWVzOyBidWlsZGluZyBzdGF0aWMgb25seSIKKwkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgZWxzZQorCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbid0IGJ1aWxkICRob3N0IHNoYXJlZCBsaWJyYXJ5IHVubGVzcyAtbm8tdW5kZWZpbmVkIGlzIHNwZWNpZmllZCIKKwkgICAgZmkKIAkgIGZpCiAJZWxzZQogCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0kbm9fdW5kZWZpbmVkX2ZsYWcKIAlmaQogCiAgICAgICBmaQogCi0gICAgICBmdW5jX2dlbmVyYXRlX2Rsc3ltcyAiJGxpYm5hbWUiICIkbGlibmFtZSIgInllcyIKKyAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkbGlibmFtZSIgIiRsaWJuYW1lIiA6CiAgICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCi0gICAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorICAgICAgdGVzdCAiICIgPSAiJGxpYm9ianMiICYmIGxpYm9ianM9CiAKLSAgICAgIGlmIHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisgICAgICBpZiB0ZXN0IHJlbGluayAhPSAiJG9wdF9tb2RlIjsgdGhlbgogCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CiAJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCiAJcmVtb3ZlbGlzdD0KQEAgLTc1NTAsOCArODgyOSw4IEBACiAJICBjYXNlICRwIGluCiAJICAgICouJG9iamV4dCB8ICouZ2NubykKIAkgICAgICAgOzsKLQkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKikKLQkgICAgICAgaWYgdGVzdCAiWCRwcmVjaW91c19maWxlc19yZWdleCIgIT0gIlgiOyB0aGVuCisJICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuKikKKwkgICAgICAgaWYgdGVzdCAtbiAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IjsgdGhlbgogCQkgaWYgJEVDSE8gIiRwIiB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKIAkJIHRoZW4KIAkJICAgY29udGludWUKQEAgLTc1NjcsMTEgKzg4NDYsMTEgQEAKICAgICAgIGZpCiAKICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgotICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKyAgICAgIGlmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyIgJiYgdGVzdCBjb252ZW5pZW5jZSAhPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KIAlmdW5jX2FwcGVuZCBvbGRsaWJzICIgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKIAogCSMgVHJhbnNmb3JtIC5sbyBmaWxlcyB0byAubyBmaWxlcy4KLQlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4ke2xpYmV4dH0kL2Q7ICRsbzJvIiB8ICROTDJTUGAKKwlvbGRvYmpzPSIkb2JqcyAiYCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIvXC4kbGliZXh0JC9kOyAkbG8ybyIgfCAkTkwyU1BgCiAgICAgICBmaQogCiAgICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgpAQCAtNzU5MiwxMyArODg3MSwxMyBAQAogCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcnBhdGggIiAkbGliZGlyIiA7OwogCSAgZXNhYwogCWRvbmUKLQlpZiB0ZXN0ICIkaGFyZGNvZGVfaW50b19saWJzIiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgeWVzICE9ICIkaGFyZGNvZGVfaW50b19saWJzIiB8fCB0ZXN0IHllcyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCiAJICBkZXBlbmRlbmN5X2xpYnM9IiR0ZW1wX3hycGF0aCAkZGVwZW5kZW5jeV9saWJzIgogCWZpCiAgICAgICBmaQogCiAgICAgICAjIE1ha2Ugc3VyZSBkbGZpbGVzIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGZpbGVzIHRoYXQgd29uJ3QgYmUgZGxwcmVvcGVuZWQKLSAgICAgIG9sZF9kbGZpbGVzPSIkZGxmaWxlcyIKKyAgICAgIG9sZF9kbGZpbGVzPSRkbGZpbGVzCiAgICAgICBkbGZpbGVzPQogICAgICAgZm9yIGxpYiBpbiAkb2xkX2RsZmlsZXM7IGRvCiAJY2FzZSAiICRkbHByZWZpbGVzICRkbGZpbGVzICIgaW4KQEAgLTc2MDgsNyArODg4Nyw3IEBACiAgICAgICBkb25lCiAKICAgICAgICMgTWFrZSBzdXJlIGRscHJlZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMKLSAgICAgIG9sZF9kbHByZWZpbGVzPSIkZGxwcmVmaWxlcyIKKyAgICAgIG9sZF9kbHByZWZpbGVzPSRkbHByZWZpbGVzCiAgICAgICBkbHByZWZpbGVzPQogICAgICAgZm9yIGxpYiBpbiAkb2xkX2RscHJlZmlsZXM7IGRvCiAJY2FzZSAiJGRscHJlZmlsZXMgIiBpbgpAQCAtNzYxNyw3ICs4ODk2LDcgQEAKIAllc2FjCiAgICAgICBkb25lCiAKLSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgogCWlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KIAkgIGNhc2UgJGhvc3QgaW4KIAkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWJlb3MqIHwgKi1jZWdjYyogfCAqLSotaGFpa3UqKQpAQCAtNzY0MSw3ICs4OTIwLDcgQEAKIAkgICAgOzsKIAkgICopCiAJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCi0JICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyI7IHRoZW4KIAkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgogCSAgICBmaQogCSAgICA7OwpAQCAtNzY1Nyw5ICs4OTM2LDkgQEAKIAkjIEknbSBub3Qgc3VyZSBpZiBJJ20gdHJlYXRpbmcgdGhlIHJlbGVhc2UgY29ycmVjdGx5LiAgSSB0aGluawogCSMgcmVsZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwgKGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qgd2FudCB0bwogCSMgYWRkIGl0IGluIHR3aWNlLiAgSXMgdGhhdCBjb3JyZWN0PwotCXJlbGVhc2U9IiIKLQl2ZXJzdWZmaXg9IiIKLQltYWpvcj0iIgorCXJlbGVhc2U9CisJdmVyc3VmZml4PQorCW1ham9yPQogCW5ld2RlcGxpYnM9CiAJZHJvcHBlZGRlcHM9bm8KIAljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgpAQCAtNzY4OCwyMCArODk2NywyMCBAQAogCSAgICAgIC1sKikKIAkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgogCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQlpZiB0ZXN0IHllcyA9ICIkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIjsgdGhlbgogCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCQkgICoiICRpICIqKQogCQkgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgotCQkgICAgaT0iIgorCQkgICAgaT0KIAkJICAgIDs7CiAJCSAgZXNhYwogCQlmaQotCQlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJCWlmIHRlc3QgLW4gIiRpIjsgdGhlbgogCQkgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAogCQkgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKIAkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAogCQkgIGRlcGxpYl9tYXRjaD0kMQotCQkgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDA7IHRoZW4KIAkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKIAkJICBlbHNlCiAJCSAgICBkcm9wcGVkZGVwcz15ZXMKQEAgLTc3MzEsMjAgKzkwMTAsMjAgQEAKIAkJJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAogCQlpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkaTsgdGhlbgogCQkgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKLQkJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCSAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KIAkJICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCQkgICAgKiIgJGkgIiopCiAJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKLQkJICAgICAgaT0iIgorCQkgICAgICBpPQogCQkgICAgICA7OwogCQkgICAgZXNhYwogCQkgIGZpCi0JCSAgaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgorCQkgIGlmIHRlc3QgLW4gIiRpIjsgdGhlbgogCQkgICAgbGlibmFtZT1gZXZhbCAiXFwkRUNITyBcIiRsaWJuYW1lX3NwZWNcIiJgCiAJCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCiAJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzOyBzaGlmdAogCQkgICAgZGVwbGliX21hdGNoPSQxCi0JCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCisJCSAgICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDA7IHRoZW4KIAkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgogCQkgICAgZWxzZQogCQkgICAgICBkcm9wcGVkZGVwcz15ZXMKQEAgLTc3ODEsMjQgKzkwNjAsMjQgQEAKIAkgICAgLWwqKQogCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCiAJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0Ci0JICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCiAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCQkqIiAkYV9kZXBsaWIgIiopCiAJCSAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJICBhX2RlcGxpYj0iIgorCQkgIGFfZGVwbGliPQogCQkgIDs7CiAJCWVzYWMKIAkgICAgICBmaQotCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIjsgdGhlbgogCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKIAkJaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfZ2xvYiI7IHRoZW4KIAkJICBsaWJuYW1lZ2xvYj1gZnVuY19lY2hvX2FsbCAiJGxpYm5hbWUiIHwgJFNFRCAtZSAkZmlsZV9tYWdpY19nbG9iYAogCQllbHNlCiAJCSAgbGlibmFtZWdsb2I9JGxpYm5hbWUKIAkJZmkKLQkJdGVzdCAiJHdhbnRfbm9jYXNlZ2xvYiIgPSB5ZXMgJiYgbm9jYXNlZ2xvYj1gc2hvcHQgLXAgbm9jYXNlZ2xvYmAKKwkJdGVzdCB5ZXMgPSAiJHdhbnRfbm9jYXNlZ2xvYiIgJiYgbm9jYXNlZ2xvYj1gc2hvcHQgLXAgbm9jYXNlZ2xvYmAKIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCi0JCSAgaWYgdGVzdCAiJHdhbnRfbm9jYXNlZ2xvYiIgPSB5ZXM7IHRoZW4KKwkJICBpZiB0ZXN0IHllcyA9ICIkd2FudF9ub2Nhc2VnbG9iIjsgdGhlbgogCQkgICAgc2hvcHQgLXMgbm9jYXNlZ2xvYgogCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAogCQkgICAgJG5vY2FzZWdsb2IKQEAgLTc4MTYsMjUgKzkwOTUsMjUgQEAKIAkJICAgICAgIyBXZSBtaWdodCBzdGlsbCBlbnRlciBhbiBlbmRsZXNzIGxvb3AsIHNpbmNlIGEgbGluawogCQkgICAgICAjIGxvb3AgY2FuIGJlIGNsb3NlZCB3aGlsZSB3ZSBmb2xsb3cgbGlua3MsCiAJCSAgICAgICMgYnV0IHNvIHdoYXQ/Ci0JCSAgICAgIHBvdGxpYj0iJHBvdGVudF9saWIiCisJCSAgICAgIHBvdGxpYj0kcG90ZW50X2xpYgogCQkgICAgICB3aGlsZSB0ZXN0IC1oICIkcG90bGliIiAyPi9kZXYvbnVsbDsgZG8KLQkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKKwkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJFNFRCAncy8uKiAtPiAvLydgCiAJCQljYXNlICRwb3RsaWJsaW5rIGluCi0JCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0iJHBvdGxpYmxpbmsiOzsKLQkJCSopIHBvdGxpYj1gJEVDSE8gIiRwb3RsaWIiIHwgJFNFRCAncyxbXi9dKiQsLCdgIiRwb3RsaWJsaW5rIjs7CisJCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0kcG90bGlibGluazs7CisJCQkqKSBwb3RsaWI9YCRFQ0hPICIkcG90bGliIiB8ICRTRUQgJ3N8W14vXSokfHwnYCIkcG90bGlibGluayI7OwogCQkJZXNhYwogCQkgICAgICBkb25lCiAJCSAgICAgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwiXCRwb3RsaWJcIiAyPi9kZXYvbnVsbCB8CiAJCQkgJFNFRCAtZSAxMHEgfAogCQkJICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCiAJCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCQkJYV9kZXBsaWI9IiIKKwkJCWFfZGVwbGliPQogCQkJYnJlYWsgMgogCQkgICAgICBmaQogCQkgIGRvbmUKIAkJZG9uZQogCSAgICAgIGZpCi0JICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCiAJCWRyb3BwZWRkZXBzPXllcwogCQllY2hvCiAJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKQEAgLTc4NDIsNyArOTEyMSw3IEBACiAJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCiAJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKIAkJZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKLQkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiOyB0aGVuCiAJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgZmlsZSBtYWdpYyB0ZXN0KSIKIAkJZWxzZQogCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgpAQCAtNzg2NSwzMCArOTE0NCwzMCBAQAogCSAgICAtbCopCiAJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKIAkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKLQkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgaWYgdGVzdCB5ZXMgPSAiJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyI7IHRoZW4KIAkJY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJCSoiICRhX2RlcGxpYiAiKikKIAkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgotCQkgIGFfZGVwbGliPSIiCisJCSAgYV9kZXBsaWI9CiAJCSAgOzsKIAkJZXNhYwogCSAgICAgIGZpCi0JICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiOyB0aGVuCiAJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAogCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KIAkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKIAkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCi0JCSAgICBwb3RsaWI9IiRwb3RlbnRfbGliIiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAorCQkgICAgcG90bGliPSRwb3RlbnRfbGliICMgc2VlIHN5bWxpbmstY2hlY2sgYWJvdmUgaW4gZmlsZV9tYWdpYyB0ZXN0CiAJCSAgICBpZiBldmFsICJcJEVDSE8gXCIkcG90ZW50X2xpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIHwgXAogCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKLQkJICAgICAgYV9kZXBsaWI9IiIKKwkJICAgICAgYV9kZXBsaWI9CiAJCSAgICAgIGJyZWFrIDIKIAkJICAgIGZpCiAJCSAgZG9uZQogCQlkb25lCiAJICAgICAgZmkKLQkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiI7IHRoZW4KIAkJZHJvcHBlZGRlcHM9eWVzCiAJCWVjaG8KIAkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgpAQCAtNzg5Niw3ICs5MTc1LDcgQEAKIAkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKIAkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgogCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgotCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KKwkJaWYgdGVzdCAteiAiJHBvdGxpYiI7IHRoZW4KIAkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciByZWdleCBwYXR0ZXJuIHRlc3QpIgogCQllbHNlCiAJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCkBAIC03OTEyLDE4ICs5MTkxLDE4IEBACiAJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgogCSAgOzsKIAlub25lIHwgdW5rbm93biB8ICopCi0JICBuZXdkZXBsaWJzPSIiCisJICBuZXdkZXBsaWJzPQogCSAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJGRlcGxpYnMiIHwgJFNFRCAncy8gLWxjJC8vOyBzLyAtW0xSXVteIF0qLy9nJ2AKLQkgIGlmIHRlc3QgIlgkYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzIiA9ICJYeWVzIiA7IHRoZW4KLQkgICAgZm9yIGkgaW4gJHByZWRlcHMgJHBvc3RkZXBzIDsgZG8KKwkgIGlmIHRlc3QgeWVzID0gIiRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiOyB0aGVuCisJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KIAkgICAgICAjIGNhbid0IHVzZSBYc2VkIGJlbG93LCBiZWNhdXNlICRpIG1pZ2h0IGNvbnRhaW4gJy8nCi0JICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJHRtcF9kZXBsaWJzIiB8ICRTRUQgInMsJGksLCJgCisJICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJHRtcF9kZXBsaWJzIiB8ICRTRUQgInN8JGl8fCJgCiAJICAgIGRvbmUKIAkgIGZpCiAJICBjYXNlICR0bXBfZGVwbGlicyBpbgogCSAgKlshXAlcIF0qKQogCSAgICBlY2hvCi0JICAgIGlmIHRlc3QgIlgkZGVwbGlic19jaGVja19tZXRob2QiID0gIlhub25lIjsgdGhlbgorCSAgICBpZiB0ZXN0IG5vbmUgPSAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIjsgdGhlbgogCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKIAkgICAgZWxzZQogCSAgICAgIGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHRvIGJlIHN1cHBvcnRlZC4iCkBAIC03OTQ3LDggKzkyMjYsOCBAQAogCSAgOzsKIAllc2FjCiAKLQlpZiB0ZXN0ICIkZHJvcHBlZGRlcHMiID0geWVzOyB0aGVuCi0JICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRkcm9wcGVkZGVwcyI7IHRoZW4KKwkgIGlmIHRlc3QgeWVzID0gIiRtb2R1bGUiOyB0aGVuCiAJICAgIGVjaG8KIAkgICAgZWNobyAiKioqIFdhcm5pbmc6IGxpYnRvb2wgY291bGQgbm90IHNhdGlzZnkgYWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkiCiAJICAgICRFQ0hPICIqKiogZGVwZW5kZW5jaWVzIG9mIG1vZHVsZSAkbGlibmFtZS4gIFRoZXJlZm9yZSwgbGlidG9vbCB3aWxsIGNyZWF0ZSIKQEAgLTc5NTcsMTIgKzkyMzYsMTIgQEAKIAkgICAgaWYgdGVzdCAteiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KIAkgICAgICBlY2hvCiAJICAgICAgZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCi0JICAgICAgZWNobyAiKioqIGxpc3RzIGZyb20gYSBwcm9ncmFtLCB1c2luZyBcYG5tJyBvciBlcXVpdmFsZW50LCBidXQgbGlidG9vbCBjb3VsZCIKKwkgICAgICBlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nICdubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCiAJICAgICAgZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgotCSAgICAgIGVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICAgIGVjaG8gIioqKiAnbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCiAJICAgIGZpCi0JICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgotCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgIGlmIHRlc3Qgbm8gPSAiJGJ1aWxkX29sZF9saWJzIjsgdGhlbgorCSAgICAgIG9sZGxpYnM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dAogCSAgICAgIGJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKIAkgICAgICBidWlsZF9vbGRfbGlicz15ZXMKIAkgICAgZWxzZQpAQCAtNzk3MywxNCArOTI1MiwxNCBAQAogCSAgICBlY2hvICIqKiogYXV0b21hdGljYWxseSBhZGRlZCB3aGVuZXZlciBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggdGhpcyBsaWJyYXJ5IgogCSAgICBlY2hvICIqKiogb3IgaXMgZGVjbGFyZWQgdG8gLWRsb3BlbiBpdC4iCiAKLQkgICAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSBubzsgdGhlbgorCSAgICBpZiB0ZXN0IG5vID0gIiRhbGxvd191bmRlZmluZWQiOyB0aGVuCiAJICAgICAgZWNobwogCSAgICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCiAJICAgICAgZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCiAJICAgICAgZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgogCSAgICAgIGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCi0JICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCi0JCW9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgICAgaWYgdGVzdCBubyA9ICIkYnVpbGRfb2xkX2xpYnMiOyB0aGVuCisJCW9sZGxpYnM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dAogCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCiAJCWJ1aWxkX29sZF9saWJzPXllcwogCSAgICAgIGVsc2UKQEAgLTgwMjYsNyArOTMwNSw3IEBACiAJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwogCWVzYWMKICAgICAgIGRvbmUKLSAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKKyAgICAgIGRlcGxpYnM9JG5ld19saWJzCiAKICAgICAgICMgQWxsIHRoZSBsaWJyYXJ5LXNwZWNpZmljIHZhcmlhYmxlcyAoaW5zdGFsbF9saWJkaXIgaXMgc2V0IGFib3ZlKS4KICAgICAgIGxpYnJhcnlfbmFtZXM9CkBAIC04MDM0LDI1ICs5MzEzLDI1IEBACiAgICAgICBkbG5hbWU9CiAKICAgICAgICMgVGVzdCBhZ2Fpbiwgd2UgbWF5IGhhdmUgZGVjaWRlZCBub3QgdG8gYnVpbGQgaXQgYW55IG1vcmUKLSAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCi0JIyBSZW1vdmUgJHt3bH0gaW5zdGFuY2VzIHdoZW4gbGlua2luZyB3aXRoIGxkLgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KKwkjIFJlbW92ZSAkd2wgaW5zdGFuY2VzIHdoZW4gbGlua2luZyB3aXRoIGxkLgogCSMgRklYTUU6IHNob3VsZCB0ZXN0IHRoZSByaWdodCBfY21kcyB2YXJpYWJsZS4KIAljYXNlICRhcmNoaXZlX2NtZHMgaW4KIAkgICpcJExEXCAqKSB3bD0gOzsKICAgICAgICAgZXNhYwotCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGhhcmRjb2RlX2ludG9fbGlicyI7IHRoZW4KIAkgICMgSGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKIAkgIGhhcmRjb2RlX2xpYmRpcnM9CiAJICBkZXBfcnBhdGg9Ci0JICBycGF0aD0iJGZpbmFsaXplX3JwYXRoIgotCSAgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorCSAgcnBhdGg9JGZpbmFsaXplX3JwYXRoCisJICB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiIHx8IHJwYXRoPSRjb21waWxlX3JwYXRoJHJwYXRoCiAJICBmb3IgbGliZGlyIGluICRycGF0aDsgZG8KIAkgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCiAJICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCiAJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgogCQlsaWJkaXI9JGZ1bmNfcmVwbGFjZV9zeXNyb290X3Jlc3VsdAogCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCQkgIGhhcmRjb2RlX2xpYmRpcnM9JGxpYmRpcgogCQllbHNlCiAJCSAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgogCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCkBAIC04MDc3LDcgKzkzNTYsNyBAQAogCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KIAkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgogCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0JICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJICAgIGxpYmRpcj0kaGFyZGNvZGVfbGliZGlycwogCSAgICBldmFsICJkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIgogCSAgZmkKIAkgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHBlcm1fcnBhdGgiOyB0aGVuCkBAIC04MDkxLDggKzkzNzAsOCBAQAogCSAgdGVzdCAtbiAiJGRlcF9ycGF0aCIgJiYgZGVwbGlicz0iJGRlcF9ycGF0aCAkZGVwbGlicyIKIAlmaQogCi0Jc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoIgotCXRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKwlzaGxpYnBhdGg9JGZpbmFsaXplX3NobGlicGF0aAorCXRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSIgfHwgc2hsaWJwYXRoPSRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgKIAlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgogCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgogCWZpCkBAIC04MTAyLDE5ICs5MzgxLDE5IEBACiAJZXZhbCBsaWJyYXJ5X25hbWVzPVwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiCiAJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCiAJc2hpZnQKLQlyZWFsbmFtZT0iJDEiCisJcmVhbG5hbWU9JDEKIAlzaGlmdAogCiAJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgogCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgogCWVsc2UKLQkgIHNvbmFtZT0iJHJlYWxuYW1lIgorCSAgc29uYW1lPSRyZWFsbmFtZQogCWZpCiAJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KIAkgIGRsbmFtZT0kc29uYW1lCiAJZmkKIAotCWxpYj0iJG91dHB1dF9vYmpkaXIvJHJlYWxuYW1lIgorCWxpYj0kb3V0cHV0X29iamRpci8kcmVhbG5hbWUKIAlsaW5rbmFtZXM9CiAJZm9yIGxpbmsKIAlkbwpAQCAtODEyOCw3ICs5NDA3LDcgQEAKIAlkZWxmaWxlcz0KIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCiAJICAkb3B0X2RyeV9ydW4gfHwgY3AgIiRleHBvcnRfc3ltYm9scyIgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAiCi0JICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnVleHAKIAkgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJGV4cG9ydF9zeW1ib2xzIgogCWZpCiAKQEAgLTgxMzcsMzEgKzk0MTYsMzEgQEAKIAljeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQogCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCiAJICAgICMgZXhwb3J0aW5nIHVzaW5nIHVzZXIgc3VwcGxpZWQgc3ltZmlsZQotCSAgICBpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgIT0geEVYUE9SVFM7IHRoZW4KKwkgICAgZnVuY19kbGxfZGVmX3AgIiRleHBvcnRfc3ltYm9scyIgfHwgewogCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAogCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCiAJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgogCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKIAkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCiAJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCi0JICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIG9yaWdfZXhwb3J0X3N5bWJvbHM9JGV4cG9ydF9zeW1ib2xzCiAJICAgICAgZXhwb3J0X3N5bWJvbHM9CiAJICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcwotCSAgICBmaQorCSAgICB9CiAJICBmaQogCSAgOzsKIAllc2FjCiAKIAkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scwogCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KLQkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKLQkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgIGlmIHRlc3QgeWVzID0gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0kb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAKIAkgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkZXhwb3J0X3N5bWJvbHMKIAkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcwotCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgc2F2ZV9pZnM9JElGUzsgSUZTPSd+JwogCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KLQkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBJRlM9JHNhdmVfaWZzCiAJICAgICAgIyBUYWtlIHRoZSBub3JtYWwgYnJhbmNoIGlmIHRoZSBubV9maWxlX2xpc3Rfc3BlYyBicmFuY2gKIAkgICAgICAjIGRvZXNuJ3Qgd29yayBvciBpZiB0b29sIGNvbnZlcnNpb24gaXMgbm90IG5lZWRlZC4KIAkgICAgICBjYXNlICRubV9maWxlX2xpc3Rfc3BlY34kdG9fdG9vbF9maWxlX2NtZCBpbgpAQCAtODE3NSw3ICs5NDU0LDcgQEAKIAkJICB0cnlfbm9ybWFsX2JyYW5jaD1ubwogCQkgIDs7CiAJICAgICAgZXNhYwotCSAgICAgIGlmIHRlc3QgIiR0cnlfbm9ybWFsX2JyYW5jaCIgPSB5ZXMgXAorCSAgICAgIGlmIHRlc3QgeWVzID0gIiR0cnlfbm9ybWFsX2JyYW5jaCIgXAogCQkgJiYgeyB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgXAogCQkgICAgICB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgfQogCSAgICAgIHRoZW4KQEAgLTgxODYsNyArOTQ2NSw3IEBACiAJCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKIAkJc2F2ZV9saWJvYmpzPSRsaWJvYmpzCiAJCXNhdmVfb3V0cHV0PSRvdXRwdXQKLQkJb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lm5tCisJCW91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLm5tCiAJCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgogCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKIAkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgpAQCAtODIwOSw4ICs5NDg4LDggQEAKIAkJYnJlYWsKIAkgICAgICBmaQogCSAgICBkb25lCi0JICAgIElGUz0iJHNhdmVfaWZzIgotCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiI7IHRoZW4KKwkgICAgSUZTPSRzYXZlX2lmcworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IjsgdGhlbgogCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKIAkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJwogCSAgICBmaQpAQCAtODIxOCwxNiArOTQ5NywxNiBAQAogCWZpCiAKIAlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCi0JICB0bXBfZXhwb3J0X3N5bWJvbHM9IiRleHBvcnRfc3ltYm9scyIKLQkgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9IiRvcmlnX2V4cG9ydF9zeW1ib2xzIgorCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSRleHBvcnRfc3ltYm9scworCSAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0kb3JpZ19leHBvcnRfc3ltYm9scwogCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCiAJZmkKIAotCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJaWYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgogCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCi0JICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgIGZ1bmNfdmVyYm9zZSAiZmlsdGVyIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCiAJICAjIEZJWE1FOiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgcG90ZW50aWFsbHkgY29udGFpbnMgbG90cyBvZgotCSAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICMgJ3MnIGNvbW1hbmRzLCB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQogCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCiAJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQogCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KQEAgLTgyNDYsMTEgKzk1MjUsMTEgQEAKIAkgICAgOzsKIAkgIGVzYWMKIAlkb25lCi0JZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorCWRlcGxpYnM9JHRtcF9kZXBsaWJzCiAKIAlpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiOyB0aGVuCiAJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiICYmCi0JICAgIHRlc3QgIiRjb21waWxlcl9uZWVkc19vYmplY3QiID0geWVzICYmCisJICAgIHRlc3QgeWVzID0gIiRjb21waWxlcl9uZWVkc19vYmplY3QiICYmCiAJICAgIHRlc3QgLXogIiRsaWJvYmpzIjsgdGhlbgogCSAgICAjIGV4dHJhY3QgdGhlIGFyY2hpdmVzLCBzbyB3ZSBoYXZlIG9iamVjdHMgdG8gbGlzdC4KIAkgICAgIyBUT0RPOiBjb3VsZCBvcHRpbWl6ZSB0aGlzIHRvIGp1c3QgZXh0cmFjdCBvbmUgYXJjaGl2ZS4KQEAgLTgyNjEsNyArOTU0MCw3IEBACiAJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgogCSAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQogCSAgZWxzZQotCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKIAkgICAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKIAogCSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKQEAgLTgyNzAsMTggKzk1NDksMTggQEAKIAkgIGZpCiAJZmkKIAotCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkdGhyZWFkX3NhZmUiICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCiAJICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKIAkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmbGFnIgogCWZpCiAKIAkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKLQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgogCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPwogCWZpCiAKIAkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCi0JaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwlpZiB0ZXN0IHllcyA9ICIkbW9kdWxlIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiOyB0aGVuCiAJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCiAJICAgIGV2YWwgdGVzdF9jbWRzPVwiJG1vZHVsZV9leHBzeW1fY21kc1wiCiAJICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcwpAQCAtODI5OSw3ICs5NTc4LDcgQEAKIAkgIGZpCiAJZmkKIAotCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYKKwlpZiB0ZXN0IDogIT0gIiRza2lwcGVkX2V4cG9ydCIgJiYKIAkgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiICYmCiAJICAgbGVuPSRmdW5jX2xlbl9yZXN1bHQgJiYKIAkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KQEAgLTgzMzIsOCArOTYxMSw4IEBACiAJICBsYXN0X3JvYmo9CiAJICBrPTEKIAotCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0JICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmtzY3JpcHQKKwkgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgOiAhPSAiJHNraXBwZWRfZXhwb3J0IiAmJiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLmxua3NjcmlwdAogCSAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nIEdOVSBsZCBzY3JpcHQ6ICRvdXRwdXQiCiAJICAgIGVjaG8gJ0lOUFVUICgnID4gJG91dHB1dAogCSAgICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKQEAgLTgzNDUsMTQgKzk2MjQsMTQgQEAKIAkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgogCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKIAkgICAgb3V0cHV0PSRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKLQkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICJYJGZpbGVfbGlzdF9zcGVjIiAhPSBYOyB0aGVuCi0JICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmsKKwkgIGVsaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCA6ICE9ICIkc2tpcHBlZF9leHBvcnQiICYmIHRlc3QgLW4gIiRmaWxlX2xpc3Rfc3BlYyI7IHRoZW4KKwkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEubG5rCiAJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKIAkgICAgOiA+ICRvdXRwdXQKIAkgICAgc2V0IHggJHNhdmVfbGlib2JqcwogCSAgICBzaGlmdAogCSAgICBmaXJzdG9iaj0KLQkgICAgaWYgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCB5ZXMgPSAiJGNvbXBpbGVyX25lZWRzX29iamVjdCI7IHRoZW4KIAkgICAgICBmaXJzdG9iaj0iJDEgIgogCSAgICAgIHNoaWZ0CiAJICAgIGZpCkBAIC04MzY3LDcgKzk2NDYsNyBAQAogCSAgZWxzZQogCSAgICBpZiB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIjsgdGhlbgogCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuLi4iCi0JICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAogCSAgICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKIAkgICAgICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCiAJICAgICAgbGVuMD0kZnVuY19sZW5fcmVzdWx0CkBAIC04Mzc5LDEzICs5NjU4LDEzIEBACiAJCWZ1bmNfbGVuICIgJG9iaiIKIAkJZnVuY19hcml0aCAkbGVuICsgJGZ1bmNfbGVuX3Jlc3VsdAogCQlsZW49JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JCWlmIHRlc3QgIlgkb2JqbGlzdCIgPSBYIHx8CisJCWlmIHRlc3QgLXogIiRvYmpsaXN0IiB8fAogCQkgICB0ZXN0ICIkbGVuIiAtbHQgIiRtYXhfY21kX2xlbiI7IHRoZW4KIAkJICBmdW5jX2FwcGVuZCBvYmpsaXN0ICIgJG9iaiIKIAkJZWxzZQogCQkgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCiAJCSAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KLQkJICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisJCSAgaWYgdGVzdCAxIC1lcSAiJGsiOyB0aGVuCiAJCSAgICAjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgogCQkgICAgcmVsb2FkX29ianM9JG9iamxpc3QKIAkJICAgIGV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHNcIgpAQCAtODM5NSwxMCArOTY3NCwxMCBAQAogCQkgICAgcmVsb2FkX29ianM9IiRvYmpsaXN0ICRsYXN0X3JvYmoiCiAJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKIAkJICBmaQotCQkgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAorCQkgIGxhc3Rfcm9iaj0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSRrLiRvYmpleHQKIAkJICBmdW5jX2FyaXRoICRrICsgMQogCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0Ci0JCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJGsuJG9iamV4dAogCQkgIG9iamxpc3Q9IiAkb2JqIgogCQkgIGZ1bmNfbGVuICIgJGxhc3Rfcm9iaiIKIAkJICBmdW5jX2FyaXRoICRsZW4wICsgJGZ1bmNfbGVuX3Jlc3VsdApAQCAtODQxMCw5ICs5Njg5LDkgQEAKIAkgICAgICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KIAkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KIAkgICAgICByZWxvYWRfb2Jqcz0iJG9iamxpc3QgJGxhc3Rfcm9iaiIKLQkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JHJlbG9hZF9jbWRzXCIKKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRyZWxvYWRfY21kc1wiCiAJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KLQkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc31+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJGNvbmNhdF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCiAJICAgICAgZmkKIAkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCiAKQEAgLTg0MjAsOSArOTY5OSw5IEBACiAJICAgICAgb3V0cHV0PQogCSAgICBmaQogCi0JICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCi0JICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKLQkgICAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAke3NraXBwZWRfZXhwb3J0LWZhbHNlfSAmJiB7CisJICAgICAgZnVuY192ZXJib3NlICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciAnJGxpYm5hbWUubGEnIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cAogCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkUk0gJGV4cG9ydF9zeW1ib2xzCiAJICAgICAgbGlib2Jqcz0kb3V0cHV0CiAJICAgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KQEAgLTg0MzEsMTYgKzk3MTAsMTYgQEAKIAkgICAgICBpZiB0ZXN0IC1uICIkbGFzdF9yb2JqIjsgdGhlbgogCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc35cJFJNICRsYXN0X3JvYmpcIgogCSAgICAgIGZpCi0JICAgIGZpCisJICAgIH0KIAogCSAgICB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJgogCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgYSB0ZW1wb3JhcnkgcmVsb2FkYWJsZSBvYmplY3QgZmlsZTogJG91dHB1dCIKIAogCSAgICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCi0JICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBzYXZlX2lmcz0kSUZTOyBJRlM9J34nCiAJICAgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbwotCSAgICAgIElGUz0iJHNhdmVfaWZzIgotCSAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgICBJRlM9JHNhdmVfaWZzCisJICAgICAgJG9wdF9xdWlldCB8fCB7CiAJCSAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgogCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKIAkgICAgICB9CkBAIC04NDQ4LDcgKzk3MjcsNyBAQAogCQlsdF9leGl0PSQ/CiAKIAkJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IHRoZW4KKwkJaWYgdGVzdCByZWxpbmsgPSAiJG9wdF9tb2RlIjsgdGhlbgogCQkgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCiAJCSAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAogCQkgICAgJE1WICIke3JlYWxuYW1lfVUiICIkcmVhbG5hbWUiICkKQEAgLTg0NTcsNyArOTczNiw3IEBACiAJCWV4aXQgJGx0X2V4aXQKIAkgICAgICB9CiAJICAgIGRvbmUKLQkgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIElGUz0kc2F2ZV9pZnMKIAogCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCiAJICAgICAgZnVuY19zaG93X2V2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJwpAQCAtODQ2NSwxOCArOTc0NCwxOCBAQAogCSAgICBmaQogCSAgZmkKIAotICAgICAgICAgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisgICAgICAgICAgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX0gJiYgewogCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCi0JICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCi0JICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSRleHBvcnRfc3ltYm9scworCSAgICAgIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIiAmJiB0bXBfZXhwb3J0X3N5bWJvbHM9JG9yaWdfZXhwb3J0X3N5bWJvbHMKIAkgICAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnJEVDSE8gIiRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkdG1wX2V4cG9ydF9zeW1ib2xzIicKIAkgICAgZmkKIAogCSAgICBpZiB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyI7IHRoZW4KIAkgICAgICAjIFRoZSBnaXZlbiBleHBvcnRzX3N5bWJvbHMgZmlsZSBoYXMgdG8gYmUgZmlsdGVyZWQsIHNvIGZpbHRlciBpdC4KLQkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICAgICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgJyRsaWJuYW1lLmxhJyB0byB0YWcgREFUQSBleHBvcnRzIgogCSAgICAgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCi0JICAgICAgIyAncycgY29tbWFuZHMgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKKwkgICAgICAjICdzJyBjb21tYW5kcywgd2hpY2ggbm90IGFsbCBzZWRzIGNhbiBoYW5kbGUuIEdOVSBzZWQgc2hvdWxkIGJlIGZpbmUKIAkgICAgICAjIHRob3VnaC4gQWxzbywgdGhlIGZpbHRlciBzY2FsZXMgc3VwZXJsaW5lYXJseSB3aXRoIHRoZSBudW1iZXIgb2YKIAkgICAgICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQogCSAgICAgICMgaXNuJ3QgYSBibGVzc2VkIHRvb2wuCkBAIC04NDg1LDcgKzk3NjQsNyBAQAogCSAgICAgIGV4cG9ydF9zeW1ib2xzPSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZgogCSAgICAgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1mICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciA8ICRvcmlnX2V4cG9ydF9zeW1ib2xzID4gJGV4cG9ydF9zeW1ib2xzCiAJICAgIGZpCi0JICBmaQorCSAgfQogCiAJICBsaWJvYmpzPSRvdXRwdXQKIAkgICMgUmVzdG9yZSB0aGUgdmFsdWUgb2Ygb3V0cHV0LgpAQCAtODQ5OSw3ICs5Nzc4LDcgQEAKIAkgICMgdmFsdWUgb2YgJGxpYm9ianMgZm9yIHBpZWNld2lzZSBsaW5raW5nLgogCiAJICAjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCi0JICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgaWYgdGVzdCB5ZXMgPSAiJG1vZHVsZSIgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIjsgdGhlbgogCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRtb2R1bGVfZXhwc3ltX2NtZHMiOyB0aGVuCiAJICAgICAgY21kcz0kbW9kdWxlX2V4cHN5bV9jbWRzCiAJICAgIGVsc2UKQEAgLTg1MjEsNyArOTgwMCw3IEBACiAKIAkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKIAlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KLQkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKIAkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCiAKIAkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCkBAIC04NTI5LDExICs5ODA4LDEyIEBACiAJICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQogCWZpCiAKLQlzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwlzYXZlX2lmcz0kSUZTOyBJRlM9J34nCiAJZm9yIGNtZCBpbiAkY21kczsgZG8KLQkgIElGUz0iJHNhdmVfaWZzIgorCSAgSUZTPSRzcCRubAogCSAgZXZhbCBjbWQ9XCIkY21kXCIKLQkgICRvcHRfc2lsZW50IHx8IHsKKwkgIElGUz0kc2F2ZV9pZnMKKwkgICRvcHRfcXVpZXQgfHwgewogCSAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgIiRjbWQiCiAJICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKIAkgIH0KQEAgLTg1NDEsNyArOTgyMSw3IEBACiAJICAgIGx0X2V4aXQ9JD8KIAogCSAgICAjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKLQkgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBpZiB0ZXN0IHJlbGluayA9ICIkb3B0X21vZGUiOyB0aGVuCiAJICAgICAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKIAkgICAgICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCiAJCSRNViAiJHtyZWFsbmFtZX1VIiAiJHJlYWxuYW1lIiApCkBAIC04NTUwLDEwICs5ODMwLDEwIEBACiAJICAgIGV4aXQgJGx0X2V4aXQKIAkgIH0KIAlkb25lCi0JSUZTPSIkc2F2ZV9pZnMiCisJSUZTPSRzYXZlX2lmcwogCiAJIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCWlmIHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KIAkgICRvcHRfZHJ5X3J1biB8fCBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJFJNICR7cmVhbG5hbWV9VCAmJiAkTVYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkTVYgJHtyZWFsbmFtZX1VICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KIAogCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgpAQCAtODU3MywzOSArOTg1MywzOSBAQAogCWRvbmUKIAogCSMgSWYgLW1vZHVsZSBvciAtZXhwb3J0LWR5bmFtaWMgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBkbG5hbWUuCi0JaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgfHwgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllczsgdGhlbgorCWlmIHRlc3QgeWVzID0gIiRtb2R1bGUiIHx8IHRlc3QgeWVzID0gIiRleHBvcnRfZHluYW1pYyI7IHRoZW4KIAkgICMgT24gYWxsIGtub3duIG9wZXJhdGluZyBzeXN0ZW1zLCB0aGVzZSBhcmUgaWRlbnRpY2FsLgotCSAgZGxuYW1lPSIkc29uYW1lIgorCSAgZGxuYW1lPSRzb25hbWUKIAlmaQogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBvYmopCi0gICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgotCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCBubyAhPSAiJGRsc2VsZiI7IHRoZW4KKwlmdW5jX3dhcm5pbmcgIictZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgogICAgICAgZmkKIAogICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgogICAgICAgKlwgLWwqIHwgKlwgLUwqKQotCWZ1bmNfd2FybmluZyAiXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBvYmplY3RzIiA7OworCWZ1bmNfd2FybmluZyAiJy1sJyBhbmQgJy1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIgOzsKICAgICAgIGVzYWMKIAogICAgICAgdGVzdCAtbiAiJHJwYXRoIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1ycGF0aCcgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKwlmdW5jX3dhcm5pbmcgIictcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAKICAgICAgIHRlc3QgLW4gIiR4cnBhdGgiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCisJZnVuY193YXJuaW5nICInLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAKICAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCWZ1bmNfd2FybmluZyAiJy12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiCiAKICAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCi0JZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgorCWZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgogCiAgICAgICBjYXNlICRvdXRwdXQgaW4KICAgICAgICoubG8pCiAJdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiICYmIFwKLQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCAnJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIgogCiAJbGlib2JqPSRvdXRwdXQKIAlmdW5jX2xvMm8gIiRsaWJvYmoiCkBAIC04NjEzLDcgKzk4OTMsNyBAQAogCTs7CiAgICAgICAqKQogCWxpYm9iaj0KLQlvYmo9IiRvdXRwdXQiCisJb2JqPSRvdXRwdXQKIAk7OwogICAgICAgZXNhYwogCkBAIC04NjM2LDcgKzk5MTYsNyBAQAogCSAgZXZhbCB0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncz1cIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCiAJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCiAJZWxzZQotCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgorCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b2JqfXgKIAkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCiAKIAkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQpAQCAtODY0NSwxMiArOTkyNSwxMiBAQAogICAgICAgZmkKIAogICAgICAgIyBJZiB3ZSdyZSBub3QgYnVpbGRpbmcgc2hhcmVkLCB3ZSBuZWVkIHRvIHVzZSBub25fcGljX29ianMKLSAgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBsaWJvYmpzPSIkbm9uX3BpY19vYmplY3RzIgorICAgICAgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgfHwgbGlib2Jqcz0kbm9uX3BpY19vYmplY3RzCiAKICAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisgICAgICByZWxvYWRfb2Jqcz0kb2JqcyRvbGRfZGVwbGlicycgJ2AkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJGxpYmV4dCQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgJyAnJHJlbG9hZF9jb252X29ianMKIAotICAgICAgb3V0cHV0PSIkb2JqIgorICAgICAgb3V0cHV0PSRvYmoKICAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcmVsb2FkX2NtZHMiICdleGl0ICQ/JwogCiAgICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KQEAgLTg2NjIsNyArOTk0Miw3IEBACiAJZXhpdCAkRVhJVF9TVUNDRVNTCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiIHx8IHsKIAlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgogCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCiAJZmkKQEAgLTg2NzIsMTIgKzk5NTIsMTIgQEAKIAkjICRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCiAJIyAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIiB8fCBleGl0ICQ/CiAJZXhpdCAkRVhJVF9TVUNDRVNTCi0gICAgICBmaQorICAgICAgfQogCi0gICAgICBpZiB0ZXN0IC1uICIkcGljX2ZsYWciIHx8IHRlc3QgIiRwaWNfbW9kZSIgIT0gZGVmYXVsdDsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJHBpY19mbGFnIiB8fCB0ZXN0IGRlZmF1bHQgIT0gIiRwaWNfbW9kZSI7IHRoZW4KIAkjIE9ubHkgZG8gY29tbWFuZHMgaWYgd2UgcmVhbGx5IGhhdmUgZGlmZmVyZW50IFBJQyBvYmplY3RzLgogCXJlbG9hZF9vYmpzPSIkbGlib2JqcyAkcmVsb2FkX2NvbnZfb2JqcyIKLQlvdXRwdXQ9IiRsaWJvYmoiCisJb3V0cHV0PSRsaWJvYmoKIAlmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKICAgICAgIGZpCiAKQEAgLTg2OTQsMTYgKzk5NzQsMTQgQEAKIAkgICAgICAgICAgb3V0cHV0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQuZXhlOzsKICAgICAgIGVzYWMKICAgICAgIHRlc3QgLW4gIiR2aW5mbyIgJiYgXAotCWZ1bmNfd2FybmluZyAiXGAtdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKKwlmdW5jX3dhcm5pbmcgIictdmVyc2lvbi1pbmZvJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKIAogICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKLQlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgorCWZ1bmNfd2FybmluZyAiJy1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIKIAotICAgICAgdGVzdCAiJHByZWxvYWQiID0geWVzIFwKLSAgICAgICAgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHVua25vd24gXAotCSYmIHRlc3QgIiRkbG9wZW5fc2VsZiIgPSB1bmtub3duIFwKLQkmJiB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd24gJiYgXAotCSAgZnVuY193YXJuaW5nICJcYExUX0lOSVQoW2Rsb3Blbl0pJyBub3QgdXNlZC4gQXNzdW1pbmcgbm8gZGxvcGVuIHN1cHBvcnQuIgorICAgICAgJHByZWxvYWQgXAorCSYmIHRlc3QgdW5rbm93bix1bmtub3duLHVua25vd24gPSAiJGRsb3Blbl9zdXBwb3J0LCRkbG9wZW5fc2VsZiwkZGxvcGVuX3NlbGZfc3RhdGljIiBcCisJJiYgZnVuY193YXJuaW5nICInTFRfSU5JVChbZGxvcGVuXSknIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCiAKICAgICAgIGNhc2UgJGhvc3QgaW4KICAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKQEAgLTg3MTcsMTEgKzk5OTUsMTEgQEAKICAgICAgICotKi1kYXJ3aW4qKQogCSMgRG9uJ3QgYWxsb3cgbGF6eSBsaW5raW5nLCBpdCBicmVha3MgQysrIGdsb2JhbCBjb25zdHJ1Y3RvcnMKIAkjIEJ1dCBpcyBzdXBwb3NlZGx5IGZpeGVkIG9uIDEwLjQgb3IgbGF0ZXIgKHlheSEpLgotCWlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKwlpZiB0ZXN0IENYWCA9ICIkdGFnbmFtZSI7IHRoZW4KIAkgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0gaW4KIAkgICAgMTAuWzAxMjNdKQotCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR7d2x9LWJpbmRfYXRfbG9hZCIKLQkgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICR3bC1iaW5kX2F0X2xvYWQiCisJICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICR3bC1iaW5kX2F0X2xvYWQiCiAJICAgIDs7CiAJICBlc2FjCiAJZmkKQEAgLTg3NTcsNyArMTAwMzUsNyBAQAogCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKIAllc2FjCiAgICAgICBkb25lCi0gICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKKyAgICAgIGNvbXBpbGVfZGVwbGlicz0kbmV3X2xpYnMKIAogCiAgICAgICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkY29tcGlsZV9kZXBsaWJzIgpAQCAtODc4MSw3ICsxMDA1OSw3IEBACiAJaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCiAJICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciI7IHRoZW4KIAkgICAgaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCi0JICAgICAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKKwkgICAgICBoYXJkY29kZV9saWJkaXJzPSRsaWJkaXIKIAkgICAgZWxzZQogCSAgICAgICMgSnVzdCBhY2N1bXVsYXRlIHRoZSB1bmlxdWUgbGliZGlycy4KIAkgICAgICBjYXNlICRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBpbgpAQCAtODgwNCw3ICsxMDA4Miw3IEBACiAJZmkKIAljYXNlICRob3N0IGluCiAJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKLQkgIHRlc3RiaW5kaXI9YCR7RUNIT30gIiRsaWJkaXIiIHwgJHtTRUR9IC1lICdzKi9saWIkKi9iaW4qJ2AKKwkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkbGliZGlyIiB8ICRTRUQgLWUgJ3MqL2xpYiQqL2JpbionYAogCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCiAJICAqIjokbGliZGlyOiIqKSA7OwogCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7CkBAIC04ODIxLDEwICsxMDA5OSwxMCBAQAogICAgICAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KICAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgogCSB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KLQlsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgorCWxpYmRpcj0kaGFyZGNvZGVfbGliZGlycwogCWV2YWwgcnBhdGg9XCIgJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgogICAgICAgZmkKLSAgICAgIGNvbXBpbGVfcnBhdGg9IiRycGF0aCIKKyAgICAgIGNvbXBpbGVfcnBhdGg9JHJwYXRoCiAKICAgICAgIHJwYXRoPQogICAgICAgaGFyZGNvZGVfbGliZGlycz0KQEAgLTg4MzIsNyArMTAxMTAsNyBAQAogCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgogCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCiAJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgICAgaGFyZGNvZGVfbGliZGlycz0kbGliZGlyCiAJICAgIGVsc2UKIAkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCiAJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KQEAgLTg4NTcsNDUgKzEwMTM1LDQzIEBACiAgICAgICAjIFN1YnN0aXR1dGUgdGhlIGhhcmRjb2RlZCBsaWJkaXJzIGludG8gdGhlIHJwYXRoLgogICAgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiICYmCiAJIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgotCWxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJbGliZGlyPSRoYXJkY29kZV9saWJkaXJzCiAJZXZhbCBycGF0aD1cIiAkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCiAgICAgICBmaQotICAgICAgZmluYWxpemVfcnBhdGg9IiRycGF0aCIKKyAgICAgIGZpbmFsaXplX3JwYXRoPSRycGF0aAogCi0gICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJGxpYm9ianMiICYmIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyI7IHRoZW4KIAkjIFRyYW5zZm9ybSBhbGwgdGhlIGxpYnJhcnkgb2JqZWN0cyBpbnRvIHN0YW5kYXJkIG9iamVjdHMuCiAJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCiAJZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRTRUQgIiRsbzJvIiB8ICROTDJTUGAKICAgICAgIGZpCiAKLSAgICAgIGZ1bmNfZ2VuZXJhdGVfZGxzeW1zICIkb3V0cHV0bmFtZSIgIkBQUk9HUkFNQCIgIm5vIgorICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiBmYWxzZQogCiAgICAgICAjIHRlbXBsYXRlIHByZWxpbmtpbmcgc3RlcAogICAgICAgaWYgdGVzdCAtbiAiJHByZWxpbmtfY21kcyI7IHRoZW4KIAlmdW5jX2V4ZWN1dGVfY21kcyAiJHByZWxpbmtfY21kcyIgJ2V4aXQgJD8nCiAgICAgICBmaQogCi0gICAgICB3cmFwcGVyc19yZXF1aXJlZD15ZXMKKyAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPToKICAgICAgIGNhc2UgJGhvc3QgaW4KICAgICAgICpjZWdjYyogfCAqbWluZ3czMmNlKikKICAgICAgICAgIyBEaXNhYmxlIHdyYXBwZXJzIGZvciBjZWdjYyBhbmQgbWluZ3czMmNlIGhvc3RzLCB3ZSBhcmUgY3Jvc3MgY29tcGlsaW5nIGFueXdheS4KLSAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9ZmFsc2UKICAgICAgICAgOzsKICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCi0gICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgotICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCi0gICAgICAgIGZpCisgICAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9saWJ0b29sX2xpYnMiIHx8IHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNlCiAgICAgICAgIDs7CiAgICAgICAqKQotICAgICAgICBpZiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0gbm8gfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzOyB0aGVuCi0gICAgICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9bm8KKyAgICAgICAgaWYgdGVzdCBubyA9ICIkbmVlZF9yZWxpbmsiIHx8IHRlc3QgeWVzICE9ICIkYnVpbGRfbGlidG9vbF9saWJzIjsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPWZhbHNlCiAgICAgICAgIGZpCiAgICAgICAgIDs7CiAgICAgICBlc2FjCi0gICAgICBpZiB0ZXN0ICIkd3JhcHBlcnNfcmVxdWlyZWQiID0gbm87IHRoZW4KKyAgICAgICR3cmFwcGVyc19yZXF1aXJlZCB8fCB7CiAJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgogCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKLQlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwlsaW5rX2NvbW1hbmQ9JGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoCiAKIAkjIFdlIGhhdmUgbm8gdW5pbnN0YWxsZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMsIHNvIGZpbmFsaXplIHJpZ2h0IG5vdy4KIAlleGl0X3N0YXR1cz0wCkBAIC04OTA4LDEyICsxMDE4NCwxMiBAQAogCWZpCiAKIAkjIERlbGV0ZSB0aGUgZ2VuZXJhdGVkIGZpbGVzLgotCWlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSI7IHRoZW4KLQkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCisJaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJG9iamV4dCI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiRvYmpleHQiJwogCWZpCiAKIAlleGl0ICRleGl0X3N0YXR1cwotICAgICAgZmkKKyAgICAgIH0KIAogICAgICAgaWYgdGVzdCAtbiAiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aCI7IHRoZW4KIAljb21waWxlX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGNvbXBpbGVfc2hsaWJwYXRoJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkY29tcGlsZV9jb21tYW5kIgpAQCAtODk0Myw5ICsxMDIxOSw5IEBACiAJZmkKICAgICAgIGZpCiAKLSAgICAgIGlmIHRlc3QgIiRub19pbnN0YWxsIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJG5vX2luc3RhbGwiOyB0aGVuCiAJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0LgotCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgorCWxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKIAkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCiAJbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAogCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCkBAIC04OTYyLDI3ICsxMDIzOCwyOCBAQAogCWV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KLQkjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLQlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKLQlyZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorICAgICAgY2FzZSAkaGFyZGNvZGVfYWN0aW9uLCRmYXN0X2luc3RhbGwgaW4KKyAgICAgICAgcmVsaW5rLCopCisJICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwkgIGxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAogCi0JZnVuY193YXJuaW5nICJ0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIKLQlmdW5jX3dhcm5pbmcgIlxgJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgotICAgICAgZWxzZQotCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiICE9IG5vOyB0aGVuCi0JICBsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgotCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KLQkgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAotCSAgZWxzZQotCSAgICAjIGZhc3RfaW5zdGFsbCBpcyBzZXQgdG8gbmVlZGxlc3MKLQkgICAgcmVsaW5rX2NvbW1hbmQ9Ci0JICBmaQotCWVsc2UKLQkgIGxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgotCSAgcmVsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aCIKLQlmaQotICAgICAgZmkKKwkgIGZ1bmNfd2FybmluZyAidGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiCisJICBmdW5jX3dhcm5pbmcgIickb3V0cHV0JyB3aWxsIGJlIHJlbGlua2VkIGR1cmluZyBpbnN0YWxsYXRpb24iCisJICA7OworICAgICAgICAqLHllcykKKwkgIGxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAorCSAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiIHwgJFNFRCAncyVAT1VUUFVUQCVcJHByb2dkaXIvXCRmaWxlJWcnYAorICAgICAgICAgIDs7CisJKixubykKKwkgIGxpbmtfY29tbWFuZD0kY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgKKwkgIHJlbGlua19jb21tYW5kPSRmaW5hbGl6ZV92YXIkZmluYWxpemVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAorICAgICAgICAgIDs7CisJKixuZWVkbGVzcykKKwkgIGxpbmtfY29tbWFuZD0kZmluYWxpemVfdmFyJGNvbXBpbGVfY29tbWFuZCRmaW5hbGl6ZV9ycGF0aAorCSAgcmVsaW5rX2NvbW1hbmQ9CisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKIAogICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgogICAgICAgbGlua19jb21tYW5kPWAkRUNITyAiJGxpbmtfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKQEAgLTkwMzksOCArMTAzMTYsOCBAQAogCSAgICBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkb3V0cHV0IiAiIiAiLiIKIAkgICAgb3V0cHV0X25hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CiAJICAgIG91dHB1dF9wYXRoPSRmdW5jX2Rpcm5hbWVfcmVzdWx0Ci0JICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKLQkgICAgY3dyYXBwZXI9IiRvdXRwdXRfcGF0aC8kb3V0cHV0X25hbWUuZXhlIgorCSAgICBjd3JhcHBlcnNvdXJjZT0kb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYworCSAgICBjd3JhcHBlcj0kb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZQogCSAgICAkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgogCSAgICB0cmFwICIkUk0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKIApAQCAtOTA2MSw3ICsxMDMzOCw3IEBACiAJICAgIHRyYXAgIiRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CiAJICAgICRvcHRfZHJ5X3J1biB8fCB7CiAJICAgICAgIyBub3RlOiB0aGlzIHNjcmlwdCB3aWxsIG5vdCBiZSBleGVjdXRlZCwgc28gZG8gbm90IGNobW9kLgotCSAgICAgIGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCIgOyB0aGVuCisJICAgICAgaWYgdGVzdCAieCRidWlsZCIgPSAieCRob3N0IjsgdGhlbgogCQkkY3dyYXBwZXIgLS1sdC1kdW1wLXNjcmlwdCA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAogCSAgICAgIGVsc2UKIAkJZnVuY19lbWl0X3dyYXBwZXIgbm8gPiAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKQEAgLTkwODQsMjUgKzEwMzYxLDI3IEBACiAgICAgIyBTZWUgaWYgd2UgbmVlZCB0byBidWlsZCBhbiBvbGQtZmFzaGlvbmVkIGFyY2hpdmUuCiAgICAgZm9yIG9sZGxpYiBpbiAkb2xkbGliczsgZG8KIAotICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBjb252ZW5pZW5jZTsgdGhlbgotCW9sZG9ianM9IiRsaWJvYmpzX3NhdmUgJHN5bWZpbGVvYmoiCi0JYWRkbGlicz0iJGNvbnZlbmllbmNlIgotCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwotICAgICAgZWxzZQotCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbW9kdWxlOyB0aGVuCi0JICBvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgorICAgICAgY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluCisgICAgICAgIGNvbnZlbmllbmNlKQorCSAgb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSAkc3ltZmlsZW9iaiIKKwkgIGFkZGxpYnM9JGNvbnZlbmllbmNlCiAJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KLQllbHNlCisJICA7OworCW1vZHVsZSkKKwkgIG9sZG9ianM9JGxpYm9ianNfc2F2ZQorCSAgYWRkbGlicz0kb2xkX2NvbnZlbmllbmNlCisJICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgICAgICA7OworCSopCiAJICBvbGRvYmpzPSIkb2xkX2RlcGxpYnMgJG5vbl9waWNfb2JqZWN0cyIKLQkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IHllcyAmJiB0ZXN0IC1mICIkc3ltZmlsZW9iaiI7IHRoZW4KLQkgICAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRzeW1maWxlb2JqIgotCSAgZmkKLQlmaQotCWFkZGxpYnM9IiRvbGRfY29udmVuaWVuY2UiCi0gICAgICBmaQorCSAgJHByZWxvYWQgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiIFwKKwkgICAgJiYgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRzeW1maWxlb2JqIgorCSAgYWRkbGlicz0kb2xkX2NvbnZlbmllbmNlCisJICA7OworICAgICAgZXNhYwogCiAgICAgICBpZiB0ZXN0IC1uICIkYWRkbGlicyI7IHRoZW4KLQlnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCWdlbnRvcD0kb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eAogCWZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCiAKIAlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicwpAQCAtOTExMCwxMyArMTAzODksMTMgQEAKICAgICAgIGZpCiAKICAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgotICAgICAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiICYmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCB5ZXMgPSAiJGJ1aWxkX2xpYnRvb2xfbGlicyI7IHRoZW4KIAljbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCiAgICAgICBlbHNlCiAKIAkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKIAlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KLQkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBnZW50b3A9JG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgKIAkgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCiAKIAkgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRkbHByZWZpbGVzCkBAIC05MTM3LDcgKzEwNDE2LDcgQEAKIAkgIDoKIAllbHNlCiAJICBlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCi0JICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZ2VudG9wPSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14CiAJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgogCSAgZnVuY19ta2Rpcl9wICIkZ2VudG9wIgogCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCkBAIC05MTQ2LDcgKzEwNDI1LDcgQEAKIAkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcwogCSAgZG8KIAkgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKLQkgICAgb2JqYmFzZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICBvYmpiYXNlPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgogCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OwogCSAgICAqW1wgL10iJG9iamJhc2UgIiopCkBAIC05MjE1LDE4ICsxMDQ5NCwxOCBAQAogCSAgICBlbHNlCiAJICAgICAgIyB0aGUgYWJvdmUgY29tbWFuZCBzaG91bGQgYmUgdXNlZCBiZWZvcmUgaXQgZ2V0cyB0b28gbG9uZwogCSAgICAgIG9sZG9ianM9JG9iamxpc3QKLQkgICAgICBpZiB0ZXN0ICIkb2JqIiA9ICIkbGFzdF9vbGRvYmoiIDsgdGhlbgorCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiI7IHRoZW4KIAkJUkFOTElCPSRzYXZlX1JBTkxJQgogCSAgICAgIGZpCiAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+Ci0JICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kcyRvbGRfYXJjaGl2ZV9jbWRzXCIKIAkgICAgICBvYmpsaXN0PQogCSAgICAgIGxlbj0kbGVuMAogCSAgICBmaQogCSAgZG9uZQogCSAgUkFOTElCPSRzYXZlX1JBTkxJQgogCSAgb2xkb2Jqcz0kb2JqbGlzdAotCSAgaWYgdGVzdCAiWCRvbGRvYmpzIiA9ICJYIiA7IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRvbGRvYmpzIjsgdGhlbgogCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzXCIKIAkgIGVsc2UKIAkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIgpAQCAtOTI0Myw3ICsxMDUyMiw3IEBACiAgICAgY2FzZSAkb3V0cHV0IGluCiAgICAgKi5sYSkKICAgICAgIG9sZF9saWJyYXJ5PQotICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiBvbGRfbGlicmFyeT0iJGxpYm5hbWUuJGxpYmV4dCIKKyAgICAgIHRlc3QgeWVzID0gIiRidWlsZF9vbGRfbGlicyIgJiYgb2xkX2xpYnJhcnk9JGxpYm5hbWUuJGxpYmV4dAogICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgogCiAgICAgICAjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCkBAIC05MjU4LDMxICsxMDUzNywzMSBAQAogCWZpCiAgICAgICBkb25lCiAgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgotICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgorICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMIFwiJHByb2dwYXRoXCIgJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKICAgICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJHJlbGlua19jb21tYW5kIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXMgOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkaGFyZGNvZGVfYXV0b21hdGljIjsgdGhlbgogCXJlbGlua19jb21tYW5kPQogICAgICAgZmkKIAogICAgICAgIyBPbmx5IGNyZWF0ZSB0aGUgb3V0cHV0IGlmIG5vdCBhIGRyeSBydW4uCiAgICAgICAkb3B0X2RyeV9ydW4gfHwgewogCWZvciBpbnN0YWxsZWQgaW4gbm8geWVzOyBkbwotCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgeWVzID0gIiRpbnN0YWxsZWQiOyB0aGVuCiAJICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX2xpYmRpciI7IHRoZW4KIAkgICAgICBicmVhawogCSAgICBmaQotCSAgICBvdXRwdXQ9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lImkKKwkgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1pCiAJICAgICMgUmVwbGFjZSBhbGwgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMgd2l0aCB0aGUgaW5zdGFsbGVkIG9uZXMKIAkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQogCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCiAJICAgICAgY2FzZSAkZGVwbGliIGluCiAJICAgICAgKi5sYSkKIAkJZnVuY19iYXNlbmFtZSAiJGRlcGxpYiIKLQkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQluYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCQlmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIKLQkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdGAKKwkJZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHRgCiAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgogCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKIAkJOzsKIAkgICAgICAtTCopCkBAIC05Mjk4LDIzICsxMDU3NywyMyBAQAogCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RlcGVuZGVuY3lfbGlicyAiICRkZXBsaWIiIDs7CiAJICAgICAgZXNhYwogCSAgICBkb25lCi0JICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgZGVwZW5kZW5jeV9saWJzPSRuZXdkZXBlbmRlbmN5X2xpYnMKIAkgICAgbmV3ZGxmaWxlcz0KIAogCSAgICBmb3IgbGliIGluICRkbGZpbGVzOyBkbwogCSAgICAgIGNhc2UgJGxpYiBpbgogCSAgICAgICoubGEpCiAJICAgICAgICBmdW5jX2Jhc2VuYW1lICIkbGliIgotCQluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCi0JCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCisJCW5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJCWV2YWwgbGliZGlyPWAkU0VEIC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAogCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCi0JCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCSAgZnVuY19mYXRhbF9lcnJvciAiJyRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKIAkJZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICR7bHRfc3lzcm9vdDorPX0kbGliZGlyLyRuYW1lIgogCQk7OwogCSAgICAgICopIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIiA7OwogCSAgICAgIGVzYWMKIAkgICAgZG9uZQotCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgZGxmaWxlcz0kbmV3ZGxmaWxlcwogCSAgICBuZXdkbHByZWZpbGVzPQogCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbwogCSAgICAgIGNhc2UgJGxpYiBpbgpAQCAtOTMyNCwzNCArMTA2MDMsMzQgQEAKIAkJIyBkaWRuJ3QgYWxyZWFkeSBsaW5rIHRoZSBwcmVvcGVuZWQgb2JqZWN0cyBkaXJlY3RseSBpbnRvCiAJCSMgdGhlIGxpYnJhcnk6CiAJCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCi0JCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLQkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJZXZhbCBsaWJkaXI9YCRTRUQgLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCiAJCXRlc3QgLXogIiRsaWJkaXIiICYmIFwKLQkJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwkJICBmdW5jX2ZhdGFsX2Vycm9yICInJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgogCQlmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCiAJCTs7CiAJICAgICAgZXNhYwogCSAgICBkb25lCi0JICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgorCSAgICBkbHByZWZpbGVzPSRuZXdkbHByZWZpbGVzCiAJICBlbHNlCiAJICAgIG5ld2RsZmlsZXM9CiAJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCiAJICAgICAgY2FzZSAkbGliIGluCi0JCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSIkbGliIiA7OworCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0kbGliIDs7CiAJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKIAkgICAgICBlc2FjCiAJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRhYnMiCiAJICAgIGRvbmUKLQkgICAgZGxmaWxlcz0iJG5ld2RsZmlsZXMiCisJICAgIGRsZmlsZXM9JG5ld2RsZmlsZXMKIAkgICAgbmV3ZGxwcmVmaWxlcz0KIAkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KIAkgICAgICBjYXNlICRsaWIgaW4KLQkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzPSRsaWIgOzsKIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OwogCSAgICAgIGVzYWMKIAkgICAgICBmdW5jX2FwcGVuZCBuZXdkbHByZWZpbGVzICIgJGFicyIKIAkgICAgZG9uZQotCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgICAgZGxwcmVmaWxlcz0kbmV3ZGxwcmVmaWxlcwogCSAgZmkKIAkgICRSTSAkb3V0cHV0CiAJICAjIHBsYWNlIGRsbmFtZSBpbiBjb3JyZWN0IHBvc2l0aW9uIGZvciBjeWd3aW4KQEAgLTkzNjcsMTAgKzEwNjQ2LDkgQEAKIAkgIGNhc2UgJGhvc3QsJG91dHB1dCwkaW5zdGFsbGVkLCRtb2R1bGUsJGRsbmFtZSBpbgogCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqY2VnY2MqLCpsYWkseWVzLG5vLCouZGxsKQogCSAgICAgICMgSWYgYSAtYmluZGlyIGFyZ3VtZW50IHdhcyBzdXBwbGllZCwgcGxhY2UgdGhlIGRsbCB0aGVyZS4KLQkgICAgICBpZiB0ZXN0ICJ4JGJpbmRpciIgIT0geCA7Ci0JICAgICAgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRiaW5kaXIiOyB0aGVuCiAJCWZ1bmNfcmVsYXRpdmVfcGF0aCAiJGluc3RhbGxfbGliZGlyIiAiJGJpbmRpciIKLQkJdGRsbmFtZT0kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCRkbG5hbWUKKwkJdGRsbmFtZT0kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdC8kZGxuYW1lCiAJICAgICAgZWxzZQogCQkjIE90aGVyd2lzZSBmYWxsIGJhY2sgb24gaGV1cmlzdGljLgogCQl0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lCkBAIC05Mzc5LDcgKzEwNjU3LDcgQEAKIAkgIGVzYWMKIAkgICRFQ0hPID4gJG91dHB1dCAiXAogIyAkb3V0cHV0bmFtZSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKLSMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSkgJFZFUlNJT04KICMKICMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQogIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCkBAIC05MzkzLDcgKzEwNjcxLDcgQEAKICMgVGhlIG5hbWUgb2YgdGhlIHN0YXRpYyBhcmNoaXZlLgogb2xkX2xpYnJhcnk9JyRvbGRfbGlicmFyeScKIAotIyBMaW5rZXIgZmxhZ3MgdGhhdCBjYW4gbm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KKyMgTGlua2VyIGZsYWdzIHRoYXQgY2Fubm90IGdvIGluIGRlcGVuZGVuY3lfbGlicy4KIGluaGVyaXRlZF9saW5rZXJfZmxhZ3M9JyRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncycKIAogIyBMaWJyYXJpZXMgdGhhdCB0aGlzIG9uZSBkZXBlbmRzIHVwb24uCkBAIC05NDE5LDcgKzEwNjk3LDcgQEAKIAogIyBEaXJlY3RvcnkgdGhhdCB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGluOgogbGliZGlyPSckaW5zdGFsbF9saWJkaXInIgotCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0IG5vLHllcyA9ICIkaW5zdGFsbGVkLCRuZWVkX3JlbGluayI7IHRoZW4KIAkgICAgJEVDSE8gPj4gJG91dHB1dCAiXAogcmVsaW5rX2NvbW1hbmQ9XCIkcmVsaW5rX2NvbW1hbmRcIiIKIAkgIGZpCkBAIC05NDM0LDI3ICsxMDcxMiwyOSBAQAogICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwogfQogCi17IHRlc3QgIiRvcHRfbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IH0gJiYKLSAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KK2lmIHRlc3QgbGluayA9ICIkb3B0X21vZGUiIHx8IHRlc3QgcmVsaW5rID0gIiRvcHRfbW9kZSI7IHRoZW4KKyAgZnVuY19tb2RlX2xpbmsgJHsxKyIkQCJ9CitmaQogCiAKICMgZnVuY19tb2RlX3VuaW5zdGFsbCBhcmcuLi4KIGZ1bmNfbW9kZV91bmluc3RhbGwgKCkKIHsKLSAgICAkb3B0X2RlYnVnCi0gICAgUk09IiRub25vcHQiCisgICAgJGRlYnVnX2NtZAorCisgICAgUk09JG5vbm9wdAogICAgIGZpbGVzPQotICAgIHJtZm9yY2U9CisgICAgcm1mb3JjZT1mYWxzZQogICAgIGV4aXRfc3RhdHVzPTAKIAogICAgICMgVGhpcyB2YXJpYWJsZSB0ZWxscyB3cmFwcGVyIHNjcmlwdHMganVzdCB0byBzZXQgdmFyaWFibGVzIHJhdGhlcgogICAgICMgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgotICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0iJG1hZ2ljIgorICAgIGxpYnRvb2xfaW5zdGFsbF9tYWdpYz0kbWFnaWMKIAogICAgIGZvciBhcmcKICAgICBkbwogICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtZikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIjsgcm1mb3JjZT15ZXMgOzsKKyAgICAgIC1mKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciOyBybWZvcmNlPTogOzsKICAgICAgIC0qKSBmdW5jX2FwcGVuZCBSTSAiICRhcmciIDs7CiAgICAgICAqKSBmdW5jX2FwcGVuZCBmaWxlcyAiICRhcmciIDs7CiAgICAgICBlc2FjCkBAIC05NDY3LDE4ICsxMDc0NywxOCBAQAogCiAgICAgZm9yIGZpbGUgaW4gJGZpbGVzOyBkbwogICAgICAgZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCi0gICAgICBkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgotICAgICAgaWYgdGVzdCAiWCRkaXIiID0gWC47IHRoZW4KLQlvZGlyPSIkb2JqZGlyIgorICAgICAgZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CisgICAgICBpZiB0ZXN0IC4gPSAiJGRpciI7IHRoZW4KKwlvZGlyPSRvYmpkaXIKICAgICAgIGVsc2UKLQlvZGlyPSIkZGlyLyRvYmpkaXIiCisJb2Rpcj0kZGlyLyRvYmpkaXIKICAgICAgIGZpCiAgICAgICBmdW5jX2Jhc2VuYW1lICIkZmlsZSIKLSAgICAgIG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKLSAgICAgIHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgJiYgb2Rpcj0iJGRpciIKKyAgICAgIG5hbWU9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisgICAgICB0ZXN0IHVuaW5zdGFsbCA9ICIkb3B0X21vZGUiICYmIG9kaXI9JGRpcgogCiAgICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcwotICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB0aGVuCisgICAgICBpZiB0ZXN0IGNsZWFuID0gIiRvcHRfbW9kZSI7IHRoZW4KIAljYXNlICIgJHJtZGlycyAiIGluCiAJICAqIiAkb2RpciAiKikgOzsKIAkgICopIGZ1bmNfYXBwZW5kIHJtZGlycyAiICRvZGlyIiA7OwpAQCAtOTQ5MywxMSArMTA3NzMsMTEgQEAKICAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCiAJZXhpdF9zdGF0dXM9MQogCWNvbnRpbnVlCi0gICAgICBlbGlmIHRlc3QgIiRybWZvcmNlIiA9IHllczsgdGhlbgorICAgICAgZWxpZiAkcm1mb3JjZTsgdGhlbgogCWNvbnRpbnVlCiAgICAgICBmaQogCi0gICAgICBybWZpbGVzPSIkZmlsZSIKKyAgICAgIHJtZmlsZXM9JGZpbGUKIAogICAgICAgY2FzZSAkbmFtZSBpbgogICAgICAgKi5sYSkKQEAgLTk1MTEsNyArMTA3OTEsNyBAQAogCSAgZG9uZQogCSAgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG9sZF9saWJyYXJ5IgogCi0JICBjYXNlICIkb3B0X21vZGUiIGluCisJICBjYXNlICRvcHRfbW9kZSBpbgogCSAgY2xlYW4pCiAJICAgIGNhc2UgIiAkbGlicmFyeV9uYW1lcyAiIGluCiAJICAgICoiICRkbG5hbWUgIiopIDs7CkBAIC05NTIyLDEyICsxMDgwMiwxMiBAQAogCSAgdW5pbnN0YWxsKQogCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KIAkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KLQkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdHVuaW5zdGFsbF9jbWRzIiAnJHJtZm9yY2UgfHwgZXhpdF9zdGF0dXM9MScKIAkgICAgZmkKIAogCSAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCiAJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgotCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJworCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgJyRybWZvcmNlIHx8IGV4aXRfc3RhdHVzPTEnCiAJICAgIGZpCiAJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgogCSAgICA7OwpAQCAtOTU0MywyMSArMTA4MjMsMTkgQEAKIAkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKIAogCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCi0JICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYKLQkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgJiYgdGVzdCBub25lICE9ICIkcGljX29iamVjdCI7IHRoZW4KIAkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJHBpY19vYmplY3QiCiAJICBmaQogCiAJICAjIEFkZCBub24tUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCi0JICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiICYmCi0JICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYgdGVzdCBub25lICE9ICIkbm9uX3BpY19vYmplY3QiOyB0aGVuCiAJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZGlyLyRub25fcGljX29iamVjdCIKIAkgIGZpCiAJZmkKIAk7OwogCiAgICAgICAqKQotCWlmIHRlc3QgIiRvcHRfbW9kZSIgPSBjbGVhbiA7IHRoZW4KKwlpZiB0ZXN0IGNsZWFuID0gIiRvcHRfbW9kZSI7IHRoZW4KIAkgIG5vZXhlbmFtZT0kbmFtZQogCSAgY2FzZSAkZmlsZSBpbgogCSAgKi5leGUpCkBAIC05NTg0LDEyICsxMDg2MiwxMiBAQAogCiAJICAgICMgbm90ZSAkbmFtZSBzdGlsbCBjb250YWlucyAuZXhlIGlmIGl0IHdhcyBpbiAkZmlsZSBvcmlnaW5hbGx5CiAJICAgICMgYXMgZG9lcyB0aGUgdmVyc2lvbiBvZiAkZmlsZSB0aGF0IHdhcyBhZGRlZCBpbnRvICRybWZpbGVzCi0JICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbmFtZSAkb2Rpci8ke25hbWV9Uy4ke29iamV4dH0iCi0JICAgIGlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiRvYmpleHQiCisJICAgIGlmIHRlc3QgeWVzID0gIiRmYXN0X2luc3RhbGwiICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KIAkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJG5hbWUiCiAJICAgIGZpCi0JICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KLQkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJHtub2V4ZW5hbWV9LmMiCisJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIjsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci9sdC0kbm9leGVuYW1lLmMiCiAJICAgIGZpCiAJICBmaQogCWZpCkBAIC05NTk4LDcgKzEwODc2LDcgQEAKICAgICAgIGZ1bmNfc2hvd19ldmFsICIkUk0gJHJtZmlsZXMiICdleGl0X3N0YXR1cz0xJwogICAgIGRvbmUKIAotICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcworICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJG9iamRpcidzIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCiAgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbwogICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KIAlmdW5jX3Nob3dfZXZhbCAicm1kaXIgJGRpciA+L2Rldi9udWxsIDI+JjEiCkBAIC05NjA4LDE2ICsxMDg4NiwxNyBAQAogICAgIGV4aXQgJGV4aXRfc3RhdHVzCiB9CiAKLXsgdGVzdCAiJG9wdF9tb2RlIiA9IHVuaW5zdGFsbCB8fCB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW47IH0gJiYKLSAgICBmdW5jX21vZGVfdW5pbnN0YWxsICR7MSsiJEAifQoraWYgdGVzdCB1bmluc3RhbGwgPSAiJG9wdF9tb2RlIiB8fCB0ZXN0IGNsZWFuID0gIiRvcHRfbW9kZSI7IHRoZW4KKyAgZnVuY19tb2RlX3VuaW5zdGFsbCAkezErIiRAIn0KK2ZpCiAKIHRlc3QgLXogIiRvcHRfbW9kZSIgJiYgewotICBoZWxwPSIkZ2VuZXJpY19oZWxwIgorICBoZWxwPSRnZW5lcmljX2hlbHAKICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKIH0KIAogdGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCi0gIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCisgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSAnJG9wdF9tb2RlJyIKIAogaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgogICBldmFsIGV4ZWMgIiRleGVjX2NtZCIKQEAgLTk2MjgsNyArMTA5MDcsNyBAQAogCiAKICMgVGhlIFRBR3MgYmVsb3cgYXJlIGRlZmluZWQgc3VjaCB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0dWF0aW9uCi0jIGluIHdoaWNoIHdlIGRpc2FibGUgYm90aCBraW5kcyBvZiBsaWJyYXJpZXMuICBHaXZlbiBjb25mbGljdGluZworIyB3aGVyZSB3ZSBkaXNhYmxlIGJvdGgga2luZHMgb2YgbGlicmFyaWVzLiAgR2l2ZW4gY29uZmxpY3RpbmcKICMgY2hvaWNlcywgd2UgZ28gZm9yIGEgc3RhdGljIGxpYnJhcnksIHRoYXQgaXMgdGhlIG1vc3QgcG9ydGFibGUsCiAjIHNpbmNlIHdlIGNhbid0IHRlbGwgd2hldGhlciBzaGFyZWQgbGlicmFyaWVzIHdlcmUgZGlzYWJsZWQgYmVjYXVzZQogIyB0aGUgdXNlciBhc2tlZCBmb3IgdGhhdCBvciBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHN1cHBvcnQKQEAgLTk2NTEsNSArMTA5MzAsMyBAQAogIyBtb2RlOnNoZWxsLXNjcmlwdAogIyBzaC1pbmRlbnRhdGlvbjoyCiAjIEVuZDoKLSMgdmk6c3c9MgotCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2F4X2djY19hcmNoZmxhZy5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvYXhfZ2NjX2FyY2hmbGFnLm00CmluZGV4IDNmZDA1MGUuLmFhYjI2NjEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvYXhfZ2NjX2FyY2hmbGFnLm00CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvYXhfZ2NjX2FyY2hmbGFnLm00CkBAIC0xNTUsNyArMTU1LDcgQEAKICAgc3BhcmMqKQogICAgICBBQ19QQVRIX1BST0coW1BSVERJQUddLCBbcHJ0ZGlhZ10sIFtwcnRkaWFnXSwgWyRQQVRIOi91c3IvcGxhdGZvcm0vYHVuYW1lIC1pYC9zYmluLzovdXNyL3BsYXRmb3JtL2B1bmFtZSAtbWAvc2Jpbi9dKQogICAgICBjcHV0eXBlPWAoKChncmVwIGNwdSAvcHJvYy9jcHVpbmZvIHwgY3V0IC1kOiAtZjIpIDsgKCRQUlRESUFHIC12IHxncmVwIC1pIHNwYXJjKSA7IGdyZXAgLWkgY3B1IC92YXIvcnVuL2RtZXNnLmJvb3QgKSB8IGhlYWQgLW4gMSkgMj4gL2Rldi9udWxsYAotICAgICBjcHV0eXBlPWBlY2hvICIkY3B1dHlwZSIgfCB0ciAtZCAnIC0nIHx0ciAkYXNfY3JfTEVUVEVSUyAkYXNfY3JfbGV0dGVyc2AKKyAgICAgY3B1dHlwZT1gZWNobyAiJGNwdXR5cGUiIHwgdHIgLWQgJyAtJyB8IHNlZCAncy9TUEFSQ0lJaS9TUEFSQ0lJLycgfCB0ciAkYXNfY3JfTEVUVEVSUyAkYXNfY3JfbGV0dGVyc2AKICAgICAgY2FzZSAkY3B1dHlwZSBpbgogICAgICAgICAgKnVsdHJhc3BhcmNpdiopIGF4X2djY19hcmNoPSJ1bHRyYXNwYXJjNCB1bHRyYXNwYXJjMyB1bHRyYXNwYXJjIHY5IiA7OwogICAgICAgICAgKnVsdHJhc3BhcmNpaWkqKSBheF9nY2NfYXJjaD0idWx0cmFzcGFyYzMgdWx0cmFzcGFyYyB2OSIgOzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbGlidG9vbC5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbGlidG9vbC5tNAppbmRleCAzMzE4ZjI3Li40YmM2YjIyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2xpYnRvb2wubTQKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9saWJ0b29sLm00CkBAIC0xLDggKzEsNiBAQAogIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KICMKLSMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCi0jICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEZyZWUgU29mdHdhcmUKLSMgICAgICAgICAgICAgICAgIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwMSwgMjAwMy0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKQEAgLTM5LDcgKzM3LDcgQEAKICMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCiBdKQogCi0jIHNlcmlhbCA1NyBMVF9JTklUCisjIHNlcmlhbCA1OCBMVF9JTklUCiAKIAogIyBMVF9QUkVSRVEoVkVSU0lPTikKQEAgLTkxLDcgKzg5LDcgQEAKIF9MVF9TRVRfT1BUSU9OUyhbJDBdLCBbJDFdKQogCiAjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCi1MSUJUT09MX0RFUFM9IiRsdG1haW4iCitMSUJUT09MX0RFUFM9JGx0bWFpbgogCiAjIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgogTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCkBAIC0xMzAsNyArMTI4LDcgQEAKICMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKLSMgc2Vuc2libHkgYWZ0ZXIgYG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCisjIHNlbnNpYmx5IGFmdGVyICdtNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSknLgogbTRfZGVmdW4oW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdLAogWzogJHtDUD0iY3AgLWYifQogOiAke01WPSJtdiAtZiJ9CkBAIC0xNzksMTMgKzE3NywxMyBAQAogbTRfcmVxdWlyZShbX0xUX1dJVEhfU1lTUk9PVF0pZG5sCiAKIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFsKLSMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB0aGF0IGFsbG93IG91cgogIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KLWlmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgoraWYgdGVzdCAtbiAiXCR7WlNIX1ZFUlNJT04rc2V0fSI7IHRoZW4KICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCiBmaQogXSkKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCiAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZmkKIApAQCAtMTk4LDcgKzE5Niw3IEBACiAgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQogICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKICAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgotICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgaWYgdGVzdCBzZXQgIT0gIiR7Q09MTEVDVF9OQU1FUytzZXR9IjsgdGhlbgogICAgIENPTExFQ1RfTkFNRVM9CiAgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKICAgZmkKQEAgLTIwOSwxNCArMjA3LDE0IEBACiBvZmlsZT1saWJ0b29sCiBjYW5fYnVpbGRfc2hhcmVkPXllcwogCi0jIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhICcuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAogIyB3aGljaCBuZWVkcyAnLmxpYicpLgogbGliZXh0PWEKIAotd2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAogCi1vbGRfQ0M9IiRDQyIKLW9sZF9DRkxBR1M9IiRDRkxBR1MiCitvbGRfQ0M9JENDCitvbGRfQ0ZMQUdTPSRDRkxBR1MKIAogIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKIHRlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKQEAgLTI2OSwxNCArMjY3LDE0IEBACiAKICMgX0xUX1BST0dfTFRNQUlOCiAjIC0tLS0tLS0tLS0tLS0tLQotIyBOb3RlIHRoYXQgdGhpcyBjb2RlIGlzIGNhbGxlZCBib3RoIGZyb20gYGNvbmZpZ3VyZScsIGFuZCBgY29uZmlnLnN0YXR1cycKKyMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tICdjb25maWd1cmUnLCBhbmQgJ2NvbmZpZy5zdGF0dXMnCiAjIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCi0jIGBjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKKyMgJ2NvbmZpZy5zdGF0dXMnIGhhcyBubyB2YWx1ZSBmb3IgYWNfYXV4X2RpciB1bmxlc3Mgd2UgYXJlIHVzaW5nIEF1dG9tYWtlLAogIyBzbyB3ZSBwYXNzIGEgY29weSBhbG9uZyB0byBtYWtlIHN1cmUgaXQgaGFzIGEgc2Vuc2libGUgdmFsdWUgYW55d2F5LgogbTRfZGVmdW4oW19MVF9QUk9HX0xUTUFJTl0sCiBbbTRfaWZkZWYoW0FDX1JFUVVJUkVfQVVYX0ZJTEVdLCBbQUNfUkVRVUlSRV9BVVhfRklMRShbbHRtYWluLnNoXSldKWRubAogX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW2FjX2F1eF9kaXI9JyRhY19hdXhfZGlyJ10pCi1sdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK2x0bWFpbj0kYWNfYXV4X2Rpci9sdG1haW4uc2gKIF0pIyBfTFRfUFJPR19MVE1BSU4KIAogCkBAIC0yODYsNyArMjg0LDcgQEAKIAogIyBTbyB0aGF0IHdlIGNhbiByZWNyZWF0ZSBhIGZ1bGwgbGlidG9vbCBzY3JpcHQgaW5jbHVkaW5nIGFkZGl0aW9uYWwKICMgdGFncywgd2UgYWNjdW11bGF0ZSB0aGUgY2h1bmtzIG9mIGNvZGUgdG8gc2VuZCB0byBBQ19DT05GSUdfQ09NTUFORFMKLSMgaW4gbWFjcm9zIGFuZCB0aGVuIG1ha2UgYSBzaW5nbGUgY2FsbCBhdCB0aGUgZW5kIHVzaW5nIHRoZSBgbGlidG9vbCcKKyMgaW4gbWFjcm9zIGFuZCB0aGVuIG1ha2UgYSBzaW5nbGUgY2FsbCBhdCB0aGUgZW5kIHVzaW5nIHRoZSAnbGlidG9vbCcKICMgbGFiZWwuCiAKIApAQCAtNDIxLDggKzQxOSw4IEBACiAKICMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byBgY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKLSMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQorIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byAnY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluICdjb25maWd1cmUnLiAgVkFSTkFNRQogIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCiBtNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAogWyQxPSdgJEVDSE8gIiRdWyQxIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCddKQpAQCAtNDQ2LDcgKzQ0NCw3IEBACiAjIE91dHB1dCBjb21tZW50IGFuZCBsaXN0IG9mIHRhZ3Mgc3VwcG9ydGVkIGJ5IHRoZSBzY3JpcHQKIG00X2RlZnVuKFtfTFRfTElCVE9PTF9UQUdTXSwKIFtfTFRfRk9STUFUX0NPTU1FTlQoW1RoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdF0pZG5sCi1hdmFpbGFibGVfdGFncz0iX0xUX1RBR1MiZG5sCithdmFpbGFibGVfdGFncz0nX0xUX1RBR1MnZG5sCiBdKQogCiAKQEAgLTQ3NCw3ICs0NzIsNyBAQAogIyBfTFRfTElCVE9PTF9DT05GSUdfVkFSUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBQcm9kdWNlIGNvbW1lbnRlZCBkZWNsYXJhdGlvbnMgb2Ygbm9uLXRhZ2dlZCBsaWJ0b29sIGNvbmZpZyB2YXJpYWJsZXMKLSMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbiB0aGUgTElCVE9PTCBDT05GSUcgc2VjdGlvbiBvZiB0aGUgYGxpYnRvb2wnCisjIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlICdsaWJ0b29sJwogIyBzY3JpcHQuICBUYWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIChldmVuIGZvciB0aGUgTElCVE9PTCBDT05GSUcKICMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgogbTRfZGVmdW4oW19MVF9MSUJUT09MX0NPTkZJR19WQVJTXSwKQEAgLTUwMCw4ICs0OTgsOCBAQAogIyBTZW5kIGFjY3VtdWxhdGVkIG91dHB1dCB0byAkQ09ORklHX1NUQVRVUy4gIFRoYW5rcyB0byB0aGUgbGlzdHMgb2YKICMgdmFyaWFibGVzIGZvciBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZSBlc2NhcGluZyB3ZSBzYXZlZCBmcm9tIGNhbGxzCiAjIHRvIF9MVF9ERUNMLCB3ZSBjYW4gcHV0IHF1b3RlIGVzY2FwZWQgdmFyaWFibGVzIGRlY2xhcmF0aW9ucwotIyBpbnRvIGBjb25maWcuc3RhdHVzJywgYW5kIHRoZW4gdGhlIHNoZWxsIGNvZGUgdG8gcXVvdGUgZXNjYXBlIHRoZW0gaW4KLSMgZm9yIGxvb3BzIGluIGBjb25maWcuc3RhdHVzJy4gIEZpbmFsbHksIGFueSBhZGRpdGlvbmFsIGNvZGUgYWNjdW11bGF0ZWQKKyMgaW50byAnY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCisjIGZvciBsb29wcyBpbiAnY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCiAjIGZyb20gY2FsbHMgdG8gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQgaXMgZXhwYW5kZWQuCiBtNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCiBbQUNfUFJPVklERV9JRkVMU0UoW0xUX09VVFBVVF0sCkBAIC01NDcsNyArNTQ1LDcgQEAKIF1dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KICAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KICAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCi0gICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIgIyMgZXhjbHVkZSBmcm9tIHNjX3Byb2hpYml0X25lc3RlZF9xdW90ZXMKICAgICAgIDs7CiAgICAgKikKICAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgpAQCAtNTYwLDcgKzU1OCw3IEBACiBdXSwgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMpOyBkbwogICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgogICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKLSAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIiAjIyBleGNsdWRlIGZyb20gc2NfcHJvaGliaXRfbmVzdGVkX3F1b3RlcwogICAgICAgOzsKICAgICAqKQogICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCkBAIC01NzYsNyArNTc0LDcgQEAKICMgR2VuZXJhdGUgYSBjaGlsZCBzY3JpcHQgRklMRSB3aXRoIGFsbCBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnkgdG8KICMgcmV1c2UgdGhlIGVudmlyb25tZW50IGxlYXJuZWQgYnkgdGhlIHBhcmVudCBzY3JpcHQsIGFuZCBtYWtlIHRoZQogIyBmaWxlIGV4ZWN1dGFibGUuICBJZiBDT01NRU5UIGlzIHN1cHBsaWVkLCBpdCBpcyBpbnNlcnRlZCBhZnRlciB0aGUKLSMgYCMhJyBzZXF1ZW5jZSBidXQgYmVmb3JlIGluaXRpYWxpemF0aW9uIHRleHQgYmVnaW5zLiAgQWZ0ZXIgdGhpcworIyAnIyEnIHNlcXVlbmNlIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gdGV4dCBiZWdpbnMuICBBZnRlciB0aGlzCiAjIG1hY3JvLCBhZGRpdGlvbmFsIHRleHQgY2FuIGJlIGFwcGVuZGVkIHRvIEZJTEUgdG8gZm9ybSB0aGUgYm9keSBvZgogIyB0aGUgY2hpbGQgc2NyaXB0LiAgVGhlIG1hY3JvIGVuZHMgd2l0aCBub24temVybyBzdGF0dXMgaWYgdGhlCiAjIGZpbGUgY291bGQgbm90IGJlIGZ1bGx5IHdyaXR0ZW4gKHN1Y2ggYXMgaWYgdGhlIGRpc2sgaXMgZnVsbCkuCkBAIC01OTgsNyArNTk2LDcgQEAKIF9BU19QUkVQQVJFCiBleGVjIEFTX01FU1NBR0VfRkQ+JjEKIF9BU0VPRgotdGVzdCAkbHRfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJDFbXWRubAordGVzdCAwID0gIiRsdF93cml0ZV9mYWlsIiAmJiBjaG1vZCAreCAkMVtdZG5sCiBtNF9wb3BkZWYoW0FTX01FU1NBR0VfTE9HX0ZEXSldKV0pIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVAogCiAjIExUX09VVFBVVApAQCAtNjIxLDcgKzYxOSw3IEBACiB9ID4mQVNfTUVTU0FHRV9MT0dfRkQKIAogbHRfY2xfaGVscD0iXAotXGAkYXNfbWUnIGNyZWF0ZXMgYSBsb2NhbCBsaWJ0b29sIHN0dWIgZnJvbSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLAorJyRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCiBmb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKIGdlbmVyYXRlZC4KIApAQCAtNjQzLDcgKzY0MSw3IEBACiBUaGlzIGNvbmZpZy5sdCBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuIgogCi13aGlsZSB0ZXN0ICRbI10gIT0gMAord2hpbGUgdGVzdCAwICE9ICRbI10KIGRvCiAgIGNhc2UgJFsxXSBpbgogICAgIC0tdmVyc2lvbiB8IC0tdiogfCAtViApCkBAIC02NTYsMTAgKzY1NCwxMCBAQAogICAgICAgbHRfY2xfc2lsZW50PTogOzsKIAogICAgIC0qKSBBQ19NU0dfRVJST1IoW3VucmVjb2duaXplZCBvcHRpb246ICRbMV0KLVRyeSBcYCRbMF0gLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5dKSA7OworVHJ5ICckWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKIAogICAgICopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIGFyZ3VtZW50OiAkWzFdCi1UcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKK1RyeSAnJFswXSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLl0pIDs7CiAgIGVzYWMKICAgc2hpZnQKIGRvbmUKQEAgLTY4NSw3ICs2ODMsNyBAQAogIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCiAjIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCiBsdF9jbF9zdWNjZXNzPToKLXRlc3QgIiRzaWxlbnQiID0geWVzICYmCit0ZXN0IHllcyA9ICIkc2lsZW50IiAmJgogICBsdF9jb25maWdfbHRfYXJncz0iJGx0X2NvbmZpZ19sdF9hcmdzIC0tcXVpZXQiCiBleGVjIEFTX01FU1NBR0VfTE9HX0ZEPi9kZXYvbnVsbAogJFNIRUxMICIkQ09ORklHX0xUIiAkbHRfY29uZmlnX2x0X2FyZ3MgfHwgbHRfY2xfc3VjY2Vzcz1mYWxzZQpAQCAtNzA1LDEzICs3MDMsMTMgQEAKIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbCiAgIG00X2RlZmluZShbX0xUX1RBR10sIG00X2lmKFskMV0sIFtdLCBbQ10sIFskMV0pKWRubAogICBtNF9pZihfTFRfVEFHLCBbQ10sIFsKLSAgICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyCisgICAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHRoYXQgYWxsb3cgb3VyCiAgICAgIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gICAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iOyB0aGVuCiAgICAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogICAgIGZpCiAKLSAgICBjZmdmaWxlPSIke29maWxlfVQiCisgICAgY2ZnZmlsZT0ke29maWxlfVQKICAgICB0cmFwICIkUk0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQogICAgICRSTSAiJGNmZ2ZpbGUiCiAKQEAgLTcxOSw3ICs3MTcsNyBAQAogIyEgJFNIRUxMCiAKICMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkYXNfbWUgKCRQQUNLQUdFKSAkVkVSU0lPTgogIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgogIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCiAjCkBAIC03MzksNyArNzM3LDcgQEAKICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQogIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCiAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi1pZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KK2lmIHRlc3Qgc2V0ICE9ICIke0NPTExFQ1RfTkFNRVMrc2V0fSI7IHRoZW4KICAgQ09MTEVDVF9OQU1FUz0KICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKIGZpCkBAIC03NTYsOCArNzU0LDYgQEAKICAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAogICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQogCi0gIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKLQogICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAogICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCiAgIGNobW9kICt4ICIkb2ZpbGUiCkBAIC03NzUsNyArNzcxLDYgQEAKIFttNF9pZihbJDFdLCBbXSwgWwogICAgIFBBQ0tBR0U9JyRQQUNLQUdFJwogICAgIFZFUlNJT049JyRWRVJTSU9OJwotICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKICAgICBSTT0nJFJNJwogICAgIG9maWxlPSckb2ZpbGUnXSwgW10pCiBdKWRubCAvX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTCkBAIC05NzQsNyArOTY5LDcgQEAKIAogICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKICAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCi0gICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkTFRfTVVMVElfTU9EVUxFIjsgdGhlbgogCSMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQogCSMgYnkgZWl0aGVyIHNldHRpbmcgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIExUX01VTFRJX01PRFVMRQogCSMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKQEAgLTk5Miw3ICs5ODcsNyBAQAogCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECiAJIyBPdGhlcndpc2UsIGlmIHRoZSBvdXRwdXQgd2FzIGNyZWF0ZWQgd2l0aCBhIDAgZXhpdCBjb2RlIGZyb20KIAkjIHRoZSBjb21waWxlciwgaXQgd29ya2VkLgotCWVsaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwOyB0aGVuCisJZWxpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliICYmIHRlc3QgMCA9ICIkX2x0X3Jlc3VsdCI7IHRoZW4KIAkgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCiAJZWxzZQogCSAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECkBAIC0xMDEwLDcgKzEwMDUsNyBAQAogICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAogCVtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzXSwKIAlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vXSkKLQlMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCUxERkxBR1M9JHNhdmVfTERGTEFHUwogICAgIF0pCiAKICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIC1mb3JjZV9sb2FkIGxpbmtlciBmbGFnXSxbbHRfY3ZfbGRfZm9yY2VfbG9hZF0sCkBAIC0xMDMyLDcgKzEwMjcsNyBAQAogICAgICAgX2x0X3Jlc3VsdD0kPwogICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnIgJiYgJEdSRVAgZm9yY2VfbG9hZCBjb25mdGVzdC5lcnI7IHRoZW4KIAljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICRfbHRfcmVzdWx0IC1lcSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICAgIGVsaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0IDAgPSAiJF9sdF9yZXN1bHQiICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0ID4vZGV2L251bGwgMj4mMTsgdGhlbgogCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCiAgICAgICBlbHNlCiAJY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECkBAIC0xMDQyLDMyICsxMDM3LDMyIEBACiAgICAgXSkKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKICAgICBkYXJ3aW4xLiopCi0gICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLWZsYXRfbmFtZXNwYWNlICR3bC11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKICAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KICAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKICAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CiAgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KIAkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCi0JICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CisJICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHdsLXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OwogCTEwLltbMDEyXV0qKQotCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR3bC1mbGF0X25hbWVzcGFjZSAkd2wtdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CiAJMTAuKikKLQkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPSckd2wtdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7CiAgICAgICBlc2FjCiAgICAgOzsKICAgZXNhYwotICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiOyB0aGVuCiAgICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJwogICAgIGZpCi0gICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJworICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiOyB0aGVuCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHdsLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8kbGlibmFtZS1zeW1ib2xzLmV4cHN5bScKICAgICBlbHNlCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9J34kTk1FRElUIC1zICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLXN5bWJvbHMuZXhwc3ltICRsaWInCiAgICAgZmkKLSAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IiAmJiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAibm8iOyB0aGVuCisgICAgaWYgdGVzdCA6ICE9ICIkRFNZTVVUSUwiICYmIHRlc3Qgbm8gPSAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiOyB0aGVuCiAgICAgICBfbHRfZHN5bXV0aWw9J34kRFNZTVVUSUwgJGxpYiB8fCA6JwogICAgIGVsc2UKICAgICAgIF9sdF9kc3ltdXRpbD0KQEAgLTEwODcsMjkgKzEwODIsMjkgQEAKICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwogICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcwogICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgotICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR7d2x9LWZvcmNlX2xvYWQsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAnCisgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9sZF9mb3JjZV9sb2FkIjsgdGhlbgorICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlICR3bC1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJwogICAgIG00X2Nhc2UoWyQxXSwgW0Y3N10sIFtfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllc10sCiAgICAgICAgICAgICAgICAgICBbRkNdLCAgW19MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzXSkKICAgZWxzZQogICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJwogICBmaQogICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0kX2x0X2Rhcl9hbGxvd191bmRlZmluZWQKICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgIGlmb3J0KnxuYWdmb3IqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CiAgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CiAgIGVzYWMKLSAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkX2x0X2Rhcl9jYW5fc2hhcmVkIjsgdGhlbgogICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKLSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgotICAgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgotICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2QkX2x0X2RzeW11dGlsIgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJF9sdF9kc3ltdXRpbCIKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzfF58X3wnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJGxpYm5hbWUtc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCRfbHRfZGFyX2V4cG9ydF9zeW1zJF9sdF9kc3ltdXRpbCIKKyAgICBfTFRfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSJzZWQgLWUgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MkX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCiAgICAgbTRfaWYoWyQxXSwgW0NYWF0sCi1bICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCR7bGlifS1tYXN0ZXIubyBcJGxpYm9ianN+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwke2xpYn0tbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJHtfbHRfZHN5bXV0aWx9IgotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCitbICAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIjsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwkbGliLW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWItbWFzdGVyLm8gXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nJF9sdF9kc3ltdXRpbCIKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3N8XnxffCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wkbGlibmFtZS1zeW1ib2xzLmV4cHN5bX5cJENDIC1yIC1rZWVwX3ByaXZhdGVfZXh0ZXJucyAtbm9zdGRsaWIgLW8gXCRsaWItbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYi1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmckX2x0X2Rhcl9leHBvcnRfc3ltcyRfbHRfZHN5bXV0aWwiCiAgICAgZmkKIF0sW10pCiAgIGVsc2UKQEAgLTExMjksNyArMTEyNCw3IEBACiAjIEFsbG93IHRvIG92ZXJyaWRlIHRoZW0gZm9yIGFsbCB0YWdzIHRocm91Z2ggbHRfY3ZfYWl4X2xpYnBhdGguCiBtNF9kZWZ1bihbX0xUX1NZU19NT0RVTEVfUEFUSF9BSVhdLAogW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCi1pZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iOyB0aGVuCiAgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAogZWxzZQogICBBQ19DQUNIRV9WQUwoW19MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pXSwKQEAgLTExNDcsNyArMTE0Miw3IEBACiAgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCiAgIGZpXSxbXSkKICAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pIjsgdGhlbgotICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPSIvdXNyL2xpYjovbGliIgorICAgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPS91c3IvbGliOi9saWIKICAgZmkKICAgXSkKICAgYWl4X2xpYnBhdGg9JF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pCkBAIC0xMTY3LDggKzExNjIsOCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBGaW5kIGhvdyB3ZSBjYW4gZmFrZSBhbiBlY2hvIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoLgogIyBJbiBwYXJ0aWN1bGFyLCB3aXRoIEF1dG9jb25mIDIuNjAgb3IgbGF0ZXIgd2UgYWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQKLSMgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoIHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCi0jIHByaW50ZiAod2hpY2ggd2UgY2FuIHVzZSBhcyBhbiBlY2hvIGNvbW1hbmQpLgorIyBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgdGhhdCB3aWxsIGZpbmQgYSBzaGVsbCB3aXRoIGEgYnVpbHRpbgorIyBwcmludGYgKHRoYXQgd2UgY2FuIHVzZSBhcyBhbiBlY2hvIGNvbW1hbmQpLgogbTRfZGVmdW4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwKIFtFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJwogRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCkBAIC0xMTk2LDEwICsxMTkxLDEwIEBACiAjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCiBmdW5jX2VjaG9fYWxsICgpCiB7Ci0gICAgJEVDSE8gIiQqIiAKKyAgICAkRUNITyAiJCoiCiB9CiAKLWNhc2UgIiRFQ0hPIiBpbgorY2FzZSAkRUNITyBpbgogICBwcmludGYqKSBBQ19NU0dfUkVTVUxUKFtwcmludGZdKSA7OwogICBwcmludCopIEFDX01TR19SRVNVTFQoW3ByaW50IC1yXSkgOzsKICAgKikgQUNfTVNHX1JFU1VMVChbY2F0XSkgOzsKQEAgLTEyMjUsMTYgKzEyMjAsMTcgQEAKIEFDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKIFtBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKIEFDX0FSR19XSVRIKFtzeXNyb290XSwKLVsgIC0td2l0aC1zeXNyb290Wz1ESVJdIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCi0gICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAorW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtc3lzcm9vdEA8OkA9RElSQDo+QF0sCisgIFtTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUiAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdAorICAgaWYgbm90IHNwZWNpZmllZCkuXSldLAogW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQogCiBkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCiBkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KIGx0X3N5c3Jvb3Q9Ci1jYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorY2FzZSAkd2l0aF9zeXNyb290IGluICMoCiAgeWVzKQotICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCiAgICBmaQogICAgOzsgIygKQEAgLTEyNDQsMTQgKzEyNDAsMTQgQEAKICBub3wnJykKICAgIDs7ICMoCiAgKikKLSAgIEFDX01TR19SRVNVTFQoWyR7d2l0aF9zeXNyb290fV0pCisgICBBQ19NU0dfUkVTVUxUKFskd2l0aF9zeXNyb290XSkKICAgIEFDX01TR19FUlJPUihbVGhlIHN5c3Jvb3QgbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoLl0pCiAgICA7OwogZXNhYwogCiAgQUNfTVNHX1JFU1VMVChbJHtsdF9zeXNyb290Oi1ub31dKQogX0xUX0RFQ0woW10sIFtsdF9zeXNyb290XSwgWzBdLCBbVGhlIHJvb3Qgd2hlcmUgdG8gc2VhcmNoIGZvciBdZG5sCi1bZGVwZW5kZW50IGxpYnJhcmllcywgYW5kIGluIHdoaWNoIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC5dKV0pCitbZGVwZW5kZW50IGxpYnJhcmllcywgYW5kIHdoZXJlIG91ciBsaWJyYXJpZXMgc2hvdWxkIGJlIGluc3RhbGxlZC5dKV0pCiAKICMgX0xUX0VOQUJMRV9MT0NLCiAjIC0tLS0tLS0tLS0tLS0tLQpAQCAtMTI1OSwzMSArMTI1NSwzMyBAQAogW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCiAgIFtBU19IRUxQX1NUUklORyhbLS1kaXNhYmxlLWxpYnRvb2wtbG9ja10sCiAgICAgW2F2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcyldKV0pCi10ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcwordGVzdCBubyA9ICIkZW5hYmxlX2xpYnRvb2xfbG9jayIgfHwgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKIAogIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCiAjIGxpYnRvb2wgc3VwcG9ydC4KIGNhc2UgJGhvc3QgaW4KIGlhNjQtKi1ocHV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICAjIEZpbmQgb3V0IHdoYXQgQUJJIGlzIGJlaW5nIHByb2R1Y2VkIGJ5IGFjX2NvbXBpbGUsIGFuZCBzZXQgbW9kZQorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCiAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgogICAgICAgKkVMRi0zMiopCi0JSFBVWF9JQTY0X01PREU9IjMyIgorCUhQVVhfSUE2NF9NT0RFPTMyCiAJOzsKICAgICAgICpFTEYtNjQqKQotCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwlIUFVYX0lBNjRfTU9ERT02NAogCTs7CiAgICAgZXNhYwogICBmaQogICBybSAtcmYgY29uZnRlc3QqCiAgIDs7CiAqLSotaXJpeDYqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgogICBlY2hvICdbI11saW5lICckTElORU5PJyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRsdF9jdl9wcm9nX2dudV9sZCI7IHRoZW4KICAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KIAkqMzItYml0KikKIAkgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCkBAIC0xMzEyLDkgKzEzMTAsNDYgQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KgogICA7OwogCi14ODZfNjQtKmtmcmVlYnNkKi1nbnV8eDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKK21pcHM2NCotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuCisgIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBlbXVsPWVsZgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICozMi1iaXQqKQorCWVtdWw9IiR7ZW11bH0zMiIKKwk7OworICAgICAgKjY0LWJpdCopCisJZW11bD0iJHtlbXVsfTY0IgorCTs7CisgICAgZXNhYworICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpNU0IqKQorCWVtdWw9IiR7ZW11bH1idHNtaXAiCisJOzsKKyAgICAgICpMU0IqKQorCWVtdWw9IiR7ZW11bH1sdHNtaXAiCisJOzsKKyAgICBlc2FjCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKk4zMiopCisJZW11bD0iJHtlbXVsfW4zMiIKKwk7OworICAgIGVzYWMKKyAgICBMRD0iJHtMRC1sZH0gLW0gJGVtdWwiCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8IFwKIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZip8c3BhcmMqLSpsaW51eCopCi0gICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgIyBGaW5kIG91dCB3aGF0IEFCSSBpcyBiZWluZyBwcm9kdWNlZCBieSBhY19jb21waWxlLCBhbmQgc2V0IGxpbmtlcgorICAjIG9wdGlvbnMgYWNjb3JkaW5nbHkuICBOb3RlIHRoYXQgdGhlIGxpc3RlZCBjYXNlcyBvbmx5IGNvdmVyIHRoZQorICAjIHNpdHVhdGlvbnMgd2hlcmUgYWRkaXRpb25hbCBsaW5rZXIgb3B0aW9ucyBhcmUgbmVlZGVkIChzdWNoIGFzIHdoZW4KKyAgIyBkb2luZyAzMi1iaXQgY29tcGlsYXRpb24gZm9yIGEgaG9zdCB3aGVyZSBsZCBkZWZhdWx0cyB0byA2NC1iaXQsIG9yCisgICMgdmljZSB2ZXJzYSk7IHRoZSBjb21tb24gY2FzZXMgd2hlcmUgbm8gbGlua2VyIG9wdGlvbnMgYXJlIG5lZWRlZCBkbworICAjIG5vdCBhcHBlYXIgaW4gdGhlIGxpc3QuCiAgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CiAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCiAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgpAQCAtMTMyNiwxNCArMTM2MSwxNyBAQAogCSAgeDg2XzY0LSpsaW51eCopCiAJICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KIAkgICAgICAqeDg2LTY0KikKLQkgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfeDg2XzY0IgotCSAgICAgICAgIDs7CisJCUxEPSIke0xELWxkfSAtbSBlbGYzMl94ODZfNjQiCisJCTs7CiAJICAgICAgKikKLQkgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCi0JICAgICAgICAgOzsKKwkJTEQ9IiR7TEQtbGR9IC1tIGVsZl9pMzg2IgorCQk7OwogCSAgICBlc2FjCiAJICAgIDs7Ci0JICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgcG93ZXJwYzY0bGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMybHBwY2xpbnV4IgorCSAgICA7OworCSAgcG93ZXJwYzY0LSpsaW51eCopCiAJICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgogCSAgICA7OwogCSAgczM5MHgtKmxpbnV4KikKQEAgLTEzNTIsNyArMTM5MCwxMCBAQAogCSAgeDg2XzY0LSpsaW51eCopCiAJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgogCSAgICA7OwotCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICBwb3dlcnBjbGUtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0bHBwYyIKKwkgICAgOzsKKwkgIHBvd2VycGMtKmxpbnV4KikKIAkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0cHBjIgogCSAgICA7OwogCSAgczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKikKQEAgLTEzNzAsMTkgKzE0MTEsMjAgQEAKIAogKi0qLXNjbzMuMnY1KikKICAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgotICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgU0FWRV9DRkxBR1M9JENGTEFHUwogICBDRkxBR1M9IiRDRkxBR1MgLWJlbGYiCiAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmXSwgbHRfY3ZfY2NfbmVlZHNfYmVsZiwKICAgICBbQUNfTEFOR19QVVNIKEMpCiAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1tdXSxbW11dKV0sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCiAgICAgIEFDX0xBTkdfUE9QXSkKLSAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgaWYgdGVzdCB5ZXMgIT0gIiRsdF9jdl9jY19uZWVkc19iZWxmIjsgdGhlbgogICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICAgIENGTEFHUz0kU0FWRV9DRkxBR1MKICAgZmkKICAgOzsKICotKnNvbGFyaXMqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgICMgRmluZCBvdXQgd2hhdCBBQkkgaXMgYmVpbmcgcHJvZHVjZWQgYnkgYWNfY29tcGlsZSwgYW5kIHNldCBsaW5rZXIKKyAgIyBvcHRpb25zIGFjY29yZGluZ2x5LgogICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAogICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgogICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KQEAgLTEzOTAsNyArMTQzMiw3IEBACiAgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgogICAgICAgeWVzKikKICAgICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICBpPzg2LSotc29sYXJpcyopCisgICAgICAgIGk/ODYtKi1zb2xhcmlzKnx4ODZfNjQtKi1zb2xhcmlzKikKICAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKICAgICAgICAgICA7OwogICAgICAgICBzcGFyYyotKi1zb2xhcmlzKikKQEAgLTEzOTksNyArMTQ0MSw3IEBACiAgICAgICAgIGVzYWMKICAgICAgICAgIyBHTlUgbGQgMi4yMSBpbnRyb2R1Y2VkIF9zb2wyIGVtdWxhdGlvbnMuICBVc2UgdGhlbSBpZiBhdmFpbGFibGUuCiAgICAgICAgIGlmICR7TEQtbGR9IC1WIHwgZ3JlcCBfc29sMiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICBMRD0iJHtMRC1sZH1fc29sMiIKKyAgICAgICAgICBMRD0ke0xELWxkfV9zb2wyCiAgICAgICAgIGZpCiAgICAgICAgIDs7CiAgICAgICAqKQpAQCAtMTQxNSw3ICsxNDU3LDcgQEAKICAgOzsKIGVzYWMKIAotbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCituZWVkX2xvY2tzPSRlbmFibGVfbGlidG9vbF9sb2NrCiBdKSMgX0xUX0VOQUJMRV9MT0NLCiAKIApAQCAtMTQzNCwxMSArMTQ3NiwxMSBAQAogICAgICBbZWNobyBjb25mdGVzdC4kYWNfb2JqZXh0ID4gY29uZnRlc3QubHN0CiAgICAgICBsdF9hcl90cnk9JyRBUiAkQVJfRkxBR1MgbGliY29uZnRlc3QuYSBAY29uZnRlc3QubHN0ID4mQVNfTUVTU0FHRV9MT0dfRkQnCiAgICAgICBBQ19UUllfRVZBTChbbHRfYXJfdHJ5XSkKLSAgICAgIGlmIHRlc3QgIiRhY19zdGF0dXMiIC1lcSAwOyB0aGVuCisgICAgICBpZiB0ZXN0IDAgLWVxICIkYWNfc3RhdHVzIjsgdGhlbgogCSMgRW5zdXJlIHRoZSBhcmNoaXZlciBmYWlscyB1cG9uIGJvZ3VzIGZpbGUgbmFtZXMuCiAJcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBsaWJjb25mdGVzdC5hCiAJQUNfVFJZX0VWQUwoW2x0X2FyX3RyeV0pCi0JaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKwlpZiB0ZXN0IDAgLW5lICIkYWNfc3RhdHVzIjsgdGhlbgogICAgICAgICAgIGx0X2N2X2FyX2F0X2ZpbGU9QAogICAgICAgICBmaQogICAgICAgZmkKQEAgLTE0NDYsNyArMTQ4OCw3IEBACiAgICAgIF0pCiAgIF0pCiAKLWlmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KK2lmIHRlc3Qgbm8gPSAiJGx0X2N2X2FyX2F0X2ZpbGUiOyB0aGVuCiAgIGFyY2hpdmVyX2xpc3Rfc3BlYz0KIGVsc2UKICAgYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9jdl9hcl9hdF9maWxlCkBAIC0xNDc3LDcgKzE1MTksNyBAQAogCiBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgogICBjYXNlICRob3N0X29zIGluCi0gIG9wZW5ic2QqKQorICBiaXRyaWcqIHwgb3BlbmJzZCopCiAgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJHRvb2xfb2xkbGliIgogICAgIDs7CiAgICopCkBAIC0xNTEzLDcgKzE1NTUsNyBAQAogICBbJDI9bm8KICAgIG00X2lmKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisgICBsdF9jb21waWxlcl9mbGFnPSIkMyIgICMjIGV4Y2x1ZGUgZnJvbSBzY191c2VsZXNzX3F1b3Rlc19pbl9hc3NpZ25tZW50CiAgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgogICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KICAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKQEAgLTE1NDAsNyArMTU4Miw3IEBACiAgICAkUk0gY29uZnRlc3QqCiBdKQogCi1pZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiWyRdJDIiOyB0aGVuCiAgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQogZWxzZQogICAgIG00X2lmKFskNl0sICwgOiwgWyQ2XSkKQEAgLTE1NjIsNyArMTYwNCw3IEBACiBtNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAogQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKICAgWyQyPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCiAgICBMREZMQUdTPSIkTERGTEFHUyAkMyIKICAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCkBAIC0xNTgxLDEwICsxNjIzLDEwIEBACiAgICAgIGZpCiAgICBmaQogICAgJFJNIC1yIGNvbmZ0ZXN0KgotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgIExERkxBR1M9JHNhdmVfTERGTEFHUwogXSkKIAotaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIlskXSQyIjsgdGhlbgogICAgIG00X2lmKFskNF0sICwgOiwgWyQ0XSkKIGVsc2UKICAgICBtNF9pZihbJDVdLCAsIDosIFskNV0pCkBAIC0xNjA1LDcgKzE2NDcsNyBAQAogQUNfTVNHX0NIRUNLSU5HKFt0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50c10pCiBBQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19tYXhfY21kX2xlbl0sIFtkbmwKICAgaT0wCi0gIHRlc3RzdHJpbmc9IkFCQ0QiCisgIHRlc3RzdHJpbmc9QUJDRAogCiAgIGNhc2UgJGJ1aWxkX29zIGluCiAgIG1zZG9zZGpncHAqKQpAQCAtMTY0NSw3ICsxNjg3LDcgQEAKICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKICAgICA7OwogCi0gIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgIGJpdHJpZyogfCBkYXJ3aW4qIHwgZHJhZ29uZmx5KiB8IGZyZWVic2QqIHwgbmV0YnNkKiB8IG9wZW5ic2QqKQogICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgogICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKQEAgLTE2OTYsMjIgKzE3MzgsMjIgQEAKICAgKikKICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YChnZXRjb25mIEFSR19NQVgpIDI+IC9kZXYvbnVsbGAKICAgICBpZiB0ZXN0IC1uICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiAmJiBcCi0gICAgICB0ZXN0IHVuZGVmaW5lZCAhPSAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KKyAgICAgICB0ZXN0IHVuZGVmaW5lZCAhPSAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAogICAgIGVsc2UKICAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KICAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KLSAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDg7IGRvCiAgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZwogICAgICAgZG9uZQogICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KICAgICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCiAgICAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAogICAgICAgIyB3ZSBjYW4ndCB0ZWxsLgotICAgICAgd2hpbGUgeyB0ZXN0ICJYImBlbnYgZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKyAgICAgIHdoaWxlIHsgdGVzdCBYYGVudiBlY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAogCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKwkgICAgICB0ZXN0IDE3ICE9ICIkaSIgIyAxLzIgTUIgc2hvdWxkIGJlIGVub3VnaAogICAgICAgZG8KICAgICAgICAgaT1gZXhwciAkaSArIDFgCiAgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZwpAQCAtMTcyNyw3ICsxNzY5LDcgQEAKICAgICA7OwogICBlc2FjCiBdKQotaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgoraWYgdGVzdCAtbiAiJGx0X2N2X3N5c19tYXhfY21kX2xlbiI7IHRoZW4KICAgQUNfTVNHX1JFU1VMVCgkbHRfY3Zfc3lzX21heF9jbWRfbGVuKQogZWxzZQogICBBQ19NU0dfUkVTVUxUKG5vbmUpCkBAIC0xNzU1LDcgKzE3OTcsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBtNF9kZWZ1bihbX0xUX1RSWV9ETE9QRU5fU0VMRl0sCiBbbTRfcmVxdWlyZShbX0xUX0hFQURFUl9ETEZDTl0pZG5sCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CitpZiB0ZXN0IHllcyA9ICIkY3Jvc3NfY29tcGlsaW5nIjsgdGhlbiA6CiAgIFskNF0KIGVsc2UKICAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgpAQCAtMTgwNCw3ICsxODQ2LDcgQEAKIAogLyogV2hlbiAtZnZpc2JpbGl0eT1oaWRkZW4gaXMgdXNlZCwgYXNzdW1lIHRoZSBjb2RlIGhhcyBiZWVuIGFubm90YXRlZAogICAgY29ycmVzcG9uZGluZ2x5IGZvciB0aGUgc3ltYm9scyBuZWVkZWQuICAqLwotI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDMpICYmIChfX0dOVUNfTUlOT1JfXyA+PSAzKSkgfHwgKF9fR05VQ19fID4gMykpCisjaWYgZGVmaW5lZCBfX0dOVUNfXyAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQogaW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwogI2VuZGlmCiAKQEAgLTE4MzAsNyArMTg3Miw3IEBACiAgIHJldHVybiBzdGF0dXM7CiB9XQogX0xUX0VPRgotICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgImNvbmZ0ZXN0JGFjX2V4ZWV4dCIgMj4vZGV2L251bGw7IHRoZW4KICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCiAgICAgbHRfc3RhdHVzPSQ/CiAgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgpAQCAtMTg1MSw3ICsxODkzLDcgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tCiBBQ19ERUZVTihbTFRfU1lTX0RMT1BFTl9TRUxGXSwKIFttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKLWlmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgoraWYgdGVzdCB5ZXMgIT0gIiRlbmFibGVfZGxvcGVuIjsgdGhlbgogICBlbmFibGVfZGxvcGVuPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KICAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCkBAIC0xODYxLDQ0ICsxOTAzLDUyIEBACiAKICAgY2FzZSAkaG9zdF9vcyBpbgogICBiZW9zKikKLSAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbj1sb2FkX2FkZF9vbgogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQogICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwogICAgIDs7CiAKICAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCi0gICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW49TG9hZExpYnJhcnkKICAgICBsdF9jdl9kbG9wZW5fbGlicz0KICAgICA7OwogCiAgIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCisgICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQogICAgIDs7CiAKICAgZGFyd2luKikKLSAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICAjIGlmIGxpYmRsIGlzIGluc3RhbGxlZCB3ZSBuZWVkIHRvIGxpbmsgYWdhaW5zdCBpdAogICAgIEFDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKLQkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLFsKLSAgICBsdF9jdl9kbG9wZW49ImR5bGQiCisJCVtsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sZGxdLFsKKyAgICBsdF9jdl9kbG9wZW49ZHlsZAogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQogICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcwogICAgIF0pCiAgICAgOzsKIAorICB0cGYqKQorICAgICMgRG9uJ3QgdHJ5IHRvIHJ1biBhbnkgbGluayB0ZXN0cyBmb3IgVFBGLiAgV2Uga25vdyBpdCdzIGltcG9zc2libGUKKyAgICAjIGJlY2F1c2UgVFBGIGlzIGEgY3Jvc3MtY29tcGlsZXIsIGFuZCB3ZSBrbm93IGhvdyB3ZSBvcGVuIERTT3MuCisgICAgbHRfY3ZfZGxvcGVuPWRsb3BlbgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vCisgICAgOzsKKwogICAqKQogICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKLQkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCisJICBbbHRfY3ZfZGxvcGVuPXNobF9sb2FkXSwKICAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCi0JICAgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSwKKwkgICAgW2x0X2N2X2Rsb3Blbj1zaGxfbG9hZCBsdF9jdl9kbG9wZW5fbGlicz0tbGRsZF0sCiAJW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCi0JICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCisJICAgICAgW2x0X2N2X2Rsb3Blbj1kbG9wZW5dLAogCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKLQkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAorCQlbbHRfY3ZfZGxvcGVuPWRsb3BlbiBsdF9jdl9kbG9wZW5fbGlicz0tbGRsXSwKIAkgICAgW0FDX0NIRUNLX0xJQihbc3ZsZF0sIFtkbG9wZW5dLAotCQkgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sc3ZsZCJdLAorCQkgIFtsdF9jdl9kbG9wZW49ZGxvcGVuIGx0X2N2X2Rsb3Blbl9saWJzPS1sc3ZsZF0sCiAJICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKLQkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSkKKwkJICAgIFtsdF9jdl9kbG9wZW49ZGxkX2xpbmsgbHRfY3ZfZGxvcGVuX2xpYnM9LWxkbGRdKQogCSAgICAgIF0pCiAJICAgIF0pCiAJICBdKQpAQCAtMTkwNywyMSArMTk1NywyMSBAQAogICAgIDs7CiAgIGVzYWMKIAotICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCi0gICAgZW5hYmxlX2Rsb3Blbj15ZXMKLSAgZWxzZQorICBpZiB0ZXN0IG5vID0gIiRsdF9jdl9kbG9wZW4iOyB0aGVuCiAgICAgZW5hYmxlX2Rsb3Blbj1ubworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKICAgZmkKIAogICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KICAgZGxvcGVuKQotICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKyAgICBzYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworICAgIHRlc3QgeWVzID0gIiRhY19jdl9oZWFkZXJfZGxmY25faCIgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKIAotICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCiAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgogCi0gICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBzYXZlX0xJQlM9JExJQlMKICAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCiAKICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLApAQCAtMTkzMSw3ICsxOTgxLDcgQEAKIAkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQogICAgIF0pCiAKLSAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyA9ICIkbHRfY3ZfZGxvcGVuX3NlbGYiOyB0aGVuCiAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljXCIKICAgICAgIEFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZl0sCiAJICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMsIFtkbmwKQEAgLTE5NDEsOSArMTk5MSw5IEBACiAgICAgICBdKQogICAgIGZpCiAKLSAgICBDUFBGTEFHUz0iJHNhdmVfQ1BQRkxBR1MiCi0gICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLSAgICBMSUJTPSIkc2F2ZV9MSUJTIgorICAgIENQUEZMQUdTPSRzYXZlX0NQUEZMQUdTCisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgTElCUz0kc2F2ZV9MSUJTCiAgICAgOzsKICAgZXNhYwogCkBAIC0yMDM1LDggKzIwODUsOCBAQAogbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCiBfTFRfQ09NUElMRVJfQ19PKFskMV0pCiAKLWhhcmRfbGlua3M9Im5vdHRlc3RlZCIKLWlmIHRlc3QgIiRfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCitoYXJkX2xpbmtzPW5vdHRlc3RlZAoraWYgdGVzdCBubyA9ICIkX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiAmJiB0ZXN0IG5vICE9ICIkbmVlZF9sb2NrcyI7IHRoZW4KICAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCiAgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKICAgaGFyZF9saW5rcz15ZXMKQEAgLTIwNDYsOCArMjA5Niw4IEBACiAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KICAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQotICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgotICAgIEFDX01TR19XQVJOKFtgJENDJyBkb2VzIG5vdCBzdXBwb3J0IGAtYyAtbycsIHNvIGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKyAgaWYgdGVzdCBubyA9ICIkaGFyZF9saW5rcyI7IHRoZW4KKyAgICBBQ19NU0dfV0FSTihbJyRDQycgZG9lcyBub3Qgc3VwcG9ydCAnLWMgLW8nLCBzbyAnbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCiAgICAgbmVlZF9sb2Nrcz13YXJuCiAgIGZpCiBlbHNlCkBAIC0yMDc0LDggKzIxMjQsOCBAQAogX0xUX0RFQ0woW10sIFtvYmpkaXJdLCBbMF0sCiAgICAgICAgICBbVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzXSlkbmwKIG00X3BhdHRlcm5fYWxsb3coW0xUX09CSkRJUl0pZG5sCi1BQ19ERUZJTkVfVU5RVU9URUQoTFRfT0JKRElSLCAiJGx0X2N2X29iamRpci8iLAotICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IGluIHdoaWNoIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQorQUNfREVGSU5FX1VOUVVPVEVEKFtMVF9PQkpESVJdLCAiJGx0X2N2X29iamRpci8iLAorICBbRGVmaW5lIHRvIHRoZSBzdWItZGlyZWN0b3J5IHdoZXJlIGxpYnRvb2wgc3RvcmVzIHVuaW5zdGFsbGVkIGxpYnJhcmllcy5dKQogXSkjIF9MVF9DSEVDS19PQkpESVIKIAogCkBAIC0yMDg3LDE1ICsyMTM3LDE1IEBACiBfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPQogaWYgdGVzdCAtbiAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIiB8fAogICAgdGVzdCAtbiAiJF9MVF9UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwKLSAgIHRlc3QgIlgkX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCisgICB0ZXN0IHllcyA9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSI7IHRoZW4KIAogICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAhPSBubyAmJgorICBpZiB0ZXN0IG5vICE9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgJiYKICAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQogICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CiAgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAhPSBubyAmJgotICAgICB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiICE9IG5vOyB0aGVuCisgICAgICMjIHRlc3Qgbm8gIT0gIiRfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKSIgJiYKKyAgICAgdGVzdCBubyAhPSAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpIjsgdGhlbgogICAgICMgTGlua2luZyBhbHdheXMgaGFyZGNvZGVzIHRoZSB0ZW1wb3JhcnkgbGlicmFyeSBkaXJlY3RvcnkuCiAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT1yZWxpbmsKICAgZWxzZQpAQCAtMjEwOSwxMiArMjE1OSwxMiBAQAogZmkKIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpXSkKIAotaWYgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkiID0gcmVsaW5rIHx8Ci0gICB0ZXN0ICIkX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSkiID0geWVzOyB0aGVuCitpZiB0ZXN0IHJlbGluayA9ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgfHwKKyAgIHRlc3QgeWVzID0gIiRfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKSI7IHRoZW4KICAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCiAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KK2VsaWYgdGVzdCB5ZXMgPSAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgfHwKKyAgICAgdGVzdCBubyA9ICIkZW5hYmxlX3NoYXJlZCI7IHRoZW4KICAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CiAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKIGZpCkBAIC0yMTM4LDcgKzIxODgsNyBAQAogIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgZGFyd2luKikKLSAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KICAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCiAgICAgICBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtUyIKICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCkBAIC0yMTY5LDE0ICsyMjE5LDE0IEBACiBBQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCiBtNF9pZihbJDFdLAogCVtdLCBbCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGRhcndpbiopIGx0X2F3a19hcmc9Ii9ebGlicmFyaWVzOi8sL0xSLyIgOzsKLSAgICAqKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovIiA7OworICAgIGRhcndpbiopIGx0X2F3a19hcmc9Jy9ebGlicmFyaWVzOi8sL0xSLycgOzsKKyAgICAqKSBsdF9hd2tfYXJnPScvXmxpYnJhcmllczovJyA7OwogICBlc2FjCiAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0icyw9XChbW0EtWmEtel1dOlwpLFwxLGciIDs7Ci0gICAgKikgbHRfc2VkX3N0cmlwX2VxPSJzLD0vLC8sZyIgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlZF9zdHJpcF9lcT0nc3w9XChbW0EtWmEtel1dOlwpfFwxfGcnIDs7CisgICAgKikgbHRfc2VkX3N0cmlwX2VxPSdzfD0vfC98ZycgOzsKICAgZXNhYwogICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAkbHRfc2VkX3N0cmlwX2VxYAogICBjYXNlICRsdF9zZWFyY2hfcGF0aF9zcGVjIGluCkBAIC0yMTkyLDI4ICsyMjQyLDM1IEBACiAgICAgOzsKICAgZXNhYwogICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAotICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KKyAgIyBhbmQgYWRkIG11bHRpbGliIGRpciBpZiBuZWNlc3NhcnkuLi4KICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9Ci0gIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCisgIGx0X211bHRpX29zX2Rpcj0vYCRDQyAkQ1BQRkxBR1MgJENGTEFHUyAkTERGTEFHUyAtcHJpbnQtbXVsdGktb3MtZGlyZWN0b3J5IDI+L2Rldi9udWxsYAorICAjIC4uLmJ1dCBpZiBzb21lIHBhdGggY29tcG9uZW50IGFscmVhZHkgZW5kcyB3aXRoIHRoZSBtdWx0aWxpYiBkaXIgd2UgYXNzdW1lCisgICMgdGhhdCBhbGwgaXMgZmluZSBhbmQgdHJ1c3QgLXByaW50LXNlYXJjaC1kaXJzIGFzIGlzIChHQ0MgNC4yPyBvciBuZXdlcikuCisgIGNhc2UgIiRsdF9tdWx0aV9vc19kaXI7ICRsdF9zZWFyY2hfcGF0aF9zcGVjICIgaW4KKyAgIi87ICIqIHwgIi8uOyAiKiB8ICIvLi87ICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyICIqIHwgKiIkbHRfbXVsdGlfb3NfZGlyLyAiKikKKyAgICBsdF9tdWx0aV9vc19kaXI9CisgICAgOzsKKyAgZXNhYwogICBmb3IgbHRfc3lzX3BhdGggaW4gJGx0X3NlYXJjaF9wYXRoX3NwZWM7IGRvCi0gICAgaWYgdGVzdCAtZCAiJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiOyB0aGVuCi0gICAgICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIgotICAgIGVsc2UKKyAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgkbHRfbXVsdGlfb3NfZGlyIgorICAgIGVsaWYgdGVzdCAtbiAiJGx0X211bHRpX29zX2RpciI7IHRoZW4KICAgICAgIHRlc3QgLWQgIiRsdF9zeXNfcGF0aCIgJiYgXAogCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgogICAgIGZpCiAgIGRvbmUKICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBhd2sgJwotQkVHSU4ge1JTPSIgIjsgRlM9Ii98XG4iO30gewotICBsdF9mb289IiI7Ci0gIGx0X2NvdW50PTA7CitCRUdJTiB7UlMgPSAiICI7IEZTID0gIi98XG4iO30geworICBsdF9mb28gPSAiIjsKKyAgbHRfY291bnQgPSAwOwogICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgewogICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKICAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CiAgICAgICAgIGx0X2NvdW50Kys7CiAgICAgICB9IGVsc2UgewogICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgewotICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICAgIGx0X2ZvbyA9ICIvIiAkbHRfaSBsdF9mb287CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgbHRfY291bnQtLTsKICAgICAgICAgfQpAQCAtMjIyNyw3ICsyMjg0LDcgQEAKICAgIyBmb3IgdGhlc2UgaG9zdHMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBtaW5ndyogfCBjZWdjYyopIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfFwKLSAgICAgICRTRUQgJ3MsL1woW1tBLVphLXpdXTpcKSxcMSxnJ2AgOzsKKyAgICAgICRTRUQgJ3N8L1woW1tBLVphLXpdXTpcKXxcMXxnJ2AgOzsKICAgZXNhYwogICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkbHRfTkwyU1BgCiBlbHNlCkBAIC0yMjM2LDcgKzIyOTMsNyBAQAogbGlicmFyeV9uYW1lc19zcGVjPQogbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKIHNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKK3NocmV4dF9jbWRzPS5zbwogcG9zdGluc3RhbGxfY21kcz0KIHBvc3R1bmluc3RhbGxfY21kcz0KIGZpbmlzaF9jbWRzPQpAQCAtMjI1NiwxMSArMjMxMywxMSBAQAogY2FzZSAkaG9zdF9vcyBpbgogYWl4MyopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwogICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKIAogICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIDs7CiAKIGFpeFtbNC05XV0qKQpAQCAtMjI2OCw0MCArMjMyNSw0MCBAQAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KICAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgZWxzZQogICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKICAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyB0aGUgbGluZSAnIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uICcuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCiAgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBhaXg0IHwgYWl4NC5bWzAxXV0gfCBhaXg0LltbMDFdXS4qKQogICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKIAkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAkQ0MgLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgogCToKICAgICAgIGVsc2UKIAljYW5fYnVpbGRfc2hhcmVkPW5vCiAgICAgICBmaQogICAgICAgOzsKICAgICBlc2FjCi0gICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW5ub3QgaGFyZGNvZGUgY29ycmVjdAogICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KICAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgotICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgogICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCiAgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAogICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgICAgZWxzZQogICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKICAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCi0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlLmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgICAgZmkKICAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKICAgZmkKQEAgLTIzMTIsMTggKzIzNjksMTggQEAKICAgcG93ZXJwYykKICAgICAjIFNpbmNlIEp1bHkgMjAwNyBBbWlnYU9TNCBvZmZpY2lhbGx5IHN1cHBvcnRzIC5zbyBsaWJyYXJpZXMuCiAgICAgIyBXaGVuIGNvbXBpbGluZyB0aGUgZXhlY3V0YWJsZSwgYWRkIC11c2UtZHlubGQgLUxzb2JqczogdG8gdGhlIGNvbXBpbGVsaW5lLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgICA7OwogICBtNjhrKQogICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCiAgICAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YGZ1bmNfZWNob19hbGwgIiRsaWIiIHwgJFNFRCAnXCcncyVeLiovXChbW14vXV0qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICAgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gZnVuY19lY2hvX2FsbCAiJGxpYiIgfCAkU0VEICdcJydzJV4uKi9cKFtbXi9dXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgJFJNIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwogICAgIDs7CiAgIGVzYWMKICAgOzsKIAogYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgogICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAogICA7OwpAQCAtMjMzMSw4ICsyMzg4LDggQEAKIGJzZGlbWzQ1XV0qKQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgpAQCAtMjM0NCw3ICsyNDAxLDcgQEAKIAogY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKKyAgc2hyZXh0X2NtZHM9LmRsbAogICBuZWVkX3ZlcnNpb249bm8KICAgbmVlZF9saWJfcHJlZml4PW5vCiAKQEAgLTIzNTMsOCArMjQxMCw4IEBACiAgICAgIyBnY2MKICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwogICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CiAgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CiAgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KICAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KQEAgLTIzNzAsMTcgKzI0MjcsMTcgQEAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgY3lnd2luKikKICAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJGxpYm5hbWUgfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQnCiBtNF9pZihbJDFdLCBbXSxbCiAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9saWIvdzMyYXBpIl0pCiAgICAgICA7OwogICAgIG1pbmd3KiB8IGNlZ2NjKikKICAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKICAgICAgIDs7CiAgICAgcHczMiopCiAgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAkbGlibmFtZSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHJlbGVhc2UgfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHZlcnN1ZmZpeCRzaGFyZWRfZXh0JwogICAgICAgOzsKICAgICBlc2FjCiAgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKQEAgLTIzODksOCArMjQ0Niw4IEBACiAgICosY2wqKQogICAgICMgTmF0aXZlIE1TVkMKICAgICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfS5kbGwubGliJworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZWBlY2hvICRyZWxlYXNlIHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR2ZXJzdWZmaXgkc2hhcmVkX2V4dCcKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5saWInCiAKICAgICBjYXNlICRidWlsZF9vcyBpbgogICAgIG1pbmd3KikKQEAgLTI0MTcsNyArMjQ3NCw3IEBACiAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAogICAgICAgOzsKICAgICAqKQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkTElCIgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRMSUIKICAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IFskR1JFUCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCiAgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEguCiAgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCkBAIC0yNDMwLDggKzI0ODcsOCBAQAogICAgIGVzYWMKIAogICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJGZpbGVgfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJGJhc2VfZmlsZSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CiAgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CiAgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KICAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKQEAgLTI0NDQsNyArMjUwMSw3IEBACiAKICAgKikKICAgICAjIEFzc3VtZSBNU1ZDIHdyYXBwZXIKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWVgZWNobyAkcmVsZWFzZSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2AkdmVyc3VmZml4JHNoYXJlZF9leHQgJGxpYm5hbWUubGliJwogICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCiAgICAgOzsKICAgZXNhYwpAQCAtMjQ1Nyw4ICsyNTE0LDggQEAKICAgdmVyc2lvbl90eXBlPWRhcndpbgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJG1ham9yJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2UkbWFqb3Ikc2hhcmVkX2V4dCcKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICiAgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwpAQCAtMjQ3MSw4ICsyNTI4LDggQEAKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICA7OwogCkBAIC0yNDkwLDEyICsyNTQ3LDEyIEBACiAgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKICAgY2FzZSAkdmVyc2lvbl90eXBlIGluCiAgICAgZnJlZWJzZC1lbGYqKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0ICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgICAgICBuZWVkX3ZlcnNpb249bm8KICAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwogICAgICAgOzsKICAgICBmcmVlYnNkLSopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKICAgICAgIG5lZWRfdmVyc2lvbj15ZXMKICAgICAgIDs7CiAgIGVzYWMKQEAgLTI1MjAsMjYgKzI1NzcsMTUgQEAKICAgZXNhYwogICA7OwogCi1nbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCiBoYWlrdSopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwogICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgcnVudGltZV9sb2FkZXIiCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL2Jvb3QvaG9tZS9jb25maWcvbGliIC9ib290L2NvbW1vbi9saWIgL2Jvb3Qvc3lzdGVtL2xpYicKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICA7OwpAQCAtMjU1Nyw5ICsyNjAzLDkgQEAKICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgogICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgICBpZiB0ZXN0IDMyID0gIiRIUFVYX0lBNjRfTU9ERSI7IHRoZW4KICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKICAgICBlbHNlCiAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCkBAIC0yNTcyLDggKzI2MTgsOCBAQAogICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCiAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICiAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgogICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKICAgICA7OwpAQCAtMjU4Miw4ICsyNjI4LDggQEAKICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgogICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAogICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgICA7OwogICBlc2FjCiAgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KQEAgLTI1OTYsOCArMjY0Miw4IEBACiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KQEAgLTI2MDgsNyArMjY1NCw3IEBACiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CiAgICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X3Byb2dfZ251X2xkIjsgdGhlbgogCQl2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCiAJZWxzZQogCQl2ZXJzaW9uX3R5cGU9aXJpeApAQCAtMjYxNiw4ICsyNjYyLDggQEAKICAgZXNhYwogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQgJGxpYm5hbWUkc2hhcmVkX2V4dCcKICAgY2FzZSAkaG9zdF9vcyBpbgogICBpcml4NSogfCBub25zdG9wdXgqKQogICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KQEAgLTI2MzYsOCArMjY4Miw4IEBACiAgIGVzYWMKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiRsaWJzdWZmIC9saWIkbGlic3VmZiAvdXNyL2xvY2FsL2xpYiRsaWJzdWZmIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIkbGlic3VmZiAvbGliJGxpYnN1ZmYiCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKICAgOzsKIApAQCAtMjY0NiwxMyArMjY5MiwzMyBAQAogICBkeW5hbWljX2xpbmtlcj1ubwogICA7OwogCitsaW51eCphbmRyb2lkKikKKyAgdmVyc2lvbl90eXBlPW5vbmUgIyBBbmRyb2lkIGRvZXNuJ3Qgc3VwcG9ydCB2ZXJzaW9uZWQgbGlicmFyaWVzLgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JworICBmaW5pc2hfY21kcz0KKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgIGR5bmFtaWNfbGlua2VyPSdBbmRyb2lkIGxpbmtlcicKKyAgIyBEb24ndCBlbWJlZCAtcnBhdGggZGlyZWN0b3JpZXMgc2luY2UgdGhlIGxpbmtlciBkb2Vzbid0IHN1cHBvcnQgdGhlbS4KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgOzsKKwogIyBUaGlzIG11c3QgYmUgZ2xpYmMvRUxGLgotbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwpAQCAtMjY3NywxNCArMjc0MywxMCBAQAogICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAKLSAgIyBBZGQgQUJJLXNwZWNpZmljIGRpcmVjdG9yaWVzIHRvIHRoZSBzeXN0ZW0gbGlicmFyeSBwYXRoLgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYjY0IC91c3IvbGliNjQgL2xpYiAvdXNyL2xpYiIKLQogICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAogICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgogICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFxbJF0yKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcWyRdMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLzsvXlsJIF0qaHdjYXBbCSBdL2Q7cy9bOiwJXS8gL2c7cy89W149XSokLy87cy89W149IF0qIC8gL2c7cy8iLy9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgJGx0X2xkX2V4dHJhIgotCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgogICBmaQogCiAgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgpAQCAtMjcwMSwxMiArMjc2MywxMiBAQAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCiAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCiAgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKICAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCiAgIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCiAgIGZpCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICkBAIC0yNzE2LDcgKzI3NzgsNyBAQAogCiBuZXdzb3M2KQogICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgOzsKQEAgLTI3MjUsNDUgKzI3ODcsMzQgQEAKICAgdmVyc2lvbl90eXBlPXFueAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3InCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKICAgOzsKIAotb3BlbmJzZCopCitvcGVuYnNkKiB8IGJpdHJpZyopCiAgIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPS91c3IvbGliCiAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKQluZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikJCQkJbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgorICAgIG5lZWRfdmVyc2lvbj1ubworICBlbHNlCisgICAgbmVlZF92ZXJzaW9uPXllcworICBmaQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCR2ZXJzdWZmaXggJGxpYm5hbWUkc2hhcmVkX2V4dCR2ZXJzdWZmaXgnCiAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCiAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLQk7OwotICAgICAgKikKLQlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0JOzsKLSAgICAgIGVzYWMKLSAgZWxzZQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgZmkKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICA7OwogCiBvczIqKQogICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKKyAgc2hyZXh0X2NtZHM9LmRsbAogICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0ICRsaWJuYW1lLmEnCiAgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICiAgIDs7CkBAIC0yNzcyLDExICsyODIzLDExIEBACiAgIHZlcnNpb25fdHlwZT1vc2YKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwogICA7OwogCiByZG9zKikKQEAgLTI3ODcsOCArMjgzOCw4IEBACiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKQEAgLTI3OTgsMTEgKzI4NDksMTEgQEAKIAogc3Vub3M0KikKICAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCcKICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovdXNyL2V0YyIgbGRjb25maWcgJGxpYmRpcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgZmkKICAgbmVlZF92ZXJzaW9uPXllcwpAQCAtMjgxMCw4ICsyODYxLDggQEAKIAogc3lzdjQgfCBzeXN2NC4zKikKICAgdmVyc2lvbl90eXBlPWxpbnV4ICMgY29ycmVjdCB0byBnbnUvbGludXggZHVyaW5nIHRoZSBuZXh0IGJpZyByZWZhY3RvcgotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBjYXNlICRob3N0X3ZlbmRvciBpbgogICAgIHNuaSkKQEAgLTI4MzIsMTAgKzI4ODMsMTAgQEAKICAgOzsKIAogc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KICAgICB2ZXJzaW9uX3R5cGU9bGludXggIyBjb3JyZWN0IHRvIGdudS9saW51eCBkdXJpbmcgdGhlIG5leHQgYmlnIHJlZmFjdG9yCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNoYXJlZF9leHQuJHZlcnN1ZmZpeCAkbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSRzaGFyZWRfZXh0LiRtYWpvcicKICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBmaQogICA7OwpAQCAtMjg0NCwxMiArMjg5NSwxMiBAQAogICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCiAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvdXNyL2dudS9saWIgL3Vzci9jY3MvbGliIC91c3IvbGliIC9saWInCiAgIGVsc2UKICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvY2NzL2xpYiAvdXNyL2xpYicKQEAgLTI4NjcsNyArMjkxOCw3IEBACiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkdmVyc3VmZml4ICRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KICAgaGFyZGNvZGVfaW50b19saWJzPXllcwpAQCAtMjg3NSw4ICsyOTI2LDggQEAKIAogdXRzNCopCiAgIHZlcnNpb25fdHlwZT1saW51eCAjIGNvcnJlY3QgdG8gZ251L2xpbnV4IGR1cmluZyB0aGUgbmV4dCBiaWcgcmVmYWN0b3IKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkcmVsZWFzZSRzaGFyZWRfZXh0JHZlcnN1ZmZpeCAkbGlibmFtZSRyZWxlYXNlJHNoYXJlZF9leHQkbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHJlbGVhc2Ukc2hhcmVkX2V4dCRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKICAgOzsKIApAQCAtMjg4NSwxOCArMjkzNiwxOCBAQAogICA7OwogZXNhYwogQUNfTVNHX1JFU1VMVChbJGR5bmFtaWNfbGlua2VyXSkKLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCit0ZXN0IG5vID0gIiRkeW5hbWljX2xpbmtlciIgJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwogCiB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCiBmaQogCi1pZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitpZiB0ZXN0IHNldCA9ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IjsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwogZmkKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKK2lmIHRlc3Qgc2V0ID0gIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSI7IHRoZW4KKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCiBmaQogCiBfTFRfREVDTChbXSwgW3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rXSwgWzFdLApAQCAtMjkzOCwzMiArMjk4OSwzMiBAQAogCiAjIF9MVF9QQVRIX1RPT0xfUFJFRklYKFRPT0wpCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHRoYXQgY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQogQUNfREVGVU4oW19MVF9QQVRIX1RPT0xfUFJFRklYXSwKIFttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCiBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCiBBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9NQUdJQ19DTUQsCiBbY2FzZSAkTUFHSUNfQ01EIGluCiBbW1xcLypdIHwgID86W1xcL10qXSkKLSAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kTUFHSUNfQ01EICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgogICA7OwogKikKLSAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorICBsdF9zYXZlX01BR0lDX0NNRD0kTUFHSUNfQ01ECisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGRubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgogZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAogZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KICAgYWNfZHVtbXk9Im00X2lmKFskMl0sICwgJFBBVEgsIFskMl0pIgogICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJDEiOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0kYWNfZGlyLyIkMSIKICAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KIAljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgogCSJmaWxlX21hZ2ljICIqKQogCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCi0JICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIE1BR0lDX0NNRD0kbHRfY3ZfcGF0aF9NQUdJQ19DTUQKIAkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKIAkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgOgpAQCAtMjk4NiwxMSArMzAzNywxMSBAQAogICAgICAgYnJlYWsKICAgICBmaQogICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgSUZTPSRsdF9zYXZlX2lmcworICBNQUdJQ19DTUQ9JGx0X3NhdmVfTUFHSUNfQ01ECiAgIDs7CiBlc2FjXSkKLU1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorTUFHSUNfQ01EPSRsdF9jdl9wYXRoX01BR0lDX0NNRAogaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KICAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQogZWxzZQpAQCAtMzAwOCw3ICszMDU5LDcgQEAKIAogIyBfTFRfUEFUSF9NQUdJQwogIyAtLS0tLS0tLS0tLS0tLQotIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHdoaWNoIGNhbiByZWNvZ25pemUgYSBzaGFyZWQgbGlicmFyeQorIyBmaW5kIGEgZmlsZSBwcm9ncmFtIHRoYXQgY2FuIHJlY29nbml6ZSBhIHNoYXJlZCBsaWJyYXJ5CiBtNF9kZWZ1bihbX0xUX1BBVEhfTUFHSUNdLAogW19MVF9QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKIGlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KQEAgLTMwMzUsMTYgKzMwODYsMTYgQEAKIEFDX0FSR19XSVRIKFtnbnUtbGRdLAogICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCiAJW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCi0gICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCisgICAgW3Rlc3Qgbm8gPSAiJHdpdGh2YWwiIHx8IHdpdGhfZ251X2xkPXllc10sCiAgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKIAogYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgICMgQ2hlY2sgaWYgZ2NjIC1wcmludC1wcm9nLW5hbWU9bGQgZ2l2ZXMgYSBwYXRoLgogICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBsZCB1c2VkIGJ5ICRDQ10pCiAgIGNhc2UgJGhvc3QgaW4KICAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgIyBnY2MgbGVhdmVzIGEgdHJhaWxpbmcgY2FycmlhZ2UgcmV0dXJuLCB3aGljaCB1cHNldHMgbWluZ3cKICAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CiAgICopCiAgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwpAQCAtMzA1OCw3ICszMTA5LDcgQEAKICAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KIAlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKICAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgdGVzdCAteiAiJExEIiAmJiBMRD0kYWNfcHJvZwogICAgICAgOzsKICAgIiIpCiAgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCkBAIC0zMDY5LDM3ICszMTIwLDM3IEBACiAgICAgd2l0aF9nbnVfbGQ9dW5rbm93bgogICAgIDs7CiAgIGVzYWMKLWVsaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorZWxpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCiBlbHNlCiAgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQogZmkKIEFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAogW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKICAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KICAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICBsdF9jdl9wYXRoX0xEPSRhY19kaXIvJGFjX3Byb2cKICAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKICAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCiAgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KICAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgogICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCXRlc3Qgbm8gIT0gIiR3aXRoX2dudV9sZCIgJiYgYnJlYWsKIAk7OwogICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCXRlc3QgeWVzICE9ICIkd2l0aF9nbnVfbGQiICYmIGJyZWFrCiAJOzsKICAgICAgIGVzYWMKICAgICBmaQogICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgorICBJRlM9JGx0X3NhdmVfaWZzCiBlbHNlCi0gIGx0X2N2X3BhdGhfTEQ9IiRMRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIGx0X2N2X3BhdGhfTEQ9JExEICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgogZmldKQotTEQ9IiRsdF9jdl9wYXRoX0xEIgorTEQ9JGx0X2N2X3BhdGhfTEQKIGlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KICAgQUNfTVNHX1JFU1VMVCgkTEQpCiBlbHNlCkBAIC0zMTUzLDEzICszMjA0LDEzIEBACiByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCiBjYXNlICRob3N0X29zIGluCiAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyAhPSAiJEdDQyI7IHRoZW4KICAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCiAgICAgZmkKICAgICA7OwogICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR3bC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCiAgICAgZWxzZQogICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwogICAgIGZpCkBAIC0zMTg1LDEzICszMjM2LDEzIEBACiAjIE5lZWQgdG8gc2V0IHRoZSBwcmVjZWRpbmcgdmFyaWFibGUgb24gYWxsIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQKICMgaW50ZXJsaWJyYXJ5IGRlcGVuZGVuY2llcy4KICMgJ25vbmUnIC0tIGRlcGVuZGVuY2llcyBub3Qgc3VwcG9ydGVkLgotIyBgdW5rbm93bicgLS0gc2FtZSBhcyBub25lLCBidXQgZG9jdW1lbnRzIHRoYXQgd2UgcmVhbGx5IGRvbid0IGtub3cuCisjICd1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KICMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KICMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KICMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKLSMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisjIHRoYXQgcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlICdmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciAncGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCiAKIGNhc2UgJGhvc3Rfb3MgaW4KIGFpeFtbNC05XV0qKQpAQCAtMzIxOCw4ICszMjY5LDcgQEAKICAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQogICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKICAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGFzc3VtZXMgQlNEIG5tLCBzbyBkaXNhbGxvdyBpdCBpZiB1c2luZyBNUyBkdW1wYmluLgotICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGlmICggZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKICAgZWxzZQpAQCAtMzI1NSwxMCArMzMwNSw2IEBACiAgIGZpCiAgIDs7CiAKLWdudSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KIGhhaWt1KikKICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKICAgOzsKQEAgLTMyOTcsNyArMzM0Myw3IEBACiAgIDs7CiAKICMgVGhpcyBtdXN0IGJlIGdsaWJjL0VMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSB8IGdudSopCiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKQEAgLTMzMTksOCArMzM2NSw4IEBACiAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCiAgIDs7CiAKLW9wZW5ic2QqKQotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCitvcGVuYnNkKiB8IGJpdHJpZyopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIjsgdGhlbgogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xcLnNvfF9waWNcLmEpJCcKICAgZWxzZQogICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCkBAIC0zNDEzLDMzICszNDU5LDMzIEBACiBBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pXSwgbHRfY3ZfcGF0aF9OTSwKIFtpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCiAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotICBsdF9jdl9wYXRoX05NPSIkTk0iCisgIGx0X2N2X3BhdGhfTk09JE5NCiBlbHNlCi0gIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBsdF9ubV90b19jaGVjaz0ke2FjX3Rvb2xfcHJlZml4fW5tCiAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KICAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgogICBmaQogICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KLSAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCiAgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbwotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCi0gICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisgICAgICB0bXBfbm09JGFjX2Rpci8kbHRfdG1wX25tCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCI7IHRoZW4KIAkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KLQkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgQWRkaW5nIHRoZSAnc2VkIDFxJyBwcmV2ZW50cyBmYWxzZSBwb3NpdGl2ZXMgb24gSFAtVVgsIHdoaWNoIHNheXM6CiAJIyAgIG5tOiB1bmtub3duIG9wdGlvbiAiQiIgaWdub3JlZAogCSMgVHJ1NjQncyBubSBjb21wbGFpbnMgdGhhdCAvZGV2L251bGwgaXMgYW4gaW52YWxpZCBvYmplY3QgZmlsZQogCWNhc2UgYCIkdG1wX25tIiAtQiAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgogCSovZGV2L251bGwqIHwgKidJbnZhbGlkIGZpbGUgb3Igb2JqZWN0IHR5cGUnKikKIAkgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLUIiCi0JICBicmVhaworCSAgYnJlYWsgMgogCSAgOzsKIAkqKQogCSAgY2FzZSBgIiR0bXBfbm0iIC1wIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCiAJICAqL2Rldi9udWxsKikKIAkgICAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtcCIKLQkgICAgYnJlYWsKKwkgICAgYnJlYWsgMgogCSAgICA7OwogCSAgKikKIAkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKQEAgLTM0NTAsMjEgKzM0OTYsMjEgQEAKIAllc2FjCiAgICAgICBmaQogICAgIGRvbmUKLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBJRlM9JGx0X3NhdmVfaWZzCiAgIGRvbmUKICAgOiAke2x0X2N2X3BhdGhfTk09bm99CiBmaV0pCi1pZiB0ZXN0ICIkbHRfY3ZfcGF0aF9OTSIgIT0gIm5vIjsgdGhlbgotICBOTT0iJGx0X2N2X3BhdGhfTk0iCitpZiB0ZXN0IG5vICE9ICIkbHRfY3ZfcGF0aF9OTSI7IHRoZW4KKyAgTk09JGx0X2N2X3BhdGhfTk0KIGVsc2UKICAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCiAgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6CiAgICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCiAgIGVsc2UKICAgICBBQ19DSEVDS19UT09MUyhEVU1QQklOLCBbZHVtcGJpbiAibGluayAtZHVtcCJdLCA6KQotICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgLWhlYWRlcnMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KICAgICAqQ09GRiopCi0gICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyIKKyAgICAgIERVTVBCSU49IiREVU1QQklOIC1zeW1ib2xzIC1oZWFkZXJzIgogICAgICAgOzsKICAgICAqKQogICAgICAgRFVNUEJJTj06CkBAIC0zNDcyLDggKzM1MTgsOCBAQAogICAgIGVzYWMKICAgZmkKICAgQUNfU1VCU1QoW0RVTVBCSU5dKQotICBpZiB0ZXN0ICIkRFVNUEJJTiIgIT0gIjoiOyB0aGVuCi0gICAgTk09IiREVU1QQklOIgorICBpZiB0ZXN0IDogIT0gIiREVU1QQklOIjsgdGhlbgorICAgIE5NPSREVU1QQklOCiAgIGZpCiBmaQogdGVzdCAteiAiJE5NIiAmJiBOTT1ubQpAQCAtMzUxOSw4ICszNTY1LDggQEAKIAogY2FzZSAkaG9zdF9vcyBpbgogY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQotICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCi0gICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaDsKKyAgIyBkZWNpZGUgd2hpY2ggb25lIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKICAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCiAgICotLWlkZW50aWZ5LXN0cmljdCopCiAgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCkBAIC0zNTMyLDcgKzM1NzgsNyBAQAogICA7OwogKikKICAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCi0gIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KICAgOzsKIGVzYWMKIF0pCkBAIC0zNTU5LDEzICszNjA1LDI4IEBACiAgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcwogICBmaQogICBybSAtZiBjb25mdGVzdCpdKQotaWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzICE9ICIkbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sIjsgdGhlbgogICBNQU5JRkVTVF9UT09MPToKIGZpCiBfTFRfREVDTChbXSwgW01BTklGRVNUX1RPT0xdLCBbMV0sIFtNYW5pZmVzdCB0b29sXSlkbmwKIF0pIyBfTFRfUEFUSF9NQU5JRkVTVF9UT09MCiAKIAorIyBfTFRfRExMX0RFRl9QKFtGSUxFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRydWUgaWZmIEZJTEUgaXMgYSBXaW5kb3dzIERMTCAnLmRlZicgZmlsZS4KKyMgS2VlcCBpbiBzeW5jIHdpdGggZnVuY19kbGxfZGVmX3AgaW4gdGhlIGxpYnRvb2wgc2NyaXB0CitBQ19ERUZVTihbX0xUX0RMTF9ERUZfUF0sCitbZG5sCisgIHRlc3QgREVGID0gImAkU0VEIC1uIGRubAorICAgIC1lICdcJydzL15bWwkgXV0qLy8nXCcnIGRubCBTdHJpcCBsZWFkaW5nIHdoaXRlc3BhY2UKKyAgICAtZSAnXCcnL15cKDsuKlwpKiQvZCdcJycgZG5sICAgICAgRGVsZXRlIGVtcHR5IGxpbmVzIGFuZCBjb21tZW50cworICAgIC1lICdcJydzL15cKEVYUE9SVFNcfExJQlJBUllcKVwoW1sJIF1dLipcKSokL0RFRi9wJ1wnJyBkbmwKKyAgICAtZSBxIGRubCAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBjb25zaWRlciB0aGUgZmlyc3QgInJlYWwiIGxpbmUKKyAgICAkMWAiIGRubAorXSkjIF9MVF9ETExfREVGX1AKKworCiAjIExUX0xJQl9NCiAjIC0tLS0tLS0tCiAjIGNoZWNrIGZvciBtYXRoIGxpYnJhcnkKQEAgLTM1NzcsMTEgKzM2MzgsMTEgQEAKICAgIyBUaGVzZSBzeXN0ZW0gZG9uJ3QgaGF2ZSBsaWJtLCBvciBkb24ndCBuZWVkIGl0CiAgIDs7CiAqLW5jci1zeXN2NC4zKikKLSAgQUNfQ0hFQ0tfTElCKG13LCBfbXd2YWxpZGNoZWNrbCwgTElCTT0iLWxtdyIpCisgIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09LWxtdykKICAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKICAgOzsKICopCi0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09LWxtKQogICA7OwogZXNhYwogQUNfU1VCU1QoW0xJQk1dKQpAQCAtMzYwMCw3ICszNjYxLDcgQEAKIAogX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQogCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgbnZjYyopCiAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLVhjb21waWxlciAtZm5vLWJ1aWx0aW4nIDs7CkBAIC0zNjUyLDcgKzM3MTMsNyBAQAogICBzeW1jb2RlPSdbW0FCQ0RHSVNUV11dJwogICA7OwogaHB1eCopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAgICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKICAgZmkKICAgOzsKQEAgLTM2ODUsMTQgKzM3NDYsNDQgQEAKICAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nIDs7CiBlc2FjCiAKK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgICMgR2V0cyBsaXN0IG9mIGRhdGEgc3ltYm9scyB0byBpbXBvcnQuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2ltcG9ydD0ic2VkIC1uIC1lICdzL15JIC4qIFwoLipcKSQvXDEvcCciCisgICMgQWRqdXN0IHRoZSBiZWxvdyBnbG9iYWwgc3ltYm9sIHRyYW5zZm9ybXMgdG8gZml4dXAgaW1wb3J0ZWQgdmFyaWFibGVzLgorICBsdF9jZGVjbF9ob29rPSIgLWUgJ3MvXkkgLiogXCguKlwpJC9leHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpIGNoYXIgXDE7L3AnIgorICBsdF9jX25hbWVfaG9vaz0iIC1lICdzL15JIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSAwfSwvcCciCisgIGx0X2NfbmFtZV9saWJfaG9vaz0iXAorICAtZSAncy9eSSAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnXAorICAtZSAncy9eSSAuKiBcKC4qXCkkLyAge1wibGliXDFcIiwgKHZvaWQgKikgMH0sL3AnIgorZWxzZQorICAjIERpc2FibGUgaG9va3MgYnkgZGVmYXVsdC4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9faW1wb3J0PQorICBsdF9jZGVjbF9ob29rPQorICBsdF9jX25hbWVfaG9vaz0KKyAgbHRfY19uYW1lX2xpYl9ob29rPQorZmkKKwogIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KICMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAogIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4iXAorJGx0X2NkZWNsX2hvb2tcCisiIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKIAogIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4iXAorJGx0X2NfbmFtZV9ob29rXAorIiAtZSAncy9eOiBcKC4qXCkgLiokLyAge1wiXDFcIiwgKHZvaWQgKikgMH0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIHdpdGggbGliIHByZWZpeCBhbmQKKyMgc3ltYm9sIGFkZHJlc3MuCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4iXAorJGx0X2NfbmFtZV9saWJfaG9va1wKKyIgLWUgJ3MvXjogXCguKlwpIC4qJC8gIHtcIlwxXCIsICh2b2lkICopIDB9LC9wJyJcCisiIC1lICdzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKGxpYi4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sL3AnIlwKKyIgLWUgJ3MvXiRzeW1jb2RlJHN5bWNvZGUqIC4qIFwoLipcKSQvICB7XCJsaWJcMVwiLCAodm9pZCAqKSBcJlwxfSwvcCciCiAKICMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgogb3B0X2NyPQpAQCAtMzcxMCwyMSArMzgwMSwyNCBAQAogCiAgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KICAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KLSAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgotICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBGYWtlIGl0IGZvciBkdW1wYmluIGFuZCBzYXkgVCBmb3IgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb24sCisgICAgIyBEIGZvciBhbnkgZ2xvYmFsIHZhcmlhYmxlIGFuZCBJIGZvciBhbnkgaW1wb3J0ZWQgdmFyaWFibGUuCiAgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCiAgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLIFsnIlwKICIgICAgIHtsYXN0X3NlY3Rpb249c2VjdGlvbjsgc2VjdGlvbj1cJCAzfTsiXAogIiAgICAgL15DT0ZGIFNZTUJPTCBUQUJMRS97Zm9yKGkgaW4gaGlkZSkgZGVsZXRlIGhpZGVbaV19OyJcCiAiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIC9eICpTeW1ib2wgbmFtZSAqOiAve3NwbGl0KFwkIDAsc24sXCI6XCIpOyBzaT1zdWJzdHIoc25bMl0sMil9OyJcCisiICAgICAvXiAqVHlwZSAqOiBjb2RlL3twcmludCBcIlRcIixzaSxzdWJzdHIoc2ksbGVuZ3RoKHByZngpKX07IlwKKyIgICAgIC9eICpUeXBlICo6IGRhdGEve3ByaW50IFwiSVwiLHNpLHN1YnN0cihzaSxsZW5ndGgocHJmeCkpfTsiXAogIiAgICAgXCQgMCF+L0V4dGVybmFsICpcfC97bmV4dH07IlwKICIgICAgIC8gMCsgVU5ERUYgL3tuZXh0fTsgLyBVTkRFRiBcKFtefF1cKSooKS97bmV4dH07IlwKICIgICAgIHtpZihoaWRlW3NlY3Rpb25dKSBuZXh0fTsiXAotIiAgICAge2Y9MH07IFwkIDB+L1woXCkuKlx8L3tmPTF9OyB7cHJpbnRmIGYgPyBcIlQgXCIgOiBcIkQgXCJ9OyJcCi0iICAgICB7c3BsaXQoXCQgMCwgYSwgL1x8fFxyLyk7IHNwbGl0KGFbMl0sIHMpfTsiXAotIiAgICAgc1sxXX4vXltAP10ve3ByaW50IHNbMV0sIHNbMV07IG5leHR9OyJcCi0iICAgICBzWzFdfnByZngge3NwbGl0KHNbMV0sdCxcIkBcIik7IHByaW50IHRbMV0sIHN1YnN0cih0WzFdLGxlbmd0aChwcmZ4KSl9IlwKKyIgICAgIHtmPVwiRFwifTsgXCQgMH4vXChcKS4qXHwve2Y9XCJUXCJ9OyJcCisiICAgICB7c3BsaXQoXCQgMCxhLC9cfHxcci8pOyBzcGxpdChhWzJdLHMpfTsiXAorIiAgICAgc1sxXX4vXltAP10ve3ByaW50IGYsc1sxXSxzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCBmLHRbMV0sc3Vic3RyKHRbMV0sbGVuZ3RoKHByZngpKX0iXAogIiAgICAgJyBwcmZ4PV4kYWNfc3ltcHJmeF0iCiAgIGVsc2UKICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSJzZWQgLW4gLWUgJ3MvXi4qW1sJIF1dXCgkc3ltY29kZSRzeW1jb2RlKlwpW1sJIF1dW1sJIF1dKiRhY19zeW1wcmZ4JHN5bXBhdCRvcHRfY3IkLyRzeW14ZnJtL3AnIgpAQCAtMzc2NCwxMSArMzg1OCwxMSBAQAogCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgogCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKIC8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLwotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKLS8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorI2lmIGRlZmluZWQgX1dJTjMyIHx8IGRlZmluZWQgX19DWUdXSU5fXyB8fCBkZWZpbmVkIF9XSU4zMl9XQ0UKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY2FuJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQogICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLwogIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCi0jZWxpZiBkZWZpbmVkKF9fb3NmX18pCisjZWxpZiBkZWZpbmVkIF9fb3NmX18KIC8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLwogIyBkZWZpbmUgTFRAJnRAX0RMU1lNX0NPTlNUCiAjZWxzZQpAQCAtMzc5NCw3ICszODg4LDcgQEAKIHsKICAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAogX0xUX0VPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICAkU0VEICJzL14kc3ltY29kZSRzeW1jb2RlKiAuKiBcKC4qXCkkLyAge1wiXDFcIiwgKHZvaWQgKikgXCZcMX0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAogCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAogICB7MCwgKHZvaWQgKikgMH0KIH07CkBAIC0zODE0LDkgKzM5MDgsOSBAQAogCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CiAJICBsdF9nbG9ic3ltX3NhdmVfTElCUz0kTElCUwogCSAgbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUz0kQ0ZMQUdTCi0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgTElCUz1jb25mdHN0bS4kYWNfb2JqZXh0CiAJICBDRkxBR1M9IiRDRkxBR1MkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIgotCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgorCSAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KIAkgICAgcGlwZV93b3Jrcz15ZXMKIAkgIGZpCiAJICBMSUJTPSRsdF9nbG9ic3ltX3NhdmVfTElCUwpAQCAtMzgzNyw3ICszOTMxLDcgQEAKICAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mdHN0KgogCiAgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KLSAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiRwaXBlX3dvcmtzIjsgdGhlbgogICAgIGJyZWFrCiAgIGVsc2UKICAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQpAQCAtMzg2NCwxMiArMzk1OCwxNiBAQAogICAgIFtUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzXSkKIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsXSwgWzFdLAogICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uXSkKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2ltcG9ydF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19pbXBvcnRdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGludG8gYSBsaXN0IG9mIHN5bWJvbHMgdG8gbWFudWFsbHkgcmVsb2NhdGVdKQogX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NdLAogICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sIFsxXSwKICAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyXSkKIF9MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLAogICAgIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4XSwgWzFdLAogICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZF0pCitfTFRfREVDTChbbm1faW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sIFsxXSwKKyAgICBbVGhlIG5hbWUgbGlzdGVyIGludGVyZmFjZV0pCiBfTFRfREVDTChbXSwgW25tX2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAogICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMgZm9yICROTV0pCiBdKSAjIF9MVF9DTURfR0xPQkFMX1NZTUJPTFMKQEAgLTM4ODUsMTcgKzM5ODMsMTggQEAKIAogbTRfaWYoWyQxXSwgW0NYWF0sIFsKICAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgotICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgogICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwogICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKIAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBhaXgqKQogICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwogICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCkBAIC0zOTA2LDggKzQwMDUsOCBAQAogICAgICAgICA7OwogICAgICAgbTY4aykKICAgICAgICAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgICAgICAgICMgYWRkaW5nIHRoZSAnLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgICAgICAgIyBsaWtlICctbTY4MDQwJy4KICAgICAgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwogICAgICAgICA7OwogICAgICAgZXNhYwpAQCAtMzk3Miw3ICs0MDcxLDcgQEAKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBhaXhbWzQtOV1dKikKIAkjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwlpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKIAkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCiAJZWxzZQpAQCAtNDAxMywxNCArNDExMiwxNCBAQAogCWNhc2UgJGNjX2Jhc2VuYW1lIGluCiAJICBDQyopCiAJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotCSAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgaWE2NCAhPSAiJGhvc3RfY3B1IjsgdGhlbgogCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCiAJICAgIGZpCiAJICAgIDs7CiAJICBhQ0MqKQogCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSckd2wtYSAke3dsfWFyY2hpdmUnCiAJICAgIGNhc2UgJGhvc3RfY3B1IGluCiAJICAgIGhwcGEqNjQqfGlhNjQqKQogCSAgICAgICMgK1ogdGhlIGRlZmF1bHQKQEAgLTQwNDksNyArNDE0OCw3IEBACiAJICAgIDs7CiAJZXNhYwogCTs7Ci0gICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUgfCBnbnUqKQogCWNhc2UgJGNjX2Jhc2VuYW1lIGluCiAJICBLQ0MqKQogCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKQEAgLTQwNTcsNyArNDE1Niw3IEBACiAJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCiAJICAgIDs7CiAJICBlY3BjKiApCi0JICAgICMgb2xkIEludGVsIEMrKyBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKwkgICAgIyBvbGQgSW50ZWwgQysrIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KIAkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCiAJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCiAJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKQEAgLTQyMDIsMTcgKzQzMDEsMTggQEAKICAgZmkKIF0sCiBbCi0gIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCiAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCiAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwogCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgYWl4KikKICAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCiAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKICAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwogICAgICAgOzsKIAogICAgIGFtaWdhb3MqKQpAQCAtNDIyMyw4ICs0MzIzLDggQEAKICAgICAgICAgOzsKICAgICAgIG02OGspCiAgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICAjIGFkZGluZyB0aGUgJy1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSAnLW02ODA0MCcuCiAgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKICAgICAgICAgOzsKICAgICAgIGVzYWMKQEAgLTQzMTEsNyArNDQxMSw3IEBACiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGFpeCopCiAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCiAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKICAgICAgIGVsc2UKQEAgLTQzMTksNiArNDQxOSwyMCBAQAogICAgICAgZmkKICAgICAgIDs7CiAKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBuYWdmb3IqKQorICAgICAgICAjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsLVdsLCwnCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKICAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQogICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwogICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KQEAgLTQzMzksNyArNDQ1Myw3IEBACiAJOzsKICAgICAgIGVzYWMKICAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPwotICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHdsLWEgJHt3bH1hcmNoaXZlJwogICAgICAgOzsKIAogICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCkBAIC00MzQ4LDkgKzQ0NjIsOSBAQAogICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKICAgICAgIDs7CiAKLSAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAjIG9sZCBJbnRlbCBmb3IgeDg2XzY0IHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQsIHdoaWNoIHN0aWxsIHN1cHBvcnRlZCAtS1BJQy4KICAgICAgIGVjYyopCiAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCiAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKQEAgLTQzNzUsNiArNDQ4OSwxMiBAQAogCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKIAlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwogCTs7CisgICAgICB0Y2MqKQorCSMgRmFicmljZSBCZWxsYXJkIGV0IGFsJ3MgVGlueSBDIENvbXBpbGVyCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJOzsKICAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQpAQCAtNDQ3Miw3ICs0NTkyLDcgQEAKICAgICAgIDs7CiAKICAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCiAJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJwogCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCiAgICAgICBmaQpAQCAtNDUwMSw3ICs0NjIxLDcgQEAKICAgZmkKIF0pCiBjYXNlICRob3N0X29zIGluCi0gICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAjIEZvciBwbGF0Zm9ybXMgdGhhdCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgogICAqZGpncHAqKQogICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KICAgICA7OwpAQCAtNDU3Nyw3ICs0Njk3LDcgQEAKICAgICBmaQogICAgIDs7CiAgIHB3MzIqKQotICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0kbHRkbGxfY21kcwogICAgIDs7CiAgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCiAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KQEAgLTQ2MjMsOSArNDc0Myw5IEBACiAgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CiAgIF9MVF9UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9CiAgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCi0gICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKLSAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAotICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgJyAoJyBhbmQgJykkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgorICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogJ2F8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyAnYScgYW5kICdiYycsCisgICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgJ2QnLgogICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KICAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CiAgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgpAQCAtNDY0MSw3ICs0NzYxLDcgQEAKICAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCiAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgIGlmIHRlc3QgeWVzICE9ICIkR0NDIjsgdGhlbgogICAgICAgd2l0aF9nbnVfbGQ9bm8KICAgICBmaQogICAgIDs7CkBAIC00NjQ5LDcgKzQ3NjksNyBAQAogICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCiAgICAgd2l0aF9nbnVfbGQ9eWVzCiAgICAgOzsKLSAgb3BlbmJzZCopCisgIG9wZW5ic2QqIHwgYml0cmlnKikKICAgICB3aXRoX2dudV9sZD1ubwogICAgIDs7CiAgIGVzYWMKQEAgLTQ2NTksNyArNDc3OSw3IEBACiAgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgogICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KICAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgYWl4KikKIAkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKQEAgLTQ2ODEsMjQgKzQ4MDEsMjQgQEAKICAgICBlc2FjCiAgIGZpCiAKLSAgaWYgdGVzdCAiJGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlIiA9IHllczsgdGhlbgorICBpZiB0ZXN0IHllcyA9ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiOyB0aGVuCiAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKLSAgICB3bGFyYz0nJHt3bH0nCisgICAgd2xhcmM9JyR3bCcKIAogICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCiAgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCiAgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgogICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWR5bmFtaWMnCiAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgogICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSR3bGFyYyctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyR3bGFyYyctLW5vLXdob2xlLWFyY2hpdmUnCiAgICAgZWxzZQogICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQogICAgIGZpCiAgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgY2FzZSBgJExEIC12IHwgJFNFRCAtZSAncy8oW14pXVwrKVxzXCsvLycgMj4mMWAgaW4KICAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CiAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQogICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KQEAgLTQ3MTEsNyArNDgzMSw3IEBACiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgIGFpeFtbMy05XV0qKQogICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisgICAgICBpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSI7IHRoZW4KIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAJY2F0IDw8X0xUX0VPRiAxPiYyCiAKQEAgLTQ3MzAsNyArNDg1MCw3IEBACiAgICAgICBjYXNlICRob3N0X2NwdSBpbgogICAgICAgcG93ZXJwYykKICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKICAgICAgICAgOzsKICAgICAgIG02OGspCkBAIC00NzQ2LDcgKzQ4NjYsNyBAQAogCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAogCSMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKIAkjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAgICAgICBlbHNlCiAJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogICAgICAgZmkKQEAgLTQ3NTYsNyArNDg3Niw3IEBACiAgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAogICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtYWxsLXN5bWJvbHMnCiAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKICAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KICAgICAgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwpAQCAtNDc2NCw2MSArNDg4NCw2MSBAQAogICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCiAKICAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlLCB1c2UgaXQgYXMKKwkjIGlzOyBvdGhlcndpc2UsIHByZXBlbmQgRVhQT1JUUy4uLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiBfTFRfRExMX0RFRl9QKFskZXhwb3J0X3N5bWJvbHNdKTsgdGhlbgorICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgIGZpfgorICAgICAgICAkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCiAgICAgICBlbHNlCiAJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBoYWlrdSopCi0gICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwogICAgICAgOzsKIAogICAgIGludGVyaXhbWzMtOV1dKikKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKICAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KICAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKICAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKICAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKICAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKICAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAic3xefF98IiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLWgsJHNvbmFtZSAkd2wtLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHdsLS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCiAgICAgICA7OwogCiAgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCiAgICAgICB0bXBfZGlldD1ubwotICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKyAgICAgIGlmIHRlc3QgbGludXgtZGlldGxpYmMgPSAiJGhvc3Rfb3MiOyB0aGVuCiAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KIAkgIGRpZXRcICopIHRtcF9kaWV0PXllczs7CSMgbGludXgtZGlldGxpYmMgd2l0aCBzdGF0aWMgbGlua2luZyAoIWRpZXQtZHluKQogCWVzYWMKICAgICAgIGZpCiAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkRUdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbCBcCi0JICYmIHRlc3QgIiR0bXBfZGlldCIgPSBubworCSAmJiB0ZXN0IG5vID0gIiR0bXBfZGlldCIKICAgICAgIHRoZW4KIAl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKIAl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KICAgICAgICAgcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnJwogCSAgOzsKIAlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQogCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIHRtcF9hZGRmbGFnPScgJHBpY19mbGFnIC1Nbm9tYWluJyA7OwogCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAogCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwpAQCAtNDgyOSw0MiArNDk0OSw0NCBAQAogCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCiAJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CiAJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisgICAgICAgIG5hZ2ZvciopICAgICAgICAgICAgICAgICAgICAgICAgIyBOQUdGT1IgNS4zCisgICAgICAgICAgdG1wX3NoYXJlZGZsYWc9Jy1XbCwtc2hhcmVkJyA7OwogCXhsW1tjQ11dKiB8IGJneGxbW2NDXV0qIHwgbXBpeGxbW2NDXV0qKSAjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCiAJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKIAkgIHRtcF9hZGRmbGFnPSA7OwogCW52Y2MqKQkjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHdsLS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIF9MVF9UQUdWQVIoY29tcGlsZXJfbmVlZHNfb2JqZWN0LCAkMSk9eWVzCiAJICA7OwogCWVzYWMKIAljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KIAkqU3VuXCBDKikJCQkjIFN1biBDIDUuOQotCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAkd2wtLW5vLXdob2xlLWFyY2hpdmUnCiAJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcwogCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwogCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCiAJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CiAJZXNhYwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAKLSAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICBpZiB0ZXN0IHllcyA9ICIkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIjsgdGhlbgogICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyB8IHNlZCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXZlcnNpb24tc2NyaXB0ICR3bCRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJwogICAgICAgICBmaQogCiAJY2FzZSAkY2NfYmFzZW5hbWUgaW4KIAl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCiAJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCiAJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgLW8gJGxpYicKLQkgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCiAJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICAgICAgICAgICAgICRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC12ZXJzaW9uLXNjcmlwdCAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKIAkgIGZpCiAJICA7OwogCWVzYWMKQEAgLTQ4NzgsOCArNTAwMCw4IEBACiAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKIAl3bGFyYz0KICAgICAgIGVsc2UKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGZpCiAgICAgICA7OwogCkBAIC00ODk3LDggKzUwMTksOCBAQAogCiBfTFRfRU9GCiAgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAgICAgICBmaQpAQCAtNDkxMCw3ICs1MDMyLDcgQEAKIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAJY2F0IDw8X0xUX0VPRiAxPiYyCiAKLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogV2FybmluZzogUmVsZWFzZXMgb2YgdGhlIEdOVSBsaW5rZXIgcHJpb3IgdG8gMi4xNi45MS4wLjMgY2Fubm90CiAqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKICoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKICoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CkBAIC00OTI1LDkgKzUwNDcsOSBAQAogCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KIAkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCiAJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAkgIGVsc2UKIAkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogCSAgZmkKQEAgLTQ5NDQsMTUgKzUwNjYsMTUgQEAKIAogICAgICopCiAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBlbHNlCiAJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwogICAgICAgZmkKICAgICAgIDs7CiAgICAgZXNhYwogCi0gICAgaWYgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm87IHRoZW4KKyAgICBpZiB0ZXN0IG5vID0gIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIjsgdGhlbgogICAgICAgcnVucGF0aF92YXI9CiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CkBAIC00OTY4LDcgKzUwOTAsNyBAQAogICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKICAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyIgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgogCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQogCSMgYnJva2VuIGNvbGxlY3QyLgogCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKQEAgLTQ5NzYsMTIgKzUwOTgsMTIgQEAKICAgICAgIDs7CiAKICAgICBhaXhbWzQtOV1dKikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICBpZiB0ZXN0IGlhNjQgPSAiJGhvc3RfY3B1IjsgdGhlbgogCSMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKIAkjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KIAlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCiAJZXhwX3N5bV9mbGFnPSctQmV4cG9ydCcKLQlub19lbnRyeV9mbGFnPSIiCisJbm9fZW50cnlfZmxhZz0KICAgICAgIGVsc2UKIAkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KIAkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCkBAIC00OTk5LDcgKzUxMjEsNyBAQAogCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCiAJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQogCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0JICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgaWYgKHRlc3QgeC1icnRsID0gIngkbGRfZmxhZyIgfHwgdGVzdCB4LVdsLC1icnRsID0gIngkbGRfZmxhZyIpOyB0aGVuCiAJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCiAJICAgIGJyZWFrCiAJICBmaQpAQCAtNTAyMiwxMyArNTE0NCwxMyBAQAogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwogICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworICAgICAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSckd2wtZiwnCiAKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgogCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQogCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawogCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKIAkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCiAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKIAkgIHRoZW4KQEAgLTUwNDcsNjEgKzUxNjksNjEgQEAKIAkgIDs7CiAJZXNhYwogCXNoYXJlZF9mbGFnPSctc2hhcmVkJwotCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHdsLUcnCiAJZmkKICAgICAgIGVsc2UKIAkjIG5vdCB1c2luZyBnY2MKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgogCSAgc2hhcmVkX2ZsYWc9Jy1HJwogCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCiAJICBlbHNlCi0JICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJwogCSAgZmkKIAlmaQogICAgICAgZmkKIAotICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmV4cGFsbCcKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1iZXhwYWxsJwogICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCiAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgogICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMgPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCiAJIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCiAJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgogCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJwogICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KICAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgogICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQotICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bCckbm9fZW50cnlfZmxhZycgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0IC1uICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR3bCRhbGxvd191bmRlZmluZWRfZmxhZyI7IGVsc2UgOjsgZmlgICR3bCckZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMnICckc2hhcmVkX2ZsYWcKICAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworCWlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwogCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHdsJG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnICciXCR3bCRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKIAllbHNlCiAJICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgogCSAjIGVtcHR5IGV4ZWN1dGFibGUuCiAJIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCi0JIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCiAJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAogCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCi0JICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKLQkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJub3RvaycKKwkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC1iZXJvaycKKwkgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KIAkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgZWxzZQogCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKIAkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCiAJICBmaQogCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwogCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR3bC1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHdsLWJFOiRleHBvcnRfc3ltYm9scyRhbGxvd191bmRlZmluZWRfZmxhZ34kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwogCWZpCiAgICAgICBmaQogICAgICAgOzsKQEAgLTUxMTAsNyArNTIzMiw3IEBACiAgICAgICBjYXNlICRob3N0X2NwdSBpbgogICAgICAgcG93ZXJwYykKICAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKLSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JycKICAgICAgICAgOzsKICAgICAgIG02OGspCkBAIC01MTQwLDE2ICs1MjYyLDE3IEBACiAJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KIAlsaWJleHQ9bGliCiAJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0Jc2hyZXh0X2NtZHM9Ii5kbGwiCisJc2hyZXh0X2NtZHM9LmRsbAogCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgICAgc2VkIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLQkgIGVsc2UKLQkgICAgc2VkIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLQkgIGZpfgotCSAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotCSAgbGlua25hbWVzPScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifmxpbmtuYW1lcz0nCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgICBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYiOworICAgICAgICAgICAgZWNobyAiJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZGVmIiA+ICIkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cCI7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgJFNFRCAtZSAnXCcncy9eLy1saW5rIC1FWFBPUlQ6LydcJycgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKKyAgICAgICAgICBmaX4KKyAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisgICAgICAgICAgbGlua25hbWVzPScKIAkjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCiAJIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKIAlfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKQEAgLTUxNTgsMTggKzUyODEsMTggQEAKIAkjIERvbid0IHVzZSByYW5saWIKIAlfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJwogCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+Ci0JICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgotCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotCSAgICAqLmV4ZXwqLkVYRSkgOzsKLQkgICAgKikKLQkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCi0JICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKLQkgICAgICA7OwotCSAgZXNhY34KLQkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCi0JICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7Ci0JICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotCSAgZmknCisgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KKyAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAqLmV4ZXwqLkVYRSkgOzsKKyAgICAgICAgICAgICopCisgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0kbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZQorICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWN+CisgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOworICAgICAgICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisgICAgICAgICAgZmknCiAJOzsKICAgICAgICopCiAJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCkBAIC01MTc4LDcgKzUzMDEsNyBAQAogCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCiAJbGliZXh0PWxpYgogCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotCXNocmV4dF9jbWRzPSIuZGxsIgorCXNocmV4dF9jbWRzPS5kbGwKIAkjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCiAJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBmdW5jX2VjaG9fYWxsICIkZGVwbGlicyIgfCAkU0VEICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCiAJIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KQEAgLTUyMjgsMzMgKzUzNTEsMzMgQEAKICAgICAgIDs7CiAKICAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgIngkb3V0cHV0X29iamRpci8kc29uYW1lIiA9ICJ4JGxpYiIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwogICAgICAgZmkKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wrYiAkd2wkbGliZGlyJwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKIAogICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCiAgICAgICA7OwogCiAgICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQogCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaWYgdGVzdCBubyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bCtiICR3bCRsaWJkaXInCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKLQlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwogCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCiAJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCkBAIC01MjYyLDI1ICs1Mzg1LDI1IEBACiAgICAgICA7OwogCiAgICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorICAgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdDQywkd2l0aF9nbnVfbGQiOyB0aGVuCiAJY2FzZSAkaG9zdF9jcHUgaW4KIAlocHBhKjY0KikKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJaWE2NCopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCSopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtiICR3bCRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJZXNhYwogICAgICAgZWxzZQogCWNhc2UgJGhvc3RfY3B1IGluCiAJaHBwYSo2NCopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJaWE2NCopCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCSopCiAJbTRfaWYoJDEsIFtdLCBbCkBAIC01Mjg4LDE0ICs1NDExLDE0IEBACiAJICAjIChIUDkyNDUzLTAxIEEuMTEuMDEuMjAgZG9lc24ndCwgSFA5MjQ1My0wMSBCLjExLlguMzUxNzUtMzUxNzYuR1AgZG9lcykKIAkgIF9MVF9MSU5LRVJfT1BUSU9OKFtpZiAkQ0MgdW5kZXJzdGFuZHMgLWJdLAogCSAgICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfX2IsICQxKSwgWy1iXSwKLQkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10sCisJICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSwKIAkgICAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnXSldLAotCSAgW19MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCisJICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJ10pCiAJICA7OwogCWVzYWMKICAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAKIAljYXNlICRob3N0X2NwdSBpbgpAQCAtNTMwNiw3ICs1NDI5LDcgQEAKIAkqKQogCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCi0JICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUUnCiAKIAkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCiAJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KQEAgLTUzMTcsMTYgKzU0NDAsMTYgQEAKICAgICAgIDs7CiAKICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAJIyBUcnkgdG8gdXNlIHRoZSAtZXhwb3J0ZWRfc3ltYm9sIGxkIG9wdGlvbiwgaWYgaXQgZG9lcyBub3QKIAkjIHdvcmssIGFzc3VtZSB0aGF0IC1leHBvcnRzX2ZpbGUgZG9lcyBub3Qgd29yayBlaXRoZXIgYW5kCiAJIyBpbXBsaWNpdGx5IGV4cG9ydCBhbGwgc3ltYm9scy4KIAkjIFRoaXMgc2hvdWxkIGJlIHRoZSBzYW1lIGZvciBhbGwgbGFuZ3VhZ2VzLCBzbyBubyBwZXItdGFnIGNhY2hlIHZhcmlhYmxlLgogCUFDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sXSwKIAkgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbF0sCi0JICBbc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKLQkgICBMREZMQUdTPSIkTERGTEFHUyAtc2hhcmVkICR7d2x9LWV4cG9ydGVkX3N5bWJvbCAke3dsfWZvbyAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0vZGV2L251bGwiCisJICBbc2F2ZV9MREZMQUdTPSRMREZMQUdTCisJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAkd2wtZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsL2Rldi9udWxsIgogCSAgIEFDX0xJTktfSUZFTFNFKAogCSAgICAgW0FDX0xBTkdfU09VUkNFKAogCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLApAQCAtNTMzOSwxNiArNTQ2MiwxNiBAQAogICAgICAgZW5kXV0pXSldLAogCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD15ZXNdLAogCSAgICAgIFtsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbD1ub10pCi0gICAgICAgICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiXSkKLQlpZiB0ZXN0ICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID0geWVzOyB0aGVuCi0gICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgJHt3bH0tZXhwb3J0c19maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgICAgIExERkxBR1M9JHNhdmVfTERGTEFHU10pCisJaWYgdGVzdCB5ZXMgPSAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIjsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAkd2wtZXhwb3J0c19maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCWZpCiAgICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogICAgICAgZmkKICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCiAgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKQEAgLTUzNjgsNyArNTQ5MSw3IEBACiAgICAgbmV3c29zNikKICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KICAgICAgIDs7CkBAIC01Mzc2LDI3ICs1NDk5LDE5IEBACiAgICAgKm50byogfCAqcW54KikKICAgICAgIDs7CiAKLSAgICBvcGVuYnNkKikKKyAgICBvcGVuYnNkKiB8IGJpdHJpZyopCiAgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgogCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fYCI7IHRoZW4KIAkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwogCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQotCSAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JICAgICA7OwotCSAgICopCi0JICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgIDs7Ci0JICBlc2FjCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoLCRsaWJkaXInCiAJZmkKICAgICAgIGVsc2UKIAlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCkBAIC01NDEyLDI4ICs1NTI3LDI4IEBACiAgICAgICA7OwogCiAgICAgb3NmMyopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAgICAgICBmaQogICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CiAgICAgICA7OwogCiAgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdDQyI7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAgICAgICBlbHNlCiAJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IHByaW50ZiAiJXNcXG4iICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JFJNICRsaWIuZXhwJworICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICR3bC1pbnB1dCAkd2wkbGliLmV4cCAkY29tcGlsZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKIAogCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCkBAIC01NDQ0LDI0ICs1NTU5LDI0IEBACiAKICAgICBzb2xhcmlzKikKICAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCXdsYXJjPScke3dsfScKLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCXdsYXJjPSckd2wnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR3bC16ICR7d2x9dGV4dCAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHdsLXogJHt3bH10ZXh0ICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogICAgICAgZWxzZQogCWNhc2UgYCRDQyAtViAyPiYxYCBpbgogCSoiQ29tcGlsZXJzIDUuMCIqKQogCSAgd2xhcmM9JycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwogCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAgICRMRCAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAJICA7OwogCSopCi0JICB3bGFyYz0nJHt3bH0nCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgd2xhcmM9JyR3bCcKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgICAgICAgJENDIC1HJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogCSAgOzsKIAllc2FjCiAgICAgICBmaQpAQCAtNTQ3MSwxMSArNTU4NiwxMSBAQAogICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKICAgICAgICopCiAJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLiAgR0NDIGRpc2NhcmRzIGl0IHdpdGhvdXQgYCR3bCcsCisJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0ICckd2wnLAogCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgogCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCi0JaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAkd2wteiAke3dsfWRlZmF1bHRleHRyYWN0JwogCWVsc2UKIAkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKIAlmaQpAQCAtNTQ4NSwxMCArNTYwMCwxMCBAQAogICAgICAgOzsKIAogICAgIHN1bm9zNCopCi0gICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisgICAgICBpZiB0ZXN0IHNlcXVlbnQgPSAiJGhvc3RfdmVuZG9yIjsgdGhlbgogCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KIAkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQogCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCiAgICAgICBmaQpAQCAtNTUzNyw0MyArNTY1Miw0MyBAQAogICAgICAgOzsKIAogICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCi0gICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosdGV4dCcKICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KICAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKIAotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGlmIHRlc3QgeWVzID0gIiRHQ0MiOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKICAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KICAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAogICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAogICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCiAgICAgICAjIGFzIC16IGRlZnMuCi0gICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LG5vZGVmcycKICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIsJGxpYmRpcicKICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwogICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLUJleHBvcnQnCiAgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCiAKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBpZiB0ZXN0IHllcyA9ICIkR0NDIjsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHdsLWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGZpCiAgICAgICA7OwogCkBAIC01NTg4LDE3ICs1NzAzLDE3IEBACiAgICAgICA7OwogICAgIGVzYWMKIAotICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICBpZiB0ZXN0IHNuaSA9ICIkaG9zdF92ZW5kb3IiOyB0aGVuCiAgICAgICBjYXNlICRob3N0IGluCiAgICAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyogfCBzeXN2NSopCi0JX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmxhcmdlZHluc3ltJworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1CbGFyZ2VkeW5zeW0nCiAJOzsKICAgICAgIGVzYWMKICAgICBmaQogICBmaQogXSkKIEFDX01TR19SRVNVTFQoWyRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKLXRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KK3Rlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KIAogX0xUX1RBR1ZBUih3aXRoX2dudV9sZCwgJDEpPSR3aXRoX2dudV9sZAogCkBAIC01NjE1LDcgKzU3MzAsNyBAQAogICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCiAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKIAotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCB5ZXMseWVzID0gIiRHQ0MsJGVuYWJsZV9zaGFyZWQiOyB0aGVuCiAgICAgY2FzZSAkX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBpbgogICAgIConficqKQogICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgpAQCAtNTY5NSwxMiArNTgxMCwxMiBAQAogX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yXSwgWzFdLAogICAgIFtXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgIi1ycGF0aCIgZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50XSkKIF9MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfZGlyZWN0XSwgWzBdLAotICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcworICAgIFtTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUUkc2hhcmVkX2V4dCBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKICAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCiBfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKLSAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHNoYXJlZF9leHQgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCiAgICAgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCi0gICAgImFic29sdXRlIiwgaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgJHtzaGxpYnBhdGhfdmFyfSBpZiB0aGUKKyAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAkc2hsaWJwYXRoX3ZhciBpZiB0aGUKICAgICBsaWJyYXJ5IGlzIHJlbG9jYXRlZF0pCiBfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX21pbnVzX0xdLCBbMF0sCiAgICAgW1NldCB0byAieWVzIiBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCkBAIC01NzQxLDEwICs1ODU2LDEwIEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgQyBjb21waWxlciBhcmUgc3VpdGFibHkKICMgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRyB0byB3cml0ZQotIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCisjIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KIG00X2RlZnVuKFtfTFRfTEFOR19DX0NPTkZJR10sCiBbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAotbHRfc2F2ZV9DQz0iJENDIgorbHRfc2F2ZV9DQz0kQ0MKIEFDX0xBTkdfUFVTSChDKQogCiAjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQyB0ZXN0IHNvdXJjZXMuCkBAIC01Nzg0LDE4ICs1ODk5LDE4IEBACiAgIExUX1NZU19ETE9QRU5fU0VMRgogICBfTFRfQ01EX1NUUklQTElCCiAKLSAgIyBSZXBvcnQgd2hpY2ggbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CisgICMgUmVwb3J0IHdoYXQgbGlicmFyeSB0eXBlcyB3aWxsIGFjdHVhbGx5IGJlIGJ1aWx0CiAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQogCiAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKLSAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KIAogICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKICAgIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgogICBjYXNlICRob3N0X29zIGluCiAgIGFpeDMqKQotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KICAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgogICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgogICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwpAQCAtNTgwMyw4ICs1OTE4LDggQEAKICAgICA7OwogCiAgIGFpeFtbNC05XV0qKQotICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiICYmIHRlc3Qgbm8gPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisgICAgICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwogICAgIGZpCiAgICAgOzsKICAgZXNhYwpAQCAtNTgxMiwxMyArNTkyNywxMyBAQAogCiAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgfHwgZW5hYmxlX3N0YXRpYz15ZXMKICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQogCiAgIF9MVF9DT05GSUcoJDEpCiBmaQogQUNfTEFOR19QT1AKLUNDPSIkbHRfc2F2ZV9DQyIKK0NDPSRsdF9zYXZlX0NDCiBdKSMgX0xUX0xBTkdfQ19DT05GSUcKIAogCkBAIC01ODI2LDE0ICs1OTQxLDE0IEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDKysgY29tcGlsZXIgYXJlIHN1aXRhYmx5CiAjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKLSMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorIyB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCiBtNF9kZWZ1bihbX0xUX0xBTkdfQ1hYX0NPTkZJR10sCiBbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCiBtNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCiBtNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKLWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCi0gICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8Ci0gICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3Qgbm8gIT0gIiRDWFgiICYmCisgICAgKCAodGVzdCBnKysgPSAiJENYWCIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKyAgICAodGVzdCBnKysgIT0gIiRDWFgiKSkpOyB0aGVuCiAgIEFDX1BST0dfQ1hYQ1BQCiBlbHNlCiAgIF9sdF9jYXVnaHRfQ1hYX2Vycm9yPXllcwpAQCAtNTg3NSw3ICs1OTkwLDcgQEAKICMgdGhlIENYWCBjb21waWxlciBpc24ndCB3b3JraW5nLiAgU29tZSB2YXJpYWJsZXMgKGxpa2UgZW5hYmxlX3NoYXJlZCkKICMgYXJlIGN1cnJlbnRseSBhc3N1bWVkIHRvIGFwcGx5IHRvIGFsbCBjb21waWxlcnMgb24gdGhpcyBwbGF0Zm9ybSwKICMgYW5kIHdpbGwgYmUgY29ycnVwdGVkIGJ5IHNldHRpbmcgdGhlbSBiYXNlZCBvbiBhIG5vbi13b3JraW5nIGNvbXBpbGVyLgotaWYgdGVzdCAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIiAhPSB5ZXM7IHRoZW4KK2lmIHRlc3QgeWVzICE9ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiOyB0aGVuCiAgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCiAgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKIApAQCAtNTkxNywzNSArNjAzMiwzNSBAQAogICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCiAgICAgIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdoZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCiAgICAgIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQotICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicKICAgICBlbHNlCiAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CiAgICAgZmkKIAotICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KICAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCiAKICAgICAgIExUX1BBVEhfTEQKIAogICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCiAgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBpZiB0ZXN0IHllcyA9ICIkd2l0aF9nbnVfbGQiOyB0aGVuCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJwogCiAgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CiAgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KICAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKLSAgICAgICAgd2xhcmM9JyR7d2x9JworICAgICAgICB3bGFyYz0nJHdsJwogCiAgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KICAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAogCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0kd2xhcmMnLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICckd2xhcmMnLS1uby13aG9sZS1hcmNoaXZlJwogICAgICAgICBlbHNlCiAgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQogICAgICAgICBmaQpAQCAtNTk4MSwxMiArNjA5NiwxMiBAQAogICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAgICAgICAgIDs7CiAgICAgICBhaXhbWzQtOV1dKikKLSAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgaWYgdGVzdCBpYTY0ID0gIiRob3N0X2NwdSI7IHRoZW4KICAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CiAgICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCiAgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwogICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0gICAgICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgICAgICAgIG5vX2VudHJ5X2ZsYWc9CiAgICAgICAgIGVsc2UKICAgICAgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCiAKQEAgLTYwMjAsMTMgKzYxMzUsMTMgQEAKICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCiAgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR3bC1mLCcKIAotICAgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgogICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzAxMl1dfGFpeDQuW1swMTJdXS4qKQogICAgICAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawogICAgICAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKwotCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgY29sbGVjdDJuYW1lPWAkQ0MgLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKIAkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCiAJICAgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8ICRHUkVQIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAogCSAgdGhlbgpAQCAtNjA0NCw1NiArNjE1OSw1NiBAQAogCSAgZmkKICAgICAgICAgICBlc2FjCiAgICAgICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0JICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgICAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JHNoYXJlZF9mbGFnJyAkd2wtRycKIAkgIGZpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAjIG5vdCB1c2luZyBnY2MKLSAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCiAJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQogCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKIAkgIHNoYXJlZF9mbGFnPSctRycKICAgICAgICAgICBlbHNlCi0JICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgICBpZiB0ZXN0IHllcyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgICAgICBzaGFyZWRfZmxhZz0nJHdsLUcnCiAJICAgIGVsc2UKLQkgICAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgICAgIHNoYXJlZF9mbGFnPSckd2wtYk06U1JFJwogCSAgICBmaQogICAgICAgICAgIGZpCiAgICAgICAgIGZpCiAKLSAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmV4cGFsbCcKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLWJleHBhbGwnCiAgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAogICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KIAkjIGV4cG9ydC4KICAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgIGlmIHRlc3QgeWVzID0gIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIjsgdGhlbgogICAgICAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAogICAgICAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KICAgICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKICAgICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkKICAgICAgICAgICAjIGV4ZWN1dGFibGUuCiAgICAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLSAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKyAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCiAKLSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHdsJyRub19lbnRyeV9mbGFnJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgLW4gIiRhbGxvd191bmRlZmluZWRfZmxhZyI7IHRoZW4gZnVuY19lY2hvX2FsbCAiJHdsJGFsbG93X3VuZGVmaW5lZF9mbGFnIjsgZWxzZSA6OyBmaWAgJHdsJyRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scycgJyRzaGFyZWRfZmxhZwogICAgICAgICBlbHNlCi0gICAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJworICAgICAgICAgIGlmIHRlc3QgaWE2NCA9ICIkaG9zdF9jcHUiOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtUiAkbGliZGlyOi91c3IvbGliOi9saWInCiAJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwkd2wkbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAkd2wkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJyJcJHdsJGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgogICAgICAgICAgIGVsc2UKIAkgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCiAJICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KIAkgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKIAkgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKIAkgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKLQkgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCi0JICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWJlcm5vdG9rJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtYmVyb2snCisJICAgIGlmIHRlc3QgeWVzID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KIAkgICAgICAjIFdlIG9ubHkgdXNlIHRoaXMgY29kZSBmb3IgR05VIGxkcyB0aGF0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlLgotCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgICBlbHNlCiAJICAgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCiAJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCkBAIC02MTAxLDcgKzYyMTYsNyBAQAogCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCiAJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAogCSAgICAjIGxpYnJhcmllcy4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkd2wtYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR3bC1iRTokZXhwb3J0X3N5bWJvbHMkYWxsb3dfdW5kZWZpbmVkX2ZsYWd+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKICAgICAgICAgICBmaQogICAgICAgICBmaQogICAgICAgICA7OwpAQCAtNjExMSw3ICs2MjI2LDcgQEAKIAkgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAogCSAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwogCSAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKIAllbHNlCiAJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAJZmkKQEAgLTYxMzksNTcgKzYyNTQsNTggQEAKIAkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCiAJICBsaWJleHQ9bGliCiAJICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KLQkgIHNocmV4dF9jbWRzPSIuZGxsIgorCSAgc2hyZXh0X2NtZHM9LmRsbAogCSAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtZGxsfmxpbmtuYW1lcz0nCi0JICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KLQkgICAgICAkU0VEIC1uIC1lICdzL1xcXFxcXFwoLipcXFxcXFxcKS8tbGlua1xcXCAtRVhQT1JUOlxcXFxcXFwxLycgLWUgJzFcXFwhcCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cDsKLQkgICAgZWxzZQotCSAgICAgICRTRUQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOwotCSAgICBmaX4KLQkgICAgJENDIC1vICR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAiQCR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmV4cCIgLVdsLC1ETEwsLUlNUExJQjoiJHRvb2xfb3V0cHV0X29iamRpciRsaWJuYW1lLmRsbC5saWIifgotCSAgICBsaW5rbmFtZXM9JworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn5saW5rbmFtZXM9JworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgICAgIGNwICIkZXhwb3J0X3N5bWJvbHMiICIkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiI7CisgICAgICAgICAgICAgIGVjaG8gIiR0b29sX291dHB1dF9vYmpkaXIkc29uYW1lLmRlZiIgPiAiJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHAiOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAkU0VEIC1lICdcJydzL14vLWxpbmsgLUVYUE9SVDovJ1wnJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworICAgICAgICAgICAgZml+CisgICAgICAgICAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisgICAgICAgICAgICBsaW5rbmFtZXM9JwogCSAgIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgogCSAgIyBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKIAkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcwogCSAgIyBEb24ndCB1c2UgcmFubGliCiAJICBfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJwogCSAgX0xUX1RBR1ZBUihwb3N0bGlua19jbWRzLCAkMSk9J2x0X291dHB1dGZpbGU9IkBPVVRQVVRAIn4KLQkgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSJAVE9PTF9PVVRQVVRAIn4KLQkgICAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgotCSAgICAgICouZXhlfCouRVhFKSA7OwotCSAgICAgICopCi0JCWx0X291dHB1dGZpbGU9IiRsdF9vdXRwdXRmaWxlLmV4ZSIKLQkJbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKLQkJOzsKLQkgICAgZXNhY34KLQkgICAgZnVuY190b190b29sX2ZpbGUgIiRsdF9vdXRwdXRmaWxlIn4KLQkgICAgaWYgdGVzdCAiJE1BTklGRVNUX1RPT0wiICE9ICI6IiAmJiB0ZXN0IC1mICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7IHRoZW4KLQkgICAgICAkTUFOSUZFU1RfVE9PTCAtbWFuaWZlc3QgIiRsdF90b29sX291dHB1dGZpbGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiJGx0X3Rvb2xfb3V0cHV0ZmlsZSIgfHwgZXhpdCAxOwotCSAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOwotCSAgICBmaScKKyAgICAgICAgICAgIGx0X3Rvb2xfb3V0cHV0ZmlsZT0iQFRPT0xfT1VUUFVUQCJ+CisgICAgICAgICAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisgICAgICAgICAgICAgICouZXhlfCouRVhFKSA7OworICAgICAgICAgICAgICAqKQorICAgICAgICAgICAgICAgIGx0X291dHB1dGZpbGU9JGx0X291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSRsdF90b29sX291dHB1dGZpbGUuZXhlCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWN+CisgICAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorICAgICAgICAgICAgaWYgdGVzdCA6ICE9ICIkTUFOSUZFU1RfVE9PTCIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisgICAgICAgICAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisgICAgICAgICAgICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworICAgICAgICAgICAgZmknCiAJICA7OwogCSopCiAJICAjIGcrKwogCSAgIyBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKIAkgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCiAJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC0tZXhwb3J0LWFsbC1zeW1ib2xzJwogCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCiAJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCiAJICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKIAogCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JICAgICMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICAgICAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgICBlbHNlCi0JICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICAgICAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQkgICAgZml+Ci0JICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR3bC0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlLCB1c2UgaXQgYXMKKwkgICAgIyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kIEVYUE9SVFMuLi4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIF9MVF9ETExfREVGX1AoWyRleHBvcnRfc3ltYm9sc10pOyB0aGVuCisgICAgICAgICAgICAgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICAgICAgICBmaX4KKyAgICAgICAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkd2wtLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCiAJICBlbHNlCiAJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KIAkgIGZpCkBAIC02MjM0LDE4ICs2MzUwLDE1IEBACiAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCiAgICAgICAgIDs7CiAKLSAgICAgIGdudSopCi0gICAgICAgIDs7Ci0KICAgICAgIGhhaWt1KikKLSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKICAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCiAgICAgICAgIDs7CiAKICAgICAgIGhwdXg5KikKLSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsK2IgJHdsJGxpYmRpcicKICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKIAkJCQkgICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKQEAgLTYyNTcsNyArNjM3MCw3IEBACiAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCiAgICAgICAgICAgICA7OwogICAgICAgICAgIGFDQyopCi0gICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCiAgICAgICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KICAgICAgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgpAQCAtNjI2NiwxMSArNjM3OSwxMSBAQAogICAgICAgICAgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KICAgICAgICAgICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKICAgICAgICAgICAgICMgZGVwZW5kZW5jaWVzLgotICAgICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRFR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisgICAgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgJEVHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwogICAgICAgICAgICAgOzsKICAgICAgICAgICAqKQotICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgaWYgdGVzdCB5ZXMgPSAiJEdYWCI7IHRoZW4KKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAieCRvdXRwdXRfb2JqZGlyLyRzb25hbWUiID0gIngkbGliIiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAogICAgICAgICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCkBAIC02MjgwLDE1ICs2MzkzLDE1IEBACiAgICAgICAgIDs7CiAKICAgICAgIGhwdXgxMCp8aHB1eDExKikKLSAgICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBpZiB0ZXN0IG5vID0gIiR3aXRoX2dudV9sZCI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wrYiAkd2wkbGliZGlyJwogCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogCiAgICAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KICAgICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQogICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgKikKLQkgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJwogICAgICAgICAgICAgICA7OwogICAgICAgICAgIGVzYWMKICAgICAgICAgZmkKQEAgLTYzMTQsMTMgKzY0MjcsMTMgQEAKICAgICAgICAgICBhQ0MqKQogCSAgICBjYXNlICRob3N0X2NwdSBpbgogCSAgICAgIGhwcGEqNjQqKQotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCiAJICAgICAgICA7OwogCSAgICAgIGlhNjQqKQotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR3bCtoICR3bCRzb25hbWUgJHdsK25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgICAgICAgOzsKIAkgICAgICAqKQotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHdsK2ggJHdsJHNvbmFtZSAkd2wrYiAkd2wkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCiAJICAgICAgICA7OwogCSAgICBlc2FjCiAJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKQEAgLTYzMzEsMjAgKzY0NDQsMjAgQEAKIAkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KIAkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQogCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8ICRHUkVQICJcLUwiYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwogCSAgICA7OwogICAgICAgICAgICopCi0JICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICAgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgogCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KIAkgICAgICAgICAgaHBwYSo2NCopCi0JICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAkd2wraCAkd2wkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgICAgICAgICAgIDs7CiAJICAgICAgICAgIGlhNjQqKQotCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAkd2wraCAkd2wkc29uYW1lICR3bCtub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKIAkgICAgICAgICAgICA7OwogCSAgICAgICAgICAqKQotCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHBpY19mbGFnICR3bCtoICR3bCRzb25hbWUgJHdsK2IgJHdsJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgICAgICAgICAgIDs7CiAJICAgICAgICBlc2FjCiAJICAgICAgZmkKQEAgLTYzNTksMjIgKzY0NzIsMjIgQEAKICAgICAgIGludGVyaXhbWzMtOV1dKikKIAlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLQlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtRScKIAkjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCiAJIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQogCSMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKIAkjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCiAJIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawogCSMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0JX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtaCwkc29uYW1lICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInN8XnxffCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oLCRzb25hbWUgJHdsLS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR3bC0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJwogCTs7CiAgICAgICBpcml4NSogfCBpcml4NiopCiAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCiAgICAgICAgICAgQ0MqKQogCSAgICAjIFNHSSBDKysKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAogCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKIAkgICAgIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCkBAIC02MzgzLDIyICs2NDk2LDIyIEBACiAJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJwogCSAgICA7OwogICAgICAgICAgICopCi0JICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICBpZiB0ZXN0IHllcyA9ICIkR1hYIjsgdGhlbgorCSAgICAgIGlmIHRlc3Qgbm8gPSAiJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHdsJHZlcnN0cmluZyJgICR3bC11cGRhdGVfcmVnaXN0cnkgJHdsJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAJICAgICAgZWxzZQotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAtbyAkbGliJwogCSAgICAgIGZpCiAJICAgIGZpCiAJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwogCSAgICA7OwogICAgICAgICBlc2FjCi0gICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGggJHdsJGxpYmRpcicKICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogICAgICAgICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT15ZXMKICAgICAgICAgOzsKIAotICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251IHwgZ251KikKICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgICAgICAgICBLQ0MqKQogCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCkBAIC02NDA2LDggKzY1MTksOCBAQAogCSAgICAjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCiAJICAgICMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKIAkgICAgIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR0ZW1wZXh0XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wkdGVtcGV4dFwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR3bC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCiAJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKIAkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCiAJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgpAQCAtNjQxNiwxMCArNjUyOSwxMCBAQAogCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQogCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CiAJICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgJEdSRVAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwogCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKIAogCSAgICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKIAkgICAgIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgpAQCAtNjQzMyw1OSArNjU0Niw1OSBAQAogCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgogCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KIAkgICAgICAqIlZlcnNpb24gNy4iKikKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCQk7OwogCSAgICAgICopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCiAJICAgICAgICB0bXBfaWR5bj0KIAkgICAgICAgIGNhc2UgJGhvc3RfY3B1IGluCiAJCSAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OwogCQllc2FjCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAJCTs7CiAJICAgIGVzYWMKIAkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0JICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogCSAgICA7OwogICAgICAgICAgIHBnQ0MqIHwgcGdjcHAqKQogICAgICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKIAkgICAgY2FzZSBgJENDIC1WYCBpbgogCSAgICAqcGdDQ1wgW1sxLTVdXS4qIHwgKnBnY3BwXCBbWzEtNV1dLiopCiAJICAgICAgX0xUX1RBR1ZBUihwcmVsaW5rX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLQkJcm0gLXJmICR0cGxkaXJ+Ci0JCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9ianMgJGxpYm9ianMgJGNvbXBpbGVfZGVwbGlic34KLQkJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKKyAgICAgICAgICAgICAgIHJtIC1yZiAkdHBsZGlyfgorICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2JqcyAkbGlib2JqcyAkY29tcGlsZV9kZXBsaWJzfgorICAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgIicKIAkgICAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLQkJcm0gLXJmICR0cGxkaXJ+Ci0JCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJG9sZG9ianMkb2xkX2RlcGxpYnN+Ci0JCSRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgfgotCQkkUkFOTElCICRvbGRsaWInCisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkb2xkb2JqcyRvbGRfZGVwbGlic34KKyAgICAgICAgICAgICAgICAkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKyAgICAgICAgICAgICAgICAkUkFOTElCICRvbGRsaWInCiAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndHBsZGlyPVRlbXBsYXRlLmRpcn4KLQkJcm0gLXJmICR0cGxkaXJ+Ci0JCSRDQyAtLXByZWxpbmtfb2JqZWN0cyAtLWluc3RhbnRpYXRpb25fZGlyICR0cGxkaXIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRjb252ZW5pZW5jZSAkcG9zdGRlcF9vYmplY3RzfgotCQkkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgICAgICBybSAtcmYgJHRwbGRpcn4KKyAgICAgICAgICAgICAgICAkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKyAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzIGBmaW5kICR0cGxkaXIgLW5hbWUgXCoubyB8IHNvcnQgfCAkTkwyU1BgICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwogCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0cGxkaXI9VGVtcGxhdGUuZGlyfgotCQlybSAtcmYgJHRwbGRpcn4KLQkJJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+Ci0JCSRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgYGZpbmQgJHRwbGRpciAtbmFtZSBcKi5vIHwgc29ydCB8ICROTDJTUGAgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICAgICAgICAgICAgcm0gLXJmICR0cGxkaXJ+CisgICAgICAgICAgICAgICAgJENDIC0tcHJlbGlua19vYmplY3RzIC0taW5zdGFudGlhdGlvbl9kaXIgJHRwbGRpciAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJGNvbnZlbmllbmNlICRwb3N0ZGVwX29iamVjdHN+CisgICAgICAgICAgICAgICAgJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtc29uYW1lICR3bCRzb25hbWUgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAJICAgICAgOzsKIAkgICAgKikgIyBWZXJzaW9uIDYgYW5kIGFib3ZlIHVzZSB3ZWFrIHN5bWJvbHMKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKLQkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKIAkgICAgICA7OwogCSAgICBlc2FjCiAKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC0tcnBhdGggJHdsJGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHdsLS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wtLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHdsLS1uby13aG9sZS1hcmNoaXZlJwogICAgICAgICAgICAgOzsKIAkgIGN4eCopCiAJICAgICMgQ29tcGFxIEMrKwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAkd2wtcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCiAKIAkgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKIAkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJwpAQCAtNjQ5OSwxOCArNjYxMiwxOCBAQAogCSAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQogCSAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CiAJICAgICMgZGVwZW5kZW5jaWVzLgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgImxkImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICJYJGxpc3QiIHwgJFhzZWQnCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiWCRsaXN0IiB8ICRYc2VkJwogCSAgICA7OwogCSAgeGwqIHwgbXBpeGwqIHwgYmd4bCopCiAJICAgICMgSUJNIFhMIDguMCBvbiBQUEMsIHdpdGggR05VIGxkCi0JICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JICAgIGlmIHRlc3QgIngkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nIiA9IHh5ZXM7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGlmIHRlc3QgeWVzID0gIiRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciOyB0aGVuCiAJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkJZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0JCSRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICAgICAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgICAgICAgICAgICAgICAkQ0MgLXFta3Nocm9iaiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkd2wkc29uYW1lICR3bC12ZXJzaW9uLXNjcmlwdCAkd2wkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKIAkgICAgZmkKIAkgICAgOzsKIAkgICopCkBAIC02NTE4LDEwICs2NjMxLDEwIEBACiAJICAgICpTdW5cIEMqKQogCSAgICAgICMgU3VuIEMrKyA1LjkKIAkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCi0JICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKKwkgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUckYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKIAkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR3bC0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR3bC0tbm8td2hvbGUtYXJjaGl2ZScKIAkgICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcwogCiAJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgpAQCAtNjU3OSwyMiArNjY5MiwxNyBAQAogICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcwogCTs7CiAKLSAgICAgIG9wZW5ic2QyKikKLSAgICAgICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgotCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotCi0gICAgICBvcGVuYnNkKikKKyAgICAgIG9wZW5ic2QqIHwgYml0cmlnKikKIAlpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgogCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKIAkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCiAJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcwogCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCwkbGliZGlyJworCSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCI7IHRoZW4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR3bC1FJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JHdsYXJjJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnJHdsYXJjJy0tbm8td2hvbGUtYXJjaGl2ZScKIAkgIGZpCiAJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCiAJZWxzZQpAQCAtNjYxMCw5ICs2NzE4LDkgQEAKIAkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQogCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CiAJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gIiRsaWIiIHwgJFNFRCAtZSAicy9cJHRlbXBleHRcLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCiAKLQkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSckd2wtcnBhdGgsJGxpYmRpcicKIAkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgogCiAJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwpAQCAtNjYzMCwxNyArNjczOCwxNyBAQAogICAgICAgICAgIGN4eCopCiAJICAgIGNhc2UgJGhvc3QgaW4KIAkgICAgICBvc2YzKikKLQkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAkd2wtZXhwZWN0X3VucmVzb2x2ZWQgJHdsXConCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIkd2wtc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLXJwYXRoICR3bCRsaWJkaXInCiAJCTs7CiAJICAgICAgKikKIAkgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWInCiAJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lfgotCSAgICAgICAgICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiAkRUNITyAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+Ci0JICAgICAgICAgICRSTSAkbGliLmV4cCcKKyAgICAgICAgICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisgICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCRhbGxvd191bmRlZmluZWRfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lICR3bC1pbnB1dCAkd2wkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJG91dHB1dF9vYmpkaXIvc29fbG9jYXRpb25zIC1vICRsaWJ+CisgICAgICAgICAgICAgICAgICAkUk0gJGxpYi5leHAnCiAJICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCiAJCTs7CiAJICAgIGVzYWMKQEAgLTY2NTUsMjEgKzY3NjMsMjEgQEAKIAkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KIAkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQogCSAgICAjIGRlcGVuZGVuY2llcy4KLQkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0gOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJwogCSAgICA7OwogCSAgKikKLQkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgaWYgdGVzdCB5ZXMsbm8gPSAiJEdYWCwkd2l0aF9nbnVfbGQiOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHdsLWV4cGVjdF91bnJlc29sdmVkICR3bFwqJwogCSAgICAgIGNhc2UgJGhvc3QgaW4KIAkgICAgICAgIG9zZjMqKQotCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1zb25hbWUgJHdsJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHdsLXNldF92ZXJzaW9uICR3bCR2ZXJzdHJpbmciYCAkd2wtdXBkYXRlX3JlZ2lzdHJ5ICR3bCRvdXRwdXRfb2JqZGlyL3NvX2xvY2F0aW9ucyAtbyAkbGliJwogCQkgIDs7CiAJICAgICAgICAqKQotCSAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtbXN5bSAkd2wtc29uYW1lICR3bCRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR3bC1zZXRfdmVyc2lvbiAkd2wkdmVyc3RyaW5nImAgJHdsLXVwZGF0ZV9yZWdpc3RyeSAkd2wkb3V0cHV0X29iamRpci9zb19sb2NhdGlvbnMgLW8gJGxpYicKIAkJICA7OwogCSAgICAgIGVzYWMKIAotCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1ycGF0aCAkd2wkbGliZGlyJwogCSAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKIAogCSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKQEAgLTY3MTUsOSArNjgyMyw5IEBACiAJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKICAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsJDEpPXllcwogCSAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCi0JICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCiAJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAgICAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHt3bH0tTSAke3dsfSRsaWIuZXhwIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgICAgICAgICRDQyAtRyRhbGxvd191bmRlZmluZWRfZmxhZyAkd2wtTSAkd2wkbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogCiAJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCiAJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCkBAIC02NzI1LDcgKzY4MzMsNyBAQAogCSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CiAJICAgICAgKikKIAkJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBhbmQgcmVvcmRlciBsaW5rZXIgb3B0aW9ucywKLQkJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4KKwkJIyBidXQgdW5kZXJzdGFuZHMgJy16IGxpbmtlcl9mbGFnJy4KIAkgICAgICAgICMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCiAJCV9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKIAkgICAgICAgIDs7CkBAIC02NzQyLDMwICs2ODUwLDMwIEBACiAJICAgIDs7CiAgICAgICAgICAgZ2N4KikKIAkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliJwogCiAJICAgICMgVGhlIEMrKyBjb21waWxlciBtdXN0IGJlIHVzZWQgdG8gY3JlYXRlIHRoZSBhcmNoaXZlLgogCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDICRMREZMQUdTIC1hcmNoaXZlIC1vICRvbGRsaWIgJG9sZG9ianMnCiAJICAgIDs7CiAgICAgICAgICAgKikKIAkgICAgIyBHTlUgQysrIGNvbXBpbGVyIHdpdGggU29sYXJpcyBsaW5rZXIKLQkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0teiAke3dsfWRlZnMnCisJICAgIGlmIHRlc3QgeWVzLG5vID0gIiRHWFgsJHdpdGhfZ251X2xkIjsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR3bC16ICR7d2x9ZGVmcycKIAkgICAgICBpZiAkQ0MgLS12ZXJzaW9uIHwgJEdSRVAgLXYgJ14yXC43JyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAkd2wtaCAkd2wkc29uYW1lIC1vICRsaWInCiAJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCQkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisgICAgICAgICAgICAgICAgICAkQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICR3bC1NICR3bCRsaWIuZXhwICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogCiAJICAgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCiAJICAgICAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KIAkgICAgICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgogCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJwogCSAgICAgIGVsc2UKLQkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgYC1HJyBOT1QgYC1zaGFyZWQnIG9uIHRoaXMKKwkgICAgICAgICMgZysrIDIuNyBhcHBlYXJzIHRvIHJlcXVpcmUgJy1HJyBOT1QgJy1zaGFyZWQnIG9uIHRoaXMKIAkgICAgICAgICMgcGxhdGZvcm0uCi0JICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR3bC1oICR3bCRzb25hbWUgLW8gJGxpYicKIAkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JCSAgJENDIC1HIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKyAgICAgICAgICAgICAgICAgICRDQyAtRyAtbm9zdGRsaWIgJHdsLU0gJHdsJGxpYi5leHAgJHdsLWggJHdsJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCiAKIAkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKIAkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgpAQCAtNjc3MywxMSArNjg4MSwxMSBAQAogCSAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtRyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKIAkgICAgICBmaQogCi0JICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHdsLVIgJHdsJGxpYmRpcicKIAkgICAgICBjYXNlICRob3N0X29zIGluCiAJCXNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CiAJCSopCi0JCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJCSAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckd2wteiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHdsLXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKIAkJICA7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKQEAgLTY3ODYsNTIgKzY4OTQsNTIgQEAKICAgICAgICAgOzsKIAogICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCi0gICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosdGV4dCcKICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwogICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KICAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKIAogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KICAgICAgICAgQ0MqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAkqKQotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogICAgICAgZXNhYwogICAgICAgOzsKIAogICAgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLQkjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorCSMgTm90ZTogV2UgQ0FOTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKIAkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCiAJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCiAJIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAogCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAogCSMgYXMgLXogZGVmcy4KLQlfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKLQlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworCV9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHdsLXosdGV4dCcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR3bC16LG5vZGVmcycKIAlfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KIAlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1SLCRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR3bC1SLCRsaWJkaXInCiAJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCiAJX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0JX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSckd2wtQmV4cG9ydCcKIAlydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCiAKIAljYXNlICRjY19iYXNlbmFtZSBpbgogICAgICAgICAgIENDKikKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR3bC1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgICBfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1UcHJlbGlua19vYmplY3RzICRvbGRvYmpzfgotCSAgICAgICciJF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpIgorICAgICAgICAgICAgICAnIiRfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSIKIAkgICAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgotCSAgICAgICciJF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKSIKKyAgICAgICAgICAgICAgJyIkX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpIgogCSAgICA7OwogCSAgKikKLQkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkd2wtaCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHdsLUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR3bC1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICAgIDs7CiAJZXNhYwogICAgICAgOzsKQEAgLTY4NjIsMTAgKzY5NzAsMTAgQEAKICAgICBlc2FjCiAKICAgICBBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCi0gICAgdGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworICAgIHRlc3Qgbm8gPSAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KIAotICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCi0gICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0kR1hYCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAogCiAgICAgIyMgQ0FWRUFUIEVNUFRPUjoKICAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQpAQCAtNjg5Miw3ICs3MDAwLDcgQEAKICAgbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECiAgIGx0X2N2X3Byb2dfZ251X2xkY3h4PSRsdF9jdl9wcm9nX2dudV9sZAogICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotZmkgIyB0ZXN0ICIkX2x0X2NhdWdodF9DWFhfZXJyb3IiICE9IHllcworZmkgIyB0ZXN0IHllcyAhPSAiJF9sdF9jYXVnaHRfQ1hYX2Vycm9yIgogCiBBQ19MQU5HX1BPUAogXSkjIF9MVF9MQU5HX0NYWF9DT05GSUcKQEAgLTY5MTQsOSArNzAyMiw5IEBACiBBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pCiBmdW5jX3N0cmlwbmFtZV9jbmYgKCkKIHsKLSAgY2FzZSAkezJ9IGluCi0gIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7Ci0gICopICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyUkezJ9XCQlJSJgOzsKKyAgY2FzZSBAU3xAMiBpbgorICAuKikgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiQFN8QDMiIHwgJFNFRCAicyVeQFN8QDElJTsgcyVcXFxcQFN8QDJcJCUlImA7OworICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiQFN8QDMiIHwgJFNFRCAicyVeQFN8QDElJTsgcyVAU3xAMlwkJSUiYDs7CiAgIGVzYWMKIH0gIyBmdW5jX3N0cmlwbmFtZV9jbmYKIF0pIyBfTFRfRlVOQ19TVFJJUE5BTUVfQ05GCkBAIC03MDA0LDEzICs3MTEyLDEzIEBACiAgIHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmU9bm8KIAogICBmb3IgcCBpbiBgZXZhbCAiJG91dHB1dF92ZXJib3NlX2xpbmtfY21kImA7IGRvCi0gICAgY2FzZSAke3ByZXZ9JHtwfSBpbgorICAgIGNhc2UgJHByZXYkcCBpbgogCiAgICAgLUwqIHwgLVIqIHwgLWwqKQogICAgICAgICMgU29tZSBjb21waWxlcnMgcGxhY2Ugc3BhY2UgYmV0d2VlbiAiLXtMLFJ9IiBhbmQgdGhlIHBhdGguCiAgICAgICAgIyBSZW1vdmUgdGhlIHNwYWNlLgotICAgICAgIGlmIHRlc3QgJHAgPSAiLUwiIHx8Ci0gICAgICAgICAgdGVzdCAkcCA9ICItUiI7IHRoZW4KKyAgICAgICBpZiB0ZXN0IHgtTCA9ICIkcCIgfHwKKyAgICAgICAgICB0ZXN0IHgtUiA9ICIkcCI7IHRoZW4KIAkgcHJldj0kcAogCSBjb250aW51ZQogICAgICAgIGZpCkBAIC03MDI2LDE2ICs3MTM0LDE2IEBACiAgICAgICAgY2FzZSAkcCBpbgogICAgICAgID0qKSBmdW5jX3N0cmlwbmFtZV9jbmYgJz0nICcnICIkcCI7IHA9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CiAgICAgICAgZXNhYwotICAgICAgIGlmIHRlc3QgIiRwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lIiA9IG5vOyB0aGVuCi0JIGNhc2UgJHtwcmV2fSBpbgorICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCisJIGNhc2UgJHByZXYgaW4KIAkgLUwgfCAtUikKIAkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKIAkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKIAkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KIAkgICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KLQkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgorCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0kcHJldiRwCiAJICAgZWxzZQotCSAgICAgX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0iJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSAke3ByZXZ9JHtwfSIKKwkgICAgIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHByZXYkcCIKIAkgICBmaQogCSAgIDs7CiAJICMgVGhlICItbCIgY2FzZSB3b3VsZCBuZXZlciBjb21lIGJlZm9yZSB0aGUgb2JqZWN0IGJlaW5nCkBAIC03MDQzLDkgKzcxNTEsOSBAQAogCSBlc2FjCiAgICAgICAgZWxzZQogCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpIjsgdGhlbgotCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtwcmV2fSR7cH0iCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSRwcmV2JHAKIAkgZWxzZQotCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICR7cHJldn0ke3B9IgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICRwcmV2JHAiCiAJIGZpCiAgICAgICAgZmkKICAgICAgICBwcmV2PQpAQCAtNzA2MCwxNSArNzE2OCwxNSBAQAogCSBjb250aW51ZQogICAgICAgIGZpCiAKLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorICAgICAgIGlmIHRlc3Qgbm8gPSAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiOyB0aGVuCiAJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkiOyB0aGVuCi0JICAgX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9JHAKIAkgZWxzZQogCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSAkcCIKIAkgZmkKICAgICAgICBlbHNlCiAJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgotCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRwIgorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9JHAKIAkgZWxzZQogCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpICRwIgogCSBmaQpAQCAtNzExNSw3ICs3MjIzLDcgQEAKICAgICAgIDs7CiAgICAgZXNhYwogCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyAhPSAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IjsgdGhlbgogICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKICAgICBmaQogICAgIDs7CkBAIC03MTM4LDcgKzcyNDYsNyBAQAogICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCiAgICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAogICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KKyAgICBpZiB0ZXN0IHllcyAhPSAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IjsgdGhlbgogICAgICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywkMSk9Jy1saWJyYXJ5PUNzdGQgLWxpYnJhcnk9Q3J1bicKICAgICBmaQogICAgIDs7CkBAIC03MTUyLDcgKzcyNjAsNyBAQAogZXNhYwogIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9CiBpZiB0ZXN0IC1uICIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IjsgdGhlbgotIF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9YGVjaG8gIiAke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9IiB8ICR7U0VEfSAtZSAncyEgLUwhICFnJyAtZSAncyFeICEhJ2AKKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPWBlY2hvICIgJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSIgfCAkU0VEIC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAogZmkKIF9MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzXSwgWzFdLAogICAgIFtUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkIGxpYnJhcnldKQpAQCAtNzE3MiwxMCArNzI4MCwxMCBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKICMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KIG00X2RlZnVuKFtfTFRfTEFOR19GNzdfQ09ORklHXSwKIFtBQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKLWlmIHRlc3QgLXogIiRGNzciIHx8IHRlc3QgIlgkRjc3IiA9ICJYbm8iOyB0aGVuCitpZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0IG5vID0gIiRGNzciOyB0aGVuCiAgIF9sdF9kaXNhYmxlX0Y3Nz15ZXMKIGZpCiAKQEAgLTcyMTIsNyArNzMyMCw3IEBACiAjIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCiAjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCiAjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KLWlmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GNzciOyB0aGVuCiAgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCiAgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAogICAgICAgc3Vicm91dGluZSB0CkBAIC03MjM0LDcgKzczNDIsNyBAQAogICBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCiAKICAgIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLSAgbHRfc2F2ZV9DQz0iJENDIgorICBsdF9zYXZlX0NDPSRDQwogICBsdF9zYXZlX0dDQz0kR0NDCiAgIGx0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKICAgQ0M9JHtGNzctImY3NyJ9CkBAIC03MjQ4LDIxICs3MzU2LDIxIEBACiAgICAgQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQogCiAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotICAgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworICAgIHRlc3Qgbm8gPSAiJGNhbl9idWlsZF9zaGFyZWQiICYmIGVuYWJsZV9zaGFyZWQ9bm8KIAogICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAogICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBhaXgzKikKLSAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiICYmIGVuYWJsZV9zdGF0aWM9bm8KICAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KICAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCiAgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwogICAgICAgICBmaQogICAgICAgICA7OwogICAgICAgYWl4W1s0LTldXSopCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlpZiB0ZXN0IGlhNjQgIT0gIiRob3N0X2NwdSIgJiYgdGVzdCBubyA9ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyI7IHRoZW4KKwkgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCiAJZmkKICAgICAgICAgOzsKICAgICBlc2FjCkBAIC03MjcwLDExICs3Mzc4LDExIEBACiAKICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCiAgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi0gICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgdGVzdCB5ZXMgPSAiJGVuYWJsZV9zaGFyZWQiIHx8IGVuYWJsZV9zdGF0aWM9eWVzCiAgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQogCi0gICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEc3NyIKLSAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKyAgICBfTFRfVEFHVkFSKEdDQywgJDEpPSRHNzcKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9JExECiAKICAgICAjIyBDQVZFQVQgRU1QVE9SOgogICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCkBAIC03MjkxLDkgKzczOTksOSBAQAogICBmaSAjIHRlc3QgLW4gIiRjb21waWxlciIKIAogICBHQ0M9JGx0X3NhdmVfR0NDCi0gIENDPSIkbHRfc2F2ZV9DQyIKLSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi1maSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllcworICBDQz0kbHRfc2F2ZV9DQworICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitmaSAjIHRlc3QgeWVzICE9ICIkX2x0X2Rpc2FibGVfRjc3IgogCiBBQ19MQU5HX1BPUAogXSkjIF9MVF9MQU5HX0Y3N19DT05GSUcKQEAgLTczMDMsMTEgKzc0MTEsMTEgQEAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiBjb21waWxlciBhcmUKICMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KIG00X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAogW0FDX0xBTkdfUFVTSChGb3J0cmFuKQogCi1pZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3QgIlgkRkMiID0gIlhubyI7IHRoZW4KK2lmIHRlc3QgLXogIiRGQyIgfHwgdGVzdCBubyA9ICIkRkMiOyB0aGVuCiAgIF9sdF9kaXNhYmxlX0ZDPXllcwogZmkKIApAQCAtNzM0NCw3ICs3NDUyLDcgQEAKICMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQogIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAogIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCi1pZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgoraWYgdGVzdCB5ZXMgIT0gIiRfbHRfZGlzYWJsZV9GQyI7IHRoZW4KICAgIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKICAgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJcCiAgICAgICBzdWJyb3V0aW5lIHQKQEAgLTczNjYsNyArNzQ3NCw3IEBACiAgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKIAogICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfQ0M9JENDCiAgIGx0X3NhdmVfR0NDPSRHQ0MKICAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwogICBDQz0ke0ZDLSJmOTUifQpAQCAtNzM4MiwyMSArNzQ5MCwyMSBAQAogICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKIAogICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKLSAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICB0ZXN0IG5vID0gIiRjYW5fYnVpbGRfc2hhcmVkIiAmJiBlbmFibGVfc2hhcmVkPW5vCiAKICAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKICAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCiAgICAgY2FzZSAkaG9zdF9vcyBpbgogICAgICAgYWl4MyopCi0gICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiAmJiBlbmFibGVfc3RhdGljPW5vCiAgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCiAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgogICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKICAgICAgICAgZmkKICAgICAgICAgOzsKICAgICAgIGFpeFtbNC05XV0qKQotCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLQkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJaWYgdGVzdCBpYTY0ICE9ICIkaG9zdF9jcHUiICYmIHRlc3Qgbm8gPSAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciOyB0aGVuCisJICB0ZXN0IHllcyA9ICIkZW5hYmxlX3NoYXJlZCIgJiYgZW5hYmxlX3N0YXRpYz1ubwogCWZpCiAgICAgICAgIDs7CiAgICAgZXNhYwpAQCAtNzQwNCwxMSArNzUxMiwxMSBAQAogCiAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQogICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIHRlc3QgeWVzID0gIiRlbmFibGVfc2hhcmVkIiB8fCBlbmFibGVfc3RhdGljPXllcwogICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKIAotICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRhY19jdl9mY19jb21waWxlcl9nbnUiCi0gICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAogCiAgICAgIyMgQ0FWRUFUIEVNUFRPUjoKICAgICAjIyBUaGVyZSBpcyBubyBlbmNhcHN1bGF0aW9uIHdpdGhpbiB0aGUgZm9sbG93aW5nIG1hY3JvcywgZG8gbm90IGNoYW5nZQpAQCAtNzQyOCw3ICs3NTM2LDcgQEAKICAgR0NDPSRsdF9zYXZlX0dDQwogICBDQz0kbHRfc2F2ZV9DQwogICBDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCi1maSAjIHRlc3QgIiRfbHRfZGlzYWJsZV9GQyIgIT0geWVzCitmaSAjIHRlc3QgeWVzICE9ICIkX2x0X2Rpc2FibGVfRkMiCiAKIEFDX0xBTkdfUE9QCiBdKSMgX0xUX0xBTkdfRkNfQ09ORklHCkBAIC03NDM4LDcgKzc1NDYsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgSmF2YSBDb21waWxlciBjb21waWxlcgogIyBhcmUgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRwotIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvICdsaWJ0b29sJy4KIG00X2RlZnVuKFtfTFRfTEFOR19HQ0pfQ09ORklHXSwKIFtBQ19SRVFVSVJFKFtMVF9QUk9HX0dDSl0pZG5sCiBBQ19MQU5HX1NBVkUKQEAgLTc0NzIsNyArNzU4MCw3IEBACiBDRkxBR1M9JEdDSkZMQUdTCiBjb21waWxlcj0kQ0MKIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorX0xUX1RBR1ZBUihMRCwgJDEpPSRMRAogX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQogCiAjIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCkBAIC03NTA5LDcgKzc2MTcsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIHRoZSBHTlUgR28gY29tcGlsZXIKICMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCiBtNF9kZWZ1bihbX0xUX0xBTkdfR09fQ09ORklHXSwKIFtBQ19SRVFVSVJFKFtMVF9QUk9HX0dPXSlkbmwKIEFDX0xBTkdfU0FWRQpAQCAtNzU0Myw3ICs3NjUxLDcgQEAKIENGTEFHUz0kR09GTEFHUwogY29tcGlsZXI9JENDCiBfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCi1fTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKK19MVF9UQUdWQVIoTEQsICQxKT0kTEQKIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKIAogIyBHbyBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCkBAIC03NTgwLDcgKzc2ODgsNyBAQAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIKICMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKLSMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byAnbGlidG9vbCcuCiBtNF9kZWZ1bihbX0xUX0xBTkdfUkNfQ09ORklHXSwKIFtBQ19SRVFVSVJFKFtMVF9QUk9HX1JDXSlkbmwKIEFDX0xBTkdfU0FWRQpAQCAtNzU5Niw3ICs3NzA0LDcgQEAKIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKIAogIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0kbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlCiAKICMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KIF9MVF9UQUdfQ09NUElMRVIKQEAgLTc2MDYsNyArNzcxNCw3IEBACiBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCiAKICMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCitsdF9zYXZlX0NDPSRDQwogbHRfc2F2ZV9DRkxBR1M9JENGTEFHUwogbHRfc2F2ZV9HQ0M9JEdDQwogR0NDPQpAQCAtNzYzNSw3ICs3NzQzLDcgQEAKIFttNF9pZmRlZihbQUNfUFJPR19HQ0pdLCBbQUNfUFJPR19HQ0pdLAogICBbbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLCBbQV1bTV9QUk9HX0dDSl0sCiAgICAgW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osKQotICAgICAgdGVzdCAieCR7R0NKRkxBR1Mrc2V0fSIgPSB4c2V0IHx8IEdDSkZMQUdTPSItZyAtTzIiCisgICAgICB0ZXN0IHNldCA9ICIke0dDSkZMQUdTK3NldH0iIHx8IEdDSkZMQUdTPSItZyAtTzIiCiAgICAgICBBQ19TVUJTVChHQ0pGTEFHUyldKV0pW11kbmwKIF0pCiAKQEAgLTc3NDYsNyArNzg1NCw3IEBACiAjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcwogIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KIGZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbwotICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICB0ZXN0ICEgLWYgIiRsdF9hY19zZWQiICYmIGNvbnRpbnVlCiAgIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgogICBsdF9hY19jb3VudD0wCiAgIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgpAQCAtNzc2Myw5ICs3ODcxLDkgQEAKICAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhawogICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKICAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKLSAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgICB0ZXN0IDEwIC1sdCAiJGx0X2FjX2NvdW50IiAmJiBicmVhawogICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCi0gICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfYWNfY291bnQiIC1ndCAiJGx0X2FjX21heCI7IHRoZW4KICAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKICAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKICAgICBmaQpAQCAtNzc4OSwyNyArNzg5Nyw3IEBACiAjIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKICMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgogbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCi1bQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzXSkKLSMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCi14c2lfc2hlbGw9bm8KLSggX2x0X2R1bW15PSJhL2IvYyIKLSAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKLSAgICAgID0gYyxhL2IsYi9jLCBcCi0gICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAotICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCi0gICYmIHhzaV9zaGVsbD15ZXMKLUFDX01TR19SRVNVTFQoWyR4c2lfc2hlbGxdKQotX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW3hzaV9zaGVsbD0nJHhzaV9zaGVsbCddKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICIrPSJdKQotbHRfc2hlbGxfYXBwZW5kPW5vCi0oIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkWzFdKz1cJFsyXSIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCi0gICAgPi9kZXYvbnVsbCAyPiYxIFwKLSAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcwotQUNfTVNHX1JFU1VMVChbJGx0X3NoZWxsX2FwcGVuZF0pCi1fTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJ10pCi0KLWlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorW2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgogICBsdF91bnNldD11bnNldAogZWxzZQogICBsdF91bnNldD1mYWxzZQpAQCAtNzgzMywxMDIgKzc5MjEsOSBAQAogXSkjIF9MVF9DSEVDS19TSEVMTF9GRUFUVVJFUwogCiAKLSMgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRSAoRlVOQ05BTUUsIFJFUExBQ0VNRU5ULUJPRFkpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBJbiBgJGNmZ2ZpbGUnLCBsb29rIGZvciBmdW5jdGlvbiBGVU5DTkFNRSBkZWxpbWl0ZWQgYnkgYF5GVU5DTkFNRSAoKSQnIGFuZAotIyAnXn0gRlVOQ05BTUUgJywgYW5kIHJlcGxhY2UgaXRzIGJvZHkgd2l0aCBSRVBMQUNFTUVOVC1CT0RZLgotbTRfZGVmdW4oW19MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0VdLAotW2RubCB7Ci1zZWQgLWUgJy9eJDEgKCkkLywvXn0gIyAkMSAvY1wKLSQxICgpXAote1wKLW00X2JwYXRzdWJzdHMoWyQyXSwgWyRdLCBbXFxdLCBbXlwoWwkgXVwpXSwgW1xcXDFdKQotfSAjIEV4dGVuZGVkLXNoZWxsICQxIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKLSAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCi0gICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKLXRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci1dKQotCi0KLSMgX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOUwotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFJlcGxhY2UgZXhpc3RpbmcgcG9ydGFibGUgaW1wbGVtZW50YXRpb25zIG9mIHNldmVyYWwgc2hlbGwgZnVuY3Rpb25zIHdpdGgKLSMgZXF1aXZhbGVudCBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbnMgd2hlcmUgdGhvc2UgZmVhdHVyZXMgYXJlIGF2YWlsYWJsZS4uCi1tNF9kZWZ1bihbX0xUX1BST0dfUkVQTEFDRV9TSEVMTEZOU10sCi1baWYgdGVzdCB4IiR4c2lfc2hlbGwiID0geHllczsgdGhlbgotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVdLCBbZG5sCi0gICAgY2FzZSAkezF9IGluCi0gICAgICAqLyopIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7MSUvKn0kezJ9IiA7OwotICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7OwotICAgIGVzYWNdKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYmFzZW5hbWVdLCBbZG5sCi0gICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZV0sIFtkbmwKLSAgICBjYXNlICR7MX0gaW4KLSAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7Ci0gICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7Ci0gICAgZXNhYwotICAgIGZ1bmNfYmFzZW5hbWVfcmVzdWx0PSIkezEjIyovfSJdKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3RyaXBuYW1lXSwgW2RubAotICAgICMgcGRrc2ggNS4yLjE0IGRvZXMgbm90IGRvICR7WCUkWX0gY29ycmVjdGx5IGlmIGJvdGggWCBhbmQgWSBhcmUKLSAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycywgc28gYXNzaWduIG9uZSB0byBvcmRpbmFyeSBwYXJhbWV0ZXIgZmlyc3QuCi0gICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M30KLSAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQjIiR7MX0ifQotICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCUiJHsyfSJ9XSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX3NwbGl0X2xvbmdfb3B0XSwgW2RubAotICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfQotICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfYXJnPSR7MSMqPX1dKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfc2hvcnRfb3B0XSwgW2RubAotICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZz0kezEjPz99Ci0gICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfbmFtZT0kezElIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcifV0pCi0KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19sbzJvXSwgW2RubAotICAgIGNhc2UgJHsxfSBpbgotICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOzsKLSAgICAgICopICAgIGZ1bmNfbG8yb19yZXN1bHQ9JHsxfSA7OwotICAgIGVzYWNdKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfeGZvcm1dLCBbICAgIGZ1bmNfeGZvcm1fcmVzdWx0PSR7MSUuKn0ubG9dKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXJpdGhdLCBbICAgIGZ1bmNfYXJpdGhfcmVzdWx0PSQoKCAkWypdICkpXSkKLQotICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xlbl0sIFsgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XSkKLWZpCi0KLWlmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KLSAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRdLCBbICAgIGV2YWwgIiR7MX0rPVxcJHsyfSJdKQotCi0gIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfYXBwZW5kX3F1b3RlZF0sIFtkbmwKLSAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkezJ9IgotZG5sIG00IGV4cGFuc2lvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCB0aGVuIHRoZSBzaGVsbCBldmFsIHR1cm5zIHRoYXQgaW50byBcCi0gICAgZXZhbCAiJHsxfSs9XFxcXCBcXCRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCJdKQotCi0gICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCB3aGVyZSBwb3NzaWJsZSBieSBkaXJlY3QgdXNlIG9mICcrPScKLSAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0gIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci1lbHNlCi0gICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCi0gIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFtbYS16QS1aX11dXHsxLFx9XCkgIiVcMT0iJFwxJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKLSAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKLSAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCi0gIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06Ci1maQotCi1pZiB0ZXN0IHgiJF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWwiID0geCI6IjsgdGhlbgotICBBQ19NU0dfV0FSTihbVW5hYmxlIHRvIHN1YnN0aXR1dGUgZXh0ZW5kZWQgc2hlbGwgZnVuY3Rpb25zIGluICRvZmlsZV0pCi1maQotXSkKLQogIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZXRlcm1pbmUgd2hpY2ggZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHNob3VsZCBiZSB1c2VkIGJ5CisjIERldGVybWluZSB3aGF0IGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCBieQogIyBmdW5jX3RvX2hvc3RfZmlsZSAoYW5kLCBpbXBsaWNpdGx5LCBieSBmdW5jX3RvX2hvc3RfcGF0aCkuICBUaGVzZSBhcmUgbmVlZGVkCiAjIGZvciBjZXJ0YWluIGNyb3NzLWNvbXBpbGUgY29uZmlndXJhdGlvbnMgYW5kIG5hdGl2ZSBtaW5ndy4KIG00X2RlZnVuKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0b3B0aW9ucy5tNCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRvcHRpb25zLm00CmluZGV4IDVkOWFjZDguLjUwYzc3MjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRvcHRpb25zLm00CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRvcHRpb25zLm00CkBAIC0xLDE0ICsxLDE0IEBACiAjIEhlbHBlciBmdW5jdGlvbnMgZm9yIG9wdGlvbiBoYW5kbGluZy4gICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KICMKLSMgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotIyAgIEluYy4KKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgMjAwNy0yMDA5LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZQorIyAgIEZvdW5kYXRpb24sIEluYy4KICMgICBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwogIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCiAKLSMgc2VyaWFsIDcgbHRvcHRpb25zLm00CisjIHNlcmlhbCA4IGx0b3B0aW9ucy5tNAogCiAjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgogQUNfREVGVU4oW0xUT1BUSU9OU19WRVJTSU9OXSwgW200X2lmKFsxXSldKQpAQCAtMjksNyArMjksNyBAQAogW200X2RlZmluZShfTFRfTUFOR0xFX09QVElPTihbJDFdLCBbJDJdKSlkbmwKIG00X2lmZGVmKF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCiAgICAgICAgIF9MVF9NQU5HTEVfREVGVU4oWyQxXSwgWyQyXSksCi0gICAgW200X3dhcm5pbmcoW1Vua25vd24gJDEgb3B0aW9uIGAkMiddKV0pW11kbmwKKyAgICBbbTRfd2FybmluZyhbVW5rbm93biAkMSBvcHRpb24gJyQyJ10pXSlbXWRubAogXSkKIAogCkBAIC03NSwxMyArNzUsMTMgQEAKICAgZG5sCiAgIGRubCBJZiBubyByZWZlcmVuY2Ugd2FzIG1hZGUgdG8gdmFyaW91cyBwYWlycyBvZiBvcHBvc2luZyBvcHRpb25zLCB0aGVuCiAgIGRubCB3ZSBydW4gdGhlIGRlZmF1bHQgbW9kZSBoYW5kbGVyIGZvciB0aGUgcGFpci4gIEZvciBleGFtcGxlLCBpZiBuZWl0aGVyCi0gIGRubCBgc2hhcmVkJyBub3IgYGRpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCisgIGRubCAnc2hhcmVkJyBub3IgJ2Rpc2FibGUtc2hhcmVkJyB3YXMgcGFzc2VkLCB3ZSBlbmFibGUgYnVpbGRpbmcgb2Ygc2hhcmVkCiAgIGRubCBhcmNoaXZlcyBieSBkZWZhdWx0OgogICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbc2hhcmVkIGRpc2FibGUtc2hhcmVkXSwgW19MVF9FTkFCTEVfU0hBUkVEXSkKICAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3N0YXRpYyBkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQ10pCiAgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtwaWMtb25seSBuby1waWNdLCBbX0xUX1dJVEhfUElDXSkKICAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbCBkaXNhYmxlLWZhc3QtaW5zdGFsbF0sCi0gIAkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKKwkJICAgW19MVF9FTkFCTEVfRkFTVF9JTlNUQUxMXSkKICAgXSkKIF0pIyBfTFRfU0VUX09QVElPTlMKIApAQCAtMTEyLDcgKzExMiw3IEBACiBbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGxvcGVuXSkKIEFDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCiBbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91Ci1wdXQgdGhlIGBkbG9wZW4nIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK3B1dCB0aGUgJ2Rsb3Blbicgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQogXSkKIAogZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgpAQCAtMTQ4LDcgKzE0OCw3IEBACiBfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFt3aW4zMi1kbGxdKQogQUNfRElBR05PU0UoW29ic29sZXRlXSwKIFskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgYHdpbjMyLWRsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorcHV0IHRoZSAnd2luMzItZGxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCiBdKQogCiBkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CkBAIC0xNTcsOSArMTU3LDkgQEAKIAogIyBfTFRfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZywgYW5kIHN1cHBvcnRzIHRoZSBgc2hhcmVkJyBhbmQKLSMgYGRpc2FibGUtc2hhcmVkJyBMVF9JTklUIG9wdGlvbnMuCi0jIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZywgYW5kIHN1cHBvcnRzIHRoZSAnc2hhcmVkJyBhbmQKKyMgJ2Rpc2FibGUtc2hhcmVkJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyICd5ZXMnIG9yICdubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAneWVzJy4KIG00X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURdLAogW200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKIEFDX0FSR19FTkFCTEUoW3NoYXJlZF0sCkBAIC0xNzIsMTQgKzE3MiwxNCBAQAogICAgICopCiAgICAgICBlbmFibGVfc2hhcmVkPW5vCiAgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAogICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgorCUlGUz0kbHRfc2F2ZV9pZnMKIAlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgogCSAgZW5hYmxlX3NoYXJlZD15ZXMKIAlmaQogICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICA7OwogICAgIGVzYWNdLAogICAgIFtlbmFibGVfc2hhcmVkPV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQpAQCAtMjExLDkgKzIxMSw5IEBACiAKICMgX0xUX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS1lbmFibGUtc3RhdGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSBgc3RhdGljJyBhbmQKLSMgYGRpc2FibGUtc3RhdGljJyBMVF9JTklUIG9wdGlvbnMuCi0jIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlICdzdGF0aWMnIGFuZAorIyAnZGlzYWJsZS1zdGF0aWMnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgJ3llcycgb3IgJ25vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvICd5ZXMnLgogbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ10sCiBbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAogQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKQEAgLTIyNiwxNCArMjI2LDE0IEBACiAgICAgKikKICAgICAgZW5hYmxlX3N0YXRpYz1ubwogICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBsdF9zYXZlX2lmcz0kSUZTOyBJRlM9JElGUyRQQVRIX1NFUEFSQVRPUiwKICAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKKwlJRlM9JGx0X3NhdmVfaWZzCiAJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KIAkgIGVuYWJsZV9zdGF0aWM9eWVzCiAJZmkKICAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgSUZTPSRsdF9zYXZlX2lmcwogICAgICAgOzsKICAgICBlc2FjXSwKICAgICBbZW5hYmxlX3N0YXRpYz1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKQEAgLTI2NSw5ICsyNjUsOSBAQAogCiAjIF9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMKFtERUZBVUxUXSkKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLWZhc3QtaW5zdGFsbCBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYGZhc3QtaW5zdGFsbCcKLSMgYW5kIGBkaXNhYmxlLWZhc3QtaW5zdGFsbCcgTFRfSU5JVCBvcHRpb25zLgotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCisjIGltcGxlbWVudCB0aGUgLS1lbmFibGUtZmFzdC1pbnN0YWxsIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSAnZmFzdC1pbnN0YWxsJworIyBhbmQgJ2Rpc2FibGUtZmFzdC1pbnN0YWxsJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyICd5ZXMnIG9yICdubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAneWVzJy4KIG00X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExdLAogW200X2RlZmluZShbX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKIEFDX0FSR19FTkFCTEUoW2Zhc3QtaW5zdGFsbF0sCkBAIC0yODAsMTQgKzI4MCwxNCBAQAogICAgICopCiAgICAgICBlbmFibGVfZmFzdF9pbnN0YWxsPW5vCiAgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAogICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgorCUlGUz0kbHRfc2F2ZV9pZnMKIAlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgogCSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD15ZXMKIAlmaQogICAgICAgZG9uZQotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICBJRlM9JGx0X3NhdmVfaWZzCiAgICAgICA7OwogICAgIGVzYWNdLAogICAgIFtlbmFibGVfZmFzdF9pbnN0YWxsPV1fTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQpAQCAtMzA0LDE0ICszMDQsMTQgQEAKIFtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIG00X2lmKFskMV0sIFtub10sIFtkaXNhYmxlLV0pW2Zhc3QtaW5zdGFsbF0pCiBBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAogWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKLXRoZSBgZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCit0aGUgJ2Zhc3QtaW5zdGFsbCcgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQogXSkKIAogQVVfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSwKIFtfTFRfU0VUX09QVElPTihbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0pCiBBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAogWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdSBwdXQKLXRoZSBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK3RoZSAnZGlzYWJsZS1mYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKIF0pCiAKIGRubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKQEAgLTMyMSw5ICszMjEsOSBAQAogCiAjIF9MVF9XSVRIX1BJQyhbTU9ERV0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHBpYy1vbmx5JyBhbmQgYG5vLXBpYycKKyMgaW1wbGVtZW50IHRoZSAtLXdpdGgtcGljIGZsYWcsIGFuZCBzdXBwb3J0IHRoZSAncGljLW9ubHknIGFuZCAnbm8tcGljJwogIyBMVF9JTklUIG9wdGlvbnMuCi0jIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCisjIE1PREUgaXMgZWl0aGVyICd5ZXMnIG9yICdubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byAnYm90aCcuCiBtNF9kZWZpbmUoW19MVF9XSVRIX1BJQ10sCiBbQUNfQVJHX1dJVEgoW3BpY10sCiAgICAgW0FTX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljQDw6QD1QS0dTQDo+QF0sCkBAIC0zMzQsMTkgKzMzNCwxNyBAQAogICAgICopCiAgICAgICBwaWNfbW9kZT1kZWZhdWx0CiAgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCi0gICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGx0X3NhdmVfaWZzPSRJRlM7IElGUz0kSUZTJFBBVEhfU0VQQVJBVE9SLAogICAgICAgZm9yIGx0X3BrZyBpbiAkd2l0aHZhbDsgZG8KLQlJRlM9IiRsdF9zYXZlX2lmcyIKKwlJRlM9JGx0X3NhdmVfaWZzCiAJaWYgdGVzdCAiWCRsdF9wa2ciID0gIlgkbHRfcCI7IHRoZW4KIAkgIHBpY19tb2RlPXllcwogCWZpCiAgICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKICAgICAgIDs7CiAgICAgZXNhY10sCi0gICAgW3BpY19tb2RlPWRlZmF1bHRdKQotCi10ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPW00X2RlZmF1bHQoWyQxXSwgW2RlZmF1bHRdKQorICAgIFtwaWNfbW9kZT1tNF9kZWZhdWx0KFskMV0sIFtkZWZhdWx0XSldKQogCiBfTFRfREVDTChbXSwgW3BpY19tb2RlXSwgWzBdLCBbV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGRdKWRubAogXSkjIF9MVF9XSVRIX1BJQwpAQCAtMzU5LDcgKzM1Nyw3IEBACiBbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbcGljLW9ubHldKQogQUNfRElBR05PU0UoW29ic29sZXRlXSwKIFskMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UKLXB1dCB0aGUgYHBpYy1vbmx5JyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitwdXQgdGhlICdwaWMtb25seScgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQogXSkKIAogZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHN1Z2FyLm00IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHN1Z2FyLm00CmluZGV4IDkwMDBhMDUuLjdjYmM2MzggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHRzdWdhci5tNAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0c3VnYXIubTQKQEAgLTEsNiArMSw3IEBACiAjIGx0c3VnYXIubTQgLS0gbGlidG9vbCBtNCBiYXNlIGxheWVyLiAgICAgICAgICAgICAgICAgICAgICAgICAtKi1BdXRvY29uZi0qLQogIwotIyBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMjAwNC0yMDA1LCAyMDA3LTIwMDgsIDIwMTEtMjAxMyBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KICMgV3JpdHRlbiBieSBHYXJ5IFYuIFZhdWdoYW4sIDIwMDQKICMKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gZ2l2ZXMKQEAgLTMzLDcgKzM0LDcgQEAKICMgLS0tLS0tLS0tLS0tCiAjIE1hbmlwdWxhdGUgbTQgbGlzdHMuCiAjIFRoZXNlIG1hY3JvcyBhcmUgbmVjZXNzYXJ5IGFzIGxvbmcgYXMgd2lsbCBzdGlsbCBuZWVkIHRvIHN1cHBvcnQKLSMgQXV0b2NvbmYtMi41OSB3aGljaCBxdW90ZXMgZGlmZmVyZW50bHkuCisjIEF1dG9jb25mLTIuNTksIHdoaWNoIHF1b3RlcyBkaWZmZXJlbnRseS4KIG00X2RlZmluZShbbHRfY2FyXSwgW1skMV1dKQogbTRfZGVmaW5lKFtsdF9jZHJdLAogW200X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IGNhbm5vdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNdKV0sCkBAIC00NCw3ICs0NSw3IEBACiAKICMgbHRfYXBwZW5kKE1BQ1JPLU5BTUUsIFNUUklORywgW1NFUEFSQVRPUl0pCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBSZWRlZmluZSBNQUNSTy1OQU1FIHRvIGhvbGQgaXRzIGZvcm1lciBjb250ZW50IHBsdXMgYFNFUEFSQVRPUidgU1RSSU5HJy4KKyMgUmVkZWZpbmUgTUFDUk8tTkFNRSB0byBob2xkIGl0cyBmb3JtZXIgY29udGVudCBwbHVzICdTRVBBUkFUT1InJ1NUUklORycuCiAjIE5vdGUgdGhhdCBuZWl0aGVyIFNFUEFSQVRPUiBub3IgU1RSSU5HIGFyZSBleHBhbmRlZDsgdGhleSBhcmUgYXBwZW5kZWQKICMgdG8gTUFDUk8tTkFNRSBhcyBpcyAobGVhdmluZyB0aGUgZXhwYW5zaW9uIGZvciB3aGVuIE1BQ1JPLU5BTUUgaXMgaW52b2tlZCkuCiAjIE5vIFNFUEFSQVRPUiBpcyBvdXRwdXQgaWYgTUFDUk8tTkFNRSB3YXMgcHJldmlvdXNseSB1bmRlZmluZWQgKGRpZmZlcmVudApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdHZlcnNpb24ubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0dmVyc2lvbi5tNAppbmRleCAwN2E4NjAyLi5kYWViMGFmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0dmVyc2lvbi5tNAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0dmVyc2lvbi5tNApAQCAtMSw2ICsxLDYgQEAKICMgbHR2ZXJzaW9uLm00IC0tIHZlcnNpb24gbnVtYmVycwkJCS0qLSBBdXRvY29uZiAtKi0KICMKLSMgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDExLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0CiAjCiAjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCkBAIC05LDE1ICs5LDE1IEBACiAKICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAotIyBzZXJpYWwgMzMzNyBsdHZlcnNpb24ubTQKKyMgc2VyaWFsIDQwMzggbHR2ZXJzaW9uLm00CiAjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sCiAKLW00X2RlZmluZShbTFRfUEFDS0FHRV9WRVJTSU9OXSwgWzIuNC4yXSkKLW00X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsxLjMzMzddKQorbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1ZFUlNJT05dLCBbMi40LjIuNDE4XSkKK200X2RlZmluZShbTFRfUEFDS0FHRV9SRVZJU0lPTl0sIFsyLjQuMi40MThdKQogCiBBQ19ERUZVTihbTFRWRVJTSU9OX1ZFUlNJT05dLAotW21hY3JvX3ZlcnNpb249JzIuNC4yJwotbWFjcm9fcmV2aXNpb249JzEuMzMzNycKK1ttYWNyb192ZXJzaW9uPScyLjQuMi40MTgnCittYWNyb19yZXZpc2lvbj0nMi40LjIuNDE4JwogX0xUX0RFQ0woLCBtYWNyb192ZXJzaW9uLCAwLCBbV2hpY2ggcmVsZWFzZSBvZiBsaWJ0b29sLm00IHdhcyB1c2VkP10pCiBfTFRfREVDTCgsIG1hY3JvX3JldmlzaW9uLCAwKQogXSkKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR+b2Jzb2xldGUubTQgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL200L2x0fm9ic29sZXRlLm00CmluZGV4IGM1NzNkYTkuLjU5NDYxZTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbTQvbHR+b2Jzb2xldGUubTQKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tNC9sdH5vYnNvbGV0ZS5tNApAQCAtMSw2ICsxLDcgQEAKICMgbHR+b2Jzb2xldGUubTQgLS0gYWNsb2NhbCBzYXRpc2Z5aW5nIG9ic29sZXRlIGRlZmluaXRpb25zLiAgICAtKi1BdXRvY29uZi0qLQogIwotIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSwgMjAwNywgMjAwOSwgMjAxMS0yMDEzIEZyZWUgU29mdHdhcmUKKyMgICBGb3VuZGF0aW9uLCBJbmMuCiAjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0LgogIwogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwpAQCAtMTEsNyArMTIsNyBAQAogCiAjIFRoZXNlIGV4aXN0IGVudGlyZWx5IHRvIGZvb2wgYWNsb2NhbCB3aGVuIGJvb3RzdHJhcHBpbmcgbGlidG9vbC4KICMKLSMgSW4gdGhlIHBhc3QgbGlidG9vbC5tNCBoYXMgcHJvdmlkZWQgbWFjcm9zIHZpYSBBQ19ERUZVTiAob3IgQVVfREVGVU4pCisjIEluIHRoZSBwYXN0IGxpYnRvb2wubTQgaGFzIHByb3ZpZGVkIG1hY3JvcyB2aWEgQUNfREVGVU4gKG9yIEFVX0RFRlVOKSwKICMgd2hpY2ggaGF2ZSBsYXRlciBiZWVuIGNoYW5nZWQgdG8gbTRfZGVmaW5lIGFzIHRoZXkgYXJlbid0IHBhcnQgb2YgdGhlCiAjIGV4cG9ydGVkIEFQSSwgb3IgbW92ZWQgdG8gQXV0b2NvbmYgb3IgQXV0b21ha2Ugd2hlcmUgdGhleSBiZWxvbmcuCiAjCkBAIC0yNSw3ICsyNiw3IEBACiAjIGluY2x1ZGVkIGFmdGVyIGV2ZXJ5dGhpbmcgZWxzZS4gIFRoaXMgcHJvdmlkZXMgYWNsb2NhbCB3aXRoIHRoZQogIyBBQ19ERUZVTnMgaXQgd2FudHMsIGJ1dCB3aGVuIG00IHByb2Nlc3NlcyBpdCwgaXQgZG9lc24ndCBkbyBhbnl0aGluZwogIyBiZWNhdXNlIHRob3NlIG1hY3JvcyBhbHJlYWR5IGV4aXN0LCBvciB3aWxsIGJlIG92ZXJ3cml0dGVuIGxhdGVyLgotIyBXZSB1c2UgQUNfREVGVU4gb3ZlciBBVV9ERUZVTiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFjbG9jYWwtMS42LiAKKyMgV2UgdXNlIEFDX0RFRlVOIG92ZXIgQVVfREVGVU4gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhY2xvY2FsLTEuNi4KICMKICMgQW55dGltZSB3ZSB3aXRoZHJhdyBhbiBBQ19ERUZVTiBvciBBVV9ERUZVTiwgcmVtZW1iZXIgdG8gYWRkIGl0IGhlcmUuCiAjIFllcywgdGhhdCBtZWFucyBldmVyeSBuYW1lIG9uY2UgdGFrZW4gd2lsbCBuZWVkIHRvIHJlbWFpbiBoZXJlIHVudGlsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21hbi9NYWtlZmlsZS5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmluCmluZGV4IGMwMmUxZjIuLmQ5MmFmNzQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWFuL01ha2VmaWxlLmluCkBAIC0xLDcgKzEsNyBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMi4yIGZyb20gTWFrZWZpbGUuYW0uCisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEzLjQgZnJvbSBNYWtlZmlsZS5hbS4KICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCkBAIC0xNCwyMyArMTQsNTEgQEAKIAogQFNFVF9NQUtFQAogVlBBVEggPSBAc3JjZGlyQAotYW1fX21ha2VfZHJ5cnVuID0gXAotICB7IFwKLSAgICBhbV9fZHJ5PW5vOyBcCithbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCithbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisgICAgICA/KSA7OyBcCisgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorICAgICAgICAgZXhpdCAxOzsgXAorICBlc2FjOyBcCisgIGhhc19vcHQ9bm87IFwKKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorICBlbHNlIFwKICAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKICAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKLSAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAotICAgICAgKikgXAotICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAotICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKLSAgICAgICAgICAgICo9KnwtLSopIDs7IFwKLSAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAotICAgICAgICAgIGVzYWM7IFwKLSAgICAgICAgZG9uZTs7IFwKKyAgICAgICAgYnM9XFw7IFwKKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCiAgICAgZXNhYzsgXAotICAgIHRlc3QgJCRhbV9fZHJ5ID0geWVzOyBcCi0gIH0KKyAgZmk7IFwKKyAgc2tpcF9uZXh0PW5vOyBcCisgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKyAgeyBcCisgICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKKyAgfTsgXAorICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKyAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisgICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAorICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisgICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgZXNhYzsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKyAgICBlc2FjOyBcCisgIGRvbmU7IFwKKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCithbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQogcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACiBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKIHBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKQEAgLTUxLDcgKzc5LDcgQEAKIGhvc3RfdHJpcGxldCA9IEBob3N0QAogdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAogc3ViZGlyID0gbWFuCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbQogQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAogYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYXNtY2ZpLm00IFwKIAkkKHRvcF9zcmNkaXIpL200L2F4X2FwcGVuZF9mbGFnLm00IFwKQEAgLTczLDYgKzEwMSwxOCBAQAogQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9mZmljb25maWcuaAogQ09ORklHX0NMRUFOX0ZJTEVTID0KIENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCithbV9fdl9QXzAgPSBmYWxzZQorYW1fX3ZfUF8xID0gOgorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKK2FtX192X0dFTl8xID0gCitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK2FtX192X2F0XzEgPSAKIFNPVVJDRVMgPQogRElTVF9TT1VSQ0VTID0KIGFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXApAQCAtMTExLDEwICsxNTEsMTIgQEAKIGFtX19pbnN0YWxsZGlycyA9ICIkKERFU1RESVIpJChtYW4zZGlyKSIKIE5ST0ZGID0gbnJvZmYKIE1BTlMgPSAkKG1hbl9NQU5TKQorYW1fX3RhZ2dlZF9maWxlcyA9ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKFRBR1NfRklMRVMpICQoTElTUCkKIERJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCiBBQ0xPQ0FMID0gQEFDTE9DQUxACiBBTExPQ0EgPSBAQUxMT0NBQAogQU1UQVIgPSBAQU1UQVJACitBTV9ERUZBVUxUX1ZFUkJPU0lUWSA9IEBBTV9ERUZBVUxUX1ZFUkJPU0lUWUAKIEFNX0xUTERGTEFHUyA9IEBBTV9MVExERkxBR1NACiBBTV9SVU5URVNURkxBR1MgPSBAQU1fUlVOVEVTVEZMQUdTQAogQVIgPSBAQVJACkBAIC0xMzAsNiArMTcyLDEwIEBACiBDRkxBR1MgPSBAQ0ZMQUdTQAogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKIENZR1BBVEhfVyA9IEBDWUdQQVRIX1dACiBERUZTID0gQERFRlNACiBERVBESVIgPSBAREVQRElSQApAQCAtMTQ1LDYgKzE5MSw3IEBACiBGR1JFUCA9IEBGR1JFUEAKIEdSRVAgPSBAR1JFUEAKIEhBVkVfTE9OR19ET1VCTEUgPSBASEFWRV9MT05HX0RPVUJMRUAKK0hBVkVfTE9OR19ET1VCTEVfVkFSSUFOVCA9IEBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlRACiBJTlNUQUxMID0gQElOU1RBTExACiBJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAogSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKQEAgLTE5MSw2ICsyMzgsNyBAQAogYWJzX3RvcF9zcmNkaXIgPSBAYWJzX3RvcF9zcmNkaXJACiBhY19jdF9BUiA9IEBhY19jdF9BUkAKIGFjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKIGFjX2N0X0RVTVBCSU4gPSBAYWNfY3RfRFVNUEJJTkAKIGFtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAogYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKQEAgLTMzMCwyOSArMzc4LDE0IEBACiAJfSB8IHNlZCAtZSAncywuKi8sLDtoO3MsLipcLiwsO3MsXlteM11bMC05YS16XSokJCwzLDt4JyBcCiAJICAgICAgLWUgJ3MsXC5bMC05YS16XSokJCwsOyQodHJhbnNmb3JtKTtHO3MsXG4sLiwnYDsgXAogCWRpcj0nJChERVNURElSKSQobWFuM2RpciknOyAkKGFtX191bmluc3RhbGxfZmlsZXNfZnJvbV9kaXIpCi10YWdzOiBUQUdTCi1UQUdTOgordGFncyBUQUdTOgogCi1jdGFnczogQ1RBR1MKLUNUQUdTOgorY3RhZ3MgQ1RBR1M6CiAKIGNzY29wZSBjc2NvcGVsaXN0OgogCiAKIGRpc3RkaXI6ICQoRElTVEZJTEVTKQotCUBsaXN0PSckKE1BTlMpJzsgaWYgdGVzdCAtbiAiJCRsaXN0IjsgdGhlbiBcCi0JICBsaXN0PWBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKLQkgICAgaWYgdGVzdCAtZiAkJHA7IHRoZW4gZD07IGVsc2UgZD0iJChzcmNkaXIpLyI7IGZpOyBcCi0JICAgIGlmIHRlc3QgLWYgIiQkZCQkcCI7IHRoZW4gZWNobyAiJCRkJCRwIjsgZWxzZSA6OyBmaTsgZG9uZWA7IFwKLQkgIGlmIHRlc3QgLW4gIiQkbGlzdCIgJiYgXAotCSAgICBncmVwICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCA+L2Rldi9udWxsOyB0aGVuIFwKLQkgICAgZWNobyAiZXJyb3I6IGZvdW5kIG1hbiBwYWdlcyBjb250YWluaW5nIHRoZSAnbWlzc2luZyBoZWxwMm1hbicgcmVwbGFjZW1lbnQgdGV4dDoiID4mMjsgXAotCSAgICBncmVwIC1sICdhYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UnICQkbGlzdCB8IHNlZCAncy9eLyAgICAgICAgIC8nID4mMjsgXAotCSAgICBlY2hvICIgICAgICAgdG8gZml4IHRoZW0sIGluc3RhbGwgaGVscDJtYW4sIHJlbW92ZSBhbmQgcmVnZW5lcmF0ZSB0aGUgbWFuIHBhZ2VzOyIgPiYyOyBcCi0JICAgIGVjaG8gIiAgICAgICB0eXBpY2FsbHkgJ21ha2UgbWFpbnRhaW5lci1jbGVhbicgd2lsbCByZW1vdmUgdGhlbSIgPiYyOyBcCi0JICAgIGV4aXQgMTsgXAotCSAgZWxzZSA6OyBmaTsgXAotCWVsc2UgOjsgZmkKIAlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3MvW10uW14kJFxcKl0vXFxcXCYvZydgOyBcCiAJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzL1tdLlteJCRcXCpdL1xcXFwmL2cnYDsgXAogCWxpc3Q9JyQoRElTVEZJTEVTKSc7IFwKQEAgLTQ5MCwxNiArNTIzLDE3IEBACiAuTUFLRTogaW5zdGFsbC1hbSBpbnN0YWxsLXN0cmlwCiAKIC5QSE9OWTogYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgXAotCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBkaXN0ZGlyIGR2aSBcCi0JZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIFwKLQlpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIGluc3RhbGwtZHZpLWFtIFwKLQlpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBpbnN0YWxsLWh0bWwtYW0gXAotCWluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1tYW4zIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1tYW4gdW5pbnN0YWxsLW1hbjMKKwljc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZHZpIFwKKwlpbnN0YWxsLWR2aS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaHRtbCBcCisJaW5zdGFsbC1odG1sLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtbWFuMyBpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIFwKKwlpbnN0YWxsLXBzLWFtIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBcCisJaW5zdGFsbGRpcnMgbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIFwKKwlwcyBwcy1hbSB0YWdzLWFtIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLW1hbiBcCisJdW5pbnN0YWxsLW1hbjMKIAogCiAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tZGF0ZS1zaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWRhdGUtc2gKaW5kZXggY2Q5MTZjMC4uYjM3MTljZiAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tZGF0ZS1zaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21kYXRlLXNoCkBAIC0xLDEwICsxLDkgQEAKICMhL2Jpbi9zaAogIyBHZXQgbW9kaWZpY2F0aW9uIHRpbWUgb2YgYSBmaWxlIG9yIGRpcmVjdG9yeSBhbmQgcHJldHR5LXByaW50IGl0LgogCi1zY3JpcHR2ZXJzaW9uPTIwMDUtMDYtMjkuMjIKK3NjcmlwdHZlcnNpb249MjAxMC0wOC0yMS4wNjsgIyBVVEMKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZQotIyBGb3VuZGF0aW9uLCBJbmMuCisjIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogIyB3cml0dGVuIGJ5IFVscmljaCBEcmVwcGVyIDxkcmVwcGVyQGdudS5haS5taXQuZWR1PiwgSnVuZSAxOTk1CiAjCiAjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0xOCw4ICsxNyw3IEBACiAjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0jIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KIAogIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CiAjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQpAQCAtMzAsMTYgKzI4LDI2IEBACiAjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KICMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCiAKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCiBjYXNlICQxIGluCiAgICcnKQotICAgICBlY2hvICIkMDogTm8gZmlsZS4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgIGVjaG8gIiQwOiBObyBmaWxlLiAgVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgogICAgICBleGl0IDE7CiAgICAgIDs7CiAgIC1oIHwgLS1oKikKICAgICBjYXQgPDxcRU9GCiBVc2FnZTogbWRhdGUtc2ggWy0taGVscF0gWy0tdmVyc2lvbl0gRklMRQogCi1QcmV0dHktcHJpbnQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIEZJTEUuCitQcmV0dHktcHJpbnQgdGhlIG1vZGlmaWNhdGlvbiBkYXkgb2YgRklMRSwgaW4gdGhlIGZvcm1hdDoKKzEgSmFudWFyeSAxOTcwCiAKIFJlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCiBFT0YKQEAgLTUxLDYgKzU5LDEzIEBACiAgICAgOzsKIGVzYWMKIAorZXJyb3IgKCkKK3sKKyAgZWNobyAiJDA6ICQxIiA+JjIKKyAgZXhpdCAxCit9CisKKwogIyBQcmV2ZW50IGRhdGUgZ2l2aW5nIHJlc3BvbnNlIGluIGFub3RoZXIgbGFuZ3VhZ2UuCiBMQU5HPUMKIGV4cG9ydCBMQU5HCkBAIC02MCw3ICs3NSw3IEBACiBleHBvcnQgTENfVElNRQogCiAjIEdOVSBscyBjaGFuZ2VzIGl0cyB0aW1lIGZvcm1hdCBpbiByZXNwb25zZSB0byB0aGUgVElNRV9TVFlMRQotIyB2YXJpYWJsZS4gIFNpbmNlIHdlIGNhbm5vdCBhc3N1bWUgYHVuc2V0JyB3b3JrcywgcmV2ZXJ0IHRoaXMKKyMgdmFyaWFibGUuICBTaW5jZSB3ZSBjYW5ub3QgYXNzdW1lICd1bnNldCcgd29ya3MsIHJldmVydCB0aGlzCiAjIHZhcmlhYmxlIHRvIGl0cyBkb2N1bWVudGVkIGRlZmF1bHQuCiBpZiB0ZXN0ICIke1RJTUVfU1RZTEUrc2V0fSIgPSBzZXQ7IHRoZW4KICAgVElNRV9TVFlMRT1wb3NpeC1sb25nLWlzbwpAQCAtNzUsMjcgKzkwLDMyIEBACiBlbHNlCiAgIGxzX2NvbW1hbmQ9J2xzIC1sIC1kJwogZmkKKyMgQXZvaWQgdXNlci9ncm91cCBuYW1lcyB0aGF0IG1pZ2h0IGhhdmUgc3BhY2VzLCB3aGVuIHBvc3NpYmxlLgoraWYgbHMgLW4gL2Rldi9udWxsIDE+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHNfY29tbWFuZD0iJGxzX2NvbW1hbmQgLW4iCitmaQogCi0jIEEgYGxzIC1sJyBsaW5lIGxvb2tzIGFzIGZvbGxvd3Mgb24gT1MvMi4KKyMgQSAnbHMgLWwnIGxpbmUgbG9va3MgYXMgZm9sbG93cyBvbiBPUy8yLgogIyAgZHJ3eHJ3eC0tLSAgICAgICAgMCBBdWcgMTEgIDIwMDEgZm9vCiAjIFRoaXMgZGlmZmVycyBmcm9tIFVuaXgsIHdoaWNoIGFkZHMgb3duZXJzaGlwIGluZm9ybWF0aW9uLgogIyAgZHJ3eHJ3eC0tLSAgIDIgcm9vdCAgcm9vdCAgICAgIDQwOTYgQXVnIDExICAyMDAxIGZvbwogIwogIyBUbyBmaW5kIHRoZSBkYXRlLCB3ZSBzcGxpdCB0aGUgbGluZSBvbiBzcGFjZXMgYW5kIGl0ZXJhdGUgb24gd29yZHMKICMgdW50aWwgd2UgZmluZCBhIG1vbnRoLiAgVGhpcyBjYW5ub3Qgd29yayB3aXRoIGZpbGVzIHdob3NlIG93bmVyIGlzIGEKLSMgdXNlciBuYW1lZCBgSmFuJywgb3IgYEZlYicsIGV0Yy4gIEhvd2V2ZXIsIGl0J3MgdW5saWtlbHkgdGhhdCBgLycKKyMgdXNlciBuYW1lZCAiSmFuIiwgb3IgIkZlYiIsIGV0Yy4gIEhvd2V2ZXIsIGl0J3MgdW5saWtlbHkgdGhhdCAnLycKICMgd2lsbCBiZSBvd25lZCBieSBhIHVzZXIgd2hvc2UgbmFtZSBpcyBhIG1vbnRoLiAgU28gd2UgZmlyc3QgbG9vayBhdAogIyB0aGUgZXh0ZW5kZWQgbHMgb3V0cHV0IG9mIHRoZSByb290IGRpcmVjdG9yeSB0byBkZWNpZGUgaG93IG1hbnkKICMgd29yZHMgc2hvdWxkIGJlIHNraXBwZWQgdG8gZ2V0IHRoZSBkYXRlLgogCiAjIE9uIEhQVVggL2Jpbi9zaCwgInNldCIgaW50ZXJwcmV0cyAiLXJ3LXItLXItLSIgYXMgb3B0aW9ucywgc28gdGhlICJ4IiBiZWxvdy4KLXNldCB4YGxzIC1sIC1kIC9gCitzZXQgeGAkbHNfY29tbWFuZCAvYAogCiAjIEZpbmQgd2hpY2ggYXJndW1lbnQgaXMgdGhlIG1vbnRoLgogbW9udGg9CiBjb21tYW5kPQogdW50aWwgdGVzdCAkbW9udGgKIGRvCisgIHRlc3QgJCMgLWd0IDAgfHwgZXJyb3IgImZhaWxlZCBwYXJzaW5nICckbHNfY29tbWFuZCAvJyBvdXRwdXQiCiAgIHNoaWZ0CiAgICMgQWRkIGFub3RoZXIgc2hpZnQgdG8gdGhlIGNvbW1hbmQuCiAgIGNvbW1hbmQ9IiRjb21tYW5kIHNoaWZ0OyIKQEAgLTExNSw4ICsxMzUsMTAgQEAKICAgZXNhYwogZG9uZQogCit0ZXN0IC1uICIkbW9udGgiIHx8IGVycm9yICJmYWlsZWQgcGFyc2luZyAnJGxzX2NvbW1hbmQgLycgb3V0cHV0IgorCiAjIEdldCB0aGUgZXh0ZW5kZWQgbHMgb3V0cHV0IG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeS4KLXNldCBkdW1teSB4YGV2YWwgIiRsc19jb21tYW5kIFwiXCRzYXZlX2FyZzFcIiJgCitzZXQgZHVtbXkgeGBldmFsICIkbHNfY29tbWFuZCBcIlxcXCRzYXZlX2FyZzFcIiJgCiAKICMgUmVtb3ZlIGFsbCBwcmVjZWRpbmcgYXJndW1lbnRzCiBldmFsICRjb21tYW5kCkBAIC0xOTcsNSArMjE5LDYgQEAKICMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQogIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCiAjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgotIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIHRpbWUtc3RhbXAtdGltZS16b25lOiAiVVRDIgorIyB0aW1lLXN0YW1wLWVuZDogIjsgIyBVVEMiCiAjIEVuZDoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWlzc2luZyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbWlzc2luZwppbmRleCAyODA1NWQyLi5jZGVhNTE0IDEwMDc1NQotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21pc3NpbmcKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9taXNzaW5nCkBAIC0xLDExICsxLDEwIEBACiAjISAvYmluL3NoCi0jIENvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZSBpbnN0YWxsaW5nLgorIyBDb21tb24gd3JhcHBlciBmb3IgYSBmZXcgcG90ZW50aWFsbHkgbWlzc2luZyBHTlUgcHJvZ3JhbXMuCiAKLXNjcmlwdHZlcnNpb249MjAwOS0wNC0yOC4yMTsgIyBVVEMKK3NjcmlwdHZlcnNpb249MjAxMi0wNi0yNi4xNjsgIyBVVEMKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCi0jIDIwMDgsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0jIE9yaWdpbmFsbHkgYnkgRnJhbixjb2lzIFBpbmFyZCA8cGluYXJkQGlyby51bW9udHJlYWwuY2E+LCAxOTk2LgorIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IEZyYW4sY29pcyBQaW5hcmQgPHBpbmFyZEBpcm8udW1vbnRyZWFsLmNhPiwgMTk5Ni4KIAogIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjYsNjkgKzI1LDQwIEBACiAjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KIAogaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgotICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGVjaG8gMT4mMiAiVHJ5ICckMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgogICBleGl0IDEKIGZpCiAKLXJ1bj06Ci1zZWRfb3V0cHV0PSdzLy4qIC0tb3V0cHV0WyA9XVwoW14gXSpcKS4qL1wxL3AnCi1zZWRfbWludXNvPSdzLy4qIC1vIFwoW14gXSpcKS4qL1wxL3AnCi0KLSMgSW4gdGhlIGNhc2VzIHdoZXJlIHRoaXMgbWF0dGVycywgYG1pc3NpbmcnIGlzIGJlaW5nIHJ1biBpbiB0aGUKLSMgc3JjZGlyIGFscmVhZHkuCi1pZiB0ZXN0IC1mIGNvbmZpZ3VyZS5hYzsgdGhlbgotICBjb25maWd1cmVfYWM9Y29uZmlndXJlLmFjCi1lbHNlCi0gIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuaW4KLWZpCi0KLW1zZz0ibWlzc2luZyBvbiB5b3VyIHN5c3RlbSIKLQogY2FzZSAkMSBpbgotLS1ydW4pCi0gICMgVHJ5IHRvIHJ1biByZXF1ZXN0ZWQgcHJvZ3JhbSwgYW5kIGp1c3QgZXhpdCBpZiBpdCBzdWNjZWVkcy4KLSAgcnVuPQotICBzaGlmdAotICAiJEAiICYmIGV4aXQgMAotICAjIEV4aXQgY29kZSA2MyBtZWFucyB2ZXJzaW9uIG1pc21hdGNoLiAgVGhpcyBvZnRlbiBoYXBwZW5zCi0gICMgd2hlbiB0aGUgdXNlciB0cnkgdG8gdXNlIGFuIGFuY2llbnQgdmVyc2lvbiBvZiBhIHRvb2wgb24KLSAgIyBhIGZpbGUgdGhhdCByZXF1aXJlcyBhIG1pbmltdW0gdmVyc2lvbi4gIEluIHRoaXMgY2FzZSB3ZQotICAjIHdlIHNob3VsZCBwcm9jZWVkIGhhcyBpZiB0aGUgcHJvZ3JhbSBoYWQgYmVlbiBhYnNlbnQsIG9yCi0gICMgaWYgLS1ydW4gaGFkbid0IGJlZW4gcGFzc2VkLgotICBpZiB0ZXN0ICQ/ID0gNjM7IHRoZW4KLSAgICBydW49OgotICAgIG1zZz0icHJvYmFibHkgdG9vIG9sZCIKLSAgZmkKLSAgOzsKKworICAtLWlzLWxpZ2h0d2VpZ2h0KQorICAgICMgVXNlZCBieSBvdXIgYXV0b2NvbmYgbWFjcm9zIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGF2YWlsYWJsZSBtaXNzaW5nCisgICAgIyBzY3JpcHQgaXMgbW9kZXJuIGVub3VnaC4KKyAgICBleGl0IDAKKyAgICA7OworCisgIC0tcnVuKQorICAgICMgQmFjay1jb21wYXQgd2l0aCB0aGUgY2FsbGluZyBjb252ZW50aW9uIHVzZWQgYnkgb2xkZXIgYXV0b21ha2UuCisgICAgc2hpZnQKKyAgICA7OwogCiAgIC1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKICAgICBlY2hvICJcCiAkMCBbT1BUSU9OXS4uLiBQUk9HUkFNIFtBUkdVTUVOVF0uLi4KIAotSGFuZGxlIFxgUFJPR1JBTSBbQVJHVU1FTlRdLi4uJyBmb3Igd2hlbiBQUk9HUkFNIGlzIG1pc3NpbmcsIG9yIHJldHVybiBhbgotZXJyb3Igc3RhdHVzIGlmIHRoZXJlIGlzIG5vIGtub3duIGhhbmRsaW5nIGZvciBQUk9HUkFNLgorUnVuICdQUk9HUkFNIFtBUkdVTUVOVF0uLi4nLCByZXR1cm5pbmcgYSBwcm9wZXIgYWR2aWNlIHdoZW4gdGhpcyBmYWlscyBkdWUKK3RvIFBST0dSQU0gYmVpbmcgbWlzc2luZyBvciB0b28gb2xkLgogCiBPcHRpb25zOgogICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKICAgLXYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0gIC0tcnVuICAgICAgICAgICB0cnkgdG8gcnVuIHRoZSBnaXZlbiBjb21tYW5kLCBhbmQgZW11bGF0ZSBpdCBpZiBpdCBmYWlscwogCiBTdXBwb3J0ZWQgUFJPR1JBTSB2YWx1ZXM6Ci0gIGFjbG9jYWwgICAgICB0b3VjaCBmaWxlIFxgYWNsb2NhbC5tNCcKLSAgYXV0b2NvbmYgICAgIHRvdWNoIGZpbGUgXGBjb25maWd1cmUnCi0gIGF1dG9oZWFkZXIgICB0b3VjaCBmaWxlIFxgY29uZmlnLmguaW4nCi0gIGF1dG9tNHRlICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUsIG9yIGNyZWF0ZSBhIHN0dWIgb25lCi0gIGF1dG9tYWtlICAgICB0b3VjaCBhbGwgXGBNYWtlZmlsZS5pbicgZmlsZXMKLSAgYmlzb24gICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQotICBmbGV4ICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYwotICBoZWxwMm1hbiAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCi0gIGxleCAgICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCi0gIG1ha2VpbmZvICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKLSAgdGFyICAgICAgICAgIHRyeSB0YXIsIGdudXRhciwgZ3RhciwgdGhlbiB0YXIgd2l0aG91dCBub24tcG9ydGFibGUgZmxhZ3MKLSAgeWFjYyAgICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorICBhY2xvY2FsICAgYXV0b2NvbmYgIGF1dG9oZWFkZXIgICBhdXRvbTR0ZSAgYXV0b21ha2UgIG1ha2VpbmZvCisgIGJpc29uICAgICB5YWNjICAgICAgZmxleCAgICAgICAgIGxleCAgICAgICBoZWxwMm1hbgogCi1WZXJzaW9uIHN1ZmZpeGVzIHRvIFBST0dSQU0gYXMgd2VsbCBhcyB0aGUgcHJlZml4ZXMgXGBnbnUtJywgXGBnbnUnLCBhbmQKLVxgZycgYXJlIGlnbm9yZWQgd2hlbiBjaGVja2luZyB0aGUgbmFtZS4KK1ZlcnNpb24gc3VmZml4ZXMgdG8gUFJPR1JBTSBhcyB3ZWxsIGFzIHRoZSBwcmVmaXhlcyAnZ251LScsICdnbnUnLCBhbmQKKydnJyBhcmUgaWdub3JlZCB3aGVuIGNoZWNraW5nIHRoZSBuYW1lLgogCiBTZW5kIGJ1ZyByZXBvcnRzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgogICAgIGV4aXQgJD8KQEAgLTEwMCwyNzIgKzcwLDE0MSBAQAogICAgIDs7CiAKICAgLSopCi0gICAgZWNobyAxPiYyICIkMDogVW5rbm93biBcYCQxJyBvcHRpb24iCi0gICAgZWNobyAxPiYyICJUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIgorICAgIGVjaG8gMT4mMiAiJDA6IHVua25vd24gJyQxJyBvcHRpb24iCisgICAgZWNobyAxPiYyICJUcnkgJyQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCiAgICAgZXhpdCAxCiAgICAgOzsKIAogZXNhYwogCi0jIG5vcm1hbGl6ZSBwcm9ncmFtIG5hbWUgdG8gY2hlY2sgZm9yLgotcHJvZ3JhbT1gZWNobyAiJDEiIHwgc2VkICcKLSAgcy9eZ251LS8vOyB0Ci0gIHMvXmdudS8vOyB0Ci0gIHMvXmcvLzsgdCdgCisjIFJ1biB0aGUgZ2l2ZW4gcHJvZ3JhbSwgcmVtZW1iZXIgaXRzIGV4aXQgc3RhdHVzLgorIiRAIjsgc3Q9JD8KIAotIyBOb3cgZXhpdCBpZiB3ZSBoYXZlIGl0LCBidXQgaXQgZmFpbGVkLiAgQWxzbyBleGl0IG5vdyBpZiB3ZQotIyBkb24ndCBoYXZlIGl0IGFuZCAtLXZlcnNpb24gd2FzIHBhc3NlZCAobW9zdCBsaWtlbHkgdG8gZGV0ZWN0Ci0jIHRoZSBwcm9ncmFtKS4gIFRoaXMgaXMgYWJvdXQgbm9uLUdOVSBwcm9ncmFtcywgc28gdXNlICQxIG5vdAotIyAkcHJvZ3JhbS4KLWNhc2UgJDEgaW4KLSAgbGV4Knx5YWNjKikKLSAgICAjIE5vdCBHTlUgcHJvZ3JhbXMsIHRoZXkgZG9uJ3QgaGF2ZSAtLXZlcnNpb24uCisjIElmIGl0IHN1Y2NlZWRlZCwgd2UgYXJlIGRvbmUuCit0ZXN0ICRzdCAtZXEgMCAmJiBleGl0IDAKKworIyBBbHNvIGV4aXQgbm93IGlmIHdlIGl0IGZhaWxlZCAob3Igd2Fzbid0IGZvdW5kKSwgYW5kICctLXZlcnNpb24nIHdhcworIyBwYXNzZWQ7IHN1Y2ggYW4gb3B0aW9uIGlzIHBhc3NlZCBtb3N0IGxpa2VseSB0byBkZXRlY3Qgd2hldGhlciB0aGUKKyMgcHJvZ3JhbSBpcyBwcmVzZW50IGFuZCB3b3Jrcy4KK2Nhc2UgJDIgaW4gLS12ZXJzaW9ufC0taGVscCkgZXhpdCAkc3Q7OyBlc2FjCisKKyMgRXhpdCBjb2RlIDYzIG1lYW5zIHZlcnNpb24gbWlzbWF0Y2guICBUaGlzIG9mdGVuIGhhcHBlbnMgd2hlbiB0aGUgdXNlcgorIyB0cmllcyB0byB1c2UgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIGEgdG9vbCBvbiBhIGZpbGUgdGhhdCByZXF1aXJlcyBhCisjIG1pbmltdW0gdmVyc2lvbi4KK2lmIHRlc3QgJHN0IC1lcSA2MzsgdGhlbgorICBtc2c9InByb2JhYmx5IHRvbyBvbGQiCitlbGlmIHRlc3QgJHN0IC1lcSAxMjc7IHRoZW4KKyAgIyBQcm9ncmFtIHdhcyBtaXNzaW5nLgorICBtc2c9Im1pc3Npbmcgb24geW91ciBzeXN0ZW0iCitlbHNlCisgICMgUHJvZ3JhbSB3YXMgZm91bmQgYW5kIGV4ZWN1dGVkLCBidXQgZmFpbGVkLiAgR2l2ZSB1cC4KKyAgZXhpdCAkc3QKK2ZpCisKK3BlcmxfVVJMPWh0dHA6Ly93d3cucGVybC5vcmcvCitmbGV4X1VSTD1odHRwOi8vZmxleC5zb3VyY2Vmb3JnZS5uZXQvCitnbnVfc29mdHdhcmVfVVJMPWh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZQorCitwcm9ncmFtX2RldGFpbHMgKCkKK3sKKyAgY2FzZSAkMSBpbgorICAgIGFjbG9jYWx8YXV0b21ha2UpCisgICAgICBlY2hvICJUaGUgJyQxJyBwcm9ncmFtIGlzIHBhcnQgb2YgdGhlIEdOVSBBdXRvbWFrZSBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9hdXRvbWFrZT4iCisgICAgICBlY2hvICJJdCBhbHNvIHJlcXVpcmVzIEdOVSBBdXRvY29uZiwgR05VIG00IGFuZCBQZXJsIGluIG9yZGVyIHRvIHJ1bjoiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvYXV0b2NvbmY+IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML200Lz4iCisgICAgICBlY2hvICI8JHBlcmxfVVJMPiIKKyAgICAgIDs7CisgICAgYXV0b2NvbmZ8YXV0b200dGV8YXV0b2hlYWRlcikKKyAgICAgIGVjaG8gIlRoZSAnJDEnIHByb2dyYW0gaXMgcGFydCBvZiB0aGUgR05VIEF1dG9jb25mIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2F1dG9jb25mLz4iCisgICAgICBlY2hvICJJdCBhbHNvIHJlcXVpcmVzIEdOVSBtNCBhbmQgUGVybCBpbiBvcmRlciB0byBydW46IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML200Lz4iCisgICAgICBlY2hvICI8JHBlcmxfVVJMPiIKKyAgICAgIDs7CisgIGVzYWMKK30KKworZ2l2ZV9hZHZpY2UgKCkKK3sKKyAgIyBOb3JtYWxpemUgcHJvZ3JhbSBuYW1lIHRvIGNoZWNrIGZvci4KKyAgbm9ybWFsaXplZF9wcm9ncmFtPWBlY2hvICIkMSIgfCBzZWQgJworICAgIHMvXmdudS0vLzsgdAorICAgIHMvXmdudS8vOyB0CisgICAgcy9eZy8vOyB0J2AKKworICBwcmludGYgJyVzXG4nICInJDEnIGlzICRtc2cuIgorCisgIGNvbmZpZ3VyZV9kZXBzPSInY29uZmlndXJlLmFjJyBvciBtNCBmaWxlcyBpbmNsdWRlZCBieSAnY29uZmlndXJlLmFjJyIKKyAgY2FzZSAkbm9ybWFsaXplZF9wcm9ncmFtIGluCisgICAgYXV0b2NvbmYqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdjb25maWd1cmUuYWMnLCIKKyAgICAgIGVjaG8gIm9yIG00IGZpbGVzIGluY2x1ZGVkIGJ5IGl0LiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b2NvbmYnCisgICAgICA7OworICAgIGF1dG9oZWFkZXIqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdhY2NvbmZpZy5oJyBvciIKKyAgICAgIGVjaG8gIiRjb25maWd1cmVfZGVwcy4iCisgICAgICBwcm9ncmFtX2RldGFpbHMgJ2F1dG9oZWFkZXInCisgICAgICA7OworICAgIGF1dG9tYWtlKikKKyAgICAgIGVjaG8gIllvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmIHlvdSBtb2RpZmllZCAnTWFrZWZpbGUuYW0nIG9yIgorICAgICAgZWNobyAiJGNvbmZpZ3VyZV9kZXBzLiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYXV0b21ha2UnCisgICAgICA7OworICAgIGFjbG9jYWwqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkICdhY2luY2x1ZGUubTQnIG9yIgorICAgICAgZWNobyAiJGNvbmZpZ3VyZV9kZXBzLiIKKyAgICAgIHByb2dyYW1fZGV0YWlscyAnYWNsb2NhbCcKKyAgICAgIDs7CisgICBhdXRvbTR0ZSopCisgICAgICBlY2hvICJZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIG1haW50YWluZXIgZmlsZXMgdGhhdCByZXF1aXJlIgorICAgICAgZWNobyAidGhlICdhdXRvbWE0dGUnIHByb2dyYW0gdG8gYmUgcmVidWlsdC4iCisgICAgICBwcm9ncmFtX2RldGFpbHMgJ2F1dG9tNHRlJworICAgICAgOzsKKyAgICBiaXNvbip8eWFjYyopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSAnLnknIGZpbGUuIgorICAgICAgZWNobyAiWW91IG1heSB3YW50IHRvIGluc3RhbGwgdGhlIEdOVSBCaXNvbiBwYWNrYWdlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9iaXNvbi8+IgorICAgICAgOzsKKyAgICBsZXgqfGZsZXgqKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgJy5sJyBmaWxlLiIKKyAgICAgIGVjaG8gIllvdSBtYXkgd2FudCB0byBpbnN0YWxsIHRoZSBGYXN0IExleGljYWwgQW5hbHl6ZXIgcGFja2FnZToiCisgICAgICBlY2hvICI8JGZsZXhfVVJMPiIKKyAgICAgIDs7CisgICAgaGVscDJtYW4qKQorICAgICAgZWNobyAiWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYgeW91IG1vZGlmaWVkIGEgZGVwZW5kZW5jeSIgXAorICAgICAgICAgICAib2YgYSBtYW4gcGFnZS4iCisgICAgICBlY2hvICJZb3UgbWF5IHdhbnQgdG8gaW5zdGFsbCB0aGUgR05VIEhlbHAybWFuIHBhY2thZ2U6IgorICAgICAgZWNobyAiPCRnbnVfc29mdHdhcmVfVVJML2hlbHAybWFuLz4iCiAgICAgOzsKKyAgICBtYWtlaW5mbyopCisgICAgICBlY2hvICJZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZiB5b3UgbW9kaWZpZWQgYSAnLnRleGknIGZpbGUsIG9yIgorICAgICAgZWNobyAiYW55IG90aGVyIGZpbGUgaW5kaXJlY3RseSBhZmZlY3RpbmcgdGhlIGFzcGVjdCBvZiB0aGUgbWFudWFsLiIKKyAgICAgIGVjaG8gIllvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFRleGluZm8gcGFja2FnZToiCisgICAgICBlY2hvICI8JGdudV9zb2Z0d2FyZV9VUkwvdGV4aW5mby8+IgorICAgICAgZWNobyAiVGhlIHNwdXJpb3VzIG1ha2VpbmZvIGNhbGwgbWlnaHQgYWxzbyBiZSB0aGUgY29uc2VxdWVuY2Ugb2YiCisgICAgICBlY2hvICJ1c2luZyBhIGJ1Z2d5ICdtYWtlJyAoQUlYLCBEVSwgSVJJWCksIGluIHdoaWNoIGNhc2UgeW91IG1pZ2h0IgorICAgICAgZWNobyAid2FudCB0byBpbnN0YWxsIEdOVSBtYWtlOiIKKyAgICAgIGVjaG8gIjwkZ251X3NvZnR3YXJlX1VSTC9tYWtlLz4iCisgICAgICA7OworICAgICopCisgICAgICBlY2hvICJZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZSBwcm9wZXIiCisgICAgICBlY2hvICJ0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlICdSRUFETUUnIGZpbGUsIGl0IgorICAgICAgZWNobyAib2Z0ZW4gdGVsbHMgeW91IGFib3V0IHRoZSBuZWVkZWQgcHJlcmVxdWlzaXRlcyBmb3IgaW5zdGFsbGluZyIKKyAgICAgIGVjaG8gInRoaXMgcGFja2FnZS4gIFlvdSBtYXkgYWxzbyBwZWVrIGF0IGFueSBHTlUgYXJjaGl2ZSBzaXRlLCBpbiIKKyAgICAgIGVjaG8gImNhc2Ugc29tZSBvdGhlciBwYWNrYWdlIGNvbnRhaW5zIHRoaXMgbWlzc2luZyAnJDEnIHByb2dyYW0uIgorICAgICAgOzsKKyAgZXNhYworfQogCi0gIHRhciopCi0gICAgaWYgdGVzdCAtbiAiJHJ1biI7IHRoZW4KLSAgICAgICBlY2hvIDE+JjIgIkVSUk9SOiBcYHRhcicgcmVxdWlyZXMgLS1ydW4iCi0gICAgICAgZXhpdCAxCi0gICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KLSAgICAgICBleGl0IDEKLSAgICBmaQotICAgIDs7CitnaXZlX2FkdmljZSAiJDEiIHwgc2VkIC1lICcxcy9eL1dBUk5JTkc6IC8nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgLWUgJzIsJHMvXi8gICAgICAgICAvJyA+JjIKIAotICAqKQotICAgIGlmIHRlc3QgLXogIiRydW4iICYmICgkMSAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAjIFdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuCi0gICAgICAgZXhpdCAxCi0gICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KLSAgICAgICAjIENvdWxkIG5vdCBydW4gLS12ZXJzaW9uIG9yIC0taGVscC4gIFRoaXMgaXMgcHJvYmFibHkgc29tZW9uZQotICAgICAgICMgcnVubmluZyBgJFRPT0wgLS12ZXJzaW9uJyBvciBgJFRPT0wgLS1oZWxwJyB0byBjaGVjayB3aGV0aGVyCi0gICAgICAgIyAkVE9PTCBleGlzdHMgYW5kIG5vdCBrbm93aW5nICRUT09MIHVzZXMgbWlzc2luZy4KLSAgICAgICBleGl0IDEKLSAgICBmaQotICAgIDs7Ci1lc2FjCi0KLSMgSWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGZhaWxzIHRvIHJ1biAocG9zc2libHkgYW4gb3V0ZGF0ZWQgdmVyc2lvbiksCi0jIHRyeSB0byBlbXVsYXRlIGl0LgotY2FzZSAkcHJvZ3JhbSBpbgotICBhY2xvY2FsKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAotICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbQotICAgICAgICAgYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotICAgIHRvdWNoIGFjbG9jYWwubTQKLSAgICA7OwotCi0gIGF1dG9jb25mKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIFxgJHtjb25maWd1cmVfYWN9Jy4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlCi0gICAgICAgICBcYEF1dG9jb25mJyBhbmQgXGBHTlUgbTQnIHBhY2thZ2VzLiAgR3JhYiB0aGVtIGZyb20gYW55IEdOVQotICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKLSAgICB0b3VjaCBjb25maWd1cmUKLSAgICA7OwotCi0gIGF1dG9oZWFkZXIqKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0gICAgICAgICB5b3UgbW9kaWZpZWQgXGBhY2NvbmZpZy5oJyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAotICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvY29uZicgYW5kIFxgR05VIG00JyBwYWNrYWdlcy4gIEdyYWIgdGhlbQotICAgICAgICAgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgZmlsZXM9YHNlZCAtbiAncy9eWyBdKkFbQ01dX0NPTkZJR19IRUFERVIoXChbXildKlwpKS4qL1wxL3AnICR7Y29uZmlndXJlX2FjfWAKLSAgICB0ZXN0IC16ICIkZmlsZXMiICYmIGZpbGVzPSJjb25maWcuaCIKLSAgICB0b3VjaF9maWxlcz0KLSAgICBmb3IgZiBpbiAkZmlsZXM7IGRvCi0gICAgICBjYXNlICRmIGluCi0gICAgICAqOiopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgImBlY2hvICIkZiIgfAotCQkJCSAgICAgICBzZWQgLWUgJ3MvXlteOl0qOi8vJyAtZSAncy86LiovLydgOzsKLSAgICAgICopIHRvdWNoX2ZpbGVzPSIkdG91Y2hfZmlsZXMgJGYuaW4iOzsKLSAgICAgIGVzYWMKLSAgICBkb25lCi0gICAgdG91Y2ggJHRvdWNoX2ZpbGVzCi0gICAgOzsKLQotICBhdXRvbWFrZSopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBcYE1ha2VmaWxlLmFtJywgXGBhY2luY2x1ZGUubTQnIG9yIFxgJHtjb25maWd1cmVfYWN9Jy4KLSAgICAgICAgIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgQXV0b21ha2UnIGFuZCBcYFBlcmwnIHBhY2thZ2VzLgotICAgICAgICAgR3JhYiB0aGVtIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotICAgIGZpbmQgLiAtdHlwZSBmIC1uYW1lIE1ha2VmaWxlLmFtIC1wcmludCB8Ci0JICAgc2VkICdzL1wuYW0kLy5pbi8nIHwKLQkgICB3aGlsZSByZWFkIGY7IGRvIHRvdWNoICIkZiI7IGRvbmUKLSAgICA7OwotCi0gIGF1dG9tNHRlKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYnV0IGlzICRtc2cuCi0gICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQotICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uCi0gICAgICAgICBZb3UgY2FuIGdldCBcYCQxJyBhcyBwYXJ0IG9mIFxgQXV0b2NvbmYnIGZyb20gYW55IEdOVQotICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKLQotICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAotICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKLSAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KLQl0b3VjaCAkZmlsZQotICAgIGVsc2UKLQl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKLQllY2hvICIjISAvYmluL3NoIgotCWVjaG8gIiMgQ3JlYXRlZCBieSBHTlUgQXV0b21ha2UgbWlzc2luZyBhcyBhIHJlcGxhY2VtZW50IG9mIgotCWVjaG8gIiMgICQgJEAiCi0JZWNobyAiZXhpdCAwIgotCWNobW9kICt4ICRmaWxlCi0JZXhpdCAxCi0gICAgZmkKLSAgICA7OwotCi0gIGJpc29uKnx5YWNjKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAueScgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBCaXNvbicgcGFja2FnZQotICAgICAgICAgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZSBlZmZlY3QuICBZb3UgY2FuIGdldAotICAgICAgICAgXGBCaXNvbicgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgcm0gLWYgeS50YWIuYyB5LnRhYi5oCi0gICAgaWYgdGVzdCAkIyAtbmUgMTsgdGhlbgotICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKLQljYXNlICRMQVNUQVJHIGluCi0JKi55KQotCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MveSQvYy8nYAotCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KLQkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIHkudGFiLmMKLQkgICAgZmkKLQkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2gvJ2AKLQkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCi0JICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5oCi0JICAgIGZpCi0JICA7OwotCWVzYWMKLSAgICBmaQotICAgIGlmIHRlc3QgISAtZiB5LnRhYi5oOyB0aGVuCi0JZWNobyA+eS50YWIuaAotICAgIGZpCi0gICAgaWYgdGVzdCAhIC1mIHkudGFiLmM7IHRoZW4KLQllY2hvICdtYWluKCkgeyByZXR1cm4gMDsgfScgPnkudGFiLmMKLSAgICBmaQotICAgIDs7Ci0KLSAgbGV4KnxmbGV4KikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgotICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAubCcgZmlsZS4gIFlvdSBtYXkgbmVlZCB0aGUgXGBGbGV4JyBwYWNrYWdlCi0gICAgICAgICBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlIGVmZmVjdC4gIFlvdSBjYW4gZ2V0Ci0gICAgICAgICBcYEZsZXgnIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotICAgIHJtIC1mIGxleC55eS5jCi0gICAgaWYgdGVzdCAkIyAtbmUgMTsgdGhlbgotICAgICAgICBldmFsIExBU1RBUkc9IlwkeyQjfSIKLQljYXNlICRMQVNUQVJHIGluCi0JKi5sKQotCSAgICBTUkNGSUxFPWBlY2hvICIkTEFTVEFSRyIgfCBzZWQgJ3MvbCQvYy8nYAotCSAgICBpZiB0ZXN0IC1mICIkU1JDRklMRSI7IHRoZW4KLQkgICAgICAgICBjcCAiJFNSQ0ZJTEUiIGxleC55eS5jCi0JICAgIGZpCi0JICA7OwotCWVzYWMKLSAgICBmaQotICAgIGlmIHRlc3QgISAtZiBsZXgueXkuYzsgdGhlbgotCWVjaG8gJ21haW4oKSB7IHJldHVybiAwOyB9JyA+bGV4Lnl5LmMKLSAgICBmaQotICAgIDs7Ci0KLSAgaGVscDJtYW4qKQotICAgIGVjaG8gMT4mMiAiXAotV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCi0JIHlvdSBtb2RpZmllZCBhIGRlcGVuZGVuY3kgb2YgYSBtYW51YWwgcGFnZS4gIFlvdSBtYXkgbmVlZCB0aGUKLQkgXGBIZWxwMm1hbicgcGFja2FnZSBpbiBvcmRlciBmb3IgdGhvc2UgbW9kaWZpY2F0aW9ucyB0byB0YWtlCi0JIGVmZmVjdC4gIFlvdSBjYW4gZ2V0IFxgSGVscDJtYW4nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgotCi0gICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCi0gICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAotICAgIGlmIHRlc3QgLWYgIiRmaWxlIjsgdGhlbgotCXRvdWNoICRmaWxlCi0gICAgZWxzZQotCXRlc3QgLXogIiRmaWxlIiB8fCBleGVjID4kZmlsZQotCWVjaG8gIi5hYiBoZWxwMm1hbiBpcyByZXF1aXJlZCB0byBnZW5lcmF0ZSB0aGlzIHBhZ2UiCi0JZXhpdCAkPwotICAgIGZpCi0gICAgOzsKLQotICBtYWtlaW5mbyopCi0gICAgZWNobyAxPiYyICJcCi1XQVJOSU5HOiBcYCQxJyBpcyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKLSAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnRleGknIG9yIFxgLnRleGluZm8nIGZpbGUsIG9yIGFueSBvdGhlciBmaWxlCi0gICAgICAgICBpbmRpcmVjdGx5IGFmZmVjdGluZyB0aGUgYXNwZWN0IG9mIHRoZSBtYW51YWwuICBUaGUgc3B1cmlvdXMKLSAgICAgICAgIGNhbGwgbWlnaHQgYWxzbyBiZSB0aGUgY29uc2VxdWVuY2Ugb2YgdXNpbmcgYSBidWdneSBcYG1ha2UnIChBSVgsCi0gICAgICAgICBEVSwgSVJJWCkuICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYFRleGluZm8nIHBhY2thZ2Ugb3IKLSAgICAgICAgIHRoZSBcYEdOVSBtYWtlJyBwYWNrYWdlLiAgR3JhYiBlaXRoZXIgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCi0gICAgIyBUaGUgZmlsZSB0byB0b3VjaCBpcyB0aGF0IHNwZWNpZmllZCB3aXRoIC1vIC4uLgotICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAotICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKLSAgICBpZiB0ZXN0IC16ICIkZmlsZSI7IHRoZW4KLSAgICAgICMgLi4uIG9yIGl0IGlzIHRoZSBvbmUgc3BlY2lmaWVkIHdpdGggQHNldGZpbGVuYW1lIC4uLgotICAgICAgaW5maWxlPWBlY2hvICIkKiIgfCBzZWQgJ3MvLiogXChbXiBdKlwpICokL1wxLydgCi0gICAgICBmaWxlPWBzZWQgLW4gJwotCS9eQHNldGZpbGVuYW1lL3sKLQkgIHMvLiogXChbXiBdKlwpICokL1wxLwotCSAgcAotCSAgcQotCX0nICRpbmZpbGVgCi0gICAgICAjIC4uLiBvciBpdCBpcyBkZXJpdmVkIGZyb20gdGhlIHNvdXJjZSBuYW1lIChkaXIvZi50ZXhpIGJlY29tZXMgZi5pbmZvKQotICAgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiRpbmZpbGUiIHwgc2VkICdzLC4qLywsO3MsLlteLl0qJCwsJ2AuaW5mbwotICAgIGZpCi0gICAgIyBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCwgdGhlIHVzZXIgcmVhbGx5IG5lZWRzIG1ha2VpbmZvOwotICAgICMgbGV0J3MgZmFpbCB3aXRob3V0IHRvdWNoaW5nIGFueXRoaW5nLgotICAgIHRlc3QgLWYgJGZpbGUgfHwgZXhpdCAxCi0gICAgdG91Y2ggJGZpbGUKLSAgICA7OwotCi0gIHRhciopCi0gICAgc2hpZnQKLQotICAgICMgV2UgaGF2ZSBhbHJlYWR5IHRyaWVkIHRhciBpbiB0aGUgZ2VuZXJpYyBwYXJ0LgotICAgICMgTG9vayBmb3IgZ251dGFyL2d0YXIgYmVmb3JlIGludm9jYXRpb24gdG8gYXZvaWQgdWdseSBlcnJvcgotICAgICMgbWVzc2FnZXMuCi0gICAgaWYgKGdudXRhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KLSAgICAgICBnbnV0YXIgIiRAIiAmJiBleGl0IDAKLSAgICBmaQotICAgIGlmIChndGFyIC0tdmVyc2lvbiA+IC9kZXYvbnVsbCAyPiYxKTsgdGhlbgotICAgICAgIGd0YXIgIiRAIiAmJiBleGl0IDAKLSAgICBmaQotICAgIGZpcnN0YXJnPSIkMSIKLSAgICBpZiBzaGlmdDsgdGhlbgotCWNhc2UgJGZpcnN0YXJnIGluCi0JKm8qKQotCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL28vL2AKLQkgICAgdGFyICIkZmlyc3RhcmciICIkQCIgJiYgZXhpdCAwCi0JICAgIDs7Ci0JZXNhYwotCWNhc2UgJGZpcnN0YXJnIGluCi0JKmgqKQotCSAgICBmaXJzdGFyZz1gZWNobyAiJGZpcnN0YXJnIiB8IHNlZCBzL2gvL2AKLQkgICAgdGFyICIkZmlyc3RhcmciICIkQCIgJiYgZXhpdCAwCi0JICAgIDs7Ci0JZXNhYwotICAgIGZpCi0KLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IEkgY2FuJ3Qgc2VlbSB0byBiZSBhYmxlIHRvIHJ1biBcYHRhcicgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzLgotICAgICAgICAgWW91IG1heSB3YW50IHRvIGluc3RhbGwgR05VIHRhciBvciBGcmVlIHBheHV0aWxzLCBvciBjaGVjayB0aGUKLSAgICAgICAgIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuIgotICAgIGV4aXQgMQotICAgIDs7Ci0KLSAgKikKLSAgICBlY2hvIDE+JjIgIlwKLVdBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYW5kIGlzICRtc2cuCi0gICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQotICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uICBDaGVjayB0aGUgXGBSRUFETUUnIGZpbGUsCi0gICAgICAgICBpdCBvZnRlbiB0ZWxscyB5b3UgYWJvdXQgdGhlIG5lZWRlZCBwcmVyZXF1aXNpdGVzIGZvciBpbnN0YWxsaW5nCi0gICAgICAgICB0aGlzIHBhY2thZ2UuICBZb3UgbWF5IGFsc28gcGVlayBhdCBhbnkgR05VIGFyY2hpdmUgc2l0ZSwgaW4gY2FzZQotICAgICAgICAgc29tZSBvdGhlciBwYWNrYWdlIHdvdWxkIGNvbnRhaW4gdGhpcyBtaXNzaW5nIFxgJDEnIHByb2dyYW0uIgotICAgIGV4aXQgMQotICAgIDs7Ci1lc2FjCi0KLWV4aXQgMAorIyBQcm9wYWdhdGUgdGhlIGNvcnJlY3QgZXhpdCBzdGF0dXMgKGV4cGVjdGVkIHRvIGJlIDEyNyBmb3IgYSBwcm9ncmFtCisjIG5vdCBmb3VuZCwgNjMgZm9yIGEgcHJvZ3JhbSB0aGF0IGZhaWxlZCBkdWUgdG8gdmVyc2lvbiBtaXNtYXRjaCkuCitleGl0ICRzdAogCiAjIExvY2FsIHZhcmlhYmxlczoKICMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tc3ZjYy5zaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvbXN2Y2Muc2gKaW5kZXggZGNkYmVhYi4uNzQ0MGRlYiAxMDA3NTUKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9tc3ZjYy5zaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL21zdmNjLnNoCkBAIC00Miw2ICs0Miw3IEBACiAjIGZvcm1hdCBhbmQgdHJhbnNsYXRlZCBpbnRvIHNvbWV0aGluZyBzZW5zaWJsZSBmb3IgY2wgb3IgbWwuCiAjCiAKK2FyZ3Nfb3JpZz0kQAogYXJncz0iLW5vbG9nbyAtVzMiCiBtZD0tTUQKIGNsPSJjbCIKQEAgLTcyLDE0ICs3MywzNSBAQAogICAgICAgc2hpZnQgMQogICAgIDs7CiAgICAgLU8qKQotICAgICAgIyBJZiB3ZSdyZSBvcHRpbWl6aW5nLCBtYWtlIHN1cmUgd2UgZXhwbGljaXRseSB0dXJuIG9uIHNvbWUgb3B0aW1pemF0aW9ucwotICAgICAgIyB0aGF0IGFyZSBpbXBsaWNpdGx5IGRpc2FibGVkIGJ5IGRlYnVnIHN5bWJvbHMgKC1aaSkuCi0gICAgICBhcmdzPSIkYXJncyAkMSAtT1BUOlJFRiAtT1BUOklDRiAtSU5DUkVNRU5UQUw6Tk8iCisgICAgICAjIFJ1bnRpbWUgZXJyb3IgY2hlY2tzIChlbmFibGVkIGJ5IHNldHRpbmcgLVJUQzEgaW4gdGhlIC1ERkZJX0RFQlVHCisgICAgICAjIGNhc2UgYmVsb3cpIGFyZSBub3QgY29tcGF0aWJsZSB3aXRoIG9wdGltaXphdGlvbiBmbGFncyBhbmQgd2lsbAorICAgICAgIyBjYXVzZSB0aGUgYnVpbGQgdG8gZmFpbC4gVGhlcmVmb3JlLCBkcm9wIHRoZSBvcHRpbWl6YXRpb24gZmxhZyBpZgorICAgICAgIyAtREZGSV9ERUJVRyBpcyBhbHNvIHNldC4KKyAgICAgIGNhc2UgJGFyZ3Nfb3JpZyBpbgorICAgICAgICAqLURGRklfREVCVUcqKQorICAgICAgICAgIGFyZ3M9IiRhcmdzIgorICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICMgVGhlIGF4X2NjX21heG9wdC5tNCBtYWNybyBmcm9tIHRoZSB1cHN0cmVhbSBhdXRvY29uZi1hcmNoaXZlCisgICAgICAgICAgIyBwcm9qZWN0IGRvZXNuJ3Qgc3VwcG9ydCBNU1ZDIGFuZCB0aGVyZWZvcmUgZW5kcyB1cCB0cnlpbmcgdG8KKyAgICAgICAgICAjIHVzZSAtTzMuIFVzZSB0aGUgZXF1aXZhbGVudCAibWF4IG9wdGltaXphdGlvbiIgZmxhZyBmb3IgTVNWQworICAgICAgICAgICMgaW5zdGVhZCBvZiBlcnJvcmluZyBvdXQuCisgICAgICAgICAgY2FzZSAkMSBpbgorICAgICAgICAgICAgLU8zKQorICAgICAgICAgICAgICBhcmdzPSIkYXJncyAtTzIiCisgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgYXJncz0iJGFyZ3MgJDEiCisgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgICBvcHQ9InRydWUiCisgICAgICAgIDs7CisgICAgICBlc2FjCiAgICAgICBzaGlmdCAxCiAgICAgOzsKICAgICAtZykKICAgICAgICMgRW5hYmxlIGRlYnVnIHN5bWJvbCBnZW5lcmF0aW9uLgotICAgICAgYXJncz0iJGFyZ3MgLVppIC1ERUJVRyIKKyAgICAgIGFyZ3M9IiRhcmdzIC1aaSIKICAgICAgIHNoaWZ0IDEKICAgICA7OwogICAgIC1ERkZJX0RFQlVHKQpAQCAtMTI2LDYgKzE0OCwxMCBAQAogICAgICAgIyB0byBkbyBoZXJlLgogICAgICAgc2hpZnQgMQogICAgIDs7CisgICAgLXBlZGFudGljKQorICAgICAgIyBsaWJmZmkgdGVzdHMgLXBlZGFudGljIHdpdGggLVdhbGwsIHNvIGRyb3AgaXQgYWxzby4KKyAgICAgIHNoaWZ0IDEKKyAgICA7OwogICAgIC1XZXJyb3IpCiAgICAgICBhcmdzPSIkYXJncyAtV1giCiAgICAgICBzaGlmdCAxCkBAIC0xNzAsNiArMTk2LDEzIEBACiAgIGVzYWMKIGRvbmUKIAorIyBJZiAtWmkgaXMgc3BlY2lmaWVkLCBjZXJ0YWluIG9wdGltaXphdGlvbnMgYXJlIGltcGxpY2l0bHkgZGlzYWJsZWQKKyMgYnkgTVNWQy4gQWRkIGJhY2sgdGhvc2Ugb3B0aW1pemF0aW9ucyBpZiB0aGlzIGlzIGFuIG9wdGltaXplZCBidWlsZC4KKyMgTk9URTogVGhlc2UgYXJndW1lbnRzIG11c3QgY29tZSBhZnRlciBhbGwgb3RoZXJzLgoraWYgWyAtbiAiJG9wdCIgXTsgdGhlbgorICAgIGFyZ3M9IiRhcmdzIC1saW5rIC1PUFQ6UkVGIC1PUFQ6SUNGIC1JTkNSRU1FTlRBTDpOTyIKK2ZpCisKIGlmIFsgLW4gIiRhc3NlbWJseSIgXTsgdGhlbgogICAgIGlmIFsgLXogIiRvdXRkaXIiIF07IHRoZW4KICAgICAgIG91dGRpcj0iLiIKQEAgLTE4OSw3ICsyMjIsMTAgQEAKIGVsc2UKICAgICBhcmdzPSIkbWQgJGFyZ3MiCiAgICAgZWNobyAiJGNsICRhcmdzIgotICAgIGV2YWwgIlwiJGNsXCIgJGFyZ3MiCisgICAgIyBSZXR1cm4gYW4gZXJyb3IgY29kZSBvZiAxIGlmIGFuIGludmFsaWQgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBpcyBwYXNzZWQKKyAgICAjIGluc3RlYWQgb2YganVzdCBpZ25vcmluZyBpdC4KKyAgICBldmFsICIoXCIkY2xcIiAkYXJncyAyPiYxIDE+JjMgfCBcCisgICAgICAgICAgYXdrICd7cHJpbnQgXCQwfSAvRDkwMDIvIHtlcnJvcj0xfSBFTkR7ZXhpdCBlcnJvcn0nID4mMikgMz4mMSIKICAgICByZXN1bHQ9JD8KIGZpCiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L2ZmaS5jCmluZGV4IDE0MDU2NjUuLmI4MDdhMmQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9mZmkuYwpAQCAtMjcsNyArMjcsMTEgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KIAogLyogU3RhY2sgYWxpZ25tZW50IHJlcXVpcmVtZW50IGluIGJ5dGVzICovCisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorI2RlZmluZSBBQVJDSDY0X1NUQUNLX0FMSUdOIDEKKyNlbHNlCiAjZGVmaW5lIEFBUkNINjRfU1RBQ0tfQUxJR04gMTYKKyNlbmRpZgogCiAjZGVmaW5lIE5fWF9BUkdfUkVHIDgKICNkZWZpbmUgTl9WX0FSR19SRUcgOApAQCAtNDksNiArNTMsMjMgQEAKICAgfSB2IFtBQVJDSDY0X05fVlJFR107CiB9OwogCisjaWYgZGVmaW5lZCAoX19jbGFuZ19fKSAmJiBkZWZpbmVkIChfX0FQUExFX18pCitleHRlcm4gdm9pZAorc3lzX2ljYWNoZV9pbnZhbGlkYXRlICh2b2lkICpzdGFydCwgc2l6ZV90IGxlbik7CisjZW5kaWYKKworc3RhdGljIGlubGluZSB2b2lkCitmZmlfY2xlYXJfY2FjaGUgKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisjaWYgZGVmaW5lZCAoX19jbGFuZ19fKSAmJiBkZWZpbmVkIChfX0FQUExFX18pCisJc3lzX2ljYWNoZV9pbnZhbGlkYXRlIChzdGFydCwgKGNoYXIgKillbmQgLSAoY2hhciAqKXN0YXJ0KTsKKyNlbGlmIGRlZmluZWQgKF9fR05VQ19fKQorCV9fYnVpbHRpbl9fX2NsZWFyX2NhY2hlIChzdGFydCwgZW5kKTsKKyNlbHNlCisjZXJyb3IgIk1pc3NpbmcgYnVpbHRpbiB0byBmbHVzaCBpbnN0cnVjdGlvbiBjYWNoZSIKKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCAqCiBnZXRfeF9hZGRyIChzdHJ1Y3QgY2FsbF9jb250ZXh0ICpjb250ZXh0LCB1bnNpZ25lZCBuKQogewpAQCAtOTQsOCArMTE1LDEwIEBACiAgICAgICByZXR1cm4gZ2V0X3NfYWRkciAoY29udGV4dCwgbik7CiAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CiAgICAgICByZXR1cm4gZ2V0X2RfYWRkciAoY29udGV4dCwgbik7CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CiAgICAgICByZXR1cm4gZ2V0X3ZfYWRkciAoY29udGV4dCwgbik7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CiAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CkBAIC0xMDcsNiArMTMwLDggQEAKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKICAgICAgIHJldHVybiBnZXRfeF9hZGRyIChjb250ZXh0LCBuKTsKKyAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CisgICAgICByZXR1cm4gTlVMTDsKICAgICBkZWZhdWx0OgogICAgICAgRkZJX0FTU0VSVCAoMCk7CiAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEyMywxNSArMTQ4LDI2IEBACiAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKICAgICAgIHJldHVybiBzaXplb2YgKFVJTlQ2NCk7CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CiAgICAgICByZXR1cm4gc2l6ZW9mIChsb25nIGRvdWJsZSk7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorCSAgcmV0dXJuIHNpemVvZiAoVUlOVDgpOworI2VuZGlmCiAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UMTY6CisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorCSAgcmV0dXJuIHNpemVvZiAoVUlOVDE2KTsKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgogICAgIGNhc2UgRkZJX1RZUEVfSU5UOgogICAgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgorI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKwkgIHJldHVybiBzaXplb2YgKFVJTlQzMik7CisjZW5kaWYKICAgICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6CiAgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CkBAIC0xNTQsOCArMTkwLDEwIEBACiAgICAgICByZXR1cm4gc2l6ZW9mIChVSU5UMzIpOwogICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgogICAgICAgcmV0dXJuIHNpemVvZiAoVUlOVDY0KTsKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKICAgICAgIHJldHVybiBzaXplb2YgKGxvbmcgZG91YmxlKTsKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CiAgICAgICByZXR1cm4gc2l6ZW9mIChVSU5UOCk7CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKQEAgLTE4Niw3ICsyMjQsNyBAQAogCQkJICAgIGV4dGVuZGVkX2NpZiAqKSwKICAgICAgICAgICAgICAgIHN0cnVjdCBjYWxsX2NvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICBleHRlbmRlZF9jaWYgKiwKLSAgICAgICAgICAgICAgIHVuc2lnbmVkLAorICAgICAgICAgICAgICAgc2l6ZV90LAogICAgICAgICAgICAgICAgdm9pZCAoKmZuKSh2b2lkKSk7CiAKIGV4dGVybiB2b2lkCkBAIC0zMDUsNyArMzQzLDkgQEAKICAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6CiAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CiAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CiAgICAgY2FzZSBGRklfVFlQRV9VSU5UMzI6CkBAIC0zNjcsMTYgKzQwNywyNCBAQAogewogICB1bnNpZ25lZCBuZ3JuOyAgICAgICAgICAgICAgICAvKiBOZXh0IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBudW1iZXIuICovCiAgIHVuc2lnbmVkIG5zcm47ICAgICAgICAgICAgICAgIC8qIE5leHQgdmVjdG9yIHJlZ2lzdGVyIG51bWJlci4gKi8KLSAgdW5zaWduZWQgbnNhYTsgICAgICAgICAgICAgICAgLyogTmV4dCBzdGFjayBvZmZzZXQuICovCisgIHNpemVfdCBuc2FhOyAgICAgICAgICAgICAgICAgIC8qIE5leHQgc3RhY2sgb2Zmc2V0LiAqLworCisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorICB1bnNpZ25lZCBhbGxvY2F0aW5nX3ZhcmlhZGljOworI2VuZGlmCiB9OwogCiAvKiBJbml0aWFsaXplIGEgcHJvY2VkdXJlIGNhbGwgYXJndW1lbnQgbWFyc2hhbGxpbmcgc3RhdGUuICAqLwogc3RhdGljIHZvaWQKLWFyZ19pbml0IChzdHJ1Y3QgYXJnX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgY2FsbF9mcmFtZV9zaXplKQorYXJnX2luaXQgKHN0cnVjdCBhcmdfc3RhdGUgKnN0YXRlLCBzaXplX3QgY2FsbF9mcmFtZV9zaXplKQogewogICBzdGF0ZS0+bmdybiA9IDA7CiAgIHN0YXRlLT5uc3JuID0gMDsKICAgc3RhdGUtPm5zYWEgPSAwOworCisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorICBzdGF0ZS0+YWxsb2NhdGluZ192YXJpYWRpYyA9IDA7CisjZW5kaWYKIH0KIAogLyogUmV0dXJuIHRoZSBudW1iZXIgb2YgYXZhaWxhYmxlIGNvbnNlY3V0aXZlIGNvcmUgYXJndW1lbnQKQEAgLTQwMCwzNSArNDQ4LDM1IEBACiBzdGF0aWMgdm9pZCAqCiBhbGxvY2F0ZV90b194IChzdHJ1Y3QgY2FsbF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgYXJnX3N0YXRlICpzdGF0ZSkKIHsKLSAgRkZJX0FTU0VSVCAoc3RhdGUtPm5ncm4gPCBOX1hfQVJHX1JFRykKKyAgRkZJX0FTU0VSVCAoc3RhdGUtPm5ncm4gPCBOX1hfQVJHX1JFRyk7CiAgIHJldHVybiBnZXRfeF9hZGRyIChjb250ZXh0LCAoc3RhdGUtPm5ncm4pKyspOwogfQogCiBzdGF0aWMgdm9pZCAqCiBhbGxvY2F0ZV90b19zIChzdHJ1Y3QgY2FsbF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgYXJnX3N0YXRlICpzdGF0ZSkKIHsKLSAgRkZJX0FTU0VSVCAoc3RhdGUtPm5zcm4gPCBOX1ZfQVJHX1JFRykKKyAgRkZJX0FTU0VSVCAoc3RhdGUtPm5zcm4gPCBOX1ZfQVJHX1JFRyk7CiAgIHJldHVybiBnZXRfc19hZGRyIChjb250ZXh0LCAoc3RhdGUtPm5zcm4pKyspOwogfQogCiBzdGF0aWMgdm9pZCAqCiBhbGxvY2F0ZV90b19kIChzdHJ1Y3QgY2FsbF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgYXJnX3N0YXRlICpzdGF0ZSkKIHsKLSAgRkZJX0FTU0VSVCAoc3RhdGUtPm5zcm4gPCBOX1ZfQVJHX1JFRykKKyAgRkZJX0FTU0VSVCAoc3RhdGUtPm5zcm4gPCBOX1ZfQVJHX1JFRyk7CiAgIHJldHVybiBnZXRfZF9hZGRyIChjb250ZXh0LCAoc3RhdGUtPm5zcm4pKyspOwogfQogCiBzdGF0aWMgdm9pZCAqCiBhbGxvY2F0ZV90b192IChzdHJ1Y3QgY2FsbF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgYXJnX3N0YXRlICpzdGF0ZSkKIHsKLSAgRkZJX0FTU0VSVCAoc3RhdGUtPm5zcm4gPCBOX1ZfQVJHX1JFRykKKyAgRkZJX0FTU0VSVCAoc3RhdGUtPm5zcm4gPCBOX1ZfQVJHX1JFRyk7CiAgIHJldHVybiBnZXRfdl9hZGRyIChjb250ZXh0LCAoc3RhdGUtPm5zcm4pKyspOwogfQogCiAvKiBBbGxvY2F0ZSBhbiBhbGlnbmVkIHNsb3Qgb24gdGhlIHN0YWNrIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIGl0LiAgKi8KIHN0YXRpYyB2b2lkICoKLWFsbG9jYXRlX3RvX3N0YWNrIChzdHJ1Y3QgYXJnX3N0YXRlICpzdGF0ZSwgdm9pZCAqc3RhY2ssIHVuc2lnbmVkIGFsaWdubWVudCwKLQkJICAgdW5zaWduZWQgc2l6ZSkKK2FsbG9jYXRlX3RvX3N0YWNrIChzdHJ1Y3QgYXJnX3N0YXRlICpzdGF0ZSwgdm9pZCAqc3RhY2ssIHNpemVfdCBhbGlnbm1lbnQsCisJCSAgIHNpemVfdCBzaXplKQogewogICB2b2lkICphbGxvY2F0aW9uOwogCkBAIC00MzYsNyArNDg0LDEyIEBACiAgICAgIGFsaWdubWVudCBvZiB0aGUgYXJndW1lbnQncyB0eXBlLiAgKi8KICAgc3RhdGUtPm5zYWEgPSBBTElHTiAoc3RhdGUtPm5zYWEsIGFsaWdubWVudCk7CiAgIHN0YXRlLT5uc2FhID0gQUxJR04gKHN0YXRlLT5uc2FhLCBhbGlnbm1lbnQpOworI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKyAgaWYgKHN0YXRlLT5hbGxvY2F0aW5nX3ZhcmlhZGljKQorICAgIHN0YXRlLT5uc2FhID0gQUxJR04gKHN0YXRlLT5uc2FhLCA4KTsKKyNlbHNlCiAgIHN0YXRlLT5uc2FhID0gQUxJR04gKHN0YXRlLT5uc2FhLCA4KTsKKyNlbmRpZgogCiAgIGFsbG9jYXRpb24gPSBzdGFjayArIHN0YXRlLT5uc2FhOwogCkBAIC00NDcsNyArNTAwLDcgQEAKIHN0YXRpYyB2b2lkCiBjb3B5X2Jhc2ljX3R5cGUgKHZvaWQgKmRlc3QsIHZvaWQgKnNvdXJjZSwgdW5zaWduZWQgc2hvcnQgdHlwZSkKIHsKLSAgLyogVGhpcyBpcyBuZWNjZXNzYXJ5IHRvIGVuc3VyZSB0aGF0IGJhc2ljIHR5cGVzIGFyZSBjb3BpZWQKKyAgLyogVGhpcyBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoYXQgYmFzaWMgdHlwZXMgYXJlIGNvcGllZAogICAgICBzaWduIGV4dGVuZGVkIHRvIDY0LWJpdHMgYXMgbGliZmZpIGV4cGVjdHMuICAqLwogICBzd2l0Y2ggKHR5cGUpCiAgICAgewpAQCAtNDU3LDkgKzUxMCwxMSBAQAogICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgogICAgICAgKihkb3VibGUgKikgZGVzdCA9ICooZG91YmxlICopIHNvdXJjZTsKICAgICAgIGJyZWFrOworI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgogICAgICAgKihsb25nIGRvdWJsZSAqKSBkZXN0ID0gKihsb25nIGRvdWJsZSAqKSBzb3VyY2U7CiAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CiAgICAgICAqKGZmaV9hcmcgKikgZGVzdCA9ICooVUlOVDggKikgc291cmNlOwogICAgICAgYnJlYWs7CkBAIC00ODYsNiArNTQxLDggQEAKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKICAgICAgICooZmZpX3NhcmcgKikgZGVzdCA9ICooU0lOVDY0ICopIHNvdXJjZTsKICAgICAgIGJyZWFrOworICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKKyAgICAgIGJyZWFrOwogCiAgICAgZGVmYXVsdDoKICAgICAgIEZGSV9BU1NFUlQgKDApOwpAQCAtNTE0LDcgKzU3MSw2IEBACiAgICAgewogICAgICAgaW50IGk7CiAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlID0gZ2V0X2hvbW9nZW5lb3VzX3R5cGUgKHR5KTsKLSAgICAgIHVuc2lnbmVkIGVsZW1zID0gZWxlbWVudF9jb3VudCAodHkpOwogICAgICAgZm9yIChpID0gMDsgaSA8IGVsZW1zOyBpKyspCiAJewogCSAgdm9pZCAqcmVnID0gYWxsb2NhdGVfdG9fdiAoY29udGV4dCwgc3RhdGUpOwpAQCAtNTQ4LDExICs2MDQsMTMgQEAKIAlyZXR1cm4gYWxsb2NhdGVfdG9fZCAoY29udGV4dCwgc3RhdGUpOwogICAgICAgc3RhdGUtPm5zcm4gPSBOX1ZfQVJHX1JFRzsKICAgICAgIGJyZWFrOworI2lmIEZGSV9UWVBFX0RPVUJMRSAhPSBGRklfVFlQRV9MT05HRE9VQkxFCiAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgogICAgICAgaWYgKHN0YXRlLT5uc3JuIDwgTl9WX0FSR19SRUcpCiAJcmV0dXJuIGFsbG9jYXRlX3RvX3YgKGNvbnRleHQsIHN0YXRlKTsKICAgICAgIHN0YXRlLT5uc3JuID0gTl9WX0FSR19SRUc7CiAgICAgICBicmVhazsKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CiAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxNjoKQEAgLTYxNSw3ICs2NzMsOSBAQAogCSAgIGFwcHJvcHJpYXRlIHJlZ2lzdGVyLCBvciBpZiBub25lIGFyZSBhdmFpbGFibGUsIHRvIHRoZSBzdGFjay4gICovCiAJY2FzZSBGRklfVFlQRV9GTE9BVDoKIAljYXNlIEZGSV9UWVBFX0RPVUJMRToKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKyNlbmRpZgogCWNhc2UgRkZJX1RZUEVfVUlOVDg6CiAJY2FzZSBGRklfVFlQRV9TSU5UODoKIAljYXNlIEZGSV9UWVBFX1VJTlQxNjoKQEAgLTY3Niw2ICs3MzYsMTYgQEAKIAkgIEZGSV9BU1NFUlQgKDApOwogCSAgYnJlYWs7CiAJfQorCisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorICAgICAgaWYgKGkgKyAxID09IGVjaWYtPmNpZi0+YWFyY2g2NF9uZml4ZWRhcmdzKQorCXsKKwkgIHN0YXRlLm5ncm4gPSBOX1hfQVJHX1JFRzsKKwkgIHN0YXRlLm5zcm4gPSBOX1ZfQVJHX1JFRzsKKworCSAgc3RhdGUuYWxsb2NhdGluZ192YXJpYWRpYyA9IDE7CisJfQorI2VuZGlmCiAgICAgfQogCiAgIHJldHVybiBlY2lmLT5jaWYtPmFhcmNoNjRfZmxhZ3M7CkBAIC03MTIsNiArNzgyLDIwIEBACiAgIHJldHVybiBGRklfT0s7CiB9CiAKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisKKy8qIFBlcmZvcm0gQXBwbGUtc3BlY2lmaWMgY2lmIHByb2Nlc3NpbmcgZm9yIHZhcmlhZGljIGNhbGxzICovCitmZmlfc3RhdHVzIGZmaV9wcmVwX2NpZl9tYWNoZGVwX3ZhcihmZmlfY2lmICpjaWYsCisJCQkJICAgIHVuc2lnbmVkIGludCBuZml4ZWRhcmdzLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgbnRvdGFsYXJncykKK3sKKyAgY2lmLT5hYXJjaDY0X25maXhlZGFyZ3MgPSBuZml4ZWRhcmdzOworCisgIHJldHVybiBmZmlfcHJlcF9jaWZfbWFjaGRlcChjaWYpOworfQorCisjZW5kaWYKKwogLyogQ2FsbCBhIGZ1bmN0aW9uIHdpdGggdGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBhbmQgY2FwdHVyZSB0aGUgcmV0dXJuCiAgICB2YWx1ZS4gICovCiB2b2lkCkBAIC03MjgsNyArODEyLDcgQEAKICAgICBjYXNlIEZGSV9TWVNWOgogICAgICAgewogICAgICAgICBzdHJ1Y3QgY2FsbF9jb250ZXh0IGNvbnRleHQ7Ci0JdW5zaWduZWQgc3RhY2tfYnl0ZXM7CisJc2l6ZV90IHN0YWNrX2J5dGVzOwogCiAJLyogRmlndXJlIG91dCB0aGUgdG90YWwgYW1vdW50IG9mIHN0YWNrIHNwYWNlIHdlIG5lZWQsIHRoZQogCSAgIGFib3ZlIGNhbGwgZnJhbWUgc3BhY2UgbmVlZHMgdG8gYmUgMTYgYnl0ZXMgYWxpZ25lZCB0bwpAQCAtNzQ1LDcgKzgyOSw5IEBACiAgICAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKICAgICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKICAgICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKICAgICAgICAgICAgICAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorI2VuZGlmCiAgICAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CiAgICAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CiAgICAgICAgICAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgpAQCAtNzc4LDcgKzg2NCw3IEBACiAJCSAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKChjaWYtPnJ0eXBlLT5zaXplICsgNykgLyA4IDwgTl9YX0FSR19SRUcpCiAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUgPSBBTElHTiAoY2lmLT5ydHlwZS0+c2l6ZSwgc2l6ZW9mIChVSU5UNjQpKTsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUgPSBBTElHTiAoY2lmLT5ydHlwZS0+c2l6ZSwgc2l6ZW9mIChVSU5UNjQpKTsKICAgICAgICAgICAgICAgICAgICAgbWVtY3B5IChydmFsdWUsIGdldF94X2FkZHIgKCZjb250ZXh0LCAwKSwgc2l6ZSk7CiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQpAQCAtODI0LDcgKzkxMCw3IEBACiAgICAgbWVtY3B5IChfX3RyYW1wICsgMTIsICZfX2Z1biwgc2l6ZW9mIChfX2Z1bikpOwkJCVwKICAgICBtZW1jcHkgKF9fdHJhbXAgKyAyMCwgJl9fY3R4LCBzaXplb2YgKF9fY3R4KSk7CQkJXAogICAgIG1lbWNweSAoX190cmFtcCArIDI4LCAmX19mbGFncywgc2l6ZW9mIChfX2ZsYWdzKSk7CQkJXAotICAgIF9fY2xlYXJfY2FjaGUoX190cmFtcCwgX190cmFtcCArIEZGSV9UUkFNUE9MSU5FX1NJWkUpOwkJXAorICAgIGZmaV9jbGVhcl9jYWNoZShfX3RyYW1wLCBfX3RyYW1wICsgRkZJX1RSQU1QT0xJTkVfU0laRSk7CQlcCiAgIH0pCiAKIGZmaV9zdGF0dXMKQEAgLTg1NywxMyArOTQzLDEzIEBACiAgICB0aGUgc3RhY2sgYXQgdGhlIHBvaW50IGZmaV9jbG9zdXJlX1NZU1YoKSB3YXMgaW52b2tlZC4KIAogICAgT24gdGhlIHJldHVybiBwYXRoIHRoZSBhc3NlbWJsZXIgd3JhcHBlciB3aWxsIHJlbG9hZCBjYWxsIGNvbnRleHQKLSAgIHJlZ3NpdGVycy4KKyAgIHJlZ2lzdGVycy4KIAogICAgZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcigpIG1hcnNoYWxscyB0aGUgY2FsbCBjb250ZXh0IGludG8gZmZpIHZhbHVlCi0gICBkZXNyaXB0b3JzLCBpbnZva2VzIHRoZSB3cmFwcGVkIGZ1bmN0aW9uLCB0aGVuIG1hcnNoYWxscyB0aGUgcmV0dXJuCisgICBkZXNjcmlwdG9ycywgaW52b2tlcyB0aGUgd3JhcHBlZCBmdW5jdGlvbiwgdGhlbiBtYXJzaGFsbHMgdGhlIHJldHVybgogICAgdmFsdWUgYmFjayBpbnRvIHRoZSBjYWxsIGNvbnRleHQuICAqLwogCi12b2lkCit2b2lkIEZGSV9ISURERU4KIGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCBzdHJ1Y3QgY2FsbF9jb250ZXh0ICpjb250ZXh0LAogCQkJdm9pZCAqc3RhY2spCiB7CkBAIC04OTcsMTAgKzk4MywxMiBAQAogCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgogCWNhc2UgIEZGSV9UWVBFX0ZMT0FUOgogCWNhc2UgIEZGSV9UWVBFX0RPVUJMRToKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogCWNhc2UgIEZGSV9UWVBFX0xPTkdET1VCTEU6CiAJICBhdmFsdWVbaV0gPSBhbGxvY2F0ZV90b19yZWdpc3Rlcl9vcl9zdGFjayAoY29udGV4dCwgc3RhY2ssCiAJCQkJCQkgICAgICZzdGF0ZSwgdHktPnR5cGUpOwogCSAgYnJlYWs7CisjZW5kaWYKIAogCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgogCSAgaWYgKGlzX2hmYSAodHkpKQpAQCAtOTI0LDcgKzEwMTIsNyBAQAogCQkJICAgdGhlcmVmb3JlIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IHJlcHJlc2VudGVkIGFzCiAJCQkgICBhIGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgYnl0ZXMgaW4gb3VyIHNhdmVkCiAJCQkgICByZWdpc3RlciBjb250ZXh0LiBXZSBuZWVkIHRvIGZha2UgdXAgYSBjb3B5Ci0JCQkgICBvZiB0aGUgc3RydWN0dXJlIGxheWVkIG91dCBpbiBtZW1vcnkKKwkJCSAgIG9mIHRoZSBzdHJ1Y3R1cmUgbGFpZCBvdXQgaW4gbWVtb3J5CiAJCQkgICBjb3JyZWN0bHkuIFRoZSBmYWtlIGNhbiBiZSB0b3NzZWQgb25jZSB0aGUKIAkJCSAgIGNsb3N1cmUgZnVuY3Rpb24gaGFzIHJldHVybmVkIGhlbmNlIGFsbG9jYSgpCiAJCQkgICBpcyBzdWZmaWNpZW50LiAqLwpAQCAtOTQ1LDcgKzEwMzMsNyBAQAogCQkJICAgdGhlcmVmb3JlIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IHJlcHJlc2VudGVkIGFzCiAJCQkgICBhIGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgYnl0ZXMgaW4gb3VyIHNhdmVkCiAJCQkgICByZWdpc3RlciBjb250ZXh0LiBXZSBuZWVkIHRvIGZha2UgdXAgYSBjb3B5Ci0JCQkgICBvZiB0aGUgc3RydWN0dXJlIGxheWVkIG91dCBpbiBtZW1vcnkKKwkJCSAgIG9mIHRoZSBzdHJ1Y3R1cmUgbGFpZCBvdXQgaW4gbWVtb3J5CiAJCQkgICBjb3JyZWN0bHkuIFRoZSBmYWtlIGNhbiBiZSB0b3NzZWQgb25jZSB0aGUKIAkJCSAgIGNsb3N1cmUgZnVuY3Rpb24gaGFzIHJldHVybmVkIGhlbmNlIGFsbG9jYSgpCiAJCQkgICBpcyBzdWZmaWNpZW50LiAqLwpAQCAtOTU4LDExICsxMDQ2LDEzIEBACiAJCQlicmVhazsKIAkJICAgICAgfQogCisjaWYgRkZJX1RZUEVfRE9VQkxFICE9IEZGSV9UWVBFX0xPTkdET1VCTEUKIAkJICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKIAkJCSAgbWVtY3B5ICgmYXZhbHVlW2ldLAogCQkJCSAgYWxsb2NhdGVfdG9fdiAoY29udGV4dCwgJnN0YXRlKSwKIAkJCQkgIHNpemVvZiAoKmF2YWx1ZSkpOwogCQkgICAgICBicmVhazsKKyNlbmRpZgogCiAJCSAgICBkZWZhdWx0OgogCQkgICAgICBGRklfQVNTRVJUICgwKTsKQEAgLTEwMzMsNyArMTEyMyw5IEBACiAgICAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgogICAgICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgogICAgICAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyNpZiBGRklfVFlQRV9ET1VCTEUgIT0gRkZJX1RZUEVfTE9OR0RPVUJMRQogICAgICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisjZW5kaWYKIAkgIHsKIAkgICAgdm9pZCAqYWRkciA9IGdldF9iYXNpY190eXBlX2FkZHIgKGNpZi0+cnR5cGUtPnR5cGUsIGNvbnRleHQsIDApOwogCSAgICBjb3B5X2Jhc2ljX3R5cGUgKGFkZHIsIHJ2YWx1ZSwgY2lmLT5ydHlwZS0+dHlwZSk7CkBAIC0xMDQyLDE5ICsxMTM0LDE5IEBACiAgICAgICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgogICAgICAgICAgIGlmIChpc19oZmEgKGNpZi0+cnR5cGUpKQogCSAgICB7Ci0JICAgICAgaW50IGk7CisJICAgICAgaW50IGo7CiAJICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSA9IGdldF9ob21vZ2VuZW91c190eXBlIChjaWYtPnJ0eXBlKTsKIAkgICAgICB1bnNpZ25lZCBlbGVtcyA9IGVsZW1lbnRfY291bnQgKGNpZi0+cnR5cGUpOwotCSAgICAgIGZvciAoaSA9IDA7IGkgPCBlbGVtczsgaSsrKQorCSAgICAgIGZvciAoaiA9IDA7IGogPCBlbGVtczsgaisrKQogCQl7Ci0JCSAgdm9pZCAqcmVnID0gZ2V0X2Jhc2ljX3R5cGVfYWRkciAodHlwZSwgY29udGV4dCwgaSk7CisJCSAgdm9pZCAqcmVnID0gZ2V0X2Jhc2ljX3R5cGVfYWRkciAodHlwZSwgY29udGV4dCwgaik7CiAJCSAgY29weV9iYXNpY190eXBlIChyZWcsIHJ2YWx1ZSwgdHlwZSk7CiAJCSAgcnZhbHVlICs9IGdldF9iYXNpY190eXBlX3NpemUgKHR5cGUpOwogCQl9CiAJICAgIH0KICAgICAgICAgICBlbHNlIGlmICgoY2lmLT5ydHlwZS0+c2l6ZSArIDcpIC8gOCA8IE5fWF9BUkdfUkVHKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICB1bnNpZ25lZCBzaXplID0gQUxJR04gKGNpZi0+cnR5cGUtPnNpemUsIHNpemVvZiAoVUlOVDY0KSkgOworICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSA9IEFMSUdOIChjaWYtPnJ0eXBlLT5zaXplLCBzaXplb2YgKFVJTlQ2NCkpIDsKICAgICAgICAgICAgICAgbWVtY3B5IChnZXRfeF9hZGRyIChjb250ZXh0LCAwKSwgcnZhbHVlLCBzaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9mZml0YXJnZXQuaAppbmRleCA2ZjFhMzQ4Li40YmJjZWQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L2ZmaXRhcmdldC5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FhcmNoNjQvZmZpdGFyZ2V0LmgKQEAgLTQ3LDggKzQ3LDEyIEBACiAKIC8qIC0tLS0gSW50ZXJuYWwgLS0tLSAqLwogCi0KKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisjZGVmaW5lIEZGSV9UQVJHRVRfU1BFQ0lGSUNfVkFSSUFESUMKKyNkZWZpbmUgRkZJX0VYVFJBX0NJRl9GSUVMRFMgdW5zaWduZWQgYWFyY2g2NF9mbGFnczsgdW5zaWduZWQgYWFyY2g2NF9uZml4ZWRhcmdzCisjZWxzZQogI2RlZmluZSBGRklfRVhUUkFfQ0lGX0ZJRUxEUyB1bnNpZ25lZCBhYXJjaDY0X2ZsYWdzCisjZW5kaWYKIAogI2RlZmluZSBBQVJDSDY0X0ZGSV9XSVRIX1ZfQklUIDAKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYWFyY2g2NC9zeXN2LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L3N5c3YuUwppbmRleCBiOGNkNDIxLi4xNjllYWI4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L3N5c3YuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hYXJjaDY0L3N5c3YuUwpAQCAtMjMsMTQgKzIzLDMzIEBACiAjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CiAjaW5jbHVkZSA8ZmZpLmg+CiAKKyNpZmRlZiBIQVZFX01BQ0hJTkVfQVNNX0gKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2Vsc2UKKyNpZmRlZiBfX1VTRVJfTEFCRUxfUFJFRklYX18KKyNkZWZpbmUgQ09OQ0FUMShhLCBiKSBDT05DQVQyKGEsIGIpCisjZGVmaW5lIENPTkNBVDIoYSwgYikgYSAjIyBiCisKKy8qIFVzZSB0aGUgcmlnaHQgcHJlZml4IGZvciBnbG9iYWwgbGFiZWxzLiAgKi8KKyNkZWZpbmUgQ05BTUUoeCkgQ09OQ0FUMSAoX19VU0VSX0xBQkVMX1BSRUZJWF9fLCB4KQorI2Vsc2UKKyNkZWZpbmUgQ05BTUUoeCkgeAorI2VuZGlmCisjZW5kaWYKKwogI2RlZmluZSBjZmlfYWRqdXN0X2NmYV9vZmZzZXQob2ZmKQkuY2ZpX2FkanVzdF9jZmFfb2Zmc2V0IG9mZgogI2RlZmluZSBjZmlfcmVsX29mZnNldChyZWcsIG9mZikJLmNmaV9yZWxfb2Zmc2V0IHJlZywgb2ZmCiAjZGVmaW5lIGNmaV9yZXN0b3JlKHJlZykJCS5jZmlfcmVzdG9yZSByZWcKICNkZWZpbmUgY2ZpX2RlZl9jZmFfcmVnaXN0ZXIocmVnKQkuY2ZpX2RlZl9jZmFfcmVnaXN0ZXIgcmVnCiAKICAgICAgICAgLnRleHQKLSAgICAgICAgLmdsb2JsIGZmaV9jYWxsX1NZU1YKLSAgICAgICAgLnR5cGUgZmZpX2NhbGxfU1lTViwgI2Z1bmN0aW9uCisgICAgICAgIC5nbG9ibCBDTkFNRShmZmlfY2FsbF9TWVNWKQorI2lmZGVmIF9fRUxGX18KKyAgICAgICAgLnR5cGUgQ05BTUUoZmZpX2NhbGxfU1lTViksICNmdW5jdGlvbgorI2VuZGlmCisjaWZkZWYgX19BUFBMRV9fCisgICAgICAgIC5hbGlnbiAyCisjZW5kaWYKIAogLyogZmZpX2NhbGxfU1lTVigpCiAKQEAgLTUzLDcgKzcyLDcgQEAKIAkJCSAgIGV4dGVuZGVkX2NpZiAqKSwKICAgICAgICAgICAgICAgICAgIHN0cnVjdCBjYWxsX2NvbnRleHQgKmNvbnRleHQsCiAgICAgICAgICAgICAgICAgICBleHRlbmRlZF9jaWYgKiwKLSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHJlcXVpcmVkX3N0YWNrX3NpemUsCisgICAgICAgICAgICAgICAgICBzaXplX3QgcmVxdWlyZWRfc3RhY2tfc2l6ZSwKICAgICAgICAgICAgICAgICAgIHZvaWQgKCpmbikodm9pZCkpOwogCiAgICBUaGVyZWZvcmUgb24gZW50cnkgd2UgaGF2ZToKQEAgLTgyLDcgKzEwMSw3IEBACiAjZGVmaW5lIGZmaV9jYWxsX1NZU1ZfRlMgKDggKiA0KQogCiAgICAgICAgIC5jZmlfc3RhcnRwcm9jCi1mZmlfY2FsbF9TWVNWOgorQ05BTUUoZmZpX2NhbGxfU1lTVik6CiAgICAgICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCiAJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgxNikKICAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyOSwgMCkKQEAgLTkyLDExICsxMTEsMTEgQEAKIAljZmlfZGVmX2NmYV9yZWdpc3RlciAoeDI5KQogICAgICAgICBzdWIgICAgIHNwLCBzcCwgI2ZmaV9jYWxsX1NZU1ZfRlMKIAotICAgICAgICBzdHAgICAgIHgyMSwgeDIyLCBbc3AsIDBdCisgICAgICAgIHN0cCAgICAgeDIxLCB4MjIsIFtzcCwgIzBdCiAgICAgICAgIGNmaV9yZWxfb2Zmc2V0ICh4MjEsIDAgLSBmZmlfY2FsbF9TWVNWX0ZTKQogICAgICAgICBjZmlfcmVsX29mZnNldCAoeDIyLCA4IC0gZmZpX2NhbGxfU1lTVl9GUykKIAotICAgICAgICBzdHAgICAgIHgyMywgeDI0LCBbc3AsIDE2XQorICAgICAgICBzdHAgICAgIHgyMywgeDI0LCBbc3AsICMxNl0KICAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyMywgMTYgLSBmZmlfY2FsbF9TWVNWX0ZTKQogICAgICAgICBjZmlfcmVsX29mZnNldCAoeDI0LCAyNCAtIGZmaV9jYWxsX1NZU1ZfRlMpCiAKQEAgLTE4MCw3ICsxOTksOSBAQAogICAgICAgICByZXQKIAogICAgICAgICAuY2ZpX2VuZHByb2MKLSAgICAgICAgLnNpemUgZmZpX2NhbGxfU1lTViwgLi1mZmlfY2FsbF9TWVNWCisjaWZkZWYgX19FTEZfXworICAgICAgICAuc2l6ZSBDTkFNRShmZmlfY2FsbF9TWVNWKSwgLi1DTkFNRShmZmlfY2FsbF9TWVNWKQorI2VuZGlmCiAKICNkZWZpbmUgZmZpX2Nsb3N1cmVfU1lTVl9GUyAoOCAqIDIgKyBBQVJDSDY0X0NBTExfQ09OVEVYVF9TSVpFKQogCkBAIC0yMjIsMjIgKzI0MywyNSBAQAogICAgVm9pbGEhICAqLwogCiAgICAgICAgIC50ZXh0Ci0gICAgICAgIC5nbG9ibCBmZmlfY2xvc3VyZV9TWVNWCisgICAgICAgIC5nbG9ibCBDTkFNRShmZmlfY2xvc3VyZV9TWVNWKQorI2lmZGVmIF9fQVBQTEVfXworICAgICAgICAuYWxpZ24gMgorI2VuZGlmCiAgICAgICAgIC5jZmlfc3RhcnRwcm9jCi1mZmlfY2xvc3VyZV9TWVNWOgorQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVik6CiAgICAgICAgIHN0cCAgICAgeDI5LCB4MzAsIFtzcCwgIy0xNl0hCiAJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgxNikKICAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyOSwgMCkKICAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgzMCwgOCkKIAogICAgICAgICBtb3YgICAgIHgyOSwgc3AKKyAgICAgICAgY2ZpX2RlZl9jZmFfcmVnaXN0ZXIgKHgyOSkKIAogICAgICAgICBzdWIgICAgIHNwLCBzcCwgI2ZmaV9jbG9zdXJlX1NZU1ZfRlMKLQljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKGZmaV9jbG9zdXJlX1NZU1ZfRlMpCiAKICAgICAgICAgc3RwICAgICB4MjEsIHgyMiwgW3gyOSwgIy0xNl0KLSAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyMSwgMCkKLSAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyMiwgOCkKKyAgICAgICAgY2ZpX3JlbF9vZmZzZXQgKHgyMSwgLTE2KQorICAgICAgICBjZmlfcmVsX29mZnNldCAoeDIyLCAtOCkKIAogICAgICAgICAvKiBMb2FkIHgyMSB3aXRoICZjYWxsX2NvbnRleHQuICAqLwogICAgICAgICBtb3YgICAgIHgyMSwgc3AKQEAgLTI3MCw3ICsyOTQsNyBAQAogICAgICAgICAgICB0cmFtcG9saW5lIHdhcyBjYWxsZWQuICAqLwogICAgICAgICBhZGQgICAgIHgyLCB4MjksICMxNgogCi0gICAgICAgIGJsICAgICAgZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcgorICAgICAgICBibCAgICAgIENOQU1FKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpCiAKICAgICAgICAgLyogRmlndXJlIG91dCBpZiB3ZSBzaG91bGQgdG91Y2ggdGhlIHZlY3RvciByZWdpc3RlcnMuICAqLwogICAgICAgICBsZHIgICAgIHgwLCBbeDIyLCAjOF0KQEAgLTI4Nyw3ICszMTEsNyBAQAogICAgICAgICBsZHAgICAgIHgyLCB4MywgW3gyMSwgIzE2XQogICAgICAgICBsZHAgICAgIHg0LCB4NSwgW3gyMSwgIzMyXQogICAgICAgICBsZHAgICAgIHg2LCB4NywgW3gyMSwgIzQ4XQotICAgICAgICAvKiBOb3RlIG5vdGhpbmcgdXNlZnVsbCBpcyByZXR1cm5lZCBpbiB4OC4gICovCisgICAgICAgIC8qIE5vdGUgbm90aGluZyB1c2VmdWwgaXMgcmV0dXJuZWQgaW4geDguICAqLwogCiAgICAgICAgIC8qIFdlIGFyZSBkb25lLCB1bndpbmQgb3VyIGZyYW1lLiAgKi8KICAgICAgICAgbGRwICAgICB4MjEsIHgyMiwgW3gyOSwgICMtMTZdCkBAIC0yOTUsNyArMzE5LDcgQEAKICAgICAgICAgY2ZpX3Jlc3RvcmUgKHgyMikKIAogICAgICAgICBtb3YgICAgIHNwLCB4MjkKLQljZmlfYWRqdXN0X2NmYV9vZmZzZXQgKC1mZmlfY2xvc3VyZV9TWVNWX0ZTKQorICAgICAgICBjZmlfZGVmX2NmYV9yZWdpc3RlciAoc3ApCiAKICAgICAgICAgbGRwICAgICB4MjksIHgzMCwgW3NwXSwgIzE2CiAJY2ZpX2FkanVzdF9jZmFfb2Zmc2V0ICgtMTYpCkBAIC0zMDQsNCArMzI4LDYgQEAKIAogICAgICAgICByZXQKICAgICAgICAgLmNmaV9lbmRwcm9jCi0gICAgICAgIC5zaXplIGZmaV9jbG9zdXJlX1NZU1YsIC4tZmZpX2Nsb3N1cmVfU1lTVgorI2lmZGVmIF9fRUxGX18KKyAgICAgICAgLnNpemUgQ05BTUUoZmZpX2Nsb3N1cmVfU1lTViksIC4tQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJjL2FyY29tcGFjdC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJjL2FyY29tcGFjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNzE1ZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcmMvYXJjb21wYWN0LlMKQEAgLTAsMCArMSwxMzUgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBhcmNvbXBhY3QuUyAtIENvcHlyaWdodCAoYykgMjAxMyBTeW5wb3N5cywgSW5jLiAod3d3LnN5bm9wc3lzLmNvbSkKKyAgIAorICAgQVJDb21wYWN0IEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIAorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFJFTkVTQVMgVEVDSE5PTE9HWSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgTElCRkZJX0FTTQorI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgorI2luY2x1ZGUgPGZmaS5oPgorI2lmZGVmIEhBVkVfTUFDSElORV9BU01fSAorI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisjZWxzZQorI2RlZmluZSBDTkFNRSh4KSB4CisjZGVmaW5lIEVOVFJZKHgpIC5nbG9ibCBDTkFNRSh4KWAgLnR5cGUgQ05BTUUoeCksJWZ1bmN0aW9uYCBDTkFNRSh4KToKKyNlbmRpZgorCisudGV4dAorCisgICAgICAgIC8qIFIwOiAgIGZmaV9wcmVwX2FyZ3MgKi8KKyAgICAgICAgLyogUjE6ICAgJmVjaWYgKi8KKyAgICAgICAgLyogUjI6ICAgY2lmLT5ieXRlcyAqLworICAgICAgICAvKiBSMzogICBmaWctPmZsYWdzICovCisgICAgICAgIC8qIFI0OiAgIGVjaWYucnZhbHVlICovCisgICAgICAgIC8qIFI1OiAgIGZuICovCitFTlRSWShmZmlfY2FsbF9BUkNvbXBhY3QpCisgICAgICAgIC8qIFNhdmUgcmVnaXN0ZXJzLiAgKi8KKyAgICAgICAgc3QuYSAgICAgICBmcCwgW3NwLCAtNF0gICAgICAgIC8qIGZwICsgMjAsIGZwICovCisgICAgICAgIHB1c2hfcyAgICAgYmxpbmsgICAgICAgICAgICAgICAvKiBmcCArIDE2LCBibGluayAqLworICAgICAgICBzdC5hICAgICAgIHI0LCBbc3AsIC00XSAgICAgICAgLyogZnAgKyAxMiwgZWNpZi5ydmFsdWUgKi8KKyAgICAgICAgcHVzaF9zICAgICByMyAgICAgICAgICAgICAgICAgIC8qIGZwICsgIDgsIGZpZy0+ZmxhZ3MgKi8KKyAgICAgICAgc3QuYSAgICAgICByNSwgW3NwLCAtNF0gICAgICAgIC8qIGZwICsgIDQsIGZuICovCisgICAgICAgIHB1c2hfcyAgICAgcjIgICAgICAgICAgICAgICAgICAvKiBmcCArICAwLCBjaWYtPmJ5dGVzICovCisgICAgICAgIG1vdiAgICAgICAgZnAsIHNwCisKKyAgICAgICAgLyogTWFrZSByb29tIGZvciBhbGwgb2YgdGhlIG5ldyBhcmdzLiAgKi8KKyAgICAgICAgc3ViICAgICAgICBzcCwgc3AsIHIyCisKKyAgICAgICAgLyogUGxhY2UgYWxsIG9mIHRoZSBmZmlfcHJlcF9hcmdzIGluIHBvc2l0aW9uLiAgKi8KKyAgICAgICAgLyogZmZpX3ByZXBfYXJncyhjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKSAqLworICAgICAgICAvKiBSMSBhbHJlYWR5IHNldC4gICovCisKKyAgICAgICAgLyogQW5kIGNhbGwuICAqLworICAgICAgICBqbF9zLmQgICAgIFtyMF0KKyAgICAgICAgbW92X3MgICAgICByMCwgc3AKKworICAgICAgICBsZC5hYiAgICAgIHIxMiwgW2ZwLCA0XSAgICAgICAgLyogY2lmLT5ieXRlcyAqLworICAgICAgICBsZC5hYiAgICAgIHIxMSwgW2ZwLCA0XSAgICAgICAgLyogZm4gKi8KKworICAgICAgICAvKiBNb3ZlIGZpcnN0IDggcGFyYW1ldGVycyBpbiByZWdpc3RlcnMuLi4gICovCisgICAgICAgIGxkX3MgICAgICAgcjAsIFtzcF0KKyAgICAgICAgbGRfcyAgICAgICByMSwgW3NwLCA0XQorICAgICAgICBsZF9zICAgICAgIHIyLCBbc3AsIDhdCisgICAgICAgIGxkX3MgICAgICAgcjMsIFtzcCwgMTJdCisgICAgICAgIGxkICAgICAgICAgcjQsIFtzcCwgMTZdCisgICAgICAgIGxkICAgICAgICAgcjUsIFtzcCwgMjBdCisgICAgICAgIGxkICAgICAgICAgcjYsIFtzcCwgMjRdCisgICAgICAgIGxkICAgICAgICAgcjcsIFtzcCwgMjhdCisKKyAgICAgICAgLyogLi4uYW5kIGFkanVzdCB0aGUgc3RhY2suICAqLworICAgICAgICBtaW4gICAgICAgIHIxMiwgcjEyLCAzMgorCisgICAgICAgIC8qIENhbGwgdGhlIGZ1bmN0aW9uLiAgKi8KKyAgICAgICAgamwuZCAgICAgICBbcjExXQorICAgICAgICBhZGQgICAgICAgIHNwLCBzcCwgcjEyIAorCisgICAgICAgIG1vdiAgICAgICAgc3AsIGZwICAgICAgICAKKyAgICAgICAgcG9wX3MgICAgICByMyAgICAgICAgLyogZmlnLT5mbGFncywgcmV0dXJuIHR5cGUgKi8KKyAgICAgICAgcG9wX3MgICAgICByMiAgICAgICAgLyogZWNpZi5ydmFsdWUsIHBvaW50ZXIgZm9yIHJldHVybiB2YWx1ZSAqLworCisgICAgICAgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgcG9pbnRlciBpcyBOVUxMLCBhc3N1bWUgbm8gcmV0dXJuIHZhbHVlLiAgKi8KKyAgICAgICAgYnJlcS5kICAgICByMiwgMCwgZXBpbG9ndWUKKyAgICAgICAgcG9wX3MgICAgICBibGluaworCisgICAgICAgIC8qIFJldHVybiBJTlQuICAqLworICAgICAgICBicm5lICAgICAgIHIzLCBGRklfVFlQRV9JTlQsIHJldHVybl9kb3VibGUKKyAgICAgICAgYi5kICAgICAgICBlcGlsb2d1ZQorICAgICAgICBzdF9zICAgICAgIHIwLCBbcjJdICAgICAgICAKKworcmV0dXJuX2RvdWJsZToKKyAgICAgICAgYnJuZSAgICAgICByMywgRkZJX1RZUEVfRE9VQkxFLCBlcGlsb2d1ZQorICAgICAgICBzdF9zICAgICAgIHIwLCBbcjJdICAgICAgICAKKyAgICAgICAgc3RfcyAgICAgICByMSwgW3IyLDRdCisKK2VwaWxvZ3VlOgorICAgICAgICBqX3MuZCAgICAgIFtibGlua10KKyAgICAgICAgbGQuYWIgICAgICBmcCwgW3NwLCA0XQorCitFTlRSWShmZmlfY2xvc3VyZV9BUkNvbXBhY3QpCisgICAgICAgIHN0LmEgICAgICAgcjAsIFtzcCwgLTMyXQorICAgICAgICBzdF9zICAgICAgIHIxLCBbc3AsIDRdCisgICAgICAgIHN0X3MgICAgICAgcjIsIFtzcCwgOF0KKyAgICAgICAgc3RfcyAgICAgICByMywgW3NwLCAxMl0KKyAgICAgICAgc3QgICAgICAgICByNCwgW3NwLCAxNl0KKyAgICAgICAgc3QgICAgICAgICByNSwgW3NwLCAyMF0KKyAgICAgICAgc3QgICAgICAgICByNiwgW3NwLCAyNF0KKyAgICAgICAgc3QgICAgICAgICByNywgW3NwLCAyOF0KKworICAgICAgICAvKiBwb2ludGVyIHRvIGFyZ3VtZW50cyAqLworICAgICAgICBtb3ZfcyAgICAgIHIyLCBzcAorCisgICAgICAgIC8qIHJldHVybiB2YWx1ZSBnb2VzIGhlcmUgKi8KKyAgICAgICAgc3ViICAgICAgICBzcCwgc3AsIDgKKyAgICAgICAgbW92X3MgICAgICByMSwgc3AKKworICAgICAgICBwdXNoX3MgICAgIGJsaW5rCisgICAgICAgIAorICAgICAgICBibC5kICAgICAgIGZmaV9jbG9zdXJlX2lubmVyX0FSQ29tcGFjdAorICAgICAgICBtb3ZfcyAgICAgIHIwLCByOCAgICAgICAgICAgICAgICAvKiBjb2RlbG9jLCBzZXQgYnkgdHJhbXBvbGluZSAqLworCisgICAgICAgIHBvcF9zICAgICAgYmxpbmsKKworICAgICAgICAvKiBzZXQgcmV0dXJuIHZhbHVlIHRvIHIxOnIwICovCisgICAgICAgIHBvcF9zICAgICAgcjAKKyAgICAgICAgcG9wX3MgICAgICByMQorICAgICAgICBqX3MuZCAgICAgIFtibGlua10KKyAgICAgICAgYWRkX3MgICAgICBzcCwgc3AsIDMyCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcmMvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcmMvZmZpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmODJhNwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FyYy9mZmkuYwpAQCAtMCwwICsxLDI2OCBAQAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAyMDEzICBTeW5vcHN5cywgSW5jLiAod3d3LnN5bm9wc3lzLmNvbSkKKyAgIAorICAgQVJDIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIAorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFJFTkVTQVMgVEVDSE5PTE9HWSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPHN5cy9jYWNoZWN0bC5oPgorCisvKiBmb3IgbGl0dGxlIGVuZGlhbiBBUkMsIHRoZSBjb2RlIGlzIGluIGZhY3Qgc3RvcmVkIGFzIG1peGVkIGVuZGlhbiBmb3IKKyAgIHBlcmZvcm1hbmNlIHJlYXNvbnMgKi8KKyNpZiBfX0JJR19FTkRJQU5fXworI2RlZmluZSBDT0RFX0VORElBTih4KSAoeCkKKyNlbHNlCisjZGVmaW5lIENPREVfRU5ESUFOKHgpICggKCgodWludDMyX3QpICh4KSkgPDwgMTYpIHwgKCgodWludDMyX3QpICh4KSkgPj4gMTYpKQorI2VuZGlmCisKKy8qIGZmaV9wcmVwX2FyZ3MgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sKKyAgIHNwYWNlIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLiAgKi8KKwordm9pZAorZmZpX3ByZXBfYXJncyAoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqIGVjaWYpCit7CisgIHVuc2lnbmVkIGludCBpOworICBpbnQgdG1wOworICB2b2lkICoqcF9hcmd2OworICBjaGFyICphcmdwOworICBmZmlfdHlwZSAqKnBfYXJnOworCisgIHRtcCA9IDA7CisgIGFyZ3AgPSBzdGFjazsKKworICBpZiAoZWNpZi0+Y2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisgICAgeworICAgICAgKih2b2lkICoqKSBhcmdwID0gZWNpZi0+cnZhbHVlOworICAgICAgYXJncCArPSA0OworICAgIH0KKworICBwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7CisKKyAgZm9yIChpID0gZWNpZi0+Y2lmLT5uYXJncywgcF9hcmcgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsKKyAgICAgICAoaSAhPSAwKTsgaS0tLCBwX2FyZysrKQorICAgIHsKKyAgICAgIHNpemVfdCB6OworICAgICAgaW50IGFsaWdubWVudDsKKworICAgICAgLyogYWxpZ24gYWxpZ25tZW50IHRvIDQgKi8KKyAgICAgIGFsaWdubWVudCA9ICgoKCpwX2FyZyktPmFsaWdubWVudCAtIDEpIHwgMykgKyAxOworCisgICAgICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkuICAqLworICAgICAgaWYgKChhbGlnbm1lbnQgLSAxKSAmICh1bnNpZ25lZCkgYXJncCkKKwlhcmdwID0gKGNoYXIgKikgQUxJR04gKGFyZ3AsIGFsaWdubWVudCk7CisKKyAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKKyAgICAgIGlmICh6IDwgc2l6ZW9mIChpbnQpKQorCXsKKwkgIHogPSBzaXplb2YgKGludCk7CisKKwkgIHN3aXRjaCAoKCpwX2FyZyktPnR5cGUpCisJICAgIHsKKwkgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSAqKFNJTlQ4ICopICgqcF9hcmd2KTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQ4ICopICgqcF9hcmd2KTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSAqKFNJTlQxNiAqKSAoKnBfYXJndik7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDE2ICopICgqcF9hcmd2KTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgICAgICBtZW1jcHkgKGFyZ3AsICpwX2FyZ3YsICgqcF9hcmcpLT5zaXplKTsKKwkgICAgICBicmVhazsKKworCSAgICBkZWZhdWx0OgorCSAgICAgIEZGSV9BU1NFUlQgKDApOworCSAgICB9CisJfQorICAgICAgZWxzZSBpZiAoeiA9PSBzaXplb2YgKGludCkpCisJeworCSAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDMyICopICgqcF9hcmd2KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKKwkgICAgeworCSAgICAgIG1lbWNweSAoYXJncCwgKnBfYXJndiwgeik7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIERvdWJsZSBvciBsb25nIGxvbmcgNjRiaXQuICAqLworCSAgICAgIG1lbWNweSAoYXJncCwgKnBfYXJndiwgeik7CisJICAgIH0KKwl9CisgICAgICBwX2FyZ3YrKzsKKyAgICAgIGFyZ3AgKz0gejsKKyAgICB9CisKKyAgcmV0dXJuOworfQorCisvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nLiAgKi8KK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2NpZl9tYWNoZGVwIChmZmlfY2lmICogY2lmKQoreworICAvKiBTZXQgdGhlIHJldHVybiB0eXBlIGZsYWcuICAqLworICBzd2l0Y2ggKGNpZi0+cnR5cGUtPnR5cGUpCisgICAgeworICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKKyAgICAgIGNpZi0+ZmxhZ3MgPSAodW5zaWduZWQpIGNpZi0+cnR5cGUtPnR5cGU7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZCkgY2lmLT5ydHlwZS0+dHlwZTsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfRE9VQkxFOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgorICAgIGRlZmF1bHQ6CisgICAgICBjaWYtPmZsYWdzID0gRkZJX1RZUEVfSU5UOworICAgICAgYnJlYWs7CisgICAgfQorCisgIHJldHVybiBGRklfT0s7Cit9CisKK2V4dGVybiB2b2lkIGZmaV9jYWxsX0FSQ29tcGFjdCAodm9pZCAoKikoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksCisJCQkJZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkLCB1bnNpZ25lZCwKKwkJCQl1bnNpZ25lZCAqLCB2b2lkICgqZm4pICh2b2lkKSk7CisKK3ZvaWQKK2ZmaV9jYWxsIChmZmlfY2lmICogY2lmLCB2b2lkICgqZm4pICh2b2lkKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQoreworICBleHRlbmRlZF9jaWYgZWNpZjsKKworICBlY2lmLmNpZiA9IGNpZjsKKyAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CisKKyAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZQorICAgICBhIHJldHVybiB2YWx1ZSBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZS4gICovCisgIGlmICgocnZhbHVlID09IE5VTEwpICYmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkpCisgICAgeworICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EgKGNpZi0+cnR5cGUtPnNpemUpOworICAgIH0KKyAgZWxzZQorICAgIGVjaWYucnZhbHVlID0gcnZhbHVlOworCisgIHN3aXRjaCAoY2lmLT5hYmkpCisgICAgeworICAgIGNhc2UgRkZJX0FSQ09NUEFDVDoKKyAgICAgIGZmaV9jYWxsX0FSQ29tcGFjdCAoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+Ynl0ZXMsCisJCQkgIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBGRklfQVNTRVJUICgwKTsKKyAgICAgIGJyZWFrOworICAgIH0KK30KKworaW50CitmZmlfY2xvc3VyZV9pbm5lcl9BUkNvbXBhY3QgKGZmaV9jbG9zdXJlICogY2xvc3VyZSwgdm9pZCAqcnZhbHVlLAorCQkJICAgICBmZmlfYXJnICogYXJncykKK3sKKyAgdm9pZCAqKmFyZ19hcmVhLCAqKnBfYXJndjsKKyAgZmZpX2NpZiAqY2lmID0gY2xvc3VyZS0+Y2lmOworICBjaGFyICphcmdwID0gKGNoYXIgKikgYXJnczsKKyAgZmZpX3R5cGUgKipwX2FyZ3Q7CisgIGludCBpOworCisgIGFyZ19hcmVhID0gKHZvaWQgKiopIGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCAqKSk7CisKKyAgLyogaGFuZGxlIGhpZGRlbiBhcmd1bWVudCAqLworICBpZiAoY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QpCisgICAgeworICAgICAgcnZhbHVlID0gKih2b2lkICoqKSBhcmdwOworICAgICAgYXJncCArPSA0OworICAgIH0KKworICBwX2FyZ3YgPSBhcmdfYXJlYTsKKworICBmb3IgKGkgPSAwLCBwX2FyZ3QgPSBjaWYtPmFyZ190eXBlczsgaSA8IGNpZi0+bmFyZ3M7CisgICAgICAgaSsrLCBwX2FyZ3QrKywgcF9hcmd2KyspCisgICAgeworICAgICAgc2l6ZV90IHo7CisgICAgICBpbnQgYWxpZ25tZW50OworCisgICAgICAvKiBhbGlnbiBhbGlnbm1lbnQgdG8gNCAqLworICAgICAgYWxpZ25tZW50ID0gKCgoKnBfYXJndCktPmFsaWdubWVudCAtIDEpIHwgMykgKyAxOworCisgICAgICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkuICAqLworICAgICAgaWYgKChhbGlnbm1lbnQgLSAxKSAmICh1bnNpZ25lZCkgYXJncCkKKwlhcmdwID0gKGNoYXIgKikgQUxJR04gKGFyZ3AsIGFsaWdubWVudCk7CisKKyAgICAgIHogPSAoKnBfYXJndCktPnNpemU7CisgICAgICAqcF9hcmd2ID0gKHZvaWQgKikgYXJncDsKKyAgICAgIGFyZ3AgKz0gejsKKyAgICB9CisKKyAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcnZhbHVlLCBhcmdfYXJlYSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKworICByZXR1cm4gY2lmLT5mbGFnczsKK30KKworZXh0ZXJuIHZvaWQgZmZpX2Nsb3N1cmVfQVJDb21wYWN0ICh2b2lkKTsKKworZmZpX3N0YXR1cworZmZpX3ByZXBfY2xvc3VyZV9sb2MgKGZmaV9jbG9zdXJlICogY2xvc3VyZSwgZmZpX2NpZiAqIGNpZiwKKwkJICAgICAgdm9pZCAoKmZ1bikgKGZmaV9jaWYgKiwgdm9pZCAqLCB2b2lkICoqLCB2b2lkICopLAorCQkgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKmNvZGVsb2MpCit7CisgIHVpbnQzMl90ICp0cmFtcCA9ICh1aW50MzJfdCAqKSAmIChjbG9zdXJlLT50cmFtcFswXSk7CisKKyAgc3dpdGNoIChjaWYtPmFiaSkKKyAgICB7CisgICAgY2FzZSBGRklfQVJDT01QQUNUOgorICAgICAgRkZJX0FTU0VSVCAodHJhbXAgPT0gY29kZWxvYyk7CisgICAgICB0cmFtcFswXSA9IENPREVfRU5ESUFOICgweDIwMGExZmMwKTsJLyogbW92IHI4LCBwY2wgICovCisgICAgICB0cmFtcFsxXSA9IENPREVfRU5ESUFOICgweDIwMjAwZjgwKTsJLyogaiBbbG9uZyBpbW1dICovCisgICAgICB0cmFtcFsyXSA9IENPREVfRU5ESUFOIChmZmlfY2xvc3VyZV9BUkNvbXBhY3QpOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIEZGSV9CQURfQUJJOworICAgIH0KKworICBjbG9zdXJlLT5jaWYgPSBjaWY7CisgIGNsb3N1cmUtPmZ1biA9IGZ1bjsKKyAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworICBjYWNoZWZsdXNoIChjb2RlbG9jLCBGRklfVFJBTVBPTElORV9TSVpFLCBCQ0FDSEUpOworCisgIHJldHVybiBGRklfT0s7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcmMvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcmMvZmZpdGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY4MzExYgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FyYy9mZml0YXJnZXQuaApAQCAtMCwwICsxLDUzIEBACisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgZmZpdGFyZ2V0LmggLSBDb3B5cmlnaHQgKGMpIDIwMTIgIEFudGhvbnkgR3JlZW4KKyAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDEzICBTeW5vcHN5cywgSW5jLiAod3d3LnN5bm9wc3lzLmNvbSkKKyAgIFRhcmdldCBjb25maWd1cmF0aW9uIG1hY3JvcyBmb3IgQVJDLgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICAgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKKyAgIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFJFTkVTQVMgVEVDSE5PTE9HWSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBMSUJGRklfVEFSR0VUX0gKKyNkZWZpbmUgTElCRkZJX1RBUkdFVF9ICisKKyNpZm5kZWYgTElCRkZJX0gKKyNlcnJvciAiUGxlYXNlIGRvIG5vdCBpbmNsdWRlIGZmaXRhcmdldC5oIGRpcmVjdGx5IGludG8geW91ciBzb3VyY2UuICBVc2UgZmZpLmggaW5zdGVhZC4iCisjZW5kaWYKKworLyogLS0tLSBHZW5lcmljIHR5cGUgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmbmRlZiBMSUJGRklfQVNNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZmZpX2FyZzsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgZmZpX3Nhcmc7CisKK3R5cGVkZWYgZW51bSBmZmlfYWJpCit7CisgIEZGSV9GSVJTVF9BQkkgPSAwLAorICBGRklfQVJDT01QQUNULAorICBGRklfTEFTVF9BQkksCisgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9BUkNPTVBBQ1QKK30gZmZpX2FiaTsKKyNlbmRpZgorCisjZGVmaW5lIEZGSV9DTE9TVVJFUyAJCTEKKyNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRQkxMgorI2RlZmluZSBGRklfTkFUSVZFX1JBV19BUEkgCTAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vZmZpLmMKaW5kZXggN2ZkN2Y0NC4uNjY5MWFiNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9mZmkuYwpAQCAtNCw4ICs0LDggQEAKICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDExIEFudGhvbnkgR3JlZW4KIAkgICBDb3B5cmlnaHQgKGMpIDIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5OCwgMjAwOCwgMjAxMSAgUmVkIEhhdCwgSW5jLgotCSAgIAotICAgQVJNIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIAorCisgICBBUk0gRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKIAogICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAgICBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKQEAgLTM3LDYgKzM3LDg3IEBACiBzdGF0aWMgaW50IHZmcF90eXBlX3AgKGZmaV90eXBlICopOwogc3RhdGljIHZvaWQgbGF5b3V0X3ZmcF9hcmdzIChmZmlfY2lmICopOwogCitpbnQgZmZpX3ByZXBfYXJnc19TWVNWKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYsIGZsb2F0ICp2ZnBfc3BhY2UpOworaW50IGZmaV9wcmVwX2FyZ3NfVkZQKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYsIGZsb2F0ICp2ZnBfc3BhY2UpOworCitzdGF0aWMgY2hhciogZmZpX2FsaWduKGZmaV90eXBlICoqcF9hcmcsIGNoYXIgKmFyZ3ApCit7CisgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeSAqLworICByZWdpc3RlciBzaXplX3QgYWxpZ25tZW50ID0gKCpwX2FyZyktPmFsaWdubWVudDsKKyAgaWYgKGFsaWdubWVudCA8IDQpCisgIHsKKyAgICBhbGlnbm1lbnQgPSA0OworICB9CisjaWZkZWYgX1dJTjMyX1dDRQorICBpZiAoYWxpZ25tZW50ID4gNCkKKyAgeworICAgIGFsaWdubWVudCA9IDQ7CisgIH0KKyNlbmRpZgorICBpZiAoKGFsaWdubWVudCAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKQorICB7CisgICAgYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIGFsaWdubWVudCk7CisgIH0KKworICBpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQorICB7CisgICAgYXJncCA9IChjaGFyICopIEFMSUdOKGFyZ3AsIDQpOworICB9CisgIHJldHVybiBhcmdwOworfQorCitzdGF0aWMgc2l6ZV90IGZmaV9wdXRfYXJnKGZmaV90eXBlICoqYXJnX3R5cGUsIHZvaWQgKiphcmcsIGNoYXIgKnN0YWNrKQoreworCXJlZ2lzdGVyIGNoYXIqIGFyZ3AgPSBzdGFjazsKKwlyZWdpc3RlciBmZmlfdHlwZSAqKnBfYXJnID0gYXJnX3R5cGU7CisJcmVnaXN0ZXIgdm9pZCAqKnBfYXJndiA9IGFyZzsKKwlyZWdpc3RlciBzaXplX3QgeiA9ICgqcF9hcmcpLT5zaXplOworICBpZiAoeiA8IHNpemVvZihpbnQpKQorICAgIHsKKwkJeiA9IHNpemVvZihpbnQpOworCQlzd2l0Y2ggKCgqcF9hcmcpLT50eXBlKQorICAgICAgeworICAgICAgY2FzZSBGRklfVFlQRV9TSU5UODoKKyAgICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkqKFNJTlQ4ICopKCogcF9hcmd2KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgY2FzZSBGRklfVFlQRV9VSU5UODoKKyAgICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UOCAqKSgqIHBfYXJndik7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDE2OgorICAgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSooU0lOVDE2ICopKCogcF9hcmd2KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgY2FzZSBGRklfVFlQRV9VSU5UMTY6CisgICAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSooVUlOVDE2ICopKCogcF9hcmd2KTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisgICAgICAgIG1lbWNweShhcmdwLCAqcF9hcmd2LCAoKnBfYXJnKS0+c2l6ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgICBkZWZhdWx0OgorICAgICAgICBGRklfQVNTRVJUKDApOworICAgICAgfQorICAgIH0KKyAgZWxzZSBpZiAoeiA9PSBzaXplb2YoaW50KSkKKyAgICB7CisJCWlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9GTE9BVCkKKwkJCSooZmxvYXQgKikgYXJncCA9ICooZmxvYXQgKikoKiBwX2FyZ3YpOworCQllbHNlCisJCQkqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQzMiAqKSgqIHBfYXJndik7CisgICAgfQorCWVsc2UgaWYgKHogPT0gc2l6ZW9mKGRvdWJsZSkgJiYgKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfRE9VQkxFKQorCQl7CisJCQkqKGRvdWJsZSAqKSBhcmdwID0gKihkb3VibGUgKikoKiBwX2FyZ3YpOworCQl9CisgIGVsc2UKKyAgICB7CisgICAgICBtZW1jcHkoYXJncCwgKnBfYXJndiwgeik7CisgICAgfQorICByZXR1cm4gejsKK30KIC8qIGZmaV9wcmVwX2FyZ3MgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UKICAgIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzCiAgICAKQEAgLTQ0LDE0ICsxMjUsMTQgQEAKICAgIHZhbHVlIGlzIGNpZi0+dmZwX3VzZWQgKHdvcmQgYml0c2V0IG9mIFZGUCByZWdzIHVzZWQgZm9yIHBhc3NpbmcKICAgIGFyZ3VtZW50cykuIFRoZXNlIGFyZSBvbmx5IHVzZWQgZm9yIHRoZSBWRlAgaGFyZC1mbG9hdCBBQkkuCiAqLwotaW50IGZmaV9wcmVwX2FyZ3MoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZiwgZmxvYXQgKnZmcF9zcGFjZSkKK2ludCBmZmlfcHJlcF9hcmdzX1NZU1YoY2hhciAqc3RhY2ssIGV4dGVuZGVkX2NpZiAqZWNpZiwgZmxvYXQgKnZmcF9zcGFjZSkKIHsKLSAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGksIHZpID0gMDsKKyAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IGk7CiAgIHJlZ2lzdGVyIHZvaWQgKipwX2FyZ3Y7CiAgIHJlZ2lzdGVyIGNoYXIgKmFyZ3A7CiAgIHJlZ2lzdGVyIGZmaV90eXBlICoqcF9hcmc7Ci0KICAgYXJncCA9IHN0YWNrOworICAKIAogICBpZiAoIGVjaWYtPmNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUICkgewogICAgICoodm9pZCAqKikgYXJncCA9IGVjaWYtPnJ2YWx1ZTsKQEAgLTYyLDgxICsxNDMsODkgQEAKIAogICBmb3IgKGkgPSBlY2lmLT5jaWYtPm5hcmdzLCBwX2FyZyA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOwogICAgICAgIChpICE9IDApOwotICAgICAgIGktLSwgcF9hcmcrKykKKyAgICAgICBpLS0sIHBfYXJnKyssIHBfYXJndisrKQogICAgIHsKLSAgICAgIHNpemVfdCB6OwotICAgICAgc2l6ZV90IGFsaWdubWVudDsKLQotICAgICAgLyogQWxsb2NhdGVkIGluIFZGUCByZWdpc3RlcnMuICovCi0gICAgICBpZiAoZWNpZi0+Y2lmLT5hYmkgPT0gRkZJX1ZGUAotCSAgJiYgdmkgPCBlY2lmLT5jaWYtPnZmcF9uYXJncyAmJiB2ZnBfdHlwZV9wICgqcF9hcmcpKQotCXsKLQkgIGZsb2F0KiB2ZnBfc2xvdCA9IHZmcF9zcGFjZSArIGVjaWYtPmNpZi0+dmZwX2FyZ3NbdmkrK107Ci0JICBpZiAoKCpwX2FyZyktPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpCi0JICAgICooKGZsb2F0Kil2ZnBfc2xvdCkgPSAqKChmbG9hdCopKnBfYXJndik7Ci0JICBlbHNlIGlmICgoKnBfYXJnKS0+dHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCi0JICAgICooKGRvdWJsZSopdmZwX3Nsb3QpID0gKigoZG91YmxlKikqcF9hcmd2KTsKLQkgIGVsc2UKLQkgICAgbWVtY3B5KHZmcF9zbG90LCAqcF9hcmd2LCAoKnBfYXJnKS0+c2l6ZSk7Ci0JICBwX2FyZ3YrKzsKLQkgIGNvbnRpbnVlOwotCX0KLQotICAgICAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5ICovCi0gICAgICBhbGlnbm1lbnQgPSAoKnBfYXJnKS0+YWxpZ25tZW50OwotI2lmZGVmIF9XSU4zMl9XQ0UKLSAgICAgIGlmIChhbGlnbm1lbnQgPiA0KQotCWFsaWdubWVudCA9IDQ7Ci0jZW5kaWYKLSAgICAgIGlmICgoYWxpZ25tZW50IC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApIHsKLQlhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgYWxpZ25tZW50KTsKLSAgICAgIH0KLQotICAgICAgaWYgKCgqcF9hcmcpLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVCkKLQlhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgNCk7Ci0KLQkgIHogPSAoKnBfYXJnKS0+c2l6ZTsKLQkgIGlmICh6IDwgc2l6ZW9mKGludCkpCi0JICAgIHsKLQkgICAgICB6ID0gc2l6ZW9mKGludCk7Ci0JICAgICAgc3dpdGNoICgoKnBfYXJnKS0+dHlwZSkKLQkJewotCQljYXNlIEZGSV9UWVBFX1NJTlQ4OgotCQkgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UOCAqKSgqIHBfYXJndik7Ci0JCSAgYnJlYWs7Ci0JCSAgCi0JCWNhc2UgRkZJX1RZUEVfVUlOVDg6Ci0JCSAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpKihVSU5UOCAqKSgqIHBfYXJndik7Ci0JCSAgYnJlYWs7Ci0JCSAgCi0JCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCQkgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpKihTSU5UMTYgKikoKiBwX2FyZ3YpOwotCQkgIGJyZWFrOwotCQkgIAotCQljYXNlIEZGSV9UWVBFX1VJTlQxNjoKLQkJICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQxNiAqKSgqIHBfYXJndik7Ci0JCSAgYnJlYWs7Ci0JCSAgCi0JCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgotCQkgIG1lbWNweShhcmdwLCAqcF9hcmd2LCAoKnBfYXJnKS0+c2l6ZSk7Ci0JCSAgYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJICBGRklfQVNTRVJUKDApOwotCQl9Ci0JICAgIH0KLQkgIGVsc2UgaWYgKHogPT0gc2l6ZW9mKGludCkpCi0JICAgIHsKLQkgICAgICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkqKFVJTlQzMiAqKSgqIHBfYXJndik7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIG1lbWNweShhcmdwLCAqcF9hcmd2LCB6KTsKLQkgICAgfQotCSAgcF9hcmd2Kys7Ci0JICBhcmdwICs9IHo7CisgICAgYXJncCA9IGZmaV9hbGlnbihwX2FyZywgYXJncCk7CisgICAgYXJncCArPSBmZmlfcHV0X2FyZyhwX2FyZywgcF9hcmd2LCBhcmdwKTsKICAgICB9CiAKKyAgcmV0dXJuIDA7Cit9CisKK2ludCBmZmlfcHJlcF9hcmdzX1ZGUChjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmLCBmbG9hdCAqdmZwX3NwYWNlKQoreworICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaSwgdmkgPSAwOworICByZWdpc3RlciB2b2lkICoqcF9hcmd2OworICByZWdpc3RlciBjaGFyICphcmdwLCAqcmVncCwgKmVvX3JlZ3A7CisgIHJlZ2lzdGVyIGZmaV90eXBlICoqcF9hcmc7CisgIGNoYXIgc3RhY2tfdXNlZCA9IDA7CisgIGNoYXIgZG9uZV93aXRoX3JlZ3MgPSAwOworICBjaGFyIGlzX3ZmcF90eXBlOworCisgIC8vIG1ha2Ugc3VyZSB3ZSBhcmUgdXNpbmcgRkZJX1ZGUAorICBGRklfQVNTRVJUKGVjaWYtPmNpZi0+YWJpID09IEZGSV9WRlApOworCisgIC8qIHRoZSBmaXJzdCA0IHdvcmRzIG9uIHRoZSBzdGFjayBhcmUgdXNlZCBmb3IgdmFsdWVzIHBhc3NlZCBpbiBjb3JlCisgICAqIHJlZ2lzdGVycy4gKi8KKyAgcmVncCA9IHN0YWNrOworICBlb19yZWdwID0gYXJncCA9IHJlZ3AgKyAxNjsKKyAgCisKKyAgLyogaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYW4gRkZJX1RZUEVfU1RSVUNUIGluIG1lbW9yeSwgdGhhdCBhZGRyZXNzIGlzCisgICAqIHBhc3NlZCBpbiByMCB0byB0aGUgZnVuY3Rpb24gKi8KKyAgaWYgKCBlY2lmLT5jaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCApIHsKKyAgICAqKHZvaWQgKiopIHJlZ3AgPSBlY2lmLT5ydmFsdWU7CisgICAgcmVncCArPSA0OworICB9CisKKyAgcF9hcmd2ID0gZWNpZi0+YXZhbHVlOworCisgIGZvciAoaSA9IGVjaWYtPmNpZi0+bmFyZ3MsIHBfYXJnID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXM7CisgICAgICAgKGkgIT0gMCk7CisgICAgICAgaS0tLCBwX2FyZysrLCBwX2FyZ3YrKykKKyAgICB7CisgICAgICBpc192ZnBfdHlwZSA9IHZmcF90eXBlX3AgKCpwX2FyZyk7CisKKyAgICAgIC8qIEFsbG9jYXRlZCBpbiBWRlAgcmVnaXN0ZXJzLiAqLworICAgICAgaWYodmkgPCBlY2lmLT5jaWYtPnZmcF9uYXJncyAmJiBpc192ZnBfdHlwZSkKKyAgICAgICAgeworICAgICAgICAgIGNoYXIgKnZmcF9zbG90ID0gKGNoYXIgKikodmZwX3NwYWNlICsgZWNpZi0+Y2lmLT52ZnBfYXJnc1t2aSsrXSk7CisgICAgICAgICAgZmZpX3B1dF9hcmcocF9hcmcsIHBfYXJndiwgdmZwX3Nsb3QpOworICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAvKiBUcnkgYWxsb2NhdGluZyBpbiBjb3JlIHJlZ2lzdGVycy4gKi8KKyAgICAgIGVsc2UgaWYgKCFkb25lX3dpdGhfcmVncyAmJiAhaXNfdmZwX3R5cGUpCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyICp0cmVncCA9IGZmaV9hbGlnbihwX2FyZywgcmVncCk7CisgICAgICAgICAgc2l6ZV90IHNpemUgPSAoKnBfYXJnKS0+c2l6ZTsgCisgICAgICAgICAgc2l6ZSA9IChzaXplIDwgNCk/IDQgOiBzaXplOyAvLyBwYWQKKyAgICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSBpcyBzcGFjZSBsZWZ0IGluIHRoZSBhbGlnbmVkIHJlZ2lzdGVyIGFyZWEgdG8gcGxhY2UKKyAgICAgICAgICAgKiB0aGUgYXJndW1lbnQgKi8KKyAgICAgICAgICBpZih0cmVncCArIHNpemUgPD0gZW9fcmVncCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmVncCA9IHRyZWdwICsgZmZpX3B1dF9hcmcocF9hcmcsIHBfYXJndiwgdHJlZ3ApOworICAgICAgICAgICAgICBkb25lX3dpdGhfcmVncyA9IChyZWdwID09IGFyZ3ApOworICAgICAgICAgICAgICAvLyBlbnN1cmUgd2UgZGlkIG5vdCB3cml0ZSBpbnRvIHRoZSBzdGFjayBhcmVhCisgICAgICAgICAgICAgIEZGSV9BU1NFUlQocmVncCA8PSBhcmdwKTsKKyAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgLyogSW4gY2FzZSB0aGVyZSBhcmUgbm8gYXJndW1lbnRzIGluIHRoZSBzdGFjayBhcmVhIHlldCwgCisgICAgICAgICAgdGhlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbiB0aGUgcmVtYWluaW5nIGNvcmUgcmVnaXN0ZXJzIGFuZCBvbiB0aGUKKyAgICAgICAgICBzdGFjay4gKi8KKyAgICAgICAgICBlbHNlIGlmICghc3RhY2tfdXNlZCkgCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHN0YWNrX3VzZWQgPSAxOworICAgICAgICAgICAgICBkb25lX3dpdGhfcmVncyA9IDE7CisgICAgICAgICAgICAgIGFyZ3AgPSB0cmVncCArIGZmaV9wdXRfYXJnKHBfYXJnLCBwX2FyZ3YsIHRyZWdwKTsKKyAgICAgICAgICAgICAgRkZJX0FTU0VSVChlb19yZWdwIDwgYXJncCk7CisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAvKiBCYXNlIGNhc2UsIGFyZ3VtZW50cyBhcmUgcGFzc2VkIG9uIHRoZSBzdGFjayAqLworICAgICAgc3RhY2tfdXNlZCA9IDE7CisgICAgICBhcmdwID0gZmZpX2FsaWduKHBfYXJnLCBhcmdwKTsKKyAgICAgIGFyZ3AgKz0gZmZpX3B1dF9hcmcocF9hcmcsIHBfYXJndiwgYXJncCk7CisgICAgfQogICAvKiBJbmRpY2F0ZSB0aGUgVkZQIHJlZ2lzdGVycyB1c2VkLiAqLwogICByZXR1cm4gZWNpZi0+Y2lmLT52ZnBfdXNlZDsKIH0KQEAgLTIyNyw3ICszMTYsNyBAQAogICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKIAogICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuCSovCi0gIC8qIHZhbHVlIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lCQkgICAgICAgICovCisgIC8qIHZhbHVlIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lCQkJKi8KIAogICBpZiAoKHJ2YWx1ZSA9PSBOVUxMKSAmJiAKICAgICAgIChjaWYtPmZsYWdzID09IEZGSV9UWVBFX1NUUlVDVCkpCkBAIC0yNjEsOSArMzUwLDE3IEBACiAgICAgICBicmVhazsKICAgICB9CiAgIGlmIChzbWFsbF9zdHJ1Y3QpCi0gICAgbWVtY3B5IChydmFsdWUsICZ0ZW1wLCBjaWYtPnJ0eXBlLT5zaXplKTsKKyAgICB7CisgICAgICBGRklfQVNTRVJUKHJ2YWx1ZSAhPSBOVUxMKTsKKyAgICAgIG1lbWNweSAocnZhbHVlLCAmdGVtcCwgY2lmLT5ydHlwZS0+c2l6ZSk7CisgICAgfQorICAgIAogICBlbHNlIGlmICh2ZnBfc3RydWN0KQotICAgIG1lbWNweSAocnZhbHVlLCBlY2lmLnJ2YWx1ZSwgY2lmLT5ydHlwZS0+c2l6ZSk7CisgICAgeworICAgICAgRkZJX0FTU0VSVChydmFsdWUgIT0gTlVMTCk7CisgICAgICBtZW1jcHkgKHJ2YWx1ZSwgZWNpZi5ydmFsdWUsIGNpZi0+cnR5cGUtPnNpemUpOworICAgIH0KKyAgICAKIH0KIAogLyoqIHByaXZhdGUgbWVtYmVycyAqKi8KQEAgLTI3MSwxOCArMzY4LDE4IEBACiBzdGF0aWMgdm9pZCBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YgKGNoYXIgKnN0YWNrLCB2b2lkICoqcmV0LAogCQkJCQkgdm9pZCoqIGFyZ3MsIGZmaV9jaWYqIGNpZiwgZmxvYXQgKnZmcF9zdGFjayk7CiAKK3N0YXRpYyB2b2lkIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfVkZQIChjaGFyICpzdGFjaywgdm9pZCAqKnJldCwKKwkJCQkJIHZvaWQqKiBhcmdzLCBmZmlfY2lmKiBjaWYsIGZsb2F0ICp2ZnBfc3RhY2spOworCiB2b2lkIGZmaV9jbG9zdXJlX1NZU1YgKGZmaV9jbG9zdXJlICopOwogCiB2b2lkIGZmaV9jbG9zdXJlX1ZGUCAoZmZpX2Nsb3N1cmUgKik7CiAKIC8qIFRoaXMgZnVuY3Rpb24gaXMganVtcGVkIHRvIGJ5IHRoZSB0cmFtcG9saW5lICovCiAKLXVuc2lnbmVkIGludAotZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcigKLSAgICAgZmZpX2Nsb3N1cmUgKmNsb3N1cmUsCi0gICAgIHZvaWQgKipyZXNwcCwKLSAgICAgdm9pZCAqYXJncywKLSAgICAgdm9pZCAqdmZwX2FyZ3MpCit1bnNpZ25lZCBpbnQgRkZJX0hJRERFTgorZmZpX2Nsb3N1cmVfaW5uZXIgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCAKKwkJICAgdm9pZCAqKnJlc3BwLCB2b2lkICphcmdzLCB2b2lkICp2ZnBfYXJncykKIHsKICAgLy8gb3VyIHZhcmlvdXMgdGhpbmdzLi4uCiAgIGZmaV9jaWYgICAgICAgKmNpZjsKQEAgLTI5Niw4ICszOTMsMTAgQEAKICAgICogdmFsdWUgb24gdGhlIHN0YWNrOyBhbmQgaWYgdGhlIGZ1bmN0aW9uIHJldHVybnMKICAgICogYSBzdHJ1Y3R1cmUsIGl0IHdpbGwgcmUtc2V0IFJFU1AgdG8gcG9pbnQgdG8gdGhlCiAgICAqIHN0cnVjdHVyZSByZXR1cm4gYWRkcmVzcy4gICovCi0KLSAgZmZpX3ByZXBfaW5jb21pbmdfYXJnc19TWVNWKGFyZ3MsIHJlc3BwLCBhcmdfYXJlYSwgY2lmLCB2ZnBfYXJncyk7CisgIGlmIChjaWYtPmFiaSA9PSBGRklfVkZQKQorICAgIGZmaV9wcmVwX2luY29taW5nX2FyZ3NfVkZQKGFyZ3MsIHJlc3BwLCBhcmdfYXJlYSwgY2lmLCB2ZnBfYXJncyk7CisgIGVsc2UKKyAgICBmZmlfcHJlcF9pbmNvbWluZ19hcmdzX1NZU1YoYXJncywgcmVzcHAsIGFyZ19hcmVhLCBjaWYsIHZmcF9hcmdzKTsKIAogICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCAqcmVzcHAsIGFyZ19hcmVhLCBjbG9zdXJlLT51c2VyX2RhdGEpOwogCkBAIC0zMTIsNyArNDExLDcgQEAKIAkJCSAgICBmbG9hdCAqdmZwX3N0YWNrKQogLypAPWV4cG9ydGhlYWRlckAqLwogewotICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaSwgdmkgPSAwOworICByZWdpc3RlciB1bnNpZ25lZCBpbnQgaTsKICAgcmVnaXN0ZXIgdm9pZCAqKnBfYXJndjsKICAgcmVnaXN0ZXIgY2hhciAqYXJncDsKICAgcmVnaXN0ZXIgZmZpX3R5cGUgKipwX2FyZzsKQEAgLTMyOSwyNyArNDI4LDggQEAKICAgZm9yIChpID0gY2lmLT5uYXJncywgcF9hcmcgPSBjaWYtPmFyZ190eXBlczsgKGkgIT0gMCk7IGktLSwgcF9hcmcrKykKICAgICB7CiAgICAgICBzaXplX3QgejsKLSAgICAgIHNpemVfdCBhbGlnbm1lbnQ7Ci0gIAotICAgICAgaWYgKGNpZi0+YWJpID09IEZGSV9WRlAKLQkgICYmIHZpIDwgY2lmLT52ZnBfbmFyZ3MgJiYgdmZwX3R5cGVfcCAoKnBfYXJnKSkKLQl7Ci0JICAqcF9hcmd2KysgPSAodm9pZCopKHZmcF9zdGFjayArIGNpZi0+dmZwX2FyZ3NbdmkrK10pOwotCSAgY29udGludWU7Ci0JfQogCi0gICAgICBhbGlnbm1lbnQgPSAoKnBfYXJnKS0+YWxpZ25tZW50OwotICAgICAgaWYgKGFsaWdubWVudCA8IDQpCi0JYWxpZ25tZW50ID0gNDsKLSNpZmRlZiBfV0lOMzJfV0NFCi0gICAgICBlbHNlCi0JaWYgKGFsaWdubWVudCA+IDQpCi0JICBhbGlnbm1lbnQgPSA0OwotI2VuZGlmCi0gICAgICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkgKi8KLSAgICAgIGlmICgoYWxpZ25tZW50IC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApIHsKLQlhcmdwID0gKGNoYXIgKikgQUxJR04oYXJncCwgYWxpZ25tZW50KTsKLSAgICAgIH0KKyAgICAgIGFyZ3AgPSBmZmlfYWxpZ24ocF9hcmcsIGFyZ3ApOwogCiAgICAgICB6ID0gKCpwX2FyZyktPnNpemU7CiAKQEAgLTM2NCw2ICs0NDQsOTUgQEAKICAgcmV0dXJuOwogfQogCisvKkAtZXhwb3J0aGVhZGVyQCovCitzdGF0aWMgdm9pZCAKK2ZmaV9wcmVwX2luY29taW5nX2FyZ3NfVkZQKGNoYXIgKnN0YWNrLCB2b2lkICoqcnZhbHVlLAorCQkJICAgIHZvaWQgKiphdmFsdWUsIGZmaV9jaWYgKmNpZiwKKwkJCSAgICAvKiBVc2VkIG9ubHkgdW5kZXIgVkZQIGhhcmQtZmxvYXQgQUJJLiAqLworCQkJICAgIGZsb2F0ICp2ZnBfc3RhY2spCisvKkA9ZXhwb3J0aGVhZGVyQCovCit7CisgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpLCB2aSA9IDA7CisgIHJlZ2lzdGVyIHZvaWQgKipwX2FyZ3Y7CisgIHJlZ2lzdGVyIGNoYXIgKmFyZ3AsICpyZWdwLCAqZW9fcmVncDsKKyAgcmVnaXN0ZXIgZmZpX3R5cGUgKipwX2FyZzsKKyAgY2hhciBkb25lX3dpdGhfcmVncyA9IDA7CisgIGNoYXIgc3RhY2tfdXNlZCA9IDA7CisgIGNoYXIgaXNfdmZwX3R5cGU7CisKKyAgRkZJX0FTU0VSVChjaWYtPmFiaSA9PSBGRklfVkZQKTsKKyAgcmVncCA9IHN0YWNrOworICBlb19yZWdwID0gYXJncCA9IHJlZ3AgKyAxNjsKKworICBpZiAoIGNpZi0+ZmxhZ3MgPT0gRkZJX1RZUEVfU1RSVUNUICkgeworICAgICpydmFsdWUgPSAqKHZvaWQgKiopIHJlZ3A7CisgICAgcmVncCArPSA0OworICB9CisKKyAgcF9hcmd2ID0gYXZhbHVlOworCisgIGZvciAoaSA9IGNpZi0+bmFyZ3MsIHBfYXJnID0gY2lmLT5hcmdfdHlwZXM7IChpICE9IDApOyBpLS0sIHBfYXJnKyspCisgICAgeworICAgIHNpemVfdCB6OworICAgIGlzX3ZmcF90eXBlID0gdmZwX3R5cGVfcCAoKnBfYXJnKTsgCisKKyAgICBpZih2aSA8IGNpZi0+dmZwX25hcmdzICYmIGlzX3ZmcF90eXBlKQorICAgICAgeworICAgICAgICAqcF9hcmd2KysgPSAodm9pZCopKHZmcF9zdGFjayArIGNpZi0+dmZwX2FyZ3NbdmkrK10pOworICAgICAgICBjb250aW51ZTsKKyAgICAgIH0KKyAgICBlbHNlIGlmICghZG9uZV93aXRoX3JlZ3MgJiYgIWlzX3ZmcF90eXBlKQorICAgICAgeworICAgICAgICBjaGFyKiB0cmVncCA9IGZmaV9hbGlnbihwX2FyZywgcmVncCk7CisKKyAgICAgICAgeiA9ICgqcF9hcmcpLT5zaXplOyAKKyAgICAgICAgeiA9ICh6IDwgNCk/IDQgOiB6OyAvLyBwYWQKKyAgICAgICAgCisgICAgICAgIC8qIGlmIHRoZSBhcmd1bWVudHMgZWl0aGVyIGZpdHMgaW50byB0aGUgcmVnaXN0ZXJzIG9yIHVzZXMgcmVnaXN0ZXJzCisgICAgICAgICAqIGFuZCBzdGFjaywgd2hpbGUgd2UgaGF2ZW4ndCByZWFkIG90aGVyIHRoaW5ncyBmcm9tIHRoZSBzdGFjayAqLworICAgICAgICBpZih0cmVncCArIHogPD0gZW9fcmVncCB8fCAhc3RhY2tfdXNlZCkgCisgICAgICAgICAgeworICAgICAgICAgIC8qIGJlY2F1c2Ugd2UncmUgbGl0dGxlIGVuZGlhbiwgdGhpcyBpcyB3aGF0IGl0IHR1cm5zIGludG8uICovCisgICAgICAgICAgKnBfYXJndiA9ICh2b2lkKikgdHJlZ3A7CisKKyAgICAgICAgICBwX2FyZ3YrKzsKKyAgICAgICAgICByZWdwID0gdHJlZ3AgKyB6OworICAgICAgICAgIC8vIGlmIHdlIHJlYWQgcGFzdCB0aGUgbGFzdCBjb3JlIHJlZ2lzdGVyLCBtYWtlIHN1cmUgd2UgaGF2ZSBub3QgcmVhZAorICAgICAgICAgIC8vIGZyb20gdGhlIHN0YWNrIGJlZm9yZSBhbmQgY29udGludWUgcmVhZGluZyBhZnRlciByZWdwCisgICAgICAgICAgaWYocmVncCA+IGVvX3JlZ3ApCisgICAgICAgICAgICB7CisgICAgICAgICAgICBpZihzdGFja191c2VkKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYWJvcnQoKTsgLy8gd2Ugc2hvdWxkIG5ldmVyIHJlYWQgcGFzdCB0aGUgZW5kIG9mIHRoZSByZWdpc3RlcgorICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFyZSBpZiB0aGUgc3RhY2sgaXMgYWxyZWFkeSBpbiB1c2UKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJncCA9IHJlZ3A7CisgICAgICAgICAgICB9CisgICAgICAgICAgaWYocmVncCA+PSBlb19yZWdwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgZG9uZV93aXRoX3JlZ3MgPSAxOworICAgICAgICAgICAgc3RhY2tfdXNlZCA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgfQorICAgICAgfQorICAgIHN0YWNrX3VzZWQgPSAxOworCisgICAgYXJncCA9IGZmaV9hbGlnbihwX2FyZywgYXJncCk7CisKKyAgICB6ID0gKCpwX2FyZyktPnNpemU7CisKKyAgICAvKiBiZWNhdXNlIHdlJ3JlIGxpdHRsZSBlbmRpYW4sIHRoaXMgaXMgd2hhdCBpdCB0dXJucyBpbnRvLiAgICovCisKKyAgICAqcF9hcmd2ID0gKHZvaWQqKSBhcmdwOworCisgICAgcF9hcmd2Kys7CisgICAgYXJncCArPSB6OworICAgIH0KKyAgCisgIHJldHVybjsKK30KKwogLyogSG93IHRvIG1ha2UgYSB0cmFtcG9saW5lLiAgKi8KIAogZXh0ZXJuIHVuc2lnbmVkIGludCBmZmlfYXJtX3RyYW1wb2xpbmVbM107CkBAIC0zODEsNyArNTUwLDcgQEAKIHR5cGVkZWYgc3RydWN0IGZmaV90cmFtcG9saW5lX3RhYmxlX2VudHJ5IGZmaV90cmFtcG9saW5lX3RhYmxlX2VudHJ5OwogCiBzdHJ1Y3QgZmZpX3RyYW1wb2xpbmVfdGFibGUgewotICAvKiBjb250aWdpb3VzIHdyaXRhYmxlIGFuZCBleGVjdXRhYmxlIHBhZ2VzICovCisgIC8qIGNvbnRpZ3VvdXMgd3JpdGFibGUgYW5kIGV4ZWN1dGFibGUgcGFnZXMgKi8KICAgdm1fYWRkcmVzc190IGNvbmZpZ19wYWdlOwogICB2bV9hZGRyZXNzX3QgdHJhbXBvbGluZV9wYWdlOwogCkBAIC00MjEsNyArNTkwLDcgQEAKIHsKICAgZmZpX3RyYW1wb2xpbmVfdGFibGUgKnRhYmxlID0gTlVMTDsKIAotICAvKiBMb29wIHVudGlsIHdlIGNhbiBhbGxvY2F0ZSB0d28gY29udGlnaW91cyBwYWdlcyAqLworICAvKiBMb29wIHVudGlsIHdlIGNhbiBhbGxvY2F0ZSB0d28gY29udGlndW91cyBwYWdlcyAqLwogICB3aGlsZSAodGFibGUgPT0gTlVMTCkgewogICAgIHZtX2FkZHJlc3NfdCBjb25maWdfcGFnZSA9IDB4MDsKICAgICBrZXJuX3JldHVybl90IGt0OwpAQCAtNjE3LDcgKzc4Niw3IEBACiAjZW5kaWYKICAgZWxzZQogICAgIHJldHVybiBGRklfQkFEX0FCSTsKLSAgICAKKwogI2lmIEZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUKICAgdm9pZCAqKmNvbmZpZyA9IEZGSV9UUkFNUE9MSU5FX0NPREVMT0NfQ09ORklHKGNvZGVsb2MpOwogICBjb25maWdbMF0gPSBjbG9zdXJlOwpAQCAtNzAwLDkgKzg2OSw5IEBACiAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwbGFjZV92ZnBfYXJnIChmZmlfY2lmICpjaWYsIGZmaV90eXBlICp0KQorc3RhdGljIGludCBwbGFjZV92ZnBfYXJnIChmZmlfY2lmICpjaWYsIGZmaV90eXBlICp0KQogewotICBpbnQgcmVnID0gY2lmLT52ZnBfcmVnX2ZyZWU7CisgIHNob3J0IHJlZyA9IGNpZi0+dmZwX3JlZ19mcmVlOwogICBpbnQgbnJlZ3MgPSB0LT5zaXplIC8gc2l6ZW9mIChmbG9hdCk7CiAgIGludCBhbGlnbiA9ICgodC0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1RfVkZQX0ZMT0FUCiAJCXx8IHQtPnR5cGUgPT0gRkZJX1RZUEVfRkxPQVQpID8gMSA6IDIpOwpAQCAtNzMzLDkgKzkwMiwxMyBAQAogCSAgICByZWcgKz0gMTsKIAkgIGNpZi0+dmZwX3JlZ19mcmVlID0gcmVnOwogCX0KLSAgICAgIHJldHVybjsKKyAgICAgIHJldHVybiAwOwogICAgIG5leHRfcmVnOiA7CiAgICAgfQorICAvLyBkb25lLCBtYXJrIGFsbCByZWdzIGFzIHVzZWQKKyAgY2lmLT52ZnBfcmVnX2ZyZWUgPSAxNjsKKyAgY2lmLT52ZnBfdXNlZCA9IDB4RkZGRjsKKyAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyB2b2lkIGxheW91dF92ZnBfYXJncyAoZmZpX2NpZiAqY2lmKQpAQCAtNzUwLDcgKzkyMyw5IEBACiAgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyspCiAgICAgewogICAgICAgZmZpX3R5cGUgKnQgPSBjaWYtPmFyZ190eXBlc1tpXTsKLSAgICAgIGlmICh2ZnBfdHlwZV9wICh0KSkKLQlwbGFjZV92ZnBfYXJnIChjaWYsIHQpOworICAgICAgaWYgKHZmcF90eXBlX3AgKHQpICYmIHBsYWNlX3ZmcF9hcmcgKGNpZiwgdCkgPT0gMSkKKyAgICAgICAgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL2dlbnRyYW1wLnNoIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL2dlbnRyYW1wLnNoCmluZGV4IDc0ZjBiODYuLjA1YzQzYTMgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9nZW50cmFtcC5zaAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vZ2VudHJhbXAuc2gKQEAgLTg0LDcgKzg0LDcgQEAKIH0KIAogCi0jIFdBUk5JTkcgLSBEb24ndCBtb2RpZnkgdGhlIHRyYW1wb2xpbmUgY29kZSBzaXplIHdpdGhvdXQgYWxzbyB1cGRhdGluZyB0aGUgcmVsZXZlbnQgbGliZmZpIGNvZGUKKyMgV0FSTklORyAtIERvbid0IG1vZGlmeSB0aGUgdHJhbXBvbGluZSBjb2RlIHNpemUgd2l0aG91dCBhbHNvIHVwZGF0aW5nIHRoZSByZWxldmFudCBsaWJmZmkgY29kZQogdHJhbXBvbGluZSAoKSB7CiAgICAgY2F0IDw8IEVORAogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYXJtL3N5c3YuUwppbmRleCBmYjM4Y2Q2Li41NDFiYmU5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9hcm0vc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2FybS9zeXN2LlMKQEAgLTEwOSw0MiArMTA5LDI3IEBACiAjZGVmaW5lIFVOV0lORCBACiAjZW5kaWYJCiAKLQkKKy5zeW50YXggdW5pZmllZAorCiAjaWYgZGVmaW5lZChfX3RodW1iX18pICYmICFkZWZpbmVkKF9fVEhVTUJfSU5URVJXT1JLX18pCi0ubWFjcm8JQVJNX0ZVTkNfU1RBUlQgbmFtZQotCS50ZXh0Ci0JLmFsaWduIDAKLQkudGh1bWIKLQkudGh1bWJfZnVuYwotI2lmZGVmIF9fQVBQTEVfXwotCUVOVFJZKCQwKQorI2RlZmluZSBBUk1fRlVOQ19TVEFSVChuYW1lKSBcCisJLnRleHQ7IFwKKwkuYWxpZ24gMjsgXAorCS50aHVtYjsgXAorCS50aHVtYl9mdW5jOyBcCisJRU5UUlkobmFtZSk7IFwKKwlieCBwYzsgXAorCW5vcDsgXAorCS5hcm07IFwKKwlVTldJTkQgLmZuc3RhcnQ7IFwKK19MX18jI25hbWU6CiAjZWxzZQotCUVOVFJZKFxuYW1lKQotI2VuZGlmCi0JYngJcGMKLQlub3AKLQkuYXJtCisjZGVmaW5lIEFSTV9GVU5DX1NUQVJUKG5hbWUpIFwKKwkudGV4dDsgXAorCS5hbGlnbiAyOyBcCisJLmFybTsgXAorCUVOVFJZKG5hbWUpOyBcCiAJVU5XSU5EIC5mbnN0YXJ0Ci0vKiBBIGhvb2sgdG8gdGVsbCBnZGIgdGhhdCB3ZSd2ZSBzd2l0Y2hlZCB0byBBUk0gbW9kZS4gIEFsc28gdXNlZCB0byBjYWxsCi0gICBkaXJlY3RseSBmcm9tIG90aGVyIGxvY2FsIGFybSByb3V0aW5lcy4gICovCi0jaWZkZWYgX19BUFBMRV9fCi1fTF9fJDA6Ci0jZWxzZQotX0xfX1xuYW1lOgotI2VuZGlmCi0uZW5kbQotI2Vsc2UKLS5tYWNybwlBUk1fRlVOQ19TVEFSVCBuYW1lCi0JLnRleHQKLQkuYWxpZ24gMAotCS5hcm0KLSNpZmRlZiBfX0FQUExFX18KLQlFTlRSWSgkMCkKLSNlbHNlCi0JRU5UUlkoXG5hbWUpCi0jZW5kaWYKLQlVTldJTkQgLmZuc3RhcnQKLS5lbmRtCiAjZW5kaWYKIAogLm1hY3JvCVJFVExETQlyZWdzPSwgY29uZD0sIGRpcm49aWEKQEAgLTE3MSw3ICsxNTYsNyBAQAogCUAgc3ArMDogZWNpZi5ydmFsdWUKIAogCUAgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCi1BUk1fRlVOQ19TVEFSVCBmZmlfY2FsbF9TWVNWCitBUk1fRlVOQ19TVEFSVChmZmlfY2FsbF9TWVNWKQogCUAgU2F2ZSByZWdpc3RlcnMKICAgICAgICAgc3RtZmQJc3AhLCB7cjAtcjMsIGZwLCBscn0KIAlVTldJTkQgLnNhdmUJe3IwLXIzLCBmcCwgbHJ9CkBAIC0xODcsNyArMTcyLDcgQEAKIAlAICAgICByMSBhbHJlYWR5IHNldAogCiAJQCBDYWxsIGZmaV9wcmVwX2FyZ3Moc3RhY2ssICZlY2lmKQotCWJsCUNOQU1FKGZmaV9wcmVwX2FyZ3MpCisJYmwJQ05BTUUoZmZpX3ByZXBfYXJnc19TWVNWKQogCiAJQCBtb3ZlIGZpcnN0IDQgcGFyYW1ldGVycyBpbiByZWdpc3RlcnMKIAlsZG1pYQlzcCwge3IwLXIzfQpAQCAtMjI4LDcgKzIxMyw3IEBACiAjaWYgZGVmaW5lZChfX1NPRlRGUF9fKSB8fCBkZWZpbmVkKF9fQVJNX0VBQklfXykKIAljbXBuZQlyMywgI0ZGSV9UWVBFX0RPVUJMRQogI2VuZGlmCi0Jc3RtZXFpYQlyMiwge3IwLCByMX0KKwlzdG1pYWVxCXIyLCB7cjAsIHIxfQogCiAjaWYgIWRlZmluZWQoX19TT0ZURlBfXykgJiYgIWRlZmluZWQoX19BUk1fRUFCSV9fKQogCWJlcQlMU1lNKExlcGlsb2d1ZSkKQEAgLTI2MCwxMyArMjQ1LDEzIEBACiAKIC8qCiAJdW5zaWduZWQgaW50IEZGSV9ISURERU4KLQlmZmlfY2xvc3VyZV9TWVNWX2lubmVyIChjbG9zdXJlLCByZXNwcCwgYXJncykKKwlmZmlfY2xvc3VyZV9pbm5lciAoY2xvc3VyZSwgcmVzcHAsIGFyZ3MpCiAJICAgICBmZmlfY2xvc3VyZSAqY2xvc3VyZTsKIAkgICAgIHZvaWQgKipyZXNwcDsKICAgCSAgICAgdm9pZCAqYXJnczsKICovCiAKLUFSTV9GVU5DX1NUQVJUIGZmaV9jbG9zdXJlX1NZU1YKK0FSTV9GVU5DX1NUQVJUKGZmaV9jbG9zdXJlX1NZU1YpCiAJVU5XSU5EIC5wYWQgIzE2CiAJYWRkCWlwLCBzcCwgIzE2CiAJc3RtZmQJc3AhLCB7aXAsIGxyfQpAQCAtMjc2LDcgKzI2MSw3IEBACiAJc3ViCXNwLCBzcCwgIzE2CiAJc3RyCXNwLCBbc3AsICM4XQogCWFkZAlyMSwgc3AsICM4Ci0JYmwJQ05BTUUoZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcikKKwlibAlDTkFNRShmZmlfY2xvc3VyZV9pbm5lcikKIAljbXAJcjAsICNGRklfVFlQRV9JTlQKIAliZXEJLkxyZXRpbnQKIApAQCAtMzQ1LDcgKzMzMCw3IEBACiAJQCByMzogICBmaWctPmZsYWdzCiAJQCBzcCswOiBlY2lmLnJ2YWx1ZQogCi1BUk1fRlVOQ19TVEFSVCBmZmlfY2FsbF9WRlAKK0FSTV9GVU5DX1NUQVJUKGZmaV9jYWxsX1ZGUCkKIAlAIFNhdmUgcmVnaXN0ZXJzCiAgICAgICAgIHN0bWZkCXNwISwge3IwLXIzLCBmcCwgbHJ9CiAJVU5XSU5EIC5zYXZlCXtyMC1yMywgZnAsIGxyfQpAQCAtMzY0LDEwICszNDksMTEgQEAKIAlzdWIJcjIsIGZwLCAjNjQgICBAIFZGUCBzY3JhdGNoIHNwYWNlCiAKIAlAIENhbGwgZmZpX3ByZXBfYXJncyhzdGFjaywgJmVjaWYsIHZmcF9zcGFjZSkKLQlibAlDTkFNRShmZmlfcHJlcF9hcmdzKQorCWJsCUNOQU1FKGZmaV9wcmVwX2FyZ3NfVkZQKQogCiAJQCBMb2FkIFZGUCByZWdpc3RlciBhcmdzIGlmIG5lZWRlZAogCWNtcAlyMCwgIzAKKwltb3YJaXAsIGZwCiAJYmVxCUxTWU0oTGJhc2VfYXJncykKIAogCUAgTG9hZCBvbmx5IGQwIGlmIHBvc3NpYmxlCkBAIC00MzMsNyArNDE5LDcgQEAKICAgICAgICAgLnNpemUgICAgQ05BTUUoZmZpX2NhbGxfVkZQKSwuZmZpX2NhbGxfVkZQX2VuZC1DTkFNRShmZmlfY2FsbF9WRlApCiAKIAotQVJNX0ZVTkNfU1RBUlQgZmZpX2Nsb3N1cmVfVkZQCitBUk1fRlVOQ19TVEFSVChmZmlfY2xvc3VyZV9WRlApCiAJZnN0bWZkZAlzcCEsIHtkMC1kN30KIAlAIHIwLXIzLCB0aGVuIGQwLWQ3CiAJVU5XSU5EIC5wYWQgIzgwCkBAIC00NDYsNyArNDMyLDcgQEAKIAlzdWIJc3AsIHNwLCAjNzIKIAlzdHIJc3AsIFtzcCwgIzY0XQogCWFkZAlyMSwgc3AsICM2NAotCWJsCUNOQU1FKGZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIpCisJYmwJQ05BTUUoZmZpX2Nsb3N1cmVfaW5uZXIpCiAKIAljbXAJcjAsICNGRklfVFlQRV9JTlQKIAliZXEJLkxyZXRpbnRfdmZwCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9iZmluL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvYmZpbi9mZmkuYwppbmRleCAwYmVjY2MxLi4yMmEyYWNkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9iZmluL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2JmaW4vZmZpLmMKQEAgLTEsNSArMSw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgZmZpLmMgLSBDb3B5cmlnaHQgKGMpIDIwMTIgIEFsZXhhbmRyZSBLLiBJLiBkZSBNZW5kb25jYSA8YWxleGFuZHJlLmtldW5lY2tlQGdtYWlsLmNvbT4KKyAgIGZmaS5jIC0gQ29weXJpZ2h0IChjKSAyMDEyICBBbGV4YW5kcmUgSy4gSS4gZGUgTWVuZG9uY2EgPGFsZXhhbmRyZS5rZXVuZWNrZUBnbWFpbC5jb20+LAorCQkJCQkJCSAgIFBhdWxvIFBpemFycm8gPHBhdWxvLnBpemFycm9AZ21haWwuY29tPgogCiAgICBCbGFja2ZpbiBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9iZmluL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2JmaW4vc3lzdi5TCmluZGV4IGFlN2ExNTIuLmY0Mjc4YmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2JmaW4vc3lzdi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2JmaW4vc3lzdi5TCkBAIC0xLDUgKzEsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIHN5c3YuUyAtIENvcHlyaWdodCAoYykgMjAxMiAgQWxleGFuZHJlIEsuIEkuIGRlIE1lbmRvbmNhIDxhbGV4YW5kcmUua2V1bmVja2VAZ21haWwuY29tPgorICAgc3lzdi5TIC0gQ29weXJpZ2h0IChjKSAyMDEyICBBbGV4YW5kcmUgSy4gSS4gZGUgTWVuZG9uY2EgPGFsZXhhbmRyZS5rZXVuZWNrZUBnbWFpbC5jb20+LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYXVsbyBQaXphcnJvIDxwYXVsby5waXphcnJvQGdtYWlsLmNvbT4KIAogICAgQmxhY2tmaW4gRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKIApAQCAtMzIsNyArMzMsNyBAQAogLmFsaWduIDQKIAogCS8qCi0JIFRoZXJlIGlzIGEgImZlYXR1cmUiIGluIHRoZSBiZmluIHRvb2xjaGFpbiB0aGF0IGl0IHB1dHMgYSBfIGJlZm9yZSBmdW5jaW9uIG5hbWVzCisJIFRoZXJlIGlzIGEgImZlYXR1cmUiIGluIHRoZSBiZmluIHRvb2xjaGFpbiB0aGF0IGl0IHB1dHMgYSBfIGJlZm9yZSBmdW5jdGlvbiBuYW1lcwogCSB0aGF0J3Mgd2h5IHRoZSBmdW5jdGlvbiBoZXJlIGl0J3MgY2FsbGVkIF9mZmlfY2FsbF9TWVNWIGFuZCBub3QgZmZpX2NhbGxfU1lTVgogCSAqLwogCS5nbG9iYWwgX2ZmaV9jYWxsX1NZU1Y7CkBAIC00MCwyNSArNDEsMjYgQEAKIAkuZnVuYyBmZmlfY2FsbF9TWVNWCiAKIAkvKgotCWNpZi0+Ynl0ZXMgIAk9IFIwCShmcCs4KQotCSZlY2lmCQkJPSBSMQkoZnArMTIpCi0JZmZpX3ByZXBfYXJncwk9IFIyCShmcCsxNikKLQlyZXRfdHlwZQkJPSBzdGFjayAoZnArMjApCi0JZWNpZi5ydmFsdWUJCT0gc3RhY2sgKGZwKzI0KQotCWZuCQkJCT0gc3RhY2sJKGZwKzI4KQotCQkJCQkgIGdvdAkoZnArMzIpCi0gICAgVGhlcmUgaXMgcm9vbSBmb3IgaW1wcm92ZW1lbnQgaGVyZSAod2UgY2FuIHVzZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzCi0gICAgICAgIGluc3RlYWQgb2Ygc2F2aW5nIHRoZSB2YWx1ZXMgaW4gdGhlIG1lbW9yeSkKLQlSRUdTOgotCQlQNSA9PiBTdGFjayBwb2ludGVyIChmdW5jdGlvbiBhcmd1bWVudHMpCi0JCVI1ID0+IGNpZi0+Ynl0ZXMKLQkJUjQgPT4gcmV0LT50eXBlCisgICAgICAgICBjaWYtPmJ5dGVzICAgID0gUjAgICAgKGZwKzgpCisgICAgICAgICAmZWNpZiAgICAgICAgID0gUjEgICAgKGZwKzEyKQorICAgICAgICAgZmZpX3ByZXBfYXJncyA9IFIyICAgIChmcCsxNikKKyAgICAgICAgIHJldF90eXBlICAgICAgPSBzdGFjayAoZnArMjApCisgICAgICAgICBlY2lmLnJ2YWx1ZSAgID0gc3RhY2sgKGZwKzI0KQorICAgICAgICAgZm4gICAgICAgICAgICA9IHN0YWNrIChmcCsyOCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdCAoZnArMzIpCiAKLQkJRlAtMjAgPSBQMwotCQlGUC0xNiA9IFNQIChwYXJhbWV0ZXJzIGFyZWEpCi0JCUZQLTEyID0gU1AgKHRlbXApCi0JCUZQLTA4ID0gZnVuY3Rpb24gcmV0dXJuIHBhcnQgMSBbUjBdCi0JCUZQLTA0ID0gZnVuY3Rpb24gcmV0dXJuIHBhcnQgMiBbUjFdCisgICAgICAgIFRoZXJlIGlzIHJvb20gZm9yIGltcHJvdmVtZW50IGhlcmUgKHdlIGNhbiB1c2UgdGVtcG9yYXJ5IHJlZ2lzdGVycworICAgICAgICBpbnN0ZWFkIG9mIHNhdmluZyB0aGUgdmFsdWVzIGluIHRoZSBtZW1vcnkpCisgICAgICAgIFJFR1M6CisgICAgICAgIFA1ID0+IFN0YWNrIHBvaW50ZXIgKGZ1bmN0aW9uIGFyZ3VtZW50cykKKyAgICAgICAgUjUgPT4gY2lmLT5ieXRlcworICAgICAgICBSNCA9PiByZXQtPnR5cGUKKworICAgICAgICBGUC0yMCA9IFAzCisgICAgICAgIEZQLTE2ID0gU1AgKHBhcmFtZXRlcnMgYXJlYSkKKyAgICAgICAgRlAtMTIgPSBTUCAodGVtcCkKKyAgICAgICAgRlAtMDggPSBmdW5jdGlvbiByZXR1cm4gcGFydCAxIFtSMF0KKyAgICAgICAgRlAtMDQgPSBmdW5jdGlvbiByZXR1cm4gcGFydCAyIFtSMV0KIAkqLwogCiBfZmZpX2NhbGxfU1lTVjoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Nsb3N1cmVzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9jbG9zdXJlcy5jCmluZGV4IDYyOThkNmYuLmM3ODYzZjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2Nsb3N1cmVzLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvY2xvc3VyZXMuYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGZmaV9jb21tb24uaD4KIAogI2lmICFGRklfTU1BUF9FWEVDX1dSSVQgJiYgIUZGSV9FWEVDX1RSQU1QT0xJTkVfVEFCTEUKLSMgaWYgX19nbnVfbGludXhfXworIyBpZiBfX2dudV9saW51eF9fICYmICFkZWZpbmVkKF9fQU5EUk9JRF9fKQogLyogVGhpcyBtYWNybyBpbmRpY2F0ZXMgaXQgbWF5IGJlIGZvcmJpZGRlbiB0byBtYXAgYW5vbnltb3VzIG1lbW9yeQogICAgd2l0aCBib3RoIHdyaXRlIGFuZCBleGVjdXRlIHBlcm1pc3Npb24uICBDb2RlIGNvbXBpbGVkIHdoZW4gdGhpcwogICAgb3B0aW9uIGlzIGRlZmluZWQgd2lsbCBhdHRlbXB0IHRvIG1hcCBzdWNoIHBhZ2VzIG9uY2UsIGJ1dCBpZiBpdApAQCAtMTgxLDEwICsxODEsMjYgQEAKIHN0YXRpYyBpbnQKIGVtdXRyYW1wX2VuYWJsZWRfY2hlY2sgKHZvaWQpCiB7Ci0gIGlmIChnZXRlbnYgKCJGRklfRElTQUJMRV9FTVVUUkFNUCIpID09IE5VTEwpCi0gICAgcmV0dXJuIDE7Ci0gIGVsc2UKKyAgY2hhciAqYnVmID0gTlVMTDsKKyAgc2l6ZV90IGxlbiA9IDA7CisgIEZJTEUgKmY7CisgIGludCByZXQ7CisgIGYgPSBmb3BlbiAoIi9wcm9jL3NlbGYvc3RhdHVzIiwgInIiKTsKKyAgaWYgKGYgPT0gTlVMTCkKICAgICByZXR1cm4gMDsKKyAgcmV0ID0gMDsKKworICB3aGlsZSAoZ2V0bGluZSAoJmJ1ZiwgJmxlbiwgZikgIT0gLTEpCisgICAgaWYgKCFzdHJuY21wIChidWYsICJQYVg6IiwgNCkpCisgICAgICB7CisgICAgICAgIGNoYXIgZW11dHJhbXA7CisgICAgICAgIGlmIChzc2NhbmYgKGJ1ZiwgIiUqcyAlKmMlYyIsICZlbXV0cmFtcCkgPT0gMSkKKyAgICAgICAgICByZXQgPSAoZW11dHJhbXAgPT0gJ0UnKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgIGZyZWUgKGJ1Zik7CisgIGZjbG9zZSAoZik7CisgIHJldHVybiByZXQ7CiB9CiAKICNkZWZpbmUgaXNfZW11dHJhbXBfZW5hYmxlZCgpIChlbXV0cmFtcF9lbmFibGVkID49IDAgPyBlbXV0cmFtcF9lbmFibGVkIFwKQEAgLTI2NCw3ICsyODAsNyBAQAogb3Blbl90ZW1wX2V4ZWNfZmlsZV9kaXIgKGNvbnN0IGNoYXIgKmRpcikKIHsKICAgc3RhdGljIGNvbnN0IGNoYXIgc3VmZml4W10gPSAiL2ZmaVhYWFhYWCI7Ci0gIGludCBsZW5kaXIgPSBzdHJsZW4gKGRpcik7CisgIHNpemVfdCBsZW5kaXIgPSBzdHJsZW4gKGRpcik7CiAgIGNoYXIgKnRlbXBuYW1lID0gX19idWlsdGluX2FsbG9jYSAobGVuZGlyICsgc2l6ZW9mIChzdWZmaXgpKTsKIAogICBpZiAoIXRlbXBuYW1lKQpAQCAtMzgyLDcgKzM5OCw3IEBACiB9CiAKIC8qIFJldHVybiBhIGZpbGUgZGVzY3JpcHRvciBvZiBhIHRlbXBvcmFyeSB6ZXJvLXNpemVkIGZpbGUgaW4gYQotICAgd3JpdGFibGUgYW5kIGV4ZXh1dGFibGUgZmlsZXN5c3RlbS4gICovCisgICB3cml0YWJsZSBhbmQgZXhlY3V0YWJsZSBmaWxlc3lzdGVtLiAgKi8KIHN0YXRpYyBpbnQKIG9wZW5fdGVtcF9leGVjX2ZpbGUgKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvZGxtYWxsb2MuYwppbmRleCAyNzczOTUzLi42ZTQ3NGI3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9kbG1hbGxvYy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2RsbWFsbG9jLmMKQEAgLTEyNjAsNyArMTI2MCw3IEBACiAjZGVmaW5lIFNJWkVfVF9CSVRTSVpFICAgICAgKHNpemVvZihzaXplX3QpIDw8IDMpCiAKIC8qIFNvbWUgY29uc3RhbnRzIGNvZXJjZWQgdG8gc2l6ZV90ICovCi0vKiBBbm5veWluZyBidXQgbmVjZXNzYXJ5IHRvIGF2b2lkIGVycm9ycyBvbiBzb21lIHBsYWZ0b3JtcyAqLworLyogQW5ub3lpbmcgYnV0IG5lY2Vzc2FyeSB0byBhdm9pZCBlcnJvcnMgb24gc29tZSBwbGF0Zm9ybXMgKi8KICNkZWZpbmUgU0laRV9UX1pFUk8gICAgICAgICAoKHNpemVfdCkwKQogI2RlZmluZSBTSVpFX1RfT05FICAgICAgICAgICgoc2l6ZV90KTEpCiAjZGVmaW5lIFNJWkVfVF9UV08gICAgICAgICAgKChzaXplX3QpMikKQEAgLTE0MTQsNyArMTQxNCw3IEBACiAjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgIE1GQUlMCiAjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLwogCi0vKiBtc3RhdGUgYml0IHNldCBpZiBjb250aW5ndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KKy8qIG1zdGF0ZSBiaXQgc2V0IGlmIGNvbnRpZ3VvdXMgbW9yZWNvcmUgZGlzYWJsZWQgb3IgZmFpbGVkICovCiAjZGVmaW5lIFVTRV9OT05DT05USUdVT1VTX0JJVCAoNFUpCiAKIC8qIHNlZ21lbnQgYml0IHNldCBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSAqLwpAQCAtMTY2Niw3ICsxNjY2LDcgQEAKIHR5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAgbWNodW5rOwogdHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtY2h1bmtwdHI7CiB0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIHNiaW5wdHI7ICAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIGNodW5rcyAqLwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgYmluZGV4X3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCit0eXBlZGVmIHNpemVfdCBiaW5kZXhfdDsgICAgICAgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KIHR5cGVkZWYgdW5zaWduZWQgaW50IGJpbm1hcF90OyAgICAgICAgIC8qIERlc2NyaWJlZCBiZWxvdyAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgZmxhZ190OyAgICAgICAgICAgLyogVGhlIHR5cGUgb2YgdmFyaW91cyBiaXQgZmxhZyBzZXRzICovCiAKQEAgLTMwOTUsOCArMzA5NSw4IEBACiAgICAgIGFuZCBjaG9vc2UgaXRzIGJrIG5vZGUgYXMgaXRzIHJlcGxhY2VtZW50LgogICAyLiBJZiB4IHdhcyB0aGUgbGFzdCBub2RlIG9mIGl0cyBzaXplLCBidXQgbm90IGEgbGVhZiBub2RlLCBpdCBtdXN0CiAgICAgIGJlIHJlcGxhY2VkIHdpdGggYSBsZWFmIG5vZGUgKG5vdCBtZXJlbHkgb25lIHdpdGggYW4gb3BlbiBsZWZ0IG9yCi0gICAgIHJpZ2h0KSwgdG8gbWFrZSBzdXJlIHRoYXQgbGVmdHMgYW5kIHJpZ2h0cyBvZiBkZXNjZW5kZW50cwotICAgICBjb3JyZXNwb25kIHByb3Blcmx5IHRvIGJpdCBtYXNrcy4gIFdlIHVzZSB0aGUgcmlnaHRtb3N0IGRlc2NlbmRlbnQKKyAgICAgcmlnaHQpLCB0byBtYWtlIHN1cmUgdGhhdCBsZWZ0cyBhbmQgcmlnaHRzIG9mIGRlc2NlbmRhbnRzCisgICAgIGNvcnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVzY2VuZGFudAogICAgICBvZiB4LiAgV2UgY291bGQgdXNlIGFueSBvdGhlciBsZWFmLCBidXQgdGhpcyBpcyBlYXN5IHRvIGxvY2F0ZSBhbmQKICAgICAgdGVuZHMgdG8gY291bnRlcmFjdCByZW1vdmFsIG9mIGxlZnRtb3N0cyBlbHNld2hlcmUsIGFuZCBzbyBrZWVwcwogICAgICBwYXRocyBzaG9ydGVyIHRoYW4gbWluaW1hbGx5IGd1YXJhbnRlZWQuICBUaGlzIGRvZXNuJ3QgbG9vcCBtdWNoCkBAIC0zMzkzLDcgKzMzOTMsNyBAQAogICAqc3MgPSBtLT5zZWc7IC8qIFB1c2ggY3VycmVudCByZWNvcmQgKi8KICAgbS0+c2VnLmJhc2UgPSB0YmFzZTsKICAgbS0+c2VnLnNpemUgPSB0c2l6ZTsKLSAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcHBlZCk7CisgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBwZWQpOwogICBtLT5zZWcubmV4dCA9IHNzOwogCiAgIC8qIEluc2VydCB0cmFpbGluZyBmZW5jZXBvc3RzICovCkBAIC0zNTUzLDcgKzM1NTMsNyBAQAogICAgIGlmICghaXNfaW5pdGlhbGl6ZWQobSkpIHsgLyogZmlyc3QtdGltZSBpbml0aWFsaXphdGlvbiAqLwogICAgICAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CiAgICAgICBtLT5zZWcuc2l6ZSA9IHRzaXplOwotICAgICAgc2V0X3NlZ21lbnRfZmxhZ3MoJm0tPnNlZywgbW1hcF9mbGFnKTsKKyAgICAgICh2b2lkKXNldF9zZWdtZW50X2ZsYWdzKCZtLT5zZWcsIG1tYXBfZmxhZyk7CiAgICAgICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CiAgICAgICBpbml0X2JpbnMobSk7CiAgICAgICBpZiAoaXNfZ2xvYmFsKG0pKSAKQEAgLTQ1MDIsNyArNDUwMiw3IEBACiAgICAgY2hhciogdGJhc2UgPSAoY2hhciopKENBTExfTU1BUCh0c2l6ZSkpOwogICAgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKICAgICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKHRiYXNlLCB0c2l6ZSk7Ci0gICAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBJU19NTUFQUEVEX0JJVCk7CisgICAgICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBJU19NTUFQUEVEX0JJVCk7CiAgICAgICBzZXRfbG9jayhtLCBsb2NrZWQpOwogICAgIH0KICAgfQpAQCAtNDUxNyw3ICs0NTE3LDcgQEAKICAgaWYgKGNhcGFjaXR5ID4gbXNpemUgKyBUT1BfRk9PVF9TSVpFICYmCiAgICAgICBjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CiAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUoKGNoYXIqKWJhc2UsIGNhcGFjaXR5KTsKLSAgICBzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBFWFRFUk5fQklUKTsKKyAgICAodm9pZClzZXRfc2VnbWVudF9mbGFncygmbS0+c2VnLCBFWFRFUk5fQklUKTsKICAgICBzZXRfbG9jayhtLCBsb2NrZWQpOwogICB9CiAgIHJldHVybiAobXNwYWNlKW07CkBAIC01MDk2LDEwICs1MDk2LDEwIEBACiAgICAgICAgIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCiAgICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLgogICAgICAgKiBQYWNrIGJpbnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKLSAgICAgICogVXNlIG9yZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaGhvbGQKKyAgICAgICogVXNlIG9yZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaG9sZAogICAgICAgKiBFbGltaW5hdGUgYmxvY2stbG9jYWwgZGVjbHMgdG8gc2ltcGxpZnkgdHJhY2luZyBhbmQgZGVidWdnaW5nLgogICAgICAgKiBTdXBwb3J0IGFub3RoZXIgY2FzZSBvZiByZWFsbG9jIHZpYSBtb3ZlIGludG8gdG9wCi0gICAgICAqIEZpeCBlcnJvciBvY2N1cmluZyB3aGVuIGluaXRpYWwgc2Jya19iYXNlIG5vdCB3b3JkLWFsaWduZWQuCisgICAgICAqIEZpeCBlcnJvciBvY2N1cnJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qgd29yZC1hbGlnbmVkLgogICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5zdGVhZCBvZiBTQlJLX1VOSVQgdG8KICAgICAgICAgYXZvaWQgc3VycHJpc2VzIGFib3V0IHNicmsgYWxpZ25tZW50IGNvbnZlbnRpb25zLgogICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRoYW5rcyB0byBSYXltb25kIE5panNzZW4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2lhNjQvZmZpLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9pYTY0L2ZmaS5jCmluZGV4IDk1MzNlZjYuLmI3N2E4MzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL2lhNjQvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvaWE2NC9mZmkuYwpAQCAtNDAxLDcgKzQwMSw3IEBACiAgICB0aGUgY2xvc3VyZSAoaW4gdGhlICJ0cmFtcG9saW5lIiBhcmVhKSwgYnV0IHdlIHJlcGxhY2UgdGhlIGdwCiAgICBwb2ludGVyIHdpdGggYSBwb2ludGVyIHRvIHRoZSBjbG9zdXJlIGl0c2VsZi4gIFdlIGFsc28gYWRkIHRoZSByZWFsCiAgICBncCBwb2ludGVyIHRvIHRoZSBjbG9zdXJlLiAgVGhpcyBhbGxvd3MgdGhlIGZ1bmN0aW9uIGVudHJ5IGNvZGUgdG8KLSAgIGJvdGggcmV0cmlldmUgdGhlIHVzZXIgZGF0YSwgYW5kIHRvIHJlc3RpcmUgdGhlIGNvcnJlY3QgZ3AgcG9pbnRlci4gICovCisgICBib3RoIHJldHJpZXZlIHRoZSB1c2VyIGRhdGEsIGFuZCB0byByZXN0b3JlIHRoZSBjb3JyZWN0IGdwIHBvaW50ZXIuICAqLwogCiBleHRlcm4gdm9pZCBmZmlfY2xvc3VyZV91bml4ICgpOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tODhrL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbTg4ay9mZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGRmNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbTg4ay9mZmkuYwpAQCAtMCwwICsxLDQwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBNaW9kcmFnIFZhbGxhdC4gIDxtaW9kQG9wZW5ic2Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIG04OGsgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKyAqCisgKiBUaGlzIGZpbGUgYXR0ZW1wdHMgdG8gcHJvdmlkZSBhbGwgdGhlIEZGSSBlbnRyeSBwb2ludHMgd2hpY2ggY2FuIHJlbGlhYmx5CisgKiBiZSBpbXBsZW1lbnRlZCBpbiBDLgorICoKKyAqIE9ubHkgT3BlbkJTRC9tODhrIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQ7IG90aGVyIHBsYXRmb3JtcyAoc3VjaCBhcworICogTW90b3JvbGEncyBTeXNWL204OGspIGNvdWxkIGJlIHN1cHBvcnRlZCB3aXRoIHRoZSBmb2xsb3dpbmcgdHdlYWtzOgorICoKKyAqIC0gbm9uLU9wZW5CU0Qgc3lzdGVtcyB1c2UgYW4gYG91dGdvaW5nIHBhcmFtZXRlciBhcmVhJyBhcyBwYXJ0IG9mIHRoZQorICogICA4OEJDUyBjYWxsaW5nIGNvbnZlbnRpb24sIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgdW5kZXIgT3BlbkJTRCBmcm9tCisgKiAgIHJlbGVhc2UgMy42IG9ud2FyZHMuICBTdXBwb3J0aW5nIGl0IHNob3VsZCBiZSBhcyBlYXN5IGFzIHRha2luZyBpdAorICogICBpbnRvIGFjY291bnQgd2hlbiBhZGp1c3RpbmcgdGhlIHN0YWNrLCBpbiB0aGUgYXNzZW1ibHkgY29kZS4KKyAqCisgKiAtIHRoZSBsb2dpYyBkZWNpZGluZyB3aGV0aGVyIGEgZnVuY3Rpb24gYXJndW1lbnQgZ2V0cyBwYXNzZWQgdGhyb3VnaAorICogICByZWdpc3RlcnMsIG9yIG9uIHRoZSBzdGFjaywgaGFzIGNoYW5nZWQgc2V2ZXJhbCB0aW1lcyBpbiBPcGVuQlNEIGluCisgKiAgIGVkZ2UgY2FzZXMgKGVzcGVjaWFsbHkgZm9yIHN0cnVjdHMgbGFyZ2VyIHRoYW4gMzIgYnl0ZXMgYmVpbmcgcGFzc2VkCisgKiAgIGJ5IHZhbHVlKS4gVGhlIGNvZGUgYmVsb3cgYXR0ZW1wcyB0byBtYXRjaCB0aGUgbG9naWMgdXNlZCBieSB0aGUKKyAqICAgc3lzdGVtIGNvbXBpbGVyIG9mIE9wZW5CU0QgNS4zLCBpLmUuIGdjYyAzLjMuNiB3aXRoIG1hbnkgbTg4ayBiYWNrZW5kCisgKiAgIGZpeGVzLgorICovCisKKyNpbmNsdWRlIDxmZmkuaD4KKyNpbmNsdWRlIDxmZmlfY29tbW9uLmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwordm9pZCBmZmlfY2FsbF9PQlNEICh1bnNpZ25lZCBpbnQsIGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCBpbnQsIHZvaWQgKiwKKwkJICAgIHZvaWQgKCpmbikgKCkpOwordm9pZCAqZmZpX3ByZXBfYXJncyAodm9pZCAqLCBleHRlbmRlZF9jaWYgKik7Cit2b2lkIGZmaV9jbG9zdXJlX09CU0QgKGZmaV9jbG9zdXJlICopOwordm9pZCBmZmlfY2xvc3VyZV9zdHJ1Y3RfT0JTRCAoZmZpX2Nsb3N1cmUgKik7Cit1bnNpZ25lZCBpbnQgZmZpX2Nsb3N1cmVfT0JTRF9pbm5lciAoZmZpX2Nsb3N1cmUgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQgKiwKKwkJCQkgICAgIGNoYXIgKik7Cit2b2lkIGZmaV9jYWNoZWZsdXNoX09CU0QgKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50KTsKKworI2RlZmluZSBDSUZfRkxBR1NfSU5UCQkoMSA8PCAwKQorI2RlZmluZSBDSUZfRkxBR1NfRElOVAkJKDEgPDwgMSkKKworLyoKKyAqIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlIEFQSQorICovCisKKy8qIGZmaV9wcmVwX2FyZ3MgaXMgY2FsbGVkIGJ5IHRoZSBhc3NlbWJseSByb3V0aW5lIG9uY2Ugc3RhY2sgc3BhY2UgaGFzCisgICBiZWVuIGFsbG9jYXRlZCBmb3IgdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLiAgKi8KKwordm9pZCAqCitmZmlfcHJlcF9hcmdzICh2b2lkICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKQoreworICB1bnNpZ25lZCBpbnQgaTsKKyAgdm9pZCAqKnBfYXJndjsKKyAgY2hhciAqYXJncCwgKnN0YWNrcDsKKyAgdW5zaWduZWQgaW50ICpyZWdwOworICB1bnNpZ25lZCBpbnQgcmVndXNlZDsKKyAgZmZpX3R5cGUgKipwX2FyZzsKKyAgdm9pZCAqc3RydWN0X3ZhbHVlX3B0cjsKKworICByZWdwID0gKHVuc2lnbmVkIGludCAqKXN0YWNrOworICBzdGFja3AgPSAoY2hhciAqKShyZWdwICsgOCk7CisgIHJlZ3VzZWQgPSAwOworCisgIGlmIChlY2lmLT5jaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgIWVjaWYtPmNpZi0+ZmxhZ3MpCisgICAgc3RydWN0X3ZhbHVlX3B0ciA9IGVjaWYtPnJ2YWx1ZTsKKyAgZWxzZQorICAgIHN0cnVjdF92YWx1ZV9wdHIgPSBOVUxMOworCisgIHBfYXJndiA9IGVjaWYtPmF2YWx1ZTsKKworICBmb3IgKGkgPSBlY2lmLT5jaWYtPm5hcmdzLCBwX2FyZyA9IGVjaWYtPmNpZi0+YXJnX3R5cGVzOyBpICE9IDA7IGktLSwgcF9hcmcrKykKKyAgICB7CisgICAgICBzaXplX3QgejsKKyAgICAgIHVuc2lnbmVkIHNob3J0IHQsIGE7CisKKyAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKKyAgICAgIHQgPSAoKnBfYXJnKS0+dHlwZTsKKyAgICAgIGEgPSAoKnBfYXJnKS0+YWxpZ25tZW50OworCisgICAgICAvKgorICAgICAgICogRmlndXJlIG91dCB3aGV0aGVyIHRoZSBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIHRocm91Z2ggcmVnaXN0ZXJzCisgICAgICAgKiBvciBvbiB0aGUgc3RhY2suCisgICAgICAgKiBUaGUgcnVsZSBpcyB0aGF0IHJlZ2lzdGVycyBjYW4gb25seSByZWNlaXZlIHNpbXBsZSB0eXBlcyBub3QgbGFyZ2VyCisgICAgICAgKiB0aGFuIDY0IGJpdHMsIG9yIHN0cnVjdHMgdGhlIGV4YWN0IHNpemUgb2YgYSByZWdpc3RlciBhbmQgYWxpZ25lZCB0bworICAgICAgICogdGhlIHNpemUgb2YgYSByZWdpc3Rlci4KKyAgICAgICAqLworICAgICAgaWYgKHQgPT0gRkZJX1RZUEVfU1RSVUNUKQorCXsKKwkgIGlmICh6ID09IHNpemVvZiAoaW50KSAmJiBhID09IHNpemVvZiAoaW50KSAmJiByZWd1c2VkIDwgOCkKKwkgICAgYXJncCA9IChjaGFyICopcmVncDsKKwkgIGVsc2UKKwkgICAgYXJncCA9IHN0YWNrcDsKKwl9CisgICAgICBlbHNlCisJeworCSAgaWYgKHogPiBzaXplb2YgKGludCkgJiYgcmVndXNlZCA8IDggLSAxKQorCSAgICB7CisJICAgICAgLyogYWxpZ24gdG8gYW4gZXZlbiByZWdpc3RlciBwYWlyICovCisJICAgICAgaWYgKHJlZ3VzZWQgJiAxKQorCQl7CisJCSAgcmVncCsrOworCQkgIHJlZ3VzZWQrKzsKKwkJfQorCSAgICB9CisJICBpZiAocmVndXNlZCA8IDgpCisJICAgIGFyZ3AgPSAoY2hhciAqKXJlZ3A7CisJICBlbHNlCisJICAgIGFyZ3AgPSBzdGFja3A7CisJfQorCisgICAgICAvKiBFbmZvcmNlIHByb3BlciBzdGFjayBhbGlnbm1lbnQgb2YgNjQtYml0IHR5cGVzICovCisgICAgICBpZiAoYXJncCA9PSBzdGFja3AgJiYgYSA+IHNpemVvZiAoaW50KSkKKwl7CisJICBzdGFja3AgPSAoY2hhciAqKSBBTElHTihzdGFja3AsIGEpOworCSAgYXJncCA9IHN0YWNrcDsKKwl9CisKKyAgICAgIHN3aXRjaCAodCkKKwl7CisJY2FzZSBGRklfVFlQRV9TSU5UODoKKwkgICooc2lnbmVkIGludCAqKSBhcmdwID0gKHNpZ25lZCBpbnQpICooU0lOVDggKikgKnBfYXJndjsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9VSU5UODoKKwkgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQ4ICopICpwX2FyZ3Y7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgorCSAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkgKihTSU5UMTYgKikgKnBfYXJndjsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UMTYgKikgKnBfYXJndjsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9JTlQ6CisJY2FzZSBGRklfVFlQRV9GTE9BVDoKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJICAqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKih1bnNpZ25lZCBpbnQgKikgKnBfYXJndjsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICBtZW1jcHkgKGFyZ3AsICpwX2FyZ3YsIHopOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgRkZJX0FTU0VSVCAoMCk7CisJfQorCisgICAgICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkuICAqLworICAgICAgaWYgKChzaXplb2YgKGludCkgLSAxKSAmIHopCisJeiA9IEFMSUdOKHosIHNpemVvZiAoaW50KSk7CisKKyAgICAgIHBfYXJndisrOworCisgICAgICAvKiBCZSBjYXJlZnVsLCBvbmNlIGFsbCByZWdpc3RlcnMgYXJlIGZpbGxlZCwgYW5kIGFib3V0IHRvIGNvbnRpbnVlCisgICAgICAgICBvbiBzdGFjaywgcmVncCA9PSBzdGFja3AuICBUaGVyZWZvcmUgdGhlIGNoZWNrIGZvciByZWd1c2VkIGFzIHdlbGwuICovCisgICAgICBpZiAoYXJncCA9PSAoY2hhciAqKXJlZ3AgJiYgcmVndXNlZCA8IDgpCisJeworCSAgcmVncCArPSB6IC8gc2l6ZW9mIChpbnQpOworCSAgcmVndXNlZCArPSB6IC8gc2l6ZW9mIChpbnQpOworCX0KKyAgICAgIGVsc2UKKwlzdGFja3AgKz0gejsKKyAgICB9CisKKyAgcmV0dXJuIHN0cnVjdF92YWx1ZV9wdHI7Cit9CisKKy8qIFBlcmZvcm0gbWFjaGluZSBkZXBlbmRlbnQgY2lmIHByb2Nlc3NpbmcgKi8KK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2NpZl9tYWNoZGVwIChmZmlfY2lmICpjaWYpCit7CisgIC8qIFNldCB0aGUgcmV0dXJuIHR5cGUgZmxhZyAqLworICBzd2l0Y2ggKGNpZi0+cnR5cGUtPnR5cGUpCisgICAgeworICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKKyAgICAgIGNpZi0+ZmxhZ3MgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyAgICAgIGlmIChjaWYtPnJ0eXBlLT5zaXplID09IHNpemVvZiAoaW50KSAmJgorCSAgY2lmLT5ydHlwZS0+YWxpZ25tZW50ID09IHNpemVvZiAoaW50KSkKKwljaWYtPmZsYWdzID0gQ0lGX0ZMQUdTX0lOVDsKKyAgICAgIGVsc2UKKwljaWYtPmZsYWdzID0gMDsKKyAgICAgIGJyZWFrOworCisgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisgICAgICBjaWYtPmZsYWdzID0gQ0lGX0ZMQUdTX0RJTlQ7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBjaWYtPmZsYWdzID0gQ0lGX0ZMQUdTX0lOVDsKKyAgICAgIGJyZWFrOworICAgIH0KKworICByZXR1cm4gRkZJX09LOworfQorCit2b2lkCitmZmlfY2FsbCAoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pICgpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCit7CisgIGV4dGVuZGVkX2NpZiBlY2lmOworCisgIGVjaWYuY2lmID0gY2lmOworICBlY2lmLmF2YWx1ZSA9IGF2YWx1ZTsKKworICAvKiBJZiB0aGUgcmV0dXJuIHZhbHVlIGlzIGEgc3RydWN0IGFuZCB3ZSBkb24ndCBoYXZlIGEgcmV0dXJuIHZhbHVlCisgICAgIGFkZHJlc3MgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugb25lLiAgKi8KKworICBpZiAocnZhbHVlID09IE5VTEwKKyAgICAgICYmIGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiAoY2lmLT5ydHlwZS0+c2l6ZSAhPSBzaXplb2YgKGludCkKKwkgIHx8IGNpZi0+cnR5cGUtPmFsaWdubWVudCAhPSBzaXplb2YgKGludCkpKQorICAgIGVjaWYucnZhbHVlID0gYWxsb2NhIChjaWYtPnJ0eXBlLT5zaXplKTsKKyAgZWxzZQorICAgIGVjaWYucnZhbHVlID0gcnZhbHVlOworCisgIHN3aXRjaCAoY2lmLT5hYmkpCisgICAgeworICAgIGNhc2UgRkZJX09CU0Q6CisgICAgICBmZmlfY2FsbF9PQlNEIChjaWYtPmJ5dGVzLCAmZWNpZiwgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIEZGSV9BU1NFUlQgKDApOworICAgICAgYnJlYWs7CisgICAgfQorfQorCisvKgorICogQ2xvc3VyZSBBUEkKKyAqLworCitzdGF0aWMgdm9pZAorZmZpX3ByZXBfY2xvc3VyZV9hcmdzX09CU0QgKGZmaV9jaWYgKmNpZiwgdm9pZCAqKmF2YWx1ZSwgdW5zaWduZWQgaW50ICpyZWdwLAorCQkJICAgIGNoYXIgKnN0YWNrcCkKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIHZvaWQgKipwX2FyZ3Y7CisgIGNoYXIgKmFyZ3A7CisgIHVuc2lnbmVkIGludCByZWd1c2VkOworICBmZmlfdHlwZSAqKnBfYXJnOworCisgIHJlZ3VzZWQgPSAwOworCisgIHBfYXJndiA9IGF2YWx1ZTsKKworICBmb3IgKGkgPSBjaWYtPm5hcmdzLCBwX2FyZyA9IGNpZi0+YXJnX3R5cGVzOyBpICE9IDA7IGktLSwgcF9hcmcrKykKKyAgICB7CisgICAgICBzaXplX3QgejsKKyAgICAgIHVuc2lnbmVkIHNob3J0IHQsIGE7CisKKyAgICAgIHogPSAoKnBfYXJnKS0+c2l6ZTsKKyAgICAgIHQgPSAoKnBfYXJnKS0+dHlwZTsKKyAgICAgIGEgPSAoKnBfYXJnKS0+YWxpZ25tZW50OworCisgICAgICAvKgorICAgICAgICogRmlndXJlIG91dCB3aGV0aGVyIHRoZSBhcmd1bWVudCBoYXMgYmVlbiBwYXNzZWQgdGhyb3VnaCByZWdpc3RlcnMKKyAgICAgICAqIG9yIG9uIHRoZSBzdGFjay4KKyAgICAgICAqIFRoZSBydWxlIGlzIHRoYXQgcmVnaXN0ZXJzIGNhbiBvbmx5IHJlY2VpdmUgc2ltcGxlIHR5cGVzIG5vdCBsYXJnZXIKKyAgICAgICAqIHRoYW4gNjQgYml0cywgb3Igc3RydWN0cyB0aGUgZXhhY3Qgc2l6ZSBvZiBhIHJlZ2lzdGVyIGFuZCBhbGlnbmVkIHRvCisgICAgICAgKiB0aGUgc2l6ZSBvZiBhIHJlZ2lzdGVyLgorICAgICAgICovCisgICAgICBpZiAodCA9PSBGRklfVFlQRV9TVFJVQ1QpCisJeworCSAgaWYgKHogPT0gc2l6ZW9mIChpbnQpICYmIGEgPT0gc2l6ZW9mIChpbnQpICYmIHJlZ3VzZWQgPCA4KQorCSAgICBhcmdwID0gKGNoYXIgKilyZWdwOworCSAgZWxzZQorCSAgICBhcmdwID0gc3RhY2twOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoeiA+IHNpemVvZiAoaW50KSAmJiByZWd1c2VkIDwgOCAtIDEpCisJICAgIHsKKwkgICAgICAvKiBhbGlnbiB0byBhbiBldmVuIHJlZ2lzdGVyIHBhaXIgKi8KKwkgICAgICBpZiAocmVndXNlZCAmIDEpCisJCXsKKwkJICByZWdwKys7CisJCSAgcmVndXNlZCsrOworCQl9CisJICAgIH0KKwkgIGlmIChyZWd1c2VkIDwgOCkKKwkgICAgYXJncCA9IChjaGFyICopcmVncDsKKwkgIGVsc2UKKwkgICAgYXJncCA9IHN0YWNrcDsKKwl9CisKKyAgICAgIC8qIEVuZm9yY2UgcHJvcGVyIHN0YWNrIGFsaWdubWVudCBvZiA2NC1iaXQgdHlwZXMgKi8KKyAgICAgIGlmIChhcmdwID09IHN0YWNrcCAmJiBhID4gc2l6ZW9mIChpbnQpKQorCXsKKwkgIHN0YWNrcCA9IChjaGFyICopIEFMSUdOKHN0YWNrcCwgYSk7CisJICBhcmdwID0gc3RhY2twOworCX0KKworICAgICAgaWYgKHogPCBzaXplb2YgKGludCkgJiYgdCAhPSBGRklfVFlQRV9TVFJVQ1QpCisJKnBfYXJndiA9ICh2b2lkICopIChhcmdwICsgc2l6ZW9mIChpbnQpIC0geik7CisgICAgICBlbHNlCisJKnBfYXJndiA9ICh2b2lkICopIGFyZ3A7CisKKyAgICAgIC8qIEFsaWduIGlmIG5lY2Vzc2FyeSAqLworICAgICAgaWYgKChzaXplb2YgKGludCkgLSAxKSAmIHopCisJeiA9IEFMSUdOKHosIHNpemVvZiAoaW50KSk7CisKKyAgICAgIHBfYXJndisrOworCisgICAgICAvKiBCZSBjYXJlZnVsLCBvbmNlIGFsbCByZWdpc3RlcnMgYXJlIGV4aGF1c3RlZCwgYW5kIGFib3V0IHRvIGZldGNoIGZyb20KKwkgc3RhY2ssIHJlZ3AgPT0gc3RhY2twLiAgVGhlcmVmb3JlIHRoZSBjaGVjayBmb3IgcmVndXNlZCBhcyB3ZWxsLiAqLworICAgICAgaWYgKGFyZ3AgPT0gKGNoYXIgKilyZWdwICYmIHJlZ3VzZWQgPCA4KQorCXsKKwkgIHJlZ3AgKz0geiAvIHNpemVvZiAoaW50KTsKKwkgIHJlZ3VzZWQgKz0geiAvIHNpemVvZiAoaW50KTsKKwl9CisgICAgICBlbHNlCisJc3RhY2twICs9IHo7CisgICAgfQorfQorCit1bnNpZ25lZCBpbnQKK2ZmaV9jbG9zdXJlX09CU0RfaW5uZXIgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICpyZXNwLCB1bnNpZ25lZCBpbnQgKnJlZ3AsCisJCQljaGFyICpzdGFja3ApCit7CisgIGZmaV9jaWYgKmNpZjsKKyAgdm9pZCAqKmFyZ19hcmVhOworCisgIGNpZiA9IGNsb3N1cmUtPmNpZjsKKyAgYXJnX2FyZWEgPSAodm9pZCoqKSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQgKikpOworCisgIGZmaV9wcmVwX2Nsb3N1cmVfYXJnc19PQlNEKGNpZiwgYXJnX2FyZWEsIHJlZ3AsIHN0YWNrcCk7CisKKyAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcmVzcCwgYXJnX2FyZWEsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisKKyAgcmV0dXJuIGNpZi0+ZmxhZ3M7Cit9CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2Nsb3N1cmVfbG9jIChmZmlfY2xvc3VyZSogY2xvc3VyZSwgZmZpX2NpZiogY2lmLAorCQkgICAgICB2b2lkICgqZnVuKShmZmlfY2lmKix2b2lkKix2b2lkKiosdm9pZCopLAorCQkgICAgICB2b2lkICp1c2VyX2RhdGEsIHZvaWQgKmNvZGVsb2MpCit7CisgIHVuc2lnbmVkIGludCAqdHJhbXAgPSAodW5zaWduZWQgaW50ICopIGNvZGVsb2M7CisgIHZvaWQgKmZuOworCisgIEZGSV9BU1NFUlQgKGNpZi0+YWJpID09IEZGSV9PQlNEKTsKKworICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QgJiYgIWNpZi0+ZmxhZ3MpCisgICAgZm4gPSAmZmZpX2Nsb3N1cmVfc3RydWN0X09CU0Q7CisgIGVsc2UKKyAgICBmbiA9ICZmZmlfY2xvc3VyZV9PQlNEOworCisgIC8qIG9yLnUgJXIxMCwgJXIwLCAlaGkxNihmbikgKi8KKyAgdHJhbXBbMF0gPSAweDVkNDAwMDAwIHwgKCgodW5zaWduZWQgaW50KWZuKSA+PiAxNik7CisgIC8qIG9yLnUgJXIxMywgJXIwLCAlaGkxNihjbG9zdXJlKSAqLworICB0cmFtcFsxXSA9IDB4NWRhMDAwMDAgfCAoKHVuc2lnbmVkIGludCljbG9zdXJlID4+IDE2KTsKKyAgLyogb3IgJXIxMCwgJXIxMCwgJWxvMTYoZm4pICovCisgIHRyYW1wWzJdID0gMHg1OTRhMDAwMCB8ICgoKHVuc2lnbmVkIGludClmbikgJiAweGZmZmYpOworICAvKiBqbXAubiAlcjEwICovCisgIHRyYW1wWzNdID0gMHhmNDAwYzQwYTsKKyAgLyogb3IgJXIxMywgJXIxMywgJWxvMTYoY2xvc3VyZSkgKi8KKyAgdHJhbXBbNF0gPSAweDU5YWQwMDAwIHwgKCh1bnNpZ25lZCBpbnQpY2xvc3VyZSAmIDB4ZmZmZik7CisKKyAgZmZpX2NhY2hlZmx1c2hfT0JTRCgodW5zaWduZWQgaW50KWNvZGVsb2MsIEZGSV9UUkFNUE9MSU5FX1NJWkUpOworCisgIGNsb3N1cmUtPmNpZiAgPSBjaWY7CisgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgY2xvc3VyZS0+ZnVuICA9IGZ1bjsKKworICByZXR1cm4gRkZJX09LOworfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbTg4ay9mZml0YXJnZXQuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL204OGsvZmZpdGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUyYmY5ZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL204OGsvZmZpdGFyZ2V0LmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBNaW9kcmFnIFZhbGxhdC4gIDxtaW9kQG9wZW5ic2Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIG04OGsgRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UKKyAqLworCisjaWZuZGVmIExJQkZGSV9UQVJHRVRfSAorI2RlZmluZSBMSUJGRklfVEFSR0VUX0gKKworI2lmbmRlZiBMSUJGRklfQVNNCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZmZpX2FyZzsKK3R5cGVkZWYgc2lnbmVkIGxvbmcgZmZpX3Nhcmc7CisKK3R5cGVkZWYgZW51bSBmZmlfYWJpIHsKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZGSV9PQlNELAorICBGRklfREVGQVVMVF9BQkkgPSBGRklfT0JTRCwKKyAgRkZJX0xBU1RfQUJJID0gRkZJX0RFRkFVTFRfQUJJICsgMQorfSBmZmlfYWJpOworI2VuZGlmCisKKy8qIC0tLS0gRGVmaW5pdGlvbnMgZm9yIGNsb3N1cmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgRkZJX0NMT1NVUkVTIDEKKyNkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAweDE0CisjZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbTg4ay9vYnNkLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9tODhrL29ic2QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTQ0YTIzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbTg4ay9vYnNkLlMKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTMgTWlvZHJhZyBWYWxsYXQuICA8bWlvZEBvcGVuYnNkLm9yZz4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAorICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICogVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAqIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBtODhrIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisgKi8KKworI2RlZmluZSBMSUJGRklfQVNNCQorI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgorI2luY2x1ZGUgPGZmaS5oPgorCisJLnRleHQKKworLyoKKyAqIGZmaV9jYWNoZWZsdXNoX09CU0QodW5zaWduZWQgaW50IGFkZHIsCSVyMgorICoJCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSk7CSVyMworICovCisJLmFsaWduCTQKKwkuZ2xvYmwJZmZpX2NhY2hlZmx1c2hfT0JTRAorCS50eXBlCWZmaV9jYWNoZWZsdXNoX09CU0QsQGZ1bmN0aW9uCitmZmlfY2FjaGVmbHVzaF9PQlNEOgorCXRiMAkwLCAgICVyMCwgNDUxCisJb3IJJXIwLCAlcjAsICVyMAorCWptcAklcjEKKwkuc2l6ZQlmZmlfY2FjaGVmbHVzaF9PQlNELCAuIC0gZmZpX2NhY2hlZmx1c2hfT0JTRAorCisvKgorICogZmZpX2NhbGxfT0JTRCh1bnNpZ25lZCBieXRlcywJCSVyMgorICoJCSBleHRlbmRlZF9jaWYgKmVjaWYsCQklcjMKKyAqCQkgdW5zaWduZWQgZmxhZ3MsCQklcjQKKyAqCQkgdm9pZCAqcnZhbHVlLAkJCSVyNQorICoJCSB2b2lkICgqZm4pKCkpOwkJCSVyNgorICovCisJLmFsaWduCTQKKwkuZ2xvYmwJZmZpX2NhbGxfT0JTRAorCS50eXBlCWZmaV9jYWxsX09CU0QsQGZ1bmN0aW9uCitmZmlfY2FsbF9PQlNEOgorCXN1YnUJJXIzMSwgJXIzMSwgMzIKKwlzdAklcjMwLCAlcjMxLCA0CisJc3QJJXIxLCAgJXIzMSwgMAorCWFkZHUJJXIzMCwgJXIzMSwgMzIKKworCXwgU2F2ZSB0aGUgZmV3IGFyZ3VtZW50cyB3ZSdsbCBuZWVkIGFmdGVyIGZmaV9wcmVwX2FyZ3MoKQorCXN0LmQJJXI0LCAlcjMxLCA4CisJc3QJJXI2LCAlcjMxLCAxNgorCisJfCBBbGxvY2F0ZSByb29tIGZvciB0aGUgaW1hZ2Ugb2YgcjItcjksIGFuZCB0aGUgc3RhY2sgc3BhY2UgZm9yCisJfCB0aGUgYXJncyAocm91bmRlZCB0byBhIDE2LWJ5dGUgYm91bmRhcnkpCisJYWRkdQklcjIsICAlcjIsICAoOCAqIDQpICsgMTUKKwljbHIJJXIyLCAgJXIyLCAgNDwwPgorCXN1YnUJJXIzMSwgJXIzMSwgJXIyCisKKwl8IEZpbGwgcmVnaXN0ZXIgYW5kIHN0YWNrIGltYWdlCisJb3IJJXIyLCAlcjMxLCAlcjAKKyNpZmRlZiBQSUMKKwlic3IJZmZpX3ByZXBfYXJncyNwbHQKKyNlbHNlCisJYnNyCWZmaV9wcmVwX2FyZ3MKKyNlbmRpZgorCisJfCBTYXZlIHBvaW50ZXIgdG8gcmV0dXJuIHN0cnVjdCBhZGRyZXNzLCBpZiBhbnkKKwlvcgklcjEyLCAlcjIsICVyMAorCisJfCBHZXQgZnVuY3Rpb24gcG9pbnRlcgorCXN1YnUJJXI0LCAgJXIzMCwgMzIKKwlsZAklcjEsICAlcjQsICAxNgorCisJfCBGZXRjaCB0aGUgcmVnaXN0ZXIgYXJndW1lbnRzCisJbGQuZAklcjIsICVyMzEsICgwICogNCkKKwlsZC5kCSVyNCwgJXIzMSwgKDIgKiA0KQorCWxkLmQJJXI2LCAlcjMxLCAoNCAqIDQpCisJbGQuZAklcjgsICVyMzEsICg2ICogNCkKKwlhZGR1CSVyMzEsICVyMzEsICg4ICogNCkKKworCXwgSW52b2tlIHRoZSBmdW5jdGlvbgorCWpzcgklcjEKKworCXwgUmVzdG9yZSBzdGFjayBub3cgdGhhdCB3ZSBkb24ndCBuZWVkIHRoZSBhcmdzIGFueW1vcmUKKwlzdWJ1CSVyMzEsICVyMzAsIDMyCisKKwl8IEZpZ3VyZSBvdXQgd2hhdCB0byByZXR1cm4gYXMgdGhlIGZ1bmN0aW9uJ3MgcmV0dXJuIHZhbHVlCisJbGQJJXI1LCAlcjMxLCAxMgkJfCBydmFsdWUKKwlsZAklcjQsICVyMzEsIDgJCXwgZmxhZ3MKKworCWJjbmQJZXEwLCAlcjUsIDlmCisKKwliYjAJMCwgJXI0LCAxZgkJfCBDSUZfRkxBR1NfSU5UCisJc3QJJXIyLCAlcjUsIDAKKwlicgk5ZgorCisxOgorCWJiMAkxLCAlcjQsIDFmCQl8IENJRl9GTEFHU19ESU5UCisJc3QuZAklcjIsICVyNSwgMAorCWJyCTlmCisKKzE6Cis5OgorCWxkCSVyMSwgICVyMzEsIDAKKwlsZAklcjMwLCAlcjMxLCA0CisJam1wLm4JJXIxCisJIGFkZHUJJXIzMSwgJXIzMSwgMzIKKwkuc2l6ZQlmZmlfY2FsbF9PQlNELCAuIC0gZmZpX2NhbGxfT0JTRAorCisvKgorICogZmZpX2Nsb3N1cmVfT0JTRChmZmlfY2xvc3VyZSAqY2xvc3VyZSk7CSVyMTMKKyAqLworCS5hbGlnbgk0CisJLmdsb2JsCWZmaV9jbG9zdXJlX09CU0QKKwkudHlwZQlmZmlfY2xvc3VyZV9PQlNELCBAZnVuY3Rpb24KK2ZmaV9jbG9zdXJlX09CU0Q6CisJc3VidQklcjMxLCAlcjMxLCAxNgorCXN0CSVyMzAsICVyMzEsIDQKKwlzdAklcjEsICAlcjMxLCAwCisJYWRkdQklcjMwLCAlcjMxLCAxNgorCisJfCBNYWtlIHJvb20gb24gdGhlIHN0YWNrIGZvciBzYXZlZCByZWdpc3RlciBhcmd1bWVudHMgYW5kIHJldHVybgorCXwgdmFsdWUKKwlzdWJ1CSVyMzEsICVyMzEsICg4ICogNCkgKyAoMiAqIDQpCisJc3QuZAklcjIsICAlcjMxLCAoMCAqIDQpCisJc3QuZAklcjQsICAlcjMxLCAoMiAqIDQpCisJc3QuZAklcjYsICAlcjMxLCAoNCAqIDQpCisJc3QuZAklcjgsICAlcjMxLCAoNiAqIDQpCisKKwl8IEludm9rZSB0aGUgY2xvc3VyZSBmdW5jdGlvbgorCW9yCSVyNSwgICVyMzAsIDAJCQl8IGNhbGxpbmcgc3RhY2sKKwlhZGR1CSVyNCwgICVyMzEsIDAJCQl8IHNhdmVkIHJlZ2lzdGVycworCWFkZHUJJXIzLCAgJXIzMSwgKDggKiA0KQkJfCByZXR1cm4gdmFsdWUKKwlvcgklcjIsICAlcjEzLCAlcjAJCQl8IGNsb3N1cmUKKyNpZmRlZiBQSUMKKwlic3IJZmZpX2Nsb3N1cmVfT0JTRF9pbm5lciNwbHQKKyNlbHNlCisJYnNyCWZmaV9jbG9zdXJlX09CU0RfaW5uZXIKKyNlbmRpZgorCisJfCBGaWd1cmUgb3V0IHdoYXQgdG8gcmV0dXJuIGFzIHRoZSBmdW5jdGlvbidzIHJldHVybiB2YWx1ZQorCWJiMAkwLCAlcjIsIDFmCQl8IENJRl9GTEFHU19JTlQKKwlsZAklcjIsICVyMzEsICg4ICogNCkKKwlicgk5ZgorCisxOgorCWJiMAkxLCAlcjIsIDFmCQl8IENJRl9GTEFHU19ESU5UCisJbGQuZAklcjIsICVyMzEsICg4ICogNCkKKwlicgk5ZgorCisxOgorOToKKwlzdWJ1CSVyMzEsICVyMzAsIDE2CisJbGQJJXIxLCAgJXIzMSwgMAorCWxkCSVyMzAsICVyMzEsIDQKKwlqbXAubgklcjEKKwkgYWRkdQklcjMxLCAlcjMxLCAxNgorCS5zaXplCWZmaV9jbG9zdXJlX09CU0QsLi1mZmlfY2xvc3VyZV9PQlNECisKKy8qCisgKiBmZmlfY2xvc3VyZV9zdHJ1Y3RfT0JTRChmZmlfY2xvc3VyZSAqY2xvc3VyZSk7CSVyMTMKKyAqLworCS5hbGlnbgk0CisJLmdsb2JsCWZmaV9jbG9zdXJlX3N0cnVjdF9PQlNECisJLnR5cGUJZmZpX2Nsb3N1cmVfc3RydWN0X09CU0QsIEBmdW5jdGlvbgorZmZpX2Nsb3N1cmVfc3RydWN0X09CU0Q6CisJc3VidQklcjMxLCAlcjMxLCAxNgorCXN0CSVyMzAsICVyMzEsIDQKKwlzdAklcjEsICAlcjMxLCAwCisJYWRkdQklcjMwLCAlcjMxLCAxNgorCisJfCBNYWtlIHJvb20gb24gdGhlIHN0YWNrIGZvciBzYXZlZCByZWdpc3RlciBhcmd1bWVudHMKKwlzdWJ1CSVyMzEsICVyMzEsICg4ICogNCkKKwlzdC5kCSVyMiwgICVyMzEsICgwICogNCkKKwlzdC5kCSVyNCwgICVyMzEsICgyICogNCkKKwlzdC5kCSVyNiwgICVyMzEsICg0ICogNCkKKwlzdC5kCSVyOCwgICVyMzEsICg2ICogNCkKKworCXwgSW52b2tlIHRoZSBjbG9zdXJlIGZ1bmN0aW9uCisJb3IJJXI1LCAgJXIzMCwgMAkJCXwgY2FsbGluZyBzdGFjaworCWFkZHUJJXI0LCAgJXIzMSwgMAkJCXwgc2F2ZWQgcmVnaXN0ZXJzCisJb3IJJXIzLCAgJXIxMiwgMAkJCXwgcmV0dXJuIHZhbHVlCisJb3IJJXIyLCAgJXIxMywgJXIwCQkJfCBjbG9zdXJlCisjaWZkZWYgUElDCisJYnNyCWZmaV9jbG9zdXJlX09CU0RfaW5uZXIjcGx0CisjZWxzZQorCWJzcglmZmlfY2xvc3VyZV9PQlNEX2lubmVyCisjZW5kaWYKKworCXN1YnUJJXIzMSwgJXIzMCwgMTYKKwlsZAklcjEsICAlcjMxLCAwCisJbGQJJXIzMCwgJXIzMSwgNAorCWptcC5uCSVyMQorCSBhZGR1CSVyMzEsICVyMzEsIDE2CisJLnNpemUJZmZpX2Nsb3N1cmVfc3RydWN0X09CU0QsLi1mZmlfY2xvc3VyZV9zdHJ1Y3RfT0JTRApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWljcm9ibGF6ZS9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pY3JvYmxhemUvZmZpLmMKaW5kZXggNWMxNTVjNS4uZWE5NjJlYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWljcm9ibGF6ZS9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taWNyb2JsYXplL2ZmaS5jCkBAIC0xODMsNyArMTgzLDcgQEAKIAlmZmlfdHlwZSoqIGFyZ190eXBlcyA9IGNpZi0+YXJnX3R5cGVzOwogCiAJLyogcmUtYWxsb2NhdGUgZGF0YSBmb3IgdGhlIGFyZ3MuIFRoaXMgbmVlZHMgdG8gYmUgZG9uZSBpbiBvcmRlciB0byBrZWVwCi0JICogbXVsdGktd29yZCBvYmplY3RzIChlLmcuIHN0cnVjdHMpIGluIGNvbnRpZ2lvdXMgbWVtb3J5LiBDYWxsZXJzIGFyZSBub3QKKwkgKiBtdWx0aS13b3JkIG9iamVjdHMgKGUuZy4gc3RydWN0cykgaW4gY29udGlndW91cyBtZW1vcnkuIENhbGxlcnMgYXJlIG5vdAogCSAqIHJlcXVpcmVkIHRvIHN0b3JlIHRoZSB2YWx1ZSBvZiBhcmdzIGluIHRoZSBsb3dlciA2IHdvcmRzIGluIHRoZSBzdGFjawogCSAqIChhbHRob3VnaCB0aGV5IGFyZSBhbGxvY2F0ZWQgaW4gdGhlIHN0YWNrKS4KIAkgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pY3JvYmxhemUvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWljcm9ibGF6ZS9zeXN2LlMKaW5kZXggN2ExOTVhNi4uZWE0M2U5ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWljcm9ibGF6ZS9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWljcm9ibGF6ZS9zeXN2LlMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXJzdWJpIHIxMSwgcjIzLCA4CiAJYmVxaSByMTEsIGZmaV9jYWxsX1NZU1Zfc3RvcmU2NAogCi0JLyogRGlkbnQgbWF0Y2ggYW55dGhpbmcgKi8KKwkvKiBEaWRuJ3QgbWF0Y2ggYW55dGhpbmcgKi8KIAlicmkgZmZpX2NhbGxfU1lTVl9lbmQKIAogZmZpX2NhbGxfU1lTVl9zdG9yZTY0OgpAQCAtMjEwLDcgKzIxMCw3IEBACiAJYWRkaWsgcjcsIHIxMiwgMCAvKiBjbG9zdXJlIG9iamVjdCAqLwogCWFkZGlrIHIxLCByMSwgLTggLyogYWxsb2NhdGUgcmV0dXJuIHZhbHVlICovCiAJYWRkaWsgcjgsIHIxLCAwIC8qIHZvaWQqIHJ2YWx1ZSAqLwotCWFkZGlrIHIxLCByMSwgLTggLyogYWxsb2NhdGUgZm9yIHJldXRybiB0eXBlL3NpemUgdmFsdWVzICovCisJYWRkaWsgcjEsIHIxLCAtOCAvKiBhbGxvY2F0ZSBmb3IgcmV0dXJuIHR5cGUvc2l6ZSB2YWx1ZXMgKi8KIAlhZGRpayByOSwgcjEsIDAgLyogdm9pZCogcnR5cGUgKi8KIAlhZGRpayByMTAsIHIxLCA0IC8qIHZvaWQqIHJzaXplICovCiAKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXJzdWJpIHIxMSwgcjEwLCA4CiAJYmVxaSByMTEsIGZmaV9jbG9zdXJlX1NZU1Zfc3RvcmU2NAogCi0JLyogRGlkbnQgbWF0Y2ggYW55dGhpbmcgKi8KKwkvKiBEaWRuJ3QgbWF0Y2ggYW55dGhpbmcgKi8KIAlicmkgZmZpX2Nsb3N1cmVfU1lTVl9lbmQKIAogZmZpX2Nsb3N1cmVfU1lTVl9zdG9yZTY0OgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvZmZpLmMKaW5kZXggMDMxMjFlMy4uNWQwZGQ3MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL2ZmaS5jCkBAIC0xNzAsNyArMTcwLDE0IEBACiAJCWJyZWFrOwogCQkgIAogCSAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgorI2lmZGVmIEZGSV9NSVBTX04zMgorCQkvKiBUaGUgTjMyIEFCSSByZXF1aXJlcyB0aGF0IDMyLWJpdCBpbnRlZ2VycworCQkgICBiZSBzaWduLWV4dGVuZGVkIHRvIDY0LWJpdHMsIHJlZ2FyZGxlc3Mgb2YKKwkJICAgd2hldGhlciB0aGV5IGFyZSBzaWduZWQgb3IgdW5zaWduZWQuICovCisJCSooZmZpX2FyZyAqKWFyZ3AgPSAqKFNJTlQzMiAqKSgqIHBfYXJndik7CisjZWxzZQogCQkqKGZmaV9hcmcgKilhcmdwID0gKihVSU5UMzIgKikoKiBwX2FyZ3YpOworI2VuZGlmCiAJCWJyZWFrOwogCiAJICAgICAgLyogVGhpcyBjYW4gb25seSBoYXBwZW4gd2l0aCA2NGJpdCBzbG90cy4gICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL24zMi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbWlwcy9uMzIuUwppbmRleCBmZjRiYmNlLi5jNjk4NWQzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9taXBzL24zMi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL21pcHMvbjMyLlMKQEAgLTEwOCwxMCArMTA4LDggQEAKIAlSRUdfTAl0NiwgMypGRklfU0laRU9GX0FSRygkZnApICAjIGxvYWQgdGhlIGZsYWdzIHdvcmQgaW50byB0Ni4KIAogCWFuZAl0NCwgdDYsICgoMTw8RkZJX0ZMQUdfQklUUyktMSkKLQlibmV6CXQ0LCBhcmcxX2Zsb2F0cAogCVJFR19MCWEwLCAwKkZGSV9TSVpFT0ZfQVJHKHQ5KQotCWIJYXJnMV9uZXh0Ci1hcmcxX2Zsb2F0cDoJCisJYmVxegl0NCwgYXJnMV9uZXh0CiAJYm5lCXQ0LCBGRklfVFlQRV9GTE9BVCwgYXJnMV9kb3VibGVwCiAJbC5zCSRmMTIsIDAqRkZJX1NJWkVPRl9BUkcodDkpCiAJYglhcmcxX25leHQKQEAgLTEyMSwxMCArMTE5LDggQEAKIAkKIAlTUkwJdDQsIHQ2LCAxKkZGSV9GTEFHX0JJVFMKIAlhbmQJdDQsICgoMTw8RkZJX0ZMQUdfQklUUyktMSkKLQlibmV6CXQ0LCBhcmcyX2Zsb2F0cAogCVJFR19MCWExLCAxKkZGSV9TSVpFT0ZfQVJHKHQ5KQotCWIJYXJnMl9uZXh0Ci1hcmcyX2Zsb2F0cDoKKwliZXF6CXQ0LCBhcmcyX25leHQKIAlibmUJdDQsIEZGSV9UWVBFX0ZMT0FULCBhcmcyX2RvdWJsZXAKIAlsLnMJJGYxMywgMSpGRklfU0laRU9GX0FSRyh0OSkJCiAJYglhcmcyX25leHQKQEAgLTEzNCwxMCArMTMwLDggQEAKIAkKIAlTUkwJdDQsIHQ2LCAyKkZGSV9GTEFHX0JJVFMKIAlhbmQJdDQsICgoMTw8RkZJX0ZMQUdfQklUUyktMSkKLQlibmV6CXQ0LCBhcmczX2Zsb2F0cAogCVJFR19MCWEyLCAyKkZGSV9TSVpFT0ZfQVJHKHQ5KQotCWIJYXJnM19uZXh0Ci1hcmczX2Zsb2F0cDoKKwliZXF6CXQ0LCBhcmczX25leHQKIAlibmUJdDQsIEZGSV9UWVBFX0ZMT0FULCBhcmczX2RvdWJsZXAKIAlsLnMJJGYxNCwgMipGRklfU0laRU9GX0FSRyh0OSkJCiAJYglhcmczX25leHQKQEAgLTE0NywxMCArMTQxLDggQEAKIAkKIAlTUkwJdDQsIHQ2LCAzKkZGSV9GTEFHX0JJVFMKIAlhbmQJdDQsICgoMTw8RkZJX0ZMQUdfQklUUyktMSkKLQlibmV6CXQ0LCBhcmc0X2Zsb2F0cAogCVJFR19MCWEzLCAzKkZGSV9TSVpFT0ZfQVJHKHQ5KQotCWIJYXJnNF9uZXh0Ci1hcmc0X2Zsb2F0cDoKKwliZXF6CXQ0LCBhcmc0X25leHQKIAlibmUJdDQsIEZGSV9UWVBFX0ZMT0FULCBhcmc0X2RvdWJsZXAKIAlsLnMJJGYxNSwgMypGRklfU0laRU9GX0FSRyh0OSkJCiAJYglhcmc0X25leHQKQEAgLTE2MCwxMCArMTUyLDggQEAKIAkKIAlTUkwJdDQsIHQ2LCA0KkZGSV9GTEFHX0JJVFMKIAlhbmQJdDQsICgoMTw8RkZJX0ZMQUdfQklUUyktMSkKLQlibmV6CXQ0LCBhcmc1X2Zsb2F0cAogCVJFR19MCWE0LCA0KkZGSV9TSVpFT0ZfQVJHKHQ5KQotCWIJYXJnNV9uZXh0Ci1hcmc1X2Zsb2F0cDoKKwliZXF6CXQ0LCBhcmc1X25leHQKIAlibmUJdDQsIEZGSV9UWVBFX0ZMT0FULCBhcmc1X2RvdWJsZXAKIAlsLnMJJGYxNiwgNCpGRklfU0laRU9GX0FSRyh0OSkJCiAJYglhcmc1X25leHQKQEAgLTE3MywxMCArMTYzLDggQEAKIAkKIAlTUkwJdDQsIHQ2LCA1KkZGSV9GTEFHX0JJVFMKIAlhbmQJdDQsICgoMTw8RkZJX0ZMQUdfQklUUyktMSkKLQlibmV6CXQ0LCBhcmc2X2Zsb2F0cAogCVJFR19MCWE1LCA1KkZGSV9TSVpFT0ZfQVJHKHQ5KQotCWIJYXJnNl9uZXh0Ci1hcmc2X2Zsb2F0cDoKKwliZXF6CXQ0LCBhcmc2X25leHQKIAlibmUJdDQsIEZGSV9UWVBFX0ZMT0FULCBhcmc2X2RvdWJsZXAKIAlsLnMJJGYxNywgNSpGRklfU0laRU9GX0FSRyh0OSkJCiAJYglhcmc2X25leHQKQEAgLTE4NiwxMCArMTc0LDggQEAKIAkKIAlTUkwJdDQsIHQ2LCA2KkZGSV9GTEFHX0JJVFMKIAlhbmQJdDQsICgoMTw8RkZJX0ZMQUdfQklUUyktMSkKLQlibmV6CXQ0LCBhcmc3X2Zsb2F0cAogCVJFR19MCWE2LCA2KkZGSV9TSVpFT0ZfQVJHKHQ5KQotCWIJYXJnN19uZXh0Ci1hcmc3X2Zsb2F0cDoKKwliZXF6CXQ0LCBhcmc3X25leHQKIAlibmUJdDQsIEZGSV9UWVBFX0ZMT0FULCBhcmc3X2RvdWJsZXAKIAlsLnMJJGYxOCwgNipGRklfU0laRU9GX0FSRyh0OSkJCiAJYglhcmc3X25leHQKQEAgLTE5OSwxMCArMTg1LDggQEAKIAkKIAlTUkwJdDQsIHQ2LCA3KkZGSV9GTEFHX0JJVFMKIAlhbmQJdDQsICgoMTw8RkZJX0ZMQUdfQklUUyktMSkKLQlibmV6CXQ0LCBhcmc4X2Zsb2F0cAogCVJFR19MCWE3LCA3KkZGSV9TSVpFT0ZfQVJHKHQ5KQotCWIJYXJnOF9uZXh0Ci1hcmc4X2Zsb2F0cDoKKwliZXF6CXQ0LCBhcmc4X25leHQKIAlibmUJdDQsIEZGSV9UWVBFX0ZMT0FULCBhcmc4X2RvdWJsZXAKICAJbC5zCSRmMTksIDcqRkZJX1NJWkVPRl9BUkcodDkpCQogCWIJYXJnOF9uZXh0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9uaW9zMi9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL25pb3MyL2ZmaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZmEwMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9uaW9zMi9mZmkuYwpAQCAtMCwwICsxLDMwNCBAQAorLyogbGliZmZpIHN1cHBvcnQgZm9yIEFsdGVyYSBOaW9zIElJLgorCisgICBDb3B5cmlnaHQgKGMpIDIwMTMgTWVudG9yIEdyYXBoaWNzLgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgICAKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICAgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAgIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qIFRoZSBOaW9zIElJIFByb2Nlc3NvciBSZWZlcmVuY2UgSGFuZGJvb2sgZGVmaW5lcyB0aGUgcHJvY2VkdXJlIGNhbGwKKyAgIEFCSSBhcyBmb2xsb3dzLgorCisgICBBcmd1bWVudHMgYXJlIHBhc3NlZCBhcyBpZiBhIHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSB0eXBlcyBvZgorICAgdGhlIGFyZ3VtZW50cyB3ZXJlIGNvbnN0cnVjdGVkLiAgVGhlIGZpcnN0IDE2IGJ5dGVzIGFyZSBwYXNzZWQgaW4gcjQKKyAgIHRocm91Z2ggcjcsIHRoZSByZW1haW5kZXIgb24gdGhlIHN0YWNrLiAgVGhlIGZpcnN0IDE2IGJ5dGVzIG9mIGEgZnVuY3Rpb24KKyAgIHRha2luZyB2YXJpYWJsZSBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiByNC1yNyBpbiB0aGUgc2FtZSB3YXkuCisKKyAgIFJldHVybiB2YWx1ZXMgb2YgdHlwZXMgdXAgdG8gOCBieXRlcyBhcmUgcmV0dXJuZWQgaW4gcjIgYW5kIHIzLiAgRm9yCisgICByZXR1cm4gdmFsdWVzIGdyZWF0ZXIgdGhhbiA4IGJ5dGVzLCB0aGUgY2FsbGVyIG11c3QgYWxsb2NhdGUgbWVtb3J5IGZvcgorICAgdGhlIHJlc3VsdCBhbmQgcGFzcyB0aGUgYWRkcmVzcyBhcyBpZiBpdCB3ZXJlIGFyZ3VtZW50IDAuICAKKworICAgV2hpbGUgdGhpcyBpc24ndCBzcGVjaWZpZWQgZXhwbGljaXRseSBpbiB0aGUgQUJJIGRvY3VtZW50YXRpb24sIEdDQworICAgcHJvbW90ZXMgaW50ZWdyYWwgYXJndW1lbnRzIHNtYWxsZXIgdGhhbiBpbnQgc2l6ZSB0byAzMiBiaXRzLgorCisgICBBbHNvIG9mIG5vdGUsIHRoZSBBQkkgc3BlY2lmaWVzIHRoYXQgYWxsIHN0cnVjdHVyZSBvYmplY3RzIGFyZQorICAgYWxpZ25lZCB0byAzMiBiaXRzIGV2ZW4gaWYgYWxsIHRoZWlyIGZpZWxkcyBoYXZlIGEgc21hbGxlciBuYXR1cmFsCisgICBhbGlnbm1lbnQuICBTZWUgRkZJX0FHR1JFR0FURV9BTElHTk1FTlQuICAqLworCisKKy8qIERlY2xhcmUgdGhlIGFzc2VtYmx5IGxhbmd1YWdlIGhvb2tzLiAgKi8KKworZXh0ZXJuIFVJTlQ2NCBmZmlfY2FsbF9zeXN2ICh2b2lkICgqKSAoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksCisJCQkgICAgIGV4dGVuZGVkX2NpZiAqLAorCQkJICAgICB1bnNpZ25lZCwgCisJCQkgICAgIHZvaWQgKCpmbikgKHZvaWQpKTsKK2V4dGVybiB2b2lkIGZmaV9jbG9zdXJlX3N5c3YgKHZvaWQpOworCisvKiBQZXJmb3JtIG1hY2hpbmUtZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nLiAgKi8KKworZmZpX3N0YXR1cyBmZmlfcHJlcF9jaWZfbWFjaGRlcCAoZmZpX2NpZiAqY2lmKQoreworICAvKiBXZSBhbHdheXMgd2FudCBhdCBsZWFzdCAxNiBieXRlcyBpbiB0aGUgcGFyYW1ldGVyIGJsb2NrIHNpbmNlIGl0CisgICAgIHNpbXBsaWZpZXMgdGhlIGxvdy1sZXZlbCBjYWxsIGZ1bmN0aW9uLiAgQWxzbyByb3VuZCB0aGUgcGFyYW1ldGVyCisgICAgIGJsb2NrIHNpemUgdXAgdG8gYSBtdWx0aXBsZSBvZiA0IGJ5dGVzIHRvIHByZXNlcnZlCisgICAgIDMyLWJpdCBhbGlnbm1lbnQgb2YgdGhlIHN0YWNrIHBvaW50ZXIuICAqLworICBpZiAoY2lmLT5ieXRlcyA8IDE2KQorICAgIGNpZi0+Ynl0ZXMgPSAxNjsKKyAgZWxzZQorICAgIGNpZi0+Ynl0ZXMgPSAoY2lmLT5ieXRlcyArIDMpICYgfjM7CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKworCisvKiBmZmlfcHJlcF9hcmdzIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSB0byB0cmFuc2ZlciBhcmd1bWVudHMKKyAgIHRvIHRoZSBzdGFjayB1c2luZyB0aGUgcG9pbnRlcnMgaW4gdGhlIGVjaWYgYXJyYXkuCisgICBOb3RlIHRoYXQgdGhlIHN0YWNrIGJ1ZmZlciBpcyBiaWcgZW5vdWdoIHRvIGZpdCBhbGwgdGhlIGFyZ3VtZW50cywKKyAgIGJ1dCB0aGUgZmlyc3QgMTYgYnl0ZXMgd2lsbCBiZSBjb3BpZWQgdG8gcmVnaXN0ZXJzIGZvciB0aGUgYWN0dWFsCisgICBjYWxsLiAgKi8KKwordm9pZCBmZmlfcHJlcF9hcmdzIChjaGFyICpzdGFjaywgZXh0ZW5kZWRfY2lmICplY2lmKQoreworICBjaGFyICphcmdwID0gc3RhY2s7CisgIHVuc2lnbmVkIGludCBpOworCisgIC8qIFRoZSBpbXBsaWNpdCByZXR1cm4gdmFsdWUgcG9pbnRlciBpcyBwYXNzZWQgYXMgaWYgaXQgd2VyZSBhIGhpZGRlbgorICAgICBmaXJzdCBhcmd1bWVudC4gICovCisgIGlmIChlY2lmLT5jaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgZWNpZi0+Y2lmLT5ydHlwZS0+c2l6ZSA+IDgpCisgICAgeworICAgICAgKCoodm9pZCAqKikgYXJncCkgPSBlY2lmLT5ydmFsdWU7CisgICAgICBhcmdwICs9IDQ7CisgICAgfQorCisgIGZvciAoaSA9IDA7IGkgPCBlY2lmLT5jaWYtPm5hcmdzOyBpKyspCisgICAgeworICAgICAgdm9pZCAqYXZhbHVlID0gZWNpZi0+YXZhbHVlW2ldOworICAgICAgZmZpX3R5cGUgKmF0eXBlID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXNbaV07CisgICAgICBzaXplX3Qgc2l6ZSA9IGF0eXBlLT5zaXplOworICAgICAgc2l6ZV90IGFsaWdubWVudCA9IGF0eXBlLT5hbGlnbm1lbnQ7CisKKyAgICAgIC8qIEFsaWduIGFyZ3AgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBhcmd1bWVudCB0eXBlLiAgKi8KKyAgICAgIGlmICgoYWxpZ25tZW50IC0gMSkgJiAodW5zaWduZWQpIGFyZ3ApCisJYXJncCA9IChjaGFyICopIEFMSUdOIChhcmdwLCBhbGlnbm1lbnQpOworCisgICAgICAvKiBDb3B5IHRoZSBhcmd1bWVudCwgcHJvbW90aW5nIGludGVncmFsIHR5cGVzIHNtYWxsZXIgdGhhbiBhCisJIHdvcmQgdG8gd29yZCBzaXplLiAgKi8KKyAgICAgIGlmIChzaXplIDwgc2l6ZW9mIChpbnQpKQorCXsKKwkgIHNpemUgPSBzaXplb2YgKGludCk7CisJICBzd2l0Y2ggKGF0eXBlLT50eXBlKQorCSAgICB7CisJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkgKihTSU5UOCAqKSBhdmFsdWU7CisJICAgICAgYnJlYWs7CisJCSAgCisJICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisJICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDggKikgYXZhbHVlOworCSAgICAgIGJyZWFrOworCQkgIAorCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSAqKFNJTlQxNiAqKSBhdmFsdWU7CisJICAgICAgYnJlYWs7CisJCSAgCisJICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQxNiAqKSBhdmFsdWU7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICAgICAgbWVtY3B5IChhcmdwLCBhdmFsdWUsIGF0eXBlLT5zaXplKTsKKwkgICAgICBicmVhazsKKworCSAgICBkZWZhdWx0OgorCSAgICAgIEZGSV9BU1NFUlQoMCk7CisJICAgIH0KKwl9CisgICAgICBlbHNlIGlmIChzaXplID09IHNpemVvZiAoaW50KSkKKwkqKHVuc2lnbmVkIGludCAqKSBhcmdwID0gKHVuc2lnbmVkIGludCkgKihVSU5UMzIgKikgYXZhbHVlOworICAgICAgZWxzZQorCW1lbWNweSAoYXJncCwgYXZhbHVlLCBzaXplKTsKKyAgICAgIGFyZ3AgKz0gc2l6ZTsKKyAgICB9Cit9CisKKworLyogQ2FsbCBGTiB1c2luZyB0aGUgcHJlcGFyZWQgQ0lGLiAgUlZBTFVFIHBvaW50cyB0byBzcGFjZSBhbGxvY2F0ZWQgYnkKKyAgIHRoZSBjYWxsZXIgZm9yIHRoZSByZXR1cm4gdmFsdWUsIGFuZCBBVkFMVUUgaXMgYW4gYXJyYXkgb2YgYXJndW1lbnQKKyAgIHBvaW50ZXJzLiAgKi8KKwordm9pZCBmZmlfY2FsbCAoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pICh2b2lkKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQoreworCisgIGV4dGVuZGVkX2NpZiBlY2lmOworICBVSU5UNjQgcmVzdWx0OworCisgIC8qIElmIGJpZ3JldCBpcyB0cnVlLCB0aGlzIGlzIHRoZSBjYXNlIHdoZXJlIGEgcmV0dXJuIHZhbHVlIG9mIGxhcmdlcgorICAgICB0aGFuIDggYnl0ZXMgaXMgaGFuZGxlZCBieSBiZWluZyBwYXNzZWQgYnkgcmVmZXJlbmNlIGFzIGFuIGltcGxpY2l0CisgICAgIGFyZ3VtZW50LiAgKi8KKyAgaW50IGJpZ3JldCA9IChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorCQkmJiBjaWYtPnJ0eXBlLT5zaXplID4gOCk7CisKKyAgZWNpZi5jaWYgPSBjaWY7CisgIGVjaWYuYXZhbHVlID0gYXZhbHVlOworCisgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciByZXR1cm4gdmFsdWUgaWYgdGhpcyBpcyB0aGUgcGFzcy1ieS1yZWZlcmVuY2UgY2FzZQorICAgICBhbmQgdGhlIGNhbGxlciBkaWQgbm90IHByb3ZpZGUgYSBidWZmZXIuICAqLworICBpZiAocnZhbHVlID09IE5VTEwgJiYgYmlncmV0KQorICAgIGVjaWYucnZhbHVlID0gYWxsb2NhIChjaWYtPnJ0eXBlLT5zaXplKTsKKyAgZWxzZQorICAgIGVjaWYucnZhbHVlID0gcnZhbHVlOworCisgIHJlc3VsdCA9IGZmaV9jYWxsX3N5c3YgKGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLCBmbik7CisKKyAgLyogTm93IHJlc3VsdCBjb250YWlucyB0aGUgNjQgYml0IGNvbnRlbnRzIHJldHVybmVkIGZyb20gZm4gaW4KKyAgICAgcjIgYW5kIHIzLiAgQ29weSB0aGUgdmFsdWUgb2YgdGhlIGFwcHJvcHJpYXRlIHNpemUgdG8gdGhlIHVzZXItcHJvdmlkZWQKKyAgICAgcnZhbHVlIGJ1ZmZlci4gICovCisgIGlmIChydmFsdWUgJiYgIWJpZ3JldCkKKyAgICBzd2l0Y2ggKGNpZi0+cnR5cGUtPnNpemUpCisgICAgICB7CisgICAgICBjYXNlIDE6CisJKihVSU5UOCAqKXJ2YWx1ZSA9IChVSU5UOCkgcmVzdWx0OworCWJyZWFrOworICAgICAgY2FzZSAyOgorCSooVUlOVDE2ICopcnZhbHVlID0gKFVJTlQxNikgcmVzdWx0OworCWJyZWFrOworICAgICAgY2FzZSA0OgorCSooVUlOVDMyICopcnZhbHVlID0gKFVJTlQzMikgcmVzdWx0OworCWJyZWFrOworICAgICAgY2FzZSA4OgorCSooVUlOVDY0ICopcnZhbHVlID0gKFVJTlQ2NCkgcmVzdWx0OworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwltZW1jcHkgKHJ2YWx1ZSwgKHZvaWQgKikmcmVzdWx0LCBjaWYtPnJ0eXBlLT5zaXplKTsKKwlicmVhazsKKyAgICAgIH0KK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBpbnZva2VkIGZyb20gdGhlIGNsb3N1cmUgdHJhbXBvbGluZSB0byBpbnZva2UKKyAgIENMT1NVUkUgd2l0aCBhcmd1bWVudCBibG9jayBBUkdTLiAgUGFyc2UgQVJHUyBhY2NvcmRpbmcgdG8KKyAgIENMT1NVUkUtPmNmaSBhbmQgaW52b2tlIENMT1NVUkUtPmZ1bi4gICovCisKK3N0YXRpYyBVSU5UNjQKK2ZmaV9jbG9zdXJlX2hlbHBlciAodW5zaWduZWQgY2hhciAqYXJncywKKwkJICAgIGZmaV9jbG9zdXJlICpjbG9zdXJlKQoreworICBmZmlfY2lmICpjaWYgPSBjbG9zdXJlLT5jaWY7CisgIHVuc2lnbmVkIGNoYXIgKmFyZ3AgPSBhcmdzOworICB2b2lkICoqcGFyc2VkX2FyZ3MgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQgKikpOworICBVSU5UNjQgcmVzdWx0OworICB2b2lkICpyZXRwdHI7CisgIHVuc2lnbmVkIGludCBpOworCisgIC8qIEZpcnN0IGZpZ3VyZSBvdXQgd2hhdCB0byBkbyBhYm91dCB0aGUgcmV0dXJuIHR5cGUuICBJZiB0aGlzIGlzIHRoZQorICAgICBiaWctc3RydWN0dXJlLXJldHVybiBjYXNlLCB0aGUgZmlyc3QgYXJnIGlzIHRoZSBoaWRkZW4gcmV0dXJuIGJ1ZmZlcgorICAgICBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlci4gICovCisgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgY2lmLT5ydHlwZS0+c2l6ZSA+IDgpCisgICAgeworICAgICAgcmV0cHRyID0gKigodm9pZCAqKikgYXJncCk7CisgICAgICBhcmdwICs9IDQ7CisgICAgfQorICBlbHNlCisgICAgcmV0cHRyID0gKHZvaWQgKikgJnJlc3VsdDsKKworICAvKiBGaWxsIGluIHRoZSBhcnJheSBvZiBhcmd1bWVudCBwb2ludGVycy4gICovCisgIGZvciAoaSA9IDA7IGkgPCBjaWYtPm5hcmdzOyBpKyspCisgICAgeworICAgICAgc2l6ZV90IHNpemUgPSBjaWYtPmFyZ190eXBlc1tpXS0+c2l6ZTsKKyAgICAgIHNpemVfdCBhbGlnbm1lbnQgPSBjaWYtPmFyZ190eXBlc1tpXS0+YWxpZ25tZW50OworCisgICAgICAvKiBBbGlnbiBhcmdwIGFzIGFwcHJvcHJpYXRlIGZvciB0aGUgYXJndW1lbnQgdHlwZS4gICovCisgICAgICBpZiAoKGFsaWdubWVudCAtIDEpICYgKHVuc2lnbmVkKSBhcmdwKQorCWFyZ3AgPSAoY2hhciAqKSBBTElHTiAoYXJncCwgYWxpZ25tZW50KTsKKworICAgICAgLyogQXJndW1lbnRzIHNtYWxsZXIgdGhhbiBhbiBpbnQgYXJlIHByb21vdGVkIHRvIGludC4gICovCisgICAgICBpZiAoc2l6ZSA8IHNpemVvZiAoaW50KSkKKwlzaXplID0gc2l6ZW9mIChpbnQpOworCisgICAgICAvKiBTdG9yZSB0aGUgcG9pbnRlci4gICovCisgICAgICBwYXJzZWRfYXJnc1tpXSA9IGFyZ3A7CisgICAgICBhcmdwICs9IHNpemU7CisgICAgfQorCisgIC8qIENhbGwgdGhlIHVzZXItc3VwcGxpZWQgZnVuY3Rpb24uICAqLworICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCByZXRwdHIsIHBhcnNlZF9hcmdzLCBjbG9zdXJlLT51c2VyX2RhdGEpOworICByZXR1cm4gcmVzdWx0OworfQorCisKKy8qIEluaXRpYWxpemUgQ0xPU1VSRSB3aXRoIGEgdHJhbXBvbGluZSB0byBjYWxsIEZVTiB3aXRoCisgICBDSUYgYW5kIFVTRVJfREFUQS4gICovCitmZmlfc3RhdHVzCitmZmlfcHJlcF9jbG9zdXJlX2xvYyAoZmZpX2Nsb3N1cmUqIGNsb3N1cmUsCisJCSAgICAgIGZmaV9jaWYqIGNpZiwKKwkJICAgICAgdm9pZCAoKmZ1bikgKGZmaV9jaWYqLCB2b2lkKiwgdm9pZCoqLCB2b2lkKiksCisJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwKKwkJICAgICAgdm9pZCAqY29kZWxvYykKK3sKKyAgdW5zaWduZWQgaW50ICp0cmFtcCA9ICh1bnNpZ25lZCBpbnQgKikgJmNsb3N1cmUtPnRyYW1wWzBdOworICBpbnQgaTsKKworICBpZiAoY2lmLT5hYmkgIT0gRkZJX1NZU1YpCisgICAgcmV0dXJuIEZGSV9CQURfQUJJOworCisgIC8qIFRoZSB0cmFtcG9saW5lIGxvb2tzIGxpa2U6CisgICAgICAgbW92aGkgcjgsICVoaShmZmlfY2xvc3VyZV9zeXN2KQorICAgICAgIG9yaSByOCwgcjgsICVsbyhmZmlfY2xvc3VyZV9zeXN2KQorICAgICAgIG1vdmhpIHI5LCAlaGkoZmZpX2Nsb3N1cmVfaGVscGVyKQorICAgICAgIG9yaSByMCwgcjksICVsbyhmZmlfY2xvc3VyZV9oZWxwZXIpCisgICAgICAgbW92aGkgcjEwLCAlaGkoY2xvc3VyZSkKKyAgICAgICBvcmkgcjEwLCByMTAsICVsbyhjbG9zdXJlKQorICAgICAgIGptcCByOAorICAgICBhbmQgdGhlbiBmZmlfY2xvc3VyZV9zeXN2IHJldHJpZXZlcyB0aGUgY2xvc3VyZSBwb2ludGVyIG91dCBvZiByMTAKKyAgICAgaW4gYWRkaXRpb24gdG8gdGhlIGFyZ3VtZW50cyBwYXNzZWQgaW4gdGhlIG5vcm1hbCB3YXkgZm9yIHRoZSBjYWxsLAorICAgICBhbmQgaW52b2tlcyBmZmlfY2xvc3VyZV9oZWxwZXIuICBXZSBlbmNvZGUgdGhlIHBvaW50ZXIgdG8KKyAgICAgZmZpX2Nsb3N1cmVfaGVscGVyIGluIHRoZSB0cmFtcG9saW5lIGJlY2F1c2UgbWFraW5nIGEgUElDIGNhbGwKKyAgICAgdG8gaXQgaW4gZmZpX2Nsb3N1cmVfc3lzdiB3b3VsZCBiZSBtZXNzeSAoaXQgd291bGQgaGF2ZSB0byBpbmRpcmVjdAorICAgICB0aHJvdWdoIHRoZSBHT1QpLiAgKi8KKworI2RlZmluZSBISSh4KSAoKCgodW5zaWduZWQgaW50KSAoeCkpID4+IDE2KSAmIDB4ZmZmZikKKyNkZWZpbmUgTE8oeCkgKCgodW5zaWduZWQgaW50KSAoeCkpICYgMHhmZmZmKQorICB0cmFtcFswXSA9ICgwIDw8IDI3KSB8ICg4IDw8IDIyKSB8IChISSAoZmZpX2Nsb3N1cmVfc3lzdikgPDwgNikgfCAweDM0OworICB0cmFtcFsxXSA9ICg4IDw8IDI3KSB8ICg4IDw8IDIyKSB8IChMTyAoZmZpX2Nsb3N1cmVfc3lzdikgPDwgNikgfCAweDE0OworICB0cmFtcFsyXSA9ICgwIDw8IDI3KSB8ICg5IDw8IDIyKSB8IChISSAoZmZpX2Nsb3N1cmVfaGVscGVyKSA8PCA2KSB8IDB4MzQ7CisgIHRyYW1wWzNdID0gKDkgPDwgMjcpIHwgKDkgPDwgMjIpIHwgKExPIChmZmlfY2xvc3VyZV9oZWxwZXIpIDw8IDYpIHwgMHgxNDsKKyAgdHJhbXBbNF0gPSAoMCA8PCAyNykgfCAoMTAgPDwgMjIpIHwgKEhJIChjbG9zdXJlKSA8PCA2KSB8IDB4MzQ7CisgIHRyYW1wWzVdID0gKDEwIDw8IDI3KSB8ICgxMCA8PCAyMikgfCAoTE8gKGNsb3N1cmUpIDw8IDYpIHwgMHgxNDsKKyAgdHJhbXBbNl0gPSAoOCA8PCAyNykgfCAoMHgwZCA8PCAxMSkgfCAweDNhOworI3VuZGVmIEhJCisjdW5kZWYgTE8KKworICAvKiBGbHVzaCB0aGUgY2FjaGVzLgorICAgICBTZWUgRXhhbXBsZSA5LTQgaW4gdGhlIE5pb3MgSUkgU29mdHdhcmUgRGV2ZWxvcGVyJ3MgSGFuZGJvb2suICAqLworICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQorICAgIGFzbSB2b2xhdGlsZSAoImZsdXNoZCAwKCUwKTsgZmx1c2hpICUwIiA6OiAiciIodHJhbXAgKyBpKSA6ICJtZW1vcnkiKTsKKyAgYXNtIHZvbGF0aWxlICgiZmx1c2hwIiA6OjogIm1lbW9yeSIpOworCisgIGNsb3N1cmUtPmNpZiA9IGNpZjsKKyAgY2xvc3VyZS0+ZnVuID0gZnVuOworICBjbG9zdXJlLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbmlvczIvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9uaW9zMi9mZml0YXJnZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzRkMTE4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbmlvczIvZmZpdGFyZ2V0LmgKQEAgLTAsMCArMSw1MiBAQAorLyogbGliZmZpIHRhcmdldCBpbmNsdWRlcyBmb3IgQWx0ZXJhIE5pb3MgSUkuCisKKyAgIENvcHlyaWdodCAoYykgMjAxMyBNZW50b3IgR3JhcGhpY3MuCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgICAKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgICBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAgIAorICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAgIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgICBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICAgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuICAqLworCisKKyNpZm5kZWYgTElCRkZJX1RBUkdFVF9ICisjZGVmaW5lIExJQkZGSV9UQVJHRVRfSAorCisjaWZuZGVmIExJQkZGSV9ICisjZXJyb3IgIlBsZWFzZSBkbyBub3QgaW5jbHVkZSBmZml0YXJnZXQuaCBkaXJlY3RseSBpbnRvIHlvdXIgc291cmNlLiAgVXNlIGZmaS5oIGluc3RlYWQuIgorI2VuZGlmCisKKyNpZm5kZWYgTElCRkZJX0FTTQordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgICAgIGZmaV9hcmc7Cit0eXBlZGVmIHNpZ25lZCBsb25nICAgICAgICAgICAgZmZpX3Nhcmc7CisKK3R5cGVkZWYgZW51bSBmZmlfYWJpIHsKKyAgRkZJX0ZJUlNUX0FCSSA9IDAsCisgIEZGSV9TWVNWLAorICBGRklfTEFTVF9BQkksCisgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWCit9IGZmaV9hYmk7CisjZW5kaWYKKworLyogU3RydWN0dXJlcyBoYXZlIGEgNC1ieXRlIGFsaWdubWVudCBldmVuIGlmIGFsbCB0aGUgZmllbGRzIGhhdmUgbGVzc2VyCisgICBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzLiAgKi8KKyNkZWZpbmUgRkZJX0FHR1JFR0FURV9BTElHTk1FTlQgNAorCisjZGVmaW5lIEZGSV9DTE9TVVJFUyAxCisjZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMjggICAvKiA3IGluc3RydWN0aW9ucyAqLworI2RlZmluZSBGRklfTkFUSVZFX1JBV19BUEkgMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL25pb3MyL3N5c3YuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL25pb3MyL3N5c3YuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NWY0NDJiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvbmlvczIvc3lzdi5TCkBAIC0wLDAgKzEsMTM2IEBACisvKiBMb3ctbGV2ZWwgbGliZmZpIHN1cHBvcnQgZm9yIEFsdGVyYSBOaW9zIElJLgorCisgICBDb3B5cmlnaHQgKGMpIDIwMTMgTWVudG9yIEdyYXBoaWNzLgorCisgICBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKKyAgIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICAgYGBTb2Z0d2FyZScnKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgICBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICAgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAgCisgICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQorICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgICAKKyAgIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KKyAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCisgICBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorICAgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyAgIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLiAgKi8KKworLyogVGhpcyBmdW5jdGlvbiBpcyBkZWNsYXJlZCBvbiB0aGUgQyBzaWRlIGFzIAorCisgICBleHRlcm4gVUlOVDY0IGZmaV9jYWxsX3N5c3YgKHZvaWQgKCphcmdob29rKSAoY2hhciAqLCBleHRlbmRlZF9jaWYgKiksCisJICAJCSAgICAgICAgZXh0ZW5kZWRfY2lmICplY2lmLAorCQkJCXVuc2lnbmVkIG5ieXRlcywgCisJCQkJdm9pZCAoKmZuKSAodm9pZCkpOworCQorICAgT24gaW5wdXQsIHRoZSBhcmd1bWVudHMgYXBwZWFyIGFzCisJcjQgPSBhcmdob29rCisJcjUgPSBlY2lmCisJcjYgPSBuYnl0ZXMKKwlyNyA9IGZuCisqLworCisJLnNlY3Rpb24JLnRleHQKKwkuYWxpZ24JMgorCS5nbG9iYWwJZmZpX2NhbGxfc3lzdgorCS50eXBlCWZmaV9jYWxsX3N5c3YsIEBmdW5jdGlvbgorCitmZmlfY2FsbF9zeXN2OgorCS5jZmlfc3RhcnRwcm9jCisKKwkvKiBDcmVhdGUgdGhlIHN0YWNrIGZyYW1lLCBzYXZpbmcgcjE2IHNvIHdlIGNhbiB1c2UgaXQgbG9jYWxseS4gICovCisJYWRkaQlzcCwgc3AsIC0xMgorCS5jZmlfZGVmX2NmYV9vZmZzZXQgMTIKKwlzdHcJcmEsIDgoc3ApCisJc3R3CWZwLCA0KHNwKQorCXN0dwlyMTYsIDAoc3ApCisJLmNmaV9vZmZzZXQgMzEsIC00CisJLmNmaV9vZmZzZXQgMjgsIC04CisJLmNmaV9vZmZzZXQgMTYsIC0xMgorCW1vdglmcCwgc3AKKwkuY2ZpX2RlZl9jZmFfcmVnaXN0ZXIgMjgKKwltb3YJcjE2LCByNworCisJLyogQWRqdXN0IHRoZSBzdGFjayBwb2ludGVyIHRvIGNyZWF0ZSB0aGUgYXJndW1lbnQgYnVmZmVyCisJICAgbmJ5dGVzIGxvbmcuICAqLworCXN1YglzcCwgc3AsIHI2CisKKwkvKiBDYWxsIHRoZSBhcmdob29rIGZ1bmN0aW9uLiAgKi8KKwltb3YJcjIsIHI0CQkvKiBmbiAqLworCW1vdglyNCwgc3AJCS8qIGFyZ2J1ZmZlciAqLworCWNhbGxyCXIyCQkvKiByNSBhbHJlYWR5IGNvbnRhaW5zIGVjaWYgKi8KKworCS8qIFBvcCBvZmYgdGhlIGZpcnN0IDE2IGJ5dGVzIG9mIHRoZSBhcmd1bWVudCBidWZmZXIgb24gdGhlIHN0YWNrLAorCSAgIHRyYW5zZmVycmluZyB0aGUgY29udGVudHMgdG8gdGhlIGFyZ3VtZW50IHJlZ2lzdGVycy4gICovCisJbGR3CXI0LCAwKHNwKQorCWxkdwlyNSwgNChzcCkKKwlsZHcJcjYsIDgoc3ApCisJbGR3CXI3LCAxMihzcCkKKwlhZGRpCXNwLCBzcCwgMTYKKworCS8qIENhbGwgdGhlIHVzZXIgZnVuY3Rpb24sIHdoaWNoIGxlYXZlcyBpdHMgcmVzdWx0IGluIHIyIGFuZCByMy4gICovCisJY2FsbHIJcjE2CisKKwkvKiBQb3Agb2ZmIHRoZSBzdGFjayBmcmFtZS4gICovCisJbW92CXNwLCBmcAorCWxkdwlyYSwgOChzcCkKKwlsZHcJZnAsIDQoc3ApCisJbGR3CXIxNiwgMChzcCkKKwlhZGRpCXNwLCBzcCwgMTIKKwlyZXQKKwkuY2ZpX2VuZHByb2MKKwkuc2l6ZQlmZmlfY2FsbF9zeXN2LCAuLWZmaV9jYWxsX3N5c3YKKworCisvKiBDbG9zdXJlIHRyYW1wb2xpbmVzIGp1bXAgaGVyZSBhZnRlciBwdXR0aW5nIHRoZSBDIGhlbHBlciBhZGRyZXNzCisgICBpbiByOSBhbmQgdGhlIGNsb3N1cmUgcG9pbnRlciBpbiByMTAuICBUaGUgdXNlci1zdXBwbGllZCBhcmd1bWVudHMKKyAgIHRvIHRoZSBjbG9zdXJlIGFyZSBpbiB0aGUgbm9ybWFsIHBsYWNlcywgaW4gcjQtcjcgYW5kIG9uIHRoZQorICAgc3RhY2suICBQdXNoIHRoZSByZWdpc3RlciBhcmd1bWVudHMgb24gdGhlIHN0YWNrIHRvbyBhbmQgdGhlbiBjYWxsIHRoZQorICAgQyBoZWxwZXIgZnVuY3Rpb24gdG8gZGVhbCB3aXRoIHRoZW0uICAqLworICAgCisJLnNlY3Rpb24JLnRleHQKKwkuYWxpZ24JMgorCS5nbG9iYWwJZmZpX2Nsb3N1cmVfc3lzdgorCS50eXBlCWZmaV9jbG9zdXJlX3N5c3YsIEBmdW5jdGlvbgorCitmZmlfY2xvc3VyZV9zeXN2OgorCS5jZmlfc3RhcnRwcm9jCisKKwkvKiBDcmVhdGUgdGhlIHN0YWNrIGZyYW1lLCBwdXNoaW5nIHRoZSByZWdpc3RlciBhcmdzIG9uIHRoZSBzdGFjaworCSAgIGp1c3QgYmVsb3cgdGhlIHN0YWNrIGFyZ3MuICBUaGlzIGlzIHRoZSBzYW1lIHRyaWNrIGlsbHVzdHJhdGVkCisJICAgaW4gRmlndXJlIDctMyBpbiB0aGUgTmlvcyBJSSBQcm9jZXNzb3IgUmVmZXJlbmNlIEhhbmRib29rLCB1c2VkCisJICAgZm9yIHZhcmlhYmxlIGFyZ3VtZW50cyBhbmQgc3RydWN0dXJlcyBwYXNzZWQgYnkgdmFsdWUuICAqLworCWFkZGkJc3AsIHNwLCAtMjAKKwkuY2ZpX2RlZl9jZmFfb2Zmc2V0IDIwCisJc3R3CXJhLCAwKHNwKQorCS5jZmlfb2Zmc2V0IDMxLCAtMjAKKwlzdHcJcjQsIDQoc3ApCisJLmNmaV9vZmZzZXQgNCwgLTE2CisJc3R3CXI1LCA4KHNwKQorCS5jZmlfb2Zmc2V0IDUsIC0xMgorCXN0dwlyNiwgMTIoc3ApCisJLmNmaV9vZmZzZXQgNiwgLTgKKwlzdHcJcjcsIDE2KHNwKQorCS5jZmlfb2Zmc2V0IDcsIC00CisKKwkvKiBDYWxsIHRoZSBoZWxwZXIuCisJICAgcjQgPSBwb2ludGVyIHRvIGFyZ3VtZW50cyBvbiBzdGFjaworCSAgIHI1ID0gY2xvc3VyZSBwb2ludGVyIChsb2FkZWQgaW4gcjEwIGJ5IHRoZSB0cmFtcG9saW5lKQorCSAgIHI5ID0gYWRkcmVzcyBvZiBoZWxwZXIgZnVuY3Rpb24gKGxvYWRlZCBieSB0cmFtcG9saW5lKSAqLworCWFkZGkJcjQsIHNwLCA0CisJbW92CXI1LCByMTAKKwljYWxscglyOQorCQorCS8qIFBvcCB0aGUgc3RhY2sgYW5kIHJldHVybi4gICovCisJbGR3CXJhLCAwKHNwKQorCWFkZGkJc3AsIHNwLCAyMAorCS5jZmlfZGVmX2NmYV9vZmZzZXQgLTIwCisJcmV0CisJLmNmaV9lbmRwcm9jCisJLnNpemUJZmZpX2Nsb3N1cmVfc3lzdiwgLi1mZmlfY2xvc3VyZV9zeXN2CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbi5TCmluZGV4IDRmOTg3ZGMuLjA2NmViODIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW4uUwpAQCAtMzE4LDExICszMTgsNiBAQAogCiAjZGVmaW5lIEVIX0RBVEFfQUxJR05fRkFDVCBNT0RFX0NIT0lDRSgweDdjLDB4NzgpCiAKLQkuc3RhdGljX2RhdGEKLQkuYWxpZ24gTE9HMl9HUFJfQllURVMKLUxMRkIwJG5vbl9sYXp5X3B0cjoKLQkuZ19sb25nIExzdGFydGNvZGUKLQogCS5zZWN0aW9uIF9fVEVYVCxfX2VoX2ZyYW1lLGNvYWxlc2NlZCxub190b2Mrc3RyaXBfc3RhdGljX3N5bXMrbGl2ZV9zdXBwb3J0CiBFSF9mcmFtZTE6CiAJLnNldAlMJHNldCQwLExFQ0lFMS1MU0NJRTEKQEAgLTMzNSw3ICszMzAsNyBAQAogCS5ieXRlCUVIX0RBVEFfQUxJR05fRkFDVCA7IHNsZWIxMjggLTQ7IENJRSBEYXRhIEFsaWdubWVudCBGYWN0b3IKIAkuYnl0ZQkweDQxCTsgQ0lFIFJBIENvbHVtbgogCS5ieXRlCTB4MQk7IHVsZWIxMjggMHgxOyBBdWdtZW50YXRpb24gc2l6ZQotCS5ieXRlCTB4MTAJOyBGREUgRW5jb2RpbmcgKGluZGlyZWN0IHBjcmVsKQorCS5ieXRlCTB4MTAJOyBGREUgRW5jb2RpbmcgKHBjcmVsKQogCS5ieXRlCTB4Ywk7IERXX0NGQV9kZWZfY2ZhCiAJLmJ5dGUJMHgxCTsgdWxlYjEyOCAweDEKIAkuYnl0ZQkweDAJOyB1bGViMTI4IDB4MApAQCAtMzQ5LDcgKzM0NCw3IEBACiAJLmxvbmcJTCRzZXQkMQk7IEZERSBMZW5ndGgKIExBU0ZERTE6CiAJLmxvbmcJTEFTRkRFMS1FSF9mcmFtZTEgOyBGREUgQ0lFIG9mZnNldAotCS5nX2xvbmcJTExGQjAkbm9uX2xhenlfcHRyLS4JOyBGREUgaW5pdGlhbCBsb2NhdGlvbgorCS5nX2xvbmcJTHN0YXJ0Y29kZS0uCTsgRkRFIGluaXRpYWwgbG9jYXRpb24KIAkuc2V0CUwkc2V0JDMsTEZFMS1Mc3RhcnRjb2RlCiAJLmdfbG9uZwlMJHNldCQzCTsgRkRFIGFkZHJlc3MgcmFuZ2UKIAkuYnl0ZSAgIDB4MCAgICAgOyB1bGViMTI4IDB4MDsgQXVnbWVudGF0aW9uIHNpemUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZGFyd2luX2Nsb3N1cmUuUwppbmRleCAzZjY3OTBmLi5jNzczNGQ0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2Rhcndpbl9jbG9zdXJlLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9kYXJ3aW5fY2xvc3VyZS5TCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlsZwlyMCwwKHIzKQkJOyBzaXplID0+IHIwCiAJbGh6CXIzLEZGSV9UWVBFX1RZUEUocjMpCTsgdHlwZSA9PiByMwogCi0JLyogVGhlIGhlbHBlciB3aWxsIGhhdmUgaW50ZXJjZXB0ZWQgc3RydXR1cmUgcmV0dXJucyBhbmQgaW5zZXJ0ZWQKKwkvKiBUaGUgaGVscGVyIHdpbGwgaGF2ZSBpbnRlcmNlcHRlZCBzdHJ1Y3R1cmUgcmV0dXJucyBhbmQgaW5zZXJ0ZWQKIAkgICB0aGUgY2FsbGVyYHMgZGVzdGluYXRpb24gYWRkcmVzcyBmb3Igc3RydWN0cyByZXR1cm5lZCBieSByZWYuICAqLwogCiAJLyogcjMgY29udGFpbnMgdGhlIHJldHVybiB0eXBlICBzbyB1c2UgaXQgdG8gbG9vayB1cCBpbiBhIHRhYmxlCkBAIC00NjcsMTEgKzQ2Nyw2IEBACiAjZGVmaW5lIEVIX0ZSQU1FX09GRlNFVEEgTU9ERV9DSE9JQ0UoMTc2LDB4OTApCiAjZGVmaW5lIEVIX0ZSQU1FX09GRlNFVEIgTU9ERV9DSE9JQ0UoMSwzKQogCi0JLnN0YXRpY19kYXRhCi0JLmFsaWduIExPRzJfR1BSX0JZVEVTCi1MTEZCMSRub25fbGF6eV9wdHI6Ci0JLmdfbG9uZyBMc3RhcnRjb2RlCi0KIAkuc2VjdGlvbiBfX1RFWFQsX19laF9mcmFtZSxjb2FsZXNjZWQsbm9fdG9jK3N0cmlwX3N0YXRpY19zeW1zK2xpdmVfc3VwcG9ydAogRUhfZnJhbWUxOgogCS5zZXQJTCRzZXQkMCxMRUNJRTEtTFNDSUUxCkBAIC00ODQsNyArNDc5LDcgQEAKIAkuYnl0ZQlFSF9EQVRBX0FMSUdOX0ZBQ1QgOyBzbGViMTI4IC00OyBDSUUgRGF0YSBBbGlnbm1lbnQgRmFjdG9yCiAJLmJ5dGUJMHg0MQk7IENJRSBSQSBDb2x1bW4KIAkuYnl0ZQkweDEJOyB1bGViMTI4IDB4MTsgQXVnbWVudGF0aW9uIHNpemUKLQkuYnl0ZQkweDEwCTsgRkRFIEVuY29kaW5nIChpbmRpcmVjdCBwY3JlbCkKKwkuYnl0ZQkweDEwCTsgRkRFIEVuY29kaW5nIChwY3JlbCkKIAkuYnl0ZQkweGMJOyBEV19DRkFfZGVmX2NmYQogCS5ieXRlCTB4MQk7IHVsZWIxMjggMHgxCiAJLmJ5dGUJMHgwCTsgdWxlYjEyOCAweDAKQEAgLTQ5OCw3ICs0OTMsNyBAQAogCiBMQVNGREUxOgogCS5sb25nCUxBU0ZERTEtRUhfZnJhbWUxCTsgRkRFIENJRSBvZmZzZXQKLQkuZ19sb25nCUxMRkIxJG5vbl9sYXp5X3B0ci0uCTsgRkRFIGluaXRpYWwgbG9jYXRpb24KKwkuZ19sb25nCUxzdGFydGNvZGUtLgk7IEZERSBpbml0aWFsIGxvY2F0aW9uCiAJLnNldAlMJHNldCQzLExGRTEtTHN0YXJ0Y29kZQogCS5nX2xvbmcJTCRzZXQkMwk7IEZERSBhZGRyZXNzIHJhbmdlCiAJLmJ5dGUgICAweDAgICAgIDsgdWxlYjEyOCAweDA7IEF1Z21lbnRhdGlvbiBzaXplCkBAIC01MjMsMTIgKzUxOCwxMiBAQAogTF9mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOJHN0dWI6CiAJLmluZGlyZWN0X3N5bWJvbCBfZmZpX2Nsb3N1cmVfaGVscGVyX0RBUldJTgogCW1mbHIgcjAKLQliY2wgMjAsMzEsIkwwMDAwMDAwMDAwMSRzcGIiCi0iTDAwMDAwMDAwMDAxJHNwYiI6CisJYmNsIDIwLDMxLCJMMSRzcGIiCisiTDEkc3BiIjoKIAltZmxyIHIxMQotCWFkZGlzIHIxMSxyMTEsaGExNihMX2ZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4kbGF6eV9wdHItIkwwMDAwMDAwMDAwMSRzcGIiKQorCWFkZGlzIHIxMSxyMTEsaGExNihMX2ZmaV9jbG9zdXJlX2hlbHBlcl9EQVJXSU4kbGF6eV9wdHItIkwxJHNwYiIpCiAJbXRsciByMAotCWx3enUgcjEyLGxvMTYoTF9mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOJGxhenlfcHRyLSJMMDAwMDAwMDAwMDEkc3BiIikocjExKQorCWx3enUgcjEyLGxvMTYoTF9mZmlfY2xvc3VyZV9oZWxwZXJfREFSV0lOJGxhenlfcHRyLSJMMSRzcGIiKShyMTEpCiAJbXRjdHIgcjEyCiAJYmN0cgogCS5sYXp5X3N5bWJvbF9wb2ludGVyCkBAIC01NDIsMTIgKzUzNywxMiBAQAogTF9kYXJ3aW42NF9zdHJ1Y3RfcmV0X2J5X3ZhbHVlX3Akc3R1YjoKIAkuaW5kaXJlY3Rfc3ltYm9sIF9kYXJ3aW42NF9zdHJ1Y3RfcmV0X2J5X3ZhbHVlX3AKIAltZmxyIHIwCi0JYmNsIDIwLDMxLCJMMDAwMDAwMDAwMDIkc3BiIgotIkwwMDAwMDAwMDAwMiRzcGIiOgorCWJjbCAyMCwzMSwiTDIkc3BiIgorIkwyJHNwYiI6CiAJbWZsciByMTEKLQlhZGRpcyByMTEscjExLGhhMTYoTF9kYXJ3aW42NF9zdHJ1Y3RfcmV0X2J5X3ZhbHVlX3AkbGF6eV9wdHItIkwwMDAwMDAwMDAwMiRzcGIiKQorCWFkZGlzIHIxMSxyMTEsaGExNihMX2RhcndpbjY0X3N0cnVjdF9yZXRfYnlfdmFsdWVfcCRsYXp5X3B0ci0iTDIkc3BiIikKIAltdGxyIHIwCi0JbHd6dSByMTIsbG8xNihMX2RhcndpbjY0X3N0cnVjdF9yZXRfYnlfdmFsdWVfcCRsYXp5X3B0ci0iTDAwMDAwMDAwMDAyJHNwYiIpKHIxMSkKKwlsd3p1IHIxMixsbzE2KExfZGFyd2luNjRfc3RydWN0X3JldF9ieV92YWx1ZV9wJGxhenlfcHRyLSJMMiRzcGIiKShyMTEpCiAJbXRjdHIgcjEyCiAJYmN0cgogCS5sYXp5X3N5bWJvbF9wb2ludGVyCkBAIC01NjAsMTIgKzU1NSwxMiBAQAogTF9kYXJ3aW42NF9wYXNzX3N0cnVjdF9mbG9hdHMkc3R1YjoKIAkuaW5kaXJlY3Rfc3ltYm9sIF9kYXJ3aW42NF9wYXNzX3N0cnVjdF9mbG9hdHMKIAltZmxyIHIwCi0JYmNsIDIwLDMxLCJMMDAwMDAwMDAwMDMkc3BiIgotIkwwMDAwMDAwMDAwMyRzcGIiOgorCWJjbCAyMCwzMSwiTDMkc3BiIgorIkwzJHNwYiI6CiAJbWZsciByMTEKLQlhZGRpcyByMTEscjExLGhhMTYoTF9kYXJ3aW42NF9wYXNzX3N0cnVjdF9mbG9hdHMkbGF6eV9wdHItIkwwMDAwMDAwMDAwMyRzcGIiKQorCWFkZGlzIHIxMSxyMTEsaGExNihMX2RhcndpbjY0X3Bhc3Nfc3RydWN0X2Zsb2F0cyRsYXp5X3B0ci0iTDMkc3BiIikKIAltdGxyIHIwCi0JbHd6dSByMTIsbG8xNihMX2RhcndpbjY0X3Bhc3Nfc3RydWN0X2Zsb2F0cyRsYXp5X3B0ci0iTDAwMDAwMDAwMDAzJHNwYiIpKHIxMSkKKwlsd3p1IHIxMixsbzE2KExfZGFyd2luNjRfcGFzc19zdHJ1Y3RfZmxvYXRzJGxhenlfcHRyLSJMMyRzcGIiKShyMTEpCiAJbXRjdHIgcjEyCiAJYmN0cgogCS5sYXp5X3N5bWJvbF9wb2ludGVyCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmkuYwppbmRleCA1MzgxZDNkLi5lZmI0NDFiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpLmMKQEAgLTEsNSArMSw2IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgZmZpLmMgLSBDb3B5cmlnaHQgKEMpIDIwMTEgQW50aG9ueSBHcmVlbgorICAgZmZpLmMgLSBDb3B5cmlnaHQgKEMpIDIwMTMgSUJNCisgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAxMSBBbnRob255IEdyZWVuCiAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAxMSBLeWxlIE1vZmZldHQKICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDA4IFJlZCBIYXQsIEluYwogICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKQEAgLTI3LDk5MiArMjgsMTAzIEBACiAgICBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0jaW5jbHVkZSA8ZmZpLmg+Ci0jaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorI2luY2x1ZGUgImZmaS5oIgorI2luY2x1ZGUgImZmaV9jb21tb24uaCIKKyNpbmNsdWRlICJmZmlfcG93ZXJwYy5oIgogCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotCi1leHRlcm4gdm9pZCBmZmlfY2xvc3VyZV9TWVNWICh2b2lkKTsKLWV4dGVybiB2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfTElOVVg2NCAodm9pZCk7Ci0KLWVudW0gewotICAvKiBUaGUgYXNzZW1ibHkgZGVwZW5kcyBvbiB0aGVzZSBleGFjdCBmbGFncy4gICovCi0gIEZMQUdfUkVUVVJOU19TTVNUCT0gMSA8PCAoMzEtMzEpLCAvKiBVc2VkIGZvciBGRklfU1lTViBzbWFsbCBzdHJ1Y3RzLiAgKi8KLSAgRkxBR19SRVRVUk5TX05PVEhJTkcgID0gMSA8PCAoMzEtMzApLCAvKiBUaGVzZSBnbyBpbiBjcjcgKi8KLSNpZm5kZWYgX19OT19GUFJTX18KLSAgRkxBR19SRVRVUk5TX0ZQICAgICAgID0gMSA8PCAoMzEtMjkpLAotI2VuZGlmCi0gIEZMQUdfUkVUVVJOU182NEJJVFMgICA9IDEgPDwgKDMxLTI4KSwKLQotICBGTEFHX1JFVFVSTlNfMTI4QklUUyAgPSAxIDw8ICgzMS0yNyksIC8qIGNyNiAgKi8KLQotICBGTEFHX1NZU1ZfU01TVF9SNCAgICAgPSAxIDw8ICgzMS0yNiksIC8qIHVzZSByNCBmb3IgRkZJX1NZU1YgOCBieXRlCi0JCQkJCSAgIHN0cnVjdHMuICAqLwotICBGTEFHX1NZU1ZfU01TVF9SMyAgICAgPSAxIDw8ICgzMS0yNSksIC8qIHVzZSByMyBmb3IgRkZJX1NZU1YgNCBieXRlCi0JCQkJCSAgIHN0cnVjdHMuICAqLwotCi0gIEZMQUdfQVJHX05FRURTX0NPUFkgICA9IDEgPDwgKDMxLSA3KSwKLSNpZm5kZWYgX19OT19GUFJTX18KLSAgRkxBR19GUF9BUkdVTUVOVFMgICAgID0gMSA8PCAoMzEtIDYpLCAvKiBjcjEuZXE7IHNwZWNpZmllZCBieSBBQkkgKi8KLSNlbmRpZgotICBGTEFHXzRfR1BSX0FSR1VNRU5UUyAgPSAxIDw8ICgzMS0gNSksCi0gIEZMQUdfUkVUVkFMX1JFRkVSRU5DRSA9IDEgPDwgKDMxLSA0KQotfTsKLQotLyogQWJvdXQgdGhlIFNZU1YgQUJJLiAgKi8KLSNkZWZpbmUgQVNNX05FRURTX1JFR0lTVEVSUyA0Ci0jZGVmaW5lIE5VTV9HUFJfQVJHX1JFR0lTVEVSUyA4Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0jIGRlZmluZSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgOAotI2VuZGlmCi0KLS8qIGZmaV9wcmVwX2FyZ3NfU1lTViBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZQotICAgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMuCi0KLSAgIFRoZSBzdGFjayBsYXlvdXQgd2Ugd2FudCBsb29rcyBsaWtlIHRoaXM6Ci0KLSAgIHwgICBSZXR1cm4gYWRkcmVzcyBmcm9tIGZmaV9jYWxsX1NZU1YgNGJ5dGVzCXwJaGlnaGVyIGFkZHJlc3NlcwotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfAotICAgfCAgIFByZXZpb3VzIGJhY2tjaGFpbiBwb2ludGVyCTQJfCAgICAgICBzdGFjayBwb2ludGVyIGhlcmUKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXw8KyA8PDwJb24gZW50cnkgdG8KLSAgIHwgICBTYXZlZCByMjgtcjMxCQkJNCo0CXwgfAlmZmlfY2FsbF9TWVNWCi0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKLSAgIHwgICBHUFIgcmVnaXN0ZXJzIHIzLXIxMAkJOCo0CXwgfAlmZmlfY2FsbF9TWVNWCi0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKLSAgIHwgICBGUFIgcmVnaXN0ZXJzIGYxLWY4IChvcHRpb25hbCkJOCo4CXwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CXN0YWNrCXwKLSAgIHwgICBTcGFjZSBmb3IgY29waWVkIHN0cnVjdHVyZXMJCXwgfAlncm93cwl8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJZG93biAgICBWCi0gICB8ICAgUGFyYW1ldGVycyB0aGF0IGRpZG4ndCBmaXQgaW4gcmVnaXN0ZXJzICB8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlsb3dlciBhZGRyZXNzZXMKLSAgIHwgICBTcGFjZSBmb3IgY2FsbGVlJ3MgTFIJCTQJfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJc3RhY2sgcG9pbnRlciBoZXJlCi0gICB8ICAgQ3VycmVudCBiYWNrY2hhaW4gcG9pbnRlcgk0CXwtLwlkdXJpbmcKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICA8PDwJZmZpX2NhbGxfU1lTVgotCi0qLwotCi12b2lkCi1mZmlfcHJlcF9hcmdzX1NZU1YgKGV4dGVuZGVkX2NpZiAqZWNpZiwgdW5zaWduZWQgKmNvbnN0IHN0YWNrKQotewotICBjb25zdCB1bnNpZ25lZCBieXRlcyA9IGVjaWYtPmNpZi0+Ynl0ZXM7Ci0gIGNvbnN0IHVuc2lnbmVkIGZsYWdzID0gZWNpZi0+Y2lmLT5mbGFnczsKLQotICB0eXBlZGVmIHVuaW9uIHsKLSAgICBjaGFyICpjOwotICAgIHVuc2lnbmVkICp1OwotICAgIGxvbmcgbG9uZyAqbGw7Ci0gICAgZmxvYXQgKmY7Ci0gICAgZG91YmxlICpkOwotICB9IHZhbHA7Ci0KLSAgLyogJ3N0YWNrdG9wJyBwb2ludHMgYXQgdGhlIHByZXZpb3VzIGJhY2tjaGFpbiBwb2ludGVyLiAgKi8KLSAgdmFscCBzdGFja3RvcDsKLQotICAvKiAnZ3ByX2Jhc2UnIHBvaW50cyBhdCB0aGUgc3BhY2UgZm9yIGdwcjMsIGFuZCBncm93cyB1cHdhcmRzIGFzCi0gICAgIHdlIHVzZSBHUFIgcmVnaXN0ZXJzLiAgKi8KLSAgdmFscCBncHJfYmFzZTsKLSAgaW50IGludGFyZ19jb3VudDsKLQotI2lmbmRlZiBfX05PX0ZQUlNfXwotICAvKiAnZnByX2Jhc2UnIHBvaW50cyBhdCB0aGUgc3BhY2UgZm9yIGZwcjEsIGFuZCBncm93cyB1cHdhcmRzIGFzCi0gICAgIHdlIHVzZSBGUFIgcmVnaXN0ZXJzLiAgKi8KLSAgdmFscCBmcHJfYmFzZTsKLSAgaW50IGZwYXJnX2NvdW50OwotI2VuZGlmCi0KLSAgLyogJ2NvcHlfc3BhY2UnIGdyb3dzIGRvd24gYXMgd2UgcHV0IHN0cnVjdHVyZXMgaW4gaXQuICBJdCBzaG91bGQKLSAgICAgc3RheSAxNi1ieXRlIGFsaWduZWQuICAqLwotICB2YWxwIGNvcHlfc3BhY2U7Ci0KLSAgLyogJ25leHRfYXJnJyBncm93cyB1cCBhcyB3ZSBwdXQgcGFyYW1ldGVycyBpbiBpdC4gICovCi0gIHZhbHAgbmV4dF9hcmc7Ci0KLSAgaW50IGk7Ci0gIGZmaV90eXBlICoqcHRyOwotICB1bmlvbiB7Ci0gICAgdm9pZCAqKnY7Ci0gICAgY2hhciAqKmM7Ci0gICAgc2lnbmVkIGNoYXIgKipzYzsKLSAgICB1bnNpZ25lZCBjaGFyICoqdWM7Ci0gICAgc2lnbmVkIHNob3J0ICoqc3M7Ci0gICAgdW5zaWduZWQgc2hvcnQgKip1czsKLSAgICB1bnNpZ25lZCBpbnQgKip1aTsKLSAgICBsb25nIGxvbmcgKipsbDsKLSAgICBmbG9hdCAqKmY7Ci0gICAgZG91YmxlICoqZDsKLSAgfSBwX2FyZ3Y7Ci0gIHNpemVfdCBzdHJ1Y3RfY29weV9zaXplOwotICB1bnNpZ25lZCBncHJ2YWx1ZTsKLSNpZm5kZWYgX19OT19GUFJTX18KLSAgZG91YmxlIGRvdWJsZV90bXA7Ci0jZW5kaWYKLQotICBzdGFja3RvcC5jID0gKGNoYXIgKikgc3RhY2sgKyBieXRlczsKLSAgZ3ByX2Jhc2UudSA9IHN0YWNrdG9wLnUgLSBBU01fTkVFRFNfUkVHSVNURVJTIC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTOwotICBpbnRhcmdfY291bnQgPSAwOwotI2lmbmRlZiBfX05PX0ZQUlNfXwotICBmcHJfYmFzZS5kID0gZ3ByX2Jhc2UuZCAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzsKLSAgZnBhcmdfY291bnQgPSAwOwotICBjb3B5X3NwYWNlLmMgPSAoKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpID8gZnByX2Jhc2UuYyA6IGdwcl9iYXNlLmMpOwotI2Vsc2UKLSAgY29weV9zcGFjZS5jID0gZ3ByX2Jhc2UuYzsKLSNlbmRpZgotICBuZXh0X2FyZy51ID0gc3RhY2sgKyAyOwotCi0gIC8qIENoZWNrIHRoYXQgZXZlcnl0aGluZyBzdGFydHMgYWxpZ25lZCBwcm9wZXJseS4gICovCi0gIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgKGNoYXIgKikgc3RhY2sgJiAweEYpID09IDApOwotICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIGNvcHlfc3BhY2UuYyAmIDB4RikgPT0gMCk7Ci0gIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgc3RhY2t0b3AuYyAmIDB4RikgPT0gMCk7Ci0gIEZGSV9BU1NFUlQgKChieXRlcyAmIDB4RikgPT0gMCk7Ci0gIEZGSV9BU1NFUlQgKGNvcHlfc3BhY2UuYyA+PSBuZXh0X2FyZy5jKTsKLQotICAvKiBEZWFsIHdpdGggcmV0dXJuIHZhbHVlcyB0aGF0IGFyZSBhY3R1YWxseSBwYXNzLWJ5LXJlZmVyZW5jZS4gICovCi0gIGlmIChmbGFncyAmIEZMQUdfUkVUVkFMX1JFRkVSRU5DRSkKLSAgICB7Ci0gICAgICAqZ3ByX2Jhc2UudSsrID0gKHVuc2lnbmVkIGxvbmcpIChjaGFyICopIGVjaWYtPnJ2YWx1ZTsKLSAgICAgIGludGFyZ19jb3VudCsrOwotICAgIH0KLQotICAvKiBOb3cgZm9yIHRoZSBhcmd1bWVudHMuICAqLwotICBwX2FyZ3YudiA9IGVjaWYtPmF2YWx1ZTsKLSAgZm9yIChwdHIgPSBlY2lmLT5jaWYtPmFyZ190eXBlcywgaSA9IGVjaWYtPmNpZi0+bmFyZ3M7Ci0gICAgICAgaSA+IDA7Ci0gICAgICAgaS0tLCBwdHIrKywgcF9hcmd2LnYrKykKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlbnVtID0gKCpwdHIpLT50eXBlOwotCi0gICAgICAvKiBXZSBtYXkgbmVlZCB0byBoYW5kbGUgc29tZSB2YWx1ZXMgZGVwZW5kaW5nIG9uIEFCSSAqLwotICAgICAgaWYgKGVjaWYtPmNpZi0+YWJpID09IEZGSV9MSU5VWF9TT0ZUX0ZMT0FUKSB7Ci0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0ZMT0FUKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1VJTlQzMjsKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfRE9VQkxFKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1VJTlQ2NDsKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9VSU5UMTI4OwotICAgICAgfSBlbHNlIGlmIChlY2lmLT5jaWYtPmFiaSAhPSBGRklfTElOVVgpIHsKLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQkJdHlwZW51bSA9IEZGSV9UWVBFX1NUUlVDVDsKLSNlbmRpZgotICAgICAgfQotCi0gICAgICAvKiBOb3cgdGVzdCB0aGUgdHJhbnNsYXRlZCB2YWx1ZSAqLwotICAgICAgc3dpdGNoICh0eXBlbnVtKSB7Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0JY2FzZSBGRklfVFlQRV9GTE9BVDoKLQkgIC8qIFdpdGggRkZJX0xJTlVYX1NPRlRfRkxPQVQgZmxvYXRzIGFyZSBoYW5kbGVkIGxpa2UgVUlOVDMyLiAgKi8KLQkgIGRvdWJsZV90bXAgPSAqKnBfYXJndi5mOwotCSAgaWYgKGZwYXJnX2NvdW50ID49IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKLQkgICAgewotCSAgICAgICpuZXh0X2FyZy5mID0gKGZsb2F0KSBkb3VibGVfdG1wOwotCSAgICAgIG5leHRfYXJnLnUgKz0gMTsKLQkgICAgICBpbnRhcmdfY291bnQrKzsKLQkgICAgfQotCSAgZWxzZQotCSAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKLQkgIGZwYXJnX2NvdW50Kys7Ci0JICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9ET1VCTEU6Ci0JICAvKiBXaXRoIEZGSV9MSU5VWF9TT0ZUX0ZMT0FUIGRvdWJsZXMgYXJlIGhhbmRsZWQgbGlrZSBVSU5UNjQuICAqLwotCSAgZG91YmxlX3RtcCA9ICoqcF9hcmd2LmQ7Ci0KLQkgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCi0JICAgIHsKLQkgICAgICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUwotCQkgICYmIGludGFyZ19jb3VudCAlIDIgIT0gMCkKLQkJewotCQkgIGludGFyZ19jb3VudCsrOwotCQkgIG5leHRfYXJnLnUrKzsKLQkJfQotCSAgICAgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKLQkgICAgICBuZXh0X2FyZy51ICs9IDI7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7Ci0JICBmcGFyZ19jb3VudCsrOwotCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7Ci0JICBicmVhazsKLQotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgotCSAgICAgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVswXTsKLQotCSAgICAgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgLSAxKQotCQl7Ci0JCSAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMKLQkJICAgICAgJiYgaW50YXJnX2NvdW50ICUgMiAhPSAwKQotCQkgICAgewotCQkgICAgICBpbnRhcmdfY291bnQrKzsKLQkJICAgICAgbmV4dF9hcmcudSsrOwotCQkgICAgfQotCQkgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKLQkJICBuZXh0X2FyZy51ICs9IDI7Ci0JCSAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzFdOwotCQkgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKLQkJICBuZXh0X2FyZy51ICs9IDI7Ci0JCX0KLQkgICAgICBlbHNlCi0JCXsKLQkJICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKLQkJICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMV07Ci0JCSAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7Ci0JCX0KLQotCSAgICAgIGZwYXJnX2NvdW50ICs9IDI7Ci0JICAgICAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7Ci0JICBicmVhazsKLSNlbmRpZgotI2VuZGlmIC8qIGhhdmUgRlBScyAqLwotCi0JLyoKLQkgKiBUaGUgc29mdCBmbG9hdCBBQkkgZm9yIGxvbmcgZG91YmxlcyB3b3JrcyBsaWtlIHRoaXMsIGEgbG9uZyBkb3VibGUKLQkgKiBpcyBwYXNzZWQgaW4gZm91ciBjb25zZWN1dGl2ZSBHUFJzIGlmIGF2YWlsYWJsZS4gIEEgbWF4aW11bSBvZiAyCi0JICogbG9uZyBkb3VibGVzIGNhbiBiZSBwYXNzZWQgaW4gZ3Bycy4gIElmIHdlIGRvIG5vdCBoYXZlIDQgR1BScwotCSAqIGxlZnQsIHRoZSBsb25nIGRvdWJsZSBpcyBwYXNzZWQgb24gdGhlIHN0YWNrLCA0LWJ5dGUgYWxpZ25lZC4KLQkgKi8KLQljYXNlIEZGSV9UWVBFX1VJTlQxMjg6IHsKLQkJdW5zaWduZWQgaW50IGludF90bXAgPSAoKnBfYXJndi51aSlbMF07Ci0JCXVuc2lnbmVkIGludCBpaTsKLQkJaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgLSAzKSB7Ci0JCQlpZiAoaW50YXJnX2NvdW50IDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTKQotCQkJCWludGFyZ19jb3VudCArPSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgLSBpbnRhcmdfY291bnQ7Ci0JCQkqKG5leHRfYXJnLnUrKykgPSBpbnRfdG1wOwotCQkJZm9yIChpaSA9IDE7IGlpIDwgNDsgaWkrKykgewotCQkJCWludF90bXAgPSAoKnBfYXJndi51aSlbaWldOwotCQkJCSoobmV4dF9hcmcudSsrKSA9IGludF90bXA7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkqKGdwcl9iYXNlLnUrKykgPSBpbnRfdG1wOwotCQkJZm9yIChpaSA9IDE7IGlpIDwgNDsgaWkrKykgewotCQkJCWludF90bXAgPSAoKnBfYXJndi51aSlbaWldOwotCQkJCSooZ3ByX2Jhc2UudSsrKSA9IGludF90bXA7Ci0JCQl9Ci0JCX0KLQkJaW50YXJnX2NvdW50ICs9IDQ7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRkZJX1RZUEVfVUlOVDY0OgotCWNhc2UgRkZJX1RZUEVfU0lOVDY0OgotCSAgaWYgKGludGFyZ19jb3VudCA9PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMtMSkKLQkgICAgaW50YXJnX2NvdW50Kys7Ci0JICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKLQkgICAgewotCSAgICAgIGlmIChpbnRhcmdfY291bnQgJSAyICE9IDApCi0JCXsKLQkJICBpbnRhcmdfY291bnQrKzsKLQkJICBuZXh0X2FyZy51Kys7Ci0JCX0KLQkgICAgICAqbmV4dF9hcmcubGwgPSAqKnBfYXJndi5sbDsKLQkgICAgICBuZXh0X2FyZy51ICs9IDI7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIC8qIHdob29wczogYWJpIHN0YXRlcyBvbmx5IGNlcnRhaW4gcmVnaXN0ZXIgcGFpcnMKLQkgICAgICAgKiBjYW4gYmUgdXNlZCBmb3IgcGFzc2luZyBsb25nIGxvbmcgaW50Ci0JICAgICAgICogc3BlY2lmaWNhbGx5IChyMyxyNCksIChyNSxyNiksIChyNyxyOCksCi0JICAgICAgICogKHI5LHIxMCkgYW5kIGlmIG5leHQgYXJnIGlzIGxvbmcgbG9uZyBidXQKLQkgICAgICAgKiBub3QgY29ycmVjdCBzdGFydGluZyByZWdpc3RlciBvZiBwYWlyIHRoZW4gc2tpcAotCSAgICAgICAqIHVudGlsIHRoZSBwcm9wZXIgc3RhcnRpbmcgcmVnaXN0ZXIKLQkgICAgICAgKi8KLQkgICAgICBpZiAoaW50YXJnX2NvdW50ICUgMiAhPSAwKQotCQl7Ci0JCSAgaW50YXJnX2NvdW50ICsrOwotCQkgIGdwcl9iYXNlLnUrKzsKLQkJfQotCSAgICAgICpncHJfYmFzZS5sbCsrID0gKipwX2FyZ3YubGw7Ci0JICAgIH0KLQkgIGludGFyZ19jb3VudCArPSAyOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NUUlVDVDoKLQkgIHN0cnVjdF9jb3B5X3NpemUgPSAoKCpwdHIpLT5zaXplICsgMTUpICYgfjB4RjsKLQkgIGNvcHlfc3BhY2UuYyAtPSBzdHJ1Y3RfY29weV9zaXplOwotCSAgbWVtY3B5IChjb3B5X3NwYWNlLmMsICpwX2FyZ3YuYywgKCpwdHIpLT5zaXplKTsKLQotCSAgZ3BydmFsdWUgPSAodW5zaWduZWQgbG9uZykgY29weV9zcGFjZS5jOwotCi0JICBGRklfQVNTRVJUIChjb3B5X3NwYWNlLmMgPiBuZXh0X2FyZy5jKTsKLQkgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19BUkdfTkVFRFNfQ09QWSk7Ci0JICBnb3RvIHB1dGdwcjsKLQotCWNhc2UgRkZJX1RZUEVfVUlOVDg6Ci0JICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVjOwotCSAgZ290byBwdXRncHI7Ci0JY2FzZSBGRklfVFlQRV9TSU5UODoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc2M7Ci0JICBnb3RvIHB1dGdwcjsKLQljYXNlIEZGSV9UWVBFX1VJTlQxNjoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3YudXM7Ci0JICBnb3RvIHB1dGdwcjsKLQljYXNlIEZGSV9UWVBFX1NJTlQxNjoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3Yuc3M7Ci0JICBnb3RvIHB1dGdwcjsKLQotCWNhc2UgRkZJX1RZUEVfSU5UOgotCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgotCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgotCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKLQotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51aTsKLQotCXB1dGdwcjoKLQkgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTKQotCSAgICAqbmV4dF9hcmcudSsrID0gZ3BydmFsdWU7Ci0JICBlbHNlCi0JICAgICpncHJfYmFzZS51KysgPSBncHJ2YWx1ZTsKLQkgIGludGFyZ19jb3VudCsrOwotCSAgYnJlYWs7Ci0JfQotICAgIH0KLQotICAvKiBDaGVjayB0aGF0IHdlIGRpZG4ndCBvdmVycnVuIHRoZSBzdGFjay4uLiAgKi8KLSAgRkZJX0FTU0VSVCAoY29weV9zcGFjZS5jID49IG5leHRfYXJnLmMpOwotICBGRklfQVNTRVJUIChncHJfYmFzZS51IDw9IHN0YWNrdG9wLnUgLSBBU01fTkVFRFNfUkVHSVNURVJTKTsKLSAgLyogVGhlIGFzc2VydCBiZWxvdyBpcyB0ZXN0aW5nIHRoYXQgdGhlIG51bWJlciBvZiBpbnRlZ2VyIGFyZ3VtZW50cyBhZ3JlZXMKLSAgICAgd2l0aCB0aGUgbnVtYmVyIGZvdW5kIGluIGZmaV9wcmVwX2NpZl9tYWNoZGVwKCkuICBIb3dldmVyLCBpbnRhcmdfY291bnQKLSAgICAgaXMgaW5jcmVtZW5ldGVkIHdoZW5ldmVyIHdlIHBsYWNlIGFuIEZQIGFyZyBvbiB0aGUgc3RhY2ssIHNvIGFjY291bnQgZm9yCi0gICAgIHRoYXQgYmVmb3JlIG91ciBhc3NlcnQgdGVzdC4gICovCi0jaWZuZGVmIF9fTk9fRlBSU19fCi0gIGlmIChmcGFyZ19jb3VudCA+IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKLSAgICBpbnRhcmdfY291bnQgLT0gZnBhcmdfY291bnQgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlM7Ci0gIEZGSV9BU1NFUlQgKGZwcl9iYXNlLnUKLQkgICAgICA8PSBzdGFja3RvcC51IC0gQVNNX05FRURTX1JFR0lTVEVSUyAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUyk7Ci0jZW5kaWYKLSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHXzRfR1BSX0FSR1VNRU5UUyB8fCBpbnRhcmdfY291bnQgPD0gNCk7Ci19Ci0KLS8qIEFib3V0IHRoZSBMSU5VWDY0IEFCSS4gICovCi1lbnVtIHsKLSAgTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQgPSA4LAotICBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCA9IDEzCi19OwotZW51bSB7IEFTTV9ORUVEU19SRUdJU1RFUlM2NCA9IDQgfTsKLQotLyogZmZpX3ByZXBfYXJnczY0IGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCi0gICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cy4KLQotICAgVGhlIHN0YWNrIGxheW91dCB3ZSB3YW50IGxvb2tzIGxpa2UgdGhpczoKLQotICAgfCAgIFJldCBhZGRyIGZyb20gZmZpX2NhbGxfTElOVVg2NAk4Ynl0ZXMJfAloaWdoZXIgYWRkcmVzc2VzCi0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18Ci0gICB8ICAgQ1Igc2F2ZSBhcmVhCQkJOGJ5dGVzCXwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKLSAgIHwgICBQcmV2aW91cyBiYWNrY2hhaW4gcG9pbnRlcgk4CXwJc3RhY2sgcG9pbnRlciBoZXJlCi0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18PCsgPDw8CW9uIGVudHJ5IHRvCi0gICB8ICAgU2F2ZWQgcjI4LXIzMQkJCTQqOAl8IHwJZmZpX2NhbGxfTElOVVg2NAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8Ci0gICB8ICAgR1BSIHJlZ2lzdGVycyByMy1yMTAJCTgqOAl8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAotICAgfCAgIEZQUiByZWdpc3RlcnMgZjEtZjEzIChvcHRpb25hbCkJMTMqOAl8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAotICAgfCAgIFBhcmFtZXRlciBzYXZlIGFyZWEJCSAgICAgICAgfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKLSAgIHwgICBUT0Mgc2F2ZSBhcmVhCQkJOAl8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlzdGFjawl8Ci0gICB8ICAgTGlua2VyIGRvdWJsZXdvcmQJCTgJfCB8CWdyb3dzCXwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlkb3duCVYKLSAgIHwgICBDb21waWxlciBkb3VibGV3b3JkCQk4CXwgfAotICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CWxvd2VyIGFkZHJlc3NlcwotICAgfCAgIFNwYWNlIGZvciBjYWxsZWUncyBMUgkJOAl8IHwKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAotICAgfCAgIENSIHNhdmUgYXJlYQkJCTgJfCB8Ci0gICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJc3RhY2sgcG9pbnRlciBoZXJlCi0gICB8ICAgQ3VycmVudCBiYWNrY2hhaW4gcG9pbnRlcgk4CXwtLwlkdXJpbmcKLSAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICA8PDwJZmZpX2NhbGxfTElOVVg2NAotCi0qLwotCisjaWYgSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UCisvKiBBZGp1c3QgZmZpX3R5cGVfbG9uZ2RvdWJsZS4gICovCiB2b2lkIEZGSV9ISURERU4KLWZmaV9wcmVwX2FyZ3M2NCAoZXh0ZW5kZWRfY2lmICplY2lmLCB1bnNpZ25lZCBsb25nICpjb25zdCBzdGFjaykKK2ZmaV9wcmVwX3R5cGVzIChmZmlfYWJpIGFiaSkKIHsKLSAgY29uc3QgdW5zaWduZWQgbG9uZyBieXRlcyA9IGVjaWYtPmNpZi0+Ynl0ZXM7Ci0gIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBlY2lmLT5jaWYtPmZsYWdzOwotCi0gIHR5cGVkZWYgdW5pb24gewotICAgIGNoYXIgKmM7Ci0gICAgdW5zaWduZWQgbG9uZyAqdWw7Ci0gICAgZmxvYXQgKmY7Ci0gICAgZG91YmxlICpkOwotICB9IHZhbHA7Ci0KLSAgLyogJ3N0YWNrdG9wJyBwb2ludHMgYXQgdGhlIHByZXZpb3VzIGJhY2tjaGFpbiBwb2ludGVyLiAgKi8KLSAgdmFscCBzdGFja3RvcDsKLQotICAvKiAnbmV4dF9hcmcnIHBvaW50cyBhdCB0aGUgc3BhY2UgZm9yIGdwcjMsIGFuZCBncm93cyB1cHdhcmRzIGFzCi0gICAgIHdlIHVzZSBHUFIgcmVnaXN0ZXJzLCB0aGVuIGNvbnRpbnVlcyBhdCByZXN0LiAgKi8KLSAgdmFscCBncHJfYmFzZTsKLSAgdmFscCBncHJfZW5kOwotICB2YWxwIHJlc3Q7Ci0gIHZhbHAgbmV4dF9hcmc7Ci0KLSAgLyogJ2Zwcl9iYXNlJyBwb2ludHMgYXQgdGhlIHNwYWNlIGZvciBmcHIzLCBhbmQgZ3Jvd3MgdXB3YXJkcyBhcwotICAgICB3ZSB1c2UgRlBSIHJlZ2lzdGVycy4gICovCi0gIHZhbHAgZnByX2Jhc2U7Ci0gIGludCBmcGFyZ19jb3VudDsKLQotICBpbnQgaSwgd29yZHM7Ci0gIGZmaV90eXBlICoqcHRyOwotICBkb3VibGUgZG91YmxlX3RtcDsKLSAgdW5pb24gewotICAgIHZvaWQgKip2OwotICAgIGNoYXIgKipjOwotICAgIHNpZ25lZCBjaGFyICoqc2M7Ci0gICAgdW5zaWduZWQgY2hhciAqKnVjOwotICAgIHNpZ25lZCBzaG9ydCAqKnNzOwotICAgIHVuc2lnbmVkIHNob3J0ICoqdXM7Ci0gICAgc2lnbmVkIGludCAqKnNpOwotICAgIHVuc2lnbmVkIGludCAqKnVpOwotICAgIHVuc2lnbmVkIGxvbmcgKip1bDsKLSAgICBmbG9hdCAqKmY7Ci0gICAgZG91YmxlICoqZDsKLSAgfSBwX2FyZ3Y7Ci0gIHVuc2lnbmVkIGxvbmcgZ3BydmFsdWU7Ci0KLSAgc3RhY2t0b3AuYyA9IChjaGFyICopIHN0YWNrICsgYnl0ZXM7Ci0gIGdwcl9iYXNlLnVsID0gc3RhY2t0b3AudWwgLSBBU01fTkVFRFNfUkVHSVNURVJTNjQgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NDsKLSAgZ3ByX2VuZC51bCA9IGdwcl9iYXNlLnVsICsgTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQ7Ci0gIHJlc3QudWwgPSBzdGFjayArIDYgKyBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NDsKLSAgZnByX2Jhc2UuZCA9IGdwcl9iYXNlLmQgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NDsKLSAgZnBhcmdfY291bnQgPSAwOwotICBuZXh0X2FyZy51bCA9IGdwcl9iYXNlLnVsOwotCi0gIC8qIENoZWNrIHRoYXQgZXZlcnl0aGluZyBzdGFydHMgYWxpZ25lZCBwcm9wZXJseS4gICovCi0gIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgKGNoYXIgKikgc3RhY2sgJiAweEYpID09IDApOwotICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIHN0YWNrdG9wLmMgJiAweEYpID09IDApOwotICBGRklfQVNTRVJUICgoYnl0ZXMgJiAweEYpID09IDApOwotCi0gIC8qIERlYWwgd2l0aCByZXR1cm4gdmFsdWVzIHRoYXQgYXJlIGFjdHVhbGx5IHBhc3MtYnktcmVmZXJlbmNlLiAgKi8KLSAgaWYgKGZsYWdzICYgRkxBR19SRVRWQUxfUkVGRVJFTkNFKQotICAgICpuZXh0X2FyZy51bCsrID0gKHVuc2lnbmVkIGxvbmcpIChjaGFyICopIGVjaWYtPnJ2YWx1ZTsKLQotICAvKiBOb3cgZm9yIHRoZSBhcmd1bWVudHMuICAqLwotICBwX2FyZ3YudiA9IGVjaWYtPmF2YWx1ZTsKLSAgZm9yIChwdHIgPSBlY2lmLT5jaWYtPmFyZ190eXBlcywgaSA9IGVjaWYtPmNpZi0+bmFyZ3M7Ci0gICAgICAgaSA+IDA7Ci0gICAgICAgaS0tLCBwdHIrKywgcF9hcmd2LnYrKykKLSAgICB7Ci0gICAgICBzd2l0Y2ggKCgqcHRyKS0+dHlwZSkKLQl7Ci0JY2FzZSBGRklfVFlQRV9GTE9BVDoKLQkgIGRvdWJsZV90bXAgPSAqKnBfYXJndi5mOwotCSAgKm5leHRfYXJnLmYgPSAoZmxvYXQpIGRvdWJsZV90bXA7Ci0JICBpZiAoKytuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQotCSAgICBuZXh0X2FyZy51bCA9IHJlc3QudWw7Ci0JICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCkKLQkgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7Ci0JICBmcGFyZ19jb3VudCsrOwotCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgotCSAgZG91YmxlX3RtcCA9ICoqcF9hcmd2LmQ7Ci0JICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7Ci0JICBpZiAoKytuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQotCSAgICBuZXh0X2FyZy51bCA9IHJlc3QudWw7Ci0JICBpZiAoZnBhcmdfY291bnQgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCkKLQkgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7Ci0JICBmcGFyZ19jb3VudCsrOwotCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7Ci0JICBicmVhazsKLQotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgotCSAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzBdOwotCSAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOwotCSAgaWYgKCsrbmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKLQkgICAgbmV4dF9hcmcudWwgPSByZXN0LnVsOwotCSAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQpCi0JICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOwotCSAgZnBhcmdfY291bnQrKzsKLQkgIGRvdWJsZV90bXAgPSAoKnBfYXJndi5kKVsxXTsKLQkgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKLQkgIGlmICgrK25leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCi0JICAgIG5leHRfYXJnLnVsID0gcmVzdC51bDsKLQkgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0KQotCSAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKLQkgIGZwYXJnX2NvdW50Kys7Ci0JICBGRklfQVNTRVJUIChfX0xEQkxfTUFOVF9ESUdfXyA9PSAxMDYpOwotCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7Ci0JICBicmVhazsKLSNlbmRpZgotCi0JY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0JICB3b3JkcyA9ICgoKnB0ciktPnNpemUgKyA3KSAvIDg7Ci0JICBpZiAobmV4dF9hcmcudWwgPj0gZ3ByX2Jhc2UudWwgJiYgbmV4dF9hcmcudWwgKyB3b3JkcyA+IGdwcl9lbmQudWwpCi0JICAgIHsKLQkgICAgICBzaXplX3QgZmlyc3QgPSBncHJfZW5kLmMgLSBuZXh0X2FyZy5jOwotCSAgICAgIG1lbWNweSAobmV4dF9hcmcuYywgKnBfYXJndi5jLCBmaXJzdCk7Ci0JICAgICAgbWVtY3B5IChyZXN0LmMsICpwX2FyZ3YuYyArIGZpcnN0LCAoKnB0ciktPnNpemUgLSBmaXJzdCk7Ci0JICAgICAgbmV4dF9hcmcuYyA9IHJlc3QuYyArIHdvcmRzICogOCAtIGZpcnN0OwotCSAgICB9Ci0JICBlbHNlCi0JICAgIHsKLQkgICAgICBjaGFyICp3aGVyZSA9IG5leHRfYXJnLmM7Ci0KLQkgICAgICAvKiBTdHJ1Y3R1cmVzIHdpdGggc2l6ZSBsZXNzIHRoYW4gZWlnaHQgYnl0ZXMgYXJlIHBhc3NlZAotCQkgbGVmdC1wYWRkZWQuICAqLwotCSAgICAgIGlmICgoKnB0ciktPnNpemUgPCA4KQotCQl3aGVyZSArPSA4IC0gKCpwdHIpLT5zaXplOwotCi0JICAgICAgbWVtY3B5ICh3aGVyZSwgKnBfYXJndi5jLCAoKnB0ciktPnNpemUpOwotCSAgICAgIG5leHRfYXJnLnVsICs9IHdvcmRzOwotCSAgICAgIGlmIChuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQotCQluZXh0X2FyZy51bCA9IHJlc3QudWw7Ci0JICAgIH0KLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9VSU5UODoKLQkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWM7Ci0JICBnb3RvIHB1dGdwcjsKLQljYXNlIEZGSV9UWVBFX1NJTlQ4OgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zYzsKLQkgIGdvdG8gcHV0Z3ByOwotCWNhc2UgRkZJX1RZUEVfVUlOVDE2OgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51czsKLQkgIGdvdG8gcHV0Z3ByOwotCWNhc2UgRkZJX1RZUEVfU0lOVDE2OgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zczsKLQkgIGdvdG8gcHV0Z3ByOwotCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51aTsKLQkgIGdvdG8gcHV0Z3ByOwotCWNhc2UgRkZJX1RZUEVfSU5UOgotCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi5zaTsKLQkgIGdvdG8gcHV0Z3ByOwotCi0JY2FzZSBGRklfVFlQRV9VSU5UNjQ6Ci0JY2FzZSBGRklfVFlQRV9TSU5UNjQ6Ci0JY2FzZSBGRklfVFlQRV9QT0lOVEVSOgotCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51bDsKLQlwdXRncHI6Ci0JICAqbmV4dF9hcmcudWwrKyA9IGdwcnZhbHVlOwotCSAgaWYgKG5leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCi0JICAgIG5leHRfYXJnLnVsID0gcmVzdC51bDsKLQkgIGJyZWFrOwotCX0KLSAgICB9Ci0KLSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHXzRfR1BSX0FSR1VNRU5UUwotCSAgICAgIHx8IChuZXh0X2FyZy51bCA+PSBncHJfYmFzZS51bAotCQkgICYmIG5leHRfYXJnLnVsIDw9IGdwcl9iYXNlLnVsICsgNCkpOworIyBpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorIyAgaWZkZWYgUE9XRVJQQzY0CisgIGZmaV9wcmVwX3R5cGVzX2xpbnV4NjQgKGFiaSk7CisjICBlbHNlCisgIGZmaV9wcmVwX3R5cGVzX3N5c3YgKGFiaSk7CisjICBlbmRpZgorIyBlbmRpZgogfQotCi0KKyNlbmRpZgogCiAvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nICovCi1mZmlfc3RhdHVzCitmZmlfc3RhdHVzIEZGSV9ISURERU4KIGZmaV9wcmVwX2NpZl9tYWNoZGVwIChmZmlfY2lmICpjaWYpCiB7Ci0gIC8qIEFsbCB0aGlzIGlzIGZvciB0aGUgU1lTViBhbmQgTElOVVg2NCBBQkkuICAqLwotICBpbnQgaTsKLSAgZmZpX3R5cGUgKipwdHI7Ci0gIHVuc2lnbmVkIGJ5dGVzOwotICBpbnQgZnBhcmdfY291bnQgPSAwLCBpbnRhcmdfY291bnQgPSAwOwotICB1bnNpZ25lZCBmbGFncyA9IDA7Ci0gIHVuc2lnbmVkIHN0cnVjdF9jb3B5X3NpemUgPSAwOwotICB1bnNpZ25lZCB0eXBlID0gY2lmLT5ydHlwZS0+dHlwZTsKLSAgdW5zaWduZWQgc2l6ZSA9IGNpZi0+cnR5cGUtPnNpemU7Ci0KLSAgaWYgKGNpZi0+YWJpICE9IEZGSV9MSU5VWDY0KQotICAgIHsKLSAgICAgIC8qIEFsbCB0aGUgbWFjaGluZS1pbmRlcGVuZGVudCBjYWxjdWxhdGlvbiBvZiBjaWYtPmJ5dGVzIHdpbGwgYmUgd3JvbmcuCi0JIFJlZG8gdGhlIGNhbGN1bGF0aW9uIGZvciBTWVNWLiAgKi8KLQotICAgICAgLyogU3BhY2UgZm9yIHRoZSBmcmFtZSBwb2ludGVyLCBjYWxsZWUncyBMUiwgYW5kIHRoZSBhc20ncyB0ZW1wIHJlZ3MuICAqLwotICAgICAgYnl0ZXMgPSAoMiArIEFTTV9ORUVEU19SRUdJU1RFUlMpICogc2l6ZW9mIChpbnQpOwotCi0gICAgICAvKiBTcGFjZSBmb3IgdGhlIEdQUiByZWdpc3RlcnMuICAqLwotICAgICAgYnl0ZXMgKz0gTlVNX0dQUl9BUkdfUkVHSVNURVJTICogc2l6ZW9mIChpbnQpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIC8qIDY0LWJpdCBBQkkuICAqLwotCi0gICAgICAvKiBTcGFjZSBmb3IgYmFja2NoYWluLCBDUiwgTFIsIGNjL2xkIGRvdWJsZXdvcmQsIFRPQyBhbmQgdGhlIGFzbSdzIHRlbXAKLQkgcmVncy4gICovCi0gICAgICBieXRlcyA9ICg2ICsgQVNNX05FRURTX1JFR0lTVEVSUzY0KSAqIHNpemVvZiAobG9uZyk7Ci0KLSAgICAgIC8qIFNwYWNlIGZvciB0aGUgbWFuZGF0b3J5IHBhcm0gc2F2ZSBhcmVhIGFuZCBnZW5lcmFsIHJlZ2lzdGVycy4gICovCi0gICAgICBieXRlcyArPSAyICogTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQgKiBzaXplb2YgKGxvbmcpOwotICAgIH0KLQotICAvKiBSZXR1cm4gdmFsdWUgaGFuZGxpbmcuICBUaGUgcnVsZXMgZm9yIFNZU1YgYXJlIGFzIGZvbGxvd3M6Ci0gICAgIC0gMzItYml0IChvciBsZXNzKSBpbnRlZ2VyIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gZ3ByMzsKLSAgICAgLSBTdHJ1Y3R1cmVzIG9mIHNpemUgPD0gNCBieXRlcyBhbHNvIHJldHVybmVkIGluIGdwcjM7Ci0gICAgIC0gNjQtYml0IGludGVnZXIgdmFsdWVzIGFuZCBzdHJ1Y3R1cmVzIGJldHdlZW4gNSBhbmQgOCBieXRlcyBhcmUgcmV0dXJuZWQKLSAgICAgaW4gZ3ByMyBhbmQgZ3ByNDsKLSAgICAgLSBTaW5nbGUvZG91YmxlIEZQIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gZnByMTsKLSAgICAgLSBMYXJnZXIgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIHNwYWNlIGFuZCBhIHBvaW50ZXIgaXMgcGFzc2VkIGFzCi0gICAgIHRoZSBmaXJzdCBhcmd1bWVudC4KLSAgICAgLSBsb25nIGRvdWJsZXMgKGlmIG5vdCBlcXVpdmFsZW50IHRvIGRvdWJsZSkgYXJlIHJldHVybmVkIGluCi0gICAgIGZwcjEsZnByMiBmb3IgTGludXggYW5kIGFzIGZvciBsYXJnZSBzdHJ1Y3RzIGZvciBTeXNWLgotICAgICBGb3IgTElOVVg2NDoKLSAgICAgLSBpbnRlZ2VyIHZhbHVlcyBpbiBncHIzOwotICAgICAtIFN0cnVjdHVyZXMvVW5pb25zIGJ5IHJlZmVyZW5jZTsKLSAgICAgLSBTaW5nbGUvZG91YmxlIEZQIHZhbHVlcyBpbiBmcHIxLCBsb25nIGRvdWJsZSBpbiBmcHIxLGZwcjIuCi0gICAgIC0gc29mdC1mbG9hdCBmbG9hdC9kb3VibGVzIGFyZSB0cmVhdGVkIGFzIFVJTlQzMi9VSU5UNjQgcmVzcGVjdGl2bGV5LgotICAgICAtIHNvZnQtZmxvYXQgbG9uZyBkb3VibGVzIGFyZSByZXR1cm5lZCBpbiBncHIzLWdwcjYuICAqLwotICAvKiBGaXJzdCB0cmFuc2xhdGUgZm9yIHNvZnRmbG9hdC9ub25saW51eCAqLwotICBpZiAoY2lmLT5hYmkgPT0gRkZJX0xJTlVYX1NPRlRfRkxPQVQpIHsKLQlpZiAodHlwZSA9PSBGRklfVFlQRV9GTE9BVCkKLQkJdHlwZSA9IEZGSV9UWVBFX1VJTlQzMjsKLQlpZiAodHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCi0JCXR5cGUgPSBGRklfVFlQRV9VSU5UNjQ7Ci0JaWYgKHR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJdHlwZSA9IEZGSV9UWVBFX1VJTlQxMjg7Ci0gIH0gZWxzZSBpZiAoY2lmLT5hYmkgIT0gRkZJX0xJTlVYICYmIGNpZi0+YWJpICE9IEZGSV9MSU5VWDY0KSB7Ci0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQlpZiAodHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQotCQl0eXBlID0gRkZJX1RZUEVfU1RSVUNUOworI2lmZGVmIFBPV0VSUEM2NAorICByZXR1cm4gZmZpX3ByZXBfY2lmX2xpbnV4NjQgKGNpZik7CisjZWxzZQorICByZXR1cm4gZmZpX3ByZXBfY2lmX3N5c3YgKGNpZik7CiAjZW5kaWYKLSAgfQotCi0gIHN3aXRjaCAodHlwZSkKLSAgICB7Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLSAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6Ci0gICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfMTI4QklUUzsKLSAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCi0jZW5kaWYKLSAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKLSAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU182NEJJVFM7Ci0gICAgICAvKiBGYWxsIHRocm91Z2guICAqLwotICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0gICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfRlA7Ci0gICAgICBicmVhazsKLSNlbmRpZgotCi0gICAgY2FzZSBGRklfVFlQRV9VSU5UMTI4OgotICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzEyOEJJVFM7Ci0gICAgICAvKiBGYWxsIHRocm91Z2guICAqLwotICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgotICAgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgotICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TXzY0QklUUzsKLSAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0gICAgICBpZiAoY2lmLT5hYmkgPT0gRkZJX1NZU1YpCi0JewotCSAgLyogVGhlIGZpbmFsIFNZU1YgQUJJIHNheXMgdGhhdCBzdHJ1Y3R1cmVzIHNtYWxsZXIgb3IgZXF1YWwgOCBieXRlcwotCSAgICAgYXJlIHJldHVybmVkIGluIHIzL3I0LiBUaGUgRkZJX0dDQ19TWVNWIEFCSSBpbnN0ZWFkIHJldHVybnMgdGhlbQotCSAgICAgaW4gbWVtb3J5LiAgKi8KLQotCSAgLyogVHJlYXQgc3RydWN0cyB3aXRoIHNpemUgPD0gOCBieXRlcy4gICovCi0JICBpZiAoc2l6ZSA8PSA4KQotCSAgICB7Ci0JICAgICAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX1NNU1Q7Ci0JICAgICAgLyogVGhlc2Ugc3RydWN0cyBhcmUgcmV0dXJuZWQgaW4gcjMuIFdlIHBhY2sgdGhlIHR5cGUgYW5kIHRoZQotCQkgcHJlY2FsY3VsYXRlZCBzaGlmdCB2YWx1ZSAobmVlZGVkIGluIHRoZSBzeXN2LlMpIGludG8gZmxhZ3MuCi0JCSBUaGUgc2FtZSBhcHBsaWVzIGZvciB0aGUgc3RydWN0cyByZXR1cm5lZCBpbiByMy9yNC4gICovCi0JICAgICAgaWYgKHNpemUgPD0gNCkKLQkJewotCQkgIGZsYWdzIHw9IEZMQUdfU1lTVl9TTVNUX1IzOwotCQkgIGZsYWdzIHw9IDggKiAoNCAtIHNpemUpIDw8IDg7Ci0JCSAgYnJlYWs7Ci0JCX0KLQkgICAgICAvKiBUaGVzZSBzdHJ1Y3RzIGFyZSByZXR1cm5lZCBpbiByMyBhbmQgcjQuIFNlZSBhYm92ZS4gICAqLwotCSAgICAgIGlmICAoc2l6ZSA8PSA4KQotCQl7Ci0JCSAgZmxhZ3MgfD0gRkxBR19TWVNWX1NNU1RfUjMgfCBGTEFHX1NZU1ZfU01TVF9SNDsKLQkJICBmbGFncyB8PSA4ICogKDggLSBzaXplKSA8PCA4OwotCQkgIGJyZWFrOwotCQl9Ci0JICAgIH0KLQl9Ci0KLSAgICAgIGludGFyZ19jb3VudCsrOwotICAgICAgZmxhZ3MgfD0gRkxBR19SRVRWQUxfUkVGRVJFTkNFOwotICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KLSAgICBjYXNlIEZGSV9UWVBFX1ZPSUQ6Ci0gICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfTk9USElORzsKLSAgICAgIGJyZWFrOwotCi0gICAgZGVmYXVsdDoKLSAgICAgIC8qIFJldHVybnMgMzItYml0IGludGVnZXIsIG9yIHNpbWlsYXIuICBOb3RoaW5nIHRvIGRvIGhlcmUuICAqLwotICAgICAgYnJlYWs7Ci0gICAgfQotCi0gIGlmIChjaWYtPmFiaSAhPSBGRklfTElOVVg2NCkKLSAgICAvKiBUaGUgZmlyc3QgTlVNX0dQUl9BUkdfUkVHSVNURVJTIHdvcmRzIG9mIGludGVnZXIgYXJndW1lbnRzLCBhbmQgdGhlCi0gICAgICAgZmlyc3QgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIGZwIGFyZ3VtZW50cywgZ28gaW4gcmVnaXN0ZXJzOyB0aGUgcmVzdAotICAgICAgIGdvZXMgb24gdGhlIHN0YWNrLiAgU3RydWN0dXJlcyBhbmQgbG9uZyBkb3VibGVzIChpZiBub3QgZXF1aXZhbGVudAotICAgICAgIHRvIGRvdWJsZSkgYXJlIHBhc3NlZCBhcyBhIHBvaW50ZXIgdG8gYSBjb3B5IG9mIHRoZSBzdHJ1Y3R1cmUuCi0gICAgICAgU3R1ZmYgb24gdGhlIHN0YWNrIG5lZWRzIHRvIGtlZXAgcHJvcGVyIGFsaWdubWVudC4gICovCi0gICAgZm9yIChwdHIgPSBjaWYtPmFyZ190eXBlcywgaSA9IGNpZi0+bmFyZ3M7IGkgPiAwOyBpLS0sIHB0cisrKQotICAgICAgewotCXVuc2lnbmVkIHNob3J0IHR5cGVudW0gPSAoKnB0ciktPnR5cGU7Ci0KLQkvKiBXZSBtYXkgbmVlZCB0byBoYW5kbGUgc29tZSB2YWx1ZXMgZGVwZW5kaW5nIG9uIEFCSSAqLwotCWlmIChjaWYtPmFiaSA9PSBGRklfTElOVVhfU09GVF9GTE9BVCkgewotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9GTE9BVCkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9VSU5UMzI7Ci0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0RPVUJMRSkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9VSU5UNjQ7Ci0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDEyODsKLQl9IGVsc2UgaWYgKGNpZi0+YWJpICE9IEZGSV9MSU5VWCAmJiBjaWYtPmFiaSAhPSBGRklfTElOVVg2NCkgewotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfU1RSVUNUOwotI2VuZGlmCi0JfQotCi0Jc3dpdGNoICh0eXBlbnVtKSB7Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0JICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgotCSAgICBmcGFyZ19jb3VudCsrOwotCSAgICAvKiBmbG9hdGluZyBzaW5nbGVzIGFyZSBub3QgOC1hbGlnbmVkIG9uIHN0YWNrICovCi0JICAgIGJyZWFrOwotCi0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQkgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKLQkgICAgZnBhcmdfY291bnQrKzsKLQkgICAgLyogRmFsbCB0aHJ1ICovCi0jZW5kaWYKLQkgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgotCSAgICBmcGFyZ19jb3VudCsrOwotCSAgICAvKiBJZiB0aGlzIEZQIGFyZyBpcyBnb2luZyBvbiB0aGUgc3RhY2ssIGl0IG11c3QgYmUKLQkgICAgICAgOC1ieXRlLWFsaWduZWQuICAqLwotCSAgICBpZiAoZnBhcmdfY291bnQgPiBOVU1fRlBSX0FSR19SRUdJU1RFUlMKLQkJJiYgaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUwotCQkmJiBpbnRhcmdfY291bnQgJSAyICE9IDApCi0JICAgICAgaW50YXJnX2NvdW50Kys7Ci0JICAgIGJyZWFrOwotI2VuZGlmCi0JICBjYXNlIEZGSV9UWVBFX1VJTlQxMjg6Ci0JCS8qCi0JCSAqIEEgbG9uZyBkb3VibGUgaW4gRkZJX0xJTlVYX1NPRlRfRkxPQVQgY2FuIHVzZSBvbmx5IGEgc2V0Ci0JCSAqIG9mIGZvdXIgY29uc2VjdXRpdmUgZ3Bycy4gSWYgd2UgZG8gbm90IGhhdmUgZW5vdWdoLCB3ZQotCQkgKiBoYXZlIHRvIGFkanVzdCB0aGUgaW50YXJnX2NvdW50IHZhbHVlLgotCQkgKi8KLQkJaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgLSAzCi0JCQkJJiYgaW50YXJnX2NvdW50IDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTKQotCQkJaW50YXJnX2NvdW50ID0gTlVNX0dQUl9BUkdfUkVHSVNURVJTOwotCQlpbnRhcmdfY291bnQgKz0gNDsKLQkJYnJlYWs7Ci0KLQkgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgotCSAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6Ci0JICAgIC8qICdsb25nIGxvbmcnIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGFzIHR3byB3b3JkcywgYnV0Ci0JICAgICAgIGVpdGhlciBib3RoIHdvcmRzIG11c3QgZml0IGluIHJlZ2lzdGVycyBvciBib3RoIGdvCi0JICAgICAgIG9uIHRoZSBzdGFjay4gIElmIHRoZXkgZ28gb24gdGhlIHN0YWNrLCB0aGV5IG11c3QKLQkgICAgICAgYmUgOC1ieXRlLWFsaWduZWQuCi0KLQkgICAgICAgQWxzbywgb25seSBjZXJ0YWluIHJlZ2lzdGVyIHBhaXJzIGNhbiBiZSB1c2VkIGZvcgotCSAgICAgICBwYXNzaW5nIGxvbmcgbG9uZyBpbnQgLS0gc3BlY2lmaWNhbGx5IChyMyxyNCksIChyNSxyNiksCi0JICAgICAgIChyNyxyOCksIChyOSxyMTApLgotCSAgICAqLwotCSAgICBpZiAoaW50YXJnX2NvdW50ID09IE5VTV9HUFJfQVJHX1JFR0lTVEVSUy0xCi0JCXx8IGludGFyZ19jb3VudCAlIDIgIT0gMCkKLQkgICAgICBpbnRhcmdfY291bnQrKzsKLQkgICAgaW50YXJnX2NvdW50ICs9IDI7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKLQkgICAgLyogV2UgbXVzdCBhbGxvY2F0ZSBzcGFjZSBmb3IgYSBjb3B5IG9mIHRoZXNlIHRvIGVuZm9yY2UKLQkgICAgICAgcGFzcy1ieS12YWx1ZS4gIFBhZCB0aGUgc3BhY2UgdXAgdG8gYSBtdWx0aXBsZSBvZiAxNgotCSAgICAgICBieXRlcyAodGhlIG1heGltdW0gYWxpZ25tZW50IHJlcXVpcmVkIGZvciBhbnl0aGluZyB1bmRlcgotCSAgICAgICB0aGUgU1lTViBBQkkpLiAgKi8KLQkgICAgc3RydWN0X2NvcHlfc2l6ZSArPSAoKCpwdHIpLT5zaXplICsgMTUpICYgfjB4RjsKLQkgICAgLyogRmFsbCB0aHJvdWdoIChhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHBvaW50ZXIpLiAgKi8KLQotCSAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgotCSAgY2FzZSBGRklfVFlQRV9JTlQ6Ci0JICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKLQkgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgotCSAgY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKLQkgIGNhc2UgRkZJX1RZUEVfVUlOVDg6Ci0JICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgotCSAgICAvKiBFdmVyeXRoaW5nIGVsc2UgaXMgcGFzc2VkIGFzIGEgNC1ieXRlIHdvcmQgaW4gYSBHUFIsIGVpdGhlcgotCSAgICAgICB0aGUgb2JqZWN0IGl0c2VsZiBvciBhIHBvaW50ZXIgdG8gaXQuICAqLwotCSAgICBpbnRhcmdfY291bnQrKzsKLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgotCQlGRklfQVNTRVJUICgwKTsKLQkgIH0KLSAgICAgIH0KLSAgZWxzZQotICAgIGZvciAocHRyID0gY2lmLT5hcmdfdHlwZXMsIGkgPSBjaWYtPm5hcmdzOyBpID4gMDsgaS0tLCBwdHIrKykKLSAgICAgIHsKLQlzd2l0Y2ggKCgqcHRyKS0+dHlwZSkKLQkgIHsKLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCSAgY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgotCSAgICBpZiAoY2lmLT5hYmkgPT0gRkZJX0xJTlVYX1NPRlRfRkxPQVQpCi0JICAgICAgaW50YXJnX2NvdW50ICs9IDQ7Ci0JICAgIGVsc2UKLQkgICAgICB7Ci0JCWZwYXJnX2NvdW50ICs9IDI7Ci0JCWludGFyZ19jb3VudCArPSAyOwotCSAgICAgIH0KLQkgICAgYnJlYWs7Ci0jZW5kaWYKLQkgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6Ci0JICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKLQkgICAgZnBhcmdfY291bnQrKzsKLQkgICAgaW50YXJnX2NvdW50Kys7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKLQkgICAgaW50YXJnX2NvdW50ICs9ICgoKnB0ciktPnNpemUgKyA3KSAvIDg7Ci0JICAgIGJyZWFrOwotCi0JICBjYXNlIEZGSV9UWVBFX1BPSU5URVI6Ci0JICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKLQkgIGNhc2UgRkZJX1RZUEVfU0lOVDY0OgotCSAgY2FzZSBGRklfVFlQRV9JTlQ6Ci0JICBjYXNlIEZGSV9UWVBFX1VJTlQzMjoKLQkgIGNhc2UgRkZJX1RZUEVfU0lOVDMyOgotCSAgY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKLQkgIGNhc2UgRkZJX1RZUEVfVUlOVDg6Ci0JICBjYXNlIEZGSV9UWVBFX1NJTlQ4OgotCSAgICAvKiBFdmVyeXRoaW5nIGVsc2UgaXMgcGFzc2VkIGFzIGEgOC1ieXRlIHdvcmQgaW4gYSBHUFIsIGVpdGhlcgotCSAgICAgICB0aGUgb2JqZWN0IGl0c2VsZiBvciBhIHBvaW50ZXIgdG8gaXQuICAqLwotCSAgICBpbnRhcmdfY291bnQrKzsKLQkgICAgYnJlYWs7Ci0JICBkZWZhdWx0OgotCQlGRklfQVNTRVJUICgwKTsKLQkgIH0KLSAgICAgIH0KLQotI2lmbmRlZiBfX05PX0ZQUlNfXwotICBpZiAoZnBhcmdfY291bnQgIT0gMCkKLSAgICBmbGFncyB8PSBGTEFHX0ZQX0FSR1VNRU5UUzsKLSNlbmRpZgotICBpZiAoaW50YXJnX2NvdW50ID4gNCkKLSAgICBmbGFncyB8PSBGTEFHXzRfR1BSX0FSR1VNRU5UUzsKLSAgaWYgKHN0cnVjdF9jb3B5X3NpemUgIT0gMCkKLSAgICBmbGFncyB8PSBGTEFHX0FSR19ORUVEU19DT1BZOwotCi0gIGlmIChjaWYtPmFiaSAhPSBGRklfTElOVVg2NCkKLSAgICB7Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0gICAgICAvKiBTcGFjZSBmb3IgdGhlIEZQUiByZWdpc3RlcnMsIGlmIG5lZWRlZC4gICovCi0gICAgICBpZiAoZnBhcmdfY291bnQgIT0gMCkKLQlieXRlcyArPSBOVU1fRlBSX0FSR19SRUdJU1RFUlMgKiBzaXplb2YgKGRvdWJsZSk7Ci0jZW5kaWYKLQotICAgICAgLyogU3RhY2sgc3BhY2UuICAqLwotICAgICAgaWYgKGludGFyZ19jb3VudCA+IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKLQlieXRlcyArPSAoaW50YXJnX2NvdW50IC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTKSAqIHNpemVvZiAoaW50KTsKLSNpZm5kZWYgX19OT19GUFJTX18KLSAgICAgIGlmIChmcGFyZ19jb3VudCA+IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKLQlieXRlcyArPSAoZnBhcmdfY291bnQgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpICogc2l6ZW9mIChkb3VibGUpOwotI2VuZGlmCi0gICAgfQotICBlbHNlCi0gICAgewotI2lmbmRlZiBfX05PX0ZQUlNfXwotICAgICAgLyogU3BhY2UgZm9yIHRoZSBGUFIgcmVnaXN0ZXJzLCBpZiBuZWVkZWQuICAqLwotICAgICAgaWYgKGZwYXJnX2NvdW50ICE9IDApCi0JYnl0ZXMgKz0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgKiBzaXplb2YgKGRvdWJsZSk7Ci0jZW5kaWYKLQotICAgICAgLyogU3RhY2sgc3BhY2UuICAqLwotICAgICAgaWYgKGludGFyZ19jb3VudCA+IE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0KQotCWJ5dGVzICs9IChpbnRhcmdfY291bnQgLSBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCkgKiBzaXplb2YgKGxvbmcpOwotICAgIH0KLQotICAvKiBUaGUgc3RhY2sgc3BhY2UgYWxsb2NhdGVkIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgMTYgYnl0ZXMuICAqLwotICBieXRlcyA9IChieXRlcyArIDE1KSAmIH4weEY7Ci0KLSAgLyogQWRkIGluIHRoZSBzcGFjZSBmb3IgdGhlIGNvcGllZCBzdHJ1Y3R1cmVzLiAgKi8KLSAgYnl0ZXMgKz0gc3RydWN0X2NvcHlfc2l6ZTsKLQotICBjaWYtPmZsYWdzID0gZmxhZ3M7Ci0gIGNpZi0+Ynl0ZXMgPSBieXRlczsKLQotICByZXR1cm4gRkZJX09LOwogfQogCi1leHRlcm4gdm9pZCBmZmlfY2FsbF9TWVNWKGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkICosCi0JCQkgIHZvaWQgKCpmbikodm9pZCkpOwotZXh0ZXJuIHZvaWQgRkZJX0hJRERFTiBmZmlfY2FsbF9MSU5VWDY0KGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCBsb25nLAotCQkJCQl1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosCi0JCQkJCXZvaWQgKCpmbikodm9pZCkpOworZmZpX3N0YXR1cyBGRklfSElEREVOCitmZmlfcHJlcF9jaWZfbWFjaGRlcF92YXIgKGZmaV9jaWYgKmNpZiwKKwkJCSAgdW5zaWduZWQgaW50IG5maXhlZGFyZ3MgTUFZQkVfVU5VU0VELAorCQkJICB1bnNpZ25lZCBpbnQgbnRvdGFsYXJncyBNQVlCRV9VTlVTRUQpCit7CisjaWZkZWYgUE9XRVJQQzY0CisgIHJldHVybiBmZmlfcHJlcF9jaWZfbGludXg2NF92YXIgKGNpZiwgbmZpeGVkYXJncywgbnRvdGFsYXJncyk7CisjZWxzZQorICByZXR1cm4gZmZpX3ByZXBfY2lmX3N5c3YgKGNpZik7CisjZW5kaWYKK30KIAogdm9pZAogZmZpX2NhbGwoZmZpX2NpZiAqY2lmLCB2b2lkICgqZm4pKHZvaWQpLCB2b2lkICpydmFsdWUsIHZvaWQgKiphdmFsdWUpCiB7Ci0gIC8qCi0gICAqIFRoZSBmaW5hbCBTWVNWIEFCSSBzYXlzIHRoYXQgc3RydWN0dXJlcyBzbWFsbGVyIG9yIGVxdWFsIDggYnl0ZXMKLSAgICogYXJlIHJldHVybmVkIGluIHIzL3I0LiBUaGUgRkZJX0dDQ19TWVNWIEFCSSBpbnN0ZWFkIHJldHVybnMgdGhlbQotICAgKiBpbiBtZW1vcnkuCi0gICAqCi0gICAqIEp1c3QgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGZvciB0aGUgYXNzZW1ibHkgY29kZSwgd2Ugd2lsbCBhbHdheXMKLSAgICogYm91bmNlLWJ1ZmZlciBzdHJ1Y3QgcmV0dXJuIHZhbHVlcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gOCBieXRlcy4KLSAgICogVGhpcyBhbGxvd3MgdGhlIEFTTSB0byBoYW5kbGUgU1lTViBzbWFsbCBzdHJ1Y3R1cmVzIGJ5IGRpcmVjdGx5Ci0gICAqIHdyaXRpbmcgcjMgYW5kIHI0IHRvIG1lbW9yeSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHN0cnVjdCBzaXplLgotICAgKi8KLSAgdW5zaWduZWQgaW50IHNtc3RfYnVmZmVyWzJdOworICAvKiBUaGUgZmluYWwgU1lTViBBQkkgc2F5cyB0aGF0IHN0cnVjdHVyZXMgc21hbGxlciBvciBlcXVhbCA4IGJ5dGVzCisgICAgIGFyZSByZXR1cm5lZCBpbiByMy9yNC4gIEEgZHJhZnQgQUJJIHVzZWQgYnkgbGludXggaW5zdGVhZCByZXR1cm5zCisgICAgIHRoZW0gaW4gbWVtb3J5LgorCisgICAgIFdlIGJvdW5jZS1idWZmZXIgU1lTViBzbWFsbCBzdHJ1Y3QgcmV0dXJuIHZhbHVlcyBzbyB0aGF0IHN5c3YuUworICAgICBjYW4gd3JpdGUgcjMgYW5kIHI0IHRvIG1lbW9yeSB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHN0cnVjdCBzaXplLgorICAgCisgICAgIEZvciBFTEZ2MiBBQkksIHVzZSBhIGJvdW5jZSBidWZmZXIgZm9yIGhvbW9nZW5lb3VzIHN0cnVjdHMgdG9vLAorICAgICBmb3Igc2ltaWxhciByZWFzb25zLiAgKi8KKyAgdW5zaWduZWQgbG9uZyBzbXN0X2J1ZmZlcls4XTsKICAgZXh0ZW5kZWRfY2lmIGVjaWY7Ci0gIHVuc2lnbmVkIGludCByc2l6ZSA9IDA7CiAKICAgZWNpZi5jaWYgPSBjaWY7CiAgIGVjaWYuYXZhbHVlID0gYXZhbHVlOwogCi0gIC8qIEVuc3VyZSB0aGF0IHdlIGhhdmUgYSB2YWxpZCBzdHJ1Y3QgcmV0dXJuIHZhbHVlICovCiAgIGVjaWYucnZhbHVlID0gcnZhbHVlOwotICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpIHsKLSAgICByc2l6ZSA9IGNpZi0+cnR5cGUtPnNpemU7Ci0gICAgaWYgKHJzaXplIDw9IDgpCi0gICAgICBlY2lmLnJ2YWx1ZSA9IHNtc3RfYnVmZmVyOwotICAgIGVsc2UgaWYgKCFydmFsdWUpCi0gICAgICBlY2lmLnJ2YWx1ZSA9IGFsbG9jYShyc2l6ZSk7Ci0gIH0KKyAgaWYgKChjaWYtPmZsYWdzICYgRkxBR19SRVRVUk5TX1NNU1QpICE9IDApCisgICAgZWNpZi5ydmFsdWUgPSBzbXN0X2J1ZmZlcjsKKyAgLyogRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIHZhbGlkIHN0cnVjdCByZXR1cm4gdmFsdWUuCisgICAgIEZJWE1FOiBJc24ndCB0aGlzIGp1c3QgcGFwZXJpbmcgb3ZlciBhIHVzZXIgcHJvYmxlbT8gICovCisgIGVsc2UgaWYgKCFydmFsdWUgJiYgY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QpCisgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EgKGNpZi0+cnR5cGUtPnNpemUpOwogCi0gIHN3aXRjaCAoY2lmLT5hYmkpCi0gICAgewotI2lmbmRlZiBQT1dFUlBDNjQKLSMgaWZuZGVmIF9fTk9fRlBSU19fCi0gICAgY2FzZSBGRklfU1lTVjoKLSAgICBjYXNlIEZGSV9HQ0NfU1lTVjoKLSAgICBjYXNlIEZGSV9MSU5VWDoKLSMgZW5kaWYKLSAgICBjYXNlIEZGSV9MSU5VWF9TT0ZUX0ZMT0FUOgotICAgICAgZmZpX2NhbGxfU1lTViAoJmVjaWYsIC1jaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOwotICAgICAgYnJlYWs7CisjaWZkZWYgUE9XRVJQQzY0CisgIGZmaV9jYWxsX0xJTlVYNjQgKCZlY2lmLCAtKGxvbmcpIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CiAjZWxzZQotICAgIGNhc2UgRkZJX0xJTlVYNjQ6Ci0gICAgICBmZmlfY2FsbF9MSU5VWDY0ICgmZWNpZiwgLShsb25nKSBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLCBlY2lmLnJ2YWx1ZSwgZm4pOwotICAgICAgYnJlYWs7CisgIGZmaV9jYWxsX1NZU1YgKCZlY2lmLCAtY2lmLT5ieXRlcywgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKICNlbmRpZgotICAgIGRlZmF1bHQ6Ci0gICAgICBGRklfQVNTRVJUICgwKTsKLSAgICAgIGJyZWFrOwotICAgIH0KIAogICAvKiBDaGVjayBmb3IgYSBib3VuY2UtYnVmZmVyZWQgcmV0dXJuIHZhbHVlICovCiAgIGlmIChydmFsdWUgJiYgZWNpZi5ydmFsdWUgPT0gc21zdF9idWZmZXIpCi0gICAgbWVtY3B5KHJ2YWx1ZSwgc21zdF9idWZmZXIsIHJzaXplKTsKLX0KLQotCi0jaWZuZGVmIFBPV0VSUEM2NAotI2RlZmluZSBNSU5fQ0FDSEVfTElORV9TSVpFIDgKLQotc3RhdGljIHZvaWQKLWZsdXNoX2ljYWNoZSAoY2hhciAqd3JhZGRyLCBjaGFyICp4YWRkciwgaW50IHNpemUpCi17Ci0gIGludCBpOwotICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSArPSBNSU5fQ0FDSEVfTElORV9TSVpFKQotICAgIF9fYXNtX18gdm9sYXRpbGUgKCJpY2JpIDAsJTA7IiAiZGNiZiAwLCUxOyIKLQkJICAgICAgOiA6ICJyIiAoeGFkZHIgKyBpKSwgInIiICh3cmFkZHIgKyBpKSA6ICJtZW1vcnkiKTsKLSAgX19hc21fXyB2b2xhdGlsZSAoImljYmkgMCwlMDsiICJkY2JmIDAsJTE7IiAic3luYzsiICJpc3luYzsiCi0JCSAgICA6IDogInIiKHhhZGRyICsgc2l6ZSAtIDEpLCAiciIod3JhZGRyICsgc2l6ZSAtIDEpCi0JCSAgICA6ICJtZW1vcnkiKTsKLX0KKyAgICB7CisgICAgICB1bnNpZ25lZCBpbnQgcnNpemUgPSBjaWYtPnJ0eXBlLT5zaXplOworI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXworICAgICAgLyogVGhlIFNZU1YgQUJJIHJldHVybnMgYSBzdHJ1Y3R1cmUgb2YgdXAgdG8gNCBieXRlcyBpbiBzaXplCisJIGxlZnQtcGFkZGVkIGluIHIzLiAgKi8KKyMgaWZuZGVmIFBPV0VSUEM2NAorICAgICAgaWYgKHJzaXplIDw9IDQpCisJbWVtY3B5IChydmFsdWUsIChjaGFyICopIHNtc3RfYnVmZmVyICsgNCAtIHJzaXplLCByc2l6ZSk7CisgICAgICBlbHNlCisjIGVuZGlmCisJLyogVGhlIFNZU1YgQUJJIHJldHVybnMgYSBzdHJ1Y3R1cmUgb2YgdXAgdG8gOCBieXRlcyBpbiBzaXplCisJICAgbGVmdC1wYWRkZWQgaW4gcjMvcjQsIGFuZCB0aGUgRUxGdjIgQUJJIHNpbWlsYXJseSByZXR1cm5zIGEKKwkgICBzdHJ1Y3R1cmUgb2YgdXAgdG8gOCBieXRlcyBpbiBzaXplIGxlZnQtcGFkZGVkIGluIHIzLiAgKi8KKwlpZiAocnNpemUgPD0gOCkKKwkgIG1lbWNweSAocnZhbHVlLCAoY2hhciAqKSBzbXN0X2J1ZmZlciArIDggLSByc2l6ZSwgcnNpemUpOworCWVsc2UKICNlbmRpZgorCSAgbWVtY3B5IChydmFsdWUsIHNtc3RfYnVmZmVyLCByc2l6ZSk7CisgICAgfQorfQorCiAKIGZmaV9zdGF0dXMKIGZmaV9wcmVwX2Nsb3N1cmVfbG9jIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwKQEAgLTEwMjIsNDgwICsxMzQsOCBAQAogCQkgICAgICB2b2lkICpjb2RlbG9jKQogewogI2lmZGVmIFBPV0VSUEM2NAotICB2b2lkICoqdHJhbXAgPSAodm9pZCAqKikgJmNsb3N1cmUtPnRyYW1wWzBdOwotCi0gIGlmIChjaWYtPmFiaSAhPSBGRklfTElOVVg2NCkKLSAgICByZXR1cm4gRkZJX0JBRF9BQkk7Ci0gIC8qIENvcHkgZnVuY3Rpb24gYWRkcmVzcyBhbmQgVE9DIGZyb20gZmZpX2Nsb3N1cmVfTElOVVg2NC4gICovCi0gIG1lbWNweSAodHJhbXAsIChjaGFyICopIGZmaV9jbG9zdXJlX0xJTlVYNjQsIDE2KTsKLSAgdHJhbXBbMl0gPSBjb2RlbG9jOworICByZXR1cm4gZmZpX3ByZXBfY2xvc3VyZV9sb2NfbGludXg2NCAoY2xvc3VyZSwgY2lmLCBmdW4sIHVzZXJfZGF0YSwgY29kZWxvYyk7CiAjZWxzZQotICB1bnNpZ25lZCBpbnQgKnRyYW1wOwotCi0gIGlmICghIChjaWYtPmFiaSA9PSBGRklfR0NDX1NZU1YgCi0JIHx8IGNpZi0+YWJpID09IEZGSV9TWVNWCi0JIHx8IGNpZi0+YWJpID09IEZGSV9MSU5VWAotCSB8fCBjaWYtPmFiaSA9PSBGRklfTElOVVhfU09GVF9GTE9BVCkpCi0gICAgcmV0dXJuIEZGSV9CQURfQUJJOwotCi0gIHRyYW1wID0gKHVuc2lnbmVkIGludCAqKSAmY2xvc3VyZS0+dHJhbXBbMF07Ci0gIHRyYW1wWzBdID0gMHg3YzA4MDJhNjsgIC8qICAgbWZsciAgICByMCAqLwotICB0cmFtcFsxXSA9IDB4NDgwMDAwMGQ7ICAvKiAgIGJsICAgICAgMTAgPHRyYW1wb2xpbmVfaW5pdGlhbCsweDEwPiAqLwotICB0cmFtcFs0XSA9IDB4N2Q2ODAyYTY7ICAvKiAgIG1mbHIgICAgcjExICovCi0gIHRyYW1wWzVdID0gMHg3YzA4MDNhNjsgIC8qICAgbXRsciAgICByMCAqLwotICB0cmFtcFs2XSA9IDB4ODAwYjAwMDA7ICAvKiAgIGx3eiAgICAgcjAsMChyMTEpICovCi0gIHRyYW1wWzddID0gMHg4MTZiMDAwNDsgIC8qICAgbHd6ICAgICByMTEsNChyMTEpICovCi0gIHRyYW1wWzhdID0gMHg3YzA5MDNhNjsgIC8qICAgbXRjdHIgICByMCAqLwotICB0cmFtcFs5XSA9IDB4NGU4MDA0MjA7ICAvKiAgIGJjdHIgKi8KLSAgKih2b2lkICoqKSAmdHJhbXBbMl0gPSAodm9pZCAqKSBmZmlfY2xvc3VyZV9TWVNWOyAvKiBmdW5jdGlvbiAqLwotICAqKHZvaWQgKiopICZ0cmFtcFszXSA9IGNvZGVsb2M7ICAgICAgICAgICAgICAgICAgIC8qIGNvbnRleHQgKi8KLQotICAvKiBGbHVzaCB0aGUgaWNhY2hlLiAgKi8KLSAgZmx1c2hfaWNhY2hlICgoY2hhciAqKXRyYW1wLCAoY2hhciAqKWNvZGVsb2MsIEZGSV9UUkFNUE9MSU5FX1NJWkUpOworICByZXR1cm4gZmZpX3ByZXBfY2xvc3VyZV9sb2Nfc3lzdiAoY2xvc3VyZSwgY2lmLCBmdW4sIHVzZXJfZGF0YSwgY29kZWxvYyk7CiAjZW5kaWYKLQotICBjbG9zdXJlLT5jaWYgPSBjaWY7Ci0gIGNsb3N1cmUtPmZ1biA9IGZ1bjsKLSAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwotCi0gIHJldHVybiBGRklfT0s7Ci19Ci0KLXR5cGVkZWYgdW5pb24KLXsKLSAgZmxvYXQgZjsKLSAgZG91YmxlIGQ7Ci19IGZmaV9kYmxmbDsKLQotaW50IGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWIChmZmlfY2xvc3VyZSAqLCB2b2lkICosIHVuc2lnbmVkIGxvbmcgKiwKLQkJCSAgICAgZmZpX2RibGZsICosIHVuc2lnbmVkIGxvbmcgKik7Ci0KLS8qIEJhc2ljYWxseSB0aGUgdHJhbXBvbGluZSBpbnZva2VzIGZmaV9jbG9zdXJlX1NZU1YsIGFuZCBvbgotICogZW50cnksIHIxMSBob2xkcyB0aGUgYWRkcmVzcyBvZiB0aGUgY2xvc3VyZS4KLSAqIEFmdGVyIHN0b3JpbmcgdGhlIHJlZ2lzdGVycyB0aGF0IGNvdWxkIHBvc3NpYmx5IGNvbnRhaW4KLSAqIHBhcmFtZXRlcnMgdG8gYmUgcGFzc2VkIGludG8gdGhlIHN0YWNrIGZyYW1lIGFuZCBzZXR0aW5nCi0gKiB1cCBzcGFjZSBmb3IgYSByZXR1cm4gdmFsdWUsIGZmaV9jbG9zdXJlX1NZU1YgaW52b2tlcyB0aGUKLSAqIGZvbGxvd2luZyBoZWxwZXIgZnVuY3Rpb24gdG8gZG8gbW9zdCBvZiB0aGUgd29yawotICovCi0KLWludAotZmZpX2Nsb3N1cmVfaGVscGVyX1NZU1YgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICpydmFsdWUsCi0JCQkgdW5zaWduZWQgbG9uZyAqcGdyLCBmZmlfZGJsZmwgKnBmciwKLQkJCSB1bnNpZ25lZCBsb25nICpwc3QpCi17Ci0gIC8qIHJ2YWx1ZSBpcyB0aGUgcG9pbnRlciB0byBzcGFjZSBmb3IgcmV0dXJuIHZhbHVlIGluIGNsb3N1cmUgYXNzZW1ibHkgKi8KLSAgLyogcGdyIGlzIHRoZSBwb2ludGVyIHRvIHdoZXJlIHIzLXIxMCBhcmUgc3RvcmVkIGluIGZmaV9jbG9zdXJlX1NZU1YgKi8KLSAgLyogcGZyIGlzIHRoZSBwb2ludGVyIHRvIHdoZXJlIGYxLWY4IGFyZSBzdG9yZWQgaW4gZmZpX2Nsb3N1cmVfU1lTViAgKi8KLSAgLyogcHN0IGlzIHRoZSBwb2ludGVyIHRvIG91dGdvaW5nIHBhcmFtZXRlciBzdGFjayBpbiBvcmlnaW5hbCBjYWxsZXIgKi8KLQotICB2b2lkICoqICAgICAgICAgIGF2YWx1ZTsKLSAgZmZpX3R5cGUgKiogICAgICBhcmdfdHlwZXM7Ci0gIGxvbmcgICAgICAgICAgICAgaSwgYXZuOwotI2lmbmRlZiBfX05PX0ZQUlNfXwotICBsb25nICAgICAgICAgICAgIG5mID0gMDsgICAvKiBudW1iZXIgb2YgZmxvYXRpbmcgcmVnaXN0ZXJzIGFscmVhZHkgdXNlZCAqLwotI2VuZGlmCi0gIGxvbmcgICAgICAgICAgICAgbmcgPSAwOyAgIC8qIG51bWJlciBvZiBnZW5lcmFsIHJlZ2lzdGVycyBhbHJlYWR5IHVzZWQgKi8KLQotICBmZmlfY2lmICpjaWYgPSBjbG9zdXJlLT5jaWY7Ci0gIHVuc2lnbmVkICAgICAgIHNpemUgICAgID0gY2lmLT5ydHlwZS0+c2l6ZTsKLSAgdW5zaWduZWQgc2hvcnQgcnR5cGVudW0gPSBjaWYtPnJ0eXBlLT50eXBlOwotCi0gIGF2YWx1ZSA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCAqKSk7Ci0KLSAgLyogRmlyc3QgdHJhbnNsYXRlIGZvciBzb2Z0ZmxvYXQvbm9ubGludXggKi8KLSAgaWYgKGNpZi0+YWJpID09IEZGSV9MSU5VWF9TT0ZUX0ZMT0FUKSB7Ci0JaWYgKHJ0eXBlbnVtID09IEZGSV9UWVBFX0ZMT0FUKQotCQlydHlwZW51bSA9IEZGSV9UWVBFX1VJTlQzMjsKLQlpZiAocnR5cGVudW0gPT0gRkZJX1RZUEVfRE9VQkxFKQotCQlydHlwZW51bSA9IEZGSV9UWVBFX1VJTlQ2NDsKLQlpZiAocnR5cGVudW0gPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJcnR5cGVudW0gPSBGRklfVFlQRV9VSU5UMTI4OwotICB9IGVsc2UgaWYgKGNpZi0+YWJpICE9IEZGSV9MSU5VWCAmJiBjaWYtPmFiaSAhPSBGRklfTElOVVg2NCkgewotI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCi0JaWYgKHJ0eXBlbnVtID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCXJ0eXBlbnVtID0gRkZJX1RZUEVfU1RSVUNUOwotI2VuZGlmCi0gIH0KLQotCi0gIC8qIENvcHkgdGhlIGNhbGxlcidzIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUgYWRkcmVzcyBzbyB0aGF0IHRoZSBjbG9zdXJlCi0gICAgIHJldHVybnMgdGhlIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGNhbGxlci4KLSAgICAgRm9yIEZGSV9TWVNWIHRoZSByZXN1bHQgaXMgcGFzc2VkIGluIHIzL3I0IGlmIHRoZSBzdHJ1Y3Qgc2l6ZSBpcyBsZXNzCi0gICAgIG9yIGVxdWFsIDggYnl0ZXMuICAqLwotICBpZiAocnR5cGVudW0gPT0gRkZJX1RZUEVfU1RSVUNUICYmICgoY2lmLT5hYmkgIT0gRkZJX1NZU1YpIHx8IChzaXplID4gOCkpKSB7Ci0gICAgICBydmFsdWUgPSAodm9pZCAqKSAqcGdyOwotICAgICAgbmcrKzsKLSAgICAgIHBncisrOwotICAgIH0KLQotICBpID0gMDsKLSAgYXZuID0gY2lmLT5uYXJnczsKLSAgYXJnX3R5cGVzID0gY2lmLT5hcmdfdHlwZXM7Ci0KLSAgLyogR3JhYiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBhcmd1bWVudHMgZnJvbSB0aGUgc3RhY2sgZnJhbWUuICAqLwotICB3aGlsZSAoaSA8IGF2bikgewotICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZW51bSA9IGFyZ190eXBlc1tpXS0+dHlwZTsKLQotICAgICAgLyogV2UgbWF5IG5lZWQgdG8gaGFuZGxlIHNvbWUgdmFsdWVzIGRlcGVuZGluZyBvbiBBQkkgKi8KLSAgICAgIGlmIChjaWYtPmFiaSA9PSBGRklfTElOVVhfU09GVF9GTE9BVCkgewotCQlpZiAodHlwZW51bSA9PSBGRklfVFlQRV9GTE9BVCkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9VSU5UMzI7Ci0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0RPVUJMRSkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9VSU5UNjQ7Ci0JCWlmICh0eXBlbnVtID09IEZGSV9UWVBFX0xPTkdET1VCTEUpCi0JCQl0eXBlbnVtID0gRkZJX1RZUEVfVUlOVDEyODsKLSAgICAgIH0gZWxzZSBpZiAoY2lmLT5hYmkgIT0gRkZJX0xJTlVYICYmIGNpZi0+YWJpICE9IEZGSV9MSU5VWDY0KSB7Ci0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQkJaWYgKHR5cGVudW0gPT0gRkZJX1RZUEVfTE9OR0RPVUJMRSkKLQkJCXR5cGVudW0gPSBGRklfVFlQRV9TVFJVQ1Q7Ci0jZW5kaWYKLSAgICAgIH0KLQotICAgICAgc3dpdGNoICh0eXBlbnVtKSB7Ci0jaWZuZGVmIF9fTk9fRlBSU19fCi0JY2FzZSBGRklfVFlQRV9GTE9BVDoKLQkgIC8qIHVuZm9ydHVuYXRlbHkgZmxvYXQgdmFsdWVzIGFyZSBzdG9yZWQgYXMgZG91YmxlcwotCSAgICogaW4gdGhlIGZmaV9jbG9zdXJlX1NZU1YgY29kZSAoc2luY2Ugd2UgZG9uJ3QgY2hlY2sKLQkgICAqIHRoZSB0eXBlIGluIHRoYXQgcm91dGluZSkuCi0JICAgKi8KLQotCSAgLyogdGhlcmUgYXJlIDggNjRiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0KLQkgIGlmIChuZiA8IDgpCi0JICAgIHsKLQkgICAgICBkb3VibGUgdGVtcCA9IHBmci0+ZDsKLQkgICAgICBwZnItPmYgPSAoZmxvYXQpIHRlbXA7Ci0JICAgICAgYXZhbHVlW2ldID0gcGZyOwotCSAgICAgIG5mKys7Ci0JICAgICAgcGZyKys7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIC8qIEZJWE1FPyBoZXJlIHdlIGFyZSByZWFsbHkgY2hhbmdpbmcgdGhlIHZhbHVlcwotCSAgICAgICAqIHN0b3JlZCBpbiB0aGUgb3JpZ2luYWwgY2FsbGluZyByb3V0aW5lcyBvdXRnb2luZwotCSAgICAgICAqIHBhcmFtZXRlciBzdGFjay4gIFRoaXMgaXMgcHJvYmFibHkgYSByZWFsbHkKLQkgICAgICAgKiBuYXVnaHR5IHRoaW5nIHRvIGRvIGJ1dC4uLgotCSAgICAgICAqLwotCSAgICAgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgICAgICBwc3QgKz0gMTsKLQkgICAgfQotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX0RPVUJMRToKLQkgIC8qIE9uIHRoZSBvdXRnb2luZyBzdGFjayBhbGwgdmFsdWVzIGFyZSBhbGlnbmVkIHRvIDggKi8KLQkgIC8qIHRoZXJlIGFyZSA4IDY0Yml0IGZsb2F0aW5nIHBvaW50IHJlZ2lzdGVycyAqLwotCi0JICBpZiAobmYgPCA4KQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gcGZyOwotCSAgICAgIG5mKys7Ci0JICAgICAgcGZyKys7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGlmICgoKGxvbmcpIHBzdCkgJiA0KQotCQlwc3QrKzsKLQkgICAgICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICAgICAgcHN0ICs9IDI7Ci0JICAgIH0KLQkgIGJyZWFrOwotCi0jaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKLQljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6Ci0JICBpZiAobmYgPCA3KQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gcGZyOwotCSAgICAgIHBmciArPSAyOwotCSAgICAgIG5mICs9IDI7Ci0JICAgIH0KLQkgIGVsc2UKLQkgICAgewotCSAgICAgIGlmICgoKGxvbmcpIHBzdCkgJiA0KQotCQlwc3QrKzsKLQkgICAgICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICAgICAgcHN0ICs9IDQ7Ci0JICAgICAgbmYgPSA4OwotCSAgICB9Ci0JICBicmVhazsKLSNlbmRpZgotI2VuZGlmIC8qIGhhdmUgRlBSUyAqLwotCi0JY2FzZSBGRklfVFlQRV9VSU5UMTI4OgotCQkvKgotCQkgKiBUZXN0IGlmIGZvciB0aGUgd2hvbGUgbG9uZyBkb3VibGUsIDQgZ3BycyBhcmUgYXZhaWxhYmxlLgotCQkgKiBvdGhlcndpc2UgdGhlIHN0dWZmIGVuZHMgdXAgb24gdGhlIHN0YWNrLgotCQkgKi8KLQkJaWYgKG5nIDwgNSkgewotCQkJYXZhbHVlW2ldID0gcGdyOwotCQkJcGdyICs9IDQ7Ci0JCQluZyArPSA0OwotCQl9IGVsc2UgewotCQkJYXZhbHVlW2ldID0gcHN0OwotCQkJcHN0ICs9IDQ7Ci0JCQluZyA9IDgrNDsKLQkJfQotCQlicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU0lOVDg6Ci0JY2FzZSBGRklfVFlQRV9VSU5UODoKLQkgIC8qIHRoZXJlIGFyZSA4IGdwciByZWdpc3RlcnMgdXNlZCB0byBwYXNzIHZhbHVlcyAqLwotCSAgaWYgKG5nIDwgOCkKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBnciArIDM7Ci0JICAgICAgbmcrKzsKLQkgICAgICBwZ3IrKzsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgMzsKLQkgICAgICBwc3QrKzsKLQkgICAgfQotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NJTlQxNjoKLQljYXNlIEZGSV9UWVBFX1VJTlQxNjoKLQkgIC8qIHRoZXJlIGFyZSA4IGdwciByZWdpc3RlcnMgdXNlZCB0byBwYXNzIHZhbHVlcyAqLwotCSAgaWYgKG5nIDwgOCkKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBnciArIDI7Ci0JICAgICAgbmcrKzsKLQkgICAgICBwZ3IrKzsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgMjsKLQkgICAgICBwc3QrKzsKLQkgICAgfQotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NJTlQzMjoKLQljYXNlIEZGSV9UWVBFX1VJTlQzMjoKLQljYXNlIEZGSV9UWVBFX1BPSU5URVI6Ci0JICAvKiB0aGVyZSBhcmUgOCBncHIgcmVnaXN0ZXJzIHVzZWQgdG8gcGFzcyB2YWx1ZXMgKi8KLQkgIGlmIChuZyA8IDgpCi0JICAgIHsKLQkgICAgICBhdmFsdWVbaV0gPSBwZ3I7Ci0JICAgICAgbmcrKzsKLQkgICAgICBwZ3IrKzsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gcHN0OwotCSAgICAgIHBzdCsrOwotCSAgICB9Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgotCSAgLyogU3RydWN0cyBhcmUgcGFzc2VkIGJ5IHJlZmVyZW5jZS4gVGhlIGFkZHJlc3Mgd2lsbCBhcHBlYXIgaW4gYQotCSAgICAgZ3ByIGlmIGl0IGlzIG9uZSBvZiB0aGUgZmlyc3QgOCBhcmd1bWVudHMuICAqLwotCSAgaWYgKG5nIDwgOCkKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9ICh2b2lkICopICpwZ3I7Ci0JICAgICAgbmcrKzsKLQkgICAgICBwZ3IrKzsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gKHZvaWQgKikgKnBzdDsKLQkgICAgICBwc3QrKzsKLQkgICAgfQotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKLQljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKLQkgIC8qIHBhc3NpbmcgbG9uZyBsb25nIGludHMgYXJlIGNvbXBsZXgsIHRoZXkgbXVzdAotCSAgICogYmUgcGFzc2VkIGluIHN1aXRhYmxlIHJlZ2lzdGVyIHBhaXJzIHN1Y2ggYXMKLQkgICAqIChyMyxyNCkgb3IgKHI1LHI2KSBvciAocjYscjcpLCBvciAocjcscjgpIG9yIChyOSxyMTApCi0JICAgKiBhbmQgaWYgdGhlIGVudGlyZSBwYWlyIGFyZW4ndCBhdmFpbGFibGUgdGhlbiB0aGUgb3V0Z29pbmcKLQkgICAqIHBhcmFtZXRlciBzdGFjayBpcyB1c2VkIGZvciBib3RoIGJ1dCBhbiBhbGlnbm1lbnQgb2YgOAotCSAgICogbXVzdCB3aWxsIGJlIGtlcHQuICBTbyB3ZSBtdXN0IGVpdGhlciBsb29rIGluIHBncgotCSAgICogb3IgcHN0IHRvIGZpbmQgdGhlIGNvcnJlY3QgYWRkcmVzcyBmb3IgdGhpcyB0eXBlCi0JICAgKiBvZiBwYXJhbWV0ZXIuCi0JICAgKi8KLQkgIGlmIChuZyA8IDcpCi0JICAgIHsKLQkgICAgICBpZiAobmcgJiAweDAxKQotCQl7Ci0JCSAgLyogc2tpcCByNCwgcjYsIHI4IGFzIHN0YXJ0aW5nIHBvaW50cyAqLwotCQkgIG5nKys7Ci0JCSAgcGdyKys7Ci0JCX0KLQkgICAgICBhdmFsdWVbaV0gPSBwZ3I7Ci0JICAgICAgbmcgKz0gMjsKLQkgICAgICBwZ3IgKz0gMjsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgaWYgKCgobG9uZykgcHN0KSAmIDQpCi0JCXBzdCsrOwotCSAgICAgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgICAgICBwc3QgKz0gMjsKLQkgICAgICBuZyA9IDg7Ci0JICAgIH0KLQkgIGJyZWFrOwotCi0JZGVmYXVsdDoKLQkJRkZJX0FTU0VSVCAoMCk7Ci0JfQotCi0gICAgICBpKys7Ci0gICAgfQotCi0KLSAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcnZhbHVlLCBhdmFsdWUsIGNsb3N1cmUtPnVzZXJfZGF0YSk7Ci0KLSAgLyogVGVsbCBmZmlfY2xvc3VyZV9TWVNWIGhvdyB0byBwZXJmb3JtIHJldHVybiB0eXBlIHByb21vdGlvbnMuCi0gICAgIEJlY2F1c2UgdGhlIEZGSV9TWVNWIEFCSSByZXR1cm5zIHRoZSBzdHJ1Y3R1cmVzIDw9IDggYnl0ZXMgaW4gcjMvcjQKLSAgICAgd2UgaGF2ZSB0byB0ZWxsIGZmaV9jbG9zdXJlX1NZU1YgaG93IHRvIHRyZWF0IHRoZW0uIFdlIGNvbWJpbmUgdGhlIGJhc2UKLSAgICAgdHlwZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCAtIDEgIHdpdGggdGhlIHNpemUgb2YgdGhlIHN0cnVjdC4KLSAgICAgU28gYSBvbmUgYnl0ZSBzdHJ1Y3QgZ2V0cyB0aGUgcmV0dXJuIHR5cGUgMTYuIFJldHVybiB0eXBlIDEgdG8gMTUgYXJlCi0gICAgIGFscmVhZHkgdXNlZCBhbmQgd2UgbmV2ZXIgaGF2ZSBhIHN0cnVjdCB3aXRoIHNpemUgemVyby4gVGhhdCBpcyB0aGUgcmVhc29uCi0gICAgIGZvciB0aGUgc3VidHJhY3Rpb24gb2YgMS4gU2VlIHRoZSBjb21tZW50IGluIGZmaXRhcmdldC5oIGFib3V0IG9yZGVyaW5nLgotICAqLwotICBpZiAoY2lmLT5hYmkgPT0gRkZJX1NZU1YgJiYgcnR5cGVudW0gPT0gRkZJX1RZUEVfU1RSVUNUICYmIHNpemUgPD0gOCkKLSAgICByZXR1cm4gKEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUIC0gMSkgKyBzaXplOwotICByZXR1cm4gcnR5cGVudW07Ci19Ci0KLWludCBGRklfSElEREVOIGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0IChmZmlfY2xvc3VyZSAqLCB2b2lkICosCi0JCQkJCSAgIHVuc2lnbmVkIGxvbmcgKiwgZmZpX2RibGZsICopOwotCi1pbnQgRkZJX0hJRERFTgotZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICpydmFsdWUsCi0JCQkgICAgdW5zaWduZWQgbG9uZyAqcHN0LCBmZmlfZGJsZmwgKnBmcikKLXsKLSAgLyogcnZhbHVlIGlzIHRoZSBwb2ludGVyIHRvIHNwYWNlIGZvciByZXR1cm4gdmFsdWUgaW4gY2xvc3VyZSBhc3NlbWJseSAqLwotICAvKiBwc3QgaXMgdGhlIHBvaW50ZXIgdG8gcGFyYW1ldGVyIHNhdmUgYXJlYQotICAgICAocjMtcjEwIGFyZSBzdG9yZWQgaW50byBpdHMgZmlyc3QgOCBzbG90cyBieSBmZmlfY2xvc3VyZV9MSU5VWDY0KSAqLwotICAvKiBwZnIgaXMgdGhlIHBvaW50ZXIgdG8gd2hlcmUgZjEtZjEzIGFyZSBzdG9yZWQgaW4gZmZpX2Nsb3N1cmVfTElOVVg2NCAqLwotCi0gIHZvaWQgKiphdmFsdWU7Ci0gIGZmaV90eXBlICoqYXJnX3R5cGVzOwotICBsb25nIGksIGF2bjsKLSAgZmZpX2NpZiAqY2lmOwotICBmZmlfZGJsZmwgKmVuZF9wZnIgPSBwZnIgKyBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NDsKLQotICBjaWYgPSBjbG9zdXJlLT5jaWY7Ci0gIGF2YWx1ZSA9IGFsbG9jYSAoY2lmLT5uYXJncyAqIHNpemVvZiAodm9pZCAqKSk7Ci0KLSAgLyogQ29weSB0aGUgY2FsbGVyJ3Mgc3RydWN0dXJlIHJldHVybiB2YWx1ZSBhZGRyZXNzIHNvIHRoYXQgdGhlIGNsb3N1cmUKLSAgICAgcmV0dXJucyB0aGUgZGF0YSBkaXJlY3RseSB0byB0aGUgY2FsbGVyLiAgKi8KLSAgaWYgKGNpZi0+cnR5cGUtPnR5cGUgPT0gRkZJX1RZUEVfU1RSVUNUKQotICAgIHsKLSAgICAgIHJ2YWx1ZSA9ICh2b2lkICopICpwc3Q7Ci0gICAgICBwc3QrKzsKLSAgICB9Ci0KLSAgaSA9IDA7Ci0gIGF2biA9IGNpZi0+bmFyZ3M7Ci0gIGFyZ190eXBlcyA9IGNpZi0+YXJnX3R5cGVzOwotCi0gIC8qIEdyYWIgdGhlIGFkZHJlc3NlcyBvZiB0aGUgYXJndW1lbnRzIGZyb20gdGhlIHN0YWNrIGZyYW1lLiAgKi8KLSAgd2hpbGUgKGkgPCBhdm4pCi0gICAgewotICAgICAgc3dpdGNoIChhcmdfdHlwZXNbaV0tPnR5cGUpCi0JewotCWNhc2UgRkZJX1RZUEVfU0lOVDg6Ci0JY2FzZSBGRklfVFlQRV9VSU5UODoKLQkgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDc7Ci0JICBwc3QrKzsKLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TSU5UMTY6Ci0JY2FzZSBGRklfVFlQRV9VSU5UMTY6Ci0JICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyA2OwotCSAgcHN0Kys7Ci0JICBicmVhazsKLQotCWNhc2UgRkZJX1RZUEVfU0lOVDMyOgotCWNhc2UgRkZJX1RZUEVfVUlOVDMyOgotCSAgYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgNDsKLQkgIHBzdCsrOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKLQljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKLQljYXNlIEZGSV9UWVBFX1BPSU5URVI6Ci0JICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICBwc3QrKzsKLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9TVFJVQ1Q6Ci0JICAvKiBTdHJ1Y3R1cmVzIHdpdGggc2l6ZSBsZXNzIHRoYW4gZWlnaHQgYnl0ZXMgYXJlIHBhc3NlZAotCSAgICAgbGVmdC1wYWRkZWQuICAqLwotCSAgaWYgKGFyZ190eXBlc1tpXS0+c2l6ZSA8IDgpCi0JICAgIGF2YWx1ZVtpXSA9IChjaGFyICopIHBzdCArIDggLSBhcmdfdHlwZXNbaV0tPnNpemU7Ci0JICBlbHNlCi0JICAgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgIHBzdCArPSAoYXJnX3R5cGVzW2ldLT5zaXplICsgNykgLyA4OwotCSAgYnJlYWs7Ci0KLQljYXNlIEZGSV9UWVBFX0ZMT0FUOgotCSAgLyogdW5mb3J0dW5hdGVseSBmbG9hdCB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBkb3VibGVzCi0JICAgKiBpbiB0aGUgZmZpX2Nsb3N1cmVfTElOVVg2NCBjb2RlIChzaW5jZSB3ZSBkb24ndCBjaGVjawotCSAgICogdGhlIHR5cGUgaW4gdGhhdCByb3V0aW5lKS4KLQkgICAqLwotCi0JICAvKiB0aGVyZSBhcmUgMTMgNjRiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0KLQkgIGlmIChwZnIgPCBlbmRfcGZyKQotCSAgICB7Ci0JICAgICAgZG91YmxlIHRlbXAgPSBwZnItPmQ7Ci0JICAgICAgcGZyLT5mID0gKGZsb2F0KSB0ZW1wOwotCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKLQkgICAgICBwZnIrKzsKLQkgICAgfQotCSAgZWxzZQotCSAgICBhdmFsdWVbaV0gPSBwc3Q7Ci0JICBwc3QrKzsKLQkgIGJyZWFrOwotCi0JY2FzZSBGRklfVFlQRV9ET1VCTEU6Ci0JICAvKiBPbiB0aGUgb3V0Z29pbmcgc3RhY2sgYWxsIHZhbHVlcyBhcmUgYWxpZ25lZCB0byA4ICovCi0JICAvKiB0aGVyZSBhcmUgMTMgNjRiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCi0KLQkgIGlmIChwZnIgPCBlbmRfcGZyKQotCSAgICB7Ci0JICAgICAgYXZhbHVlW2ldID0gcGZyOwotCSAgICAgIHBmcisrOwotCSAgICB9Ci0JICBlbHNlCi0JICAgIGF2YWx1ZVtpXSA9IHBzdDsKLQkgIHBzdCsrOwotCSAgYnJlYWs7Ci0KLSNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQotCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKLQkgIGlmIChwZnIgKyAxIDwgZW5kX3BmcikKLQkgICAgewotCSAgICAgIGF2YWx1ZVtpXSA9IHBmcjsKLQkgICAgICBwZnIgKz0gMjsKLQkgICAgfQotCSAgZWxzZQotCSAgICB7Ci0JICAgICAgaWYgKHBmciA8IGVuZF9wZnIpCi0JCXsKLQkJICAvKiBQYXNzZWQgcGFydGx5IGluIGYxMyBhbmQgcGFydGx5IG9uIHRoZSBzdGFjay4KLQkJICAgICBNb3ZlIGl0IGFsbCB0byB0aGUgc3RhY2suICAqLwotCQkgICpwc3QgPSAqKHVuc2lnbmVkIGxvbmcgKikgcGZyOwotCQkgIHBmcisrOwotCQl9Ci0JICAgICAgYXZhbHVlW2ldID0gcHN0OwotCSAgICB9Ci0JICBwc3QgKz0gMjsKLQkgIGJyZWFrOwotI2VuZGlmCi0KLQlkZWZhdWx0OgotCSAgRkZJX0FTU0VSVCAoMCk7Ci0JfQotCi0gICAgICBpKys7Ci0gICAgfQotCi0KLSAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcnZhbHVlLCBhdmFsdWUsIGNsb3N1cmUtPnVzZXJfZGF0YSk7Ci0KLSAgLyogVGVsbCBmZmlfY2xvc3VyZV9MSU5VWDY0IGhvdyB0byBwZXJmb3JtIHJldHVybiB0eXBlIHByb21vdGlvbnMuICAqLwotICByZXR1cm4gY2lmLT5ydHlwZS0+dHlwZTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX2Rhcndpbi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMKaW5kZXggMWQxZDQ4Yy4uY2Y2ZmI2ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfZGFyd2luLmMKQEAgLTU5Myw3ICs1OTMsNyBAQAogICAgICAgLyogTmF0dXJhbCBhbGlnbm1lbnQgZm9yIGFsbCBpdGVtcy4gICovCiAgICAgICBhbGlnbiA9IHAtPmFsaWdubWVudDsKICNlbHNlCi0gICAgICAvKiBOYXRydWFsIGFsaWdubWVudCBmb3IgdGhlIGZpcnN0IGl0ZW0uLi4gKi8KKyAgICAgIC8qIE5hdHVyYWwgYWxpZ25tZW50IGZvciB0aGUgZmlyc3QgaXRlbS4uLiAqLwogICAgICAgaWYgKGkgPT0gMCkKIAlhbGlnbiA9IHAtPmFsaWdubWVudDsKICAgICAgIGVsc2UgaWYgKHAtPmFsaWdubWVudCA9PSAxNiB8fCBwLT5hbGlnbm1lbnQgPCA0KQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfbGludXg2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwODdhZjgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9saW51eDY0LmMKQEAgLTAsMCArMSw5NDMgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmZmlfbGludXg2NC5jIC0gQ29weXJpZ2h0IChDKSAyMDEzIElCTQorICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAxMSBBbnRob255IEdyZWVuCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDExIEt5bGUgTW9mZmV0dAorICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMKKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTggR2VvZmZyZXkgS2VhdGluZworCisgICBQb3dlclBDIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlICJmZmkuaCIKKworI2lmZGVmIFBPV0VSUEM2NAorI2luY2x1ZGUgImZmaV9jb21tb24uaCIKKyNpbmNsdWRlICJmZmlfcG93ZXJwYy5oIgorCisKKy8qIEFib3V0IHRoZSBMSU5VWDY0IEFCSS4gICovCitlbnVtIHsKKyAgTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQgPSA4LAorICBOVU1fRlBSX0FSR19SRUdJU1RFUlM2NCA9IDEzCit9OworZW51bSB7IEFTTV9ORUVEU19SRUdJU1RFUlM2NCA9IDQgfTsKKworCisjaWYgSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UICYmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisvKiBBZGp1c3Qgc2l6ZSBvZiBmZmlfdHlwZV9sb25nZG91YmxlLiAgKi8KK3ZvaWQgRkZJX0hJRERFTgorZmZpX3ByZXBfdHlwZXNfbGludXg2NCAoZmZpX2FiaSBhYmkpCit7CisgIGlmICgoYWJpICYgKEZGSV9MSU5VWCB8IEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjgpKSA9PSBGRklfTElOVVgpCisgICAgeworICAgICAgZmZpX3R5cGVfbG9uZ2RvdWJsZS5zaXplID0gODsKKyAgICAgIGZmaV90eXBlX2xvbmdkb3VibGUuYWxpZ25tZW50ID0gODsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmZmlfdHlwZV9sb25nZG91YmxlLnNpemUgPSAxNjsKKyAgICAgIGZmaV90eXBlX2xvbmdkb3VibGUuYWxpZ25tZW50ID0gMTY7CisgICAgfQorfQorI2VuZGlmCisKKworI2lmIF9DQUxMX0VMRiA9PSAyCitzdGF0aWMgdW5zaWduZWQgaW50CitkaXNjb3Zlcl9ob21vZ2VuZW91c19hZ2dyZWdhdGUgKGNvbnN0IGZmaV90eXBlICp0LCB1bnNpZ25lZCBpbnQgKmVsbnVtKQoreworICBzd2l0Y2ggKHQtPnR5cGUpCisgICAgeworICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CisgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisgICAgICAqZWxudW0gPSAxOworICAgICAgcmV0dXJuIChpbnQpIHQtPnR5cGU7CisKKyAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDo7CisgICAgICB7CisJdW5zaWduZWQgaW50IGJhc2VfZWx0ID0gMCwgdG90YWxfZWxudW0gPSAwOworCWZmaV90eXBlICoqZWwgPSB0LT5lbGVtZW50czsKKwl3aGlsZSAoKmVsKQorCSAgeworCSAgICB1bnNpZ25lZCBpbnQgZWxfZWx0LCBlbF9lbG51bSA9IDA7CisJICAgIGVsX2VsdCA9IGRpc2NvdmVyX2hvbW9nZW5lb3VzX2FnZ3JlZ2F0ZSAoKmVsLCAmZWxfZWxudW0pOworCSAgICBpZiAoZWxfZWx0ID09IDAKKwkJfHwgKGJhc2VfZWx0ICYmIGJhc2VfZWx0ICE9IGVsX2VsdCkpCisJICAgICAgcmV0dXJuIDA7CisJICAgIGJhc2VfZWx0ID0gZWxfZWx0OworCSAgICB0b3RhbF9lbG51bSArPSBlbF9lbG51bTsKKwkgICAgaWYgKHRvdGFsX2VsbnVtID4gOCkKKwkgICAgICByZXR1cm4gMDsKKwkgICAgZWwrKzsKKwkgIH0KKwkqZWxudW0gPSB0b3RhbF9lbG51bTsKKwlyZXR1cm4gYmFzZV9lbHQ7CisgICAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorI2VuZGlmCisKKworLyogUGVyZm9ybSBtYWNoaW5lIGRlcGVuZGVudCBjaWYgcHJvY2Vzc2luZyAqLworc3RhdGljIGZmaV9zdGF0dXMKK2ZmaV9wcmVwX2NpZl9saW51eDY0X2NvcmUgKGZmaV9jaWYgKmNpZikKK3sKKyAgZmZpX3R5cGUgKipwdHI7CisgIHVuc2lnbmVkIGJ5dGVzOworICB1bnNpZ25lZCBpLCBmcGFyZ19jb3VudCA9IDAsIGludGFyZ19jb3VudCA9IDA7CisgIHVuc2lnbmVkIGZsYWdzID0gY2lmLT5mbGFnczsKKyNpZiBfQ0FMTF9FTEYgPT0gMgorICB1bnNpZ25lZCBpbnQgZWx0LCBlbG51bTsKKyNlbmRpZgorCisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSA9PSBGRklfVFlQRV9ET1VCTEUKKyAgLyogSWYgY29tcGlsZWQgd2l0aG91dCBsb25nIGRvdWJsZSBzdXBwb3J0Li4gICovCisgIGlmICgoY2lmLT5hYmkgJiBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4KSAhPSAwKQorICAgIHJldHVybiBGRklfQkFEX0FCSTsKKyNlbmRpZgorCisgIC8qIFRoZSBtYWNoaW5lLWluZGVwZW5kZW50IGNhbGN1bGF0aW9uIG9mIGNpZi0+Ynl0ZXMgZG9lc24ndCB3b3JrCisgICAgIGZvciB1cy4gIFJlZG8gdGhlIGNhbGN1bGF0aW9uLiAgKi8KKyNpZiBfQ0FMTF9FTEYgPT0gMgorICAvKiBTcGFjZSBmb3IgYmFja2NoYWluLCBDUiwgTFIsIFRPQyBhbmQgdGhlIGFzbSdzIHRlbXAgcmVncy4gICovCisgIGJ5dGVzID0gKDQgKyBBU01fTkVFRFNfUkVHSVNURVJTNjQpICogc2l6ZW9mIChsb25nKTsKKworICAvKiBTcGFjZSBmb3IgdGhlIGdlbmVyYWwgcmVnaXN0ZXJzLiAgKi8KKyAgYnl0ZXMgKz0gTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQgKiBzaXplb2YgKGxvbmcpOworI2Vsc2UKKyAgLyogU3BhY2UgZm9yIGJhY2tjaGFpbiwgQ1IsIExSLCBjYy9sZCBkb3VibGV3b3JkLCBUT0MgYW5kIHRoZSBhc20ncyB0ZW1wCisgICAgIHJlZ3MuICAqLworICBieXRlcyA9ICg2ICsgQVNNX05FRURTX1JFR0lTVEVSUzY0KSAqIHNpemVvZiAobG9uZyk7CisKKyAgLyogU3BhY2UgZm9yIHRoZSBtYW5kYXRvcnkgcGFybSBzYXZlIGFyZWEgYW5kIGdlbmVyYWwgcmVnaXN0ZXJzLiAgKi8KKyAgYnl0ZXMgKz0gMiAqIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0ICogc2l6ZW9mIChsb25nKTsKKyNlbmRpZgorCisgIC8qIFJldHVybiB2YWx1ZSBoYW5kbGluZy4gICovCisgIHN3aXRjaCAoY2lmLT5ydHlwZS0+dHlwZSkKKyAgICB7CisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKyAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisgICAgICBpZiAoKGNpZi0+YWJpICYgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyOCkgIT0gMCkKKwlmbGFncyB8PSBGTEFHX1JFVFVSTlNfMTI4QklUUzsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisjZW5kaWYKKyAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU182NEJJVFM7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfRlA7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfVUlOVDEyODoKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU18xMjhCSVRTOworICAgICAgLyogRmFsbCB0aHJvdWdoLiAgKi8KKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKyAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU182NEJJVFM7CisgICAgICBicmVhazsKKworICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorI2lmIF9DQUxMX0VMRiA9PSAyCisgICAgICBlbHQgPSBkaXNjb3Zlcl9ob21vZ2VuZW91c19hZ2dyZWdhdGUgKGNpZi0+cnR5cGUsICZlbG51bSk7CisgICAgICBpZiAoZWx0KQorCXsKKwkgIGlmIChlbHQgPT0gRkZJX1RZUEVfRE9VQkxFKQorCSAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfNjRCSVRTOworCSAgZmxhZ3MgfD0gRkxBR19SRVRVUk5TX0ZQIHwgRkxBR19SRVRVUk5TX1NNU1Q7CisJICBicmVhazsKKwl9CisgICAgICBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA8PSAxNikKKwl7CisJICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfU01TVDsKKwkgIGJyZWFrOworCX0KKyNlbmRpZgorICAgICAgaW50YXJnX2NvdW50Kys7CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFZBTF9SRUZFUkVOQ0U7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19OT1RISU5HOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgLyogUmV0dXJucyAzMi1iaXQgaW50ZWdlciwgb3Igc2ltaWxhci4gIE5vdGhpbmcgdG8gZG8gaGVyZS4gICovCisgICAgICBicmVhazsKKyAgICB9CisKKyAgZm9yIChwdHIgPSBjaWYtPmFyZ190eXBlcywgaSA9IGNpZi0+bmFyZ3M7IGkgPiAwOyBpLS0sIHB0cisrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGludCBhbGlnbjsKKworICAgICAgc3dpdGNoICgoKnB0ciktPnR5cGUpCisJeworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisJY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorCSAgaWYgKChjaWYtPmFiaSAmIEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjgpICE9IDApCisJICAgIHsKKwkgICAgICBmcGFyZ19jb3VudCsrOworCSAgICAgIGludGFyZ19jb3VudCsrOworCSAgICB9CisJICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkgIGZwYXJnX2NvdW50Kys7CisJICBpbnRhcmdfY291bnQrKzsKKwkgIGlmIChmcGFyZ19jb3VudCA+IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0KQorCSAgICBmbGFncyB8PSBGTEFHX0FSR19ORUVEU19QU0FWRTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICBpZiAoKGNpZi0+YWJpICYgRkZJX0xJTlVYX1NUUlVDVF9BTElHTikgIT0gMCkKKwkgICAgeworCSAgICAgIGFsaWduID0gKCpwdHIpLT5hbGlnbm1lbnQ7CisJICAgICAgaWYgKGFsaWduID4gMTYpCisJCWFsaWduID0gMTY7CisJICAgICAgYWxpZ24gPSBhbGlnbiAvIDg7CisJICAgICAgaWYgKGFsaWduID4gMSkKKwkJaW50YXJnX2NvdW50ID0gQUxJR04gKGludGFyZ19jb3VudCwgYWxpZ24pOworCSAgICB9CisJICBpbnRhcmdfY291bnQgKz0gKCgqcHRyKS0+c2l6ZSArIDcpIC8gODsKKyNpZiBfQ0FMTF9FTEYgPT0gMgorCSAgZWx0ID0gZGlzY292ZXJfaG9tb2dlbmVvdXNfYWdncmVnYXRlICgqcHRyLCAmZWxudW0pOworCSAgaWYgKGVsdCkKKwkgICAgeworCSAgICAgIGZwYXJnX2NvdW50ICs9IGVsbnVtOworCSAgICAgIGlmIChmcGFyZ19jb3VudCA+IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0KQorCQlmbGFncyB8PSBGTEFHX0FSR19ORUVEU19QU0FWRTsKKwkgICAgfQorCSAgZWxzZQorI2VuZGlmCisJICAgIHsKKwkgICAgICBpZiAoaW50YXJnX2NvdW50ID4gTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQpCisJCWZsYWdzIHw9IEZMQUdfQVJHX05FRURTX1BTQVZFOworCSAgICB9CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX0lOVDoKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAvKiBFdmVyeXRoaW5nIGVsc2UgaXMgcGFzc2VkIGFzIGEgOC1ieXRlIHdvcmQgaW4gYSBHUFIsIGVpdGhlcgorCSAgICAgdGhlIG9iamVjdCBpdHNlbGYgb3IgYSBwb2ludGVyIHRvIGl0LiAgKi8KKwkgIGludGFyZ19jb3VudCsrOworCSAgaWYgKGludGFyZ19jb3VudCA+IE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0KQorCSAgICBmbGFncyB8PSBGTEFHX0FSR19ORUVEU19QU0FWRTsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBGRklfQVNTRVJUICgwKTsKKwl9CisgICAgfQorCisgIGlmIChmcGFyZ19jb3VudCAhPSAwKQorICAgIGZsYWdzIHw9IEZMQUdfRlBfQVJHVU1FTlRTOworICBpZiAoaW50YXJnX2NvdW50ID4gNCkKKyAgICBmbGFncyB8PSBGTEFHXzRfR1BSX0FSR1VNRU5UUzsKKworICAvKiBTcGFjZSBmb3IgdGhlIEZQUiByZWdpc3RlcnMsIGlmIG5lZWRlZC4gICovCisgIGlmIChmcGFyZ19jb3VudCAhPSAwKQorICAgIGJ5dGVzICs9IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0ICogc2l6ZW9mIChkb3VibGUpOworCisgIC8qIFN0YWNrIHNwYWNlLiAgKi8KKyNpZiBfQ0FMTF9FTEYgPT0gMgorICBpZiAoKGZsYWdzICYgRkxBR19BUkdfTkVFRFNfUFNBVkUpICE9IDApCisgICAgYnl0ZXMgKz0gaW50YXJnX2NvdW50ICogc2l6ZW9mIChsb25nKTsKKyNlbHNlCisgIGlmIChpbnRhcmdfY291bnQgPiBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NCkKKyAgICBieXRlcyArPSAoaW50YXJnX2NvdW50IC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQpICogc2l6ZW9mIChsb25nKTsKKyNlbmRpZgorCisgIC8qIFRoZSBzdGFjayBzcGFjZSBhbGxvY2F0ZWQgbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNiBieXRlcy4gICovCisgIGJ5dGVzID0gKGJ5dGVzICsgMTUpICYgfjB4RjsKKworICBjaWYtPmZsYWdzID0gZmxhZ3M7CisgIGNpZi0+Ynl0ZXMgPSBieXRlczsKKworICByZXR1cm4gRkZJX09LOworfQorCitmZmlfc3RhdHVzIEZGSV9ISURERU4KK2ZmaV9wcmVwX2NpZl9saW51eDY0IChmZmlfY2lmICpjaWYpCit7CisgIGlmICgoY2lmLT5hYmkgJiBGRklfTElOVVgpICE9IDApCisgICAgY2lmLT5uZml4ZWRhcmdzID0gY2lmLT5uYXJnczsKKyNpZiBfQ0FMTF9FTEYgIT0gMgorICBlbHNlIGlmIChjaWYtPmFiaSA9PSBGRklfQ09NUEFUX0xJTlVYNjQpCisgICAgeworICAgICAgLyogVGhpcyBjYWxsIGlzIGZyb20gb2xkIGNvZGUuICBEb24ndCB0b3VjaCBjaWYtPm5maXhlZGFyZ3MKKwkgc2luY2Ugb2xkIGNvZGUgd2lsbCBiZSB1c2luZyBhIHNtYWxsZXIgY2lmLiAgKi8KKyAgICAgIGNpZi0+ZmxhZ3MgfD0gRkxBR19DT01QQVQ7CisgICAgICAvKiBUcmFuc2xhdGUgdG8gbmV3IGFiaSB2YWx1ZS4gICovCisgICAgICBjaWYtPmFiaSA9IEZGSV9MSU5VWCB8IEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjg7CisgICAgfQorI2VuZGlmCisgIGVsc2UKKyAgICByZXR1cm4gRkZJX0JBRF9BQkk7CisgIHJldHVybiBmZmlfcHJlcF9jaWZfbGludXg2NF9jb3JlIChjaWYpOworfQorCitmZmlfc3RhdHVzIEZGSV9ISURERU4KK2ZmaV9wcmVwX2NpZl9saW51eDY0X3ZhciAoZmZpX2NpZiAqY2lmLAorCQkJICB1bnNpZ25lZCBpbnQgbmZpeGVkYXJncywKKwkJCSAgdW5zaWduZWQgaW50IG50b3RhbGFyZ3MgTUFZQkVfVU5VU0VEKQoreworICBpZiAoKGNpZi0+YWJpICYgRkZJX0xJTlVYKSAhPSAwKQorICAgIGNpZi0+bmZpeGVkYXJncyA9IG5maXhlZGFyZ3M7CisjaWYgX0NBTExfRUxGICE9IDIKKyAgZWxzZSBpZiAoY2lmLT5hYmkgPT0gRkZJX0NPTVBBVF9MSU5VWDY0KQorICAgIHsKKyAgICAgIC8qIFRoaXMgY2FsbCBpcyBmcm9tIG9sZCBjb2RlLiAgRG9uJ3QgdG91Y2ggY2lmLT5uZml4ZWRhcmdzCisJIHNpbmNlIG9sZCBjb2RlIHdpbGwgYmUgdXNpbmcgYSBzbWFsbGVyIGNpZi4gICovCisgICAgICBjaWYtPmZsYWdzIHw9IEZMQUdfQ09NUEFUOworICAgICAgLyogVHJhbnNsYXRlIHRvIG5ldyBhYmkgdmFsdWUuICAqLworICAgICAgY2lmLT5hYmkgPSBGRklfTElOVVggfCBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4OworICAgIH0KKyNlbmRpZgorICBlbHNlCisgICAgcmV0dXJuIEZGSV9CQURfQUJJOworI2lmIF9DQUxMX0VMRiA9PSAyCisgIGNpZi0+ZmxhZ3MgfD0gRkxBR19BUkdfTkVFRFNfUFNBVkU7CisjZW5kaWYKKyAgcmV0dXJuIGZmaV9wcmVwX2NpZl9saW51eDY0X2NvcmUgKGNpZik7Cit9CisKKworLyogZmZpX3ByZXBfYXJnczY0IGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCisgICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cy4KKworICAgVGhlIHN0YWNrIGxheW91dCB3ZSB3YW50IGxvb2tzIGxpa2UgdGhpczoKKworICAgfCAgIFJldCBhZGRyIGZyb20gZmZpX2NhbGxfTElOVVg2NAk4Ynl0ZXMJfAloaWdoZXIgYWRkcmVzc2VzCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICB8ICAgQ1Igc2F2ZSBhcmVhCQkJOGJ5dGVzCXwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwKKyAgIHwgICBQcmV2aW91cyBiYWNrY2hhaW4gcG9pbnRlcgk4CXwJc3RhY2sgcG9pbnRlciBoZXJlCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18PCsgPDw8CW9uIGVudHJ5IHRvCisgICB8ICAgU2F2ZWQgcjI4LXIzMQkJCTQqOAl8IHwJZmZpX2NhbGxfTElOVVg2NAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CisgICB8ICAgR1BSIHJlZ2lzdGVycyByMy1yMTAJCTgqOAl8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorICAgfCAgIEZQUiByZWdpc3RlcnMgZjEtZjEzIChvcHRpb25hbCkJMTMqOAl8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorICAgfCAgIFBhcmFtZXRlciBzYXZlIGFyZWEJCSAgICAgICAgfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwKKyAgIHwgICBUT0Mgc2F2ZSBhcmVhCQkJOAl8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlzdGFjawl8CisgICB8ICAgTGlua2VyIGRvdWJsZXdvcmQJCTgJfCB8CWdyb3dzCXwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlkb3duCVYKKyAgIHwgICBDb21waWxlciBkb3VibGV3b3JkCQk4CXwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CWxvd2VyIGFkZHJlc3NlcworICAgfCAgIFNwYWNlIGZvciBjYWxsZWUncyBMUgkJOAl8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorICAgfCAgIENSIHNhdmUgYXJlYQkJCTgJfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJc3RhY2sgcG9pbnRlciBoZXJlCisgICB8ICAgQ3VycmVudCBiYWNrY2hhaW4gcG9pbnRlcgk4CXwtLwlkdXJpbmcKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgICA8PDwJZmZpX2NhbGxfTElOVVg2NAorCisqLworCit2b2lkIEZGSV9ISURERU4KK2ZmaV9wcmVwX2FyZ3M2NCAoZXh0ZW5kZWRfY2lmICplY2lmLCB1bnNpZ25lZCBsb25nICpjb25zdCBzdGFjaykKK3sKKyAgY29uc3QgdW5zaWduZWQgbG9uZyBieXRlcyA9IGVjaWYtPmNpZi0+Ynl0ZXM7CisgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBlY2lmLT5jaWYtPmZsYWdzOworCisgIHR5cGVkZWYgdW5pb24KKyAgeworICAgIGNoYXIgKmM7CisgICAgdW5zaWduZWQgbG9uZyAqdWw7CisgICAgZmxvYXQgKmY7CisgICAgZG91YmxlICpkOworICAgIHNpemVfdCBwOworICB9IHZhbHA7CisKKyAgLyogJ3N0YWNrdG9wJyBwb2ludHMgYXQgdGhlIHByZXZpb3VzIGJhY2tjaGFpbiBwb2ludGVyLiAgKi8KKyAgdmFscCBzdGFja3RvcDsKKworICAvKiAnbmV4dF9hcmcnIHBvaW50cyBhdCB0aGUgc3BhY2UgZm9yIGdwcjMsIGFuZCBncm93cyB1cHdhcmRzIGFzCisgICAgIHdlIHVzZSBHUFIgcmVnaXN0ZXJzLCB0aGVuIGNvbnRpbnVlcyBhdCByZXN0LiAgKi8KKyAgdmFscCBncHJfYmFzZTsKKyAgdmFscCBncHJfZW5kOworICB2YWxwIHJlc3Q7CisgIHZhbHAgbmV4dF9hcmc7CisKKyAgLyogJ2Zwcl9iYXNlJyBwb2ludHMgYXQgdGhlIHNwYWNlIGZvciBmcHIzLCBhbmQgZ3Jvd3MgdXB3YXJkcyBhcworICAgICB3ZSB1c2UgRlBSIHJlZ2lzdGVycy4gICovCisgIHZhbHAgZnByX2Jhc2U7CisgIHVuc2lnbmVkIGludCBmcGFyZ19jb3VudDsKKworICB1bnNpZ25lZCBpbnQgaSwgd29yZHMsIG5hcmdzLCBuZml4ZWRhcmdzOworICBmZmlfdHlwZSAqKnB0cjsKKyAgZG91YmxlIGRvdWJsZV90bXA7CisgIHVuaW9uCisgIHsKKyAgICB2b2lkICoqdjsKKyAgICBjaGFyICoqYzsKKyAgICBzaWduZWQgY2hhciAqKnNjOworICAgIHVuc2lnbmVkIGNoYXIgKip1YzsKKyAgICBzaWduZWQgc2hvcnQgKipzczsKKyAgICB1bnNpZ25lZCBzaG9ydCAqKnVzOworICAgIHNpZ25lZCBpbnQgKipzaTsKKyAgICB1bnNpZ25lZCBpbnQgKip1aTsKKyAgICB1bnNpZ25lZCBsb25nICoqdWw7CisgICAgZmxvYXQgKipmOworICAgIGRvdWJsZSAqKmQ7CisgIH0gcF9hcmd2OworICB1bnNpZ25lZCBsb25nIGdwcnZhbHVlOworICB1bnNpZ25lZCBsb25nIGFsaWduOworCisgIHN0YWNrdG9wLmMgPSAoY2hhciAqKSBzdGFjayArIGJ5dGVzOworICBncHJfYmFzZS51bCA9IHN0YWNrdG9wLnVsIC0gQVNNX05FRURTX1JFR0lTVEVSUzY0IC0gTlVNX0dQUl9BUkdfUkVHSVNURVJTNjQ7CisgIGdwcl9lbmQudWwgPSBncHJfYmFzZS51bCArIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzY0OworI2lmIF9DQUxMX0VMRiA9PSAyCisgIHJlc3QudWwgPSBzdGFjayArIDQgKyBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NDsKKyNlbHNlCisgIHJlc3QudWwgPSBzdGFjayArIDYgKyBOVU1fR1BSX0FSR19SRUdJU1RFUlM2NDsKKyNlbmRpZgorICBmcHJfYmFzZS5kID0gZ3ByX2Jhc2UuZCAtIE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0OworICBmcGFyZ19jb3VudCA9IDA7CisgIG5leHRfYXJnLnVsID0gZ3ByX2Jhc2UudWw7CisKKyAgLyogQ2hlY2sgdGhhdCBldmVyeXRoaW5nIHN0YXJ0cyBhbGlnbmVkIHByb3Blcmx5LiAgKi8KKyAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSAoY2hhciAqKSBzdGFjayAmIDB4RikgPT0gMCk7CisgIEZGSV9BU1NFUlQgKCgodW5zaWduZWQgbG9uZykgc3RhY2t0b3AuYyAmIDB4RikgPT0gMCk7CisgIEZGSV9BU1NFUlQgKChieXRlcyAmIDB4RikgPT0gMCk7CisKKyAgLyogRGVhbCB3aXRoIHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgYWN0dWFsbHkgcGFzcy1ieS1yZWZlcmVuY2UuICAqLworICBpZiAoZmxhZ3MgJiBGTEFHX1JFVFZBTF9SRUZFUkVOQ0UpCisgICAgKm5leHRfYXJnLnVsKysgPSAodW5zaWduZWQgbG9uZykgKGNoYXIgKikgZWNpZi0+cnZhbHVlOworCisgIC8qIE5vdyBmb3IgdGhlIGFyZ3VtZW50cy4gICovCisgIHBfYXJndi52ID0gZWNpZi0+YXZhbHVlOworICBuYXJncyA9IGVjaWYtPmNpZi0+bmFyZ3M7CisjaWYgX0NBTExfRUxGICE9IDIKKyAgbmZpeGVkYXJncyA9ICh1bnNpZ25lZCkgLTE7CisgIGlmICgoZmxhZ3MgJiBGTEFHX0NPTVBBVCkgPT0gMCkKKyNlbmRpZgorICAgIG5maXhlZGFyZ3MgPSBlY2lmLT5jaWYtPm5maXhlZGFyZ3M7CisgIGZvciAocHRyID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXMsIGkgPSAwOworICAgICAgIGkgPCBuYXJnczsKKyAgICAgICBpKyssIHB0cisrLCBwX2FyZ3YudisrKQorICAgIHsKKyNpZiBfQ0FMTF9FTEYgPT0gMgorICAgICAgdW5zaWduZWQgaW50IGVsdCwgZWxudW07CisjZW5kaWYKKworICAgICAgc3dpdGNoICgoKnB0ciktPnR5cGUpCisJeworI2lmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisJY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorCSAgaWYgKChlY2lmLT5jaWYtPmFiaSAmIEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjgpICE9IDApCisJICAgIHsKKwkgICAgICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMF07CisJICAgICAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgJiYgaSA8IG5maXhlZGFyZ3MpCisJCXsKKwkJICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKyMgaWYgX0NBTExfRUxGICE9IDIKKwkJICBpZiAoKGZsYWdzICYgRkxBR19DT01QQVQpICE9IDApCisJCSAgICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisjIGVuZGlmCisJCX0KKwkgICAgICBlbHNlCisJCSpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKwkgICAgICBpZiAoKytuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQorCQluZXh0X2FyZy51bCA9IHJlc3QudWw7CisJICAgICAgZnBhcmdfY291bnQrKzsKKwkgICAgICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMV07CisJICAgICAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgJiYgaSA8IG5maXhlZGFyZ3MpCisJCXsKKwkJICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKyMgaWYgX0NBTExfRUxGICE9IDIKKwkJICBpZiAoKGZsYWdzICYgRkxBR19DT01QQVQpICE9IDApCisJCSAgICAqbmV4dF9hcmcuZCA9IGRvdWJsZV90bXA7CisjIGVuZGlmCisJCX0KKwkgICAgICBlbHNlCisJCSpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKwkgICAgICBpZiAoKytuZXh0X2FyZy51bCA9PSBncHJfZW5kLnVsKQorCQluZXh0X2FyZy51bCA9IHJlc3QudWw7CisJICAgICAgZnBhcmdfY291bnQrKzsKKwkgICAgICBGRklfQVNTRVJUIChfX0xEQkxfTUFOVF9ESUdfXyA9PSAxMDYpOworCSAgICAgIEZGSV9BU1NFUlQgKGZsYWdzICYgRkxBR19GUF9BUkdVTUVOVFMpOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJICBkb3VibGVfdG1wID0gKipwX2FyZ3YuZDsKKwkgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0ICYmIGkgPCBuZml4ZWRhcmdzKQorCSAgICB7CisJICAgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisjaWYgX0NBTExfRUxGICE9IDIKKwkgICAgICBpZiAoKGZsYWdzICYgRkxBR19DT01QQVQpICE9IDApCisJCSpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKyNlbmRpZgorCSAgICB9CisJICBlbHNlCisJICAgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKwkgIGlmICgrK25leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCisJICAgIG5leHRfYXJnLnVsID0gcmVzdC51bDsKKwkgIGZwYXJnX2NvdW50Kys7CisJICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkgIGRvdWJsZV90bXAgPSAqKnBfYXJndi5mOworCSAgaWYgKGZwYXJnX2NvdW50IDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQgJiYgaSA8IG5maXhlZGFyZ3MpCisJICAgIHsKKwkgICAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKyNpZiBfQ0FMTF9FTEYgIT0gMgorCSAgICAgIGlmICgoZmxhZ3MgJiBGTEFHX0NPTVBBVCkgIT0gMCkKKwkJKm5leHRfYXJnLmYgPSAoZmxvYXQpIGRvdWJsZV90bXA7CisjZW5kaWYKKwkgICAgfQorCSAgZWxzZQorCSAgICAqbmV4dF9hcmcuZiA9IChmbG9hdCkgZG91YmxlX3RtcDsKKwkgIGlmICgrK25leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCisJICAgIG5leHRfYXJnLnVsID0gcmVzdC51bDsKKwkgIGZwYXJnX2NvdW50Kys7CisJICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICBpZiAoKGVjaWYtPmNpZi0+YWJpICYgRkZJX0xJTlVYX1NUUlVDVF9BTElHTikgIT0gMCkKKwkgICAgeworCSAgICAgIGFsaWduID0gKCpwdHIpLT5hbGlnbm1lbnQ7CisJICAgICAgaWYgKGFsaWduID4gMTYpCisJCWFsaWduID0gMTY7CisJICAgICAgaWYgKGFsaWduID4gMSkKKwkJbmV4dF9hcmcucCA9IEFMSUdOIChuZXh0X2FyZy5wLCBhbGlnbik7CisJICAgIH0KKyNpZiBfQ0FMTF9FTEYgPT0gMgorCSAgZWx0ID0gZGlzY292ZXJfaG9tb2dlbmVvdXNfYWdncmVnYXRlICgqcHRyLCAmZWxudW0pOworCSAgaWYgKGVsdCkKKwkgICAgeworCSAgICAgIHVuaW9uIHsKKwkJdm9pZCAqdjsKKwkJZmxvYXQgKmY7CisJCWRvdWJsZSAqZDsKKwkgICAgICB9IGFyZzsKKworCSAgICAgIGFyZy52ID0gKnBfYXJndi52OworCSAgICAgIGlmIChlbHQgPT0gRkZJX1RZUEVfRkxPQVQpCisJCXsKKwkJICBkbworCQkgICAgeworCQkgICAgICBkb3VibGVfdG1wID0gKmFyZy5mKys7CisJCSAgICAgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0CisJCQkgICYmIGkgPCBuZml4ZWRhcmdzKQorCQkJKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisJCSAgICAgIGVsc2UKKwkJCSpuZXh0X2FyZy5mID0gKGZsb2F0KSBkb3VibGVfdG1wOworCQkgICAgICBpZiAoKytuZXh0X2FyZy5mID09IGdwcl9lbmQuZikKKwkJCW5leHRfYXJnLmYgPSByZXN0LmY7CisJCSAgICAgIGZwYXJnX2NvdW50Kys7CisJCSAgICB9CisJCSAgd2hpbGUgKC0tZWxudW0gIT0gMCk7CisJCSAgaWYgKChuZXh0X2FyZy5wICYgMykgIT0gMCkKKwkJICAgIHsKKwkJICAgICAgaWYgKCsrbmV4dF9hcmcuZiA9PSBncHJfZW5kLmYpCisJCQluZXh0X2FyZy5mID0gcmVzdC5mOworCQkgICAgfQorCQl9CisJICAgICAgZWxzZQorCQlkbworCQkgIHsKKwkJICAgIGRvdWJsZV90bXAgPSAqYXJnLmQrKzsKKwkJICAgIGlmIChmcGFyZ19jb3VudCA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUzY0ICYmIGkgPCBuZml4ZWRhcmdzKQorCQkgICAgICAqZnByX2Jhc2UuZCsrID0gZG91YmxlX3RtcDsKKwkJICAgIGVsc2UKKwkJICAgICAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworCQkgICAgaWYgKCsrbmV4dF9hcmcuZCA9PSBncHJfZW5kLmQpCisJCSAgICAgIG5leHRfYXJnLmQgPSByZXN0LmQ7CisJCSAgICBmcGFyZ19jb3VudCsrOworCQkgIH0KKwkJd2hpbGUgKC0tZWxudW0gIT0gMCk7CisJICAgIH0KKwkgIGVsc2UKKyNlbmRpZgorCSAgICB7CisJICAgICAgd29yZHMgPSAoKCpwdHIpLT5zaXplICsgNykgLyA4OworCSAgICAgIGlmIChuZXh0X2FyZy51bCA+PSBncHJfYmFzZS51bCAmJiBuZXh0X2FyZy51bCArIHdvcmRzID4gZ3ByX2VuZC51bCkKKwkJeworCQkgIHNpemVfdCBmaXJzdCA9IGdwcl9lbmQuYyAtIG5leHRfYXJnLmM7CisJCSAgbWVtY3B5IChuZXh0X2FyZy5jLCAqcF9hcmd2LmMsIGZpcnN0KTsKKwkJICBtZW1jcHkgKHJlc3QuYywgKnBfYXJndi5jICsgZmlyc3QsICgqcHRyKS0+c2l6ZSAtIGZpcnN0KTsKKwkJICBuZXh0X2FyZy5jID0gcmVzdC5jICsgd29yZHMgKiA4IC0gZmlyc3Q7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBjaGFyICp3aGVyZSA9IG5leHRfYXJnLmM7CisKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX18KKwkJICAvKiBTdHJ1Y3R1cmVzIHdpdGggc2l6ZSBsZXNzIHRoYW4gZWlnaHQgYnl0ZXMgYXJlIHBhc3NlZAorCQkgICAgIGxlZnQtcGFkZGVkLiAgKi8KKwkJICBpZiAoKCpwdHIpLT5zaXplIDwgOCkKKwkJICAgIHdoZXJlICs9IDggLSAoKnB0ciktPnNpemU7CisjZW5kaWYKKwkJICBtZW1jcHkgKHdoZXJlLCAqcF9hcmd2LmMsICgqcHRyKS0+c2l6ZSk7CisJCSAgbmV4dF9hcmcudWwgKz0gd29yZHM7CisJCSAgaWYgKG5leHRfYXJnLnVsID09IGdwcl9lbmQudWwpCisJCSAgICBuZXh0X2FyZy51bCA9IHJlc3QudWw7CisJCX0KKwkgICAgfQorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51YzsKKwkgIGdvdG8gcHV0Z3ByOworCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNjOworCSAgZ290byBwdXRncHI7CisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVzOworCSAgZ290byBwdXRncHI7CisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNzOworCSAgZ290byBwdXRncHI7CisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVpOworCSAgZ290byBwdXRncHI7CisJY2FzZSBGRklfVFlQRV9JTlQ6CisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNpOworCSAgZ290byBwdXRncHI7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVsOworCXB1dGdwcjoKKwkgICpuZXh0X2FyZy51bCsrID0gZ3BydmFsdWU7CisJICBpZiAobmV4dF9hcmcudWwgPT0gZ3ByX2VuZC51bCkKKwkgICAgbmV4dF9hcmcudWwgPSByZXN0LnVsOworCSAgYnJlYWs7CisJfQorICAgIH0KKworICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfNF9HUFJfQVJHVU1FTlRTCisJICAgICAgfHwgKG5leHRfYXJnLnVsID49IGdwcl9iYXNlLnVsCisJCSAgJiYgbmV4dF9hcmcudWwgPD0gZ3ByX2Jhc2UudWwgKyA0KSk7Cit9CisKKworI2lmIF9DQUxMX0VMRiA9PSAyCisjZGVmaW5lIE1JTl9DQUNIRV9MSU5FX1NJWkUgOAorCitzdGF0aWMgdm9pZAorZmx1c2hfaWNhY2hlIChjaGFyICp3cmFkZHIsIGNoYXIgKnhhZGRyLCBpbnQgc2l6ZSkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpICs9IE1JTl9DQUNIRV9MSU5FX1NJWkUpCisgICAgX19hc21fXyB2b2xhdGlsZSAoImljYmkgMCwlMDsiICJkY2JmIDAsJTE7IgorCQkgICAgICA6IDogInIiICh4YWRkciArIGkpLCAiciIgKHdyYWRkciArIGkpIDogIm1lbW9yeSIpOworICBfX2FzbV9fIHZvbGF0aWxlICgiaWNiaSAwLCUwOyIgImRjYmYgMCwlMTsiICJzeW5jOyIgImlzeW5jOyIKKwkJICAgIDogOiAiciIoeGFkZHIgKyBzaXplIC0gMSksICJyIih3cmFkZHIgKyBzaXplIC0gMSkKKwkJICAgIDogIm1lbW9yeSIpOworfQorI2VuZGlmCisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2Nsb3N1cmVfbG9jX2xpbnV4NjQgKGZmaV9jbG9zdXJlICpjbG9zdXJlLAorCQkJICAgICAgZmZpX2NpZiAqY2lmLAorCQkJICAgICAgdm9pZCAoKmZ1bikgKGZmaV9jaWYgKiwgdm9pZCAqLCB2b2lkICoqLCB2b2lkICopLAorCQkJICAgICAgdm9pZCAqdXNlcl9kYXRhLAorCQkJICAgICAgdm9pZCAqY29kZWxvYykKK3sKKyNpZiBfQ0FMTF9FTEYgPT0gMgorICB1bnNpZ25lZCBpbnQgKnRyYW1wID0gKHVuc2lnbmVkIGludCAqKSAmY2xvc3VyZS0+dHJhbXBbMF07CisKKyAgaWYgKGNpZi0+YWJpIDwgRkZJX0xJTlVYIHx8IGNpZi0+YWJpID49IEZGSV9MQVNUX0FCSSkKKyAgICByZXR1cm4gRkZJX0JBRF9BQkk7CisKKyAgdHJhbXBbMF0gPSAweGU5NmMwMDE4OwkvKiAwOglsZAkxMSwyZi0wYigxMikJKi8KKyAgdHJhbXBbMV0gPSAweGU5OGMwMDEwOwkvKglsZAkxMiwxZi0wYigxMikJKi8KKyAgdHJhbXBbMl0gPSAweDdkODkwM2E2OwkvKgltdGN0cgkxMgkJKi8KKyAgdHJhbXBbM10gPSAweDRlODAwNDIwOwkvKgliY3RyCQkJKi8KKwkJCQkvKiAxOgkucXVhZAlmdW5jdGlvbl9hZGRyCSovCisJCQkJLyogMjoJLnF1YWQJY29udGV4dAkJKi8KKyAgKih2b2lkICoqKSAmdHJhbXBbNF0gPSAodm9pZCAqKSBmZmlfY2xvc3VyZV9MSU5VWDY0OworICAqKHZvaWQgKiopICZ0cmFtcFs2XSA9IGNvZGVsb2M7CisgIGZsdXNoX2ljYWNoZSAoKGNoYXIgKil0cmFtcCwgKGNoYXIgKiljb2RlbG9jLCBGRklfVFJBTVBPTElORV9TSVpFKTsKKyNlbHNlCisgIHZvaWQgKip0cmFtcCA9ICh2b2lkICoqKSAmY2xvc3VyZS0+dHJhbXBbMF07CisKKyAgaWYgKGNpZi0+YWJpIDwgRkZJX0xJTlVYIHx8IGNpZi0+YWJpID49IEZGSV9MQVNUX0FCSSkKKyAgICByZXR1cm4gRkZJX0JBRF9BQkk7CisKKyAgLyogQ29weSBmdW5jdGlvbiBhZGRyZXNzIGFuZCBUT0MgZnJvbSBmZmlfY2xvc3VyZV9MSU5VWDY0LiAgKi8KKyAgbWVtY3B5ICh0cmFtcCwgKGNoYXIgKikgZmZpX2Nsb3N1cmVfTElOVVg2NCwgMTYpOworICB0cmFtcFsyXSA9IHRyYW1wWzFdOworICB0cmFtcFsxXSA9IGNvZGVsb2M7CisjZW5kaWYKKworICBjbG9zdXJlLT5jaWYgPSBjaWY7CisgIGNsb3N1cmUtPmZ1biA9IGZ1bjsKKyAgY2xvc3VyZS0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworCisgIHJldHVybiBGRklfT0s7Cit9CisKKworaW50IEZGSV9ISURERU4KK2ZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0IChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqcnZhbHVlLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKnBzdCwgZmZpX2RibGZsICpwZnIpCit7CisgIC8qIHJ2YWx1ZSBpcyB0aGUgcG9pbnRlciB0byBzcGFjZSBmb3IgcmV0dXJuIHZhbHVlIGluIGNsb3N1cmUgYXNzZW1ibHkgKi8KKyAgLyogcHN0IGlzIHRoZSBwb2ludGVyIHRvIHBhcmFtZXRlciBzYXZlIGFyZWEKKyAgICAgKHIzLXIxMCBhcmUgc3RvcmVkIGludG8gaXRzIGZpcnN0IDggc2xvdHMgYnkgZmZpX2Nsb3N1cmVfTElOVVg2NCkgKi8KKyAgLyogcGZyIGlzIHRoZSBwb2ludGVyIHRvIHdoZXJlIGYxLWYxMyBhcmUgc3RvcmVkIGluIGZmaV9jbG9zdXJlX0xJTlVYNjQgKi8KKworICB2b2lkICoqYXZhbHVlOworICBmZmlfdHlwZSAqKmFyZ190eXBlczsKKyAgdW5zaWduZWQgbG9uZyBpLCBhdm4sIG5maXhlZGFyZ3M7CisgIGZmaV9jaWYgKmNpZjsKKyAgZmZpX2RibGZsICplbmRfcGZyID0gcGZyICsgTlVNX0ZQUl9BUkdfUkVHSVNURVJTNjQ7CisgIHVuc2lnbmVkIGxvbmcgYWxpZ247CisKKyAgY2lmID0gY2xvc3VyZS0+Y2lmOworICBhdmFsdWUgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQgKikpOworCisgIC8qIENvcHkgdGhlIGNhbGxlcidzIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUgYWRkcmVzcyBzbyB0aGF0IHRoZQorICAgICBjbG9zdXJlIHJldHVybnMgdGhlIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGNhbGxlci4gICovCisgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgKGNpZi0+ZmxhZ3MgJiBGTEFHX1JFVFVSTlNfU01TVCkgPT0gMCkKKyAgICB7CisgICAgICBydmFsdWUgPSAodm9pZCAqKSAqcHN0OworICAgICAgcHN0Kys7CisgICAgfQorCisgIGkgPSAwOworICBhdm4gPSBjaWYtPm5hcmdzOworI2lmIF9DQUxMX0VMRiAhPSAyCisgIG5maXhlZGFyZ3MgPSAodW5zaWduZWQpIC0xOworICBpZiAoKGNpZi0+ZmxhZ3MgJiBGTEFHX0NPTVBBVCkgPT0gMCkKKyNlbmRpZgorICAgIG5maXhlZGFyZ3MgPSBjaWYtPm5maXhlZGFyZ3M7CisgIGFyZ190eXBlcyA9IGNpZi0+YXJnX3R5cGVzOworCisgIC8qIEdyYWIgdGhlIGFkZHJlc3NlcyBvZiB0aGUgYXJndW1lbnRzIGZyb20gdGhlIHN0YWNrIGZyYW1lLiAgKi8KKyAgd2hpbGUgKGkgPCBhdm4pCisgICAgeworICAgICAgdW5zaWduZWQgaW50IGVsdCwgZWxudW07CisKKyAgICAgIHN3aXRjaCAoYXJnX3R5cGVzW2ldLT50eXBlKQorCXsKKwljYXNlIEZGSV9UWVBFX1NJTlQ4OgorCWNhc2UgRkZJX1RZUEVfVUlOVDg6CisjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCisJICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyA3OworCSAgcHN0Kys7CisJICBicmVhazsKKyNlbmRpZgorCisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCisJICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyA2OworCSAgcHN0Kys7CisJICBicmVhazsKKyNlbmRpZgorCisJY2FzZSBGRklfVFlQRV9TSU5UMzI6CisJY2FzZSBGRklfVFlQRV9VSU5UMzI6CisjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCisJICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyA0OworCSAgcHN0Kys7CisJICBicmVhazsKKyNlbmRpZgorCisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCSAgYXZhbHVlW2ldID0gcHN0OworCSAgcHN0Kys7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgaWYgKChjaWYtPmFiaSAmIEZGSV9MSU5VWF9TVFJVQ1RfQUxJR04pICE9IDApCisJICAgIHsKKwkgICAgICBhbGlnbiA9IGFyZ190eXBlc1tpXS0+YWxpZ25tZW50OworCSAgICAgIGlmIChhbGlnbiA+IDE2KQorCQlhbGlnbiA9IDE2OworCSAgICAgIGlmIChhbGlnbiA+IDEpCisJCXBzdCA9ICh1bnNpZ25lZCBsb25nICopIEFMSUdOICgoc2l6ZV90KSBwc3QsIGFsaWduKTsKKwkgICAgfQorCSAgZWx0ID0gMDsKKyNpZiBfQ0FMTF9FTEYgPT0gMgorCSAgZWx0ID0gZGlzY292ZXJfaG9tb2dlbmVvdXNfYWdncmVnYXRlIChhcmdfdHlwZXNbaV0sICZlbG51bSk7CisjZW5kaWYKKwkgIGlmIChlbHQpCisJICAgIHsKKwkgICAgICB1bmlvbiB7CisJCXZvaWQgKnY7CisJCXVuc2lnbmVkIGxvbmcgKnVsOworCQlmbG9hdCAqZjsKKwkJZG91YmxlICpkOworCQlzaXplX3QgcDsKKwkgICAgICB9IHRvLCBmcm9tOworCisJICAgICAgLyogUmVwYWNrYWdlIHRoZSBhZ2dyZWdhdGUgZnJvbSBpdHMgcGFydHMuICBUaGUKKwkJIGFnZ3JlZ2F0ZSBzaXplIGlzIG5vdCBncmVhdGVyIHRoYW4gdGhlIHNwYWNlIHRha2VuIGJ5CisJCSB0aGUgcmVnaXN0ZXJzIHNvIHN0b3JlIGJhY2sgdG8gdGhlIHJlZ2lzdGVyL3BhcmFtZXRlcgorCQkgc2F2ZSBhcnJheXMuICAqLworCSAgICAgIGlmIChwZnIgKyBlbG51bSA8PSBlbmRfcGZyKQorCQl0by52ID0gcGZyOworCSAgICAgIGVsc2UKKwkJdG8udiA9IHBzdDsKKworCSAgICAgIGF2YWx1ZVtpXSA9IHRvLnY7CisJICAgICAgZnJvbS51bCA9IHBzdDsKKwkgICAgICBpZiAoZWx0ID09IEZGSV9UWVBFX0ZMT0FUKQorCQl7CisJCSAgZG8KKwkJICAgIHsKKwkJICAgICAgaWYgKHBmciA8IGVuZF9wZnIgJiYgaSA8IG5maXhlZGFyZ3MpCisJCQl7CisJCQkgICp0by5mID0gKGZsb2F0KSBwZnItPmQ7CisJCQkgIHBmcisrOworCQkJfQorCQkgICAgICBlbHNlCisJCQkqdG8uZiA9ICpmcm9tLmY7CisJCSAgICAgIHRvLmYrKzsKKwkJICAgICAgZnJvbS5mKys7CisJCSAgICB9CisJCSAgd2hpbGUgKC0tZWxudW0gIT0gMCk7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBkbworCQkgICAgeworCQkgICAgICBpZiAocGZyIDwgZW5kX3BmciAmJiBpIDwgbmZpeGVkYXJncykKKwkJCXsKKwkJCSAgKnRvLmQgPSBwZnItPmQ7CisJCQkgIHBmcisrOworCQkJfQorCQkgICAgICBlbHNlCisJCQkqdG8uZCA9ICpmcm9tLmQ7CisJCSAgICAgIHRvLmQrKzsKKwkJICAgICAgZnJvbS5kKys7CisJCSAgICB9CisJCSAgd2hpbGUgKC0tZWxudW0gIT0gMCk7CisJCX0KKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCisJICAgICAgLyogU3RydWN0dXJlcyB3aXRoIHNpemUgbGVzcyB0aGFuIGVpZ2h0IGJ5dGVzIGFyZSBwYXNzZWQKKwkJIGxlZnQtcGFkZGVkLiAgKi8KKwkgICAgICBpZiAoYXJnX3R5cGVzW2ldLT5zaXplIDwgOCkKKwkJYXZhbHVlW2ldID0gKGNoYXIgKikgcHN0ICsgOCAtIGFyZ190eXBlc1tpXS0+c2l6ZTsKKwkgICAgICBlbHNlCisjZW5kaWYKKwkJYXZhbHVlW2ldID0gcHN0OworCSAgICB9CisJICBwc3QgKz0gKGFyZ190eXBlc1tpXS0+c2l6ZSArIDcpIC8gODsKKwkgIGJyZWFrOworCisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKwljYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisJICBpZiAoKGNpZi0+YWJpICYgRkZJX0xJTlVYX0xPTkdfRE9VQkxFXzEyOCkgIT0gMCkKKwkgICAgeworCSAgICAgIGlmIChwZnIgKyAxIDwgZW5kX3BmciAmJiBpICsgMSA8IG5maXhlZGFyZ3MpCisJCXsKKwkJICBhdmFsdWVbaV0gPSBwZnI7CisJCSAgcGZyICs9IDI7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAocGZyIDwgZW5kX3BmciAmJiBpIDwgbmZpeGVkYXJncykKKwkJICAgIHsKKwkJICAgICAgLyogUGFzc2VkIHBhcnRseSBpbiBmMTMgYW5kIHBhcnRseSBvbiB0aGUgc3RhY2suCisJCQkgTW92ZSBpdCBhbGwgdG8gdGhlIHN0YWNrLiAgKi8KKwkJICAgICAgKnBzdCA9ICoodW5zaWduZWQgbG9uZyAqKSBwZnI7CisJCSAgICAgIHBmcisrOworCQkgICAgfQorCQkgIGF2YWx1ZVtpXSA9IHBzdDsKKwkJfQorCSAgICAgIHBzdCArPSAyOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAvKiBGYWxsIHRocm91Z2guICAqLworI2VuZGlmCisJY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJICAvKiBPbiB0aGUgb3V0Z29pbmcgc3RhY2sgYWxsIHZhbHVlcyBhcmUgYWxpZ25lZCB0byA4ICovCisJICAvKiB0aGVyZSBhcmUgMTMgNjRiaXQgZmxvYXRpbmcgcG9pbnQgcmVnaXN0ZXJzICovCisKKwkgIGlmIChwZnIgPCBlbmRfcGZyICYmIGkgPCBuZml4ZWRhcmdzKQorCSAgICB7CisJICAgICAgYXZhbHVlW2ldID0gcGZyOworCSAgICAgIHBmcisrOworCSAgICB9CisJICBlbHNlCisJICAgIGF2YWx1ZVtpXSA9IHBzdDsKKwkgIHBzdCsrOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX0ZMT0FUOgorCSAgaWYgKHBmciA8IGVuZF9wZnIgJiYgaSA8IG5maXhlZGFyZ3MpCisJICAgIHsKKwkgICAgICAvKiBGbG9hdCB2YWx1ZXMgYXJlIHN0b3JlZCBhcyBkb3VibGVzIGluIHRoZQorCQkgZmZpX2Nsb3N1cmVfTElOVVg2NCBjb2RlLiAgRml4IHRoZW0gaGVyZS4gICovCisJICAgICAgcGZyLT5mID0gKGZsb2F0KSBwZnItPmQ7CisJICAgICAgYXZhbHVlW2ldID0gcGZyOworCSAgICAgIHBmcisrOworCSAgICB9CisJICBlbHNlCisJICAgIGF2YWx1ZVtpXSA9IHBzdDsKKwkgIHBzdCsrOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgRkZJX0FTU0VSVCAoMCk7CisJfQorCisgICAgICBpKys7CisgICAgfQorCisKKyAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcnZhbHVlLCBhdmFsdWUsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisKKyAgLyogVGVsbCBmZmlfY2xvc3VyZV9MSU5VWDY0IGhvdyB0byBwZXJmb3JtIHJldHVybiB0eXBlIHByb21vdGlvbnMuICAqLworICBpZiAoKGNpZi0+ZmxhZ3MgJiBGTEFHX1JFVFVSTlNfU01TVCkgIT0gMCkKKyAgICB7CisgICAgICBpZiAoKGNpZi0+ZmxhZ3MgJiBGTEFHX1JFVFVSTlNfRlApID09IDApCisJcmV0dXJuIEZGSV9WMl9UWVBFX1NNQUxMX1NUUlVDVCArIGNpZi0+cnR5cGUtPnNpemUgLSAxOworICAgICAgZWxzZSBpZiAoKGNpZi0+ZmxhZ3MgJiBGTEFHX1JFVFVSTlNfNjRCSVRTKSAhPSAwKQorCXJldHVybiBGRklfVjJfVFlQRV9ET1VCTEVfSE9NT0c7CisgICAgICBlbHNlCisJcmV0dXJuIEZGSV9WMl9UWVBFX0ZMT0FUX0hPTU9HOworICAgIH0KKyAgcmV0dXJuIGNpZi0+cnR5cGUtPnR5cGU7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX3Bvd2VycGMuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpX3Bvd2VycGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTYxNjUzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfcG93ZXJwYy5oCkBAIC0wLDAgKzEsNzcgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmZmlfcG93ZXJwYy5oIC0gQ29weXJpZ2h0IChDKSAyMDEzIElCTQorICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAxMSBBbnRob255IEdyZWVuCisgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDExIEt5bGUgTW9mZmV0dAorICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMKKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTggR2VvZmZyZXkgS2VhdGluZworCisgICBQb3dlclBDIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK2VudW0geworICAvKiBUaGUgYXNzZW1ibHkgZGVwZW5kcyBvbiB0aGVzZSBleGFjdCBmbGFncy4gICovCisgIC8qIFRoZXNlIGdvIGluIGNyNyAqLworICBGTEFHX1JFVFVSTlNfU01TVAk9IDEgPDwgKDMxLTMxKSwgLyogVXNlZCBmb3IgRkZJX1NZU1Ygc21hbGwgc3RydWN0cy4gICovCisgIEZMQUdfUkVUVVJOU19OT1RISU5HICA9IDEgPDwgKDMxLTMwKSwKKyAgRkxBR19SRVRVUk5TX0ZQICAgICAgID0gMSA8PCAoMzEtMjkpLAorICBGTEFHX1JFVFVSTlNfNjRCSVRTICAgPSAxIDw8ICgzMS0yOCksCisKKyAgLyogVGhpcyBnb2VzIGluIGNyNiAqLworICBGTEFHX1JFVFVSTlNfMTI4QklUUyAgPSAxIDw8ICgzMS0yNyksCisKKyAgRkxBR19DT01QQVQJCT0gMSA8PCAoMzEtIDgpLCAvKiBOb3QgdXNlZCBieSBhc3NlbWJseSAqLworCisgIC8qIFRoZXNlIGdvIGluIGNyMSAqLworICBGTEFHX0FSR19ORUVEU19DT1BZICAgPSAxIDw8ICgzMS0gNyksIC8qIFVzZWQgYnkgc3lzdiBjb2RlICovCisgIEZMQUdfQVJHX05FRURTX1BTQVZFICA9IEZMQUdfQVJHX05FRURTX0NPUFksIC8qIFVzZWQgYnkgbGludXg2NCBjb2RlICovCisgIEZMQUdfRlBfQVJHVU1FTlRTICAgICA9IDEgPDwgKDMxLSA2KSwgLyogY3IxLmVxOyBzcGVjaWZpZWQgYnkgQUJJICovCisgIEZMQUdfNF9HUFJfQVJHVU1FTlRTICA9IDEgPDwgKDMxLSA1KSwKKyAgRkxBR19SRVRWQUxfUkVGRVJFTkNFID0gMSA8PCAoMzEtIDQpCit9OworCit0eXBlZGVmIHVuaW9uCit7CisgIGZsb2F0IGY7CisgIGRvdWJsZSBkOworfSBmZmlfZGJsZmw7CisKK3ZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9TWVNWICh2b2lkKTsKK3ZvaWQgRkZJX0hJRERFTiBmZmlfY2FsbF9TWVNWKGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCwgdW5zaWduZWQsIHVuc2lnbmVkICosCisJCQkgICAgICB2b2lkICgqKSh2b2lkKSk7CisKK3ZvaWQgRkZJX0hJRERFTiBmZmlfcHJlcF90eXBlc19zeXN2IChmZmlfYWJpKTsKK2ZmaV9zdGF0dXMgRkZJX0hJRERFTiBmZmlfcHJlcF9jaWZfc3lzdiAoZmZpX2NpZiAqKTsKK2ludCBGRklfSElEREVOIGZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWIChmZmlfY2xvc3VyZSAqLCB2b2lkICosIHVuc2lnbmVkIGxvbmcgKiwKKwkJCQkJZmZpX2RibGZsICosIHVuc2lnbmVkIGxvbmcgKik7CisKK3ZvaWQgRkZJX0hJRERFTiBmZmlfY2FsbF9MSU5VWDY0KGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkJCSB1bnNpZ25lZCBsb25nICosIHZvaWQgKCopKHZvaWQpKTsKK3ZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9MSU5VWDY0ICh2b2lkKTsKKwordm9pZCBGRklfSElEREVOIGZmaV9wcmVwX3R5cGVzX2xpbnV4NjQgKGZmaV9hYmkpOworZmZpX3N0YXR1cyBGRklfSElEREVOIGZmaV9wcmVwX2NpZl9saW51eDY0IChmZmlfY2lmICopOworZmZpX3N0YXR1cyBGRklfSElEREVOIGZmaV9wcmVwX2NpZl9saW51eDY0X3ZhciAoZmZpX2NpZiAqLCB1bnNpZ25lZCBpbnQsCisJCQkJCQl1bnNpZ25lZCBpbnQpOwordm9pZCBGRklfSElEREVOIGZmaV9wcmVwX2FyZ3M2NCAoZXh0ZW5kZWRfY2lmICosIHVuc2lnbmVkIGxvbmcgKmNvbnN0KTsKK2ludCBGRklfSElEREVOIGZmaV9jbG9zdXJlX2hlbHBlcl9MSU5VWDY0IChmZmlfY2xvc3VyZSAqLCB2b2lkICosCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgKiwgZmZpX2RibGZsICopOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfc3lzdi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZmlfc3lzdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZTg1ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaV9zeXN2LmMKQEAgLTAsMCArMSw5MzEgQEAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmZmlfc3lzdi5jIC0gQ29weXJpZ2h0IChDKSAyMDEzIElCTQorICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAxMSBBbnRob255IEdyZWVuCisgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAyMDExIEt5bGUgTW9mZmV0dAorICAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgMjAwOCBSZWQgSGF0LCBJbmMKKyAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMKKyAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDE5OTggR2VvZmZyZXkgS2VhdGluZworCisgICBQb3dlclBDIEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisKKyAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgICBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAgIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICAgcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgICBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworICAgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICAgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgICBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKKyAgIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpbmNsdWRlICJmZmkuaCIKKworI2lmbmRlZiBQT1dFUlBDNjQKKyNpbmNsdWRlICJmZmlfY29tbW9uLmgiCisjaW5jbHVkZSAiZmZpX3Bvd2VycGMuaCIKKworCisvKiBBYm91dCB0aGUgU1lTViBBQkkuICAqLworI2RlZmluZSBBU01fTkVFRFNfUkVHSVNURVJTIDQKKyNkZWZpbmUgTlVNX0dQUl9BUkdfUkVHSVNURVJTIDgKKyNkZWZpbmUgTlVNX0ZQUl9BUkdfUkVHSVNURVJTIDgKKworCisjaWYgSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UICYmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisvKiBBZGp1c3Qgc2l6ZSBvZiBmZmlfdHlwZV9sb25nZG91YmxlLiAgKi8KK3ZvaWQgRkZJX0hJRERFTgorZmZpX3ByZXBfdHlwZXNfc3lzdiAoZmZpX2FiaSBhYmkpCit7CisgIGlmICgoYWJpICYgKEZGSV9TWVNWIHwgRkZJX1NZU1ZfTE9OR19ET1VCTEVfMTI4KSkgPT0gRkZJX1NZU1YpCisgICAgeworICAgICAgZmZpX3R5cGVfbG9uZ2RvdWJsZS5zaXplID0gODsKKyAgICAgIGZmaV90eXBlX2xvbmdkb3VibGUuYWxpZ25tZW50ID0gODsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBmZmlfdHlwZV9sb25nZG91YmxlLnNpemUgPSAxNjsKKyAgICAgIGZmaV90eXBlX2xvbmdkb3VibGUuYWxpZ25tZW50ID0gMTY7CisgICAgfQorfQorI2VuZGlmCisKKy8qIFRyYW5zZm9ybSBsb25nIGRvdWJsZSwgZG91YmxlIGFuZCBmbG9hdCB0byBvdGhlciB0eXBlcyBhcyBwZXIgYWJpLiAgKi8KK3N0YXRpYyBpbnQKK3RyYW5zbGF0ZV9mbG9hdCAoaW50IGFiaSwgaW50IHR5cGUpCit7CisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKyAgaWYgKHR5cGUgPT0gRkZJX1RZUEVfTE9OR0RPVUJMRQorICAgICAgJiYgKGFiaSAmIEZGSV9TWVNWX0xPTkdfRE9VQkxFXzEyOCkgPT0gMCkKKyAgICB0eXBlID0gRkZJX1RZUEVfRE9VQkxFOworI2VuZGlmCisgIGlmICgoYWJpICYgRkZJX1NZU1ZfU09GVF9GTE9BVCkgIT0gMCkKKyAgICB7CisgICAgICBpZiAodHlwZSA9PSBGRklfVFlQRV9GTE9BVCkKKwl0eXBlID0gRkZJX1RZUEVfVUlOVDMyOworICAgICAgZWxzZSBpZiAodHlwZSA9PSBGRklfVFlQRV9ET1VCTEUpCisJdHlwZSA9IEZGSV9UWVBFX1VJTlQ2NDsKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorICAgICAgZWxzZSBpZiAodHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQorCXR5cGUgPSBGRklfVFlQRV9VSU5UMTI4OworICAgIH0KKyAgZWxzZSBpZiAoKGFiaSAmIEZGSV9TWVNWX0lCTV9MT05HX0RPVUJMRSkgPT0gMCkKKyAgICB7CisgICAgICBpZiAodHlwZSA9PSBGRklfVFlQRV9MT05HRE9VQkxFKQorCXR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7CisjZW5kaWYKKyAgICB9CisgIHJldHVybiB0eXBlOworfQorCisvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nICovCitzdGF0aWMgZmZpX3N0YXR1cworZmZpX3ByZXBfY2lmX3N5c3ZfY29yZSAoZmZpX2NpZiAqY2lmKQoreworICBmZmlfdHlwZSAqKnB0cjsKKyAgdW5zaWduZWQgYnl0ZXM7CisgIHVuc2lnbmVkIGksIGZwYXJnX2NvdW50ID0gMCwgaW50YXJnX2NvdW50ID0gMDsKKyAgdW5zaWduZWQgZmxhZ3MgPSBjaWYtPmZsYWdzOworICB1bnNpZ25lZCBzdHJ1Y3RfY29weV9zaXplID0gMDsKKyAgdW5zaWduZWQgdHlwZSA9IGNpZi0+cnR5cGUtPnR5cGU7CisgIHVuc2lnbmVkIHNpemUgPSBjaWYtPnJ0eXBlLT5zaXplOworCisgIC8qIFRoZSBtYWNoaW5lLWluZGVwZW5kZW50IGNhbGN1bGF0aW9uIG9mIGNpZi0+Ynl0ZXMgZG9lc24ndCB3b3JrCisgICAgIGZvciB1cy4gIFJlZG8gdGhlIGNhbGN1bGF0aW9uLiAgKi8KKworICAvKiBTcGFjZSBmb3IgdGhlIGZyYW1lIHBvaW50ZXIsIGNhbGxlZSdzIExSLCBhbmQgdGhlIGFzbSdzIHRlbXAgcmVncy4gICovCisgIGJ5dGVzID0gKDIgKyBBU01fTkVFRFNfUkVHSVNURVJTKSAqIHNpemVvZiAoaW50KTsKKworICAvKiBTcGFjZSBmb3IgdGhlIEdQUiByZWdpc3RlcnMuICAqLworICBieXRlcyArPSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgKiBzaXplb2YgKGludCk7CisKKyAgLyogUmV0dXJuIHZhbHVlIGhhbmRsaW5nLiAgVGhlIHJ1bGVzIGZvciBTWVNWIGFyZSBhcyBmb2xsb3dzOgorICAgICAtIDMyLWJpdCAob3IgbGVzcykgaW50ZWdlciB2YWx1ZXMgYXJlIHJldHVybmVkIGluIGdwcjM7CisgICAgIC0gU3RydWN0dXJlcyBvZiBzaXplIDw9IDQgYnl0ZXMgYWxzbyByZXR1cm5lZCBpbiBncHIzOworICAgICAtIDY0LWJpdCBpbnRlZ2VyIHZhbHVlcyBhbmQgc3RydWN0dXJlcyBiZXR3ZWVuIDUgYW5kIDggYnl0ZXMgYXJlIHJldHVybmVkCisgICAgIGluIGdwcjMgYW5kIGdwcjQ7CisgICAgIC0gTGFyZ2VyIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBzcGFjZSBhbmQgYSBwb2ludGVyIGlzIHBhc3NlZCBhcworICAgICB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgIC0gU2luZ2xlL2RvdWJsZSBGUCB2YWx1ZXMgYXJlIHJldHVybmVkIGluIGZwcjE7CisgICAgIC0gbG9uZyBkb3VibGVzIChpZiBub3QgZXF1aXZhbGVudCB0byBkb3VibGUpIGFyZSByZXR1cm5lZCBpbgorICAgICBmcHIxLGZwcjIgZm9yIExpbnV4IGFuZCBhcyBmb3IgbGFyZ2Ugc3RydWN0cyBmb3IgU3lzVi4gICovCisKKyAgdHlwZSA9IHRyYW5zbGF0ZV9mbG9hdCAoY2lmLT5hYmksIHR5cGUpOworCisgIHN3aXRjaCAodHlwZSkKKyAgICB7CisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKyAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfMTI4QklUUzsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisjZW5kaWYKKyAgICBjYXNlIEZGSV9UWVBFX0RPVUJMRToKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU182NEJJVFM7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgIGNhc2UgRkZJX1RZUEVfRkxPQVQ6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfRlA7CisjaWZkZWYgX19OT19GUFJTX18KKyAgICAgIHJldHVybiBGRklfQkFEX0FCSTsKKyNlbmRpZgorICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1VJTlQxMjg6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfMTI4QklUUzsKKyAgICAgIC8qIEZhbGwgdGhyb3VnaC4gICovCisgICAgY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFVSTlNfNjRCSVRTOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyAgICAgIC8qIFRoZSBmaW5hbCBTWVNWIEFCSSBzYXlzIHRoYXQgc3RydWN0dXJlcyBzbWFsbGVyIG9yIGVxdWFsIDggYnl0ZXMKKwkgYXJlIHJldHVybmVkIGluIHIzL3I0LiAgQSBkcmFmdCBBQkkgdXNlZCBieSBsaW51eCBpbnN0ZWFkCisJIHJldHVybnMgdGhlbSBpbiBtZW1vcnkuICAqLworICAgICAgaWYgKChjaWYtPmFiaSAmIEZGSV9TWVNWX1NUUlVDVF9SRVQpICE9IDAgJiYgc2l6ZSA8PSA4KQorCXsKKwkgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19TTVNUOworCSAgYnJlYWs7CisJfQorICAgICAgaW50YXJnX2NvdW50Kys7CisgICAgICBmbGFncyB8PSBGTEFHX1JFVFZBTF9SRUZFUkVOQ0U7CisgICAgICAvKiBGYWxsIHRocm91Z2guICAqLworICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKKyAgICAgIGZsYWdzIHw9IEZMQUdfUkVUVVJOU19OT1RISU5HOworICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgLyogUmV0dXJucyAzMi1iaXQgaW50ZWdlciwgb3Igc2ltaWxhci4gIE5vdGhpbmcgdG8gZG8gaGVyZS4gICovCisgICAgICBicmVhazsKKyAgICB9CisKKyAgLyogVGhlIGZpcnN0IE5VTV9HUFJfQVJHX1JFR0lTVEVSUyB3b3JkcyBvZiBpbnRlZ2VyIGFyZ3VtZW50cywgYW5kIHRoZQorICAgICBmaXJzdCBOVU1fRlBSX0FSR19SRUdJU1RFUlMgZnAgYXJndW1lbnRzLCBnbyBpbiByZWdpc3RlcnM7IHRoZSByZXN0CisgICAgIGdvZXMgb24gdGhlIHN0YWNrLiAgU3RydWN0dXJlcyBhbmQgbG9uZyBkb3VibGVzIChpZiBub3QgZXF1aXZhbGVudAorICAgICB0byBkb3VibGUpIGFyZSBwYXNzZWQgYXMgYSBwb2ludGVyIHRvIGEgY29weSBvZiB0aGUgc3RydWN0dXJlLgorICAgICBTdHVmZiBvbiB0aGUgc3RhY2sgbmVlZHMgdG8ga2VlcCBwcm9wZXIgYWxpZ25tZW50LiAgKi8KKyAgZm9yIChwdHIgPSBjaWYtPmFyZ190eXBlcywgaSA9IGNpZi0+bmFyZ3M7IGkgPiAwOyBpLS0sIHB0cisrKQorICAgIHsKKyAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGVudW0gPSAoKnB0ciktPnR5cGU7CisKKyAgICAgIHR5cGVudW0gPSB0cmFuc2xhdGVfZmxvYXQgKGNpZi0+YWJpLCB0eXBlbnVtKTsKKworICAgICAgc3dpdGNoICh0eXBlbnVtKQorCXsKKyNpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorCWNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKwkgIGZwYXJnX2NvdW50Kys7CisJICAvKiBGYWxsIHRocnUgKi8KKyNlbmRpZgorCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCSAgZnBhcmdfY291bnQrKzsKKwkgIC8qIElmIHRoaXMgRlAgYXJnIGlzIGdvaW5nIG9uIHRoZSBzdGFjaywgaXQgbXVzdCBiZQorCSAgICAgOC1ieXRlLWFsaWduZWQuICAqLworCSAgaWYgKGZwYXJnX2NvdW50ID4gTlVNX0ZQUl9BUkdfUkVHSVNURVJTCisJICAgICAgJiYgaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUworCSAgICAgICYmIGludGFyZ19jb3VudCAlIDIgIT0gMCkKKwkgICAgaW50YXJnX2NvdW50Kys7CisjaWZkZWYgX19OT19GUFJTX18KKwkgIHJldHVybiBGRklfQkFEX0FCSTsKKyNlbmRpZgorCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX0ZMT0FUOgorCSAgZnBhcmdfY291bnQrKzsKKyNpZmRlZiBfX05PX0ZQUlNfXworCSAgcmV0dXJuIEZGSV9CQURfQUJJOworI2VuZGlmCisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfVUlOVDEyODoKKwkgIC8qIEEgbG9uZyBkb3VibGUgaW4gRkZJX0xJTlVYX1NPRlRfRkxPQVQgY2FuIHVzZSBvbmx5IGEgc2V0CisJICAgICBvZiBmb3VyIGNvbnNlY3V0aXZlIGdwcnMuIElmIHdlIGRvIG5vdCBoYXZlIGVub3VnaCwgd2UKKwkgICAgIGhhdmUgdG8gYWRqdXN0IHRoZSBpbnRhcmdfY291bnQgdmFsdWUuICAqLworCSAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgLSAzCisJICAgICAgJiYgaW50YXJnX2NvdW50IDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorCSAgICBpbnRhcmdfY291bnQgPSBOVU1fR1BSX0FSR19SRUdJU1RFUlM7CisJICBpbnRhcmdfY291bnQgKz0gNDsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJICAvKiAnbG9uZyBsb25nJyBhcmd1bWVudHMgYXJlIHBhc3NlZCBhcyB0d28gd29yZHMsIGJ1dAorCSAgICAgZWl0aGVyIGJvdGggd29yZHMgbXVzdCBmaXQgaW4gcmVnaXN0ZXJzIG9yIGJvdGggZ28KKwkgICAgIG9uIHRoZSBzdGFjay4gIElmIHRoZXkgZ28gb24gdGhlIHN0YWNrLCB0aGV5IG11c3QKKwkgICAgIGJlIDgtYnl0ZS1hbGlnbmVkLgorCisJICAgICBBbHNvLCBvbmx5IGNlcnRhaW4gcmVnaXN0ZXIgcGFpcnMgY2FuIGJlIHVzZWQgZm9yCisJICAgICBwYXNzaW5nIGxvbmcgbG9uZyBpbnQgLS0gc3BlY2lmaWNhbGx5IChyMyxyNCksIChyNSxyNiksCisJICAgICAocjcscjgpLCAocjkscjEwKS4gICovCisJICBpZiAoaW50YXJnX2NvdW50ID09IE5VTV9HUFJfQVJHX1JFR0lTVEVSUy0xCisJICAgICAgfHwgaW50YXJnX2NvdW50ICUgMiAhPSAwKQorCSAgICBpbnRhcmdfY291bnQrKzsKKwkgIGludGFyZ19jb3VudCArPSAyOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9UWVBFX1NUUlVDVDoKKwkgIC8qIFdlIG11c3QgYWxsb2NhdGUgc3BhY2UgZm9yIGEgY29weSBvZiB0aGVzZSB0byBlbmZvcmNlCisJICAgICBwYXNzLWJ5LXZhbHVlLiAgUGFkIHRoZSBzcGFjZSB1cCB0byBhIG11bHRpcGxlIG9mIDE2CisJICAgICBieXRlcyAodGhlIG1heGltdW0gYWxpZ25tZW50IHJlcXVpcmVkIGZvciBhbnl0aGluZyB1bmRlcgorCSAgICAgdGhlIFNZU1YgQUJJKS4gICovCisJICBzdHJ1Y3RfY29weV9zaXplICs9ICgoKnB0ciktPnNpemUgKyAxNSkgJiB+MHhGOworCSAgLyogRmFsbCB0aHJvdWdoIChhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHBvaW50ZXIpLiAgKi8KKworCWNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKKwljYXNlIEZGSV9UWVBFX0lOVDoKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1VJTlQxNjoKKwljYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAvKiBFdmVyeXRoaW5nIGVsc2UgaXMgcGFzc2VkIGFzIGEgNC1ieXRlIHdvcmQgaW4gYSBHUFIsIGVpdGhlcgorCSAgICAgdGhlIG9iamVjdCBpdHNlbGYgb3IgYSBwb2ludGVyIHRvIGl0LiAgKi8KKwkgIGludGFyZ19jb3VudCsrOworCSAgYnJlYWs7CisKKwlkZWZhdWx0OgorCSAgRkZJX0FTU0VSVCAoMCk7CisJfQorICAgIH0KKworICBpZiAoZnBhcmdfY291bnQgIT0gMCkKKyAgICBmbGFncyB8PSBGTEFHX0ZQX0FSR1VNRU5UUzsKKyAgaWYgKGludGFyZ19jb3VudCA+IDQpCisgICAgZmxhZ3MgfD0gRkxBR180X0dQUl9BUkdVTUVOVFM7CisgIGlmIChzdHJ1Y3RfY29weV9zaXplICE9IDApCisgICAgZmxhZ3MgfD0gRkxBR19BUkdfTkVFRFNfQ09QWTsKKworICAvKiBTcGFjZSBmb3IgdGhlIEZQUiByZWdpc3RlcnMsIGlmIG5lZWRlZC4gICovCisgIGlmIChmcGFyZ19jb3VudCAhPSAwKQorICAgIGJ5dGVzICs9IE5VTV9GUFJfQVJHX1JFR0lTVEVSUyAqIHNpemVvZiAoZG91YmxlKTsKKworICAvKiBTdGFjayBzcGFjZS4gICovCisgIGlmIChpbnRhcmdfY291bnQgPiBOVU1fR1BSX0FSR19SRUdJU1RFUlMpCisgICAgYnl0ZXMgKz0gKGludGFyZ19jb3VudCAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUykgKiBzaXplb2YgKGludCk7CisgIGlmIChmcGFyZ19jb3VudCA+IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKKyAgICBieXRlcyArPSAoZnBhcmdfY291bnQgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpICogc2l6ZW9mIChkb3VibGUpOworCisgIC8qIFRoZSBzdGFjayBzcGFjZSBhbGxvY2F0ZWQgbmVlZHMgdG8gYmUgYSBtdWx0aXBsZSBvZiAxNiBieXRlcy4gICovCisgIGJ5dGVzID0gKGJ5dGVzICsgMTUpICYgfjB4RjsKKworICAvKiBBZGQgaW4gdGhlIHNwYWNlIGZvciB0aGUgY29waWVkIHN0cnVjdHVyZXMuICAqLworICBieXRlcyArPSBzdHJ1Y3RfY29weV9zaXplOworCisgIGNpZi0+ZmxhZ3MgPSBmbGFnczsKKyAgY2lmLT5ieXRlcyA9IGJ5dGVzOworCisgIHJldHVybiBGRklfT0s7Cit9CisKK2ZmaV9zdGF0dXMgRkZJX0hJRERFTgorZmZpX3ByZXBfY2lmX3N5c3YgKGZmaV9jaWYgKmNpZikKK3sKKyAgaWYgKChjaWYtPmFiaSAmIEZGSV9TWVNWKSA9PSAwKQorICAgIHsKKyAgICAgIC8qIFRoaXMgY2FsbCBpcyBmcm9tIG9sZCBjb2RlLiAgVHJhbnNsYXRlIHRvIG5ldyBBQkkgdmFsdWVzLiAgKi8KKyAgICAgIGNpZi0+ZmxhZ3MgfD0gRkxBR19DT01QQVQ7CisgICAgICBzd2l0Y2ggKGNpZi0+YWJpKQorCXsKKwlkZWZhdWx0OgorCSAgcmV0dXJuIEZGSV9CQURfQUJJOworCisJY2FzZSBGRklfQ09NUEFUX1NZU1Y6CisJICBjaWYtPmFiaSA9IEZGSV9TWVNWIHwgRkZJX1NZU1ZfU1RSVUNUX1JFVCB8IEZGSV9TWVNWX0xPTkdfRE9VQkxFXzEyODsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfQ09NUEFUX0dDQ19TWVNWOgorCSAgY2lmLT5hYmkgPSBGRklfU1lTViB8IEZGSV9TWVNWX0xPTkdfRE9VQkxFXzEyODsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfQ09NUEFUX0xJTlVYOgorCSAgY2lmLT5hYmkgPSAoRkZJX1NZU1YgfCBGRklfU1lTVl9JQk1fTE9OR19ET1VCTEUKKwkJICAgICAgfCBGRklfU1lTVl9MT05HX0RPVUJMRV8xMjgpOworCSAgYnJlYWs7CisKKwljYXNlIEZGSV9DT01QQVRfTElOVVhfU09GVF9GTE9BVDoKKwkgIGNpZi0+YWJpID0gKEZGSV9TWVNWIHwgRkZJX1NZU1ZfU09GVF9GTE9BVCB8IEZGSV9TWVNWX0lCTV9MT05HX0RPVUJMRQorCQkgICAgICB8IEZGSV9TWVNWX0xPTkdfRE9VQkxFXzEyOCk7CisJICBicmVhazsKKwl9CisgICAgfQorICByZXR1cm4gZmZpX3ByZXBfY2lmX3N5c3ZfY29yZSAoY2lmKTsKK30KKworLyogZmZpX3ByZXBfYXJnc19TWVNWIGlzIGNhbGxlZCBieSB0aGUgYXNzZW1ibHkgcm91dGluZSBvbmNlIHN0YWNrIHNwYWNlCisgICBoYXMgYmVlbiBhbGxvY2F0ZWQgZm9yIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50cy4KKworICAgVGhlIHN0YWNrIGxheW91dCB3ZSB3YW50IGxvb2tzIGxpa2UgdGhpczoKKworICAgfCAgIFJldHVybiBhZGRyZXNzIGZyb20gZmZpX2NhbGxfU1lTViA0Ynl0ZXMJfAloaWdoZXIgYWRkcmVzc2VzCisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICB8ICAgUHJldmlvdXMgYmFja2NoYWluIHBvaW50ZXIJNAl8ICAgICAgIHN0YWNrIHBvaW50ZXIgaGVyZQorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfDwrIDw8PAlvbiBlbnRyeSB0bworICAgfCAgIFNhdmVkIHIyOC1yMzEJCQk0KjQJfCB8CWZmaV9jYWxsX1NZU1YKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorICAgfCAgIEdQUiByZWdpc3RlcnMgcjMtcjEwCQk4KjQJfCB8CWZmaV9jYWxsX1NZU1YKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAorICAgfCAgIEZQUiByZWdpc3RlcnMgZjEtZjggKG9wdGlvbmFsKQk4KjgJfCB8CisgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IHwJc3RhY2sJfAorICAgfCAgIFNwYWNlIGZvciBjb3BpZWQgc3RydWN0dXJlcwkJfCB8CWdyb3dzCXwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlkb3duICAgIFYKKyAgIHwgICBQYXJhbWV0ZXJzIHRoYXQgZGlkbid0IGZpdCBpbiByZWdpc3RlcnMgIHwgfAorICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCB8CWxvd2VyIGFkZHJlc3NlcworICAgfCAgIFNwYWNlIGZvciBjYWxsZWUncyBMUgkJNAl8IHwKKyAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgfAlzdGFjayBwb2ludGVyIGhlcmUKKyAgIHwgICBDdXJyZW50IGJhY2tjaGFpbiBwb2ludGVyCTQJfC0vCWR1cmluZworICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgIDw8PAlmZmlfY2FsbF9TWVNWCisKKyovCisKK3ZvaWQgRkZJX0hJRERFTgorZmZpX3ByZXBfYXJnc19TWVNWIChleHRlbmRlZF9jaWYgKmVjaWYsIHVuc2lnbmVkICpjb25zdCBzdGFjaykKK3sKKyAgY29uc3QgdW5zaWduZWQgYnl0ZXMgPSBlY2lmLT5jaWYtPmJ5dGVzOworICBjb25zdCB1bnNpZ25lZCBmbGFncyA9IGVjaWYtPmNpZi0+ZmxhZ3M7CisKKyAgdHlwZWRlZiB1bmlvbgorICB7CisgICAgY2hhciAqYzsKKyAgICB1bnNpZ25lZCAqdTsKKyAgICBsb25nIGxvbmcgKmxsOworICAgIGZsb2F0ICpmOworICAgIGRvdWJsZSAqZDsKKyAgfSB2YWxwOworCisgIC8qICdzdGFja3RvcCcgcG9pbnRzIGF0IHRoZSBwcmV2aW91cyBiYWNrY2hhaW4gcG9pbnRlci4gICovCisgIHZhbHAgc3RhY2t0b3A7CisKKyAgLyogJ2dwcl9iYXNlJyBwb2ludHMgYXQgdGhlIHNwYWNlIGZvciBncHIzLCBhbmQgZ3Jvd3MgdXB3YXJkcyBhcworICAgICB3ZSB1c2UgR1BSIHJlZ2lzdGVycy4gICovCisgIHZhbHAgZ3ByX2Jhc2U7CisgIGludCBpbnRhcmdfY291bnQ7CisKKyNpZm5kZWYgX19OT19GUFJTX18KKyAgLyogJ2Zwcl9iYXNlJyBwb2ludHMgYXQgdGhlIHNwYWNlIGZvciBmcHIxLCBhbmQgZ3Jvd3MgdXB3YXJkcyBhcworICAgICB3ZSB1c2UgRlBSIHJlZ2lzdGVycy4gICovCisgIHZhbHAgZnByX2Jhc2U7CisgIGludCBmcGFyZ19jb3VudDsKKyNlbmRpZgorCisgIC8qICdjb3B5X3NwYWNlJyBncm93cyBkb3duIGFzIHdlIHB1dCBzdHJ1Y3R1cmVzIGluIGl0LiAgSXQgc2hvdWxkCisgICAgIHN0YXkgMTYtYnl0ZSBhbGlnbmVkLiAgKi8KKyAgdmFscCBjb3B5X3NwYWNlOworCisgIC8qICduZXh0X2FyZycgZ3Jvd3MgdXAgYXMgd2UgcHV0IHBhcmFtZXRlcnMgaW4gaXQuICAqLworICB2YWxwIG5leHRfYXJnOworCisgIGludCBpOworICBmZmlfdHlwZSAqKnB0cjsKKyNpZm5kZWYgX19OT19GUFJTX18KKyAgZG91YmxlIGRvdWJsZV90bXA7CisjZW5kaWYKKyAgdW5pb24KKyAgeworICAgIHZvaWQgKip2OworICAgIGNoYXIgKipjOworICAgIHNpZ25lZCBjaGFyICoqc2M7CisgICAgdW5zaWduZWQgY2hhciAqKnVjOworICAgIHNpZ25lZCBzaG9ydCAqKnNzOworICAgIHVuc2lnbmVkIHNob3J0ICoqdXM7CisgICAgdW5zaWduZWQgaW50ICoqdWk7CisgICAgbG9uZyBsb25nICoqbGw7CisgICAgZmxvYXQgKipmOworICAgIGRvdWJsZSAqKmQ7CisgIH0gcF9hcmd2OworICBzaXplX3Qgc3RydWN0X2NvcHlfc2l6ZTsKKyAgdW5zaWduZWQgZ3BydmFsdWU7CisKKyAgc3RhY2t0b3AuYyA9IChjaGFyICopIHN0YWNrICsgYnl0ZXM7CisgIGdwcl9iYXNlLnUgPSBzdGFja3RvcC51IC0gQVNNX05FRURTX1JFR0lTVEVSUyAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUzsKKyAgaW50YXJnX2NvdW50ID0gMDsKKyNpZm5kZWYgX19OT19GUFJTX18KKyAgZnByX2Jhc2UuZCA9IGdwcl9iYXNlLmQgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlM7CisgIGZwYXJnX2NvdW50ID0gMDsKKyAgY29weV9zcGFjZS5jID0gKChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKSA/IGZwcl9iYXNlLmMgOiBncHJfYmFzZS5jKTsKKyNlbHNlCisgIGNvcHlfc3BhY2UuYyA9IGdwcl9iYXNlLmM7CisjZW5kaWYKKyAgbmV4dF9hcmcudSA9IHN0YWNrICsgMjsKKworICAvKiBDaGVjayB0aGF0IGV2ZXJ5dGhpbmcgc3RhcnRzIGFsaWduZWQgcHJvcGVybHkuICAqLworICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIChjaGFyICopIHN0YWNrICYgMHhGKSA9PSAwKTsKKyAgRkZJX0FTU0VSVCAoKCh1bnNpZ25lZCBsb25nKSBjb3B5X3NwYWNlLmMgJiAweEYpID09IDApOworICBGRklfQVNTRVJUICgoKHVuc2lnbmVkIGxvbmcpIHN0YWNrdG9wLmMgJiAweEYpID09IDApOworICBGRklfQVNTRVJUICgoYnl0ZXMgJiAweEYpID09IDApOworICBGRklfQVNTRVJUIChjb3B5X3NwYWNlLmMgPj0gbmV4dF9hcmcuYyk7CisKKyAgLyogRGVhbCB3aXRoIHJldHVybiB2YWx1ZXMgdGhhdCBhcmUgYWN0dWFsbHkgcGFzcy1ieS1yZWZlcmVuY2UuICAqLworICBpZiAoZmxhZ3MgJiBGTEFHX1JFVFZBTF9SRUZFUkVOQ0UpCisgICAgeworICAgICAgKmdwcl9iYXNlLnUrKyA9ICh1bnNpZ25lZCBsb25nKSAoY2hhciAqKSBlY2lmLT5ydmFsdWU7CisgICAgICBpbnRhcmdfY291bnQrKzsKKyAgICB9CisKKyAgLyogTm93IGZvciB0aGUgYXJndW1lbnRzLiAgKi8KKyAgcF9hcmd2LnYgPSBlY2lmLT5hdmFsdWU7CisgIGZvciAocHRyID0gZWNpZi0+Y2lmLT5hcmdfdHlwZXMsIGkgPSBlY2lmLT5jaWYtPm5hcmdzOworICAgICAgIGkgPiAwOworICAgICAgIGktLSwgcHRyKyssIHBfYXJndi52KyspCisgICAgeworICAgICAgdW5zaWduZWQgaW50IHR5cGVudW0gPSAoKnB0ciktPnR5cGU7CisKKyAgICAgIHR5cGVudW0gPSB0cmFuc2xhdGVfZmxvYXQgKGVjaWYtPmNpZi0+YWJpLCB0eXBlbnVtKTsKKworICAgICAgLyogTm93IHRlc3QgdGhlIHRyYW5zbGF0ZWQgdmFsdWUgKi8KKyAgICAgIHN3aXRjaCAodHlwZW51bSkKKwl7CisjaWZuZGVmIF9fTk9fRlBSU19fCisjIGlmIEZGSV9UWVBFX0xPTkdET1VCTEUgIT0gRkZJX1RZUEVfRE9VQkxFCisJY2FzZSBGRklfVFlQRV9MT05HRE9VQkxFOgorCSAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzBdOworCisJICBpZiAoZnBhcmdfY291bnQgPj0gTlVNX0ZQUl9BUkdfUkVHSVNURVJTIC0gMSkKKwkgICAgeworCSAgICAgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTCisJCSAgJiYgaW50YXJnX2NvdW50ICUgMiAhPSAwKQorCQl7CisJCSAgaW50YXJnX2NvdW50Kys7CisJCSAgbmV4dF9hcmcudSsrOworCQl9CisJICAgICAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworCSAgICAgIG5leHRfYXJnLnUgKz0gMjsKKwkgICAgICBkb3VibGVfdG1wID0gKCpwX2FyZ3YuZClbMV07CisJICAgICAgKm5leHRfYXJnLmQgPSBkb3VibGVfdG1wOworCSAgICAgIG5leHRfYXJnLnUgKz0gMjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisJICAgICAgZG91YmxlX3RtcCA9ICgqcF9hcmd2LmQpWzFdOworCSAgICAgICpmcHJfYmFzZS5kKysgPSBkb3VibGVfdG1wOworCSAgICB9CisKKwkgIGZwYXJnX2NvdW50ICs9IDI7CisJICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfRlBfQVJHVU1FTlRTKTsKKwkgIGJyZWFrOworIyBlbmRpZgorCWNhc2UgRkZJX1RZUEVfRE9VQkxFOgorCSAgZG91YmxlX3RtcCA9ICoqcF9hcmd2LmQ7CisKKwkgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCisJICAgIHsKKwkgICAgICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUworCQkgICYmIGludGFyZ19jb3VudCAlIDIgIT0gMCkKKwkJeworCQkgIGludGFyZ19jb3VudCsrOworCQkgIG5leHRfYXJnLnUrKzsKKwkJfQorCSAgICAgICpuZXh0X2FyZy5kID0gZG91YmxlX3RtcDsKKwkgICAgICBuZXh0X2FyZy51ICs9IDI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisJICBmcGFyZ19jb3VudCsrOworCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7CisJICBicmVhazsKKworCWNhc2UgRkZJX1RZUEVfRkxPQVQ6CisJICBkb3VibGVfdG1wID0gKipwX2FyZ3YuZjsKKwkgIGlmIChmcGFyZ19jb3VudCA+PSBOVU1fRlBSX0FSR19SRUdJU1RFUlMpCisJICAgIHsKKwkgICAgICAqbmV4dF9hcmcuZiA9IChmbG9hdCkgZG91YmxlX3RtcDsKKwkgICAgICBuZXh0X2FyZy51ICs9IDE7CisJICAgICAgaW50YXJnX2NvdW50Kys7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgKmZwcl9iYXNlLmQrKyA9IGRvdWJsZV90bXA7CisJICBmcGFyZ19jb3VudCsrOworCSAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHX0ZQX0FSR1VNRU5UUyk7CisJICBicmVhazsKKyNlbmRpZiAvKiBoYXZlIEZQUnMgKi8KKworCWNhc2UgRkZJX1RZUEVfVUlOVDEyODoKKwkgIC8qIFRoZSBzb2Z0IGZsb2F0IEFCSSBmb3IgbG9uZyBkb3VibGVzIHdvcmtzIGxpa2UgdGhpcywgYSBsb25nIGRvdWJsZQorCSAgICAgaXMgcGFzc2VkIGluIGZvdXIgY29uc2VjdXRpdmUgR1BScyBpZiBhdmFpbGFibGUuICBBIG1heGltdW0gb2YgMgorCSAgICAgbG9uZyBkb3VibGVzIGNhbiBiZSBwYXNzZWQgaW4gZ3Bycy4gIElmIHdlIGRvIG5vdCBoYXZlIDQgR1BScworCSAgICAgbGVmdCwgdGhlIGxvbmcgZG91YmxlIGlzIHBhc3NlZCBvbiB0aGUgc3RhY2ssIDQtYnl0ZSBhbGlnbmVkLiAgKi8KKwkgIHsKKwkgICAgdW5zaWduZWQgaW50IGludF90bXA7CisJICAgIHVuc2lnbmVkIGludCBpaTsKKwkgICAgaWYgKGludGFyZ19jb3VudCA+PSBOVU1fR1BSX0FSR19SRUdJU1RFUlMgLSAzKQorCSAgICAgIHsKKwkJaWYgKGludGFyZ19jb3VudCA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKwkJICBpbnRhcmdfY291bnQgPSBOVU1fR1BSX0FSR19SRUdJU1RFUlM7CisJCWZvciAoaWkgPSAwOyBpaSA8IDQ7IGlpKyspCisJCSAgeworCQkgICAgaW50X3RtcCA9ICgqcF9hcmd2LnVpKVtpaV07CisJCSAgICAqbmV4dF9hcmcudSsrID0gaW50X3RtcDsKKwkJICB9CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgeworCQlmb3IgKGlpID0gMDsgaWkgPCA0OyBpaSsrKQorCQkgIHsKKwkJICAgIGludF90bXAgPSAoKnBfYXJndi51aSlbaWldOworCQkgICAgKmdwcl9iYXNlLnUrKyA9IGludF90bXA7CisJCSAgfQorCSAgICAgIH0KKwkgICAgaW50YXJnX2NvdW50ICs9IDQ7CisJICAgIGJyZWFrOworCSAgfQorCisJY2FzZSBGRklfVFlQRV9VSU5UNjQ6CisJY2FzZSBGRklfVFlQRV9TSU5UNjQ6CisJICBpZiAoaW50YXJnX2NvdW50ID09IE5VTV9HUFJfQVJHX1JFR0lTVEVSUy0xKQorCSAgICBpbnRhcmdfY291bnQrKzsKKwkgIGlmIChpbnRhcmdfY291bnQgPj0gTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorCSAgICB7CisJICAgICAgaWYgKGludGFyZ19jb3VudCAlIDIgIT0gMCkKKwkJeworCQkgIGludGFyZ19jb3VudCsrOworCQkgIG5leHRfYXJnLnUrKzsKKwkJfQorCSAgICAgICpuZXh0X2FyZy5sbCA9ICoqcF9hcmd2LmxsOworCSAgICAgIG5leHRfYXJnLnUgKz0gMjsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLyogVGhlIGFiaSBzdGF0ZXMgb25seSBjZXJ0YWluIHJlZ2lzdGVyIHBhaXJzIGNhbiBiZQorCQkgdXNlZCBmb3IgcGFzc2luZyBsb25nIGxvbmcgaW50IHNwZWNpZmljYWxseSAocjMscjQpLAorCQkgKHI1LHI2KSwgKHI3LHI4KSwgKHI5LHIxMCkuICBJZiBuZXh0IGFyZyBpcyBsb25nIGxvbmcKKwkJIGJ1dCBub3QgY29ycmVjdCBzdGFydGluZyByZWdpc3RlciBvZiBwYWlyIHRoZW4gc2tpcAorCQkgdW50aWwgdGhlIHByb3BlciBzdGFydGluZyByZWdpc3Rlci4gICovCisJICAgICAgaWYgKGludGFyZ19jb3VudCAlIDIgIT0gMCkKKwkJeworCQkgIGludGFyZ19jb3VudCArKzsKKwkJICBncHJfYmFzZS51Kys7CisJCX0KKwkgICAgICAqZ3ByX2Jhc2UubGwrKyA9ICoqcF9hcmd2LmxsOworCSAgICB9CisJICBpbnRhcmdfY291bnQgKz0gMjsKKwkgIGJyZWFrOworCisJY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisJICBzdHJ1Y3RfY29weV9zaXplID0gKCgqcHRyKS0+c2l6ZSArIDE1KSAmIH4weEY7CisJICBjb3B5X3NwYWNlLmMgLT0gc3RydWN0X2NvcHlfc2l6ZTsKKwkgIG1lbWNweSAoY29weV9zcGFjZS5jLCAqcF9hcmd2LmMsICgqcHRyKS0+c2l6ZSk7CisKKwkgIGdwcnZhbHVlID0gKHVuc2lnbmVkIGxvbmcpIGNvcHlfc3BhY2UuYzsKKworCSAgRkZJX0FTU0VSVCAoY29weV9zcGFjZS5jID4gbmV4dF9hcmcuYyk7CisJICBGRklfQVNTRVJUIChmbGFncyAmIEZMQUdfQVJHX05FRURTX0NPUFkpOworCSAgZ290byBwdXRncHI7CisKKwljYXNlIEZGSV9UWVBFX1VJTlQ4OgorCSAgZ3BydmFsdWUgPSAqKnBfYXJndi51YzsKKwkgIGdvdG8gcHV0Z3ByOworCWNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNjOworCSAgZ290byBwdXRncHI7CisJY2FzZSBGRklfVFlQRV9VSU5UMTY6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnVzOworCSAgZ290byBwdXRncHI7CisJY2FzZSBGRklfVFlQRV9TSU5UMTY6CisJICBncHJ2YWx1ZSA9ICoqcF9hcmd2LnNzOworCSAgZ290byBwdXRncHI7CisKKwljYXNlIEZGSV9UWVBFX0lOVDoKKwljYXNlIEZGSV9UWVBFX1VJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1NJTlQzMjoKKwljYXNlIEZGSV9UWVBFX1BPSU5URVI6CisKKwkgIGdwcnZhbHVlID0gKipwX2FyZ3YudWk7CisKKwlwdXRncHI6CisJICBpZiAoaW50YXJnX2NvdW50ID49IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKwkgICAgKm5leHRfYXJnLnUrKyA9IGdwcnZhbHVlOworCSAgZWxzZQorCSAgICAqZ3ByX2Jhc2UudSsrID0gZ3BydmFsdWU7CisJICBpbnRhcmdfY291bnQrKzsKKwkgIGJyZWFrOworCX0KKyAgICB9CisKKyAgLyogQ2hlY2sgdGhhdCB3ZSBkaWRuJ3Qgb3ZlcnJ1biB0aGUgc3RhY2suLi4gICovCisgIEZGSV9BU1NFUlQgKGNvcHlfc3BhY2UuYyA+PSBuZXh0X2FyZy5jKTsKKyAgRkZJX0FTU0VSVCAoZ3ByX2Jhc2UudSA8PSBzdGFja3RvcC51IC0gQVNNX05FRURTX1JFR0lTVEVSUyk7CisgIC8qIFRoZSBhc3NlcnQgYmVsb3cgaXMgdGVzdGluZyB0aGF0IHRoZSBudW1iZXIgb2YgaW50ZWdlciBhcmd1bWVudHMgYWdyZWVzCisgICAgIHdpdGggdGhlIG51bWJlciBmb3VuZCBpbiBmZmlfcHJlcF9jaWZfbWFjaGRlcCgpLiAgSG93ZXZlciwgaW50YXJnX2NvdW50CisgICAgIGlzIGluY3JlbWVudGVkIHdoZW5ldmVyIHdlIHBsYWNlIGFuIEZQIGFyZyBvbiB0aGUgc3RhY2ssIHNvIGFjY291bnQgZm9yCisgICAgIHRoYXQgYmVmb3JlIG91ciBhc3NlcnQgdGVzdC4gICovCisjaWZuZGVmIF9fTk9fRlBSU19fCisgIGlmIChmcGFyZ19jb3VudCA+IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKKyAgICBpbnRhcmdfY291bnQgLT0gZnBhcmdfY291bnQgLSBOVU1fRlBSX0FSR19SRUdJU1RFUlM7CisgIEZGSV9BU1NFUlQgKGZwcl9iYXNlLnUKKwkgICAgICA8PSBzdGFja3RvcC51IC0gQVNNX05FRURTX1JFR0lTVEVSUyAtIE5VTV9HUFJfQVJHX1JFR0lTVEVSUyk7CisjZW5kaWYKKyAgRkZJX0FTU0VSVCAoZmxhZ3MgJiBGTEFHXzRfR1BSX0FSR1VNRU5UUyB8fCBpbnRhcmdfY291bnQgPD0gNCk7Cit9CisKKyNkZWZpbmUgTUlOX0NBQ0hFX0xJTkVfU0laRSA4CisKK3N0YXRpYyB2b2lkCitmbHVzaF9pY2FjaGUgKGNoYXIgKndyYWRkciwgY2hhciAqeGFkZHIsIGludCBzaXplKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkgKz0gTUlOX0NBQ0hFX0xJTkVfU0laRSkKKyAgICBfX2FzbV9fIHZvbGF0aWxlICgiaWNiaSAwLCUwOyIgImRjYmYgMCwlMTsiCisJCSAgICAgIDogOiAiciIgKHhhZGRyICsgaSksICJyIiAod3JhZGRyICsgaSkgOiAibWVtb3J5Iik7CisgIF9fYXNtX18gdm9sYXRpbGUgKCJpY2JpIDAsJTA7IiAiZGNiZiAwLCUxOyIgInN5bmM7IiAiaXN5bmM7IgorCQkgICAgOiA6ICJyIih4YWRkciArIHNpemUgLSAxKSwgInIiKHdyYWRkciArIHNpemUgLSAxKQorCQkgICAgOiAibWVtb3J5Iik7Cit9CisKK2ZmaV9zdGF0dXMgRkZJX0hJRERFTgorZmZpX3ByZXBfY2xvc3VyZV9sb2Nfc3lzdiAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsCisJCQkgICBmZmlfY2lmICpjaWYsCisJCQkgICB2b2lkICgqZnVuKSAoZmZpX2NpZiAqLCB2b2lkICosIHZvaWQgKiosIHZvaWQgKiksCisJCQkgICB2b2lkICp1c2VyX2RhdGEsCisJCQkgICB2b2lkICpjb2RlbG9jKQoreworICB1bnNpZ25lZCBpbnQgKnRyYW1wOworCisgIGlmIChjaWYtPmFiaSA8IEZGSV9TWVNWIHx8IGNpZi0+YWJpID49IEZGSV9MQVNUX0FCSSkKKyAgICByZXR1cm4gRkZJX0JBRF9BQkk7CisKKyAgdHJhbXAgPSAodW5zaWduZWQgaW50ICopICZjbG9zdXJlLT50cmFtcFswXTsKKyAgdHJhbXBbMF0gPSAweDdjMDgwMmE2OyAgLyogICBtZmxyICAgIHIwICovCisgIHRyYW1wWzFdID0gMHg0ODAwMDAwZDsgIC8qICAgYmwgICAgICAxMCA8dHJhbXBvbGluZV9pbml0aWFsKzB4MTA+ICovCisgIHRyYW1wWzRdID0gMHg3ZDY4MDJhNjsgIC8qICAgbWZsciAgICByMTEgKi8KKyAgdHJhbXBbNV0gPSAweDdjMDgwM2E2OyAgLyogICBtdGxyICAgIHIwICovCisgIHRyYW1wWzZdID0gMHg4MDBiMDAwMDsgIC8qICAgbHd6ICAgICByMCwwKHIxMSkgKi8KKyAgdHJhbXBbN10gPSAweDgxNmIwMDA0OyAgLyogICBsd3ogICAgIHIxMSw0KHIxMSkgKi8KKyAgdHJhbXBbOF0gPSAweDdjMDkwM2E2OyAgLyogICBtdGN0ciAgIHIwICovCisgIHRyYW1wWzldID0gMHg0ZTgwMDQyMDsgIC8qICAgYmN0ciAqLworICAqKHZvaWQgKiopICZ0cmFtcFsyXSA9ICh2b2lkICopIGZmaV9jbG9zdXJlX1NZU1Y7IC8qIGZ1bmN0aW9uICovCisgICoodm9pZCAqKikgJnRyYW1wWzNdID0gY29kZWxvYzsgICAgICAgICAgICAgICAgICAgLyogY29udGV4dCAqLworCisgIC8qIEZsdXNoIHRoZSBpY2FjaGUuICAqLworICBmbHVzaF9pY2FjaGUgKChjaGFyICopdHJhbXAsIChjaGFyICopY29kZWxvYywgRkZJX1RSQU1QT0xJTkVfU0laRSk7CisKKyAgY2xvc3VyZS0+Y2lmID0gY2lmOworICBjbG9zdXJlLT5mdW4gPSBmdW47CisgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKworICByZXR1cm4gRkZJX09LOworfQorCisvKiBCYXNpY2FsbHkgdGhlIHRyYW1wb2xpbmUgaW52b2tlcyBmZmlfY2xvc3VyZV9TWVNWLCBhbmQgb24KKyAgIGVudHJ5LCByMTEgaG9sZHMgdGhlIGFkZHJlc3Mgb2YgdGhlIGNsb3N1cmUuCisgICBBZnRlciBzdG9yaW5nIHRoZSByZWdpc3RlcnMgdGhhdCBjb3VsZCBwb3NzaWJseSBjb250YWluCisgICBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCBpbnRvIHRoZSBzdGFjayBmcmFtZSBhbmQgc2V0dGluZworICAgdXAgc3BhY2UgZm9yIGEgcmV0dXJuIHZhbHVlLCBmZmlfY2xvc3VyZV9TWVNWIGludm9rZXMgdGhlCisgICBmb2xsb3dpbmcgaGVscGVyIGZ1bmN0aW9uIHRvIGRvIG1vc3Qgb2YgdGhlIHdvcmsuICAqLworCitpbnQKK2ZmaV9jbG9zdXJlX2hlbHBlcl9TWVNWIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgdm9pZCAqcnZhbHVlLAorCQkJIHVuc2lnbmVkIGxvbmcgKnBnciwgZmZpX2RibGZsICpwZnIsCisJCQkgdW5zaWduZWQgbG9uZyAqcHN0KQoreworICAvKiBydmFsdWUgaXMgdGhlIHBvaW50ZXIgdG8gc3BhY2UgZm9yIHJldHVybiB2YWx1ZSBpbiBjbG9zdXJlIGFzc2VtYmx5ICovCisgIC8qIHBnciBpcyB0aGUgcG9pbnRlciB0byB3aGVyZSByMy1yMTAgYXJlIHN0b3JlZCBpbiBmZmlfY2xvc3VyZV9TWVNWICovCisgIC8qIHBmciBpcyB0aGUgcG9pbnRlciB0byB3aGVyZSBmMS1mOCBhcmUgc3RvcmVkIGluIGZmaV9jbG9zdXJlX1NZU1YgICovCisgIC8qIHBzdCBpcyB0aGUgcG9pbnRlciB0byBvdXRnb2luZyBwYXJhbWV0ZXIgc3RhY2sgaW4gb3JpZ2luYWwgY2FsbGVyICovCisKKyAgdm9pZCAqKiAgICAgICAgICBhdmFsdWU7CisgIGZmaV90eXBlICoqICAgICAgYXJnX3R5cGVzOworICBsb25nICAgICAgICAgICAgIGksIGF2bjsKKyNpZm5kZWYgX19OT19GUFJTX18KKyAgbG9uZyAgICAgICAgICAgICBuZiA9IDA7ICAgLyogbnVtYmVyIG9mIGZsb2F0aW5nIHJlZ2lzdGVycyBhbHJlYWR5IHVzZWQgKi8KKyNlbmRpZgorICBsb25nICAgICAgICAgICAgIG5nID0gMDsgICAvKiBudW1iZXIgb2YgZ2VuZXJhbCByZWdpc3RlcnMgYWxyZWFkeSB1c2VkICovCisKKyAgZmZpX2NpZiAqY2lmID0gY2xvc3VyZS0+Y2lmOworICB1bnNpZ25lZCAgICAgICBzaXplICAgICA9IGNpZi0+cnR5cGUtPnNpemU7CisgIHVuc2lnbmVkIHNob3J0IHJ0eXBlbnVtID0gY2lmLT5ydHlwZS0+dHlwZTsKKworICBhdmFsdWUgPSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQgKikpOworCisgIC8qIEZpcnN0IHRyYW5zbGF0ZSBmb3Igc29mdGZsb2F0L25vbmxpbnV4ICovCisgIHJ0eXBlbnVtID0gdHJhbnNsYXRlX2Zsb2F0IChjaWYtPmFiaSwgcnR5cGVudW0pOworCisgIC8qIENvcHkgdGhlIGNhbGxlcidzIHN0cnVjdHVyZSByZXR1cm4gdmFsdWUgYWRkcmVzcyBzbyB0aGF0IHRoZSBjbG9zdXJlCisgICAgIHJldHVybnMgdGhlIGRhdGEgZGlyZWN0bHkgdG8gdGhlIGNhbGxlci4KKyAgICAgRm9yIEZGSV9TWVNWIHRoZSByZXN1bHQgaXMgcGFzc2VkIGluIHIzL3I0IGlmIHRoZSBzdHJ1Y3Qgc2l6ZSBpcyBsZXNzCisgICAgIG9yIGVxdWFsIDggYnl0ZXMuICAqLworICBpZiAocnR5cGVudW0gPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiAhKChjaWYtPmFiaSAmIEZGSV9TWVNWX1NUUlVDVF9SRVQpICE9IDAgJiYgc2l6ZSA8PSA4KSkKKyAgICB7CisgICAgICBydmFsdWUgPSAodm9pZCAqKSAqcGdyOworICAgICAgbmcrKzsKKyAgICAgIHBncisrOworICAgIH0KKworICBpID0gMDsKKyAgYXZuID0gY2lmLT5uYXJnczsKKyAgYXJnX3R5cGVzID0gY2lmLT5hcmdfdHlwZXM7CisKKyAgLyogR3JhYiB0aGUgYWRkcmVzc2VzIG9mIHRoZSBhcmd1bWVudHMgZnJvbSB0aGUgc3RhY2sgZnJhbWUuICAqLworICB3aGlsZSAoaSA8IGF2bikgeworICAgIHVuc2lnbmVkIHNob3J0IHR5cGVudW0gPSBhcmdfdHlwZXNbaV0tPnR5cGU7CisKKyAgICAvKiBXZSBtYXkgbmVlZCB0byBoYW5kbGUgc29tZSB2YWx1ZXMgZGVwZW5kaW5nIG9uIEFCSS4gICovCisgICAgdHlwZW51bSA9IHRyYW5zbGF0ZV9mbG9hdCAoY2lmLT5hYmksIHR5cGVudW0pOworCisgICAgc3dpdGNoICh0eXBlbnVtKQorICAgICAgeworI2lmbmRlZiBfX05PX0ZQUlNfXworICAgICAgY2FzZSBGRklfVFlQRV9GTE9BVDoKKwkvKiBVbmZvcnR1bmF0ZWx5IGZsb2F0IHZhbHVlcyBhcmUgc3RvcmVkIGFzIGRvdWJsZXMKKwkgICBpbiB0aGUgZmZpX2Nsb3N1cmVfU1lTViBjb2RlIChzaW5jZSB3ZSBkb24ndCBjaGVjaworCSAgIHRoZSB0eXBlIGluIHRoYXQgcm91dGluZSkuICAqLworCWlmIChuZiA8IE5VTV9GUFJfQVJHX1JFR0lTVEVSUykKKwkgIHsKKwkgICAgLyogRklYTUU/IGhlcmUgd2UgYXJlIHJlYWxseSBjaGFuZ2luZyB0aGUgdmFsdWVzCisJICAgICAgIHN0b3JlZCBpbiB0aGUgb3JpZ2luYWwgY2FsbGluZyByb3V0aW5lcyBvdXRnb2luZworCSAgICAgICBwYXJhbWV0ZXIgc3RhY2suICBUaGlzIGlzIHByb2JhYmx5IGEgcmVhbGx5CisJICAgICAgIG5hdWdodHkgdGhpbmcgdG8gZG8gYnV0Li4uICAqLworCSAgICBkb3VibGUgdGVtcCA9IHBmci0+ZDsKKwkgICAgcGZyLT5mID0gKGZsb2F0KSB0ZW1wOworCSAgICBhdmFsdWVbaV0gPSBwZnI7CisJICAgIG5mKys7CisJICAgIHBmcisrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gcHN0OworCSAgICBwc3QgKz0gMTsKKwkgIH0KKwlicmVhazsKKworICAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CisJaWYgKG5mIDwgTlVNX0ZQUl9BUkdfUkVHSVNURVJTKQorCSAgeworCSAgICBhdmFsdWVbaV0gPSBwZnI7CisJICAgIG5mKys7CisJICAgIHBmcisrOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgaWYgKCgobG9uZykgcHN0KSAmIDQpCisJICAgICAgcHN0Kys7CisJICAgIGF2YWx1ZVtpXSA9IHBzdDsKKwkgICAgcHN0ICs9IDI7CisJICB9CisJYnJlYWs7CisKKyMgaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKKyAgICAgIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRToKKwlpZiAobmYgPCBOVU1fRlBSX0FSR19SRUdJU1RFUlMgLSAxKQorCSAgeworCSAgICBhdmFsdWVbaV0gPSBwZnI7CisJICAgIHBmciArPSAyOworCSAgICBuZiArPSAyOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgaWYgKCgobG9uZykgcHN0KSAmIDQpCisJICAgICAgcHN0Kys7CisJICAgIGF2YWx1ZVtpXSA9IHBzdDsKKwkgICAgcHN0ICs9IDQ7CisJICAgIG5mID0gODsKKwkgIH0KKwlicmVhazsKKyMgZW5kaWYKKyNlbmRpZgorCisgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQxMjg6CisJLyogVGVzdCBpZiBmb3IgdGhlIHdob2xlIGxvbmcgZG91YmxlLCA0IGdwcnMgYXJlIGF2YWlsYWJsZS4KKwkgICBvdGhlcndpc2UgdGhlIHN0dWZmIGVuZHMgdXAgb24gdGhlIHN0YWNrLiAgKi8KKwlpZiAobmcgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMgLSAzKQorCSAgeworCSAgICBhdmFsdWVbaV0gPSBwZ3I7CisJICAgIHBnciArPSA0OworCSAgICBuZyArPSA0OworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gcHN0OworCSAgICBwc3QgKz0gNDsKKwkgICAgbmcgPSA4KzQ7CisJICB9CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisgICAgICBjYXNlIEZGSV9UWVBFX1VJTlQ4OgorI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWlmIChuZyA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gKGNoYXIgKikgcGdyICsgMzsKKwkgICAgbmcrKzsKKwkgICAgcGdyKys7CisJICB9CisJZWxzZQorCSAgeworCSAgICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyAzOworCSAgICBwc3QrKzsKKwkgIH0KKwlicmVhazsKKyNlbmRpZgorCisgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKyAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWlmIChuZyA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gKGNoYXIgKikgcGdyICsgMjsKKwkgICAgbmcrKzsKKwkgICAgcGdyKys7CisJICB9CisJZWxzZQorCSAgeworCSAgICBhdmFsdWVbaV0gPSAoY2hhciAqKSBwc3QgKyAyOworCSAgICBwc3QrKzsKKwkgIH0KKwlicmVhazsKKyNlbmRpZgorCisgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQzMjoKKyAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDMyOgorICAgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgorCWlmIChuZyA8IE5VTV9HUFJfQVJHX1JFR0lTVEVSUykKKwkgIHsKKwkgICAgYXZhbHVlW2ldID0gcGdyOworCSAgICBuZysrOworCSAgICBwZ3IrKzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGF2YWx1ZVtpXSA9IHBzdDsKKwkgICAgcHN0Kys7CisJICB9CisJYnJlYWs7CisKKyAgICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCS8qIFN0cnVjdHMgYXJlIHBhc3NlZCBieSByZWZlcmVuY2UuIFRoZSBhZGRyZXNzIHdpbGwgYXBwZWFyIGluIGEKKwkgICBncHIgaWYgaXQgaXMgb25lIG9mIHRoZSBmaXJzdCA4IGFyZ3VtZW50cy4gICovCisJaWYgKG5nIDwgTlVNX0dQUl9BUkdfUkVHSVNURVJTKQorCSAgeworCSAgICBhdmFsdWVbaV0gPSAodm9pZCAqKSAqcGdyOworCSAgICBuZysrOworCSAgICBwZ3IrKzsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGF2YWx1ZVtpXSA9ICh2b2lkICopICpwc3Q7CisJICAgIHBzdCsrOworCSAgfQorCWJyZWFrOworCisgICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKKyAgICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgorCS8qIFBhc3NpbmcgbG9uZyBsb25nIGludHMgYXJlIGNvbXBsZXgsIHRoZXkgbXVzdAorCSAgIGJlIHBhc3NlZCBpbiBzdWl0YWJsZSByZWdpc3RlciBwYWlycyBzdWNoIGFzCisJICAgKHIzLHI0KSBvciAocjUscjYpIG9yIChyNixyNyksIG9yIChyNyxyOCkgb3IgKHI5LHIxMCkKKwkgICBhbmQgaWYgdGhlIGVudGlyZSBwYWlyIGFyZW4ndCBhdmFpbGFibGUgdGhlbiB0aGUgb3V0Z29pbmcKKwkgICBwYXJhbWV0ZXIgc3RhY2sgaXMgdXNlZCBmb3IgYm90aCBidXQgYW4gYWxpZ25tZW50IG9mIDgKKwkgICBtdXN0IHdpbGwgYmUga2VwdC4gIFNvIHdlIG11c3QgZWl0aGVyIGxvb2sgaW4gcGdyCisJICAgb3IgcHN0IHRvIGZpbmQgdGhlIGNvcnJlY3QgYWRkcmVzcyBmb3IgdGhpcyB0eXBlCisJICAgb2YgcGFyYW1ldGVyLiAgKi8KKwlpZiAobmcgPCBOVU1fR1BSX0FSR19SRUdJU1RFUlMgLSAxKQorCSAgeworCSAgICBpZiAobmcgJiAxKQorCSAgICAgIHsKKwkJLyogc2tpcCByNCwgcjYsIHI4IGFzIHN0YXJ0aW5nIHBvaW50cyAqLworCQluZysrOworCQlwZ3IrKzsKKwkgICAgICB9CisJICAgIGF2YWx1ZVtpXSA9IHBncjsKKwkgICAgbmcgKz0gMjsKKwkgICAgcGdyICs9IDI7CisJICB9CisJZWxzZQorCSAgeworCSAgICBpZiAoKChsb25nKSBwc3QpICYgNCkKKwkgICAgICBwc3QrKzsKKwkgICAgYXZhbHVlW2ldID0gcHN0OworCSAgICBwc3QgKz0gMjsKKwkgICAgbmcgPSBOVU1fR1BSX0FSR19SRUdJU1RFUlM7CisJICB9CisJYnJlYWs7CisKKyAgICAgIGRlZmF1bHQ6CisJRkZJX0FTU0VSVCAoMCk7CisgICAgICB9CisKKyAgICBpKys7CisgIH0KKworICAoY2xvc3VyZS0+ZnVuKSAoY2lmLCBydmFsdWUsIGF2YWx1ZSwgY2xvc3VyZS0+dXNlcl9kYXRhKTsKKworICAvKiBUZWxsIGZmaV9jbG9zdXJlX1NZU1YgaG93IHRvIHBlcmZvcm0gcmV0dXJuIHR5cGUgcHJvbW90aW9ucy4KKyAgICAgQmVjYXVzZSB0aGUgRkZJX1NZU1YgQUJJIHJldHVybnMgdGhlIHN0cnVjdHVyZXMgPD0gOCBieXRlcyBpbgorICAgICByMy9yNCB3ZSBoYXZlIHRvIHRlbGwgZmZpX2Nsb3N1cmVfU1lTViBob3cgdG8gdHJlYXQgdGhlbS4gIFdlCisgICAgIGNvbWJpbmUgdGhlIGJhc2UgdHlwZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCB3aXRoIHRoZSBzaXplIG9mCisgICAgIHRoZSBzdHJ1Y3QgbGVzcyBvbmUuICBXZSBuZXZlciBoYXZlIGEgc3RydWN0IHdpdGggc2l6ZSB6ZXJvLgorICAgICBTZWUgdGhlIGNvbW1lbnQgaW4gZmZpdGFyZ2V0LmggYWJvdXQgb3JkZXJpbmcuICAqLworICBpZiAocnR5cGVudW0gPT0gRkZJX1RZUEVfU1RSVUNUCisgICAgICAmJiAoY2lmLT5hYmkgJiBGRklfU1lTVl9TVFJVQ1RfUkVUKSAhPSAwICYmIHNpemUgPD0gOCkKKyAgICByZXR1cm4gRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgLSAxICsgc2l6ZTsKKyAgcmV0dXJuIHJ0eXBlbnVtOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaXRhcmdldC5oIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9mZml0YXJnZXQuaAppbmRleCAzYzlkYjQ5Li5iNDdiMGY1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2ZmaXRhcmdldC5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvZmZpdGFyZ2V0LmgKQEAgLTYwLDQ1ICs2MCw3NiBAQAogdHlwZWRlZiBlbnVtIGZmaV9hYmkgewogICBGRklfRklSU1RfQUJJID0gMCwKIAotI2lmZGVmIFBPV0VSUEMKLSAgRkZJX1NZU1YsCi0gIEZGSV9HQ0NfU1lTViwKLSAgRkZJX0xJTlVYNjQsCi0gIEZGSV9MSU5VWCwKLSAgRkZJX0xJTlVYX1NPRlRfRkxPQVQsCi0jIGlmIGRlZmluZWQoUE9XRVJQQzY0KQotICBGRklfREVGQVVMVF9BQkkgPSBGRklfTElOVVg2NCwKLSMgZWxpZiBkZWZpbmVkKF9fTk9fRlBSU19fKQotICBGRklfREVGQVVMVF9BQkkgPSBGRklfTElOVVhfU09GVF9GTE9BVCwKLSMgZWxpZiAoX19MREJMX01BTlRfRElHX18gPT0gMTA2KQotICBGRklfREVGQVVMVF9BQkkgPSBGRklfTElOVVgsCi0jIGVsc2UKLSAgRkZJX0RFRkFVTFRfQUJJID0gRkZJX0dDQ19TWVNWLAotIyBlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBQT1dFUlBDX0FJWAorI2lmIGRlZmluZWQgKFBPV0VSUENfQUlYKQogICBGRklfQUlYLAogICBGRklfREFSV0lOLAogICBGRklfREVGQVVMVF9BQkkgPSBGRklfQUlYLAotI2VuZGlmCisgIEZGSV9MQVNUX0FCSQogCi0jaWZkZWYgUE9XRVJQQ19EQVJXSU4KKyNlbGlmIGRlZmluZWQgKFBPV0VSUENfREFSV0lOKQogICBGRklfQUlYLAogICBGRklfREFSV0lOLAogICBGRklfREVGQVVMVF9BQkkgPSBGRklfREFSV0lOLAotI2VuZGlmCi0KLSNpZmRlZiBQT1dFUlBDX0ZSRUVCU0QKLSAgRkZJX1NZU1YsCi0gIEZGSV9HQ0NfU1lTViwKLSAgRkZJX0xJTlVYNjQsCi0gIEZGSV9MSU5VWCwKLSAgRkZJX0xJTlVYX1NPRlRfRkxPQVQsCi0gIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWLAotI2VuZGlmCi0KICAgRkZJX0xBU1RfQUJJCisKKyNlbHNlCisgIC8qIFRoZSBGRklfQ09NUEFUIHZhbHVlcyBhcmUgdXNlZCBieSBvbGQgY29kZS4gIFNpbmNlIGxpYmZmaSBtYXkgYmUKKyAgICAgYSBzaGFyZWQgbGlicmFyeSB3ZSBoYXZlIHRvIHN1cHBvcnQgb2xkIHZhbHVlcyBmb3IgYmFja3dhcmRzCisgICAgIGNvbXBhdGliaWxpdHkuICAqLworICBGRklfQ09NUEFUX1NZU1YsCisgIEZGSV9DT01QQVRfR0NDX1NZU1YsCisgIEZGSV9DT01QQVRfTElOVVg2NCwKKyAgRkZJX0NPTVBBVF9MSU5VWCwKKyAgRkZJX0NPTVBBVF9MSU5VWF9TT0ZUX0ZMT0FULAorCisjIGlmIGRlZmluZWQgKFBPV0VSUEM2NCkKKyAgLyogVGhpcyBiaXQsIGFsd2F5cyBzZXQgaW4gbmV3IGNvZGUsIG11c3Qgbm90IGJlIHNldCBpbiBhbnkgb2YgdGhlCisgICAgIG9sZCBGRklfQ09NUEFUIHZhbHVlcyB0aGF0IG1pZ2h0IGJlIHVzZWQgZm9yIDY0LWJpdCBsaW51eC4gIFdlCisgICAgIG9ubHkgbmVlZCB3b3JyeSBhYm91dCBGRklfQ09NUEFUX0xJTlVYNjQsIGJ1dCB0byBiZSBzYWZlIGF2b2lkCisgICAgIGFsbCBvbGQgdmFsdWVzLiAgKi8KKyAgRkZJX0xJTlVYID0gOCwKKyAgLyogVGhpcyBhbmQgZm9sbG93aW5nIGJpdHMgY2FuIHJldXNlIEZGSV9DT01QQVQgdmFsdWVzLiAgKi8KKyAgRkZJX0xJTlVYX1NUUlVDVF9BTElHTiA9IDEsCisgIEZGSV9MSU5VWF9MT05HX0RPVUJMRV8xMjggPSAyLAorICBGRklfREVGQVVMVF9BQkkgPSAoRkZJX0xJTlVYCisjICBpZmRlZiBfX1NUUlVDVF9QQVJNX0FMSUdOX18KKwkJICAgICB8IEZGSV9MSU5VWF9TVFJVQ1RfQUxJR04KKyMgIGVuZGlmCisjICBpZmRlZiBfX0xPTkdfRE9VQkxFXzEyOF9fCisJCSAgICAgfCBGRklfTElOVVhfTE9OR19ET1VCTEVfMTI4CisjICBlbmRpZgorCQkgICAgICksCisgIEZGSV9MQVNUX0FCSSA9IDEyCisKKyMgZWxzZQorICAvKiBUaGlzIGJpdCwgYWx3YXlzIHNldCBpbiBuZXcgY29kZSwgbXVzdCBub3QgYmUgc2V0IGluIGFueSBvZiB0aGUKKyAgICAgb2xkIEZGSV9DT01QQVQgdmFsdWVzIHRoYXQgbWlnaHQgYmUgdXNlZCBmb3IgMzItYml0IGxpbnV4L3N5c3YvYnNkLiAgKi8KKyAgRkZJX1NZU1YgPSA4LAorICAvKiBUaGlzIGFuZCBmb2xsb3dpbmcgYml0cyBjYW4gcmV1c2UgRkZJX0NPTVBBVCB2YWx1ZXMuICAqLworICBGRklfU1lTVl9TT0ZUX0ZMT0FUID0gMSwKKyAgRkZJX1NZU1ZfU1RSVUNUX1JFVCA9IDIsCisgIEZGSV9TWVNWX0lCTV9MT05HX0RPVUJMRSA9IDQsCisgIEZGSV9TWVNWX0xPTkdfRE9VQkxFXzEyOCA9IDE2LAorCisgIEZGSV9ERUZBVUxUX0FCSSA9IChGRklfU1lTVgorIyAgaWZkZWYgX19OT19GUFJTX18KKwkJICAgICB8IEZGSV9TWVNWX1NPRlRfRkxPQVQKKyMgIGVuZGlmCisjICBpZiAoZGVmaW5lZCAoX19TVlI0X1NUUlVDVF9SRVRVUk4pCQkJCQlcCisgICAgICAgfHwgZGVmaW5lZCAoUE9XRVJQQ19GUkVFQlNEKSAmJiAhZGVmaW5lZCAoX19BSVhfU1RSVUNUX1JFVFVSTikpCisJCSAgICAgfCBGRklfU1lTVl9TVFJVQ1RfUkVUCisjICBlbmRpZgorIyAgaWYgX19MREJMX01BTlRfRElHX18gPT0gMTA2CisJCSAgICAgfCBGRklfU1lTVl9JQk1fTE9OR19ET1VCTEUKKyMgIGVuZGlmCisjICBpZmRlZiBfX0xPTkdfRE9VQkxFXzEyOF9fCisJCSAgICAgfCBGRklfU1lTVl9MT05HX0RPVUJMRV8xMjgKKyMgIGVuZGlmCisJCSAgICAgKSwKKyAgRkZJX0xBU1RfQUJJID0gMzIKKyMgZW5kaWYKKyNlbmRpZgorCiB9IGZmaV9hYmk7CiAjZW5kaWYKIApAQCAtMTA2LDYgKzEzNywxMCBAQAogCiAjZGVmaW5lIEZGSV9DTE9TVVJFUyAxCiAjZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwCisjaWYgZGVmaW5lZCAoUE9XRVJQQykgfHwgZGVmaW5lZCAoUE9XRVJQQ19GUkVFQlNEKQorIyBkZWZpbmUgRkZJX1RBUkdFVF9TUEVDSUZJQ19WQVJJQURJQyAxCisjIGRlZmluZSBGRklfRVhUUkFfQ0lGX0ZJRUxEUyB1bnNpZ25lZCBuZml4ZWRhcmdzCisjZW5kaWYKIAogLyogRm9yIGFkZGl0aW9uYWwgdHlwZXMgbGlrZSB0aGUgYmVsb3csIHRha2UgY2FyZSBhYm91dCB0aGUgb3JkZXIgaW4KICAgIHBwY19jbG9zdXJlcy5TLiBUaGV5IG11c3QgZm9sbG93IGFmdGVyIHRoZSBGRklfVFlQRV9MQVNULiAgKi8KQEAgLTExMywxOSArMTQ4LDI2IEBACiAvKiBOZWVkZWQgZm9yIHNvZnQtZmxvYXQgbG9uZy1kb3VibGUtMTI4IHN1cHBvcnQuICAqLwogI2RlZmluZSBGRklfVFlQRV9VSU5UMTI4IChGRklfVFlQRV9MQVNUICsgMSkKIAotLyogTmVlZGVkIGZvciBGRklfU1lTViBzbWFsbCBzdHJ1Y3R1cmUgcmV0dXJucy4KLSAgIFdlIHVzZSB0d28gZmxhZyBiaXRzLCAoRkxBR19TWVNWX1NNU1RfUjMsIEZMQUdfU1lTVl9TTVNUX1I0KSB3aGljaCBhcmUKLSAgIGRlZmluZWQgaW4gZmZpLmMsIHRvIGRldGVybWluZSB0aGUgZXhhY3QgcmV0dXJuIHR5cGUgYW5kIGl0cyBzaXplLiAgKi8KKy8qIE5lZWRlZCBmb3IgRkZJX1NZU1Ygc21hbGwgc3RydWN0dXJlIHJldHVybnMuICAqLwogI2RlZmluZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCAoRkZJX1RZUEVfTEFTVCArIDIpCiAKLSNpZiBkZWZpbmVkKFBPV0VSUEM2NCkgfHwgZGVmaW5lZChQT1dFUlBDX0FJWCkKKy8qIFVzZWQgYnkgRUxGdjIgZm9yIGhvbW9nZW5vdXMgc3RydWN0dXJlIHJldHVybnMuICAqLworI2RlZmluZSBGRklfVjJfVFlQRV9GTE9BVF9IT01PRwkJKEZGSV9UWVBFX0xBU1QgKyAxKQorI2RlZmluZSBGRklfVjJfVFlQRV9ET1VCTEVfSE9NT0cJKEZGSV9UWVBFX0xBU1QgKyAyKQorI2RlZmluZSBGRklfVjJfVFlQRV9TTUFMTF9TVFJVQ1QJKEZGSV9UWVBFX0xBU1QgKyAzKQorCisjaWYgX0NBTExfRUxGID09IDIKKyMgZGVmaW5lIEZGSV9UUkFNUE9MSU5FX1NJWkUgMzIKKyNlbHNlCisjIGlmIGRlZmluZWQoUE9XRVJQQzY0KSB8fCBkZWZpbmVkKFBPV0VSUENfQUlYKQogIyAgaWYgZGVmaW5lZChQT1dFUlBDX0RBUldJTjY0KQogIyAgICBkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSA0OAogIyAgZWxzZQogIyAgICBkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSAyNAogIyAgZW5kaWYKLSNlbHNlIC8qIFBPV0VSUEMgfHwgUE9XRVJQQ19BSVggKi8KKyMgZWxzZSAvKiBQT1dFUlBDIHx8IFBPV0VSUENfQUlYICovCiAjICBkZWZpbmUgRkZJX1RSQU1QT0xJTkVfU0laRSA0MAorIyBlbmRpZgogI2VuZGlmCiAKICNpZm5kZWYgTElCRkZJX0FTTQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUwppbmRleCBmMjhkYTgxLi5jNGQwMWQ4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjQuUwpAQCAtMjksMTggKzI5LDI1IEBACiAjaW5jbHVkZSA8ZmZpY29uZmlnLmg+CiAjaW5jbHVkZSA8ZmZpLmg+CiAKLSNpZmRlZiBfX3Bvd2VycGM2NF9fCisjaWZkZWYgUE9XRVJQQzY0CiAJLmhpZGRlbglmZmlfY2FsbF9MSU5VWDY0CiAJLmdsb2JsCWZmaV9jYWxsX0xJTlVYNjQKKyMgaWYgX0NBTExfRUxGID09IDIKKwkudGV4dAorZmZpX2NhbGxfTElOVVg2NDoKKwlhZGRpcwklcjIsICVyMTIsIC5UT0MuLWZmaV9jYWxsX0xJTlVYNjRAaGEKKwlhZGRpCSVyMiwgJXIyLCAuVE9DLi1mZmlfY2FsbF9MSU5VWDY0QGwKKwkubG9jYWxlbnRyeSBmZmlfY2FsbF9MSU5VWDY0LCAuIC0gZmZpX2NhbGxfTElOVVg2NAorIyBlbHNlCiAJLnNlY3Rpb24JIi5vcGQiLCJhdyIKIAkuYWxpZ24JMwogZmZpX2NhbGxfTElOVVg2NDoKLSNpZmRlZiBfQ0FMTF9MSU5VWAorIyAgaWZkZWYgX0NBTExfTElOVVgKIAkucXVhZAkuTC5mZmlfY2FsbF9MSU5VWDY0LC5UT0MuQHRvY2Jhc2UsMAogCS50eXBlCWZmaV9jYWxsX0xJTlVYNjQsQGZ1bmN0aW9uCiAJLnRleHQKIC5MLmZmaV9jYWxsX0xJTlVYNjQ6Ci0jZWxzZQorIyAgZWxzZQogCS5oaWRkZW4JLmZmaV9jYWxsX0xJTlVYNjQKIAkuZ2xvYmwJLmZmaV9jYWxsX0xJTlVYNjQKIAkucXVhZAkuZmZpX2NhbGxfTElOVVg2NCwuVE9DLkB0b2NiYXNlLDAKQEAgLTQ4LDcgKzU1LDggQEAKIAkudHlwZQkuZmZpX2NhbGxfTElOVVg2NCxAZnVuY3Rpb24KIAkudGV4dAogLmZmaV9jYWxsX0xJTlVYNjQ6Ci0jZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCiAuTEZCMToKIAltZmxyCSVyMAogCXN0ZAklcjI4LCAtMzIoJXIxKQpAQCAtNjMsMjYgKzcxLDM1IEBACiAJbXIJJXIzMSwgJXI1CS8qIGZsYWdzLCAqLwogCW1yCSVyMzAsICVyNgkvKiBydmFsdWUsICovCiAJbXIJJXIyOSwgJXI3CS8qIGZ1bmN0aW9uIGFkZHJlc3MuICAqLworLyogU2F2ZSB0b2MgcG9pbnRlciwgbm90IGZvciB0aGUgZmZpX3ByZXBfYXJnczY0IGNhbGwsIGJ1dCBmb3IgdGhlIGxhdGVyCisgICBiY3RybCBmdW5jdGlvbiBjYWxsLiAgKi8KKyMgaWYgX0NBTExfRUxGID09IDIKKwlzdGQJJXIyLCAyNCglcjEpCisjIGVsc2UKIAlzdGQJJXIyLCA0MCglcjEpCisjIGVuZGlmCiAKIAkvKiBDYWxsIGZmaV9wcmVwX2FyZ3M2NC4gICovCiAJbXIJJXI0LCAlcjEKLSNpZmRlZiBfQ0FMTF9MSU5VWAorIyBpZiBkZWZpbmVkIF9DQUxMX0xJTlVYIHx8IF9DQUxMX0VMRiA9PSAyCiAJYmwJZmZpX3ByZXBfYXJnczY0Ci0jZWxzZQorIyBlbHNlCiAJYmwJLmZmaV9wcmVwX2FyZ3M2NAotI2VuZGlmCisjIGVuZGlmCiAKLQlsZAklcjAsIDAoJXIyOSkKKyMgaWYgX0NBTExfRUxGID09IDIKKwltcgklcjEyLCAlcjI5CisjIGVsc2UKKwlsZAklcjEyLCAwKCVyMjkpCiAJbGQJJXIyLCA4KCVyMjkpCiAJbGQJJXIxMSwgMTYoJXIyOSkKLQorIyBlbmRpZgogCS8qIE5vdyBkbyB0aGUgY2FsbC4gICovCiAJLyogU2V0IHVwIGNyMSB3aXRoIGJpdHMgNC03IG9mIHRoZSBmbGFncy4gICovCiAJbXRjcmYJMHg0MCwgJXIzMQogCiAJLyogR2V0IHRoZSBhZGRyZXNzIHRvIGNhbGwgaW50byBDVFIuICAqLwotCW10Y3RyCSVyMAorCW10Y3RyCSVyMTIKIAkvKiBMb2FkIGFsbCB0aG9zZSBhcmd1bWVudCByZWdpc3RlcnMuICAqLwogCWxkCSVyMywgLTMyLSg4KjgpKCVyMjgpCiAJbGQJJXI0LCAtMzItKDcqOCkoJXIyOCkKQEAgLTExNywxMiArMTM0LDE3IEBACiAKIAkvKiBUaGlzIG11c3QgZm9sbG93IHRoZSBjYWxsIGltbWVkaWF0ZWx5LCB0aGUgdW53aW5kZXIKIAkgICB1c2VzIHRoaXMgdG8gZmluZCBvdXQgaWYgcjIgaGFzIGJlZW4gc2F2ZWQgb3Igbm90LiAgKi8KKyMgaWYgX0NBTExfRUxGID09IDIKKwlsZAklcjIsIDI0KCVyMSkKKyMgZWxzZQogCWxkCSVyMiwgNDAoJXIxKQorIyBlbmRpZgogCiAJLyogTm93LCBkZWFsIHdpdGggdGhlIHJldHVybiB2YWx1ZS4gICovCiAJbXRjcmYJMHgwMSwgJXIzMQotCWJ0LQkzMCwgLkxkb25lX3JldHVybl92YWx1ZQotCWJ0LQkyOSwgLkxmcF9yZXR1cm5fdmFsdWUKKwlidAkzMSwgLkxzdHJ1Y3RfcmV0dXJuX3ZhbHVlCisJYnQJMzAsIC5MZG9uZV9yZXR1cm5fdmFsdWUKKwlidAkyOSwgLkxmcF9yZXR1cm5fdmFsdWUKIAlzdGQJJXIzLCAwKCVyMzApCiAJLyogRmFsbCB0aHJvdWdoLi4uICAqLwogCkBAIC0xMzAsNyArMTUyLDcgQEAKIAkvKiBSZXN0b3JlIHRoZSByZWdpc3RlcnMgd2UgdXNlZCBhbmQgcmV0dXJuLiAgKi8KIAltcgklcjEsICVyMjgKIAlsZAklcjAsIDE2KCVyMjgpCi0JbGQJJXIyOCwgLTMyKCVyMSkKKwlsZAklcjI4LCAtMzIoJXIyOCkKIAltdGxyCSVyMAogCWxkCSVyMjksIC0yNCglcjEpCiAJbGQJJXIzMCwgLTE2KCVyMSkKQEAgLTE0NywxNCArMTY5LDQ4IEBACiAuTGZsb2F0X3JldHVybl92YWx1ZToKIAlzdGZzCSVmMSwgMCglcjMwKQogCWIJLkxkb25lX3JldHVybl92YWx1ZQorCisuTHN0cnVjdF9yZXR1cm5fdmFsdWU6CisJYmYJMjksIC5Mc21hbGxfc3RydWN0CisJYmYJMjgsIC5MZmxvYXRfaG9tb2dfcmV0dXJuX3ZhbHVlCisJc3RmZAklZjEsIDAoJXIzMCkKKwlzdGZkCSVmMiwgOCglcjMwKQorCXN0ZmQJJWYzLCAxNiglcjMwKQorCXN0ZmQJJWY0LCAyNCglcjMwKQorCXN0ZmQJJWY1LCAzMiglcjMwKQorCXN0ZmQJJWY2LCA0MCglcjMwKQorCXN0ZmQJJWY3LCA0OCglcjMwKQorCXN0ZmQJJWY4LCA1NiglcjMwKQorCWIJLkxkb25lX3JldHVybl92YWx1ZQorCisuTGZsb2F0X2hvbW9nX3JldHVybl92YWx1ZToKKwlzdGZzCSVmMSwgMCglcjMwKQorCXN0ZnMJJWYyLCA0KCVyMzApCisJc3RmcwklZjMsIDgoJXIzMCkKKwlzdGZzCSVmNCwgMTIoJXIzMCkKKwlzdGZzCSVmNSwgMTYoJXIzMCkKKwlzdGZzCSVmNiwgMjAoJXIzMCkKKwlzdGZzCSVmNywgMjQoJXIzMCkKKwlzdGZzCSVmOCwgMjgoJXIzMCkKKwliCS5MZG9uZV9yZXR1cm5fdmFsdWUKKworLkxzbWFsbF9zdHJ1Y3Q6CisJc3RkCSVyMywgMCglcjMwKQorCXN0ZAklcjQsIDgoJXIzMCkKKwliCS5MZG9uZV9yZXR1cm5fdmFsdWUKKwogLkxGRTE6CiAJLmxvbmcJMAogCS5ieXRlCTAsMTIsMCwxLDEyOCw0LDAsMAotI2lmZGVmIF9DQUxMX0xJTlVYCisjIGlmIF9DQUxMX0VMRiA9PSAyCisJLnNpemUJZmZpX2NhbGxfTElOVVg2NCwuLWZmaV9jYWxsX0xJTlVYNjQKKyMgZWxzZQorIyAgaWZkZWYgX0NBTExfTElOVVgKIAkuc2l6ZQlmZmlfY2FsbF9MSU5VWDY0LC4tLkwuZmZpX2NhbGxfTElOVVg2NAotI2Vsc2UKKyMgIGVsc2UKIAkuc2l6ZQkuZmZpX2NhbGxfTElOVVg2NCwuLS5mZmlfY2FsbF9MSU5VWDY0Ci0jZW5kaWYKKyMgIGVuZGlmCisjIGVuZGlmCiAKIAkuc2VjdGlvbgkuZWhfZnJhbWUsRUhfRlJBTUVfRkxBR1MsQHByb2diaXRzCiAuTGZyYW1lMToKQEAgLTE5Nyw4ICsyNTMsOCBAQAogCS51bGViMTI4IDB4NAogCS5hbGlnbiAzCiAuTEVGREUxOgotI2VuZGlmCiAKLSNpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KKyMgaWYgKGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXykgfHwgX0NBTExfRUxGID09IDIKIAkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisjIGVuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL2xpbnV4NjRfY2xvc3VyZS5TCmluZGV4IGIxZTEyMTkuLmJjNjFiNWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvbGludXg2NF9jbG9zdXJlLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9saW51eDY0X2Nsb3N1cmUuUwpAQCAtMzAsMTggKzMwLDI1IEBACiAKIAkuZmlsZQkibGludXg2NF9jbG9zdXJlLlMiCiAKLSNpZmRlZiBfX3Bvd2VycGM2NF9fCisjaWZkZWYgUE9XRVJQQzY0CiAJRkZJX0hJRERFTiAoZmZpX2Nsb3N1cmVfTElOVVg2NCkKIAkuZ2xvYmwgIGZmaV9jbG9zdXJlX0xJTlVYNjQKKyMgaWYgX0NBTExfRUxGID09IDIKKwkudGV4dAorZmZpX2Nsb3N1cmVfTElOVVg2NDoKKwlhZGRpcwklcjIsICVyMTIsIC5UT0MuLWZmaV9jbG9zdXJlX0xJTlVYNjRAaGEKKwlhZGRpCSVyMiwgJXIyLCAuVE9DLi1mZmlfY2xvc3VyZV9MSU5VWDY0QGwKKwkubG9jYWxlbnRyeSBmZmlfY2xvc3VyZV9MSU5VWDY0LCAuIC0gZmZpX2Nsb3N1cmVfTElOVVg2NAorIyBlbHNlCiAJLnNlY3Rpb24gICAgICAgICIub3BkIiwiYXciCiAJLmFsaWduICAzCiBmZmlfY2xvc3VyZV9MSU5VWDY0OgotI2lmZGVmIF9DQUxMX0xJTlVYCisjICBpZmRlZiBfQ0FMTF9MSU5VWAogCS5xdWFkICAgLkwuZmZpX2Nsb3N1cmVfTElOVVg2NCwuVE9DLkB0b2NiYXNlLDAKIAkudHlwZSAgIGZmaV9jbG9zdXJlX0xJTlVYNjQsQGZ1bmN0aW9uCiAJLnRleHQKIC5MLmZmaV9jbG9zdXJlX0xJTlVYNjQ6Ci0jZWxzZQorIyAgZWxzZQogCUZGSV9ISURERU4gKC5mZmlfY2xvc3VyZV9MSU5VWDY0KQogCS5nbG9ibCAgLmZmaV9jbG9zdXJlX0xJTlVYNjQKIAkucXVhZCAgIC5mZmlfY2xvc3VyZV9MSU5VWDY0LC5UT0MuQHRvY2Jhc2UsMApAQCAtNDksNjEgKzU2LDEwNSBAQAogCS50eXBlICAgLmZmaV9jbG9zdXJlX0xJTlVYNjQsQGZ1bmN0aW9uCiAJLnRleHQKIC5mZmlfY2xvc3VyZV9MSU5VWDY0OgotI2VuZGlmCi0uTEZCMToKLQkjIHNhdmUgZ2VuZXJhbCByZWdzIGludG8gcGFybSBzYXZlIGFyZWEKLQlzdGQJJXIzLCA0OCglcjEpCi0Jc3RkCSVyNCwgNTYoJXIxKQotCXN0ZAklcjUsIDY0KCVyMSkKLQlzdGQJJXI2LCA3MiglcjEpCi0JbWZscgklcjAKKyMgIGVuZGlmCisjIGVuZGlmCiAKLQlzdGQJJXI3LCA4MCglcjEpCi0Jc3RkCSVyOCwgODgoJXIxKQotCXN0ZAklcjksIDk2KCVyMSkKLQlzdGQJJXIxMCwgMTA0KCVyMSkKKyMgaWYgX0NBTExfRUxGID09IDIKKyMgIDMyIGJ5dGUgc3BlY2lhbCByZWcgc2F2ZSBhcmVhICsgNjQgYnl0ZSBwYXJtIHNhdmUgYXJlYQorIyAgKyA2NCBieXRlIHJldHZhbCBhcmVhICsgMTMqOCBmcHIgc2F2ZSBhcmVhICsgcm91bmQgdG8gMTYKKyMgIGRlZmluZSBTVEFDS0ZSQU1FIDI3MgorIyAgZGVmaW5lIFBBUk1TQVZFIDMyCisjICBkZWZpbmUgUkVUVkFMIFBBUk1TQVZFKzY0CisjIGVsc2UKKyMgIDQ4IGJ5dGVzIHNwZWNpYWwgcmVnIHNhdmUgYXJlYSArIDY0IGJ5dGVzIHBhcm0gc2F2ZSBhcmVhCisjICArIDE2IGJ5dGVzIHJldHZhbCBhcmVhICsgMTMqOCBieXRlcyBmcHIgc2F2ZSBhcmVhICsgcm91bmQgdG8gMTYKKyMgIGRlZmluZSBTVEFDS0ZSQU1FIDI0MAorIyAgZGVmaW5lIFBBUk1TQVZFIDQ4CisjICBkZWZpbmUgUkVUVkFMIFBBUk1TQVZFKzY0CisjIGVuZGlmCisKKy5MRkIxOgorIyBpZiBfQ0FMTF9FTEYgPT0gMgorCWxkCSVyMTIsIEZGSV9UUkFNUE9MSU5FX1NJWkUoJXIxMSkJCSMgY2xvc3VyZS0+Y2lmCisJbWZscgklcjAKKwlsd3oJJXIxMiwgMjgoJXIxMikJCQkJIyBjaWYtPmZsYWdzCisJbXRjcmYJMHg0MCwgJXIxMgorCWFkZGkJJXIxMiwgJXIxLCBQQVJNU0FWRQorCWJ0CTcsIC5McGFybXNhdmUKKwkjIE91ciBjYWxsZXIgaGFzIG5vdCBhbGxvY2F0ZWQgYSBwYXJhbWV0ZXIgc2F2ZSBhcmVhLgorCSMgV2UgbmVlZCB0byBhbGxvY2F0ZSBvbmUgaGVyZSBhbmQgdXNlIGl0IHRvIHBhc3MgZ3BycyB0bworCSMgZmZpX2Nsb3N1cmVfaGVscGVyX0xJTlVYNjQuCisJYWRkaQklcjEyLCAlcjEsIC1TVEFDS0ZSQU1FK1BBUk1TQVZFCisuTHBhcm1zYXZlOgorCXN0ZAklcjAsIDE2KCVyMSkKKwkjIFNhdmUgZ2VuZXJhbCByZWdzIGludG8gcGFybSBzYXZlIGFyZWEKKwlzdGQJJXIzLCAwKCVyMTIpCisJc3RkCSVyNCwgOCglcjEyKQorCXN0ZAklcjUsIDE2KCVyMTIpCisJc3RkCSVyNiwgMjQoJXIxMikKKwlzdGQJJXI3LCAzMiglcjEyKQorCXN0ZAklcjgsIDQwKCVyMTIpCisJc3RkCSVyOSwgNDgoJXIxMikKKwlzdGQJJXIxMCwgNTYoJXIxMikKKworCSMgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgcGFybSBzYXZlIGFyZWEKKwltcgklcjUsICVyMTIKKyMgZWxzZQorCSMgY29weSByMiB0byByMTEgYW5kIGxvYWQgVE9DIGludG8gcjIKKwltcgklcjExLCAlcjIKKwlsZAklcjIsIDE2KCVyMTEpCisKKwltZmxyCSVyMAorCSMgU2F2ZSBnZW5lcmFsIHJlZ3MgaW50byBwYXJtIHNhdmUgYXJlYQorCSMgVGhpcyBpcyB0aGUgcGFyYW1ldGVyIHNhdmUgYXJlYSBzZXQgdXAgYnkgb3VyIGNhbGxlci4KKwlzdGQJJXIzLCBQQVJNU0FWRSswKCVyMSkKKwlzdGQJJXI0LCBQQVJNU0FWRSs4KCVyMSkKKwlzdGQJJXI1LCBQQVJNU0FWRSsxNiglcjEpCisJc3RkCSVyNiwgUEFSTVNBVkUrMjQoJXIxKQorCXN0ZAklcjcsIFBBUk1TQVZFKzMyKCVyMSkKKwlzdGQJJXI4LCBQQVJNU0FWRSs0MCglcjEpCisJc3RkCSVyOSwgUEFSTVNBVkUrNDgoJXIxKQorCXN0ZAklcjEwLCBQQVJNU0FWRSs1NiglcjEpCisKIAlzdGQJJXIwLCAxNiglcjEpCiAKLQkjIG1hbmRhdG9yeSA0OCBieXRlcyBzcGVjaWFsIHJlZyBzYXZlIGFyZWEgKyA2NCBieXRlcyBwYXJtIHNhdmUgYXJlYQotCSMgKyAxNiBieXRlcyByZXR2YWwgYXJlYSArIDEzKjggYnl0ZXMgZnByIHNhdmUgYXJlYSArIHJvdW5kIHRvIDE2Ci0Jc3RkdQklcjEsIC0yNDAoJXIxKQotLkxDRkkwOgorCSMgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgcGFybSBzYXZlIGFyZWEKKwlhZGRpCSVyNSwgJXIxLCBQQVJNU0FWRQorIyBlbmRpZgogCiAJIyBuZXh0IHNhdmUgZnByIDEgdG8gZnByIDEzCi0Jc3RmZCAgJWYxLCAxMjgrKDAqOCkoJXIxKQotCXN0ZmQgICVmMiwgMTI4KygxKjgpKCVyMSkKLQlzdGZkICAlZjMsIDEyOCsoMio4KSglcjEpCi0Jc3RmZCAgJWY0LCAxMjgrKDMqOCkoJXIxKQotCXN0ZmQgICVmNSwgMTI4Kyg0KjgpKCVyMSkKLQlzdGZkICAlZjYsIDEyOCsoNSo4KSglcjEpCi0Jc3RmZCAgJWY3LCAxMjgrKDYqOCkoJXIxKQotCXN0ZmQgICVmOCwgMTI4Kyg3KjgpKCVyMSkKLQlzdGZkICAlZjksIDEyOCsoOCo4KSglcjEpCi0Jc3RmZCAgJWYxMCwgMTI4Kyg5KjgpKCVyMSkKLQlzdGZkICAlZjExLCAxMjgrKDEwKjgpKCVyMSkKLQlzdGZkICAlZjEyLCAxMjgrKDExKjgpKCVyMSkKLQlzdGZkICAlZjEzLCAxMjgrKDEyKjgpKCVyMSkKKwlzdGZkCSVmMSwgLTEwNCsoMCo4KSglcjEpCisJc3RmZAklZjIsIC0xMDQrKDEqOCkoJXIxKQorCXN0ZmQJJWYzLCAtMTA0KygyKjgpKCVyMSkKKwlzdGZkCSVmNCwgLTEwNCsoMyo4KSglcjEpCisJc3RmZAklZjUsIC0xMDQrKDQqOCkoJXIxKQorCXN0ZmQJJWY2LCAtMTA0Kyg1KjgpKCVyMSkKKwlzdGZkCSVmNywgLTEwNCsoNio4KSglcjEpCisJc3RmZAklZjgsIC0xMDQrKDcqOCkoJXIxKQorCXN0ZmQJJWY5LCAtMTA0Kyg4KjgpKCVyMSkKKwlzdGZkCSVmMTAsIC0xMDQrKDkqOCkoJXIxKQorCXN0ZmQJJWYxMSwgLTEwNCsoMTAqOCkoJXIxKQorCXN0ZmQJJWYxMiwgLTEwNCsoMTEqOCkoJXIxKQorCXN0ZmQJJWYxMywgLTEwNCsoMTIqOCkoJXIxKQogCi0JIyBzZXQgdXAgcmVnaXN0ZXJzIGZvciB0aGUgcm91dGluZSB0aGF0IGFjdHVhbGx5IGRvZXMgdGhlIHdvcmsKKwkjIGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHNhdmVkIGZwciByZWdpc3RlcnMgKi8KKwlhZGRpCSVyNiwgJXIxLCAtMTA0CisKKwkjIGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHJlc3VsdCBzdG9yYWdlCisJYWRkaQklcjQsICVyMSwgLVNUQUNLRlJBTUUrUkVUVkFMCisKKwlzdGR1CSVyMSwgLVNUQUNLRlJBTUUoJXIxKQorLkxDRkkwOgorCiAJIyBnZXQgdGhlIGNvbnRleHQgcG9pbnRlciBmcm9tIHRoZSB0cmFtcG9saW5lCi0JbXIgJXIzLCAlcjExCi0KLQkjIG5vdyBsb2FkIHVwIHRoZSBwb2ludGVyIHRvIHRoZSByZXN1bHQgc3RvcmFnZQotCWFkZGkgJXI0LCAlcjEsIDExMgotCi0JIyBub3cgbG9hZCB1cCB0aGUgcG9pbnRlciB0byB0aGUgcGFyYW1ldGVyIHNhdmUgYXJlYQotCSMgaW4gdGhlIHByZXZpb3VzIGZyYW1lCi0JYWRkaSAlcjUsICVyMSwgMjQwICsgNDgKLQotCSMgbm93IGxvYWQgdXAgdGhlIHBvaW50ZXIgdG8gdGhlIHNhdmVkIGZwciByZWdpc3RlcnMgKi8KLQlhZGRpICVyNiwgJXIxLCAxMjgKKwltcgklcjMsICVyMTEKIAogCSMgbWFrZSB0aGUgY2FsbAotI2lmZGVmIF9DQUxMX0xJTlVYCisjIGlmIGRlZmluZWQgX0NBTExfTElOVVggfHwgX0NBTExfRUxGID09IDIKIAlibCBmZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NAotI2Vsc2UKKyMgZWxzZQogCWJsIC5mZmlfY2xvc3VyZV9oZWxwZXJfTElOVVg2NAotI2VuZGlmCisjIGVuZGlmCiAuTHJldDoKIAogCSMgbm93IHIzIGNvbnRhaW5zIHRoZSByZXR1cm4gdHlwZQpAQCAtMTEyLDEwICsxNjMsMTIgQEAKIAogCSMgbG9vayB1cCB0aGUgcHJvcGVyIHN0YXJ0aW5nIHBvaW50IGluIHRhYmxlCiAJIyBieSB1c2luZyByZXR1cm4gdHlwZSBhcyBvZmZzZXQKKwlsZCAlcjAsIFNUQUNLRlJBTUUrMTYoJXIxKQorCWNtcGxkaSAlcjMsIEZGSV9WMl9UWVBFX1NNQUxMX1NUUlVDVAorCWJnZSAuTHNtYWxsCiAJbWZsciAlcjQJCSMgbW92ZSBhZGRyZXNzIG9mIC5McmV0IHRvIHI0CiAJc2xkaSAlcjMsICVyMywgNAkjIG5vdyBtdWx0aXBseSByZXR1cm4gdHlwZSBieSAxNgogCWFkZGkgJXI0LCAlcjQsIC5McmV0X3R5cGUwIC0gLkxyZXQKLQlsZCAlcjAsIDI0MCsxNiglcjEpCiAJYWRkICVyMywgJXIzLCAlcjQJIyBhZGQgY29udGVudHMgb2YgdGFibGUgdG8gdGFibGUgYWRkcmVzcwogCW10Y3RyICVyMwogCWJjdHIJCQkjIGp1bXAgdG8gaXQKQEAgLTEyOCw4OSArMTgxLDE3NSBAQAogLkxyZXRfdHlwZTA6CiAjIGNhc2UgRkZJX1RZUEVfVk9JRAogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogCW5vcAogIyBjYXNlIEZGSV9UWVBFX0lOVAotCWx3YSAlcjMsIDExMis0KCVyMSkKKyMgaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsd2EgJXIzLCBSRVRWQUwrMCglcjEpCisjIGVsc2UKKwlsd2EgJXIzLCBSRVRWQUwrNCglcjEpCisjIGVuZGlmCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfRkxPQVQKLQlsZnMgJWYxLCAxMTIrMCglcjEpCisJbGZzICVmMSwgUkVUVkFMKzAoJXIxKQogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX0RPVUJMRQotCWxmZCAlZjEsIDExMiswKCVyMSkKKwlsZmQgJWYxLCBSRVRWQUwrMCglcjEpCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfTE9OR0RPVUJMRQotCWxmZCAlZjEsIDExMiswKCVyMSkKKwlsZmQgJWYxLCBSRVRWQUwrMCglcjEpCiAJbXRsciAlcjAKLQlsZmQgJWYyLCAxMTIrOCglcjEpCisJbGZkICVmMiwgUkVUVkFMKzgoJXIxKQogCWIgLkxmaW5pc2gKICMgY2FzZSBGRklfVFlQRV9VSU5UOAotCWxieiAlcjMsIDExMis3KCVyMSkKKyMgaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsYnogJXIzLCBSRVRWQUwrMCglcjEpCisjIGVsc2UKKwlsYnogJXIzLCBSRVRWQUwrNyglcjEpCisjIGVuZGlmCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfU0lOVDgKLQlsYnogJXIzLCAxMTIrNyglcjEpCisjIGlmZGVmIF9fTElUVExFX0VORElBTl9fCisJbGJ6ICVyMywgUkVUVkFMKzAoJXIxKQorIyBlbHNlCisJbGJ6ICVyMywgUkVUVkFMKzcoJXIxKQorIyBlbmRpZgogCWV4dHNiICVyMywlcjMKIAltdGxyICVyMAogCWIgLkxmaW5pc2gKICMgY2FzZSBGRklfVFlQRV9VSU5UMTYKLQlsaHogJXIzLCAxMTIrNiglcjEpCisjIGlmZGVmIF9fTElUVExFX0VORElBTl9fCisJbGh6ICVyMywgUkVUVkFMKzAoJXIxKQorIyBlbHNlCisJbGh6ICVyMywgUkVUVkFMKzYoJXIxKQorIyBlbmRpZgogCW10bHIgJXIwCiAuTGZpbmlzaDoKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfU0lOVDE2Ci0JbGhhICVyMywgMTEyKzYoJXIxKQorIyBpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWxoYSAlcjMsIFJFVFZBTCswKCVyMSkKKyMgZWxzZQorCWxoYSAlcjMsIFJFVFZBTCs2KCVyMSkKKyMgZW5kaWYKIAltdGxyICVyMAotCWFkZGkgJXIxLCAlcjEsIDI0MAorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKIAlibHIKICMgY2FzZSBGRklfVFlQRV9VSU5UMzIKLQlsd3ogJXIzLCAxMTIrNCglcjEpCisjIGlmZGVmIF9fTElUVExFX0VORElBTl9fCisJbHd6ICVyMywgUkVUVkFMKzAoJXIxKQorIyBlbHNlCisJbHd6ICVyMywgUkVUVkFMKzQoJXIxKQorIyBlbmRpZgogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgogIyBjYXNlIEZGSV9UWVBFX1NJTlQzMgotCWx3YSAlcjMsIDExMis0KCVyMSkKKyMgaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsd2EgJXIzLCBSRVRWQUwrMCglcjEpCisjIGVsc2UKKwlsd2EgJXIzLCBSRVRWQUwrNCglcjEpCisjIGVuZGlmCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfVUlOVDY0Ci0JbGQgJXIzLCAxMTIrMCglcjEpCisJbGQgJXIzLCBSRVRWQUwrMCglcjEpCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfU0lOVDY0Ci0JbGQgJXIzLCAxMTIrMCglcjEpCisJbGQgJXIzLCBSRVRWQUwrMCglcjEpCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAjIGNhc2UgRkZJX1RZUEVfU1RSVUNUCiAJbXRsciAlcjAKLQlhZGRpICVyMSwgJXIxLCAyNDAKKwlhZGRpICVyMSwgJXIxLCBTVEFDS0ZSQU1FCiAJYmxyCiAJbm9wCiAjIGNhc2UgRkZJX1RZUEVfUE9JTlRFUgotCWxkICVyMywgMTEyKzAoJXIxKQorCWxkICVyMywgUkVUVkFMKzAoJXIxKQogCW10bHIgJXIwCi0JYWRkaSAlcjEsICVyMSwgMjQwCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQogCWJscgotIyBlc2FjCisjIGNhc2UgRkZJX1YyX1RZUEVfRkxPQVRfSE9NT0cKKwlsZnMgJWYxLCBSRVRWQUwrMCglcjEpCisJbGZzICVmMiwgUkVUVkFMKzQoJXIxKQorCWxmcyAlZjMsIFJFVFZBTCs4KCVyMSkKKwliIC5MbW9yZWZsb2F0CisjIGNhc2UgRkZJX1YyX1RZUEVfRE9VQkxFX0hPTU9HCisJbGZkICVmMSwgUkVUVkFMKzAoJXIxKQorCWxmZCAlZjIsIFJFVFZBTCs4KCVyMSkKKwlsZmQgJWYzLCBSRVRWQUwrMTYoJXIxKQorCWxmZCAlZjQsIFJFVFZBTCsyNCglcjEpCisJbXRsciAlcjAKKwlsZmQgJWY1LCBSRVRWQUwrMzIoJXIxKQorCWxmZCAlZjYsIFJFVFZBTCs0MCglcjEpCisJbGZkICVmNywgUkVUVkFMKzQ4KCVyMSkKKwlsZmQgJWY4LCBSRVRWQUwrNTYoJXIxKQorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKKwlibHIKKy5MbW9yZWZsb2F0OgorCWxmcyAlZjQsIFJFVFZBTCsxMiglcjEpCisJbXRsciAlcjAKKwlsZnMgJWY1LCBSRVRWQUwrMTYoJXIxKQorCWxmcyAlZjYsIFJFVFZBTCsyMCglcjEpCisJbGZzICVmNywgUkVUVkFMKzI0KCVyMSkKKwlsZnMgJWY4LCBSRVRWQUwrMjgoJXIxKQorCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKKwlibHIKKy5Mc21hbGw6CisjIGlmZGVmIF9fTElUVExFX0VORElBTl9fCisJbGQgJXIzLFJFVFZBTCswKCVyMSkKKwltdGxyICVyMAorCWxkICVyNCxSRVRWQUwrOCglcjEpCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQorCWJscgorIyBlbHNlCisJIyBBIHN0cnVjdCBzbWFsbGVyIHRoYW4gYSBkd29yZCBpcyByZXR1cm5lZCBpbiB0aGUgbG93IGJpdHMgb2YgcjMKKwkjIGllLiByaWdodCBqdXN0aWZpZWQuICBMYXJnZXIgc3RydWN0cyBhcmUgcGFzc2VkIGxlZnQganVzdGlmaWVkCisJIyBpbiByMyBhbmQgcjQuICBUaGUgcmV0dXJuIHZhbHVlIGFyZWEgb24gdGhlIHN0YWNrIHdpbGwgaGF2ZQorCSMgdGhlIHN0cnVjdHMgYXMgdGhleSBhcmUgdXN1YWxseSBzdG9yZWQgaW4gbWVtb3J5LgorCWNtcGxkaSAlcjMsIEZGSV9WMl9UWVBFX1NNQUxMX1NUUlVDVCArIDcgIyBzaXplIDggYnl0ZXM/CisJbmVnICVyNSwgJXIzCisJbGQgJXIzLFJFVFZBTCswKCVyMSkKKwlibHQgLkxzbWFsbGRvd24KKwltdGxyICVyMAorCWxkICVyNCxSRVRWQUwrOCglcjEpCisJYWRkaSAlcjEsICVyMSwgU1RBQ0tGUkFNRQorCWJscgorLkxzbWFsbGRvd246CisJYWRkaSAlcjUsICVyNSwgRkZJX1YyX1RZUEVfU01BTExfU1RSVUNUICsgNworCW10bHIgJXIwCisJc2xkaSAlcjUsICVyNSwgMworCWFkZGkgJXIxLCAlcjEsIFNUQUNLRlJBTUUKKwlzcmQgJXIzLCAlcjMsICVyNQorCWJscgorIyBlbmRpZgorCiAuTEZFMToKIAkubG9uZwkwCiAJLmJ5dGUJMCwxMiwwLDEsMTI4LDAsMCwwCi0jaWZkZWYgX0NBTExfTElOVVgKKyMgaWYgX0NBTExfRUxGID09IDIKKwkuc2l6ZQlmZmlfY2xvc3VyZV9MSU5VWDY0LC4tZmZpX2Nsb3N1cmVfTElOVVg2NAorIyBlbHNlCisjICBpZmRlZiBfQ0FMTF9MSU5VWAogCS5zaXplCWZmaV9jbG9zdXJlX0xJTlVYNjQsLi0uTC5mZmlfY2xvc3VyZV9MSU5VWDY0Ci0jZWxzZQorIyAgZWxzZQogCS5zaXplCS5mZmlfY2xvc3VyZV9MSU5VWDY0LC4tLmZmaV9jbG9zdXJlX0xJTlVYNjQKLSNlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKIAogCS5zZWN0aW9uCS5laF9mcmFtZSxFSF9GUkFNRV9GTEFHUyxAcHJvZ2JpdHMKIC5MZnJhbWUxOgpAQCAtMjM5LDE0ICszNzgsMTQgQEAKIAkuYnl0ZQkweDIJICMgRFdfQ0ZBX2FkdmFuY2VfbG9jMQogCS5ieXRlCS5MQ0ZJMC0uTEZCMQogCS5ieXRlCTB4ZQkgIyBEV19DRkFfZGVmX2NmYV9vZmZzZXQKLQkudWxlYjEyOCAyNDAKKwkudWxlYjEyOCBTVEFDS0ZSQU1FCiAJLmJ5dGUJMHgxMQkgIyBEV19DRkFfb2Zmc2V0X2V4dGVuZGVkX3NmCiAJLnVsZWIxMjggMHg0MQogCS5zbGViMTI4IC0yCiAJLmFsaWduIDMKIC5MRUZERTE6Ci0jZW5kaWYKIAotI2lmIGRlZmluZWQgX19FTEZfXyAmJiBkZWZpbmVkIF9fbGludXhfXworIyBpZiBkZWZpbmVkIF9fRUxGX18gJiYgZGVmaW5lZCBfX2xpbnV4X18KIAkuc2VjdGlvbgkubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisjIGVuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvcHBjX2Nsb3N1cmUuUwppbmRleCA0MWZiODg1Li4wNzU5MjJjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wb3dlcnBjL3BwY19jbG9zdXJlLlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9wcGNfY2xvc3VyZS5TCkBAIC0zMSw3ICszMSw3IEBACiAKIAkuZmlsZSAgICJwcGNfY2xvc3VyZS5TIgogCi0jaWZuZGVmIF9fcG93ZXJwYzY0X18KKyNpZm5kZWYgUE9XRVJQQzY0CiAKIEVOVFJZKGZmaV9jbG9zdXJlX1NZU1YpCiAuTEZCMToKQEAgLTE1OSwyNSArMTU5LDQxIEBACiAjZW5kaWYKIAogIyBjYXNlIEZGSV9UWVBFX1VJTlQ4CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsYnogJXIzLDExMiswKCVyMSkKKyNlbHNlCiAJbGJ6ICVyMywxMTIrMyglcjEpCisjZW5kaWYKIAltdGxyICVyMAogCWFkZGkgJXIxLCVyMSwxNDQKIAlibHIKIAogIyBjYXNlIEZGSV9UWVBFX1NJTlQ4CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsYnogJXIzLDExMiswKCVyMSkKKyNlbHNlCiAJbGJ6ICVyMywxMTIrMyglcjEpCisjZW5kaWYKIAlleHRzYiAlcjMsJXIzCiAJbXRsciAlcjAKIAliIC5MZmluaXNoCiAKICMgY2FzZSBGRklfVFlQRV9VSU5UMTYKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCWxoeiAlcjMsMTEyKzAoJXIxKQorI2Vsc2UKIAlsaHogJXIzLDExMisyKCVyMSkKKyNlbmRpZgogCW10bHIgJXIwCiAJYWRkaSAlcjEsJXIxLDE0NAogCWJscgogCiAjIGNhc2UgRkZJX1RZUEVfU0lOVDE2CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX18KKwlsaGEgJXIzLDExMiswKCVyMSkKKyNlbHNlCiAJbGhhICVyMywxMTIrMiglcjEpCisjZW5kaWYKIAltdGxyICVyMAogCWFkZGkgJXIxLCVyMSwxNDQKIAlibHIKQEAgLTIyMiw3ICsyMzgsNyBAQAogCWx3eiAlcjMsMTEyKzAoJXIxKQogCWx3eiAlcjQsMTEyKzQoJXIxKQogCWx3eiAlcjUsMTEyKzgoJXIxKQotCWJsIC5MdWludDEyOAorCWIgLkx1aW50MTI4CiAKICMgVGhlIHJldHVybiB0eXBlcyBiZWxvdyBhcmUgb25seSB1c2VkIHdoZW4gdGhlIEFCSSB0eXBlIGlzIEZGSV9TWVNWLgogIyBjYXNlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUICsgMS4gT25lIGJ5dGUgc3RydWN0LgpAQCAtMjM5LDkgKzI1NSwxNSBAQAogCiAjIGNhc2UgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKyAzLiBUaHJlZSBieXRlIHN0cnVjdC4KIAlsd3ogJXIzLDExMiswKCVyMSkKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCW10bHIgJXIwCisJYWRkaSAlcjEsJXIxLDE0NAorCWJscgorI2Vsc2UKIAlzcndpICVyMywlcjMsOAogCW10bHIgJXIwCiAJYiAuTGZpbmlzaAorI2VuZGlmCiAKICMgY2FzZSBGRklfU1lTVl9UWVBFX1NNQUxMX1NUUlVDVCArIDQuIEZvdXIgYnl0ZSBzdHJ1Y3QuCiAJbHd6ICVyMywxMTIrMCglcjEpCkBAIC0yNTIsMjAgKzI3NCwzNSBAQAogIyBjYXNlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUICsgNS4gRml2ZSBieXRlIHN0cnVjdC4KIAlsd3ogJXIzLDExMiswKCVyMSkKIAlsd3ogJXI0LDExMis0KCVyMSkKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCW10bHIgJXIwCisJYiAuTGZpbmlzaAorI2Vsc2UKIAlsaSAlcjUsMjQKIAliIC5Mc3RydWN0NTY3CisjZW5kaWYKIAogIyBjYXNlIEZGSV9TWVNWX1RZUEVfU01BTExfU1RSVUNUICsgNi4gU2l4IGJ5dGUgc3RydWN0LgogCWx3eiAlcjMsMTEyKzAoJXIxKQogCWx3eiAlcjQsMTEyKzQoJXIxKQorI2lmZGVmIF9fTElUVExFX0VORElBTl9fCisJbXRsciAlcjAKKwliIC5MZmluaXNoCisjZWxzZQogCWxpICVyNSwxNgogCWIgLkxzdHJ1Y3Q1NjcKKyNlbmRpZgogCiAjIGNhc2UgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKyA3LiBTZXZlbiBieXRlIHN0cnVjdC4KIAlsd3ogJXIzLDExMiswKCVyMSkKIAlsd3ogJXI0LDExMis0KCVyMSkKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXworCW10bHIgJXIwCisJYiAuTGZpbmlzaAorI2Vsc2UKIAlsaSAlcjUsOAogCWIgLkxzdHJ1Y3Q1NjcKKyNlbmRpZgogCiAjIGNhc2UgRkZJX1NZU1ZfVFlQRV9TTUFMTF9TVFJVQ1QgKyA4LiBFaWdodCBieXRlIHN0cnVjdC4KIAlsd3ogJXIzLDExMiswKCVyMSkKQEAgLTI3Myw2ICszMTAsNyBAQAogCW10bHIgJXIwCiAJYiAuTGZpbmlzaAogCisjaWZuZGVmIF9fTElUVExFX0VORElBTl9fCiAuTHN0cnVjdDU2NzoKIAlzdWJmaWMgJXI2LCVyNSwzMgogCXNydyAlcjQsJXI0LCVyNQpAQCAtMjgyLDEzICszMjAsMTQgQEAKIAltdGxyICVyMAogCWFkZGkgJXIxLCVyMSwxNDQKIAlibHIKKyNlbmRpZgogCiAuTHVpbnQxMjg6CiAJbHd6ICVyNiwxMTIrMTIoJXIxKQogCW10bHIgJXIwCiAJYWRkaSAlcjEsJXIxLDE0NAogCWJscgotCisJCiBFTkQoZmZpX2Nsb3N1cmVfU1lTVikKIAogCS5zZWN0aW9uCSIuZWhfZnJhbWUiLEVIX0ZSQU1FX0ZMQUdTLEBwcm9nYml0cwpAQCAtMzM5LDggKzM3OCw3IEBACiAJLmFsaWduIDIKIC5MRUZERTE6CiAKLSNlbmRpZgotCiAjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCiAJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cwogI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3Bvd2VycGMvc3lzdi5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMKaW5kZXggNWVlM2ExOS4uZmVkMjM4MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcG93ZXJwYy9zeXN2LlMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxmZmkuaD4KICNpbmNsdWRlIDxwb3dlcnBjL2FzbS5oPgogCi0jaWZuZGVmIF9fcG93ZXJwYzY0X18KKyNpZm5kZWYgUE9XRVJQQzY0CiAJLmdsb2JsIGZmaV9wcmVwX2FyZ3NfU1lTVgogRU5UUlkoZmZpX2NhbGxfU1lTVikKIC5MRkIxOgpAQCAtMTQyLDE5ICsxNDIsMTQgQEAKICNlbmRpZgogCiBMKHNtYWxsX3N0cnVjdF9yZXR1cm5fdmFsdWUpOgotCWV4dHJ3aQklcjYsJXIzMSwyLDE5ICAgICAgICAgLyogbnVtYmVyIG9mIGJ5dGVzIHBhZGRpbmcgPSBzaGlmdC84ICovCi0JbXRjcmYJMHgwMiwlcjMxCSAgICAgIC8qIGNvcHkgZmxhZ3MgdG8gY3JbMjQ6MjddIChjcjYpICovCi0JZXh0cndpCSVyNSwlcjMxLDUsMTkgICAgICAgICAvKiByNSA8LSBudW1iZXIgb2YgYml0cyBvZiBwYWRkaW5nICovCi0Jc3ViZmljICAlcjYsJXI2LDQgICAgICAgICAgICAgLyogcjYgPC0gbnVtYmVyIG9mIHVzZWZ1bCBieXRlcyBpbiByMyAqLwotCWJmLQkyNSxMKGRvbmVfcmV0dXJuX3ZhbHVlKSAvKiBzdHJ1Y3QgaW4gcjMgPyBpZiBub3QsIGRvbmUuICovCi0vKiBzbXN0X29uZV9yZWdpc3RlcjogKi8KLQlzbHcJJXIzLCVyMywlcjUgICAgICAgICAgIC8qIExlZnQtanVzdGlmeSB2YWx1ZSBpbiByMyAqLwotCW10eGVyCSVyNiAgICAgICAgICAgICAgICAgICAvKiBtb3ZlIGJ5dGUgY291bnQgdG8gWEVSIC4uLiAqLwotCXN0c3d4CSVyMywwLCVyMzAgICAgICAgICAgICAvKiAuLi4gYW5kIHN0b3JlIHRoYXQgbWFueSBieXRlcyAqLwotCWJmKwkyNixMKGRvbmVfcmV0dXJuX3ZhbHVlKSAgLyogc3RydWN0IGluIHIzOnI0ID8gKi8KLQlhZGQJJXI2LCVyNiwlcjMwICAgICAgICAgIC8qIGFkanVzdCBwb2ludGVyICovCi0Jc3Rzd2kJJXI0LCVyNiw0ICAgICAgICAgICAgIC8qIHN0b3JlIGxhc3QgZm91ciBieXRlcyAqLwotCWIJTChkb25lX3JldHVybl92YWx1ZSkKKwkvKgorCSAqIFRoZSBDIGNvZGUgYWx3YXlzIGFsbG9jYXRlcyBhIHByb3Blcmx5LWFsaWduZWQgOC1ieXRlIGJvdW5jZQorCSAqIGJ1ZmZlciB0byBtYWtlIHRoaXMgYXNzZW1ibHkgY29kZSB2ZXJ5IHNpbXBsZS4gIEp1c3Qgd3JpdGUgb3V0CisJICogcjMgYW5kIHI0IHRvIHRoZSBidWZmZXIgdG8gYWxsb3cgdGhlIEMgY29kZSB0byBoYW5kbGUgdGhlIHJlc3QuCisJICovCisJc3R3ICVyMywgMCglcjMwKQorCXN0dyAlcjQsIDQoJXIzMCkKKwliIEwoZG9uZV9yZXR1cm5fdmFsdWUpCiAKIC5MRkUxOgogRU5EKGZmaV9jYWxsX1NZU1YpCkBAIC0yMTgsOCArMjEzLDggQEAKICAgICAgIC51bGViMTI4ICAweDFjCiAgICAgICAuYWxpZ24gMgogLkxFRkRFMToKLSNlbmRpZgogCiAjaWYgZGVmaW5lZCBfX0VMRl9fICYmIGRlZmluZWQgX19saW51eF9fCiAJLnNlY3Rpb24JLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cwogI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ByZXBfY2lmLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy9wcmVwX2NpZi5jCmluZGV4IGU4ZWM1Y2YuLjU1Y2VlZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ByZXBfY2lmLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvcHJlcF9jaWYuYwpAQCAtNzYsNiArNzYsMTMgQEAKICAgICAgdG90YWwgc2l6ZSBvZiAzKnNpemVvZihsb25nKS4gICovCiAgIGFyZy0+c2l6ZSA9IEFMSUdOIChhcmctPnNpemUsIGFyZy0+YWxpZ25tZW50KTsKIAorICAvKiBPbiBzb21lIHRhcmdldHMsIHRoZSBBQkkgZGVmaW5lcyB0aGF0IHN0cnVjdHVyZXMgaGF2ZSBhbiBhZGRpdGlvbmFsCisgICAgIGFsaWdubWVudCBiZXlvbmQgdGhlICJuYXR1cmFsIiBvbmUgYmFzZWQgb24gdGhlaXIgZWxlbWVudHMuICAqLworI2lmZGVmIEZGSV9BR0dSRUdBVEVfQUxJR05NRU5UCisgIGlmIChGRklfQUdHUkVHQVRFX0FMSUdOTUVOVCA+IGFyZy0+YWxpZ25tZW50KQorICAgIGFyZy0+YWxpZ25tZW50ID0gRkZJX0FHR1JFR0FURV9BTElHTk1FTlQ7CisjZW5kaWYKKwogICBpZiAoYXJnLT5zaXplID09IDApCiAgICAgcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKICAgZWxzZQpAQCAtMTExLDEzICsxMTgsOCBAQAogICBGRklfQVNTRVJUKCghaXN2YXJpYWRpYykgfHwgKG5maXhlZGFyZ3MgPj0gMSkpOwogICBGRklfQVNTRVJUKG5maXhlZGFyZ3MgPD0gbnRvdGFsYXJncyk7CiAKLSNpZm5kZWYgWDg2X1dJTjMyCiAgIGlmICghIChhYmkgPiBGRklfRklSU1RfQUJJICYmIGFiaSA8IEZGSV9MQVNUX0FCSSkpCiAgICAgcmV0dXJuIEZGSV9CQURfQUJJOwotI2Vsc2UKLSAgaWYgKCEgKGFiaSA+IEZGSV9GSVJTVF9BQkkgJiYgYWJpIDwgRkZJX0xBU1RfQUJJIHx8IGFiaSA9PSBGRklfVEhJU0NBTEwpKQotICAgIHJldHVybiBGRklfQkFEX0FCSTsKLSNlbmRpZgogCiAgIGNpZi0+YWJpID0gYWJpOwogICBjaWYtPmFyZ190eXBlcyA9IGF0eXBlczsKQEAgLTEyNiw2ICsxMjgsMTAgQEAKIAogICBjaWYtPmZsYWdzID0gMDsKIAorI2lmIEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVAorICBmZmlfcHJlcF90eXBlcyAoYWJpKTsKKyNlbmRpZgorCiAgIC8qIEluaXRpYWxpemUgdGhlIHJldHVybiB0eXBlIGlmIG5lY2Vzc2FyeSAqLwogICBpZiAoKGNpZi0+cnR5cGUtPnNpemUgPT0gMCkgJiYgKGluaXRpYWxpemVfYWdncmVnYXRlKGNpZi0+cnR5cGUpICE9IEZGSV9PSykpCiAgICAgcmV0dXJuIEZGSV9CQURfVFlQRURFRjsKQEAgLTE0Niw3ICsxNTIsOSBAQAogI2lmZGVmIFhURU5TQQogICAgICAgJiYgKGNpZi0+cnR5cGUtPnNpemUgPiAxNikKICNlbmRpZgotCisjaWZkZWYgTklPUzIKKyAgICAgICYmIChjaWYtPnJ0eXBlLT5zaXplID4gOCkKKyNlbmRpZgogICAgICApCiAgICAgYnl0ZXMgPSBTVEFDS19BUkdfU0laRShzaXplb2Yodm9pZCopKTsKICNlbmRpZgpAQCAtMTc0LDcgKzE4Miw3IEBACiAJewogCSAgLyogQWRkIGFueSBwYWRkaW5nIGlmIG5lY2Vzc2FyeSAqLwogCSAgaWYgKCgoKnB0ciktPmFsaWdubWVudCAtIDEpICYgYnl0ZXMpCi0JICAgIGJ5dGVzID0gQUxJR04oYnl0ZXMsICgqcHRyKS0+YWxpZ25tZW50KTsKKwkgICAgYnl0ZXMgPSAodW5zaWduZWQpQUxJR04oYnl0ZXMsICgqcHRyKS0+YWxpZ25tZW50KTsKIAogI2lmZGVmIFRJTEUKIAkgIGlmIChieXRlcyA8IDEwICogRkZJX1NJWkVPRl9BUkcgJiYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3NoL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvZmZpLmMKaW5kZXggMzUxNWI5MS4uOWVjODZiZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvZmZpLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvc2gvZmZpLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNkZWZpbmUgU1RSVUNUX1ZBTFVFX0FERFJFU1NfV0lUSF9BUkcgMAogI2VuZGlmCiAKLS8qIElmIHRoZSBzdHJ1Y3R1cmUgaGFzIGVzc2VudGlhbHkgYW4gdW5pcXVlIGVsZW1lbnQsIHJldHVybiBpdHMgdHlwZS4gICovCisvKiBJZiB0aGUgc3RydWN0dXJlIGhhcyBlc3NlbnRpYWxseSBhbiB1bmlxdWUgZWxlbWVudCwgcmV0dXJuIGl0cyB0eXBlLiAgKi8KIHN0YXRpYyBpbnQKIHNpbXBsZV90eXBlIChmZmlfdHlwZSAqYXJnKQogewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdGlsZS90aWxlLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90aWxlL3RpbGUuUwppbmRleCBhMTg2ZTFmLi5kMWY4MmNiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90aWxlL3RpbGUuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90aWxlL3RpbGUuUwpAQCAtNjAsNyArNjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZm5hZGRyKSh2b2lkKSk7CiAKICAgICAgICAgT24gZW50cnksIFJFR19BUkdTIGNvbnRhaW4gdGhlIG91dGdvaW5nIHJlZ2lzdGVyIHZhbHVlcywKLSAgICAgICAgYW5kIFNUQUNLX0FSR1MgY29udGFpbnRzIFNUQUNLX0FSR19CWVRFUyBvZiBhZGRpdGlvbmFsIHZhbHVlcworICAgICAgICBhbmQgU1RBQ0tfQVJHUyBjb250YWlucyBTVEFDS19BUkdfQllURVMgb2YgYWRkaXRpb25hbCB2YWx1ZXMKICAgICAgICAgdG8gYmUgcGFzc2VkIG9uIHRoZSBzdGFjay4gSWYgU1RBQ0tfQVJHX0JZVEVTIGlzIHplcm8sIHRoZW4KICAgICAgICAgU1RBQ0tfQVJHUyBpcyBpZ25vcmVkLgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90eXBlcy5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdHlwZXMuYwppbmRleCAwYTExZWIwLi4wZGU1OTk0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy90eXBlcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3R5cGVzLmMKQEAgLTQ0LDYgKzQ0LDE3IEBACiAgIGlkLCBOVUxMCQkJCQlcCiB9CiAKKyNkZWZpbmUgRkZJX05PTkNPTlNUX1RZUEVERUYobmFtZSwgdHlwZSwgaWQpCVwKK3N0cnVjdCBzdHJ1Y3RfYWxpZ25fIyNuYW1lIHsJCQlcCisgIGNoYXIgYzsJCQkJCVwKKyAgdHlwZSB4OwkJCQkJXAorfTsJCQkJCQlcCitmZmlfdHlwZSBmZmlfdHlwZV8jI25hbWUgPSB7CQkJXAorICBzaXplb2YodHlwZSksCQkJCQlcCisgIG9mZnNldG9mKHN0cnVjdCBzdHJ1Y3RfYWxpZ25fIyNuYW1lLCB4KSwJXAorICBpZCwgTlVMTAkJCQkJXAorfQorCiAvKiBTaXplIGFuZCBhbGlnbm1lbnQgYXJlIGZha2UgaGVyZS4gVGhleSBtdXN0IG5vdCBiZSAwLiAqLwogY29uc3QgZmZpX3R5cGUgZmZpX3R5cGVfdm9pZCA9IHsKICAgMSwgMSwgRkZJX1RZUEVfVk9JRCwgTlVMTApAQCAtNzMsNSArODQsOSBAQAogIyBlbmRpZgogY29uc3QgZmZpX3R5cGUgZmZpX3R5cGVfbG9uZ2RvdWJsZSA9IHsgMTYsIDE2LCA0LCBOVUxMIH07CiAjZWxpZiBGRklfVFlQRV9MT05HRE9VQkxFICE9IEZGSV9UWVBFX0RPVUJMRQorIyBpZiBIQVZFX0xPTkdfRE9VQkxFX1ZBUklBTlQKK0ZGSV9OT05DT05TVF9UWVBFREVGKGxvbmdkb3VibGUsIGxvbmcgZG91YmxlLCBGRklfVFlQRV9MT05HRE9VQkxFKTsKKyMgZWxzZQogRkZJX1RZUEVERUYobG9uZ2RvdWJsZSwgbG9uZyBkb3VibGUsIEZGSV9UWVBFX0xPTkdET1VCTEUpOworIyBlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy92YXgvZWxmYnNkLlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy92YXgvZWxmYnNkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFjYTMxMwotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ZheC9lbGZic2QuUwpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMyBNaW9kcmFnIFZhbGxhdC4gIDxtaW9kQG9wZW5ic2Qub3JnPgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworICogYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiBgYFNvZnR3YXJlJycpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKiAKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCisgKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyAqIAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsCisgKiBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRQorICogU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIHZheCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZQorICovCisKKyNkZWZpbmUgTElCRkZJX0FTTQkKKyNpbmNsdWRlIDxmZmljb25maWcuaD4KKyNpbmNsdWRlIDxmZmkuaD4KKworCS50ZXh0CisKKy8qCisgKiB2b2lkICoJCQkJCSVyMAorICogZmZpX2NhbGxfZWxmYnNkKGV4dGVuZGVkX2NpZiAqZWNpZiwJCTQoJWFwKQorICoJCSAgIHVuc2lnbmVkIGJ5dGVzLAkJOCglYXApCisgKgkJICAgdW5zaWduZWQgZmxhZ3MsCQkxMiglYXApCisgKgkJICAgdm9pZCAqcnZhbHVlLAkJMTYoJWFwKQorICoJCSAgIHZvaWQgKCpmbikoKSk7CQkyMCglYXApCisgKi8KKwkuZ2xvYmwJZmZpX2NhbGxfZWxmYnNkCisJLnR5cGUJZmZpX2NhbGxfZWxmYnNkLEBmdW5jdGlvbgorCS5hbGlnbgkyCitmZmlfY2FsbF9lbGZic2Q6CisJLndvcmQJMHgwMGMJCSMgc2F2ZSBSMiBhbmQgUjMKKworCSMgQWxsb2NhdGUgc3RhY2sgc3BhY2UgZm9yIHRoZSBhcmdzCisJc3VibDIJOCglYXApLCAlc3AKKworCSMgQ2FsbCBmZmlfcHJlcF9hcmdzCisJcHVzaGwJJXNwCisJcHVzaGwJNCglYXApCisJY2FsbHMJJDIsIGZmaV9wcmVwX2FyZ3MKKworCSMgR2V0IGZ1bmN0aW9uIHBvaW50ZXIKKwltb3ZsCTIwKCVhcCksICVyMQorCisJIyBCdWlsZCBhIENBTExTIGZyYW1lCisJYXNobAkkLTIsIDgoJWFwKSwgJXIwCisJcHVzaGwJJXIwCQkjIGFyZ3VtZW50IHN0YWNrIHVzYWdlCisJbW92bAklc3AsICVyMAkjIGZ1dHVyZSAlYXAKKwkjIHNhdmVkIHJlZ2lzdGVycworCWJiYwkkMTEsIDAoJXIxKSwgMWYKKwlwdXNobAklcjExCisxOgliYmMJJDEwLCAwKCVyMSksIDFmCisJcHVzaGwJJXIxMAorMToJYmJjCSQ5LCAwKCVyMSksIDFmCisJcHVzaGwJJXI5CisxOgliYmMJJDgsIDAoJXIxKSwgMWYKKwlwdXNobAklcjgKKzE6CWJiYwkkNywgMCglcjEpLCAxZgorCXB1c2hsCSVyNworMToJYmJjCSQ2LCAwKCVyMSksIDFmCisJcHVzaGwJJXI2CisxOgliYmMJJDUsIDAoJXIxKSwgMWYKKwlwdXNobAklcjUKKzE6CWJiYwkkNCwgMCglcjEpLCAxZgorCXB1c2hsCSVyNAorMToJYmJjCSQzLCAwKCVyMSksIDFmCisJcHVzaGwJJXIzCisxOgliYmMJJDIsIDAoJXIxKSwgMWYKKwlwdXNobAklcjIKKzE6CQorCXB1c2hhbAk5ZgorCXB1c2hsCSVmcAorCXB1c2hsCSVhcAorCW1vdmwJMTYoJWFwKSwgJXIzCSMgc3RydWN0IHJldHVybiBhZGRyZXNzLCBpZiBuZWVkZWQKKwltb3ZsCSVyMCwgJWFwCisJbW92endsCTQoJWZwKSwgJXIwCSMgcHJldmlvdXMgUFNXLCB3aXRob3V0IHRoZSBzYXZlZCByZWdpc3RlcnMgbWFzaworCWJpc2wyCSQweDIwMDAwMDAwLCAlcjAgIyBjYWxscyBmcmFtZQorCW1vdnp3bAkwKCVyMSksICVyMgorCWJpY3cyCSQweGYwMDMsICVyMgkjIG9ubHkga2VlcCBSMTEtUjIKKwlhc2hsCSQxNiwgJXIyLCAlcjIKKwliaXNsMgklcjIsICVyMAkjIHNhdmVkIHJlZ2lzdGVyIG1hc2sgb2YgdGhlIGNhbGxlZCBmdW5jdGlvbgorCXB1c2hsCSVyMAkKKwlwdXNobAkkMAorCW1vdmwJJXNwLCAlZnAKKworCSMgSW52b2tlIHRoZSBmdW5jdGlvbgorCXB1c2hhbAkyKCVyMSkJCSMgc2tpcCBwcm9jZWR1cmUgZW50cnkgbWFzaworCW1vdmwJJXIzLCAlcjEKKwliaWNwc3cJJDB4MDAwZgorCXJzYgorCis5OgorCSMgQ29weSByZXR1cm4gdmFsdWUgaWYgbmVjZXNzYXJ5CisJdHN0bAkxNiglYXApCisJamVxbAk5ZgorCW1vdmwJMTYoJWFwKSwgJXIyCisKKwliYmMJJDAsIDEyKCVhcCksIDFmCSMgQ0lGX0ZMQUdTX0NIQVIKKwltb3ZiCSVyMCwgMCglcjIpCisJYnJiCTlmCisxOgorCWJiYwkkMSwgMTIoJWFwKSwgMWYJIyBDSUZfRkxBR1NfU0hPUlQKKwltb3Z3CSVyMCwgMCglcjIpCisJYnJiCTlmCisxOgorCWJiYwkkMiwgMTIoJWFwKSwgMWYJIyBDSUZfRkxBR1NfSU5UCisJbW92bAklcjAsIDAoJXIyKQorCWJyYgk5ZgorMToKKwliYmMJJDMsIDEyKCVhcCksIDFmCSMgQ0lGX0ZMQUdTX0RJTlQKKwltb3ZxCSVyMCwgMCglcjIpCisJYnJiCTlmCisxOgorCW1vdmwJJXIxLCAlcjAJIyBtaWdodCBoYXZlIGJlZW4gYSBzdHJ1Y3QKKwkjYnJiCTlmCisKKzk6CisJcmV0CisKKy8qCisgKiBmZmlfY2xvc3VyZV9lbGZic2Qodm9pZCk7CisgKiBpbnZva2VkIHdpdGgJJXIwOiBmZmlfY2xvc3VyZSAqY2xvc3VyZQorICovCisJLmdsb2JsCWZmaV9jbG9zdXJlX2VsZmJzZAorCS50eXBlCWZmaV9jbG9zdXJlX2VsZmJzZCwgQGZ1bmN0aW9uCisJLmFsaWduCTIKK2ZmaV9jbG9zdXJlX2VsZmJzZDoKKwkud29yZAkwCisKKwkjIEFsbG9jYXRlIHJvb20gb24gc3RhY2sgZm9yIHJldHVybiB2YWx1ZQorCXN1YmwyCSQ4LCAlc3AKKworCSMgSW52b2tlIHRoZSBjbG9zdXJlIGZ1bmN0aW9uCisJcHVzaGFsCTQoJWFwKQkJIyBjYWxsaW5nIHN0YWNrCisJcHVzaGFsCTQoJXNwKQkJIyByZXR1cm4gdmFsdWUKKwlwdXNobAklcjAJCSMgY2xvc3VyZQorCWNhbGxzCSQzLCBmZmlfY2xvc3VyZV9lbGZic2RfaW5uZXIKKworCSMgQ29weSByZXR1cm4gdmFsdWUgaWYgbmVjZXNzYXJ5CisJYml0YgkkMSwgJXIwCQkjIENJRl9GTEFHU19DSEFSCisJYmVxbAkxZgorCW1vdmIJMCglc3ApLCAlcjAKKwlicmIJOWYKKzE6CisJYml0YgkkMiwgJXIwCQkjIENJRl9GTEFHU19TSE9SVAorCWJlcWwJMWYKKwltb3Z3CTAoJXNwKSwgJXIwCisJYnJiCTlmCisxOgorCWJpdGIJJDQsICVyMAkJIyBDSUZfRkxBR1NfSU5UCisJYmVxbAkxZgorCW1vdmwJMCglc3ApLCAlcjAKKwlicmIJOWYKKzE6CisJYml0YgkkOCwgJXIwCQkjIENJRl9GTEFHU19ESU5UCisJYmVxbAkxZgorCW1vdnEJMCglc3ApLCAlcjAKKwkjYnJiCTlmCisxOgorCis5OgorCXJldAorCisvKgorICogZmZpX2Nsb3N1cmVfc3RydWN0X2VsZmJzZCh2b2lkKTsKKyAqIGludm9rZWQgd2l0aAklcjA6IGZmaV9jbG9zdXJlICpjbG9zdXJlCisgKgkJJXIxOiBzdHJ1Y3QgcmV0dXJuIGFkZHJlc3MKKyAqLworCS5nbG9ibAlmZmlfY2xvc3VyZV9zdHJ1Y3RfZWxmYnNkCisJLnR5cGUJZmZpX2Nsb3N1cmVfc3RydWN0X2VsZmJzZCwgQGZ1bmN0aW9uCisJLmFsaWduCTIKK2ZmaV9jbG9zdXJlX3N0cnVjdF9lbGZic2Q6CisJLndvcmQJMAorCisJIyBJbnZva2UgdGhlIGNsb3N1cmUgZnVuY3Rpb24KKwlwdXNoYWwJNCglYXApCQkjIGNhbGxpbmcgc3RhY2sKKwlwdXNobAklcjEJCSMgcmV0dXJuIHZhbHVlCisJcHVzaGwJJXIwCQkjIGNsb3N1cmUKKwljYWxscwkkMywgZmZpX2Nsb3N1cmVfZWxmYnNkX2lubmVyCisKKwlyZXQKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ZheC9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ZheC9mZmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGQ2YmJiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMvdmF4L2ZmaS5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIE1pb2RyYWcgVmFsbGF0LiAgPG1pb2RAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvKgorICogdmF4IEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisgKgorICogVGhpcyBmaWxlIGF0dGVtcHRzIHRvIHByb3ZpZGUgYWxsIHRoZSBGRkkgZW50cnkgcG9pbnRzIHdoaWNoIGNhbiByZWxpYWJseQorICogYmUgaW1wbGVtZW50ZWQgaW4gQy4KKyAqLworCisjaW5jbHVkZSA8ZmZpLmg+CisjaW5jbHVkZSA8ZmZpX2NvbW1vbi5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNkZWZpbmUgQ0lGX0ZMQUdTX0NIQVIJCTEJLyogZm9yIHN0cnVjdCBvbmx5ICovCisjZGVmaW5lIENJRl9GTEFHU19TSE9SVAkJMgkvKiBmb3Igc3RydWN0IG9ubHkgKi8KKyNkZWZpbmUgQ0lGX0ZMQUdTX0lOVAkJNAorI2RlZmluZSBDSUZfRkxBR1NfRElOVAkJOAorCisvKgorICogRm9yZWlnbiBGdW5jdGlvbiBJbnRlcmZhY2UgQVBJCisgKi8KKwordm9pZCBmZmlfY2FsbF9lbGZic2QgKGV4dGVuZGVkX2NpZiAqLCB1bnNpZ25lZCwgdW5zaWduZWQsIHZvaWQgKiwKKwkJICAgICAgIHZvaWQgKCopICgpKTsKK3ZvaWQgKmZmaV9wcmVwX2FyZ3MgKGV4dGVuZGVkX2NpZiAqZWNpZiwgdm9pZCAqc3RhY2spOworCit2b2lkICoKK2ZmaV9wcmVwX2FyZ3MgKGV4dGVuZGVkX2NpZiAqZWNpZiwgdm9pZCAqc3RhY2spCit7CisgIHVuc2lnbmVkIGludCBpOworICB2b2lkICoqcF9hcmd2OworICBjaGFyICphcmdwOworICBmZmlfdHlwZSAqKnBfYXJnOworICB2b2lkICpzdHJ1Y3RfdmFsdWVfcHRyOworCisgIGFyZ3AgPSBzdGFjazsKKworICBpZiAoZWNpZi0+Y2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmICFlY2lmLT5jaWYtPmZsYWdzKQorICAgIHN0cnVjdF92YWx1ZV9wdHIgPSBlY2lmLT5ydmFsdWU7CisgIGVsc2UKKyAgICBzdHJ1Y3RfdmFsdWVfcHRyID0gTlVMTDsKKworICBwX2FyZ3YgPSBlY2lmLT5hdmFsdWU7CisKKyAgZm9yIChpID0gZWNpZi0+Y2lmLT5uYXJncywgcF9hcmcgPSBlY2lmLT5jaWYtPmFyZ190eXBlczsKKyAgICAgICBpICE9IDA7CisgICAgICAgaS0tLCBwX2FyZysrKQorICAgIHsKKyAgICAgIHNpemVfdCB6OworCisgICAgICB6ID0gKCpwX2FyZyktPnNpemU7CisgICAgICBpZiAoeiA8IHNpemVvZiAoaW50KSkKKwl7CisJICBzd2l0Y2ggKCgqcF9hcmcpLT50eXBlKQorCSAgICB7CisJICAgIGNhc2UgRkZJX1RZUEVfU0lOVDg6CisJICAgICAgKihzaWduZWQgaW50ICopIGFyZ3AgPSAoc2lnbmVkIGludCkgKihTSU5UOCAqKSAqcF9hcmd2OworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRkZJX1RZUEVfVUlOVDg6CisJICAgICAgKih1bnNpZ25lZCBpbnQgKikgYXJncCA9ICh1bnNpZ25lZCBpbnQpICooVUlOVDggKikgKnBfYXJndjsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIEZGSV9UWVBFX1NJTlQxNjoKKwkgICAgICAqKHNpZ25lZCBpbnQgKikgYXJncCA9IChzaWduZWQgaW50KSAqKFNJTlQxNiAqKSAqcF9hcmd2OworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRkZJX1RZUEVfVUlOVDE2OgorCSAgICAgICoodW5zaWduZWQgaW50ICopIGFyZ3AgPSAodW5zaWduZWQgaW50KSAqKFVJTlQxNiAqKSAqcF9hcmd2OworCSAgICAgIGJyZWFrOworCisJICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgorCSAgICAgIG1lbWNweSAoYXJncCwgKnBfYXJndiwgeik7CisJICAgICAgYnJlYWs7CisKKwkgICAgZGVmYXVsdDoKKwkgICAgICBGRklfQVNTRVJUICgwKTsKKwkgICAgfQorCSAgeiA9IHNpemVvZiAoaW50KTsKKwl9CisgICAgICBlbHNlCisJeworCSAgbWVtY3B5IChhcmdwLCAqcF9hcmd2LCB6KTsKKworCSAgLyogQWxpZ24gaWYgbmVjZXNzYXJ5LiAgKi8KKwkgIGlmICgoc2l6ZW9mKGludCkgLSAxKSAmIHopCisJICAgIHogPSBBTElHTih6LCBzaXplb2YoaW50KSk7CisJfQorCisgICAgICBwX2FyZ3YrKzsKKyAgICAgIGFyZ3AgKz0gejsKKyAgICB9CisKKyAgcmV0dXJuIHN0cnVjdF92YWx1ZV9wdHI7Cit9CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2NpZl9tYWNoZGVwIChmZmlfY2lmICpjaWYpCit7CisgIC8qIFNldCB0aGUgcmV0dXJuIHR5cGUgZmxhZyAqLworICBzd2l0Y2ggKGNpZi0+cnR5cGUtPnR5cGUpCisgICAgeworICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKKyAgICAgIGNpZi0+ZmxhZ3MgPSAwOworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKKyAgICAgIGlmIChjaWYtPnJ0eXBlLT5lbGVtZW50c1swXS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QgJiYKKwkgIGNpZi0+cnR5cGUtPmVsZW1lbnRzWzFdKQorCXsKKwkgIGNpZi0+ZmxhZ3MgPSAwOworCSAgYnJlYWs7CisJfQorCisgICAgICBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA9PSBzaXplb2YgKGNoYXIpKQorCWNpZi0+ZmxhZ3MgPSBDSUZfRkxBR1NfQ0hBUjsKKyAgICAgIGVsc2UgaWYgKGNpZi0+cnR5cGUtPnNpemUgPT0gc2l6ZW9mIChzaG9ydCkpCisJY2lmLT5mbGFncyA9IENJRl9GTEFHU19TSE9SVDsKKyAgICAgIGVsc2UgaWYgKGNpZi0+cnR5cGUtPnNpemUgPT0gc2l6ZW9mIChpbnQpKQorCWNpZi0+ZmxhZ3MgPSBDSUZfRkxBR1NfSU5UOworICAgICAgZWxzZSBpZiAoY2lmLT5ydHlwZS0+c2l6ZSA9PSAyICogc2l6ZW9mIChpbnQpKQorCWNpZi0+ZmxhZ3MgPSBDSUZfRkxBR1NfRElOVDsKKyAgICAgIGVsc2UKKwljaWYtPmZsYWdzID0gMDsKKyAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgIGlmIChjaWYtPnJ0eXBlLT5zaXplIDw9IHNpemVvZiAoaW50KSkKKwljaWYtPmZsYWdzID0gQ0lGX0ZMQUdTX0lOVDsKKyAgICAgIGVsc2UKKwljaWYtPmZsYWdzID0gQ0lGX0ZMQUdTX0RJTlQ7CisgICAgICBicmVhazsKKyAgICB9CisKKyAgcmV0dXJuIEZGSV9PSzsKK30KKwordm9pZAorZmZpX2NhbGwgKGZmaV9jaWYgKmNpZiwgdm9pZCAoKmZuKSAoKSwgdm9pZCAqcnZhbHVlLCB2b2lkICoqYXZhbHVlKQoreworICBleHRlbmRlZF9jaWYgZWNpZjsKKworICBlY2lmLmNpZiA9IGNpZjsKKyAgZWNpZi5hdmFsdWUgPSBhdmFsdWU7CisKKyAgLyogSWYgdGhlIHJldHVybiB2YWx1ZSBpcyBhIHN0cnVjdCBhbmQgd2UgZG9uJ3QgaGF2ZSBhIHJldHVybiB2YWx1ZQorICAgICBhZGRyZXNzIHRoZW4gd2UgbmVlZCB0byBtYWtlIG9uZS4gICovCisKKyAgaWYgKHJ2YWx1ZSA9PSBOVUxMCisgICAgICAmJiBjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAorICAgICAgJiYgY2lmLT5mbGFncyA9PSAwKQorICAgIGVjaWYucnZhbHVlID0gYWxsb2NhIChjaWYtPnJ0eXBlLT5zaXplKTsKKyAgZWxzZQorICAgIGVjaWYucnZhbHVlID0gcnZhbHVlOworCisgIHN3aXRjaCAoY2lmLT5hYmkpCisgICAgeworICAgIGNhc2UgRkZJX0VMRkJTRDoKKyAgICAgIGZmaV9jYWxsX2VsZmJzZCAoJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CisgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICBGRklfQVNTRVJUICgwKTsKKyAgICAgIGJyZWFrOworICAgIH0KK30KKworLyoKKyAqIENsb3N1cmUgQVBJCisgKi8KKwordm9pZCBmZmlfY2xvc3VyZV9lbGZic2QgKHZvaWQpOwordm9pZCBmZmlfY2xvc3VyZV9zdHJ1Y3RfZWxmYnNkICh2b2lkKTsKK3Vuc2lnbmVkIGludCBmZmlfY2xvc3VyZV9lbGZic2RfaW5uZXIgKGZmaV9jbG9zdXJlICosIHZvaWQgKiwgY2hhciAqKTsKKworc3RhdGljIHZvaWQKK2ZmaV9wcmVwX2Nsb3N1cmVfZWxmYnNkIChmZmlfY2lmICpjaWYsIHZvaWQgKiphdmFsdWUsIGNoYXIgKnN0YWNrcCkKK3sKKyAgdW5zaWduZWQgaW50IGk7CisgIHZvaWQgKipwX2FyZ3Y7CisgIGZmaV90eXBlICoqcF9hcmc7CisKKyAgcF9hcmd2ID0gYXZhbHVlOworCisgIGZvciAoaSA9IGNpZi0+bmFyZ3MsIHBfYXJnID0gY2lmLT5hcmdfdHlwZXM7IGkgIT0gMDsgaS0tLCBwX2FyZysrKQorICAgIHsKKyAgICAgIHNpemVfdCB6OworCisgICAgICB6ID0gKCpwX2FyZyktPnNpemU7CisgICAgICAqcF9hcmd2ID0gc3RhY2twOworCisgICAgICAvKiBBbGlnbiBpZiBuZWNlc3NhcnkgKi8KKyAgICAgIGlmICgoc2l6ZW9mIChpbnQpIC0gMSkgJiB6KQorCXogPSBBTElHTih6LCBzaXplb2YgKGludCkpOworCisgICAgICBwX2FyZ3YrKzsKKyAgICAgIHN0YWNrcCArPSB6OworICAgIH0KK30KKwordW5zaWduZWQgaW50CitmZmlfY2xvc3VyZV9lbGZic2RfaW5uZXIgKGZmaV9jbG9zdXJlICpjbG9zdXJlLCB2b2lkICpyZXNwLCBjaGFyICpzdGFjaykKK3sKKyAgZmZpX2NpZiAqY2lmOworICB2b2lkICoqYXJnX2FyZWE7CisKKyAgY2lmID0gY2xvc3VyZS0+Y2lmOworICBhcmdfYXJlYSA9ICh2b2lkICoqKSBhbGxvY2EgKGNpZi0+bmFyZ3MgKiBzaXplb2YgKHZvaWQgKikpOworCisgIGZmaV9wcmVwX2Nsb3N1cmVfZWxmYnNkIChjaWYsIGFyZ19hcmVhLCBzdGFjayk7CisKKyAgKGNsb3N1cmUtPmZ1bikgKGNpZiwgcmVzcCwgYXJnX2FyZWEsIGNsb3N1cmUtPnVzZXJfZGF0YSk7CisKKyAgcmV0dXJuIGNpZi0+ZmxhZ3M7Cit9CisKK2ZmaV9zdGF0dXMKK2ZmaV9wcmVwX2Nsb3N1cmVfbG9jIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgZmZpX2NpZiAqY2lmLAorCQkgICAgICB2b2lkICgqZnVuKShmZmlfY2lmICosIHZvaWQgKiwgdm9pZCAqKiwgdm9pZCAqKSwKKwkJICAgICAgdm9pZCAqdXNlcl9kYXRhLCB2b2lkICpjb2RlbG9jKQoreworICBjaGFyICp0cmFtcCA9IChjaGFyICopIGNvZGVsb2M7CisgIHZvaWQgKmZuOworCisgIEZGSV9BU1NFUlQgKGNpZi0+YWJpID09IEZGSV9FTEZCU0QpOworCisgIC8qIGVudHJ5IG1hc2sgKi8KKyAgKih1bnNpZ25lZCBzaG9ydCAqKSh0cmFtcCArIDApID0gMHgwMDAwOworICAvKiBtb3ZsICNjbG9zdXJlLCByMCAqLworICB0cmFtcFsyXSA9IDB4ZDA7CisgIHRyYW1wWzNdID0gMHg4ZjsKKyAgKih1bnNpZ25lZCBpbnQgKikodHJhbXAgKyA0KSA9ICh1bnNpZ25lZCBpbnQpIGNsb3N1cmU7CisgIHRyYW1wWzhdID0gMHg1MDsKKworICBpZiAoY2lmLT5ydHlwZS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmICFjaWYtPmZsYWdzKQorICAgIGZuID0gJmZmaV9jbG9zdXJlX3N0cnVjdF9lbGZic2Q7CisgIGVsc2UKKyAgICBmbiA9ICZmZmlfY2xvc3VyZV9lbGZic2Q7CisKKyAgLyogam1wbCAjZm4gKi8KKyAgdHJhbXBbOV0gPSAweDE3OworICB0cmFtcFsxMF0gPSAweGVmOworICAqKHVuc2lnbmVkIGludCAqKSh0cmFtcCArIDExKSA9ICh1bnNpZ25lZCBpbnQpZm4gKyAyIC0KKwkJCQkgICh1bnNpZ25lZCBpbnQpdHJhbXAgLSA5IC0gNjsKKworICBjbG9zdXJlLT5jaWYgPSBjaWY7CisgIGNsb3N1cmUtPnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgY2xvc3VyZS0+ZnVuID0gZnVuOworCisgIHJldHVybiBGRklfT0s7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy92YXgvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy92YXgvZmZpdGFyZ2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZjOTQ4OAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3ZheC9mZml0YXJnZXQuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEzIE1pb2RyYWcgVmFsbGF0LiAgPG1pb2RAb3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCisgKiBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqIGBgU29mdHdhcmUnJyksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqIAorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKKyAqIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICogCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorICogQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCisgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisvKgorICogdmF4IEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCisgKi8KKworI2lmbmRlZiBMSUJGRklfVEFSR0VUX0gKKyNkZWZpbmUgTElCRkZJX1RBUkdFVF9ICisKKyNpZm5kZWYgTElCRkZJX0FTTQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGZmaV9hcmc7Cit0eXBlZGVmIHNpZ25lZCBsb25nIGZmaV9zYXJnOworCit0eXBlZGVmIGVudW0gZmZpX2FiaSB7CisgIEZGSV9GSVJTVF9BQkkgPSAwLAorICBGRklfRUxGQlNELAorICBGRklfREVGQVVMVF9BQkkgPSBGRklfRUxGQlNELAorICBGRklfTEFTVF9BQkkgPSBGRklfREVGQVVMVF9BQkkgKyAxCit9IGZmaV9hYmk7CisjZW5kaWYKKworLyogLS0tLSBEZWZpbml0aW9ucyBmb3IgY2xvc3VyZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBGRklfQ0xPU1VSRVMgMQorI2RlZmluZSBGRklfVFJBTVBPTElORV9TSVpFIDE1CisjZGVmaW5lIEZGSV9OQVRJVkVfUkFXX0FQSSAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2RhcndpbjY0LlMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZGFyd2luNjQuUwppbmRleCAyZjczOTRlLi4wYzcyZWQyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZGFyd2luNjQuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZGFyd2luNjQuUwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJLnNldAlMJHNldCQzLExVVzEtTFVXMAogCS5sb25nCUwkc2V0JDMKIAotCS8qIE5ldyBzdGFjayBmcmFtZSBiYXNlZCBvZmYgcmJwLiAgVGhpcyBpcyBhIGl0dHkgYml0IG9mIHVud2luZAorCS8qIE5ldyBzdGFjayBmcmFtZSBiYXNlZCBvZmYgcmJwLiAgVGhpcyBpcyBhbiBpdHR5IGJpdCBvZiB1bndpbmQKIAkgICB0cmlja2VyeSBpbiB0aGF0IHRoZSBDRkEgKmhhcyogY2hhbmdlZC4gIFRoZXJlIGlzIG5vIGVhc3kgd2F5CiAJICAgdG8gZGVzY3JpYmUgaXQgY29ycmVjdGx5IG9uIGVudHJ5IHRvIHRoZSBmdW5jdGlvbi4gIEZvcnR1bmF0ZWx5LAogCSAgIGl0IGRvZXNuJ3QgbWF0dGVyIHRvbyBtdWNoIHNpbmNlIGF0IGFsbCBwb2ludHMgd2UgY2FuIGNvcnJlY3RseQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaS5jCmluZGV4IDA2MDA0MTQuLmRiZjljOGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpLmMKQEAgLTM5LDE2ICszOSwxOCBAQAogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKKwogLyogZmZpX3ByZXBfYXJncyBpcyBjYWxsZWQgYnkgdGhlIGFzc2VtYmx5IHJvdXRpbmUgb25jZSBzdGFjayBzcGFjZQogICAgaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGUgZnVuY3Rpb24ncyBhcmd1bWVudHMgKi8KIAordm9pZCBmZmlfcHJlcF9hcmdzKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYpOwogdm9pZCBmZmlfcHJlcF9hcmdzKGNoYXIgKnN0YWNrLCBleHRlbmRlZF9jaWYgKmVjaWYpCiB7CiAgIHJlZ2lzdGVyIHVuc2lnbmVkIGludCBpOwogICByZWdpc3RlciB2b2lkICoqcF9hcmd2OwogICByZWdpc3RlciBjaGFyICphcmdwOwogICByZWdpc3RlciBmZmlfdHlwZSAqKnBfYXJnOwotI2lmZGVmIFg4Nl9XSU4zMgorI2lmbmRlZiBYODZfV0lONjQKICAgc2l6ZV90IHBfc3RhY2tfYXJnc1syXTsKICAgdm9pZCAqcF9zdGFja19kYXRhWzJdOwogICBjaGFyICphcmdwMiA9IHN0YWNrOwpAQCAtNjcsNyArNjksNyBAQAogICAgICAgKQogICAgIHsKICAgICAgICoodm9pZCAqKikgYXJncCA9IGVjaWYtPnJ2YWx1ZTsKLSNpZmRlZiBYODZfV0lOMzIKKyNpZm5kZWYgWDg2X1dJTjY0CiAgICAgICAvKiBGb3IgZmFzdGNhbGwvdGhpc2NhbGwgdGhpcyBpcyBmaXJzdCByZWdpc3Rlci1wYXNzZWQKICAgICAgICAgIGFyZ3VtZW50LiAgKi8KICAgICAgIGlmIChjYWJpID09IEZGSV9USElTQ0FMTCB8fCBjYWJpID09IEZGSV9GQVNUQ0FMTCkKQEAgLTE1Myw3ICsxNTUsNyBAQAogICAgICAgICAgIG1lbWNweShhcmdwLCAqcF9hcmd2LCB6KTsKICAgICAgICAgfQogCi0jaWZkZWYgWDg2X1dJTjMyCisjaWZuZGVmIFg4Nl9XSU42NAogICAgIC8qIEZvciB0aGlzY2FsbC9mYXN0Y2FsbCBjb252ZW50aW9uIHJlZ2lzdGVyLXBhc3NlZCBhcmd1bWVudHMKICAgICAgICBhcmUgdGhlIGZpcnN0IHR3byBub25lLWZsb2F0aW5nLXBvaW50IGFyZ3VtZW50cyB3aXRoIGEgc2l6ZQogICAgICAgIHNtYWxsZXIgb3IgZXF1YWwgdG8gc2l6ZW9mICh2b2lkKikuICAqLwpAQCAtMTc4LDcgKzE4MCw3IEBACiAjZW5kaWYKICAgICB9CiAKLSNpZmRlZiBYODZfV0lOMzIKKyNpZm5kZWYgWDg2X1dJTjY0CiAgIC8qIFdlIG5lZWQgdG8gbW92ZSB0aGUgcmVnaXN0ZXItcGFzc2VkIGFyZ3VtZW50cyBmb3IgdGhpc2NhbGwvZmFzdGNhbGwKICAgICAgb24gdG9wIG9mIHN0YWNrLCBzbyB0aGF0IHRob3NlIGNhbiBiZSBtb3ZlZCB0byByZWdpc3RlcnMgZWN4L2VkeCBieQogICAgICBjYWxsLWhhbmRsZXIuICAqLwpAQCAtMzA3LDcgKzMwOSw3IEBACiAgICAgewogICAgICAgaWYgKCgoKnB0ciktPmFsaWdubWVudCAtIDEpICYgY2lmLT5ieXRlcykKICAgICAgICAgY2lmLT5ieXRlcyA9IEFMSUdOKGNpZi0+Ynl0ZXMsICgqcHRyKS0+YWxpZ25tZW50KTsKLSAgICAgIGNpZi0+Ynl0ZXMgKz0gQUxJR04oKCpwdHIpLT5zaXplLCBGRklfU0laRU9GX0FSRyk7CisgICAgICBjaWYtPmJ5dGVzICs9ICh1bnNpZ25lZClBTElHTigoKnB0ciktPnNpemUsIEZGSV9TSVpFT0ZfQVJHKTsKICAgICB9CiAKICNpZmRlZiBYODZfV0lONjQKQEAgLTMxNSw3ICszMTcsMTIgQEAKICAgY2lmLT5ieXRlcyArPSA0ICogc2l6ZW9mKGZmaV9hcmcpOwogI2VuZGlmCiAKLSAgY2lmLT5ieXRlcyA9IChjaWYtPmJ5dGVzICsgMTUpICYgfjB4RjsKKyNpZm5kZWYgWDg2X1dJTjMyCisjaWZuZGVmIFg4Nl9XSU42NAorICBpZiAoY2lmLT5hYmkgIT0gRkZJX1NURENBTEwgJiYgY2lmLT5hYmkgIT0gRkZJX1RISVNDQUxMICYmIGNpZi0+YWJpICE9IEZGSV9GQVNUQ0FMTCkKKyNlbmRpZgorICAgIGNpZi0+Ynl0ZXMgPSAoY2lmLT5ieXRlcyArIDE1KSAmIH4weEY7CisjZW5kaWYKIAogICByZXR1cm4gRkZJX09LOwogfQpAQCAtMzcyLDggKzM3OSw4IEBACiAgICAgICBicmVhazsKICNlbGlmIGRlZmluZWQoWDg2X1dJTjMyKQogICAgIGNhc2UgRkZJX1NZU1Y6Ci0gICAgY2FzZSBGRklfU1REQ0FMTDoKICAgICBjYXNlIEZGSV9NU19DREVDTDoKKyAgICBjYXNlIEZGSV9TVERDQUxMOgogICAgICAgZmZpX2NhbGxfd2luMzIoZmZpX3ByZXBfYXJncywgJmVjaWYsIGNpZi0+YWJpLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAogCQkgICAgIGVjaWYucnZhbHVlLCBmbik7CiAgICAgICBicmVhazsKQEAgLTQzNCwxMiArNDQxLDE1IEBACiAjaWZkZWYgWDg2X1dJTjMyCiB2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMIChmZmlfcmF3X2Nsb3N1cmUgKikKICAgICAgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0oMSkpKTsKKyNlbmRpZgorI2lmbmRlZiBYODZfV0lONjQKIHZvaWQgRkZJX0hJRERFTiBmZmlfY2xvc3VyZV9TVERDQUxMIChmZmlfY2xvc3VyZSAqKQogICAgICBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgxKSkpOwogdm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX1RISVNDQUxMIChmZmlfY2xvc3VyZSAqKQogICAgICBfX2F0dHJpYnV0ZV9fICgocmVncGFybSgxKSkpOwotI2VuZGlmCi0jaWZkZWYgWDg2X1dJTjY0Cit2b2lkIEZGSV9ISURERU4gZmZpX2Nsb3N1cmVfRkFTVENBTEwgKGZmaV9jbG9zdXJlICopCisgICAgIF9fYXR0cmlidXRlX18gKChyZWdwYXJtKDEpKSk7CisjZWxzZQogdm9pZCBGRklfSElEREVOIGZmaV9jbG9zdXJlX3dpbjY0IChmZmlfY2xvc3VyZSAqKTsKICNlbmRpZgogCkBAIC01OTgsNyArNjA4LDcgQEAKICAgICoodW5zaWduZWQgaW50KikgICZfX3RyYW1wWzZdID0gX19kaXM7IC8qIGptcCBfX2Z1biAgKi8gXAogIH0KIAotI2RlZmluZSBGRklfSU5JVF9UUkFNUE9MSU5FX1RISVNDQUxMKFRSQU1QLEZVTixDVFgsU0laRSkgXAorI2RlZmluZSBGRklfSU5JVF9UUkFNUE9MSU5FX1JBV19USElTQ0FMTChUUkFNUCxGVU4sQ1RYLFNJWkUpIFwKIHsgdW5zaWduZWQgY2hhciAqX190cmFtcCA9ICh1bnNpZ25lZCBjaGFyKikoVFJBTVApOyBcCiAgICB1bnNpZ25lZCBpbnQgIF9fZnVuID0gKHVuc2lnbmVkIGludCkoRlVOKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2N0eCA9ICh1bnNpZ25lZCBpbnQpKENUWCk7IFwKQEAgLTYyNSwxOCArNjM1LDE1IEBACiAgICAqKHVuc2lnbmVkIHNob3J0KikgICZfX3RyYW1wWzUwXSA9IChfX3NpemUgKyA4KTsgLyogcmV0IChfX3NpemUgKyA4KSAgKi8gXAogIH0KIAotI2RlZmluZSBGRklfSU5JVF9UUkFNUE9MSU5FX1NURENBTEwoVFJBTVAsRlVOLENUWCxTSVpFKSAgXAorI2RlZmluZSBGRklfSU5JVF9UUkFNUE9MSU5FX1NURENBTEwoVFJBTVAsRlVOLENUWCkgIFwKIHsgdW5zaWduZWQgY2hhciAqX190cmFtcCA9ICh1bnNpZ25lZCBjaGFyKikoVFJBTVApOyBcCiAgICB1bnNpZ25lZCBpbnQgIF9fZnVuID0gKHVuc2lnbmVkIGludCkoRlVOKTsgXAogICAgdW5zaWduZWQgaW50ICBfX2N0eCA9ICh1bnNpZ25lZCBpbnQpKENUWCk7IFwKICAgIHVuc2lnbmVkIGludCAgX19kaXMgPSBfX2Z1biAtIChfX2N0eCArIDEwKTsgXAotICAgdW5zaWduZWQgc2hvcnQgX19zaXplID0gKHVuc2lnbmVkIHNob3J0KShTSVpFKTsgXAogICAgKih1bnNpZ25lZCBjaGFyKikgJl9fdHJhbXBbMF0gPSAweGI4OyBcCiAgICAqKHVuc2lnbmVkIGludCopICAmX190cmFtcFsxXSA9IF9fY3R4OyAvKiBtb3ZsIF9fY3R4LCAlZWF4ICovIFwKICAgICoodW5zaWduZWQgY2hhciAqKSAgJl9fdHJhbXBbNV0gPSAweGU4OyBcCiAgICAqKHVuc2lnbmVkIGludCopICAmX190cmFtcFs2XSA9IF9fZGlzOyAvKiBjYWxsIF9fZnVuICAqLyBcCi0gICAqKHVuc2lnbmVkIGNoYXIgKikgICZfX3RyYW1wWzEwXSA9IDB4YzI7IFwKLSAgICoodW5zaWduZWQgc2hvcnQqKSAgJl9fdHJhbXBbMTFdID0gX19zaXplOyAvKiByZXQgX19zaXplICAqLyBcCiAgfQogCiAvKiB0aGUgY2lmIG11c3QgYWxyZWFkeSBiZSBwcmVwJ2VkICovCkBAIC02NjYsMjAgKzY3MywyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZmaV9jbG9zdXJlX1NZU1YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopY29kZWxvYyk7CiAgICAgfQotI2lmZGVmIFg4Nl9XSU4zMgorICBlbHNlIGlmIChjaWYtPmFiaSA9PSBGRklfRkFTVENBTEwpCisgICAgeworICAgICAgRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMICgmY2xvc3VyZS0+dHJhbXBbMF0sCisJCQkJICAgJmZmaV9jbG9zdXJlX0ZBU1RDQUxMLAorCQkJCSAgICh2b2lkKiljb2RlbG9jKTsKKyAgICB9CiAgIGVsc2UgaWYgKGNpZi0+YWJpID09IEZGSV9USElTQ0FMTCkKICAgICB7Ci0gICAgICBGRklfSU5JVF9UUkFNUE9MSU5FX1RISVNDQUxMICgmY2xvc3VyZS0+dHJhbXBbMF0sCi0JCQkJICAgICZmZmlfY2xvc3VyZV9USElTQ0FMTCwKLQkJCQkgICAgKHZvaWQqKWNvZGVsb2MsCi0JCQkJICAgIGNpZi0+Ynl0ZXMpOworICAgICAgRkZJX0lOSVRfVFJBTVBPTElORV9TVERDQUxMICgmY2xvc3VyZS0+dHJhbXBbMF0sCisJCQkJICAgJmZmaV9jbG9zdXJlX1RISVNDQUxMLAorCQkJCSAgICh2b2lkKiljb2RlbG9jKTsKICAgICB9CiAgIGVsc2UgaWYgKGNpZi0+YWJpID09IEZGSV9TVERDQUxMKQogICAgIHsKICAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkVfU1REQ0FMTCAoJmNsb3N1cmUtPnRyYW1wWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmZpX2Nsb3N1cmVfU1REQ0FMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqKWNvZGVsb2MsIGNpZi0+Ynl0ZXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopY29kZWxvYyk7CiAgICAgfQorI2lmZGVmIFg4Nl9XSU4zMgogICBlbHNlIGlmIChjaWYtPmFiaSA9PSBGRklfTVNfQ0RFQ0wpCiAgICAgewogICAgICAgRkZJX0lOSVRfVFJBTVBPTElORSAoJmNsb3N1cmUtPnRyYW1wWzBdLApAQCAtNzEzLDEyICs3MjUsMTIgQEAKIHsKICAgaW50IGk7CiAKLSAgaWYgKGNpZi0+YWJpICE9IEZGSV9TWVNWKSB7CisgIGlmIChjaWYtPmFiaSAhPSBGRklfU1lTVgogI2lmZGVmIFg4Nl9XSU4zMgotICAgIGlmIChjaWYtPmFiaSAhPSBGRklfVEhJU0NBTEwpCisgICAgICAmJiBjaWYtPmFiaSAhPSBGRklfVEhJU0NBTEwKICNlbmRpZgorICAgICApCiAgICAgcmV0dXJuIEZGSV9CQURfQUJJOwotICB9CiAKICAgLyogd2UgY3VycmVudGx5IGRvbid0IHN1cHBvcnQgY2VydGFpbiBraW5kcyBvZiBhcmd1bWVudHMgZm9yIHJhdwogICAgICBjbG9zdXJlcy4gIFRoaXMgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IGEgc2VwYXJhdGUgYXNzZW1ibHkKQEAgLTc0MSw4ICs3NTMsNyBAQAogICAgIH0KICAgZWxzZSBpZiAoY2lmLT5hYmkgPT0gRkZJX1RISVNDQUxMKQogICAgIHsKLSAgICAgIEZGSV9JTklUX1RSQU1QT0xJTkVfVEhJU0NBTEwgKCZjbG9zdXJlLT50cmFtcFswXSwgJmZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCwKLQkJCQkgICAgY29kZWxvYywgY2lmLT5ieXRlcyk7CisgICAgICBGRklfSU5JVF9UUkFNUE9MSU5FX1JBV19USElTQ0FMTCAoJmNsb3N1cmUtPnRyYW1wWzBdLCAmZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMLCBjb2RlbG9jLCBjaWYtPmJ5dGVzKTsKICAgICB9CiAjZW5kaWYKICAgY2xvc3VyZS0+Y2lmICA9IGNpZjsKQEAgLTc3NSwyMiArNzg2LDM3IEBACiAgIC8qIElmIHRoZSByZXR1cm4gdmFsdWUgaXMgYSBzdHJ1Y3QgYW5kIHdlIGRvbid0IGhhdmUgYSByZXR1cm4gKi8KICAgLyogdmFsdWUgYWRkcmVzcyB0aGVuIHdlIG5lZWQgdG8gbWFrZSBvbmUgICAgICAgICAgICAgICAgICAgICAqLwogCisjaWZkZWYgWDg2X1dJTjY0CisgIGlmIChydmFsdWUgPT0gTlVMTAorICAgICAgJiYgY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QKKyAgICAgICYmIGNpZi0+cnR5cGUtPnNpemUgIT0gMSAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDIKKyAgICAgICYmIGNpZi0+cnR5cGUtPnNpemUgIT0gNCAmJiBjaWYtPnJ0eXBlLT5zaXplICE9IDgpCisgICAgeworICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EoKGNpZi0+cnR5cGUtPnNpemUgKyAweEYpICYgfjB4Rik7CisgICAgfQorI2Vsc2UKICAgaWYgKHJ2YWx1ZSA9PSBOVUxMCiAgICAgICAmJiAoY2lmLT5mbGFncyA9PSBGRklfVFlQRV9TVFJVQ1QKICAgICAgICAgICB8fCBjaWYtPmZsYWdzID09IEZGSV9UWVBFX01TX1NUUlVDVCkpCiAgICAgewogICAgICAgZWNpZi5ydmFsdWUgPSBhbGxvY2EoY2lmLT5ydHlwZS0+c2l6ZSk7CiAgICAgfQorI2VuZGlmCiAgIGVsc2UKICAgICBlY2lmLnJ2YWx1ZSA9IHJ2YWx1ZTsKICAgICAKICAgCiAgIHN3aXRjaCAoY2lmLT5hYmkpIAogICAgIHsKLSNpZmRlZiBYODZfV0lOMzIKKyNpZmRlZiBYODZfV0lONjQKKyAgICBjYXNlIEZGSV9XSU42NDoKKyAgICAgIGZmaV9jYWxsX3dpbjY0KGZmaV9wcmVwX2FyZ3NfcmF3LCAmZWNpZiwgY2lmLT5ieXRlcywKKyAgICAgICAgICAgICAgICAgICAgIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLCBmbik7CisgICAgICBicmVhazsKKyNlbGlmIGRlZmluZWQoWDg2X1dJTjMyKQogICAgIGNhc2UgRkZJX1NZU1Y6Ci0gICAgY2FzZSBGRklfU1REQ0FMTDoKICAgICBjYXNlIEZGSV9NU19DREVDTDoKKyAgICBjYXNlIEZGSV9TVERDQUxMOgogICAgICAgZmZpX2NhbGxfd2luMzIoZmZpX3ByZXBfYXJnc19yYXcsICZlY2lmLCBjaWYtPmFiaSwgY2lmLT5ieXRlcywgY2lmLT5mbGFncywKIAkJICAgICBlY2lmLnJ2YWx1ZSwgZm4pOwogICAgICAgYnJlYWs7CkBAIC04MTYsMTcgKzg0MiwxNyBAQAogCSAgICArK3Bhc3NlZF9yZWdzOwogCSAgfQogCWlmIChwYXNzZWRfcmVncyA8IDIgJiYgYWJpID09IEZGSV9GQVNUQ0FMTCkKLQkgIGNpZi0+YWJpID0gYWJpID0gRkZJX1RISVNDQUxMOworCSAgYWJpID0gRkZJX1RISVNDQUxMOwogCWlmIChwYXNzZWRfcmVncyA8IDEgJiYgYWJpID09IEZGSV9USElTQ0FMTCkKLQkgIGNpZi0+YWJpID0gYWJpID0gRkZJX1NURENBTEw7CisJICBhYmkgPSBGRklfU1REQ0FMTDsKICAgICAgICAgZmZpX2NhbGxfd2luMzIoZmZpX3ByZXBfYXJnc19yYXcsICZlY2lmLCBhYmksIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaWYucnZhbHVlLCBmbik7CiAgICAgICB9CiAgICAgICBicmVhazsKICNlbHNlCiAgICAgY2FzZSBGRklfU1lTVjoKLSAgICAgIGZmaV9jYWxsX1NZU1YoZmZpX3ByZXBfYXJnc19yYXcsICZlY2lmLCBjaWYtPmJ5dGVzLCBjaWYtPmZsYWdzLAotICAgICAgICAgICAgICAgICAgICBlY2lmLnJ2YWx1ZSwgZm4pOworICAgICAgZmZpX2NhbGxfU1lTVihmZmlfcHJlcF9hcmdzX3JhdywgJmVjaWYsIGNpZi0+Ynl0ZXMsIGNpZi0+ZmxhZ3MsIGVjaWYucnZhbHVlLAorICAgICAgICAgICAgICAgICAgICBmbik7CiAgICAgICBicmVhazsKICNlbmRpZgogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpNjQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmk2NC5jCmluZGV4IDIwMTRhZjIuLjVhNWUwNDMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmk2NC5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZmk2NC5jCkBAIC0zLDggKzMsOCBAQAogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAxMSAgQW50aG9ueSBHcmVlbgogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwOCwgMjAxMCAgUmVkIEhhdCwgSW5jLgogICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMiwgMjAwNyAgQm8gVGhvcnNlbiA8Ym9Ac3VzZS5kZT4KLSAgICAgICAgICAgICAKLSAgIHg4Ni02NCBGb3JlaWduIEZ1bmN0aW9uIEludGVyZmFjZSAKKworICAgeDg2LTY0IEZvcmVpZ24gRnVuY3Rpb24gSW50ZXJmYWNlCiAKICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZwogICAgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCkBAIC0zOSw2ICszOSw3IEBACiAjZGVmaW5lIE1BWF9TU0VfUkVHUyA4CiAKICNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCisjaW5jbHVkZSAieG1taW50cmluLmgiCiAjZGVmaW5lIFVJTlQxMjggX19tMTI4CiAjZWxzZQogI2lmIGRlZmluZWQoX19TVU5QUk9fQykKQEAgLTYwLDcgKzYxLDcgQEAKIHsKICAgLyogUmVnaXN0ZXJzIGZvciBhcmd1bWVudCBwYXNzaW5nLiAgKi8KICAgVUlOVDY0IGdwcltNQVhfR1BSX1JFR1NdOwotICB1bmlvbiBiaWdfaW50X3VuaW9uIHNzZVtNQVhfU1NFX1JFR1NdOyAKKyAgdW5pb24gYmlnX2ludF91bmlvbiBzc2VbTUFYX1NTRV9SRUdTXTsKIH07CiAKIGV4dGVybiB2b2lkIGZmaV9jYWxsX3VuaXg2NCAodm9pZCAqYXJncywgdW5zaWduZWQgbG9uZyBieXRlcywgdW5zaWduZWQgZmxhZ3MsCkBAIC0xNTEsNyArMTUyLDcgQEAKIAogICAgU2VlIHRoZSB4ODYtNjQgUFMgQUJJIGZvciBkZXRhaWxzLgogKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyBzaXplX3QKIGNsYXNzaWZ5X2FyZ3VtZW50IChmZmlfdHlwZSAqdHlwZSwgZW51bSB4ODZfNjRfcmVnX2NsYXNzIGNsYXNzZXNbXSwKIAkJICAgc2l6ZV90IGJ5dGVfb2Zmc2V0KQogewpAQCAtMTY3LDcgKzE2OCw3IEBACiAgICAgY2FzZSBGRklfVFlQRV9TSU5UNjQ6CiAgICAgY2FzZSBGRklfVFlQRV9QT0lOVEVSOgogICAgICAgewotCWludCBzaXplID0gYnl0ZV9vZmZzZXQgKyB0eXBlLT5zaXplOworCXNpemVfdCBzaXplID0gYnl0ZV9vZmZzZXQgKyB0eXBlLT5zaXplOwogCiAJaWYgKHNpemUgPD0gNCkKIAkgIHsKQEAgLTIwMiwxNSArMjAzLDE3IEBACiAgICAgY2FzZSBGRklfVFlQRV9ET1VCTEU6CiAgICAgICBjbGFzc2VzWzBdID0gWDg2XzY0X1NTRURGX0NMQVNTOwogICAgICAgcmV0dXJuIDE7CisjaWYgRkZJX1RZUEVfTE9OR0RPVUJMRSAhPSBGRklfVFlQRV9ET1VCTEUKICAgICBjYXNlIEZGSV9UWVBFX0xPTkdET1VCTEU6CiAgICAgICBjbGFzc2VzWzBdID0gWDg2XzY0X1g4N19DTEFTUzsKICAgICAgIGNsYXNzZXNbMV0gPSBYODZfNjRfWDg3VVBfQ0xBU1M7CiAgICAgICByZXR1cm4gMjsKKyNlbmRpZgogICAgIGNhc2UgRkZJX1RZUEVfU1RSVUNUOgogICAgICAgewotCWNvbnN0IGludCBVTklUU19QRVJfV09SRCA9IDg7Ci0JaW50IHdvcmRzID0gKHR5cGUtPnNpemUgKyBVTklUU19QRVJfV09SRCAtIDEpIC8gVU5JVFNfUEVSX1dPUkQ7Ci0JZmZpX3R5cGUgKipwdHI7IAorCWNvbnN0IHNpemVfdCBVTklUU19QRVJfV09SRCA9IDg7CisJc2l6ZV90IHdvcmRzID0gKHR5cGUtPnNpemUgKyBVTklUU19QRVJfV09SRCAtIDEpIC8gVU5JVFNfUEVSX1dPUkQ7CisJZmZpX3R5cGUgKipwdHI7CiAJaW50IGk7CiAJZW51bSB4ODZfNjRfcmVnX2NsYXNzIHN1YmNsYXNzZXNbTUFYX0NMQVNTRVNdOwogCkBAIC0yMzIsNyArMjM1LDcgQEAKIAkvKiBNZXJnZSB0aGUgZmllbGRzIG9mIHN0cnVjdHVyZS4gICovCiAJZm9yIChwdHIgPSB0eXBlLT5lbGVtZW50czsgKnB0ciAhPSBOVUxMOyBwdHIrKykKIAkgIHsKLQkgICAgaW50IG51bTsKKwkgICAgc2l6ZV90IG51bTsKIAogCSAgICBieXRlX29mZnNldCA9IEFMSUdOIChieXRlX29mZnNldCwgKCpwdHIpLT5hbGlnbm1lbnQpOwogCkBAIC0yNDEsNyArMjQ0LDcgQEAKIAkgICAgICByZXR1cm4gMDsKIAkgICAgZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQogCSAgICAgIHsKLQkJaW50IHBvcyA9IGJ5dGVfb2Zmc2V0IC8gODsKKwkJc2l6ZV90IHBvcyA9IGJ5dGVfb2Zmc2V0IC8gODsKIAkJY2xhc3Nlc1tpICsgcG9zXSA9CiAJCSAgbWVyZ2VfY2xhc3NlcyAoc3ViY2xhc3Nlc1tpXSwgY2xhc3Nlc1tpICsgcG9zXSk7CiAJICAgICAgfQpAQCAtMzA1LDExICszMDgsMTIgQEAKICAgIGNsYXNzLiAgUmV0dXJuIHplcm8gaWZmIHBhcmFtZXRlciBzaG91bGQgYmUgcGFzc2VkIGluIG1lbW9yeSwgb3RoZXJ3aXNlCiAgICB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVycy4gICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyBzaXplX3QKIGV4YW1pbmVfYXJndW1lbnQgKGZmaV90eXBlICp0eXBlLCBlbnVtIHg4Nl82NF9yZWdfY2xhc3MgY2xhc3Nlc1tNQVhfQ0xBU1NFU10sCiAJCSAgX0Jvb2wgaW5fcmV0dXJuLCBpbnQgKnBuZ3ByLCBpbnQgKnBuc3NlKQogewotICBpbnQgaSwgbiwgbmdwciwgbnNzZTsKKyAgc2l6ZV90IG47CisgIGludCBpLCBuZ3ByLCBuc3NlOwogCiAgIG4gPSBjbGFzc2lmeV9hcmd1bWVudCAodHlwZSwgY2xhc3NlcywgMCk7CiAgIGlmIChuID09IDApCkBAIC0zNTAsOSArMzU0LDkgQEAKIGZmaV9zdGF0dXMKIGZmaV9wcmVwX2NpZl9tYWNoZGVwIChmZmlfY2lmICpjaWYpCiB7Ci0gIGludCBncHJjb3VudCwgc3NlY291bnQsIGksIGF2biwgbiwgbmdwciwgbnNzZSwgZmxhZ3M7CisgIGludCBncHJjb3VudCwgc3NlY291bnQsIGksIGF2biwgbmdwciwgbnNzZSwgZmxhZ3M7CiAgIGVudW0geDg2XzY0X3JlZ19jbGFzcyBjbGFzc2VzW01BWF9DTEFTU0VTXTsKLSAgc2l6ZV90IGJ5dGVzOworICBzaXplX3QgYnl0ZXMsIG47CiAKICAgZ3ByY291bnQgPSBzc2Vjb3VudCA9IDA7CiAKQEAgLTQxMCw3ICs0MTQsNyBAQAogICBpZiAoc3NlY291bnQpCiAgICAgZmxhZ3MgfD0gMSA8PCAxMTsKICAgY2lmLT5mbGFncyA9IGZsYWdzOwotICBjaWYtPmJ5dGVzID0gQUxJR04gKGJ5dGVzLCA4KTsKKyAgY2lmLT5ieXRlcyA9ICh1bnNpZ25lZClBTElHTiAoYnl0ZXMsIDgpOwogCiAgIHJldHVybiBGRklfT0s7CiB9CkBAIC00NTMsOCArNDU3LDcgQEAKIAogICBmb3IgKGkgPSAwOyBpIDwgYXZuOyArK2kpCiAgICAgewotICAgICAgc2l6ZV90IHNpemUgPSBhcmdfdHlwZXNbaV0tPnNpemU7Ci0gICAgICBpbnQgbjsKKyAgICAgIHNpemVfdCBuLCBzaXplID0gYXJnX3R5cGVzW2ldLT5zaXplOwogCiAgICAgICBuID0gZXhhbWluZV9hcmd1bWVudCAoYXJnX3R5cGVzW2ldLCBjbGFzc2VzLCAwLCAmbmdwciwgJm5zc2UpOwogICAgICAgaWYgKG4gPT0gMApAQCAtNTgzLDcgKzU4Niw3IEBACiAgIGlmIChyZXQgIT0gRkZJX1RZUEVfVk9JRCkKICAgICB7CiAgICAgICBlbnVtIHg4Nl82NF9yZWdfY2xhc3MgY2xhc3Nlc1tNQVhfQ0xBU1NFU107Ci0gICAgICBpbnQgbiA9IGV4YW1pbmVfYXJndW1lbnQgKGNpZi0+cnR5cGUsIGNsYXNzZXMsIDEsICZuZ3ByLCAmbnNzZSk7CisgICAgICBzaXplX3QgbiA9IGV4YW1pbmVfYXJndW1lbnQgKGNpZi0+cnR5cGUsIGNsYXNzZXMsIDEsICZuZ3ByLCAmbnNzZSk7CiAgICAgICBpZiAobiA9PSAwKQogCXsKIAkgIC8qIFRoZSByZXR1cm4gdmFsdWUgZ29lcyBpbiBtZW1vcnkuICBBcnJhbmdlIGZvciB0aGUgY2xvc3VyZQpAQCAtNjA2LDExICs2MDksMTEgQEAKIAogICBhdm4gPSBjaWYtPm5hcmdzOwogICBhcmdfdHlwZXMgPSBjaWYtPmFyZ190eXBlczsKLSAgCisKICAgZm9yIChpID0gMDsgaSA8IGF2bjsgKytpKQogICAgIHsKICAgICAgIGVudW0geDg2XzY0X3JlZ19jbGFzcyBjbGFzc2VzW01BWF9DTEFTU0VTXTsKLSAgICAgIGludCBuOworICAgICAgc2l6ZV90IG47CiAKICAgICAgIG4gPSBleGFtaW5lX2FyZ3VtZW50IChhcmdfdHlwZXNbaV0sIGNsYXNzZXMsIDAsICZuZ3ByLCAmbnNzZSk7CiAgICAgICBpZiAobiA9PSAwCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpdGFyZ2V0LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZmZpdGFyZ2V0LmgKaW5kZXggNDZmMjk0Yy4uYjJhZmU5MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZmaXRhcmdldC5oCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mZml0YXJnZXQuaApAQCAtOTgsNiArOTgsOSBAQAogICAvKiAtLS0tIEludGVsIHg4NiBhbmQgQU1EIHg4Ni02NCAtICovCiAgIEZGSV9TWVNWLAogICBGRklfVU5JWDY0LCAgIC8qIFVuaXggdmFyaWFudHMgYWxsIHVzZSB0aGUgc2FtZSBBQkkgZm9yIHg4Ni02NCAgKi8KKyAgRkZJX1RISVNDQUxMLAorICBGRklfRkFTVENBTEwsCisgIEZGSV9TVERDQUxMLAogICBGRklfTEFTVF9BQkksCiAjaWYgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpCiAgIEZGSV9ERUZBVUxUX0FCSSA9IEZGSV9TWVNWCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZnJlZWJzZC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L2ZyZWVic2QuUwppbmRleCBhZmRlNTEzLi45N2UwYjRlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvZnJlZWJzZC5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni9mcmVlYnNkLlMKQEAgLTQ5LDYgKzQ5LDkgQEAKIAltb3ZsICAxNiglZWJwKSwlZWN4CiAJc3VibCAgJWVjeCwlZXNwCiAKKwkvKiBBbGlnbiB0aGUgc3RhY2sgcG9pbnRlciB0byAxNi1ieXRlcyAqLworCWFuZGwgICQweGZmZmZmZmYwLCAlZXNwCisKIAltb3ZsICAlZXNwLCVlYXgKIAogCS8qIFBsYWNlIGFsbCBvZiB0aGUgZmZpX3ByZXBfYXJncyBpbiBwb3NpdGlvbiAgKi8KQEAgLTQ1NiwzICs0NTksNSBAQAogI2VuZGlmCiAKICNlbmRpZiAvKiBpZm5kZWYgX194ODZfNjRfXyAqLworCisJLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLCVwcm9nYml0cwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS9zcmMveDg2L3VuaXg2NC5TCmluZGV4IGRjZDZiYzcuLjQ1YTBlZDcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni91bml4NjQuUworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvdW5peDY0LlMKQEAgLTM2Niw3ICszNjYsNyBAQAogCS5ieXRlCTB4NAkJCS8qIERXX0NGQV9hZHZhbmNlX2xvYzQgKi8KIAkubG9uZwkuTFVXMS0uTFVXMAogCi0JLyogTmV3IHN0YWNrIGZyYW1lIGJhc2VkIG9mZiByYnAuICBUaGlzIGlzIGEgaXR0eSBiaXQgb2YgdW53aW5kCisJLyogTmV3IHN0YWNrIGZyYW1lIGJhc2VkIG9mZiByYnAuICBUaGlzIGlzIGFuIGl0dHkgYml0IG9mIHVud2luZAogCSAgIHRyaWNrZXJ5IGluIHRoYXQgdGhlIENGQSAqaGFzKiBjaGFuZ2VkLiAgVGhlcmUgaXMgbm8gZWFzeSB3YXkKIAkgICB0byBkZXNjcmliZSBpdCBjb3JyZWN0bHkgb24gZW50cnkgdG8gdGhlIGZ1bmN0aW9uLiAgRm9ydHVuYXRlbHksCiAJICAgaXQgZG9lc24ndCBtYXR0ZXIgdG9vIG11Y2ggc2luY2UgYXQgYWxsIHBvaW50cyB3ZSBjYW4gY29ycmVjdGx5CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3NyYy94ODYvd2luMzIuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW4zMi5TCmluZGV4IDI0YjdiYmQuLmRhZjBlNzkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW4zMi5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3JjL3g4Ni93aW4zMi5TCkBAIC0zMyw4ICszMywxMyBAQAogI2luY2x1ZGUgPGZmaWNvbmZpZy5oPgogI2luY2x1ZGUgPGZmaS5oPgogCisjZGVmaW5lIENJRl9BQklfT0ZGU0VUIDAKKyNkZWZpbmUgQ0lGX0JZVEVTX09GRlNFVCAxNgorCiAjaWZkZWYgX01TQ19WRVIKIAorI2RlZmluZSBDTE9TVVJFX0NJRl9PRkZTRVQgKChGRklfVFJBTVBPTElORV9TSVpFICsgMykgQU5EIE5PVCAzKQorCiAuMzg2CiAuTU9ERUwgRkxBVCwgQwogCkBAIC0xODgsMTQgKzE5MywyMyBAQAogICAgICAgICByZXQKIGZmaV9jYWxsX3dpbjMyIEVORFAKIAotZmZpX2Nsb3N1cmVfVEhJU0NBTEwgUFJPQyBORUFSIEZPUkNFRlJBTUUKLQlzdWIJZXNwLCA0MAotCWxlYQllZHgsIFtlYnAgLTI0XQotCW1vdglbZWJwIC0gMTJdLCBlZHgJLyogcmVzcCAqLwotCWxlYQllZHgsIFtlYnAgKyAxMl0gIC8qIGFjY291bnQgZm9yIHN0dWIgcmV0dXJuIGFkZHJlc3Mgb24gc3RhY2sgKi8KLQlqbXAJc3R1YgorZmZpX2Nsb3N1cmVfVEhJU0NBTEwgUFJPQyBORUFSCisJOzsgSW5zZXJ0IHRoZSByZWdpc3RlciBhcmd1bWVudCBvbiB0aGUgc3RhY2sgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisJeGNoZwlEV09SRCBQVFIgW2VzcCs0XSwgZWN4CisJeGNoZwlEV09SRCBQVFIgW2VzcF0sIGVjeAorCXB1c2gJZWN4CisJam1wCWZmaV9jbG9zdXJlX1NURENBTEwKIGZmaV9jbG9zdXJlX1RISVNDQUxMIEVORFAKIAorZmZpX2Nsb3N1cmVfRkFTVENBTEwgUFJPQyBORUFSCisJOzsgSW5zZXJ0IHRoZSByZWdpc3RlciBhcmd1bWVudCBvbiB0aGUgc3RhY2sgYXMgdGhlIGZpcnN0IGFyZ3VtZW50CisJeGNoZwlEV09SRCBQVFIgW2VzcCs0XSwgZWR4CisJeGNoZwlEV09SRCBQVFIgW2VzcF0sIGVjeAorCXB1c2gJZWR4CisJcHVzaAllY3gKKwlqbXAJZmZpX2Nsb3N1cmVfU1REQ0FMTAorZmZpX2Nsb3N1cmVfRkFTVENBTEwgRU5EUAorCiBmZmlfY2xvc3VyZV9TWVNWIFBST0MgTkVBUiBGT1JDRUZSQU1FCiAgICAgOzsgdGhlIGZmaV9jbG9zdXJlIGN0eCBpcyBwYXNzZWQgaW4gZWF4IGJ5IHRoZSB0cmFtcG9saW5lLgogCkBAIC00NjQsOCArNDc4LDIzIEBACiAgICAgICAgIGptcCAgIGNkX2VwaWxvZ3VlCiAKIGNkX2VwaWxvZ3VlOgotICAgICAgICA7OyBFcGlsb2d1ZSBjb2RlIGlzIGF1dG9nZW5lcmF0ZWQuCi0gICAgICAgIHJldAorICAgICAgICBtb3YgICBlc3AsIGVicAorICAgICAgICBwb3AgICBlYnAKKyAgICAgICAgcG9wICAgZWN4CisgICAgICAgIHBvcCAgIGVkeAorICAgICAgICBtb3YgICBlY3gsIERXT1JEIFBUUiBbZWN4ICsgKENMT1NVUkVfQ0lGX09GRlNFVC0xMCldCisgICAgICAgIGFkZCAgIGVzcCwgRFdPUkQgUFRSIFtlY3ggKyBDSUZfQllURVNfT0ZGU0VUXQorICAgICAgICBtb3YgICBlY3gsIERXT1JEIFBUUiBbZWN4ICsgQ0lGX0FCSV9PRkZTRVRdCisgICAgICAgIGNtcCAgIGVjeCwgMworICAgICAgICBqZSAgICBjZF90aGlzY2FsbAorICAgICAgICBjbXAgICBlY3gsIDQKKyAgICAgICAgam5lICAgY2Rfbm90X2Zhc3RjYWxsCisKKyAgICAgICAgYWRkICAgZXNwLCA0CitjZF90aGlzY2FsbDoKKyAgICAgICAgYWRkICAgZXNwLCA0CitjZF9ub3RfZmFzdGNhbGw6CisgICAgICAgIGptcCAgIGVkeAogZmZpX2Nsb3N1cmVfU1REQ0FMTCBFTkRQCiAKIF9URVhUIEVORFMKQEAgLTQ3MywxNSArNTAyLDIzIEBACiAKICNlbHNlCiAKKyNkZWZpbmUgQ0xPU1VSRV9DSUZfT0ZGU0VUICgoRkZJX1RSQU1QT0xJTkVfU0laRSArIDMpICYgfjMpCisKKyNpZiBkZWZpbmVkKFNZTUJPTF9VTkRFUlNDT1JFKQorI2RlZmluZSBVU0NPUkVfU1lNQk9MKHgpIF8jI3gKKyNlbHNlCisjZGVmaW5lIFVTQ09SRV9TWU1CT0woeCkgeAorI2VuZGlmCiAJLnRleHQKICAKICAgICAgICAgIyBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KICAgICAgICAgLmJhbGlnbiAxNgotCS5nbG9ibAlfZmZpX2NhbGxfd2luMzIKLSNpZm5kZWYgX19PUzJfXworRkZJX0hJRERFTihmZmlfY2FsbF93aW4zMikKKwkuZ2xvYmwJVVNDT1JFX1NZTUJPTChmZmlfY2FsbF93aW4zMikKKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoX19PUzJfXykKIAkuZGVmCV9mZmlfY2FsbF93aW4zMjsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCiAjZW5kaWYKLV9mZmlfY2FsbF93aW4zMjoKK1VTQ09SRV9TWU1CT0woZmZpX2NhbGxfd2luMzIpOgogLkxGQjE6CiAgICAgICAgIHB1c2hsICVlYnAKIC5MQ0ZJMDoKQEAgLTU0MiwzMSArNTc5LDMyIEBACiAJY2FsbAkxZgogCSMgRG8gbm90IGluc2VydCBhbnl0aGluZyBoZXJlIGJldHdlZW4gdGhlIGNhbGwgYW5kIHRoZSBqdW1wIHRhYmxlLgogLkxzdG9yZV90YWJsZToKLQkubG9uZwkuTG5vcmV0dmFsCQkvKiBGRklfVFlQRV9WT0lEICovCi0JLmxvbmcJLkxyZXRpbnQJCS8qIEZGSV9UWVBFX0lOVCAqLwotCS5sb25nCS5McmV0ZmxvYXQJCS8qIEZGSV9UWVBFX0ZMT0FUICovCi0JLmxvbmcJLkxyZXRkb3VibGUJCS8qIEZGSV9UWVBFX0RPVUJMRSAqLwotCS5sb25nCS5McmV0bG9uZ2RvdWJsZQkJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLwotCS5sb25nCS5McmV0dWludDgJCS8qIEZGSV9UWVBFX1VJTlQ4ICovCi0JLmxvbmcJLkxyZXRzaW50OAkJLyogRkZJX1RZUEVfU0lOVDggKi8KLQkubG9uZwkuTHJldHVpbnQxNgkJLyogRkZJX1RZUEVfVUlOVDE2ICovCi0JLmxvbmcJLkxyZXRzaW50MTYJCS8qIEZGSV9UWVBFX1NJTlQxNiAqLwotCS5sb25nCS5McmV0aW50CQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KLQkubG9uZwkuTHJldGludAkJLyogRkZJX1RZUEVfU0lOVDMyICovCi0JLmxvbmcJLkxyZXRpbnQ2NAkJLyogRkZJX1RZUEVfVUlOVDY0ICovCi0JLmxvbmcJLkxyZXRpbnQ2NAkJLyogRkZJX1RZUEVfU0lOVDY0ICovCi0JLmxvbmcJLkxyZXRzdHJ1Y3QJCS8qIEZGSV9UWVBFX1NUUlVDVCAqLwotCS5sb25nCS5McmV0aW50CQkvKiBGRklfVFlQRV9QT0lOVEVSICovCi0JLmxvbmcJLkxyZXRzdHJ1Y3QxYgkJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCi0JLmxvbmcJLkxyZXRzdHJ1Y3QyYgkJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCi0JLmxvbmcJLkxyZXRzdHJ1Y3Q0YgkJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCi0JLmxvbmcJLkxyZXRzdHJ1Y3QJCS8qIEZGSV9UWVBFX01TX1NUUlVDVCAqLworCS5sb25nCS5Mbm9yZXR2YWwtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9WT0lEICovCisJLmxvbmcJLkxyZXRpbnQtLkxzdG9yZV90YWJsZQkJLyogRkZJX1RZUEVfSU5UICovCisJLmxvbmcJLkxyZXRmbG9hdC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0ZMT0FUICovCisJLmxvbmcJLkxyZXRkb3VibGUtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KKwkubG9uZwkuTHJldGxvbmdkb3VibGUtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9MT05HRE9VQkxFICovCisJLmxvbmcJLkxyZXR1aW50OC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQ4ICovCisJLmxvbmcJLkxyZXRzaW50OC0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQ4ICovCisJLmxvbmcJLkxyZXR1aW50MTYtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UMTYgKi8KKwkubG9uZwkuTHJldHNpbnQxNi0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQxNiAqLworCS5sb25nCS5McmV0aW50LS5Mc3RvcmVfdGFibGUJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLworCS5sb25nCS5McmV0aW50LS5Mc3RvcmVfdGFibGUJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLworCS5sb25nCS5McmV0aW50NjQtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KKwkubG9uZwkuTHJldGludDY0LS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDY0ICovCisJLmxvbmcJLkxyZXRzdHJ1Y3QtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KKwkubG9uZwkuTHJldGludC0uTHN0b3JlX3RhYmxlCQkvKiBGRklfVFlQRV9QT0lOVEVSICovCisJLmxvbmcJLkxyZXRzdHJ1Y3QxYi0uTHN0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLworCS5sb25nCS5McmV0c3RydWN0MmItLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KKwkubG9uZwkuTHJldHN0cnVjdDRiLS5Mc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCisJLmxvbmcJLkxyZXRzdHJ1Y3QtLkxzdG9yZV90YWJsZQkvKiBGRklfVFlQRV9NU19TVFJVQ1QgKi8KIDE6Ci0JYWRkCSVlY3gsICVlY3gKLQlhZGQJJWVjeCwgJWVjeAorCXNobAkkMiwgJWVjeAorCWFkZAkoJWVzcCksJWVjeAorCW1vdgkoJWVjeCksJWVjeAogCWFkZAkoJWVzcCksJWVjeAogCWFkZAkkNCwgJWVzcAotCWptcAkqKCVlY3gpCisJam1wCSolZWN4CiAKIAkvKiBTaWduL3plcm8gZXh0ZW5kIGFzIGFwcHJvcHJpYXRlLiAgKi8KIC5McmV0c2ludDg6CkBAIC02NDQsMjcgKzY4Miw0MyBAQAogICAgICAgICByZXQKIC5mZmlfY2FsbF93aW4zMl9lbmQ6CiAgICAgICAgIC5iYWxpZ24gMTYKLQkuZ2xvYmwJX2ZmaV9jbG9zdXJlX1RISVNDQUxMCi0jaWZuZGVmIF9fT1MyX18KK0ZGSV9ISURERU4oZmZpX2Nsb3N1cmVfVEhJU0NBTEwpCisJLmdsb2JsCVVTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfVEhJU0NBTEwpCisjaWYgZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKF9fT1MyX18pCiAJLmRlZglfZmZpX2Nsb3N1cmVfVEhJU0NBTEw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgogI2VuZGlmCi1fZmZpX2Nsb3N1cmVfVEhJU0NBTEw6Ci0JcHVzaGwJJWVicAotCW1vdmwJJWVzcCwgJWVicAotCXN1YmwJJDQwLCAlZXNwCi0JbGVhbAktMjQoJWVicCksICVlZHgKLQltb3ZsCSVlZHgsIC0xMiglZWJwKQkvKiByZXNwICovCi0JbGVhbAkxMiglZWJwKSwgJWVkeCAgLyogYWNjb3VudCBmb3Igc3R1YiByZXR1cm4gYWRkcmVzcyBvbiBzdGFjayAqLwotCWptcAkuc3R1YgorVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9USElTQ0FMTCk6CisJLyogSW5zZXJ0IHRoZSByZWdpc3RlciBhcmd1bWVudCBvbiB0aGUgc3RhY2sgYXMgdGhlIGZpcnN0IGFyZ3VtZW50ICovCisJeGNoZwklZWN4LCA0KCVlc3ApCisJeGNoZwklZWN4LCAoJWVzcCkKKwlwdXNoCSVlY3gKKwlqbXAJLmZmaV9jbG9zdXJlX1NURENBTExfaW50ZXJuYWwKKworICAgICAgICAuYmFsaWduIDE2CitGRklfSElEREVOKGZmaV9jbG9zdXJlX0ZBU1RDQUxMKQorCS5nbG9ibAlVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX0ZBU1RDQUxMKQorI2lmIGRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChfX09TMl9fKQorCS5kZWYJX2ZmaV9jbG9zdXJlX0ZBU1RDQUxMOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKKyNlbmRpZgorVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9GQVNUQ0FMTCk6CisJLyogSW5zZXJ0IHRoZSByZWdpc3RlciBhcmd1bWVudHMgb24gdGhlIHN0YWNrIGFzIHRoZSBmaXJzdCB0d28gYXJndW1lbnRzICovCisJeGNoZwklZWR4LCA0KCVlc3ApCisJeGNoZwklZWN4LCAoJWVzcCkKKwlwdXNoCSVlZHgKKwlwdXNoCSVlY3gKKwlqbXAJLmZmaV9jbG9zdXJlX1NURENBTExfaW50ZXJuYWwKIC5MRkUxOgogCiAgICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCiAgICAgICAgIC5iYWxpZ24gMTYKLQkuZ2xvYmwJX2ZmaV9jbG9zdXJlX1NZU1YKLSNpZm5kZWYgX19PUzJfXworRkZJX0hJRERFTihmZmlfY2xvc3VyZV9TWVNWKQorI2lmIGRlZmluZWQoWDg2X1dJTjMyKQorCS5nbG9ibAlVU0NPUkVfU1lNQk9MKGZmaV9jbG9zdXJlX1NZU1YpCisjaWYgZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKF9fT1MyX18pCiAJLmRlZglfZmZpX2Nsb3N1cmVfU1lTVjsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCiAjZW5kaWYKLV9mZmlfY2xvc3VyZV9TWVNWOgorVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9TWVNWKToKKyNlbmRpZgogLkxGQjM6CiAJcHVzaGwJJWVicAogLkxDRkk0OgpAQCAtNjc0LDQzICs3MjgsNTQgQEAKIAlsZWFsCS0yNCglZWJwKSwgJWVkeAogCW1vdmwJJWVkeCwgLTEyKCVlYnApCS8qIHJlc3AgKi8KIAlsZWFsCTgoJWVicCksICVlZHgKLS5zdHViOgogCW1vdmwJJWVkeCwgNCglZXNwKQkvKiBhcmdzID0gX19idWlsdGluX2R3YXJmX2NmYSAoKSAqLwogCWxlYWwJLTEyKCVlYnApLCAlZWR4CiAJbW92bAklZWR4LCAoJWVzcCkJLyogJnJlc3AgKi8KLQljYWxsCV9mZmlfY2xvc3VyZV9TWVNWX2lubmVyCisjaWYgZGVmaW5lZChIQVZFX0hJRERFTl9WSVNJQklMSVRZX0FUVFJJQlVURSkgfHwgIWRlZmluZWQoX19QSUNfXykKKwljYWxsCVVTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfU1lTVl9pbm5lcikKKyNlbGlmIGRlZmluZWQoWDg2X0RBUldJTikKKwljYWxsbAlMX2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIkc3R1YgorI2Vsc2UKKwltb3ZsCSVlYngsIDgoJWVzcCkKKwljYWxsCTFmCisxOglwb3BsCSVlYngKKwlhZGRsCSRfR0xPQkFMX09GRlNFVF9UQUJMRV8rWy4tMWJdLCAlZWJ4CisJY2FsbAlmZmlfY2xvc3VyZV9TWVNWX2lubmVyQFBMVAorCW1vdmwJOCglZXNwKSwgJWVieAorI2VuZGlmCiAJbW92bAktMTIoJWVicCksICVlY3gKIAogMDoKIAljYWxsCTFmCiAJIyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgY2FsbCBhbmQgdGhlIGp1bXAgdGFibGUuCiAuTGNsc19zdG9yZV90YWJsZToKLQkubG9uZwkuTGNsc19ub3JldHZhbAkJLyogRkZJX1RZUEVfVk9JRCAqLwotCS5sb25nCS5MY2xzX3JldGludAkJLyogRkZJX1RZUEVfSU5UICovCi0JLmxvbmcJLkxjbHNfcmV0ZmxvYXQJCS8qIEZGSV9UWVBFX0ZMT0FUICovCi0JLmxvbmcJLkxjbHNfcmV0ZG91YmxlCQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KLQkubG9uZwkuTGNsc19yZXRsZG91YmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KLQkubG9uZwkuTGNsc19yZXR1aW50OAkJLyogRkZJX1RZUEVfVUlOVDggKi8KLQkubG9uZwkuTGNsc19yZXRzaW50OAkJLyogRkZJX1RZUEVfU0lOVDggKi8KLQkubG9uZwkuTGNsc19yZXR1aW50MTYJCS8qIEZGSV9UWVBFX1VJTlQxNiAqLwotCS5sb25nCS5MY2xzX3JldHNpbnQxNgkJLyogRkZJX1RZUEVfU0lOVDE2ICovCi0JLmxvbmcJLkxjbHNfcmV0aW50CQkvKiBGRklfVFlQRV9VSU5UMzIgKi8KLQkubG9uZwkuTGNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLwotCS5sb25nCS5MY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KLQkubG9uZwkuTGNsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfU0lOVDY0ICovCi0JLmxvbmcJLkxjbHNfcmV0c3RydWN0CQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KLQkubG9uZwkuTGNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KLQkubG9uZwkuTGNsc19yZXRzdHJ1Y3QxCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLwotCS5sb25nCS5MY2xzX3JldHN0cnVjdDIJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzJCICovCi0JLmxvbmcJLkxjbHNfcmV0c3RydWN0NAkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KLQkubG9uZwkuTGNsc19yZXRtc3N0cnVjdAkvKiBGRklfVFlQRV9NU19TVFJVQ1QgKi8KKwkubG9uZwkuTGNsc19ub3JldHZhbC0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9WT0lEICovCisJLmxvbmcJLkxjbHNfcmV0aW50LS5MY2xzX3N0b3JlX3RhYmxlCQkvKiBGRklfVFlQRV9JTlQgKi8KKwkubG9uZwkuTGNsc19yZXRmbG9hdC0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9GTE9BVCAqLworCS5sb25nCS5MY2xzX3JldGRvdWJsZS0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KKwkubG9uZwkuTGNsc19yZXRsZG91YmxlLS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwkubG9uZwkuTGNsc19yZXR1aW50OC0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UOCAqLworCS5sb25nCS5MY2xzX3JldHNpbnQ4LS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQ4ICovCisJLmxvbmcJLkxjbHNfcmV0dWludDE2LS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQxNiAqLworCS5sb25nCS5MY2xzX3JldHNpbnQxNi0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UMTYgKi8KKwkubG9uZwkuTGNsc19yZXRpbnQtLkxjbHNfc3RvcmVfdGFibGUJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLworCS5sb25nCS5MY2xzX3JldGludC0uTGNsc19zdG9yZV90YWJsZQkJLyogRkZJX1RZUEVfU0lOVDMyICovCisJLmxvbmcJLkxjbHNfcmV0bGxvbmctLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDY0ICovCisJLmxvbmcJLkxjbHNfcmV0bGxvbmctLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDY0ICovCisJLmxvbmcJLkxjbHNfcmV0c3RydWN0LS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NUUlVDVCAqLworCS5sb25nCS5MY2xzX3JldGludC0uTGNsc19zdG9yZV90YWJsZQkJLyogRkZJX1RZUEVfUE9JTlRFUiAqLworCS5sb25nCS5MY2xzX3JldHN0cnVjdDEtLkxjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCisJLmxvbmcJLkxjbHNfcmV0c3RydWN0Mi0uTGNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KKwkubG9uZwkuTGNsc19yZXRzdHJ1Y3Q0LS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF80QiAqLworCS5sb25nCS5MY2xzX3JldG1zc3RydWN0LS5MY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX01TX1NUUlVDVCAqLwogCiAxOgotCWFkZAklZWF4LCAlZWF4Ci0JYWRkCSVlYXgsICVlYXgKKwlzaGwJJDIsICVlYXgKKwlhZGQJKCVlc3ApLCVlYXgKKwltb3YJKCVlYXgpLCVlYXgKIAlhZGQJKCVlc3ApLCVlYXgKIAlhZGQJJDQsICVlc3AKLQlqbXAJKiglZWF4KQorCWptcAkqJWVheAogCiAJLyogU2lnbi96ZXJvIGV4dGVuZCBhcyBhcHByb3ByaWF0ZS4gICovCiAuTGNsc19yZXRzaW50ODoKQEAgLTc4OCwxMiArODUzLDE1IEBACiAjZGVmaW5lIFJBV19DTE9TVVJFX0ZVTl9PRkZTRVQgKFJBV19DTE9TVVJFX0NJRl9PRkZTRVQgKyA0KQogI2RlZmluZSBSQVdfQ0xPU1VSRV9VU0VSX0RBVEFfT0ZGU0VUIChSQVdfQ0xPU1VSRV9GVU5fT0ZGU0VUICsgNCkKICNkZWZpbmUgQ0lGX0ZMQUdTX09GRlNFVCAyMAorCisjaWZkZWYgWDg2X1dJTjMyCiAgICAgICAgIC5iYWxpZ24gMTYKLQkuZ2xvYmwJX2ZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTAotI2lmbmRlZiBfX09TMl9fCitGRklfSElEREVOKGZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTCkKKwkuZ2xvYmwJVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9yYXdfVEhJU0NBTEwpCisjaWYgZGVmaW5lZChYODZfV0lOMzIpICYmICFkZWZpbmVkKF9fT1MyX18pCiAJLmRlZglfZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMOwkuc2NsCTI7CS50eXBlCTMyOwkuZW5kZWYKICNlbmRpZgotX2ZmaV9jbG9zdXJlX3Jhd19USElTQ0FMTDoKK1VTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfcmF3X1RISVNDQUxMKToKIAlwdXNobAklZWJwCiAJbW92bAklZXNwLCAlZWJwCiAJcHVzaGwJJWVzaQpAQCAtODAzLDEzICs4NzEsMTcgQEAKIAltb3ZsCSVlZHgsIDEyKCVlc3ApCS8qIHVzZXJfZGF0YSAqLwogCWxlYWwJMTIoJWVicCksICVlZHgJLyogX19idWlsdGluX2R3YXJmX2NmYSAoKSAqLwogCWptcAkuc3R1YnJhdworI2VuZGlmIC8qIFg4Nl9XSU4zMiAqLworCiAgICAgICAgICMgVGhpcyBhc3N1bWVzIHdlIGFyZSB1c2luZyBnYXMuCiAgICAgICAgIC5iYWxpZ24gMTYKLQkuZ2xvYmwJX2ZmaV9jbG9zdXJlX3Jhd19TWVNWCi0jaWZuZGVmIF9fT1MyX18KKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikKKwkuZ2xvYmwJVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9yYXdfU1lTVikKKyNpZiBkZWZpbmVkKFg4Nl9XSU4zMikgJiYgIWRlZmluZWQoX19PUzJfXykKIAkuZGVmCV9mZmlfY2xvc3VyZV9yYXdfU1lTVjsJLnNjbAkyOwkudHlwZQkzMjsJLmVuZGVmCiAjZW5kaWYKLV9mZmlfY2xvc3VyZV9yYXdfU1lTVjoKK1VTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfcmF3X1NZU1YpOgorI2VuZGlmIC8qIGRlZmluZWQoWDg2X1dJTjMyKSAqLwogLkxGQjQ6CiAJcHVzaGwJJWVicAogLkxDRkk2OgpAQCAtODMzLDMxICs5MDUsMzIgQEAKIAljYWxsCTFmCiAJIyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgY2FsbCBhbmQgdGhlIGp1bXAgdGFibGUuCiAuTHJjbHNfc3RvcmVfdGFibGU6Ci0JLmxvbmcJLkxyY2xzX25vcmV0dmFsCQkvKiBGRklfVFlQRV9WT0lEICovCi0JLmxvbmcJLkxyY2xzX3JldGludAkJLyogRkZJX1RZUEVfSU5UICovCi0JLmxvbmcJLkxyY2xzX3JldGZsb2F0CQkvKiBGRklfVFlQRV9GTE9BVCAqLwotCS5sb25nCS5McmNsc19yZXRkb3VibGUJLyogRkZJX1RZUEVfRE9VQkxFICovCi0JLmxvbmcJLkxyY2xzX3JldGxkb3VibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLwotCS5sb25nCS5McmNsc19yZXR1aW50OAkJLyogRkZJX1RZUEVfVUlOVDggKi8KLQkubG9uZwkuTHJjbHNfcmV0c2ludDgJCS8qIEZGSV9UWVBFX1NJTlQ4ICovCi0JLmxvbmcJLkxyY2xzX3JldHVpbnQxNgkvKiBGRklfVFlQRV9VSU5UMTYgKi8KLQkubG9uZwkuTHJjbHNfcmV0c2ludDE2CS8qIEZGSV9UWVBFX1NJTlQxNiAqLwotCS5sb25nCS5McmNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLwotCS5sb25nCS5McmNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLwotCS5sb25nCS5McmNsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfVUlOVDY0ICovCi0JLmxvbmcJLkxyY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KLQkubG9uZwkuTHJjbHNfcmV0c3RydWN0CS8qIEZGSV9UWVBFX1NUUlVDVCAqLwotCS5sb25nCS5McmNsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KLQkubG9uZwkuTHJjbHNfcmV0c3RydWN0MQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KLQkubG9uZwkuTHJjbHNfcmV0c3RydWN0MgkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KLQkubG9uZwkuTHJjbHNfcmV0c3RydWN0NAkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KLQkubG9uZwkuTHJjbHNfcmV0c3RydWN0CS8qIEZGSV9UWVBFX01TX1NUUlVDVCAqLworCS5sb25nCS5McmNsc19ub3JldHZhbC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVk9JRCAqLworCS5sb25nCS5McmNsc19yZXRpbnQtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0lOVCAqLworCS5sb25nCS5McmNsc19yZXRmbG9hdC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfRkxPQVQgKi8KKwkubG9uZwkuTHJjbHNfcmV0ZG91YmxlLS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9ET1VCTEUgKi8KKwkubG9uZwkuTHJjbHNfcmV0bGRvdWJsZS0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLworCS5sb25nCS5McmNsc19yZXR1aW50OC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDggKi8KKwkubG9uZwkuTHJjbHNfcmV0c2ludDgtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQ4ICovCisJLmxvbmcJLkxyY2xzX3JldHVpbnQxNi0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDE2ICovCisJLmxvbmcJLkxyY2xzX3JldHNpbnQxNi0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDE2ICovCisJLmxvbmcJLkxyY2xzX3JldGludC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDMyICovCisJLmxvbmcJLkxyY2xzX3JldGludC0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU0lOVDMyICovCisJLmxvbmcJLkxyY2xzX3JldGxsb25nLS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9VSU5UNjQgKi8KKwkubG9uZwkuTHJjbHNfcmV0bGxvbmctLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQ2NCAqLworCS5sb25nCS5McmNsc19yZXRzdHJ1Y3QtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NUUlVDVCAqLworCS5sb25nCS5McmNsc19yZXRpbnQtLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KKwkubG9uZwkuTHJjbHNfcmV0c3RydWN0MS0uTHJjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzFCICovCisJLmxvbmcJLkxyY2xzX3JldHN0cnVjdDItLkxyY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8yQiAqLworCS5sb25nCS5McmNsc19yZXRzdHJ1Y3Q0LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KKwkubG9uZwkuTHJjbHNfcmV0c3RydWN0LS5McmNsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9NU19TVFJVQ1QgKi8KIDE6Ci0JYWRkCSVlYXgsICVlYXgKLQlhZGQJJWVheCwgJWVheAorCXNobAkkMiwgJWVheAorCWFkZAkoJWVzcCksJWVheAorCW1vdgkoJWVheCksJWVheAogCWFkZAkoJWVzcCksJWVheAogCWFkZAkkNCwgJWVzcAotCWptcAkqKCVlYXgpCisJam1wCSolZWF4CiAKIAkvKiBTaWduL3plcm8gZXh0ZW5kIGFzIGFwcHJvcHJpYXRlLiAgKi8KIC5McmNsc19yZXRzaW50ODoKQEAgLTkyNSwxMSArOTk4LDEzIEBACiAKICAgICAgICAgIyBUaGlzIGFzc3VtZXMgd2UgYXJlIHVzaW5nIGdhcy4KIAkuYmFsaWduCTE2Ci0JLmdsb2JsCV9mZmlfY2xvc3VyZV9TVERDQUxMCi0jaWZuZGVmIF9fT1MyX18KK0ZGSV9ISURERU4oZmZpX2Nsb3N1cmVfU1REQ0FMTCkKKwkuZ2xvYmwJVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9TVERDQUxMKQorI2lmIGRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChfX09TMl9fKQogCS5kZWYJX2ZmaV9jbG9zdXJlX1NURENBTEw7CS5zY2wJMjsJLnR5cGUJMzI7CS5lbmRlZgogI2VuZGlmCi1fZmZpX2Nsb3N1cmVfU1REQ0FMTDoKK1VTQ09SRV9TWU1CT0woZmZpX2Nsb3N1cmVfU1REQ0FMTCk6CisuZmZpX2Nsb3N1cmVfU1REQ0FMTF9pbnRlcm5hbDoKIC5MRkI1OgogCXB1c2hsCSVlYnAKIC5MQ0ZJOToKQEAgLTk0MiwzNiArMTAxNyw0OCBAQAogCW1vdmwJJWVkeCwgNCglZXNwKQkvKiBhcmdzICovCiAJbGVhbAktMTIoJWVicCksICVlZHgKIAltb3ZsCSVlZHgsICglZXNwKQkvKiAmcmVzcCAqLwotCWNhbGwJX2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIKKyNpZiBkZWZpbmVkKEhBVkVfSElEREVOX1ZJU0lCSUxJVFlfQVRUUklCVVRFKSB8fCAhZGVmaW5lZChfX1BJQ19fKQorCWNhbGwJVVNDT1JFX1NZTUJPTChmZmlfY2xvc3VyZV9TWVNWX2lubmVyKQorI2VsaWYgZGVmaW5lZChYODZfREFSV0lOKQorCWNhbGxsCUxfZmZpX2Nsb3N1cmVfU1lTVl9pbm5lciRzdHViCisjZWxzZQorCW1vdmwJJWVieCwgOCglZXNwKQorCWNhbGwJMWYKKzE6CXBvcGwJJWVieAorCWFkZGwJJF9HTE9CQUxfT0ZGU0VUX1RBQkxFXytbLi0xYl0sICVlYngKKwljYWxsCWZmaV9jbG9zdXJlX1NZU1ZfaW5uZXJAUExUCisJbW92bAk4KCVlc3ApLCAlZWJ4CisjZW5kaWYKIAltb3ZsCS0xMiglZWJwKSwgJWVjeAogMDoKIAljYWxsCTFmCiAJIyBEbyBub3QgaW5zZXJ0IGFueXRoaW5nIGhlcmUgYmV0d2VlbiB0aGUgY2FsbCBhbmQgdGhlIGp1bXAgdGFibGUuCiAuTHNjbHNfc3RvcmVfdGFibGU6Ci0JLmxvbmcJLkxzY2xzX25vcmV0dmFsCQkvKiBGRklfVFlQRV9WT0lEICovCi0JLmxvbmcJLkxzY2xzX3JldGludAkJLyogRkZJX1RZUEVfSU5UICovCi0JLmxvbmcJLkxzY2xzX3JldGZsb2F0CQkvKiBGRklfVFlQRV9GTE9BVCAqLwotCS5sb25nCS5Mc2Nsc19yZXRkb3VibGUJLyogRkZJX1RZUEVfRE9VQkxFICovCi0JLmxvbmcJLkxzY2xzX3JldGxkb3VibGUJLyogRkZJX1RZUEVfTE9OR0RPVUJMRSAqLwotCS5sb25nCS5Mc2Nsc19yZXR1aW50OAkJLyogRkZJX1RZUEVfVUlOVDggKi8KLQkubG9uZwkuTHNjbHNfcmV0c2ludDgJCS8qIEZGSV9UWVBFX1NJTlQ4ICovCi0JLmxvbmcJLkxzY2xzX3JldHVpbnQxNgkvKiBGRklfVFlQRV9VSU5UMTYgKi8KLQkubG9uZwkuTHNjbHNfcmV0c2ludDE2CS8qIEZGSV9UWVBFX1NJTlQxNiAqLwotCS5sb25nCS5Mc2Nsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1VJTlQzMiAqLwotCS5sb25nCS5Mc2Nsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1NJTlQzMiAqLwotCS5sb25nCS5Mc2Nsc19yZXRsbG9uZwkJLyogRkZJX1RZUEVfVUlOVDY0ICovCi0JLmxvbmcJLkxzY2xzX3JldGxsb25nCQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KLQkubG9uZwkuTHNjbHNfcmV0c3RydWN0CS8qIEZGSV9UWVBFX1NUUlVDVCAqLwotCS5sb25nCS5Mc2Nsc19yZXRpbnQJCS8qIEZGSV9UWVBFX1BPSU5URVIgKi8KLQkubG9uZwkuTHNjbHNfcmV0c3RydWN0MQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMUIgKi8KLQkubG9uZwkuTHNjbHNfcmV0c3RydWN0MgkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KLQkubG9uZwkuTHNjbHNfcmV0c3RydWN0NAkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfNEIgKi8KKwkubG9uZwkuTHNjbHNfbm9yZXR2YWwtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1ZPSUQgKi8KKwkubG9uZwkuTHNjbHNfcmV0aW50LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9JTlQgKi8KKwkubG9uZwkuTHNjbHNfcmV0ZmxvYXQtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0ZMT0FUICovCisJLmxvbmcJLkxzY2xzX3JldGRvdWJsZS0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfRE9VQkxFICovCisJLmxvbmcJLkxzY2xzX3JldGxkb3VibGUtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX0xPTkdET1VCTEUgKi8KKwkubG9uZwkuTHNjbHNfcmV0dWludDgtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQ4ICovCisJLmxvbmcJLkxzY2xzX3JldHNpbnQ4LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UOCAqLworCS5sb25nCS5Mc2Nsc19yZXR1aW50MTYtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQxNiAqLworCS5sb25nCS5Mc2Nsc19yZXRzaW50MTYtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQxNiAqLworCS5sb25nCS5Mc2Nsc19yZXRpbnQtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1VJTlQzMiAqLworCS5sb25nCS5Mc2Nsc19yZXRpbnQtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NJTlQzMiAqLworCS5sb25nCS5Mc2Nsc19yZXRsbG9uZy0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfVUlOVDY0ICovCisJLmxvbmcJLkxzY2xzX3JldGxsb25nLS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TSU5UNjQgKi8KKwkubG9uZwkuTHNjbHNfcmV0c3RydWN0LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TVFJVQ1QgKi8KKwkubG9uZwkuTHNjbHNfcmV0aW50LS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9QT0lOVEVSICovCisJLmxvbmcJLkxzY2xzX3JldHN0cnVjdDEtLkxzY2xzX3N0b3JlX3RhYmxlCS8qIEZGSV9UWVBFX1NNQUxMX1NUUlVDVF8xQiAqLworCS5sb25nCS5Mc2Nsc19yZXRzdHJ1Y3QyLS5Mc2Nsc19zdG9yZV90YWJsZQkvKiBGRklfVFlQRV9TTUFMTF9TVFJVQ1RfMkIgKi8KKwkubG9uZwkuTHNjbHNfcmV0c3RydWN0NC0uTHNjbHNfc3RvcmVfdGFibGUJLyogRkZJX1RZUEVfU01BTExfU1RSVUNUXzRCICovCiAxOgotCWFkZAklZWF4LCAlZWF4Ci0JYWRkCSVlYXgsICVlYXgKKwlzaGwJJDIsICVlYXgKKwlhZGQJKCVlc3ApLCVlYXgKKwltb3YJKCVlYXgpLCVlYXgKIAlhZGQJKCVlc3ApLCVlYXgKIAlhZGQJJDQsICVlc3AKLQlqbXAJKiglZWF4KQorCWptcAkqJWVheAogCiAJLyogU2lnbi96ZXJvIGV4dGVuZCBhcyBhcHByb3ByaWF0ZS4gICovCiAuTHNjbHNfcmV0c2ludDg6CkBAIC0xMDMwLDExICsxMTE3LDMwIEBACiAuTHNjbHNfZXBpbG9ndWU6CiAJbW92bAklZWJwLCAlZXNwCiAJcG9wbAklZWJwCi0JcmV0CisJcG9wbAklZWN4CisJcG9wbAklZWR4CisJbW92bAkoQ0xPU1VSRV9DSUZfT0ZGU0VULTEwKSglZWN4KSwgJWVjeAorCWFkZGwJQ0lGX0JZVEVTX09GRlNFVCglZWN4KSwgJWVzcAorCW1vdmwJQ0lGX0FCSV9PRkZTRVQoJWVjeCksICVlY3gKKwljbXBsCSQzLCAlZWN4IC8qIEZGSV9USElTQ0FMTCAqLworCWplCTFmCisJY21wbAkkNCwgJWVjeCAvKiBGRklfRkFTVENBTEwgKi8KKwlqbmUJMmYKKworCWFkZGwJJDQsICVlc3AKKzE6CWFkZGwJJDQsICVlc3AKKzI6CWptcAkqJWVkeAogLmZmaV9jbG9zdXJlX1NURENBTExfZW5kOgogLkxGRTU6CiAKLSNpZm5kZWYgX19PUzJfXworI2lmIGRlZmluZWQoWDg2X0RBUldJTikKKy5zZWN0aW9uIF9fSU1QT1JULF9fanVtcF90YWJsZSxzeW1ib2xfc3R1YnMsc2VsZl9tb2RpZnlpbmdfY29kZStwdXJlX2luc3RydWN0aW9ucyw1CitMX2ZmaV9jbG9zdXJlX1NZU1ZfaW5uZXIkc3R1YjoKKwkuaW5kaXJlY3Rfc3ltYm9sIF9mZmlfY2xvc3VyZV9TWVNWX2lubmVyCisJaGx0IDsgaGx0IDsgaGx0IDsgaGx0IDsgaGx0CisjZW5kaWYKKworI2lmIGRlZmluZWQoWDg2X1dJTjMyKSAmJiAhZGVmaW5lZChfX09TMl9fKQogCS5zZWN0aW9uCS5laF9mcmFtZSwidyIKICNlbmRpZgogLkxmcmFtZTE6CkBAIC0xMDk0LDcgKzEyMDAsNiBAQAogCS5hbGlnbiA0CiAuTEVGREUxOgogCi0KIC5MU0ZERTM6CiAJLmxvbmcJLkxFRkRFMy0uTEFTRkRFMwkvKiBGREUgTGVuZ3RoICovCiAuTEFTRkRFMzoKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3RhbXAtaC5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvc3RhbXAtaC5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTc4OGY3MC4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3N0YW1wLWguaW4KKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi10aW1lc3RhbXAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmFtIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KaW5kZXggZWRjNmU2MS4uZGExMDQ2NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvTWFrZWZpbGUuYW0KQEAgLTIsMTcgKzIsNiBAQAogCiBBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBkZWphZ251CiAKLSMgU2V0dXAgdGhlIHRlc3RpbmcgZnJhbWV3b3JrLCBpZiB5b3UgaGF2ZSBvbmUKLUVYUEVDVCA9IGBpZiBbIC1mICQodG9wX2J1aWxkZGlyKS8uLi9leHBlY3QvZXhwZWN0IF0gOyB0aGVuIFwKLSAgICAgICAgICAgIGVjaG8gJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3QgOyBcCi0gICAgICAgICAgZWxzZSBlY2hvIGV4cGVjdCA7IGZpYAotCi1SVU5URVNUID0gYGlmIFsgLWYgJCh0b3Bfc3JjZGlyKS8uLi9kZWphZ251L3J1bnRlc3QgXSA7IHRoZW4gXAotCSAgICAgICBlY2hvICQodG9wX3NyY2RpcikvLi4vZGVqYWdudS9ydW50ZXN0IDsgXAotCSAgICBlbHNlIGVjaG8gcnVudGVzdDsgZmlgCi0KLUFNX1JVTlRFU1RGTEFHUyA9Ci0KIEVYVFJBX0RFSkFHTlVfU0lURV9DT05GSUc9Li4vbG9jYWwuZXhwCiAKIENMRUFORklMRVMgPSAqLmV4ZSBjb3JlKiAqLmxvZyAqLnN1bQpAQCAtMjAsNyArOSw3IEBACiBFWFRSQV9ESVNUID0gY29uZmlnL2RlZmF1bHQuZXhwIGxpYmZmaS5jYWxsL2Nsc18xOWJ5dGUuYwkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGVfc3BsaXQuYwkJCQlcCiBsaWJmZmkuY2FsbC9jbG9zdXJlX2xvY19mbjAuYyBsaWJmZmkuY2FsbC9jbHNfc2NoYXIuYwkJCVwKLWxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgbGliZmZpLmNhbGwvbWFueTJfd2luMzIuYwkJCVwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfZm4xLmMgXAogbGliZmZpLmNhbGwvcmV0dXJuX3VsLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX2RvdWJsZS5jCQkJXAogbGliZmZpLmNhbGwvcmV0dXJuX2ZsMi5jIGxpYmZmaS5jYWxsL2Nsc18xXzFieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfNjRieXRlLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDcuYwkJCVwKQEAgLTMwLDcgKzE5LDcgQEAKIGxpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYyBsaWJmZmkuY2FsbC9jbHNfMTZieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9zdHJ1Y3Q4LmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyBsaWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMJCQlcCi1saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYyBsaWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCQkJXAorbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYwkJCVwKIGxpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jIGxpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMJCQlcCiBsaWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMgbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMJCQlcCkBAIC00NiwxNiArMzUsMTYgQEAKIGxpYmZmaS5jYWxsL3JldHVybl9mbDMuYyBsaWJmZmkuY2FsbC9zdHJldF9tZWRpdW0uYwkJCVwKIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q2LmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjMuYwkJCVwKIGxpYmZmaS5jYWxsL2Zsb2F0My5jIGxpYmZmaS5jYWxsL21hbnkyLmMJCQkJXAotbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jCQlcCitsaWJmZmkuY2FsbC9jbG9zdXJlX3NpbXBsZS5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MTYuYwkJXAogbGliZmZpLmNhbGwvY2xzXzlieXRlMS5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm42LmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3BvaW50ZXIuYwkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX2xvbmdkb3VibGUuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMi5jCQlcCi1saWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgbGliZmZpLmNhbGwvbWFueV93aW4zMi5jCQkJXAorbGliZmZpLmNhbGwvY2xzX3NzaG9ydC5jIFwKIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QuYyBsaWJmZmkuY2FsbC9jbHNfMjBieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZS5jIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV91Y2hhci5jCQlcCi1saWJmZmkuY2FsbC9yZXR1cm5fdWMuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmMJCQlcCitsaWJmZmkuY2FsbC9yZXR1cm5fdWMuYyBcCiBsaWJmZmkuY2FsbC9jbHNfMThieXRlLmMgbGliZmZpLmNhbGwvY2xzXzhieXRlLmMJCQlcCi1saWJmZmkuY2FsbC9wcm9tb3Rpb24uYyBsaWJmZmkuY2FsbC9zdHJ1Y3QxX3dpbjMyLmMJCQlcCitsaWJmZmkuY2FsbC9wcm9tb3Rpb24uYyBcCiBsaWJmZmkuY2FsbC9yZXR1cm5fZGJsLmMgbGliZmZpLmNhbGwvY2xzXzI0Ynl0ZS5jCQkJXAogbGliZmZpLmNhbGwvc3RydWN0NC5jIGxpYmZmaS5jYWxsL2Nsc182Ynl0ZS5jCQkJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50MzIuYyBsaWJmZmkuY2FsbC9mbG9hdC5jCQkJXApAQCAtNjMsNyArNTIsNyBAQAogbGliZmZpLmNhbGwvcmV0dXJuX2RibDEuYyBsaWJmZmkuY2FsbC9jbHNfM18xYnl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX2Zsb2F0LmMgbGliZmZpLmNhbGwvcmV0dXJuX2ZsMS5jCQkJXAogbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDEwLmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDUuYwkJXAotbGliZmZpLmNhbGwvZmFzdHRoaXMxX3dpbjMyLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jCQlcCitsaWJmZmkuY2FsbC9jbHNfYWxpZ25fc2ludDY0LmMJCVwKIGxpYmZmaS5jYWxsL3N0cmV0X2xhcmdlMi5jIGxpYmZmaS5jYWxsL3JldHVybl9zbC5jCQkJXAogbGliZmZpLmNhbGwvY2xvc3VyZV9mbjAuYyBsaWJmZmkuY2FsbC9jbHNfNWJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc18yYnl0ZS5jIGxpYmZmaS5jYWxsL2Zsb2F0Mi5jCQkJCVwKQEAgLTc1LDIwICs2NCwyMiBAQAogbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYwkJXAogbGliZmZpLmNhbGwvc3RydWN0MS5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMJCQlcCiBsaWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jIGxpYmZmaS5jYWxsL3Byb2JsZW0xLmMJCQlcCi1saWJmZmkuY2FsbC9mbG9hdDQuYyBsaWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYwkJCVwKLWxpYmZmaS5jYWxsL3JldHVybl9sZGwuYyBsaWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmMJCQlcCi1saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIGxpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYwkJCVwKK2xpYmZmaS5jYWxsL2Zsb2F0NC5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIFwKIGxpYmZmaS5jYWxsL3N0cnVjdDYuYyBsaWJmZmkuY2FsbC9yZXR1cm5fbGwuYyBsaWJmZmkuY2FsbC9zdHJ1Y3Q5LmMJXAogbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgbGliZmZpLmNhbGwvc3RydWN0Ny5jCQkJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYyBsaWJmZmkuY2FsbC9jbHNfNGJ5dGUuYwkJCVwKLWxpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jIGxpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jCQkJXAotbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMgbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYwkJCVwKLWxpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwIGxpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MJXAotbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIGxpYi93cmFwcGVyLmV4cCBsaWIvdGFyZ2V0LWxpYnBhdGguZXhwCVwKK2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jCQkJXAorbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMgbGliZmZpLmNhbGwvdW53aW5kdGVzdC5jYwkJCVwKK2xpYmZmaS5jYWxsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MJXAorbGliL3dyYXBwZXIuZXhwIGxpYi90YXJnZXQtbGlicGF0aC5leHAJXAogbGliL2xpYmZmaS5leHAgbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYwkJCQlcCiBsaWJmZmkuY2FsbC9jbHNfdWNoYXJfdmEuYyBsaWJmZmkuY2FsbC9jbHNfdWludF92YS5jCQkJXAogbGliZmZpLmNhbGwvY2xzX3Vsb25nX3ZhLmMgbGliZmZpLmNhbGwvY2xzX3VzaG9ydF92YS5jCQkJXAogbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDExLmMgbGliZmZpLmNhbGwvdW5pbml0aWFsaXplZC5jCQlcCiBsaWJmZmkuY2FsbC92YV8xLmMgbGliZmZpLmNhbGwvdmFfc3RydWN0MS5jIGxpYmZmaS5jYWxsL3ZhX3N0cnVjdDIuYwlcCi1saWJmZmkuY2FsbC92YV9zdHJ1Y3QzLmMKLQorbGliZmZpLmNhbGwvdmFfc3RydWN0My5jIFwKK2xpYmZmaS5jYWxsL3N0cmxlbjIuYyBcCitsaWJmZmkuY2FsbC9zdHJsZW4zLmMgXAorbGliZmZpLmNhbGwvc3RybGVuNC5jCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9NYWtlZmlsZS5pbiBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmluCmluZGV4IGEzYmEwNjYuLjk5ZTIyNmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmluCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL01ha2VmaWxlLmluCkBAIC0xLDcgKzEsNyBAQAotIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS4xMi4yIGZyb20gTWFrZWZpbGUuYW0uCisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjEzLjQgZnJvbSBNYWtlZmlsZS5hbS4KICMgQGNvbmZpZ3VyZV9pbnB1dEAKIAotIyBDb3B5cmlnaHQgKEMpIDE5OTQtMjAxMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgQ29weXJpZ2h0IChDKSAxOTk0LTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKICMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCkBAIC0xNCwyMyArMTQsNTEgQEAKIAogQFNFVF9NQUtFQAogVlBBVEggPSBAc3JjZGlyQAotYW1fX21ha2VfZHJ5cnVuID0gXAotICB7IFwKLSAgICBhbV9fZHJ5PW5vOyBcCithbV9faXNfZ251X21ha2UgPSB0ZXN0IC1uICckKE1BS0VGSUxFX0xJU1QpJyAmJiB0ZXN0IC1uICckKE1BS0VMRVZFTCknCithbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uID0gXAorICBjYXNlICQke3RhcmdldF9vcHRpb24tfSBpbiBcCisgICAgICA/KSA7OyBcCisgICAgICAqKSBlY2hvICJhbV9fbWFrZV9ydW5uaW5nX3dpdGhfb3B0aW9uOiBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCIgXAorICAgICAgICAgICAgICAidGFyZ2V0IG9wdGlvbiAnJCR7dGFyZ2V0X29wdGlvbi19JyBzcGVjaWZpZWQiID4mMjsgXAorICAgICAgICAgZXhpdCAxOzsgXAorICBlc2FjOyBcCisgIGhhc19vcHQ9bm87IFwKKyAgc2FuZV9tYWtlZmxhZ3M9JCRNQUtFRkxBR1M7IFwKKyAgaWYgJChhbV9faXNfZ251X21ha2UpOyB0aGVuIFwKKyAgICBzYW5lX21ha2VmbGFncz0kJE1GTEFHUzsgXAorICBlbHNlIFwKICAgICBjYXNlICQkTUFLRUZMQUdTIGluIFwKICAgICAgICpcXFtcIFwJXSopIFwKLSAgICAgICAgZWNobyAnYW0tLWVjaG86IDsgQGVjaG8gIkFNIiAgT0snIHwgJChNQUtFKSAtZiAtIDI+L2Rldi9udWxsIFwKLSAgICAgICAgICB8IGdyZXAgJ15BTSBPSyQkJyA+L2Rldi9udWxsIHx8IGFtX19kcnk9eWVzOzsgXAotICAgICAgKikgXAotICAgICAgICBmb3IgYW1fX2ZsZyBpbiAkJE1BS0VGTEFHUzsgZG8gXAotICAgICAgICAgIGNhc2UgJCRhbV9fZmxnIGluIFwKLSAgICAgICAgICAgICo9KnwtLSopIDs7IFwKLSAgICAgICAgICAgICpuKikgYW1fX2RyeT15ZXM7IGJyZWFrOzsgXAotICAgICAgICAgIGVzYWM7IFwKLSAgICAgICAgZG9uZTs7IFwKKyAgICAgICAgYnM9XFw7IFwKKyAgICAgICAgc2FuZV9tYWtlZmxhZ3M9YHByaW50ZiAnJXNcbicgIiQkTUFLRUZMQUdTIiBcCisgICAgICAgICAgfCBzZWQgInMvJCRicyQkYnNbJCRicyAkJGJzCV0qLy9nImA7OyBcCiAgICAgZXNhYzsgXAotICAgIHRlc3QgJCRhbV9fZHJ5ID0geWVzOyBcCi0gIH0KKyAgZmk7IFwKKyAgc2tpcF9uZXh0PW5vOyBcCisgIHN0cmlwX3RyYWlsb3B0ICgpIFwKKyAgeyBcCisgICAgZmxnPWBwcmludGYgJyVzXG4nICIkJGZsZyIgfCBzZWQgInMvJCQxLiokJC8vImA7IFwKKyAgfTsgXAorICBmb3IgZmxnIGluICQkc2FuZV9tYWtlZmxhZ3M7IGRvIFwKKyAgICB0ZXN0ICQkc2tpcF9uZXh0ID0geWVzICYmIHsgc2tpcF9uZXh0PW5vOyBjb250aW51ZTsgfTsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKj0qfC0tKikgY29udGludWU7OyBcCisgICAgICAgIC0qSSkgc3RyaXBfdHJhaWxvcHQgJ0knOyBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLSpJPyopIHN0cmlwX3RyYWlsb3B0ICdJJzs7IFwKKyAgICAgICAgLSpPKSBzdHJpcF90cmFpbG9wdCAnTyc7IHNraXBfbmV4dD15ZXM7OyBcCisgICAgICAtKk8/Kikgc3RyaXBfdHJhaWxvcHQgJ08nOzsgXAorICAgICAgICAtKmwpIHN0cmlwX3RyYWlsb3B0ICdsJzsgc2tpcF9uZXh0PXllczs7IFwKKyAgICAgIC0qbD8qKSBzdHJpcF90cmFpbG9wdCAnbCc7OyBcCisgICAgICAtW2RFRG1dKSBza2lwX25leHQ9eWVzOzsgXAorICAgICAgLVtKVF0pIHNraXBfbmV4dD15ZXM7OyBcCisgICAgZXNhYzsgXAorICAgIGNhc2UgJCRmbGcgaW4gXAorICAgICAgKiQkdGFyZ2V0X29wdGlvbiopIGhhc19vcHQ9eWVzOyBicmVhazs7IFwKKyAgICBlc2FjOyBcCisgIGRvbmU7IFwKKyAgdGVzdCAkJGhhc19vcHQgPSB5ZXMKK2FtX19tYWtlX2RyeXJ1biA9ICh0YXJnZXRfb3B0aW9uPW47ICQoYW1fX21ha2VfcnVubmluZ193aXRoX29wdGlvbikpCithbV9fbWFrZV9rZWVwZ29pbmcgPSAodGFyZ2V0X29wdGlvbj1rOyAkKGFtX19tYWtlX3J1bm5pbmdfd2l0aF9vcHRpb24pKQogcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACiBwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKIHBrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKQEAgLTUxLDcgKzc5LDcgQEAKIGhvc3RfdHJpcGxldCA9IEBob3N0QAogdGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAogc3ViZGlyID0gdGVzdHN1aXRlCi1ESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0RJU1RfQ09NTU9OID0gJChzcmNkaXIpL01ha2VmaWxlLmluICQoc3JjZGlyKS9NYWtlZmlsZS5hbQogQUNMT0NBTF9NNCA9ICQodG9wX3NyY2RpcikvYWNsb2NhbC5tNAogYW1fX2FjbG9jYWxfbTRfZGVwcyA9ICQodG9wX3NyY2RpcikvbTQvYXNtY2ZpLm00IFwKIAkkKHRvcF9zcmNkaXIpL200L2F4X2FwcGVuZF9mbGFnLm00IFwKQEAgLTczLDYgKzEwMSwxOCBAQAogQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9mZmljb25maWcuaAogQ09ORklHX0NMRUFOX0ZJTEVTID0KIENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CitBTV9WX1AgPSAkKGFtX192X1BfQEFNX1ZAKQorYW1fX3ZfUF8gPSAkKGFtX192X1BfQEFNX0RFRkFVTFRfVkApCithbV9fdl9QXzAgPSBmYWxzZQorYW1fX3ZfUF8xID0gOgorQU1fVl9HRU4gPSAkKGFtX192X0dFTl9AQU1fVkApCithbV9fdl9HRU5fID0gJChhbV9fdl9HRU5fQEFNX0RFRkFVTFRfVkApCithbV9fdl9HRU5fMCA9IEBlY2hvICIgIEdFTiAgICAgIiAkQDsKK2FtX192X0dFTl8xID0gCitBTV9WX2F0ID0gJChhbV9fdl9hdF9AQU1fVkApCithbV9fdl9hdF8gPSAkKGFtX192X2F0X0BBTV9ERUZBVUxUX1ZAKQorYW1fX3ZfYXRfMCA9IEAKK2FtX192X2F0XzEgPSAKIFNPVVJDRVMgPQogRElTVF9TT1VSQ0VTID0KIGFtX19jYW5fcnVuX2luc3RhbGxpbmZvID0gXApAQCAtODAsMTQgKzEyMCwxOCBAQAogICAgIG58bm98Tk8pIGZhbHNlOzsgXAogICAgICopIChpbnN0YWxsLWluZm8gLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjE7OyBcCiAgIGVzYWMKK2FtX190YWdnZWRfZmlsZXMgPSAkKEhFQURFUlMpICQoU09VUkNFUykgJChUQUdTX0ZJTEVTKSAkKExJU1ApCiBERUpBVE9PTCA9ICQoUEFDS0FHRSkKIFJVTlRFU1RERUZBVUxURkxBR1MgPSAtLXRvb2wgJCR0b29sIC0tc3JjZGlyICQkc3JjZGlyCitFWFBFQ1QgPSBleHBlY3QKK1JVTlRFU1QgPSBydW50ZXN0CiBESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQogQUNMT0NBTCA9IEBBQ0xPQ0FMQAogQUxMT0NBID0gQEFMTE9DQUAKIEFNVEFSID0gQEFNVEFSQAorQU1fREVGQVVMVF9WRVJCT1NJVFkgPSBAQU1fREVGQVVMVF9WRVJCT1NJVFlACiBBTV9MVExERkxBR1MgPSBAQU1fTFRMREZMQUdTQAotQU1fUlVOVEVTVEZMQUdTID0gCitBTV9SVU5URVNURkxBR1MgPSBAQU1fUlVOVEVTVEZMQUdTQAogQVIgPSBAQVJACiBBVVRPQ09ORiA9IEBBVVRPQ09ORkAKIEFVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKQEAgLTEwMSw2ICsxNDUsMTAgQEAKIENGTEFHUyA9IEBDRkxBR1NACiBDUFAgPSBAQ1BQQAogQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAogQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKIERFRlMgPSBAREVGU0AKIERFUERJUiA9IEBERVBESVJACkBAIC0xMTYsNiArMTY0LDcgQEAKIEZHUkVQID0gQEZHUkVQQAogR1JFUCA9IEBHUkVQQAogSEFWRV9MT05HX0RPVUJMRSA9IEBIQVZFX0xPTkdfRE9VQkxFQAorSEFWRV9MT05HX0RPVUJMRV9WQVJJQU5UID0gQEhBVkVfTE9OR19ET1VCTEVfVkFSSUFOVEAKIElOU1RBTEwgPSBASU5TVEFMTEAKIElOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACiBJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQApAQCAtMTYyLDYgKzIxMSw3IEBACiBhYnNfdG9wX3NyY2RpciA9IEBhYnNfdG9wX3NyY2RpckAKIGFjX2N0X0FSID0gQGFjX2N0X0FSQAogYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAogYWNfY3RfRFVNUEJJTiA9IEBhY19jdF9EVU1QQklOQAogYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACiBhbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QApAQCAtMjE3LDIyICsyNjcsMTIgQEAKIHRvcF9idWlsZGRpciA9IEB0b3BfYnVpbGRkaXJACiB0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACiBBVVRPTUFLRV9PUFRJT05TID0gZm9yZWlnbiBkZWphZ251Ci0KLSMgU2V0dXAgdGhlIHRlc3RpbmcgZnJhbWV3b3JrLCBpZiB5b3UgaGF2ZSBvbmUKLUVYUEVDVCA9IGBpZiBbIC1mICQodG9wX2J1aWxkZGlyKS8uLi9leHBlY3QvZXhwZWN0IF0gOyB0aGVuIFwKLSAgICAgICAgICAgIGVjaG8gJCh0b3BfYnVpbGRkaXIpLy4uL2V4cGVjdC9leHBlY3QgOyBcCi0gICAgICAgICAgZWxzZSBlY2hvIGV4cGVjdCA7IGZpYAotCi1SVU5URVNUID0gYGlmIFsgLWYgJCh0b3Bfc3JjZGlyKS8uLi9kZWphZ251L3J1bnRlc3QgXSA7IHRoZW4gXAotCSAgICAgICBlY2hvICQodG9wX3NyY2RpcikvLi4vZGVqYWdudS9ydW50ZXN0IDsgXAotCSAgICBlbHNlIGVjaG8gcnVudGVzdDsgZmlgCi0KIEVYVFJBX0RFSkFHTlVfU0lURV9DT05GSUcgPSAuLi9sb2NhbC5leHAKIENMRUFORklMRVMgPSAqLmV4ZSBjb3JlKiAqLmxvZyAqLnN1bQogRVhUUkFfRElTVCA9IGNvbmZpZy9kZWZhdWx0LmV4cCBsaWJmZmkuY2FsbC9jbHNfMTlieXRlLmMJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9sb25nZG91YmxlX3NwbGl0LmMJCQkJXAogbGliZmZpLmNhbGwvY2xvc3VyZV9sb2NfZm4wLmMgbGliZmZpLmNhbGwvY2xzX3NjaGFyLmMJCQlcCi1saWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIGxpYmZmaS5jYWxsL21hbnkyX3dpbjMyLmMJCQlcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMS5jIFwKIGxpYmZmaS5jYWxsL3JldHVybl91bC5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9kb3VibGUuYwkJCVwKIGxpYmZmaS5jYWxsL3JldHVybl9mbDIuYyBsaWJmZmkuY2FsbC9jbHNfMV8xYnl0ZS5jCQkJXAogbGliZmZpLmNhbGwvY2xzXzY0Ynl0ZS5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q3LmMJCQlcCkBAIC0yNDIsNyArMjgyLDcgQEAKIGxpYmZmaS5jYWxsL2Nsc18zYnl0ZTEuYyBsaWJmZmkuY2FsbC9jbHNfMTZieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9zdHJ1Y3Q4LmMgbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDguYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc19tdWx0aV9zc2hvcnQuYyBsaWJmZmkuY2FsbC9jbHNfM2J5dGUyLmMJCQlcCi1saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYyBsaWJmZmkuY2FsbC9jbHNfcG9pbnRlci5jCQkJXAorbGliZmZpLmNhbGwvY2xzX3BvaW50ZXIuYwkJCVwKIGxpYmZmaS5jYWxsL2Vycl9iYWRfdHlwZWRlZi5jIGxpYmZmaS5jYWxsL2Nsc180XzFieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfOWJ5dGUyLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3NjaGFyLmMJCQlcCiBsaWJmZmkuY2FsbC9zdHJldF9tZWRpdW0yLmMgbGliZmZpLmNhbGwvY2xzXzVfMV9ieXRlLmMJCQlcCkBAIC0yNTgsMTYgKzI5OCwxNiBAQAogbGliZmZpLmNhbGwvcmV0dXJuX2ZsMy5jIGxpYmZmaS5jYWxsL3N0cmV0X21lZGl1bS5jCQkJXAogbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDYuYyBsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuMy5jCQkJXAogbGliZmZpLmNhbGwvZmxvYXQzLmMgbGliZmZpLmNhbGwvbWFueTIuYwkJCQlcCi1saWJmZmkuY2FsbC9jbG9zdXJlX3N0ZGNhbGwuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fdWludDE2LmMJCVwKK2xpYmZmaS5jYWxsL2Nsb3N1cmVfc2ltcGxlLmMgbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQxNi5jCQlcCiBsaWJmZmkuY2FsbC9jbHNfOWJ5dGUxLmMgbGliZmZpLmNhbGwvY2xvc3VyZV9mbjYuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fcG9pbnRlci5jCQlcCiBsaWJmZmkuY2FsbC9jbHNfYWxpZ25fbG9uZ2RvdWJsZS5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4yLmMJCVwKLWxpYmZmaS5jYWxsL2Nsc19zc2hvcnQuYyBsaWJmZmkuY2FsbC9tYW55X3dpbjMyLmMJCQlcCitsaWJmZmkuY2FsbC9jbHNfc3Nob3J0LmMgXAogbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdC5jIGxpYmZmaS5jYWxsL2Nsc18yMGJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3VjaGFyLmMJCVwKLWxpYmZmaS5jYWxsL3JldHVybl91Yy5jIGxpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYwkJCVwKK2xpYmZmaS5jYWxsL3JldHVybl91Yy5jIFwKIGxpYmZmaS5jYWxsL2Nsc18xOGJ5dGUuYyBsaWJmZmkuY2FsbC9jbHNfOGJ5dGUuYwkJCVwKLWxpYmZmaS5jYWxsL3Byb21vdGlvbi5jIGxpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYwkJCVwKK2xpYmZmaS5jYWxsL3Byb21vdGlvbi5jIFwKIGxpYmZmaS5jYWxsL3JldHVybl9kYmwuYyBsaWJmZmkuY2FsbC9jbHNfMjRieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9zdHJ1Y3Q0LmMgbGliZmZpLmNhbGwvY2xzXzZieXRlLmMJCQkJXAogbGliZmZpLmNhbGwvY2xzX2FsaWduX3VpbnQzMi5jIGxpYmZmaS5jYWxsL2Zsb2F0LmMJCQlcCkBAIC0yNzUsNyArMzE1LDcgQEAKIGxpYmZmaS5jYWxsL3JldHVybl9kYmwxLmMgbGliZmZpLmNhbGwvY2xzXzNfMWJ5dGUuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9mbG9hdC5jIGxpYmZmaS5jYWxsL3JldHVybl9mbDEuYwkJCVwKIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMC5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q1LmMJCVwKLWxpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl9zaW50NjQuYwkJXAorbGliZmZpLmNhbGwvY2xzX2FsaWduX3NpbnQ2NC5jCQlcCiBsaWJmZmkuY2FsbC9zdHJldF9sYXJnZTIuYyBsaWJmZmkuY2FsbC9yZXR1cm5fc2wuYwkJCVwKIGxpYmZmaS5jYWxsL2Nsb3N1cmVfZm4wLmMgbGliZmZpLmNhbGwvY2xzXzVieXRlLmMJCQlcCiBsaWJmZmkuY2FsbC9jbHNfMmJ5dGUuYyBsaWJmZmkuY2FsbC9mbG9hdDIuYwkJCQlcCkBAIC0yODcsMjIgKzMyNywyNSBAQAogbGliZmZpLmNhbGwvcHlvYmpjLXRjLmMgbGliZmZpLmNhbGwvY2xzX211bHRpX3VzaG9ydGNoYXIuYwkJXAogbGliZmZpLmNhbGwvc3RydWN0MS5jIGxpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3Q5LmMJCQlcCiBsaWJmZmkuY2FsbC9odWdlX3N0cnVjdC5jIGxpYmZmaS5jYWxsL3Byb2JsZW0xLmMJCQlcCi1saWJmZmkuY2FsbC9mbG9hdDQuYyBsaWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYwkJCVwKLWxpYmZmaS5jYWxsL3JldHVybl9sZGwuYyBsaWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmMJCQlcCi1saWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIGxpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYwkJCVwKK2xpYmZmaS5jYWxsL2Zsb2F0NC5jIFwKK2xpYmZmaS5jYWxsL3JldHVybl9sZGwuYyBcCitsaWJmZmkuY2FsbC9jbG9zdXJlX2ZuNS5jIFwKIGxpYmZmaS5jYWxsL3N0cnVjdDYuYyBsaWJmZmkuY2FsbC9yZXR1cm5fbGwuYyBsaWJmZmkuY2FsbC9zdHJ1Y3Q5LmMJXAogbGliZmZpLmNhbGwvcmV0dXJuX3NjLmMgbGliZmZpLmNhbGwvc3RydWN0Ny5jCQkJCVwKIGxpYmZmaS5jYWxsL2Nsc19hbGlnbl91aW50NjQuYyBsaWJmZmkuY2FsbC9jbHNfNGJ5dGUuYwkJCVwKLWxpYmZmaS5jYWxsL3N0cmxlbl93aW4zMi5jIGxpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jCQkJXAotbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMgbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYwkJCVwKLWxpYmZmaS5zcGVjaWFsL3NwZWNpYWwuZXhwIGxpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MJXAotbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oIGxpYi93cmFwcGVyLmV4cCBsaWIvdGFyZ2V0LWxpYnBhdGguZXhwCVwKK2xpYmZmaS5jYWxsL2Nsc182XzFfYnl0ZS5jCQkJXAorbGliZmZpLmNhbGwvY2xzXzdfMV9ieXRlLmMgbGliZmZpLmNhbGwvdW53aW5kdGVzdC5jYwkJCVwKK2xpYmZmaS5jYWxsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MJXAorbGliL3dyYXBwZXIuZXhwIGxpYi90YXJnZXQtbGlicGF0aC5leHAJXAogbGliL2xpYmZmaS5leHAgbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYwkJCQlcCiBsaWJmZmkuY2FsbC9jbHNfdWNoYXJfdmEuYyBsaWJmZmkuY2FsbC9jbHNfdWludF92YS5jCQkJXAogbGliZmZpLmNhbGwvY2xzX3Vsb25nX3ZhLmMgbGliZmZpLmNhbGwvY2xzX3VzaG9ydF92YS5jCQkJXAogbGliZmZpLmNhbGwvbmVzdGVkX3N0cnVjdDExLmMgbGliZmZpLmNhbGwvdW5pbml0aWFsaXplZC5jCQlcCiBsaWJmZmkuY2FsbC92YV8xLmMgbGliZmZpLmNhbGwvdmFfc3RydWN0MS5jIGxpYmZmaS5jYWxsL3ZhX3N0cnVjdDIuYwlcCi1saWJmZmkuY2FsbC92YV9zdHJ1Y3QzLmMKK2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDMuYyBcCitsaWJmZmkuY2FsbC9zdHJsZW4yLmMgXAorbGliZmZpLmNhbGwvc3RybGVuMy5jIFwKK2xpYmZmaS5jYWxsL3N0cmxlbjQuYwogCiBhbGw6IGFsbC1hbQogCkBAIC0zNDMsMTEgKzM4Niw5IEBACiAKIGNsZWFuLWxpYnRvb2w6CiAJLXJtIC1yZiAubGlicyBfbGlicwotdGFnczogVEFHUwotVEFHUzoKK3RhZ3MgVEFHUzoKIAotY3RhZ3M6IENUQUdTCi1DVEFHUzoKK2N0YWdzIENUQUdTOgogCiBjc2NvcGUgY3Njb3BlbGlzdDoKIApAQCAtMzU1LDEzICszOTYsMTIgQEAKIGNoZWNrLURFSkFHTlU6IHNpdGUuZXhwCiAJc3JjZGlyPSckKHNyY2RpciknOyBleHBvcnQgc3JjZGlyOyBcCiAJRVhQRUNUPSQoRVhQRUNUKTsgZXhwb3J0IEVYUEVDVDsgXAotCXJ1bnRlc3Q9JChSVU5URVNUKTsgXAotCWlmICQoU0hFTEwpIC1jICIkJHJ1bnRlc3QgLS12ZXJzaW9uIiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwlpZiAkKFNIRUxMKSAtYyAiJChSVU5URVNUKSAtLXZlcnNpb24iID4gL2Rldi9udWxsIDI+JjE7IHRoZW4gXAogCSAgZXhpdF9zdGF0dXM9MDsgbD0nJChERUpBVE9PTCknOyBmb3IgdG9vbCBpbiAkJGw7IGRvIFwKLQkgICAgaWYgJCRydW50ZXN0ICQoQU1fUlVOVEVTVEZMQUdTKSAkKFJVTlRFU1RERUZBVUxURkxBR1MpICQoUlVOVEVTVEZMQUdTKTsgXAorCSAgICBpZiAkKFJVTlRFU1QpICQoQU1fUlVOVEVTVEZMQUdTKSAkKFJVTlRFU1RERUZBVUxURkxBR1MpICQoUlVOVEVTVEZMQUdTKTsgXAogCSAgICB0aGVuIDo7IGVsc2UgZXhpdF9zdGF0dXM9MTsgZmk7IFwKIAkgIGRvbmU7IFwKLQllbHNlIGVjaG8gIldBUk5JTkc6IGNvdWxkIG5vdCBmaW5kICdydW50ZXN0JyIgMT4mMjsgOjtcCisJZWxzZSBlY2hvICJXQVJOSU5HOiBjb3VsZCBub3QgZmluZCAnJChSVU5URVNUKSciIDE+JjI7IDo7XAogCWZpOyBcCiAJZXhpdCAkJGV4aXRfc3RhdHVzCiBzaXRlLmV4cDogTWFrZWZpbGUgJChFWFRSQV9ERUpBR05VX1NJVEVfQ09ORklHKQpAQCAtNTMyLDE2ICs1NzIsMTcgQEAKIC5NQUtFOiBjaGVjay1hbSBpbnN0YWxsLWFtIGluc3RhbGwtc3RyaXAKIAogLlBIT05ZOiBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLURFSkFHTlUgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCi0JY2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4gZGlzdGNsZWFuLURFSkFHTlUgZGlzdGNsZWFuLWdlbmVyaWMgXAotCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKLQlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBcCi0JaW5zdGFsbC1kdmktYW0gaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgXAotCWluc3RhbGwtaHRtbC1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKLQlpbnN0YWxsLXBkZiBpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gXAotCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCi0JbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAotCW1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIFwKLQl1bmluc3RhbGwgdW5pbnN0YWxsLWFtCisJY2xlYW4tbGlidG9vbCBjc2NvcGVsaXN0LWFtIGN0YWdzLWFtIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLURFSkFHTlUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGRpciBcCisJZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBcCisJaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWR2aSBpbnN0YWxsLWR2aS1hbSBcCisJaW5zdGFsbC1leGVjIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1odG1sLWFtIFwKKwlpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtcGRmIFwKKwlpbnN0YWxsLXBkZi1hbSBpbnN0YWxsLXBzIGluc3RhbGwtcHMtYW0gaW5zdGFsbC1zdHJpcCBcCisJaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBtYWludGFpbmVyLWNsZWFuIFwKKwltYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gbW9zdGx5Y2xlYW4tZ2VuZXJpYyBcCisJbW9zdGx5Y2xlYW4tbGlidG9vbCBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MtYW0gdW5pbnN0YWxsIFwKKwl1bmluc3RhbGwtYW0KIAogCiAjIFRlbGwgdmVyc2lvbnMgWzMuNTksMy42Mykgb2YgR05VIG1ha2UgdG8gbm90IGV4cG9ydCBhbGwgdmFyaWFibGVzLgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliL2xpYmZmaS5leHAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvbGliZmZpLmV4cAppbmRleCAxYWMyYzM2Li5kYmRkMWEyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvbGliZmZpLmV4cAorKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWIvbGliZmZpLmV4cApAQCAtMjIyLDYgKzIyMiwxMCBAQAogCWxhcHBlbmQgb3B0aW9ucyAibGlicz0gLWxwdGhyZWFkIgogICAgIH0KIAorICAgIGlmIHsgW3N0cmluZyBtYXRjaCAiKi5jYyIgJHNvdXJjZV0gfSB7CisJbGFwcGVuZCBvcHRpb25zICJjKysiCisgICAgfQorCiAgICAgdmVyYm9zZSAib3B0aW9uczogJG9wdGlvbnMiCiAgICAgcmV0dXJuIFt0YXJnZXRfY29tcGlsZSAkc291cmNlICRkZXN0ICR0eXBlICRvcHRpb25zXQogfQpAQCAtMjczLDYgKzI3Nyw0NiBAQAogICAgIH0KIH0KIAorcHJvYyBydW4tbWFueS10ZXN0cyB7IHRlc3RjYXNlcyBleHRyYV9mbGFncyB9IHsKKyAgICBnbG9iYWwgdXNpbmdfZ2NjCisgICAgaWYgeyBbc3RyaW5nIG1hdGNoICR1c2luZ19nY2MgInllcyJdIH0geworICAgICAgICBzZXQgY29tbW9uICItVyAtV2FsbCIKKyAgICAgICAgc2V0IG9wdGltaXphdGlvbnMgeyAiLU8wIiAiLU8yIiAiLU8zIiAiLU9zIiAiLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIiB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgIyBBc3N1bWUgd2UgYXJlIHVzaW5nIHRoZSB2ZW5kb3IgY29tcGlsZXIuCisgICAgICAgIHNldCBjb21tb24gIiIKKyAgICAgICAgc2V0IG9wdGltaXphdGlvbnMgeyAiIiB9CisgICAgfQorCisgICAgc2V0IHRhcmdldGFiaXMgeyAiIiB9CisgICAgaWYgW3N0cmluZyBtYXRjaCAkdXNpbmdfZ2NjICJ5ZXMiXSB7CisgICAgICAgIGlmIFtpc3RhcmdldCAiaT84Ni0qLSoiXSB7CisgICAgICAgICAgICBzZXQgdGFyZ2V0YWJpcyB7CisgICAgICAgICAgICAgICAgIiIKKyAgICAgICAgICAgICAgICAiLURBQklfTlVNPUZGSV9TVERDQUxMIC1EQUJJX0FUVFI9X19TVERDQUxMX18iCisgICAgICAgICAgICAgICAgIi1EQUJJX05VTT1GRklfVEhJU0NBTEwgLURBQklfQVRUUj1fX1RISVNDQUxMX18iCisgICAgICAgICAgICAgICAgIi1EQUJJX05VTT1GRklfRkFTVENBTEwgLURBQklfQVRUUj1fX0ZBU1RDQUxMX18iCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzZXQgY29tbW9uIFsgY29uY2F0ICRjb21tb24gJGV4dHJhX2ZsYWdzIF0KKyAgICBmb3JlYWNoIHRlc3QgJHRlc3RjYXNlcyB7CisgICAgICAgIHNldCB0ZXN0bmFtZSBbZmlsZSB0YWlsICR0ZXN0XQorICAgICAgICBpZiBbc2VhcmNoX2ZvciAkdGVzdCAiQUJJX05VTSJdIHsKKyAgICAgICAgICAgIHNldCBhYmlzICR0YXJnZXRhYmlzCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzZXQgYWJpcyB7ICIiIH0KKyAgICAgICAgfQorICAgICAgICBmb3JlYWNoIG9wdCAkb3B0aW1pemF0aW9ucyB7CisgICAgICAgICAgICBmb3JlYWNoIGFiaSAkYWJpcyB7CisgICAgICAgICAgICAgICAgc2V0IG9wdGlvbnMgW2NvbmNhdCAkY29tbW9uICRvcHQgJGFiaV0KKyAgICAgICAgICAgICAgICB2ZXJib3NlICJUZXN0aW5nICR0ZXN0bmFtZSwgJG9wdGlvbnMiIDEKKyAgICAgICAgICAgICAgICBkZy10ZXN0ICR0ZXN0ICRvcHRpb25zICIiCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CiAKICMgTGlrZSBjaGVja19jb25kaXRpb25hbF94ZmFpbCwgYnV0IGNhbGxhYmxlIGZyb20gYSBkZyB0ZXN0LgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9hLm91dCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Eub3V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Eub3V0CisrKyAvZGV2L251bGwKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2NhbGwuZXhwIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHAKaW5kZXggYzMzNDY4NS4uMzZkMTNkOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHAKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2FsbC5leHAKQEAgLTE5LDIwICsxOSw3IEBACiAKIGdsb2JhbCBzcmNkaXIgc3ViZGlyCiAKLWlmIHsgW3N0cmluZyBtYXRjaCAkdXNpbmdfZ2NjICJ5ZXMiXSB9IHsKLQotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU8wIC1XIC1XYWxsIiAiIgotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU8yIiAiIgotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU8zIiAiIgotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU9zIiAiIgotICBkZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAkc3JjZGlyLyRzdWJkaXIvKi5cW2NTXF1dXSAiLU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIiAiIgotIAotfSBlbHNlIHsgCi0KLSAgIyBBc3N1bWUgd2UgYXJlIHVzaW5nIHRoZSB2ZW5kb3IgY29tcGlsZXIuCi0gIGRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWluICRzcmNkaXIvJHN1YmRpci8qLlxbY1NcXV1dICIiICIiCi0KLX0KK3J1bi1tYW55LXRlc3RzIFtsc29ydCBbZ2xvYiAtbm9jb21wbGFpbiAtLSAkc3JjZGlyLyRzdWJkaXIvKi57YyxjY31dXSAiIgogCiBkZy1maW5pc2gKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zaW1wbGUuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc2ltcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0ZTcyOAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc2ltcGxlLmMKQEAgLTAsMCArMSw1NSBAQAorLyogQXJlYToJY2xvc3VyZV9jYWxsCisgICBQdXJwb3NlOglDaGVjayBzaW1wbGUgY2xvc3VyZSBoYW5kbGluZyB3aXRoIGFsbCBBQklzCisgICBMaW1pdGF0aW9uczoJbm9uZS4KKyAgIFBSOgkJbm9uZS4KKyAgIE9yaWdpbmF0b3I6CTx0d2FsbGphdmFAZGV2LmphdmEubmV0PiAqLworCisvKiB7IGRnLWRvIHJ1biB9ICovCisjaW5jbHVkZSAiZmZpdGVzdC5oIgorCitzdGF0aWMgdm9pZAorY2xvc3VyZV90ZXN0KGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywgdm9pZCogdXNlcmRhdGEpCit7CisgICooZmZpX2FyZyopcmVzcCA9CisgICAgKGludCkqKGludCAqKWFyZ3NbMF0gKyAoaW50KSgqKGludCAqKWFyZ3NbMV0pCisgICAgKyAoaW50KSgqKGludCAqKWFyZ3NbMl0pICArIChpbnQpKCooaW50ICopYXJnc1szXSkKKyAgICArIChpbnQpKGludHB0cl90KXVzZXJkYXRhOworCisgIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkXG4iLAorCSAoaW50KSooaW50ICopYXJnc1swXSwgKGludCkoKihpbnQgKilhcmdzWzFdKSwKKwkgKGludCkoKihpbnQgKilhcmdzWzJdKSwgKGludCkoKihpbnQgKilhcmdzWzNdKSwKKyAgICAgICAgIChpbnQpKihmZmlfYXJnICopcmVzcCk7CisKK30KKwordHlwZWRlZiBpbnQgKEFCSV9BVFRSICpjbG9zdXJlX3Rlc3RfdHlwZTApKGludCwgaW50LCBpbnQsIGludCk7CisKK2ludCBtYWluICh2b2lkKQoreworICBmZmlfY2lmIGNpZjsKKyAgdm9pZCAqY29kZTsKKyAgZmZpX2Nsb3N1cmUgKnBjbCA9IGZmaV9jbG9zdXJlX2FsbG9jKHNpemVvZihmZmlfY2xvc3VyZSksICZjb2RlKTsKKyAgZmZpX3R5cGUgKiBjbF9hcmdfdHlwZXNbMTddOworICBpbnQgcmVzOworCisgIGNsX2FyZ190eXBlc1swXSA9ICZmZmlfdHlwZV91aW50OworICBjbF9hcmdfdHlwZXNbMV0gPSAmZmZpX3R5cGVfdWludDsKKyAgY2xfYXJnX3R5cGVzWzJdID0gJmZmaV90eXBlX3VpbnQ7CisgIGNsX2FyZ190eXBlc1szXSA9ICZmZmlfdHlwZV91aW50OworICBjbF9hcmdfdHlwZXNbNF0gPSBOVUxMOworCisgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgNCwKKwkJICAgICAmZmZpX3R5cGVfc2ludCwgY2xfYXJnX3R5cGVzKSA9PSBGRklfT0spOworCisgIENIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xvc3VyZV90ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAzIC8qIHVzZXJkYXRhICovLCBjb2RlKSA9PSBGRklfT0spOworCisgIHJlcyA9ICgqKGNsb3N1cmVfdGVzdF90eXBlMCljb2RlKSgwLCAxLCAyLCAzKTsKKyAgLyogeyBkZy1vdXRwdXQgIjAgMSAyIDM6IDkiIH0gKi8KKworICBwcmludGYoInJlczogJWRcbiIscmVzKTsKKyAgLyogeyBkZy1vdXRwdXQgIlxucmVzOiA5IiB9ICovCisKKyAgZXhpdCgwKTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfc3RkY2FsbC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE0MDdmMDIuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xvc3VyZV9zdGRjYWxsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKiBBcmVhOgljbG9zdXJlX2NhbGwgKHN0ZGNhbGwgY29udmVudGlvbikKLSAgIFB1cnBvc2U6CUNoZWNrIGhhbmRsaW5nIHdoZW4gY2FsbGVyIGV4cGVjdHMgc3RkY2FsbCBjYWxsZWUKLSAgIExpbWl0YXRpb25zOglub25lLgotICAgUFI6CQlub25lLgotICAgT3JpZ2luYXRvcjoJPHR3YWxsamF2YUBkZXYuamF2YS5uZXQ+ICovCi0KLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCi0jaW5jbHVkZSAiZmZpdGVzdC5oIgotCi1zdGF0aWMgdm9pZAotY2xvc3VyZV90ZXN0X3N0ZGNhbGwoZmZpX2NpZiogY2lmIF9fVU5VU0VEX18sIHZvaWQqIHJlc3AsIHZvaWQqKiBhcmdzLAotCQkgdm9pZCogdXNlcmRhdGEpCi17Ci0gICooZmZpX2FyZyopcmVzcCA9Ci0gICAgKGludCkqKGludCAqKWFyZ3NbMF0gKyAoaW50KSgqKGludCAqKWFyZ3NbMV0pCi0gICAgKyAoaW50KSgqKGludCAqKWFyZ3NbMl0pICArIChpbnQpKCooaW50ICopYXJnc1szXSkKLSAgICArIChpbnQpKGludHB0cl90KXVzZXJkYXRhOwotCi0gIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkXG4iLAotCSAoaW50KSooaW50ICopYXJnc1swXSwgKGludCkoKihpbnQgKilhcmdzWzFdKSwKLQkgKGludCkoKihpbnQgKilhcmdzWzJdKSwgKGludCkoKihpbnQgKilhcmdzWzNdKSwKLSAgICAgICAgIChpbnQpKihmZmlfYXJnICopcmVzcCk7Ci0KLX0KLQotdHlwZWRlZiBpbnQgKF9fc3RkY2FsbCAqY2xvc3VyZV90ZXN0X3R5cGUwKShpbnQsIGludCwgaW50LCBpbnQpOwotCi1pbnQgbWFpbiAodm9pZCkKLXsKLSAgZmZpX2NpZiBjaWY7Ci0gIHZvaWQgKmNvZGU7Ci0gIGZmaV9jbG9zdXJlICpwY2wgPSBmZmlfY2xvc3VyZV9hbGxvYyhzaXplb2YoZmZpX2Nsb3N1cmUpLCAmY29kZSk7Ci0gIGZmaV90eXBlICogY2xfYXJnX3R5cGVzWzE3XTsKLSAgaW50IHJlczsKLSAgdm9pZCogc3BfcHJlOwotICB2b2lkKiBzcF9wb3N0OwotICBjaGFyIGJ1ZlsxMDI0XTsKLQotICBjbF9hcmdfdHlwZXNbMF0gPSAmZmZpX3R5cGVfdWludDsKLSAgY2xfYXJnX3R5cGVzWzFdID0gJmZmaV90eXBlX3VpbnQ7Ci0gIGNsX2FyZ190eXBlc1syXSA9ICZmZmlfdHlwZV91aW50OwotICBjbF9hcmdfdHlwZXNbM10gPSAmZmZpX3R5cGVfdWludDsKLSAgY2xfYXJnX3R5cGVzWzRdID0gTlVMTDsKLQotICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9TVERDQUxMLCA0LAotCQkgICAgICZmZmlfdHlwZV9zaW50LCBjbF9hcmdfdHlwZXMpID09IEZGSV9PSyk7Ci0KLSAgQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbG9zdXJlX3Rlc3Rfc3RkY2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgPT0gRkZJX09LKTsKLQotI2lmZGVmIF9NU0NfVkVSCi0gIF9fYXNtIHsgbW92IHNwX3ByZSwgZXNwIH0KLSNlbHNlCi0gIGFzbSB2b2xhdGlsZSAoIiBtb3ZsICUlZXNwLCUwIiA6ICI9ZyIgKHNwX3ByZSkpOwotI2VuZGlmCi0gIHJlcyA9ICgqKGNsb3N1cmVfdGVzdF90eXBlMCljb2RlKSgwLCAxLCAyLCAzKTsKLSNpZmRlZiBfTVNDX1ZFUgotICBfX2FzbSB7IG1vdiBzcF9wb3N0LCBlc3AgfQotI2Vsc2UKLSAgYXNtIHZvbGF0aWxlICgiIG1vdmwgJSVlc3AsJTAiIDogIj1nIiAoc3BfcG9zdCkpOwotI2VuZGlmCi0gIC8qIHsgZGctb3V0cHV0ICIwIDEgMiAzOiA5IiB9ICovCi0KLSAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7Ci0gIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOSIgfSAqLwotCi0gIHNwcmludGYoYnVmLCAibWlzbWF0Y2g6IHByZT0lcCB2cyBwb3N0PSVwIiwgc3BfcHJlLCBzcF9wb3N0KTsKLSAgcHJpbnRmKCJzdGFjayBwb2ludGVyICVzXG4iLCAoc3BfcHJlID09IHNwX3Bvc3QgPyAibWF0Y2giIDogYnVmKSk7Ci0gIC8qIHsgZGctb3V0cHV0ICJcbnN0YWNrIHBvaW50ZXIgbWF0Y2giIH0gKi8KLSAgZXhpdCgwKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsb3N1cmVfdGhpc2NhbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGY5MzY0OS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbG9zdXJlX3RoaXNjYWxsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MiArMCwwIEBACi0vKiBBcmVhOgljbG9zdXJlX2NhbGwgKHRoaXNjYWxsIGNvbnZlbnRpb24pCi0gICBQdXJwb3NlOglDaGVjayBoYW5kbGluZyB3aGVuIGNhbGxlciBleHBlY3RzIHRoaXNjYWxsIGNhbGxlZQotICAgTGltaXRhdGlvbnM6CW5vbmUuCi0gICBQUjoJCW5vbmUuCi0gICBPcmlnaW5hdG9yOgk8a3RpZXR6QHJlZGhhdC5jb20+ICovCi0KLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCi0jaW5jbHVkZSAiZmZpdGVzdC5oIgotCi1zdGF0aWMgdm9pZAotY2xvc3VyZV90ZXN0X3RoaXNjYWxsKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwLCB2b2lkKiogYXJncywKLQkJICAgICAgdm9pZCogdXNlcmRhdGEpCi17Ci0gICooZmZpX2FyZyopcmVzcCA9Ci0gICAgKGludCkqKGludCAqKWFyZ3NbMF0gKyAoaW50KSgqKGludCAqKWFyZ3NbMV0pCi0gICAgKyAoaW50KSgqKGludCAqKWFyZ3NbMl0pICArIChpbnQpKCooaW50ICopYXJnc1szXSkKLSAgICArIChpbnQpKGludHB0cl90KXVzZXJkYXRhOwotCi0gIHByaW50ZigiJWQgJWQgJWQgJWQ6ICVkXG4iLAotCSAoaW50KSooaW50ICopYXJnc1swXSwgKGludCkoKihpbnQgKilhcmdzWzFdKSwKLQkgKGludCkoKihpbnQgKilhcmdzWzJdKSwgKGludCkoKihpbnQgKilhcmdzWzNdKSwKLSAgICAgICAgIChpbnQpKihmZmlfYXJnICopcmVzcCk7Ci0KLX0KLQotdHlwZWRlZiBpbnQgKF9fdGhpc2NhbGwgKmNsb3N1cmVfdGVzdF90eXBlMCkoaW50LCBpbnQsIGludCwgaW50KTsKLQotaW50IG1haW4gKHZvaWQpCi17Ci0gIGZmaV9jaWYgY2lmOwotICB2b2lkICpjb2RlOwotICBmZmlfY2xvc3VyZSAqcGNsID0gZmZpX2Nsb3N1cmVfYWxsb2Moc2l6ZW9mKGZmaV9jbG9zdXJlKSwgJmNvZGUpOwotICBmZmlfdHlwZSAqIGNsX2FyZ190eXBlc1sxN107Ci0gIGludCByZXM7Ci0gIHZvaWQqIHNwX3ByZTsKLSAgdm9pZCogc3BfcG9zdDsKLSAgY2hhciBidWZbMTAyNF07Ci0KLSAgY2xfYXJnX3R5cGVzWzBdID0gJmZmaV90eXBlX3VpbnQ7Ci0gIGNsX2FyZ190eXBlc1sxXSA9ICZmZmlfdHlwZV91aW50OwotICBjbF9hcmdfdHlwZXNbMl0gPSAmZmZpX3R5cGVfdWludDsKLSAgY2xfYXJnX3R5cGVzWzNdID0gJmZmaV90eXBlX3VpbnQ7Ci0gIGNsX2FyZ190eXBlc1s0XSA9IE5VTEw7Ci0KLSAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfVEhJU0NBTEwsIDQsCi0JCSAgICAgJmZmaV90eXBlX3NpbnQsIGNsX2FyZ190eXBlcykgPT0gRkZJX09LKTsKLQotICBDSEVDSyhmZmlfcHJlcF9jbG9zdXJlX2xvYyhwY2wsICZjaWYsIGNsb3N1cmVfdGVzdF90aGlzY2FsbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgMyAvKiB1c2VyZGF0YSAqLywgY29kZSkgPT0gRkZJX09LKTsKLQotI2lmZGVmIF9NU0NfVkVSCi0gIF9fYXNtIHsgbW92IHNwX3ByZSwgZXNwIH0KLSNlbHNlCi0gIGFzbSB2b2xhdGlsZSAoIiBtb3ZsICUlZXNwLCUwIiA6ICI9ZyIgKHNwX3ByZSkpOwotI2VuZGlmCi0gIHJlcyA9ICgqKGNsb3N1cmVfdGVzdF90eXBlMCljb2RlKSgwLCAxLCAyLCAzKTsKLSNpZmRlZiBfTVNDX1ZFUgotICBfX2FzbSB7IG1vdiBzcF9wb3N0LCBlc3AgfQotI2Vsc2UKLSAgYXNtIHZvbGF0aWxlICgiIG1vdmwgJSVlc3AsJTAiIDogIj1nIiAoc3BfcG9zdCkpOwotI2VuZGlmCi0gIC8qIHsgZGctb3V0cHV0ICIwIDEgMiAzOiA5IiB9ICovCi0KLSAgcHJpbnRmKCJyZXM6ICVkXG4iLHJlcyk7Ci0gIC8qIHsgZGctb3V0cHV0ICJcbnJlczogOSIgfSAqLwotCi0gIHNwcmludGYoYnVmLCAibWlzbWF0Y2g6IHByZT0lcCB2cyBwb3N0PSVwIiwgc3BfcHJlLCBzcF9wb3N0KTsKLSAgcHJpbnRmKCJzdGFjayBwb2ludGVyICVzXG4iLCAoc3BfcHJlID09IHNwX3Bvc3QgPyAibWF0Y2giIDogYnVmKSk7Ci0gIC8qIHsgZGctb3V0cHV0ICJcbnN0YWNrIHBvaW50ZXIgbWF0Y2giIH0gKi8KLSAgZXhpdCgwKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19kb3VibGVfdmEuYwppbmRleCA0MzE2N2I2Li5lMDc3ZjkyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfZG91YmxlX3ZhLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2RvdWJsZV92YS5jCkBAIC0zOCw3ICszOCw3IEBACiAKIAkvKiBUaGlzIHByaW50ZiBjYWxsIGlzIHZhcmlhZGljICovCiAJQ0hFQ0soZmZpX3ByZXBfY2lmX3ZhcigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsIDIsICZmZmlfdHlwZV9zaW50LAotCQlhcmdfdHlwZXMpID09IEZGSV9PSyk7CisJCQkgICAgICAgYXJnX3R5cGVzKSA9PSBGRklfT0spOwogCiAJYXJnc1swXSA9ICZmb3JtYXQ7CiAJYXJnc1sxXSA9ICZkb3VibGVBcmc7CkBAIC00OSwxMiArNDksMTAgQEAKIAlwcmludGYoInJlczogJWRcbiIsIChpbnQpIHJlcyk7CiAJLyogeyBkZy1vdXRwdXQgIlxucmVzOiA0IiB9ICovCiAKLQkvKiBUaGUgY2FsbCB0byBjbHNfZG91YmxlX3ZhX2ZuIGlzIHN0YXRpYywgc28gaGF2ZSB0byB1c2UgYSBub3JtYWwgcHJlcF9jaWYgKi8KLQlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmZmZpX3R5cGVfc2ludCwgYXJnX3R5cGVzKSA9PSBGRklfT0spOworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2RvdWJsZV92YV9mbiwgTlVMTCwKKwkJCQkgICBjb2RlKSA9PSBGRklfT0spOwogCi0JQ0hFQ0soZmZpX3ByZXBfY2xvc3VyZV9sb2MocGNsLCAmY2lmLCBjbHNfZG91YmxlX3ZhX2ZuLCBOVUxMLCBjb2RlKSA9PSBGRklfT0spOwotCi0JcmVzCT0gKChpbnQoKikoY2hhciosIGRvdWJsZSkpKGNvZGUpKShmb3JtYXQsIGRvdWJsZUFyZyk7CisJcmVzID0gKChpbnQoKikoY2hhciosIC4uLikpKGNvZGUpKShmb3JtYXQsIGRvdWJsZUFyZyk7CiAJLyogeyBkZy1vdXRwdXQgIlxuNy4wIiB9ICovCiAJcHJpbnRmKCJyZXM6ICVkXG4iLCAoaW50KSByZXMpOwogCS8qIHsgZGctb3V0cHV0ICJcbnJlczogNCIgfSAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19sb25nZG91YmxlX3ZhLmMKaW5kZXggNzEyNmIxMy4uMzliNDM4YiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX2xvbmdkb3VibGVfdmEuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfbG9uZ2RvdWJsZV92YS5jCkBAIC0zOCw3ICszOCw3IEBACiAKIAkvKiBUaGlzIHByaW50ZiBjYWxsIGlzIHZhcmlhZGljICovCiAJQ0hFQ0soZmZpX3ByZXBfY2lmX3ZhcigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsIDIsICZmZmlfdHlwZV9zaW50LAotCQlhcmdfdHlwZXMpID09IEZGSV9PSyk7CisJCQkgICAgICAgYXJnX3R5cGVzKSA9PSBGRklfT0spOwogCiAJYXJnc1swXSA9ICZmb3JtYXQ7CiAJYXJnc1sxXSA9ICZsZEFyZzsKQEAgLTQ5LDEzICs0OSwxMCBAQAogCXByaW50ZigicmVzOiAlZFxuIiwgKGludCkgcmVzKTsKIAkvKiB7IGRnLW91dHB1dCAiXG5yZXM6IDQiIH0gKi8KIAotCS8qIFRoZSBjYWxsIHRvIGNsc19sb25nZG91YmxlX3ZhX2ZuIGlzIHN0YXRpYywgc28gaGF2ZSB0byB1c2UgYSBub3JtYWwgcHJlcF9jaWYgKi8KLQlDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAyLCAmZmZpX3R5cGVfc2ludCwKLQkJYXJnX3R5cGVzKSA9PSBGRklfT0spOworCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2xvbmdkb3VibGVfdmFfZm4sIE5VTEwsCisJCQkJICAgY29kZSkgPT0gRkZJX09LKTsKIAotCUNIRUNLKGZmaV9wcmVwX2Nsb3N1cmVfbG9jKHBjbCwgJmNpZiwgY2xzX2xvbmdkb3VibGVfdmFfZm4sIE5VTEwsIGNvZGUpID09IEZGSV9PSyk7Ci0KLQlyZXMJPSAoKGludCgqKShjaGFyKiwgbG9uZyBkb3VibGUpKShjb2RlKSkoZm9ybWF0LCBsZEFyZyk7CisJcmVzID0gKChpbnQoKikoY2hhciosIC4uLikpKGNvZGUpKShmb3JtYXQsIGxkQXJnKTsKIAkvKiB7IGRnLW91dHB1dCAiXG43LjAiIH0gKi8KIAlwcmludGYoInJlczogJWRcbiIsIChpbnQpIHJlcyk7CiAJLyogeyBkZy1vdXRwdXQgIlxucmVzOiA0IiB9ICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3N0cnVjdF92YTEuYwppbmRleCAxNzVlZDk2Li42ZDFmZGFlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfc3RydWN0X3ZhMS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc19zdHJ1Y3RfdmExLmMKQEAgLTM1LDcgKzM1LDcgQEAKICAgcHJpbnRmICgiJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWQgJWRcbiIsIG4sIHMxLmEsIHMxLmIsCiAJICBsMS5hLCBsMS5iLCBsMS5jLCBsMS5kLCBsMS5lLAogCSAgczIuYSwgczIuYik7Ci0gICogKGludCopIHJlc3AgPSA0MjsKKyAgKiAoZmZpX2FyZyopIHJlc3AgPSA0MjsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludF92YS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvY2xzX3VpbnRfdmEuYwppbmRleCAxNTBmZGRkLi5iMDRjZmQxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9jbHNfdWludF92YS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Nsc191aW50X3ZhLmMKQEAgLTEzLDkgKzEzLDkgQEAKIHN0YXRpYyB2b2lkIGNsc19yZXRfVF9mbihmZmlfY2lmKiBjaWYgX19VTlVTRURfXywgdm9pZCogcmVzcCwgdm9pZCoqIGFyZ3MsCiAJCQkgdm9pZCogdXNlcmRhdGEgX19VTlVTRURfXykKICB7Ci0gICAqKFQgKilyZXNwID0gKihUICopYXJnc1swXTsKKyAgICooZmZpX2FyZyAqKXJlc3AgPSAqKFQgKilhcmdzWzBdOwogCi0gICBwcmludGYoIiVkOiAlZCAlZFxuIiwgKihUICopcmVzcCwgKihUICopYXJnc1swXSwgKihUICopYXJnc1sxXSk7CisgICBwcmludGYoIiVkOiAlZCAlZFxuIiwgKGludCkqKGZmaV9hcmcgKilyZXNwLCAqKFQgKilhcmdzWzBdLCAqKFQgKilhcmdzWzFdKTsKICB9CiAKIHR5cGVkZWYgVCAoKmNsc19yZXRfVCkoVCwgLi4uKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaCBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2ZmaXRlc3QuaAppbmRleCAxMzZhN2E2Li4xNWQ1ZTQ0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mZml0ZXN0LmgKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmZpdGVzdC5oCkBAIC0xNSwyMiArMTUsMjUgQEAKIAogI2RlZmluZSBNQVhfQVJHUyAyNTYKIAotI2RlZmluZSBDSEVDSyh4KSAhKHgpID8gKGFib3J0KCksIDEpIDogMAorI2RlZmluZSBDSEVDSyh4KSAodm9pZCkoISh4KSA/IChhYm9ydCgpLCAxKSA6IDApCiAKLS8qIERlZmluZSBfX1VOVVNFRF9fIHRoYXQgYWxzbyBvdGhlciBjb21waWxlcnMgdGhhbiBnY2MgY2FuIHJ1biB0aGUgdGVzdHMuICAqLworLyogRGVmaW5lIG1hY3JvcyBzbyB0aGF0IGNvbXBpbGVycyBvdGhlciB0aGFuIGdjYyBjYW4gcnVuIHRoZSB0ZXN0cy4gICovCiAjdW5kZWYgX19VTlVTRURfXwogI2lmIGRlZmluZWQoX19HTlVDX18pCiAjZGVmaW5lIF9fVU5VU0VEX18gX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjZGVmaW5lIF9fU1REQ0FMTF9fIF9fYXR0cmlidXRlX18oKHN0ZGNhbGwpKQorI2RlZmluZSBfX1RISVNDQUxMX18gX19hdHRyaWJ1dGVfXygodGhpc2NhbGwpKQorI2RlZmluZSBfX0ZBU1RDQUxMX18gX19hdHRyaWJ1dGVfXygoZmFzdGNhbGwpKQogI2Vsc2UKICNkZWZpbmUgX19VTlVTRURfXworI2RlZmluZSBfX1NURENBTExfXyBfX3N0ZGNhbGwKKyNkZWZpbmUgX19USElTQ0FMTF9fIF9fdGhpc2NhbGwKKyNkZWZpbmUgX19GQVNUQ0FMTF9fIF9fZmFzdGNhbGwKICNlbmRpZgogCi0vKiBEZWZpbmUgX19GQVNUQ0FMTF9fIHNvIHRoYXQgb3RoZXIgY29tcGlsZXJzIHRoYW4gZ2NjIGNhbiBydW4gdGhlIHRlc3RzLiAgKi8KLSN1bmRlZiBfX0ZBU1RDQUxMX18KLSNpZiBkZWZpbmVkIF9NU0NfVkVSCi0jZGVmaW5lIF9fRkFTVENBTExfXyBfX2Zhc3RjYWxsCi0jZWxzZQotI2RlZmluZSBfX0ZBU1RDQUxMX18gX19hdHRyaWJ1dGVfXygoZmFzdGNhbGwpKQorI2lmbmRlZiBBQklfTlVNCisjZGVmaW5lIEFCSV9OVU0gRkZJX0RFRkFVTFRfQUJJCisjZGVmaW5lIEFCSV9BVFRSCiAjZW5kaWYKIAogLyogUHJlZmVyIE1BUF9BTk9OKFlNT1VTKSB0byAvZGV2L3plcm8sIHNpbmNlIHdlIGRvbid0IG5lZWQgdG8ga2VlcCBhCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55LmMKaW5kZXggNDg2OWJhOS4uMzM2OTY4YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkuYwpAQCAtNywyMSArNywxMSBAQAogLyogeyBkZy1kbyBydW4gfSAqLwogI2luY2x1ZGUgImZmaXRlc3QuaCIKIAorI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPGZsb2F0Lmg+CisjaW5jbHVkZSA8bWF0aC5oPgogCi1zdGF0aWMgZmxvYXQgbWFueShmbG9hdCBmMSwKLQkJICBmbG9hdCBmMiwKLQkJICBmbG9hdCBmMywKLQkJICBmbG9hdCBmNCwKLQkJICBmbG9hdCBmNSwKLQkJICBmbG9hdCBmNiwKLQkJICBmbG9hdCBmNywKLQkJICBmbG9hdCBmOCwKLQkJICBmbG9hdCBmOSwKLQkJICBmbG9hdCBmMTAsCi0JCSAgZmxvYXQgZjExLAotCQkgIGZsb2F0IGYxMiwKLQkJICBmbG9hdCBmMTMpCitzdGF0aWMgZmxvYXQgQUJJX0FUVFIgbWFueShmbG9hdCBmMSwgZmxvYXQgZjIsIGZsb2F0IGYzLCBmbG9hdCBmNCwgZmxvYXQgZjUsIGZsb2F0IGY2LCBmbG9hdCBmNywgZmxvYXQgZjgsIGZsb2F0IGY5LCBmbG9hdCBmMTAsIGZsb2F0IGYxMSwgZmxvYXQgZjEyLCBmbG9hdCBmMTMpCiB7CiAjaWYgMAogICBwcmludGYoIiVmICVmICVmICVmICVmICVmICVmICVmICVmICVmICVmICVmICVmXG4iLApAQCAtMzAsNyArMjAsNyBAQAogCSAoZG91YmxlKSBmMTEsIChkb3VibGUpIGYxMiwgKGRvdWJsZSkgZjEzKTsKICNlbmRpZgogCi0gIHJldHVybiAoKGYxL2YyK2YzL2Y0K2Y1L2Y2K2Y3L2Y4K2Y5L2YxMCtmMTEvZjEyKSAqIGYxMyk7CisgIHJldHVybiBmMStmMitmMytmNCtmNStmNitmNytmOCtmOStmMTArZjExK2YxMitmMTM7CiB9CiAKIGludCBtYWluICh2b2lkKQpAQCAtNTAsNyArNDAsNyBAQAogICAgIH0KIAogICAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICAgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEzLCAKKyAgICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMTMsCiAJCSAgICAgICAmZmZpX3R5cGVfZmxvYXQsIGFyZ3MpID09IEZGSV9PSyk7CiAKICAgICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obWFueSksICZmLCB2YWx1ZXMpOwpAQCAtNjIsNyArNTIsNyBAQAogCSAgICAgICBmYVs4XSwgZmFbOV0sCiAJICAgICAgIGZhWzEwXSxmYVsxMV0sZmFbMTJdKTsKIAotICAgIGlmIChmIC0gZmYgPCBGTFRfRVBTSUxPTikKKyAgICBpZiAoZmFicyhmIC0gZmYpIDwgRkxUX0VQU0lMT04pCiAgICAgICBleGl0KDApOwogICAgIGVsc2UKICAgICAgIGFib3J0KCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Mi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTIuYwppbmRleCA5OGVhYzYwLi4xYzg1NzQ2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Mi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL21hbnkyLmMKQEAgLTIyLDcgKzIyLDcgQEAKICAgcmV0dXJuIGEgKyBiICsgYyArIGQgKyBlICsgZiArIGc7CiB9CiAKLXVpbnQ4X3QKK3VpbnQ4X3QgQUJJX0FUVFIKIGJhciAodWludDhfdCBhLCB1aW50OF90IGIsIHVpbnQ4X3QgYywgdWludDhfdCBkLAogICAgICB1aW50OF90IGUsIHVpbnQ4X3QgZiwgdWludDhfdCBnKQogewpAQCAtNDIsNyArNDIsNyBAQAogICBmb3IgKGkgPSAwOyBpIDwgTkFSR1M7ICsraSkKICAgICBmZml0eXBlc1tpXSA9ICZmZmlfdHlwZV91aW50ODsKIAotICBDSEVDSyAoZmZpX3ByZXBfY2lmICgmY2lmLCBGRklfREVGQVVMVF9BQkksIE5BUkdTLAorICBDSEVDSyAoZmZpX3ByZXBfY2lmICgmY2lmLCBBQklfTlVNLCBOQVJHUywKIAkJICAgICAgICZmZmlfdHlwZV91aW50OCwgZmZpdHlwZXMpID09IEZGSV9PSyk7CiAKICAgZm9yIChpID0gMDsgaSA8IE5BUkdTOyArK2kpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Ml93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueTJfd2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFkYmU0ZC4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55Ml93aW4zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogQXJlYToJZmZpX2NhbGwKLSAgIFB1cnBvc2U6CUNoZWNrIHN0ZGNhbGwgbWFueSBjYWxsIG9uIFg4Nl9XSU4zMiBzeXN0ZW1zLgotICAgTGltaXRhdGlvbnM6CW5vbmUuCi0gICBQUjoJCW5vbmUuCi0gICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCi0KLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCi0KLSNpbmNsdWRlICJmZml0ZXN0LmgiCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotc3RhdGljIGZsb2F0IF9fYXR0cmlidXRlX18oKGZhc3RjYWxsKSkgZmFzdGNhbGxfbWFueShmbG9hdCBmMSwKLQkJCQkJCSAgIGZsb2F0IGYyLAotCQkJCQkJICAgZmxvYXQgZjMsCi0JCQkJCQkgICBmbG9hdCBmNCwKLQkJCQkJCSAgIGZsb2F0IGY1LAotCQkJCQkJICAgZmxvYXQgZjYsCi0JCQkJCQkgICBmbG9hdCBmNywKLQkJCQkJCSAgIGZsb2F0IGY4LAotCQkJCQkJICAgZmxvYXQgZjksCi0JCQkJCQkgICBmbG9hdCBmMTAsCi0JCQkJCQkgICBmbG9hdCBmMTEsCi0JCQkJCQkgICBmbG9hdCBmMTIsCi0JCQkJCQkgICBmbG9hdCBmMTMpCi17Ci0gIHJldHVybiAoKGYxL2YyK2YzL2Y0K2Y1L2Y2K2Y3L2Y4K2Y5L2YxMCtmMTEvZjEyKSAqIGYxMyk7Ci19Ci0KLWludCBtYWluICh2b2lkKQotewotICBmZmlfY2lmIGNpZjsKLSAgZmZpX3R5cGUgKmFyZ3NbMTNdOwotICB2b2lkICp2YWx1ZXNbMTNdOwotICBmbG9hdCBmYVsxM107Ci0gIGZsb2F0IGYsIGZmOwotICB1bnNpZ25lZCBsb25nIHVsOwotCi0gIGZvciAodWwgPSAwOyB1bCA8IDEzOyB1bCsrKQotICAgIHsKLSAgICAgIGFyZ3NbdWxdID0gJmZmaV90eXBlX2Zsb2F0OwotICAgICAgdmFsdWVzW3VsXSA9ICZmYVt1bF07Ci0JZmFbdWxdID0gKGZsb2F0KSB1bDsKLSAgICB9Ci0KLSAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfRkFTVENBTEwsIDEzLAotCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKLQotICBmZiA9ICBmYXN0Y2FsbF9tYW55KGZhWzBdLCBmYVsxXSwKLQkJICAgICBmYVsyXSwgZmFbM10sCi0JCSAgICAgZmFbNF0sIGZhWzVdLAotCQkgICAgIGZhWzZdLCBmYVs3XSwKLQkJICAgICBmYVs4XSwgZmFbOV0sCi0JCSAgICAgZmFbMTBdLCBmYVsxMV0sIGZhWzEyXSk7Ci0KLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKGZhc3RjYWxsX21hbnkpLCAmZiwgdmFsdWVzKTsKLQotICBpZiAoZiAtIGZmIDwgRkxUX0VQU0lMT04pCi0gICAgcHJpbnRmKCJmYXN0Y2FsbCBtYW55IGFyZyB0ZXN0cyBvayFcbiIpOwotICBlbHNlCi0gICAgQ0hFQ0soMCk7Ci0gIGV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9tYW55X3dpbjMyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMjYzMzIuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvbWFueV93aW4zMi5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogQXJlYToJZmZpX2NhbGwKLSAgIFB1cnBvc2U6CUNoZWNrIHN0ZGNhbGwgbWFueSBjYWxsIG9uIFg4Nl9XSU4zMiBzeXN0ZW1zLgotICAgTGltaXRhdGlvbnM6CW5vbmUuCi0gICBQUjoJCW5vbmUuCi0gICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCi0KLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCi0KLSNpbmNsdWRlICJmZml0ZXN0LmgiCi0jaW5jbHVkZSA8ZmxvYXQuaD4KLQotc3RhdGljIGZsb2F0IF9fYXR0cmlidXRlX18oKHN0ZGNhbGwpKSBzdGRjYWxsX21hbnkoZmxvYXQgZjEsCi0JCQkJCQkgICBmbG9hdCBmMiwKLQkJCQkJCSAgIGZsb2F0IGYzLAotCQkJCQkJICAgZmxvYXQgZjQsCi0JCQkJCQkgICBmbG9hdCBmNSwKLQkJCQkJCSAgIGZsb2F0IGY2LAotCQkJCQkJICAgZmxvYXQgZjcsCi0JCQkJCQkgICBmbG9hdCBmOCwKLQkJCQkJCSAgIGZsb2F0IGY5LAotCQkJCQkJICAgZmxvYXQgZjEwLAotCQkJCQkJICAgZmxvYXQgZjExLAotCQkJCQkJICAgZmxvYXQgZjEyLAotCQkJCQkJICAgZmxvYXQgZjEzKQotewotICByZXR1cm4gKChmMS9mMitmMy9mNCtmNS9mNitmNy9mOCtmOS9mMTArZjExL2YxMikgKiBmMTMpOwotfQotCi1pbnQgbWFpbiAodm9pZCkKLXsKLSAgZmZpX2NpZiBjaWY7Ci0gIGZmaV90eXBlICphcmdzWzEzXTsKLSAgdm9pZCAqdmFsdWVzWzEzXTsKLSAgZmxvYXQgZmFbMTNdOwotICBmbG9hdCBmLCBmZjsKLSAgdW5zaWduZWQgbG9uZyB1bDsKLQotICBmb3IgKHVsID0gMDsgdWwgPCAxMzsgdWwrKykKLSAgICB7Ci0gICAgICBhcmdzW3VsXSA9ICZmZmlfdHlwZV9mbG9hdDsKLSAgICAgIHZhbHVlc1t1bF0gPSAmZmFbdWxdOwotCWZhW3VsXSA9IChmbG9hdCkgdWw7Ci0gICAgfQotCi0gIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX1NURENBTEwsIDEzLAotCQkgICAgICZmZmlfdHlwZV9mbG9hdCwgYXJncykgPT0gRkZJX09LKTsKLQotICBmZiA9ICBzdGRjYWxsX21hbnkoZmFbMF0sIGZhWzFdLAotCQkgICAgIGZhWzJdLCBmYVszXSwKLQkJICAgICBmYVs0XSwgZmFbNV0sCi0JCSAgICAgZmFbNl0sIGZhWzddLAotCQkgICAgIGZhWzhdLCBmYVs5XSwKLQkJICAgICBmYVsxMF0sIGZhWzExXSwgZmFbMTJdKTsKLQotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4oc3RkY2FsbF9tYW55KSwgJmYsIHZhbHVlcyk7Ci0KLSAgaWYgKGYgLSBmZiA8IEZMVF9FUFNJTE9OKQotICAgIHByaW50Zigic3RkY2FsbCBtYW55IGFyZyB0ZXN0cyBvayFcbiIpOwotICBlbHNlCi0gICAgQ0hFQ0soMCk7Ci0gIGV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9uZXN0ZWRfc3RydWN0MTEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMS5jCmluZGV4IGZjZTY5NDguLjM1MTA0OTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL25lc3RlZF9zdHJ1Y3QxMS5jCkBAIC0xLDcgKzEsNyBAQAogLyogQXJlYToJZmZpX2NhbGwsIGNsb3N1cmVfY2FsbAogICAgUHVycG9zZToJQ2hlY2sgcGFyYW1ldGVyIHBhc3Npbmcgd2l0aCBuZXN0ZWQgc3RydWN0cwogCQlvZiBhIHNpbmdsZSB0eXBlLiAgVGhpcyB0ZXN0cyB0aGUgc3BlY2lhbCBjYXNlcwotCQlmb3IgaG9tb2dlbm91cyBmbG9hdGluZy1wb2ludCBhZ2dyZWdhdGVzIGluIHRoZQorCQlmb3IgaG9tb2dlbmVvdXMgZmxvYXRpbmctcG9pbnQgYWdncmVnYXRlcyBpbiB0aGUKIAkJQUFyY2g2NCBQQ1MuCiAgICBMaW1pdGF0aW9uczoJbm9uZS4KICAgIFBSOgkJbm9uZS4KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmMKaW5kZXggM2RlNDVkZS4uMzViNzBlYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuLmMKQEAgLTcsNyArNyw3IEBACiAvKiB7IGRnLWRvIHJ1biB9ICovCiAjaW5jbHVkZSAiZmZpdGVzdC5oIgogCi1zdGF0aWMgc2l6ZV90IG15X3N0cmxlbihjaGFyICpzKQorc3RhdGljIHNpemVfdCBBQklfQVRUUiBteV9zdHJsZW4oY2hhciAqcykKIHsKICAgcmV0dXJuIChzdHJsZW4ocykpOwogfQpAQCAtMjQsNyArMjQsNyBAQAogICB2YWx1ZXNbMF0gPSAodm9pZCopICZzOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsIAorICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMSwKIAkJICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHMgPSAiYSI7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjIuYwpzaW1pbGFyaXR5IGluZGV4IDYwJQpyZW5hbWUgZnJvbSBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczFfd2luMzIuYwpyZW5hbWUgdG8gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuMi5jCmluZGV4IGNiYzQ3MjQuLjk2MjgyYmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzMV93aW4zMi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjIuYwpAQCAtMSwxNCArMSwxNCBAQAogLyogQXJlYToJZmZpX2NhbGwKLSAgIFB1cnBvc2U6CUNoZWNrIGZhc3RjYWxsIGZjdCBjYWxsIG9uIFg4Nl9XSU4zMiBzeXN0ZW1zLgorICAgUHVycG9zZToJQ2hlY2sgc3RybGVuIGZ1bmN0aW9uIGNhbGwgd2l0aCBhZGRpdGlvbmFsIGFyZ3VtZW50cy4KICAgIExpbWl0YXRpb25zOglub25lLgogICAgUFI6CQlub25lLgogICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLwogCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLworLyogeyBkZy1kbyBydW4gfSAqLwogCiAjaW5jbHVkZSAiZmZpdGVzdC5oIgogCi1zdGF0aWMgc2l6ZV90IF9fRkFTVENBTExfXyBteV9mYXN0Y2FsbF9mKGNoYXIgKnMsIGZsb2F0IGEpCitzdGF0aWMgc2l6ZV90IEFCSV9BVFRSIG15X2YoY2hhciAqcywgZmxvYXQgYSkKIHsKICAgcmV0dXJuIChzaXplX3QpICgoaW50KSBzdHJsZW4ocykgKyAoaW50KSBhKTsKIH0KQEAgLTI3LDI0ICsyNywyMyBAQAogICB2YWx1ZXNbMV0gPSAodm9pZCopICZ2MjsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0ZBU1RDQUxMLCAyLAorICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMiwKIAkJICAgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgcyA9ICJhIjsKICAgdjIgPSAwLjA7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9mKSwgJnJpbnQsIHZhbHVlcyk7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mKSwgJnJpbnQsIHZhbHVlcyk7CiAgIENIRUNLKHJpbnQgPT0gMSk7CiAgIAogICBzID0gIjEyMzQ1NjciOwogICB2MiA9IC0xLjA7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9mKSwgJnJpbnQsIHZhbHVlcyk7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mKSwgJnJpbnQsIHZhbHVlcyk7CiAgIENIRUNLKHJpbnQgPT0gNik7CiAgIAogICBzID0gIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiOwogICB2MiA9IDEuMDsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2Zhc3RjYWxsX2YpLCAmcmludCwgdmFsdWVzKTsKKyAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X2YpLCAmcmludCwgdmFsdWVzKTsKICAgQ0hFQ0socmludCA9PSAyNik7CiAgIAotICBwcmludGYoImZhc3RjYWxsIGZjdDEgdGVzdHMgcGFzc2VkXG4iKTsKICAgZXhpdCgwKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjJfd2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ4MTA2MS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4yX3dpbjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0vKiBBcmVhOglmZmlfY2FsbAotICAgUHVycG9zZToJQ2hlY2sgZmFzdGNhbGwgc3RybGVuIGNhbGwgb24gWDg2X1dJTjMyIHN5c3RlbXMuCi0gICBMaW1pdGF0aW9uczoJbm9uZS4KLSAgIFBSOgkJbm9uZS4KLSAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KLQotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KLQotI2luY2x1ZGUgImZmaXRlc3QuaCIKLQotc3RhdGljIHNpemVfdCBfX0ZBU1RDQUxMX18gbXlfZmFzdGNhbGxfc3RybGVuKGNoYXIgKnMpCi17Ci0gIHJldHVybiAoc3RybGVuKHMpKTsKLX0KLQotaW50IG1haW4gKHZvaWQpCi17Ci0gIGZmaV9jaWYgY2lmOwotICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107Ci0gIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107Ci0gIGZmaV9hcmcgcmludDsKLSAgY2hhciAqczsKLSAgYXJnc1swXSA9ICZmZmlfdHlwZV9wb2ludGVyOwotICB2YWx1ZXNbMF0gPSAodm9pZCopICZzOwotICAKLSAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfRkFTVENBTEwsIDEsCi0JCSAgICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKLSAgCi0gIHMgPSAiYSI7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKLSAgQ0hFQ0socmludCA9PSAxKTsKLSAgCi0gIHMgPSAiMTIzNDU2NyI7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKLSAgQ0hFQ0socmludCA9PSA3KTsKLSAgCi0gIHMgPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSI7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKLSAgQ0hFQ0socmludCA9PSAyNSk7Ci0gIAotICBwcmludGYoImZhc3RjYWxsIHN0cmxlbiB0ZXN0cyBwYXNzZWRcbiIpOwotICBleGl0KDApOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4zLmMKc2ltaWxhcml0eSBpbmRleCA2MCUKcmVuYW1lIGZyb20gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvZmFzdHRoaXMyX3dpbjMyLmMKcmVuYW1lIHRvIE1vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjMuYwppbmRleCA3YmRkMGUxLi5iZWJhODZlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczJfd2luMzIuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW4zLmMKQEAgLTEsMTQgKzEsMTQgQEAKIC8qIEFyZWE6CWZmaV9jYWxsCi0gICBQdXJwb3NlOglDaGVjayBmYXN0Y2FsbCBmY3QgY2FsbCBvbiBYODZfV0lOMzIgc3lzdGVtcy4KKyAgIFB1cnBvc2U6CUNoZWNrIHN0cmxlbiBmdW5jdGlvbiBjYWxsIHdpdGggYWRkaXRpb25hbCBhcmd1bWVudHMuCiAgICBMaW1pdGF0aW9uczoJbm9uZS4KICAgIFBSOgkJbm9uZS4KICAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KIAotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KKy8qIHsgZGctZG8gcnVuIH0gKi8KIAogI2luY2x1ZGUgImZmaXRlc3QuaCIKIAotc3RhdGljIHNpemVfdCBfX0ZBU1RDQUxMX18gbXlfZmFzdGNhbGxfZihmbG9hdCBhLCBjaGFyICpzKQorc3RhdGljIHNpemVfdCBBQklfQVRUUiBteV9mKGZsb2F0IGEsIGNoYXIgKnMpCiB7CiAgIHJldHVybiAoc2l6ZV90KSAoKGludCkgc3RybGVuKHMpICsgKGludCkgYSk7CiB9CkBAIC0yNywyNCArMjcsMjMgQEAKICAgdmFsdWVzWzBdID0gKHZvaWQqKSAmdjI7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9GQVNUQ0FMTCwgMiwKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDIsCiAJCSAgICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHMgPSAiYSI7CiAgIHYyID0gMC4wOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfZiksICZyaW50LCB2YWx1ZXMpOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZiksICZyaW50LCB2YWx1ZXMpOwogICBDSEVDSyhyaW50ID09IDEpOwogICAKICAgcyA9ICIxMjM0NTY3IjsKICAgdjIgPSAtMS4wOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfZiksICZyaW50LCB2YWx1ZXMpOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZiksICZyaW50LCB2YWx1ZXMpOwogICBDSEVDSyhyaW50ID09IDYpOwogICAKICAgcyA9ICIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1IjsKICAgdjIgPSAxLjA7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9mKSwgJnJpbnQsIHZhbHVlcyk7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mKSwgJnJpbnQsIHZhbHVlcyk7CiAgIENIRUNLKHJpbnQgPT0gMjYpOwogICAKLSAgcHJpbnRmKCJmYXN0Y2FsbCBmY3QyIHRlc3RzIHBhc3NlZFxuIik7CiAgIGV4aXQoMCk7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjQuYwpzaW1pbGFyaXR5IGluZGV4IDYzJQpyZW5hbWUgZnJvbSBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9mYXN0dGhpczNfd2luMzIuYwpyZW5hbWUgdG8gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuNC5jCmluZGV4IGI1ZDYwNmQuLmQ1ZDQyYjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL2Zhc3R0aGlzM193aW4zMi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cmxlbjQuYwpAQCAtMSwxNCArMSwxNCBAQAogLyogQXJlYToJZmZpX2NhbGwKLSAgIFB1cnBvc2U6CUNoZWNrIGZhc3RjYWxsIGYgY2FsbCBvbiBYODZfV0lOMzIgc3lzdGVtcy4KKyAgIFB1cnBvc2U6CUNoZWNrIHN0cmxlbiBmdW5jdGlvbiBjYWxsIHdpdGggYWRkaXRpb25hbCBhcmd1bWVudHMuCiAgICBMaW1pdGF0aW9uczoJbm9uZS4KICAgIFBSOgkJbm9uZS4KICAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KIAotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KKy8qIHsgZGctZG8gcnVuIH0gKi8KIAogI2luY2x1ZGUgImZmaXRlc3QuaCIKIAotc3RhdGljIHNpemVfdCBfX0ZBU1RDQUxMX18gbXlfZmFzdGNhbGxfZihmbG9hdCBhLCBjaGFyICpzLCBpbnQgaSkKK3N0YXRpYyBzaXplX3QgQUJJX0FUVFIgbXlfZihmbG9hdCBhLCBjaGFyICpzLCBpbnQgaSkKIHsKICAgcmV0dXJuIChzaXplX3QpICgoaW50KSBzdHJsZW4ocykgKyAoaW50KSBhICsgaSk7CiB9CkBAIC0zMCwyNyArMzAsMjYgQEAKICAgdmFsdWVzWzBdID0gKHZvaWQqKSAmdjI7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9GQVNUQ0FMTCwgMywKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDMsCiAJCSAgICAgICAmZmZpX3R5cGVfc2ludCwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHMgPSAiYSI7CiAgIHYxID0gMTsKICAgdjIgPSAwLjA7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9mKSwgJnJpbnQsIHZhbHVlcyk7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mKSwgJnJpbnQsIHZhbHVlcyk7CiAgIENIRUNLKHJpbnQgPT0gMik7CiAgIAogICBzID0gIjEyMzQ1NjciOwogICB2MiA9IC0xLjA7CiAgIHYxID0gLTI7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mYXN0Y2FsbF9mKSwgJnJpbnQsIHZhbHVlcyk7CisgIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9mKSwgJnJpbnQsIHZhbHVlcyk7CiAgIENIRUNLKHJpbnQgPT0gNCk7CiAgIAogICBzID0gIjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUiOwogICB2MiA9IDEuMDsKICAgdjEgPSAyOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZmFzdGNhbGxfZiksICZyaW50LCB2YWx1ZXMpOworICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfZiksICZyaW50LCB2YWx1ZXMpOwogICBDSEVDSyhyaW50ID09IDI4KTsKICAgCi0gIHByaW50ZigiZmFzdGNhbGwgZmN0MyB0ZXN0cyBwYXNzZWRcbiIpOwogICBleGl0KDApOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RybGVuX3dpbjMyLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZiY2M4Ny4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJsZW5fd2luMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDQ0ICswLDAgQEAKLS8qIEFyZWE6CWZmaV9jYWxsCi0gICBQdXJwb3NlOglDaGVjayBzdGRjYWxsIHN0cmxlbiBjYWxsIG9uIFg4Nl9XSU4zMiBzeXN0ZW1zLgotICAgTGltaXRhdGlvbnM6CW5vbmUuCi0gICBQUjoJCW5vbmUuCi0gICBPcmlnaW5hdG9yOglGcm9tIHRoZSBvcmlnaW5hbCBmZml0ZXN0LmMgICovCi0KLS8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGk/ODYtKi1jeWd3aW4qIGk/ODYtKi1taW5ndyogfSB9ICovCi0KLSNpbmNsdWRlICJmZml0ZXN0LmgiCi0KLXN0YXRpYyBzaXplX3QgX19hdHRyaWJ1dGVfXygoc3RkY2FsbCkpIG15X3N0ZGNhbGxfc3RybGVuKGNoYXIgKnMpCi17Ci0gIHJldHVybiAoc3RybGVuKHMpKTsKLX0KLQotaW50IG1haW4gKHZvaWQpCi17Ci0gIGZmaV9jaWYgY2lmOwotICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107Ci0gIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107Ci0gIGZmaV9hcmcgcmludDsKLSAgY2hhciAqczsKLSAgYXJnc1swXSA9ICZmZmlfdHlwZV9wb2ludGVyOwotICB2YWx1ZXNbMF0gPSAodm9pZCopICZzOwotICAKLSAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfU1REQ0FMTCwgMSwKLQkJICAgICAgICZmZmlfdHlwZV9zaW50LCBhcmdzKSA9PSBGRklfT0spOwotICAKLSAgcyA9ICJhIjsKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKG15X3N0ZGNhbGxfc3RybGVuKSwgJnJpbnQsIHZhbHVlcyk7Ci0gIENIRUNLKHJpbnQgPT0gMSk7Ci0gIAotICBzID0gIjEyMzQ1NjciOwotICBmZmlfY2FsbCgmY2lmLCBGRklfRk4obXlfc3RkY2FsbF9zdHJsZW4pLCAmcmludCwgdmFsdWVzKTsKLSAgQ0hFQ0socmludCA9PSA3KTsKLSAgCi0gIHMgPSAiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NSI7Ci0gIGZmaV9jYWxsKCZjaWYsIEZGSV9GTihteV9zdGRjYWxsX3N0cmxlbiksICZyaW50LCB2YWx1ZXMpOwotICBDSEVDSyhyaW50ID09IDI1KTsKLSAgCi0gIHByaW50Zigic3RkY2FsbCBzdHJsZW4gdGVzdHMgcGFzc2VkXG4iKTsKLSAgZXhpdCgwKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDEuYwppbmRleCBiZmMyM2Y2Li5jMTNlMjNmIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QxLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MS5jCkBAIC0xNCw3ICsxNCw3IEBACiAgIHVuc2lnbmVkIGludCB1aTsKIH0gdGVzdF9zdHJ1Y3R1cmVfMTsKIAotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzEgc3RydWN0MSh0ZXN0X3N0cnVjdHVyZV8xIHRzKQorc3RhdGljIHRlc3Rfc3RydWN0dXJlXzEgQUJJX0FUVFIgc3RydWN0MSh0ZXN0X3N0cnVjdHVyZV8xIHRzKQogewogICB0cy51YysrOwogICB0cy5kLS07CkBAIC01MCw3ICs1MCw3IEBACiAgIHZhbHVlc1swXSA9ICZ0czFfYXJnOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsIAorICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMSwKIAkJICAgICAmdHMxX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICB0czFfYXJnLnVjID0gJ1x4MDEnOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0MV93aW4zMi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNzU2ZjVhLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDFfd2luMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDY3ICswLDAgQEAKLS8qIEFyZWE6CWZmaV9jYWxsCi0gICBQdXJwb3NlOglDaGVjayBzdHJ1Y3R1cmVzIHdpdGggZmFzdGNhbGwvdGhpc2NhbGwgY29udmVudGlvbi4KLSAgIExpbWl0YXRpb25zOglub25lLgotICAgUFI6CQlub25lLgotICAgT3JpZ2luYXRvcjoJRnJvbSB0aGUgb3JpZ2luYWwgZmZpdGVzdC5jICAqLwotCi0vKiB7IGRnLWRvIHJ1biB7IHRhcmdldCBpPzg2LSotY3lnd2luKiBpPzg2LSotbWluZ3cqIH0gfSAqLwotI2luY2x1ZGUgImZmaXRlc3QuaCIKLQotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgdW5zaWduZWQgY2hhciB1YzsKLSAgZG91YmxlIGQ7Ci0gIHVuc2lnbmVkIGludCB1aTsKLX0gdGVzdF9zdHJ1Y3R1cmVfMTsKLQotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzEgX19GQVNUQ0FMTF9fIHN0cnVjdDEodGVzdF9zdHJ1Y3R1cmVfMSB0cykKLXsKLSAgdHMudWMrKzsKLSAgdHMuZC0tOwotICB0cy51aSsrOwotCi0gIHJldHVybiB0czsKLX0KLQotaW50IG1haW4gKHZvaWQpCi17Ci0gIGZmaV9jaWYgY2lmOwotICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107Ci0gIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107Ci0gIGZmaV90eXBlIHRzMV90eXBlOwotICBmZmlfdHlwZSAqdHMxX3R5cGVfZWxlbWVudHNbNF07Ci0KLSAgdGVzdF9zdHJ1Y3R1cmVfMSB0czFfYXJnOwotCi0gIC8qIFRoaXMgaXMgYSBoYWNrIHRvIGdldCBhIHByb3Blcmx5IGFsaWduZWQgcmVzdWx0IGJ1ZmZlciAqLwotICB0ZXN0X3N0cnVjdHVyZV8xICp0czFfcmVzdWx0ID0KLSAgICAodGVzdF9zdHJ1Y3R1cmVfMSAqKSBtYWxsb2MgKHNpemVvZih0ZXN0X3N0cnVjdHVyZV8xKSk7Ci0KLSAgdHMxX3R5cGUuc2l6ZSA9IDA7Ci0gIHRzMV90eXBlLmFsaWdubWVudCA9IDA7Ci0gIHRzMV90eXBlLnR5cGUgPSBGRklfVFlQRV9TVFJVQ1Q7Ci0gIHRzMV90eXBlLmVsZW1lbnRzID0gdHMxX3R5cGVfZWxlbWVudHM7Ci0gIHRzMV90eXBlX2VsZW1lbnRzWzBdID0gJmZmaV90eXBlX3VjaGFyOwotICB0czFfdHlwZV9lbGVtZW50c1sxXSA9ICZmZmlfdHlwZV9kb3VibGU7Ci0gIHRzMV90eXBlX2VsZW1lbnRzWzJdID0gJmZmaV90eXBlX3VpbnQ7Ci0gIHRzMV90eXBlX2VsZW1lbnRzWzNdID0gTlVMTDsKLSAgCi0gIGFyZ3NbMF0gPSAmdHMxX3R5cGU7Ci0gIHZhbHVlc1swXSA9ICZ0czFfYXJnOwotICAKLSAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfRkFTVENBTEwsIDEsIAotCQkgICAgICZ0czFfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKLSAgCi0gIHRzMV9hcmcudWMgPSAnXHgwMSc7Ci0gIHRzMV9hcmcuZCA9IDMuMTQxNTk7Ci0gIHRzMV9hcmcudWkgPSA1NTU7Ci0KLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDEpLCB0czFfcmVzdWx0LCB2YWx1ZXMpOwotICAKLSAgQ0hFQ0sodHMxX3Jlc3VsdC0+dWkgPT0gNTU2KTsKLSAgQ0hFQ0sodHMxX3Jlc3VsdC0+ZCA9PSAzLjE0MTU5IC0gMSk7Ci0gCi0gIGZyZWUgKHRzMV9yZXN1bHQpOwotICBleGl0KDApOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Mi5jCmluZGV4IGQ4NTM4NWUuLjUwNzdhNWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDIuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyLmMKQEAgLTEzLDcgKzEzLDcgQEAKICAgZG91YmxlIGQyOwogfSB0ZXN0X3N0cnVjdHVyZV8yOwogCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMiBzdHJ1Y3QyKHRlc3Rfc3RydWN0dXJlXzIgdHMpCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMiBBQklfQVRUUiBzdHJ1Y3QyKHRlc3Rfc3RydWN0dXJlXzIgdHMpCiB7CiAgIHRzLmQxLS07CiAgIHRzLmQyLS07CkBAIC00Niw3ICs0Niw3IEBACiAgIHZhbHVlc1swXSA9ICZ0czJfYXJnOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czJfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEsICZ0czJfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHRzMl9hcmcuZDEgPSA1LjU1OwogICB0czJfYXJnLmQyID0gNi42NjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDJfd2luMzIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQwMjI4NS4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QyX3dpbjMyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKiBBcmVhOglmZmlfY2FsbAotICAgUHVycG9zZToJQ2hlY2sgc3RydWN0dXJlcyBpbiBmYXN0Y2FsbC9zdGRjYWxsIGZ1bmN0aW9uCi0gICBMaW1pdGF0aW9uczoJbm9uZS4KLSAgIFBSOgkJbm9uZS4KLSAgIE9yaWdpbmF0b3I6CUZyb20gdGhlIG9yaWdpbmFsIGZmaXRlc3QuYyAgKi8KLQotLyogeyBkZy1kbyBydW4geyB0YXJnZXQgaT84Ni0qLWN5Z3dpbiogaT84Ni0qLW1pbmd3KiB9IH0gKi8KLSNpbmNsdWRlICJmZml0ZXN0LmgiCi0KLXR5cGVkZWYgc3RydWN0Ci17Ci0gIGRvdWJsZSBkMTsKLSAgZG91YmxlIGQyOwotfSB0ZXN0X3N0cnVjdHVyZV8yOwotCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfMiBfX0ZBU1RDQUxMX18gc3RydWN0Mih0ZXN0X3N0cnVjdHVyZV8yIHRzKQotewotICB0cy5kMS0tOwotICB0cy5kMi0tOwotCi0gIHJldHVybiB0czsKLX0KLQotaW50IG1haW4gKHZvaWQpCi17Ci0gIGZmaV9jaWYgY2lmOwotICBmZmlfdHlwZSAqYXJnc1tNQVhfQVJHU107Ci0gIHZvaWQgKnZhbHVlc1tNQVhfQVJHU107Ci0gIHRlc3Rfc3RydWN0dXJlXzIgdHMyX2FyZzsKLSAgZmZpX3R5cGUgdHMyX3R5cGU7Ci0gIGZmaV90eXBlICp0czJfdHlwZV9lbGVtZW50c1szXTsKLQotICAvKiBUaGlzIGlzIGEgaGFjayB0byBnZXQgYSBwcm9wZXJseSBhbGlnbmVkIHJlc3VsdCBidWZmZXIgKi8KLSAgdGVzdF9zdHJ1Y3R1cmVfMiAqdHMyX3Jlc3VsdCA9Ci0gICAgKHRlc3Rfc3RydWN0dXJlXzIgKikgbWFsbG9jIChzaXplb2YodGVzdF9zdHJ1Y3R1cmVfMikpOwotCi0gIHRzMl90eXBlLnNpemUgPSAwOwotICB0czJfdHlwZS5hbGlnbm1lbnQgPSAwOwotICB0czJfdHlwZS50eXBlID0gRkZJX1RZUEVfU1RSVUNUOwotICB0czJfdHlwZS5lbGVtZW50cyA9IHRzMl90eXBlX2VsZW1lbnRzOwotICB0czJfdHlwZV9lbGVtZW50c1swXSA9ICZmZmlfdHlwZV9kb3VibGU7Ci0gIHRzMl90eXBlX2VsZW1lbnRzWzFdID0gJmZmaV90eXBlX2RvdWJsZTsKLSAgdHMyX3R5cGVfZWxlbWVudHNbMl0gPSBOVUxMOwotCi0gIGFyZ3NbMF0gPSAmdHMyX3R5cGU7Ci0gIHZhbHVlc1swXSA9ICZ0czJfYXJnOwotICAKLSAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfRkFTVENBTEwsIDEsICZ0czJfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKLSAgCi0gIHRzMl9hcmcuZDEgPSA1LjU1OwotICB0czJfYXJnLmQyID0gNi42NjsKLSAgCi0gIHByaW50ZiAoIiVnXG4iLCB0czJfYXJnLmQxKTsKLSAgcHJpbnRmICgiJWdcbiIsIHRzMl9hcmcuZDIpOwotICAKLSAgZmZpX2NhbGwoJmNpZiwgRkZJX0ZOKHN0cnVjdDIpLCB0czJfcmVzdWx0LCB2YWx1ZXMpOwotICAKLSAgcHJpbnRmICgiJWdcbiIsIHRzMl9yZXN1bHQtPmQxKTsKLSAgcHJpbnRmICgiJWdcbiIsIHRzMl9yZXN1bHQtPmQyKTsKLSAgCi0gIENIRUNLKHRzMl9yZXN1bHQtPmQxID09IDUuNTUgLSAxKTsKLSAgQ0hFQ0sodHMyX3Jlc3VsdC0+ZDIgPT0gNi42NiAtIDEpOwotICAKLSAgZnJlZSAodHMyX3Jlc3VsdCk7Ci0gIGV4aXQoMCk7Ci19CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3QzLmMKaW5kZXggZGU4ODNjMi4uN2ViYTBlYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0My5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDMuYwpAQCAtMTIsNyArMTIsNyBAQAogICBpbnQgc2k7CiB9IHRlc3Rfc3RydWN0dXJlXzM7CiAKLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV8zIHN0cnVjdDModGVzdF9zdHJ1Y3R1cmVfMyB0cykKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV8zIEFCSV9BVFRSIHN0cnVjdDModGVzdF9zdHJ1Y3R1cmVfMyB0cykKIHsKICAgdHMuc2kgPSAtKHRzLnNpKjIpOwogCkBAIC00Myw3ICs0Myw3IEBACiAgIHZhbHVlc1swXSA9ICZ0czNfYXJnOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsIAorICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMSwKIAkJICAgICAmdHMzX3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICB0czNfYXJnLnNpID0gLTEyMzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDQuYwppbmRleCA0OGUwMzQ5Li42NmE5NTUxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q0LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NC5jCkBAIC0xNCw3ICsxNCw3IEBACiAgIHVuc2lnbmVkIHVpMzsKIH0gdGVzdF9zdHJ1Y3R1cmVfNDsKIAotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzQgc3RydWN0NCh0ZXN0X3N0cnVjdHVyZV80IHRzKQorc3RhdGljIHRlc3Rfc3RydWN0dXJlXzQgQUJJX0FUVFIgc3RydWN0NCh0ZXN0X3N0cnVjdHVyZV80IHRzKQogewogICB0cy51aTMgPSB0cy51aTEgKiB0cy51aTIgKiB0cy51aTM7CiAKQEAgLTQ4LDcgKzQ4LDcgQEAKICAgdmFsdWVzWzBdID0gJnRzNF9hcmc7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzNF90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMSwgJnRzNF90eXBlLCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgdHM0X2FyZy51aTEgPSAyOwogICB0czRfYXJnLnVpMiA9IDM7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q1LmMKaW5kZXggMjhiMWYwYy4uMjNlMmEzZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0NS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDUuYwpAQCAtMTIsNyArMTIsNyBAQAogICBjaGFyIGMyOwogfSB0ZXN0X3N0cnVjdHVyZV81OwogCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfNSBzdHJ1Y3Q1KHRlc3Rfc3RydWN0dXJlXzUgdHMxLCB0ZXN0X3N0cnVjdHVyZV81IHRzMikKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV81IEFCSV9BVFRSIHN0cnVjdDUodGVzdF9zdHJ1Y3R1cmVfNSB0czEsIHRlc3Rfc3RydWN0dXJlXzUgdHMyKQogewogICB0czEuYzEgKz0gdHMyLmMxOwogICB0czEuYzIgLT0gdHMyLmMyOwpAQCAtNDgsNyArNDgsNyBAQAogICB2YWx1ZXNbMV0gPSAmdHM1X2FyZzI7CiAgIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMiwgJnRzNV90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMiwgJnRzNV90eXBlLCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgdHM1X2FyZzEuYzEgPSAyOwogICB0czVfYXJnMS5jMiA9IDY7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q2LmMKaW5kZXggMGUyNjc0Ni4uMTczYzY2ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ni5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDYuYwpAQCAtMTIsNyArMTIsNyBAQAogICBkb3VibGUgZDsKIH0gdGVzdF9zdHJ1Y3R1cmVfNjsKIAotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzYgc3RydWN0NiAodGVzdF9zdHJ1Y3R1cmVfNiB0cykKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV82IEFCSV9BVFRSIHN0cnVjdDYgKHRlc3Rfc3RydWN0dXJlXzYgdHMpCiB7CiAgIHRzLmYgKz0gMTsKICAgdHMuZCArPSAxOwpAQCAtNDYsNyArNDYsNyBAQAogICB2YWx1ZXNbMF0gPSAmdHM2X2FyZzsKIAogICAvKiBJbml0aWFsaXplIHRoZSBjaWYgKi8KLSAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEZGSV9ERUZBVUxUX0FCSSwgMSwgJnRzNl90eXBlLCBhcmdzKSA9PSBGRklfT0spOworICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgQUJJX05VTSwgMSwgJnRzNl90eXBlLCBhcmdzKSA9PSBGRklfT0spOwogICAKICAgdHM2X2FyZy5mID0gNS41NWY7CiAgIHRzNl9hcmcuZCA9IDYuNjY7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q3LmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q3LmMKaW5kZXggOGYyYmJmZC4uYmFkYzdlMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0Ny5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDcuYwpAQCAtMTMsNyArMTMsNyBAQAogICBkb3VibGUgZDsKIH0gdGVzdF9zdHJ1Y3R1cmVfNzsKIAotc3RhdGljIHRlc3Rfc3RydWN0dXJlXzcgc3RydWN0NyAodGVzdF9zdHJ1Y3R1cmVfNyB0cykKK3N0YXRpYyB0ZXN0X3N0cnVjdHVyZV83IEFCSV9BVFRSIHN0cnVjdDcgKHRlc3Rfc3RydWN0dXJlXzcgdHMpCiB7CiAgIHRzLmYxICs9IDE7CiAgIHRzLmYyICs9IDE7CkBAIC00OSw3ICs0OSw3IEBACiAgIHZhbHVlc1swXSA9ICZ0czdfYXJnOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czdfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEsICZ0czdfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHRzN19hcmcuZjEgPSA1LjU1ZjsKICAgdHM3X2FyZy5mMiA9IDU1LjVmOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OC5jCmluZGV4IDI2NmUxZjAuLmVmMjA0ZWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDguYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q4LmMKQEAgLTE0LDcgKzE0LDcgQEAKICAgZmxvYXQgZjQ7CiB9IHRlc3Rfc3RydWN0dXJlXzg7CiAKLXN0YXRpYyB0ZXN0X3N0cnVjdHVyZV84IHN0cnVjdDggKHRlc3Rfc3RydWN0dXJlXzggdHMpCitzdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfOCBBQklfQVRUUiBzdHJ1Y3Q4ICh0ZXN0X3N0cnVjdHVyZV84IHRzKQogewogICB0cy5mMSArPSAxOwogICB0cy5mMiArPSAxOwpAQCAtNTIsNyArNTIsNyBAQAogICB2YWx1ZXNbMF0gPSAmdHM4X2FyZzsKICAgCiAgIC8qIEluaXRpYWxpemUgdGhlIGNpZiAqLwotICBDSEVDSyhmZmlfcHJlcF9jaWYoJmNpZiwgRkZJX0RFRkFVTFRfQUJJLCAxLCAmdHM4X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CisgIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBBQklfTlVNLCAxLCAmdHM4X3R5cGUsIGFyZ3MpID09IEZGSV9PSyk7CiAgIAogICB0czhfYXJnLmYxID0gNS41NWY7CiAgIHRzOF9hcmcuZjIgPSA1NS41ZjsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3N0cnVjdDkuYwppbmRleCBlZmViNzE2Li40YTEzYjgxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC9zdHJ1Y3Q5LmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvc3RydWN0OS5jCkBAIC0xMyw3ICsxMyw3IEBACiAgIGludCBpOwogfSB0ZXN0X3N0cnVjdHVyZV85OwogCi1zdGF0aWMgdGVzdF9zdHJ1Y3R1cmVfOSBzdHJ1Y3Q5ICh0ZXN0X3N0cnVjdHVyZV85IHRzKQorc3RhdGljIHRlc3Rfc3RydWN0dXJlXzkgQUJJX0FUVFIgc3RydWN0OSAodGVzdF9zdHJ1Y3R1cmVfOSB0cykKIHsKICAgdHMuZiArPSAxOwogICB0cy5pICs9IDE7CkBAIC00Nyw3ICs0Nyw3IEBACiAgIHZhbHVlc1swXSA9ICZ0czlfYXJnOwogICAKICAgLyogSW5pdGlhbGl6ZSB0aGUgY2lmICovCi0gIENIRUNLKGZmaV9wcmVwX2NpZigmY2lmLCBGRklfREVGQVVMVF9BQkksIDEsICZ0czlfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKKyAgQ0hFQ0soZmZpX3ByZXBfY2lmKCZjaWYsIEFCSV9OVU0sIDEsICZ0czlfdHlwZSwgYXJncykgPT0gRkZJX09LKTsKICAgCiAgIHRzOV9hcmcuZiA9IDUuNTVmOwogICB0czlfYXJnLmkgPSA1OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3Vud2luZHRlc3QuY2MKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYwpyZW5hbWUgdG8gTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdW53aW5kdGVzdC5jYwppbmRleCBhNzhmNGU3Li42N2NmZWZlYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvdW53aW5kdGVzdC5jYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC91bndpbmR0ZXN0LmNjCkBAIC02LDE3ICs2LDkgQEAKIAogLyogeyBkZy1kbyBydW4gfSAqLwogCi0jaW5jbHVkZSAiZmZpdGVzdGN4eC5oIgorI2luY2x1ZGUgImZmaXRlc3QuaCIKIAotI2lmIGRlZmluZWQgSEFWRV9TVERJTlRfSAotI2luY2x1ZGUgPHN0ZGludC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIEhBVkVfSU5UVFlQRVNfSAotI2luY2x1ZGUgPGludHR5cGVzLmg+Ci0jZW5kaWYKLQotdm9pZAordm9pZCBBQklfQVRUUgogY2xvc3VyZV90ZXN0X2ZuKGZmaV9jaWYqIGNpZiBfX1VOVVNFRF9fLCB2b2lkKiByZXNwIF9fVU5VU0VEX18sCiAJCXZvaWQqKiBhcmdzIF9fVU5VU0VEX18sIHZvaWQqIHVzZXJkYXRhIF9fVU5VU0VEX18pCiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCnJlbmFtZSB0byBNb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC91bndpbmR0ZXN0X2ZmaV9jYWxsLmNjCmluZGV4IDU3MTkxZjIuLmVjNjExNjQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5zcGVjaWFsL3Vud2luZHRlc3RfZmZpX2NhbGwuY2MKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdW53aW5kdGVzdF9mZmlfY2FsbC5jYwpAQCAtNiw3ICs2LDcgQEAKIAogLyogeyBkZy1kbyBydW4gfSAqLwogCi0jaW5jbHVkZSAiZmZpdGVzdGN4eC5oIgorI2luY2x1ZGUgImZmaXRlc3QuaCIKIAogc3RhdGljIGludCBjaGVja2luZyhpbnQgYSBfX1VOVVNFRF9fLCBzaG9ydCBiIF9fVU5VU0VEX18sCiAJCSAgICBzaWduZWQgY2hhciBjIF9fVU5VU0VEX18pCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV8xLmMgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV8xLmMKaW5kZXggY2Y0ZGQ4NS4uN2Y5NjgwOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfMS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhXzEuYwpAQCAtOTQsNyArOTQsNyBAQAogICBzdHJ1Y3QgbGFyZ2VfdGFnIGwxOwogCiAgIGludCBuOwotICBpbnQgcmVzOworICBmZmlfYXJnIHJlczsKIAogICB1bnNpZ25lZCBjaGFyIHVjOwogICBzaWduZWQgY2hhciBzYzsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDEuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGVzdHN1aXRlL2xpYmZmaS5jYWxsL3ZhX3N0cnVjdDEuYwppbmRleCAxMWQxZjEwLi5lNjQ1MjA2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuY2FsbC92YV9zdHJ1Y3QxLmMKKysrIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLmNhbGwvdmFfc3RydWN0MS5jCkBAIC02MSw3ICs2MSw3IEBACiAgIHN0cnVjdCBsYXJnZV90YWcgbDE7CiAKICAgaW50IG47Ci0gIGludCByZXM7CisgIGZmaV9hcmcgcmVzOwogCiAgIHNfdHlwZS5zaXplID0gMDsKICAgc190eXBlLmFsaWdubWVudCA9IDA7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmggYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9mZml0ZXN0Y3h4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM2ZGE3ZWYuLjAwMDAwMDAKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvZmZpdGVzdGN4eC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTUgKzAsMCBAQAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxmZmkuaD4KLSNpbmNsdWRlICJmZmljb25maWcuaCIKLQotI2RlZmluZSBNQVhfQVJHUyAyNTYKLQotCi0vKiBEZWZpbmUgX19VTlVTRURfXyB0aGF0IGFsc28gb3RoZXIgY29tcGlsZXJzIHRoYW4gZ2NjIGNhbiBydW4gdGhlIHRlc3RzLiAgKi8KLSN1bmRlZiBfX1VOVVNFRF9fCi0jaWYgZGVmaW5lZChfX0dOVUNfXykKLSNkZWZpbmUgX19VTlVTRURfXyBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fKSkKLSNlbHNlCi0jZGVmaW5lIF9fVU5VU0VEX18KLSNlbmRpZgotCi0jZGVmaW5lIENIRUNLKHgpICghKHgpID8gYWJvcnQoKSA6ICh2b2lkKTApCi0KLS8qIFByZWZlciBNQVBfQU5PTihZTU9VUykgdG8gL2Rldi96ZXJvLCBzaW5jZSB3ZSBkb24ndCBuZWVkIHRvIGtlZXAgYQotICAgZmlsZSBvcGVuLiAgKi8KLSNpZmRlZiBIQVZFX01NQVBfQU5PTgotIyB1bmRlZiBIQVZFX01NQVBfREVWX1pFUk8KLQotIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgotIyBpZm5kZWYgTUFQX0ZBSUxFRAotIyAgZGVmaW5lIE1BUF9GQUlMRUQgLTEKLSMgZW5kaWYKLSMgaWYgIWRlZmluZWQgKE1BUF9BTk9OWU1PVVMpICYmIGRlZmluZWQgKE1BUF9BTk9OKQotIyAgZGVmaW5lIE1BUF9BTk9OWU1PVVMgTUFQX0FOT04KLSMgZW5kaWYKLSMgZGVmaW5lIFVTSU5HX01NQVAKLQotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX01NQVBfREVWX1pFUk8KLQotIyBpbmNsdWRlIDxzeXMvbW1hbi5oPgotIyBpZm5kZWYgTUFQX0ZBSUxFRAotIyAgZGVmaW5lIE1BUF9GQUlMRUQgLTEKLSMgZW5kaWYKLSMgZGVmaW5lIFVTSU5HX01NQVAKLQotI2VuZGlmCi0KLQotLyogTWluR1cga2x1ZGdlLiAgKi8KLSNpZmRlZiBfV0lONjQKLSNkZWZpbmUgUFJJZExMICJJNjRkIgotI2RlZmluZSBQUkl1TEwgIkk2NHUiCi0jZWxzZQotI2RlZmluZSBQUklkTEwgImxsZCIKLSNkZWZpbmUgUFJJdUxMICJsbHUiCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXN0c3VpdGUvbGliZmZpLnNwZWNpYWwvc3BlY2lhbC5leHAgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjFhNWZhNi4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3Rlc3RzdWl0ZS9saWJmZmkuc3BlY2lhbC9zcGVjaWFsLmV4cAorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0jIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCi0jIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLQotZGctaW5pdAotbGliZmZpLWluaXQKLQotZ2xvYmFsIHNyY2RpciBzdWJkaXIKLQotZ2xvYmFsIGN4eF9vcHRpb25zCi0KLXNldCBjeHhfb3B0aW9ucyAiIC1zaGFyZWQtbGliZ2NjIC1sc3RkYysrIgotCi1pZiB7IFtzdHJpbmcgbWF0Y2ggJHVzaW5nX2djYyAieWVzIl0gfSB7Ci0KLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY2NdXSAkY3h4X29wdGlvbnMgIi1PMCAtVyAtV2FsbCIKLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY2NdXSAkY3h4X29wdGlvbnMgIi1PMiIKLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY2NdXSAkY3h4X29wdGlvbnMgIi1PMyIKLSAgZGctcnVudGVzdCBbbHNvcnQgW2dsb2IgLW5vY29tcGxhaW4gJHNyY2Rpci8kc3ViZGlyLyouY2NdXSAkY3h4X29wdGlvbnMgIi1PcyIKLQotfQotCi1kZy1maW5pc2gKLQotIyBMb2NhbCBWYXJpYWJsZXM6Ci0jIHRjbC1pbmRlbnQtbGV2ZWw6NAotIyBFbmQ6CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3RleGluZm8udGV4IGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaS90ZXhpbmZvLnRleAppbmRleCBhNWE3YjJiLi44NWYxODRjIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpL3RleGluZm8udGV4CisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmkvdGV4aW5mby50ZXgKQEAgLTMsMTEgKzMsMTEgQEAKICUgTG9hZCBwbGFpbiBpZiBuZWNlc3NhcnksIGkuZS4sIGlmIHJ1bm5pbmcgdW5kZXIgaW5pdGV4LgogXGV4cGFuZGFmdGVyXGlmeFxjc25hbWUgZm10bmFtZVxlbmRjc25hbWVccmVsYXhcaW5wdXQgcGxhaW5cZmkKICUKLVxkZWZcdGV4aW5mb3ZlcnNpb257MjAxMi0wNi0wNS4xNH0KK1xkZWZcdGV4aW5mb3ZlcnNpb257MjAxMy0wMi0wMS4xMX0KICUKICUgQ29weXJpZ2h0IDE5ODUsIDE5ODYsIDE5ODgsIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsCiAlIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCi0lIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCislIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTIsIDIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAlCiAlIFRoaXMgdGV4aW5mby50ZXggZmlsZSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICUgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTI0LDcgKzI0LDggQEAKICUKICUgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgd2hlbiB0aGlzIGZpbGUgaXMgcmVhZCBieSBUZVggd2hlbiBwcm9jZXNzaW5nCiAlIGEgVGV4aW5mbyBzb3VyY2UgZG9jdW1lbnQsIHlvdSBtYXkgdXNlIHRoZSByZXN1bHQgd2l0aG91dAotJSByZXN0cmljdGlvbi4gIChUaGlzIGhhcyBiZWVuIG91ciBpbnRlbnQgc2luY2UgVGV4aW5mbyB3YXMgaW52ZW50ZWQuKQorJSByZXN0cmljdGlvbi4gVGhpcyBFeGNlcHRpb24gaXMgYW4gYWRkaXRpb25hbCBwZXJtaXNzaW9uIHVuZGVyIHNlY3Rpb24gNworJSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMyAoIkdQTHYzIikuCiAlCiAlIFBsZWFzZSB0cnkgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRleGluZm8udGV4IGJlZm9yZSBzdWJtaXR0aW5nIGJ1ZwogJSByZXBvcnRzOyB5b3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbToKQEAgLTU5NCw3ICs1OTUsNyBAQAogXGRlZlw6e1xzcGFjZWZhY3Rvcj0xMDAwIH0KIAogJSBAKiBmb3JjZXMgYSBsaW5lIGJyZWFrLgotXGRlZlwqe1xoZmlsXGJyZWFrXGhib3h7fVxpZ25vcmVzcGFjZXN9CitcZGVmXCp7XHVuc2tpcFxoZmlsXGJyZWFrXGhib3h7fVxpZ25vcmVzcGFjZXN9CiAKICUgQC8gYWxsb3dzIGEgbGluZSBicmVhay4KIFxsZXRcLz1cYWxsb3dicmVhawpAQCAtMjI3Miw4ICsyMjczLDYgQEAKIAogXGdkZWZcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdHtcbGV0YFxjb2RlcXVvdGVsZWZ0fQogXGdkZWZcbWFya3Vwc2V0Y29kZXF1b3RlcmlnaHR7XGxldCdcY29kZXF1b3RlcmlnaHR9Ci0KLVxnZGVmXG1hcmt1cHNldG5vbGlnYXR1cmVzcXVvdGVsZWZ0e1xsZXRgXG5vbGlnYXR1cmVzcXVvdGVsZWZ0fQogfQogCiBcbGV0XG1hcmt1cHNldHVwbHFjb2RlIFxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0CkBAIC0yMjgyLDYgKzIyODEsOSBAQAogXGxldFxtYXJrdXBzZXR1cGxxZXhhbXBsZSBcbWFya3Vwc2V0Y29kZXF1b3RlbGVmdAogXGxldFxtYXJrdXBzZXR1cHJxZXhhbXBsZSBcbWFya3Vwc2V0Y29kZXF1b3RlcmlnaHQKICUKK1xsZXRcbWFya3Vwc2V0dXBscWtiZCAgICAgXG1hcmt1cHNldGNvZGVxdW90ZWxlZnQKK1xsZXRcbWFya3Vwc2V0dXBycWtiZCAgICAgXG1hcmt1cHNldGNvZGVxdW90ZXJpZ2h0CislCiBcbGV0XG1hcmt1cHNldHVwbHFzYW1wIFxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0CiBcbGV0XG1hcmt1cHNldHVwcnFzYW1wIFxtYXJrdXBzZXRjb2RlcXVvdGVyaWdodAogJQpAQCAtMjI5MSw4ICsyMjkzLDYgQEAKIFxsZXRcbWFya3Vwc2V0dXBscXZlcmJhdGltIFxtYXJrdXBzZXRjb2RlcXVvdGVsZWZ0CiBcbGV0XG1hcmt1cHNldHVwcnF2ZXJiYXRpbSBcbWFya3Vwc2V0Y29kZXF1b3RlcmlnaHQKIAotXGxldFxtYXJrdXBzZXR1cGxxa2JkIFxtYXJrdXBzZXRub2xpZ2F0dXJlc3F1b3RlbGVmdAotCiAlIEFsbG93IGFuIG9wdGlvbiB0byBub3QgdXNlIHJlZ3VsYXIgZGlyZWN0ZWQgcmlnaHQgcXVvdGUvYXBvc3Ryb3BoZQogJSAoY2hhciAweDI3KSwgYnV0IGluc3RlYWQgdGhlIHVuZGlyZWN0ZWQgcXVvdGUgZnJvbSBjbXR0IChjaGFyIDB4MGQpLgogJSBUaGUgdW5kaXJlY3RlZCBxdW90ZSBpcyB1Z2x5LCBzbyBkb24ndCBtYWtlIGl0IHRoZSBkZWZhdWx0LCBidXQgaXQKQEAgLTIzODIsOCArMjM4Miw3IEBACiAgIFxhZnRlcnNtYXJ0aWMKIH0KIAotJSBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2VzIFx0dHNsLCBhbmQgbm8gaWMuCi0lIEB2YXIgaXMgc2V0IHRvIHRoaXMgZm9yIGRlZnVuIGFyZ3VtZW50cy4KKyUgVW5jb25kaXRpb25hbCB1c2UgXHR0c2wsIGFuZCBubyBpYy4gIEB2YXIgaXMgc2V0IHRvIHRoaXMgZm9yIGRlZnVucy4KIFxkZWZcdHRzbGFudGVkIzF7e1x0dHNsICMxfX0KIAogJSBAY2l0ZSBpcyBsaWtlIFxzbWFydHNsYW50ZWQgZXhjZXB0IHVuY29uZGl0aW9uYWxseSB1c2UgXHNsLiAgV2UgbmV2ZXIgd2FudApAQCAtMjQ0OCwzNCArMjQ0NywxMiBAQAogJSBAc2FtcC4KIFxkZWZcc2FtcCMxe3tcc2V0dXBtYXJrdXBzdHlsZXtzYW1wfVxscVx0Y2xvc2V7IzF9XHJxXG51bGx9fQogCi0lIGRlZmluaXRpb24gb2YgQGtleSB0aGF0IHByb2R1Y2VzIGEgbG96ZW5nZS4gIERvZXNuJ3QgYWRqdXN0IHRvIHRleHQgc2l6ZS4KLSVcc2V0Zm9udFxrZXlybVxybXNoYXBlezh9ezEwMDB9e09UMX0KLSVcZm9udFxrZXlzeT1jbXN5OQotJVxkZWZca2V5IzF7e1xrZXlybVx0ZXh0Zm9udDI9XGtleXN5IFxsZWF2ZXZtb2RlXGhib3h7JQotJSAgXHJhaXNlMC40cHRcaGJveHtcYW5nbGVsZWZ0fVxrZXJuLS4wOGVtXHZ0b3B7JQotJSAgICBcdmJveHtcaHJ1bGVca2Vybi0wLjRwdAotJSAgICAgXGhib3h7XHJhaXNlMC40cHRcaGJveHtcdnBoYW50b217XGFuZ2xlbGVmdH19IzF9fSUKLSUgICAgXGtlcm4tMC40cHRcaHJ1bGV9JQotJSAgXGtlcm4tLjA2ZW1ccmFpc2UwLjRwdFxoYm94e1xhbmdsZXJpZ2h0fX19fQorJSBAaW5kaWNhdGV1cmwgaXMgXHNhbXAsIHRoYXQgaXMsIHdpdGggcXVvdGVzLgorXGxldFxpbmRpY2F0ZXVybD1cc2FtcAogCi0lIGRlZmluaXRpb24gb2YgQGtleSB3aXRoIG5vIGxvemVuZ2UuICBJZiB0aGUgY3VycmVudCBmb250IGlzIGFscmVhZHkKLSUgbW9ub3NwYWNlLCBkb24ndCBjaGFuZ2UgaXQ7IHRoYXQgd2F5LCB3ZSByZXNwZWN0IEBrYmRpbnB1dHN0eWxlLiAgQnV0Ci0lIGlmIGl0IGlzbid0IG1vbm9zcGFjZSwgdGhlbiB1c2UgXHR0LgotJQotXGRlZlxrZXkjMXt7XHNldHVwbWFya3Vwc3R5bGV7a2V5fSUKLSAgXG5vaHlwaGVuYXRpb24KLSAgXGlmbW9ub3NwYWNlXGVsc2VcdHRcZmkKLSAgIzF9XG51bGx9Ci0KLSUgY3RybCBpcyBubyBsb25nZXIgYSBUZXhpbmZvIGNvbW1hbmQuCi1cZGVmXGN0cmwgIzF7e1x0dCBccmF3YmFja3NsYXNoIFxoYXR9IzF9Ci0KLSUgQGZpbGUsIEBvcHRpb24gYXJlIHRoZSBzYW1lIGFzIEBzYW1wLgotXGxldFxmaWxlPVxzYW1wCi1cbGV0XG9wdGlvbj1cc2FtcAotCi0lIEBjb2RlIGlzIGEgbW9kaWZpY2F0aW9uIG9mIEB0LAotJSB3aGljaCBtYWtlcyBzcGFjZXMgdGhlIHNhbWUgc2l6ZSBhcyBub3JtYWwgaW4gdGhlIHN1cnJvdW5kaW5nIHRleHQuCislIEBjb2RlIChhbmQgc2ltaWxhcikgcHJpbnRzIGluIHR5cGV3cml0ZXIsIGJ1dCB3aXRoIHNwYWNlcyB0aGUgc2FtZQorJSBzaXplIGFzIG5vcm1hbCBpbiB0aGUgc3Vycm91bmRpbmcgdGV4dCwgd2l0aG91dCBoeXBoZW5hdGlvbiwgZXRjLgorJSBUaGlzIGlzIGEgc3Vicm91dGluZSBmb3IgdGhhdC4KIFxkZWZcdGNsb3NlIzF7JQogICB7JQogICAgICUgQ2hhbmdlIG5vcm1hbCBpbnRlcndvcmQgc3BhY2UgdG8gYmUgc2FtZSBhcyBmb3IgdGhlIGN1cnJlbnQgZm9udC4KQEAgLTI1MDAsNyArMjQ3Nyw3IEBACiAlIFdlICptdXN0KiB0dXJuIG9uIGh5cGhlbmF0aW9uIGF0IGAtJyBhbmQgYF8nIGluIEBjb2RlLgogJSBPdGhlcndpc2UsIGl0IGlzIHRvbyBoYXJkIHRvIGF2b2lkIG92ZXJmdWxsIGhib3hlcwogJSBpbiB0aGUgRW1hY3MgbWFudWFsLCB0aGUgTGlicmFyeSBtYW51YWwsIGV0Yy4KLQorJQogJSBVbmZvcnR1bmF0ZWx5LCBUZVggdXNlcyBvbmUgcGFyYW1ldGVyIChcaHlwaGVuY2hhcikgdG8gY29udHJvbAogJSBib3RoIGh5cGhlbmF0aW9uIGF0IC0gYW5kIGh5cGhlbmF0aW9uIHdpdGhpbiB3b3Jkcy4KICUgV2UgbXVzdCB0aGVyZWZvcmUgdHVybiB0aGVtIGJvdGggb2ZmIChcdGNsb3NlIGRvZXMgdGhhdCkKQEAgLTI1MTksNyArMjQ5Niw3IEBACiAgICAgIFxsZXQtXGNvZGVkYXNoCiAgICAgIFxsZXRfXGNvZGV1bmRlcgogICAgIFxlbHNlCi0gICAgIFxsZXQtXHJlYWxkYXNoCisgICAgIFxsZXQtXG5vcm1hbGRhc2gKICAgICAgXGxldF9ccmVhbHVuZGVyCiAgICAgXGZpCiAgICAgXGNvZGV4CkBAIC0yNTI4LDcgKzI1MDUsNyBAQAogCiBcZGVmXGNvZGV4ICMxe1x0Y2xvc2V7IzF9XGVuZGdyb3VwfQogCi1cZGVmXHJlYWxkYXNoey19CitcZGVmXG5vcm1hbGRhc2h7LX0KIFxkZWZcY29kZWRhc2h7LVxkaXNjcmV0aW9uYXJ5e317fXt9fQogXGRlZlxjb2RldW5kZXJ7JQogICAlIHRoaXMgaXMgYWxsIHNvIEBtYXRoe0Bjb2Rle3Zhcl9uYW1lfSsxfSBjYW4gd29yay4gIEluIG1hdGggbW9kZSwgXwpAQCAtMjU0Myw5ICsyNTIwLDkgQEAKIH0KIAogJSBBbiBhZGRpdGlvbmFsIGNvbXBsaWNhdGlvbjogdGhlIGFib3ZlIHdpbGwgYWxsb3cgYnJlYWtzIGFmdGVyLCBlLmcuLAotJSBlYWNoIG9mIHRoZSBmb3VyIHVuZGVyc2NvcmVzIGluIF9fdHlwZW9mX18uICBUaGlzIGlzIHVuZGVzaXJhYmxlIGluCi0lIHNvbWUgbWFudWFscywgZXNwZWNpYWxseSBpZiB0aGV5IGRvbid0IGhhdmUgbG9uZyBpZGVudGlmaWVycyBpbgotJSBnZW5lcmFsLiAgQGFsbG93Y29kZWJyZWFrcyBwcm92aWRlcyBhIHdheSB0byBjb250cm9sIHRoaXMuCislIGVhY2ggb2YgdGhlIGZvdXIgdW5kZXJzY29yZXMgaW4gX190eXBlb2ZfXy4gIFRoaXMgaXMgYmFkLgorJSBAYWxsb3djb2RlYnJlYWtzIHByb3ZpZGVzIGEgZG9jdW1lbnQtbGV2ZWwgd2F5IHRvIHR1cm4gYnJlYWtpbmcgYXQgLQorJSBhbmQgXyBvbiBhbmQgb2ZmLgogJQogXG5ld2lmXGlmYWxsb3djb2RlYnJlYWtzICBcYWxsb3djb2RlYnJlYWtzdHJ1ZQogCkBAIC0yNTY0LDYgKzI1NDEsMTMgQEAKICAgXGZpXGZpCiB9CiAKKyUgRm9yIEBjb21tYW5kLCBAZW52LCBAZmlsZSwgQG9wdGlvbiBxdW90ZXMgc2VlbSB1bm5lY2Vzc2FyeSwKKyUgc28gdXNlIFxjb2RlIHJhdGhlciB0aGFuIFxzYW1wLgorXGxldFxjb21tYW5kPVxjb2RlCitcbGV0XGVudj1cY29kZQorXGxldFxmaWxlPVxjb2RlCitcbGV0XG9wdGlvbj1cY29kZQorCiAlIEB1cmVmIChhYmJyZXZpYXRpb24gZm9yIGB1cmxyZWYnKSB0YWtlcyBhbiBvcHRpb25hbCAoY29tbWEtc2VwYXJhdGVkKQogJSBzZWNvbmQgYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgdGV4dCB0byBkaXNwbGF5IGFuZCBhbiBvcHRpb25hbCB0aGlyZAogJSBhcmcgYXMgdGV4dCB0byBkaXNwbGF5IGluc3RlYWQgb2YgKHJhdGhlciB0aGFuIGluIGFkZGl0aW9uIHRvKSB0aGUgdXJsCkBAIC0yNzEwLDEwICsyNjk0LDYgQEAKICAgXGxldFxlbWFpbD1cdXJlZgogXGZpCiAKLSUgQGtiZCBpcyBsaWtlIEBjb2RlLCBleGNlcHQgdGhhdCBpZiB0aGUgYXJndW1lbnQgaXMganVzdCBvbmUgQGtleSBjb21tYW5kLAotJSB0aGVuIEBrYmQgaGFzIG5vIGVmZmVjdC4KLVxkZWZca2JkIzF7e1xzZXR1cG1hcmt1cHN0eWxle2tiZH1cZGVmXGxvb2t7IzF9XGV4cGFuZGFmdGVyXGtiZGZvb1xsb29rPz9ccGFyfX0KLQogJSBAa2JkaW5wdXRzdHlsZSAtLSBhcmcgaXMgYGRpc3RpbmN0JyAoQGtiZCB1c2VzIHNsYW50ZWQgdHR5IGZvbnQgYWx3YXlzKSwKICUgICBgZXhhbXBsZScgKEBrYmQgdXNlcyB0dHNsIG9ubHkgaW5zaWRlIG9mIEBleGFtcGxlIGFuZCBmcmllbmRzKSwKICUgICBvciBgY29kZScgKEBrYmQgdXNlcyBub3JtYWwgdHR5IGZvbnQgYWx3YXlzKS4KQEAgLTI3MzcsMTYgKzI3MTcsMzYgQEAKICUgRGVmYXVsdCBpcyBgZGlzdGluY3QnLgogXGtiZGlucHV0c3R5bGUgZGlzdGluY3QKIAotXGRlZlx4a2V5e1xrZXl9Ci1cZGVmXGtiZGZvbyMxIzIjM1xwYXJ7XGRlZlxvbmV7IzF9XGRlZlx0aHJlZXsjM31cZGVmXHRocmVleHs/P30lCi1caWZ4XG9uZVx4a2V5XGlmeFx0aHJlZXhcdGhyZWUgXGtleXsjMn0lCi1cZWxzZXtcdGNsb3Nle1xrYmRmb250XHNldHVwbWFya3Vwc3R5bGV7a2JkfVxsb29rfX1cZmkKLVxlbHNle1x0Y2xvc2V7XGtiZGZvbnRcc2V0dXBtYXJrdXBzdHlsZXtrYmR9XGxvb2t9fVxmaX0KKyUgQGtiZCBpcyBsaWtlIEBjb2RlLCBleGNlcHQgdGhhdCBpZiB0aGUgYXJndW1lbnQgaXMganVzdCBvbmUgQGtleSBjb21tYW5kLAorJSB0aGVuIEBrYmQgaGFzIG5vIGVmZmVjdC4KK1xkZWZca2JkIzF7e1xkZWZcbG9va3sjMX1cZXhwYW5kYWZ0ZXJca2Jkc3ViXGxvb2s/P1xwYXJ9fQogCi0lIEZvciBAaW5kaWNhdGV1cmwsIEBlbnYsIEBjb21tYW5kIHF1b3RlcyBzZWVtIHVubmVjZXNzYXJ5LCBzbyB1c2UgXGNvZGUuCi1cbGV0XGluZGljYXRldXJsPVxjb2RlCi1cbGV0XGVudj1cY29kZQotXGxldFxjb21tYW5kPVxjb2RlCitcZGVmXHhrZXl7XGtleX0KK1xkZWZca2Jkc3ViIzEjMiMzXHBhcnslCisgIFxkZWZcb25leyMxfVxkZWZcdGhyZWV7IzN9XGRlZlx0aHJlZXh7Pz99JQorICBcaWZ4XG9uZVx4a2V5XGlmeFx0aHJlZXhcdGhyZWUgXGtleXsjMn0lCisgIFxlbHNle1x0Y2xvc2V7XGtiZGZvbnRcc2V0dXBtYXJrdXBzdHlsZXtrYmR9XGxvb2t9fVxmaQorICBcZWxzZXtcdGNsb3Nle1xrYmRmb250XHNldHVwbWFya3Vwc3R5bGV7a2JkfVxsb29rfX1cZmkKK30KKworJSBkZWZpbml0aW9uIG9mIEBrZXkgdGhhdCBwcm9kdWNlcyBhIGxvemVuZ2UuICBEb2Vzbid0IGFkanVzdCB0byB0ZXh0IHNpemUuCislXHNldGZvbnRca2V5cm1ccm1zaGFwZXs4fXsxMDAwfXtPVDF9CislXGZvbnRca2V5c3k9Y21zeTkKKyVcZGVmXGtleSMxe3tca2V5cm1cdGV4dGZvbnQyPVxrZXlzeSBcbGVhdmV2bW9kZVxoYm94eyUKKyUgIFxyYWlzZTAuNHB0XGhib3h7XGFuZ2xlbGVmdH1ca2Vybi0uMDhlbVx2dG9weyUKKyUgICAgXHZib3h7XGhydWxlXGtlcm4tMC40cHQKKyUgICAgIFxoYm94e1xyYWlzZTAuNHB0XGhib3h7XHZwaGFudG9te1xhbmdsZWxlZnR9fSMxfX0lCislICAgIFxrZXJuLTAuNHB0XGhydWxlfSUKKyUgIFxrZXJuLS4wNmVtXHJhaXNlMC40cHRcaGJveHtcYW5nbGVyaWdodH19fX0KKworJSBkZWZpbml0aW9uIG9mIEBrZXkgd2l0aCBubyBsb3plbmdlLiAgSWYgdGhlIGN1cnJlbnQgZm9udCBpcyBhbHJlYWR5CislIG1vbm9zcGFjZSwgZG9uJ3QgY2hhbmdlIGl0OyB0aGF0IHdheSwgd2UgcmVzcGVjdCBAa2JkaW5wdXRzdHlsZS4gIEJ1dAorJSBpZiBpdCBpc24ndCBtb25vc3BhY2UsIHRoZW4gdXNlIFx0dC4KKyUKK1xkZWZca2V5IzF7e1xzZXR1cG1hcmt1cHN0eWxle2tleX0lCisgIFxub2h5cGhlbmF0aW9uCisgIFxpZm1vbm9zcGFjZVxlbHNlXHR0XGZpCisgICMxfVxudWxsfQogCiAlIEBjbGlja3NlcXVlbmNle0ZpbGUgQGNsaWNre30gT3BlbiAuLi59CiBcZGVmXGNsaWNrc2VxdWVuY2UjMXtcYmVnaW5ncm91cCAjMVxlbmRncm91cH0KQEAgLTI4NTQsNiArMjg1NCw5IEBACiAgIH0KIH0KIAorJSBjdHJsIGlzIG5vIGxvbmdlciBhIFRleGluZm8gY29tbWFuZCwgYnV0IGxlYXZlIHRoaXMgZGVmaW5pdGlvbiBmb3IgZnVuLgorXGRlZlxjdHJsICMxe3tcdHQgXHJhd2JhY2tzbGFzaCBcaGF0fSMxfQorCiAlIEBpbmxpbmVmbXR7Rk1UTkFNRSxQUk9DRVNTRUQtVEVYVH0gYW5kIEBpbmxpbmVyYXd7Rk1UTkFNRSxSQVctVEVYVH0uCiAlIElnbm9yZSB1bmxlc3MgRk1UTkFNRSA9PSB0ZXg7IHRoZW4gaXQgaXMgbGlrZSBAaWZ0ZXggYW5kIEB0ZXgsCiAlIGV4Y2VwdCBzcGVjaWZpZWQgYXMgYSBub3JtYWwgYnJhY2VkIGFyZywgc28gbm8gbmV3bGluZXMgdG8gd29ycnkgYWJvdXQuCkBAIC0zMTQ0LDEyICszMTQ3LDE3IEBACiAgICUgaG9wZWZ1bGx5IG5vYm9keSB3aWxsIG5vdGljZS9jYXJlLgogICBcZWRlZlxlY3NpemV7XGNzbmFtZVxjdXJmb250c2l6ZSBlY3NpemVcZW5kY3NuYW1lfSUKICAgXGVkZWZcbm9taW5hbHNpemV7XGNzbmFtZVxjdXJmb250c2l6ZSBub21pbmFsc2l6ZVxlbmRjc25hbWV9JQotICBcaWZ4XGN1cmZvbnRzdHlsZVxiZnN0eWxlbmFtZQotICAgICUgYm9sZDoKLSAgICBcZm9udFx0aGlzZWNmb250ID0gZWNiXGlmdXNpbmdpdHtpfXt4fVxlY3NpemUgXHNwYWNlIGF0IFxub21pbmFsc2l6ZQorICBcaWZtb25vc3BhY2UKKyAgICAlIHR5cGV3cml0ZXI6CisgICAgXGZvbnRcdGhpc2VjZm9udCA9IGVjdHRcZWNzaXplIFxzcGFjZSBhdCBcbm9taW5hbHNpemUKICAgXGVsc2UKLSAgICAlIHJlZ3VsYXI6Ci0gICAgXGZvbnRcdGhpc2VjZm9udCA9IGVjXGlmdXNpbmdpdHt0aX17cm19XGVjc2l6ZSBcc3BhY2UgYXQgXG5vbWluYWxzaXplCisgICAgXGlmeFxjdXJmb250c3R5bGVcYmZzdHlsZW5hbWUKKyAgICAgICUgYm9sZDoKKyAgICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY2JcaWZ1c2luZ2l0e2l9e3h9XGVjc2l6ZSBcc3BhY2UgYXQgXG5vbWluYWxzaXplCisgICAgXGVsc2UKKyAgICAgICUgcmVndWxhcjoKKyAgICAgIFxmb250XHRoaXNlY2ZvbnQgPSBlY1xpZnVzaW5naXR7dGl9e3JtfVxlY3NpemUgXHNwYWNlIGF0IFxub21pbmFsc2l6ZQorICAgIFxmaQogICBcZmkKICAgXHRoaXNlY2ZvbnQKIH0KQEAgLTMyNjIsNiArMzI3MCwyMCBAQAogICBcZmluaXNoZWR0aXRsZXBhZ2V0cnVlCiB9CiAKKyUgU2V0dGluZ3MgdXNlZCBmb3IgdHlwZXNldHRpbmcgdGl0bGVzOiBubyBoeXBoZW5hdGlvbiwgbm8gaW5kZW50YXRpb24sCislIGRvbid0IHdvcnJ5IG11Y2ggYWJvdXQgc3BhY2luZywgcmFnZ2VkIHJpZ2h0LiAgVGhpcyBzaG91bGQgYmUgdXNlZAorJSBpbnNpZGUgYSBcdmJveCwgYW5kIGZvbnRzIG5lZWQgdG8gYmUgc2V0IGFwcHJvcHJpYXRlbHkgZmlyc3QuICBCZWNhdXNlCislIGl0IGlzIGFsd2F5cyB1c2VkIGZvciB0aXRsZXMsIG5vdGhpbmcgZWxzZSwgd2UgY2FsbCBccm1pc2JvbGQuICBccGFyCislIHNob3VsZCBiZSBzcGVjaWZpZWQgYmVmb3JlIHRoZSBlbmQgb2YgdGhlIFx2Ym94LCBzaW5jZSBhIHZib3ggaXMgYSBncm91cC4KKyUgCitcZGVmXHJhZ2dlZHRpdGxlc2V0dGluZ3N7JQorICBccm1pc2JvbGQKKyAgXGh5cGhlbnBlbmFsdHk9MTAwMDAKKyAgXHBhcmluZGVudD0wcHQKKyAgXHRvbGVyYW5jZT01MDAwCisgIFxwdGV4cmFnZ2VkcmlnaHQKK30KKwogJSBNYWNyb3MgdG8gYmUgdXNlZCB3aXRoaW4gQHRpdGxlcGFnZToKIAogXGxldFxzdWJ0aXRsZXJtPVx0ZW5ybQpAQCAtMzI2OSw3ICszMjkxLDcgQEAKIAogXHBhcnNlYXJnZGVmXHRpdGxleyUKICAgXGNoZWNrZW52XHRpdGxlcGFnZQotICBcbGVmdGxpbmV7XHRpdGxlZm9udHNccm1pc2JvbGQgIzF9CisgIFx2Ym94e1x0aXRsZWZvbnRzIFxyYWdnZWR0aXRsZXNldHRpbmdzICMxXHBhcn0lCiAgICUgcHJpbnQgYSBydWxlIGF0IHRoZSBwYWdlIGJvdHRvbSBhbHNvLgogICBcZmluaXNoZWR0aXRsZXBhZ2VmYWxzZQogICBcdnNraXA0cHQgXGhydWxlIGhlaWdodCA0cHQgd2lkdGggXGhzaXplIFx2c2tpcDRwdApAQCAtNDE2Niw3ICs0MTg4LDcgQEAKICAgICAlIC4uLiwgYnV0IHdlIG1pZ2h0IGVuZCB1cCB3aXRoIGFjdGl2ZSBvbmVzIGluIHRoZSBhcmd1bWVudCBpZgogICAgICUgd2UncmUgY2FsbGVkIGZyb20gQGNvZGUsIGFzIEBjb2Rle0B2YWx1ZXtmb28tYmFyX319LCB0aG91Z2guCiAgICAgJSBTbyBcbGV0IHRoZW0gdG8gdGhlaXIgbm9ybWFsIGVxdWl2YWxlbnRzLgotICAgIFxsZXQtXHJlYWxkYXNoIFxsZXRfXG5vcm1hbHVuZGVyc2NvcmUKKyAgICBcbGV0LVxub3JtYWxkYXNoIFxsZXRfXG5vcm1hbHVuZGVyc2NvcmUKICAgfQogfQogCkBAIC00MjA2LDcgKzQyMjgsNyBAQAogfQogXGRlZlxpZnNldGZhaWx7XGRvaWdub3Jle2lmc2V0fX0KIAotJSBAaWZjbGVhciBWQVIgLi4uIEBlbmQgaWZjbGVhciByZWFkcyB0aGUgYC4uLicgaWZmIFZBUiBoYXMgbmV2ZXIgYmVlbgorJSBAaWZjbGVhciBWQVIgLi4uIEBlbmQgZXhlY3V0ZXMgdGhlIGAuLi4nIGlmZiBWQVIgaGFzIG5ldmVyIGJlZW4KICUgZGVmaW5lZCB3aXRoIEBzZXQsIG9yIGhhcyBiZWVuIHVuZGVmaW5lZCB3aXRoIEBjbGVhci4KICUKICUgVGhlIGBcZWxzZScgaW5zaWRlIHRoZSBgXGRvaWZzZXQnIHBhcmFtZXRlciBpcyBhIHRyaWNrIHRvIHJldXNlIHRoZQpAQCAtNDIxNyw2ICs0MjM5LDM1IEBACiBcZGVmXGlmY2xlYXJ7XHBhcnNlYXJne1xkb2lmc2V0e1xlbHNlIFxsZXRcbmV4dD1caWZjbGVhcmZhaWx9fX0KIFxkZWZcaWZjbGVhcmZhaWx7XGRvaWdub3Jle2lmY2xlYXJ9fQogCislIEBpZmNvbW1hbmRpc2RlZmluZWQgQ01EIC4uLiBAZW5kIGV4ZWN1dGVzIHRoZSBgLi4uJyBpZiBDTUQgKHdyaXR0ZW4KKyUgd2l0aG91dCB0aGUgQCkgaXMgaW4gZmFjdCBkZWZpbmVkLiAgV2UgY2FuIG9ubHkgZmVhc2libHkgY2hlY2sgYXQgdGhlCislIFRlWCBsZXZlbCwgc28gc29tZXRoaW5nIGxpa2UgYG1hdGhjb2RlJyBpcyBnb2luZyB0byBjb25zaWRlcmVkCislIGRlZmluZWQgZXZlbiB0aG91Z2ggaXQgaXMgbm90IGEgVGV4aW5mbyBjb21tYW5kLgorJSAKK1xtYWtlY29uZHtpZmNvbW1hbmRkZWZpbmVkfQorXGRlZlxpZmNvbW1hbmRkZWZpbmVke1xwYXJzZWFyZ3tcZG9pZmNtZGRlZmluZWR7XGxldFxuZXh0PVxpZmNtZGRlZmluZWRmYWlsfX19CislCitcZGVmXGRvaWZjbWRkZWZpbmVkIzEjMnt7JQorICAgIFxtYWtldmFsdWVleHBhbmRhYmxlCisgICAgXGxldFxuZXh0PVxlbXB0eQorICAgIFxleHBhbmRhZnRlclxpZnhcY3NuYW1lICMyXGVuZGNzbmFtZVxyZWxheAorICAgICAgIzElIElmIG5vdCBkZWZpbmVkLCBcbGV0XG5leHQgYXMgYWJvdmUuCisgICAgXGZpCisgICAgXGV4cGFuZGFmdGVyCisgIH1cbmV4dAorfQorXGRlZlxpZmNtZGRlZmluZWRmYWlse1xkb2lnbm9yZXtpZmNvbW1hbmRkZWZpbmVkfX0KKworJSBAaWZjb21tYW5kbm90ZGVmaW5lZCBDTUQgLi4uIGhhbmRsZWQgc2ltaWxhciB0byBAaWZjbGVhciBhYm92ZS4KK1xtYWtlY29uZHtpZmNvbW1hbmRub3RkZWZpbmVkfQorXGRlZlxpZmNvbW1hbmRub3RkZWZpbmVkeyUKKyAgXHBhcnNlYXJne1xkb2lmY21kZGVmaW5lZHtcZWxzZSBcbGV0XG5leHQ9XGlmY21kbm90ZGVmaW5lZGZhaWx9fX0KK1xkZWZcaWZjbWRub3RkZWZpbmVkZmFpbHtcZG9pZ25vcmV7aWZjb21tYW5kbm90ZGVmaW5lZH19CisKKyUgU2V0IHRoZSBgdHhpY29tbWFuZGNvbmRpdGlvbmFscycgdmFyaWFibGUsIHNvIGRvY3VtZW50cyBoYXZlIGEgd2F5IHRvCislIHRlc3QgaWYgdGhlIEBpZmNvbW1hbmQuLi5kZWZpbmVkIGNvbmRpdGlvbmFscyBhcmUgYXZhaWxhYmxlLgorXHNldCB0eGljb21tYW5kY29uZGl0aW9uYWxzCisKICUgQGRpcmNhdGVnb3J5IENBVEVHT1JZICAtLSBzcGVjaWZ5IGEgY2F0ZWdvcnkgb2YgdGhlIGRpciBmaWxlCiAlIHdoaWNoIHRoaXMgZmlsZSBzaG91bGQgYmVsb25nIHRvLiAgSWdub3JlIHRoaXMgaW4gVGVYLgogXGxldFxkaXJjYXRlZ29yeT1cY29tbWVudApAQCAtNTU0MywxNCArNTU5NCw2IEBACiAKICUgRGVmaW5lIEBtYWpvcmhlYWRpbmcsIEBoZWFkaW5nIGFuZCBAc3ViaGVhZGluZwogCi0lIE5PVEUgb24gdXNlIG9mIFx2Ym94IGZvciBjaGFwdGVyIGhlYWRpbmdzLCBzZWN0aW9uIGhlYWRpbmdzLCBhbmQgc3VjaDoKLSUgICAgICAgMSkgV2UgdXNlIFx2Ym94IHJhdGhlciB0aGFuIHRoZSBlYXJsaWVyIFxsaW5lIHRvIHBlcm1pdAotJSAgICAgICAgICBvdmVybG9uZyBoZWFkaW5ncyB0byBmb2xkLgotJSAgICAgICAyKSBcaHlwaGVucGVuYWx0eSBpcyBzZXQgdG8gMTAwMDAgYmVjYXVzZSBoeXBoZW5hdGlvbiBpbiBhCi0lICAgICAgICAgIGhlYWRpbmcgaXMgb2Jub3hpb3VzOyB0aGlzIGZvcmJpZHMgaXQuCi0lICAgICAgIDMpIExpa2V3aXNlLCBoZWFkaW5ncyBsb29rIGJlc3QgaWYgbm8gXHBhcmluZGVudCBpcyB1c2VkLCBhbmQKLSUgICAgICAgICAgaWYganVzdGlmaWNhdGlvbiBpcyBub3QgYXR0ZW1wdGVkLiAgSGVuY2UgXHJhZ2dlZHJpZ2h0LgotCiBcZGVmXG1ham9yaGVhZGluZ3slCiAgIHtcYWR2YW5jZVxjaGFwaGVhZGluZ3NraXAgYnkgMTBwdCBcY2hhcGJyZWFrIH0lCiAgIFxwYXJzZWFyZ1xjaGFwaGVhZGluZ3p6egpAQCAtNTU1OCwxMCArNTYwMSw4IEBACiAKIFxkZWZcY2hhcGhlYWRpbmd7XGNoYXBicmVhayBccGFyc2VhcmdcY2hhcGhlYWRpbmd6enp9CiBcZGVmXGNoYXBoZWFkaW5nenp6IzF7JQotICB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAotICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxwdGV4cmFnZ2VkcmlnaHQKLSAgICAgICAgICAgICAgICAgICAgXHJtaXNib2xkICMxXGhmaWxsfX0lCi0gIFxiaWdza2lwIFxwYXJccGVuYWx0eSAyMDBccmVsYXgKKyAgXHZib3h7XGNoYXBmb250cyBccmFnZ2VkdGl0bGVzZXR0aW5ncyAjMVxwYXJ9JQorICBcbm9icmVha1xiaWdza2lwIFxub2JyZWFrCiAgIFxzdXBwcmVzc2ZpcnN0cGFyYWdyYXBoaW5kZW50CiB9CiAKQEAgLTU3MjAsOCArNTc2MSw3IEBACiAgICAgJQogICAgICUgVHlwZXNldCB0aGUgYWN0dWFsIGhlYWRpbmcuCiAgICAgXG5vYnJlYWsgJSBBdm9pZCBwYWdlIGJyZWFrcyBhdCB0aGUgaW50ZXJsaW5lIGdsdWUuCi0gICAgXHZib3h7XGh5cGhlbnBlbmFsdHk9MTAwMDAgXHRvbGVyYW5jZT01MDAwIFxwYXJpbmRlbnQ9MHB0IFxwdGV4cmFnZ2VkcmlnaHQKLSAgICAgICAgICBcaGFuZ2luZGVudD1cd2QwIFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUKKyAgICBcdmJveHtccmFnZ2VkdGl0bGVzZXR0aW5ncyBcaGFuZ2luZGVudD1cd2QwIFxjZW50ZXJwYXJhbWV0ZXJzbWF5YmUKICAgICAgICAgICBcdW5oYm94MCAjMVxwYXJ9JQogICB9JQogICBcbm9icmVha1xiaWdza2lwICUgbm8gcGFnZSBicmVhayBhZnRlciBhIGNoYXB0ZXIgdGl0bGUKQEAgLTU3NDMsMTggKzU3ODMsMTggQEAKIFxkZWZcc2V0Y2hhcHRlcnN0eWxlICMxIHtcY3NuYW1lIENIQVBGIzFcZW5kY3NuYW1lfQogJQogXGRlZlx1bm5jaGZvcGVuICMxeyUKLVxjaGFwb2RkcGFnZSB7XGNoYXBmb250cyBcdmJveHtcaHlwaGVucGVuYWx0eT0xMDAwMFx0b2xlcmFuY2U9NTAwMAotICAgICAgICAgICAgICAgICAgICAgICBccGFyaW5kZW50PTBwdFxwdGV4cmFnZ2VkcmlnaHQKLSAgICAgICAgICAgICAgICAgICAgICAgXHJtaXNib2xkICMxXGhmaWxsfX1cYmlnc2tpcCBccGFyXG5vYnJlYWsKKyAgXGNoYXBvZGRwYWdlCisgIFx2Ym94e1xjaGFwZm9udHMgXHJhZ2dlZHRpdGxlc2V0dGluZ3MgIzFccGFyfSUKKyAgXG5vYnJlYWtcYmlnc2tpcFxub2JyZWFrCiB9CiBcZGVmXGNoZm9wZW4gIzEjMntcY2hhcG9kZHBhZ2Uge1xjaGFwZm9udHMKIFx2Ym94IHRvIDNpbntcdmZpbCBcaGJveCB0b1xoc2l6ZXtcaGZpbCAjMn0gXGhib3ggdG9caHNpemV7XGhmaWwgIzF9IFx2ZmlsfX0lCiBccGFyXHBlbmFsdHkgNTAwMCAlCiB9CiBcZGVmXGNlbnRlcmNoZm9wZW4gIzF7JQotXGNoYXBvZGRwYWdlIHtcY2hhcGZvbnRzIFx2Ym94e1xoeXBoZW5wZW5hbHR5PTEwMDAwXHRvbGVyYW5jZT01MDAwCi0gICAgICAgICAgICAgICAgICAgICAgIFxwYXJpbmRlbnQ9MHB0Ci0gICAgICAgICAgICAgICAgICAgICAgIFxoZmlsbCB7XHJtaXNib2xkICMxfVxoZmlsbH19XGJpZ3NraXAgXHBhclxub2JyZWFrCisgIFxjaGFwb2RkcGFnZQorICBcdmJveHtcY2hhcGZvbnRzIFxyYWdnZWR0aXRsZXNldHRpbmdzIFxoZmlsbCAjMVxoZmlsbH0lCisgIFxub2JyZWFrXGJpZ3NraXAgXG5vYnJlYWsKIH0KIFxkZWZcQ0hBUEZvcGVueyUKICAgXGdsb2JhbFxsZXRcY2hhcG1hY3JvPVxjaGZvcGVuCkBAIC02NTIwLDE2ICs2NTYwLDkgQEAKIFxtYWtlZGlzcGVudmRlZntxdW90YXRpb259e1xxdW90YXRpb25zdGFydH0KICUKIFxkZWZccXVvdGF0aW9uc3RhcnR7JQotICB7XHBhcnNraXA9MHB0IFxhYm92ZWVudmJyZWFrfSUgYmVjYXVzZSBcYWJvdmVlbnZicmVhayBpbnNlcnRzIFxwYXJza2lwCi0gIFxwYXJpbmRlbnQ9MHB0Ci0gICUKLSAgJSBAY2FydG91Y2hlIGRlZmluZXMgXG5vbmFycm93aW5nIHRvIGluaGliaXQgbmFycm93aW5nIGF0IG5leHQgbGV2ZWwgZG93bi4KKyAgXGluZGVudGVkYmxvY2tzdGFydCAlIHNhbWUgYXMgXGluZGVudGVkYmxvY2ssIGJ1dCBpbmNyZWFzZSByaWdodCBtYXJnaW4gdG9vLgogICBcaWZ4XG5vbmFycm93aW5nXHJlbGF4Ci0gICAgXGFkdmFuY2VcbGVmdHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKICAgICBcYWR2YW5jZVxyaWdodHNraXAgYnkgXGxpc3BuYXJyb3dpbmcKLSAgICBcZXhkZW50YW1vdW50ID0gXGxpc3BuYXJyb3dpbmcKLSAgXGVsc2UKLSAgICBcbGV0XG5vbmFycm93aW5nID0gXHJlbGF4CiAgIFxmaQogICBccGFyc2VhcmdccXVvdGF0aW9ubGFiZWwKIH0KQEAgLTY1NTUsNiArNjU4OCwzMiBAQAogICBcZmkKIH0KIAorJSBAaW5kZW50ZWRibG9jayBpcyBsaWtlIEBxdW90YXRpb24sIGJ1dCBpbmRlbnRzIG9ubHkgb24gdGhlIGxlZnQgYW5kCislIGhhcyBubyBvcHRpb25hbCBhcmd1bWVudC4KKyUgCitcbWFrZWRpc3BlbnZkZWZ7aW5kZW50ZWRibG9ja317XGluZGVudGVkYmxvY2tzdGFydH0KKyUKK1xkZWZcaW5kZW50ZWRibG9ja3N0YXJ0eyUKKyAge1xwYXJza2lwPTBwdCBcYWJvdmVlbnZicmVha30lIGJlY2F1c2UgXGFib3ZlZW52YnJlYWsgaW5zZXJ0cyBccGFyc2tpcAorICBccGFyaW5kZW50PTBwdAorICAlCisgICUgQGNhcnRvdWNoZSBkZWZpbmVzIFxub25hcnJvd2luZyB0byBpbmhpYml0IG5hcnJvd2luZyBhdCBuZXh0IGxldmVsIGRvd24uCisgIFxpZnhcbm9uYXJyb3dpbmdccmVsYXgKKyAgICBcYWR2YW5jZVxsZWZ0c2tpcCBieSBcbGlzcG5hcnJvd2luZworICAgIFxleGRlbnRhbW91bnQgPSBcbGlzcG5hcnJvd2luZworICBcZWxzZQorICAgIFxsZXRcbm9uYXJyb3dpbmcgPSBccmVsYXgKKyAgXGZpCit9CisKKyUgS2VlcCBhIG5vbnplcm8gcGFyc2tpcCBmb3IgdGhlIGVudmlyb25tZW50LCBzaW5jZSB3ZSdyZSBkb2luZyBub3JtYWwgZmlsbGluZy4KKyUKK1xkZWZcRWluZGVudGVkYmxvY2t7JQorICBccGFyCisgIHtccGFyc2tpcD0wcHQgXGFmdGVyZW52YnJlYWt9JQorfQorXGRlZlxFc21hbGxpbmRlbnRlZGJsb2Nre1xFaW5kZW50ZWRibG9ja30KKwogCiAlIExhVGVYLWxpa2UgQHZlcmJhdGltLi4uQGVuZCB2ZXJiYXRpbSBhbmQgQHZlcmJ7PGNoYXI+Li4uPGNoYXI+fQogJSBJZiB3ZSB3YW50IHRvIGFsbG93IGFueSA8Y2hhcj4gYXMgZGVsaW1pdGVyLApAQCAtNzAzMyw3ICs3MDkyLDEwIEBACiAgIFxkZiBcc2wgXGh5cGhlbmNoYXJcZm9udD0wCiAgICUKICAgJSBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgYW4gYXJndW1lbnQgaGFzIHR3byBkYXNoZXMgKGZvciBpbnN0YW5jZSksIHdlCi0gICUgd2FudCBhIHdheSB0byBnZXQgdHRzbC4gIExldCdzIHRyeSBAdmFyIGZvciB0aGF0LgorICAlIHdhbnQgYSB3YXkgdG8gZ2V0IHR0c2wuICBXZSB1c2VkIHRvIHJlY29tbWVuZCBAdmFyIGZvciB0aGF0LCBzbworICAlIGxlYXZlIHRoZSBjb2RlIGluLCBidXQgaXQncyBzdHJhbmdlIGZvciBAdmFyIHRvIGxlYWQgdG8gdHlwZXdyaXRlci4KKyAgJSBOb3dhZGF5cyB3ZSByZWNvbW1lbmQgQGNvZGUsIHNpbmNlIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSB0dHNsIGh5cGhlbgorICAlIGFuZCBhIHR0IGh5cGhlbiBpcyBwcmV0dHkgdGlueS4gIEBjb2RlIGFsc28gZGlzYWJsZXMgP2AgIWAuCiAgIFxkZWZcdmFyIyMxe3tcc2V0dXBtYXJrdXBzdHlsZXt2YXJ9XHR0c2xhbnRlZHsjIzF9fX0lCiAgICMxJQogICBcc2xcaHlwaGVuY2hhclxmb250PTQ1CkBAIC05OTMxLDIyICs5OTkzLDI2IEBACiBAZ2RlZkBvdGhlcmJhY2tzbGFzaHtAbGV0XD1AcmVhbGJhY2tzbGFzaH0KIAogJSBTYW1lIGFzIEB0dXJub2ZmYWN0aXZlIGV4Y2VwdCBvdXRwdXRzIFwgYXMge1x0dFxjaGFyYFxcfSBpbnN0ZWFkIG9mCi0lIHRoZSBsaXRlcmFsIGNoYXJhY3RlciBgXCcuCislIHRoZSBsaXRlcmFsIGNoYXJhY3RlciBgXCcuICBBbHNvIHJldmVydCAtIHRvIGl0cyBub3JtYWwgY2hhcmFjdGVyLCBpbgorJSBjYXNlIHRoZSBhY3RpdmUgLSBmcm9tIGNvZGUgaGFzIHNsaXBwZWQgaW4uCiAlCi1AZGVmQG5vcm1hbHR1cm5vZmZhY3RpdmV7JQotICBAbGV0Ij1Abm9ybWFsZG91YmxlcXVvdGUKLSAgQGxldCQ9QG5vcm1hbGRvbGxhciAlJCBmb250LWxvY2sgZml4Ci0gIEBsZXQrPUBub3JtYWxwbHVzCi0gIEBsZXQ8PUBub3JtYWxsZXNzCi0gIEBsZXQ+PUBub3JtYWxncmVhdGVyCi0gIEBsZXRcPUBub3JtYWxiYWNrc2xhc2gKLSAgQGxldF49QG5vcm1hbGNhcmV0Ci0gIEBsZXRfPUBub3JtYWx1bmRlcnNjb3JlCi0gIEBsZXR8PUBub3JtYWx2ZXJ0aWNhbGJhcgotICBAbGV0fj1Abm9ybWFsdGlsZGUKLSAgQG1hcmt1cHNldHVwbHFkZWZhdWx0Ci0gIEBtYXJrdXBzZXR1cHJxZGVmYXVsdAotICBAdW5zZXBzcGFjZXMKK3tAY2F0Y29kZWAtID0gQGFjdGl2ZQorIEBnZGVmQG5vcm1hbHR1cm5vZmZhY3RpdmV7JQorICAgQGxldC09QG5vcm1hbGRhc2gKKyAgIEBsZXQiPUBub3JtYWxkb3VibGVxdW90ZQorICAgQGxldCQ9QG5vcm1hbGRvbGxhciAlJCBmb250LWxvY2sgZml4CisgICBAbGV0Kz1Abm9ybWFscGx1cworICAgQGxldDw9QG5vcm1hbGxlc3MKKyAgIEBsZXQ+PUBub3JtYWxncmVhdGVyCisgICBAbGV0XD1Abm9ybWFsYmFja3NsYXNoCisgICBAbGV0Xj1Abm9ybWFsY2FyZXQKKyAgIEBsZXRfPUBub3JtYWx1bmRlcnNjb3JlCisgICBAbGV0fD1Abm9ybWFsdmVydGljYWxiYXIKKyAgIEBsZXR+PUBub3JtYWx0aWxkZQorICAgQG1hcmt1cHNldHVwbHFkZWZhdWx0CisgICBAbWFya3Vwc2V0dXBycWRlZmF1bHQKKyAgIEB1bnNlcHNwYWNlcworIH0KIH0KIAogJSBNYWtlIF8gYW5kICsgXG90aGVyIGNoYXJhY3RlcnMsIHRlbXBvcmFyaWx5LgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9tc3ZjL2ZmaS5jCmluZGV4IDAwZWY5N2YuLjk2NmUwNWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9mZmkuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvZmZpLmMKQEAgLTEwMiw2ICsxMDIsMTUgQEAKIAkgICAgICBGRklfQVNTRVJUKDApOwogCSAgICB9CiAJfQorI2lmZGVmIF9XSU42NAorICAgICAgZWxzZSBpZiAoeiA+IDgpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBPbiBXaW42NCwgaWYgYSBzaW5nbGUgYXJndW1lbnQgdGFrZXMgbW9yZSB0aGFuIDggYnl0ZXMsCisgICAgICAgICAgICAgdGhlbiBpdCBpcyBhbHdheXMgcGFzc2VkIGJ5IHJlZmVyZW5jZS4gKi8KKyAgICAgICAgICAqKHZvaWQgKiopYXJncCA9ICpwX2FyZ3Y7CisgICAgICAgICAgeiA9IDg7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgZWxzZQogCXsKIAkgIG1lbWNweShhcmdwLCAqcF9hcmd2LCB6KTsKQEAgLTEyNCw3ICsxMzMsNiBAQAogICBzd2l0Y2ggKGNpZi0+cnR5cGUtPnR5cGUpCiAgICAgewogICAgIGNhc2UgRkZJX1RZUEVfVk9JRDoKLSAgICBjYXNlIEZGSV9UWVBFX1NUUlVDVDoKICAgICBjYXNlIEZGSV9UWVBFX1NJTlQ2NDoKICAgICBjYXNlIEZGSV9UWVBFX0ZMT0FUOgogICAgIGNhc2UgRkZJX1RZUEVfRE9VQkxFOgpAQCAtMTMyLDYgKzE0MCwxOCBAQAogICAgICAgY2lmLT5mbGFncyA9ICh1bnNpZ25lZCkgY2lmLT5ydHlwZS0+dHlwZTsKICAgICAgIGJyZWFrOwogCisgICAgY2FzZSBGRklfVFlQRV9TVFJVQ1Q6CisgICAgICAvKiBNU1ZDIHJldHVybnMgc21hbGwgc3RydWN0dXJlcyBpbiByZWdpc3RlcnMuICBQdXQgaW4gY2lmLT5mbGFncworICAgICAgICAgdGhlIHZhbHVlIEZGSV9UWVBFX1NUUlVDVCBvbmx5IGlmIHRoZSBzdHJ1Y3R1cmUgaXMgYmlnIGVub3VnaDsKKyAgICAgICAgIG90aGVyd2lzZSwgcHV0IHRoZSA0LSBvciA4LWJ5dGVzIGludGVnZXIgdHlwZS4gKi8KKyAgICAgIGlmIChjaWYtPnJ0eXBlLT5zaXplIDw9IDQpCisgICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9JTlQ7CisgICAgICBlbHNlIGlmIChjaWYtPnJ0eXBlLT5zaXplIDw9IDgpCisgICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TSU5UNjQ7CisgICAgICBlbHNlCisgICAgICAgIGNpZi0+ZmxhZ3MgPSBGRklfVFlQRV9TVFJVQ1Q7CisgICAgICBicmVhazsKKwogICAgIGNhc2UgRkZJX1RZUEVfVUlOVDY0OgogI2lmZGVmIF9XSU42NAogICAgIGNhc2UgRkZJX1RZUEVfUE9JTlRFUjoKQEAgLTIwMSw4ICsyMjEsNyBAQAogI2Vsc2UKICAgICBjYXNlIEZGSV9TWVNWOgogICAgICAgLypALXVzZWRlZkAqLwotICAgICAgLyogRnVuY3Rpb24gY2FsbCBuZWVkcyBhdCBsZWFzdCA0MCBieXRlcyBzdGFjayBzaXplLCBvbiB3aW42NCBBTUQ2NCAqLwotICAgICAgcmV0dXJuIGZmaV9jYWxsX0FNRDY0KGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzID8gY2lmLT5ieXRlcyA6IDQwLAorICAgICAgcmV0dXJuIGZmaV9jYWxsX0FNRDY0KGZmaV9wcmVwX2FyZ3MsICZlY2lmLCBjaWYtPmJ5dGVzLAogCQkJICAgY2lmLT5mbGFncywgZWNpZi5ydmFsdWUsIGZuKTsKICAgICAgIC8qQD11c2VkZWZAKi8KICAgICAgIGJyZWFrOwpAQCAtMjI3LDcgKzI0Niw3IEBACiAjZWxzZQogc3RhdGljIHZvaWQgX19mYXN0Y2FsbAogI2VuZGlmCi1mZmlfY2xvc3VyZV9TWVNWIChmZmlfY2xvc3VyZSAqY2xvc3VyZSwgaW50ICphcmdwKQorZmZpX2Nsb3N1cmVfU1lTViAoZmZpX2Nsb3N1cmUgKmNsb3N1cmUsIGNoYXIgKmFyZ3ApCiB7CiAgIC8vIHRoaXMgaXMgb3VyIHJldHVybiB2YWx1ZSBzdG9yYWdlCiAgIGxvbmcgZG91YmxlICAgIHJlczsKQEAgLTIzNyw3ICsyNTYsNyBAQAogICB2b2lkICAgICAgICAgKiphcmdfYXJlYTsKICAgdW5zaWduZWQgc2hvcnQgcnR5cGU7CiAgIHZvaWQgICAgICAgICAgKnJlc3AgPSAodm9pZCopJnJlczsKLSAgdm9pZCAqYXJncyA9ICZhcmdwWzFdOworICB2b2lkICphcmdzID0gYXJncCArIHNpemVvZih2b2lkKik7CiAKICAgY2lmICAgICAgICAgPSBjbG9zdXJlLT5jaWY7CiAgIGFyZ19hcmVhICAgID0gKHZvaWQqKikgYWxsb2NhIChjaWYtPm5hcmdzICogc2l6ZW9mICh2b2lkKikpOyAgCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvcHJlcF9jaWYuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9wcmVwX2NpZi5jCmluZGV4IDI2NTBmYTAuLmIwN2EyZTYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9wcmVwX2NpZi5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy9wcmVwX2NpZi5jCkBAIC0xMTYsOSArMTE2LDkgQEAKICNpZiAhZGVmaW5lZCBNNjhLICYmICFkZWZpbmVkIF9feDg2XzY0X18gJiYgIWRlZmluZWQgUzM5MAogICAvKiBNYWtlIHNwYWNlIGZvciB0aGUgcmV0dXJuIHN0cnVjdHVyZSBwb2ludGVyICovCiAgIGlmIChjaWYtPnJ0eXBlLT50eXBlID09IEZGSV9UWVBFX1NUUlVDVAotICAgICAgLyogTVNWQyByZXR1cm5zIHNtYWxsIHN0cnVjdHVyZXMgaW4gcmVnaXN0ZXJzLiAgQnV0IHdlIGhhdmUgYSBkaWZmZXJlbnQKLSAgICAgIHdvcmthcm91bmQ6IHByZXRlbmQgaW50MzIgb3IgaW50NjQgcmV0dXJuIHR5cGUsIGFuZCBjb252ZXJ0aW5nIHRvCi0gICAgICBzdHJ1Y3R1cmUgYWZ0ZXJ3YXJkcy4gKi8KKyNpZmRlZiBfV0lOMzIKKyAgICAgICYmIChjaWYtPnJ0eXBlLT5zaXplID4gOCkgIC8qIE1TVkMgcmV0dXJucyBzbWFsbCBzdHJ1Y3RzIGluIHJlZ2lzdGVycyAqLworI2VuZGlmCiAjaWZkZWYgU1BBUkMKICAgICAgICYmIChjaWYtPmFiaSAhPSBGRklfVjkgfHwgY2lmLT5ydHlwZS0+c2l6ZSA+IDMyKQogI2VuZGlmCkBAIC0xNDUsNiArMTQ1LDEwIEBACiAJICAgICAgJiYgY2lmLT5hYmkgIT0gRkZJX1Y5KSkKIAlieXRlcyArPSBzaXplb2Yodm9pZCopOwogICAgICAgZWxzZQorI2VsaWYgZGVmaW5lZCAoX1dJTjY0KQorICAgICAgaWYgKCgqcHRyKS0+dHlwZSA9PSBGRklfVFlQRV9TVFJVQ1QgJiYgKCgqcHRyKS0+c2l6ZSA+IDgpKQorCSAgICBieXRlcyArPSBzaXplb2Yodm9pZCopOworICAgICAgZWxzZQogI2VuZGlmCiAJewogI2lmICFkZWZpbmVkKF9NU0NfVkVSKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKQEAgLTE2OCw2ICsxNzIsMTIgQEAKICNlbmRpZgogICAgIH0KIAorI2lmZGVmIF9XSU42NAorICAvKiBGdW5jdGlvbiBjYWxsIG5lZWRzIGF0IGxlYXN0IDQwIGJ5dGVzIHN0YWNrIHNpemUsIG9uIHdpbjY0IEFNRDY0ICovCisgIGlmIChieXRlcyA8IDQwKQorICAgICAgYnl0ZXMgPSA0MDsKKyNlbmRpZgorCiAgIGNpZi0+Ynl0ZXMgPSBieXRlczsKIAogICAvKiBQZXJmb3JtIG1hY2hpbmUgZGVwZW5kZW50IGNpZiBwcm9jZXNzaW5nICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX21zdmMvdHlwZXMuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy90eXBlcy5jCmluZGV4IGRmMzIxOTAuLjQ0MzNhYzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy90eXBlcy5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfbXN2Yy90eXBlcy5jCkBAIC00Myw3ICs0Myw3IEBACiBGRklfSU5URUdSQUxfVFlQRURFRihmbG9hdCwgNCwgNCwgRkZJX1RZUEVfRkxPQVQpOwogCiAjaWYgZGVmaW5lZCBBTFBIQSB8fCBkZWZpbmVkIFNQQVJDNjQgfHwgZGVmaW5lZCBYODZfNjQgfHwgZGVmaW5lZCBTMzkwWCBcCi0gICAgfHwgZGVmaW5lZCBJQTY0CisgICAgfHwgZGVmaW5lZCBJQTY0IHx8IGRlZmluZWQgX1dJTjY0CiAKIEZGSV9JTlRFR1JBTF9UWVBFREVGKHBvaW50ZXIsIDgsIDgsIEZGSV9UWVBFX1BPSU5URVIpOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC9mZmkuYyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jCmluZGV4IGJmNDIwOTMuLjk2ODI2YjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L2ZmaS5jCkBAIC0zOCwxMiArMzgsMTMgQEAKIC8qQG91dEAqLwlmZmlfdHlwZSoJYXJnKQogewogLypALXVzZWRlZkAqLworCWZmaV90eXBlKioJcHRyOwogCiAJaWYgKGFyZyA9PSBOVUxMIHx8IGFyZy0+ZWxlbWVudHMgPT0gTlVMTCB8fAogCQlhcmctPnNpemUgIT0gMCB8fCBhcmctPmFsaWdubWVudCAhPSAwKQogCQlyZXR1cm4gRkZJX0JBRF9UWVBFREVGOwogCi0JZmZpX3R5cGUqKglwdHIgPSAmKGFyZy0+ZWxlbWVudHNbMF0pOworICAgIHB0ciA9ICYoYXJnLT5lbGVtZW50c1swXSk7CiAKIAl3aGlsZSAoKCpwdHIpICE9IE5VTEwpCiAJewpAQCAtMTM1LDE2ICsxMzYsMTYgQEAKIC8qQGRlcGVuZGVudEAqLyAvKkBvdXRAKi8gLypAcGFydGlhbEAqLyBmZmlfdHlwZSoJcnR5cGUsIAogLypAZGVwZW5kZW50QCovCQkJZmZpX3R5cGUqKgkJYXR5cGVzKQogeworCXVuc2lnbmVkIGludAlieXRlcwk9IDA7CisJdW5zaWduZWQgaW50CWk7CisJZmZpX3R5cGUqKgkJcHRyOworCiAJaWYgKGNpZiA9PSBOVUxMKQogCQlyZXR1cm4gRkZJX0JBRF9UWVBFREVGOwogCiAJaWYgKGFiaSA8PSBGRklfRklSU1RfQUJJIHx8IGFiaSA+IEZGSV9ERUZBVUxUX0FCSSkKIAkJcmV0dXJuIEZGSV9CQURfQUJJOwogCi0JdW5zaWduZWQgaW50CWJ5dGVzCT0gMDsKLQl1bnNpZ25lZCBpbnQJaTsKLQlmZmlfdHlwZSoqCQlwdHI7Ci0KIAljaWYtPmFiaSA9IGFiaTsKIAljaWYtPmFyZ190eXBlcyA9IGF0eXBlczsKIAljaWYtPm5hcmdzID0gbmFyZ3M7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYvZGFyd2luNjQuUyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni9kYXJ3aW42NC5TCmluZGV4IDE2NWQ0NjkuLjEyODZkMzMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni9kYXJ3aW42NC5TCisrKyBiL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni9kYXJ3aW42NC5TCkBAIC0zNTEsNyArMzUxLDcgQEAKICAuc2V0ICBMJHNldCQzLExVVzEtTFVXMAogIC5sb25nIEwkc2V0JDMKIAotIC8qIE5ldyBzdGFjayBmcmFtZSBiYXNlZCBvZmYgcmJwLiAgVGhpcyBpcyBhIGl0dHkgYml0IG9mIHVud2luZAorIC8qIE5ldyBzdGFjayBmcmFtZSBiYXNlZCBvZmYgcmJwLiAgVGhpcyBpcyBhbiBpdHR5IGJpdCBvZiB1bndpbmQKICAgICB0cmlja2VyeSBpbiB0aGF0IHRoZSBDRkEgKmhhcyogY2hhbmdlZC4gIFRoZXJlIGlzIG5vIGVhc3kgd2F5CiAgICAgdG8gZGVzY3JpYmUgaXQgY29ycmVjdGx5IG9uIGVudHJ5IHRvIHRoZSBmdW5jdGlvbi4gIEZvcnR1bmF0ZWx5LAogICAgIGl0IGRvZXNuJ3QgbWF0dGVyIHRvbyBtdWNoIHNpbmNlIGF0IGFsbCBwb2ludHMgd2UgY2FuIGNvcnJlY3RseQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jIGIvTW9kdWxlcy9fY3R5cGVzL2xpYmZmaV9vc3gveDg2L3g4Ni1mZmk2NC5jCmluZGV4IDJhZmZiMTQuLmYyNjEwYzEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2N0eXBlcy9saWJmZmlfb3N4L3g4Ni94ODYtZmZpNjQuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvbGliZmZpX29zeC94ODYveDg2LWZmaTY0LmMKQEAgLTIyNSwxNCArMjI1LDE2IEBACiAJCQkvKiBNZXJnZSB0aGUgZmllbGRzIG9mIHN0cnVjdHVyZS4gICovCiAJCQlmb3IgKHB0ciA9IHR5cGUtPmVsZW1lbnRzOyAqcHRyICE9IE5VTEw7IHB0cisrKQogCQkJeworCQkJCWludCBudW0sIHBvczsKKwogCQkJCWJ5dGVfb2Zmc2V0ID0gQUxJR04oYnl0ZV9vZmZzZXQsICgqcHRyKS0+YWxpZ25tZW50KTsKIAotCQkJCWludAludW0gPSBjbGFzc2lmeV9hcmd1bWVudCgqcHRyLCBzdWJjbGFzc2VzLCBieXRlX29mZnNldCAlIDgpOworCQkJCW51bSA9IGNsYXNzaWZ5X2FyZ3VtZW50KCpwdHIsIHN1YmNsYXNzZXMsIGJ5dGVfb2Zmc2V0ICUgOCk7CiAKIAkJCQlpZiAobnVtID09IDApCiAJCQkJCXJldHVybiAwOwogCi0JCQkJaW50IHBvcyA9IGJ5dGVfb2Zmc2V0IC8gODsKKwkJCQlwb3MgPSBieXRlX29mZnNldCAvIDg7CiAKIAkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCiAJCQkJewpAQCAtNTg5LDExICs1OTEsMTIgQEAKIAl2b2lkCQkJKCpmdW4pKGZmaV9jaWYqLCB2b2lkKiwgdm9pZCoqLCB2b2lkKiksCiAJdm9pZCoJCQl1c2VyX2RhdGEpCiB7CisJCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0Kgl0cmFtcDsKKwogCWlmIChjaWYtPmFiaSAhPSBGRklfVU5JWDY0KQogCQlyZXR1cm4gRkZJX0JBRF9BQkk7CiAKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCoJdHJhbXAgPQotCQkodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKSZjbG9zdXJlLT50cmFtcFswXTsKKwl0cmFtcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopJmNsb3N1cmUtPnRyYW1wWzBdOwogCiAJdHJhbXBbMF0gPSAweGJiNDk7CQkvKiBtb3YgPGNvZGU+LCAlcjExCSovCiAJKih2b2lkKiB2b2xhdGlsZSopJnRyYW1wWzFdID0gZmZpX2Nsb3N1cmVfdW5peDY0OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYyBiL01vZHVsZXMvX2N0eXBlcy9zdGdkaWN0LmMKaW5kZXggMjVkOTk5Ni4uODc5YWZiOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3R5cGVzL3N0Z2RpY3QuYworKysgYi9Nb2R1bGVzL19jdHlwZXMvc3RnZGljdC5jCkBAIC03NiwxNCArNzYsMTggQEAKIAogICAgIGlmIChzcmMtPmZvcm1hdCkgewogICAgICAgICBkc3QtPmZvcm1hdCA9IFB5TWVtX01hbGxvYyhzdHJsZW4oc3JjLT5mb3JtYXQpICsgMSk7Ci0gICAgICAgIGlmIChkc3QtPmZvcm1hdCA9PSBOVUxMKQorICAgICAgICBpZiAoZHN0LT5mb3JtYXQgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBzdHJjcHkoZHN0LT5mb3JtYXQsIHNyYy0+Zm9ybWF0KTsKICAgICB9CiAgICAgaWYgKHNyYy0+c2hhcGUpIHsKICAgICAgICAgZHN0LT5zaGFwZSA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlfc3NpemVfdCkgKiBzcmMtPm5kaW0pOwotICAgICAgICBpZiAoZHN0LT5zaGFwZSA9PSBOVUxMKQorICAgICAgICBpZiAoZHN0LT5zaGFwZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgICAgIG1lbWNweShkc3QtPnNoYXBlLCBzcmMtPnNoYXBlLAogICAgICAgICAgICAgICAgc2l6ZW9mKFB5X3NzaXplX3QpICogc3JjLT5uZGltKTsKICAgICB9CkBAIC0zODAsNyArMzg0LDcgQEAKICAgICAgICAgdW5pb25fc2l6ZSA9IDA7CiAgICAgICAgIHRvdGFsX2FsaWduID0gYWxpZ24gPyBhbGlnbiA6IDE7CiAgICAgICAgIHN0Z2RpY3QtPmZmaV90eXBlX3BvaW50ZXIudHlwZSA9IEZGSV9UWVBFX1NUUlVDVDsKLSAgICAgICAgc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlci5lbGVtZW50cyA9IFB5TWVtX01hbGxvYyhzaXplb2YoZmZpX3R5cGUgKikgKiAoYmFzZWRpY3QtPmxlbmd0aCArIGxlbiArIDEpKTsKKyAgICAgICAgc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlci5lbGVtZW50cyA9IFB5TWVtX05ldyhmZmlfdHlwZSAqLCBiYXNlZGljdC0+bGVuZ3RoICsgbGVuICsgMSk7CiAgICAgICAgIGlmIChzdGdkaWN0LT5mZmlfdHlwZV9wb2ludGVyLmVsZW1lbnRzID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC0zOTgsNyArNDAyLDcgQEAKICAgICAgICAgdW5pb25fc2l6ZSA9IDA7CiAgICAgICAgIHRvdGFsX2FsaWduID0gMTsKICAgICAgICAgc3RnZGljdC0+ZmZpX3R5cGVfcG9pbnRlci50eXBlID0gRkZJX1RZUEVfU1RSVUNUOwotICAgICAgICBzdGdkaWN0LT5mZmlfdHlwZV9wb2ludGVyLmVsZW1lbnRzID0gUHlNZW1fTWFsbG9jKHNpemVvZihmZmlfdHlwZSAqKSAqIChsZW4gKyAxKSk7CisgICAgICAgIHN0Z2RpY3QtPmZmaV90eXBlX3BvaW50ZXIuZWxlbWVudHMgPSBQeU1lbV9OZXcoZmZpX3R5cGUgKiwgbGVuICsgMSk7CiAgICAgICAgIGlmIChzdGdkaWN0LT5mZmlfdHlwZV9wb2ludGVyLmVsZW1lbnRzID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC00MTcsNiArNDIxLDggQEAKICAgICAgICAgICAgdGhhdCkuIFVzZSAnQicgZm9yIGJ5dGVzLiAqLwogICAgICAgICBzdGdkaWN0LT5mb3JtYXQgPSBfY3R5cGVzX2FsbG9jX2Zvcm1hdF9zdHJpbmcoTlVMTCwgIkIiKTsKICAgICB9CisgICAgaWYgKHN0Z2RpY3QtPmZvcm1hdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CiAKICNkZWZpbmUgcmVhbGRpY3QgKChQeU9iamVjdCAqKSZzdGdkaWN0LT5kaWN0KQogICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewpAQCAtNDgzLDcgKzQ4OSw3IEBACiAgICAgICAgICAgICBjaGFyICpmaWVsZGZtdCA9IGRpY3QtPmZvcm1hdCA/IGRpY3QtPmZvcm1hdCA6ICJCIjsKICAgICAgICAgICAgIGNoYXIgKmZpZWxkbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobmFtZSk7CiAgICAgICAgICAgICBjaGFyICpwdHI7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsgCisgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKIAogICAgICAgICAgICAgaWYgKGZpZWxkbmFtZSA9PSBOVUxMKQpAQCAtNTAzLDcgKzUwOSwxMiBAQAogICAgICAgICAgICAgc3ByaW50ZihidWYsICIlczolczoiLCBmaWVsZGZtdCwgZmllbGRuYW1lKTsKIAogICAgICAgICAgICAgcHRyID0gc3RnZGljdC0+Zm9ybWF0OwotICAgICAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nKHN0Z2RpY3QtPmZvcm1hdCwgYnVmKTsKKyAgICAgICAgICAgIGlmIChkaWN0LT5zaGFwZSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgc3RnZGljdC0+Zm9ybWF0ID0gX2N0eXBlc19hbGxvY19mb3JtYXRfc3RyaW5nX3dpdGhfc2hhcGUoCisgICAgICAgICAgICAgICAgICAgIGRpY3QtPm5kaW0sIGRpY3QtPnNoYXBlLCBzdGdkaWN0LT5mb3JtYXQsIGJ1Zik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0Z2RpY3QtPmZvcm1hdCA9IF9jdHlwZXNfYWxsb2NfZm9ybWF0X3N0cmluZyhzdGdkaWN0LT5mb3JtYXQsIGJ1Zik7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeU1lbV9GcmVlKHB0cik7CiAgICAgICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2N1cnNlc19wYW5lbC5jIGIvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMKaW5kZXggZjU2MDcwMi4uODdiOWMwNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMKKysrIGIvTW9kdWxlcy9fY3Vyc2VzX3BhbmVsLmMKQEAgLTExNyw3ICsxMTcsNyBAQAogewogICAgIGxpc3Rfb2ZfcGFuZWxzICpuZXc7CiAKLSAgICBpZiAoKG5ldyA9IChsaXN0X29mX3BhbmVscyAqKW1hbGxvYyhzaXplb2YobGlzdF9vZl9wYW5lbHMpKSkgPT0gTlVMTCkgeworICAgIGlmICgobmV3ID0gKGxpc3Rfb2ZfcGFuZWxzICopUHlNZW1fTWFsbG9jKHNpemVvZihsaXN0X29mX3BhbmVscykpKSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICB0ZW1wID0gbG9wOwogICAgIGlmICh0ZW1wLT5wbyA9PSBwbykgewogICAgICAgICBsb3AgPSB0ZW1wLT5uZXh0OwotICAgICAgICBmcmVlKHRlbXApOworICAgICAgICBQeU1lbV9GcmVlKHRlbXApOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHdoaWxlICh0ZW1wLT5uZXh0ID09IE5VTEwgfHwgdGVtcC0+bmV4dC0+cG8gIT0gcG8pIHsKQEAgLTE0OCw3ICsxNDgsNyBAQAogICAgICAgICB0ZW1wID0gdGVtcC0+bmV4dDsKICAgICB9CiAgICAgbiA9IHRlbXAtPm5leHQtPm5leHQ7Ci0gICAgZnJlZSh0ZW1wLT5uZXh0KTsKKyAgICBQeU1lbV9GcmVlKHRlbXAtPm5leHQpOwogICAgIHRlbXAtPm5leHQgPSBuOwogICAgIHJldHVybjsKIH0KQEAgLTUxMyw2ICs1MTMsOCBAQAogICAgICAgICBnb3RvIGZhaWw7CiAKICAgICBpbXBvcnRfY3Vyc2VzKCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZmFpbDsKIAogICAgIC8qIEZvciBleGNlcHRpb24gX2N1cnNlc19wYW5lbC5lcnJvciAqLwogICAgIF9jdXJzZXNfcGFuZWxzdGF0ZShtKS0+UHlDdXJzZXNFcnJvciA9IFB5RXJyX05ld0V4Y2VwdGlvbigiX2N1cnNlc19wYW5lbC5lcnJvciIsIE5VTEwsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fY3Vyc2VzbW9kdWxlLmMgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYwppbmRleCAxM2NmY2Y1Li41MDFlYzkxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYworKysgYi9Nb2R1bGVzL19jdXJzZXNtb2R1bGUuYwpAQCAtMTM0LDYgKzEzNCwxMiBAQAogI2RlZmluZSBTVFJJQ1RfU1lTVl9DVVJTRVMKICNlbmRpZgogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgY3Vyc2VzCitjbGFzcyBjdXJzZXMud2luZG93ICJQeUN1cnNlc1dpbmRvd09iamVjdCAqIiAiJlB5Q3Vyc2VzV2luZG93X1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD04OGM4NjBhYmRiYjUwZTBjXSovCisKIC8qIERlZmluaXRpb24gb2YgZXhjZXB0aW9uIGN1cnNlcy5lcnJvciAqLwogCiBzdGF0aWMgUHlPYmplY3QgKlB5Q3Vyc2VzRXJyb3I7CkBAIC0xNjgsMTAgKzE3NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCBjYWxsIHN0YXJ0X2NvbG9yKCkgZmlyc3QiKTsgICAgICAgXAogICAgICAgICByZXR1cm4gMDsgfQogCi0jaWZuZGVmIE1JTgotI2RlZmluZSBNSU4oeCx5KSAoKHgpIDwgKHkpID8gKHgpIDogKHkpKQotI2VuZGlmCi0KIC8qIFV0aWxpdHkgRnVuY3Rpb25zICovCiAKIC8qCkBAIC01MzMsNyArNTM1LDcgQEAKICAgICB3byA9IFB5T2JqZWN0X05FVyhQeUN1cnNlc1dpbmRvd09iamVjdCwgJlB5Q3Vyc2VzV2luZG93X1R5cGUpOwogICAgIGlmICh3byA9PSBOVUxMKSByZXR1cm4gTlVMTDsKICAgICB3by0+d2luID0gd2luOwotICAgIHdvLT5lbmNvZGluZyA9IHN0cmR1cChlbmNvZGluZyk7CisgICAgd28tPmVuY29kaW5nID0gX1B5TWVtX1N0cmR1cChlbmNvZGluZyk7CiAgICAgaWYgKHdvLT5lbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRih3byk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC01NDcsNzQgKzU0OSwxNDUgQEAKIHsKICAgICBpZiAod28tPndpbiAhPSBzdGRzY3IpIGRlbHdpbih3by0+d2luKTsKICAgICBpZiAod28tPmVuY29kaW5nICE9IE5VTEwpCi0gICAgICAgIGZyZWUod28tPmVuY29kaW5nKTsKKyAgICAgICAgUHlNZW1fRnJlZSh3by0+ZW5jb2RpbmcpOwogICAgIFB5T2JqZWN0X0RFTCh3byk7CiB9CiAKIC8qIEFkZGNoLCBBZGRzdHIsIEFkZG5zdHIgKi8KIAorLypbY2xpbmljIGlucHV0XQorCitjdXJzZXMud2luZG93LmFkZGNoCisKKyAgICBbCisgICAgeTogaW50CisgICAgICBZLWNvb3JkaW5hdGUuCisgICAgeDogaW50CisgICAgICBYLWNvb3JkaW5hdGUuCisgICAgXQorCisgICAgY2g6IG9iamVjdAorICAgICAgQ2hhcmFjdGVyIHRvIGFkZC4KKworICAgIFsKKyAgICBhdHRyOiBsb25nCisgICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgIF0KKyAgICAvCisKK1BhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIuCisKK1BhaW50IGNoYXJhY3RlciBjaCBhdCAoeSwgeCkgd2l0aCBhdHRyaWJ1dGVzIGF0dHIsCitvdmVyd3JpdGluZyBhbnkgY2hhcmFjdGVyIHByZXZpb3VzbHkgcGFpbnRlZCBhdCB0aGF0IGxvY2F0aW9uLgorQnkgZGVmYXVsdCwgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiBhbmQgYXR0cmlidXRlcyBhcmUgdGhlCitjdXJyZW50IHNldHRpbmdzIGZvciB0aGUgd2luZG93IG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGN1cnNlc193aW5kb3dfYWRkY2hfX2RvY19fLAorImFkZGNoKFt5LCB4LF0gY2gsIFthdHRyXSlcbiIKKyJQYWludCBjaGFyYWN0ZXIgY2ggYXQgKHksIHgpIHdpdGggYXR0cmlidXRlcyBhdHRyLlxuIgorIlxuIgorIiAgeVxuIgorIiAgICBZLWNvb3JkaW5hdGUuXG4iCisiICB4XG4iCisiICAgIFgtY29vcmRpbmF0ZS5cbiIKKyIgIGNoXG4iCisiICAgIENoYXJhY3RlciB0byBhZGQuXG4iCisiICBhdHRyXG4iCisiICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuXG4iCisiXG4iCisiUGFpbnQgY2hhcmFjdGVyIGNoIGF0ICh5LCB4KSB3aXRoIGF0dHJpYnV0ZXMgYXR0cixcbiIKKyJvdmVyd3JpdGluZyBhbnkgY2hhcmFjdGVyIHByZXZpb3VzbHkgcGFpbnRlZCBhdCB0aGF0IGxvY2F0aW9uLlxuIgorIkJ5IGRlZmF1bHQsIHRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gYW5kIGF0dHJpYnV0ZXMgYXJlIHRoZVxuIgorImN1cnJlbnQgc2V0dGluZ3MgZm9yIHRoZSB3aW5kb3cgb2JqZWN0LiIpOworCisjZGVmaW5lIENVUlNFU19XSU5ET1dfQUREQ0hfTUVUSE9EREVGICAgIFwKKyAgICB7ImFkZGNoIiwgKFB5Q0Z1bmN0aW9uKWN1cnNlc193aW5kb3dfYWRkY2gsIE1FVEhfVkFSQVJHUywgY3Vyc2VzX3dpbmRvd19hZGRjaF9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotUHlDdXJzZXNXaW5kb3dfQWRkQ2goUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorY3Vyc2VzX3dpbmRvd19hZGRjaF9pbXBsKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBpbnQgZ3JvdXBfbGVmdF8xLCBpbnQgeSwgaW50IHgsIFB5T2JqZWN0ICpjaCwgaW50IGdyb3VwX3JpZ2h0XzEsIGxvbmcgYXR0cik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitjdXJzZXNfd2luZG93X2FkZGNoKFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBpbnQgcnRuLCB4LCB5LCB1c2VfeHkgPSBGQUxTRTsKLSAgICBQeU9iamVjdCAqY2hvYmo7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgaW50IGdyb3VwX2xlZnRfMSA9IDA7CisgICAgaW50IHkgPSAwOworICAgIGludCB4ID0gMDsKKyAgICBQeU9iamVjdCAqY2g7CisgICAgaW50IGdyb3VwX3JpZ2h0XzEgPSAwOworICAgIGxvbmcgYXR0ciA9IDA7CisKKyAgICBzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPOmFkZGNoIiwgJmNoKSkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPbDphZGRjaCIsICZjaCwgJmF0dHIpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGdyb3VwX3JpZ2h0XzEgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWlPOmFkZGNoIiwgJnksICZ4LCAmY2gpKQorICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgIGdyb3VwX2xlZnRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaU9sOmFkZGNoIiwgJnksICZ4LCAmY2gsICZhdHRyKSkKKyAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICBncm91cF9yaWdodF8xID0gMTsKKyAgICAgICAgICAgIGdyb3VwX2xlZnRfMSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJjdXJzZXMud2luZG93LmFkZGNoIHJlcXVpcmVzIDEgdG8gNCBhcmd1bWVudHMiKTsKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICB9CisgICAgcmV0dXJuX3ZhbHVlID0gY3Vyc2VzX3dpbmRvd19hZGRjaF9pbXBsKHNlbGYsIGdyb3VwX2xlZnRfMSwgeSwgeCwgY2gsIGdyb3VwX3JpZ2h0XzEsIGF0dHIpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitjdXJzZXNfd2luZG93X2FkZGNoX2ltcGwoUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIGludCBncm91cF9sZWZ0XzEsIGludCB5LCBpbnQgeCwgUHlPYmplY3QgKmNoLCBpbnQgZ3JvdXBfcmlnaHRfMSwgbG9uZyBhdHRyKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ0Yjk3Y2MyODcwMTBjNTQgaW5wdXQ9NWE0MWVmYjM0YTJkZTMzOF0qLworeworICAgIFB5Q3Vyc2VzV2luZG93T2JqZWN0ICpjd3NlbGYgPSAoUHlDdXJzZXNXaW5kb3dPYmplY3QgKilzZWxmOworICAgIGludCBjb29yZGluYXRlc19ncm91cCA9IGdyb3VwX2xlZnRfMTsKKyAgICBpbnQgYXR0cl9ncm91cCA9IGdyb3VwX3JpZ2h0XzE7CisgICAgaW50IHJ0bjsKICAgICBpbnQgdHlwZTsKLSAgICBjaHR5cGUgY2g7CisgICAgY2h0eXBlIGNjaDsKICNpZmRlZiBIQVZFX05DVVJTRVNXCiAgICAgY2NoYXJfdCB3Y2g7CiAjZW5kaWYKLSAgICBhdHRyX3QgYXR0ciA9IEFfTk9STUFMOwotICAgIGxvbmcgbGF0dHI7CiAgICAgY29uc3QgY2hhciAqZnVuY25hbWU7CiAKLSAgICBzd2l0Y2ggKFB5VHVwbGVfU2l6ZShhcmdzKSkgewotICAgIGNhc2UgMToKLSAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPO2NoIG9yIGludCIsICZjaG9iaikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9sO2NoIG9yIGludCxhdHRyIiwgJmNob2JqLCAmbGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGF0dHIgPSBsYXR0cjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWlPO3kseCxjaCBvciBpbnQiLCAmeSwgJngsICZjaG9iaikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgdXNlX3h5ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWlPbDt5LHgsY2ggb3IgaW50LCBhdHRyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ5LCAmeCwgJmNob2JqLCAmbGF0dHIpKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGF0dHIgPSBsYXR0cjsKLSAgICAgICAgdXNlX3h5ID0gVFJVRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImFkZGNoIHJlcXVpcmVzIDEgdG8gNCBhcmd1bWVudHMiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghYXR0cl9ncm91cCkKKyAgICAgIGF0dHIgPSBBX05PUk1BTDsKIAogI2lmZGVmIEhBVkVfTkNVUlNFU1cKLSAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChzZWxmLCBjaG9iaiwgJmNoLCAmd2NoKTsKKyAgICB0eXBlID0gUHlDdXJzZXNfQ29udmVydFRvQ2NoYXJfdChjd3NlbGYsIGNoLCAmY2NoLCAmd2NoKTsKICAgICBpZiAodHlwZSA9PSAyKSB7CiAgICAgICAgIGZ1bmNuYW1lID0gImFkZF93Y2giOwogICAgICAgICB3Y2guYXR0ciA9IGF0dHI7Ci0gICAgICAgIGlmICh1c2VfeHkgPT0gVFJVRSkKLSAgICAgICAgICAgIHJ0biA9IG12d2FkZF93Y2goc2VsZi0+d2luLHkseCwgJndjaCk7CisgICAgICAgIGlmIChjb29yZGluYXRlc19ncm91cCkKKyAgICAgICAgICAgIHJ0biA9IG12d2FkZF93Y2goY3dzZWxmLT53aW4seSx4LCAmd2NoKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBydG4gPSB3YWRkX3djaChzZWxmLT53aW4sICZ3Y2gpOworICAgICAgICAgICAgcnRuID0gd2FkZF93Y2goY3dzZWxmLT53aW4sICZ3Y2gpOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKICNlbHNlCi0gICAgdHlwZSA9IFB5Q3Vyc2VzX0NvbnZlcnRUb0NjaGFyX3Qoc2VsZiwgY2hvYmosICZjaCk7CisgICAgdHlwZSA9IFB5Q3Vyc2VzX0NvbnZlcnRUb0NjaGFyX3QoY3dzZWxmLCBjaCwgJmNjaCk7CiAjZW5kaWYKICAgICBpZiAodHlwZSA9PSAxKSB7CiAgICAgICAgIGZ1bmNuYW1lID0gImFkZGNoIjsKLSAgICAgICAgaWYgKHVzZV94eSA9PSBUUlVFKQotICAgICAgICAgICAgcnRuID0gbXZ3YWRkY2goc2VsZi0+d2luLHkseCwgY2ggfCBhdHRyKTsKKyAgICAgICAgaWYgKGNvb3JkaW5hdGVzX2dyb3VwKQorICAgICAgICAgICAgcnRuID0gbXZ3YWRkY2goY3dzZWxmLT53aW4seSx4LCBjY2ggfCBhdHRyKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBydG4gPSB3YWRkY2goc2VsZi0+d2luLCBjaCB8IGF0dHIpOworICAgICAgICAgICAgcnRuID0gd2FkZGNoKGN3c2VsZi0+d2luLCBjY2ggfCBhdHRyKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKQEAgLTEyMTEsOCArMTI4NCwxMiBAQAogICAgIGNhc2UgMToKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImk7biIsICZuKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAobiA8IDApIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiJ24nIG11c3QgYmUgbm9ubmVnYXRpdmUiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgcnRuMiA9IHdnZXRuc3RyKHNlbGYtPndpbixydG4sTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IHdnZXRuc3RyKHNlbGYtPndpbiwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6CkBAIC0xMjI5LDE0ICsxMzA2LDE4IEBACiAgICAgY2FzZSAzOgogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywiaWlpO3kseCxuIiwgJnksICZ4LCAmbikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKG4gPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIiduJyBtdXN0IGJlIG5vbm5lZ2F0aXZlIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogI2lmZGVmIFNUUklDVF9TWVNWX0NVUlNFUwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJ0bjIgPSB3bW92ZShzZWxmLT53aW4seSx4KT09RVJSID8gRVJSIDoKLSAgICAgICAgd2dldG5zdHIoc2VsZi0+d2luLCBydG4sIE1JTihuLCAxMDIzKSk7CisgICAgICAgIHdnZXRuc3RyKHNlbGYtPndpbiwgcnRuLCBQeV9NSU4obiwgMTAyMykpOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogI2Vsc2UKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBydG4yID0gbXZ3Z2V0bnN0cihzZWxmLT53aW4sIHksIHgsIHJ0biwgTUlOKG4sIDEwMjMpKTsKKyAgICAgICAgcnRuMiA9IG12d2dldG5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZW5kaWYKICAgICAgICAgYnJlYWs7CkBAIC0xMzc1LDcgKzE0NTYsMTEgQEAKICAgICBjYXNlIDE6CiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCJpO24iLCAmbikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcnRuMiA9IHdpbm5zdHIoc2VsZi0+d2luLHJ0bixNSU4obiwxMDIzKSk7CisgICAgICAgIGlmIChuIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICInbicgbXVzdCBiZSBub25uZWdhdGl2ZSIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcnRuMiA9IHdpbm5zdHIoc2VsZi0+d2luLCBydG4sIFB5X01JTihuLCAxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsImlpO3kseCIsJnksJngpKQpAQCAtMTM4NSw3ICsxNDcwLDExIEBACiAgICAgY2FzZSAzOgogICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpaTt5LHgsbiIsICZ5LCAmeCwgJm4pKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJ0bjIgPSBtdndpbm5zdHIoc2VsZi0+d2luLCB5LCB4LCBydG4sIE1JTihuLDEwMjMpKTsKKyAgICAgICAgaWYgKG4gPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIiduJyBtdXN0IGJlIG5vbm5lZ2F0aXZlIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBydG4yID0gbXZ3aW5uc3RyKHNlbGYtPndpbiwgeSwgeCwgcnRuLCBQeV9NSU4obiwxMDIzKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJpbnN0ciByZXF1aXJlcyAwIG9yIDMgYXJndW1lbnRzIik7CkBAIC0xNjk5LDI2ICsxNzg4LDI0IEBACiAgICAgLyogV2UgaGF2ZSB0byBzaW11bGF0ZSB0aGlzIGJ5IHdyaXRpbmcgdG8gYSB0ZW1wb3JhcnkgRklMRSosCiAgICAgICAgdGhlbiByZWFkaW5nIGJhY2ssIHRoZW4gd3JpdGluZyB0byB0aGUgYXJndW1lbnQgc3RyZWFtLiAqLwogICAgIGNoYXIgZm5bMTAwXTsKLSAgICBpbnQgZmQ7Ci0gICAgRklMRSAqZnA7Ci0gICAgUHlPYmplY3QgKnJlczsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBGSUxFICpmcCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBzdHJjcHkoZm4sICIvdG1wL3B5LmN1cnNlcy5wdXR3aW4uWFhYWFhYIik7CiAgICAgZmQgPSBta3N0ZW1wKGZuKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGV4aXQ7CiAgICAgZnAgPSBmZG9wZW4oZmQsICJ3YisiKTsKICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICBjbG9zZShmZCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIHJlcyA9IFB5Q3Vyc2VzQ2hlY2tFUlIocHV0d2luKHNlbGYtPndpbiwgZnApLCAicHV0d2luIik7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiByZXM7Ci0gICAgfQorICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OwogICAgIGZzZWVrKGZwLCAwLCAwKTsKICAgICB3aGlsZSAoMSkgewogICAgICAgICBjaGFyIGJ1ZltCVUZTSVpdOwpAQCAtMTczMiw3ICsxODE5LDEyIEBACiAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBmY2xvc2UoZnApOworCitleGl0OgorICAgIGlmIChmcCAhPSBOVUxMKQorICAgICAgICBmY2xvc2UoZnApOworICAgIGVsc2UgaWYgKGZkICE9IC0xKQorICAgICAgICBjbG9zZShmZCk7CiAgICAgcmVtb3ZlKGZuKTsKICAgICByZXR1cm4gcmVzOwogfQpAQCAtMTk0MywyMCArMjAzNSwyMCBAQAogICAgIGFzY2lpID0gUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcodmFsdWUpOwogICAgIGlmIChhc2NpaSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgZW5jb2RpbmcgPSBzdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKKyAgICBlbmNvZGluZyA9IF9QeU1lbV9TdHJkdXAoUHlCeXRlc19BU19TVFJJTkcoYXNjaWkpKTsKICAgICBQeV9ERUNSRUYoYXNjaWkpOwogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgZnJlZShzZWxmLT5lbmNvZGluZyk7CisgICAgUHlNZW1fRnJlZShzZWxmLT5lbmNvZGluZyk7CiAgICAgc2VsZi0+ZW5jb2RpbmcgPSBlbmNvZGluZzsKICAgICByZXR1cm4gMDsKIH0KIAogCiBzdGF0aWMgUHlNZXRob2REZWYgUHlDdXJzZXNXaW5kb3dfTWV0aG9kc1tdID0gewotICAgIHsiYWRkY2giLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKVB5Q3Vyc2VzV2luZG93X0FkZENoLCBNRVRIX1ZBUkFSR1N9LAorICAgIENVUlNFU19XSU5ET1dfQUREQ0hfTUVUSE9EREVGCiAgICAgeyJhZGRuc3RyIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQWRkTlN0ciwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImFkZHN0ciIsICAgICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19BZGRTdHIsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJhdHRyb2ZmIiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfQXR0ck9mZiwgTUVUSF9WQVJBUkdTfSwKQEAgLTIwMTIsOCArMjEwNCw2IEBACiAgICAgeyJub2RlbGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfbm9kZWxheSwgTUVUSF9WQVJBUkdTfSwKICAgICB7Im5vdGltZW91dCIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19ub3RpbWVvdXQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJub3V0cmVmcmVzaCIsICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfTm9PdXRSZWZyZXNoLCBNRVRIX1ZBUkFSR1N9LAotICAgIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYWxpYXMgLS0gcmVtb3ZlIGluIFB5dGhvbiAyLjMgKi8KLSAgICB7Im5vb3V0cmVmcmVzaCIsICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19Ob091dFJlZnJlc2gsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJvdmVybGF5IiwgICAgICAgICAoUHlDRnVuY3Rpb24pUHlDdXJzZXNXaW5kb3dfT3ZlcmxheSwgTUVUSF9WQVJBUkdTfSwKICAgICB7Im92ZXJ3cml0ZSIsICAgICAgIChQeUNGdW5jdGlvbilQeUN1cnNlc1dpbmRvd19PdmVyd3JpdGUsCiAgICAgIE1FVEhfVkFSQVJHU30sCkBAIC0yMjU3LDEyICsyMzQ3LDEzIEBACiBQeUN1cnNlc19HZXRXaW4oUHlDdXJzZXNXaW5kb3dPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzdHJlYW0pCiB7CiAgICAgY2hhciBmblsxMDBdOwotICAgIGludCBmZDsKLSAgICBGSUxFICpmcDsKKyAgICBpbnQgZmQgPSAtMTsKKyAgICBGSUxFICpmcCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmRhdGE7CiAgICAgc2l6ZV90IGRhdGFsZW47CiAgICAgV0lORE9XICp3aW47CiAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAKICAgICBQeUN1cnNlc0luaXRpYWxpc2VkOwogCkBAIC0yMjcwLDQ0ICsyMzYxLDQ3IEBACiAgICAgZmQgPSBta3N0ZW1wKGZuKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGZwID0gZmRvcGVuKGZkLCAid2IrIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKLSAgICAgICAgY2xvc2UoZmQpOwotICAgICAgICByZW1vdmUoZm4pOwotICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lKFB5RXhjX0lPRXJyb3IsIGZuKTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CisKICAgICBkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzdHJlYW0sICZQeUlkX3JlYWQsICIiKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmICghUHlCeXRlc19DaGVjayhkYXRhKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgImYucmVhZCgpIHJldHVybmVkICUuMTAwcyBpbnN0ZWFkIG9mIGJ5dGVzIiwKICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPm9iX3R5cGUtPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBkYXRhbGVuID0gUHlCeXRlc19HRVRfU0laRShkYXRhKTsKICAgICBpZiAoZndyaXRlKFB5Qnl0ZXNfQVNfU1RSSU5HKGRhdGEpLCAxLCBkYXRhbGVuLCBmcCkgIT0gZGF0YWxlbikgewogICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIHJlbW92ZShmbik7Ci0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZm4pOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICBQeV9ERUNSRUYoZGF0YSk7CisKICAgICBmc2VlayhmcCwgMCwgMCk7CiAgICAgd2luID0gZ2V0d2luKGZwKTsKLSAgICBmY2xvc2UoZnApOwotICAgIHJlbW92ZShmbik7CiAgICAgaWYgKHdpbiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUN1cnNlc0Vycm9yLCBjYXRjaGFsbF9OVUxMKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIHJldHVybiBQeUN1cnNlc1dpbmRvd19OZXcod2luLCBOVUxMKTsKKyAgICByZXMgPSBQeUN1cnNlc1dpbmRvd19OZXcod2luLCBOVUxMKTsKKworZXJyb3I6CisgICAgaWYgKGZwICE9IE5VTEwpCisgICAgICAgIGZjbG9zZShmcCk7CisgICAgZWxzZSBpZiAoZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKGZkKTsKKyAgICByZW1vdmUoZm4pOworICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zNDE1LDcgKzM1MDksNyBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgaWYgKHN0cm5jbXAoa2V5X24sIktFWV9GKCIsNik9PTApIHsKICAgICAgICAgICAgICAgICBjaGFyICpwMSwgKnAyOwotICAgICAgICAgICAgICAgIGtleV9uMiA9IG1hbGxvYyhzdHJsZW4oa2V5X24pKzEpOworICAgICAgICAgICAgICAgIGtleV9uMiA9IFB5TWVtX01hbGxvYyhzdHJsZW4oa2V5X24pKzEpOwogICAgICAgICAgICAgICAgIGlmICgha2V5X24yKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQzNCw3ICszNTI4LDcgQEAKICAgICAgICAgICAgICAgICBrZXlfbjIgPSBrZXlfbjsKICAgICAgICAgICAgIFNldERpY3RJbnQoa2V5X24yLGtleSk7CiAgICAgICAgICAgICBpZiAoa2V5X24yICE9IGtleV9uKQotICAgICAgICAgICAgICAgIGZyZWUoa2V5X24yKTsKKyAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKGtleV9uMik7CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBTZXREaWN0SW50KCJLRVlfTUlOIiwgS0VZX01JTik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jIGIvTW9kdWxlcy9fZGF0ZXRpbWVtb2R1bGUuYwppbmRleCBmYTIzMWQ5Li42MDg0ZmZhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kYXRldGltZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2RhdGV0aW1lbW9kdWxlLmMKQEAgLTE2LDYgKzE2LDEyIEBACiAjaW5jbHVkZSAiZGF0ZXRpbWUuaCIKICN1bmRlZiBQeV9CVUlMRF9DT1JFCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBkYXRldGltZQorY2xhc3MgZGF0ZXRpbWUuZGF0ZXRpbWUgIlB5RGF0ZVRpbWVfRGF0ZVRpbWUgKiIgIiZQeURhdGVUaW1lX0RhdGVUaW1lVHlwZSIKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTc4MTQyY2I2NGI5ZTk4YmNdKi8KKwogLyogV2UgcmVxdWlyZSB0aGF0IEMgaW50IGJlIGF0IGxlYXN0IDMyIGJpdHMsIGFuZCB1c2UgaW50IHZpcnR1YWxseQogICogZXZlcnl3aGVyZS4gIEluIGp1c3QgYSBmZXcgY2FzZXMgd2UgdXNlIGEgdGVtcCBsb25nLCB3aGVyZSBhIFB5dGhvbgogICogQVBJIHJldHVybnMgYSBDIGxvbmcuICBJbiBzdWNoIGNhc2VzLCB3ZSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZQpAQCAtMTA0LDYgKzExMCwxMSBAQAogc3RhdGljIFB5VHlwZU9iamVjdCBQeURhdGVUaW1lX1RaSW5mb1R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFB5RGF0ZVRpbWVfVGltZVpvbmVUeXBlOwogCitfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKK19QeV9JREVOVElGSUVSKGZyb211dGMpOworX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKK19QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBNYXRoIHV0aWxpdGllcy4KICAqLwpAQCAtMTQwLDE5ICsxNTEsNiBAQAogICAgIHJldHVybiBxdW87CiB9CiAKLS8qIFJvdW5kIGEgZG91YmxlIHRvIHRoZSBuZWFyZXN0IGxvbmcuICB8eHwgbXVzdCBiZSBzbWFsbCBlbm91Z2ggdG8gZml0Ci0gKiBpbiBhIEMgbG9uZzsgdGhpcyBpcyBub3QgY2hlY2tlZC4KLSAqLwotc3RhdGljIGxvbmcKLXJvdW5kX3RvX2xvbmcoZG91YmxlIHgpCi17Ci0gICAgaWYgKHggPj0gMC4wKQotICAgICAgICB4ID0gZmxvb3IoeCArIDAuNSk7Ci0gICAgZWxzZQotICAgICAgICB4ID0gY2VpbCh4IC0gMC41KTsKLSAgICByZXR1cm4gKGxvbmcpeDsKLX0KLQogLyogTmVhcmVzdCBpbnRlZ2VyIHRvIG0gLyBuIGZvciBpbnRlZ2VycyBtIGFuZCBuLiBIYWxmLWludGVnZXIgcmVzdWx0cwogICogYXJlIHJvdW5kZWQgdG8gZXZlbi4KICAqLwpAQCAtNjE1LDcgKzYxMyw3IEBACiAgICAgICAgICAgICAgICAgc2l6ZW9mKF9QeURhdGVUaW1lX0Jhc2VUaW1lKSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVChzZWxmLCB0eXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC02MzAsNyArNjI4LDcgQEAKICAgICAgICAgICAgICAgICBzaXplb2YoX1B5RGF0ZVRpbWVfQmFzZURhdGVUaW1lKSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIChQeU9iamVjdCAqKVB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVChzZWxmLCB0eXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKHNlbGYsIHR5cGUpOwogICAgIHJldHVybiBzZWxmOwogfQogCkBAIC04OTksMTEgKzg5NywxMSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJ0emluZm8uJXMoKSBtdXN0IHJldHVybiBOb25lIG9yICIKICAgICAgICAgICAgICAgICAgICAgICJ0aW1lZGVsdGEsIG5vdCAnJS4yMDBzJyIsCiAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBQeV9UWVBFKG9mZnNldCktPnRwX25hbWUpOworICAgICAgICBQeV9ERUNSRUYob2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMjkwLDggKzEyODgsNiBAQAogICAgICAgICAgICAgZ290byBEb25lOwogICAgICAgICBmb3JtYXQgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhQeUJ5dGVzX0FTX1NUUklORyhuZXdmbXQpKTsKICAgICAgICAgaWYgKGZvcm1hdCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBfUHlfSURFTlRJRklFUihzdHJmdGltZSk7Ci0KICAgICAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodGltZSwgJlB5SWRfc3RyZnRpbWUsICJPTyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdGltZXR1cGxlLCBOVUxMKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihmb3JtYXQpOwpAQCAtMTM5Nyw3ICsxMzkzLDcgQEAKICAqLwogCiAvKiBDb252ZXJzaW9uIGZhY3RvcnMuICovCi1zdGF0aWMgUHlPYmplY3QgKnVzX3Blcl91cyA9IE5VTEw7ICAgICAgLyogMSAqLworc3RhdGljIFB5T2JqZWN0ICpvbmUgPSBOVUxMOyAgICAgIC8qIDEgKi8KIHN0YXRpYyBQeU9iamVjdCAqdXNfcGVyX21zID0gTlVMTDsgICAgICAvKiAxMDAwICovCiBzdGF0aWMgUHlPYmplY3QgKnVzX3Blcl9zZWNvbmQgPSBOVUxMOyAgLyogMTAwMDAwMCAqLwogc3RhdGljIFB5T2JqZWN0ICp1c19wZXJfbWludXRlID0gTlVMTDsgIC8qIDFlNiAqIDYwIGFzIFB5dGhvbiBpbnQgKi8KQEAgLTE1NzksNyArMTU3NSw2IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnB5dXNfaW4gPSBOVUxMLCAqdGVtcCwgKnB5dXNfb3V0OwogICAgIFB5T2JqZWN0ICpyYXRpbyA9IE5VTEw7Ci0gICAgX1B5X0lERU5USUZJRVIoYXNfaW50ZWdlcl9yYXRpbyk7CiAKICAgICBweXVzX2luID0gZGVsdGFfdG9fbWljcm9zZWNvbmRzKGRlbHRhKTsKICAgICBpZiAocHl1c19pbiA9PSBOVUxMKQpAQCAtMTY3OCw3ICsxNjczLDYgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcHl1c19pbiA9IE5VTEwsICp0ZW1wLCAqcHl1c19vdXQ7CiAgICAgUHlPYmplY3QgKnJhdGlvID0gTlVMTDsKLSAgICBfUHlfSURFTlRJRklFUihhc19pbnRlZ2VyX3JhdGlvKTsKIAogICAgIHB5dXNfaW4gPSBkZWx0YV90b19taWNyb3NlY29uZHMoZGVsdGEpOwogICAgIGlmIChweXVzX2luID09IE5VTEwpCkBAIC0yMTE5LDcgKzIxMTMsNyBAQAogICAgICAgICBnb3RvIERvbmUKIAogICAgIGlmICh1cykgewotICAgICAgICB5ID0gYWNjdW0oIm1pY3Jvc2Vjb25kcyIsIHgsIHVzLCB1c19wZXJfdXMsICZsZWZ0b3Zlcl91cyk7CisgICAgICAgIHkgPSBhY2N1bSgibWljcm9zZWNvbmRzIiwgeCwgdXMsIG9uZSwgJmxlZnRvdmVyX3VzKTsKICAgICAgICAgQ0xFQU5VUDsKICAgICB9CiAgICAgaWYgKG1zKSB7CkBAIC0yMTQ4LDcgKzIxNDIsMzMgQEAKICAgICB9CiAgICAgaWYgKGxlZnRvdmVyX3VzKSB7CiAgICAgICAgIC8qIFJvdW5kIHRvIG5lYXJlc3Qgd2hvbGUgIyBvZiB1cywgYW5kIGFkZCBpbnRvIHguICovCi0gICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gUHlMb25nX0Zyb21Mb25nKHJvdW5kX3RvX2xvbmcobGVmdG92ZXJfdXMpKTsKKyAgICAgICAgZG91YmxlIHdob2xlX3VzID0gcm91bmQobGVmdG92ZXJfdXMpOworICAgICAgICBpbnQgeF9pc19vZGQ7CisgICAgICAgIFB5T2JqZWN0ICp0ZW1wOworCisgICAgICAgIHdob2xlX3VzID0gcm91bmQobGVmdG92ZXJfdXMpOworICAgICAgICBpZiAoZmFicyh3aG9sZV91cyAtIGxlZnRvdmVyX3VzKSA9PSAwLjUpIHsKKyAgICAgICAgICAgIC8qIFdlJ3JlIGV4YWN0bHkgaGFsZndheSBiZXR3ZWVuIHR3byBpbnRlZ2Vycy4gIEluIG9yZGVyCisgICAgICAgICAgICAgKiB0byBkbyByb3VuZC1oYWxmLXRvLWV2ZW4sIHdlIG11c3QgZGV0ZXJtaW5lIHdoZXRoZXIgeAorICAgICAgICAgICAgICogaXMgb2RkLiBOb3RlIHRoYXQgeCBpcyBvZGQgd2hlbiBpdCdzIGxhc3QgYml0IGlzIDEuIFRoZQorICAgICAgICAgICAgICogY29kZSBiZWxvdyB1c2VzIGJpdHdpc2UgYW5kIG9wZXJhdGlvbiB0byBjaGVjayB0aGUgbGFzdAorICAgICAgICAgICAgICogYml0LiAqLworICAgICAgICAgICAgdGVtcCA9IFB5TnVtYmVyX0FuZCh4LCBvbmUpOyAgLyogdGVtcCA8LSB4ICYgMSAqLworICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB4X2lzX29kZCA9IFB5T2JqZWN0X0lzVHJ1ZSh0ZW1wKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKKyAgICAgICAgICAgIGlmICh4X2lzX29kZCA9PSAtMSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBnb3RvIERvbmU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aG9sZV91cyA9IDIuMCAqIHJvdW5kKChsZWZ0b3Zlcl91cyArIHhfaXNfb2RkKSAqIDAuNSkgLSB4X2lzX29kZDsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXAgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpd2hvbGVfdXMpOworCiAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKICAgICAgICAgICAgIGdvdG8gRG9uZTsKQEAgLTIyMzksMjIgKzIyNTksMTQgQEAKIHsKICAgICBQeU9iamVjdCAqdG90YWxfc2Vjb25kczsKICAgICBQeU9iamVjdCAqdG90YWxfbWljcm9zZWNvbmRzOwotICAgIFB5T2JqZWN0ICpvbmVfbWlsbGlvbjsKIAogICAgIHRvdGFsX21pY3Jvc2Vjb25kcyA9IGRlbHRhX3RvX21pY3Jvc2Vjb25kcygoUHlEYXRlVGltZV9EZWx0YSAqKXNlbGYpOwogICAgIGlmICh0b3RhbF9taWNyb3NlY29uZHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBvbmVfbWlsbGlvbiA9IFB5TG9uZ19Gcm9tTG9uZygxMDAwMDAwTCk7Ci0gICAgaWYgKG9uZV9taWxsaW9uID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHRvdGFsX21pY3Jvc2Vjb25kcyk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHRvdGFsX3NlY29uZHMgPSBQeU51bWJlcl9UcnVlRGl2aWRlKHRvdGFsX21pY3Jvc2Vjb25kcywgb25lX21pbGxpb24pOworICAgIHRvdGFsX3NlY29uZHMgPSBQeU51bWJlcl9UcnVlRGl2aWRlKHRvdGFsX21pY3Jvc2Vjb25kcywgdXNfcGVyX3NlY29uZCk7CiAKICAgICBQeV9ERUNSRUYodG90YWxfbWljcm9zZWNvbmRzKTsKLSAgICBQeV9ERUNSRUYob25lX21pbGxpb24pOwogICAgIHJldHVybiB0b3RhbF9zZWNvbmRzOwogfQogCkBAIC0yNDQ3LDcgKzI0NTksNyBAQAogICAgIHN0cnVjdCB0bSAqdG07CiAgICAgdGltZV90IHQ7CiAKLSAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVfdChvYmosICZ0KSA9PSAtMSkKKyAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVfdChvYmosICZ0LCBfUHlUaW1lX1JPVU5EX0RPV04pID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHRtID0gbG9jYWx0aW1lKCZ0KTsKQEAgLTI2MzAsOCArMjY0Miw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGF0ZV9zdHIoUHlEYXRlVGltZV9EYXRlICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKGlzb2Zvcm1hdCk7Ci0KICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9pc29mb3JtYXQsICIoKSIpOwogfQogCkBAIC0yNjcxLDcgKzI2ODEsNiBAQAogZGF0ZV9mb3JtYXQoUHlEYXRlVGltZV9EYXRlICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqZm9ybWF0OwotICAgIF9QeV9JREVOVElGSUVSKHN0cmZ0aW1lKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdCkpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzAzMSw3ICszMDQwLDcgQEAKICAgICAgICAgZ290byBGYWlsOwogICAgIGlmIChkc3QgPT0gUHlfTm9uZSkKICAgICAgICAgZ290byBJbmNvbnNpc3RlbnQ7Ci0gICAgaWYgKGRlbHRhX2Jvb2woZGVsdGEpICE9IDApIHsKKyAgICBpZiAoZGVsdGFfYm9vbCgoUHlEYXRlVGltZV9EZWx0YSAqKWRzdCkgIT0gMCkgewogICAgICAgICBQeU9iamVjdCAqdGVtcCA9IHJlc3VsdDsKICAgICAgICAgcmVzdWx0ID0gYWRkX2RhdGV0aW1lX3RpbWVkZWx0YSgoUHlEYXRlVGltZV9EYXRlVGltZSAqKXJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEYXRlVGltZV9EZWx0YSAqKWRzdCwgMSk7CkBAIC0zMjE1LDEwICszMjI0LDEwIEBACiAgICAgaWYgKG9wICE9IFB5X0VRICYmIG9wICE9IFB5X05FKQogICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CiAgICAgaWYgKFB5X1RZUEUob3RoZXIpICE9ICZQeURhdGVUaW1lX1RpbWVab25lVHlwZSkgewotCWlmIChvcCA9PSBQeV9FUSkKLQkgICAgUHlfUkVUVVJOX0ZBTFNFOwotCWVsc2UKLQkgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgICAgIGlmIChvcCA9PSBQeV9FUSkKKyAgICAgICAgICAgIFB5X1JFVFVSTl9GQUxTRTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CiAgICAgfQogICAgIHJldHVybiBkZWx0YV9yaWNoY29tcGFyZShzZWxmLT5vZmZzZXQsIG90aGVyLT5vZmZzZXQsIG9wKTsKIH0KQEAgLTM1ODgsOCArMzU5Nyw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogdGltZV9zdHIoUHlEYXRlVGltZV9UaW1lICpzZWxmKQogewotICAgIF9QeV9JREVOVElGSUVSKGlzb2Zvcm1hdCk7Ci0KICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QgKilzZWxmLCAmUHlJZF9pc29mb3JtYXQsICIoKSIpOwogfQogCkBAIC00MTA2LDYgKzQxMTMsNDQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyk7CiB9CiAKK3N0YXRpYyB0aW1lX3QKK19QeVRpbWVfRG91YmxlVG9UaW1ldChkb3VibGUgeCkKK3sKKyAgICB0aW1lX3QgcmVzdWx0OworICAgIGRvdWJsZSBkaWZmOworCisgICAgcmVzdWx0ID0gKHRpbWVfdCl4OworICAgIC8qIEhvdyBtdWNoIGluZm8gZGlkIHdlIGxvc2U/ICB0aW1lX3QgbWF5IGJlIGFuIGludGVncmFsIG9yCisgICAgICogZmxvYXRpbmcgdHlwZSwgYW5kIHdlIGRvbid0IGtub3cgd2hpY2guICBJZiBpdCdzIGludGVncmFsLAorICAgICAqIHdlIGRvbid0IGtub3cgd2hldGhlciBDIHRydW5jYXRlcywgcm91bmRzLCByZXR1cm5zIHRoZSBmbG9vciwKKyAgICAgKiBldGMuICBJZiB3ZSBsb3N0IGEgc2Vjb25kIG9yIG1vcmUsIHRoZSBDIHJvdW5kaW5nIGlzCisgICAgICogdW5yZWFzb25hYmxlLCBvciB0aGUgaW5wdXQganVzdCBkb2Vzbid0IGZpdCBpbiBhIHRpbWVfdDsKKyAgICAgKiBjYWxsIGl0IGFuIGVycm9yIHJlZ2FyZGxlc3MuICBOb3RlIHRoYXQgdGhlIG9yaWdpbmFsIGNhc3QgdG8KKyAgICAgKiB0aW1lX3QgY2FuIGNhdXNlIGEgQyBlcnJvciB0b28sIGJ1dCBub3RoaW5nIHdlIGNhbiBkbyB0bworICAgICAqIHdvcm0gYXJvdW5kIHRoYXQuCisgICAgICovCisgICAgZGlmZiA9IHggLSAoZG91YmxlKXJlc3VsdDsKKyAgICBpZiAoZGlmZiA8PSAtMS4wIHx8IGRpZmYgPj0gMS4wKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVzdGFtcCBvdXQgb2YgcmFuZ2UgZm9yIHBsYXRmb3JtIHRpbWVfdCIpOworICAgICAgICByZXN1bHQgPSAodGltZV90KS0xOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKiBSb3VuZCBhIGRvdWJsZSB0byB0aGUgbmVhcmVzdCBsb25nLiAgfHh8IG11c3QgYmUgc21hbGwgZW5vdWdoIHRvIGZpdAorICogaW4gYSBDIGxvbmc7IHRoaXMgaXMgbm90IGNoZWNrZWQuCisgKi8KK3N0YXRpYyBkb3VibGUKK19QeVRpbWVfUm91bmRIYWxmRXZlbihkb3VibGUgeCkKK3sKKyAgICBkb3VibGUgcm91bmRlZCA9IHJvdW5kKHgpOworICAgIGlmIChmYWJzKHgtcm91bmRlZCkgPT0gMC41KQorICAgICAgICAvKiBoYWxmd2F5IGNhc2U6IHJvdW5kIHRvIGV2ZW4gKi8KKyAgICAgICAgcm91bmRlZCA9IDIuMCpyb3VuZCh4LzIuMCk7CisgICAgcmV0dXJuIHJvdW5kZWQ7Cit9CisKIC8qIEludGVybmFsIGhlbHBlci4KICAqIEJ1aWxkIGRhdGV0aW1lIGZyb20gYSBQeXRob24gdGltZXN0YW1wLiAgUGFzcyBsb2NhbHRpbWUgb3IgZ210aW1lIGZvciBmLAogICogdG8gY29udHJvbCB0aGUgaW50ZXJwcmV0YXRpb24gb2YgdGhlIHRpbWVzdGFtcC4gIFNpbmNlIGEgZG91YmxlIGRvZXNuJ3QKQEAgLTQxMTQsMTUgKzQxNTksMzIgQEAKICAqIHRvIGdldCB0aGF0IG11Y2ggcHJlY2lzaW9uIChlLmcuLCBDIHRpbWUoKSBpc24ndCBnb29kIGVub3VnaCkuCiAgKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1kYXRldGltZV9mcm9tX3RpbWVzdGFtcChQeU9iamVjdCAqY2xzLCBUTV9GVU5DIGYsIFB5T2JqZWN0ICp0aW1lc3RhbXAsCitkYXRldGltZV9mcm9tX3RpbWVzdGFtcChQeU9iamVjdCAqY2xzLCBUTV9GVU5DIGYsIGRvdWJsZSB0aW1lc3RhbXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdHppbmZvKQogewogICAgIHRpbWVfdCB0aW1ldDsKLSAgICBsb25nIHVzOworICAgIGRvdWJsZSBmcmFjdGlvbjsKKyAgICBpbnQgdXM7CiAKLSAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWV2YWwodGltZXN0YW1wLCAmdGltZXQsICZ1cykgPT0gLTEpCisgICAgdGltZXQgPSBfUHlUaW1lX0RvdWJsZVRvVGltZXQodGltZXN0YW1wKTsKKyAgICBpZiAodGltZXQgPT0gKHRpbWVfdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gZGF0ZXRpbWVfZnJvbV90aW1ldF9hbmRfdXMoY2xzLCBmLCB0aW1ldCwgKGludCl1cywgdHppbmZvKTsKKyAgICBmcmFjdGlvbiA9IHRpbWVzdGFtcCAtIChkb3VibGUpdGltZXQ7CisgICAgdXMgPSAoaW50KV9QeVRpbWVfUm91bmRIYWxmRXZlbihmcmFjdGlvbiAqIDFlNik7CisgICAgaWYgKHVzIDwgMCkgeworICAgICAgICAvKiBUcnVuY2F0aW9uIHRvd2FyZHMgemVybyBpcyBub3Qgd2hhdCB3ZSB3YW50ZWQKKyAgICAgICAgICAgZm9yIG5lZ2F0aXZlIG51bWJlcnMgKFB5dGhvbidzIG1vZCBzZW1hbnRpY3MpICovCisgICAgICAgIHRpbWV0IC09IDE7CisgICAgICAgIHVzICs9IDEwMDAwMDA7CisgICAgfQorICAgIC8qIElmIHRpbWVzdGFtcCBpcyBsZXNzIHRoYW4gb25lIG1pY3Jvc2Vjb25kIHNtYWxsZXIgdGhhbiBhCisgICAgICogZnVsbCBzZWNvbmQsIHJvdW5kIHVwLiBPdGhlcndpc2UsIFZhbHVlRXJyb3JzIGFyZSByYWlzZWQKKyAgICAgKiBmb3Igc29tZSBmbG9hdHMuICovCisgICAgaWYgKHVzID09IDEwMDAwMDApIHsKKyAgICAgICAgdGltZXQgKz0gMTsKKyAgICAgICAgdXMgPSAwOworICAgIH0KKyAgICByZXR1cm4gZGF0ZXRpbWVfZnJvbV90aW1ldF9hbmRfdXMoY2xzLCBmLCB0aW1ldCwgdXMsIHR6aW5mbyk7CiB9CiAKIC8qIEludGVybmFsIGhlbHBlci4KQEAgLTQxMzgsMzEgKzQyMDAsNzMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHppbmZvKTsKIH0KIAotLyogUmV0dXJuIGJlc3QgcG9zc2libGUgbG9jYWwgdGltZSAtLSB0aGlzIGlzbid0IGNvbnN0cmFpbmVkIGJ5IHRoZQotICogcHJlY2lzaW9uIG9mIGEgdGltZXN0YW1wLgotICovCisvKltjbGluaWMgaW5wdXRdCisKK0BjbGFzc21ldGhvZAorZGF0ZXRpbWUuZGF0ZXRpbWUubm93CisKKyAgICB0ejogb2JqZWN0ID0gTm9uZQorICAgICAgICBUaW1lem9uZSBvYmplY3QuCisKK1JldHVybnMgbmV3IGRhdGV0aW1lIG9iamVjdCByZXByZXNlbnRpbmcgY3VycmVudCB0aW1lIGxvY2FsIHRvIHR6LgorCitJZiBubyB0eiBpcyBzcGVjaWZpZWQsIHVzZXMgbG9jYWwgdGltZXpvbmUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihkYXRldGltZV9kYXRldGltZV9ub3dfX2RvY19fLAorIm5vdygkdHlwZSwgLywgdHo9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgbmV3IGRhdGV0aW1lIG9iamVjdCByZXByZXNlbnRpbmcgY3VycmVudCB0aW1lIGxvY2FsIHRvIHR6LlxuIgorIlxuIgorIiAgdHpcbiIKKyIgICAgVGltZXpvbmUgb2JqZWN0LlxuIgorIlxuIgorIklmIG5vIHR6IGlzIHNwZWNpZmllZCwgdXNlcyBsb2NhbCB0aW1lem9uZS4iKTsKKworI2RlZmluZSBEQVRFVElNRV9EQVRFVElNRV9OT1dfTUVUSE9EREVGICAgIFwKKyAgICB7Im5vdyIsIChQeUNGdW5jdGlvbilkYXRldGltZV9kYXRldGltZV9ub3csIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTfE1FVEhfQ0xBU1MsIGRhdGV0aW1lX2RhdGV0aW1lX25vd19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotZGF0ZXRpbWVfbm93KFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpCitkYXRldGltZV9kYXRldGltZV9ub3dfaW1wbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp0eik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYXRldGltZV9kYXRldGltZV9ub3coUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CisgICAgUHlPYmplY3QgKnR6ID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgInxPOm5vdyIsIF9rZXl3b3JkcywKKyAgICAgICAgJnR6KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRhdGV0aW1lX2RhdGV0aW1lX25vd19pbXBsKHR5cGUsIHR6KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorZGF0ZXRpbWVfZGF0ZXRpbWVfbm93X2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqdHopCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTgzYzU2MzdlM2M4NDNmYSBpbnB1dD04MGQwOTg2OWM1MjY3ZDAwXSovCiB7CiAgICAgUHlPYmplY3QgKnNlbGY7Ci0gICAgUHlPYmplY3QgKnR6aW5mbyA9IFB5X05vbmU7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InR6IiwgTlVMTH07CiAKLSAgICBpZiAoISBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8Tzpub3ciLCBrZXl3b3JkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR6aW5mbykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChjaGVja190emluZm9fc3ViY2xhc3ModHppbmZvKSA8IDApCisgICAgLyogUmV0dXJuIGJlc3QgcG9zc2libGUgbG9jYWwgdGltZSAtLSB0aGlzIGlzbid0IGNvbnN0cmFpbmVkIGJ5IHRoZQorICAgICAqIHByZWNpc2lvbiBvZiBhIHRpbWVzdGFtcC4KKyAgICAgKi8KKyAgICBpZiAoY2hlY2tfdHppbmZvX3N1YmNsYXNzKHR6KSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc2VsZiA9IGRhdGV0aW1lX2Jlc3RfcG9zc2libGUoY2xzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyA9PSBQeV9Ob25lID8gbG9jYWx0aW1lIDogZ210aW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR6aW5mbyk7Ci0gICAgaWYgKHNlbGYgIT0gTlVMTCAmJiB0emluZm8gIT0gUHlfTm9uZSkgeworICAgIHNlbGYgPSBkYXRldGltZV9iZXN0X3Bvc3NpYmxlKChQeU9iamVjdCAqKXR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHogPT0gUHlfTm9uZSA/IGxvY2FsdGltZSA6IGdtdGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eik7CisgICAgaWYgKHNlbGYgIT0gTlVMTCAmJiB0eiAhPSBQeV9Ob25lKSB7CiAgICAgICAgIC8qIENvbnZlcnQgVVRDIHRvIHR6aW5mbydzIHpvbmUuICovCiAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gc2VsZjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CiAKLSAgICAgICAgc2VsZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodHppbmZvLCAmUHlJZF9mcm9tdXRjLCAiTyIsIHNlbGYpOworICAgICAgICBzZWxmID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCh0eiwgJlB5SWRfZnJvbXV0YywgIk8iLCBzZWxmKTsKICAgICAgICAgUHlfREVDUkVGKHRlbXApOwogICAgIH0KICAgICByZXR1cm4gc2VsZjsKQEAgLTQxODIsMTEgKzQyODYsMTEgQEAKIGRhdGV0aW1lX2Zyb210aW1lc3RhbXAoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprdykKIHsKICAgICBQeU9iamVjdCAqc2VsZjsKLSAgICBQeU9iamVjdCAqdGltZXN0YW1wOworICAgIGRvdWJsZSB0aW1lc3RhbXA7CiAgICAgUHlPYmplY3QgKnR6aW5mbyA9IFB5X05vbmU7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InRpbWVzdGFtcCIsICJ0eiIsIE5VTEx9OwogCi0gICAgaWYgKCEgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiT3xPOmZyb210aW1lc3RhbXAiLAorICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgImR8Tzpmcm9tdGltZXN0YW1wIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5d29yZHMsICZ0aW1lc3RhbXAsICZ0emluZm8pKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoY2hlY2tfdHppbmZvX3N1YmNsYXNzKHR6aW5mbykgPCAwKQpAQCAtNDE5OSw3ICs0MzAzLDYgQEAKICAgICBpZiAoc2VsZiAhPSBOVUxMICYmIHR6aW5mbyAhPSBQeV9Ob25lKSB7CiAgICAgICAgIC8qIENvbnZlcnQgVVRDIHRvIHR6aW5mbydzIHpvbmUuICovCiAgICAgICAgIFB5T2JqZWN0ICp0ZW1wID0gc2VsZjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZnJvbXV0Yyk7CiAKICAgICAgICAgc2VsZiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQodHppbmZvLCAmUHlJZF9mcm9tdXRjLCAiTyIsIHNlbGYpOwogICAgICAgICBQeV9ERUNSRUYodGVtcCk7CkBAIC00MjExLDEwICs0MzE0LDEwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGF0ZXRpbWVfdXRjZnJvbXRpbWVzdGFtcChQeU9iamVjdCAqY2xzLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqdGltZXN0YW1wOworICAgIGRvdWJsZSB0aW1lc3RhbXA7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKLSAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzp1dGNmcm9tdGltZXN0YW1wIiwgJnRpbWVzdGFtcCkpCisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJncywgImQ6dXRjZnJvbXRpbWVzdGFtcCIsICZ0aW1lc3RhbXApKQogICAgICAgICByZXN1bHQgPSBkYXRldGltZV9mcm9tX3RpbWVzdGFtcChjbHMsIGdtdGltZSwgdGltZXN0YW1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNDQyMSw2ICs0NTI0LDkgQEAKICAgICAgICAgICAgIGRlbHRhX3VzID0gREFURV9HRVRfTUlDUk9TRUNPTkQobGVmdCkgLQogICAgICAgICAgICAgICAgICAgICAgICBEQVRFX0dFVF9NSUNST1NFQ09ORChyaWdodCk7CiAgICAgICAgICAgICByZXN1bHQgPSBuZXdfZGVsdGEoZGVsdGFfZCwgZGVsdGFfcywgZGVsdGFfdXMsIDEpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgICAgICAgICBpZiAob2ZmZGlmZiAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRlbXAgPSByZXN1bHQ7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGVsdGFfc3VidHJhY3QocmVzdWx0LCBvZmZkaWZmKTsKQEAgLTQ0ODIsOCArNDU4OCw2IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZGF0ZXRpbWVfc3RyKFB5RGF0ZVRpbWVfRGF0ZVRpbWUgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoaXNvZm9ybWF0KTsKLQogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX2lzb2Zvcm1hdCwgIihzKSIsICIgIik7CiB9CiAKQEAgLTQ3NDksNyArNDg1Myw3IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KICAgICByZXN1bHQgPSBuZXdfdGltZXpvbmUoZGVsdGEsIG5hbWVvKTsKLSAgICBQeV9ERUNSRUYobmFtZW8pOworICAgIFB5X1hERUNSRUYobmFtZW8pOwogICBlcnJvcjoKICAgICBQeV9ERUNSRUYoZGVsdGEpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC00NzYyLDExICs0ODY2LDEwIEBACiAgICAgUHlPYmplY3QgKm9mZnNldDsKICAgICBQeU9iamVjdCAqdGVtcDsKICAgICBQeU9iamVjdCAqdHppbmZvID0gUHlfTm9uZTsKLSAgICBfUHlfSURFTlRJRklFUihmcm9tdXRjKTsKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsidHoiLCBOVUxMfTsKIAogICAgIGlmICghIFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrdywgInxPOmFzdGltZXpvbmUiLCBrZXl3b3JkcywKLQkJCQkgICAgICAmdHppbmZvKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR6aW5mbykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKGNoZWNrX3R6aW5mb19zdWJjbGFzcyh0emluZm8pID09IC0xKQpAQCAtNDg3Myw5ICs0OTc2LDE2IEBACiAgICAgICAgIHRpbWUudG1fd2RheSA9IC0xOwogICAgICAgICB0aW1lLnRtX2lzZHN0ID0gLTE7CiAgICAgICAgIHRpbWVzdGFtcCA9IG1rdGltZSgmdGltZSk7Ci0gICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLCBidXQgdG1fd2RheQotICAgICAgICAgKiBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLwotICAgICAgICBpZiAodGltZXN0YW1wID09ICh0aW1lX3QpKC0xKSAmJiB0aW1lLnRtX3dkYXkgPT0gLTEpIHsKKyAgICAgICAgaWYgKHRpbWVzdGFtcCA9PSAodGltZV90KSgtMSkKKyNpZm5kZWYgX0FJWAorICAgICAgICAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsCisgICAgICAgICAgICAgKiBidXQgdG1fd2RheSBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLworICAgICAgICAgICAgJiYgdGltZS50bV93ZGF5ID09IC0xCisjZWxzZQorICAgICAgICAgICAgLyogb24gQUlYLCB0bV93ZGF5IGlzIGFsd2F5cyBzZXRzLCBldmVuIG9uIGVycm9yICovCisjZW5kaWYKKyAgICAgICAgICApCisgICAgICAgIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lc3RhbXAgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ5ODksOSArNTA5OSw3IEBACiAKICAgICAvKiBDbGFzcyBtZXRob2RzOiAqLwogCi0gICAgeyJub3ciLCAgICAgICAgIChQeUNGdW5jdGlvbilkYXRldGltZV9ub3csCi0gICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMgfCBNRVRIX0NMQVNTLAotICAgICBQeURvY19TVFIoIlt0el0gLT4gbmV3IGRhdGV0aW1lIHdpdGggdHoncyBsb2NhbCBkYXkgYW5kIHRpbWUuIil9LAorICAgIERBVEVUSU1FX0RBVEVUSU1FX05PV19NRVRIT0RERUYKIAogICAgIHsidXRjbm93IiwgICAgICAgICAoUHlDRnVuY3Rpb24pZGF0ZXRpbWVfdXRjbm93LAogICAgICBNRVRIX05PQVJHUyB8IE1FVEhfQ0xBU1MsCkBAIC01Mjk5LDggKzU0MDcsOCBAQAogICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTUlOWUVBUiIsIE1JTllFQVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNQVhZRUFSIiwgTUFYWUVBUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTUlOWUVBUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTUFYWUVBUik7CiAKICAgICBQeV9JTkNSRUYoJlB5RGF0ZVRpbWVfRGF0ZVR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiZGF0ZSIsIChQeU9iamVjdCAqKSAmUHlEYXRlVGltZV9EYXRlVHlwZSk7CkBAIC01MzQ0LDEyICs1NDUyLDEyIEBACiAgICAgYXNzZXJ0KERJMTAwWSA9PSAyNSAqIERJNFkgLSAxKTsKICAgICBhc3NlcnQoREkxMDBZID09IGRheXNfYmVmb3JlX3llYXIoMTAwKzEpKTsKIAotICAgIHVzX3Blcl91cyA9IFB5TG9uZ19Gcm9tTG9uZygxKTsKKyAgICBvbmUgPSBQeUxvbmdfRnJvbUxvbmcoMSk7CiAgICAgdXNfcGVyX21zID0gUHlMb25nX0Zyb21Mb25nKDEwMDApOwogICAgIHVzX3Blcl9zZWNvbmQgPSBQeUxvbmdfRnJvbUxvbmcoMTAwMDAwMCk7CiAgICAgdXNfcGVyX21pbnV0ZSA9IFB5TG9uZ19Gcm9tTG9uZyg2MDAwMDAwMCk7CiAgICAgc2Vjb25kc19wZXJfZGF5ID0gUHlMb25nX0Zyb21Mb25nKDI0ICogMzYwMCk7Ci0gICAgaWYgKHVzX3Blcl91cyA9PSBOVUxMIHx8IHVzX3Blcl9tcyA9PSBOVUxMIHx8IHVzX3Blcl9zZWNvbmQgPT0gTlVMTCB8fAorICAgIGlmIChvbmUgPT0gTlVMTCB8fCB1c19wZXJfbXMgPT0gTlVMTCB8fCB1c19wZXJfc2Vjb25kID09IE5VTEwgfHwKICAgICAgICAgdXNfcGVyX21pbnV0ZSA9PSBOVUxMIHx8IHNlY29uZHNfcGVyX2RheSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGJtbW9kdWxlLmMgYi9Nb2R1bGVzL19kYm1tb2R1bGUuYwppbmRleCA4M2MwNTFjLi45M2VhNDE2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kYm1tb2R1bGUuYworKysgYi9Nb2R1bGVzL19kYm1tb2R1bGUuYwpAQCAtMTQsMTEgKzE0LDcgQEAKICAqLwogI2lmIGRlZmluZWQoSEFWRV9OREJNX0gpCiAjaW5jbHVkZSA8bmRibS5oPgotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotc3RhdGljIGNoYXIgKndoaWNoX2RibSA9ICJuZGJtIjsKLSNlbHNlCiBzdGF0aWMgY2hhciAqd2hpY2hfZGJtID0gIkdOVSBnZGJtIjsgIC8qIEVNWCBwb3J0IG9mIEdEQk0gKi8KLSNlbmRpZgogI2VsaWYgZGVmaW5lZChIQVZFX0dEQk1fTkRCTV9IKQogI2luY2x1ZGUgPGdkYm0vbmRibS5oPgogc3RhdGljIGNoYXIgKndoaWNoX2RibSA9ICJHTlUgZ2RibSI7CkBAIC0zMiw2ICsyOCwxMiBAQAogI2Vycm9yICJObyBuZGJtLmggYXZhaWxhYmxlISIKICNlbmRpZgogCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgZGJtCitjbGFzcyBkYm0uZGJtICJkYm1vYmplY3QgKiIgIiZEYm10eXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9OTI0NTA1NjQ2ODRhNjlhM10qLworCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIGludCBkaV9zaXplOyAgICAgICAgLyogLTEgbWVhbnMgcmVjb21wdXRlICovCkBAIC00Nyw4ICs0OSwxNyBAQAogCiBzdGF0aWMgUHlPYmplY3QgKkRibUVycm9yOwogCisvKltweXRob24gaW5wdXRdCitjbGFzcyBkYm1vYmplY3RfY29udmVydGVyKHNlbGZfY29udmVydGVyKToKKyAgICB0eXBlID0gImRibW9iamVjdCAqIgorICAgIGRlZiBwcmVfcmVuZGVyKHNlbGYpOgorICAgICAgICBzdXBlcigpLnByZV9yZW5kZXIoKQorICAgICAgICBzZWxmLm5hbWUgPSAnZHAnCitbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD02YWQ1MzYzNTc5MTM4NzlhXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1uZXdkYm1vYmplY3QoY2hhciAqZmlsZSwgaW50IGZsYWdzLCBpbnQgbW9kZSkKK25ld2RibW9iamVjdChjb25zdCBjaGFyICpmaWxlLCBpbnQgZmxhZ3MsIGludCBtb2RlKQogewogICAgIGRibW9iamVjdCAqZHA7CiAKQEAgLTU2LDcgKzY3LDggQEAKICAgICBpZiAoZHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZHAtPmRpX3NpemUgPSAtMTsKLSAgICBpZiAoIChkcC0+ZGlfZGJtID0gZGJtX29wZW4oZmlsZSwgZmxhZ3MsIG1vZGUpKSA9PSAwICkgeworICAgIC8qIFNlZSBpc3N1ZSAjMTkyOTYgKi8KKyAgICBpZiAoIChkcC0+ZGlfZGJtID0gZGJtX29wZW4oKGNoYXIgKilmaWxlLCBmbGFncywgbW9kZSkpID09IDAgKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhEYm1FcnJvcik7CiAgICAgICAgIFB5X0RFQ1JFRihkcCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjcsNyArNzksNyBAQAogLyogTWV0aG9kcyAqLwogCiBzdGF0aWMgdm9pZAotZGJtX2RlYWxsb2MocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCkKK2RibV9kZWFsbG9jKGRibW9iamVjdCAqZHApCiB7CiAgICAgaWYgKCBkcC0+ZGlfZGJtICkKICAgICAgICAgZGJtX2Nsb3NlKGRwLT5kaV9kYm0pOwpAQCAtOTUsNyArMTA3LDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBkYXR1bSBkcmVjLCBrcmVjOwogICAgIFB5X3NzaXplX3QgdG1wX3NpemU7CkBAIC0xNzAsNyArMTgyLDcgQEAKIH07CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fX2Nsb3NlKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fX2Nsb3NlKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CiAgICAgaWYgKGRwLT5kaV9kYm0pCiAgICAgICAgIGRibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTE4MCw5ICsxOTIsOSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2tleXMocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKK2RibV9rZXlzKGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnYsICppdGVtOworICAgIFB5T2JqZWN0ICp2LCAqaXRlbTsKICAgICBkYXR1bSBrZXk7CiAgICAgaW50IGVycjsKIApAQCAtMjUyLDMxICsyNjQsNjggQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc3FfaW5wbGFjZV9yZXBlYXQgKi8KIH07CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1kYm1fZ2V0KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQotewotICAgIGRhdHVtIGtleSwgdmFsOwotICAgIFB5T2JqZWN0ICpkZWZ2YWx1ZSA9IFB5X05vbmU7Ci0gICAgY2hhciAqdG1wX3B0cjsKLSAgICBQeV9zc2l6ZV90IHRtcF9zaXplOworLypbY2xpbmljIGlucHV0XQogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3xPOmdldCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBfcHRyLCAmdG1wX3NpemUsICZkZWZ2YWx1ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGtleS5kcHRyID0gdG1wX3B0cjsKLSAgICBrZXkuZHNpemUgPSB0bXBfc2l6ZTsKLSAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7Ci0gICAgdmFsID0gZGJtX2ZldGNoKGRwLT5kaV9kYm0sIGtleSk7Ci0gICAgaWYgKHZhbC5kcHRyICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHZhbC5kcHRyLCB2YWwuZHNpemUpOwotICAgIGVsc2UgewotICAgICAgICBQeV9JTkNSRUYoZGVmdmFsdWUpOwotICAgICAgICByZXR1cm4gZGVmdmFsdWU7Ci0gICAgfQorZGJtLmRibS5nZXQKKworICAgIHNlbGY6IGRibW9iamVjdAorCisgICAga2V5OiBzdHIobGVuZ3RoPVRydWUpCisgICAgZGVmYXVsdDogb2JqZWN0ID0gTm9uZQorICAgIC8KKworUmV0dXJuIHRoZSB2YWx1ZSBmb3Iga2V5IGlmIHByZXNlbnQsIG90aGVyd2lzZSBkZWZhdWx0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoZGJtX2RibV9nZXRfX2RvY19fLAorImdldCgkc2VsZiwga2V5LCBkZWZhdWx0PU5vbmUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIHZhbHVlIGZvciBrZXkgaWYgcHJlc2VudCwgb3RoZXJ3aXNlIGRlZmF1bHQuIik7CisKKyNkZWZpbmUgREJNX0RCTV9HRVRfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldCIsIChQeUNGdW5jdGlvbilkYm1fZGJtX2dldCwgTUVUSF9WQVJBUkdTLCBkYm1fZGJtX2dldF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX2RibV9nZXRfaW1wbChkYm1vYmplY3QgKmRwLCBjb25zdCBjaGFyICprZXksIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aCwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorZGJtX2RibV9nZXQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqa2V5OworICAgIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aDsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IFB5X05vbmU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInMjfE86Z2V0IiwKKyAgICAgICAgJmtleSwgJmtleV9sZW5ndGgsICZkZWZhdWx0X3ZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGRibV9kYm1fZ2V0X2ltcGwoZHAsIGtleSwga2V5X2xlbmd0aCwgZGVmYXVsdF92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zZXRkZWZhdWx0KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQorZGJtX2RibV9nZXRfaW1wbChkYm1vYmplY3QgKmRwLCBjb25zdCBjaGFyICprZXksIFB5X3NzaXplX2NsZWFuX3Qga2V5X2xlbmd0aCwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NDUyZWExMTM5NGU3ZTkyZCBpbnB1dD1hZWNmNWVmZDJmMmIxYTNiXSovCit7CisgICAgZGF0dW0gZGJtX2tleSwgdmFsOworCisgICAgZGJtX2tleS5kcHRyID0gKGNoYXIgKilrZXk7CisgICAgZGJtX2tleS5kc2l6ZSA9IGtleV9sZW5ndGg7CisgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOworICAgIHZhbCA9IGRibV9mZXRjaChkcC0+ZGlfZGJtLCBkYm1fa2V5KTsKKyAgICBpZiAodmFsLmRwdHIgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUodmFsLmRwdHIsIHZhbC5kc2l6ZSk7CisKKyAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7CisgICAgcmV0dXJuIGRlZmF1bHRfdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fc2V0ZGVmYXVsdChkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBkYXR1bSBrZXksIHZhbDsKICAgICBQeU9iamVjdCAqZGVmdmFsdWUgPSBOVUxMOwpAQCAtMzE3LDE4ICszNjYsMzMgQEAKICAgICByZXR1cm4gZGVmdmFsdWU7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fX2VudGVyX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZXhpdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfY2xvc2UsIE5VTEwpOworfQorCisKIHN0YXRpYyBQeU1ldGhvZERlZiBkYm1fbWV0aG9kc1tdID0gewogICAgIHsiY2xvc2UiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9fY2xvc2UsICAgICAgICBNRVRIX05PQVJHUywKICAgICAgImNsb3NlKClcbkNsb3NlIHRoZSBkYXRhYmFzZS4ifSwKICAgICB7ImtleXMiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilkYm1fa2V5cywgICAgICAgICAgTUVUSF9OT0FSR1MsCiAgICAgICJrZXlzKCkgLT4gbGlzdFxuUmV0dXJuIGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuIn0sCi0gICAgeyJnZXQiLCAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGJtX2dldCwgICAgICAgICAgIE1FVEhfVkFSQVJHUywKLSAgICAgImdldChrZXlbLCBkZWZhdWx0XSkgLT4gdmFsdWVcbiIKLSAgICAgIlJldHVybiB0aGUgdmFsdWUgZm9yIGtleSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZGVmYXVsdC4ifSwKKyAgICBEQk1fREJNX0dFVF9NRVRIT0RERUYKICAgICB7InNldGRlZmF1bHQiLCAgICAgIChQeUNGdW5jdGlvbilkYm1fc2V0ZGVmYXVsdCwgICAgTUVUSF9WQVJBUkdTLAogICAgICAic2V0ZGVmYXVsdChrZXlbLCBkZWZhdWx0XSkgLT4gdmFsdWVcbiIKICAgICAgIlJldHVybiB0aGUgdmFsdWUgZm9yIGtleSBpZiBwcmVzZW50LCBvdGhlcndpc2UgZGVmYXVsdC4gIElmIGtleVxuIgogICAgICAiaXMgbm90IGluIHRoZSBkYXRhYmFzZSwgaXQgaXMgaW5zZXJ0ZWQgd2l0aCBkZWZhdWx0IGFzIHRoZSB2YWx1ZS4ifSwKKyAgICB7Il9fZW50ZXJfXyIsIGRibV9fZW50ZXJfXywgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHsiX19leGl0X18iLCAgZGJtX19leGl0X18sIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTM2NSwxNiArNDI5LDcwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1kYm1vcGVuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpuYW1lOwotICAgIGNoYXIgKmZsYWdzID0gInIiOwotICAgIGludCBpZmxhZ3M7Ci0gICAgaW50IG1vZGUgPSAwNjY2OworLypbY2xpbmljIGlucHV0XQogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3xzaTpvcGVuIiwgJm5hbWUsICZmbGFncywgJm1vZGUpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7CitkYm0ub3BlbiBhcyBkYm1vcGVuCisKKyAgICBmaWxlbmFtZTogc3RyCisgICAgICAgIFRoZSBmaWxlbmFtZSB0byBvcGVuLgorCisgICAgZmxhZ3M6IHN0cj0iciIKKyAgICAgICAgSG93IHRvIG9wZW4gdGhlIGZpbGUuICAiciIgZm9yIHJlYWRpbmcsICJ3IiBmb3Igd3JpdGluZywgZXRjLgorCisgICAgbW9kZTogaW50KHB5X2RlZmF1bHQ9IjBvNjY2IikgPSAwbzY2NgorICAgICAgICBJZiBjcmVhdGluZyBhIG5ldyBmaWxlLCB0aGUgbW9kZSBiaXRzIGZvciB0aGUgbmV3IGZpbGUKKyAgICAgICAgKGUuZy4gb3MuT19SRFdSKS4KKworICAgIC8KKworUmV0dXJuIGEgZGF0YWJhc2Ugb2JqZWN0LgorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihkYm1vcGVuX19kb2NfXywKKyJvcGVuKCRtb2R1bGUsIGZpbGVuYW1lLCBmbGFncz1cJ3JcJywgbW9kZT0wbzY2NiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGRhdGFiYXNlIG9iamVjdC5cbiIKKyJcbiIKKyIgIGZpbGVuYW1lXG4iCisiICAgIFRoZSBmaWxlbmFtZSB0byBvcGVuLlxuIgorIiAgZmxhZ3NcbiIKKyIgICAgSG93IHRvIG9wZW4gdGhlIGZpbGUuICBcInJcIiBmb3IgcmVhZGluZywgXCJ3XCIgZm9yIHdyaXRpbmcsIGV0Yy5cbiIKKyIgIG1vZGVcbiIKKyIgICAgSWYgY3JlYXRpbmcgYSBuZXcgZmlsZSwgdGhlIG1vZGUgYml0cyBmb3IgdGhlIG5ldyBmaWxlXG4iCisiICAgIChlLmcuIG9zLk9fUkRXUikuIik7CisKKyNkZWZpbmUgREJNT1BFTl9NRVRIT0RERUYgICAgXAorICAgIHsib3BlbiIsIChQeUNGdW5jdGlvbilkYm1vcGVuLCBNRVRIX1ZBUkFSR1MsIGRibW9wZW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2RibW9wZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqZmxhZ3MsIGludCBtb2RlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2RibW9wZW4oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7CisgICAgY29uc3QgY2hhciAqZmxhZ3MgPSAiciI7CisgICAgaW50IG1vZGUgPSA0Mzg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInN8c2k6b3BlbiIsCisgICAgICAgICZmaWxlbmFtZSwgJmZsYWdzLCAmbW9kZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBkYm1vcGVuX2ltcGwobW9kdWxlLCBmaWxlbmFtZSwgZmxhZ3MsIG1vZGUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1vcGVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmZsYWdzLCBpbnQgbW9kZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD05YTdiNzI1ZjljNGRjZWMyIGlucHV0PTY0OTlhYjBmYWIxMzMzYWNdKi8KK3sKKyAgICBpbnQgaWZsYWdzOworCiAgICAgaWYgKCBzdHJjbXAoZmxhZ3MsICJyIikgPT0gMCApCiAgICAgICAgIGlmbGFncyA9IE9fUkRPTkxZOwogICAgIGVsc2UgaWYgKCBzdHJjbXAoZmxhZ3MsICJ3IikgPT0gMCApCkBAIC0zOTAsMTMgKzUwOCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImFyZyAyIHRvIG9wZW4gc2hvdWxkIGJlICdyJywgJ3cnLCAnYycsIG9yICduJyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIG5ld2RibW9iamVjdChuYW1lLCBpZmxhZ3MsIG1vZGUpOworICAgIHJldHVybiBuZXdkYm1vYmplY3QoZmlsZW5hbWUsIGlmbGFncywgbW9kZSk7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBkYm1tb2R1bGVfbWV0aG9kc1tdID0gewotICAgIHsgIm9wZW4iLCAoUHlDRnVuY3Rpb24pZGJtb3BlbiwgTUVUSF9WQVJBUkdTLAotICAgICAgIm9wZW4ocGF0aFssIGZsYWdbLCBtb2RlXV0pIC0+IG1hcHBpbmdcbiIKLSAgICAgICJSZXR1cm4gYSBkYXRhYmFzZSBvYmplY3QuIn0sCisgICAgREJNT1BFTl9NRVRIT0RERUYKICAgICB7IDAsIDAgfSwKIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2RlY2ltYWwvX2RlY2ltYWwuYyBiL01vZHVsZXMvX2RlY2ltYWwvX2RlY2ltYWwuYwppbmRleCBlYTUyNTNlLi5mMDAwODg3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kZWNpbWFsL19kZWNpbWFsLmMKKysrIGIvTW9kdWxlcy9fZGVjaW1hbC9fZGVjaW1hbC5jCkBAIC0zOSw4ICszOSw4IEBACiAjaW5jbHVkZSAibWVtb3J5LmgiCiAKIAotI2lmIE1QRF9NQUpPUl9WRVJTSU9OICE9IDIKLSAgI2Vycm9yICJsaWJtcGRlYyBtYWpvciB2ZXJzaW9uIDIgcmVxdWlyZWQiCisjaWYgIWRlZmluZWQoTVBEX1ZFUlNJT05fSEVYKSB8fCBNUERfVkVSU0lPTl9IRVggPCAweDAyMDQwMTAwCisgICNlcnJvciAibGlibXBkZWMgdmVyc2lvbiA+PSAyLjQuMSByZXF1aXJlZCIKICNlbmRpZgogCiAKQEAgLTM1NDIsNyArMzU0Miw3IEBACiAgICAgfQogfQogCi1zdGF0aWMgUHlPYmplY3QgKkRlY2ltYWxUdXBsZSA9IE5VTEw7CitzdGF0aWMgUHlUeXBlT2JqZWN0ICpEZWNpbWFsVHVwbGUgPSBOVUxMOwogLyogUmV0dXJuIHRoZSBEZWNpbWFsVHVwbGUgcmVwcmVzZW50YXRpb24gb2YgYSBQeURlY09iamVjdC4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBQeURlY19Bc1R1cGxlKFB5T2JqZWN0ICpkZWMsIFB5T2JqZWN0ICpkdW1teSBVTlVTRUQpCkBAIC0zNjI1LDcgKzM2MjUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhEZWNpbWFsVHVwbGUsCisgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncygoUHlPYmplY3QgKilEZWNpbWFsVHVwbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduLCBjb2VmZiwgZXhwdCwgTlVMTCk7CiAKIG91dDoKQEAgLTU1NjIsOSArNTU2MiwxNCBAQAogCiAgICAgLyogRGVjaW1hbFR1cGxlICovCiAgICAgQVNTSUdOX1BUUihjb2xsZWN0aW9ucywgUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJjb2xsZWN0aW9ucyIpKTsKLSAgICBBU1NJR05fUFRSKERlY2ltYWxUdXBsZSwgUHlPYmplY3RfQ2FsbE1ldGhvZChjb2xsZWN0aW9ucywKKyAgICBBU1NJR05fUFRSKERlY2ltYWxUdXBsZSwgKFB5VHlwZU9iamVjdCAqKVB5T2JqZWN0X0NhbGxNZXRob2QoY29sbGVjdGlvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZWR0dXBsZSIsICIoc3MpIiwgIkRlY2ltYWxUdXBsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2lnbiBkaWdpdHMgZXhwb25lbnQiKSk7CisKKyAgICBBU1NJR05fUFRSKG9iaiwgUHlVbmljb2RlX0Zyb21TdHJpbmcoImRlY2ltYWwiKSk7CisgICAgQ0hFQ0tfSU5UKFB5RGljdF9TZXRJdGVtU3RyaW5nKERlY2ltYWxUdXBsZS0+dHBfZGljdCwgIl9fbW9kdWxlX18iLCBvYmopKTsKKyAgICBQeV9DTEVBUihvYmopOworCiAgICAgLyogTXV0YWJsZU1hcHBpbmcgKi8KICAgICBBU1NJR05fUFRSKE11dGFibGVNYXBwaW5nLCBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbGxlY3Rpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk11dGFibGVNYXBwaW5nIikpOwpAQCAtNTU5MSw3ICs1NTk2LDcgQEAKICAgICBDSEVDS19JTlQoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJDb250ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCAqKSZQeURlY0NvbnRleHRfVHlwZSkpOwogICAgIFB5X0lOQ1JFRihEZWNpbWFsVHVwbGUpOwotICAgIENIRUNLX0lOVChQeU1vZHVsZV9BZGRPYmplY3QobSwgIkRlY2ltYWxUdXBsZSIsIERlY2ltYWxUdXBsZSkpOworICAgIENIRUNLX0lOVChQeU1vZHVsZV9BZGRPYmplY3QobSwgIkRlY2ltYWxUdXBsZSIsIChQeU9iamVjdCAqKURlY2ltYWxUdXBsZSkpOwogCiAKICAgICAvKiBDcmVhdGUgdG9wIGxldmVsIGV4Y2VwdGlvbiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9pby5jIGIvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9pby5jCmluZGV4IGI2NzMyNGQuLmE0NWE0MjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvaW8uYworKysgYi9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL2lvLmMKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCiAgICAgaWYgKG1wZF9pc3NwZWNpYWwoZGVjKSkgewogCi0gICAgICAgIG1lbSA9IHNpemVvZiAiLUluZmluaXR5IjsKKyAgICAgICAgbWVtID0gc2l6ZW9mICItSW5maW5pdHklIjsKICAgICAgICAgaWYgKG1wZF9pc25hbihkZWMpICYmIGRlYy0+bGVuID4gMCkgewogICAgICAgICAgICAgLyogZGlhZ25vc3RpYyBjb2RlICovCiAgICAgICAgICAgICBtZW0gKz0gZGVjLT5kaWdpdHM7CkBAIC02MDksMTAgKzYwOSwxMCBAQAogICAgICAgICAgICAgKmNwKysgPSAoZmxhZ3MmTVBEX0ZNVF9VUFBFUikgPyAnRScgOiAnZSc7CiAgICAgICAgICAgICBjcCA9IGV4cF90b19zdHJpbmcoY3AsIGxkaWdpdHMtZHBsYWNlKTsKICAgICAgICAgfQorICAgIH0KIAotICAgICAgICBpZiAoZmxhZ3MmTVBEX0ZNVF9QRVJDRU5UKSB7Ci0gICAgICAgICAgICAqY3ArKyA9ICclJzsKLSAgICAgICAgfQorICAgIGlmIChmbGFncyZNUERfRk1UX1BFUkNFTlQpIHsKKyAgICAgICAgKmNwKysgPSAnJSc7CiAgICAgfQogCiAgICAgYXNzZXJ0KGNwIDwgZGVjc3RyaW5nK21lbSk7CkBAIC0xMjYwLDYgKzEyNjAsOSBAQAogICAgICAgICAgICAgc3RhY2tzcGVjLmFsaWduID0gJz4nOwogICAgICAgICAgICAgc3BlYyA9ICZzdGFja3NwZWM7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGUgPT0gJyUnKSB7CisgICAgICAgICAgICBmbGFncyB8PSBNUERfRk1UX1BFUkNFTlQ7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIHVpbnQzMl90IHdvcmtzdGF0dXMgPSAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9tcGRlY2ltYWwuaCBiL01vZHVsZXMvX2RlY2ltYWwvbGlibXBkZWMvbXBkZWNpbWFsLmgKaW5kZXggYjQzMjMxYy4uNWNhNzQxMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZGVjaW1hbC9saWJtcGRlYy9tcGRlY2ltYWwuaAorKysgYi9Nb2R1bGVzL19kZWNpbWFsL2xpYm1wZGVjL21wZGVjaW1hbC5oCkBAIC0xMDgsOSArMTA4LDEzIEBACiAKICNkZWZpbmUgTVBEX01BSk9SX1ZFUlNJT04gMgogI2RlZmluZSBNUERfTUlOT1JfVkVSU0lPTiA0Ci0jZGVmaW5lIE1QRF9NSUNST19WRVJTSU9OIDAKKyNkZWZpbmUgTVBEX01JQ1JPX1ZFUlNJT04gMQogCi0jZGVmaW5lIE1QRF9WRVJTSU9OICIyLjQuMCIKKyNkZWZpbmUgTVBEX1ZFUlNJT04gIjIuNC4xIgorCisjZGVmaW5lIE1QRF9WRVJTSU9OX0hFWCAoKE1QRF9NQUpPUl9WRVJTSU9OIDw8IDI0KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAoTVBEX01JTk9SX1ZFUlNJT04gPDwgMTYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIChNUERfTUlDUk9fVkVSU0lPTiA8PCAgOCkpCiAKIGNvbnN0IGNoYXIgKm1wZF92ZXJzaW9uKHZvaWQpOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19kZWNpbWFsL3Rlc3RzL2RlY2NoZWNrLnB5IGIvTW9kdWxlcy9fZGVjaW1hbC90ZXN0cy9kZWNjaGVjay5weQppbmRleCBjNGM1YTQ0Li4yNzEzN2IyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19kZWNpbWFsL3Rlc3RzL2RlY2NoZWNrLnB5CisrKyBiL01vZHVsZXMvX2RlY2ltYWwvdGVzdHMvZGVjY2hlY2sucHkKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiAjIEZ1bmN0aW9ucyB0aGF0IHJlcXVpcmUgYSByZXN0cmljdGVkIGV4cG9uZW50IHJhbmdlIGZvciByZWFzb25hYmxlIHJ1bnRpbWVzLgogVW5hcnlSZXN0cmljdGVkID0gWwotICAnX19jZWlsX18nLCAnX19mbG9vcl9fJywgJ19faW50X18nLCAnX19sb25nX18nLCAnX190cnVuY19fJywKKyAgJ19fY2VpbF9fJywgJ19fZmxvb3JfXycsICdfX2ludF9fJywgJ19fdHJ1bmNfXycsCiAgICd0b19pbnRlZ3JhbCcsICd0b19pbnRlZ3JhbF92YWx1ZScKIF0KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZGVjaW1hbC90ZXN0cy9ydW5hbGwuYmF0IGIvTW9kdWxlcy9fZGVjaW1hbC90ZXN0cy9ydW5hbGwuYmF0CmluZGV4IDViYzg3MmEuLjU2OGY5MmYgMTAwNzU1Ci0tLSBhL01vZHVsZXMvX2RlY2ltYWwvdGVzdHMvcnVuYWxsLmJhdAorKysgYi9Nb2R1bGVzL19kZWNpbWFsL3Rlc3RzL3J1bmFsbC5iYXQKQEAgLTEsMTExICsxLDExMSBAQAotQEVDSE8gT0ZGCi0KLXJlbSBUZXN0IGFsbCBtYWNoaW5lIGNvbmZpZ3VyYXRpb25zLCBweWRlYnVnLCByZWZsZWFrcywgcmVsZWFzZSBidWlsZC4KLQotY2QgLi5cLi5cLi5cCi0KLQotZWNoby4KLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGRpbmcgUHl0aG9uCi1lY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLQotY2FsbCAiJVZTMTAwQ09NTlRPT0xTJVwuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiB4NjQKLW1zYnVpbGQgL25vY29uc29sZWxvZ2dlciAvdGFyZ2V0OmNsZWFuIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtVGFyZ2V0PXg2NAotbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIC90YXJnZXQ6Y2xlYW4gUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPURlYnVnIC9wOlBsYXRmb3JtVGFyZ2V0PXg2NAotbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtPXg2NAotbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1EZWJ1ZyAvcDpQbGF0Zm9ybT14NjQKLQotY2FsbCAiJVZTMTAwQ09NTlRPT0xTJVwuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiB4ODYKLW1zYnVpbGQgL25vY29uc29sZWxvZ2dlciBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249UmVsZWFzZSAvcDpQbGF0Zm9ybT1XaW4zMgotbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1EZWJ1ZyAvcDpQbGF0Zm9ybT1XaW4zMgotZWNoby4KLWVjaG8uCi0KLWVjaG8uCi1lY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZWNobyAjICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2RlY2ltYWw6IHBsYXRmb3JtPXg2NAotZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8uCi0KLWNkIFBDYnVpbGRcYW1kNjQKLQotZWNobyAjID09PT09PT09PT09PT09PT09PT09IHJlZmxlYWsgdGVzdHMgPT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8uCi1weXRob25fZC5leGUgLW0gdGVzdCAtdWFsbCAtUiAyOjIgdGVzdF9kZWNpbWFsCi1lY2hvLgotZWNoby4KLQotZWNobyAjID09PT09PT09PT09PT09PT09PT09IHJlZ3VsYXIgdGVzdHMgPT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8uCi1weXRob24uZXhlIC1tIHRlc3QgLXVhbGwgdGVzdF9kZWNpbWFsCi1lY2hvLgotZWNoby4KLQotY2QgLi4KLQotZWNoby4KLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvICMgICAgICAgICAgICAgICAgICAgICAgIHRlc3RfZGVjaW1hbDogcGxhdGZvcm09eDg2Ci1lY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLQotZWNobyAjID09PT09PT09PT09PT09PT09PT09IHJlZmxlYWsgdGVzdHMgPT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8uCi1weXRob25fZC5leGUgLW0gdGVzdCAtdWFsbCAtUiAyOjIgdGVzdF9kZWNpbWFsCi1lY2hvLgotZWNoby4KLQotZWNobyAjID09PT09PT09PT09PT09PT09PT09IHJlZ3VsYXIgdGVzdHMgPT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8uCi1weXRob24uZXhlIC1tIHRlc3QgLXVhbGwgdGVzdF9kZWNpbWFsCi1lY2hvLgotZWNoby4KLQotY2QgYW1kNjQKLQotZWNoby4KLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvICMgICAgICAgICAgICAgICAgICAgICAgICAgZGVjY2hlY2s6IHBsYXRmb3JtPXg2NAotZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8uCi0KLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09PSBkZWJ1ZyBidWlsZCA9PT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLXB5dGhvbl9kLmV4ZSAuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzXGRlY2NoZWNrLnB5Ci1lY2hvLgotZWNoby4KLQotZWNobyAjID09PT09PT09PT09PT09PT09PT0gcmVsZWFzZSBidWlsZCA9PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvLgotcHl0aG9uLmV4ZSAuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzXGRlY2NoZWNrLnB5Ci1lY2hvLgotZWNoby4KLQotY2QgLi4KLQotZWNoby4KLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci1lY2hvICMgICAgICAgICAgICAgICAgICAgICAgICAgZGVjY2hlY2s6IHBsYXRmb3JtPXg4NgotZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8uCi1lY2hvLgotCi1lY2hvICMgPT09PT09PT09PT09PT09PT09PT0gZGVidWcgYnVpbGQgPT09PT09PT09PT09PT09PT09PT09PT0KLWVjaG8uCi1weXRob25fZC5leGUgLi5cTW9kdWxlc1xfZGVjaW1hbFx0ZXN0c1xkZWNjaGVjay5weQotZWNoby4KLWVjaG8uCi0KLWVjaG8gIyA9PT09PT09PT09PT09PT09PT09IHJlbGVhc2UgYnVpbGQgPT09PT09PT09PT09PT09PT09PT09PQotZWNoby4KLXB5dGhvbi5leGUgLi5cTW9kdWxlc1xfZGVjaW1hbFx0ZXN0c1xkZWNjaGVjay5weQotZWNoby4KLWVjaG8uCi0KLQotY2QgLi5cTW9kdWxlc1xfZGVjaW1hbFx0ZXN0cwotCi0KLQorQEVDSE8gT0ZGDQorDQorcmVtIFRlc3QgYWxsIG1hY2hpbmUgY29uZmlndXJhdGlvbnMsIHB5ZGVidWcsIHJlZmxlYWtzLCByZWxlYXNlIGJ1aWxkLg0KKw0KK2NkIC4uXC4uXC4uXA0KKw0KKw0KK2VjaG8uDQorZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVpbGRpbmcgUHl0aG9uDQorZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KKw0KK2NhbGwgIiVWUzEwMENPTU5UT09MUyVcLi5cLi5cVkNcdmN2YXJzYWxsLmJhdCIgeDY0DQorbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIC90YXJnZXQ6Y2xlYW4gUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPVJlbGVhc2UgL3A6UGxhdGZvcm1UYXJnZXQ9eDY0DQorbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIC90YXJnZXQ6Y2xlYW4gUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPURlYnVnIC9wOlBsYXRmb3JtVGFyZ2V0PXg2NA0KK21zYnVpbGQgL25vY29uc29sZWxvZ2dlciBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249UmVsZWFzZSAvcDpQbGF0Zm9ybT14NjQNCittc2J1aWxkIC9ub2NvbnNvbGVsb2dnZXIgUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPURlYnVnIC9wOlBsYXRmb3JtPXg2NA0KKw0KK2NhbGwgIiVWUzEwMENPTU5UT09MUyVcLi5cLi5cVkNcdmN2YXJzYWxsLmJhdCIgeDg2DQorbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtPVdpbjMyDQorbXNidWlsZCAvbm9jb25zb2xlbG9nZ2VyIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1EZWJ1ZyAvcDpQbGF0Zm9ybT1XaW4zMg0KK2VjaG8uDQorZWNoby4NCisNCitlY2hvLg0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorZWNobyAjICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2RlY2ltYWw6IHBsYXRmb3JtPXg2NA0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorZWNoby4NCisNCitjZCBQQ2J1aWxkXGFtZDY0DQorDQorZWNobyAjID09PT09PT09PT09PT09PT09PT09IHJlZmxlYWsgdGVzdHMgPT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KK3B5dGhvbl9kLmV4ZSAtbSB0ZXN0IC11YWxsIC1SIDI6MiB0ZXN0X2RlY2ltYWwNCitlY2hvLg0KK2VjaG8uDQorDQorZWNobyAjID09PT09PT09PT09PT09PT09PT09IHJlZ3VsYXIgdGVzdHMgPT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KK3B5dGhvbi5leGUgLW0gdGVzdCAtdWFsbCB0ZXN0X2RlY2ltYWwNCitlY2hvLg0KK2VjaG8uDQorDQorY2QgLi4NCisNCitlY2hvLg0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorZWNobyAjICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2RlY2ltYWw6IHBsYXRmb3JtPXg4Ng0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorZWNoby4NCisNCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT0gcmVmbGVhayB0ZXN0cyA9PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8uDQorcHl0aG9uX2QuZXhlIC1tIHRlc3QgLXVhbGwgLVIgMjoyIHRlc3RfZGVjaW1hbA0KK2VjaG8uDQorZWNoby4NCisNCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT0gcmVndWxhciB0ZXN0cyA9PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8uDQorcHl0aG9uLmV4ZSAtbSB0ZXN0IC11YWxsIHRlc3RfZGVjaW1hbA0KK2VjaG8uDQorZWNoby4NCisNCitjZCBhbWQ2NA0KKw0KK2VjaG8uDQorZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvICMgICAgICAgICAgICAgICAgICAgICAgICAgZGVjY2hlY2s6IHBsYXRmb3JtPXg2NA0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorZWNoby4NCisNCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT0gZGVidWcgYnVpbGQgPT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KK3B5dGhvbl9kLmV4ZSAuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzXGRlY2NoZWNrLnB5DQorZWNoby4NCitlY2hvLg0KKw0KK2VjaG8gIyA9PT09PT09PT09PT09PT09PT09IHJlbGVhc2UgYnVpbGQgPT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8uDQorcHl0aG9uLmV4ZSAuLlwuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzXGRlY2NoZWNrLnB5DQorZWNoby4NCitlY2hvLg0KKw0KK2NkIC4uDQorDQorZWNoby4NCitlY2hvICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KK2VjaG8gIyAgICAgICAgICAgICAgICAgICAgICAgICBkZWNjaGVjazogcGxhdGZvcm09eDg2DQorZWNobyAjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KK2VjaG8uDQorDQorZWNobyAjID09PT09PT09PT09PT09PT09PT09IGRlYnVnIGJ1aWxkID09PT09PT09PT09PT09PT09PT09PT09DQorZWNoby4NCitweXRob25fZC5leGUgLi5cTW9kdWxlc1xfZGVjaW1hbFx0ZXN0c1xkZWNjaGVjay5weQ0KK2VjaG8uDQorZWNoby4NCisNCitlY2hvICMgPT09PT09PT09PT09PT09PT09PSByZWxlYXNlIGJ1aWxkID09PT09PT09PT09PT09PT09PT09PT0NCitlY2hvLg0KK3B5dGhvbi5leGUgLi5cTW9kdWxlc1xfZGVjaW1hbFx0ZXN0c1xkZWNjaGVjay5weQ0KK2VjaG8uDQorZWNoby4NCisNCisNCitjZCAuLlxNb2R1bGVzXF9kZWNpbWFsXHRlc3RzDQorDQorDQorDQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYyBiL01vZHVsZXMvX2VsZW1lbnR0cmVlLmMKaW5kZXggZjQ1ODkzZi4uY2Y4MTllOCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZWxlbWVudHRyZWUuYworKysgYi9Nb2R1bGVzL19lbGVtZW50dHJlZS5jCkBAIC0xLDYzICsxLDIyIEBACi0vKgotICogRWxlbWVudFRyZWUKLSAqICRJZDogX2VsZW1lbnR0cmVlLmMgMzQ3MyAyMDA5LTAxLTExIDIyOjUzOjU1WiBmcmVkcmlrICQKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4KKyAqIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLgogICoKLSAqIGVsZW1lbnR0cmVlIGFjY2VsZXJhdG9yCi0gKgotICogSGlzdG9yeToKLSAqIDE5OTktMDYtMjAgZmwgIGNyZWF0ZWQgKGFzIHBhcnQgb2Ygc2dtbG9wKQotICogMjAwMS0wNS0yOSBmbCAgZWZmZG9tIGVkaXRpb24KLSAqIDIwMDMtMDItMjcgZmwgIGVsZW1lbnR0cmVlIGVkaXRpb24gKGFscGhhKQotICogMjAwNC0wNi0wMyBmbCAgdXBkYXRlcyBmb3IgZWxlbWVudHRyZWUgMS4yCi0gKiAyMDA1LTAxLTA1IGZsICBtYWpvciBvcHRpbWl6YXRpb24gZWZmb3J0Ci0gKiAyMDA1LTAxLTExIGZsICBmaXJzdCBwdWJsaWMgcmVsZWFzZSAoY0VsZW1lbnRUcmVlIDAuOCkKLSAqIDIwMDUtMDEtMTIgZmwgIHNwbGl0IGVsZW1lbnQgb2JqZWN0IGludG8gYmFzZSBhbmQgZXh0cmFzCi0gKiAyMDA1LTAxLTEzIGZsICB1c2UgdGFnZ2VkIHBvaW50ZXJzIGZvciB0YWlsL3RleHQgKGNFbGVtZW50VHJlZSAwLjkpCi0gKiAyMDA1LTAxLTE3IGZsICBhZGRlZCB0cmVlYnVpbGRlciBjbG9zZSBtZXRob2QKLSAqIDIwMDUtMDEtMTcgZmwgIGZpeGVkIGNyYXNoIGluIGdldGNoaWxkcmVuCi0gKiAyMDA1LTAxLTE4IGZsICByZW1vdmVkIG9ic2VydmVyIGFwaSwgYWRkZWQgaXRlcnBhcnNlIChjRWxlbWVudFRyZWUgMC45LjMpCi0gKiAyMDA1LTAxLTIzIGZsICByZXZpc2VkIGl0ZXJwYXJzZSBhcGk7IGFkZGVkIG5hbWVzcGFjZSBldmVudCBzdXBwb3J0ICgwLjkuOCkKLSAqIDIwMDUtMDEtMjYgZmwgIGFkZGVkIFZFUlNJT04gbW9kdWxlIHByb3BlcnR5IChjRWxlbWVudFRyZWUgMS4wKQotICogMjAwNS0wMS0yOCBmbCAgYWRkZWQgcmVtb3ZlIG1ldGhvZCAoMS4wLjEpCi0gKiAyMDA1LTAzLTAxIGZsICBhZGRlZCBpc2VsZW1lbnQgZnVuY3Rpb247IGZpeGVkIG1ha2VlbGVtZW50IGFsaWFzaW5nICgxLjAuMikKLSAqIDIwMDUtMDMtMTMgZmwgIGV4cG9ydCBDb21tZW50IGFuZCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24vUEkgaGVscGVycwotICogMjAwNS0wMy0yNiBmbCAgYWRkZWQgQ29tbWVudCBhbmQgUEkgc3VwcG9ydCB0byBYTUxQYXJzZXIKLSAqIDIwMDUtMDMtMjcgZmwgIGV2ZW50IG9wdGltaXphdGlvbnM7IGNvbXBsYWluIGFib3V0IGJvZ3VzIGV2ZW50cwotICogMjAwNS0wOC0wOCBmbCAgZml4ZWQgcmVhZCBlcnJvciBoYW5kbGluZyBpbiBwYXJzZQotICogMjAwNS0wOC0xMSBmbCAgYWRkZWQgcnVudGltZSB0ZXN0IGZvciBjb3B5IHdvcmthcm91bmQgKDEuMC4zKQotICogMjAwNS0xMi0xMyBmbCAgYWRkZWQgZXhwYXRfY2FwaSBzdXBwb3J0IChmb3IgeG1sLmV0cmVlKSAoMS4wLjQpCi0gKiAyMDA1LTEyLTE2IGZsICBhZGRlZCBzdXBwb3J0IGZvciBub24tc3RhbmRhcmQgZW5jb2RpbmdzCi0gKiAyMDA2LTAzLTA4IGZsICBmaXhlZCBhIGNvdXBsZSBvZiBwb3RlbnRpYWwgbnVsbC1yZWZzIGFuZCBsZWFrcwotICogMjAwNi0wMy0xMiBmbCAgbWVyZ2UgaW4gMi41IHNzaXplX3QgY2hhbmdlcwotICogMjAwNy0wOC0yNSBmbCAgY2FsbCBjdXN0b20gYnVpbGRlcidzIGNsb3NlIG1ldGhvZCBmcm9tIFhNTFBhcnNlcgotICogMjAwNy0wOC0zMSBmbCAgYWRkZWQgaXRlciwgZXh0ZW5kIGZyb20gRVQgMS4zCi0gKiAyMDA3LTA5LTAxIGZsICBmaXhlZCBQYXJzZUVycm9yIGV4Y2VwdGlvbiwgc2V0c2xpY2Ugc291cmNlIHR5cGUsIGV0YwotICogMjAwNy0wOS0wMyBmbCAgZml4ZWQgaGFuZGxpbmcgb2YgbmVnYXRpdmUgaW5zZXJ0IGluZGV4ZXMKLSAqIDIwMDctMDktMDQgZmwgIGFkZGVkIGl0ZXJ0ZXh0IGZyb20gRVQgMS4zCi0gKiAyMDA3LTA5LTA2IGZsICBhZGRlZCBwb3NpdGlvbiBhdHRyaWJ1dGUgdG8gUGFyc2VFcnJvciBleGNlcHRpb24KLSAqIDIwMDgtMDYtMDYgZmwgIGRlbGF5IGVycm9yIHJlcG9ydGluZyBpbiBpdGVycGFyc2UgKGZyb20gSHJ2b2plIE5pa3NpYykKLSAqCisgKiBfZWxlbWVudHRyZWUgLSBDIGFjY2VsZXJhdG9yIGZvciB4bWwuZXRyZWUuRWxlbWVudFRyZWUKICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IFNlY3JldCBMYWJzIEFCLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA5IGJ5IEZyZWRyaWsgTHVuZGguCiAgKgogICogaW5mb0BweXRob253YXJlLmNvbQogICogaHR0cDovL3d3dy5weXRob253YXJlLmNvbQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKLS8qIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIENvbnRyaWJ1dG9yIEFncmVlbWVudC4gKi8KLS8qIFNlZSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvcHNmL2xpY2Vuc2UgZm9yIGxpY2Vuc2luZyBkZXRhaWxzLiAqLwotCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSNkZWZpbmUgVkVSU0lPTiAiMS4wLjYiCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjb25maWd1cmF0aW9uICovCiAKLS8qIExlYXZlIGRlZmluZWQgdG8gaW5jbHVkZSB0aGUgZXhwYXQtYmFzZWQgWE1MUGFyc2VyIHR5cGUgKi8KLSNkZWZpbmUgVVNFX0VYUEFUCi0KIC8qIEFuIGVsZW1lbnQgY2FuIGhvbGQgdGhpcyBtYW55IGNoaWxkcmVuIHdpdGhvdXQgZXh0cmEgbWVtb3J5CiAgICBhbGxvY2F0aW9ucy4gKi8KICNkZWZpbmUgU1RBVElDX0NISUxEUkVOIDQKQEAgLTExOSwxMCArNzgsNTEgQEAKIHN0YXRpYyBQeVR5cGVPYmplY3QgWE1MUGFyc2VyX1R5cGU7CiAKIAotLyogZ2x1ZSBmdW5jdGlvbnMgKHNlZSB0aGUgaW5pdCBmdW5jdGlvbiBmb3IgZGV0YWlscykgKi8KLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmo7Ci1zdGF0aWMgUHlPYmplY3QqIGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iajsKLXN0YXRpYyBQeU9iamVjdCogZWxlbWVudHBhdGhfb2JqOworLyogUGVyLW1vZHVsZSBzdGF0ZTsgUEVQIDMxMjEgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdCAqcGFyc2VlcnJvcl9vYmo7CisgICAgUHlPYmplY3QgKmRlZXBjb3B5X29iajsKKyAgICBQeU9iamVjdCAqZWxlbWVudHBhdGhfb2JqOworfSBlbGVtZW50dHJlZXN0YXRlOworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGVsZW1lbnR0cmVlbW9kdWxlOworCisvKiBHaXZlbiBhIG1vZHVsZSBvYmplY3QgKGFzc3VtZWQgdG8gYmUgX2VsZW1lbnR0cmVlKSwgZ2V0IGl0cyBwZXItbW9kdWxlCisgKiBzdGF0ZS4KKyAqLworI2RlZmluZSBFVF9TVEFURShtb2QpICgoZWxlbWVudHRyZWVzdGF0ZSAqKSBQeU1vZHVsZV9HZXRTdGF0ZShtb2QpKQorCisvKiBGaW5kIHRoZSBtb2R1bGUgaW5zdGFuY2UgaW1wb3J0ZWQgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHN1Yi1pbnRlcnByZXRlcgorICogYW5kIGdldCBpdHMgc3RhdGUuCisgKi8KKyNkZWZpbmUgRVRfU1RBVEVfR0xPQkFMIFwKKyAgICAoKGVsZW1lbnR0cmVlc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZlbGVtZW50dHJlZW1vZHVsZSkpKQorCitzdGF0aWMgaW50CitlbGVtZW50dHJlZV9jbGVhcihQeU9iamVjdCAqbSkKK3sKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFKG0pOworICAgIFB5X0NMRUFSKHN0LT5wYXJzZWVycm9yX29iaik7CisgICAgUHlfQ0xFQVIoc3QtPmRlZXBjb3B5X29iaik7CisgICAgUHlfQ0xFQVIoc3QtPmVsZW1lbnRwYXRoX29iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2VsZW1lbnR0cmVlX3RyYXZlcnNlKFB5T2JqZWN0ICptLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFKG0pOworICAgIFB5X1ZJU0lUKHN0LT5wYXJzZWVycm9yX29iaik7CisgICAgUHlfVklTSVQoc3QtPmRlZXBjb3B5X29iaik7CisgICAgUHlfVklTSVQoc3QtPmVsZW1lbnRwYXRoX29iaik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitlbGVtZW50dHJlZV9mcmVlKHZvaWQgKm0pCit7CisgICAgZWxlbWVudHRyZWVfY2xlYXIoKFB5T2JqZWN0ICopbSk7Cit9CiAKIC8qIGhlbHBlcnMgKi8KIApAQCAtMTMwLDExICsxMzAsMTEgQEAKIGRlZXBjb3B5KFB5T2JqZWN0KiBvYmplY3QsIFB5T2JqZWN0KiBtZW1vKQogewogICAgIC8qIGRvIGEgZGVlcCBjb3B5IG9mIHRoZSBnaXZlbiBvYmplY3QgKi8KLQogICAgIFB5T2JqZWN0KiBhcmdzOwogICAgIFB5T2JqZWN0KiByZXN1bHQ7CisgICAgZWxlbWVudHRyZWVzdGF0ZSAqc3QgPSBFVF9TVEFURV9HTE9CQUw7CiAKLSAgICBpZiAoIWVsZW1lbnR0cmVlX2RlZXBjb3B5X29iaikgeworICAgIGlmICghc3QtPmRlZXBjb3B5X29iaikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoCiAgICAgICAgICAgICBQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAiZGVlcGNvcHkgaGVscGVyIG5vdCBmb3VuZCIKQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgIGFyZ3MgPSBQeVR1cGxlX1BhY2soMiwgb2JqZWN0LCBtZW1vKTsKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoZWxlbWVudHRyZWVfZGVlcGNvcHlfb2JqLCBhcmdzKTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHN0LT5kZWVwY29weV9vYmosIGFyZ3MpOwogICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMjI5LDggKzIyOSwxMCBAQAogY3JlYXRlX2V4dHJhKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhdHRyaWIpCiB7CiAgICAgc2VsZi0+ZXh0cmEgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKEVsZW1lbnRPYmplY3RFeHRyYSkpOwotICAgIGlmICghc2VsZi0+ZXh0cmEpCisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgaWYgKCFhdHRyaWIpCiAgICAgICAgIGF0dHJpYiA9IFB5X05vbmU7CkBAIC0yODMsMTMgKzI4NSw2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHNlbGYtPmV4dHJhID0gTlVMTDsKIAotICAgIGlmIChhdHRyaWIgIT0gUHlfTm9uZSAmJiAhaXNfZW1wdHlfZGljdChhdHRyaWIpKSB7Ci0gICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgYXR0cmliKSA8IDApIHsKLSAgICAgICAgICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgUHlfSU5DUkVGKHRhZyk7CiAgICAgc2VsZi0+dGFnID0gdGFnOwogCkBAIC0zMDMsNiArMjk4LDE0IEBACiAKICAgICBBTExPQyhzaXplb2YoRWxlbWVudE9iamVjdCksICJjcmVhdGUgZWxlbWVudCIpOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKHNlbGYpOworCisgICAgaWYgKGF0dHJpYiAhPSBQeV9Ob25lICYmICFpc19lbXB0eV9kaWN0KGF0dHJpYikpIHsKKyAgICAgICAgaWYgKGNyZWF0ZV9leHRyYShzZWxmLCBhdHRyaWIpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gKFB5T2JqZWN0Kikgc2VsZjsKIH0KIApAQCAtMzU4LDYgKzM2MSw3IEBACiAKICAgICBQeV9ERUNSRUYoYXR0cmliX3N0cik7CiAKKyAgICAvKiBhdHRyaWIgY2FuIGJlIE5VTEwgaWYgUHlEaWN0X05ldyBmYWlsZWQgKi8KICAgICBpZiAoYXR0cmliKQogICAgICAgICBpZiAoUHlEaWN0X1VwZGF0ZShhdHRyaWIsIGt3ZHMpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDI1LDE2ICs0MjksMTggQEAKIH0KIAogTE9DQUwoaW50KQotZWxlbWVudF9yZXNpemUoRWxlbWVudE9iamVjdCogc2VsZiwgaW50IGV4dHJhKQorZWxlbWVudF9yZXNpemUoRWxlbWVudE9iamVjdCogc2VsZiwgUHlfc3NpemVfdCBleHRyYSkKIHsKLSAgICBpbnQgc2l6ZTsKKyAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlPYmplY3QqICpjaGlsZHJlbjsKIAogICAgIC8qIG1ha2Ugc3VyZSBzZWxmLT5jaGlsZHJlbiBjYW4gaG9sZCB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGV4dHJhCiAgICAgICAgZWxlbWVudHMuICBzZXQgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgaWYgYWxsb2NhdGlvbiBmYWlsZWQgKi8KIAotICAgIGlmICghc2VsZi0+ZXh0cmEpCi0gICAgICAgIGNyZWF0ZV9leHRyYShzZWxmLCBOVUxMKTsKKyAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgIGlmIChjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIHNpemUgPSBzZWxmLT5leHRyYS0+bGVuZ3RoICsgZXh0cmE7CiAKQEAgLTQ0Nyw2ICs0NTMsMTMgQEAKICAgICAgICAgICogYmUgc2FmZS4KICAgICAgICAgICovCiAgICAgICAgIHNpemUgPSBzaXplID8gc2l6ZSA6IDE7CisgICAgICAgIGlmICgoc2l6ZV90KXNpemUgPiBQWV9TU0laRV9UX01BWC9zaXplb2YoUHlPYmplY3QqKSkKKyAgICAgICAgICAgIGdvdG8gbm9tZW1vcnk7CisgICAgICAgIGlmIChzaXplID4gSU5UX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRvbyBtYW55IGNoaWxkcmVuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgICAgaWYgKHNlbGYtPmV4dHJhLT5jaGlsZHJlbiAhPSBzZWxmLT5leHRyYS0+X2NoaWxkcmVuKSB7CiAgICAgICAgICAgICAvKiBDb3Zlcml0eSBDSUQgIzE4MiBzaXplX2Vycm9yOiBBbGxvY2F0aW5nIDEgYnl0ZXMgdG8gcG9pbnRlcgogICAgICAgICAgICAgICogImNoaWxkcmVuIiwgd2hpY2ggbmVlZHMgYXQgbGVhc3QgNCBieXRlcy4gQWx0aG91Z2ggaXQncyBhCkBAIC01NjEsOCArNTc0LDkgQEAKICAgICBQeU9iamVjdCogYXR0cmliID0gTlVMTDsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hT3xPITpTdWJFbGVtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJkVsZW1lbnRfVHlwZSwgJnBhcmVudCwgJnRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RGljdF9UeXBlLCAmYXR0cmliKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RGljdF9UeXBlLCAmYXR0cmliKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpZiAoYXR0cmliKSB7CiAgICAgICAgIC8qIGF0dHJpYiBwYXNzZWQgYXMgcG9zaXRpb25hbCBhcmcgKi8KQEAgLTU4Niw4ICs2MDAsOSBAQAogICAgIH0KIAogICAgIGVsZW0gPSBjcmVhdGVfbmV3X2VsZW1lbnQodGFnLCBhdHRyaWIpOwotCiAgICAgUHlfREVDUkVGKGF0dHJpYik7CisgICAgaWYgKGVsZW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoZWxlbWVudF9hZGRfc3ViZWxlbWVudChwYXJlbnQsIGVsZW0pIDwgMCkgewogICAgICAgICBQeV9ERUNSRUYoZWxlbSk7CkBAIC02NDUsNyArNjYwLDYgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLS8qIG1ldGhvZHMgKGluIGFscGhhYmV0aWNhbCBvcmRlcikgKi8KIAogc3RhdGljIFB5T2JqZWN0KgogZWxlbWVudF9hcHBlbmQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCkBAIC02ODksOCArNzAzLDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlbGVtZW50ID0gKEVsZW1lbnRPYmplY3QqKSBjcmVhdGVfbmV3X2VsZW1lbnQoCi0gICAgICAgIHNlbGYtPnRhZywgKHNlbGYtPmV4dHJhKSA/IHNlbGYtPmV4dHJhLT5hdHRyaWIgOiBQeV9Ob25lCi0gICAgICAgICk7CisgICAgICAgIHNlbGYtPnRhZywgKHNlbGYtPmV4dHJhKSA/IHNlbGYtPmV4dHJhLT5hdHRyaWIgOiBQeV9Ob25lKTsKICAgICBpZiAoIWVsZW1lbnQpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC03MDMsNyArNzE2LDYgQEAKICAgICBQeV9JTkNSRUYoSk9JTl9PQkooZWxlbWVudC0+dGFpbCkpOwogCiAgICAgaWYgKHNlbGYtPmV4dHJhKSB7Ci0KICAgICAgICAgaWYgKGVsZW1lbnRfcmVzaXplKGVsZW1lbnQsIHNlbGYtPmV4dHJhLT5sZW5ndGgpIDwgMCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGVsZW1lbnQpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MTUsNyArNzI3LDYgQEAKICAgICAgICAgfQogCiAgICAgICAgIGVsZW1lbnQtPmV4dHJhLT5sZW5ndGggPSBzZWxmLT5leHRyYS0+bGVuZ3RoOwotCiAgICAgfQogCiAgICAgcmV0dXJuIChQeU9iamVjdCopIGVsZW1lbnQ7CkBAIC03NzIsNyArNzgzLDYgQEAKICAgICBlbGVtZW50LT50YWlsID0gSk9JTl9TRVQodGFpbCwgSk9JTl9HRVQoc2VsZi0+dGFpbCkpOwogCiAgICAgaWYgKHNlbGYtPmV4dHJhKSB7Ci0KICAgICAgICAgaWYgKGVsZW1lbnRfcmVzaXplKGVsZW1lbnQsIHNlbGYtPmV4dHJhLT5sZW5ndGgpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTc4Niw3ICs3OTYsNiBAQAogICAgICAgICB9CiAKICAgICAgICAgZWxlbWVudC0+ZXh0cmEtPmxlbmd0aCA9IHNlbGYtPmV4dHJhLT5sZW5ndGg7Ci0KICAgICB9CiAKICAgICAvKiBhZGQgb2JqZWN0IHRvIG1lbW8gZGljdGlvbmFyeSAoc28gZGVlcGNvcHkgd29uJ3QgdmlzaXQgaXQgYWdhaW4pICovCkBAIC04ODcsNyArODk2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0YWlsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNoaWxkcmVuKQogewotICAgIFB5X3NzaXplX3QgaSwgbmNoaWxkcmVuOworICAgIGludCBpLCBuY2hpbGRyZW47CiAKICAgICBpZiAoIXRhZykgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAidGFnIG1heSBub3QgYmUgTlVMTCIpOwpAQCAtOTEyLDExICs5MjEsMTggQEAKIAogICAgIC8qIENvbXB1dGUgJ25jaGlsZHJlbicuICovCiAgICAgaWYgKGNoaWxkcmVuKSB7CisgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICAgICAgaWYgKCFQeUxpc3RfQ2hlY2soY2hpbGRyZW4pKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiJ19jaGlsZHJlbicgaXMgbm90IGEgbGlzdCIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgbmNoaWxkcmVuID0gUHlMaXN0X1NpemUoY2hpbGRyZW4pOworICAgICAgICBzaXplID0gUHlMaXN0X1NpemUoY2hpbGRyZW4pOworICAgICAgICAvKiBleHBhdCBsaW1pdHMgbmNoaWxkcmVuIHRvIGludCAqLworICAgICAgICBpZiAoc2l6ZSA+IElOVF9NQVgpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAidG9vIG1hbnkgY2hpbGRyZW4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG5jaGlsZHJlbiA9IChpbnQpc2l6ZTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIG5jaGlsZHJlbiA9IDA7CkBAIC0xMDM0LDcgKzEwNTAsNyBAQAogZWxlbWVudF9leHRlbmQoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgUHlPYmplY3QqIHNlcTsKLSAgICBQeV9zc2l6ZV90IGksIHNlcWxlbiA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgUHlPYmplY3QqIHNlcV9pbjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86ZXh0ZW5kIiwgJnNlcV9pbikpCkBAIC0xMDQ5LDIyICsxMDY1LDI1IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfU2l6ZShzZXEpOwotICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47IGkrKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBQeVNlcXVlbmNlX0Zhc3RfR0VUX1NJWkUoc2VxKTsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0KiBlbGVtZW50ID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7Ci0gICAgICAgIGlmICghUHlPYmplY3RfSXNJbnN0YW5jZShlbGVtZW50LCAoUHlPYmplY3QgKikmRWxlbWVudF9UeXBlKSkgewotICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgIFB5X0lOQ1JFRihlbGVtZW50KTsKKyAgICAgICAgaWYgKCFQeU9iamVjdF9UeXBlQ2hlY2soZWxlbWVudCwgKFB5VHlwZU9iamVjdCAqKSZFbGVtZW50X1R5cGUpKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCiAgICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICJleHBlY3RlZCBhbiBFbGVtZW50LCBub3QgXCIlLjIwMHNcIiIsCiAgICAgICAgICAgICAgICAgUHlfVFlQRShlbGVtZW50KS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbGVtZW50KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGVsZW1lbnRfYWRkX3N1YmVsZW1lbnQoc2VsZiwgZWxlbWVudCkgPCAwKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbGVtZW50KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihlbGVtZW50KTsKICAgICB9CiAKICAgICBQeV9ERUNSRUYoc2VxKTsKQEAgLTEwNzksNiArMTA5OCw3IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86ZmluZCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCkBAIC0xMDg3LDcgKzExMDcsNyBAQAogICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpIHsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZmluZCk7CiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCisgICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogICAgIH0KIApAQCAtMTA5NiwxMSArMTExNiwxNiBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPmV4dHJhLT5sZW5ndGg7IGkrKykgewogICAgICAgICBQeU9iamVjdCogaXRlbSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKLSAgICAgICAgaWYgKEVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSAmJgotICAgICAgICAgICAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKCgoRWxlbWVudE9iamVjdCopaXRlbSktPnRhZywgdGFnLCBQeV9FUSkgPT0gMSkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICBpbnQgcmM7CisgICAgICAgIGlmICghRWxlbWVudF9DaGVja0V4YWN0KGl0ZW0pKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgcmMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woKChFbGVtZW50T2JqZWN0KilpdGVtKS0+dGFnLCB0YWcsIFB5X0VRKTsKKyAgICAgICAgaWYgKHJjID4gMCkKICAgICAgICAgICAgIHJldHVybiBpdGVtOwotICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMTExNSw2ICsxMTQwLDcgQEAKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgX1B5X0lERU5USUZJRVIoZmluZHRleHQpOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsicGF0aCIsICJkZWZhdWx0IiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9POmZpbmR0ZXh0Iiwga3dsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0YWcsICZkZWZhdWx0X3ZhbHVlLCAmbmFtZXNwYWNlcykpCkBAIC0xMTIyLDcgKzExNDgsNyBAQAogCiAgICAgaWYgKGNoZWNrcGF0aCh0YWcpIHx8IG5hbWVzcGFjZXMgIT0gUHlfTm9uZSkKICAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoCi0gICAgICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2ZpbmR0ZXh0LCAiT09PTyIsIHNlbGYsIHRhZywgZGVmYXVsdF92YWx1ZSwgbmFtZXNwYWNlcworICAgICAgICAgICAgc3QtPmVsZW1lbnRwYXRoX29iaiwgJlB5SWRfZmluZHRleHQsICJPT09PIiwgc2VsZiwgdGFnLCBkZWZhdWx0X3ZhbHVlLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogCiAgICAgaWYgKCFzZWxmLT5leHRyYSkgewpAQCAtMTEzMiwxNCArMTE1OCwyNCBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPmV4dHJhLT5sZW5ndGg7IGkrKykgewogICAgICAgICBFbGVtZW50T2JqZWN0KiBpdGVtID0gKEVsZW1lbnRPYmplY3QqKSBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV07Ci0gICAgICAgIGlmIChFbGVtZW50X0NoZWNrRXhhY3QoaXRlbSkgJiYgKFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChpdGVtLT50YWcsIHRhZywgUHlfRVEpID09IDEpKSB7Ci0KKyAgICAgICAgaW50IHJjOworICAgICAgICBpZiAoIUVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0ZW0tPnRhZywgdGFnLCBQeV9FUSk7CisgICAgICAgIGlmIChyYyA+IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0KiB0ZXh0ID0gZWxlbWVudF9nZXRfdGV4dChpdGVtKTsKLSAgICAgICAgICAgIGlmICh0ZXh0ID09IFB5X05vbmUpCisgICAgICAgICAgICBpZiAodGV4dCA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgICAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfTmV3KDAsIDApOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfWElOQ1JFRih0ZXh0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgICAgIHJldHVybiB0ZXh0OwogICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIFB5X0lOQ1JFRihkZWZhdWx0X3ZhbHVlKTsKQEAgLTExNTQsNiArMTE5MCw3IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogbmFtZXNwYWNlcyA9IFB5X05vbmU7CiAgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJwYXRoIiwgIm5hbWVzcGFjZXMiLCAwfTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86ZmluZGFsbCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCkBAIC0xMTYyLDcgKzExOTksNyBAQAogICAgIGlmIChjaGVja3BhdGgodGFnKSB8fCBuYW1lc3BhY2VzICE9IFB5X05vbmUpIHsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZmluZGFsbCk7CiAgICAgICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICAgICAgZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kYWxsLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCisgICAgICAgICAgICBzdC0+ZWxlbWVudHBhdGhfb2JqLCAmUHlJZF9maW5kYWxsLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCiAgICAgICAgICAgICApOwogICAgIH0KIApAQCAtMTE3NSwxMyArMTIxMiwxNyBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPmV4dHJhLT5sZW5ndGg7IGkrKykgewogICAgICAgICBQeU9iamVjdCogaXRlbSA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKLSAgICAgICAgaWYgKEVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSAmJgotICAgICAgICAgICAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKCgoRWxlbWVudE9iamVjdCopaXRlbSktPnRhZywgdGFnLCBQeV9FUSkgPT0gMSkgewotICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQob3V0LCBpdGVtKSA8IDApIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYob3V0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaW50IHJjOworICAgICAgICBpZiAoIUVsZW1lbnRfQ2hlY2tFeGFjdChpdGVtKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBQeV9JTkNSRUYoaXRlbSk7CisgICAgICAgIHJjID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKCgoRWxlbWVudE9iamVjdCopaXRlbSktPnRhZywgdGFnLCBQeV9FUSk7CisgICAgICAgIGlmIChyYyAhPSAwICYmIChyYyA8IDAgfHwgUHlMaXN0X0FwcGVuZChvdXQsIGl0ZW0pIDwgMCkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvdXQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgIH0KIAogICAgIHJldHVybiBvdXQ7CkBAIC0xMTk0LDE0ICsxMjM1LDE1IEBACiAgICAgUHlPYmplY3QqIG5hbWVzcGFjZXMgPSBQeV9Ob25lOwogICAgIF9QeV9JREVOVElGSUVSKGl0ZXJmaW5kKTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InBhdGgiLCAibmFtZXNwYWNlcyIsIDB9OworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzppdGVyZmluZCIsIGt3bGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGFnLCAmbmFtZXNwYWNlcykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhZywgJm5hbWVzcGFjZXMpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAotICAgICAgICBlbGVtZW50cGF0aF9vYmosICZQeUlkX2l0ZXJmaW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzCi0gICAgICAgICk7CisgICAgICAgIHN0LT5lbGVtZW50cGF0aF9vYmosICZQeUlkX2l0ZXJmaW5kLCAiT09PIiwgc2VsZiwgdGFnLCBuYW1lc3BhY2VzKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMTMxMiw4ICsxMzU0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZFbGVtZW50X1R5cGUsICZlbGVtZW50KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGlmIChpbmRleCA8IDApIHsKICAgICAgICAgaW5kZXggKz0gc2VsZi0+ZXh0cmEtPmxlbmd0aDsKQEAgLTEzOTUsOCArMTQzOSwxMCBAQAogZWxlbWVudF9yZW1vdmUoRWxlbWVudE9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgaW50IGk7Ci0KKyAgICBpbnQgcmM7CiAgICAgUHlPYmplY3QqIGVsZW1lbnQ7CisgICAgUHlPYmplY3QqIGZvdW5kOworCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPITpyZW1vdmUiLCAmRWxlbWVudF9UeXBlLCAmZWxlbWVudCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNDEyLDExICsxNDU4LDE0IEBACiAgICAgZm9yIChpID0gMDsgaSA8IHNlbGYtPmV4dHJhLT5sZW5ndGg7IGkrKykgewogICAgICAgICBpZiAoc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldID09IGVsZW1lbnQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgaWYgKFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV0sIGVsZW1lbnQsIFB5X0VRKSA9PSAxKQorICAgICAgICByYyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV0sIGVsZW1lbnQsIFB5X0VRKTsKKyAgICAgICAgaWYgKHJjID4gMCkKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKGkgPT0gc2VsZi0+ZXh0cmEtPmxlbmd0aCkgeworICAgIGlmIChpID49IHNlbGYtPmV4dHJhLT5sZW5ndGgpIHsKICAgICAgICAgLyogZWxlbWVudCBpcyBub3QgaW4gY2hpbGRyZW4sIHNvIHJhaXNlIGV4Y2VwdGlvbiAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoCiAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLApAQCAtMTQyNSwxMyArMTQ3NCwxMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBQeV9ERUNSRUYoc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2ldKTsKKyAgICBmb3VuZCA9IHNlbGYtPmV4dHJhLT5jaGlsZHJlbltpXTsKIAogICAgIHNlbGYtPmV4dHJhLT5sZW5ndGgtLTsKLQogICAgIGZvciAoOyBpIDwgc2VsZi0+ZXh0cmEtPmxlbmd0aDsgaSsrKQogICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baV0gPSBzZWxmLT5leHRyYS0+Y2hpbGRyZW5baSsxXTsKIAorICAgIFB5X0RFQ1JFRihmb3VuZCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTE0NTQsOCArMTUwMywxMCBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086c2V0IiwgJmtleSwgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICBjcmVhdGVfZXh0cmEoc2VsZiwgTlVMTCk7CisgICAgaWYgKCFzZWxmLT5leHRyYSkgeworICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIGF0dHJpYiA9IGVsZW1lbnRfZ2V0X2F0dHJpYihzZWxmKTsKICAgICBpZiAoIWF0dHJpYikKQEAgLTE0NjgsMTggKzE1MTksMTkgQEAKIH0KIAogc3RhdGljIGludAotZWxlbWVudF9zZXRpdGVtKFB5T2JqZWN0KiBzZWxmXywgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIGl0ZW0pCitlbGVtZW50X3NldGl0ZW0oUHlPYmplY3QqIHNlbGZfLCBQeV9zc2l6ZV90IGluZGV4XywgUHlPYmplY3QqIGl0ZW0pCiB7CiAgICAgRWxlbWVudE9iamVjdCogc2VsZiA9IChFbGVtZW50T2JqZWN0Kikgc2VsZl87Ci0gICAgaW50IGk7CisgICAgaW50IGksIGluZGV4OwogICAgIFB5T2JqZWN0KiBvbGQ7CiAKLSAgICBpZiAoIXNlbGYtPmV4dHJhIHx8IGluZGV4IDwgMCB8fCBpbmRleCA+PSBzZWxmLT5leHRyYS0+bGVuZ3RoKSB7CisgICAgaWYgKCFzZWxmLT5leHRyYSB8fCBpbmRleF8gPCAwIHx8IGluZGV4XyA+PSBzZWxmLT5leHRyYS0+bGVuZ3RoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgIFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAiY2hpbGQgYXNzaWdubWVudCBpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICBpbmRleCA9IChpbnQpaW5kZXhfOwogCiAgICAgb2xkID0gc2VsZi0+ZXh0cmEtPmNoaWxkcmVuW2luZGV4XTsKIApAQCAtMTU2OCwxNiArMTYyMCwxOSBAQAogICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbiwgbmV3bGVuLCBjdXIsIGk7CiAKICAgICAgICAgUHlPYmplY3QqIHJlY3ljbGUgPSBOVUxMOwotICAgICAgICBQeU9iamVjdCogc2VxID0gTlVMTDsKKyAgICAgICAgUHlPYmplY3QqIHNlcTsKIAotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KIAogICAgICAgICBpZiAoUHlTbGljZV9HZXRJbmRpY2VzRXgoaXRlbSwKICAgICAgICAgICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoLAogICAgICAgICAgICAgICAgICZzdGFydCwgJnN0b3AsICZzdGVwLCAmc2xpY2VsZW4pIDwgMCkgewogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisgICAgICAgIGFzc2VydChzbGljZWxlbiA8PSBzZWxmLT5leHRyYS0+bGVuZ3RoKTsKIAogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgewogICAgICAgICAgICAgLyogRGVsZXRlIHNsaWNlICovCkBAIC0xNjM5LDI3ICsxNjk0LDI3IEBACiAgICAgICAgICAgICAgICAgICAgIChzZWxmLT5leHRyYS0+bGVuZ3RoIC0gY3VyKSAqIHNpemVvZihQeU9iamVjdCAqKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHNlbGYtPmV4dHJhLT5sZW5ndGggLT0gc2xpY2VsZW47CisgICAgICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoIC09IChpbnQpc2xpY2VsZW47CiAKICAgICAgICAgICAgIC8qIERpc2NhcmQgdGhlIHJlY3ljbGUgbGlzdCB3aXRoIGFsbCB0aGUgZGVsZXRlZCBzdWItZWxlbWVudHMgKi8KICAgICAgICAgICAgIFB5X1hERUNSRUYocmVjeWNsZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIEEgbmV3IHNsaWNlIGlzIGFjdHVhbGx5IGJlaW5nIGFzc2lnbmVkICovCi0gICAgICAgICAgICBzZXEgPSBQeVNlcXVlbmNlX0Zhc3QodmFsdWUsICIiKTsKLSAgICAgICAgICAgIGlmICghc2VxKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAotICAgICAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBzZXF1ZW5jZSwgbm90IFwiJS4yMDBzXCIiLCBQeV9UWVBFKHZhbHVlKS0+dHBfbmFtZQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld2xlbiA9IFB5U2VxdWVuY2VfU2l6ZShzZXEpOworCisgICAgICAgIC8qIEEgbmV3IHNsaWNlIGlzIGFjdHVhbGx5IGJlaW5nIGFzc2lnbmVkICovCisgICAgICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdCh2YWx1ZSwgIiIpOworICAgICAgICBpZiAoIXNlcSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KAorICAgICAgICAgICAgICAgIFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgc2VxdWVuY2UsIG5vdCBcIiUuMjAwc1wiIiwgUHlfVFlQRSh2YWx1ZSktPnRwX25hbWUKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisgICAgICAgIG5ld2xlbiA9IFB5U2VxdWVuY2VfU2l6ZShzZXEpOwogCiAgICAgICAgIGlmIChzdGVwICE9ICAxICYmIG5ld2xlbiAhPSBzbGljZWxlbikKICAgICAgICAgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAiYXR0ZW1wdCB0byBhc3NpZ24gc2VxdWVuY2Ugb2Ygc2l6ZSAlemQgIgogICAgICAgICAgICAgICAgICJ0byBleHRlbmRlZCBzbGljZSBvZiBzaXplICV6ZCIsCkBAIC0xNjcxLDEyICsxNzI2LDEyIEBACiAgICAgICAgIC8qIFJlc2l6ZSBiZWZvcmUgY3JlYXRpbmcgdGhlIHJlY3ljbGUgYmluLCB0byBwcmV2ZW50IHJlZmxlYWtzLiAqLwogICAgICAgICBpZiAobmV3bGVuID4gc2xpY2VsZW4pIHsKICAgICAgICAgICAgIGlmIChlbGVtZW50X3Jlc2l6ZShzZWxmLCBuZXdsZW4gLSBzbGljZWxlbikgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHNlcSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIGFzc2VydChuZXdsZW4gLSBzbGljZWxlbiA8PSBJTlRfTUFYIC0gc2VsZi0+ZXh0cmEtPmxlbmd0aCk7CisgICAgICAgIGFzc2VydChuZXdsZW4gLSBzbGljZWxlbiA+PSAtc2VsZi0+ZXh0cmEtPmxlbmd0aCk7CiAKICAgICAgICAgaWYgKHNsaWNlbGVuID4gMCkgewogICAgICAgICAgICAgLyogdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIHRvIHRoaXMgbWV0aG9kICh2aWEgZGVjcmVmKSwgbW92ZQpAQCAtMTY4NCw5ICsxNzM5LDcgQEAKICAgICAgICAgICAgICAgIHdlJ3JlIGRvbmUgbW9kaWZ5aW5nIHRoZSBlbGVtZW50ICovCiAgICAgICAgICAgICByZWN5Y2xlID0gUHlMaXN0X05ldyhzbGljZWxlbik7CiAgICAgICAgICAgICBpZiAoIXJlY3ljbGUpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2VxKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOwpAQCAtMTcxMiwxMSArMTc2NSw5IEBACiAgICAgICAgICAgICBzZWxmLT5leHRyYS0+Y2hpbGRyZW5bY3VyXSA9IGVsZW1lbnQ7CiAgICAgICAgIH0KIAotICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoICs9IG5ld2xlbiAtIHNsaWNlbGVuOworICAgICAgICBzZWxmLT5leHRyYS0+bGVuZ3RoICs9IChpbnQpKG5ld2xlbiAtIHNsaWNlbGVuKTsKIAotICAgICAgICBpZiAoc2VxKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc2VxKTsKIAogICAgICAgICAvKiBkaXNjYXJkIHRoZSByZWN5Y2xlIGJpbiwgYW5kIGV2ZXJ5dGhpbmcgaW4gaXQgKi8KICAgICAgICAgUHlfWERFQ1JFRihyZWN5Y2xlKTsKQEAgLTE3ODYsNyArMTgzNyw3IEBACiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRleHQiKSA9PSAwKSB7CiAgICAgICAgIHJlcyA9IGVsZW1lbnRfZ2V0X3RleHQoc2VsZik7Ci0gICAgICAgIFB5X0lOQ1JFRihyZXMpOworICAgICAgICBQeV9YSU5DUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiByZXM7CiAgICAgfQogCkBAIC0xODAxLDggKzE4NTIsMTAgQEAKICAgICAgICAgcmVzID0gZWxlbWVudF9nZXRfdGFpbChzZWxmKTsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiYXR0cmliIikgPT0gMCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICByZXMgPSBlbGVtZW50X2dldF9hdHRyaWIoc2VsZik7CiAgICAgfQogCkBAIC0xODE3LDEyICsxODcwLDE4IEBACiBlbGVtZW50X3NldGF0dHJvKEVsZW1lbnRPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBuYW1lb2JqLCBQeU9iamVjdCogdmFsdWUpCiB7CiAgICAgY2hhciAqbmFtZSA9ICIiOworCisgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgImNhbid0IGRlbGV0ZSBhdHRyaWJ1dGUiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG5hbWVvYmopKQogICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyhuYW1lb2JqKTsKLQotICAgIGlmIChuYW1lID09IE5VTEwpIHsKKyAgICBpZiAobmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgfSBlbHNlIGlmIChzdHJjbXAobmFtZSwgInRhZyIpID09IDApIHsKKworICAgIGlmIChzdHJjbXAobmFtZSwgInRhZyIpID09IDApIHsKICAgICAgICAgUHlfREVDUkVGKHNlbGYtPnRhZyk7CiAgICAgICAgIHNlbGYtPnRhZyA9IHZhbHVlOwogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+dGFnKTsKQEAgLTE4MzUsOCArMTg5NCwxMCBAQAogICAgICAgICBzZWxmLT50YWlsID0gdmFsdWU7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT50YWlsKTsKICAgICB9IGVsc2UgaWYgKHN0cmNtcChuYW1lLCAiYXR0cmliIikgPT0gMCkgewotICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKQotICAgICAgICAgICAgY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpOworICAgICAgICBpZiAoIXNlbGYtPmV4dHJhKSB7CisgICAgICAgICAgICBpZiAoY3JlYXRlX2V4dHJhKHNlbGYsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHNlbGYtPmV4dHJhLT5hdHRyaWIpOwogICAgICAgICBzZWxmLT5leHRyYS0+YXR0cmliID0gdmFsdWU7CiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5leHRyYS0+YXR0cmliKTsKQEAgLTE5OTYsNiArMjA1Nyw3IEBACiAgICAgICovCiAgICAgRWxlbWVudE9iamVjdCAqY3VyX3BhcmVudDsKICAgICBQeV9zc2l6ZV90IGNoaWxkX2luZGV4OworICAgIGludCByYzsKIAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIC8qIEhhbmRsZSB0aGUgY2FzZSByZWFjaGVkIGluIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBpdGVyYXRpb24sIHdoZXJlCkBAIC0yMDE3LDE0ICsyMDc5LDIyIEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaXQtPnJvb3RfZG9uZSA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGl0LT5zb3VnaHRfdGFnID09IFB5X05vbmUgfHwKLSAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sKGl0LT5yb290X2VsZW1lbnQtPnRhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5zb3VnaHRfdGFnLCBQeV9FUSkgPT0gMSkgeworICAgICAgICAgICAgICAgIHJjID0gKGl0LT5zb3VnaHRfdGFnID09IFB5X05vbmUpOworICAgICAgICAgICAgICAgIGlmICghcmMpIHsKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woaXQtPnJvb3RfZWxlbWVudC0+dGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+c291Z2h0X3RhZywgUHlfRVEpOworICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyYykgewogICAgICAgICAgICAgICAgICAgICBpZiAoaXQtPmdldHRleHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0ZXh0ID0gZWxlbWVudF9nZXRfdGV4dChpdC0+cm9vdF9lbGVtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGV4dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeU9iamVjdF9Jc1RydWUodGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gUHlPYmplY3RfSXNUcnVlKHRleHQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyYykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0ZXh0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIwNTYsMTggKzIxMjYsMjYgQEAKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdGV4dCA9IGVsZW1lbnRfZ2V0X3RleHQoY2hpbGQpOwogICAgICAgICAgICAgICAgIGlmICghdGV4dCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0lzVHJ1ZSh0ZXh0KSkgeworICAgICAgICAgICAgICAgIHJjID0gUHlPYmplY3RfSXNUcnVlKHRleHQpOworICAgICAgICAgICAgICAgIGlmIChyYyA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIGlmIChyYykgewogICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodGV4dCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0OwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXQtPnNvdWdodF90YWcgPT0gUHlfTm9uZSB8fAotICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjaGlsZC0+dGFnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+c291Z2h0X3RhZywgUHlfRVEpID09IDEpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoY2hpbGQpOwotICAgICAgICAgICAgICAgIHJldHVybiAoUHlPYmplY3QgKiljaGlsZDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmMgPSAoaXQtPnNvdWdodF90YWcgPT0gUHlfTm9uZSk7CisgICAgICAgICAgICAgICAgaWYgKCFyYykgeworICAgICAgICAgICAgICAgICAgICByYyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjaGlsZC0+dGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdC0+c291Z2h0X3RhZywgUHlfRVEpOworICAgICAgICAgICAgICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoY2hpbGQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFB5T2JqZWN0ICopY2hpbGQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHlPYmplY3QgKnRhaWw7CkBAIC0yMDg3LDkgKzIxNjUsMTQgQEAKICAgICAgICAgICAgICAqIHRoaXMgaXMgYmVjYXVzZSBpdGVydGV4dCgpIGlzIHN1cHBvc2VkIHRvIG9ubHkgcmV0dXJuICppbm5lcioKICAgICAgICAgICAgICAqIHRleHQsIG5vdCB0ZXh0IGZvbGxvd2luZyB0aGUgZWxlbWVudCBpdCBiZWdhbiBpdGVyYXRpb24gd2l0aC4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKGl0LT5wYXJlbnRfc3RhY2stPnBhcmVudCAmJiBQeU9iamVjdF9Jc1RydWUodGFpbCkpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYodGFpbCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRhaWw7CisgICAgICAgICAgICBpZiAoaXQtPnBhcmVudF9zdGFjay0+cGFyZW50KSB7CisgICAgICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9Jc1RydWUodGFpbCk7CisgICAgICAgICAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0YWlsKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhaWw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMjE0NywzOCArMjIzMCw0MSBAQAogY3JlYXRlX2VsZW1lbnRpdGVyKEVsZW1lbnRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0YWcsIGludCBnZXR0ZXh0KQogewogICAgIEVsZW1lbnRJdGVyT2JqZWN0ICppdDsKLSAgICBQeU9iamVjdCAqc3RhciA9IE5VTEw7CiAKICAgICBpdCA9IFB5T2JqZWN0X0dDX05ldyhFbGVtZW50SXRlck9iamVjdCwgJkVsZW1lbnRJdGVyX1R5cGUpOwogICAgIGlmICghaXQpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghKGl0LT5wYXJlbnRfc3RhY2sgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKFBhcmVudExvY2F0b3IpKSkpIHsKLSAgICAgICAgUHlPYmplY3RfR0NfRGVsKGl0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHRhZykpIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh0YWcpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodGFnKSA9PSAxICYmIFB5VW5pY29kZV9SRUFEX0NIQVIodGFnLCAwKSA9PSAnKicpCisgICAgICAgICAgICB0YWcgPSBQeV9Ob25lOworICAgIH0KKyAgICBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKHRhZykpIHsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUodGFnKSA9PSAxICYmICpQeUJ5dGVzX0FTX1NUUklORyh0YWcpID09ICcqJykKKyAgICAgICAgICAgIHRhZyA9IFB5X05vbmU7CiAgICAgfQogCisgICAgUHlfSU5DUkVGKHRhZyk7CisgICAgaXQtPnNvdWdodF90YWcgPSB0YWc7CisgICAgaXQtPnJvb3RfZG9uZSA9IDA7CisgICAgaXQtPmdldHRleHQgPSBnZXR0ZXh0OworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICBpdC0+cm9vdF9lbGVtZW50ID0gc2VsZjsKKworICAgIFB5T2JqZWN0X0dDX1RyYWNrKGl0KTsKKworICAgIGl0LT5wYXJlbnRfc3RhY2sgPSBQeU9iamVjdF9NYWxsb2Moc2l6ZW9mKFBhcmVudExvY2F0b3IpKTsKKyAgICBpZiAoaXQtPnBhcmVudF9zdGFjayA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihpdCk7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBpdC0+cGFyZW50X3N0YWNrLT5wYXJlbnQgPSBOVUxMOwogICAgIGl0LT5wYXJlbnRfc3RhY2stPmNoaWxkX2luZGV4ID0gMDsKICAgICBpdC0+cGFyZW50X3N0YWNrLT5uZXh0ID0gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodGFnKSkKLSAgICAgICAgc3RhciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIqIik7Ci0gICAgZWxzZSBpZiAoUHlCeXRlc19DaGVjayh0YWcpKQotICAgICAgICBzdGFyID0gUHlCeXRlc19Gcm9tU3RyaW5nKCIqIik7Ci0KLSAgICBpZiAoc3RhciAmJiBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2wodGFnLCBzdGFyLCBQeV9FUSkgPT0gMSkKLSAgICAgICAgdGFnID0gUHlfTm9uZTsKLQotICAgIFB5X1hERUNSRUYoc3Rhcik7Ci0gICAgaXQtPnNvdWdodF90YWcgPSB0YWc7Ci0gICAgaXQtPnJvb3RfZG9uZSA9IDA7Ci0gICAgaXQtPmdldHRleHQgPSBnZXR0ZXh0OwotICAgIGl0LT5yb290X2VsZW1lbnQgPSBzZWxmOwotCi0gICAgUHlfSU5DUkVGKHNlbGYpOwotICAgIFB5X0lOQ1JFRih0YWcpOwotCi0gICAgUHlPYmplY3RfR0NfVHJhY2soaXQpOwogICAgIHJldHVybiAoUHlPYmplY3QgKilpdDsKIH0KIApAQCAtMjM2Miw2ICsyNDQ4LDIzIEBACiAgICAgfQogfQogCitMT0NBTChpbnQpCit0cmVlYnVpbGRlcl9hcHBlbmRfZXZlbnQoVHJlZUJ1aWxkZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5vZGUpCit7CisgICAgaWYgKGFjdGlvbiAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeVR1cGxlX1BhY2soMiwgYWN0aW9uLCBub2RlKTsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChzZWxmLT5ldmVudHMsIHJlcykgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBoYW5kbGVycyAqLwogCkBAIC0yMzcxLDYgKzI0NzQsNyBAQAogewogICAgIFB5T2JqZWN0KiBub2RlOwogICAgIFB5T2JqZWN0KiB0aGlzOworICAgIGVsZW1lbnR0cmVlc3RhdGUgKnN0ID0gRVRfU1RBVEVfR0xPQkFMOwogCiAgICAgaWYgKHNlbGYtPmRhdGEpIHsKICAgICAgICAgaWYgKHNlbGYtPnRoaXMgPT0gc2VsZi0+bGFzdCkgewpAQCAtMjQwMSw3ICsyNTA1LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2VsZi0+cm9vdCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICAgICAgICAgIGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqLAorICAgICAgICAgICAgICAgIHN0LT5wYXJzZWVycm9yX29iaiwKICAgICAgICAgICAgICAgICAibXVsdGlwbGUgZWxlbWVudHMgb24gdG9wIGxldmVsIgogICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjQyOCwxNiArMjUzMiw4IEBACiAgICAgUHlfSU5DUkVGKG5vZGUpOwogICAgIHNlbGYtPmxhc3QgPSBub2RlOwogCi0gICAgaWYgKHNlbGYtPnN0YXJ0X2V2ZW50X29iaikgewotICAgICAgICBQeU9iamVjdCogcmVzOwotICAgICAgICBQeU9iamVjdCogYWN0aW9uID0gc2VsZi0+c3RhcnRfZXZlbnRfb2JqOwotICAgICAgICByZXMgPSBQeVR1cGxlX1BhY2soMiwgYWN0aW9uLCBub2RlKTsKLSAgICAgICAgaWYgKHJlcykgewotICAgICAgICAgICAgUHlMaXN0X0FwcGVuZChzZWxmLT5ldmVudHMsIHJlcyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBGSVhNRTogcHJvcGFnYXRlIGVycm9yICovCi0gICAgfQorICAgIGlmICh0cmVlYnVpbGRlcl9hcHBlbmRfZXZlbnQoc2VsZiwgc2VsZi0+c3RhcnRfZXZlbnRfb2JqLCBub2RlKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICByZXR1cm4gbm9kZTsKIApAQCAtMjUxNyw2NSArMjYxMywxMyBAQAogICAgIHNlbGYtPmxhc3QgPSBzZWxmLT50aGlzOwogICAgIHNlbGYtPnRoaXMgPSBpdGVtOwogCi0gICAgaWYgKHNlbGYtPmVuZF9ldmVudF9vYmopIHsKLSAgICAgICAgUHlPYmplY3QqIHJlczsKLSAgICAgICAgUHlPYmplY3QqIGFjdGlvbiA9IHNlbGYtPmVuZF9ldmVudF9vYmo7Ci0gICAgICAgIFB5T2JqZWN0KiBub2RlID0gKFB5T2JqZWN0Kikgc2VsZi0+bGFzdDsKLSAgICAgICAgcmVzID0gUHlUdXBsZV9QYWNrKDIsIGFjdGlvbiwgbm9kZSk7Ci0gICAgICAgIGlmIChyZXMpIHsKLSAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQoc2VsZi0+ZXZlbnRzLCByZXMpOwotICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogRklYTUU6IHByb3BhZ2F0ZSBlcnJvciAqLwotICAgIH0KKyAgICBpZiAodHJlZWJ1aWxkZXJfYXBwZW5kX2V2ZW50KHNlbGYsIHNlbGYtPmVuZF9ldmVudF9vYmosIHNlbGYtPmxhc3QpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBQeV9JTkNSRUYoc2VsZi0+bGFzdCk7CiAgICAgcmV0dXJuIChQeU9iamVjdCopIHNlbGYtPmxhc3Q7CiB9CiAKLUxPQ0FMKHZvaWQpCi10cmVlYnVpbGRlcl9oYW5kbGVfbmFtZXNwYWNlKFRyZWVCdWlsZGVyT2JqZWN0KiBzZWxmLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpwcmVmaXgsIFB5T2JqZWN0ICp1cmkpCi17Ci0gICAgUHlPYmplY3QqIHJlczsKLSAgICBQeU9iamVjdCogYWN0aW9uOwotICAgIFB5T2JqZWN0KiBwYXJjZWw7Ci0KLSAgICBpZiAoIXNlbGYtPmV2ZW50cykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKHN0YXJ0KSB7Ci0gICAgICAgIGlmICghc2VsZi0+c3RhcnRfbnNfZXZlbnRfb2JqKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhY3Rpb24gPSBzZWxmLT5zdGFydF9uc19ldmVudF9vYmo7Ci0gICAgICAgIHBhcmNlbCA9IFB5X0J1aWxkVmFsdWUoIk9PIiwgcHJlZml4LCB1cmkpOwotICAgICAgICBpZiAoIXBhcmNlbCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgUHlfSU5DUkVGKGFjdGlvbik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFzZWxmLT5lbmRfbnNfZXZlbnRfb2JqKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhY3Rpb24gPSBzZWxmLT5lbmRfbnNfZXZlbnRfb2JqOwotICAgICAgICBQeV9JTkNSRUYoYWN0aW9uKTsKLSAgICAgICAgcGFyY2VsID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKHBhcmNlbCk7Ci0gICAgfQotCi0gICAgcmVzID0gUHlUdXBsZV9OZXcoMik7Ci0KLSAgICBpZiAocmVzKSB7Ci0gICAgICAgIFB5VHVwbGVfU0VUX0lURU0ocmVzLCAwLCBhY3Rpb24pOwotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlcywgMSwgcGFyY2VsKTsKLSAgICAgICAgUHlMaXN0X0FwcGVuZChzZWxmLT5ldmVudHMsIHJlcyk7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXMpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgUHlfREVDUkVGKGFjdGlvbik7Ci0gICAgICAgIFB5X0RFQ1JFRihwYXJjZWwpOwotICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBGSVhNRTogcHJvcGFnYXRlIGVycm9yICovCi0gICAgfQotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogbWV0aG9kcyAoaW4gYWxwaGFiZXRpY2FsIG9yZGVyKSAqLwogCkBAIC0yNjg4LDEwICsyNzMyLDEyIEBACiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogdGhlIGV4cGF0IGludGVyZmFjZSAqLwogCi0jaWYgZGVmaW5lZChVU0VfRVhQQVQpCi0KICNpbmNsdWRlICJleHBhdC5oIgogI2luY2x1ZGUgInB5ZXhwYXQuaCIKKworLyogVGhlIFB5RXhwYXRfQ0FQSSBzdHJ1Y3R1cmUgaXMgYW4gaW1tdXRhYmxlIGRpc3BhdGNoIHRhYmxlLCBzbyBpdCBjYW4gYmUKKyAqIGNhY2hlZCBnbG9iYWxseSB3aXRob3V0IGJlaW5nIGluIHBlci1tb2R1bGUgc3RhdGUuCisgKi8KIHN0YXRpYyBzdHJ1Y3QgUHlFeHBhdF9DQVBJICpleHBhdF9jYXBpOwogI2RlZmluZSBFWFBBVChmdW5jKSAoZXhwYXRfY2FwaS0+ZnVuYykKIApAQCAtMjcyMCw3ICsyNzY2LDcgQEAKIAogfSBYTUxQYXJzZXJPYmplY3Q7CiAKLSNkZWZpbmUgWE1MUGFyc2VyX0NoZWNrRXhhY3Qob3ApIChQeV9UWVBFKG9wKSA9PSAmWE1MUGFyc2VyX1R5cGUpCitzdGF0aWMgUHlPYmplY3QqIHhtbHBhcnNlcl9kb2N0eXBlKFhNTFBhcnNlck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpOwogCiAvKiBoZWxwZXJzICovCiAKQEAgLTI3NTgsNiArMjgwNCwxMCBAQAogICAgICAgICBpZiAoaSAhPSBzaXplKSB7CiAgICAgICAgICAgICAvKiBjb252ZXJ0IHRvIHVuaXZlcnNhbCBuYW1lICovCiAgICAgICAgICAgICB0YWcgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUrMSk7CisgICAgICAgICAgICBpZiAodGFnID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh0YWcpOwogICAgICAgICAgICAgcFswXSA9ICd7JzsKICAgICAgICAgICAgIG1lbWNweShwKzEsIHN0cmluZywgc2l6ZSk7CkBAIC0yNzk3LDYgKzI4NDcsNyBAQAogZXhwYXRfc2V0X2Vycm9yKGVudW0gWE1MX0Vycm9yIGVycm9yX2NvZGUsIGludCBsaW5lLCBpbnQgY29sdW1uLCBjaGFyICptZXNzYWdlKQogewogICAgIFB5T2JqZWN0ICplcnJtc2csICplcnJvciwgKnBvc2l0aW9uLCAqY29kZTsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdCA9IEVUX1NUQVRFX0dMT0JBTDsKIAogICAgIGVycm1zZyA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlczogbGluZSAlZCwgY29sdW1uICVkIiwKICAgICAgICAgICAgICAgICBtZXNzYWdlID8gbWVzc2FnZSA6IEVYUEFUKEVycm9yU3RyaW5nKShlcnJvcl9jb2RlKSwKQEAgLTI4MDQsNyArMjg1NSw3IEBACiAgICAgaWYgKGVycm1zZyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKLSAgICBlcnJvciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiwgIk8iLCBlcnJtc2cpOworICAgIGVycm9yID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHN0LT5wYXJzZWVycm9yX29iaiwgIk8iLCBlcnJtc2cpOwogICAgIFB5X0RFQ1JFRihlcnJtc2cpOwogICAgIGlmICghZXJyb3IpCiAgICAgICAgIHJldHVybjsKQEAgLTI4MzQsNyArMjg4NSw3IEBACiAgICAgfQogICAgIFB5X0RFQ1JFRihwb3NpdGlvbik7CiAKLSAgICBQeUVycl9TZXRPYmplY3QoZWxlbWVudHRyZWVfcGFyc2VlcnJvcl9vYmosIGVycm9yKTsKKyAgICBQeUVycl9TZXRPYmplY3Qoc3QtPnBhcnNlZXJyb3Jfb2JqLCBlcnJvcik7CiAgICAgUHlfREVDUkVGKGVycm9yKTsKIH0KIApAQCAtMjg1Miw2ICsyOTAzLDkgQEAKICAgICBpZiAoZGF0YV9sZW4gPCAyIHx8IGRhdGFfaW5bMF0gIT0gJyYnKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAga2V5ID0gUHlVbmljb2RlX0RlY29kZVVURjgoZGF0YV9pbiArIDEsIGRhdGFfbGVuIC0gMiwgInN0cmljdCIpOwogICAgIGlmICgha2V5KQogICAgICAgICByZXR1cm47CkBAIC0yODkyLDYgKzI5NDYsOSBAQAogICAgIFB5T2JqZWN0KiBhdHRyaWI7CiAgICAgaW50IG9rOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8qIHRhZyBuYW1lICovCiAgICAgdGFnID0gbWFrZXVuaXZlcnNhbChzZWxmLCB0YWdfaW4pOwogICAgIGlmICghdGFnKQpAQCAtMjk1MCw2ICszMDA3LDkgQEAKICAgICBQeU9iamVjdCogZGF0YTsKICAgICBQeU9iamVjdCogcmVzOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGRhdGEgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luLCBkYXRhX2xlbiwgInN0cmljdCIpOwogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuOyAvKiBwYXJzZXIgd2lsbCBsb29rIGZvciBlcnJvcnMgKi8KQEAgLTI5NzMsNiArMzAzMyw5IEBACiAgICAgUHlPYmplY3QqIHRhZzsKICAgICBQeU9iamVjdCogcmVzID0gTlVMTDsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKQogICAgICAgICAvKiBzaG9ydGN1dCAqLwogICAgICAgICAvKiB0aGUgc3RhbmRhcmQgdHJlZSBidWlsZGVyIGRvZXNuJ3QgbG9vayBhdCB0aGUgZW5kIHRhZyAqLwpAQCAtMjk5NCwzOSArMzA1NywzOSBAQAogZXhwYXRfc3RhcnRfbnNfaGFuZGxlcihYTUxQYXJzZXJPYmplY3QqIHNlbGYsIGNvbnN0IFhNTF9DaGFyKiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFhNTF9DaGFyICp1cmkpCiB7Ci0gICAgUHlPYmplY3QqIHNwcmVmaXggPSBOVUxMOwotICAgIFB5T2JqZWN0KiBzdXJpID0gTlVMTDsKKyAgICBUcmVlQnVpbGRlck9iamVjdCAqdGFyZ2V0ID0gKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0OworICAgIFB5T2JqZWN0ICpwYXJjZWw7CiAKLSAgICBpZiAodXJpKQotICAgICAgICBzdXJpID0gUHlVbmljb2RlX0RlY29kZVVURjgodXJpLCBzdHJsZW4odXJpKSwgInN0cmljdCIpOwotICAgIGVsc2UKLSAgICAgICAgc3VyaSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKLSAgICBpZiAoIXN1cmkpCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwcmVmaXgpCi0gICAgICAgIHNwcmVmaXggPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChwcmVmaXgsIHN0cmxlbihwcmVmaXgpLCAic3RyaWN0Iik7Ci0gICAgZWxzZQotICAgICAgICBzcHJlZml4ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOwotICAgIGlmICghc3ByZWZpeCkgewotICAgICAgICBQeV9ERUNSRUYoc3VyaSk7CisgICAgaWYgKCF0YXJnZXQtPmV2ZW50cyB8fCAhdGFyZ2V0LT5zdGFydF9uc19ldmVudF9vYmopCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKLSAgICB0cmVlYnVpbGRlcl9oYW5kbGVfbmFtZXNwYWNlKAotICAgICAgICAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQsIDEsIHNwcmVmaXgsIHN1cmkKLSAgICAgICAgKTsKKyAgICBpZiAoIXVyaSkKKyAgICAgICAgdXJpID0gIiI7CisgICAgaWYgKCFwcmVmaXgpCisgICAgICAgIHByZWZpeCA9ICIiOwogCi0gICAgUHlfREVDUkVGKHNwcmVmaXgpOwotICAgIFB5X0RFQ1JFRihzdXJpKTsKKyAgICBwYXJjZWwgPSBQeV9CdWlsZFZhbHVlKCJzcyIsIHByZWZpeCwgdXJpKTsKKyAgICBpZiAoIXBhcmNlbCkKKyAgICAgICAgcmV0dXJuOworICAgIHRyZWVidWlsZGVyX2FwcGVuZF9ldmVudCh0YXJnZXQsIHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqLCBwYXJjZWwpOworICAgIFB5X0RFQ1JFRihwYXJjZWwpOwogfQogCiBzdGF0aWMgdm9pZAogZXhwYXRfZW5kX25zX2hhbmRsZXIoWE1MUGFyc2VyT2JqZWN0KiBzZWxmLCBjb25zdCBYTUxfQ2hhciogcHJlZml4X2luKQogewotICAgIHRyZWVidWlsZGVyX2hhbmRsZV9uYW1lc3BhY2UoCi0gICAgICAgIChUcmVlQnVpbGRlck9iamVjdCopIHNlbGYtPnRhcmdldCwgMCwgTlVMTCwgTlVMTAotICAgICAgICApOworICAgIFRyZWVCdWlsZGVyT2JqZWN0ICp0YXJnZXQgPSAoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQ7CisKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCF0YXJnZXQtPmV2ZW50cykKKyAgICAgICAgcmV0dXJuOworCisgICAgdHJlZWJ1aWxkZXJfYXBwZW5kX2V2ZW50KHRhcmdldCwgdGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqLCBQeV9Ob25lKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTMwMzUsNiArMzA5OCw5IEBACiAgICAgUHlPYmplY3QqIGNvbW1lbnQ7CiAgICAgUHlPYmplY3QqIHJlczsKIAorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm47CisKICAgICBpZiAoc2VsZi0+aGFuZGxlX2NvbW1lbnQpIHsKICAgICAgICAgY29tbWVudCA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGNvbW1lbnRfaW4sIHN0cmxlbihjb21tZW50X2luKSwgInN0cmljdCIpOwogICAgICAgICBpZiAoY29tbWVudCkgewpAQCAtMzA1Nyw2ICszMTIzLDkgQEAKICAgICBQeU9iamVjdCAqcGFyc2VyX2RvY3R5cGUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIGRvY3R5cGVfbmFtZV9vYmogPSBtYWtldW5pdmVyc2FsKHNlbGYsIGRvY3R5cGVfbmFtZSk7CiAgICAgaWYgKCFkb2N0eXBlX25hbWVfb2JqKQogICAgICAgICByZXR1cm47CkBAIC0zMDkwLDIwICszMTU5LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N0eXBlX25hbWVfb2JqLCBwdWJpZF9vYmosIHN5c2lkX29iaik7CiAgICAgICAgIFB5X0NMRUFSKHJlcyk7CiAgICAgfQotCi0gICAgLyogTm93IHNlZSBpZiB0aGUgcGFyc2VyIGl0c2VsZiBoYXMgYSBkb2N0eXBlIG1ldGhvZC4gSWYgeWVzIGFuZCBpdCdzCi0gICAgICogYSBzdWJjbGFzcywgY2FsbCBpdCBidXQgd2FybiBhYm91dCBkZXByZWNhdGlvbi4gSWYgaXQncyBub3QgYSBzdWJjbGFzcwotICAgICAqIChpLmUuIHZhbmlsbGEgWE1MUGFyc2VyKSwgZG8gbm90aGluZy4KLSAgICAgKi8KLSAgICBwYXJzZXJfZG9jdHlwZSA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoc2VsZl9weW9iaiwgImRvY3R5cGUiKTsKLSAgICBpZiAocGFyc2VyX2RvY3R5cGUpIHsKLSAgICAgICAgaWYgKCFYTUxQYXJzZXJfQ2hlY2tFeGFjdChzZWxmX3B5b2JqKSkgewotICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoaXMgbWV0aG9kIG9mIFhNTFBhcnNlciBpcyBkZXByZWNhdGVkLiAgRGVmaW5lIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgZG9jdHlwZSgpIG1ldGhvZCBvbiB0aGUgVHJlZUJ1aWxkZXIgdGFyZ2V0LiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkgPCAwKSB7CisgICAgZWxzZSB7CisgICAgICAgIC8qIE5vdyBzZWUgaWYgdGhlIHBhcnNlciBpdHNlbGYgaGFzIGEgZG9jdHlwZSBtZXRob2QuIElmIHllcyBhbmQgaXQncworICAgICAgICAgKiBhIGN1c3RvbSBtZXRob2QsIGNhbGwgaXQgYnV0IHdhcm4gYWJvdXQgZGVwcmVjYXRpb24uIElmIGl0J3Mgb25seQorICAgICAgICAgKiB0aGUgdmFuaWxsYSBYTUxQYXJzZXIgbWV0aG9kLCBkbyBub3RoaW5nLgorICAgICAgICAgKi8KKyAgICAgICAgcGFyc2VyX2RvY3R5cGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHNlbGZfcHlvYmosICJkb2N0eXBlIik7CisgICAgICAgIGlmIChwYXJzZXJfZG9jdHlwZSAmJgorICAgICAgICAgICAgIShQeUNGdW5jdGlvbl9DaGVjayhwYXJzZXJfZG9jdHlwZSkgJiYKKyAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR0VUX1NFTEYocGFyc2VyX2RvY3R5cGUpID09IHNlbGZfcHlvYmogJiYKKyAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKHBhcnNlcl9kb2N0eXBlKSA9PQorICAgICAgICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9kb2N0eXBlKSkgeworICAgICAgICAgICAgcmVzID0geG1scGFyc2VyX2RvY3R5cGUoc2VsZiwgTlVMTCk7CisgICAgICAgICAgICBpZiAoIXJlcykKICAgICAgICAgICAgICAgICBnb3RvIGNsZWFyOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocGFyc2VyX2RvY3R5cGUsICJPT08iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3R5cGVfbmFtZV9vYmosIHB1YmlkX29iaiwgc3lzaWRfb2JqKTsKICAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7CkBAIC0zMTI1LDYgKzMxOTUsOSBAQAogICAgIFB5T2JqZWN0KiBkYXRhOwogICAgIFB5T2JqZWN0KiByZXM7CiAKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNlbGYtPmhhbmRsZV9waSkgewogICAgICAgICB0YXJnZXQgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOCh0YXJnZXRfaW4sIHN0cmxlbih0YXJnZXRfaW4pLCAic3RyaWN0Iik7CiAgICAgICAgIGRhdGEgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOChkYXRhX2luLCBzdHJsZW4oZGF0YV9pbiksICJzdHJpY3QiKTsKQEAgLTMyOTcsNiArMzM3MCw3IEBACiB7CiAgICAgaW50IG9rOwogCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKICAgICBvayA9IEVYUEFUKFBhcnNlKShzZWxmLT5wYXJzZXIsIGRhdGEsIGRhdGFfbGVuLCBmaW5hbCk7CiAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTMzMzEsMTEgKzM0MDUsMTQgQEAKICAgICBpZiAoVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gdHJlZWJ1aWxkZXJfZG9uZSgoVHJlZUJ1aWxkZXJPYmplY3QqKSBzZWxmLT50YXJnZXQpOwotICAgIH0gaWYgKHNlbGYtPmhhbmRsZV9jbG9zZSkgeworICAgIH0KKyAgICBlbHNlIGlmIChzZWxmLT5oYW5kbGVfY2xvc2UpIHsKICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oc2VsZi0+aGFuZGxlX2Nsb3NlLCAiIik7Ci0gICAgfSBlbHNlCisgICAgfQorICAgIGVsc2UgewogICAgICAgICByZXR1cm4gcmVzOworICAgIH0KIH0KIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMzM3MywxMCArMzQ1MCw5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKLXhtbHBhcnNlcl9wYXJzZShYTUxQYXJzZXJPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzKQoreG1scGFyc2VyX3BhcnNlX3dob2xlKFhNTFBhcnNlck9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7Ci0gICAgLyogKGludGVybmFsKSBwYXJzZSB1bnRpbCBlbmQgb2YgaW5wdXQgc3RyZWFtICovCi0KKyAgICAvKiAoaW50ZXJuYWwpIHBhcnNlIHRoZSB3aG9sZSBpbnB1dCwgdW50aWwgZW5kIG9mIHN0cmVhbSAqLwogICAgIFB5T2JqZWN0KiByZWFkZXI7CiAgICAgUHlPYmplY3QqIGJ1ZmZlcjsKICAgICBQeU9iamVjdCogdGVtcDsKQEAgLTM0MDMsNyArMzQ3OSw3IEBACiAKICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGJ1ZmZlcikpIHsKICAgICAgICAgICAgIC8qIEEgdW5pY29kZSBvYmplY3QgaXMgZW5jb2RlZCBpbnRvIGJ5dGVzIHVzaW5nIFVURi04ICovCi0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9TSVpFKGJ1ZmZlcikgPT0gMCkgeworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGJ1ZmZlcikgPT0gMCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihidWZmZXIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtMzQyMSw4ICszNDk3LDE0IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKGJ1ZmZlcikgPiBJTlRfTUFYKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYnVmZmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZWFkZXIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJzaXplIGRvZXMgbm90IGZpdCBpbiBhbiBpbnQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIHJlcyA9IGV4cGF0X3BhcnNlKAotICAgICAgICAgICAgc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoYnVmZmVyKSwgUHlCeXRlc19HRVRfU0laRShidWZmZXIpLCAwCisgICAgICAgICAgICBzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhidWZmZXIpLCAoaW50KVB5Qnl0ZXNfR0VUX1NJWkUoYnVmZmVyKSwgMAogICAgICAgICAgICAgKTsKIAogICAgICAgICBQeV9ERUNSRUYoYnVmZmVyKTsKQEAgLTM0NTAsNiArMzUzMiwxMiBAQAogc3RhdGljIFB5T2JqZWN0KgogeG1scGFyc2VyX2RvY3R5cGUoWE1MUGFyc2VyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICJUaGlzIG1ldGhvZCBvZiBYTUxQYXJzZXIgaXMgZGVwcmVjYXRlZC4gIERlZmluZSIKKyAgICAgICAgICAgICAgICAgICAgICIgZG9jdHlwZSgpIG1ldGhvZCBvbiB0aGUgVHJlZUJ1aWxkZXIgdGFyZ2V0LiIsCisgICAgICAgICAgICAgICAgICAgICAxKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC0zNDU3LDE0ICszNTQ1LDE0IEBACiB4bWxwYXJzZXJfc2V0ZXZlbnRzKFhNTFBhcnNlck9iamVjdCAqc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgLyogYWN0aXZhdGUgZWxlbWVudCBldmVudCByZXBvcnRpbmcgKi8KKyAgICBQeV9zc2l6ZV90IGksIHNlcWxlbjsKKyAgICBUcmVlQnVpbGRlck9iamVjdCAqdGFyZ2V0OwogCi0gICAgUHlfc3NpemVfdCBpOwotICAgIFRyZWVCdWlsZGVyT2JqZWN0KiB0YXJnZXQ7Ci0KLSAgICBQeU9iamVjdCogZXZlbnRzOyAvKiBldmVudCBjb2xsZWN0b3IgKi8KLSAgICBQeU9iamVjdCogZXZlbnRfc2V0ID0gUHlfTm9uZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8hfE86X3NldGV2ZW50cyIsICAmUHlMaXN0X1R5cGUsICZldmVudHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZldmVudF9zZXQpKQorICAgIFB5T2JqZWN0ICpldmVudHNfcXVldWU7CisgICAgUHlPYmplY3QgKmV2ZW50c190b19yZXBvcnQgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpldmVudHNfc2VxOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyF8Tzpfc2V0ZXZlbnRzIiwgICZQeUxpc3RfVHlwZSwgJmV2ZW50c19xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmV2ZW50c190b19yZXBvcnQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmICghVHJlZUJ1aWxkZXJfQ2hlY2tFeGFjdChzZWxmLT50YXJnZXQpKSB7CkBAIC0zNDc4LDkgKzM1NjYsOSBAQAogCiAgICAgdGFyZ2V0ID0gKFRyZWVCdWlsZGVyT2JqZWN0Kikgc2VsZi0+dGFyZ2V0OwogCi0gICAgUHlfSU5DUkVGKGV2ZW50cyk7CisgICAgUHlfSU5DUkVGKGV2ZW50c19xdWV1ZSk7CiAgICAgUHlfWERFQ1JFRih0YXJnZXQtPmV2ZW50cyk7Ci0gICAgdGFyZ2V0LT5ldmVudHMgPSBldmVudHM7CisgICAgdGFyZ2V0LT5ldmVudHMgPSBldmVudHNfcXVldWU7CiAKICAgICAvKiBjbGVhciBvdXQgZXhpc3RpbmcgZXZlbnRzICovCiAgICAgUHlfQ0xFQVIodGFyZ2V0LT5zdGFydF9ldmVudF9vYmopOwpAQCAtMzQ4OCw3NSArMzU3Niw3MSBAQAogICAgIFB5X0NMRUFSKHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqKTsKICAgICBQeV9DTEVBUih0YXJnZXQtPmVuZF9uc19ldmVudF9vYmopOwogCi0gICAgaWYgKGV2ZW50X3NldCA9PSBQeV9Ob25lKSB7CisgICAgaWYgKGV2ZW50c190b19yZXBvcnQgPT0gUHlfTm9uZSkgewogICAgICAgICAvKiBkZWZhdWx0IGlzICJlbmQiIG9ubHkgKi8KICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImVuZCIpOwogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAKLSAgICBpZiAoIVB5VHVwbGVfQ2hlY2soZXZlbnRfc2V0KSkgLyogRklYTUU6IGhhbmRsZSBhcmJpdHJhcnkgc2VxdWVuY2VzICovCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCEoZXZlbnRzX3NlcSA9IFB5U2VxdWVuY2VfRmFzdChldmVudHNfdG9fcmVwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV2ZW50cyBtdXN0IGJlIGEgc2VxdWVuY2UiKSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUoZXZlbnRfc2V0KTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0KiBpdGVtID0gUHlUdXBsZV9HRVRfSVRFTShldmVudF9zZXQsIGkpOwotICAgICAgICBjaGFyKiBldmVudDsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhpdGVtKSkgewotICAgICAgICAgICAgZXZlbnQgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGl0ZW0pOwotICAgICAgICAgICAgaWYgKGV2ZW50ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfSBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKGl0ZW0pKQotICAgICAgICAgICAgZXZlbnQgPSBQeUJ5dGVzX0FTX1NUUklORyhpdGVtKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgIHNlcWxlbiA9IFB5U2VxdWVuY2VfU2l6ZShldmVudHNfc2VxKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QgKmV2ZW50X25hbWVfb2JqID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKGV2ZW50c19zZXEsIGkpOworICAgICAgICBjaGFyICpldmVudF9uYW1lID0gTlVMTDsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhldmVudF9uYW1lX29iaikpIHsKKyAgICAgICAgICAgIGV2ZW50X25hbWUgPSBfUHlVbmljb2RlX0FzU3RyaW5nKGV2ZW50X25hbWVfb2JqKTsKKyAgICAgICAgfSBlbHNlIGlmIChQeUJ5dGVzX0NoZWNrKGV2ZW50X25hbWVfb2JqKSkgeworICAgICAgICAgICAgZXZlbnRfbmFtZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgfQotICAgICAgICBpZiAoc3RyY21wKGV2ZW50LCAic3RhcnQiKSA9PSAwKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoaXRlbSk7Ci0gICAgICAgICAgICB0YXJnZXQtPnN0YXJ0X2V2ZW50X29iaiA9IGl0ZW07Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50LCAiZW5kIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworCisgICAgICAgIGlmIChldmVudF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihldmVudHNfc2VxKTsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiaW52YWxpZCBldmVudHMgc2VxdWVuY2UiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAic3RhcnQiKSA9PSAwKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZXZlbnRfbmFtZV9vYmopOworICAgICAgICAgICAgdGFyZ2V0LT5zdGFydF9ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoZXZlbnRfbmFtZSwgImVuZCIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRhcmdldC0+ZW5kX2V2ZW50X29iaik7Ci0gICAgICAgICAgICB0YXJnZXQtPmVuZF9ldmVudF9vYmogPSBpdGVtOwotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudCwgInN0YXJ0LW5zIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgdGFyZ2V0LT5lbmRfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50X25hbWUsICJzdGFydC1ucyIpID09IDApIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihldmVudF9uYW1lX29iaik7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqKTsKLSAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqID0gaXRlbTsKKyAgICAgICAgICAgIHRhcmdldC0+c3RhcnRfbnNfZXZlbnRfb2JqID0gZXZlbnRfbmFtZV9vYmo7CiAgICAgICAgICAgICBFWFBBVChTZXROYW1lc3BhY2VEZWNsSGFuZGxlcikoCiAgICAgICAgICAgICAgICAgc2VsZi0+cGFyc2VyLAogICAgICAgICAgICAgICAgIChYTUxfU3RhcnROYW1lc3BhY2VEZWNsSGFuZGxlcikgZXhwYXRfc3RhcnRfbnNfaGFuZGxlciwKICAgICAgICAgICAgICAgICAoWE1MX0VuZE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9lbmRfbnNfaGFuZGxlcgogICAgICAgICAgICAgICAgICk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGV2ZW50LCAiZW5kLW5zIikgPT0gMCkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChldmVudF9uYW1lLCAiZW5kLW5zIikgPT0gMCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGV2ZW50X25hbWVfb2JqKTsKICAgICAgICAgICAgIFB5X1hERUNSRUYodGFyZ2V0LT5lbmRfbnNfZXZlbnRfb2JqKTsKLSAgICAgICAgICAgIHRhcmdldC0+ZW5kX25zX2V2ZW50X29iaiA9IGl0ZW07CisgICAgICAgICAgICB0YXJnZXQtPmVuZF9uc19ldmVudF9vYmogPSBldmVudF9uYW1lX29iajsKICAgICAgICAgICAgIEVYUEFUKFNldE5hbWVzcGFjZURlY2xIYW5kbGVyKSgKICAgICAgICAgICAgICAgICBzZWxmLT5wYXJzZXIsCiAgICAgICAgICAgICAgICAgKFhNTF9TdGFydE5hbWVzcGFjZURlY2xIYW5kbGVyKSBleHBhdF9zdGFydF9uc19oYW5kbGVyLAogICAgICAgICAgICAgICAgIChYTUxfRW5kTmFtZXNwYWNlRGVjbEhhbmRsZXIpIGV4cGF0X2VuZF9uc19oYW5kbGVyCiAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKLSAgICAgICAgICAgICAgICBQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICJ1bmtub3duIGV2ZW50ICclcyciLCBldmVudAotICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gZXZlbnQgJyVzJyIsIGV2ZW50X25hbWUpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBQeV9ERUNSRUYoZXZlbnRzX3NlcSk7CiAgICAgUHlfUkVUVVJOX05PTkU7Ci0KLSAgZXJyb3I6Ci0gICAgUHlFcnJfU2V0U3RyaW5nKAotICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICJpbnZhbGlkIGV2ZW50IHR1cGxlIgotICAgICAgICApOwotICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlNZXRob2REZWYgeG1scGFyc2VyX21ldGhvZHNbXSA9IHsKICAgICB7ImZlZWQiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9mZWVkLCBNRVRIX099LAogICAgIHsiY2xvc2UiLCAoUHlDRnVuY3Rpb24pIHhtbHBhcnNlcl9jbG9zZSwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Il9wYXJzZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX3BhcnNlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsiX3BhcnNlX3dob2xlIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfcGFyc2Vfd2hvbGUsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJfc2V0ZXZlbnRzIiwgKFB5Q0Z1bmN0aW9uKSB4bWxwYXJzZXJfc2V0ZXZlbnRzLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZG9jdHlwZSIsIChQeUNGdW5jdGlvbikgeG1scGFyc2VyX2RvY3R5cGUsIE1FVEhfVkFSQVJHU30sCiAgICAge05VTEwsIE5VTEx9CkBAIC0zNjI4LDggKzM3MTIsNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KIH07CiAKLSNlbmRpZgotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogcHl0aG9uIG1vZHVsZSBpbnRlcmZhY2UgKi8KIApAQCAtMzYzOSwyMiArMzcyMSwyOSBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9lbGVtZW50dHJlZW1vZHVsZSA9IHsKLSAgICAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAotICAgICAgICAiX2VsZW1lbnR0cmVlIiwKLSAgICAgICAgTlVMTCwKLSAgICAgICAgLTEsCi0gICAgICAgIF9mdW5jdGlvbnMsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwsCi0gICAgICAgIE5VTEwKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZWxlbWVudHRyZWVtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfZWxlbWVudHRyZWUiLAorICAgIE5VTEwsCisgICAgc2l6ZW9mKGVsZW1lbnR0cmVlc3RhdGUpLAorICAgIF9mdW5jdGlvbnMsCisgICAgTlVMTCwKKyAgICBlbGVtZW50dHJlZV90cmF2ZXJzZSwKKyAgICBlbGVtZW50dHJlZV9jbGVhciwKKyAgICBlbGVtZW50dHJlZV9mcmVlCiB9OwogCiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19lbGVtZW50dHJlZSh2b2lkKQogewogICAgIFB5T2JqZWN0ICptLCAqdGVtcDsKKyAgICBlbGVtZW50dHJlZXN0YXRlICpzdDsKKworICAgIG0gPSBQeVN0YXRlX0ZpbmRNb2R1bGUoJmVsZW1lbnR0cmVlbW9kdWxlKTsKKyAgICBpZiAobSkgeworICAgICAgICBQeV9JTkNSRUYobSk7CisgICAgICAgIHJldHVybiBtOworICAgIH0KIAogICAgIC8qIEluaXRpYWxpemUgb2JqZWN0IHR5cGVzICovCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmRWxlbWVudEl0ZXJfVHlwZSkgPCAwKQpAQCAtMzY2MywyMSArMzc1MiwyMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZFbGVtZW50X1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWYgZGVmaW5lZChVU0VfRVhQQVQpCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmWE1MUGFyc2VyX1R5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jZW5kaWYKIAotICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJl9lbGVtZW50dHJlZW1vZHVsZSk7CisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmZWxlbWVudHRyZWVtb2R1bGUpOwogICAgIGlmICghbSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3QgPSBFVF9TVEFURShtKTsKIAogICAgIGlmICghKHRlbXAgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHkiKSkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGVsZW1lbnR0cmVlX2RlZXBjb3B5X29iaiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGVtcCwgImRlZXBjb3B5Iik7CisgICAgc3QtPmRlZXBjb3B5X29iaiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcodGVtcCwgImRlZXBjb3B5Iik7CiAgICAgUHlfWERFQ1JFRih0ZW1wKTsKIAotICAgIGlmICghKGVsZW1lbnRwYXRoX29iaiA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgieG1sLmV0cmVlLkVsZW1lbnRQYXRoIikpKQorICAgIGlmICghKHN0LT5lbGVtZW50cGF0aF9vYmogPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInhtbC5ldHJlZS5FbGVtZW50UGF0aCIpKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBsaW5rIGFnYWluc3QgcHlleHBhdCAqLwpAQCAtMzY5NywxMSArMzc4NSwxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaiA9IFB5RXJyX05ld0V4Y2VwdGlvbigKKyAgICBzdC0+cGFyc2VlcnJvcl9vYmogPSBQeUVycl9OZXdFeGNlcHRpb24oCiAgICAgICAgICJ4bWwuZXRyZWUuRWxlbWVudFRyZWUuUGFyc2VFcnJvciIsIFB5RXhjX1N5bnRheEVycm9yLCBOVUxMCiAgICAgICAgICk7Ci0gICAgUHlfSU5DUkVGKGVsZW1lbnR0cmVlX3BhcnNlZXJyb3Jfb2JqKTsKLSAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBhcnNlRXJyb3IiLCBlbGVtZW50dHJlZV9wYXJzZWVycm9yX29iaik7CisgICAgUHlfSU5DUkVGKHN0LT5wYXJzZWVycm9yX29iaik7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQYXJzZUVycm9yIiwgc3QtPnBhcnNlZXJyb3Jfb2JqKTsKIAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmRWxlbWVudF9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgIkVsZW1lbnQiLCAoUHlPYmplY3QgKikmRWxlbWVudF9UeXBlKTsKQEAgLTM3MDksMTAgKzM3OTcsOCBAQAogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmVHJlZUJ1aWxkZXJfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUcmVlQnVpbGRlciIsIChQeU9iamVjdCAqKSZUcmVlQnVpbGRlcl9UeXBlKTsKIAotI2lmIGRlZmluZWQoVVNFX0VYUEFUKQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmWE1MUGFyc2VyX1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiWE1MUGFyc2VyIiwgKFB5T2JqZWN0ICopJlhNTFBhcnNlcl9UeXBlKTsKLSNlbmRpZgogCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMgYi9Nb2R1bGVzL19mcmVlemVfaW1wb3J0bGliLmMKaW5kZXggOGYwN2E4OS4uNTdiMWFjMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jCisrKyBiL01vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYwpAQCAtMTcsNyArMTcsNyBAQAogICAgb2YgZnJvemVuIG1vZHVsZXMgaW5zdGVhZCwgbGVmdCBkZWxpYmVyYXRlbHkgYmxhbmsgc28gYXMgdG8gYXZvaWQKICAgIHVuaW50ZW50aW9uYWwgaW1wb3J0IG9mIGEgc3RhbGUgdmVyc2lvbiBvZiBfZnJvemVuX2ltcG9ydGxpYi4gKi8KIAotc3RhdGljIHN0cnVjdCBfZnJvemVuIF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzW10gPSB7Citjb25zdCBzdGF0aWMgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKICAgICB7MCwgMCwgMH0gLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI1LDcgKzI1LDcgQEAKIC8qIE9uIFdpbmRvd3MsIHRoaXMgbGlua3Mgd2l0aCB0aGUgcmVndWxhciBweXRob25YWS5kbGwsIHNvIHRoaXMgdmFyaWFibGUgY29tZXMKICAgIGZyb20gZnJvemVuLm9iai4gSW4gdGhlIE1ha2VmaWxlLCBmcm96ZW4ubyBpcyBub3QgbGlua2VkIGludG8gdGhpcyBleGVjdXRhYmxlLAogICAgc28gd2UgZGVmaW5lIHRoZSB2YXJpYWJsZSBoZXJlLiAqLwotc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXM7Citjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKICNlbmRpZgogCiBjb25zdCBjaGFyIGhlYWRlcltdID0gIi8qIEF1dG8tZ2VuZXJhdGVkIGJ5IE1vZHVsZXMvX2ZyZWV6ZV9pbXBvcnRsaWIuYyAqLyI7CkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgZnByaW50ZihvdXRmaWxlLCAiJXNcbiIsIGhlYWRlcik7Ci0gICAgZnByaW50ZihvdXRmaWxlLCAidW5zaWduZWQgY2hhciBfUHlfTV9faW1wb3J0bGliW10gPSB7XG4iKTsKKyAgICBmcHJpbnRmKG91dGZpbGUsICJjb25zdCB1bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHtcbiIpOwogICAgIGZvciAobiA9IDA7IG4gPCBkYXRhX3NpemU7IG4gKz0gMTYpIHsKICAgICAgICAgc2l6ZV90IGksIGVuZCA9IFB5X01JTihuICsgMTYsIGRhdGFfc2l6ZSk7CiAgICAgICAgIGZwcmludGYob3V0ZmlsZSwgIiAgICAiKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jIGIvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKaW5kZXggNTdkZmJhMC4uMjRkYTY3NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fZnVuY3Rvb2xzbW9kdWxlLmMKQEAgLTU0LDE3ICs1NCwxMyBAQAogICAgICAgICBQeV9ERUNSRUYocHRvKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmIChrdyAhPSBOVUxMKSB7Ci0gICAgICAgIHB0by0+a3cgPSBQeURpY3RfQ29weShrdyk7Ci0gICAgICAgIGlmIChwdG8tPmt3ID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihwdG8pOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBwdG8tPmt3ID0gUHlfTm9uZTsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHB0by0+a3cgPSAoa3cgIT0gTlVMTCkgPyBQeURpY3RfQ29weShrdykgOiBQeURpY3RfTmV3KCk7CisgICAgaWYgKHB0by0+a3cgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocHRvKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCisKICAgICBwdG8tPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBwdG8tPmRpY3QgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19nZGJtbW9kdWxlLmMgYi9Nb2R1bGVzL19nZGJtbW9kdWxlLmMKaW5kZXggMGJkNTljOC4uMjI5ZTE2ZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fZ2RibW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2dkYm1tb2R1bGUuYwpAQCAtNzksNyArNzksNyBAQAogLyogTWV0aG9kcyAqLwogCiBzdGF0aWMgdm9pZAotZGJtX2RlYWxsb2MocmVnaXN0ZXIgZGJtb2JqZWN0ICpkcCkKK2RibV9kZWFsbG9jKGRibW9iamVjdCAqZHApCiB7CiAgICAgaWYgKGRwLT5kaV9kYm0pCiAgICAgICAgIGdkYm1fY2xvc2UoZHAtPmRpX2RibSk7CkBAIC0xMTIsNyArMTEyLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RibV9zdWJzY3JpcHQoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmtleSkKIHsKICAgICBQeU9iamVjdCAqdjsKICAgICBkYXR1bSBkcmVjLCBrcmVjOwpAQCAtMjMyLDcgKzIzMiw3IEBACiBDbG9zZXMgdGhlIGRhdGFiYXNlLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotZGJtX2Nsb3NlKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fY2xvc2UoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBpZiAoZHAtPmRpX2RibSkKICAgICAgICAgZ2RibV9jbG9zZShkcC0+ZGlfZGJtKTsKQEAgLTI0Nyw5ICsyNDcsOSBAQAogR2V0IGEgbGlzdCBvZiBhbGwga2V5cyBpbiB0aGUgZGF0YWJhc2UuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fa2V5cyhyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2tleXMoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdiwgKml0ZW07CisgICAgUHlPYmplY3QgKnYsICppdGVtOwogICAgIGRhdHVtIGtleSwgbmV4dGtleTsKICAgICBpbnQgZXJyOwogCkBAIC0zMzcsOSArMzM3LDkgQEAKIHJldHVybnMgdGhlIHN0YXJ0aW5nIGtleS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9maXJzdGtleShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX2ZpcnN0a2V5KGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0ga2V5OwogCiAgICAgY2hlY2tfZGJtb2JqZWN0X29wZW4oZHApOwpAQCAtMzY3LDkgKzM2Nyw5IEBACiAgICAgICAgICAgayA9IGRiLm5leHRrZXkoaykiKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9uZXh0a2V5KHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICphcmdzKQorZGJtX25leHRrZXkoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7CisgICAgUHlPYmplY3QgKnY7CiAgICAgZGF0dW0ga2V5LCBuZXh0a2V5OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzIzpuZXh0a2V5IiwgJmtleS5kcHRyLCAma2V5LmRzaXplKSkKQEAgLTM5Niw3ICszOTYsNyBAQAoga2VwdCBhbmQgcmV1c2VkIGFzIG5ldyAoa2V5LHZhbHVlKSBwYWlycyBhcmUgYWRkZWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kYm1fcmVvcmdhbml6ZShyZWdpc3RlciBkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQorZGJtX3Jlb3JnYW5pemUoZGJtb2JqZWN0ICpkcCwgUHlPYmplY3QgKnVudXNlZCkKIHsKICAgICBjaGVja19kYm1vYmplY3Rfb3BlbihkcCk7CiAgICAgZXJybm8gPSAwOwpAQCAtNDE3LDcgKzQxNyw3IEBACiBhbnkgdW53cml0dGVuIGRhdGEgdG8gYmUgd3JpdHRlbiB0byB0aGUgZGlzay4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRibV9zeW5jKHJlZ2lzdGVyIGRibW9iamVjdCAqZHAsIFB5T2JqZWN0ICp1bnVzZWQpCitkYm1fc3luYyhkYm1vYmplY3QgKmRwLCBQeU9iamVjdCAqdW51c2VkKQogewogICAgIGNoZWNrX2RibW9iamVjdF9vcGVuKGRwKTsKICAgICBnZGJtX3N5bmMoZHAtPmRpX2RibSk7CkBAIC00MjUsNiArNDI1LDIwIEBACiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkYm1fX2VudGVyX18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5X0lOQ1JFRihzZWxmKTsKKyAgICByZXR1cm4gc2VsZjsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RibV9fZXhpdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfY2xvc2UsIE5VTEwpOworfQorCiBzdGF0aWMgUHlNZXRob2REZWYgZGJtX21ldGhvZHNbXSA9IHsKICAgICB7ImNsb3NlIiwgICAgIChQeUNGdW5jdGlvbilkYm1fY2xvc2UsICAgTUVUSF9OT0FSR1MsIGRibV9jbG9zZV9fZG9jX199LAogICAgIHsia2V5cyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9rZXlzLCAgICBNRVRIX05PQVJHUywgZGJtX2tleXNfX2RvY19ffSwKQEAgLTQzNCw2ICs0NDgsOCBAQAogICAgIHsic3luYyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRibV9zeW5jLCAgICBNRVRIX05PQVJHUywgZGJtX3N5bmNfX2RvY19ffSwKICAgICB7ImdldCIsICAgICAgIChQeUNGdW5jdGlvbilkYm1fZ2V0LCAgICAgTUVUSF9WQVJBUkdTLCBkYm1fZ2V0X19kb2NfX30sCiAgICAgeyJzZXRkZWZhdWx0IiwoUHlDRnVuY3Rpb24pZGJtX3NldGRlZmF1bHQsTUVUSF9WQVJBUkdTLCBkYm1fc2V0ZGVmYXVsdF9fZG9jX199LAorICAgIHsiX19lbnRlcl9fIiwgZGJtX19lbnRlcl9fLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAgeyJfX2V4aXRfXyIsICBkYm1fX2V4aXRfXywgTUVUSF9WQVJBUkdTLCBOVUxMfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fZ2VzdGFsdC5jIGIvTW9kdWxlcy9fZ2VzdGFsdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZDMwNjgzLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvX2dlc3RhbHQuYworKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NyBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPCi1USElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi1GSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQkUgTElBQkxFCi1GT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUwotV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCi1BQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAotT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBNYWNpbnRvc2ggR2VzdGFsdCBpbnRlcmZhY2UgKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi0jaW5jbHVkZSA8Q2FyYm9uL0NhcmJvbi5oPgotCi0vKiBDb252ZXJ0IGEgNC1jaGFyIHN0cmluZyBvYmplY3QgYXJndW1lbnQgdG8gYW4gT1NUeXBlIHZhbHVlICovCi1zdGF0aWMgaW50Ci1jb252ZXJ0X3RvX09TVHlwZShQeU9iamVjdCAqdiwgT1NUeXBlICpwcikKLXsKLSAgICB1aW50MzJfdCB0bXA7Ci0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikgfHwgUHlVbmljb2RlX0dldExlbmd0aCh2KSAhPSA0KSB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIk9TVHlwZSBhcmcgbXVzdCBiZSBzdHJpbmcgb2YgNCBjaGFycyIpOwotICAgIHJldHVybiAwOwotICAgIH0KLSAgICBtZW1jcHkoKGNoYXIgKikmdG1wLCBfUHlVbmljb2RlX0FzU3RyaW5nKHYpLCA0KTsKLSAgICAqcHIgPSAoT1NUeXBlKW50b2hsKHRtcCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1nZXN0YWx0X2dlc3RhbHQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIE9TRXJyIGlFcnI7Ci0gICAgT1NUeXBlIHNlbGVjdG9yOwotICAgIFNJbnQzMiByZXNwb25zZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mIiwgY29udmVydF90b19PU1R5cGUsICZzZWxlY3RvcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlFcnIgPSBHZXN0YWx0KHNlbGVjdG9yLCAmcmVzcG9uc2UpOwotICAgIGlmIChpRXJyICE9IDApIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIGV4aXQgY29kZSEiKTsKLSAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyZXNwb25zZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgZ2VzdGFsdF9tZXRob2RzW10gPSB7Ci0gICAgeyJnZXN0YWx0IiwgZ2VzdGFsdF9nZXN0YWx0LCBNRVRIX1ZBUkFSR1N9LAotICAgIHtOVUxMLCBOVUxMfSAvKiBTZW50aW5lbCAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBnZXN0YWx0bW9kdWxlID0gewotICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAiX2dlc3RhbHQiLAotICAgIE5VTEwsCi0gICAgLTEsCi0gICAgZ2VzdGFsdF9tZXRob2RzLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwKLX07Ci0KLVB5TU9ESU5JVF9GVU5DCi1QeUluaXRfX2dlc3RhbHQodm9pZCkKLXsKLSAgICByZXR1cm4gUHlNb2R1bGVfQ3JlYXRlKCZnZXN0YWx0bW9kdWxlKTsKLX0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMgYi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jCmluZGV4IDNhYjFjMGMuLjViMGE3YmUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2hhc2hvcGVuc3NsLmMKKysrIGIvTW9kdWxlcy9faGFzaG9wZW5zc2wuYwpAQCAtMTcsMzYgKzE3LDE2IEBACiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiaGFzaGxpYi5oIgogCi0jaWZkZWYgV0lUSF9USFJFQUQKLSNpbmNsdWRlICJweXRocmVhZC5oIgotICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopIFwKLSAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKLSAgICAgICAgICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAwKSkgeyBcCi0gICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBcCi0gICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAxKTsgXAotICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTIFwKLSAgICAgICAgICAgIH0gXAotICAgICAgICB9Ci0gICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikgXAotICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAotICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKChvYmopLT5sb2NrKTsgXAotICAgICAgICB9Ci0jZWxzZQotICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopCi0gICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikKLSNlbmRpZgogCiAvKiBFVlAgaXMgdGhlIHByZWZlcnJlZCBpbnRlcmZhY2UgdG8gaGFzaGluZyBpbiBPcGVuU1NMICovCiAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KIC8qIFdlIHVzZSB0aGUgb2JqZWN0IGludGVyZmFjZSB0byBkaXNjb3ZlciB3aGF0IGhhc2hlcyBPcGVuU1NMIHN1cHBvcnRzLiAqLwogI2luY2x1ZGUgPG9wZW5zc2wvb2JqZWN0cy5oPgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCiAKICNkZWZpbmUgTVVOQ0hfU0laRSBJTlRfTUFYCiAKLS8qIFRPRE8oZ3BzKTogV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyBhIG1vZHVsZSBvciBFVlBvYmplY3QgYXR0cmlidXRlCi0gKiB0byBhbGxvdyB0aGUgdXNlciB0byBvcHRpbWl6ZSBiYXNlZCBvbiB0aGUgcGxhdGZvcm0gdGhleSdyZSB1c2luZy4gKi8KLSNkZWZpbmUgSEFTSExJQl9HSUxfTUlOU0laRSAyMDQ4Ci0KICNpZm5kZWYgSEFTSF9PQkpfQ09OU1RSVUNUT1IKICNkZWZpbmUgSEFTSF9PQkpfQ09OU1RSVUNUT1IgMAogI2VuZGlmCkBAIC00ODksNiArNDY5LDIyNSBAQAogfQogCiAKKworI2lmIChPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MTAwMDAwMDAgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19ITUFDKSBcCisgICAgICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSkKKworI2RlZmluZSBQWV9QQktERjJfSE1BQyAxCisKKy8qIEltcHJvdmVkIGltcGxlbWVudGF0aW9uIG9mIFBLQ1M1X1BCS0RGMl9ITUFDKCkKKyAqCisgKiBQS0NTNV9QQktERjJfSE1BQ19mYXN0KCkgaGFzaGVzIHRoZSBwYXNzd29yZCBleGFjdGx5IG9uZSB0aW1lIGluc3RlYWQgb2YKKyAqIGBpdGVyYCB0aW1lcy4gVG9kYXkgKDIwMTMpIHRoZSBpdGVyYXRpb24gY291bnQgaXMgdHlwaWNhbGx5IDEwMCwwMDAgb3IKKyAqIG1vcmUuIFRoZSBpbXByb3ZlZCBhbGdvcml0aG0gaXMgbm90IHN1YmplY3QgdG8gYSBEZW5pYWwtb2YtU2VydmljZQorICogdnVsbmVyYWJpbGl0eSB3aXRoIG92ZXJseSBsYXJnZSBwYXNzd29yZHMuCisgKgorICogQWxzbyBPcGVuU1NMIDwgMS4wIGRvbid0IHByb3ZpZGUgUEtDUzVfUEJLREYyX0hNQUMoKSwgb25seQorICogUEtDUzVfUEJLREYyX1NIQTEuCisgKi8KK3N0YXRpYyBpbnQKK1BLQ1M1X1BCS0RGMl9ITUFDX2Zhc3QoY29uc3QgY2hhciAqcGFzcywgaW50IHBhc3NsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhbHQsIGludCBzYWx0bGVuLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlciwgY29uc3QgRVZQX01EICpkaWdlc3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBrZXlsZW4sIHVuc2lnbmVkIGNoYXIgKm91dCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGRpZ3RtcFtFVlBfTUFYX01EX1NJWkVdLCAqcCwgaXRtcFs0XTsKKyAgICBpbnQgY3BsZW4sIGosIGssIHRrZXlsZW4sIG1kbGVuOworICAgIHVuc2lnbmVkIGxvbmcgaSA9IDE7CisgICAgSE1BQ19DVFggaGN0eF90cGwsIGhjdHg7CisKKyAgICBtZGxlbiA9IEVWUF9NRF9zaXplKGRpZ2VzdCk7CisgICAgaWYgKG1kbGVuIDwgMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBITUFDX0NUWF9pbml0KCZoY3R4X3RwbCk7CisgICAgSE1BQ19DVFhfaW5pdCgmaGN0eCk7CisgICAgcCA9IG91dDsKKyAgICB0a2V5bGVuID0ga2V5bGVuOworICAgIGlmICghSE1BQ19Jbml0X2V4KCZoY3R4X3RwbCwgcGFzcywgcGFzc2xlbiwgZGlnZXN0LCBOVUxMKSkgeworICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB3aGlsZSAodGtleWxlbikgeworICAgICAgICBpZiAodGtleWxlbiA+IG1kbGVuKQorICAgICAgICAgICAgY3BsZW4gPSBtZGxlbjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3BsZW4gPSB0a2V5bGVuOworICAgICAgICAvKiBXZSBhcmUgdW5saWtlbHkgdG8gZXZlciB1c2UgbW9yZSB0aGFuIDI1NiBibG9ja3MgKDUxMjAgYml0cyEpCisgICAgICAgICAqIGJ1dCBqdXN0IGluIGNhc2UuLi4KKyAgICAgICAgICovCisgICAgICAgIGl0bXBbMF0gPSAodW5zaWduZWQgY2hhcikoKGkgPj4gMjQpICYgMHhmZik7CisgICAgICAgIGl0bXBbMV0gPSAodW5zaWduZWQgY2hhcikoKGkgPj4gMTYpICYgMHhmZik7CisgICAgICAgIGl0bXBbMl0gPSAodW5zaWduZWQgY2hhcikoKGkgPj4gOCkgJiAweGZmKTsKKyAgICAgICAgaXRtcFszXSA9ICh1bnNpZ25lZCBjaGFyKShpICYgMHhmZik7CisgICAgICAgIGlmICghSE1BQ19DVFhfY29weSgmaGN0eCwgJmhjdHhfdHBsKSkgeworICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFITUFDX1VwZGF0ZSgmaGN0eCwgc2FsdCwgc2FsdGxlbikKKyAgICAgICAgICAgICAgICB8fCAhSE1BQ19VcGRhdGUoJmhjdHgsIGl0bXAsIDQpCisgICAgICAgICAgICAgICAgfHwgIUhNQUNfRmluYWwoJmhjdHgsIGRpZ3RtcCwgTlVMTCkpIHsKKyAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHhfdHBsKTsKKyAgICAgICAgICAgIEhNQUNfQ1RYX2NsZWFudXAoJmhjdHgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgIG1lbWNweShwLCBkaWd0bXAsIGNwbGVuKTsKKyAgICAgICAgZm9yIChqID0gMTsgaiA8IGl0ZXI7IGorKykgeworICAgICAgICAgICAgaWYgKCFITUFDX0NUWF9jb3B5KCZoY3R4LCAmaGN0eF90cGwpKSB7CisgICAgICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFITUFDX1VwZGF0ZSgmaGN0eCwgZGlndG1wLCBtZGxlbikKKyAgICAgICAgICAgICAgICAgICAgfHwgIUhNQUNfRmluYWwoJmhjdHgsIGRpZ3RtcCwgTlVMTCkpIHsKKyAgICAgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4X3RwbCk7CisgICAgICAgICAgICAgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBITUFDX0NUWF9jbGVhbnVwKCZoY3R4KTsKKyAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBjcGxlbjsgaysrKSB7CisgICAgICAgICAgICAgICAgcFtrXSBePSBkaWd0bXBba107CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdGtleWxlbi09IGNwbGVuOworICAgICAgICBpKys7CisgICAgICAgIHArPSBjcGxlbjsKKyAgICB9CisgICAgSE1BQ19DVFhfY2xlYW51cCgmaGN0eF90cGwpOworICAgIHJldHVybiAxOworfQorCisvKiBMQ09WX0VYQ0xfU1RBUlQgKi8KK3N0YXRpYyBQeU9iamVjdCAqCitfc2V0RXhjZXB0aW9uKFB5T2JqZWN0ICpleGMpCit7CisgICAgdW5zaWduZWQgbG9uZyBlcnJjb2RlOworICAgIGNvbnN0IGNoYXIgKmxpYiwgKmZ1bmMsICpyZWFzb247CisKKyAgICBlcnJjb2RlID0gRVJSX3BlZWtfbGFzdF9lcnJvcigpOworICAgIGlmICghZXJyY29kZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoZXhjLCAidW5rbm93biByZWFzb25zIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKworICAgIGxpYiA9IEVSUl9saWJfZXJyb3Jfc3RyaW5nKGVycmNvZGUpOworICAgIGZ1bmMgPSBFUlJfZnVuY19lcnJvcl9zdHJpbmcoZXJyY29kZSk7CisgICAgcmVhc29uID0gRVJSX3JlYXNvbl9lcnJvcl9zdHJpbmcoZXJyY29kZSk7CisKKyAgICBpZiAobGliICYmIGZ1bmMpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KGV4YywgIlslczogJXNdICVzIiwgbGliLCBmdW5jLCByZWFzb24pOworICAgIH0KKyAgICBlbHNlIGlmIChsaWIpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KGV4YywgIlslc10gJXMiLCBsaWIsIHJlYXNvbik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoZXhjLCByZWFzb24pOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKy8qIExDT1ZfRVhDTF9TVE9QICovCisKK1B5RG9jX1NUUlZBUihwYmtkZjJfaG1hY19fZG9jX18sCisicGJrZGYyX2htYWMoaGFzaF9uYW1lLCBwYXNzd29yZCwgc2FsdCwgaXRlcmF0aW9ucywgZGtsZW49Tm9uZSkgLT4ga2V5XG5cCitcblwKK1Bhc3N3b3JkIGJhc2VkIGtleSBkZXJpdmF0aW9uIGZ1bmN0aW9uIDIgKFBLQ1MgIzUgdjIuMCkgd2l0aCBITUFDIGFzXG5cCitwc2V1ZG9yYW5kb20gZnVuY3Rpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitwYmtkZjJfaG1hYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCit7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJoYXNoX25hbWUiLCAicGFzc3dvcmQiLCAic2FsdCIsICJpdGVyYXRpb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRrbGVuIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmtleV9vYmogPSBOVUxMLCAqZGtsZW5fb2JqID0gUHlfTm9uZTsKKyAgICBjaGFyICpuYW1lLCAqa2V5OworICAgIFB5X2J1ZmZlciBwYXNzd29yZCwgc2FsdDsKKyAgICBsb25nIGl0ZXJhdGlvbnMsIGRrbGVuOworICAgIGludCByZXR2YWw7CisgICAgY29uc3QgRVZQX01EICpkaWdlc3Q7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJzeSp5Kmx8TzpwYmtkZjJfaG1hYyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmbmFtZSwgJnBhc3N3b3JkLCAmc2FsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlcmF0aW9ucywgJmRrbGVuX29iaikpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgZGlnZXN0ID0gRVZQX2dldF9kaWdlc3RieW5hbWUobmFtZSk7CisgICAgaWYgKGRpZ2VzdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidW5zdXBwb3J0ZWQgaGFzaCB0eXBlIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChwYXNzd29yZC5sZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInBhc3N3b3JkIGlzIHRvbyBsb25nLiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoc2FsdC5sZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInNhbHQgaXMgdG9vIGxvbmcuIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIGlmIChpdGVyYXRpb25zIDwgMSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24gdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGlmIChpdGVyYXRpb25zID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpb24gdmFsdWUgaXMgdG9vIGdyZWF0LiIpOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9CisKKyAgICBpZiAoZGtsZW5fb2JqID09IFB5X05vbmUpIHsKKyAgICAgICAgZGtsZW4gPSBFVlBfTURfc2l6ZShkaWdlc3QpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRrbGVuID0gUHlMb25nX0FzTG9uZyhka2xlbl9vYmopOworICAgICAgICBpZiAoKGRrbGVuID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZGtsZW4gPCAxKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImtleSBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gMC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGlmIChka2xlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgLyogSU5UX01BWCBpcyBhbHdheXMgc21hbGxlciB0aGFuIGRrTGVuIG1heCAoMl4zMiAtIDEpICogaExlbiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJrZXkgbGVuZ3RoIGlzIHRvbyBncmVhdC4iKTsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorCisgICAga2V5X29iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZGtsZW4pOworICAgIGlmIChrZXlfb2JqID09IE5VTEwpIHsKKyAgICAgICAgZ290byBlbmQ7CisgICAgfQorICAgIGtleSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGtleV9vYmopOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldHZhbCA9IFBLQ1M1X1BCS0RGMl9ITUFDX2Zhc3QoKGNoYXIqKXBhc3N3b3JkLmJ1ZiwgKGludClwYXNzd29yZC5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKXNhbHQuYnVmLCAoaW50KXNhbHQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlcmF0aW9ucywgZGlnZXN0LCBka2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopa2V5KTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXR2YWwpIHsKKyAgICAgICAgUHlfQ0xFQVIoa2V5X29iaik7CisgICAgICAgIF9zZXRFeGNlcHRpb24oUHlFeGNfVmFsdWVFcnJvcik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICBlbmQ6CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzc3dvcmQpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNhbHQpOworICAgIHJldHVybiBrZXlfb2JqOworfQorCisjZW5kaWYKKwogLyogU3RhdGUgZm9yIG91ciBjYWxsYmFjayBmdW5jdGlvbiBzbyB0aGF0IGl0IGNhbiBhY2N1bXVsYXRlIGEgcmVzdWx0LiAqLwogdHlwZWRlZiBzdHJ1Y3QgX2ludGVybmFsX25hbWVfbWFwcGVyX3N0YXRlIHsKICAgICBQeU9iamVjdCAqc2V0OwpAQCAtNTA3LDcgKzcwNiw3IEBACiAgICAgaWYgKG9wZW5zc2xfb2JqX25hbWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgIC8qIElnbm9yZSBhbGlhc2VkIG5hbWVzLCB0aGV5IHBvbGx1dGUgdGhlIGxpc3QgYW5kIE9wZW5TU0wgYXBwZWFycyB0bwotICAgICAqIGhhdmUgYSBpdHMgb3duIGRlZmluaXRpb24gb2YgYWxpYXMgYXMgdGhlIHJlc3VsdGluZyBsaXN0IHN0aWxsCisgICAgICogaGF2ZSBpdHMgb3duIGRlZmluaXRpb24gb2YgYWxpYXMgYXMgdGhlIHJlc3VsdGluZyBsaXN0IHN0aWxsCiAgICAgICogY29udGFpbnMgZHVwbGljYXRlIGFuZCBhbHRlcm5hdGUgbmFtZXMgZm9yIHNldmVyYWwgYWxnb3JpdGhtcy4gICAgICovCiAgICAgaWYgKG9wZW5zc2xfb2JqX25hbWUtPmFsaWFzKQogICAgICAgICByZXR1cm47CkBAIC01MTcsOSArNzE2LDkgQEAKICAgICAgICAgc3RhdGUtPmVycm9yID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoUHlTZXRfQWRkKHN0YXRlLT5zZXQsIHB5X25hbWUpICE9IDApIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihweV9uYW1lKTsKICAgICAgICAgICAgIHN0YXRlLT5lcnJvciA9IDE7CiAgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHB5X25hbWUpOwogICAgIH0KIH0KIApAQCAtNjEwLDYgKzgwOSwxMCBAQAogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIEVWUF9mdW5jdGlvbnNbXSA9IHsKICAgICB7Im5ldyIsIChQeUNGdW5jdGlvbilFVlBfbmV3LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgRVZQX25ld19fZG9jX199LAorI2lmZGVmIFBZX1BCS0RGMl9ITUFDCisgICAgeyJwYmtkZjJfaG1hYyIsIChQeUNGdW5jdGlvbilwYmtkZjJfaG1hYywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCisgICAgIHBia2RmMl9obWFjX19kb2NfX30sCisjZW5kaWYKICAgICBDT05TVFJVQ1RPUl9NRVRIX0RFRihtZDUpLAogICAgIENPTlNUUlVDVE9SX01FVEhfREVGKHNoYTEpLAogI2lmZGVmIF9PUEVOU1NMX1NVUFBPUlRTX1NIQTIKQEAgLTY0Myw2ICs4NDYsNyBAQAogICAgIFB5T2JqZWN0ICptLCAqb3BlbnNzbF9tZF9tZXRoX25hbWVzOwogCiAgICAgT3BlblNTTF9hZGRfYWxsX2RpZ2VzdHMoKTsKKyAgICBFUlJfbG9hZF9jcnlwdG9fc3RyaW5ncygpOwogCiAgICAgLyogVE9ETyBidWlsZCBFVlBfZnVuY3Rpb25zIG9wZW5zc2xfKiBlbnRyaWVzIGR5bmFtaWNhbGx5IGJhc2VkCiAgICAgICogb24gd2hhdCBoYXNoZXMgYXJlIHN1cHBvcnRlZCByYXRoZXIgdGhhbiBsaXN0aW5nIG1hbnkKQEAgLTY2NywxMCArODcxLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0jaWYgSEFTSF9PQkpfQ09OU1RSVUNUT1IKLSAgICBQeV9JTkNSRUYoJkVWUHR5cGUpOworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmRVZQdHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJIQVNIIiwgKFB5T2JqZWN0ICopJkVWUHR5cGUpOwotI2VuZGlmCiAKICAgICAvKiB0aGVzZSBjb25zdGFudHMgYXJlIHVzZWQgYnkgdGhlIGNvbnZlbmllbmNlIGNvbnN0cnVjdG9ycyAqLwogICAgIElOSVRfQ09OU1RSVUNUT1JfQ09OU1RBTlRTKG1kNSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jIGIvTW9kdWxlcy9faGVhcHFtb2R1bGUuYwppbmRleCBmMzc3ZTljLi4wNDg0NWYxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19oZWFwcW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2hlYXBxbW9kdWxlLmMKQEAgLTExLDEwICsxMSw5IEBACiBzdGF0aWMgaW50CiBfc2lmdGRvd24oUHlMaXN0T2JqZWN0ICpoZWFwLCBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBQeV9zc2l6ZV90IHBvcykKIHsKLSAgICBQeU9iamVjdCAqbmV3aXRlbSwgKnBhcmVudCwgKm9sZGl0ZW07CisgICAgUHlPYmplY3QgKm5ld2l0ZW0sICpwYXJlbnQ7CisgICAgUHlfc3NpemVfdCBwYXJlbnRwb3MsIHNpemU7CiAgICAgaW50IGNtcDsKLSAgICBQeV9zc2l6ZV90IHBhcmVudHBvczsKLSAgICBQeV9zc2l6ZV90IHNpemU7CiAKICAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKGhlYXApKTsKICAgICBzaXplID0gUHlMaXN0X0dFVF9TSVpFKGhlYXApOwpAQCAtMjMsMTAzICsyMiw3NSBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgbmV3aXRlbSA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpOwotICAgIFB5X0lOQ1JFRihuZXdpdGVtKTsKICAgICAvKiBGb2xsb3cgdGhlIHBhdGggdG8gdGhlIHJvb3QsIG1vdmluZyBwYXJlbnRzIGRvd24gdW50aWwgZmluZGluZwogICAgICAgIGEgcGxhY2UgbmV3aXRlbSBmaXRzLiAqLwotICAgIHdoaWxlIChwb3MgPiBzdGFydHBvcyl7CisgICAgbmV3aXRlbSA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpOworICAgIHdoaWxlIChwb3MgPiBzdGFydHBvcykgewogICAgICAgICBwYXJlbnRwb3MgPSAocG9zIC0gMSkgPj4gMTsKICAgICAgICAgcGFyZW50ID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBhcmVudHBvcyk7CiAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChuZXdpdGVtLCBwYXJlbnQsIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcCA9PSAtMSkgewotICAgICAgICAgICAgUHlfREVDUkVGKG5ld2l0ZW0pOworICAgICAgICBpZiAoY21wID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CiAgICAgICAgIGlmIChzaXplICE9IFB5TGlzdF9HRVRfU0laRShoZWFwKSkgewotICAgICAgICAgICAgUHlfREVDUkVGKG5ld2l0ZW0pOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdCBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGlmIChjbXAgPT0gMCkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBQeV9JTkNSRUYocGFyZW50KTsKLSAgICAgICAgb2xkaXRlbSA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpOworICAgICAgICBwYXJlbnQgPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgcGFyZW50cG9zKTsKKyAgICAgICAgbmV3aXRlbSA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBwb3MpOworICAgICAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgcGFyZW50cG9zLCBuZXdpdGVtKTsKICAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIHBvcywgcGFyZW50KTsKLSAgICAgICAgUHlfREVDUkVGKG9sZGl0ZW0pOwogICAgICAgICBwb3MgPSBwYXJlbnRwb3M7Ci0gICAgICAgIGlmIChzaXplICE9IFB5TGlzdF9HRVRfU0laRShoZWFwKSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdCBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CiAgICAgfQotICAgIFB5X0RFQ1JFRihQeUxpc3RfR0VUX0lURU0oaGVhcCwgcG9zKSk7Ci0gICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIHBvcywgbmV3aXRlbSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKIF9zaWZ0dXAoUHlMaXN0T2JqZWN0ICpoZWFwLCBQeV9zc2l6ZV90IHBvcykKIHsKLSAgICBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBlbmRwb3MsIGNoaWxkcG9zLCByaWdodHBvczsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0cG9zLCBlbmRwb3MsIGNoaWxkcG9zLCByaWdodHBvcywgbGltaXQ7CisgICAgUHlPYmplY3QgKnRtcDEsICp0bXAyOwogICAgIGludCBjbXA7Ci0gICAgUHlPYmplY3QgKm5ld2l0ZW0sICp0bXAsICpvbGRpdGVtOwotICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIGFzc2VydChQeUxpc3RfQ2hlY2soaGVhcCkpOwotICAgIHNpemUgPSBQeUxpc3RfR0VUX1NJWkUoaGVhcCk7Ci0gICAgZW5kcG9zID0gc2l6ZTsKKyAgICBlbmRwb3MgPSBQeUxpc3RfR0VUX1NJWkUoaGVhcCk7CiAgICAgc3RhcnRwb3MgPSBwb3M7CiAgICAgaWYgKHBvcyA+PSBlbmRwb3MpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJpbmRleCBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBuZXdpdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcyk7Ci0gICAgUHlfSU5DUkVGKG5ld2l0ZW0pOwogCiAgICAgLyogQnViYmxlIHVwIHRoZSBzbWFsbGVyIGNoaWxkIHVudGlsIGhpdHRpbmcgYSBsZWFmLiAqLwotICAgIGNoaWxkcG9zID0gMipwb3MgKyAxOyAgICAvKiBsZWZ0bW9zdCBjaGlsZCBwb3NpdGlvbiAgKi8KLSAgICB3aGlsZSAoY2hpbGRwb3MgPCBlbmRwb3MpIHsKKyAgICBsaW1pdCA9IGVuZHBvcyAvIDI7ICAgICAgICAgIC8qIHNtYWxsZXN0IHBvcyB0aGF0IGhhcyBubyBjaGlsZCAqLworICAgIHdoaWxlIChwb3MgPCBsaW1pdCkgewogICAgICAgICAvKiBTZXQgY2hpbGRwb3MgdG8gaW5kZXggb2Ygc21hbGxlciBjaGlsZC4gICAqLworICAgICAgICBjaGlsZHBvcyA9IDIqcG9zICsgMTsgICAgLyogbGVmdG1vc3QgY2hpbGQgcG9zaXRpb24gICovCiAgICAgICAgIHJpZ2h0cG9zID0gY2hpbGRwb3MgKyAxOwogICAgICAgICBpZiAocmlnaHRwb3MgPCBlbmRwb3MpIHsKICAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgKICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX0lURU0oaGVhcCwgY2hpbGRwb3MpLAogICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfSVRFTShoZWFwLCByaWdodHBvcyksCiAgICAgICAgICAgICAgICAgUHlfTFQpOwotICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdpdGVtKTsKKyAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNtcCA9PSAwKQogICAgICAgICAgICAgICAgIGNoaWxkcG9zID0gcmlnaHRwb3M7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHNpemUgIT0gUHlMaXN0X0dFVF9TSVpFKGhlYXApKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYobmV3aXRlbSk7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoZW5kcG9zICE9IFB5TGlzdF9HRVRfU0laRShoZWFwKSkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIC8qIE1vdmUgdGhlIHNtYWxsZXIgY2hpbGQgdXAuICovCi0gICAgICAgIHRtcCA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBjaGlsZHBvcyk7Ci0gICAgICAgIFB5X0lOQ1JFRih0bXApOwotICAgICAgICBvbGRpdGVtID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcyk7Ci0gICAgICAgIFB5TGlzdF9TRVRfSVRFTShoZWFwLCBwb3MsIHRtcCk7Ci0gICAgICAgIFB5X0RFQ1JFRihvbGRpdGVtKTsKKyAgICAgICAgdG1wMSA9IFB5TGlzdF9HRVRfSVRFTShoZWFwLCBjaGlsZHBvcyk7CisgICAgICAgIHRtcDIgPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgcG9zKTsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIGNoaWxkcG9zLCB0bXAyKTsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGhlYXAsIHBvcywgdG1wMSk7CiAgICAgICAgIHBvcyA9IGNoaWxkcG9zOwotICAgICAgICBjaGlsZHBvcyA9IDIqcG9zICsgMTsKLSAgICAgICAgaWYgKHNpemUgIT0gUHlMaXN0X0dFVF9TSVpFKGhlYXApKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0IGNoYW5nZWQgc2l6ZSBkdXJpbmcgaXRlcmF0aW9uIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KICAgICB9Ci0KLSAgICAvKiBUaGUgbGVhZiBhdCBwb3MgaXMgZW1wdHkgbm93LiAgUHV0IG5ld2l0ZW0gdGhlcmUsIGFuZCBidWJibGUKLSAgICAgICBpdCB1cCB0byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZSAoYnkgc2lmdGluZyBpdHMgcGFyZW50cyBkb3duKS4gKi8KLSAgICBQeV9ERUNSRUYoUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcykpOwotICAgIFB5TGlzdF9TRVRfSVRFTShoZWFwLCBwb3MsIG5ld2l0ZW0pOworICAgIC8qIEJ1YmJsZSBpdCB1cCB0byBpdHMgZmluYWwgcmVzdGluZyBwbGFjZSAoYnkgc2lmdGluZyBpdHMgcGFyZW50cyBkb3duKS4gKi8KICAgICByZXR1cm4gX3NpZnRkb3duKGhlYXAsIHN0YXJ0cG9zLCBwb3MpOwogfQogCkBAIC0xNjgsNyArMTM5LDEwIEBACiAKICAgICBsYXN0ZWx0ID0gUHlMaXN0X0dFVF9JVEVNKGhlYXAsIG4tMSkgOwogICAgIFB5X0lOQ1JFRihsYXN0ZWx0KTsKLSAgICBQeUxpc3RfU2V0U2xpY2UoaGVhcCwgbi0xLCBuLCBOVUxMKTsKKyAgICBpZiAoUHlMaXN0X1NldFNsaWNlKGhlYXAsIG4tMSwgbiwgTlVMTCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihsYXN0ZWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIG4tLTsKIAogICAgIGlmICghbikKQEAgLTI1MCw2ICsyMjQsMTEgQEAKICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgfQogCisgICAgaWYgKFB5TGlzdF9HRVRfU0laRShoZWFwKSA9PSAwKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiaW5kZXggb3V0IG9mIHJhbmdlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIHJldHVybml0ZW0gPSBQeUxpc3RfR0VUX0lURU0oaGVhcCwgMCk7CiAgICAgUHlfSU5DUkVGKGl0ZW0pOwogICAgIFB5TGlzdF9TRVRfSVRFTShoZWFwLCAwLCBpdGVtKTsKQEAgLTQxNiw3ICszOTUsNyBAQAogc3RhdGljIGludAogX3NpZnR1cG1heChQeUxpc3RPYmplY3QgKmhlYXAsIFB5X3NzaXplX3QgcG9zKQogewotICAgIFB5X3NzaXplX3Qgc3RhcnRwb3MsIGVuZHBvcywgY2hpbGRwb3MsIHJpZ2h0cG9zOworICAgIFB5X3NzaXplX3Qgc3RhcnRwb3MsIGVuZHBvcywgY2hpbGRwb3MsIHJpZ2h0cG9zLCBsaW1pdDsKICAgICBpbnQgY21wOwogICAgIFB5T2JqZWN0ICpuZXdpdGVtLCAqdG1wOwogCkBAIC00MzEsOSArNDEwLDEwIEBACiAgICAgUHlfSU5DUkVGKG5ld2l0ZW0pOwogCiAgICAgLyogQnViYmxlIHVwIHRoZSBzbWFsbGVyIGNoaWxkIHVudGlsIGhpdHRpbmcgYSBsZWFmLiAqLwotICAgIGNoaWxkcG9zID0gMipwb3MgKyAxOyAgICAvKiBsZWZ0bW9zdCBjaGlsZCBwb3NpdGlvbiAgKi8KLSAgICB3aGlsZSAoY2hpbGRwb3MgPCBlbmRwb3MpIHsKKyAgICBsaW1pdCA9IGVuZHBvcyAvIDI7ICAgICAgICAgIC8qIHNtYWxsZXN0IHBvcyB0aGF0IGhhcyBubyBjaGlsZCAqLworICAgIHdoaWxlIChwb3MgPCBsaW1pdCkgewogICAgICAgICAvKiBTZXQgY2hpbGRwb3MgdG8gaW5kZXggb2Ygc21hbGxlciBjaGlsZC4gICAqLworICAgICAgICBjaGlsZHBvcyA9IDIqcG9zICsgMTsgICAgLyogbGVmdG1vc3QgY2hpbGQgcG9zaXRpb24gICovCiAgICAgICAgIHJpZ2h0cG9zID0gY2hpbGRwb3MgKyAxOwogICAgICAgICBpZiAocmlnaHRwb3MgPCBlbmRwb3MpIHsKICAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCgKQEAgLTQ1Myw3ICs0MzMsNiBAQAogICAgICAgICBQeV9ERUNSRUYoUHlMaXN0X0dFVF9JVEVNKGhlYXAsIHBvcykpOwogICAgICAgICBQeUxpc3RfU0VUX0lURU0oaGVhcCwgcG9zLCB0bXApOwogICAgICAgICBwb3MgPSBjaGlsZHBvczsKLSAgICAgICAgY2hpbGRwb3MgPSAyKnBvcyArIDE7CiAgICAgfQogCiAgICAgLyogVGhlIGxlYWYgYXQgcG9zIGlzIGVtcHR5IG5vdy4gIFB1dCBuZXdpdGVtIHRoZXJlLCBhbmQgYnViYmxlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuYyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCmluZGV4IDRhN2U3NTguLjQ0MTE2ZDggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCisrKyBiL01vZHVsZXMvX2lvL19pb21vZHVsZS5jCkBAIC03NSw3ICs3NSw3IEBACiAiQW5vdGhlciBJT0Jhc2Ugc3ViY2xhc3MsIFRleHRJT0Jhc2UsIGRlYWxzIHdpdGggdGhlIGVuY29kaW5nIGFuZCBkZWNvZGluZ1xuIgogIm9mIHN0cmVhbXMgaW50byB0ZXh0LiBUZXh0SU9XcmFwcGVyLCB3aGljaCBleHRlbmRzIGl0LCBpcyBhIGJ1ZmZlcmVkIHRleHRcbiIKICJpbnRlcmZhY2UgdG8gYSBidWZmZXJlZCByYXcgc3RyZWFtIChgQnVmZmVyZWRJT0Jhc2VgKS4gRmluYWxseSwgU3RyaW5nSU9cbiIKLSJpcyBhIGluLW1lbW9yeSBzdHJlYW0gZm9yIHRleHQuXG4iCisiaXMgYW4gaW4tbWVtb3J5IHN0cmVhbSBmb3IgdGV4dC5cbiIKICJcbiIKICJBcmd1bWVudCBuYW1lcyBhcmUgbm90IHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24sIGFuZCBvbmx5IHRoZSBhcmd1bWVudHNcbiIKICJvZiBvcGVuKCkgYXJlIGludGVuZGVkIHRvIGJlIHVzZWQgYXMga2V5d29yZCBhcmd1bWVudHMuXG4iCkBAIC0xMjYsOCArMTI2LDcgQEAKICInYicgICAgICAgYmluYXJ5IG1vZGVcbiIKICIndCcgICAgICAgdGV4dCBtb2RlIChkZWZhdWx0KVxuIgogIicrJyAgICAgICBvcGVuIGEgZGlzayBmaWxlIGZvciB1cGRhdGluZyAocmVhZGluZyBhbmQgd3JpdGluZylcbiIKLSInVScgICAgICAgdW5pdmVyc2FsIG5ld2xpbmUgbW9kZSAoZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OyB1bm5lZWRlZFxuIgotIiAgICAgICAgICBmb3IgbmV3IGNvZGUpXG4iCisiJ1UnICAgICAgIHVuaXZlcnNhbCBuZXdsaW5lIG1vZGUgKGRlcHJlY2F0ZWQpXG4iCiAiPT09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIgogIlxuIgogIlRoZSBkZWZhdWx0IG1vZGUgaXMgJ3J0JyAob3BlbiBmb3IgcmVhZGluZyB0ZXh0KS4gRm9yIGJpbmFyeSByYW5kb21cbiIKQEAgLTE0Myw2ICsxNDIsMTAgQEAKICJyZXR1cm5lZCBhcyBzdHJpbmdzLCB0aGUgYnl0ZXMgaGF2aW5nIGJlZW4gZmlyc3QgZGVjb2RlZCB1c2luZyBhXG4iCiAicGxhdGZvcm0tZGVwZW5kZW50IGVuY29kaW5nIG9yIHVzaW5nIHRoZSBzcGVjaWZpZWQgZW5jb2RpbmcgaWYgZ2l2ZW4uXG4iCiAiXG4iCisiJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCByYWlzZSBhbiBleGNlcHRpb24gaW4gZnV0dXJlIHZlcnNpb25zXG4iCisib2YgUHl0aG9uLiAgSXQgaGFzIG5vIGVmZmVjdCBpbiBQeXRob24gMy4gIFVzZSBuZXdsaW5lIHRvIGNvbnRyb2xcbiIKKyJ1bml2ZXJzYWwgbmV3bGluZXMgbW9kZS5cbiIKKyJcbiIKICJidWZmZXJpbmcgaXMgYW4gb3B0aW9uYWwgaW50ZWdlciB1c2VkIHRvIHNldCB0aGUgYnVmZmVyaW5nIHBvbGljeS5cbiIKICJQYXNzIDAgdG8gc3dpdGNoIGJ1ZmZlcmluZyBvZmYgKG9ubHkgYWxsb3dlZCBpbiBiaW5hcnkgbW9kZSksIDEgdG8gc2VsZWN0XG4iCiAibGluZSBidWZmZXJpbmcgKG9ubHkgdXNhYmxlIGluIHRleHQgbW9kZSksIGFuZCBhbiBpbnRlZ2VyID4gMSB0byBpbmRpY2F0ZVxuIgpAQCAtMjMyLDExICsyMzUsMTIgQEAKICAgICBjaGFyIHJhd21vZGVbNl0sICptOwogICAgIGludCBsaW5lX2J1ZmZlcmluZywgaXNhdHR5OwogCi0gICAgUHlPYmplY3QgKnJhdywgKm1vZGVvYmogPSBOVUxMLCAqYnVmZmVyID0gTlVMTCwgKndyYXBwZXIgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyYXcsICptb2Rlb2JqID0gTlVMTCwgKmJ1ZmZlciwgKndyYXBwZXIsICpyZXN1bHQgPSBOVUxMOwogCiAgICAgX1B5X0lERU5USUZJRVIoaXNhdHR5KTsKICAgICBfUHlfSURFTlRJRklFUihmaWxlbm8pOwogICAgIF9QeV9JREVOVElGSUVSKG1vZGUpOworICAgIF9QeV9JREVOVElGSUVSKGNsb3NlKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfHNpenp6aU86b3BlbiIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZSwgJm1vZGUsICZidWZmZXJpbmcsCkBAIC0zMTAsNiArMzE0LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgdXNlIFUgYW5kIHdyaXRpbmcgbW9kZSBhdCBvbmNlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJ1UnIG1vZGUgaXMgZGVwcmVjYXRlZCIsIDEpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZWFkaW5nID0gMTsKICAgICB9CiAKQEAgLTM0OCw2ICszNTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT3NpTyIsIGZpbGUsIHJhd21vZGUsIGNsb3NlZmQsIG9wZW5lcik7CiAgICAgaWYgKHJhdyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXN1bHQgPSByYXc7CiAKICAgICBtb2Rlb2JqID0gUHlVbmljb2RlX0Zyb21TdHJpbmcobW9kZSk7CiAgICAgaWYgKG1vZGVvYmogPT0gTlVMTCkKQEAgLTQwNiw3ICs0MTQsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgUHlfREVDUkVGKG1vZGVvYmopOwotICAgICAgICByZXR1cm4gcmF3OworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8qIHdyYXBzIGludG8gYSBidWZmZXJlZCBmaWxlICovCkBAIC00MjcsMTUgKzQzNSwxNiBAQAogCiAgICAgICAgIGJ1ZmZlciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihCdWZmZXJlZF9jbGFzcywgIk9pIiwgcmF3LCBidWZmZXJpbmcpOwogICAgIH0KLSAgICBQeV9DTEVBUihyYXcpOwogICAgIGlmIChidWZmZXIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKKyAgICByZXN1bHQgPSBidWZmZXI7CisgICAgUHlfREVDUkVGKHJhdyk7CiAKIAogICAgIC8qIGlmIGJpbmFyeSwgcmV0dXJucyB0aGUgYnVmZmVyZWQgZmlsZSAqLwogICAgIGlmIChiaW5hcnkpIHsKICAgICAgICAgUHlfREVDUkVGKG1vZGVvYmopOwotICAgICAgICByZXR1cm4gYnVmZmVyOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIC8qIHdyYXBzIGludG8gYSBUZXh0SU9XcmFwcGVyICovCkBAIC00NDQsMjAgKzQ1MywyNiBAQAogCQkJCSAgICBidWZmZXIsCiAJCQkJICAgIGVuY29kaW5nLCBlcnJvcnMsIG5ld2xpbmUsCiAJCQkJICAgIGxpbmVfYnVmZmVyaW5nKTsKLSAgICBQeV9DTEVBUihidWZmZXIpOwogICAgIGlmICh3cmFwcGVyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgcmVzdWx0ID0gd3JhcHBlcjsKKyAgICBQeV9ERUNSRUYoYnVmZmVyKTsKIAogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHdyYXBwZXIsICZQeUlkX21vZGUsIG1vZGVvYmopIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKICAgICBQeV9ERUNSRUYobW9kZW9iaik7Ci0gICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHJlc3VsdDsKIAogICBlcnJvcjoKLSAgICBQeV9YREVDUkVGKHJhdyk7CisgICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpleGMsICp2YWwsICp0YiwgKmNsb3NlX3Jlc3VsdDsKKyAgICAgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbCwgJnRiKTsKKyAgICAgICAgY2xvc2VfcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChyZXN1bHQsICZQeUlkX2Nsb3NlLCBOVUxMKTsKKyAgICAgICAgX1B5RXJyX0NoYWluRXhjZXB0aW9ucyhleGMsIHZhbCwgdGIpOworICAgICAgICBQeV9YREVDUkVGKGNsb3NlX3Jlc3VsdCk7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KICAgICBQeV9YREVDUkVGKG1vZGVvYmopOwotICAgIFB5X1hERUNSRUYoYnVmZmVyKTsKLSAgICBQeV9YREVDUkVGKHdyYXBwZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogDApAQCAtNTMzLDYgKzU0OCw0NSBAQAogfQogCiAKK19QeUlPX1N0YXRlICoKK19QeUlPX2dldF9tb2R1bGVfc3RhdGUodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqbW9kID0gUHlTdGF0ZV9GaW5kTW9kdWxlKCZfUHlJT19Nb2R1bGUpOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZTsKKyAgICBpZiAobW9kID09IE5VTEwgfHwgKHN0YXRlID0gSU9fTU9EX1NUQVRFKG1vZCkpID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZmluZCBpbyBtb2R1bGUgc3RhdGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIihpbnRlcnByZXRlciBzaHV0ZG93bj8pIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK1B5T2JqZWN0ICoKK19QeUlPX2dldF9sb2NhbGVfbW9kdWxlKF9QeUlPX1N0YXRlICpzdGF0ZSkKK3sKKyAgICBQeU9iamVjdCAqbW9kOworICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSAhPSBOVUxMKSB7CisgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYoc3RhdGUtPmxvY2FsZV9tb2R1bGUpKTsKKyAgICAgICAgbW9kID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1Qoc3RhdGUtPmxvY2FsZV9tb2R1bGUpOworICAgICAgICBpZiAobW9kICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihtb2QpOworICAgICAgICAgICAgcmV0dXJuIG1vZDsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUihzdGF0ZS0+bG9jYWxlX21vZHVsZSk7CisgICAgfQorICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiX2Jvb3Rsb2NhbGUiKTsKKyAgICBpZiAobW9kID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0YXRlLT5sb2NhbGVfbW9kdWxlID0gUHlXZWFrcmVmX05ld1JlZihtb2QsIE5VTEwpOworICAgIGlmIChzdGF0ZS0+bG9jYWxlX21vZHVsZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihtb2QpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIG1vZDsKK30KKworCiBzdGF0aWMgaW50CiBpb21vZHVsZV90cmF2ZXJzZShQeU9iamVjdCAqbW9kLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykgewogICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX01PRF9TVEFURShtb2QpOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vX2lvbW9kdWxlLmggYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaAppbmRleCAwZmU5MGEzLi4xNDBmMjYwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9faW9tb2R1bGUuaAorKysgYi9Nb2R1bGVzL19pby9faW9tb2R1bGUuaApAQCAtNTIsNyArNTIsMTIgQEAKICAgIHdoaWNoIGNhbiBiZSBzYWZlbHkgcHV0IGFzaWRlIHVudGlsIGFub3RoZXIgc2VhcmNoLgogCiAgICBOT1RFOiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgYGVuZGAgbXVzdCBwb2ludCB0byBhIE5VTCBjaGFyYWN0ZXIgKCdcMCcpLgotICAgT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gd2lsbCBzY2FuIGZ1cnRoZXIgYW5kIHJldHVybiBnYXJiYWdlLiAqLworICAgT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gd2lsbCBzY2FuIGZ1cnRoZXIgYW5kIHJldHVybiBnYXJiYWdlLgorCisgICBUaGVyZSBhcmUgdGhyZWUgbW9kZXMsIGluIG9yZGVyIG9mIHByaW9yaXR5OgorICAgKiB0cmFuc2xhdGVkOiBPbmx5IGZpbmQgXG4gKGFzc3VtZSBuZXdsaW5lcyBhbHJlYWR5IHRyYW5zbGF0ZWQpCisgICAqIHVuaXZlcnNhbDogVXNlIHVuaXZlcnNhbCBuZXdsaW5lcyBhbGdvcml0aG0KKyAgICogT3RoZXJ3aXNlLCB0aGUgbGluZSBlbmRpbmcgaXMgc3BlY2lmaWVkIGJ5IHJlYWRubCwgYSBzdHIgb2JqZWN0ICovCiBleHRlcm4gUHlfc3NpemVfdCBfUHlJT19maW5kX2xpbmVfZW5kaW5nKAogICAgIGludCB0cmFuc2xhdGVkLCBpbnQgdW5pdmVyc2FsLCBQeU9iamVjdCAqcmVhZG5sLAogICAgIGludCBraW5kLCBjaGFyICpzdGFydCwgY2hhciAqZW5kLCBQeV9zc2l6ZV90ICpjb25zdW1lZCk7CkBAIC03Nyw3ICs4Miw3IEBACiAgICBsb25nIHdpdGggIiVsbGQiIGV2ZW4gd2hlbiBib3RoIGxvbmcgYW5kIGxvbmcgbG9uZyBoYXZlIHRoZSBzYW1lCiAgICBwcmVjaXNpb24uICovCiAKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogCiAvKiBXaW5kb3dzIHVzZXMgbG9uZyBsb25nIGZvciBvZmZzZXRzICovCiB0eXBlZGVmIFBZX0xPTkdfTE9ORyBQeV9vZmZfdDsKQEAgLTEzNSw3ICsxNDAsMTAgQEAKIH0gX1B5SU9fU3RhdGU7CiAKICNkZWZpbmUgSU9fTU9EX1NUQVRFKG1vZCkgKChfUHlJT19TdGF0ZSAqKVB5TW9kdWxlX0dldFN0YXRlKG1vZCkpCi0jZGVmaW5lIElPX1NUQVRFIElPX01PRF9TVEFURShQeVN0YXRlX0ZpbmRNb2R1bGUoJl9QeUlPX01vZHVsZSkpCisjZGVmaW5lIElPX1NUQVRFKCkgX1B5SU9fZ2V0X21vZHVsZV9zdGF0ZSgpCisKK2V4dGVybiBfUHlJT19TdGF0ZSAqX1B5SU9fZ2V0X21vZHVsZV9zdGF0ZSh2b2lkKTsKK2V4dGVybiBQeU9iamVjdCAqX1B5SU9fZ2V0X2xvY2FsZV9tb2R1bGUoX1B5SU9fU3RhdGUgKik7CiAKIGV4dGVybiBQeU9iamVjdCAqX1B5SU9fc3RyX2Nsb3NlOwogZXh0ZXJuIFB5T2JqZWN0ICpfUHlJT19zdHJfY2xvc2VkOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jIGIvTW9kdWxlcy9faW8vYnVmZmVyZWRpby5jCmluZGV4IGVhMDMwMmIuLjM2NWJiODUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2J1ZmZlcmVkaW8uYworKysgYi9Nb2R1bGVzL19pby9idWZmZXJlZGlvLmMKQEAgLTUyLDcgKzUyLDYgQEAKICAgICBQeV9idWZmZXIgYnVmOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0ICpkYXRhOwotICAgIF9QeV9JREVOVElGSUVSKHJlYWQpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ3KjpyZWFkaW50byIsICZidWYpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTIsNyArOTEsOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1ZmZlcmVkaW9iYXNlX3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKElPX1NUQVRFLT51bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFKCk7CisgICAgaWYgKHN0YXRlICE9IE5VTEwpCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdGF0ZS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLCBtZXNzYWdlKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTkwLDcgKzE5MSw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRpb2Jhc2VfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMjA5LDYgKzIxMSwxNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogCkBAIC0yMjAsNyArMjMyLDcgQEAKICAgICBpbnQgZGV0YWNoZWQ7CiAgICAgaW50IHJlYWRhYmxlOwogICAgIGludCB3cml0YWJsZTsKLSAgICBpbnQgZGVhbGxvY2F0aW5nOworICAgIGNoYXIgZmluYWxpemluZzsKIAogICAgIC8qIFRydWUgaWYgdGhpcyBpcyBhIHZhbmlsbGEgQnVmZmVyZWQgb2JqZWN0IChyYXRoZXIgdGhhbiBhIHVzZXIgZGVyaXZlZAogICAgICAgIGNsYXNzKSAqYW5kKiB0aGUgcmF3IHN0cmVhbSBpcyBhIHZhbmlsbGEgRmlsZUlPIG9iamVjdC4gKi8KQEAgLTI4OCwxNCArMzAwLDM1IEBACiBzdGF0aWMgaW50CiBfZW50ZXJfYnVmZmVyZWRfYnVzeShidWZmZXJlZCAqc2VsZikKIHsKKyAgICBpbnQgcmVsYXhfbG9ja2luZzsKKyAgICBQeUxvY2tTdGF0dXMgc3Q7CiAgICAgaWYgKHNlbGYtPm93bmVyID09IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgInJlZW50cmFudCBjYWxsIGluc2lkZSAlUiIsIHNlbGYpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgcmVsYXhfbG9ja2luZyA9IChfUHlfRmluYWxpemluZyAhPSBOVUxMKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHNlbGYtPmxvY2ssIDEpOworICAgIGlmICghcmVsYXhfbG9ja2luZykKKyAgICAgICAgc3QgPSBQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+bG9jaywgMSk7CisgICAgZWxzZSB7CisgICAgICAgIC8qIFdoZW4gZmluYWxpemluZywgd2UgZG9uJ3Qgd2FudCBhIGRlYWRsb2NrIHRvIGhhcHBlbiB3aXRoIGRhZW1vbgorICAgICAgICAgKiB0aHJlYWRzIGFicnVwdGx5IHNodXQgZG93biB3aGlsZSB0aGV5IG93bmVkIHRoZSBsb2NrLgorICAgICAgICAgKiBUaGVyZWZvcmUsIG9ubHkgd2FpdCBmb3IgYSBncmFjZSBwZXJpb2QgKDEgcy4pLgorICAgICAgICAgKiBOb3RlIHRoYXQgbm9uLWRhZW1vbiB0aHJlYWRzIGhhdmUgYWxyZWFkeSBleGl0ZWQgaGVyZSwgc28gdGhpcworICAgICAgICAgKiBzaG91bGRuJ3QgYWZmZWN0IGNhcmVmdWxseSB3cml0dGVuIHRocmVhZGVkIEkvTyBjb2RlLgorICAgICAgICAgKi8KKyAgICAgICAgc3QgPSBQeVRocmVhZF9hY3F1aXJlX2xvY2tfdGltZWQoc2VsZi0+bG9jaywgMWU2LCAwKTsKKyAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAocmVsYXhfbG9ja2luZyAmJiBzdCAhPSBQWV9MT0NLX0FDUVVJUkVEKSB7CisgICAgICAgIFB5T2JqZWN0ICptc2dvYmogPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgKKyAgICAgICAgICAgICJjb3VsZCBub3QgYWNxdWlyZSBsb2NrIGZvciAlQSBhdCBpbnRlcnByZXRlciAiCisgICAgICAgICAgICAic2h1dGRvd24sIHBvc3NpYmx5IGR1ZSB0byBkYWVtb24gdGhyZWFkcyIsCisgICAgICAgICAgICAoUHlPYmplY3QgKikgc2VsZik7CisgICAgICAgIGNoYXIgKm1zZyA9IFB5VW5pY29kZV9Bc1VURjgobXNnb2JqKTsKKyAgICAgICAgUHlfRmF0YWxFcnJvcihtc2cpOworICAgIH0KICAgICByZXR1cm4gMTsKIH0KIApAQCAtMzg0LDggKzQxNyw4IEBACiBzdGF0aWMgdm9pZAogYnVmZmVyZWRfZGVhbGxvYyhidWZmZXJlZCAqc2VsZikKIHsKLSAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOwotICAgIGlmIChzZWxmLT5vayAmJiBfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKKyAgICBzZWxmLT5maW5hbGl6aW5nID0gMTsKKyAgICBpZiAoX1B5SU9CYXNlX2ZpbmFsaXplKChQeU9iamVjdCAqKSBzZWxmKSA8IDApCiAgICAgICAgIHJldHVybjsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICBzZWxmLT5vayA9IDA7CkBAIC00MjgsOCArNDYxLDYgQEAKIHN0YXRpYyBpbnQKIGJ1ZmZlcmVkX2NsZWFyKGJ1ZmZlcmVkICpzZWxmKQogewotICAgIGlmIChzZWxmLT5vayAmJiBfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwogICAgIHNlbGYtPm9rID0gMDsKICAgICBQeV9DTEVBUihzZWxmLT5yYXcpOwogICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwpAQCAtNTA4LDcgKzUzOSw3IEBACiAgICAgICAgIGdvdG8gZW5kOwogICAgIH0KIAotICAgIGlmIChzZWxmLT5kZWFsbG9jYXRpbmcpIHsKKyAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICBQeU9iamVjdCAqciA9IGJ1ZmZlcmVkX2RlYWxsb2Nfd2FybihzZWxmLCAoUHlPYmplY3QgKikgc2VsZik7CiAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgUHlfREVDUkVGKHIpOwpAQCAtNTI3LDIwICs1NTgsMTQgQEAKIAogICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYtPnJhdywgX1B5SU9fc3RyX2Nsb3NlLCBOVUxMKTsKIAorICAgIGlmIChzZWxmLT5idWZmZXIpIHsKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWZmZXIpOworICAgICAgICBzZWxmLT5idWZmZXIgPSBOVUxMOworICAgIH0KKwogICAgIGlmIChleGMgIT0gTlVMTCkgewotICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7Ci0gICAgICAgICAgICBQeUVycl9SZXN0b3JlKGV4YywgdmFsLCB0Yik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdmFsMjsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihleGMpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih0Yik7Ci0gICAgICAgICAgICBQeUVycl9GZXRjaCgmZXhjLCAmdmFsMiwgJnRiKTsKLSAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjLCAmdmFsMiwgJnRiKTsKLSAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldENvbnRleHQodmFsMiwgdmFsKTsKLSAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwyLCB0Yik7Ci0gICAgICAgIH0KKyAgICAgICAgX1B5RXJyX0NoYWluRXhjZXB0aW9ucyhleGMsIHZhbCwgdGIpOworICAgICAgICBQeV9DTEVBUihyZXMpOwogICAgIH0KIAogZW5kOgpAQCAtNjU4LDYgKzY4MywxMSBAQAogX3NldF9CbG9ja2luZ0lPRXJyb3IoY2hhciAqbXNnLCBQeV9zc2l6ZV90IHdyaXR0ZW4pCiB7CiAgICAgUHlPYmplY3QgKmVycjsKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIGluIGRlYnVnIG1vZGUsIFB5RXZhbF9FdmFsRnJhbWVFeCgpIGZhaWxzIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yCisgICAgICAgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCB3aGVuIGl0IGlzIGNhbGxlZCAqLworICAgIFB5RXJyX0NsZWFyKCk7CisjZW5kaWYKICAgICBlcnIgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfQmxvY2tpbmdJT0Vycm9yLCAiaXNuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJybm8sIG1zZywgd3JpdHRlbik7CiAgICAgaWYgKGVycikKQEAgLTg1OSw2ICs4ODksOCBAQAogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwogCiAgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZikKKyAgICBDSEVDS19DTE9TRUQoc2VsZiwgInBlZWsgb2YgY2xvc2VkIGZpbGUiKQorCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwZWVrIiwgJm4pKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTkzMyw2ICs5NjUsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgQ0hFQ0tfQ0xPU0VEKHNlbGYsICJyZWFkIG9mIGNsb3NlZCBmaWxlIikKKwogICAgIGlmIChuID09IDApCiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwogCkBAIC0xMzUwLDcgKzEzODUsNyBAQAogCiAgICAgbmFtZW9iaiA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopIHNlbGYsICZQeUlkX25hbWUpOwogICAgIGlmIChuYW1lb2JqID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19FeGNlcHRpb24pKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzM5LDYgKzE3NzQsNyBAQAogCiBzdGF0aWMgUHlNZW1iZXJEZWYgYnVmZmVyZWRyZWFkZXJfbWVtYmVyc1tdID0gewogICAgIHsicmF3IiwgVF9PQkpFQ1QsIG9mZnNldG9mKGJ1ZmZlcmVkLCByYXcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoYnVmZmVyZWQsIGZpbmFsaXppbmcpLCAwfSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTE3NzEsNyArMTgwNyw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRQotICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgLyp0cF9mbGFncyovCiAgICAgYnVmZmVyZWRyZWFkZXJfZG9jLCAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpYnVmZmVyZWRfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpYnVmZmVyZWRfY2xlYXIsICAgIC8qIHRwX2NsZWFyICovCkBAIC0xNzkwLDYgKzE4MjYsMTYgQEAKICAgICAoaW5pdHByb2MpYnVmZmVyZWRyZWFkZXJfaW5pdCwgLyogdHBfaW5pdCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hbGxvYyAqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAvKiB0cF9uZXcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZnJlZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pc19nYyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tcm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FjaGUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZmluYWxpemUgKi8KIH07CiAMCiAKQEAgLTIxMjAsNiArMjE2Niw3IEBACiAKIHN0YXRpYyBQeU1lbWJlckRlZiBidWZmZXJlZHdyaXRlcl9tZW1iZXJzW10gPSB7CiAgICAgeyJyYXciLCBUX09CSkVDVCwgb2Zmc2V0b2YoYnVmZmVyZWQsIHJhdyksIFJFQURPTkxZfSwKKyAgICB7Il9maW5hbGl6aW5nIiwgVF9CT09MLCBvZmZzZXRvZihidWZmZXJlZCwgZmluYWxpemluZyksIDB9LAogICAgIHtOVUxMfQogfTsKIApAQCAtMjE1Miw3ICsyMTk5LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKnRwX2ZsYWdzKi8KICAgICBidWZmZXJlZHdyaXRlcl9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZF90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlidWZmZXJlZF9jbGVhciwgICAgLyogdHBfY2xlYXIgKi8KQEAgLTIxNzEsNiArMjIxOCwxNiBAQAogICAgIChpbml0cHJvYylidWZmZXJlZHdyaXRlcl9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAwKIApAQCAtMjMzNCwxMiArMjM5MSwxOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1ZmZlcmVkcndwYWlyX2Nsb3NlKHJ3cGFpciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlPYmplY3QgKmV4YyA9IE5VTEwsICp2YWwsICp0YjsKICAgICBQeU9iamVjdCAqcmV0ID0gX2ZvcndhcmRfY2FsbChzZWxmLT53cml0ZXIsICZQeUlkX2Nsb3NlLCBhcmdzKTsKICAgICBpZiAocmV0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0RFQ1JFRihyZXQpOwotCi0gICAgcmV0dXJuIF9mb3J3YXJkX2NhbGwoc2VsZi0+cmVhZGVyLCAmUHlJZF9jbG9zZSwgYXJncyk7CisgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwsICZ0Yik7CisgICAgZWxzZQorICAgICAgICBQeV9ERUNSRUYocmV0KTsKKyAgICByZXQgPSBfZm9yd2FyZF9jYWxsKHNlbGYtPnJlYWRlciwgJlB5SWRfY2xvc2UsIGFyZ3MpOworICAgIGlmIChleGMgIT0gTlVMTCkgeworICAgICAgICBfUHlFcnJfQ2hhaW5FeGNlcHRpb25zKGV4YywgdmFsLCB0Yik7CisgICAgICAgIFB5X0NMRUFSKHJldCk7CisgICAgfQorICAgIHJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDEzLDcgKzI0NzYsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyogdHBfZmxhZ3MgKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgLyogdHBfZmxhZ3MgKi8KICAgICBidWZmZXJlZHJ3cGFpcl9kb2MsICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylidWZmZXJlZHJ3cGFpcl90cmF2ZXJzZSwgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSlidWZmZXJlZHJ3cGFpcl9jbGVhciwgLyogdHBfY2xlYXIgKi8KQEAgLTI0MzIsNiArMjQ5NSwxNiBAQAogICAgIChpbml0cHJvYylidWZmZXJlZHJ3cGFpcl9pbml0LCAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgUHlUeXBlX0dlbmVyaWNOZXcsICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAwKIApAQCAtMjUxOSw2ICsyNTkyLDcgQEAKIAogc3RhdGljIFB5TWVtYmVyRGVmIGJ1ZmZlcmVkcmFuZG9tX21lbWJlcnNbXSA9IHsKICAgICB7InJhdyIsIFRfT0JKRUNULCBvZmZzZXRvZihidWZmZXJlZCwgcmF3KSwgUkVBRE9OTFl9LAorICAgIHsiX2ZpbmFsaXppbmciLCBUX0JPT0wsIG9mZnNldG9mKGJ1ZmZlcmVkLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0yNTUxLDcgKzI2MjUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgLyp0cF9mbGFncyovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgIC8qdHBfZmxhZ3MqLwogICAgIGJ1ZmZlcmVkcmFuZG9tX2RvYywgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWJ1ZmZlcmVkX3RyYXZlcnNlLCAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWJ1ZmZlcmVkX2NsZWFyLCAgICAvKiB0cF9jbGVhciAqLwpAQCAtMjU3MCw0ICsyNjQ0LDE0IEBACiAgICAgKGluaXRwcm9jKWJ1ZmZlcmVkcmFuZG9tX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vYnl0ZXNpby5jIGIvTW9kdWxlcy9faW8vYnl0ZXNpby5jCmluZGV4IDU0ODQwYmIuLmI1NWFiNzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL2J5dGVzaW8uYworKysgYi9Nb2R1bGVzL19pby9ieXRlc2lvLmMKQEAgLTI1OCwxMCArMjU4LDEwIEBACiB9CiAKIFB5RG9jX1NUUlZBUihyZWFkX2RvYywKLSJyZWFkKFtzaXplXSkgLT4gcmVhZCBhdCBtb3N0IHNpemUgYnl0ZXMsIHJldHVybmVkIGFzIGEgc3RyaW5nLlxuIgorInJlYWQoW3NpemVdKSAtPiByZWFkIGF0IG1vc3Qgc2l6ZSBieXRlcywgcmV0dXJuZWQgYXMgYSBieXRlcyBvYmplY3QuXG4iCiAiXG4iCiAiSWYgdGhlIHNpemUgYXJndW1lbnQgaXMgbmVnYXRpdmUsIHJlYWQgdW50aWwgRU9GIGlzIHJlYWNoZWQuXG4iCi0iUmV0dXJuIGFuIGVtcHR5IHN0cmluZyBhdCBFT0YuIik7CisiUmV0dXJuIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBhdCBFT0YuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc2lvX3JlYWQoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCkBAIC0zMDcsMTAgKzMwNywxMCBAQAogCiAKIFB5RG9jX1NUUlZBUihyZWFkMV9kb2MsCi0icmVhZDEoc2l6ZSkgLT4gcmVhZCBhdCBtb3N0IHNpemUgYnl0ZXMsIHJldHVybmVkIGFzIGEgc3RyaW5nLlxuIgorInJlYWQxKHNpemUpIC0+IHJlYWQgYXQgbW9zdCBzaXplIGJ5dGVzLCByZXR1cm5lZCBhcyBhIGJ5dGVzIG9iamVjdC5cbiIKICJcbiIKICJJZiB0aGUgc2l6ZSBhcmd1bWVudCBpcyBuZWdhdGl2ZSBvciBvbWl0dGVkLCByZWFkIHVudGlsIEVPRiBpcyByZWFjaGVkLlxuIgotIlJldHVybiBhbiBlbXB0eSBzdHJpbmcgYXQgRU9GLiIpOworIlJldHVybiBhbiBlbXB0eSBieXRlcyBvYmplY3QgYXQgRU9GLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNpb19yZWFkMShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqbikKQEAgLTMyNiwxMSArMzI2LDExIEBACiB9CiAKIFB5RG9jX1NUUlZBUihyZWFkbGluZV9kb2MsCi0icmVhZGxpbmUoW3NpemVdKSAtPiBuZXh0IGxpbmUgZnJvbSB0aGUgZmlsZSwgYXMgYSBzdHJpbmcuXG4iCisicmVhZGxpbmUoW3NpemVdKSAtPiBuZXh0IGxpbmUgZnJvbSB0aGUgZmlsZSwgYXMgYSBieXRlcyBvYmplY3QuXG4iCiAiXG4iCiAiUmV0YWluIG5ld2xpbmUuICBBIG5vbi1uZWdhdGl2ZSBzaXplIGFyZ3VtZW50IGxpbWl0cyB0aGUgbWF4aW11bVxuIgogIm51bWJlciBvZiBieXRlcyB0byByZXR1cm4gKGFuIGluY29tcGxldGUgbGluZSBtYXkgYmUgcmV0dXJuZWQgdGhlbikuXG4iCi0iUmV0dXJuIGFuIGVtcHR5IHN0cmluZyBhdCBFT0YuXG4iKTsKKyJSZXR1cm4gYW4gZW1wdHkgYnl0ZXMgb2JqZWN0IGF0IEVPRi5cbiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNpb19yZWFkbGluZShieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTQzNywxNyArNDM3LDE4IEBACiAiaXMgc2V0IG5vdCB0byBibG9jayBhcyBoYXMgbm8gZGF0YSB0byByZWFkLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNpb19yZWFkaW50byhieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYnVmZmVyKQorYnl0ZXNpb19yZWFkaW50byhieXRlc2lvICpzZWxmLCBQeU9iamVjdCAqYXJnKQogewotICAgIHZvaWQgKnJhd19idWZmZXI7CisgICAgUHlfYnVmZmVyIGJ1ZmZlcjsKICAgICBQeV9zc2l6ZV90IGxlbiwgbjsKIAogICAgIENIRUNLX0NMT1NFRChzZWxmKTsKIAotICAgIGlmIChQeU9iamVjdF9Bc1dyaXRlQnVmZmVyKGJ1ZmZlciwgJnJhd19idWZmZXIsICZsZW4pID09IC0xKQorICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAidyoiLCAmYnVmZmVyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBhZGp1c3QgaW52YWxpZCBzaXplcyAqLworICAgIGxlbiA9IGJ1ZmZlci5sZW47CiAgICAgbiA9IHNlbGYtPnN0cmluZ19zaXplIC0gc2VsZi0+cG9zOwogICAgIGlmIChsZW4gPiBuKSB7CiAgICAgICAgIGxlbiA9IG47CkBAIC00NTUsMTAgKzQ1NiwxMSBAQAogICAgICAgICAgICAgbGVuID0gMDsKICAgICB9CiAKLSAgICBtZW1jcHkocmF3X2J1ZmZlciwgc2VsZi0+YnVmICsgc2VsZi0+cG9zLCBsZW4pOworICAgIG1lbWNweShidWZmZXIuYnVmLCBzZWxmLT5idWYgKyBzZWxmLT5wb3MsIGxlbik7CiAgICAgYXNzZXJ0KHNlbGYtPnBvcyArIGxlbiA8IFBZX1NTSVpFX1RfTUFYKTsKICAgICBhc3NlcnQobGVuID49IDApOwogICAgIHNlbGYtPnBvcyArPSBsZW47CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKIAogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QobGVuKTsKIH0KQEAgLTUyOCw3ICs1MzAsNyBAQAogfQogCiBQeURvY19TVFJWQVIoc2Vla19kb2MsCi0ic2Vlayhwb3MsIHdoZW5jZT0wKSAtPiBpbnQuICBDaGFuZ2Ugc3RyZWFtIHBvc2l0aW9uLlxuIgorInNlZWsocG9zWywgd2hlbmNlXSkgLT4gaW50LiAgQ2hhbmdlIHN0cmVhbSBwb3NpdGlvbi5cbiIKICJcbiIKICJTZWVrIHRvIGJ5dGUgb2Zmc2V0IHBvcyByZWxhdGl2ZSB0byBwb3NpdGlvbiBpbmRpY2F0ZWQgYnkgd2hlbmNlOlxuIgogIiAgICAgMCAgU3RhcnQgb2Ygc3RyZWFtICh0aGUgZGVmYXVsdCkuICBwb3Mgc2hvdWxkIGJlID49IDA7XG4iCkBAIC02MTMsMTEgKzYxNSwxMSBAQAogfQogCiBQeURvY19TVFJWQVIod3JpdGVsaW5lc19kb2MsCi0id3JpdGVsaW5lcyhzZXF1ZW5jZV9vZl9zdHJpbmdzKSAtPiBOb25lLiAgV3JpdGUgc3RyaW5ncyB0byB0aGUgZmlsZS5cbiIKKyJ3cml0ZWxpbmVzKGxpbmVzKSAtPiBOb25lLiAgV3JpdGUgYnl0ZXMgb2JqZWN0cyB0byB0aGUgZmlsZS5cbiIKICJcbiIKLSJOb3RlIHRoYXQgbmV3bGluZXMgYXJlIG5vdCBhZGRlZC4gIFRoZSBzZXF1ZW5jZSBjYW4gYmUgYW55IGl0ZXJhYmxlXG4iCi0ib2JqZWN0IHByb2R1Y2luZyBzdHJpbmdzLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyB3cml0ZSgpIGZvclxuIgotImVhY2ggc3RyaW5nLiIpOworIk5vdGUgdGhhdCBuZXdsaW5lcyBhcmUgbm90IGFkZGVkLiAgVGhlIGFyZ3VtZW50IGNhbiBiZSBhbnkgaXRlcmFibGVcbiIKKyJvYmplY3QgcHJvZHVjaW5nIGJ5dGVzIG9iamVjdHMuIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIHdyaXRlKCkgZm9yXG4iCisiZWFjaCBieXRlcyBvYmplY3QuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc2lvX3dyaXRlbGluZXMoYnl0ZXNpbyAqc2VsZiwgUHlPYmplY3QgKnYpCkBAIC02NTUsNiArNjU3LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc2lvX2Nsb3NlKGJ5dGVzaW8gKnNlbGYpCiB7CisgICAgQ0hFQ0tfRVhQT1JUUyhzZWxmKTsKICAgICBpZiAoc2VsZi0+YnVmICE9IE5VTEwpIHsKICAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWYpOwogICAgICAgICBzZWxmLT5idWYgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vZmlsZWlvLmMgYi9Nb2R1bGVzL19pby9maWxlaW8uYwppbmRleCBmM2NlNzc2Li43NDUwOGE3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9maWxlaW8uYworKysgYi9Nb2R1bGVzL19pby9maWxlaW8uYwpAQCAtNTIsMTMgKzUyLDE1IEBACiAgICAgdW5zaWduZWQgaW50IGFwcGVuZGluZyA6IDE7CiAgICAgc2lnbmVkIGludCBzZWVrYWJsZSA6IDI7IC8qIC0xIG1lYW5zIHVua25vd24gKi8KICAgICB1bnNpZ25lZCBpbnQgY2xvc2VmZCA6IDE7Ci0gICAgdW5zaWduZWQgaW50IGRlYWxsb2NhdGluZzogMTsKKyAgICBjaGFyIGZpbmFsaXppbmc7CiAgICAgUHlPYmplY3QgKndlYWtyZWZsaXN0OwogICAgIFB5T2JqZWN0ICpkaWN0OwogfSBmaWxlaW87CiAKIFB5VHlwZU9iamVjdCBQeUZpbGVJT19UeXBlOwogCitfUHlfSURFTlRJRklFUihuYW1lKTsKKwogI2RlZmluZSBQeUZpbGVJT19DaGVjayhvcCkgKFB5T2JqZWN0X1R5cGVDaGVjaygob3ApLCAmUHlGaWxlSU9fVHlwZSkpCiAKIGludApAQCAtMTI0LDI0ICsxMjYsMzEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBmaWxlaW9fY2xvc2UoZmlsZWlvICpzZWxmKQogeworICAgIFB5T2JqZWN0ICpyZXM7CisgICAgUHlPYmplY3QgKmV4YywgKnZhbCwgKnRiOworICAgIGludCByYzsKICAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKSZQeVJhd0lPQmFzZV9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfY2xvc2UsICJPIiwgc2VsZik7CiAgICAgaWYgKCFzZWxmLT5jbG9zZWZkKSB7CiAgICAgICAgIHNlbGYtPmZkID0gLTE7Ci0gICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KLSAgICBpZiAoc2VsZi0+ZGVhbGxvY2F0aW5nKSB7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICBQeUVycl9GZXRjaCgmZXhjLCAmdmFsLCAmdGIpOworICAgIGlmIChzZWxmLT5maW5hbGl6aW5nKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyID0gZmlsZWlvX2RlYWxsb2Nfd2FybihzZWxmLCAoUHlPYmplY3QgKikgc2VsZik7CiAgICAgICAgIGlmIChyKQogICAgICAgICAgICAgUHlfREVDUkVGKHIpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgIH0KLSAgICBlcnJubyA9IGludGVybmFsX2Nsb3NlKHNlbGYpOwotICAgIGlmIChlcnJubyA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KikmUHlSYXdJT0Jhc2VfVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9jbG9zZSwgIk8iLCBzZWxmKTsKKyAgICByYyA9IGludGVybmFsX2Nsb3NlKHNlbGYpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgX1B5RXJyX0NoYWluRXhjZXB0aW9ucyhleGMsIHZhbCwgdGIpOworICAgIGlmIChyYyA8IDApCisgICAgICAgIFB5X0NMRUFSKHJlcyk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIwNCw2ICsyMTMsOSBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZkZWYgT19DTE9FWEVDCitleHRlcm4gaW50IF9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZW5kaWYKIAogc3RhdGljIGludAogZmlsZWlvX2luaXQoUHlPYmplY3QgKm9zZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC0yMjMsNiArMjM1LDExIEBACiAgICAgaW50IGZkID0gLTE7CiAgICAgaW50IGNsb3NlZmQgPSAxOwogICAgIGludCBmZF9pc19vd24gPSAwOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyNlbGlmICFkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgaW50ICphdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKIAogICAgIGFzc2VydChQeUZpbGVJT19DaGVjayhvc2VsZikpOwogICAgIGlmIChzZWxmLT5mZCA+PSAwKSB7CkBAIC0yNTAsNyArMjY3LDcgQEAKICAgICBpZiAoZmQgPCAwKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5lZ2F0aXZlIGZpbGVkZXNjcmlwdG9yIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZ2F0aXZlIGZpbGUgZGVzY3JpcHRvciIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0yNTgsMTUgKzI3NSwxNCBAQAogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobmFtZW9iaikpIHsKLSAgICAgICAgaW50IHJ2ID0gX1B5VW5pY29kZV9IYXNOVUxDaGFycyhuYW1lb2JqKTsKLSAgICAgICAgaWYgKHJ2KSB7Ci0gICAgICAgICAgICBpZiAocnYgIT0gLTEpCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImVtYmVkZGVkIE5VTCBjaGFyYWN0ZXIiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICB3aWRlbmFtZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGUobmFtZW9iaik7CisgICAgICAgIFB5X3NzaXplX3QgbGVuZ3RoOworICAgICAgICB3aWRlbmFtZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKG5hbWVvYmosICZsZW5ndGgpOwogICAgICAgICBpZiAod2lkZW5hbWUgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHdjc2xlbih3aWRlbmFtZSkgIT0gbGVuZ3RoKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiZW1iZWRkZWQgTlVMIGNoYXJhY3RlciIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfSBlbHNlCiAjZW5kaWYKICAgICBpZiAoZmQgPCAwKQpAQCAtMzQzLDYgKzM1OSwxMiBAQAogICAgIGZsYWdzIHw9IE9fQklOQVJZOwogI2VuZGlmCiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgZmxhZ3MgfD0gT19OT0lOSEVSSVQ7CisjZWxpZiBkZWZpbmVkKE9fQ0xPRVhFQykKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZW5kaWYKKwogICAgIGlmIChmZCA+PSAwKSB7CiAgICAgICAgIGlmIChjaGVja19mZChmZCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzY2LDEwICszODgsMTggQEAKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgogICAgICAgICAgICAgICAgIHNlbGYtPmZkID0gb3BlbihuYW1lLCBmbGFncywgMDY2Nik7CisKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqZmRvYmogPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlbmVyLCAiT2kiLCBuYW1lb2JqLCBmbGFncyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZmRvYmo7CisKKyNpZm5kZWYgTVNfV0lORE9XUworICAgICAgICAgICAgLyogdGhlIG9wZW5lciBtYXkgY2xlYXIgdGhlIGF0b21pYyBmbGFnICovCisgICAgICAgICAgICBhdG9taWNfZmxhZ193b3JrcyA9IE5VTEw7CisjZW5kaWYKKworICAgICAgICAgICAgZmRvYmogPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24ob3BlbmVyLCAiT2kiLCBuYW1lb2JqLCBmbGFncyk7CiAgICAgICAgICAgICBpZiAoZmRvYmogPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2soZmRvYmopKSB7CkBAIC0zODgsMTQgKzQxOCwxNCBAQAogCiAgICAgICAgIGZkX2lzX293biA9IDE7CiAgICAgICAgIGlmIChzZWxmLT5mZCA8IDApIHsKLSNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgICAgICBpZiAod2lkZW5hbWUgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfSU9FcnJvciwgbmFtZW9iaik7Ci0gICAgICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgbmFtZSk7CisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgbmFtZW9iaik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CisKKyNpZm5kZWYgTVNfV0lORE9XUworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzZWxmLT5mZCwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisjZW5kaWYKICAgICB9CiAgICAgaWYgKGRpcmNoZWNrKHNlbGYsIG5hbWVvYmopIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTQwNSw3ICs0MzUsNyBAQAogICAgIF9zZXRtb2RlKHNlbGYtPmZkLCBPX0JJTkFSWSk7CiAjZW5kaWYKIAotICAgIGlmIChQeU9iamVjdF9TZXRBdHRyU3RyaW5nKChQeU9iamVjdCAqKXNlbGYsICJuYW1lIiwgbmFtZW9iaikgPCAwKQorICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKChQeU9iamVjdCAqKXNlbGYsICZQeUlkX25hbWUsIG5hbWVvYmopIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmIChzZWxmLT5hcHBlbmRpbmcpIHsKQEAgLTQ0OSw3ICs0NzksNyBAQAogc3RhdGljIHZvaWQKIGZpbGVpb19kZWFsbG9jKGZpbGVpbyAqc2VsZikKIHsKLSAgICBzZWxmLT5kZWFsbG9jYXRpbmcgPSAxOworICAgIHNlbGYtPmZpbmFsaXppbmcgPSAxOwogICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuOwogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwpAQCAtNDY5LDggKzQ5OSwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGVycl9tb2RlKGNoYXIgKmFjdGlvbikKIHsKLSAgICBQeUVycl9Gb3JtYXQoSU9fU1RBVEUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwKLSAgICAgICAgICAgICAgICAgIkZpbGUgbm90IG9wZW4gZm9yICVzIiwgYWN0aW9uKTsKKyAgICBfUHlJT19TdGF0ZSAqc3RhdGUgPSBJT19TVEFURSgpOworICAgIGlmIChzdGF0ZSAhPSBOVUxMKQorICAgICAgICBQeUVycl9Gb3JtYXQoc3RhdGUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICJGaWxlIG5vdCBvcGVuIGZvciAlcyIsIGFjdGlvbik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTUzNSw3ICs1NjcsNyBAQAogICAgICAgICBsZW4gPSBwYnVmLmxlbjsKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgaWYgKGxlbiA+IElOVF9NQVgpCiAgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOwogICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcGJ1Zi5idWYsIChpbnQpbGVuKTsKQEAgLTU1OCwzMyArNTkwLDI3IEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKIH0KIAorI2lmbmRlZiBIQVZFX0ZTVEFUCisKK3N0YXRpYyBQeU9iamVjdCAqCitmaWxlaW9fcmVhZGFsbChmaWxlaW8gKnNlbGYpCit7CisgICAgX1B5X0lERU5USUZJRVIocmVhZGFsbCk7CisgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KikmUHlSYXdJT0Jhc2VfVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9yZWFkYWxsLCAiTyIsIHNlbGYpOworfQorCisjZWxzZQorCiBzdGF0aWMgc2l6ZV90Ci1uZXdfYnVmZmVyc2l6ZShmaWxlaW8gKnNlbGYsIHNpemVfdCBjdXJyZW50c2l6ZQotI2lmZGVmIEhBVkVfRlNUQVQKLSAgICAgICAgICAgICAgICwgUHlfb2ZmX3QgcG9zLCBQeV9vZmZfdCBlbmQKLSNlbmRpZgotICAgICAgICAgICAgICAgKQorbmV3X2J1ZmZlcnNpemUoZmlsZWlvICpzZWxmLCBzaXplX3QgY3VycmVudHNpemUpCiB7CiAgICAgc2l6ZV90IGFkZGVuZDsKLSNpZmRlZiBIQVZFX0ZTVEFUCi0gICAgaWYgKGVuZCAhPSAoUHlfb2ZmX3QpLTEpIHsKLSAgICAgICAgLyogRmlsZXMgY2xhaW1pbmcgYSBzaXplIHNtYWxsZXIgdGhhbiBTTUFMTENIVU5LIG1heQotICAgICAgICAgICBhY3R1YWxseSBiZSBzdHJlYW1pbmcgcHNldWRvLWZpbGVzLiBJbiB0aGlzIGNhc2UsIHdlCi0gICAgICAgICAgIGFwcGx5IHRoZSBtb3JlIGFnZ3Jlc3NpdmUgYWxnb3JpdGhtIGJlbG93LgotICAgICAgICAqLwotICAgICAgICBpZiAoZW5kID49IFNNQUxMQ0hVTksgJiYgZW5kID49IHBvcyAmJiBwb3MgPj0gMCkgewotICAgICAgICAgICAgLyogQWRkIDEgc28gaWYgdGhlIGZpbGUgd2VyZSB0byBncm93IHdlJ2Qgbm90aWNlLiAqLwotICAgICAgICAgICAgUHlfb2ZmX3QgYnVmc2l6ZSA9IGN1cnJlbnRzaXplICsgZW5kIC0gcG9zICsgMTsKLSAgICAgICAgICAgIGlmIChidWZzaXplIDwgUFlfU1NJWkVfVF9NQVgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIChzaXplX3QpYnVmc2l6ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR1cm4gUFlfU1NJWkVfVF9NQVg7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKKwogICAgIC8qIEV4cGFuZCB0aGUgYnVmZmVyIGJ5IGFuIGFtb3VudCBwcm9wb3J0aW9uYWwgdG8gdGhlIGN1cnJlbnQgc2l6ZSwKICAgICAgICBnaXZpbmcgdXMgYW1vcnRpemVkIGxpbmVhci10aW1lIGJlaGF2aW9yLiAgRm9yIGJpZ2dlciBzaXplcywgdXNlIGEKICAgICAgICBsZXNzLXRoYW4tZG91YmxlIGdyb3d0aCBmYWN0b3IgdG8gYXZvaWQgZXhjZXNzaXZlIGFsbG9jYXRpb24uICovCisgICAgYXNzZXJ0KGN1cnJlbnRzaXplIDw9IFBZX1NTSVpFX1RfTUFYKTsKICAgICBpZiAoY3VycmVudHNpemUgPiA2NTUzNikKICAgICAgICAgYWRkZW5kID0gY3VycmVudHNpemUgPj4gMzsKICAgICBlbHNlCkBAIC01OTgsMjYgKzYyNCwxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19yZWFkYWxsKGZpbGVpbyAqc2VsZikKIHsKLSNpZmRlZiBIQVZFX0ZTVEFUCiAgICAgc3RydWN0IHN0YXQgc3Q7CiAgICAgUHlfb2ZmX3QgcG9zLCBlbmQ7Ci0jZW5kaWYKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIFB5X3NzaXplX3QgdG90YWwgPSAwOworICAgIFB5X3NzaXplX3QgYnl0ZXNfcmVhZCA9IDA7CiAgICAgUHlfc3NpemVfdCBuOwotICAgIHNpemVfdCBuZXdzaXplOworICAgIHNpemVfdCBidWZzaXplOwogCiAgICAgaWYgKHNlbGYtPmZkIDwgMCkKICAgICAgICAgcmV0dXJuIGVycl9jbG9zZWQoKTsKICAgICBpZiAoIV9QeVZlcmlmeV9mZChzZWxmLT5mZCkpCiAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAKLSAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIFNNQUxMQ0hVTkspOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSNpZmRlZiBIQVZFX0ZTVEFUCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBwb3MgPSBfbHNlZWtpNjQoc2VsZi0+ZmQsIDBMLCBTRUVLX0NVUik7CiAjZWxzZQogICAgIHBvcyA9IGxzZWVrKHNlbGYtPmZkLCAwTCwgU0VFS19DVVIpOwpAQCAtNjI2LDQ0ICs2NDUsNDYgQEAKICAgICAgICAgZW5kID0gc3Quc3Rfc2l6ZTsKICAgICBlbHNlCiAgICAgICAgIGVuZCA9IChQeV9vZmZfdCktMTsKLSNlbmRpZgotICAgIHdoaWxlICgxKSB7Ci0jaWZkZWYgSEFWRV9GU1RBVAotICAgICAgICBuZXdzaXplID0gbmV3X2J1ZmZlcnNpemUoc2VsZiwgdG90YWwsIHBvcywgZW5kKTsKLSNlbHNlCi0gICAgICAgIG5ld3NpemUgPSBuZXdfYnVmZmVyc2l6ZShzZWxmLCB0b3RhbCk7Ci0jZW5kaWYKLSAgICAgICAgaWYgKG5ld3NpemUgPiBQWV9TU0laRV9UX01BWCB8fCBuZXdzaXplIDw9IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICJ1bmJvdW5kZWQgcmVhZCByZXR1cm5lZCBtb3JlIGJ5dGVzICIKLSAgICAgICAgICAgICAgICAidGhhbiBhIFB5dGhvbiBzdHJpbmcgY2FuIGhvbGQgIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAKLSAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA8IChQeV9zc2l6ZV90KW5ld3NpemUpIHsKLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgbmV3c2l6ZSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHRvdGFsID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgaWYgKGVuZCA+IDAgJiYgZW5kID49IHBvcyAmJiBwb3MgPj0gMCAmJiBlbmQgLSBwb3MgPCBQWV9TU0laRV9UX01BWCkgeworICAgICAgICAvKiBUaGlzIGlzIHByb2JhYmx5IGEgcmVhbCBmaWxlLCBzbyB3ZSB0cnkgdG8gYWxsb2NhdGUgYQorICAgICAgICAgICBidWZmZXIgb25lIGJ5dGUgbGFyZ2VyIHRoYW4gdGhlIHJlc3Qgb2YgdGhlIGZpbGUuICBJZiB0aGUKKyAgICAgICAgICAgY2FsY3VsYXRpb24gaXMgcmlnaHQgdGhlbiB3ZSBzaG91bGQgZ2V0IEVPRiB3aXRob3V0IGhhdmluZworICAgICAgICAgICB0byBlbmxhcmdlIHRoZSBidWZmZXIuICovCisgICAgICAgIGJ1ZnNpemUgPSAoc2l6ZV90KShlbmQgLSBwb3MgKyAxKTsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZzaXplID0gU01BTExDSFVOSzsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ1ZnNpemUpOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoYnl0ZXNfcmVhZCA+PSAoUHlfc3NpemVfdClidWZzaXplKSB7CisgICAgICAgICAgICBidWZzaXplID0gbmV3X2J1ZmZlcnNpemUoc2VsZiwgYnl0ZXNfcmVhZCk7CisgICAgICAgICAgICBpZiAoYnVmc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIHx8IGJ1ZnNpemUgPD0gMCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ib3VuZGVkIHJlYWQgcmV0dXJuZWQgbW9yZSBieXRlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGFuIGEgUHl0aG9uIGJ5dGVzIG9iamVjdCBjYW4gaG9sZCIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpIDwgKFB5X3NzaXplX3QpYnVmc2l6ZSkgeworICAgICAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgYnVmc2l6ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgbiA9IG5ld3NpemUgLSB0b3RhbDsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisgICAgICAgIG4gPSBidWZzaXplIC0gYnl0ZXNfcmVhZDsKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIGlmIChuID4gSU5UX01BWCkKICAgICAgICAgICAgIG4gPSBJTlRfTUFYOwotICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwKLSAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIHRvdGFsLAotICAgICAgICAgICAgICAgICAoaW50KW4pOworICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIGJ5dGVzX3JlYWQsIChpbnQpbik7CiAjZWxzZQotICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwKLSAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcocmVzdWx0KSArIHRvdGFsLAotICAgICAgICAgICAgICAgICBuKTsKKyAgICAgICAgbiA9IHJlYWQoc2VsZi0+ZmQsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdCkgKyBieXRlc19yZWFkLCBuKTsKICNlbmRpZgogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICBpZiAobiA9PSAwKQpAQCAtNjc2LDkgKzY5Nyw5IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRvdGFsID4gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pIHsKKyAgICAgICAgICAgICAgICBpZiAoYnl0ZXNfcmVhZCA+IDApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgICAgICAgICAgfQpAQCAtNjg2LDIyICs3MDcsMTkgQEAKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIHRvdGFsICs9IG47Ci0jaWZkZWYgSEFWRV9GU1RBVAorICAgICAgICBieXRlc19yZWFkICs9IG47CiAgICAgICAgIHBvcyArPSBuOwotI2VuZGlmCiAgICAgfQogCi0gICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUocmVzdWx0KSA+IHRvdGFsKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdCwgdG90YWwpIDwgMCkgewotICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQganVzdCBpbiBjYXNlICovCi0gICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICBpZiAoUHlCeXRlc19HRVRfU0laRShyZXN1bHQpID4gYnl0ZXNfcmVhZCkgeworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHQsIGJ5dGVzX3JlYWQpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKyNlbmRpZiAvKiBIQVZFX0ZTVEFUICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiBmaWxlaW9fcmVhZChmaWxlaW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNzIyLDcgKzc0MCw3IEBACiAgICAgICAgIHJldHVybiBmaWxlaW9fcmVhZGFsbChzZWxmKTsKICAgICB9CiAKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChzaXplID4gSU5UX01BWCkKICAgICAgICAgc2l6ZSA9IElOVF9NQVg7CiAjZW5kaWYKQEAgLTczNCw3ICs3NTIsNyBAQAogICAgIGlmIChfUHlWZXJpZnlfZmQoc2VsZi0+ZmQpKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgZXJybm8gPSAwOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIG4gPSByZWFkKHNlbGYtPmZkLCBwdHIsIChpbnQpc2l6ZSk7CiAjZWxzZQogICAgICAgICBuID0gcmVhZChzZWxmLT5mZCwgcHRyLCBzaXplKTsKQEAgLTc1NSw3ICs3NzMsNyBAQAogCiAgICAgaWYgKG4gIT0gc2l6ZSkgewogICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZieXRlcywgbikgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOworICAgICAgICAgICAgUHlfQ0xFQVIoYnl0ZXMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODIsNyArODAwLDcgQEAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIGxlbiA9IHBidWYubGVuOwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgIGlmIChsZW4gPiAzMjc2NyAmJiBpc2F0dHkoc2VsZi0+ZmQpKSB7CiAgICAgICAgICAgICAvKiBJc3N1ZSAjMTEzOTU6IHRoZSBXaW5kb3dzIGNvbnNvbGUgcmV0dXJucyBhbiBlcnJvciAoMTI6IG5vdAogICAgICAgICAgICAgICAgZW5vdWdoIHNwYWNlIGVycm9yKSBvbiB3cml0aW5nIGludG8gc3Rkb3V0IGlmIHN0ZG91dCBtb2RlIGlzCkBAIC04NTUsNyArODczLDcgQEAKIAogICAgIGlmIChfUHlWZXJpZnlfZmQoZmQpKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICByZXMgPSBfbHNlZWtpNjQoZmQsIHBvcywgd2hlbmNlKTsKICNlbHNlCiAgICAgICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIHdoZW5jZSk7CkBAIC0xMDI4LDcgKzEwNDYsNiBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZpbGVpb19yZXByKGZpbGVpbyAqc2VsZikKIHsKLSAgICBfUHlfSURFTlRJRklFUihuYW1lKTsKICAgICBQeU9iamVjdCAqbmFtZW9iaiwgKnJlczsKIAogICAgIGlmIChzZWxmLT5mZCA8IDApCkBAIC0xMDc2LDEwICsxMDkzLDEwIEBACiBQeURvY19TVFJWQVIoZmlsZWlvX2RvYywKICJmaWxlKG5hbWU6IHN0clssIG1vZGU6IHN0cl1bLCBvcGVuZXI6IE5vbmVdKSAtPiBmaWxlIElPIG9iamVjdFxuIgogIlxuIgotIk9wZW4gYSBmaWxlLiAgVGhlIG1vZGUgY2FuIGJlICdyJywgJ3cnLCAneCcgb3IgJ2EnIGZvciByZWFkaW5nIChkZWZhdWx0KSxcbiIKKyJPcGVuIGEgZmlsZS4gIFRoZSBtb2RlIGNhbiBiZSAncicgKGRlZmF1bHQpLCAndycsICd4JyBvciAnYScgZm9yIHJlYWRpbmcsXG4iCiAid3JpdGluZywgZXhjbHVzaXZlIGNyZWF0aW9uIG9yIGFwcGVuZGluZy4gIFRoZSBmaWxlIHdpbGwgYmUgY3JlYXRlZCBpZiBpdFxuIgogImRvZXNuJ3QgZXhpc3Qgd2hlbiBvcGVuZWQgZm9yIHdyaXRpbmcgb3IgYXBwZW5kaW5nOyBpdCB3aWxsIGJlIHRydW5jYXRlZFxuIgotIndoZW4gb3BlbmVkIGZvciB3cml0aW5nLiAgQSBgRmlsZUV4aXN0c0Vycm9yYCB3aWxsIGJlIHJhaXNlZCBpZiBpdCBhbHJlYWR5XG4iCisid2hlbiBvcGVuZWQgZm9yIHdyaXRpbmcuICBBIEZpbGVFeGlzdHNFcnJvciB3aWxsIGJlIHJhaXNlZCBpZiBpdCBhbHJlYWR5XG4iCiAiZXhpc3RzIHdoZW4gb3BlbmVkIGZvciBjcmVhdGluZy4gT3BlbmluZyBhIGZpbGUgZm9yIGNyZWF0aW5nIGltcGxpZXNcbiIKICJ3cml0aW5nIHNvIHRoaXMgbW9kZSBiZWhhdmVzIGluIGEgc2ltaWxhciB3YXkgdG8gJ3cnLkFkZCBhICcrJyB0byB0aGUgbW9kZVxuIgogInRvIGFsbG93IHNpbXVsdGFuZW91cyByZWFkaW5nIGFuZCB3cml0aW5nLiBBIGN1c3RvbSBvcGVuZXIgY2FuIGJlIHVzZWQgYnlcbiIKQEAgLTEwOTMsNDYgKzExMTAsNTEgQEAKICJcbiIKICJPbmx5IG1ha2VzIG9uZSBzeXN0ZW0gY2FsbCwgc28gbGVzcyBkYXRhIG1heSBiZSByZXR1cm5lZCB0aGFuIHJlcXVlc3RlZFxuIgogIkluIG5vbi1ibG9ja2luZyBtb2RlLCByZXR1cm5zIE5vbmUgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUuXG4iCi0iT24gZW5kLW9mLWZpbGUsIHJldHVybnMgJycuIik7CisiUmV0dXJuIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBhdCBFT0YuIik7CiAKIFB5RG9jX1NUUlZBUihyZWFkYWxsX2RvYywKICJyZWFkYWxsKCkgLT4gYnl0ZXMuICByZWFkIGFsbCBkYXRhIGZyb20gdGhlIGZpbGUsIHJldHVybmVkIGFzIGJ5dGVzLlxuIgogIlxuIgogIkluIG5vbi1ibG9ja2luZyBtb2RlLCByZXR1cm5zIGFzIG11Y2ggYXMgaXMgaW1tZWRpYXRlbHkgYXZhaWxhYmxlLFxuIgotIm9yIE5vbmUgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUuICBPbiBlbmQtb2YtZmlsZSwgcmV0dXJucyAnJy4iKTsKKyJvciBOb25lIGlmIG5vIGRhdGEgaXMgYXZhaWxhYmxlLiAgUmV0dXJuIGFuIGVtcHR5IGJ5dGVzIG9iamVjdCBhdCBFT0YuIik7CiAKIFB5RG9jX1NUUlZBUih3cml0ZV9kb2MsCiAid3JpdGUoYjogYnl0ZXMpIC0+IGludC4gIFdyaXRlIGJ5dGVzIGIgdG8gZmlsZSwgcmV0dXJuIG51bWJlciB3cml0dGVuLlxuIgogIlxuIgogIk9ubHkgbWFrZXMgb25lIHN5c3RlbSBjYWxsLCBzbyBub3QgYWxsIG9mIHRoZSBkYXRhIG1heSBiZSB3cml0dGVuLlxuIgotIlRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiBpcyByZXR1cm5lZC4iKTsKKyJUaGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gaXMgcmV0dXJuZWQuICBJbiBub24tYmxvY2tpbmcgbW9kZSxcbiIKKyJyZXR1cm5zIE5vbmUgaWYgdGhlIHdyaXRlIHdvdWxkIGJsb2NrLiIKKyk7CiAKIFB5RG9jX1NUUlZBUihmaWxlbm9fZG9jLAotImZpbGVubygpIC0+IGludC4gXCJmaWxlIGRlc2NyaXB0b3JcIi5cbiIKLSJcbiIKLSJUaGlzIGlzIG5lZWRlZCBmb3IgbG93ZXItbGV2ZWwgZmlsZSBpbnRlcmZhY2VzLCBzdWNoIHRoZSBmY250bCBtb2R1bGUuIik7CisiZmlsZW5vKCkgLT4gaW50LiAgUmV0dXJuIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvciAoYW4gaW50ZWdlcikuIik7CiAKIFB5RG9jX1NUUlZBUihzZWVrX2RvYywKLSJzZWVrKG9mZnNldDogaW50Wywgd2hlbmNlOiBpbnRdKSAtPiBOb25lLiAgTW92ZSB0byBuZXcgZmlsZSBwb3NpdGlvbi5cbiIKKyJzZWVrKG9mZnNldDogaW50Wywgd2hlbmNlOiBpbnRdKSAtPiBpbnQuICBNb3ZlIHRvIG5ldyBmaWxlIHBvc2l0aW9uIGFuZFxuIgorInJldHVybiB0aGUgZmlsZSBwb3NpdGlvbi5cbiIKICJcbiIKICJBcmd1bWVudCBvZmZzZXQgaXMgYSBieXRlIGNvdW50LiAgT3B0aW9uYWwgYXJndW1lbnQgd2hlbmNlIGRlZmF1bHRzIHRvXG4iCi0iMCAob2Zmc2V0IGZyb20gc3RhcnQgb2YgZmlsZSwgb2Zmc2V0IHNob3VsZCBiZSA+PSAwKTsgb3RoZXIgdmFsdWVzIGFyZSAxXG4iCi0iKG1vdmUgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiwgcG9zaXRpdmUgb3IgbmVnYXRpdmUpLCBhbmQgMiAobW92ZVxuIgotInJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlLCB1c3VhbGx5IG5lZ2F0aXZlLCBhbHRob3VnaCBtYW55IHBsYXRmb3JtcyBhbGxvd1xuIgotInNlZWtpbmcgYmV5b25kIHRoZSBlbmQgb2YgYSBmaWxlKS4iCisiU0VFS19TRVQgb3IgMCAob2Zmc2V0IGZyb20gc3RhcnQgb2YgZmlsZSwgb2Zmc2V0IHNob3VsZCBiZSA+PSAwKTsgb3RoZXIgdmFsdWVzXG4iCisiYXJlIFNFRUtfQ1VSIG9yIDEgKG1vdmUgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiwgcG9zaXRpdmUgb3IgbmVnYXRpdmUpLFxuIgorImFuZCBTRUVLX0VORCBvciAyIChtb3ZlIHJlbGF0aXZlIHRvIGVuZCBvZiBmaWxlLCB1c3VhbGx5IG5lZ2F0aXZlLCBhbHRob3VnaFxuIgorIm1hbnkgcGxhdGZvcm1zIGFsbG93IHNlZWtpbmcgYmV5b25kIHRoZSBlbmQgb2YgYSBmaWxlKS5cbiIKICJcbiIKICJOb3RlIHRoYXQgbm90IGFsbCBmaWxlIG9iamVjdHMgYXJlIHNlZWthYmxlLiIpOwogCiAjaWZkZWYgSEFWRV9GVFJVTkNBVEUKIFB5RG9jX1NUUlZBUih0cnVuY2F0ZV9kb2MsCi0idHJ1bmNhdGUoW3NpemU6IGludF0pIC0+IE5vbmUuICBUcnVuY2F0ZSB0aGUgZmlsZSB0byBhdCBtb3N0IHNpemUgYnl0ZXMuXG4iCisidHJ1bmNhdGUoW3NpemU6IGludF0pIC0+IGludC4gIFRydW5jYXRlIHRoZSBmaWxlIHRvIGF0IG1vc3Qgc2l6ZSBieXRlc1xuIgorImFuZCByZXR1cm4gdGhlIHRydW5jYXRlZCBzaXplLlxuIgogIlxuIgotIlNpemUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZmlsZSBwb3NpdGlvbiwgYXMgcmV0dXJuZWQgYnkgdGVsbCgpLiIKKyJTaXplIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGZpbGUgcG9zaXRpb24sIGFzIHJldHVybmVkIGJ5IHRlbGwoKS5cbiIKICJUaGUgY3VycmVudCBmaWxlIHBvc2l0aW9uIGlzIGNoYW5nZWQgdG8gdGhlIHZhbHVlIG9mIHNpemUuIik7CiAjZW5kaWYKIAogUHlEb2NfU1RSVkFSKHRlbGxfZG9jLAotInRlbGwoKSAtPiBpbnQuICBDdXJyZW50IGZpbGUgcG9zaXRpb24iKTsKKyJ0ZWxsKCkgLT4gaW50LiAgQ3VycmVudCBmaWxlIHBvc2l0aW9uLlxuIgorIlxuIgorIkNhbiByYWlzZSBPU0Vycm9yIGZvciBub24gc2Vla2FibGUgZmlsZXMuIgorKTsKIAogUHlEb2NfU1RSVkFSKHJlYWRpbnRvX2RvYywKICJyZWFkaW50bygpIC0+IFNhbWUgYXMgUmF3SU9CYXNlLnJlYWRpbnRvKCkuIik7CkBAIC0xMTQxLDEwICsxMTYzLDEwIEBACiAiY2xvc2UoKSAtPiBOb25lLiAgQ2xvc2UgdGhlIGZpbGUuXG4iCiAiXG4iCiAiQSBjbG9zZWQgZmlsZSBjYW5ub3QgYmUgdXNlZCBmb3IgZnVydGhlciBJL08gb3BlcmF0aW9ucy4gIGNsb3NlKCkgbWF5IGJlXG4iCi0iY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHdpdGhvdXQgZXJyb3IuICBDaGFuZ2VzIHRoZSBmaWxlbm8gdG8gLTEuIik7CisiY2FsbGVkIG1vcmUgdGhhbiBvbmNlIHdpdGhvdXQgZXJyb3IuIik7CiAKIFB5RG9jX1NUUlZBUihpc2F0dHlfZG9jLAotImlzYXR0eSgpIC0+IGJvb2wuICBUcnVlIGlmIHRoZSBmaWxlIGlzIGNvbm5lY3RlZCB0byBhIHR0eSBkZXZpY2UuIik7CisiaXNhdHR5KCkgLT4gYm9vbC4gIFRydWUgaWYgdGhlIGZpbGUgaXMgY29ubmVjdGVkIHRvIGEgVFRZIGRldmljZS4iKTsKIAogUHlEb2NfU1RSVkFSKHNlZWthYmxlX2RvYywKICJzZWVrYWJsZSgpIC0+IGJvb2wuICBUcnVlIGlmIGZpbGUgc3VwcG9ydHMgcmFuZG9tLWFjY2Vzcy4iKTsKQEAgLTExOTksMTEgKzEyMjEsMTYgQEAKIHN0YXRpYyBQeUdldFNldERlZiBmaWxlaW9fZ2V0c2V0bGlzdFtdID0gewogICAgIHsiY2xvc2VkIiwgKGdldHRlcilnZXRfY2xvc2VkLCBOVUxMLCAiVHJ1ZSBpZiB0aGUgZmlsZSBpcyBjbG9zZWQifSwKICAgICB7ImNsb3NlZmQiLCAoZ2V0dGVyKWdldF9jbG9zZWZkLCBOVUxMLAotICAgICAgICAiVHJ1ZSBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIHdpbGwgYmUgY2xvc2VkIn0sCisgICAgICAgICJUcnVlIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3Igd2lsbCBiZSBjbG9zZWQgYnkgY2xvc2UoKS4ifSwKICAgICB7Im1vZGUiLCAoZ2V0dGVyKWdldF9tb2RlLCBOVUxMLCAiU3RyaW5nIGdpdmluZyB0aGUgZmlsZSBtb2RlIn0sCiAgICAge05VTEx9LAogfTsKIAorc3RhdGljIFB5TWVtYmVyRGVmIGZpbGVpb19tZW1iZXJzW10gPSB7CisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YoZmlsZWlvLCBmaW5hbGl6aW5nKSwgMH0sCisgICAge05VTEx9Cit9OworCiBQeVR5cGVPYmplY3QgUHlGaWxlSU9fVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKICAgICAiX2lvLkZpbGVJTyIsCkBAIC0xMjI1LDcgKzEyNTIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgICAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MsICAgICAgIC8qIHRwX2ZsYWdzICovCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgICAgICAvKiB0cF9mbGFncyAqLwogICAgIGZpbGVpb19kb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylmaWxlaW9fdHJhdmVyc2UsICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIChpbnF1aXJ5KWZpbGVpb19jbGVhciwgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KQEAgLTEyMzQsNyArMTI2MSw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIGZpbGVpb19tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLworICAgIGZpbGVpb19tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIGZpbGVpb19nZXRzZXRsaXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kaWN0ICovCkBAIC0xMjQ1LDQgKzEyNzIsMTMgQEAKICAgICBQeVR5cGVfR2VuZXJpY0FsbG9jLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgZmlsZWlvX25ldywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3ViY2xhc3NlcyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfdmVyc2lvbl90YWcgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vaW9iYXNlLmMgYi9Nb2R1bGVzL19pby9pb2Jhc2UuYwppbmRleCBlMzg0NzNhLi5lZjA2YjQzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19pby9pb2Jhc2UuYworKysgYi9Nb2R1bGVzL19pby9pb2Jhc2UuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCiAgICAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEkvTyBhYnN0cmFjdCBiYXNlIGNsYXNzZXMgaGllcmFyY2h5CiAgICAgYXMgZGVmaW5lZCBieSBQRVAgMzExNiAtICJOZXcgSS9PIgotICAgIAorCiAgICAgQ2xhc3NlcyBkZWZpbmVkIGhlcmU6IElPQmFzZSwgUmF3SU9CYXNlLgotICAgIAorCiAgICAgV3JpdHRlbiBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYyBhbmQgQW50b2luZSBQaXRyb3UKICovCiAKQEAgLTE5LDcgKzE5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKLSAgICAKKwogICAgIFB5T2JqZWN0ICpkaWN0OwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKIH0gaW9iYXNlOwpAQCAtNDIsOCArNDIsOCBAQAogICAgICJieXRlcy4gYnl0ZWFycmF5cyBhcmUgYWNjZXB0ZWQgdG9vLCBhbmQgaW4gc29tZSBjYXNlcyAoc3VjaCBhc1xuIgogICAgICJyZWFkaW50bykgbmVlZGVkLiBUZXh0IEkvTyBjbGFzc2VzIHdvcmsgd2l0aCBzdHIgZGF0YS5cbiIKICAgICAiXG4iCi0gICAgIk5vdGUgdGhhdCBjYWxsaW5nIGFueSBtZXRob2QgKGV2ZW4gaW5xdWlyaWVzKSBvbiBhIGNsb3NlZCBzdHJlYW0gaXNcbiIKLSAgICAidW5kZWZpbmVkLiBJbXBsZW1lbnRhdGlvbnMgbWF5IHJhaXNlIElPRXJyb3IgaW4gdGhpcyBjYXNlLlxuIgorICAgICJOb3RlIHRoYXQgY2FsbGluZyBhbnkgbWV0aG9kIChleGNlcHQgYWRkaXRpb25hbCBjYWxscyB0byBjbG9zZSgpLFxuIgorICAgICJ3aGljaCBhcmUgaWdub3JlZCkgb24gYSBjbG9zZWQgc3RyZWFtIHNob3VsZCByYWlzZSBhIFZhbHVlRXJyb3IuXG4iCiAgICAgIlxuIgogICAgICJJT0Jhc2UgKGFuZCBpdHMgc3ViY2xhc3Nlcykgc3VwcG9ydCB0aGUgaXRlcmF0b3IgcHJvdG9jb2wsIG1lYW5pbmdcbiIKICAgICAidGhhdCBhbiBJT0Jhc2Ugb2JqZWN0IGNhbiBiZSBpdGVyYXRlZCBvdmVyIHlpZWxkaW5nIHRoZSBsaW5lcyBpbiBhXG4iCkBAIC02MywxMSArNjMsMTUgQEAKICNkZWZpbmUgSVNfQ0xPU0VEKHNlbGYpIFwKICAgICBfUHlPYmplY3RfSGFzQXR0cklkKHNlbGYsICZQeUlkX19fSU9CYXNlX2Nsb3NlZCkKIAorX1B5X0lERU5USUZJRVIocmVhZCk7CisKIC8qIEludGVybmFsIG1ldGhvZHMgKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBpb2Jhc2VfdW5zdXBwb3J0ZWQoY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoSU9fU1RBVEUtPnVuc3VwcG9ydGVkX29wZXJhdGlvbiwgbWVzc2FnZSk7CisgICAgX1B5SU9fU3RhdGUgKnN0YXRlID0gSU9fU1RBVEUoKTsKKyAgICBpZiAoc3RhdGUgIT0gTlVMTCkKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0YXRlLT51bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xODAsNDIgKzE4NCw0NCBAQAogaW9iYXNlX2Nsb3NlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKF9fSU9CYXNlX2Nsb3NlZCk7CiAKICAgICBpZiAoSVNfQ0xPU0VEKHNlbGYpKQogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIAogICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKHNlbGYsIF9QeUlPX3N0cl9mbHVzaCwgTlVMTCk7Ci0gICAgX1B5T2JqZWN0X1NldEF0dHJJZChzZWxmLCAmUHlJZF9fX0lPQmFzZV9jbG9zZWQsIFB5X1RydWUpOwotICAgIGlmIChyZXMgPT0gTlVMTCkgeworCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoc2VsZiwgJlB5SWRfX19JT0Jhc2VfY2xvc2VkLCBQeV9UcnVlKSA8IDApIHsKKyAgICAgICAgUHlfWERFQ1JFRihyZXMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlfWERFQ1JFRihyZXMpOworCisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0RFQ1JFRihyZXMpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAvKiBGaW5hbGl6YXRpb24gYW5kIGdhcmJhZ2UgY29sbGVjdGlvbiBzdXBwb3J0ICovCiAKLWludAotX1B5SU9CYXNlX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQorc3RhdGljIHZvaWQKK2lvYmFzZV9maW5hbGl6ZShQeU9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIFB5T2JqZWN0ICp0cCwgKnYsICp0YjsKLSAgICBpbnQgY2xvc2VkID0gMTsKLSAgICBpbnQgaXNfem9tYmllOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisgICAgaW50IGNsb3NlZDsKKyAgICBfUHlfSURFTlRJRklFUihfZmluYWxpemluZyk7CiAKLSAgICAvKiBJZiBfUHlJT0Jhc2VfZmluYWxpemUoKSBpcyBjYWxsZWQgZnJvbSBhIGRlc3RydWN0b3IsIHdlIG5lZWQgdG8KLSAgICAgICByZXN1cnJlY3QgdGhlIG9iamVjdCBhcyBjYWxsaW5nIGNsb3NlKCkgY2FuIGludm9rZSBhcmJpdHJhcnkgY29kZS4gKi8KLSAgICBpc196b21iaWUgPSAoUHlfUkVGQ05UKHNlbGYpID09IDApOwotICAgIGlmIChpc196b21iaWUpIHsKLSAgICAgICAgKytQeV9SRUZDTlQoc2VsZik7Ci0gICAgfQotICAgIFB5RXJyX0ZldGNoKCZ0cCwgJnYsICZ0Yik7CisgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24sIGlmIGFueS4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKKwogICAgIC8qIElmIGBjbG9zZWRgIGRvZXNuJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgZXZhbHVhdGVkIGFzIGJvb2wsIHRoZW4gdGhlCiAgICAgICAgb2JqZWN0IGlzIHByb2JhYmx5IGluIGFuIHVudXNhYmxlIHN0YXRlLCBzbyBpZ25vcmUuICovCiAgICAgcmVzID0gUHlPYmplY3RfR2V0QXR0cihzZWxmLCBfUHlJT19zdHJfY2xvc2VkKTsKLSAgICBpZiAocmVzID09IE5VTEwpCisgICAgaWYgKHJlcyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGNsb3NlZCA9IC0xOworICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgY2xvc2VkID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CiAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtMjIzLDYgKzIyOSwxMCBAQAogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9CiAgICAgaWYgKGNsb3NlZCA9PSAwKSB7CisgICAgICAgIC8qIFNpZ25hbCBjbG9zZSgpIHRoYXQgaXQgd2FzIGNhbGxlZCBhcyBwYXJ0IG9mIHRoZSBvYmplY3QKKyAgICAgICAgICAgZmluYWxpemF0aW9uIHByb2Nlc3MuICovCisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHNlbGYsICZQeUlkX19maW5hbGl6aW5nLCBQeV9UcnVlKSkKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKChQeU9iamVjdCAqKSBzZWxmLCBfUHlJT19zdHJfY2xvc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgLyogU2lsZW5jaW5nIEkvTyBlcnJvcnMgaXMgYmFkLCBidXQgcHJpbnRpbmcgc3B1cmlvdXMgdHJhY2ViYWNrcyBpcwpAQCAtMjMzLDMxICsyNDMsMjUgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgfQotICAgIFB5RXJyX1Jlc3RvcmUodHAsIHYsIHRiKTsKLSAgICBpZiAoaXNfem9tYmllKSB7Ci0gICAgICAgIGlmICgtLVB5X1JFRkNOVChzZWxmKSAhPSAwKSB7Ci0gICAgICAgICAgICAvKiBUaGUgb2JqZWN0IGxpdmVzIGFnYWluLiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgdGFrZW4gZnJvbQotICAgICAgICAgICAgICAgc2xvdF90cF9kZWwgaW4gdHlwZW9iamVjdC5jLiAqLwotICAgICAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBQeV9SRUZDTlQoc2VsZik7Ci0gICAgICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKHNlbGYpOwotICAgICAgICAgICAgUHlfUkVGQ05UKHNlbGYpID0gcmVmY250OwotICAgICAgICAgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCi0gICAgICAgICAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICAgICAgICAgIF9QeV9ERUNfUkVGVE9UQUw7Ci0gICAgICAgICAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAotICAgICAgICAgICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICAgICAgICAgKiBJZiBDT1VOVF9BTExPQ1MsIHRoZSBvcmlnaW5hbCBkZWNyZWYgYnVtcGVkIHRwX2ZyZWVzLCBhbmQKLSAgICAgICAgICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQotICAgICAgICAgICAgICogdW5kb25lLgotICAgICAgICAgICAgICovCi0jaWZkZWYgQ09VTlRfQUxMT0NTCi0gICAgICAgICAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOwotICAgICAgICAgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7Ci0jZW5kaWYKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorCisgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Cit9CisKK2ludAorX1B5SU9CYXNlX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQoreworICAgIGludCBpc196b21iaWU7CisKKyAgICAvKiBJZiBfUHlJT0Jhc2VfZmluYWxpemUoKSBpcyBjYWxsZWQgZnJvbSBhIGRlc3RydWN0b3IsIHdlIG5lZWQgdG8KKyAgICAgICByZXN1cnJlY3QgdGhlIG9iamVjdCBhcyBjYWxsaW5nIGNsb3NlKCkgY2FuIGludm9rZSBhcmJpdHJhcnkgY29kZS4gKi8KKyAgICBpc196b21iaWUgPSAoUHlfUkVGQ05UKHNlbGYpID09IDApOworICAgIGlmIChpc196b21iaWUpCisgICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2Moc2VsZik7CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXIoc2VsZik7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtMjcwLDggKzI3NCw2IEBACiBzdGF0aWMgaW50CiBpb2Jhc2VfY2xlYXIoaW9iYXNlICpzZWxmKQogewotICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwogICAgIFB5X0NMRUFSKHNlbGYtPmRpY3QpOwogICAgIHJldHVybiAwOwogfQpAQCAtNDU1LDcgKzQ1Nyw2IEBACiAgICAgaW50IGhhc19wZWVrID0gMDsKICAgICBQeU9iamVjdCAqYnVmZmVyLCAqcmVzdWx0OwogICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSAtMTsKLSAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKICAgICBfUHlfSURFTlRJRklFUihwZWVrKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE8mOnJlYWRsaW5lIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbGltaXQpKSB7CkBAIC01MzYsNyArNTM3LDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICBvbGRfc2l6ZSA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKGJ1ZmZlcik7Ci0gICAgICAgIFB5Qnl0ZUFycmF5X1Jlc2l6ZShidWZmZXIsIG9sZF9zaXplICsgUHlCeXRlc19HRVRfU0laRShiKSk7CisgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoYnVmZmVyLCBvbGRfc2l6ZSArIFB5Qnl0ZXNfR0VUX1NJWkUoYikpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGIpOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9CiAgICAgICAgIG1lbWNweShQeUJ5dGVBcnJheV9BU19TVFJJTkcoYnVmZmVyKSArIG9sZF9zaXplLAogICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYiksIFB5Qnl0ZXNfR0VUX1NJWkUoYikpOwogCkBAIC03NDEsNyArNzQ1LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCi0gICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAgIC8qdHBfZmxhZ3MqLworICAgICAgICB8IFB5X1RQRkxBR1NfSEFWRV9HQyB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSwgICAvKnRwX2ZsYWdzKi8KICAgICBpb2Jhc2VfZG9jLCAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgKHRyYXZlcnNlcHJvYylpb2Jhc2VfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpaW9iYXNlX2NsZWFyLCAgICAgIC8qIHRwX2NsZWFyICovCkBAIC03NjAsNiArNzY0LDE2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgKGRlc3RydWN0b3IpaW9iYXNlX2ZpbmFsaXplLCAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogCkBAIC04MzEsMTIgKzg0NSwxMSBAQAogICAgIGludCByOwogICAgIFB5T2JqZWN0ICpjaHVua3MgPSBQeUxpc3RfTmV3KDApOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgCisKICAgICBpZiAoY2h1bmtzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIocmVhZCk7CiAgICAgICAgIFB5T2JqZWN0ICpkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9yZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImkiLCBERUZBVUxUX0JVRkZFUl9TSVpFKTsKICAgICAgICAgaWYgKCFkYXRhKSB7CkBAIC05MDUsNyArOTE4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAvKnRwX2ZsYWdzKi8KICAgICByYXdpb2Jhc2VfZG9jLCAgICAgICAgICAgICAgLyogdHBfZG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC05MjQsNCArOTM3LDE0IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9faW8vc3RyaW5naW8uYyBiL01vZHVsZXMvX2lvL3N0cmluZ2lvLmMKaW5kZXggOWQ3Mzg4NC4uOTVmYjcwMyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9faW8vc3RyaW5naW8uYworKysgYi9Nb2R1bGVzL19pby9zdHJpbmdpby5jCkBAIC03MTEsNyArNzExLDcgQEAKICAgICAvKiBJZiBuZXdsaW5lID09ICIiLCB3ZSBkb24ndCB0cmFuc2xhdGUgYW55dGhpbmcuCiAgICAgICAgSWYgbmV3bGluZSA9PSAiXG4iIG9yIG5ld2xpbmUgPT0gTm9uZSwgd2UgdHJhbnNsYXRlIHRvICJcbiIsIHdoaWNoIGlzCiAgICAgICAgYSBuby1vcC4KLSAgICAgICAoZm9yIG5ld2xpbmUgPT0gTm9uZSwgVGV4dElPV3JhcHBlciB0cmFuc2xhdGVzIHRvIG9zLnNlcGxpbmUsIGJ1dCBpdAorICAgICAgIChmb3IgbmV3bGluZSA9PSBOb25lLCBUZXh0SU9XcmFwcGVyIHRyYW5zbGF0ZXMgdG8gb3MubGluZXNlcCwgYnV0IGl0CiAgICAgICAgaXMgcG9pbnRsZXNzIGZvciBTdHJpbmdJTykKICAgICAqLwogICAgIGlmIChuZXdsaW5lICE9IE5VTEwgJiYgbmV3bGluZVswXSA9PSAnXHInKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19pby90ZXh0aW8uYyBiL01vZHVsZXMvX2lvL3RleHRpby5jCmluZGV4IGU4Zjk5ODQuLjBjMWIxM2UgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2lvL3RleHRpby5jCisrKyBiL01vZHVsZXMvX2lvL3RleHRpby5jCkBAIC00NSw3ICs0NSw5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogX3Vuc3VwcG9ydGVkKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKElPX1NUQVRFLT51bnN1cHBvcnRlZF9vcGVyYXRpb24sIG1lc3NhZ2UpOworICAgIF9QeUlPX1N0YXRlICpzdGF0ZSA9IElPX1NUQVRFKCk7CisgICAgaWYgKHN0YXRlICE9IE5VTEwpCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdGF0ZS0+dW5zdXBwb3J0ZWRfb3BlcmF0aW9uLCBtZXNzYWdlKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTczLDcgKzE3NSw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsICAvKnRwX2ZsYWdzKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFCisgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFLCAgLyp0cF9mbGFncyovCiAgICAgdGV4dGlvYmFzZV9kb2MsICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwpAQCAtMTkyLDYgKzE5NSwxNiBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FsbG9jICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9mcmVlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2lzX2djICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jYWNoZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RlbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF92ZXJzaW9uX3RhZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogCkBAIC02OTEsNyArNzA0LDcgQEAKICAgICBjaGFyIHNlZWthYmxlOwogICAgIGNoYXIgaGFzX3JlYWQxOwogICAgIGNoYXIgdGVsbGluZzsKLSAgICBjaGFyIGRlYWxsb2NhdGluZzsKKyAgICBjaGFyIGZpbmFsaXppbmc7CiAgICAgLyogU3BlY2lhbGl6ZWQgZW5jb2RpbmcgZnVuYyAoc2VlIGJlbG93KSAqLwogICAgIGVuY29kZWZ1bmNfdCBlbmNvZGVmdW5jOwogICAgIC8qIFdoZXRoZXIgb3Igbm90IGl0J3MgdGhlIHN0YXJ0IG9mIHRoZSBzdHJlYW0gKi8KQEAgLTc1OCw3ICs3NzEsNyBAQAogewogICAgIGlmICghc2VsZi0+ZW5jb2Rpbmdfc3RhcnRfb2Zfc3RyZWFtKSB7CiAgICAgICAgIC8qIFNraXAgdGhlIEJPTSBhbmQgdXNlIG5hdGl2ZSBieXRlIG9yZGVyaW5nICovCi0jaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCisjaWYgUFlfQklHX0VORElBTgogICAgICAgICByZXR1cm4gdXRmMTZiZV9lbmNvZGUoc2VsZiwgdGV4dCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gdXRmMTZsZV9lbmNvZGUoc2VsZiwgdGV4dCk7CkBAIC03ODcsNyArODAwLDcgQEAKIHsKICAgICBpZiAoIXNlbGYtPmVuY29kaW5nX3N0YXJ0X29mX3N0cmVhbSkgewogICAgICAgICAvKiBTa2lwIHRoZSBCT00gYW5kIHVzZSBuYXRpdmUgYnl0ZSBvcmRlcmluZyAqLwotI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorI2lmIFBZX0JJR19FTkRJQU4KICAgICAgICAgcmV0dXJuIHV0ZjMyYmVfZW5jb2RlKHNlbGYsIHRleHQpOwogI2Vsc2UKICAgICAgICAgcmV0dXJuIHV0ZjMybGVfZW5jb2RlKHNlbGYsIHRleHQpOwpAQCAtODQxLDcgKzg1NCw3IEBACiAgICAgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBjaGFyICpuZXdsaW5lID0gTlVMTDsKICAgICBpbnQgbGluZV9idWZmZXJpbmcgPSAwLCB3cml0ZV90aHJvdWdoID0gMDsKLSAgICBfUHlJT19TdGF0ZSAqc3RhdGUgPSBJT19TVEFURTsKKyAgICBfUHlJT19TdGF0ZSAqc3RhdGUgPSBOVUxMOwogCiAgICAgUHlPYmplY3QgKnJlczsKICAgICBpbnQgcjsKQEAgLTg4MCw2ICs4OTMsOSBAQAogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIFRyeSBvcy5kZXZpY2VfZW5jb2RpbmcoZmlsZW5vKSAqLwogICAgICAgICBQeU9iamVjdCAqZmlsZW5vOworICAgICAgICBzdGF0ZSA9IElPX1NUQVRFKCk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgZmlsZW5vID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChidWZmZXIsICZQeUlkX2ZpbGVubywgTlVMTCk7CiAgICAgICAgIC8qIElnbm9yZSBvbmx5IEF0dHJpYnV0ZUVycm9yIGFuZCBVbnN1cHBvcnRlZE9wZXJhdGlvbiAqLwogICAgICAgICBpZiAoZmlsZW5vID09IE5VTEwpIHsKQEAgLTkwNiwzNSArOTIyLDI5IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGVuY29kaW5nID09IE5VTEwgJiYgc2VsZi0+ZW5jb2RpbmcgPT0gTlVMTCkgewotICAgICAgICBpZiAoc3RhdGUtPmxvY2FsZV9tb2R1bGUgPT0gTlVMTCkgewotICAgICAgICAgICAgc3RhdGUtPmxvY2FsZV9tb2R1bGUgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImxvY2FsZSIpOwotICAgICAgICAgICAgaWYgKHN0YXRlLT5sb2NhbGVfbW9kdWxlID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBjYXRjaF9JbXBvcnRFcnJvcjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBnb3RvIHVzZV9sb2NhbGU7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgdXNlX2xvY2FsZToKLSAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bG9jYWxlX21vZHVsZSwgJlB5SWRfZ2V0cHJlZmVycmVkZW5jb2RpbmcsICJPIiwgUHlfRmFsc2UpOwotICAgICAgICAgICAgaWYgKHNlbGYtPmVuY29kaW5nID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgY2F0Y2hfSW1wb3J0RXJyb3I6Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgSW1wb3J0aW5nIGxvY2FsZSBjYW4gcmFpc2UgYSBJbXBvcnRFcnJvciBiZWNhdXNlIG9mCi0gICAgICAgICAgICAgICAgIF9mdW5jdG9vbHMsIGFuZCBsb2NhbGUuZ2V0cHJlZmVycmVkZW5jb2RpbmcgY2FuIHJhaXNlIGEKLSAgICAgICAgICAgICAgICAgSW1wb3J0RXJyb3IgaWYgX2xvY2FsZSBpcyBub3QgYXZhaWxhYmxlLiAgVGhlc2Ugd2lsbCBoYXBwZW4KLSAgICAgICAgICAgICAgICAgZHVyaW5nIG1vZHVsZSBidWlsZGluZy4KLSAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0ltcG9ydEVycm9yKSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBzZWxmLT5lbmNvZGluZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJhc2NpaSIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIFB5T2JqZWN0ICpsb2NhbGVfbW9kdWxlID0gX1B5SU9fZ2V0X2xvY2FsZV9tb2R1bGUoc3RhdGUpOworICAgICAgICBpZiAobG9jYWxlX21vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBjYXRjaF9JbXBvcnRFcnJvcjsKKyAgICAgICAgc2VsZi0+ZW5jb2RpbmcgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKAorICAgICAgICAgICAgbG9jYWxlX21vZHVsZSwgJlB5SWRfZ2V0cHJlZmVycmVkZW5jb2RpbmcsICJPIiwgUHlfRmFsc2UpOworICAgICAgICBQeV9ERUNSRUYobG9jYWxlX21vZHVsZSk7CisgICAgICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgICAgY2F0Y2hfSW1wb3J0RXJyb3I6CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgIEltcG9ydGluZyBsb2NhbGUgY2FuIHJhaXNlIGFuIEltcG9ydEVycm9yIGJlY2F1c2Ugb2YKKyAgICAgICAgICAgICBfZnVuY3Rvb2xzLCBhbmQgbG9jYWxlLmdldHByZWZlcnJlZGVuY29kaW5nIGNhbiByYWlzZSBhbgorICAgICAgICAgICAgIEltcG9ydEVycm9yIGlmIF9sb2NhbGUgaXMgbm90IGF2YWlsYWJsZS4gIFRoZXNlIHdpbGwgaGFwcGVuCisgICAgICAgICAgICAgZHVyaW5nIG1vZHVsZSBidWlsZGluZy4KKyAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19JbXBvcnRFcnJvcikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHNlbGYtPmVuY29kaW5nID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoImFzY2lpIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihzZWxmLT5lbmNvZGluZyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYtPmVuY29kaW5nKSkKKyAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKICAgICB9CiAgICAgaWYgKHNlbGYtPmVuY29kaW5nICE9IE5VTEwpIHsKICAgICAgICAgZW5jb2RpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHNlbGYtPmVuY29kaW5nKTsKQEAgLTEwNTEsNyArMTA2MSw3IEBACiAgICAgfQogCiAgICAgLyogRmluaXNoZWQgc29ydGluZyBvdXQgdGhlIGNvZGVjIGRldGFpbHMgKi8KLSAgICBQeV9ERUNSRUYoY29kZWNfaW5mbyk7CisgICAgUHlfQ0xFQVIoY29kZWNfaW5mbyk7CiAKICAgICBzZWxmLT5idWZmZXIgPSBidWZmZXI7CiAgICAgUHlfSU5DUkVGKGJ1ZmZlcik7CkBAIC0xMTIyLDggKzExMzIsNiBAQAogc3RhdGljIGludAogX3RleHRpb3dyYXBwZXJfY2xlYXIodGV4dGlvICpzZWxmKQogewotICAgIGlmIChzZWxmLT5vayAmJiBfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwogICAgIHNlbGYtPm9rID0gMDsKICAgICBQeV9DTEVBUihzZWxmLT5idWZmZXIpOwogICAgIFB5X0NMRUFSKHNlbGYtPmVuY29kaW5nKTsKQEAgLTExNDEsOSArMTE0OSwxMCBAQAogc3RhdGljIHZvaWQKIHRleHRpb3dyYXBwZXJfZGVhbGxvYyh0ZXh0aW8gKnNlbGYpCiB7Ci0gICAgc2VsZi0+ZGVhbGxvY2F0aW5nID0gMTsKLSAgICBpZiAoX3RleHRpb3dyYXBwZXJfY2xlYXIoc2VsZikgPCAwKQorICAgIHNlbGYtPmZpbmFsaXppbmcgPSAxOworICAgIGlmIChfUHlJT0Jhc2VfZmluYWxpemUoKFB5T2JqZWN0ICopIHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuOworICAgIF90ZXh0aW93cmFwcGVyX2NsZWFyKHNlbGYpOwogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIGlmIChzZWxmLT53ZWFrcmVmbGlzdCAhPSBOVUxMKQogICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKXNlbGYpOwpAQCAtMTIxMCwyNSArMTIxOSwyNyBAQAogCiAjZGVmaW5lIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpIFwKICAgICBpZiAoc2VsZi0+b2sgPD0gMCkgeyBcCi0gICAgICAgIGlmIChzZWxmLT5kZXRhY2hlZCkgeyBcCi0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAotICAgICAgICAgICAgICAgICAidW5kZXJseWluZyBidWZmZXIgaGFzIGJlZW4gZGV0YWNoZWQiKTsgXAotICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbiBvbiB1bmluaXRpYWxpemVkIG9iamVjdCIpOyBcCi0gICAgICAgIH0gXAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgIkkvTyBvcGVyYXRpb24gb24gdW5pbml0aWFsaXplZCBvYmplY3QiKTsgXAogICAgICAgICByZXR1cm4gTlVMTDsgXAogICAgIH0KIAotI2RlZmluZSBDSEVDS19JTklUSUFMSVpFRF9JTlQoc2VsZikgXAorI2RlZmluZSBDSEVDS19BVFRBQ0hFRChzZWxmKSBcCisgICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7IFwKKyAgICBpZiAoc2VsZi0+ZGV0YWNoZWQpIHsgXAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgXAorICAgICAgICAgICAgICJ1bmRlcmx5aW5nIGJ1ZmZlciBoYXMgYmVlbiBkZXRhY2hlZCIpOyBcCisgICAgICAgIHJldHVybiBOVUxMOyBcCisgICAgfQorCisjZGVmaW5lIENIRUNLX0FUVEFDSEVEX0lOVChzZWxmKSBcCiAgICAgaWYgKHNlbGYtPm9rIDw9IDApIHsgXAotICAgICAgICBpZiAoc2VsZi0+ZGV0YWNoZWQpIHsgXAotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKLSAgICAgICAgICAgICAgICAgInVuZGVybHlpbmcgYnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkIik7IFwKLSAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCi0gICAgICAgICAgICAgICAgIkkvTyBvcGVyYXRpb24gb24gdW5pbml0aWFsaXplZCBvYmplY3QiKTsgXAotICAgICAgICB9IFwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsIFwKKyAgICAgICAgICAgICJJL08gb3BlcmF0aW9uIG9uIHVuaW5pdGlhbGl6ZWQgb2JqZWN0Iik7IFwKKyAgICAgICAgcmV0dXJuIC0xOyBcCisgICAgfSBlbHNlIGlmIChzZWxmLT5kZXRhY2hlZCkgeyBcCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCBcCisgICAgICAgICAgICAgInVuZGVybHlpbmcgYnVmZmVyIGhhcyBiZWVuIGRldGFjaGVkIik7IFwKICAgICAgICAgcmV0dXJuIC0xOyBcCiAgICAgfQogCkBAIC0xMjM3LDcgKzEyNDgsNyBAQAogdGV4dGlvd3JhcHBlcl9kZXRhY2godGV4dGlvICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpidWZmZXIsICpyZXM7Ci0gICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAgICAgcmVzID0gUHlPYmplY3RfQ2FsbE1ldGhvZE9iakFyZ3MoKFB5T2JqZWN0ICopc2VsZiwgX1B5SU9fc3RyX2ZsdXNoLCBOVUxMKTsKICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTI0NSw3ICsxMjU2LDYgQEAKICAgICBidWZmZXIgPSBzZWxmLT5idWZmZXI7CiAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICBzZWxmLT5kZXRhY2hlZCA9IDE7Ci0gICAgc2VsZi0+b2sgPSAwOwogICAgIHJldHVybiBidWZmZXI7CiB9CiAKQEAgLTEyODgsOSArMTI5OCw5IEBACiAgICAgUHlPYmplY3QgKmI7CiAgICAgUHlfc3NpemVfdCB0ZXh0bGVuOwogICAgIGludCBoYXNsZiA9IDA7Ci0gICAgaW50IG5lZWRmbHVzaCA9IDA7CisgICAgaW50IG5lZWRmbHVzaCA9IDAsIHRleHRfbmVlZGZsdXNoID0gMDsKIAotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOndyaXRlIiwgJnRleHQpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTMyMiw4ICsxMzMyLDggQEAKICAgICB9CiAKICAgICBpZiAoc2VsZi0+d3JpdGVfdGhyb3VnaCkKLSAgICAgICAgbmVlZGZsdXNoID0gMTsKLSAgICBlbHNlIGlmIChzZWxmLT5saW5lX2J1ZmZlcmluZyAmJgorICAgICAgICB0ZXh0X25lZWRmbHVzaCA9IDE7CisgICAgaWYgKHNlbGYtPmxpbmVfYnVmZmVyaW5nICYmCiAgICAgICAgIChoYXNsZiB8fAogICAgICAgICAgUHlVbmljb2RlX0ZpbmRDaGFyKHRleHQsICdccicsIDAsIFB5VW5pY29kZV9HRVRfTEVOR1RIKHRleHQpLCAxKSAhPSAtMSkpCiAgICAgICAgIG5lZWRmbHVzaCA9IDE7CkBAIC0xMzU0LDcgKzEzNjQsOCBAQAogICAgIH0KICAgICBzZWxmLT5wZW5kaW5nX2J5dGVzX2NvdW50ICs9IFB5Qnl0ZXNfR0VUX1NJWkUoYik7CiAgICAgUHlfREVDUkVGKGIpOwotICAgIGlmIChzZWxmLT5wZW5kaW5nX2J5dGVzX2NvdW50ID4gc2VsZi0+Y2h1bmtfc2l6ZSB8fCBuZWVkZmx1c2gpIHsKKyAgICBpZiAoc2VsZi0+cGVuZGluZ19ieXRlc19jb3VudCA+IHNlbGYtPmNodW5rX3NpemUgfHwgbmVlZGZsdXNoIHx8CisgICAgICAgIHRleHRfbmVlZGZsdXNoKSB7CiAgICAgICAgIGlmIChfdGV4dGlvd3JhcHBlcl93cml0ZWZsdXNoKHNlbGYpIDwgMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE1NDYsNyArMTU1Nyw3IEBACiAgICAgUHlfc3NpemVfdCBuID0gLTE7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEwsICpjaHVua3MgPSBOVUxMOwogCi0gICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPJjpyZWFkIiwgJl9QeUlPX0NvbnZlcnRTc2l6ZV90LCAmbikpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTkyMSw3ICsxOTMyLDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IGxpbWl0ID0gLTE7CiAKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxuOnJlYWRsaW5lIiwgJmxpbWl0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xOTQ3LDEwICsxOTU4LDcgQEAKIAogI2RlZmluZSBDT09LSUVfQlVGX0xFTiAgICAgIChzaXplb2YoUHlfb2ZmX3QpICsgMyAqIHNpemVvZihpbnQpICsgc2l6ZW9mKGNoYXIpKQogCi0jaWYgZGVmaW5lZChXT1JEU19CSUdFTkRJQU4pCi0KLSMgZGVmaW5lIElTX0xJVFRMRV9FTkRJQU4gICAwCi0KKyNpZiBQWV9CSUdfRU5ESUFOCiAvKiBXZSB3YW50IHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHN0YXJ0X3BvcyB0byBhbHNvIGJlIHRoZSBsZWFzdAogICAgc2lnbmlmaWNhbnQgYnl0ZSBvZiB0aGUgY29va2llLCB3aGljaCBtZWFucyB0aGF0IGluIGJpZy1lbmRpYW4gbW9kZSB3ZQogICAgbXVzdCBjb3B5IHRoZSBmaWVsZHMgaW4gcmV2ZXJzZSBvcmRlci4gKi8KQEAgLTE5NjIsOSArMTk3MCw2IEBACiAjIGRlZmluZSBPRkZfTkVFRF9FT0YgICAgICAgMAogCiAjZWxzZQotCi0jIGRlZmluZSBJU19MSVRUTEVfRU5ESUFOICAgMQotCiAvKiBMaXR0bGUtZW5kaWFuIG1vZGU6IHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHN0YXJ0X3BvcyB3aWxsCiAgICBuYXR1cmFsbHkgZW5kIHVwIHRoZSBsZWFzdCBzaWduaWZpY2FudCBieXRlIG9mIHRoZSBjb29raWUuICovCiAKQEAgLTE5ODUsNyArMTk5MCw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChfUHlMb25nX0FzQnl0ZUFycmF5KGNvb2tpZUxvbmcsIGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVNfTElUVExFX0VORElBTiwgMCkgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfTElUVExFX0VORElBTiwgMCkgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihjb29raWVMb25nKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTIwMTEsOSArMjAxNiw5IEBACiAgICAgbWVtY3B5KGJ1ZmZlciArIE9GRl9DSEFSU19UT19TS0lQLCAmY29va2llLT5jaGFyc190b19za2lwLCBzaXplb2YoY29va2llLT5jaGFyc190b19za2lwKSk7CiAgICAgbWVtY3B5KGJ1ZmZlciArIE9GRl9ORUVEX0VPRiwgJmNvb2tpZS0+bmVlZF9lb2YsIHNpemVvZihjb29raWUtPm5lZWRfZW9mKSk7CiAKLSAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZUFycmF5KGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIElTX0xJVFRMRV9FTkRJQU4sIDApOworICAgIHJldHVybiBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX0xJVFRMRV9FTkRJQU4sIDApOwogfQotI3VuZGVmIElTX0xJVFRMRV9FTkRJQU4KIAogc3RhdGljIGludAogX3RleHRpb3dyYXBwZXJfZGVjb2Rlcl9zZXRzdGF0ZSh0ZXh0aW8gKnNlbGYsIGNvb2tpZV90eXBlICpjb29raWUpCkBAIC0yMDM3LDExICsyMDQyLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLV90ZXh0aW93cmFwcGVyX2VuY29kZXJfc2V0c3RhdGUodGV4dGlvICpzZWxmLCBjb29raWVfdHlwZSAqY29va2llKQorX3RleHRpb3dyYXBwZXJfZW5jb2Rlcl9yZXNldCh0ZXh0aW8gKnNlbGYsIGludCBzdGFydF9vZl9zdHJlYW0pCiB7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICAvKiBTYW1lIGFzIF90ZXh0aW93cmFwcGVyX2RlY29kZXJfc2V0c3RhdGUoKSBhYm92ZS4gKi8KLSAgICBpZiAoY29va2llLT5zdGFydF9wb3MgPT0gMCAmJiBjb29raWUtPmRlY19mbGFncyA9PSAwKSB7CisgICAgaWYgKHN0YXJ0X29mX3N0cmVhbSkgewogICAgICAgICByZXMgPSBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncyhzZWxmLT5lbmNvZGVyLCBfUHlJT19zdHJfcmVzZXQsIE5VTEwpOwogICAgICAgICBzZWxmLT5lbmNvZGluZ19zdGFydF9vZl9zdHJlYW0gPSAxOwogICAgIH0KQEAgLTIwNTYsNiArMjA2MCwxNCBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitfdGV4dGlvd3JhcHBlcl9lbmNvZGVyX3NldHN0YXRlKHRleHRpbyAqc2VsZiwgY29va2llX3R5cGUgKmNvb2tpZSkKK3sKKyAgICAvKiBTYW1lIGFzIF90ZXh0aW93cmFwcGVyX2RlY29kZXJfc2V0c3RhdGUoKSBhYm92ZS4gKi8KKyAgICByZXR1cm4gX3RleHRpb3dyYXBwZXJfZW5jb2Rlcl9yZXNldCgKKyAgICAgICAgc2VsZiwgY29va2llLT5zdGFydF9wb3MgPT0gMCAmJiBjb29raWUtPmRlY19mbGFncyA9PSAwKTsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfc2Vlayh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtMjA2NSw3ICsyMDc3LDcgQEAKICAgICBQeU9iamVjdCAqcmVzOwogICAgIGludCBjbXA7CiAKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT3xpOnNlZWsiLCAmY29va2llT2JqLCAmd2hlbmNlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMTIzLDcgKzIxMzUsMTcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHJlcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+YnVmZmVyLCAmUHlJZF9zZWVrLCAiaWkiLCAwLCAyKTsKLSAgICAgICAgUHlfWERFQ1JFRihjb29raWVPYmopOworICAgICAgICBQeV9DTEVBUihjb29raWVPYmopOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIGlmIChzZWxmLT5lbmNvZGVyKSB7CisgICAgICAgICAgICAvKiBJZiBzZWVrKCkgPT0gMCwgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiBzdHJlYW0sIG90aGVyd2lzZSBub3QgKi8KKyAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChyZXMsIF9QeUlPX3plcm8sIFB5X0VRKTsKKyAgICAgICAgICAgIGlmIChjbXAgPCAwIHx8IF90ZXh0aW93cmFwcGVyX2VuY29kZXJfcmVzZXQoc2VsZiwgY21wKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICByZXR1cm4gcmVzOwogICAgIH0KICAgICBlbHNlIGlmICh3aGVuY2UgIT0gMCkgewpAQCAtMjI0NSw3ICsyMjY3LDcgQEAKICAgICBQeV9zc2l6ZV90IGRlY19idWZmZXJfbGVuOwogICAgIGludCBkZWNfZmxhZ3M7CiAKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAKICAgICBpZiAoIXNlbGYtPnNlZWthYmxlKSB7CkBAIC0yMzYzLDcgKzIzODUsNyBAQAogCiAgICAgLyogTm90ZSBvdXIgaW5pdGlhbCBzdGFydCBwb2ludC4gKi8KICAgICBjb29raWUuc3RhcnRfcG9zICs9IHNraXBfYnl0ZXM7Ci0gICAgY29va2llLmNoYXJzX3RvX3NraXAgPSBjaGFyc190b19za2lwOworICAgIGNvb2tpZS5jaGFyc190b19za2lwID0gUHlfU0FGRV9ET1dOQ0FTVChjaGFyc190b19za2lwLCBQeV9zc2l6ZV90LCBpbnQpOwogICAgIGlmIChjaGFyc190b19za2lwID09IDApCiAgICAgICAgIGdvdG8gZmluYWxseTsKIApAQCAtMjQzMCwxNCArMjQ1MiwxMCBAQAogICAgIGlmIChzYXZlZF9zdGF0ZSkgewogICAgICAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrOwogICAgICAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKLQogICAgICAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmRlY29kZXIsICZQeUlkX3NldHN0YXRlLCAiKE8pIiwgc2F2ZWRfc3RhdGUpOworICAgICAgICBfUHlFcnJfQ2hhaW5FeGNlcHRpb25zKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOwogICAgICAgICBQeV9ERUNSRUYoc2F2ZWRfc3RhdGUpOwotICAgICAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0KLSAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKKyAgICAgICAgUHlfWERFQ1JFRihyZXMpOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTI0NDgsNyArMjQ2Niw3IEBACiAgICAgUHlPYmplY3QgKnBvcyA9IFB5X05vbmU7CiAgICAgUHlPYmplY3QgKnJlczsKIAotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpCisgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZikKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxPOnRydW5jYXRlIiwgJnBvcykpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMjQ3MSw5ICsyNDg5LDEwIEBACiAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxfaW8uVGV4dElPV3JhcHBlciIpOwogICAgIGlmIChyZXMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICBuYW1lb2JqID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKikgc2VsZiwgJlB5SWRfbmFtZSk7CiAgICAgaWYgKG5hbWVvYmogPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0V4Y2VwdGlvbikpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjQ4OSw3ICsyNTA4LDcgQEAKICAgICB9CiAgICAgbW9kZW9iaiA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopIHNlbGYsICZQeUlkX21vZGUpOwogICAgIGlmIChtb2Rlb2JqID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19FeGNlcHRpb24pKQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBlcnJvcjsKQEAgLTI1MTgsMzUgKzI1MzcsMzUgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0ZXh0aW93cmFwcGVyX2ZpbGVubyh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIENIRUNLX0lOSVRJQUxJWkVEKHNlbGYpOworICAgIENIRUNLX0FUVEFDSEVEKHNlbGYpOwogICAgIHJldHVybiBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHNlbGYtPmJ1ZmZlciwgJlB5SWRfZmlsZW5vLCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfc2Vla2FibGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX3NlZWthYmxlLCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfcmVhZGFibGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX3JlYWRhYmxlLCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfd3JpdGFibGUodGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX3dyaXRhYmxlLCBOVUxMKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfaXNhdHR5KHRleHRpbyAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+YnVmZmVyLCAmUHlJZF9pc2F0dHksIE5VTEwpOwogfQogCkBAIC0yNTYxLDcgKzI1ODAsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHRleHRpb3dyYXBwZXJfZmx1c2godGV4dGlvICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICBDSEVDS19DTE9TRUQoc2VsZik7CiAgICAgc2VsZi0+dGVsbGluZyA9IHNlbGYtPnNlZWthYmxlOwogICAgIGlmIChfdGV4dGlvd3JhcHBlcl93cml0ZWZsdXNoKHNlbGYpIDwgMCkKQEAgLTI1NzQsNyArMjU5Myw3IEBACiB7CiAgICAgUHlPYmplY3QgKnJlczsKICAgICBpbnQgcjsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKIAogICAgIHJlcyA9IHRleHRpb3dyYXBwZXJfY2xvc2VkX2dldChzZWxmLCBOVUxMKTsKICAgICBpZiAocmVzID09IE5VTEwpCkBAIC0yNTg5LDcgKzI2MDgsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlPYmplY3QgKmV4YyA9IE5VTEwsICp2YWwsICp0YjsKLSAgICAgICAgaWYgKHNlbGYtPmRlYWxsb2NhdGluZykgeworICAgICAgICBpZiAoc2VsZi0+ZmluYWxpemluZykgewogICAgICAgICAgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX19kZWFsbG9jX3dhcm4sICJPIiwgc2VsZik7CiAgICAgICAgICAgICBpZiAocmVzKQogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtMjYwNCwxOSArMjYyMyw4IEBACiAKICAgICAgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLT5idWZmZXIsICZQeUlkX2Nsb3NlLCBOVUxMKTsKICAgICAgICAgaWYgKGV4YyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9DTEVBUihyZXMpOwotICAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWwyOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihleGMpOwotICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodGIpOwotICAgICAgICAgICAgICAgIFB5RXJyX0ZldGNoKCZleGMsICZ2YWwyLCAmdGIpOwotICAgICAgICAgICAgICAgIFB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbigmZXhjLCAmdmFsMiwgJnRiKTsKLSAgICAgICAgICAgICAgICBQeUV4Y2VwdGlvbl9TZXRDb250ZXh0KHZhbDIsIHZhbCk7Ci0gICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbDIsIHRiKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9QeUVycl9DaGFpbkV4Y2VwdGlvbnMoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlcyk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CkBAIC0yNjI3LDcgKzI2MzUsNyBAQAogewogICAgIFB5T2JqZWN0ICpsaW5lOwogCi0gICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAKICAgICBzZWxmLT50ZWxsaW5nID0gMDsKICAgICBpZiAoUHlfVFlQRShzZWxmKSA9PSAmUHlUZXh0SU9XcmFwcGVyX1R5cGUpIHsKQEAgLTI2NjMsMTQgKzI2NzEsMTQgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0ZXh0aW93cmFwcGVyX25hbWVfZ2V0KHRleHRpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKIHsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICByZXR1cm4gX1B5T2JqZWN0X0dldEF0dHJJZChzZWxmLT5idWZmZXIsICZQeUlkX25hbWUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogdGV4dGlvd3JhcHBlcl9jbG9zZWRfZ2V0KHRleHRpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKIHsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICByZXR1cm4gUHlPYmplY3RfR2V0QXR0cihzZWxmLT5idWZmZXIsIF9QeUlPX3N0cl9jbG9zZWQpOwogfQogCkBAIC0yNjc4LDcgKzI2ODYsNyBAQAogdGV4dGlvd3JhcHBlcl9uZXdsaW5lc19nZXQodGV4dGlvICpzZWxmLCB2b2lkICpjb250ZXh0KQogewogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgQ0hFQ0tfSU5JVElBTElaRUQoc2VsZik7CisgICAgQ0hFQ0tfQVRUQUNIRUQoc2VsZik7CiAgICAgaWYgKHNlbGYtPmRlY29kZXIgPT0gTlVMTCkKICAgICAgICAgUHlfUkVUVVJOX05PTkU7CiAgICAgcmVzID0gUHlPYmplY3RfR2V0QXR0cihzZWxmLT5kZWNvZGVyLCBfUHlJT19zdHJfbmV3bGluZXMpOwpAQCAtMjcwNCw3ICsyNzEyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0ZXh0aW93cmFwcGVyX2NodW5rX3NpemVfZ2V0KHRleHRpbyAqc2VsZiwgdm9pZCAqY29udGV4dCkKIHsKLSAgICBDSEVDS19JTklUSUFMSVpFRChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRChzZWxmKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHNlbGYtPmNodW5rX3NpemUpOwogfQogCkBAIC0yNzEyLDcgKzI3MjAsNyBAQAogdGV4dGlvd3JhcHBlcl9jaHVua19zaXplX3NldCh0ZXh0aW8gKnNlbGYsIFB5T2JqZWN0ICphcmcsIHZvaWQgKmNvbnRleHQpCiB7CiAgICAgUHlfc3NpemVfdCBuOwotICAgIENIRUNLX0lOSVRJQUxJWkVEX0lOVChzZWxmKTsKKyAgICBDSEVDS19BVFRBQ0hFRF9JTlQoc2VsZik7CiAgICAgbiA9IFB5TnVtYmVyX0FzU3NpemVfdChhcmcsIFB5RXhjX1ZhbHVlRXJyb3IpOwogICAgIGlmIChuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI3NTAsNiArMjc1OCw3IEBACiAgICAgeyJlbmNvZGluZyIsIFRfT0JKRUNULCBvZmZzZXRvZih0ZXh0aW8sIGVuY29kaW5nKSwgUkVBRE9OTFl9LAogICAgIHsiYnVmZmVyIiwgVF9PQkpFQ1QsIG9mZnNldG9mKHRleHRpbywgYnVmZmVyKSwgUkVBRE9OTFl9LAogICAgIHsibGluZV9idWZmZXJpbmciLCBUX0JPT0wsIG9mZnNldG9mKHRleHRpbywgbGluZV9idWZmZXJpbmcpLCBSRUFET05MWX0sCisgICAgeyJfZmluYWxpemluZyIsIFRfQk9PTCwgb2Zmc2V0b2YodGV4dGlvLCBmaW5hbGl6aW5nKSwgMH0sCiAgICAge05VTEx9CiB9OwogCkBAIC0yNzg2LDcgKzI3OTUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUKLSAgICAgICAgICAgIHwgUHlfVFBGTEFHU19IQVZFX0dDLCAvKnRwX2ZsYWdzKi8KKyAgICAgICAgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfCBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsIC8qdHBfZmxhZ3MqLwogICAgIHRleHRpb3dyYXBwZXJfZG9jLCAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKXRleHRpb3dyYXBwZXJfdHJhdmVyc2UsIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpdGV4dGlvd3JhcHBlcl9jbGVhciwgLyogdHBfY2xlYXIgKi8KQEAgLTI4MDUsNCArMjgxNCwxNCBAQAogICAgIChpbml0cHJvYyl0ZXh0aW93cmFwcGVyX2luaXQsIC8qIHRwX2luaXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgLyogdHBfbmV3ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXNfZ2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbXJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3N1YmNsYXNzZXMgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3QgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZpbmFsaXplICovCiB9OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fanNvbi5jIGIvTW9kdWxlcy9fanNvbi5jCmluZGV4IDZkZjA4YjUuLmRkZWQyYzkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX2pzb24uYworKysgYi9Nb2R1bGVzL19qc29uLmMKQEAgLTIsMjAgKzIsNiBAQAogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogI2luY2x1ZGUgImFjY3UuaCIKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA2MDAwMCAmJiAhZGVmaW5lZChQeV9UWVBFKQotI2RlZmluZSBQeV9UWVBFKG9iKSAgICAgKCgoUHlPYmplY3QqKShvYikpLT5vYl90eXBlKQotI2VuZGlmCi0jaWYgUFlfVkVSU0lPTl9IRVggPCAweDAyMDUwMDAwICYmICFkZWZpbmVkKFBZX1NTSVpFX1RfTUlOKQotdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKLSNkZWZpbmUgUFlfU1NJWkVfVF9NQVggSU5UX01BWAotI2RlZmluZSBQWV9TU0laRV9UX01JTiBJTlRfTUlOCi0jZGVmaW5lIFB5SW50X0Zyb21Tc2l6ZV90IFB5SW50X0Zyb21Mb25nCi0jZGVmaW5lIFB5SW50X0FzU3NpemVfdCBQeUludF9Bc0xvbmcKLSNlbmRpZgotI2lmbmRlZiBQeV9JU19GSU5JVEUKLSNkZWZpbmUgUHlfSVNfRklOSVRFKFgpICghUHlfSVNfSU5GSU5JVFkoWCkgJiYgIVB5X0lTX05BTihYKSkKLSNlbmRpZgotCiAjaWZkZWYgX19HTlVDX18KICNkZWZpbmUgVU5VU0VEIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQogI2Vsc2UKQEAgLTEyOSwzMyArMTE1LDE0IEBACiByYWlzZV9lcnJtc2coY2hhciAqbXNnLCBQeU9iamVjdCAqcywgUHlfc3NpemVfdCBlbmQpOwogc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX3N0cmluZyhQeUVuY29kZXJPYmplY3QgKnMsIFB5T2JqZWN0ICpvYmopOwotc3RhdGljIGludAotX2NvbnZlcnRQeUludF9Bc1NzaXplX3QoUHlPYmplY3QgKm8sIFB5X3NzaXplX3QgKnNpemVfcHRyKTsKIHN0YXRpYyBQeU9iamVjdCAqCi1fY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKTsKK2VuY29kZXJfZW5jb2RlX2xvbmcoUHlFbmNvZGVyT2JqZWN0KiBzIFVOVVNFRCwgUHlPYmplY3QgKm9iaik7CiBzdGF0aWMgUHlPYmplY3QgKgogZW5jb2Rlcl9lbmNvZGVfZmxvYXQoUHlFbmNvZGVyT2JqZWN0ICpzLCBQeU9iamVjdCAqb2JqKTsKIAogI2RlZmluZSBTX0NIQVIoYykgKGMgPj0gJyAnICYmIGMgPD0gJ34nICYmIGMgIT0gJ1xcJyAmJiBjICE9ICciJykKICNkZWZpbmUgSVNfV0hJVEVTUEFDRShjKSAoKChjKSA9PSAnICcpIHx8ICgoYykgPT0gJ1x0JykgfHwgKChjKSA9PSAnXG4nKSB8fCAoKGMpID09ICdccicpKQogCi1zdGF0aWMgaW50Ci1fY29udmVydFB5SW50X0FzU3NpemVfdChQeU9iamVjdCAqbywgUHlfc3NpemVfdCAqc2l6ZV9wdHIpCi17Ci0gICAgLyogUHlPYmplY3QgdG8gUHlfc3NpemVfdCBjb252ZXJ0ZXIgKi8KLSAgICAqc2l6ZV9wdHIgPSBQeUxvbmdfQXNTc2l6ZV90KG8pOwotICAgIGlmICgqc2l6ZV9wdHIgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1fY29udmVydFB5SW50X0Zyb21Tc2l6ZV90KFB5X3NzaXplX3QgKnNpemVfcHRyKQotewotICAgIC8qIFB5X3NzaXplX3QgdG8gUHlPYmplY3QgY29udmVydGVyICovCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdCgqc2l6ZV9wdHIpOwotfQotCiBzdGF0aWMgUHlfc3NpemVfdAogYXNjaWlfZXNjYXBlX3VuaWNoYXIoUHlfVUNTNCBjLCB1bnNpZ25lZCBjaGFyICpvdXRwdXQsIFB5X3NzaXplX3QgY2hhcnMpCiB7CkBAIC0xNzQsMTQgKzE0MSwxMyBAQAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaWYgKGMgPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIC8qIFVURi0xNiBzdXJyb2dhdGUgcGFpciAqLwotICAgICAgICAgICAgICAgIFB5X1VDUzQgdiA9IGMgLSAweDEwMDAwOwotICAgICAgICAgICAgICAgIGMgPSAweGQ4MDAgfCAoKHYgPj4gMTApICYgMHgzZmYpOworICAgICAgICAgICAgICAgIFB5X1VDUzQgdiA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoYyk7CiAgICAgICAgICAgICAgICAgb3V0cHV0W2NoYXJzKytdID0gJ3UnOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAxMikgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAgOCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyA+PiAgNCkgJiAweGZdOwotICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9IFB5X2hleGRpZ2l0c1soYyAgICAgICkgJiAweGZdOwotICAgICAgICAgICAgICAgIGMgPSAweGRjMDAgfCAodiAmIDB4M2ZmKTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gMTIpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gIDgpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgPj4gIDQpICYgMHhmXTsKKyAgICAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSBQeV9oZXhkaWdpdHNbKHYgICAgICApICYgMHhmXTsKKyAgICAgICAgICAgICAgICBjID0gUHlfVU5JQ09ERV9MT1dfU1VSUk9HQVRFKGMpOwogICAgICAgICAgICAgICAgIG91dHB1dFtjaGFycysrXSA9ICdcXCc7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBvdXRwdXRbY2hhcnMrK10gPSAndSc7CkBAIC0yNzUsMTMgKzI0MSwyMyBAQAogICAgICAgICBpZiAoZXJybXNnX2ZuID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHB5bXNnID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGVycm1zZ19mbiwgIih6T08mKSIsIG1zZywgcywgX2NvbnZlcnRQeUludF9Gcm9tU3NpemVfdCwgJmVuZCk7CisgICAgcHltc2cgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oZXJybXNnX2ZuLCAiKHpPbikiLCBtc2csIHMsIGVuZCk7CiAgICAgaWYgKHB5bXNnKSB7CiAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19WYWx1ZUVycm9yLCBweW1zZyk7CiAgICAgICAgIFB5X0RFQ1JFRihweW1zZyk7CiAgICAgfQogfQogCitzdGF0aWMgdm9pZAorcmFpc2Vfc3RvcF9pdGVyYXRpb24oUHlfc3NpemVfdCBpZHgpCit7CisgICAgUHlPYmplY3QgKnZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KGlkeCk7CisgICAgaWYgKHZhbHVlICE9IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX1N0b3BJdGVyYXRpb24sIHZhbHVlKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICB9Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiBfYnVpbGRfcnZhbF9pbmRleF90dXBsZShQeU9iamVjdCAqcnZhbCwgUHlfc3NpemVfdCBpZHgpIHsKICAgICAvKiByZXR1cm4gKHJ2YWwsIGlkeCkgdHVwbGUsIHN0ZWFsaW5nIHJlZmVyZW5jZSB0byBydmFsICovCkBAIC0zMTgsNyArMjk0LDcgQEAKICAgICAgICAgICAgIH0gXAogICAgICAgICB9IFwKICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoY2h1bmtzLCBjaHVuaykpIHsgXAotICAgICAgICAgICAgUHlfREVDUkVGKGNodW5rKTsgXAorICAgICAgICAgICAgUHlfQ0xFQVIoY2h1bmspOyBcCiAgICAgICAgICAgICBnb3RvIGJhaWw7IFwKICAgICAgICAgfSBcCiAgICAgICAgIFB5X0NMRUFSKGNodW5rKTsgXApAQCAtMzUxLDcgKzMyNyw3IEBACiAgICAgYnVmID0gUHlVbmljb2RlX0RBVEEocHlzdHIpOwogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChweXN0cik7CiAKLSAgICBpZiAoZW5kIDwgMCB8fCBsZW4gPD0gZW5kKSB7CisgICAgaWYgKGVuZCA8IDAgfHwgbGVuIDwgZW5kKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZW5kIGlzIG91dCBvZiBib3VuZHMiKTsKICAgICAgICAgZ290byBiYWlsOwogICAgIH0KQEAgLTUyMiw3ICs0OTgsNyBAQAogICAgIFB5X3NzaXplX3QgZW5kOwogICAgIFB5X3NzaXplX3QgbmV4dF9lbmQgPSAtMTsKICAgICBpbnQgc3RyaWN0ID0gMTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PJnxpOnNjYW5zdHJpbmciLCAmcHlzdHIsIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmZW5kLCAmc3RyaWN0KSkgeworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT258aTpzY2Fuc3RyaW5nIiwgJnB5c3RyLCAmZW5kLCAmc3RyaWN0KSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhweXN0cikpIHsKQEAgLTYxOSw2ICs1OTUsOSBAQAogICAgIGludCBoYXNfcGFpcnNfaG9vayA9IChzLT5vYmplY3RfcGFpcnNfaG9vayAhPSBQeV9Ob25lKTsKICAgICBQeV9zc2l6ZV90IG5leHRfaWR4OwogCisgICAgaWYgKHN0cmljdCA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShweXN0cikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC02MzcsMTIgKzYxNiwxMiBAQAogICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAvKiBvbmx5IGxvb3AgaWYgdGhlIG9iamVjdCBpcyBub24tZW1wdHkgKi8KLSAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICd9JykgewotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ30nKSB7CisgICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqbWVtb2tleTsKIAogICAgICAgICAgICAgLyogcmVhZCBrZXkgKi8KLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJyInKSB7CisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJyInKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgcHJvcGVydHkgbmFtZSBlbmNsb3NlZCBpbiBkb3VibGUgcXVvdGVzIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtNjk5LDExICs2NzgsOSBAQAogICAgICAgICAgICAgd2hpbGUgKGlkeCA8PSBlbmRfaWR4ICYmIElTX1dISVRFU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpKSkgaWR4Kys7CiAKICAgICAgICAgICAgIC8qIGJhaWwgaWYgdGhlIG9iamVjdCBpcyBjbG9zZWQgb3Igd2UgZGlkbid0IGdldCB0aGUgLCBkZWxpbWl0ZXIgKi8KLSAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4KSBicmVhazsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgPT0gJ30nKSB7CisgICAgICAgICAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICd9JykKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKKyAgICAgICAgICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnLCcpIHsKICAgICAgICAgICAgICAgICByYWlzZV9lcnJtc2coIkV4cGVjdGluZyAnLCcgZGVsaW1pdGVyIiwgcHlzdHIsIGlkeCk7CiAgICAgICAgICAgICAgICAgZ290byBiYWlsOwogICAgICAgICAgICAgfQpAQCAtNzE0LDEyICs2OTEsNiBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgc3RyW2lkeF0gc2hvdWxkIGJlICd9JyAqLwotICAgIGlmIChpZHggPiBlbmRfaWR4IHx8IFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSAhPSAnfScpIHsKLSAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3Rpbmcgb2JqZWN0IiwgcHlzdHIsIGVuZF9pZHgpOwotICAgICAgICBnb3RvIGJhaWw7Ci0gICAgfQotCiAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CiAKICAgICBpZiAoaGFzX3BhaXJzX2hvb2spIHsKQEAgLTc3MSw4ICs3NDIsOCBAQAogICAgIHdoaWxlIChpZHggPD0gZW5kX2lkeCAmJiBJU19XSElURVNQQUNFKFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSkpIGlkeCsrOwogCiAgICAgLyogb25seSBsb29wIGlmIHRoZSBhcnJheSBpcyBub24tZW1wdHkgKi8KLSAgICBpZiAoaWR4IDw9IGVuZF9pZHggJiYgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpICE9ICddJykgewotICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHgpIHsKKyAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7CisgICAgICAgIHdoaWxlICgxKSB7CiAKICAgICAgICAgICAgIC8qIHJlYWQgYW55IEpTT04gdGVybSAgKi8KICAgICAgICAgICAgIHZhbCA9IHNjYW5fb25jZV91bmljb2RlKHMsIHB5c3RyLCBpZHgsICZuZXh0X2lkeCk7CkBAIC03ODksMTEgKzc2MCw5IEBACiAgICAgICAgICAgICB3aGlsZSAoaWR4IDw9IGVuZF9pZHggJiYgSVNfV0hJVEVTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkpKSBpZHgrKzsKIAogICAgICAgICAgICAgLyogYmFpbCBpZiB0aGUgYXJyYXkgaXMgY2xvc2VkIG9yIHdlIGRpZG4ndCBnZXQgdGhlICwgZGVsaW1pdGVyICovCi0gICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCkgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICddJykgeworICAgICAgICAgICAgaWYgKGlkeCA8PSBlbmRfaWR4ICYmIFB5VW5pY29kZV9SRUFEKGtpbmQsIHN0ciwgaWR4KSA9PSAnXScpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJywnKSB7CisgICAgICAgICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJywnKSB7CiAgICAgICAgICAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgJywnIGRlbGltaXRlciIsIHB5c3RyLCBpZHgpOwogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKICAgICAgICAgICAgIH0KQEAgLTgwNiw3ICs3NzUsNyBAQAogCiAgICAgLyogdmVyaWZ5IHRoYXQgaWR4IDwgZW5kX2lkeCwgUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpIHNob3VsZCBiZSAnXScgKi8KICAgICBpZiAoaWR4ID4gZW5kX2lkeCB8fCBQeVVuaWNvZGVfUkVBRChraW5kLCBzdHIsIGlkeCkgIT0gJ10nKSB7Ci0gICAgICAgIHJhaXNlX2Vycm1zZygiRXhwZWN0aW5nIG9iamVjdCIsIHB5c3RyLCBlbmRfaWR4KTsKKyAgICAgICAgcmFpc2VfZXJybXNnKCJFeHBlY3RpbmcgdmFsdWUiLCBweXN0ciwgZW5kX2lkeCk7CiAgICAgICAgIGdvdG8gYmFpbDsKICAgICB9CiAgICAgKm5leHRfaWR4X3B0ciA9IGlkeCArIDE7CkBAIC04NzQsNyArODQzLDcgQEAKICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpID09ICctJykgewogICAgICAgICBpZHgrKzsKICAgICAgICAgaWYgKGlkeCA+IGVuZF9pZHgpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgICAgICByYWlzZV9zdG9wX2l0ZXJhdGlvbihzdGFydCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTg5MCw3ICs4NTksNyBAQAogICAgIH0KICAgICAvKiBubyBpbnRlZ2VyIGRpZ2l0cywgZXJyb3IgKi8KICAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19TdG9wSXRlcmF0aW9uKTsKKyAgICAgICAgcmFpc2Vfc3RvcF9pdGVyYXRpb24oc3RhcnQpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTk3NCw2ICs5NDMsNyBAQAogICAgIHZvaWQgKnN0cjsKICAgICBpbnQga2luZDsKICAgICBQeV9zc2l6ZV90IGxlbmd0aDsKKyAgICBpbnQgc3RyaWN0OwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShweXN0cikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTg3LDE2ICs5NTcsMTcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChpZHggPj0gbGVuZ3RoKSB7Ci0gICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfU3RvcEl0ZXJhdGlvbik7CisgICAgICAgIHJhaXNlX3N0b3BfaXRlcmF0aW9uKGlkeCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHN3aXRjaCAoUHlVbmljb2RlX1JFQUQoa2luZCwgc3RyLCBpZHgpKSB7CiAgICAgICAgIGNhc2UgJyInOgogICAgICAgICAgICAgLyogc3RyaW5nICovCi0gICAgICAgICAgICByZXR1cm4gc2NhbnN0cmluZ191bmljb2RlKHB5c3RyLCBpZHggKyAxLAotICAgICAgICAgICAgICAgIFB5T2JqZWN0X0lzVHJ1ZShzLT5zdHJpY3QpLAotICAgICAgICAgICAgICAgIG5leHRfaWR4X3B0cik7CisgICAgICAgICAgICBzdHJpY3QgPSBQeU9iamVjdF9Jc1RydWUocy0+c3RyaWN0KTsKKyAgICAgICAgICAgIGlmIChzdHJpY3QgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgcmV0dXJuIHNjYW5zdHJpbmdfdW5pY29kZShweXN0ciwgaWR4ICsgMSwgc3RyaWN0LCBuZXh0X2lkeF9wdHIpOwogICAgICAgICBjYXNlICd7JzoKICAgICAgICAgICAgIC8qIG9iamVjdCAqLwogICAgICAgICAgICAgaWYgKFB5X0VudGVyUmVjdXJzaXZlQ2FsbCgiIHdoaWxlIGRlY29kaW5nIGEgSlNPTiBvYmplY3QgIgpAQCAtMTA4OSw3ICsxMDYwLDcgQEAKICAgICBQeVNjYW5uZXJPYmplY3QgKnM7CiAgICAgYXNzZXJ0KFB5U2Nhbm5lcl9DaGVjayhzZWxmKSk7CiAgICAgcyA9IChQeVNjYW5uZXJPYmplY3QgKilzZWxmOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPTyY6c2Nhbl9vbmNlIiwga3dsaXN0LCAmcHlzdHIsIF9jb252ZXJ0UHlJbnRfQXNTc2l6ZV90LCAmaWR4KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT246c2Nhbl9vbmNlIiwga3dsaXN0LCAmcHlzdHIsICZpZHgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2socHlzdHIpKSB7CkBAIC0xMjQ2LDE2ICsxMjE3LDI1IEBACiAKICAgICBQeUVuY29kZXJPYmplY3QgKnM7CiAgICAgUHlPYmplY3QgKm1hcmtlcnMsICpkZWZhdWx0Zm4sICplbmNvZGVyLCAqaW5kZW50LCAqa2V5X3NlcGFyYXRvcjsKLSAgICBQeU9iamVjdCAqaXRlbV9zZXBhcmF0b3IsICpzb3J0X2tleXMsICpza2lwa2V5cywgKmFsbG93X25hbjsKKyAgICBQeU9iamVjdCAqaXRlbV9zZXBhcmF0b3IsICpzb3J0X2tleXMsICpza2lwa2V5czsKKyAgICBpbnQgYWxsb3dfbmFuOwogCiAgICAgYXNzZXJ0KFB5RW5jb2Rlcl9DaGVjayhzZWxmKSk7CiAgICAgcyA9IChQeUVuY29kZXJPYmplY3QgKilzZWxmOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PT09PT09PTzptYWtlX2VuY29kZXIiLCBrd2xpc3QsCi0gICAgICAgICZtYXJrZXJzLCAmZGVmYXVsdGZuLCAmZW5jb2RlciwgJmluZGVudCwgJmtleV9zZXBhcmF0b3IsICZpdGVtX3NlcGFyYXRvciwKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT09PT1VVT09wOm1ha2VfZW5jb2RlciIsIGt3bGlzdCwKKyAgICAgICAgJm1hcmtlcnMsICZkZWZhdWx0Zm4sICZlbmNvZGVyLCAmaW5kZW50LAorICAgICAgICAma2V5X3NlcGFyYXRvciwgJml0ZW1fc2VwYXJhdG9yLAogICAgICAgICAmc29ydF9rZXlzLCAmc2tpcGtleXMsICZhbGxvd19uYW4pKQogICAgICAgICByZXR1cm4gLTE7CiAKKyAgICBpZiAobWFya2VycyAhPSBQeV9Ob25lICYmICFQeURpY3RfQ2hlY2sobWFya2VycykpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJtYWtlX2VuY29kZXIoKSBhcmd1bWVudCAxIG11c3QgYmUgZGljdCBvciBOb25lLCAiCisgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUobWFya2VycyktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCiAgICAgcy0+bWFya2VycyA9IG1hcmtlcnM7CiAgICAgcy0+ZGVmYXVsdGZuID0gZGVmYXVsdGZuOwogICAgIHMtPmVuY29kZXIgPSBlbmNvZGVyOwpAQCAtMTI2NSw3ICsxMjQ1LDcgQEAKICAgICBzLT5zb3J0X2tleXMgPSBzb3J0X2tleXM7CiAgICAgcy0+c2tpcGtleXMgPSBza2lwa2V5czsKICAgICBzLT5mYXN0X2VuY29kZSA9IChQeUNGdW5jdGlvbl9DaGVjayhzLT5lbmNvZGVyKSAmJiBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbihzLT5lbmNvZGVyKSA9PSAoUHlDRnVuY3Rpb24pcHlfZW5jb2RlX2Jhc2VzdHJpbmdfYXNjaWkpOwotICAgIHMtPmFsbG93X25hbiA9IFB5T2JqZWN0X0lzVHJ1ZShhbGxvd19uYW4pOworICAgIHMtPmFsbG93X25hbiA9IGFsbG93X25hbjsKIAogICAgIFB5X0lOQ1JFRihzLT5tYXJrZXJzKTsKICAgICBQeV9JTkNSRUYocy0+ZGVmYXVsdGZuKTsKQEAgLTEyOTAsOCArMTI3MCw4IEBACiAKICAgICBhc3NlcnQoUHlFbmNvZGVyX0NoZWNrKHNlbGYpKTsKICAgICBzID0gKFB5RW5jb2Rlck9iamVjdCAqKXNlbGY7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PJjpfaXRlcmVuY29kZSIsIGt3bGlzdCwKLSAgICAgICAgJm9iaiwgX2NvbnZlcnRQeUludF9Bc1NzaXplX3QsICZpbmRlbnRfbGV2ZWwpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPbjpfaXRlcmVuY29kZSIsIGt3bGlzdCwKKyAgICAgICAgJm9iaiwgJmluZGVudF9sZXZlbCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChfUHlBY2N1X0luaXQoJmFjYykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTMzNywxMyArMTMxNyw0NSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZW5jb2Rlcl9lbmNvZGVfbG9uZyhQeUVuY29kZXJPYmplY3QqIHMgVU5VU0VELCBQeU9iamVjdCAqb2JqKQoreworICAgIC8qIFJldHVybiB0aGUgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIFB5TG9uZyBhbmQgUHlMb25nIHN1YmNsYXNzZXMuCisgICAgICAgQ2FsbHMgaW50KCkgb24gUHlMb25nIHN1YmNsYXNzZXMgaW4gY2FzZSB0aGUgc3RyKCkgd2FzIGNoYW5nZWQuCisgICAgICAgQWRkZWQgc3BlY2lmaWNhbGx5IHRvIGRlYWwgd2l0aCBJbnRFbnVtLiAgU2VlIElzc3VlMTgyNjQuICovCisgICAgUHlPYmplY3QgKmVuY29kZWQsICpsb25nb2JqOworICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdChvYmopKSB7CisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9TdHIob2JqKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxvbmdvYmogPSBQeU51bWJlcl9Mb25nKG9iaik7CisgICAgICAgIGlmIChsb25nb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIlVuYWJsZSB0byBjb2VyY2UgaW50IHN1YmNsYXNzIHRvIGludCIKKyAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9TdHIobG9uZ29iaik7CisgICAgICAgIFB5X0RFQ1JFRihsb25nb2JqKTsKKyAgICB9CisgICAgcmV0dXJuIGVuY29kZWQ7Cit9CisKKworc3RhdGljIFB5T2JqZWN0ICoKIGVuY29kZXJfZW5jb2RlX2Zsb2F0KFB5RW5jb2Rlck9iamVjdCAqcywgUHlPYmplY3QgKm9iaikKIHsKLSAgICAvKiBSZXR1cm4gdGhlIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBQeUZsb2F0ICovCisgICAgLyogUmV0dXJuIHRoZSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgUHlGbG9hdC4KKyAgICAgICBNb2RpZmllZCB0byBjYWxsIGZsb2F0KCkgb24gZmxvYXQgc3ViY2xhc3NlcyBpbiBjYXNlIHRoZSBzdWJjbGFzcworICAgICAgIGNoYW5nZXMgdGhlIHJlcHIuICBTZWUgSXNzdWUxODI2NC4gICovCisgICAgUHlPYmplY3QgKmVuY29kZWQsICpmbG9hdG9iajsKICAgICBkb3VibGUgaSA9IFB5RmxvYXRfQVNfRE9VQkxFKG9iaik7CiAgICAgaWYgKCFQeV9JU19GSU5JVEUoaSkpIHsKICAgICAgICAgaWYgKCFzLT5hbGxvd19uYW4pIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiT3V0IG9mIHJhbmdlIGZsb2F0IHZhbHVlcyBhcmUgbm90IEpTT04gY29tcGxpYW50Iik7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJPdXQgb2YgcmFuZ2UgZmxvYXQgdmFsdWVzIGFyZSBub3QgSlNPTiBjb21wbGlhbnQiCisgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgICAgICBpZiAoaSA+IDApIHsKQEAgLTEzNTYsOCArMTM2OCwyNCBAQAogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJOYU4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICAvKiBVc2UgYSBiZXR0ZXIgZmxvYXQgZm9ybWF0IGhlcmU/ICovCi0gICAgcmV0dXJuIFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICAvKiBjb2VyY2UgZmxvYXQgc3ViY2xhc3NlcyB0byBmbG9hdCAocHJpbWFyaWx5IGZvciBFbnVtKSAqLworICAgIGlmIChQeUZsb2F0X0NoZWNrRXhhY3Qob2JqKSkgeworICAgICAgICAvKiBVc2UgYSBiZXR0ZXIgZmxvYXQgZm9ybWF0IGhlcmU/ICovCisgICAgICAgIGVuY29kZWQgPSBQeU9iamVjdF9SZXByKG9iaik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmbG9hdG9iaiA9IFB5TnVtYmVyX0Zsb2F0KG9iaik7CisgICAgICAgIGlmIChmbG9hdG9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCisgICAgICAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJVbmFibGUgdG8gY29lcmNlIGZsb2F0IHN1YmNsYXNzIHRvIGZsb2F0IgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZW5jb2RlZCA9IFB5T2JqZWN0X1JlcHIoZmxvYXRvYmopOworICAgICAgICBQeV9ERUNSRUYoZmxvYXRvYmopOworICAgIH0KKyAgICByZXR1cm4gZW5jb2RlZDsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE0MDEsNyArMTQyOSw3IEBACiAgICAgICAgIHJldHVybiBfc3RlYWxfYWNjdW11bGF0ZShhY2MsIGVuY29kZWQpOwogICAgIH0KICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2sob2JqKSkgewotICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IFB5T2JqZWN0X1N0cihvYmopOworICAgICAgICBQeU9iamVjdCAqZW5jb2RlZCA9IGVuY29kZXJfZW5jb2RlX2xvbmcocywgb2JqKTsKICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcmV0dXJuIF9zdGVhbF9hY2N1bXVsYXRlKGFjYywgZW5jb2RlZCk7CkBAIC0xNDg2LDYgKzE1MTQsNyBAQAogICAgIFB5T2JqZWN0ICppdGVtczsKICAgICBQeU9iamVjdCAqaXRlbSA9IE5VTEw7CiAgICAgaW50IHNraXBrZXlzOworICAgIGludCBzb3J0a2V5czsKICAgICBQeV9zc2l6ZV90IGlkeDsKIAogICAgIGlmIChvcGVuX2RpY3QgPT0gTlVMTCB8fCBjbG9zZV9kaWN0ID09IE5VTEwgfHwgZW1wdHlfZGljdCA9PSBOVUxMKSB7CkBAIC0xNTMwLDEzICsxNTU5LDE2IEBACiAgICAgaXRlbXMgPSBQeU1hcHBpbmdfSXRlbXMoZGN0KTsKICAgICBpZiAoaXRlbXMgPT0gTlVMTCkKICAgICAgICAgZ290byBiYWlsOwotICAgIGlmIChQeU9iamVjdF9Jc1RydWUocy0+c29ydF9rZXlzKSAmJiBQeUxpc3RfU29ydChpdGVtcykgPCAwKQorICAgIHNvcnRrZXlzID0gUHlPYmplY3RfSXNUcnVlKHMtPnNvcnRfa2V5cyk7CisgICAgaWYgKHNvcnRrZXlzIDwgMCB8fCAoc29ydGtleXMgJiYgUHlMaXN0X1NvcnQoaXRlbXMpIDwgMCkpCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICBpdCA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlbXMpOwogICAgIFB5X0RFQ1JFRihpdGVtcyk7CiAgICAgaWYgKGl0ID09IE5VTEwpCiAgICAgICAgIGdvdG8gYmFpbDsKICAgICBza2lwa2V5cyA9IFB5T2JqZWN0X0lzVHJ1ZShzLT5za2lwa2V5cyk7CisgICAgaWYgKHNraXBrZXlzIDwgMCkKKyAgICAgICAgZ290byBiYWlsOwogICAgIGlkeCA9IDA7CiAgICAgd2hpbGUgKChpdGVtID0gUHlJdGVyX05leHQoaXQpKSAhPSBOVUxMKSB7CiAgICAgICAgIFB5T2JqZWN0ICplbmNvZGVkLCAqa2V5LCAqdmFsdWU7CkBAIC0xNTYyLDkgKzE1OTQsMTAgQEAKICAgICAgICAgICAgICAgICBnb3RvIGJhaWw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKGtleSkpIHsKLSAgICAgICAgICAgIGtzdHIgPSBQeU9iamVjdF9TdHIoa2V5KTsKLSAgICAgICAgICAgIGlmIChrc3RyID09IE5VTEwpCisgICAgICAgICAgICBrc3RyID0gZW5jb2Rlcl9lbmNvZGVfbG9uZyhzLCBrZXkpOworICAgICAgICAgICAgaWYgKGtzdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGdvdG8gYmFpbDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChza2lwa2V5cykgewogICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbG9jYWxlbW9kdWxlLmMgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwppbmRleCBjYzY4OGJhLi5iMWQ2YWRkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYworKysgYi9Nb2R1bGVzL19sb2NhbGVtb2R1bGUuYwpAQCAtMTQ3LDI2ICsxNDcsMzQgQEAKICAgICAvKiBob3BlZnVsbHksIHRoZSBsb2NhbGVjb252IHJlc3VsdCBzdXJ2aXZlcyB0aGUgQyBsaWJyYXJ5IGNhbGxzCiAgICAgICAgaW52b2x2ZWQgaGVyZWluICovCiAKKyNkZWZpbmUgUkVTVUxUKGtleSwgb2JqKVwKKyAgICBkbyB7IFwKKyAgICAgICAgaWYgKG9iaiA9PSBOVUxMKSBcCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsgXAorICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCBrZXksIG9iaikgPCAwKSB7IFwKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOyBcCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsgXAorICAgICAgICB9IFwKKyAgICAgICAgUHlfREVDUkVGKG9iaik7IFwKKyAgICB9IHdoaWxlICgwKQorCiAjZGVmaW5lIFJFU1VMVF9TVFJJTkcocylcCi0gICAgeCA9IFB5VW5pY29kZV9EZWNvZGVMb2NhbGUobC0+cywgTlVMTCk7ICAgXAotICAgIGlmICgheCkgZ290byBmYWlsZWQ7XAotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHJlc3VsdCwgI3MsIHgpO1wKLSAgICBQeV9YREVDUkVGKHgpCisgICAgZG8geyBcCisgICAgICAgIHggPSBQeVVuaWNvZGVfRGVjb2RlTG9jYWxlKGwtPnMsIE5VTEwpOyBcCisgICAgICAgIFJFU1VMVCgjcywgeCk7IFwKKyAgICB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJFU1VMVF9JTlQoaSlcCi0gICAgeCA9IFB5TG9uZ19Gcm9tTG9uZyhsLT5pKTtcCi0gICAgaWYgKCF4KSBnb3RvIGZhaWxlZDtcCi0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAjaSwgeCk7XAotICAgIFB5X1hERUNSRUYoeCkKKyAgICBkbyB7IFwKKyAgICAgICAgeCA9IFB5TG9uZ19Gcm9tTG9uZyhsLT5pKTsgXAorICAgICAgICBSRVNVTFQoI2ksIHgpOyBcCisgICAgfSB3aGlsZSAoMCkKIAogICAgIC8qIE51bWVyaWMgaW5mb3JtYXRpb24gKi8KICAgICBSRVNVTFRfU1RSSU5HKGRlY2ltYWxfcG9pbnQpOwogICAgIFJFU1VMVF9TVFJJTkcodGhvdXNhbmRzX3NlcCk7CiAgICAgeCA9IGNvcHlfZ3JvdXBpbmcobC0+Z3JvdXBpbmcpOwotICAgIGlmICgheCkKLSAgICAgICAgZ290byBmYWlsZWQ7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcocmVzdWx0LCAiZ3JvdXBpbmciLCB4KTsKLSAgICBQeV9YREVDUkVGKHgpOworICAgIFJFU1VMVCgiZ3JvdXBpbmciLCB4KTsKIAogICAgIC8qIE1vbmV0YXJ5IGluZm9ybWF0aW9uICovCiAgICAgUkVTVUxUX1NUUklORyhpbnRfY3Vycl9zeW1ib2wpOwpAQCAtMTc0LDEwICsxODIsOCBAQAogICAgIFJFU1VMVF9TVFJJTkcobW9uX2RlY2ltYWxfcG9pbnQpOwogICAgIFJFU1VMVF9TVFJJTkcobW9uX3Rob3VzYW5kc19zZXApOwogICAgIHggPSBjb3B5X2dyb3VwaW5nKGwtPm1vbl9ncm91cGluZyk7Ci0gICAgaWYgKCF4KQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXN1bHQsICJtb25fZ3JvdXBpbmciLCB4KTsKLSAgICBQeV9YREVDUkVGKHgpOworICAgIFJFU1VMVCgibW9uX2dyb3VwaW5nIiwgeCk7CisKICAgICBSRVNVTFRfU1RSSU5HKHBvc2l0aXZlX3NpZ24pOwogICAgIFJFU1VMVF9TVFJJTkcobmVnYXRpdmVfc2lnbik7CiAgICAgUkVTVUxUX0lOVChpbnRfZnJhY19kaWdpdHMpOwpAQCAtMTkyLDcgKzE5OCw2IEBACiAKICAgZmFpbGVkOgogICAgIFB5X1hERUNSRUYocmVzdWx0KTsKLSAgICBQeV9YREVDUkVGKHgpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yNDksNyArMjU0LDcgQEAKIAogICAgIC8qIGFzc3VtZSBubyBjaGFuZ2UgaW4gc2l6ZSwgZmlyc3QgKi8KICAgICBuMSA9IG4xICsgMTsKLSAgICBidWYgPSBQeU1lbV9NYWxsb2MobjEgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGJ1ZiA9IFB5TWVtX05ldyh3Y2hhcl90LCBuMSk7CiAgICAgaWYgKCFidWYpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBleGl0OwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fbHNwcm9mLmMgYi9Nb2R1bGVzL19sc3Byb2YuYwppbmRleCA0MTYyYmU4Li4wMTM3ZDk1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19sc3Byb2YuYworKysgYi9Nb2R1bGVzL19sc3Byb2YuYwpAQCAtMzYsMTIgKzM2LDggQEAKICNlcnJvciAiVGhpcyBtb2R1bGUgcmVxdWlyZXMgZ2V0dGltZW9mZGF5KCkgb24gbm9uLVdpbmRvd3MgcGxhdGZvcm1zISIKICNlbmRpZgogCi0jaWYgKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZWxzZQogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgogI2luY2x1ZGUgPHN5cy90aW1lcy5oPgotI2VuZGlmCiAKIHN0YXRpYyBQWV9MT05HX0xPTkcKIGhwVGltZXIodm9pZCkKQEAgLTIyNyw3ICsyMjMsNyBAQAogbmV3UHJvZmlsZXJFbnRyeShQcm9maWxlck9iamVjdCAqcE9iaiwgdm9pZCAqa2V5LCBQeU9iamVjdCAqdXNlck9iaikKIHsKICAgICBQcm9maWxlckVudHJ5ICpzZWxmOwotICAgIHNlbGYgPSAoUHJvZmlsZXJFbnRyeSopIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJFbnRyeSkpOworICAgIHNlbGYgPSAoUHJvZmlsZXJFbnRyeSopIFB5TWVtX01hbGxvYyhzaXplb2YoUHJvZmlsZXJFbnRyeSkpOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNSw3ICsyMzEsNyBAQAogICAgIHVzZXJPYmogPSBub3JtYWxpemVVc2VyT2JqKHVzZXJPYmopOwogICAgIGlmICh1c2VyT2JqID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZnJlZShzZWxmKTsKKyAgICAgICAgUHlNZW1fRnJlZShzZWxmKTsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0yNjgsNyArMjY0LDcgQEAKIG5ld1N1YkVudHJ5KFByb2ZpbGVyT2JqZWN0ICpwT2JqLCAgUHJvZmlsZXJFbnRyeSAqY2FsbGVyLCBQcm9maWxlckVudHJ5KiBlbnRyeSkKIHsKICAgICBQcm9maWxlclN1YkVudHJ5ICpzZWxmOwotICAgIHNlbGYgPSAoUHJvZmlsZXJTdWJFbnRyeSopIG1hbGxvYyhzaXplb2YoUHJvZmlsZXJTdWJFbnRyeSkpOworICAgIHNlbGYgPSAoUHJvZmlsZXJTdWJFbnRyeSopIFB5TWVtX01hbGxvYyhzaXplb2YoUHJvZmlsZXJTdWJFbnRyeSkpOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgcE9iai0+ZmxhZ3MgfD0gUE9GX05PTUVNT1JZOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI4Niw3ICsyODIsNyBAQAogc3RhdGljIGludCBmcmVlU3ViRW50cnkocm90YXRpbmdfbm9kZV90ICpoZWFkZXIsIHZvaWQgKmFyZykKIHsKICAgICBQcm9maWxlclN1YkVudHJ5ICpzdWJlbnRyeSA9IChQcm9maWxlclN1YkVudHJ5KikgaGVhZGVyOwotICAgIGZyZWUoc3ViZW50cnkpOworICAgIFB5TWVtX0ZyZWUoc3ViZW50cnkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yOTUsNyArMjkxLDcgQEAKICAgICBQcm9maWxlckVudHJ5ICplbnRyeSA9IChQcm9maWxlckVudHJ5KikgaGVhZGVyOwogICAgIFJvdGF0aW5nVHJlZV9FbnVtKGVudHJ5LT5jYWxscywgZnJlZVN1YkVudHJ5LCBOVUxMKTsKICAgICBQeV9ERUNSRUYoZW50cnktPnVzZXJPYmopOwotICAgIGZyZWUoZW50cnkpOworICAgIFB5TWVtX0ZyZWUoZW50cnkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMDUsMTMgKzMwMSwxMyBAQAogICAgIHBPYmotPnByb2ZpbGVyRW50cmllcyA9IEVNUFRZX1JPVEFUSU5HX1RSRUU7CiAgICAgLyogcmVsZWFzZSB0aGUgbWVtb3J5IGhvbGQgYnkgdGhlIFByb2ZpbGVyQ29udGV4dHMgKi8KICAgICBpZiAocE9iai0+Y3VycmVudFByb2ZpbGVyQ29udGV4dCkgewotICAgICAgICBmcmVlKHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQpOworICAgICAgICBQeU1lbV9GcmVlKHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQpOwogICAgICAgICBwT2JqLT5jdXJyZW50UHJvZmlsZXJDb250ZXh0ID0gTlVMTDsKICAgICB9CiAgICAgd2hpbGUgKHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0KSB7CiAgICAgICAgIFByb2ZpbGVyQ29udGV4dCAqYyA9IHBPYmotPmZyZWVsaXN0UHJvZmlsZXJDb250ZXh0OwogICAgICAgICBwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dCA9IGMtPnByZXZpb3VzOwotICAgICAgICBmcmVlKGMpOworICAgICAgICBQeU1lbV9GcmVlKGMpOwogICAgIH0KICAgICBwT2JqLT5mcmVlbGlzdFByb2ZpbGVyQ29udGV4dCA9IE5VTEw7CiB9CkBAIC0zOTcsNyArMzkzLDcgQEAKICAgICBlbHNlIHsKICAgICAgICAgLyogZnJlZSBsaXN0IGV4aGF1c3RlZCwgYWxsb2NhdGUgYSBuZXcgb25lICovCiAgICAgICAgIHBDb250ZXh0ID0gKFByb2ZpbGVyQ29udGV4dCopCi0gICAgICAgICAgICBtYWxsb2Moc2l6ZW9mKFByb2ZpbGVyQ29udGV4dCkpOworICAgICAgICAgICAgUHlNZW1fTWFsbG9jKHNpemVvZihQcm9maWxlckNvbnRleHQpKTsKICAgICAgICAgaWYgKHBDb250ZXh0ID09IE5VTEwpIHsKICAgICAgICAgICAgIHBPYmotPmZsYWdzIHw9IFBPRl9OT01FTU9SWTsKICAgICAgICAgICAgIGdvdG8gcmVzdG9yZVB5ZXJyOwpAQCAtNzA4LDcgKzcwNCw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBPYmotPmN1cnJlbnRQcm9maWxlckNvbnRleHQgPSBwQ29udGV4dC0+cHJldmlvdXM7CiAgICAgICAgIGlmIChwQ29udGV4dCkKLSAgICAgICAgICAgIGZyZWUocENvbnRleHQpOworICAgICAgICAgICAgUHlNZW1fRnJlZShwQ29udGV4dCk7CiAgICAgfQogCiB9CkBAIC04NzYsMTAgKzg3MiwxMiBAQAogICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJQcm9maWxlciIsIChQeU9iamVjdCAqKSZQeVByb2ZpbGVyX1R5cGUpOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdGF0c0VudHJ5VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvZmlsZXJfZW50cnlfZGVzYyk7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRzU3ViRW50cnlUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9zdWJlbnRyeV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0c0VudHJ5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9lbnRyeV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdGF0c1N1YkVudHJ5VHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcm9maWxlcl9zdWJlbnRyeV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTdGF0c0VudHJ5VHlwZSk7CiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopICZTdGF0c1N1YkVudHJ5VHlwZSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19sem1hbW9kdWxlLmMgYi9Nb2R1bGVzL19sem1hbW9kdWxlLmMKaW5kZXggNjQzNjE2MC4uYzQzNjc2YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fbHptYW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX2x6bWFtb2R1bGUuYwpAQCAtNTEsNiArNTEsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAorICAgIGx6bWFfYWxsb2NhdG9yIGFsbG9jOwogICAgIGx6bWFfc3RyZWFtIGx6czsKICAgICBpbnQgZmx1c2hlZDsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtNjAsNiArNjEsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAorICAgIGx6bWFfYWxsb2NhdG9yIGFsbG9jOwogICAgIGx6bWFfc3RyZWFtIGx6czsKICAgICBpbnQgY2hlY2s7CiAgICAgY2hhciBlb2Y7CkBAIC0xMTcsNiArMTE5LDIyIEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCoKK1B5THptYV9NYWxsb2Modm9pZCAqb3BhcXVlLCBzaXplX3QgaXRlbXMsIHNpemVfdCBzaXplKQoreworICAgIGlmIChpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDoKKyAgICAgICB0aGUgR0lMIGlzIG5vdCBoZWxkIHdoZW4gbHptYV9jb2RlKCkgaXMgY2FsbGVkICovCisgICAgcmV0dXJuIFB5TWVtX1Jhd01hbGxvYyhpdGVtcyAqIHNpemUpOworfQorCitzdGF0aWMgdm9pZAorUHlMem1hX0ZyZWUodm9pZCAqb3BhcXVlLCB2b2lkICpwdHIpCit7CisgICAgUHlNZW1fUmF3RnJlZShwdHIpOworfQorCiAjaWYgQlVGU0laIDwgODE5MgogI2RlZmluZSBJTklUSUFMX0JVRkZFUl9TSVpFIDgxOTIKICNlbHNlCkBAIC0yODAsMzYgKzI5OCwzNyBAQAogICAgIHJldHVybiBvcHRpb25zOwogfQogCi1zdGF0aWMgdm9pZCAqCi1wYXJzZV9maWx0ZXJfc3BlYyhsem1hX2ZpbHRlciAqZiwgUHlPYmplY3QgKnNwZWMpCitzdGF0aWMgaW50Citsem1hX2ZpbHRlcl9jb252ZXJ0ZXIoUHlPYmplY3QgKnNwZWMsIHZvaWQgKnB0cikKIHsKKyAgICBsem1hX2ZpbHRlciAqZiA9IChsem1hX2ZpbHRlciAqKXB0cjsKICAgICBQeU9iamVjdCAqaWRfb2JqOwogCiAgICAgaWYgKCFQeU1hcHBpbmdfQ2hlY2soc3BlYykpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJGaWx0ZXIgc3BlY2lmaWVyIG11c3QgYmUgYSBkaWN0IG9yIGRpY3QtbGlrZSBvYmplY3QiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZF9vYmogPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhzcGVjLCAiaWQiKTsKICAgICBpZiAoaWRfb2JqID09IE5VTEwpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZpbHRlciBzcGVjaWZpZXIgbXVzdCBoYXZlIGFuIFwiaWRcIiBlbnRyeSIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIGYtPmlkID0gUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyhpZF9vYmopOwogICAgIFB5X0RFQ1JFRihpZF9vYmopOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIDA7CiAKICAgICBzd2l0Y2ggKGYtPmlkKSB7CiAgICAgICAgIGNhc2UgTFpNQV9GSUxURVJfTFpNQTE6CiAgICAgICAgIGNhc2UgTFpNQV9GSUxURVJfTFpNQTI6CiAgICAgICAgICAgICBmLT5vcHRpb25zID0gcGFyc2VfZmlsdGVyX3NwZWNfbHptYShzcGVjKTsKLSAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zOworICAgICAgICAgICAgcmV0dXJuIGYtPm9wdGlvbnMgIT0gTlVMTDsKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9ERUxUQToKICAgICAgICAgICAgIGYtPm9wdGlvbnMgPSBwYXJzZV9maWx0ZXJfc3BlY19kZWx0YShzcGVjKTsKLSAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zOworICAgICAgICAgICAgcmV0dXJuIGYtPm9wdGlvbnMgIT0gTlVMTDsKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9YODY6CiAgICAgICAgIGNhc2UgTFpNQV9GSUxURVJfUE9XRVJQQzoKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9JQTY0OgpAQCAtMzE3LDEwICszMzYsMTAgQEAKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9BUk1USFVNQjoKICAgICAgICAgY2FzZSBMWk1BX0ZJTFRFUl9TUEFSQzoKICAgICAgICAgICAgIGYtPm9wdGlvbnMgPSBwYXJzZV9maWx0ZXJfc3BlY19iY2ooc3BlYyk7Ci0gICAgICAgICAgICByZXR1cm4gZi0+b3B0aW9uczsKKyAgICAgICAgICAgIHJldHVybiBmLT5vcHRpb25zICE9IE5VTEw7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkludmFsaWQgZmlsdGVyIElEOiAlbGx1IiwgZi0+aWQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKQEAgLTM1MSw3ICszNzAsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZmlsdGVyczsgaSsrKSB7CiAgICAgICAgIGludCBvayA9IDE7CiAgICAgICAgIFB5T2JqZWN0ICpzcGVjID0gUHlTZXF1ZW5jZV9HZXRJdGVtKGZpbHRlcnNwZWNzLCBpKTsKLSAgICAgICAgaWYgKHNwZWMgPT0gTlVMTCB8fCBwYXJzZV9maWx0ZXJfc3BlYygmZmlsdGVyc1tpXSwgc3BlYykgPT0gTlVMTCkKKyAgICAgICAgaWYgKHNwZWMgPT0gTlVMTCB8fCAhbHptYV9maWx0ZXJfY29udmVydGVyKHNwZWMsICZmaWx0ZXJzW2ldKSkKICAgICAgICAgICAgIG9rID0gMDsKICAgICAgICAgUHlfWERFQ1JFRihzcGVjKTsKICAgICAgICAgaWYgKCFvaykgewpAQCAtNDUwLDYgKzQ2OSwzNiBAQAogfQogCiAKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIF9sem1hCitjbGFzcyBfbHptYS5MWk1BQ29tcHJlc3NvciAiQ29tcHJlc3NvciAqIiAiJkNvbXByZXNzb3JfdHlwZSIKK2NsYXNzIF9sem1hLkxaTUFEZWNvbXByZXNzb3IgIkRlY29tcHJlc3NvciAqIiAiJkRlY29tcHJlc3Nvcl90eXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZjE3YWZjNzg2NTI1ZDZjMl0qLworCisjaW5jbHVkZSAiY2xpbmljL19sem1hbW9kdWxlLmMuaCIKKworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyBsem1hX3ZsaV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsem1hX3ZsaScKKyAgICBjb252ZXJ0ZXIgPSAnbHptYV92bGlfY29udmVydGVyJworCitjbGFzcyBsem1hX2ZpbHRlcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsem1hX2ZpbHRlcicKKyAgICBjb252ZXJ0ZXIgPSAnbHptYV9maWx0ZXJfY29udmVydGVyJworICAgIGNfZGVmYXVsdCA9IGNfaWdub3JlZF9kZWZhdWx0ID0gIntMWk1BX1ZMSV9VTktOT1dOLCBOVUxMfSIKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisgICAgICAgIHJldHVybiAoJ2lmICglKG5hbWUpcy5pZCAhPSBMWk1BX1ZMSV9VTktOT1dOKVxuJworICAgICAgICAgICAgICAgICcgICBQeU1lbV9GcmVlKCUobmFtZSlzLm9wdGlvbnMpO1xuJykgJSB7J25hbWUnOiBuYW1lfQorCitbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD03NGZlNzYzMWNlMzc3YTk0XSovCisKKwogLyogTFpNQUNvbXByZXNzb3IgY2xhc3MuICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC00OTQsNDQgKzU0Myw1MSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoQ29tcHJlc3Nvcl9jb21wcmVzc19kb2MsCi0iY29tcHJlc3MoZGF0YSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LiBSZXR1cm5zIGEgY2h1bmsgb2ZcbiIKLSJjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcIlwiIG90aGVyd2lzZS5cbiIKLSJcbiIKLSJXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHByb3ZpZGluZyBkYXRhIHRvIHRoZSBjb21wcmVzc29yLCBjYWxsIHRoZVxuIgotImZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29udmVyc2lvbiBwcm9jZXNzLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5MWk1BQ29tcHJlc3Nvci5jb21wcmVzcworCisgICAgc2VsZjogc2VsZih0eXBlPSJDb21wcmVzc29yICoiKQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworUHJvdmlkZSBkYXRhIHRvIHRoZSBjb21wcmVzc29yIG9iamVjdC4KKworUmV0dXJucyBhIGNodW5rIG9mIGNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYicnIG90aGVyd2lzZS4KKworV2hlbiB5b3UgaGF2ZSBmaW5pc2hlZCBwcm92aWRpbmcgZGF0YSB0byB0aGUgY29tcHJlc3NvciwgY2FsbCB0aGUKK2ZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLUNvbXByZXNzb3JfY29tcHJlc3MoQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKENvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zMWY2MTUxMzY5NjNlMDBmIGlucHV0PThiNjBjYjEzZTBjZTY0MjBdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5Kjpjb21wcmVzcyIsICZidWZmZXIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIEFDUVVJUkVfTE9DSyhzZWxmKTsKICAgICBpZiAoc2VsZi0+Zmx1c2hlZCkKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJDb21wcmVzc29yIGhhcyBiZWVuIGZsdXNoZWQiKTsKICAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IGNvbXByZXNzKHNlbGYsIGJ1ZmZlci5idWYsIGJ1ZmZlci5sZW4sIExaTUFfUlVOKTsKKyAgICAgICAgcmVzdWx0ID0gY29tcHJlc3Moc2VsZiwgZGF0YS0+YnVmLCBkYXRhLT5sZW4sIExaTUFfUlVOKTsKICAgICBSRUxFQVNFX0xPQ0soc2VsZik7Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmYnVmZmVyKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1QeURvY19TVFJWQVIoQ29tcHJlc3Nvcl9mbHVzaF9kb2MsCi0iZmx1c2goKSAtPiBieXRlc1xuIgotIlxuIgotIkZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4gUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnRcbiIKLSJpbiBpbnRlcm5hbCBidWZmZXJzLlxuIgotIlxuIgotIlRoZSBjb21wcmVzc29yIG9iamVjdCBjYW5ub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLkxaTUFDb21wcmVzc29yLmZsdXNoCisKKyAgICBzZWxmOiBzZWxmKHR5cGU9IkNvbXByZXNzb3IgKiIpCisKK0ZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4KKworUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnQgaW4gaW50ZXJuYWwgYnVmZmVycy4KKworVGhlIGNvbXByZXNzb3Igb2JqZWN0IG1heSBub3QgYmUgdXNlZCBhZnRlciB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Db21wcmVzc29yX2ZsdXNoKENvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCitfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaF9pbXBsKENvbXByZXNzb3IgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZmVjMjFmM2UyMjUwNGY1MCBpbnB1dD0zMDYwZmIyNmY5YjQwNDJjXSovCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKQEAgLTYzMiw2ICs2ODgsMzkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKKy8qWy1jbGluaWMgaW5wdXRdCitfbHptYS5MWk1BQ29tcHJlc3Nvci5fX2luaXRfXworCisgICAgc2VsZjogc2VsZih0eXBlPSJDb21wcmVzc29yICoiKQorICAgIGZvcm1hdDogaW50KGNfZGVmYXVsdD0iRk9STUFUX1haIikgPSBGT1JNQVRfWFoKKyAgICAgICAgVGhlIGNvbnRhaW5lciBmb3JtYXQgdG8gdXNlIGZvciB0aGUgb3V0cHV0LiAgVGhpcyBjYW4KKyAgICAgICAgYmUgRk9STUFUX1haIChkZWZhdWx0KSwgRk9STUFUX0FMT05FLCBvciBGT1JNQVRfUkFXLgorCisgICAgY2hlY2s6IGludChjX2RlZmF1bHQ9Ii0xIikgPSB1bnNwZWNpZmllZAorICAgICAgICBUaGUgaW50ZWdyaXR5IGNoZWNrIHRvIHVzZS4gIEZvciBGT1JNQVRfWFosIHRoZSBkZWZhdWx0CisgICAgICAgIGlzIENIRUNLX0NSQzY0LiAgRk9STUFUX0FMT05FIGFuZCBGT1JNQVRfUkFXIGRvIG5vdCBzdXBvcnQgaW50ZWdyaXR5CisgICAgICAgIGNoZWNrczsgZm9yIHRoZXNlIGZvcm1hdHMsIGNoZWNrIG11c3QgYmUgb21pdHRlZCwgb3IgYmUgQ0hFQ0tfTk9ORS4KKworICAgIHByZXNldDogb2JqZWN0ID0gTm9uZQorICAgICAgICBJZiBwcm92aWRlZCBzaG91bGQgYmUgYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05LCBvcHRpb25hbGx5CisgICAgICAgIE9SLWVkIHdpdGggdGhlIGNvbnN0YW50IFBSRVNFVF9FWFRSRU1FLgorCisgICAgZmlsdGVyczogb2JqZWN0ID0gTm9uZQorICAgICAgICBJZiBwcm92aWRlZCBzaG91bGQgYmUgYSBzZXF1ZW5jZSBvZiBkaWN0cy4gIEVhY2ggZGljdCBzaG91bGQKKyAgICAgICAgaGF2ZSBhbiBlbnRyeSBmb3IgImlkIiBpbmRpY2F0aW5nIHRoZSBJRCBvZiB0aGUgZmlsdGVyLCBwbHVzCisgICAgICAgIGFkZGl0aW9uYWwgZW50cmllcyBmb3Igb3B0aW9ucyB0byB0aGUgZmlsdGVyLgorCitDcmVhdGUgYSBjb21wcmVzc29yIG9iamVjdCBmb3IgY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LgorCitUaGUgc2V0dGluZ3MgdXNlZCBieSB0aGUgY29tcHJlc3NvciBjYW4gYmUgc3BlY2lmaWVkIGVpdGhlciBhcyBhCitwcmVzZXQgY29tcHJlc3Npb24gbGV2ZWwgKHdpdGggdGhlICdwcmVzZXQnIGFyZ3VtZW50KSwgb3IgaW4gZGV0YWlsCithcyBhIGN1c3RvbSBmaWx0ZXIgY2hhaW4gKHdpdGggdGhlICdmaWx0ZXJzJyBhcmd1bWVudCkuICBGb3IgRk9STUFUX1haCithbmQgRk9STUFUX0FMT05FLCB0aGUgZGVmYXVsdCBpcyB0byB1c2UgdGhlIFBSRVNFVF9ERUZBVUxUIHByZXNldAorbGV2ZWwuICBGb3IgRk9STUFUX1JBVywgdGhlIGNhbGxlciBtdXN0IGFsd2F5cyBzcGVjaWZ5IGEgZmlsdGVyIGNoYWluOwordGhlIHJhdyBjb21wcmVzc29yIGRvZXMgbm90IHN1cHBvcnQgcHJlc2V0IGNvbXByZXNzaW9uIGxldmVscy4KKworRm9yIG9uZS1zaG90IGNvbXByZXNzaW9uLCB1c2UgdGhlIGNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1stY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiBzdGF0aWMgaW50CiBDb21wcmVzc29yX2luaXQoQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CkBAIC02NjQsNiArNzUzLDExIEBACiAgICAgICAgIGlmICghdWludDMyX2NvbnZlcnRlcihwcmVzZXRfb2JqLCAmcHJlc2V0KSkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAorICAgIHNlbGYtPmFsbG9jLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YWxsb2MuYWxsb2MgPSBQeUx6bWFfTWFsbG9jOworICAgIHNlbGYtPmFsbG9jLmZyZWUgPSBQeUx6bWFfRnJlZTsKKyAgICBzZWxmLT5senMuYWxsb2NhdG9yID0gJnNlbGYtPmFsbG9jOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKQEAgLTcxNiwxMCArODEwLDggQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIENvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBDb21wcmVzc29yX2NvbXByZXNzX2RvY30sCi0gICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbilDb21wcmVzc29yX2ZsdXNoLCBNRVRIX05PQVJHUywKLSAgICAgQ29tcHJlc3Nvcl9mbHVzaF9kb2N9LAorICAgIF9MWk1BX0xaTUFDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRgorICAgIF9MWk1BX0xaTUFDT01QUkVTU09SX0ZMVVNIX01FVEhPRERFRgogICAgIHsiX19nZXRzdGF0ZV9fIiwgKFB5Q0Z1bmN0aW9uKUNvbXByZXNzb3JfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTH0KIH07CkBAIC04NDksMzIgKzk0MSwzNCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi1QeURvY19TVFJWQVIoRGVjb21wcmVzc29yX2RlY29tcHJlc3NfZG9jLAotImRlY29tcHJlc3MoZGF0YSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuIFJldHVybnMgYSBjaHVuayBvZlxuIgotImRlY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiXCJcIiBvdGhlcndpc2UuXG4iCi0iXG4iCi0iQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgc3RyZWFtIGlzXG4iCi0icmVhY2hlZCByYWlzZXMgYW4gRU9GRXJyb3IuIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlXG4iCi0ic3RyZWFtIGlzIGlnbm9yZWQsIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5MWk1BRGVjb21wcmVzc29yLmRlY29tcHJlc3MKKworICAgIHNlbGY6IHNlbGYodHlwZT0iRGVjb21wcmVzc29yICoiKQorICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworUHJvdmlkZSBkYXRhIHRvIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0LgorCitSZXR1cm5zIGEgY2h1bmsgb2YgZGVjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGInJyBvdGhlcndpc2UuCisKK0F0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWQKK3JhaXNlcyBhbiBFT0ZFcnJvci4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbQoraXMgaWdub3JlZCBhbmQgc2F2ZWQgaW4gdGhlIHVudXNlZF9kYXRhIGF0dHJpYnV0ZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLURlY29tcHJlc3Nvcl9kZWNvbXByZXNzKERlY29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfaW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kODZlNzhkYTdmZjBmZjIxIGlucHV0PTUwYzQ3NjhiODIxYmYwZWZdKi8KIHsKLSAgICBQeV9idWZmZXIgYnVmZmVyOwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpkZWNvbXByZXNzIiwgJmJ1ZmZlcikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgQUNRVUlSRV9MT0NLKHNlbGYpOwogICAgIGlmIChzZWxmLT5lb2YpCiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19FT0ZFcnJvciwgIkFscmVhZHkgYXQgZW5kIG9mIHN0cmVhbSIpOwogICAgIGVsc2UKLSAgICAgICAgcmVzdWx0ID0gZGVjb21wcmVzcyhzZWxmLCBidWZmZXIuYnVmLCBidWZmZXIubGVuKTsKKyAgICAgICAgcmVzdWx0ID0gZGVjb21wcmVzcyhzZWxmLCBkYXRhLT5idWYsIGRhdGEtPmxlbik7CiAgICAgUkVMRUFTRV9MT0NLKHNlbGYpOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtOTAyLDQzICs5OTYsNjYgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19sem1hLkxaTUFEZWNvbXByZXNzb3IuX19pbml0X18KKworICAgIHNlbGY6IHNlbGYodHlwZT0iRGVjb21wcmVzc29yICoiKQorICAgIGZvcm1hdDogaW50KGNfZGVmYXVsdD0iRk9STUFUX0FVVE8iKSA9IEZPUk1BVF9BVVRPCisgICAgICAgIFNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCBvZiB0aGUgaW5wdXQgc3RyZWFtLiAgSWYgdGhpcyBpcworICAgICAgICBGT1JNQVRfQVVUTyAodGhlIGRlZmF1bHQpLCB0aGUgZGVjb21wcmVzc29yIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3QKKyAgICAgICAgd2hldGhlciB0aGUgaW5wdXQgaXMgRk9STUFUX1haIG9yIEZPUk1BVF9BTE9ORS4gIFN0cmVhbXMgY3JlYXRlZCB3aXRoCisgICAgICAgIEZPUk1BVF9SQVcgY2Fubm90IGJlIGF1dG9kZXRlY3RlZC4KKworICAgIG1lbWxpbWl0OiBvYmplY3QgPSBOb25lCisgICAgICAgIExpbWl0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIGRlY29tcHJlc3Nvci4gIFRoaXMgd2lsbCBjYXVzZQorICAgICAgICBkZWNvbXByZXNzaW9uIHRvIGZhaWwgaWYgdGhlIGlucHV0IGNhbm5vdCBiZSBkZWNvbXByZXNzZWQgd2l0aGluIHRoZQorICAgICAgICBnaXZlbiBsaW1pdC4KKworICAgIGZpbHRlcnM6IG9iamVjdCA9IE5vbmUKKyAgICAgICAgQSBjdXN0b20gZmlsdGVyIGNoYWluLiAgVGhpcyBhcmd1bWVudCBpcyByZXF1aXJlZCBmb3IgRk9STUFUX1JBVywgYW5kCisgICAgICAgIG5vdCBhY2NlcHRlZCB3aXRoIGFueSBvdGhlciBmb3JtYXQuICBXaGVuIHByb3ZpZGVkLCB0aGlzIHNob3VsZCBiZSBhCisgICAgICAgIHNlcXVlbmNlIG9mIGRpY3RzLCBlYWNoIGluZGljYXRpbmcgdGhlIElEIGFuZCBvcHRpb25zIGZvciBhIHNpbmdsZQorICAgICAgICBmaWx0ZXIuCisKK0NyZWF0ZSBhIGRlY29tcHJlc3NvciBvYmplY3QgZm9yIGRlY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LgorCitGb3Igb25lLXNob3QgZGVjb21wcmVzc2lvbiwgdXNlIHRoZSBkZWNvbXByZXNzKCkgZnVuY3Rpb24gaW5zdGVhZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIGludAotRGVjb21wcmVzc29yX2luaXQoRGVjb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X19faW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIGludCBmb3JtYXQsIFB5T2JqZWN0ICptZW1saW1pdCwgUHlPYmplY3QgKmZpbHRlcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWIxMTlmNmYyY2MyZDdhOCBpbnB1dD00NThjYTYxMzJlZjI5ODAxXSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmFyZ19uYW1lc1tdID0geyJmb3JtYXQiLCAibWVtbGltaXQiLCAiZmlsdGVycyIsIE5VTEx9OwogICAgIGNvbnN0IHVpbnQzMl90IGRlY29kZXJfZmxhZ3MgPSBMWk1BX1RFTExfQU5ZX0NIRUNLIHwgTFpNQV9URUxMX05PX0NIRUNLOwotICAgIGludCBmb3JtYXQgPSBGT1JNQVRfQVVUTzsKLSAgICB1aW50NjRfdCBtZW1saW1pdCA9IFVJTlQ2NF9NQVg7Ci0gICAgUHlPYmplY3QgKm1lbWxpbWl0X29iaiA9IFB5X05vbmU7Ci0gICAgUHlPYmplY3QgKmZpbHRlcnNwZWNzID0gUHlfTm9uZTsKKyAgICB1aW50NjRfdCBtZW1saW1pdF8gPSBVSU5UNjRfTUFYOwogICAgIGx6bWFfcmV0IGx6cmV0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ8aU9POkxaTUFEZWNvbXByZXNzb3IiLCBhcmdfbmFtZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZvcm1hdCwgJm1lbWxpbWl0X29iaiwgJmZpbHRlcnNwZWNzKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgaWYgKG1lbWxpbWl0X29iaiAhPSBQeV9Ob25lKSB7CisgICAgaWYgKG1lbWxpbWl0ICE9IFB5X05vbmUpIHsKICAgICAgICAgaWYgKGZvcm1hdCA9PSBGT1JNQVRfUkFXKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgbWVtb3J5IGxpbWl0IHdpdGggRk9STUFUX1JBVyIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIG1lbWxpbWl0ID0gUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyhtZW1saW1pdF9vYmopOworICAgICAgICBtZW1saW1pdF8gPSBQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nKG1lbWxpbWl0KTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKGZvcm1hdCA9PSBGT1JNQVRfUkFXICYmIGZpbHRlcnNwZWNzID09IFB5X05vbmUpIHsKKyAgICBpZiAoZm9ybWF0ID09IEZPUk1BVF9SQVcgJiYgZmlsdGVycyA9PSBQeV9Ob25lKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIk11c3Qgc3BlY2lmeSBmaWx0ZXJzIGZvciBGT1JNQVRfUkFXIik7CiAgICAgICAgIHJldHVybiAtMTsKLSAgICB9IGVsc2UgaWYgKGZvcm1hdCAhPSBGT1JNQVRfUkFXICYmIGZpbHRlcnNwZWNzICE9IFB5X05vbmUpIHsKKyAgICB9IGVsc2UgaWYgKGZvcm1hdCAhPSBGT1JNQVRfUkFXICYmIGZpbHRlcnMgIT0gUHlfTm9uZSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc3BlY2lmeSBmaWx0ZXJzIGV4Y2VwdCB3aXRoIEZPUk1BVF9SQVciKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAorICAgIHNlbGYtPmFsbG9jLm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+YWxsb2MuYWxsb2MgPSBQeUx6bWFfTWFsbG9jOworICAgIHNlbGYtPmFsbG9jLmZyZWUgPSBQeUx6bWFfRnJlZTsKKyAgICBzZWxmLT5senMuYWxsb2NhdG9yID0gJnNlbGYtPmFsbG9jOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOwogICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKQEAgLTk1NCwyNyArMTA3MSwyNyBAQAogCiAgICAgc3dpdGNoIChmb3JtYXQpIHsKICAgICAgICAgY2FzZSBGT1JNQVRfQVVUTzoKLSAgICAgICAgICAgIGx6cmV0ID0gbHptYV9hdXRvX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXQsIGRlY29kZXJfZmxhZ3MpOworICAgICAgICAgICAgbHpyZXQgPSBsem1hX2F1dG9fZGVjb2Rlcigmc2VsZi0+bHpzLCBtZW1saW1pdF8sIGRlY29kZXJfZmxhZ3MpOwogICAgICAgICAgICAgaWYgKGNhdGNoX2x6bWFfZXJyb3IobHpyZXQpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAKICAgICAgICAgY2FzZSBGT1JNQVRfWFo6Ci0gICAgICAgICAgICBsenJldCA9IGx6bWFfc3RyZWFtX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXQsIGRlY29kZXJfZmxhZ3MpOworICAgICAgICAgICAgbHpyZXQgPSBsem1hX3N0cmVhbV9kZWNvZGVyKCZzZWxmLT5senMsIG1lbWxpbWl0XywgZGVjb2Rlcl9mbGFncyk7CiAgICAgICAgICAgICBpZiAoY2F0Y2hfbHptYV9lcnJvcihsenJldCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICBjYXNlIEZPUk1BVF9BTE9ORToKICAgICAgICAgICAgIHNlbGYtPmNoZWNrID0gTFpNQV9DSEVDS19OT05FOwotICAgICAgICAgICAgbHpyZXQgPSBsem1hX2Fsb25lX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXQpOworICAgICAgICAgICAgbHpyZXQgPSBsem1hX2Fsb25lX2RlY29kZXIoJnNlbGYtPmx6cywgbWVtbGltaXRfKTsKICAgICAgICAgICAgIGlmIChjYXRjaF9sem1hX2Vycm9yKGx6cmV0KSkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIHJldHVybiAwOwogCiAgICAgICAgIGNhc2UgRk9STUFUX1JBVzoKICAgICAgICAgICAgIHNlbGYtPmNoZWNrID0gTFpNQV9DSEVDS19OT05FOwotICAgICAgICAgICAgaWYgKERlY29tcHJlc3Nvcl9pbml0X3Jhdygmc2VsZi0+bHpzLCBmaWx0ZXJzcGVjcykgPT0gLTEpCisgICAgICAgICAgICBpZiAoRGVjb21wcmVzc29yX2luaXRfcmF3KCZzZWxmLT5senMsIGZpbHRlcnMpID09IC0xKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTEwMDYsOCArMTEyMyw3IEBACiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBEZWNvbXByZXNzb3JfbWV0aG9kc1tdID0gewotICAgIHsiZGVjb21wcmVzcyIsIChQeUNGdW5jdGlvbilEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLAotICAgICBEZWNvbXByZXNzb3JfZGVjb21wcmVzc19kb2N9LAorICAgIF9MWk1BX0xaTUFERUNPTVBSRVNTT1JfREVDT01QUkVTU19NRVRIT0RERUYKICAgICB7Il9fZ2V0c3RhdGVfXyIsIChQeUNGdW5jdGlvbilEZWNvbXByZXNzb3JfZ2V0c3RhdGUsIE1FVEhfTk9BUkdTfSwKICAgICB7TlVMTH0KIH07CkBAIC0xMDMxLDI3ICsxMTQ3LDYgQEAKICAgICB7TlVMTH0KIH07CiAKLVB5RG9jX1NUUlZBUihEZWNvbXByZXNzb3JfZG9jLAotIkxaTUFEZWNvbXByZXNzb3IoZm9ybWF0PUZPUk1BVF9BVVRPLCBtZW1saW1pdD1Ob25lLCBmaWx0ZXJzPU5vbmUpXG4iCi0iXG4iCi0iQ3JlYXRlIGEgZGVjb21wcmVzc29yIG9iamVjdCBmb3IgZGVjb21wcmVzc2luZyBkYXRhIGluY3JlbWVudGFsbHkuXG4iCi0iXG4iCi0iZm9ybWF0IHNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCBvZiB0aGUgaW5wdXQgc3RyZWFtLiBJZiB0aGlzIGlzXG4iCi0iRk9STUFUX0FVVE8gKHRoZSBkZWZhdWx0KSwgdGhlIGRlY29tcHJlc3NvciB3aWxsIGF1dG9tYXRpY2FsbHkgZGV0ZWN0XG4iCi0id2hldGhlciB0aGUgaW5wdXQgaXMgRk9STUFUX1haIG9yIEZPUk1BVF9BTE9ORS4gU3RyZWFtcyBjcmVhdGVkIHdpdGhcbiIKLSJGT1JNQVRfUkFXIGNhbm5vdCBiZSBhdXRvZGV0ZWN0ZWQuXG4iCi0iXG4iCi0ibWVtbGltaXQgY2FuIGJlIHNwZWNpZmllZCB0byBsaW1pdCB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZVxuIgotImRlY29tcHJlc3Nvci4gVGhpcyB3aWxsIGNhdXNlIGRlY29tcHJlc3Npb24gdG8gZmFpbCBpZiB0aGUgaW5wdXRcbiIKLSJjYW5ub3QgYmUgZGVjb21wcmVzc2VkIHdpdGhpbiB0aGUgZ2l2ZW4gbGltaXQuXG4iCi0iXG4iCi0iZmlsdGVycyBzcGVjaWZpZXMgYSBjdXN0b20gZmlsdGVyIGNoYWluLiBUaGlzIGFyZ3VtZW50IGlzIHJlcXVpcmVkIGZvclxuIgotIkZPUk1BVF9SQVcsIGFuZCBub3QgYWNjZXB0ZWQgd2l0aCBhbnkgb3RoZXIgZm9ybWF0LiBXaGVuIHByb3ZpZGVkLFxuIgotInRoaXMgc2hvdWxkIGJlIGEgc2VxdWVuY2Ugb2YgZGljdHMsIGVhY2ggaW5kaWNhdGluZyB0aGUgSUQgYW5kIG9wdGlvbnNcbiIKLSJmb3IgYSBzaW5nbGUgZmlsdGVyLlxuIgotIlxuIgotIkZvciBvbmUtc2hvdCBkZWNvbXByZXNzaW9uLCB1c2UgdGhlIGRlY29tcHJlc3MoKSBmdW5jdGlvbiBpbnN0ZWFkLlxuIik7Ci0KIHN0YXRpYyBQeVR5cGVPYmplY3QgRGVjb21wcmVzc29yX3R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgIl9sem1hLkxaTUFEZWNvbXByZXNzb3IiLCAgICAgICAgICAgLyogdHBfbmFtZSAqLwpAQCAtMTA3Myw3ICsxMTY4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRybyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwogICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgIC8qIHRwX2ZsYWdzICovCi0gICAgRGVjb21wcmVzc29yX2RvYywgICAgICAgICAgICAgICAgICAgLyogdHBfZG9jICovCisgICAgX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF90cmF2ZXJzZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KQEAgLTEwODgsNyArMTE4Myw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3JfZ2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVzY3Jfc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgIChpbml0cHJvYylEZWNvbXByZXNzb3JfaW5pdCwgICAgICAgIC8qIHRwX2luaXQgKi8KKyAgICBfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fLCAgICAvKiB0cF9pbml0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKiB0cF9uZXcgKi8KIH07CkBAIC0xMDk2LDQ4ICsxMTkxLDQyIEBACiAKIC8qIE1vZHVsZS1sZXZlbCBmdW5jdGlvbnMuICovCiAKLVB5RG9jX1NUUlZBUihpc19jaGVja19zdXBwb3J0ZWRfZG9jLAotImlzX2NoZWNrX3N1cHBvcnRlZChjaGVja19pZCkgLT4gYm9vbFxuIgotIlxuIgotIlRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gaW50ZWdyaXR5IGNoZWNrIGlzIHN1cHBvcnRlZC5cbiIKLSJcbiIKLSJBbHdheXMgcmV0dXJucyBUcnVlIGZvciBDSEVDS19OT05FIGFuZCBDSEVDS19DUkMzMi5cbiIpOworLypbY2xpbmljIGlucHV0XQorX2x6bWEuaXNfY2hlY2tfc3VwcG9ydGVkCisgICAgY2hlY2tfaWQ6IGludAorICAgIC8KKworVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiBpbnRlZ3JpdHkgY2hlY2sgaXMgc3VwcG9ydGVkLgorCitBbHdheXMgcmV0dXJucyBUcnVlIGZvciBDSEVDS19OT05FIGFuZCBDSEVDS19DUkMzMi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWlzX2NoZWNrX3N1cHBvcnRlZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgY2hlY2tfaWQpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmI4MjhlOTBlMDBhZDk2ZSBpbnB1dD01NTE4Mjk3Yjk3YjIzMThmXSovCiB7Ci0gICAgaW50IGNoZWNrX2lkOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOmlzX2NoZWNrX3N1cHBvcnRlZCIsICZjaGVja19pZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhsem1hX2NoZWNrX2lzX3N1cHBvcnRlZChjaGVja19pZCkpOwogfQogCiAKLVB5RG9jX1NUUlZBUihfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2RvYywKLSJfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKGZpbHRlcikgLT4gYnl0ZXNcbiIKLSJcbiIKLSJSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXJcbiIKLSJzcGVjaWZpZWQgYnkgKmZpbHRlciogKGEgZGljdCkuXG4iCi0iXG4iCi0iVGhlIHJlc3VsdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmaWx0ZXIgSUQgaXRzZWxmLCBvbmx5IHRoZSBvcHRpb25zLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzCisgICAgZmlsdGVyOiBsem1hX2ZpbHRlcihjX2RlZmF1bHQ9IntMWk1BX1ZMSV9VTktOT1dOLCBOVUxMfSIpCisgICAgLworCitSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXIgc3BlY2lmaWVkIGJ5ICpmaWx0ZXIqIChhIGRpY3QpLgorCitUaGUgcmVzdWx0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZpbHRlciBJRCBpdHNlbGYsIG9ubHkgdGhlIG9wdGlvbnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBsem1hX2ZpbHRlciBmaWx0ZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YjVmZTY5MGFjZDZiNjFkMSBpbnB1dD1kNGM2NGYxYjU1N2M3N2Q0XSovCiB7Ci0gICAgUHlPYmplY3QgKmZpbHRlcnNwZWM7Ci0gICAgbHptYV9maWx0ZXIgZmlsdGVyOwogICAgIGx6bWFfcmV0IGx6cmV0OwogICAgIHVpbnQzMl90IGVuY29kZWRfc2l6ZTsKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzIiwgJmZpbHRlcnNwZWMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGlmIChwYXJzZV9maWx0ZXJfc3BlYygmZmlsdGVyLCBmaWx0ZXJzcGVjKSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGx6cmV0ID0gbHptYV9wcm9wZXJ0aWVzX3NpemUoJmVuY29kZWRfc2l6ZSwgJmZpbHRlcik7CiAgICAgaWYgKGNhdGNoX2x6bWFfZXJyb3IobHpyZXQpKQogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTE1MSwzNyArMTI0MCwzNiBAQAogICAgIGlmIChjYXRjaF9sem1hX2Vycm9yKGx6cmV0KSkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIFB5TWVtX0ZyZWUoZmlsdGVyLm9wdGlvbnMpOwogICAgIHJldHVybiByZXN1bHQ7CiAKIGVycm9yOgogICAgIFB5X1hERUNSRUYocmVzdWx0KTsKLSAgICBQeU1lbV9GcmVlKGZpbHRlci5vcHRpb25zKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAogCi1QeURvY19TVFJWQVIoX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19kb2MsCi0iX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhmaWx0ZXJfaWQsIGVuY29kZWRfcHJvcHMpIC0+IGRpY3RcbiIKLSJcbiIKLSJSZXR1cm4gYSBkaWN0IGRlc2NyaWJpbmcgYSBmaWx0ZXIgd2l0aCBJRCAqZmlsdGVyX2lkKiwgYW5kIG9wdGlvbnNcbiIKLSIocHJvcGVydGllcykgZGVjb2RlZCBmcm9tIHRoZSBieXRlcyBvYmplY3QgKmVuY29kZWRfcHJvcHMqLlxuIik7CisvKltjbGluaWMgaW5wdXRdCitfbHptYS5fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzCisgICAgZmlsdGVyX2lkOiBsem1hX3ZsaQorICAgIGVuY29kZWRfcHJvcHM6IFB5X2J1ZmZlcgorICAgIC8KKworUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGVuY29kaW5nIHRoZSBvcHRpb25zIChwcm9wZXJ0aWVzKSBvZiB0aGUgZmlsdGVyIHNwZWNpZmllZCBieSAqZmlsdGVyKiAoYSBkaWN0KS4KKworVGhlIHJlc3VsdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmaWx0ZXIgSUQgaXRzZWxmLCBvbmx5IHRoZSBvcHRpb25zLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfbHptYV9fZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgbHptYV92bGkgZmlsdGVyX2lkLCBQeV9idWZmZXIgKmVuY29kZWRfcHJvcHMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjM1ZjdmNTM0NWQ0ODc0NCBpbnB1dD0yNDY0MTA4MDA3ODIxNjBjXSovCiB7Ci0gICAgUHlfYnVmZmVyIGVuY29kZWRfcHJvcHM7CiAgICAgbHptYV9maWx0ZXIgZmlsdGVyOwogICAgIGx6bWFfcmV0IGx6cmV0OwogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJnkqOl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBsem1hX3ZsaV9jb252ZXJ0ZXIsICZmaWx0ZXIuaWQsICZlbmNvZGVkX3Byb3BzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZmlsdGVyLmlkID0gZmlsdGVyX2lkOwogCiAgICAgbHpyZXQgPSBsem1hX3Byb3BlcnRpZXNfZGVjb2RlKAotICAgICAgICAgICAgJmZpbHRlciwgTlVMTCwgZW5jb2RlZF9wcm9wcy5idWYsIGVuY29kZWRfcHJvcHMubGVuKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZlbmNvZGVkX3Byb3BzKTsKKyAgICAgICAgICAgICZmaWx0ZXIsIE5VTEwsIGVuY29kZWRfcHJvcHMtPmJ1ZiwgZW5jb2RlZF9wcm9wcy0+bGVuKTsKICAgICBpZiAoY2F0Y2hfbHptYV9lcnJvcihsenJldCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMTk3LDEyICsxMjg1LDkgQEAKIC8qIE1vZHVsZSBpbml0aWFsaXphdGlvbi4gKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIG1vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAgeyJpc19jaGVja19zdXBwb3J0ZWQiLCAoUHlDRnVuY3Rpb24paXNfY2hlY2tfc3VwcG9ydGVkLAotICAgICBNRVRIX1ZBUkFSR1MsIGlzX2NoZWNrX3N1cHBvcnRlZF9kb2N9LAotICAgIHsiX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIChQeUNGdW5jdGlvbilfZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLAotICAgICBNRVRIX1ZBUkFSR1MsIF9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfZG9jfSwKLSAgICB7Il9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLCAoUHlDRnVuY3Rpb24pX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcywKLSAgICAgTUVUSF9WQVJBUkdTLCBfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzX2RvY30sCisgICAgX0xaTUFfSVNfQ0hFQ0tfU1VQUE9SVEVEX01FVEhPRERFRgorICAgIF9MWk1BX19FTkNPREVfRklMVEVSX1BST1BFUlRJRVNfTUVUSE9EREVGCisgICAgX0xaTUFfX0RFQ09ERV9GSUxURVJfUFJPUEVSVElFU19NRVRIT0RERUYKICAgICB7TlVMTH0KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX21hdGguYyBiL01vZHVsZXMvX21hdGguYwppbmRleCBhMTRmZjA2Li5hMDAyMjA4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tYXRoLmMKKysrIGIvTW9kdWxlcy9fbWF0aC5jCkBAIC0yNDAsNyArMjQwLDcgQEAKICAgICAgICAgcmV0dXJuIHg7CiAgICAgfQogICAgIGVsc2UgaWYgKC0wLjUgPD0geCAmJiB4IDw9IDEuKSB7Ci0gICAgICAgIC8qIFdBUk5JTkc6IGl0J3MgcG9zc2libGUgdGhhbiBhbiBvdmVyZWFnZXIgY29tcGlsZXIKKyAgICAgICAgLyogV0FSTklORzogaXQncyBwb3NzaWJsZSB0aGF0IGFuIG92ZXJlYWdlciBjb21waWxlcgogICAgICAgICAgICB3aWxsIGluY29ycmVjdGx5IG9wdGltaXplIHRoZSBmb2xsb3dpbmcgdHdvIGxpbmVzCiAgICAgICAgICAgIHRvIHRoZSBlcXVpdmFsZW50IG9mICJyZXR1cm4gbG9nKDEuK3gpIi4gSWYgdGhpcwogICAgICAgICAgICBoYXBwZW5zLCB0aGVuIHJlc3VsdHMgZnJvbSBsb2cxcCB3aWxsIGJlIGluYWNjdXJhdGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuYwppbmRleCA5NDYwYzg5Li40YWU2MzhlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5jCkBAIC0xMCwyNSArMTAsMjMgQEAKICNpbmNsdWRlICJtdWx0aXByb2Nlc3NpbmcuaCIKIAogCi1QeU9iamVjdCAqUHJvY2Vzc0Vycm9yLCAqQnVmZmVyVG9vU2hvcnQ7Ci0KIC8qCiAgKiBGdW5jdGlvbiB3aGljaCByYWlzZXMgZXhjZXB0aW9ucyBiYXNlZCBvbiBlcnJvciBjb2RlcwogICovCiAKIFB5T2JqZWN0ICoKLW1wX1NldEVycm9yKFB5T2JqZWN0ICpUeXBlLCBpbnQgbnVtKQorX1B5TXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pCiB7CiAgICAgc3dpdGNoIChudW0pIHsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgY2FzZSBNUF9TVEFOREFSRF9FUlJPUjoKICAgICAgICAgaWYgKFR5cGUgPT0gTlVMTCkKLSAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19XaW5kb3dzRXJyb3I7CisgICAgICAgICAgICBUeXBlID0gUHlFeGNfT1NFcnJvcjsKICAgICAgICAgUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnIoVHlwZSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTVBfU09DS0VUX0VSUk9SOgogICAgICAgICBpZiAoVHlwZSA9PSBOVUxMKQotICAgICAgICAgICAgVHlwZSA9IFB5RXhjX1dpbmRvd3NFcnJvcjsKKyAgICAgICAgICAgIFR5cGUgPSBQeUV4Y19PU0Vycm9yOwogICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihUeXBlLCBXU0FHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UgLyogIU1TX1dJTkRPV1MgKi8KQEAgLTEwMSwxMyArOTksMTUgQEAKIHsKICAgICBIQU5ETEUgaGFuZGxlOwogICAgIFB5X2J1ZmZlciBidWY7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0LCBsZW5ndGg7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgInkqOnNlbmQiICwgJmhhbmRsZSwgJmJ1ZikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbGVuZ3RoID0gKGludClQeV9NSU4oYnVmLmxlbiwgSU5UX01BWCk7CisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmV0ID0gc2VuZCgoU09DS0VUKSBoYW5kbGUsIGJ1Zi5idWYsIGJ1Zi5sZW4sIDApOworICAgIHJldCA9IHNlbmQoKFNPQ0tFVCkgaGFuZGxlLCBidWYuYnVmLCBsZW5ndGgsIDApOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOwpAQCAtMTI4LDYgKzEyOCw5IEBACiAgICAgeyJyZWN2IiwgbXVsdGlwcm9jZXNzaW5nX3JlY3YsIE1FVEhfVkFSQVJHUywgIiJ9LAogICAgIHsic2VuZCIsIG11bHRpcHJvY2Vzc2luZ19zZW5kLCBNRVRIX1ZBUkFSR1MsICIifSwKICNlbmRpZgorI2lmbmRlZiBQT1NJWF9TRU1BUEhPUkVTX05PVF9FTkFCTEVECisgICAgeyJzZW1fdW5saW5rIiwgX1B5TXBfc2VtX3VubGluaywgTUVUSF9WQVJBUkdTLCAiIn0sCisjZW5kaWYKICAgICB7TlVMTH0KIH07CiAKQEAgLTE1OSwxOSArMTYyLDEyIEBACiAgICAgaWYgKCFtb2R1bGUpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgLyogR2V0IGNvcHkgb2YgQnVmZmVyVG9vU2hvcnQgKi8KLSAgICB0ZW1wID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJtdWx0aXByb2Nlc3NpbmciKTsKLSAgICBpZiAoIXRlbXApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIEJ1ZmZlclRvb1Nob3J0ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyh0ZW1wLCAiQnVmZmVyVG9vU2hvcnQiKTsKLSAgICBQeV9YREVDUkVGKHRlbXApOwotCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgIChkZWZpbmVkKEhBVkVfU0VNX09QRU4pICYmICFkZWZpbmVkKFBPU0lYX1NFTUFQSE9SRVNfTk9UX0VOQUJMRUQpKQotICAgIC8qIEFkZCBTZW1Mb2NrIHR5cGUgdG8gbW9kdWxlICovCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmU2VtTG9ja1R5cGUpIDwgMCkKKyAgICAvKiBBZGQgX1B5TXBfU2VtTG9jayB0eXBlIHRvIG1vZHVsZSAqLworICAgIGlmIChQeVR5cGVfUmVhZHkoJl9QeU1wX1NlbUxvY2tUeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0lOQ1JFRigmU2VtTG9ja1R5cGUpOworICAgIFB5X0lOQ1JFRigmX1B5TXBfU2VtTG9ja1R5cGUpOwogICAgIHsKICAgICAgICAgUHlPYmplY3QgKnB5X3NlbV92YWx1ZV9tYXg7CiAgICAgICAgIC8qIFNvbWUgc3lzdGVtcyBkZWZpbmUgU0VNX1ZBTFVFX01BWCBhcyBhbiB1bnNpZ25lZCB2YWx1ZSB0aGF0CkBAIC0xODIsMTAgKzE3OCwxMCBAQAogICAgICAgICAgICAgcHlfc2VtX3ZhbHVlX21heCA9IFB5TG9uZ19Gcm9tTG9uZyhTRU1fVkFMVUVfTUFYKTsKICAgICAgICAgaWYgKHB5X3NlbV92YWx1ZV9tYXggPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhTZW1Mb2NrVHlwZS50cF9kaWN0LCAiU0VNX1ZBTFVFX01BWCIsCisgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKF9QeU1wX1NlbUxvY2tUeXBlLnRwX2RpY3QsICJTRU1fVkFMVUVfTUFYIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHlfc2VtX3ZhbHVlX21heCk7CiAgICAgfQotICAgIFB5TW9kdWxlX0FkZE9iamVjdChtb2R1bGUsICJTZW1Mb2NrIiwgKFB5T2JqZWN0KikmU2VtTG9ja1R5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtb2R1bGUsICJTZW1Mb2NrIiwgKFB5T2JqZWN0KikmX1B5TXBfU2VtTG9ja1R5cGUpOwogI2VuZGlmCiAKICAgICAvKiBBZGQgY29uZmlndXJhdGlvbiBtYWNyb3MgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaCBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9tdWx0aXByb2Nlc3NpbmcuaAppbmRleCBlM2RlOWJhLi45YWVlYThkIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3NpbmcvbXVsdGlwcm9jZXNzaW5nLmgKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL211bHRpcHJvY2Vzc2luZy5oCkBAIC05MSwyMyArOTEsMTMgQEAKICNkZWZpbmUgTVBfU09DS0VUX0VSUk9SICgtMTAwMikKICNkZWZpbmUgTVBfRVhDRVBUSU9OX0hBU19CRUVOX1NFVCAoLTEwMDMpCiAKLVB5T2JqZWN0ICptcF9TZXRFcnJvcihQeU9iamVjdCAqVHlwZSwgaW50IG51bSk7CitQeU9iamVjdCAqX1B5TXBfU2V0RXJyb3IoUHlPYmplY3QgKlR5cGUsIGludCBudW0pOwogCiAvKgogICogRXh0ZXJucyAtIG5vdCBhbGwgd2lsbCByZWFsbHkgZXhpc3Qgb24gYWxsIHBsYXRmb3JtcwogICovCiAKLWV4dGVybiBQeU9iamVjdCAqQnVmZmVyVG9vU2hvcnQ7Ci1leHRlcm4gUHlUeXBlT2JqZWN0IFNlbUxvY2tUeXBlOwotZXh0ZXJuIFB5VHlwZU9iamVjdCBQaXBlQ29ubmVjdGlvblR5cGU7Ci0KLS8qCi0gKiBNaXNjZWxsYW5lb3VzCi0gKi8KLQotI2lmbmRlZiBNSU4KLSMgIGRlZmluZSBNSU4oeCwgeSkgKCh4KSA8ICh5KSA/IHggOiB5KQotIyAgZGVmaW5lIE1BWCh4LCB5KSAoKHgpID4gKHkpID8geCA6IHkpCi0jZW5kaWYKK2V4dGVybiBQeVR5cGVPYmplY3QgX1B5TXBfU2VtTG9ja1R5cGU7CitleHRlcm4gUHlPYmplY3QgKl9QeU1wX3NlbV91bmxpbmsoUHlPYmplY3QgKmlnbm9yZSwgUHlPYmplY3QgKmFyZ3MpOwogCiAjZW5kaWYgLyogTVVMVElQUk9DRVNTSU5HX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYyBiL01vZHVsZXMvX211bHRpcHJvY2Vzc2luZy9zZW1hcGhvcmUuYwppbmRleCAyYzJiMDIwLi5kZTg1YTkwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19tdWx0aXByb2Nlc3Npbmcvc2VtYXBob3JlLmMKKysrIGIvTW9kdWxlcy9fbXVsdGlwcm9jZXNzaW5nL3NlbWFwaG9yZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAgICAgaW50IGNvdW50OwogICAgIGludCBtYXh2YWx1ZTsKICAgICBpbnQga2luZDsKKyAgICBjaGFyICpuYW1lOwogfSBTZW1Mb2NrT2JqZWN0OwogCiAjZGVmaW5lIElTTUlORShvKSAoby0+Y291bnQgPiAwICYmIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSA9PSBvLT5sYXN0X3RpZCkKQEAgLTQzLDcgKzQ0LDcgQEAKIHsKICAgICBsb25nIHByZXZpb3VzOwogCi0gICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0KGhhbmRsZSwgMCkpIHsKKyAgICBzd2l0Y2ggKFdhaXRGb3JTaW5nbGVPYmplY3RFeChoYW5kbGUsIDAsIEZBTFNFKSkgewogICAgIGNhc2UgV0FJVF9PQkpFQ1RfMDoKICAgICAgICAgaWYgKCFSZWxlYXNlU2VtYXBob3JlKGhhbmRsZSwgMSwgJnByZXZpb3VzKSkKICAgICAgICAgICAgIHJldHVybiBNUF9TVEFOREFSRF9FUlJPUjsKQEAgLTk5LDcgKzEwMCw3IEBACiAgICAgfQogCiAgICAgLyogY2hlY2sgd2hldGhlciB3ZSBjYW4gYWNxdWlyZSB3aXRob3V0IHJlbGVhc2luZyB0aGUgR0lMIGFuZCBibG9ja2luZyAqLwotICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0KHNlbGYtPmhhbmRsZSwgMCkgPT0gV0FJVF9PQkpFQ1RfMCkgeworICAgIGlmIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoc2VsZi0+aGFuZGxlLCAwLCBGQUxTRSkgPT0gV0FJVF9PQkpFQ1RfMCkgewogICAgICAgICBzZWxmLT5sYXN0X3RpZCA9IEdldEN1cnJlbnRUaHJlYWRJZCgpOwogICAgICAgICArK3NlbGYtPmNvdW50OwogICAgICAgICBQeV9SRVRVUk5fVFJVRTsKQEAgLTExOCw3ICsxMTksNyBAQAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBpZiAoc2lnaW50X2V2ZW50ICE9IE5VTEwpCiAgICAgICAgIFJlc2V0RXZlbnQoc2lnaW50X2V2ZW50KTsKLSAgICByZXMgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKG5oYW5kbGVzLCBoYW5kbGVzLCBGQUxTRSwgZnVsbF9tc2Vjcyk7CisgICAgcmVzID0gV2FpdEZvck11bHRpcGxlT2JqZWN0c0V4KG5oYW5kbGVzLCBoYW5kbGVzLCBGQUxTRSwgZnVsbF9tc2VjcywgRkFMU0UpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAvKiBoYW5kbGUgcmVzdWx0ICovCkBAIC0yMDAsNyArMjAxLDcgQEAKICNpZm5kZWYgSEFWRV9TRU1fVElNRURXQUlUCiAjICBkZWZpbmUgc2VtX3RpbWVkd2FpdChzZW0sZGVhZGxpbmUpIHNlbV90aW1lZHdhaXRfc2F2ZShzZW0sZGVhZGxpbmUsX3NhdmUpCiAKLWludAorc3RhdGljIGludAogc2VtX3RpbWVkd2FpdF9zYXZlKHNlbV90ICpzZW0sIHN0cnVjdCB0aW1lc3BlYyAqZGVhZGxpbmUsIFB5VGhyZWFkU3RhdGUgKl9zYXZlKQogewogICAgIGludCByZXM7CkBAIC0zOTcsNyArMzk4LDggQEAKICAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgotbmV3c2VtbG9ja29iamVjdChQeVR5cGVPYmplY3QgKnR5cGUsIFNFTV9IQU5ETEUgaGFuZGxlLCBpbnQga2luZCwgaW50IG1heHZhbHVlKQorbmV3c2VtbG9ja29iamVjdChQeVR5cGVPYmplY3QgKnR5cGUsIFNFTV9IQU5ETEUgaGFuZGxlLCBpbnQga2luZCwgaW50IG1heHZhbHVlLAorICAgICAgICAgICAgICAgICBjaGFyICpuYW1lKQogewogICAgIFNlbUxvY2tPYmplY3QgKnNlbGY7CiAKQEAgLTQwOSwyMSArNDExLDIyIEBACiAgICAgc2VsZi0+Y291bnQgPSAwOwogICAgIHNlbGYtPmxhc3RfdGlkID0gMDsKICAgICBzZWxmLT5tYXh2YWx1ZSA9IG1heHZhbHVlOworICAgIHNlbGYtPm5hbWUgPSBuYW1lOwogICAgIHJldHVybiAoUHlPYmplY3QqKXNlbGY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZW1sb2NrX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBjaGFyIGJ1ZmZlclsyNTZdOwogICAgIFNFTV9IQU5ETEUgaGFuZGxlID0gU0VNX0ZBSUxFRDsKLSAgICBpbnQga2luZCwgbWF4dmFsdWUsIHZhbHVlOworICAgIGludCBraW5kLCBtYXh2YWx1ZSwgdmFsdWUsIHVubGluazsKICAgICBQeU9iamVjdCAqcmVzdWx0OwotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2luZCIsICJ2YWx1ZSIsICJtYXh2YWx1ZSIsIE5VTEx9OwotICAgIHN0YXRpYyBpbnQgY291bnRlciA9IDA7CisgICAgY2hhciAqbmFtZSwgKm5hbWVfY29weSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJraW5kIiwgInZhbHVlIiwgIm1heHZhbHVlIiwgIm5hbWUiLCAidW5saW5rIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTH07CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiaWlpIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZraW5kLCAmdmFsdWUsICZtYXh2YWx1ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgImlpaXNpIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZraW5kLCAmdmFsdWUsICZtYXh2YWx1ZSwgJm5hbWUsICZ1bmxpbmspKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChraW5kICE9IFJFQ1VSU0lWRV9NVVRFWCAmJiBraW5kICE9IFNFTUFQSE9SRSkgewpAQCAtNDMxLDE4ICs0MzQsMjMgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgUHlPU19zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiL21wJWxkLSVkIiwgKGxvbmcpZ2V0cGlkKCksIGNvdW50ZXIrKyk7CisgICAgaWYgKCF1bmxpbmspIHsKKyAgICAgICAgbmFtZV9jb3B5ID0gUHlNZW1fTWFsbG9jKHN0cmxlbihuYW1lKSArIDEpOworICAgICAgICBpZiAobmFtZV9jb3B5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZhaWx1cmU7CisgICAgICAgIHN0cmNweShuYW1lX2NvcHksIG5hbWUpOworICAgIH0KIAogICAgIFNFTV9DTEVBUl9FUlJPUigpOwotICAgIGhhbmRsZSA9IFNFTV9DUkVBVEUoYnVmZmVyLCB2YWx1ZSwgbWF4dmFsdWUpOworICAgIGhhbmRsZSA9IFNFTV9DUkVBVEUobmFtZSwgdmFsdWUsIG1heHZhbHVlKTsKICAgICAvKiBPbiBXaW5kb3dzIHdlIHNob3VsZCBmYWlsIGlmIEdldExhc3RFcnJvcigpPT1FUlJPUl9BTFJFQURZX0VYSVNUUyAqLwogICAgIGlmIChoYW5kbGUgPT0gU0VNX0ZBSUxFRCB8fCBTRU1fR0VUX0xBU1RfRVJST1IoKSAhPSAwKQogICAgICAgICBnb3RvIGZhaWx1cmU7CiAKLSAgICBpZiAoU0VNX1VOTElOSyhidWZmZXIpIDwgMCkKKyAgICBpZiAodW5saW5rICYmIFNFTV9VTkxJTksobmFtZSkgPCAwKQogICAgICAgICBnb3RvIGZhaWx1cmU7CiAKLSAgICByZXN1bHQgPSBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUpOworICAgIHJlc3VsdCA9IG5ld3NlbWxvY2tvYmplY3QodHlwZSwgaGFuZGxlLCBraW5kLCBtYXh2YWx1ZSwgbmFtZV9jb3B5KTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgZ290byBmYWlsdXJlOwogCkBAIC00NTEsNyArNDU5LDggQEAKICAgZmFpbHVyZToKICAgICBpZiAoaGFuZGxlICE9IFNFTV9GQUlMRUQpCiAgICAgICAgIFNFTV9DTE9TRShoYW5kbGUpOwotICAgIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICBQeU1lbV9GcmVlKG5hbWVfY29weSk7CisgICAgX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00NjAsMTIgKzQ2OSwzMCBAQAogewogICAgIFNFTV9IQU5ETEUgaGFuZGxlOwogICAgIGludCBraW5kLCBtYXh2YWx1ZTsKKyAgICBjaGFyICpuYW1lLCAqbmFtZV9jb3B5ID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX1NFTV9IQU5ETEUgImlpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmtpbmQsICZtYXh2YWx1ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfU0VNX0hBTkRMRSAiaWl6IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmhhbmRsZSwgJmtpbmQsICZtYXh2YWx1ZSwgJm5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUpOworICAgIGlmIChuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgbmFtZV9jb3B5ID0gUHlNZW1fTWFsbG9jKHN0cmxlbihuYW1lKSArIDEpOworICAgICAgICBpZiAobmFtZV9jb3B5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgc3RyY3B5KG5hbWVfY29weSwgbmFtZSk7CisgICAgfQorCisjaWZuZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAobmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGhhbmRsZSA9IHNlbV9vcGVuKG5hbWUsIDApOworICAgICAgICBpZiAoaGFuZGxlID09IFNFTV9GQUlMRUQpIHsKKyAgICAgICAgICAgIFB5TWVtX0ZyZWUobmFtZV9jb3B5KTsKKyAgICAgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIHJldHVybiBuZXdzZW1sb2Nrb2JqZWN0KHR5cGUsIGhhbmRsZSwga2luZCwgbWF4dmFsdWUsIG5hbWVfY29weSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC00NzMsNiArNTAwLDcgQEAKIHsKICAgICBpZiAoc2VsZi0+aGFuZGxlICE9IFNFTV9GQUlMRUQpCiAgICAgICAgIFNFTV9DTE9TRShzZWxmLT5oYW5kbGUpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+bmFtZSk7CiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOwogfQogCkBAIC00OTgsNyArNTI2LDcgQEAKICNlbHNlCiAgICAgaW50IHN2YWw7CiAgICAgaWYgKFNFTV9HRVRWQUxVRShzZWxmLT5oYW5kbGUsICZzdmFsKSA8IDApCi0gICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgLyogc29tZSBwb3NpeCBpbXBsZW1lbnRhdGlvbnMgdXNlIG5lZ2F0aXZlIG51bWJlcnMgdG8gaW5kaWNhdGUKICAgICAgICB0aGUgbnVtYmVyIG9mIHdhaXRpbmcgdGhyZWFkcyAqLwogICAgIGlmIChzdmFsIDwgMCkKQEAgLTUxNCwxNiArNTQyLDE2IEBACiAgICAgaWYgKHNlbV90cnl3YWl0KHNlbGYtPmhhbmRsZSkgPCAwKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFQUdBSU4pCiAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKLSAgICAgICAgcmV0dXJuIG1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKKyAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoc2VtX3Bvc3Qoc2VsZi0+aGFuZGxlKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gbXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICAgICAgcmV0dXJuIF9QeU1wX1NldEVycm9yKE5VTEwsIE1QX1NUQU5EQVJEX0VSUk9SKTsKICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOwogICAgIH0KICNlbHNlCiAgICAgaW50IHN2YWw7CiAgICAgaWYgKFNFTV9HRVRWQUxVRShzZWxmLT5oYW5kbGUsICZzdmFsKSA8IDApCi0gICAgICAgIHJldHVybiBtcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CisgICAgICAgIHJldHVybiBfUHlNcF9TZXRFcnJvcihOVUxMLCBNUF9TVEFOREFSRF9FUlJPUik7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZygobG9uZylzdmFsID09IDApOwogI2VuZGlmCiB9CkBAIC01NzQsNiArNjAyLDggQEAKICAgICAgIiJ9LAogICAgIHsibWF4dmFsdWUiLCBUX0lOVCwgb2Zmc2V0b2YoU2VtTG9ja09iamVjdCwgbWF4dmFsdWUpLCBSRUFET05MWSwKICAgICAgIiJ9LAorICAgIHsibmFtZSIsIFRfU1RSSU5HLCBvZmZzZXRvZihTZW1Mb2NrT2JqZWN0LCBuYW1lKSwgUkVBRE9OTFksCisgICAgICIifSwKICAgICB7TlVMTH0KIH07CiAKQEAgLTU4MSw3ICs2MTEsNyBAQAogICogU2VtYXBob3JlIHR5cGUKICAqLwogCi1QeVR5cGVPYmplY3QgU2VtTG9ja1R5cGUgPSB7CitQeVR5cGVPYmplY3QgX1B5TXBfU2VtTG9ja1R5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKE5VTEwsIDApCiAgICAgLyogdHBfbmFtZSAgICAgICAgICAgKi8gIl9tdWx0aXByb2Nlc3NpbmcuU2VtTG9jayIsCiAgICAgLyogdHBfYmFzaWNzaXplICAgICAgKi8gc2l6ZW9mKFNlbUxvY2tPYmplY3QpLApAQCAtNjIxLDMgKzY1MSwyMyBAQAogICAgIC8qIHRwX2FsbG9jICAgICAgICAgICovIDAsCiAgICAgLyogdHBfbmV3ICAgICAgICAgICAgKi8gc2VtbG9ja19uZXcsCiB9OworCisvKgorICogRnVuY3Rpb24gdG8gdW5saW5rIHNlbWFwaG9yZSBuYW1lcworICovCisKK1B5T2JqZWN0ICoKK19QeU1wX3NlbV91bmxpbmsoUHlPYmplY3QgKmlnbm9yZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgY2hhciAqbmFtZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoU0VNX1VOTElOSyhuYW1lKSA8IDApIHsKKyAgICAgICAgX1B5TXBfU2V0RXJyb3IoTlVMTCwgTVBfU1RBTkRBUkRfRVJST1IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvX29wY29kZS5jIGIvTW9kdWxlcy9fb3Bjb2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlMzg4ZgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX29wY29kZS5jCkBAIC0wLDAgKzEsMTA5IEBACisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAib3Bjb2RlLmgiCisKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSBfb3Bjb2RlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD0xMTc0NDJlNjZlYjM3NmU2XSovCisKKy8qW2NsaW5pYyBpbnB1dF0KKworX29wY29kZS5zdGFja19lZmZlY3QgLT4gaW50CisKKyAgb3Bjb2RlOiBpbnQKKyAgb3Bhcmc6IG9iamVjdCA9IE5vbmUKKyAgLworCitDb21wdXRlIHRoZSBzdGFjayBlZmZlY3Qgb2YgdGhlIG9wY29kZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9vcGNvZGVfc3RhY2tfZWZmZWN0X19kb2NfXywKKyJzdGFja19lZmZlY3QoJG1vZHVsZSwgb3Bjb2RlLCBvcGFyZz1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29tcHV0ZSB0aGUgc3RhY2sgZWZmZWN0IG9mIHRoZSBvcGNvZGUuIik7CisKKyNkZWZpbmUgX09QQ09ERV9TVEFDS19FRkZFQ1RfTUVUSE9EREVGICAgIFwKKyAgICB7InN0YWNrX2VmZmVjdCIsIChQeUNGdW5jdGlvbilfb3Bjb2RlX3N0YWNrX2VmZmVjdCwgTUVUSF9WQVJBUkdTLCBfb3Bjb2RlX3N0YWNrX2VmZmVjdF9fZG9jX199LAorCitzdGF0aWMgaW50Citfb3Bjb2RlX3N0YWNrX2VmZmVjdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpvcGFyZyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfb3Bjb2RlX3N0YWNrX2VmZmVjdChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgb3Bjb2RlOworICAgIFB5T2JqZWN0ICpvcGFyZyA9IFB5X05vbmU7CisgICAgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIml8TzpzdGFja19lZmZlY3QiLAorICAgICAgICAmb3Bjb2RlLCAmb3BhcmcpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IF9vcGNvZGVfc3RhY2tfZWZmZWN0X2ltcGwobW9kdWxlLCBvcGNvZGUsIG9wYXJnKTsKKyAgICBpZiAoKF9yZXR1cm5fdmFsdWUgPT0gLTEpICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIGludAorX29wY29kZV9zdGFja19lZmZlY3RfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgb3Bjb2RlLCBQeU9iamVjdCAqb3BhcmcpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OWUxMTMzZjhkNTg3YmM2NyBpbnB1dD0yZDBhOWVlNTNjMDQxOGY1XSovCit7CisgICAgaW50IGVmZmVjdDsKKyAgICBpbnQgb3BhcmdfaW50ID0gMDsKKyAgICBpZiAoSEFTX0FSRyhvcGNvZGUpKSB7CisgICAgICAgIGlmIChvcGFyZyA9PSBQeV9Ob25lKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgInN0YWNrX2VmZmVjdDogb3Bjb2RlIHJlcXVpcmVzIG9wYXJnIGJ1dCBvcGFyZyB3YXMgbm90IHNwZWNpZmllZCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG9wYXJnX2ludCA9IChpbnQpUHlMb25nX0FzTG9uZyhvcGFyZyk7CisgICAgICAgIGlmICgob3BhcmdfaW50ID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIGlmIChvcGFyZyAhPSBQeV9Ob25lKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJzdGFja19lZmZlY3Q6IG9wY29kZSBkb2VzIG5vdCBwZXJtaXQgb3BhcmcgYnV0IG9wYXJnIHdhcyBzcGVjaWZpZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlZmZlY3QgPSBQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3Qob3Bjb2RlLCBvcGFyZ19pbnQpOworICAgIGlmIChlZmZlY3QgPT0gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1QpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBvcGNvZGUgb3Igb3BhcmciKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIGVmZmVjdDsKK30KKworCisKKworc3RhdGljIFB5TWV0aG9kRGVmCitvcGNvZGVfZnVuY3Rpb25zW10gPSAgeworICAgIF9PUENPREVfU1RBQ0tfRUZGRUNUX01FVEhPRERFRgorICAgIHtOVUxMLCBOVUxMLCAwLCBOVUxMfQorfTsKKworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG9wY29kZW1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl9vcGNvZGUiLAorICAgICJPcGNvZGUgc3VwcG9ydCBtb2R1bGUuIiwKKyAgICAtMSwKKyAgICBvcGNvZGVfZnVuY3Rpb25zLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DCitQeUluaXRfX29wY29kZSh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJm9wY29kZW1vZHVsZSk7Cit9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL29wZXJhdG9yLmMgYi9Nb2R1bGVzL19vcGVyYXRvci5jCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIE1vZHVsZXMvb3BlcmF0b3IuYwpyZW5hbWUgdG8gTW9kdWxlcy9fb3BlcmF0b3IuYwppbmRleCBkNjQ0M2JmLi5mMjk0NzY5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL29wZXJhdG9yLmMKKysrIGIvTW9kdWxlcy9fb3BlcmF0b3IuYwpAQCAtMjA4LDYgKzIwOCwzMSBAQAogICAgIHJldHVybiAocmVzdWx0ID09IDApOwogfQogCitQeURvY19TVFJWQVIobGVuZ3RoX2hpbnRfX2RvY19fLAorImxlbmd0aF9oaW50KG9iaiwgZGVmYXVsdD0wKSAtPiBpbnRcbiIKKyJSZXR1cm4gYW4gZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZiBpdGVtcyBpbiBvYmouXG4iCisiVGhpcyBpcyB1c2VmdWwgZm9yIHByZXNpemluZyBjb250YWluZXJzIHdoZW4gYnVpbGRpbmcgZnJvbSBhblxuIgorIml0ZXJhYmxlLlxuIgorIlxuIgorIklmIHRoZSBvYmplY3Qgc3VwcG9ydHMgbGVuKCksIHRoZSByZXN1bHQgd2lsbCBiZVxuIgorImV4YWN0LiBPdGhlcndpc2UsIGl0IG1heSBvdmVyLSBvciB1bmRlci1lc3RpbWF0ZSBieSBhblxuIgorImFyYml0cmFyeSBhbW91bnQuIFRoZSByZXN1bHQgd2lsbCBiZSBhbiBpbnRlZ2VyID49IDAuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqbGVuZ3RoX2hpbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUgPSAwLCByZXM7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfG46bGVuZ3RoX2hpbnQiLCAmb2JqLCAmZGVmYXVsdHZhbHVlKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmVzID0gUHlPYmplY3RfTGVuZ3RoSGludChvYmosIGRlZmF1bHR2YWx1ZSk7CisgICAgaWYgKHJlcyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisKKwogUHlEb2NfU1RSVkFSKGNvbXBhcmVfZGlnZXN0X19kb2NfXywKICJjb21wYXJlX2RpZ2VzdChhLCBiKSAtPiBib29sXG4iCiAiXG4iCkBAIC0yNTIsNyArMjc3LDcgQEAKICAgICAgICAgUHlfYnVmZmVyIHZpZXdfYTsKICAgICAgICAgUHlfYnVmZmVyIHZpZXdfYjsKIAotICAgICAgICBpZiAoKFB5T2JqZWN0X0NoZWNrQnVmZmVyKGEpID09IDApICYgKFB5T2JqZWN0X0NoZWNrQnVmZmVyKGIpID09IDApKSB7CisgICAgICAgIGlmIChQeU9iamVjdF9DaGVja0J1ZmZlcihhKSA9PSAwICYmIFB5T2JqZWN0X0NoZWNrQnVmZmVyKGIpID09IDApIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIG9wZXJhbmQgdHlwZXMocykgb3IgY29tYmluYXRpb24gb2YgdHlwZXM6ICIKICAgICAgICAgICAgICAgICAgICAgICAgICAiJyUuMTAwcycgYW5kICclLjEwMHMnIiwKQEAgLTI5NywxNyArMzIyLDE1IEBACiAvKiBvcGVyYXRvciBtZXRob2RzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNkZWZpbmUgc3BhbTEoT1AsRE9DKSB7I09QLCBPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sCi0jZGVmaW5lIHNwYW0yKE9QLEFMVE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9WQVJBUkdTLCBQeURvY19TVFIoRE9DKX0sIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHsjQUxUT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAorI2RlZmluZSBzcGFtMihPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfVkFSQVJHUywgUHlEb2NfU1RSKERPQyl9LAogI2RlZmluZSBzcGFtMW8oT1AsRE9DKSB7I09QLCBPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCi0jZGVmaW5lIHNwYW0ybyhPUCxBTFRPUCxET0MpIHsjT1AsIG9wXyMjT1AsIE1FVEhfTywgUHlEb2NfU1RSKERPQyl9LCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB7I0FMVE9QLCBvcF8jI09QLCBNRVRIX08sIFB5RG9jX1NUUihET0MpfSwKKyNkZWZpbmUgc3BhbTJvKE9QLERPQykgeyNPUCwgb3BfIyNPUCwgTUVUSF9PLCBQeURvY19TVFIoRE9DKX0sCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgb3BlcmF0b3JfbWV0aG9kc1tdID0gewogCiBzcGFtMW8odHJ1dGgsCiAgInRydXRoKGEpIC0tIFJldHVybiBUcnVlIGlmIGEgaXMgdHJ1ZSwgRmFsc2Ugb3RoZXJ3aXNlLiIpCi1zcGFtMihjb250YWlucyxfX2NvbnRhaW5zX18sCitzcGFtMihjb250YWlucywKICAiY29udGFpbnMoYSwgYikgLS0gU2FtZSBhcyBiIGluIGEgKG5vdGUgcmV2ZXJzZWQgb3BlcmFuZHMpLiIpCiBzcGFtMShpbmRleE9mLAogICJpbmRleE9mKGEsIGIpIC0tIFJldHVybiB0aGUgZmlyc3QgaW5kZXggb2YgYiBpbiBhLiIpCkBAIC0zMTYsNTYgKzMzOSw1OCBAQAogCiBzcGFtMShpc18sICJpc18oYSwgYikgLS0gU2FtZSBhcyBhIGlzIGIuIikKIHNwYW0xKGlzX25vdCwgImlzX25vdChhLCBiKSAtLSBTYW1lIGFzIGEgaXMgbm90IGIuIikKLXNwYW0ybyhpbmRleCwgX19pbmRleF9fLCAiaW5kZXgoYSkgLS0gU2FtZSBhcyBhLl9faW5kZXhfXygpIikKLXNwYW0yKGFkZCxfX2FkZF9fLCAiYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArIGIuIikKLXNwYW0yKHN1YixfX3N1Yl9fLCAic3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtIGIuIikKLXNwYW0yKG11bCxfX211bF9fLCAibXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqIGIuIikKLXNwYW0yKGZsb29yZGl2LF9fZmxvb3JkaXZfXywgImZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLyBiLiIpCi1zcGFtMih0cnVlZGl2LF9fdHJ1ZWRpdl9fLCAidHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLyBiLiIpCi1zcGFtMihtb2QsX19tb2RfXywgIm1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJSBiLiIpCi1zcGFtMm8obmVnLF9fbmVnX18sICJuZWcoYSkgLS0gU2FtZSBhcyAtYS4iKQotc3BhbTJvKHBvcyxfX3Bvc19fLCAicG9zKGEpIC0tIFNhbWUgYXMgK2EuIikKLXNwYW0ybyhhYnMsX19hYnNfXywgImFicyhhKSAtLSBTYW1lIGFzIGFicyhhKS4iKQotc3BhbTJvKGludixfX2ludl9fLCAiaW52KGEpIC0tIFNhbWUgYXMgfmEuIikKLXNwYW0ybyhpbnZlcnQsX19pbnZlcnRfXywgImludmVydChhKSAtLSBTYW1lIGFzIH5hLiIpCi1zcGFtMihsc2hpZnQsX19sc2hpZnRfXywgImxzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPDwgYi4iKQotc3BhbTIocnNoaWZ0LF9fcnNoaWZ0X18sICJyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+IGIuIikKLXNwYW0ybyhub3RfLF9fbm90X18sICJub3RfKGEpIC0tIFNhbWUgYXMgbm90IGEuIikKLXNwYW0yKGFuZF8sX19hbmRfXywgImFuZF8oYSwgYikgLS0gU2FtZSBhcyBhICYgYi4iKQotc3BhbTIoeG9yLF9feG9yX18sICJ4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF4gYi4iKQotc3BhbTIob3JfLF9fb3JfXywgIm9yXyhhLCBiKSAtLSBTYW1lIGFzIGEgfCBiLiIpCi1zcGFtMihpYWRkLF9faWFkZF9fLCAiYSA9IGlhZGQoYSwgYikgLS0gU2FtZSBhcyBhICs9IGIuIikKLXNwYW0yKGlzdWIsX19pc3ViX18sICJhID0gaXN1YihhLCBiKSAtLSBTYW1lIGFzIGEgLT0gYi4iKQotc3BhbTIoaW11bCxfX2ltdWxfXywgImEgPSBpbXVsKGEsIGIpIC0tIFNhbWUgYXMgYSAqPSBiLiIpCi1zcGFtMihpZmxvb3JkaXYsX19pZmxvb3JkaXZfXywgImEgPSBpZmxvb3JkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC8vPSBiLiIpCi1zcGFtMihpdHJ1ZWRpdixfX2l0cnVlZGl2X18sICJhID0gaXRydWVkaXYoYSwgYikgLS0gU2FtZSBhcyBhIC89IGIiKQotc3BhbTIoaW1vZCxfX2ltb2RfXywgImEgPSBpbW9kKGEsIGIpIC0tIFNhbWUgYXMgYSAlPSBiLiIpCi1zcGFtMihpbHNoaWZ0LF9faWxzaGlmdF9fLCAiYSA9IGlsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8PSBiLiIpCi1zcGFtMihpcnNoaWZ0LF9faXJzaGlmdF9fLCAiYSA9IGlyc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhID4+PSBiLiIpCi1zcGFtMihpYW5kLF9faWFuZF9fLCAiYSA9IGlhbmQoYSwgYikgLS0gU2FtZSBhcyBhICY9IGIuIikKLXNwYW0yKGl4b3IsX19peG9yX18sICJhID0gaXhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXj0gYi4iKQotc3BhbTIoaW9yLF9faW9yX18sICJhID0gaW9yKGEsIGIpIC0tIFNhbWUgYXMgYSB8PSBiLiIpCi1zcGFtMihjb25jYXQsX19jb25jYXRfXywKK3NwYW0ybyhpbmRleCwgImluZGV4KGEpIC0tIFNhbWUgYXMgYS5fX2luZGV4X18oKSIpCitzcGFtMihhZGQsICJhZGQoYSwgYikgLS0gU2FtZSBhcyBhICsgYi4iKQorc3BhbTIoc3ViLCAic3ViKGEsIGIpIC0tIFNhbWUgYXMgYSAtIGIuIikKK3NwYW0yKG11bCwgIm11bChhLCBiKSAtLSBTYW1lIGFzIGEgKiBiLiIpCitzcGFtMihmbG9vcmRpdiwgImZsb29yZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvLyBiLiIpCitzcGFtMih0cnVlZGl2LCAidHJ1ZWRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLyBiLiIpCitzcGFtMihtb2QsICJtb2QoYSwgYikgLS0gU2FtZSBhcyBhICUgYi4iKQorc3BhbTJvKG5lZywgIm5lZyhhKSAtLSBTYW1lIGFzIC1hLiIpCitzcGFtMm8ocG9zLCAicG9zKGEpIC0tIFNhbWUgYXMgK2EuIikKK3NwYW0ybyhhYnMsICJhYnMoYSkgLS0gU2FtZSBhcyBhYnMoYSkuIikKK3NwYW0ybyhpbnYsICJpbnYoYSkgLS0gU2FtZSBhcyB+YS4iKQorc3BhbTJvKGludmVydCwgImludmVydChhKSAtLSBTYW1lIGFzIH5hLiIpCitzcGFtMihsc2hpZnQsICJsc2hpZnQoYSwgYikgLS0gU2FtZSBhcyBhIDw8IGIuIikKK3NwYW0yKHJzaGlmdCwgInJzaGlmdChhLCBiKSAtLSBTYW1lIGFzIGEgPj4gYi4iKQorc3BhbTJvKG5vdF8sICJub3RfKGEpIC0tIFNhbWUgYXMgbm90IGEuIikKK3NwYW0yKGFuZF8sICJhbmRfKGEsIGIpIC0tIFNhbWUgYXMgYSAmIGIuIikKK3NwYW0yKHhvciwgInhvcihhLCBiKSAtLSBTYW1lIGFzIGEgXiBiLiIpCitzcGFtMihvcl8sICJvcl8oYSwgYikgLS0gU2FtZSBhcyBhIHwgYi4iKQorc3BhbTIoaWFkZCwgImEgPSBpYWRkKGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLiIpCitzcGFtMihpc3ViLCAiYSA9IGlzdWIoYSwgYikgLS0gU2FtZSBhcyBhIC09IGIuIikKK3NwYW0yKGltdWwsICJhID0gaW11bChhLCBiKSAtLSBTYW1lIGFzIGEgKj0gYi4iKQorc3BhbTIoaWZsb29yZGl2LCAiYSA9IGlmbG9vcmRpdihhLCBiKSAtLSBTYW1lIGFzIGEgLy89IGIuIikKK3NwYW0yKGl0cnVlZGl2LCAiYSA9IGl0cnVlZGl2KGEsIGIpIC0tIFNhbWUgYXMgYSAvPSBiIikKK3NwYW0yKGltb2QsICJhID0gaW1vZChhLCBiKSAtLSBTYW1lIGFzIGEgJT0gYi4iKQorc3BhbTIoaWxzaGlmdCwgImEgPSBpbHNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA8PD0gYi4iKQorc3BhbTIoaXJzaGlmdCwgImEgPSBpcnNoaWZ0KGEsIGIpIC0tIFNhbWUgYXMgYSA+Pj0gYi4iKQorc3BhbTIoaWFuZCwgImEgPSBpYW5kKGEsIGIpIC0tIFNhbWUgYXMgYSAmPSBiLiIpCitzcGFtMihpeG9yLCAiYSA9IGl4b3IoYSwgYikgLS0gU2FtZSBhcyBhIF49IGIuIikKK3NwYW0yKGlvciwgImEgPSBpb3IoYSwgYikgLS0gU2FtZSBhcyBhIHw9IGIuIikKK3NwYW0yKGNvbmNhdCwKICAiY29uY2F0KGEsIGIpIC0tIFNhbWUgYXMgYSArIGIsIGZvciBhIGFuZCBiIHNlcXVlbmNlcy4iKQotc3BhbTIoaWNvbmNhdCxfX2ljb25jYXRfXywKK3NwYW0yKGljb25jYXQsCiAgImEgPSBpY29uY2F0KGEsIGIpIC0tIFNhbWUgYXMgYSArPSBiLCBmb3IgYSBhbmQgYiBzZXF1ZW5jZXMuIikKLXNwYW0yKGdldGl0ZW0sX19nZXRpdGVtX18sCitzcGFtMihnZXRpdGVtLAogICJnZXRpdGVtKGEsIGIpIC0tIFNhbWUgYXMgYVtiXS4iKQotc3BhbTIoc2V0aXRlbSxfX3NldGl0ZW1fXywKK3NwYW0yKHNldGl0ZW0sCiAgInNldGl0ZW0oYSwgYiwgYykgLS0gU2FtZSBhcyBhW2JdID0gYy4iKQotc3BhbTIoZGVsaXRlbSxfX2RlbGl0ZW1fXywKK3NwYW0yKGRlbGl0ZW0sCiAgImRlbGl0ZW0oYSwgYikgLS0gU2FtZSBhcyBkZWwgYVtiXS4iKQotc3BhbTIocG93LF9fcG93X18sICJwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqIGIuIikKLXNwYW0yKGlwb3csX19pcG93X18sICJhID0gaXBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKio9IGIuIikKLXNwYW0yKGx0LF9fbHRfXywgImx0KGEsIGIpIC0tIFNhbWUgYXMgYTxiLiIpCi1zcGFtMihsZSxfX2xlX18sICJsZShhLCBiKSAtLSBTYW1lIGFzIGE8PWIuIikKLXNwYW0yKGVxLF9fZXFfXywgImVxKGEsIGIpIC0tIFNhbWUgYXMgYT09Yi4iKQotc3BhbTIobmUsX19uZV9fLCAibmUoYSwgYikgLS0gU2FtZSBhcyBhIT1iLiIpCi1zcGFtMihndCxfX2d0X18sICJndChhLCBiKSAtLSBTYW1lIGFzIGE+Yi4iKQotc3BhbTIoZ2UsX19nZV9fLCAiZ2UoYSwgYikgLS0gU2FtZSBhcyBhPj1iLiIpCitzcGFtMihwb3csICJwb3coYSwgYikgLS0gU2FtZSBhcyBhICoqIGIuIikKK3NwYW0yKGlwb3csICJhID0gaXBvdyhhLCBiKSAtLSBTYW1lIGFzIGEgKio9IGIuIikKK3NwYW0yKGx0LCAibHQoYSwgYikgLS0gU2FtZSBhcyBhPGIuIikKK3NwYW0yKGxlLCAibGUoYSwgYikgLS0gU2FtZSBhcyBhPD1iLiIpCitzcGFtMihlcSwgImVxKGEsIGIpIC0tIFNhbWUgYXMgYT09Yi4iKQorc3BhbTIobmUsICJuZShhLCBiKSAtLSBTYW1lIGFzIGEhPWIuIikKK3NwYW0yKGd0LCAiZ3QoYSwgYikgLS0gU2FtZSBhcyBhPmIuIikKK3NwYW0yKGdlLCAiZ2UoYSwgYikgLS0gU2FtZSBhcyBhPj1iLiIpCiAKICAgICB7Il9jb21wYXJlX2RpZ2VzdCIsIChQeUNGdW5jdGlvbiljb21wYXJlX2RpZ2VzdCwgTUVUSF9WQVJBUkdTLAogICAgICBjb21wYXJlX2RpZ2VzdF9fZG9jX199LAorICAgICB7Imxlbmd0aF9oaW50IiwgKFB5Q0Z1bmN0aW9uKWxlbmd0aF9oaW50LCBNRVRIX1ZBUkFSR1MsCisgICAgIGxlbmd0aF9oaW50X19kb2NfX30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIAogfTsKQEAgLTg5MSwxMiArOTE2LDEyIEBACiB9OwogCiAKLS8qIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIFB5SW5pdF9vcGVyYXRvcikgKi8KKy8qIEluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciB0aGUgbW9kdWxlICgqbXVzdCogYmUgY2FsbGVkIFB5SW5pdF9fb3BlcmF0b3IpICovCiAKIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBvcGVyYXRvcm1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgIm9wZXJhdG9yIiwKKyAgICAiX29wZXJhdG9yIiwKICAgICBvcGVyYXRvcl9kb2MsCiAgICAgLTEsCiAgICAgb3BlcmF0b3JfbWV0aG9kcywKQEAgLTkwNyw3ICs5MzIsNyBAQAogfTsKIAogUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9vcGVyYXRvcih2b2lkKQorUHlJbml0X19vcGVyYXRvcih2b2lkKQogewogICAgIFB5T2JqZWN0ICptOwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19waWNrbGUuYyBiL01vZHVsZXMvX3BpY2tsZS5jCmluZGV4IGVjOGJkNmMuLmMzNTdkY2MgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3BpY2tsZS5jCisrKyBiL01vZHVsZXMvX3BpY2tsZS5jCkBAIC00LDkgKzQsMTkgQEAKIFB5RG9jX1NUUlZBUihwaWNrbGVfbW9kdWxlX2RvYywKICJPcHRpbWl6ZWQgQyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbiBwaWNrbGUgbW9kdWxlLiIpOwogCisvKltjbGluaWMgaW5wdXRdCitvdXRwdXQgcHJlc2V0IGZpbGUKK21vZHVsZSBfcGlja2xlCitjbGFzcyBfcGlja2xlLlBpY2tsZXIgIlBpY2tsZXJPYmplY3QgKiIgIiZQaWNrbGVyX1R5cGUiCitjbGFzcyBfcGlja2xlLlBpY2tsZXJNZW1vUHJveHkgIlBpY2tsZXJNZW1vUHJveHlPYmplY3QgKiIgIiZQaWNrbGVyTWVtb1Byb3h5VHlwZSIKK2NsYXNzIF9waWNrbGUuVW5waWNrbGVyICJVbnBpY2tsZXJPYmplY3QgKiIgIiZVbnBpY2tsZXJfVHlwZSIKK2NsYXNzIF9waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5ICJVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKiIgIiZVbnBpY2tsZXJNZW1vUHJveHlUeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9MTFjNDUyNDhhNDFkZDNmY10qLworCiAvKiBCdW1wIHRoaXMgd2hlbiBuZXcgb3Bjb2RlcyBhcmUgYWRkZWQgdG8gdGhlIHBpY2tsZSBwcm90b2NvbC4gKi8KIGVudW0gewotICAgIEhJR0hFU1RfUFJPVE9DT0wgPSAzLAorICAgIEhJR0hFU1RfUFJPVE9DT0wgPSA0LAogICAgIERFRkFVTFRfUFJPVE9DT0wgPSAzCiB9OwogCkBAIC03MSwxOCArODEsMjAgQEAKIAogICAgIC8qIFByb3RvY29sIDMgKFB5dGhvbiAzLngpICovCiAgICAgQklOQllURVMgICAgICAgPSAnQicsCi0gICAgU0hPUlRfQklOQllURVMgPSAnQycKLX07CisgICAgU0hPUlRfQklOQllURVMgPSAnQycsCiAKLS8qIFRoZXNlIGFyZW4ndCBvcGNvZGVzIC0tIHRoZXkncmUgd2F5cyB0byBwaWNrbGUgYm9vbHMgYmVmb3JlIHByb3RvY29sIDIKLSAqIHNvIHRoYXQgdW5waWNrbGVycyB3cml0dGVuIGJlZm9yZSBib29scyB3ZXJlIGludHJvZHVjZWQgdW5waWNrbGUgdGhlbQotICogYXMgaW50cywgYnV0IHVucGlja2xlcnMgYWZ0ZXIgY2FuIHJlY29nbml6ZSB0aGF0IGJvb2xzIHdlcmUgaW50ZW5kZWQuCi0gKiBOb3RlIHRoYXQgcHJvdG9jb2wgMiBhZGRlZCBkaXJlY3Qgd2F5cyB0byBwaWNrbGUgYm9vbHMuCi0gKi8KLSN1bmRlZiBUUlVFCi0jZGVmaW5lIFRSVUUgICJJMDFcbiIKLSN1bmRlZiBGQUxTRQotI2RlZmluZSBGQUxTRSAiSTAwXG4iCisgICAgLyogUHJvdG9jb2wgNCAqLworICAgIFNIT1JUX0JJTlVOSUNPREUgPSAnXHg4YycsCisgICAgQklOVU5JQ09ERTggICAgICA9ICdceDhkJywKKyAgICBCSU5CWVRFUzggICAgICAgID0gJ1x4OGUnLAorICAgIEVNUFRZX1NFVCAgICAgICAgPSAnXHg4ZicsCisgICAgQURESVRFTVMgICAgICAgICA9ICdceDkwJywKKyAgICBGUk9aRU5TRVQgICAgICAgID0gJ1x4OTEnLAorICAgIE5FV09CSl9FWCAgICAgICAgPSAnXHg5MicsCisgICAgU1RBQ0tfR0xPQkFMICAgICA9ICdceDkzJywKKyAgICBNRU1PSVpFICAgICAgICAgID0gJ1x4OTQnLAorICAgIEZSQU1FICAgICAgICAgICAgPSAnXHg5NScKK307CiAKIGVudW0gewogICAgLyogS2VlcCBpbiBzeW5jaCB3aXRoIHBpY2tsZS5QaWNrbGVyLl9CQVRDSFNJWkUuICBUaGlzIGlzIGhvdyBtYW55IGVsZW1lbnRzCkBAIC05OCw0OCArMTEwLDI0NiBAQAogICAgIC8qIEluaXRpYWwgc2l6ZSBvZiB0aGUgd3JpdGUgYnVmZmVyIG9mIFBpY2tsZXIuICovCiAgICAgV1JJVEVfQlVGX1NJWkUgPSA0MDk2LAogCi0gICAgLyogTWF4aW11bSBzaXplIG9mIHRoZSB3cml0ZSBidWZmZXIgb2YgUGlja2xlciB3aGVuIHBpY2tsaW5nIHRvIGEKLSAgICAgICBzdHJlYW0uICBUaGlzIGlzIGlnbm9yZWQgZm9yIGluLW1lbW9yeSBwaWNrbGluZy4gKi8KLSAgICBNQVhfV1JJVEVfQlVGX1NJWkUgPSA2NCAqIDEwMjQsCi0KICAgICAvKiBQcmVmZXRjaCBzaXplIHdoZW4gdW5waWNrbGluZyAoZGlzYWJsZWQgb24gdW5wZWVrYWJsZSBzdHJlYW1zKSAqLwotICAgIFBSRUZFVENIID0gODE5MiAqIDE2CisgICAgUFJFRkVUQ0ggPSA4MTkyICogMTYsCisKKyAgICBGUkFNRV9TSVpFX1RBUkdFVCA9IDY0ICogMTAyNCwKKworICAgIEZSQU1FX0hFQURFUl9TSVpFID0gOQogfTsKIAotLyogRXhjZXB0aW9uIGNsYXNzZXMgZm9yIHBpY2tsZS4gVGhlc2Ugc2hvdWxkIG92ZXJyaWRlIHRoZSBvbmVzIGRlZmluZWQgaW4KLSAgIHBpY2tsZS5weSwgd2hlbiB0aGUgQy1vcHRpbWl6ZWQgUGlja2xlciBhbmQgVW5waWNrbGVyIGFyZSB1c2VkLiAqLwotc3RhdGljIFB5T2JqZWN0ICpQaWNrbGVFcnJvciA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKlBpY2tsaW5nRXJyb3IgPSBOVUxMOwotc3RhdGljIFB5T2JqZWN0ICpVbnBpY2tsaW5nRXJyb3IgPSBOVUxMOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIGNvcHlyZWcuZGlzcGF0Y2hfdGFibGUsIHt0eXBlX29iamVjdDogcGlja2xpbmdfZnVuY3Rpb259ICovCi1zdGF0aWMgUHlPYmplY3QgKmRpc3BhdGNoX3RhYmxlID0gTlVMTDsKLS8qIEZvciBFWFRbMTI0XSBvcGNvZGVzLiAqLwotLyogY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LCB7KG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKTogY29kZX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqZXh0ZW5zaW9uX3JlZ2lzdHJ5ID0gTlVMTDsKLS8qIGNvcHlyZWcuX2ludmVydGVkX3JlZ2lzdHJ5LCB7Y29kZTogKG1vZHVsZV9uYW1lLCBmdW5jdGlvbl9uYW1lKX0gKi8KLXN0YXRpYyBQeU9iamVjdCAqaW52ZXJ0ZWRfcmVnaXN0cnkgPSBOVUxMOwotLyogY29weXJlZy5fZXh0ZW5zaW9uX2NhY2hlLCB7Y29kZTogb2JqZWN0fSAqLwotc3RhdGljIFB5T2JqZWN0ICpleHRlbnNpb25fY2FjaGUgPSBOVUxMOworLyogU3RhdGUgb2YgdGhlIHBpY2tsZSBtb2R1bGUsIHBlciBQRVAgMzEyMS4gKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiBFeGNlcHRpb24gY2xhc3NlcyBmb3IgcGlja2xlLiAqLworICAgIFB5T2JqZWN0ICpQaWNrbGVFcnJvcjsKKyAgICBQeU9iamVjdCAqUGlja2xpbmdFcnJvcjsKKyAgICBQeU9iamVjdCAqVW5waWNrbGluZ0Vycm9yOwogCi0vKiBfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcsIHsob2xkbW9kdWxlLCBvbGRuYW1lKTogKG5ld21vZHVsZSwgbmV3bmFtZSl9ICovCi1zdGF0aWMgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18ydG8zID0gTlVMTDsKLS8qIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HLCB7b2xkbW9kdWxlOiBuZXdtb2R1bGV9ICovCi1zdGF0aWMgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzJ0bzMgPSBOVUxMOwotLyogU2FtZSwgYnV0IHdpdGggUkVWRVJTRV9OQU1FX01BUFBJTkcgLyBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HICovCi1zdGF0aWMgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18zdG8yID0gTlVMTDsKLXN0YXRpYyBQeU9iamVjdCAqaW1wb3J0X21hcHBpbmdfM3RvMiA9IE5VTEw7CisgICAgLyogY29weXJlZy5kaXNwYXRjaF90YWJsZSwge3R5cGVfb2JqZWN0OiBwaWNrbGluZ19mdW5jdGlvbn0gKi8KKyAgICBQeU9iamVjdCAqZGlzcGF0Y2hfdGFibGU7CiAKLS8qIFhYWDogQXJlIHRoZXNlIHJlYWxseSBuZXNjZXNzYXJ5PyAqLwotLyogQXMgdGhlIG5hbWUgc2F5cywgYW4gZW1wdHkgdHVwbGUuICovCi1zdGF0aWMgUHlPYmplY3QgKmVtcHR5X3R1cGxlID0gTlVMTDsKLS8qIEZvciBsb29raW5nIHVwIG5hbWUgcGFpcnMgaW4gY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5LiAqLwotc3RhdGljIFB5T2JqZWN0ICp0d29fdHVwbGUgPSBOVUxMOworICAgIC8qIEZvciB0aGUgZXh0ZW5zaW9uIG9wY29kZXMgRVhUMSwgRVhUMiBhbmQgRVhUNC4gKi8KKworICAgIC8qIGNvcHlyZWcuX2V4dGVuc2lvbl9yZWdpc3RyeSwgeyhtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSk6IGNvZGV9ICovCisgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9yZWdpc3RyeTsKKyAgICAvKiBjb3B5cmVnLl9leHRlbnNpb25fY2FjaGUsIHtjb2RlOiBvYmplY3R9ICovCisgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9jYWNoZTsKKyAgICAvKiBjb3B5cmVnLl9pbnZlcnRlZF9yZWdpc3RyeSwge2NvZGU6IChtb2R1bGVfbmFtZSwgZnVuY3Rpb25fbmFtZSl9ICovCisgICAgUHlPYmplY3QgKmludmVydGVkX3JlZ2lzdHJ5OworCisgICAgLyogSW1wb3J0IG1hcHBpbmdzIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUHl0aG9uIDIueCAqLworCisgICAgLyogX2NvbXBhdF9waWNrbGUuTkFNRV9NQVBQSU5HLAorICAgICAgIHsob2xkbW9kdWxlLCBvbGRuYW1lKTogKG5ld21vZHVsZSwgbmV3bmFtZSl9ICovCisgICAgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18ydG8zOworICAgIC8qIF9jb21wYXRfcGlja2xlLklNUE9SVF9NQVBQSU5HLCB7b2xkbW9kdWxlOiBuZXdtb2R1bGV9ICovCisgICAgUHlPYmplY3QgKmltcG9ydF9tYXBwaW5nXzJ0bzM7CisgICAgLyogU2FtZSwgYnV0IHdpdGggUkVWRVJTRV9OQU1FX01BUFBJTkcgLyBSRVZFUlNFX0lNUE9SVF9NQVBQSU5HICovCisgICAgUHlPYmplY3QgKm5hbWVfbWFwcGluZ18zdG8yOworICAgIFB5T2JqZWN0ICppbXBvcnRfbWFwcGluZ18zdG8yOworCisgICAgLyogY29kZWNzLmVuY29kZSwgdXNlZCBmb3Igc2F2aW5nIGJ5dGVzIGluIG9sZGVyIHByb3RvY29scyAqLworICAgIFB5T2JqZWN0ICpjb2RlY3NfZW5jb2RlOworfSBQaWNrbGVTdGF0ZTsKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgX3BpY2tsZSBtb2R1bGUgZGVmaW5pdGlvbi4gKi8KK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX3BpY2tsZW1vZHVsZTsKKworLyogR2l2ZW4gYSBtb2R1bGUgb2JqZWN0LCBnZXQgaXRzIHBlci1tb2R1bGUgc3RhdGUuICovCitzdGF0aWMgUGlja2xlU3RhdGUgKgorX1BpY2tsZV9HZXRTdGF0ZShQeU9iamVjdCAqbW9kdWxlKQoreworICAgIHJldHVybiAoUGlja2xlU3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShtb2R1bGUpOworfQorCisvKiBGaW5kIHRoZSBtb2R1bGUgaW5zdGFuY2UgaW1wb3J0ZWQgaW4gdGhlIGN1cnJlbnRseSBydW5uaW5nIHN1Yi1pbnRlcnByZXRlcgorICAgYW5kIGdldCBpdHMgc3RhdGUuICovCitzdGF0aWMgUGlja2xlU3RhdGUgKgorX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSh2b2lkKQoreworICAgIHJldHVybiBfUGlja2xlX0dldFN0YXRlKFB5U3RhdGVfRmluZE1vZHVsZSgmX3BpY2tsZW1vZHVsZSkpOworfQorCisvKiBDbGVhciB0aGUgZ2l2ZW4gcGlja2xlIG1vZHVsZSBzdGF0ZS4gKi8KK3N0YXRpYyB2b2lkCitfUGlja2xlX0NsZWFyU3RhdGUoUGlja2xlU3RhdGUgKnN0KQoreworICAgIFB5X0NMRUFSKHN0LT5QaWNrbGVFcnJvcik7CisgICAgUHlfQ0xFQVIoc3QtPlBpY2tsaW5nRXJyb3IpOworICAgIFB5X0NMRUFSKHN0LT5VbnBpY2tsaW5nRXJyb3IpOworICAgIFB5X0NMRUFSKHN0LT5kaXNwYXRjaF90YWJsZSk7CisgICAgUHlfQ0xFQVIoc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSk7CisgICAgUHlfQ0xFQVIoc3QtPmV4dGVuc2lvbl9jYWNoZSk7CisgICAgUHlfQ0xFQVIoc3QtPmludmVydGVkX3JlZ2lzdHJ5KTsKKyAgICBQeV9DTEVBUihzdC0+bmFtZV9tYXBwaW5nXzJ0bzMpOworICAgIFB5X0NMRUFSKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKTsKKyAgICBQeV9DTEVBUihzdC0+bmFtZV9tYXBwaW5nXzN0bzIpOworICAgIFB5X0NMRUFSKHN0LT5pbXBvcnRfbWFwcGluZ18zdG8yKTsKKyAgICBQeV9DTEVBUihzdC0+Y29kZWNzX2VuY29kZSk7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIGdpdmVuIHBpY2tsZSBtb2R1bGUgc3RhdGUuICovCitzdGF0aWMgaW50CitfUGlja2xlX0luaXRTdGF0ZShQaWNrbGVTdGF0ZSAqc3QpCit7CisgICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjb21wYXRfcGlja2xlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY29kZWNzID0gTlVMTDsKKworICAgIGNvcHlyZWcgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImNvcHlyZWciKTsKKyAgICBpZiAoIWNvcHlyZWcpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPmRpc3BhdGNoX3RhYmxlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiZGlzcGF0Y2hfdGFibGUiKTsKKyAgICBpZiAoIXN0LT5kaXNwYXRjaF90YWJsZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5kaXNwYXRjaF90YWJsZSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb3B5cmVnLmRpc3BhdGNoX3RhYmxlIHNob3VsZCBiZSBhIGRpY3QsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzdC0+ZGlzcGF0Y2hfdGFibGUpLT50cF9uYW1lKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9yZWdpc3RyeSIpOworICAgIGlmICghc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5leHRlbnNpb25fcmVnaXN0cnkpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fZXh0ZW5zaW9uX3JlZ2lzdHJ5IHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5KS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIHN0LT5pbnZlcnRlZF9yZWdpc3RyeSA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2ludmVydGVkX3JlZ2lzdHJ5Iik7CisgICAgaWYgKCFzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5faW52ZXJ0ZWRfcmVnaXN0cnkgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbnZlcnRlZF9yZWdpc3RyeSktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+ZXh0ZW5zaW9uX2NhY2hlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9jYWNoZSIpOworICAgIGlmICghc3QtPmV4dGVuc2lvbl9jYWNoZSkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5leHRlbnNpb25fY2FjaGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fZXh0ZW5zaW9uX2NhY2hlIHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+ZXh0ZW5zaW9uX2NhY2hlKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvcHlyZWcpOworCisgICAgLyogTG9hZCB0aGUgMi54IC0+IDMueCBzdGRsaWIgbW9kdWxlIG1hcHBpbmcgdGFibGVzICovCisgICAgY29tcGF0X3BpY2tsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiX2NvbXBhdF9waWNrbGUiKTsKKyAgICBpZiAoIWNvbXBhdF9waWNrbGUpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgc3QtPm5hbWVfbWFwcGluZ18ydG8zID0gXAorICAgICAgICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsICJOQU1FX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5uYW1lX21hcHBpbmdfMnRvMykKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KHN0LT5uYW1lX21hcHBpbmdfMnRvMykpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5uYW1lX21hcHBpbmdfMnRvMyktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+aW1wb3J0X21hcHBpbmdfMnRvMyA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiSU1QT1JUX01BUFBJTkciKTsKKyAgICBpZiAoIXN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3Qoc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5pbXBvcnRfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIC8qIC4uLiBhbmQgdGhlIDMueCAtPiAyLnggbWFwcGluZyB0YWJsZXMgKi8KKyAgICBzdC0+bmFtZV9tYXBwaW5nXzN0bzIgPSBcCisgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwgIlJFVkVSU0VfTkFNRV9NQVBQSU5HIik7CisgICAgaWYgKCFzdC0+bmFtZV9tYXBwaW5nXzN0bzIpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+bmFtZV9tYXBwaW5nXzN0bzIpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgIgorICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCBQeV9UWVBFKHN0LT5uYW1lX21hcHBpbmdfM3RvMiktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBzdC0+aW1wb3J0X21hcHBpbmdfM3RvMiA9IFwKKyAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb21wYXRfcGlja2xlLCAiUkVWRVJTRV9JTVBPUlRfTUFQUElORyIpOworICAgIGlmICghc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIpCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChzdC0+aW1wb3J0X21hcHBpbmdfM3RvMikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX0lNUE9SVF9NQVBQSU5HIHNob3VsZCBiZSBhIGRpY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJS4yMDBzIiwgUHlfVFlQRShzdC0+aW1wb3J0X21hcHBpbmdfM3RvMiktPnRwX25hbWUpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKKworICAgIGNvZGVjcyA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiY29kZWNzIik7CisgICAgaWYgKGNvZGVjcyA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIHN0LT5jb2RlY3NfZW5jb2RlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb2RlY3MsICJlbmNvZGUiKTsKKyAgICBpZiAoc3QtPmNvZGVjc19lbmNvZGUgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBpZiAoIVB5Q2FsbGFibGVfQ2hlY2soc3QtPmNvZGVjc19lbmNvZGUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiY29kZWNzLmVuY29kZSBzaG91bGQgYmUgYSBjYWxsYWJsZSwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHN0LT5jb2RlY3NfZW5jb2RlKS0+dHBfbmFtZSk7CisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIFB5X0NMRUFSKGNvZGVjcyk7CisKKyAgICByZXR1cm4gMDsKKworICBlcnJvcjoKKyAgICBQeV9DTEVBUihjb3B5cmVnKTsKKyAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKKyAgICBQeV9DTEVBUihjb2RlY3MpOworICAgIF9QaWNrbGVfQ2xlYXJTdGF0ZShzdCk7CisgICAgcmV0dXJuIC0xOworfQorCisvKiBIZWxwZXIgZm9yIGNhbGxpbmcgYSBmdW5jdGlvbiB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50IHF1aWNrbHkuCisKKyAgIFRoaXMgZnVuY3Rpb24gc3RlYWxzIHRoZSByZWZlcmVuY2Ugb2YgdGhlIGdpdmVuIGFyZ3VtZW50LiAqLworc3RhdGljIFB5T2JqZWN0ICoKK19QaWNrbGVfRmFzdENhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBQeU9iamVjdCAqYXJnX3R1cGxlID0gUHlUdXBsZV9OZXcoMSk7CisKKyAgICAvKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIHVzZWQgdG8gcmV1c2UgdGhlIGFyZ3VtZW50IHR1cGxlLiBUaGlzIHVzZWQgdG8gZ2l2ZQorICAgICAgIGEgc2xpZ2h0IHBlcmZvcm1hbmNlIGJvb3N0IHdpdGggb2xkZXIgcGlja2xlIGltcGxlbWVudGF0aW9ucyB3aGVyZSBtYW55CisgICAgICAgdW5idWZmZXJlZCByZWFkcyBvY2N1cnJlZCAodGh1cyBuZWVkaW5nIG1hbnkgZnVuY3Rpb24gY2FsbHMpLgorCisgICAgICAgSG93ZXZlciwgdGhpcyBvcHRpbWl6YXRpb24gd2FzIHJlbW92ZWQgYmVjYXVzZSBpdCB3YXMgdG9vIGNvbXBsaWNhdGVkCisgICAgICAgdG8gZ2V0IHJpZ2h0LiBJdCBhYnVzZWQgdGhlIEMgQVBJIGZvciB0dXBsZXMgdG8gbXV0YXRlIHRoZW0gd2hpY2ggbGVkCisgICAgICAgdG8gc3VidGxlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgY29uY3VycmVuY3kgYnVncy4gRnVydGhlcm1vcmUsIHRoZQorICAgICAgIGludHJvZHVjdGlvbiBvZiBwcm90b2NvbCA0IGFuZCB0aGUgcHJlZmV0Y2hpbmcgb3B0aW1pemF0aW9uIHZpYSBwZWVrKCkKKyAgICAgICBzaWduaWZpY2FudGx5IHJlZHVjZWQgdGhlIG51bWJlciBvZiBmdW5jdGlvbiBjYWxscyB3ZSBkby4gVGh1cywgdGhlCisgICAgICAgYmVuZWZpdHMgYmVjYW1lIG1hcmdpbmFsIGF0IGJlc3QuICovCisKKyAgICBpZiAoYXJnX3R1cGxlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ190dXBsZSwgMCwgb2JqKTsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIGFyZ190dXBsZSwgTlVMTCk7CisgICAgUHlfQ0xFQVIoYXJnX3R1cGxlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludAogc3RhY2tfdW5kZXJmbG93KHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgInVucGlja2xpbmcgc3RhY2sgdW5kZXJmbG93Iik7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAidW5waWNrbGluZyBzdGFjayB1bmRlcmZsb3ciKTsKICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTE2NSw3ICszNzUsNyBAQAogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQogICAgICJfcGlja2xlLlBkYXRhIiwgICAgICAgICAgICAgIC8qdHBfbmFtZSovCiAgICAgc2l6ZW9mKFBkYXRhKSwgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLworICAgIHNpemVvZihQeU9iamVjdCAqKSwgICAgICAgICAgIC8qdHBfaXRlbXNpemUqLwogICAgIChkZXN0cnVjdG9yKVBkYXRhX2RlYWxsb2MsICAgIC8qdHBfZGVhbGxvYyovCiB9OwogCkBAIC0yMzksNyArNDQ5LDggQEAKIFBkYXRhX3BvcChQZGF0YSAqc2VsZikKIHsKICAgICBpZiAoUHlfU0laRShzZWxmKSA9PSAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJiYWQgcGlja2xlIGRhdGEiKTsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgImJhZCBwaWNrbGUgZGF0YSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgcmV0dXJuIHNlbGYtPmRhdGFbLS1QeV9TSVpFKHNlbGYpXTsKQEAgLTMxOCw3ICs1MjksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNrbGluZy4gKi8KICAgICBQeU9iamVjdCAqcGVyc19mdW5jOyAgICAgICAgLyogcGVyc2lzdGVudF9pZCgpIG1ldGhvZCwgY2FuIGJlIE5VTEwgKi8KICAgICBQeU9iamVjdCAqZGlzcGF0Y2hfdGFibGU7ICAgLyogcHJpdmF0ZSBkaXNwYXRjaF90YWJsZSwgY2FuIGJlIE5VTEwgKi8KLSAgICBQeU9iamVjdCAqYXJnOwogCiAgICAgUHlPYmplY3QgKndyaXRlOyAgICAgICAgICAgIC8qIHdyaXRlKCkgbWV0aG9kIG9mIHRoZSBvdXRwdXQgc3RyZWFtLiAqLwogICAgIFB5T2JqZWN0ICpvdXRwdXRfYnVmZmVyOyAgICAvKiBXcml0ZSBpbnRvIGEgbG9jYWwgYnl0ZWFycmF5IGJ1ZmZlciBiZWZvcmUKQEAgLTMyNyw3ICs1MzcsMTIgQEAKICAgICBQeV9zc2l6ZV90IG1heF9vdXRwdXRfbGVuOyAgLyogQWxsb2NhdGlvbiBzaXplIG9mIG91dHB1dF9idWZmZXIuICovCiAgICAgaW50IHByb3RvOyAgICAgICAgICAgICAgICAgIC8qIFBpY2tsZSBwcm90b2NvbCBudW1iZXIsID49IDAgKi8KICAgICBpbnQgYmluOyAgICAgICAgICAgICAgICAgICAgLyogQm9vbGVhbiwgdHJ1ZSBpZiBwcm90byA+IDAgKi8KLSAgICBQeV9zc2l6ZV90IGJ1Zl9zaXplOyAgICAgICAgICAgICAgIC8qIFNpemUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyZWQgcGlja2xlIGRhdGEgKi8KKyAgICBpbnQgZnJhbWluZzsgICAgICAgICAgICAgICAgLyogVHJ1ZSB3aGVuIGZyYW1pbmcgaXMgZW5hYmxlZCwgcHJvdG8gPj0gNCAqLworICAgIFB5X3NzaXplX3QgZnJhbWVfc3RhcnQ7ICAgICAvKiBQb3NpdGlvbiBpbiBvdXRwdXRfYnVmZmVyIHdoZXJlIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSB0aGUgY3VycmVudCBmcmFtZSBiZWdpbnMuIC0xIGlmIHRoZXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIG5vIGZyYW1lIGN1cnJlbnRseSBvcGVuLiAqLworCisgICAgUHlfc3NpemVfdCBidWZfc2l6ZTsgICAgICAgIC8qIFNpemUgb2YgdGhlIGN1cnJlbnQgYnVmZmVyZWQgcGlja2xlIGRhdGEgKi8KICAgICBpbnQgZmFzdDsgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIGZhc3QgbW9kZSBpZiBzZXQgdG8gYSB0cnVlIHZhbHVlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmFzdCBtb2RlIGRpc2FibGUgdGhlIHVzYWdlIG9mIG1lbW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZXJlZm9yZSBzcGVlZGluZyB0aGUgcGlja2xpbmcgcHJvY2VzcyBieQpAQCAtMzQ3LDkgKzU2Miw5IEBACiAgICAgLyogVGhlIHVucGlja2xlciBtZW1vIGlzIGp1c3QgYW4gYXJyYXkgb2YgUHlPYmplY3QgKnMuIFVzaW5nIGEgZGljdAogICAgICAgIGlzIHVubmVjZXNzYXJ5LCBzaW5jZSB0aGUga2V5cyBhcmUgY29udGlndW91cyBpbnRzLiAqLwogICAgIFB5T2JqZWN0ICoqbWVtbzsKLSAgICBQeV9zc2l6ZV90IG1lbW9fc2l6ZTsKKyAgICBQeV9zc2l6ZV90IG1lbW9fc2l6ZTsgICAgICAgLyogQ2FwYWNpdHkgb2YgdGhlIG1lbW8gYXJyYXkgKi8KKyAgICBQeV9zc2l6ZV90IG1lbW9fbGVuOyAgICAgICAgLyogTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIG1lbW8gKi8KIAotICAgIFB5T2JqZWN0ICphcmc7CiAgICAgUHlPYmplY3QgKnBlcnNfZnVuYzsgICAgICAgIC8qIHBlcnNpc3RlbnRfbG9hZCgpIG1ldGhvZCwgY2FuIGJlIE5VTEwuICovCiAKICAgICBQeV9idWZmZXIgYnVmZmVyOwpAQCAtMzU4LDYgKzU3Myw3IEBACiAgICAgUHlfc3NpemVfdCBpbnB1dF9sZW47CiAgICAgUHlfc3NpemVfdCBuZXh0X3JlYWRfaWR4OwogICAgIFB5X3NzaXplX3QgcHJlZmV0Y2hlZF9pZHg7ICAvKiBpbmRleCBvZiBmaXJzdCBwcmVmZXRjaGVkIGJ5dGUgKi8KKwogICAgIFB5T2JqZWN0ICpyZWFkOyAgICAgICAgICAgICAvKiByZWFkKCkgbWV0aG9kIG9mIHRoZSBpbnB1dCBzdHJlYW0uICovCiAgICAgUHlPYmplY3QgKnJlYWRsaW5lOyAgICAgICAgIC8qIHJlYWRsaW5lKCkgbWV0aG9kIG9mIHRoZSBpbnB1dCBzdHJlYW0uICovCiAgICAgUHlPYmplY3QgKnBlZWs7ICAgICAgICAgICAgIC8qIHBlZWsoKSBtZXRob2Qgb2YgdGhlIGlucHV0IHN0cmVhbSwgb3IgTlVMTCAqLwpAQCAtMzc3LDEyICs1OTMsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG5hbWUgb2YgZ2xvYmFscyBwaWNrbGVkIGJ5IFB5dGhvbiAyLnguICovCiB9IFVucGlja2xlck9iamVjdDsKIAordHlwZWRlZiBzdHJ1Y3QgeworICAgIFB5T2JqZWN0X0hFQUQKKyAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyOyAvKiBQaWNrbGVyIHdob3NlIG1lbW8gdGFibGUgd2UncmUgcHJveHlpbmcuICovCit9ICBQaWNrbGVyTWVtb1Byb3h5T2JqZWN0OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgUHlPYmplY3RfSEVBRAorICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyOworfSBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3Q7CisKIC8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCiBzdGF0aWMgaW50IHNhdmUoUGlja2xlck9iamVjdCAqLCBQeU9iamVjdCAqLCBpbnQpOwogc3RhdGljIGludCBzYXZlX3JlZHVjZShQaWNrbGVyT2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogc3RhdGljIFB5VHlwZU9iamVjdCBQaWNrbGVyX1R5cGU7CiBzdGF0aWMgUHlUeXBlT2JqZWN0IFVucGlja2xlcl9UeXBlOwogCisjaW5jbHVkZSAiY2xpbmljL19waWNrbGUuYy5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogIEEgY3VzdG9tIGhhc2h0YWJsZSBtYXBwaW5nIHZvaWQqIHRvIFB5dGhvbiBpbnRzLiBUaGlzIGlzIHVzZWQgYnkgdGhlIHBpY2tsZXIKQEAgLTQzNCw2ICs2NjEsNyBAQAogICAgIG5ldy0+bXRfdGFibGUgPSBQeU1lbV9ORVcoUHlNZW1vRW50cnksIHNlbGYtPm10X2FsbG9jYXRlZCk7CiAgICAgaWYgKG5ldy0+bXRfdGFibGUgPT0gTlVMTCkgewogICAgICAgICBQeU1lbV9GUkVFKG5ldyk7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgc2VsZi0+bXRfYWxsb2NhdGVkOyBpKyspIHsKQEAgLTUyNyw3ICs3NTUsNyBAQAogICAgIG9sZHRhYmxlID0gc2VsZi0+bXRfdGFibGU7CiAgICAgc2VsZi0+bXRfdGFibGUgPSBQeU1lbV9ORVcoUHlNZW1vRW50cnksIG5ld19zaXplKTsKICAgICBpZiAoc2VsZi0+bXRfdGFibGUgPT0gTlVMTCkgewotICAgICAgICBQeU1lbV9GUkVFKG9sZHRhYmxlKTsKKyAgICAgICAgc2VsZi0+bXRfdGFibGUgPSBvbGR0YWJsZTsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTYwMyw2MCArODMxLDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIEhlbHBlcnMgZm9yIGNyZWF0aW5nIHRoZSBhcmd1bWVudCB0dXBsZSBwYXNzZWQgdG8gZnVuY3Rpb25zLiBUaGlzIGhhcyB0aGUKLSAgIHBlcmZvcm1hbmNlIGFkdmFudGFnZSBvZiBjYWxsaW5nIFB5VHVwbGVfTmV3KCkgb25seSBvbmNlLgotCi0gICBYWFgoYXZhc3NhbG90dGkpOiBJbmxpbmUgZGlyZWN0bHkgaW4gX1BpY2tsZXJfRmFzdENhbGwoKSBhbmQKLSAgIF9VbnBpY2tsZXJfRmFzdENhbGwoKS4gKi8KLSNkZWZpbmUgQVJHX1RVUChzZWxmLCBvYmopIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKChzZWxmKS0+YXJnIHx8ICgoc2VsZiktPmFyZz1QeVR1cGxlX05ldygxKSkpIHsgIFwKLSAgICAgICAgICAgIFB5X1hERUNSRUYoUHlUdXBsZV9HRVRfSVRFTSgoc2VsZiktPmFyZywgMCkpOyAgIFwKLSAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oKHNlbGYpLT5hcmcsIDAsIChvYmopKTsgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIFB5X0RFQ1JFRigob2JqKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEZSRUVfQVJHX1RVUChzZWxmKSBkbyB7ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICgoc2VsZiktPmFyZy0+b2JfcmVmY250ID4gMSkgICAgICAgICBcCi0gICAgICAgICAgICBQeV9DTEVBUigoc2VsZiktPmFyZyk7ICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSAoMCkKLQotLyogQSB0ZW1wb3JhcnkgY2xlYW5lciBBUEkgZm9yIGZhc3Qgc2luZ2xlIGFyZ3VtZW50IGZ1bmN0aW9uIGNhbGwuCi0KLSAgIFhYWDogRG9lcyBjYWNoaW5nIHRoZSBhcmd1bWVudCB0dXBsZSBwcm92aWRlcyBhbnkgcmVhbCBwZXJmb3JtYW5jZSBiZW5lZml0cz8KLQotICAgQSBxdWljayBiZW5jaG1hcmssIG9uIGEgMi4wR0h6IEF0aGxvbjY0IDMyMDArIHJ1bm5pbmcgTGludXggMi42LjI0IHdpdGgKLSAgIGdsaWJjIDIuNywgdGVsbHMgbWUgdGhhdCBpdCB0YWtlcyByb3VnaGx5IDIwLDAwMCwwMDAgUHlUdXBsZV9OZXcoMSkgY2FsbHMKLSAgIHdoZW4gdGhlIHR1cGxlIGlzIHJldHJpZXZlZCBmcm9tIHRoZSBmcmVlbGlzdCAoaS5lLCBjYWxsIFB5VHVwbGVfTmV3KCkgdGhlbgotICAgaW1tZWRpYXRlbHkgREVDUkVGIGl0KSBhbmQgMSwyMDAsMDAwIGNhbGxzIHdoZW4gYWxsb2NhdGluZyBicmFuZCBuZXcgdHVwbGVzCi0gICAoaS5lLCBjYWxsIFB5VHVwbGVfTmV3KCkgYW5kIHN0b3JlIHRoZSByZXR1cm5lZCB2YWx1ZSBpbiBhbiBhcnJheSksIHRvIHNhdmUKLSAgIG9uZSBzZWNvbmQgKHdhbGwgY2xvY2sgdGltZSkuIEVpdGhlciB3YXlzLCB0aGUgbG9hZGluZyB0aW1lIGEgcGlja2xlIHN0cmVhbQotICAgbGFyZ2UgZW5vdWdoIHRvIGdlbmVyYXRlIHRoaXMgbnVtYmVyIG9mIGNhbGxzIHdvdWxkIGJlIG1hc3NpdmVseQotICAgb3ZlcndoZWxtZWQgYnkgb3RoZXIgZmFjdG9ycywgbGlrZSBJL08gdGhyb3VnaHB1dCwgdGhlIEdDIHRyYXZlcnNhbCBhbmQKLSAgIG9iamVjdCBhbGxvY2F0aW9uIG92ZXJoZWFkLiBTbywgSSByZWFsbHkgZG91YnQgdGhlc2UgZnVuY3Rpb25zIHByb3ZpZGUgYW55Ci0gICByZWFsIGJlbmVmaXRzLgotCi0gICBPbiB0aGUgb3RoZXIgaGFuZCwgb3Byb2ZpbGUgcmVwb3J0cyB0aGF0IHBpY2tsZSBzcGVuZHMgYSBsb3Qgb2YgdGltZSBpbgotICAgdGhlc2UgZnVuY3Rpb25zLiBCdXQsIHRoYXQgaXMgcHJvYmFibHkgbW9yZSByZWxhdGVkIHRvIHRoZSBmdW5jdGlvbiBjYWxsCi0gICBvdmVyaGVhZCwgdGhhbiB0aGUgYXJndW1lbnQgdHVwbGUgYWxsb2NhdGlvbi4KLQotICAgWFhYOiBBbmQsIHdoYXQgaXMgdGhlIHJlZmVyZW5jZSBiZWhhdmlvciBvZiB0aGVzZT8gU3RlYWwsIGJvcnJvdz8gQXQgZmlyc3QKLSAgIGdsYW5jZSwgaXQgc2VlbXMgdG8gc3RlYWwgdGhlIHJlZmVyZW5jZSBvZiAnYXJnJyBhbmQgYm9ycm93IHRoZSByZWZlcmVuY2UKLSAgIG9mICdmdW5jJy4gKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1fUGlja2xlcl9GYXN0Q2FsbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqZnVuYywgUHlPYmplY3QgKmFyZykKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLQotICAgIEFSR19UVVAoc2VsZiwgYXJnKTsKLSAgICBpZiAoc2VsZi0+YXJnKSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGwoZnVuYywgc2VsZi0+YXJnLCBOVUxMKTsKLSAgICAgICAgRlJFRV9BUkdfVFVQKHNlbGYpOwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQogCiBzdGF0aWMgaW50CiBfUGlja2xlcl9DbGVhckJ1ZmZlcihQaWNrbGVyT2JqZWN0ICpzZWxmKQpAQCAtNjY3LDE1ICs4NDEsNzEgQEAKICAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgc2VsZi0+b3V0cHV0X2xlbiA9IDA7CisgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSAtMTsKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQKK193cml0ZV9zaXplNjQoY2hhciAqb3V0LCBzaXplX3QgdmFsdWUpCit7CisgICAgaW50IGk7CisKKyAgICBhc3NlcnQoc2l6ZW9mKHNpemVfdCkgPD0gOCk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHNpemVfdCk7IGkrKykgeworICAgICAgICBvdXRbaV0gPSAodW5zaWduZWQgY2hhcikoKHZhbHVlID4+ICg4ICogaSkpICYgMHhmZik7CisgICAgfQorICAgIGZvciAoaSA9IHNpemVvZihzaXplX3QpOyBpIDwgODsgaSsrKSB7CisgICAgICAgIG91dFtpXSA9IDA7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorX1BpY2tsZXJfV3JpdGVGcmFtZUhlYWRlcihQaWNrbGVyT2JqZWN0ICpzZWxmLCBjaGFyICpxZGF0YSwgc2l6ZV90IGZyYW1lX2xlbikKK3sKKyAgICBxZGF0YVswXSA9IEZSQU1FOworICAgIF93cml0ZV9zaXplNjQocWRhdGEgKyAxLCBmcmFtZV9sZW4pOworfQorCitzdGF0aWMgaW50CitfUGlja2xlcl9Db21taXRGcmFtZShQaWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIHNpemVfdCBmcmFtZV9sZW47CisgICAgY2hhciAqcWRhdGE7CisKKyAgICBpZiAoIXNlbGYtPmZyYW1pbmcgfHwgc2VsZi0+ZnJhbWVfc3RhcnQgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIGZyYW1lX2xlbiA9IHNlbGYtPm91dHB1dF9sZW4gLSBzZWxmLT5mcmFtZV9zdGFydCAtIEZSQU1FX0hFQURFUl9TSVpFOworICAgIHFkYXRhID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+b3V0cHV0X2J1ZmZlcikgKyBzZWxmLT5mcmFtZV9zdGFydDsKKyAgICBfUGlja2xlcl9Xcml0ZUZyYW1lSGVhZGVyKHNlbGYsIHFkYXRhLCBmcmFtZV9sZW4pOworICAgIHNlbGYtPmZyYW1lX3N0YXJ0ID0gLTE7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19QaWNrbGVyX09wY29kZUJvdW5kYXJ5KFBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBmcmFtZV9sZW47CisKKyAgICBpZiAoIXNlbGYtPmZyYW1pbmcgfHwgc2VsZi0+ZnJhbWVfc3RhcnQgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIGZyYW1lX2xlbiA9IHNlbGYtPm91dHB1dF9sZW4gLSBzZWxmLT5mcmFtZV9zdGFydCAtIEZSQU1FX0hFQURFUl9TSVpFOworICAgIGlmIChmcmFtZV9sZW4gPj0gRlJBTUVfU0laRV9UQVJHRVQpCisgICAgICAgIHJldHVybiBfUGlja2xlcl9Db21taXRGcmFtZShzZWxmKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogX1BpY2tsZXJfR2V0U3RyaW5nKFBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKm91dHB1dF9idWZmZXIgPSBzZWxmLT5vdXRwdXRfYnVmZmVyOwogCiAgICAgYXNzZXJ0KHNlbGYtPm91dHB1dF9idWZmZXIgIT0gTlVMTCk7CisKKyAgICBpZiAoX1BpY2tsZXJfQ29tbWl0RnJhbWUoc2VsZikpCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgc2VsZi0+b3V0cHV0X2J1ZmZlciA9IE5VTEw7CiAgICAgLyogUmVzaXplIGRvd24gdG8gZXhhY3Qgc2l6ZSAqLwogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJm91dHB1dF9idWZmZXIsIHNlbGYtPm91dHB1dF9sZW4pIDwgMCkKQEAgLTY5MCw2NyArOTIwLDY0IEBACiAKICAgICBhc3NlcnQoc2VsZi0+d3JpdGUgIT0gTlVMTCk7CiAKKyAgICAvKiBUaGlzIHdpbGwgY29tbWl0IHRoZSBmcmFtZSBmaXJzdCAqLwogICAgIG91dHB1dCA9IF9QaWNrbGVyX0dldFN0cmluZyhzZWxmKTsKICAgICBpZiAob3V0cHV0ID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHJlc3VsdCA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPndyaXRlLCBvdXRwdXQpOworICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoc2VsZi0+d3JpdGUsIG91dHB1dCk7CiAgICAgUHlfWERFQ1JFRihyZXN1bHQpOwogICAgIHJldHVybiAocmVzdWx0ID09IE5VTEwpID8gLTEgOiAwOwogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotX1BpY2tsZXJfV3JpdGUoUGlja2xlck9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBuKQorX1BpY2tsZXJfV3JpdGUoUGlja2xlck9iamVjdCAqc2VsZiwgY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBkYXRhX2xlbikKIHsKLSAgICBQeV9zc2l6ZV90IGksIHJlcXVpcmVkOworICAgIFB5X3NzaXplX3QgaSwgbiwgcmVxdWlyZWQ7CiAgICAgY2hhciAqYnVmZmVyOworICAgIGludCBuZWVkX25ld19mcmFtZTsKIAogICAgIGFzc2VydChzICE9IE5VTEwpOworICAgIG5lZWRfbmV3X2ZyYW1lID0gKHNlbGYtPmZyYW1pbmcgJiYgc2VsZi0+ZnJhbWVfc3RhcnQgPT0gLTEpOworCisgICAgaWYgKG5lZWRfbmV3X2ZyYW1lKQorICAgICAgICBuID0gZGF0YV9sZW4gKyBGUkFNRV9IRUFERVJfU0laRTsKKyAgICBlbHNlCisgICAgICAgIG4gPSBkYXRhX2xlbjsKIAogICAgIHJlcXVpcmVkID0gc2VsZi0+b3V0cHV0X2xlbiArIG47CiAgICAgaWYgKHJlcXVpcmVkID4gc2VsZi0+bWF4X291dHB1dF9sZW4pIHsKLSAgICAgICAgaWYgKHNlbGYtPndyaXRlICE9IE5VTEwgJiYgcmVxdWlyZWQgPiBNQVhfV1JJVEVfQlVGX1NJWkUpIHsKLSAgICAgICAgICAgIC8qIFhYWCBUaGlzIHJlYWxsb2NhdGVzIGEgbmV3IGJ1ZmZlciBldmVyeSB0aW1lLCB3aGljaCBpcyBhIGJpdAotICAgICAgICAgICAgICAgd2FzdGVmdWwuICovCi0gICAgICAgICAgICBpZiAoX1BpY2tsZXJfRmx1c2hUb0ZpbGUoc2VsZikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChfUGlja2xlcl9DbGVhckJ1ZmZlcihzZWxmKSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAvKiBNYWtlIHBsYWNlIGluIGJ1ZmZlciBmb3IgdGhlIHBpY2tsZSBjaHVuayAqLworICAgICAgICBpZiAoc2VsZi0+b3V0cHV0X2xlbiA+PSBQWV9TU0laRV9UX01BWCAvIDIgLSBuKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzZWxmLT53cml0ZSAhPSBOVUxMICYmIG4gPiBNQVhfV1JJVEVfQlVGX1NJWkUpIHsKLSAgICAgICAgICAgIC8qIHdlIGFscmVhZHkgZmx1c2hlZCBhYm92ZSwgc28gdGhlIGJ1ZmZlciBpcyBlbXB0eSAqLwotICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICAgICAgICAgIC8qIFhYWCB3ZSBjb3VsZCBzcGFyZSBhbiBpbnRlcm1lZGlhdGUgY29weSBhbmQgcGFzcwotICAgICAgICAgICAgICAgYSBtZW1vcnl2aWV3IGluc3RlYWQgKi8KLSAgICAgICAgICAgIFB5T2JqZWN0ICpvdXRwdXQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIG4pOwotICAgICAgICAgICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICByZXN1bHQgPSBfUGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT53cml0ZSwgb3V0cHV0KTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYocmVzdWx0KTsKLSAgICAgICAgICAgIHJldHVybiAocmVzdWx0ID09IE5VTEwpID8gLTEgOiAwOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKHNlbGYtPm91dHB1dF9sZW4gPj0gUFlfU1NJWkVfVF9NQVggLyAyIC0gbikgewotICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4gPSAoc2VsZi0+b3V0cHV0X2xlbiArIG4pIC8gMiAqIDM7Ci0gICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZzZWxmLT5vdXRwdXRfYnVmZmVyLCBzZWxmLT5tYXhfb3V0cHV0X2xlbikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQorICAgICAgICBzZWxmLT5tYXhfb3V0cHV0X2xlbiA9IChzZWxmLT5vdXRwdXRfbGVuICsgbikgLyAyICogMzsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmc2VsZi0+b3V0cHV0X2J1ZmZlciwgc2VsZi0+bWF4X291dHB1dF9sZW4pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgYnVmZmVyID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+b3V0cHV0X2J1ZmZlcik7Ci0gICAgaWYgKG4gPCA4KSB7CisgICAgaWYgKG5lZWRfbmV3X2ZyYW1lKSB7CisgICAgICAgIC8qIFNldHVwIG5ldyBmcmFtZSAqLworICAgICAgICBQeV9zc2l6ZV90IGZyYW1lX3N0YXJ0ID0gc2VsZi0+b3V0cHV0X2xlbjsKKyAgICAgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSBmcmFtZV9zdGFydDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IEZSQU1FX0hFQURFUl9TSVpFOyBpKyspIHsKKyAgICAgICAgICAgIC8qIFdyaXRlIGFuIGludmFsaWQgdmFsdWUsIGZvciBkZWJ1Z2dpbmcgKi8KKyAgICAgICAgICAgIGJ1ZmZlcltmcmFtZV9zdGFydCArIGldID0gMHhGRTsKKyAgICAgICAgfQorICAgICAgICBzZWxmLT5vdXRwdXRfbGVuICs9IEZSQU1FX0hFQURFUl9TSVpFOworICAgIH0KKyAgICBpZiAoZGF0YV9sZW4gPCA4KSB7CiAgICAgICAgIC8qIFRoaXMgaXMgZmFzdGVyIHRoYW4gbWVtY3B5IHdoZW4gdGhlIHN0cmluZyBpcyBzaG9ydC4gKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YV9sZW47IGkrKykgewogICAgICAgICAgICAgYnVmZmVyW3NlbGYtPm91dHB1dF9sZW4gKyBpXSA9IHNbaV07CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIG1lbWNweShidWZmZXIgKyBzZWxmLT5vdXRwdXRfbGVuLCBzLCBuKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHNlbGYtPm91dHB1dF9sZW4sIHMsIGRhdGFfbGVuKTsKICAgICB9Ci0gICAgc2VsZi0+b3V0cHV0X2xlbiArPSBuOwotICAgIHJldHVybiBuOworICAgIHNlbGYtPm91dHB1dF9sZW4gKz0gZGF0YV9sZW47CisgICAgcmV0dXJuIGRhdGFfbGVuOwogfQogCiBzdGF0aWMgUGlja2xlck9iamVjdCAqCkBAIC03NjQsMjUgKzk5MSwyMyBAQAogCiAgICAgc2VsZi0+cGVyc19mdW5jID0gTlVMTDsKICAgICBzZWxmLT5kaXNwYXRjaF90YWJsZSA9IE5VTEw7Ci0gICAgc2VsZi0+YXJnID0gTlVMTDsKICAgICBzZWxmLT53cml0ZSA9IE5VTEw7CiAgICAgc2VsZi0+cHJvdG8gPSAwOwogICAgIHNlbGYtPmJpbiA9IDA7CisgICAgc2VsZi0+ZnJhbWluZyA9IDA7CisgICAgc2VsZi0+ZnJhbWVfc3RhcnQgPSAtMTsKICAgICBzZWxmLT5mYXN0ID0gMDsKICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAwOwogICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gMDsKICAgICBzZWxmLT5mYXN0X21lbW8gPSBOVUxMOwotCi0gICAgc2VsZi0+bWVtbyA9IFB5TWVtb1RhYmxlX05ldygpOwotICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgc2VsZi0+bWF4X291dHB1dF9sZW4gPSBXUklURV9CVUZfU0laRTsKICAgICBzZWxmLT5vdXRwdXRfbGVuID0gMDsKKworICAgIHNlbGYtPm1lbW8gPSBQeU1lbW9UYWJsZV9OZXcoKTsKICAgICBzZWxmLT5vdXRwdXRfYnVmZmVyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm1heF9vdXRwdXRfbGVuKTsKLSAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciA9PSBOVUxMKSB7CisKKyAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMIHx8IHNlbGYtPm91dHB1dF9idWZmZXIgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYoc2VsZik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTc5MCwzNCArMTAxNSwyOSBAQAogfQogCiBzdGF0aWMgaW50Ci1fUGlja2xlcl9TZXRQcm90b2NvbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqcHJvdG9fb2JqLAotICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzX29iaikKK19QaWNrbGVyX1NldFByb3RvY29sKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQogewotICAgIGxvbmcgcHJvdG8gPSAwOwotICAgIGludCBmaXhfaW1wb3J0czsKKyAgICBsb25nIHByb3RvOwogCi0gICAgaWYgKHByb3RvX29iaiA9PSBOVUxMIHx8IHByb3RvX29iaiA9PSBQeV9Ob25lKQorICAgIGlmIChwcm90b2NvbCA9PSBOVUxMIHx8IHByb3RvY29sID09IFB5X05vbmUpIHsKICAgICAgICAgcHJvdG8gPSBERUZBVUxUX1BST1RPQ09MOworICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgcHJvdG8gPSBQeUxvbmdfQXNMb25nKHByb3RvX29iaik7Ci0gICAgICAgIGlmIChwcm90byA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBwcm90byA9IFB5TG9uZ19Bc0xvbmcocHJvdG9jb2wpOworICAgICAgICBpZiAocHJvdG8gPCAwKSB7CisgICAgICAgICAgICBpZiAocHJvdG8gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBwcm90byA9IEhJR0hFU1RfUFJPVE9DT0w7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocHJvdG8gPiBISUdIRVNUX1BST1RPQ09MKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInBpY2tsZSBwcm90b2NvbCBtdXN0IGJlIDw9ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBISUdIRVNUX1BST1RPQ09MKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgIH0KLSAgICBpZiAocHJvdG8gPCAwKQotICAgICAgICBwcm90byA9IEhJR0hFU1RfUFJPVE9DT0w7Ci0gICAgaWYgKHByb3RvID4gSElHSEVTVF9QUk9UT0NPTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInBpY2tsZSBwcm90b2NvbCBtdXN0IGJlIDw9ICVkIiwKLSAgICAgICAgICAgICAgICAgICAgIEhJR0hFU1RfUFJPVE9DT0wpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGZpeF9pbXBvcnRzID0gUHlPYmplY3RfSXNUcnVlKGZpeF9pbXBvcnRzX29iaik7Ci0gICAgaWYgKGZpeF9pbXBvcnRzID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBzZWxmLT5wcm90byA9IHByb3RvOworICAgIHNlbGYtPnByb3RvID0gKGludClwcm90bzsKICAgICBzZWxmLT5iaW4gPSBwcm90byA+IDA7CiAgICAgc2VsZi0+Zml4X2ltcG9ydHMgPSBmaXhfaW1wb3J0cyAmJiBwcm90byA8IDM7Ci0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtODM5LDIwICsxMDU5LDYgQEAKICAgICByZXR1cm4gMDsKIH0KIAotLyogU2VlIGRvY3VtZW50YXRpb24gZm9yIF9QaWNrbGVyX0Zhc3RDYWxsKCkuICovCi1zdGF0aWMgUHlPYmplY3QgKgotX1VucGlja2xlcl9GYXN0Q2FsbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwotCi0gICAgQVJHX1RVUChzZWxmLCBhcmcpOwotICAgIGlmIChzZWxmLT5hcmcpIHsKLSAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbChmdW5jLCBzZWxmLT5hcmcsIE5VTEwpOwotICAgICAgICBGUkVFX0FSR19UVVAoc2VsZik7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIC8qIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGlucHV0IG9uIHN1Y2Nlc3MsIC0xIG9uIGZhaWx1cmUuIFRoaXMgdGFrZXMgaXRzCiAgICBvd24gcmVmZXJlbmNlIHRvIGBpbnB1dGAuICovCiBzdGF0aWMgUHlfc3NpemVfdApAQCAtODcyLDE4ICsxMDc4LDIxIEBACiBzdGF0aWMgaW50CiBfVW5waWNrbGVyX1NraXBDb25zdW1lZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlfc3NpemVfdCBjb25zdW1lZCA9IHNlbGYtPm5leHRfcmVhZF9pZHggLSBzZWxmLT5wcmVmZXRjaGVkX2lkeDsKKyAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOworICAgIFB5T2JqZWN0ICpyOwogCi0gICAgaWYgKGNvbnN1bWVkID4gMCkgewotICAgICAgICBQeU9iamVjdCAqcjsKLSAgICAgICAgYXNzZXJ0KHNlbGYtPnBlZWspOyAgLyogb3RoZXJ3aXNlIHdlIGRpZCBzb21ldGhpbmcgd3JvbmcgKi8KLSAgICAgICAgLyogVGhpcyBtYWtlcyBhbiB1c2VsZXNzIGNvcHkuLi4gKi8KLSAgICAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5yZWFkLCAibiIsIGNvbnN1bWVkKTsKLSAgICAgICAgaWYgKHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlfREVDUkVGKHIpOwotICAgICAgICBzZWxmLT5wcmVmZXRjaGVkX2lkeCA9IHNlbGYtPm5leHRfcmVhZF9pZHg7Ci0gICAgfQorICAgIGNvbnN1bWVkID0gc2VsZi0+bmV4dF9yZWFkX2lkeCAtIHNlbGYtPnByZWZldGNoZWRfaWR4OworICAgIGlmIChjb25zdW1lZCA8PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGFzc2VydChzZWxmLT5wZWVrKTsgIC8qIG90aGVyd2lzZSB3ZSBkaWQgc29tZXRoaW5nIHdyb25nICovCisgICAgLyogVGhpcyBtYWtlcyBhbiB1c2VsZXNzIGNvcHkuLi4gKi8KKyAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHNlbGYtPnJlYWQsICJuIiwgY29uc3VtZWQpOworICAgIGlmIChyID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeV9ERUNSRUYocik7CisKKyAgICBzZWxmLT5wcmVmZXRjaGVkX2lkeCA9IHNlbGYtPm5leHRfcmVhZF9pZHg7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTkwNyw1NiArMTExNiw1MSBAQAogX1VucGlja2xlcl9SZWFkRnJvbUZpbGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeV9zc2l6ZV90IG4pCiB7CiAgICAgUHlPYmplY3QgKmRhdGE7Ci0gICAgUHlfc3NpemVfdCByZWFkX3NpemUsIHByZWZldGNoZWRfc2l6ZSA9IDA7CisgICAgUHlfc3NpemVfdCByZWFkX3NpemU7CiAKICAgICBhc3NlcnQoc2VsZi0+cmVhZCAhPSBOVUxMKTsKIAogICAgIGlmIChfVW5waWNrbGVyX1NraXBDb25zdW1lZChzZWxmKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmIChuID09IFJFQURfV0hPTEVfTElORSkKKyAgICBpZiAobiA9PSBSRUFEX1dIT0xFX0xJTkUpIHsKKyAgICAgICAgUHlPYmplY3QgKmVtcHR5X3R1cGxlID0gUHlUdXBsZV9OZXcoMCk7CiAgICAgICAgIGRhdGEgPSBQeU9iamVjdF9DYWxsKHNlbGYtPnJlYWRsaW5lLCBlbXB0eV90dXBsZSwgTlVMTCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICpsZW4gPSBQeUxvbmdfRnJvbVNzaXplX3Qobik7Ci0gICAgICAgIGlmIChsZW4gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZGF0YSA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgc2VsZi0+cmVhZCwgbGVuKTsKKyAgICAgICAgUHlfREVDUkVGKGVtcHR5X3R1cGxlKTsKICAgICB9Ci0gICAgaWYgKGRhdGEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgLyogUHJlZmV0Y2ggc29tZSBkYXRhIHdpdGhvdXQgYWR2YW5jaW5nIHRoZSBmaWxlIHBvaW50ZXIsIGlmIHBvc3NpYmxlICovCi0gICAgaWYgKHNlbGYtPnBlZWspIHsKLSAgICAgICAgUHlPYmplY3QgKmxlbiwgKnByZWZldGNoZWQ7Ci0gICAgICAgIGxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChQUkVGRVRDSCk7Ci0gICAgICAgIGlmIChsZW4gPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKGRhdGEpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHByZWZldGNoZWQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPnBlZWssIGxlbik7Ci0gICAgICAgIGlmIChwcmVmZXRjaGVkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IpKSB7CisgICAgZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICpsZW47CisgICAgICAgIC8qIFByZWZldGNoIHNvbWUgZGF0YSB3aXRob3V0IGFkdmFuY2luZyB0aGUgZmlsZSBwb2ludGVyLCBpZiBwb3NzaWJsZSAqLworICAgICAgICBpZiAoc2VsZi0+cGVlayAmJiBuIDwgUFJFRkVUQ0gpIHsKKyAgICAgICAgICAgIGxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChQUkVGRVRDSCk7CisgICAgICAgICAgICBpZiAobGVuID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZGF0YSA9IF9QaWNrbGVfRmFzdENhbGwoc2VsZi0+cGVlaywgbGVuKTsKKyAgICAgICAgICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAvKiBwZWVrKCkgaXMgcHJvYmFibHkgbm90IHN1cHBvcnRlZCBieSB0aGUgZ2l2ZW4gZmlsZSBvYmplY3QgKi8KICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIFB5X0NMRUFSKHNlbGYtPnBlZWspOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcmVhZF9zaXplID0gX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dChzZWxmLCBkYXRhKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gMDsKKyAgICAgICAgICAgICAgICBpZiAobiA8PSByZWFkX3NpemUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2socHJlZmV0Y2hlZCkpOwotICAgICAgICAgICAgcHJlZmV0Y2hlZF9zaXplID0gUHlCeXRlc19HRVRfU0laRShwcmVmZXRjaGVkKTsKLSAgICAgICAgICAgIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsKCZkYXRhLCBwcmVmZXRjaGVkKTsKLSAgICAgICAgICAgIGlmIChkYXRhID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9CisgICAgICAgIGxlbiA9IFB5TG9uZ19Gcm9tU3NpemVfdChuKTsKKyAgICAgICAgaWYgKGxlbiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBkYXRhID0gX1BpY2tsZV9GYXN0Q2FsbChzZWxmLT5yZWFkLCBsZW4pOwogICAgIH0KKyAgICBpZiAoZGF0YSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CiAKLSAgICByZWFkX3NpemUgPSBfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHNlbGYsIGRhdGEpIC0gcHJlZmV0Y2hlZF9zaXplOworICAgIHJlYWRfc2l6ZSA9IF9VbnBpY2tsZXJfU2V0U3RyaW5nSW5wdXQoc2VsZiwgZGF0YSk7CiAgICAgUHlfREVDUkVGKGRhdGEpOwotICAgIHNlbGYtPnByZWZldGNoZWRfaWR4ID0gcmVhZF9zaXplOwogICAgIHJldHVybiByZWFkX3NpemU7CiB9CiAKQEAgLTk3OCw2ICsxMTgyLDEzIEBACiB7CiAgICAgUHlfc3NpemVfdCBudW1fcmVhZDsKIAorICAgICpzID0gTlVMTDsKKyAgICBpZiAoc2VsZi0+bmV4dF9yZWFkX2lkeCA+IFBZX1NTSVpFX1RfTUFYIC0gbikgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQgd291bGQgb3ZlcmZsb3cgKGludmFsaWQgYnl0ZWNvZGUpIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgaWYgKHNlbGYtPm5leHRfcmVhZF9pZHggKyBuIDw9IHNlbGYtPmlucHV0X2xlbikgewogICAgICAgICAqcyA9IHNlbGYtPmlucHV0X2J1ZmZlciArIHNlbGYtPm5leHRfcmVhZF9pZHg7CiAgICAgICAgIHNlbGYtPm5leHRfcmVhZF9pZHggKz0gbjsKQEAgLTEwMDQsOCArMTIxNSwxMCBAQAogICAgICAgICAgICAgICAgICAgICBjaGFyICoqcmVzdWx0KQogewogICAgIGNoYXIgKmlucHV0X2xpbmUgPSBQeU1lbV9SZWFsbG9jKHNlbGYtPmlucHV0X2xpbmUsIGxlbiArIDEpOwotICAgIGlmIChpbnB1dF9saW5lID09IE5VTEwpCisgICAgaWYgKGlucHV0X2xpbmUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgbWVtY3B5KGlucHV0X2xpbmUsIGxpbmUsIGxlbik7CiAgICAgaW5wdXRfbGluZVtsZW5dID0gJ1wwJzsKQEAgLTEwOTIsNyArMTMwNSwxMiBAQAogICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAgICAgb2xkX2l0ZW0gPSBzZWxmLT5tZW1vW2lkeF07CiAgICAgc2VsZi0+bWVtb1tpZHhdID0gdmFsdWU7Ci0gICAgUHlfWERFQ1JFRihvbGRfaXRlbSk7CisgICAgaWYgKG9sZF9pdGVtICE9IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG9sZF9pdGVtKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHNlbGYtPm1lbW9fbGVuKys7CisgICAgfQogICAgIHJldHVybiAwOwogfQogCkBAIC0xMTAwLDggKzEzMTgsMTAgQEAKIF9VbnBpY2tsZXJfTmV3TWVtbyhQeV9zc2l6ZV90IG5ld19zaXplKQogewogICAgIFB5T2JqZWN0ICoqbWVtbyA9IFB5TWVtX05FVyhQeU9iamVjdCAqLCBuZXdfc2l6ZSk7Ci0gICAgaWYgKG1lbW8gPT0gTlVMTCkKKyAgICBpZiAobWVtbyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBtZW1zZXQobWVtbywgMCwgbmV3X3NpemUgKiBzaXplb2YoUHlPYmplY3QgKikpOwogICAgIHJldHVybiBtZW1vOwogfQpAQCAtMTEzMiwyMSArMTM1Miw2IEBACiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBzZWxmLT5zdGFjayA9IChQZGF0YSAqKVBkYXRhX05ldygpOwotICAgIGlmIChzZWxmLT5zdGFjayA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG1lbXNldCgmc2VsZi0+YnVmZmVyLCAwLCBzaXplb2YoUHlfYnVmZmVyKSk7Ci0KLSAgICBzZWxmLT5tZW1vX3NpemUgPSAzMjsKLSAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7Ci0gICAgaWYgKHNlbGYtPm1lbW8gPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VsZik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHNlbGYtPmFyZyA9IE5VTEw7CiAgICAgc2VsZi0+cGVyc19mdW5jID0gTlVMTDsKICAgICBzZWxmLT5pbnB1dF9idWZmZXIgPSBOVUxMOwogICAgIHNlbGYtPmlucHV0X2xpbmUgPSBOVUxMOwpAQCAtMTE2Myw2ICsxMzY4LDE2IEBACiAgICAgc2VsZi0+bWFya3Nfc2l6ZSA9IDA7CiAgICAgc2VsZi0+cHJvdG8gPSAwOwogICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gMDsKKyAgICBtZW1zZXQoJnNlbGYtPmJ1ZmZlciwgMCwgc2l6ZW9mKFB5X2J1ZmZlcikpOworICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOworICAgIHNlbGYtPm1lbW9fbGVuID0gMDsKKyAgICBzZWxmLT5tZW1vID0gX1VucGlja2xlcl9OZXdNZW1vKHNlbGYtPm1lbW9fc2l6ZSk7CisgICAgc2VsZi0+c3RhY2sgPSAoUGRhdGEgKilQZGF0YV9OZXcoKTsKKworICAgIGlmIChzZWxmLT5tZW1vID09IE5VTEwgfHwgc2VsZi0+c3RhY2sgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJldHVybiBzZWxmOwogfQpAQCAtMTIwOSw4ICsxNDI0LDggQEAKICAgICBpZiAoZXJyb3JzID09IE5VTEwpCiAgICAgICAgIGVycm9ycyA9ICJzdHJpY3QiOwogCi0gICAgc2VsZi0+ZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpOwotICAgIHNlbGYtPmVycm9ycyA9IHN0cmR1cChlcnJvcnMpOworICAgIHNlbGYtPmVuY29kaW5nID0gX1B5TWVtX1N0cmR1cChlbmNvZGluZyk7CisgICAgc2VsZi0+ZXJyb3JzID0gX1B5TWVtX1N0cmR1cChlcnJvcnMpOwogICAgIGlmIChzZWxmLT5lbmNvZGluZyA9PSBOVUxMIHx8IHNlbGYtPmVycm9ycyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTEyNTMsNyArMTQ2OCw4IEBACiAgICAgICAgICAgICBsZW4gPSA1OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiB1bmxpa2VseSAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW8gaWQgdG9vIGxhcmdlIGZvciBMT05HX0JJTkdFVCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CkBAIC0xMjcwLDEyOCArMTQ4NiwxNzUgQEAKIHN0YXRpYyBpbnQKIG1lbW9fcHV0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCiB7Ci0gICAgUHlfc3NpemVfdCB4OwogICAgIGNoYXIgcGRhdGFbMzBdOwogICAgIFB5X3NzaXplX3QgbGVuOwotICAgIGludCBzdGF0dXMgPSAwOworICAgIFB5X3NzaXplX3QgaWR4OworCisgICAgY29uc3QgY2hhciBtZW1vaXplX29wID0gTUVNT0laRTsKIAogICAgIGlmIChzZWxmLT5mYXN0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHggPSBQeU1lbW9UYWJsZV9TaXplKHNlbGYtPm1lbW8pOwotICAgIGlmIChQeU1lbW9UYWJsZV9TZXQoc2VsZi0+bWVtbywgb2JqLCB4KSA8IDApCi0gICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWR4ID0gUHlNZW1vVGFibGVfU2l6ZShzZWxmLT5tZW1vKTsKKyAgICBpZiAoUHlNZW1vVGFibGVfU2V0KHNlbGYtPm1lbW8sIG9iaiwgaWR4KSA8IDApCisgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICghc2VsZi0+YmluKSB7CisgICAgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZtZW1vaXplX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmICghc2VsZi0+YmluKSB7CiAgICAgICAgIHBkYXRhWzBdID0gUFVUOwogICAgICAgICBQeU9TX3NucHJpbnRmKHBkYXRhICsgMSwgc2l6ZW9mKHBkYXRhKSAtIDEsCi0gICAgICAgICAgICAgICAgICAgICAgIiUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHgpOworICAgICAgICAgICAgICAgICAgICAgICIlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBpZHgpOwogICAgICAgICBsZW4gPSBzdHJsZW4ocGRhdGEpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKHggPCAyNTYpIHsKKyAgICAgICAgaWYgKGlkeCA8IDI1NikgewogICAgICAgICAgICAgcGRhdGFbMF0gPSBCSU5QVVQ7Ci0gICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKXg7CisgICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKWlkeDsKICAgICAgICAgICAgIGxlbiA9IDI7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoeCA8PSAweGZmZmZmZmZmTCkgeworICAgICAgICBlbHNlIGlmIChpZHggPD0gMHhmZmZmZmZmZkwpIHsKICAgICAgICAgICAgIHBkYXRhWzBdID0gTE9OR19CSU5QVVQ7Ci0gICAgICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4ICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiA4KSAmIDB4ZmYpOwotICAgICAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHggPj4gMTYpICYgMHhmZik7Ci0gICAgICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAyNCkgJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzFdID0gKHVuc2lnbmVkIGNoYXIpKGlkeCAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbMl0gPSAodW5zaWduZWQgY2hhcikoKGlkeCA+PiA4KSAmIDB4ZmYpOworICAgICAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKGlkeCA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgICAgIHBkYXRhWzRdID0gKHVuc2lnbmVkIGNoYXIpKChpZHggPj4gMjQpICYgMHhmZik7CiAgICAgICAgICAgICBsZW4gPSA1OwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeyAvKiB1bmxpa2VseSAqLwotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW8gaWQgdG9vIGxhcmdlIGZvciBMT05HX0JJTlBVVCIpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQotCiAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIHBkYXRhLCBsZW4pIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaWYgKDApIHsKLSAgZXJyb3I6Ci0gICAgICAgIHN0YXR1cyA9IC0xOwotICAgIH0KLQotICAgIHJldHVybiBzdGF0dXM7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13aGljaG1vZHVsZShQeU9iamVjdCAqZ2xvYmFsLCBQeU9iamVjdCAqZ2xvYmFsX25hbWUpCitnZXRhdHRyaWJ1dGUoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKm5hbWUsIGludCBhbGxvd19xdWFsbmFtZSkgeworICAgIFB5T2JqZWN0ICpkb3R0ZWRfcGF0aDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgX1B5X3N0YXRpY19zdHJpbmcoUHlJZF9kb3QsICIuIik7CisgICAgX1B5X3N0YXRpY19zdHJpbmcoUHlJZF9sb2NhbHMsICI8bG9jYWxzPiIpOworCisgICAgZG90dGVkX3BhdGggPSBQeVVuaWNvZGVfU3BsaXQobmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfZG90KSwgLTEpOworICAgIGlmIChkb3R0ZWRfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBhc3NlcnQoUHlfU0laRShkb3R0ZWRfcGF0aCkgPj0gMSk7CisgICAgaWYgKCFhbGxvd19xdWFsbmFtZSAmJiBQeV9TSVpFKGRvdHRlZF9wYXRoKSA+IDEpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBxdWFsaWZpZWQgYXR0cmlidXRlICVSIG9uICVSOyIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgcHJvdG9jb2xzID49IDQgdG8gZW5hYmxlIHN1cHBvcnQiLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKGRvdHRlZF9wYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihvYmopOworICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKGRvdHRlZF9wYXRoKTsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0ICpzdWJwYXRoID0gUHlMaXN0X0dFVF9JVEVNKGRvdHRlZF9wYXRoLCBpKTsKKyAgICAgICAgUHlPYmplY3QgKnRtcDsKKyAgICAgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5VW5pY29kZV9SaWNoQ29tcGFyZSgKKyAgICAgICAgICAgIHN1YnBhdGgsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX2xvY2FscyksIFB5X0VRKTsKKyAgICAgICAgaW50IGlzX2VxdWFsID0gKHJlc3VsdCA9PSBQeV9UcnVlKTsKKyAgICAgICAgYXNzZXJ0KFB5Qm9vbF9DaGVjayhyZXN1bHQpKTsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIGlmIChpc19lcXVhbCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgbG9jYWwgYXR0cmlidXRlICVSIG9uICVSIiwgbmFtZSwgb2JqKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHRtcCA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBzdWJwYXRoKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfQXR0cmlidXRlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgYXR0cmlidXRlICVSIG9uICVSIiwgbmFtZSwgb2JqKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBvYmogPSB0bXA7CisgICAgfQorICAgIFB5X0RFQ1JFRihkb3R0ZWRfcGF0aCk7CisgICAgcmV0dXJuIG9iajsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3doaWNobW9kdWxlKFB5T2JqZWN0ICpnbG9iYWwsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSwgaW50IGFsbG93X3F1YWxuYW1lKQogewotICAgIFB5X3NzaXplX3QgaSwgajsKLSAgICBzdGF0aWMgUHlPYmplY3QgKm1vZHVsZV9zdHIgPSBOVUxMOwotICAgIHN0YXRpYyBQeU9iamVjdCAqbWFpbl9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZTsKICAgICBQeU9iamVjdCAqbW9kdWxlc19kaWN0OwogICAgIFB5T2JqZWN0ICptb2R1bGU7CiAgICAgUHlPYmplY3QgKm9iajsKKyAgICBQeV9zc2l6ZV90IGksIGo7CisgICAgX1B5X0lERU5USUZJRVIoX19tb2R1bGVfXyk7CisgICAgX1B5X0lERU5USUZJRVIobW9kdWxlcyk7CisgICAgX1B5X0lERU5USUZJRVIoX19tYWluX18pOwogCi0gICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkgewotICAgICAgICBtb2R1bGVfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbW9kdWxlX18iKTsKLSAgICAgICAgaWYgKG1vZHVsZV9zdHIgPT0gTlVMTCkKKyAgICBtb2R1bGVfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZ2xvYmFsLCAmUHlJZF9fX21vZHVsZV9fKTsKKworICAgIGlmIChtb2R1bGVfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgbWFpbl9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19tYWluX18iKTsKLSAgICAgICAgaWYgKG1haW5fc3RyID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBtb2R1bGVfbmFtZSA9IFB5T2JqZWN0X0dldEF0dHIoZ2xvYmFsLCBtb2R1bGVfc3RyKTsKLQotICAgIC8qIEluIHNvbWUgcmFyZSBjYXNlcyAoZS5nLiwgYm91bmQgbWV0aG9kcyBvZiBleHRlbnNpb24gdHlwZXMpLAotICAgICAgIF9fbW9kdWxlX18gY2FuIGJlIE5vbmUuIElmIGl0IGlzIHNvLCB0aGVuIHNlYXJjaCBzeXMubW9kdWxlcwotICAgICAgIGZvciB0aGUgbW9kdWxlIG9mIGdsb2JhbC4gICovCi0gICAgaWYgKG1vZHVsZV9uYW1lID09IFB5X05vbmUpIHsKLSAgICAgICAgUHlfREVDUkVGKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgZ290byBzZWFyY2g7Ci0gICAgfQotCi0gICAgaWYgKG1vZHVsZV9uYW1lKSB7Ci0gICAgICAgIHJldHVybiBtb2R1bGVfbmFtZTsKLSAgICB9Ci0gICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBJbiBzb21lIHJhcmUgY2FzZXMgKGUuZy4sIGJvdW5kIG1ldGhvZHMgb2YgZXh0ZW5zaW9uIHR5cGVzKSwKKyAgICAgICAgICAgX19tb2R1bGVfXyBjYW4gYmUgTm9uZS4gSWYgaXQgaXMgc28sIHRoZW4gc2VhcmNoIHN5cy5tb2R1bGVzIGZvcgorICAgICAgICAgICB0aGUgbW9kdWxlIG9mIGdsb2JhbC4gKi8KKyAgICAgICAgaWYgKG1vZHVsZV9uYW1lICE9IFB5X05vbmUpCisgICAgICAgICAgICByZXR1cm4gbW9kdWxlX25hbWU7CisgICAgICAgIFB5X0NMRUFSKG1vZHVsZV9uYW1lKTsKKyAgICB9CisgICAgYXNzZXJ0KG1vZHVsZV9uYW1lID09IE5VTEwpOwogCi0gIHNlYXJjaDoKLSAgICBtb2R1bGVzX2RpY3QgPSBQeVN5c19HZXRPYmplY3QoIm1vZHVsZXMiKTsKLSAgICBpZiAobW9kdWxlc19kaWN0ID09IE5VTEwpCisgICAgbW9kdWxlc19kaWN0ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX21vZHVsZXMpOworICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMubW9kdWxlcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpID0gMDsKLSAgICBtb2R1bGVfbmFtZSA9IE5VTEw7CiAgICAgd2hpbGUgKChqID0gUHlEaWN0X05leHQobW9kdWxlc19kaWN0LCAmaSwgJm1vZHVsZV9uYW1lLCAmbW9kdWxlKSkpIHsKLSAgICAgICAgaWYgKFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChtb2R1bGVfbmFtZSwgbWFpbl9zdHIsIFB5X0VRKSA9PSAxKQorICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlVbmljb2RlX1JpY2hDb21wYXJlKAorICAgICAgICAgICAgbW9kdWxlX25hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbWFpbl9fKSwgUHlfRVEpOworICAgICAgICBpbnQgaXNfZXF1YWwgPSAocmVzdWx0ID09IFB5X1RydWUpOworICAgICAgICBhc3NlcnQoUHlCb29sX0NoZWNrKHJlc3VsdCkpOworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgaWYgKGlzX2VxdWFsKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChtb2R1bGUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIG9iaiA9IFB5T2JqZWN0X0dldEF0dHIobW9kdWxlLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIG9iaiA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBhbGxvd19xdWFsbmFtZSk7CiAgICAgICAgIGlmIChvYmogPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG9iaiAhPSBnbG9iYWwpIHsKKyAgICAgICAgaWYgKG9iaiA9PSBnbG9iYWwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmopOwotICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBQeV9JTkNSRUYobW9kdWxlX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwogICAgICAgICB9Ci0KICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIC8qIElmIG5vIG1vZHVsZSBpcyBmb3VuZCwgdXNlIF9fbWFpbl9fLiAqLwotICAgIGlmICghaikgewotICAgICAgICBtb2R1bGVfbmFtZSA9IG1haW5fc3RyOwotICAgIH0KLQorICAgIG1vZHVsZV9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19tYWluX18pOwogICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CiAgICAgcmV0dXJuIG1vZHVsZV9uYW1lOwogfQpAQCAtMTQyMCw3ICsxNjgzLDcgQEAKICAgICAgICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKG9iaik7CiAgICAgICAgIGlmIChrZXkgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoUHlEaWN0X0dldEl0ZW0oc2VsZi0+ZmFzdF9tZW1vLCBrZXkpKSB7CisgICAgICAgIGlmIChQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzZWxmLT5mYXN0X21lbW8sIGtleSkpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOwogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgImZhc3QgbW9kZTogY2FuJ3QgcGlja2xlIGN5Y2xpYyBvYmplY3RzICIKQEAgLTE0MjksNiArMTY5Miw5IEBACiAgICAgICAgICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAtMTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc2VsZi0+ZmFzdF9tZW1vLCBrZXksIFB5X05vbmUpIDwgMCkgewogICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CiAgICAgICAgICAgICBzZWxmLT5mYXN0X25lc3RpbmcgPSAtMTsKQEAgLTE0NjgsNDYgKzE3MzQsNTggQEAKIHN0YXRpYyBpbnQKIHNhdmVfYm9vbChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQogewotICAgIHN0YXRpYyBjb25zdCBjaGFyICpidWZbMl0gPSB7IEZBTFNFLCBUUlVFIH07Ci0gICAgY29uc3QgY2hhciBsZW5bMl0gPSB7c2l6ZW9mKEZBTFNFKSAtIDEsIHNpemVvZihUUlVFKSAtIDF9OwotICAgIGludCBwID0gKG9iaiA9PSBQeV9UcnVlKTsKLQogICAgIGlmIChzZWxmLT5wcm90byA+PSAyKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgYm9vbF9vcCA9IHAgPyBORVdUUlVFIDogTkVXRkFMU0U7CisgICAgICAgIGNvbnN0IGNoYXIgYm9vbF9vcCA9IChvYmogPT0gUHlfVHJ1ZSkgPyBORVdUUlVFIDogTkVXRkFMU0U7CiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmYm9vbF9vcCwgMSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBlbHNlIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBidWZbcF0sIGxlbltwXSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0KKyAgICBlbHNlIHsKKyAgICAgICAgLyogVGhlc2UgYXJlbid0IG9wY29kZXMgLS0gdGhleSdyZSB3YXlzIHRvIHBpY2tsZSBib29scyBiZWZvcmUgcHJvdG9jb2wgMgorICAgICAgICAgKiBzbyB0aGF0IHVucGlja2xlcnMgd3JpdHRlbiBiZWZvcmUgYm9vbHMgd2VyZSBpbnRyb2R1Y2VkIHVucGlja2xlIHRoZW0KKyAgICAgICAgICogYXMgaW50cywgYnV0IHVucGlja2xlcnMgYWZ0ZXIgY2FuIHJlY29nbml6ZSB0aGF0IGJvb2xzIHdlcmUgaW50ZW5kZWQuCisgICAgICAgICAqIE5vdGUgdGhhdCBwcm90b2NvbCAyIGFkZGVkIGRpcmVjdCB3YXlzIHRvIHBpY2tsZSBib29scy4KKyAgICAgICAgICovCisgICAgICAgIGNvbnN0IGNoYXIgKmJvb2xfc3RyID0gKG9iaiA9PSBQeV9UcnVlKSA/ICJJMDFcbiIgOiAiSTAwXG4iOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgYm9vbF9zdHIsIHN0cmxlbihib29sX3N0cikpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQKLXNhdmVfaW50KFBpY2tsZXJPYmplY3QgKnNlbGYsIGxvbmcgeCkKK3NhdmVfbG9uZyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQogewotICAgIGNoYXIgcGRhdGFbMzJdOwotICAgIFB5X3NzaXplX3QgbGVuID0gMDsKKyAgICBQeU9iamVjdCAqcmVwciA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGxvbmcgdmFsOworICAgIGludCBzdGF0dXMgPSAwOwogCi0gICAgaWYgKCFzZWxmLT5iaW4KLSNpZiBTSVpFT0ZfTE9ORyA+IDQKLSAgICAgICAgfHwgeCA+IDB4N2ZmZmZmZmZMIHx8IHggPCAtMHg4MDAwMDAwMEwKLSNlbmRpZgotICAgICAgICApIHsKLSAgICAgICAgLyogVGV4dC1tb2RlIHBpY2tsZSwgb3IgbG9uZyB0b28gYmlnIHRvIGZpdCBpbiB0aGUgNC1ieXRlCi0gICAgICAgICAqIHNpZ25lZCBCSU5JTlQgZm9ybWF0OiAgc3RvcmUgYXMgYSBzdHJpbmcuCi0gICAgICAgICAqLwotICAgICAgICBwZGF0YVswXSA9IExPTkc7ICAgICAgICAvKiB1c2UgTE9ORyBmb3IgY29uc2lzdGVuY3kgd2l0aCBwaWNrbGUucHkgKi8KLSAgICAgICAgUHlPU19zbnByaW50ZihwZGF0YSArIDEsIHNpemVvZihwZGF0YSkgLSAxLCAiJWxkTFxuIiwgeCk7Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBwZGF0YSwgc3RybGVuKHBkYXRhKSkgPCAwKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIGNvbnN0IGNoYXIgbG9uZ19vcCA9IExPTkc7CisKKyAgICB2YWw9IFB5TG9uZ19Bc0xvbmcob2JqKTsKKyAgICBpZiAodmFsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgLyogb3V0IG9mIHJhbmdlIGZvciBpbnQgcGlja2xpbmcgKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIEJpbmFyeSBwaWNrbGUgYW5kIHggZml0cyBpbiBhIHNpZ25lZCA0LWJ5dGUgaW50LiAqLwotICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKSh4ICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDgpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzNdID0gKHVuc2lnbmVkIGNoYXIpKCh4ID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCA+PiAyNCkgJiAweGZmKTsKKyAgICBlbHNlIGlmIChzZWxmLT5iaW4gJiYKKyAgICAgICAgICAgICAoc2l6ZW9mKGxvbmcpIDw9IDQgfHwKKyAgICAgICAgICAgICAgKHZhbCA8PSAweDdmZmZmZmZmTCAmJiB2YWwgPj0gKC0weDdmZmZmZmZmTCAtIDEpKSkpIHsKKyAgICAgICAgLyogcmVzdWx0IGZpdHMgaW4gYSBzaWduZWQgNC1ieXRlIGludGVnZXIuCisKKyAgICAgICAgICAgTm90ZTogd2UgY2FuJ3QgdXNlIC0weDgwMDAwMDAwTCBpbiB0aGUgYWJvdmUgY29uZGl0aW9uIGJlY2F1c2Ugc29tZQorICAgICAgICAgICBjb21waWxlcnMgKGUuZy4sIE1TVkMpIHdpbGwgcHJvbW90ZSAweDgwMDAwMDAwTCB0byBhbiB1bnNpZ25lZCB0eXBlCisgICAgICAgICAgIGJlZm9yZSBhcHBseWluZyB0aGUgdW5hcnkgbWludXMgd2hlbiBzaXplb2YobG9uZykgPD0gNC4gVGhlCisgICAgICAgICAgIHJlc3VsdGluZyB2YWx1ZSBzdGF5cyB1bnNpZ25lZCB3aGljaCBpcyBjb21tb25seSBub3Qgd2hhdCB3ZSB3YW50LAorICAgICAgICAgICBzbyBNU1ZDIGhhcHBpbHkgd2FybnMgdXMgYWJvdXQgaXQuICBIb3dldmVyLCB0aGF0IHJlc3VsdCB3b3VsZCBoYXZlCisgICAgICAgICAgIGJlZW4gZmluZSBiZWNhdXNlIHdlIGd1YXJkIGZvciBzaXplb2YobG9uZykgPD0gNCB3aGljaCB0dXJucyB0aGUKKyAgICAgICAgICAgY29uZGl0aW9uIHRydWUgaW4gdGhhdCBwYXJ0aWN1bGFyIGNhc2UuICovCisgICAgICAgIGNoYXIgcGRhdGFbMzJdOworICAgICAgICBQeV9zc2l6ZV90IGxlbiA9IDA7CisKKyAgICAgICAgcGRhdGFbMV0gPSAodW5zaWduZWQgY2hhcikodmFsICYgMHhmZik7CisgICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh2YWwgPj4gOCkgJiAweGZmKTsKKyAgICAgICAgcGRhdGFbM10gPSAodW5zaWduZWQgY2hhcikoKHZhbCA+PiAxNikgJiAweGZmKTsKKyAgICAgICAgcGRhdGFbNF0gPSAodW5zaWduZWQgY2hhcikoKHZhbCA+PiAyNCkgJiAweGZmKTsKIAogICAgICAgICBpZiAoKHBkYXRhWzRdID09IDApICYmIChwZGF0YVszXSA9PSAwKSkgewogICAgICAgICAgICAgaWYgKHBkYXRhWzJdID09IDApIHsKQEAgLTE1MjYsMzEgKzE4MDQsMTAgQEAKIAogICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIGxlbikgPCAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1zYXZlX2xvbmcoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKLXsKLSAgICBQeU9iamVjdCAqcmVwciA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBzaXplOwotICAgIGxvbmcgdmFsID0gUHlMb25nX0FzTG9uZyhvYmopOwotICAgIGludCBzdGF0dXMgPSAwOwotCi0gICAgY29uc3QgY2hhciBsb25nX29wID0gTE9ORzsKLQotICAgIGlmICh2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAvKiBvdXQgb2YgcmFuZ2UgZm9yIGludCBwaWNrbGluZyAqLwotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgIH0KLSAgICBlbHNlCi0jaWYgU0laRU9GX0xPTkcgPiA0Ci0gICAgICAgIGlmICh2YWwgPD0gMHg3ZmZmZmZmZkwgJiYgdmFsID49IC0weDgwMDAwMDAwTCkKLSNlbmRpZgotICAgICAgICAgICAgcmV0dXJuIHNhdmVfaW50KHNlbGYsIHZhbCk7Ci0KICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gMikgewogICAgICAgICAvKiBMaW5lYXItdGltZSBwaWNrbGluZy4gKi8KICAgICAgICAgc2l6ZV90IG5iaXRzOwpAQCAtMTcxNSw0MCArMTk3MiwyNSBAQAogICAgICAgICAgICBQeXRob24gMiAqYW5kKiB0aGUgYXBwcm9wcmlhdGUgJ2J5dGVzJyBvYmplY3Qgd2hlbiB1bnBpY2tsZWQKICAgICAgICAgICAgdXNpbmcgUHl0aG9uIDMuIEFnYWluIHRoaXMgaXMgYSBoYWNrIGFuZCB3ZSBkb24ndCBuZWVkIHRvIGRvIHRoaXMKICAgICAgICAgICAgd2l0aCBuZXdlciBwcm90b2NvbHMuICovCi0gICAgICAgIHN0YXRpYyBQeU9iamVjdCAqY29kZWNzX2VuY29kZSA9IE5VTEw7CiAgICAgICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWUgPSBOVUxMOwogICAgICAgICBpbnQgc3RhdHVzOwogCi0gICAgICAgIGlmIChjb2RlY3NfZW5jb2RlID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlY3NfbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJjb2RlY3MiKTsKLSAgICAgICAgICAgIGlmIChjb2RlY3NfbW9kdWxlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjb2RlY3NfZW5jb2RlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb2RlY3NfbW9kdWxlLCAiZW5jb2RlIik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoY29kZWNzX21vZHVsZSk7Ci0gICAgICAgICAgICBpZiAoY29kZWNzX2VuY29kZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KICAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUob2JqKSA9PSAwKSB7CiAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCIoTygpKSIsIChQeU9iamVjdCopJlB5Qnl0ZXNfVHlwZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKmxhdGluMSA9IE5VTEw7CisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgICAgICAgICBQeU9iamVjdCAqdW5pY29kZV9zdHIgPQogICAgICAgICAgICAgICAgIFB5VW5pY29kZV9EZWNvZGVMYXRpbjEoUHlCeXRlc19BU19TVFJJTkcob2JqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUob2JqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpY3QiKTsKKyAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKGxhdGluMSk7CisKICAgICAgICAgICAgIGlmICh1bmljb2RlX3N0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIGlmIChsYXRpbjEgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGxhdGluMSA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJsYXRpbjEiKTsKLSAgICAgICAgICAgICAgICBpZiAobGF0aW4xID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IFB5X0J1aWxkVmFsdWUoIihPKE9PKSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY3NfZW5jb2RlLCB1bmljb2RlX3N0ciwgbGF0aW4xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPmNvZGVjc19lbmNvZGUsIHVuaWNvZGVfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9sYXRpbjEpKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlX3N0cik7CiAgICAgICAgIH0KIApAQCAtMTc2MiwxNCArMjAwNCwxNCBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfc3NpemVfdCBzaXplOwotICAgICAgICBjaGFyIGhlYWRlcls1XTsKKyAgICAgICAgY2hhciBoZWFkZXJbOV07CiAgICAgICAgIFB5X3NzaXplX3QgbGVuOwogCiAgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKG9iaik7CiAgICAgICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKIAotICAgICAgICBpZiAoc2l6ZSA8IDI1NikgeworICAgICAgICBpZiAoc2l6ZSA8PSAweGZmKSB7CiAgICAgICAgICAgICBoZWFkZXJbMF0gPSBTSE9SVF9CSU5CWVRFUzsKICAgICAgICAgICAgIGhlYWRlclsxXSA9ICh1bnNpZ25lZCBjaGFyKXNpemU7CiAgICAgICAgICAgICBsZW4gPSAyOwpAQCAtMTc4Miw2ICsyMDI0LDExIEBACiAgICAgICAgICAgICBoZWFkZXJbNF0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMjQpICYgMHhmZik7CiAgICAgICAgICAgICBsZW4gPSA1OwogICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgICAgIGhlYWRlclswXSA9IEJJTkJZVEVTODsKKyAgICAgICAgICAgIF93cml0ZV9zaXplNjQoaGVhZGVyICsgMSwgc2l6ZSk7CisgICAgICAgICAgICBsZW4gPSA5OworICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBzZXJpYWxpemUgYSBieXRlcyBvYmplY3QgbGFyZ2VyIHRoYW4gNCBHaUIiKTsKQEAgLTE4NjksNjMgKzIxMTYsMTA2IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNhdmVfdW5pY29kZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQord3JpdGVfdXRmOChQaWNrbGVyT2JqZWN0ICpzZWxmLCBjaGFyICpkYXRhLCBQeV9zc2l6ZV90IHNpemUpCiB7Ci0gICAgUHlfc3NpemVfdCBzaXplOwotICAgIFB5T2JqZWN0ICplbmNvZGVkID0gTlVMTDsKKyAgICBjaGFyIGhlYWRlcls5XTsKKyAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGlmIChzZWxmLT5iaW4pIHsKLSAgICAgICAgY2hhciBwZGF0YVs1XTsKLQotICAgICAgICBlbmNvZGVkID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyhvYmosICJ1dGYtOCIsICJzdXJyb2dhdGVwYXNzIik7Ci0gICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotCi0gICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGVuY29kZWQpOwotICAgICAgICBpZiAoc2l6ZSA+IDB4ZmZmZmZmZmZMKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IHNlcmlhbGl6ZSBhIHN0cmluZyBsYXJnZXIgdGhhbiA0IEdpQiIpOwotICAgICAgICAgICAgZ290byBlcnJvcjsgICAgICAgICAgLyogc3RyaW5nIHRvbyBsYXJnZSAqLwotICAgICAgICB9Ci0KLSAgICAgICAgcGRhdGFbMF0gPSBCSU5VTklDT0RFOwotICAgICAgICBwZGF0YVsxXSA9ICh1bnNpZ25lZCBjaGFyKShzaXplICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzJdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDgpICYgMHhmZik7Ci0gICAgICAgIHBkYXRhWzNdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDE2KSAmIDB4ZmYpOwotICAgICAgICBwZGF0YVs0XSA9ICh1bnNpZ25lZCBjaGFyKSgoc2l6ZSA+PiAyNCkgJiAweGZmKTsKLQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgcGRhdGEsIDUpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChzaXplIDw9IDB4ZmYgJiYgc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICBoZWFkZXJbMF0gPSBTSE9SVF9CSU5VTklDT0RFOworICAgICAgICBoZWFkZXJbMV0gPSAodW5zaWduZWQgY2hhcikoc2l6ZSAmIDB4ZmYpOworICAgICAgICBsZW4gPSAyOworICAgIH0KKyAgICBlbHNlIGlmIChzaXplIDw9IDB4ZmZmZmZmZmZVTCkgeworICAgICAgICBoZWFkZXJbMF0gPSBCSU5VTklDT0RFOworICAgICAgICBoZWFkZXJbMV0gPSAodW5zaWduZWQgY2hhcikoc2l6ZSAmIDB4ZmYpOworICAgICAgICBoZWFkZXJbMl0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gOCkgJiAweGZmKTsKKyAgICAgICAgaGVhZGVyWzNdID0gKHVuc2lnbmVkIGNoYXIpKChzaXplID4+IDE2KSAmIDB4ZmYpOworICAgICAgICBoZWFkZXJbNF0gPSAodW5zaWduZWQgY2hhcikoKHNpemUgPj4gMjQpICYgMHhmZik7CisgICAgICAgIGxlbiA9IDU7CisgICAgfQorICAgIGVsc2UgaWYgKHNlbGYtPnByb3RvID49IDQpIHsKKyAgICAgICAgaGVhZGVyWzBdID0gQklOVU5JQ09ERTg7CisgICAgICAgIF93cml0ZV9zaXplNjQoaGVhZGVyICsgMSwgc2l6ZSk7CisgICAgICAgIGxlbiA9IDk7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgc2VyaWFsaXplIGEgc3RyaW5nIGxhcmdlciB0aGFuIDRHaUIiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBoZWFkZXIsIGxlbikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIGRhdGEsIHNpemUpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3dyaXRlX3VuaWNvZGVfYmluYXJ5KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKmVuY29kZWQgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpkYXRhOworICAgIGludCByOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShvYmopKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBkYXRhID0gUHlVbmljb2RlX0FzVVRGOEFuZFNpemUob2JqLCAmc2l6ZSk7CisgICAgaWYgKGRhdGEgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIHdyaXRlX3V0Zjgoc2VsZiwgZGF0YSwgc2l6ZSk7CisKKyAgICAvKiBJc3N1ZSAjODM4MzogZm9yIHN0cmluZ3Mgd2l0aCBsb25lIHN1cnJvZ2F0ZXMsIGZhbGxiYWNrIG9uIHRoZQorICAgICAgICJzdXJyb2dhdGVwYXNzIiBlcnJvciBoYW5kbGVyLiAqLworICAgIFB5RXJyX0NsZWFyKCk7CisgICAgZW5jb2RlZCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcob2JqLCAidXRmLTgiLCAic3Vycm9nYXRlcGFzcyIpOworICAgIGlmIChlbmNvZGVkID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHIgPSB3cml0ZV91dGY4KHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAorICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpOworICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICByZXR1cm4gcjsKK30KKworc3RhdGljIGludAorc2F2ZV91bmljb2RlKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgaWYgKHNlbGYtPmJpbikgeworICAgICAgICBpZiAod3JpdGVfdW5pY29kZV9iaW5hcnkoc2VsZiwgb2JqKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqZW5jb2RlZDsKKyAgICAgICAgUHlfc3NpemVfdCBzaXplOwogICAgICAgICBjb25zdCBjaGFyIHVuaWNvZGVfb3AgPSBVTklDT0RFOwogCiAgICAgICAgIGVuY29kZWQgPSByYXdfdW5pY29kZV9lc2NhcGUob2JqKTsKICAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZ1bmljb2RlX29wLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnVuaWNvZGVfb3AsIDEpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAKICAgICAgICAgc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCk7Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwgc2l6ZSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLCBzaXplKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7CiAKICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChtZW1vX3B1dChzZWxmLCBvYmopIDwgMCkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgUHlfREVDUkVGKGVuY29kZWQpOwogICAgIHJldHVybiAwOwotCi0gIGVycm9yOgotICAgIFB5X1hERUNSRUYoZW5jb2RlZCk7Ci0gICAgcmV0dXJuIC0xOwogfQogCiAvKiBBIGhlbHBlciBmb3Igc2F2ZV90dXBsZS4gIFB1c2ggdGhlIGxlbiBlbGVtZW50cyBpbiB0dXBsZSB0IG9uIHRoZSBzdGFjay4gKi8KQEAgLTI1NTMsMzQgKzI4NDMsMjUzIEBACiB9CiAKIHN0YXRpYyBpbnQKK3NhdmVfc2V0KFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKml0ZW07CisgICAgaW50IGk7CisgICAgUHlfc3NpemVfdCBzZXRfc2l6ZSwgcHBvcyA9IDA7CisgICAgUHlfaGFzaF90IGhhc2g7CisKKyAgICBjb25zdCBjaGFyIGVtcHR5X3NldF9vcCA9IEVNUFRZX1NFVDsKKyAgICBjb25zdCBjaGFyIG1hcmtfb3AgPSBNQVJLOworICAgIGNvbnN0IGNoYXIgYWRkaXRlbXNfb3AgPSBBRERJVEVNUzsKKworICAgIGlmIChzZWxmLT5wcm90byA8IDQpIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW1zOworICAgICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlOworICAgICAgICBpbnQgc3RhdHVzOworCisgICAgICAgIGl0ZW1zID0gUHlTZXF1ZW5jZV9MaXN0KG9iaik7CisgICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlfQnVpbGRWYWx1ZSgiKE8oTykpIiwgKFB5T2JqZWN0KikmUHlTZXRfVHlwZSwgaXRlbXMpOworICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOworICAgICAgICBpZiAocmVkdWNlX3ZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAvKiBzYXZlX3JlZHVjZSgpIHdpbGwgbWVtb2l6ZSB0aGUgb2JqZWN0IGF1dG9tYXRpY2FsbHkuICovCisgICAgICAgIHN0YXR1cyA9IHNhdmVfcmVkdWNlKHNlbGYsIHJlZHVjZV92YWx1ZSwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKHJlZHVjZV92YWx1ZSk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorCisgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZlbXB0eV9zZXRfb3AsIDEpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzZXRfc2l6ZSA9IFB5U2V0X0dFVF9TSVpFKG9iaik7CisgICAgaWYgKHNldF9zaXplID09IDApCisgICAgICAgIHJldHVybiAwOyAgLyogbm90aGluZyB0byBkbyAqLworCisgICAgLyogV3JpdGUgaW4gYmF0Y2hlcyBvZiBCQVRDSFNJWkUuICovCisgICAgZG8geworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZtYXJrX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHdoaWxlIChfUHlTZXRfTmV4dEVudHJ5KG9iaiwgJnBwb3MsICZpdGVtLCAmaGFzaCkpIHsKKyAgICAgICAgICAgIGlmIChzYXZlKHNlbGYsIGl0ZW0sIDApIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoKytpID09IEJBVENIU0laRSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJmFkZGl0ZW1zX29wLCAxKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChQeVNldF9HRVRfU0laRShvYmopICE9IHNldF9zaXplKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICJzZXQgY2hhbmdlZCBzaXplIGR1cmluZyBpdGVyYXRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGkgPT0gQkFUQ0hTSVpFKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzYXZlX2Zyb3plbnNldChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICppdGVyOworCisgICAgY29uc3QgY2hhciBtYXJrX29wID0gTUFSSzsKKyAgICBjb25zdCBjaGFyIGZyb3plbnNldF9vcCA9IEZST1pFTlNFVDsKKworICAgIGlmIChzZWxmLT5mYXN0ICYmICFmYXN0X3NhdmVfZW50ZXIoc2VsZiwgb2JqKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHNlbGYtPnByb3RvIDwgNCkgeworICAgICAgICBQeU9iamVjdCAqaXRlbXM7CisgICAgICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CisgICAgICAgIGludCBzdGF0dXM7CisKKyAgICAgICAgaXRlbXMgPSBQeVNlcXVlbmNlX0xpc3Qob2JqKTsKKyAgICAgICAgaWYgKGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCIoTyhPKSkiLCAoUHlPYmplY3QqKSZQeUZyb3plblNldF9UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zKTsKKyAgICAgICAgUHlfREVDUkVGKGl0ZW1zKTsKKyAgICAgICAgaWYgKHJlZHVjZV92YWx1ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgLyogc2F2ZV9yZWR1Y2UoKSB3aWxsIG1lbW9pemUgdGhlIG9iamVjdCBhdXRvbWF0aWNhbGx5LiAqLworICAgICAgICBzdGF0dXMgPSBzYXZlX3JlZHVjZShzZWxmLCByZWR1Y2VfdmFsdWUsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihyZWR1Y2VfdmFsdWUpOworICAgICAgICByZXR1cm4gc3RhdHVzOworICAgIH0KKworICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmbWFya19vcCwgMSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpdGVyID0gUHlPYmplY3RfR2V0SXRlcihvYmopOworICAgIGlmIChpdGVyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBmb3IgKDs7KSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtOworCisgICAgICAgIGl0ZW0gPSBQeUl0ZXJfTmV4dChpdGVyKTsKKyAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNhdmUoc2VsZiwgaXRlbSwgMCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgIH0KKyAgICBQeV9ERUNSRUYoaXRlcik7CisKKyAgICAvKiBJZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1lbW8sIHRoaXMgbWVhbnMgaXQgaXMKKyAgICAgICByZWN1cnNpdmUuIEluIHRoaXMgY2FzZSwgdGhyb3cgYXdheSBldmVyeXRoaW5nIHdlIHB1dCBvbiB0aGUKKyAgICAgICBzdGFjaywgYW5kIGZldGNoIHRoZSBvYmplY3QgYmFjayBmcm9tIHRoZSBtZW1vLiAqLworICAgIGlmIChQeU1lbW9UYWJsZV9HZXQoc2VsZi0+bWVtbywgb2JqKSkgeworICAgICAgICBjb25zdCBjaGFyIHBvcF9tYXJrX29wID0gUE9QX01BUks7CisKKyAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZwb3BfbWFya19vcCwgMSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAobWVtb19nZXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmZnJvemVuc2V0X29wLCAxKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmaXhfaW1wb3J0cyhQeU9iamVjdCAqKm1vZHVsZV9uYW1lLCBQeU9iamVjdCAqKmdsb2JhbF9uYW1lKQoreworICAgIFB5T2JqZWN0ICprZXk7CisgICAgUHlPYmplY3QgKml0ZW07CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworCisgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsICptb2R1bGVfbmFtZSwgKmdsb2JhbF9uYW1lKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPm5hbWVfbWFwcGluZ18zdG8yLCBrZXkpOworICAgIFB5X0RFQ1JFRihrZXkpOworICAgIGlmIChpdGVtKSB7CisgICAgICAgIFB5T2JqZWN0ICpmaXhlZF9tb2R1bGVfbmFtZTsKKyAgICAgICAgUHlPYmplY3QgKmZpeGVkX2dsb2JhbF9uYW1lOworCisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGl0ZW0pICE9IDIpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHZhbHVlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSAyLXR1cGxlcywgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgZml4ZWRfbW9kdWxlX25hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKGl0ZW0sIDApOworICAgICAgICBmaXhlZF9nbG9iYWxfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMSk7CisgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGZpeGVkX21vZHVsZV9uYW1lKSB8fAorICAgICAgICAgICAgIVB5VW5pY29kZV9DaGVjayhmaXhlZF9nbG9iYWxfbmFtZSkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfTkFNRV9NQVBQSU5HIHZhbHVlcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBwYWlycyBvZiBzdHIsIG5vdCAoJS4yMDBzLCAlLjIwMHMpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGZpeGVkX21vZHVsZV9uYW1lKS0+dHBfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGZpeGVkX2dsb2JhbF9uYW1lKS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBQeV9DTEVBUigqbW9kdWxlX25hbWUpOworICAgICAgICBQeV9DTEVBUigqZ2xvYmFsX25hbWUpOworICAgICAgICBQeV9JTkNSRUYoZml4ZWRfbW9kdWxlX25hbWUpOworICAgICAgICBQeV9JTkNSRUYoZml4ZWRfZ2xvYmFsX25hbWUpOworICAgICAgICAqbW9kdWxlX25hbWUgPSBmaXhlZF9tb2R1bGVfbmFtZTsKKyAgICAgICAgKmdsb2JhbF9uYW1lID0gZml4ZWRfZ2xvYmFsX25hbWU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIsICptb2R1bGVfbmFtZSk7CisgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9jb21wYXRfcGlja2xlLlJFVkVSU0VfSU1QT1JUX01BUFBJTkcgdmFsdWVzICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2hvdWxkIGJlIHN0cmluZ3MsIG5vdCAlLjIwMHMiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKCptb2R1bGVfbmFtZSk7CisgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgKm1vZHVsZV9uYW1lID0gaXRlbTsKKyAgICB9CisgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKIHNhdmVfZ2xvYmFsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0YXRpYyBQeU9iamVjdCAqbmFtZV9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm1vZHVsZV9uYW1lID0gTlVMTDsKICAgICBQeU9iamVjdCAqbW9kdWxlID0gTlVMTDsKICAgICBQeU9iamVjdCAqY2xzOworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICBpbnQgc3RhdHVzID0gMDsKKyAgICBfUHlfSURFTlRJRklFUihfX25hbWVfXyk7CisgICAgX1B5X0lERU5USUZJRVIoX19xdWFsbmFtZV9fKTsKIAogICAgIGNvbnN0IGNoYXIgZ2xvYmFsX29wID0gR0xPQkFMOwogCi0gICAgaWYgKG5hbWVfc3RyID09IE5VTEwpIHsKLSAgICAgICAgbmFtZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKLSAgICAgICAgaWYgKG5hbWVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLQogICAgIGlmIChuYW1lKSB7CisgICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKICAgICAgICAgZ2xvYmFsX25hbWUgPSBuYW1lOwotICAgICAgICBQeV9JTkNSRUYoZ2xvYmFsX25hbWUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZ2xvYmFsX25hbWUgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZV9zdHIpOwotICAgICAgICBpZiAoZ2xvYmFsX25hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIGlmIChzZWxmLT5wcm90byA+PSA0KSB7CisgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX3F1YWxuYW1lX18pOworICAgICAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGdsb2JhbF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdsb2JhbF9uYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fbmFtZV9fKTsKKyAgICAgICAgICAgIGlmIChnbG9iYWxfbmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBtb2R1bGVfbmFtZSA9IHdoaWNobW9kdWxlKG9iaiwgZ2xvYmFsX25hbWUpOworICAgIG1vZHVsZV9uYW1lID0gd2hpY2htb2R1bGUob2JqLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgaWYgKG1vZHVsZV9uYW1lID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTI1OTQsMjEgKzMxMDMsMjEgQEAKICAgICAgICBleHRyYSBwYXJhbWV0ZXJzIG9mIF9faW1wb3J0X18gdG8gZml4IHRoYXQuICovCiAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0KG1vZHVsZV9uYW1lKTsKICAgICBpZiAobW9kdWxlID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGltcG9ydCBvZiBtb2R1bGUgJVIgZmFpbGVkIiwKICAgICAgICAgICAgICAgICAgICAgIG9iaiwgbW9kdWxlX25hbWUpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBjbHMgPSBQeU9iamVjdF9HZXRBdHRyKG1vZHVsZSwgZ2xvYmFsX25hbWUpOworICAgIGNscyA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byA+PSA0KTsKICAgICBpZiAoY2xzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBhdHRyaWJ1dGUgbG9va3VwICVTLiVTIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICBvYmosIG1vZHVsZV9uYW1lLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBwaWNrbGUgJVI6IGF0dHJpYnV0ZSBsb29rdXAgJVMgb24gJVMgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgIG9iaiwgZ2xvYmFsX25hbWUsIG1vZHVsZV9uYW1lKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGNscyAhPSBvYmopIHsKICAgICAgICAgUHlfREVDUkVGKGNscyk7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQaWNrbGluZ0Vycm9yLAorICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgcGlja2xlICVSOiBpdCdzIG5vdCB0aGUgc2FtZSBvYmplY3QgYXMgJVMuJVMiLAogICAgICAgICAgICAgICAgICAgICAgb2JqLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjYxOSwxOCArMzEyOCwyNyBAQAogICAgICAgICAvKiBTZWUgd2hldGhlciB0aGlzIGlzIGluIHRoZSBleHRlbnNpb24gcmVnaXN0cnksIGFuZCBpZgogICAgICAgICAgKiBzbyBnZW5lcmF0ZSBhbiBFWFQgb3Bjb2RlLgogICAgICAgICAgKi8KKyAgICAgICAgUHlPYmplY3QgKmV4dGVuc2lvbl9rZXk7CiAgICAgICAgIFB5T2JqZWN0ICpjb2RlX29iajsgICAgICAvKiBleHRlbnNpb24gY29kZSBhcyBQeXRob24gb2JqZWN0ICovCiAgICAgICAgIGxvbmcgY29kZTsgICAgICAgICAgICAgICAvKiBleHRlbnNpb24gY29kZSBhcyBDIHZhbHVlICovCiAgICAgICAgIGNoYXIgcGRhdGFbNV07CiAgICAgICAgIFB5X3NzaXplX3QgbjsKIAotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR3b190dXBsZSwgMCwgbW9kdWxlX25hbWUpOwotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR3b190dXBsZSwgMSwgZ2xvYmFsX25hbWUpOwotICAgICAgICBjb2RlX29iaiA9IFB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbl9yZWdpc3RyeSwgdHdvX3R1cGxlKTsKKyAgICAgICAgZXh0ZW5zaW9uX2tleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOworICAgICAgICBpZiAoZXh0ZW5zaW9uX2tleSA9PSBOVUxMKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGNvZGVfb2JqID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmV4dGVuc2lvbl9yZWdpc3RyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbnNpb25fa2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGV4dGVuc2lvbl9rZXkpOwogICAgICAgICAvKiBUaGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZSBleHRlbnNpb24gcmVnaXN0cnkuCiAgICAgICAgICAgIFRoaXMgaXMgdGhlIG1vc3QgbGlrZWx5IGNvZGUgcGF0aC4gKi8KLSAgICAgICAgaWYgKGNvZGVfb2JqID09IE5VTEwpCisgICAgICAgIGlmIChjb2RlX29iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBnb3RvIGdlbl9nbG9iYWw7CisgICAgICAgIH0KIAogICAgICAgICAvKiBYWFg6IHBpY2tsZS5weSBkb2Vzbid0IGNoZWNrIG5laXRoZXIgdGhlIHR5cGUsIG5vciB0aGUgcmFuZ2UKICAgICAgICAgICAgb2YgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBleHRlbnNpb25fcmVnaXN0cnkuIEl0IHNob3VsZCBmb3IKQEAgLTI2MzgsNyArMzE1Niw3IEBACiAKICAgICAgICAgLyogVmVyaWZ5IGNvZGVfb2JqIGhhcyB0aGUgcmlnaHQgdHlwZSBhbmQgdmFsdWUuICovCiAgICAgICAgIGlmICghUHlMb25nX0NoZWNrKGNvZGVfb2JqKSkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogZXh0ZW5zaW9uIGNvZGUgJVIgaXNuJ3QgYW4gaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqLCBjb2RlX29iaik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjY0Niw5ICszMTY0LDggQEAKICAgICAgICAgY29kZSA9IFB5TG9uZ19BU19MT05HKGNvZGVfb2JqKTsKICAgICAgICAgaWYgKGNvZGUgPD0gMCB8fCBjb2RlID4gMHg3ZmZmZmZmZkwpIHsKICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IHBpY2tsZSAlUjogZXh0ZW5zaW9uIGNvZGUgJWxkIGlzIG91dCBvZiByYW5nZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iaiwgY29kZSk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLCAiQ2FuJ3QgcGlja2xlICVSOiBleHRlbnNpb24gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29kZSAlbGQgaXMgb3V0IG9mIHJhbmdlIiwgb2JqLCBjb2RlKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KIApAQCAtMjY3NywxMjAgKzMxOTQsODQgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICAvKiBHZW5lcmF0ZSBhIG5vcm1hbCBnbG9iYWwgb3Bjb2RlIGlmIHdlIGFyZSB1c2luZyBhIHBpY2tsZQotICAgICAgICAgICBwcm90b2NvbCA8PSAyLCBvciBpZiB0aGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZQotICAgICAgICAgICBleHRlbnNpb24gcmVnaXN0cnkuICovCi0gICAgICAgIFB5T2JqZWN0ICplbmNvZGVkOwotICAgICAgICBQeU9iamVjdCAqKCp1bmljb2RlX2VuY29kZXIpKFB5T2JqZWN0ICopOwotCiAgIGdlbl9nbG9iYWw6Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmZ2xvYmFsX29wLCAxKSA8IDApCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgY29uc3QgY2hhciBzdGFja19nbG9iYWxfb3AgPSBTVEFDS19HTE9CQUw7CiAKLSAgICAgICAgLyogU2luY2UgUHl0aG9uIDMuMCBub3cgc3VwcG9ydHMgbm9uLUFTQ0lJIGlkZW50aWZpZXJzLCB3ZSBlbmNvZGUgYm90aAotICAgICAgICAgICB0aGUgbW9kdWxlIG5hbWUgYW5kIHRoZSBnbG9iYWwgbmFtZSB1c2luZyBVVEYtOC4gV2UgZG8gc28gb25seSB3aGVuCi0gICAgICAgICAgIHdlIGFyZSB1c2luZyB0aGUgcGlja2xlIHByb3RvY29sIG5ld2VyIHRoYW4gdmVyc2lvbiAzLiBUaGlzIGlzIHRvCi0gICAgICAgICAgIGVuc3VyZSBjb21wYXRpYmlsaXR5IHdpdGggb2xkZXIgVW5waWNrbGVyIHJ1bm5pbmcgb24gUHl0aG9uIDIueC4gKi8KLSAgICAgICAgaWYgKHNlbGYtPnByb3RvID49IDMpIHsKLSAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc1VURjhTdHJpbmc7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBtb2R1bGVfbmFtZSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoc2F2ZShzZWxmLCBnbG9iYWxfbmFtZSwgMCkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAmc3RhY2tfZ2xvYmFsX29wLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nOwotICAgICAgICB9CisgICAgICAgICAgICAvKiBHZW5lcmF0ZSBhIG5vcm1hbCBnbG9iYWwgb3Bjb2RlIGlmIHdlIGFyZSB1c2luZyBhIHBpY2tsZQorICAgICAgICAgICAgICAgcHJvdG9jb2wgPCA0LCBvciBpZiB0aGUgb2JqZWN0IGlzIG5vdCByZWdpc3RlcmVkIGluIHRoZQorICAgICAgICAgICAgICAgZXh0ZW5zaW9uIHJlZ2lzdHJ5LiAqLworICAgICAgICAgICAgUHlPYmplY3QgKmVuY29kZWQ7CisgICAgICAgICAgICBQeU9iamVjdCAqKCp1bmljb2RlX2VuY29kZXIpKFB5T2JqZWN0ICopOwogCi0gICAgICAgIC8qIEZvciBwcm90b2NvbCA8IDMgYW5kIGlmIHRoZSB1c2VyIGRpZG4ndCByZXF1ZXN0IGFnYWluc3QgZG9pbmcgc28sCi0gICAgICAgICAgIHdlIGNvbnZlcnQgbW9kdWxlIG5hbWVzIHRvIHRoZSBvbGQgMi54IG1vZHVsZSBuYW1lcy4gKi8KLSAgICAgICAgaWYgKHNlbGYtPmZpeF9pbXBvcnRzKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqa2V5OwotICAgICAgICAgICAgUHlPYmplY3QgKml0ZW07Ci0KLSAgICAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwotICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsICZnbG9iYWxfb3AsIDEpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG5hbWVfbWFwcGluZ18zdG8yLCBrZXkpOwotICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGl0ZW0pICE9IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyB2YWx1ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSAyLXR1cGxlcywgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGl0ZW0pLT50cF9uYW1lKTsKKworICAgICAgICAgICAgLyogRm9yIHByb3RvY29sIDwgMyBhbmQgaWYgdGhlIHVzZXIgZGlkbid0IHJlcXVlc3QgYWdhaW5zdCBkb2luZworICAgICAgICAgICAgICAgc28sIHdlIGNvbnZlcnQgbW9kdWxlIG5hbWVzIHRvIHRoZSBvbGQgMi54IG1vZHVsZSBuYW1lcy4gKi8KKyAgICAgICAgICAgIGlmIChzZWxmLT5wcm90byA8IDMgJiYgc2VsZi0+Zml4X2ltcG9ydHMpIHsKKyAgICAgICAgICAgICAgICBpZiAoZml4X2ltcG9ydHMoJm1vZHVsZV9uYW1lLCAmZ2xvYmFsX25hbWUpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9DTEVBUihtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICAgICAgUHlfQ0xFQVIoZ2xvYmFsX25hbWUpOwotICAgICAgICAgICAgICAgIG1vZHVsZV9uYW1lID0gUHlUdXBsZV9HRVRfSVRFTShpdGVtLCAwKTsKLSAgICAgICAgICAgICAgICBnbG9iYWxfbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oaXRlbSwgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobW9kdWxlX25hbWUpIHx8Ci0gICAgICAgICAgICAgICAgICAgICFQeVVuaWNvZGVfQ2hlY2soZ2xvYmFsX25hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9OQU1FX01BUFBJTkcgdmFsdWVzICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaG91bGQgYmUgcGFpcnMgb2Ygc3RyLCBub3QgKCUuMjAwcywgJS4yMDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG1vZHVsZV9uYW1lKS0+dHBfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoZ2xvYmFsX25hbWUpLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZ2xvYmFsX25hbWUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihpbXBvcnRfbWFwcGluZ18zdG8yLCBtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGl0ZW0pKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORyB2YWx1ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNob3VsZCBiZSBzdHJpbmdzLCBub3QgJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9DTEVBUihtb2R1bGVfbmFtZSk7Ci0gICAgICAgICAgICAgICAgbW9kdWxlX25hbWUgPSBpdGVtOwotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICAvKiBTaW5jZSBQeXRob24gMy4wIG5vdyBzdXBwb3J0cyBub24tQVNDSUkgaWRlbnRpZmllcnMsIHdlIGVuY29kZQorICAgICAgICAgICAgICAgYm90aCB0aGUgbW9kdWxlIG5hbWUgYW5kIHRoZSBnbG9iYWwgbmFtZSB1c2luZyBVVEYtOC4gV2UgZG8gc28KKyAgICAgICAgICAgICAgIG9ubHkgd2hlbiB3ZSBhcmUgdXNpbmcgdGhlIHBpY2tsZSBwcm90b2NvbCBuZXdlciB0aGFuIHZlcnNpb24KKyAgICAgICAgICAgICAgIDMuIFRoaXMgaXMgdG8gZW5zdXJlIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciBVbnBpY2tsZXIgcnVubmluZworICAgICAgICAgICAgICAgb24gUHl0aG9uIDIueC4gKi8KKyAgICAgICAgICAgIGlmIChzZWxmLT5wcm90byA9PSAzKSB7CisgICAgICAgICAgICAgICAgdW5pY29kZV9lbmNvZGVyID0gUHlVbmljb2RlX0FzVVRGOFN0cmluZzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVuaWNvZGVfZW5jb2RlciA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2Rlcihtb2R1bGVfbmFtZSk7CisgICAgICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBtb2R1bGUgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX25hbWUsIHNlbGYtPnByb3RvKTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyogU2F2ZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLiAqLwotICAgICAgICBlbmNvZGVkID0gdW5pY29kZV9lbmNvZGVyKG1vZHVsZV9uYW1lKTsKLSAgICAgICAgaWYgKGVuY29kZWQgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBtb2R1bGUgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBpY2tsZSBwcm90b2NvbCAlaSIsIG1vZHVsZV9uYW1lLCBzZWxmLT5wcm90byk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBQeUJ5dGVzX0FTX1NUUklORyhlbmNvZGVkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSkgPCAwKSB7CisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShlbmNvZGVkKSkgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKLSAgICAgICAgaWYoX1BpY2tsZXJfV3JpdGUoc2VsZiwgIlxuIiwgMSkgPCAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgICAgIC8qIFNhdmUgdGhlIG5hbWUgb2YgdGhlIG1vZHVsZS4gKi8KLSAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2RlcihnbG9iYWxfbmFtZSk7Ci0gICAgICAgIGlmIChlbmNvZGVkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgZ2xvYmFsIGlkZW50aWZpZXIgJyVTJyB1c2luZyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8pOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgUHlCeXRlc19BU19TVFJJTkcoZW5jb2RlZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgLyogU2F2ZSB0aGUgbmFtZSBvZiB0aGUgbW9kdWxlLiAqLworICAgICAgICAgICAgZW5jb2RlZCA9IHVuaWNvZGVfZW5jb2RlcihnbG9iYWxfbmFtZSk7CisgICAgICAgICAgICBpZiAoZW5jb2RlZCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSBnbG9iYWwgaWRlbnRpZmllciAnJVMnIHVzaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUgcHJvdG9jb2wgJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsX25hbWUsIHNlbGYtPnByb3RvKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QaWNrbGVyX1dyaXRlKHNlbGYsIFB5Qnl0ZXNfQVNfU1RSSU5HKGVuY29kZWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoZW5jb2RlZCkpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbmNvZGVkKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCAiXG4iLCAxKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQotICAgICAgICBQeV9ERUNSRUYoZW5jb2RlZCk7Ci0gICAgICAgIGlmKF9QaWNrbGVyX1dyaXRlKHNlbGYsICJcbiIsIDEpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAgICAgLyogTWVtb2l6ZSB0aGUgb2JqZWN0LiAqLwogICAgICAgICBpZiAobWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCiAgICAgICAgICAgICBnb3RvIGVycm9yOwpAQCAtMjgwOCwzMCArMzI4OSw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLXNhdmVfZWxsaXBzaXMoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKLXsKLSAgICBQeU9iamVjdCAqc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIkVsbGlwc2lzIik7Ci0gICAgaW50IHJlczsKLSAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXMgPSBzYXZlX2dsb2JhbChzZWxmLCBQeV9FbGxpcHNpcywgc3RyKTsKLSAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgaW50Ci1zYXZlX25vdGltcGxlbWVudGVkKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnN0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJOb3RJbXBsZW1lbnRlZCIpOwotICAgIGludCByZXM7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgUHlfTm90SW1wbGVtZW50ZWQsIHN0cik7Ci0gICAgUHlfREVDUkVGKHN0cik7Ci0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAogc2F2ZV9zaW5nbGV0b25fdHlwZShQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqc2luZ2xldG9uKQogewogICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CkBAIC0yODcxLDcgKzMzMjgsNyBAQAogICAgIGNvbnN0IGNoYXIgYmlucGVyc2lkX29wID0gQklOUEVSU0lEOwogCiAgICAgUHlfSU5DUkVGKG9iaik7Ci0gICAgcGlkID0gX1BpY2tsZXJfRmFzdENhbGwoc2VsZiwgZnVuYywgb2JqKTsKKyAgICBwaWQgPSBfUGlja2xlX0Zhc3RDYWxsKGZ1bmMsIG9iaik7CiAgICAgaWYgKHBpZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTI5MTksMTQgKzMzNzYsOSBAQAogZ2V0X2NsYXNzKFB5T2JqZWN0ICpvYmopCiB7CiAgICAgUHlPYmplY3QgKmNsczsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnN0cl9jbGFzczsKKyAgICBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOwogCi0gICAgaWYgKHN0cl9jbGFzcyA9PSBOVUxMKSB7Ci0gICAgICAgIHN0cl9jbGFzcyA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2NsYXNzX18iKTsKLSAgICAgICAgaWYgKHN0cl9jbGFzcyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIGNscyA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCBzdHJfY2xhc3MpOworICAgIGNscyA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX2NsYXNzX18pOwogICAgIGlmIChjbHMgPT0gTlVMTCkgewogICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0yOTQ4LDE3ICszNDAwLDE4IEBACiAgICAgUHlPYmplY3QgKnN0YXRlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbGlzdGl0ZW1zID0gUHlfTm9uZTsKICAgICBQeU9iamVjdCAqZGljdGl0ZW1zID0gUHlfTm9uZTsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgUHlfc3NpemVfdCBzaXplOwotCi0gICAgaW50IHVzZV9uZXdvYmogPSBzZWxmLT5wcm90byA+PSAyOworICAgIGludCB1c2VfbmV3b2JqID0gMCwgdXNlX25ld29ial9leCA9IDA7CiAKICAgICBjb25zdCBjaGFyIHJlZHVjZV9vcCA9IFJFRFVDRTsKICAgICBjb25zdCBjaGFyIGJ1aWxkX29wID0gQlVJTEQ7CiAgICAgY29uc3QgY2hhciBuZXdvYmpfb3AgPSBORVdPQko7CisgICAgY29uc3QgY2hhciBuZXdvYmpfZXhfb3AgPSBORVdPQkpfRVg7CiAKICAgICBzaXplID0gUHlUdXBsZV9TaXplKGFyZ3MpOwogICAgIGlmIChzaXplIDwgMiB8fCBzaXplID4gNSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgInR1cGxlIHJldHVybmVkIGJ5ICIKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5QaWNrbGluZ0Vycm9yLCAidHVwbGUgcmV0dXJuZWQgYnkgIgogICAgICAgICAgICAgICAgICAgICAgICAgIl9fcmVkdWNlX18gbXVzdCBjb250YWluIDIgdGhyb3VnaCA1IGVsZW1lbnRzIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC0yOTY4LDEyICszNDIxLDEyIEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmICghUHlDYWxsYWJsZV9DaGVjayhjYWxsYWJsZSkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJmaXJzdCBpdGVtIG9mIHRoZSB0dXBsZSAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgImZpcnN0IGl0ZW0gb2YgdGhlIHR1cGxlICIKICAgICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBfX3JlZHVjZV9fIG11c3QgYmUgY2FsbGFibGUiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJndHVwKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgInNlY29uZCBpdGVtIG9mIHRoZSB0dXBsZSAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgInNlY29uZCBpdGVtIG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGEgdHVwbGUiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTI5ODQsNyArMzQzNyw3IEBACiAgICAgaWYgKGxpc3RpdGVtcyA9PSBQeV9Ob25lKQogICAgICAgICBsaXN0aXRlbXMgPSBOVUxMOwogICAgIGVsc2UgaWYgKCFQeUl0ZXJfQ2hlY2sobGlzdGl0ZW1zKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwgImZvdXJ0aCBlbGVtZW50IG9mIHRoZSB0dXBsZSAiCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwgImZvdXJ0aCBlbGVtZW50IG9mIHRoZSB0dXBsZSAiCiAgICAgICAgICAgICAgICAgICAgICAicmV0dXJuZWQgYnkgX19yZWR1Y2VfXyBtdXN0IGJlIGFuIGl0ZXJhdG9yLCBub3QgJXMiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShsaXN0aXRlbXMpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMjk5Myw0MCArMzQ0Niw4MSBAQAogICAgIGlmIChkaWN0aXRlbXMgPT0gUHlfTm9uZSkKICAgICAgICAgZGljdGl0ZW1zID0gTlVMTDsKICAgICBlbHNlIGlmICghUHlJdGVyX0NoZWNrKGRpY3RpdGVtcykpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFBpY2tsaW5nRXJyb3IsICJmaWZ0aCBlbGVtZW50IG9mIHRoZSB0dXBsZSAiCisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwgImZpZnRoIGVsZW1lbnQgb2YgdGhlIHR1cGxlICIKICAgICAgICAgICAgICAgICAgICAgICJyZXR1cm5lZCBieSBfX3JlZHVjZV9fIG11c3QgYmUgYW4gaXRlcmF0b3IsIG5vdCAlcyIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGRpY3RpdGVtcyktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgLyogUHJvdG9jb2wgMiBzcGVjaWFsIGNhc2U6IGlmIGNhbGxhYmxlJ3MgbmFtZSBpcyBfX25ld29ial9fLCB1c2UKLSAgICAgICBORVdPQkouICovCi0gICAgaWYgKHVzZV9uZXdvYmopIHsKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpuZXdvYmpfc3RyID0gTlVMTCwgKm5hbWVfc3RyID0gTlVMTDsKKyAgICBpZiAoc2VsZi0+cHJvdG8gPj0gMikgewogICAgICAgICBQeU9iamVjdCAqbmFtZTsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoX19uYW1lX18pOwogCi0gICAgICAgIGlmIChuZXdvYmpfc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ld29ial9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uZXdvYmpfXyIpOwotICAgICAgICAgICAgbmFtZV9zdHIgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19uYW1lX18iKTsKLSAgICAgICAgICAgIGlmIChuZXdvYmpfc3RyID09IE5VTEwgfHwgbmFtZV9zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotICAgICAgICBuYW1lID0gUHlPYmplY3RfR2V0QXR0cihjYWxsYWJsZSwgbmFtZV9zdHIpOworICAgICAgICBuYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChjYWxsYWJsZSwgJlB5SWRfX19uYW1lX18pOwogICAgICAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpCi0gICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB1c2VfbmV3b2JqID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoc2VsZi0+cHJvdG8gPj0gNCkgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfZXhfXyk7CisgICAgICAgICAgICB1c2VfbmV3b2JqX2V4ID0gUHlVbmljb2RlX0NoZWNrKG5hbWUpICYmCisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUoCisgICAgICAgICAgICAgICAgICAgIG5hbWUsIF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fbmV3b2JqX2V4X18pKSA9PSAwOworICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfXyk7CiAgICAgICAgICAgICB1c2VfbmV3b2JqID0gUHlVbmljb2RlX0NoZWNrKG5hbWUpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmUobmFtZSwgbmV3b2JqX3N0cikgPT0gMDsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZSgKKyAgICAgICAgICAgICAgICAgICAgbmFtZSwgX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19uZXdvYmpfXykpID09IDA7CiAgICAgICAgICAgICBQeV9ERUNSRUYobmFtZSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHVzZV9uZXdvYmopIHsKKworICAgIGlmICh1c2VfbmV3b2JqX2V4KSB7CisgICAgICAgIFB5T2JqZWN0ICpjbHM7CisgICAgICAgIFB5T2JqZWN0ICphcmdzOworICAgICAgICBQeU9iamVjdCAqa3dhcmdzOworCisgICAgICAgIGlmIChQeV9TSVpFKGFyZ3R1cCkgIT0gMykgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggb2YgdGhlIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0IGJlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZXhhY3RseSAzLCBub3QgJXpkIiwgUHlfU0laRShhcmd0dXApKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGNscyA9IFB5VHVwbGVfR0VUX0lURU0oYXJndHVwLCAwKTsKKyAgICAgICAgaWYgKCFQeVR5cGVfQ2hlY2soY2xzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBpdGVtIGZyb20gTkVXT0JKX0VYIGFyZ3VtZW50IHR1cGxlIG11c3QgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBhIGNsYXNzLCBub3QgJS4yMDBzIiwgUHlfVFlQRShjbHMpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBhcmdzID0gUHlUdXBsZV9HRVRfSVRFTShhcmd0dXAsIDEpOworICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2Vjb25kIGl0ZW0gZnJvbSBORVdPQkpfRVggYXJndW1lbnQgdHVwbGUgbXVzdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImJlIGEgdHVwbGUsIG5vdCAlLjIwMHMiLCBQeV9UWVBFKGFyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBrd2FyZ3MgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMik7CisgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKGt3YXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+UGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAidGhpcmQgaXRlbSBmcm9tIE5FV09CSl9FWCBhcmd1bWVudCB0dXBsZSBtdXN0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmUgYSBkaWN0LCBub3QgJS4yMDBzIiwgUHlfVFlQRShrd2FyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzYXZlKHNlbGYsIGNscywgMCkgPCAwIHx8CisgICAgICAgICAgICBzYXZlKHNlbGYsIGFyZ3MsIDApIDwgMCB8fAorICAgICAgICAgICAgc2F2ZShzZWxmLCBrd2FyZ3MsIDApIDwgMCB8fAorICAgICAgICAgICAgX1BpY2tsZXJfV3JpdGUoc2VsZiwgJm5ld29ial9leF9vcCwgMSkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAodXNlX25ld29iaikgewogICAgICAgICBQeU9iamVjdCAqY2xzOwogICAgICAgICBQeU9iamVjdCAqbmV3YXJndHVwOwogICAgICAgICBQeU9iamVjdCAqb2JqX2NsYXNzOwpAQCAtMzAzNCwxMyArMzUyOCwxMyBAQAogCiAgICAgICAgIC8qIFNhbml0eSBjaGVja3MuICovCiAgICAgICAgIGlmIChQeV9TSVpFKGFyZ3R1cCkgPCAxKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUGlja2xpbmdFcnJvciwgIl9fbmV3b2JqX18gYXJnbGlzdCBpcyBlbXB0eSIpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5QaWNrbGluZ0Vycm9yLCAiX19uZXdvYmpfXyBhcmdsaXN0IGlzIGVtcHR5Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAogICAgICAgICBjbHMgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3R1cCwgMCk7CiAgICAgICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLCAiYXJnc1swXSBmcm9tICIKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgImFyZ3NbMF0gZnJvbSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9fbmV3b2JqX18gYXJncyBpcyBub3QgYSB0eXBlIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTMwNTAsNyArMzU0NCw3IEBACiAgICAgICAgICAgICBwID0gb2JqX2NsYXNzICE9IGNsczsgICAgLyogdHJ1ZSBpZmYgYSBwcm9ibGVtICovCiAgICAgICAgICAgICBQeV9ERUNSRUYob2JqX2NsYXNzKTsKICAgICAgICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFBpY2tsaW5nRXJyb3IsICJhcmdzWzBdIGZyb20gIgorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwgImFyZ3NbMF0gZnJvbSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX25ld29ial9fIGFyZ3MgaGFzIHRoZSB3cm9uZyBjbGFzcyIpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KQEAgLTMxMTAsOCArMzYwNCwyMyBAQAogICAgICAgIHRoZSBjYWxsZXIgZG8gbm90IHdhbnQgdG8gbWVtb2l6ZSB0aGUgb2JqZWN0LiBOb3QgcGFydGljdWxhcmx5IHVzZWZ1bCwKICAgICAgICBidXQgdGhhdCBpcyB0byBtaW1pYyB0aGUgYmVoYXZpb3Igc2F2ZV9yZWR1Y2UoKSBpbiBwaWNrbGUucHkgd2hlbgogICAgICAgIG9iaiBpcyBOb25lLiAqLwotICAgIGlmIChvYmogJiYgbWVtb19wdXQoc2VsZiwgb2JqKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAob2JqICE9IE5VTEwpIHsKKyAgICAgICAgLyogSWYgdGhlIG9iamVjdCBpcyBhbHJlYWR5IGluIHRoZSBtZW1vLCB0aGlzIG1lYW5zIGl0IGlzCisgICAgICAgICAgIHJlY3Vyc2l2ZS4gSW4gdGhpcyBjYXNlLCB0aHJvdyBhd2F5IGV2ZXJ5dGhpbmcgd2UgcHV0IG9uIHRoZQorICAgICAgICAgICBzdGFjaywgYW5kIGZldGNoIHRoZSBvYmplY3QgYmFjayBmcm9tIHRoZSBtZW1vLiAqLworICAgICAgICBpZiAoUHlNZW1vVGFibGVfR2V0KHNlbGYtPm1lbW8sIG9iaikpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgcG9wX29wID0gUE9QOworCisgICAgICAgICAgICBpZiAoX1BpY2tsZXJfV3JpdGUoc2VsZiwgJnBvcF9vcCwgMSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChtZW1vX2dldChzZWxmLCBvYmopIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1lbW9fcHV0KHNlbGYsIG9iaikgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGlmIChsaXN0aXRlbXMgJiYgYmF0Y2hfbGlzdChzZWxmLCBsaXN0aXRlbXMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMzEzNiw2ICszNjQ1LDkgQEAKICAgICBQeU9iamVjdCAqcmVkdWNlX3ZhbHVlID0gTlVMTDsKICAgICBpbnQgc3RhdHVzID0gMDsKIAorICAgIGlmIChfUGlja2xlcl9PcGNvZGVCb3VuZGFyeShzZWxmKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKwogICAgIGlmIChQeV9FbnRlclJlY3Vyc2l2ZUNhbGwoIiB3aGlsZSBwaWNrbGluZyBhbiBvYmplY3QiKSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC0zMTY0LDE0ICszNjc2LDYgQEAKICAgICAgICAgc3RhdHVzID0gc2F2ZV9ub25lKHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9Ci0gICAgZWxzZSBpZiAob2JqID09IFB5X0VsbGlwc2lzKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNhdmVfZWxsaXBzaXMoc2VsZiwgb2JqKTsKLSAgICAgICAgZ290byBkb25lOwotICAgIH0KLSAgICBlbHNlIGlmIChvYmogPT0gUHlfTm90SW1wbGVtZW50ZWQpIHsKLSAgICAgICAgc3RhdHVzID0gc2F2ZV9ub3RpbXBsZW1lbnRlZChzZWxmLCBvYmopOwotICAgICAgICBnb3RvIGRvbmU7Ci0gICAgfQogICAgIGVsc2UgaWYgKG9iaiA9PSBQeV9GYWxzZSB8fCBvYmogPT0gUHlfVHJ1ZSkgewogICAgICAgICBzdGF0dXMgPSBzYXZlX2Jvb2woc2VsZiwgb2JqKTsKICAgICAgICAgZ290byBkb25lOwpAQCAtMzIwNiw2ICszNzEwLDE0IEBACiAgICAgICAgIHN0YXR1cyA9IHNhdmVfZGljdChzZWxmLCBvYmopOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQorICAgIGVsc2UgaWYgKHR5cGUgPT0gJlB5U2V0X1R5cGUpIHsKKyAgICAgICAgc3RhdHVzID0gc2F2ZV9zZXQoc2VsZiwgb2JqKTsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICBlbHNlIGlmICh0eXBlID09ICZQeUZyb3plblNldF9UeXBlKSB7CisgICAgICAgIHN0YXR1cyA9IHNhdmVfZnJvemVuc2V0KHNlbGYsIG9iaik7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CiAgICAgZWxzZSBpZiAodHlwZSA9PSAmUHlMaXN0X1R5cGUpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9saXN0KHNlbGYsIG9iaik7CiAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTMyMjAsMTYgKzM3MzIsNiBAQAogICAgIH0KICAgICBlbHNlIGlmICh0eXBlID09ICZQeUZ1bmN0aW9uX1R5cGUpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBOVUxMKTsKLSAgICAgICAgaWYgKHN0YXR1cyA8IDAgJiYgUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQaWNrbGVFcnJvcikpIHsKLSAgICAgICAgICAgIC8qIGZhbGwgYmFjayB0byByZWR1Y2UgKi8KLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAodHlwZSA9PSAmUHlDRnVuY3Rpb25fVHlwZSkgewotICAgICAgICBzdGF0dXMgPSBzYXZlX2dsb2JhbChzZWxmLCBvYmosIE5VTEwpOwogICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCkBAIC0zMjQwLDEyICszNzQyLDIyIEBACiAgICAgICogX19yZWR1Y2VfZXhfXyBtZXRob2QsIG9yIHRoZSBvYmplY3QncyBfX3JlZHVjZV9fIG1ldGhvZC4KICAgICAgKi8KICAgICBpZiAoc2VsZi0+ZGlzcGF0Y2hfdGFibGUgPT0gTlVMTCkgewotICAgICAgICByZWR1Y2VfZnVuYyA9IFB5RGljdF9HZXRJdGVtKGRpc3BhdGNoX3RhYmxlLCAoUHlPYmplY3QgKil0eXBlKTsKLSAgICAgICAgLyogUHlEaWN0X0dldEl0ZW0oKSB1bmxpa2UgUHlPYmplY3RfR2V0SXRlbSgpIGFuZAotICAgICAgICAgICBQeU9iamVjdF9HZXRBdHRyKCkgcmV0dXJucyBhIGJvcnJvd2VkIHJlZiAqLwotICAgICAgICBQeV9YSU5DUkVGKHJlZHVjZV9mdW5jKTsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICByZWR1Y2VfZnVuYyA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKHN0LT5kaXNwYXRjaF90YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKil0eXBlKTsKKyAgICAgICAgaWYgKHJlZHVjZV9mdW5jID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKCkgcmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZS4KKyAgICAgICAgICAgICAgIEluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgdG8gYmUgY29uc2lzdGVudCB3aXRoCisgICAgICAgICAgICAgICBQeU9iamVjdF9HZXRJdGVtIGFuZCBfUHlPYmplY3RfR2V0QXR0cklkIHVzZWQgYmVsb3cuICovCisgICAgICAgICAgICBQeV9JTkNSRUYocmVkdWNlX2Z1bmMpOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeU9iamVjdF9HZXRJdGVtKHNlbGYtPmRpc3BhdGNoX3RhYmxlLCAoUHlPYmplY3QgKil0eXBlKTsKKyAgICAgICAgcmVkdWNlX2Z1bmMgPSBQeU9iamVjdF9HZXRJdGVtKHNlbGYtPmRpc3BhdGNoX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopdHlwZSk7CiAgICAgICAgIGlmIChyZWR1Y2VfZnVuYyA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCiAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKQEAgLTMyNTUsMjUgKzM3NjcsMTYgQEAKICAgICB9CiAgICAgaWYgKHJlZHVjZV9mdW5jICE9IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKG9iaik7Ci0gICAgICAgIHJlZHVjZV92YWx1ZSA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHJlZHVjZV9mdW5jLCBvYmopOworICAgICAgICByZWR1Y2VfdmFsdWUgPSBfUGlja2xlX0Zhc3RDYWxsKHJlZHVjZV9mdW5jLCBvYmopOwogICAgIH0KICAgICBlbHNlIGlmIChQeVR5cGVfSXNTdWJ0eXBlKHR5cGUsICZQeVR5cGVfVHlwZSkpIHsKICAgICAgICAgc3RhdHVzID0gc2F2ZV9nbG9iYWwoc2VsZiwgb2JqLCBOVUxMKTsKICAgICAgICAgZ290byBkb25lOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpyZWR1Y2Vfc3RyID0gTlVMTDsKLSAgICAgICAgc3RhdGljIFB5T2JqZWN0ICpyZWR1Y2VfZXhfc3RyID0gTlVMTDsKKyAgICAgICAgX1B5X0lERU5USUZJRVIoX19yZWR1Y2VfXyk7CisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fcmVkdWNlX2V4X18pOwogCi0gICAgICAgIC8qIENhY2hlIHRoZSBuYW1lIG9mIHRoZSByZWR1Y2UgbWV0aG9kcy4gKi8KLSAgICAgICAgaWYgKHJlZHVjZV9zdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVkdWNlX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3JlZHVjZV9fIik7Ci0gICAgICAgICAgICBpZiAocmVkdWNlX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICByZWR1Y2VfZXhfc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcmVkdWNlX2V4X18iKTsKLSAgICAgICAgICAgIGlmIChyZWR1Y2VfZXhfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQogCiAgICAgICAgIC8qIFhYWDogSWYgdGhlIF9fcmVkdWNlX18gbWV0aG9kIGlzIGRlZmluZWQsIF9fcmVkdWNlX2V4X18gaXMKICAgICAgICAgICAgYXV0b21hdGljYWxseSBkZWZpbmVkIGFzIF9fcmVkdWNlX18uIFdoaWxlIHRoaXMgaXMgY29udmVuaWVudCwgdGhpcwpAQCAtMzI4NCwyNiArMzc4NywzNCBAQAogICAgICAgICAgICBkb24ndCBhY3R1YWxseSBoYXZlIHRvIGNoZWNrIGZvciBhIF9fcmVkdWNlX18gbWV0aG9kLiAqLwogCiAgICAgICAgIC8qIENoZWNrIGZvciBhIF9fcmVkdWNlX2V4X18gbWV0aG9kLiAqLwotICAgICAgICByZWR1Y2VfZnVuYyA9IFB5T2JqZWN0X0dldEF0dHIob2JqLCByZWR1Y2VfZXhfc3RyKTsKKyAgICAgICAgcmVkdWNlX2Z1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19yZWR1Y2VfZXhfXyk7CiAgICAgICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqcHJvdG87CiAgICAgICAgICAgICBwcm90byA9IFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5wcm90byk7CiAgICAgICAgICAgICBpZiAocHJvdG8gIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHJlZHVjZV92YWx1ZSA9IF9QaWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHJlZHVjZV9mdW5jLCBwcm90byk7CisgICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gX1BpY2tsZV9GYXN0Q2FsbChyZWR1Y2VfZnVuYywgcHJvdG8pOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKQorICAgICAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworCisgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19BdHRyaWJ1dGVFcnJvcikpIHsKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgICAgICAvKiBDaGVjayBmb3IgYSBfX3JlZHVjZV9fIG1ldGhvZC4gKi8KLSAgICAgICAgICAgIHJlZHVjZV9mdW5jID0gUHlPYmplY3RfR2V0QXR0cihvYmosIHJlZHVjZV9zdHIpOwotICAgICAgICAgICAgaWYgKHJlZHVjZV9mdW5jICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICByZWR1Y2VfdmFsdWUgPSBQeU9iamVjdF9DYWxsKHJlZHVjZV9mdW5jLCBlbXB0eV90dXBsZSwgTlVMTCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwgImNhbid0IHBpY2tsZSAnJS4yMDBzJyBvYmplY3Q6ICVSIiwKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGEgX19yZWR1Y2VfXyBtZXRob2QuICovCisgICAgICAgICAgICByZWR1Y2VfZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9fX3JlZHVjZV9fKTsKKyAgICAgICAgICAgIGlmIChyZWR1Y2VfZnVuYyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVtcHR5X3R1cGxlID0gUHlUdXBsZV9OZXcoMCk7CisgICAgICAgICAgICAgICAgcmVkdWNlX3ZhbHVlID0gUHlPYmplY3RfQ2FsbChyZWR1Y2VfZnVuYywgZW1wdHlfdHVwbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW1wdHlfdHVwbGUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5QaWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgcGlja2xlICclLjIwMHMnIG9iamVjdDogJVIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLCBvYmopOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CkBAIC0zMzE5LDcgKzM4MzAsOCBAQAogICAgIH0KIAogICAgIGlmICghUHlUdXBsZV9DaGVjayhyZWR1Y2VfdmFsdWUpKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQaWNrbGluZ0Vycm9yLAorICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+UGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJfX3JlZHVjZV9fIG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIHR1cGxlIik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQpAQCAtMzMzMSw2ICszODQzLDcgQEAKICAgICAgICAgc3RhdHVzID0gLTE7CiAgICAgfQogICBkb25lOgorCiAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CiAgICAgUHlfWERFQ1JFRihyZWR1Y2VfZnVuYyk7CiAgICAgUHlfWERFQ1JFRihyZWR1Y2VfdmFsdWUpOwpAQCAtMzM1MSw2ICszODY0LDggQEAKICAgICAgICAgaGVhZGVyWzFdID0gKHVuc2lnbmVkIGNoYXIpc2VsZi0+cHJvdG87CiAgICAgICAgIGlmIChfUGlja2xlcl9Xcml0ZShzZWxmLCBoZWFkZXIsIDIpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHNlbGYtPnByb3RvID49IDQpCisgICAgICAgICAgICBzZWxmLT5mcmFtaW5nID0gMTsKICAgICB9CiAKICAgICBpZiAoc2F2ZShzZWxmLCBvYmosIDApIDwgMCB8fApAQCAtMzM2MCwxNiArMzg3NSwyMSBAQAogICAgIHJldHVybiAwOwogfQogCi1QeURvY19TVFJWQVIoUGlja2xlcl9jbGVhcl9tZW1vX2RvYywKLSJjbGVhcl9tZW1vKCkgLT4gTm9uZS4gQ2xlYXJzIHRoZSBwaWNrbGVyJ3MgXCJtZW1vXCIuIgotIlxuIgotIlRoZSBtZW1vIGlzIHRoZSBkYXRhIHN0cnVjdHVyZSB0aGF0IHJlbWVtYmVycyB3aGljaCBvYmplY3RzIHRoZVxuIgotInBpY2tsZXIgaGFzIGFscmVhZHkgc2Vlbiwgc28gdGhhdCBzaGFyZWQgb3IgcmVjdXJzaXZlIG9iamVjdHMgYXJlXG4iCi0icGlja2xlZCBieSByZWZlcmVuY2UgYW5kIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuXG4iCi0icmUtdXNpbmcgcGlja2xlcnMuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuUGlja2xlci5jbGVhcl9tZW1vCisKK0NsZWFycyB0aGUgcGlja2xlcidzICJtZW1vIi4KKworVGhlIG1lbW8gaXMgdGhlIGRhdGEgc3RydWN0dXJlIHRoYXQgcmVtZW1iZXJzIHdoaWNoIG9iamVjdHMgdGhlCitwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzIGFyZQorcGlja2xlZCBieSByZWZlcmVuY2UgYW5kIG5vdCBieSB2YWx1ZS4gIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuCityZS11c2luZyBwaWNrbGVycy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVBpY2tsZXJfY2xlYXJfbWVtbyhQaWNrbGVyT2JqZWN0ICpzZWxmKQorX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW9faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg2NjVjODY1OGFhYTA5NGIgaW5wdXQ9MDFiZGFkNTJmM2Q5M2U1Nl0qLwogewogICAgIGlmIChzZWxmLT5tZW1vKQogICAgICAgICBQeU1lbW9UYWJsZV9DbGVhcihzZWxmLT5tZW1vKTsKQEAgLTMzNzcsMjcgKzM4OTcsMzEgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAotUHlEb2NfU1RSVkFSKFBpY2tsZXJfZHVtcF9kb2MsCi0iZHVtcChvYmopIC0+IE5vbmUuIFdyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5QaWNrbGVyLmR1bXAKKworICBvYmo6IG9iamVjdAorICAvCisKK1dyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBvcGVuIGZpbGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QaWNrbGVyX2R1bXAoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1BpY2tsZXJfZHVtcChQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg3ZWNhZDEyNjFlMDJhYzcgaW5wdXQ9NTUyZWIxYzBmNTIyNjBkOV0qLwogewotICAgIFB5T2JqZWN0ICpvYmo7Ci0KICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBQaWNrbGVyIHdhcyBpbml0aWFsaXplZCBjb3JyZWN0bHkgKGlzc3VlMzY2NCkuCiAgICAgICAgRGV2ZWxvcGVycyBvZnRlbiBmb3JnZXQgdG8gY2FsbCBfX2luaXRfXygpIGluIHRoZWlyIHN1YmNsYXNzZXMsIHdoaWNoCiAgICAgICAgd291bGQgdHJpZ2dlciBhIHNlZ2ZhdWx0IHdpdGhvdXQgdGhpcyBjaGVjay4gKi8KICAgICBpZiAoc2VsZi0+d3JpdGUgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9Gb3JtYXQoc3QtPlBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiUGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICVzLl9faW5pdF9fKCkiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpkdW1wIiwgJm9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgaWYgKF9QaWNrbGVyX0NsZWFyQnVmZmVyKHNlbGYpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTM0MTAsMTEgKzM5MzQsMzcgQEAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLlBpY2tsZXIuX19zaXplb2ZfXyAtPiBQeV9zc2l6ZV90CisKK1JldHVybnMgc2l6ZSBpbiBtZW1vcnksIGluIGJ5dGVzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlfc3NpemVfdAorX3BpY2tsZV9QaWNrbGVyX19fc2l6ZW9mX19faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTEwNmVkYjMxMjNmMzMyZTEgaW5wdXQ9OGNiYmVjOWJkNTU0MGQ0Ml0qLworeworICAgIFB5X3NzaXplX3QgcmVzLCBzOworCisgICAgcmVzID0gc2l6ZW9mKFBpY2tsZXJPYmplY3QpOworICAgIGlmIChzZWxmLT5tZW1vICE9IE5VTEwpIHsKKyAgICAgICAgcmVzICs9IHNpemVvZihQeU1lbW9UYWJsZSk7CisgICAgICAgIHJlcyArPSBzZWxmLT5tZW1vLT5tdF9hbGxvY2F0ZWQgKiBzaXplb2YoUHlNZW1vRW50cnkpOworICAgIH0KKyAgICBpZiAoc2VsZi0+b3V0cHV0X2J1ZmZlciAhPSBOVUxMKSB7CisgICAgICAgIHMgPSBfUHlTeXNfR2V0U2l6ZU9mKHNlbGYtPm91dHB1dF9idWZmZXIpOworICAgICAgICBpZiAocyA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmVzICs9IHM7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgUGlja2xlcl9tZXRob2RzW10gPSB7Ci0gICAgeyJkdW1wIiwgKFB5Q0Z1bmN0aW9uKVBpY2tsZXJfZHVtcCwgTUVUSF9WQVJBUkdTLAotICAgICBQaWNrbGVyX2R1bXBfZG9jfSwKLSAgICB7ImNsZWFyX21lbW8iLCAoUHlDRnVuY3Rpb24pUGlja2xlcl9jbGVhcl9tZW1vLCBNRVRIX05PQVJHUywKLSAgICAgUGlja2xlcl9jbGVhcl9tZW1vX2RvY30sCisgICAgX1BJQ0tMRV9QSUNLTEVSX0RVTVBfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9QSUNLTEVSX0NMRUFSX01FTU9fTUVUSE9EREVGCisgICAgX1BJQ0tMRV9QSUNLTEVSX19fU0laRU9GX19fTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0zNDI3LDcgKzM5NzcsNiBAQAogICAgIFB5X1hERUNSRUYoc2VsZi0+d3JpdGUpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+cGVyc19mdW5jKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmRpc3BhdGNoX3RhYmxlKTsKLSAgICBQeV9YREVDUkVGKHNlbGYtPmFyZyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5mYXN0X21lbW8pOwogCiAgICAgUHlNZW1vVGFibGVfRGVsKHNlbGYtPm1lbW8pOwpAQCAtMzQ0MSw3ICszOTkwLDYgQEAKICAgICBQeV9WSVNJVChzZWxmLT53cml0ZSk7CiAgICAgUHlfVklTSVQoc2VsZi0+cGVyc19mdW5jKTsKICAgICBQeV9WSVNJVChzZWxmLT5kaXNwYXRjaF90YWJsZSk7Ci0gICAgUHlfVklTSVQoc2VsZi0+YXJnKTsKICAgICBQeV9WSVNJVChzZWxmLT5mYXN0X21lbW8pOwogICAgIHJldHVybiAwOwogfQpAQCAtMzQ1Myw3ICs0MDAxLDYgQEAKICAgICBQeV9DTEVBUihzZWxmLT53cml0ZSk7CiAgICAgUHlfQ0xFQVIoc2VsZi0+cGVyc19mdW5jKTsKICAgICBQeV9DTEVBUihzZWxmLT5kaXNwYXRjaF90YWJsZSk7Ci0gICAgUHlfQ0xFQVIoc2VsZi0+YXJnKTsKICAgICBQeV9DTEVBUihzZWxmLT5mYXN0X21lbW8pOwogCiAgICAgaWYgKHNlbGYtPm1lbW8gIT0gTlVMTCkgewpAQCAtMzQ2NSw0OSArNDAxMiw0NiBAQAogfQogCiAKLVB5RG9jX1NUUlZBUihQaWNrbGVyX2RvYywKLSJQaWNrbGVyKGZpbGUsIHByb3RvY29sPU5vbmUpIgotIlxuIgotIlRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3Igd3JpdGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS5cbiIKLSJcbiIKLSJUaGUgb3B0aW9uYWwgcHJvdG9jb2wgYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZVxuIgotImdpdmVuIHByb3RvY29sOyBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzLiAgVGhlIGRlZmF1bHRcbiIKLSJwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3JcbiIKLSJQeXRob24gMy4wLlxuIgotIlxuIgotIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3RcbiIKLSJwcm90b2NvbCB2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZVxuIgotIm1vcmUgcmVjZW50IHRoZSB2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlXG4iCi0icHJvZHVjZWQuXG4iCi0iXG4iCi0iVGhlIGZpbGUgYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlXG4iCi0iYnl0ZXMgYXJndW1lbnQuIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnlcbiIKLSJ3cml0aW5nLCBhIGlvLkJ5dGVzSU8gaW5zdGFuY2UsIG9yIGFueSBvdGhlciBjdXN0b20gb2JqZWN0IHRoYXRcbiIKLSJtZWV0cyB0aGlzIGludGVyZmFjZS5cbiIKLSJcbiIKLSJJZiBmaXhfaW1wb3J0cyBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCi0ibWFwIHRoZSBuZXcgUHl0aG9uIDMueCBuYW1lcyB0byB0aGUgb2xkIG1vZHVsZSBuYW1lcyB1c2VkIGluIFB5dGhvblxuIgotIjIueCwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIueC5cbiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLlBpY2tsZXIuX19pbml0X18KKworICBmaWxlOiBvYmplY3QKKyAgcHJvdG9jb2w6IG9iamVjdCA9IE5VTEwKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisKK1RoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3Igd3JpdGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS4KKworVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbgorcHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUgZGVmYXVsdAorcHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLgorCitTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sCit2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUKK3ZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuCisKK1RoZSAqZmlsZSogYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlCitieXRlcyBhcmd1bWVudC4gSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeQord3JpdGluZywgYW4gaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cwordGhpcyBpbnRlcmZhY2UuCisKK0lmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeQordG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24KKzIsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgaW50Ci1QaWNrbGVyX2luaXQoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU2ZTIyOWYzYjFmNDMzMmYgaW5wdXQ9NGZhYWJkYmM3NjNjMjM4OV0qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsiZmlsZSIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIDB9OwotICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIFB5T2JqZWN0ICpwcm90b19vYmogPSBOVUxMOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CiAgICAgX1B5X0lERU5USUZJRVIocGVyc2lzdGVudF9pZCk7CiAgICAgX1B5X0lERU5USUZJRVIoZGlzcGF0Y2hfdGFibGUpOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T086UGlja2xlciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmZmlsZSwgJnByb3RvX29iaiwgJmZpeF9pbXBvcnRzKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCiAgICAgLyogSW4gY2FzZSBvZiBtdWx0aXBsZSBfX2luaXRfXygpIGNhbGxzLCBjbGVhciBwcmV2aW91cyBjb250ZW50LiAqLwogICAgIGlmIChzZWxmLT53cml0ZSAhPSBOVUxMKQogICAgICAgICAodm9pZClQaWNrbGVyX2NsZWFyKHNlbGYpOwogCi0gICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHNlbGYsIHByb3RvX29iaiwgZml4X2ltcG9ydHMpIDwgMCkKKyAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2woc2VsZiwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChfUGlja2xlcl9TZXRPdXRwdXRTdHJlYW0oc2VsZiwgZmlsZSkgPCAwKQpAQCAtMzUyOCw3ICs0MDcyLDYgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBzZWxmLT5hcmcgPSBOVUxMOwogICAgIHNlbGYtPmZhc3QgPSAwOwogICAgIHNlbGYtPmZhc3RfbmVzdGluZyA9IDA7CiAgICAgc2VsZi0+ZmFzdF9tZW1vID0gTlVMTDsKQEAgLTM1NDYsOSArNDA4OSwxMSBAQAogICAgICAgICBpZiAoc2VsZi0+ZGlzcGF0Y2hfdGFibGUgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisKICAgICByZXR1cm4gMDsKIH0KIAorCiAvKiBEZWZpbmUgYSBwcm94eSBvYmplY3QgZm9yIHRoZSBQaWNrbGVyJ3MgaW50ZXJuYWwgbWVtbyBvYmplY3QuIFRoaXMgaXMgdG8KICAqIGF2b2lkIGJyZWFraW5nIGNvZGUgbGlrZToKICAqICBwaWNrbGVyLm1lbW8uY2xlYXIoKQpAQCAtMzU1OSwyNyArNDEwNCwzMCBAQAogICogaW50ZW50aW9uYWwsIGFzIHRoZXNlIHNob3VsZCBiZSB0cmVhdGVkIGFzIGJsYWNrLWJveCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLgogICovCiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeU9iamVjdF9IRUFECi0gICAgUGlja2xlck9iamVjdCAqcGlja2xlcjsgLyogUGlja2xlciB3aG9zZSBtZW1vIHRhYmxlIHdlJ3JlIHByb3h5aW5nLiAqLwotfSBQaWNrbGVyTWVtb1Byb3h5T2JqZWN0OworLypbY2xpbmljIGlucHV0XQorX3BpY2tsZS5QaWNrbGVyTWVtb1Byb3h5LmNsZWFyCiAKLVB5RG9jX1NUUlZBUihwbXBfY2xlYXJfZG9jLAotIm1lbW8uY2xlYXIoKSAtPiBOb25lLiAgUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uIik7CitSZW1vdmUgYWxsIGl0ZW1zIGZyb20gbWVtby4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBtcF9jbGVhcihQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZmI5MzcwZDQ4YWU4YjA1IGlucHV0PWNjYzE4NmRhY2QwZjE0MDVdKi8KIHsKICAgICBpZiAoc2VsZi0+cGlja2xlci0+bWVtbykKICAgICAgICAgUHlNZW1vVGFibGVfQ2xlYXIoc2VsZi0+cGlja2xlci0+bWVtbyk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUihwbXBfY29weV9kb2MsCi0ibWVtby5jb3B5KCkgLT4gbmV3X21lbW8uICBDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19waWNrbGUuUGlja2xlck1lbW9Qcm94eS5jb3B5CisKK0NvcHkgdGhlIG1lbW8gdG8gYSBuZXcgb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG1wX2NvcHkoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iYjgzYTkxOWQyOTIyNWVmIGlucHV0PWI3MzA0MzQ4NWFjMzBiMzZdKi8KIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlNZW1vVGFibGUgKm1lbW87CkBAIC0zNjE2LDE0ICs0MTY0LDE4IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwbXBfcmVkdWNlX2RvYywKLSJtZW1vLl9fcmVkdWNlX18oKS4gUGlja2xpbmcgc3VwcG9ydC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19waWNrbGUuUGlja2xlck1lbW9Qcm94eS5fX3JlZHVjZV9fCisKK0ltcGxlbWVudCBwaWNrbGUgc3VwcG9ydC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBtcF9yZWR1Y2UoUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19pbXBsKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmViYmExMTY4ODYzYWIxZCBpbnB1dD0yZjdjNTQwZTI0YjdhYWU0XSovCiB7CiAgICAgUHlPYmplY3QgKnJlZHVjZV92YWx1ZSwgKmRpY3RfYXJnczsKLSAgICBQeU9iamVjdCAqY29udGVudHMgPSBwbXBfY29weShzZWxmKTsKKyAgICBQeU9iamVjdCAqY29udGVudHMgPSBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKHNlbGYpOwogICAgIGlmIChjb250ZW50cyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzY0Niw5ICs0MTk4LDkgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHBpY2tsZXJwcm94eV9tZXRob2RzW10gPSB7Ci0gICAgeyJjbGVhciIsICAgICAgKFB5Q0Z1bmN0aW9uKXBtcF9jbGVhciwgIE1FVEhfTk9BUkdTLCAgcG1wX2NsZWFyX2RvY30sCi0gICAgeyJjb3B5IiwgICAgICAgKFB5Q0Z1bmN0aW9uKXBtcF9jb3B5LCAgIE1FVEhfTk9BUkdTLCAgcG1wX2NvcHlfZG9jfSwKLSAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pcG1wX3JlZHVjZSwgTUVUSF9WQVJBUkdTLCBwbXBfcmVkdWNlX2RvY30sCisgICAgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX0NMRUFSX01FVEhPRERFRgorICAgIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DT1BZX01FVEhPRERFRgorICAgIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9fX1JFRFVDRV9fX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMzg2MCw3ICs0NDEyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9HQywKLSAgICBQaWNrbGVyX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCisgICAgX3BpY2tsZV9QaWNrbGVyX19faW5pdF9fX19kb2NfXywgICAgLyp0cF9kb2MqLwogICAgICh0cmF2ZXJzZXByb2MpUGlja2xlcl90cmF2ZXJzZSwgICAgIC8qdHBfdHJhdmVyc2UqLwogICAgIChpbnF1aXJ5KVBpY2tsZXJfY2xlYXIsICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwpAQCAtMzg3NSw3ICs0NDI3LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX2dldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9zZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGljdG9mZnNldCovCi0gICAgKGluaXRwcm9jKVBpY2tsZXJfaW5pdCwgICAgICAgICAgICAgLyp0cF9pbml0Ki8KKyAgICBfcGlja2xlX1BpY2tsZXJfX19pbml0X18sICAgICAgICAgICAvKnRwX2luaXQqLwogICAgIFB5VHlwZV9HZW5lcmljQWxsb2MsICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwogICAgIFB5VHlwZV9HZW5lcmljTmV3LCAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KICAgICBQeU9iamVjdF9HQ19EZWwsICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwpAQCAtMzkwMSw4ICs0NDUzLDkgQEAKIHN0YXRpYyBQeV9zc2l6ZV90CiBtYXJrZXIoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogeworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKICAgICBpZiAoc2VsZi0+bnVtX21hcmtzIDwgMSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiY291bGQgbm90IGZpbmQgTUFSSyIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgImNvdWxkIG5vdCBmaW5kIE1BUksiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtMzkxOSw3ICs0NDcyLDggQEAKIHN0YXRpYyBpbnQKIGJhZF9yZWFkbGluZSh2b2lkKQogewotICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJwaWNrbGUgZGF0YSB3YXMgdHJ1bmNhdGVkIik7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAicGlja2xlIGRhdGEgd2FzIHRydW5jYXRlZCIpOwogICAgIHJldHVybiAtMTsKIH0KIApAQCAtMzk4MCwxNyArNDUzNCwyNSBAQAogICogYXMgYSBDIFB5X3NzaXplX3QsIG9yIC0xIGlmIGl0J3MgaGlnaGVyIHRoYW4gUFlfU1NJWkVfVF9NQVguCiAgKi8KIHN0YXRpYyBQeV9zc2l6ZV90Ci1jYWxjX2JpbnNpemUoY2hhciAqYnl0ZXMsIGludCBzaXplKQorY2FsY19iaW5zaXplKGNoYXIgKmJ5dGVzLCBpbnQgbmJ5dGVzKQogewogICAgIHVuc2lnbmVkIGNoYXIgKnMgPSAodW5zaWduZWQgY2hhciAqKWJ5dGVzOworICAgIGludCBpOwogICAgIHNpemVfdCB4ID0gMDsKIAotICAgIGFzc2VydChzaXplID09IDQpOwotCi0gICAgeCA9ICAoc2l6ZV90KSBzWzBdOwotICAgIHggfD0gKHNpemVfdCkgc1sxXSA8PCA4OwotICAgIHggfD0gKHNpemVfdCkgc1syXSA8PCAxNjsKLSAgICB4IHw9IChzaXplX3QpIHNbM10gPDwgMjQ7CisgICAgaWYgKG5ieXRlcyA+IChpbnQpc2l6ZW9mKHNpemVfdCkpIHsKKyAgICAgICAgLyogQ2hlY2sgZm9yIGludGVnZXIgb3ZlcmZsb3cuICBCSU5CWVRFUzggYW5kIEJJTlVOSUNPREU4IG9wY29kZXMKKyAgICAgICAgICogaGF2ZSA2NC1iaXQgc2l6ZSB0aGF0IGNhbid0IGJlIHJlcHJlc2VudGVkIG9uIDMyLWJpdCBwbGF0Zm9ybS4KKyAgICAgICAgICovCisgICAgICAgIGZvciAoaSA9IChpbnQpc2l6ZW9mKHNpemVfdCk7IGkgPCBuYnl0ZXM7IGkrKykgeworICAgICAgICAgICAgaWYgKHNbaV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG5ieXRlcyA9IChpbnQpc2l6ZW9mKHNpemVfdCk7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBuYnl0ZXM7IGkrKykgeworICAgICAgICB4IHw9IChzaXplX3QpIHNbaV0gPDwgKDggKiBpKTsKKyAgICB9CiAKICAgICBpZiAoeCA+IFBZX1NTSVpFX1RfTUFYKQogICAgICAgICByZXR1cm4gLTE7CkBAIC00MDA0LDIxICs0NTY2LDIxIEBACiAgKiBvZiB4LXBsYXRmb3JtIGJ1Z3MuCiAgKi8KIHN0YXRpYyBsb25nCi1jYWxjX2JpbmludChjaGFyICpieXRlcywgaW50IHNpemUpCitjYWxjX2JpbmludChjaGFyICpieXRlcywgaW50IG5ieXRlcykKIHsKICAgICB1bnNpZ25lZCBjaGFyICpzID0gKHVuc2lnbmVkIGNoYXIgKilieXRlczsKLSAgICBpbnQgaSA9IHNpemU7CisgICAgaW50IGk7CiAgICAgbG9uZyB4ID0gMDsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAgeCB8PSAobG9uZylzW2ldIDw8IChpICogOCk7CisgICAgZm9yIChpID0gMDsgaSA8IG5ieXRlczsgaSsrKSB7CisgICAgICAgIHggfD0gKGxvbmcpc1tpXSA8PCAoOCAqIGkpOwogICAgIH0KIAogICAgIC8qIFVubGlrZSBCSU5JTlQxIGFuZCBCSU5JTlQyLCBCSU5JTlQgKG1vcmUgYWNjdXJhdGVseSBCSU5JTlQ0KQogICAgICAqIGlzIHNpZ25lZCwgc28gb24gYSBib3ggd2l0aCBsb25ncyBiaWdnZXIgdGhhbiA0IGJ5dGVzIHdlIG5lZWQKICAgICAgKiB0byBleHRlbmQgYSBCSU5JTlQncyBzaWduIGJpdCB0byB0aGUgZnVsbCB3aWR0aC4KICAgICAgKi8KLSAgICBpZiAoU0laRU9GX0xPTkcgPiA0ICYmIHNpemUgPT0gNCkgeworICAgIGlmIChTSVpFT0ZfTE9ORyA+IDQgJiYgbmJ5dGVzID09IDQpIHsKICAgICAgICAgeCB8PSAtKHggJiAoMUwgPDwgMzEpKTsKICAgICB9CiAKQEAgLTQxMTYsOCArNDY3OCw5IEBACiAKICAgICBzaXplID0gY2FsY19iaW5pbnQobmJ5dGVzLCBzaXplKTsKICAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogICAgICAgICAvKiBDb3JydXB0IG9yIGhvc3RpbGUgcGlja2xlIC0tIHdlIG5ldmVyIHdyaXRlIG9uZSBsaWtlIHRoaXMgKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiTE9ORyBwaWNrbGUgaGFzIG5lZ2F0aXZlIGJ5dGUgY291bnQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTQxOTEsNzUgKzQ3NTQsMTEwIEBACiBsb2FkX3N0cmluZyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QgKmJ5dGVzOwotICAgIFB5T2JqZWN0ICpzdHIgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvYmo7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgY2hhciAqcywgKnA7CiAKICAgICBpZiAoKGxlbiA9IF9VbnBpY2tsZXJfUmVhZGxpbmUoc2VsZiwgJnMpKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBpZiAobGVuIDwgMikKLSAgICAgICAgcmV0dXJuIGJhZF9yZWFkbGluZSgpOwotICAgIGlmICgocyA9IHN0cmR1cChzKSkgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCisgICAgLyogU3RyaXAgdGhlIG5ld2xpbmUgKi8KKyAgICBsZW4tLTsKICAgICAvKiBTdHJpcCBvdXRlcm1vc3QgcXVvdGVzICovCi0gICAgd2hpbGUgKGxlbiA+IDAgJiYgc1tsZW4gLSAxXSA8PSAnICcpCi0gICAgICAgIGxlbi0tOwotICAgIGlmIChsZW4gPiAxICYmIHNbMF0gPT0gJyInICYmIHNbbGVuIC0gMV0gPT0gJyInKSB7Ci0gICAgICAgIHNbbGVuIC0gMV0gPSAnXDAnOwotICAgICAgICBwID0gcyArIDE7Ci0gICAgICAgIGxlbiAtPSAyOwotICAgIH0KLSAgICBlbHNlIGlmIChsZW4gPiAxICYmIHNbMF0gPT0gJ1wnJyAmJiBzW2xlbiAtIDFdID09ICdcJycpIHsKLSAgICAgICAgc1tsZW4gLSAxXSA9ICdcMCc7CisgICAgaWYgKGxlbiA+PSAyICYmIHNbMF0gPT0gc1tsZW4gLSAxXSAmJiAoc1swXSA9PSAnXCcnIHx8IHNbMF0gPT0gJyInKSkgewogICAgICAgICBwID0gcyArIDE7CiAgICAgICAgIGxlbiAtPSAyOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgZnJlZShzKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJpbnNlY3VyZSBzdHJpbmcgcGlja2xlIik7CisgICAgICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0R2xvYmFsU3RhdGUoKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAidGhlIFNUUklORyBvcGNvZGUgYXJndW1lbnQgbXVzdCBiZSBxdW90ZWQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICBhc3NlcnQobGVuID49IDApOwogCiAgICAgLyogVXNlIHRoZSBQeUJ5dGVzIEFQSSB0byBkZWNvZGUgdGhlIHN0cmluZywgc2luY2UgdGhhdCBpcyB3aGF0IGlzIHVzZWQKICAgICAgICB0byBlbmNvZGUsIGFuZCB0aGVuIGNvZXJjZSB0aGUgcmVzdWx0IHRvIFVuaWNvZGUuICovCiAgICAgYnl0ZXMgPSBQeUJ5dGVzX0RlY29kZUVzY2FwZShwLCBsZW4sIE5VTEwsIDAsIE5VTEwpOwotICAgIGZyZWUocyk7CiAgICAgaWYgKGJ5dGVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBzdHIgPSBQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QoYnl0ZXMsIHNlbGYtPmVuY29kaW5nLCBzZWxmLT5lcnJvcnMpOwotICAgIFB5X0RFQ1JFRihieXRlcyk7Ci0gICAgaWYgKHN0ciA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzdHIsIC0xKTsKKyAgICAvKiBMZWF2ZSB0aGUgUHl0aG9uIDIueCBzdHJpbmdzIGFzIGJ5dGVzIGlmIHRoZSAqZW5jb2RpbmcqIGdpdmVuIHRvIHRoZQorICAgICAgIFVucGlja2xlciB3YXMgJ2J5dGVzJy4gT3RoZXJ3aXNlLCBjb252ZXJ0IHRoZW0gdG8gdW5pY29kZS4gKi8KKyAgICBpZiAoc3RyY21wKHNlbGYtPmVuY29kaW5nLCAiYnl0ZXMiKSA9PSAwKSB7CisgICAgICAgIG9iaiA9IGJ5dGVzOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgb2JqID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KGJ5dGVzLCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKKyAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKKyAgICAgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBvYmosIC0xKTsKICAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotbG9hZF9iaW5ieXRlcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCitsb2FkX2NvdW50ZWRfYmluc3RyaW5nKFVucGlja2xlck9iamVjdCAqc2VsZiwgaW50IG5ieXRlcykKIHsKLSAgICBQeU9iamVjdCAqYnl0ZXM7Ci0gICAgUHlfc3NpemVfdCB4OworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUHlfc3NpemVfdCBzaXplOwogICAgIGNoYXIgKnM7CiAKLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA0KSA8IDApCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgbmJ5dGVzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHggPSBjYWxjX2JpbnNpemUocywgNCk7Ci0gICAgaWYgKHggPCAwKSB7CisgICAgc2l6ZSA9IGNhbGNfYmluc2l6ZShzLCBuYnl0ZXMpOworICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgIkJJTlNUUklORyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlemQgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgc2l6ZSkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBDb252ZXJ0IFB5dGhvbiAyLnggc3RyaW5ncyB0byBieXRlcyBpZiB0aGUgKmVuY29kaW5nKiBnaXZlbiB0byB0aGUKKyAgICAgICBVbnBpY2tsZXIgd2FzICdieXRlcycuIE90aGVyd2lzZSwgY29udmVydCB0aGVtIHRvIHVuaWNvZGUuICovCisgICAgaWYgKHN0cmNtcChzZWxmLT5lbmNvZGluZywgImJ5dGVzIikgPT0gMCkgeworICAgICAgICBvYmogPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHMsIHNpemUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgb2JqID0gUHlVbmljb2RlX0RlY29kZShzLCBzaXplLCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKKyAgICB9CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBvYmosIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbG9hZF9jb3VudGVkX2JpbmJ5dGVzKFVucGlja2xlck9iamVjdCAqc2VsZiwgaW50IG5ieXRlcykKK3sKKyAgICBQeU9iamVjdCAqYnl0ZXM7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIGNoYXIgKnM7CisKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBuYnl0ZXMpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc2l6ZSA9IGNhbGNfYmluc2l6ZShzLCBuYnl0ZXMpOworICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJCSU5CWVRFUyBleGNlZWRzIHN5c3RlbSdzIG1heGltdW0gc2l6ZSBvZiAlemQgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgKLSAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHgpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBzaXplKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKLSAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgeCk7CisKKyAgICBieXRlcyA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgc2l6ZSk7CiAgICAgaWYgKGJ5dGVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIApAQCAtNDI2OCw4MiArNDg2Niw2IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfc2hvcnRfYmluYnl0ZXMoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpieXRlczsKLSAgICBQeV9zc2l6ZV90IHg7Ci0gICAgY2hhciAqczsKLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgeCA9ICh1bnNpZ25lZCBjaGFyKXNbMF07Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShzLCB4KTsKLSAgICBpZiAoYnl0ZXMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgUERBVEFfUFVTSChzZWxmLT5zdGFjaywgYnl0ZXMsIC0xKTsKLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbG9hZF9iaW5zdHJpbmcoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpzdHI7Ci0gICAgUHlfc3NpemVfdCB4OwotICAgIGNoYXIgKnM7Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCA0KSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHggPSBjYWxjX2JpbmludChzLCA0KTsKLSAgICBpZiAoeCA8IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJCSU5TVFJJTkcgcGlja2xlIGhhcyBuZWdhdGl2ZSBieXRlIGNvdW50Iik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIENvbnZlcnQgUHl0aG9uIDIueCBzdHJpbmdzIHRvIHVuaWNvZGUuICovCi0gICAgc3RyID0gUHlVbmljb2RlX0RlY29kZShzLCB4LCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKLSAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIHN0ciwgLTEpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1sb2FkX3Nob3J0X2JpbnN0cmluZyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCi17Ci0gICAgUHlPYmplY3QgKnN0cjsKLSAgICBQeV9zc2l6ZV90IHg7Ci0gICAgY2hhciAqczsKLQotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgeCA9ICh1bnNpZ25lZCBjaGFyKXNbMF07Ci0KLSAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCB4KSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIENvbnZlcnQgUHl0aG9uIDIueCBzdHJpbmdzIHRvIHVuaWNvZGUuICovCi0gICAgc3RyID0gUHlVbmljb2RlX0RlY29kZShzLCB4LCBzZWxmLT5lbmNvZGluZywgc2VsZi0+ZXJyb3JzKTsKLSAgICBpZiAoc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIHN0ciwgLTEpOwotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50CiBsb2FkX3VuaWNvZGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpzdHI7CkBAIC00MzY0LDI1ICs0ODg2LDIzIEBACiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfYmludW5pY29kZShVbnBpY2tsZXJPYmplY3QgKnNlbGYpCitsb2FkX2NvdW50ZWRfYmludW5pY29kZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBuYnl0ZXMpCiB7CiAgICAgUHlPYmplY3QgKnN0cjsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgY2hhciAqczsKIAotICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIDQpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZzLCBuYnl0ZXMpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2l6ZSA9IGNhbGNfYmluc2l6ZShzLCA0KTsKKyAgICBzaXplID0gY2FsY19iaW5zaXplKHMsIG5ieXRlcyk7CiAgICAgaWYgKHNpemUgPCAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIkJJTlVOSUNPREUgZXhjZWVkcyBzeXN0ZW0ncyBtYXhpbXVtIHNpemUgb2YgJXpkIGJ5dGVzIiwKLSAgICAgICAgICAgICAgICAgICAgIFBZX1NTSVpFX1RfTUFYCi0gICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICBQWV9TU0laRV9UX01BWCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLQogICAgIGlmIChfVW5waWNrbGVyX1JlYWQoc2VsZiwgJnMsIHNpemUpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC00Mzk1LDE1ICs0OTE1LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfdHVwbGUoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorbG9hZF9jb3VudGVkX3R1cGxlKFVucGlja2xlck9iamVjdCAqc2VsZiwgaW50IGxlbikKIHsKICAgICBQeU9iamVjdCAqdHVwbGU7Ci0gICAgUHlfc3NpemVfdCBpOwogCi0gICAgaWYgKChpID0gbWFya2VyKHNlbGYpKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykgPCBsZW4pCisgICAgICAgIHJldHVybiBzdGFja191bmRlcmZsb3coKTsKIAotICAgIHR1cGxlID0gUGRhdGFfcG9wdHVwbGUoc2VsZi0+c3RhY2ssIGkpOworICAgIHR1cGxlID0gUGRhdGFfcG9wdHVwbGUoc2VsZi0+c3RhY2ssIFB5X1NJWkUoc2VsZi0+c3RhY2spIC0gbGVuKTsKICAgICBpZiAodHVwbGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIFBEQVRBX1BVU0goc2VsZi0+c3RhY2ssIHR1cGxlLCAtMSk7CkBAIC00NDExLDI0ICs0OTMwLDE0IEBACiB9CiAKIHN0YXRpYyBpbnQKLWxvYWRfY291bnRlZF90dXBsZShVbnBpY2tsZXJPYmplY3QgKnNlbGYsIGludCBsZW4pCitsb2FkX3R1cGxlKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICBQeU9iamVjdCAqdHVwbGU7CisgICAgUHlfc3NpemVfdCBpOwogCi0gICAgdHVwbGUgPSBQeVR1cGxlX05ldyhsZW4pOwotICAgIGlmICh0dXBsZSA9PSBOVUxMKQorICAgIGlmICgoaSA9IG1hcmtlcihzZWxmKSkgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICB3aGlsZSAoLS1sZW4gPj0gMCkgewotICAgICAgICBQeU9iamVjdCAqaXRlbTsKLQotICAgICAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGl0ZW0pOwotICAgICAgICBpZiAoaXRlbSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cGxlLCBsZW4sIGl0ZW0pOwotICAgIH0KLSAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCB0dXBsZSwgLTEpOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBsb2FkX2NvdW50ZWRfdHVwbGUoc2VsZiwgUHlfU0laRShzZWxmLT5zdGFjaykgLSBpKTsKIH0KIAogc3RhdGljIGludApAQCAtNDQ1NCw2ICs0OTYzLDE3IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfZW1wdHlfc2V0KFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqc2V0OworCisgICAgaWYgKChzZXQgPSBQeVNldF9OZXcoTlVMTCkpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBzZXQsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbG9hZF9saXN0KFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKICAgICBQeU9iamVjdCAqbGlzdDsKQEAgLTQ0OTUsNiArNTAxNSwyOSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50Citsb2FkX2Zyb3plbnNldChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKml0ZW1zOworICAgIFB5T2JqZWN0ICpmcm96ZW5zZXQ7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgaWYgKChpID0gbWFya2VyKHNlbGYpKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGl0ZW1zID0gUGRhdGFfcG9wdHVwbGUoc2VsZi0+c3RhY2ssIGkpOworICAgIGlmIChpdGVtcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmcm96ZW5zZXQgPSBQeUZyb3plblNldF9OZXcoaXRlbXMpOworICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgaWYgKGZyb3plbnNldCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBmcm96ZW5zZXQsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIGluc3RhbnRpYXRlKFB5T2JqZWN0ICpjbHMsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtNDUyNSw2ICs1MDY4LDkgQEAKICAgICBpZiAoKGkgPSBtYXJrZXIoc2VsZikpIDwgMCkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgaWYgKFB5X1NJWkUoc2VsZi0+c3RhY2spIC0gaSA8IDEpCisgICAgICAgIHJldHVybiBzdGFja191bmRlcmZsb3coKTsKKwogICAgIGFyZ3MgPSBQZGF0YV9wb3B0dXBsZShzZWxmLT5zdGFjaywgaSArIDEpOwogICAgIGlmIChhcmdzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTQ1NjksOCArNTExNSwxMCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoKGxlbiA9IF9VbnBpY2tsZXJfUmVhZGxpbmUoc2VsZiwgJnMpKSA+PSAwKSB7Ci0gICAgICAgIGlmIChsZW4gPCAyKQorICAgICAgICBpZiAobGVuIDwgMikgeworICAgICAgICAgICAgUHlfREVDUkVGKG1vZHVsZV9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiBiYWRfcmVhZGxpbmUoKTsKKyAgICAgICAgfQogICAgICAgICBjbGFzc19uYW1lID0gUHlVbmljb2RlX0RlY29kZUFTQ0lJKHMsIGxlbiAtIDEsICJzdHJpY3QiKTsKICAgICAgICAgaWYgKGNsYXNzX25hbWUgIT0gTlVMTCkgewogICAgICAgICAgICAgY2xzID0gZmluZF9jbGFzcyhzZWxmLCBtb2R1bGVfbmFtZSwgY2xhc3NfbmFtZSk7CkBAIC00NjAyLDYgKzUxNTAsNyBAQAogICAgIFB5T2JqZWN0ICpjbHNyYXcgPSBOVUxMOwogICAgIFB5VHlwZU9iamVjdCAqY2xzOyAgICAgICAgICAvKiBjbHNyYXcgY2FzdCB0byBpdHMgdHJ1ZSB0eXBlICovCiAgICAgUHlPYmplY3QgKm9iajsKKyAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAKICAgICAvKiBTdGFjayBpcyAuLi4gY2xzIGFyZ3R1cGxlLCBhbmQgd2Ugd2FudCB0byBjYWxsCiAgICAgICogY2xzLl9fbmV3X18oY2xzLCAqYXJndHVwbGUpLgpAQCAtNDYxMCw3ICs1MTU5LDggQEAKICAgICBpZiAoYXJncyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogICAgIGlmICghUHlUdXBsZV9DaGVjayhhcmdzKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiTkVXT0JKIGV4cGVjdGVkIGFuIGFyZyAiICJ0dXBsZS4iKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiTkVXT0JKIGV4cGVjdGVkIGFuIGFyZyAiICJ0dXBsZS4iKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKQEAgLTQ2MTksMTIgKzUxNjksMTIgQEAKICAgICBpZiAoY2xzID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKCFQeVR5cGVfQ2hlY2soY2xzKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoVW5waWNrbGluZ0Vycm9yLCAiTkVXT0JKIGNsYXNzIGFyZ3VtZW50ICIKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHN0LT5VbnBpY2tsaW5nRXJyb3IsICJORVdPQkogY2xhc3MgYXJndW1lbnQgIgogICAgICAgICAgICAgICAgICAgICAgICAgImlzbid0IGEgdHlwZSBvYmplY3QiKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGNscy0+dHBfbmV3ID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIk5FV09CSiBjbGFzcyBhcmd1bWVudCAiCisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiTkVXT0JKIGNsYXNzIGFyZ3VtZW50ICIKICAgICAgICAgICAgICAgICAgICAgICAgICJoYXMgTlVMTCB0cF9uZXciKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CkBAIC00NjQ2LDYgKzUxOTYsNTggQEAKIH0KIAogc3RhdGljIGludAorbG9hZF9uZXdvYmpfZXgoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpjbHMsICphcmdzLCAqa3dhcmdzOworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworCisgICAgUERBVEFfUE9QKHNlbGYtPnN0YWNrLCBrd2FyZ3MpOworICAgIGlmIChrd2FyZ3MgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgYXJncyk7CisgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGNscyk7CisgICAgaWYgKGNscyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoIVB5VHlwZV9DaGVjayhjbHMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgIk5FV09CSl9FWCBjbGFzcyBhcmd1bWVudCBtdXN0IGJlIGEgdHlwZSwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGNscyktPnRwX25hbWUpOworICAgICAgICBQeV9ERUNSRUYoY2xzKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgoKFB5VHlwZU9iamVjdCAqKWNscyktPnRwX25ldyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihjbHMpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJORVdPQkpfRVggY2xhc3MgYXJndW1lbnQgZG9lc24ndCBoYXZlIF9fbmV3X18iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBvYmogPSAoKFB5VHlwZU9iamVjdCAqKWNscyktPnRwX25ldygoUHlUeXBlT2JqZWN0ICopY2xzLCBhcmdzLCBrd2FyZ3MpOworICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICBQeV9ERUNSRUYoY2xzKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBvYmosIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbG9hZF9nbG9iYWwoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpnbG9iYWwgPSBOVUxMOwpAQCAtNDY4Miw2ICs1Mjg0LDMyIEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfc3RhY2tfZ2xvYmFsKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqZ2xvYmFsOworICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZTsKKyAgICBQeU9iamVjdCAqZ2xvYmFsX25hbWU7CisKKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIGdsb2JhbF9uYW1lKTsKKyAgICBQREFUQV9QT1Aoc2VsZi0+c3RhY2ssIG1vZHVsZV9uYW1lKTsKKyAgICBpZiAobW9kdWxlX25hbWUgPT0gTlVMTCB8fCAhUHlVbmljb2RlX0NoZWNrRXhhY3QobW9kdWxlX25hbWUpIHx8CisgICAgICAgIGdsb2JhbF9uYW1lID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVja0V4YWN0KGdsb2JhbF9uYW1lKSkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiU1RBQ0tfR0xPQkFMIHJlcXVpcmVzIHN0ciIpOworICAgICAgICBQeV9YREVDUkVGKGdsb2JhbF9uYW1lKTsKKyAgICAgICAgUHlfWERFQ1JFRihtb2R1bGVfbmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZ2xvYmFsID0gZmluZF9jbGFzcyhzZWxmLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOworICAgIFB5X0RFQ1JFRihnbG9iYWxfbmFtZSk7CisgICAgUHlfREVDUkVGKG1vZHVsZV9uYW1lKTsKKyAgICBpZiAoZ2xvYmFsID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQREFUQV9QVVNIKHNlbGYtPnN0YWNrLCBnbG9iYWwsIC0xKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAogbG9hZF9wZXJzaWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogewogICAgIFB5T2JqZWN0ICpwaWQ7CkBAIC00Njk4LDkgKzUzMjYsOSBAQAogICAgICAgICBpZiAocGlkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgLyogVWdoLi4uIHRoaXMgZG9lcyBub3QgbGVhayBzaW5jZSBfVW5waWNrbGVyX0Zhc3RDYWxsKCkgc3RlYWxzIHRoZQotICAgICAgICAgICByZWZlcmVuY2UgdG8gcGlkIGZpcnN0LiAqLwotICAgICAgICBwaWQgPSBfVW5waWNrbGVyX0Zhc3RDYWxsKHNlbGYsIHNlbGYtPnBlcnNfZnVuYywgcGlkKTsKKyAgICAgICAgLyogVGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9QaWNrbGVfRmFzdENhbGwoKSBzdGVhbHMgdGhlIHJlZmVyZW5jZQorICAgICAgICAgICB0byBwaWQgZmlyc3QuICovCisgICAgICAgIHBpZCA9IF9QaWNrbGVfRmFzdENhbGwoc2VsZi0+cGVyc19mdW5jLCBwaWQpOwogICAgICAgICBpZiAocGlkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQ3MDgsNyArNTMzNiw4IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJBIGxvYWQgcGVyc2lzdGVudCBpZCBpbnN0cnVjdGlvbiB3YXMgZW5jb3VudGVyZWQsXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IG5vIHBlcnNpc3RlbnRfbG9hZCBmdW5jdGlvbiB3YXMgc3BlY2lmaWVkLiIpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC00NzI1LDkgKzUzNTQsOSBAQAogICAgICAgICBpZiAocGlkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgLyogVWdoLi4uIHRoaXMgZG9lcyBub3QgbGVhayBzaW5jZSBfVW5waWNrbGVyX0Zhc3RDYWxsKCkgc3RlYWxzIHRoZQorICAgICAgICAvKiBUaGlzIGRvZXMgbm90IGxlYWsgc2luY2UgX1BpY2tsZV9GYXN0Q2FsbCgpIHN0ZWFscyB0aGUKICAgICAgICAgICAgcmVmZXJlbmNlIHRvIHBpZCBmaXJzdC4gKi8KLSAgICAgICAgcGlkID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZWxmLT5wZXJzX2Z1bmMsIHBpZCk7CisgICAgICAgIHBpZCA9IF9QaWNrbGVfRmFzdENhbGwoc2VsZi0+cGVyc19mdW5jLCBwaWQpOwogICAgICAgICBpZiAocGlkID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAKQEAgLTQ3MzUsNyArNTM2NCw4IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJBIGxvYWQgcGVyc2lzdGVudCBpZCBpbnN0cnVjdGlvbiB3YXMgZW5jb3VudGVyZWQsXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAiYnV0IG5vIHBlcnNpc3RlbnRfbG9hZCBmdW5jdGlvbiB3YXMgc3BlY2lmaWVkLiIpOwogICAgICAgICByZXR1cm4gLTE7CkBAIC00ODkxLDYgKzU1MjEsNyBAQAogICAgIFB5T2JqZWN0ICpvYmo7ICAgICAgICAgICAgICAvKiB0aGUgb2JqZWN0IHRvIHB1c2ggKi8KICAgICBQeU9iamVjdCAqcGFpcjsgICAgICAgICAgICAgLyogKG1vZHVsZV9uYW1lLCBjbGFzc19uYW1lKSAqLwogICAgIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwgKmNsYXNzX25hbWU7CisgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogCiAgICAgYXNzZXJ0KG5ieXRlcyA9PSAxIHx8IG5ieXRlcyA9PSAyIHx8IG5ieXRlcyA9PSA0KTsKICAgICBpZiAoX1VucGlja2xlcl9SZWFkKHNlbGYsICZjb2RlYnl0ZXMsIG5ieXRlcykgPCAwKQpAQCAtNDg5OCw3ICs1NTI5LDcgQEAKICAgICBjb2RlID0gY2FsY19iaW5pbnQoY29kZWJ5dGVzLCBuYnl0ZXMpOwogICAgIGlmIChjb2RlIDw9IDApIHsgICAgICAgICAgICAvKiBub3RlIHRoYXQgMCBpcyBmb3JiaWRkZW4gKi8KICAgICAgICAgLyogQ29ycnVwdCBvciBob3N0aWxlIHBpY2tsZS4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIkVYVCBzcGVjaWZpZXMgY29kZSA8PSAwIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLCAiRVhUIHNwZWNpZmllcyBjb2RlIDw9IDAiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNDkwNiwyMCArNTUzNywyNiBAQAogICAgIHB5X2NvZGUgPSBQeUxvbmdfRnJvbUxvbmcoY29kZSk7CiAgICAgaWYgKHB5X2NvZGUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIG9iaiA9IFB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbl9jYWNoZSwgcHlfY29kZSk7CisgICAgb2JqID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmV4dGVuc2lvbl9jYWNoZSwgcHlfY29kZSk7CiAgICAgaWYgKG9iaiAhPSBOVUxMKSB7CiAgICAgICAgIC8qIEJpbmdvLiAqLwogICAgICAgICBQeV9ERUNSRUYocHlfY29kZSk7CiAgICAgICAgIFBEQVRBX0FQUEVORChzZWxmLT5zdGFjaywgb2JqLCAtMSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICBQeV9ERUNSRUYocHlfY29kZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAKICAgICAvKiBMb29rIHVwIHRoZSAobW9kdWxlX25hbWUsIGNsYXNzX25hbWUpIHBhaXIuICovCi0gICAgcGFpciA9IFB5RGljdF9HZXRJdGVtKGludmVydGVkX3JlZ2lzdHJ5LCBweV9jb2RlKTsKKyAgICBwYWlyID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPmludmVydGVkX3JlZ2lzdHJ5LCBweV9jb2RlKTsKICAgICBpZiAocGFpciA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihweV9jb2RlKTsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bnJlZ2lzdGVyZWQgZXh0ZW5zaW9uICIKLSAgICAgICAgICAgICAgICAgICAgICJjb2RlICVsZCIsIGNvZGUpOworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAidW5yZWdpc3RlcmVkIGV4dGVuc2lvbiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvZGUgJWxkIiwgY29kZSk7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICAvKiBTaW5jZSB0aGUgZXh0ZW5zaW9uIHJlZ2lzdHJ5IGlzIG1hbmlwdWxhYmxlIHZpYSBQeXRob24gY29kZSwKQEAgLTQ5NDAsNyArNTU3Nyw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLyogQ2FjaGUgY29kZSAtPiBvYmouICovCi0gICAgY29kZSA9IFB5RGljdF9TZXRJdGVtKGV4dGVuc2lvbl9jYWNoZSwgcHlfY29kZSwgb2JqKTsKKyAgICBjb2RlID0gUHlEaWN0X1NldEl0ZW0oc3QtPmV4dGVuc2lvbl9jYWNoZSwgcHlfY29kZSwgb2JqKTsKICAgICBQeV9ERUNSRUYocHlfY29kZSk7CiAgICAgaWYgKGNvZGUgPCAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRihvYmopOwpAQCAtNTAyNSw2ICs1NjYyLDE4IEBACiB9CiAKIHN0YXRpYyBpbnQKK2xvYWRfbWVtb2l6ZShVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnZhbHVlOworCisgICAgaWYgKFB5X1NJWkUoc2VsZi0+c3RhY2spIDw9IDApCisgICAgICAgIHJldHVybiBzdGFja191bmRlcmZsb3coKTsKKyAgICB2YWx1ZSA9IHNlbGYtPnN0YWNrLT5kYXRhW1B5X1NJWkUoc2VsZi0+c3RhY2spIC0gMV07CisKKyAgICByZXR1cm4gX1VucGlja2xlcl9NZW1vUHV0KHNlbGYsIHNlbGYtPm1lbW9fbGVuLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQKIGRvX2FwcGVuZChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5X3NzaXplX3QgeCkKIHsKICAgICBQeU9iamVjdCAqdmFsdWU7CkBAIC01MDYzLDcgKzU3MTIsNyBAQAogICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgICAgICAgICAgdmFsdWUgPSBzZWxmLT5zdGFjay0+ZGF0YVtpXTsKLSAgICAgICAgICAgIHJlc3VsdCA9IF9VbnBpY2tsZXJfRmFzdENhbGwoc2VsZiwgYXBwZW5kX2Z1bmMsIHZhbHVlKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IF9QaWNrbGVfRmFzdENhbGwoYXBwZW5kX2Z1bmMsIHZhbHVlKTsKICAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCBpICsgMSk7CiAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmLT5zdGFjaykgPSB4OwpAQCAtNTA4MiwxMyArNTczMSwxOCBAQAogc3RhdGljIGludAogbG9hZF9hcHBlbmQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQogeworICAgIGlmIChQeV9TSVpFKHNlbGYtPnN0YWNrKSAtIDEgPD0gMCkKKyAgICAgICAgcmV0dXJuIHN0YWNrX3VuZGVyZmxvdygpOwogICAgIHJldHVybiBkb19hcHBlbmQoc2VsZiwgUHlfU0laRShzZWxmLT5zdGFjaykgLSAxKTsKIH0KIAogc3RhdGljIGludAogbG9hZF9hcHBlbmRzKFVucGlja2xlck9iamVjdCAqc2VsZikKIHsKLSAgICByZXR1cm4gZG9fYXBwZW5kKHNlbGYsIG1hcmtlcihzZWxmKSk7CisgICAgUHlfc3NpemVfdCBpID0gbWFya2VyKHNlbGYpOworICAgIGlmIChpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBkb19hcHBlbmQoc2VsZiwgaSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTUxMDUsOCArNTc1OSwxMCBAQAogICAgIGlmIChsZW4gPT0geCkgIC8qIG5vdGhpbmcgdG8gZG8gKi8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKChsZW4gLSB4KSAlIDIgIT0gMCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CiAgICAgICAgIC8qIEN1cnJ1cHQgb3IgaG9zdGlsZSBwaWNrbGUgLS0gd2UgbmV2ZXIgd3JpdGUgb25lIGxpa2UgdGhpcy4gKi8KLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFVucGlja2xpbmdFcnJvciwgIm9kZCBudW1iZXIgb2YgaXRlbXMgZm9yIFNFVElURU1TIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhzdC0+VW5waWNrbGluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm9kZCBudW1iZXIgb2YgaXRlbXMgZm9yIFNFVElURU1TIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTUxMzYsNyArNTc5Miw2NSBAQAogc3RhdGljIGludAogbG9hZF9zZXRpdGVtcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgcmV0dXJuIGRvX3NldGl0ZW1zKHNlbGYsIG1hcmtlcihzZWxmKSk7CisgICAgUHlfc3NpemVfdCBpID0gbWFya2VyKHNlbGYpOworICAgIGlmIChpIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBkb19zZXRpdGVtcyhzZWxmLCBpKTsKK30KKworc3RhdGljIGludAorbG9hZF9hZGRpdGVtcyhVbnBpY2tsZXJPYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnNldDsKKyAgICBQeV9zc2l6ZV90IG1hcmssIGxlbiwgaTsKKworICAgIG1hcmsgPSAgbWFya2VyKHNlbGYpOworICAgIGlmIChtYXJrIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGxlbiA9IFB5X1NJWkUoc2VsZi0+c3RhY2spOworICAgIGlmIChtYXJrID4gbGVuIHx8IG1hcmsgPD0gMCkKKyAgICAgICAgcmV0dXJuIHN0YWNrX3VuZGVyZmxvdygpOworICAgIGlmIChsZW4gPT0gbWFyaykgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzZXQgPSBzZWxmLT5zdGFjay0+ZGF0YVttYXJrIC0gMV07CisKKyAgICBpZiAoUHlTZXRfQ2hlY2soc2V0KSkgeworICAgICAgICBQeU9iamVjdCAqaXRlbXM7CisgICAgICAgIGludCBzdGF0dXM7CisKKyAgICAgICAgaXRlbXMgPSBQZGF0YV9wb3B0dXBsZShzZWxmLT5zdGFjaywgbWFyayk7CisgICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIHN0YXR1cyA9IF9QeVNldF9VcGRhdGUoc2V0LCBpdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihpdGVtcyk7CisgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeU9iamVjdCAqYWRkX2Z1bmM7CisgICAgICAgIF9QeV9JREVOVElGSUVSKGFkZCk7CisKKyAgICAgICAgYWRkX2Z1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKHNldCwgJlB5SWRfYWRkKTsKKyAgICAgICAgaWYgKGFkZF9mdW5jID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGZvciAoaSA9IG1hcms7IGkgPCBsZW47IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtOworCisgICAgICAgICAgICBpdGVtID0gc2VsZi0+c3RhY2stPmRhdGFbaV07CisgICAgICAgICAgICByZXN1bHQgPSBfUGlja2xlX0Zhc3RDYWxsKGFkZF9mdW5jLCBpdGVtKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCBpICsgMSk7CisgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmLT5zdGFjaykgPSBtYXJrOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICB9CisgICAgICAgIFB5X1NJWkUoc2VsZi0+c3RhY2spID0gbWFyazsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIGludApAQCAtNTE3Miw5ICs1ODg2LDcgQEAKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAogICAgICAgICAvKiBUaGUgZXhwbGljaXQgX19zZXRzdGF0ZV9fIGlzIHJlc3BvbnNpYmxlIGZvciBldmVyeXRoaW5nLiAqLwotICAgICAgICAvKiBVZ2guLi4gdGhpcyBkb2VzIG5vdCBsZWFrIHNpbmNlIF9VbnBpY2tsZXJfRmFzdENhbGwoKSBzdGVhbHMgdGhlCi0gICAgICAgICAgIHJlZmVyZW5jZSB0byBzdGF0ZSBmaXJzdC4gKi8KLSAgICAgICAgcmVzdWx0ID0gX1VucGlja2xlcl9GYXN0Q2FsbChzZWxmLCBzZXRzdGF0ZSwgc3RhdGUpOworICAgICAgICByZXN1bHQgPSBfUGlja2xlX0Zhc3RDYWxsKHNldHN0YXRlLCBzdGF0ZSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZXRzdGF0ZSk7CiAgICAgICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTUyMDUsNyArNTkxNyw4IEBACiAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKIAogICAgICAgICBpZiAoIVB5RGljdF9DaGVjayhzdGF0ZSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsICJzdGF0ZSBpcyBub3QgYSBkaWN0aW9uYXJ5Iik7CisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwgInN0YXRlIGlzIG5vdCBhIGRpY3Rpb25hcnkiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoaW5zdCwgJlB5SWRfX19kaWN0X18pOwpAQCAtNTIzNCw3ICs1OTQ3LDggQEAKICAgICAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgICAgIGlmICghUHlEaWN0X0NoZWNrKHNsb3RzdGF0ZSkpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc3QtPlVucGlja2xpbmdFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xvdCBzdGF0ZSBpcyBub3QgYSBkaWN0aW9uYXJ5Iik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CkBAIC01MzM4LDE0ICs2MDUyLDM5IEBACiAgICAgcmV0dXJuIC0xOwogfQogCitzdGF0aWMgaW50Citsb2FkX2ZyYW1lKFVucGlja2xlck9iamVjdCAqc2VsZikKK3sKKyAgICBjaGFyICpzOworICAgIFB5X3NzaXplX3QgZnJhbWVfbGVuOworCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgOCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBmcmFtZV9sZW4gPSBjYWxjX2JpbnNpemUocywgOCk7CisgICAgaWYgKGZyYW1lX2xlbiA8IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiRlJBTUUgbGVuZ3RoIGV4Y2VlZHMgc3lzdGVtJ3MgbWF4aW11bSBvZiAlemQgYnl0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKF9VbnBpY2tsZXJfUmVhZChzZWxmLCAmcywgZnJhbWVfbGVuKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIFJld2luZCB0byBzdGFydCBvZiBmcmFtZSAqLworICAgIHNlbGYtPm5leHRfcmVhZF9pZHggLT0gZnJhbWVfbGVuOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogbG9hZChVbnBpY2tsZXJPYmplY3QgKnNlbGYpCiB7Ci0gICAgUHlPYmplY3QgKmVycjsKICAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOwotICAgIGNoYXIgKnM7CisgICAgY2hhciAqcyA9IE5VTEw7CiAKICAgICBzZWxmLT5udW1fbWFya3MgPSAwOworICAgIHNlbGYtPnByb3RvID0gMDsKICAgICBpZiAoUHlfU0laRShzZWxmLT5zdGFjaykpCiAgICAgICAgIFBkYXRhX2NsZWFyKHNlbGYtPnN0YWNrLCAwKTsKIApAQCAtNTM3MSwxMyArNjExMCwxNiBAQAogICAgICAgICBPUF9BUkcoTE9ORzQsIGxvYWRfY291bnRlZF9sb25nLCA0KQogICAgICAgICBPUChGTE9BVCwgbG9hZF9mbG9hdCkKICAgICAgICAgT1AoQklORkxPQVQsIGxvYWRfYmluZmxvYXQpCi0gICAgICAgIE9QKEJJTkJZVEVTLCBsb2FkX2JpbmJ5dGVzKQotICAgICAgICBPUChTSE9SVF9CSU5CWVRFUywgbG9hZF9zaG9ydF9iaW5ieXRlcykKLSAgICAgICAgT1AoQklOU1RSSU5HLCBsb2FkX2JpbnN0cmluZykKLSAgICAgICAgT1AoU0hPUlRfQklOU1RSSU5HLCBsb2FkX3Nob3J0X2JpbnN0cmluZykKKyAgICAgICAgT1BfQVJHKFNIT1JUX0JJTkJZVEVTLCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDEpCisgICAgICAgIE9QX0FSRyhCSU5CWVRFUywgbG9hZF9jb3VudGVkX2JpbmJ5dGVzLCA0KQorICAgICAgICBPUF9BUkcoQklOQllURVM4LCBsb2FkX2NvdW50ZWRfYmluYnl0ZXMsIDgpCisgICAgICAgIE9QX0FSRyhTSE9SVF9CSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDEpCisgICAgICAgIE9QX0FSRyhCSU5TVFJJTkcsIGxvYWRfY291bnRlZF9iaW5zdHJpbmcsIDQpCiAgICAgICAgIE9QKFNUUklORywgbG9hZF9zdHJpbmcpCiAgICAgICAgIE9QKFVOSUNPREUsIGxvYWRfdW5pY29kZSkKLSAgICAgICAgT1AoQklOVU5JQ09ERSwgbG9hZF9iaW51bmljb2RlKQorICAgICAgICBPUF9BUkcoU0hPUlRfQklOVU5JQ09ERSwgbG9hZF9jb3VudGVkX2JpbnVuaWNvZGUsIDEpCisgICAgICAgIE9QX0FSRyhCSU5VTklDT0RFLCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgNCkKKyAgICAgICAgT1BfQVJHKEJJTlVOSUNPREU4LCBsb2FkX2NvdW50ZWRfYmludW5pY29kZSwgOCkKICAgICAgICAgT1BfQVJHKEVNUFRZX1RVUExFLCBsb2FkX2NvdW50ZWRfdHVwbGUsIDApCiAgICAgICAgIE9QX0FSRyhUVVBMRTEsIGxvYWRfY291bnRlZF90dXBsZSwgMSkKICAgICAgICAgT1BfQVJHKFRVUExFMiwgbG9hZF9jb3VudGVkX3R1cGxlLCAyKQpAQCAtNTM4NywxMCArNjEyOSwxNSBAQAogICAgICAgICBPUChMSVNULCBsb2FkX2xpc3QpCiAgICAgICAgIE9QKEVNUFRZX0RJQ1QsIGxvYWRfZW1wdHlfZGljdCkKICAgICAgICAgT1AoRElDVCwgbG9hZF9kaWN0KQorICAgICAgICBPUChFTVBUWV9TRVQsIGxvYWRfZW1wdHlfc2V0KQorICAgICAgICBPUChBRERJVEVNUywgbG9hZF9hZGRpdGVtcykKKyAgICAgICAgT1AoRlJPWkVOU0VULCBsb2FkX2Zyb3plbnNldCkKICAgICAgICAgT1AoT0JKLCBsb2FkX29iaikKICAgICAgICAgT1AoSU5TVCwgbG9hZF9pbnN0KQogICAgICAgICBPUChORVdPQkosIGxvYWRfbmV3b2JqKQorICAgICAgICBPUChORVdPQkpfRVgsIGxvYWRfbmV3b2JqX2V4KQogICAgICAgICBPUChHTE9CQUwsIGxvYWRfZ2xvYmFsKQorICAgICAgICBPUChTVEFDS19HTE9CQUwsIGxvYWRfc3RhY2tfZ2xvYmFsKQogICAgICAgICBPUChBUFBFTkQsIGxvYWRfYXBwZW5kKQogICAgICAgICBPUChBUFBFTkRTLCBsb2FkX2FwcGVuZHMpCiAgICAgICAgIE9QKEJVSUxELCBsb2FkX2J1aWxkKQpAQCAtNTQwMiw2ICs2MTQ5LDcgQEAKICAgICAgICAgT1AoQklOUFVULCBsb2FkX2JpbnB1dCkKICAgICAgICAgT1AoTE9OR19CSU5QVVQsIGxvYWRfbG9uZ19iaW5wdXQpCiAgICAgICAgIE9QKFBVVCwgbG9hZF9wdXQpCisgICAgICAgIE9QKE1FTU9JWkUsIGxvYWRfbWVtb2l6ZSkKICAgICAgICAgT1AoUE9QLCBsb2FkX3BvcCkKICAgICAgICAgT1AoUE9QX01BUkssIGxvYWRfcG9wX21hcmspCiAgICAgICAgIE9QKFNFVElURU0sIGxvYWRfc2V0aXRlbSkKQEAgLTU0MTAsNiArNjE1OCw3IEBACiAgICAgICAgIE9QKEJJTlBFUlNJRCwgbG9hZF9iaW5wZXJzaWQpCiAgICAgICAgIE9QKFJFRFVDRSwgbG9hZF9yZWR1Y2UpCiAgICAgICAgIE9QKFBST1RPLCBsb2FkX3Byb3RvKQorICAgICAgICBPUChGUkFNRSwgbG9hZF9mcmFtZSkKICAgICAgICAgT1BfQVJHKEVYVDEsIGxvYWRfZXh0ZW5zaW9uLCAxKQogICAgICAgICBPUF9BUkcoRVhUMiwgbG9hZF9leHRlbnNpb24sIDIpCiAgICAgICAgIE9QX0FSRyhFWFQ0LCBsb2FkX2V4dGVuc2lvbiwgNCkKQEAgLTU0MjAsODEgKzYxNjksOTMgQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoc1swXSA9PSAnXDAnKQorICAgICAgICAgICAgaWYgKHNbMF0gPT0gJ1wwJykgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfRU9GRXJyb3IpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChVbnBpY2tsaW5nRXJyb3IsCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHN0LT5VbnBpY2tsaW5nRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIGxvYWQga2V5LCAnJWMnLiIsIHNbMF0pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBhbmQgd2UgYXJlIGRvbmUhICovCiAgICAgfQogCi0gICAgaWYgKF9VbnBpY2tsZXJfU2tpcENvbnN1bWVkKHNlbGYpIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBYWFg6IEl0IGlzIG5vdCBjbGVhciB3aGF0IHRoaXMgaXMgYWN0dWFsbHkgZm9yLiAqLwotICAgIGlmICgoZXJyID0gUHlFcnJfT2NjdXJyZWQoKSkpIHsKLSAgICAgICAgaWYgKGVyciA9PSBQeUV4Y19FT0ZFcnJvcikgewotICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShQeUV4Y19FT0ZFcnJvcik7Ci0gICAgICAgIH0KKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBpZiAoX1VucGlja2xlcl9Ta2lwQ29uc3VtZWQoc2VsZikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFBEQVRBX1BPUChzZWxmLT5zdGFjaywgdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotUHlEb2NfU1RSVkFSKFVucGlja2xlcl9sb2FkX2RvYywKLSJsb2FkKCkgLT4gb2JqZWN0LiBMb2FkIGEgcGlja2xlLiIKLSJcbiIKLSJSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlbiBpblxuIgotInRoZSBjb25zdHJ1Y3RvciwgYW5kIHJldHVybiB0aGUgcmVjb25zdGl0dXRlZCBvYmplY3QgaGllcmFyY2h5IHNwZWNpZmllZFxuIgotInRoZXJlaW4uXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5VbnBpY2tsZXIubG9hZAorCitMb2FkIGEgcGlja2xlLgorCitSZWFkIGEgcGlja2xlZCBvYmplY3QgcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgb3BlbiBmaWxlIG9iamVjdCBnaXZlbgoraW4gdGhlIGNvbnN0cnVjdG9yLCBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHkKK3NwZWNpZmllZCB0aGVyZWluLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotVW5waWNrbGVyX2xvYWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJfbG9hZF9pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mZGNjNDg4YWFkNjc1YjE0IGlucHV0PWFjYmI5MWE0MmZhOWI3YjldKi8KIHsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IChVbnBpY2tsZXJPYmplY3QqKXNlbGY7CisKICAgICAvKiBDaGVjayB3aGV0aGVyIHRoZSBVbnBpY2tsZXIgd2FzIGluaXRpYWxpemVkIGNvcnJlY3RseS4gVGhpcyBwcmV2ZW50cwogICAgICAgIHNlZ2ZhdWx0aW5nIGlmIGEgc3ViY2xhc3Mgb3ZlcnJpZGRlbiBfX2luaXRfXyB3aXRoIGEgZnVuY3Rpb24gdGhhdCBkb2VzCiAgICAgICAgbm90IGNhbGwgVW5waWNrbGVyLl9faW5pdF9fKCkuIEhlcmUsIHdlIHNpbXBseSBlbnN1cmUgdGhhdCBzZWxmLT5yZWFkCiAgICAgICAgaXMgbm90IE5VTEwuICovCi0gICAgaWYgKHNlbGYtPnJlYWQgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoVW5waWNrbGluZ0Vycm9yLAorICAgIGlmICh1bnBpY2tsZXItPnJlYWQgPT0gTlVMTCkgeworICAgICAgICBQaWNrbGVTdGF0ZSAqc3QgPSBfUGlja2xlX0dldEdsb2JhbFN0YXRlKCk7CisgICAgICAgIFB5RXJyX0Zvcm1hdChzdC0+VW5waWNrbGluZ0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgIlVucGlja2xlci5fX2luaXRfXygpIHdhcyBub3QgY2FsbGVkIGJ5ICVzLl9faW5pdF9fKCkiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShzZWxmKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHVucGlja2xlciktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICByZXR1cm4gbG9hZChzZWxmKTsKKyAgICByZXR1cm4gbG9hZCh1bnBpY2tsZXIpOwogfQogCiAvKiBUaGUgbmFtZSBvZiBmaW5kX2NsYXNzKCkgaXMgbWlzbGVhZGluZy4gSW4gbmV3ZXIgcGlja2xlIHByb3RvY29scywgdGhpcwogICAgZnVuY3Rpb24gaXMgdXNlZCBmb3IgbG9hZGluZyBhbnkgZ2xvYmFsIChpLmUuLCBmdW5jdGlvbnMpLCBub3QganVzdAogICAgY2xhc3Nlcy4gVGhlIG5hbWUgaXMga2VwdCBvbmx5IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LiAqLwogCi1QeURvY19TVFJWQVIoVW5waWNrbGVyX2ZpbmRfY2xhc3NfZG9jLAotImZpbmRfY2xhc3MobW9kdWxlX25hbWUsIGdsb2JhbF9uYW1lKSAtPiBvYmplY3QuXG4iCi0iXG4iCi0iUmV0dXJuIGFuIG9iamVjdCBmcm9tIGEgc3BlY2lmaWVkIG1vZHVsZSwgaW1wb3J0aW5nIHRoZSBtb2R1bGUgaWZcbiIKLSJuZWNlc3NhcnkuICBTdWJjbGFzc2VzIG1heSBvdmVycmlkZSB0aGlzIG1ldGhvZCAoZS5nLiB0byByZXN0cmljdFxuIgotInVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucykuXG4iCi0iXG4iCi0iVGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW5ldmVyIGEgY2xhc3Mgb3IgYSBmdW5jdGlvbiBvYmplY3QgaXNcbiIKLSJuZWVkZWQuICBCb3RoIGFyZ3VtZW50cyBwYXNzZWQgYXJlIHN0ciBvYmplY3RzLlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuVW5waWNrbGVyLmZpbmRfY2xhc3MKKworICBtb2R1bGVfbmFtZTogb2JqZWN0CisgIGdsb2JhbF9uYW1lOiBvYmplY3QKKyAgLworCitSZXR1cm4gYW4gb2JqZWN0IGZyb20gYSBzcGVjaWZpZWQgbW9kdWxlLgorCitJZiBuZWNlc3NhcnksIHRoZSBtb2R1bGUgd2lsbCBiZSBpbXBvcnRlZC4gU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGUKK3RoaXMgbWV0aG9kIChlLmcuIHRvIHJlc3RyaWN0IHVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kCitmdW5jdGlvbnMpLgorCitUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpcworbmVlZGVkLiAgQm90aCBhcmd1bWVudHMgcGFzc2VkIGFyZSBzdHIgb2JqZWN0cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVVucGlja2xlcl9maW5kX2NsYXNzKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlX25hbWUsIFB5T2JqZWN0ICpnbG9iYWxfbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02NGM3NzQzN2UwODhlMTg4IGlucHV0PWUyZTZhODY1ZGUwOTNlZjRdKi8KIHsKICAgICBQeU9iamVjdCAqZ2xvYmFsOwogICAgIFB5T2JqZWN0ICptb2R1bGVzX2RpY3Q7CiAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICBQeU9iamVjdCAqbW9kdWxlX25hbWUsICpnbG9iYWxfbmFtZTsKLQotICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZpbmRfY2xhc3MiLCAyLCAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1vZHVsZV9uYW1lLCAmZ2xvYmFsX25hbWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBfUHlfSURFTlRJRklFUihtb2R1bGVzKTsKIAogICAgIC8qIFRyeSB0byBtYXAgdGhlIG9sZCBuYW1lcyB1c2VkIGluIFB5dGhvbiAyLnggdG8gdGhlIG5ldyBvbmVzIHVzZWQgaW4KICAgICAgICBQeXRob24gMy54LiAgV2UgZG8gdGhpcyBvbmx5IHdpdGggb2xkIHBpY2tsZSBwcm90b2NvbHMgYW5kIHdoZW4gdGhlCkBAIC01NTAyLDEzICs2MjYzLDE0IEBACiAgICAgaWYgKHNlbGYtPnByb3RvIDwgMyAmJiBzZWxmLT5maXhfaW1wb3J0cykgewogICAgICAgICBQeU9iamVjdCAqa2V5OwogICAgICAgICBQeU9iamVjdCAqaXRlbTsKKyAgICAgICAgUGlja2xlU3RhdGUgKnN0ID0gX1BpY2tsZV9HZXRHbG9iYWxTdGF0ZSgpOwogCiAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBnbG9iYWwgKGkuZS4sIGEgZnVuY3Rpb24gb3IgYSBjbGFzcykgd2FzIHJlbmFtZWQKICAgICAgICAgICAgb3IgbW92ZWQgdG8gYW5vdGhlciBtb2R1bGUuICovCiAgICAgICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOwogICAgICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgaXRlbSA9IFB5RGljdF9HZXRJdGVtV2l0aEVycm9yKG5hbWVfbWFwcGluZ18ydG8zLCBrZXkpOworICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3Ioc3QtPm5hbWVfbWFwcGluZ18ydG8zLCBrZXkpOwogICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgaWYgKGl0ZW0pIHsKICAgICAgICAgICAgIGlmICghUHlUdXBsZV9DaGVjayhpdGVtKSB8fCBQeVR1cGxlX0dFVF9TSVpFKGl0ZW0pICE9IDIpIHsKQEAgLTU1MzIsMjYgKzYyOTQsMjkgQEAKICAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLQotICAgICAgICAvKiBDaGVjayBpZiB0aGUgbW9kdWxlIHdhcyByZW5hbWVkLiAqLwotICAgICAgICBpdGVtID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoaW1wb3J0X21hcHBpbmdfMnRvMywgbW9kdWxlX25hbWUpOwotICAgICAgICBpZiAoaXRlbSkgewotICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcgdmFsdWVzIHNob3VsZCBiZSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmdzLCBub3QgJS4yMDBzIiwgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIG1vZHVsZSB3YXMgcmVuYW1lZC4gKi8KKyAgICAgICAgICAgIGl0ZW0gPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihzdC0+aW1wb3J0X21hcHBpbmdfMnRvMywgbW9kdWxlX25hbWUpOworICAgICAgICAgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuSU1QT1JUX01BUFBJTkcgdmFsdWVzIHNob3VsZCBiZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmdzLCBub3QgJS4yMDBzIiwgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtb2R1bGVfbmFtZSA9IGl0ZW07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtb2R1bGVfbmFtZSA9IGl0ZW07Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtb2R1bGVzX2RpY3QgPSBQeVN5c19HZXRPYmplY3QoIm1vZHVsZXMiKTsKLSAgICBpZiAobW9kdWxlc19kaWN0ID09IE5VTEwpCisgICAgbW9kdWxlc19kaWN0ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX21vZHVsZXMpOworICAgIGlmIChtb2R1bGVzX2RpY3QgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAidW5hYmxlIHRvIGdldCBzeXMubW9kdWxlcyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBtb2R1bGUgPSBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcihtb2R1bGVzX2RpY3QsIG1vZHVsZV9uYW1lKTsKICAgICBpZiAobW9kdWxlID09IE5VTEwpIHsKQEAgLTU1NjAsMjAgKzYzMjUsNDYgQEAKICAgICAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0KG1vZHVsZV9uYW1lKTsKICAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGdsb2JhbCA9IFB5T2JqZWN0X0dldEF0dHIobW9kdWxlLCBnbG9iYWxfbmFtZSk7CisgICAgICAgIGdsb2JhbCA9IGdldGF0dHJpYnV0ZShtb2R1bGUsIGdsb2JhbF9uYW1lLCBzZWxmLT5wcm90byA+PSA0KTsKICAgICAgICAgUHlfREVDUkVGKG1vZHVsZSk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBnbG9iYWwgPSBQeU9iamVjdF9HZXRBdHRyKG1vZHVsZSwgZ2xvYmFsX25hbWUpOworICAgICAgICBnbG9iYWwgPSBnZXRhdHRyaWJ1dGUobW9kdWxlLCBnbG9iYWxfbmFtZSwgc2VsZi0+cHJvdG8gPj0gNCk7CiAgICAgfQogICAgIHJldHVybiBnbG9iYWw7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5VbnBpY2tsZXIuX19zaXplb2ZfXyAtPiBQeV9zc2l6ZV90CisKK1JldHVybnMgc2l6ZSBpbiBtZW1vcnksIGluIGJ5dGVzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlfc3NpemVfdAorX3BpY2tsZV9VbnBpY2tsZXJfX19zaXplb2ZfX19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xMTlkOWQwM2FkNGM3NjUxIGlucHV0PTEzMzMzNDcxZmRlZWRmNWVdKi8KK3sKKyAgICBQeV9zc2l6ZV90IHJlczsKKworICAgIHJlcyA9IHNpemVvZihVbnBpY2tsZXJPYmplY3QpOworICAgIGlmIChzZWxmLT5tZW1vICE9IE5VTEwpCisgICAgICAgIHJlcyArPSBzZWxmLT5tZW1vX3NpemUgKiBzaXplb2YoUHlPYmplY3QgKik7CisgICAgaWYgKHNlbGYtPm1hcmtzICE9IE5VTEwpCisgICAgICAgIHJlcyArPSBzZWxmLT5tYXJrc19zaXplICogc2l6ZW9mKFB5X3NzaXplX3QpOworICAgIGlmIChzZWxmLT5pbnB1dF9saW5lICE9IE5VTEwpCisgICAgICAgIHJlcyArPSBzdHJsZW4oc2VsZi0+aW5wdXRfbGluZSkgKyAxOworICAgIGlmIChzZWxmLT5lbmNvZGluZyAhPSBOVUxMKQorICAgICAgICByZXMgKz0gc3RybGVuKHNlbGYtPmVuY29kaW5nKSArIDE7CisgICAgaWYgKHNlbGYtPmVycm9ycyAhPSBOVUxMKQorICAgICAgICByZXMgKz0gc3RybGVuKHNlbGYtPmVycm9ycykgKyAxOworICAgIHJldHVybiByZXM7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgVW5waWNrbGVyX21ldGhvZHNbXSA9IHsKLSAgICB7ImxvYWQiLCAoUHlDRnVuY3Rpb24pVW5waWNrbGVyX2xvYWQsIE1FVEhfTk9BUkdTLAotICAgICBVbnBpY2tsZXJfbG9hZF9kb2N9LAotICAgIHsiZmluZF9jbGFzcyIsIChQeUNGdW5jdGlvbilVbnBpY2tsZXJfZmluZF9jbGFzcywgTUVUSF9WQVJBUkdTLAotICAgICBVbnBpY2tsZXJfZmluZF9jbGFzc19kb2N9LAorICAgIF9QSUNLTEVfVU5QSUNLTEVSX0xPQURfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9VTlBJQ0tMRVJfRklORF9DTEFTU19NRVRIT0RERUYKKyAgICBfUElDS0xFX1VOUElDS0xFUl9fX1NJWkVPRl9fX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtNTU4Niw3ICs2Mzc3LDYgQEAKICAgICBQeV9YREVDUkVGKHNlbGYtPnBlZWspOwogICAgIFB5X1hERUNSRUYoc2VsZi0+c3RhY2spOwogICAgIFB5X1hERUNSRUYoc2VsZi0+cGVyc19mdW5jKTsKLSAgICBQeV9YREVDUkVGKHNlbGYtPmFyZyk7CiAgICAgaWYgKHNlbGYtPmJ1ZmZlci5idWYgIT0gTlVMTCkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT5idWZmZXIpOwogICAgICAgICBzZWxmLT5idWZmZXIuYnVmID0gTlVMTDsKQEAgLTU1OTUsOCArNjM4NSw4IEBACiAgICAgX1VucGlja2xlcl9NZW1vQ2xlYW51cChzZWxmKTsKICAgICBQeU1lbV9GcmVlKHNlbGYtPm1hcmtzKTsKICAgICBQeU1lbV9GcmVlKHNlbGYtPmlucHV0X2xpbmUpOwotICAgIGZyZWUoc2VsZi0+ZW5jb2RpbmcpOwotICAgIGZyZWUoc2VsZi0+ZXJyb3JzKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVuY29kaW5nKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVycm9ycyk7CiAKICAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCAqKXNlbGYpOwogfQpAQCAtNTYwOSw3ICs2Mzk5LDYgQEAKICAgICBQeV9WSVNJVChzZWxmLT5wZWVrKTsKICAgICBQeV9WSVNJVChzZWxmLT5zdGFjayk7CiAgICAgUHlfVklTSVQoc2VsZi0+cGVyc19mdW5jKTsKLSAgICBQeV9WSVNJVChzZWxmLT5hcmcpOwogICAgIHJldHVybiAwOwogfQogCkBAIC01NjIxLDcgKzY0MTAsNiBAQAogICAgIFB5X0NMRUFSKHNlbGYtPnBlZWspOwogICAgIFB5X0NMRUFSKHNlbGYtPnN0YWNrKTsKICAgICBQeV9DTEVBUihzZWxmLT5wZXJzX2Z1bmMpOwotICAgIFB5X0NMRUFSKHNlbGYtPmFyZyk7CiAgICAgaWYgKHNlbGYtPmJ1ZmZlci5idWYgIT0gTlVMTCkgewogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT5idWZmZXIpOwogICAgICAgICBzZWxmLT5idWZmZXIuYnVmID0gTlVMTDsKQEAgLTU2MzIsNjYgKzY0MjAsNTIgQEAKICAgICBzZWxmLT5tYXJrcyA9IE5VTEw7CiAgICAgUHlNZW1fRnJlZShzZWxmLT5pbnB1dF9saW5lKTsKICAgICBzZWxmLT5pbnB1dF9saW5lID0gTlVMTDsKLSAgICBmcmVlKHNlbGYtPmVuY29kaW5nKTsKKyAgICBQeU1lbV9GcmVlKHNlbGYtPmVuY29kaW5nKTsKICAgICBzZWxmLT5lbmNvZGluZyA9IE5VTEw7Ci0gICAgZnJlZShzZWxmLT5lcnJvcnMpOworICAgIFB5TWVtX0ZyZWUoc2VsZi0+ZXJyb3JzKTsKICAgICBzZWxmLT5lcnJvcnMgPSBOVUxMOwogCiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihVbnBpY2tsZXJfZG9jLAotIlVucGlja2xlcihmaWxlLCAqLCBlbmNvZGluZz0nQVNDSUknLCBlcnJvcnM9J3N0cmljdCcpIgotIlxuIgotIlRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3IgcmVhZGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS5cbiIKLSJcbiIKLSJUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vXG4iCi0icHJvdG8gYXJndW1lbnQgaXMgbmVlZGVkLlxuIgotIlxuIgotIlRoZSBmaWxlLWxpa2Ugb2JqZWN0IG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kXG4iCi0idGhhdCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0XG4iCi0icmVxdWlyZXMgbm8gYXJndW1lbnRzLiAgQm90aCBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuXG4iCi0iVGh1cyBmaWxlLWxpa2Ugb2JqZWN0IGNhbiBiZSBhIGJpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yXG4iCi0icmVhZGluZywgYSBCeXRlc0lPIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdFxuIgotIm1lZXRzIHRoaXMgaW50ZXJmYWNlLlxuIgotIlxuIgotIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKixcbiIKLSJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtXG4iCi0iZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLnguICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgotIm1hcCB0aGUgb2xkIFB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGVcbiIKLSIqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZ1xuIgotImluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmRcbiIKLSInc3RyaWN0JywgcmVzcGVjdGl2ZWx5LlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuVW5waWNrbGVyLl9faW5pdF9fCisKKyAgZmlsZTogb2JqZWN0CisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisgIGVuY29kaW5nOiBzdHIgPSAnQVNDSUknCisgIGVycm9yczogc3RyID0gJ3N0cmljdCcKKworVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciByZWFkaW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLgorCitUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vCitwcm90b2NvbCBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzCityZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC4KKworVGhlIGFyZ3VtZW50ICpmaWxlKiBtdXN0IGhhdmUgdHdvIG1ldGhvZHMsIGEgcmVhZCgpIG1ldGhvZCB0aGF0IHRha2VzCithbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzIG5vCithcmd1bWVudHMuICBCb3RoIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhCitiaW5hcnkgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciByZWFkaW5nLCBhbiBpby5CeXRlc0lPIG9iamVjdCwgb3IgYW55CitvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuCisKK09wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiwKK3doaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW0KK2dlbmVyYXRlZCBieSBQeXRob24gMi4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvCittYXAgdGhlIG9sZCBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGUKKyplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nCitpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24gMjsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywKK3Jlc3BlY3RpdmVseS4gIFRoZSAqZW5jb2RpbmcqIGNhbiBiZSAnYnl0ZXMnIHRvIHJlYWQgdGhlc2UgOC1iaXQKK3N0cmluZyBpbnN0YW5jZXMgYXMgYnl0ZXMgb2JqZWN0cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIGludAotVW5waWNrbGVyX2luaXQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1iOWVkMWQ4NGQzMTVmM2I1IGlucHV0PTA0ZWNlNjYxYWE4ODQ4MzddKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgMH07Ci0gICAgUHlPYmplY3QgKmZpbGU7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBfUHlfSURFTlRJRklFUihwZXJzaXN0ZW50X2xvYWQpOwogCi0gICAgLyogWFhYOiBUaGF0IGlzIGFuIGhvcnJpYmxlIGVycm9yIG1lc3NhZ2UuIEJ1dCwgSSBkb24ndCBrbm93IGhvdyB0byBkbwotICAgICAgIGJldHRlci4uLiAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpICE9IDEpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICIlcyB0YWtlcyBleGFjdGx5IG9uZSBwb3NpdGlvbmFsIGFyZ3VtZW50ICglemQgZ2l2ZW4pIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoc2VsZiktPnRwX25hbWUsIFB5X1NJWkUoYXJncykpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgLyogQXJndW1lbnRzIHBhcnNpbmcgbmVlZHMgdG8gYmUgZG9uZSBpbiB0aGUgX19pbml0X18oKSBtZXRob2QgdG8gYWxsb3cKLSAgICAgICBzdWJjbGFzc2VzIHRvIGRlZmluZSB0aGVpciBvd24gX19pbml0X18oKSBtZXRob2QsIHdoaWNoIG1heSAob3IgbWF5Ci0gICAgICAgbm90KSBzdXBwb3J0IFVucGlja2xlciBhcmd1bWVudHMuIEhvd2V2ZXIsIHRoaXMgbWVhbnMgd2UgbmVlZCB0byBiZQotICAgICAgIGV4dHJhIGNhcmVmdWwgaW4gdGhlIG90aGVyIFVucGlja2xlciBtZXRob2RzLCBzaW5jZSBhIHN1YmNsYXNzIGNvdWxkCi0gICAgICAgZm9yZ2V0IHRvIGNhbGwgVW5waWNrbGVyLl9faW5pdF9fKCkgdGh1cyBicmVha2luZyBvdXIgaW50ZXJuYWwKLSAgICAgICBpbnZhcmlhbnRzLiAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9zczpVbnBpY2tsZXIiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKLSAgICAgICAgcmV0dXJuIC0xOwotCiAgICAgLyogSW4gY2FzZSBvZiBtdWx0aXBsZSBfX2luaXRfXygpIGNhbGxzLCBjbGVhciBwcmV2aW91cyBjb250ZW50LiAqLwogICAgIGlmIChzZWxmLT5yZWFkICE9IE5VTEwpCiAgICAgICAgICh2b2lkKVVucGlja2xlcl9jbGVhcihzZWxmKTsKQEAgLTU3MDIsNyArNjQ3Niw3IEBACiAgICAgaWYgKF9VbnBpY2tsZXJfU2V0SW5wdXRFbmNvZGluZyhzZWxmLCBlbmNvZGluZywgZXJyb3JzKSA8IDApCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIHNlbGYtPmZpeF9pbXBvcnRzID0gUHlPYmplY3RfSXNUcnVlKGZpeF9pbXBvcnRzKTsKKyAgICBzZWxmLT5maXhfaW1wb3J0cyA9IGZpeF9pbXBvcnRzOwogICAgIGlmIChzZWxmLT5maXhfaW1wb3J0cyA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwogCkBAIC01NzEwLDcgKzY0ODQsNyBAQAogICAgICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBfUHlPYmplY3RfR2V0QXR0cklkKChQeU9iamVjdCAqKXNlbGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfcGVyc2lzdGVudF9sb2FkKTsKICAgICAgICAgaWYgKHNlbGYtPnBlcnNfZnVuYyA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBzZWxmLT5wZXJzX2Z1bmMgPSBOVUxMOwpAQCAtNTcxOCwxOSArNjQ5MiwxOSBAQAogCiAgICAgc2VsZi0+c3RhY2sgPSAoUGRhdGEgKilQZGF0YV9OZXcoKTsKICAgICBpZiAoc2VsZi0+c3RhY2sgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMTsKIAogICAgIHNlbGYtPm1lbW9fc2l6ZSA9IDMyOwogICAgIHNlbGYtPm1lbW8gPSBfVW5waWNrbGVyX05ld01lbW8oc2VsZi0+bWVtb19zaXplKTsKICAgICBpZiAoc2VsZi0+bWVtbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBzZWxmLT5hcmcgPSBOVUxMOwogICAgIHNlbGYtPnByb3RvID0gMDsKIAogICAgIHJldHVybiAwOwogfQogCisKIC8qIERlZmluZSBhIHByb3h5IG9iamVjdCBmb3IgdGhlIFVucGlja2xlcidzIGludGVybmFsIG1lbW8gb2JqZWN0LiBUaGlzIGlzIHRvCiAgKiBhdm9pZCBicmVha2luZyBjb2RlIGxpa2U6CiAgKiAgdW5waWNrbGVyLm1lbW8uY2xlYXIoKQpAQCAtNTc0NCwxNiArNjUxOCwxNSBAQAogICogcmVhbC13b3JsZCBjb2RlIGxpa2UgY3ZzMnN2bi4KICAqLwogCi10eXBlZGVmIHN0cnVjdCB7Ci0gICAgUHlPYmplY3RfSEVBRAotICAgIFVucGlja2xlck9iamVjdCAqdW5waWNrbGVyOwotfSBVbnBpY2tsZXJNZW1vUHJveHlPYmplY3Q7CisvKltjbGluaWMgaW5wdXRdCitfcGlja2xlLlVucGlja2xlck1lbW9Qcm94eS5jbGVhcgogCi1QeURvY19TVFJWQVIodW1wX2NsZWFyX2RvYywKLSJtZW1vLmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bXBfY2xlYXIoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXJfaW1wbChVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDIwY2Q0M2Y0YmExZmIxZiBpbnB1dD1iMWRmN2M1MmU3YWZkOWJkXSovCiB7CiAgICAgX1VucGlja2xlcl9NZW1vQ2xlYW51cChzZWxmLT51bnBpY2tsZXIpOwogICAgIHNlbGYtPnVucGlja2xlci0+bWVtbyA9IF9VbnBpY2tsZXJfTmV3TWVtbyhzZWxmLT51bnBpY2tsZXItPm1lbW9fc2l6ZSk7CkBAIC01NzYyLDExICs2NTM1LDE1IEBACiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKLVB5RG9jX1NUUlZBUih1bXBfY29weV9kb2MsCi0ibWVtby5jb3B5KCkgLT4gbmV3X21lbW8uICBDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5LmNvcHkKKworQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bXBfY29weShVbnBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWUxMmFmN2U5YmMxZTRjNzcgaW5wdXQ9OTc3NjkyNDdjZTAzMmMxZF0qLwogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqbmV3X21lbW8gPSBQeURpY3RfTmV3KCk7CkBAIC01Nzk2LDE1ICs2NTczLDE5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUih1bXBfcmVkdWNlX2RvYywKLSJtZW1vLl9fcmVkdWNlX18oKS4gUGlja2xpbmcgc3VwcG9ydC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK19waWNrbGUuVW5waWNrbGVyTWVtb1Byb3h5Ll9fcmVkdWNlX18KKworSW1wbGVtZW50IHBpY2tsaW5nIHN1cHBvcnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi11bXBfcmVkdWNlKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX2ltcGwoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZkYTM0YWMwNDhkOTRjY2EgaW5wdXQ9NjkyMDg2MjQxMzQwNzE5OV0qLwogewogICAgIFB5T2JqZWN0ICpyZWR1Y2VfdmFsdWU7CiAgICAgUHlPYmplY3QgKmNvbnN0cnVjdG9yX2FyZ3M7Ci0gICAgUHlPYmplY3QgKmNvbnRlbnRzID0gdW1wX2NvcHkoc2VsZik7CisgICAgUHlPYmplY3QgKmNvbnRlbnRzID0gX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY29weV9pbXBsKHNlbGYpOwogICAgIGlmIChjb250ZW50cyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtNTgyNyw5ICs2NjA4LDkgQEAKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHVucGlja2xlcnByb3h5X21ldGhvZHNbXSA9IHsKLSAgICB7ImNsZWFyIiwgICAgICAgKFB5Q0Z1bmN0aW9uKXVtcF9jbGVhciwgIE1FVEhfTk9BUkdTLCAgdW1wX2NsZWFyX2RvY30sCi0gICAgeyJjb3B5IiwgICAgICAgIChQeUNGdW5jdGlvbil1bXBfY29weSwgICBNRVRIX05PQVJHUywgIHVtcF9jb3B5X2RvY30sCi0gICAgeyJfX3JlZHVjZV9fIiwgIChQeUNGdW5jdGlvbil1bXBfcmVkdWNlLCBNRVRIX1ZBUkFSR1MsIHVtcF9yZWR1Y2VfZG9jfSwKKyAgICBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9DTEVBUl9NRVRIT0RERUYKKyAgICBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9DT1BZX01FVEhPRERFRgorICAgIF9QSUNLTEVfVU5QSUNLTEVSTUVNT1BST1hZX19fUkVEVUNFX19fTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9ICAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC02MDUzLDcgKzY4MzQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KICAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFIHwgUHlfVFBGTEFHU19IQVZFX0dDLAotICAgIFVucGlja2xlcl9kb2MsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KKyAgICBfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19fZG9jX18sICAvKnRwX2RvYyovCiAgICAgKHRyYXZlcnNlcHJvYylVbnBpY2tsZXJfdHJhdmVyc2UsICAgLyp0cF90cmF2ZXJzZSovCiAgICAgKGlucXVpcnkpVW5waWNrbGVyX2NsZWFyLCAgICAgICAgICAgLyp0cF9jbGVhciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCkBAIC02MDY4LDYzICs2ODQ5LDU2IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZXNjcl9nZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3Jfc2V0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3RvZmZzZXQqLwotICAgIChpbml0cHJvYylVbnBpY2tsZXJfaW5pdCwgICAgICAgICAgIC8qdHBfaW5pdCovCisgICAgX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X18sICAgICAgICAgLyp0cF9pbml0Ki8KICAgICBQeVR5cGVfR2VuZXJpY0FsbG9jLCAgICAgICAgICAgICAgICAvKnRwX2FsbG9jKi8KICAgICBQeVR5cGVfR2VuZXJpY05ldywgICAgICAgICAgICAgICAgICAvKnRwX25ldyovCiAgICAgUHlPYmplY3RfR0NfRGVsLCAgICAgICAgICAgICAgICAgICAgLyp0cF9mcmVlKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2lzX2djKi8KIH07CiAKLVB5RG9jX1NUUlZBUihwaWNrbGVfZHVtcF9kb2MsCi0iZHVtcChvYmosIGZpbGUsIHByb3RvY29sPU5vbmUsICosIGZpeF9pbXBvcnRzPVRydWUpIC0+IE5vbmVcbiIKLSJcbiIKLSJXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUuICBUaGlzXG4iCi0iaXMgZXF1aXZhbGVudCB0byBgYFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKWBgLCBidXQgbWF5IGJlIG1vcmVcbiIKLSJlZmZpY2llbnQuXG4iCi0iXG4iCi0iVGhlIG9wdGlvbmFsIHByb3RvY29sIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW4gcHJvdG9jb2w7XG4iCi0ic3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMy4gIFRoZSBkZWZhdWx0IHByb3RvY29sIGlzIDM7IGFcbiIKLSJiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLjAuXG4iCi0iXG4iCi0iU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbCB2ZXJzaW9uXG4iCi0ic3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZSB2ZXJzaW9uIG9mXG4iCi0iUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuXG4iCi0iXG4iCi0iVGhlIGZpbGUgYXJndW1lbnQgbXVzdCBoYXZlIGEgd3JpdGUoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgc2luZ2xlIGJ5dGVzXG4iCi0iYXJndW1lbnQuICBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5IHdyaXRpbmcsIGFcbiIKLSJpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzIHRoaXMgaW50ZXJmYWNlLlxuIgotIlxuIgotIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kIHByb3RvY29sIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKLSJtYXAgdGhlIG5ldyBQeXRob24gMy54IG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uIDIueCxcbiIKLSJzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi54LlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUuZHVtcAorCisgIG9iajogb2JqZWN0CisgIGZpbGU6IG9iamVjdAorICBwcm90b2NvbDogb2JqZWN0ID0gTlVMTAorICAqCisgIGZpeF9pbXBvcnRzOiBib29sID0gVHJ1ZQorCitXcml0ZSBhIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2Ygb2JqIHRvIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGZpbGUuCisKK1RoaXMgaXMgZXF1aXZhbGVudCB0byBgYFBpY2tsZXIoZmlsZSwgcHJvdG9jb2wpLmR1bXAob2JqKWBgLCBidXQgbWF5CitiZSBtb3JlIGVmZmljaWVudC4KKworVGhlIG9wdGlvbmFsICpwcm90b2NvbCogYXJndW1lbnQgdGVsbHMgdGhlIHBpY2tsZXIgdG8gdXNlIHRoZSBnaXZlbgorcHJvdG9jb2wgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0Citwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wKK3ZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZQordmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGUKK2J5dGVzIGFyZ3VtZW50LiAgSXQgY2FuIHRodXMgYmUgYSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIGJpbmFyeQord3JpdGluZywgYW4gaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cwordGhpcyBpbnRlcmZhY2UuCisKK0lmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeQordG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24KKzIsIHNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcGlja2xlX2R1bXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfZHVtcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hNjA2ZTYyNmQ1NTM4NTBkIGlucHV0PTgzMGY4YTY0Y2VmNmYwNDJdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iaiIsICJmaWxlIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBQeU9iamVjdCAqZmlsZTsKLSAgICBQeU9iamVjdCAqcHJvdG8gPSBOVUxMOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7Ci0gICAgUGlja2xlck9iamVjdCAqcGlja2xlcjsKKyAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyID0gX1BpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cyBpcyBhIGtleXdvcmQtb25seSBhcmd1bWVudC4gICovCi0gICAgaWYgKFB5X1NJWkUoYXJncykgPiAzKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAicGlja2xlLmR1bXAoKSB0YWtlcyBhdCBtb3N0IDMgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PfE9POmR1bXAiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJmZpbGUsICZwcm90bywgJmZpeF9pbXBvcnRzKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBwaWNrbGVyID0gX1BpY2tsZXJfTmV3KCk7CiAgICAgaWYgKHBpY2tsZXIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG8sIGZpeF9pbXBvcnRzKSA8IDApCisgICAgaWYgKF9QaWNrbGVyX1NldFByb3RvY29sKHBpY2tsZXIsIHByb3RvY29sLCBmaXhfaW1wb3J0cykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKF9QaWNrbGVyX1NldE91dHB1dFN0cmVhbShwaWNrbGVyLCBmaWxlKSA8IDApCkBAIC02MTQ0LDUxICs2OTE4LDQxIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwaWNrbGVfZHVtcHNfZG9jLAotImR1bXBzKG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSkgLT4gYnl0ZXNcbiIKLSJcbiIKLSJSZXR1cm4gdGhlIHBpY2tsZWQgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9iamVjdCBhcyBhIGJ5dGVzXG4iCi0ib2JqZWN0LCBpbnN0ZWFkIG9mIHdyaXRpbmcgaXQgdG8gYSBmaWxlLlxuIgotIlxuIgotIlRoZSBvcHRpb25hbCBwcm90b2NvbCBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuIHByb3RvY29sO1xuIgotInN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMuICBUaGUgZGVmYXVsdCBwcm90b2NvbCBpcyAzOyBhXG4iCi0iYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy4wLlxuIgotIlxuIgotIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvblxuIgotInN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGUgdmVyc2lvbiBvZlxuIgotIlB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgotIlxuIgotIklmIGZpeF9pbXBvcnRzIGlzIFRydWUgYW5kICpwcm90b2NvbCogaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgotIm1hcCB0aGUgbmV3IFB5dGhvbiAzLnggbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob24gMi54LFxuIgotInNvIHRoYXQgdGhlIHBpY2tsZSBkYXRhIHN0cmVhbSBpcyByZWFkYWJsZSB3aXRoIFB5dGhvbiAyLnguXG4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KKworX3BpY2tsZS5kdW1wcworCisgIG9iajogb2JqZWN0CisgIHByb3RvY29sOiBvYmplY3QgPSBOVUxMCisgICoKKyAgZml4X2ltcG9ydHM6IGJvb2wgPSBUcnVlCisKK1JldHVybiB0aGUgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGFzIGEgYnl0ZXMgb2JqZWN0LgorCitUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuCitwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0Citwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuCisKK1NwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2wKK3ZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZQordmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC4KKworSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlIGFuZCAqcHJvdG9jb2wqIGlzIGxlc3MgdGhhbiAzLCBwaWNrbGUgd2lsbAordHJ5IHRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4KK1B5dGhvbiAyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLXBpY2tsZV9kdW1wcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorX3BpY2tsZV9kdW1wc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTc3N2YwZGVlZmU1Yjg4ZWUgaW5wdXQ9MjkzZGJlZGExODE1ODBiN10qLwogewotICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqIiwgInByb3RvY29sIiwgImZpeF9pbXBvcnRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm9iajsKLSAgICBQeU9iamVjdCAqcHJvdG8gPSBOVUxMOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgUHlPYmplY3QgKmZpeF9pbXBvcnRzID0gUHlfVHJ1ZTsKLSAgICBQaWNrbGVyT2JqZWN0ICpwaWNrbGVyOworICAgIFBpY2tsZXJPYmplY3QgKnBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKIAotICAgIC8qIGZpeF9pbXBvcnRzIGlzIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50LiAgKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSA+IDIpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUuZHVtcHMoKSB0YWtlcyBhdCBtb3N0IDIgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T086ZHVtcHMiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJnByb3RvLCAmZml4X2ltcG9ydHMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHBpY2tsZXIgPSBfUGlja2xlcl9OZXcoKTsKICAgICBpZiAocGlja2xlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfUGlja2xlcl9TZXRQcm90b2NvbChwaWNrbGVyLCBwcm90bywgZml4X2ltcG9ydHMpIDwgMCkKKyAgICBpZiAoX1BpY2tsZXJfU2V0UHJvdG9jb2wocGlja2xlciwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICBpZiAoZHVtcChwaWNrbGVyLCBvYmopIDwgMCkKQEAgLTYyMDMsNTQgKzY5NjcsNDggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKHBpY2tsZV9sb2FkX2RvYywKLSJsb2FkKGZpbGUsICosIGZpeF9pbXBvcnRzPVRydWUsIGVuY29kaW5nPSdBU0NJSScsIGVycm9ycz0nc3RyaWN0JykgLT4gb2JqZWN0XG4iCi0iXG4iCi0iUmVhZCBhIHBpY2tsZWQgb2JqZWN0IHJlcHJlc2VudGF0aW9uIGZyb20gdGhlIG9wZW4gZmlsZSBvYmplY3QgZmlsZSBhbmRcbiIKLSJyZXR1cm4gdGhlIHJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpbi4gIFRoaXMgaXNcbiIKLSJlcXVpdmFsZW50IHRvIGBgVW5waWNrbGVyKGZpbGUpLmxvYWQoKWBgLCBidXQgbWF5IGJlIG1vcmUgZWZmaWNpZW50LlxuIgotIlxuIgotIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8gcHJvdG9jb2xcbiIKLSJhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZVxuIgotImlnbm9yZWQuXG4iCi0iXG4iCi0iVGhlIGFyZ3VtZW50IGZpbGUgbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlcyBhblxuIgotImludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8gYXJndW1lbnRzLiAgQm90aFxuIgotIm1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhIGJpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWRcbiIKLSJmb3IgcmVhZGluZywgYSBCeXRlc0lPIG9iamVjdCwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzXG4iCi0iaW50ZXJmYWNlLlxuIgotIlxuIgotIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyxcbiIKLSJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtIGdlbmVyYXRlZFxuIgotImJ5IFB5dGhvbiAyLnguICBJZiBmaXhfaW1wb3J0cyBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8gbWFwIHRoZSBvbGRcbiIKLSJQeXRob24gMi54IG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy54LiAgVGhlIGVuY29kaW5nIGFuZFxuIgotImVycm9ycyB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZyBpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob25cbiIKLSIyLng7IHRoZXNlIGRlZmF1bHQgdG8gJ0FTQ0lJJyBhbmQgJ3N0cmljdCcsIHJlc3BlY3RpdmVseS5cbiIpOworLypbY2xpbmljIGlucHV0XQorCitfcGlja2xlLmxvYWQKKworICBmaWxlOiBvYmplY3QKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKyAgZW5jb2Rpbmc6IHN0ciA9ICdBU0NJSScKKyAgZXJyb3JzOiBzdHIgPSAnc3RyaWN0JworCitSZWFkIGFuZCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIHBpY2tsZSBkYXRhIHN0b3JlZCBpbiBhIGZpbGUuCisKK1RoaXMgaXMgZXF1aXZhbGVudCB0byBgYFVucGlja2xlcihmaWxlKS5sb2FkKClgYCwgYnV0IG1heSBiZSBtb3JlCitlZmZpY2llbnQuCisKK1RoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8KK3Byb3RvY29sIGFyZ3VtZW50IGlzIG5lZWRlZC4gIEJ5dGVzIHBhc3QgdGhlIHBpY2tsZWQgb2JqZWN0J3MKK3JlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLgorCitUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXMKK2FuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm8KK2FyZ3VtZW50cy4gIEJvdGggbWV0aG9kcyBzaG91bGQgcmV0dXJuIGJ5dGVzLiAgVGh1cyAqZmlsZSogY2FuIGJlIGEKK2JpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGFuIGlvLkJ5dGVzSU8gb2JqZWN0LCBvciBhbnkKK290aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS4KKworT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLAord2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbQorZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8KK21hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZQorKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcKK2luc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyOyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLAorcmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuIGJlICdieXRlcycgdG8gcmVhZCB0aGVzZSA4LWJpdAorc3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcGlja2xlX2xvYWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK19waWNrbGVfbG9hZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpmaWxlLCBpbnQgZml4X2ltcG9ydHMsIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NTY4YzYxMzU2YzE3MjY1NCBpbnB1dD0yZGY3YzdhMWU2NzQyMjA0XSovCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwotICAgIFB5T2JqZWN0ICpmaWxlOwotICAgIFB5T2JqZWN0ICpmaXhfaW1wb3J0cyA9IFB5X1RydWU7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEw7Ci0gICAgY2hhciAqZXJyb3JzID0gTlVMTDsKLSAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlcjsKKyAgICBVbnBpY2tsZXJPYmplY3QgKnVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CiAKLSAgICAvKiBmaXhfaW1wb3J0cywgZW5jb2RpbmcgYW5kIGVycm9ycyBhcmUgYSBrZXl3b3JkLW9ubHkgYXJndW1lbnQuICAqLwotICAgIGlmIChQeV9TSVpFKGFyZ3MpICE9IDEpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJwaWNrbGUubG9hZCgpIHRha2VzIGV4YWN0bHkgb25lIHBvc2l0aW9uYWwgIgotICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICglemQgZ2l2ZW4pIiwgUHlfU0laRShhcmdzKSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE9zczpsb2FkIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWxlLCAmZml4X2ltcG9ydHMsICZlbmNvZGluZywgJmVycm9ycykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgdW5waWNrbGVyID0gX1VucGlja2xlcl9OZXcoKTsKICAgICBpZiAodW5waWNrbGVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC02MjYwLDkgKzcwMTgsNyBAQAogICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0RW5jb2RpbmcodW5waWNrbGVyLCBlbmNvZGluZywgZXJyb3JzKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICB1bnBpY2tsZXItPmZpeF9pbXBvcnRzID0gUHlPYmplY3RfSXNUcnVlKGZpeF9pbXBvcnRzKTsKLSAgICBpZiAodW5waWNrbGVyLT5maXhfaW1wb3J0cyA9PSAtMSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICB1bnBpY2tsZXItPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHM7CiAKICAgICByZXN1bHQgPSBsb2FkKHVucGlja2xlcik7CiAgICAgUHlfREVDUkVGKHVucGlja2xlcik7CkBAIC02MjczLDU5ICs3MDI5LDQ5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihwaWNrbGVfbG9hZHNfZG9jLAotImxvYWRzKGlucHV0LCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz0nQVNDSUknLCBlcnJvcnM9J3N0cmljdCcpIC0+IG9iamVjdFxuIgotIlxuIgotIlJlYWQgYSBwaWNrbGVkIG9iamVjdCBoaWVyYXJjaHkgZnJvbSBhIGJ5dGVzIG9iamVjdCBhbmQgcmV0dXJuIHRoZVxuIgotInJlY29uc3RpdHV0ZWQgb2JqZWN0IGhpZXJhcmNoeSBzcGVjaWZpZWQgdGhlcmVpblxuIgotIlxuIgotIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm8gcHJvdG9jb2xcbiIKLSJhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzIHJlcHJlc2VudGF0aW9uIGFyZVxuIgotImlnbm9yZWQuXG4iCi0iXG4iCi0iT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlIGZpeF9pbXBvcnRzLCBlbmNvZGluZyBhbmQgZXJyb3JzLCB3aGljaFxuIgotImFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW0gZ2VuZXJhdGVkXG4iCi0iYnkgUHl0aG9uIDIueC4gIElmIGZpeF9pbXBvcnRzIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0byBtYXAgdGhlIG9sZFxuIgotIlB5dGhvbiAyLnggbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLnguICBUaGUgZW5jb2RpbmcgYW5kXG4iCi0iZXJyb3JzIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nIGluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvblxuIgotIjIueDsgdGhlc2UgZGVmYXVsdCB0byAnQVNDSUknIGFuZCAnc3RyaWN0JywgcmVzcGVjdGl2ZWx5LlxuIik7CisvKltjbGluaWMgaW5wdXRdCisKK19waWNrbGUubG9hZHMKKworICBkYXRhOiBvYmplY3QKKyAgKgorICBmaXhfaW1wb3J0czogYm9vbCA9IFRydWUKKyAgZW5jb2Rpbmc6IHN0ciA9ICdBU0NJSScKKyAgZXJyb3JzOiBzdHIgPSAnc3RyaWN0JworCitSZWFkIGFuZCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGdpdmVuIHBpY2tsZSBkYXRhLgorCitUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vCitwcm90b2NvbCBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdCdzCityZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC4KKworT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLAord2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbQorZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG8KK21hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZQorKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmcKK2luc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyOyB0aGVzZSBkZWZhdWx0IHRvICdBU0NJSScgYW5kICdzdHJpY3QnLAorcmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuIGJlICdieXRlcycgdG8gcmVhZCB0aGVzZSA4LWJpdAorc3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotcGlja2xlX2xvYWRzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCitfcGlja2xlX2xvYWRzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmRhdGEsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wYjM4NDVhZDExMGIyNTIyIGlucHV0PWY1N2YwZmRhYTJiNGNiOGJdKi8KIHsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImlucHV0IiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIDB9OwotICAgIFB5T2JqZWN0ICppbnB1dDsKLSAgICBQeU9iamVjdCAqZml4X2ltcG9ydHMgPSBQeV9UcnVlOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgY2hhciAqZW5jb2RpbmcgPSBOVUxMOwotICAgIGNoYXIgKmVycm9ycyA9IE5VTEw7Ci0gICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXI7CisgICAgVW5waWNrbGVyT2JqZWN0ICp1bnBpY2tsZXIgPSBfVW5waWNrbGVyX05ldygpOwogCi0gICAgLyogZml4X2ltcG9ydHMsIGVuY29kaW5nIGFuZCBlcnJvcnMgYXJlIGEga2V5d29yZC1vbmx5IGFyZ3VtZW50LiAgKi8KLSAgICBpZiAoUHlfU0laRShhcmdzKSAhPSAxKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAicGlja2xlLmxvYWRzKCkgdGFrZXMgZXhhY3RseSBvbmUgcG9zaXRpb25hbCAiCi0gICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgKCV6ZCBnaXZlbikiLCBQeV9TSVpFKGFyZ3MpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98T3NzOmxvYWRzIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnB1dCwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHVucGlja2xlciA9IF9VbnBpY2tsZXJfTmV3KCk7CiAgICAgaWYgKHVucGlja2xlciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfVW5waWNrbGVyX1NldFN0cmluZ0lucHV0KHVucGlja2xlciwgaW5wdXQpIDwgMCkKKyAgICBpZiAoX1VucGlja2xlcl9TZXRTdHJpbmdJbnB1dCh1bnBpY2tsZXIsIGRhdGEpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGlmIChfVW5waWNrbGVyX1NldElucHV0RW5jb2RpbmcodW5waWNrbGVyLCBlbmNvZGluZywgZXJyb3JzKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICB1bnBpY2tsZXItPmZpeF9pbXBvcnRzID0gUHlPYmplY3RfSXNUcnVlKGZpeF9pbXBvcnRzKTsKLSAgICBpZiAodW5waWNrbGVyLT5maXhfaW1wb3J0cyA9PSAtMSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICB1bnBpY2tsZXItPmZpeF9pbXBvcnRzID0gZml4X2ltcG9ydHM7CiAKICAgICByZXN1bHQgPSBsb2FkKHVucGlja2xlcik7CiAgICAgUHlfREVDUkVGKHVucGlja2xlcik7CkBAIC02MzM2LDEzOSArNzA4Miw2OSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0KIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgcGlja2xlX21ldGhvZHNbXSA9IHsKLSAgICB7ImR1bXAiLCAgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9kdW1wLCAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9kdW1wX2RvY30sCi0gICAgeyJkdW1wcyIsIChQeUNGdW5jdGlvbilwaWNrbGVfZHVtcHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICBwaWNrbGVfZHVtcHNfZG9jfSwKLSAgICB7ImxvYWQiLCAgKFB5Q0Z1bmN0aW9uKXBpY2tsZV9sb2FkLCAgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgIHBpY2tsZV9sb2FkX2RvY30sCi0gICAgeyJsb2FkcyIsIChQeUNGdW5jdGlvbilwaWNrbGVfbG9hZHMsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICBwaWNrbGVfbG9hZHNfZG9jfSwKKyAgICBfUElDS0xFX0RVTVBfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9EVU1QU19NRVRIT0RERUYKKyAgICBfUElDS0xFX0xPQURfTUVUSE9EREVGCisgICAgX1BJQ0tMRV9MT0FEU19NRVRIT0RERUYKICAgICB7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8KIH07CiAKIHN0YXRpYyBpbnQKLWluaXRtb2R1bGUodm9pZCkKK3BpY2tsZV9jbGVhcihQeU9iamVjdCAqbSkKIHsKLSAgICBQeU9iamVjdCAqY29weXJlZyA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKmNvbXBhdF9waWNrbGUgPSBOVUxMOwotCi0gICAgLyogWFhYOiBXZSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIHR5cGVzIG9mIHRoZSBkaWN0aW9uYXJpZXMgaW1wb3J0ZWQgYXJlCi0gICAgICAgZXhhY3RseSBQeURpY3Qgb2JqZWN0cy4gT3RoZXJ3aXNlLCBpdCBpcyBwb3NzaWJsZSB0byBjcmFzaCB0aGUgcGlja2xlCi0gICAgICAgc2luY2Ugd2UgdXNlIHRoZSBQeURpY3QgQVBJIGRpcmVjdGx5IHRvIGFjY2VzcyB0aGVzZSBkaWN0aW9uYXJpZXMuICovCi0KLSAgICBjb3B5cmVnID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJjb3B5cmVnIik7Ci0gICAgaWYgKCFjb3B5cmVnKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGRpc3BhdGNoX3RhYmxlID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiZGlzcGF0Y2hfdGFibGUiKTsKLSAgICBpZiAoIWRpc3BhdGNoX3RhYmxlKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGV4dGVuc2lvbl9yZWdpc3RyeSA9IFwKLSAgICAgICAgUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2V4dGVuc2lvbl9yZWdpc3RyeSIpOwotICAgIGlmICghZXh0ZW5zaW9uX3JlZ2lzdHJ5KQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGludmVydGVkX3JlZ2lzdHJ5ID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhjb3B5cmVnLCAiX2ludmVydGVkX3JlZ2lzdHJ5Iik7Ci0gICAgaWYgKCFpbnZlcnRlZF9yZWdpc3RyeSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBleHRlbnNpb25fY2FjaGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvcHlyZWcsICJfZXh0ZW5zaW9uX2NhY2hlIik7Ci0gICAgaWYgKCFleHRlbnNpb25fY2FjaGUpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgUHlfQ0xFQVIoY29weXJlZyk7Ci0KLSAgICAvKiBMb2FkIHRoZSAyLnggLT4gMy54IHN0ZGxpYiBtb2R1bGUgbWFwcGluZyB0YWJsZXMgKi8KLSAgICBjb21wYXRfcGlja2xlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJfY29tcGF0X3BpY2tsZSIpOwotICAgIGlmICghY29tcGF0X3BpY2tsZSkKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBuYW1lX21hcHBpbmdfMnRvMyA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwgIk5BTUVfTUFQUElORyIpOwotICAgIGlmICghbmFtZV9tYXBwaW5nXzJ0bzMpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChuYW1lX21hcHBpbmdfMnRvMykpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5OQU1FX01BUFBJTkcgc2hvdWxkIGJlIGEgZGljdCwgbm90ICUuMjAwcyIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG5hbWVfbWFwcGluZ18ydG8zKS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQotICAgIGltcG9ydF9tYXBwaW5nXzJ0bzMgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIklNUE9SVF9NQVBQSU5HIik7Ci0gICAgaWYgKCFpbXBvcnRfbWFwcGluZ18ydG8zKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIGlmICghUHlEaWN0X0NoZWNrRXhhY3QoaW1wb3J0X21hcHBpbmdfMnRvMykpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5JTVBPUlRfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCAiCi0gICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUoaW1wb3J0X21hcHBpbmdfMnRvMyktPnRwX25hbWUpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICAvKiAuLi4gYW5kIHRoZSAzLnggLT4gMi54IG1hcHBpbmcgdGFibGVzICovCi0gICAgbmFtZV9tYXBwaW5nXzN0bzIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKGNvbXBhdF9waWNrbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSRVZFUlNFX05BTUVfTUFQUElORyIpOwotICAgIGlmICghbmFtZV9tYXBwaW5nXzN0bzIpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKCFQeURpY3RfQ2hlY2tFeGFjdChuYW1lX21hcHBpbmdfM3RvMikpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1J1bnRpbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJfY29tcGF0X3BpY2tsZS5SRVZFUlNFX05BTUVfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCAiCi0gICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUobmFtZV9tYXBwaW5nXzN0bzIpLT50cF9uYW1lKTsKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICB9Ci0gICAgaW1wb3J0X21hcHBpbmdfM3RvMiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoY29tcGF0X3BpY2tsZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUkVWRVJTRV9JTVBPUlRfTUFQUElORyIpOwotICAgIGlmICghaW1wb3J0X21hcHBpbmdfM3RvMikKLSAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIVB5RGljdF9DaGVja0V4YWN0KGltcG9ydF9tYXBwaW5nXzN0bzIpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiX2NvbXBhdF9waWNrbGUuUkVWRVJTRV9JTVBPUlRfTUFQUElORyBzaG91bGQgYmUgYSBkaWN0LCAiCi0gICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsIFB5X1RZUEUoaW1wb3J0X21hcHBpbmdfM3RvMiktPnRwX25hbWUpOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBQeV9DTEVBUihjb21wYXRfcGlja2xlKTsKLQotICAgIGVtcHR5X3R1cGxlID0gUHlUdXBsZV9OZXcoMCk7Ci0gICAgaWYgKGVtcHR5X3R1cGxlID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgdHdvX3R1cGxlID0gUHlUdXBsZV9OZXcoMik7Ci0gICAgaWYgKHR3b190dXBsZSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIC8qIFdlIHVzZSB0aGlzIHRlbXAgY29udGFpbmVyIHdpdGggbm8gcmVnYXJkIHRvIHJlZmNvdW50cywgb3IgdG8KLSAgICAgKiBrZWVwaW5nIGNvbnRhaW5lZXMgYWxpdmUuICBFeGVtcHQgZnJvbSBHQywgYmVjYXVzZSB3ZSBkb24ndAotICAgICAqIHdhbnQgYW55dGhpbmcgbG9va2luZyBhdCB0d29fdHVwbGUoKSBieSBtYWdpYy4KLSAgICAgKi8KLSAgICBQeU9iamVjdF9HQ19VblRyYWNrKHR3b190dXBsZSk7Ci0KKyAgICBfUGlja2xlX0NsZWFyU3RhdGUoX1BpY2tsZV9HZXRTdGF0ZShtKSk7CiAgICAgcmV0dXJuIDA7Cit9CiAKLSAgZXJyb3I6Ci0gICAgUHlfQ0xFQVIoY29weXJlZyk7Ci0gICAgUHlfQ0xFQVIoZGlzcGF0Y2hfdGFibGUpOwotICAgIFB5X0NMRUFSKGV4dGVuc2lvbl9yZWdpc3RyeSk7Ci0gICAgUHlfQ0xFQVIoaW52ZXJ0ZWRfcmVnaXN0cnkpOwotICAgIFB5X0NMRUFSKGV4dGVuc2lvbl9jYWNoZSk7Ci0gICAgUHlfQ0xFQVIoY29tcGF0X3BpY2tsZSk7Ci0gICAgUHlfQ0xFQVIobmFtZV9tYXBwaW5nXzJ0bzMpOwotICAgIFB5X0NMRUFSKGltcG9ydF9tYXBwaW5nXzJ0bzMpOwotICAgIFB5X0NMRUFSKG5hbWVfbWFwcGluZ18zdG8yKTsKLSAgICBQeV9DTEVBUihpbXBvcnRfbWFwcGluZ18zdG8yKTsKLSAgICBQeV9DTEVBUihlbXB0eV90dXBsZSk7Ci0gICAgUHlfQ0xFQVIodHdvX3R1cGxlKTsKLSAgICByZXR1cm4gLTE7CitzdGF0aWMgdm9pZAorcGlja2xlX2ZyZWUoUHlPYmplY3QgKm0pCit7CisgICAgX1BpY2tsZV9DbGVhclN0YXRlKF9QaWNrbGVfR2V0U3RhdGUobSkpOworfQorCitzdGF0aWMgaW50CitwaWNrbGVfdHJhdmVyc2UoUHlPYmplY3QgKm0sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFBpY2tsZVN0YXRlICpzdCA9IF9QaWNrbGVfR2V0U3RhdGUobSk7CisgICAgUHlfVklTSVQoc3QtPlBpY2tsZUVycm9yKTsKKyAgICBQeV9WSVNJVChzdC0+UGlja2xpbmdFcnJvcik7CisgICAgUHlfVklTSVQoc3QtPlVucGlja2xpbmdFcnJvcik7CisgICAgUHlfVklTSVQoc3QtPmRpc3BhdGNoX3RhYmxlKTsKKyAgICBQeV9WSVNJVChzdC0+ZXh0ZW5zaW9uX3JlZ2lzdHJ5KTsKKyAgICBQeV9WSVNJVChzdC0+ZXh0ZW5zaW9uX2NhY2hlKTsKKyAgICBQeV9WSVNJVChzdC0+aW52ZXJ0ZWRfcmVnaXN0cnkpOworICAgIFB5X1ZJU0lUKHN0LT5uYW1lX21hcHBpbmdfMnRvMyk7CisgICAgUHlfVklTSVQoc3QtPmltcG9ydF9tYXBwaW5nXzJ0bzMpOworICAgIFB5X1ZJU0lUKHN0LT5uYW1lX21hcHBpbmdfM3RvMik7CisgICAgUHlfVklTSVQoc3QtPmltcG9ydF9tYXBwaW5nXzN0bzIpOworICAgIFB5X1ZJU0lUKHN0LT5jb2RlY3NfZW5jb2RlKTsKKyAgICByZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfcGlja2xlbW9kdWxlID0gewogICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKLSAgICAiX3BpY2tsZSIsCi0gICAgcGlja2xlX21vZHVsZV9kb2MsCi0gICAgLTEsCi0gICAgcGlja2xlX21ldGhvZHMsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAorICAgICJfcGlja2xlIiwgICAgICAgICAgICAvKiBtX25hbWUgKi8KKyAgICBwaWNrbGVfbW9kdWxlX2RvYywgICAgLyogbV9kb2MgKi8KKyAgICBzaXplb2YoUGlja2xlU3RhdGUpLCAgLyogbV9zaXplICovCisgICAgcGlja2xlX21ldGhvZHMsICAgICAgIC8qIG1fbWV0aG9kcyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAvKiBtX3JlbG9hZCAqLworICAgIHBpY2tsZV90cmF2ZXJzZSwgICAgICAvKiBtX3RyYXZlcnNlICovCisgICAgcGlja2xlX2NsZWFyLCAgICAgICAgIC8qIG1fY2xlYXIgKi8KKyAgICAoZnJlZWZ1bmMpcGlja2xlX2ZyZWUgLyogbV9mcmVlICovCiB9OwogCiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19waWNrbGUodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbTsKKyAgICBQaWNrbGVTdGF0ZSAqc3Q7CisKKyAgICBtID0gUHlTdGF0ZV9GaW5kTW9kdWxlKCZfcGlja2xlbW9kdWxlKTsKKyAgICBpZiAobSkgeworICAgICAgICBQeV9JTkNSRUYobSk7CisgICAgICAgIHJldHVybiBtOworICAgIH0KIAogICAgIGlmIChQeVR5cGVfUmVhZHkoJlVucGlja2xlcl9UeXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjQ5MywyNyArNzE2OSwzMiBAQAogICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVucGlja2xlciIsIChQeU9iamVjdCAqKSZVbnBpY2tsZXJfVHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIHN0ID0gX1BpY2tsZV9HZXRTdGF0ZShtKTsKKwogICAgIC8qIEluaXRpYWxpemUgdGhlIGV4Y2VwdGlvbnMuICovCi0gICAgUGlja2xlRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl9waWNrbGUuUGlja2xlRXJyb3IiLCBOVUxMLCBOVUxMKTsKLSAgICBpZiAoUGlja2xlRXJyb3IgPT0gTlVMTCkKKyAgICBzdC0+UGlja2xlRXJyb3IgPSBQeUVycl9OZXdFeGNlcHRpb24oIl9waWNrbGUuUGlja2xlRXJyb3IiLCBOVUxMLCBOVUxMKTsKKyAgICBpZiAoc3QtPlBpY2tsZUVycm9yID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIFBpY2tsaW5nRXJyb3IgPSBcCi0gICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGluZ0Vycm9yIiwgUGlja2xlRXJyb3IsIE5VTEwpOwotICAgIGlmIChQaWNrbGluZ0Vycm9yID09IE5VTEwpCisgICAgc3QtPlBpY2tsaW5nRXJyb3IgPSBcCisgICAgICAgIFB5RXJyX05ld0V4Y2VwdGlvbigiX3BpY2tsZS5QaWNrbGluZ0Vycm9yIiwgc3QtPlBpY2tsZUVycm9yLCBOVUxMKTsKKyAgICBpZiAoc3QtPlBpY2tsaW5nRXJyb3IgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgVW5waWNrbGluZ0Vycm9yID0gXAotICAgICAgICBQeUVycl9OZXdFeGNlcHRpb24oIl9waWNrbGUuVW5waWNrbGluZ0Vycm9yIiwgUGlja2xlRXJyb3IsIE5VTEwpOwotICAgIGlmIChVbnBpY2tsaW5nRXJyb3IgPT0gTlVMTCkKKyAgICBzdC0+VW5waWNrbGluZ0Vycm9yID0gXAorICAgICAgICBQeUVycl9OZXdFeGNlcHRpb24oIl9waWNrbGUuVW5waWNrbGluZ0Vycm9yIiwgc3QtPlBpY2tsZUVycm9yLCBOVUxMKTsKKyAgICBpZiAoc3QtPlVucGlja2xpbmdFcnJvciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlBpY2tsZUVycm9yIiwgUGlja2xlRXJyb3IpIDwgMCkKKyAgICBQeV9JTkNSRUYoc3QtPlBpY2tsZUVycm9yKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQaWNrbGVFcnJvciIsIHN0LT5QaWNrbGVFcnJvcikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJQaWNrbGluZ0Vycm9yIiwgUGlja2xpbmdFcnJvcikgPCAwKQorICAgIFB5X0lOQ1JFRihzdC0+UGlja2xpbmdFcnJvcik7CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiUGlja2xpbmdFcnJvciIsIHN0LT5QaWNrbGluZ0Vycm9yKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlVucGlja2xpbmdFcnJvciIsIFVucGlja2xpbmdFcnJvcikgPCAwKQorICAgIFB5X0lOQ1JFRihzdC0+VW5waWNrbGluZ0Vycm9yKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJVbnBpY2tsaW5nRXJyb3IiLCBzdC0+VW5waWNrbGluZ0Vycm9yKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGluaXRtb2R1bGUoKSA8IDApCisgICAgaWYgKF9QaWNrbGVfSW5pdFN0YXRlKHN0KSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIG07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19wb3NpeHN1YnByb2Nlc3MuYyBiL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCmluZGV4IDAxOTZjYTIuLjE0OTAyMjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCisrKyBiL01vZHVsZXMvX3Bvc2l4c3VicHJvY2Vzcy5jCkBAIC0xNCwxMCArMTQsMTkgQEAKICNpZmRlZiBIQVZFX1NZU19TWVNDQUxMX0gKICNpbmNsdWRlIDxzeXMvc3lzY2FsbC5oPgogI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX1NZU19SRVNPVVJDRV9IKQorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2VuZGlmCiAjaWZkZWYgSEFWRV9ESVJFTlRfSAogI2luY2x1ZGUgPGRpcmVudC5oPgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKSAmJiAhZGVmaW5lZChTWVNfZ2V0ZGVudHM2NCkKKy8qIEFuZHJvaWQgZG9lc24ndCBleHBvc2Ugc3lzY2FsbHMsIGFkZCB0aGUgZGVmaW5pdGlvbiBtYW51YWxseS4gKi8KKyMgaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisjIGRlZmluZSBTWVNfZ2V0ZGVudHM2NCAgX19OUl9nZXRkZW50czY0CisjZW5kaWYKKwogI2lmIGRlZmluZWQoc3VuKQogLyogcmVhZGRpcjY0IGlzIHVzZWQgdG8gd29yayBhcm91bmQgU29sYXJpcyA5IGJ1ZyA2Mzk1Njk5LiAqLwogIyBkZWZpbmUgcmVhZGRpciByZWFkZGlyNjQKQEAgLTM1LDI0ICs0NCwyOCBAQAogIyBkZWZpbmUgRkRfRElSICIvcHJvYy9zZWxmL2ZkIgogI2VuZGlmCiAKLSNkZWZpbmUgUE9TSVhfQ0FMTChjYWxsKSAgIGlmICgoY2FsbCkgPT0gLTEpIGdvdG8gZXJyb3IKKyNkZWZpbmUgUE9TSVhfQ0FMTChjYWxsKSAgIGRvIHsgaWYgKChjYWxsKSA9PSAtMSkgZ290byBlcnJvcjsgfSB3aGlsZSAoMCkKIAogCi0vKiBNYXhpbXVtIGZpbGUgZGVzY3JpcHRvciwgaW5pdGlhbGl6ZWQgb24gbW9kdWxlIGxvYWQuICovCi1zdGF0aWMgbG9uZyBtYXhfZmQ7Ci0KLQotLyogR2l2ZW4gdGhlIGdjIG1vZHVsZSBjYWxsIGdjLmVuYWJsZSgpIGFuZCByZXR1cm4gMCBvbiBzdWNjZXNzLiAqLworLyogSWYgZ2Mgd2FzIGRpc2FibGVkLCBjYWxsIGdjLmVuYWJsZSgpLiAgUmV0dXJuIDAgb24gc3VjY2Vzcy4gKi8KIHN0YXRpYyBpbnQKLV9lbmFibGVfZ2MoUHlPYmplY3QgKmdjX21vZHVsZSkKK19lbmFibGVfZ2MoaW50IG5lZWRfdG9fcmVlbmFibGVfZ2MsIFB5T2JqZWN0ICpnY19tb2R1bGUpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICBfUHlfSURFTlRJRklFUihlbmFibGUpOworICAgIFB5T2JqZWN0ICpleGN0eXBlLCAqdmFsLCAqdGI7CiAKLSAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGdjX21vZHVsZSwgJlB5SWRfZW5hYmxlLCBOVUxMKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAxOwotICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChuZWVkX3RvX3JlZW5hYmxlX2djKSB7CisgICAgICAgIFB5RXJyX0ZldGNoKCZleGN0eXBlLCAmdmFsLCAmdGIpOworICAgICAgICByZXN1bHQgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGdjX21vZHVsZSwgJlB5SWRfZW5hYmxlLCBOVUxMKTsKKyAgICAgICAgaWYgKGV4Y3R5cGUgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShleGN0eXBlLCB2YWwsIHRiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIApAQCAtODcsNyArMTAwLDcgQEAKICAgICBpZiAoc3RhdCgiL2RldiIsICZkZXZfc3RhdCkgIT0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKHN0YXQoRkRfRElSLCAmZGV2X2ZkX3N0YXQpICE9IDApCi0gICAgICAgIHJldHVybiAwOyAKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKGRldl9zdGF0LnN0X2RldiA9PSBkZXZfZmRfc3RhdC5zdF9kZXYpCiAgICAgICAgIHJldHVybiAwOyAgLyogLyA9PSAvZGV2ID09IC9kZXYvZmQgbWVhbnMgaXQgaXMgc3RhdGljLiAjZmFpbCAqLwogICAgIHJldHVybiAxOwpAQCAtMTM2LDE1ICsxNDksNzAgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIGludAorbWFrZV9pbmhlcml0YWJsZShQeU9iamVjdCAqcHlfZmRzX3RvX2tlZXAsIGludCBlcnJwaXBlX3dyaXRlKQoreworICAgIFB5X3NzaXplX3QgaSwgbGVuOwogCi0vKiBDbG9zZSBhbGwgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgcmFuZ2Ugc3RhcnRfZmQgaW5jbHVzaXZlIHRvCi0gKiBlbmRfZmQgZXhjbHVzaXZlIGV4Y2VwdCBmb3IgdGhvc2UgaW4gcHlfZmRzX3RvX2tlZXAuICBJZiB0aGUKLSAqIHJhbmdlIGRlZmluZWQgYnkgW3N0YXJ0X2ZkLCBlbmRfZmQpIGlzIGxhcmdlIHRoaXMgd2lsbCB0YWtlIGEKLSAqIGxvbmcgdGltZSBhcyBpdCBjYWxscyBjbG9zZSgpIG9uIEVWRVJZIHBvc3NpYmxlIGZkLgorICAgIGxlbiA9IFB5U2VxdWVuY2VfTGVuZ3RoKHB5X2Zkc190b19rZWVwKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgUHlPYmplY3QqIGZkb2JqID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHB5X2Zkc190b19rZWVwLCBpKTsKKyAgICAgICAgbG9uZyBmZCA9IFB5TG9uZ19Bc0xvbmcoZmRvYmopOworICAgICAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworICAgICAgICBhc3NlcnQoMCA8PSBmZCAmJiBmZCA8PSBJTlRfTUFYKTsKKyAgICAgICAgaWYgKGZkID09IGVycnBpcGVfd3JpdGUpIHsKKyAgICAgICAgICAgIC8qIGVycnBpcGVfd3JpdGUgaXMgcGFydCBvZiBweV9mZHNfdG9fa2VlcC4gSXQgbXVzdCBiZSBjbG9zZWQgYXQKKyAgICAgICAgICAgICAgIGV4ZWMoKSwgYnV0IGtlcHQgb3BlbiBpbiB0aGUgY2hpbGQgcHJvY2VzcyB1bnRpbCBleGVjKCkgaXMKKyAgICAgICAgICAgICAgIGNhbGxlZC4gKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKChpbnQpZmQsIDEsIE5VTEwpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworLyogR2V0IHRoZSBtYXhpbXVtIGZpbGUgZGVzY3JpcHRvciB0aGF0IGNvdWxkIGJlIG9wZW5lZCBieSB0aGlzIHByb2Nlc3MuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGFzeW5jIHNpZ25hbCBzYWZlIGZvciB1c2UgYmV0d2VlbiBmb3JrKCkgYW5kIGV4ZWMoKS4KKyAqLworc3RhdGljIGxvbmcKK3NhZmVfZ2V0X21heF9mZCh2b2lkKQoreworICAgIGxvbmcgbG9jYWxfbWF4X2ZkOworI2lmIGRlZmluZWQoX19OZXRCU0RfXykKKyAgICBsb2NhbF9tYXhfZmQgPSBmY250bCgwLCBGX01BWEZEKTsKKyAgICBpZiAobG9jYWxfbWF4X2ZkID49IDApCisgICAgICAgIHJldHVybiBsb2NhbF9tYXhfZmQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfU1lTX1JFU09VUkNFX0gpICYmIGRlZmluZWQoX19PcGVuQlNEX18pCisgICAgc3RydWN0IHJsaW1pdCBybDsKKyAgICAvKiBOb3Qgb24gdGhlIFBPU0lYIGFzeW5jIHNpZ25hbCBzYWZlIGZ1bmN0aW9ucyBsaXN0IGJ1dCBsaWtlbHkKKyAgICAgKiBzYWZlLiAgVE9ETyAtIFNvbWVvbmUgc2hvdWxkIGF1ZGl0IE9wZW5CU0QgdG8gbWFrZSBzdXJlLiAqLworICAgIGlmIChnZXRybGltaXQoUkxJTUlUX05PRklMRSwgJnJsKSA+PSAwKQorICAgICAgICByZXR1cm4gKGxvbmcpIHJsLnJsaW1fbWF4OworI2VuZGlmCisjaWZkZWYgX1NDX09QRU5fTUFYCisgICAgbG9jYWxfbWF4X2ZkID0gc3lzY29uZihfU0NfT1BFTl9NQVgpOworICAgIGlmIChsb2NhbF9tYXhfZmQgPT0gLTEpCisjZW5kaWYKKyAgICAgICAgbG9jYWxfbWF4X2ZkID0gMjU2OyAgLyogTWF0Y2hlcyBsZWdhY3kgTGliL3N1YnByb2Nlc3MucHkgYmVoYXZpb3IuICovCisgICAgcmV0dXJuIGxvY2FsX21heF9mZDsKK30KKworCisvKiBDbG9zZSBhbGwgZmlsZSBkZXNjcmlwdG9ycyBpbiB0aGUgcmFuZ2UgZnJvbSBzdGFydF9mZCBhbmQgaGlnaGVyCisgKiBleGNlcHQgZm9yIHRob3NlIGluIHB5X2Zkc190b19rZWVwLiAgSWYgdGhlIHJhbmdlIGRlZmluZWQgYnkKKyAqIFtzdGFydF9mZCwgc2FmZV9nZXRfbWF4X2ZkKCkpIGlzIGxhcmdlIHRoaXMgd2lsbCB0YWtlIGEgbG9uZworICogdGltZSBhcyBpdCBjYWxscyBjbG9zZSgpIG9uIEVWRVJZIHBvc3NpYmxlIGZkLgorICoKKyAqIEl0IGlzbid0IHBvc3NpYmxlIHRvIGtub3cgZm9yIHN1cmUgd2hhdCB0aGUgbWF4IGZkIHRvIGdvIHVwIHRvCisgKiBpcyBmb3IgcHJvY2Vzc2VzIHdpdGggdGhlIGNhcGFiaWxpdHkgb2YgcmFpc2luZyB0aGVpciBtYXhpbXVtLgogICovCiBzdGF0aWMgdm9pZAotX2Nsb3NlX2Zkc19ieV9icnV0ZV9mb3JjZShpbnQgc3RhcnRfZmQsIGludCBlbmRfZmQsIFB5T2JqZWN0ICpweV9mZHNfdG9fa2VlcCkKK19jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2UobG9uZyBzdGFydF9mZCwgUHlPYmplY3QgKnB5X2Zkc190b19rZWVwKQogeworICAgIGxvbmcgZW5kX2ZkID0gc2FmZV9nZXRfbWF4X2ZkKCk7CiAgICAgUHlfc3NpemVfdCBudW1fZmRzX3RvX2tlZXAgPSBQeVNlcXVlbmNlX0xlbmd0aChweV9mZHNfdG9fa2VlcCk7CiAgICAgUHlfc3NpemVfdCBrZWVwX3NlcV9pZHg7CiAgICAgaW50IGZkX251bTsKQEAgLTE1NywxMyArMjI1LDEzIEBACiAgICAgICAgIGlmIChrZWVwX2ZkIDwgc3RhcnRfZmQpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgZm9yIChmZF9udW0gPSBzdGFydF9mZDsgZmRfbnVtIDwga2VlcF9mZDsgKytmZF9udW0pIHsKLSAgICAgICAgICAgIHdoaWxlIChjbG9zZShmZF9udW0pIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgICAgICBjbG9zZShmZF9udW0pOwogICAgICAgICB9CiAgICAgICAgIHN0YXJ0X2ZkID0ga2VlcF9mZCArIDE7CiAgICAgfQogICAgIGlmIChzdGFydF9mZCA8PSBlbmRfZmQpIHsKICAgICAgICAgZm9yIChmZF9udW0gPSBzdGFydF9mZDsgZmRfbnVtIDwgZW5kX2ZkOyArK2ZkX251bSkgewotICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZkX251bSkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKyAgICAgICAgICAgIGNsb3NlKGZkX251bSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xODQsOCArMjUyLDggQEAKICAgIGNoYXIgICAgICAgICAgIGRfbmFtZVsyNTZdOyAgLyogRmlsZW5hbWUgKG51bGwtdGVybWluYXRlZCkgKi8KIH07CiAKLS8qIENsb3NlIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIHJhbmdlIHN0YXJ0X2ZkIGluY2x1c2l2ZSB0byBlbmRfZmQKLSAqIGV4Y2x1c2l2ZS4gRG8gbm90IGNsb3NlIGFueSBpbiB0aGUgc29ydGVkIHB5X2Zkc190b19rZWVwIGxpc3QuCisvKiBDbG9zZSBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGluIHRoZSByYW5nZSBmcm9tIHN0YXJ0X2ZkIGFuZCBoaWdoZXIKKyAqIERvIG5vdCBjbG9zZSBhbnkgaW4gdGhlIHNvcnRlZCBweV9mZHNfdG9fa2VlcCBsaXN0LgogICoKICAqIFRoaXMgdmVyc2lvbiBpcyBhc3luYyBzaWduYWwgc2FmZSBhcyBpdCBkb2VzIG5vdCBtYWtlIGFueSB1bnNhZmUgQyBsaWJyYXJ5CiAgKiBjYWxscywgbWFsbG9jIGNhbGxzIG9yIGhhbmRsZSBhbnkgbG9ja3MuICBJdCBpcyBfdW5mb3J0dW5hdGVfIHRvIGJlIGZvcmNlZApAQCAtMjAwLDI2ICsyNjgsMTQgQEAKICAqIGl0IHdpdGggc29tZSBjcHAgI2RlZmluZSBtYWdpYyB0byB3b3JrIG9uIG90aGVyIE9TZXMgYXMgd2VsbCBpZiB5b3Ugd2FudC4KICAqLwogc3RhdGljIHZvaWQKLV9jbG9zZV9vcGVuX2ZkX3JhbmdlX3NhZmUoaW50IHN0YXJ0X2ZkLCBpbnQgZW5kX2ZkLCBQeU9iamVjdCogcHlfZmRzX3RvX2tlZXApCitfY2xvc2Vfb3Blbl9mZHNfc2FmZShpbnQgc3RhcnRfZmQsIFB5T2JqZWN0KiBweV9mZHNfdG9fa2VlcCkKIHsKICAgICBpbnQgZmRfZGlyX2ZkOwotICAgIGlmIChzdGFydF9mZCA+PSBlbmRfZmQpCi0gICAgICAgIHJldHVybjsKLSNpZmRlZiBPX0NMT0VYRUMKLSAgICBmZF9kaXJfZmQgPSBvcGVuKEZEX0RJUiwgT19SRE9OTFkgfCBPX0NMT0VYRUMsIDApOwotI2Vsc2UKLSAgICBmZF9kaXJfZmQgPSBvcGVuKEZEX0RJUiwgT19SRE9OTFksIDApOwotI2lmZGVmIEZEX0NMT0VYRUMKLSAgICB7Ci0gICAgICAgIGludCBvbGQgPSBmY250bChmZF9kaXJfZmQsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwoZmRfZGlyX2ZkLCBGX1NFVEZELCBvbGQgfCBGRF9DTE9FWEVDKTsKLSAgICB9Ci0jZW5kaWYKLSNlbmRpZgorCisgICAgZmRfZGlyX2ZkID0gX1B5X29wZW4oRkRfRElSLCBPX1JET05MWSk7CiAgICAgaWYgKGZkX2Rpcl9mZCA9PSAtMSkgewogICAgICAgICAvKiBObyB3YXkgdG8gZ2V0IGEgbGlzdCBvZiBvcGVuIGZkcy4gKi8KLSAgICAgICAgX2Nsb3NlX2Zkc19ieV9icnV0ZV9mb3JjZShzdGFydF9mZCwgZW5kX2ZkLCBweV9mZHNfdG9fa2VlcCk7CisgICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIHB5X2Zkc190b19rZWVwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNoYXIgYnVmZmVyW3NpemVvZihzdHJ1Y3QgbGludXhfZGlyZW50NjQpXTsKQEAgLTIzNCw5ICsyOTAsOSBAQAogICAgICAgICAgICAgICAgIGVudHJ5ID0gKHN0cnVjdCBsaW51eF9kaXJlbnQ2NCAqKShidWZmZXIgKyBvZmZzZXQpOwogICAgICAgICAgICAgICAgIGlmICgoZmQgPSBfcG9zX2ludF9mcm9tX2FzY2lpKGVudHJ5LT5kX25hbWUpKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgLyogTm90IGEgbnVtYmVyLiAqLwotICAgICAgICAgICAgICAgIGlmIChmZCAhPSBmZF9kaXJfZmQgJiYgZmQgPj0gc3RhcnRfZmQgJiYgZmQgPCBlbmRfZmQgJiYKKyAgICAgICAgICAgICAgICBpZiAoZmQgIT0gZmRfZGlyX2ZkICYmIGZkID49IHN0YXJ0X2ZkICYmCiAgICAgICAgICAgICAgICAgICAgICFfaXNfZmRfaW5fc29ydGVkX2ZkX3NlcXVlbmNlKGZkLCBweV9mZHNfdG9fa2VlcCkpIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZkKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgICAgICAgICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0yNDQsMTMgKzMwMCwxMyBAQAogICAgIH0KIH0KIAotI2RlZmluZSBfY2xvc2Vfb3Blbl9mZF9yYW5nZSBfY2xvc2Vfb3Blbl9mZF9yYW5nZV9zYWZlCisjZGVmaW5lIF9jbG9zZV9vcGVuX2ZkcyBfY2xvc2Vfb3Blbl9mZHNfc2FmZQogCiAjZWxzZSAgLyogTk9UIChkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChIQVZFX1NZU19TWVNDQUxMX0gpKSAqLwogCiAKLS8qIENsb3NlIGFsbCBvcGVuIGZpbGUgZGVzY3JpcHRvcnMgaW4gdGhlIHJhbmdlIHN0YXJ0X2ZkIGluY2x1c2l2ZSB0byBlbmRfZmQKLSAqIGV4Y2x1c2l2ZS4gRG8gbm90IGNsb3NlIGFueSBpbiB0aGUgc29ydGVkIHB5X2Zkc190b19rZWVwIGxpc3QuCisvKiBDbG9zZSBhbGwgb3BlbiBmaWxlIGRlc2NyaXB0b3JzIGZyb20gc3RhcnRfZmQgYW5kIGhpZ2hlci4KKyAqIERvIG5vdCBjbG9zZSBhbnkgaW4gdGhlIHNvcnRlZCBweV9mZHNfdG9fa2VlcCBsaXN0LgogICoKICAqIFRoaXMgZnVuY3Rpb24gdmlvbGF0ZXMgdGhlIHN0cmljdCB1c2Ugb2YgYXN5bmMgc2lnbmFsIHNhZmUgZnVuY3Rpb25zLiA6KAogICogSXQgY2FsbHMgb3BlbmRpcigpLCByZWFkZGlyKCkgYW5kIGNsb3NlZGlyKCkuICBPZiB0aGVzZSwgdGhlIG9uZSBtb3N0CkBAIC0yNjMsMjYgKzMxOSwyMCBAQAogICogICBodHRwOi8vd29tYmxlLmRlY2FkZW50Lm9yZy51ay9yZWFkZGlyX3ItYWR2aXNvcnkuaHRtbAogICovCiBzdGF0aWMgdm9pZAotX2Nsb3NlX29wZW5fZmRfcmFuZ2VfbWF5YmVfdW5zYWZlKGludCBzdGFydF9mZCwgaW50IGVuZF9mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCogcHlfZmRzX3RvX2tlZXApCitfY2xvc2Vfb3Blbl9mZHNfbWF5YmVfdW5zYWZlKGxvbmcgc3RhcnRfZmQsIFB5T2JqZWN0KiBweV9mZHNfdG9fa2VlcCkKIHsKICAgICBESVIgKnByb2NfZmRfZGlyOwogI2lmbmRlZiBIQVZFX0RJUkZECi0gICAgd2hpbGUgKF9pc19mZF9pbl9zb3J0ZWRfZmRfc2VxdWVuY2Uoc3RhcnRfZmQsIHB5X2Zkc190b19rZWVwKSAmJgotICAgICAgICAgICAoc3RhcnRfZmQgPCBlbmRfZmQpKSB7CisgICAgd2hpbGUgKF9pc19mZF9pbl9zb3J0ZWRfZmRfc2VxdWVuY2Uoc3RhcnRfZmQsIHB5X2Zkc190b19rZWVwKSkgewogICAgICAgICArK3N0YXJ0X2ZkOwogICAgIH0KLSAgICBpZiAoc3RhcnRfZmQgPj0gZW5kX2ZkKQotICAgICAgICByZXR1cm47CiAgICAgLyogQ2xvc2Ugb3VyIGxvd2VzdCBmZCBiZWZvcmUgd2UgY2FsbCBvcGVuZGlyIHNvIHRoYXQgaXQgaXMgbGlrZWx5IHRvCiAgICAgICogcmV1c2UgdGhhdCBmZCBvdGhlcndpc2Ugd2UgbWlnaHQgY2xvc2Ugb3BlbmRpcidzIGZpbGUgZGVzY3JpcHRvciBpbgogICAgICAqIG91ciBsb29wLiAgVGhpcyB0cmljayBhc3N1bWVzIHRoYXQgZmQncyBhcmUgYWxsb2NhdGVkIG9uIGEgbG93ZXN0CiAgICAgICogYXZhaWxhYmxlIGJhc2lzLiAqLwotICAgIHdoaWxlIChjbG9zZShzdGFydF9mZCkgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKyAgICBjbG9zZShzdGFydF9mZCk7CiAgICAgKytzdGFydF9mZDsKICNlbmRpZgotICAgIGlmIChzdGFydF9mZCA+PSBlbmRfZmQpCi0gICAgICAgIHJldHVybjsKIAogI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCiAgICAgaWYgKCFfaXNfZmRlc2Nmc19tb3VudGVkX29uX2Rldl9mZCgpKQpAQCAtMjkyLDcgKzM0Miw3IEBACiAgICAgICAgIHByb2NfZmRfZGlyID0gb3BlbmRpcihGRF9ESVIpOwogICAgIGlmICghcHJvY19mZF9kaXIpIHsKICAgICAgICAgLyogTm8gd2F5IHRvIGdldCBhIGxpc3Qgb2Ygb3BlbiBmZHMuICovCi0gICAgICAgIF9jbG9zZV9mZHNfYnlfYnJ1dGVfZm9yY2Uoc3RhcnRfZmQsIGVuZF9mZCwgcHlfZmRzX3RvX2tlZXApOworICAgICAgICBfY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKHN0YXJ0X2ZkLCBweV9mZHNfdG9fa2VlcCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RydWN0IGRpcmVudCAqZGlyX2VudHJ5OwogI2lmZGVmIEhBVkVfRElSRkQKQEAgLTMwNSwyMSArMzU1LDIxIEBACiAgICAgICAgICAgICBpbnQgZmQ7CiAgICAgICAgICAgICBpZiAoKGZkID0gX3Bvc19pbnRfZnJvbV9hc2NpaShkaXJfZW50cnktPmRfbmFtZSkpIDwgMCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsgIC8qIE5vdCBhIG51bWJlci4gKi8KLSAgICAgICAgICAgIGlmIChmZCAhPSBmZF91c2VkX2J5X29wZW5kaXIgJiYgZmQgPj0gc3RhcnRfZmQgJiYgZmQgPCBlbmRfZmQgJiYKKyAgICAgICAgICAgIGlmIChmZCAhPSBmZF91c2VkX2J5X29wZW5kaXIgJiYgZmQgPj0gc3RhcnRfZmQgJiYKICAgICAgICAgICAgICAgICAhX2lzX2ZkX2luX3NvcnRlZF9mZF9zZXF1ZW5jZShmZCwgcHlfZmRzX3RvX2tlZXApKSB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGNsb3NlKGZkKSA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworICAgICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVycm5vID0gMDsKICAgICAgICAgfQogICAgICAgICBpZiAoZXJybm8pIHsKICAgICAgICAgICAgIC8qIHJlYWRkaXIgZXJyb3IsIHJldmVydCBiZWhhdmlvci4gSGlnaGx5IFVubGlrZWx5LiAqLwotICAgICAgICAgICAgX2Nsb3NlX2Zkc19ieV9icnV0ZV9mb3JjZShzdGFydF9mZCwgZW5kX2ZkLCBweV9mZHNfdG9fa2VlcCk7CisgICAgICAgICAgICBfY2xvc2VfZmRzX2J5X2JydXRlX2ZvcmNlKHN0YXJ0X2ZkLCBweV9mZHNfdG9fa2VlcCk7CiAgICAgICAgIH0KICAgICAgICAgY2xvc2VkaXIocHJvY19mZF9kaXIpOwogICAgIH0KIH0KIAotI2RlZmluZSBfY2xvc2Vfb3Blbl9mZF9yYW5nZSBfY2xvc2Vfb3Blbl9mZF9yYW5nZV9tYXliZV91bnNhZmUKKyNkZWZpbmUgX2Nsb3NlX29wZW5fZmRzIF9jbG9zZV9vcGVuX2Zkc19tYXliZV91bnNhZmUKIAogI2VuZGlmICAvKiBlbHNlIE5PVCAoZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoSEFWRV9TWVNfU1lTQ0FMTF9IKSkgKi8KIApAQCAtMzU2LDE2ICs0MDYsMTYgQEAKICAgICAvKiBCdWZmZXIgbGFyZ2UgZW5vdWdoIHRvIGhvbGQgYSBoZXggaW50ZWdlci4gIFdlIGNhbid0IG1hbGxvYy4gKi8KICAgICBjaGFyIGhleF9lcnJub1tzaXplb2Yoc2F2ZWRfZXJybm8pKjIrMV07CiAKKyAgICBpZiAobWFrZV9pbmhlcml0YWJsZShweV9mZHNfdG9fa2VlcCwgZXJycGlwZV93cml0ZSkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCiAgICAgLyogQ2xvc2UgcGFyZW50J3MgcGlwZSBlbmRzLiAqLwotICAgIGlmIChwMmN3cml0ZSAhPSAtMSkgeworICAgIGlmIChwMmN3cml0ZSAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShwMmN3cml0ZSkpOwotICAgIH0KLSAgICBpZiAoYzJwcmVhZCAhPSAtMSkgeworICAgIGlmIChjMnByZWFkICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGMycHJlYWQpKTsKLSAgICB9Ci0gICAgaWYgKGVycnJlYWQgIT0gLTEpIHsKKyAgICBpZiAoZXJycmVhZCAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChjbG9zZShlcnJyZWFkKSk7Ci0gICAgfQogICAgIFBPU0lYX0NBTEwoY2xvc2UoZXJycGlwZV9yZWFkKSk7CiAKICAgICAvKiBXaGVuIGR1cGluZyBmZHMsIGlmIHRoZXJlIGFyaXNlcyBhIHNpdHVhdGlvbiB3aGVyZSBvbmUgb2YgdGhlIGZkcyBpcwpAQCAtMzc5LDM4ICs0MjksMzQgQEAKICAgICAgICBkdXAyKCkgcmVtb3ZlcyB0aGUgQ0xPRVhFQyBmbGFnIGJ1dCB3ZSBtdXN0IGRvIGl0IG91cnNlbHZlcyBpZiBkdXAyKCkKICAgICAgICB3b3VsZCBiZSBhIG5vLW9wIChpc3N1ZSAjMTA4MDYpLiAqLwogICAgIGlmIChwMmNyZWFkID09IDApIHsKLSAgICAgICAgaW50IG9sZCA9IGZjbnRsKHAyY3JlYWQsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwocDJjcmVhZCwgRl9TRVRGRCwgb2xkICYgfkZEX0NMT0VYRUMpOwotICAgIH0gZWxzZSBpZiAocDJjcmVhZCAhPSAtMSkgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShwMmNyZWFkLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmIChwMmNyZWFkICE9IC0xKQogICAgICAgICBQT1NJWF9DQUxMKGR1cDIocDJjcmVhZCwgMCkpOyAgLyogc3RkaW4gKi8KLSAgICB9CisKICAgICBpZiAoYzJwd3JpdGUgPT0gMSkgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoYzJwd3JpdGUsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwoYzJwd3JpdGUsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKGMycHdyaXRlICE9IC0xKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGMycHdyaXRlLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIGlmIChjMnB3cml0ZSAhPSAtMSkKICAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGMycHdyaXRlLCAxKSk7ICAvKiBzdGRvdXQgKi8KLSAgICB9CisKICAgICBpZiAoZXJyd3JpdGUgPT0gMikgewotICAgICAgICBpbnQgb2xkID0gZmNudGwoZXJyd3JpdGUsIEZfR0VURkQpOwotICAgICAgICBpZiAob2xkICE9IC0xKQotICAgICAgICAgICAgZmNudGwoZXJyd3JpdGUsIEZfU0VURkQsIG9sZCAmIH5GRF9DTE9FWEVDKTsKLSAgICB9IGVsc2UgaWYgKGVycndyaXRlICE9IC0xKSB7Ci0gICAgICAgIFBPU0lYX0NBTEwoZHVwMihlcnJ3cml0ZSwgMikpOyAgLyogc3RkZXJyICovCisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGVycndyaXRlLCAxLCBOVUxMKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KKyAgICBlbHNlIGlmIChlcnJ3cml0ZSAhPSAtMSkKKyAgICAgICAgUE9TSVhfQ0FMTChkdXAyKGVycndyaXRlLCAyKSk7ICAvKiBzdGRlcnIgKi8KIAogICAgIC8qIENsb3NlIHBpcGUgZmRzLiAgTWFrZSBzdXJlIHdlIGRvbid0IGNsb3NlIHRoZSBzYW1lIGZkIG1vcmUgdGhhbiAqLwogICAgIC8qIG9uY2UsIG9yIHN0YW5kYXJkIGZkcy4gKi8KLSAgICBpZiAocDJjcmVhZCA+IDIpIHsKKyAgICBpZiAocDJjcmVhZCA+IDIpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UocDJjcmVhZCkpOwotICAgIH0KLSAgICBpZiAoYzJwd3JpdGUgPiAyICYmIGMycHdyaXRlICE9IHAyY3JlYWQpIHsKKyAgICBpZiAoYzJwd3JpdGUgPiAyICYmIGMycHdyaXRlICE9IHAyY3JlYWQpCiAgICAgICAgIFBPU0lYX0NBTEwoY2xvc2UoYzJwd3JpdGUpKTsKLSAgICB9Ci0gICAgaWYgKGVycndyaXRlICE9IGMycHdyaXRlICYmIGVycndyaXRlICE9IHAyY3JlYWQgJiYgZXJyd3JpdGUgPiAyKSB7CisgICAgaWYgKGVycndyaXRlICE9IGMycHdyaXRlICYmIGVycndyaXRlICE9IHAyY3JlYWQgJiYgZXJyd3JpdGUgPiAyKQogICAgICAgICBQT1NJWF9DQUxMKGNsb3NlKGVycndyaXRlKSk7Ci0gICAgfQogCiAgICAgaWYgKGN3ZCkKICAgICAgICAgUE9TSVhfQ0FMTChjaGRpcihjd2QpKTsKQEAgLTQ0MiwxNCArNDg4LDggQEAKIAogICAgIC8qIGNsb3NlIEZEcyBhZnRlciBleGVjdXRpbmcgcHJlZXhlY19mbiwgd2hpY2ggbWlnaHQgb3BlbiBGRHMgKi8KICAgICBpZiAoY2xvc2VfZmRzKSB7Ci0gICAgICAgIGludCBsb2NhbF9tYXhfZmQgPSBtYXhfZmQ7Ci0jaWYgZGVmaW5lZChfX05ldEJTRF9fKQotICAgICAgICBsb2NhbF9tYXhfZmQgPSBmY250bCgwLCBGX01BWEZEKTsKLSAgICAgICAgaWYgKGxvY2FsX21heF9mZCA8IDApCi0gICAgICAgICAgICBsb2NhbF9tYXhfZmQgPSBtYXhfZmQ7Ci0jZW5kaWYKICAgICAgICAgLyogVE9ETyBIUC1VWCBjb3VsZCB1c2UgcHN0YXRfZ2V0cHJvYygpIGlmIGFueW9uZSBjYXJlcyBhYm91dCBpdC4gKi8KLSAgICAgICAgX2Nsb3NlX29wZW5fZmRfcmFuZ2UoMywgbG9jYWxfbWF4X2ZkLCBweV9mZHNfdG9fa2VlcCk7CisgICAgICAgIF9jbG9zZV9vcGVuX2ZkcygzLCBweV9mZHNfdG9fa2VlcCk7CiAgICAgfQogCiAgICAgLyogVGhpcyBsb29wIG1hdGNoZXMgdGhlIExpYi9vcy5weSBfZXhlY3ZwZSgpJ3MgUEFUSCBzZWFyY2ggd2hlbiAqLwpAQCAtNDkyLDcgKzUzMiw3IEBACiAgICAgICAgIC8qIFdlIGNhbid0IGNhbGwgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pLiAgSXQgaXMgbm90IGFzeW5jIHNpZ25hbCBzYWZlLgogICAgICAgICAgKiBUaGUgcGFyZW50IHByb2Nlc3Mgd2lsbCBsb29rIHRoZSBlcnJvciBtZXNzYWdlIHVwLiAqLwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHVudXNlZCA9IHdyaXRlKGVycnBpcGVfd3JpdGUsICJSdW50aW1lRXJyb3I6MDoiLCAxNSk7CisgICAgICAgIHVudXNlZCA9IHdyaXRlKGVycnBpcGVfd3JpdGUsICJTdWJwcm9jZXNzRXJyb3I6MDoiLCAxOCk7CiAgICAgICAgIHVudXNlZCA9IHdyaXRlKGVycnBpcGVfd3JpdGUsIGVycl9tc2csIHN0cmxlbihlcnJfbXNnKSk7CiAgICAgfQogICAgIGlmICh1bnVzZWQpIHJldHVybjsgIC8qIHNpbGx5PyB5ZXMhIGF2b2lkcyBnY2MgY29tcGlsZXIgd2FybmluZy4gKi8KQEAgLTUxNiw2ICs1NTYsNyBAQAogICAgIGludCBuZWVkX3RvX3JlZW5hYmxlX2djID0gMDsKICAgICBjaGFyICpjb25zdCAqZXhlY19hcnJheSwgKmNvbnN0ICphcmd2ID0gTlVMTCwgKmNvbnN0ICplbnZwID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGFyZ19udW07CisgICAgaW50IGltcG9ydF9sb2NrX2hlbGQgPSAwOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKAogICAgICAgICAgICAgYXJncywgIk9PcE9PT2lpaWlpaWlpaWlPOmZvcmtfZXhlYyIsCkBAIC01NDQsNyArNTg1LDcgQEAKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICAgICAgX1B5X0lERU5USUZJRVIoaXNlbmFibGVkKTsKICAgICAgICAgX1B5X0lERU5USUZJRVIoZGlzYWJsZSk7Ci0gICAgICAgIAorCiAgICAgICAgIGdjX21vZHVsZSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgiZ2MiKTsKICAgICAgICAgaWYgKGdjX21vZHVsZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC01NjgsMTAgKzYwOSw4IEBACiAgICAgfQogCiAgICAgZXhlY19hcnJheSA9IF9QeVNlcXVlbmNlX0J5dGVzVG9DaGFycEFycmF5KGV4ZWN1dGFibGVfbGlzdCk7Ci0gICAgaWYgKCFleGVjX2FycmF5KSB7Ci0gICAgICAgIFB5X1hERUNSRUYoZ2NfbW9kdWxlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghZXhlY19hcnJheSkKKyAgICAgICAgZ290byBjbGVhbnVwOwogCiAgICAgLyogQ29udmVydCBhcmdzIGFuZCBlbnYgaW50byBhcHByb3ByaWF0ZSBhcmd1bWVudHMgZm9yIGV4ZWMoKSAqLwogICAgIC8qIFRoZXNlIGNvbnZlcnNpb25zIGFyZSBkb25lIGluIHRoZSBwYXJlbnQgcHJvY2VzcyB0byBhdm9pZCBhbGxvY2F0aW5nCkBAIC02MTMsNiArNjUyLDcgQEAKICAgICAgICAgaWYgKCFwcmVleGVjX2ZuX2FyZ3NfdHVwbGUpCiAgICAgICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgICAgIF9QeUltcG9ydF9BY3F1aXJlTG9jaygpOworICAgICAgICBpbXBvcnRfbG9ja19oZWxkID0gMTsKICAgICB9CiAKICAgICBpZiAoY3dkX29iaiAhPSBQeV9Ob25lKSB7CkBAIC02NTksNyArNjk5LDkgQEAKICAgICAgICAgX1B5SW1wb3J0X1JlbGVhc2VMb2NrKCkgPCAwICYmICFQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGhvbGRpbmcgdGhlIGltcG9ydCBsb2NrIik7CisgICAgICAgIHBpZCA9IC0xOwogICAgIH0KKyAgICBpbXBvcnRfbG9ja19oZWxkID0gMDsKIAogICAgIC8qIFBhcmVudCBwcm9jZXNzICovCiAgICAgaWYgKGVudnApCkBAIC02NjksOSArNzExLDggQEAKICAgICBfUHlfRnJlZUNoYXJQQXJyYXkoZXhlY19hcnJheSk7CiAKICAgICAvKiBSZWVuYWJsZSBnYyBpbiB0aGUgcGFyZW50IHByb2Nlc3MgKG9yIGlmIGZvcmsgZmFpbGVkKS4gKi8KLSAgICBpZiAobmVlZF90b19yZWVuYWJsZV9nYyAmJiBfZW5hYmxlX2djKGdjX21vZHVsZSkpIHsKLSAgICAgICAgUHlfWERFQ1JFRihnY19tb2R1bGUpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoX2VuYWJsZV9nYyhuZWVkX3RvX3JlZW5hYmxlX2djLCBnY19tb2R1bGUpKSB7CisgICAgICAgIHBpZCA9IC0xOwogICAgIH0KICAgICBQeV9YREVDUkVGKHByZWV4ZWNfZm5fYXJnc190dXBsZSk7CiAgICAgUHlfWERFQ1JFRihnY19tb2R1bGUpOwpAQCAtNjgyLDE4ICs3MjMsMTggQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21QaWQocGlkKTsKIAogY2xlYW51cDoKKyAgICBpZiAoaW1wb3J0X2xvY2tfaGVsZCkKKyAgICAgICAgX1B5SW1wb3J0X1JlbGVhc2VMb2NrKCk7CiAgICAgaWYgKGVudnApCiAgICAgICAgIF9QeV9GcmVlQ2hhclBBcnJheShlbnZwKTsKICAgICBpZiAoYXJndikKICAgICAgICAgX1B5X0ZyZWVDaGFyUEFycmF5KGFyZ3YpOwotICAgIF9QeV9GcmVlQ2hhclBBcnJheShleGVjX2FycmF5KTsKKyAgICBpZiAoZXhlY19hcnJheSkKKyAgICAgICAgX1B5X0ZyZWVDaGFyUEFycmF5KGV4ZWNfYXJyYXkpOwogICAgIFB5X1hERUNSRUYoY29udmVydGVkX2FyZ3MpOwogICAgIFB5X1hERUNSRUYoZmFzdF9hcmdzKTsKICAgICBQeV9YREVDUkVGKHByZWV4ZWNfZm5fYXJnc190dXBsZSk7Ci0KLSAgICAvKiBSZWVuYWJsZSBnYyBpZiBpdCB3YXMgZGlzYWJsZWQuICovCi0gICAgaWYgKG5lZWRfdG9fcmVlbmFibGVfZ2MpCi0gICAgICAgIF9lbmFibGVfZ2MoZ2NfbW9kdWxlKTsKKyAgICBfZW5hYmxlX2djKG5lZWRfdG9fcmVlbmFibGVfZ2MsIGdjX21vZHVsZSk7CiAgICAgUHlfWERFQ1JFRihnY19tb2R1bGUpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtNzIxLDg4ICs3NjIsNiBAQAogUmFpc2VzOiBPbmx5IG9uIGFuIGVycm9yIGluIHRoZSBwYXJlbnQgcHJvY2Vzcy5cblwKICIpOwogCi1QeURvY19TVFJWQVIoc3VicHJvY2Vzc19jbG9leGVjX3BpcGVfZG9jLAotImNsb2V4ZWNfcGlwZSgpIC0+IChyZWFkX2VuZCwgd3JpdGVfZW5kKVxuXG5cCi1DcmVhdGUgYSBwaXBlIHdob3NlIGVuZHMgaGF2ZSB0aGUgY2xvZXhlYyBmbGFnIHNldDsgd3JpdGVfZW5kIHdpbGwgYmUgPj0gMy4iKTsKLQotc3RhdGljIFB5T2JqZWN0ICoKLXN1YnByb2Nlc3NfY2xvZXhlY19waXBlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQotewotICAgIGludCBmZHNbMl07Ci0gICAgaW50IHJlcywgc2F2ZWRfZXJybm87Ci0gICAgbG9uZyBvbGRmbGFnczsKLSNpZmRlZiBIQVZFX1BJUEUyCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IHBpcGUyKGZkcywgT19DTE9FWEVDKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgIT0gMCAmJiBlcnJubyA9PSBFTk9TWVMpCi0gICAgewotI2VuZGlmCi0gICAgICAgIC8qIFdlIGhvbGQgdGhlIEdJTCB3aGljaCBvZmZlcnMgc29tZSBwcm90ZWN0aW9uIGZyb20gb3RoZXIgY29kZSBjYWxsaW5nCi0gICAgICAgICAqIGZvcmsoKSBiZWZvcmUgdGhlIENMT0VYRUMgZmxhZ3MgaGF2ZSBiZWVuIHNldCBidXQgd2UgY2FuJ3QgZ3VhcmFudGVlCi0gICAgICAgICAqIGFueXRoaW5nIHdpdGhvdXQgcGlwZTIoKS4gKi8KLSAgICAgICAgcmVzID0gcGlwZShmZHMpOwotCi0gICAgICAgIGlmIChyZXMgPT0gMCkgewotICAgICAgICAgICAgb2xkZmxhZ3MgPSBmY250bChmZHNbMF0sIEZfR0VURkQsIDApOwotICAgICAgICAgICAgaWYgKG9sZGZsYWdzIDwgMCkgcmVzID0gb2xkZmxhZ3M7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcyA9PSAwKQotICAgICAgICAgICAgcmVzID0gZmNudGwoZmRzWzBdLCBGX1NFVEZELCBvbGRmbGFncyB8IEZEX0NMT0VYRUMpOwotCi0gICAgICAgIGlmIChyZXMgPT0gMCkgewotICAgICAgICAgICAgb2xkZmxhZ3MgPSBmY250bChmZHNbMV0sIEZfR0VURkQsIDApOwotICAgICAgICAgICAgaWYgKG9sZGZsYWdzIDwgMCkgcmVzID0gb2xkZmxhZ3M7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlcyA9PSAwKQotICAgICAgICAgICAgcmVzID0gZmNudGwoZmRzWzFdLCBGX1NFVEZELCBvbGRmbGFncyB8IEZEX0NMT0VYRUMpOwotI2lmZGVmIEhBVkVfUElQRTIKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAocmVzID09IDAgJiYgZmRzWzFdIDwgMykgewotICAgICAgICAvKiBXZSBhbHdheXMgd2FudCB0aGUgd3JpdGUgZW5kIG9mIHRoZSBwaXBlIHRvIGF2b2lkIGZkcyAwLCAxIGFuZCAyCi0gICAgICAgICAqIGFzIG91ciBjaGlsZCBtYXkgY2xhaW0gdGhvc2UgZm9yIHN0ZGlvIGNvbm5lY3Rpb25zLiAqLwotICAgICAgICBpbnQgd3JpdGVfZmQgPSBmZHNbMV07Ci0gICAgICAgIGludCBmZHNfdG9fY2xvc2VbM10gPSB7LTEsIC0xLCAtMX07Ci0gICAgICAgIGludCBmZHNfdG9fY2xvc2VfaWR4ID0gMDsKLSNpZmRlZiBGX0RVUEZEX0NMT0VYRUMKLSAgICAgICAgZmRzX3RvX2Nsb3NlW2Zkc190b19jbG9zZV9pZHgrK10gPSB3cml0ZV9mZDsKLSAgICAgICAgd3JpdGVfZmQgPSBmY250bCh3cml0ZV9mZCwgRl9EVVBGRF9DTE9FWEVDLCAzKTsKLSAgICAgICAgaWYgKHdyaXRlX2ZkIDwgMCkgIC8qIFdlIGRvbid0IHN1cHBvcnQgRl9EVVBGRF9DTE9FWEVDIC8gb3RoZXIgZXJyb3IgKi8KLSNlbmRpZgotICAgICAgICB7Ci0gICAgICAgICAgICAvKiBVc2UgZHVwIGEgZmV3IHRpbWVzIHVudGlsIHdlIGdldCBhIGRlc2lyYWJsZSBmZC4gKi8KLSAgICAgICAgICAgIGZvciAoOyBmZHNfdG9fY2xvc2VfaWR4IDwgMzsgKytmZHNfdG9fY2xvc2VfaWR4KSB7Ci0gICAgICAgICAgICAgICAgZmRzX3RvX2Nsb3NlW2Zkc190b19jbG9zZV9pZHhdID0gd3JpdGVfZmQ7Ci0gICAgICAgICAgICAgICAgd3JpdGVfZmQgPSBkdXAod3JpdGVfZmQpOwotICAgICAgICAgICAgICAgIGlmICh3cml0ZV9mZCA+PSAzKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAvKiBXZSBtYXkgZHVwIGEgZmV3IGV4dHJhIHRpbWVzIGlmIGl0IHJldHVybnMgYW4gZXJyb3IgYnV0Ci0gICAgICAgICAgICAgICAgICogdGhhdCBpcyBva2F5LiAgUmVwZWF0IGNhbGxzIHNob3VsZCByZXR1cm4gdGhlIHNhbWUgZXJyb3IuICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAod3JpdGVfZmQgPCAwKSByZXMgPSB3cml0ZV9mZDsKLSAgICAgICAgICAgIGlmIChyZXMgPT0gMCkgewotICAgICAgICAgICAgICAgIG9sZGZsYWdzID0gZmNudGwod3JpdGVfZmQsIEZfR0VURkQsIDApOwotICAgICAgICAgICAgICAgIGlmIChvbGRmbGFncyA8IDApIHJlcyA9IG9sZGZsYWdzOwotICAgICAgICAgICAgICAgIGlmIChyZXMgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmVzID0gZmNudGwod3JpdGVfZmQsIEZfU0VURkQsIG9sZGZsYWdzIHwgRkRfQ0xPRVhFQyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKLSAgICAgICAgLyogQ2xvc2UgZmRzIHdlIHRyaWVkIGZvciB0aGUgd3JpdGUgZW5kIHRoYXQgd2VyZSB0b28gbG93LiAqLwotICAgICAgICBmb3IgKGZkc190b19jbG9zZV9pZHg9MDsgZmRzX3RvX2Nsb3NlX2lkeCA8IDM7ICsrZmRzX3RvX2Nsb3NlX2lkeCkgewotICAgICAgICAgICAgaW50IHRlbXBfZmQgPSBmZHNfdG9fY2xvc2VbZmRzX3RvX2Nsb3NlX2lkeF07Ci0gICAgICAgICAgICB3aGlsZSAodGVtcF9mZCA+PSAwICYmIGNsb3NlKHRlbXBfZmQpIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7Ci0gICAgICAgIH0KLSAgICAgICAgZXJybm8gPSBzYXZlZF9lcnJubzsgIC8qIHJlcG9ydCBkdXAgb3IgZmNudGwgZXJyb3JzLCBub3QgY2xvc2UuICovCi0gICAgICAgIGZkc1sxXSA9IHdyaXRlX2ZkOwotICAgIH0gIC8qIGVuZCBpZiB3cml0ZSBmZCB3YXMgdG9vIHNtYWxsICovCi0KLSAgICBpZiAocmVzICE9IDApCi0gICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmZHNbMF0sIGZkc1sxXSk7Ci19Ci0KIC8qIG1vZHVsZSBsZXZlbCBjb2RlICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBQeURvY19TVFJWQVIobW9kdWxlX2RvYywKQEAgLTgxMSw3ICs3NzAsNiBAQAogCiBzdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKICAgICB7ImZvcmtfZXhlYyIsIHN1YnByb2Nlc3NfZm9ya19leGVjLCBNRVRIX1ZBUkFSR1MsIHN1YnByb2Nlc3NfZm9ya19leGVjX2RvY30sCi0gICAgeyJjbG9leGVjX3BpcGUiLCBzdWJwcm9jZXNzX2Nsb2V4ZWNfcGlwZSwgTUVUSF9OT0FSR1MsIHN1YnByb2Nlc3NfY2xvZXhlY19waXBlX2RvY30sCiAgICAge05VTEwsIE5VTEx9ICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtODI3LDExICs3ODUsNSBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fcG9zaXhzdWJwcm9jZXNzKHZvaWQpCiB7Ci0jaWZkZWYgX1NDX09QRU5fTUFYCi0gICAgbWF4X2ZkID0gc3lzY29uZihfU0NfT1BFTl9NQVgpOwotICAgIGlmIChtYXhfZmQgPT0gLTEpCi0jZW5kaWYKLSAgICAgICAgbWF4X2ZkID0gMjU2OyAgLyogTWF0Y2hlcyBMaWIvc3VicHJvY2Vzcy5weSAqLwotCiAgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3Bvc2l4c3VicHJvY2Vzc21vZHVsZSk7CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19yYW5kb21tb2R1bGUuYyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCmluZGV4IDIxYTJiMDkuLjQxNmUyNjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3JhbmRvbW1vZHVsZS5jCkBAIC0xNjgsOSArMTY4LDkgQEAKIC8qIGluaXRfa2V5IGlzIHRoZSBhcnJheSBmb3IgaW5pdGlhbGl6aW5nIGtleXMgKi8KIC8qIGtleV9sZW5ndGggaXMgaXRzIGxlbmd0aCAqLwogc3RhdGljIFB5T2JqZWN0ICoKLWluaXRfYnlfYXJyYXkoUmFuZG9tT2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBsb25nIGluaXRfa2V5W10sIHVuc2lnbmVkIGxvbmcga2V5X2xlbmd0aCkKK2luaXRfYnlfYXJyYXkoUmFuZG9tT2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBsb25nIGluaXRfa2V5W10sIHNpemVfdCBrZXlfbGVuZ3RoKQogewotICAgIHVuc2lnbmVkIGludCBpLCBqLCBrOyAgICAgICAvKiB3YXMgc2lnbmVkIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBSREggMTIvMTYvMjAwMiAqLworICAgIHNpemVfdCBpLCBqLCBrOyAgICAgICAvKiB3YXMgc2lnbmVkIGluIHRoZSBvcmlnaW5hbCBjb2RlLiBSREggMTIvMTYvMjAwMiAqLwogICAgIHVuc2lnbmVkIGxvbmcgKm10OwogCiAgICAgbXQgPSBzZWxmLT5zdGF0ZTsKQEAgLTE3OSw3ICsxNzksNyBAQAogICAgIGsgPSAoTj5rZXlfbGVuZ3RoID8gTiA6IGtleV9sZW5ndGgpOwogICAgIGZvciAoOyBrOyBrLS0pIHsKICAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTY2NDUyNVVMKSkKLSAgICAgICAgICAgICAgICAgKyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi8KKyAgICAgICAgICAgICAgICAgKyBpbml0X2tleVtqXSArICh1bnNpZ25lZCBsb25nKWo7IC8qIG5vbiBsaW5lYXIgKi8KICAgICAgICAgbXRbaV0gJj0gMHhmZmZmZmZmZlVMOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqLwogICAgICAgICBpKys7IGorKzsKICAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0KQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgIH0KICAgICBmb3IgKGs9Ti0xOyBrOyBrLS0pIHsKICAgICAgICAgbXRbaV0gPSAobXRbaV0gXiAoKG10W2ktMV0gXiAobXRbaS0xXSA+PiAzMCkpICogMTU2NjA4Mzk0MVVMKSkKLSAgICAgICAgICAgICAgICAgLSBpOyAvKiBub24gbGluZWFyICovCisgICAgICAgICAgICAgICAgIC0gKHVuc2lnbmVkIGxvbmcpaTsgLyogbm9uIGxpbmVhciAqLwogICAgICAgICBtdFtpXSAmPSAweGZmZmZmZmZmVUw7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovCiAgICAgICAgIGkrKzsKICAgICAgICAgaWYgKGk+PU4pIHsgbXRbMF0gPSBtdFtOLTFdOyBpPTE7IH0KQEAgLTIwNywxNCArMjA3LDExIEBACiByYW5kb21fc2VlZChSYW5kb21PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOyAgICAgICAgICAgIC8qIGd1aWx0eSB1bnRpbCBwcm92ZWQgaW5ub2NlbnQgKi8KLSAgICBQeU9iamVjdCAqbWFza2xvd2VyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdGhpcnR5dHdvID0gTlVMTDsKICAgICBQeU9iamVjdCAqbiA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyAqbmV3X2tleSwgKmtleSA9IE5VTEw7Ci0gICAgdW5zaWduZWQgbG9uZyBrZXltYXg7ICAgICAgICAgICAgICAgLyogIyBvZiBhbGxvY2F0ZWQgc2xvdHMgaW4ga2V5ICovCi0gICAgdW5zaWduZWQgbG9uZyBrZXl1c2VkOyAgICAgICAgICAgICAgLyogIyBvZiB1c2VkIHNsb3RzIGluIGtleSAqLwotICAgIGludCBlcnI7Ci0KKyAgICB1bnNpZ25lZCBsb25nICprZXkgPSBOVUxMOworICAgIHVuc2lnbmVkIGNoYXIgKmtleV9hc19ieXRlcyA9IE5VTEw7CisgICAgc2l6ZV90IGJpdHMsIGtleXVzZWQsIGk7CisgICAgaW50IHJlczsKICAgICBQeU9iamVjdCAqYXJnID0gTlVMTDsKIAogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInNlZWQiLCAwLCAxLCAmYXJnKSkKQEAgLTI0Myw2OSArMjQwLDQ2IEBACiAgICAgaWYgKG4gPT0gTlVMTCkKICAgICAgICAgZ290byBEb25lOwogCi0gICAgLyogTm93IHNwbGl0IG4gaW50byAzMi1iaXQgY2h1bmtzLCBmcm9tIHRoZSByaWdodC4gIEVhY2ggcGllY2UgaXMKLSAgICAgKiBzdG9yZWQgaW50byBrZXksIHdoaWNoIGhhcyBhIGNhcGFjaXR5IG9mIGtleW1heCBjaHVua3MsIG9mIHdoaWNoCi0gICAgICoga2V5dXNlZCBhcmUgZmlsbGVkLiAgQWxhcywgdGhlIHJlcGVhdGVkIHNoaWZ0aW5nIG1ha2VzIHRoaXMgYQotICAgICAqIHF1YWRyYXRpYy10aW1lIGFsZ29yaXRobTsgd2UnZCByZWFsbHkgbGlrZSB0byB1c2UKLSAgICAgKiBfUHlMb25nX0FzQnl0ZUFycmF5IGhlcmUsIGJ1dCB0aGVuIHdlJ2QgaGF2ZSB0byBicmVhayBpbnRvIHRoZQotICAgICAqIGxvbmcgcmVwcmVzZW50YXRpb24gdG8gZmlndXJlIG91dCBob3cgYmlnIGFuIGFycmF5IHdhcyBuZWVkZWQKLSAgICAgKiBpbiBhZHZhbmNlLgotICAgICAqLwotICAgIGtleW1heCA9IDg7ICAgICAgICAgLyogYXJiaXRyYXJ5OyBncm93cyBsYXRlciBpZiBuZWVkZWQgKi8KLSAgICBrZXl1c2VkID0gMDsKLSAgICBrZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX01hbGxvYyhrZXltYXggKiBzaXplb2YoKmtleSkpOwotICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAvKiBOb3cgc3BsaXQgbiBpbnRvIDMyLWJpdCBjaHVua3MsIGZyb20gdGhlIHJpZ2h0LiAqLworICAgIGJpdHMgPSBfUHlMb25nX051bUJpdHMobik7CisgICAgaWYgKGJpdHMgPT0gKHNpemVfdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICBnb3RvIERvbmU7CiAKLSAgICBtYXNrbG93ZXIgPSBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZygweGZmZmZmZmZmVSk7Ci0gICAgaWYgKG1hc2tsb3dlciA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgdGhpcnR5dHdvID0gUHlMb25nX0Zyb21Mb25nKDMyTCk7Ci0gICAgaWYgKHRoaXJ0eXR3byA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7Ci0gICAgd2hpbGUgKChlcnI9UHlPYmplY3RfSXNUcnVlKG4pKSkgewotICAgICAgICBQeU9iamVjdCAqbmV3bjsKLSAgICAgICAgUHlPYmplY3QgKnB5Y2h1bms7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY2h1bms7CisgICAgLyogRmlndXJlIG91dCBob3cgbWFueSAzMi1iaXQgY2h1bmtzIHRoaXMgZ2l2ZXMgdXMuICovCisgICAga2V5dXNlZCA9IGJpdHMgPT0gMCA/IDEgOiAoYml0cyAtIDEpIC8gMzIgKyAxOwogCi0gICAgICAgIGlmIChlcnIgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIHB5Y2h1bmsgPSBQeU51bWJlcl9BbmQobiwgbWFza2xvd2VyKTsKLSAgICAgICAgaWYgKHB5Y2h1bmsgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgY2h1bmsgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcocHljaHVuayk7Ci0gICAgICAgIFB5X0RFQ1JFRihweWNodW5rKTsKLSAgICAgICAgaWYgKGNodW5rID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIG5ld24gPSBQeU51bWJlcl9Sc2hpZnQobiwgdGhpcnR5dHdvKTsKLSAgICAgICAgaWYgKG5ld24gPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgUHlfREVDUkVGKG4pOwotICAgICAgICBuID0gbmV3bjsKLSAgICAgICAgaWYgKGtleXVzZWQgPj0ga2V5bWF4KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGJpZ2dlciA9IGtleW1heCA8PCAxOwotICAgICAgICAgICAgaWYgKChiaWdnZXIgPj4gMSkgIT0ga2V5bWF4IHx8Ci0gICAgICAgICAgICAgICAgYmlnZ2VyID4gUFlfU1NJWkVfVF9NQVggLyBzaXplb2YoKmtleSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIGdvdG8gRG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5ld19rZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX1JlYWxsb2Moa2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlnZ2VyICogc2l6ZW9mKCprZXkpKTsKLSAgICAgICAgICAgIGlmIChuZXdfa2V5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBEb25lOwotICAgICAgICAgICAga2V5ID0gbmV3X2tleTsKLSAgICAgICAgICAgIGtleW1heCA9IGJpZ2dlcjsKLSAgICAgICAgfQotICAgICAgICBhc3NlcnQoa2V5dXNlZCA8IGtleW1heCk7Ci0gICAgICAgIGtleVtrZXl1c2VkKytdID0gY2h1bms7CisgICAgLyogQ29udmVydCBzZWVkIHRvIGJ5dGUgc2VxdWVuY2UuICovCisgICAga2V5X2FzX2J5dGVzID0gKHVuc2lnbmVkIGNoYXIgKilQeU1lbV9NYWxsb2MoKHNpemVfdCk0ICoga2V5dXNlZCk7CisgICAgaWYgKGtleV9hc19ieXRlcyA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIGdvdG8gRG9uZTsKKyAgICB9CisgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleV9hc19ieXRlcywga2V5dXNlZCAqIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgLyogbGl0dGxlLWVuZGlhbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7IC8qIHVuc2lnbmVkICovCisgICAgaWYgKHJlcyA9PSAtMSkgeworICAgICAgICBQeU1lbV9GcmVlKGtleV9hc19ieXRlcyk7CisgICAgICAgIGdvdG8gRG9uZTsKICAgICB9CiAKLSAgICBpZiAoa2V5dXNlZCA9PSAwKQotICAgICAgICBrZXlba2V5dXNlZCsrXSA9IDBVTDsKKyAgICAvKiBGaWxsIGFycmF5IG9mIHVuc2lnbmVkIGxvbmdzIGZyb20gYnl0ZSBzZXF1ZW5jZS4gKi8KKyAgICBrZXkgPSAodW5zaWduZWQgbG9uZyAqKVB5TWVtX01hbGxvYyhzaXplb2YodW5zaWduZWQgbG9uZykgKiBrZXl1c2VkKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOworICAgICAgICBnb3RvIERvbmU7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBrZXl1c2VkOyBpKyspIHsKKyAgICAgICAga2V5W2ldID0KKyAgICAgICAgICAgICgodW5zaWduZWQgbG9uZylrZXlfYXNfYnl0ZXNbNCppICsgMF0gPDwgMCkgKworICAgICAgICAgICAgKCh1bnNpZ25lZCBsb25nKWtleV9hc19ieXRlc1s0KmkgKyAxXSA8PCA4KSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDJdIDw8IDE2KSArCisgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpa2V5X2FzX2J5dGVzWzQqaSArIDNdIDw8IDI0KTsKKyAgICB9CisgICAgUHlNZW1fRnJlZShrZXlfYXNfYnl0ZXMpOwogICAgIHJlc3VsdCA9IGluaXRfYnlfYXJyYXkoc2VsZiwga2V5LCBrZXl1c2VkKTsKIERvbmU6Ci0gICAgUHlfWERFQ1JFRihtYXNrbG93ZXIpOwotICAgIFB5X1hERUNSRUYodGhpcnR5dHdvKTsKICAgICBQeV9YREVDUkVGKG4pOwogICAgIFB5TWVtX0ZyZWUoa2V5KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzY2LDYgKzM0MCwxMCBAQAogICAgIGluZGV4ID0gUHlMb25nX0FzTG9uZyhQeVR1cGxlX0dFVF9JVEVNKHN0YXRlLCBpKSk7CiAgICAgaWYgKGluZGV4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBOKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiaW52YWxpZCBzdGF0ZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgc2VsZi0+aW5kZXggPSAoaW50KWluZGV4OwogCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwpAQCAtMzg5LDYgKzM2Nyw5IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGlmIChrIDw9IDMyKSAgLyogRmFzdCBwYXRoICovCisgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyhnZW5yYW5kX2ludDMyKHNlbGYpID4+ICgzMiAtIGspKTsKKwogICAgIGJ5dGVzID0gKChrIC0gMSkgLyAzMiArIDEpICogNDsKICAgICBieXRlYXJyYXkgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYyhieXRlcyk7CiAgICAgaWYgKGJ5dGVhcnJheSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY2FjaGUuYyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCmluZGV4IDM2OTMzNjMuLjM2ODlhNGUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jYWNoZS5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICovCiAKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKICNpbmNsdWRlICJjYWNoZS5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jIGIvTW9kdWxlcy9fc3FsaXRlL2Nvbm5lY3Rpb24uYwppbmRleCA4Y2YyZDZhLi5kMzkwMzI4IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvY29ubmVjdGlvbi5jCisrKyBiL01vZHVsZXMvX3NxbGl0ZS9jb25uZWN0aW9uLmMKQEAgLTI5LDcgKzI5LDYgQEAKICNpbmNsdWRlICJjdXJzb3IuaCIKICNpbmNsdWRlICJwcmVwYXJlX3Byb3RvY29sLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKIApAQCAtNDIsNiArNDEsOCBAQAogI2VuZGlmCiAjZW5kaWYKIAorX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKKwogc3RhdGljIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX3NldF9pc29sYXRpb25fbGV2ZWwocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGlzb2xhdGlvbl9sZXZlbCk7CiBzdGF0aWMgdm9pZCBfcHlzcWxpdGVfZHJvcF91bnVzZWRfY3Vyc29yX3JlZmVyZW5jZXMocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZik7CiAKQEAgLTYwLDcgKzYxLDExIEBACiAKIGludCBweXNxbGl0ZV9jb25uZWN0aW9uX2luaXQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLCAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsIE5VTEwsIE5VTEx9OworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsKKyAgICAgICAgImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsCisgICAgICAgICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgInVyaSIsCisgICAgICAgIE5VTEwKKyAgICB9OwogCiAgICAgY2hhciogZGF0YWJhc2U7CiAgICAgaW50IGRldGVjdF90eXBlcyA9IDA7CkBAIC02OCwxMSArNzMsMTQgQEAKICAgICBQeU9iamVjdCogZmFjdG9yeSA9IE5VTEw7CiAgICAgaW50IGNoZWNrX3NhbWVfdGhyZWFkID0gMTsKICAgICBpbnQgY2FjaGVkX3N0YXRlbWVudHMgPSAxMDA7CisgICAgaW50IHVyaSA9IDA7CiAgICAgZG91YmxlIHRpbWVvdXQgPSA1LjA7CiAgICAgaW50IHJjOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2kiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLCAmZmFjdG9yeSwgJmNhY2hlZF9zdGF0ZW1lbnRzKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJzfGRpT2lPaXAiLCBrd2xpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFiYXNlLCAmdGltZW91dCwgJmRldGVjdF90eXBlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXNvbGF0aW9uX2xldmVsLCAmY2hlY2tfc2FtZV90aHJlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cywgJnVyaSkpCiAgICAgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtOTEsOCArOTksMTkgQEAKICAgICBQeV9JTkNSRUYoJlB5VW5pY29kZV9UeXBlKTsKICAgICBzZWxmLT50ZXh0X2ZhY3RvcnkgPSAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZTsKIAorI2lmZGVmIFNRTElURV9PUEVOX1VSSQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByYyA9IHNxbGl0ZTNfb3Blbl92MihkYXRhYmFzZSwgJnNlbGYtPmRiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFNRTElURV9PUEVOX1JFQURXUklURSB8IFNRTElURV9PUEVOX0NSRUFURSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgKHVyaSA/IFNRTElURV9PUEVOX1VSSSA6IDApLCBOVUxMKTsKKyNlbHNlCisgICAgaWYgKHVyaSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcocHlzcWxpdGVfTm90U3VwcG9ydGVkRXJyb3IsICJVUklzIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcmMgPSBzcWxpdGUzX29wZW4oZGF0YWJhc2UsICZzZWxmLT5kYik7CisjZW5kaWYKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJjICE9IFNRTElURV9PSykgewpAQCAtNTAzLDEzICs1MjIsMjAgQEAKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgc3FsaXRlM19yZXN1bHRfdGV4dChjb250ZXh0LCBzdHIsIC0xLCBTUUxJVEVfVFJBTlNJRU5UKTsKICAgICB9IGVsc2UgaWYgKFB5T2JqZWN0X0NoZWNrQnVmZmVyKHB5X3ZhbCkpIHsKLSAgICAgICAgY29uc3QgY2hhciogYnVmZmVyOwotICAgICAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKLSAgICAgICAgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihweV92YWwsICZidWZmZXIsICZidWZsZW4pICE9IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKKyAgICAgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIocHlfdmFsLCAmdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBzcWxpdGUzX3Jlc3VsdF9ibG9iKGNvbnRleHQsIGJ1ZmZlciwgYnVmbGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKKyAgICAgICAgaWYgKHZpZXcubGVuID4gSU5UX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJMT0IgbG9uZ2VyIHRoYW4gSU5UX01BWCBieXRlcyIpOworICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgc3FsaXRlM19yZXN1bHRfYmxvYihjb250ZXh0LCB2aWV3LmJ1ZiwgKGludCl2aWV3LmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CkBAIC02ODIsNiArNzA4LDggQEAKICAgICBQeU9iamVjdCoqIGFnZ3JlZ2F0ZV9pbnN0YW5jZTsKICAgICBfUHlfSURFTlRJRklFUihmaW5hbGl6ZSk7CiAgICAgaW50IG9rOworICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2YWx1ZSwgKnRiOworICAgIGludCByZXN0b3JlOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBQeUdJTFN0YXRlX1NUQVRFIHRocmVhZHN0YXRlOwpAQCAtNjk3LDcgKzcyNSwxMiBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAorICAgIC8qIEtlZXAgdGhlIGV4Y2VwdGlvbiAoaWYgYW55KSBvZiB0aGUgbGFzdCBjYWxsIHRvIHN0ZXAoKSAqLworICAgIFB5RXJyX0ZldGNoKCZleGNlcHRpb24sICZ2YWx1ZSwgJnRiKTsKKyAgICByZXN0b3JlID0gMTsKKwogICAgIGZ1bmN0aW9uX3Jlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKmFnZ3JlZ2F0ZV9pbnN0YW5jZSwgJlB5SWRfZmluYWxpemUsICIiKTsKKwogICAgIFB5X0RFQ1JFRigqYWdncmVnYXRlX2luc3RhbmNlKTsKIAogICAgIG9rID0gMDsKQEAgLTcxMiw2ICs3NDUsMTcgQEAKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIH0KICAgICAgICAgX3NxbGl0ZTNfcmVzdWx0X2Vycm9yKGNvbnRleHQsICJ1c2VyLWRlZmluZWQgYWdncmVnYXRlJ3MgJ2ZpbmFsaXplJyBtZXRob2QgcmFpc2VkIGVycm9yIiwgLTEpOworI2lmIFNRTElURV9WRVJTSU9OX05VTUJFUiA8IDMwMDMwMDMKKyAgICAgICAgLyogd2l0aCBvbGQgU1FMaXRlIHZlcnNpb25zLCBfc3FsaXRlM19yZXN1bHRfZXJyb3IoKSBzZXRzIGEgbmV3IFB5dGhvbgorICAgICAgICAgICBleGNlcHRpb24sIHNvIGRvbid0IHJlc3RvcmUgdGhlIHByZXZpb3VzIGV4Y2VwdGlvbiAqLworICAgICAgICByZXN0b3JlID0gMDsKKyNlbmRpZgorICAgIH0KKworICAgIGlmIChyZXN0b3JlKSB7CisgICAgICAgIC8qIFJlc3RvcmUgdGhlIGV4Y2VwdGlvbiAoaWYgYW55KSBvZiB0aGUgbGFzdCBjYWxsIHRvIHN0ZXAoKSwKKyAgICAgICAgICAgYnV0IGNsZWFyIGFsc28gdGhlIGN1cnJlbnQgZXhjZXB0aW9uIGlmIGZpbmFsaXplKCkgZmFpbGVkICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOwogICAgIH0KIAogZXJyb3I6CkBAIC04NjIsMjIgKzkwNiwyOSBAQAogCiAgICAgZ2lsc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCisKICAgICByZXQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb24oKFB5T2JqZWN0Kil1c2VyX2FyZywgImlzc3NzIiwgYWN0aW9uLCBhcmcxLCBhcmcyLCBkYm5hbWUsIGFjY2Vzc19hdHRlbXB0X3NvdXJjZSk7CiAKLSAgICBpZiAoIXJldCkgewotICAgICAgICBpZiAoX2VuYWJsZV9jYWxsYmFja190cmFjZWJhY2tzKSB7CisgICAgaWYgKHJldCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChfZW5hYmxlX2NhbGxiYWNrX3RyYWNlYmFja3MpCiAgICAgICAgICAgICBQeUVycl9QcmludCgpOwotICAgICAgICB9IGVsc2UgeworICAgICAgICBlbHNlCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICB9CiAKICAgICAgICAgcmMgPSBTUUxJVEVfREVOWTsKLSAgICB9IGVsc2UgeworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhyZXQpKSB7CiAgICAgICAgICAgICByYyA9IF9QeUxvbmdfQXNJbnQocmV0KTsKLSAgICAgICAgICAgIGlmIChyYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgaWYgKHJjID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoX2VuYWJsZV9jYWxsYmFja190cmFjZWJhY2tzKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9QcmludCgpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICByYyA9IFNRTElURV9ERU5ZOwotICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmMgPSBTUUxJVEVfREVOWTsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYocmV0KTsKQEAgLTExOTAsOSArMTI0MSw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyIsICZzcWwpKSB7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiwgJnNxbCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KIAogICAgIF9weXNxbGl0ZV9kcm9wX3VudXNlZF9zdGF0ZW1lbnRfcmVmZXJlbmNlcyhzZWxmKTsKIApAQCAtMTIwOCw0MyArMTI1OCw0MCBAQAogICAgIHN0YXRlbWVudC0+aW5fd2Vha3JlZmxpc3QgPSBOVUxMOwogCiAgICAgcmMgPSBweXNxbGl0ZV9zdGF0ZW1lbnRfY3JlYXRlKHN0YXRlbWVudCwgc2VsZiwgc3FsKTsKLQogICAgIGlmIChyYyAhPSBTUUxJVEVfT0spIHsKICAgICAgICAgaWYgKHJjID09IFBZU1FMSVRFX1RPT19NVUNIX1NRTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1dhcm5pbmcsICJZb3UgY2FuIG9ubHkgZXhlY3V0ZSBvbmUgc3RhdGVtZW50IGF0IGEgdGltZS4iKTsKICAgICAgICAgfSBlbHNlIGlmIChyYyA9PSBQWVNRTElURV9TUUxfV1JPTkdfVFlQRSkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1dhcm5pbmcsICJTUUwgaXMgb2Ygd3JvbmcgdHlwZS4gTXVzdCBiZSBzdHJpbmcgb3IgdW5pY29kZS4iKTsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKHB5c3FsaXRlX1dhcm5pbmcsICJTUUwgaXMgb2Ygd3JvbmcgdHlwZS4gTXVzdCBiZSBzdHJpbmcuIik7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAodm9pZClweXNxbGl0ZV9zdGF0ZW1lbnRfcmVzZXQoc3RhdGVtZW50KTsKICAgICAgICAgICAgIF9weXNxbGl0ZV9zZXRlcnJvcihzZWxmLT5kYiwgTlVMTCk7CiAgICAgICAgIH0KLQotICAgICAgICBQeV9DTEVBUihzdGF0ZW1lbnQpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdlYWtyZWYgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCopc3RhdGVtZW50LCBOVUxMKTsKLSAgICAgICAgaWYgKCF3ZWFrcmVmKSB7Ci0gICAgICAgICAgICBQeV9DTEVBUihzdGF0ZW1lbnQpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPnN0YXRlbWVudHMsIHdlYWtyZWYpICE9IDApIHsKLSAgICAgICAgICAgIFB5X0NMRUFSKHdlYWtyZWYpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQotCi0gICAgICAgIFB5X0RFQ1JFRih3ZWFrcmVmKTsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKLWVycm9yOgorICAgIHdlYWtyZWYgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCopc3RhdGVtZW50LCBOVUxMKTsKKyAgICBpZiAod2Vha3JlZiA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlbGYtPnN0YXRlbWVudHMsIHdlYWtyZWYpICE9IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHdlYWtyZWYpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBQeV9ERUNSRUYod2Vha3JlZik7CisKICAgICByZXR1cm4gKFB5T2JqZWN0KilzdGF0ZW1lbnQ7CisKK2Vycm9yOgorICAgIFB5X0RFQ1JFRihzdGF0ZW1lbnQpOworICAgIHJldHVybiBOVUxMOwogfQogCi1QeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9leGVjdXRlKHB5c3FsaXRlX0Nvbm5lY3Rpb24qIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQorUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fZXhlY3V0ZShweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICBQeU9iamVjdCogY3Vyc29yID0gMDsKICAgICBQeU9iamVjdCogcmVzdWx0ID0gMDsKICAgICBQeU9iamVjdCogbWV0aG9kID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihjdXJzb3IpOwogCiAgICAgY3Vyc29yID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKXNlbGYsICZQeUlkX2N1cnNvciwgIiIpOwogICAgIGlmICghY3Vyc29yKSB7CkBAIC0xMjY5LDEyICsxMzE2LDExIEBACiAgICAgcmV0dXJuIGN1cnNvcjsKIH0KIAotUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fZXhlY3V0ZW1hbnkocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrd2FyZ3MpCitQeU9iamVjdCogcHlzcWxpdGVfY29ubmVjdGlvbl9leGVjdXRlbWFueShweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncykKIHsKICAgICBQeU9iamVjdCogY3Vyc29yID0gMDsKICAgICBQeU9iamVjdCogcmVzdWx0ID0gMDsKICAgICBQeU9iamVjdCogbWV0aG9kID0gMDsKLSAgICBfUHlfSURFTlRJRklFUihjdXJzb3IpOwogCiAgICAgY3Vyc29yID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZCgoUHlPYmplY3QqKXNlbGYsICZQeUlkX2N1cnNvciwgIiIpOwogICAgIGlmICghY3Vyc29yKSB7CkBAIC0xMjk5LDEyICsxMzQ1LDExIEBACiAgICAgcmV0dXJuIGN1cnNvcjsKIH0KIAotUHlPYmplY3QqIHB5c3FsaXRlX2Nvbm5lY3Rpb25fZXhlY3V0ZXNjcmlwdChweXNxbGl0ZV9Db25uZWN0aW9uKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKK1B5T2JqZWN0KiBweXNxbGl0ZV9jb25uZWN0aW9uX2V4ZWN1dGVzY3JpcHQocHlzcWxpdGVfQ29ubmVjdGlvbiogc2VsZiwgUHlPYmplY3QqIGFyZ3MpCiB7CiAgICAgUHlPYmplY3QqIGN1cnNvciA9IDA7CiAgICAgUHlPYmplY3QqIHJlc3VsdCA9IDA7CiAgICAgUHlPYmplY3QqIG1ldGhvZCA9IDA7Ci0gICAgX1B5X0lERU5USUZJRVIoY3Vyc29yKTsKIAogICAgIGN1cnNvciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoKFB5T2JqZWN0KilzZWxmLCAmUHlJZF9jdXJzb3IsICIiKTsKICAgICBpZiAoIWN1cnNvcikgewpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jIGIvTW9kdWxlcy9fc3FsaXRlL2N1cnNvci5jCmluZGV4IDA5YzEzZDQuLmRiOTZiMDIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS9jdXJzb3IuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvY3Vyc29yLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlICJjdXJzb3IuaCIKICNpbmNsdWRlICJtb2R1bGUuaCIKICNpbmNsdWRlICJ1dGlsLmgiCi0jaW5jbHVkZSAic3FsaXRlY29tcGF0LmgiCiAKIFB5T2JqZWN0KiBweXNxbGl0ZV9jdXJzb3JfaXRlcm5leHQocHlzcWxpdGVfQ3Vyc29yKiBzZWxmKTsKIApAQCAtMjkwLDkgKzI4OSw4IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIHJvdyA9IFB5VHVwbGVfTmV3KG51bWNvbHMpOwotICAgIGlmICghcm93KSB7CisgICAgaWYgKCFyb3cpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KIAogICAgIGZvciAoaSA9IDA7IGkgPCBudW1jb2xzOyBpKyspIHsKICAgICAgICAgaWYgKHNlbGYtPmNvbm5lY3Rpb24tPmRldGVjdF90eXBlcykgewpAQCAtMzEyLDE0ICszMTAsMTIgQEAKICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBQeV9Ob25lOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpdGVtID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2YWxfc3RyLCBuYnl0ZXMpOwotICAgICAgICAgICAgICAgIGlmICghaXRlbSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpdGVtKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihjb252ZXJ0ZXIsICJPIiwgaXRlbSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwotICAgICAgICAgICAgICAgIGlmICghY29udmVydGVkKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjb252ZXJ0ZWQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTMzOCw2ICszMzQsMTEgQEAKICAgICAgICAgICAgICAgICBpZiAoc2VsZi0+Y29ubmVjdGlvbi0+dGV4dF9mYWN0b3J5ID09IChQeU9iamVjdCopJlB5VW5pY29kZV9UeXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRlZCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSh2YWxfc3RyLCBuYnl0ZXMpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbnZlcnRlZCkgeworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbiBkZWJ1ZyBtb2RlLCB0eXBlX2NhbGwoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCB3aGVuIGl0IGlzIGNhbGxlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgY29sbmFtZSA9IHNxbGl0ZTNfY29sdW1uX25hbWUoc2VsZi0+c3RhdGVtZW50LT5zdCwgaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbG5hbWUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xuYW1lID0gIjx1bmtub3duIGNvbHVtbiBuYW1lPiI7CkBAIC0zNzAsOSArMzcxLDggQEAKICAgICAgICAgICAgICAgICBuYnl0ZXMgPSBzcWxpdGUzX2NvbHVtbl9ieXRlcyhzZWxmLT5zdGF0ZW1lbnQtPnN0LCBpKTsKICAgICAgICAgICAgICAgICBidWZmZXIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKAogICAgICAgICAgICAgICAgICAgICBzcWxpdGUzX2NvbHVtbl9ibG9iKHNlbGYtPnN0YXRlbWVudC0+c3QsIGkpLCBuYnl0ZXMpOwotICAgICAgICAgICAgICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgaWYgKCFidWZmZXIpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQgPSBidWZmZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM4NSwxMiArMzg1LDE0IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICBQeV9ERUNSRUYocm93KTsKLSAgICAgICAgcm93ID0gTlVMTDsKLSAgICB9CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICByZXR1cm4gcm93OworCitlcnJvcjoKKyAgICBQeV9ERUNSRUYocm93KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogLyoKQEAgLTYwOCw2ICs2MTAsMTAgQEAKICAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgICAgIC8qIEFjdHVhbGx5IGV4ZWN1dGUgdGhlIFNRTCBzdGF0ZW1lbnQuICovCiAgICAgICAgICAgICByYyA9IHB5c3FsaXRlX3N0ZXAoc2VsZi0+c3RhdGVtZW50LT5zdCwgc2VsZi0+Y29ubmVjdGlvbik7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzZWxmLT5zdGF0ZW1lbnQpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAocmMgPT0gU1FMSVRFX0RPTkUgfHwgIHJjID09IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgICAgICAvKiBJZiBpdCB3b3JrZWQsIGxldCdzIGdldCBvdXQgb2YgdGhlIGxvb3AgKi8KICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTY4MSw2ICs2ODcsOCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBzZWxmLT5uZXh0X3JvdyA9IF9weXNxbGl0ZV9mZXRjaF9vbmVfcm93KHNlbGYpOworICAgICAgICAgICAgaWYgKHNlbGYtPm5leHRfcm93ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfSBlbHNlIGlmIChyYyA9PSBTUUxJVEVfRE9ORSAmJiAhbXVsdGlwbGUpIHsKICAgICAgICAgICAgIHB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzZWxmLT5zdGF0ZW1lbnQpOwogICAgICAgICAgICAgUHlfQ0xFQVIoc2VsZi0+c3RhdGVtZW50KTsKQEAgLTgwMyw3ICs4MTEsMTAgQEAKICAgICAgICAgcmMgPSBTUUxJVEVfUk9XOwogICAgICAgICB3aGlsZSAocmMgPT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgcmMgPSBweXNxbGl0ZV9zdGVwKHN0YXRlbWVudCwgc2VsZi0+Y29ubmVjdGlvbik7Ci0gICAgICAgICAgICAvKiBUT0RPOiB3ZSBwcm9iYWJseSBuZWVkIG1vcmUgZXJyb3IgaGFuZGxpbmcgaGVyZSAqLworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICAodm9pZClzcWxpdGUzX2ZpbmFsaXplKHN0YXRlbWVudCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogCiAgICAgICAgIGlmIChyYyAhPSBTUUxJVEVfRE9ORSkgewpAQCAtODY0LDEwICs4NzUsMTUgQEAKICAgICB9CiAKICAgICBuZXh0X3Jvd190dXBsZSA9IHNlbGYtPm5leHRfcm93OworICAgIGFzc2VydChuZXh0X3Jvd190dXBsZSAhPSBOVUxMKTsKICAgICBzZWxmLT5uZXh0X3JvdyA9IE5VTEw7CiAKICAgICBpZiAoc2VsZi0+cm93X2ZhY3RvcnkgIT0gUHlfTm9uZSkgewogICAgICAgICBuZXh0X3JvdyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihzZWxmLT5yb3dfZmFjdG9yeSwgIk9PIiwgc2VsZiwgbmV4dF9yb3dfdHVwbGUpOworICAgICAgICBpZiAobmV4dF9yb3cgPT0gTlVMTCkgeworICAgICAgICAgICAgc2VsZi0+bmV4dF9yb3cgPSBuZXh0X3Jvd190dXBsZTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIFB5X0RFQ1JFRihuZXh0X3Jvd190dXBsZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbmV4dF9yb3cgPSBuZXh0X3Jvd190dXBsZTsKQEAgLTg3NSw2ICs4OTEsMTEgQEAKIAogICAgIGlmIChzZWxmLT5zdGF0ZW1lbnQpIHsKICAgICAgICAgcmMgPSBweXNxbGl0ZV9zdGVwKHNlbGYtPnN0YXRlbWVudC0+c3QsIHNlbGYtPmNvbm5lY3Rpb24pOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgKHZvaWQpcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHNlbGYtPnN0YXRlbWVudCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobmV4dF9yb3cpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgaWYgKHJjICE9IFNRTElURV9ET05FICYmIHJjICE9IFNRTElURV9ST1cpIHsKICAgICAgICAgICAgICh2b2lkKXB5c3FsaXRlX3N0YXRlbWVudF9yZXNldChzZWxmLT5zdGF0ZW1lbnQpOwogICAgICAgICAgICAgUHlfREVDUkVGKG5leHRfcm93KTsKQEAgLTg4NCw2ICs5MDUsMTAgQEAKIAogICAgICAgICBpZiAocmMgPT0gU1FMSVRFX1JPVykgewogICAgICAgICAgICAgc2VsZi0+bmV4dF9yb3cgPSBfcHlzcWxpdGVfZmV0Y2hfb25lX3JvdyhzZWxmKTsKKyAgICAgICAgICAgIGlmIChzZWxmLT5uZXh0X3JvdyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKHZvaWQpcHlzcWxpdGVfc3RhdGVtZW50X3Jlc2V0KHNlbGYtPnN0YXRlbWVudCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYyBiL01vZHVsZXMvX3NxbGl0ZS9tb2R1bGUuYwppbmRleCBiZWE2ZDZhLi43YTdlODYwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL21vZHVsZS5jCkBAIC01MCwxOSArNTAsMjYgQEAKICAgICAgKiBDLWxldmVsLCBzbyB0aGlzIGNvZGUgaXMgcmVkdW5kYW50IHdpdGggdGhlIG9uZSBpbiBjb25uZWN0aW9uX2luaXQgaW4KICAgICAgKiBjb25uZWN0aW9uLmMgYW5kIG11c3QgYWx3YXlzIGJlIGNvcGllZCBmcm9tIHRoZXJlIC4uLiAqLwogCi0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhYmFzZSIsICJ0aW1lb3V0IiwgImRldGVjdF90eXBlcyIsICJpc29sYXRpb25fbGV2ZWwiLCAiY2hlY2tfc2FtZV90aHJlYWQiLCAiZmFjdG9yeSIsICJjYWNoZWRfc3RhdGVtZW50cyIsIE5VTEwsIE5VTEx9OworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsKKyAgICAgICAgImRhdGFiYXNlIiwgInRpbWVvdXQiLCAiZGV0ZWN0X3R5cGVzIiwgImlzb2xhdGlvbl9sZXZlbCIsCisgICAgICAgICJjaGVja19zYW1lX3RocmVhZCIsICJmYWN0b3J5IiwgImNhY2hlZF9zdGF0ZW1lbnRzIiwgInVyaSIsCisgICAgICAgIE5VTEwKKyAgICB9OwogICAgIGNoYXIqIGRhdGFiYXNlOwogICAgIGludCBkZXRlY3RfdHlwZXMgPSAwOwogICAgIFB5T2JqZWN0KiBpc29sYXRpb25fbGV2ZWw7CiAgICAgUHlPYmplY3QqIGZhY3RvcnkgPSBOVUxMOwogICAgIGludCBjaGVja19zYW1lX3RocmVhZCA9IDE7CiAgICAgaW50IGNhY2hlZF9zdGF0ZW1lbnRzOworICAgIGludCB1cmkgPSAwOwogICAgIGRvdWJsZSB0aW1lb3V0ID0gNS4wOwogCiAgICAgUHlPYmplY3QqIHJlc3VsdDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInN8ZGlPaU9pIiwga3dsaXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhYmFzZSwgJnRpbWVvdXQsICZkZXRlY3RfdHlwZXMsICZpc29sYXRpb25fbGV2ZWwsICZjaGVja19zYW1lX3RocmVhZCwgJmZhY3RvcnksICZjYWNoZWRfc3RhdGVtZW50cykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAic3xkaU9pT2lwIiwga3dsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkYXRhYmFzZSwgJnRpbWVvdXQsICZkZXRlY3RfdHlwZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlzb2xhdGlvbl9sZXZlbCwgJmNoZWNrX3NhbWVfdGhyZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmYWN0b3J5LCAmY2FjaGVkX3N0YXRlbWVudHMsICZ1cmkpKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNzcsNyArODQsOCBAQAogfQogCiBQeURvY19TVFJWQVIobW9kdWxlX2Nvbm5lY3RfZG9jLAotImNvbm5lY3QoZGF0YWJhc2VbLCB0aW1lb3V0LCBpc29sYXRpb25fbGV2ZWwsIGRldGVjdF90eXBlcywgZmFjdG9yeV0pXG5cCisiY29ubmVjdChkYXRhYmFzZVssIHRpbWVvdXQsIGRldGVjdF90eXBlcywgaXNvbGF0aW9uX2xldmVsLFxuXAorICAgICAgICBjaGVja19zYW1lX3RocmVhZCwgZmFjdG9yeSwgY2FjaGVkX3N0YXRlbWVudHMsIHVyaV0pXG5cCiBcblwKIE9wZW5zIGEgY29ubmVjdGlvbiB0byB0aGUgU1FMaXRlIGRhdGFiYXNlIGZpbGUgKmRhdGFiYXNlKi4gWW91IGNhbiB1c2VcblwKIFwiOm1lbW9yeTpcIiB0byBvcGVuIGEgZGF0YWJhc2UgY29ubmVjdGlvbiB0byBhIGRhdGFiYXNlIHRoYXQgcmVzaWRlcyBpblxuXApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYyBiL01vZHVsZXMvX3NxbGl0ZS9wcmVwYXJlX3Byb3RvY29sLmMKaW5kZXggZmM2ODg3NC4uZjJjODVmOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3FsaXRlL3ByZXBhcmVfcHJvdG9jb2wuYworKysgYi9Nb2R1bGVzL19zcWxpdGUvcHJlcGFyZV9wcm90b2NvbC5jCkBAIC0yMSw3ICsyMSw2IEBACiAgKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgogICovCiAKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKICNpbmNsdWRlICJwcmVwYXJlX3Byb3RvY29sLmgiCiAKIGludCBweXNxbGl0ZV9wcmVwYXJlX3Byb3RvY29sX2luaXQocHlzcWxpdGVfUHJlcGFyZVByb3RvY29sKiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3YXJncykKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9yb3cuYyBiL01vZHVsZXMvX3NxbGl0ZS9yb3cuYwppbmRleCBiNTA2NThjLi5lZTczNDQ2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvcm93LmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3Jvdy5jCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRlICJyb3cuaCIKICNpbmNsdWRlICJjdXJzb3IuaCIKLSNpbmNsdWRlICJzcWxpdGVjb21wYXQuaCIKIAogdm9pZCBweXNxbGl0ZV9yb3dfZGVhbGxvYyhweXNxbGl0ZV9Sb3cqIHNlbGYpCiB7CkBAIC0zMyw0MiArMzIsNTUgQEAKICAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKChQeU9iamVjdCopc2VsZik7CiB9CiAKLWludCBweXNxbGl0ZV9yb3dfaW5pdChweXNxbGl0ZV9Sb3cqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3dhcmdzKQorc3RhdGljIFB5T2JqZWN0ICoKK3B5c3FsaXRlX3Jvd19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKKyAgICBweXNxbGl0ZV9Sb3cgKnNlbGY7CiAgICAgUHlPYmplY3QqIGRhdGE7CiAgICAgcHlzcWxpdGVfQ3Vyc29yKiBjdXJzb3I7CiAKLSAgICBzZWxmLT5kYXRhID0gMDsKLSAgICBzZWxmLT5kZXNjcmlwdGlvbiA9IDA7CisgICAgYXNzZXJ0KHR5cGUgIT0gTlVMTCAmJiB0eXBlLT50cF9hbGxvYyAhPSBOVUxMKTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT08iLCAmY3Vyc29yLCAmZGF0YSkpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KKyAgICBpZiAoIV9QeUFyZ19Ob0tleXdvcmRzKCJSb3coKSIsIGt3YXJncykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT08iLCAmY3Vyc29yLCAmZGF0YSkpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKCFQeU9iamVjdF9Jc0luc3RhbmNlKChQeU9iamVjdCopY3Vyc29yLCAoUHlPYmplY3QqKSZweXNxbGl0ZV9DdXJzb3JUeXBlKSkgeworICAgIGlmICghUHlPYmplY3RfVHlwZUNoZWNrKChQeU9iamVjdCopY3Vyc29yLCAmcHlzcWxpdGVfQ3Vyc29yVHlwZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImluc3RhbmNlIG9mIGN1cnNvciByZXF1aXJlZCBmb3IgZmlyc3QgYXJndW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soZGF0YSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInR1cGxlIHJlcXVpcmVkIGZvciBzZWNvbmQgYXJndW1lbnQiKTsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICBzZWxmID0gKHB5c3FsaXRlX1JvdyAqKSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFB5X0lOQ1JFRihkYXRhKTsKICAgICBzZWxmLT5kYXRhID0gZGF0YTsKIAogICAgIFB5X0lOQ1JFRihjdXJzb3ItPmRlc2NyaXB0aW9uKTsKICAgICBzZWxmLT5kZXNjcmlwdGlvbiA9IGN1cnNvci0+ZGVzY3JpcHRpb247CiAKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7Cit9CisKK1B5T2JqZWN0KiBweXNxbGl0ZV9yb3dfaXRlbShweXNxbGl0ZV9Sb3cqIHNlbGYsIFB5X3NzaXplX3QgaWR4KQoreworICAgUHlPYmplY3QqIGl0ZW0gPSBQeVR1cGxlX0dldEl0ZW0oc2VsZi0+ZGF0YSwgaWR4KTsKKyAgIFB5X1hJTkNSRUYoaXRlbSk7CisgICByZXR1cm4gaXRlbTsKIH0KIAogUHlPYmplY3QqIHB5c3FsaXRlX3Jvd19zdWJzY3JpcHQocHlzcWxpdGVfUm93KiBzZWxmLCBQeU9iamVjdCogaWR4KQogewotICAgIGxvbmcgX2lkeDsKKyAgICBQeV9zc2l6ZV90IF9pZHg7CiAgICAgY2hhcioga2V5OwotICAgIGludCBuaXRlbXMsIGk7CisgICAgUHlfc3NpemVfdCBuaXRlbXMsIGk7CiAgICAgY2hhciogY29tcGFyZV9rZXk7CiAKICAgICBjaGFyKiBwMTsKQEAgLTc3LDcgKzg5LDExIEBACiAgICAgUHlPYmplY3QqIGl0ZW07CiAKICAgICBpZiAoUHlMb25nX0NoZWNrKGlkeCkpIHsKLSAgICAgICAgX2lkeCA9IFB5TG9uZ19Bc0xvbmcoaWR4KTsKKyAgICAgICAgX2lkeCA9IFB5TnVtYmVyX0FzU3NpemVfdChpZHgsIFB5RXhjX0luZGV4RXJyb3IpOworICAgICAgICBpZiAoX2lkeCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChfaWR4IDwgMCkKKyAgICAgICAgICAgX2lkeCArPSBQeVR1cGxlX0dFVF9TSVpFKHNlbGYtPmRhdGEpOwogICAgICAgICBpdGVtID0gUHlUdXBsZV9HZXRJdGVtKHNlbGYtPmRhdGEsIF9pZHgpOwogICAgICAgICBQeV9YSU5DUkVGKGl0ZW0pOwogICAgICAgICByZXR1cm4gaXRlbTsKQEAgLTg5LDcgKzEwNSwxMCBAQAogICAgICAgICBuaXRlbXMgPSBQeVR1cGxlX1NpemUoc2VsZi0+ZGVzY3JpcHRpb24pOwogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuaXRlbXM7IGkrKykgewotICAgICAgICAgICAgY29tcGFyZV9rZXkgPSBfUHlVbmljb2RlX0FzU3RyaW5nKFB5VHVwbGVfR0VUX0lURU0oUHlUdXBsZV9HRVRfSVRFTShzZWxmLT5kZXNjcmlwdGlvbiwgaSksIDApKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvYmo7CisgICAgICAgICAgICBvYmogPSBQeVR1cGxlX0dFVF9JVEVNKHNlbGYtPmRlc2NyaXB0aW9uLCBpKTsKKyAgICAgICAgICAgIG9iaiA9IFB5VHVwbGVfR0VUX0lURU0ob2JqLCAwKTsKKyAgICAgICAgICAgIGNvbXBhcmVfa2V5ID0gX1B5VW5pY29kZV9Bc1N0cmluZyhvYmopOwogICAgICAgICAgICAgaWYgKCFjb21wYXJlX2tleSkgewogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQpAQCAtMTIxLDEwICsxNDAsMTIgQEAKIAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgIk5vIGl0ZW0gd2l0aCB0aGF0IGtleSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9IGVsc2UgaWYgKFB5U2xpY2VfQ2hlY2soaWR4KSkgeworICAgIH0KKyAgICBlbHNlIGlmIChQeVNsaWNlX0NoZWNrKGlkeCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJzbGljZXMgbm90IGltcGxlbWVudGVkLCB5ZXQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIHsKKyAgICB9CisgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiSW5kZXggbXVzdCBiZSBpbnQgb3Igc3RyaW5nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE5NCw2ICsyMTUsMTQgQEAKICAgICAvKiBtcF9hc3Nfc3Vic2NyaXB0ICovIChvYmpvYmphcmdwcm9jKTAsCiB9OwogCitzdGF0aWMgUHlTZXF1ZW5jZU1ldGhvZHMgcHlzcWxpdGVfcm93X2FzX3NlcXVlbmNlID0geworICAgLyogc3FfbGVuZ3RoICovICAgICAgICAgKGxlbmZ1bmMpcHlzcWxpdGVfcm93X2xlbmd0aCwKKyAgIC8qIHNxX2NvbmNhdCAqLyAgICAgICAgIDAsCisgICAvKiBzcV9yZXBlYXQgKi8gICAgICAgICAwLAorICAgLyogc3FfaXRlbSAqLyAgICAgICAgICAgKHNzaXplYXJnZnVuYylweXNxbGl0ZV9yb3dfaXRlbSwKK307CisKKwogc3RhdGljIFB5TWV0aG9kRGVmIHB5c3FsaXRlX3Jvd19tZXRob2RzW10gPSB7CiAgICAgeyJrZXlzIiwgKFB5Q0Z1bmN0aW9uKXB5c3FsaXRlX3Jvd19rZXlzLCBNRVRIX05PQVJHUywKICAgICAgICAgUHlEb2NfU1RSKCJSZXR1cm5zIHRoZSBrZXlzIG9mIHRoZSByb3cuIil9LApAQCAtMjM3LDcgKzI2Niw3IEBACiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Rlc2NyX2dldCAqLwogICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZXNjcl9zZXQgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGljdG9mZnNldCAqLwotICAgICAgICAoaW5pdHByb2MpcHlzcWxpdGVfcm93X2luaXQsICAgICAgICAgICAgICAgICAgICAvKiB0cF9pbml0ICovCisgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2luaXQgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYWxsb2MgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2ZyZWUgKi8KQEAgLTI0NSw3ICsyNzQsOCBAQAogCiBleHRlcm4gaW50IHB5c3FsaXRlX3Jvd19zZXR1cF90eXBlcyh2b2lkKQogewotICAgIHB5c3FsaXRlX1Jvd1R5cGUudHBfbmV3ID0gUHlUeXBlX0dlbmVyaWNOZXc7CisgICAgcHlzcWxpdGVfUm93VHlwZS50cF9uZXcgPSBweXNxbGl0ZV9yb3dfbmV3OwogICAgIHB5c3FsaXRlX1Jvd1R5cGUudHBfYXNfbWFwcGluZyA9ICZweXNxbGl0ZV9yb3dfYXNfbWFwcGluZzsKKyAgICBweXNxbGl0ZV9Sb3dUeXBlLnRwX2FzX3NlcXVlbmNlID0gJnB5c3FsaXRlX3Jvd19hc19zZXF1ZW5jZTsKICAgICByZXR1cm4gUHlUeXBlX1JlYWR5KCZweXNxbGl0ZV9Sb3dUeXBlKTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaCBiL01vZHVsZXMvX3NxbGl0ZS9zcWxpdGVjb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2YyMGYxNi4uMDAwMDAwMAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvc3FsaXRlY29tcGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKiBzcWxpdGVjb21wYXQuaCAtIGNvbXBhdGliaWxpdHkgbWFjcm9zCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMTAgR2VyaGFyZCBIw6RyaW5nIDxnaEBnaGFlcmluZy5kZT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBweXNxbGl0ZS4KLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAotICogd2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcwotICogYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKLSAqIGluY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKLSAqIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKLSAqCi0gKiAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAotICogICAgY2xhaW0gdGhhdCB5b3Ugd3JvdGUgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiBJZiB5b3UgdXNlIHRoaXMgc29mdHdhcmUKLSAqICAgIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZQotICogICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KLSAqIDIuIEFsdGVyZWQgc291cmNlIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCi0gKiAgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuCi0gKiAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgotICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotI2lmbmRlZiBQWVNRTElURV9DT01QQVRfSAotI2RlZmluZSBQWVNRTElURV9DT01QQVRfSAotCi0vKiBkZWZpbmUgUHlfc3NpemVfdCBmb3IgcHJlLTIuNSB2ZXJzaW9ucyBvZiBQeXRob24gKi8KLQotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMjA1MDAwMAotdHlwZWRlZiBpbnQgUHlfc3NpemVfdDsKLXR5cGVkZWYgaW50ICgqbGVuZnVuYykoUHlPYmplY3QqKTsKLSNlbmRpZgotCi0KLS8qIGRlZmluZSBQeURpY3RfQ2hlY2tFeGFjdCBmb3IgcHJlLTIuNCB2ZXJzaW9ucyBvZiBQeXRob24gKi8KLSNpZm5kZWYgUHlEaWN0X0NoZWNrRXhhY3QKLSNkZWZpbmUgUHlEaWN0X0NoZWNrRXhhY3Qob3ApICgob3ApLT5vYl90eXBlID09ICZQeURpY3RfVHlwZSkKLSNlbmRpZgotCi0vKiBkZWZpbmUgUHlfQ0xFQVIgZm9yIHByZS0yLjQgdmVyc2lvbnMgb2YgUHl0aG9uICovCi0jaWZuZGVmIFB5X0NMRUFSCi0jZGVmaW5lIFB5X0NMRUFSKG9wKQkJCQlcCi0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKLSAgICAgICAgICAgICAgICBpZiAob3ApIHsJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdG1wID0gKFB5T2JqZWN0ICopKG9wKTsJXAotICAgICAgICAgICAgICAgICAgICAgICAgKG9wKSA9IE5VTEw7CQlcCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsJCVwKLSAgICAgICAgICAgICAgICB9CQkJCVwKLSAgICAgICAgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jaWZuZGVmIFB5VmFyT2JqZWN0X0hFQURfSU5JVAotI2RlZmluZSBQeVZhck9iamVjdF9IRUFEX0lOSVQodHlwZSwgc2l6ZSkgXAotICAgIFB5T2JqZWN0X0hFQURfSU5JVCh0eXBlKSBzaXplLAotI2VuZGlmCi0KLSNpZm5kZWYgUHlfVFlQRQotI2RlZmluZSBQeV9UWVBFKG9iKSAoKG9iKS0+b2JfdHlwZSkKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYyBiL01vZHVsZXMvX3NxbGl0ZS9zdGF0ZW1lbnQuYwppbmRleCA0NzFhMDY3Li5lODcwNjMzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL19zcWxpdGUvc3RhdGVtZW50LmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3N0YXRlbWVudC5jCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAibWljcm9wcm90b2NvbHMuaCIKICNpbmNsdWRlICJwcmVwYXJlX3Byb3RvY29sLmgiCiAjaW5jbHVkZSAidXRpbC5oIgotI2luY2x1ZGUgInNxbGl0ZWNvbXBhdC5oIgogCiAvKiBwcm90b3R5cGVzICovCiBzdGF0aWMgaW50IHB5c3FsaXRlX2NoZWNrX3JlbWFpbmluZ19zcWwoY29uc3QgY2hhciogdGFpbCk7CkBAIC02NCw2ICs2MywxMCBAQAogICAgICAgICByYyA9IFBZU1FMSVRFX1NRTF9XUk9OR19UWVBFOwogICAgICAgICByZXR1cm4gcmM7CiAgICAgfQorICAgIGlmIChzdHJsZW4oc3FsX2NzdHIpICE9IChzaXplX3Qpc3FsX2NzdHJfbGVuKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidGhlIHF1ZXJ5IGNvbnRhaW5zIGEgbnVsbCBjaGFyYWN0ZXIiKTsKKyAgICAgICAgcmV0dXJuIFBZU1FMSVRFX1NRTF9XUk9OR19UWVBFOworICAgIH0KIAogICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBQeV9JTkNSRUYoc3FsKTsKQEAgLTkxLDcgKzk0LDYgQEAKIGludCBweXNxbGl0ZV9zdGF0ZW1lbnRfYmluZF9wYXJhbWV0ZXIocHlzcWxpdGVfU3RhdGVtZW50KiBzZWxmLCBpbnQgcG9zLCBQeU9iamVjdCogcGFyYW1ldGVyKQogewogICAgIGludCByYyA9IFNRTElURV9PSzsKLSAgICBjb25zdCBjaGFyKiBidWZmZXI7CiAgICAgY2hhciogc3RyaW5nOwogICAgIFB5X3NzaXplX3QgYnVmbGVuOwogICAgIHBhcmFtZXRlcl90eXBlIHBhcmFtdHlwZTsKQEAgLTEzMywxOSArMTM1LDMxIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBUWVBFX1VOSUNPREU6CiAgICAgICAgICAgICBzdHJpbmcgPSBfUHlVbmljb2RlX0FzU3RyaW5nQW5kU2l6ZShwYXJhbWV0ZXIsICZidWZsZW4pOwotICAgICAgICAgICAgaWYgKHN0cmluZyAhPSBOVUxMKQotICAgICAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX3RleHQoc2VsZi0+c3QsIHBvcywgc3RyaW5nLCBidWZsZW4sIFNRTElURV9UUkFOU0lFTlQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBUWVBFX0JVRkZFUjoKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIocGFyYW1ldGVyLCAmYnVmZmVyLCAmYnVmbGVuKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmMgPSBzcWxpdGUzX2JpbmRfYmxvYihzZWxmLT5zdCwgcG9zLCBidWZmZXIsIGJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKLSAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgaWYgKHN0cmluZyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChidWZsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgbG9uZ2VyIHRoYW4gSU5UX01BWCBieXRlcyIpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gc3FsaXRlM19iaW5kX3RleHQoc2VsZi0+c3QsIHBvcywgc3RyaW5nLCAoaW50KWJ1ZmxlbiwgU1FMSVRFX1RSQU5TSUVOVCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUWVBFX0JVRkZFUjogeworICAgICAgICAgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHBhcmFtZXRlciwgJnZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiY291bGQgbm90IGNvbnZlcnQgQkxPQiB0byBidWZmZXIiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodmlldy5sZW4gPiBJTlRfTUFYKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCTE9CIGxvbmdlciB0aGFuIElOVF9NQVggYnl0ZXMiKTsKKyAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IHNxbGl0ZTNfYmluZF9ibG9iKHNlbGYtPnN0LCBwb3MsIHZpZXcuYnVmLCAoaW50KXZpZXcubGVuLCBTUUxJVEVfVFJBTlNJRU5UKTsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgY2FzZSBUWVBFX1VOS05PV046CiAgICAgICAgICAgICByYyA9IC0xOwogICAgIH0KQEAgLTE3Nyw3ICsxOTEsNyBAQAogICAgIGludCBpOwogICAgIGludCByYzsKICAgICBpbnQgbnVtX3BhcmFtc19uZWVkZWQ7Ci0gICAgaW50IG51bV9wYXJhbXM7CisgICAgUHlfc3NpemVfdCBudW1fcGFyYW1zOwogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIG51bV9wYXJhbXNfbmVlZGVkID0gc3FsaXRlM19iaW5kX3BhcmFtZXRlcl9jb3VudChzZWxmLT5zdCk7CkBAIC0xOTMsNyArMjA3LDkgQEAKICAgICAgICAgICAgIG51bV9wYXJhbXMgPSBQeVNlcXVlbmNlX1NpemUocGFyYW1ldGVycyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG51bV9wYXJhbXMgIT0gbnVtX3BhcmFtc19uZWVkZWQpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLCAiSW5jb3JyZWN0IG51bWJlciBvZiBiaW5kaW5ncyBzdXBwbGllZC4gVGhlIGN1cnJlbnQgc3RhdGVtZW50IHVzZXMgJWQsIGFuZCB0aGVyZSBhcmUgJWQgc3VwcGxpZWQuIiwKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChweXNxbGl0ZV9Qcm9ncmFtbWluZ0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJJbmNvcnJlY3QgbnVtYmVyIG9mIGJpbmRpbmdzIHN1cHBsaWVkLiBUaGUgY3VycmVudCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgInN0YXRlbWVudCB1c2VzICVkLCBhbmQgdGhlcmUgYXJlICV6ZCBzdXBwbGllZC4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9wYXJhbXNfbmVlZGVkLCBudW1fcGFyYW1zKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjQ5LDcgKzI2NSw3IEBACiAgICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIGJpbmRpbmdfbmFtZSk7CiAgICAgICAgICAgICAgICAgUHlfWElOQ1JFRihjdXJyZW50X3BhcmFtKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3VycmVudF9wYXJhbSA9IFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nKHBhcmFtZXRlcnMsIChjaGFyKiliaW5kaW5nX25hbWUpOworICAgICAgICAgICAgICAgIGN1cnJlbnRfcGFyYW0gPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhwYXJhbWV0ZXJzLCBiaW5kaW5nX25hbWUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFjdXJyZW50X3BhcmFtKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KHB5c3FsaXRlX1Byb2dyYW1taW5nRXJyb3IsICJZb3UgZGlkIG5vdCBzdXBwbHkgYSB2YWx1ZSBmb3IgYmluZGluZyAlZC4iLCBpKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMgYi9Nb2R1bGVzL19zcWxpdGUvdXRpbC5jCmluZGV4IGQ4OGJjM2YuLjMxMmZlM2IgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NxbGl0ZS91dGlsLmMKKysrIGIvTW9kdWxlcy9fc3FsaXRlL3V0aWwuYwpAQCAtMTMyLDcgKzEzMiw3IEBACiAgICAgfQogIyBlbmRpZgogI2VuZGlmCi0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWx1ZSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhQeV9TQUZFX0RPV05DQVNUKHZhbHVlLCBzcWxpdGVfaW50NjQsIGxvbmcpKTsKIH0KIAogc3FsaXRlX2ludDY0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zcmUuYyBiL01vZHVsZXMvX3NyZS5jCmluZGV4IDdiOTQxZmYuLjhkMTExZTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NyZS5jCisrKyBiL01vZHVsZXMvX3NyZS5jCkBAIC00LDI0ICs0LDI1IEBACiAgKiByZWd1bGFyIGV4cHJlc3Npb24gbWF0Y2hpbmcgZW5naW5lCiAgKgogICogcGFydGlhbCBoaXN0b3J5OgotICogMTk5OS0xMC0yNCBmbCAgY3JlYXRlZCAoYmFzZWQgb24gZXhpc3RpbmcgdGVtcGxhdGUgbWF0Y2hlciBjb2RlKQotICogMjAwMC0wMy0wNiBmbCAgZmlyc3QgYWxwaGEsIHNvcnQgb2YKLSAqIDIwMDAtMDgtMDEgZmwgIGZpeGVzIGZvciAxLjZiMQotICogMjAwMC0wOC0wNyBmbCAgdXNlIFB5T1NfQ2hlY2tTdGFjaygpIGlmIGF2YWlsYWJsZQotICogMjAwMC0wOS0yMCBmbCAgYWRkZWQgZXhwYW5kIG1ldGhvZAotICogMjAwMS0wMy0yMCBmbCAgbG90cyBvZiBmaXhlcyBmb3IgMi4xYjIKLSAqIDIwMDEtMDQtMTUgZmwgIGV4cG9ydCBjb3B5cmlnaHQgYXMgUHl0aG9uIGF0dHJpYnV0ZSwgbm90IGdsb2JhbAotICogMjAwMS0wNC0yOCBmbCAgYWRkZWQgX19jb3B5X18gbWV0aG9kcyAod29yayBpbiBwcm9ncmVzcykKLSAqIDIwMDEtMDUtMTQgZmwgIGZpeGVzIGZvciAxLjUuMiBjb21wYXRpYmlsaXR5Ci0gKiAyMDAxLTA3LTAxIGZsICBhZGRlZCBCSUdDSEFSU0VUIHN1cHBvcnQgKGZyb20gTWFydGluIHZvbiBMb2V3aXMpCi0gKiAyMDAxLTEwLTE4IGZsICBmaXhlZCBncm91cCByZXNldCBpc3N1ZSAoZnJvbSBNYXR0aGV3IE11ZWxsZXIpCi0gKiAyMDAxLTEwLTIwIGZsICBhZGRlZCBzcGxpdCBwcmltaXRpdmU7IHJlZW5hYmxlIHVuaWNvZGUgZm9yIDEuNi8yLjAvMi4xCi0gKiAyMDAxLTEwLTIxIGZsICBhZGRlZCBzdWIvc3VibiBwcmltaXRpdmUKLSAqIDIwMDEtMTAtMjQgZmwgIGFkZGVkIGZpbmRpdGVyIHByaW1pdGl2ZSAoZm9yIDIuMiBvbmx5KQotICogMjAwMS0xMi0wNyBmbCAgZml4ZWQgbWVtb3J5IGxlYWsgaW4gc3ViL3N1Ym4gKEd1aWRvIHZhbiBSb3NzdW0pCi0gKiAyMDAyLTExLTA5IGZsICBmaXhlZCBlbXB0eSBzdWIvc3VibiByZXR1cm4gdHlwZQotICogMjAwMy0wNC0xOCBtdmwgZnVsbHkgc3VwcG9ydCA0LWJ5dGUgY29kZXMKLSAqIDIwMDMtMTAtMTcgZ24gIGltcGxlbWVudGVkIG5vbiByZWN1cnNpdmUgc2NoZW1lCisgKiAxOTk5LTEwLTI0IGZsICAgY3JlYXRlZCAoYmFzZWQgb24gZXhpc3RpbmcgdGVtcGxhdGUgbWF0Y2hlciBjb2RlKQorICogMjAwMC0wMy0wNiBmbCAgIGZpcnN0IGFscGhhLCBzb3J0IG9mCisgKiAyMDAwLTA4LTAxIGZsICAgZml4ZXMgZm9yIDEuNmIxCisgKiAyMDAwLTA4LTA3IGZsICAgdXNlIFB5T1NfQ2hlY2tTdGFjaygpIGlmIGF2YWlsYWJsZQorICogMjAwMC0wOS0yMCBmbCAgIGFkZGVkIGV4cGFuZCBtZXRob2QKKyAqIDIwMDEtMDMtMjAgZmwgICBsb3RzIG9mIGZpeGVzIGZvciAyLjFiMgorICogMjAwMS0wNC0xNSBmbCAgIGV4cG9ydCBjb3B5cmlnaHQgYXMgUHl0aG9uIGF0dHJpYnV0ZSwgbm90IGdsb2JhbAorICogMjAwMS0wNC0yOCBmbCAgIGFkZGVkIF9fY29weV9fIG1ldGhvZHMgKHdvcmsgaW4gcHJvZ3Jlc3MpCisgKiAyMDAxLTA1LTE0IGZsICAgZml4ZXMgZm9yIDEuNS4yIGNvbXBhdGliaWxpdHkKKyAqIDIwMDEtMDctMDEgZmwgICBhZGRlZCBCSUdDSEFSU0VUIHN1cHBvcnQgKGZyb20gTWFydGluIHZvbiBMb2V3aXMpCisgKiAyMDAxLTEwLTE4IGZsICAgZml4ZWQgZ3JvdXAgcmVzZXQgaXNzdWUgKGZyb20gTWF0dGhldyBNdWVsbGVyKQorICogMjAwMS0xMC0yMCBmbCAgIGFkZGVkIHNwbGl0IHByaW1pdGl2ZTsgcmVlbmFibGUgdW5pY29kZSBmb3IgMS42LzIuMC8yLjEKKyAqIDIwMDEtMTAtMjEgZmwgICBhZGRlZCBzdWIvc3VibiBwcmltaXRpdmUKKyAqIDIwMDEtMTAtMjQgZmwgICBhZGRlZCBmaW5kaXRlciBwcmltaXRpdmUgKGZvciAyLjIgb25seSkKKyAqIDIwMDEtMTItMDcgZmwgICBmaXhlZCBtZW1vcnkgbGVhayBpbiBzdWIvc3VibiAoR3VpZG8gdmFuIFJvc3N1bSkKKyAqIDIwMDItMTEtMDkgZmwgICBmaXhlZCBlbXB0eSBzdWIvc3VibiByZXR1cm4gdHlwZQorICogMjAwMy0wNC0xOCBtdmwgIGZ1bGx5IHN1cHBvcnQgNC1ieXRlIGNvZGVzCisgKiAyMDAzLTEwLTE3IGduICAgaW1wbGVtZW50ZWQgbm9uIHJlY3Vyc2l2ZSBzY2hlbWUKKyAqIDIwMTMtMDItMDQgbXJhYiBhZGRlZCBmdWxsbWF0Y2ggcHJpbWl0aXZlCiAgKgogICogQ29weXJpZ2h0IChjKSAxOTk3LTIwMDEgYnkgU2VjcmV0IExhYnMgQUIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTM0LDggKzM1LDYgQEAKICAqIG90aGVyIGNvbXBhdGliaWxpdHkgd29yay4KICAqLwogCi0jaWZuZGVmIFNSRV9SRUNVUlNJVkUKLQogc3RhdGljIGNoYXIgY29weXJpZ2h0W10gPQogICAgICIgU1JFIDIuMi4yIENvcHlyaWdodCAoYykgMTk5Ny0yMDAyIGJ5IFNlY3JldCBMYWJzIEFCICI7CiAKQEAgLTQ2LDYgKzQ1LDggQEAKIAogI2luY2x1ZGUgInNyZS5oIgogCisjZGVmaW5lIFNSRV9DT0RFX0JJVFMgKDggKiBzaXplb2YoU1JFX0NPREUpKQorCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAogLyogbmFtZSBvZiB0aGlzIG1vZHVsZSwgbWludXMgdGhlIGxlYWRpbmcgdW5kZXJzY29yZSAqLwpAQCAtNTgsOSArNTksNiBAQAogLyogZGVmaW5pbmcgdGhpcyBvbmUgZW5hYmxlcyB0cmFjaW5nICovCiAjdW5kZWYgVkVSQk9TRQogCi0vKiBkZWZpbmluZyB0aGlzIGVuYWJsZXMgdW5pY29kZSBzdXBwb3J0IChkZWZhdWx0IHVuZGVyIDEuNmExIGFuZCBsYXRlcikgKi8KLSNkZWZpbmUgSEFWRV9VTklDT0RFCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBvcHRpb25hbCBmZWF0dXJlcyAqLwogCkBAIC03MCwxMCArNjgsNiBAQAogLyogZW5hYmxlcyBjb3B5L2RlZXBjb3B5IGhhbmRsaW5nICh3b3JrIGluIHByb2dyZXNzKSAqLwogI3VuZGVmIFVTRV9CVUlMVElOX0NPUFkKIAotI2lmIFBZX1ZFUlNJT05fSEVYIDwgMHgwMTA2MDAwMAotI2RlZmluZSBQeU9iamVjdF9ERUwob3ApIFB5TWVtX0RFTCgob3ApKQotI2VuZGlmCi0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtMTUwLDkgKzE0NCw2IEBACiAvKiBsb2NhbGUtc3BlY2lmaWMgY2hhcmFjdGVyIHByZWRpY2F0ZXMgKi8KIC8qICEoYyAmIH5OKSA9PSAoYyA8IE4rMSkgZm9yIGFueSB1bnNpZ25lZCBjLCB0aGlzIGF2b2lkcwogICogd2FybmluZ3Mgd2hlbiBjJ3MgdHlwZSBzdXBwb3J0cyBvbmx5IG51bWJlcnMgPCBOKzEgKi8KLSNkZWZpbmUgU1JFX0xPQ19JU19ESUdJVChjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNkaWdpdCgoY2gpKSA6IDApCi0jZGVmaW5lIFNSRV9MT0NfSVNfU1BBQ0UoY2gpICghKChjaCkgJiB+MjU1KSA/IGlzc3BhY2UoKGNoKSkgOiAwKQotI2RlZmluZSBTUkVfTE9DX0lTX0xJTkVCUkVBSyhjaCkgKChjaCkgPT0gJ1xuJykKICNkZWZpbmUgU1JFX0xPQ19JU19BTE5VTShjaCkgKCEoKGNoKSAmIH4yNTUpID8gaXNhbG51bSgoY2gpKSA6IDApCiAjZGVmaW5lIFNSRV9MT0NfSVNfV09SRChjaCkgKFNSRV9MT0NfSVNfQUxOVU0oKGNoKSkgfHwgKGNoKSA9PSAnXycpCiAKQEAgLTI1NiwxMzgwICsyNDcsMzIgQEAKIAogLyogZ2VuZXJhdGUgOC1iaXQgdmVyc2lvbiAqLwogCi0jZGVmaW5lIFNSRV9DSEFSIHVuc2lnbmVkIGNoYXIKLSNkZWZpbmUgU1JFX0NIQVJHRVQoc3RhdGUsIGJ1ZiwgaW5kZXgpICgodW5zaWduZWQgY2hhciopYnVmKVtpbmRleF0KLSNkZWZpbmUgU1JFX0FUIHNyZV9hdAotI2RlZmluZSBTUkVfQ09VTlQgc3JlX2NvdW50Ci0jZGVmaW5lIFNSRV9DSEFSU0VUIHNyZV9jaGFyc2V0Ci0jZGVmaW5lIFNSRV9JTkZPIHNyZV9pbmZvCi0jZGVmaW5lIFNSRV9NQVRDSCBzcmVfbWF0Y2gKLSNkZWZpbmUgU1JFX01BVENIX0NPTlRFWFQgc3JlX21hdGNoX2NvbnRleHQKLSNkZWZpbmUgU1JFX1NFQVJDSCBzcmVfc2VhcmNoCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzEKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDEKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MxXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotI2RlZmluZSBTUkVfUkVDVVJTSVZFCi0jaW5jbHVkZSAiX3NyZS5jIgotI3VuZGVmIFNSRV9SRUNVUlNJVkUKKy8qIGdlbmVyYXRlIDE2LWJpdCB1bmljb2RlIHZlcnNpb24gKi8KIAotI3VuZGVmIFNSRV9TRUFSQ0gKLSN1bmRlZiBTUkVfTUFUQ0gKLSN1bmRlZiBTUkVfTUFUQ0hfQ09OVEVYVAotI3VuZGVmIFNSRV9JTkZPCi0jdW5kZWYgU1JFX0NIQVJTRVQKLSN1bmRlZiBTUkVfQ09VTlQKLSN1bmRlZiBTUkVfQVQKLSN1bmRlZiBTUkVfQ0hBUgotI3VuZGVmIFNSRV9DSEFSR0VUCisjZGVmaW5lIFNSRV9DSEFSIFB5X1VDUzIKKyNkZWZpbmUgU0laRU9GX1NSRV9DSEFSIDIKKyNkZWZpbmUgU1JFKEYpIHNyZV91Y3MyXyMjRgorI2luY2x1ZGUgInNyZV9saWIuaCIKIAotLyogZ2VuZXJhdGUgOC8xNi8zMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCisvKiBnZW5lcmF0ZSAzMi1iaXQgdW5pY29kZSB2ZXJzaW9uICovCiAKLSNkZWZpbmUgU1JFX0NIQVIgdm9pZAotI2RlZmluZSBTUkVfQ0hBUkdFVChzdGF0ZSwgYnVmLCBpbmRleCkgXAotICAgICgoc3RhdGUtPmNoYXJzaXplPT0xKSA/ICgoUHlfVUNTMSopYnVmKVtpbmRleF0gOiBcCi0gICAgIChzdGF0ZS0+Y2hhcnNpemU9PTIpID8gKChQeV9VQ1MyKilidWYpW2luZGV4XSA6IFwKLSAgICAgKChQeV9VQ1M0KilidWYpW2luZGV4XSkKLSNkZWZpbmUgU1JFX0FUIHNyZV91YXQKLSNkZWZpbmUgU1JFX0NPVU5UIHNyZV91Y291bnQKLSNkZWZpbmUgU1JFX0NIQVJTRVQgc3JlX3VjaGFyc2V0Ci0jZGVmaW5lIFNSRV9JTkZPIHNyZV91aW5mbwotI2RlZmluZSBTUkVfTUFUQ0ggc3JlX3VtYXRjaAotI2RlZmluZSBTUkVfTUFUQ0hfQ09OVEVYVCBzcmVfdW1hdGNoX2NvbnRleHQKLSNkZWZpbmUgU1JFX1NFQVJDSCBzcmVfdXNlYXJjaAotCi0jZW5kaWYgLyogU1JFX1JFQ1VSU0lWRSAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogU3RyaW5nIG1hdGNoaW5nIGVuZ2luZSAqLwotCi0vKiB0aGUgZm9sbG93aW5nIHNlY3Rpb24gaXMgY29tcGlsZWQgdHdpY2UsIHdpdGggZGlmZmVyZW50IGNoYXJhY3RlcgotICAgc2V0dGluZ3MgKi8KLQotTE9DQUwoaW50KQotU1JFX0FUKFNSRV9TVEFURSogc3RhdGUsIGNoYXIqIHB0ciwgU1JFX0NPREUgYXQpCi17Ci0gICAgLyogY2hlY2sgaWYgcG9pbnRlciBpcyBhdCBnaXZlbiBwb3NpdGlvbiAqLwotCi0gICAgUHlfc3NpemVfdCB0aGlzcCwgdGhhdHA7Ci0KLSAgICBzd2l0Y2ggKGF0KSB7Ci0KLSAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkc6Ci0gICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX1NUUklORzoKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+YmVnaW5uaW5nKTsKLQotICAgIGNhc2UgU1JFX0FUX0JFR0lOTklOR19MSU5FOgotICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcgfHwKLSAgICAgICAgICAgICAgICBTUkVfSVNfTElORUJSRUFLKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EOgotICAgICAgICByZXR1cm4gKCgodm9pZCopIChwdHIrc3RhdGUtPmNoYXJzaXplKSA9PSBzdGF0ZS0+ZW5kICYmCi0gICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKSB8fAotICAgICAgICAgICAgICAgICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKSk7Ci0KLSAgICBjYXNlIFNSRV9BVF9FTkRfTElORToKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kIHx8Ci0gICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpOwotCi0gICAgY2FzZSBTUkVfQVRfRU5EX1NUUklORzoKLSAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKTsKLQotICAgIGNhc2UgU1JFX0FUX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpIDogMDsKLSAgICAgICAgcmV0dXJuIHRoaXNwID09IHRoYXRwOwotCi0gICAgY2FzZSBTUkVfQVRfTE9DX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgIT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9MT0NfTk9OX0JPVU5EQVJZOgotICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPwotICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIC0xKSkgOiAwOwotICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KLSAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgOiAwOwotICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7Ci0KLSAgICBjYXNlIFNSRV9BVF9VTklfQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCAhPSB0aGF0cDsKLQotICAgIGNhc2UgU1JFX0FUX1VOSV9OT05fQk9VTkRBUlk6Ci0gICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCi0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/Ci0gICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgLTEpKSA6IDA7Ci0gICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPwotICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSA6IDA7Ci0gICAgICAgIHJldHVybiB0aGlzcCA9PSB0aGF0cDsKLQotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1MT0NBTChpbnQpCi1TUkVfQ0hBUlNFVChTUkVfQ09ERSogc2V0LCBTUkVfQ09ERSBjaCkKLXsKLSAgICAvKiBjaGVjayBpZiBjaGFyYWN0ZXIgaXMgYSBtZW1iZXIgb2YgdGhlIGdpdmVuIHNldCAqLwotCi0gICAgaW50IG9rID0gMTsKLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgc3dpdGNoICgqc2V0KyspIHsKLQotICAgICAgICBjYXNlIFNSRV9PUF9GQUlMVVJFOgotICAgICAgICAgICAgcmV0dXJuICFvazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgotICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgaWYgKGNoID09IHNldFswXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gb2s7Ci0gICAgICAgICAgICBzZXQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0NBVEVHT1JZOgotICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIGlmIChzcmVfY2F0ZWdvcnkoc2V0WzBdLCAoaW50KSBjaCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0ICs9IDE7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DSEFSU0VUOgotICAgICAgICAgICAgaWYgKHNpemVvZihTUkVfQ09ERSkgPT0gMikgewotICAgICAgICAgICAgICAgIC8qIDxDSEFSU0VUPiA8Yml0bWFwPiAoMTYgYml0cyBwZXIgY29kZSB3b3JkKSAqLwotICAgICAgICAgICAgICAgIGlmIChjaCA8IDI1NiAmJiAoc2V0W2NoID4+IDRdICYgKDEgPDwgKGNoICYgMTUpKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBvazsKLSAgICAgICAgICAgICAgICBzZXQgKz0gMTY7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiA8Q0hBUlNFVD4gPGJpdG1hcD4gKDMyIGJpdHMgcGVyIGNvZGUgd29yZCkgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPCAyNTYgJiYgKHNldFtjaCA+PiA1XSAmICgxdSA8PCAoY2ggJiAzMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSA4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkFOR0U6Ci0gICAgICAgICAgICAvKiA8UkFOR0U+IDxsb3dlcj4gPHVwcGVyPiAqLwotICAgICAgICAgICAgaWYgKHNldFswXSA8PSBjaCAmJiBjaCA8PSBzZXRbMV0pCi0gICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgc2V0ICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9ORUdBVEU6Ci0gICAgICAgICAgICBvayA9ICFvazsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0JJR0NIQVJTRVQ6Ci0gICAgICAgICAgICAvKiA8QklHQ0hBUlNFVD4gPGJsb2NrY291bnQ+IDwyNTYgYmxvY2tpbmRpY2VzPiA8YmxvY2tzPiAqLwotICAgICAgICB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50LCBibG9jazsKLSAgICAgICAgICAgIGNvdW50ID0gKihzZXQrKyk7Ci0KLSAgICAgICAgICAgIGlmIChzaXplb2YoU1JFX0NPREUpID09IDIpIHsKLSAgICAgICAgICAgICAgICBibG9jayA9ICgodW5zaWduZWQgY2hhciopc2V0KVtjaCA+PiA4XTsKLSAgICAgICAgICAgICAgICBzZXQgKz0gMTI4OwotICAgICAgICAgICAgICAgIGlmIChzZXRbYmxvY2sqMTYgKyAoKGNoICYgMjU1KT4+NCldICYgKDEgPDwgKGNoICYgMTUpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSBjb3VudCoxNjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qICEoYyAmIH5OKSA9PSAoYyA8IE4rMSkgZm9yIGFueSB1bnNpZ25lZCBjLCB0aGlzIGF2b2lkcwotICAgICAgICAgICAgICAgICAqIHdhcm5pbmdzIHdoZW4gYydzIHR5cGUgc3VwcG9ydHMgb25seSBudW1iZXJzIDwgTisxICovCi0gICAgICAgICAgICAgICAgaWYgKCEoY2ggJiB+NjU1MzUpKQotICAgICAgICAgICAgICAgICAgICBibG9jayA9ICgodW5zaWduZWQgY2hhciopc2V0KVtjaCA+PiA4XTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGJsb2NrID0gLTE7Ci0gICAgICAgICAgICAgICAgc2V0ICs9IDY0OwotICAgICAgICAgICAgICAgIGlmIChibG9jayA+PTAgJiYKLSAgICAgICAgICAgICAgICAgICAgKHNldFtibG9jayo4ICsgKChjaCAmIDI1NSk+PjUpXSAmICgxdSA8PCAoY2ggJiAzMSkpKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9rOwotICAgICAgICAgICAgICAgIHNldCArPSBjb3VudCo4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgLyogaW50ZXJuYWwgZXJyb3IgLS0gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgaXQKLSAgICAgICAgICAgICAgIGhlcmUsIHNvIGxldCdzIGp1c3QgcHJldGVuZCBpdCBkaWRuJ3QgbWF0Y2guLi4gKi8KLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgfQotfQotCi1MT0NBTChQeV9zc2l6ZV90KSBTUkVfTUFUQ0goU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4pOwotCi1MT0NBTChQeV9zc2l6ZV90KQotU1JFX0NPVU5UKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuLCBQeV9zc2l6ZV90IG1heGNvdW50KQotewotICAgIFNSRV9DT0RFIGNocjsKLSAgICBjaGFyKiBwdHIgPSAoY2hhciAqKXN0YXRlLT5wdHI7Ci0gICAgY2hhciogZW5kID0gKGNoYXIgKilzdGF0ZS0+ZW5kOwotICAgIFB5X3NzaXplX3QgaTsKLQotICAgIC8qIGFkanVzdCBlbmQgKi8KLSAgICBpZiAobWF4Y291bnQgPCAoZW5kIC0gcHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSAmJiBtYXhjb3VudCAhPSBTUkVfTUFYUkVQRUFUKQotICAgICAgICBlbmQgPSBwdHIgKyBtYXhjb3VudCpzdGF0ZS0+Y2hhcnNpemU7Ci0KLSAgICBzd2l0Y2ggKHBhdHRlcm5bMF0pIHsKLQotICAgIGNhc2UgU1JFX09QX0lOOgotICAgICAgICAvKiByZXBlYXRlZCBzZXQgKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgSU5cbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmCi0gICAgICAgICAgICAgICBTUkVfQ0hBUlNFVChwYXR0ZXJuICsgMiwgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkpKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9BTlk6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gKi8KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAhU1JFX0lTX0xJTkVCUkVBSyhTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX0FOWV9BTEw6Ci0gICAgICAgIC8qIHJlcGVhdGVkIGRvdCB3aWxkY2FyZC4gIHNraXAgdG8gdGhlIGVuZCBvZiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgIHN0cmluZywgYW5kIGJhY2t0cmFjayBmcm9tIHRoZXJlICovCi0gICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIEFOWV9BTExcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICBwdHIgPSBlbmQ7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBTUkVfT1BfTElURVJBTDoKLSAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIHB0ciwgMCkgPT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgLyogcmVwZWF0ZWQgbGl0ZXJhbCAqLwotICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBMSVRFUkFMX0lHTk9SRSAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKLSAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCAmJiAoU1JFX0NPREUpIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSkgPT0gY2hyKQotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKLSAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgLyogcmVwZWF0ZWQgbm9uLWxpdGVyYWwgKi8KLSAgICAgICAgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgTk9UX0xJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOwotICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSAhPSBjaHIpCi0gICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIC8qIHJlcGVhdGVkIHNpbmdsZSBjaGFyYWN0ZXIgcGF0dGVybiAqLwotICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBTVUJQQVRURVJOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgd2hpbGUgKChjaGFyKikgc3RhdGUtPnB0ciA8IGVuZCkgewotICAgICAgICAgICAgaSA9IFNSRV9NQVRDSChzdGF0ZSwgcGF0dGVybik7Ci0gICAgICAgICAgICBpZiAoaSA8IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGk7Ci0gICAgICAgICAgICBpZiAoIWkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAotICAgICAgICAgICAgICAgKChjaGFyKilzdGF0ZS0+cHRyIC0gcHRyKS9zdGF0ZS0+Y2hhcnNpemUpKTsKLSAgICAgICAgcmV0dXJuICgoY2hhciopc3RhdGUtPnB0ciAtIHB0cikvc3RhdGUtPmNoYXJzaXplOwotICAgIH0KLQotICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKLSAgICAgICAgICAgKHB0ciAtIChjaGFyKikgc3RhdGUtPnB0cikvc3RhdGUtPmNoYXJzaXplKSk7Ci0gICAgcmV0dXJuIChwdHIgLSAoY2hhciopIHN0YXRlLT5wdHIpL3N0YXRlLT5jaGFyc2l6ZTsKLX0KLQotI2lmIDAgLyogbm90IHVzZWQgaW4gdGhpcyByZWxlYXNlICovCi1MT0NBTChpbnQpCi1TUkVfSU5GTyhTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICAvKiBjaGVjayBpZiBhbiBTUkVfT1BfSU5GTyBibG9jayBtYXRjaGVzIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLgotICAgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBTUkVfQ09ERSBvYmplY3RzIHRvIHNraXAgaWYgc3VjY2Vzc2Z1bCwgMAotICAgICAgIGlmIG5vIG1hdGNoICovCi0KLSAgICBjaGFyKiBlbmQgPSBzdGF0ZS0+ZW5kOwotICAgIGNoYXIqIHB0ciA9IHN0YXRlLT5wdHI7Ci0gICAgUHlfc3NpemVfdCBpOwotCi0gICAgLyogY2hlY2sgbWluaW1hbCBsZW5ndGggKi8KLSAgICBpZiAocGF0dGVyblszXSAmJiAoZW5kIC0gcHRyKS9zdGF0ZS0+Y2hhcnNpemUgPCBwYXR0ZXJuWzNdKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qIGNoZWNrIGtub3duIHByZWZpeCAqLwotICAgIGlmIChwYXR0ZXJuWzJdICYgU1JFX0lORk9fUFJFRklYICYmIHBhdHRlcm5bNV0gPiAxKSB7Ci0gICAgICAgIC8qIDxsZW5ndGg+IDxza2lwPiA8cHJlZml4IGRhdGE+IDxvdmVybGFwIGRhdGE+ICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwYXR0ZXJuWzVdOyBpKyspCi0gICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCBpKSAhPSBwYXR0ZXJuWzcgKyBpXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcmV0dXJuIHBhdHRlcm5bMF0gKyAyICogcGF0dGVybls2XTsKLSAgICB9Ci0gICAgcmV0dXJuIHBhdHRlcm5bMF07Ci19Ci0jZW5kaWYKLQotLyogVGhlIG1hY3JvcyBiZWxvdyBzaG91bGQgYmUgdXNlZCB0byBwcm90ZWN0IHJlY3Vyc2l2ZSBTUkVfTUFUQ0goKQotICogY2FsbHMgdGhhdCAqZmFpbGVkKiBhbmQgZG8gKm5vdCogcmV0dXJuIGltbWVkaWF0ZWx5IChJT1csIHRob3NlCi0gKiB0aGF0IHdpbGwgYmFja3RyYWNrKS4gRXhwbGFpbmluZzoKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCB0cnVlOiB0aGF0J3MgdXN1YWxseSBhIHN1Y2Nlc3MKLSAqICAgKGJlc2lkZXMgYXR5cGljYWwgY2FzZXMgbGlrZSBBU1NFUlRfTk9UKSwgdGhlcmVmb3JlIHRoZXJlJ3Mgbm8KLSAqICAgcmVhc29uIHRvIHJlc3RvcmUgbGFzdG1hcms7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UgYnV0IHRoZSBjdXJyZW50IFNSRV9NQVRDSCgpCi0gKiAgIGlzIHJldHVybmluZyB0byB0aGUgY2FsbGVyOiBJZiB0aGUgY3VycmVudCBTUkVfTUFUQ0goKSBpcyB0aGUKLSAqICAgdG9wIGZ1bmN0aW9uIG9mIHRoZSByZWN1cnNpb24sIHJldHVybmluZyBmYWxzZSB3aWxsIGJlIGEgbWF0Y2hpbmcKLSAqICAgZmFpbHVyZSwgYW5kIGl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGxhc3RtYXJrIGlzIHBvaW50aW5nIHRvLgotICogICBJZiBpdCdzICpub3QqIHRoZSB0b3AgZnVuY3Rpb24sIGl0IHdpbGwgYmUgYSByZWN1cnNpdmUgU1JFX01BVENIKCkKLSAqICAgZmFpbHVyZSBieSBpdHNlbGYsIGFuZCB0aGUgY2FsbGluZyBTUkVfTUFUQ0goKSB3aWxsIGhhdmUgdG8gZGVhbAotICogICB3aXRoIHRoZSBmYWlsdXJlIGJ5IHRoZSBzYW1lIHJ1bGVzIGV4cGxhaW5lZCBoZXJlIChpdCB3aWxsIHJlc3RvcmUKLSAqICAgbGFzdG1hcmsgYnkgaXRzZWxmIGlmIG5lY2Vzc2FyeSk7Ci0gKgotICogLSBSZWN1cnNpdmUgU1JFX01BVENIKCkgcmV0dXJuZWQgZmFsc2UsIGFuZCB3aWxsIGNvbnRpbnVlIHRoZQotICogICBvdXRzaWRlICdmb3InIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIHdoZW4gYnJlYWtpbmcsIHNpbmNlIHRoZSBuZXh0Ci0gKiAgIE9QIGNvdWxkIHBvdGVudGlhbGx5IGRlcGVuZCBvbiBsYXN0bWFyazsKLSAqCi0gKiAtIFJlY3Vyc2l2ZSBTUkVfTUFUQ0goKSByZXR1cm5lZCBmYWxzZSwgYW5kIHdpbGwgYmUgY2FsbGVkIGFnYWluCi0gKiAgIGluc2lkZSBhIGxvY2FsIGZvci93aGlsZSBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCBiZXR3ZWVuIGVhY2gKLSAqICAgbG9vcCBpdGVyYXRpb24sIHNpbmNlIHRoZSByZWN1cnNpdmUgU1JFX01BVENIKCkgY291bGQgZG8gYW55dGhpbmcsCi0gKiAgIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcmsuCi0gKgotICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIHRoZSBkaXNjdXNzaW9uIGF0IFNGIHBhdGNoICM3MTI5MDAuCi0gKi8KLSNkZWZpbmUgTEFTVE1BUktfU0FWRSgpICAgICBcCi0gICAgZG8geyBcCi0gICAgICAgIGN0eC0+bGFzdG1hcmsgPSBzdGF0ZS0+bGFzdG1hcms7IFwKLSAgICAgICAgY3R4LT5sYXN0aW5kZXggPSBzdGF0ZS0+bGFzdGluZGV4OyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTEFTVE1BUktfUkVTVE9SRSgpICBcCi0gICAgZG8geyBcCi0gICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGN0eC0+bGFzdG1hcms7IFwKLSAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGN0eC0+bGFzdGluZGV4OyBcCi0gICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBSRVRVUk5fRVJST1IoaSkgZG8geyByZXR1cm4gaTsgfSB3aGlsZSgwKQotI2RlZmluZSBSRVRVUk5fRkFJTFVSRSBkbyB7IHJldCA9IDA7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQotI2RlZmluZSBSRVRVUk5fU1VDQ0VTUyBkbyB7IHJldCA9IDE7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQotCi0jZGVmaW5lIFJFVFVSTl9PTl9FUlJPUihpKSBcCi0gICAgZG8geyBpZiAoaSA8IDApIFJFVFVSTl9FUlJPUihpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgUkVUVVJOX09OX1NVQ0NFU1MoaSkgXAotICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA+IDApIFJFVFVSTl9TVUNDRVNTOyB9IHdoaWxlICgwKQotI2RlZmluZSBSRVRVUk5fT05fRkFJTFVSRShpKSBcCi0gICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID09IDApIFJFVFVSTl9GQUlMVVJFOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNGWSh4KSAjeAotCi0jZGVmaW5lIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHR5cGUsIHB0cikgXAotZG8geyBcCi0gICAgYWxsb2NfcG9zID0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZTsgXAotICAgIFRSQUNFKCgiYWxsb2NhdGluZyAlcyBpbiAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAotICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCi0gICAgICAgICAgIFNGWSh0eXBlKSwgYWxsb2NfcG9zLCBzaXplb2YodHlwZSkpKTsgXAotICAgIGlmIChzaXplb2YodHlwZSkgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gYWxsb2NfcG9zKSB7IFwKLSAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemVvZih0eXBlKSk7IFwKLSAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAotICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAotICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOyBcCi0gICAgfSBcCi0gICAgcHRyID0gKHR5cGUqKShzdGF0ZS0+ZGF0YV9zdGFjaythbGxvY19wb3MpOyBcCi0gICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSArPSBzaXplb2YodHlwZSk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIHR5cGUsIHB0ciwgcG9zKSBcCi1kbyB7IFwKLSAgICBUUkFDRSgoImxvb2tpbmcgdXAgJXMgYXQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgU0ZZKHR5cGUpLCBwb3MpKTsgXAotICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srcG9zKTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBEQVRBX1NUQUNLX1BVU0goc3RhdGUsIGRhdGEsIHNpemUpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiY29weSBkYXRhIGluICVwIHRvICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgIiBcCi0gICAgICAgICAgICIoJSIgUFlfRk9STUFUX1NJWkVfVCAiZClcbiIsIFwKLSAgICAgICAgICAgZGF0YSwgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgc2l6ZSkpOyBcCi0gICAgaWYgKHNpemUgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSkgeyBcCi0gICAgICAgIGludCBqID0gZGF0YV9zdGFja19ncm93KHN0YXRlLCBzaXplKTsgXAotICAgICAgICBpZiAoaiA8IDApIHJldHVybiBqOyBcCi0gICAgICAgIGlmIChjdHhfcG9zICE9IC0xKSBcCi0gICAgICAgICAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSwgU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7IFwKLSAgICB9IFwKLSAgICBtZW1jcHkoc3RhdGUtPmRhdGFfc3RhY2src3RhdGUtPmRhdGFfc3RhY2tfYmFzZSwgZGF0YSwgc2l6ZSk7IFwKLSAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlICs9IHNpemU7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgREFUQV9TVEFDS19QT1Aoc3RhdGUsIGRhdGEsIHNpemUsIGRpc2NhcmQpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiY29weSBkYXRhIHRvICVwIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAotICAgIG1lbWNweShkYXRhLCBzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpOyBcCi0gICAgaWYgKGRpc2NhcmQpIFwKLSAgICAgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIHNpemUpIFwKLWRvIHsgXAotICAgIFRSQUNFKCgiZGlzY2FyZCBkYXRhIGZyb20gJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAiIFwKLSAgICAgICAgICAgIiglIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwgXAotICAgICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLXNpemUsIHNpemUpKTsgXAotICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgLT0gc2l6ZTsgXAotfSB3aGlsZSgwKQotCi0jZGVmaW5lIERBVEFfUFVTSCh4KSBcCi0gICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSkKLSNkZWZpbmUgREFUQV9QT1AoeCkgXAotICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCAoeCksIHNpemVvZigqKHgpKSwgMSkKLSNkZWZpbmUgREFUQV9QT1BfRElTQ0FSRCh4KSBcCi0gICAgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZW9mKCooeCkpKQotI2RlZmluZSBEQVRBX0FMTE9DKHQscCkgXAotICAgIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHQsIHApCi0jZGVmaW5lIERBVEFfTE9PS1VQX0FUKHQscCxwb3MpIFwKLSAgICBEQVRBX1NUQUNLX0xPT0tVUF9BVChzdGF0ZSx0LHAscG9zKQotCi0jZGVmaW5lIE1BUktfUFVTSChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBpID0gbGFzdG1hcms7IC8qIGN0eC0+bGFzdG1hcmsgbWF5IGNoYW5nZSBpZiByZWFsbG9jYXRlZCAqLyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUFVTSChzdGF0ZSwgc3RhdGUtPm1hcmssIChpKzEpKnNpemVvZih2b2lkKikpOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1AobGFzdG1hcmspIFwKLSAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKLSAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMSk7IFwKLSAgICB9IHdoaWxlICgwKQotI2RlZmluZSBNQVJLX1BPUF9LRUVQKGxhc3RtYXJrKSBcCi0gICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCi0gICAgICAgIERBVEFfU1RBQ0tfUE9QKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGxhc3RtYXJrKzEpKnNpemVvZih2b2lkKiksIDApOyBcCi0gICAgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTUFSS19QT1BfRElTQ0FSRChsYXN0bWFyaykgXAotICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAotICAgICAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKLSAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIEpVTVBfTk9ORSAgICAgICAgICAgIDAKLSNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMSAgICAgMQotI2RlZmluZSBKVU1QX01BWF9VTlRJTF8yICAgICAyCi0jZGVmaW5lIEpVTVBfTUFYX1VOVElMXzMgICAgIDMKLSNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMSAgICAgNAotI2RlZmluZSBKVU1QX01JTl9VTlRJTF8yICAgICA1Ci0jZGVmaW5lIEpVTVBfTUlOX1VOVElMXzMgICAgIDYKLSNkZWZpbmUgSlVNUF9SRVBFQVQgICAgICAgICAgNwotI2RlZmluZSBKVU1QX1JFUEVBVF9PTkVfMSAgICA4Ci0jZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8yICAgIDkKLSNkZWZpbmUgSlVNUF9NSU5fUkVQRUFUX09ORSAgMTAKLSNkZWZpbmUgSlVNUF9CUkFOQ0ggICAgICAgICAgMTEKLSNkZWZpbmUgSlVNUF9BU1NFUlQgICAgICAgICAgMTIKLSNkZWZpbmUgSlVNUF9BU1NFUlRfTk9UICAgICAgMTMKLQotI2RlZmluZSBET19KVU1QKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybikgXAotICAgIERBVEFfQUxMT0MoU1JFX01BVENIX0NPTlRFWFQsIG5leHRjdHgpOyBcCi0gICAgbmV4dGN0eC0+bGFzdF9jdHhfcG9zID0gY3R4X3BvczsgXAotICAgIG5leHRjdHgtPmp1bXAgPSBqdW1wdmFsdWU7IFwKLSAgICBuZXh0Y3R4LT5wYXR0ZXJuID0gbmV4dHBhdHRlcm47IFwKLSAgICBjdHhfcG9zID0gYWxsb2NfcG9zOyBcCi0gICAgY3R4ID0gbmV4dGN0eDsgXAotICAgIGdvdG8gZW50cmFuY2U7IFwKLSAgICBqdW1wbGFiZWw6IFwKLSAgICB3aGlsZSAoMCkgLyogZ2NjIGRvZXNuJ3QgbGlrZSBsYWJlbHMgYXQgZW5kIG9mIHNjb3BlcyAqLyBcCi0KLXR5cGVkZWYgc3RydWN0IHsKLSAgICBQeV9zc2l6ZV90IGxhc3RfY3R4X3BvczsKLSAgICBQeV9zc2l6ZV90IGp1bXA7Ci0gICAgY2hhciogcHRyOwotICAgIFNSRV9DT0RFKiBwYXR0ZXJuOwotICAgIFB5X3NzaXplX3QgY291bnQ7Ci0gICAgUHlfc3NpemVfdCBsYXN0bWFyazsKLSAgICBQeV9zc2l6ZV90IGxhc3RpbmRleDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIFNSRV9DT0RFIGNocjsKLSAgICAgICAgU1JFX1JFUEVBVCogcmVwOwotICAgIH0gdTsKLX0gU1JFX01BVENIX0NPTlRFWFQ7Ci0KLS8qIGNoZWNrIGlmIHN0cmluZyBtYXRjaGVzIHRoZSBnaXZlbiBwYXR0ZXJuLiAgcmV0dXJucyA8MCBmb3IKLSAgIGVycm9yLCAwIGZvciBmYWlsdXJlLCBhbmQgMSBmb3Igc3VjY2VzcyAqLwotTE9DQUwoUHlfc3NpemVfdCkKLVNSRV9NQVRDSChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKLXsKLSAgICBjaGFyKiBlbmQgPSAoY2hhciopc3RhdGUtPmVuZDsKLSAgICBQeV9zc2l6ZV90IGFsbG9jX3BvcywgY3R4X3BvcyA9IC0xOwotICAgIFB5X3NzaXplX3QgaSwgcmV0ID0gMDsKLSAgICBQeV9zc2l6ZV90IGp1bXA7Ci0gICAgdW5zaWduZWQgaW50IHNpZ2NvdW50PTA7Ci0KLSAgICBTUkVfTUFUQ0hfQ09OVEVYVCogY3R4OwotICAgIFNSRV9NQVRDSF9DT05URVhUKiBuZXh0Y3R4OwotCi0gICAgVFJBQ0UoKCJ8JXB8JXB8RU5URVJcbiIsIHBhdHRlcm4sIHN0YXRlLT5wdHIpKTsKLQotICAgIERBVEFfQUxMT0MoU1JFX01BVENIX0NPTlRFWFQsIGN0eCk7Ci0gICAgY3R4LT5sYXN0X2N0eF9wb3MgPSAtMTsKLSAgICBjdHgtPmp1bXAgPSBKVU1QX05PTkU7Ci0gICAgY3R4LT5wYXR0ZXJuID0gcGF0dGVybjsKLSAgICBjdHhfcG9zID0gYWxsb2NfcG9zOwotCi1lbnRyYW5jZToKLQotICAgIGN0eC0+cHRyID0gKGNoYXIgKilzdGF0ZS0+cHRyOwotCi0gICAgaWYgKGN0eC0+cGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgewotICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLwotICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gLi4uICovCi0gICAgICAgIGlmIChjdHgtPnBhdHRlcm5bM10gJiYgKGVuZCAtIGN0eC0+cHRyKS9zdGF0ZS0+Y2hhcnNpemUgPCBjdHgtPnBhdHRlcm5bM10pIHsKLSAgICAgICAgICAgIFRSQUNFKCgicmVqZWN0IChnb3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBjaGFycywgIgotICAgICAgICAgICAgICAgICAgICJuZWVkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLAotICAgICAgICAgICAgICAgICAgIChlbmQgLSBjdHgtPnB0cikvc3RhdGUtPmNoYXJzaXplLAotICAgICAgICAgICAgICAgICAgIChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bM10pKTsKLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICB9Ci0gICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMV0gKyAxOwotICAgIH0KLQotICAgIGZvciAoOzspIHsKLSAgICAgICAgKytzaWdjb3VudDsKLSAgICAgICAgaWYgKCgwID09IChzaWdjb3VudCAmIDB4ZmZmKSkgJiYgUHlFcnJfQ2hlY2tTaWduYWxzKCkpCi0gICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX0lOVEVSUlVQVEVEKTsKLQotICAgICAgICBzd2l0Y2ggKCpjdHgtPnBhdHRlcm4rKykgewotCi0gICAgICAgIGNhc2UgU1JFX09QX01BUks6Ci0gICAgICAgICAgICAvKiBzZXQgbWFyayAqLwotICAgICAgICAgICAgLyogPE1BUks+IDxnaWQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVJLICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGlmIChpICYgMSkKLSAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gaS8yICsgMTsKLSAgICAgICAgICAgIGlmIChpID4gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgLyogc3RhdGUtPmxhc3RtYXJrIGlzIHRoZSBoaWdoZXN0IHZhbGlkIGluZGV4IGluIHRoZQotICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tYXJrIGFycmF5LiAgSWYgaXQgaXMgaW5jcmVhc2VkIGJ5IG1vcmUgdGhhbiAxLAotICAgICAgICAgICAgICAgICAgIHRoZSBpbnRlcnZlbmluZyBtYXJrcyBtdXN0IGJlIHNldCB0byBOVUxMIHRvIHNpZ25hbAotICAgICAgICAgICAgICAgICAgIHRoYXQgdGhlc2UgbWFya3MgaGF2ZSBub3QgYmVlbiBlbmNvdW50ZXJlZC4gKi8KLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGogPSBzdGF0ZS0+bGFzdG1hcmsgKyAxOwotICAgICAgICAgICAgICAgIHdoaWxlIChqIDwgaSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmtbaisrXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxhc3RtYXJrID0gaTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXRlLT5tYXJrW2ldID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6Ci0gICAgICAgICAgICAvKiBtYXRjaCBsaXRlcmFsIHN0cmluZyAqLwotICAgICAgICAgICAgLyogPExJVEVSQUw+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSAhPSBjdHgtPnBhdHRlcm5bMF0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgotICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgdGhhdCBpcyBub3QgbGl0ZXJhbCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgICAgIC8qIDxOT1RfTElURVJBTD4gPGNvZGU+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxOT1RfTElURVJBTCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8IChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSA9PSBjdHgtPnBhdHRlcm5bMF0pCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX1NVQ0NFU1M6Ci0gICAgICAgICAgICAvKiBlbmQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U1VDQ0VTU1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQVQ6Ci0gICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiAqLwotICAgICAgICAgICAgLyogPEFUPiA8Y29kZT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFUICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoIVNSRV9BVChzdGF0ZSwgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKQotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9DQVRFR09SWToKLSAgICAgICAgICAgIC8qIG1hdGNoIGF0IGdpdmVuIGNhdGVnb3J5ICovCi0gICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q0FURUdPUlkgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAhc3JlX2NhdGVnb3J5KGN0eC0+cGF0dGVyblswXSwgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FOWToKLSAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIChleGNlcHQgYSBuZXdsaW5lKSAqLwotICAgICAgICAgICAgLyogPEFOWT4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgU1JFX0lTX0xJTkVCUkVBSyhTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSkKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgotICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKi8KLSAgICAgICAgICAgIC8qIDxBTllfQUxMPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZX0FMTFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0lOOgotICAgICAgICAgICAgLyogbWF0Y2ggc2V0IG1lbWJlciAob3Igbm9uX21lbWJlcikgKi8KLSAgICAgICAgICAgIC8qIDxJTj4gPHNraXA+IDxzZXQ+ICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxJTlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybiArIDEsIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKQotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUxfSUdOT1JFICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcihTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApKSAhPSBzdGF0ZS0+bG93ZXIoKmN0eC0+cGF0dGVybikpCi0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKLSAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpID09IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfSU5fSUdOT1JFOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5fSUdOT1JFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kCi0gICAgICAgICAgICAgICAgfHwgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybisxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpKSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICBjdHgtPnB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9KVU1QOgotICAgICAgICBjYXNlIFNSRV9PUF9JTkZPOgotICAgICAgICAgICAgLyoganVtcCBmb3J3YXJkICovCi0gICAgICAgICAgICAvKiA8SlVNUD4gPG9mZnNldD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVAgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfQlJBTkNIOgotICAgICAgICAgICAgLyogYWx0ZXJuYXRpb24gKi8KLSAgICAgICAgICAgIC8qIDxCUkFOQ0g+IDwwPXNraXA+IGNvZGUgPEpVTVA+IC4uLiA8TlVMTD4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEJSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOwotICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICBmb3IgKDsgY3R4LT5wYXR0ZXJuWzBdOyBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfTElURVJBTCAmJgotICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAoU1JFX0NPREUpIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT5wYXR0ZXJuWzJdKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSBTUkVfT1BfSU4gJiYKLSAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgIVNSRV9DSEFSU0VUKGN0eC0+cGF0dGVybiArIDMsIChTUkVfQ09ERSkgU1JFX0NIQVJHRVQoc3RhdGUsIGN0eC0+cHRyLCAwKSkpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX0JSQU5DSCwganVtcF9icmFuY2gsIGN0eC0+cGF0dGVybisxKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICAgICAgTUFSS19QT1BfS0VFUChjdHgtPmxhc3RtYXJrKTsKLSAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKLSAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUX09ORToKLSAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtYXhpbWl6aW5nIHJlZ2V4cCkgKi8KLQotICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCi0gICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5Ci0gICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCi0gICAgICAgICAgICAgICB1c2UgdGhlIE1BWF9SRVBFQVQgb3BlcmF0b3IgKi8KLQotICAgICAgICAgICAgLyogPFJFUEVBVF9PTkU+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8U1VDQ0VTUz4gdGFpbCAqLwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxSRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gKGVuZCAtIGN0eC0+cHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCi0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgcmV0ID0gU1JFX0NPVU5UKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzJdKTsKLSAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0gICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OwotICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplICogY3R4LT5jb3VudDsKLQotICAgICAgICAgICAgLyogd2hlbiB3ZSBhcnJpdmUgaGVyZSwgY291bnQgY29udGFpbnMgdGhlIG51bWJlciBvZgotICAgICAgICAgICAgICAgbWF0Y2hlcywgYW5kIGN0eC0+cHRyIHBvaW50cyB0byB0aGUgdGFpbCBvZiB0aGUgdGFyZ2V0Ci0gICAgICAgICAgICAgICBzdHJpbmcuICBjaGVjayBpZiB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBtYXRjaGVzLAotICAgICAgICAgICAgICAgYW5kIGJhY2t0cmFjayBpZiBub3QuICovCi0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTKSB7Ci0gICAgICAgICAgICAgICAgLyogdGFpbCBpcyBlbXB0eS4gIHdlJ3JlIGZpbmlzaGVkICovCi0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfTElURVJBTCkgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgc3RhcnRzIHdpdGggYSBsaXRlcmFsLiBza2lwIHBvc2l0aW9ucyB3aGVyZQotICAgICAgICAgICAgICAgICAgIHRoZSByZXN0IG9mIHRoZSBwYXR0ZXJuIGNhbm5vdCBwb3NzaWJseSBtYXRjaCAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5jaHIgPSBjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdKzFdOwotICAgICAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGN0eC0+cHRyID49IGVuZCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkgIT0gY3R4LT51LmNocikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyIC09IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8xLCBqdW1wX3JlcGVhdF9vbmVfMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLQotICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciAtPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSkgewotICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9SRVBFQVRfT05FXzIsIGp1bXBfcmVwZWF0X29uZV8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyIC09IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudC0tOwotICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWluaW1pemluZyByZWdleHApICovCi0KLSAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcwotICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQotICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAotICAgICAgICAgICAgICAgdXNlIHRoZSBNSU5fUkVQRUFUIG9wZXJhdG9yICovCi0KLSAgICAgICAgICAgIC8qIDxNSU5fUkVQRUFUX09ORT4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxTVUNDRVNTPiB0YWlsICovCi0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9SRVBFQVRfT05FICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIGlmICgoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdID4gKGVuZCAtIGN0eC0+cHRyKSAvIHN0YXRlLT5jaGFyc2l6ZSkKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCi0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSAwKQotICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSAwOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogY291bnQgdXNpbmcgcGF0dGVybiBtaW4gYXMgdGhlIG1heGltdW0gKi8KLSAgICAgICAgICAgICAgICByZXQgPSBTUkVfQ09VTlQoc3RhdGUsIGN0eC0+cGF0dGVybiszLCBjdHgtPnBhdHRlcm5bMV0pOwotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgICAgIGlmIChyZXQgPCAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdKQotICAgICAgICAgICAgICAgICAgICAvKiBkaWRuJ3QgbWF0Y2ggbWluaW11bSBudW1iZXIgb2YgdGltZXMgKi8KLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgLyogYWR2YW5jZSBwYXN0IG1pbmltdW0gbWF0Y2hlcyBvZiByZXBlYXQgKi8KLSAgICAgICAgICAgICAgICBjdHgtPmNvdW50ID0gcmV0OwotICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIC8qIHRhaWwgaXMgZW1wdHkuICB3ZSdyZSBmaW5pc2hlZCAqLwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBnZW5lcmFsIGNhc2UgKi8KLSAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSA9PSBTUkVfTUFYUkVQRUFUCi0gICAgICAgICAgICAgICAgICAgICAgIHx8IGN0eC0+Y291bnQgPD0gKFB5X3NzaXplX3QpY3R4LT5wYXR0ZXJuWzJdKSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9SRVBFQVRfT05FLGp1bXBfbWluX3JlcGVhdF9vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgICAgICByZXQgPSBTUkVfQ09VTlQoc3RhdGUsIGN0eC0+cGF0dGVybiszLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIERBVEFfTE9PS1VQX0FUKFNSRV9NQVRDSF9DT05URVhULCBjdHgsIGN0eF9wb3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSAxKTsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50Kys7Ci0gICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9SRVBFQVQ6Ci0gICAgICAgICAgICAvKiBjcmVhdGUgcmVwZWF0IGNvbnRleHQuICBhbGwgdGhlIGhhcmQgd29yayBpcyBkb25lCi0gICAgICAgICAgICAgICBieSB0aGUgVU5USUwgb3BlcmF0b3IgKE1BWF9VTlRJTCwgTUlOX1VOVElMKSAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxVTlRJTD4gdGFpbCAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUICVkICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblsxXSwgY3R4LT5wYXR0ZXJuWzJdKSk7Ci0KLSAgICAgICAgICAgIC8qIGluc3RhbGwgbmV3IHJlcGVhdCBjb250ZXh0ICovCi0gICAgICAgICAgICBjdHgtPnUucmVwID0gKFNSRV9SRVBFQVQqKSBQeU9iamVjdF9NQUxMT0Moc2l6ZW9mKCpjdHgtPnUucmVwKSk7Ci0gICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSAtMTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4gPSBjdHgtPnBhdHRlcm47Ci0gICAgICAgICAgICBjdHgtPnUucmVwLT5wcmV2ID0gc3RhdGUtPnJlcGVhdDsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gTlVMTDsKLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFULCBqdW1wX3JlcGVhdCwgY3R4LT5wYXR0ZXJuK2N0eC0+cGF0dGVyblswXSk7Ci0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKLSAgICAgICAgICAgIFB5T2JqZWN0X0ZSRUUoY3R4LT51LnJlcCk7Ci0KLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotCi0gICAgICAgIGNhc2UgU1JFX09QX01BWF9VTlRJTDoKLSAgICAgICAgICAgIC8qIG1heGltaXppbmcgcmVwZWF0ICovCi0gICAgICAgICAgICAvKiA8UkVQRUFUPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPE1BWF9VTlRJTD4gdGFpbCAqLwotCi0gICAgICAgICAgICAvKiBGSVhNRTogd2UgcHJvYmFibHkgbmVlZCB0byBkZWFsIHdpdGggemVyby13aWR0aAotICAgICAgICAgICAgICAgbWF0Y2hlcyBpbiBoZXJlLi4uICovCi0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OwotICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQotICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOwotCi0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0KLSAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOwotCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNQVhfVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50KSk7Ci0KLSAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKLSAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7Ci0gICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8xLCBqdW1wX21heF91bnRpbF8xLAotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsyXSB8fAotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVCkgJiYKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyICE9IGN0eC0+dS5yZXAtPmxhc3RfcHRyKSB7Ci0gICAgICAgICAgICAgICAgLyogd2UgbWF5IGhhdmUgZW5vdWdoIG1hdGNoZXMsIGJ1dCBpZiB3ZSBjYW4KLSAgICAgICAgICAgICAgICAgICBtYXRjaCBhbm90aGVyIGl0ZW0sIGRvIHNvICovCi0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLSAgICAgICAgICAgICAgICBNQVJLX1BVU0goY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7Ci0gICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+bGFzdF9wdHIgPSBzdGF0ZS0+cHRyOwotICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMiwganVtcF9tYXhfdW50aWxfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7Ci0gICAgICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgICAgICBpZiAocmV0KSB7Ci0gICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTUFSS19QT1AoY3R4LT5sYXN0bWFyayk7Ci0gICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyogY2Fubm90IG1hdGNoIG1vcmUgcmVwZWF0ZWQgaXRlbXMgaGVyZS4gIG1ha2Ugc3VyZSB0aGUKLSAgICAgICAgICAgICAgIHRhaWwgbWF0Y2hlcyAqLwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7Ci0gICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzMsIGp1bXBfbWF4X3VudGlsXzMsIGN0eC0+cGF0dGVybik7Ci0gICAgICAgICAgICBSRVRVUk5fT05fU1VDQ0VTUyhyZXQpOwotICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICBjYXNlIFNSRV9PUF9NSU5fVU5USUw6Ci0gICAgICAgICAgICAvKiBtaW5pbWl6aW5nIHJlcGVhdCAqLwotICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNSU5fVU5USUw+IHRhaWwgKi8KLQotICAgICAgICAgICAgY3R4LT51LnJlcCA9IHN0YXRlLT5yZXBlYXQ7Ci0gICAgICAgICAgICBpZiAoIWN0eC0+dS5yZXApCi0gICAgICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9TVEFURSk7Ci0KLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgY3R4LT5jb3VudCA9IGN0eC0+dS5yZXAtPmNvdW50KzE7Ci0KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1JTl9VTlRJTCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICVwXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+Y291bnQsIGN0eC0+dS5yZXAtPnBhdHRlcm4pKTsKLQotICAgICAgICAgICAgaWYgKGN0eC0+Y291bnQgPCAoUHlfc3NpemVfdCkgY3R4LT51LnJlcC0+cGF0dGVyblsxXSkgewotICAgICAgICAgICAgICAgIC8qIG5vdCBlbm91Z2ggbWF0Y2hlcyAqLwotICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzEsIGp1bXBfbWluX3VudGlsXzEsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKLSAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7Ci0gICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKLQotICAgICAgICAgICAgLyogc2VlIGlmIHRoZSB0YWlsIG1hdGNoZXMgKi8KLSAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OwotICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8yLCBqdW1wX21pbl91bnRpbF8yLCBjdHgtPnBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOwotICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKLQotICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOwotCi0gICAgICAgICAgICBpZiAoKGN0eC0+Y291bnQgPj0gKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0KLSAgICAgICAgICAgICAgICAmJiBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdICE9IFNSRV9NQVhSRVBFQVQpIHx8Ci0gICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9PSBjdHgtPnUucmVwLT5sYXN0X3B0cikKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLQotICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OwotICAgICAgICAgICAgLyogemVyby13aWR0aCBtYXRjaCBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICBEQVRBX1BVU0goJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMyxqdW1wX21pbl91bnRpbF8zLAotICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOwotICAgICAgICAgICAgREFUQV9QT1AoJmN0eC0+dS5yZXAtPmxhc3RfcHRyKTsKLSAgICAgICAgICAgIGlmIChyZXQpIHsKLSAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOwotICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUY6Ci0gICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRiAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKLSAgICAgICAgICAgIGkgPSBjdHgtPnBhdHRlcm5bMF07Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBncm91cHJlZiA9IGkraTsKLSAgICAgICAgICAgICAgICBpZiAoZ3JvdXByZWYgPj0gc3RhdGUtPmxhc3RtYXJrKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIHAgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKLSAgICAgICAgICAgICAgICAgICAgY2hhciogZSA9IChjaGFyKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocCA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUkdFVChzdGF0ZSwgY3R4LT5wdHIsIDApICE9IFNSRV9DSEFSR0VUKHN0YXRlLCBwLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHAgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRl9JR05PUkU6Ci0gICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCi0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRl9JR05PUkUgJWRcbiIsIGN0eC0+cGF0dGVybiwKLSAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7Ci0gICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOwotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7Ci0gICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFyKiBwID0gKGNoYXIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIGNoYXIqIGUgPSAoY2hhciopIHN0YXRlLT5tYXJrW2dyb3VwcmVmKzFdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXAgfHwgIWUgfHwgZSA8IHApCi0gICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHAgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBjdHgtPnB0ciwgMCkpICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKFNSRV9DSEFSR0VUKHN0YXRlLCBwLCAwKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUZfRVhJU1RTOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUZfRVhJU1RTICVkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOwotICAgICAgICAgICAgLyogPEdST1VQUkVGX0VYSVNUUz4gPGdyb3VwPiA8c2tpcD4gY29kZXllcyA8SlVNUD4gY29kZW5vIC4uLiAqLwotICAgICAgICAgICAgaSA9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGdyb3VwcmVmID0gaStpOwotICAgICAgICAgICAgICAgIGlmIChncm91cHJlZiA+PSBzdGF0ZS0+bGFzdG1hcmspIHsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIHAgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZl07Ci0gICAgICAgICAgICAgICAgICAgIFNSRV9DSEFSKiBlID0gKFNSRV9DSEFSKikgc3RhdGUtPm1hcmtbZ3JvdXByZWYrMV07Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcCB8fCAhZSB8fCBlIDwgcCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IDI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlQ6Ci0gICAgICAgICAgICAvKiBhc3NlcnQgc3VicGF0dGVybiAqLwotICAgICAgICAgICAgLyogPEFTU0VSVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyIDwgc3RhdGUtPmJlZ2lubmluZykKLSAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKLSAgICAgICAgICAgIERPX0pVTVAoSlVNUF9BU1NFUlQsIGp1bXBfYXNzZXJ0LCBjdHgtPnBhdHRlcm4rMik7Ci0gICAgICAgICAgICBSRVRVUk5fT05fRkFJTFVSRShyZXQpOwotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVF9OT1Q6Ci0gICAgICAgICAgICAvKiBhc3NlcnQgbm90IHN1YnBhdHRlcm4gKi8KLSAgICAgICAgICAgIC8qIDxBU1NFUlRfTk9UPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUX05PVCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAotICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMV0pKTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIHN0YXRlLT5jaGFyc2l6ZSAqIGN0eC0+cGF0dGVyblsxXTsKLSAgICAgICAgICAgIGlmIChzdGF0ZS0+cHRyID49IHN0YXRlLT5iZWdpbm5pbmcpIHsKLSAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfQVNTRVJUX05PVCwganVtcF9hc3NlcnRfbm90LCBjdHgtPnBhdHRlcm4rMik7Ci0gICAgICAgICAgICAgICAgaWYgKHJldCkgewotICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKLSAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6Ci0gICAgICAgICAgICAvKiBpbW1lZGlhdGUgZmFpbHVyZSAqLwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8RkFJTFVSRVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFVOS05PV04gJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWy0xXSkpOwotICAgICAgICAgICAgUkVUVVJOX0VSUk9SKFNSRV9FUlJPUl9JTExFR0FMKTsKLSAgICAgICAgfQotICAgIH0KLQotZXhpdDoKLSAgICBjdHhfcG9zID0gY3R4LT5sYXN0X2N0eF9wb3M7Ci0gICAganVtcCA9IGN0eC0+anVtcDsKLSAgICBEQVRBX1BPUF9ESVNDQVJEKGN0eCk7Ci0gICAgaWYgKGN0eF9wb3MgPT0gLTEpCi0gICAgICAgIHJldHVybiByZXQ7Ci0gICAgREFUQV9MT09LVVBfQVQoU1JFX01BVENIX0NPTlRFWFQsIGN0eCwgY3R4X3Bvcyk7Ci0KLSAgICBzd2l0Y2ggKGp1bXApIHsKLSAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8yOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8yOwotICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzM6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8zXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzM7Ci0gICAgICAgIGNhc2UgSlVNUF9NSU5fVU5USUxfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1VOVElMXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9taW5fdW50aWxfMjsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8zOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfM1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8zOwotICAgICAgICBjYXNlIEpVTVBfQlJBTkNIOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9CUkFOQ0hcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9icmFuY2g7Ci0gICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzFcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMTsKLSAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8xOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8xOwotICAgICAgICBjYXNlIEpVTVBfUkVQRUFUOgotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXQ7Ci0gICAgICAgIGNhc2UgSlVNUF9SRVBFQVRfT05FXzE6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVF9PTkVfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdF9vbmVfMTsKLSAgICAgICAgY2FzZSBKVU1QX1JFUEVBVF9PTkVfMjoKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUX09ORV8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0X29uZV8yOwotICAgICAgICBjYXNlIEpVTVBfTUlOX1JFUEVBVF9PTkU6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9SRVBFQVRfT05FXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7Ci0gICAgICAgICAgICBnb3RvIGp1bXBfbWluX3JlcGVhdF9vbmU7Ci0gICAgICAgIGNhc2UgSlVNUF9BU1NFUlQ6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOwotICAgICAgICAgICAgZ290byBqdW1wX2Fzc2VydDsKLSAgICAgICAgY2FzZSBKVU1QX0FTU0VSVF9OT1Q6Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0FTU0VSVF9OT1RcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKLSAgICAgICAgICAgIGdvdG8ganVtcF9hc3NlcnRfbm90OwotICAgICAgICBjYXNlIEpVTVBfTk9ORToKLSAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFVFVSTiAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLCBjdHgtPnBhdHRlcm4sCi0gICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIHJldCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJldDsgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCi19Ci0KLUxPQ0FMKFB5X3NzaXplX3QpCi1TUkVfU0VBUkNIKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQotewotICAgIGNoYXIqIHB0ciA9IChjaGFyKilzdGF0ZS0+c3RhcnQ7Ci0gICAgY2hhciogZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgUHlfc3NpemVfdCBzdGF0dXMgPSAwOwotICAgIFB5X3NzaXplX3QgcHJlZml4X2xlbiA9IDA7Ci0gICAgUHlfc3NpemVfdCBwcmVmaXhfc2tpcCA9IDA7Ci0gICAgU1JFX0NPREUqIHByZWZpeCA9IE5VTEw7Ci0gICAgU1JFX0NPREUqIGNoYXJzZXQgPSBOVUxMOwotICAgIFNSRV9DT0RFKiBvdmVybGFwID0gTlVMTDsKLSAgICBpbnQgZmxhZ3MgPSAwOwotCi0gICAgaWYgKHBhdHRlcm5bMF0gPT0gU1JFX09QX0lORk8pIHsKLSAgICAgICAgLyogb3B0aW1pemF0aW9uIGluZm8gYmxvY2sgKi8KLSAgICAgICAgLyogPElORk8+IDwxPXNraXA+IDwyPWZsYWdzPiA8Mz1taW4+IDw0PW1heD4gPDU9cHJlZml4IGluZm8+ICAqLwotCi0gICAgICAgIGZsYWdzID0gcGF0dGVyblsyXTsKLQotICAgICAgICBpZiAocGF0dGVyblszXSA+IDEpIHsKLSAgICAgICAgICAgIC8qIGFkanVzdCBlbmQgcG9pbnQgKGJ1dCBtYWtlIHN1cmUgd2UgbGVhdmUgYXQgbGVhc3Qgb25lCi0gICAgICAgICAgICAgICBjaGFyYWN0ZXIgaW4gdGhlcmUsIHNvIGxpdGVyYWwgc2VhcmNoIHdpbGwgd29yaykgKi8KLSAgICAgICAgICAgIGVuZCAtPSAocGF0dGVyblszXS0xKSAqIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChlbmQgPD0gcHRyKQotICAgICAgICAgICAgICAgIGVuZCA9IHB0ciArIHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX1BSRUZJWCkgewotICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGtub3duIHByZWZpeCAqLwotICAgICAgICAgICAgLyogPGxlbmd0aD4gPHNraXA+IDxwcmVmaXggZGF0YT4gPG92ZXJsYXAgZGF0YT4gKi8KLSAgICAgICAgICAgIHByZWZpeF9sZW4gPSBwYXR0ZXJuWzVdOwotICAgICAgICAgICAgcHJlZml4X3NraXAgPSBwYXR0ZXJuWzZdOwotICAgICAgICAgICAgcHJlZml4ID0gcGF0dGVybiArIDc7Ci0gICAgICAgICAgICBvdmVybGFwID0gcHJlZml4ICsgcHJlZml4X2xlbiAtIDE7Ci0gICAgICAgIH0gZWxzZSBpZiAoZmxhZ3MgJiBTUkVfSU5GT19DSEFSU0VUKQotICAgICAgICAgICAgLyogcGF0dGVybiBzdGFydHMgd2l0aCBhIGNoYXJhY3RlciBmcm9tIGEga25vd24gc2V0ICovCi0gICAgICAgICAgICAvKiA8Y2hhcnNldD4gKi8KLSAgICAgICAgICAgIGNoYXJzZXQgPSBwYXR0ZXJuICsgNTsKLQotICAgICAgICBwYXR0ZXJuICs9IDEgKyBwYXR0ZXJuWzFdOwotICAgIH0KLQotICAgIFRSQUNFKCgicHJlZml4ID0gJXAgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkXG4iLAotICAgICAgICAgICBwcmVmaXgsIHByZWZpeF9sZW4sIHByZWZpeF9za2lwKSk7Ci0gICAgVFJBQ0UoKCJjaGFyc2V0ID0gJXBcbiIsIGNoYXJzZXQpKTsKLQotI2lmIGRlZmluZWQoVVNFX0ZBU1RfU0VBUkNIKQotICAgIGlmIChwcmVmaXhfbGVuID4gMSkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4LiAgdXNlIHRoZSBvdmVybGFwCi0gICAgICAgICAgIHRhYmxlIHRvIHNraXAgZm9yd2FyZCBhcyBmYXN0IGFzIHdlIHBvc3NpYmx5IGNhbiAqLwotICAgICAgICBQeV9zc2l6ZV90IGkgPSAwOwotICAgICAgICBlbmQgPSAoY2hhciAqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKLSAgICAgICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBwcmVmaXhbaV0pIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgrK2kgPT0gcHJlZml4X2xlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgLyogZm91bmQgYSBwb3RlbnRpYWwgbWF0Y2ggKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBTQ0FOXG4iLCBwYXR0ZXJuLCBwdHIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0ciAtIChwcmVmaXhfbGVuIC0gMSkgKiBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyIC0gKHByZWZpeF9sZW4gLSBwcmVmaXhfc2tpcCAtIDEpICogc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuICsgMipwcmVmaXhfc2tpcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXR1czsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGJ1dCBubyBjaWdhciAtLSB0cnkgYWdhaW4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBvdmVybGFwW2ldOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfTElURVJBTCkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuICB0aGlzIGlzIHVzZWQKLSAgICAgICAgICAgZm9yIHNob3J0IHByZWZpeGVzLCBhbmQgaWYgZmFzdCBzZWFyY2ggaXMgZGlzYWJsZWQgKi8KLSAgICAgICAgU1JFX0NPREUgY2hyID0gcGF0dGVyblsxXTsKLSAgICAgICAgZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBTUkVfQ0hBUkdFVChzdGF0ZSwgcHRyLCAwKSAhPSBjaHIpCi0gICAgICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIExJVEVSQUxcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOwotICAgICAgICAgICAgcHRyICs9IHN0YXRlLT5jaGFyc2l6ZTsKLSAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHI7Ci0gICAgICAgICAgICBpZiAoZmxhZ3MgJiBTUkVfSU5GT19MSVRFUkFMKQotICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiB3ZSBnb3QgYWxsIG9mIGl0ICovCi0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4gKyAyKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoY2hhcnNldCkgewotICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KLSAgICAgICAgZW5kID0gKGNoYXIqKXN0YXRlLT5lbmQ7Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgIVNSRV9DSEFSU0VUKGNoYXJzZXQsIFNSRV9DSEFSR0VUKHN0YXRlLCBwdHIsIDApKSkKLSAgICAgICAgICAgICAgICBwdHIgKz0gc3RhdGUtPmNoYXJzaXplOwotICAgICAgICAgICAgaWYgKHB0ciA+PSBlbmQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggQ0hBUlNFVFxuIiwgcGF0dGVybiwgcHRyKSk7Ci0gICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBwdHI7Ci0gICAgICAgICAgICBzdGF0ZS0+cHRyID0gcHRyOwotICAgICAgICAgICAgc3RhdHVzID0gU1JFX01BVENIKHN0YXRlLCBwYXR0ZXJuKTsKLSAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCi0gICAgICAgIHdoaWxlIChwdHIgPD0gZW5kKSB7Ci0gICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0hcbiIsIHBhdHRlcm4sIHB0cikpOwotICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gc3RhdGUtPnB0ciA9IHB0cjsKLSAgICAgICAgICAgIHB0ciArPSBzdGF0ZS0+Y2hhcnNpemU7Ci0gICAgICAgICAgICBzdGF0dXMgPSBTUkVfTUFUQ0goc3RhdGUsIHBhdHRlcm4pOwotICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICByZXR1cm4gc3RhdHVzOwotfQotCi0jaWYgIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkKKyNkZWZpbmUgU1JFX0NIQVIgUHlfVUNTNAorI2RlZmluZSBTSVpFT0ZfU1JFX0NIQVIgNAorI2RlZmluZSBTUkUoRikgc3JlX3VjczRfIyNGCisjaW5jbHVkZSAic3JlX2xpYi5oIgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogZmFjdG9yaWVzIGFuZCBkZXN0cnVjdG9ycyAqLwogCiAvKiBzZWUgc3JlLmggZm9yIG9iamVjdCBkZWNsYXJhdGlvbnMgKi8KLXN0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiwgU1JFX1NUQVRFKiwgaW50KTsKK3N0YXRpYyBQeU9iamVjdCpwYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiwgU1JFX1NUQVRFKiwgUHlfc3NpemVfdCk7CiBzdGF0aWMgUHlPYmplY3QqcGF0dGVybl9zY2FubmVyKFBhdHRlcm5PYmplY3QqLCBQeU9iamVjdCosIFB5T2JqZWN0KiBrdyk7CiAKLXN0YXRpYyBpbnQKLXNyZV9saXRlcmFsX3RlbXBsYXRlKGludCBjaGFyc2l6ZSwgY2hhciogcHRyLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICAvKiBjaGVjayBpZiBnaXZlbiBzdHJpbmcgaXMgYSBsaXRlcmFsIHRlbXBsYXRlIChpLmUuIG5vIGVzY2FwZXMpICovCi0gICAgc3RydWN0IHsKLSAgICAgICAgaW50IGNoYXJzaXplOwotICAgIH0gc3RhdGUgPSB7Ci0gICAgICAgIGNoYXJzaXplCi0gICAgfTsKLSAgICB3aGlsZSAobGVuLS0gPiAwKSB7Ci0gICAgICAgIGlmIChTUkVfQ0hBUkdFVCgoJnN0YXRlKSwgcHRyLCAwKSA9PSAnXFwnKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHB0ciArPSBjaGFyc2l6ZTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KIHN0YXRpYyBQeU9iamVjdCAqCiBzcmVfY29kZXNpemUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICp1bnVzZWQpCiB7CkBAIC0xNjY1LDcyICszMDgsNDEgQEAKIAogc3RhdGljIHZvaWQqCiBnZXRzdHJpbmcoUHlPYmplY3QqIHN0cmluZywgUHlfc3NpemVfdCogcF9sZW5ndGgsCi0gICAgICAgICAgaW50KiBwX2xvZ2ljYWxfY2hhcnNpemUsIGludCogcF9jaGFyc2l6ZSwKKyAgICAgICAgICBpbnQqIHBfaXNieXRlcywgaW50KiBwX2NoYXJzaXplLAogICAgICAgICAgIFB5X2J1ZmZlciAqdmlldykKIHsKICAgICAvKiBnaXZlbiBhIHB5dGhvbiBvYmplY3QsIHJldHVybiBhIGRhdGEgcG9pbnRlciwgYSBsZW5ndGggKGluCiAgICAgICAgY2hhcmFjdGVycyksIGFuZCBhIGNoYXJhY3RlciBzaXplLiAgcmV0dXJuIE5VTEwgaWYgdGhlIG9iamVjdAogICAgICAgIGlzIG5vdCBhIHN0cmluZyAob3Igbm90IGNvbXBhdGlibGUpICovCiAKLSAgICBQeUJ1ZmZlclByb2NzICpidWZmZXI7Ci0gICAgUHlfc3NpemVfdCBzaXplLCBieXRlczsKLSAgICBpbnQgY2hhcnNpemU7Ci0gICAgdm9pZCogcHRyOwotCiAgICAgLyogVW5pY29kZSBvYmplY3RzIGRvIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgQVBJLiBTbywgZ2V0IHRoZSBkYXRhCiAgICAgICAgZGlyZWN0bHkgaW5zdGVhZC4gKi8KICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHN0cmluZykpIHsKICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHJpbmcpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHB0ciA9IFB5VW5pY29kZV9EQVRBKHN0cmluZyk7CiAgICAgICAgICpwX2xlbmd0aCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZyk7CiAgICAgICAgICpwX2NoYXJzaXplID0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKTsKLSAgICAgICAgKnBfbG9naWNhbF9jaGFyc2l6ZSA9IDQ7Ci0gICAgICAgIHJldHVybiBwdHI7CisgICAgICAgICpwX2lzYnl0ZXMgPSAwOworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RBVEEoc3RyaW5nKTsKICAgICB9CiAKICAgICAvKiBnZXQgcG9pbnRlciB0byBieXRlIHN0cmluZyBidWZmZXIgKi8KLSAgICB2aWV3LT5sZW4gPSAtMTsKLSAgICBidWZmZXIgPSBQeV9UWVBFKHN0cmluZyktPnRwX2FzX2J1ZmZlcjsKLSAgICBpZiAoIWJ1ZmZlciB8fCAhYnVmZmVyLT5iZl9nZXRidWZmZXIgfHwKLSAgICAgICAgKCpidWZmZXItPmJmX2dldGJ1ZmZlcikoc3RyaW5nLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHN0cmluZyBvciBidWZmZXIiKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3RyaW5nLCB2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgImV4cGVjdGVkIHN0cmluZyBvciBidWZmZXIiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgLyogZGV0ZXJtaW5lIGJ1ZmZlciBzaXplICovCi0gICAgYnl0ZXMgPSB2aWV3LT5sZW47Ci0gICAgcHRyID0gdmlldy0+YnVmOworICAgICpwX2xlbmd0aCA9IHZpZXctPmxlbjsKKyAgICAqcF9jaGFyc2l6ZSA9IDE7CisgICAgKnBfaXNieXRlcyA9IDE7CiAKLSAgICBpZiAoYnl0ZXMgPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJidWZmZXIgaGFzIG5lZ2F0aXZlIHNpemUiKTsKLSAgICAgICAgZ290byBlcnI7CisgICAgaWYgKHZpZXctPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiQnVmZmVyIGlzIE5VTEwiKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSh2aWV3KTsKKyAgICAgICAgdmlldy0+YnVmID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotCi0gICAgLyogZGV0ZXJtaW5lIGNoYXJhY3RlciBzaXplICovCi0gICAgc2l6ZSA9IFB5T2JqZWN0X1NpemUoc3RyaW5nKTsKLQotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHN0cmluZykgfHwgYnl0ZXMgPT0gc2l6ZSkKLSAgICAgICAgY2hhcnNpemUgPSAxOwotICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiYnVmZmVyIHNpemUgbWlzbWF0Y2giKTsKLSAgICAgICAgZ290byBlcnI7Ci0gICAgfQotCi0gICAgKnBfbGVuZ3RoID0gc2l6ZTsKLSAgICAqcF9jaGFyc2l6ZSA9IGNoYXJzaXplOwotICAgICpwX2xvZ2ljYWxfY2hhcnNpemUgPSBjaGFyc2l6ZTsKLQotICAgIGlmIChwdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkJ1ZmZlciBpcyBOVUxMIik7Ci0gICAgICAgICAgICBnb3RvIGVycjsKLSAgICB9Ci0gICAgcmV0dXJuIHB0cjsKLSAgZXJyOgotICAgIFB5QnVmZmVyX1JlbGVhc2Uodmlldyk7Ci0gICAgdmlldy0+YnVmID0gTlVMTDsKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gdmlldy0+YnVmOwogfQogCiBMT0NBTChQeU9iamVjdCopCkBAIC0xNzQwLDcgKzM1Miw3IEBACiAgICAgLyogcHJlcGFyZSBzdGF0ZSBvYmplY3QgKi8KIAogICAgIFB5X3NzaXplX3QgbGVuZ3RoOwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplLCBjaGFyc2l6ZTsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CiAgICAgdm9pZCogcHRyOwogCiAgICAgbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoU1JFX1NUQVRFKSk7CkBAIC0xNzQ5LDE2ICszNjEsMTYgQEAKICAgICBzdGF0ZS0+bGFzdGluZGV4ID0gLTE7CiAKICAgICBzdGF0ZS0+YnVmZmVyLmJ1ZiA9IE5VTEw7Ci0gICAgcHRyID0gZ2V0c3RyaW5nKHN0cmluZywgJmxlbmd0aCwgJmxvZ2ljYWxfY2hhcnNpemUsICZjaGFyc2l6ZSwgJnN0YXRlLT5idWZmZXIpOworICAgIHB0ciA9IGdldHN0cmluZyhzdHJpbmcsICZsZW5ndGgsICZpc2J5dGVzLCAmY2hhcnNpemUsICZzdGF0ZS0+YnVmZmVyKTsKICAgICBpZiAoIXB0cikKICAgICAgICAgZ290byBlcnI7CiAKLSAgICBpZiAobG9naWNhbF9jaGFyc2l6ZSA9PSAxICYmIHBhdHRlcm4tPmxvZ2ljYWxfY2hhcnNpemUgPiAxKSB7CisgICAgaWYgKGlzYnl0ZXMgJiYgcGF0dGVybi0+aXNieXRlcyA9PSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgdXNlIGEgc3RyaW5nIHBhdHRlcm4gb24gYSBieXRlcy1saWtlIG9iamVjdCIpOwogICAgICAgICBnb3RvIGVycjsKICAgICB9Ci0gICAgaWYgKGxvZ2ljYWxfY2hhcnNpemUgPiAxICYmIHBhdHRlcm4tPmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgeworICAgIGlmICghaXNieXRlcyAmJiBwYXR0ZXJuLT5pc2J5dGVzID4gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhbid0IHVzZSBhIGJ5dGVzIHBhdHRlcm4gb24gYSBzdHJpbmctbGlrZSBvYmplY3QiKTsKICAgICAgICAgZ290byBlcnI7CkBAIC0xNzc1LDcgKzM4Nyw3IEBACiAgICAgZWxzZSBpZiAoZW5kID4gbGVuZ3RoKQogICAgICAgICBlbmQgPSBsZW5ndGg7CiAKLSAgICBzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9IGxvZ2ljYWxfY2hhcnNpemU7CisgICAgc3RhdGUtPmlzYnl0ZXMgPSBpc2J5dGVzOwogICAgIHN0YXRlLT5jaGFyc2l6ZSA9IGNoYXJzaXplOwogCiAgICAgc3RhdGUtPmJlZ2lubmluZyA9IHB0cjsKQEAgLTE4MTYsNiArNDI4LDI0IEBACiAgICAgKCgoY2hhciopKG1lbWJlcikgLSAoY2hhciopKHN0YXRlKS0+YmVnaW5uaW5nKSAvIChzdGF0ZSktPmNoYXJzaXplKQogCiBMT0NBTChQeU9iamVjdCopCitnZXRzbGljZShpbnQgaXNieXRlcywgY29uc3Qgdm9pZCAqcHRyLAorICAgICAgICAgUHlPYmplY3QqIHN0cmluZywgUHlfc3NpemVfdCBzdGFydCwgUHlfc3NpemVfdCBlbmQpCit7CisgICAgaWYgKGlzYnl0ZXMpIHsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChzdHJpbmcpICYmCisgICAgICAgICAgICBzdGFydCA9PSAwICYmIGVuZCA9PSBQeUJ5dGVzX0dFVF9TSVpFKHN0cmluZykpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIHN0cmluZzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgKKyAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKXB0ciArIHN0YXJ0LCBlbmQgLSBzdGFydCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICByZXR1cm4gUHlVbmljb2RlX1N1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQpOworICAgIH0KK30KKworTE9DQUwoUHlPYmplY3QqKQogc3RhdGVfZ2V0c2xpY2UoU1JFX1NUQVRFKiBzdGF0ZSwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QqIHN0cmluZywgaW50IGVtcHR5KQogewogICAgIFB5X3NzaXplX3QgaSwgajsKQEAgLTE4MzUsMTEgKzQ2NSwxMSBAQAogICAgICAgICBqID0gU1RBVEVfT0ZGU0VUKHN0YXRlLCBzdGF0ZS0+bWFya1tpbmRleCsxXSk7CiAgICAgfQogCi0gICAgcmV0dXJuIFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBqKTsKKyAgICByZXR1cm4gZ2V0c2xpY2Uoc3RhdGUtPmlzYnl0ZXMsIHN0YXRlLT5iZWdpbm5pbmcsIHN0cmluZywgaSwgaik7CiB9CiAKIHN0YXRpYyB2b2lkCi1wYXR0ZXJuX2Vycm9yKGludCBzdGF0dXMpCitwYXR0ZXJuX2Vycm9yKFB5X3NzaXplX3Qgc3RhdHVzKQogewogICAgIHN3aXRjaCAoc3RhdHVzKSB7CiAgICAgY2FzZSBTUkVfRVJST1JfUkVDVVJTSU9OX0xJTUlUOgpAQCAtMTg2OCwxNSArNDk4LDM1IEBACiB7CiAgICAgaWYgKHNlbGYtPndlYWtyZWZsaXN0ICE9IE5VTEwpCiAgICAgICAgIFB5T2JqZWN0X0NsZWFyV2Vha1JlZnMoKFB5T2JqZWN0ICopIHNlbGYpOwotICAgIGlmIChzZWxmLT52aWV3LmJ1ZikKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+dmlldyk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5wYXR0ZXJuKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPmdyb3VwaW5kZXgpOwogICAgIFB5X1hERUNSRUYoc2VsZi0+aW5kZXhncm91cCk7CiAgICAgUHlPYmplY3RfREVMKHNlbGYpOwogfQogCi1zdGF0aWMgUHlPYmplY3QqCitMT0NBTChQeV9zc2l6ZV90KQorc3JlX21hdGNoKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuLCBpbnQgbWF0Y2hfYWxsKQoreworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMSkKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MxX21hdGNoKHN0YXRlLCBwYXR0ZXJuLCBtYXRjaF9hbGwpOworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMikKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MyX21hdGNoKHN0YXRlLCBwYXR0ZXJuLCBtYXRjaF9hbGwpOworICAgIGFzc2VydChzdGF0ZS0+Y2hhcnNpemUgPT0gNCk7CisgICAgcmV0dXJuIHNyZV91Y3M0X21hdGNoKHN0YXRlLCBwYXR0ZXJuLCBtYXRjaF9hbGwpOworfQorCitMT0NBTChQeV9zc2l6ZV90KQorc3JlX3NlYXJjaChTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ09ERSogcGF0dGVybikKK3sKKyAgICBpZiAoc3RhdGUtPmNoYXJzaXplID09IDEpCisgICAgICAgIHJldHVybiBzcmVfdWNzMV9zZWFyY2goc3RhdGUsIHBhdHRlcm4pOworICAgIGlmIChzdGF0ZS0+Y2hhcnNpemUgPT0gMikKKyAgICAgICAgcmV0dXJuIHNyZV91Y3MyX3NlYXJjaChzdGF0ZSwgcGF0dGVybik7CisgICAgYXNzZXJ0KHN0YXRlLT5jaGFyc2l6ZSA9PSA0KTsKKyAgICByZXR1cm4gc3JlX3VjczRfc2VhcmNoKHN0YXRlLCBwYXR0ZXJuKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIGZpeF9zdHJpbmdfcGFyYW0oUHlPYmplY3QgKnN0cmluZywgUHlPYmplY3QgKnN0cmluZzIsIGNvbnN0IGNoYXIgKm9sZG5hbWUpCiB7CiAgICAgaWYgKHN0cmluZzIgIT0gTlVMTCkgewpAQCAtMTkwMCwxNyArNTUwLDU0IEBACiAgICAgcmV0dXJuIHN0cmluZzsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3BhdHRlcm5fbWF0Y2goUGF0dGVybk9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJzdHJpbmciLCAicG9zIiwgImVuZHBvcyIsICJwYXR0ZXJuIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBwb3MgPSAwOworICAgIFB5X3NzaXplX3QgZW5kcG9zID0gUFlfU1NJWkVfVF9NQVg7CisgICAgUHlPYmplY3QgKnBhdHRlcm4gPSBOVUxMOworICAgIFNSRV9TVEFURSBzdGF0ZTsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgInxPbm4kTzptYXRjaCIsIF9rZXl3b3JkcywKKyAgICAgICAgJnN0cmluZywgJnBvcywgJmVuZHBvcywgJnBhdHRlcm4pKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzdHJpbmcgPSBmaXhfc3RyaW5nX3BhcmFtKHN0cmluZywgcGF0dGVybiwgInBhdHRlcm4iKTsKKyAgICBpZiAoIXN0cmluZykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgc3RyaW5nID0gc3RhdGVfaW5pdCgmc3RhdGUsIChQYXR0ZXJuT2JqZWN0ICopc2VsZiwgc3RyaW5nLCBwb3MsIGVuZHBvcyk7CisgICAgaWYgKCFzdHJpbmcpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CisKKyAgICBUUkFDRSgoInwlcHwlcHxNQVRDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKKworICAgIHN0YXR1cyA9IHNyZV9tYXRjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgMCk7CisKKyAgICBUUkFDRSgoInwlcHwlcHxFTkRcbiIsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSwgc3RhdGUucHRyKSk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3RhdGVfZmluaSgmc3RhdGUpOworCisgICAgcmV0dXJuIChQeU9iamVjdCAqKXBhdHRlcm5fbmV3X21hdGNoKHNlbGYsICZzdGF0ZSwgc3RhdHVzKTsKK30KKwogc3RhdGljIFB5T2JqZWN0KgotcGF0dGVybl9tYXRjaChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQorcGF0dGVybl9mdWxsbWF0Y2goUGF0dGVybk9iamVjdCogc2VsZiwgUHlPYmplY3QqIGFyZ3MsIFB5T2JqZWN0KiBrdykKIHsKICAgICBTUkVfU1RBVEUgc3RhdGU7Ci0gICAgaW50IHN0YXR1czsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKIAogICAgIFB5T2JqZWN0ICpzdHJpbmcgPSBOVUxMLCAqc3RyaW5nMiA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBzdGFydCA9IDA7CiAgICAgUHlfc3NpemVfdCBlbmQgPSBQWV9TU0laRV9UX01BWDsKICAgICBzdGF0aWMgY2hhcioga3dsaXN0W10gPSB7ICJzdHJpbmciLCAicG9zIiwgImVuZHBvcyIsICJwYXR0ZXJuIiwgTlVMTCB9OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifE9ubiRPOm1hdGNoIiwga3dsaXN0LAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAifE9ubiRPOmZ1bGxtYXRjaCIsIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyaW5nLCAmc3RhcnQsICZlbmQsICZzdHJpbmcyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE5MjQsMTMgKzYxMSw5IEBACiAKICAgICBzdGF0ZS5wdHIgPSBzdGF0ZS5zdGFydDsKIAotICAgIFRSQUNFKCgifCVwfCVwfE1BVENIXG4iLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZiksIHN0YXRlLnB0cikpOworICAgIFRSQUNFKCgifCVwfCVwfEZVTExNQVRDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIAotICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX21hdGNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdGF0dXMgPSBzcmVfdW1hdGNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICB9CisgICAgc3RhdHVzID0gc3JlX21hdGNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCAxKTsKIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTE5NDUsNyArNjI4LDcgQEAKIHBhdHRlcm5fc2VhcmNoKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAKICAgICBQeU9iamVjdCAqc3RyaW5nID0gTlVMTCwgKnN0cmluZzIgPSBOVUxMOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwpAQCAtMTk2NSwxMSArNjQ4LDcgQEAKIAogICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIAotICAgIGlmIChzdGF0ZS5sb2dpY2FsX2NoYXJzaXplID09IDEpIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwotICAgIH0KKyAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKIAogICAgIFRSQUNFKCgifCVwfCVwfEVORFxuIiwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpLCBzdGF0ZS5wdHIpKTsKIApAQCAtMjAyOSw1OSArNzA4LDExIEBACiAjZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0Kgotam9pbl9saXN0KFB5T2JqZWN0KiBsaXN0LCBQeU9iamVjdCogc3RyaW5nKQotewotICAgIC8qIGpvaW4gbGlzdCBlbGVtZW50cyAqLwotCi0gICAgUHlPYmplY3QqIGpvaW5lcjsKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAxMDYwMDAwCi0gICAgUHlPYmplY3QqIGZ1bmN0aW9uOwotICAgIFB5T2JqZWN0KiBhcmdzOwotI2VuZGlmCi0gICAgUHlPYmplY3QqIHJlc3VsdDsKLQotICAgIGpvaW5lciA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCAwLCAwKTsKLSAgICBpZiAoIWpvaW5lcikKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoUHlMaXN0X0dFVF9TSVpFKGxpc3QpID09IDApIHsKLSAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICByZXR1cm4gam9pbmVyOwotICAgIH0KLQotI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDEwNjAwMDAKLSAgICBmdW5jdGlvbiA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoam9pbmVyLCAiam9pbiIpOwotICAgIGlmICghZnVuY3Rpb24pIHsKLSAgICAgICAgUHlfREVDUkVGKGpvaW5lcik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBhcmdzID0gUHlUdXBsZV9OZXcoMSk7Ci0gICAgaWYgKCFhcmdzKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihmdW5jdGlvbik7Ci0gICAgICAgIFB5X0RFQ1JFRihqb2luZXIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzLCAwLCBsaXN0KTsKLSAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGZ1bmN0aW9uLCBhcmdzKTsKLSAgICBQeV9ERUNSRUYoYXJncyk7IC8qIGFsc28gcmVtb3ZlcyBsaXN0ICovCi0gICAgUHlfREVDUkVGKGZ1bmN0aW9uKTsKLSNlbHNlCi0gICAgcmVzdWx0ID0gY2FsbCgKLSAgICAgICAgInN0cmluZyIsICJqb2luIiwKLSAgICAgICAgUHlUdXBsZV9QYWNrKDIsIGxpc3QsIGpvaW5lcikKLSAgICAgICAgKTsKLSNlbmRpZgotICAgIFB5X0RFQ1JFRihqb2luZXIpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9maW5kYWxsKFBhdHRlcm5PYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CiAgICAgU1JFX1NUQVRFIHN0YXRlOwogICAgIFB5T2JqZWN0KiBsaXN0OwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CiAgICAgUHlfc3NpemVfdCBpLCBiLCBlOwogCiAgICAgUHlPYmplY3QgKnN0cmluZyA9IE5VTEwsICpzdHJpbmcyID0gTlVMTDsKQEAgLTIxMTQsMTIgKzc0NSw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMTM1LDcgKzc2MSw4IEBACiAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgIGIgPSBTVEFURV9PRkZTRVQoJnN0YXRlLCBzdGF0ZS5zdGFydCk7CiAgICAgICAgICAgICBlID0gU1RBVEVfT0ZGU0VUKCZzdGF0ZSwgc3RhdGUucHRyKTsKLSAgICAgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgYiwgZSk7CisgICAgICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgYiwgZSk7CiAgICAgICAgICAgICBpZiAoIWl0ZW0pCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjE4MSw3ICs4MDgsNiBAQAogCiB9CiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwCiBzdGF0aWMgUHlPYmplY3QqCiBwYXR0ZXJuX2ZpbmRpdGVyKFBhdHRlcm5PYmplY3QqIHBhdHRlcm4sIFB5T2JqZWN0KiBhcmdzLCBQeU9iamVjdCoga3cpCiB7CkBAIC0yMjAzLDcgKzgyOSw2IEBACiAKICAgICByZXR1cm4gaXRlcmF0b3I7CiB9Ci0jZW5kaWYKIAogc3RhdGljIFB5T2JqZWN0KgogcGF0dGVybl9zcGxpdChQYXR0ZXJuT2JqZWN0KiBzZWxmLCBQeU9iamVjdCogYXJncywgUHlPYmplY3QqIGt3KQpAQCAtMjIxMSw3ICs4MzYsNyBAQAogICAgIFNSRV9TVEFURSBzdGF0ZTsKICAgICBQeU9iamVjdCogbGlzdDsKICAgICBQeU9iamVjdCogaXRlbTsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOwogICAgIFB5X3NzaXplX3QgbjsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgdm9pZCogbGFzdDsKQEAgLTIyNDYsMTIgKzg3MSw3IEBACiAKICAgICAgICAgc3RhdGUucHRyID0gc3RhdGUuc3RhcnQ7CiAKLSAgICAgICAgaWYgKHN0YXRlLmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICAgICAgc3RhdHVzID0gc3JlX3NlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfdXNlYXJjaCgmc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmKSk7Ci0gICAgICAgIH0KLQorICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogCkBAIC0yMjYzLDcgKzg4Myw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoc3RhdGUuc3RhcnQgPT0gc3RhdGUucHRyKSB7Ci0gICAgICAgICAgICBpZiAobGFzdCA9PSBzdGF0ZS5lbmQpCisgICAgICAgICAgICBpZiAobGFzdCA9PSBzdGF0ZS5lbmQgfHwgc3RhdGUucHRyID09IHN0YXRlLmVuZCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIC8qIHNraXAgb25lIGNoYXJhY3RlciAqLwogICAgICAgICAgICAgc3RhdGUuc3RhcnQgPSAodm9pZCopICgoY2hhciopIHN0YXRlLnB0ciArIHN0YXRlLmNoYXJzaXplKTsKQEAgLTIyNzEsNyArODkxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIGdldCBzZWdtZW50IGJlZm9yZSB0aGlzIG1hdGNoICovCi0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKAorICAgICAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAogICAgICAgICAgICAgc3RyaW5nLCBTVEFURV9PRkZTRVQoJnN0YXRlLCBsYXN0KSwKICAgICAgICAgICAgIFNUQVRFX09GRlNFVCgmc3RhdGUsIHN0YXRlLnN0YXJ0KQogICAgICAgICAgICAgKTsKQEAgLTIzMDAsNyArOTIwLDcgQEAKICAgICB9CiAKICAgICAvKiBnZXQgc2VnbWVudCBmb2xsb3dpbmcgbGFzdCBtYXRjaCAoZXZlbiBpZiBlbXB0eSkgKi8KLSAgICBpdGVtID0gUHlTZXF1ZW5jZV9HZXRTbGljZSgKKyAgICBpdGVtID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLAogICAgICAgICBzdHJpbmcsIFNUQVRFX09GRlNFVCgmc3RhdGUsIGxhc3QpLCBzdGF0ZS5lbmRwb3MKICAgICAgICAgKTsKICAgICBpZiAoIWl0ZW0pCkBAIC0yMzI2LDE1ICs5NDYsMTYgQEAKIHsKICAgICBTUkVfU1RBVEUgc3RhdGU7CiAgICAgUHlPYmplY3QqIGxpc3Q7CisgICAgUHlPYmplY3QqIGpvaW5lcjsKICAgICBQeU9iamVjdCogaXRlbTsKICAgICBQeU9iamVjdCogZmlsdGVyOwogICAgIFB5T2JqZWN0KiBhcmdzOwogICAgIFB5T2JqZWN0KiBtYXRjaDsKICAgICB2b2lkKiBwdHI7Ci0gICAgaW50IHN0YXR1czsKKyAgICBQeV9zc2l6ZV90IHN0YXR1czsKICAgICBQeV9zc2l6ZV90IG47CiAgICAgUHlfc3NpemVfdCBpLCBiLCBlOwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplLCBjaGFyc2l6ZTsKKyAgICBpbnQgaXNieXRlcywgY2hhcnNpemU7CiAgICAgaW50IGZpbHRlcl9pc19jYWxsYWJsZTsKICAgICBQeV9idWZmZXIgdmlldzsKIApAQCAtMjM0NywxMCArOTY4LDEzIEBACiAgICAgICAgIC8qIGlmIG5vdCBjYWxsYWJsZSwgY2hlY2sgaWYgaXQncyBhIGxpdGVyYWwgc3RyaW5nICovCiAgICAgICAgIGludCBsaXRlcmFsOwogICAgICAgICB2aWV3LmJ1ZiA9IE5VTEw7Ci0gICAgICAgIHB0ciA9IGdldHN0cmluZyhwdGVtcGxhdGUsICZuLCAmbG9naWNhbF9jaGFyc2l6ZSwgJmNoYXJzaXplLCAmdmlldyk7CisgICAgICAgIHB0ciA9IGdldHN0cmluZyhwdGVtcGxhdGUsICZuLCAmaXNieXRlcywgJmNoYXJzaXplLCAmdmlldyk7CiAgICAgICAgIGIgPSBjaGFyc2l6ZTsKICAgICAgICAgaWYgKHB0cikgewotICAgICAgICAgICAgbGl0ZXJhbCA9IHNyZV9saXRlcmFsX3RlbXBsYXRlKGIsIHB0ciwgbik7CisgICAgICAgICAgICBpZiAoY2hhcnNpemUgPT0gMSkKKyAgICAgICAgICAgICAgICBsaXRlcmFsID0gbWVtY2hyKHB0ciwgJ1xcJywgbikgPT0gTlVMTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsaXRlcmFsID0gUHlVbmljb2RlX0ZpbmRDaGFyKHB0ZW1wbGF0ZSwgJ1xcJywgMCwgbiwgMSkgPT0gLTE7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgbGl0ZXJhbCA9IDA7CkBAIC0yMzk0LDEyICsxMDE4LDcgQEAKIAogICAgICAgICBzdGF0ZS5wdHIgPSBzdGF0ZS5zdGFydDsKIAotICAgICAgICBpZiAoc3RhdGUubG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBzcmVfc2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHNyZV91c2VhcmNoKCZzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYpKTsKLSAgICAgICAgfQotCisgICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goJnN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZikpOwogICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKQEAgLTI0MTUsNyArMTAzNCw4IEBACiAKICAgICAgICAgaWYgKGkgPCBiKSB7CiAgICAgICAgICAgICAvKiBnZXQgc2VnbWVudCBiZWZvcmUgdGhpcyBtYXRjaCAqLwotICAgICAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfR2V0U2xpY2Uoc3RyaW5nLCBpLCBiKTsKKyAgICAgICAgICAgIGl0ZW0gPSBnZXRzbGljZShzdGF0ZS5pc2J5dGVzLCBzdGF0ZS5iZWdpbm5pbmcsCisgICAgICAgICAgICAgICAgc3RyaW5nLCBpLCBiKTsKICAgICAgICAgICAgIGlmICghaXRlbSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgc3RhdHVzID0gUHlMaXN0X0FwcGVuZChsaXN0LCBpdGVtKTsKQEAgLTI0NjEsNiArMTA4MSw4IEBACiAKIG5leHQ6CiAgICAgICAgIC8qIG1vdmUgb24gKi8KKyAgICAgICAgaWYgKHN0YXRlLnB0ciA9PSBzdGF0ZS5lbmQpCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKHN0YXRlLnB0ciA9PSBzdGF0ZS5zdGFydCkKICAgICAgICAgICAgIHN0YXRlLnN0YXJ0ID0gKHZvaWQqKSAoKGNoYXIqKSBzdGF0ZS5wdHIgKyBzdGF0ZS5jaGFyc2l6ZSk7CiAgICAgICAgIGVsc2UKQEAgLTI0NzAsNyArMTA5Miw4IEBACiAKICAgICAvKiBnZXQgc2VnbWVudCBmb2xsb3dpbmcgbGFzdCBtYXRjaCAqLwogICAgIGlmIChpIDwgc3RhdGUuZW5kcG9zKSB7Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0dldFNsaWNlKHN0cmluZywgaSwgc3RhdGUuZW5kcG9zKTsKKyAgICAgICAgaXRlbSA9IGdldHNsaWNlKHN0YXRlLmlzYnl0ZXMsIHN0YXRlLmJlZ2lubmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgaSwgc3RhdGUuZW5kcG9zKTsKICAgICAgICAgaWYgKCFpdGVtKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgc3RhdHVzID0gUHlMaXN0X0FwcGVuZChsaXN0LCBpdGVtKTsKQEAgLTI0ODQsMTAgKzExMDcsMjUgQEAKICAgICBQeV9ERUNSRUYoZmlsdGVyKTsKIAogICAgIC8qIGNvbnZlcnQgbGlzdCB0byBzaW5nbGUgc3RyaW5nIChhbHNvIHJlbW92ZXMgbGlzdCkgKi8KLSAgICBpdGVtID0gam9pbl9saXN0KGxpc3QsIHN0cmluZyk7Ci0KLSAgICBpZiAoIWl0ZW0pCisgICAgam9pbmVyID0gZ2V0c2xpY2Uoc3RhdGUuaXNieXRlcywgc3RhdGUuYmVnaW5uaW5nLCBzdHJpbmcsIDAsIDApOworICAgIGlmICgham9pbmVyKSB7CisgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeUxpc3RfR0VUX1NJWkUobGlzdCkgPT0gMCkgeworICAgICAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgICAgIGl0ZW0gPSBqb2luZXI7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoc3RhdGUuaXNieXRlcykKKyAgICAgICAgICAgIGl0ZW0gPSBfUHlCeXRlc19Kb2luKGpvaW5lciwgbGlzdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGl0ZW0gPSBQeVVuaWNvZGVfSm9pbihqb2luZXIsIGxpc3QpOworICAgICAgICBQeV9ERUNSRUYoam9pbmVyKTsKKyAgICAgICAgUHlfREVDUkVGKGxpc3QpOworICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICBpZiAoc3VibikKICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5uIiwgaXRlbSwgbik7CkBAIC0yNTgxLDEwICsxMjE5LDk0IEBACiAjZW5kaWYKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3BhdHRlcm5fcmVwcihQYXR0ZXJuT2JqZWN0ICpvYmopCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgIGludCB2YWx1ZTsKKyAgICB9IGZsYWdfbmFtZXNbXSA9IHsKKyAgICAgICAgeyJyZS5URU1QTEFURSIsIFNSRV9GTEFHX1RFTVBMQVRFfSwKKyAgICAgICAgeyJyZS5JR05PUkVDQVNFIiwgU1JFX0ZMQUdfSUdOT1JFQ0FTRX0sCisgICAgICAgIHsicmUuTE9DQUxFIiwgU1JFX0ZMQUdfTE9DQUxFfSwKKyAgICAgICAgeyJyZS5NVUxUSUxJTkUiLCBTUkVfRkxBR19NVUxUSUxJTkV9LAorICAgICAgICB7InJlLkRPVEFMTCIsIFNSRV9GTEFHX0RPVEFMTH0sCisgICAgICAgIHsicmUuVU5JQ09ERSIsIFNSRV9GTEFHX1VOSUNPREV9LAorICAgICAgICB7InJlLlZFUkJPU0UiLCBTUkVfRkxBR19WRVJCT1NFfSwKKyAgICAgICAgeyJyZS5ERUJVRyIsIFNSRV9GTEFHX0RFQlVHfSwKKyAgICAgICAgeyJyZS5BU0NJSSIsIFNSRV9GTEFHX0FTQ0lJfSwKKyAgICB9OworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmbGFnX2l0ZW1zOworICAgIGludCBpOworICAgIGludCBmbGFncyA9IG9iai0+ZmxhZ3M7CisKKyAgICAvKiBPbWl0IHJlLlVOSUNPREUgZm9yIHZhbGlkIHN0cmluZyBwYXR0ZXJucy4gKi8KKyAgICBpZiAob2JqLT5pc2J5dGVzID09IDAgJiYKKyAgICAgICAgKGZsYWdzICYgKFNSRV9GTEFHX0xPQ0FMRXxTUkVfRkxBR19VTklDT0RFfFNSRV9GTEFHX0FTQ0lJKSkgPT0KKyAgICAgICAgIFNSRV9GTEFHX1VOSUNPREUpCisgICAgICAgIGZsYWdzICY9IH5TUkVfRkxBR19VTklDT0RFOworCisgICAgZmxhZ19pdGVtcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKCFmbGFnX2l0ZW1zKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBQeV9BUlJBWV9MRU5HVEgoZmxhZ19uYW1lcyk7IGkrKykgeworICAgICAgICBpZiAoZmxhZ3MgJiBmbGFnX25hbWVzW2ldLnZhbHVlKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGZsYWdfbmFtZXNbaV0ubmFtZSk7CisgICAgICAgICAgICBpZiAoIWl0ZW0pCisgICAgICAgICAgICAgICAgZ290byBkb25lOworCisgICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChmbGFnX2l0ZW1zLCBpdGVtKSA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOworICAgICAgICAgICAgZmxhZ3MgJj0gfmZsYWdfbmFtZXNbaV0udmFsdWU7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGZsYWdzKSB7CisgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjB4JXgiLCBmbGFncyk7CisgICAgICAgIGlmICghaXRlbSkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChmbGFnX2l0ZW1zLCBpdGVtKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgfQorCisgICAgaWYgKFB5TGlzdF9TaXplKGZsYWdfaXRlbXMpID4gMCkgeworICAgICAgICBQeU9iamVjdCAqZmxhZ3NfcmVzdWx0OworICAgICAgICBQeU9iamVjdCAqc2VwID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoInwiKTsKKyAgICAgICAgaWYgKCFzZXApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIGZsYWdzX3Jlc3VsdCA9IFB5VW5pY29kZV9Kb2luKHNlcCwgZmxhZ19pdGVtcyk7CisgICAgICAgIFB5X0RFQ1JFRihzZXApOworICAgICAgICBpZiAoIWZsYWdzX3Jlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInJlLmNvbXBpbGUoJS4yMDBSLCAlUykiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmotPnBhdHRlcm4sIGZsYWdzX3Jlc3VsdCk7CisgICAgICAgIFB5X0RFQ1JFRihmbGFnc19yZXN1bHQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoInJlLmNvbXBpbGUoJS4yMDBSKSIsIG9iai0+cGF0dGVybik7CisgICAgfQorCitkb25lOgorICAgIFB5X0RFQ1JFRihmbGFnX2l0ZW1zKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBQeURvY19TVFJWQVIocGF0dGVybl9tYXRjaF9kb2MsCiAibWF0Y2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAogICAgIE1hdGNoZXMgemVybyBvciBtb3JlIGNoYXJhY3RlcnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyaW5nIik7CiAKK1B5RG9jX1NUUlZBUihwYXR0ZXJuX2Z1bGxtYXRjaF9kb2MsCisiZnVsbG1hdGNoKHN0cmluZ1ssIHBvc1ssIGVuZHBvc11dKSAtPiBtYXRjaCBvYmplY3Qgb3IgTm9uZS5cblwKKyAgICBNYXRjaGVzIGFnYWluc3QgYWxsIG9mIHRoZSBzdHJpbmciKTsKKwogUHlEb2NfU1RSVkFSKHBhdHRlcm5fc2VhcmNoX2RvYywKICJzZWFyY2goc3RyaW5nWywgcG9zWywgZW5kcG9zXV0pIC0+IG1hdGNoIG9iamVjdCBvciBOb25lLlxuXAogICAgIFNjYW4gdGhyb3VnaCBzdHJpbmcgbG9va2luZyBmb3IgYSBtYXRjaCwgYW5kIHJldHVybiBhIGNvcnJlc3BvbmRpbmdcblwKQEAgLTI2MjAsNiArMTM0Miw4IEBACiBzdGF0aWMgUHlNZXRob2REZWYgcGF0dGVybl9tZXRob2RzW10gPSB7CiAgICAgeyJtYXRjaCIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9tYXRjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fbWF0Y2hfZG9jfSwKKyAgICB7ImZ1bGxtYXRjaCIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9mdWxsbWF0Y2gsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAorICAgICAgICBwYXR0ZXJuX2Z1bGxtYXRjaF9kb2N9LAogICAgIHsic2VhcmNoIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX3NlYXJjaCwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fc2VhcmNoX2RvY30sCiAgICAgeyJzdWIiLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fc3ViLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKQEAgLTI2MzAsMTAgKzEzNTQsOCBAQAogICAgICAgICBwYXR0ZXJuX3NwbGl0X2RvY30sCiAgICAgeyJmaW5kYWxsIiwgKFB5Q0Z1bmN0aW9uKSBwYXR0ZXJuX2ZpbmRhbGwsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAogICAgICAgICBwYXR0ZXJuX2ZpbmRhbGxfZG9jfSwKLSNpZiBQWV9WRVJTSU9OX0hFWCA+PSAweDAyMDIwMDAwCiAgICAgeyJmaW5kaXRlciIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9maW5kaXRlciwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCiAgICAgICAgIHBhdHRlcm5fZmluZGl0ZXJfZG9jfSwKLSNlbmRpZgogICAgIHsic2Nhbm5lciIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9zY2FubmVyLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCiAgICAgeyJfX2NvcHlfXyIsIChQeUNGdW5jdGlvbikgcGF0dGVybl9jb3B5LCBNRVRIX05PQVJHU30sCiAgICAgeyJfX2RlZXBjb3B5X18iLCAoUHlDRnVuY3Rpb24pIHBhdHRlcm5fZGVlcGNvcHksIE1FVEhfT30sCkBAIC0yNjU4LDcgKzEzODAsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVzZXJ2ZWQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgKHJlcHJmdW5jKXBhdHRlcm5fcmVwciwgICAgICAgICAgICAgLyogdHBfcmVwciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX251bWJlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLwpAQCAtMjcxMSw3ICsxNDMzLDYgQEAKICAgICBzZWxmLT5wYXR0ZXJuID0gTlVMTDsKICAgICBzZWxmLT5ncm91cGluZGV4ID0gTlVMTDsKICAgICBzZWxmLT5pbmRleGdyb3VwID0gTlVMTDsKLSAgICBzZWxmLT52aWV3LmJ1ZiA9IE5VTEw7CiAKICAgICBzZWxmLT5jb2Rlc2l6ZSA9IG47CiAKQEAgLTI3MzIsMTYgKzE0NTMsMjAgQEAKICAgICB9CiAKICAgICBpZiAocGF0dGVybiA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIHNlbGYtPmxvZ2ljYWxfY2hhcnNpemUgPSAtMTsKLSAgICAgICAgc2VsZi0+Y2hhcnNpemUgPSAtMTsKKyAgICAgICAgc2VsZi0+aXNieXRlcyA9IC0xOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfc3NpemVfdCBwX2xlbmd0aDsKLSAgICAgICAgaWYgKCFnZXRzdHJpbmcocGF0dGVybiwgJnBfbGVuZ3RoLCAmc2VsZi0+bG9naWNhbF9jaGFyc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgJnNlbGYtPmNoYXJzaXplLCAmc2VsZi0+dmlldykpIHsKKyAgICAgICAgaW50IGNoYXJzaXplOworICAgICAgICBQeV9idWZmZXIgdmlldzsKKyAgICAgICAgdmlldy5idWYgPSBOVUxMOworICAgICAgICBpZiAoIWdldHN0cmluZyhwYXR0ZXJuLCAmcF9sZW5ndGgsICZzZWxmLT5pc2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAmY2hhcnNpemUsICZ2aWV3KSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKHZpZXcuYnVmKQorICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgfQogCiAgICAgUHlfSU5DUkVGKHBhdHRlcm4pOwpAQCAtMjgyNyw3ICsxNTUyLDcgQEAKICAgICAgICAgc2tpcCA9ICpjb2RlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBWVFJBQ0UoKCIlbHUgKHNraXAgdG8gJXApXG4iLCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylza2lwLCBjb2RlK3NraXApKTsgICAgICAgIFwKLSAgICAgICAgaWYgKHNraXAtYWRqID4gZW5kLWNvZGUpICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoc2tpcC1hZGogPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkgICAgICBcCiAgICAgICAgICAgICBGQUlMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgY29kZSsrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCkBAIC0yODU5LDggKzE1ODQsOCBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBTUkVfT1BfQ0hBUlNFVDoKLSAgICAgICAgICAgIG9mZnNldCA9IDMyL3NpemVvZihTUkVfQ09ERSk7IC8qIDMyLWJ5dGUgYml0bWFwICovCi0gICAgICAgICAgICBpZiAob2Zmc2V0ID4gZW5kLWNvZGUpCisgICAgICAgICAgICBvZmZzZXQgPSAyNTYvU1JFX0NPREVfQklUUzsgLyogMjU2LWJpdCBiaXRtYXAgKi8KKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgY29kZSArPSBvZmZzZXQ7CiAgICAgICAgICAgICBicmVhazsKQEAgLTI4NjgsNyArMTU5Myw3IEBACiAgICAgICAgIGNhc2UgU1JFX09QX0JJR0NIQVJTRVQ6CiAgICAgICAgICAgICBHRVRfQVJHOyAvKiBOdW1iZXIgb2YgYmxvY2tzICovCiAgICAgICAgICAgICBvZmZzZXQgPSAyNTYvc2l6ZW9mKFNSRV9DT0RFKTsgLyogMjU2LWJ5dGUgdGFibGUgKi8KLSAgICAgICAgICAgIGlmIChvZmZzZXQgPiBlbmQtY29kZSkKKyAgICAgICAgICAgIGlmIChvZmZzZXQgPiAoUHlfdWludHB0cl90KShlbmQgLSBjb2RlKSkKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgLyogTWFrZSBzdXJlIHRoYXQgZWFjaCBieXRlIHBvaW50cyB0byBhIHZhbGlkIGJsb2NrICovCiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKQEAgLTI4NzYsOCArMTYwMSw4IEBACiAgICAgICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb2RlICs9IG9mZnNldDsKLSAgICAgICAgICAgIG9mZnNldCA9IGFyZyAqIDMyL3NpemVvZihTUkVfQ09ERSk7IC8qIDMyLWJ5dGUgYml0bWFwIHRpbWVzIGFyZyAqLwotICAgICAgICAgICAgaWYgKG9mZnNldCA+IGVuZC1jb2RlKQorICAgICAgICAgICAgb2Zmc2V0ID0gYXJnICogKDI1Ni9TUkVfQ09ERV9CSVRTKTsgLyogMjU2LWJpdCBiaXRtYXAgdGltZXMgYXJnICovCisgICAgICAgICAgICBpZiAob2Zmc2V0ID4gKFB5X3VpbnRwdHJfdCkoZW5kIC0gY29kZSkpCiAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIGNvZGUgKz0gb2Zmc2V0OwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yOTQwLDcgKzE2NjUsNyBAQAogICAgICAgICAgICAgICAgc3JlX21hdGNoKCkgY29kZSBpcyByb2J1c3QgZXZlbiBpZiB0aGV5IGRvbid0LCBhbmQgdGhlIHdvcnN0CiAgICAgICAgICAgICAgICB5b3UgY2FuIGdldCBpcyBub25zZW5zaWNhbCBtYXRjaCByZXN1bHRzLiAqLwogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPiAyKmdyb3VwcysxKSB7CisgICAgICAgICAgICBpZiAoYXJnID4gMiAqIChzaXplX3QpZ3JvdXBzICsgMSkgewogICAgICAgICAgICAgICAgIFZUUkFDRSgoImFyZz0lZCwgZ3JvdXBzPSVkXG4iLCAoaW50KWFyZywgKGludClncm91cHMpKTsKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgfQpAQCAtMzAyOCwxMSArMTc1MywxMSBAQAogICAgICAgICAgICAgICAgICAgICBHRVRfQVJHOyBwcmVmaXhfbGVuID0gYXJnOwogICAgICAgICAgICAgICAgICAgICBHRVRfQVJHOwogICAgICAgICAgICAgICAgICAgICAvKiBIZXJlIGNvbWVzIHRoZSBwcmVmaXggc3RyaW5nICovCi0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gbmV3Y29kZS1jb2RlKQorICAgICAgICAgICAgICAgICAgICBpZiAocHJlZml4X2xlbiA+IChQeV91aW50cHRyX3QpKG5ld2NvZGUgLSBjb2RlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIEZBSUw7CiAgICAgICAgICAgICAgICAgICAgIGNvZGUgKz0gcHJlZml4X2xlbjsKICAgICAgICAgICAgICAgICAgICAgLyogQW5kIGhlcmUgY29tZXMgdGhlIG92ZXJsYXAgdGFibGUgKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBuZXdjb2RlLWNvZGUpCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVmaXhfbGVuID4gKFB5X3VpbnRwdHJfdCkobmV3Y29kZSAtIGNvZGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgICAgICAgICAgLyogRWFjaCBvdmVybGFwIHZhbHVlIHNob3VsZCBiZSA8IHByZWZpeF9sZW4gKi8KICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByZWZpeF9sZW47IGkrKykgewpAQCAtMzEyMyw3ICsxODQ4LDcgQEAKICAgICAgICAgY2FzZSBTUkVfT1BfR1JPVVBSRUY6CiAgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGX0lHTk9SRToKICAgICAgICAgICAgIEdFVF9BUkc7Ci0gICAgICAgICAgICBpZiAoYXJnID49IGdyb3VwcykKKyAgICAgICAgICAgIGlmIChhcmcgPj0gKHNpemVfdClncm91cHMpCiAgICAgICAgICAgICAgICAgRkFJTDsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zMTMyLDcgKzE4NTcsNyBAQAogICAgICAgICAgICAgICAgJ2dyb3VwJyBpcyBlaXRoZXIgYW4gaW50ZWdlciBncm91cCBudW1iZXIgb3IgYSBncm91cCBuYW1lLAogICAgICAgICAgICAgICAgJ3RoZW4nIGFuZCAnZWxzZScgYXJlIHN1Yi1yZWdleGVzLCBhbmQgJ2Vsc2UnIGlzIG9wdGlvbmFsLiAqLwogICAgICAgICAgICAgR0VUX0FSRzsKLSAgICAgICAgICAgIGlmIChhcmcgPj0gZ3JvdXBzKQorICAgICAgICAgICAgaWYgKGFyZyA+PSAoc2l6ZV90KWdyb3VwcykKICAgICAgICAgICAgICAgICBGQUlMOwogICAgICAgICAgICAgR0VUX1NLSVBfQURKKDEpOwogICAgICAgICAgICAgY29kZS0tOyAvKiBUaGUgc2tpcCBpcyByZWxhdGl2ZSB0byB0aGUgZmlyc3QgYXJnISAqLwpAQCAtMzE2MSw3ICsxODg2LDcgQEAKICAgICAgICAgICAgICAgIHRvIGFsbG93IGFyYml0cmFyeSBqdW1wcyBhbnl3aGVyZSBpbiB0aGUgY29kZTsgc28gd2UganVzdCBsb29rCiAgICAgICAgICAgICAgICBmb3IgYSBKVU1QIG9wY29kZSBwcmVjZWRpbmcgb3VyIHNraXAgdGFyZ2V0LgogICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChza2lwID49IDMgJiYgc2tpcC0zIDwgZW5kLWNvZGUgJiYKKyAgICAgICAgICAgIGlmIChza2lwID49IDMgJiYgc2tpcC0zIDwgKFB5X3VpbnRwdHJfdCkoZW5kIC0gY29kZSkgJiYKICAgICAgICAgICAgICAgICBjb2RlW3NraXAtM10gPT0gU1JFX09QX0pVTVApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgVlRSQUNFKCgiYm90aCB0aGVuIGFuZCBlbHNlIHBhcnRzIHByZXNlbnRcbiIpKTsKQEAgLTMyNDUsNiArMTk3MCwxMiBAQAogc3RhdGljIFB5T2JqZWN0KgogbWF0Y2hfZ2V0c2xpY2VfYnlfaW5kZXgoTWF0Y2hPYmplY3QqIHNlbGYsIFB5X3NzaXplX3QgaW5kZXgsIFB5T2JqZWN0KiBkZWYpCiB7CisgICAgUHlfc3NpemVfdCBsZW5ndGg7CisgICAgaW50IGlzYnl0ZXMsIGNoYXJzaXplOworICAgIFB5X2J1ZmZlciB2aWV3OworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgdm9pZCogcHRyOworCiAgICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzZWxmLT5ncm91cHMpIHsKICAgICAgICAgLyogcmFpc2UgSW5kZXhFcnJvciBpZiB3ZSB3ZXJlIGdpdmVuIGEgYmFkIGdyb3VwIG51bWJlciAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoCkBAIC0zMjYyLDkgKzE5OTMsMTQgQEAKICAgICAgICAgcmV0dXJuIGRlZjsKICAgICB9CiAKLSAgICByZXR1cm4gUHlTZXF1ZW5jZV9HZXRTbGljZSgKLSAgICAgICAgc2VsZi0+c3RyaW5nLCBzZWxmLT5tYXJrW2luZGV4XSwgc2VsZi0+bWFya1tpbmRleCsxXQotICAgICAgICApOworICAgIHB0ciA9IGdldHN0cmluZyhzZWxmLT5zdHJpbmcsICZsZW5ndGgsICZpc2J5dGVzLCAmY2hhcnNpemUsICZ2aWV3KTsKKyAgICBpZiAocHRyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IGdldHNsaWNlKGlzYnl0ZXMsIHB0ciwKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5zdHJpbmcsIHNlbGYtPm1hcmtbaW5kZXhdLCBzZWxmLT5tYXJrW2luZGV4KzFdKTsKKyAgICBpZiAoaXNieXRlcyAmJiB2aWV3LmJ1ZiAhPSBOVUxMKQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgUHlfc3NpemVfdApAQCAtMzY4Miw2ICsyNDE4LDIyIEBACiAgICAgICAgIHJldHVybiBtYXRjaF9yZWdzKHNlbGYpOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorbWF0Y2hfcmVwcihNYXRjaE9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIFB5T2JqZWN0ICpncm91cDAgPSBtYXRjaF9nZXRzbGljZV9ieV9pbmRleChzZWxmLCAwLCBQeV9Ob25lKTsKKyAgICBpZiAoZ3JvdXAwID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KAorICAgICAgICAgICAgIjwlcyBvYmplY3Q7IHNwYW49KCVkLCAlZCksIG1hdGNoPSUuNTBSPiIsCisgICAgICAgICAgICBQeV9UWVBFKHNlbGYpLT50cF9uYW1lLAorICAgICAgICAgICAgc2VsZi0+bWFya1swXSwgc2VsZi0+bWFya1sxXSwgZ3JvdXAwKTsKKyAgICBQeV9ERUNSRUYoZ3JvdXAwKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKIHN0YXRpYyBQeUdldFNldERlZiBtYXRjaF9nZXRzZXRbXSA9IHsKICAgICB7Imxhc3RpbmRleCIsIChnZXR0ZXIpbWF0Y2hfbGFzdGluZGV4X2dldCwgKHNldHRlcilOVUxMfSwKICAgICB7Imxhc3Rncm91cCIsIChnZXR0ZXIpbWF0Y2hfbGFzdGdyb3VwX2dldCwgKHNldHRlcilOVUxMfSwKQEAgLTM3MTAsNyArMjQ2Miw3IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldGF0dHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0ciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXByICovCisgICAgKHJlcHJmdW5jKW1hdGNoX3JlcHIsICAgICAgIC8qIHRwX3JlcHIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX3NlcXVlbmNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX21hcHBpbmcgKi8KQEAgLTM3MzQsNyArMjQ4Niw3IEBACiB9OwogCiBzdGF0aWMgUHlPYmplY3QqCi1wYXR0ZXJuX25ld19tYXRjaChQYXR0ZXJuT2JqZWN0KiBwYXR0ZXJuLCBTUkVfU1RBVEUqIHN0YXRlLCBpbnQgc3RhdHVzKQorcGF0dGVybl9uZXdfbWF0Y2goUGF0dGVybk9iamVjdCogcGF0dGVybiwgU1JFX1NUQVRFKiBzdGF0ZSwgUHlfc3NpemVfdCBzdGF0dXMpCiB7CiAgICAgLyogY3JlYXRlIG1hdGNoIG9iamVjdCAoZnJvbSBzdGF0ZSBvYmplY3QpICovCiAKQEAgLTM4MTMsMjcgKzI1NjUsMzAgQEAKIHsKICAgICBTUkVfU1RBVEUqIHN0YXRlID0gJnNlbGYtPnN0YXRlOwogICAgIFB5T2JqZWN0KiBtYXRjaDsKLSAgICBpbnQgc3RhdHVzOworICAgIFB5X3NzaXplX3Qgc3RhdHVzOworCisgICAgaWYgKHN0YXRlLT5zdGFydCA9PSBOVUxMKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIAogICAgIHN0YXRlX3Jlc2V0KHN0YXRlKTsKIAogICAgIHN0YXRlLT5wdHIgPSBzdGF0ZS0+c3RhcnQ7CiAKLSAgICBpZiAoc3RhdGUtPmxvZ2ljYWxfY2hhcnNpemUgPT0gMSkgewotICAgICAgICBzdGF0dXMgPSBzcmVfbWF0Y2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VtYXRjaChzdGF0ZSwgUGF0dGVybk9iamVjdF9HZXRDb2RlKHNlbGYtPnBhdHRlcm4pKTsKLSAgICB9CisgICAgc3RhdHVzID0gc3JlX21hdGNoKHN0YXRlLCBQYXR0ZXJuT2JqZWN0X0dldENvZGUoc2VsZi0+cGF0dGVybiksIDApOwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIG1hdGNoID0gcGF0dGVybl9uZXdfbWF0Y2goKFBhdHRlcm5PYmplY3QqKSBzZWxmLT5wYXR0ZXJuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCBzdGF0dXMpOwogCi0gICAgaWYgKHN0YXR1cyA9PSAwIHx8IHN0YXRlLT5wdHIgPT0gc3RhdGUtPnN0YXJ0KQorICAgIGlmIChzdGF0dXMgPT0gMCkKKyAgICAgICAgc3RhdGUtPnN0YXJ0ID0gTlVMTDsKKyAgICBlbHNlIGlmIChzdGF0ZS0+cHRyICE9IHN0YXRlLT5zdGFydCkKKyAgICAgICAgc3RhdGUtPnN0YXJ0ID0gc3RhdGUtPnB0cjsKKyAgICBlbHNlIGlmIChzdGF0ZS0+cHRyICE9IHN0YXRlLT5lbmQpCiAgICAgICAgIHN0YXRlLT5zdGFydCA9ICh2b2lkKikgKChjaGFyKikgc3RhdGUtPnB0ciArIHN0YXRlLT5jaGFyc2l6ZSk7CiAgICAgZWxzZQotICAgICAgICBzdGF0ZS0+c3RhcnQgPSBzdGF0ZS0+cHRyOworICAgICAgICBzdGF0ZS0+c3RhcnQgPSBOVUxMOwogCiAgICAgcmV0dXJuIG1hdGNoOwogfQpAQCAtMzg0NCwyNyArMjU5OSwzMCBAQAogewogICAgIFNSRV9TVEFURSogc3RhdGUgPSAmc2VsZi0+c3RhdGU7CiAgICAgUHlPYmplY3QqIG1hdGNoOwotICAgIGludCBzdGF0dXM7CisgICAgUHlfc3NpemVfdCBzdGF0dXM7CisKKyAgICBpZiAoc3RhdGUtPnN0YXJ0ID09IE5VTEwpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOwogCiAgICAgc3RhdGVfcmVzZXQoc3RhdGUpOwogCiAgICAgc3RhdGUtPnB0ciA9IHN0YXRlLT5zdGFydDsKIAotICAgIGlmIChzdGF0ZS0+bG9naWNhbF9jaGFyc2l6ZSA9PSAxKSB7Ci0gICAgICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RhdHVzID0gc3JlX3VzZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7Ci0gICAgfQorICAgIHN0YXR1cyA9IHNyZV9zZWFyY2goc3RhdGUsIFBhdHRlcm5PYmplY3RfR2V0Q29kZShzZWxmLT5wYXR0ZXJuKSk7CiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgbWF0Y2ggPSBwYXR0ZXJuX25ld19tYXRjaCgoUGF0dGVybk9iamVjdCopIHNlbGYtPnBhdHRlcm4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHN0YXR1cyk7CiAKLSAgICBpZiAoc3RhdHVzID09IDAgfHwgc3RhdGUtPnB0ciA9PSBzdGF0ZS0+c3RhcnQpCisgICAgaWYgKHN0YXR1cyA9PSAwKQorICAgICAgICBzdGF0ZS0+c3RhcnQgPSBOVUxMOworICAgIGVsc2UgaWYgKHN0YXRlLT5wdHIgIT0gc3RhdGUtPnN0YXJ0KQorICAgICAgICBzdGF0ZS0+c3RhcnQgPSBzdGF0ZS0+cHRyOworICAgIGVsc2UgaWYgKHN0YXRlLT5wdHIgIT0gc3RhdGUtPmVuZCkKICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gKHZvaWQqKSAoKGNoYXIqKSBzdGF0ZS0+cHRyICsgc3RhdGUtPmNoYXJzaXplKTsKICAgICBlbHNlCi0gICAgICAgIHN0YXRlLT5zdGFydCA9IHN0YXRlLT5wdHI7CisgICAgICAgIHN0YXRlLT5zdGFydCA9IE5VTEw7CiAKICAgICByZXR1cm4gbWF0Y2g7CiB9CkBAIC00MDExLDcgKzI3NjksNSBAQAogICAgIHJldHVybiBtOwogfQogCi0jZW5kaWYgLyogIWRlZmluZWQoU1JFX1JFQ1VSU0lWRSkgKi8KLQogLyogdmltOnRzPTQ6c3c9NDpldAogKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NzbC5jIGIvTW9kdWxlcy9fc3NsLmMKaW5kZXggNDk5ZThiYS4uMDI5NzFhNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fc3NsLmMKKysrIGIvTW9kdWxlcy9fc3NsLmMKQEAgLTE0LDYgKzE0LDggQEAKICAgICAgICBodHRwOi8vYnVncy5weXRob24ub3JnL2lzc3VlODEwOCNtc2cxMDI4NjcgPwogKi8KIAorI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisKICNpbmNsdWRlICJQeXRob24uaCIKIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC00Miw2ICs0NCw3MCBAQAogCiAjZW5kaWYKIAorLyogSW5jbHVkZSBzeW1ib2xzIGZyb20gX3NvY2tldCBtb2R1bGUgKi8KKyNpbmNsdWRlICJzb2NrZXRtb2R1bGUuaCIKKworc3RhdGljIFB5U29ja2V0TW9kdWxlX0FQSU9iamVjdCBQeVNvY2tldE1vZHVsZTsKKworI2lmIGRlZmluZWQoSEFWRV9QT0xMX0gpCisjaW5jbHVkZSA8cG9sbC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1NZU19QT0xMX0gpCisjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyNlbmRpZgorCisvKiBJbmNsdWRlIE9wZW5TU0wgaGVhZGVyIGZpbGVzICovCisjaW5jbHVkZSAib3BlbnNzbC9yc2EuaCIKKyNpbmNsdWRlICJvcGVuc3NsL2NyeXB0by5oIgorI2luY2x1ZGUgIm9wZW5zc2wveDUwOS5oIgorI2luY2x1ZGUgIm9wZW5zc2wveDUwOXYzLmgiCisjaW5jbHVkZSAib3BlbnNzbC9wZW0uaCIKKyNpbmNsdWRlICJvcGVuc3NsL3NzbC5oIgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCisjaW5jbHVkZSAib3BlbnNzbC9yYW5kLmgiCisKKy8qIFNTTCBlcnJvciBvYmplY3QgKi8KK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xaZXJvUmV0dXJuRXJyb3JPYmplY3Q7CitzdGF0aWMgUHlPYmplY3QgKlB5U1NMV2FudFJlYWRFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50V3JpdGVFcnJvck9iamVjdDsKK3N0YXRpYyBQeU9iamVjdCAqUHlTU0xTeXNjYWxsRXJyb3JPYmplY3Q7CitzdGF0aWMgUHlPYmplY3QgKlB5U1NMRU9GRXJyb3JPYmplY3Q7CisKKy8qIEVycm9yIG1hcHBpbmdzICovCitzdGF0aWMgUHlPYmplY3QgKmVycl9jb2Rlc190b19uYW1lczsKK3N0YXRpYyBQeU9iamVjdCAqZXJyX25hbWVzX3RvX2NvZGVzOworc3RhdGljIFB5T2JqZWN0ICpsaWJfY29kZXNfdG9fbmFtZXM7CisKK3N0cnVjdCBweV9zc2xfZXJyb3JfY29kZSB7CisgICAgY29uc3QgY2hhciAqbW5lbW9uaWM7CisgICAgaW50IGxpYnJhcnksIHJlYXNvbjsKK307CitzdHJ1Y3QgcHlfc3NsX2xpYnJhcnlfY29kZSB7CisgICAgY29uc3QgY2hhciAqbGlicmFyeTsKKyAgICBpbnQgY29kZTsKK307CisKKy8qIEluY2x1ZGUgZ2VuZXJhdGVkIGRhdGEgKGVycm9yIGNvZGVzKSAqLworI2luY2x1ZGUgIl9zc2xfZGF0YS5oIgorCisvKiBPcGVuc3NsIGNvbWVzIHdpdGggVExTdjEuMSBhbmQgVExTdjEuMiBiZXR3ZWVuIDEuMC4waCBhbmQgMS4wLjEKKyAgICBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL25ld3MvY2hhbmdlbG9nLmh0bWwKKyAqLworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPj0gMHgxMDAwMTAwMEwKKyMgZGVmaW5lIEhBVkVfVExTdjFfMiAxCisjZWxzZQorIyBkZWZpbmUgSEFWRV9UTFN2MV8yIDAKKyNlbmRpZgorCisvKiBTTkkgc3VwcG9ydCAoY2xpZW50LSBhbmQgc2VydmVyLXNpZGUpIGFwcGVhcmVkIGluIE9wZW5TU0wgMS4wLjAgYW5kIDAuOS44ZgorICogVGhpcyBpbmNsdWRlcyB0aGUgU1NMX3NldF9TU0xfQ1RYKCkgZnVuY3Rpb24uCisgKi8KKyNpZmRlZiBTU0xfQ1RSTF9TRVRfVExTRVhUX0hPU1ROQU1FCisjIGRlZmluZSBIQVZFX1NOSSAxCisjZWxzZQorIyBkZWZpbmUgSEFWRV9TTkkgMAorI2VuZGlmCisKIGVudW0gcHlfc3NsX2Vycm9yIHsKICAgICAvKiB0aGVzZSBtaXJyb3Igc3NsLmggKi8KICAgICBQWV9TU0xfRVJST1JfTk9ORSwKQEAgLTczLDU1ICsxMzksMTQgQEAKICAgICBQWV9TU0xfVkVSU0lPTl9TU0wyLAogICAgIFBZX1NTTF9WRVJTSU9OX1NTTDM9MSwKICAgICBQWV9TU0xfVkVSU0lPTl9TU0wyMywKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBQWV9TU0xfVkVSU0lPTl9UTFMxLAorICAgIFBZX1NTTF9WRVJTSU9OX1RMUzFfMSwKKyAgICBQWV9TU0xfVkVSU0lPTl9UTFMxXzIKKyNlbHNlCiAgICAgUFlfU1NMX1ZFUlNJT05fVExTMQotfTsKLQotc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIHsKLSAgICBjb25zdCBjaGFyICptbmVtb25pYzsKLSAgICBpbnQgbGlicmFyeSwgcmVhc29uOwotfTsKLQotc3RydWN0IHB5X3NzbF9saWJyYXJ5X2NvZGUgewotICAgIGNvbnN0IGNoYXIgKmxpYnJhcnk7Ci0gICAgaW50IGNvZGU7Ci19OwotCi0vKiBJbmNsdWRlIHN5bWJvbHMgZnJvbSBfc29ja2V0IG1vZHVsZSAqLwotI2luY2x1ZGUgInNvY2tldG1vZHVsZS5oIgotCi1zdGF0aWMgUHlTb2NrZXRNb2R1bGVfQVBJT2JqZWN0IFB5U29ja2V0TW9kdWxlOwotCi0jaWYgZGVmaW5lZChIQVZFX1BPTExfSCkKLSNpbmNsdWRlIDxwb2xsLmg+Ci0jZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1BPTExfSCkKLSNpbmNsdWRlIDxzeXMvcG9sbC5oPgogI2VuZGlmCi0KLS8qIEluY2x1ZGUgT3BlblNTTCBoZWFkZXIgZmlsZXMgKi8KLSNpbmNsdWRlICJvcGVuc3NsL3JzYS5oIgotI2luY2x1ZGUgIm9wZW5zc2wvY3J5cHRvLmgiCi0jaW5jbHVkZSAib3BlbnNzbC94NTA5LmgiCi0jaW5jbHVkZSAib3BlbnNzbC94NTA5djMuaCIKLSNpbmNsdWRlICJvcGVuc3NsL3BlbS5oIgotI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCi0jaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKLSNpbmNsdWRlICJvcGVuc3NsL3JhbmQuaCIKLQotLyogSW5jbHVkZSBnZW5lcmF0ZWQgZGF0YSAoZXJyb3IgY29kZXMpICovCi0jaW5jbHVkZSAiX3NzbF9kYXRhLmgiCi0KLS8qIFNTTCBlcnJvciBvYmplY3QgKi8KLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xaZXJvUmV0dXJuRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMV2FudFJlYWRFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xXYW50V3JpdGVFcnJvck9iamVjdDsKLXN0YXRpYyBQeU9iamVjdCAqUHlTU0xTeXNjYWxsRXJyb3JPYmplY3Q7Ci1zdGF0aWMgUHlPYmplY3QgKlB5U1NMRU9GRXJyb3JPYmplY3Q7Ci0KLS8qIEVycm9yIG1hcHBpbmdzICovCi1zdGF0aWMgUHlPYmplY3QgKmVycl9jb2Rlc190b19uYW1lczsKLXN0YXRpYyBQeU9iamVjdCAqZXJyX25hbWVzX3RvX2NvZGVzOwotc3RhdGljIFB5T2JqZWN0ICpsaWJfY29kZXNfdG9fbmFtZXM7Cit9OwogCiAjaWZkZWYgV0lUSF9USFJFQUQKIApAQCAtMTczLDYgKzE5OCwxMSBAQAogIyBkZWZpbmUgT1BFTlNTTF9OT19DT01QCiAjZW5kaWYKIAorLyogWDUwOV9WRVJJRllfUEFSQU0gZ290IGFkZGVkIHRvIE9wZW5TU0wgaW4gMC45LjggKi8KKyNpZiBPUEVOU1NMX1ZFUlNJT05fTlVNQkVSID49IDB4MDA5MDgwMGZMCisjIGRlZmluZSBIQVZFX09QRU5TU0xfVkVSSUZZX1BBUkFNCisjZW5kaWYKKwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRApAQCAtMTgxLDE0ICsyMTEsMjAgQEAKICAgICBjaGFyICpucG5fcHJvdG9jb2xzOwogICAgIGludCBucG5fcHJvdG9jb2xzX2xlbjsKICNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5T2JqZWN0ICpzZXRfaG9zdG5hbWU7CisjZW5kaWYKKyAgICBpbnQgY2hlY2tfaG9zdG5hbWU7CiB9IFB5U1NMQ29udGV4dDsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKICAgICBQeU9iamVjdCAqU29ja2V0OyAvKiB3ZWFrcmVmIHRvIHNvY2tldCBvbiB3aGljaCB3ZSdyZSBsYXllcmVkICovCiAgICAgU1NMICpzc2w7CisgICAgUHlTU0xDb250ZXh0ICpjdHg7IC8qIHdlYWtyZWYgdG8gU1NMIGNvbnRleHQgKi8KICAgICBYNTA5ICpwZWVyX2NlcnQ7Ci0gICAgaW50IHNodXRkb3duX3NlZW5femVybzsKKyAgICBjaGFyIHNodXRkb3duX3NlZW5femVybzsKKyAgICBjaGFyIGhhbmRzaGFrZV9kb25lOwogICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGU7CiB9IFB5U1NMU29ja2V0OwogCkBAIC0zMTYsMTQgKzM1MiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJfb2JqLCBlcnJzdHIsIGxpbmVubyk7CiAgICAgZWxzZQogICAgICAgICBtc2cgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMgKF9zc2wuYzolZCkiLCBlcnJzdHIsIGxpbmVubyk7Ci0KICAgICBpZiAobXNnID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGluaXRfdmFsdWUgPSBQeV9CdWlsZFZhbHVlKCJpTiIsIHNzbF9lcnJubywgbXNnKTsKKyAgICBpZiAoaW5pdF92YWx1ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CisKICAgICBlcnJfdmFsdWUgPSBQeU9iamVjdF9DYWxsT2JqZWN0KHR5cGUsIGluaXRfdmFsdWUpOwogICAgIFB5X0RFQ1JFRihpbml0X3ZhbHVlKTsKICAgICBpZiAoZXJyX3ZhbHVlID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbDsKKwogICAgIGlmIChyZWFzb25fb2JqID09IE5VTEwpCiAgICAgICAgIHJlYXNvbl9vYmogPSBQeV9Ob25lOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKGVycl92YWx1ZSwgJlB5SWRfcmVhc29uLCByZWFzb25fb2JqKSkKQEAgLTQzNywxMSArNDc3LDEzIEBACiAgKi8KIAogc3RhdGljIFB5U1NMU29ja2V0ICoKLW5ld1B5U1NMU29ja2V0KFNTTF9DVFggKmN0eCwgUHlTb2NrZXRTb2NrT2JqZWN0ICpzb2NrLAorbmV3UHlTU0xTb2NrZXQoUHlTU0xDb250ZXh0ICpzc2xjdHgsIFB5U29ja2V0U29ja09iamVjdCAqc29jaywKICAgICAgICAgICAgICAgIGVudW0gcHlfc3NsX3NlcnZlcl9vcl9jbGllbnQgc29ja2V0X3R5cGUsCiAgICAgICAgICAgICAgICBjaGFyICpzZXJ2ZXJfaG9zdG5hbWUpCiB7CiAgICAgUHlTU0xTb2NrZXQgKnNlbGY7CisgICAgU1NMX0NUWCAqY3R4ID0gc3NsY3R4LT5jdHg7CisgICAgbG9uZyBtb2RlOwogCiAgICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVNTTFNvY2tldCwgJlB5U1NMU29ja2V0X1R5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCkBAIC00NTAsNyArNDkyLDEwIEBACiAgICAgc2VsZi0+cGVlcl9jZXJ0ID0gTlVMTDsKICAgICBzZWxmLT5zc2wgPSBOVUxMOwogICAgIHNlbGYtPlNvY2tldCA9IE5VTEw7CisgICAgc2VsZi0+Y3R4ID0gc3NsY3R4OwogICAgIHNlbGYtPnNodXRkb3duX3NlZW5femVybyA9IDA7CisgICAgc2VsZi0+aGFuZHNoYWtlX2RvbmUgPSAwOworICAgIFB5X0lOQ1JFRihzc2xjdHgpOwogCiAgICAgLyogTWFrZSBzdXJlIHRoZSBTU0wgZXJyb3Igc3RhdGUgaXMgaW5pdGlhbGl6ZWQgKi8KICAgICAodm9pZCkgRVJSX2dldF9zdGF0ZSgpOwpAQCAtNDU5LDEyICs1MDQsMTUgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc2VsZi0+c3NsID0gU1NMX25ldyhjdHgpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCi0gICAgU1NMX3NldF9mZChzZWxmLT5zc2wsIHNvY2stPnNvY2tfZmQpOworICAgIFNTTF9zZXRfYXBwX2RhdGEoc2VsZi0+c3NsLHNlbGYpOworICAgIFNTTF9zZXRfZmQoc2VsZi0+c3NsLCBQeV9TQUZFX0RPV05DQVNUKHNvY2stPnNvY2tfZmQsIFNPQ0tFVF9ULCBpbnQpKTsKKyAgICBtb2RlID0gU1NMX01PREVfQUNDRVBUX01PVklOR19XUklURV9CVUZGRVI7CiAjaWZkZWYgU1NMX01PREVfQVVUT19SRVRSWQotICAgIFNTTF9zZXRfbW9kZShzZWxmLT5zc2wsIFNTTF9NT0RFX0FVVE9fUkVUUlkpOworICAgIG1vZGUgfD0gU1NMX01PREVfQVVUT19SRVRSWTsKICNlbmRpZgorICAgIFNTTF9zZXRfbW9kZShzZWxmLT5zc2wsIG1vZGUpOwogCi0jaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorI2lmIEhBVkVfU05JCiAgICAgaWYgKHNlcnZlcl9ob3N0bmFtZSAhPSBOVUxMKQogICAgICAgICBTU0xfc2V0X3Rsc2V4dF9ob3N0X25hbWUoc2VsZi0+c3NsLCBzZXJ2ZXJfaG9zdG5hbWUpOwogI2VuZGlmCkBAIC00ODYsNiArNTM0LDEwIEBACiAKICAgICBzZWxmLT5zb2NrZXRfdHlwZSA9IHNvY2tldF90eXBlOwogICAgIHNlbGYtPlNvY2tldCA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopIHNvY2ssIE5VTEwpOworICAgIGlmIChzZWxmLT5Tb2NrZXQgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoc2VsZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gc2VsZjsKIH0KIApAQCAtNTUyLDYgKzYwNCw3IEBACiAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHNlbGYtPnBlZXJfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzZWxmLT5zc2wpOwogICAgIFB5U1NMX0VORF9BTExPV19USFJFQURTCisgICAgc2VsZi0+aGFuZHNoYWtlX2RvbmUgPSAxOwogCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwpAQCAtOTE4LDYgKzk3MSwxMjUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK19nZXRfYWlhX3VyaShYNTA5ICpjZXJ0aWZpY2F0ZSwgaW50IG5pZCkgeworICAgIFB5T2JqZWN0ICpsc3QgPSBOVUxMLCAqb3N0ciA9IE5VTEw7CisgICAgaW50IGksIHJlc3VsdDsKKyAgICBBVVRIT1JJVFlfSU5GT19BQ0NFU1MgKmluZm87CisKKyAgICBpbmZvID0gWDUwOV9nZXRfZXh0X2QyaShjZXJ0aWZpY2F0ZSwgTklEX2luZm9fYWNjZXNzLCBOVUxMLCBOVUxMKTsKKyAgICBpZiAoaW5mbyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBpZiAoc2tfQUNDRVNTX0RFU0NSSVBUSU9OX251bShpbmZvKSA9PSAwKSB7CisgICAgICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlKGluZm8pOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKKyAgICB9CisKKyAgICBpZiAoKGxzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBza19BQ0NFU1NfREVTQ1JJUFRJT05fbnVtKGluZm8pOyBpKyspIHsKKyAgICAgICAgQUNDRVNTX0RFU0NSSVBUSU9OICphZCA9IHNrX0FDQ0VTU19ERVNDUklQVElPTl92YWx1ZShpbmZvLCBpKTsKKyAgICAgICAgQVNOMV9JQTVTVFJJTkcgKnVyaTsKKworICAgICAgICBpZiAoKE9CSl9vYmoybmlkKGFkLT5tZXRob2QpICE9IG5pZCkgfHwKKyAgICAgICAgICAgICAgICAoYWQtPmxvY2F0aW9uLT50eXBlICE9IEdFTl9VUkkpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB1cmkgPSBhZC0+bG9jYXRpb24tPmQudW5pZm9ybVJlc291cmNlSWRlbnRpZmllcjsKKyAgICAgICAgb3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKXVyaS0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmktPmxlbmd0aCk7CisgICAgICAgIGlmIChvc3RyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBQeUxpc3RfQXBwZW5kKGxzdCwgb3N0cik7CisgICAgICAgIFB5X0RFQ1JFRihvc3RyKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBBVVRIT1JJVFlfSU5GT19BQ0NFU1NfZnJlZShpbmZvKTsKKworICAgIC8qIGNvbnZlcnQgdG8gdHVwbGUgb3IgTm9uZSAqLworICAgIGlmIChQeUxpc3RfU2l6ZShsc3QpID09IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGxzdCk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5T2JqZWN0ICp0dXA7CisgICAgICAgIHR1cCA9IFB5TGlzdF9Bc1R1cGxlKGxzdCk7CisgICAgICAgIFB5X0RFQ1JFRihsc3QpOworICAgICAgICByZXR1cm4gdHVwOworICAgIH0KKworICBmYWlsOgorICAgIEFVVEhPUklUWV9JTkZPX0FDQ0VTU19mcmVlKGluZm8pOworICAgIFB5X1hERUNSRUYobHN0KTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19nZXRfY3JsX2RwKFg1MDkgKmNlcnRpZmljYXRlKSB7CisgICAgU1RBQ0tfT0YoRElTVF9QT0lOVCkgKmRwczsKKyAgICBpbnQgaSwgajsKKyAgICBQeU9iamVjdCAqbHN0LCAqcmVzID0gTlVMTDsKKworI2lmIE9QRU5TU0xfVkVSU0lPTl9OVU1CRVIgPCAweDEwMDAxMDAwTAorICAgIGRwcyA9IFg1MDlfZ2V0X2V4dF9kMmkoY2VydGlmaWNhdGUsIE5JRF9jcmxfZGlzdHJpYnV0aW9uX3BvaW50cywgTlVMTCwgTlVMTCk7CisjZWxzZQorICAgIC8qIENhbGxzIHg1MDl2M19jYWNoZV9leHRlbnNpb25zIGFuZCBzZXRzIHVwIGNybGRwICovCisgICAgWDUwOV9jaGVja19jYShjZXJ0aWZpY2F0ZSk7CisgICAgZHBzID0gY2VydGlmaWNhdGUtPmNybGRwOworI2VuZGlmCisKKyAgICBpZiAoZHBzID09IE5VTEwpCisgICAgICAgIHJldHVybiBQeV9Ob25lOworCisgICAgbHN0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAobHN0ID09IE5VTEwpCisgICAgICAgIGdvdG8gZG9uZTsKKworICAgIGZvciAoaT0wOyBpIDwgc2tfRElTVF9QT0lOVF9udW0oZHBzKTsgaSsrKSB7CisgICAgICAgIERJU1RfUE9JTlQgKmRwOworICAgICAgICBTVEFDS19PRihHRU5FUkFMX05BTUUpICpnbnM7CisKKyAgICAgICAgZHAgPSBza19ESVNUX1BPSU5UX3ZhbHVlKGRwcywgaSk7CisgICAgICAgIGducyA9IGRwLT5kaXN0cG9pbnQtPm5hbWUuZnVsbG5hbWU7CisKKyAgICAgICAgZm9yIChqPTA7IGogPCBza19HRU5FUkFMX05BTUVfbnVtKGducyk7IGorKykgeworICAgICAgICAgICAgR0VORVJBTF9OQU1FICpnbjsKKyAgICAgICAgICAgIEFTTjFfSUE1U1RSSU5HICp1cmk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3VyaTsKKyAgICAgICAgICAgIGludCBlcnI7CisKKyAgICAgICAgICAgIGduID0gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKGducywgaik7CisgICAgICAgICAgICBpZiAoZ24tPnR5cGUgIT0gR0VOX1VSSSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXJpID0gZ24tPmQudW5pZm9ybVJlc291cmNlSWRlbnRpZmllcjsKKyAgICAgICAgICAgIG91cmkgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKil1cmktPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyaS0+bGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChvdXJpID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBkb25lOworCisgICAgICAgICAgICBlcnIgPSBQeUxpc3RfQXBwZW5kKGxzdCwgb3VyaSk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3VyaSk7CisgICAgICAgICAgICBpZiAoZXJyIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDb252ZXJ0IHRvIHR1cGxlLiAqLworICAgIHJlcyA9IChQeUxpc3RfR0VUX1NJWkUobHN0KSA+IDApID8gUHlMaXN0X0FzVHVwbGUobHN0KSA6IFB5X05vbmU7CisKKyAgZG9uZToKKyAgICBQeV9YREVDUkVGKGxzdCk7CisjaWYgT1BFTlNTTF9WRVJTSU9OX05VTUJFUiA8IDB4MTAwMDEwMDBMCisgICAgc2tfRElTVF9QT0lOVF9mcmVlKGRwcyk7CisjZW5kaWYKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogX2RlY29kZV9jZXJ0aWZpY2F0ZShYNTA5ICpjZXJ0aWZpY2F0ZSkgewogCiAgICAgUHlPYmplY3QgKnJldHZhbCA9IE5VTEw7CkBAIC05MjcsOSArMTA5OSwxMCBAQAogICAgIFB5T2JqZWN0ICppc3N1ZXI7CiAgICAgUHlPYmplY3QgKnZlcnNpb247CiAgICAgUHlPYmplY3QgKnNuX29iajsKKyAgICBQeU9iamVjdCAqb2JqOwogICAgIEFTTjFfSU5URUdFUiAqc2VyaWFsTnVtYmVyOwogICAgIGNoYXIgYnVmWzIwNDhdOwotICAgIGludCBsZW47CisgICAgaW50IGxlbiwgcmVzdWx0OwogICAgIEFTTjFfVElNRSAqbm90QmVmb3JlLCAqbm90QWZ0ZXI7CiAgICAgUHlPYmplY3QgKnBub3RCZWZvcmUsICpwbm90QWZ0ZXI7CiAKQEAgLTEwMzUsNiArMTIwOCw0MSBAQAogICAgICAgICBQeV9ERUNSRUYocGVlcl9hbHRfbmFtZXMpOwogICAgIH0KIAorICAgIC8qIEF1dGhvcml0eSBJbmZvcm1hdGlvbiBBY2Nlc3M6IE9DU1AgVVJJcyAqLworICAgIG9iaiA9IF9nZXRfYWlhX3VyaShjZXJ0aWZpY2F0ZSwgTklEX2FkX09DU1ApOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBnb3RvIGZhaWwxOworICAgIH0gZWxzZSBpZiAob2JqICE9IFB5X05vbmUpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcocmV0dmFsLCAiT0NTUCIsIG9iaik7CisgICAgICAgIFB5X0RFQ1JFRihvYmopOworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byBmYWlsMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIG9iaiA9IF9nZXRfYWlhX3VyaShjZXJ0aWZpY2F0ZSwgTklEX2FkX2NhX2lzc3VlcnMpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBnb3RvIGZhaWwxOworICAgIH0gZWxzZSBpZiAob2JqICE9IFB5X05vbmUpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcocmV0dmFsLCAiY2FJc3N1ZXJzIiwgb2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG9iaik7CisgICAgICAgIGlmIChyZXN1bHQgPCAwKSB7CisgICAgICAgICAgICBnb3RvIGZhaWwxOworICAgICAgICB9CisgICAgfQorCisgICAgLyogQ0RQIChDUkwgZGlzdHJpYnV0aW9uIHBvaW50cykgKi8KKyAgICBvYmogPSBfZ2V0X2NybF9kcChjZXJ0aWZpY2F0ZSk7CisgICAgaWYgKG9iaiA9PSBOVUxMKSB7CisgICAgICAgIGdvdG8gZmFpbDE7CisgICAgfSBlbHNlIGlmIChvYmogIT0gUHlfTm9uZSkgeworICAgICAgICByZXN1bHQgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhyZXR2YWwsICJjcmxEaXN0cmlidXRpb25Qb2ludHMiLCBvYmopOworICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgaWYgKHJlc3VsdCA8IDApIHsKKyAgICAgICAgICAgIGdvdG8gZmFpbDE7CisgICAgICAgIH0KKyAgICB9CisKICAgICBCSU9fZnJlZShiaW9idWYpOwogICAgIHJldHVybiByZXR2YWw7CiAKQEAgLTEwNDYsNiArMTI1NCwyNCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorX2NlcnRpZmljYXRlX3RvX2RlcihYNTA5ICpjZXJ0aWZpY2F0ZSkKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpieXRlc19idWYgPSBOVUxMOworICAgIGludCBsZW47CisgICAgUHlPYmplY3QgKnJldHZhbDsKKworICAgIGJ5dGVzX2J1ZiA9IE5VTEw7CisgICAgbGVuID0gaTJkX1g1MDkoY2VydGlmaWNhdGUsICZieXRlc19idWYpOworICAgIGlmIChsZW4gPCAwKSB7CisgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgLyogdGhpcyBpcyBhY3R1YWxseSBhbiBpbW11dGFibGUgYnl0ZXMgc2VxdWVuY2UgKi8KKyAgICByZXR2YWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyICopIGJ5dGVzX2J1ZiwgbGVuKTsKKyAgICBPUEVOU1NMX2ZyZWUoYnl0ZXNfYnVmKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgogUHlTU0xfdGVzdF9kZWNvZGVfY2VydGlmaWNhdGUgKFB5T2JqZWN0ICptb2QsIFB5T2JqZWN0ICphcmdzKSB7CkBAIC0xMDkxLDM0ICsxMzE3LDIzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogUHlTU0xfcGVlcmNlcnQoUHlTU0xTb2NrZXQgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwotICAgIGludCBsZW47CiAgICAgaW50IHZlcmlmaWNhdGlvbjsKICAgICBpbnQgYmluYXJ5X21vZGUgPSAwOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8cDpwZWVyX2NlcnRpZmljYXRlIiwgJmJpbmFyeV9tb2RlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoIXNlbGYtPmhhbmRzaGFrZV9kb25lKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImhhbmRzaGFrZSBub3QgZG9uZSB5ZXQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGlmICghc2VsZi0+cGVlcl9jZXJ0KQogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKIAogICAgIGlmIChiaW5hcnlfbW9kZSkgewogICAgICAgICAvKiByZXR1cm4gY2VydCBpbiBERVItZW5jb2RlZCBmb3JtYXQgKi8KLQotICAgICAgICB1bnNpZ25lZCBjaGFyICpieXRlc19idWYgPSBOVUxMOwotCi0gICAgICAgIGJ5dGVzX2J1ZiA9IE5VTEw7Ci0gICAgICAgIGxlbiA9IGkyZF9YNTA5KHNlbGYtPnBlZXJfY2VydCwgJmJ5dGVzX2J1Zik7Ci0gICAgICAgIGlmIChsZW4gPCAwKSB7Ci0gICAgICAgICAgICBQeVNTTF9TZXRFcnJvcihzZWxmLCBsZW4sIF9fRklMRV9fLCBfX0xJTkVfXyk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAvKiB0aGlzIGlzIGFjdHVhbGx5IGFuIGltbXV0YWJsZSBieXRlcyBzZXF1ZW5jZSAqLwotICAgICAgICByZXR2YWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplCi0gICAgICAgICAgKChjb25zdCBjaGFyICopIGJ5dGVzX2J1ZiwgbGVuKTsKLSAgICAgICAgT1BFTlNTTF9mcmVlKGJ5dGVzX2J1Zik7Ci0gICAgICAgIHJldHVybiByZXR2YWw7Ci0KKyAgICAgICAgcmV0dXJuIF9jZXJ0aWZpY2F0ZV90b19kZXIoc2VsZi0+cGVlcl9jZXJ0KTsKICAgICB9IGVsc2UgewogICAgICAgICB2ZXJpZmljYXRpb24gPSBTU0xfQ1RYX2dldF92ZXJpZnlfbW9kZShTU0xfZ2V0X1NTTF9DVFgoc2VsZi0+c3NsKSk7CiAgICAgICAgIGlmICgodmVyaWZpY2F0aW9uICYgU1NMX1ZFUklGWV9QRUVSKSA9PSAwKQpAQCAtMTIyMSw2ICsxNDM2LDQzIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIFB5U1NMQ29udGV4dCAqUHlTU0xfZ2V0X2NvbnRleHQoUHlTU0xTb2NrZXQgKnNlbGYsIHZvaWQgKmNsb3N1cmUpIHsKKyAgICBQeV9JTkNSRUYoc2VsZi0+Y3R4KTsKKyAgICByZXR1cm4gc2VsZi0+Y3R4OworfQorCitzdGF0aWMgaW50IFB5U1NMX3NldF9jb250ZXh0KFB5U1NMU29ja2V0ICpzZWxmLCBQeU9iamVjdCAqdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsb3N1cmUpIHsKKworICAgIGlmIChQeU9iamVjdF9UeXBlQ2hlY2sodmFsdWUsICZQeVNTTENvbnRleHRfVHlwZSkpIHsKKyNpZiAhSEFWRV9TTkkKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05vdEltcGxlbWVudGVkRXJyb3IsICJzZXR0aW5nIGEgc29ja2V0J3MgIgorICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRleHQgaXMgbm90IHN1cHBvcnRlZCBieSB5b3VyIE9wZW5TU0wgbGlicmFyeSIpOworICAgICAgICByZXR1cm4gLTE7CisjZWxzZQorICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICBQeV9ERUNSRUYoc2VsZi0+Y3R4KTsKKyAgICAgICAgc2VsZi0+Y3R4ID0gKFB5U1NMQ29udGV4dCAqKSB2YWx1ZTsKKyAgICAgICAgU1NMX3NldF9TU0xfQ1RYKHNlbGYtPnNzbCwgc2VsZi0+Y3R4LT5jdHgpOworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIlRoZSB2YWx1ZSBtdXN0IGJlIGEgU1NMQ29udGV4dCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9zZXRfY29udGV4dF9kb2MsCisiX3NldHRlcl9jb250ZXh0KGN0eClcblwKK1wKK1RoaXMgY2hhbmdlcyB0aGUgY29udGV4dCBhc3NvY2lhdGVkIHdpdGggdGhlIFNTTFNvY2tldC4gVGhpcyBpcyB0eXBpY2FsbHlcblwKK3VzZWQgZnJvbSB3aXRoaW4gYSBjYWxsYmFjayBmdW5jdGlvbiBzZXQgYnkgdGhlIHNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrXG5cCitvbiB0aGUgU1NMQ29udGV4dCB0byBjaGFuZ2UgdGhlIGNlcnRpZmljYXRlIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGVcblwKK1NTTFNvY2tldCBiZWZvcmUgdGhlIGNyeXB0b2dyYXBoaWMgZXhjaGFuZ2UgaGFuZHNoYWtlIG1lc3NhZ2VzXG4iKTsKKworCisKIHN0YXRpYyB2b2lkIFB5U1NMX2RlYWxsb2MoUHlTU0xTb2NrZXQgKnNlbGYpCiB7CiAgICAgaWYgKHNlbGYtPnBlZXJfY2VydCkgICAgICAgIC8qIFBvc3NpYmxlIG5vdCB0byBoYXZlIG9uZT8gKi8KQEAgLTEyMjgsNiArMTQ4MCw3IEBACiAgICAgaWYgKHNlbGYtPnNzbCkKICAgICAgICAgU1NMX2ZyZWUoc2VsZi0+c3NsKTsKICAgICBQeV9YREVDUkVGKHNlbGYtPlNvY2tldCk7CisgICAgUHlfWERFQ1JFRihzZWxmLT5jdHgpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKIH0KIApAQCAtMTI4Niw5ICsxNTM5LDExIEBACiAgICAgLyogU2VlIGlmIHRoZSBzb2NrZXQgaXMgcmVhZHkgKi8KICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaWYgKHdyaXRpbmcpCi0gICAgICAgIHJjID0gc2VsZWN0KHMtPnNvY2tfZmQrMSwgTlVMTCwgJmZkcywgTlVMTCwgJnR2KTsKKyAgICAgICAgcmMgPSBzZWxlY3QoUHlfU0FGRV9ET1dOQ0FTVChzLT5zb2NrX2ZkKzEsIFNPQ0tFVF9ULCBpbnQpLAorICAgICAgICAgICAgICAgICAgICBOVUxMLCAmZmRzLCBOVUxMLCAmdHYpOwogICAgIGVsc2UKLSAgICAgICAgcmMgPSBzZWxlY3Qocy0+c29ja19mZCsxLCAmZmRzLCBOVUxMLCBOVUxMLCAmdHYpOworICAgICAgICByYyA9IHNlbGVjdChQeV9TQUZFX0RPV05DQVNUKHMtPnNvY2tfZmQrMSwgU09DS0VUX1QsIGludCksCisgICAgICAgICAgICAgICAgICAgICZmZHMsIE5VTEwsIE5VTEwsICZ0dik7CiAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKIAogI2lmZGVmIEhBVkVfUE9MTApAQCAtMTQ2MSwyNiArMTcxNiw2IEBACiAgICAgQklPX3NldF9uYmlvKFNTTF9nZXRfcmJpbyhzZWxmLT5zc2wpLCBub25ibG9ja2luZyk7CiAgICAgQklPX3NldF9uYmlvKFNTTF9nZXRfd2JpbyhzZWxmLT5zc2wpLCBub25ibG9ja2luZyk7CiAKLSAgICAvKiBmaXJzdCBjaGVjayBpZiB0aGVyZSBhcmUgYnl0ZXMgcmVhZHkgdG8gYmUgcmVhZCAqLwotICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBjb3VudCA9IFNTTF9wZW5kaW5nKHNlbGYtPnNzbCk7Ci0gICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmICghY291bnQpIHsKLSAgICAgICAgc29ja3N0YXRlID0gY2hlY2tfc29ja2V0X2FuZF93YWl0X2Zvcl90aW1lb3V0KHNvY2ssIDApOwotICAgICAgICBpZiAoc29ja3N0YXRlID09IFNPQ0tFVF9IQVNfVElNRURfT1VUKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTb2NrZXRNb2R1bGUudGltZW91dF9lcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVGhlIHJlYWQgb3BlcmF0aW9uIHRpbWVkIG91dCIpOwotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfSBlbHNlIGlmIChzb2Nrc3RhdGUgPT0gU09DS0VUX1RPT19MQVJHRV9GT1JfU0VMRUNUKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlTU0xFcnJvck9iamVjdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5kZXJseWluZyBzb2NrZXQgdG9vIGxhcmdlIGZvciBzZWxlY3QoKS4iKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0gZWxzZSBpZiAoc29ja3N0YXRlID09IFNPQ0tFVF9IQVNfQkVFTl9DTE9TRUQpIHsKLSAgICAgICAgICAgIGNvdW50ID0gMDsKLSAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgfQotICAgIH0KICAgICBkbyB7CiAgICAgICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgY291bnQgPSBTU0xfcmVhZChzZWxmLT5zc2wsIG1lbSwgbGVuKTsKQEAgLTE2NjgsNiArMTkwMywxMiBAQAogCiAjZW5kaWYgLyogSEFWRV9PUEVOU1NMX0ZJTklTSEVEICovCiAKK3N0YXRpYyBQeUdldFNldERlZiBzc2xfZ2V0c2V0bGlzdFtdID0geworICAgIHsiY29udGV4dCIsIChnZXR0ZXIpIFB5U1NMX2dldF9jb250ZXh0LAorICAgICAgICAgICAgICAgIChzZXR0ZXIpIFB5U1NMX3NldF9jb250ZXh0LCBQeVNTTF9zZXRfY29udGV4dF9kb2N9LAorICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLworfTsKKwogc3RhdGljIFB5TWV0aG9kRGVmIFB5U1NMTWV0aG9kc1tdID0gewogICAgIHsiZG9faGFuZHNoYWtlIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX1NTTGRvX2hhbmRzaGFrZSwgTUVUSF9OT0FSR1N9LAogICAgIHsid3JpdGUiLCAoUHlDRnVuY3Rpb24pUHlTU0xfU1NMd3JpdGUsIE1FVEhfVkFSQVJHUywKQEAgLTE3MjIsNiArMTk2Myw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICBQeVNTTE1ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyovCisgICAgc3NsX2dldHNldGxpc3QsICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwogfTsKIAogCkBAIC0xNzQ2LDggKzE5ODksMTYgQEAKICAgICBQeVNTTF9CRUdJTl9BTExPV19USFJFQURTCiAgICAgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMSkKICAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfbWV0aG9kKCkpOworI2lmIEhBVkVfVExTdjFfMgorICAgIGVsc2UgaWYgKHByb3RvX3ZlcnNpb24gPT0gUFlfU1NMX1ZFUlNJT05fVExTMV8xKQorICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhUTFN2MV8xX21ldGhvZCgpKTsKKyAgICBlbHNlIGlmIChwcm90b192ZXJzaW9uID09IFBZX1NTTF9WRVJTSU9OX1RMUzFfMikKKyAgICAgICAgY3R4ID0gU1NMX0NUWF9uZXcoVExTdjFfMl9tZXRob2QoKSk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TU0wzCiAgICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9TU0wzKQogICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhTU0x2M19tZXRob2QoKSk7CisjZW5kaWYKICNpZm5kZWYgT1BFTlNTTF9OT19TU0wyCiAgICAgZWxzZSBpZiAocHJvdG9fdmVyc2lvbiA9PSBQWV9TU0xfVkVSU0lPTl9TU0wyKQogICAgICAgICBjdHggPSBTU0xfQ1RYX25ldyhTU0x2Ml9tZXRob2QoKSk7CkBAIC0xNzc5LDI0ICsyMDMwLDc0IEBACiAjaWZkZWYgT1BFTlNTTF9OUE5fTkVHT1RJQVRFRAogICAgIHNlbGYtPm5wbl9wcm90b2NvbHMgPSBOVUxMOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgc2VsZi0+c2V0X2hvc3RuYW1lID0gTlVMTDsKKyNlbmRpZgorICAgIC8qIERvbid0IGNoZWNrIGhvc3QgbmFtZSBieSBkZWZhdWx0ICovCisgICAgc2VsZi0+Y2hlY2tfaG9zdG5hbWUgPSAwOwogICAgIC8qIERlZmF1bHRzICovCiAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHNlbGYtPmN0eCwgU1NMX1ZFUklGWV9OT05FLCBOVUxMKTsKICAgICBvcHRpb25zID0gU1NMX09QX0FMTCAmIH5TU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTOwogICAgIGlmIChwcm90b192ZXJzaW9uICE9IFBZX1NTTF9WRVJTSU9OX1NTTDIpCiAgICAgICAgIG9wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYyOworICAgIGlmIChwcm90b192ZXJzaW9uICE9IFBZX1NTTF9WRVJTSU9OX1NTTDMpCisgICAgICAgIG9wdGlvbnMgfD0gU1NMX09QX05PX1NTTHYzOwogICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc2VsZi0+Y3R4LCBvcHRpb25zKTsKIAorI2lmbmRlZiBPUEVOU1NMX05PX0VDREgKKyAgICAvKiBBbGxvdyBhdXRvbWF0aWMgRUNESCBjdXJ2ZSBzZWxlY3Rpb24gKG9uIE9wZW5TU0wgMS4wLjIrKSwgb3IgdXNlCisgICAgICAgcHJpbWUyNTZ2MSBieSBkZWZhdWx0LiAgVGhpcyBpcyBBcGFjaGUgbW9kX3NzbCdzIGluaXRpYWxpemF0aW9uCisgICAgICAgcG9saWN5LCBzbyB3ZSBzaG91bGQgYmUgc2FmZS4gKi8KKyNpZiBkZWZpbmVkKFNTTF9DVFhfc2V0X2VjZGhfYXV0bykKKyAgICBTU0xfQ1RYX3NldF9lY2RoX2F1dG8oc2VsZi0+Y3R4LCAxKTsKKyNlbHNlCisgICAgeworICAgICAgICBFQ19LRVkgKmtleSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShOSURfWDlfNjJfcHJpbWUyNTZ2MSk7CisgICAgICAgIFNTTF9DVFhfc2V0X3RtcF9lY2RoKHNlbGYtPmN0eCwga2V5KTsKKyAgICAgICAgRUNfS0VZX2ZyZWUoa2V5KTsKKyAgICB9CisjZW5kaWYKKyNlbmRpZgorCiAjZGVmaW5lIFNJRF9DVFggIlB5dGhvbiIKICAgICBTU0xfQ1RYX3NldF9zZXNzaW9uX2lkX2NvbnRleHQoc2VsZi0+Y3R4LCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBTSURfQ1RYLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoU0lEX0NUWCkpOwogI3VuZGVmIFNJRF9DVFgKIAorI2lmZGVmIFg1MDlfVl9GTEFHX1RSVVNURURfRklSU1QKKyAgICB7CisgICAgICAgIC8qIEltcHJvdmUgdHJ1c3QgY2hhaW4gYnVpbGRpbmcgd2hlbiBjcm9zcy1zaWduZWQgaW50ZXJtZWRpYXRlCisgICAgICAgICAgIGNlcnRpZmljYXRlcyBhcmUgcHJlc2VudC4gU2VlIGh0dHBzOi8vYnVncy5weXRob24ub3JnL2lzc3VlMjM0NzYuICovCisgICAgICAgIFg1MDlfU1RPUkUgKnN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgICAgICBYNTA5X1NUT1JFX3NldF9mbGFncyhzdG9yZSwgWDUwOV9WX0ZMQUdfVFJVU1RFRF9GSVJTVCk7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIAorc3RhdGljIGludAorY29udGV4dF90cmF2ZXJzZShQeVNTTENvbnRleHQgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworI2lmbmRlZiBPUEVOU1NMX05PX1RMU0VYVAorICAgIFB5X1ZJU0lUKHNlbGYtPnNldF9ob3N0bmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorY29udGV4dF9jbGVhcihQeVNTTENvbnRleHQgKnNlbGYpCit7CisjaWZuZGVmIE9QRU5TU0xfTk9fVExTRVhUCisgICAgUHlfQ0xFQVIoc2VsZi0+c2V0X2hvc3RuYW1lKTsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogY29udGV4dF9kZWFsbG9jKFB5U1NMQ29udGV4dCAqc2VsZikKIHsKKyAgICBjb250ZXh0X2NsZWFyKHNlbGYpOwogICAgIFNTTF9DVFhfZnJlZShzZWxmLT5jdHgpOwogI2lmZGVmIE9QRU5TU0xfTlBOX05FR09USUFURUQKICAgICBQeU1lbV9GcmVlKHNlbGYtPm5wbl9wcm90b2NvbHMpOwpAQCAtMTk0MywxMCArMjI0NCw1NiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgZm9yIHZlcmlmeV9tb2RlIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgaWYgKG1vZGUgPT0gU1NMX1ZFUklGWV9OT05FICYmIHNlbGYtPmNoZWNrX2hvc3RuYW1lKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCBzZXQgdmVyaWZ5X21vZGUgdG8gQ0VSVF9OT05FIHdoZW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgImNoZWNrX2hvc3RuYW1lIGlzIGVuYWJsZWQuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgU1NMX0NUWF9zZXRfdmVyaWZ5KHNlbGYtPmN0eCwgbW9kZSwgTlVMTCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBIQVZFX09QRU5TU0xfVkVSSUZZX1BBUkFNCitzdGF0aWMgUHlPYmplY3QgKgorZ2V0X3ZlcmlmeV9mbGFncyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCit7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGZsYWdzID0gWDUwOV9WRVJJRllfUEFSQU1fZ2V0X2ZsYWdzKHN0b3JlLT5wYXJhbSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKGZsYWdzKTsKK30KKworc3RhdGljIGludAorc2V0X3ZlcmlmeV9mbGFncyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmcsIHZvaWQgKmMpCit7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgdW5zaWduZWQgbG9uZyBuZXdfZmxhZ3MsIGZsYWdzLCBzZXQsIGNsZWFyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJrIiwgJm5ld19mbGFncykpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmbGFncyA9IFg1MDlfVkVSSUZZX1BBUkFNX2dldF9mbGFncyhzdG9yZS0+cGFyYW0pOworICAgIGNsZWFyID0gZmxhZ3MgJiB+bmV3X2ZsYWdzOworICAgIHNldCA9IH5mbGFncyAmIG5ld19mbGFnczsKKyAgICBpZiAoY2xlYXIpIHsKKyAgICAgICAgaWYgKCFYNTA5X1ZFUklGWV9QQVJBTV9jbGVhcl9mbGFncyhzdG9yZS0+cGFyYW0sIGNsZWFyKSkgeworICAgICAgICAgICAgX3NldFNTTEVycm9yKE5VTEwsIDAsIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKHNldCkgeworICAgICAgICBpZiAoIVg1MDlfVkVSSUZZX1BBUkFNX3NldF9mbGFncyhzdG9yZS0+cGFyYW0sIHNldCkpIHsKKyAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBQeU9iamVjdCAqCiBnZXRfb3B0aW9ucyhQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCiB7CkBAIC0xOTc2LDYgKzIzMjMsMzAgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2dldF9jaGVja19ob3N0bmFtZShQeVNTTENvbnRleHQgKnNlbGYsIHZvaWQgKmMpCit7CisgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhzZWxmLT5jaGVja19ob3N0bmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK3NldF9jaGVja19ob3N0bmFtZShQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmcsIHZvaWQgKmMpCit7CisgICAgaW50IGNoZWNrX2hvc3RuYW1lOworICAgIGlmICghUHlBcmdfUGFyc2UoYXJnLCAicCIsICZjaGVja19ob3N0bmFtZSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoY2hlY2tfaG9zdG5hbWUgJiYKKyAgICAgICAgICAgIFNTTF9DVFhfZ2V0X3ZlcmlmeV9tb2RlKHNlbGYtPmN0eCkgPT0gU1NMX1ZFUklGWV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgImNoZWNrX2hvc3RuYW1lIG5lZWRzIGEgU1NMIGNvbnRleHQgd2l0aCBlaXRoZXIgIgorICAgICAgICAgICAgICAgICAgICAgICAgIkNFUlRfT1BUSU9OQUwgb3IgQ0VSVF9SRVFVSVJFRCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHNlbGYtPmNoZWNrX2hvc3RuYW1lID0gY2hlY2tfaG9zdG5hbWU7CisgICAgcmV0dXJuIDA7Cit9CisKKwogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5VGhyZWFkU3RhdGUgKnRocmVhZF9zdGF0ZTsKICAgICBQeU9iamVjdCAqY2FsbGFibGU7CkBAIC0yMDIwLDggKzIzOTEsOCBAQAogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAotICAgIGZyZWUocHdfaW5mby0+cGFzc3dvcmQpOwotICAgIHB3X2luZm8tPnBhc3N3b3JkID0gbWFsbG9jKHNpemUpOworICAgIFB5TWVtX0ZyZWUocHdfaW5mby0+cGFzc3dvcmQpOworICAgIHB3X2luZm8tPnBhc3N3b3JkID0gUHlNZW1fTWFsbG9jKHNpemUpOwogICAgIGlmICghcHdfaW5mby0+cGFzc3dvcmQpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBhbGxvY2F0ZSBwYXNzd29yZCBidWZmZXIiKTsKQEAgLTIxNjUsNzIgKzI1MzYsMjEyIEBACiAgICAgfQogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfY2IpOwogICAgIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiX3VzZXJkYXRhKHNlbGYtPmN0eCwgb3JpZ19wYXNzd2RfdXNlcmRhdGEpOwotICAgIGZyZWUocHdfaW5mby5wYXNzd29yZCk7CisgICAgUHlNZW1fRnJlZShwd19pbmZvLnBhc3N3b3JkKTsKICAgICBQeV9SRVRVUk5fTk9ORTsKIAogZXJyb3I6CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2Ioc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF9jYik7CiAgICAgU1NMX0NUWF9zZXRfZGVmYXVsdF9wYXNzd2RfY2JfdXNlcmRhdGEoc2VsZi0+Y3R4LCBvcmlnX3Bhc3N3ZF91c2VyZGF0YSk7Ci0gICAgZnJlZShwd19pbmZvLnBhc3N3b3JkKTsKKyAgICBQeU1lbV9GcmVlKHB3X2luZm8ucGFzc3dvcmQpOwogICAgIFB5X1hERUNSRUYoa2V5ZmlsZV9ieXRlcyk7CiAgICAgUHlfWERFQ1JFRihjZXJ0ZmlsZV9ieXRlcyk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qIGludGVybmFsIGhlbHBlciBmdW5jdGlvbiwgcmV0dXJucyAtMSBvbiBlcnJvcgorICovCitzdGF0aWMgaW50CitfYWRkX2NhX2NlcnRzKFB5U1NMQ29udGV4dCAqc2VsZiwgdm9pZCAqZGF0YSwgUHlfc3NpemVfdCBsZW4sCisgICAgICAgICAgICAgIGludCBmaWxldHlwZSkKK3sKKyAgICBCSU8gKmJpb2J1ZiA9IE5VTEw7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgaW50IHJldHZhbCA9IDAsIGVyciwgbG9hZGVkID0gMDsKKworICAgIGFzc2VydChmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfQVNOMSB8fCBmaWxldHlwZSA9PSBTU0xfRklMRVRZUEVfUEVNKTsKKworICAgIGlmIChsZW4gPD0gMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFbXB0eSBjZXJ0aWZpY2F0ZSBkYXRhIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKGxlbiA+IElOVF9NQVgpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2VydGlmaWNhdGUgZGF0YSBpcyB0b28gbG9uZy4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGJpb2J1ZiA9IEJJT19uZXdfbWVtX2J1ZihkYXRhLCAoaW50KWxlbik7CisgICAgaWYgKGJpb2J1ZiA9PSBOVUxMKSB7CisgICAgICAgIF9zZXRTU0xFcnJvcigiQ2FuJ3QgYWxsb2NhdGUgYnVmZmVyIiwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShzZWxmLT5jdHgpOworICAgIGFzc2VydChzdG9yZSAhPSBOVUxMKTsKKworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFg1MDkgKmNlcnQgPSBOVUxMOworICAgICAgICBpbnQgcjsKKworICAgICAgICBpZiAoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX0FTTjEpIHsKKyAgICAgICAgICAgIGNlcnQgPSBkMmlfWDUwOV9iaW8oYmlvYnVmLCBOVUxMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNlcnQgPSBQRU1fcmVhZF9iaW9fWDUwOShiaW9idWYsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+Y3R4LT5kZWZhdWx0X3Bhc3N3ZF9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5jdHgtPmRlZmF1bHRfcGFzc3dkX2NhbGxiYWNrX3VzZXJkYXRhKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2VydCA9PSBOVUxMKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByID0gWDUwOV9TVE9SRV9hZGRfY2VydChzdG9yZSwgY2VydCk7CisgICAgICAgIFg1MDlfZnJlZShjZXJ0KTsKKyAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICBlcnIgPSBFUlJfcGVla19sYXN0X2Vycm9yKCk7CisgICAgICAgICAgICBpZiAoKEVSUl9HRVRfTElCKGVycikgPT0gRVJSX0xJQl9YNTA5KSAmJgorICAgICAgICAgICAgICAgIChFUlJfR0VUX1JFQVNPTihlcnIpID09IFg1MDlfUl9DRVJUX0FMUkVBRFlfSU5fSEFTSF9UQUJMRSkpIHsKKyAgICAgICAgICAgICAgICAvKiBjZXJ0IGFscmVhZHkgaW4gaGFzaCB0YWJsZSwgbm90IGFuIGVycm9yICovCisgICAgICAgICAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGxvYWRlZCsrOworICAgIH0KKworICAgIGVyciA9IEVSUl9wZWVrX2xhc3RfZXJyb3IoKTsKKyAgICBpZiAoKGZpbGV0eXBlID09IFNTTF9GSUxFVFlQRV9BU04xKSAmJgorICAgICAgICAgICAgKGxvYWRlZCA+IDApICYmCisgICAgICAgICAgICAoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX0FTTjEpICYmCisgICAgICAgICAgICAoRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBBU04xX1JfSEVBREVSX1RPT19MT05HKSkgeworICAgICAgICAvKiBFT0YgQVNOMSBmaWxlLCBub3QgYW4gZXJyb3IgKi8KKyAgICAgICAgRVJSX2NsZWFyX2Vycm9yKCk7CisgICAgICAgIHJldHZhbCA9IDA7CisgICAgfSBlbHNlIGlmICgoZmlsZXR5cGUgPT0gU1NMX0ZJTEVUWVBFX1BFTSkgJiYKKyAgICAgICAgICAgICAgICAgICAobG9hZGVkID4gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAoRVJSX0dFVF9MSUIoZXJyKSA9PSBFUlJfTElCX1BFTSkgJiYKKyAgICAgICAgICAgICAgICAgICAoRVJSX0dFVF9SRUFTT04oZXJyKSA9PSBQRU1fUl9OT19TVEFSVF9MSU5FKSkgeworICAgICAgICAvKiBFT0YgUEVNIGZpbGUsIG5vdCBhbiBlcnJvciAqLworICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgcmV0dmFsID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgcmV0dmFsID0gLTE7CisgICAgfQorCisgICAgQklPX2ZyZWUoYmlvYnVmKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCisKIHN0YXRpYyBQeU9iamVjdCAqCiBsb2FkX3ZlcmlmeV9sb2NhdGlvbnMoUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgY2hhciAqa3dsaXN0W10gPSB7ImNhZmlsZSIsICJjYXBhdGgiLCBOVUxMfTsKLSAgICBQeU9iamVjdCAqY2FmaWxlID0gTlVMTCwgKmNhcGF0aCA9IE5VTEw7CisgICAgY2hhciAqa3dsaXN0W10gPSB7ImNhZmlsZSIsICJjYXBhdGgiLCAiY2FkYXRhIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmNhZmlsZSA9IE5VTEwsICpjYXBhdGggPSBOVUxMLCAqY2FkYXRhID0gTlVMTDsKICAgICBQeU9iamVjdCAqY2FmaWxlX2J5dGVzID0gTlVMTCwgKmNhcGF0aF9ieXRlcyA9IE5VTEw7CiAgICAgY29uc3QgY2hhciAqY2FmaWxlX2J1ZiA9IE5VTEwsICpjYXBhdGhfYnVmID0gTlVMTDsKLSAgICBpbnQgcjsKKyAgICBpbnQgciA9IDAsIG9rID0gMTsKIAogICAgIGVycm5vID0gMDsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAotICAgICAgICAifE9POmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyIsIGt3bGlzdCwKLSAgICAgICAgJmNhZmlsZSwgJmNhcGF0aCkpCisgICAgICAgICJ8T09POmxvYWRfdmVyaWZ5X2xvY2F0aW9ucyIsIGt3bGlzdCwKKyAgICAgICAgJmNhZmlsZSwgJmNhcGF0aCwgJmNhZGF0YSkpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgaWYgKGNhZmlsZSA9PSBQeV9Ob25lKQogICAgICAgICBjYWZpbGUgPSBOVUxMOwogICAgIGlmIChjYXBhdGggPT0gUHlfTm9uZSkKICAgICAgICAgY2FwYXRoID0gTlVMTDsKLSAgICBpZiAoY2FmaWxlID09IE5VTEwgJiYgY2FwYXRoID09IE5VTEwpIHsKKyAgICBpZiAoY2FkYXRhID09IFB5X05vbmUpCisgICAgICAgIGNhZGF0YSA9IE5VTEw7CisKKyAgICBpZiAoY2FmaWxlID09IE5VTEwgJiYgY2FwYXRoID09IE5VTEwgJiYgY2FkYXRhID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjYWZpbGUgYW5kIGNhcGF0aCBjYW5ub3QgYmUgYm90aCBvbWl0dGVkIik7Ci0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgImNhZmlsZSwgY2FwYXRoIGFuZCBjYWRhdGEgY2Fubm90IGJlIGFsbCBvbWl0dGVkIik7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChjYWZpbGUgJiYgIVB5VW5pY29kZV9GU0NvbnZlcnRlcihjYWZpbGUsICZjYWZpbGVfYnl0ZXMpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2FmaWxlIHNob3VsZCBiZSBhIHZhbGlkIGZpbGVzeXN0ZW0gcGF0aCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAgICAgaWYgKGNhcGF0aCAmJiAhUHlVbmljb2RlX0ZTQ29udmVydGVyKGNhcGF0aCwgJmNhcGF0aF9ieXRlcykpIHsKLSAgICAgICAgUHlfWERFQ1JFRihjYWZpbGVfYnl0ZXMpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgImNhcGF0aCBzaG91bGQgYmUgYSB2YWxpZCBmaWxlc3lzdGVtIHBhdGgiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGlmIChjYWZpbGUpCi0gICAgICAgIGNhZmlsZV9idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhjYWZpbGVfYnl0ZXMpOwotICAgIGlmIChjYXBhdGgpCi0gICAgICAgIGNhcGF0aF9idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhjYXBhdGhfYnl0ZXMpOwotICAgIFB5U1NMX0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByID0gU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc2VsZi0+Y3R4LCBjYWZpbGVfYnVmLCBjYXBhdGhfYnVmKTsKLSAgICBQeVNTTF9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgLyogdmFsaWRhdGEgY2FkYXRhIHR5cGUgYW5kIGxvYWQgY2FkYXRhICovCisgICAgaWYgKGNhZGF0YSkgeworICAgICAgICBQeV9idWZmZXIgYnVmOworICAgICAgICBQeU9iamVjdCAqY2FkYXRhX2FzY2lpID0gTlVMTDsKKworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGNhZGF0YSwgJmJ1ZiwgUHlCVUZfU0lNUExFKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoIVB5QnVmZmVyX0lzQ29udGlndW91cygmYnVmLCAnQycpIHx8IGJ1Zi5uZGltID4gMSkgeworICAgICAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1Zik7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhZGF0YSBzaG91bGQgYmUgYSBjb250aWd1b3VzIGJ1ZmZlciB3aXRoICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGRpbWVuc2lvbiIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByID0gX2FkZF9jYV9jZXJ0cyhzZWxmLCBidWYuYnVmLCBidWYubGVuLCBTU0xfRklMRVRZUEVfQVNOMSk7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWYpOworICAgICAgICAgICAgaWYgKHIgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIGNhZGF0YV9hc2NpaSA9IFB5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKGNhZGF0YSk7CisgICAgICAgICAgICBpZiAoY2FkYXRhX2FzY2lpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FkYXRhIHNob3VsZCBiZSBhbiBBU0NJSSBzdHJpbmcgb3IgYSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJieXRlcy1saWtlIG9iamVjdCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByID0gX2FkZF9jYV9jZXJ0cyhzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoY2FkYXRhX2FzY2lpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY2FkYXRhX2FzY2lpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9GSUxFVFlQRV9QRU0pOworICAgICAgICAgICAgUHlfREVDUkVGKGNhZGF0YV9hc2NpaSk7CisgICAgICAgICAgICBpZiAociA9PSAtMSkgeworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBsb2FkIGNhZmlsZSBvciBjYXBhdGggKi8KKyAgICBpZiAoY2FmaWxlIHx8IGNhcGF0aCkgeworICAgICAgICBpZiAoY2FmaWxlKQorICAgICAgICAgICAgY2FmaWxlX2J1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGNhZmlsZV9ieXRlcyk7CisgICAgICAgIGlmIChjYXBhdGgpCisgICAgICAgICAgICBjYXBhdGhfYnVmID0gUHlCeXRlc19BU19TVFJJTkcoY2FwYXRoX2J5dGVzKTsKKyAgICAgICAgUHlTU0xfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByID0gU1NMX0NUWF9sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoc2VsZi0+Y3R4LCBjYWZpbGVfYnVmLCBjYXBhdGhfYnVmKTsKKyAgICAgICAgUHlTU0xfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHIgIT0gMSkgeworICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgaWYgKGVycm5vICE9IDApIHsKKyAgICAgICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBfc2V0U1NMRXJyb3IoTlVMTCwgMCwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICB9CisgICAgZ290byBlbmQ7CisKKyAgZXJyb3I6CisgICAgb2sgPSAwOworICBlbmQ6CiAgICAgUHlfWERFQ1JFRihjYWZpbGVfYnl0ZXMpOwogICAgIFB5X1hERUNSRUYoY2FwYXRoX2J5dGVzKTsKLSAgICBpZiAociAhPSAxKSB7Ci0gICAgICAgIGlmIChlcnJubyAhPSAwKSB7Ci0gICAgICAgICAgICBFUlJfY2xlYXJfZXJyb3IoKTsKLSAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOwotICAgICAgICB9CisgICAgaWYgKG9rKSB7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgIH0gZWxzZSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIyMzksNyArMjc1MCw3IEBACiAgICAgRklMRSAqZjsKICAgICBESCAqZGg7CiAKLSAgICBmID0gX1B5X2ZvcGVuKGZpbGVwYXRoLCAicmIiKTsKKyAgICBmID0gX1B5X2ZvcGVuX29iaihmaWxlcGF0aCwgInJiIik7CiAgICAgaWYgKGYgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwgZmlsZXBhdGgpOwpAQCAtMjI4NywxNSArMjc5OCw5IEBACiAgICAgICAgICAgICAmc29jaywgJnNlcnZlcl9zaWRlLAogICAgICAgICAgICAgImlkbmEiLCAmaG9zdG5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0jaWZuZGVmIFNTTF9DVFJMX1NFVF9UTFNFWFRfSE9TVE5BTUUKLSAgICAgICAgUHlNZW1fRnJlZShob3N0bmFtZSk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAic2VydmVyX2hvc3RuYW1lIGlzIG5vdCBzdXBwb3J0ZWQgIgotICAgICAgICAgICAgICAgICAgICAgICAgImJ5IHlvdXIgT3BlblNTTCBsaWJyYXJ5Iik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotI2VuZGlmCiAgICAgfQogCi0gICAgcmVzID0gKFB5T2JqZWN0ICopIG5ld1B5U1NMU29ja2V0KHNlbGYtPmN0eCwgc29jaywgc2VydmVyX3NpZGUsCisgICAgcmVzID0gKFB5T2JqZWN0ICopIG5ld1B5U1NMU29ja2V0KHNlbGYsIHNvY2ssIHNlcnZlcl9zaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3N0bmFtZSk7CiAgICAgaWYgKGhvc3RuYW1lICE9IE5VTEwpCiAgICAgICAgIFB5TWVtX0ZyZWUoaG9zdG5hbWUpOwpAQCAtMjM4MCw5ICsyODg1LDI1OSBAQAogfQogI2VuZGlmCiAKKyNpZiBIQVZFX1NOSSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkKK3N0YXRpYyBpbnQKK19zZXJ2ZXJuYW1lX2NhbGxiYWNrKFNTTCAqcywgaW50ICphbCwgdm9pZCAqYXJncykKK3sKKyAgICBpbnQgcmV0OworICAgIFB5U1NMQ29udGV4dCAqc3NsX2N0eCA9IChQeVNTTENvbnRleHQgKikgYXJnczsKKyAgICBQeVNTTFNvY2tldCAqc3NsOworICAgIFB5T2JqZWN0ICpzZXJ2ZXJuYW1lX287CisgICAgUHlPYmplY3QgKnNlcnZlcm5hbWVfaWRuYTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworICAgIC8qIFRoZSBoaWdoLWxldmVsIHNzbC5TU0xTb2NrZXQgb2JqZWN0ICovCisgICAgUHlPYmplY3QgKnNzbF9zb2NrZXQ7CisgICAgY29uc3QgY2hhciAqc2VydmVybmFtZSA9IFNTTF9nZXRfc2VydmVybmFtZShzLCBUTFNFWFRfTkFNRVRZUEVfaG9zdF9uYW1lKTsKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIFB5R0lMU3RhdGVfU1RBVEUgZ3N0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyNlbmRpZgorCisgICAgaWYgKHNzbF9jdHgtPnNldF9ob3N0bmFtZSA9PSBOVUxMKSB7CisgICAgICAgIC8qIHJlbW92ZSByYWNlIGNvbmRpdGlvbiBpbiB0aGlzIHRoZSBjYWxsIGJhY2sgd2hpbGUgaWYgcmVtb3ZpbmcgdGhlCisgICAgICAgICAqIGNhbGxiYWNrIGlzIGluIHByb2dyZXNzICovCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdzdGF0ZSk7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIFNTTF9UTFNFWFRfRVJSX09LOworICAgIH0KKworICAgIHNzbCA9IFNTTF9nZXRfYXBwX2RhdGEocyk7CisgICAgYXNzZXJ0KFB5U1NMU29ja2V0X0NoZWNrKHNzbCkpOworICAgIHNzbF9zb2NrZXQgPSBQeVdlYWtyZWZfR2V0T2JqZWN0KHNzbC0+U29ja2V0KTsKKyAgICBQeV9JTkNSRUYoc3NsX3NvY2tldCk7CisgICAgaWYgKHNzbF9zb2NrZXQgPT0gUHlfTm9uZSkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKworICAgIGlmIChzZXJ2ZXJuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzc2xfY3R4LT5zZXRfaG9zdG5hbWUsIHNzbF9zb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSwgc3NsX2N0eCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzZXJ2ZXJuYW1lX28gPSBQeUJ5dGVzX0Zyb21TdHJpbmcoc2VydmVybmFtZSk7CisgICAgICAgIGlmIChzZXJ2ZXJuYW1lX28gPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKChQeU9iamVjdCAqKSBzc2xfY3R4KTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgc2VydmVybmFtZV9pZG5hID0gUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHNlcnZlcm5hbWVfbywgImlkbmEiLCBOVUxMKTsKKyAgICAgICAgaWYgKHNlcnZlcm5hbWVfaWRuYSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc2VydmVybmFtZV9vKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXJ2ZXJuYW1lX28pOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc2VydmVybmFtZV9vKTsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhzc2xfY3R4LT5zZXRfaG9zdG5hbWUsIHNzbF9zb2NrZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVybmFtZV9pZG5hLCBzc2xfY3R4LCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKHNlcnZlcm5hbWVfaWRuYSk7CisgICAgfQorICAgIFB5X0RFQ1JFRihzc2xfc29ja2V0KTsKKworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoc3NsX2N0eC0+c2V0X2hvc3RuYW1lKTsKKyAgICAgICAgKmFsID0gU1NMX0FEX0hBTkRTSEFLRV9GQUlMVVJFOworICAgICAgICByZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmIChyZXN1bHQgIT0gUHlfTm9uZSkgeworICAgICAgICAgICAgKmFsID0gKGludCkgUHlMb25nX0FzTG9uZyhyZXN1bHQpOworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUocmVzdWx0KTsKKyAgICAgICAgICAgICAgICAqYWwgPSBTU0xfQURfSU5URVJOQUxfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXQgPSBTU0xfVExTRVhUX0VSUl9BTEVSVF9GQVRBTDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX09LOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIH0KKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0OworCitlcnJvcjoKKyAgICBQeV9ERUNSRUYoc3NsX3NvY2tldCk7CisgICAgKmFsID0gU1NMX0FEX0lOVEVSTkFMX0VSUk9SOworICAgIHJldCA9IFNTTF9UTFNFWFRfRVJSX0FMRVJUX0ZBVEFMOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdzdGF0ZSk7CisjZW5kaWYKKyAgICByZXR1cm4gcmV0OworfQorI2VuZGlmCisKK1B5RG9jX1NUUlZBUihQeVNTTF9zZXRfc2VydmVybmFtZV9jYWxsYmFja19kb2MsCisic2V0X3NlcnZlcm5hbWVfY2FsbGJhY2sobWV0aG9kKVxuXAorXG5cCitUaGlzIHNldHMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBzZXJ2ZXIgbmFtZSBpcyBwcm92aWRlZCBieVxuXAordGhlIFNTTC9UTFMgY2xpZW50IGluIHRoZSBTTkkgZXh0ZW5zaW9uLlxuXAorXG5cCitJZiB0aGUgYXJndW1lbnQgaXMgTm9uZSB0aGVuIHRoZSBjYWxsYmFjayBpcyBkaXNhYmxlZC4gVGhlIG1ldGhvZCBpcyBjYWxsZWRcblwKK3dpdGggdGhlIFNTTFNvY2tldCwgdGhlIHNlcnZlciBuYW1lIGFzIGEgc3RyaW5nLCBhbmQgdGhlIFNTTENvbnRleHQgb2JqZWN0LlxuXAorU2VlIFJGQyA2MDY2IGZvciBkZXRhaWxzIG9mIHRoZSBTTkkgZXh0ZW5zaW9uLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc2V0X3NlcnZlcm5hbWVfY2FsbGJhY2soUHlTU0xDb250ZXh0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyNpZiBIQVZFX1NOSSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX1RMU0VYVCkKKyAgICBQeU9iamVjdCAqY2I7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8iLCAmY2IpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0NMRUFSKHNlbGYtPnNldF9ob3N0bmFtZSk7CisgICAgaWYgKGNiID09IFB5X05vbmUpIHsKKyAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfY2FsbGJhY2soc2VsZi0+Y3R4LCBOVUxMKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICghUHlDYWxsYWJsZV9DaGVjayhjYikpIHsKKyAgICAgICAgICAgIFNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKHNlbGYtPmN0eCwgTlVMTCk7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYSBjYWxsYWJsZSBvYmplY3QiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRihjYik7CisgICAgICAgIHNlbGYtPnNldF9ob3N0bmFtZSA9IGNiOworICAgICAgICBTU0xfQ1RYX3NldF90bHNleHRfc2VydmVybmFtZV9jYWxsYmFjayhzZWxmLT5jdHgsIF9zZXJ2ZXJuYW1lX2NhbGxiYWNrKTsKKyAgICAgICAgU1NMX0NUWF9zZXRfdGxzZXh0X3NlcnZlcm5hbWVfYXJnKHNlbGYtPmN0eCwgc2VsZik7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworI2Vsc2UKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgIlRoZSBUTFMgZXh0ZW5zaW9uIHNlcnZlcm5hbWUgY2FsbGJhY2ssICIKKyAgICAgICAgICAgICAgICAgICAgIlNTTF9DVFhfc2V0X3Rsc2V4dF9zZXJ2ZXJuYW1lX2NhbGxiYWNrLCAiCisgICAgICAgICAgICAgICAgICAgICJpcyBub3QgaW4gdGhlIGN1cnJlbnQgT3BlblNTTCBsaWJyYXJ5LiIpOworICAgIHJldHVybiBOVUxMOworI2VuZGlmCit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9nZXRfc3RhdHNfZG9jLAorImNlcnRfc3RvcmVfc3RhdHMoKSAtPiB7J2NybCc6IGludCwgJ3g1MDlfY2EnOiBpbnQsICd4NTA5JzogaW50fVxuXAorXG5cCitSZXR1cm5zIHF1YW50aXRpZXMgb2YgbG9hZGVkIFguNTA5IGNlcnRpZmljYXRlcy4gWC41MDkgY2VydGlmaWNhdGVzIHdpdGggYVxuXAorQ0EgZXh0ZW5zaW9uIGFuZCBjZXJ0aWZpY2F0ZSByZXZvY2F0aW9uIGxpc3RzIGluc2lkZSB0aGUgY29udGV4dCdzIGNlcnRcblwKK3N0b3JlLlxuXAorTk9URTogQ2VydGlmaWNhdGVzIGluIGEgY2FwYXRoIGRpcmVjdG9yeSBhcmVuJ3QgbG9hZGVkIHVubGVzcyB0aGV5IGhhdmVcblwKK2JlZW4gdXNlZCBhdCBsZWFzdCBvbmNlLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorY2VydF9zdG9yZV9zdGF0cyhQeVNTTENvbnRleHQgKnNlbGYpCit7CisgICAgWDUwOV9TVE9SRSAqc3RvcmU7CisgICAgWDUwOV9PQkpFQ1QgKm9iajsKKyAgICBpbnQgeDUwOSA9IDAsIGNybCA9IDAsIHBrZXkgPSAwLCBjYSA9IDAsIGk7CisKKyAgICBzdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUoc2VsZi0+Y3R4KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2tfWDUwOV9PQkpFQ1RfbnVtKHN0b3JlLT5vYmpzKTsgaSsrKSB7CisgICAgICAgIG9iaiA9IHNrX1g1MDlfT0JKRUNUX3ZhbHVlKHN0b3JlLT5vYmpzLCBpKTsKKyAgICAgICAgc3dpdGNoIChvYmotPnR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgWDUwOV9MVV9YNTA5OgorICAgICAgICAgICAgICAgIHg1MDkrKzsKKyAgICAgICAgICAgICAgICBpZiAoWDUwOV9jaGVja19jYShvYmotPmRhdGEueDUwOSkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ErKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFg1MDlfTFVfQ1JMOgorICAgICAgICAgICAgICAgIGNybCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBYNTA5X0xVX1BLRVk6CisgICAgICAgICAgICAgICAgcGtleSsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvKiBJZ25vcmUgWDUwOV9MVV9GQUlMLCBYNTA5X0xVX1JFVFJZLCBYNTA5X0xVX1BLRVkuCisgICAgICAgICAgICAgICAgICogQXMgZmFyIGFzIEkgY2FuIHRlbGwgdGhleSBhcmUgaW50ZXJuYWwgc3RhdGVzIGFuZCBuZXZlcgorICAgICAgICAgICAgICAgICAqIHN0b3JlZCBpbiBhIGNlcnQgc3RvcmUgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgie3Npc2lzaX0iLCAieDUwOSIsIHg1MDksICJjcmwiLCBjcmwsCisgICAgICAgICJ4NTA5X2NhIiwgY2EpOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfZ2V0X2NhX2NlcnRzX2RvYywKKyJnZXRfY2FfY2VydHMoYmluYXJ5X2Zvcm09RmFsc2UpIC0+IGxpc3Qgb2YgbG9hZGVkIGNlcnRpZmljYXRlXG5cCitcblwKK1JldHVybnMgYSBsaXN0IG9mIGRpY3RzIHdpdGggaW5mb3JtYXRpb24gb2YgbG9hZGVkIENBIGNlcnRzLiBJZiB0aGVcblwKK29wdGlvbmFsIGFyZ3VtZW50IGlzIFRydWUsIHJldHVybnMgYSBERVItZW5jb2RlZCBjb3B5IG9mIHRoZSBDQSBjZXJ0aWZpY2F0ZS5cblwKK05PVEU6IENlcnRpZmljYXRlcyBpbiBhIGNhcGF0aCBkaXJlY3RvcnkgYXJlbid0IGxvYWRlZCB1bmxlc3MgdGhleSBoYXZlXG5cCitiZWVuIHVzZWQgYXQgbGVhc3Qgb25jZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2dldF9jYV9jZXJ0cyhQeVNTTENvbnRleHQgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsiYmluYXJ5X2Zvcm0iLCBOVUxMfTsKKyAgICBYNTA5X1NUT1JFICpzdG9yZTsKKyAgICBQeU9iamVjdCAqY2kgPSBOVUxMLCAqcmxpc3QgPSBOVUxMOworICAgIGludCBpOworICAgIGludCBiaW5hcnlfbW9kZSA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifHA6Z2V0X2NhX2NlcnRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZiaW5hcnlfbW9kZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKChybGlzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3RvcmUgPSBTU0xfQ1RYX2dldF9jZXJ0X3N0b3JlKHNlbGYtPmN0eCk7CisgICAgZm9yIChpID0gMDsgaSA8IHNrX1g1MDlfT0JKRUNUX251bShzdG9yZS0+b2Jqcyk7IGkrKykgeworICAgICAgICBYNTA5X09CSkVDVCAqb2JqOworICAgICAgICBYNTA5ICpjZXJ0OworCisgICAgICAgIG9iaiA9IHNrX1g1MDlfT0JKRUNUX3ZhbHVlKHN0b3JlLT5vYmpzLCBpKTsKKyAgICAgICAgaWYgKG9iai0+dHlwZSAhPSBYNTA5X0xVX1g1MDkpIHsKKyAgICAgICAgICAgIC8qIG5vdCBhIHg1MDkgY2VydCAqLworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLyogQ0EgZm9yIGFueSBwdXJwb3NlICovCisgICAgICAgIGNlcnQgPSBvYmotPmRhdGEueDUwOTsKKyAgICAgICAgaWYgKCFYNTA5X2NoZWNrX2NhKGNlcnQpKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmluYXJ5X21vZGUpIHsKKyAgICAgICAgICAgIGNpID0gX2NlcnRpZmljYXRlX3RvX2RlcihjZXJ0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNpID0gX2RlY29kZV9jZXJ0aWZpY2F0ZShjZXJ0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2kgPT0gTlVMTCkgeworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChybGlzdCwgY2kpID09IC0xKSB7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGNpKTsKKyAgICB9CisgICAgcmV0dXJuIHJsaXN0OworCisgIGVycm9yOgorICAgIFB5X1hERUNSRUYoY2kpOworICAgIFB5X1hERUNSRUYocmxpc3QpOworICAgIHJldHVybiBOVUxMOworfQorCisKIHN0YXRpYyBQeUdldFNldERlZiBjb250ZXh0X2dldHNldGxpc3RbXSA9IHsKKyAgICB7ImNoZWNrX2hvc3RuYW1lIiwgKGdldHRlcikgZ2V0X2NoZWNrX2hvc3RuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfY2hlY2tfaG9zdG5hbWUsIE5VTEx9LAogICAgIHsib3B0aW9ucyIsIChnZXR0ZXIpIGdldF9vcHRpb25zLAogICAgICAgICAgICAgICAgIChzZXR0ZXIpIHNldF9vcHRpb25zLCBOVUxMfSwKKyNpZmRlZiBIQVZFX09QRU5TU0xfVkVSSUZZX1BBUkFNCisgICAgeyJ2ZXJpZnlfZmxhZ3MiLCAoZ2V0dGVyKSBnZXRfdmVyaWZ5X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgKHNldHRlcikgc2V0X3ZlcmlmeV9mbGFncywgTlVMTH0sCisjZW5kaWYKICAgICB7InZlcmlmeV9tb2RlIiwgKGdldHRlcikgZ2V0X3ZlcmlmeV9tb2RlLAogICAgICAgICAgICAgICAgICAgICAoc2V0dGVyKSBzZXRfdmVyaWZ5X21vZGUsIE5VTEx9LAogICAgIHtOVUxMfSwgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtMjQwOSw2ICszMTY0LDEyIEBACiAgICAgeyJzZXRfZWNkaF9jdXJ2ZSIsIChQeUNGdW5jdGlvbikgc2V0X2VjZGhfY3VydmUsCiAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfTywgTlVMTH0sCiAjZW5kaWYKKyAgICB7InNldF9zZXJ2ZXJuYW1lX2NhbGxiYWNrIiwgKFB5Q0Z1bmN0aW9uKSBzZXRfc2VydmVybmFtZV9jYWxsYmFjaywKKyAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTLCBQeVNTTF9zZXRfc2VydmVybmFtZV9jYWxsYmFja19kb2N9LAorICAgIHsiY2VydF9zdG9yZV9zdGF0cyIsIChQeUNGdW5jdGlvbikgY2VydF9zdG9yZV9zdGF0cywKKyAgICAgICAgICAgICAgICAgICAgTUVUSF9OT0FSR1MsIFB5U1NMX2dldF9zdGF0c19kb2N9LAorICAgIHsiZ2V0X2NhX2NlcnRzIiwgKFB5Q0Z1bmN0aW9uKSBnZXRfY2FfY2VydHMsCisgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX2dldF9jYV9jZXJ0c19kb2N9LAogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTI0MzIsMTAgKzMxOTMsMTAgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciovCi0gICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19CQVNFVFlQRSwgIC8qdHBfZmxhZ3MqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUgfCBQeV9UUEZMQUdTX0hBVkVfR0MsIC8qdHBfZmxhZ3MqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfdHJhdmVyc2UqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KKyAgICAodHJhdmVyc2Vwcm9jKSBjb250ZXh0X3RyYXZlcnNlLCAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCisgICAgKGlucXVpcnkpIGNvbnRleHRfY2xlYXIsICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCkBAIC0yNDYyLDEyICszMjIzLDE3IEBACiBQeVNTTF9SQU5EX2FkZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqYnVmOwotICAgIGludCBsZW47CisgICAgUHlfc3NpemVfdCBsZW4sIHdyaXR0ZW47CiAgICAgZG91YmxlIGVudHJvcHk7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjZDpSQU5EX2FkZCIsICZidWYsICZsZW4sICZlbnRyb3B5KSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUkFORF9hZGQoYnVmLCBsZW4sIGVudHJvcHkpOworICAgIGRvIHsKKyAgICAgICAgd3JpdHRlbiA9IFB5X01JTihsZW4sIElOVF9NQVgpOworICAgICAgICBSQU5EX2FkZChidWYsIChpbnQpd3JpdHRlbiwgZW50cm9weSk7CisgICAgICAgIGJ1ZiArPSB3cml0dGVuOworICAgICAgICBsZW4gLT0gd3JpdHRlbjsKKyAgICB9IHdoaWxlIChsZW4pOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTI1NTksNiArMzMyNSw3IEBACiBJdCBpcyBuZWNlc3NhcnkgdG8gc2VlZCB0aGUgUFJORyB3aXRoIFJBTkRfYWRkKCkgb24gc29tZSBwbGF0Zm9ybXMgYmVmb3JlXG5cCiB1c2luZyB0aGUgc3NsKCkgZnVuY3Rpb24uIik7CiAKKyNpZmRlZiBIQVZFX1JBTkRfRUdECiBzdGF0aWMgUHlPYmplY3QgKgogUHlTU0xfUkFORF9lZ2QoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtMjU4NiwxMSArMzM1MywzOTMgQEAKIFF1ZXJpZXMgdGhlIGVudHJvcHkgZ2F0aGVyIGRhZW1vbiAoRUdEKSBvbiB0aGUgc29ja2V0IG5hbWVkIGJ5ICdwYXRoJy5cblwKIFJldHVybnMgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuICBSYWlzZXMgU1NMRXJyb3IgaWYgY29ubmVjdGlvbiB0byBFR0RcblwKIGZhaWxzIG9yIGlmIGl0IGRvZXMgbm90IHByb3ZpZGUgZW5vdWdoIGRhdGEgdG8gc2VlZCBQUk5HLiIpOworI2VuZGlmIC8qIEhBVkVfUkFORF9FR0QgKi8KIAogI2VuZGlmIC8qIEhBVkVfT1BFTlNTTF9SQU5EICovCiAKIAorUHlEb2NfU1RSVkFSKFB5U1NMX2dldF9kZWZhdWx0X3ZlcmlmeV9wYXRoc19kb2MsCisiZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkgLT4gdHVwbGVcblwKK1xuXAorUmV0dXJuIHNlYXJjaCBwYXRocyBhbmQgZW52aXJvbm1lbnQgdmFycyB0aGF0IGFyZSB1c2VkIGJ5IFNTTENvbnRleHQnc1xuXAorc2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKCkgdG8gbG9hZCBkZWZhdWx0IENBcy4gVGhlIHZhbHVlcyBhcmVcblwKKydjZXJ0X2ZpbGVfZW52JywgJ2NlcnRfZmlsZScsICdjZXJ0X2Rpcl9lbnYnLCAnY2VydF9kaXInLiIpOwogCitzdGF0aWMgUHlPYmplY3QgKgorUHlTU0xfZ2V0X2RlZmF1bHRfdmVyaWZ5X3BhdGhzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5T2JqZWN0ICpvZmlsZV9lbnYgPSBOVUxMOworICAgIFB5T2JqZWN0ICpvZmlsZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm9kaXJfZW52ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqb2RpciA9IE5VTEw7CisKKyNkZWZpbmUgQ09OVkVSVChpbmZvLCB0YXJnZXQpIHsgXAorICAgICAgICBjb25zdCBjaGFyICp0bXAgPSAoaW5mbyk7IFwKKyAgICAgICAgdGFyZ2V0ID0gTlVMTDsgXAorICAgICAgICBpZiAoIXRtcCkgeyBQeV9JTkNSRUYoUHlfTm9uZSk7IHRhcmdldCA9IFB5X05vbmU7IH0gXAorICAgICAgICBlbHNlIGlmICgodGFyZ2V0ID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdCh0bXApKSA9PSBOVUxMKSB7IFwKKyAgICAgICAgICAgIHRhcmdldCA9IFB5Qnl0ZXNfRnJvbVN0cmluZyh0bXApOyB9IFwKKyAgICAgICAgaWYgKCF0YXJnZXQpIGdvdG8gZXJyb3I7IFwKKyAgICB9CisKKyAgICBDT05WRVJUKFg1MDlfZ2V0X2RlZmF1bHRfY2VydF9maWxlX2VudigpLCBvZmlsZV9lbnYpOworICAgIENPTlZFUlQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2ZpbGUoKSwgb2ZpbGUpOworICAgIENPTlZFUlQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2Rpcl9lbnYoKSwgb2Rpcl9lbnYpOworICAgIENPTlZFUlQoWDUwOV9nZXRfZGVmYXVsdF9jZXJ0X2RpcigpLCBvZGlyKTsKKyN1bmRlZiBDT05WRVJUCisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTk5OTiIsIG9maWxlX2Vudiwgb2ZpbGUsIG9kaXJfZW52LCBvZGlyKTsKKworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKG9maWxlX2Vudik7CisgICAgUHlfWERFQ1JFRihvZmlsZSk7CisgICAgUHlfWERFQ1JFRihvZGlyX2Vudik7CisgICAgUHlfWERFQ1JFRihvZGlyKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIFB5T2JqZWN0KgorYXNuMW9iajJweShBU04xX09CSkVDVCAqb2JqKQoreworICAgIGludCBuaWQ7CisgICAgY29uc3QgY2hhciAqbG4sICpzbjsKKyAgICBjaGFyIGJ1ZlsxMDBdOworICAgIFB5X3NzaXplX3QgYnVmbGVuOworCisgICAgbmlkID0gT0JKX29iajJuaWQob2JqKTsKKyAgICBpZiAobmlkID09IE5JRF91bmRlZikgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIlVua25vd24gb2JqZWN0Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzbiA9IE9CSl9uaWQyc24obmlkKTsKKyAgICBsbiA9IE9CSl9uaWQybG4obmlkKTsKKyAgICBidWZsZW4gPSBPQkpfb2JqMnR4dChidWYsIHNpemVvZihidWYpLCBvYmosIDEpOworICAgIGlmIChidWZsZW4gPCAwKSB7CisgICAgICAgIF9zZXRTU0xFcnJvcihOVUxMLCAwLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKGJ1ZmxlbikgeworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaXNzcyMiLCBuaWQsIHNuLCBsbiwgYnVmLCBidWZsZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpc3NPIiwgbmlkLCBzbiwgbG4sIFB5X05vbmUpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX3R4dDJvYmpfZG9jLAorInR4dDJvYmoodHh0LCBuYW1lPUZhbHNlKSAtPiAobmlkLCBzaG9ydG5hbWUsIGxvbmduYW1lLCBvaWQpXG5cCitcblwKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNULiBCeSBkZWZhdWx0XG5cCitvYmplY3RzIGFyZSBsb29rZWQgdXAgYnkgT0lELiBXaXRoIG5hbWU9VHJ1ZSBzaG9ydCBhbmQgbG9uZyBuYW1lIGFyZSBhbHNvXG5cCittYXRjaGVkLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitQeVNTTF90eHQyb2JqKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCit7CisgICAgY2hhciAqa3dsaXN0W10gPSB7InR4dCIsICJuYW1lIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgY2hhciAqdHh0OworICAgIGludCBuYW1lID0gMDsKKyAgICBBU04xX09CSkVDVCAqb2JqOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInN8cDp0eHQyb2JqIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZ0eHQsICZuYW1lKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb2JqID0gT0JKX3R4dDJvYmoodHh0LCBuYW1lID8gMCA6IDEpOworICAgIGlmIChvYmogPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgInVua25vd24gb2JqZWN0ICclLjEwMHMnIiwgdHh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IGFzbjFvYmoycHkob2JqKTsKKyAgICBBU04xX09CSkVDVF9mcmVlKG9iaik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworUHlEb2NfU1RSVkFSKFB5U1NMX25pZDJvYmpfZG9jLAorIm5pZDJvYmoobmlkKSAtPiAobmlkLCBzaG9ydG5hbWUsIGxvbmduYW1lLCBvaWQpXG5cCitcblwKK0xvb2t1cCBOSUQsIHNob3J0IG5hbWUsIGxvbmcgbmFtZSBhbmQgT0lEIG9mIGFuIEFTTjFfT0JKRUNUIGJ5IE5JRC4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorUHlTU0xfbmlkMm9iaihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgaW50IG5pZDsKKyAgICBBU04xX09CSkVDVCAqb2JqOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm5pZDJvYmoiLCAmbmlkKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKG5pZCA8IE5JRF91bmRlZikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIk5JRCBtdXN0IGJlIHBvc2l0aXZlLiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgb2JqID0gT0JKX25pZDJvYmoobmlkKTsKKyAgICBpZiAob2JqID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmtub3duIE5JRCAlaSIsIG5pZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBhc24xb2JqMnB5KG9iaik7CisgICAgQVNOMV9PQkpFQ1RfZnJlZShvYmopOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNpZmRlZiBfTVNDX1ZFUgorCitzdGF0aWMgUHlPYmplY3QqCitjZXJ0RW5jb2RpbmdUeXBlKERXT1JEIGVuY29kaW5nVHlwZSkKK3sKKyAgICBzdGF0aWMgUHlPYmplY3QgKng1MDlfYXNuID0gTlVMTDsKKyAgICBzdGF0aWMgUHlPYmplY3QgKnBrY3NfN19hc24gPSBOVUxMOworCisgICAgaWYgKHg1MDlfYXNuID09IE5VTEwpIHsKKyAgICAgICAgeDUwOV9hc24gPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygieDUwOV9hc24iKTsKKyAgICAgICAgaWYgKHg1MDlfYXNuID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHBrY3NfN19hc24gPT0gTlVMTCkgeworICAgICAgICBwa2NzXzdfYXNuID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoInBrY3NfN19hc24iKTsKKyAgICAgICAgaWYgKHBrY3NfN19hc24gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzd2l0Y2goZW5jb2RpbmdUeXBlKSB7CisgICAgY2FzZSBYNTA5X0FTTl9FTkNPRElORzoKKyAgICAgICAgUHlfSU5DUkVGKHg1MDlfYXNuKTsKKyAgICAgICAgcmV0dXJuIHg1MDlfYXNuOworICAgIGNhc2UgUEtDU183X0FTTl9FTkNPRElORzoKKyAgICAgICAgUHlfSU5DUkVGKHBrY3NfN19hc24pOworICAgICAgICByZXR1cm4gcGtjc183X2FzbjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGVuY29kaW5nVHlwZSk7CisgICAgfQorfQorCitzdGF0aWMgUHlPYmplY3QqCitwYXJzZUtleVVzYWdlKFBDQ0VSVF9DT05URVhUIHBDZXJ0Q3R4LCBEV09SRCBmbGFncykKK3sKKyAgICBDRVJUX0VOSEtFWV9VU0FHRSAqdXNhZ2U7CisgICAgRFdPUkQgc2l6ZSwgZXJyb3IsIGk7CisgICAgUHlPYmplY3QgKnJldHZhbDsKKworICAgIGlmICghQ2VydEdldEVuaGFuY2VkS2V5VXNhZ2UocENlcnRDdHgsIGZsYWdzLCBOVUxMLCAmc2l6ZSkpIHsKKyAgICAgICAgZXJyb3IgPSBHZXRMYXN0RXJyb3IoKTsKKyAgICAgICAgaWYgKGVycm9yID09IENSWVBUX0VfTk9UX0ZPVU5EKSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoZXJyb3IpOworICAgIH0KKworICAgIHVzYWdlID0gKENFUlRfRU5IS0VZX1VTQUdFKilQeU1lbV9NYWxsb2Moc2l6ZSk7CisgICAgaWYgKHVzYWdlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQorCisgICAgLyogTm93IGdldCB0aGUgYWN0dWFsIGVuaGFuY2VkIHVzYWdlIHByb3BlcnR5ICovCisgICAgaWYgKCFDZXJ0R2V0RW5oYW5jZWRLZXlVc2FnZShwQ2VydEN0eCwgZmxhZ3MsIHVzYWdlLCAmc2l6ZSkpIHsKKyAgICAgICAgUHlNZW1fRnJlZSh1c2FnZSk7CisgICAgICAgIGVycm9yID0gR2V0TGFzdEVycm9yKCk7CisgICAgICAgIGlmIChlcnJvciA9PSBDUllQVF9FX05PVF9GT1VORCkgeworICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycm9yKTsKKyAgICB9CisgICAgcmV0dmFsID0gUHlTZXRfTmV3KE5VTEwpOworICAgIGlmIChyZXR2YWwgPT0gTlVMTCkgeworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNhZ2UtPmNVc2FnZUlkZW50aWZpZXI7ICsraSkgeworICAgICAgICBpZiAodXNhZ2UtPnJncHN6VXNhZ2VJZGVudGlmaWVyW2ldKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqb2lkOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIG9pZCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHVzYWdlLT5yZ3BzelVzYWdlSWRlbnRpZmllcltpXSk7CisgICAgICAgICAgICBpZiAob2lkID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9DTEVBUihyZXR2YWwpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQocmV0dmFsLCBvaWQpOworICAgICAgICAgICAgUHlfREVDUkVGKG9pZCk7CisgICAgICAgICAgICBpZiAoZXJyID09IC0xKSB7CisgICAgICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICBlcnJvcjoKKyAgICBQeU1lbV9GcmVlKHVzYWdlKTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitQeURvY19TVFJWQVIoUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXNfZG9jLAorImVudW1fY2VydGlmaWNhdGVzKHN0b3JlX25hbWUpIC0+IFtdXG5cCitcblwKK1JldHJpZXZlIGNlcnRpZmljYXRlcyBmcm9tIFdpbmRvd3MnIGNlcnQgc3RvcmUuIHN0b3JlX25hbWUgbWF5IGJlIG9uZSBvZlxuXAorJ0NBJywgJ1JPT1QnIG9yICdNWScuIFRoZSBzeXN0ZW0gbWF5IHByb3ZpZGUgbW9yZSBjZXJ0IHN0b3JhZ2VzLCB0b28uXG5cCitUaGUgZnVuY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgKGJ5dGVzLCBlbmNvZGluZ190eXBlLCB0cnVzdCkgdHVwbGVzLiBUaGVcblwKK2VuY29kaW5nX3R5cGUgZmxhZyBjYW4gYmUgaW50ZXJwcmV0ZWQgd2l0aCBYNTA5X0FTTl9FTkNPRElORyBvclxuXAorUEtDU183X0FTTl9FTkNPRElORy4gVGhlIHRydXN0IHNldHRpbmcgaXMgZWl0aGVyIGEgc2V0IG9mIE9JRHMgb3IgdGhlXG5cCitib29sZWFuIFRydWUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9lbnVtX2NlcnRpZmljYXRlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIGNoYXIgKmt3bGlzdFtdID0geyJzdG9yZV9uYW1lIiwgTlVMTH07CisgICAgY2hhciAqc3RvcmVfbmFtZTsKKyAgICBIQ0VSVFNUT1JFIGhTdG9yZSA9IE5VTEw7CisgICAgUENDRVJUX0NPTlRFWFQgcENlcnRDdHggPSBOVUxMOworICAgIFB5T2JqZWN0ICprZXl1c2FnZSA9IE5VTEwsICpjZXJ0ID0gTlVMTCwgKmVuYyA9IE5VTEwsICp0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInM6ZW51bV9jZXJ0aWZpY2F0ZXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnN0b3JlX25hbWUpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXN1bHQgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaFN0b3JlID0gQ2VydE9wZW5TdG9yZShDRVJUX1NUT1JFX1BST1ZfU1lTVEVNX0EsIDAsIChIQ1JZUFRQUk9WKU5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0VSVF9TVE9SRV9SRUFET05MWV9GTEFHIHwgQ0VSVF9TWVNURU1fU1RPUkVfTE9DQUxfTUFDSElORSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZV9uYW1lKTsKKyAgICBpZiAoaFN0b3JlID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgfQorCisgICAgd2hpbGUgKHBDZXJ0Q3R4ID0gQ2VydEVudW1DZXJ0aWZpY2F0ZXNJblN0b3JlKGhTdG9yZSwgcENlcnRDdHgpKSB7CisgICAgICAgIGNlcnQgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyKilwQ2VydEN0eC0+cGJDZXJ0RW5jb2RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcENlcnRDdHgtPmNiQ2VydEVuY29kZWQpOworICAgICAgICBpZiAoIWNlcnQpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGVuYyA9IGNlcnRFbmNvZGluZ1R5cGUocENlcnRDdHgtPmR3Q2VydEVuY29kaW5nVHlwZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBrZXl1c2FnZSA9IHBhcnNlS2V5VXNhZ2UocENlcnRDdHgsIENFUlRfRklORF9QUk9QX09OTFlfRU5IS0VZX1VTQUdFX0ZMQUcpOworICAgICAgICBpZiAoa2V5dXNhZ2UgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGtleXVzYWdlKTsKKyAgICAgICAgICAgIGtleXVzYWdlID0gcGFyc2VLZXlVc2FnZShwQ2VydEN0eCwgQ0VSVF9GSU5EX0VYVF9PTkxZX0VOSEtFWV9VU0FHRV9GTEFHKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5dXNhZ2UgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgodHVwID0gUHlUdXBsZV9OZXcoMykpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMCwgY2VydCk7CisgICAgICAgIGNlcnQgPSBOVUxMOworICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgMSwgZW5jKTsKKyAgICAgICAgZW5jID0gTlVMTDsKKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDIsIGtleXVzYWdlKTsKKyAgICAgICAga2V5dXNhZ2UgPSBOVUxMOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIHR1cCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIodHVwKTsKKyAgICB9CisgICAgaWYgKHBDZXJ0Q3R4KSB7CisgICAgICAgIC8qIGxvb3AgZW5kZWQgd2l0aCBhbiBlcnJvciwgbmVlZCB0byBjbGVhbiB1cCBjb250ZXh0IG1hbnVhbGx5ICovCisgICAgICAgIENlcnRGcmVlQ2VydGlmaWNhdGVDb250ZXh0KHBDZXJ0Q3R4KTsKKyAgICB9CisKKyAgICAvKiBJbiBlcnJvciBjYXNlcyBjZXJ0LCBlbmMgYW5kIHR1cCBtYXkgbm90IGJlIE5VTEwgKi8KKyAgICBQeV9YREVDUkVGKGNlcnQpOworICAgIFB5X1hERUNSRUYoZW5jKTsKKyAgICBQeV9YREVDUkVGKGtleXVzYWdlKTsKKyAgICBQeV9YREVDUkVGKHR1cCk7CisKKyAgICBpZiAoIUNlcnRDbG9zZVN0b3JlKGhTdG9yZSwgMCkpIHsKKyAgICAgICAgLyogVGhpcyBlcnJvciBjYXNlIG1pZ2h0IHNoYWRvdyBhbm90aGVyIGV4Y2VwdGlvbi4qLworICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1B5RG9jX1NUUlZBUihQeVNTTF9lbnVtX2NybHNfZG9jLAorImVudW1fY3JscyhzdG9yZV9uYW1lKSAtPiBbXVxuXAorXG5cCitSZXRyaWV2ZSBDUkxzIGZyb20gV2luZG93cycgY2VydCBzdG9yZS4gc3RvcmVfbmFtZSBtYXkgYmUgb25lIG9mXG5cCisnQ0EnLCAnUk9PVCcgb3IgJ01ZJy4gVGhlIHN5c3RlbSBtYXkgcHJvdmlkZSBtb3JlIGNlcnQgc3RvcmFnZXMsIHRvby5cblwKK1RoZSBmdW5jdGlvbiByZXR1cm5zIGEgbGlzdCBvZiAoYnl0ZXMsIGVuY29kaW5nX3R5cGUpIHR1cGxlcy4gVGhlXG5cCitlbmNvZGluZ190eXBlIGZsYWcgY2FuIGJlIGludGVycHJldGVkIHdpdGggWDUwOV9BU05fRU5DT0RJTkcgb3JcblwKK1BLQ1NfN19BU05fRU5DT0RJTkcuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitQeVNTTF9lbnVtX2NybHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKK3sKKyAgICBjaGFyICprd2xpc3RbXSA9IHsic3RvcmVfbmFtZSIsIE5VTEx9OworICAgIGNoYXIgKnN0b3JlX25hbWU7CisgICAgSENFUlRTVE9SRSBoU3RvcmUgPSBOVUxMOworICAgIFBDQ1JMX0NPTlRFWFQgcENybEN0eCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNybCA9IE5VTEwsICplbmMgPSBOVUxMLCAqdHVwID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJzOmVudW1fY3JscyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc3RvcmVfbmFtZSkpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJlc3VsdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBoU3RvcmUgPSBDZXJ0T3BlblN0b3JlKENFUlRfU1RPUkVfUFJPVl9TWVNURU1fQSwgMCwgKEhDUllQVFBST1YpTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRVJUX1NUT1JFX1JFQURPTkxZX0ZMQUcgfCBDRVJUX1NZU1RFTV9TVE9SRV9MT0NBTF9NQUNISU5FLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlX25hbWUpOworICAgIGlmIChoU3RvcmUgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKEdldExhc3RFcnJvcigpKTsKKyAgICB9CisKKyAgICB3aGlsZSAocENybEN0eCA9IENlcnRFbnVtQ1JMc0luU3RvcmUoaFN0b3JlLCBwQ3JsQ3R4KSkgeworICAgICAgICBjcmwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyKilwQ3JsQ3R4LT5wYkNybEVuY29kZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBDcmxDdHgtPmNiQ3JsRW5jb2RlZCk7CisgICAgICAgIGlmICghY3JsKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChlbmMgPSBjZXJ0RW5jb2RpbmdUeXBlKHBDcmxDdHgtPmR3Q2VydEVuY29kaW5nVHlwZSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKHR1cCA9IFB5VHVwbGVfTmV3KDIpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh0dXAsIDAsIGNybCk7CisgICAgICAgIGNybCA9IE5VTEw7CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0odHVwLCAxLCBlbmMpOworICAgICAgICBlbmMgPSBOVUxMOworCisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHJlc3VsdCwgdHVwKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBQeV9DTEVBUih0dXApOworICAgIH0KKyAgICBpZiAocENybEN0eCkgeworICAgICAgICAvKiBsb29wIGVuZGVkIHdpdGggYW4gZXJyb3IsIG5lZWQgdG8gY2xlYW4gdXAgY29udGV4dCBtYW51YWxseSAqLworICAgICAgICBDZXJ0RnJlZUNSTENvbnRleHQocENybEN0eCk7CisgICAgfQorCisgICAgLyogSW4gZXJyb3IgY2FzZXMgY2VydCwgZW5jIGFuZCB0dXAgbWF5IG5vdCBiZSBOVUxMICovCisgICAgUHlfWERFQ1JFRihjcmwpOworICAgIFB5X1hERUNSRUYoZW5jKTsKKyAgICBQeV9YREVDUkVGKHR1cCk7CisKKyAgICBpZiAoIUNlcnRDbG9zZVN0b3JlKGhTdG9yZSwgMCkpIHsKKyAgICAgICAgLyogVGhpcyBlcnJvciBjYXNlIG1pZ2h0IHNoYWRvdyBhbm90aGVyIGV4Y2VwdGlvbi4qLworICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tV2luZG93c0VycihHZXRMYXN0RXJyb3IoKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCiAvKiBMaXN0IG9mIGZ1bmN0aW9ucyBleHBvcnRlZCBieSB0aGlzIG1vZHVsZS4gKi8KIApAQCAtMjYwNCwxMSArMzc1MywyNSBAQAogICAgICBQeVNTTF9SQU5EX2J5dGVzX2RvY30sCiAgICAgeyJSQU5EX3BzZXVkb19ieXRlcyIsICAgUHlTU0xfUkFORF9wc2V1ZG9fYnl0ZXMsIE1FVEhfVkFSQVJHUywKICAgICAgUHlTU0xfUkFORF9wc2V1ZG9fYnl0ZXNfZG9jfSwKKyNpZmRlZiBIQVZFX1JBTkRfRUdECiAgICAgeyJSQU5EX2VnZCIsICAgICAgICAgICAgUHlTU0xfUkFORF9lZ2QsIE1FVEhfVkFSQVJHUywKICAgICAgUHlTU0xfUkFORF9lZ2RfZG9jfSwKKyNlbmRpZgogICAgIHsiUkFORF9zdGF0dXMiLCAgICAgICAgIChQeUNGdW5jdGlvbilQeVNTTF9SQU5EX3N0YXR1cywgTUVUSF9OT0FSR1MsCiAgICAgIFB5U1NMX1JBTkRfc3RhdHVzX2RvY30sCiAjZW5kaWYKKyAgICB7ImdldF9kZWZhdWx0X3ZlcmlmeV9wYXRocyIsIChQeUNGdW5jdGlvbilQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHMsCisgICAgIE1FVEhfTk9BUkdTLCBQeVNTTF9nZXRfZGVmYXVsdF92ZXJpZnlfcGF0aHNfZG9jfSwKKyNpZmRlZiBfTVNDX1ZFUgorICAgIHsiZW51bV9jZXJ0aWZpY2F0ZXMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZW51bV9jZXJ0aWZpY2F0ZXMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIFB5U1NMX2VudW1fY2VydGlmaWNhdGVzX2RvY30sCisgICAgeyJlbnVtX2NybHMiLCAoUHlDRnVuY3Rpb24pUHlTU0xfZW51bV9jcmxzLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF9lbnVtX2NybHNfZG9jfSwKKyNlbmRpZgorICAgIHsidHh0Mm9iaiIsIChQeUNGdW5jdGlvbilQeVNTTF90eHQyb2JqLAorICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBQeVNTTF90eHQyb2JqX2RvY30sCisgICAgeyJuaWQyb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5U1NMX25pZDJvYmosCisgICAgIE1FVEhfVkFSQVJHUywgUHlTU0xfbmlkMm9ial9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAgLyogU2VudGluZWwgKi8KIH07CiAKQEAgLTI2NjksMTAgKzM4MzIsMTEgQEAKIAogICAgIGlmIChfc3NsX2xvY2tzID09IE5VTEwpIHsKICAgICAgICAgX3NzbF9sb2Nrc19jb3VudCA9IENSWVBUT19udW1fbG9ja3MoKTsKLSAgICAgICAgX3NzbF9sb2NrcyA9IChQeVRocmVhZF90eXBlX2xvY2sgKikKLSAgICAgICAgICAgIG1hbGxvYyhzaXplb2YoUHlUaHJlYWRfdHlwZV9sb2NrKSAqIF9zc2xfbG9ja3NfY291bnQpOwotICAgICAgICBpZiAoX3NzbF9sb2NrcyA9PSBOVUxMKQorICAgICAgICBfc3NsX2xvY2tzID0gUHlNZW1fTmV3KFB5VGhyZWFkX3R5cGVfbG9jaywgX3NzbF9sb2Nrc19jb3VudCk7CisgICAgICAgIGlmIChfc3NsX2xvY2tzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBtZW1zZXQoX3NzbF9sb2NrcywgMCwKICAgICAgICAgICAgICAgIHNpemVvZihQeVRocmVhZF90eXBlX2xvY2spICogX3NzbF9sb2Nrc19jb3VudCk7CiAgICAgICAgIGZvciAoaSA9IDA7ICBpIDwgX3NzbF9sb2Nrc19jb3VudDsgIGkrKykgewpAQCAtMjY4Miw3ICszODQ2LDcgQEAKICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyAgaiA8IGk7ICBqKyspIHsKICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKF9zc2xfbG9ja3Nbal0pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKF9zc2xfbG9ja3MpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUoX3NzbF9sb2Nrcyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI4MzYsMTggKzQwMDAsOTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfQ0VSVF9PUFRJT05BTCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNFUlRfUkVRVUlSRUQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9DRVJUX1JFUVVJUkVEKTsKKyAgICAvKiBDUkwgdmVyaWZpY2F0aW9uIGZvciB2ZXJpZmljYXRpb25fZmxhZ3MgKi8KKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX0RFRkFVTFQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfQ1JMX0NIRUNLX0xFQUYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlZFUklGWV9DUkxfQ0hFQ0tfQ0hBSU4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDS3xYNTA5X1ZfRkxBR19DUkxfQ0hFQ0tfQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVkVSSUZZX1g1MDlfU1RSSUNUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X1ZfRkxBR19YNTA5X1NUUklDVCk7CisjaWZkZWYgWDUwOV9WX0ZMQUdfVFJVU1RFRF9GSVJTVAorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJWRVJJRllfWDUwOV9UUlVTVEVEX0ZJUlNUIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBYNTA5X1ZfRkxBR19UUlVTVEVEX0ZJUlNUKTsKKyNlbmRpZgorCisgICAgLyogQWxlcnQgRGVzY3JpcHRpb25zIGZyb20gc3NsLmggKi8KKyAgICAvKiBub3RlIFJFU0VSVkVEIGNvbnN0YW50cyBubyBsb25nZXIgaW50ZW5kZWQgZm9yIHVzZSBoYXZlIGJlZW4gcmVtb3ZlZCAqLworICAgIC8qIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvdGxzLXBhcmFtZXRlcnMueG1sI3Rscy1wYXJhbWV0ZXJzLTYgKi8KKworI2RlZmluZSBBRERfQURfQ09OU1RBTlQocykgXAorICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBTEVSVF9ERVNDUklQVElPTl8iI3MsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfQURfIyNzKQorCisgICAgQUREX0FEX0NPTlNUQU5UKENMT1NFX05PVElGWSk7CisgICAgQUREX0FEX0NPTlNUQU5UKFVORVhQRUNURURfTUVTU0FHRSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEJBRF9SRUNPUkRfTUFDKTsKKyAgICBBRERfQURfQ09OU1RBTlQoUkVDT1JEX09WRVJGTE9XKTsKKyAgICBBRERfQURfQ09OU1RBTlQoREVDT01QUkVTU0lPTl9GQUlMVVJFKTsKKyAgICBBRERfQURfQ09OU1RBTlQoSEFORFNIQUtFX0ZBSUxVUkUpOworICAgIEFERF9BRF9DT05TVEFOVChCQURfQ0VSVElGSUNBVEUpOworICAgIEFERF9BRF9DT05TVEFOVChVTlNVUFBPUlRFRF9DRVJUSUZJQ0FURSk7CisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX1JFVk9LRUQpOworICAgIEFERF9BRF9DT05TVEFOVChDRVJUSUZJQ0FURV9FWFBJUkVEKTsKKyAgICBBRERfQURfQ09OU1RBTlQoQ0VSVElGSUNBVEVfVU5LTk9XTik7CisgICAgQUREX0FEX0NPTlNUQU5UKElMTEVHQUxfUEFSQU1FVEVSKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVU5LTk9XTl9DQSk7CisgICAgQUREX0FEX0NPTlNUQU5UKEFDQ0VTU19ERU5JRUQpOworICAgIEFERF9BRF9DT05TVEFOVChERUNPREVfRVJST1IpOworICAgIEFERF9BRF9DT05TVEFOVChERUNSWVBUX0VSUk9SKTsKKyAgICBBRERfQURfQ09OU1RBTlQoUFJPVE9DT0xfVkVSU0lPTik7CisgICAgQUREX0FEX0NPTlNUQU5UKElOU1VGRklDSUVOVF9TRUNVUklUWSk7CisgICAgQUREX0FEX0NPTlNUQU5UKElOVEVSTkFMX0VSUk9SKTsKKyAgICBBRERfQURfQ09OU1RBTlQoVVNFUl9DQU5DRUxMRUQpOworICAgIEFERF9BRF9DT05TVEFOVChOT19SRU5FR09USUFUSU9OKTsKKyAgICAvKiBOb3QgYWxsIGNvbnN0YW50cyBhcmUgaW4gb2xkIE9wZW5TU0wgdmVyc2lvbnMgKi8KKyNpZmRlZiBTU0xfQURfVU5TVVBQT1JURURfRVhURU5TSU9OCisgICAgQUREX0FEX0NPTlNUQU5UKFVOU1VQUE9SVEVEX0VYVEVOU0lPTik7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfQ0VSVElGSUNBVEVfVU5PQlRBSU5BQkxFCisgICAgQUREX0FEX0NPTlNUQU5UKENFUlRJRklDQVRFX1VOT0JUQUlOQUJMRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfVU5SRUNPR05JWkVEX05BTUUKKyAgICBBRERfQURfQ09OU1RBTlQoVU5SRUNPR05JWkVEX05BTUUpOworI2VuZGlmCisjaWZkZWYgU1NMX0FEX0JBRF9DRVJUSUZJQ0FURV9TVEFUVVNfUkVTUE9OU0UKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX0NFUlRJRklDQVRFX1NUQVRVU19SRVNQT05TRSk7CisjZW5kaWYKKyNpZmRlZiBTU0xfQURfQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUKKyAgICBBRERfQURfQ09OU1RBTlQoQkFEX0NFUlRJRklDQVRFX0hBU0hfVkFMVUUpOworI2VuZGlmCisjaWZkZWYgU1NMX0FEX1VOS05PV05fUFNLX0lERU5USVRZCisgICAgQUREX0FEX0NPTlNUQU5UKFVOS05PV05fUFNLX0lERU5USVRZKTsKKyNlbmRpZgorCisjdW5kZWYgQUREX0FEX0NPTlNUQU5UCiAKICAgICAvKiBwcm90b2NvbCB2ZXJzaW9ucyAqLwogI2lmbmRlZiBPUEVOU1NMX05PX1NTTDIKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfU1NMdjIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX1NTTF9WRVJTSU9OX1NTTDIpOwogI2VuZGlmCisjaWZuZGVmIE9QRU5TU0xfTk9fU1NMMwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQUk9UT0NPTF9TU0x2MyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fU1NMMyk7CisjZW5kaWYKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfU1NMdjIzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9TU0wyMyk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBST1RPQ09MX1RMU3YxIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQWV9TU0xfVkVSU0lPTl9UTFMxKTsKKyNpZiBIQVZFX1RMU3YxXzIKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfVExTdjFfMSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8xKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUFJPVE9DT0xfVExTdjFfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFlfU1NMX1ZFUlNJT05fVExTMV8yKTsKKyNlbmRpZgogCiAgICAgLyogcHJvdG9jb2wgb3B0aW9ucyAqLwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9BTEwiLApAQCAtMjg1NSw2ICs0MDkxLDEwIEBACiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1NTTHYyIiwgU1NMX09QX05PX1NTTHYyKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfTk9fU1NMdjMiLCBTU0xfT1BfTk9fU1NMdjMpOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPUF9OT19UTFN2MSIsIFNTTF9PUF9OT19UTFN2MSk7CisjaWYgSEFWRV9UTFN2MV8yCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1RMU3YxXzEiLCBTU0xfT1BfTk9fVExTdjFfMSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QX05PX1RMU3YxXzIiLCBTU0xfT1BfTk9fVExTdjFfMik7CisjZW5kaWYKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTU0xfT1BfQ0lQSEVSX1NFUlZFUl9QUkVGRVJFTkNFKTsKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiT1BfU0lOR0xFX0RIX1VTRSIsIFNTTF9PUF9TSU5HTEVfREhfVVNFKTsKQEAgLTI4NjYsNyArNDEwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX09QX05PX0NPTVBSRVNTSU9OKTsKICNlbmRpZgogCi0jaWZkZWYgU1NMX0NUUkxfU0VUX1RMU0VYVF9IT1NUTkFNRQorI2lmIEhBVkVfU05JCiAgICAgciA9IFB5X1RydWU7CiAjZWxzZQogICAgIHIgPSBQeV9GYWxzZTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3NzbF9kYXRhLmggYi9Nb2R1bGVzL19zc2xfZGF0YS5oCmluZGV4IDgxYThkN2IuLjg1MTY1YjkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3NzbF9kYXRhLmgKKysrIGIvTW9kdWxlcy9fc3NsX2RhdGEuaApAQCAtMSw1ICsxLDUgQEAKIC8qIEZpbGUgZ2VuZXJhdGVkIGJ5IFRvb2xzL3NzbC9tYWtlX3NzbF9kYXRhLnB5ICovCi0vKiBHZW5lcmF0ZWQgb24gMjAxMi0wNS0xNlQyMzo1Njo0MC45ODEzODIgKi8KKy8qIEdlbmVyYXRlZCBvbiAyMDE1LTAxLTE3VDIwOjMzOjQzLjM3NzQ1MyAqLwogCiBzdGF0aWMgc3RydWN0IHB5X3NzbF9saWJyYXJ5X2NvZGUgbGlicmFyeV9jb2Rlc1tdID0gewogICAgIHsiUEVNIiwgRVJSX0xJQl9QRU19LApAQCAtMTc5LDYgKzE3OSwxMSBAQAogICAjZWxzZQogICAgIHsiQkFEX0NIRUNLU1VNIiwgRVJSX0xJQl9TU0wsIDEwNH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfQkFEX0RBVEEKKyAgICB7IkJBRF9EQVRBIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9EQVRBfSwKKyAgI2Vsc2UKKyAgICB7IkJBRF9EQVRBIiwgRVJSX0xJQl9TU0wsIDM5MH0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfQkFEX0RBVEFfUkVUVVJORURfQllfQ0FMTEJBQ0sKICAgICB7IkJBRF9EQVRBX1JFVFVSTkVEX0JZX0NBTExCQUNLIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9EQVRBX1JFVFVSTkVEX0JZX0NBTExCQUNLfSwKICAgI2Vsc2UKQEAgLTMwOSw2ICszMTQsNDYgQEAKICAgI2Vsc2UKICAgICB7IkJBRF9TSUdOQVRVUkUiLCBFUlJfTElCX1NTTCwgMTIzfSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9CQURfU1JQX0FfTEVOR1RICisgICAgeyJCQURfU1JQX0FfTEVOR1RIIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9TUlBfQV9MRU5HVEh9LAorICAjZWxzZQorICAgIHsiQkFEX1NSUF9BX0xFTkdUSCIsIEVSUl9MSUJfU1NMLCAzNDd9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0JBRF9TUlBfQl9MRU5HVEgKKyAgICB7IkJBRF9TUlBfQl9MRU5HVEgiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1NSUF9CX0xFTkdUSH0sCisgICNlbHNlCisgICAgeyJCQURfU1JQX0JfTEVOR1RIIiwgRVJSX0xJQl9TU0wsIDM0OH0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfQkFEX1NSUF9HX0xFTkdUSAorICAgIHsiQkFEX1NSUF9HX0xFTkdUSCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9CQURfU1JQX0dfTEVOR1RIfSwKKyAgI2Vsc2UKKyAgICB7IkJBRF9TUlBfR19MRU5HVEgiLCBFUlJfTElCX1NTTCwgMzQ5fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9CQURfU1JQX05fTEVOR1RICisgICAgeyJCQURfU1JQX05fTEVOR1RIIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9TUlBfTl9MRU5HVEh9LAorICAjZWxzZQorICAgIHsiQkFEX1NSUF9OX0xFTkdUSCIsIEVSUl9MSUJfU1NMLCAzNTB9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0JBRF9TUlBfUEFSQU1FVEVSUworICAgIHsiQkFEX1NSUF9QQVJBTUVURVJTIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9TUlBfUEFSQU1FVEVSU30sCisgICNlbHNlCisgICAgeyJCQURfU1JQX1BBUkFNRVRFUlMiLCBFUlJfTElCX1NTTCwgMzcxfSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9CQURfU1JQX1NfTEVOR1RICisgICAgeyJCQURfU1JQX1NfTEVOR1RIIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9TUlBfU19MRU5HVEh9LAorICAjZWxzZQorICAgIHsiQkFEX1NSUF9TX0xFTkdUSCIsIEVSUl9MSUJfU1NMLCAzNTF9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0JBRF9TUlRQX01LSV9WQUxVRQorICAgIHsiQkFEX1NSVFBfTUtJX1ZBTFVFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9TUlRQX01LSV9WQUxVRX0sCisgICNlbHNlCisgICAgeyJCQURfU1JUUF9NS0lfVkFMVUUiLCBFUlJfTElCX1NTTCwgMzUyfSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9CQURfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVAorICAgIHsiQkFEX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1QiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1R9LAorICAjZWxzZQorICAgIHsiQkFEX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1QiLCBFUlJfTElCX1NTTCwgMzUzfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9CQURfU1NMX0ZJTEVUWVBFCiAgICAgeyJCQURfU1NMX0ZJTEVUWVBFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9TU0xfRklMRVRZUEV9LAogICAjZWxzZQpAQCAtMzI0LDYgKzM2OSwxMSBAQAogICAjZWxzZQogICAgIHsiQkFEX1NUQVRFIiwgRVJSX0xJQl9TU0wsIDEyNn0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfQkFEX1ZBTFVFCisgICAgeyJCQURfVkFMVUUiLCBFUlJfTElCX1NTTCwgU1NMX1JfQkFEX1ZBTFVFfSwKKyAgI2Vsc2UKKyAgICB7IkJBRF9WQUxVRSIsIEVSUl9MSUJfU1NMLCAzODR9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX0JBRF9XUklURV9SRVRSWQogICAgIHsiQkFEX1dSSVRFX1JFVFJZIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0JBRF9XUklURV9SRVRSWX0sCiAgICNlbHNlCkBAIC0zNTQsNiArNDA0LDE2IEBACiAgICNlbHNlCiAgICAgeyJDQV9ETl9UT09fTE9ORyIsIEVSUl9MSUJfU1NMLCAxMzJ9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0NBX0tFWV9UT09fU01BTEwKKyAgICB7IkNBX0tFWV9UT09fU01BTEwiLCBFUlJfTElCX1NTTCwgU1NMX1JfQ0FfS0VZX1RPT19TTUFMTH0sCisgICNlbHNlCisgICAgeyJDQV9LRVlfVE9PX1NNQUxMIiwgRVJSX0xJQl9TU0wsIDM5N30sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfQ0FfTURfVE9PX1dFQUsKKyAgICB7IkNBX01EX1RPT19XRUFLIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0NBX01EX1RPT19XRUFLfSwKKyAgI2Vsc2UKKyAgICB7IkNBX01EX1RPT19XRUFLIiwgRVJSX0xJQl9TU0wsIDM5OH0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfQ0NTX1JFQ0VJVkVEX0VBUkxZCiAgICAgeyJDQ1NfUkVDRUlWRURfRUFSTFkiLCBFUlJfTElCX1NTTCwgU1NMX1JfQ0NTX1JFQ0VJVkVEX0VBUkxZfSwKICAgI2Vsc2UKQEAgLTM2NCw2ICs0MjQsMTEgQEAKICAgI2Vsc2UKICAgICB7IkNFUlRJRklDQVRFX1ZFUklGWV9GQUlMRUQiLCBFUlJfTElCX1NTTCwgMTM0fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9DRVJUX0NCX0VSUk9SCisgICAgeyJDRVJUX0NCX0VSUk9SIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0NFUlRfQ0JfRVJST1J9LAorICAjZWxzZQorICAgIHsiQ0VSVF9DQl9FUlJPUiIsIEVSUl9MSUJfU1NMLCAzNzd9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX0NFUlRfTEVOR1RIX01JU01BVENICiAgICAgeyJDRVJUX0xFTkdUSF9NSVNNQVRDSCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9DRVJUX0xFTkdUSF9NSVNNQVRDSH0sCiAgICNlbHNlCkBAIC00NTQsNiArNTE5LDExIEBACiAgICNlbHNlCiAgICAgeyJERUNSWVBUSU9OX0ZBSUxFRF9PUl9CQURfUkVDT1JEX01BQyIsIEVSUl9MSUJfU1NMLCAyODF9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0RIX0tFWV9UT09fU01BTEwKKyAgICB7IkRIX0tFWV9UT09fU01BTEwiLCBFUlJfTElCX1NTTCwgU1NMX1JfREhfS0VZX1RPT19TTUFMTH0sCisgICNlbHNlCisgICAgeyJESF9LRVlfVE9PX1NNQUxMIiwgRVJSX0xJQl9TU0wsIDM5NH0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfREhfUFVCTElDX1ZBTFVFX0xFTkdUSF9JU19XUk9ORwogICAgIHsiREhfUFVCTElDX1ZBTFVFX0xFTkdUSF9JU19XUk9ORyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9ESF9QVUJMSUNfVkFMVUVfTEVOR1RIX0lTX1dST05HfSwKICAgI2Vsc2UKQEAgLTQ5NCwxMSArNTY0LDI2IEBACiAgICNlbHNlCiAgICAgeyJFQ0NfQ0VSVF9TSE9VTERfSEFWRV9TSEExX1NJR05BVFVSRSIsIEVSUl9MSUJfU1NMLCAzMjN9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0VDREhfUkVRVUlSRURfRk9SX1NVSVRFQl9NT0RFCisgICAgeyJFQ0RIX1JFUVVJUkVEX0ZPUl9TVUlURUJfTU9ERSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9FQ0RIX1JFUVVJUkVEX0ZPUl9TVUlURUJfTU9ERX0sCisgICNlbHNlCisgICAgeyJFQ0RIX1JFUVVJUkVEX0ZPUl9TVUlURUJfTU9ERSIsIEVSUl9MSUJfU1NMLCAzNzR9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX0VDR1JPVVBfVE9PX0xBUkdFX0ZPUl9DSVBIRVIKICAgICB7IkVDR1JPVVBfVE9PX0xBUkdFX0ZPUl9DSVBIRVIiLCBFUlJfTElCX1NTTCwgU1NMX1JfRUNHUk9VUF9UT09fTEFSR0VfRk9SX0NJUEhFUn0sCiAgICNlbHNlCiAgICAgeyJFQ0dST1VQX1RPT19MQVJHRV9GT1JfQ0lQSEVSIiwgRVJSX0xJQl9TU0wsIDMxMH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfRUVfS0VZX1RPT19TTUFMTAorICAgIHsiRUVfS0VZX1RPT19TTUFMTCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9FRV9LRVlfVE9PX1NNQUxMfSwKKyAgI2Vsc2UKKyAgICB7IkVFX0tFWV9UT09fU01BTEwiLCBFUlJfTElCX1NTTCwgMzk5fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9FTVBUWV9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUCisgICAgeyJFTVBUWV9TUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0VNUFRZX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1R9LAorICAjZWxzZQorICAgIHsiRU1QVFlfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVCIsIEVSUl9MSUJfU1NMLCAzNTR9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX0VOQ1JZUFRFRF9MRU5HVEhfVE9PX0xPTkcKICAgICB7IkVOQ1JZUFRFRF9MRU5HVEhfVE9PX0xPTkciLCBFUlJfTElCX1NTTCwgU1NMX1JfRU5DUllQVEVEX0xFTkdUSF9UT09fTE9OR30sCiAgICNlbHNlCkBAIC01MjksNiArNjE0LDE2IEBACiAgICNlbHNlCiAgICAgeyJHT1RfQV9GSU5fQkVGT1JFX0FfQ0NTIiwgRVJSX0xJQl9TU0wsIDE1NH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfR09UX05FWFRfUFJPVE9fQkVGT1JFX0FfQ0NTCisgICAgeyJHT1RfTkVYVF9QUk9UT19CRUZPUkVfQV9DQ1MiLCBFUlJfTElCX1NTTCwgU1NMX1JfR09UX05FWFRfUFJPVE9fQkVGT1JFX0FfQ0NTfSwKKyAgI2Vsc2UKKyAgICB7IkdPVF9ORVhUX1BST1RPX0JFRk9SRV9BX0NDUyIsIEVSUl9MSUJfU1NMLCAzNTV9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX0dPVF9ORVhUX1BST1RPX1dJVEhPVVRfRVhURU5TSU9OCisgICAgeyJHT1RfTkVYVF9QUk9UT19XSVRIT1VUX0VYVEVOU0lPTiIsIEVSUl9MSUJfU1NMLCBTU0xfUl9HT1RfTkVYVF9QUk9UT19XSVRIT1VUX0VYVEVOU0lPTn0sCisgICNlbHNlCisgICAgeyJHT1RfTkVYVF9QUk9UT19XSVRIT1VUX0VYVEVOU0lPTiIsIEVSUl9MSUJfU1NMLCAzNTZ9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX0hUVFBTX1BST1hZX1JFUVVFU1QKICAgICB7IkhUVFBTX1BST1hZX1JFUVVFU1QiLCBFUlJfTElCX1NTTCwgU1NMX1JfSFRUUFNfUFJPWFlfUkVRVUVTVH0sCiAgICNlbHNlCkBAIC01NDQsNiArNjM5LDE2IEBACiAgICNlbHNlCiAgICAgeyJJTExFR0FMX1BBRERJTkciLCBFUlJfTElCX1NTTCwgMjgzfSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9JTExFR0FMX1NVSVRFQl9ESUdFU1QKKyAgICB7IklMTEVHQUxfU1VJVEVCX0RJR0VTVCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9JTExFR0FMX1NVSVRFQl9ESUdFU1R9LAorICAjZWxzZQorICAgIHsiSUxMRUdBTF9TVUlURUJfRElHRVNUIiwgRVJSX0xJQl9TU0wsIDM4MH0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfSU5BUFBST1BSSUFURV9GQUxMQkFDSworICAgIHsiSU5BUFBST1BSSUFURV9GQUxMQkFDSyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9JTkFQUFJPUFJJQVRFX0ZBTExCQUNLfSwKKyAgI2Vsc2UKKyAgICB7IklOQVBQUk9QUklBVEVfRkFMTEJBQ0siLCBFUlJfTElCX1NTTCwgMzczfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9JTkNPTlNJU1RFTlRfQ09NUFJFU1NJT04KICAgICB7IklOQ09OU0lTVEVOVF9DT01QUkVTU0lPTiIsIEVSUl9MSUJfU1NMLCBTU0xfUl9JTkNPTlNJU1RFTlRfQ09NUFJFU1NJT059LAogICAjZWxzZQpAQCAtNTY0LDExICs2NjksMjYgQEAKICAgI2Vsc2UKICAgICB7IklOVkFMSURfQ09NUFJFU1NJT05fQUxHT1JJVEhNIiwgRVJSX0xJQl9TU0wsIDM0MX0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfSU5WQUxJRF9OVUxMX0NNRF9OQU1FCisgICAgeyJJTlZBTElEX05VTExfQ01EX05BTUUiLCBFUlJfTElCX1NTTCwgU1NMX1JfSU5WQUxJRF9OVUxMX0NNRF9OQU1FfSwKKyAgI2Vsc2UKKyAgICB7IklOVkFMSURfTlVMTF9DTURfTkFNRSIsIEVSUl9MSUJfU1NMLCAzODV9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX0lOVkFMSURfUFVSUE9TRQogICAgIHsiSU5WQUxJRF9QVVJQT1NFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX0lOVkFMSURfUFVSUE9TRX0sCiAgICNlbHNlCiAgICAgeyJJTlZBTElEX1BVUlBPU0UiLCBFUlJfTElCX1NTTCwgMjc4fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9JTlZBTElEX1NFUlZFUklORk9fREFUQQorICAgIHsiSU5WQUxJRF9TRVJWRVJJTkZPX0RBVEEiLCBFUlJfTElCX1NTTCwgU1NMX1JfSU5WQUxJRF9TRVJWRVJJTkZPX0RBVEF9LAorICAjZWxzZQorICAgIHsiSU5WQUxJRF9TRVJWRVJJTkZPX0RBVEEiLCBFUlJfTElCX1NTTCwgMzg4fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9JTlZBTElEX1NSUF9VU0VSTkFNRQorICAgIHsiSU5WQUxJRF9TUlBfVVNFUk5BTUUiLCBFUlJfTElCX1NTTCwgU1NMX1JfSU5WQUxJRF9TUlBfVVNFUk5BTUV9LAorICAjZWxzZQorICAgIHsiSU5WQUxJRF9TUlBfVVNFUk5BTUUiLCBFUlJfTElCX1NTTCwgMzU3fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9JTlZBTElEX1NUQVRVU19SRVNQT05TRQogICAgIHsiSU5WQUxJRF9TVEFUVVNfUkVTUE9OU0UiLCBFUlJfTElCX1NTTCwgU1NMX1JfSU5WQUxJRF9TVEFUVVNfUkVTUE9OU0V9LAogICAjZWxzZQpAQCAtNjg5LDYgKzgwOSwxNiBAQAogICAjZWxzZQogICAgIHsiTUlTU0lOR19EU0FfU0lHTklOR19DRVJUIiwgRVJSX0xJQl9TU0wsIDE2NX0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfTUlTU0lOR19FQ0RIX0NFUlQKKyAgICB7Ik1JU1NJTkdfRUNESF9DRVJUIiwgRVJSX0xJQl9TU0wsIFNTTF9SX01JU1NJTkdfRUNESF9DRVJUfSwKKyAgI2Vsc2UKKyAgICB7Ik1JU1NJTkdfRUNESF9DRVJUIiwgRVJSX0xJQl9TU0wsIDM4Mn0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfTUlTU0lOR19FQ0RTQV9TSUdOSU5HX0NFUlQKKyAgICB7Ik1JU1NJTkdfRUNEU0FfU0lHTklOR19DRVJUIiwgRVJSX0xJQl9TU0wsIFNTTF9SX01JU1NJTkdfRUNEU0FfU0lHTklOR19DRVJUfSwKKyAgI2Vsc2UKKyAgICB7Ik1JU1NJTkdfRUNEU0FfU0lHTklOR19DRVJUIiwgRVJSX0xJQl9TU0wsIDM4MX0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfTUlTU0lOR19FWFBPUlRfVE1QX0RIX0tFWQogICAgIHsiTUlTU0lOR19FWFBPUlRfVE1QX0RIX0tFWSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9NSVNTSU5HX0VYUE9SVF9UTVBfREhfS0VZfSwKICAgI2Vsc2UKQEAgLTcxNCw2ICs4NDQsMTEgQEAKICAgI2Vsc2UKICAgICB7Ik1JU1NJTkdfUlNBX1NJR05JTkdfQ0VSVCIsIEVSUl9MSUJfU1NMLCAxNzB9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX01JU1NJTkdfU1JQX1BBUkFNCisgICAgeyJNSVNTSU5HX1NSUF9QQVJBTSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9NSVNTSU5HX1NSUF9QQVJBTX0sCisgICNlbHNlCisgICAgeyJNSVNTSU5HX1NSUF9QQVJBTSIsIEVSUl9MSUJfU1NMLCAzNTh9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX01JU1NJTkdfVE1QX0RIX0tFWQogICAgIHsiTUlTU0lOR19UTVBfREhfS0VZIiwgRVJSX0xJQl9TU0wsIFNTTF9SX01JU1NJTkdfVE1QX0RIX0tFWX0sCiAgICNlbHNlCkBAIC03MzksNiArODc0LDExIEBACiAgICNlbHNlCiAgICAgeyJNSVNTSU5HX1ZFUklGWV9NRVNTQUdFIiwgRVJSX0xJQl9TU0wsIDE3NH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfTVVMVElQTEVfU0dDX1JFU1RBUlRTCisgICAgeyJNVUxUSVBMRV9TR0NfUkVTVEFSVFMiLCBFUlJfTElCX1NTTCwgU1NMX1JfTVVMVElQTEVfU0dDX1JFU1RBUlRTfSwKKyAgI2Vsc2UKKyAgICB7Ik1VTFRJUExFX1NHQ19SRVNUQVJUUyIsIEVSUl9MSUJfU1NMLCAzNDZ9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX05PTl9TU0xWMl9JTklUSUFMX1BBQ0tFVAogICAgIHsiTk9OX1NTTFYyX0lOSVRJQUxfUEFDS0VUIiwgRVJSX0xJQl9TU0wsIFNTTF9SX05PTl9TU0xWMl9JTklUSUFMX1BBQ0tFVH0sCiAgICNlbHNlCkBAIC04MTksNiArOTU5LDExIEBACiAgICNlbHNlCiAgICAgeyJOT19NRVRIT0RfU1BFQ0lGSUVEIiwgRVJSX0xJQl9TU0wsIDE4OH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfTk9fUEVNX0VYVEVOU0lPTlMKKyAgICB7Ik5PX1BFTV9FWFRFTlNJT05TIiwgRVJSX0xJQl9TU0wsIFNTTF9SX05PX1BFTV9FWFRFTlNJT05TfSwKKyAgI2Vsc2UKKyAgICB7Ik5PX1BFTV9FWFRFTlNJT05TIiwgRVJSX0xJQl9TU0wsIDM4OX0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfTk9fUFJJVkFURUtFWQogICAgIHsiTk9fUFJJVkFURUtFWSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9OT19QUklWQVRFS0VZfSwKICAgI2Vsc2UKQEAgLTg1NCw2ICs5OTksMTYgQEAKICAgI2Vsc2UKICAgICB7Ik5PX1NIQVJFRF9DSVBIRVIiLCBFUlJfTElCX1NTTCwgMTkzfSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9OT19TSEFSRURfU0lHQVRVUkVfQUxHT1JJVEhNUworICAgIHsiTk9fU0hBUkVEX1NJR0FUVVJFX0FMR09SSVRITVMiLCBFUlJfTElCX1NTTCwgU1NMX1JfTk9fU0hBUkVEX1NJR0FUVVJFX0FMR09SSVRITVN9LAorICAjZWxzZQorICAgIHsiTk9fU0hBUkVEX1NJR0FUVVJFX0FMR09SSVRITVMiLCBFUlJfTElCX1NTTCwgMzc2fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9OT19TUlRQX1BST0ZJTEVTCisgICAgeyJOT19TUlRQX1BST0ZJTEVTIiwgRVJSX0xJQl9TU0wsIFNTTF9SX05PX1NSVFBfUFJPRklMRVN9LAorICAjZWxzZQorICAgIHsiTk9fU1JUUF9QUk9GSUxFUyIsIEVSUl9MSUJfU1NMLCAzNTl9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX05PX1ZFUklGWV9DQUxMQkFDSwogICAgIHsiTk9fVkVSSUZZX0NBTExCQUNLIiwgRVJSX0xJQl9TU0wsIFNTTF9SX05PX1ZFUklGWV9DQUxMQkFDS30sCiAgICNlbHNlCkBAIC04NzksNiArMTAzNCwxNiBAQAogICAjZWxzZQogICAgIHsiT0xEX1NFU1NJT05fQ09NUFJFU1NJT05fQUxHT1JJVEhNX05PVF9SRVRVUk5FRCIsIEVSUl9MSUJfU1NMLCAzNDR9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX09OTFlfRFRMU18xXzJfQUxMT1dFRF9JTl9TVUlURUJfTU9ERQorICAgIHsiT05MWV9EVExTXzFfMl9BTExPV0VEX0lOX1NVSVRFQl9NT0RFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX09OTFlfRFRMU18xXzJfQUxMT1dFRF9JTl9TVUlURUJfTU9ERX0sCisgICNlbHNlCisgICAgeyJPTkxZX0RUTFNfMV8yX0FMTE9XRURfSU5fU1VJVEVCX01PREUiLCBFUlJfTElCX1NTTCwgMzg3fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9PTkxZX1RMU18xXzJfQUxMT1dFRF9JTl9TVUlURUJfTU9ERQorICAgIHsiT05MWV9UTFNfMV8yX0FMTE9XRURfSU5fU1VJVEVCX01PREUiLCBFUlJfTElCX1NTTCwgU1NMX1JfT05MWV9UTFNfMV8yX0FMTE9XRURfSU5fU1VJVEVCX01PREV9LAorICAjZWxzZQorICAgIHsiT05MWV9UTFNfMV8yX0FMTE9XRURfSU5fU1VJVEVCX01PREUiLCBFUlJfTElCX1NTTCwgMzc5fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9PTkxZX1RMU19BTExPV0VEX0lOX0ZJUFNfTU9ERQogICAgIHsiT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREUiLCBFUlJfTElCX1NTTCwgU1NMX1JfT05MWV9UTFNfQUxMT1dFRF9JTl9GSVBTX01PREV9LAogICAjZWxzZQpAQCAtOTM0LDYgKzEwOTksMTYgQEAKICAgI2Vsc2UKICAgICB7IlBFRVJfRVJST1JfVU5TVVBQT1JURURfQ0VSVElGSUNBVEVfVFlQRSIsIEVSUl9MSUJfU1NMLCAyMDR9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1BFTV9OQU1FX0JBRF9QUkVGSVgKKyAgICB7IlBFTV9OQU1FX0JBRF9QUkVGSVgiLCBFUlJfTElCX1NTTCwgU1NMX1JfUEVNX05BTUVfQkFEX1BSRUZJWH0sCisgICNlbHNlCisgICAgeyJQRU1fTkFNRV9CQURfUFJFRklYIiwgRVJSX0xJQl9TU0wsIDM5MX0sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfUEVNX05BTUVfVE9PX1NIT1JUCisgICAgeyJQRU1fTkFNRV9UT09fU0hPUlQiLCBFUlJfTElCX1NTTCwgU1NMX1JfUEVNX05BTUVfVE9PX1NIT1JUfSwKKyAgI2Vsc2UKKyAgICB7IlBFTV9OQU1FX1RPT19TSE9SVCIsIEVSUl9MSUJfU1NMLCAzOTJ9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX1BSRV9NQUNfTEVOR1RIX1RPT19MT05HCiAgICAgeyJQUkVfTUFDX0xFTkdUSF9UT09fTE9ORyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9QUkVfTUFDX0xFTkdUSF9UT09fTE9OR30sCiAgICNlbHNlCkBAIC0xMDY5LDExICsxMjQ0LDM2IEBACiAgICNlbHNlCiAgICAgeyJTSE9SVF9SRUFEIiwgRVJSX0xJQl9TU0wsIDIxOX0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfU0lHTkFUVVJFX0FMR09SSVRITVNfRVJST1IKKyAgICB7IlNJR05BVFVSRV9BTEdPUklUSE1TX0VSUk9SIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1NJR05BVFVSRV9BTEdPUklUSE1TX0VSUk9SfSwKKyAgI2Vsc2UKKyAgICB7IlNJR05BVFVSRV9BTEdPUklUSE1TX0VSUk9SIiwgRVJSX0xJQl9TU0wsIDM2MH0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfU0lHTkFUVVJFX0ZPUl9OT05fU0lHTklOR19DRVJUSUZJQ0FURQogICAgIHsiU0lHTkFUVVJFX0ZPUl9OT05fU0lHTklOR19DRVJUSUZJQ0FURSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9TSUdOQVRVUkVfRk9SX05PTl9TSUdOSU5HX0NFUlRJRklDQVRFfSwKICAgI2Vsc2UKICAgICB7IlNJR05BVFVSRV9GT1JfTk9OX1NJR05JTkdfQ0VSVElGSUNBVEUiLCBFUlJfTElCX1NTTCwgMjIwfSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9TUlBfQV9DQUxDCisgICAgeyJTUlBfQV9DQUxDIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1NSUF9BX0NBTEN9LAorICAjZWxzZQorICAgIHsiU1JQX0FfQ0FMQyIsIEVSUl9MSUJfU1NMLCAzNjF9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1NSVFBfQ09VTERfTk9UX0FMTE9DQVRFX1BST0ZJTEVTCisgICAgeyJTUlRQX0NPVUxEX05PVF9BTExPQ0FURV9QUk9GSUxFUyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9TUlRQX0NPVUxEX05PVF9BTExPQ0FURV9QUk9GSUxFU30sCisgICNlbHNlCisgICAgeyJTUlRQX0NPVUxEX05PVF9BTExPQ0FURV9QUk9GSUxFUyIsIEVSUl9MSUJfU1NMLCAzNjJ9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1NSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1RfVE9PX0xPTkcKKyAgICB7IlNSVFBfUFJPVEVDVElPTl9QUk9GSUxFX0xJU1RfVE9PX0xPTkciLCBFUlJfTElCX1NTTCwgU1NMX1JfU1JUUF9QUk9URUNUSU9OX1BST0ZJTEVfTElTVF9UT09fTE9OR30sCisgICNlbHNlCisgICAgeyJTUlRQX1BST1RFQ1RJT05fUFJPRklMRV9MSVNUX1RPT19MT05HIiwgRVJSX0xJQl9TU0wsIDM2M30sCisgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfU1JUUF9VTktOT1dOX1BST1RFQ1RJT05fUFJPRklMRQorICAgIHsiU1JUUF9VTktOT1dOX1BST1RFQ1RJT05fUFJPRklMRSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9TUlRQX1VOS05PV05fUFJPVEVDVElPTl9QUk9GSUxFfSwKKyAgI2Vsc2UKKyAgICB7IlNSVFBfVU5LTk9XTl9QUk9URUNUSU9OX1BST0ZJTEUiLCBFUlJfTElCX1NTTCwgMzY0fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9TU0wyM19ET0lOR19TRVNTSU9OX0lEX1JFVVNFCiAgICAgeyJTU0wyM19ET0lOR19TRVNTSU9OX0lEX1JFVVNFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1NTTDIzX0RPSU5HX1NFU1NJT05fSURfUkVVU0V9LAogICAjZWxzZQpAQCAtMTE3OSw2ICsxMzc5LDExIEBACiAgICNlbHNlCiAgICAgeyJTU0xfTElCUkFSWV9IQVNfTk9fQ0lQSEVSUyIsIEVSUl9MSUJfU1NMLCAyMzB9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1NTTF9ORUdBVElWRV9MRU5HVEgKKyAgICB7IlNTTF9ORUdBVElWRV9MRU5HVEgiLCBFUlJfTElCX1NTTCwgU1NMX1JfU1NMX05FR0FUSVZFX0xFTkdUSH0sCisgICNlbHNlCisgICAgeyJTU0xfTkVHQVRJVkVfTEVOR1RIIiwgRVJSX0xJQl9TU0wsIDM3Mn0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfU1NMX1NFU1NJT05fSURfQ0FMTEJBQ0tfRkFJTEVECiAgICAgeyJTU0xfU0VTU0lPTl9JRF9DQUxMQkFDS19GQUlMRUQiLCBFUlJfTElCX1NTTCwgU1NMX1JfU1NMX1NFU1NJT05fSURfQ0FMTEJBQ0tfRkFJTEVEfSwKICAgI2Vsc2UKQEAgLTEyMjksNiArMTQzNCwxMSBAQAogICAjZWxzZQogICAgIHsiVExTVjFfQUxFUlRfRVhQT1JUX1JFU1RSSUNUSU9OIiwgRVJSX0xJQl9TU0wsIDEwNjB9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1RMU1YxX0FMRVJUX0lOQVBQUk9QUklBVEVfRkFMTEJBQ0sKKyAgICB7IlRMU1YxX0FMRVJUX0lOQVBQUk9QUklBVEVfRkFMTEJBQ0siLCBFUlJfTElCX1NTTCwgU1NMX1JfVExTVjFfQUxFUlRfSU5BUFBST1BSSUFURV9GQUxMQkFDS30sCisgICNlbHNlCisgICAgeyJUTFNWMV9BTEVSVF9JTkFQUFJPUFJJQVRFX0ZBTExCQUNLIiwgRVJSX0xJQl9TU0wsIDEwODZ9LAorICAjZW5kaWYKICAgI2lmZGVmIFNTTF9SX1RMU1YxX0FMRVJUX0lOU1VGRklDSUVOVF9TRUNVUklUWQogICAgIHsiVExTVjFfQUxFUlRfSU5TVUZGSUNJRU5UX1NFQ1VSSVRZIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1RMU1YxX0FMRVJUX0lOU1VGRklDSUVOVF9TRUNVUklUWX0sCiAgICNlbHNlCkBAIC0xMjk0LDYgKzE1MDQsMjEgQEAKICAgI2Vsc2UKICAgICB7IlRMU19DTElFTlRfQ0VSVF9SRVFfV0lUSF9BTk9OX0NJUEhFUiIsIEVSUl9MSUJfU1NMLCAyMzJ9LAogICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1RMU19IRUFSVEJFQVRfUEVFUl9ET0VTTlRfQUNDRVBUCisgICAgeyJUTFNfSEVBUlRCRUFUX1BFRVJfRE9FU05UX0FDQ0VQVCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9UTFNfSEVBUlRCRUFUX1BFRVJfRE9FU05UX0FDQ0VQVH0sCisgICNlbHNlCisgICAgeyJUTFNfSEVBUlRCRUFUX1BFRVJfRE9FU05UX0FDQ0VQVCIsIEVSUl9MSUJfU1NMLCAzNjV9LAorICAjZW5kaWYKKyAgI2lmZGVmIFNTTF9SX1RMU19IRUFSVEJFQVRfUEVORElORworICAgIHsiVExTX0hFQVJUQkVBVF9QRU5ESU5HIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1RMU19IRUFSVEJFQVRfUEVORElOR30sCisgICNlbHNlCisgICAgeyJUTFNfSEVBUlRCRUFUX1BFTkRJTkciLCBFUlJfTElCX1NTTCwgMzY2fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9UTFNfSUxMRUdBTF9FWFBPUlRFUl9MQUJFTAorICAgIHsiVExTX0lMTEVHQUxfRVhQT1JURVJfTEFCRUwiLCBFUlJfTElCX1NTTCwgU1NMX1JfVExTX0lMTEVHQUxfRVhQT1JURVJfTEFCRUx9LAorICAjZWxzZQorICAgIHsiVExTX0lMTEVHQUxfRVhQT1JURVJfTEFCRUwiLCBFUlJfTElCX1NTTCwgMzY3fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9UTFNfSU5WQUxJRF9FQ1BPSU5URk9STUFUX0xJU1QKICAgICB7IlRMU19JTlZBTElEX0VDUE9JTlRGT1JNQVRfTElTVCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9UTFNfSU5WQUxJRF9FQ1BPSU5URk9STUFUX0xJU1R9LAogICAjZWxzZQpAQCAtMTM5OSw2ICsxNjI0LDE2IEBACiAgICNlbHNlCiAgICAgeyJVTktOT1dOX0NJUEhFUl9UWVBFIiwgRVJSX0xJQl9TU0wsIDI0OX0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfVU5LTk9XTl9DTURfTkFNRQorICAgIHsiVU5LTk9XTl9DTURfTkFNRSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9VTktOT1dOX0NNRF9OQU1FfSwKKyAgI2Vsc2UKKyAgICB7IlVOS05PV05fQ01EX05BTUUiLCBFUlJfTElCX1NTTCwgMzg2fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9VTktOT1dOX0RJR0VTVAorICAgIHsiVU5LTk9XTl9ESUdFU1QiLCBFUlJfTElCX1NTTCwgU1NMX1JfVU5LTk9XTl9ESUdFU1R9LAorICAjZWxzZQorICAgIHsiVU5LTk9XTl9ESUdFU1QiLCBFUlJfTElCX1NTTCwgMzY4fSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9VTktOT1dOX0tFWV9FWENIQU5HRV9UWVBFCiAgICAgeyJVTktOT1dOX0tFWV9FWENIQU5HRV9UWVBFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1VOS05PV05fS0VZX0VYQ0hBTkdFX1RZUEV9LAogICAjZWxzZQpAQCAtMTQ2OSwxNiArMTcwNCwzNiBAQAogICAjZWxzZQogICAgIHsiVU5TVVBQT1JURURfU1RBVFVTX1RZUEUiLCBFUlJfTElCX1NTTCwgMzI5fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9VU0VfU1JUUF9OT1RfTkVHT1RJQVRFRAorICAgIHsiVVNFX1NSVFBfTk9UX05FR09USUFURUQiLCBFUlJfTElCX1NTTCwgU1NMX1JfVVNFX1NSVFBfTk9UX05FR09USUFURUR9LAorICAjZWxzZQorICAgIHsiVVNFX1NSVFBfTk9UX05FR09USUFURUQiLCBFUlJfTElCX1NTTCwgMzY5fSwKKyAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9WRVJTSU9OX1RPT19MT1cKKyAgICB7IlZFUlNJT05fVE9PX0xPVyIsIEVSUl9MSUJfU1NMLCBTU0xfUl9WRVJTSU9OX1RPT19MT1d9LAorICAjZWxzZQorICAgIHsiVkVSU0lPTl9UT09fTE9XIiwgRVJSX0xJQl9TU0wsIDM5Nn0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfV1JJVEVfQklPX05PVF9TRVQKICAgICB7IldSSVRFX0JJT19OT1RfU0VUIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1dSSVRFX0JJT19OT1RfU0VUfSwKICAgI2Vsc2UKICAgICB7IldSSVRFX0JJT19OT1RfU0VUIiwgRVJSX0xJQl9TU0wsIDI2MH0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfV1JPTkdfQ0VSVElGSUNBVEVfVFlQRQorICAgIHsiV1JPTkdfQ0VSVElGSUNBVEVfVFlQRSIsIEVSUl9MSUJfU1NMLCBTU0xfUl9XUk9OR19DRVJUSUZJQ0FURV9UWVBFfSwKKyAgI2Vsc2UKKyAgICB7IldST05HX0NFUlRJRklDQVRFX1RZUEUiLCBFUlJfTElCX1NTTCwgMzgzfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9XUk9OR19DSVBIRVJfUkVUVVJORUQKICAgICB7IldST05HX0NJUEhFUl9SRVRVUk5FRCIsIEVSUl9MSUJfU1NMLCBTU0xfUl9XUk9OR19DSVBIRVJfUkVUVVJORUR9LAogICAjZWxzZQogICAgIHsiV1JPTkdfQ0lQSEVSX1JFVFVSTkVEIiwgRVJSX0xJQl9TU0wsIDI2MX0sCiAgICNlbmRpZgorICAjaWZkZWYgU1NMX1JfV1JPTkdfQ1VSVkUKKyAgICB7IldST05HX0NVUlZFIiwgRVJSX0xJQl9TU0wsIFNTTF9SX1dST05HX0NVUlZFfSwKKyAgI2Vsc2UKKyAgICB7IldST05HX0NVUlZFIiwgRVJSX0xJQl9TU0wsIDM3OH0sCisgICNlbmRpZgogICAjaWZkZWYgU1NMX1JfV1JPTkdfTUVTU0FHRV9UWVBFCiAgICAgeyJXUk9OR19NRVNTQUdFX1RZUEUiLCBFUlJfTElCX1NTTCwgU1NMX1JfV1JPTkdfTUVTU0FHRV9UWVBFfSwKICAgI2Vsc2UKQEAgLTE0OTksNiArMTc1NCwxMSBAQAogICAjZWxzZQogICAgIHsiV1JPTkdfU0lHTkFUVVJFX1NJWkUiLCBFUlJfTElCX1NTTCwgMjY1fSwKICAgI2VuZGlmCisgICNpZmRlZiBTU0xfUl9XUk9OR19TSUdOQVRVUkVfVFlQRQorICAgIHsiV1JPTkdfU0lHTkFUVVJFX1RZUEUiLCBFUlJfTElCX1NTTCwgU1NMX1JfV1JPTkdfU0lHTkFUVVJFX1RZUEV9LAorICAjZWxzZQorICAgIHsiV1JPTkdfU0lHTkFUVVJFX1RZUEUiLCBFUlJfTElCX1NTTCwgMzcwfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBTU0xfUl9XUk9OR19TU0xfVkVSU0lPTgogICAgIHsiV1JPTkdfU1NMX1ZFUlNJT04iLCBFUlJfTElCX1NTTCwgU1NMX1JfV1JPTkdfU1NMX1ZFUlNJT059LAogICAjZWxzZQpAQCAtMTUxOSw2ICsxNzc5LDExIEBACiAgICNlbHNlCiAgICAgeyJYNTA5X1ZFUklGSUNBVElPTl9TRVRVUF9QUk9CTEVNUyIsIEVSUl9MSUJfU1NMLCAyNjl9LAogICAjZW5kaWYKKyAgI2lmZGVmIFg1MDlfUl9BS0lEX01JU01BVENICisgICAgeyJBS0lEX01JU01BVENIIiwgRVJSX0xJQl9YNTA5LCBYNTA5X1JfQUtJRF9NSVNNQVRDSH0sCisgICNlbHNlCisgICAgeyJBS0lEX01JU01BVENIIiwgRVJSX0xJQl9YNTA5LCAxMTB9LAorICAjZW5kaWYKICAgI2lmZGVmIFg1MDlfUl9CQURfWDUwOV9GSUxFVFlQRQogICAgIHsiQkFEX1g1MDlfRklMRVRZUEUiLCBFUlJfTElCX1g1MDksIFg1MDlfUl9CQURfWDUwOV9GSUxFVFlQRX0sCiAgICNlbHNlCkBAIC0xNTM5LDExICsxODA0LDI2IEBACiAgICNlbHNlCiAgICAgeyJDRVJUX0FMUkVBRFlfSU5fSEFTSF9UQUJMRSIsIEVSUl9MSUJfWDUwOSwgMTAxfSwKICAgI2VuZGlmCisgICNpZmRlZiBYNTA5X1JfQ1JMX0FMUkVBRFlfREVMVEEKKyAgICB7IkNSTF9BTFJFQURZX0RFTFRBIiwgRVJSX0xJQl9YNTA5LCBYNTA5X1JfQ1JMX0FMUkVBRFlfREVMVEF9LAorICAjZWxzZQorICAgIHsiQ1JMX0FMUkVBRFlfREVMVEEiLCBFUlJfTElCX1g1MDksIDEyN30sCisgICNlbmRpZgorICAjaWZkZWYgWDUwOV9SX0NSTF9WRVJJRllfRkFJTFVSRQorICAgIHsiQ1JMX1ZFUklGWV9GQUlMVVJFIiwgRVJSX0xJQl9YNTA5LCBYNTA5X1JfQ1JMX1ZFUklGWV9GQUlMVVJFfSwKKyAgI2Vsc2UKKyAgICB7IkNSTF9WRVJJRllfRkFJTFVSRSIsIEVSUl9MSUJfWDUwOSwgMTMxfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBYNTA5X1JfRVJSX0FTTjFfTElCCiAgICAgeyJFUlJfQVNOMV9MSUIiLCBFUlJfTElCX1g1MDksIFg1MDlfUl9FUlJfQVNOMV9MSUJ9LAogICAjZWxzZQogICAgIHsiRVJSX0FTTjFfTElCIiwgRVJSX0xJQl9YNTA5LCAxMDJ9LAogICAjZW5kaWYKKyAgI2lmZGVmIFg1MDlfUl9JRFBfTUlTTUFUQ0gKKyAgICB7IklEUF9NSVNNQVRDSCIsIEVSUl9MSUJfWDUwOSwgWDUwOV9SX0lEUF9NSVNNQVRDSH0sCisgICNlbHNlCisgICAgeyJJRFBfTUlTTUFUQ0giLCBFUlJfTElCX1g1MDksIDEyOH0sCisgICNlbmRpZgogICAjaWZkZWYgWDUwOV9SX0lOVkFMSURfRElSRUNUT1JZCiAgICAgeyJJTlZBTElEX0RJUkVDVE9SWSIsIEVSUl9MSUJfWDUwOSwgWDUwOV9SX0lOVkFMSURfRElSRUNUT1JZfSwKICAgI2Vsc2UKQEAgLTE1NTksNiArMTgzOSwxMSBAQAogICAjZWxzZQogICAgIHsiSU5WQUxJRF9UUlVTVCIsIEVSUl9MSUJfWDUwOSwgMTIzfSwKICAgI2VuZGlmCisgICNpZmRlZiBYNTA5X1JfSVNTVUVSX01JU01BVENICisgICAgeyJJU1NVRVJfTUlTTUFUQ0giLCBFUlJfTElCX1g1MDksIFg1MDlfUl9JU1NVRVJfTUlTTUFUQ0h9LAorICAjZWxzZQorICAgIHsiSVNTVUVSX01JU01BVENIIiwgRVJSX0xJQl9YNTA5LCAxMjl9LAorICAjZW5kaWYKICAgI2lmZGVmIFg1MDlfUl9LRVlfVFlQRV9NSVNNQVRDSAogICAgIHsiS0VZX1RZUEVfTUlTTUFUQ0giLCBFUlJfTElCX1g1MDksIFg1MDlfUl9LRVlfVFlQRV9NSVNNQVRDSH0sCiAgICNlbHNlCkBAIC0xNTg0LDExICsxODY5LDIxIEBACiAgICNlbHNlCiAgICAgeyJNRVRIT0RfTk9UX1NVUFBPUlRFRCIsIEVSUl9MSUJfWDUwOSwgMTI0fSwKICAgI2VuZGlmCisgICNpZmRlZiBYNTA5X1JfTkVXRVJfQ1JMX05PVF9ORVdFUgorICAgIHsiTkVXRVJfQ1JMX05PVF9ORVdFUiIsIEVSUl9MSUJfWDUwOSwgWDUwOV9SX05FV0VSX0NSTF9OT1RfTkVXRVJ9LAorICAjZWxzZQorICAgIHsiTkVXRVJfQ1JMX05PVF9ORVdFUiIsIEVSUl9MSUJfWDUwOSwgMTMyfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBYNTA5X1JfTk9fQ0VSVF9TRVRfRk9SX1VTX1RPX1ZFUklGWQogICAgIHsiTk9fQ0VSVF9TRVRfRk9SX1VTX1RPX1ZFUklGWSIsIEVSUl9MSUJfWDUwOSwgWDUwOV9SX05PX0NFUlRfU0VUX0ZPUl9VU19UT19WRVJJRll9LAogICAjZWxzZQogICAgIHsiTk9fQ0VSVF9TRVRfRk9SX1VTX1RPX1ZFUklGWSIsIEVSUl9MSUJfWDUwOSwgMTA1fSwKICAgI2VuZGlmCisgICNpZmRlZiBYNTA5X1JfTk9fQ1JMX05VTUJFUgorICAgIHsiTk9fQ1JMX05VTUJFUiIsIEVSUl9MSUJfWDUwOSwgWDUwOV9SX05PX0NSTF9OVU1CRVJ9LAorICAjZWxzZQorICAgIHsiTk9fQ1JMX05VTUJFUiIsIEVSUl9MSUJfWDUwOSwgMTMwfSwKKyAgI2VuZGlmCiAgICNpZmRlZiBYNTA5X1JfUFVCTElDX0tFWV9ERUNPREVfRVJST1IKICAgICB7IlBVQkxJQ19LRVlfREVDT0RFX0VSUk9SIiwgRVJSX0xJQl9YNTA5LCBYNTA5X1JfUFVCTElDX0tFWV9ERUNPREVfRVJST1J9LAogICAjZWxzZQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fc3RhdC5jIGIvTW9kdWxlcy9fc3RhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDFmYTgKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL19zdGF0LmMKQEAgLTAsMCArMSw1NjMgQEAKKy8qIHN0YXQuaCBpbnRlcmZhY2UKKyAqCisgKiBUaGUgbW9kdWxlIGRlZmluZXMgYWxsIFNfSUYqLCBTX0kqLCBVRl8qLCBTRl8qIGFuZCBTVF8qIGNvbnN0YW50cyB0bworICogc2Vuc2libGUgZGVmYXVsdCB2YWx1ZXMgYXMgd2VsbCBhcyBkZWZpbmVzIFNfSVMqKCkgbWFjcm9zIGluIG9yZGVyIHRvIGtlZXAKKyAqIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB0aGUgb2xkIHN0YXQucHkgbW9kdWxlLgorICoKKyAqIE5ldyBjb25zdGFudHMgYW5kIG1hY3JvcyBzdWNoIGFzIFNfSUZET09SIC8gU19JU0RPT1IoKSBhcmUgYWx3YXlzIGRlZmluZWQKKyAqIGFzIGludCAwLgorICoKKyAqIE5PVEU6IFBPU0lYIG9ubHkgZGVmaW5lcyB0aGUgdmFsdWVzIG9mIHRoZSBTX0kqIHBlcm1pc3Npb24gYml0cy4KKyAqCisgKi8KKworI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZiAvKiBIQVZFX1NZU19UWVBFU19IICovCisKKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmIC8qIEhBVkVfU1lTX1NUQVRfSCAqLworCisjaWZkZWYgTVNfV0lORE9XUwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7CisjZW5kaWYKKworLyogRnJvbSBQeXRob24ncyBzdGF0LnB5ICovCisjaWZuZGVmIFNfSU1PREUKKyMgIGRlZmluZSBTX0lNT0RFIDA3Nzc3CisjZW5kaWYKKworLyogU19JRlhYWCBjb25zdGFudHMgKGZpbGUgdHlwZXMpCisgKgorICogT25seSB0aGUgbmFtZXMgYXJlIGRlZmluZWQgYnkgUE9TSVggYnV0IG5vdCB0aGVpciB2YWx1ZS4gQWxsIGNvbW1vbiBmaWxlCisgKiB0eXBlcyBzZWVtcyB0byBoYXZlIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgb24gYWxsIHBsYXRmb3JtcywgdGhvdWdoLgorICoKKyAqIHB5cG9ydC5oIGd1YXJhbnRlZXMgU19JRk1ULCBTX0lGRElSLCBTX0lGQ0hSLCBTX0lGUkVHIGFuZCBTX0lGTE5LCisgKi8KKworI2lmbmRlZiBTX0lGQkxLCisjICBkZWZpbmUgU19JRkJMSyAwMDYwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGSUZPCisjICBkZWZpbmUgU19JRklGTyAwMDEwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGU09DSworIyAgZGVmaW5lIFNfSUZTT0NLIDAxNDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUZET09SCisjICBkZWZpbmUgU19JRkRPT1IgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JRlBPUlQKKyMgIGRlZmluZSBTX0lGUE9SVCAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lGV0hUCisjICBkZWZpbmUgU19JRldIVCAwCisjZW5kaWYKKworCisvKiBTX0lTWFhYKCkKKyAqIHB5cG9ydC5oIGRlZmluZXMgU19JU0RJUigpLCBTX0lTUkVHKCkgYW5kIFNfSVNDSFIoKQorICovCisKKyNpZm5kZWYgU19JU0JMSworIyAgZGVmaW5lIFNfSVNCTEsobW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZCTEspCisjZW5kaWYKKworI2lmbmRlZiBTX0lTRklGTworIyAgZGVmaW5lIFNfSVNGSUZPKG1vZGUpICgoKG1vZGUpICYgU19JRk1UKSA9PSBTX0lGSUZPKQorI2VuZGlmCisKKyNpZm5kZWYgU19JU0xOSworIyAgZGVmaW5lIFNfSVNMTksobW9kZSkgKCgobW9kZSkgJiBTX0lGTVQpID09IFNfSUZMTkspCisjZW5kaWYKKworI2lmbmRlZiBTX0lTU09DSworIyAgZGVmaW5lIFNfSVNTT0NLKG1vZGUpICgoKG1vZGUpICYgU19JRk1UKSA9PSBTX0lGU09DSykKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNET09SCisjICBkZWZpbmUgU19JU0RPT1IobW9kZSkgMAorI2VuZGlmCisKKyNpZm5kZWYgU19JU1BPUlQKKyMgIGRlZmluZSBTX0lTUE9SVChtb2RlKSAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lTV0hUCisjICBkZWZpbmUgU19JU1dIVChtb2RlKSAwCisjZW5kaWYKKworCisvKiBTX0kqIGZpbGUgcGVybWlzc2lvbgorICoKKyAqIFRoZSBwZXJtaXNzaW9uIGJpdCB2YWx1ZSBhcmUgZGVmaW5lZCBieSBQT1NJWCBzdGFuZGFyZHMuCisgKi8KKyNpZm5kZWYgU19JU1VJRAorIyAgZGVmaW5lIFNfSVNVSUQgMDQwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVNHSUQKKyMgIGRlZmluZSBTX0lTR0lEIDAyMDAwCisjZW5kaWYKKworLyogd2hhdCBpcyBTX0VORk1UPyAqLworI2lmbmRlZiBTX0VORk1UCisjICBkZWZpbmUgU19FTkZNVCBTX0lTR0lECisjZW5kaWYKKworI2lmbmRlZiBTX0lTVlRYCisjICBkZWZpbmUgU19JU1ZUWCAwMTAwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUkVBRAorIyAgZGVmaW5lIFNfSVJFQUQgMDA0MDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVdSSVRFCisjICBkZWZpbmUgU19JV1JJVEUgMDAyMDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSUVYRUMKKyMgIGRlZmluZSBTX0lFWEVDIDAwMTAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lSV1hVCisjICBkZWZpbmUgU19JUldYVSAwMDcwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUlVTUgorIyAgZGVmaW5lIFNfSVJVU1IgMDA0MDAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVdVU1IKKyMgIGRlZmluZSBTX0lXVVNSIDAwMjAwCisjZW5kaWYKKworI2lmbmRlZiBTX0lYVVNSCisjICBkZWZpbmUgU19JWFVTUiAwMDEwMAorI2VuZGlmCisKKyNpZm5kZWYgU19JUldYRworIyAgZGVmaW5lIFNfSVJXWEcgMDAwNzAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJHUlAKKyMgIGRlZmluZSBTX0lSR1JQIDAwMDQwCisjZW5kaWYKKworI2lmbmRlZiBTX0lXR1JQCisjICBkZWZpbmUgU19JV0dSUCAwMDAyMAorI2VuZGlmCisKKyNpZm5kZWYgU19JWEdSUAorIyAgZGVmaW5lIFNfSVhHUlAgMDAwMTAKKyNlbmRpZgorCisjaWZuZGVmIFNfSVJXWE8KKyMgIGRlZmluZSBTX0lSV1hPIDAwMDA3CisjZW5kaWYKKworI2lmbmRlZiBTX0lST1RICisjICBkZWZpbmUgU19JUk9USCAwMDAwNAorI2VuZGlmCisKKyNpZm5kZWYgU19JV09USAorIyAgZGVmaW5lIFNfSVdPVEggMDAwMDIKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhPVEgKKyMgIGRlZmluZSBTX0lYT1RIIDAwMDAxCisjZW5kaWYKKworCisvKiBOYW1lcyBmb3IgZmlsZSBmbGFncyAqLworI2lmbmRlZiBVRl9OT0RVTVAKKyMgIGRlZmluZSBVRl9OT0RVTVAgMHgwMDAwMDAwMQorI2VuZGlmCisKKyNpZm5kZWYgVUZfSU1NVVRBQkxFCisjICBkZWZpbmUgVUZfSU1NVVRBQkxFIDB4MDAwMDAwMDIKKyNlbmRpZgorCisjaWZuZGVmIFVGX0FQUEVORAorIyAgZGVmaW5lIFVGX0FQUEVORCAweDAwMDAwMDA0CisjZW5kaWYKKworI2lmbmRlZiBVRl9PUEFRVUUKKyMgIGRlZmluZSBVRl9PUEFRVUUgMHgwMDAwMDAwOAorI2VuZGlmCisKKyNpZm5kZWYgVUZfTk9VTkxJTksKKyMgIGRlZmluZSBVRl9OT1VOTElOSyAweDAwMDAwMDEwCisjZW5kaWYKKworI2lmbmRlZiBVRl9DT01QUkVTU0VECisjICBkZWZpbmUgVUZfQ09NUFJFU1NFRCAweDAwMDAwMDIwCisjZW5kaWYKKworI2lmbmRlZiBVRl9ISURERU4KKyMgIGRlZmluZSBVRl9ISURERU4gMHgwMDAwODAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfQVJDSElWRUQKKyMgIGRlZmluZSBTRl9BUkNISVZFRCAweDAwMDEwMDAwCisjZW5kaWYKKworI2lmbmRlZiBTRl9JTU1VVEFCTEUKKyMgIGRlZmluZSBTRl9JTU1VVEFCTEUgMHgwMDAyMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfQVBQRU5ECisjICBkZWZpbmUgU0ZfQVBQRU5EIDB4MDAwNDAwMDAKKyNlbmRpZgorCisjaWZuZGVmIFNGX05PVU5MSU5LCisjICBkZWZpbmUgU0ZfTk9VTkxJTksgMHgwMDEwMDAwMAorI2VuZGlmCisKKyNpZm5kZWYgU0ZfU05BUFNIT1QKKyMgIGRlZmluZSBTRl9TTkFQU0hPVCAweDAwMjAwMDAwCisjZW5kaWYKKworc3RhdGljIG1vZGVfdAorX1B5TG9uZ19Bc01vZGVfdChQeU9iamVjdCAqb3ApCit7CisgICAgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKyAgICBtb2RlX3QgbW9kZTsKKworICAgIHZhbHVlID0gUHlMb25nX0FzVW5zaWduZWRMb25nKG9wKTsKKyAgICBpZiAoKHZhbHVlID09ICh1bnNpZ25lZCBsb25nKS0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gKG1vZGVfdCktMTsKKworICAgIG1vZGUgPSAobW9kZV90KXZhbHVlOworICAgIGlmICgodW5zaWduZWQgbG9uZyltb2RlICE9IHZhbHVlKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAibW9kZSBvdXQgb2YgcmFuZ2UiKTsKKyAgICAgICAgcmV0dXJuIChtb2RlX3QpLTE7CisgICAgfQorICAgIHJldHVybiBtb2RlOworfQorCisKKyNkZWZpbmUgc3RhdF9TX0lTRlVOQyhpc2Z1bmMsIGRvYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0aWMgUHlPYmplY3QgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBzdGF0XyAjI2lzZnVuYyAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvbW9kZSkgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBtb2RlX3QgbW9kZSA9IF9QeUxvbmdfQXNNb2RlX3Qob21vZGUpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgaWYgKChtb2RlID09IChtb2RlX3QpLTEpICYmIFB5RXJyX09jY3VycmVkKCkpICAgICAgICAgICBcCisgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyhpc2Z1bmMobW9kZSkpOyAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgUHlEb2NfU1RSVkFSKHN0YXRfICMjIGlzZnVuYyAjIyBfZG9jLCBkb2MpCisKK3N0YXRfU19JU0ZVTkMoU19JU0RJUiwKKyAgICAiU19JU0RJUihtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgZGlyZWN0b3J5LiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNDSFIsCisgICAgIlNfSVNDSFIobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIGNoYXJhY3RlciBzcGVjaWFsIGRldmljZSBmaWxlLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNCTEssCisgICAgIlNfSVNCTEsobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIGJsb2NrIHNwZWNpYWwgZGV2aWNlIGZpbGUuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU1JFRywKKyAgICAiU19JU1JFRyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgcmVndWxhciBmaWxlLiIpOworCitzdGF0X1NfSVNGVU5DKFNfSVNGSUZPLAorICAgICJTX0lTRklGTyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgRklGTyAobmFtZWQgcGlwZSkuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU0xOSywKKyAgICAiU19JU0xOSyhtb2RlKSAtPiBib29sXG5cbiIKKyAgICAiUmV0dXJuIFRydWUgaWYgbW9kZSBpcyBmcm9tIGEgc3ltYm9saWMgbGluay4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTU09DSywKKyAgICAiU19JU1NPQ0sobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIHNvY2tldC4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTRE9PUiwKKyAgICAiU19JU0RPT1IobW9kZSkgLT4gYm9vbFxuXG4iCisgICAgIlJldHVybiBUcnVlIGlmIG1vZGUgaXMgZnJvbSBhIGRvb3IuIik7CisKK3N0YXRfU19JU0ZVTkMoU19JU1BPUlQsCisgICAgIlNfSVNQT1JUKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYW4gZXZlbnQgcG9ydC4iKTsKKworc3RhdF9TX0lTRlVOQyhTX0lTV0hULAorICAgICJTX0lTV0hUKG1vZGUpIC0+IGJvb2xcblxuIgorICAgICJSZXR1cm4gVHJ1ZSBpZiBtb2RlIGlzIGZyb20gYSB3aGl0ZW91dC4iKTsKKworCitQeURvY19TVFJWQVIoc3RhdF9TX0lNT0RFX2RvYywKKyJSZXR1cm4gdGhlIHBvcnRpb24gb2YgdGhlIGZpbGUncyBtb2RlIHRoYXQgY2FuIGJlIHNldCBieSBvcy5jaG1vZCgpLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RhdF9TX0lNT0RFKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb21vZGUpCit7CisgICAgbW9kZV90IG1vZGUgPSBfUHlMb25nX0FzTW9kZV90KG9tb2RlKTsKKyAgICBpZiAoKG1vZGUgPT0gKG1vZGVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKG1vZGUgJiBTX0lNT0RFKTsKK30KKworCitQeURvY19TVFJWQVIoc3RhdF9TX0lGTVRfZG9jLAorIlJldHVybiB0aGUgcG9ydGlvbiBvZiB0aGUgZmlsZSdzIG1vZGUgdGhhdCBkZXNjcmliZXMgdGhlIGZpbGUgdHlwZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3N0YXRfU19JRk1UKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb21vZGUpCit7CisgICAgbW9kZV90IG1vZGUgPSBfUHlMb25nX0FzTW9kZV90KG9tb2RlKTsKKyAgICBpZiAoKG1vZGUgPT0gKG1vZGVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKG1vZGUgJiBTX0lGTVQpOworfQorCisvKiBmaWxlIHR5cGUgY2hhcnMgYWNjb3JkaW5nIHRvCisgICBodHRwOi8vZW4ud2lraWJvb2tzLm9yZy93aWtpL0NfUHJvZ3JhbW1pbmcvUE9TSVhfUmVmZXJlbmNlL3N5cy9zdGF0LmggKi8KKworc3RhdGljIGNoYXIKK2ZpbGV0eXBlKG1vZGVfdCBtb2RlKQoreworICAgIC8qIGNvbW1vbiBjYXNlcyBmaXJzdCAqLworICAgIGlmIChTX0lTUkVHKG1vZGUpKSAgcmV0dXJuICctJzsKKyAgICBpZiAoU19JU0RJUihtb2RlKSkgIHJldHVybiAnZCc7CisgICAgaWYgKFNfSVNMTksobW9kZSkpICByZXR1cm4gJ2wnOworICAgIC8qIHNwZWNpYWwgZmlsZXMgKi8KKyAgICBpZiAoU19JU0JMSyhtb2RlKSkgIHJldHVybiAnYic7CisgICAgaWYgKFNfSVNDSFIobW9kZSkpICByZXR1cm4gJ2MnOworICAgIGlmIChTX0lTRklGTyhtb2RlKSkgcmV0dXJuICdwJzsKKyAgICBpZiAoU19JU1NPQ0sobW9kZSkpIHJldHVybiAncyc7CisgICAgLyogbm9uLXN0YW5kYXJkIHR5cGVzICovCisgICAgaWYgKFNfSVNET09SKG1vZGUpKSByZXR1cm4gJ0QnOworICAgIGlmIChTX0lTUE9SVChtb2RlKSkgcmV0dXJuICdQJzsKKyAgICBpZiAoU19JU1dIVChtb2RlKSkgIHJldHVybiAndyc7CisgICAgLyogdW5rbm93biAqLworICAgIHJldHVybiAnPyc7Cit9CisKK3N0YXRpYyB2b2lkCitmaWxlcGVybShtb2RlX3QgbW9kZSwgY2hhciAqYnVmKQoreworICAgIGJ1ZlswXSA9IG1vZGUgJiBTX0lSVVNSID8gJ3InIDogJy0nOworICAgIGJ1ZlsxXSA9IG1vZGUgJiBTX0lXVVNSID8gJ3cnIDogJy0nOworICAgIGlmIChtb2RlICYgU19JU1VJRCkgeworICAgICAgICBidWZbMl0gPSBtb2RlICYgU19JWFVTUiA/ICdzJyA6ICdTJzsKKyAgICB9IGVsc2UgeworICAgICAgICBidWZbMl0gPSBtb2RlICYgU19JWFVTUiA/ICd4JyA6ICctJzsKKyAgICB9CisgICAgYnVmWzNdID0gbW9kZSAmIFNfSVJHUlAgPyAncicgOiAnLSc7CisgICAgYnVmWzRdID0gbW9kZSAmIFNfSVdHUlAgPyAndycgOiAnLSc7CisgICAgaWYgKG1vZGUgJiBTX0lTR0lEKSB7CisgICAgICAgIGJ1Zls1XSA9IG1vZGUgJiBTX0lYR1JQID8gJ3MnIDogJ1MnOworICAgIH0gZWxzZSB7CisgICAgICAgIGJ1Zls1XSA9IG1vZGUgJiBTX0lYR1JQID8gJ3gnIDogJy0nOworICAgIH0KKyAgICBidWZbNl0gPSBtb2RlICYgU19JUk9USCA/ICdyJyA6ICctJzsKKyAgICBidWZbN10gPSBtb2RlICYgU19JV09USCA/ICd3JyA6ICctJzsKKyAgICBpZiAobW9kZSAmIFNfSVNWVFgpIHsKKyAgICAgICAgYnVmWzhdID0gbW9kZSAmIFNfSVhPVEggPyAndCcgOiAnVCc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYnVmWzhdID0gbW9kZSAmIFNfSVhPVEggPyAneCcgOiAnLSc7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoc3RhdF9maWxlbW9kZV9kb2MsCisiQ29udmVydCBhIGZpbGUncyBtb2RlIHRvIGEgc3RyaW5nIG9mIHRoZSBmb3JtICctcnd4cnd4cnd4JyIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc3RhdF9maWxlbW9kZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9tb2RlKQoreworICAgIGNoYXIgYnVmWzEwXTsKKyAgICBtb2RlX3QgbW9kZTsKKworICAgIG1vZGUgPSBfUHlMb25nX0FzTW9kZV90KG9tb2RlKTsKKyAgICBpZiAoKG1vZGUgPT0gKG1vZGVfdCktMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBidWZbMF0gPSBmaWxldHlwZShtb2RlKTsKKyAgICBmaWxlcGVybShtb2RlLCAmYnVmWzFdKTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKGJ1ZiwgMTApOworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBzdGF0X21ldGhvZHNbXSA9IHsKKyAgICB7IlNfSVNESVIiLCAgICAgICAgIHN0YXRfU19JU0RJUiwgIE1FVEhfTywgc3RhdF9TX0lTRElSX2RvY30sCisgICAgeyJTX0lTQ0hSIiwgICAgICAgICBzdGF0X1NfSVNDSFIsICBNRVRIX08sIHN0YXRfU19JU0NIUl9kb2N9LAorICAgIHsiU19JU0JMSyIsICAgICAgICAgc3RhdF9TX0lTQkxLLCAgTUVUSF9PLCBzdGF0X1NfSVNCTEtfZG9jfSwKKyAgICB7IlNfSVNSRUciLCAgICAgICAgIHN0YXRfU19JU1JFRywgIE1FVEhfTywgc3RhdF9TX0lTUkVHX2RvY30sCisgICAgeyJTX0lTRklGTyIsICAgICAgICBzdGF0X1NfSVNGSUZPLCBNRVRIX08sIHN0YXRfU19JU0ZJRk9fZG9jfSwKKyAgICB7IlNfSVNMTksiLCAgICAgICAgIHN0YXRfU19JU0xOSywgIE1FVEhfTywgc3RhdF9TX0lTTE5LX2RvY30sCisgICAgeyJTX0lTU09DSyIsICAgICAgICBzdGF0X1NfSVNTT0NLLCBNRVRIX08sIHN0YXRfU19JU1NPQ0tfZG9jfSwKKyAgICB7IlNfSVNET09SIiwgICAgICAgIHN0YXRfU19JU0RPT1IsIE1FVEhfTywgc3RhdF9TX0lTRE9PUl9kb2N9LAorICAgIHsiU19JU1BPUlQiLCAgICAgICAgc3RhdF9TX0lTUE9SVCwgTUVUSF9PLCBzdGF0X1NfSVNQT1JUX2RvY30sCisgICAgeyJTX0lTV0hUIiwgICAgICAgICBzdGF0X1NfSVNXSFQsICBNRVRIX08sIHN0YXRfU19JU1dIVF9kb2N9LAorICAgIHsiU19JTU9ERSIsICAgICAgICAgc3RhdF9TX0lNT0RFLCAgTUVUSF9PLCBzdGF0X1NfSU1PREVfZG9jfSwKKyAgICB7IlNfSUZNVCIsICAgICAgICAgIHN0YXRfU19JRk1ULCAgIE1FVEhfTywgc3RhdF9TX0lGTVRfZG9jfSwKKyAgICB7ImZpbGVtb2RlIiwgICAgICAgIHN0YXRfZmlsZW1vZGUsIE1FVEhfTywgc3RhdF9maWxlbW9kZV9kb2N9LAorICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCit9OworCisKK1B5RG9jX1NUUlZBUihtb2R1bGVfZG9jLAorIlNfSUZNVF86IGZpbGUgdHlwZSBiaXRzXG5cCitTX0lGRElSOiBkaXJlY3RvcnlcblwKK1NfSUZDSFI6IGNoYXJhY3RlciBkZXZpY2VcblwKK1NfSUZCTEs6IGJsb2NrIGRldmljZVxuXAorU19JRlJFRzogcmVndWxhciBmaWxlXG5cCitTX0lGSUZPOiBmaWZvIChuYW1lZCBwaXBlKVxuXAorU19JRkxOSzogc3ltYm9saWMgbGlua1xuXAorU19JRlNPQ0s6IHNvY2tldCBmaWxlXG5cCitTX0lGRE9PUjogZG9vclxuXAorU19JRlBPUlQ6IGV2ZW50IHBvcnRcblwKK1NfSUZXSFQ6IHdoaXRlb3V0XG5cCitcbiIKKworIlNfSVNVSUQ6IHNldCBVSUQgYml0XG5cCitTX0lTR0lEOiBzZXQgR0lEIGJpdFxuXAorU19FTkZNVDogZmlsZSBsb2NraW5nIGVuZm9yY2VtZW50XG5cCitTX0lTVlRYOiBzdGlja3kgYml0XG5cCitTX0lSRUFEOiBVbml4IFY3IHN5bm9ueW0gZm9yIFNfSVJVU1JcblwKK1NfSVdSSVRFOiBVbml4IFY3IHN5bm9ueW0gZm9yIFNfSVdVU1JcblwKK1NfSUVYRUM6IFVuaXggVjcgc3lub255bSBmb3IgU19JWFVTUlxuXAorU19JUldYVTogbWFzayBmb3Igb3duZXIgcGVybWlzc2lvbnNcblwKK1NfSVJVU1I6IHJlYWQgYnkgb3duZXJcblwKK1NfSVdVU1I6IHdyaXRlIGJ5IG93bmVyXG5cCitTX0lYVVNSOiBleGVjdXRlIGJ5IG93bmVyXG5cCitTX0lSV1hHOiBtYXNrIGZvciBncm91cCBwZXJtaXNzaW9uc1xuXAorU19JUkdSUDogcmVhZCBieSBncm91cFxuXAorU19JV0dSUDogd3JpdGUgYnkgZ3JvdXBcblwKK1NfSVhHUlA6IGV4ZWN1dGUgYnkgZ3JvdXBcblwKK1NfSVJXWE86IG1hc2sgZm9yIG90aGVycyAobm90IGluIGdyb3VwKSBwZXJtaXNzaW9uc1xuXAorU19JUk9USDogcmVhZCBieSBvdGhlcnNcblwKK1NfSVdPVEg6IHdyaXRlIGJ5IG90aGVyc1xuXAorU19JWE9USDogZXhlY3V0ZSBieSBvdGhlcnNcblwKK1xuIgorCisiVUZfTk9EVU1QOiBkbyBub3QgZHVtcCBmaWxlXG5cCitVRl9JTU1VVEFCTEU6IGZpbGUgbWF5IG5vdCBiZSBjaGFuZ2VkXG5cCitVRl9BUFBFTkQ6IGZpbGUgbWF5IG9ubHkgYmUgYXBwZW5kZWQgdG9cblwKK1VGX09QQVFVRTogZGlyZWN0b3J5IGlzIG9wYXF1ZSB3aGVuIHZpZXdlZCB0aHJvdWdoIGEgdW5pb24gc3RhY2tcblwKK1VGX05PVU5MSU5LOiBmaWxlIG1heSBub3QgYmUgcmVuYW1lZCBvciBkZWxldGVkXG5cCitVRl9DT01QUkVTU0VEOiBPUyBYOiBmaWxlIGlzIGhmcy1jb21wcmVzc2VkXG5cCitVRl9ISURERU46IE9TIFg6IGZpbGUgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWRcblwKK1NGX0FSQ0hJVkVEOiBmaWxlIG1heSBiZSBhcmNoaXZlZFxuXAorU0ZfSU1NVVRBQkxFOiBmaWxlIG1heSBub3QgYmUgY2hhbmdlZFxuXAorU0ZfQVBQRU5EOiBmaWxlIG1heSBvbmx5IGJlIGFwcGVuZGVkIHRvXG5cCitTRl9OT1VOTElOSzogZmlsZSBtYXkgbm90IGJlIHJlbmFtZWQgb3IgZGVsZXRlZFxuXAorU0ZfU05BUFNIT1Q6IGZpbGUgaXMgYSBzbmFwc2hvdCBmaWxlXG5cCitcbiIKKworIlNUX01PREVcblwKK1NUX0lOT1xuXAorU1RfREVWXG5cCitTVF9OTElOS1xuXAorU1RfVUlEXG5cCitTVF9HSURcblwKK1NUX1NJWkVcblwKK1NUX0FUSU1FXG5cCitTVF9NVElNRVxuXAorU1RfQ1RJTUVcblwKKyIpOworCisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgc3RhdG1vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl9zdGF0IiwKKyAgICBtb2R1bGVfZG9jLAorICAgIC0xLAorICAgIHN0YXRfbWV0aG9kcywKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQworUHlJbml0X19zdGF0KHZvaWQpCit7CisgICAgUHlPYmplY3QgKm07CisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmc3RhdG1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkRJUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGQ0hSKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZCTEspKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRlJFRykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lGSUZPKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUZMTkspKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRlNPQ0spKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRkRPT1IpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRlBPUlQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JRldIVCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVNVSUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JU0dJRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lTVlRYKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfRU5GTVQpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSRUFEKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVdSSVRFKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSUVYRUMpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSV1hVKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJVU1IpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JV1VTUikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lYVVNSKSkgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUldYRykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lSR1JQKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVdHUlApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JWEdSUCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVJXWE8pKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU19JUk9USCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTX0lXT1RIKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNfSVhPVEgpKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9OT0RVTVApKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfSU1NVVRBQkxFKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFVGX0FQUEVORCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9PUEFRVUUpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfTk9VTkxJTkspKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVUZfQ09NUFJFU1NFRCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVRl9ISURERU4pKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfQVJDSElWRUQpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0ZfSU1NVVRBQkxFKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX0FQUEVORCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9OT1VOTElOSykpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9TTkFQU0hPVCkpIHJldHVybiBOVUxMOworCisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9NT0RFIiwgMCkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfSU5PIiwgMSkpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfREVWIiwgMikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfTkxJTksiLCAzKSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9VSUQiLCA0KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9HSUQiLCA1KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9TSVpFIiwgNikpIHJldHVybiBOVUxMOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU1RfQVRJTUUiLCA3KSkgcmV0dXJuIE5VTEw7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTVF9NVElNRSIsIDgpKSByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNUX0NUSU1FIiwgOSkpIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIG07Cit9CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL19zdHJ1Y3QuYyBiL01vZHVsZXMvX3N0cnVjdC5jCmluZGV4IGEyNDg3NTMuLmFkOTk1OWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3N0cnVjdC5jCisrKyBiL01vZHVsZXMvX3N0cnVjdC5jCkBAIC0yNiw2ICsyNiw3IEBACiAgICAgY29uc3Qgc3RydWN0IF9mb3JtYXRkZWYgKmZtdGRlZjsKICAgICBQeV9zc2l6ZV90IG9mZnNldDsKICAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgUHlfc3NpemVfdCByZXBlYXQ7CiB9IGZvcm1hdGNvZGU7CiAKIC8qIFN0cnVjdCBvYmplY3QgaW50ZXJmYWNlICovCkBAIC0xMTk5LDEyICsxMjAwLDExIEBACiAgICAgY2FzZSAnISc6IC8qIE5ldHdvcmsgYnl0ZSBvcmRlciBpcyBiaWctZW5kaWFuICovCiAgICAgICAgIHJldHVybiBiaWdlbmRpYW5fdGFibGU7CiAgICAgY2FzZSAnPSc6IHsgLyogSG9zdCBieXRlIG9yZGVyIC0tIGRpZmZlcmVudCBmcm9tIG5hdGl2ZSBpbiBhbGlnbm1lbnQhICovCi0gICAgICAgIGludCBuID0gMTsKLSAgICAgICAgY2hhciAqcCA9IChjaGFyICopICZuOwotICAgICAgICBpZiAoKnAgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBsaWxlbmRpYW5fdGFibGU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBiaWdlbmRpYW5fdGFibGU7CisjaWYgUFlfTElUVExFX0VORElBTgorICAgICAgICByZXR1cm4gbGlsZW5kaWFuX3RhYmxlOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIGJpZ2VuZGlhbl90YWJsZTsKKyNlbmRpZgogICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICAtLSpwZm10OyAvKiBCYWNrIG91dCBvZiBwb2ludGVyIGluY3JlbWVudCAqLwpAQCAtMTI0OCw2ICsxMjQ4LDkgQEAKICAgICByZXR1cm4gc2l6ZTsKIH0KIAorLyoKKyAqIFN0cnVjdCBvYmplY3QgaW1wbGVtZW50YXRpb24uCisgKi8KIAogLyogY2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgZm9ybWF0IHN0cmluZyAqLwogCkBAIC0xMjYxLDcgKzEyNjQsNyBAQAogICAgIGNvbnN0IGNoYXIgKnM7CiAgICAgY29uc3QgY2hhciAqZm10OwogICAgIGNoYXIgYzsKLSAgICBQeV9zc2l6ZV90IHNpemUsIGxlbiwgbnVtLCBpdGVtc2l6ZTsKKyAgICBQeV9zc2l6ZV90IHNpemUsIGxlbiwgbmNvZGVzLCBudW0sIGl0ZW1zaXplOwogCiAgICAgZm10ID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZi0+c19mb3JtYXQpOwogCkBAIC0xMjcwLDYgKzEyNzMsNyBAQAogICAgIHMgPSBmbXQ7CiAgICAgc2l6ZSA9IDA7CiAgICAgbGVuID0gMDsKKyAgICBuY29kZXMgPSAwOwogICAgIHdoaWxlICgoYyA9ICpzKyspICE9ICdcMCcpIHsKICAgICAgICAgaWYgKFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soYykpKQogICAgICAgICAgICAgY29udGludWU7CkBAIC0xMjk5LDkgKzEzMDMsOSBAQAogCiAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICAgICAgY2FzZSAncyc6IC8qIGZhbGwgdGhyb3VnaCAqLwotICAgICAgICAgICAgY2FzZSAncCc6IGxlbisrOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3AnOiBsZW4rKzsgbmNvZGVzKys7IGJyZWFrOwogICAgICAgICAgICAgY2FzZSAneCc6IGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDogbGVuICs9IG51bTsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiBsZW4gKz0gbnVtOyBpZiAobnVtKSBuY29kZXMrKzsgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBpdGVtc2l6ZSA9IGUtPnNpemU7CkBAIC0xMzE2LDE0ICsxMzIwLDE0IEBACiAgICAgfQogCiAgICAgLyogY2hlY2sgZm9yIG92ZXJmbG93ICovCi0gICAgaWYgKChsZW4gKyAxKSA+IChQWV9TU0laRV9UX01BWCAvIHNpemVvZihmb3JtYXRjb2RlKSkpIHsKKyAgICBpZiAoKG5jb2RlcyArIDEpID4gKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKGZvcm1hdGNvZGUpKSkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgc2VsZi0+c19zaXplID0gc2l6ZTsKICAgICBzZWxmLT5zX2xlbiA9IGxlbjsKLSAgICBjb2RlcyA9IFB5TWVtX01BTExPQygobGVuICsgMSkgKiBzaXplb2YoZm9ybWF0Y29kZSkpOworICAgIGNvZGVzID0gUHlNZW1fTUFMTE9DKChuY29kZXMgKyAxKSAqIHNpemVvZihmb3JtYXRjb2RlKSk7CiAgICAgaWYgKGNvZGVzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTM1NSwyMyArMTM1OSwyNCBAQAogICAgICAgICAgICAgY29kZXMtPm9mZnNldCA9IHNpemU7CiAgICAgICAgICAgICBjb2Rlcy0+c2l6ZSA9IG51bTsKICAgICAgICAgICAgIGNvZGVzLT5mbXRkZWYgPSBlOworICAgICAgICAgICAgY29kZXMtPnJlcGVhdCA9IDE7CiAgICAgICAgICAgICBjb2RlcysrOwogICAgICAgICAgICAgc2l6ZSArPSBudW07CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAneCcpIHsKICAgICAgICAgICAgIHNpemUgKz0gbnVtOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd2hpbGUgKC0tbnVtID49IDApIHsKLSAgICAgICAgICAgICAgICBjb2Rlcy0+b2Zmc2V0ID0gc2l6ZTsKLSAgICAgICAgICAgICAgICBjb2Rlcy0+c2l6ZSA9IGUtPnNpemU7Ci0gICAgICAgICAgICAgICAgY29kZXMtPmZtdGRlZiA9IGU7Ci0gICAgICAgICAgICAgICAgY29kZXMrKzsKLSAgICAgICAgICAgICAgICBzaXplICs9IGUtPnNpemU7Ci0gICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAobnVtKSB7CisgICAgICAgICAgICBjb2Rlcy0+b2Zmc2V0ID0gc2l6ZTsKKyAgICAgICAgICAgIGNvZGVzLT5zaXplID0gZS0+c2l6ZTsKKyAgICAgICAgICAgIGNvZGVzLT5mbXRkZWYgPSBlOworICAgICAgICAgICAgY29kZXMtPnJlcGVhdCA9IG51bTsKKyAgICAgICAgICAgIGNvZGVzKys7CisgICAgICAgICAgICBzaXplICs9IGUtPnNpemUgKiBudW07CiAgICAgICAgIH0KICAgICB9CiAgICAgY29kZXMtPmZtdGRlZiA9IE5VTEw7CiAgICAgY29kZXMtPm9mZnNldCA9IHNpemU7CiAgICAgY29kZXMtPnNpemUgPSAwOworICAgIGNvZGVzLT5yZXBlYXQgPSAwOwogCiAgICAgcmV0dXJuIDA7CiAKQEAgLTE0NjAsMjIgKzE0NjUsMjYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmb3IgKGNvZGUgPSBzb3NlbGYtPnNfY29kZXM7IGNvZGUtPmZtdGRlZiAhPSBOVUxMOyBjb2RlKyspIHsKLSAgICAgICAgUHlPYmplY3QgKnY7CiAgICAgICAgIGNvbnN0IGZvcm1hdGRlZiAqZSA9IGNvZGUtPmZtdGRlZjsKICAgICAgICAgY29uc3QgY2hhciAqcmVzID0gc3RhcnRmcm9tICsgY29kZS0+b2Zmc2V0OwotICAgICAgICBpZiAoZS0+Zm9ybWF0ID09ICdzJykgewotICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocmVzLCBjb2RlLT5zaXplKTsKLSAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IG4gPSAqKHVuc2lnbmVkIGNoYXIqKXJlczsKLSAgICAgICAgICAgIGlmIChuID49IGNvZGUtPnNpemUpCi0gICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemUgLSAxOwotICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocmVzICsgMSwgbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB2ID0gZS0+dW5wYWNrKHJlcywgZSk7CisgICAgICAgIFB5X3NzaXplX3QgaiA9IGNvZGUtPnJlcGVhdDsKKyAgICAgICAgd2hpbGUgKGotLSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnY7CisgICAgICAgICAgICBpZiAoZS0+Zm9ybWF0ID09ICdzJykgeworICAgICAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKHJlcywgY29kZS0+c2l6ZSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGUtPmZvcm1hdCA9PSAncCcpIHsKKyAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG4gPSAqKHVuc2lnbmVkIGNoYXIqKXJlczsKKyAgICAgICAgICAgICAgICBpZiAobiA+PSBjb2RlLT5zaXplKQorICAgICAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZSAtIDE7CisgICAgICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocmVzICsgMSwgbik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHYgPSBlLT51bnBhY2socmVzLCBlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIGkrKywgdik7CisgICAgICAgICAgICByZXMgKz0gY29kZS0+c2l6ZTsKICAgICAgICAgfQotICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSsrLCB2KTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTU1Nyw2ICsxNTY2LDE0MiBAQAogfQogCiAKKy8qIFVucGFjayBpdGVyYXRvciB0eXBlICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgUHlTdHJ1Y3RPYmplY3QgKnNvOworICAgIFB5X2J1ZmZlciBidWY7CisgICAgUHlfc3NpemVfdCBpbmRleDsKK30gdW5wYWNraXRlcm9iamVjdDsKKworc3RhdGljIHZvaWQKK3VucGFja2l0ZXJfZGVhbGxvYyh1bnBhY2tpdGVyb2JqZWN0ICpzZWxmKQoreworICAgIFB5X1hERUNSRUYoc2VsZi0+c28pOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPmJ1Zik7CisgICAgUHlPYmplY3RfR0NfRGVsKHNlbGYpOworfQorCitzdGF0aWMgaW50Cit1bnBhY2tpdGVyX3RyYXZlcnNlKHVucGFja2l0ZXJvYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIFB5X1ZJU0lUKHNlbGYtPnNvKTsKKyAgICBQeV9WSVNJVChzZWxmLT5idWYub2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3VucGFja2l0ZXJfbGVuKHVucGFja2l0ZXJvYmplY3QgKnNlbGYpCit7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgaWYgKHNlbGYtPnNvID09IE5VTEwpCisgICAgICAgIGxlbiA9IDA7CisgICAgZWxzZQorICAgICAgICBsZW4gPSAoc2VsZi0+YnVmLmxlbiAtIHNlbGYtPmluZGV4KSAvIHNlbGYtPnNvLT5zX3NpemU7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgdW5wYWNraXRlcl9tZXRob2RzW10gPSB7CisgICAgeyJfX2xlbmd0aF9oaW50X18iLCAoUHlDRnVuY3Rpb24pIHVucGFja2l0ZXJfbGVuLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KK307CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bnBhY2tpdGVyX2l0ZXJuZXh0KHVucGFja2l0ZXJvYmplY3QgKnNlbGYpCit7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBpZiAoc2VsZi0+c28gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHNlbGYtPmluZGV4ID49IHNlbGYtPmJ1Zi5sZW4pIHsKKyAgICAgICAgLyogSXRlcmF0b3IgZXhoYXVzdGVkICovCisgICAgICAgIFB5X0NMRUFSKHNlbGYtPnNvKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+YnVmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGFzc2VydChzZWxmLT5pbmRleCArIHNlbGYtPnNvLT5zX3NpemUgPD0gc2VsZi0+YnVmLmxlbik7CisgICAgcmVzdWx0ID0gc191bnBhY2tfaW50ZXJuYWwoc2VsZi0+c28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKSBzZWxmLT5idWYuYnVmICsgc2VsZi0+aW5kZXgpOworICAgIHNlbGYtPmluZGV4ICs9IHNlbGYtPnNvLT5zX3NpemU7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIFB5VHlwZU9iamVjdCB1bnBhY2tpdGVyX3R5cGUgPSB7CisgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKKyAgICAidW5wYWNrX2l0ZXJhdG9yIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25hbWUgKi8KKyAgICBzaXplb2YodW5wYWNraXRlcm9iamVjdCksICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2ljc2l6ZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KKyAgICAoZGVzdHJ1Y3Rvcil1bnBhY2tpdGVyX2RlYWxsb2MsICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ByaW50ICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zZXRhdHRyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yZXNlcnZlZCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmVwciAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbnVtYmVyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19zZXF1ZW5jZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYXNfbWFwcGluZyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaGFzaCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfY2FsbCAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc3RyICovCisgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfSEFWRV9HQywgICAgLyogdHBfZmxhZ3MgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLworICAgICh0cmF2ZXJzZXByb2MpdW5wYWNraXRlcl90cmF2ZXJzZSwgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBQeU9iamVjdF9TZWxmSXRlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KKyAgICAoaXRlcm5leHRmdW5jKXVucGFja2l0ZXJfaXRlcm5leHQsICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCisgICAgdW5wYWNraXRlcl9tZXRob2RzICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCit9OworCitQeURvY19TVFJWQVIoc19pdGVyX3VucGFja19fZG9jX18sCisiUy5pdGVyX3VucGFjayhidWZmZXIpIC0+IGl0ZXJhdG9yKHYxLCB2MiwgLi4uKVxuXAorXG5cCitSZXR1cm4gYW4gaXRlcmF0b3IgeWllbGRpbmcgdHVwbGVzIHVucGFja2VkIGZyb20gdGhlIGdpdmVuIGJ5dGVzXG5cCitzb3VyY2UsIGxpa2UgYSByZXBlYXRlZCBpbnZvY2F0aW9uIG9mIHVucGFja19mcm9tKCkuICBSZXF1aXJlc1xuXAordGhhdCB0aGUgYnl0ZXMgbGVuZ3RoIGJlIGEgbXVsdGlwbGUgb2YgdGhlIHN0cnVjdCBzaXplLiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorc19pdGVyX3VucGFjayhQeU9iamVjdCAqX3NvLCBQeU9iamVjdCAqaW5wdXQpCit7CisgICAgUHlTdHJ1Y3RPYmplY3QgKnNvID0gKFB5U3RydWN0T2JqZWN0ICopIF9zbzsKKyAgICB1bnBhY2tpdGVyb2JqZWN0ICpzZWxmOworCisgICAgYXNzZXJ0KFB5U3RydWN0X0NoZWNrKF9zbykpOworICAgIGFzc2VydChzby0+c19jb2RlcyAhPSBOVUxMKTsKKworICAgIGlmIChzby0+c19zaXplID09IDApIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFN0cnVjdEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBpdGVyYXRpdmVseSB1bnBhY2sgd2l0aCBhIHN0cnVjdCBvZiBsZW5ndGggMCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzZWxmID0gKHVucGFja2l0ZXJvYmplY3QgKikgUHlUeXBlX0dlbmVyaWNBbGxvYygmdW5wYWNraXRlcl90eXBlLCAwKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoaW5wdXQsICZzZWxmLT5idWYsIFB5QlVGX1NJTVBMRSkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChzZWxmLT5idWYubGVuICUgc28tPnNfc2l6ZSAhPSAwKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChTdHJ1Y3RFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJpdGVyYXRpdmUgdW5wYWNraW5nIHJlcXVpcmVzIGEgYnl0ZXMgbGVuZ3RoICIKKyAgICAgICAgICAgICAgICAgICAgICJtdWx0aXBsZSBvZiAlemQiLAorICAgICAgICAgICAgICAgICAgICAgc28tPnNfc2l6ZSk7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X0lOQ1JFRihzbyk7CisgICAgc2VsZi0+c28gPSBzbzsKKyAgICBzZWxmLT5pbmRleCA9IDA7CisgICAgcmV0dXJuIChQeU9iamVjdCAqKSBzZWxmOworfQorCisKIC8qCiAgKiBHdXRzIG9mIHRoZSBwYWNrIGZ1bmN0aW9uLgogICoKQEAgLTE1NzgsNjIgKzE3MjMsNjcgQEAKICAgICBtZW1zZXQoYnVmLCAnXDAnLCBzb3NlbGYtPnNfc2l6ZSk7CiAgICAgaSA9IG9mZnNldDsKICAgICBmb3IgKGNvZGUgPSBzb3NlbGYtPnNfY29kZXM7IGNvZGUtPmZtdGRlZiAhPSBOVUxMOyBjb2RlKyspIHsKLSAgICAgICAgUHlfc3NpemVfdCBuOwotICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgaSsrKTsKICAgICAgICAgY29uc3QgZm9ybWF0ZGVmICplID0gY29kZS0+Zm10ZGVmOwogICAgICAgICBjaGFyICpyZXMgPSBidWYgKyBjb2RlLT5vZmZzZXQ7Ci0gICAgICAgIGlmIChlLT5mb3JtYXQgPT0gJ3MnKSB7Ci0gICAgICAgICAgICBpbnQgaXNzdHJpbmc7Ci0gICAgICAgICAgICB2b2lkICpwOwotICAgICAgICAgICAgaXNzdHJpbmcgPSBQeUJ5dGVzX0NoZWNrKHYpOwotICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3MnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7Ci0gICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuID4gY29kZS0+c2l6ZSkKLSAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZTsKLSAgICAgICAgICAgIGlmIChuID4gMCkKLSAgICAgICAgICAgICAgICBtZW1jcHkocmVzLCBwLCBuKTsKLSAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7Ci0gICAgICAgICAgICBpbnQgaXNzdHJpbmc7Ci0gICAgICAgICAgICB2b2lkICpwOwotICAgICAgICAgICAgaXNzdHJpbmcgPSBQeUJ5dGVzX0NoZWNrKHYpOwotICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3AnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlc19HRVRfU0laRSh2KTsKLSAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7Ci0gICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuID4gKGNvZGUtPnNpemUgLSAxKSkKLSAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZSAtIDE7Ci0gICAgICAgICAgICBpZiAobiA+IDApCi0gICAgICAgICAgICAgICAgbWVtY3B5KHJlcyArIDEsIHAsIG4pOwotICAgICAgICAgICAgaWYgKG4gPiAyNTUpCi0gICAgICAgICAgICAgICAgbiA9IDI1NTsKLSAgICAgICAgICAgICpyZXMgPSBQeV9TQUZFX0RPV05DQVNUKG4sIFB5X3NzaXplX3QsIHVuc2lnbmVkIGNoYXIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKGUtPnBhY2socmVzLCB2LCBlKSA8IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgIFB5X3NzaXplX3QgaiA9IGNvZGUtPnJlcGVhdDsKKyAgICAgICAgd2hpbGUgKGotLSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIGkrKyk7CisgICAgICAgICAgICBpZiAoZS0+Zm9ybWF0ID09ICdzJykgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbjsKKyAgICAgICAgICAgICAgICBpbnQgaXNzdHJpbmc7CisgICAgICAgICAgICAgICAgdm9pZCAqcDsKKyAgICAgICAgICAgICAgICBpc3N0cmluZyA9IFB5Qnl0ZXNfQ2hlY2sodik7CisgICAgICAgICAgICAgICAgaWYgKCFpc3N0cmluZyAmJiAhUHlCeXRlQXJyYXlfQ2hlY2sodikpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFN0cnVjdEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBmb3IgJ3MnIG11c3QgYmUgYSBieXRlcyBvYmplY3QiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaXNzdHJpbmcpIHsKKyAgICAgICAgICAgICAgICAgICAgbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodik7CisgICAgICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVzX0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVBcnJheV9HRVRfU0laRSh2KTsKKyAgICAgICAgICAgICAgICAgICAgcCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyh2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG4gPiBjb2RlLT5zaXplKQorICAgICAgICAgICAgICAgICAgICBuID0gY29kZS0+c2l6ZTsKKyAgICAgICAgICAgICAgICBpZiAobiA+IDApCisgICAgICAgICAgICAgICAgICAgIG1lbWNweShyZXMsIHAsIG4pOworICAgICAgICAgICAgfSBlbHNlIGlmIChlLT5mb3JtYXQgPT0gJ3AnKSB7CisgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuOworICAgICAgICAgICAgICAgIGludCBpc3N0cmluZzsKKyAgICAgICAgICAgICAgICB2b2lkICpwOworICAgICAgICAgICAgICAgIGlzc3RyaW5nID0gUHlCeXRlc19DaGVjayh2KTsKKyAgICAgICAgICAgICAgICBpZiAoIWlzc3RyaW5nICYmICFQeUJ5dGVBcnJheV9DaGVjayh2KSkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgZm9yICdwJyBtdXN0IGJlIGEgYnl0ZXMgb2JqZWN0Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGlzc3RyaW5nKSB7CisgICAgICAgICAgICAgICAgICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHYpOworICAgICAgICAgICAgICAgICAgICBwID0gUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBuID0gUHlCeXRlQXJyYXlfR0VUX1NJWkUodik7CisgICAgICAgICAgICAgICAgICAgIHAgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuID4gKGNvZGUtPnNpemUgLSAxKSkKKyAgICAgICAgICAgICAgICAgICAgbiA9IGNvZGUtPnNpemUgLSAxOworICAgICAgICAgICAgICAgIGlmIChuID4gMCkKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHJlcyArIDEsIHAsIG4pOworICAgICAgICAgICAgICAgIGlmIChuID4gMjU1KQorICAgICAgICAgICAgICAgICAgICBuID0gMjU1OworICAgICAgICAgICAgICAgICpyZXMgPSBQeV9TQUZFX0RPV05DQVNUKG4sIFB5X3NzaXplX3QsIHVuc2lnbmVkIGNoYXIpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoZS0+cGFjayhyZXMsIHYsIGUpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoU3RydWN0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzICs9IGNvZGUtPnNpemU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE2OTIsOCArMTg0Miw4IEBACiBzX3BhY2tfaW50byhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlTdHJ1Y3RPYmplY3QgKnNvc2VsZjsKLSAgICBjaGFyICpidWZmZXI7Ci0gICAgUHlfc3NpemVfdCBidWZmZXJfbGVuLCBvZmZzZXQ7CisgICAgUHlfYnVmZmVyIGJ1ZmZlcjsKKyAgICBQeV9zc2l6ZV90IG9mZnNldDsKIAogICAgIC8qIFZhbGlkYXRlIGFyZ3VtZW50cy4gICsxIGlzIGZvciB0aGUgZmlyc3QgYXJnIGFzIGJ1ZmZlci4gKi8KICAgICBzb3NlbGYgPSAoUHlTdHJ1Y3RPYmplY3QgKilzZWxmOwpAQCAtMTcxOCwzNCArMTg2OCwzNyBAQAogICAgIH0KIAogICAgIC8qIEV4dHJhY3QgYSB3cml0YWJsZSBtZW1vcnkgYnVmZmVyIGZyb20gdGhlIGZpcnN0IGFyZ3VtZW50ICovCi0gICAgaWYgKCBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyKFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCoqKSZidWZmZXIsICZidWZmZXJfbGVuKSA9PSAtMSApIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlKFB5VHVwbGVfR0VUX0lURU0oYXJncywgMCksICJ3KiIsICZidWZmZXIpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgYXNzZXJ0KCBidWZmZXJfbGVuID49IDAgKTsKKyAgICBhc3NlcnQoYnVmZmVyLmxlbiA+PSAwKTsKIAogICAgIC8qIEV4dHJhY3QgdGhlIG9mZnNldCBmcm9tIHRoZSBmaXJzdCBhcmd1bWVudCAqLwogICAgIG9mZnNldCA9IFB5TnVtYmVyX0FzU3NpemVfdChQeVR1cGxlX0dFVF9JVEVNKGFyZ3MsIDEpLCBQeUV4Y19JbmRleEVycm9yKTsKLSAgICBpZiAob2Zmc2V0ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgaWYgKG9mZnNldCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIC8qIFN1cHBvcnQgbmVnYXRpdmUgb2Zmc2V0cy4gKi8KICAgICBpZiAob2Zmc2V0IDwgMCkKLSAgICAgICAgb2Zmc2V0ICs9IGJ1ZmZlcl9sZW47CisgICAgICAgIG9mZnNldCArPSBidWZmZXIubGVuOwogCiAgICAgLyogQ2hlY2sgYm91bmRhcmllcyAqLwotICAgIGlmIChvZmZzZXQgPCAwIHx8IChidWZmZXJfbGVuIC0gb2Zmc2V0KSA8IHNvc2VsZi0+c19zaXplKSB7CisgICAgaWYgKG9mZnNldCA8IDAgfHwgKGJ1ZmZlci5sZW4gLSBvZmZzZXQpIDwgc29zZWxmLT5zX3NpemUpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFN0cnVjdEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgInBhY2tfaW50byByZXF1aXJlcyBhIGJ1ZmZlciBvZiBhdCBsZWFzdCAlemQgYnl0ZXMiLAogICAgICAgICAgICAgICAgICAgICAgc29zZWxmLT5zX3NpemUpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZidWZmZXIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBDYWxsIHRoZSBndXRzICovCi0gICAgaWYgKCBzX3BhY2tfaW50ZXJuYWwoc29zZWxmLCBhcmdzLCAyLCBidWZmZXIgKyBvZmZzZXQpICE9IDAgKSB7CisgICAgaWYgKHNfcGFja19pbnRlcm5hbChzb3NlbGYsIGFyZ3MsIDIsIChjaGFyKilidWZmZXIuYnVmICsgb2Zmc2V0KSAhPSAwKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcik7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTE3NjksMTQgKzE5MjIsMTggQEAKIHNfc2l6ZW9mKFB5U3RydWN0T2JqZWN0ICpzZWxmLCB2b2lkICp1bnVzZWQpCiB7CiAgICAgUHlfc3NpemVfdCBzaXplOworICAgIGZvcm1hdGNvZGUgKmNvZGU7CiAKLSAgICBzaXplID0gc2l6ZW9mKFB5U3RydWN0T2JqZWN0KSArIHNpemVvZihmb3JtYXRjb2RlKSAqIChzZWxmLT5zX2xlbiArIDEpOworICAgIHNpemUgPSBzaXplb2YoUHlTdHJ1Y3RPYmplY3QpICsgc2l6ZW9mKGZvcm1hdGNvZGUpOworICAgIGZvciAoY29kZSA9IHNlbGYtPnNfY29kZXM7IGNvZGUtPmZtdGRlZiAhPSBOVUxMOyBjb2RlKyspCisgICAgICAgIHNpemUgKz0gc2l6ZW9mKGZvcm1hdGNvZGUpOwogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3Qoc2l6ZSk7CiB9CiAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zICovCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNZXRob2REZWYgc19tZXRob2RzW10gPSB7CisgICAgeyJpdGVyX3VucGFjayIsICAgICBzX2l0ZXJfdW5wYWNrLCAgTUVUSF9PLCBzX2l0ZXJfdW5wYWNrX19kb2NfX30sCiAgICAgeyJwYWNrIiwgICAgICAgICAgICBzX3BhY2ssICAgICAgICAgTUVUSF9WQVJBUkdTLCBzX3BhY2tfX2RvY19ffSwKICAgICB7InBhY2tfaW50byIsICAgICAgIHNfcGFja19pbnRvLCAgICBNRVRIX1ZBUkFSR1MsIHNfcGFja19pbnRvX19kb2NfX30sCiAgICAgeyJ1bnBhY2siLCAgICAgICAgICBzX3VucGFjaywgICAgICAgTUVUSF9PLCBzX3VucGFja19fZG9jX199LApAQCAtMjAyNiw5ICsyMTgzLDM0IEBACiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorUHlEb2NfU1RSVkFSKGl0ZXJfdW5wYWNrX2RvYywKKyJpdGVyX3VucGFjayhmbXQsIGJ1ZmZlcikgLT4gaXRlcmF0b3IodjEsIHYyLCAuLi4pXG5cCitcblwKK1JldHVybiBhbiBpdGVyYXRvciB5aWVsZGluZyB0dXBsZXMgdW5wYWNrZWQgZnJvbSB0aGUgZ2l2ZW4gYnl0ZXNcblwKK3NvdXJjZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBzdHJpbmcsIGxpa2UgYSByZXBlYXRlZCBpbnZvY2F0aW9uIG9mXG5cCit1bnBhY2tfZnJvbSgpLiAgUmVxdWlyZXMgdGhhdCB0aGUgYnl0ZXMgbGVuZ3RoIGJlIGEgbXVsdGlwbGUgb2YgdGhlXG5cCitmb3JtYXQgc3RydWN0IHNpemUuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitpdGVyX3VucGFjayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnNfb2JqZWN0LCAqZm10LCAqaW5wdXQsICpyZXN1bHQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9POml0ZXJfdW5wYWNrIiwgJmZtdCwgJmlucHV0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzX29iamVjdCA9IGNhY2hlX3N0cnVjdChmbXQpOworICAgIGlmIChzX29iamVjdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXN1bHQgPSBzX2l0ZXJfdW5wYWNrKHNfb2JqZWN0LCBpbnB1dCk7CisgICAgUHlfREVDUkVGKHNfb2JqZWN0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIG1vZHVsZV9mdW5jdGlvbnNbXSA9IHsKICAgICB7Il9jbGVhcmNhY2hlIiwgICAgIChQeUNGdW5jdGlvbiljbGVhcmNhY2hlLCAgICAgICAgTUVUSF9OT0FSR1MsICAgIGNsZWFyY2FjaGVfZG9jfSwKICAgICB7ImNhbGNzaXplIiwgICAgICAgIGNhbGNzaXplLCAgICAgICBNRVRIX08sIGNhbGNzaXplX2RvY30sCisgICAgeyJpdGVyX3VucGFjayIsICAgICBpdGVyX3VucGFjaywgICAgTUVUSF9WQVJBUkdTLCAgIGl0ZXJfdW5wYWNrX2RvY30sCiAgICAgeyJwYWNrIiwgICAgICAgICAgICBwYWNrLCAgICAgICAgICAgTUVUSF9WQVJBUkdTLCAgIHBhY2tfZG9jfSwKICAgICB7InBhY2tfaW50byIsICAgICAgIHBhY2tfaW50bywgICAgICBNRVRIX1ZBUkFSR1MsICAgcGFja19pbnRvX2RvY30sCiAgICAgeyJ1bnBhY2siLCAgICAgICAgICB1bnBhY2ssIE1FVEhfVkFSQVJHUywgICB1bnBhY2tfZG9jfSwKQEAgLTIwOTgsMTMgKzIyODAsMTMgQEAKIAogICAgIC8qIENoZWNrIGVuZGlhbiBhbmQgc3dhcCBpbiBmYXN0ZXIgZnVuY3Rpb25zICovCiAgICAgewotICAgICAgICBpbnQgb25lID0gMTsKICAgICAgICAgZm9ybWF0ZGVmICpuYXRpdmUgPSBuYXRpdmVfdGFibGU7CiAgICAgICAgIGZvcm1hdGRlZiAqb3RoZXIsICpwdHI7Ci0gICAgICAgIGlmICgoaW50KSoodW5zaWduZWQgY2hhciopJm9uZSkKLSAgICAgICAgICAgIG90aGVyID0gbGlsZW5kaWFuX3RhYmxlOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvdGhlciA9IGJpZ2VuZGlhbl90YWJsZTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgICAgIG90aGVyID0gbGlsZW5kaWFuX3RhYmxlOworI2Vsc2UKKyAgICAgICAgb3RoZXIgPSBiaWdlbmRpYW5fdGFibGU7CisjZW5kaWYKICAgICAgICAgLyogU2NhbiB0aHJvdWdoIHRoZSBuYXRpdmUgdGFibGUsIGZpbmQgYSBtYXRjaGluZwogICAgICAgICAgICBlbnRyeSBpbiB0aGUgZW5kaWFuIHRhYmxlIGFuZCBzd2FwIGluIHRoZQogICAgICAgICAgICBuYXRpdmUgaW1wbGVtZW50YXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0YnVmZmVyLmMgYi9Nb2R1bGVzL190ZXN0YnVmZmVyLmMKaW5kZXggMzE2NjY2ZS4uMTc2ZGY3YyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCisrKyBiL01vZHVsZXMvX3Rlc3RidWZmZXIuYwpAQCAtODUwLDcgKzg1MCw3IEBACiAgICAgUHlfc3NpemVfdCAqZGVzdDsKICAgICBQeV9zc2l6ZV90IHgsIGk7CiAKLSAgICBkZXN0ID0gUHlNZW1fTWFsbG9jKGxlbiAqIChzaXplb2YgKmRlc3QpKTsKKyAgICBkZXN0ID0gUHlNZW1fTmV3KFB5X3NzaXplX3QsIGxlbik7CiAgICAgaWYgKGRlc3QgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE4MTUsNyArMTgxNSw3IEBACiAgICAgICAgIGlmIChpbml0X3NsaWNlKGJhc2UsIGtleSwgMCkgPCAwKQogICAgICAgICAgICAgZ290byBlcnJfb2NjdXJyZWQ7CiAgICAgfQotICAgIGVsc2UgaWYgUHlUdXBsZV9DaGVjayhrZXkpIHsKKyAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKGtleSkpIHsKICAgICAgICAgLyogbXVsdGktZGltZW5zaW9uYWwgc2xpY2UgKi8KICAgICAgICAgUHlPYmplY3QgKnR1cGxlID0ga2V5OwogICAgICAgICBQeV9zc2l6ZV90IGksIG47CkBAIC0yODM3LDM2ICsyODM3LDM2IEBACiAgICAgaWYgKHNpbXBsZV9mb3JtYXQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkRfTUFYX05ESU0iLCBORF9NQVhfTkRJTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1ZBUkVYUE9SVCIsIE5EX1ZBUkVYUE9SVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1dSSVRBQkxFIiwgTkRfV1JJVEFCTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9GT1JUUkFOIiwgTkRfRk9SVFJBTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1NDQUxBUiIsIE5EX1NDQUxBUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1BJTCIsIE5EX1BJTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX0dFVEJVRl9GQUlMIiwgTkRfR0VUQlVGX0ZBSUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORF9HRVRCVUZfVU5ERUZJTkVEIiwgTkRfR0VUQlVGX1VOREVGSU5FRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5EX1JFRElSRUNUIiwgTkRfUkVESVJFQ1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX01BWF9ORElNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9WQVJFWFBPUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1dSSVRBQkxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9GT1JUUkFOKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORF9TQ0FMQVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1BJTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkRfR0VUQlVGX0ZBSUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX0dFVEJVRl9VTkRFRklORUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5EX1JFRElSRUNUKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9TSU1QTEUiLCBQeUJVRl9TSU1QTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9XUklUQUJMRSIsIFB5QlVGX1dSSVRBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfRk9STUFUIiwgUHlCVUZfRk9STUFUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfTkQiLCBQeUJVRl9ORCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NUUklERVMiLCBQeUJVRl9TVFJJREVTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfSU5ESVJFQ1QiLCBQeUJVRl9JTkRJUkVDVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0NfQ09OVElHVU9VUyIsIFB5QlVGX0NfQ09OVElHVU9VUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZfQ09OVElHVU9VUyIsIFB5QlVGX0ZfQ09OVElHVU9VUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0FOWV9DT05USUdVT1VTIiwgUHlCVUZfQU5ZX0NPTlRJR1VPVVMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9GVUxMIiwgUHlCVUZfRlVMTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX0ZVTExfUk8iLCBQeUJVRl9GVUxMX1JPKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfUkVDT1JEUyIsIFB5QlVGX1JFQ09SRFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9SRUNPUkRTX1JPIiwgUHlCVUZfUkVDT1JEU19STyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1NUUklERUQiLCBQeUJVRl9TVFJJREVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlCVUZfU1RSSURFRF9STyIsIFB5QlVGX1NUUklERURfUk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9DT05USUciLCBQeUJVRl9DT05USUcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9DT05USUdfUk8iLCBQeUJVRl9DT05USUdfUk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1NJTVBMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfV1JJVEFCTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0ZPUk1BVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfTkQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1NUUklERVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0lORElSRUNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUJVRl9DX0NPTlRJR1VPVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0ZfQ09OVElHVU9VUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQU5ZX0NPTlRJR1VPVVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0ZVTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0ZVTExfUk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1JFQ09SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1JFQ09SRFNfUk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1NUUklERUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1NUUklERURfUk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX0NPTlRJRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlCVUZfQ09OVElHX1JPKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQeUJVRl9SRUFEIiwgUHlCVUZfUkVBRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlB5QlVGX1dSSVRFIiwgUHlCVUZfV1JJVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1JFQUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFB5QlVGX1dSSVRFKTsKIAogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKaW5kZXggOTFmMjkxYS4uOGViZTk3MCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYworKysgYi9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCkBAIC0xMSw2ICsxMSw3IEBACiAjaW5jbHVkZSA8ZmxvYXQuaD4KICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJkYXRldGltZS5oIgorI2luY2x1ZGUgIm1hcnNoYWwuaCIKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAjaW5jbHVkZSAicHl0aHJlYWQuaCIKQEAgLTY1LDYgKzY2LDY5IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKK3Rlc3Rfc2l6ZW9mX2NfdHlwZXMoUHlPYmplY3QgKnNlbGYpCit7CisjZGVmaW5lIENIRUNLX1NJWkVPRihUWVBFLCBFWFBFQ1RFRCkgICAgICAgICBcCisgICAgaWYgKEVYUEVDVEVEICE9IHNpemVvZihUWVBFKSkgIHsgICAgICAgICBcCisgICAgICAgIFB5RXJyX0Zvcm1hdChUZXN0RXJyb3IsICAgICAgICAgICAgICBcCisgICAgICAgICAgICAic2l6ZW9mKCVzKSA9ICV1IGluc3RlYWQgb2YgJXUiLCBcCisgICAgICAgICAgICAjVFlQRSwgc2l6ZW9mKFRZUEUpLCBFWFBFQ1RFRCk7ICBcCisgICAgICAgIHJldHVybiAoUHlPYmplY3QqKU5VTEw7ICAgICAgICAgICAgICBcCisgICAgfQorI2RlZmluZSBJU19TSUdORUQoVFlQRSkgKCgoVFlQRSktMSkgPCAoVFlQRSkwKQorI2RlZmluZSBDSEVDS19TSUdOTkVTUyhUWVBFLCBTSUdORUQpICAgICAgICAgXAorICAgIGlmIChJU19TSUdORUQoVFlQRSkgIT0gU0lHTkVEKSB7ICAgICAgICAgXAorICAgICAgICBQeUVycl9Gb3JtYXQoVGVzdEVycm9yLCAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIiVzIHNpZ25uZXNzIGlzLCBpbnN0ZWFkIG9mICVpIiwgIFwKKyAgICAgICAgICAgICNUWVBFLCBJU19TSUdORUQoVFlQRSksIFNJR05FRCk7IFwKKyAgICAgICAgcmV0dXJuIChQeU9iamVjdCopTlVMTDsgICAgICAgICAgICAgIFwKKyAgICB9CisKKyAgICAvKiBpbnRlZ2VyIHR5cGVzICovCisgICAgQ0hFQ0tfU0laRU9GKFB5X1VDUzEsIDEpOworICAgIENIRUNLX1NJWkVPRihQeV9VQ1MyLCAyKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfVUNTNCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfVUNTMSwgMCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfVUNTMiwgMCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfVUNTNCwgMCk7CisjaWZkZWYgSEFWRV9JTlQzMl9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX0lOVDMyX1QsIDQpOworICAgIENIRUNLX1NJR05ORVNTKFBZX0lOVDMyX1QsIDEpOworI2VuZGlmCisjaWZkZWYgSEFWRV9VSU5UMzJfVAorICAgIENIRUNLX1NJWkVPRihQWV9VSU5UMzJfVCwgNCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfVUlOVDMyX1QsIDApOworI2VuZGlmCisjaWZkZWYgSEFWRV9JTlQ2NF9UCisgICAgQ0hFQ0tfU0laRU9GKFBZX0lOVDY0X1QsIDgpOworICAgIENIRUNLX1NJR05ORVNTKFBZX0lOVDY0X1QsIDEpOworI2VuZGlmCisjaWZkZWYgSEFWRV9VSU5UNjRfVAorICAgIENIRUNLX1NJWkVPRihQWV9VSU5UNjRfVCwgOCk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUFlfVUlOVDY0X1QsIDApOworI2VuZGlmCisKKyAgICAvKiBwb2ludGVyL3NpemUgdHlwZXMgKi8KKyAgICBDSEVDS19TSVpFT0Yoc2l6ZV90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1Moc2l6ZV90LCAwKTsKKyAgICBDSEVDS19TSVpFT0YoUHlfc3NpemVfdCwgc2l6ZW9mKHZvaWQgKikpOworICAgIENIRUNLX1NJR05ORVNTKFB5X3NzaXplX3QsIDEpOworCisgICAgQ0hFQ0tfU0laRU9GKFB5X3VpbnRwdHJfdCwgc2l6ZW9mKHZvaWQgKikpOworICAgIENIRUNLX1NJR05ORVNTKFB5X3VpbnRwdHJfdCwgMCk7CisgICAgQ0hFQ0tfU0laRU9GKFB5X2ludHB0cl90LCBzaXplb2Yodm9pZCAqKSk7CisgICAgQ0hFQ0tfU0lHTk5FU1MoUHlfaW50cHRyX3QsIDEpOworCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJldHVybiBQeV9Ob25lOworCisjdW5kZWYgSVNfU0lHTkVECisjdW5kZWYgQ0hFQ0tfU0lHTkVTUworI3VuZGVmIENIRUNLX1NJWkVPRgorfQorCisKK3N0YXRpYyBQeU9iamVjdCoKIHRlc3RfbGlzdF9hcGkoUHlPYmplY3QgKnNlbGYpCiB7CiAgICAgUHlPYmplY3QqIGxpc3Q7CkBAIC0xNDI0LDYgKzE0ODgsMjAgQEAKICAgICBlbHNlCiAgICAgICAgIHJldHVybiByYWlzZVRlc3RFcnJvcigidGVzdF93aWRlY2hhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHlVbmljb2RlX0Zyb21Vbmljb2RlKExcIlxcVTAwMTEwMDAwXCIsIDEpIGRpZG4ndCBmYWlsIik7CisKKyAgICB3aWRlID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIDEpOworICAgIGlmICh3aWRlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5VW5pY29kZV9BU19VTklDT0RFKHdpZGUpWzBdID0gaW52YWxpZFswXTsKKyAgICBpZiAoX1B5VW5pY29kZV9SZWFkeSh3aWRlKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHdpZGUpOworICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlfREVDUkVGKHdpZGUpOworICAgICAgICByZXR1cm4gcmFpc2VUZXN0RXJyb3IoInRlc3Rfd2lkZWNoYXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5VW5pY29kZV9SZWFkeSgpIGRpZG4ndCBmYWlsIik7CisgICAgfQogI2VuZGlmCiAKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTE0MzgsNyArMTUxNiw3IEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlVuIiwgJnVuaWNvZGUsICZidWZsZW4pKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBidWZmZXIgPSBQeU1lbV9NYWxsb2MoYnVmbGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBidWZmZXIgPSBQeU1lbV9OZXcod2NoYXJfdCwgYnVmbGVuKTsKICAgICBpZiAoYnVmZmVyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogCkBAIC0xNzA2LDYgKzE3ODQsMTggQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK3NldF9lcnJubyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IG5ld19lcnJubzsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpzZXRfZXJybm8iLCAmbmV3X2Vycm5vKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlcnJubyA9IG5ld19lcnJubzsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIHRlc3Rfc2V0X2V4Y19pbmZvKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeU9iamVjdCAqb3JpZ19leGM7CkBAIC0yMzkwLDYgKzI0ODAsNTYgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5TWVtb3J5Vmlld19Gcm9tQnVmZmVyKCZpbmZvKTsKIH0KKyAKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2Zyb21fY29udGlndW91cyhQeU9iamVjdCogc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK3sKKyAgICBpbnQgZGF0YVs5XSA9IHstMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMX07CisgICAgaW50IGluaXRbNV0gPSB7MCwgMSwgMiwgMywgNH07CisgICAgUHlfc3NpemVfdCBpdGVtc2l6ZSA9IHNpemVvZihpbnQpOworICAgIFB5X3NzaXplX3Qgc2hhcGUgPSA1OworICAgIFB5X3NzaXplX3Qgc3RyaWRlcyA9IDIgKiBpdGVtc2l6ZTsKKyAgICBQeV9idWZmZXIgdmlldyA9IHsKKyAgICAgICAgZGF0YSwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgNSAqIGl0ZW1zaXplLAorICAgICAgICBpdGVtc2l6ZSwKKyAgICAgICAgMSwKKyAgICAgICAgMSwKKyAgICAgICAgTlVMTCwKKyAgICAgICAgJnNoYXBlLAorICAgICAgICAmc3RyaWRlcywKKyAgICAgICAgTlVMTCwKKyAgICAgICAgTlVMTAorICAgIH07CisgICAgaW50ICpwdHI7CisgICAgaW50IGk7CisKKyAgICBQeUJ1ZmZlcl9Gcm9tQ29udGlndW91cygmdmlldywgaW5pdCwgdmlldy5sZW4sICdDJyk7CisgICAgcHRyID0gdmlldy5idWY7CisgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICBpZiAocHRyWzIqaV0gIT0gaSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRlc3RFcnJvciwKKyAgICAgICAgICAgICAgICAidGVzdF9mcm9tX2NvbnRpZ3VvdXM6IGluY29ycmVjdCByZXN1bHQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgdmlldy5idWYgPSAmZGF0YVs4XTsKKyAgICB2aWV3LnN0cmlkZXNbMF0gPSAtMiAqIGl0ZW1zaXplOworCisgICAgUHlCdWZmZXJfRnJvbUNvbnRpZ3VvdXMoJnZpZXcsIGluaXQsIHZpZXcubGVuLCAnQycpOworICAgIHB0ciA9IHZpZXcuYnVmOworICAgIGZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKyAgICAgICAgaWYgKCoocHRyLTIqaSkgIT0gaSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRlc3RFcnJvciwKKyAgICAgICAgICAgICAgICAidGVzdF9mcm9tX2NvbnRpZ3VvdXM6IGluY29ycmVjdCByZXN1bHQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CiAKIC8qIFRlc3QgdGhhdCB0aGUgZmF0YWwgZXJyb3IgZnJvbSBub3QgaGF2aW5nIGEgY3VycmVudCB0aHJlYWQgZG9lc24ndAogICAgY2F1c2UgYW4gaW5maW5pdGUgbG9vcC4gIFJ1biB2aWEgTGliL3Rlc3QvdGVzdF9jYXBpLnB5ICovCkBAIC0yNDM5LDE0ICsyNTc5LDI3IEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhyKTsKIH0KIAorc3RhdGljIGludAorY2hlY2tfdGltZV9yb3VuZGluZyhpbnQgcm91bmQpCit7CisgICAgaWYgKHJvdW5kICE9IF9QeVRpbWVfUk9VTkRfRE9XTiAmJiByb3VuZCAhPSBfUHlUaW1lX1JPVU5EX1VQKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiaW52YWxpZCByb3VuZGluZyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgUHlPYmplY3QgKgogdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWVfdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlPYmplY3QgKm9iajsKICAgICB0aW1lX3Qgc2VjOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTzpweXRpbWVfb2JqZWN0X3RvX3RpbWVfdCIsICZvYmopKQorICAgIGludCByb3VuZDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pOnB5dGltZV9vYmplY3RfdG9fdGltZV90IiwgJm9iaiwgJnJvdW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lX3Qob2JqLCAmc2VjKSA9PSAtMSkKKyAgICBpZiAoY2hlY2tfdGltZV9yb3VuZGluZyhyb3VuZCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVfdChvYmosICZzZWMsIHJvdW5kKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbVRpbWVfdChzZWMpOwogfQpAQCAtMjQ1Nyw5ICsyNjEwLDEyIEBACiAgICAgUHlPYmplY3QgKm9iajsKICAgICB0aW1lX3Qgc2VjOwogICAgIGxvbmcgdXNlYzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86cHl0aW1lX29iamVjdF90b190aW1ldmFsIiwgJm9iaikpCisgICAgaW50IHJvdW5kOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT2k6cHl0aW1lX29iamVjdF90b190aW1ldmFsIiwgJm9iaiwgJnJvdW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1ldmFsKG9iaiwgJnNlYywgJnVzZWMpID09IC0xKQorICAgIGlmIChjaGVja190aW1lX3JvdW5kaW5nKHJvdW5kKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXZhbChvYmosICZzZWMsICZ1c2VjLCByb3VuZCkgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJObCIsIF9QeUxvbmdfRnJvbVRpbWVfdChzZWMpLCB1c2VjKTsKIH0KQEAgLTI0NzAsMTMgKzI2MjYsMzU0IEBACiAgICAgUHlPYmplY3QgKm9iajsKICAgICB0aW1lX3Qgc2VjOwogICAgIGxvbmcgbnNlYzsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86cHl0aW1lX29iamVjdF90b190aW1lc3BlYyIsICZvYmopKQorICAgIGludCByb3VuZDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9pOnB5dGltZV9vYmplY3RfdG9fdGltZXNwZWMiLCAmb2JqLCAmcm91bmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKG9iaiwgJnNlYywgJm5zZWMpID09IC0xKQorICAgIGlmIChjaGVja190aW1lX3JvdW5kaW5nKHJvdW5kKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWMob2JqLCAmc2VjLCAmbnNlYywgcm91bmQpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmwiLCBfUHlMb25nX0Zyb21UaW1lX3Qoc2VjKSwgbnNlYyk7CiB9CiAKK3N0YXRpYyB2b2lkCitzbG90X3RwX2RlbChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBfUHlfSURFTlRJRklFUihfX3RwX2RlbF9fKTsKKyAgICBQeU9iamVjdCAqZGVsLCAqcmVzOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICAvKiBUZW1wb3JhcmlseSByZXN1cnJlY3QgdGhlIG9iamVjdC4gKi8KKyAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID09IDApOworICAgIHNlbGYtPm9iX3JlZmNudCA9IDE7CisKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCisgICAgLyogRXhlY3V0ZSBfX2RlbF9fIG1ldGhvZCwgaWYgYW55LiAqLworICAgIGRlbCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKHNlbGYsICZQeUlkX19fdHBfZGVsX18pOworICAgIGlmIChkZWwgIT0gTlVMTCkgeworICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChkZWwsIE5VTEwpOworICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZGVsKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIFB5X0RFQ1JFRihkZWwpOworICAgIH0KKworICAgIC8qIFJlc3RvcmUgdGhlIHNhdmVkIGV4Y2VwdGlvbi4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworCisgICAgLyogVW5kbyB0aGUgdGVtcG9yYXJ5IHJlc3VycmVjdGlvbjsgY2FuJ3QgdXNlIERFQ1JFRiBoZXJlLCBpdCB3b3VsZAorICAgICAqIGNhdXNlIGEgcmVjdXJzaXZlIGNhbGwuCisgICAgICovCisgICAgYXNzZXJ0KHNlbGYtPm9iX3JlZmNudCA+IDApOworICAgIGlmICgtLXNlbGYtPm9iX3JlZmNudCA9PSAwKQorICAgICAgICByZXR1cm47ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCisKKyAgICAvKiBfX2RlbF9fIHJlc3VycmVjdGVkIGl0ISAgTWFrZSBpdCBsb29rIGxpa2UgdGhlIG9yaWdpbmFsIFB5X0RFQ1JFRgorICAgICAqIG5ldmVyIGhhcHBlbmVkLgorICAgICAqLworICAgIHsKKyAgICAgICAgUHlfc3NpemVfdCByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7CisgICAgICAgIF9QeV9OZXdSZWZlcmVuY2Uoc2VsZik7CisgICAgICAgIHNlbGYtPm9iX3JlZmNudCA9IHJlZmNudDsKKyAgICB9CisgICAgYXNzZXJ0KCFQeVR5cGVfSVNfR0MoUHlfVFlQRShzZWxmKSkgfHwKKyAgICAgICAgICAgX1B5X0FTX0dDKHNlbGYpLT5nYy5nY19yZWZzICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KKyAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KKyAgICBfUHlfREVDX1JFRlRPVEFMOworICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0CisgICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCisgICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCisgICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCisgICAgICogdW5kb25lLgorICAgICAqLworI2lmZGVmIENPVU5UX0FMTE9DUworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfZnJlZXM7CisgICAgLS1QeV9UWVBFKHNlbGYpLT50cF9hbGxvY3M7CisjZW5kaWYKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3dpdGhfdHBfZGVsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5VHlwZU9iamVjdCAqdHA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk86d2l0aF90cF9kZWwiLCAmb2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgdHAgPSAoUHlUeXBlT2JqZWN0ICopIG9iajsKKyAgICBpZiAoIVB5VHlwZV9DaGVjayhvYmopIHx8ICFQeVR5cGVfSGFzRmVhdHVyZSh0cCwgUHlfVFBGTEFHU19IRUFQVFlQRSkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJoZWFwIHR5cGUgZXhwZWN0ZWQsIGdvdCAlUiIsIG9iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0cC0+dHBfZGVsID0gc2xvdF90cF9kZWw7CisgICAgUHlfSU5DUkVGKG9iaik7CisgICAgcmV0dXJuIG9iajsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK190ZXN0X2luY3JlZihQeU9iamVjdCAqb2IpCit7CisgICAgUHlfSU5DUkVGKG9iKTsKKyAgICByZXR1cm4gb2I7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3hpbmNyZWZfZG9lc250X2xlYWsoUHlPYmplY3QgKm9iKQoreworICAgIFB5T2JqZWN0ICpvYmogPSBQeUxvbmdfRnJvbUxvbmcoMCk7CisgICAgUHlfWElOQ1JFRihfdGVzdF9pbmNyZWYob2JqKSk7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfREVDUkVGKG9iaik7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2luY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlPYmplY3QgKm9iaiA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICBQeV9JTkNSRUYoX3Rlc3RfaW5jcmVmKG9iaikpOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X0RFQ1JFRihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF94ZGVjcmVmX2RvZXNudF9sZWFrKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeV9YREVDUkVGKFB5TG9uZ19Gcm9tTG9uZygwKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2RlY3JlZl9kb2VzbnRfbGVhayhQeU9iamVjdCAqb2IpCit7CisgICAgUHlfREVDUkVGKFB5TG9uZ19Gcm9tTG9uZygwKSk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X2luY3JlZl9kZWNyZWZfQVBJKFB5T2JqZWN0ICpvYikKK3sKKyAgICBQeU9iamVjdCAqb2JqID0gUHlMb25nX0Zyb21Mb25nKDApOworICAgIFB5X0luY1JlZihvYmopOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X0RlY1JlZihvYmopOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW1lbV9hbGxvYzAoUHlPYmplY3QgKnNlbGYpCit7CisgICAgdm9pZCAqcHRyOworCisgICAgcHRyID0gUHlNZW1fTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlNZW1fTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlNZW1fRnJlZShwdHIpOworCisgICAgcHRyID0gUHlPYmplY3RfTWFsbG9jKDApOworICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCAiUHlPYmplY3RfTWFsbG9jKDApIHJldHVybnMgTlVMTCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlPYmplY3RfRnJlZShwdHIpOworCisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKworICAgIHNpemVfdCBtYWxsb2Nfc2l6ZTsKKyAgICB2b2lkICpyZWFsbG9jX3B0cjsKKyAgICBzaXplX3QgcmVhbGxvY19uZXdfc2l6ZTsKKyAgICB2b2lkICpmcmVlX3B0cjsKK30gYWxsb2NfaG9va190OworCitzdGF0aWMgdm9pZCogaG9va19tYWxsb2MgKHZvaWQqIGN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5tYWxsb2Nfc2l6ZSA9IHNpemU7CisgICAgcmV0dXJuIGhvb2stPmFsbG9jLm1hbGxvYyhob29rLT5hbGxvYy5jdHgsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCogaG9va19yZWFsbG9jICh2b2lkKiBjdHgsIHZvaWQqIHB0ciwgc2l6ZV90IG5ld19zaXplKQoreworICAgIGFsbG9jX2hvb2tfdCAqaG9vayA9IChhbGxvY19ob29rX3QgKiljdHg7CisgICAgaG9vay0+cmVhbGxvY19wdHIgPSBwdHI7CisgICAgaG9vay0+cmVhbGxvY19uZXdfc2l6ZSA9IG5ld19zaXplOworICAgIHJldHVybiBob29rLT5hbGxvYy5yZWFsbG9jKGhvb2stPmFsbG9jLmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGhvb2tfZnJlZSAodm9pZCAqY3R4LCB2b2lkICpwdHIpCit7CisgICAgYWxsb2NfaG9va190ICpob29rID0gKGFsbG9jX2hvb2tfdCAqKWN0eDsKKyAgICBob29rLT5mcmVlX3B0ciA9IHB0cjsKKyAgICBob29rLT5hbGxvYy5mcmVlKGhvb2stPmFsbG9jLmN0eCwgcHRyKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3Rfc2V0YWxsb2NhdG9ycyhQeU1lbUFsbG9jYXRvckRvbWFpbiBkb21haW4pCit7CisgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqZXJyb3JfbXNnOworICAgIGFsbG9jX2hvb2tfdCBob29rOworICAgIFB5TWVtQWxsb2NhdG9yIGFsbG9jOworICAgIHNpemVfdCBzaXplLCBzaXplMjsKKyAgICB2b2lkICpwdHIsICpwdHIyOworCisgICAgaG9vay5tYWxsb2Nfc2l6ZSA9IDA7CisgICAgaG9vay5yZWFsbG9jX3B0ciA9IE5VTEw7CisgICAgaG9vay5yZWFsbG9jX25ld19zaXplID0gMDsKKyAgICBob29rLmZyZWVfcHRyID0gTlVMTDsKKworICAgIGFsbG9jLmN0eCA9ICZob29rOworICAgIGFsbG9jLm1hbGxvYyA9ICZob29rX21hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gJmhvb2tfcmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gJmhvb2tfZnJlZTsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoZG9tYWluLCAmaG9vay5hbGxvYyk7CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmFsbG9jKTsKKworICAgIHNpemUgPSA0MjsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0ciA9IFB5TWVtX1Jhd01hbGxvYyhzaXplKTsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fTUVNOiBwdHIgPSBQeU1lbV9NYWxsb2Moc2l6ZSk7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogcHRyID0gUHlPYmplY3RfTWFsbG9jKHNpemUpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIgPSBOVUxMOyBicmVhazsKKyAgICB9CisKKyAgICBpZiAocHRyID09IE5VTEwpIHsKKyAgICAgICAgZXJyb3JfbXNnID0gIm1hbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2subWFsbG9jX3NpemUgIT0gc2l6ZSkgeworICAgICAgICBlcnJvcl9tc2cgPSAibWFsbG9jIGludmFsaWQgc2l6ZSI7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzaXplMiA9IDIwMDsKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6IHB0cjIgPSBQeU1lbV9SYXdSZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IHB0cjIgPSBQeU1lbV9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9PQko6IHB0cjIgPSBQeU9iamVjdF9SZWFsbG9jKHB0ciwgc2l6ZTIpOyBicmVhazsKKyAgICBkZWZhdWx0OiBwdHIyID0gTlVMTDsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHB0cjIgPT0gTlVMTCkgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBmYWlsZWQiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgaWYgKGhvb2sucmVhbGxvY19wdHIgIT0gcHRyCisgICAgICAgIHx8IGhvb2sucmVhbGxvY19uZXdfc2l6ZSAhPSBzaXplMikgeworICAgICAgICBlcnJvcl9tc2cgPSAicmVhbGxvYyBpbnZhbGlkIHBhcmFtZXRlcnMiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgc3dpdGNoKGRvbWFpbikKKyAgICB7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fUkFXOiBQeU1lbV9SYXdGcmVlKHB0cjIpOyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06IFB5TWVtX0ZyZWUocHRyMik7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogUHlPYmplY3RfRnJlZShwdHIyKTsgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGhvb2suZnJlZV9wdHIgIT0gcHRyMikgeworICAgICAgICBlcnJvcl9tc2cgPSAiZnJlZSBpbnZhbGlkIHBvaW50ZXIiOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgUHlfSU5DUkVGKFB5X05vbmUpOworICAgIHJlcyA9IFB5X05vbmU7CisgICAgZ290byBmaW5hbGx5OworCitmYWlsOgorICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsIGVycm9yX21zZyk7CisKK2ZpbmFsbHk6CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKGRvbWFpbiwgJmhvb2suYWxsb2MpOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0ZXN0X3B5bWVtX3NldHJhd2FsbG9jYXRvcnMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIHRlc3Rfc2V0YWxsb2NhdG9ycyhQWU1FTV9ET01BSU5fUkFXKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3Rlc3RfcHltZW1fc2V0YWxsb2NhdG9ycyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gdGVzdF9zZXRhbGxvY2F0b3JzKFBZTUVNX0RPTUFJTl9NRU0pOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzKFB5T2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiB0ZXN0X3NldGFsbG9jYXRvcnMoUFlNRU1fRE9NQUlOX09CSik7Cit9CisKK1B5RG9jX1NUUlZBUihkb2NzdHJpbmdfZW1wdHksCisiIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ19ub19zaWduYXR1cmUsCisiVGhpcyBkb2NzdHJpbmcgaGFzIG5vIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUsCisiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUoJG1vZHVsZSwgLywgYm9vKVxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyLAorImRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlMigkbW9kdWxlLCAvLCBib28pXG4iCisiXG4iCisiLS1cbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBhbHNvIGhhcyBhbiBpbnZhbGlkIHNpZ25hdHVyZS4iCispOworCitQeURvY19TVFJWQVIoZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZSgkbW9kdWxlLCAvLCBzaWcpXG4iCisiLS1cbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUuIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMsCisiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX2FuZF9leHRyYV9uZXdsaW5lcygkbW9kdWxlLCAvLCBwYXJhbWV0ZXIpXG4iCisiLS1cbiIKKyJcbiIKKyJcbiIKKyJUaGlzIGRvY3N0cmluZyBoYXMgYSB2YWxpZCBzaWduYXR1cmUgYW5kIHNvbWUgZXh0cmEgbmV3bGluZXMuIgorKTsKKworUHlEb2NfU1RSVkFSKGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzLAorImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzKG1vZHVsZSwgcz0nYXZvY2FkbycsXG4iCisiICAgICAgICBiPWInYnl0ZXMnLCBkPTMuMTQsIGk9MzUsIG49Tm9uZSwgdD1UcnVlLCBmPUZhbHNlLFxuIgorIiAgICAgICAgbG9jYWw9dGhlX251bWJlcl90aHJlZSwgc3lzPXN5cy5tYXhzaXplLFxuIgorIiAgICAgICAgZXhwPXN5cy5tYXhzaXplIC0gMSlcbiIKKyItLVxuIgorIlxuIgorIlxuIgorIlxuIgorIlRoaXMgZG9jc3RyaW5nIGhhcyBhIHZhbGlkIHNpZ25hdHVyZSB3aXRoIHBhcmFtZXRlcnMsXG4iCisiYW5kIHRoZSBwYXJhbWV0ZXJzIHRha2UgZGVmYXVsdHMgb2YgdmFyeWluZyB0eXBlcy4iCispOworCiAjaWZkZWYgV0lUSF9USFJFQUQKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeVRocmVhZF90eXBlX2xvY2sgc3RhcnRfZXZlbnQ7CkBAIC0yNTY2LDE2ICszMDYzLDE3NiBAQAogfQogI2VuZGlmICAgLyogV0lUSF9USFJFQUQgKi8KIAorLyogbWFyc2hhbCAqLworCitzdGF0aWMgUHlPYmplY3QqCitweW1hcnNoYWxfd3JpdGVfbG9uZ190b19maWxlKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBsb25nIHZhbHVlOworICAgIGNoYXIgKmZpbGVuYW1lOworICAgIGludCB2ZXJzaW9uOworICAgIEZJTEUgKmZwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJsc2k6cHltYXJzaGFsX3dyaXRlX2xvbmdfdG9fZmlsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YWx1ZSwgJmZpbGVuYW1lLCAmdmVyc2lvbikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZnAgPSBmb3BlbihmaWxlbmFtZSwgIndiIik7CisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlKHZhbHVlLCBmcCwgdmVyc2lvbik7CisKKyAgICBmY2xvc2UoZnApOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorcHltYXJzaGFsX3dyaXRlX29iamVjdF90b19maWxlKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIGNoYXIgKmZpbGVuYW1lOworICAgIGludCB2ZXJzaW9uOworICAgIEZJTEUgKmZwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPc2k6cHltYXJzaGFsX3dyaXRlX29iamVjdF90b19maWxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJm9iaiwgJmZpbGVuYW1lLCAmdmVyc2lvbikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZnAgPSBmb3BlbihmaWxlbmFtZSwgIndiIik7CisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeU1hcnNoYWxfV3JpdGVPYmplY3RUb0ZpbGUob2JqLCBmcCwgdmVyc2lvbik7CisKKyAgICBmY2xvc2UoZnApOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorcHltYXJzaGFsX3JlYWRfc2hvcnRfZnJvbV9maWxlKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgdmFsdWU7CisgICAgbG9uZyBwb3M7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgRklMRSAqZnA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6cHltYXJzaGFsX3JlYWRfc2hvcnRfZnJvbV9maWxlIiwgJmZpbGVuYW1lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBmcCA9IGZvcGVuKGZpbGVuYW1lLCAicmIiKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHZhbHVlID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKKyAgICBwb3MgPSBmdGVsbChmcCk7CisKKyAgICBmY2xvc2UoZnApOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaWwiLCB2YWx1ZSwgcG9zKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorcHltYXJzaGFsX3JlYWRfbG9uZ19mcm9tX2ZpbGUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGxvbmcgdmFsdWUsIHBvczsKKyAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBGSUxFICpmcDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpweW1hcnNoYWxfcmVhZF9sb25nX2Zyb21fZmlsZSIsICZmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZnAgPSBmb3BlbihmaWxlbmFtZSwgInJiIik7CisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB2YWx1ZSA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKKyAgICBwb3MgPSBmdGVsbChmcCk7CisKKyAgICBmY2xvc2UoZnApOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibGwiLCB2YWx1ZSwgcG9zKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorcHltYXJzaGFsX3JlYWRfbGFzdF9vYmplY3RfZnJvbV9maWxlKFB5T2JqZWN0KiBzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqb2JqOworICAgIGxvbmcgcG9zOworICAgIGNoYXIgKmZpbGVuYW1lOworICAgIEZJTEUgKmZwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOnB5bWFyc2hhbF9yZWFkX2xhc3Rfb2JqZWN0X2Zyb21fZmlsZSIsICZmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZnAgPSBmb3BlbihmaWxlbmFtZSwgInJiIik7CisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBvYmogPSBQeU1hcnNoYWxfUmVhZExhc3RPYmplY3RGcm9tRmlsZShmcCk7CisgICAgcG9zID0gZnRlbGwoZnApOworCisgICAgZmNsb3NlKGZwKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmwiLCBvYmosIHBvcyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5bWFyc2hhbF9yZWFkX29iamVjdF9mcm9tX2ZpbGUoUHlPYmplY3QqIHNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpvYmo7CisgICAgbG9uZyBwb3M7CisgICAgY2hhciAqZmlsZW5hbWU7CisgICAgRklMRSAqZnA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6cHltYXJzaGFsX3JlYWRfb2JqZWN0X2Zyb21fZmlsZSIsICZmaWxlbmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZnAgPSBmb3BlbihmaWxlbmFtZSwgInJiIik7CisgICAgaWYgKGZwID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBvYmogPSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlKGZwKTsKKyAgICBwb3MgPSBmdGVsbChmcCk7CisKKyAgICBmY2xvc2UoZnApOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJObCIsIG9iaiwgcG9zKTsKK30KKwogCiBzdGF0aWMgUHlNZXRob2REZWYgVGVzdE1ldGhvZHNbXSA9IHsKICAgICB7InJhaXNlX2V4Y2VwdGlvbiIsICAgICAgICAgcmFpc2VfZXhjZXB0aW9uLCAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKICAgICB7InJhaXNlX21lbW9yeWVycm9yIiwgICAoUHlDRnVuY3Rpb24pcmFpc2VfbWVtb3J5ZXJyb3IsICBNRVRIX05PQVJHU30sCisgICAgeyJzZXRfZXJybm8iLCAgICAgICAgICAgICAgIHNldF9lcnJubywgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJ0ZXN0X2NvbmZpZyIsICAgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2NvbmZpZywgICAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3Rfc2l6ZW9mX2NfdHlwZXMiLCAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfc2l6ZW9mX2NfdHlwZXMsIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfZGF0ZXRpbWVfY2FwaSIsICB0ZXN0X2RhdGV0aW1lX2NhcGksICAgICAgICAgICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xpc3RfYXBpIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xpc3RfYXBpLCAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfZGljdF9pdGVyYXRpb24iLCAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfZGljdF9pdGVyYXRpb24sTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sYXp5X2hhc2hfaW5oZXJpdGFuY2UiLCAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xhenlfaGFzaF9pbmhlcml0YW5jZSxNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYXBpIiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYXBpLCAgICAgIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfeGluY3JlZl9kb2VzbnRfbGVhayIsKFB5Q0Z1bmN0aW9uKXRlc3RfeGluY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X2luY3JlZl9kb2VzbnRfbGVhayIsIChQeUNGdW5jdGlvbil0ZXN0X2luY3JlZl9kb2VzbnRfbGVhaywgICAgICBNRVRIX05PQVJHU30sCisgICAgeyJ0ZXN0X3hkZWNyZWZfZG9lc250X2xlYWsiLChQeUNGdW5jdGlvbil0ZXN0X3hkZWNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9kZWNyZWZfZG9lc250X2xlYWsiLCAoUHlDRnVuY3Rpb24pdGVzdF9kZWNyZWZfZG9lc250X2xlYWssICAgICAgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9pbmNyZWZfZGVjcmVmX0FQSSIsICAoUHlDRnVuY3Rpb24pdGVzdF9pbmNyZWZfZGVjcmVmX0FQSSwgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsidGVzdF9sb25nX2FuZF9vdmVyZmxvdyIsIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYW5kX292ZXJmbG93LAogICAgICBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X2xvbmdfYXNfZG91YmxlIiwgICAgIChQeUNGdW5jdGlvbil0ZXN0X2xvbmdfYXNfZG91YmxlLE1FVEhfTk9BUkdTfSwKQEAgLTI1OTEsNiArMzI0OCw3IEBACiAgICAgeyJ0ZXN0X3N0cmluZ190b19kb3VibGUiLCAoUHlDRnVuY3Rpb24pdGVzdF9zdHJpbmdfdG9fZG91YmxlLCBNRVRIX05PQVJHU30sCiAgICAgeyJ0ZXN0X3VuaWNvZGVfY29tcGFyZV93aXRoX2FzY2lpIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfdW5pY29kZV9jb21wYXJlX3dpdGhfYXNjaWksIE1FVEhfTk9BUkdTfSwKICAgICB7InRlc3RfY2Fwc3VsZSIsIChQeUNGdW5jdGlvbil0ZXN0X2NhcHN1bGUsIE1FVEhfTk9BUkdTfSwKKyAgICB7InRlc3RfZnJvbV9jb250aWd1b3VzIiwgKFB5Q0Z1bmN0aW9uKXRlc3RfZnJvbV9jb250aWd1b3VzLCBNRVRIX05PQVJHU30sCiAgICAgeyJnZXRhcmdzX3R1cGxlIiwgICAgICAgICAgIGdldGFyZ3NfdHVwbGUsICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRhcmdzX2tleXdvcmRzIiwgKFB5Q0Z1bmN0aW9uKWdldGFyZ3Nfa2V5d29yZHMsCiAgICAgICBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEU30sCkBAIC0yNjYzLDEwICszMzIxLDU0IEBACiAgICAgeyJweXRpbWVfb2JqZWN0X3RvX3RpbWVfdCIsIHRlc3RfcHl0aW1lX29iamVjdF90b190aW1lX3QsICBNRVRIX1ZBUkFSR1N9LAogICAgIHsicHl0aW1lX29iamVjdF90b190aW1ldmFsIiwgdGVzdF9weXRpbWVfb2JqZWN0X3RvX3RpbWV2YWwsICBNRVRIX1ZBUkFSR1N9LAogICAgIHsicHl0aW1lX29iamVjdF90b190aW1lc3BlYyIsIHRlc3RfcHl0aW1lX29iamVjdF90b190aW1lc3BlYywgIE1FVEhfVkFSQVJHU30sCisgICAgeyJ3aXRoX3RwX2RlbCIsICAgICAgICAgICAgIHdpdGhfdHBfZGVsLCAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHU30sCisgICAgeyJ0ZXN0X3B5bWVtX2FsbG9jMCIsCisgICAgIChQeUNGdW5jdGlvbil0ZXN0X3B5bWVtX2FsbG9jMCwgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9weW1lbV9zZXRyYXdhbGxvY2F0b3JzIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHltZW1fc2V0cmF3YWxsb2NhdG9ycywgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9weW1lbV9zZXRhbGxvY2F0b3JzIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHltZW1fc2V0YWxsb2NhdG9ycywgTUVUSF9OT0FSR1N9LAorICAgIHsidGVzdF9weW9iamVjdF9zZXRhbGxvY2F0b3JzIiwKKyAgICAgKFB5Q0Z1bmN0aW9uKXRlc3RfcHlvYmplY3Rfc2V0YWxsb2NhdG9ycywgTUVUSF9OT0FSR1N9LAorICAgIHsibm9fZG9jc3RyaW5nIiwKKyAgICAgICAgKFB5Q0Z1bmN0aW9uKXRlc3Rfd2l0aF9kb2NzdHJpbmcsIE1FVEhfTk9BUkdTfSwKKyAgICB7ImRvY3N0cmluZ19lbXB0eSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX2VtcHR5fSwKKyAgICB7ImRvY3N0cmluZ19ub19zaWduYXR1cmUiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ19ub19zaWduYXR1cmV9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlfSwKKyAgICB7ImRvY3N0cmluZ193aXRoX2ludmFsaWRfc2lnbmF0dXJlMiIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfaW52YWxpZF9zaWduYXR1cmUyfSwKKyAgICB7ImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZSIsCisgICAgICAgIChQeUNGdW5jdGlvbil0ZXN0X3dpdGhfZG9jc3RyaW5nLCBNRVRIX05PQVJHUywKKyAgICAgICAgZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlfSwKKyAgICB7ImRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXMiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV9hbmRfZXh0cmFfbmV3bGluZXN9LAorICAgIHsiZG9jc3RyaW5nX3dpdGhfc2lnbmF0dXJlX3dpdGhfZGVmYXVsdHMiLAorICAgICAgICAoUHlDRnVuY3Rpb24pdGVzdF93aXRoX2RvY3N0cmluZywgTUVUSF9OT0FSR1MsCisgICAgICAgIGRvY3N0cmluZ193aXRoX3NpZ25hdHVyZV93aXRoX2RlZmF1bHRzfSwKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIHsiY2FsbF9pbl90ZW1wb3JhcnlfY190aHJlYWQiLCBjYWxsX2luX3RlbXBvcmFyeV9jX3RocmVhZCwgTUVUSF9PLAogICAgICBQeURvY19TVFIoInNldF9lcnJvcl9jbGFzcyhlcnJvcl9jbGFzcykgLT4gTm9uZSIpfSwKICNlbmRpZgorICAgIHsicHltYXJzaGFsX3dyaXRlX2xvbmdfdG9fZmlsZSIsCisgICAgICAgIHB5bWFyc2hhbF93cml0ZV9sb25nX3RvX2ZpbGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJweW1hcnNoYWxfd3JpdGVfb2JqZWN0X3RvX2ZpbGUiLAorICAgICAgICBweW1hcnNoYWxfd3JpdGVfb2JqZWN0X3RvX2ZpbGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJweW1hcnNoYWxfcmVhZF9zaG9ydF9mcm9tX2ZpbGUiLAorICAgICAgICBweW1hcnNoYWxfcmVhZF9zaG9ydF9mcm9tX2ZpbGUsIE1FVEhfVkFSQVJHU30sCisgICAgeyJweW1hcnNoYWxfcmVhZF9sb25nX2Zyb21fZmlsZSIsCisgICAgICAgIHB5bWFyc2hhbF9yZWFkX2xvbmdfZnJvbV9maWxlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicHltYXJzaGFsX3JlYWRfbGFzdF9vYmplY3RfZnJvbV9maWxlIiwKKyAgICAgICAgcHltYXJzaGFsX3JlYWRfbGFzdF9vYmplY3RfZnJvbV9maWxlLCBNRVRIX1ZBUkFSR1N9LAorICAgIHsicHltYXJzaGFsX3JlYWRfb2JqZWN0X2Zyb21fZmlsZSIsCisgICAgICAgIHB5bWFyc2hhbF9yZWFkX29iamVjdF9mcm9tX2ZpbGUsIE1FVEhfVkFSQVJHU30sCiAgICAge05VTEwsIE5VTEx9IC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yODgxLDYgKzM1ODMsOCBAQAogICAgIFB5X0lOQ1JFRigmUHlJbnN0YW5jZU1ldGhvZF9UeXBlKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImluc3RhbmNlbWV0aG9kIiwgKFB5T2JqZWN0ICopJlB5SW5zdGFuY2VNZXRob2RfVHlwZSk7CiAKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAidGhlX251bWJlcl90aHJlZSIsIDMpOworCiAgICAgVGVzdEVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGVzdGNhcGkuZXJyb3IiLCBOVUxMLCBOVUxMKTsKICAgICBQeV9JTkNSRUYoVGVzdEVycm9yKTsKICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVycm9yIiwgVGVzdEVycm9yKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RlbWJlZC5jIGIvTW9kdWxlcy9fdGVzdGVtYmVkLmMKaW5kZXggNTFiNDM5Zi4uYTIxZDI1MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGVzdGVtYmVkLmMKKysrIGIvTW9kdWxlcy9fdGVzdGVtYmVkLmMKQEAgLTEsNyArMSwyNiBAQAogI2luY2x1ZGUgPFB5dGhvbi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLXZvaWQgcHJpbnRfc3ViaW50ZXJwKHZvaWQpCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbWJlZGRlZCBpbnRlcnByZXRlciB0ZXN0cyB0aGF0IG5lZWQgYSBjdXN0b20gZXhlCisgKgorICogRXhlY3V0ZWQgdmlhICdFbWJlZGRpbmdUZXN0cycgaW4gTGliL3Rlc3QvdGVzdF9jYXBpLnB5CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBfdGVzdGVtYmVkX1B5X0luaXRpYWxpemUodm9pZCkKK3sKKyAgICAvKiBIQUNLOiB0aGUgIi4vIiBhdCBmcm9udCBhdm9pZHMgYSBzZWFyY2ggYWxvbmcgdGhlIFBBVEggaW4KKyAgICAgICBNb2R1bGVzL2dldHBhdGguYyAqLworICAgIFB5X1NldFByb2dyYW1OYW1lKEwiLi9fdGVzdGVtYmVkIik7CisgICAgUHlfSW5pdGlhbGl6ZSgpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGVzdCByZXBlYXRlZCBpbml0YWxpc2F0aW9uIGFuZCBzdWJpbnRlcnByZXRlcnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgcHJpbnRfc3ViaW50ZXJwKHZvaWQpCiB7CiAgICAgLyogSnVzdCBvdXRwdXQgc29tZSBkZWJ1ZyBzdHVmZiAqLwogICAgIFB5VGhyZWFkU3RhdGUgKnRzID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKQEAgLTE0LDcgKzMzLDcgQEAKICAgICApOwogfQogCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorc3RhdGljIHZvaWQgdGVzdF9yZXBlYXRlZF9pbml0X2FuZF9zdWJpbnRlcnByZXRlcnModm9pZCkKIHsKICAgICBQeVRocmVhZFN0YXRlICptYWluc3RhdGUsICpzdWJzdGF0ZTsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtMjQsMTAgKzQzLDcgQEAKIAogICAgIGZvciAoaT0wOyBpPDM7IGkrKykgewogICAgICAgICBwcmludGYoIi0tLSBQYXNzICVkIC0tLVxuIiwgaSk7Ci0gICAgICAgIC8qIEhBQ0s6IHRoZSAiLi8iIGF0IGZyb250IGF2b2lkcyBhIHNlYXJjaCBhbG9uZyB0aGUgUEFUSCBpbgotICAgICAgICAgICBNb2R1bGVzL2dldHBhdGguYyAqLwotICAgICAgICBQeV9TZXRQcm9ncmFtTmFtZShMIi4vX3Rlc3RlbWJlZCIpOwotICAgICAgICBQeV9Jbml0aWFsaXplKCk7CisgICAgICAgIF90ZXN0ZW1iZWRfUHlfSW5pdGlhbGl6ZSgpOwogICAgICAgICBtYWluc3RhdGUgPSBQeVRocmVhZFN0YXRlX0dldCgpOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTU0LDUgKzcwLDcxIEBACiAgICAgICAgIFB5RXZhbF9SZXN0b3JlVGhyZWFkKG1haW5zdGF0ZSk7CiAgICAgICAgIFB5X0ZpbmFsaXplKCk7CiAgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRlc3QgZm9yY2luZyBhIHBhcnRpY3VsYXIgSU8gZW5jb2RpbmcKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgY2hlY2tfc3RkaW9fZGV0YWlscyhjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqIGVycm9ycykKK3sKKyAgICAvKiBPdXRwdXQgaW5mbyBmb3IgdGhlIHRlc3QgY2FzZSB0byBjaGVjayAqLworICAgIGlmIChlbmNvZGluZykgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVuY29kaW5nOiAlc1xuIiwgZW5jb2RpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZW5jb2Rpbmc6IGRlZmF1bHRcbiIpOworICAgIH0KKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIHByaW50ZigiRXhwZWN0ZWQgZXJyb3JzOiAlc1xuIiwgZXJyb3JzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIkV4cGVjdGVkIGVycm9yczogZGVmYXVsdFxuIik7CisgICAgfQorICAgIGZmbHVzaChzdGRvdXQpOworICAgIC8qIEZvcmNlIHRoZSBnaXZlbiBJTyBlbmNvZGluZyAqLworICAgIFB5X1NldFN0YW5kYXJkU3RyZWFtRW5jb2RpbmcoZW5jb2RpbmcsIGVycm9ycyk7CisgICAgX3Rlc3RlbWJlZF9QeV9Jbml0aWFsaXplKCk7CisgICAgUHlSdW5fU2ltcGxlU3RyaW5nKAorICAgICAgICAiaW1wb3J0IHN5czsiCisgICAgICAgICJwcmludCgnc3RkaW46IHswLmVuY29kaW5nfTp7MC5lcnJvcnN9Jy5mb3JtYXQoc3lzLnN0ZGluKSk7IgorICAgICAgICAicHJpbnQoJ3N0ZG91dDogezAuZW5jb2Rpbmd9OnswLmVycm9yc30nLmZvcm1hdChzeXMuc3Rkb3V0KSk7IgorICAgICAgICAicHJpbnQoJ3N0ZGVycjogezAuZW5jb2Rpbmd9OnswLmVycm9yc30nLmZvcm1hdChzeXMuc3RkZXJyKSk7IgorICAgICAgICAic3lzLnN0ZG91dC5mbHVzaCgpIgorICAgICk7CisgICAgUHlfRmluYWxpemUoKTsKK30KKworc3RhdGljIHZvaWQgdGVzdF9mb3JjZWRfaW9fZW5jb2Rpbmcodm9pZCkKK3sKKyAgICAvKiBDaGVjayB2YXJpb3VzIGNvbWJpbmF0aW9ucyAqLworICAgIHByaW50ZigiLS0tIFVzZSBkZWZhdWx0cyAtLS1cbiIpOworICAgIGNoZWNrX3N0ZGlvX2RldGFpbHMoTlVMTCwgTlVMTCk7CisgICAgcHJpbnRmKCItLS0gU2V0IGVycm9ycyBvbmx5IC0tLVxuIik7CisgICAgY2hlY2tfc3RkaW9fZGV0YWlscyhOVUxMLCAic3Vycm9nYXRlZXNjYXBlIik7CisgICAgcHJpbnRmKCItLS0gU2V0IGVuY29kaW5nIG9ubHkgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKCJsYXRpbi0xIiwgTlVMTCk7CisgICAgcHJpbnRmKCItLS0gU2V0IGVuY29kaW5nIGFuZCBlcnJvcnMgLS0tXG4iKTsKKyAgICBjaGVja19zdGRpb19kZXRhaWxzKCJsYXRpbi0xIiwgInN1cnJvZ2F0ZWVzY2FwZSIpOworCisgICAgLyogQ2hlY2sgY2FsbGluZyBhZnRlciBpbml0aWFsaXphdGlvbiBmYWlscyAqLworICAgIFB5X0luaXRpYWxpemUoKTsKKworICAgIGlmIChQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKE5VTEwsIE5VTEwpID09IDApIHsKKyAgICAgICAgcHJpbnRmKCJVbmV4cGVjdGVkIHN1Y2Nlc3MgY2FsbGluZyBQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nIik7CisgICAgfQorICAgIFB5X0ZpbmFsaXplKCk7Cit9CisKKy8qIERpZmZlcmVudCBlbWJlZGRpbmcgdGVzdHMgKi8KK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisKKyAgICAvKiBUT0RPOiBDaGVjayB0aGUgYXJndW1lbnQgc3RyaW5nIHRvIGFsbG93IGZvciBtb3JlIHRlc3QgY2FzZXMgKi8KKyAgICBpZiAoYXJnYyA+IDEpIHsKKyAgICAgICAgLyogRm9yIG5vdzogYXNzdW1lICJmb3JjZWRfaW9fZW5jb2RpbmcgKi8KKyAgICAgICAgdGVzdF9mb3JjZWRfaW9fZW5jb2RpbmcoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKiBSdW4gdGhlIG9yaWdpbmFsIGVtYmVkZGluZyB0ZXN0IGNhc2UgYnkgZGVmYXVsdCAqLworICAgICAgICB0ZXN0X3JlcGVhdGVkX2luaXRfYW5kX3N1YmludGVycHJldGVycygpOworICAgIH0KICAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvX3Rlc3RpbXBvcnRtdWx0aXBsZS5jIGIvTW9kdWxlcy9fdGVzdGltcG9ydG11bHRpcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhZWI2NgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvX3Rlc3RpbXBvcnRtdWx0aXBsZS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDIGV4dGVuc2lvbnMgbW9kdWxlIHRvIHRlc3QgaW1wb3J0aW5nIG11bHRpcGxlIG1vZHVsZXMgZnJvbSBvbmUgY29tcGlsZWQKKyAqIGZpbGUgKGlzc3VlMTY0MjEpLiBUaGlzIGZpbGUgZGVmaW5lcyAzIG1vZHVsZXMgKF90ZXN0aW1wb3J0bW9kdWxlLAorICogZm9vLCBiYXIpLCBvbmx5IHRoZSBmaXJzdCBvbmUgaXMgY2FsbGVkIHRoZSBzYW1lIGFzIHRoZSBjb21waWxlZCBmaWxlLgorICovCisjaW5jbHVkZTxQeXRob24uaD4KKworc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfdGVzdGltcG9ydG11bHRpcGxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZSIsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGUgZG9jIiwKKyAgICAtMSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DIFB5SW5pdF9fdGVzdGltcG9ydG11bHRpcGxlKHZvaWQpCit7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3Rlc3RpbXBvcnRtdWx0aXBsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgX2Zvb21vZHVsZSA9IHsKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfZm9vIiwKKyAgICAiX3Rlc3RpbXBvcnRtdWx0aXBsZV9mb28gZG9jIiwKKyAgICAtMSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwKK307CisKK1B5TU9ESU5JVF9GVU5DIFB5SW5pdF9fdGVzdGltcG9ydG11bHRpcGxlX2Zvbyh2b2lkKQoreworICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9mb29tb2R1bGUpOworfQorCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIF9iYXJtb2R1bGUgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdGVzdGltcG9ydG11bHRpcGxlX2JhciIsCisgICAgIl90ZXN0aW1wb3J0bXVsdGlwbGVfYmFyIGRvYyIsCisgICAgLTEsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMCit9OworCitQeU1PRElOSVRfRlVOQyBQeUluaXRfX3Rlc3RpbXBvcnRtdWx0aXBsZV9iYXIodm9pZCl7CisgICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX2Jhcm1vZHVsZSk7Cit9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvX3RocmVhZG1vZHVsZS5jIGIvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMKaW5kZXggZDFkYzYxZC4uZjgwZjc2YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9fdGhyZWFkbW9kdWxlLmMKQEAgLTE3LDYgKzE3LDggQEAKIHN0YXRpYyBsb25nIG5iX3RocmVhZHMgPSAwOwogc3RhdGljIFB5T2JqZWN0ICpzdHJfZGljdDsKIAorX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKKwogLyogTG9jayBvYmplY3RzICovCiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTY4LDcgKzcwLDcgQEAKICAgICAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgICAgIHIgPSBQeVRocmVhZF9hY3F1aXJlX2xvY2tfdGltZWQobG9jaywgbWljcm9zZWNvbmRzLCAxKTsKICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgICAgIH0gCisgICAgICAgIH0KIAogICAgICAgICBpZiAociA9PSBQWV9MT0NLX0lOVFIpIHsKICAgICAgICAgICAgIC8qIFJ1biBzaWduYWwgaGFuZGxlcnMgaWYgd2Ugd2VyZSBpbnRlcnJ1cHRlZC4gIFByb3BhZ2F0ZQpAQCAtMjU1LDE0ICsyNTcsMTcgQEAKIHN0YXRpYyB2b2lkCiBybG9ja19kZWFsbG9jKHJsb2Nrb2JqZWN0ICpzZWxmKQogewotICAgIGFzc2VydChzZWxmLT5ybG9ja19sb2NrKTsKICAgICBpZiAoc2VsZi0+aW5fd2Vha3JlZmxpc3QgIT0gTlVMTCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgc2VsZik7Ci0gICAgLyogVW5sb2NrIHRoZSBsb2NrIHNvIGl0J3Mgc2FmZSB0byBmcmVlIGl0ICovCi0gICAgaWYgKHNlbGYtPnJsb2NrX2NvdW50ID4gMCkKLSAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOworICAgIC8qIHNlbGYtPnJsb2NrX2xvY2sgY2FuIGJlIE5VTEwgaWYgUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpIGZhaWxlZAorICAgICAgIGluIHJsb2NrX25ldygpICovCisgICAgaWYgKHNlbGYtPnJsb2NrX2xvY2sgIT0gTlVMTCkgeworICAgICAgICAvKiBVbmxvY2sgdGhlIGxvY2sgc28gaXQncyBzYWZlIHRvIGZyZWUgaXQgKi8KKyAgICAgICAgaWYgKHNlbGYtPnJsb2NrX2NvdW50ID4gMCkKKyAgICAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKIAotICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhzZWxmLT5ybG9ja19sb2NrKTsKKyAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrKHNlbGYtPnJsb2NrX2xvY2spOworICAgIH0KICAgICBQeV9UWVBFKHNlbGYpLT50cF9mcmVlKHNlbGYpOwogfQogCkBAIC0zNzQsMTMgKzM3OSwxMyBAQAogdG8gYmUgYXZhaWxhYmxlIGZvciBvdGhlciB0aHJlYWRzLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotcmxvY2tfYWNxdWlyZV9yZXN0b3JlKHJsb2Nrb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJnKQorcmxvY2tfYWNxdWlyZV9yZXN0b3JlKHJsb2Nrb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBsb25nIG93bmVyOwogICAgIHVuc2lnbmVkIGxvbmcgY291bnQ7CiAgICAgaW50IHIgPSAxOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZywgImtsOl9hY3F1aXJlX3Jlc3RvcmUiLCAmY291bnQsICZvd25lcikpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICIoa2wpOl9hY3F1aXJlX3Jlc3RvcmUiLCAmY291bnQsICZvd25lcikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKCFQeVRocmVhZF9hY3F1aXJlX2xvY2soc2VsZi0+cmxvY2tfbG9jaywgMCkpIHsKQEAgLTQ1MiwxNSArNDU3LDE2IEBACiAKICAgICBzZWxmID0gKHJsb2Nrb2JqZWN0ICopIHR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwogICAgIGlmIChzZWxmICE9IE5VTEwpIHsKLSAgICAgICAgc2VsZi0+cmxvY2tfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKLSAgICAgICAgaWYgKHNlbGYtPnJsb2NrX2xvY2sgPT0gTlVMTCkgewotICAgICAgICAgICAgdHlwZS0+dHBfZnJlZShzZWxmKTsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUaHJlYWRFcnJvciwgImNhbid0IGFsbG9jYXRlIGxvY2siKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CiAgICAgICAgIHNlbGYtPmluX3dlYWtyZWZsaXN0ID0gTlVMTDsKICAgICAgICAgc2VsZi0+cmxvY2tfb3duZXIgPSAwOwogICAgICAgICBzZWxmLT5ybG9ja19jb3VudCA9IDA7CisKKyAgICAgICAgc2VsZi0+cmxvY2tfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICAgICAgaWYgKHNlbGYtPnJsb2NrX2xvY2sgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRocmVhZEVycm9yLCAiY2FuJ3QgYWxsb2NhdGUgbG9jayIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHNlbGY7CkBAIC00ODIsNyArNDg4LDcgQEAKICAgICB7Il9pc19vd25lZCIsICAgICAoUHlDRnVuY3Rpb24pcmxvY2tfaXNfb3duZWQsCiAgICAgIE1FVEhfTk9BUkdTLCBybG9ja19pc19vd25lZF9kb2N9LAogICAgIHsiX2FjcXVpcmVfcmVzdG9yZSIsIChQeUNGdW5jdGlvbilybG9ja19hY3F1aXJlX3Jlc3RvcmUsCi0gICAgIE1FVEhfTywgcmxvY2tfYWNxdWlyZV9yZXN0b3JlX2RvY30sCisgICAgIE1FVEhfVkFSQVJHUywgcmxvY2tfYWNxdWlyZV9yZXN0b3JlX2RvY30sCiAgICAgeyJfcmVsZWFzZV9zYXZlIiwgKFB5Q0Z1bmN0aW9uKXJsb2NrX3JlbGVhc2Vfc2F2ZSwKICAgICAgTUVUSF9OT0FSR1MsIHJsb2NrX3JlbGVhc2Vfc2F2ZV9kb2N9LAogICAgIHsiX19lbnRlcl9fIiwgICAgKFB5Q0Z1bmN0aW9uKXJsb2NrX2FjcXVpcmUsCkBAIC03MTIsMTIgKzcxOCwxOCBAQAogICAgICAgICAiX2xvY2FsZHVtbXlfZGVzdHJveWVkIiwgKFB5Q0Z1bmN0aW9uKSBfbG9jYWxkdW1teV9kZXN0cm95ZWQsIE1FVEhfTwogICAgIH07CiAKLSAgICBpZiAodHlwZS0+dHBfaW5pdCA9PSBQeUJhc2VPYmplY3RfVHlwZS50cF9pbml0Ci0gICAgICAgICYmICgoYXJncyAmJiBQeU9iamVjdF9Jc1RydWUoYXJncykpCi0gICAgICAgIHx8IChrdyAmJiBQeU9iamVjdF9Jc1RydWUoa3cpKSkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICJJbml0aWFsaXphdGlvbiBhcmd1bWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKHR5cGUtPnRwX2luaXQgPT0gUHlCYXNlT2JqZWN0X1R5cGUudHBfaW5pdCkgeworICAgICAgICBpbnQgcmMgPSAwOworICAgICAgICBpZiAoYXJncyAhPSBOVUxMKQorICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9Jc1RydWUoYXJncyk7CisgICAgICAgIGlmIChyYyA9PSAwICYmIGt3ICE9IE5VTEwpCisgICAgICAgICAgICByYyA9IFB5T2JqZWN0X0lzVHJ1ZShrdyk7CisgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICBpZiAocmMgPiAwKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJJbml0aWFsaXphdGlvbiBhcmd1bWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQogCiAgICAgc2VsZiA9IChsb2NhbG9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwpAQCAtNzQxLDcgKzc1Myw3IEBACiAgICAgd3IgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKSBzZWxmLCBOVUxMKTsKICAgICBpZiAod3IgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnI7Ci0gICAgc2VsZi0+d3JfY2FsbGJhY2sgPSBQeUNGdW5jdGlvbl9OZXcoJndyX2NhbGxiYWNrX2RlZiwgd3IpOworICAgIHNlbGYtPndyX2NhbGxiYWNrID0gUHlDRnVuY3Rpb25fTmV3RXgoJndyX2NhbGxiYWNrX2RlZiwgd3IsIE5VTEwpOwogICAgIFB5X0RFQ1JFRih3cik7CiAgICAgaWYgKHNlbGYtPndyX2NhbGxiYWNrID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyOwpAQCAtMTAwMSw3ICsxMDEzLDcgQEAKICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKAogICAgICAgICAgICAgICAgICJVbmhhbmRsZWQgZXhjZXB0aW9uIGluIHRocmVhZCBzdGFydGVkIGJ5ICIpOwogICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbHVlLCAmdGIpOwotICAgICAgICAgICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgICAgICAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgICAgICAgICBpZiAoZmlsZSAhPSBOVUxMICYmIGZpbGUgIT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QoYm9vdC0+ZnVuYywgZmlsZSwgMCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xMTcyLDYgKzExODQsNjYgQEAKIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIGFuZCBzcGVjaWFsaXplZCBwdXJwb3NlcyBvbmx5LlxuXAogSW4gbW9zdCBhcHBsaWNhdGlvbnMgYHRocmVhZGluZy5lbnVtZXJhdGUoKWAgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZC4iKTsKIAorc3RhdGljIHZvaWQKK3JlbGVhc2Vfc2VudGluZWwodm9pZCAqd3IpCit7CisgICAgLyogVHJpY2t5OiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSBjdXJyZW50IHRocmVhZCBzdGF0ZQorICAgICAgIGlzIGJlaW5nIGRlbGV0ZWQuICBUaGVyZWZvcmUsIG9ubHkgc2ltcGxlIEMgY29kZSBjYW4gc2FmZWx5CisgICAgICAgZXhlY3V0ZSBoZXJlLiAqLworICAgIFB5T2JqZWN0ICpvYmogPSBQeVdlYWtyZWZfR0VUX09CSkVDVCh3cik7CisgICAgbG9ja29iamVjdCAqbG9jazsKKyAgICBpZiAob2JqICE9IFB5X05vbmUpIHsKKyAgICAgICAgYXNzZXJ0KFB5X1RZUEUob2JqKSA9PSAmTG9ja3R5cGUpOworICAgICAgICBsb2NrID0gKGxvY2tvYmplY3QgKikgb2JqOworICAgICAgICBpZiAobG9jay0+bG9ja2VkKSB7CisgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sobG9jay0+bG9ja19sb2NrKTsKKyAgICAgICAgICAgIGxvY2stPmxvY2tlZCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogRGVhbGxvY2F0aW5nIGEgd2Vha3JlZiB3aXRoIGEgTlVMTCBjYWxsYmFjayBvbmx5IGNhbGxzCisgICAgICAgUHlPYmplY3RfR0NfRGVsKCksIHdoaWNoIGNhbid0IGNhbGwgYW55IFB5dGhvbiBjb2RlLiAqLworICAgIFB5X0RFQ1JFRih3cik7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit0aHJlYWRfX3NldF9zZW50aW5lbChQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeU9iamVjdCAqd3I7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HZXQoKTsKKyAgICBsb2Nrb2JqZWN0ICpsb2NrOworCisgICAgaWYgKHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgIT0gTlVMTCkgeworICAgICAgICAvKiBXZSBtdXN0IHN1cHBvcnQgdGhlIHJlLWNyZWF0aW9uIG9mIHRoZSBsb2NrIGZyb20gYQorICAgICAgICAgICBmb3JrKCllZCBjaGlsZC4gKi8KKyAgICAgICAgYXNzZXJ0KHRzdGF0ZS0+b25fZGVsZXRlID09ICZyZWxlYXNlX3NlbnRpbmVsKTsKKyAgICAgICAgd3IgPSAoUHlPYmplY3QgKikgdHN0YXRlLT5vbl9kZWxldGVfZGF0YTsKKyAgICAgICAgdHN0YXRlLT5vbl9kZWxldGUgPSBOVUxMOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhID0gTlVMTDsKKyAgICAgICAgUHlfREVDUkVGKHdyKTsKKyAgICB9CisgICAgbG9jayA9IG5ld2xvY2tvYmplY3QoKTsKKyAgICBpZiAobG9jayA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBUaGUgbG9jayBpcyBvd25lZCBieSB3aG9ldmVyIGNhbGxlZCBfc2V0X3NlbnRpbmVsKCksIGJ1dCB0aGUgd2Vha3JlZgorICAgICAgIGhhbmdzIHRvIHRoZSB0aHJlYWQgc3RhdGUuICovCisgICAgd3IgPSBQeVdlYWtyZWZfTmV3UmVmKChQeU9iamVjdCAqKSBsb2NrLCBOVUxMKTsKKyAgICBpZiAod3IgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobG9jayk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICB0c3RhdGUtPm9uX2RlbGV0ZV9kYXRhID0gKHZvaWQgKikgd3I7CisgICAgdHN0YXRlLT5vbl9kZWxldGUgPSAmcmVsZWFzZV9zZW50aW5lbDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopIGxvY2s7Cit9CisKK1B5RG9jX1NUUlZBUihfc2V0X3NlbnRpbmVsX2RvYywKKyJfc2V0X3NlbnRpbmVsKCkgLT4gbG9ja1xuXAorXG5cCitTZXQgYSBzZW50aW5lbCBsb2NrIHRoYXQgd2lsbCBiZSByZWxlYXNlZCB3aGVuIHRoZSBjdXJyZW50IHRocmVhZFxuXAorc3RhdGUgaXMgZmluYWxpemVkIChhZnRlciBpdCBpcyB1bnRpZWQgZnJvbSB0aGUgaW50ZXJwcmV0ZXIpLlxuXAorXG5cCitUaGlzIGlzIGEgcHJpdmF0ZSBBUEkgZm9yIHRoZSB0aHJlYWRpbmcgbW9kdWxlLiIpOworCiBzdGF0aWMgUHlPYmplY3QgKgogdGhyZWFkX3N0YWNrX3NpemUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewpAQCAtMTI0Nyw2ICsxMzE5LDggQEAKICAgICAgTUVUSF9OT0FSR1MsIF9jb3VudF9kb2N9LAogICAgIHsic3RhY2tfc2l6ZSIsICAgICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGhyZWFkX3N0YWNrX3NpemUsCiAgICAgIE1FVEhfVkFSQVJHUywgc3RhY2tfc2l6ZV9kb2N9LAorICAgIHsiX3NldF9zZW50aW5lbCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdGhyZWFkX19zZXRfc2VudGluZWwsCisgICAgIE1FVEhfTk9BUkdTLCBfc2V0X3NlbnRpbmVsX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9fdGtpbnRlci5jIGIvTW9kdWxlcy9fdGtpbnRlci5jCmluZGV4IDI2MmQ2NzkuLjUyMDI1YmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3RraW50ZXIuYworKysgYi9Nb2R1bGVzL190a2ludGVyLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNlbmRpZgogCiAjZGVmaW5lIENIRUNLX1NJWkUoc2l6ZSwgZWxlbXNpemUpIFwKLSAgICAoKHNpemVfdCkoc2l6ZSkgPD0gUHlfTUFYKChzaXplX3QpSU5UX01BWCwgVUlOVF9NQVggLyAoc2l6ZV90KShlbGVtc2l6ZSkpKQorICAgICgoc2l6ZV90KShzaXplKSA8PSBQeV9NSU4oKHNpemVfdClJTlRfTUFYLCBVSU5UX01BWCAvIChzaXplX3QpKGVsZW1zaXplKSkpCiAKIC8qIFN0YXJ0aW5nIHdpdGggVGNsIDguNCwgbWFueSBBUElzIG9mZmVyIGNvbnN0LWNvcnJlY3RuZXNzLiAgVW5mb3J0dW5hdGVseSwKICAgIG1ha2luZyBfdGtpbnRlciBjb3JyZWN0IGZvciB0aGlzIEFQSSBtZWFucyB0byBicmVhayBlYXJsaWVyCkBAIC02NSwxMCArNjUsMTYgQEAKICNkZWZpbmUgQ09OU1QKICNlbmRpZgogCi0jaWYgVEtfVkVSU0lPTl9IRVggPCAweDA4MDMwMTAyCisjaWYgVEtfSEVYX1ZFUlNJT04gPCAweDA4MDMwMjAxCiAjZXJyb3IgIlRrIG9sZGVyIHRoYW4gOC4zLjEgbm90IHN1cHBvcnRlZCIKICNlbmRpZgogCisjaWYgVEtfSEVYX1ZFUlNJT04gPj0gMHgwODA1MDIwOCAmJiBUS19IRVhfVkVSU0lPTiA8IDB4MDgwNjAwMDAgfHwgXAorICAgIFRLX0hFWF9WRVJTSU9OID49IDB4MDgwNjAyMDAKKyNkZWZpbmUgSEFWRV9MSUJUT01NQU1USAorI2luY2x1ZGUgPHRjbFRvbU1hdGguaD4KKyNlbmRpZgorCiAjaWYgIShkZWZpbmVkKE1TX1dJTkRPV1MpIHx8IGRlZmluZWQoX19DWUdXSU5fXykpCiAjZGVmaW5lIEhBVkVfQ1JFQVRFRklMRUhBTkRMRVIKICNlbmRpZgpAQCAtMTE0LDUyICsxMjAsNjAgQEAKIAogLyogVGhlIHRocmVhZGluZyBzaXR1YXRpb24gaXMgY29tcGxpY2F0ZWQuICBUY2wgaXMgbm90IHRocmVhZC1zYWZlLCBleGNlcHQKICAgIHdoZW4gY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLXRocmVhZHMuCi0gICBTbyB3ZSBuZWVkIHRvIHVzZSBhIGxvY2sgYXJvdW5kIGFsbCB1c2VzIG9mIFRjbC4gIFByZXZpb3VzbHksIHRoZSBQeXRob24KLSAgIGludGVycHJldGVyIGxvY2sgd2FzIHVzZWQgZm9yIHRoaXMuICBIb3dldmVyLCB0aGlzIGNhdXNlcyBwcm9ibGVtcyB3aGVuCi0gICBvdGhlciBQeXRob24gdGhyZWFkcyBuZWVkIHRvIHJ1biB3aGlsZSBUY2wgaXMgYmxvY2tlZCB3YWl0aW5nIGZvciBldmVudHMuCiAKLSAgIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgYSBzZXBhcmF0ZSBsb2NrIGZvciBUY2wgaXMgaW50cm9kdWNlZC4gIEhvbGRpbmcgaXQKLSAgIGlzIGluY29tcGF0aWJsZSB3aXRoIGhvbGRpbmcgUHl0aG9uJ3MgaW50ZXJwcmV0ZXIgbG9jay4gIFRoZSBmb2xsb3dpbmcgZm91cgotICAgbWFjcm9zIG1hbmlwdWxhdGUgYm90aCBsb2NrcyB0b2dldGhlci4KKyAgIFNvIHdlIG5lZWQgdG8gdXNlIGEgbG9jayBhcm91bmQgYWxsIHVzZXMgb2YgVGNsLiAgUHJldmlvdXNseSwgdGhlCisgICBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayB3YXMgdXNlZCBmb3IgdGhpcy4gIEhvd2V2ZXIsIHRoaXMgY2F1c2VzCisgICBwcm9ibGVtcyB3aGVuIG90aGVyIFB5dGhvbiB0aHJlYWRzIG5lZWQgdG8gcnVuIHdoaWxlIFRjbCBpcyBibG9ja2VkCisgICB3YWl0aW5nIGZvciBldmVudHMuCiAKLSAgIEVOVEVSX1RDTCBhbmQgTEVBVkVfVENMIGFyZSBicmFja2V0cywganVzdCBsaWtlIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMgYW5kCi0gICBQeV9FTkRfQUxMT1dfVEhSRUFEUy4gIFRoZXkgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYSBjYWxsIGludG8gVGNsIGlzIG1hZGUKLSAgIHRoYXQgY291bGQgY2FsbCBhbiBldmVudCBoYW5kbGVyLCBvciBvdGhlcndpc2UgYWZmZWN0IHRoZSBzdGF0ZSBvZiBhIFRjbAotICAgaW50ZXJwcmV0ZXIuICBUaGVzZSBhc3N1bWUgdGhhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBoYXMgdGhlIFB5dGhvbgotICAgaW50ZXJwcmV0ZXIgbG9jazsgaW5zaWRlIHRoZSBicmFja2V0cywgdGhlIFB5dGhvbiBpbnRlcnByZXRlciBsb2NrIGhhcyBiZWVuCi0gICByZWxlYXNlZCBhbmQgdGhlIGxvY2sgZm9yIFRjbCBoYXMgYmVlbiBhY3F1aXJlZC4KKyAgIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgYSBzZXBhcmF0ZSBsb2NrIGZvciBUY2wgaXMgaW50cm9kdWNlZC4KKyAgIEhvbGRpbmcgaXQgaXMgaW5jb21wYXRpYmxlIHdpdGggaG9sZGluZyBQeXRob24ncyBpbnRlcnByZXRlciBsb2NrLgorICAgVGhlIGZvbGxvd2luZyBmb3VyIG1hY3JvcyBtYW5pcHVsYXRlIGJvdGggbG9ja3MgdG9nZXRoZXIuCiAKLSAgIFNvbWV0aW1lcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgYm90aCB0aGUgUHl0aG9uIGxvY2sgYW5kIHRoZSBUY2wgbG9jay4KLSAgIChGb3IgZXhhbXBsZSwgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YSBmcm9tIHRoZSBUY2wgaW50ZXJwcmV0ZXIgcmVzdWx0IHRvIGEKLSAgIFB5dGhvbiBzdHJpbmcgb2JqZWN0LikgIFRoaXMgY2FuIGJlIGRvbmUgYnkgdXNpbmcgZGlmZmVyZW50IG1hY3JvcyB0byBjbG9zZQotICAgdGhlIEVOVEVSX1RDTCBibG9jazogRU5URVJfT1ZFUkxBUCByZWFjcXVpcmVzIHRoZSBQeXRob24gbG9jayAoYW5kIHJlc3RvcmVzCi0gICB0aGUgdGhyZWFkIHN0YXRlKSBidXQgZG9lc24ndCByZWxlYXNlIHRoZSBUY2wgbG9jazsgTEVBVkVfT1ZFUkxBUF9UQ0wKLSAgIHJlbGVhc2VzIHRoZSBUY2wgbG9jay4KKyAgIEVOVEVSX1RDTCBhbmQgTEVBVkVfVENMIGFyZSBicmFja2V0cywganVzdCBsaWtlCisgICBQeV9CRUdJTl9BTExPV19USFJFQURTIGFuZCBQeV9FTkRfQUxMT1dfVEhSRUFEUy4gIFRoZXkgc2hvdWxkIGJlCisgICB1c2VkIHdoZW5ldmVyIGEgY2FsbCBpbnRvIFRjbCBpcyBtYWRlIHRoYXQgY291bGQgY2FsbCBhbiBldmVudAorICAgaGFuZGxlciwgb3Igb3RoZXJ3aXNlIGFmZmVjdCB0aGUgc3RhdGUgb2YgYSBUY2wgaW50ZXJwcmV0ZXIuICBUaGVzZQorICAgYXNzdW1lIHRoYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaGFzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jazsKKyAgIGluc2lkZSB0aGUgYnJhY2tldHMsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayBoYXMgYmVlbiByZWxlYXNlZAorICAgYW5kIHRoZSBsb2NrIGZvciBUY2wgaGFzIGJlZW4gYWNxdWlyZWQuCisKKyAgIFNvbWV0aW1lcywgaXQgaXMgbmVjZXNzYXJ5IHRvIGhhdmUgYm90aCB0aGUgUHl0aG9uIGxvY2sgYW5kIHRoZSBUY2wKKyAgIGxvY2suICAoRm9yIGV4YW1wbGUsIHdoZW4gdHJhbnNmZXJyaW5nIGRhdGEgZnJvbSB0aGUgVGNsCisgICBpbnRlcnByZXRlciByZXN1bHQgdG8gYSBQeXRob24gc3RyaW5nIG9iamVjdC4pICBUaGlzIGNhbiBiZSBkb25lIGJ5CisgICB1c2luZyBkaWZmZXJlbnQgbWFjcm9zIHRvIGNsb3NlIHRoZSBFTlRFUl9UQ0wgYmxvY2s6IEVOVEVSX09WRVJMQVAKKyAgIHJlYWNxdWlyZXMgdGhlIFB5dGhvbiBsb2NrIChhbmQgcmVzdG9yZXMgdGhlIHRocmVhZCBzdGF0ZSkgYnV0CisgICBkb2Vzbid0IHJlbGVhc2UgdGhlIFRjbCBsb2NrOyBMRUFWRV9PVkVSTEFQX1RDTCByZWxlYXNlcyB0aGUgVGNsCisgICBsb2NrLgogCiAgICBCeSBjb250cmFzdCwgRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04gYXJlIHVzZWQgaW4gVGNsIGV2ZW50Ci0gICBoYW5kbGVycyB3aGVuIHRoZSBoYW5kbGVyIG5lZWRzIHRvIHVzZSBQeXRob24uICBTdWNoIGV2ZW50IGhhbmRsZXJzIGFyZQotICAgZW50ZXJlZCB3aGlsZSB0aGUgbG9jayBmb3IgVGNsIGlzIGhlbGQ7IHRoZSBldmVudCBoYW5kbGVyIHByZXN1bWFibHkgbmVlZHMKLSAgIHRvIHVzZSBQeXRob24uICBFTlRFUl9QWVRIT04gcmVsZWFzZXMgdGhlIGxvY2sgZm9yIFRjbCBhbmQgYWNxdWlyZXMKLSAgIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jaywgcmVzdG9yaW5nIHRoZSBhcHByb3ByaWF0ZSB0aHJlYWQgc3RhdGUsIGFuZAotICAgTEVBVkVfUFlUSE9OIHJlbGVhc2VzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jayBhbmQgcmUtYWNxdWlyZXMgdGhlIGxvY2sKLSAgIGZvciBUY2wuICBJdCBpcyBva2F5IGZvciBFTlRFUl9UQ0wvTEVBVkVfVENMIHBhaXJzIHRvIGJlIGNvbnRhaW5lZCBpbnNpZGUKLSAgIHRoZSBjb2RlIGJldHdlZW4gRU5URVJfUFlUSE9OIGFuZCBMRUFWRV9QWVRIT04uCisgICBoYW5kbGVycyB3aGVuIHRoZSBoYW5kbGVyIG5lZWRzIHRvIHVzZSBQeXRob24uICBTdWNoIGV2ZW50IGhhbmRsZXJzCisgICBhcmUgZW50ZXJlZCB3aGlsZSB0aGUgbG9jayBmb3IgVGNsIGlzIGhlbGQ7IHRoZSBldmVudCBoYW5kbGVyCisgICBwcmVzdW1hYmx5IG5lZWRzIHRvIHVzZSBQeXRob24uICBFTlRFUl9QWVRIT04gcmVsZWFzZXMgdGhlIGxvY2sgZm9yCisgICBUY2wgYW5kIGFjcXVpcmVzIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgbG9jaywgcmVzdG9yaW5nIHRoZQorICAgYXBwcm9wcmlhdGUgdGhyZWFkIHN0YXRlLCBhbmQgTEVBVkVfUFlUSE9OIHJlbGVhc2VzIHRoZSBQeXRob24KKyAgIGludGVycHJldGVyIGxvY2sgYW5kIHJlLWFjcXVpcmVzIHRoZSBsb2NrIGZvciBUY2wuICBJdCBpcyBva2F5IGZvcgorICAgRU5URVJfVENML0xFQVZFX1RDTCBwYWlycyB0byBiZSBjb250YWluZWQgaW5zaWRlIHRoZSBjb2RlIGJldHdlZW4KKyAgIEVOVEVSX1BZVEhPTiBhbmQgTEVBVkVfUFlUSE9OLgogCi0gICBUaGVzZSBsb2NrcyBleHBhbmQgdG8gc2V2ZXJhbCBzdGF0ZW1lbnRzIGFuZCBicmFja2V0czsgdGhleSBzaG91bGQgbm90IGJlCi0gICB1c2VkIGluIGJyYW5jaGVzIG9mIGlmIHN0YXRlbWVudHMgYW5kIHRoZSBsaWtlLgorICAgVGhlc2UgbG9ja3MgZXhwYW5kIHRvIHNldmVyYWwgc3RhdGVtZW50cyBhbmQgYnJhY2tldHM7IHRoZXkgc2hvdWxkCisgICBub3QgYmUgdXNlZCBpbiBicmFuY2hlcyBvZiBpZiBzdGF0ZW1lbnRzIGFuZCB0aGUgbGlrZS4KIAotICAgSWYgVGNsIGlzIHRocmVhZGVkLCB0aGlzIGFwcHJvYWNoIHdvbid0IHdvcmsgYW55bW9yZS4gVGhlIFRjbCBpbnRlcnByZXRlciBpcwotICAgb25seSB2YWxpZCBpbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCBpdCwgYW5kIGFsbCBUayBhY3Rpdml0eSBtdXN0IGhhcHBlbiBpbiB0aGlzCi0gICB0aHJlYWQsIGFsc28uIFRoYXQgbWVhbnMgdGhhdCB0aGUgbWFpbmxvb3AgbXVzdCBiZSBpbnZva2VkIGluIHRoZSB0aHJlYWQgdGhhdAotICAgY3JlYXRlZCB0aGUgaW50ZXJwcmV0ZXIuIEludm9raW5nIGNvbW1hbmRzIGZyb20gb3RoZXIgdGhyZWFkcyBpcyBwb3NzaWJsZTsKLSAgIF90a2ludGVyIHdpbGwgcXVldWUgYW4gZXZlbnQgZm9yIHRoZSBpbnRlcnByZXRlciB0aHJlYWQsIHdoaWNoIHdpbGwgdGhlbgotICAgZXhlY3V0ZSB0aGUgY29tbWFuZCBhbmQgcGFzcyBiYWNrIHRoZSByZXN1bHQuIElmIHRoZSBtYWluIHRocmVhZCBpcyBub3QgaW4gdGhlCi0gICBtYWlubG9vcCwgYW5kIGludm9raW5nIGNvbW1hbmRzIGNhdXNlcyBhbiBleGNlcHRpb247IGlmIHRoZSBtYWluIGxvb3AgaXMgcnVubmluZwotICAgYnV0IG5vdCBwcm9jZXNzaW5nIGV2ZW50cywgdGhlIGNvbW1hbmQgaW52b2NhdGlvbiB3aWxsIGJsb2NrLgorICAgSWYgVGNsIGlzIHRocmVhZGVkLCB0aGlzIGFwcHJvYWNoIHdvbid0IHdvcmsgYW55bW9yZS4gVGhlIFRjbAorICAgaW50ZXJwcmV0ZXIgaXMgb25seSB2YWxpZCBpbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCBpdCwgYW5kIGFsbCBUaworICAgYWN0aXZpdHkgbXVzdCBoYXBwZW4gaW4gdGhpcyB0aHJlYWQsIGFsc28uIFRoYXQgbWVhbnMgdGhhdCB0aGUKKyAgIG1haW5sb29wIG11c3QgYmUgaW52b2tlZCBpbiB0aGUgdGhyZWFkIHRoYXQgY3JlYXRlZCB0aGUKKyAgIGludGVycHJldGVyLiBJbnZva2luZyBjb21tYW5kcyBmcm9tIG90aGVyIHRocmVhZHMgaXMgcG9zc2libGU7CisgICBfdGtpbnRlciB3aWxsIHF1ZXVlIGFuIGV2ZW50IGZvciB0aGUgaW50ZXJwcmV0ZXIgdGhyZWFkLCB3aGljaCB3aWxsCisgICB0aGVuIGV4ZWN1dGUgdGhlIGNvbW1hbmQgYW5kIHBhc3MgYmFjayB0aGUgcmVzdWx0LiBJZiB0aGUgbWFpbgorICAgdGhyZWFkIGlzIG5vdCBpbiB0aGUgbWFpbmxvb3AsIGFuZCBpbnZva2luZyBjb21tYW5kcyBjYXVzZXMgYW4KKyAgIGV4Y2VwdGlvbjsgaWYgdGhlIG1haW4gbG9vcCBpcyBydW5uaW5nIGJ1dCBub3QgcHJvY2Vzc2luZyBldmVudHMsCisgICB0aGUgY29tbWFuZCBpbnZvY2F0aW9uIHdpbGwgYmxvY2suCiAKLSAgIEluIGFkZGl0aW9uLCBmb3IgYSB0aHJlYWRlZCBUY2wsIGEgc2luZ2xlIGdsb2JhbCB0Y2xfdHN0YXRlIHdvbid0IGJlIHN1ZmZpY2llbnQKLSAgIGFueW1vcmUsIHNpbmNlIG11bHRpcGxlIFRjbCBpbnRlcnByZXRlcnMgbWF5IHNpbXVsdGFuZW91c2x5IGRpc3BhdGNoIGluIGRpZmZlcmVudAotICAgdGhyZWFkcy4gU28gd2UgdXNlIHRoZSBUY2wgVExTIEFQSS4KKyAgIEluIGFkZGl0aW9uLCBmb3IgYSB0aHJlYWRlZCBUY2wsIGEgc2luZ2xlIGdsb2JhbCB0Y2xfdHN0YXRlIHdvbid0CisgICBiZSBzdWZmaWNpZW50IGFueW1vcmUsIHNpbmNlIG11bHRpcGxlIFRjbCBpbnRlcnByZXRlcnMgbWF5CisgICBzaW11bHRhbmVvdXNseSBkaXNwYXRjaCBpbiBkaWZmZXJlbnQgdGhyZWFkcy4gU28gd2UgdXNlIHRoZSBUY2wgVExTCisgICBBUEkuCiAKICovCiAKQEAgLTE2OCw3ICsxODIsOCBAQAogI2lmZGVmIFRDTF9USFJFQURTCiBzdGF0aWMgVGNsX1RocmVhZERhdGFLZXkgc3RhdGVfa2V5OwogdHlwZWRlZiBQeVRocmVhZFN0YXRlICpUaHJlYWRTcGVjaWZpY0RhdGE7Ci0jZGVmaW5lIHRjbF90c3RhdGUgKCooUHlUaHJlYWRTdGF0ZSoqKVRjbF9HZXRUaHJlYWREYXRhKCZzdGF0ZV9rZXksIHNpemVvZihQeVRocmVhZFN0YXRlKikpKQorI2RlZmluZSB0Y2xfdHN0YXRlIFwKKyAgICAoKihQeVRocmVhZFN0YXRlKiopVGNsX0dldFRocmVhZERhdGEoJnN0YXRlX2tleSwgc2l6ZW9mKFB5VGhyZWFkU3RhdGUqKSkpCiAjZWxzZQogc3RhdGljIFB5VGhyZWFkU3RhdGUgKnRjbF90c3RhdGUgPSBOVUxMOwogI2VuZGlmCkBAIC0xNzgsNyArMTkzLDggQEAKICAgICAgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHRjbF9sb2NrLCAxKTsgdGNsX3RzdGF0ZSA9IHRzdGF0ZTsKIAogI2RlZmluZSBMRUFWRV9UQ0wgXAotICAgIHRjbF90c3RhdGUgPSBOVUxMOyBpZih0Y2xfbG9jaylQeVRocmVhZF9yZWxlYXNlX2xvY2sodGNsX2xvY2spOyBQeV9FTkRfQUxMT1dfVEhSRUFEU30KKyAgICB0Y2xfdHN0YXRlID0gTlVMTDsgXAorICAgIGlmKHRjbF9sb2NrKVB5VGhyZWFkX3JlbGVhc2VfbG9jayh0Y2xfbG9jayk7IFB5X0VORF9BTExPV19USFJFQURTfQogCiAjZGVmaW5lIEVOVEVSX09WRVJMQVAgXAogICAgIFB5X0VORF9BTExPV19USFJFQURTCkBAIC0xODgsNyArMjA0LDggQEAKIAogI2RlZmluZSBFTlRFUl9QWVRIT04gXAogICAgIHsgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gdGNsX3RzdGF0ZTsgdGNsX3RzdGF0ZSA9IE5VTEw7IFwKLSAgICAgICAgaWYodGNsX2xvY2spUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlFdmFsX1Jlc3RvcmVUaHJlYWQoKHRzdGF0ZSkpOyB9CisgICAgICAgIGlmKHRjbF9sb2NrKSBcCisgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKHRjbF9sb2NrKTsgUHlFdmFsX1Jlc3RvcmVUaHJlYWQoKHRzdGF0ZSkpOyB9CiAKICNkZWZpbmUgTEVBVkVfUFlUSE9OIFwKICAgICB7IFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5RXZhbF9TYXZlVGhyZWFkKCk7IFwKQEAgLTE5Nyw3ICsyMTQsOCBAQAogI2RlZmluZSBDSEVDS19UQ0xfQVBQQVJUTUVOVCBcCiAgICAgaWYgKCgoVGthcHBPYmplY3QgKilzZWxmKS0+dGhyZWFkZWQgJiYgXAogICAgICAgICAoKFRrYXBwT2JqZWN0ICopc2VsZiktPnRocmVhZF9pZCAhPSBUY2xfR2V0Q3VycmVudFRocmVhZCgpKSB7IFwKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIkNhbGxpbmcgVGNsIGZyb20gZGlmZmVyZW50IGFwcGFydG1lbnQiKTsgXAorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2FsbGluZyBUY2wgZnJvbSBkaWZmZXJlbnQgYXBwYXJ0bWVudCIpOyBcCiAgICAgICAgIHJldHVybiAwOyBcCiAgICAgfQogCkBAIC0yMTksNyArMjM3LDcgQEAKIAogLyoqKiogVGthcHAgT2JqZWN0IERlY2xhcmF0aW9uICoqKiovCiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGthcHBfVHlwZTsKK3N0YXRpYyBQeU9iamVjdCAqVGthcHBfVHlwZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTIzMCwxNiArMjQ4LDE4IEBACiAgICAgaW50IGRpc3BhdGNoaW5nOwogICAgIC8qIFdlIGNhbm5vdCBpbmNsdWRlIHRjbEludC5oLCBhcyB0aGlzIGlzIGludGVybmFsLgogICAgICAgIFNvIHdlIGNhY2hlIGludGVyZXN0aW5nIHR5cGVzIGhlcmUuICovCi0gICAgVGNsX09ialR5cGUgKkJvb2xlYW5UeXBlOwotICAgIFRjbF9PYmpUeXBlICpCeXRlQXJyYXlUeXBlOwotICAgIFRjbF9PYmpUeXBlICpEb3VibGVUeXBlOwotICAgIFRjbF9PYmpUeXBlICpJbnRUeXBlOwotICAgIFRjbF9PYmpUeXBlICpMaXN0VHlwZTsKLSAgICBUY2xfT2JqVHlwZSAqUHJvY0JvZHlUeXBlOwotICAgIFRjbF9PYmpUeXBlICpTdHJpbmdUeXBlOworICAgIGNvbnN0IFRjbF9PYmpUeXBlICpPbGRCb29sZWFuVHlwZTsKKyAgICBjb25zdCBUY2xfT2JqVHlwZSAqQm9vbGVhblR5cGU7CisgICAgY29uc3QgVGNsX09ialR5cGUgKkJ5dGVBcnJheVR5cGU7CisgICAgY29uc3QgVGNsX09ialR5cGUgKkRvdWJsZVR5cGU7CisgICAgY29uc3QgVGNsX09ialR5cGUgKkludFR5cGU7CisgICAgY29uc3QgVGNsX09ialR5cGUgKldpZGVJbnRUeXBlOworICAgIGNvbnN0IFRjbF9PYmpUeXBlICpCaWdudW1UeXBlOworICAgIGNvbnN0IFRjbF9PYmpUeXBlICpMaXN0VHlwZTsKKyAgICBjb25zdCBUY2xfT2JqVHlwZSAqUHJvY0JvZHlUeXBlOworICAgIGNvbnN0IFRjbF9PYmpUeXBlICpTdHJpbmdUeXBlOwogfSBUa2FwcE9iamVjdDsKIAotI2RlZmluZSBUa2FwcF9DaGVjayh2KSAoUHlfVFlQRSh2KSA9PSAmVGthcHBfVHlwZSkKICNkZWZpbmUgVGthcHBfSW50ZXJwKHYpICgoKFRrYXBwT2JqZWN0ICopICh2KSktPmludGVycCkKICNkZWZpbmUgVGthcHBfUmVzdWx0KHYpIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHYpKQogCkBAIC0zMTIsMTEwICszMzIsOSBAQAogI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCiAKIAotc3RhdGljIGNoYXIgKgotQXNTdHJpbmcoUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdG1wKQotewotICAgIGlmIChQeUJ5dGVzX0NoZWNrKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfQXNTdHJpbmcodmFsdWUpOwotICAgIGVsc2UgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfQXNVVEY4KHZhbHVlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgUHlPYmplY3QgKnYgPSBQeU9iamVjdF9TdHIodmFsdWUpOwotICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHRtcCwgdikgIT0gMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0FzVVRGOCh2KTsKLSAgICB9Ci19Ci0KLQogCiAjZGVmaW5lIEFSR1NaIDY0CiAKLXN0YXRpYyBjaGFyICoKLU1lcmdlKFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICp0bXAgPSBOVUxMOwotICAgIGNoYXIgKmFyZ3ZTdG9yZVtBUkdTWl07Ci0gICAgY2hhciAqKmFyZ3YgPSBOVUxMOwotICAgIGludCBmdlN0b3JlW0FSR1NaXTsKLSAgICBpbnQgKmZ2ID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGFyZ2MgPSAwLCBmdmMgPSAwLCBpOwotICAgIGNoYXIgKnJlcyA9IE5VTEw7Ci0KLSAgICBpZiAoISh0bXAgPSBQeUxpc3RfTmV3KDApKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBhcmd2ID0gYXJndlN0b3JlOwotICAgIGZ2ID0gZnZTdG9yZTsKLQotICAgIGlmIChhcmdzID09IE5VTEwpCi0gICAgICAgIGFyZ2MgPSAwOwotCi0gICAgZWxzZSBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgYXJnYyA9IDE7Ci0gICAgICAgIGZ2WzBdID0gMDsKLSAgICAgICAgaWYgKCEoYXJndlswXSA9IEFzU3RyaW5nKGFyZ3MsIHRtcCkpKQotICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKLQotICAgICAgICBpZiAoYXJnYyA+IEFSR1NaKSB7Ci0gICAgICAgICAgICBpZiAoIUNIRUNLX1NJWkUoYXJnYywgc2l6ZW9mKGNoYXIgKikpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJ0dXBsZSBpcyB0b28gbG9uZyIpOwotICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFyZ3YgPSAoY2hhciAqKilja2FsbG9jKChzaXplX3QpYXJnYyAqIHNpemVvZihjaGFyICopKTsKLSAgICAgICAgICAgIGZ2ID0gKGludCAqKWNrYWxsb2MoKHNpemVfdClhcmdjICogc2l6ZW9mKGludCkpOwotICAgICAgICAgICAgaWYgKGFyZ3YgPT0gTlVMTCB8fCBmdiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdiA9IFB5VHVwbGVfR2V0SXRlbShhcmdzLCBpKTsKLSAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgZnZbaV0gPSAxOwotICAgICAgICAgICAgICAgIGlmICghKGFyZ3ZbaV0gPSBNZXJnZSh2KSkpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmluYWxseTsKLSAgICAgICAgICAgICAgICBmdmMrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKHYgPT0gUHlfTm9uZSkgewotICAgICAgICAgICAgICAgIGFyZ2MgPSBpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZnZbaV0gPSAwOwotICAgICAgICAgICAgICAgIGlmICghKGFyZ3ZbaV0gPSBBc1N0cmluZyh2LCB0bXApKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OwotICAgICAgICAgICAgICAgIGZ2YysrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIHJlcyA9IFRjbF9NZXJnZShhcmdjLCBhcmd2KTsKLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCAibWVyZ2UgZmFpbGVkIik7Ci0KLSAgZmluYWxseToKLSAgICBmb3IgKGkgPSAwOyBpIDwgZnZjOyBpKyspCi0gICAgICAgIGlmIChmdltpXSkgewotICAgICAgICAgICAgY2tmcmVlKGFyZ3ZbaV0pOwotICAgICAgICB9Ci0gICAgaWYgKGFyZ3YgIT0gYXJndlN0b3JlKQotICAgICAgICBja2ZyZWUoRlJFRUNBU1QgYXJndik7Ci0gICAgaWYgKGZ2ICE9IGZ2U3RvcmUpCi0gICAgICAgIGNrZnJlZShGUkVFQ0FTVCBmdik7Ci0KLSAgICBQeV9ERUNSRUYodG1wKTsKLSAgICByZXR1cm4gcmVzOwotfQotCiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTQyOSw4ICszNDgsMTAgQEAKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmUgPSBzICsgc2l6ZTsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBxID0gYnVmID0gKGNoYXIgKilQeU1lbV9NYWxsb2Moc2l6ZSk7Ci0gICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgd2hpbGUgKHMgIT0gZSkgewogICAgICAgICAgICAgICAgIGlmIChzICsgMSAhPSBlICYmIHNbMF0gPT0gJ1x4YzAnICYmIHNbMV0gPT0gJ1x4ODAnKSB7CiAgICAgICAgICAgICAgICAgICAgICpxKysgPSAnXDAnOwpAQCAtNDcxLDggKzM5Miw3IEBACiAgICAgUHlPYmplY3QgKnY7CiAKICAgICBpZiAobGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KIAogICAgIGlmIChUY2xfU3BsaXRMaXN0KChUY2xfSW50ZXJwICopTlVMTCwgbGlzdCwgJmFyZ2MsICZhcmd2KSAhPSBUQ0xfT0spIHsKQEAgLTUwNCw5ICs0MjQsOSBAQAogICAgIHJldHVybiB2OwogfQogCi0vKiBJbiBzb21lIGNhc2VzLCBUY2wgd2lsbCBzdGlsbCByZXR1cm4gc3RyaW5ncyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZQotICAgbGlzdHMuIFNwbGl0T2JqIHdhbGtzIHRocm91Z2ggYSBuZXN0ZWQgdHVwbGUsIGZpbmRpbmcgc3RyaW5nIG9iamVjdHMgdGhhdAotICAgbmVlZCB0byBiZSBzcGxpdC4gKi8KKy8qIEluIHNvbWUgY2FzZXMsIFRjbCB3aWxsIHN0aWxsIHJldHVybiBzdHJpbmdzIHRoYXQgYXJlIHN1cHBvc2VkIHRvCisgICBiZSBsaXN0cy4gU3BsaXRPYmogd2Fsa3MgdGhyb3VnaCBhIG5lc3RlZCB0dXBsZSwgZmluZGluZyBzdHJpbmcKKyAgIG9iamVjdHMgdGhhdCBuZWVkIHRvIGJlIHNwbGl0LiAqLwogCiBzdGF0aWMgUHlPYmplY3QgKgogU3BsaXRPYmooUHlPYmplY3QgKmFyZykKQEAgLTYzOCw5ICs1NTgsMTAgQEAKICAgICBUa2FwcE9iamVjdCAqdjsKICAgICBjaGFyICphcmd2MDsKIAotICAgIHYgPSBQeU9iamVjdF9OZXcoVGthcHBPYmplY3QsICZUa2FwcF9UeXBlKTsKKyAgICB2ID0gUHlPYmplY3RfTmV3KFRrYXBwT2JqZWN0LCAoUHlUeXBlT2JqZWN0ICopIFRrYXBwX1R5cGUpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X0lOQ1JFRihUa2FwcF9UeXBlKTsKIAogICAgIHYtPmludGVycCA9IFRjbF9DcmVhdGVJbnRlcnAoKTsKICAgICB2LT53YW50b2JqZWN0cyA9IHdhbnRvYmplY3RzOwpAQCAtNjUxLDcgKzU3Miw4IEBACiAKICNpZm5kZWYgVENMX1RIUkVBRFMKICAgICBpZiAodi0+dGhyZWFkZWQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgIlRjbCBpcyB0aHJlYWRlZCBidXQgX3RraW50ZXIgaXMgbm90Iik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiVGNsIGlzIHRocmVhZGVkIGJ1dCBfdGtpbnRlciBpcyBub3QiKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC02NjQsMTAgKzU4NiwxMyBAQAogICAgIH0KICNlbmRpZgogCi0gICAgdi0+Qm9vbGVhblR5cGUgPSBUY2xfR2V0T2JqVHlwZSgiYm9vbGVhbiIpOworICAgIHYtPk9sZEJvb2xlYW5UeXBlID0gVGNsX0dldE9ialR5cGUoImJvb2xlYW4iKTsKKyAgICB2LT5Cb29sZWFuVHlwZSA9IFRjbF9HZXRPYmpUeXBlKCJib29sZWFuU3RyaW5nIik7CiAgICAgdi0+Qnl0ZUFycmF5VHlwZSA9IFRjbF9HZXRPYmpUeXBlKCJieXRlYXJyYXkiKTsKICAgICB2LT5Eb3VibGVUeXBlID0gVGNsX0dldE9ialR5cGUoImRvdWJsZSIpOwogICAgIHYtPkludFR5cGUgPSBUY2xfR2V0T2JqVHlwZSgiaW50Iik7CisgICAgdi0+V2lkZUludFR5cGUgPSBUY2xfR2V0T2JqVHlwZSgid2lkZUludCIpOworICAgIHYtPkJpZ251bVR5cGUgPSBUY2xfR2V0T2JqVHlwZSgiYmlnbnVtIik7CiAgICAgdi0+TGlzdFR5cGUgPSBUY2xfR2V0T2JqVHlwZSgibGlzdCIpOwogICAgIHYtPlByb2NCb2R5VHlwZSA9IFRjbF9HZXRPYmpUeXBlKCJwcm9jYm9keSIpOwogICAgIHYtPlN0cmluZ1R5cGUgPSBUY2xfR2V0T2JqVHlwZSgic3RyaW5nIik7CkBAIC02ODUsNyArNjEwLDcgQEAKICAgICAgICAgVGNsX1NldFZhcih2LT5pbnRlcnAsICJ0Y2xfaW50ZXJhY3RpdmUiLCAiMCIsIFRDTF9HTE9CQUxfT05MWSk7CiAKICAgICAvKiBUaGlzIGlzIHVzZWQgdG8gZ2V0IHRoZSBhcHBsaWNhdGlvbiBjbGFzcyBmb3IgVGsgNC4xIGFuZCB1cCAqLwotICAgIGFyZ3YwID0gKGNoYXIqKWNrYWxsb2Moc3RybGVuKGNsYXNzTmFtZSkgKyAxKTsKKyAgICBhcmd2MCA9IChjaGFyKilhdHRlbXB0Y2thbGxvYyhzdHJsZW4oY2xhc3NOYW1lKSArIDEpOwogICAgIGlmICghYXJndjApIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtNzE5LDcgKzY0NCw3IEBACiAgICAgICAgIGlmICh1c2UpCiAgICAgICAgICAgICBsZW4gKz0gc3RybGVuKHVzZSkgKyBzaXplb2YgIi11c2UgIjsKIAotICAgICAgICBhcmdzID0gKGNoYXIqKWNrYWxsb2MobGVuKTsKKyAgICAgICAgYXJncyA9IChjaGFyKilhdHRlbXB0Y2thbGxvYyhsZW4pOwogICAgICAgICBpZiAoIWFyZ3MpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CkBAIC03ODgsMTYgKzcxMywxNyBAQAogICAgIFB5T2JqZWN0ICpzdHJpbmc7IC8qIFRoaXMgY2Fubm90IGNhdXNlIGN5Y2xlcy4gKi8KIH0gUHlUY2xPYmplY3Q7CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlUY2xPYmplY3RfVHlwZTsKLSNkZWZpbmUgUHlUY2xPYmplY3RfQ2hlY2sodikgICAgKCh2KS0+b2JfdHlwZSA9PSAmUHlUY2xPYmplY3RfVHlwZSkKK3N0YXRpYyBQeU9iamVjdCAqUHlUY2xPYmplY3RfVHlwZTsKKyNkZWZpbmUgUHlUY2xPYmplY3RfQ2hlY2sodikgKCh2KS0+b2JfdHlwZSA9PSAoUHlUeXBlT2JqZWN0ICopIFB5VGNsT2JqZWN0X1R5cGUpCiAKIHN0YXRpYyBQeU9iamVjdCAqCiBuZXdQeVRjbE9iamVjdChUY2xfT2JqICphcmcpCiB7CiAgICAgUHlUY2xPYmplY3QgKnNlbGY7Ci0gICAgc2VsZiA9IFB5T2JqZWN0X05ldyhQeVRjbE9iamVjdCwgJlB5VGNsT2JqZWN0X1R5cGUpOworICAgIHNlbGYgPSBQeU9iamVjdF9OZXcoUHlUY2xPYmplY3QsIChQeVR5cGVPYmplY3QgKikgUHlUY2xPYmplY3RfVHlwZSk7CiAgICAgaWYgKHNlbGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgUHlfSU5DUkVGKFB5VGNsT2JqZWN0X1R5cGUpOwogICAgIFRjbF9JbmNyUmVmQ291bnQoYXJnKTsKICAgICBzZWxmLT52YWx1ZSA9IGFyZzsKICAgICBzZWxmLT5zdHJpbmcgPSBOVUxMOwpAQCAtODA3LDkgKzczMywxMSBAQAogc3RhdGljIHZvaWQKIFB5VGNsT2JqZWN0X2RlYWxsb2MoUHlUY2xPYmplY3QgKnNlbGYpCiB7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAgICAgVGNsX0RlY3JSZWZDb3VudChzZWxmLT52YWx1ZSk7CiAgICAgUHlfWERFQ1JFRihzZWxmLT5zdHJpbmcpOwogICAgIFB5T2JqZWN0X0RlbChzZWxmKTsKKyAgICBQeV9ERUNSRUYodHApOwogfQogCiBzdGF0aWMgY2hhcioKQEAgLTg0OCw4ICs3NzYsMTMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBQeVRjbE9iamVjdF9yZXByKFB5VGNsT2JqZWN0ICpzZWxmKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVzIG9iamVjdCBhdCAlcD4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52YWx1ZS0+dHlwZVB0ci0+bmFtZSwgc2VsZi0+dmFsdWUpOworICAgIFB5T2JqZWN0ICpyZXByLCAqc3RyID0gUHlUY2xPYmplY3Rfc3RyKHNlbGYsIE5VTEwpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8JXMgb2JqZWN0OiAlUj4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT52YWx1ZS0+dHlwZVB0ci0+bmFtZSwgc3RyKTsKKyAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICByZXR1cm4gcmVwcjsKIH0KIAogI2RlZmluZSBURVNUX0NPTkQoY29uZCkgKChjb25kKSA/IFB5X1RydWUgOiBQeV9GYWxzZSkKQEAgLTkyMyw4MSArODU2LDEzMiBAQAogICAgIHswfSwKIH07CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgUHlUY2xPYmplY3RfVHlwZSA9IHsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAiX3RraW50ZXIuVGNsX09iaiIsICAgICAgICAgICAgICAgICAvKnRwX25hbWUqLwotICAgIHNpemVvZihQeVRjbE9iamVjdCksICAgICAgICAgICAgICAgIC8qdHBfYmFzaWNzaXplKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZW1zaXplKi8KLSAgICAvKiBtZXRob2RzICovCi0gICAgKGRlc3RydWN0b3IpUHlUY2xPYmplY3RfZGVhbGxvYywvKnRwX2RlYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3Jlc2VydmVkKi8KLSAgICAocmVwcmZ1bmMpUHlUY2xPYmplY3RfcmVwciwgICAgICAgICAvKnRwX3JlcHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbnVtYmVyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX3NlcXVlbmNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaGFzaCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9jYWxsKi8KLSAgICAocmVwcmZ1bmMpUHlUY2xPYmplY3Rfc3RyLCAgICAgICAgICAvKnRwX3N0ciovCi0gICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZG9jKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICBQeVRjbE9iamVjdF9yaWNoY29tcGFyZSwgICAgICAgICAgICAvKnRwX3JpY2hjb21wYXJlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KLSAgICBQeVRjbE9iamVjdF9nZXRzZXRsaXN0LCAgICAgICAgICAgICAvKnRwX2dldHNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVzY3JfZ2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Rlc2NyX3NldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kaWN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2luaXQqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYWxsb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmV3Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2ZyZWUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXNfZ2MqLworc3RhdGljIFB5VHlwZV9TbG90IFB5VGNsT2JqZWN0X1R5cGVfc2xvdHNbXSA9IHsKKyAgICB7UHlfdHBfZGVhbGxvYywgKGRlc3RydWN0b3IpUHlUY2xPYmplY3RfZGVhbGxvY30sCisgICAge1B5X3RwX3JlcHIsIChyZXByZnVuYylQeVRjbE9iamVjdF9yZXByfSwKKyAgICB7UHlfdHBfc3RyLCAocmVwcmZ1bmMpUHlUY2xPYmplY3Rfc3RyfSwKKyAgICB7UHlfdHBfZ2V0YXR0cm8sIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyfSwKKyAgICB7UHlfdHBfcmljaGNvbXBhcmUsIFB5VGNsT2JqZWN0X3JpY2hjb21wYXJlfSwKKyAgICB7UHlfdHBfZ2V0c2V0LCBQeVRjbE9iamVjdF9nZXRzZXRsaXN0fSwKKyAgICB7MCwgMH0KIH07CiAKK3N0YXRpYyBQeVR5cGVfU3BlYyBQeVRjbE9iamVjdF9UeXBlX3NwZWMgPSB7CisgICAgIl90a2ludGVyLlRjbF9PYmoiLAorICAgIHNpemVvZihQeVRjbE9iamVjdCksCisgICAgMCwKKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQsCisgICAgUHlUY2xPYmplY3RfVHlwZV9zbG90cywKK307CisKKworI2lmIFBZX1NJWkVfTUFYID4gSU5UX01BWAorI2RlZmluZSBDSEVDS19TVFJJTkdfTEVOR1RIKHMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocyAhPSBOVUxMICYmIHN0cmxlbihzKSA+PSBJTlRfTUFYKSB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJzdHJpbmcgaXMgdG9vIGxvbmciKTsgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIENIRUNLX1NUUklOR19MRU5HVEgocykKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MSUJUT01NQU1USAorc3RhdGljIFRjbF9PYmoqCithc0JpZ251bU9iaihQeU9iamVjdCAqdmFsdWUpCit7CisgICAgVGNsX09iaiAqcmVzdWx0OworICAgIGludCBuZWc7CisgICAgUHlPYmplY3QgKmhleHN0cjsKKyAgICBjaGFyICpoZXhjaGFyczsKKyAgICBtcF9pbnQgYmlnVmFsdWU7CisKKyAgICBuZWcgPSBQeV9TSVpFKHZhbHVlKSA8IDA7CisgICAgaGV4c3RyID0gX1B5TG9uZ19Gb3JtYXQodmFsdWUsIDE2KTsKKyAgICBpZiAoaGV4c3RyID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGhleGNoYXJzID0gUHlVbmljb2RlX0FzVVRGOChoZXhzdHIpOworICAgIGlmIChoZXhjaGFycyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihoZXhzdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaGV4Y2hhcnMgKz0gbmVnICsgMjsgLyogc2tpcCBzaWduIGFuZCAiMHgiICovCisgICAgbXBfaW5pdCgmYmlnVmFsdWUpOworICAgIGlmIChtcF9yZWFkX3JhZGl4KCZiaWdWYWx1ZSwgaGV4Y2hhcnMsIDE2KSAhPSBNUF9PS0FZKSB7CisgICAgICAgIG1wX2NsZWFyKCZiaWdWYWx1ZSk7CisgICAgICAgIFB5X0RFQ1JFRihoZXhzdHIpOworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlfREVDUkVGKGhleHN0cik7CisgICAgYmlnVmFsdWUuc2lnbiA9IG5lZyA/IE1QX05FRyA6IE1QX1pQT1M7CisgICAgcmVzdWx0ID0gVGNsX05ld0JpZ251bU9iaigmYmlnVmFsdWUpOworICAgIG1wX2NsZWFyKCZiaWdWYWx1ZSk7CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmCisKIHN0YXRpYyBUY2xfT2JqKgogQXNPYmooUHlPYmplY3QgKnZhbHVlKQogewogICAgIFRjbF9PYmogKnJlc3VsdDsKLSAgICBsb25nIGxvbmdWYWw7Ci0gICAgaW50IG92ZXJmbG93OwogCiAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2sodmFsdWUpKQotICAgICAgICByZXR1cm4gVGNsX05ld1N0cmluZ09iaihQeUJ5dGVzX0FTX1NUUklORyh2YWx1ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUodmFsdWUpKTsKLSAgICBlbHNlIGlmIChQeUJvb2xfQ2hlY2sodmFsdWUpKQorICAgICAgICByZXR1cm4gVGNsX05ld0J5dGVBcnJheU9iaigodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHZhbHVlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRSh2YWx1ZSkpOworCisgICAgaWYgKFB5Qm9vbF9DaGVjayh2YWx1ZSkpCiAgICAgICAgIHJldHVybiBUY2xfTmV3Qm9vbGVhbk9iaihQeU9iamVjdF9Jc1RydWUodmFsdWUpKTsKLSAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2YWx1ZSkgJiYKLSAgICAgICAgICAgICAoKGxvbmdWYWwgPSBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3codmFsdWUsICZvdmVyZmxvdykpLAotICAgICAgICAgICAgICAhb3ZlcmZsb3cpKSB7CisKKyAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodmFsdWUpKSB7CisgICAgICAgIGludCBvdmVyZmxvdzsKKyAgICAgICAgbG9uZyBsb25nVmFsdWU7CisjaWZkZWYgVENMX1dJREVfSU5UX1RZUEUKKyAgICAgICAgVGNsX1dpZGVJbnQgd2lkZVZhbHVlOworI2VuZGlmCisgICAgICAgIGxvbmdWYWx1ZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyh2YWx1ZSwgJm92ZXJmbG93KTsKKyAgICAgICAgaWYgKCFvdmVyZmxvdykgeworICAgICAgICAgICAgcmV0dXJuIFRjbF9OZXdMb25nT2JqKGxvbmdWYWx1ZSk7CisgICAgICAgIH0KICAgICAgICAgLyogSWYgdGhlcmUgaXMgYW4gb3ZlcmZsb3cgaW4gdGhlIGxvbmcgY29udmVyc2lvbiwKKyAgICAgICAgICAgZmFsbCB0aHJvdWdoIHRvIHdpZGVJbnQgaGFuZGxpbmcuICovCisjaWZkZWYgVENMX1dJREVfSU5UX1RZUEUKKyAgICAgICAgaWYgKF9QeUxvbmdfQXNCeXRlQXJyYXkoKFB5TG9uZ09iamVjdCAqKXZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSh2b2lkICopJndpZGVWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHdpZGVWYWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX0xJVFRMRV9FTkRJQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpZ25lZCAqLyAxKSA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gVGNsX05ld1dpZGVJbnRPYmood2lkZVZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCisgICAgICAgIC8qIElmIHRoZXJlIGlzIGFuIG92ZXJmbG93IGluIHRoZSB3aWRlSW50IGNvbnZlcnNpb24sCisgICAgICAgICAgIGZhbGwgdGhyb3VnaCB0byBiaWdudW0gaGFuZGxpbmcuICovCisjaWZkZWYgSEFWRV9MSUJUT01NQU1USAorICAgICAgICByZXR1cm4gYXNCaWdudW1PYmoodmFsdWUpOworI2VuZGlmCisgICAgICAgIC8qIElmIHRoZXJlIGlzIG5vIHdpZGVJbnQgb3IgYmlnbnVtIHN1cHBvcnQsCiAgICAgICAgICAgIGZhbGwgdGhyb3VnaCB0byBkZWZhdWx0IG9iamVjdCBoYW5kbGluZy4gKi8KLSAgICAgICAgcmV0dXJuIFRjbF9OZXdMb25nT2JqKGxvbmdWYWwpOwogICAgIH0KLSAgICBlbHNlIGlmIChQeUZsb2F0X0NoZWNrKHZhbHVlKSkKKworICAgIGlmIChQeUZsb2F0X0NoZWNrKHZhbHVlKSkKICAgICAgICAgcmV0dXJuIFRjbF9OZXdEb3VibGVPYmooUHlGbG9hdF9BU19ET1VCTEUodmFsdWUpKTsKLSAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKHZhbHVlKSkgeworCisgICAgaWYgKFB5VHVwbGVfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgIFRjbF9PYmogKiphcmd2OwogICAgICAgICBQeV9zc2l6ZV90IHNpemUsIGk7CiAKICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfU2l6ZSh2YWx1ZSk7CisgICAgICAgIGlmIChzaXplID09IDApCisgICAgICAgICAgICByZXR1cm4gVGNsX05ld0xpc3RPYmooMCwgTlVMTCk7CiAgICAgICAgIGlmICghQ0hFQ0tfU0laRShzaXplLCBzaXplb2YoVGNsX09iaiAqKSkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAidHVwbGUgaXMgdG9vIGxvbmciKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGFyZ3YgPSAoVGNsX09iaiAqKikgY2thbGxvYygoKHNpemVfdClzaXplKSAqIHNpemVvZihUY2xfT2JqICopKTsKKyAgICAgICAgYXJndiA9IChUY2xfT2JqICoqKSBhdHRlbXB0Y2thbGxvYygoKHNpemVfdClzaXplKSAqIHNpemVvZihUY2xfT2JqICopKTsKICAgICAgICAgaWYoIWFyZ3YpCiAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCkBAIC0xMDA2LDcgKzk5MCw4IEBACiAgICAgICAgIGNrZnJlZShGUkVFQ0FTVCBhcmd2KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlVbmljb2RlX0NoZWNrKHZhbHVlKSkgeworCisgICAgaWYgKFB5VW5pY29kZV9DaGVjayh2YWx1ZSkpIHsKICAgICAgICAgdm9pZCAqaW5idWY7CiAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZTsKICAgICAgICAgaW50IGtpbmQ7CkBAIC0xMDE5LDYgKzEwMDQsOCBAQAogCiAgICAgICAgIGluYnVmID0gUHlVbmljb2RlX0RBVEEodmFsdWUpOwogICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodmFsdWUpOworICAgICAgICBpZiAoc2l6ZSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIFRjbF9OZXdVbmljb2RlT2JqKChjb25zdCB2b2lkICopIiIsIDApOwogICAgICAgICBpZiAoIUNIRUNLX1NJWkUoc2l6ZSwgc2l6ZW9mKFRjbF9VbmlDaGFyKSkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAic3RyaW5nIGlzIHRvbyBsb25nIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEwMjcsNyArMTAxNCw3IEBACiAgICAgICAgIGlmIChraW5kID09IHNpemVvZihUY2xfVW5pQ2hhcikpCiAgICAgICAgICAgICByZXR1cm4gVGNsX05ld1VuaWNvZGVPYmooaW5idWYsIHNpemUpOwogICAgICAgICBhbGxvY3NpemUgPSAoKHNpemVfdClzaXplKSAqIHNpemVvZihUY2xfVW5pQ2hhcik7Ci0gICAgICAgIG91dGJ1ZiA9IChUY2xfVW5pQ2hhciopY2thbGxvYyhhbGxvY3NpemUpOworICAgICAgICBvdXRidWYgPSAoVGNsX1VuaUNoYXIqKWF0dGVtcHRja2FsbG9jKGFsbG9jc2l6ZSk7CiAgICAgICAgIC8qIEVsc2Ugb3ZlcmZsb3cgb2NjdXJyZWQsIGFuZCB3ZSB0YWtlIHRoZSBuZXh0IGV4aXQgKi8KICAgICAgICAgaWYgKCFvdXRidWYpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMDU0LDEyICsxMDQxLDE0IEBACiAgICAgICAgIGNrZnJlZShGUkVFQ0FTVCBvdXRidWYpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLSAgICBlbHNlIGlmKFB5VGNsT2JqZWN0X0NoZWNrKHZhbHVlKSkgeworCisgICAgaWYgKFB5VGNsT2JqZWN0X0NoZWNrKHZhbHVlKSkgewogICAgICAgICBUY2xfT2JqICp2ID0gKChQeVRjbE9iamVjdCopdmFsdWUpLT52YWx1ZTsKICAgICAgICAgVGNsX0luY3JSZWZDb3VudCh2KTsKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQotICAgIGVsc2UgeworCisgICAgewogICAgICAgICBQeU9iamVjdCAqdiA9IFB5T2JqZWN0X1N0cih2YWx1ZSk7CiAgICAgICAgIGlmICghdikKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMTA2OSwyMCArMTA1OCw4NSBAQAogICAgIH0KIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2Zyb21Cb29sZWFuKFB5T2JqZWN0KiB0a2FwcCwgVGNsX09iaiAqdmFsdWUpCit7CisgICAgaW50IGJvb2xWYWx1ZTsKKyAgICBpZiAoVGNsX0dldEJvb2xlYW5Gcm9tT2JqKFRrYXBwX0ludGVycCh0a2FwcCksIHZhbHVlLCAmYm9vbFZhbHVlKSA9PSBUQ0xfRVJST1IpCisgICAgICAgIHJldHVybiBUa2ludGVyX0Vycm9yKHRrYXBwKTsKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGJvb2xWYWx1ZSk7Cit9CisKKyNpZmRlZiBUQ0xfV0lERV9JTlRfVFlQRQorc3RhdGljIFB5T2JqZWN0KgorZnJvbVdpZGVJbnRPYmooUHlPYmplY3QqIHRrYXBwLCBUY2xfT2JqICp2YWx1ZSkKK3sKKyAgICAgICAgVGNsX1dpZGVJbnQgd2lkZVZhbHVlOworICAgICAgICBpZiAoVGNsX0dldFdpZGVJbnRGcm9tT2JqKFRrYXBwX0ludGVycCh0a2FwcCksIHZhbHVlLCAmd2lkZVZhbHVlKSA9PSBUQ0xfT0spIHsKKyNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgICAgICAgICAgaWYgKHNpemVvZih3aWRlVmFsdWUpIDw9IFNJWkVPRl9MT05HX0xPTkcpCisgICAgICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZ0xvbmcod2lkZVZhbHVlKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVBcnJheSgodW5zaWduZWQgY2hhciAqKSh2b2lkICopJndpZGVWYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHdpZGVWYWx1ZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBZX0xJVFRMRV9FTkRJQU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNpZ25lZCAqLyAxKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MSUJUT01NQU1USAorc3RhdGljIFB5T2JqZWN0KgorZnJvbUJpZ251bU9iaihQeU9iamVjdCogdGthcHAsIFRjbF9PYmogKnZhbHVlKQoreworICAgIG1wX2ludCBiaWdWYWx1ZTsKKyAgICB1bnNpZ25lZCBsb25nIG51bUJ5dGVzOworICAgIHVuc2lnbmVkIGNoYXIgKmJ5dGVzOworICAgIFB5T2JqZWN0ICpyZXM7CisKKyAgICBpZiAoVGNsX0dldEJpZ251bUZyb21PYmooVGthcHBfSW50ZXJwKHRrYXBwKSwgdmFsdWUsICZiaWdWYWx1ZSkgIT0gVENMX09LKQorICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcih0a2FwcCk7CisgICAgbnVtQnl0ZXMgPSBtcF91bnNpZ25lZF9iaW5fc2l6ZSgmYmlnVmFsdWUpOworICAgIGJ5dGVzID0gUHlNZW1fTWFsbG9jKG51bUJ5dGVzKTsKKyAgICBpZiAoYnl0ZXMgPT0gTlVMTCkgeworICAgICAgICBtcF9jbGVhcigmYmlnVmFsdWUpOworICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKyAgICB9CisgICAgaWYgKG1wX3RvX3Vuc2lnbmVkX2Jpbl9uKCZiaWdWYWx1ZSwgYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1CeXRlcykgIT0gTVBfT0tBWSkgeworICAgICAgICBtcF9jbGVhcigmYmlnVmFsdWUpOworICAgICAgICBQeU1lbV9GcmVlKGJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgfQorICAgIHJlcyA9IF9QeUxvbmdfRnJvbUJ5dGVBcnJheShieXRlcywgbnVtQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJpZy1lbmRpYW4gKi8gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5zaWduZWQgKi8gMCk7CisgICAgUHlNZW1fRnJlZShieXRlcyk7CisgICAgaWYgKHJlcyAhPSBOVUxMICYmIGJpZ1ZhbHVlLnNpZ24gPT0gTVBfTkVHKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXMyID0gUHlOdW1iZXJfTmVnYXRpdmUocmVzKTsKKyAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgIHJlcyA9IHJlczI7CisgICAgfQorICAgIG1wX2NsZWFyKCZiaWdWYWx1ZSk7CisgICAgcmV0dXJuIHJlczsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiBGcm9tT2JqKFB5T2JqZWN0KiB0a2FwcCwgVGNsX09iaiAqdmFsdWUpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgVGthcHBPYmplY3QgKmFwcCA9IChUa2FwcE9iamVjdCopdGthcHA7CisgICAgVGNsX0ludGVycCAqaW50ZXJwID0gVGthcHBfSW50ZXJwKHRrYXBwKTsKIAogICAgIGlmICh2YWx1ZS0+dHlwZVB0ciA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiB1bmljb2RlRnJvbVRjbFN0cmluZ0FuZFNpemUodmFsdWUtPmJ5dGVzLCB2YWx1ZS0+bGVuZ3RoKTsKICAgICB9CiAKLSAgICBpZiAodmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5Cb29sZWFuVHlwZSkgewotICAgICAgICByZXN1bHQgPSB2YWx1ZS0+aW50ZXJuYWxSZXAubG9uZ1ZhbHVlID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOwotICAgICAgICBQeV9JTkNSRUYocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICBpZiAodmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5Cb29sZWFuVHlwZSB8fAorICAgICAgICB2YWx1ZS0+dHlwZVB0ciA9PSBhcHAtPk9sZEJvb2xlYW5UeXBlKSB7CisgICAgICAgIHJldHVybiBmcm9tQm9vbGVhbih0a2FwcCwgdmFsdWUpOwogICAgIH0KIAogICAgIGlmICh2YWx1ZS0+dHlwZVB0ciA9PSBhcHAtPkJ5dGVBcnJheVR5cGUpIHsKQEAgLTEwOTYsMjQgKzExNTAsNDcgQEAKICAgICB9CiAKICAgICBpZiAodmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5JbnRUeXBlKSB7Ci0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodmFsdWUtPmludGVybmFsUmVwLmxvbmdWYWx1ZSk7CisgICAgICAgIGxvbmcgbG9uZ1ZhbHVlOworICAgICAgICBpZiAoVGNsX0dldExvbmdGcm9tT2JqKGludGVycCwgdmFsdWUsICZsb25nVmFsdWUpID09IFRDTF9PSykKKyAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcobG9uZ1ZhbHVlKTsKKyAgICAgICAgLyogSWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIGxvbmcgY29udmVyc2lvbiwKKyAgICAgICAgICAgZmFsbCB0aHJvdWdoIHRvIHdpZGVJbnQgaGFuZGxpbmcuICovCiAgICAgfQogCisjaWZkZWYgVENMX1dJREVfSU5UX1RZUEUKKyAgICBpZiAodmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5JbnRUeXBlIHx8CisgICAgICAgIHZhbHVlLT50eXBlUHRyID09IGFwcC0+V2lkZUludFR5cGUpIHsKKyAgICAgICAgcmVzdWx0ID0gZnJvbVdpZGVJbnRPYmoodGthcHAsIHZhbHVlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBOVUxMIHx8IFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBUY2xfUmVzZXRSZXN1bHQoaW50ZXJwKTsKKyAgICAgICAgLyogSWYgdGhlcmUgaXMgYW4gZXJyb3IgaW4gdGhlIHdpZGVJbnQgY29udmVyc2lvbiwKKyAgICAgICAgICAgZmFsbCB0aHJvdWdoIHRvIGJpZ251bSBoYW5kbGluZy4gKi8KKyAgICB9CisjZW5kaWYKKworI2lmZGVmIEhBVkVfTElCVE9NTUFNVEgKKyAgICBpZiAodmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5JbnRUeXBlIHx8CisgICAgICAgIHZhbHVlLT50eXBlUHRyID09IGFwcC0+V2lkZUludFR5cGUgfHwKKyAgICAgICAgdmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5CaWdudW1UeXBlKSB7CisgICAgICAgIHJldHVybiBmcm9tQmlnbnVtT2JqKHRrYXBwLCB2YWx1ZSk7CisgICAgfQorI2VuZGlmCisKICAgICBpZiAodmFsdWUtPnR5cGVQdHIgPT0gYXBwLT5MaXN0VHlwZSkgewogICAgICAgICBpbnQgc2l6ZTsKICAgICAgICAgaW50IGksIHN0YXR1czsKICAgICAgICAgUHlPYmplY3QgKmVsZW07CiAgICAgICAgIFRjbF9PYmogKnRjbF9lbGVtOwogCi0gICAgICAgIHN0YXR1cyA9IFRjbF9MaXN0T2JqTGVuZ3RoKFRrYXBwX0ludGVycCh0a2FwcCksIHZhbHVlLCAmc2l6ZSk7CisgICAgICAgIHN0YXR1cyA9IFRjbF9MaXN0T2JqTGVuZ3RoKGludGVycCwgdmFsdWUsICZzaXplKTsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBUQ0xfRVJST1IpCiAgICAgICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcih0a2FwcCk7CiAgICAgICAgIHJlc3VsdCA9IFB5VHVwbGVfTmV3KHNpemUpOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgICAgICBzdGF0dXMgPSBUY2xfTGlzdE9iakluZGV4KFRrYXBwX0ludGVycCh0a2FwcCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBpLCAmdGNsX2VsZW0pOworICAgICAgICAgICAgc3RhdHVzID0gVGNsX0xpc3RPYmpJbmRleChpbnRlcnAsIHZhbHVlLCBpLCAmdGNsX2VsZW0pOwogICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSBUQ0xfRVJST1IpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gVGtpbnRlcl9FcnJvcih0a2FwcCk7CkBAIC0xMTM4LDYgKzEyMTUsMjQgQEAKICAgICAgICAgICAgIFRjbF9HZXRDaGFyTGVuZ3RoKHZhbHVlKSk7CiAgICAgfQogCisjaWYgVEtfSEVYX1ZFUlNJT04gPj0gMHgwODA1MDAwMAorICAgIGlmIChhcHAtPkJvb2xlYW5UeXBlID09IE5VTEwgJiYKKyAgICAgICAgc3RyY21wKHZhbHVlLT50eXBlUHRyLT5uYW1lLCAiYm9vbGVhblN0cmluZyIpID09IDApIHsKKyAgICAgICAgLyogYm9vbGVhblN0cmluZyB0eXBlIGlzIG5vdCByZWdpc3RlcmVkIGluIFRjbCAqLworICAgICAgICBhcHAtPkJvb2xlYW5UeXBlID0gdmFsdWUtPnR5cGVQdHI7CisgICAgICAgIHJldHVybiBmcm9tQm9vbGVhbih0a2FwcCwgdmFsdWUpOworICAgIH0KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9MSUJUT01NQU1USAorICAgIGlmIChhcHAtPkJpZ251bVR5cGUgPT0gTlVMTCAmJgorICAgICAgICBzdHJjbXAodmFsdWUtPnR5cGVQdHItPm5hbWUsICJiaWdudW0iKSA9PSAwKSB7CisgICAgICAgIC8qIGJpZ251bSB0eXBlIGlzIG5vdCByZWdpc3RlcmVkIGluIFRjbCAqLworICAgICAgICBhcHAtPkJpZ251bVR5cGUgPSB2YWx1ZS0+dHlwZVB0cjsKKyAgICAgICAgcmV0dXJuIGZyb21CaWdudW1PYmoodGthcHAsIHZhbHVlKTsKKyAgICB9CisjZW5kaWYKKwogICAgIHJldHVybiBuZXdQeVRjbE9iamVjdCh2YWx1ZSk7CiB9CiAKQEAgLTExOTIsNyArMTI4Nyw3IEBACiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsICJ0dXBsZSBpcyB0b28gbG9uZyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgb2JqdiA9IChUY2xfT2JqICoqKWNrYWxsb2MoKChzaXplX3Qpb2JqYykgKiBzaXplb2YoVGNsX09iaiAqKSk7CisgICAgICAgICAgICBvYmp2ID0gKFRjbF9PYmogKiopYXR0ZW1wdGNrYWxsb2MoKChzaXplX3Qpb2JqYykgKiBzaXplb2YoVGNsX09iaiAqKSk7CiAgICAgICAgICAgICBpZiAob2JqdiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgICAgICBvYmpjID0gMDsKQEAgLTEzMjgsNyArMTQyMywxMSBAQAogICAgICAgICBQeU9iamVjdCAqZXhjX3R5cGUsICpleGNfdmFsdWUsICpleGNfdGI7CiAgICAgICAgIGlmICghV2FpdEZvck1haW5sb29wKHNlbGYpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGV2ID0gKFRrYXBwX0NhbGxFdmVudCopY2thbGxvYyhzaXplb2YoVGthcHBfQ2FsbEV2ZW50KSk7CisgICAgICAgIGV2ID0gKFRrYXBwX0NhbGxFdmVudCopYXR0ZW1wdGNrYWxsb2Moc2l6ZW9mKFRrYXBwX0NhbGxFdmVudCkpOworICAgICAgICBpZiAoZXYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGV2LT5ldi5wcm9jID0gKFRjbF9FdmVudFByb2MqKVRrYXBwX0NhbGxQcm9jOwogICAgICAgICBldi0+c2VsZiA9IHNlbGY7CiAgICAgICAgIGV2LT5hcmdzID0gYXJnczsKQEAgLTEzNzYsNDIgKzE0NzUsNiBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxDYWxsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICAvKiBDb3VsZCBkbyB0aGUgc2FtZSBoZXJlIGFzIGZvciBUa2FwcF9DYWxsKCksIGJ1dCB0aGlzIGlzIG5vdCB1c2VkCi0gICAgICAgbXVjaCwgc28gSSBjYW4ndCBiZSBib3RoZXJlZC4gIFVuZm9ydHVuYXRlbHkgVGNsIGRvZXNuJ3QgZXhwb3J0IGEKLSAgICAgICB3YXkgZm9yIHRoZSB1c2VyIHRvIGRvIHdoYXQgYWxsIGl0cyBHbG9iYWwqIHZhcmlhbnRzIGRvIChzYXZlIGFuZAotICAgICAgIHJlc2V0IHRoZSBzY29wZSBwb2ludGVyLCBjYWxsIHRoZSBsb2NhbCB2ZXJzaW9uLCByZXN0b3JlIHRoZSBzYXZlZAotICAgICAgIHNjb3BlIHBvaW50ZXIpLiAqLwotCi0gICAgY2hhciAqY21kOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotCi0gICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAiZ2xvYmFsY2FsbCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gMy40IiwKLSAgICAgICAgICAgICAgICAgICAgIDEpIDwgMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIGNtZCAgPSBNZXJnZShhcmdzKTsKLSAgICBpZiAoY21kKSB7Ci0gICAgICAgIGludCBlcnI7Ci0gICAgICAgIEVOVEVSX1RDTAotICAgICAgICBlcnIgPSBUY2xfR2xvYmFsRXZhbChUa2FwcF9JbnRlcnAoc2VsZiksIGNtZCk7Ci0gICAgICAgIEVOVEVSX09WRVJMQVAKLSAgICAgICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgICAgICByZXMgPSBUa2ludGVyX0Vycm9yKHNlbGYpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgICAgICBMRUFWRV9PVkVSTEFQX1RDTAotICAgICAgICBja2ZyZWUoY21kKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgogVGthcHBfRXZhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY2hhciAqc2NyaXB0OwpAQCAtMTQyMSw2ICsxNDg0LDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6ZXZhbCIsICZzY3JpcHQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIENIRUNLX1NUUklOR19MRU5HVEgoc2NyaXB0KTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIAogICAgIEVOVEVSX1RDTApAQCAtMTQzNSwzNCArMTQ5OSw2IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9HbG9iYWxFdmFsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBjaGFyICpzY3JpcHQ7Ci0gICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7Ci0gICAgaW50IGVycjsKLQotICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgImdsb2JhbGV2YWwgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIDMuNCIsCi0gICAgICAgICAgICAgICAgICAgICAxKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdsb2JhbGV2YWwiLCAmc2NyaXB0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKLQotICAgIEVOVEVSX1RDTAotICAgIGVyciA9IFRjbF9HbG9iYWxFdmFsKFRrYXBwX0ludGVycChzZWxmKSwgc2NyaXB0KTsKLSAgICBFTlRFUl9PVkVSTEFQCi0gICAgaWYgKGVyciA9PSBUQ0xfRVJST1IpCi0gICAgICAgIHJlcyA9IFRraW50ZXJfRXJyb3Ioc2VsZik7Ci0gICAgZWxzZQotICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhUa2FwcF9SZXN1bHQoc2VsZikpOwotICAgIExFQVZFX09WRVJMQVBfVENMCi0gICAgcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIFRrYXBwX0V2YWxGaWxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpmaWxlTmFtZTsKQEAgLTE0NzIsNiArMTUwOCw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmV2YWxmaWxlIiwgJmZpbGVOYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKGZpbGVOYW1lKTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIAogICAgIEVOVEVSX1RDTApAQCAtMTQ5Miw5ICsxNTI5LDEwIEBACiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgaW50IGVycjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyIsICZzY3JpcHQpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpyZWNvcmQiLCAmc2NyaXB0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHNjcmlwdCk7CiAgICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7CiAKICAgICBFTlRFUl9UQ0wKQEAgLTE1MTUsMTQgKzE1NTMsMTQgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczphZGRlcnJvcmluZm8iLCAmbXNnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChtc2cpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogCiAgICAgRU5URVJfVENMCiAgICAgVGNsX0FkZEVycm9ySW5mbyhUa2FwcF9JbnRlcnAoc2VsZiksIG1zZyk7CiAgICAgTEVBVkVfVENMCiAKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIApAQCAtMTY0MCw4ICsxNjc4LDExIEBACiAgICAgICAgIGlmICghV2FpdEZvck1haW5sb29wKHNlbGYpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAgICAgZXYgPSAoVmFyRXZlbnQqKWNrYWxsb2Moc2l6ZW9mKFZhckV2ZW50KSk7Ci0KKyAgICAgICAgZXYgPSAoVmFyRXZlbnQqKWF0dGVtcHRja2FsbG9jKHNpemVvZihWYXJFdmVudCkpOworICAgICAgICBpZiAoZXYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGV2LT5zZWxmID0gc2VsZnB0cjsKICAgICAgICAgZXYtPmFyZ3MgPSBhcmdzOwogICAgICAgICBldi0+ZmxhZ3MgPSBmbGFnczsKQEAgLTE2OTksNiArMTc0MCw4IEBACiAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3NPOnNldHZhciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZTEsICZuYW1lMiwgJm5ld1ZhbHVlKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBDSEVDS19TVFJJTkdfTEVOR1RIKG5hbWUxKTsKKyAgICAgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChuYW1lMik7CiAgICAgICAgIC8qIFhYWCBtdXN0IGhvbGQgdGNsIGxvY2sgYWxyZWFkeT8/PyAqLwogICAgICAgICBuZXd2YWwgPSBBc09iaihuZXdWYWx1ZSk7CiAgICAgICAgIEVOVEVSX1RDTApAQCAtMTc0NCwxMSArMTc4NywxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJuYW1lX2NvbnZlcnRlciwgJm5hbWUxLCAmbmFtZTIpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIENIRUNLX1NUUklOR19MRU5HVEgobmFtZTIpOwogICAgIEVOVEVSX1RDTAogICAgIHRyZXMgPSBUY2xfR2V0VmFyMkV4KFRrYXBwX0ludGVycChzZWxmKSwgbmFtZTEsIG5hbWUyLCBmbGFncyk7CiAgICAgRU5URVJfT1ZFUkxBUAogICAgIGlmICh0cmVzID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsIFRjbF9HZXRTdHJpbmdSZXN1bHQoVGthcHBfSW50ZXJwKHNlbGYpKSk7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoKChUa2FwcE9iamVjdCopc2VsZiktPndhbnRvYmplY3RzKSB7CiAgICAgICAgICAgICByZXMgPSBGcm9tT2JqKHNlbGYsIHRyZXMpOwpAQCAtMTc4NSw2ICsxODMwLDggQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInN8czp1bnNldHZhciIsICZuYW1lMSwgJm5hbWUyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKG5hbWUxKTsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKG5hbWUyKTsKICAgICBFTlRFUl9UQ0wKICAgICBjb2RlID0gVGNsX1Vuc2V0VmFyMihUa2FwcF9JbnRlcnAoc2VsZiksIG5hbWUxLCBuYW1lMiwgZmxhZ3MpOwogICAgIEVOVEVSX09WRVJMQVAKQEAgLTE4MDcsNyArMTg1NCw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogVGthcHBfR2xvYmFsVW5zZXRWYXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiB2YXJfaW52b2tlKFVuc2V0VmFyLCBzZWxmLCBhcmdzLCBUQ0xfTEVBVkVfRVJSX01TRyB8IFRDTF9HTE9CQUxfT05MWSk7CisgICAgcmV0dXJuIHZhcl9pbnZva2UoVW5zZXRWYXIsIHNlbGYsIGFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgVENMX0xFQVZFX0VSUl9NU0cgfCBUQ0xfR0xPQkFMX09OTFkpOwogfQogCiAKQEAgLTE4MTgsNyArMTg2NiwxMiBAQAogVGthcHBfR2V0SW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBjaGFyICpzOwotICAgIGludCB2OworI2lmIGRlZmluZWQoVENMX1dJREVfSU5UX1RZUEUpIHx8IGRlZmluZWQoSEFWRV9MSUJUT01NQU1USCkKKyAgICBUY2xfT2JqICp2YWx1ZTsKKyAgICBQeU9iamVjdCAqcmVzdWx0OworI2Vsc2UKKyAgICBpbnQgaW50VmFsdWU7CisjZW5kaWYKIAogICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykgPT0gMSkgewogICAgICAgICBQeU9iamVjdCogbyA9IFB5VHVwbGVfR2V0SXRlbShhcmdzLCAwKTsKQEAgLTE4MjksOSArMTg4MiwzMCBAQAogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6Z2V0aW50IiwgJnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoVGNsX0dldEludChUa2FwcF9JbnRlcnAoc2VsZiksIHMsICZ2KSA9PSBUQ0xfRVJST1IpCisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKKyNpZiBkZWZpbmVkKFRDTF9XSURFX0lOVF9UWVBFKSB8fCBkZWZpbmVkKEhBVkVfTElCVE9NTUFNVEgpCisgICAgdmFsdWUgPSBUY2xfTmV3U3RyaW5nT2JqKHMsIC0xKTsKKyAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3Ioc2VsZik7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCB2KTsKKyAgICAvKiBEb24ndCB1c2UgVGNsX0dldEludCgpIGJlY2F1c2UgaXQgcmV0dXJucyBhbWJpZ3VvdXMgcmVzdWx0IGZvciB2YWx1ZQorICAgICAgIGluIHJhbmdlcyAtMioqMzIuLi0yKiozMS0xIGFuZCAyKiozMS4uMioqMzItMSAob24gMzItYml0IHBsYXRmb3JtKS4KKworICAgICAgIFByZWZlciBiaWdudW0gYmVjYXVzZSBUY2xfR2V0V2lkZUludEZyb21PYmogcmV0dXJucyBhbWJpZ3VvdXMgcmVzdWx0IGZvcgorICAgICAgIHZhbHVlIGluIHJhbmdlcyAtMioqNjQuLi0yKio2My0xIGFuZCAyKio2My4uMioqNjQtMSAob24gMzItYml0IHBsYXRmb3JtKS4KKyAgICAgKi8KKyNpZmRlZiBIQVZFX0xJQlRPTU1BTVRICisgICAgcmVzdWx0ID0gZnJvbUJpZ251bU9iaihzZWxmLCB2YWx1ZSk7CisjZWxzZQorICAgIHJlc3VsdCA9IGZyb21XaWRlSW50T2JqKHNlbGYsIHZhbHVlKTsKKyNlbmRpZgorICAgIFRjbF9EZWNyUmVmQ291bnQodmFsdWUpOworICAgIGlmIChyZXN1bHQgIT0gTlVMTCB8fCBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gcmVzdWx0OworI2Vsc2UKKyAgICBpZiAoVGNsX0dldEludChUa2FwcF9JbnRlcnAoc2VsZiksIHMsICZpbnRWYWx1ZSkgPT0gVENMX09LKQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGludFZhbHVlKTsKKyNlbmRpZgorICAgIHJldHVybiBUa2ludGVyX0Vycm9yKHNlbGYpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTg0OSwyNiArMTkyMywzMyBAQAogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6Z2V0ZG91YmxlIiwgJnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOwogICAgIGlmIChUY2xfR2V0RG91YmxlKFRrYXBwX0ludGVycChzZWxmKSwgcywgJnYpID09IFRDTF9FUlJPUikKICAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3Ioc2VsZik7CiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImQiLCB2KTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLVRrYXBwX0dldEJvb2xlYW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorVGthcHBfR2V0Qm9vbGVhbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKIHsKICAgICBjaGFyICpzOwogICAgIGludCB2OwogCi0gICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSA9PSAxKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvID0gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIDApOwotICAgICAgICBpZiAoUHlMb25nX0NoZWNrKG8pKSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYobyk7Ci0gICAgICAgICAgICByZXR1cm4gbzsKLSAgICAgICAgfQorICAgIGlmIChQeUxvbmdfQ2hlY2soYXJnKSkgeyAvKiBpbnQgb3IgYm9vbCAqLworICAgICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKFB5X1NJWkUoYXJnKSAhPSAwKTsKICAgICB9Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmdldGJvb2xlYW4iLCAmcykpCisKKyAgICBpZiAoUHlUY2xPYmplY3RfQ2hlY2soYXJnKSkgeworICAgICAgICBpZiAoVGNsX0dldEJvb2xlYW5Gcm9tT2JqKFRrYXBwX0ludGVycChzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKFB5VGNsT2JqZWN0KilhcmcpLT52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdikgPT0gVENMX0VSUk9SKQorICAgICAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3Ioc2VsZik7CisgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcodik7CisgICAgfQorCisgICAgaWYgKCFQeUFyZ19QYXJzZShhcmcsICJzOmdldGJvb2xlYW4iLCAmcykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgocyk7CiAgICAgaWYgKFRjbF9HZXRCb29sZWFuKFRrYXBwX0ludGVycChzZWxmKSwgcywgJnYpID09IFRDTF9FUlJPUikKICAgICAgICAgcmV0dXJuIFRraW50ZXJfRXJyb3Ioc2VsZik7CiAgICAgcmV0dXJuIFB5Qm9vbF9Gcm9tTG9uZyh2KTsKQEAgLTE4ODQsNiArMTk2NSw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzOmV4cHJzdHJpbmciLCAmcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIAogICAgIEVOVEVSX1RDTApAQCAtMTkwOCw2ICsxOTkwLDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6ZXhwcmxvbmciLCAmcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgQ0hFQ0tfU1RSSU5HX0xFTkdUSChzKTsKICAgICBDSEVDS19UQ0xfQVBQQVJUTUVOVDsKIAogICAgIEVOVEVSX1RDTApAQCAtMTkzMSw2ICsyMDE0LDcgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpleHByZG91YmxlIiwgJnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHMpOwogICAgIENIRUNLX1RDTF9BUFBBUlRNRU5UOwogICAgIFB5RlBFX1NUQVJUX1BST1RFQ1QoIlRrYXBwX0V4cHJEb3VibGUiLCByZXR1cm4gMCkKICAgICBFTlRFUl9UQ0wKQEAgLTE5NTUsNiArMjAzOSw3IEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInM6ZXhwcmJvb2xlYW4iLCAmcykpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgocyk7CiAgICAgQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7CiAgICAgRU5URVJfVENMCiAgICAgcmV0dmFsID0gVGNsX0V4cHJCb29sZWFuKFRrYXBwX0ludGVycChzZWxmKSwgcywgJnYpOwpAQCAtMjAwNyw2ICsyMDkyLDcgQEAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImV0OnNwbGl0bGlzdCIsICJ1dGYtOCIsICZsaXN0KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKGxpc3QpOwogICAgIGlmIChUY2xfU3BsaXRMaXN0KFRrYXBwX0ludGVycChzZWxmKSwgbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAmYXJnYywgJmFyZ3YpID09IFRDTF9FUlJPUikgIHsKICAgICAgICAgUHlNZW1fRnJlZShsaXN0KTsKQEAgLTIwNjgsMzIgKzIxNTQsMTIgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiZXQ6c3BsaXQiLCAidXRmLTgiLCAmbGlzdCkpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIENIRUNLX1NUUklOR19MRU5HVEgobGlzdCk7CiAgICAgdiA9IFNwbGl0KGxpc3QpOwogICAgIFB5TWVtX0ZyZWUobGlzdCk7CiAgICAgcmV0dXJuIHY7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1Ua2FwcF9NZXJnZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgY2hhciAqczsKLSAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKLQotICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAotICAgICAgICAgICAgICAgICAgICAgIm1lcmdlIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAzLjQiLAotICAgICAgICAgICAgICAgICAgICAgMSkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHMgPSBNZXJnZShhcmdzKTsKLQotICAgIGlmIChzKSB7Ci0gICAgICAgIHJlcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHMpOwotICAgICAgICBja2ZyZWUocyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlczsKLX0KLQogCiAKIC8qKiBUY2wgQ29tbWFuZCAqKi8KQEAgLTIyMjAsNiArMjI4Niw3IEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInNPOmNyZWF0ZWNvbW1hbmQiLCAmY21kTmFtZSwgJmZ1bmMpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKGNtZE5hbWUpOwogICAgIGlmICghUHlDYWxsYWJsZV9DaGVjayhmdW5jKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAiY29tbWFuZCBub3QgY2FsbGFibGUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMjQxLDcgKzIzMDgsMTIgQEAKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIGlmIChzZWxmLT50aHJlYWRlZCAmJiBzZWxmLT50aHJlYWRfaWQgIT0gVGNsX0dldEN1cnJlbnRUaHJlYWQoKSkgewogICAgICAgICBUY2xfQ29uZGl0aW9uIGNvbmQgPSBOVUxMOwotICAgICAgICBDb21tYW5kRXZlbnQgKmV2ID0gKENvbW1hbmRFdmVudCopY2thbGxvYyhzaXplb2YoQ29tbWFuZEV2ZW50KSk7CisgICAgICAgIENvbW1hbmRFdmVudCAqZXYgPSAoQ29tbWFuZEV2ZW50KilhdHRlbXB0Y2thbGxvYyhzaXplb2YoQ29tbWFuZEV2ZW50KSk7CisgICAgICAgIGlmIChldiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgUHlNZW1fREVMKGRhdGEpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgZXYtPmV2LnByb2MgPSAoVGNsX0V2ZW50UHJvYyopVGthcHBfQ29tbWFuZFByb2M7CiAgICAgICAgIGV2LT5pbnRlcnAgPSBzZWxmLT5pbnRlcnA7CiAgICAgICAgIGV2LT5jcmVhdGUgPSAxOwpAQCAtMjI2Nyw4ICsyMzM5LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTIyODIsMTIgKzIzNTMsMTcgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiczpkZWxldGVjb21tYW5kIiwgJmNtZE5hbWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKGNtZE5hbWUpOwogCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoc2VsZi0+dGhyZWFkZWQgJiYgc2VsZi0+dGhyZWFkX2lkICE9IFRjbF9HZXRDdXJyZW50VGhyZWFkKCkpIHsKICAgICAgICAgVGNsX0NvbmRpdGlvbiBjb25kID0gTlVMTDsKICAgICAgICAgQ29tbWFuZEV2ZW50ICpldjsKLSAgICAgICAgZXYgPSAoQ29tbWFuZEV2ZW50Kilja2FsbG9jKHNpemVvZihDb21tYW5kRXZlbnQpKTsKKyAgICAgICAgZXYgPSAoQ29tbWFuZEV2ZW50KilhdHRlbXB0Y2thbGxvYyhzaXplb2YoQ29tbWFuZEV2ZW50KSk7CisgICAgICAgIGlmIChldiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgZXYtPmV2LnByb2MgPSAoVGNsX0V2ZW50UHJvYyopVGthcHBfQ29tbWFuZFByb2M7CiAgICAgICAgIGV2LT5pbnRlcnAgPSBzZWxmLT5pbnRlcnA7CiAgICAgICAgIGV2LT5jcmVhdGUgPSAwOwpAQCAtMjMwOSw4ICsyMzg1LDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsICJjYW4ndCBkZWxldGUgVGNsIGNvbW1hbmQiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCkBAIC0yNDE0LDggKzI0ODksNyBAQAogICAgIEVOVEVSX1RDTAogICAgIFRjbF9DcmVhdGVGaWxlSGFuZGxlcih0ZmlsZSwgbWFzaywgRmlsZUhhbmRsZXIsIChDbGllbnREYXRhKSBkYXRhKTsKICAgICBMRUFWRV9UQ0wKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNDM5LDE1ICsyNTEzLDE0IEBACiAgICAgRU5URVJfVENMCiAgICAgVGNsX0RlbGV0ZUZpbGVIYW5kbGVyKHRmaWxlKTsKICAgICBMRUFWRV9UQ0wKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9DUkVBVEVGSUxFSEFORExFUiAqLwogCiAKIC8qKioqIFRrdHQgT2JqZWN0ICh0aW1lciB0b2tlbikgKioqKi8KIAotc3RhdGljIFB5VHlwZU9iamVjdCBUa3R0X1R5cGU7CitzdGF0aWMgUHlPYmplY3QgKlRrdHRfVHlwZTsKIAogdHlwZWRlZiBzdHJ1Y3QgewogICAgIFB5T2JqZWN0X0hFQUQKQEAgLTI0NzIsOCArMjU0NSw3IEBACiAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKICAgICAgICAgUHlfREVDUkVGKHYpOyAvKiBTZWUgVGt0dF9OZXcoKSAqLwogICAgIH0KLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBUa3R0X21ldGhvZHNbXSA9CkBAIC0yNDg3LDkgKzI1NTksMTAgQEAKIHsKICAgICBUa3R0T2JqZWN0ICp2OwogCi0gICAgdiA9IFB5T2JqZWN0X05ldyhUa3R0T2JqZWN0LCAmVGt0dF9UeXBlKTsKKyAgICB2ID0gUHlPYmplY3RfTmV3KFRrdHRPYmplY3QsIChQeVR5cGVPYmplY3QgKikgVGt0dF9UeXBlKTsKICAgICBpZiAodiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoVGt0dF9UeXBlKTsKIAogICAgIFB5X0lOQ1JFRihmdW5jKTsKICAgICB2LT50b2tlbiA9IE5VTEw7CkBAIC0yNTA1LDEwICsyNTc4LDEyIEBACiB7CiAgICAgVGt0dE9iamVjdCAqdiA9IChUa3R0T2JqZWN0ICopc2VsZjsKICAgICBQeU9iamVjdCAqZnVuYyA9IHYtPmZ1bmM7CisgICAgUHlPYmplY3QgKnRwID0gKFB5T2JqZWN0ICopIFB5X1RZUEUoc2VsZik7CiAKICAgICBQeV9YREVDUkVGKGZ1bmMpOwogCiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFB5X0RFQ1JFRih0cCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNTIwLDM4ICsyNTk1LDIwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPmZ1bmMgPT0gTlVMTCA/ICIsIGhhbmRsZXIgZGVsZXRlZCIgOiAiIik7CiB9CiAKLXN0YXRpYyBQeVR5cGVPYmplY3QgVGt0dF9UeXBlID0KLXsKLSAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKLSAgICAidGt0aW1lcnRva2VuIiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbmFtZSAqLwotICAgIHNpemVvZihUa3R0T2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9iYXNpY3NpemUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlbXNpemUgKi8KLSAgICBUa3R0X0RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZGVhbGxvYyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9wcmludCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVzZXJ2ZWQgKi8KLSAgICBUa3R0X1JlcHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmVwciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfc2VxdWVuY2UgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfbWFwcGluZyAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9zdHIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRybyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfYXNfYnVmZmVyKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQsICAgICAgICAgICAgICAgICAgICAgIC8qdHBfZmxhZ3MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kb2MqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF90cmF2ZXJzZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2NsZWFyKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfcmljaGNvbXBhcmUqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVybmV4dCovCi0gICAgVGt0dF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworc3RhdGljIFB5VHlwZV9TbG90IFRrdHRfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCBUa3R0X0RlYWxsb2N9LAorICAgIHtQeV90cF9yZXByLCBUa3R0X1JlcHJ9LAorICAgIHtQeV90cF9tZXRob2RzLCBUa3R0X21ldGhvZHN9LAorICAgIHswLCAwfQogfTsKIAorc3RhdGljIFB5VHlwZV9TcGVjIFRrdHRfVHlwZV9zcGVjID0geworICAgICJfdGtpbnRlci50a3RpbWVydG9rZW4iLAorICAgIHNpemVvZihUa3R0T2JqZWN0KSwKKyAgICAwLAorICAgIFB5X1RQRkxBR1NfREVGQVVMVCwKKyAgICBUa3R0X1R5cGVfc2xvdHMsCit9OwogCiAKIC8qKiBUaW1lciBIYW5kbGVyICoqLwpAQCAtMjY3Myw4ICsyNzMwLDcgQEAKICAgICAgICAgZXhjSW5DbWQgPSB2YWxJbkNtZCA9IHRyYkluQ21kID0gTlVMTDsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3MDAsOCArMjc1Niw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcXVpdE1haW5Mb29wID0gMTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgcmV0dXJuIFB5X05vbmU7CisgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yNzUxLDE1ICsyODA2LDE1IEBACiAgICAgfQogICAgIGlmIChfdGtfZXhpc3RzID09IE5VTEwgfHwgc3RyY21wKF90a19leGlzdHMsICIxIikgIT0gMCkgICAgIHsKICAgICAgICAgaWYgKFRrX0luaXQoaW50ZXJwKSAgICAgICAgICAgICA9PSBUQ0xfRVJST1IpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhUa2ludGVyX1RjbEVycm9yLCBUY2xfR2V0U3RyaW5nUmVzdWx0KFRrYXBwX0ludGVycChzZWxmKSkpOworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFRraW50ZXJfVGNsRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGNsX0dldFN0cmluZ1Jlc3VsdChUa2FwcF9JbnRlcnAoc2VsZikpKTsKICNpZmRlZiBUS0lOVEVSX1BST1RFQ1RfTE9BRFRLCiAgICAgICAgICAgICB0a19sb2FkX2ZhaWxlZCA9IDE7CiAjZW5kaWYKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3NzMsOCArMjgyOCw3IEBACiAgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKChUa2FwcE9iamVjdCopc2VsZiktPndhbnRvYmplY3RzKTsKICAgICAoKFRrYXBwT2JqZWN0KilzZWxmKS0+d2FudG9iamVjdHMgPSB3YW50b2JqZWN0czsKIAotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTI3ODMsOCArMjgzNyw3IEBACiAKICAgICAoKFRrYXBwT2JqZWN0KilzZWxmKS0+ZGlzcGF0Y2hpbmcgPSAxOwogCi0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIFB5X1JFVFVSTl9OT05FOwogfQogCiAKQEAgLTI3OTUsOSArMjg0OCw3IEBACiAgICAgeyJ3aWxsZGlzcGF0Y2giLCAgICAgICBUa2FwcF9XaWxsRGlzcGF0Y2gsIE1FVEhfTk9BUkdTfSwKICAgICB7IndhbnRvYmplY3RzIiwgICAgICAgICAgICBUa2FwcF9XYW50T2JqZWN0cywgTUVUSF9WQVJBUkdTfSwKICAgICB7ImNhbGwiLCAgICAgICAgICAgICAgICAgICBUa2FwcF9DYWxsLCBNRVRIX1ZBUkFSR1N9LAotICAgIHsiZ2xvYmFsY2FsbCIsICAgICAgICAgICAgIFRrYXBwX0dsb2JhbENhbGwsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJldmFsIiwgICAgICAgICAgICAgICAgICAgVGthcHBfRXZhbCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Imdsb2JhbGV2YWwiLCAgICAgICAgICAgICBUa2FwcF9HbG9iYWxFdmFsLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZXZhbGZpbGUiLCAgICAgICAgICAgICAgIFRrYXBwX0V2YWxGaWxlLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsicmVjb3JkIiwgICAgICAgICAgICAgICAgIFRrYXBwX1JlY29yZCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImFkZGVycm9yaW5mbyIsICAgICAgIFRrYXBwX0FkZEVycm9ySW5mbywgTUVUSF9WQVJBUkdTfSwKQEAgLTI4MDksMTQgKzI4NjAsMTMgQEAKICAgICB7Imdsb2JhbHVuc2V0dmFyIiwgICAgIFRrYXBwX0dsb2JhbFVuc2V0VmFyLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsiZ2V0aW50IiwgICAgICAgICAgICAgICAgIFRrYXBwX0dldEludCwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldGRvdWJsZSIsICAgICAgICAgICAgICBUa2FwcF9HZXREb3VibGUsIE1FVEhfVkFSQVJHU30sCi0gICAgeyJnZXRib29sZWFuIiwgICAgICAgICAgICAgVGthcHBfR2V0Qm9vbGVhbiwgTUVUSF9WQVJBUkdTfSwKKyAgICB7ImdldGJvb2xlYW4iLCAgICAgICAgICAgICBUa2FwcF9HZXRCb29sZWFuLCBNRVRIX099LAogICAgIHsiZXhwcnN0cmluZyIsICAgICAgICAgICAgIFRrYXBwX0V4cHJTdHJpbmcsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJleHBybG9uZyIsICAgICAgICAgICAgICAgVGthcHBfRXhwckxvbmcsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJleHByZG91YmxlIiwgICAgICAgICAgICAgVGthcHBfRXhwckRvdWJsZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImV4cHJib29sZWFuIiwgICAgICAgIFRrYXBwX0V4cHJCb29sZWFuLCBNRVRIX1ZBUkFSR1N9LAogICAgIHsic3BsaXRsaXN0IiwgICAgICAgICAgICAgIFRrYXBwX1NwbGl0TGlzdCwgTUVUSF9WQVJBUkdTfSwKICAgICB7InNwbGl0IiwgICAgICAgICAgICAgICAgICBUa2FwcF9TcGxpdCwgTUVUSF9WQVJBUkdTfSwKLSAgICB7Im1lcmdlIiwgICAgICAgICAgICAgICAgICBUa2FwcF9NZXJnZSwgTUVUSF9WQVJBUkdTfSwKICAgICB7ImNyZWF0ZWNvbW1hbmQiLCAgICAgIFRrYXBwX0NyZWF0ZUNvbW1hbmQsIE1FVEhfVkFSQVJHU30sCiAgICAgeyJkZWxldGVjb21tYW5kIiwgICAgICBUa2FwcF9EZWxldGVDb21tYW5kLCBNRVRIX1ZBUkFSR1N9LAogI2lmZGVmIEhBVkVfQ1JFQVRFRklMRUhBTkRMRVIKQEAgLTI4MzksNDQgKzI4ODksMjkgQEAKIHN0YXRpYyB2b2lkCiBUa2FwcF9EZWFsbG9jKFB5T2JqZWN0ICpzZWxmKQogeworICAgIFB5T2JqZWN0ICp0cCA9IChQeU9iamVjdCAqKSBQeV9UWVBFKHNlbGYpOwogICAgIC8qQ0hFQ0tfVENMX0FQUEFSVE1FTlQ7Ki8KICAgICBFTlRFUl9UQ0wKICAgICBUY2xfRGVsZXRlSW50ZXJwKFRrYXBwX0ludGVycChzZWxmKSk7CiAgICAgTEVBVkVfVENMCiAgICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgIFB5X0RFQ1JFRih0cCk7CiAgICAgRGlzYWJsZUV2ZW50SG9vaygpOwogfQogCi1zdGF0aWMgUHlUeXBlT2JqZWN0IFRrYXBwX1R5cGUgPQotewotICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVChOVUxMLCAwKQotICAgICJ0a2FwcCIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9uYW1lICovCi0gICAgc2l6ZW9mKFRrYXBwT2JqZWN0KSwgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2ljc2l6ZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9pdGVtc2l6ZSAqLwotICAgIFRrYXBwX0RlYWxsb2MsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9kZWFsbG9jICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHIgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yZXByICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2FzX251bWJlciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19tYXBwaW5nICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2hhc2ggKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2FsbCovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3N0ciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0cm8qLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9hc19idWZmZXIqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgICAgICAgICAgICAgICAgICAgICAgLyp0cF9mbGFncyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RvYyovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3RyYXZlcnNlKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfY2xlYXIqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9yaWNoY29tcGFyZSovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX3dlYWtsaXN0b2Zmc2V0Ki8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KLSAgICBUa2FwcF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfbWV0aG9kcyovCitzdGF0aWMgUHlUeXBlX1Nsb3QgVGthcHBfVHlwZV9zbG90c1tdID0geworICAgIHtQeV90cF9kZWFsbG9jLCBUa2FwcF9EZWFsbG9jfSwKKyAgICB7UHlfdHBfbWV0aG9kcywgVGthcHBfbWV0aG9kc30sCisgICAgezAsIDB9Cit9OworCisKK3N0YXRpYyBQeVR5cGVfU3BlYyBUa2FwcF9UeXBlX3NwZWMgPSB7CisgICAgIl90a2ludGVyLnRrYXBwIiwKKyAgICBzaXplb2YoVGthcHBPYmplY3QpLAorICAgIDAsCisgICAgUHlfVFBGTEFHU19ERUZBVUxULAorICAgIFRrYXBwX1R5cGVfc2xvdHMsCiB9OwogCiAKQEAgLTMwMTQsOSArMzA0OSwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50ZXJhY3RpdmUsICZ3YW50b2JqZWN0cywgJndhbnRUaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN5bmMsICZ1c2UpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHNjcmVlbk5hbWUpOworICAgIENIRUNLX1NUUklOR19MRU5HVEgoYmFzZU5hbWUpOworICAgIENIRUNLX1NUUklOR19MRU5HVEgoY2xhc3NOYW1lKTsKKyAgICBDSEVDS19TVFJJTkdfTEVOR1RIKHVzZSk7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIFRrYXBwX05ldyhzY3JlZW5OYW1lLCBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUsIHdhbnRvYmplY3RzLCAgICAgd2FudFRrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlLCB3YW50b2JqZWN0cywgd2FudFRrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bmMsIHVzZSk7CiB9CiAKQEAgLTMwMzIsOCArMzA3MSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBUa2ludGVyX2J1c3l3YWl0aW50ZXJ2YWwgPSBuZXdfdmFsOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogc3RhdGljIGNoYXIgc2V0YnVzeXdhaXRpbnRlcnZhbF9kb2NbXSA9CkBAIC0zMTY2LDI3ICszMjA0LDYgQEAKIH0KIAogCi0vKiBhbGwgZXJyb3JzIHdpbGwgYmUgY2hlY2tlZCBpbiBvbmUgZmVsbCBzd29vcCBpbiBpbml0X3RraW50ZXIoKSAqLwotc3RhdGljIHZvaWQKLWluc19sb25nKFB5T2JqZWN0ICpkLCBjaGFyICpuYW1lLCBsb25nIHZhbCkKLXsKLSAgICBQeU9iamVjdCAqdiA9IFB5TG9uZ19Gcm9tTG9uZyh2YWwpOwotICAgIGlmICh2KSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsIG5hbWUsIHYpOwotICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgfQotfQotc3RhdGljIHZvaWQKLWluc19zdHJpbmcoUHlPYmplY3QgKmQsIGNoYXIgKm5hbWUsIGNoYXIgKnZhbCkKLXsKLSAgICBQeU9iamVjdCAqdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHZhbCk7Ci0gICAgaWYgKHYpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgbmFtZSwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBfdGtpbnRlcm1vZHVsZSA9IHsKICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgIl90a2ludGVyIiwKQEAgLTMyMDIsNDUgKzMyMTksMTExIEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X190a2ludGVyKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKm0sICpkLCAqdWV4ZSwgKmNleGU7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZUa2FwcF9UeXBlKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOworICBQeU9iamVjdCAqbSwgKnVleGUsICpjZXhlLCAqbzsKIAogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgdGNsX2xvY2sgPSBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCk7CisgICAgaWYgKHRjbF9sb2NrID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogI2VuZGlmCiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfdGtpbnRlcm1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKLSAgICBUa2ludGVyX1RjbEVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGtpbnRlci5UY2xFcnJvciIsIE5VTEwsIE5VTEwpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUY2xFcnJvciIsIFRraW50ZXJfVGNsRXJyb3IpOwotCi0gICAgaW5zX2xvbmcoZCwgIlJFQURBQkxFIiwgVENMX1JFQURBQkxFKTsKLSAgICBpbnNfbG9uZyhkLCAiV1JJVEFCTEUiLCBUQ0xfV1JJVEFCTEUpOwotICAgIGluc19sb25nKGQsICJFWENFUFRJT04iLCBUQ0xfRVhDRVBUSU9OKTsKLSAgICBpbnNfbG9uZyhkLCAiV0lORE9XX0VWRU5UUyIsIFRDTF9XSU5ET1dfRVZFTlRTKTsKLSAgICBpbnNfbG9uZyhkLCAiRklMRV9FVkVOVFMiLCBUQ0xfRklMRV9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJUSU1FUl9FVkVOVFMiLCBUQ0xfVElNRVJfRVZFTlRTKTsKLSAgICBpbnNfbG9uZyhkLCAiSURMRV9FVkVOVFMiLCBUQ0xfSURMRV9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJBTExfRVZFTlRTIiwgVENMX0FMTF9FVkVOVFMpOwotICAgIGluc19sb25nKGQsICJET05UX1dBSVQiLCBUQ0xfRE9OVF9XQUlUKTsKLSAgICBpbnNfc3RyaW5nKGQsICJUS19WRVJTSU9OIiwgVEtfVkVSU0lPTik7Ci0gICAgaW5zX3N0cmluZyhkLCAiVENMX1ZFUlNJT04iLCBUQ0xfVkVSU0lPTik7Ci0KLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiVGthcHBUeXBlIiwgKFB5T2JqZWN0ICopJlRrYXBwX1R5cGUpOwotCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmVGt0dF9UeXBlKSA8IDApIHsKKyAgICBvID0gUHlFcnJfTmV3RXhjZXB0aW9uKCJfdGtpbnRlci5UY2xFcnJvciIsIE5VTEwsIE5VTEwpOworICAgIGlmIChvID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKG0pOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlRrdHRUeXBlIiwgKFB5T2JqZWN0ICopJlRrdHRfVHlwZSk7CisgICAgUHlfSU5DUkVGKG8pOworICAgIGlmIChQeU1vZHVsZV9BZGRPYmplY3QobSwgIlRjbEVycm9yIiwgbykpIHsKKyAgICAgICAgUHlfREVDUkVGKG8pOworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBUa2ludGVyX1RjbEVycm9yID0gbzsKIAotICAgIFB5X1RZUEUoJlB5VGNsT2JqZWN0X1R5cGUpID0gJlB5VHlwZV9UeXBlOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJUY2xfT2JqIiwgKFB5T2JqZWN0ICopJlB5VGNsT2JqZWN0X1R5cGUpOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkVBREFCTEUiLCBUQ0xfUkVBREFCTEUpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiV1JJVEFCTEUiLCBUQ0xfV1JJVEFCTEUpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVhDRVBUSU9OIiwgVENMX0VYQ0VQVElPTikpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJXSU5ET1dfRVZFTlRTIiwgVENMX1dJTkRPV19FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRklMRV9FVkVOVFMiLCBUQ0xfRklMRV9FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElNRVJfRVZFTlRTIiwgVENMX1RJTUVSX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJRExFX0VWRU5UUyIsIFRDTF9JRExFX0VWRU5UUykpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBTExfRVZFTlRTIiwgVENMX0FMTF9FVkVOVFMpKSB7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRE9OVF9XQUlUIiwgVENMX0RPTlRfV0FJVCkpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJUS19WRVJTSU9OIiwgVEtfVkVSU0lPTikpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJUQ0xfVkVSU0lPTiIsIFRDTF9WRVJTSU9OKSkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG8gPSBQeVR5cGVfRnJvbVNwZWMoJlRrYXBwX1R5cGVfc3BlYyk7CisgICAgaWYgKG8gPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYobSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJUa2FwcFR5cGUiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRrYXBwX1R5cGUgPSBvOworCisgICAgbyA9IFB5VHlwZV9Gcm9tU3BlYygmVGt0dF9UeXBlX3NwZWMpOworICAgIGlmIChvID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGt0dFR5cGUiLCBvKSkgeworICAgICAgICBQeV9ERUNSRUYobyk7CisgICAgICAgIFB5X0RFQ1JFRihtKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRrdHRfVHlwZSA9IG87CisKKyAgICBvID0gUHlUeXBlX0Zyb21TcGVjKCZQeVRjbE9iamVjdF9UeXBlX3NwZWMpOworICAgIGlmIChvID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFB5TW9kdWxlX0FkZE9iamVjdChtLCAiVGNsX09iaiIsIG8pKSB7CisgICAgICAgIFB5X0RFQ1JFRihvKTsKKyAgICAgICAgUHlfREVDUkVGKG0pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUY2xPYmplY3RfVHlwZSA9IG87CiAKICNpZmRlZiBUS19BUVVBCiAgICAgLyogVGtfTWFjT1NYU2V0dXBUa05vdGlmaWVyIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBUY2wncyBzdWJzeXN0ZW1zCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190cmFjZW1hbGxvYy5jIGIvTW9kdWxlcy9fdHJhY2VtYWxsb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDlmNGRiCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9fdHJhY2VtYWxsb2MuYwpAQCAtMCwwICsxLDE0MjkgQEAKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJoYXNodGFibGUuaCIKKyNpbmNsdWRlICJmcmFtZW9iamVjdC5oIgorI2luY2x1ZGUgInB5dGhyZWFkLmgiCisjaW5jbHVkZSAib3NkZWZzLmgiCisKKy8qIFRyYWNlIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5TWVtX1Jhd01hbGxvYygpICovCisjZGVmaW5lIFRSQUNFX1JBV19NQUxMT0MKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQgdHJhY2VtYWxsb2Nfc3RvcCh2b2lkKTsKK3N0YXRpYyB2b2lkKiByYXdfbWFsbG9jKHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIHJhd19mcmVlKHZvaWQgKnB0cik7CisKKyNpZmRlZiBQeV9ERUJVRworIyAgZGVmaW5lIFRSQUNFX0RFQlVHCisjZW5kaWYKKworI2RlZmluZSBfU1RSKFZBTCkgI1ZBTAorI2RlZmluZSBTVFIoVkFMKSBfU1RSKFZBTCkKKworLyogUHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KK3N0YXRpYyBzdHJ1Y3QgeworICAgIFB5TWVtQWxsb2NhdG9yIG1lbTsKKyAgICBQeU1lbUFsbG9jYXRvciByYXc7CisgICAgUHlNZW1BbGxvY2F0b3Igb2JqOworfSBhbGxvY2F0b3JzOworCitzdGF0aWMgc3RydWN0IHsKKyAgICAvKiBNb2R1bGUgaW5pdGlhbGl6ZWQ/CisgICAgICAgVmFyaWFibGUgcHJvdGVjdGVkIGJ5IHRoZSBHSUwgKi8KKyAgICBlbnVtIHsKKyAgICAgICAgVFJBQ0VNQUxMT0NfTk9UX0lOSVRJQUxJWkVELAorICAgICAgICBUUkFDRU1BTExPQ19JTklUSUFMSVpFRCwKKyAgICAgICAgVFJBQ0VNQUxMT0NfRklOQUxJWkVECisgICAgfSBpbml0aWFsaXplZDsKKworICAgIC8qIElzIHRyYWNlbWFsbG9jIHRyYWNpbmcgbWVtb3J5IGFsbG9jYXRpb25zPworICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMICovCisgICAgaW50IHRyYWNpbmc7CisKKyAgICAvKiBsaW1pdCBvZiB0aGUgbnVtYmVyIG9mIGZyYW1lcyBpbiBhIHRyYWNlYmFjaywgMSBieSBkZWZhdWx0LgorICAgICAgIFZhcmlhYmxlIHByb3RlY3RlZCBieSB0aGUgR0lMLiAqLworICAgIGludCBtYXhfbmZyYW1lOworfSB0cmFjZW1hbGxvY19jb25maWcgPSB7VFJBQ0VNQUxMT0NfTk9UX0lOSVRJQUxJWkVELCAwLCAxfTsKKworI2lmIGRlZmluZWQoVFJBQ0VfUkFXX01BTExPQykgJiYgZGVmaW5lZChXSVRIX1RIUkVBRCkKKy8qIFRoaXMgbG9jayBpcyBuZWVkZWQgYmVjYXVzZSB0cmFjZW1hbGxvY19mcmVlKCkgaXMgY2FsbGVkIHdpdGhvdXQKKyAgIHRoZSBHSUwgaGVsZCBmcm9tIFB5TWVtX1Jhd0ZyZWUoKS4gSXQgY2Fubm90IGFjcXVpcmUgdGhlIGxvY2sgYmVjYXVzZSBpdAorICAgd291bGQgaW50cm9kdWNlIGEgZGVhZGxvY2sgaW4gUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50KCkuICovCitzdGF0aWMgUHlUaHJlYWRfdHlwZV9sb2NrIHRhYmxlc19sb2NrOworIyAgZGVmaW5lIFRBQkxFU19MT0NLKCkgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKHRhYmxlc19sb2NrLCAxKQorIyAgZGVmaW5lIFRBQkxFU19VTkxPQ0soKSBQeVRocmVhZF9yZWxlYXNlX2xvY2sodGFibGVzX2xvY2spCisjZWxzZQorICAgLyogdmFyaWFibGVzIGFyZSBwcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworIyAgZGVmaW5lIFRBQkxFU19MT0NLKCkKKyMgIGRlZmluZSBUQUJMRVNfVU5MT0NLKCkKKyNlbmRpZgorCisvKiBQYWNrIHRoZSBmcmFtZV90IHN0cnVjdHVyZSB0byByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQgb24gNjQtYml0CisgICBhcmNoaXRlY3R1cmVzOiAxMiBieXRlcyBpbnN0ZWFkIG9mIDE2LiBUaGlzIG9wdGltaXphdGlvbiBtaWdodCBwcm9kdWNlCisgICBTSUdCVVMgb24gYXJjaGl0ZWN0dXJlcyBub3Qgc3VwcG9ydGluZyB1bmFsaWduZWQgbWVtb3J5IGFjY2Vzc2VzICg2NC1iaXQKKyAgIE1JUFMgQ1BVPyk6IG9uIHN1Y2ggYXJjaGl0ZWN0dXJlLCB0aGUgc3RydWN0dXJlIG11c3Qgbm90IGJlIHBhY2tlZC4gKi8KK3R5cGVkZWYgc3RydWN0CisjaWZkZWYgX19HTlVDX18KK19fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorX2RlY2xzcGVjKGFsaWduKDQpKQorI2VuZGlmCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIGludCBsaW5lbm87Cit9IGZyYW1lX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeV91aGFzaF90IGhhc2g7CisgICAgaW50IG5mcmFtZTsKKyAgICBmcmFtZV90IGZyYW1lc1sxXTsKK30gdHJhY2ViYWNrX3Q7CisKKyNkZWZpbmUgVFJBQ0VCQUNLX1NJWkUoTkZSQU1FKSBcCisgICAgICAgIChzaXplb2YodHJhY2ViYWNrX3QpICsgc2l6ZW9mKGZyYW1lX3QpICogKE5GUkFNRSAtIDEpKQorCisjZGVmaW5lIE1BWF9ORlJBTUUgXAorICAgICAgICAoKElOVF9NQVggLSBzaXplb2YodHJhY2ViYWNrX3QpKSAvIHNpemVvZihmcmFtZV90KSArIDEpCisKK3N0YXRpYyBQeU9iamVjdCAqdW5rbm93bl9maWxlbmFtZSA9IE5VTEw7CitzdGF0aWMgdHJhY2ViYWNrX3QgdHJhY2VtYWxsb2NfZW1wdHlfdHJhY2ViYWNrOworCisvKiBUcmFjZSBvZiBhIG1lbW9yeSBibG9jayAqLwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIFNpemUgb2YgdGhlIG1lbW9yeSBibG9jayBpbiBieXRlcyAqLworICAgIHNpemVfdCBzaXplOworCisgICAgLyogVHJhY2ViYWNrIHdoZXJlIHRoZSBtZW1vcnkgYmxvY2sgd2FzIGFsbG9jYXRlZCAqLworICAgIHRyYWNlYmFja190ICp0cmFjZWJhY2s7Cit9IHRyYWNlX3Q7CisKKy8qIFNpemUgaW4gYnl0ZXMgb2YgY3VycmVudGx5IHRyYWNlZCBtZW1vcnkuCisgICBQcm90ZWN0ZWQgYnkgVEFCTEVTX0xPQ0soKS4gKi8KK3N0YXRpYyBzaXplX3QgdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSA9IDA7CisKKy8qIFBlYWsgc2l6ZSBpbiBieXRlcyBvZiB0cmFjZWQgbWVtb3J5LgorICAgUHJvdGVjdGVkIGJ5IFRBQkxFU19MT0NLKCkuICovCitzdGF0aWMgc2l6ZV90IHRyYWNlbWFsbG9jX3BlYWtfdHJhY2VkX21lbW9yeSA9IDA7CisKKy8qIEhhc2ggdGFibGUgdXNlZCBhcyBhIHNldCB0byBpbnRlcm4gZmlsZW5hbWVzOgorICAgUHlPYmplY3QqID0+IFB5T2JqZWN0Ki4KKyAgIFByb3RlY3RlZCBieSB0aGUgR0lMICovCitzdGF0aWMgX1B5X2hhc2h0YWJsZV90ICp0cmFjZW1hbGxvY19maWxlbmFtZXMgPSBOVUxMOworCisvKiBCdWZmZXIgdG8gc3RvcmUgYSBuZXcgdHJhY2ViYWNrIGluIHRyYWNlYmFja19uZXcoKS4KKyAgIFByb3RlY3RlZCBieSB0aGUgR0lMLiAqLworc3RhdGljIHRyYWNlYmFja190ICp0cmFjZW1hbGxvY190cmFjZWJhY2sgPSBOVUxMOworCisvKiBIYXNoIHRhYmxlIHVzZWQgYXMgYSBzZXQgdG8gaW50ZXJuIHRyYWNlYmFja3M6CisgICB0cmFjZWJhY2tfdCogPT4gdHJhY2ViYWNrX3QqCisgICBQcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIF9QeV9oYXNodGFibGVfdCAqdHJhY2VtYWxsb2NfdHJhY2ViYWNrcyA9IE5VTEw7CisKKy8qIHBvaW50ZXIgKHZvaWQqKSA9PiB0cmFjZSAodHJhY2VfdCkuCisgICBQcm90ZWN0ZWQgYnkgVEFCTEVTX0xPQ0soKS4gKi8KK3N0YXRpYyBfUHlfaGFzaHRhYmxlX3QgKnRyYWNlbWFsbG9jX3RyYWNlcyA9IE5VTEw7CisKKyNpZmRlZiBUUkFDRV9ERUJVRworc3RhdGljIHZvaWQKK3RyYWNlbWFsbG9jX2Vycm9yKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgYXA7CisgICAgZnByaW50ZihzdGRlcnIsICJ0cmFjZW1hbGxvYzogIik7CisgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisgICAgdmZwcmludGYoc3RkZXJyLCBmb3JtYXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKKyAgICBmZmx1c2goc3RkZXJyKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChXSVRIX1RIUkVBRCkgJiYgZGVmaW5lZChUUkFDRV9SQVdfTUFMTE9DKQorI2RlZmluZSBSRUVOVFJBTlRfVEhSRUFETE9DQUwKKworLyogSWYgeW91ciBPUyBkb2VzIG5vdCBwcm92aWRlIG5hdGl2ZSB0aHJlYWQgbG9jYWwgc3RvcmFnZSwgeW91IGNhbiBpbXBsZW1lbnQKKyAgIGl0IG1hbnVhbGx5IHVzaW5nIGEgbG9jay4gRnVuY3Rpb25zIG9mIHRocmVhZC5jIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UKKyAgIHRoZXkgdXNlIFB5TWVtX1Jhd01hbGxvYygpIHdoaWNoIGxlYWRzIHRvIGEgcmVlbnRyYW50IGNhbGwuICovCisjaWYgIShkZWZpbmVkKF9QT1NJWF9USFJFQURTKSB8fCBkZWZpbmVkKE5UX1RIUkVBRFMpKQorIyAgZXJyb3IgIm5lZWQgbmF0aXZlIHRocmVhZCBsb2NhbCBzdG9yYWdlIChUTFMpIgorI2VuZGlmCisKK3N0YXRpYyBpbnQgdHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleTsKKworLyogQW55IG5vbi1OVUxMIHBvaW50ZXIgY2FuIGJlIHVzZWQgKi8KKyNkZWZpbmUgUkVFTlRSQU5UIFB5X1RydWUKKworc3RhdGljIGludAorZ2V0X3JlZW50cmFudCh2b2lkKQoreworICAgIHZvaWQgKnB0ciA9IFB5VGhyZWFkX2dldF9rZXlfdmFsdWUodHJhY2VtYWxsb2NfcmVlbnRyYW50X2tleSk7CisgICAgaWYgKHB0ciAhPSBOVUxMKSB7CisgICAgICAgIGFzc2VydChwdHIgPT0gUkVFTlRSQU5UKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfcmVlbnRyYW50KGludCByZWVudHJhbnQpCit7CisgICAgYXNzZXJ0KHJlZW50cmFudCA9PSAwIHx8IHJlZW50cmFudCA9PSAxKTsKKyAgICBpZiAocmVlbnRyYW50KSB7CisgICAgICAgIGFzc2VydChQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkpID09IE5VTEwpOworICAgICAgICBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXksIFJFRU5UUkFOVCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBhc3NlcnQoUHlUaHJlYWRfZ2V0X2tleV92YWx1ZSh0cmFjZW1hbGxvY19yZWVudHJhbnRfa2V5KSA9PSBSRUVOVFJBTlQpOworICAgICAgICBQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXksIE5VTEwpOworICAgIH0KK30KKworI2Vsc2UKKworLyogV0lUSF9USFJFQUQgbm90IGRlZmluZWQ6IFB5dGhvbiBjb21waWxlZCB3aXRob3V0IHRocmVhZHMsCisgICBvciBUUkFDRV9SQVdfTUFMTE9DIG5vdCBkZWZpbmVkOiB2YXJpYWJsZSBwcm90ZWN0ZWQgYnkgdGhlIEdJTCAqLworc3RhdGljIGludCB0cmFjZW1hbGxvY19yZWVudHJhbnQgPSAwOworCitzdGF0aWMgaW50CitnZXRfcmVlbnRyYW50KHZvaWQpCit7CisgICAgcmV0dXJuIHRyYWNlbWFsbG9jX3JlZW50cmFudDsKK30KKworc3RhdGljIHZvaWQKK3NldF9yZWVudHJhbnQoaW50IHJlZW50cmFudCkKK3sKKyAgICBhc3NlcnQoIXJlZW50cmFudCB8fCAhZ2V0X3JlZW50cmFudCgpKTsKKyAgICB0cmFjZW1hbGxvY19yZWVudHJhbnQgPSByZWVudHJhbnQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludAoraGFzaHRhYmxlX2NvbXBhcmVfdW5pY29kZShjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnkpCit7CisgICAgaWYgKGtleSAhPSBOVUxMICYmIGVudHJ5LT5rZXkgIT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIChQeVVuaWNvZGVfQ29tcGFyZSgoUHlPYmplY3QgKilrZXksIChQeU9iamVjdCAqKWVudHJ5LT5rZXkpID09IDApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGtleSA9PSBlbnRyeS0+a2V5OworfQorCitzdGF0aWMgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCBoYXNodGFibGVfYWxsb2MgPSB7bWFsbG9jLCBmcmVlfTsKKworc3RhdGljIF9QeV9oYXNodGFibGVfdCAqCitoYXNodGFibGVfbmV3KHNpemVfdCBkYXRhX3NpemUsCisgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMgY29tcGFyZV9mdW5jKQoreworICAgIHJldHVybiBfUHlfaGFzaHRhYmxlX25ld19mdWxsKGRhdGFfc2l6ZSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Z1bmMsIGNvbXBhcmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCAmaGFzaHRhYmxlX2FsbG9jKTsKK30KKworc3RhdGljIHZvaWQqCityYXdfbWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBhbGxvY2F0b3JzLnJhdy5tYWxsb2MoYWxsb2NhdG9ycy5yYXcuY3R4LCBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK3Jhd19mcmVlKHZvaWQgKnB0cikKK3sKKyAgICBhbGxvY2F0b3JzLnJhdy5mcmVlKGFsbG9jYXRvcnMucmF3LmN0eCwgcHRyKTsKK30KKworc3RhdGljIFB5X3VoYXNoX3QKK2hhc2h0YWJsZV9oYXNoX3RyYWNlYmFjayhjb25zdCB2b2lkICprZXkpCit7CisgICAgY29uc3QgdHJhY2ViYWNrX3QgKnRyYWNlYmFjayA9IGtleTsKKyAgICByZXR1cm4gdHJhY2ViYWNrLT5oYXNoOworfQorCitzdGF0aWMgaW50CitoYXNodGFibGVfY29tcGFyZV90cmFjZWJhY2soY29uc3QgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICpoZSkKK3sKKyAgICBjb25zdCB0cmFjZWJhY2tfdCAqdHJhY2ViYWNrMiA9IGhlLT5rZXk7CisgICAgY29uc3QgZnJhbWVfdCAqZnJhbWUxLCAqZnJhbWUyOworICAgIGludCBpOworCisgICAgaWYgKHRyYWNlYmFjazEtPm5mcmFtZSAhPSB0cmFjZWJhY2syLT5uZnJhbWUpCisgICAgICAgIHJldHVybiAwOworCisgICAgZm9yIChpPTA7IGkgPCB0cmFjZWJhY2sxLT5uZnJhbWU7IGkrKykgeworICAgICAgICBmcmFtZTEgPSAmdHJhY2ViYWNrMS0+ZnJhbWVzW2ldOworICAgICAgICBmcmFtZTIgPSAmdHJhY2ViYWNrMi0+ZnJhbWVzW2ldOworCisgICAgICAgIGlmIChmcmFtZTEtPmxpbmVubyAhPSBmcmFtZTItPmxpbmVubykKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmIChmcmFtZTEtPmZpbGVuYW1lICE9IGZyYW1lMi0+ZmlsZW5hbWUpIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfQ29tcGFyZShmcmFtZTEtPmZpbGVuYW1lLCBmcmFtZTItPmZpbGVuYW1lKSAhPSAwKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfZ2V0X2ZyYW1lKFB5RnJhbWVPYmplY3QgKnB5ZnJhbWUsIGZyYW1lX3QgKmZyYW1lKQoreworICAgIFB5Q29kZU9iamVjdCAqY29kZTsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgIGZyYW1lLT5maWxlbmFtZSA9IHVua25vd25fZmlsZW5hbWU7CisgICAgZnJhbWUtPmxpbmVubyA9IFB5RnJhbWVfR2V0TGluZU51bWJlcihweWZyYW1lKTsKKyAgICBhc3NlcnQoZnJhbWUtPmxpbmVubyA+PSAwKTsKKyAgICBpZiAoZnJhbWUtPmxpbmVubyA8IDApCisgICAgICAgIGZyYW1lLT5saW5lbm8gPSAwOworCisgICAgY29kZSA9IHB5ZnJhbWUtPmZfY29kZTsKKyAgICBpZiAoY29kZSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBnZXQgdGhlIGNvZGUgb2JqZWN0IG9mIHRoZSBmcmFtZSIpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoY29kZS0+Y29fZmlsZW5hbWUgPT0gTlVMTCkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmYWlsZWQgdG8gZ2V0IHRoZSBmaWxlbmFtZSBvZiB0aGUgY29kZSBvYmplY3QiKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZmlsZW5hbWUgPSBjb2RlLT5jb19maWxlbmFtZTsKKyAgICBhc3NlcnQoZmlsZW5hbWUgIT0gTlVMTCk7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKGZpbGVuYW1lKSkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmaWxlbmFtZSBpcyBub3QgYW4gdW5pY29kZSBzdHJpbmciKTsKKyNlbmRpZgorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghUHlVbmljb2RlX0lTX1JFQURZKGZpbGVuYW1lKSkgeworICAgICAgICAvKiBEb24ndCBtYWtlIGEgVW5pY29kZSBzdHJpbmcgcmVhZHkgdG8gYXZvaWQgcmVlbnRyYW50IGNhbGxzCisgICAgICAgICAgIHRvIHRyYWNlbWFsbG9jX21hbGxvYygpIG9yIHRyYWNlbWFsbG9jX3JlYWxsb2MoKSAqLworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgIHRyYWNlbWFsbG9jX2Vycm9yKCJmaWxlbmFtZSBpcyBub3QgYSByZWFkeSB1bmljb2RlIHN0cmluZyIpOworI2VuZGlmCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBpbnRlcm4gdGhlIGZpbGVuYW1lICovCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeSh0cmFjZW1hbGxvY19maWxlbmFtZXMsIGZpbGVuYW1lKTsKKyAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IChQeU9iamVjdCAqKWVudHJ5LT5rZXk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiB0cmFjZW1hbGxvY19maWxlbmFtZXMgaXMgcmVzcG9uc2libGUgdG8ga2VlcCBhIHJlZmVyZW5jZQorICAgICAgICAgICB0byB0aGUgZmlsZW5hbWUgKi8KKyAgICAgICAgUHlfSU5DUkVGKGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKF9QeV9oYXNodGFibGVfc2V0KHRyYWNlbWFsbG9jX2ZpbGVuYW1lcywgZmlsZW5hbWUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBpbnRlcm4gdGhlIGZpbGVuYW1lIik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHRoZSB0cmFjZW1hbGxvY19maWxlbmFtZXMgdGFibGUga2VlcHMgYSByZWZlcmVuY2UgdG8gdGhlIGZpbGVuYW1lICovCisgICAgZnJhbWUtPmZpbGVuYW1lID0gZmlsZW5hbWU7Cit9CisKK3N0YXRpYyBQeV91aGFzaF90Cit0cmFjZWJhY2tfaGFzaCh0cmFjZWJhY2tfdCAqdHJhY2ViYWNrKQoreworICAgIC8qIGNvZGUgYmFzZWQgb24gdHVwbGVoYXNoKCkgb2YgT2JqZWN0cy90dXBsZW9iamVjdC5jICovCisgICAgUHlfdWhhc2hfdCB4LCB5OyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCisgICAgaW50IGxlbiA9IHRyYWNlYmFjay0+bmZyYW1lOworICAgIFB5X3VoYXNoX3QgbXVsdCA9IF9QeUhBU0hfTVVMVElQTElFUjsKKyAgICBmcmFtZV90ICpmcmFtZTsKKworICAgIHggPSAweDM0NTY3OFVMOworICAgIGZyYW1lID0gdHJhY2ViYWNrLT5mcmFtZXM7CisgICAgd2hpbGUgKC0tbGVuID49IDApIHsKKyAgICAgICAgeSA9IChQeV91aGFzaF90KVB5T2JqZWN0X0hhc2goZnJhbWUtPmZpbGVuYW1lKTsKKyAgICAgICAgeSBePSAoUHlfdWhhc2hfdClmcmFtZS0+bGluZW5vOworICAgICAgICBmcmFtZSsrOworCisgICAgICAgIHggPSAoeCBeIHkpICogbXVsdDsKKyAgICAgICAgLyogdGhlIGNhc3QgbWlnaHQgdHJ1bmNhdGUgbGVuOyB0aGF0IGRvZXNuJ3QgY2hhbmdlIGhhc2ggc3RhYmlsaXR5ICovCisgICAgICAgIG11bHQgKz0gKFB5X3VoYXNoX3QpKDgyNTIwVUwgKyBsZW4gKyBsZW4pOworICAgIH0KKyAgICB4ICs9IDk3NTMxVUw7CisgICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZWJhY2tfZ2V0X2ZyYW1lcyh0cmFjZWJhY2tfdCAqdHJhY2ViYWNrKQoreworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKKyAgICBQeUZyYW1lT2JqZWN0ICpweWZyYW1lOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICB0c3RhdGUgPSBQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSgpOworI2Vsc2UKKyAgICB0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dldCgpOworI2VuZGlmCisgICAgaWYgKHRzdGF0ZSA9PSBOVUxMKSB7CisjaWZkZWYgVFJBQ0VfREVCVUcKKyAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBnZXQgdGhlIGN1cnJlbnQgdGhyZWFkIHN0YXRlIik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAocHlmcmFtZSA9IHRzdGF0ZS0+ZnJhbWU7IHB5ZnJhbWUgIT0gTlVMTDsgcHlmcmFtZSA9IHB5ZnJhbWUtPmZfYmFjaykgeworICAgICAgICB0cmFjZW1hbGxvY19nZXRfZnJhbWUocHlmcmFtZSwgJnRyYWNlYmFjay0+ZnJhbWVzW3RyYWNlYmFjay0+bmZyYW1lXSk7CisgICAgICAgIGFzc2VydCh0cmFjZWJhY2stPmZyYW1lc1t0cmFjZWJhY2stPm5mcmFtZV0uZmlsZW5hbWUgIT0gTlVMTCk7CisgICAgICAgIGFzc2VydCh0cmFjZWJhY2stPmZyYW1lc1t0cmFjZWJhY2stPm5mcmFtZV0ubGluZW5vID49IDApOworICAgICAgICB0cmFjZWJhY2stPm5mcmFtZSsrOworICAgICAgICBpZiAodHJhY2ViYWNrLT5uZnJhbWUgPT0gdHJhY2VtYWxsb2NfY29uZmlnLm1heF9uZnJhbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB0cmFjZWJhY2tfdCAqCit0cmFjZWJhY2tfbmV3KHZvaWQpCit7CisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorCisgICAgLyogZ2V0IGZyYW1lcyAqLworICAgIHRyYWNlYmFjayA9IHRyYWNlbWFsbG9jX3RyYWNlYmFjazsKKyAgICB0cmFjZWJhY2stPm5mcmFtZSA9IDA7CisgICAgdHJhY2ViYWNrX2dldF9mcmFtZXModHJhY2ViYWNrKTsKKyAgICBpZiAodHJhY2ViYWNrLT5uZnJhbWUgPT0gMCkKKyAgICAgICAgcmV0dXJuICZ0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2s7CisgICAgdHJhY2ViYWNrLT5oYXNoID0gdHJhY2ViYWNrX2hhc2godHJhY2ViYWNrKTsKKworICAgIC8qIGludGVybiB0aGUgdHJhY2ViYWNrICovCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeSh0cmFjZW1hbGxvY190cmFjZWJhY2tzLCB0cmFjZWJhY2spOworICAgIGlmIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgIHRyYWNlYmFjayA9ICh0cmFjZWJhY2tfdCAqKWVudHJ5LT5rZXk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICB0cmFjZWJhY2tfdCAqY29weTsKKyAgICAgICAgc2l6ZV90IHRyYWNlYmFja19zaXplOworCisgICAgICAgIHRyYWNlYmFja19zaXplID0gVFJBQ0VCQUNLX1NJWkUodHJhY2ViYWNrLT5uZnJhbWUpOworCisgICAgICAgIGNvcHkgPSByYXdfbWFsbG9jKHRyYWNlYmFja19zaXplKTsKKyAgICAgICAgaWYgKGNvcHkgPT0gTlVMTCkgeworI2lmZGVmIFRSQUNFX0RFQlVHCisgICAgICAgICAgICB0cmFjZW1hbGxvY19lcnJvcigiZmFpbGVkIHRvIGludGVybiB0aGUgdHJhY2ViYWNrOiBtYWxsb2MgZmFpbGVkIik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweShjb3B5LCB0cmFjZWJhY2ssIHRyYWNlYmFja19zaXplKTsKKworICAgICAgICBpZiAoX1B5X2hhc2h0YWJsZV9zZXQodHJhY2VtYWxsb2NfdHJhY2ViYWNrcywgY29weSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgICAgICByYXdfZnJlZShjb3B5KTsKKyNpZmRlZiBUUkFDRV9ERUJVRworICAgICAgICAgICAgdHJhY2VtYWxsb2NfZXJyb3IoImZhaWxlZCB0byBpbnRlcm4gdGhlIHRyYWNlYmFjazogcHV0ZGF0YSBmYWlsZWQiKTsKKyNlbmRpZgorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdHJhY2ViYWNrID0gY29weTsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlYmFjazsKK30KKworc3RhdGljIGludAordHJhY2VtYWxsb2NfYWRkX3RyYWNlKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjazsKKyAgICB0cmFjZV90IHRyYWNlOworICAgIGludCByZXM7CisKKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIGFzc2VydChQeUdJTFN0YXRlX0NoZWNrKCkpOworI2VuZGlmCisKKyAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2tfbmV3KCk7CisgICAgaWYgKHRyYWNlYmFjayA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB0cmFjZS5zaXplID0gc2l6ZTsKKyAgICB0cmFjZS50cmFjZWJhY2sgPSB0cmFjZWJhY2s7CisKKyAgICByZXMgPSBfUHlfSEFTSFRBQkxFX1NFVCh0cmFjZW1hbGxvY190cmFjZXMsIHB0ciwgdHJhY2UpOworICAgIGlmIChyZXMgPT0gMCkgeworICAgICAgICBhc3NlcnQodHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSA8PSBQWV9TSVpFX01BWCAtIHNpemUpOworICAgICAgICB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ICs9IHNpemU7CisgICAgICAgIGlmICh0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ID4gdHJhY2VtYWxsb2NfcGVha190cmFjZWRfbWVtb3J5KQorICAgICAgICAgICAgdHJhY2VtYWxsb2NfcGVha190cmFjZWRfbWVtb3J5ID0gdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfcmVtb3ZlX3RyYWNlKHZvaWQgKnB0cikKK3sKKyAgICB0cmFjZV90IHRyYWNlOworCisgICAgaWYgKF9QeV9oYXNodGFibGVfcG9wKHRyYWNlbWFsbG9jX3RyYWNlcywgcHRyLCAmdHJhY2UsIHNpemVvZih0cmFjZSkpKSB7CisgICAgICAgIGFzc2VydCh0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5ID49IHRyYWNlLnNpemUpOworICAgICAgICB0cmFjZW1hbGxvY190cmFjZWRfbWVtb3J5IC09IHRyYWNlLnNpemU7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX21hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKyAgICB2b2lkICpwdHI7CisKKyAgICBwdHIgPSBhbGxvYy0+bWFsbG9jKGFsbG9jLT5jdHgsIHNpemUpOworICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIGlmICh0cmFjZW1hbGxvY19hZGRfdHJhY2UocHRyLCBzaXplKSA8IDApIHsKKyAgICAgICAgLyogRmFpbGVkIHRvIGFsbG9jYXRlIGEgdHJhY2UgZm9yIHRoZSBuZXcgbWVtb3J5IGJsb2NrICovCisgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICAgICAgYWxsb2MtPmZyZWUoYWxsb2MtPmN0eCwgcHRyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICByZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX3JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisgICAgdm9pZCAqcHRyMjsKKworICAgIHB0cjIgPSBhbGxvYy0+cmVhbGxvYyhhbGxvYy0+Y3R4LCBwdHIsIG5ld19zaXplKTsKKyAgICBpZiAocHRyMiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChwdHIgIT0gTlVMTCkgeworICAgICAgICAvKiBhbiBleGlzdGluZyBtZW1vcnkgYmxvY2sgaGFzIGJlZW4gcmVzaXplZCAqLworCisgICAgICAgIFRBQkxFU19MT0NLKCk7CisgICAgICAgIHRyYWNlbWFsbG9jX3JlbW92ZV90cmFjZShwdHIpOworCisgICAgICAgIGlmICh0cmFjZW1hbGxvY19hZGRfdHJhY2UocHRyMiwgbmV3X3NpemUpIDwgMCkgeworICAgICAgICAgICAgLyogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLiBUaGUgZXJyb3IgY2Fubm90IGJlIHJlcG9ydGVkIHRvCisgICAgICAgICAgICAgICB0aGUgY2FsbGVyLCBiZWNhdXNlIHJlYWxsb2MoKSBtYXkgYWxyZWFkeSBoYXZlIHNocmlua2VkIHRoZQorICAgICAgICAgICAgICAgbWVtb3J5IGJsb2NrIGFuZCBzbyByZW1vdmVkIGJ5dGVzLgorCisgICAgICAgICAgICAgICBUaGlzIGNhc2UgaXMgdmVyeSB1bmxpa2VseTogYW4gaGFzaCBlbnRyeSBoYXMganVzdCBiZWVuCisgICAgICAgICAgICAgICByZWxlYXNlZCwgc28gdGhlIGhhc2ggdGFibGUgc2hvdWxkIGhhdmUgYXQgbGVhc3Qgb25lIGZyZWUgZW50cnkuCisKKyAgICAgICAgICAgICAgIFRoZSBHSUwgYW5kIHRoZSB0YWJsZSBsb2NrIGVuc3VyZXMgdGhhdCBvbmx5IG9uZSB0aHJlYWQgaXMKKyAgICAgICAgICAgICAgIGFsbG9jYXRpbmcgbWVtb3J5LiAqLworICAgICAgICAgICAgYXNzZXJ0KDAgJiYgInNob3VsZCBuZXZlciBoYXBwZW4iKTsKKyAgICAgICAgfQorICAgICAgICBUQUJMRVNfVU5MT0NLKCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiBuZXcgYWxsb2NhdGlvbiAqLworCisgICAgICAgIFRBQkxFU19MT0NLKCk7CisgICAgICAgIGlmICh0cmFjZW1hbGxvY19hZGRfdHJhY2UocHRyMiwgbmV3X3NpemUpIDwgMCkgeworICAgICAgICAgICAgLyogRmFpbGVkIHRvIGFsbG9jYXRlIGEgdHJhY2UgZm9yIHRoZSBuZXcgbWVtb3J5IGJsb2NrICovCisgICAgICAgICAgICBUQUJMRVNfVU5MT0NLKCk7CisgICAgICAgICAgICBhbGxvYy0+ZnJlZShhbGxvYy0+Y3R4LCBwdHIyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFRBQkxFU19VTkxPQ0soKTsKKyAgICB9CisgICAgcmV0dXJuIHB0cjI7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19mcmVlKHZvaWQgKmN0eCwgdm9pZCAqcHRyKQoreworICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKworICAgIGlmIChwdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgIC8qIEdJTCBjYW5ub3QgYmUgbG9ja2VkIGluIFB5TWVtX1Jhd0ZyZWUoKSBiZWNhdXNlIGl0IHdvdWxkIGludHJvZHVjZQorICAgICAgICBhIGRlYWRsb2NrIGluIFB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudCgpLiAqLworCisgICAgYWxsb2MtPmZyZWUoYWxsb2MtPmN0eCwgcHRyKTsKKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgdHJhY2VtYWxsb2NfcmVtb3ZlX3RyYWNlKHB0cik7CisgICAgVEFCTEVTX1VOTE9DSygpOworfQorCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX21hbGxvY19naWwodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICpwdHI7CisKKyAgICBpZiAoZ2V0X3JlZW50cmFudCgpKSB7CisgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKyAgICAgICAgcmV0dXJuIGFsbG9jLT5tYWxsb2MoYWxsb2MtPmN0eCwgc2l6ZSk7CisgICAgfQorCisgICAgLyogSWdub3JlIHJlZW50cmFudCBjYWxsLiBQeU9iamV0X01hbGxvYygpIGNhbGxzIFB5TWVtX01hbGxvYygpIGZvcgorICAgICAgIGFsbG9jYXRpb25zIGxhcmdlciB0aGFuIDUxMiBieXRlcywgZG9uJ3QgdHJhY2UgdGhlIHNhbWUgbWVtb3J5CisgICAgICAgYWxsb2NhdGlvbiB0d2ljZS4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisgICAgcHRyID0gdHJhY2VtYWxsb2NfbWFsbG9jKGN0eCwgc2l6ZSk7CisKKyAgICBzZXRfcmVlbnRyYW50KDApOworICAgIHJldHVybiBwdHI7Cit9CisKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmVhbGxvY19naWwodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICB2b2lkICpwdHIyOworCisgICAgaWYgKGdldF9yZWVudHJhbnQoKSkgeworICAgICAgICAvKiBSZWVudHJhbnQgY2FsbCB0byBQeU1lbV9SZWFsbG9jKCkgYW5kIFB5TWVtX1Jhd1JlYWxsb2MoKS4KKyAgICAgICAgICAgRXhhbXBsZTogUHlNZW1fUmF3UmVhbGxvYygpIGlzIGNhbGxlZCBpbnRlcm5hbGx5IGJ5IHB5bWFsbG9jCisgICAgICAgICAgIChfUHlPYmplY3RfTWFsbG9jKCkgYW5kICBfUHlPYmplY3RfUmVhbGxvYygpKSB0byBhbGxvY2F0ZSBhIG5ldworICAgICAgICAgICBhcmVuYSAobmV3X2FyZW5hKCkpLiAqLworICAgICAgICBQeU1lbUFsbG9jYXRvciAqYWxsb2MgPSAoUHlNZW1BbGxvY2F0b3IgKiljdHg7CisKKyAgICAgICAgcHRyMiA9IGFsbG9jLT5yZWFsbG9jKGFsbG9jLT5jdHgsIHB0ciwgbmV3X3NpemUpOworICAgICAgICBpZiAocHRyMiAhPSBOVUxMICYmIHB0ciAhPSBOVUxMKSB7CisgICAgICAgICAgICBUQUJMRVNfTE9DSygpOworICAgICAgICAgICAgdHJhY2VtYWxsb2NfcmVtb3ZlX3RyYWNlKHB0cik7CisgICAgICAgICAgICBUQUJMRVNfVU5MT0NLKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHB0cjI7CisgICAgfQorCisgICAgLyogSWdub3JlIHJlZW50cmFudCBjYWxsLiBQeU9iamV0X1JlYWxsb2MoKSBjYWxscyBQeU1lbV9SZWFsbG9jKCkgZm9yCisgICAgICAgYWxsb2NhdGlvbnMgbGFyZ2VyIHRoYW4gNTEyIGJ5dGVzLiBEb24ndCB0cmFjZSB0aGUgc2FtZSBtZW1vcnkKKyAgICAgICBhbGxvY2F0aW9uIHR3aWNlLiAqLworICAgIHNldF9yZWVudHJhbnQoMSk7CisKKyAgICBwdHIyID0gdHJhY2VtYWxsb2NfcmVhbGxvYyhjdHgsIHB0ciwgbmV3X3NpemUpOworCisgICAgc2V0X3JlZW50cmFudCgwKTsKKyAgICByZXR1cm4gcHRyMjsKK30KKworI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKK3N0YXRpYyB2b2lkKgordHJhY2VtYWxsb2NfcmF3X21hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxfc3RhdGU7CisjZW5kaWYKKyAgICB2b2lkICpwdHI7CisKKyAgICBpZiAoZ2V0X3JlZW50cmFudCgpKSB7CisgICAgICAgIFB5TWVtQWxsb2NhdG9yICphbGxvYyA9IChQeU1lbUFsbG9jYXRvciAqKWN0eDsKKyAgICAgICAgcmV0dXJuIGFsbG9jLT5tYWxsb2MoYWxsb2MtPmN0eCwgc2l6ZSk7CisgICAgfQorCisgICAgLyogSWdub3JlIHJlZW50cmFudCBjYWxsLiBQeUdJTFN0YXRlX0Vuc3VyZSgpIG1heSBjYWxsIFB5TWVtX1Jhd01hbGxvYygpCisgICAgICAgaW5kaXJlY3RseSB3aGljaCB3b3VsZCBjYWxsIFB5R0lMU3RhdGVfRW5zdXJlKCkgaWYgcmVlbnRyYW50IGFyZSBub3QKKyAgICAgICBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBnaWxfc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworICAgIHB0ciA9IHRyYWNlbWFsbG9jX21hbGxvYyhjdHgsIHNpemUpOworICAgIFB5R0lMU3RhdGVfUmVsZWFzZShnaWxfc3RhdGUpOworI2Vsc2UKKyAgICBwdHIgPSB0cmFjZW1hbGxvY19tYWxsb2MoY3R4LCBzaXplKTsKKyNlbmRpZgorCisgICAgc2V0X3JlZW50cmFudCgwKTsKKyAgICByZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZCoKK3RyYWNlbWFsbG9jX3Jhd19yZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbF9zdGF0ZTsKKyNlbmRpZgorICAgIHZvaWQgKnB0cjI7CisKKyAgICBpZiAoZ2V0X3JlZW50cmFudCgpKSB7CisgICAgICAgIC8qIFJlZW50cmFudCBjYWxsIHRvIFB5TWVtX1Jhd1JlYWxsb2MoKS4gKi8KKyAgICAgICAgUHlNZW1BbGxvY2F0b3IgKmFsbG9jID0gKFB5TWVtQWxsb2NhdG9yICopY3R4OworCisgICAgICAgIHB0cjIgPSBhbGxvYy0+cmVhbGxvYyhhbGxvYy0+Y3R4LCBwdHIsIG5ld19zaXplKTsKKworICAgICAgICBpZiAocHRyMiAhPSBOVUxMICYmIHB0ciAhPSBOVUxMKSB7CisgICAgICAgICAgICBUQUJMRVNfTE9DSygpOworICAgICAgICAgICAgdHJhY2VtYWxsb2NfcmVtb3ZlX3RyYWNlKHB0cik7CisgICAgICAgICAgICBUQUJMRVNfVU5MT0NLKCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHB0cjI7CisgICAgfQorCisgICAgLyogSWdub3JlIHJlZW50cmFudCBjYWxsLiBQeUdJTFN0YXRlX0Vuc3VyZSgpIG1heSBjYWxsIFB5TWVtX1Jhd01hbGxvYygpCisgICAgICAgaW5kaXJlY3RseSB3aGljaCB3b3VsZCBjYWxsIFB5R0lMU3RhdGVfRW5zdXJlKCkgaWYgcmVlbnRyYW50IGNhbGxzIGFyZQorICAgICAgIG5vdCBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBnaWxfc3RhdGUgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOworICAgIHB0cjIgPSB0cmFjZW1hbGxvY19yZWFsbG9jKGN0eCwgcHRyLCBuZXdfc2l6ZSk7CisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbF9zdGF0ZSk7CisjZWxzZQorICAgIHB0cjIgPSB0cmFjZW1hbGxvY19yZWFsbG9jKGN0eCwgcHRyLCBuZXdfc2l6ZSk7CisjZW5kaWYKKworICAgIHNldF9yZWVudHJhbnQoMCk7CisgICAgcmV0dXJuIHB0cjI7Cit9CisjZW5kaWYgICAvKiBUUkFDRV9SQVdfTUFMTE9DICovCisKK3N0YXRpYyBpbnQKK3RyYWNlbWFsbG9jX2NsZWFyX2ZpbGVuYW1lKF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksIHZvaWQgKnVzZXJfZGF0YSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSAoUHlPYmplY3QgKillbnRyeS0+a2V5OworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3RyYWNlYmFja19mcmVlX3RyYWNlYmFjayhfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICp1c2VyX2RhdGEpCit7CisgICAgdHJhY2ViYWNrX3QgKnRyYWNlYmFjayA9ICh0cmFjZWJhY2tfdCAqKWVudHJ5LT5rZXk7CisgICAgcmF3X2ZyZWUodHJhY2ViYWNrKTsKKyAgICByZXR1cm4gMDsKK30KKworLyogcmVlbnRyYW50IGZsYWcgbXVzdCBiZSBzZXQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGFuZCBHSUwgbXVzdCBiZSBoZWxkICovCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzKHZvaWQpCit7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICAvKiBUaGUgR0lMIHByb3RlY3RzIHZhcmlhYmxlcyBhZ2FpbnQgY29uY3VycmVudCBhY2Nlc3MgKi8KKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorCisgICAgLyogRGlzYWJsZSBhbHNvIHJlZW50cmFudCBjYWxscyB0byB0cmFjZW1hbGxvY19tYWxsb2MoKSB0byBub3QgYWRkIGEgbmV3CisgICAgICAgdHJhY2Ugd2hpbGUgd2UgYXJlIGNsZWFyaW5nIHRyYWNlcyAqLworICAgIGFzc2VydChnZXRfcmVlbnRyYW50KCkpOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBfUHlfaGFzaHRhYmxlX2NsZWFyKHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgdHJhY2VtYWxsb2NfdHJhY2VkX21lbW9yeSA9IDA7CisgICAgdHJhY2VtYWxsb2NfcGVha190cmFjZWRfbWVtb3J5ID0gMDsKKyAgICBUQUJMRVNfVU5MT0NLKCk7CisKKyAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2godHJhY2VtYWxsb2NfdHJhY2ViYWNrcywgdHJhY2ViYWNrX2ZyZWVfdHJhY2ViYWNrLCBOVUxMKTsKKyAgICBfUHlfaGFzaHRhYmxlX2NsZWFyKHRyYWNlbWFsbG9jX3RyYWNlYmFja3MpOworCisgICAgX1B5X2hhc2h0YWJsZV9mb3JlYWNoKHRyYWNlbWFsbG9jX2ZpbGVuYW1lcywgdHJhY2VtYWxsb2NfY2xlYXJfZmlsZW5hbWUsIE5VTEwpOworICAgIF9QeV9oYXNodGFibGVfY2xlYXIodHJhY2VtYWxsb2NfZmlsZW5hbWVzKTsKK30KKworc3RhdGljIGludAordHJhY2VtYWxsb2NfaW5pdCh2b2lkKQoreworICAgIGlmICh0cmFjZW1hbGxvY19jb25maWcuaW5pdGlhbGl6ZWQgPT0gVFJBQ0VNQUxMT0NfRklOQUxJWkVEKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBoYXMgYmVlbiB1bmxvYWRlZCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHRyYWNlbWFsbG9jX2NvbmZpZy5pbml0aWFsaXplZCA9PSBUUkFDRU1BTExPQ19JTklUSUFMSVpFRCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jYXRvcnMucmF3KTsKKworI2lmZGVmIFJFRU5UUkFOVF9USFJFQURMT0NBTAorICAgIHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkgPSBQeVRocmVhZF9jcmVhdGVfa2V5KCk7CisgICAgaWYgKHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkgPT0gLTEpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworI2Vsc2UKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworI2VuZGlmCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKworI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIGRlZmluZWQoVFJBQ0VfUkFXX01BTExPQykKKyAgICBpZiAodGFibGVzX2xvY2sgPT0gTlVMTCkgeworICAgICAgICB0YWJsZXNfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKKyAgICAgICAgaWYgKHRhYmxlc19sb2NrID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJjYW5ub3QgYWxsb2NhdGUgbG9jayIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICB0cmFjZW1hbGxvY19maWxlbmFtZXMgPSBoYXNodGFibGVfbmV3KDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMpUHlPYmplY3RfSGFzaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2h0YWJsZV9jb21wYXJlX3VuaWNvZGUpOworCisgICAgdHJhY2VtYWxsb2NfdHJhY2ViYWNrcyA9IGhhc2h0YWJsZV9uZXcoMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMpaGFzaHRhYmxlX2hhc2hfdHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyloYXNodGFibGVfY29tcGFyZV90cmFjZWJhY2spOworCisgICAgdHJhY2VtYWxsb2NfdHJhY2VzID0gaGFzaHRhYmxlX25ldyhzaXplb2YodHJhY2VfdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2hhc2hfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2RpcmVjdCk7CisKKyAgICBpZiAodHJhY2VtYWxsb2NfZmlsZW5hbWVzID09IE5VTEwgfHwgdHJhY2VtYWxsb2NfdHJhY2ViYWNrcyA9PSBOVUxMCisgICAgICAgIHx8IHRyYWNlbWFsbG9jX3RyYWNlcyA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHVua25vd25fZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHVua25vd24+Iik7CisgICAgaWYgKHVua25vd25fZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZ1bmtub3duX2ZpbGVuYW1lKTsKKworICAgIHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjay5uZnJhbWUgPSAxOworICAgIC8qIGJvcnJvd2VkIHJlZmVyZW5jZSAqLworICAgIHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjay5mcmFtZXNbMF0uZmlsZW5hbWUgPSB1bmtub3duX2ZpbGVuYW1lOworICAgIHRyYWNlbWFsbG9jX2VtcHR5X3RyYWNlYmFjay5mcmFtZXNbMF0ubGluZW5vID0gMDsKKyAgICB0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2suaGFzaCA9IHRyYWNlYmFja19oYXNoKCZ0cmFjZW1hbGxvY19lbXB0eV90cmFjZWJhY2spOworCisgICAgLyogRGlzYWJsZSB0cmFjaW5nIGFsbG9jYXRpb25zIHVudGlsIGhvb2tzIGFyZSBpbnN0YWxsZWQuIFNldAorICAgICAgIGFsc28gdGhlIHJlZW50cmFudCBmbGFnIHRvIGRldGVjdCBidWdzOiBmYWlsIHdpdGggYW4gYXNzZXJ0aW9uIGVycm9yCisgICAgICAgaWYgc2V0X3JlZW50cmFudCgxKSBpcyBjYWxsZWQgd2hpbGUgdHJhY2luZyBpcyBkaXNhYmxlZC4gKi8KKyAgICBzZXRfcmVlbnRyYW50KDEpOworCisgICAgdHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkID0gVFJBQ0VNQUxMT0NfSU5JVElBTElaRUQ7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCit0cmFjZW1hbGxvY19kZWluaXQodm9pZCkKK3sKKyAgICBpZiAodHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkICE9IFRSQUNFTUFMTE9DX0lOSVRJQUxJWkVEKQorICAgICAgICByZXR1cm47CisgICAgdHJhY2VtYWxsb2NfY29uZmlnLmluaXRpYWxpemVkID0gVFJBQ0VNQUxMT0NfRklOQUxJWkVEOworCisgICAgdHJhY2VtYWxsb2Nfc3RvcCgpOworCisgICAgLyogZGVzdHJveSBoYXNoIHRhYmxlcyAqLworICAgIF9QeV9oYXNodGFibGVfZGVzdHJveSh0cmFjZW1hbGxvY190cmFjZXMpOworICAgIF9QeV9oYXNodGFibGVfZGVzdHJveSh0cmFjZW1hbGxvY190cmFjZWJhY2tzKTsKKyAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3kodHJhY2VtYWxsb2NfZmlsZW5hbWVzKTsKKworI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIGRlZmluZWQoVFJBQ0VfUkFXX01BTExPQykKKyAgICBpZiAodGFibGVzX2xvY2sgIT0gTlVMTCkgeworICAgICAgICBQeVRocmVhZF9mcmVlX2xvY2sodGFibGVzX2xvY2spOworICAgICAgICB0YWJsZXNfbG9jayA9IE5VTEw7CisgICAgfQorI2VuZGlmCisKKyNpZmRlZiBSRUVOVFJBTlRfVEhSRUFETE9DQUwKKyAgICBQeVRocmVhZF9kZWxldGVfa2V5KHRyYWNlbWFsbG9jX3JlZW50cmFudF9rZXkpOworI2VuZGlmCisKKyAgICBQeV9YREVDUkVGKHVua25vd25fZmlsZW5hbWUpOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19zdGFydChpbnQgbWF4X25mcmFtZSkKK3sKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKyAgICBzaXplX3Qgc2l6ZTsKKworICAgIGlmICh0cmFjZW1hbGxvY19pbml0KCkgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAodHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpIHsKKyAgICAgICAgLyogaG9vayBhbHJlYWR5IGluc3RhbGxlZDogZG8gbm90aGluZyAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBhc3NlcnQoMSA8PSBtYXhfbmZyYW1lICYmIG1heF9uZnJhbWUgPD0gTUFYX05GUkFNRSk7CisgICAgdHJhY2VtYWxsb2NfY29uZmlnLm1heF9uZnJhbWUgPSBtYXhfbmZyYW1lOworCisgICAgLyogYWxsb2NhdGUgYSBidWZmZXIgdG8gc3RvcmUgYSBuZXcgdHJhY2ViYWNrICovCisgICAgc2l6ZSA9IFRSQUNFQkFDS19TSVpFKG1heF9uZnJhbWUpOworICAgIGFzc2VydCh0cmFjZW1hbGxvY190cmFjZWJhY2sgPT0gTlVMTCk7CisgICAgdHJhY2VtYWxsb2NfdHJhY2ViYWNrID0gcmF3X21hbGxvYyhzaXplKTsKKyAgICBpZiAodHJhY2VtYWxsb2NfdHJhY2ViYWNrID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2lmZGVmIFRSQUNFX1JBV19NQUxMT0MKKyAgICBhbGxvYy5tYWxsb2MgPSB0cmFjZW1hbGxvY19yYXdfbWFsbG9jOworICAgIGFsbG9jLnJlYWxsb2MgPSB0cmFjZW1hbGxvY19yYXdfcmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gdHJhY2VtYWxsb2NfZnJlZTsKKworICAgIGFsbG9jLmN0eCA9ICZhbGxvY2F0b3JzLnJhdzsKKyAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jYXRvcnMucmF3KTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX1JBVywgJmFsbG9jKTsKKyNlbmRpZgorCisgICAgYWxsb2MubWFsbG9jID0gdHJhY2VtYWxsb2NfbWFsbG9jX2dpbDsKKyAgICBhbGxvYy5yZWFsbG9jID0gdHJhY2VtYWxsb2NfcmVhbGxvY19naWw7CisgICAgYWxsb2MuZnJlZSA9IHRyYWNlbWFsbG9jX2ZyZWU7CisKKyAgICBhbGxvYy5jdHggPSAmYWxsb2NhdG9ycy5tZW07CisgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZhbGxvY2F0b3JzLm1lbSk7CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZhbGxvYyk7CisKKyAgICBhbGxvYy5jdHggPSAmYWxsb2NhdG9ycy5vYmo7CisgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9PQkosICZhbGxvY2F0b3JzLm9iaik7CisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9PQkosICZhbGxvYyk7CisKKyAgICAvKiBldmVyeXRoaW5nIGlzIHJlYWR5OiBzdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgKi8KKyAgICB0cmFjZW1hbGxvY19jb25maWcudHJhY2luZyA9IDE7CisgICAgc2V0X3JlZW50cmFudCgwKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAordHJhY2VtYWxsb2Nfc3RvcCh2b2lkKQoreworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIHJldHVybjsKKworICAgIC8qIHN0b3AgdHJhY2luZyBQeXRob24gbWVtb3J5IGFsbG9jYXRpb25zICovCisgICAgdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcgPSAwOworCisgICAgLyogc2V0IHRoZSByZWVudHJhbnQgZmxhZyB0byBkZXRlY3QgYnVnczogZmFpbCB3aXRoIGFuIGFzc2VydGlvbiBlcnJvciBpZgorICAgICAgIHNldF9yZWVudHJhbnQoMSkgaXMgY2FsbGVkIHdoaWxlIHRyYWNpbmcgaXMgZGlzYWJsZWQuICovCisgICAgc2V0X3JlZW50cmFudCgxKTsKKworICAgIC8qIHVucmVnaXN0ZXIgdGhlIGhvb2sgb24gbWVtb3J5IGFsbG9jYXRvcnMgKi8KKyNpZmRlZiBUUkFDRV9SQVdfTUFMTE9DCisgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9SQVcsICZhbGxvY2F0b3JzLnJhdyk7CisjZW5kaWYKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX01FTSwgJmFsbG9jYXRvcnMubWVtKTsKKyAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jYXRvcnMub2JqKTsKKworICAgIC8qIHJlbGVhc2UgbWVtb3J5ICovCisgICAgdHJhY2VtYWxsb2NfY2xlYXJfdHJhY2VzKCk7CisgICAgcmF3X2ZyZWUodHJhY2VtYWxsb2NfdHJhY2ViYWNrKTsKKyAgICB0cmFjZW1hbGxvY190cmFjZWJhY2sgPSBOVUxMOworfQorCitzdGF0aWMgUHlPYmplY3QqCitsaW5lbm9fYXNfb2JqKGludCBsaW5lbm8pCit7CisgICAgaWYgKGxpbmVubyA+PSAwKQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGxpbmVubyk7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2lzX3RyYWNpbmdfZG9jLAorICAgICJpc190cmFjaW5nKCktPmJvb2xcbiIKKyAgICAiXG4iCisgICAgIlRydWUgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMsXG4iCisgICAgIkZhbHNlIG90aGVyd2lzZS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2NfaXNfdHJhY2luZyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2NsZWFyX3RyYWNlc19kb2MsCisgICAgImNsZWFyX3RyYWNlcygpXG4iCisgICAgIlxuIgorICAgICJDbGVhciB0cmFjZXMgb2YgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19jbGVhcl90cmFjZXMoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaWYgKCF0cmFjZW1hbGxvY19jb25maWcudHJhY2luZykKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICBzZXRfcmVlbnRyYW50KDEpOworICAgIHRyYWNlbWFsbG9jX2NsZWFyX3RyYWNlcygpOworICAgIHNldF9yZWVudHJhbnQoMCk7CisKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZnJhbWVfdG9fcHlvYmplY3QoZnJhbWVfdCAqZnJhbWUpCit7CisgICAgUHlPYmplY3QgKmZyYW1lX29iaiwgKmxpbmVub19vYmo7CisKKyAgICBmcmFtZV9vYmogPSBQeVR1cGxlX05ldygyKTsKKyAgICBpZiAoZnJhbWVfb2JqID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGZyYW1lLT5maWxlbmFtZSA9PSBOVUxMKQorICAgICAgICBmcmFtZS0+ZmlsZW5hbWUgPSBQeV9Ob25lOworICAgIFB5X0lOQ1JFRihmcmFtZS0+ZmlsZW5hbWUpOworICAgIFB5VHVwbGVfU0VUX0lURU0oZnJhbWVfb2JqLCAwLCBmcmFtZS0+ZmlsZW5hbWUpOworCisgICAgYXNzZXJ0KGZyYW1lLT5saW5lbm8gPj0gMCk7CisgICAgbGluZW5vX29iaiA9IGxpbmVub19hc19vYmooZnJhbWUtPmxpbmVubyk7CisgICAgaWYgKGxpbmVub19vYmogPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZnJhbWVfb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0oZnJhbWVfb2JqLCAxLCBsaW5lbm9fb2JqKTsKKworICAgIHJldHVybiBmcmFtZV9vYmo7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlYmFja190b19weW9iamVjdCh0cmFjZWJhY2tfdCAqdHJhY2ViYWNrLCBfUHlfaGFzaHRhYmxlX3QgKmludGVybl90YWJsZSkKK3sKKyAgICBpbnQgaTsKKyAgICBQeU9iamVjdCAqZnJhbWVzLCAqZnJhbWU7CisKKyAgICBpZiAoaW50ZXJuX3RhYmxlICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKF9QeV9IQVNIVEFCTEVfR0VUKGludGVybl90YWJsZSwgdHJhY2ViYWNrLCBmcmFtZXMpKSB7CisgICAgICAgICAgICBQeV9JTkNSRUYoZnJhbWVzKTsKKyAgICAgICAgICAgIHJldHVybiBmcmFtZXM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmcmFtZXMgPSBQeVR1cGxlX05ldyh0cmFjZWJhY2stPm5mcmFtZSk7CisgICAgaWYgKGZyYW1lcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvciAoaT0wOyBpIDwgdHJhY2ViYWNrLT5uZnJhbWU7IGkrKykgeworICAgICAgICBmcmFtZSA9IGZyYW1lX3RvX3B5b2JqZWN0KCZ0cmFjZWJhY2stPmZyYW1lc1tpXSk7CisgICAgICAgIGlmIChmcmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZnJhbWVzKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oZnJhbWVzLCBpLCBmcmFtZSk7CisgICAgfQorCisgICAgaWYgKGludGVybl90YWJsZSAhPSBOVUxMKSB7CisgICAgICAgIGlmIChfUHlfSEFTSFRBQkxFX1NFVChpbnRlcm5fdGFibGUsIHRyYWNlYmFjaywgZnJhbWVzKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcmFtZXMpOworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIC8qIGludGVybl90YWJsZSBrZWVwcyBhIG5ldyByZWZlcmVuY2UgdG8gZnJhbWVzICovCisgICAgICAgIFB5X0lOQ1JFRihmcmFtZXMpOworICAgIH0KKyAgICByZXR1cm4gZnJhbWVzOworfQorCitzdGF0aWMgUHlPYmplY3QqCit0cmFjZV90b19weW9iamVjdCh0cmFjZV90ICp0cmFjZSwgX1B5X2hhc2h0YWJsZV90ICppbnRlcm5fdHJhY2ViYWNrcykKK3sKKyAgICBQeU9iamVjdCAqdHJhY2Vfb2JqID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc2l6ZSwgKnRyYWNlYmFjazsKKworICAgIHRyYWNlX29iaiA9IFB5VHVwbGVfTmV3KDIpOworICAgIGlmICh0cmFjZV9vYmogPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzaXplID0gUHlMb25nX0Zyb21TaXplX3QodHJhY2UtPnNpemUpOworICAgIGlmIChzaXplID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHRyYWNlX29iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHRyYWNlX29iaiwgMCwgc2l6ZSk7CisKKyAgICB0cmFjZWJhY2sgPSB0cmFjZWJhY2tfdG9fcHlvYmplY3QodHJhY2UtPnRyYWNlYmFjaywgaW50ZXJuX3RyYWNlYmFja3MpOworICAgIGlmICh0cmFjZWJhY2sgPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYodHJhY2Vfb2JqKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5VHVwbGVfU0VUX0lURU0odHJhY2Vfb2JqLCAxLCB0cmFjZWJhY2spOworCisgICAgcmV0dXJuIHRyYWNlX29iajsKK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIF9QeV9oYXNodGFibGVfdCAqdHJhY2VzOworICAgIF9QeV9oYXNodGFibGVfdCAqdHJhY2ViYWNrczsKKyAgICBQeU9iamVjdCAqbGlzdDsKK30gZ2V0X3RyYWNlc190OworCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19nZXRfdHJhY2VzX2ZpbGwoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIGdldF90cmFjZXNfdCAqZ2V0X3RyYWNlcyA9IHVzZXJfZGF0YTsKKyAgICB0cmFjZV90ICp0cmFjZTsKKyAgICBQeU9iamVjdCAqdHJhY2VtYWxsb2Nfb2JqOworICAgIGludCByZXM7CisKKyAgICB0cmFjZSA9ICh0cmFjZV90ICopX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKGVudHJ5KTsKKworICAgIHRyYWNlbWFsbG9jX29iaiA9IHRyYWNlX3RvX3B5b2JqZWN0KHRyYWNlLCBnZXRfdHJhY2VzLT50cmFjZWJhY2tzKTsKKyAgICBpZiAodHJhY2VtYWxsb2Nfb2JqID09IE5VTEwpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmVzID0gUHlMaXN0X0FwcGVuZChnZXRfdHJhY2VzLT5saXN0LCB0cmFjZW1hbGxvY19vYmopOworICAgIFB5X0RFQ1JFRih0cmFjZW1hbGxvY19vYmopOworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50Cit0cmFjZW1hbGxvY19weW9iamVjdF9kZWNyZWZfY2IoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqdXNlcl9kYXRhKQoreworICAgIFB5T2JqZWN0ICpvYmogPSAoUHlPYmplY3QgKilfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KTsKKyAgICBQeV9ERUNSRUYob2JqKTsKKyAgICByZXR1cm4gMDsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF90cmFjZXNfZG9jLAorICAgICJfZ2V0X3RyYWNlcygpIC0+IGxpc3RcbiIKKyAgICAiXG4iCisgICAgIkdldCB0cmFjZXMgb2YgYWxsIG1lbW9yeSBibG9ja3MgYWxsb2NhdGVkIGJ5IFB5dGhvbi5cbiIKKyAgICAiUmV0dXJuIGEgbGlzdCBvZiAoc2l6ZTogaW50LCB0cmFjZWJhY2s6IHR1cGxlKSB0dXBsZXMuXG4iCisgICAgInRyYWNlYmFjayBpcyBhIHR1cGxlIG9mIChmaWxlbmFtZTogc3RyLCBsaW5lbm86IGludCkgdHVwbGVzLlxuIgorICAgICJcbiIKKyAgICAiUmV0dXJuIGFuIGVtcHR5IGxpc3QgaWYgdGhlIHRyYWNlbWFsbG9jIG1vZHVsZSBpcyBkaXNhYmxlZC4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2NfZ2V0X3RyYWNlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9iaikKK3sKKyAgICBnZXRfdHJhY2VzX3QgZ2V0X3RyYWNlczsKKyAgICBpbnQgZXJyOworCisgICAgZ2V0X3RyYWNlcy50cmFjZXMgPSBOVUxMOworICAgIGdldF90cmFjZXMudHJhY2ViYWNrcyA9IE5VTEw7CisgICAgZ2V0X3RyYWNlcy5saXN0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAoZ2V0X3RyYWNlcy5saXN0ID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICBpZiAoIXRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKQorICAgICAgICByZXR1cm4gZ2V0X3RyYWNlcy5saXN0OworCisgICAgLyogdGhlIHRyYWNlYmFjayBoYXNoIHRhYmxlIGlzIHVzZWQgdGVtcG9yYXJpbHkgdG8gaW50ZXJuIHRyYWNlYmFjayB0dXBsZQorICAgICAgIG9mIChmaWxlbmFtZSwgbGluZW5vKSB0dXBsZXMgKi8KKyAgICBnZXRfdHJhY2VzLnRyYWNlYmFja3MgPSBoYXNodGFibGVfbmV3KHNpemVvZihQeU9iamVjdCAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZGlyZWN0KTsKKyAgICBpZiAoZ2V0X3RyYWNlcy50cmFjZWJhY2tzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBUQUJMRVNfTE9DSygpOworICAgIGdldF90cmFjZXMudHJhY2VzID0gX1B5X2hhc2h0YWJsZV9jb3B5KHRyYWNlbWFsbG9jX3RyYWNlcyk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgaWYgKGdldF90cmFjZXMudHJhY2VzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKKyAgICBzZXRfcmVlbnRyYW50KDEpOworICAgIGVyciA9IF9QeV9oYXNodGFibGVfZm9yZWFjaChnZXRfdHJhY2VzLnRyYWNlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlc19maWxsLCAmZ2V0X3RyYWNlcyk7CisgICAgc2V0X3JlZW50cmFudCgwKTsKKyAgICBpZiAoZXJyKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgZ290byBmaW5hbGx5OworCitlcnJvcjoKKyAgICBQeV9DTEVBUihnZXRfdHJhY2VzLmxpc3QpOworCitmaW5hbGx5OgorICAgIGlmIChnZXRfdHJhY2VzLnRyYWNlYmFja3MgIT0gTlVMTCkgeworICAgICAgICBfUHlfaGFzaHRhYmxlX2ZvcmVhY2goZ2V0X3RyYWNlcy50cmFjZWJhY2tzLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlbWFsbG9jX3B5b2JqZWN0X2RlY3JlZl9jYiwgTlVMTCk7CisgICAgICAgIF9QeV9oYXNodGFibGVfZGVzdHJveShnZXRfdHJhY2VzLnRyYWNlYmFja3MpOworICAgIH0KKyAgICBpZiAoZ2V0X3RyYWNlcy50cmFjZXMgIT0gTlVMTCkKKyAgICAgICAgX1B5X2hhc2h0YWJsZV9kZXN0cm95KGdldF90cmFjZXMudHJhY2VzKTsKKworICAgIHJldHVybiBnZXRfdHJhY2VzLmxpc3Q7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfb2JqZWN0X3RyYWNlYmFja19kb2MsCisgICAgIl9nZXRfb2JqZWN0X3RyYWNlYmFjayhvYmopXG4iCisgICAgIlxuIgorICAgICJHZXQgdGhlIHRyYWNlYmFjayB3aGVyZSB0aGUgUHl0aG9uIG9iamVjdCBvYmogd2FzIGFsbG9jYXRlZC5cbiIKKyAgICAiUmV0dXJuIGEgdHVwbGUgb2YgKGZpbGVuYW1lOiBzdHIsIGxpbmVubzogaW50KSB0dXBsZXMuXG4iCisgICAgIlxuIgorICAgICJSZXR1cm4gTm9uZSBpZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGlzIGRpc2FibGVkIG9yIGRpZCBub3RcbiIKKyAgICAidHJhY2UgdGhlIGFsbG9jYXRpb24gb2YgdGhlIG9iamVjdC4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2NfZ2V0X29iamVjdF90cmFjZWJhY2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlUeXBlT2JqZWN0ICp0eXBlOworICAgIHZvaWQgKnB0cjsKKyAgICB0cmFjZV90IHRyYWNlOworICAgIGludCBmb3VuZDsKKworICAgIGlmICghdHJhY2VtYWxsb2NfY29uZmlnLnRyYWNpbmcpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCisgICAgdHlwZSA9IFB5X1RZUEUob2JqKTsKKyAgICBpZiAoUHlUeXBlX0lTX0dDKHR5cGUpKQorICAgICAgICBwdHIgPSAodm9pZCAqKSgoY2hhciAqKW9iaiAtIHNpemVvZihQeUdDX0hlYWQpKTsKKyAgICBlbHNlCisgICAgICAgIHB0ciA9ICh2b2lkICopb2JqOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBmb3VuZCA9IF9QeV9IQVNIVEFCTEVfR0VUKHRyYWNlbWFsbG9jX3RyYWNlcywgcHRyLCB0cmFjZSk7CisgICAgVEFCTEVTX1VOTE9DSygpOworCisgICAgaWYgKCFmb3VuZCkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKKyAgICByZXR1cm4gdHJhY2ViYWNrX3RvX3B5b2JqZWN0KHRyYWNlLnRyYWNlYmFjaywgTlVMTCk7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19zdGFydF9kb2MsCisgICAgInN0YXJ0KG5mcmFtZTogaW50PTEpXG4iCisgICAgIlxuIgorICAgICJTdGFydCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMuIFNldCBhbHNvIHRoZSBtYXhpbXVtIG51bWJlciBcbiIKKyAgICAib2YgZnJhbWVzIHN0b3JlZCBpbiB0aGUgdHJhY2ViYWNrIG9mIGEgdHJhY2UgdG8gbmZyYW1lLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitweV90cmFjZW1hbGxvY19zdGFydChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlfc3NpemVfdCBuZnJhbWUgPSAxOworICAgIGludCBuZnJhbWVfaW50OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpzdGFydCIsICZuZnJhbWUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChuZnJhbWUgPCAxIHx8IG5mcmFtZSA+IE1BWF9ORlJBTUUpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAidGhlIG51bWJlciBvZiBmcmFtZXMgbXVzdCBiZSBpbiByYW5nZSBbMTsgJWldIiwKKyAgICAgICAgICAgICAgICAgICAgIChpbnQpTUFYX05GUkFNRSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBuZnJhbWVfaW50ID0gUHlfU0FGRV9ET1dOQ0FTVChuZnJhbWUsIFB5X3NzaXplX3QsIGludCk7CisKKyAgICBpZiAodHJhY2VtYWxsb2Nfc3RhcnQobmZyYW1lX2ludCkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2Nfc3RvcF9kb2MsCisgICAgInN0b3AoKVxuIgorICAgICJcbiIKKyAgICAiU3RvcCB0cmFjaW5nIFB5dGhvbiBtZW1vcnkgYWxsb2NhdGlvbnMgYW5kIGNsZWFyIHRyYWNlc1xuIgorICAgICJvZiBtZW1vcnkgYmxvY2tzIGFsbG9jYXRlZCBieSBQeXRob24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3B5X3RyYWNlbWFsbG9jX3N0b3AoUHlPYmplY3QgKnNlbGYpCit7CisgICAgdHJhY2VtYWxsb2Nfc3RvcCgpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIodHJhY2VtYWxsb2NfZ2V0X3RyYWNlYmFja19saW1pdF9kb2MsCisgICAgImdldF90cmFjZWJhY2tfbGltaXQoKSAtPiBpbnRcbiIKKyAgICAiXG4iCisgICAgIkdldCB0aGUgbWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIHN0b3JlZCBpbiB0aGUgdHJhY2ViYWNrXG4iCisgICAgIm9mIGEgdHJhY2UuXG4iCisgICAgIlxuIgorICAgICJCeSBkZWZhdWx0LCBhIHRyYWNlIG9mIGFuIGFsbG9jYXRlZCBtZW1vcnkgYmxvY2sgb25seSBzdG9yZXNcbiIKKyAgICAidGhlIG1vc3QgcmVjZW50IGZyYW1lOiB0aGUgbGltaXQgaXMgMS4iKTsKKworc3RhdGljIFB5T2JqZWN0KgorcHlfdHJhY2VtYWxsb2NfZ2V0X3RyYWNlYmFja19saW1pdChQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHRyYWNlbWFsbG9jX2NvbmZpZy5tYXhfbmZyYW1lKTsKK30KKworUHlEb2NfU1RSVkFSKHRyYWNlbWFsbG9jX2dldF90cmFjZW1hbGxvY19tZW1vcnlfZG9jLAorICAgICJnZXRfdHJhY2VtYWxsb2NfbWVtb3J5KCkgLT4gaW50XG4iCisgICAgIlxuIgorICAgICJHZXQgdGhlIG1lbW9yeSB1c2FnZSBpbiBieXRlcyBvZiB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlXG4iCisgICAgInVzZWQgaW50ZXJuYWxseSB0byB0cmFjZSBtZW1vcnkgYWxsb2NhdGlvbnMuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlbWFsbG9jX2dldF90cmFjZW1hbGxvY19tZW1vcnkoUHlPYmplY3QgKnNlbGYpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgUHlPYmplY3QgKnNpemVfb2JqOworCisgICAgc2l6ZSA9IF9QeV9oYXNodGFibGVfc2l6ZSh0cmFjZW1hbGxvY190cmFjZWJhY2tzKTsKKyAgICBzaXplICs9IF9QeV9oYXNodGFibGVfc2l6ZSh0cmFjZW1hbGxvY19maWxlbmFtZXMpOworCisgICAgVEFCTEVTX0xPQ0soKTsKKyAgICBzaXplICs9IF9QeV9oYXNodGFibGVfc2l6ZSh0cmFjZW1hbGxvY190cmFjZXMpOworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIHNpemVfb2JqID0gUHlMb25nX0Zyb21TaXplX3Qoc2l6ZSk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4iLCBzaXplX29iaik7Cit9CisKK1B5RG9jX1NUUlZBUih0cmFjZW1hbGxvY19nZXRfdHJhY2VkX21lbW9yeV9kb2MsCisgICAgImdldF90cmFjZWRfbWVtb3J5KCkgLT4gKGludCwgaW50KVxuIgorICAgICJcbiIKKyAgICAiR2V0IHRoZSBjdXJyZW50IHNpemUgYW5kIHBlYWsgc2l6ZSBvZiBtZW1vcnkgYmxvY2tzIHRyYWNlZFxuIgorICAgICJieSB0aGUgdHJhY2VtYWxsb2MgbW9kdWxlIGFzIGEgdHVwbGU6IChjdXJyZW50OiBpbnQsIHBlYWs6IGludCkuIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK3RyYWNlbWFsbG9jX2dldF90cmFjZWRfbWVtb3J5KFB5T2JqZWN0ICpzZWxmKQoreworICAgIFB5X3NzaXplX3Qgc2l6ZSwgcGVha19zaXplOworICAgIFB5T2JqZWN0ICpzaXplX29iaiwgKnBlYWtfc2l6ZV9vYmo7CisKKyAgICBpZiAoIXRyYWNlbWFsbG9jX2NvbmZpZy50cmFjaW5nKQorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiaWkiLCAwLCAwKTsKKworICAgIFRBQkxFU19MT0NLKCk7CisgICAgc2l6ZSA9IHRyYWNlbWFsbG9jX3RyYWNlZF9tZW1vcnk7CisgICAgcGVha19zaXplID0gdHJhY2VtYWxsb2NfcGVha190cmFjZWRfbWVtb3J5OworICAgIFRBQkxFU19VTkxPQ0soKTsKKworICAgIHNpemVfb2JqID0gUHlMb25nX0Zyb21TaXplX3Qoc2l6ZSk7CisgICAgcGVha19zaXplX29iaiA9IFB5TG9uZ19Gcm9tU2l6ZV90KHBlYWtfc2l6ZSk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk5OIiwgc2l6ZV9vYmosIHBlYWtfc2l6ZV9vYmopOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgbW9kdWxlX21ldGhvZHNbXSA9IHsKKyAgICB7ImlzX3RyYWNpbmciLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfaXNfdHJhY2luZywKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2lzX3RyYWNpbmdfZG9jfSwKKyAgICB7ImNsZWFyX3RyYWNlcyIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19jbGVhcl90cmFjZXMsCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19jbGVhcl90cmFjZXNfZG9jfSwKKyAgICB7Il9nZXRfdHJhY2VzIiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX2dldF90cmFjZXMsCisgICAgIE1FVEhfTk9BUkdTLCB0cmFjZW1hbGxvY19nZXRfdHJhY2VzX2RvY30sCisgICAgeyJfZ2V0X29iamVjdF90cmFjZWJhY2siLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfZ2V0X29iamVjdF90cmFjZWJhY2ssCisgICAgIE1FVEhfTywgdHJhY2VtYWxsb2NfZ2V0X29iamVjdF90cmFjZWJhY2tfZG9jfSwKKyAgICB7InN0YXJ0IiwgKFB5Q0Z1bmN0aW9uKXB5X3RyYWNlbWFsbG9jX3N0YXJ0LAorICAgICAgTUVUSF9WQVJBUkdTLCB0cmFjZW1hbGxvY19zdGFydF9kb2N9LAorICAgIHsic3RvcCIsIChQeUNGdW5jdGlvbilweV90cmFjZW1hbGxvY19zdG9wLAorICAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX3N0b3BfZG9jfSwKKyAgICB7ImdldF90cmFjZWJhY2tfbGltaXQiLCAoUHlDRnVuY3Rpb24pcHlfdHJhY2VtYWxsb2NfZ2V0X3RyYWNlYmFja19saW1pdCwKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2dldF90cmFjZWJhY2tfbGltaXRfZG9jfSwKKyAgICB7ImdldF90cmFjZW1hbGxvY19tZW1vcnkiLCAoUHlDRnVuY3Rpb24pdHJhY2VtYWxsb2NfZ2V0X3RyYWNlbWFsbG9jX21lbW9yeSwKKyAgICAgTUVUSF9OT0FSR1MsIHRyYWNlbWFsbG9jX2dldF90cmFjZW1hbGxvY19tZW1vcnlfZG9jfSwKKyAgICB7ImdldF90cmFjZWRfbWVtb3J5IiwgKFB5Q0Z1bmN0aW9uKXRyYWNlbWFsbG9jX2dldF90cmFjZWRfbWVtb3J5LAorICAgICBNRVRIX05PQVJHUywgdHJhY2VtYWxsb2NfZ2V0X3RyYWNlZF9tZW1vcnlfZG9jfSwKKworICAgIC8qIHNlbnRpbmVsICovCisgICAge05VTEwsIE5VTEx9Cit9OworCitQeURvY19TVFJWQVIobW9kdWxlX2RvYywKKyJEZWJ1ZyBtb2R1bGUgdG8gdHJhY2UgbWVtb3J5IGJsb2NrcyBhbGxvY2F0ZWQgYnkgUHl0aG9uLiIpOworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG1vZHVsZV9kZWYgPSB7CisgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAorICAgICJfdHJhY2VtYWxsb2MiLAorICAgIG1vZHVsZV9kb2MsCisgICAgMCwgLyogbm9uLW5lZ2F0aXZlIHNpemUgdG8gYmUgYWJsZSB0byB1bmxvYWQgdGhlIG1vZHVsZSAqLworICAgIG1vZHVsZV9tZXRob2RzLAorICAgIE5VTEwsCit9OworCitQeU1PRElOSVRfRlVOQworUHlJbml0X190cmFjZW1hbGxvYyh2b2lkKQoreworICAgIFB5T2JqZWN0ICptOworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJm1vZHVsZV9kZWYpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHRyYWNlbWFsbG9jX2luaXQoKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIG07Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlX3N5c194b3B0aW9ucyhQeU9iamVjdCAqdmFsdWUpCit7CisgICAgUHlPYmplY3QgKnZhbHVlbG9uZzsKKyAgICBsb25nIG5mcmFtZTsKKworICAgIGlmICh2YWx1ZSA9PSBQeV9UcnVlKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sodmFsdWUpKTsKKyAgICBpZiAoUHlVbmljb2RlX0dldExlbmd0aCh2YWx1ZSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgdmFsdWVsb25nID0gUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KHZhbHVlLCAxMCk7CisgICAgaWYgKHZhbHVlbG9uZyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBuZnJhbWUgPSBQeUxvbmdfQXNMb25nKHZhbHVlbG9uZyk7CisgICAgUHlfREVDUkVGKHZhbHVlbG9uZyk7CisgICAgaWYgKG5mcmFtZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAobmZyYW1lIDwgMSB8fCBuZnJhbWUgPiBNQVhfTkZSQU1FKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChuZnJhbWUsIGxvbmcsIGludCk7Cit9CisKK2ludAorX1B5VHJhY2VNYWxsb2NfSW5pdCh2b2lkKQoreworICAgIGNoYXIgKnA7CisgICAgaW50IG5mcmFtZTsKKworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgYXNzZXJ0KFB5R0lMU3RhdGVfQ2hlY2soKSk7CisjZW5kaWYKKworICAgIGlmICgocCA9IFB5X0dFVEVOVigiUFlUSE9OVFJBQ0VNQUxMT0MiKSkgJiYgKnAgIT0gJ1wwJykgeworICAgICAgICBjaGFyICplbmRwdHIgPSBwOworICAgICAgICBsb25nIHZhbHVlOworCisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgdmFsdWUgPSBzdHJ0b2wocCwgJmVuZHB0ciwgMTApOworICAgICAgICBpZiAoKmVuZHB0ciAhPSAnXDAnCisgICAgICAgICAgICB8fCB2YWx1ZSA8IDEKKyAgICAgICAgICAgIHx8IHZhbHVlID4gTUFYX05GUkFNRQorICAgICAgICAgICAgfHwgZXJybm8gPT0gRVJBTkdFKQorICAgICAgICB7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJQWVRIT05UUkFDRU1BTExPQzogaW52YWxpZCBudW1iZXIgb2YgZnJhbWVzIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBuZnJhbWUgPSAoaW50KXZhbHVlOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKnhvcHRpb25zLCAqa2V5LCAqdmFsdWU7CisKKyAgICAgICAgeG9wdGlvbnMgPSBQeVN5c19HZXRYT3B0aW9ucygpOworICAgICAgICBpZiAoeG9wdGlvbnMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBrZXkgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygidHJhY2VtYWxsb2MiKTsKKyAgICAgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoeG9wdGlvbnMsIGtleSk7CisgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgICAgICAvKiAtWCB0cmFjZW1hbGxvYyBpcyBub3QgdXNlZCAqLworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBuZnJhbWUgPSBwYXJzZV9zeXNfeG9wdGlvbnModmFsdWUpOworICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICBpZiAobmZyYW1lIDwgMCkgeworICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiLVggdHJhY2VtYWxsb2M9TkZSQU1FOiBpbnZhbGlkIG51bWJlciBvZiBmcmFtZXMiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cmFjZW1hbGxvY19zdGFydChuZnJhbWUpOworfQorCit2b2lkCitfUHlUcmFjZU1hbGxvY19GaW5pKHZvaWQpCit7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBhc3NlcnQoUHlHSUxTdGF0ZV9DaGVjaygpKTsKKyNlbmRpZgorICAgIHRyYWNlbWFsbG9jX2RlaW5pdCgpOworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL193ZWFrcmVmLmMgYi9Nb2R1bGVzL193ZWFrcmVmLmMKaW5kZXggODg5OTViOC4uZGE1ODkzMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9fd2Vha3JlZi5jCisrKyBiL01vZHVsZXMvX3dlYWtyZWYuYwpAQCAtNCwyNSArNCw1OSBAQAogI2RlZmluZSBHRVRfV0VBS1JFRlNfTElTVFBUUihvKSBcCiAgICAgICAgICgoUHlXZWFrUmVmZXJlbmNlICoqKSBQeU9iamVjdF9HRVRfV0VBS1JFRlNfTElTVFBUUihvKSkKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF93ZWFrcmVmCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1mZmVjNzNiODU4NDY1OTZkXSovCiAKLVB5RG9jX1NUUlZBUih3ZWFrcmVmX2dldHdlYWtyZWZjb3VudF9fZG9jX18sCi0iZ2V0d2Vha3JlZmNvdW50KG9iamVjdCkgLS0gcmV0dXJuIHRoZSBudW1iZXIgb2Ygd2VhayByZWZlcmVuY2VzXG4iCi0idG8gJ29iamVjdCcuIik7CisvKltjbGluaWMgaW5wdXRdCisKK193ZWFrcmVmLmdldHdlYWtyZWZjb3VudCAtPiBQeV9zc2l6ZV90CisKKyAgb2JqZWN0OiBvYmplY3QKKyAgLworCitSZXR1cm4gdGhlIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gJ29iamVjdCcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19fLAorImdldHdlYWtyZWZjb3VudCgkbW9kdWxlLCBvYmplY3QsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG51bWJlciBvZiB3ZWFrIHJlZmVyZW5jZXMgdG8gXCdvYmplY3RcJy4iKTsKKworI2RlZmluZSBfV0VBS1JFRl9HRVRXRUFLUkVGQ09VTlRfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldHdlYWtyZWZjb3VudCIsIChQeUNGdW5jdGlvbilfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnQsIE1FVEhfTywgX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X19kb2NfX30sCisKK3N0YXRpYyBQeV9zc2l6ZV90Citfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqZWN0KTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXdlYWtyZWZfZ2V0d2Vha3JlZmNvdW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqb2JqZWN0KQorX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmplY3QpCiB7Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBfcmV0dXJuX3ZhbHVlOwogCi0gICAgaWYgKFB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhQeV9UWVBFKG9iamVjdCkpKSB7Ci0gICAgICAgIFB5V2Vha1JlZmVyZW5jZSAqKmxpc3QgPSBHRVRfV0VBS1JFRlNfTElTVFBUUihvYmplY3QpOworICAgIF9yZXR1cm5fdmFsdWUgPSBfd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfaW1wbChtb2R1bGUsIG9iamVjdCk7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KF9yZXR1cm5fdmFsdWUpOwogCi0gICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tU3NpemVfdChfUHlXZWFrcmVmX0dldFdlYWtyZWZDb3VudCgqbGlzdCkpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KIAotICAgIHJldHVybiByZXN1bHQ7CitzdGF0aWMgUHlfc3NpemVfdAorX3dlYWtyZWZfZ2V0d2Vha3JlZmNvdW50X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm9iamVjdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wMzJlZWRiZmQ3ZDY5ZTEwIGlucHV0PWNlZGI2OTcxMWI2YTI1MDddKi8KK3sKKyAgICBQeVdlYWtSZWZlcmVuY2UgKipsaXN0OworCisgICAgaWYgKCFQeVR5cGVfU1VQUE9SVFNfV0VBS1JFRlMoUHlfVFlQRShvYmplY3QpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBsaXN0ID0gR0VUX1dFQUtSRUZTX0xJU1RQVFIob2JqZWN0KTsKKyAgICByZXR1cm4gX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQoKmxpc3QpOwogfQogCiAKQEAgLTc4LDggKzExMiw3IEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZgogd2Vha3JlZl9mdW5jdGlvbnNbXSA9ICB7Ci0gICAgeyJnZXR3ZWFrcmVmY291bnQiLCB3ZWFrcmVmX2dldHdlYWtyZWZjb3VudCwgICAgICAgIE1FVEhfTywKLSAgICAgd2Vha3JlZl9nZXR3ZWFrcmVmY291bnRfX2RvY19ffSwKKyAgICBfV0VBS1JFRl9HRVRXRUFLUkVGQ09VTlRfTUVUSE9EREVGCiAgICAgeyJnZXR3ZWFrcmVmcyIsICAgICB3ZWFrcmVmX2dldHdlYWtyZWZzLCAgICAgICAgICAgIE1FVEhfTywKICAgICAgd2Vha3JlZl9nZXR3ZWFrcmVmc19fZG9jX199LAogICAgIHsicHJveHkiLCAgICAgICAgICAgd2Vha3JlZl9wcm94eSwgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MsCkBAIC0xMDYsNyArMTM5LDcgQEAKICAgICBQeU9iamVjdCAqbTsKIAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJndlYWtyZWZtb2R1bGUpOwotICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIGlmIChtICE9IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKCZfUHlXZWFrcmVmX1JlZlR5cGUpOwogICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgInJlZiIsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL193aW5hcGkuYyBiL01vZHVsZXMvX3dpbmFwaS5jCmluZGV4IDUyNTdhMWUuLmQ0NzJjOWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvX3dpbmFwaS5jCisrKyBiL01vZHVsZXMvX3dpbmFwaS5jCkBAIC02Miw2ICs2Miw4IEBACiAKICNkZWZpbmUgVF9IQU5ETEUgVF9QT0lOVEVSCiAKKyNkZWZpbmUgRFdPUkRfTUFYIDQyOTQ5NjcyOTVVCisKIC8qIEdyYWIgQ2FuY2VsSW9FeCBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCiBzdGF0aWMgaW50IGhhc19DYW5jZWxJb0V4ID0gLTE7CiBzdGF0aWMgQk9PTCAoQ0FMTEJBQ0sgKlB5X0NhbmNlbElvRXgpKEhBTkRMRSwgTFBPVkVSTEFQUEVEKTsKQEAgLTEwNSwxNyArMTA3LDM3IEBACiB7CiAgICAgRFdPUkQgYnl0ZXM7CiAgICAgaW50IGVyciA9IEdldExhc3RFcnJvcigpOworCiAgICAgaWYgKHNlbGYtPnBlbmRpbmcpIHsKLSAgICAgICAgLyogbWFrZSBpdCBhIHByb2dyYW1taW5nIGVycm9yIHRvIGRlYWxsb2NhdGUgd2hpbGUgb3BlcmF0aW9uCi0gICAgICAgICAgIGlzIHBlbmRpbmcsIGV2ZW4gaWYgd2UgY2FuIHNhZmVseSBjYW5jZWwgaXQgKi8KICAgICAgICAgaWYgKGNoZWNrX0NhbmNlbElvRXgoKSAmJgotICAgICAgICAgICAgICAgIFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCkpCi0gICAgICAgICAgICBHZXRPdmVybGFwcGVkUmVzdWx0KHNlbGYtPmhhbmRsZSwgJnNlbGYtPm92ZXJsYXBwZWQsICZieXRlcywgVFJVRSk7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbnMgc3RpbGwgaW4gZmxpZ2h0IHdoaWxlIGRlc3Ryb3lpbmcgIgotICAgICAgICAgICAgICAgICAgICAgICAgIk92ZXJsYXBwZWQgb2JqZWN0LCB0aGUgcHJvY2VzcyBtYXkgY3Jhc2giKTsKLSAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOworICAgICAgICAgICAgUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKSAmJgorICAgICAgICAgICAgR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkLCAmYnl0ZXMsIFRSVUUpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGUgb3BlcmF0aW9uIGlzIG5vIGxvbmdlciBwZW5kaW5nIC0tIG5vdGhpbmcgdG8gZG8uICovCisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoX1B5X0ZpbmFsaXppbmcgPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogVGhlIG9wZXJhdGlvbiBpcyBzdGlsbCBwZW5kaW5nIC0tIGdpdmUgYSB3YXJuaW5nLiAgVGhpcworICAgICAgICAgICAgICAgd2lsbCBwcm9iYWJseSBvbmx5IGhhcHBlbiBvbiBXaW5kb3dzIFhQLiAqLworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSS9PIG9wZXJhdGlvbnMgc3RpbGwgaW4gZmxpZ2h0IHdoaWxlIGRlc3Ryb3lpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJPdmVybGFwcGVkIG9iamVjdCwgdGhlIHByb2Nlc3MgbWF5IGNyYXNoIik7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGUgb3BlcmF0aW9uIGlzIHN0aWxsIHBlbmRpbmcsIGJ1dCB0aGUgcHJvY2VzcyBpcworICAgICAgICAgICAgICAgcHJvYmFibHkgYWJvdXQgdG8gZXhpdCwgc28gd2UgbmVlZCBub3Qgd29ycnkgdG9vIG11Y2gKKyAgICAgICAgICAgICAgIGFib3V0IG1lbW9yeSBsZWFrcy4gIExlYWtpbmcgc2VsZiBwcmV2ZW50cyBhIHBvdGVudGlhbAorICAgICAgICAgICAgICAgY3Jhc2guICBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGRhZW1vbiB0aHJlYWQgaXMgY2xlYW5lZAorICAgICAgICAgICAgICAgdXAgYXQgZXhpdCAtLSBzZWUgIzE5NTY1LiAgV2Ugb25seSBleHBlY3QgdG8gZ2V0IGhlcmUKKyAgICAgICAgICAgICAgIG9uIFdpbmRvd3MgWFAuICovCisgICAgICAgICAgICBDbG9zZUhhbmRsZShzZWxmLT5vdmVybGFwcGVkLmhFdmVudCk7CisgICAgICAgICAgICBTZXRMYXN0RXJyb3IoZXJyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgIH0KKwogICAgIENsb3NlSGFuZGxlKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50KTsKICAgICBTZXRMYXN0RXJyb3IoZXJyKTsKICAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLm9iaikKQEAgLTExNTIsNyArMTE3NCw3IEBACiAgICAgSEFORExFIGhhbmRsZTsKICAgICBQeV9idWZmZXIgX2J1ZiwgKmJ1ZjsKICAgICBQeU9iamVjdCAqYnVmb2JqOwotICAgIERXT1JEIHdyaXR0ZW47CisgICAgRFdPUkQgbGVuLCB3cml0dGVuOwogICAgIEJPT0wgcmV0OwogICAgIGludCB1c2Vfb3ZlcmxhcHBlZCA9IDA7CiAgICAgRFdPUkQgZXJyOwpAQCAtMTE4MCw3ICsxMjAyLDggQEAKICAgICB9CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmV0ID0gV3JpdGVGaWxlKGhhbmRsZSwgYnVmLT5idWYsIGJ1Zi0+bGVuLCAmd3JpdHRlbiwKKyAgICBsZW4gPSAoRFdPUkQpUHlfTUlOKGJ1Zi0+bGVuLCBEV09SRF9NQVgpOworICAgIHJldCA9IFdyaXRlRmlsZShoYW5kbGUsIGJ1Zi0+YnVmLCBsZW4sICZ3cml0dGVuLAogICAgICAgICAgICAgICAgICAgICBvdmVybGFwcGVkID8gJm92ZXJsYXBwZWQtPm92ZXJsYXBwZWQgOiBOVUxMKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCkBAIC0xMzMwLDYgKzEzNTMsNyBAQAogICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCBTVElMTF9BQ1RJVkUpOwogICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCBTV19ISURFKTsKICAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgV0FJVF9PQkpFQ1RfMCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsIFdBSVRfQUJBTkRPTkVEXzApOwogICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCBXQUlUX1RJTUVPVVQpOwogCiAgICAgV0lOQVBJX0NPTlNUQU5UKCJpIiwgTlVMTCk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2FycmF5bW9kdWxlLmMgYi9Nb2R1bGVzL2FycmF5bW9kdWxlLmMKaW5kZXggM2FiYTlhZC4uNWFiMWFiNiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hcnJheW1vZHVsZS5jCisrKyBiL01vZHVsZXMvYXJyYXltb2R1bGUuYwpAQCAtNTEzLDcgKzUxMyw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0YXJyYXlpdGVtKFB5T2JqZWN0ICpvcCwgUHlfc3NpemVfdCBpKQogewotICAgIHJlZ2lzdGVyIGFycmF5b2JqZWN0ICphcDsKKyAgICBhcnJheW9iamVjdCAqYXA7CiAgICAgYXNzZXJ0KGFycmF5X0NoZWNrKG9wKSk7CiAgICAgYXAgPSAoYXJyYXlvYmplY3QgKilvcDsKICAgICBhc3NlcnQoaT49MCAmJiBpPFB5X1NJWkUoYXApKTsKQEAgLTk2OCw4ICs5NjgsMTMgQEAKICAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKLSAgICAgICAgaW50IGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOworICAgICAgICBQeU9iamVjdCAqc2VsZmk7CisgICAgICAgIGludCBjbXA7CisKKyAgICAgICAgc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7CisgICAgICAgIGlmIChzZWxmaSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzZWxmaSwgdiwgUHlfRVEpOwogICAgICAgICBQeV9ERUNSRUYoc2VsZmkpOwogICAgICAgICBpZiAoY21wID4gMCkKICAgICAgICAgICAgIGNvdW50Kys7CkBAIC05OTAsOCArOTk1LDEzIEBACiAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUoc2VsZik7IGkrKykgewotICAgICAgICBQeU9iamVjdCAqc2VsZmkgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7Ci0gICAgICAgIGludCBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKKyAgICAgICAgUHlPYmplY3QgKnNlbGZpOworICAgICAgICBpbnQgY21wOworCisgICAgICAgIHNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICAgICAgaWYgKGNtcCA+IDApIHsKICAgICAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpaSk7CkBAIC0xMDE2LDYgKzEwMjYsOCBAQAogCiAgICAgZm9yIChpID0gMCwgY21wID0gMCA7IGNtcCA9PSAwICYmIGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKnNlbGZpID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsIGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmaSk7CiAgICAgfQpAQCAtMTAyOCw4ICsxMDQwLDEzIEBACiAgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfU0laRShzZWxmKTsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLGkpOwotICAgICAgICBpbnQgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHNlbGZpLCB2LCBQeV9FUSk7CisgICAgICAgIFB5T2JqZWN0ICpzZWxmaTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBzZWxmaSA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLGkpOworICAgICAgICBpZiAoc2VsZmkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjbXAgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc2VsZmksIHYsIFB5X0VRKTsKICAgICAgICAgUHlfREVDUkVGKHNlbGZpKTsKICAgICAgICAgaWYgKGNtcCA+IDApIHsKICAgICAgICAgICAgIGlmIChhcnJheV9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLApAQCAtMTA2OCw3ICsxMDg1LDkgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJwb3AgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICB2ID0gZ2V0YXJyYXlpdGVtKChQeU9iamVjdCAqKXNlbGYsaSk7CisgICAgdiA9IGdldGFycmF5aXRlbSgoUHlPYmplY3QgKilzZWxmLCBpKTsKKyAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoYXJyYXlfYXNzX3NsaWNlKHNlbGYsIGksIGkrMSwgKFB5T2JqZWN0ICopTlVMTCkgIT0gMCkgewogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTExNCwxMyArMTEzMywyNSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGFycmF5X2J1ZmZlcl9pbmZvKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIFB5T2JqZWN0KiByZXR2YWwgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMLCAqdjsKKwogICAgIHJldHZhbCA9IFB5VHVwbGVfTmV3KDIpOwogICAgIGlmICghcmV0dmFsKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAwLCBQeUxvbmdfRnJvbVZvaWRQdHIoc2VsZi0+b2JfaXRlbSkpOwotICAgIFB5VHVwbGVfU0VUX0lURU0ocmV0dmFsLCAxLCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpKFB5X1NJWkUoc2VsZikpKSk7CisgICAgdiA9IFB5TG9uZ19Gcm9tVm9pZFB0cihzZWxmLT5vYl9pdGVtKTsKKyAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgUHlUdXBsZV9TRVRfSVRFTShyZXR2YWwsIDAsIHYpOworCisgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykoUHlfU0laRShzZWxmKSkpOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeVR1cGxlX1NFVF9JVEVNKHJldHZhbCwgMSwgdik7CiAKICAgICByZXR1cm4gcmV0dmFsOwogfQpAQCAtMTIwNiw4ICsxMjM3LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBhcnJheV9yZXZlcnNlKGFycmF5b2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaXRlbXNpemUgPSBzZWxmLT5vYl9kZXNjci0+aXRlbXNpemU7Ci0gICAgcmVnaXN0ZXIgY2hhciAqcCwgKnE7CisgICAgUHlfc3NpemVfdCBpdGVtc2l6ZSA9IHNlbGYtPm9iX2Rlc2NyLT5pdGVtc2l6ZTsKKyAgICBjaGFyICpwLCAqcTsKICAgICAvKiBsaXR0bGUgYnVmZmVyIHRvIGhvbGQgaXRlbXMgd2hpbGUgc3dhcHBpbmcgKi8KICAgICBjaGFyIHRtcFsyNTZdOyAgICAgIC8qIDggaXMgcHJvYmFibHkgZW5vdWdoIC0tIGJ1dCB3aHkgc2tpbXAgKi8KICAgICBhc3NlcnQoKHNpemVfdClpdGVtc2l6ZSA8PSBzaXplb2YodG1wKSk7CkBAIC0xMzg2LDEzICsxNDE3LDE2IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDA7IGkgPCBQeV9TSVpFKHNlbGYpOyBpKyspIHsKICAgICAgICAgUHlPYmplY3QgKnYgPSBnZXRhcnJheWl0ZW0oKFB5T2JqZWN0ICopc2VsZiwgaSk7Ci0gICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIFB5TGlzdF9TZXRJdGVtKGxpc3QsIGksIHYpOworICAgICAgICBpZiAodiA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKFB5TGlzdF9TZXRJdGVtKGxpc3QsIGksIHYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIHJldHVybiBsaXN0OworCitlcnJvcjoKKyAgICBQeV9ERUNSRUYobGlzdCk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIFB5RG9jX1NUUlZBUih0b2xpc3RfZG9jLApAQCAtMTQwNywxNCArMTQ0MSwxNCBAQAogICAgIFB5X3NzaXplX3QgbjsKICAgICBpZiAoYnVmZmVyLT5pdGVtc2l6ZSAhPSAxKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoYnVmZmVyKTsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInN0cmluZy9idWZmZXIgb2YgYnl0ZXMgcmVxdWlyZWQuIik7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJhIGJ5dGVzLWxpa2Ugb2JqZWN0IGlzIHJlcXVpcmVkIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBuID0gYnVmZmVyLT5sZW47CiAgICAgaWYgKG4gJSBpdGVtc2l6ZSAhPSAwKSB7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoYnVmZmVyKTsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgInN0cmluZyBsZW5ndGggbm90IGEgbXVsdGlwbGUgb2YgaXRlbSBzaXplIik7CisgICAgICAgICAgICAgICAgICAgImJ5dGVzIGxlbmd0aCBub3QgYSBtdWx0aXBsZSBvZiBpdGVtIHNpemUiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIG4gPSBuIC8gaXRlbXNpemU7CkBAIC0xNjY0LDExICsxNjk4LDggQEAKIHN0YXRpYyBlbnVtIG1hY2hpbmVfZm9ybWF0X2NvZGUKIHR5cGVjb2RlX3RvX21mb3JtYXRfY29kZShjaGFyIHR5cGVjb2RlKQogewotI2lmZGVmIFdPUkRTX0JJR0VORElBTgotICAgIGNvbnN0IGludCBpc19iaWdfZW5kaWFuID0gMTsKLSNlbHNlCi0gICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSAwOwotI2VuZGlmCisgICAgY29uc3QgaW50IGlzX2JpZ19lbmRpYW4gPSBQWV9CSUdfRU5ESUFOOworCiAgICAgc2l6ZV90IGludHNpemU7CiAgICAgaW50IGlzX3NpZ25lZDsKIApAQCAtMjQ4Nyw2ICsyNTE4LDIwIEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJDfE86YXJyYXkiLCAmYywgJmluaXRpYWwpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGlmIChpbml0aWFsICYmIGMgIT0gJ3UnKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soaW5pdGlhbCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJjYW5ub3QgdXNlIGEgc3RyIHRvIGluaXRpYWxpemUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJhbiBhcnJheSB3aXRoIHR5cGVjb2RlICclYyciLCBjKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGFycmF5X0NoZWNrKGluaXRpYWwpICYmCisgICAgICAgICAgICAgICAgICgoYXJyYXlvYmplY3QqKWluaXRpYWwpLT5vYl9kZXNjci0+dHlwZWNvZGUgPT0gJ3UnKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiY2Fubm90IHVzZSBhIHVuaWNvZGUgYXJyYXkgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICAgICJpbml0aWFsaXplIGFuIGFycmF5IHdpdGggdHlwZWNvZGUgJyVjJyIsIGMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKICAgICBpZiAoIShpbml0aWFsID09IE5VTEwgfHwgUHlMaXN0X0NoZWNrKGluaXRpYWwpCiAgICAgICAgICAgfHwgUHlCeXRlQXJyYXlfQ2hlY2soaW5pdGlhbCkKICAgICAgICAgICB8fCBQeUJ5dGVzX0NoZWNrKGluaXRpYWwpCkBAIC0yNTgzLDcgKzI2MjgsNyBAQAogICAgICAgICAgICAgICAgICAgICBzZWxmLT5hbGxvY2F0ZWQgPSBQeV9TSVpFKHNlbGYpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGluaXRpYWwgIT0gTlVMTCAmJiBhcnJheV9DaGVjayhpbml0aWFsKSkgeworICAgICAgICAgICAgZWxzZSBpZiAoaW5pdGlhbCAhPSBOVUxMICYmIGFycmF5X0NoZWNrKGluaXRpYWwpICYmIGxlbiA+IDApIHsKICAgICAgICAgICAgICAgICBhcnJheW9iamVjdCAqc2VsZiA9IChhcnJheW9iamVjdCAqKWE7CiAgICAgICAgICAgICAgICAgYXJyYXlvYmplY3QgKm90aGVyID0gKGFycmF5b2JqZWN0ICopaW5pdGlhbDsKICAgICAgICAgICAgICAgICBtZW1jcHkoc2VsZi0+b2JfaXRlbSwgb3RoZXItPm9iX2l0ZW0sIGxlbiAqIG90aGVyLT5vYl9kZXNjci0+aXRlbXNpemUpOwpAQCAtMjYxMyw5ICsyNjU4LDE5IEBACiAiVGhpcyBtb2R1bGUgZGVmaW5lcyBhbiBvYmplY3QgdHlwZSB3aGljaCBjYW4gZWZmaWNpZW50bHkgcmVwcmVzZW50XG5cCiBhbiBhcnJheSBvZiBiYXNpYyB2YWx1ZXM6IGNoYXJhY3RlcnMsIGludGVnZXJzLCBmbG9hdGluZyBwb2ludFxuXAogbnVtYmVycy4gIEFycmF5cyBhcmUgc2VxdWVuY2UgdHlwZXMgYW5kIGJlaGF2ZSB2ZXJ5IG11Y2ggbGlrZSBsaXN0cyxcblwKLWV4Y2VwdCB0aGF0IHRoZSB0eXBlIG9mIG9iamVjdHMgc3RvcmVkIGluIHRoZW0gaXMgY29uc3RyYWluZWQuICBUaGVcblwKLXR5cGUgaXMgc3BlY2lmaWVkIGF0IG9iamVjdCBjcmVhdGlvbiB0aW1lIGJ5IHVzaW5nIGEgdHlwZSBjb2RlLCB3aGljaFxuXAotaXMgYSBzaW5nbGUgY2hhcmFjdGVyLiAgVGhlIGZvbGxvd2luZyB0eXBlIGNvZGVzIGFyZSBkZWZpbmVkOlxuXAorZXhjZXB0IHRoYXQgdGhlIHR5cGUgb2Ygb2JqZWN0cyBzdG9yZWQgaW4gdGhlbSBpcyBjb25zdHJhaW5lZC5cbiIpOworCitQeURvY19TVFJWQVIoYXJyYXl0eXBlX2RvYywKKyJhcnJheSh0eXBlY29kZSBbLCBpbml0aWFsaXplcl0pIC0+IGFycmF5XG5cCitcblwKK1JldHVybiBhIG5ldyBhcnJheSB3aG9zZSBpdGVtcyBhcmUgcmVzdHJpY3RlZCBieSB0eXBlY29kZSwgYW5kXG5cCitpbml0aWFsaXplZCBmcm9tIHRoZSBvcHRpb25hbCBpbml0aWFsaXplciB2YWx1ZSwgd2hpY2ggbXVzdCBiZSBhIGxpc3QsXG5cCitzdHJpbmcgb3IgaXRlcmFibGUgb3ZlciBlbGVtZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS5cblwKK1xuXAorQXJyYXlzIHJlcHJlc2VudCBiYXNpYyB2YWx1ZXMgYW5kIGJlaGF2ZSB2ZXJ5IG11Y2ggbGlrZSBsaXN0cywgZXhjZXB0XG5cCit0aGUgdHlwZSBvZiBvYmplY3RzIHN0b3JlZCBpbiB0aGVtIGlzIGNvbnN0cmFpbmVkLiBUaGUgdHlwZSBpcyBzcGVjaWZpZWRcblwKK2F0IG9iamVjdCBjcmVhdGlvbiB0aW1lIGJ5IHVzaW5nIGEgdHlwZSBjb2RlLCB3aGljaCBpcyBhIHNpbmdsZSBjaGFyYWN0ZXIuXG5cCitUaGUgZm9sbG93aW5nIHR5cGUgY29kZXMgYXJlIGRlZmluZWQ6XG5cCiBcblwKICAgICBUeXBlIGNvZGUgICBDIFR5cGUgICAgICAgICAgICAgTWluaW11bSBzaXplIGluIGJ5dGVzIFxuXAogICAgICdiJyAgICAgICAgIHNpZ25lZCBpbnRlZ2VyICAgICAxIFxuXApAQCAtMjYzOSwyMSArMjY5NCw2IEBACiBDIGNvbXBpbGVyIHVzZWQgdG8gYnVpbGQgUHl0aG9uIHN1cHBvcnRzICdsb25nIGxvbmcnLCBvciwgb24gV2luZG93cywgXG5cCiAnX19pbnQ2NCcuXG5cCiBcblwKLVRoZSBjb25zdHJ1Y3RvciBpczpcblwKLVxuXAotYXJyYXkodHlwZWNvZGUgWywgaW5pdGlhbGl6ZXJdKSAtLSBjcmVhdGUgYSBuZXcgYXJyYXlcblwKLSIpOwotCi1QeURvY19TVFJWQVIoYXJyYXl0eXBlX2RvYywKLSJhcnJheSh0eXBlY29kZSBbLCBpbml0aWFsaXplcl0pIC0+IGFycmF5XG5cCi1cblwKLVJldHVybiBhIG5ldyBhcnJheSB3aG9zZSBpdGVtcyBhcmUgcmVzdHJpY3RlZCBieSB0eXBlY29kZSwgYW5kXG5cCi1pbml0aWFsaXplZCBmcm9tIHRoZSBvcHRpb25hbCBpbml0aWFsaXplciB2YWx1ZSwgd2hpY2ggbXVzdCBiZSBhIGxpc3QsXG5cCi1zdHJpbmcgb3IgaXRlcmFibGUgb3ZlciBlbGVtZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgdHlwZS5cblwKLVxuXAotQXJyYXlzIHJlcHJlc2VudCBiYXNpYyB2YWx1ZXMgYW5kIGJlaGF2ZSB2ZXJ5IG11Y2ggbGlrZSBsaXN0cywgZXhjZXB0XG5cCi10aGUgdHlwZSBvZiBvYmplY3RzIHN0b3JlZCBpbiB0aGVtIGlzIGNvbnN0cmFpbmVkLlxuXAotXG5cCiBNZXRob2RzOlxuXAogXG5cCiBhcHBlbmQoKSAtLSBhcHBlbmQgYSBuZXcgaXRlbSB0byB0aGUgZW5kIG9mIHRoZSBhcnJheVxuXApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYyBiL01vZHVsZXMvYXRleGl0bW9kdWxlLmMKaW5kZXggZjY4ZDgwNC4uYjljMzQ0YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hdGV4aXRtb2R1bGUuYworKysgYi9Nb2R1bGVzL2F0ZXhpdG1vZHVsZS5jCkBAIC0xMCw4ICsxMCw2IEBACiAKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gKGZvciBhdGV4aXRfY2xlYW51cCkgKi8KIHN0YXRpYyBQeU9iamVjdCAqYXRleGl0X2NsZWFyKFB5T2JqZWN0KiwgUHlPYmplY3QqKTsKLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gKGZvciBhdGV4aXRfY2FsbGZ1bmNzKSAqLwotc3RhdGljIHZvaWQgYXRleGl0X2NsZWFudXAoUHlPYmplY3QqKTsKIC8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgbW9kdWxlIG9iamVjdCAqLwogc3RhdGljIHN0cnVjdCBQeU1vZHVsZURlZiBhdGV4aXRtb2R1bGU7CiAKQEAgLTMzLDYgKzMxLDM1IEBACiAjZGVmaW5lIEdFVF9BVEVYSVRfU1RBVEUobW9kKSAoKGF0ZXhpdG1vZHVsZV9zdGF0ZSopUHlNb2R1bGVfR2V0U3RhdGUobW9kKSkKIAogCitzdGF0aWMgdm9pZAorYXRleGl0X2RlbGV0ZV9jYihhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlLCBpbnQgaSkKK3sKKyAgICBhdGV4aXRfY2FsbGJhY2sgKmNiOworCisgICAgY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKKyAgICBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXSA9IE5VTEw7CisgICAgUHlfREVDUkVGKGNiLT5mdW5jKTsKKyAgICBQeV9ERUNSRUYoY2ItPmFyZ3MpOworICAgIFB5X1hERUNSRUYoY2ItPmt3YXJncyk7CisgICAgUHlNZW1fRnJlZShjYik7Cit9CisKKy8qIENsZWFyIGFsbCBjYWxsYmFja3Mgd2l0aG91dCBjYWxsaW5nIHRoZW0gKi8KK3N0YXRpYyB2b2lkCithdGV4aXRfY2xlYW51cChhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlKQoreworICAgIGF0ZXhpdF9jYWxsYmFjayAqY2I7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG1vZHN0YXRlLT5uY2FsbGJhY2tzOyBpKyspIHsKKyAgICAgICAgY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKKyAgICAgICAgaWYgKGNiID09IE5VTEwpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBhdGV4aXRfZGVsZXRlX2NiKG1vZHN0YXRlLCBpKTsKKyAgICB9CisgICAgbW9kc3RhdGUtPm5jYWxsYmFja3MgPSAwOworfQorCiAvKiBJbnN0YWxsZWQgaW50byBweXRob25ydW4uYydzIGF0ZXhpdCBtZWNoYW5pc20gKi8KIAogc3RhdGljIHZvaWQKQEAgLTc4LDM0ICsxMDUsMTIgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHVsZSk7CisgICAgYXRleGl0X2NsZWFudXAobW9kc3RhdGUpOwogCiAgICAgaWYgKGV4Y190eXBlKQogICAgICAgICBQeUVycl9SZXN0b3JlKGV4Y190eXBlLCBleGNfdmFsdWUsIGV4Y190Yik7CiB9CiAKLXN0YXRpYyB2b2lkCi1hdGV4aXRfZGVsZXRlX2NiKFB5T2JqZWN0ICpzZWxmLCBpbnQgaSkKLXsKLSAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOwotICAgIGF0ZXhpdF9jYWxsYmFjayAqY2I7Ci0KLSAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7Ci0gICAgY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKLSAgICBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXSA9IE5VTEw7Ci0gICAgUHlfREVDUkVGKGNiLT5mdW5jKTsKLSAgICBQeV9ERUNSRUYoY2ItPmFyZ3MpOwotICAgIFB5X1hERUNSRUYoY2ItPmt3YXJncyk7Ci0gICAgUHlNZW1fRnJlZShjYik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdGV4aXRfY2xlYW51cChQeU9iamVjdCAqc2VsZikKLXsKLSAgICBQeU9iamVjdCAqciA9IGF0ZXhpdF9jbGVhcihzZWxmLCBOVUxMKTsKLSAgICBQeV9ERUNSRUYocik7Ci19Ci0KIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogLyogTW9kdWxlIG1ldGhvZHMuICovCiAKQEAgLTE5NCwyMSArMTk5LDUwIEBACiBzdGF0aWMgUHlPYmplY3QgKgogYXRleGl0X2NsZWFyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqdW51c2VkKQogeworICAgIGF0ZXhpdF9jbGVhbnVwKEdFVF9BVEVYSVRfU1RBVEUoc2VsZikpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoYXRleGl0X25jYWxsYmFja3NfX2RvY19fLAorIl9uY2FsbGJhY2tzKCkgLT4gaW50XG5cCitcblwKK1JldHVybiB0aGUgbnVtYmVyIG9mIHJlZ2lzdGVyZWQgZXhpdCBmdW5jdGlvbnMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdGV4aXRfbmNhbGxiYWNrcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKK3sKICAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOwotICAgIGF0ZXhpdF9jYWxsYmFjayAqY2I7Ci0gICAgaW50IGk7CiAKICAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7CiAKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KG1vZHN0YXRlLT5uY2FsbGJhY2tzKTsKK30KKworc3RhdGljIGludAorYXRleGl0X21fdHJhdmVyc2UoUHlPYmplY3QgKnNlbGYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQoreworICAgIGludCBpOworICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7CisKKyAgICBtb2RzdGF0ZSA9IEdFVF9BVEVYSVRfU1RBVEUoc2VsZik7CiAgICAgZm9yIChpID0gMDsgaSA8IG1vZHN0YXRlLT5uY2FsbGJhY2tzOyBpKyspIHsKLSAgICAgICAgY2IgPSBtb2RzdGF0ZS0+YXRleGl0X2NhbGxiYWNrc1tpXTsKKyAgICAgICAgYXRleGl0X2NhbGxiYWNrICpjYiA9IG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzW2ldOwogICAgICAgICBpZiAoY2IgPT0gTlVMTCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGF0ZXhpdF9kZWxldGVfY2Ioc2VsZiwgaSk7CisgICAgICAgIFB5X1ZJU0lUKGNiLT5mdW5jKTsKKyAgICAgICAgUHlfVklTSVQoY2ItPmFyZ3MpOworICAgICAgICBQeV9WSVNJVChjYi0+a3dhcmdzKTsKICAgICB9Ci0gICAgbW9kc3RhdGUtPm5jYWxsYmFja3MgPSAwOwotICAgIFB5X1JFVFVSTl9OT05FOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CithdGV4aXRfbV9jbGVhcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBhdGV4aXRtb2R1bGVfc3RhdGUgKm1vZHN0YXRlOworICAgIG1vZHN0YXRlID0gR0VUX0FURVhJVF9TVEFURShzZWxmKTsKKyAgICBhdGV4aXRfY2xlYW51cChtb2RzdGF0ZSk7CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMTYsMTMgKzI1MCwxNCBAQAogewogICAgIGF0ZXhpdG1vZHVsZV9zdGF0ZSAqbW9kc3RhdGU7CiAgICAgbW9kc3RhdGUgPSBHRVRfQVRFWElUX1NUQVRFKG0pOworICAgIGF0ZXhpdF9jbGVhbnVwKG1vZHN0YXRlKTsKICAgICBQeU1lbV9GcmVlKG1vZHN0YXRlLT5hdGV4aXRfY2FsbGJhY2tzKTsKIH0KIAogUHlEb2NfU1RSVkFSKGF0ZXhpdF91bnJlZ2lzdGVyX19kb2NfXywKICJ1bnJlZ2lzdGVyKGZ1bmMpIC0+IE5vbmVcblwKIFxuXAotVW5yZWdpc3RlciBhIGV4aXQgZnVuY3Rpb24gd2hpY2ggd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB1c2luZ1xuXAorVW5yZWdpc3RlciBhbiBleGl0IGZ1bmN0aW9uIHdoaWNoIHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdXNpbmdcblwKIGF0ZXhpdC5yZWdpc3RlclxuXAogXG5cCiAgICAgZnVuYyAtIGZ1bmN0aW9uIHRvIGJlIHVucmVnaXN0ZXJlZCIpOwpAQCAtMjQ2LDcgKzI4MSw3IEBACiAgICAgICAgIGlmIChlcSA8IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKGVxKQotICAgICAgICAgICAgYXRleGl0X2RlbGV0ZV9jYihzZWxmLCBpKTsKKyAgICAgICAgICAgIGF0ZXhpdF9kZWxldGVfY2IobW9kc3RhdGUsIGkpOwogICAgIH0KICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTI2MCw2ICsyOTUsOCBAQAogICAgICAgICBhdGV4aXRfdW5yZWdpc3Rlcl9fZG9jX199LAogICAgIHsiX3J1bl9leGl0ZnVuY3MiLCAoUHlDRnVuY3Rpb24pIGF0ZXhpdF9ydW5fZXhpdGZ1bmNzLCBNRVRIX05PQVJHUywKICAgICAgICAgYXRleGl0X3J1bl9leGl0ZnVuY3NfX2RvY19ffSwKKyAgICB7Il9uY2FsbGJhY2tzIiwgKFB5Q0Z1bmN0aW9uKSBhdGV4aXRfbmNhbGxiYWNrcywgTUVUSF9OT0FSR1MsCisgICAgICAgIGF0ZXhpdF9uY2FsbGJhY2tzX19kb2NfX30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMjc1LDE1ICszMTIsMTUgQEAKIAogCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIGF0ZXhpdG1vZHVsZSA9IHsKLQlQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0JImF0ZXhpdCIsCi0JYXRleGl0X19kb2NfXywKLQlzaXplb2YoYXRleGl0bW9kdWxlX3N0YXRlKSwKLQlhdGV4aXRfbWV0aG9kcywKLQlOVUxMLAotCU5VTEwsCi0JTlVMTCwKLQkoZnJlZWZ1bmMpYXRleGl0X2ZyZWUKKyAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCisgICAgImF0ZXhpdCIsCisgICAgYXRleGl0X19kb2NfXywKKyAgICBzaXplb2YoYXRleGl0bW9kdWxlX3N0YXRlKSwKKyAgICBhdGV4aXRfbWV0aG9kcywKKyAgICBOVUxMLAorICAgIGF0ZXhpdF9tX3RyYXZlcnNlLAorICAgIGF0ZXhpdF9tX2NsZWFyLAorICAgIChmcmVlZnVuYylhdGV4aXRfZnJlZQogfTsKIAogUHlNT0RJTklUX0ZVTkMKZGlmZiAtLWdpdCBhL01vZHVsZXMvYXVkaW9vcC5jIGIvTW9kdWxlcy9hdWRpb29wLmMKaW5kZXggM2YwNDc2Mi4uOWE1ZDhjMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9hdWRpb29wLmMKKysrIGIvTW9kdWxlcy9hdWRpb29wLmMKQEAgLTUsMTggKzUsNiBAQAogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKLSNpZiBTSVpFT0ZfSU5UID09IDQKLXR5cGVkZWYgaW50IFB5X0ludDMyOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgUHlfVUludDMyOwotI2Vsc2UKLSNpZiBTSVpFT0ZfTE9ORyA9PSA0Ci10eXBlZGVmIGxvbmcgUHlfSW50MzI7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgUHlfVUludDMyOwotI2Vsc2UKLSNlcnJvciAiTm8gNC1ieXRlIGludGVncmFsIHR5cGUiCi0jZW5kaWYKLSNlbmRpZgotCiB0eXBlZGVmIHNob3J0IFB5SW50MTY7CiAKICNpZiBkZWZpbmVkKF9fQ0hBUl9VTlNJR05FRF9fKQpAQCAtMzgsNyArMjYsNyBAQAogICAgICAgICB2YWwgPSBtYXh2YWw7CiAgICAgZWxzZSBpZiAodmFsIDwgbWludmFsICsgMSkKICAgICAgICAgdmFsID0gbWludmFsOwotICAgIHJldHVybiB2YWw7CisgICAgcmV0dXJuIChpbnQpdmFsOwogfQogCiAKQEAgLTEyNCw3ICsxMTIsNyBAQAogCiAvKgogICogbGluZWFyMnVsYXcoKSBhY2NlcHRzIGEgMTQtYml0IHNpZ25lZCBpbnRlZ2VyIGFuZCBlbmNvZGVzIGl0IGFzIHUtbGF3IGRhdGEKLSAqIHN0b3JlZCBpbiBhIHVuc2lnbmVkIGNoYXIuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoCisgKiBzdG9yZWQgaW4gYW4gdW5zaWduZWQgY2hhci4gIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdpdGgKICAqIHRoZSBkYXRhIHNoaWZ0ZWQgc3VjaCB0aGF0IGl0IG9ubHkgY29udGFpbnMgaW5mb3JtYXRpb24gaW4gdGhlIGxvd2VyCiAgKiAxNC1iaXRzLgogICoKQEAgLTE2MSw5ICsxNDksNiBAQAogICAgIFB5SW50MTYgICAgICAgICBzZWc7CiAgICAgdW5zaWduZWQgY2hhciAgIHV2YWw7CiAKLSAgICAvKiBUaGUgb3JpZ2luYWwgc294IGNvZGUgZG9lcyB0aGlzIGluIHRoZSBjYWxsaW5nIGZ1bmN0aW9uLCBub3QgaGVyZSAqLwotICAgIHBjbV92YWwgPSBwY21fdmFsID4+IDI7Ci0KICAgICAvKiB1LWxhdyBpbnZlcnRzIGFsbCBiaXRzICovCiAgICAgLyogR2V0IHRoZSBzaWduIGFuZCB0aGUgbWFnbml0dWRlIG9mIHRoZSB2YWx1ZS4gKi8KICAgICBpZiAocGNtX3ZhbCA8IDApIHsKQEAgLTIzMyw3ICsyMTgsNyBAQAogCiAvKgogICogbGluZWFyMmFsYXcoKSBhY2NlcHRzIGFuIDEzLWJpdCBzaWduZWQgaW50ZWdlciBhbmQgZW5jb2RlcyBpdCBhcyBBLWxhdyBkYXRhCi0gKiBzdG9yZWQgaW4gYSB1bnNpZ25lZCBjaGFyLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aAorICogc3RvcmVkIGluIGFuIHVuc2lnbmVkIGNoYXIuICBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aXRoCiAgKiB0aGUgZGF0YSBzaGlmdGVkIHN1Y2ggdGhhdCBpdCBvbmx5IGNvbnRhaW5zIGluZm9ybWF0aW9uIGluIHRoZSBsb3dlcgogICogMTMtYml0cy4KICAqCkBAIC0yNTgsOSArMjQzLDYgQEAKICAgICBzaG9ydCAgICAgICAgICAgc2VnOwogICAgIHVuc2lnbmVkIGNoYXIgICBhdmFsOwogCi0gICAgLyogVGhlIG9yaWdpbmFsIHNveCBjb2RlIGRvZXMgdGhpcyBpbiB0aGUgY2FsbGluZyBmdW5jdGlvbiwgbm90IGhlcmUgKi8KLSAgICBwY21fdmFsID0gcGNtX3ZhbCA+PiAzOwotCiAgICAgLyogQS1sYXcgdXNpbmcgZXZlbiBiaXQgaW52ZXJzaW9uICovCiAgICAgaWYgKHBjbV92YWwgPj0gMCkgewogICAgICAgICBtYXNrID0gMHhENTsgICAgICAgICAgICAvKiBzaWduICg3dGgpIGJpdCA9IDEgKi8KQEAgLTMwNSwxOSArMjg3LDkxIEBACiAgICAgMTUyODksIDE2ODE4LCAxODUwMCwgMjAzNTAsIDIyMzg1LCAyNDYyMywgMjcwODYsIDI5Nzk0LCAzMjc2NwogfTsKIAotI2RlZmluZSBDSEFSUChjcCwgaSkgKChzaWduZWQgY2hhciAqKShjcCtpKSkKLSNkZWZpbmUgU0hPUlRQKGNwLCBpKSAoKHNob3J0ICopKGNwK2kpKQotI2RlZmluZSBMT05HUChjcCwgaSkgKChQeV9JbnQzMiAqKShjcCtpKSkKKyNkZWZpbmUgR0VUSU5UWChULCBjcCwgaSkgICgqKFQgKikoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKSkKKyNkZWZpbmUgU0VUSU5UWChULCBjcCwgaSwgdmFsKSAgZG8geyAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAqKFQgKikoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKSA9IChUKSh2YWwpOyBcCisgICAgfSB3aGlsZSAoMCkKIAogCisjZGVmaW5lIEdFVElOVDgoY3AsIGkpICAgICAgICAgIEdFVElOVFgoc2lnbmVkIGNoYXIsIChjcCksIChpKSkKKyNkZWZpbmUgR0VUSU5UMTYoY3AsIGkpICAgICAgICAgR0VUSU5UWChzaG9ydCwgKGNwKSwgKGkpKQorI2RlZmluZSBHRVRJTlQzMihjcCwgaSkgICAgICAgICBHRVRJTlRYKFBZX0lOVDMyX1QsIChjcCksIChpKSkKKworI2lmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBHRVRJTlQyNChjcCwgaSkgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdICsgICAgICAgICAgICAgIFwKKyAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdIDw8IDgpICsgICAgICAgXAorICAgICAgICAoKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdIDw8IDE2KSApCisjZWxzZQorI2RlZmluZSBHRVRJTlQyNChjcCwgaSkgICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdICsgICAgICAgICAgICAgIFwKKyAgICAgICAgKCgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdIDw8IDgpICsgICAgICAgXAorICAgICAgICAoKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdIDw8IDE2KSApCisjZW5kaWYKKworCisjZGVmaW5lIFNFVElOVDgoY3AsIGksIHZhbCkgICAgIFNFVElOVFgoc2lnbmVkIGNoYXIsIChjcCksIChpKSwgKHZhbCkpCisjZGVmaW5lIFNFVElOVDE2KGNwLCBpLCB2YWwpICAgIFNFVElOVFgoc2hvcnQsIChjcCksIChpKSwgKHZhbCkpCisjZGVmaW5lIFNFVElOVDMyKGNwLCBpLCB2YWwpICAgIFNFVElOVFgoUFlfSU5UMzJfVCwgKGNwKSwgKGkpLCAodmFsKSkKKworI2lmIFdPUkRTX0JJR0VORElBTgorI2RlZmluZSBTRVRJTlQyNChjcCwgaSwgdmFsKSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMl0gPSAoaW50KSh2YWwpOyAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzFdID0gKGludCkodmFsKSA+PiA4OyAgICAgXAorICAgICAgICAoKHNpZ25lZCBjaGFyICopKGNwKSArIChpKSlbMF0gPSAoaW50KSh2YWwpID4+IDE2OyAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgU0VUSU5UMjQoY3AsIGksIHZhbCkgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgodW5zaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzBdID0gKGludCkodmFsKTsgICAgICAgICAgXAorICAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikoY3ApICsgKGkpKVsxXSA9IChpbnQpKHZhbCkgPj4gODsgICAgIFwKKyAgICAgICAgKChzaWduZWQgY2hhciAqKShjcCkgKyAoaSkpWzJdID0gKGludCkodmFsKSA+PiAxNjsgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisKKyNkZWZpbmUgR0VUUkFXU0FNUExFKHNpemUsIGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoc2l6ZSA9PSAxKSA/IChpbnQpR0VUSU5UOCgoY3ApLCAoaSkpIDogICAgICAgICBcCisgICAgICAgIChzaXplID09IDIpID8gKGludClHRVRJTlQxNigoY3ApLCAoaSkpIDogICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMykgPyAoaW50KUdFVElOVDI0KChjcCksIChpKSkgOiAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpR0VUSU5UMzIoKGNwKSwgKGkpKSkKKworI2RlZmluZSBTRVRSQVdTQU1QTEUoc2l6ZSwgY3AsIGksIHZhbCkgIGRvIHsgICAgXAorICAgICAgICBpZiAoc2l6ZSA9PSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UOCgoY3ApLCAoaSksICh2YWwpKTsgICAgICAgICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDIpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMTYoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgICAgICBlbHNlIGlmIChzaXplID09IDMpICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMjQoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgU0VUSU5UMzIoKGNwKSwgKGkpLCAodmFsKSk7ICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKKworCisjZGVmaW5lIEdFVFNBTVBMRTMyKHNpemUsIGNwLCBpKSAgKCAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHNpemUgPT0gMSkgPyAoaW50KUdFVElOVDgoKGNwKSwgKGkpKSA8PCAyNCA6ICAgXAorICAgICAgICAoc2l6ZSA9PSAyKSA/IChpbnQpR0VUSU5UMTYoKGNwKSwgKGkpKSA8PCAxNiA6ICBcCisgICAgICAgIChzaXplID09IDMpID8gKGludClHRVRJTlQyNCgoY3ApLCAoaSkpIDw8IDggOiAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAoaW50KUdFVElOVDMyKChjcCksIChpKSkpCisKKyNkZWZpbmUgU0VUU0FNUExFMzIoc2l6ZSwgY3AsIGksIHZhbCkgIGRvIHsgICAgIFwKKyAgICAgICAgaWYgKHNpemUgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDgoKGNwKSwgKGkpLCAodmFsKSA+PiAyNCk7ICAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDE2KChjcCksIChpKSwgKHZhbCkgPj4gMTYpOyAgIFwKKyAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAzKSAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDI0KChjcCksIChpKSwgKHZhbCkgPj4gOCk7ICAgIFwKKyAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIFNFVElOVDMyKChjcCksIChpKSwgKHZhbCkpOyAgICAgICAgIFwKKyAgICB9IHdoaWxlKDApCisKIAogc3RhdGljIFB5T2JqZWN0ICpBdWRpb29wRXJyb3I7CiAKIHN0YXRpYyBpbnQKIGF1ZGlvb3BfY2hlY2tfc2l6ZShpbnQgc2l6ZSkKIHsKLSAgICBpZiAoc2l6ZSAhPSAxICYmIHNpemUgIT0gMiAmJiBzaXplICE9IDQpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIlNpemUgc2hvdWxkIGJlIDEsIDIgb3IgNCIpOworICAgIGlmIChzaXplIDwgMSB8fCBzaXplID4gNCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU2l6ZSBzaG91bGQgYmUgMSwgMiwgMyBvciA0Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBlbHNlCkBAIC0zMzYsNDMgKzM5MCw2MCBAQAogICAgIHJldHVybiAxOwogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9nZXRzYW1wbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIGF1ZGlvb3AKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTU2MTlmOTM1ZjI2OTE5OWFdKi8KIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaW46Z2V0c2FtcGxlIiwgJmNwLCAmbGVuLCAmc2l6ZSwgJmkpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuZ2V0c2FtcGxlCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIGluZGV4OiBQeV9zc2l6ZV90CisgICAgLworCitSZXR1cm4gdGhlIHZhbHVlIG9mIHNhbXBsZSBpbmRleCBmcm9tIHRoZSBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZ2V0c2FtcGxlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBQeV9zc2l6ZV90IGluZGV4KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWY0NDgyNDk3ZTZmNmU3OGYgaW5wdXQ9ODhlZGJlMjg3MTM5MzU0OV0qLworeworICAgIGludCB2YWw7CisKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICggaSA8IDAgfHwgaSA+PSBsZW4vc2l6ZSApIHsKKyAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGZyYWdtZW50LT5sZW4vd2lkdGgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwgIkluZGV4IG91dCBvZiByYW5nZSIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSoyKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkqNCk7CisgICAgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpbmRleCp3aWR0aCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyh2YWwpOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLm1heAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldHVybiB0aGUgbWF4aW11bSBvZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYWxsIHNhbXBsZXMgaW4gYSBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbWF4KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbWF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTg1MDQ3ZWUxMDAxZjIzMDUgaW5wdXQ9MzJiZWE1ZWEwYWM4YzIyM10qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKKyAgICBQeV9zc2l6ZV90IGk7CiAgICAgdW5zaWduZWQgaW50IGFic3ZhbCwgbWF4ID0gMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTptYXgiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKICAgICAgICAgaWYgKHZhbCA8IDApIGFic3ZhbCA9ICgtdmFsKTsKICAgICAgICAgZWxzZSBhYnN2YWwgPSB2YWw7CiAgICAgICAgIGlmIChhYnN2YWwgPiBtYXgpIG1heCA9IGFic3ZhbDsKQEAgLTM4MCw4MiArNDUxLDk2IEBACiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKG1heCk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubWlubWF4CisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlcyBvZiBhbGwgc2FtcGxlcyBpbiB0aGUgc291bmQgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX21pbm1heChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX21pbm1heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1hZThmNTUxM2M2NGZkNTY5IGlucHV0PTg5ODQ4ZTliOTI3YTA2OTZdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIC8qIC0xIHRyaWNrIGJlbG93IGlzIG5lZWRlZCBvbiBXaW5kb3dzIHRvIHN1cHBvcnQgLTB4ODAwMDAwMDAgd2l0aG91dAogICAgIGEgd2FybmluZyAqLwogICAgIGludCBtaW4gPSAweDdmZmZmZmZmLCBtYXggPSAtMHg3RkZGRkZGRi0xOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6bWlubWF4IiwgJmNwLCAmbGVuLCAmc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpICs9IHNpemUpIHsKLSAgICAgICAgaWYgKHNpemUgPT0gMSkgdmFsID0gKGludCkgKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSAyKSB2YWwgPSAoaW50KSAqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoc2l6ZSA9PSA0KSB2YWwgPSAoaW50KSAqTE9OR1AoY3AsIGkpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOwogICAgICAgICBpZiAodmFsID4gbWF4KSBtYXggPSB2YWw7CiAgICAgICAgIGlmICh2YWwgPCBtaW4pIG1pbiA9IHZhbDsKICAgICB9CiAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBtaW4sIG1heCk7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2F2ZyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOwotICAgIGRvdWJsZSBhdmcgPSAwLjA7CisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmF2ZwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpOmF2ZyIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIHRoZSBhdmVyYWdlIG92ZXIgYWxsIHNhbXBsZXMgaW4gdGhlIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hdmdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2ZjY2Q2NDVjOTVmNDg2MCBpbnB1dD0xMTE0NDkzYzc2MTEzMzRkXSovCit7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBhdmc7CisgICAgZG91YmxlIHN1bSA9IDAuMDsKKworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0gICAgICAgIGF2ZyArPSB2YWw7Ci0gICAgfQotICAgIGlmICggbGVuID09IDAgKQotICAgICAgICB2YWwgPSAwOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKQorICAgICAgICBzdW0gKz0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA9PSAwKQorICAgICAgICBhdmcgPSAwOwogICAgIGVsc2UKLSAgICAgICAgdmFsID0gKGludClmbG9vcihhdmcgLyAoZG91YmxlKShsZW4vc2l6ZSkpOwotICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcodmFsKTsKKyAgICAgICAgYXZnID0gKGludClmbG9vcihzdW0gLyAoZG91YmxlKShmcmFnbWVudC0+bGVuL3dpZHRoKSk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhhdmcpOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLnJtcworCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldHVybiB0aGUgcm9vdC1tZWFuLXNxdWFyZSBvZiB0aGUgZnJhZ21lbnQsIGkuZS4gc3FydChzdW0oU19pXjIpL24pLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9ybXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9ybXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9N2IzOTg3MDJjODFiNzA5ZCBpbnB1dD00Y2M1N2M2Yzk0MjE5ZDc4XSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgaTsKICAgICB1bnNpZ25lZCBpbnQgcmVzOwogICAgIGRvdWJsZSBzdW1fc3F1YXJlcyA9IDAuMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpybXMiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLSAgICAgICAgc3VtX3NxdWFyZXMgKz0gKGRvdWJsZSl2YWwqKGRvdWJsZSl2YWw7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIHN1bV9zcXVhcmVzICs9IHZhbCp2YWw7CiAgICAgfQotICAgIGlmICggbGVuID09IDAgKQorICAgIGlmIChmcmFnbWVudC0+bGVuID09IDApCiAgICAgICAgIHJlcyA9IDA7CiAgICAgZWxzZQotICAgICAgICByZXMgPSAodW5zaWduZWQgaW50KXNxcnQoc3VtX3NxdWFyZXMgLyAoZG91YmxlKShsZW4vc2l6ZSkpOworICAgICAgICByZXMgPSAodW5zaWduZWQgaW50KXNxcnQoc3VtX3NxdWFyZXMgLyAoZG91YmxlKShmcmFnbWVudC0+bGVuL3dpZHRoKSk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHJlcyk7CiB9CiAKLXN0YXRpYyBkb3VibGUgX3N1bTIoc2hvcnQgKmEsIHNob3J0ICpiLCBQeV9zc2l6ZV90IGxlbikKK3N0YXRpYyBkb3VibGUgX3N1bTIoY29uc3Qgc2hvcnQgKmEsIGNvbnN0IHNob3J0ICpiLCBQeV9zc2l6ZV90IGxlbikKIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgZG91YmxlIHN1bSA9IDAuMDsKQEAgLTQ5OCwzMiArNTgzLDM4IEBACiAqKiBzdW1fcmkgaXMgY2FsY3VsYXRlZCBvbmNlLCBzdW1fYWlqXzIgaXMgdXBkYXRlZCBlYWNoIHN0ZXAgYW5kIHN1bV9haWpfcmkKICoqIGlzIGNvbXBsZXRlbHkgcmVjYWxjdWxhdGVkIGVhY2ggc3RlcC4KICovCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmZpbmRmaXQKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICByZWZlcmVuY2U6IFB5X2J1ZmZlcgorICAgIC8KKworVHJ5IHRvIG1hdGNoIHJlZmVyZW5jZSBhcyB3ZWxsIGFzIHBvc3NpYmxlIHRvIGEgcG9ydGlvbiBvZiBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfZmluZGZpdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2ZpbmRmaXRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9idWZmZXIgKnJlZmVyZW5jZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01MDVmZDA0ZDQyNDRkYjMxIGlucHV0PTYyYzMwNTYwNWUxODNjOWFdKi8KIHsKLSAgICBzaG9ydCAqY3AxLCAqY3AyOworICAgIGNvbnN0IHNob3J0ICpjcDEsICpjcDI7CiAgICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yOwogICAgIFB5X3NzaXplX3QgaiwgYmVzdF9qOwogICAgIGRvdWJsZSBhal9tMSwgYWpfbG0xOwogICAgIGRvdWJsZSBzdW1fcmlfMiwgc3VtX2Fpal8yLCBzdW1fYWlqX3JpLCByZXN1bHQsIGJlc3RfcmVzdWx0LCBmYWN0b3I7CiAKLSAgICAvKiBQYXNzaW5nIGEgc2hvcnQqKiBmb3IgYW4gJ3MnIGFyZ3VtZW50IGlzIGNvcnJlY3Qgb25seQotICAgICAgIGlmIHRoZSBzdHJpbmcgY29udGVudHMgaXMgYWxpZ25lZCBmb3IgaW50ZXJwcmV0YXRpb24KLSAgICAgICBhcyBzaG9ydFtdLiBEdWUgdG8gdGhlIGRlZmluaXRpb24gb2YgUHlCeXRlc09iamVjdCwKLSAgICAgICB0aGlzIGlzIGN1cnJlbnRseSAoUHl0aG9uIDIuNikgdGhlIGNhc2UuICovCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNzIzpmaW5kZml0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJmNwMSwgJmxlbjEsIChjaGFyKiopJmNwMiwgJmxlbjIpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCBsZW4xICYgMSB8fCBsZW4yICYgMSApIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiAmIDEgfHwgcmVmZXJlbmNlLT5sZW4gJiAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTdHJpbmdzIHNob3VsZCBiZSBldmVuLXNpemVkIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbGVuMSA+Pj0gMTsKLSAgICBsZW4yID4+PSAxOworICAgIGNwMSA9IChjb25zdCBzaG9ydCAqKWZyYWdtZW50LT5idWY7CisgICAgbGVuMSA9IGZyYWdtZW50LT5sZW4gPj4gMTsKKyAgICBjcDIgPSAoY29uc3Qgc2hvcnQgKilyZWZlcmVuY2UtPmJ1ZjsKKyAgICBsZW4yID0gcmVmZXJlbmNlLT5sZW4gPj4gMTsKIAotICAgIGlmICggbGVuMSA8IGxlbjIgKSB7CisgICAgaWYgKGxlbjEgPCBsZW4yKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJGaXJzdCBzYW1wbGUgc2hvdWxkIGJlIGxvbmdlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHN1bV9yaV8yID0gX3N1bTIoY3AyLCBjcDIsIGxlbjIpOwogICAgIHN1bV9haWpfMiA9IF9zdW0yKGNwMSwgY3AxLCBsZW4yKTsKQEAgLTU2MCwyNyArNjUxLDM3IEBACiAqKiBmaW5kZmFjdG9yIGZpbmRzIGEgZmFjdG9yIGYgc28gdGhhdCB0aGUgZW5lcmd5IGluIEEtZkIgaXMgbWluaW1hbC4KICoqIFNlZSB0aGUgY29tbWVudCBmb3IgZmluZGZpdCBmb3IgZGV0YWlscy4KICovCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmZpbmRmYWN0b3IKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICByZWZlcmVuY2U6IFB5X2J1ZmZlcgorICAgIC8KKworUmV0dXJuIGEgZmFjdG9yIEYgc3VjaCB0aGF0IHJtcyhhZGQoZnJhZ21lbnQsIG11bChyZWZlcmVuY2UsIC1GKSkpIGlzIG1pbmltYWwuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2ZpbmRmYWN0b3IoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9maW5kZmFjdG9yX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgUHlfYnVmZmVyICpyZWZlcmVuY2UpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGRmMzVhMWU1NzU3NWNlNCBpbnB1dD04MTY2ODAzMDFkMDEyYjIxXSovCiB7Ci0gICAgc2hvcnQgKmNwMSwgKmNwMjsKLSAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CisgICAgY29uc3Qgc2hvcnQgKmNwMSwgKmNwMjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBkb3VibGUgc3VtX3JpXzIsIHN1bV9haWpfcmksIHJlc3VsdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjcyM6ZmluZGZhY3RvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcioqKSZjcDEsICZsZW4xLCAoY2hhcioqKSZjcDIsICZsZW4yKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICggbGVuMSAmIDEgfHwgbGVuMiAmIDEgKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gJiAxIHx8IHJlZmVyZW5jZS0+bGVuICYgMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU3RyaW5ncyBzaG91bGQgYmUgZXZlbi1zaXplZCIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGlmICggbGVuMSAhPSBsZW4yICkgeworICAgIGlmIChmcmFnbWVudC0+bGVuICE9IHJlZmVyZW5jZS0+bGVuKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJTYW1wbGVzIHNob3VsZCBiZSBzYW1lIHNpemUiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBsZW4yID4+PSAxOwotICAgIHN1bV9yaV8yID0gX3N1bTIoY3AyLCBjcDIsIGxlbjIpOwotICAgIHN1bV9haWpfcmkgPSBfc3VtMihjcDEsIGNwMiwgbGVuMik7CisgICAgY3AxID0gKGNvbnN0IHNob3J0ICopZnJhZ21lbnQtPmJ1ZjsKKyAgICBjcDIgPSAoY29uc3Qgc2hvcnQgKilyZWZlcmVuY2UtPmJ1ZjsKKyAgICBsZW4gPSBmcmFnbWVudC0+bGVuID4+IDE7CisgICAgc3VtX3JpXzIgPSBfc3VtMihjcDIsIGNwMiwgbGVuKTsKKyAgICBzdW1fYWlqX3JpID0gX3N1bTIoY3AxLCBjcDIsIGxlbik7CiAKICAgICByZXN1bHQgPSBzdW1fYWlqX3JpIC8gc3VtX3JpXzI7CiAKQEAgLTU5MSwzNyArNjkyLDQ2IEBACiAqKiBmaW5kbWF4IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBuLXNpemVkIHNlZ21lbnQgb2YgdGhlIGlucHV0IHNhbXBsZQogKiogdGhhdCBjb250YWlucyB0aGUgbW9zdCBlbmVyZ3kuCiAqLworLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5maW5kbWF4CisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgbGVuZ3RoOiBQeV9zc2l6ZV90CisgICAgLworCitTZWFyY2ggZnJhZ21lbnQgZm9yIGEgc2xpY2Ugb2Ygc3BlY2lmaWVkIG51bWJlciBvZiBzYW1wbGVzIHdpdGggbWF4aW11bSBlbmVyZ3kuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2ZpbmRtYXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9maW5kbWF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgUHlfc3NpemVfdCBsZW5ndGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjFkMGMyYTFlNTY1NTEzNCBpbnB1dD0yZjMwNDgwMWVkNDIzODNjXSovCiB7Ci0gICAgc2hvcnQgKmNwMTsKLSAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjI7CisgICAgY29uc3Qgc2hvcnQgKmNwMTsKKyAgICBQeV9zc2l6ZV90IGxlbjE7CiAgICAgUHlfc3NpemVfdCBqLCBiZXN0X2o7CiAgICAgZG91YmxlIGFqX20xLCBhal9sbTE7CiAgICAgZG91YmxlIHJlc3VsdCwgYmVzdF9yZXN1bHQ7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI246ZmluZG1heCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhcioqKSZjcDEsICZsZW4xLCAmbGVuMikgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIGxlbjEgJiAxICkgeworICAgIGlmIChmcmFnbWVudC0+bGVuICYgMSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiU3RyaW5ncyBzaG91bGQgYmUgZXZlbi1zaXplZCIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIGxlbjEgPj49IDE7CisgICAgY3AxID0gKGNvbnN0IHNob3J0ICopZnJhZ21lbnQtPmJ1ZjsKKyAgICBsZW4xID0gZnJhZ21lbnQtPmxlbiA+PiAxOwogCi0gICAgaWYgKCBsZW4yIDwgMCB8fCBsZW4xIDwgbGVuMiApIHsKKyAgICBpZiAobGVuZ3RoIDwgMCB8fCBsZW4xIDwgbGVuZ3RoKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJJbnB1dCBzYW1wbGUgc2hvdWxkIGJlIGxvbmdlciIpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgcmVzdWx0ID0gX3N1bTIoY3AxLCBjcDEsIGxlbjIpOworICAgIHJlc3VsdCA9IF9zdW0yKGNwMSwgY3AxLCBsZW5ndGgpOwogCiAgICAgYmVzdF9yZXN1bHQgPSByZXN1bHQ7CiAgICAgYmVzdF9qID0gMDsKIAotICAgIGZvciAoIGo9MTsgajw9bGVuMS1sZW4yOyBqKyspIHsKKyAgICBmb3IgKCBqPTE7IGo8PWxlbjEtbGVuZ3RoOyBqKyspIHsKICAgICAgICAgYWpfbTEgPSAoZG91YmxlKWNwMVtqLTFdOwotICAgICAgICBhal9sbTEgPSAoZG91YmxlKWNwMVtqK2xlbjItMV07CisgICAgICAgIGFqX2xtMSA9IChkb3VibGUpY3AxW2orbGVuZ3RoLTFdOwogCiAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCArIGFqX2xtMSphal9sbTEgLSBhal9tMSphal9tMTsKIApAQCAtNjM1LDMxICs3NDUsMzQgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KGJlc3Rfaik7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYXZncHAKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitSZXR1cm4gdGhlIGF2ZXJhZ2UgcGVhay1wZWFrIHZhbHVlIG92ZXIgYWxsIHNhbXBsZXMgaW4gdGhlIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hdmdwcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2F2Z3BwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTA2YzgzODBmZDZlMzQyMDcgaW5wdXQ9MGIzY2NlZWFlNDIwYTdkOV0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMCwgcHJldnZhbCA9IDAsIHByZXZleHRyZW1ldmFsaWQgPSAwLAotICAgICAgICBwcmV2ZXh0cmVtZSA9IDA7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBwcmV2dmFsLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwgcHJldmV4dHJlbWUgPSAwOwogICAgIGRvdWJsZSBzdW0gPSAwLjA7CiAgICAgdW5zaWduZWQgaW50IGF2ZzsKICAgICBpbnQgZGlmZiwgcHJldmRpZmYsIG5leHRyZW1lID0gMDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTphdmdwcCIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChsZW4gPD0gc2l6ZSkKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA8PSB3aWR0aCkKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKLSAgICBpZiAoIHNpemUgPT0gMSApICAgICAgcHJldnZhbCA9IChpbnQpKkNIQVJQKGNwLCAwKTsKLSAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgcHJldnZhbCA9IChpbnQpKlNIT1JUUChjcCwgMCk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHByZXZ2YWwgPSAoaW50KSpMT05HUChjcCwgMCk7CisgICAgcHJldnZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgMCk7CiAgICAgcHJldmRpZmYgPSAxNzsgLyogQW55dGhpbmcgIT0gMCwgMSAqLwotICAgIGZvciAoIGk9c2l6ZTsgaTxsZW47IGkrPSBzaXplKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOworICAgIGZvciAoaSA9IHdpZHRoOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKICAgICAgICAgaWYgKHZhbCAhPSBwcmV2dmFsKSB7CiAgICAgICAgICAgICBkaWZmID0gdmFsIDwgcHJldnZhbDsKICAgICAgICAgICAgIGlmIChwcmV2ZGlmZiA9PSAhZGlmZikgewpAQCAtNjY3LDcgKzc4MCwxMiBAQAogICAgICAgICAgICAgICAgICoqIGV4dHJlbWUgdmFsdWUgYW5kIHJlbWVtYmVyLgogICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYgKHByZXZleHRyZW1ldmFsaWQpIHsKLSAgICAgICAgICAgICAgICAgICAgc3VtICs9IGZhYnMoKGRvdWJsZSlwcmV2dmFsIC0gKGRvdWJsZSlwcmV2ZXh0cmVtZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2dmFsIDwgcHJldmV4dHJlbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBzdW0gKz0gKGRvdWJsZSkoKHVuc2lnbmVkIGludClwcmV2ZXh0cmVtZSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClwcmV2dmFsKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgc3VtICs9IChkb3VibGUpKCh1bnNpZ25lZCBpbnQpcHJldnZhbCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludClwcmV2ZXh0cmVtZSk7CiAgICAgICAgICAgICAgICAgICAgIG5leHRyZW1lKys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHByZXZleHRyZW1ldmFsaWQgPSAxOwpAQCAtNjg0LDMwICs4MDIsMzMgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoYXZnKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5tYXhwcAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldHVybiB0aGUgbWF4aW11bSBwZWFrLXBlYWsgdmFsdWUgaW4gdGhlIHNvdW5kIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9tYXhwcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX21heHBwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWMzMDBjMGJkN2U4NTM1YzAgaW5wdXQ9NjcxYTEzZTE1MThmODBhMV0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMCwgcHJldnZhbCA9IDAsIHByZXZleHRyZW1ldmFsaWQgPSAwLAotICAgICAgICBwcmV2ZXh0cmVtZSA9IDA7CisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBwcmV2dmFsLCBwcmV2ZXh0cmVtZXZhbGlkID0gMCwgcHJldmV4dHJlbWUgPSAwOwogICAgIHVuc2lnbmVkIGludCBtYXggPSAwLCBleHRyZW1lZGlmZjsKICAgICBpbnQgZGlmZiwgcHJldmRpZmY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6bWF4cHAiLCAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobGVuIDw9IHNpemUpCisgICAgaWYgKGZyYWdtZW50LT5sZW4gPD0gd2lkdGgpCiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7Ci0gICAgaWYgKCBzaXplID09IDEgKSAgICAgIHByZXZ2YWwgPSAoaW50KSpDSEFSUChjcCwgMCk7Ci0gICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHByZXZ2YWwgPSAoaW50KSpTSE9SVFAoY3AsIDApOwotICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSBwcmV2dmFsID0gKGludCkqTE9OR1AoY3AsIDApOworICAgIHByZXZ2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIDApOwogICAgIHByZXZkaWZmID0gMTc7IC8qIEFueXRoaW5nICE9IDAsIDEgKi8KLSAgICBmb3IgKCBpPXNpemU7IGk8bGVuOyBpKz0gc2l6ZSkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKGludCkqQ0hBUlAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKKyAgICBmb3IgKGkgPSB3aWR0aDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CiAgICAgICAgIGlmICh2YWwgIT0gcHJldnZhbCkgewogICAgICAgICAgICAgZGlmZiA9IHZhbCA8IHByZXZ2YWw7CiAgICAgICAgICAgICBpZiAocHJldmRpZmYgPT0gIWRpZmYpIHsKQEAgLTczNCwyMDkgKzg1NSwyMTIgQEAKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcobWF4KTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5jcm9zcworCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldHVybiB0aGUgbnVtYmVyIG9mIHplcm8gY3Jvc3NpbmdzIGluIHRoZSBmcmFnbWVudCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2Nyb3NzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfY3Jvc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OTllNjU3MmQ3ZDdjZGJmMSBpbnB1dD1iMWIzZjE1YjgzZjZiNDFhXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgcHJldnZhbDsKICAgICBQeV9zc2l6ZV90IG5jcm9zczsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpjcm9zcyIsICZjcCwgJmxlbiwgJnNpemUpICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcm9zcyA9IC0xOwogICAgIHByZXZ2YWwgPSAxNzsgLyogQW55dGhpbmcgPD4gMCwxICovCi0gICAgZm9yICggaT0wOyBpPGxlbjsgaSs9IHNpemUpIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9ICgoaW50KSpDSEFSUChjcCwgaSkpID4+IDc7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoKGludCkqU0hPUlRQKGNwLCBpKSkgPj4gMTU7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoKGludCkqTE9OR1AoY3AsIGkpKSA+PiAzMTsKLSAgICAgICAgdmFsID0gdmFsICYgMTsKLSAgICAgICAgaWYgKCB2YWwgIT0gcHJldnZhbCApIG5jcm9zcysrOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpIDwgMDsKKyAgICAgICAgaWYgKHZhbCAhPSBwcmV2dmFsKSBuY3Jvc3MrKzsKICAgICAgICAgcHJldnZhbCA9IHZhbDsKICAgICB9CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChuY3Jvc3MpOwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLm11bAorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBmYWN0b3I6IGRvdWJsZQorICAgIC8KKworUmV0dXJuIGEgZnJhZ21lbnQgdGhhdCBoYXMgYWxsIHNhbXBsZXMgaW4gdGhlIG9yaWdpbmFsIGZyYWdtZW50IG11bHRpcGxpZWQgYnkgdGhlIGZsb2F0aW5nLXBvaW50IHZhbHVlIGZhY3Rvci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbXVsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfbXVsX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgZmFjdG9yKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWE2OTdlYmJkNTg1MmQzOGYgaW5wdXQ9YzcyNjY2N2JhYTE1N2QzY10qLwogewotICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMDsKLSAgICBkb3VibGUgZmFjdG9yLCBmdmFsLCBtYXh2YWwsIG1pbnZhbDsKKyAgICBzaWduZWQgY2hhciAqbmNwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBkb3VibGUgbWF4dmFsLCBtaW52YWw7CiAgICAgUHlPYmplY3QgKnJ2OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpZDptdWwiLCAmY3AsICZsZW4sICZzaXplLCAmZmFjdG9yICkgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhsZW4sIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50LT5sZW4sIHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3NpemVdOwotICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbc2l6ZV07CisgICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1t3aWR0aF07CisgICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1t3aWR0aF07CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0KLSAgICBmb3IgKCBpPTA7IGkgPCBsZW47IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbCA9IChpbnQpKkNIQVJQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9IChpbnQpKlNIT1JUUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbCpmYWN0b3I7Ci0gICAgICAgIHZhbCA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpKSA9IChzaWduZWQgY2hhcil2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpdmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSkgPSAoUHlfSW50MzIpdmFsOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGRvdWJsZSB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICB2YWwgKj0gZmFjdG9yOworICAgICAgICB2YWwgPSBmbG9vcihmYm91bmQodmFsLCBtaW52YWwsIG1heHZhbCkpOworICAgICAgICBTRVRSQVdTQU1QTEUod2lkdGgsIG5jcCwgaSwgKGludCl2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AudG9tb25vCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIGxmYWN0b3I6IGRvdWJsZQorICAgIHJmYWN0b3I6IGRvdWJsZQorICAgIC8KKworQ29udmVydCBhIHN0ZXJlbyBmcmFnbWVudCB0byBhIG1vbm8gZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3RvbW9ubyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3RvbW9ub19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgZG91YmxlIGxmYWN0b3IsIGRvdWJsZSByZmFjdG9yKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQzNmU3NzEwNTIxNjYxZGQgaW5wdXQ9YzRlYzk0OWIzZjRkZGRmYV0qLwogewotICAgIFB5X2J1ZmZlciBwY3A7CiAgICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwogICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwxID0gMCwgdmFsMiA9IDA7Ci0gICAgZG91YmxlIGZhYzEsIGZhYzIsIGZ2YWwsIG1heHZhbCwgbWludmFsOworICAgIGRvdWJsZSBtYXh2YWwsIG1pbnZhbDsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzKmlkZDp0b21vbm8iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBjcCwgJnNpemUsICZmYWMxLCAmZmFjMiApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY3AgPSBwY3AuYnVmOwotICAgIGxlbiA9IHBjcC5sZW47Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwY3ApOworICAgIGNwID0gZnJhZ21lbnQtPmJ1ZjsKKyAgICBsZW4gPSBmcmFnbWVudC0+bGVuOworICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKCgobGVuIC8gc2l6ZSkgJiAxKSAhPSAwKSB7CisgICAgaWYgKCgobGVuIC8gd2lkdGgpICYgMSkgIT0gMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAibm90IGEgd2hvbGUgbnVtYmVyIG9mIGZyYW1lcyIpOwotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwY3ApOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBtYXh2YWwgPSAoZG91YmxlKSBtYXh2YWxzW3NpemVdOwotICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbc2l6ZV07CisgICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1t3aWR0aF07CisgICAgbWludmFsID0gKGRvdWJsZSkgbWludmFsc1t3aWR0aF07CiAKICAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuLzIpOwotICAgIGlmICggcnYgPT0gMCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUqMiApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDEgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwxID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbDEgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwyID0gKGludCkqQ0hBUlAoY3AsIGkrMSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwyID0gKGludCkqU0hPUlRQKGNwLCBpKzIpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMiA9IChpbnQpKkxPTkdQKGNwLCBpKzQpOwotICAgICAgICBmdmFsID0gKGRvdWJsZSl2YWwxKmZhYzEgKyAoZG91YmxlKXZhbDIqZmFjMjsKLSAgICAgICAgdmFsMSA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICAqQ0hBUlAobmNwLCBpLzIpID0gKHNpZ25lZCBjaGFyKXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaS8yKSA9IChzaG9ydCl2YWwxOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaS8yKT0gKFB5X0ludDMyKXZhbDE7CisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSB3aWR0aCoyKSB7CisgICAgICAgIGRvdWJsZSB2YWwxID0gR0VUUkFXU0FNUExFKHdpZHRoLCBjcCwgaSk7CisgICAgICAgIGRvdWJsZSB2YWwyID0gR0VUUkFXU0FNUExFKHdpZHRoLCBjcCwgaSArIHdpZHRoKTsKKyAgICAgICAgZG91YmxlIHZhbCA9IHZhbDEqbGZhY3RvciArIHZhbDIqcmZhY3RvcjsKKyAgICAgICAgdmFsID0gZmxvb3IoZmJvdW5kKHZhbCwgbWludmFsLCBtYXh2YWwpKTsKKyAgICAgICAgU0VUUkFXU0FNUExFKHdpZHRoLCBuY3AsIGkvMiwgdmFsKTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGNwKTsKICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AudG9zdGVyZW8KKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgbGZhY3RvcjogZG91YmxlCisgICAgcmZhY3RvcjogZG91YmxlCisgICAgLworCitHZW5lcmF0ZSBhIHN0ZXJlbyBmcmFnbWVudCBmcm9tIGEgbW9ubyBmcmFnbWVudC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfdG9zdGVyZW8oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF90b3N0ZXJlb19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgZG91YmxlIGxmYWN0b3IsIGRvdWJsZSByZmFjdG9yKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZmZjUwNjgxYzg3ZjRjMWMgaW5wdXQ9MjdiNjM5NWViZmRmZjM3YV0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcCwgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsMSwgdmFsMiwgdmFsID0gMDsKLSAgICBkb3VibGUgZmFjMSwgZmFjMiwgZnZhbCwgbWF4dmFsLCBtaW52YWw7CisgICAgc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgZG91YmxlIG1heHZhbCwgbWludmFsOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWRkOnRvc3RlcmVvIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUsICZmYWMxLCAmZmFjMiApICkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbWF4dmFsID0gKGRvdWJsZSkgbWF4dmFsc1tzaXplXTsKLSAgICBtaW52YWwgPSAoZG91YmxlKSBtaW52YWxzW3NpemVdOworICAgIG1heHZhbCA9IChkb3VibGUpIG1heHZhbHNbd2lkdGhdOworICAgIG1pbnZhbCA9IChkb3VibGUpIG1pbnZhbHNbd2lkdGhdOwogCi0gICAgaWYgKGxlbiA+IFBZX1NTSVpFX1RfTUFYLzIpIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA+IFBZX1NTSVpFX1RfTUFYLzIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKjIpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoaW50KSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoaW50KSpTSE9SVFAoY3AsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsID0gKGludCkqTE9OR1AoY3AsIGkpOwotCi0gICAgICAgIGZ2YWwgPSAoZG91YmxlKXZhbCpmYWMxOwotICAgICAgICB2YWwxID0gKGludClmbG9vcihmYm91bmQoZnZhbCwgbWludmFsLCBtYXh2YWwpKTsKLQotICAgICAgICBmdmFsID0gKGRvdWJsZSl2YWwqZmFjMjsKLSAgICAgICAgdmFsMiA9IChpbnQpZmxvb3IoZmJvdW5kKGZ2YWwsIG1pbnZhbCwgbWF4dmFsKSk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkqMikgPSAoc2lnbmVkIGNoYXIpdmFsMTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKjIpID0gKHNob3J0KXZhbDE7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKjIpID0gKFB5X0ludDMyKXZhbDE7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkqMisxKSA9IChzaWduZWQgY2hhcil2YWwyOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkqMisyKSA9IChzaG9ydCl2YWwyOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaSoyKzQpID0gKFB5X0ludDMyKXZhbDI7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IEdFVFJBV1NBTVBMRSh3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIGludCB2YWwxID0gKGludClmbG9vcihmYm91bmQodmFsKmxmYWN0b3IsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIGludCB2YWwyID0gKGludClmbG9vcihmYm91bmQodmFsKnJmYWN0b3IsIG1pbnZhbCwgbWF4dmFsKSk7CisgICAgICAgIFNFVFJBV1NBTVBMRSh3aWR0aCwgbmNwLCBpKjIsIHZhbDEpOworICAgICAgICBTRVRSQVdTQU1QTEUod2lkdGgsIG5jcCwgaSoyICsgd2lkdGgsIHZhbDIpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYWRkCisKKyAgICBmcmFnbWVudDE6IFB5X2J1ZmZlcgorICAgIGZyYWdtZW50MjogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworUmV0dXJuIGEgZnJhZ21lbnQgd2hpY2ggaXMgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gc2FtcGxlcyBwYXNzZWQgYXMgcGFyYW1ldGVycy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfYWRkKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfYWRkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudDEsIFB5X2J1ZmZlciAqZnJhZ21lbnQyLCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZjkyMThiZjllYTc1YzNmMSBpbnB1dD00YThkNGJhZTRjMTYwNWM3XSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwMSwgKmNwMiwgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbjEsIGxlbjIsIGk7Ci0gICAgaW50IHNpemUsIHZhbDEgPSAwLCB2YWwyID0gMCwgbWludmFsLCBtYXh2YWwsIG5ld3ZhbDsKKyAgICBzaWduZWQgY2hhciAqbmNwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBpbnQgbWludmFsLCBtYXh2YWwsIG5ld3ZhbDsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI3MjaTphZGQiLAotICAgICAgICAgICAgICAgICAgICAgICZjcDEsICZsZW4xLCAmY3AyLCAmbGVuMiwgJnNpemUgKSApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbjEsIHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGZyYWdtZW50MS0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICggbGVuMSAhPSBsZW4yICkgeworICAgIGlmIChmcmFnbWVudDEtPmxlbiAhPSBmcmFnbWVudDItPmxlbikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoQXVkaW9vcEVycm9yLCAiTGVuZ3RocyBzaG91bGQgYmUgdGhlIHNhbWUiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIG1heHZhbCA9IG1heHZhbHNbc2l6ZV07Ci0gICAgbWludmFsID0gbWludmFsc1tzaXplXTsKKyAgICBtYXh2YWwgPSBtYXh2YWxzW3dpZHRoXTsKKyAgICBtaW52YWwgPSBtaW52YWxzW3dpZHRoXTsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4xKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQxLT5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbjE7IGkgKz0gc2l6ZSApIHsKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDEgPSAoaW50KSpDSEFSUChjcDEsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMSA9IChpbnQpKlNIT1JUUChjcDEsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMSA9IChpbnQpKkxPTkdQKGNwMSwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50MS0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwxID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudDEtPmJ1ZiwgaSk7CisgICAgICAgIGludCB2YWwyID0gR0VUUkFXU0FNUExFKHdpZHRoLCBmcmFnbWVudDItPmJ1ZiwgaSk7CiAKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgIHZhbDIgPSAoaW50KSpDSEFSUChjcDIsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsMiA9IChpbnQpKlNIT1JUUChjcDIsIGkpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgdmFsMiA9IChpbnQpKkxPTkdQKGNwMiwgaSk7Ci0KLSAgICAgICAgaWYgKHNpemUgPCA0KSB7CisgICAgICAgIGlmICh3aWR0aCA8IDQpIHsKICAgICAgICAgICAgIG5ld3ZhbCA9IHZhbDEgKyB2YWwyOwogICAgICAgICAgICAgLyogdHJ1bmNhdGUgaW4gY2FzZSBvZiBvdmVyZmxvdyAqLwogICAgICAgICAgICAgaWYgKG5ld3ZhbCA+IG1heHZhbCkKQEAgLTk1MCwxMjMgKzEwNzQsMTc1IEBACiAgICAgICAgICAgICBuZXd2YWwgPSAoaW50KWZsb29yKGZib3VuZChmdmFsLCBtaW52YWwsIG1heHZhbCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKW5ld3ZhbDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCluZXd2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMiluZXd2YWw7CisgICAgICAgIFNFVFJBV1NBTVBMRSh3aWR0aCwgbmNwLCBpLCBuZXd2YWwpOwogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AuYmlhcworCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBiaWFzOiBpbnQKKyAgICAvCisKK1JldHVybiBhIGZyYWdtZW50IHRoYXQgaXMgdGhlIG9yaWdpbmFsIGZyYWdtZW50IHdpdGggYSBiaWFzIGFkZGVkIHRvIGVhY2ggc2FtcGxlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9iaWFzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfYmlhc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IGJpYXMpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9OGVjODBiM2Y1ZDUxMGE1MSBpbnB1dD0yYjVjY2U1YzNiYjQ4MzhjXSovCiB7Ci0gICAgc2lnbmVkIGNoYXIgKmNwLCAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCBiaWFzOworICAgIHNpZ25lZCBjaGFyICpuY3A7CisgICAgUHlfc3NpemVfdCBpOwogICAgIHVuc2lnbmVkIGludCB2YWwgPSAwLCBtYXNrOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaWk6YmlhcyIsCi0gICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSAsICZiaWFzKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHJ2KTsKIAotICAgIG1hc2sgPSBtYXNrc1tzaXplXTsKKyAgICBtYXNrID0gbWFza3Nbd2lkdGhdOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAodW5zaWduZWQgaW50KSh1bnNpZ25lZCBjaGFyKSpDSEFSUChjcCwgaSk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAodW5zaWduZWQgaW50KSh1bnNpZ25lZCBzaG9ydCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICh1bnNpZ25lZCBpbnQpKFB5X1VJbnQzMikqTE9OR1AoY3AsIGkpOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGlmICh3aWR0aCA9PSAxKQorICAgICAgICAgICAgdmFsID0gR0VUSU5UWCh1bnNpZ25lZCBjaGFyLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgZWxzZSBpZiAod2lkdGggPT0gMikKKyAgICAgICAgICAgIHZhbCA9IEdFVElOVFgodW5zaWduZWQgc2hvcnQsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICBlbHNlIGlmICh3aWR0aCA9PSAzKQorICAgICAgICAgICAgdmFsID0gKCh1bnNpZ25lZCBpbnQpR0VUSU5UMjQoZnJhZ21lbnQtPmJ1ZiwgaSkpICYgMHhmZmZmZmZ1OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydCh3aWR0aCA9PSA0KTsKKyAgICAgICAgICAgIHZhbCA9IEdFVElOVFgoUFlfVUlOVDMyX1QsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICB9CiAKICAgICAgICAgdmFsICs9ICh1bnNpZ25lZCBpbnQpYmlhczsKICAgICAgICAgLyogd3JhcCBhcm91bmQgaW4gY2FzZSBvZiBvdmVyZmxvdyAqLwogICAgICAgICB2YWwgJj0gbWFzazsKIAotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpKHVuc2lnbmVkIGNoYXIpdmFsOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh1bnNpZ25lZCBzaG9ydCl2YWw7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMikoUHlfVUludDMyKXZhbDsKKyAgICAgICAgaWYgKHdpZHRoID09IDEpCisgICAgICAgICAgICBTRVRJTlRYKHVuc2lnbmVkIGNoYXIsIG5jcCwgaSwgdmFsKTsKKyAgICAgICAgZWxzZSBpZiAod2lkdGggPT0gMikKKyAgICAgICAgICAgIFNFVElOVFgodW5zaWduZWQgc2hvcnQsIG5jcCwgaSwgdmFsKTsKKyAgICAgICAgZWxzZSBpZiAod2lkdGggPT0gMykKKyAgICAgICAgICAgIFNFVElOVDI0KG5jcCwgaSwgKGludCl2YWwpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydCh3aWR0aCA9PSA0KTsKKyAgICAgICAgICAgIFNFVElOVFgoUFlfVUlOVDMyX1QsIG5jcCwgaSwgdmFsKTsKKyAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AucmV2ZXJzZQorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK1JldmVyc2UgdGhlIHNhbXBsZXMgaW4gYSBmcmFnbWVudCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3JldmVyc2UoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9yZXZlcnNlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZlYzNjOTEzMzdmNTkyNWUgaW5wdXQ9NjY4Zjg5MGNmOWY5ZDIyNV0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGksIGo7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpyZXZlcnNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4pOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCAyNDsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApIHZhbCA9ICgoaW50KSpTSE9SVFAoY3AsIGkpKSA8PCAxNjsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9IChpbnQpKkxPTkdQKGNwLCBpKTsKLQotICAgICAgICBqID0gbGVuIC0gaSAtIHNpemU7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGopID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gMjQpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGopID0gKHNob3J0KSh2YWwgPj4gMTYpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSA0ICkgKkxPTkdQKG5jcCwgaikgPSAoUHlfSW50MzIpdmFsOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRSQVdTQU1QTEUod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICBTRVRSQVdTQU1QTEUod2lkdGgsIG5jcCwgZnJhZ21lbnQtPmxlbiAtIGkgLSB3aWR0aCwgdmFsKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmJ5dGVzd2FwCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworQ29udmVydCBiaWctZW5kaWFuIHNhbXBsZXMgdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbGluMmxpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2J5dGVzd2FwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWJmZTRhYTU4NGI3YTNmNWIgaW5wdXQ9ZmFlNzYxMWNlZmZhNWM4Ml0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGksIGo7Ci0gICAgaW50IHNpemUsIHNpemUyLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2lpOmxpbjJsaW4iLAotICAgICAgICAgICAgICAgICAgICAgICZjcCwgJmxlbiwgJnNpemUsICZzaXplMikgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUyKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGxlbi9zaXplID4gUFlfU1NJWkVfVF9NQVgvc2l6ZTIpIHsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbik7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgajsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHdpZHRoOyBqKyspCisgICAgICAgICAgICBuY3BbaSArIHdpZHRoIC0gMSAtIGpdID0gKCh1bnNpZ25lZCBjaGFyICopZnJhZ21lbnQtPmJ1ZilbaSArIGpdOworICAgIH0KKyAgICByZXR1cm4gcnY7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubGluMmxpbgorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBuZXd3aWR0aDogaW50CisgICAgLworCitDb252ZXJ0IHNhbXBsZXMgYmV0d2VlbiAxLSwgMi0sIDMtIGFuZCA0LWJ5dGUgZm9ybWF0cy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IG5ld3dpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTNmOTQ2OGE3NDQ3MmE5M2UgaW5wdXQ9NWNlMDhjOGFhMmYyNGQ5Nl0qLworeworICAgIHVuc2lnbmVkIGNoYXIgKm5jcDsKKyAgICBQeV9zc2l6ZV90IGksIGo7CisgICAgUHlPYmplY3QgKnJ2OworCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShuZXd3aWR0aCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGZyYWdtZW50LT5sZW4vd2lkdGggPiBQWV9TU0laRV9UX01BWC9uZXd3aWR0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKGxlbi9zaXplKSpzaXplMik7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIChmcmFnbWVudC0+bGVuL3dpZHRoKSpuZXd3aWR0aCk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTAsIGo9MDsgaSA8IGxlbjsgaSArPSBzaXplLCBqICs9IHNpemUyICkgewotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgdmFsID0gKChpbnQpKkNIQVJQKGNwLCBpKSkgPDwgMjQ7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSB2YWwgPSAoKGludCkqU0hPUlRQKGNwLCBpKSkgPDwgMTY7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSB2YWwgPSAoaW50KSpMT05HUChjcCwgaSk7Ci0KLSAgICAgICAgaWYgKCBzaXplMiA9PSAxICkgICpDSEFSUChuY3AsIGopID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gMjQpOwotICAgICAgICBlbHNlIGlmICggc2l6ZTIgPT0gMiApICpTSE9SVFAobmNwLCBqKSA9IChzaG9ydCkodmFsID4+IDE2KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUyID09IDQgKSAqTE9OR1AobmNwLCBqKSA9IChQeV9JbnQzMil2YWw7CisgICAgZm9yIChpID0gaiA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoLCBqICs9IG5ld3dpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMih3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSk7CisgICAgICAgIFNFVFNBTVBMRTMyKG5ld3dpZHRoLCBuY3AsIGosIHZhbCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KQEAgLTEwODIsMjkgKzEyNTgsMzkgQEAKICAgICByZXR1cm4gYTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC5yYXRlY3YKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgbmNoYW5uZWxzOiBpbnQKKyAgICBpbnJhdGU6IGludAorICAgIG91dHJhdGU6IGludAorICAgIHN0YXRlOiBvYmplY3QKKyAgICB3ZWlnaHRBOiBpbnQgPSAxCisgICAgd2VpZ2h0QjogaW50ID0gMAorICAgIC8KKworQ29udmVydCB0aGUgZnJhbWUgcmF0ZSBvZiB0aGUgaW5wdXQgZnJhZ21lbnQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX3JhdGVjdihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3JhdGVjdl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IG5jaGFubmVscywgaW50IGlucmF0ZSwgaW50IG91dHJhdGUsIFB5T2JqZWN0ICpzdGF0ZSwgaW50IHdlaWdodEEsIGludCB3ZWlnaHRCKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU1ODVkZGRjNGI1ZmYyMzYgaW5wdXQ9YWZmM2FjZGM5NDQ3NjE5MV0qLwogewogICAgIGNoYXIgKmNwLCAqbmNwOwogICAgIFB5X3NzaXplX3QgbGVuOwotICAgIGludCBzaXplLCBuY2hhbm5lbHMsIGlucmF0ZSwgb3V0cmF0ZSwgd2VpZ2h0QSwgd2VpZ2h0QjsKICAgICBpbnQgY2hhbiwgZCwgKnByZXZfaSwgKmN1cl9pLCBjdXJfbzsKLSAgICBQeU9iamVjdCAqc3RhdGUsICpzYW1wcywgKnN0ciwgKnJ2ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc2FtcHMsICpzdHIsICpydiA9IE5VTEw7CiAgICAgaW50IGJ5dGVzX3Blcl9mcmFtZTsKIAotICAgIHdlaWdodEEgPSAxOwotICAgIHdlaWdodEIgPSAwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpaWlpT3xpaTpyYXRlY3YiLCAmY3AsICZsZW4sICZzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbmNoYW5uZWxzLCAmaW5yYXRlLCAmb3V0cmF0ZSwgJnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmd2VpZ2h0QSwgJndlaWdodEIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZShzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfc2l6ZSh3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChuY2hhbm5lbHMgPCAxKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICIjIG9mIGNoYW5uZWxzIHNob3VsZCBiZSA+PSAxIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoc2l6ZSA+IElOVF9NQVggLyBuY2hhbm5lbHMpIHsKKyAgICBpZiAod2lkdGggPiBJTlRfTUFYIC8gbmNoYW5uZWxzKSB7CiAgICAgICAgIC8qIFRoaXMgb3ZlcmZsb3cgdGVzdCBpcyByaWdvcm91c2x5IGNvcnJlY3QgYmVjYXVzZQogICAgICAgICAgICBib3RoIG11bHRpcGxpY2FuZHMgYXJlID49IDEuICBVc2UgdGhlIGFyZ3VtZW50IG5hbWVzCiAgICAgICAgICAgIGZyb20gdGhlIGRvY3MgZm9yIHRoZSBlcnJvciBtc2cuICovCkBAIC0xMTEyLDEzICsxMjk4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAid2lkdGggKiBuY2hhbm5lbHMgdG9vIGJpZyBmb3IgYSBDIGludCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgYnl0ZXNfcGVyX2ZyYW1lID0gc2l6ZSAqIG5jaGFubmVsczsKKyAgICBieXRlc19wZXJfZnJhbWUgPSB3aWR0aCAqIG5jaGFubmVsczsKICAgICBpZiAod2VpZ2h0QSA8IDEgfHwgd2VpZ2h0QiA8IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEF1ZGlvb3BFcnJvciwKICAgICAgICAgICAgICJ3ZWlnaHRBIHNob3VsZCBiZSA+PSAxLCB3ZWlnaHRCIHNob3VsZCBiZSA+PSAwIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAobGVuICUgYnl0ZXNfcGVyX2ZyYW1lICE9IDApIHsKKyAgICBhc3NlcnQoZnJhZ21lbnQtPmxlbiA+PSAwKTsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiAlIGJ5dGVzX3Blcl9mcmFtZSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhBdWRpb29wRXJyb3IsICJub3QgYSB3aG9sZSBudW1iZXIgb2YgZnJhbWVzIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTExMzMsMjEgKzEzMjAsMjEgQEAKICAgICAvKiBkaXZpZGUgd2VpZ2h0QSBhbmQgd2VpZ2h0QiBieSB0aGVpciBncmVhdGVzdCBjb21tb24gZGl2aXNvciAqLwogICAgIGQgPSBnY2Qod2VpZ2h0QSwgd2VpZ2h0Qik7CiAgICAgd2VpZ2h0QSAvPSBkOwotICAgIHdlaWdodEEgLz0gZDsKKyAgICB3ZWlnaHRCIC89IGQ7CiAKICAgICBpZiAoKHNpemVfdCluY2hhbm5lbHMgPiBQWV9TSVpFX01BWC9zaXplb2YoaW50KSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBwcmV2X2kgPSAoaW50ICopIG1hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7Ci0gICAgY3VyX2kgPSAoaW50ICopIG1hbGxvYyhuY2hhbm5lbHMgKiBzaXplb2YoaW50KSk7CisgICAgcHJldl9pID0gKGludCAqKSBQeU1lbV9NYWxsb2MobmNoYW5uZWxzICogc2l6ZW9mKGludCkpOworICAgIGN1cl9pID0gKGludCAqKSBQeU1lbV9NYWxsb2MobmNoYW5uZWxzICogc2l6ZW9mKGludCkpOwogICAgIGlmIChwcmV2X2kgPT0gTlVMTCB8fCBjdXJfaSA9PSBOVUxMKSB7CiAgICAgICAgICh2b2lkKSBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCi0gICAgbGVuIC89IGJ5dGVzX3Blcl9mcmFtZTsgLyogIyBvZiBmcmFtZXMgKi8KKyAgICBsZW4gPSBmcmFnbWVudC0+bGVuIC8gYnl0ZXNfcGVyX2ZyYW1lOyAvKiAjIG9mIGZyYW1lcyAqLwogCiAgICAgaWYgKHN0YXRlID09IFB5X05vbmUpIHsKICAgICAgICAgZCA9IC1vdXRyYXRlOwpAQCAtMTE4NCw3ICsxMzcxLDcgQEAKICAgICAgICAgICAgY2FzZSBjZWlsaW5nKGxlbi9pbnJhdGUpICogb3V0cmF0ZS4gKi8KIAogICAgICAgICAvKiBjb21wdXRlIGNlaWxpbmcobGVuL2lucmF0ZSkgd2l0aG91dCBvdmVyZmxvdyAqLwotICAgICAgICBQeV9zc2l6ZV90IHEgPSBsZW4gPiAwID8gMSArIChsZW4gLSAxKSAvIGlucmF0ZSA6IDA7CisgICAgICAgIFB5X3NzaXplX3QgcSA9IDEgKyAobGVuIC0gMSkgLyBpbnJhdGU7CiAgICAgICAgIGlmIChvdXRyYXRlID4gUFlfU1NJWkVfVF9NQVggLyBxIC8gYnl0ZXNfcGVyX2ZyYW1lKQogICAgICAgICAgICAgc3RyID0gTlVMTDsKICAgICAgICAgZWxzZQpAQCAtMTE5Nyw2ICsxMzg0LDcgQEAKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICAgICBuY3AgPSBQeUJ5dGVzX0FzU3RyaW5nKHN0cik7CisgICAgY3AgPSBmcmFnbWVudC0+YnVmOwogCiAgICAgZm9yICg7OykgewogICAgICAgICB3aGlsZSAoZCA8IDApIHsKQEAgLTEyMjcsMTMgKzE0MTUsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgZm9yIChjaGFuID0gMDsgY2hhbiA8IG5jaGFubmVsczsgY2hhbisrKSB7CiAgICAgICAgICAgICAgICAgcHJldl9pW2NoYW5dID0gY3VyX2lbY2hhbl07Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoKGludCkqQ0hBUlAoY3AsIDApKSA8PCAyNDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCi0gICAgICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKChpbnQpKlNIT1JUUChjcCwgMCkpIDw8IDE2OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gNCkKLSAgICAgICAgICAgICAgICAgICAgY3VyX2lbY2hhbl0gPSAoaW50KSpMT05HUChjcCwgMCk7Ci0gICAgICAgICAgICAgICAgY3AgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICBjdXJfaVtjaGFuXSA9IEdFVFNBTVBMRTMyKHdpZHRoLCBjcCwgMCk7CisgICAgICAgICAgICAgICAgY3AgKz0gd2lkdGg7CiAgICAgICAgICAgICAgICAgLyogaW1wbGVtZW50cyBhIHNpbXBsZSBkaWdpdGFsIGZpbHRlciAqLwogICAgICAgICAgICAgICAgIGN1cl9pW2NoYW5dID0gKGludCkoCiAgICAgICAgICAgICAgICAgICAgICgoZG91YmxlKXdlaWdodEEgKiAoZG91YmxlKWN1cl9pW2NoYW5dICsKQEAgLTEyNDgsMjA2ICsxNDMxLDIyOSBAQAogICAgICAgICAgICAgICAgIGN1cl9vID0gKGludCkoKChkb3VibGUpcHJldl9pW2NoYW5dICogKGRvdWJsZSlkICsKICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKWN1cl9pW2NoYW5dICogKGRvdWJsZSkob3V0cmF0ZSAtIGQpKSAvCiAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpb3V0cmF0ZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHNpemUgPT0gMSkKLSAgICAgICAgICAgICAgICAgICAgKkNIQVJQKG5jcCwgMCkgPSAoc2lnbmVkIGNoYXIpKGN1cl9vID4+IDI0KTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplID09IDIpCi0gICAgICAgICAgICAgICAgICAgICpTSE9SVFAobmNwLCAwKSA9IChzaG9ydCkoY3VyX28gPj4gMTYpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPT0gNCkKLSAgICAgICAgICAgICAgICAgICAgKkxPTkdQKG5jcCwgMCkgPSAoUHlfSW50MzIpKGN1cl9vKTsKLSAgICAgICAgICAgICAgICBuY3AgKz0gc2l6ZTsKKyAgICAgICAgICAgICAgICBTRVRTQU1QTEUzMih3aWR0aCwgbmNwLCAwLCBjdXJfbyk7CisgICAgICAgICAgICAgICAgbmNwICs9IHdpZHRoOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZCAtPSBpbnJhdGU7CiAgICAgICAgIH0KICAgICB9CiAgIGV4aXQ6Ci0gICAgaWYgKHByZXZfaSAhPSBOVUxMKQotICAgICAgICBmcmVlKHByZXZfaSk7Ci0gICAgaWYgKGN1cl9pICE9IE5VTEwpCi0gICAgICAgIGZyZWUoY3VyX2kpOworICAgIFB5TWVtX0ZyZWUocHJldl9pKTsKKyAgICBQeU1lbV9GcmVlKGN1cl9pKTsKICAgICByZXR1cm4gcnY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK2F1ZGlvb3AubGluMnVsYXcKKworICAgIGZyYWdtZW50OiBQeV9idWZmZXIKKyAgICB3aWR0aDogaW50CisgICAgLworCitDb252ZXJ0IHNhbXBsZXMgaW4gdGhlIGF1ZGlvIGZyYWdtZW50IHRvIHUtTEFXIGVuY29kaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4ydWxhdyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX2xpbjJ1bGF3X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTI2MjYzY2M4NzdjNWUxYmMgaW5wdXQ9MjQ1MGQxYjg3MGI2YmFjMl0qLwogewotICAgIHNpZ25lZCBjaGFyICpjcDsKICAgICB1bnNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbCA9IDA7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTpsaW4ydWxhdyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwIDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4vc2l6ZSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4vd2lkdGgpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCA4OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDE2OwotCi0gICAgICAgICpuY3ArKyA9IHN0XzE0bGluZWFyMnVsYXcodmFsKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbjsgaSArPSB3aWR0aCkgeworICAgICAgICBpbnQgdmFsID0gR0VUU0FNUExFMzIod2lkdGgsIGZyYWdtZW50LT5idWYsIGkpOworICAgICAgICAqbmNwKysgPSBzdF8xNGxpbmVhcjJ1bGF3KHZhbCA+PiAxOCk7CiAgICAgfQogICAgIHJldHVybiBydjsKIH0KIAorLypbY2xpbmljIGlucHV0XQorYXVkaW9vcC51bGF3MmxpbgorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICAvCisKK0NvbnZlcnQgc291bmQgZnJhZ21lbnRzIGluIHUtTEFXIGVuY29kaW5nIHRvIGxpbmVhcmx5IGVuY29kZWQgc291bmQgZnJhZ21lbnRzLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF91bGF3MmxpbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCithdWRpb29wX3VsYXcybGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTk4NjRjYjM0ZTNhMWQ4NzYgaW5wdXQ9NDVkNTNkZGNlNWJlN2QwNl0qLwogewogICAgIHVuc2lnbmVkIGNoYXIgKmNwOwotICAgIHVuc2lnbmVkIGNoYXIgY3ZhbDsKICAgICBzaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWw7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5T2JqZWN0ICpydjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjaTp1bGF3MmxpbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY3AsICZsZW4sICZzaXplKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUod2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWC9zaXplKSB7CisgICAgaWYgKGZyYWdtZW50LT5sZW4gPiBQWV9TU0laRV9UX01BWC93aWR0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKnNpemUpOwotICAgIGlmICggcnYgPT0gMCApCi0gICAgICAgIHJldHVybiAwOworICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBmcmFnbWVudC0+bGVuKndpZHRoKTsKKyAgICBpZiAocnYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhydik7CiAKLSAgICBmb3IgKCBpPTA7IGkgPCBsZW4qc2l6ZTsgaSArPSBzaXplICkgewotICAgICAgICBjdmFsID0gKmNwKys7Ci0gICAgICAgIHZhbCA9IHN0X3VsYXcybGluZWFyMTYoY3ZhbCk7Ci0KLSAgICAgICAgaWYgKCBzaXplID09IDEgKSAgICAgICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh2YWwgPj4gOCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDIgKSAqU0hPUlRQKG5jcCwgaSkgPSAoc2hvcnQpKHZhbCk7Ci0gICAgICAgIGVsc2UgaWYgKCBzaXplID09IDQgKSAqTE9OR1AobmNwLCBpKSA9IChQeV9JbnQzMikodmFsPDwxNik7CisgICAgY3AgPSBmcmFnbWVudC0+YnVmOworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuKndpZHRoOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBzdF91bGF3MmxpbmVhcjE2KCpjcCsrKSA8PCAxNjsKKyAgICAgICAgU0VUU0FNUExFMzIod2lkdGgsIG5jcCwgaSwgdmFsKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmxpbjJhbGF3CisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworQ29udmVydCBzYW1wbGVzIGluIHRoZSBhdWRpbyBmcmFnbWVudCB0byBhLUxBVyBlbmNvZGluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKwogc3RhdGljIFB5T2JqZWN0ICoKLWF1ZGlvb3BfbGluMmFsYXcoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9saW4yYWxhd19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNWJmMTRiZDBmZTZmZGNkIGlucHV0PWZmYjFlZjhiYjM5ZGE5NDVdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgdW5zaWduZWQgY2hhciAqbmNwOwotICAgIFB5X3NzaXplX3QgbGVuLCBpOwotICAgIGludCBzaXplLCB2YWwgPSAwOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6bGluMmFsYXciLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19wYXJhbWV0ZXJzKGxlbiwgc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMoZnJhZ21lbnQtPmxlbiwgd2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJ2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4vc2l6ZSk7Ci0gICAgaWYgKCBydiA9PSAwICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGZyYWdtZW50LT5sZW4vd2lkdGgpOworICAgIGlmIChydiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuY3AgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCA4OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDE2OwotCi0gICAgICAgICpuY3ArKyA9IHN0X2xpbmVhcjJhbGF3KHZhbCk7CisgICAgZm9yIChpID0gMDsgaSA8IGZyYWdtZW50LT5sZW47IGkgKz0gd2lkdGgpIHsKKyAgICAgICAgaW50IHZhbCA9IEdFVFNBTVBMRTMyKHdpZHRoLCBmcmFnbWVudC0+YnVmLCBpKTsKKyAgICAgICAgKm5jcCsrID0gc3RfbGluZWFyMmFsYXcodmFsID4+IDE5KTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmFsYXcybGluCisKKyAgICBmcmFnbWVudDogUHlfYnVmZmVyCisgICAgd2lkdGg6IGludAorICAgIC8KKworQ29udmVydCBzb3VuZCBmcmFnbWVudHMgaW4gYS1MQVcgZW5jb2RpbmcgdG8gbGluZWFybHkgZW5jb2RlZCBzb3VuZCBmcmFnbWVudHMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKIHN0YXRpYyBQeU9iamVjdCAqCi1hdWRpb29wX2FsYXcybGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2F1ZGlvb3BfYWxhdzJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZDJiNjA0ZGRkMDM2ZTFjZCBpbnB1dD00MTQwNjI2MDQ2Y2QxNzcyXSovCiB7CiAgICAgdW5zaWduZWQgY2hhciAqY3A7Ci0gICAgdW5zaWduZWQgY2hhciBjdmFsOwogICAgIHNpZ25lZCBjaGFyICpuY3A7Ci0gICAgUHlfc3NpemVfdCBsZW4sIGk7Ci0gICAgaW50IHNpemUsIHZhbDsKKyAgICBQeV9zc2l6ZV90IGk7CisgICAgaW50IHZhbDsKICAgICBQeU9iamVjdCAqcnY7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJzI2k6YWxhdzJsaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSkgKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHNpemUpKQorICAgIGlmICghYXVkaW9vcF9jaGVja19zaXplKHdpZHRoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVgvc2l6ZSkgeworICAgIGlmIChmcmFnbWVudC0+bGVuID4gUFlfU1NJWkVfVF9NQVgvd2lkdGgpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IGZvciBvdXRwdXQgYnVmZmVyIik7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbipzaXplKTsKLSAgICBpZiAoIHJ2ID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbip3aWR0aCk7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5jcCA9IChzaWduZWQgY2hhciAqKVB5Qnl0ZXNfQXNTdHJpbmcocnYpOworICAgIGNwID0gZnJhZ21lbnQtPmJ1ZjsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbipzaXplOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGN2YWwgPSAqY3ArKzsKLSAgICAgICAgdmFsID0gc3RfYWxhdzJsaW5lYXIxNihjdmFsKTsKLQotICAgICAgICBpZiAoIHNpemUgPT0gMSApICAgICAgKkNIQVJQKG5jcCwgaSkgPSAoc2lnbmVkIGNoYXIpKHZhbCA+PiA4KTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gMiApICpTSE9SVFAobmNwLCBpKSA9IChzaG9ydCkodmFsKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKSh2YWw8PDE2KTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgZnJhZ21lbnQtPmxlbip3aWR0aDsgaSArPSB3aWR0aCkgeworICAgICAgICB2YWwgPSBzdF9hbGF3MmxpbmVhcjE2KCpjcCsrKSA8PCAxNjsKKyAgICAgICAgU0VUU0FNUExFMzIod2lkdGgsIG5jcCwgaSwgdmFsKTsKICAgICB9CiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmxpbjJhZHBjbQorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBzdGF0ZTogb2JqZWN0CisgICAgLworCitDb252ZXJ0IHNhbXBsZXMgdG8gNCBiaXQgSW50ZWwvRFZJIEFEUENNIGVuY29kaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9saW4yYWRwY20oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9saW4yYWRwY21faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5T2JqZWN0ICpzdGF0ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00NjU0YzI5ZDI3MzFmYWZlIGlucHV0PTEyOTE5ZDU0OWI5MGM5MGFdKi8KIHsKLSAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFsID0gMCwgc3RlcCwgdmFscHJlZCwgZGVsdGEsCisgICAgUHlfc3NpemVfdCBpOworICAgIGludCBzdGVwLCB2YWxwcmVkLCBkZWx0YSwKICAgICAgICAgaW5kZXgsIHNpZ24sIHZwZGlmZiwgZGlmZjsKLSAgICBQeU9iamVjdCAqcnYsICpzdGF0ZSwgKnN0cjsKKyAgICBQeU9iamVjdCAqcnYgPSBOVUxMLCAqc3RyOwogICAgIGludCBvdXRwdXRidWZmZXIgPSAwLCBidWZmZXJzdGVwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpTzpsaW4yYWRwY20iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJnN0YXRlKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3BhcmFtZXRlcnMobGVuLCBzaXplKSkKKyAgICBpZiAoIWF1ZGlvb3BfY2hlY2tfcGFyYW1ldGVycyhmcmFnbWVudC0+bGVuLCB3aWR0aCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4vKHNpemUqMikpOwotICAgIGlmICggc3RyID09IDAgKQotICAgICAgICByZXR1cm4gMDsKLSAgICBuY3AgPSAoc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FzU3RyaW5nKHN0cik7Ci0KICAgICAvKiBEZWNvZGUgc3RhdGUsIHNob3VsZCBoYXZlICh2YWx1ZSwgc3RlcCkgKi8KICAgICBpZiAoIHN0YXRlID09IFB5X05vbmUgKSB7CiAgICAgICAgIC8qIEZpcnN0IHRpbWUsIGl0IHNlZW1zLiBTZXQgZGVmYXVsdHMgKi8KICAgICAgICAgdmFscHJlZCA9IDA7CiAgICAgICAgIGluZGV4ID0gMDsKLSAgICB9IGVsc2UgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShzdGF0ZSwgImlpIiwgJnZhbHByZWQsICZpbmRleCkgKQotICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSBpZiAoIVB5VHVwbGVfQ2hlY2soc3RhdGUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJzdGF0ZSBtdXN0IGJlIGEgdHVwbGUgb3IgTm9uZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmICh2YWxwcmVkID49IDB4ODAwMCB8fCB2YWxwcmVkIDwgLTB4ODAwMCB8fAorICAgICAgICAgICAgIChzaXplX3QpaW5kZXggPj0gUHlfQVJSQVlfTEVOR1RIKHN0ZXBzaXplVGFibGUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIHN0YXRlIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgZnJhZ21lbnQtPmxlbi8od2lkdGgqMikpOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhzdHIpOwogCiAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogICAgIGJ1ZmZlcnN0ZXAgPSAxOwogCi0gICAgZm9yICggaT0wOyBpIDwgbGVuOyBpICs9IHNpemUgKSB7Ci0gICAgICAgIGlmICggc2l6ZSA9PSAxICkgICAgICB2YWwgPSAoKGludCkqQ0hBUlAoY3AsIGkpKSA8PCA4OwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgdmFsID0gKGludCkqU0hPUlRQKGNwLCBpKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApIHZhbCA9ICgoaW50KSpMT05HUChjcCwgaSkpID4+IDE2OworICAgIGZvciAoaSA9IDA7IGkgPCBmcmFnbWVudC0+bGVuOyBpICs9IHdpZHRoKSB7CisgICAgICAgIGludCB2YWwgPSBHRVRTQU1QTEUzMih3aWR0aCwgZnJhZ21lbnQtPmJ1ZiwgaSkgPj4gMTY7CiAKICAgICAgICAgLyogU3RlcCAxIC0gY29tcHV0ZSBkaWZmZXJlbmNlIHdpdGggcHJldmlvdXMgdmFsdWUgKi8KLSAgICAgICAgZGlmZiA9IHZhbCAtIHZhbHByZWQ7Ci0gICAgICAgIHNpZ24gPSAoZGlmZiA8IDApID8gOCA6IDA7Ci0gICAgICAgIGlmICggc2lnbiApIGRpZmYgPSAoLWRpZmYpOworICAgICAgICBpZiAodmFsIDwgdmFscHJlZCkgeworICAgICAgICAgICAgZGlmZiA9IHZhbHByZWQgLSB2YWw7CisgICAgICAgICAgICBzaWduID0gODsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGRpZmYgPSB2YWwgLSB2YWxwcmVkOworICAgICAgICAgICAgc2lnbiA9IDA7CisgICAgICAgIH0KIAogICAgICAgICAvKiBTdGVwIDIgLSBEaXZpZGUgYW5kIGNsYW1wICovCiAgICAgICAgIC8qIE5vdGU6CkBAIC0xNTExLDIxICsxNzE3LDI5IEBACiAgICAgcmV0dXJuIHJ2OwogfQogCisvKltjbGluaWMgaW5wdXRdCithdWRpb29wLmFkcGNtMmxpbgorCisgICAgZnJhZ21lbnQ6IFB5X2J1ZmZlcgorICAgIHdpZHRoOiBpbnQKKyAgICBzdGF0ZTogb2JqZWN0CisgICAgLworCitEZWNvZGUgYW4gSW50ZWwvRFZJIEFEUENNIGNvZGVkIGZyYWdtZW50IHRvIGEgbGluZWFyIGZyYWdtZW50LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYXVkaW9vcF9hZHBjbTJsaW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYXVkaW9vcF9hZHBjbTJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5T2JqZWN0ICpzdGF0ZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0zNzE5NjVjZGNjMGFhNjliIGlucHV0PWY1MjIxMTQ0ZjVjYTllZjBdKi8KIHsKICAgICBzaWduZWQgY2hhciAqY3A7CiAgICAgc2lnbmVkIGNoYXIgKm5jcDsKLSAgICBQeV9zc2l6ZV90IGxlbiwgaTsKLSAgICBpbnQgc2l6ZSwgdmFscHJlZCwgc3RlcCwgZGVsdGEsIGluZGV4LCBzaWduLCB2cGRpZmY7Ci0gICAgUHlPYmplY3QgKnJ2LCAqc3RyLCAqc3RhdGU7CisgICAgUHlfc3NpemVfdCBpLCBvdXRsZW47CisgICAgaW50IHZhbHByZWQsIHN0ZXAsIGRlbHRhLCBpbmRleCwgc2lnbiwgdnBkaWZmOworICAgIFB5T2JqZWN0ICpydiwgKnN0cjsKICAgICBpbnQgaW5wdXRidWZmZXIgPSAwLCBidWZmZXJzdGVwOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAicyNpTzphZHBjbTJsaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNwLCAmbGVuLCAmc2l6ZSwgJnN0YXRlKSApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUoc2l6ZSkpCisgICAgaWYgKCFhdWRpb29wX2NoZWNrX3NpemUod2lkdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIERlY29kZSBzdGF0ZSwgc2hvdWxkIGhhdmUgKHZhbHVlLCBzdGVwKSAqLwpAQCAtMTUzMywyMyArMTc0NywzNiBAQAogICAgICAgICAvKiBGaXJzdCB0aW1lLCBpdCBzZWVtcy4gU2V0IGRlZmF1bHRzICovCiAgICAgICAgIHZhbHByZWQgPSAwOwogICAgICAgICBpbmRleCA9IDA7Ci0gICAgfSBlbHNlIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoc3RhdGUsICJpaSIsICZ2YWxwcmVkLCAmaW5kZXgpICkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGVsc2UgaWYgKCFQeVR1cGxlX0NoZWNrKHN0YXRlKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAic3RhdGUgbXVzdCBiZSBhIHR1cGxlIG9yIE5vbmUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHN0YXRlLCAiaWkiLCAmdmFscHJlZCwgJmluZGV4KSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAodmFscHJlZCA+PSAweDgwMDAgfHwgdmFscHJlZCA8IC0weDgwMDAgfHwKKyAgICAgICAgICAgICAoc2l6ZV90KWluZGV4ID49IFB5X0FSUkFZX0xFTkdUSChzdGVwc2l6ZVRhYmxlKSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBzdGF0ZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKLSAgICBpZiAobGVuID4gKFBZX1NTSVpFX1RfTUFYLzIpL3NpemUpIHsKKyAgICBpZiAoZnJhZ21lbnQtPmxlbiA+IChQWV9TU0laRV9UX01BWC8yKS93aWR0aCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBtZW1vcnkgZm9yIG91dHB1dCBidWZmZXIiKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdHIgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbipzaXplKjIpOwotICAgIGlmICggc3RyID09IDAgKQotICAgICAgICByZXR1cm4gMDsKKyAgICBvdXRsZW4gPSBmcmFnbWVudC0+bGVuKndpZHRoKjI7CisgICAgc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBvdXRsZW4pOworICAgIGlmIChzdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbmNwID0gKHNpZ25lZCBjaGFyICopUHlCeXRlc19Bc1N0cmluZyhzdHIpOworICAgIGNwID0gZnJhZ21lbnQtPmJ1ZjsKIAogICAgIHN0ZXAgPSBzdGVwc2l6ZVRhYmxlW2luZGV4XTsKICAgICBidWZmZXJzdGVwID0gMDsKIAotICAgIGZvciAoIGk9MDsgaSA8IGxlbipzaXplKjI7IGkgKz0gc2l6ZSApIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgb3V0bGVuOyBpICs9IHdpZHRoKSB7CiAgICAgICAgIC8qIFN0ZXAgMSAtIGdldCB0aGUgZGVsdGEgdmFsdWUgYW5kIGNvbXB1dGUgbmV4dCBpbmRleCAqLwogICAgICAgICBpZiAoIGJ1ZmZlcnN0ZXAgKSB7CiAgICAgICAgICAgICBkZWx0YSA9IGlucHV0YnVmZmVyICYgMHhmOwpAQCAtMTU5NCw5ICsxODIxLDcgQEAKICAgICAgICAgc3RlcCA9IHN0ZXBzaXplVGFibGVbaW5kZXhdOwogCiAgICAgICAgIC8qIFN0ZXAgNiAtIE91dHB1dCB2YWx1ZSAqLwotICAgICAgICBpZiAoIHNpemUgPT0gMSApICpDSEFSUChuY3AsIGkpID0gKHNpZ25lZCBjaGFyKSh2YWxwcmVkID4+IDgpOwotICAgICAgICBlbHNlIGlmICggc2l6ZSA9PSAyICkgKlNIT1JUUChuY3AsIGkpID0gKHNob3J0KSh2YWxwcmVkKTsKLSAgICAgICAgZWxzZSBpZiAoIHNpemUgPT0gNCApICpMT05HUChuY3AsIGkpID0gKFB5X0ludDMyKSh2YWxwcmVkPDwxNik7CisgICAgICAgIFNFVFNBTVBMRTMyKHdpZHRoLCBuY3AsIGksIHZhbHByZWQgPDwgMTYpOwogICAgIH0KIAogICAgIHJ2ID0gUHlfQnVpbGRWYWx1ZSgiKE8oaWkpKSIsIHN0ciwgdmFscHJlZCwgaW5kZXgpOwpAQCAtMTYwNCwzMiArMTgyOSwzNSBAQAogICAgIHJldHVybiBydjsKIH0KIAorI2luY2x1ZGUgImNsaW5pYy9hdWRpb29wLmMuaCIKKwogc3RhdGljIFB5TWV0aG9kRGVmIGF1ZGlvb3BfbWV0aG9kc1tdID0gewotICAgIHsgIm1heCIsIGF1ZGlvb3BfbWF4LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJtaW5tYXgiLCBhdWRpb29wX21pbm1heCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYXZnIiwgYXVkaW9vcF9hdmcsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgIm1heHBwIiwgYXVkaW9vcF9tYXhwcCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYXZncHAiLCBhdWRpb29wX2F2Z3BwLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJybXMiLCBhdWRpb29wX3JtcywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiZmluZGZpdCIsIGF1ZGlvb3BfZmluZGZpdCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiZmluZG1heCIsIGF1ZGlvb3BfZmluZG1heCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiZmluZGZhY3RvciIsIGF1ZGlvb3BfZmluZGZhY3RvciwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiY3Jvc3MiLCBhdWRpb29wX2Nyb3NzLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJtdWwiLCBhdWRpb29wX211bCwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYWRkIiwgYXVkaW9vcF9hZGQsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImJpYXMiLCBhdWRpb29wX2JpYXMsIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgInVsYXcybGluIiwgYXVkaW9vcF91bGF3MmxpbiwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibGluMnVsYXciLCBhdWRpb29wX2xpbjJ1bGF3LCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJhbGF3MmxpbiIsIGF1ZGlvb3BfYWxhdzJsaW4sIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImxpbjJhbGF3IiwgYXVkaW9vcF9saW4yYWxhdywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAibGluMmxpbiIsIGF1ZGlvb3BfbGluMmxpbiwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAiYWRwY20ybGluIiwgYXVkaW9vcF9hZHBjbTJsaW4sIE1FVEhfVkFSQVJHUyB9LAotICAgIHsgImxpbjJhZHBjbSIsIGF1ZGlvb3BfbGluMmFkcGNtLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJ0b21vbm8iLCBhdWRpb29wX3RvbW9ubywgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAidG9zdGVyZW8iLCBhdWRpb29wX3Rvc3RlcmVvLCBNRVRIX1ZBUkFSR1MgfSwKLSAgICB7ICJnZXRzYW1wbGUiLCBhdWRpb29wX2dldHNhbXBsZSwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAicmV2ZXJzZSIsIGF1ZGlvb3BfcmV2ZXJzZSwgTUVUSF9WQVJBUkdTIH0sCi0gICAgeyAicmF0ZWN2IiwgYXVkaW9vcF9yYXRlY3YsIE1FVEhfVkFSQVJHUyB9LAorICAgIEFVRElPT1BfTUFYX01FVEhPRERFRgorICAgIEFVRElPT1BfTUlOTUFYX01FVEhPRERFRgorICAgIEFVRElPT1BfQVZHX01FVEhPRERFRgorICAgIEFVRElPT1BfTUFYUFBfTUVUSE9EREVGCisgICAgQVVESU9PUF9BVkdQUF9NRVRIT0RERUYKKyAgICBBVURJT09QX1JNU19NRVRIT0RERUYKKyAgICBBVURJT09QX0ZJTkRGSVRfTUVUSE9EREVGCisgICAgQVVESU9PUF9GSU5ETUFYX01FVEhPRERFRgorICAgIEFVRElPT1BfRklOREZBQ1RPUl9NRVRIT0RERUYKKyAgICBBVURJT09QX0NST1NTX01FVEhPRERFRgorICAgIEFVRElPT1BfTVVMX01FVEhPRERFRgorICAgIEFVRElPT1BfQUREX01FVEhPRERFRgorICAgIEFVRElPT1BfQklBU19NRVRIT0RERUYKKyAgICBBVURJT09QX1VMQVcyTElOX01FVEhPRERFRgorICAgIEFVRElPT1BfTElOMlVMQVdfTUVUSE9EREVGCisgICAgQVVESU9PUF9BTEFXMkxJTl9NRVRIT0RERUYKKyAgICBBVURJT09QX0xJTjJBTEFXX01FVEhPRERFRgorICAgIEFVRElPT1BfTElOMkxJTl9NRVRIT0RERUYKKyAgICBBVURJT09QX0FEUENNMkxJTl9NRVRIT0RERUYKKyAgICBBVURJT09QX0xJTjJBRFBDTV9NRVRIT0RERUYKKyAgICBBVURJT09QX1RPTU9OT19NRVRIT0RERUYKKyAgICBBVURJT09QX1RPU1RFUkVPX01FVEhPRERFRgorICAgIEFVRElPT1BfR0VUU0FNUExFX01FVEhPRERFRgorICAgIEFVRElPT1BfUkVWRVJTRV9NRVRIT0RERUYKKyAgICBBVURJT09QX0JZVEVTV0FQX01FVEhPRERFRgorICAgIEFVRElPT1BfUkFURUNWX01FVEhPRERFRgogICAgIHsgMCwgICAgICAgICAgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2JpbmFzY2lpLmMgYi9Nb2R1bGVzL2JpbmFzY2lpLmMKaW5kZXggODI5YmRlOC4uYzkzMDljZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9iaW5hc2NpaS5jCisrKyBiL01vZHVsZXMvYmluYXNjaWkuYwpAQCAtMTgzLDYgKzE4MywyNyBAQAogICAgIDB4NmUxNywgMHg3ZTM2LCAweDRlNTUsIDB4NWU3NCwgMHgyZTkzLCAweDNlYjIsIDB4MGVkMSwgMHgxZWYwLAogfTsKIAorLypbY2xpbmljIGlucHV0XQorb3V0cHV0IHByZXNldCBmaWxlCittb2R1bGUgYmluYXNjaWkKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTQ0YzZmODQwY2U3MDhmMGNdKi8KKworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyBhc2NpaV9idWZmZXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfYnVmZmVyJworICAgIGNvbnZlcnRlciA9ICdhc2NpaV9idWZmZXJfY29udmVydGVyJworICAgIGltcGxfYnlfcmVmZXJlbmNlID0gVHJ1ZQorICAgIGNfZGVmYXVsdCA9ICJ7TlVMTCwgTlVMTH0iCisKKyAgICBkZWYgY2xlYW51cChzZWxmKToKKyAgICAgICAgbmFtZSA9IHNlbGYubmFtZQorICAgICAgICByZXR1cm4gIiIuam9pbihbImlmICgiLCBuYW1lLCAiLm9iailcbiAgIFB5QnVmZmVyX1JlbGVhc2UoJiIsIG5hbWUsICIpO1xuIl0pCisKK1tweXRob24gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW3B5dGhvbiBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTNlYjdiNjM2MTBkYTkyY2RdKi8KKwogc3RhdGljIGludAogYXNjaWlfYnVmZmVyX2NvbnZlcnRlcihQeU9iamVjdCAqYXJnLCBQeV9idWZmZXIgKmJ1ZikKIHsKQEAgLTIwNywyNiArMjI4LDM0IEBACiAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhcmcsIGJ1ZiwgUHlCVUZfU0lNUExFKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgc2hvdWxkIGJlIGJ5dGVzLCBidWZmZXIgb3IgQVNDSUkgc3RyaW5nLCAiCi0gICAgICAgICAgICAgICAgICAgICAibm90ICVSIiwgUHlfVFlQRShhcmcpKTsKKyAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMTAwcyciLCBQeV9UWVBFKGFyZyktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgaWYgKCFQeUJ1ZmZlcl9Jc0NvbnRpZ3VvdXMoYnVmLCAnQycpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgc2hvdWxkIGJlIGEgY29udGlndW91cyBidWZmZXIsICIKLSAgICAgICAgICAgICAgICAgICAgICJub3QgJVIiLCBQeV9UWVBFKGFyZykpOworICAgICAgICAgICAgICAgICAgICAgIm5vdCAnJS4xMDBzJyIsIFB5X1RZUEUoYXJnKS0+dHBfbmFtZSk7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoYnVmKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHJldHVybiBQeV9DTEVBTlVQX1NVUFBPUlRFRDsKIH0KIAorI2luY2x1ZGUgImNsaW5pYy9iaW5hc2NpaS5jLmgiCiAKLVB5RG9jX1NUUlZBUihkb2NfYTJiX3V1LCAiKGFzY2lpKSAtPiBiaW4uIERlY29kZSBhIGxpbmUgb2YgdXVlbmNvZGVkIGRhdGEiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmEyYl91dQorCisgICAgZGF0YTogYXNjaWlfYnVmZmVyCisgICAgLworCitEZWNvZGUgYSBsaW5lIG9mIHV1ZW5jb2RlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX3V1KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl91dV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01Nzc5ZjM5YjBiNDg0NTlmIGlucHV0PTdjYWZlYWY3M2RmNjNkMWNdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFzY2lpOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTIzNCwxMCArMjYzLDggQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBhc2NpaV9sZW4sIGJpbl9sZW47CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfdXUiLCBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmcGFzY2lpKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGFzY2lpX2RhdGEgPSBwYXNjaWkuYnVmOwotICAgIGFzY2lpX2xlbiA9IHBhc2NpaS5sZW47CisgICAgYXNjaWlfZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBhc2NpaV9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoYXNjaWlfbGVuID49IDApOwogCkBAIC0yNDYsMTAgKzI3Myw4IEBACiAgICAgYXNjaWlfbGVuLS07CiAKICAgICAvKiBBbGxvY2F0ZSB0aGUgYnVmZmVyICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJpbl9sZW4pKSA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIGJpbl9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIDsgYmluX2xlbiA+IDAgOyBhc2NpaV9sZW4tLSwgYXNjaWlfZGF0YSsrICkgewpAQCAtMjY5LDcgKzI5NCw2IEBACiAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKCB0aGlzX2NoIDwgJyAnIHx8IHRoaXNfY2ggPiAoJyAnICsgNjQpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiSWxsZWdhbCBjaGFyIik7Ci0gICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQpAQCAtMjk4LDIxICszMjIsMjYgQEAKICAgICAgICAgaWYgKCB0aGlzX2NoICE9ICcgJyAmJiB0aGlzX2NoICE9ICcgJys2NCAmJgogICAgICAgICAgICAgIHRoaXNfY2ggIT0gJ1xuJyAmJiB0aGlzX2NoICE9ICdccicgKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJUcmFpbGluZyBnYXJiYWdlIik7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgcmV0dXJuIHJ2OwogfQogCi1QeURvY19TVFJWQVIoZG9jX2IyYV91dSwgIihiaW4pIC0+IGFzY2lpLiBVdWVuY29kZSBsaW5lIG9mIGRhdGEiKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmIyYV91dQorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitVdWVuY29kZSBsaW5lIG9mIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfdXUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYjJhX3V1X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE4MTAyMWI2OWJiOWE0MTQgaW5wdXQ9MDBmZGY0NThjZThiNDY1Yl0qLwogewotICAgIFB5X2J1ZmZlciBwYmluOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTMyMCwyMiArMzQ5LDE3IEBACiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgYmluX2xlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOmIyYV91dSIsICZwYmluKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJpbi5idWY7Ci0gICAgYmluX2xlbiA9IHBiaW4ubGVuOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGJpbl9sZW4gPSBkYXRhLT5sZW47CiAgICAgaWYgKCBiaW5fbGVuID4gNDUgKSB7CiAgICAgICAgIC8qIFRoZSA0NSBpcyBhIGxpbWl0IHRoYXQgYXBwZWFycyBpbiBhbGwgdXVlbmNvZGUncyAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJBdCBtb3N0IDQ1IGJ5dGVzIGF0IG9uY2UiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qIFdlJ3JlIGxhenkgYW5kIGFsbG9jYXRlIHRvIG11Y2ggKGZpeGVkIHVwIGxhdGVyKSAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMiArIChiaW5fbGVuKzIpLzMqNCkpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMiArIChiaW5fbGVuKzIpLzMqNCkpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgLyogU3RvcmUgdGhlIGxlbmd0aCAqLwpAQCAtMzYxLDEwICszODUsOCBAQAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YSAtCiAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KSkpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYocnYpOwotICAgICAgICBydiA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJpbik7CiAgICAgcmV0dXJuIHJ2OwogfQogCkBAIC0zOTQsMTIgKzQxNiwxOSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYTJiX2Jhc2U2NCwgIihhc2NpaSkgLT4gYmluLiBEZWNvZGUgYSBsaW5lIG9mIGJhc2U2NCBkYXRhIik7CisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5hMmJfYmFzZTY0CisKKyAgICBkYXRhOiBhc2NpaV9idWZmZXIKKyAgICAvCisKK0RlY29kZSBhIGxpbmUgb2YgYmFzZTY0IGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9hMmJfYmFzZTY0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2UzNTFiNzAyYmVkNTZkMiBpbnB1dD01ODcyYWNmNmUxY2FjMjQzXSovCiB7Ci0gICAgUHlfYnVmZmVyIHBhc2NpaTsKICAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqYmluX2RhdGE7CiAgICAgaW50IGxlZnRiaXRzID0gMDsKICAgICB1bnNpZ25lZCBjaGFyIHRoaXNfY2g7CkBAIC00MDgsMjUgKzQzNywxOSBAQAogICAgIFB5X3NzaXplX3QgYXNjaWlfbGVuLCBiaW5fbGVuOwogICAgIGludCBxdWFkX3BvcyA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfYmFzZTY0IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBhc2NpaSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc2NpaV9kYXRhID0gcGFzY2lpLmJ1ZjsKLSAgICBhc2NpaV9sZW4gPSBwYXNjaWkubGVuOworICAgIGFzY2lpX2RhdGEgPSBkYXRhLT5idWY7CisgICAgYXNjaWlfbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGFzY2lpX2xlbiA+PSAwKTsKIAotICAgIGlmIChhc2NpaV9sZW4gPiBQWV9TU0laRV9UX01BWCAtIDMpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAoYXNjaWlfbGVuID4gUFlfU1NJWkVfVF9NQVggLSAzKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICBiaW5fbGVuID0gKChhc2NpaV9sZW4rMykvNCkqMzsgLyogVXBwZXIgYm91bmQsIGNvcnJlY3RlZCBsYXRlciAqLwogCiAgICAgLyogQWxsb2NhdGUgdGhlIGJ1ZmZlciAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBiaW5fbGVuKSkgPT0gTlVMTCApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICBiaW5fZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogICAgIGJpbl9sZW4gPSAwOwogCkBAIC00NzksNyArNTAyLDYgQEAKICAgICB9CiAKICAgICBpZiAobGVmdGJpdHMgIT0gMCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJJbmNvcnJlY3QgcGFkZGluZyIpOwogICAgICAgICBQeV9ERUNSRUYocnYpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTQ5MSwyNCArNTEzLDMwIEBACiAgICAgKi8KICAgICBpZiAoYmluX2xlbiA+IDApIHsKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsIGJpbl9sZW4pIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgICAgIFB5X0NMRUFSKHJ2KTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKCIiLCAwKTsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYjJhX2Jhc2U2NCwgIihiaW4pIC0+IGFzY2lpLiBCYXNlNjQtY29kZSBsaW5lIG9mIGRhdGEiKTsKKworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYjJhX2Jhc2U2NAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitCYXNlNjQtY29kZSBsaW5lIG9mIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9iMmFfYmFzZTY0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2IyYV9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2NkNjFmYmVlMjkxMzI4NSBpbnB1dD0xNGVjNGU0NzM3MTE3NGE5XSovCiB7Ci0gICAgUHlfYnVmZmVyIHBidWY7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtNTE2LDI2ICs1NDQsMjEgQEAKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBiaW5fbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6YjJhX2Jhc2U2NCIsICZwYnVmKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJ1Zi5idWY7Ci0gICAgYmluX2xlbiA9IHBidWYubGVuOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGJpbl9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoYmluX2xlbiA+PSAwKTsKIAogICAgIGlmICggYmluX2xlbiA+IEJBU0U2NF9NQVhCSU4gKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIlRvbyBtdWNoIGRhdGEgZm9yIGJhc2U2NCBsaW5lIik7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBXZSdyZSBsYXp5IGFuZCBhbGxvY2F0ZSB0b28gbXVjaCAoZml4ZWQgdXAgbGF0ZXIpLgogICAgICAgICIrMyIgbGVhdmVzIHJvb20gZm9yIHVwIHRvIHR3byBwYWQgY2hhcmFjdGVycyBhbmQgYSB0cmFpbGluZwogICAgICAgIG5ld2xpbmUuICBOb3RlIHRoYXQgJ2InIGdldHMgZW5jb2RlZCBhcyAnWWc9PVxuJyAoMSBpbiwgNSBvdXQpLiAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbioyICsgMykpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYmluX2xlbioyICsgMykpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCA7IGJpbl9sZW4gPiAwIDsgYmluX2xlbi0tLCBiaW5fZGF0YSsrICkgewpAQCAtNTYzLDE5ICs1ODYsMjQgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOwogICAgIHJldHVybiBydjsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19hMmJfaHF4LCAiYXNjaWkgLT4gYmluLCBkb25lLiBEZWNvZGUgLmhxeCBjb2RpbmciKTsKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmEyYl9ocXgKKworICAgIGRhdGE6IGFzY2lpX2J1ZmZlcgorICAgIC8KKworRGVjb2RlIC5ocXggY29kaW5nLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYTJiX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9hMmJfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTYwYmNkYmJkMjhiMTA1Y2QgaW5wdXQ9MGQ5MTRjNjgwZTBlZWQ1NV0qLwogewotICAgIFB5X2J1ZmZlciBwYXNjaWk7CiAgICAgdW5zaWduZWQgY2hhciAqYXNjaWlfZGF0YSwgKmJpbl9kYXRhOwogICAgIGludCBsZWZ0Yml0cyA9IDA7CiAgICAgdW5zaWduZWQgY2hhciB0aGlzX2NoOwpAQCAtNTg0LDI1ICs2MTIsMTkgQEAKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBpbnQgZG9uZSA9IDA7CiAKLSAgICBpZiAoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfaHF4IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBhc2NpaSkgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc2NpaV9kYXRhID0gcGFzY2lpLmJ1ZjsKLSAgICBsZW4gPSBwYXNjaWkubGVuOworICAgIGFzY2lpX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAtIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKKyAgICBpZiAobGVuID4gUFlfU1NJWkVfVF9NQVggLSAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICAvKiBBbGxvY2F0ZSBhIHN0cmluZyB0aGF0IGlzIHRvbyBiaWcgKGZpeGVkIGxhdGVyKQogICAgICAgIEFkZCB0d28gdG8gdGhlIGluaXRpYWwgbGVuZ3RoIHRvIHByZXZlbnQgaW50ZXJuaW5nIHdoaWNoCiAgICAgICAgd291bGQgcHJlY2x1ZGUgc3Vic2VxdWVudCByZXNpemluZy4gICovCi0gICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4rMikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CisgICAgaWYgKCAocnY9UHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW4rMikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYmluX2RhdGEgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJ2KTsKIAogICAgIGZvciggOyBsZW4gPiAwIDsgbGVuLS0sIGFzY2lpX2RhdGErKyApIHsKQEAgLTYxMiw3ICs2MzQsNiBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICggdGhpc19jaCA9PSBGQUlMICkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKEVycm9yLCAiSWxsZWdhbCBjaGFyIik7Ci0gICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXNjaWkpOwogICAgICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC02MzUsNTUgKzY1Niw1MyBAQAogICAgIGlmICggbGVmdGJpdHMgJiYgIWRvbmUgKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhJbmNvbXBsZXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgIlN0cmluZyBoYXMgaW5jb21wbGV0ZSBudW1iZXIgb2YgYnl0ZXMiKTsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICAgICAgUHlfREVDUkVGKHJ2KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJ2LAogICAgICAgICAgICAgICAgICAgICAgICAoYmluX2RhdGEgLQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikpKSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKHJ2KTsKLSAgICAgICAgcnYgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihydik7CiAgICAgfQogICAgIGlmIChydikgewogICAgICAgICBQeU9iamVjdCAqcnJ2ID0gUHlfQnVpbGRWYWx1ZSgiT2kiLCBydiwgZG9uZSk7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhc2NpaSk7CiAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgIHJldHVybiBycnY7CiAgICAgfQogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFzY2lpKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19ybGVjb2RlX2hxeCwgIkJpbmhleCBSTEUtY29kZSBiaW5hcnkgZGF0YSIpOworCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5ybGVjb2RlX2hxeAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitCaW5oZXggUkxFLWNvZGUgYmluYXJ5IGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9ybGVjb2RlX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9ybGVjb2RlX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0wOTA1ZGEzNDRkYmYwNjQ4IGlucHV0PWUxZjE3MTI0NDdhODJiMDldKi8KIHsKLSAgICBQeV9idWZmZXIgcGJ1ZjsKICAgICB1bnNpZ25lZCBjaGFyICppbl9kYXRhLCAqb3V0X2RhdGE7CiAgICAgUHlPYmplY3QgKnJ2OwogICAgIHVuc2lnbmVkIGNoYXIgY2g7CiAgICAgUHlfc3NpemVfdCBpbiwgaW5lbmQsIGxlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOnJsZWNvZGVfaHF4IiwgJnBidWYpICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaW5fZGF0YSA9IHBidWYuYnVmOwotICAgIGxlbiA9IHBidWYubGVuOworICAgIGluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBidWYpOworICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICAvKiBXb3JzdCBjYXNlOiBvdXRwdXQgaXMgdHdpY2UgYXMgYmlnIGFzIGlucHV0IChmaXhlZCBsYXRlcikgKi8KLSAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKzIpKSA9PSBOVUxMICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKKyAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbioyKzIpKSA9PSBOVUxMICkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydik7CiAKICAgICBmb3IoIGluPTA7IGluPGxlbjsgaW4rKykgewpAQCAtNzEzLDE5ICs3MzIsMjUgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKG91dF9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYjJhX2hxeCwgIkVuY29kZSAuaHF4IGRhdGEiKTsKKworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYjJhX2hxeAorCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgLworCitFbmNvZGUgLmhxeCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfYjJhX2hxeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitiaW5hc2NpaV9iMmFfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVhOTg3ODEwZDVlM2NkYmIgaW5wdXQ9OTU5NmViZTAxOWZlMTJiYV0qLwogewotICAgIFB5X2J1ZmZlciBwYmluOwogICAgIHVuc2lnbmVkIGNoYXIgKmFzY2lpX2RhdGEsICpiaW5fZGF0YTsKICAgICBpbnQgbGVmdGJpdHMgPSAwOwogICAgIHVuc2lnbmVkIGNoYXIgdGhpc19jaDsKQEAgLTczMywyMyArNzU4LDE3IEBACiAgICAgUHlPYmplY3QgKnJ2OwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6YjJhX2hxeCIsICZwYmluKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJpbi5idWY7Ci0gICAgbGVuID0gcGJpbi5sZW47CisgICAgYmluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKIAotICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOworICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSAyKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICB9CiAKICAgICAvKiBBbGxvY2F0ZSBhIGJ1ZmZlciB0aGF0IGlzIGF0IGxlYXN0IGxhcmdlIGVub3VnaCAqLwotICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBiaW4pOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgbGVuKjIrMikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgYXNjaWlfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCiAgICAgZm9yKCA7IGxlbiA+IDAgOyBsZW4tLSwgYmluX2RhdGErKyApIHsKQEAgLTc3MCw0NyArNzg5LDQ1IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcnYsCiAgICAgICAgICAgICAgICAgICAgICAgIChhc2NpaV9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKICAgICByZXR1cm4gcnY7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfcmxlZGVjb2RlX2hxeCwgIkRlY29kZSBoZXhiaW4gUkxFLWNvZGVkIHN0cmluZyIpOworCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5ybGVkZWNvZGVfaHF4CisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAvCisKK0RlY29kZSBoZXhiaW4gUkxFLWNvZGVkIHN0cmluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX3JsZWRlY29kZV9ocXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfcmxlZGVjb2RlX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mN2FmZDg5Yjc4OTk0NmFiIGlucHV0PTU0Y2RkNDlmYzAxNDQwMmNdKi8KIHsKLSAgICBQeV9idWZmZXIgcGluOwogICAgIHVuc2lnbmVkIGNoYXIgKmluX2RhdGEsICpvdXRfZGF0YTsKICAgICB1bnNpZ25lZCBjaGFyIGluX2J5dGUsIGluX3JlcGVhdDsKICAgICBQeU9iamVjdCAqcnY7CiAgICAgUHlfc3NpemVfdCBpbl9sZW4sIG91dF9sZW4sIG91dF9sZW5fbGVmdDsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqOnJsZWRlY29kZV9ocXgiLCAmcGluKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGluX2RhdGEgPSBwaW4uYnVmOwotICAgIGluX2xlbiA9IHBpbi5sZW47CisgICAgaW5fZGF0YSA9IGRhdGEtPmJ1ZjsKKyAgICBpbl9sZW4gPSBkYXRhLT5sZW47CiAKICAgICBhc3NlcnQoaW5fbGVuID49IDApOwogCiAgICAgLyogRW1wdHkgc3RyaW5nIGlzIGEgc3BlY2lhbCBjYXNlICovCi0gICAgaWYgKCBpbl9sZW4gPT0gMCApIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKKyAgICBpZiAoIGluX2xlbiA9PSAwICkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoIiIsIDApOwotICAgIH0KLSAgICBlbHNlIGlmIChpbl9sZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKKyAgICBlbHNlIGlmIChpbl9sZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIC8qIEFsbG9jYXRlIGEgYnVmZmVyIG9mIHJlYXNvbmFibGUgc2l6ZS4gUmVzaXplZCB3aGVuIG5lZWRlZCAqLwogICAgIG91dF9sZW4gPSBpbl9sZW4qMjsKLSAgICBpZiAoIChydj1QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIG91dF9sZW4pKSA9PSBOVUxMICkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOworICAgIGlmICggKHJ2PVB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgb3V0X2xlbikpID09IE5VTEwgKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgb3V0X2xlbl9sZWZ0ID0gb3V0X2xlbjsKICAgICBvdXRfZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpOwogCkBAIC04MjMsNyArODQwLDYgQEAKICAgICAgICAgICAgICBpZiAoIC0taW5fbGVuIDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoSW5jb21wbGV0ZSwgIiIpOyBcCiAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgXAogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgXAogICAgICAgICAgICAgIH0gXAogICAgICAgICAgICAgIGIgPSAqaW5fZGF0YSsrOyBcCkBAIC04MzQsNyArODUwLDcgQEAKICAgICAgICAgICAgICBpZiAoIC0tb3V0X2xlbl9sZWZ0IDwgMCApIHsgXAogICAgICAgICAgICAgICAgICAgICAgIGlmICggb3V0X2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gMikgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7IFwKICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwgMipvdXRfbGVuKSA8IDApIFwKLSAgICAgICAgICAgICAgICAgICAgICAgIHsgUHlfREVDUkVGKHJ2KTsgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsgcmV0dXJuIE5VTEw7IH0gXAorICAgICAgICAgICAgICAgICAgICAgICAgeyBQeV9YREVDUkVGKHJ2KTsgcmV0dXJuIE5VTEw7IH0gXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhydikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgb3V0X2xlbjsgXAogICAgICAgICAgICAgICAgICAgICAgIG91dF9sZW5fbGVmdCA9IG91dF9sZW4tMTsgXApAQCAtODU2LDcgKzg3Miw2IEBACiAgICAgICAgICAgICAqKiBvZiB0aGUgc3RyaW5nIG9ubHkpLiBUaGlzIGlzIGEgcHJvZ3JhbW1lciBlcnJvci4KICAgICAgICAgICAgICovCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoRXJyb3IsICJPcnBoYW5lZCBSTEUgY29kZSBhdCBzdGFydCIpOwotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGluKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihydik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtODg3LDYwICs5MDIsNDEgQEAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZydiwKICAgICAgICAgICAgICAgICAgICAgICAgKG91dF9kYXRhIC0KICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcocnYpKSkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihydik7Ci0gICAgICAgIHJ2ID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIocnYpOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW4pOwogICAgIHJldHVybiBydjsKIH0KIAotUHlEb2NfU1RSVkFSKGRvY19jcmNfaHF4LAotIihkYXRhLCBvbGRjcmMpIC0+IG5ld2NyYy4gQ29tcHV0ZSBocXggQ1JDIGluY3JlbWVudGFsbHkiKTsKIAotc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2NyY19ocXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuY3JjX2hxeCAtPiB1bnNpZ25lZF9pbnQKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGNyYzogdW5zaWduZWRfaW50KGJpdHdpc2U9VHJ1ZSkKKyAgICAvCisKK0NvbXB1dGUgaHF4IENSQyBpbmNyZW1lbnRhbGx5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgdW5zaWduZWQgaW50CitiaW5hc2NpaV9jcmNfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgY3JjKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTE2N2MyZGFjNjI2MjU3MTcgaW5wdXQ9YWRkOGM1MzcxMmNjY2VkYV0qLwogewotICAgIFB5X2J1ZmZlciBwaW47CiAgICAgdW5zaWduZWQgY2hhciAqYmluX2RhdGE7Ci0gICAgdW5zaWduZWQgaW50IGNyYzsKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGlmICggIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqaTpjcmNfaHF4IiwgJnBpbiwgJmNyYykgKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBiaW5fZGF0YSA9IHBpbi5idWY7Ci0gICAgbGVuID0gcGluLmxlbjsKKyAgICBjcmMgJj0gMHhmZmZmOworICAgIGJpbl9kYXRhID0gZGF0YS0+YnVmOworICAgIGxlbiA9IGRhdGEtPmxlbjsKIAogICAgIHdoaWxlKGxlbi0tID4gMCkgewotICAgICAgICBjcmM9KChjcmM8PDgpJjB4ZmYwMCleY3JjdGFiX2hxeFsoKGNyYz4+OCkmMHhmZileKmJpbl9kYXRhKytdOworICAgICAgICBjcmMgPSAoKGNyYzw8OCkmMHhmZjAwKSBeIGNyY3RhYl9ocXhbKGNyYz4+OCleKmJpbl9kYXRhKytdOwogICAgIH0KIAotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbik7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCBjcmMpOworICAgIHJldHVybiBjcmM7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfY3JjMzIsCi0iKGRhdGEsIG9sZGNyYyA9IDApIC0+IG5ld2NyYy4gQ29tcHV0ZSBDUkMtMzIgaW5jcmVtZW50YWxseSIpOwotCi0jaWZkZWYgVVNFX1pMSUJfQ1JDMzIKLS8qIFRoaXMgd2FzIHRha2VuIGZyb20gemxpYm1vZHVsZS5jIFB5WmxpYl9jcmMzMiAoYnV0IGlzIFBZX1NTSVpFX1RfQ0xFQU4pICovCi1zdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfY3JjMzIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIHVuc2lnbmVkIGludCBjcmMzMnZhbCA9IDA7ICAvKiBjcmMzMigwTCwgWl9OVUxMLCAwKSAqLwotICAgIFB5X2J1ZmZlciBwYnVmOwotICAgIEJ5dGUgKmJ1ZjsKLSAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICBpbnQgc2lnbmVkX3ZhbDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STpjcmMzMiIsICZwYnVmLCAmY3JjMzJ2YWwpKQotICAgIHJldHVybiBOVUxMOwotICAgIGJ1ZiA9IChCeXRlKilwYnVmLmJ1ZjsKLSAgICBsZW4gPSBwYnVmLmxlbjsKLSAgICBzaWduZWRfdmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgbGVuKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc2lnbmVkX3ZhbCAmIDB4ZmZmZmZmZmZVKTsKLX0KLSNlbHNlICAvKiBVU0VfWkxJQl9DUkMzMiAqLworI2lmbmRlZiBVU0VfWkxJQl9DUkMzMgogLyogIENyYyAtIDMyIEJJVCBBTlNJIFgzLjY2IENSQyBjaGVja3N1bSBmaWxlcwogICAgIEFsc28ga25vd24gYXM6IElTTyAzMzA3CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfApAQCAtMTA1OCwyMCArMTA1NCw0MiBAQAogMHg1ZDY4MWIwMlUsIDB4MmE2ZjJiOTRVLCAweGI0MGJiZTM3VSwgMHhjMzBjOGVhMVUsIDB4NWEwNWRmMWJVLAogMHgyZDAyZWY4ZFUKIH07CisjZW5kaWYgIC8qIFVTRV9aTElCX0NSQzMyICovCiAKLXN0YXRpYyBQeU9iamVjdCAqCi1iaW5hc2NpaV9jcmMzMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5jcmMzMiAtPiB1bnNpZ25lZF9pbnQKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIGNyYzogdW5zaWduZWRfaW50KGJpdHdpc2U9VHJ1ZSkgPSAwCisgICAgLworCitDb21wdXRlIENSQy0zMiBpbmNyZW1lbnRhbGx5LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgdW5zaWduZWQgaW50CitiaW5hc2NpaV9jcmMzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IGNyYykKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD02MjBhOTYxNjQzMzkzYzRmIGlucHV0PWJiZTM0MGJjOTlkMjVhYThdKi8KKworI2lmZGVmIFVTRV9aTElCX0NSQzMyCisvKiBUaGlzIHdhcyB0YWtlbiBmcm9tIHpsaWJtb2R1bGUuYyBQeVpsaWJfY3JjMzIgKGJ1dCBpcyBQWV9TU0laRV9UX0NMRUFOKSAqLworeworICAgIEJ5dGUgKmJ1ZjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgc2lnbmVkX3ZhbDsKKworICAgIGJ1ZiA9IChCeXRlKilkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOworICAgIHNpZ25lZF92YWwgPSBjcmMzMihjcmMsIGJ1ZiwgbGVuKTsKKyAgICByZXR1cm4gKHVuc2lnbmVkIGludClzaWduZWRfdmFsICYgMHhmZmZmZmZmZlU7Cit9CisjZWxzZSAgLyogVVNFX1pMSUJfQ1JDMzIgKi8KIHsgLyogQnkgSmltIEFobHN0cm9tOyBBbGwgcmlnaHRzIHRyYW5zZmVycmVkIHRvIENOUkkgKi8KLSAgICBQeV9idWZmZXIgcGJpbjsKICAgICB1bnNpZ25lZCBjaGFyICpiaW5fZGF0YTsKLSAgICB1bnNpZ25lZCBpbnQgY3JjID0gMDsgICAgICAgLyogaW5pdGlhbCB2YWx1ZSBvZiBDUkMgKi8KICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICB1bnNpZ25lZCBpbnQgcmVzdWx0OwogCi0gICAgaWYgKCAhUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STpjcmMzMiIsICZwYmluLCAmY3JjKSApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGJpbl9kYXRhID0gcGJpbi5idWY7Ci0gICAgbGVuID0gcGJpbi5sZW47CisgICAgYmluX2RhdGEgPSBkYXRhLT5idWY7CisgICAgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgY3JjID0gfiBjcmM7CiAgICAgd2hpbGUgKGxlbi0tID4gMCkgewpAQCAtMTA4MCwzOCArMTA5OCw0MiBAQAogICAgIH0KIAogICAgIHJlc3VsdCA9IChjcmMgXiAweEZGRkZGRkZGKTsKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYmluKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcocmVzdWx0ICYgMHhmZmZmZmZmZik7CisgICAgcmV0dXJuIHJlc3VsdCAmIDB4ZmZmZmZmZmY7CiB9CiAjZW5kaWYgIC8qIFVTRV9aTElCX0NSQzMyICovCiAKKy8qW2NsaW5pYyBpbnB1dF0KK2JpbmFzY2lpLmIyYV9oZXgKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIC8KKworSGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYmluYXJ5IGRhdGEuCisKK1RoZSByZXR1cm4gdmFsdWUgaXMgYSBieXRlcyBvYmplY3QuICBUaGlzIGZ1bmN0aW9uIGlzIGFsc28KK2F2YWlsYWJsZSBhcyAiaGV4bGlmeSgpIi4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJpbmFzY2lpX2hleGxpZnkoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorYmluYXNjaWlfYjJhX2hleF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0xNzkzMTg5MjJjMmY4ZmRhIGlucHV0PTk2NDIzY2ZhMjk5ZmYzYjFdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFyZzsKICAgICBjaGFyKiBhcmdidWY7CiAgICAgUHlfc3NpemVfdCBhcmdsZW47CiAgICAgUHlPYmplY3QgKnJldHZhbDsKICAgICBjaGFyKiByZXRidWY7CiAgICAgUHlfc3NpemVfdCBpLCBqOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KjpiMmFfaGV4IiwgJnBhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhcmdidWYgPSBwYXJnLmJ1ZjsKLSAgICBhcmdsZW4gPSBwYXJnLmxlbjsKKyAgICBhcmdidWYgPSBkYXRhLT5idWY7CisgICAgYXJnbGVuID0gZGF0YS0+bGVuOwogCiAgICAgYXNzZXJ0KGFyZ2xlbiA+PSAwKTsKLSAgICBpZiAoYXJnbGVuID4gUFlfU1NJWkVfVF9NQVggLyAyKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOworICAgIGlmIChhcmdsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIH0KIAogICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYXJnbGVuKjIpOwotICAgIGlmICghcmV0dmFsKSB7Ci0gICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBhcmcpOworICAgIGlmICghcmV0dmFsKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAgICAgcmV0YnVmID0gUHlCeXRlc19BU19TVFJJTkcocmV0dmFsKTsKIAogICAgIC8qIG1ha2UgaGV4IHZlcnNpb24gb2Ygc3RyaW5nLCB0YWtlbiBmcm9tIHNoYW1vZHVsZS5jICovCkBAIC0xMTIyLDE2ICsxMTQ0LDIzIEBACiAgICAgICAgIGMgPSBhcmdidWZbaV0gJiAweGY7CiAgICAgICAgIHJldGJ1ZltqKytdID0gUHlfaGV4ZGlnaXRzW2NdOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICByZXR1cm4gcmV0dmFsOwogfQogCi1QeURvY19TVFJWQVIoZG9jX2hleGxpZnksCi0iYjJhX2hleChkYXRhKSAtPiBzOyBIZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBiaW5hcnkgZGF0YS5cblwKLVxuXAotVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdC4gIFRoaXMgZnVuY3Rpb24gaXMgYWxzb1xuXAotYXZhaWxhYmxlIGFzIFwiaGV4bGlmeSgpXCIuIik7CisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS5oZXhsaWZ5ID0gYmluYXNjaWkuYjJhX2hleAogCitIZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBiaW5hcnkgZGF0YS4KKworVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2hleGxpZnlfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NjA5ODQ0MDA5MWZiNjFkYyBpbnB1dD0yZTNhZmFlN2YwODNmMDYxXSovCit7CisgICAgcmV0dXJuIGJpbmFzY2lpX2IyYV9oZXhfaW1wbChtb2R1bGUsIGRhdGEpOworfQogCiBzdGF0aWMgaW50CiB0b19pbnQoaW50IGMpCkBAIC0xMTQ4LDIwICsxMTc3LDMwIEBACiB9CiAKIAorLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYTJiX2hleAorCisgICAgaGV4c3RyOiBhc2NpaV9idWZmZXIKKyAgICAvCisKK0JpbmFyeSBkYXRhIG9mIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorCitoZXhzdHIgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGhleCBkaWdpdHMgKHVwcGVyIG9yIGxvd2VyIGNhc2UpLgorVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBhcyAidW5oZXhsaWZ5KCkiLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCiBzdGF0aWMgUHlPYmplY3QgKgotYmluYXNjaWlfdW5oZXhsaWZ5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK2JpbmFzY2lpX2EyYl9oZXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmhleHN0cikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kNjFkYTQ1MmI1YzZkMjkwIGlucHV0PTllMWU3ZjJmOTRkYjI0ZmRdKi8KIHsKLSAgICBQeV9idWZmZXIgcGFyZzsKICAgICBjaGFyKiBhcmdidWY7CiAgICAgUHlfc3NpemVfdCBhcmdsZW47CiAgICAgUHlPYmplY3QgKnJldHZhbDsKICAgICBjaGFyKiByZXRidWY7CiAgICAgUHlfc3NpemVfdCBpLCBqOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjphMmJfaGV4IiwgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBhcmcpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhcmdidWYgPSBwYXJnLmJ1ZjsKLSAgICBhcmdsZW4gPSBwYXJnLmxlbjsKKyAgICBhcmdidWYgPSBoZXhzdHItPmJ1ZjsKKyAgICBhcmdsZW4gPSBoZXhzdHItPmxlbjsKIAogICAgIGFzc2VydChhcmdsZW4gPj0gMCk7CiAKQEAgLTExNzAsMTYgKzEyMDksMTMgQEAKICAgICAgKiByYWlzZSBhbiBleGNlcHRpb24uCiAgICAgICovCiAgICAgaWYgKGFyZ2xlbiAlIDIpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhFcnJvciwgIk9kZC1sZW5ndGggc3RyaW5nIik7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHJldHZhbCA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgKGFyZ2xlbi8yKSk7Ci0gICAgaWYgKCFyZXR2YWwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CisgICAgaWYgKCFyZXR2YWwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KICAgICByZXRidWYgPSBQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpOwogCiAgICAgZm9yIChpPWo9MDsgaSA8IGFyZ2xlbjsgaSArPSAyKSB7CkBAIC0xMTkyLDIwICsxMjI4LDI3IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0YnVmW2orK10gPSAodG9wIDw8IDQpICsgYm90OwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYXJnKTsKICAgICByZXR1cm4gcmV0dmFsOwogCiAgIGZpbmFsbHk6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGFyZyk7CiAgICAgUHlfREVDUkVGKHJldHZhbCk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfdW5oZXhsaWZ5LAotImEyYl9oZXgoaGV4c3RyKSAtPiBzOyBCaW5hcnkgZGF0YSBvZiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi5cblwKLVxuXAotaGV4c3RyIG11c3QgY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBoZXggZGlnaXRzICh1cHBlciBvciBsb3dlciBjYXNlKS5cblwKLVRoaXMgZnVuY3Rpb24gaXMgYWxzbyBhdmFpbGFibGUgYXMgXCJ1bmhleGxpZnkoKVwiIik7CisvKltjbGluaWMgaW5wdXRdCitiaW5hc2NpaS51bmhleGxpZnkgPSBiaW5hc2NpaS5hMmJfaGV4CisKK0JpbmFyeSBkYXRhIG9mIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgorCitoZXhzdHIgbXVzdCBjb250YWluIGFuIGV2ZW4gbnVtYmVyIG9mIGhleCBkaWdpdHMgKHVwcGVyIG9yIGxvd2VyIGNhc2UpLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfdW5oZXhsaWZ5X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpoZXhzdHIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MTdjZWM3NTQ0NDk5ODAzZSBpbnB1dD1kZDhjMDEyNzI1ZjQ2MmRhXSovCit7CisgICAgcmV0dXJuIGJpbmFzY2lpX2EyYl9oZXhfaW1wbChtb2R1bGUsIGhleHN0cik7Cit9CiAKIHN0YXRpYyBpbnQgdGFibGVfaGV4WzEyOF0gPSB7CiAgIC0xLC0xLC0xLC0xLCAtMSwtMSwtMSwtMSwgLTEsLTEsLTEsLTEsIC0xLC0xLC0xLC0xLApAQCAtMTIyMiwyNSArMTI2NSwyOCBAQAogCiAjZGVmaW5lIE1BWExJTkVTSVpFIDc2CiAKLVB5RG9jX1NUUlZBUihkb2NfYTJiX3FwLCAiRGVjb2RlIGEgc3RyaW5nIG9mIHFwLWVuY29kZWQgZGF0YSIpOwogCi1zdGF0aWMgUHlPYmplY3QqCi1iaW5hc2NpaV9hMmJfcXAoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQorLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYTJiX3FwCisKKyAgICBkYXRhOiBhc2NpaV9idWZmZXIKKyAgICBoZWFkZXI6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisKK0RlY29kZSBhIHN0cmluZyBvZiBxcC1lbmNvZGVkIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfcXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIGludCBoZWFkZXIpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTQ0ZWY4ODI3MDM1MjExNCBpbnB1dD01MTg3YTBkM2Q4ZTU0ZjNiXSovCiB7CiAgICAgUHlfc3NpemVfdCBpbiwgb3V0OwogICAgIGNoYXIgY2g7Ci0gICAgUHlfYnVmZmVyIHBkYXRhOwotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpvZGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyICphc2NpaV9kYXRhLCAqb2RhdGE7CiAgICAgUHlfc3NpemVfdCBkYXRhbGVuID0gMDsKICAgICBQeU9iamVjdCAqcnY7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhIiwgImhlYWRlciIsIE5VTEx9OwotICAgIGludCBoZWFkZXIgPSAwOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8aTphMmJfcXAiLCBrd2xpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJnBkYXRhLCAmaGVhZGVyKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZGF0YSA9IHBkYXRhLmJ1ZjsKLSAgICBkYXRhbGVuID0gcGRhdGEubGVuOworICAgIGFzY2lpX2RhdGEgPSBkYXRhLT5idWY7CisgICAgZGF0YWxlbiA9IGRhdGEtPmxlbjsKIAogICAgIC8qIFdlIGFsbG9jYXRlIHRoZSBvdXRwdXQgc2FtZSBzaXplIGFzIGlucHV0LCB0aGlzIGlzIG92ZXJraWxsLgogICAgICAqIFRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiB1c2VkIGNhbGxvYygpIHNvIHdlJ2xsIHplcm8gb3V0IHRoZQpAQCAtMTI0OCw3ICsxMjk0LDYgQEAKICAgICAgKi8KICAgICBvZGF0YSA9ICh1bnNpZ25lZCBjaGFyICopIFB5TWVtX01hbGxvYyhkYXRhbGVuKTsKICAgICBpZiAob2RhdGEgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEyNTYsMzEgKzEzMDEsMzEgQEAKIAogICAgIGluID0gb3V0ID0gMDsKICAgICB3aGlsZSAoaW4gPCBkYXRhbGVuKSB7Ci0gICAgICAgIGlmIChkYXRhW2luXSA9PSAnPScpIHsKKyAgICAgICAgaWYgKGFzY2lpX2RhdGFbaW5dID09ICc9JykgewogICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgIGlmIChpbiA+PSBkYXRhbGVuKSBicmVhazsKICAgICAgICAgICAgIC8qIFNvZnQgbGluZSBicmVha3MgKi8KLSAgICAgICAgICAgIGlmICgoZGF0YVtpbl0gPT0gJ1xuJykgfHwgKGRhdGFbaW5dID09ICdccicpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGFbaW5dICE9ICdcbicpIHsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluIDwgZGF0YWxlbiAmJiBkYXRhW2luXSAhPSAnXG4nKSBpbisrOworICAgICAgICAgICAgaWYgKChhc2NpaV9kYXRhW2luXSA9PSAnXG4nKSB8fCAoYXNjaWlfZGF0YVtpbl0gPT0gJ1xyJykpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXNjaWlfZGF0YVtpbl0gIT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW4gPCBkYXRhbGVuICYmIGFzY2lpX2RhdGFbaW5dICE9ICdcbicpIGluKys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChpbiA8IGRhdGFsZW4pIGluKys7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChkYXRhW2luXSA9PSAnPScpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFzY2lpX2RhdGFbaW5dID09ICc9JykgewogICAgICAgICAgICAgICAgIC8qIGJyb2tlbiBjYXNlIGZyb20gYnJva2VuIHB5dGhvbiBxcCAqLwogICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICc9JzsKICAgICAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoKChkYXRhW2luXSA+PSAnQScgJiYgZGF0YVtpbl0gPD0gJ0YnKSB8fAotICAgICAgICAgICAgICAgICAgICAgIChkYXRhW2luXSA+PSAnYScgJiYgZGF0YVtpbl0gPD0gJ2YnKSB8fAotICAgICAgICAgICAgICAgICAgICAgIChkYXRhW2luXSA+PSAnMCcgJiYgZGF0YVtpbl0gPD0gJzknKSkgJiYKLSAgICAgICAgICAgICAgICAgICAgICgoZGF0YVtpbisxXSA+PSAnQScgJiYgZGF0YVtpbisxXSA8PSAnRicpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgKGRhdGFbaW4rMV0gPj0gJ2EnICYmIGRhdGFbaW4rMV0gPD0gJ2YnKSB8fAotICAgICAgICAgICAgICAgICAgICAgIChkYXRhW2luKzFdID49ICcwJyAmJiBkYXRhW2luKzFdIDw9ICc5JykpKSB7CisgICAgICAgICAgICBlbHNlIGlmICgoKGFzY2lpX2RhdGFbaW5dID49ICdBJyAmJiBhc2NpaV9kYXRhW2luXSA8PSAnRicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGFbaW5dID49ICdhJyAmJiBhc2NpaV9kYXRhW2luXSA8PSAnZicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGFbaW5dID49ICcwJyAmJiBhc2NpaV9kYXRhW2luXSA8PSAnOScpKSAmJgorICAgICAgICAgICAgICAgICAgICAgKChhc2NpaV9kYXRhW2luKzFdID49ICdBJyAmJiBhc2NpaV9kYXRhW2luKzFdIDw9ICdGJykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoYXNjaWlfZGF0YVtpbisxXSA+PSAnYScgJiYgYXNjaWlfZGF0YVtpbisxXSA8PSAnZicpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGFzY2lpX2RhdGFbaW4rMV0gPj0gJzAnICYmIGFzY2lpX2RhdGFbaW4rMV0gPD0gJzknKSkpIHsKICAgICAgICAgICAgICAgICAvKiBoZXh2YWwgKi8KLSAgICAgICAgICAgICAgICBjaCA9IGhleHZhbChkYXRhW2luXSkgPDwgNDsKKyAgICAgICAgICAgICAgICBjaCA9IGhleHZhbChhc2NpaV9kYXRhW2luXSkgPDwgNDsKICAgICAgICAgICAgICAgICBpbisrOwotICAgICAgICAgICAgICAgIGNoIHw9IGhleHZhbChkYXRhW2luXSk7CisgICAgICAgICAgICAgICAgY2ggfD0gaGV4dmFsKGFzY2lpX2RhdGFbaW5dKTsKICAgICAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9IGNoOwogICAgICAgICAgICAgfQpAQCAtMTI4OCwyMiArMTMzMywyMCBAQAogICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnPSc7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoaGVhZGVyICYmIGRhdGFbaW5dID09ICdfJykgeworICAgICAgICBlbHNlIGlmIChoZWFkZXIgJiYgYXNjaWlfZGF0YVtpbl0gPT0gJ18nKSB7CiAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnICc7CiAgICAgICAgICAgICBpbisrOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgb2RhdGFbb3V0XSA9IGRhdGFbaW5dOworICAgICAgICAgICAgb2RhdGFbb3V0XSA9IGFzY2lpX2RhdGFbaW5dOwogICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgIG91dCsrOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICgocnYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjaGFyICopb2RhdGEsIG91dCkpID09IE5VTEwpIHsKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgICAgICBQeU1lbV9GcmVlKG9kYXRhKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBQeU1lbV9GcmVlKG9kYXRhKTsKICAgICByZXR1cm4gcnY7CiB9CkBAIC0xMzE5LDYzICsxMzYyLDYzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihkb2NfYjJhX3FwLAotImIyYV9xcChkYXRhLCBxdW90ZXRhYnM9MCwgaXN0ZXh0PTEsIGhlYWRlcj0wKSAtPiBzOyBcblwKLSBFbmNvZGUgYSBzdHJpbmcgdXNpbmcgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZy4gXG5cCi1cblwKLU9uIGVuY29kaW5nLCB3aGVuIGlzdGV4dCBpcyBzZXQsIG5ld2xpbmVzIGFyZSBub3QgZW5jb2RlZCwgYW5kIHdoaXRlIFxuXAotc3BhY2UgYXQgZW5kIG9mIGxpbmVzIGlzLiAgV2hlbiBpc3RleHQgaXMgbm90IHNldCwgXFxyIGFuZCBcXG4gKENSL0xGKSBhcmUgXG5cCi1ib3RoIGVuY29kZWQuICBXaGVuIHF1b3RldGFicyBpcyBzZXQsIHNwYWNlIGFuZCB0YWJzIGFyZSBlbmNvZGVkLiIpOwotCiAvKiBYWFg6IFRoaXMgaXMgcmlkaWN1bG91c2x5IGNvbXBsaWNhdGVkIHRvIGJlIGJhY2t3YXJkIGNvbXBhdGlibGUKICAqIChtb3N0bHkpIHdpdGggdGhlIHF1b3ByaSBtb2R1bGUuICBJdCBkb2Vzbid0IHJlLWNyZWF0ZSB0aGUgcXVvcHJpCiAgKiBtb2R1bGUgYnVnIHdoZXJlIHRleHQgZW5kaW5nIGluIENSTEYgaGFzIHRoZSBDUiBlbmNvZGVkICovCi1zdGF0aWMgUHlPYmplY3QqCi1iaW5hc2NpaV9iMmFfcXAgKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKKworLypbY2xpbmljIGlucHV0XQorYmluYXNjaWkuYjJhX3FwCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICBxdW90ZXRhYnM6IGludChjX2RlZmF1bHQ9IjAiKSA9IEZhbHNlCisgICAgaXN0ZXh0OiBpbnQoY19kZWZhdWx0PSIxIikgPSBUcnVlCisgICAgaGVhZGVyOiBpbnQoY19kZWZhdWx0PSIwIikgPSBGYWxzZQorCitFbmNvZGUgYSBzdHJpbmcgdXNpbmcgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZy4KKworT24gZW5jb2RpbmcsIHdoZW4gaXN0ZXh0IGlzIHNldCwgbmV3bGluZXMgYXJlIG5vdCBlbmNvZGVkLCBhbmQgd2hpdGUKK3NwYWNlIGF0IGVuZCBvZiBsaW5lcyBpcy4gIFdoZW4gaXN0ZXh0IGlzIG5vdCBzZXQsIFxyIGFuZCBcbiAoQ1IvTEYpCithcmUgYm90aCBlbmNvZGVkLiAgV2hlbiBxdW90ZXRhYnMgaXMgc2V0LCBzcGFjZSBhbmQgdGFicyBhcmUgZW5jb2RlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHF1b3RldGFicywgaW50IGlzdGV4dCwgaW50IGhlYWRlcikKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1mZjI5OTFiYTY0MGZmZjNlIGlucHV0PTdmMmE5YWFhMDA4ZTkyYjJdKi8KIHsKICAgICBQeV9zc2l6ZV90IGluLCBvdXQ7Ci0gICAgUHlfYnVmZmVyIHBkYXRhOwotICAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsICpvZGF0YTsKKyAgICB1bnNpZ25lZCBjaGFyICpkYXRhYnVmLCAqb2RhdGE7CiAgICAgUHlfc3NpemVfdCBkYXRhbGVuID0gMCwgb2RhdGFsZW4gPSAwOwogICAgIFB5T2JqZWN0ICpydjsKICAgICB1bnNpZ25lZCBpbnQgbGluZWxlbiA9IDA7Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJkYXRhIiwgInF1b3RldGFicyIsICJpc3RleHQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaGVhZGVyIiwgTlVMTH07Ci0gICAgaW50IGlzdGV4dCA9IDE7Ci0gICAgaW50IHF1b3RldGFicyA9IDA7Ci0gICAgaW50IGhlYWRlciA9IDA7CiAgICAgdW5zaWduZWQgY2hhciBjaDsKICAgICBpbnQgY3JsZiA9IDA7CiAgICAgdW5zaWduZWQgY2hhciAqcDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfGlpaSIsIGt3bGlzdCwgJnBkYXRhLAotICAgICAgICAgICZxdW90ZXRhYnMsICZpc3RleHQsICZoZWFkZXIpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBkYXRhID0gcGRhdGEuYnVmOwotICAgIGRhdGFsZW4gPSBwZGF0YS5sZW47CisgICAgZGF0YWJ1ZiA9IGRhdGEtPmJ1ZjsKKyAgICBkYXRhbGVuID0gZGF0YS0+bGVuOwogCiAgICAgLyogU2VlIGlmIHRoaXMgc3RyaW5nIGlzIHVzaW5nIENSTEYgbGluZSBlbmRzICovCiAgICAgLyogWFhYOiB0aGlzIGZ1bmN0aW9uIGhhcyB0aGUgc2lkZSBlZmZlY3Qgb2YgY29udmVydGluZyBhbGwgb2YKICAgICAgKiB0aGUgZW5kIG9mIGxpbmVzIHRvIGJlIHRoZSBzYW1lIGRlcGVuZGluZyBvbiB0aGlzIGRldGVjdGlvbgogICAgICAqIGhlcmUgKi8KLSAgICBwID0gKHVuc2lnbmVkIGNoYXIgKikgbWVtY2hyKGRhdGEsICdcbicsIGRhdGFsZW4pOwotICAgIGlmICgocCAhPSBOVUxMKSAmJiAocCA+IGRhdGEpICYmICgqKHAtMSkgPT0gJ1xyJykpCisgICAgcCA9ICh1bnNpZ25lZCBjaGFyICopIG1lbWNocihkYXRhYnVmLCAnXG4nLCBkYXRhbGVuKTsKKyAgICBpZiAoKHAgIT0gTlVMTCkgJiYgKHAgPiBkYXRhYnVmKSAmJiAoKihwLTEpID09ICdccicpKQogICAgICAgICBjcmxmID0gMTsKIAogICAgIC8qIEZpcnN0LCBzY2FuIHRvIHNlZSBob3cgbWFueSBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgZW5jb2RlZCAqLwogICAgIGluID0gMDsKICAgICB3aGlsZSAoaW4gPCBkYXRhbGVuKSB7CiAgICAgICAgIFB5X3NzaXplX3QgZGVsdGEgPSAwOwotICAgICAgICBpZiAoKGRhdGFbaW5dID4gMTI2KSB8fAotICAgICAgICAgICAgKGRhdGFbaW5dID09ICc9JykgfHwKLSAgICAgICAgICAgIChoZWFkZXIgJiYgZGF0YVtpbl0gPT0gJ18nKSB8fAotICAgICAgICAgICAgKChkYXRhW2luXSA9PSAnLicpICYmIChsaW5lbGVuID09IDApICYmCi0gICAgICAgICAgICAgKGRhdGFbaW4rMV0gPT0gJ1xuJyB8fCBkYXRhW2luKzFdID09ICdccicgfHwgZGF0YVtpbisxXSA9PSAwKSkgfHwKLSAgICAgICAgICAgICghaXN0ZXh0ICYmICgoZGF0YVtpbl0gPT0gJ1xyJykgfHwgKGRhdGFbaW5dID09ICdcbicpKSkgfHwKLSAgICAgICAgICAgICgoZGF0YVtpbl0gPT0gJ1x0JyB8fCBkYXRhW2luXSA9PSAnICcpICYmIChpbiArIDEgPT0gZGF0YWxlbikpIHx8Ci0gICAgICAgICAgICAoKGRhdGFbaW5dIDwgMzMpICYmCi0gICAgICAgICAgICAgKGRhdGFbaW5dICE9ICdccicpICYmIChkYXRhW2luXSAhPSAnXG4nKSAmJgotICAgICAgICAgICAgIChxdW90ZXRhYnMgfHwgKChkYXRhW2luXSAhPSAnXHQnKSAmJiAoZGF0YVtpbl0gIT0gJyAnKSkpKSkKKyAgICAgICAgaWYgKChkYXRhYnVmW2luXSA+IDEyNikgfHwKKyAgICAgICAgICAgIChkYXRhYnVmW2luXSA9PSAnPScpIHx8CisgICAgICAgICAgICAoaGVhZGVyICYmIGRhdGFidWZbaW5dID09ICdfJykgfHwKKyAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPT0gJy4nKSAmJiAobGluZWxlbiA9PSAwKSAmJgorICAgICAgICAgICAgIChkYXRhYnVmW2luKzFdID09ICdcbicgfHwgZGF0YWJ1ZltpbisxXSA9PSAnXHInIHx8IGRhdGFidWZbaW4rMV0gPT0gMCkpIHx8CisgICAgICAgICAgICAoIWlzdGV4dCAmJiAoKGRhdGFidWZbaW5dID09ICdccicpIHx8IChkYXRhYnVmW2luXSA9PSAnXG4nKSkpIHx8CisgICAgICAgICAgICAoKGRhdGFidWZbaW5dID09ICdcdCcgfHwgZGF0YWJ1Zltpbl0gPT0gJyAnKSAmJiAoaW4gKyAxID09IGRhdGFsZW4pKSB8fAorICAgICAgICAgICAgKChkYXRhYnVmW2luXSA8IDMzKSAmJgorICAgICAgICAgICAgIChkYXRhYnVmW2luXSAhPSAnXHInKSAmJiAoZGF0YWJ1Zltpbl0gIT0gJ1xuJykgJiYKKyAgICAgICAgICAgICAocXVvdGV0YWJzIHx8ICgoZGF0YWJ1Zltpbl0gIT0gJ1x0JykgJiYgKGRhdGFidWZbaW5dICE9ICcgJykpKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgobGluZWxlbiArIDMpID49IE1BWExJTkVTSVpFKSB7CiAgICAgICAgICAgICAgICAgbGluZWxlbiA9IDA7CkBAIC0xMzkwLDI2ICsxNDMzLDI2IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXN0ZXh0ICYmCi0gICAgICAgICAgICAgICAgKChkYXRhW2luXSA9PSAnXG4nKSB8fAotICAgICAgICAgICAgICAgICAoKGluKzEgPCBkYXRhbGVuKSAmJiAoZGF0YVtpbl0gPT0gJ1xyJykgJiYKLSAgICAgICAgICAgICAgICAgKGRhdGFbaW4rMV0gPT0gJ1xuJykpKSkKKyAgICAgICAgICAgICAgICAoKGRhdGFidWZbaW5dID09ICdcbicpIHx8CisgICAgICAgICAgICAgICAgICgoaW4rMSA8IGRhdGFsZW4pICYmIChkYXRhYnVmW2luXSA9PSAnXHInKSAmJgorICAgICAgICAgICAgICAgICAoZGF0YWJ1ZltpbisxXSA9PSAnXG4nKSkpKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOwogICAgICAgICAgICAgICAgIC8qIFByb3RlY3QgYWdhaW5zdCB3aGl0ZXNwYWNlIG9uIGVuZCBvZiBsaW5lICovCi0gICAgICAgICAgICAgICAgaWYgKGluICYmICgoZGF0YVtpbi0xXSA9PSAnICcpIHx8IChkYXRhW2luLTFdID09ICdcdCcpKSkKKyAgICAgICAgICAgICAgICBpZiAoaW4gJiYgKChkYXRhYnVmW2luLTFdID09ICcgJykgfHwgKGRhdGFidWZbaW4tMV0gPT0gJ1x0JykpKQogICAgICAgICAgICAgICAgICAgICBkZWx0YSArPSAyOwogICAgICAgICAgICAgICAgIGlmIChjcmxmKQogICAgICAgICAgICAgICAgICAgICBkZWx0YSArPSAyOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgZGVsdGEgKz0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YVtpbl0gPT0gJ1xyJykKKyAgICAgICAgICAgICAgICBpZiAoZGF0YWJ1Zltpbl0gPT0gJ1xyJykKICAgICAgICAgICAgICAgICAgICAgaW4gKz0gMjsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGluKys7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoKGluICsgMSAhPSBkYXRhbGVuKSAmJgotICAgICAgICAgICAgICAgICAgICAoZGF0YVtpbisxXSAhPSAnXG4nKSAmJgorICAgICAgICAgICAgICAgICAgICAoZGF0YWJ1ZltpbisxXSAhPSAnXG4nKSAmJgogICAgICAgICAgICAgICAgICAgICAobGluZWxlbiArIDEpID49IE1BWExJTkVTSVpFKSB7CiAgICAgICAgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICBpZiAoY3JsZikKQEAgLTE0MjMsNyArMTQ2Niw2IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKFBZX1NTSVpFX1RfTUFYIC0gZGVsdGEgPCBvZGF0YWxlbikgewotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CkBAIC0xNDM2LDcgKzE0NzgsNiBAQAogICAgICAqLwogICAgIG9kYXRhID0gKHVuc2lnbmVkIGNoYXIgKikgUHlNZW1fTWFsbG9jKG9kYXRhbGVuKTsKICAgICBpZiAob2RhdGEgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE0NDQsMTcgKzE0ODUsMTcgQEAKIAogICAgIGluID0gb3V0ID0gbGluZWxlbiA9IDA7CiAgICAgd2hpbGUgKGluIDwgZGF0YWxlbikgewotICAgICAgICBpZiAoKGRhdGFbaW5dID4gMTI2KSB8fAotICAgICAgICAgICAgKGRhdGFbaW5dID09ICc9JykgfHwKLSAgICAgICAgICAgIChoZWFkZXIgJiYgZGF0YVtpbl0gPT0gJ18nKSB8fAotICAgICAgICAgICAgKChkYXRhW2luXSA9PSAnLicpICYmIChsaW5lbGVuID09IDApICYmCi0gICAgICAgICAgICAgKGRhdGFbaW4rMV0gPT0gJ1xuJyB8fCBkYXRhW2luKzFdID09ICdccicgfHwgZGF0YVtpbisxXSA9PSAwKSkgfHwKLSAgICAgICAgICAgICghaXN0ZXh0ICYmICgoZGF0YVtpbl0gPT0gJ1xyJykgfHwgKGRhdGFbaW5dID09ICdcbicpKSkgfHwKLSAgICAgICAgICAgICgoZGF0YVtpbl0gPT0gJ1x0JyB8fCBkYXRhW2luXSA9PSAnICcpICYmIChpbiArIDEgPT0gZGF0YWxlbikpIHx8Ci0gICAgICAgICAgICAoKGRhdGFbaW5dIDwgMzMpICYmCi0gICAgICAgICAgICAgKGRhdGFbaW5dICE9ICdccicpICYmIChkYXRhW2luXSAhPSAnXG4nKSAmJgorICAgICAgICBpZiAoKGRhdGFidWZbaW5dID4gMTI2KSB8fAorICAgICAgICAgICAgKGRhdGFidWZbaW5dID09ICc9JykgfHwKKyAgICAgICAgICAgIChoZWFkZXIgJiYgZGF0YWJ1Zltpbl0gPT0gJ18nKSB8fAorICAgICAgICAgICAgKChkYXRhYnVmW2luXSA9PSAnLicpICYmIChsaW5lbGVuID09IDApICYmCisgICAgICAgICAgICAgKGRhdGFidWZbaW4rMV0gPT0gJ1xuJyB8fCBkYXRhYnVmW2luKzFdID09ICdccicgfHwgZGF0YWJ1ZltpbisxXSA9PSAwKSkgfHwKKyAgICAgICAgICAgICghaXN0ZXh0ICYmICgoZGF0YWJ1Zltpbl0gPT0gJ1xyJykgfHwgKGRhdGFidWZbaW5dID09ICdcbicpKSkgfHwKKyAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPT0gJ1x0JyB8fCBkYXRhYnVmW2luXSA9PSAnICcpICYmIChpbiArIDEgPT0gZGF0YWxlbikpIHx8CisgICAgICAgICAgICAoKGRhdGFidWZbaW5dIDwgMzMpICYmCisgICAgICAgICAgICAgKGRhdGFidWZbaW5dICE9ICdccicpICYmIChkYXRhYnVmW2luXSAhPSAnXG4nKSAmJgogICAgICAgICAgICAgIChxdW90ZXRhYnMgfHwKLSAgICAgICAgICAgICghcXVvdGV0YWJzICYmICgoZGF0YVtpbl0gIT0gJ1x0JykgJiYgKGRhdGFbaW5dICE9ICcgJykpKSkpKQorICAgICAgICAgICAgKCFxdW90ZXRhYnMgJiYgKChkYXRhYnVmW2luXSAhPSAnXHQnKSAmJiAoZGF0YWJ1Zltpbl0gIT0gJyAnKSkpKSkpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICgobGluZWxlbiArIDMgKT49IE1BWExJTkVTSVpFKSB7CiAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJz0nOwpAQCAtMTQ2MywxNiArMTUwNCwxNiBAQAogICAgICAgICAgICAgICAgIGxpbmVsZW4gPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJz0nOwotICAgICAgICAgICAgdG9faGV4KGRhdGFbaW5dLCAmb2RhdGFbb3V0XSk7CisgICAgICAgICAgICB0b19oZXgoZGF0YWJ1Zltpbl0sICZvZGF0YVtvdXRdKTsKICAgICAgICAgICAgIG91dCArPSAyOwogICAgICAgICAgICAgaW4rKzsKICAgICAgICAgICAgIGxpbmVsZW4gKz0gMzsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChpc3RleHQgJiYKLSAgICAgICAgICAgICAgICAoKGRhdGFbaW5dID09ICdcbicpIHx8Ci0gICAgICAgICAgICAgICAgICgoaW4rMSA8IGRhdGFsZW4pICYmIChkYXRhW2luXSA9PSAnXHInKSAmJgotICAgICAgICAgICAgICAgICAoZGF0YVtpbisxXSA9PSAnXG4nKSkpKQorICAgICAgICAgICAgICAgICgoZGF0YWJ1Zltpbl0gPT0gJ1xuJykgfHwKKyAgICAgICAgICAgICAgICAgKChpbisxIDwgZGF0YWxlbikgJiYgKGRhdGFidWZbaW5dID09ICdccicpICYmCisgICAgICAgICAgICAgICAgIChkYXRhYnVmW2luKzFdID09ICdcbicpKSkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgbGluZWxlbiA9IDA7CiAgICAgICAgICAgICAgICAgLyogUHJvdGVjdCBhZ2FpbnN0IHdoaXRlc3BhY2Ugb24gZW5kIG9mIGxpbmUgKi8KQEAgLTE0ODUsMTQgKzE1MjYsMTQgQEAKIAogICAgICAgICAgICAgICAgIGlmIChjcmxmKSBvZGF0YVtvdXQrK10gPSAnXHInOwogICAgICAgICAgICAgICAgIG9kYXRhW291dCsrXSA9ICdcbic7Ci0gICAgICAgICAgICAgICAgaWYgKGRhdGFbaW5dID09ICdccicpCisgICAgICAgICAgICAgICAgaWYgKGRhdGFidWZbaW5dID09ICdccicpCiAgICAgICAgICAgICAgICAgICAgIGluICs9IDI7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaWYgKChpbiArIDEgIT0gZGF0YWxlbikgJiYKLSAgICAgICAgICAgICAgICAgICAgKGRhdGFbaW4rMV0gIT0gJ1xuJykgJiYKKyAgICAgICAgICAgICAgICAgICAgKGRhdGFidWZbaW4rMV0gIT0gJ1xuJykgJiYKICAgICAgICAgICAgICAgICAgICAgKGxpbmVsZW4gKyAxKSA+PSBNQVhMSU5FU0laRSkgewogICAgICAgICAgICAgICAgICAgICBvZGF0YVtvdXQrK10gPSAnPSc7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjcmxmKSBvZGF0YVtvdXQrK10gPSAnXHInOwpAQCAtMTUwMCwyMiArMTU0MSwyMCBAQAogICAgICAgICAgICAgICAgICAgICBsaW5lbGVuID0gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgbGluZWxlbisrOwotICAgICAgICAgICAgICAgIGlmIChoZWFkZXIgJiYgZGF0YVtpbl0gPT0gJyAnKSB7CisgICAgICAgICAgICAgICAgaWYgKGhlYWRlciAmJiBkYXRhYnVmW2luXSA9PSAnICcpIHsKICAgICAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gJ18nOwogICAgICAgICAgICAgICAgICAgICBpbisrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gZGF0YVtpbisrXTsKKyAgICAgICAgICAgICAgICAgICAgb2RhdGFbb3V0KytdID0gZGF0YWJ1ZltpbisrXTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKChydiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilvZGF0YSwgb3V0KSkgPT0gTlVMTCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgICAgIFB5TWVtX0ZyZWUob2RhdGEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIFB5TWVtX0ZyZWUob2RhdGEpOwogICAgIHJldHVybiBydjsKIH0KQEAgLTE1MjMsMjUgKzE1NjIsMjIgQEAKIC8qIExpc3Qgb2YgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIG1vZHVsZSAqLwogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIGJpbmFzY2lpX21vZHVsZV9tZXRob2RzW10gPSB7Ci0gICAgeyJhMmJfdXUiLCAgICAgYmluYXNjaWlfYTJiX3V1LCAgICAgTUVUSF9WQVJBUkdTLCBkb2NfYTJiX3V1fSwKLSAgICB7ImIyYV91dSIsICAgICBiaW5hc2NpaV9iMmFfdXUsICAgICBNRVRIX1ZBUkFSR1MsIGRvY19iMmFfdXV9LAotICAgIHsiYTJiX2Jhc2U2NCIsIGJpbmFzY2lpX2EyYl9iYXNlNjQsIE1FVEhfVkFSQVJHUywgZG9jX2EyYl9iYXNlNjR9LAotICAgIHsiYjJhX2Jhc2U2NCIsIGJpbmFzY2lpX2IyYV9iYXNlNjQsIE1FVEhfVkFSQVJHUywgZG9jX2IyYV9iYXNlNjR9LAotICAgIHsiYTJiX2hxeCIsICAgIGJpbmFzY2lpX2EyYl9ocXgsICAgIE1FVEhfVkFSQVJHUywgZG9jX2EyYl9ocXh9LAotICAgIHsiYjJhX2hxeCIsICAgIGJpbmFzY2lpX2IyYV9ocXgsICAgIE1FVEhfVkFSQVJHUywgZG9jX2IyYV9ocXh9LAotICAgIHsiYjJhX2hleCIsICAgIGJpbmFzY2lpX2hleGxpZnksICAgIE1FVEhfVkFSQVJHUywgZG9jX2hleGxpZnl9LAotICAgIHsiYTJiX2hleCIsICAgIGJpbmFzY2lpX3VuaGV4bGlmeSwgIE1FVEhfVkFSQVJHUywgZG9jX3VuaGV4bGlmeX0sCi0gICAgeyJoZXhsaWZ5IiwgICAgYmluYXNjaWlfaGV4bGlmeSwgICAgTUVUSF9WQVJBUkdTLCBkb2NfaGV4bGlmeX0sCi0gICAgeyJ1bmhleGxpZnkiLCAgYmluYXNjaWlfdW5oZXhsaWZ5LCAgTUVUSF9WQVJBUkdTLCBkb2NfdW5oZXhsaWZ5fSwKLSAgICB7InJsZWNvZGVfaHF4IiwgICBiaW5hc2NpaV9ybGVjb2RlX2hxeCwgTUVUSF9WQVJBUkdTLCBkb2NfcmxlY29kZV9ocXh9LAotICAgIHsicmxlZGVjb2RlX2hxeCIsIGJpbmFzY2lpX3JsZWRlY29kZV9ocXgsIE1FVEhfVkFSQVJHUywKLSAgICAgZG9jX3JsZWRlY29kZV9ocXh9LAotICAgIHsiY3JjX2hxeCIsICAgIGJpbmFzY2lpX2NyY19ocXgsICAgIE1FVEhfVkFSQVJHUywgZG9jX2NyY19ocXh9LAotICAgIHsiY3JjMzIiLCAgICAgIGJpbmFzY2lpX2NyYzMyLCAgICAgIE1FVEhfVkFSQVJHUywgZG9jX2NyYzMyfSwKLSAgICB7ImEyYl9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfcXAsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICBkb2NfYTJiX3FwfSwKLSAgICB7ImIyYV9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfcXAsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCi0gICAgICBkb2NfYjJhX3FwfSwKKyAgICBCSU5BU0NJSV9BMkJfVVVfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQjJBX1VVX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0EyQl9CQVNFNjRfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQjJBX0JBU0U2NF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9BMkJfSFFYX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0IyQV9IUVhfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQTJCX0hFWF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9CMkFfSEVYX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX0hFWExJRllfTUVUSE9EREVGCisgICAgQklOQVNDSUlfVU5IRVhMSUZZX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX1JMRUNPREVfSFFYX01FVEhPRERFRgorICAgIEJJTkFTQ0lJX1JMRURFQ09ERV9IUVhfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQ1JDX0hRWF9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9DUkMzMl9NRVRIT0RERUYKKyAgICBCSU5BU0NJSV9BMkJfUVBfTUVUSE9EREVGCisgICAgQklOQVNDSUlfQjJBX1FQX01FVEhPRERFRgogICAgIHtOVUxMLCBOVUxMfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfY24uYwppbmRleCA5ZTllOTZjLi4xYTA3MGYyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2NuLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19jbi5jCkBAIC0xNSw3ICsxNSw3IEBACiAjdW5kZWYgaHoKICNlbmRpZgogCi0vKiBHQksgYW5kIEdCMjMxMiBtYXAgZGlmZmVyZW50bHkgaW4gZmV3IGNvZGVwb2ludHMgdGhhdCBhcmUgbGlzdGVkIGJlbG93OgorLyogR0JLIGFuZCBHQjIzMTIgbWFwIGRpZmZlcmVudGx5IGluIGZldyBjb2RlIHBvaW50cyB0aGF0IGFyZSBsaXN0ZWQgYmVsb3c6CiAgKgogICogICAgICAgICAgICAgIGdiMjMxMiAgICAgICAgICAgICAgICAgICAgICAgICAgZ2JrCiAgKiBBMUE0ICAgICAgICAgVSszMEZCIEtBVEFLQU5BIE1JRERMRSBET1QgICAgICBVKzAwQjcgTUlERExFIERPVApAQCAtMjMsMTggKzIzLDMzIEBACiAgKiBBODQ0ICAgICAgICAgdW5kZWZpbmVkICAgICAgICAgICAgICAgICAgICAgICBVKzIwMTUgSE9SSVpPTlRBTCBCQVIKICAqLwogCi0jZGVmaW5lIEdCS19ERUNPREUoZGMxLCBkYzIsIGFzc2kpIFwKLSAgICBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGFhKSAoYXNzaSkgPSAweDIwMTQ7IFwKLSAgICBlbHNlIGlmICgoZGMxKSA9PSAweGE4ICYmIChkYzIpID09IDB4NDQpIChhc3NpKSA9IDB4MjAxNTsgXAotICAgIGVsc2UgaWYgKChkYzEpID09IDB4YTEgJiYgKGRjMikgPT0gMHhhNCkgKGFzc2kpID0gMHgwMGI3OyBcCi0gICAgZWxzZSBUUllNQVBfREVDKGdiMjMxMiwgYXNzaSwgZGMxIF4gMHg4MCwgZGMyIF4gMHg4MCk7IFwKLSAgICBlbHNlIFRSWU1BUF9ERUMoZ2JrZXh0LCBhc3NpLCBkYzEsIGRjMik7CisjZGVmaW5lIEdCS19ERUNPREUoZGMxLCBkYzIsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGRjMSkgPT0gMHhhMSAmJiAoZGMyKSA9PSAweGFhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoZGMxKSA9PSAweGE4ICYmIChkYzIpID09IDB4NDQpIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoZGMxKSA9PSAweGExICYmIChkYzIpID09IDB4YTQpIHsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MDBiNyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGdiMjMxMiwgZGVjb2RlZCwgZGMxIF4gMHg4MCwgZGMyIF4gMHg4MCkpIHsgXAorICAgICAgICBPVVRDSEFSKGRlY29kZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGdia2V4dCwgZGVjb2RlZCwgZGMxLCBkYzIpKSB7ICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGRlY29kZWQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCi0jZGVmaW5lIEdCS19FTkNPREUoY29kZSwgYXNzaSkgXAotICAgIGlmICgoY29kZSkgPT0gMHgyMDE0KSAoYXNzaSkgPSAweGExYWE7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgPT0gMHgyMDE1KSAoYXNzaSkgPSAweGE4NDQ7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgPT0gMHgwMGI3KSAoYXNzaSkgPSAweGExYTQ7IFwKLSAgICBlbHNlIGlmICgoY29kZSkgIT0gMHgzMGZiICYmIFRSWU1BUF9FTkNfQ09ORChnYmNvbW1vbiwgYXNzaSwgY29kZSkpOworI2RlZmluZSBHQktfRU5DT0RFKGNvZGUsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjb2RlKSA9PSAweDIwMTQpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhhMWFhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGNvZGUpID09IDB4MjAxNSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4YTg0NDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjb2RlKSA9PSAweDAwYjcpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweGExYTQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoY29kZSkgIT0gMHgzMGZiICYmIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGFzc2ksIGNvZGUpKSB7IFwKKyAgICAgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogLyoKICAqIEdCMjMxMiBjb2RlYwpAQCAtNDIsMjcgKzU3LDMxIEBACiAKIEVOQ09ERVIoZ2IyMzEyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBSRVFVSVJFX09VVEJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkgLyogTVNCIHNldDogR0JLICovCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC03MiwyMCArOTEsMjEgQEAKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewogICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAqKmluYnVmOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgIFRSWU1BUF9ERUMoZ2IyMzEyLCAqKm91dGJ1ZiwgYyBeIDB4ODAsIElOMiBeIDB4ODApIHsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoZ2IyMzEyLCBkZWNvZGVkLCBjIF4gMHg4MCwgSU5CWVRFMiBeIDB4ODApKSB7CisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTk4LDI4ICsxMTgsMzEgQEAKIAogRU5DT0RFUihnYmspCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgR0JLX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIHJldHVybiAxOwotCi0gICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQotICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSkgLyogTVNCIHNldDogR0JLICovCiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApIC8qIE1TQiB1bnNldDogR0IyMzEyICovCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CisgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQorICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSk7IC8qIE1TQiBzZXQ6IEdCSyAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7IC8qIE1TQiB1bnNldDogR0IyMzEyICovCisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMjgsMjIgKzE1MSwyMiBAQAogREVDT0RFUihnYmspCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKLSAgICAgICAgR0JLX0RFQ09ERShjLCBJTjIsICoqb3V0YnVmKQotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBHQktfREVDT0RFKGMsIElOQllURTIsIHdyaXRlcikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICBORVhUX0lOKDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMTU2LDcyICsxNzksNjMgQEAKIAogRU5DT0RFUihnYjE4MDMwKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMShjKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIERFQ09ERV9TVVJST0dBVEUoYykKLSAgICAgICAgaWYgKGMgPiAweDEwRkZGRikKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotICAgICAgICAgICAgcmV0dXJuIDI7IC8qIHN1cnJvZ2F0ZXMgcGFpciAqLwotI2Vsc2UKLSAgICAgICAgICAgIHJldHVybiAxOwotI2VuZGlmCi0gICAgICAgIGVsc2UgaWYgKGMgPj0gMHgxMDAwMCkgewotICAgICAgICAgICAgdWNzNF90IHRjID0gYyAtIDB4MTAwMDA7CisgICAgICAgIGlmIChjID49IDB4MTAwMDApIHsKKyAgICAgICAgICAgIFB5X1VDUzQgdGMgPSBjIC0gMHgxMDAwMDsKKyAgICAgICAgICAgIGFzc2VydCAoYyA8PSAweDEwRkZGRik7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDQpCisgICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KTsKIAotICAgICAgICAgICAgT1VUNCgodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKQorICAgICAgICAgICAgT1VUQllURTQoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgIE9VVDMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpCisgICAgICAgICAgICBPVVRCWVRFMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSk7CiAgICAgICAgICAgICB0YyAvPSAxMjY7Ci0gICAgICAgICAgICBPVVQyKCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICBPVVRCWVRFMigodW5zaWduZWQgY2hhcikodGMgJSAxMCkgKyAweDMwKTsKICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgT1VUMSgodW5zaWduZWQgY2hhcikodGMgKyAweDkwKSkKKyAgICAgICAgICAgIE9VVEJZVEUxKCh1bnNpZ25lZCBjaGFyKSh0YyArIDB4OTApKTsKIAotI2lmIFB5X1VOSUNPREVfU0laRSA9PSAyCi0gICAgICAgICAgICBORVhUKDIsIDQpIC8qIHN1cnJvZ2F0ZXMgcGFpciAqLwotI2Vsc2UKLSAgICAgICAgICAgIE5FWFQoMSwgNCkKLSNlbmRpZgorICAgICAgICAgICAgTkVYVCgxLCA0KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgR0JLX0VOQ09ERShjLCBjb2RlKQotICAgICAgICBlbHNlIFRSWU1BUF9FTkMoZ2IxODAzMGV4dCwgY29kZSwgYyk7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoZ2IxODAzMGV4dCwgY29kZSwgYykpCisgICAgICAgICAgICA7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgY29uc3Qgc3RydWN0IF9nYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXMgKnV0cnJhbmdlOwogCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRig0KQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoNCk7CiAKICAgICAgICAgICAgIGZvciAodXRycmFuZ2UgPSBnYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXM7CiAgICAgICAgICAgICAgICAgIHV0cnJhbmdlLT5maXJzdCAhPSAwOwogICAgICAgICAgICAgICAgICB1dHJyYW5nZSsrKQogICAgICAgICAgICAgICAgIGlmICh1dHJyYW5nZS0+Zmlyc3QgPD0gYyAmJgogICAgICAgICAgICAgICAgICAgICBjIDw9IHV0cnJhbmdlLT5sYXN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREUgdGM7CisgICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdGM7CiAKICAgICAgICAgICAgICAgICAgICAgdGMgPSBjIC0gdXRycmFuZ2UtPmZpcnN0ICsKICAgICAgICAgICAgICAgICAgICAgICAgICB1dHJyYW5nZS0+YmFzZTsKIAotICAgICAgICAgICAgICAgICAgICBPVVQ0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApCisgICAgICAgICAgICAgICAgICAgIE9VVEJZVEU0KCh1bnNpZ25lZCBjaGFyKSh0YyAlIDEwKSArIDB4MzApOwogICAgICAgICAgICAgICAgICAgICB0YyAvPSAxMDsKLSAgICAgICAgICAgICAgICAgICAgT1VUMygodW5zaWduZWQgY2hhcikodGMgJSAxMjYpICsgMHg4MSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTMoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTI2KSArIDB4ODEpOwogICAgICAgICAgICAgICAgICAgICB0YyAvPSAxMjY7Ci0gICAgICAgICAgICAgICAgICAgIE9VVDIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTIoKHVuc2lnbmVkIGNoYXIpKHRjICUgMTApICsgMHgzMCk7CiAgICAgICAgICAgICAgICAgICAgIHRjIC89IDEwOwotICAgICAgICAgICAgICAgICAgICBPVVQxKCh1bnNpZ25lZCBjaGFyKXRjICsgMHg4MSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQllURTEoKHVuc2lnbmVkIGNoYXIpdGMgKyAweDgxKTsKIAotICAgICAgICAgICAgICAgICAgICBORVhUKDEsIDQpCisgICAgICAgICAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjMwLDEzICsyNDQsMTMgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgT1VUMSgoY29kZSA+PiA4KSB8IDB4ODApCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQotICAgICAgICAgICAgT1VUMigoY29kZSAmIDB4RkYpKSAvKiBNU0Igc2V0OiBHQksgb3IgR0IxODAzMGV4dCAqLworICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSk7IC8qIE1TQiBzZXQ6IEdCSyBvciBHQjE4MDMwZXh0ICovCiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApIC8qIE1TQiB1bnNldDogR0IyMzEyICovCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7IC8qIE1TQiB1bnNldDogR0IyMzEyICovCiAKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjQ1LDYxICsyNTksNjIgQEAKIERFQ09ERVIoZ2IxODAzMCkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjEsIGMyOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTEsIGMyOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIGMyID0gSU4yOworICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgIGlmIChjMiA+PSAweDMwICYmIGMyIDw9IDB4MzkpIHsgLyogNCBieXRlcyBzZXEgKi8KICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBfZ2IxODAzMF90b191bmlibXBfcmFuZ2VzICp1dHI7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMzLCBjNDsKLSAgICAgICAgICAgIHVjczRfdCBsc2VxOworICAgICAgICAgICAgUHlfVUNTNCBsc2VxOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDQpCi0gICAgICAgICAgICBjMyA9IElOMzsKLSAgICAgICAgICAgIGM0ID0gSU40OworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRig0KTsKKyAgICAgICAgICAgIGMzID0gSU5CWVRFMzsKKyAgICAgICAgICAgIGM0ID0gSU5CWVRFNDsKICAgICAgICAgICAgIGlmIChjIDwgMHg4MSB8fCBjMyA8IDB4ODEgfHwgYzQgPCAweDMwIHx8IGM0ID4gMHgzOSkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIGMgLT0gMHg4MTsgIGMyIC09IDB4MzA7CiAgICAgICAgICAgICBjMyAtPSAweDgxOyBjNCAtPSAweDMwOwogCiAgICAgICAgICAgICBpZiAoYyA8IDQpIHsgLyogVSswMDgwIC0gVStGRkZGICovCi0gICAgICAgICAgICAgICAgbHNlcSA9ICgodWNzNF90KWMgKiAxMCArIGMyKSAqIDEyNjAgKwotICAgICAgICAgICAgICAgICAgICAodWNzNF90KWMzICogMTAgKyBjNDsKKyAgICAgICAgICAgICAgICBsc2VxID0gKChQeV9VQ1M0KWMgKiAxMCArIGMyKSAqIDEyNjAgKworICAgICAgICAgICAgICAgICAgICAoUHlfVUNTNCljMyAqIDEwICsgYzQ7CiAgICAgICAgICAgICAgICAgaWYgKGxzZXEgPCAzOTQyMCkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKHV0ciA9IGdiMTgwMzBfdG9fdW5pYm1wX3JhbmdlczsKICAgICAgICAgICAgICAgICAgICAgICAgICBsc2VxID49ICh1dHIgKyAxKS0+YmFzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICB1dHIrKykgOwotICAgICAgICAgICAgICAgICAgICBPVVQxKHV0ci0+Zmlyc3QgLSB1dHItPmJhc2UgKyBsc2VxKQotICAgICAgICAgICAgICAgICAgICBORVhUKDQsIDEpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIodXRyLT5maXJzdCAtIHV0ci0+YmFzZSArIGxzZXEpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDQpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChjID49IDE1KSB7IC8qIFUrMTAwMDAgLSBVKzEwRkZGRiAqLwotICAgICAgICAgICAgICAgIGxzZXEgPSAweDEwMDAwICsgKCgodWNzNF90KWMtMTUpICogMTAgKyBjMikKLSAgICAgICAgICAgICAgICAgICAgKiAxMjYwICsgKHVjczRfdCljMyAqIDEwICsgYzQ7CisgICAgICAgICAgICAgICAgbHNlcSA9IDB4MTAwMDAgKyAoKChQeV9VQ1M0KWMtMTUpICogMTAgKyBjMikKKyAgICAgICAgICAgICAgICAgICAgKiAxMjYwICsgKFB5X1VDUzQpYzMgKiAxMCArIGM0OwogICAgICAgICAgICAgICAgIGlmIChsc2VxIDw9IDB4MTBGRkZGKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChsc2VxKTsKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9JTig0KQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGxzZXEpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDQpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogCi0gICAgICAgIEdCS19ERUNPREUoYywgYzIsICoqb3V0YnVmKQotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoZ2IxODAzMGV4dCwgKipvdXRidWYsIGMsIGMyKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgR0JLX0RFQ09ERShjLCBjMiwgd3JpdGVyKQorICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGdiMTgwMzBleHQsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTMxOSw0OCArMzM0LDUxIEBACiBFTkNPREVSX1JFU0VUKGh6KQogewogICAgIGlmIChzdGF0ZS0+aSAhPSAwKSB7Ci0gICAgICAgIFdSSVRFMignficsICd9JykKKyAgICAgICAgV1JJVEVCWVRFMignficsICd9Jyk7CiAgICAgICAgIHN0YXRlLT5pID0gMDsKLSAgICAgICAgTkVYVF9PVVQoMikKKyAgICAgICAgTkVYVF9PVVQoMik7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCiBFTkNPREVSKGh6KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPmkgPT0gMCkgewotICAgICAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBXUklURTMoJ34nLCAnfScsICh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICAgICAgTkVYVCgxLCAzKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTMoJ34nLCAnfScsICh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMyk7CiAgICAgICAgICAgICAgICAgc3RhdGUtPmkgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBVQ1M0SU5WQUxJRChjKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIFRSWU1BUF9FTkMoZ2Jjb21tb24sIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSAvKiBNU0Igc2V0OiBHQksgKi8KICAgICAgICAgICAgIHJldHVybiAxOwogCiAgICAgICAgIGlmIChzdGF0ZS0+aSA9PSAwKSB7Ci0gICAgICAgICAgICBXUklURTQoJ34nLCAneycsIGNvZGUgPj4gOCwgY29kZSAmIDB4ZmYpCi0gICAgICAgICAgICBORVhUKDEsIDQpCisgICAgICAgICAgICBXUklURUJZVEU0KCd+JywgJ3snLCBjb2RlID4+IDgsIGNvZGUgJiAweGZmKTsKKyAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgICAgICBzdGF0ZS0+aSA9IDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBXUklURTIoY29kZSA+PiA4LCBjb2RlICYgMHhmZikKLSAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIFdSSVRFQllURTIoY29kZSA+PiA4LCBjb2RlICYgMHhmZik7CisgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zODIsMTUgKzQwMCwxNiBAQAogREVDT0RFUihoeikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA9PSAnficpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzIgPSBJTjI7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyID0gSU5CWVRFMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKICAgICAgICAgICAgIGlmIChjMiA9PSAnficpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoJ34nKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKCd+Jyk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKGMyID09ICd7JyAmJiBzdGF0ZS0+aSA9PSAwKQpAQCAtNDAxLDcgKzQyMCw3IEBACiAgICAgICAgICAgICAgICAgOyAvKiBsaW5lLWNvbnRpbnVhdGlvbiAqLwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgyLCAwKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00MDksMTQgKzQyOCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKHN0YXRlLT5pID09IDApIHsgLyogQVNDSUkgbW9kZSAqLwotICAgICAgICAgICAgV1JJVEUxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsgLyogR0IgbW9kZSAqLwotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoZ2IyMzEyLCAqKm91dGJ1ZiwgYywgSU4yKSB7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGdiMjMxMiwgZGVjb2RlZCwgYywgSU5CWVRFMikpIHsKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2hrLmMKaW5kZXggZDNhZDA0Yi4uNGYyMTU2OSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19oay5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaGsuYwpAQCAtMzgsMzUgKzM4LDM5IEBACiAKIEVOQ09ERVIoYmlnNWhrc2NzKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gKippbmJ1ZjsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpOwogICAgICAgICAgICAgKipvdXRidWYgPSAodW5zaWduZWQgY2hhciljOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgREVDT0RFX1NVUlJPR0FURShjKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCisgICAgICAgIGluc2l6ZSA9IDE7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIGlmIChjIDwgMHgxMDAwMCkgewotICAgICAgICAgICAgVFJZTUFQX0VOQyhiaWc1aGtzY3NfYm1wLCBjb2RlLCBjKSB7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0VOQyhiaWc1aGtzY3NfYm1wLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgIGlmIChjb2RlID09IE1VTFRJQykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0ID49IDIgJiYKKyAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zID49IDIpCisgICAgICAgICAgICAgICAgICAgICAgICBjMiA9IElOQ0hBUjI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gMDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPj0gMiAmJgogICAgICAgICAgICAgICAgICAgICAgICAgKChjICYgMHhmZmRmKSA9PSAweDAwY2EpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAoKCgqaW5idWYpWzFdICYgMHhmZmY3KSA9PSAweDAzMDQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAoKGMyICYgMHhmZmY3KSA9PSAweDAzMDQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gYmlnNWhrc2NzX3BhaXJlbmNfdGFibGVbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChjID4+IDQpIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgqaW5idWYpWzFdID4+IDMpKSAmIDNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYzIgPj4gMykpICYgM107CiAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpemUgPSAyOwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlubGVmdCA8IDIgJiYKKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyICYmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoZmxhZ3MgJiBNQkVOQ19GTFVTSCkpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKQEAgLTc3LDIxICs4MSwyNSBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYykpCisgICAgICAgICAgICAgICAgOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPCAweDIwMDAwKQogICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgZWxzZSBpZiAoYyA8IDB4MzAwMDApIHsKLSAgICAgICAgICAgIFRSWU1BUF9FTkMoYmlnNWhrc2NzX25vbmJtcCwgY29kZSwgYyAmIDB4ZmZmZik7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiBpbnNpemU7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0VOQyhiaWc1aGtzY3Nfbm9uYm1wLCBjb2RlLCBjICYgMHhmZmZmKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweEZGKQotICAgICAgICBORVhUKGluc2l6ZSwgMikKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOworICAgICAgICBORVhUKGluc2l6ZSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xMDIsMzMgKzExMCwzMiBAQAogREVDT0RFUihiaWc1aGtzY3MpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotICAgICAgICB1Y3M0X3QgZGVjb2RlZDsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQorICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogCi0gICAgICAgIGlmICgweGM2ID4gYyB8fCBjID4gMHhjOCB8fCAoYyA8IDB4YzcgJiYgSU4yIDwgMHhhMSkpIHsKLSAgICAgICAgICAgIFRSWU1BUF9ERUMoYmlnNSwgKipvdXRidWYsIGMsIElOMikgewotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgaWYgKDB4YzYgPiBjIHx8IGMgPiAweGM4IHx8IChjIDwgMHhjNyAmJiBJTkJZVEUyIDwgMHhhMSkpIHsKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGJpZzUsIGRlY29kZWQsIGMsIElOQllURTIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgVFJZTUFQX0RFQyhiaWc1aGtzY3MsIGRlY29kZWQsIGMsIElOMikKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoYmlnNWhrc2NzLCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHMgPSBCSDJTKGMsIElOMik7CisgICAgICAgICAgICBpbnQgcyA9IEJIMlMoYywgSU5CWVRFMik7CiAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpoaW50YmFzZTsKIAogICAgICAgICAgICAgYXNzZXJ0KDB4ODcgPD0gYyAmJiBjIDw9IDB4ZmUpOwotICAgICAgICAgICAgYXNzZXJ0KDB4NDAgPD0gSU4yICYmIElOMiA8PSAweGZlKTsKKyAgICAgICAgICAgIGFzc2VydCgweDQwIDw9IElOQllURTIgJiYgSU5CWVRFMiA8PSAweGZlKTsKIAogICAgICAgICAgICAgaWYgKEJIMlMoMHg4NywgMHg0MCkgPD0gcyAmJiBzIDw9IEJIMlMoMHhhMCwgMHhmZSkpIHsKICAgICAgICAgICAgICAgICAgICAgaGludGJhc2UgPSBiaWc1aGtzY3NfcGhpbnRfMDsKQEAgLTE0NiwyNSArMTUzLDI1IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9JTlRFUk5BTDsKIAogICAgICAgICAgICAgaWYgKGhpbnRiYXNlW3MgPj4gM10gJiAoMSA8PCAocyAmIDcpKSkgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoZGVjb2RlZCB8IDB4MjAwMDApCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkIHwgMHgyMDAwMCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgT1VUMShkZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIHN3aXRjaCAoKGMgPDwgOCkgfCBJTjIpIHsKLSAgICAgICAgY2FzZSAweDg4NjI6IFdSSVRFMigweDAwY2EsIDB4MDMwNCk7IGJyZWFrOwotICAgICAgICBjYXNlIDB4ODg2NDogV1JJVEUyKDB4MDBjYSwgMHgwMzBjKTsgYnJlYWs7Ci0gICAgICAgIGNhc2UgMHg4OGEzOiBXUklURTIoMHgwMGVhLCAweDAzMDQpOyBicmVhazsKLSAgICAgICAgY2FzZSAweDg4YTU6IFdSSVRFMigweDAwZWEsIDB4MDMwYyk7IGJyZWFrOworICAgICAgICBzd2l0Y2ggKChjIDw8IDgpIHwgSU5CWVRFMikgeworICAgICAgICBjYXNlIDB4ODg2MjogT1VUQ0hBUjIoMHgwMGNhLCAweDAzMDQpOyBicmVhazsKKyAgICAgICAgY2FzZSAweDg4NjQ6IE9VVENIQVIyKDB4MDBjYSwgMHgwMzBjKTsgYnJlYWs7CisgICAgICAgIGNhc2UgMHg4OGEzOiBPVVRDSEFSMigweDAwZWEsIDB4MDMwNCk7IGJyZWFrOworICAgICAgICBjYXNlIDB4ODhhNTogT1VUQ0hBUjIoMHgwMGVhLCAweDAzMGMpOyBicmVhazsKICAgICAgICAgZGVmYXVsdDogcmV0dXJuIDE7CiAgICAgICAgIH0KIAotICAgICAgICBORVhUKDIsIDIpIC8qIGFsbCBkZWNvZGVkIGNvZGVwb2ludHMgYXJlIHBhaXJzLCBhYm92ZS4gKi8KKyAgICAgICAgTkVYVF9JTigyKTsgLyogYWxsIGRlY29kZWQgY29kZSBwb2ludHMgYXJlIHBhaXJzLCBhYm92ZS4gKi8KICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfaXNvMjAyMi5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKaW5kZXggY2JjMTU0Mi4uNWM0MDFhYSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19pc28yMDIyLmMKQEAgLTczLDcgKzczLDcgQEAKICNkZWZpbmUgRl9TSElGVEVEICAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSBGX0VTQ1RIUk9VR0hPVVQgICAgICAgICAweDAyCiAKLSNkZWZpbmUgU1RBVEVfU0VURyhkbiwgdikgICAgICAgKChzdGF0ZSktPmNbZG5dKSA9ICh2KTsKKyNkZWZpbmUgU1RBVEVfU0VURyhkbiwgdikgICAgICAgZG8geyAoKHN0YXRlKS0+Y1tkbl0pID0gKHYpOyB9IHdoaWxlICgwKQogI2RlZmluZSBTVEFURV9HRVRHKGRuKSAgICAgICAgICAoKHN0YXRlKS0+Y1tkbl0pCiAKICNkZWZpbmUgU1RBVEVfRzAgICAgICAgICAgICAgICAgU1RBVEVfR0VURygwKQpAQCAtODUsMTAgKzg1LDEwIEBACiAjZGVmaW5lIFNUQVRFX1NFVEcyKHYpICAgICAgICAgIFNUQVRFX1NFVEcoMiwgdikKICNkZWZpbmUgU1RBVEVfU0VURzModikgICAgICAgICAgU1RBVEVfU0VURygzLCB2KQogCi0jZGVmaW5lIFNUQVRFX1NFVEZMQUcoZikgICAgICAgICgoc3RhdGUpLT5jWzRdKSB8PSAoZik7CisjZGVmaW5lIFNUQVRFX1NFVEZMQUcoZikgICAgICAgIGRvIHsgKChzdGF0ZSktPmNbNF0pIHw9IChmKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgU1RBVEVfR0VURkxBRyhmKSAgICAgICAgKChzdGF0ZSktPmNbNF0gJiAoZikpCi0jZGVmaW5lIFNUQVRFX0NMRUFSRkxBRyhmKSAgICAgICgoc3RhdGUpLT5jWzRdKSAmPSB+KGYpOwotI2RlZmluZSBTVEFURV9DTEVBUkZMQUdTKCkgICAgICAoKHN0YXRlKS0+Y1s0XSkgPSAwOworI2RlZmluZSBTVEFURV9DTEVBUkZMQUcoZikgICAgICBkbyB7ICgoc3RhdGUpLT5jWzRdKSAmPSB+KGYpOyB9IHdoaWxlICgwKQorI2RlZmluZSBTVEFURV9DTEVBUkZMQUdTKCkgICAgICBkbyB7ICgoc3RhdGUpLT5jWzRdKSA9IDA7IH0gd2hpbGUgKDApCiAKICNkZWZpbmUgSVNPMjAyMl9DT05GSUcgICAgICAgICAgKChjb25zdCBzdHJ1Y3QgaXNvMjAyMl9jb25maWcgKiljb25maWcpCiAjZGVmaW5lIENPTkZJR19JU1NFVChmbGFnKSAgICAgIChJU08yMDIyX0NPTkZJRy0+ZmxhZ3MgJiAoZmxhZykpCkBAIC0xMDIsOCArMTAyLDggQEAKIC8qLSotIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyAtKi0qLwogCiB0eXBlZGVmIGludCAoKmlzbzIwMjJfaW5pdF9mdW5jKSh2b2lkKTsKLXR5cGVkZWYgdWNzNF90ICgqaXNvMjAyMl9kZWNvZGVfZnVuYykoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7Ci10eXBlZGVmIERCQ0hBUiAoKmlzbzIwMjJfZW5jb2RlX2Z1bmMpKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKTsKK3R5cGVkZWYgUHlfVUNTNCAoKmlzbzIwMjJfZGVjb2RlX2Z1bmMpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOwordHlwZWRlZiBEQkNIQVIgKCppc28yMDIyX2VuY29kZV9mdW5jKShjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpOwogCiBzdHJ1Y3QgaXNvMjAyMl9kZXNpZ25hdGlvbiB7CiAgICAgdW5zaWduZWQgY2hhciBtYXJrOwpAQCAtMTMyLDUzICsxMzIsNTIgQEAKIAogRU5DT0RFUl9JTklUKGlzbzIwMjIpCiB7Ci0gICAgU1RBVEVfQ0xFQVJGTEFHUygpCi0gICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKLSAgICBTVEFURV9TRVRHMShDSEFSU0VUX0FTQ0lJKQorICAgIFNUQVRFX0NMRUFSRkxBR1MoKTsKKyAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKKyAgICBTVEFURV9TRVRHMShDSEFSU0VUX0FTQ0lJKTsKICAgICByZXR1cm4gMDsKIH0KIAogRU5DT0RFUl9SRVNFVChpc28yMDIyKQogewogICAgIGlmIChTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpIHsKLSAgICAgICAgV1JJVEUxKFNJKQotICAgICAgICBORVhUX09VVCgxKQotICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQorICAgICAgICBXUklURUJZVEUxKFNJKTsKKyAgICAgICAgTkVYVF9PVVQoMSk7CisgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOwogICAgIH0KICAgICBpZiAoU1RBVEVfRzAgIT0gQ0hBUlNFVF9BU0NJSSkgewotICAgICAgICBXUklURTMoRVNDLCAnKCcsICdCJykKLSAgICAgICAgTkVYVF9PVVQoMykKLSAgICAgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSkKKyAgICAgICAgV1JJVEVCWVRFMyhFU0MsICcoJywgJ0InKTsKKyAgICAgICAgTkVYVF9PVVQoMyk7CisgICAgICAgIFNUQVRFX1NFVEcwKENIQVJTRVRfQVNDSUkpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogRU5DT0RFUihpc28yMDIyKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2c7CiAgICAgICAgIERCQ0hBUiBlbmNvZGVkOwotICAgICAgICB1Y3M0X3QgYyA9ICoqaW5idWY7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewogICAgICAgICAgICAgaWYgKFNUQVRFX0cwICE9IENIQVJTRVRfQVNDSUkpIHsKLSAgICAgICAgICAgICAgICBXUklURTMoRVNDLCAnKCcsICdCJykKLSAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQotICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMyhFU0MsICcoJywgJ0InKTsKKyAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoU0kpCi0gICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgICAgICBORVhUX09VVCgxKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTEoU0kpOworICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgREVDT0RFX1NVUlJPR0FURShjKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOworICAgICAgICBpbnNpemUgPSAxOwogCiAgICAgICAgIGVuY29kZWQgPSBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgZm9yIChkc2cgPSBDT05GSUdfREVTSUdOQVRJT05TOyBkc2ctPm1hcms7IGRzZysrKSB7CkBAIC0xODcsMjQgKzE4NiwxNCBAQAogICAgICAgICAgICAgaWYgKGVuY29kZWQgPT0gTUFQX01VTFRJUExFX0FWQUlMKSB7CiAgICAgICAgICAgICAgICAgLyogdGhpcyBpbXBsZW1lbnRhdGlvbiB3b24ndCB3b3JrIGZvciBwYWlyCiAgICAgICAgICAgICAgICAgICogb2Ygbm9uLWJtcCBjaGFyYWN0ZXJzLiAqLwotICAgICAgICAgICAgICAgIGlmIChpbmxlZnQgPCAyKSB7CisgICAgICAgICAgICAgICAgaWYgKGlubGVuIC0gKmlucG9zIDwgMikgewogICAgICAgICAgICAgICAgICAgICBpZiAoIShmbGFncyAmIE1CRU5DX0ZMVVNIKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IC0xOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCA9IDI7Ci0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDIKLSAgICAgICAgICAgICAgICBpZiAobGVuZ3RoID09IDIpIHsKLSAgICAgICAgICAgICAgICAgICAgdWNzNF90IHU0aW5bMl07Ci0gICAgICAgICAgICAgICAgICAgIHU0aW5bMF0gPSAodWNzNF90KUlOMTsKLSAgICAgICAgICAgICAgICAgICAgdTRpblsxXSA9ICh1Y3M0X3QpSU4yOwotICAgICAgICAgICAgICAgICAgICBlbmNvZGVkID0gZHNnLT5lbmNvZGVyKHU0aW4sICZsZW5ndGgpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBlbmNvZGVkID0gZHNnLT5lbmNvZGVyKCZjLCAmbGVuZ3RoKTsKLSNlbHNlCiAgICAgICAgICAgICAgICAgZW5jb2RlZCA9IGRzZy0+ZW5jb2RlcigmYywgJmxlbmd0aCk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBpZiAoZW5jb2RlZCAhPSBNQVBfVU5NQVBQQUJMRSkgewogICAgICAgICAgICAgICAgICAgICBpbnNpemUgPSBsZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjIxLDQ3ICsyMTAsNDYgQEAKICAgICAgICAgc3dpdGNoIChkc2ctPnBsYW5lKSB7CiAgICAgICAgIGNhc2UgMDogLyogRzAgKi8KICAgICAgICAgICAgIGlmIChTVEFURV9HRVRGTEFHKEZfU0hJRlRFRCkpIHsKLSAgICAgICAgICAgICAgICBXUklURTEoU0kpCi0gICAgICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgICAgICBORVhUX09VVCgxKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTEoU0kpOworICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpOworICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKFNUQVRFX0cwICE9IGRzZy0+bWFyaykgewogICAgICAgICAgICAgICAgIGlmIChkc2ctPndpZHRoID09IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEUzKEVTQywgJygnLCBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMykKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFMyhFU0MsICcoJywgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRzZy0+bWFyayA9PSBDSEFSU0VUX0pJU1gwMjA4KSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMyhFU0MsICckJywgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMChkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnJCcsIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEU0KEVTQywgJyQnLCAnKCcsCi0gICAgICAgICAgICAgICAgICAgICAgICBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcwKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoNCkKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFNChFU0MsICckJywgJygnLAorICAgICAgICAgICAgICAgICAgICAgICAgRVNDTUFSSyhkc2ctPm1hcmspKTsKKyAgICAgICAgICAgICAgICAgICAgU1RBVEVfU0VURzAoZHNnLT5tYXJrKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoNCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMTogLyogRzEgKi8KICAgICAgICAgICAgIGlmIChTVEFURV9HMSAhPSBkc2ctPm1hcmspIHsKICAgICAgICAgICAgICAgICBpZiAoZHNnLT53aWR0aCA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFMyhFU0MsICcpJywgRVNDTUFSSyhkc2ctPm1hcmspKQotICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpCisgICAgICAgICAgICAgICAgICAgIFdSSVRFQllURTMoRVNDLCAnKScsIEVTQ01BUksoZHNnLT5tYXJrKSk7CisgICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcxKGRzZy0+bWFyayk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDMpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEU0KEVTQywgJyQnLCAnKScsCi0gICAgICAgICAgICAgICAgICAgICAgICBFU0NNQVJLKGRzZy0+bWFyaykpCi0gICAgICAgICAgICAgICAgICAgIFNUQVRFX1NFVEcxKGRzZy0+bWFyaykKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoNCkKKyAgICAgICAgICAgICAgICAgICAgV1JJVEVCWVRFNChFU0MsICckJywgJyknLCBFU0NNQVJLKGRzZy0+bWFyaykpOworICAgICAgICAgICAgICAgICAgICBTVEFURV9TRVRHMShkc2ctPm1hcmspOworICAgICAgICAgICAgICAgICAgICBORVhUX09VVCg0KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIVNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkgewotICAgICAgICAgICAgICAgIFdSSVRFMShTTykKLSAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfU0hJRlRFRCkKLSAgICAgICAgICAgICAgICBORVhUX09VVCgxKQorICAgICAgICAgICAgICAgIFdSSVRFQllURTEoU08pOworICAgICAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgICAgICBORVhUX09VVCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OiAvKiBHMiBhbmQgRzMgaXMgbm90IHN1cHBvcnRlZDogbm8gZW5jb2RpbmcgaW4KQEAgLTI3MCwxNCArMjU4LDE0IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZHNnLT53aWR0aCA9PSAxKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpZW5jb2RlZCkKLSAgICAgICAgICAgIE5FWFRfT1VUKDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWVuY29kZWQpOworICAgICAgICAgICAgTkVYVF9PVVQoMSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBXUklURTIoZW5jb2RlZCA+PiA4LCBlbmNvZGVkICYgMHhmZikKLSAgICAgICAgICAgIE5FWFRfT1VUKDIpCisgICAgICAgICAgICBXUklURUJZVEUyKGVuY29kZWQgPj4gOCwgZW5jb2RlZCAmIDB4ZmYpOworICAgICAgICAgICAgTkVYVF9PVVQoMik7CiAgICAgICAgIH0KLSAgICAgICAgTkVYVF9JTihpbnNpemUpCisgICAgICAgIE5FWFRfSU5DSEFSKGluc2l6ZSk7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0yODUsMTcgKzI3MywxNyBAQAogCiBERUNPREVSX0lOSVQoaXNvMjAyMikKIHsKLSAgICBTVEFURV9DTEVBUkZMQUdTKCkKLSAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQotICAgIFNUQVRFX1NFVEcxKENIQVJTRVRfQVNDSUkpCi0gICAgU1RBVEVfU0VURzIoQ0hBUlNFVF9BU0NJSSkKKyAgICBTVEFURV9DTEVBUkZMQUdTKCk7CisgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgU1RBVEVfU0VURzEoQ0hBUlNFVF9BU0NJSSk7CisgICAgU1RBVEVfU0VURzIoQ0hBUlNFVF9BU0NJSSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKIERFQ09ERVJfUkVTRVQoaXNvMjAyMikKIHsKLSAgICBTVEFURV9TRVRHMChDSEFSU0VUX0FTQ0lJKQotICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCisgICAgU1RBVEVfU0VURzAoQ0hBUlNFVF9BU0NJSSk7CisgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTMxNCw4ICszMDIsOSBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9KSVNYMDIwOF9FWFQpICYmIGkrMSA8ICppbmxlZnQgJiYKLSAgICAgICAgICAgICAgICAgKCppbmJ1ZilbaV0gPT0gJyYnICYmICgqaW5idWYpW2krMV0gPT0gJ0AnKQorICAgICAgICAgICAgICAgICAoKmluYnVmKVtpXSA9PSAnJicgJiYgKCppbmJ1ZilbaSsxXSA9PSAnQCcpIHsKICAgICAgICAgICAgIGkgKz0gMjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChpID49IE1BWF9FU0NTRVFMRU4pCkBAIC0zMjMsMjcgKzMxMiwzMyBAQAogCiAgICAgc3dpdGNoIChlc2NsZW4pIHsKICAgICBjYXNlIDM6Ci0gICAgICAgIGlmIChJTjIgPT0gJyQnKSB7Ci0gICAgICAgICAgICBjaGFyc2V0ID0gSU4zIHwgQ0hBUlNFVF9EQkNTOworICAgICAgICBpZiAoSU5CWVRFMiA9PSAnJCcpIHsKKyAgICAgICAgICAgIGNoYXJzZXQgPSBJTkJZVEUzIHwgQ0hBUlNFVF9EQkNTOwogICAgICAgICAgICAgZGVzaWduYXRpb24gPSAwOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgY2hhcnNldCA9IElOMzsKLSAgICAgICAgICAgIGlmIChJTjIgPT0gJygnKSBkZXNpZ25hdGlvbiA9IDA7Ci0gICAgICAgICAgICBlbHNlIGlmIChJTjIgPT0gJyknKSBkZXNpZ25hdGlvbiA9IDE7Ci0gICAgICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0cyKSAmJiBJTjIgPT0gJy4nKQorICAgICAgICAgICAgY2hhcnNldCA9IElOQllURTM7CisgICAgICAgICAgICBpZiAoSU5CWVRFMiA9PSAnKCcpCisgICAgICAgICAgICAgICAgZGVzaWduYXRpb24gPSAwOworICAgICAgICAgICAgZWxzZSBpZiAoSU5CWVRFMiA9PSAnKScpCisgICAgICAgICAgICAgICAgZGVzaWduYXRpb24gPSAxOworICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU5CWVRFMiA9PSAnLicpCiAgICAgICAgICAgICAgICAgZGVzaWduYXRpb24gPSAyOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMzsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIDQ6Ci0gICAgICAgIGlmIChJTjIgIT0gJyQnKQorICAgICAgICBpZiAoSU5CWVRFMiAhPSAnJCcpCiAgICAgICAgICAgICByZXR1cm4gNDsKIAotICAgICAgICBjaGFyc2V0ID0gSU40IHwgQ0hBUlNFVF9EQkNTOwotICAgICAgICBpZiAoSU4zID09ICcoJykgZGVzaWduYXRpb24gPSAwOwotICAgICAgICBlbHNlIGlmIChJTjMgPT0gJyknKSBkZXNpZ25hdGlvbiA9IDE7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDQ7CisgICAgICAgIGNoYXJzZXQgPSBJTkJZVEU0IHwgQ0hBUlNFVF9EQkNTOworICAgICAgICBpZiAoSU5CWVRFMyA9PSAnKCcpCisgICAgICAgICAgICBkZXNpZ25hdGlvbiA9IDA7CisgICAgICAgIGVsc2UgaWYgKElOQllURTMgPT0gJyknKQorICAgICAgICAgICAgZGVzaWduYXRpb24gPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gNDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA2OiAvKiBkZXNpZ25hdGlvbiB3aXRoIHByZWZpeCAqLwogICAgICAgICBpZiAoQ09ORklHX0lTU0VUKFVTRV9KSVNYMDIwOF9FWFQpICYmCkBAIC0zNjMsNTggKzM1OCw2NSBAQAogICAgIGlmIChjaGFyc2V0ICE9IENIQVJTRVRfQVNDSUkpIHsKICAgICAgICAgY29uc3Qgc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gKmRzZzsKIAotICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7IGRzZy0+bWFyazsgZHNnKyspCisgICAgICAgIGZvciAoZHNnID0gQ09ORklHX0RFU0lHTkFUSU9OUzsgZHNnLT5tYXJrOyBkc2crKykgewogICAgICAgICAgICAgaWYgKGRzZy0+bWFyayA9PSBjaGFyc2V0KQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGlmICghZHNnLT5tYXJrKQogICAgICAgICAgICAgcmV0dXJuIGVzY2xlbjsKICAgICB9CiAKLSAgICBTVEFURV9TRVRHKGRlc2lnbmF0aW9uLCBjaGFyc2V0KQorICAgIFNUQVRFX1NFVEcoZGVzaWduYXRpb24sIGNoYXJzZXQpOwogICAgICppbmxlZnQgLT0gZXNjbGVuOwogICAgICgqaW5idWYpICs9IGVzY2xlbjsKICAgICByZXR1cm4gMDsKIH0KIAotI2RlZmluZSBJU084ODU5XzdfREVDT0RFKGMsIGFzc2kpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPCAweGEwKSAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA8IDB4YzAgJiYgKDB4Mjg4ZjNiYzlMICYgKDFMIDw8ICgoYyktMHhhMCkpKSkgICAgICAgICAgXAotICAgICAgICAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA+PSAweGI0ICYmIChjKSA8PSAweGZlICYmICgoYykgPj0gMHhkNCB8fCAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICgweGJmZmZmZDc3TCAmICgxTCA8PCAoKGMpLTB4YjQpKSkpKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoYXNzaSkgPSAweDAyZDAgKyAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweGExKSAoYXNzaSkgPSAweDIwMTg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweGEyKSAoYXNzaSkgPSAweDIwMTk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweGFmKSAoYXNzaSkgPSAweDIwMTU7CisjZGVmaW5lIElTTzg4NTlfN19ERUNPREUoYywgd3JpdGVyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgoYykgPCAweGEwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUihjKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPCAweGMwICYmICgweDI4OGYzYmM5TCAmICgxTCA8PCAoKGMpLTB4YTApKSkpIHsgXAorICAgICAgICBPVVRDSEFSKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA+PSAweGI0ICYmIChjKSA8PSAweGZlICYmICgoYykgPj0gMHhkNCB8fCAgICAgICBcCisgICAgICAgICAgICAgKDB4YmZmZmZkNzdMICYgKDFMIDw8ICgoYyktMHhiNCkpKSkpIHsgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MDJkMCArIChjKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVsc2UgaWYgKChjKSA9PSAweGExKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9VVENIQVIoMHgyMDE4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoKGMpID09IDB4YTIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDIwMTkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmICgoYykgPT0gMHhhZikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAxNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CiBpc28yMDIycHJvY2Vzc2cyKGNvbnN0IHZvaWQgKmNvbmZpZywgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5idWYsIFB5X3NzaXplX3QgKmlubGVmdCwKLSAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCAqb3V0bGVmdCkKKyAgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewogICAgIC8qIG5vdCB3cml0dGVuIHRvIHVzZSBlbmNvZGVyLCBkZWNvZGVyIGZ1bmN0aW9ucyBiZWNhdXNlIG9ubHkgZmV3CiAgICAgICogZW5jb2RpbmdzIHVzZSBHMiBkZXNpZ25hdGlvbnMgaW4gQ0pLQ29kZWNzICovCiAgICAgaWYgKFNUQVRFX0cyID09IENIQVJTRVRfSVNPODg1OV8xKSB7Ci0gICAgICAgIGlmIChJTjMgPCAweDgwKQotICAgICAgICAgICAgT1VUMShJTjMgKyAweDgwKQorICAgICAgICBpZiAoSU5CWVRFMyA8IDB4ODApCisgICAgICAgICAgICBPVVRDSEFSKElOQllURTMgKyAweDgwKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgfQogICAgIGVsc2UgaWYgKFNUQVRFX0cyID09IENIQVJTRVRfSVNPODg1OV83KSB7Ci0gICAgICAgIElTTzg4NTlfN19ERUNPREUoSU4zIF4gMHg4MCwgKipvdXRidWYpCi0gICAgICAgIGVsc2UgcmV0dXJuIDM7CisgICAgICAgIElTTzg4NTlfN19ERUNPREUoSU5CWVRFMyBeIDB4ODAsIHdyaXRlcikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDM7CiAgICAgfQogICAgIGVsc2UgaWYgKFNUQVRFX0cyID09IENIQVJTRVRfQVNDSUkpIHsKLSAgICAgICAgaWYgKElOMyAmIDB4ODApIHJldHVybiAzOwotICAgICAgICBlbHNlICoqb3V0YnVmID0gSU4zOworICAgICAgICBpZiAoSU5CWVRFMyAmIDB4ODApCisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgT1VUQ0hBUihJTkJZVEUzKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUJFUlJfSU5URVJOQUw7CiAKICAgICAoKmluYnVmKSArPSAzOwogICAgICppbmxlZnQgLT0gMzsKLSAgICAoKm91dGJ1ZikgKz0gMTsKLSAgICAqb3V0bGVmdCAtPSAxOwogICAgIHJldHVybiAwOwogfQogCkBAIC00MjMsNTggKzQyNSw1OCBAQAogICAgIGNvbnN0IHN0cnVjdCBpc28yMDIyX2Rlc2lnbmF0aW9uICpkc2djYWNoZSA9IE5VTEw7CiAKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CiAgICAgICAgIFB5X3NzaXplX3QgZXJyOwogCiAgICAgICAgIGlmIChTVEFURV9HRVRGTEFHKEZfRVNDVEhST1VHSE9VVCkpIHsKICAgICAgICAgICAgIC8qIEVTQyB0aHJvdWdob3V0IG1vZGU6CiAgICAgICAgICAgICAgKiBmb3Igbm9uLWlzbzIwMjIgZXNjYXBlIHNlcXVlbmNlcyAqLwotICAgICAgICAgICAgV1JJVEUxKGMpIC8qIGFzc3VtZSBhcyBJU08tODg1OS0xICovCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOyAvKiBhc3N1bWUgYXMgSVNPLTg4NTktMSAqLworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGlmIChJU19FU0NFTkQoYykpIHsKLSAgICAgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9FU0NUSFJPVUdIT1VUKQorICAgICAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX0VTQ1RIUk9VR0hPVVQpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICAgY2FzZSBFU0M6Ci0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBpZiAoSVNfSVNPMjAyMkVTQyhJTjIpKSB7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgaWYgKElTX0lTTzIwMjJFU0MoSU5CWVRFMikpIHsKICAgICAgICAgICAgICAgICBlcnIgPSBpc28yMDIycHJvY2Vzc2VzYyhjb25maWcsIHN0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5sZWZ0KTsKICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChDT05GSUdfSVNTRVQoVVNFX0cyKSAmJiBJTjIgPT0gJ04nKSB7LyogU1MyICovCi0gICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKQorICAgICAgICAgICAgZWxzZSBpZiAoQ09ORklHX0lTU0VUKFVTRV9HMikgJiYgSU5CWVRFMiA9PSAnTicpIHsvKiBTUzIgKi8KKyAgICAgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDMpOwogICAgICAgICAgICAgICAgIGVyciA9IGlzbzIwMjJwcm9jZXNzZzIoY29uZmlnLCBzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgaW5idWYsICZpbmxlZnQsIG91dGJ1ZiwgJm91dGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5idWYsICZpbmxlZnQsIHdyaXRlcik7CiAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSAwKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgV1JJVEUxKEVTQykKLSAgICAgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfRVNDVEhST1VHSE9VVCkKLSAgICAgICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihFU0MpOworICAgICAgICAgICAgICAgIFNUQVRFX1NFVEZMQUcoRl9FU0NUSFJPVUdIT1VUKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU0k6CiAgICAgICAgICAgICBpZiAoQ09ORklHX0lTU0VUKE5PX1NISUZUKSkKICAgICAgICAgICAgICAgICBnb3RvIGJ5cGFzczsKLSAgICAgICAgICAgIFNUQVRFX0NMRUFSRkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICBORVhUX0lOKDEpCisgICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTTzoKICAgICAgICAgICAgIGlmIChDT05GSUdfSVNTRVQoTk9fU0hJRlQpKQogICAgICAgICAgICAgICAgIGdvdG8gYnlwYXNzOwotICAgICAgICAgICAgU1RBVEVfU0VURkxBRyhGX1NISUZURUQpCi0gICAgICAgICAgICBORVhUX0lOKDEpCisgICAgICAgICAgICBTVEFURV9TRVRGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTEY6Ci0gICAgICAgICAgICBTVEFURV9DTEVBUkZMQUcoRl9TSElGVEVEKQotICAgICAgICAgICAgV1JJVEUxKExGKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgU1RBVEVfQ0xFQVJGTEFHKEZfU0hJRlRFRCk7CisgICAgICAgICAgICBPVVRDSEFSKExGKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmIChjIDwgMHgyMCkgLyogQzAgKi8KQEAgLTQ4NCw3ICs0ODYsNyBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGlzbzIwMjJfZGVzaWduYXRpb24gKmRzZzsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoYXJzZXQ7Ci0gICAgICAgICAgICAgICAgdWNzNF90IGRlY29kZWQ7CisgICAgICAgICAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgICAgICAgICAgaWYgKFNUQVRFX0dFVEZMQUcoRl9TSElGVEVEKSkKICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IFNUQVRFX0cxOwpAQCAtNDkyLDQzICs0OTQsNDQgQEAKICAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9IFNUQVRFX0cwOwogCiAgICAgICAgICAgICAgICAgaWYgKGNoYXJzZXQgPT0gQ0hBUlNFVF9BU0NJSSkgewotYnlwYXNzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFMShjKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FWFQoMSwgMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkc2djYWNoZSAhPSBOVUxMICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2djYWNoZS0+bWFyayA9PSBjaGFyc2V0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzZyA9IGRzZ2NhY2hlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc2ctPm1hcmsgIT0gY2hhcnNldAotI2lmZGVmIFB5X0RFQlVHCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkc2ctPm1hcmsgIT0gJ1wwJwotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ZHNnKyspCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub29wICovOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChkc2ctPm1hcmsgIT0gJ1wwJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHNnY2FjaGUgPSBkc2c7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKGRzZy0+d2lkdGgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWQgPSBkc2ctPmRlY29kZXIoKmluYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRzZy0+d2lkdGg7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQgPCAweDEwMDAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1JJVEUxKGRlY29kZWQpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVYVF9PVVQoMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChkZWNvZGVkIDwgMHgzMDAwMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChkZWNvZGVkKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAvKiBKSVMgWCAwMjEzIHBhaXJzICovCi0gICAgICAgICAgICAgICAgICAgIFdSSVRFMihkZWNvZGVkID4+IDE2LCBkZWNvZGVkICYgMHhmZmZmKQotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgyKQorYnlwYXNzOgorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDEpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgTkVYVF9JTihkc2ctPndpZHRoKQorCisgICAgICAgICAgICAgICAgaWYgKGRzZ2NhY2hlICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICAgICAgZHNnY2FjaGUtPm1hcmsgPT0gY2hhcnNldCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRzZyA9IGRzZ2NhY2hlOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGRzZyA9IENPTkZJR19ERVNJR05BVElPTlM7CisgICAgICAgICAgICAgICAgICAgICAgICAgZHNnLT5tYXJrICE9IGNoYXJzZXQKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIGRzZy0+bWFyayAhPSAnXDAnCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICA7IGRzZysrKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBub29wICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGRzZy0+bWFyayAhPSAnXDAnKTsKKyAgICAgICAgICAgICAgICAgICAgZHNnY2FjaGUgPSBkc2c7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgUkVRVUlSRV9JTkJVRihkc2ctPndpZHRoKTsKKyAgICAgICAgICAgICAgICBkZWNvZGVkID0gZHNnLT5kZWNvZGVyKCppbmJ1Zik7CisgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQgPT0gTUFQX1VOTUFQUEFCTEUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBkc2ctPndpZHRoOworCisgICAgICAgICAgICAgICAgaWYgKGRlY29kZWQgPCAweDEwMDAwKSB7CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGRlY29kZWQgPCAweDMwMDAwKSB7CisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeyAvKiBKSVMgWCAwMjEzIHBhaXJzICovCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIyKGRlY29kZWQgPj4gMTYsIGRlY29kZWQgJiAweGZmZmYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBORVhUX0lOKGRzZy0+d2lkdGgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU3NywyNSArNTgwLDI2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBrc3gxMDAxX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGtzeDEwMDEsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIGlmIChUUllNQVBfREVDKGtzeDEwMDEsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICByZXR1cm4gdTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgota3N4MTAwMV9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQora3N4MTAwMV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgYXNzZXJ0KCpsZW5ndGggPT0gMSk7CiAgICAgaWYgKCpkYXRhIDwgMHgxMDAwMCkgewotICAgICAgICBUUllNQVBfRU5DKGNwOTQ5LCBjb2RlZCwgKmRhdGEpCisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTQ5LCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoIShjb2RlZCAmIDB4ODAwMCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkOworICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KQEAgLTYxMywyNyArNjE3LDI3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBqaXN4MDIwOF9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7CisgICAgUHlfVUNTNCB1OwogICAgIGlmIChkYXRhWzBdID09IDB4MjEgJiYgZGF0YVsxXSA9PSAweDQwKSAvKiBGL1cgUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgIHJldHVybiAweGZmM2M7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICByZXR1cm4gdTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMDhfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjA4X2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBhc3NlcnQoKmxlbmd0aCA9PSAxKTsKICAgICBpZiAoKmRhdGEgPCAweDEwMDAwKSB7CiAgICAgICAgIGlmICgqZGF0YSA9PSAweGZmM2MpIC8qIEYvVyBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgICAgIHJldHVybiAweDIxNDA7Ci0gICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoIShjb2RlZCAmIDB4ODAwMCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkOwogICAgICAgICB9CkBAIC02NTQsMjMgKzY1OCwyMyBAQAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTJfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIFRSWU1BUF9ERUMoamlzeDAyMTIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIGlmIChUUllNQVBfREVDKGppc3gwMjEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgcmV0dXJuIHU7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEyX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxMl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgYXNzZXJ0KCpsZW5ndGggPT0gMSk7CiAgICAgaWYgKCpkYXRhIDwgMHgxMDAwMCkgewotICAgICAgICBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoY29kZWQgJiAweDgwMDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkICYgMHg3ZmZmOwogICAgICAgICB9CkBAIC03MDUsMzAgKzcwOSwzNCBAQAogfQogCiAjZGVmaW5lIGNvbmZpZyAoKHZvaWQgKikyMDAwKQotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEzXzIwMDBfMV9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7CisgICAgUHlfVUNTNCB1OwogICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKHUsIGRhdGFbMF0sIGRhdGFbMV0pCiAgICAgZWxzZSBpZiAoZGF0YVswXSA9PSAweDIxICYmIGRhdGFbMV0gPT0gMHg0MCkgLyogRi9XIFJFVkVSU0UgU09MSURVUyAqLwogICAgICAgICByZXR1cm4gMHhmZjNjOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSk7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICB1IHw9IDB4MjAwMDA7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEzXzIwMDBfMl9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIodSwgZGF0YVswXSwgZGF0YVsxXSkKLSAgICBUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyX0NIQVIodSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCisgICAgICAgIDsKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKICAgICAgICAgdSB8PSAweDIwMDAwOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwpAQCAtNzM2LDI4ICs3NDQsMzIgQEAKIH0KICN1bmRlZiBjb25maWcKIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjEzXzIwMDRfMV9kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7CisgICAgUHlfVUNTNCB1OwogICAgIGlmIChkYXRhWzBdID09IDB4MjEgJiYgZGF0YVsxXSA9PSAweDQwKSAvKiBGL1cgUkVWRVJTRSBTT0xJRFVTICovCiAgICAgICAgIHJldHVybiAweGZmM2M7Ci0gICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pOwotICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkKKyAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgdSwgZGF0YVswXSwgZGF0YVsxXSkpCiAgICAgICAgIHUgfD0gMHgyMDAwMDsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgdSwgZGF0YVswXSwgZGF0YVsxXSk7CisgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiB1OwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMTNfMjAwNF8yX2RlY29kZXIoY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSkKIHsKLSAgICB1Y3M0X3QgdTsKLSAgICBUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKTsKLSAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pCisgICAgUHlfVUNTNCB1OworICAgIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCB1LCBkYXRhWzBdLCBkYXRhWzFdKSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9lbXAsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICB1IHw9IDB4MjAwMDA7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CkBAIC03NjUsNyArNzc3LDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCwgdm9pZCAqY29uZmlnKQoramlzeDAyMTNfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgsIHZvaWQgKmNvbmZpZykKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAKQEAgLTc3NCwyOCArNzg2LDI4IEBACiAgICAgICAgIGlmICgqZGF0YSA+PSAweDEwMDAwKSB7CiAgICAgICAgICAgICBpZiAoKCpkYXRhKSA+PiAxNiA9PSAweDIwMDAwID4+IDE2KSB7CiAgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9FTVAoY29kZWQsICpkYXRhKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmRhdGEpICYgMHhmZmZmKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlZCwgKCpkYXRhKSAmIDB4ZmZmZikpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgfQogCiAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9FTkNPREVfQk1QKGNvZGVkLCAqZGF0YSkKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3gwMjEzX2JtcCwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoY29kZWQgPT0gTVVMVElDKQogICAgICAgICAgICAgICAgIHJldHVybiBNQVBfTVVMVElQTEVfQVZBSUw7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkgeworICAgICAgICBlbHNlIGlmIChUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGVkLCAqZGF0YSkpIHsKICAgICAgICAgICAgIGlmIChjb2RlZCAmIDB4ODAwMCkKICAgICAgICAgICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgICAgICByZXR1cm4gY29kZWQ7CisKICAgICBjYXNlIDI6IC8qIHNlY29uZCBjaGFyYWN0ZXIgb2YgdW5pY29kZSBwYWlyICovCiAgICAgICAgIGNvZGVkID0gZmluZF9wYWlyZW5jbWFwKCh1Y3MyX3QpZGF0YVswXSwgKHVjczJfdClkYXRhWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsIEpJU1gwMjEzX0VOQ1BBSVJTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsIEpJU1gwMjEzX0VOQ1BBSVJTKTsKICAgICAgICAgaWYgKGNvZGVkID09IERCQ0lOVikgewogICAgICAgICAgICAgKmxlbmd0aCA9IDE7CiAgICAgICAgICAgICBjb2RlZCA9IGZpbmRfcGFpcmVuY21hcCgodWNzMl90KWRhdGFbMF0sIDAsCkBAIC04MDUsMjEgKzgxNywyNCBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBjb2RlZDsKKwogICAgIGNhc2UgLTE6IC8qIGZsdXNoIHVudGVybWluYXRlZCAqLwogICAgICAgICAqbGVuZ3RoID0gMTsKICAgICAgICAgY29kZWQgPSBmaW5kX3BhaXJlbmNtYXAoKHVjczJfdClkYXRhWzBdLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsIEpJU1gwMjEzX0VOQ1BBSVJTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgamlzeDAyMTNfcGFpcl9lbmNtYXAsIEpJU1gwMjEzX0VOQ1BBSVJTKTsKICAgICAgICAgaWYgKGNvZGVkID09IERCQ0lOVikKICAgICAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGNvZGVkOworICAgICAgICBicmVhazsKKwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICB9CiB9CiAKIHN0YXRpYyBEQkNIQVIKLWppc3gwMjEzXzIwMDBfMV9lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMTNfMjAwMF8xX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZCA9IGppc3gwMjEzX2VuY29kZXIoZGF0YSwgbGVuZ3RoLCAodm9pZCAqKTIwMDApOwogICAgIGlmIChjb2RlZCA9PSBNQVBfVU5NQVBQQUJMRSB8fCBjb2RlZCA9PSBNQVBfTVVMVElQTEVfQVZBSUwpCkBAIC04MzEsNyArODQ2LDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwMF8xX2VuY29kZXJfcGFpcm9ubHkoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDAwXzFfZW5jb2Rlcl9wYWlyb25seShjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIFB5X3NzaXplX3QgaWxlbmd0aCA9ICpsZW5ndGg7CkBAIC04NTQsNyArODY5LDcgQEAKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMTNfMjAwMF8yX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIxM18yMDAwXzJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkID0gamlzeDAyMTNfZW5jb2RlcihkYXRhLCBsZW5ndGgsICh2b2lkICopMjAwMCk7CiAgICAgaWYgKGNvZGVkID09IE1BUF9VTk1BUFBBQkxFIHx8IGNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkKQEAgLTg2Niw3ICs4ODEsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDA0XzFfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDRfMV9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQgPSBqaXN4MDIxM19lbmNvZGVyKGRhdGEsIGxlbmd0aCwgTlVMTCk7CiAgICAgaWYgKGNvZGVkID09IE1BUF9VTk1BUFBBQkxFIHx8IGNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkKQEAgLTg3OCw3ICs4OTMsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDA0XzFfZW5jb2Rlcl9wYWlyb25seShjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDRfMV9lbmNvZGVyX3BhaXJvbmx5KGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgUHlfc3NpemVfdCBpbGVuZ3RoID0gKmxlbmd0aDsKQEAgLTkwMSw3ICs5MTYsNyBAQAogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIxM18yMDA0XzJfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2ppc3gwMjEzXzIwMDRfMl9lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQgPSBqaXN4MDIxM19lbmNvZGVyKGRhdGEsIGxlbmd0aCwgTlVMTCk7CiAgICAgaWYgKGNvZGVkID09IE1BUF9VTk1BUFBBQkxFIHx8IGNvZGVkID09IE1BUF9NVUxUSVBMRV9BVkFJTCkKQEAgLTkxMiwzOSArOTI3LDQzIEBACiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAotc3RhdGljIHVjczRfdAorc3RhdGljIFB5X1VDUzQKIGppc3gwMjAxX3JfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIEpJU1gwMjAxX1JfREVDT0RFKCpkYXRhLCB1KQotICAgIGVsc2UgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOworICAgIFB5X1VDUzQgdTsKKyAgICBKSVNYMDIwMV9SX0RFQ09ERV9DSEFSKCpkYXRhLCB1KQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiB1OwogfQogCiBzdGF0aWMgREJDSEFSCi1qaXN4MDIwMV9yX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitqaXN4MDIwMV9yX2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIERCQ0hBUiBjb2RlZDsKICAgICBKSVNYMDIwMV9SX0VOQ09ERSgqZGF0YSwgY29kZWQpCi0gICAgZWxzZSByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gTUFQX1VOTUFQUEFCTEU7CiAgICAgcmV0dXJuIGNvZGVkOwogfQogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogamlzeDAyMDFfa19kZWNvZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCiB7Ci0gICAgdWNzNF90IHU7Ci0gICAgSklTWDAyMDFfS19ERUNPREUoKmRhdGEgXiAweDgwLCB1KQotICAgIGVsc2UgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOworICAgIFB5X1VDUzQgdTsKKyAgICBKSVNYMDIwMV9LX0RFQ09ERV9DSEFSKCpkYXRhIF4gMHg4MCwgdSkKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKICAgICByZXR1cm4gdTsKIH0KIAogc3RhdGljIERCQ0hBUgotamlzeDAyMDFfa19lbmNvZGVyKGNvbnN0IHVjczRfdCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQoramlzeDAyMDFfa19lbmNvZGVyKGNvbnN0IFB5X1VDUzQgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKIHsKICAgICBEQkNIQVIgY29kZWQ7CiAgICAgSklTWDAyMDFfS19FTkNPREUoKmRhdGEsIGNvZGVkKQotICAgIGVsc2UgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIE1BUF9VTk1BUFBBQkxFOwogICAgIHJldHVybiBjb2RlZCAtIDB4ODA7CiB9CiAKQEAgLTk2MSwyMyArOTgwLDIzIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1Y3M0X3QKK3N0YXRpYyBQeV9VQ1M0CiBnYjIzMTJfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewotICAgIHVjczRfdCB1OwotICAgIFRSWU1BUF9ERUMoZ2IyMzEyLCB1LCBkYXRhWzBdLCBkYXRhWzFdKQorICAgIFB5X1VDUzQgdTsKKyAgICBpZiAoVFJZTUFQX0RFQyhnYjIzMTIsIHUsIGRhdGFbMF0sIGRhdGFbMV0pKQogICAgICAgICByZXR1cm4gdTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgotZ2IyMzEyX2VuY29kZXIoY29uc3QgdWNzNF90ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCitnYjIzMTJfZW5jb2Rlcihjb25zdCBQeV9VQ1M0ICpkYXRhLCBQeV9zc2l6ZV90ICpsZW5ndGgpCiB7CiAgICAgREJDSEFSIGNvZGVkOwogICAgIGFzc2VydCgqbGVuZ3RoID09IDEpOwogICAgIGlmICgqZGF0YSA8IDB4MTAwMDApIHsKLSAgICAgICAgVFJZTUFQX0VOQyhnYmNvbW1vbiwgY29kZWQsICpkYXRhKSB7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGdiY29tbW9uLCBjb2RlZCwgKmRhdGEpKSB7CiAgICAgICAgICAgICBpZiAoIShjb2RlZCAmIDB4ODAwMCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVkOwogICAgICAgICB9CkBAIC05ODYsMTQgKzEwMDUsMTQgQEAKIH0KIAogCi1zdGF0aWMgdWNzNF90CitzdGF0aWMgUHlfVUNTNAogZHVtbXlfZGVjb2Rlcihjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQogewogICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KIAogc3RhdGljIERCQ0hBUgotZHVtbXlfZW5jb2Rlcihjb25zdCB1Y3M0X3QgKmRhdGEsIFB5X3NzaXplX3QgKmxlbmd0aCkKK2R1bW15X2VuY29kZXIoY29uc3QgUHlfVUNTNCAqZGF0YSwgUHlfc3NpemVfdCAqbGVuZ3RoKQogewogICAgIHJldHVybiBNQVBfVU5NQVBQQUJMRTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfanAuYyBiL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfanAuYwppbmRleCBhNTAwNjk2Li4yYzc3ODhhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2pwLmMKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19qcC5jCkBAIC0xOSw0MCArMTksNDEgQEAKIAogRU5DT0RFUihjcDkzMikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKIAogICAgICAgICBpZiAoYyA8PSAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGZmNjEgJiYgYyA8PSAweGZmOWYpIHsKLSAgICAgICAgICAgIFdSSVRFMShjIC0gMHhmZWMwKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMShjIC0gMHhmZWMwKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZjhmMCAmJiBjIDw9IDB4ZjhmMykgewogICAgICAgICAgICAgLyogV2luZG93cyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7CiAgICAgICAgICAgICBpZiAoYyA9PSAweGY4ZjApCi0gICAgICAgICAgICAgICAgT1VUMSgweGEwKQorICAgICAgICAgICAgICAgIE9VVEJZVEUxKDB4YTApOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIE9VVDEoYyAtIDB4ZmVmMSArIDB4ZmQpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICAgICAgT1VUQllURTEoYyAtIDB4ZmVmMSArIDB4ZmQpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgVUNTNElOVkFMSUQoYykKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKLSAgICAgICAgVFJZTUFQX0VOQyhjcDkzMmV4dCwgY29kZSwgYykgewotICAgICAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgICAgICBPVVQyKGNvZGUgJiAweGZmKQorICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDkzMmV4dCwgY29kZSwgYykpIHsKKyAgICAgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhmZik7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpIHsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIC8qIE1TQiBzZXQ6IEpJUyBYIDAyMTIgKi8KICAgICAgICAgICAgICAgICByZXR1cm4gMTsKIApAQCAtNjEsMjAgKzYyLDIwIEBACiAgICAgICAgICAgICBjMiA9IGNvZGUgJiAweGZmOwogICAgICAgICAgICAgYzIgPSAoKChjMSAtIDB4MjEpICYgMSkgPyAweDVlIDogMCkgKyAoYzIgLSAweDIxKTsKICAgICAgICAgICAgIGMxID0gKGMxIC0gMHgyMSkgPj4gMTsKLSAgICAgICAgICAgIE9VVDEoYzEgPCAweDFmID8gYzEgKyAweDgxIDogYzEgKyAweGMxKQotICAgICAgICAgICAgT1VUMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpCisgICAgICAgICAgICBPVVRCWVRFMShjMSA8IDB4MWYgPyBjMSArIDB4ODEgOiBjMSArIDB4YzEpOworICAgICAgICAgICAgT1VUQllURTIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4ZTAwMCAmJiBjIDwgMHhlNzU4KSB7CiAgICAgICAgICAgICAvKiBVc2VyLWRlZmluZWQgYXJlYSAqLwotICAgICAgICAgICAgYzEgPSAoUHlfVU5JQ09ERSkoYyAtIDB4ZTAwMCkgLyAxODg7Ci0gICAgICAgICAgICBjMiA9IChQeV9VTklDT0RFKShjIC0gMHhlMDAwKSAlIDE4ODsKLSAgICAgICAgICAgIE9VVDEoYzEgKyAweGYwKQotICAgICAgICAgICAgT1VUMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpCisgICAgICAgICAgICBjMSA9IChQeV9VQ1M0KShjIC0gMHhlMDAwKSAvIDE4ODsKKyAgICAgICAgICAgIGMyID0gKFB5X1VDUzQpKGMgLSAweGUwMDApICUgMTg4OworICAgICAgICAgICAgT1VUQllURTEoYzEgKyAweGYwKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKGMyIDwgMHgzZiA/IGMyICsgMHg0MCA6IGMyICsgMHg0MSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgTkVYVCgxLCAyKQorICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtODMsMzMgKzg0LDM0IEBACiBERUNPREVSKGNwOTMyKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMSwgYzI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTEsIGMyOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKICAgICAgICAgaWYgKGMgPD0gMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4YTAgJiYgYyA8PSAweGRmKSB7CiAgICAgICAgICAgICBpZiAoYyA9PSAweGEwKQotICAgICAgICAgICAgICAgIE9VVDEoMHhmOGYwKSAvKiBoYWxmLXdpZHRoIGthdGFrYW5hICovCisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGY4ZjApOyAvKiBoYWxmLXdpZHRoIGthdGFrYW5hICovCiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgT1VUMSgweGZlYzAgKyBjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhmZWMwICsgYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGZkLyogJiYgYyA8PSAweGZmKi8pIHsKICAgICAgICAgICAgIC8qIFdpbmRvd3MgY29tcGF0aWJpbGl0eSAqLwotICAgICAgICAgICAgT1VUMSgweGY4ZjEgLSAweGZkICsgYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoMHhmOGYxIC0gMHhmZCArIGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgYzIgPSBJTkJZVEUyOwogCi0gICAgICAgIFRSWU1BUF9ERUMoY3A5MzJleHQsICoqb3V0YnVmLCBjLCBjMik7CisgICAgICAgIGlmIChUUllNQVBfREVDKGNwOTMyZXh0LCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOwogICAgICAgICBlbHNlIGlmICgoYyA+PSAweDgxICYmIGMgPD0gMHg5ZikgfHwgKGMgPj0gMHhlMCAmJiBjIDw9IDB4ZWEpKXsKICAgICAgICAgICAgIGlmIChjMiA8IDB4NDAgfHwgKGMyID4gMHg3ZSAmJiBjMiA8IDB4ODApIHx8IGMyID4gMHhmYykKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTExOSwyMSArMTIxLDIzIEBACiAgICAgICAgICAgICBjID0gKDIgKiBjICsgKGMyIDwgMHg1ZSA/IDAgOiAxKSArIDB4MjEpOwogICAgICAgICAgICAgYzIgPSAoYzIgPCAweDVlID8gYzIgOiBjMiAtIDB4NWUpICsgMHgyMTsKIAotICAgICAgICAgICAgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsIGMsIGMyKTsKLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIwOCwgZGVjb2RlZCwgYywgYzIpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGYwICYmIGMgPD0gMHhmOSkgewogICAgICAgICAgICAgaWYgKChjMiA+PSAweDQwICYmIGMyIDw9IDB4N2UpIHx8CiAgICAgICAgICAgICAgICAgKGMyID49IDB4ODAgJiYgYzIgPD0gMHhmYykpCi0gICAgICAgICAgICAgICAgT1VUMSgweGUwMDAgKyAxODggKiAoYyAtIDB4ZjApICsKLSAgICAgICAgICAgICAgICAgICAgIChjMiA8IDB4ODAgPyBjMiAtIDB4NDAgOiBjMiAtIDB4NDEpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoMHhlMDAwICsgMTg4ICogKGMgLSAweGYwKSArCisgICAgICAgICAgICAgICAgICAgIChjMiA8IDB4ODAgPyBjMiAtIDB4NDAgOiBjMiAtIDB4NDEpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xNDYsMjUgKzE1MCwyNCBAQAogCiBFTkNPREVSKGV1Y19qaXNfMjAwNCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1Y3M0X3QgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAgICAgICAgIFB5X3NzaXplX3QgaW5zaXplOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKGMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgREVDT0RFX1NVUlJPR0FURShjKQotICAgICAgICBpbnNpemUgPSBHRVRfSU5TSVpFKGMpOworICAgICAgICBpbnNpemUgPSAxOwogCiAgICAgICAgIGlmIChjIDw9IDB4RkZGRikgewogICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9CTVAoY29kZSwgYykKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGUsIGMpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgIGlmIChjb2RlID09IE1VTFRJQykgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZWZ0IDwgMikgeworICAgICAgICAgICAgICAgICAgICBpZiAoaW5sZW4gLSAqaW5wb3MgPCAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBNQkVOQ19GTFVTSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBmaW5kX3BhaXJlbmNtYXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgMCwKQEAgLTE3Nyw4ICsxODAsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IGMyID0gSU5DSEFSMjsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBmaW5kX3BhaXJlbmNtYXAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVjczJfdCljLCAoKmluYnVmKVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIGMyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEpJU1gwMjEzX0VOQ1BBSVJTKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IERCQ0lOVikgewpAQCAtMTkzLDExICsxOTcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGZmNjEgJiYgYyA8PSAweGZmOWYpIHsKICAgICAgICAgICAgICAgICAvKiBKSVMgWCAwMjAxIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KLSAgICAgICAgICAgICAgICBXUklURTIoMHg4ZSwgYyAtIDB4ZmVjMCkKLSAgICAgICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICAgICAgV1JJVEVCWVRFMigweDhlLCBjIC0gMHhmZWMwKTsKKyAgICAgICAgICAgICAgICBORVhUKDEsIDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAweGZmM2MpCkBAIC0yMTEsMjAgKzIxNiwyMiBAQAogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKGMgPj4gMTYgPT0gRU1QQkFTRSA+PiAxNikgewogICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9FTVAoY29kZSwgYykKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGUsIGMgJiAweGZmZmYpOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gaW5zaXplOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19lbXAsIGNvZGUsIGMgJiAweGZmZmYpKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5zaXplOwogICAgICAgICB9CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAKICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApIHsKICAgICAgICAgICAgIC8qIENvZGVzZXQgMiAqLwotICAgICAgICAgICAgV1JJVEUzKDB4OGYsIGNvZGUgPj4gOCwgKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKGluc2l6ZSwgMykKKyAgICAgICAgICAgIFdSSVRFQllURTMoMHg4ZiwgY29kZSA+PiA4LCAoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKGluc2l6ZSwgMyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKiBDb2Rlc2V0IDEgKi8KLSAgICAgICAgICAgIFdSSVRFMigoY29kZSA+PiA4KSB8IDB4ODAsIChjb2RlICYgMHhGRikgfCAweDgwKQotICAgICAgICAgICAgTkVYVChpbnNpemUsIDIpCisgICAgICAgICAgICBXUklURUJZVEUyKChjb2RlID4+IDgpIHwgMHg4MCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVChpbnNpemUsIDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yMzQsMTQgKzI0MSwxMiBAQAogREVDT0RFUihldWNfamlzXzIwMDQpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotICAgICAgICB1Y3M0X3QgY29kZTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGNvZGUsIGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTI0OSwxMSArMjU0LDExIEBACiAgICAgICAgICAgICAvKiBKSVMgWCAwMjAxIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIGlmIChjMiA+PSAweGExICYmIGMyIDw9IDB4ZGYpIHsKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZmVjMCArIGMyKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmVjMCArIGMyKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMjYxLDQ3ICsyNjYsNTUgQEAKICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDhmKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyLCBjMzsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKQotICAgICAgICAgICAgYzIgPSBJTjIgXiAweDgwOwotICAgICAgICAgICAgYzMgPSBJTjMgXiAweDgwOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMiBeIDB4ODA7CisgICAgICAgICAgICBjMyA9IElOQllURTMgXiAweDgwOwogCiAgICAgICAgICAgICAvKiBKSVMgWCAwMjEzIFBsYW5lIDIgb3IgSklTIFggMDIxMiAoc2VlIE5PVEVTKSAqLwotICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIoKipvdXRidWYsIGMyLCBjMykKLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgKipvdXRidWYsIGMyLCBjMykgOwotICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCBjb2RlLCBjMiwgYzMpIHsKLSAgICAgICAgICAgICAgICBXUklURVVDUzQoRU1QQkFTRSB8IGNvZGUpCi0gICAgICAgICAgICAgICAgTkVYVF9JTigzKQorICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIod3JpdGVyLCBjMiwgYzMpCisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfYm1wLCBkZWNvZGVkLCBjMiwgYzMpKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzJfZW1wLCBjb2RlLCBjMiwgYzMpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigzKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxMiwgKipvdXRidWYsIGMyLCBjMykgOwotICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKLSAgICAgICAgICAgIE5FWFQoMywgMSkKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTIsIGRlY29kZWQsIGMyLCBjMykpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIE5FWFRfSU4oMyk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOwogICAgICAgICAgICAgYyBePSAweDgwOwotICAgICAgICAgICAgYzIgPSBJTjIgXiAweDgwOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyIF4gMHg4MDsKIAogICAgICAgICAgICAgLyogSklTIFggMDIxMyBQbGFuZSAxICovCi0gICAgICAgICAgICBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX1BMQU5FMSgqKm91dGJ1ZiwgYywgYzIpCi0gICAgICAgICAgICBlbHNlIGlmIChjID09IDB4MjEgJiYgYzIgPT0gMHg0MCkgKipvdXRidWYgPSAweGZmM2M7Ci0gICAgICAgICAgICBlbHNlIGlmIChjID09IDB4MjIgJiYgYzIgPT0gMHgzMikgKipvdXRidWYgPSAweGZmNWU7Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMDgsICoqb3V0YnVmLCBjLCBjMik7Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsICoqb3V0YnVmLCBjLCBjMik7Ci0gICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIGNvZGUsIGMsIGMyKSB7Ci0gICAgICAgICAgICAgICAgV1JJVEVVQ1M0KEVNUEJBU0UgfCBjb2RlKQotICAgICAgICAgICAgICAgIE5FWFRfSU4oMikKKyAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUxKHdyaXRlciwgYywgYzIpCisgICAgICAgICAgICBlbHNlIGlmIChjID09IDB4MjEgJiYgYzIgPT0gMHg0MCkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmYzYyk7CisgICAgICAgICAgICBlbHNlIGlmIChjID09IDB4MjIgJiYgYzIgPT0gMHgzMikKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmY1ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjLCBjMikpCisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMV9ibXAsIGRlY29kZWQsIGMsIGMyKSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2VtcCwgY29kZSwgYywgYzIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihFTVBCQVNFIHwgY29kZSk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCBjb2RlLCBjLCBjMikgewotICAgICAgICAgICAgICAgIFdSSVRFMihjb2RlID4+IDE2LCBjb2RlICYgMHhmZmZmKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMikKKyAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfcGFpciwgY29kZSwgYywgYzIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUjIoY29kZSA+PiAxNiwgY29kZSAmIDB4ZmZmZik7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgcmV0dXJuIDE7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMTUsMzUgKzMyOCwzNyBAQAogCiBFTkNPREVSKGV1Y19qcCkKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgVUNTNElOVkFMSUQoYykKKyAgICAgICAgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKICAgICAgICAgZWxzZSBpZiAoYyA+PSAweGZmNjEgJiYgYyA8PSAweGZmOWYpIHsKICAgICAgICAgICAgIC8qIEpJUyBYIDAyMDEgaGFsZi13aWR0aCBrYXRha2FuYSAqLwotICAgICAgICAgICAgV1JJVEUyKDB4OGUsIGMgLSAweGZlYzApCi0gICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICBXUklURUJZVEUyKDB4OGUsIGMgLSAweGZlYzApOworICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAjaWZuZGVmIFNUUklDVF9CVUlMRAogICAgICAgICBlbHNlIGlmIChjID09IDB4ZmYzYykgLyogRlVMTC1XSURUSCBSRVZFUlNFIFNPTElEVVMgKi8KICAgICAgICAgICAgIGNvZGUgPSAweDIxNDA7CiAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHhhNSkgeyAvKiBZRU4gU0lHTiAqLwotICAgICAgICAgICAgV1JJVEUxKDB4NWMpOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgweDVjKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfSBlbHNlIGlmIChjID09IDB4MjAzZSkgeyAvKiBPVkVSTElORSAqLwotICAgICAgICAgICAgV1JJVEUxKDB4N2UpOwotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgweDdlKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogI2VuZGlmCkBAIC0zNTIsMTIgKzM2NywxMiBAQAogCiAgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKSB7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjEyICovCi0gICAgICAgICAgICBXUklURTMoMHg4ZiwgY29kZSA+PiA4LCAoY29kZSAmIDB4RkYpIHwgMHg4MCkKLSAgICAgICAgICAgIE5FWFQoMSwgMykKKyAgICAgICAgICAgIFdSSVRFQllURTMoMHg4ZiwgY29kZSA+PiA4LCAoY29kZSAmIDB4RkYpIHwgMHg4MCk7CisgICAgICAgICAgICBORVhUKDEsIDMpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogSklTIFggMDIwOCAqLwotICAgICAgICAgICAgV1JJVEUyKChjb2RlID4+IDgpIHwgMHg4MCwgKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICBXUklURUJZVEUyKChjb2RlID4+IDgpIHwgMHg4MCwgKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzY3LDEzICszODIsMTIgQEAKIERFQ09ERVIoZXVjX2pwKQogewogICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOMTsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOworICAgICAgICBQeV9VQ1M0IGRlY29kZWQ7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBPVVQxKGMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBPVVRDSEFSKGMpOworICAgICAgICAgICAgTkVYVF9JTigxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTM4MSwxMSArMzk1LDExIEBACiAgICAgICAgICAgICAvKiBKSVMgWCAwMjAxIGhhbGYtd2lkdGgga2F0YWthbmEgKi8KICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYzI7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgICAgIGMyID0gSU4yOworICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKKyAgICAgICAgICAgIGMyID0gSU5CWVRFMjsKICAgICAgICAgICAgIGlmIChjMiA+PSAweGExICYmIGMyIDw9IDB4ZGYpIHsKLSAgICAgICAgICAgICAgICBPVVQxKDB4ZmVjMCArIGMyKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmVjMCArIGMyKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtMzkzLDEyICs0MDcsMTMgQEAKICAgICAgICAgZWxzZSBpZiAoYyA9PSAweDhmKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyLCBjMzsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigzKQotICAgICAgICAgICAgYzIgPSBJTjI7Ci0gICAgICAgICAgICBjMyA9IElOMzsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMyk7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CisgICAgICAgICAgICBjMyA9IElOQllURTM7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjEyICovCi0gICAgICAgICAgICBUUllNQVBfREVDKGppc3gwMjEyLCAqKm91dGJ1ZiwgYzIgXiAweDgwLCBjMyBeIDB4ODApIHsKLSAgICAgICAgICAgICAgICBORVhUKDMsIDEpCisgICAgICAgICAgICBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxMiwgZGVjb2RlZCwgYzIgXiAweDgwLCBjMyBeIDB4ODApKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDMpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHJldHVybiAxOwpAQCAtNDA2LDE5ICs0MjEsMjAgQEAKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMyOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICAvKiBKSVMgWCAwMjA4ICovCiAjaWZuZGVmIFNUUklDVF9CVUlMRAogICAgICAgICAgICAgaWYgKGMgPT0gMHhhMSAmJiBjMiA9PSAweGMwKQogICAgICAgICAgICAgICAgIC8qIEZVTEwtV0lEVEggUkVWRVJTRSBTT0xJRFVTICovCi0gICAgICAgICAgICAgICAgKipvdXRidWYgPSAweGZmM2M7CisgICAgICAgICAgICAgICAgT1VUQ0hBUigweGZmM2MpOwogICAgICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAgICAgICAgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBjIF4gMHg4MCwgYzIgXiAweDgwKSA7Ci0gICAgICAgICAgICBlbHNlIHJldHVybiAxOwotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMgXiAweDgwLCBjMiBeIDB4ODApKQorICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MzIsMzQgKzQ0OCw0MCBAQAogCiBFTkNPREVSKHNoaWZ0X2ppcykKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKIAogI2lmZGVmIFNUUklDVF9CVUlMRAogICAgICAgICBKSVNYMDIwMV9SX0VOQ09ERShjLCBjb2RlKQogI2Vsc2UKLSAgICAgICAgaWYgKGMgPCAweDgwKSBjb2RlID0gYzsKLSAgICAgICAgZWxzZSBpZiAoYyA9PSAweDAwYTUpIGNvZGUgPSAweDVjOyAvKiBZRU4gU0lHTiAqLwotICAgICAgICBlbHNlIGlmIChjID09IDB4MjAzZSkgY29kZSA9IDB4N2U7IC8qIE9WRVJMSU5FICovCisgICAgICAgIGlmIChjIDwgMHg4MCkKKyAgICAgICAgICAgIGNvZGUgPSBjOworICAgICAgICBlbHNlIGlmIChjID09IDB4MDBhNSkKKyAgICAgICAgICAgIGNvZGUgPSAweDVjOyAvKiBZRU4gU0lHTiAqLworICAgICAgICBlbHNlIGlmIChjID09IDB4MjAzZSkKKyAgICAgICAgICAgIGNvZGUgPSAweDdlOyAvKiBPVkVSTElORSAqLwogI2VuZGlmCiAgICAgICAgIGVsc2UgSklTWDAyMDFfS19FTkNPREUoYywgY29kZSkKLSAgICAgICAgZWxzZSBVQ1M0SU5WQUxJRChjKQotICAgICAgICBlbHNlIGNvZGUgPSBOT0NIQVI7CisgICAgICAgIGVsc2UgaWYgKGMgPiAweEZGRkYpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29kZSA9IE5PQ0hBUjsKIAogICAgICAgICBpZiAoY29kZSA8IDB4ODAgfHwgKGNvZGUgPj0gMHhhMSAmJiBjb2RlIDw9IDB4ZGYpKSB7Ci0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7CiAKLSAgICAgICAgICAgIE9VVDEoKHVuc2lnbmVkIGNoYXIpY29kZSkKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVEJZVEUxKCh1bnNpZ25lZCBjaGFyKWNvZGUpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CiAKICAgICAgICAgaWYgKGNvZGUgPT0gTk9DSEFSKSB7Ci0gICAgICAgICAgICBUUllNQVBfRU5DKGppc3hjb21tb24sIGNvZGUsIGMpOworICAgICAgICAgICAgaWYgKFRSWU1BUF9FTkMoamlzeGNvbW1vbiwgY29kZSwgYykpCisgICAgICAgICAgICAgICAgOwogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgICAgIGVsc2UgaWYgKGMgPT0gMHhmZjNjKQogICAgICAgICAgICAgICAgIGNvZGUgPSAweDIxNDA7IC8qIEZVTEwtV0lEVEggUkVWRVJTRSBTT0xJRFVTICovCkBAIC00NzUsOSArNDk3LDkgQEAKICAgICAgICAgYzIgPSBjb2RlICYgMHhmZjsKICAgICAgICAgYzIgPSAoKChjMSAtIDB4MjEpICYgMSkgPyAweDVlIDogMCkgKyAoYzIgLSAweDIxKTsKICAgICAgICAgYzEgPSAoYzEgLSAweDIxKSA+PiAxOwotICAgICAgICBPVVQxKGMxIDwgMHgxZiA/IGMxICsgMHg4MSA6IGMxICsgMHhjMSkKLSAgICAgICAgT1VUMihjMiA8IDB4M2YgPyBjMiArIDB4NDAgOiBjMiArIDB4NDEpCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgT1VUQllURTEoYzEgPCAweDFmID8gYzEgKyAweDgxIDogYzEgKyAweGMxKTsKKyAgICAgICAgT1VUQllURTIoYzIgPCAweDNmID8gYzIgKyAweDQwIDogYzIgKyAweDQxKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTQ4NiwyMSArNTA4LDIxIEBACiBERUNPREVSKHNoaWZ0X2ppcykKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAjaWZkZWYgU1RSSUNUX0JVSUxECi0gICAgICAgIEpJU1gwMjAxX1JfREVDT0RFKGMsICoqb3V0YnVmKQorICAgICAgICBKSVNYMDIwMV9SX0RFQ09ERShjLCB3cml0ZXIpCiAjZWxzZQotICAgICAgICBpZiAoYyA8IDB4ODApICoqb3V0YnVmID0gYzsKKyAgICAgICAgaWYgKGMgPCAweDgwKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKICNlbmRpZgotICAgICAgICBlbHNlIEpJU1gwMjAxX0tfREVDT0RFKGMsICoqb3V0YnVmKQorICAgICAgICBlbHNlIEpJU1gwMjAxX0tfREVDT0RFKGMsIHdyaXRlcikKICAgICAgICAgZWxzZSBpZiAoKGMgPj0gMHg4MSAmJiBjIDw9IDB4OWYpIHx8IChjID49IDB4ZTAgJiYgYyA8PSAweGVhKSl7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKIAotICAgICAgICAgICAgUkVRVUlSRV9JTkJVRigyKQotICAgICAgICAgICAgYzIgPSBJTjI7CisgICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICAgICAgYzIgPSBJTkJZVEUyOwogICAgICAgICAgICAgaWYgKGMyIDwgMHg0MCB8fCAoYzIgPiAweDdlICYmIGMyIDwgMHg4MCkgfHwgYzIgPiAweGZjKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCkBAIC01MTIsMTMgKzUzNCwxNCBAQAogI2lmbmRlZiBTVFJJQ1RfQlVJTEQKICAgICAgICAgICAgIGlmIChjMSA9PSAweDIxICYmIGMyID09IDB4NDApIHsKICAgICAgICAgICAgICAgICAvKiBGVUxMLVdJRFRIIFJFVkVSU0UgU09MSURVUyAqLwotICAgICAgICAgICAgICAgIE9VVDEoMHhmZjNjKQotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgICAgICBPVVRDSEFSKDB4ZmYzYyk7CisgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgVFJZTUFQX0RFQyhqaXN4MDIwOCwgKipvdXRidWYsIGMxLCBjMikgewotICAgICAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgICAgIGlmIChUUllNQVBfREVDKGppc3gwMjA4LCBkZWNvZGVkLCBjMSwgYzIpKSB7CisgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBORVhUX0lOKDIpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQpAQCAtNTI3LDcgKzU1MCw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMSwgMSkgLyogSklTIFggMDIwMSAqLworICAgICAgICBORVhUX0lOKDEpOyAvKiBKSVMgWCAwMjAxICovCiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC01NDAsMzAgKzU2MywyOSBAQAogCiBFTkNPREVSKHNoaWZ0X2ppc18yMDA0KQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIHVjczRfdCBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZSA9IE5PQ0hBUjsKICAgICAgICAgaW50IGMxLCBjMjsKICAgICAgICAgUHlfc3NpemVfdCBpbnNpemU7CiAKICAgICAgICAgSklTWDAyMDFfRU5DT0RFKGMsIGNvZGUpCi0gICAgICAgIGVsc2UgREVDT0RFX1NVUlJPR0FURShjKQogCiAgICAgICAgIGlmIChjb2RlIDwgMHg4MCB8fCAoY29kZSA+PSAweGExICYmIGNvZGUgPD0gMHhkZikpIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljb2RlKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljb2RlKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIGluc2l6ZSA9IEdFVF9JTlNJWkUoYyk7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpbnNpemUgPSAxOwogCiAgICAgICAgIGlmIChjb2RlID09IE5PQ0hBUikgewogICAgICAgICAgICAgaWYgKGMgPD0gMHhmZmZmKSB7CiAgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9CTVAoY29kZSwgYykKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfYm1wLCBjb2RlLCBjKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4MDIxM19ibXAsIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb2RlID09IE1VTFRJQykgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlubGVmdCA8IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmxlbiAtICppbnBvcyA8IDIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBNQkVOQ19GTFVTSCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBmaW5kX3BhaXJlbmNtYXAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh1Y3MyX3QpYywgMCwKQEAgLTU3Niw4ICs1OTgsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTUJFUlJfVE9PRkVXOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjaDIgPSBJTkNIQVIyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBmaW5kX3BhaXJlbmNtYXAoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1Y3MyX3QpYywgSU4yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWNzMl90KWMsIGNoMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppc3gwMjEzX3BhaXJfZW5jbWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBKSVNYMDIxM19FTkNQQUlSUyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgPT0gREJDSU5WKSB7CkBAIC01OTMsMTcgKzYxNiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSB7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0VOQyhqaXN4Y29tbW9uLCBjb2RlLCBjKSkgewogICAgICAgICAgICAgICAgICAgICAvKiBhYmFuZG9uIEpJUyBYIDAyMTIgY29kZXMgKi8KICAgICAgICAgICAgICAgICAgICAgaWYgKGNvZGUgJiAweDgwMDApCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoYyA+PiAxNiA9PSBFTVBCQVNFID4+IDE2KSB7CiAgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9FTVAoY29kZSwgYykKLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjJjB4ZmZmZik7Ci0gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gaW5zaXplOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoamlzeDAyMTNfZW1wLCBjb2RlLCBjJjB4ZmZmZikpCisgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnNpemU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIGluc2l6ZTsKQEAgLTYxMiwyMCArNjM4LDI3IEBACiAgICAgICAgIGMxID0gY29kZSA+PiA4OwogICAgICAgICBjMiA9IChjb2RlICYgMHhmZikgLSAweDIxOwogCi0gICAgICAgIGlmIChjMSAmIDB4ODApIHsgLyogUGxhbmUgMiAqLwotICAgICAgICAgICAgaWYgKGMxID49IDB4ZWUpIGMxIC09IDB4ODc7Ci0gICAgICAgICAgICBlbHNlIGlmIChjMSA+PSAweGFjIHx8IGMxID09IDB4YTgpIGMxIC09IDB4NDk7Ci0gICAgICAgICAgICBlbHNlIGMxIC09IDB4NDM7CisgICAgICAgIGlmIChjMSAmIDB4ODApIHsKKyAgICAgICAgICAgIC8qIFBsYW5lIDIgKi8KKyAgICAgICAgICAgIGlmIChjMSA+PSAweGVlKQorICAgICAgICAgICAgICAgIGMxIC09IDB4ODc7CisgICAgICAgICAgICBlbHNlIGlmIChjMSA+PSAweGFjIHx8IGMxID09IDB4YTgpCisgICAgICAgICAgICAgICAgYzEgLT0gMHg0OTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjMSAtPSAweDQzOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgLyogUGxhbmUgMSAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIFBsYW5lIDEgKi8KICAgICAgICAgICAgIGMxIC09IDB4MjE7CisgICAgICAgIH0KIAotICAgICAgICBpZiAoYzEgJiAxKSBjMiArPSAweDVlOworICAgICAgICBpZiAoYzEgJiAxKQorICAgICAgICAgICAgYzIgKz0gMHg1ZTsKICAgICAgICAgYzEgPj49IDE7Ci0gICAgICAgIE9VVDEoYzEgKyAoYzEgPCAweDFmID8gMHg4MSA6IDB4YzEpKQotICAgICAgICBPVVQyKGMyICsgKGMyIDwgMHgzZiA/IDB4NDAgOiAweDQxKSkKKyAgICAgICAgT1VUQllURTEoYzEgKyAoYzEgPCAweDFmID8gMHg4MSA6IDB4YzEpKTsKKyAgICAgICAgT1VUQllURTIoYzIgKyAoYzIgPCAweDNmID8gMHg0MCA6IDB4NDEpKTsKIAotICAgICAgICBORVhUKGluc2l6ZSwgMikKKyAgICAgICAgTkVYVChpbnNpemUsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtNjM0LDE2ICs2NjcsMTUgQEAKIERFQ09ERVIoc2hpZnRfamlzXzIwMDQpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxOwogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCi0gICAgICAgIEpJU1gwMjAxX0RFQ09ERShjLCAqKm91dGJ1ZikKKyAgICAgICAgSklTWDAyMDFfREVDT0RFKGMsIHdyaXRlcikKICAgICAgICAgZWxzZSBpZiAoKGMgPj0gMHg4MSAmJiBjIDw9IDB4OWYpIHx8IChjID49IDB4ZTAgJiYgYyA8PSAweGZjKSl7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMjsKLSAgICAgICAgICAgIHVjczRfdCBjb2RlOworICAgICAgICAgICAgUHlfVUNTNCBjb2RlLCBkZWNvZGVkOwogCi0gICAgICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCi0gICAgICAgICAgICBjMiA9IElOMjsKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgICAgICBjMiA9IElOQllURTI7CiAgICAgICAgICAgICBpZiAoYzIgPCAweDQwIHx8IChjMiA+IDB4N2UgJiYgYzIgPCAweDgwKSB8fCBjMiA+IDB4ZmMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKQEAgLTY1NCw1MCArNjg2LDQ3IEBACiAKICAgICAgICAgICAgIGlmIChjMSA8IDB4NWUpIHsgLyogUGxhbmUgMSAqLwogICAgICAgICAgICAgICAgIGMxICs9IDB4MjE7Ci0gICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEoKipvdXRidWYsCisgICAgICAgICAgICAgICAgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEod3JpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjMSwgYzIpCi0gICAgICAgICAgICAgICAgZWxzZSBUUllNQVBfREVDKGppc3gwMjA4LCAqKm91dGJ1ZiwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDEpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgKipvdXRidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBORVhUX09VVCgxKQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIFRSWU1BUF9ERUMoamlzeDAyMTNfMV9lbXAsIGNvZGUsIGMxLCBjMikgewotICAgICAgICAgICAgICAgICAgICBXUklURVVDUzQoRU1QQkFTRSB8IGNvZGUpCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM19wYWlyLCBjb2RlLCBjMSwgYzIpIHsKLSAgICAgICAgICAgICAgICAgICAgV1JJVEUyKGNvZGUgPj4gMTYsIGNvZGUgJiAweGZmZmYpCi0gICAgICAgICAgICAgICAgICAgIE5FWFRfT1VUKDIpCi0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMDgsIGRlY29kZWQsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18xX2JtcCwgZGVjb2RlZCwgYzEsIGMyKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzXzFfZW1wLCBjb2RlLCBjMSwgYzIpKQorICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKEVNUEJBU0UgfCBjb2RlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChUUllNQVBfREVDKGppc3gwMjEzX3BhaXIsIGNvZGUsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIyKGNvZGUgPj4gMTYsIGNvZGUgJiAweGZmZmYpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgTkVYVF9JTigyKQorICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsgLyogUGxhbmUgMiAqLwotICAgICAgICAgICAgICAgIGlmIChjMSA+PSAweDY3KSBjMSArPSAweDA3OwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGMxID49IDB4NjMgfHwgYzEgPT0gMHg1ZikgYzEgLT0gMHgzNzsKLSAgICAgICAgICAgICAgICBlbHNlIGMxIC09IDB4M2Q7CisgICAgICAgICAgICAgICAgaWYgKGMxID49IDB4NjcpCisgICAgICAgICAgICAgICAgICAgIGMxICs9IDB4MDc7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYzEgPj0gMHg2MyB8fCBjMSA9PSAweDVmKQorICAgICAgICAgICAgICAgICAgICBjMSAtPSAweDM3OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYzEgLT0gMHgzZDsKIAotICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKCoqb3V0YnVmLAorICAgICAgICAgICAgICAgIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKHdyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzEsIGMyKQotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2JtcCwgKipvdXRidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMxLCBjMikgOwotICAgICAgICAgICAgICAgIGVsc2UgVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzEsIGMyKSB7Ci0gICAgICAgICAgICAgICAgICAgIFdSSVRFVUNTNChFTVBCQVNFIHwgY29kZSkKLSAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9ERUMoamlzeDAyMTNfMl9ibXAsIGRlY29kZWQsIGMxLCBjMikpCisgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhqaXN4MDIxM18yX2VtcCwgY29kZSwgYzEsIGMyKSkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKEVNUEJBU0UgfCBjb2RlKTsKKyAgICAgICAgICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgICAgIE5FWFRfSU4oMik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDEsIDEpIC8qIEpJUyBYIDAyMDEgKi8KKyAgICAgICAgTkVYVF9JTigxKTsgLyogSklTIFggMDIwMSAqLwogICAgIH0KIAogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19rci5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc19rci5jCmluZGV4IGY1Njk3ZGQuLjZkNmFjYjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3Nfa3IuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX2tyLmMKQEAgLTMzLDUxICszMyw1NiBAQAogCiBFTkNPREVSKGV1Y19rcikKIHsKLSAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICBQeV9VTklDT0RFIGMgPSBJTjE7CisgICAgd2hpbGUgKCppbnBvcyA8IGlubGVuKSB7CisgICAgICAgIFB5X1VDUzQgYyA9IElOQ0hBUjE7CiAgICAgICAgIERCQ0hBUiBjb2RlOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgV1JJVEUxKCh1bnNpZ25lZCBjaGFyKWMpCi0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBXUklURUJZVEUxKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgTkVYVCgxLCAxKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFVDUzRJTlZBTElEKGMpCiAKLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMikKLSAgICAgICAgVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIGlmIChjID4gMHhGRkZGKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKSkKKyAgICAgICAgICAgIDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgaWYgKChjb2RlICYgMHg4MDAwKSA9PSAwKSB7CiAgICAgICAgICAgICAvKiBLUyBYIDEwMDEgY29kZWQgY2hhcmFjdGVyICovCi0gICAgICAgICAgICBPVVQxKChjb2RlID4+IDgpIHwgMHg4MCkKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApCi0gICAgICAgICAgICBORVhUKDEsIDIpCisgICAgICAgICAgICBPVVRCWVRFMSgoY29kZSA+PiA4KSB8IDB4ODApOworICAgICAgICAgICAgT1VUQllURTIoKGNvZGUgJiAweEZGKSB8IDB4ODApOworICAgICAgICAgICAgTkVYVCgxLCAyKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIHsgICAgICAgICAgLyogTWFwcGluZyBpcyBmb3VuZCBpbiBDUDk0OSBleHRlbnNpb24sCi0gICAgICAgICAgICAgICAgICogYnV0IHdlIGVuY29kZSBpdCBpbiBLUyBYIDEwMDE6MTk5OCBBbm5leCAzLAotICAgICAgICAgICAgICAgICAqIG1ha2UtdXAgc2VxdWVuY2UgZm9yIEVVQy1LUi4gKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNYXBwaW5nIGlzIGZvdW5kIGluIENQOTQ5IGV4dGVuc2lvbiwKKyAgICAgICAgICAgICAgIGJ1dCB3ZSBlbmNvZGUgaXQgaW4gS1MgWCAxMDAxOjE5OTggQW5uZXggMywKKyAgICAgICAgICAgICAgIG1ha2UtdXAgc2VxdWVuY2UgZm9yIEVVQy1LUi4gKi8KIAotICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoOCkKKyAgICAgICAgICAgIFJFUVVJUkVfT1VUQlVGKDgpOwogCiAgICAgICAgICAgICAvKiBzeWxsYWJsZSBjb21wb3NpdGlvbiBwcmVjZWRlbmNlICovCi0gICAgICAgICAgICBPVVQxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKQotICAgICAgICAgICAgT1VUMihFVUNLUl9KQU1PX0ZJTExFUikKKyAgICAgICAgICAgIE9VVEJZVEUxKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEUyKEVVQ0tSX0pBTU9fRklMTEVSKTsKIAotICAgICAgICAgICAgLyogQWxsIGNvZGVwb2ludHMgaW4gQ1A5NDkgZXh0ZW5zaW9uIGFyZSBpbiB1bmljb2RlCisgICAgICAgICAgICAvKiBBbGwgY29kZSBwb2ludHMgaW4gQ1A5NDkgZXh0ZW5zaW9uIGFyZSBpbiB1bmljb2RlCiAgICAgICAgICAgICAgKiBIYW5ndWwgU3lsbGFibGUgYXJlYS4gKi8KICAgICAgICAgICAgIGFzc2VydCgweGFjMDAgPD0gYyAmJiBjIDw9IDB4ZDdhMyk7CiAgICAgICAgICAgICBjIC09IDB4YWMwMDsKIAotICAgICAgICAgICAgT1VUMyhFVUNLUl9KQU1PX0ZJUlNUQllURSkKLSAgICAgICAgICAgIE9VVDQodTJjZ2tfY2hvc2VvbmdbYyAvIDU4OF0pCi0gICAgICAgICAgICBORVhUX09VVCg0KQorICAgICAgICAgICAgT1VUQllURTMoRVVDS1JfSkFNT19GSVJTVEJZVEUpOworICAgICAgICAgICAgT1VUQllURTQodTJjZ2tfY2hvc2VvbmdbYyAvIDU4OF0pOworICAgICAgICAgICAgTkVYVF9PVVQoNCk7CiAKLSAgICAgICAgICAgIE9VVDEoRVVDS1JfSkFNT19GSVJTVEJZVEUpCi0gICAgICAgICAgICBPVVQyKHUyY2drX2p1bmdzZW9uZ1soYyAvIDI4KSAlIDIxXSkKLSAgICAgICAgICAgIE9VVDMoRVVDS1JfSkFNT19GSVJTVEJZVEUpCi0gICAgICAgICAgICBPVVQ0KHUyY2drX2pvbmdzZW9uZ1tjICUgMjhdKQotICAgICAgICAgICAgTkVYVCgxLCA0KQorICAgICAgICAgICAgT1VUQllURTEoRVVDS1JfSkFNT19GSVJTVEJZVEUpOworICAgICAgICAgICAgT1VUQllURTIodTJjZ2tfanVuZ3Nlb25nWyhjIC8gMjgpICUgMjFdKTsKKyAgICAgICAgICAgIE9VVEJZVEUzKEVVQ0tSX0pBTU9fRklSU1RCWVRFKTsKKyAgICAgICAgICAgIE9VVEJZVEU0KHUyY2drX2pvbmdzZW9uZ1tjICUgMjhdKTsKKyAgICAgICAgICAgIE5FWFQoMSwgNCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwMiwyNCArMTA3LDIzIEBACiBERUNPREVSKGV1Y19rcikKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKKyAgICAgICAgUkVRVUlSRV9JTkJVRigyKTsKIAogICAgICAgICBpZiAoYyA9PSBFVUNLUl9KQU1PX0ZJUlNUQllURSAmJgotICAgICAgICAgICAgSU4yID09IEVVQ0tSX0pBTU9fRklMTEVSKSB7CisgICAgICAgICAgICBJTkJZVEUyID09IEVVQ0tSX0pBTU9fRklMTEVSKSB7CiAgICAgICAgICAgICAvKiBLUyBYIDEwMDE6MTk5OCBBbm5leCAzIG1ha2UtdXAgc2VxdWVuY2UgKi8KICAgICAgICAgICAgIERCQ0hBUiBjaG8sIGp1bmcsIGpvbmc7CiAKLSAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoOCkKKyAgICAgICAgICAgIFJFUVVJUkVfSU5CVUYoOCk7CiAgICAgICAgICAgICBpZiAoKCppbmJ1ZilbMl0gIT0gRVVDS1JfSkFNT19GSVJTVEJZVEUgfHwKICAgICAgICAgICAgICAgICAoKmluYnVmKVs0XSAhPSBFVUNLUl9KQU1PX0ZJUlNUQllURSB8fAogICAgICAgICAgICAgICAgICgqaW5idWYpWzZdICE9IEVVQ0tSX0pBTU9fRklSU1RCWVRFKQpAQCAtMTQ1LDExICsxNDksMTIgQEAKICAgICAgICAgICAgIGlmIChjaG8gPT0gTk9ORSB8fCBqdW5nID09IE5PTkUgfHwgam9uZyA9PSBOT05FKQogICAgICAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgICAgICBPVVQxKDB4YWMwMCArIGNobyo1ODggKyBqdW5nKjI4ICsgam9uZyk7Ci0gICAgICAgICAgICBORVhUKDgsIDEpCisgICAgICAgICAgICBPVVRDSEFSKDB4YWMwMCArIGNobyo1ODggKyBqdW5nKjI4ICsgam9uZyk7CisgICAgICAgICAgICBORVhUX0lOKDgpOwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgVFJZTUFQX0RFQyhrc3gxMDAxLCAqKm91dGJ1ZiwgYyBeIDB4ODAsIElOMiBeIDB4ODApIHsKLSAgICAgICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhrc3gxMDAxLCBkZWNvZGVkLCBjIF4gMHg4MCwgSU5CWVRFMiBeIDB4ODApKSB7CisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTE2NiwyNyArMTcxLDMxIEBACiAKIEVOQ09ERVIoY3A5NDkpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gSU4xOworICAgIHdoaWxlICgqaW5wb3MgPCBpbmxlbikgeworICAgICAgICBQeV9VQ1M0IGMgPSBJTkNIQVIxOwogICAgICAgICBEQkNIQVIgY29kZTsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIFdSSVRFMSgodW5zaWduZWQgY2hhciljKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgV1JJVEVCWVRFMSgodW5zaWduZWQgY2hhciljKTsKKyAgICAgICAgICAgIE5FWFQoMSwgMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBVQ1M0SU5WQUxJRChjKQogCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpCi0gICAgICAgIFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE9VVDEoKGNvZGUgPj4gOCkgfCAweDgwKQotICAgICAgICBpZiAoY29kZSAmIDB4ODAwMCkKLSAgICAgICAgICAgIE9VVDIoY29kZSAmIDB4RkYpIC8qIE1TQiBzZXQ6IENQOTQ5ICovCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk0OSwgY29kZSwgYykpCisgICAgICAgICAgICA7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIE9VVDIoKGNvZGUgJiAweEZGKSB8IDB4ODApIC8qIE1TQiB1bnNldDoga3MgeCAxMDAxICovCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIE9VVEJZVEUxKChjb2RlID4+IDgpIHwgMHg4MCk7CisgICAgICAgIGlmIChjb2RlICYgMHg4MDAwKQorICAgICAgICAgICAgT1VUQllURTIoY29kZSAmIDB4RkYpOyAvKiBNU0Igc2V0OiBDUDk0OSAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBPVVRCWVRFMigoY29kZSAmIDB4RkYpIHwgMHg4MCk7IC8qIE1TQiB1bnNldDoga3MgeCAxMDAxICovCisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xOTUsMjIgKzIwNCwyNCBAQAogREVDT0RFUihjcDk0OSkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgVFJZTUFQX0RFQyhrc3gxMDAxLCAqKm91dGJ1ZiwgYyBeIDB4ODAsIElOMiBeIDB4ODApOwotICAgICAgICBlbHNlIFRSWU1BUF9ERUMoY3A5NDlleHQsICoqb3V0YnVmLCBjLCBJTjIpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBSRVFVSVJFX0lOQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0RFQyhrc3gxMDAxLCBkZWNvZGVkLCBjIF4gMHg4MCwgSU5CWVRFMiBeIDB4ODApKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhjcDk0OWV4dCwgZGVjb2RlZCwgYywgSU5CWVRFMikpCisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIE5FWFRfSU4oMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0yNTAsMTggKzI2MSwyMCBAQAogCiBFTkNPREVSKGpvaGFiKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCiAgICAgICAgIGlmIChjID49IDB4YWMwMCAmJiBjIDw9IDB4ZDdhMykgewogICAgICAgICAgICAgYyAtPSAweGFjMDA7CkBAIC0yNzIsNyArMjg1LDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChjID49IDB4MzEzMSAmJiBjIDw9IDB4MzE2MykKICAgICAgICAgICAgIGNvZGUgPSB1MmpvaGFiamFtb1tjIC0gMHgzMTMxXTsKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGNwOTQ5LCBjb2RlLCBjKSB7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoY3A5NDksIGNvZGUsIGMpKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMxLCBjMiwgdDI7CiAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCB0MTsKIApAQCAtMjg1LDkgKzI5OCw5IEBACiAgICAgICAgICAgICAgICAgdDEgPSAoYzEgPCAweDRhID8gKGMxIC0gMHgyMSArIDB4MWIyKSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgIChjMSAtIDB4MjEgKyAweDE5NykpOwogICAgICAgICAgICAgICAgIHQyID0gKCh0MSAmIDEpID8gMHg1ZSA6IDApICsgKGMyIC0gMHgyMSk7Ci0gICAgICAgICAgICAgICAgT1VUMSh0MSA+PiAxKQotICAgICAgICAgICAgICAgIE9VVDIodDIgPCAweDRlID8gdDIgKyAweDMxIDogdDIgKyAweDQzKQotICAgICAgICAgICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgICAgICAgICBPVVRCWVRFMSh0MSA+PiAxKTsKKyAgICAgICAgICAgICAgICBPVVRCWVRFMih0MiA8IDB4NGUgPyB0MiArIDB4MzEgOiB0MiArIDB4NDMpOworICAgICAgICAgICAgICAgIE5FWFQoMSwgMik7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCkBAIC0yOTYsOSArMzA5LDkgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIDE7CiAKLSAgICAgICAgT1VUMShjb2RlID4+IDgpCi0gICAgICAgIE9VVDIoY29kZSAmIDB4ZmYpCi0gICAgICAgIE5FWFQoMSwgMikKKyAgICAgICAgT1VUQllURTEoY29kZSA+PiA4KTsKKyAgICAgICAgT1VUQllURTIoY29kZSAmIDB4ZmYpOworICAgICAgICBORVhUKDEsIDIpOwogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMzQ4LDE4ICszNjEsMTcgQEAKIERFQ09ERVIoam9oYWIpCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAgICBjID0gSU4xLCBjMjsKLQotICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTkJZVEUxLCBjMjsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgYzIgPSBJTjI7CisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGMyID0gSU5CWVRFMjsKIAogICAgICAgICBpZiAoYyA8IDB4ZDgpIHsKICAgICAgICAgICAgIC8qIGpvaGFiIGhhbmd1bCAqLwpAQCAtMzgxLDMzICszOTMsMzMgQEAKICAgICAgICAgICAgIGlmIChpX2NobyA9PSBGSUxMKSB7CiAgICAgICAgICAgICAgICAgaWYgKGlfanVuZyA9PSBGSUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChpX2pvbmcgPT0gRklMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIE9VVDEoMHgzMDAwKQorICAgICAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweDMwMDApOwogICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBPVVQxKDB4MzEwMCB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19qb25nc2VvbmdbY19qb25nXSkKKyAgICAgICAgICAgICAgICAgICAgICAgIE9VVENIQVIoMHgzMTAwIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fam9uZ3Nlb25nW2Nfam9uZ10pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlfam9uZyA9PSBGSUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgT1VUMSgweDMxMDAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fanVuZ3Nlb25nW2NfanVuZ10pCisgICAgICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKDB4MzEwMCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgam9oYWJqYW1vX2p1bmdzZW9uZ1tjX2p1bmddKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoaV9qdW5nID09IEZJTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKGlfam9uZyA9PSBGSUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgT1VUMSgweDMxMDAgfAotICAgICAgICAgICAgICAgICAgICAgICAgICBqb2hhYmphbW9fY2hvc2VvbmdbY19jaG9dKQorICAgICAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweDMxMDAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaGFiamFtb19jaG9zZW9uZ1tjX2Nob10pOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBPVVQxKDB4YWMwMCArCi0gICAgICAgICAgICAgICAgICAgICAgICAgaV9jaG8gKiA1ODggKwotICAgICAgICAgICAgICAgICAgICAgICAgIGlfanVuZyAqIDI4ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAoaV9qb25nID09IEZJTEwgPyAwIDogaV9qb25nKSkKKyAgICAgICAgICAgICAgICAgICAgT1VUQ0hBUigweGFjMDAgKworICAgICAgICAgICAgICAgICAgICAgICAgaV9jaG8gKiA1ODggKworICAgICAgICAgICAgICAgICAgICAgICAgaV9qdW5nICogMjggKworICAgICAgICAgICAgICAgICAgICAgICAgKGlfam9uZyA9PSBGSUxMID8gMCA6IGlfam9uZykpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgTkVYVCgyLCAxKQorICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qIEtTIFggMTAwMSBleGNlcHQgaGFuZ3VsIGphbW9zIGFuZCBzeWxsYWJsZXMgKi8KICAgICAgICAgICAgIGlmIChjID09IDB4ZGYgfHwgYyA+IDB4ZjkgfHwKQEAgLTQyNCw5ICs0MzYsMTMgQEAKICAgICAgICAgICAgICAgICB0MSA9IHQxICsgKHQyIDwgMHg1ZSA/IDAgOiAxKSArIDB4MjE7CiAgICAgICAgICAgICAgICAgdDIgPSAodDIgPCAweDVlID8gdDIgOiB0MiAtIDB4NWUpICsgMHgyMTsKIAotICAgICAgICAgICAgICAgIFRSWU1BUF9ERUMoa3N4MTAwMSwgKipvdXRidWYsIHQxLCB0Mik7Ci0gICAgICAgICAgICAgICAgZWxzZSByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgICAgICAgICAgaWYgKFRSWU1BUF9ERUMoa3N4MTAwMSwgZGVjb2RlZCwgdDEsIHQyKSkgeworICAgICAgICAgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgICAgICAgICBORVhUX0lOKDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc190dy5jIGIvTW9kdWxlcy9jamtjb2RlY3MvX2NvZGVjc190dy5jCmluZGV4IDkxNjI5OGQuLjcyMmIyNmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL19jb2RlY3NfdHcuYworKysgYi9Nb2R1bGVzL2Nqa2NvZGVjcy9fY29kZWNzX3R3LmMKQEAgLTEzLDI2ICsxMywzMCBAQAogCiBFTkNPREVSKGJpZzUpCiB7Ci0gICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgUHlfVU5JQ09ERSBjID0gKippbmJ1ZjsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBSRVFVSVJFX09VVEJVRigxKQorICAgICAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSk7CiAgICAgICAgICAgICAqKm91dGJ1ZiA9ICh1bnNpZ25lZCBjaGFyKWM7Ci0gICAgICAgICAgICBORVhUKDEsIDEpCisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQorICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYyk7Ci0gICAgICAgIGVsc2UgcmV0dXJuIDE7CisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweEZGKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIGlmIChUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpKQorICAgICAgICAgICAgOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMTsKKworICAgICAgICBPVVRCWVRFMShjb2RlID4+IDgpOworICAgICAgICBPVVRCWVRFMihjb2RlICYgMHhGRik7CisgICAgICAgIE5FWFQoMSwgMik7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC00MSwxOSArNDUsMTkgQEAKIERFQ09ERVIoYmlnNSkKIHsKICAgICB3aGlsZSAoaW5sZWZ0ID4gMCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSBJTjE7Ci0KLSAgICAgICAgUkVRVUlSRV9PVVRCVUYoMSkKKyAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU5CWVRFMTsKKyAgICAgICAgUHlfVUNTNCBkZWNvZGVkOwogCiAgICAgICAgIGlmIChjIDwgMHg4MCkgewotICAgICAgICAgICAgT1VUMShjKQotICAgICAgICAgICAgTkVYVCgxLCAxKQorICAgICAgICAgICAgT1VUQ0hBUihjKTsKKyAgICAgICAgICAgIE5FWFRfSU4oMSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikKLSAgICAgICAgVFJZTUFQX0RFQyhiaWc1LCAqKm91dGJ1ZiwgYywgSU4yKSB7Ci0gICAgICAgICAgICBORVhUKDIsIDEpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CisgICAgICAgIGlmIChUUllNQVBfREVDKGJpZzUsIGRlY29kZWQsIGMsIElOQllURTIpKSB7CisgICAgICAgICAgICBPVVRDSEFSKGRlY29kZWQpOworICAgICAgICAgICAgTkVYVF9JTigyKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHJldHVybiAxOwogICAgIH0KQEAgLTY4LDI1ICs3MiwzMCBAQAogCiBFTkNPREVSKGNwOTUwKQogewotICAgIHdoaWxlIChpbmxlZnQgPiAwKSB7Ci0gICAgICAgIFB5X1VOSUNPREUgYyA9IElOMTsKKyAgICB3aGlsZSAoKmlucG9zIDwgaW5sZW4pIHsKKyAgICAgICAgUHlfVUNTNCBjID0gSU5DSEFSMTsKICAgICAgICAgREJDSEFSIGNvZGU7CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7Ci0gICAgICAgICAgICBXUklURTEoKHVuc2lnbmVkIGNoYXIpYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIFdSSVRFQllURTEoKHVuc2lnbmVkIGNoYXIpYyk7CisgICAgICAgICAgICBORVhUKDEsIDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgVUNTNElOVkFMSUQoYykKIAotICAgICAgICBSRVFVSVJFX09VVEJVRigyKQotICAgICAgICBUUllNQVBfRU5DKGNwOTUwZXh0LCBjb2RlLCBjKTsKLSAgICAgICAgZWxzZSBUUllNQVBfRU5DKGJpZzUsIGNvZGUsIGMpOwotICAgICAgICBlbHNlIHJldHVybiAxOworICAgICAgICBpZiAoYyA+IDB4RkZGRikKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE9VVDEoY29kZSA+PiA4KQotICAgICAgICBPVVQyKGNvZGUgJiAweEZGKQotICAgICAgICBORVhUKDEsIDIpCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOworICAgICAgICBpZiAoVFJZTUFQX0VOQyhjcDk1MGV4dCwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UgaWYgKFRSWU1BUF9FTkMoYmlnNSwgY29kZSwgYykpCisgICAgICAgICAgICA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOworCisgICAgICAgIE9VVEJZVEUxKGNvZGUgPj4gOCk7CisgICAgICAgIE9VVEJZVEUyKGNvZGUgJiAweEZGKTsKKyAgICAgICAgTkVYVCgxLCAyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKQEAgLTk1LDIzICsxMDQsMjUgQEAKIERFQ09ERVIoY3A5NTApCiB7CiAgICAgd2hpbGUgKGlubGVmdCA+IDApIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBjID0gSU4xOwotCi0gICAgICAgIFJFUVVJUkVfT1VUQlVGKDEpCisgICAgICAgIHVuc2lnbmVkIGNoYXIgYyA9IElOQllURTE7CisgICAgICAgIFB5X1VDUzQgZGVjb2RlZDsKIAogICAgICAgICBpZiAoYyA8IDB4ODApIHsKLSAgICAgICAgICAgIE9VVDEoYykKLSAgICAgICAgICAgIE5FWFQoMSwgMSkKKyAgICAgICAgICAgIE9VVENIQVIoYyk7CisgICAgICAgICAgICBORVhUX0lOKDEpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBSRVFVSVJFX0lOQlVGKDIpCisgICAgICAgIFJFUVVJUkVfSU5CVUYoMik7CiAKLSAgICAgICAgVFJZTUFQX0RFQyhjcDk1MGV4dCwgKipvdXRidWYsIGMsIElOMik7Ci0gICAgICAgIGVsc2UgVFJZTUFQX0RFQyhiaWc1LCAqKm91dGJ1ZiwgYywgSU4yKTsKLSAgICAgICAgZWxzZSByZXR1cm4gMTsKKyAgICAgICAgaWYgKFRSWU1BUF9ERUMoY3A5NTBleHQsIGRlY29kZWQsIGMsIElOQllURTIpKQorICAgICAgICAgICAgT1VUQ0hBUihkZWNvZGVkKTsKKyAgICAgICAgZWxzZSBpZiAoVFJZTUFQX0RFQyhiaWc1LCBkZWNvZGVkLCBjLCBJTkJZVEUyKSkKKyAgICAgICAgICAgIE9VVENIQVIoZGVjb2RlZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAxOwogCi0gICAgICAgIE5FWFQoMiwgMSkKKyAgICAgICAgTkVYVF9JTigyKTsKICAgICB9CiAKICAgICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2FsZ19qaXN4MDIwMS5oIGIvTW9kdWxlcy9jamtjb2RlY3MvYWxnX2ppc3gwMjAxLmgKaW5kZXggMGJjN2RiNS4uMzAzNGI1YSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvYWxnX2ppc3gwMjAxLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvYWxnX2ppc3gwMjAxLmgKQEAgLTEsMjQgKzEsNjUgQEAKICNkZWZpbmUgSklTWDAyMDFfUl9FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPCAweDgwICYmIChjKSAhPSAweDVjICYmIChjKSAhPSAweDdlKSAgICAgICBcCisgICAgaWYgKChjKSA8IDB4ODAgJiYgKGMpICE9IDB4NWMgJiYgKGMpICE9IDB4N2UpIHsgICAgIFwKICAgICAgICAgKGFzc2kpID0gKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA9PSAweDAwYTUpIChhc3NpKSA9IDB4NWM7ICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4MjAzZSkgKGFzc2kpID0gMHg3ZTsKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDAwYTUpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4NWM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKChjKSA9PSAweDIwM2UpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIChhc3NpKSA9IDB4N2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKICNkZWZpbmUgSklTWDAyMDFfS19FTkNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPj0gMHhmZjYxICYmIChjKSA8PSAweGZmOWYpICAgICAgICAgICAgICAgICBcCi0gICAgICAgIChhc3NpKSA9IChjKSAtIDB4ZmVjMDsKKyAgICBpZiAoKGMpID49IDB4ZmY2MSAmJiAoYykgPD0gMHhmZjlmKSB7ICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAoYykgLSAweGZlYzA7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCiAjZGVmaW5lIEpJU1gwMjAxX0VOQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBKSVNYMDIwMV9SX0VOQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGVsc2UgSklTWDAyMDFfS19FTkNPREUoYywgYXNzaSkKIAotI2RlZmluZSBKSVNYMDIwMV9SX0RFQ09ERShjLCBhc3NpKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKChjKSA8IDB4NWMpIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHg1YykgKGFzc2kpID0gMHgwMGE1OyAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKChjKSA8IDB4N2UpIChhc3NpKSA9IChjKTsgICAgICAgICAgICAgICAgICBcCi0gICAgZWxzZSBpZiAoKGMpID09IDB4N2UpIChhc3NpKSA9IDB4MjAzZTsgICAgICAgICAgICAgIFwKLSAgICBlbHNlIGlmICgoYykgPT0gMHg3ZikgKGFzc2kpID0gMHg3ZjsKLSNkZWZpbmUgSklTWDAyMDFfS19ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgoYykgPj0gMHhhMSAmJiAoYykgPD0gMHhkZikgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGFzc2kpID0gMHhmZWMwICsgKGMpOwotI2RlZmluZSBKSVNYMDIwMV9ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgSklTWDAyMDFfUl9ERUNPREUoYywgYXNzaSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBlbHNlIEpJU1gwMjAxX0tfREVDT0RFKGMsIGFzc2kpCisjZGVmaW5lIEpJU1gwMjAxX1JfREVDT0RFX0NIQVIoYywgYXNzaSkgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpIDwgMHg1YykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg1YykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDAwYTU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPCAweDdlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAoYyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDIwM2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg3ZikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoYXNzaSkgPSAweDdmOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIEpJU1gwMjAxX1JfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpIDwgMHg1YykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg1YykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MDBhNSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPCAweDdlKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg3ZSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4MjAzZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIGlmICgoYykgPT0gMHg3ZikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4N2YpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCisjZGVmaW5lIEpJU1gwMjAxX0tfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGMpID49IDB4YTEgJiYgKGMpIDw9IDB4ZGYpIHsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBPVVRDSEFSKDB4ZmVjMCArIChjKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorI2RlZmluZSBKSVNYMDIwMV9LX0RFQ09ERV9DSEFSKGMsIGFzc2kpICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjKSA+PSAweGExICYmIChjKSA8PSAweGRmKSB7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHhmZWMwICsgKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKyNkZWZpbmUgSklTWDAyMDFfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEpJU1gwMjAxX1JfREVDT0RFKGMsIHdyaXRlcikgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSBKSVNYMDIwMV9LX0RFQ09ERShjLCB3cml0ZXIpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9jamtjb2RlY3MuaCBiL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oCmluZGV4IGFiMDY4MmEuLmQxNWNjZmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL2Nqa2NvZGVjcy5oCkBAIC0xMiwxMCArMTIsMTAgQEAKICNpbmNsdWRlICJtdWx0aWJ5dGVjb2RlYy5oIgogCiAKLS8qIGEgdW5pY29kZSAidW5kZWZpbmVkIiBjb2RlcG9pbnQgKi8KKy8qIGEgdW5pY29kZSAidW5kZWZpbmVkIiBjb2RlIHBvaW50ICovCiAjZGVmaW5lIFVOSUlOViAgMHhGRkZFCiAKLS8qIGludGVybmFsLXVzZSBEQkNTIGNvZGVwb2ludHMgd2hpY2ggYXJlbid0IHVzZWQgYnkgYW55IGNoYXJzZXRzICovCisvKiBpbnRlcm5hbC11c2UgREJDUyBjb2RlIHBvaW50cyB3aGljaCBhcmVuJ3QgdXNlZCBieSBhbnkgY2hhcnNldHMgKi8KICNkZWZpbmUgTk9DSEFSICAweEZGRkYKICNkZWZpbmUgTVVMVElDICAweEZGRkUKICNkZWZpbmUgREJDSU5WICAweEZGRkQKQEAgLTMzLDcgKzMzLDcgQEAKIHR5cGVkZWYgc3RydWN0IGRiY3NfaW5kZXggZGVjb2RlX21hcDsKIAogc3RydWN0IHdpZGVkYmNzX2luZGV4IHsKLSAgICBjb25zdCB1Y3M0X3QgKm1hcDsKKyAgICBjb25zdCBQeV9VQ1M0ICptYXA7CiAgICAgdW5zaWduZWQgY2hhciBib3R0b20sIHRvcDsKIH07CiB0eXBlZGVmIHN0cnVjdCB3aWRlZGJjc19pbmRleCB3aWRlZGVjb2RlX21hcDsKQEAgLTU2LDcgKzU2LDcgQEAKIH07CiAKIHN0cnVjdCBwYWlyX2VuY29kZW1hcCB7Ci0gICAgdWNzNF90IHVuaXNlcTsKKyAgICBQeV9VQ1M0IHVuaXNlcTsKICAgICBEQkNIQVIgY29kZTsKIH07CiAKQEAgLTcyLDcgKzcyLDggQEAKICNkZWZpbmUgRU5DT0RFUihlbmNvZGluZykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2VuY29kZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpjb25maWcsICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgUHlfVU5JQ09ERSAqKmluYnVmLCBQeV9zc2l6ZV90IGlubGVmdCwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaW50IGtpbmQsIHZvaWQgKmRhdGEsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X3NzaXplX3QgKmlucG9zLCBQeV9zc2l6ZV90IGlubGVuLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCwgaW50IGZsYWdzKQogI2RlZmluZSBFTkNPREVSX1JFU0VUKGVuY29kaW5nKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIHN0YXRpYyBQeV9zc2l6ZV90IGVuY29kaW5nIyNfZW5jb2RlX3Jlc2V0KCAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtODYsMTIwICs4NywxMTggQEAKICAgICBzdGF0aWMgUHlfc3NpemVfdCBlbmNvZGluZyMjX2RlY29kZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpjb25maWcsICAgICAgICAgICAgICAgIFwKICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKmluYnVmLCBQeV9zc2l6ZV90IGlubGVmdCwgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0KQorICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiAjZGVmaW5lIERFQ09ERVJfUkVTRVQoZW5jb2RpbmcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgc3RhdGljIFB5X3NzaXplX3QgZW5jb2RpbmcjI19kZWNvZGVfcmVzZXQoICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICpzdGF0ZSwgY29uc3Qgdm9pZCAqY29uZmlnKQogCi0jaWYgUHlfVU5JQ09ERV9TSVpFID09IDQKLSNkZWZpbmUgVUNTNElOVkFMSUQoY29kZSkgICAgICAgXAotICAgIGlmICgoY29kZSkgPiAweEZGRkYpICAgICAgICBcCi0gICAgcmV0dXJuIDE7Ci0jZWxzZQotI2RlZmluZSBVQ1M0SU5WQUxJRChjb2RlKSAgICAgICBcCi0gICAgaWYgKDApIDsKLSNlbmRpZgotCiAjZGVmaW5lIE5FWFRfSU4oaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCppbmJ1ZikgKz0gKGkpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKGlubGVmdCkgLT0gKGkpOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKmluYnVmKSArPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoaW5sZWZ0KSAtPSAoaSk7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE5FWFRfSU5DSEFSKGkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICgqaW5wb3MpICs9IChpKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKICNkZWZpbmUgTkVYVF9PVVQobykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKm91dGJ1ZikgKz0gKG8pOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAob3V0bGVmdCkgLT0gKG8pOworICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZikgKz0gKG8pOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAob3V0bGVmdCkgLT0gKG8pOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAjZGVmaW5lIE5FWFQoaSwgbykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgTkVYVF9JTihpKSBORVhUX09VVChvKQorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBORVhUX0lOQ0hBUihpKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBORVhUX09VVChvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgUkVRVUlSRV9JTkJVRihuKSAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoaW5sZWZ0IDwgKG4pKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIE1CRVJSX1RPT0ZFVzsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGlubGVmdCA8IChuKSkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09GRVc7ICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCiAjZGVmaW5lIFJFUVVJUkVfT1VUQlVGKG4pICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKG91dGxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBNQkVSUl9UT09TTUFMTDsKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKG91dGxlZnQgPCAobikpICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBNQkVSUl9UT09TTUFMTDsgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCi0jZGVmaW5lIElOMSAoKCppbmJ1ZilbMF0pCi0jZGVmaW5lIElOMiAoKCppbmJ1ZilbMV0pCi0jZGVmaW5lIElOMyAoKCppbmJ1ZilbMl0pCi0jZGVmaW5lIElONCAoKCppbmJ1ZilbM10pCisjZGVmaW5lIElOQllURTEgKCgqaW5idWYpWzBdKQorI2RlZmluZSBJTkJZVEUyICgoKmluYnVmKVsxXSkKKyNkZWZpbmUgSU5CWVRFMyAoKCppbmJ1ZilbMl0pCisjZGVmaW5lIElOQllURTQgKCgqaW5idWYpWzNdKQogCi0jZGVmaW5lIE9VVDEoYykgKCgqb3V0YnVmKVswXSkgPSAoYyk7Ci0jZGVmaW5lIE9VVDIoYykgKCgqb3V0YnVmKVsxXSkgPSAoYyk7Ci0jZGVmaW5lIE9VVDMoYykgKCgqb3V0YnVmKVsyXSkgPSAoYyk7Ci0jZGVmaW5lIE9VVDQoYykgKCgqb3V0YnVmKVszXSkgPSAoYyk7CisjZGVmaW5lIElOQ0hBUjEgKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsICppbnBvcykpCisjZGVmaW5lIElOQ0hBUjIgKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsICppbnBvcyArIDEpKQogCi0jZGVmaW5lIFdSSVRFMShjMSkgICAgICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigxKSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7Ci0jZGVmaW5lIFdSSVRFMihjMSwgYzIpICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigyKSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gKGMyKTsKLSNkZWZpbmUgV1JJVEUzKGMxLCBjMiwgYzMpICAgICAgXAotICAgIFJFUVVJUkVfT1VUQlVGKDMpICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVsyXSA9IChjMyk7Ci0jZGVmaW5lIFdSSVRFNChjMSwgYzIsIGMzLCBjNCkgIFwKLSAgICBSRVFVSVJFX09VVEJVRig0KSAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCi0gICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKLSAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOyAgICAgICAgXAotICAgICgqb3V0YnVmKVszXSA9IChjNCk7CisjZGVmaW5lIE9VVENIQVIoYykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcih3cml0ZXIsIChjKSkgPCAwKSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfRVhDRVBUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotIyBkZWZpbmUgV1JJVEVVQ1M0KGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBSRVFVSVJFX09VVEJVRigyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKCpvdXRidWYpWzBdID0gMHhkODAwICsgKCgoYykgLSAweDEwMDAwKSA+PiAxMCk7ICAgICAgICAgICAgXAotICAgICgqb3V0YnVmKVsxXSA9IDB4ZGMwMCArICgoKGMpIC0gMHgxMDAwMCkgJiAweDNmZik7ICAgICAgICAgIFwKLSAgICBORVhUX09VVCgyKQotI2Vsc2UKLSMgZGVmaW5lIFdSSVRFVUNTNChjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgUkVRVUlSRV9PVVRCVUYoMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICoqb3V0YnVmID0gKFB5X1VOSUNPREUpKGMpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBORVhUX09VVCgxKQotI2VuZGlmCisjZGVmaW5lIE9VVENIQVIyKGMxLCBjMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgX2MxID0gKGMxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgX2MyID0gKGMyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCAyLCBQeV9NQVgoX2MxLCBjMikpIDwgMCkgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTUJFUlJfRVhDRVBUSU9OOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsIF9jMSk7ICAgICBcCisgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MgKyAxLCBfYzIpOyBcCisgICAgICAgIHdyaXRlci0+cG9zICs9IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBPVVRCWVRFMShjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzBdKSA9IChjKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgT1VUQllURTIoYykgXAorICAgIGRvIHsgKCgqb3V0YnVmKVsxXSkgPSAoYyk7IH0gd2hpbGUgKDApCisjZGVmaW5lIE9VVEJZVEUzKGMpIFwKKyAgICBkbyB7ICgoKm91dGJ1ZilbMl0pID0gKGMpOyB9IHdoaWxlICgwKQorI2RlZmluZSBPVVRCWVRFNChjKSBcCisgICAgZG8geyAoKCpvdXRidWYpWzNdKSA9IChjKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBXUklURUJZVEUxKGMxKSAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRigxKTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFdSSVRFQllURTIoYzEsIGMyKSAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFJFUVVJUkVfT1VUQlVGKDIpOyAgICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVswXSA9IChjMSk7ICAgICAgICBcCisgICAgICAgICgqb3V0YnVmKVsxXSA9IChjMik7ICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgV1JJVEVCWVRFMyhjMSwgYzIsIGMzKSAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUkVRVUlSRV9PVVRCVUYoMyk7ICAgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzBdID0gKGMxKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzFdID0gKGMyKTsgICAgICAgIFwKKyAgICAgICAgKCpvdXRidWYpWzJdID0gKGMzKTsgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBXUklURUJZVEU0KGMxLCBjMiwgYzMsIGM0KSAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBSRVFVSVJFX09VVEJVRig0KTsgICAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMF0gPSAoYzEpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMV0gPSAoYzIpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbMl0gPSAoYzMpOyAgICAgICAgXAorICAgICAgICAoKm91dGJ1ZilbM10gPSAoYzQpOyAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCiAKICNkZWZpbmUgX1RSWU1BUF9FTkMobSwgYXNzaSwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgKChtKS0+bWFwICE9IE5VTEwgJiYgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgXAogICAgICAgICAodmFsKTw9IChtKS0+dG9wICYmICgoYXNzaSkgPSAobSktPm1hcFsodmFsKSAtICAgICAgICAgIFwKICAgICAgICAgKG0pLT5ib3R0b21dKSAhPSBOT0NIQVIpCi0jZGVmaW5lIFRSWU1BUF9FTkNfQ09ORChjaGFyc2V0LCBhc3NpLCB1bmkpICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBUUllNQVBfRU5DKGNoYXJzZXQsIGFzc2ksIHVuaSkgICAgICAgICAgICAgICAgICAgICBcCiAgICAgX1RSWU1BUF9FTkMoJmNoYXJzZXQjI19lbmNtYXBbKHVuaSkgPj4gOF0sIGFzc2ksICh1bmkpICYgMHhmZikKLSNkZWZpbmUgVFJZTUFQX0VOQyhjaGFyc2V0LCBhc3NpLCB1bmkpICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgVFJZTUFQX0VOQ19DT05EKGNoYXJzZXQsIGFzc2ksIHVuaSkKIAotI2RlZmluZSBfVFJZTUFQX0RFQyhtLCBhc3NpLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICBcCi0gICAgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgKChhc3NpKSA9IChtKS0+bWFwWyh2YWwpIC0gICAgICAgICAgXAotICAgICAgICAobSktPmJvdHRvbV0pICE9IFVOSUlOVikKLSNkZWZpbmUgVFJZTUFQX0RFQyhjaGFyc2V0LCBhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgX1RSWU1BUF9ERUMoJmNoYXJzZXQjI19kZWNtYXBbYzFdLCBhc3NpLCBjMikKLQotI2RlZmluZSBfVFJZTUFQX0VOQ19NUExBTkUobSwgYXNzcGxhbmUsIGFzc2hpLCBhc3NsbywgdmFsKSAgICAgIFwKLSAgICAoKG0pLT5tYXAgIT0gTlVMTCAmJiAodmFsKSA+PSAobSktPmJvdHRvbSAmJiAgICAgICAgICAgICAgICBcCi0gICAgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAoKGFzc3BsYW5lKSA9IChtKS0+bWFwWygodmFsKSAtIChtKS0+Ym90dG9tKSozXSkgIT0gMCAmJiBcCi0gICAgICAgICgoKGFzc2hpKSA9IChtKS0+bWFwWygodmFsKSAtIChtKS0+Ym90dG9tKSozICsgMV0pLCAxKSAmJiBcCi0gICAgICAgICgoKGFzc2xvKSA9IChtKS0+bWFwWygodmFsKSAtIChtKS0+Ym90dG9tKSozICsgMl0pLCAxKSkKLSNkZWZpbmUgVFJZTUFQX0VOQ19NUExBTkUoY2hhcnNldCwgYXNzcGxhbmUsIGFzc2hpLCBhc3NsbywgdW5pKSBcCi0gICAgaWYgX1RSWU1BUF9FTkNfTVBMQU5FKCZjaGFyc2V0IyNfZW5jbWFwWyh1bmkpID4+IDhdLCBcCi0gICAgICAgICAgICAgICAgICAgICAgIGFzc3BsYW5lLCBhc3NoaSwgYXNzbG8sICh1bmkpICYgMHhmZikKLSNkZWZpbmUgVFJZTUFQX0RFQ19NUExBTkUoY2hhcnNldCwgYXNzaSwgcGxhbmUsIGMxLCBjMikgICAgICAgICBcCi0gICAgaWYgX1RSWU1BUF9ERUMoJmNoYXJzZXQjI19kZWNtYXBbcGxhbmVdW2MxXSwgYXNzaSwgYzIpCi0KLSNpZiBQeV9VTklDT0RFX1NJWkUgPT0gMgotI2RlZmluZSBERUNPREVfU1VSUk9HQVRFKGMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYyA+PiAxMCA9PSAweGQ4MDAgPj4gMTApIHsgLyogaGlnaCBzdXJyb2dhdGUgKi8gICAgICAgICBcCi0gICAgICAgIFJFUVVJUkVfSU5CVUYoMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoSU4yID4+IDEwID09IDB4ZGMwMCA+PiAxMCkgeyAvKiBsb3cgc3Vycm9nYXRlICovIFwKLSAgICAgICAgICAgIGMgPSAweDEwMDAwICsgKCh1Y3M0X3QpKGMgLSAweGQ4MDApIDw8IDEwKSArIFwKLSAgICAgICAgICAgICgodWNzNF90KShJTjIpIC0gMHhkYzAwKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0KLSNkZWZpbmUgR0VUX0lOU0laRShjKSAgICgoYykgPiAweGZmZmYgPyAyIDogMSkKLSNlbHNlCi0jZGVmaW5lIERFQ09ERV9TVVJST0dBVEUoYykgezt9Ci0jZGVmaW5lIEdFVF9JTlNJWkUoYykgICAxCi0jZW5kaWYKKyNkZWZpbmUgX1RSWU1BUF9ERUMobSwgYXNzaSwgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgobSktPm1hcCAhPSBOVUxMICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgKHZhbCkgPj0gKG0pLT5ib3R0b20gJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICh2YWwpPD0gKG0pLT50b3AgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAoKGFzc2kpID0gKG0pLT5tYXBbKHZhbCkgLSAobSktPmJvdHRvbV0pICE9IFVOSUlOVikKKyNkZWZpbmUgVFJZTUFQX0RFQyhjaGFyc2V0LCBhc3NpLCBjMSwgYzIpICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9UUllNQVBfREVDKCZjaGFyc2V0IyNfZGVjbWFwW2MxXSwgYXNzaSwgYzIpCiAKICNkZWZpbmUgQkVHSU5fTUFQUElOR1NfTElTVCBzdGF0aWMgY29uc3Qgc3RydWN0IGRiY3NfbWFwIF9tYXBwaW5nX2xpc3RbXSA9IHsKICNkZWZpbmUgTUFQUElOR19FTkNPTkxZKGVuYykgeyNlbmMsICh2b2lkKillbmMjI19lbmNtYXAsIE5VTEx9LApAQCAtMzI0LDcgKzMyMyw3IEBACiAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBhaXJfZW5jb2RlbWFwICpoYXlzdGFjaywgaW50IGhheXN0YWNrc2l6ZSkKIHsKICAgICBpbnQgcG9zLCBtaW4sIG1heDsKLSAgICB1Y3M0X3QgdmFsdWUgPSBib2R5IDw8IDE2IHwgbW9kaWZpZXI7CisgICAgUHlfVUNTNCB2YWx1ZSA9IGJvZHkgPDwgMTYgfCBtb2RpZmllcjsKIAogICAgIG1pbiA9IDA7CiAgICAgbWF4ID0gaGF5c3RhY2tzaXplOwpAQCAtMzU5LDcgKzM1OCw3IEBACiB7CiAgICAgUHlPYmplY3QgKm8sICptb2Q7CiAKLSAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoKGNoYXIgKiltb2RuYW1lKTsKKyAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUobW9kbmFtZSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9lbXVfamlzeDAyMTNfMjAwMC5oCmluZGV4IDQyMjdmYjIuLmE1ZDVhNzAgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL2VtdV9qaXN4MDIxM18yMDAwLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvZW11X2ppc3gwMjEzXzIwMDAuaApAQCAtMiw3ICsyLDcgQEAKICAqIHN0YW5kYXJkcy4gKi8KIAogI2lmbmRlZiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQKLSNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEIDEKKyMgIGRlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0lOVkFMSUQgMQogI2VuZGlmCiAKICNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9CTVAoYXNzaSwgYykgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTExLDE3ICsxMSwyMCBAQAogICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg1MjVEIHx8IChjKSA9PSAweDU0MUUgfHwgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg1NjUzIHx8IChjKSA9PSAweDU5RjggfHwgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg1QzVCIHx8IChjKSA9PSAweDVFNzcgfHwgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg3NjI2IHx8IChjKSA9PSAweDdFNkIpKSAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAoYykgPT0gMHg3NjI2IHx8IChjKSA9PSAweDdFNkIpKSB7ICAgICAgICAgICAgICAgICAgXAogICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEOyAgICAgICAgICAgICAgICAgICAgXAotICAgIGVsc2UgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4OUIxRCkgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMpID09IDB4OUIxRCkgeyAgICAgICAgICAgICAgICAgXAogICAgICAgICAoYXNzaSkgPSAweDgwMDAgfCAweDdkM2I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2RlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfRU5DT0RFX0VNUChhc3NpLCBjKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDIwQjlGKSAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEOworICAgIGlmIChjb25maWcgPT0gKHZvaWQgKikyMDAwICYmIChjKSA9PSAweDIwQjlGKSB7ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gRU1VTEFURV9KSVNYMDIxM18yMDAwX0VOQ09ERV9JTlZBTElEOyAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KIAogI2lmbmRlZiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQKLSNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9JTlZBTElEIDIKKyMgIGRlZmluZSBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQgMgogI2VuZGlmCiAKICNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTEoYXNzaSwgYzEsIGMyKSAgICAgICAgICAgICAgIFwKQEAgLTM1LDkgKzM4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3QikgfHwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3QykgfHwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3RCkgfHwgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3RSkpKSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAoKGMxKSA9PSAweDdFICYmIChjMikgPT0gMHg3RSkpKSB7ICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJldHVybiBFTVVMQVRFX0pJU1gwMjEzXzIwMDBfREVDT0RFX0lOVkFMSUQ7ICAgICAgICAgICAgICAgICAgICBcCisgICAgfQogCi0jZGVmaW5lIEVNVUxBVEVfSklTWDAyMTNfMjAwMF9ERUNPREVfUExBTkUyKGFzc2ksIGMxLCBjMikgICAgICAgICAgICAgICBcCi0gICAgaWYgKGNvbmZpZyA9PSAodm9pZCAqKTIwMDAgJiYgKGMxKSA9PSAweDdEICYmIChjMikgPT0gMHgzQikgICAgICAgICBcCi0gICAgICAgIChhc3NpKSA9IDB4OUIxRDsKKyNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTIod3JpdGVyLCBjMSwgYzIpICAgICAgICAgICAgIFwKKyAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYzEpID09IDB4N0QgJiYgKGMyKSA9PSAweDNCKSB7ICAgICAgIFwKKyAgICAgICAgT1VUQ0hBUigweDlCMUQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKyNkZWZpbmUgRU1VTEFURV9KSVNYMDIxM18yMDAwX0RFQ09ERV9QTEFORTJfQ0hBUihhc3NpLCBjMSwgYzIpICAgICAgICAgIFwKKyAgICBpZiAoY29uZmlnID09ICh2b2lkICopMjAwMCAmJiAoYzEpID09IDB4N0QgJiYgKGMyKSA9PSAweDNCKSB7ICAgICAgIFwKKyAgICAgICAgKGFzc2kpID0gMHg5QjFEOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19jbi5oCmluZGV4IGE2ZGNlYmYuLjFmOGMyOTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2NuLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfY24uaApAQCAtNDA0OSw3ICs0MDQ5LDcgQEAKIAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IF9nYjE4MDMwX3RvX3VuaWJtcF9yYW5nZXMgewotICAgIFB5X1VOSUNPREUgICBmaXJzdCwgbGFzdDsKKyAgICBQeV9VQ1M0ICAgZmlyc3QsIGxhc3Q7CiAgICAgREJDSEFSICAgICAgIGJhc2U7CiB9IGdiMTgwMzBfdG9fdW5pYm1wX3Jhbmdlc1tdID0gewogezEyOCwxNjMsMH0sezE2NSwxNjYsMzZ9LHsxNjksMTc1LDM4fSx7MTc4LDE4Miw0NX0sezE4NCwyMTQsNTB9LHsyMTYsMjIzLDgxfSx7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tYXBwaW5nc19qaXN4MDIxM19wYWlyLmgKaW5kZXggZWRhOGU5ZS4uNzI5ZTRiYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jamtjb2RlY3MvbWFwcGluZ3NfamlzeDAyMTNfcGFpci5oCisrKyBiL01vZHVsZXMvY2prY29kZWNzL21hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaApAQCAtMyw3ICszLDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2lkZWRiY3NfaW5kZXggKmppc3gwMjEzX3BhaXJfZGVjbWFwOwogc3RhdGljIGNvbnN0IHN0cnVjdCBwYWlyX2VuY29kZW1hcCAqamlzeDAyMTNfcGFpcl9lbmNtYXA7CiAjZWxzZQotc3RhdGljIGNvbnN0IHVjczRfdCBfX2ppc3gwMjEzX3BhaXJfZGVjbWFwWzQ5XSA9IHsKK3N0YXRpYyBjb25zdCBQeV9VQ1M0IF9famlzeDAyMTNfcGFpcl9kZWNtYXBbNDldID0gewogODEwMjM0MDEwLDgxMDM2NTA4Miw4MTA0OTYxNTQsODEwNjI3MjI2LDgxMDc1ODI5OCw4MTY1MjU0NjYsODE2NjU2NTM4LAogODE2Nzg3NjEwLDgxNjkxODY4Miw4MTcwNDk3NTQsODE3NTc0MDQyLDgxODE2Mzg2Niw4MTg0MjYwMTAsODM4MjgzNDE4LAogMTUwNzQwNDgsVSxVLFUsMzkwNjAyMjQsMzkwNjAyMjUsNDI3MzAyNDAsNDI3MzAyNDEsMzkzODc5MDQsMzkzODc5MDUsMzk0NTM0NDAsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuYwppbmRleCBjMDMyY2RiLi5lMGQ5YjY3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5jCisrKyBiL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmMKQEAgLTEwLDE1ICsxMCwxNiBAQAogI2luY2x1ZGUgIm11bHRpYnl0ZWNvZGVjLmgiCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBjb25zdCBQeV9VTklDT0RFICAgICppbmJ1ZiwgKmluYnVmX3RvcCwgKmluYnVmX2VuZDsKKyAgICBQeU9iamVjdCAgICAgICAgICAgICppbm9iajsKKyAgICBQeV9zc2l6ZV90ICAgICAgICAgIGlucG9zLCBpbmxlbjsKICAgICB1bnNpZ25lZCBjaGFyICAgICAgICpvdXRidWYsICpvdXRidWZfZW5kOwogICAgIFB5T2JqZWN0ICAgICAgICAgICAgKmV4Y29iaiwgKm91dG9iajsKIH0gTXVsdGlieXRlRW5jb2RlQnVmZmVyOwogCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqaW5idWYsICppbmJ1Zl90b3AsICppbmJ1Zl9lbmQ7Ci0gICAgUHlfVU5JQ09ERSAgICAgICAgICAqb3V0YnVmLCAqb3V0YnVmX2VuZDsKLSAgICBQeU9iamVjdCAgICAgICAgICAgICpleGNvYmosICpvdXRvYmo7CisgICAgUHlPYmplY3QgICAgICAgICAgICAqZXhjb2JqOworICAgIF9QeVVuaWNvZGVXcml0ZXIgICAgd3JpdGVyOwogfSBNdWx0aWJ5dGVEZWNvZGVCdWZmZXI7CiAKIFB5RG9jX1NUUlZBUihNdWx0aWJ5dGVDb2RlY19FbmNvZGVfX2RvY19fLApAQCAtNDUsMTEgKzQ2LDEzIEBACiBzdGF0aWMgY2hhciAqc3RyZWFta3dhcmdsaXN0W10gPSB7InN0cmVhbSIsICJlcnJvcnMiLCBOVUxMfTsKIAogc3RhdGljIFB5T2JqZWN0ICptdWx0aWJ5dGVjb2RlY19lbmNvZGUoTXVsdGlieXRlQ29kZWMgKiwKLSAgICAgICAgICAgICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqLCBjb25zdCBQeV9VTklDT0RFICoqLCBQeV9zc2l6ZV90LAorICAgICAgICAgICAgICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlICosIFB5T2JqZWN0ICosIFB5X3NzaXplX3QgKiwKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqLCBpbnQpOwogCiAjZGVmaW5lIE1CRU5DX1JFU0VUICAgICBNQkVOQ19NQVg8PDEgLyogcmVzZXQgYWZ0ZXIgYW4gZW5jb2Rpbmcgc2Vzc2lvbiAqLwogCitfUHlfSURFTlRJRklFUih3cml0ZSk7CisKIHN0YXRpYyBQeU9iamVjdCAqCiBtYWtlX3R1cGxlKFB5T2JqZWN0ICpvYmplY3QsIFB5X3NzaXplX3QgbGVuKQogewpAQCAtMTc5LDggKzE4MiwxMCBAQAogICAgIG9yZ3NpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKICAgICBpbmNzaXplID0gKGVzaXplIDwgKG9yZ3NpemUgPj4gMSkgPyAob3Jnc2l6ZSA+PiAxKSB8IDEgOiBlc2l6ZSk7CiAKLSAgICBpZiAob3Jnc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gaW5jc2l6ZSkKKyAgICBpZiAob3Jnc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gaW5jc2l6ZSkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmYnVmLT5vdXRvYmosIG9yZ3NpemUgKyBpbmNzaXplKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTkxLDM0ICsxOTYsMTEgQEAKIAogICAgIHJldHVybiAwOwogfQotI2RlZmluZSBSRVFVSVJFX0VOQ09ERUJVRkZFUihidWYsIHMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICgocykgPCAxIHx8IChidWYpLT5vdXRidWYgKyAocykgPiAoYnVmKS0+b3V0YnVmX2VuZCkgICAgICAgICAgICAgXAorI2RlZmluZSBSRVFVSVJFX0VOQ09ERUJVRkZFUihidWYsIHMpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICgocykgPCAwIHx8IChzKSA+IChidWYpLT5vdXRidWZfZW5kIC0gKGJ1ZiktPm91dGJ1ZikgICAgICAgICAgICAgXAogICAgICAgICBpZiAoZXhwYW5kX2VuY29kZWJ1ZmZlcihidWYsIHMpID09IC0xKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfQotCi1zdGF0aWMgaW50Ci1leHBhbmRfZGVjb2RlYnVmZmVyKE11bHRpYnl0ZURlY29kZUJ1ZmZlciAqYnVmLCBQeV9zc2l6ZV90IGVzaXplKQotewotICAgIFB5X3NzaXplX3Qgb3JncG9zLCBvcmdzaXplOwotCi0gICAgb3JncG9zID0gKFB5X3NzaXplX3QpKGJ1Zi0+b3V0YnVmIC0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLT5vdXRvYmopKTsKLSAgICBvcmdzaXplID0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLSAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLT5vdXRvYmosIG9yZ3NpemUgKyAoCi0gICAgICAgIGVzaXplIDwgKG9yZ3NpemUgPj4gMSkgPyAob3Jnc2l6ZSA+PiAxKSB8IDEgOiBlc2l6ZSkpID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBidWYtPm91dGJ1ZiA9IFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi0+b3V0b2JqKSArIG9yZ3BvczsKLSAgICBidWYtPm91dGJ1Zl9lbmQgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYtPm91dG9iaikKLSAgICAgICAgICAgICAgICAgICAgICArIFB5VW5pY29kZV9HRVRfU0laRShidWYtPm91dG9iaik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLSNkZWZpbmUgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCBzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKHMpIDwgMSB8fCAoYnVmKS0+b3V0YnVmICsgKHMpID4gKGJ1ZiktPm91dGJ1Zl9lbmQpICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKGV4cGFuZF9kZWNvZGVidWZmZXIoYnVmLCBzKSA9PSAtMSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KK30gd2hpbGUoMCkKIAogCiAvKioKQEAgLTI0Nyw3ICsyMjksNyBAQAogICAgICAgICAgICAgcmV0dXJuIDA7IC8qIHJldHJ5IGl0ICovCiAgICAgICAgIGNhc2UgTUJFUlJfVE9PRkVXOgogICAgICAgICAgICAgcmVhc29uID0gImluY29tcGxldGUgbXVsdGlieXRlIHNlcXVlbmNlIjsKLSAgICAgICAgICAgIGVzaXplID0gKFB5X3NzaXplX3QpKGJ1Zi0+aW5idWZfZW5kIC0gYnVmLT5pbmJ1Zik7CisgICAgICAgICAgICBlc2l6ZSA9IChQeV9zc2l6ZV90KWJ1Zi0+aW5wb3M7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNQkVSUl9JTlRFUk5BTDoKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC0yNjEsMTQgKzI0MywyNCBAQAogICAgIH0KIAogICAgIGlmIChlcnJvcnMgPT0gRVJST1JfUkVQTEFDRSkgewotICAgICAgICBjb25zdCBQeV9VTklDT0RFIHJlcGxjaGFyID0gJz8nLCAqaW5idWYgPSAmcmVwbGNoYXI7CisgICAgICAgIFB5T2JqZWN0ICpyZXBsY2hhcjsKICAgICAgICAgUHlfc3NpemVfdCByOworICAgICAgICBQeV9zc2l6ZV90IGlucG9zOworICAgICAgICBpbnQga2luZDsKKyAgICAgICAgdm9pZCAqZGF0YTsKIAorICAgICAgICByZXBsY2hhciA9IFB5VW5pY29kZV9Gcm9tT3JkaW5hbCgnPycpOworICAgICAgICBpZiAocmVwbGNoYXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQocmVwbGNoYXIpOworICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEocmVwbGNoYXIpOworCisgICAgICAgIGlucG9zID0gMDsKICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgUHlfc3NpemVfdCBvdXRsZWZ0OworICAgICAgICAgICAgUHlfc3NpemVfdCBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+b3V0YnVmX2VuZCAtIGJ1Zi0+b3V0YnVmKTsKIAotICAgICAgICAgICAgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYtPm91dGJ1Zl9lbmQgLSBidWYtPm91dGJ1Zik7Ci0gICAgICAgICAgICByID0gY29kZWMtPmVuY29kZShzdGF0ZSwgY29kZWMtPmNvbmZpZywgJmluYnVmLCAxLAorICAgICAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kLCBkYXRhLCAmaW5wb3MsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnVmLT5vdXRidWYsIG91dGxlZnQsIDApOwogICAgICAgICAgICAgaWYgKHIgPT0gTUJFUlJfVE9PU01BTEwpIHsKICAgICAgICAgICAgICAgICBSRVFVSVJFX0VOQ09ERUJVRkZFUihidWYsIC0xKTsKQEAgLTI3OCwyNSArMjcwLDI3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAorICAgICAgICBQeV9ERUNSRUYocmVwbGNoYXIpOworCiAgICAgICAgIGlmIChyICE9IDApIHsKICAgICAgICAgICAgIFJFUVVJUkVfRU5DT0RFQlVGRkVSKGJ1ZiwgMSk7CiAgICAgICAgICAgICAqYnVmLT5vdXRidWYrKyA9ICc/JzsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoZXJyb3JzID09IEVSUk9SX0lHTk9SRSB8fCBlcnJvcnMgPT0gRVJST1JfUkVQTEFDRSkgewotICAgICAgICBidWYtPmluYnVmICs9IGVzaXplOworICAgICAgICBidWYtPmlucG9zICs9IGVzaXplOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBzdGFydCA9IChQeV9zc2l6ZV90KShidWYtPmluYnVmIC0gYnVmLT5pbmJ1Zl90b3ApOworICAgIHN0YXJ0ID0gKFB5X3NzaXplX3QpYnVmLT5pbnBvczsKICAgICBlbmQgPSBzdGFydCArIGVzaXplOwogCiAgICAgLyogdXNlIGNhY2hlZCBleGNlcHRpb24gb2JqZWN0IGlmIGF2YWlsYWJsZSAqLwogICAgIGlmIChidWYtPmV4Y29iaiA9PSBOVUxMKSB7Ci0gICAgICAgIGJ1Zi0+ZXhjb2JqID0gUHlVbmljb2RlRW5jb2RlRXJyb3JfQ3JlYXRlKGNvZGVjLT5lbmNvZGluZywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zi0+aW5idWZfdG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgYnVmLT5pbmJ1Zl9lbmQgLSBidWYtPmluYnVmX3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBlbmQsIHJlYXNvbik7CisgICAgICAgIGJ1Zi0+ZXhjb2JqID0gIFB5T2JqZWN0X0NhbGxGdW5jdGlvbihQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic09ubnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZWMtPmVuY29kaW5nLCBidWYtPmlub2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIGVuZCwgcmVhc29uKTsKICAgICAgICAgaWYgKGJ1Zi0+ZXhjb2JqID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CkBAIC0zMjUsMTAgKzMxOSwxMCBAQAogICAgIH0KIAogICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sodG9iaikpIHsKLSAgICAgICAgY29uc3QgUHlfVU5JQ09ERSAqdXJhdyA9IFB5VW5pY29kZV9BU19VTklDT0RFKHRvYmopOworICAgICAgICBQeV9zc2l6ZV90IGlucG9zOwogCi0gICAgICAgIHJldHN0ciA9IG11bHRpYnl0ZWNvZGVjX2VuY29kZShjb2RlYywgc3RhdGUsICZ1cmF3LAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKHRvYmopLCBFUlJPUl9TVFJJQ1QsCisgICAgICAgIHJldHN0ciA9IG11bHRpYnl0ZWNvZGVjX2VuY29kZShjb2RlYywgc3RhdGUsIHRvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAmaW5wb3MsIEVSUk9SX1NUUklDVCwKICAgICAgICAgICAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNIKTsKICAgICAgICAgaWYgKHJldHN0ciA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC0zNDAsMjIgKzMzNCwyMyBAQAogCiAgICAgYXNzZXJ0KFB5Qnl0ZXNfQ2hlY2socmV0c3RyKSk7CiAgICAgcmV0c3Ryc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUocmV0c3RyKTsKLSAgICBSRVFVSVJFX0VOQ09ERUJVRkZFUihidWYsIHJldHN0cnNpemUpOwotCi0gICAgbWVtY3B5KGJ1Zi0+b3V0YnVmLCBQeUJ5dGVzX0FTX1NUUklORyhyZXRzdHIpLCByZXRzdHJzaXplKTsKLSAgICBidWYtPm91dGJ1ZiArPSByZXRzdHJzaXplOworICAgIGlmIChyZXRzdHJzaXplID4gMCkgeworICAgICAgICBSRVFVSVJFX0VOQ09ERUJVRkZFUihidWYsIHJldHN0cnNpemUpOworICAgICAgICBtZW1jcHkoYnVmLT5vdXRidWYsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJldHN0ciksIHJldHN0cnNpemUpOworICAgICAgICBidWYtPm91dGJ1ZiArPSByZXRzdHJzaXplOworICAgIH0KIAogICAgIG5ld3BvcyA9IFB5TG9uZ19Bc1NzaXplX3QoUHlUdXBsZV9HRVRfSVRFTShyZXRvYmosIDEpKTsKICAgICBpZiAobmV3cG9zIDwgMCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgbmV3cG9zICs9IChQeV9zc2l6ZV90KShidWYtPmluYnVmX2VuZCAtIGJ1Zi0+aW5idWZfdG9wKTsKLSAgICBpZiAobmV3cG9zIDwgMCB8fCBidWYtPmluYnVmX3RvcCArIG5ld3BvcyA+IGJ1Zi0+aW5idWZfZW5kKSB7CisgICAgICAgIG5ld3BvcyArPSAoUHlfc3NpemVfdClidWYtPmlubGVuOworICAgIGlmIChuZXdwb3MgPCAwIHx8IG5ld3BvcyA+IGJ1Zi0+aW5sZW4pIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpb24gJXpkIGZyb20gZXJyb3IgaGFuZGxlciBvdXQgb2YgYm91bmRzIiwKICAgICAgICAgICAgICAgICAgICAgIG5ld3Bvcyk7CiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KLSAgICBidWYtPmluYnVmID0gYnVmLT5pbmJ1Zl90b3AgKyBuZXdwb3M7CisgICAgYnVmLT5pbnBvcyA9IG5ld3BvczsKIAogICAgIFB5X0RFQ1JFRihyZXRvYmopOwogICAgIFB5X0RFQ1JFRihyZXRzdHIpOwpAQCAtMzc0LDcgKzM2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqZXJyb3JzLCBQeV9zc2l6ZV90IGUpCiB7CiAgICAgUHlPYmplY3QgKnJldG9iaiA9IE5VTEwsICpyZXR1bmkgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgcmV0dW5pc2l6ZSwgbmV3cG9zOworICAgIFB5X3NzaXplX3QgbmV3cG9zOwogICAgIGNvbnN0IGNoYXIgKnJlYXNvbjsKICAgICBQeV9zc2l6ZV90IGVzaXplLCBzdGFydCwgZW5kOwogCkBAIC0zODUsNyArMzgwLDYgQEAKICAgICBlbHNlIHsKICAgICAgICAgc3dpdGNoIChlKSB7CiAgICAgICAgIGNhc2UgTUJFUlJfVE9PU01BTEw6Ci0gICAgICAgICAgICBSRVFVSVJFX0RFQ09ERUJVRkZFUihidWYsIC0xKTsKICAgICAgICAgICAgIHJldHVybiAwOyAvKiByZXRyeSBpdCAqLwogICAgICAgICBjYXNlIE1CRVJSX1RPT0ZFVzoKICAgICAgICAgICAgIHJlYXNvbiA9ICJpbmNvbXBsZXRlIG11bHRpYnl0ZSBzZXF1ZW5jZSI7CkBAIC0zOTUsNiArMzg5LDggQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGNvZGVjIGVycm9yIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGNhc2UgTUJFUlJfRVhDRVBUSU9OOgorICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBydW50aW1lIGVycm9yIik7CkBAIC00MDMsOCArMzk5LDkgQEAKICAgICB9CiAKICAgICBpZiAoZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKLSAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCAxKTsKLSAgICAgICAgKmJ1Zi0+b3V0YnVmKysgPSBQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUjsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZidWYtPndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAgICAgaWYgKGVycm9ycyA9PSBFUlJPUl9JR05PUkUgfHwgZXJyb3JzID09IEVSUk9SX1JFUExBQ0UpIHsKICAgICAgICAgYnVmLT5pbmJ1ZiArPSBlc2l6ZTsKQEAgLTQ0NywxNSArNDQ0LDggQEAKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgfQogCi0gICAgaWYgKFB5VW5pY29kZV9Bc1VuaWNvZGUocmV0dW5pKSA9PSBOVUxMKQorICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZidWYtPndyaXRlciwgcmV0dW5pKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgIHJldHVuaXNpemUgPSBQeVVuaWNvZGVfR0VUX1NJWkUocmV0dW5pKTsKLSAgICBpZiAocmV0dW5pc2l6ZSA+IDApIHsKLSAgICAgICAgUkVRVUlSRV9ERUNPREVCVUZGRVIoYnVmLCByZXR1bmlzaXplKTsKLSAgICAgICAgbWVtY3B5KChjaGFyICopYnVmLT5vdXRidWYsIFB5VW5pY29kZV9BU19VTklDT0RFKHJldHVuaSksCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1bmlzaXplICogUHlfVU5JQ09ERV9TSVpFKTsKLSAgICAgICAgYnVmLT5vdXRidWYgKz0gcmV0dW5pc2l6ZTsKLSAgICB9CiAKICAgICBuZXdwb3MgPSBQeUxvbmdfQXNTc2l6ZV90KFB5VHVwbGVfR0VUX0lURU0ocmV0b2JqLCAxKSk7CiAgICAgaWYgKG5ld3BvcyA8IDAgJiYgIVB5RXJyX09jY3VycmVkKCkpCkBAIC00NzksMTkgKzQ2OSwyOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG11bHRpYnl0ZWNvZGVjX2VuY29kZShNdWx0aWJ5dGVDb2RlYyAqY29kZWMsCiAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlieXRlQ29kZWNfU3RhdGUgKnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFB5X1VOSUNPREUgKipkYXRhLCBQeV9zc2l6ZV90IGRhdGFsZW4sCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRleHQsIFB5X3NzaXplX3QgKmlucG9zX3QsCiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmVycm9ycywgaW50IGZsYWdzKQogewogICAgIE11bHRpYnl0ZUVuY29kZUJ1ZmZlciBidWY7CiAgICAgUHlfc3NpemVfdCBmaW5hbHNpemUsIHIgPSAwOworICAgIFB5X3NzaXplX3QgZGF0YWxlbjsKKyAgICBpbnQga2luZDsKKyAgICB2b2lkICpkYXRhOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh0ZXh0KSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGRhdGFsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh0ZXh0KTsKIAogICAgIGlmIChkYXRhbGVuID09IDAgJiYgIShmbGFncyAmIE1CRU5DX1JFU0VUKSkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgMCk7CiAKICAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBidWYub3V0b2JqID0gTlVMTDsKLSAgICBidWYuaW5idWYgPSBidWYuaW5idWZfdG9wID0gKmRhdGE7Ci0gICAgYnVmLmluYnVmX2VuZCA9IGJ1Zi5pbmJ1Zl90b3AgKyBkYXRhbGVuOworICAgIGJ1Zi5pbm9iaiA9IHRleHQ7ICAgLyogYm9ycm93ZWQgcmVmZXJlbmNlICovCisgICAgYnVmLmlucG9zID0gMDsKKyAgICBidWYuaW5sZW4gPSBkYXRhbGVuOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChidWYuaW5vYmopOworICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShidWYuaW5vYmopOwogCiAgICAgaWYgKGRhdGFsZW4gPiAoUFlfU1NJWkVfVF9NQVggLSAxNikgLyAyKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CkBAIC01MDQsMTQgKzUwNCwxNCBAQAogICAgIGJ1Zi5vdXRidWYgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKGJ1Zi5vdXRvYmopOwogICAgIGJ1Zi5vdXRidWZfZW5kID0gYnVmLm91dGJ1ZiArIFB5Qnl0ZXNfR0VUX1NJWkUoYnVmLm91dG9iaik7CiAKLSAgICB3aGlsZSAoYnVmLmluYnVmIDwgYnVmLmluYnVmX2VuZCkgewotICAgICAgICBQeV9zc2l6ZV90IGlubGVmdCwgb3V0bGVmdDsKLQorICAgIHdoaWxlIChidWYuaW5wb3MgPCBidWYuaW5sZW4pIHsKICAgICAgICAgLyogd2UgZG9uJ3QgcmV1c2UgaW5sZWZ0IGFuZCBvdXRsZWZ0IGhlcmUuCiAgICAgICAgICAqIGVycm9yIGNhbGxiYWNrcyBjYW4gcmVsb2NhdGUgdGhlIGN1cnNvciBhbnl3aGVyZSBvbiBidWZmZXIqLwotICAgICAgICBpbmxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLmluYnVmX2VuZCAtIGJ1Zi5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1Zl9lbmQgLSBidWYub3V0YnVmKTsKLSAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsICZidWYuaW5idWYsIGlubGVmdCwKKyAgICAgICAgUHlfc3NpemVfdCBvdXRsZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWZfZW5kIC0gYnVmLm91dGJ1Zik7CisKKyAgICAgICAgciA9IGNvZGVjLT5lbmNvZGUoc3RhdGUsIGNvZGVjLT5jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQsIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5wb3MsIGJ1Zi5pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi5vdXRidWYsIG91dGxlZnQsIGZsYWdzKTsKICAgICAgICAgaWYgKChyID09IDApIHx8IChyID09IE1CRVJSX1RPT0ZFVyAmJiAhKGZsYWdzICYgTUJFTkNfRkxVU0gpKSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTQyLDcgKzU0Miw4IEBACiAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJmJ1Zi5vdXRvYmosIGZpbmFsc2l6ZSkgPT0gLTEpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKIAotICAgICpkYXRhID0gYnVmLmluYnVmOworICAgIGlmIChpbnBvc190KQorICAgICAgICAqaW5wb3NfdCA9IGJ1Zi5pbnBvczsKICAgICBQeV9YREVDUkVGKGJ1Zi5leGNvYmopOwogICAgIHJldHVybiBidWYub3V0b2JqOwogCkBAIC01NTcsNyArNTU4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKIHsKICAgICBNdWx0aWJ5dGVDb2RlY19TdGF0ZSBzdGF0ZTsKLSAgICBQeV9VTklDT0RFICpkYXRhOwogICAgIFB5T2JqZWN0ICplcnJvcmNiLCAqciwgKmFyZywgKnVjdnQ7CiAgICAgY29uc3QgY2hhciAqZXJyb3JzID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGRhdGFsZW47CkBAIC01ODAsMTEgKzU4MCwxMSBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgZGF0YSA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKGFyZywgJmRhdGFsZW4pOwotICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGFyZykgPCAwKSB7CiAgICAgICAgIFB5X1hERUNSRUYodWN2dCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBkYXRhbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoYXJnKTsKIAogICAgIGVycm9yY2IgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChlcnJvcmNiID09IE5VTEwpIHsKQEAgLTU5Niw3ICs1OTYsNyBAQAogICAgICAgICBzZWxmLT5jb2RlYy0+ZW5jaW5pdCgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIHIgPSBtdWx0aWJ5dGVjb2RlY19lbmNvZGUoc2VsZi0+Y29kZWMsICZzdGF0ZSwKLSAgICAgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VOSUNPREUgKiopJmRhdGEsIGRhdGFsZW4sIGVycm9yY2IsCisgICAgICAgICAgICAgICAgICAgIGFyZywgTlVMTCwgZXJyb3JjYiwKICAgICAgICAgICAgICAgICAgICAgTUJFTkNfRkxVU0ggfCBNQkVOQ19SRVNFVCk7CiAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC02MTcsMTAgKzYxNywxMCBAQAogewogICAgIE11bHRpYnl0ZUNvZGVjX1N0YXRlIHN0YXRlOwogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7Ci0gICAgUHlPYmplY3QgKmVycm9yY2I7CisgICAgUHlPYmplY3QgKmVycm9yY2IsICpyZXM7CiAgICAgUHlfYnVmZmVyIHBkYXRhOwogICAgIGNvbnN0IGNoYXIgKmRhdGEsICplcnJvcnMgPSBOVUxMOwotICAgIFB5X3NzaXplX3QgZGF0YWxlbiwgZmluYWxzaXplOworICAgIFB5X3NzaXplX3QgZGF0YWxlbjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInkqfHo6ZGVjb2RlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlY2t3YXJnbGlzdCwgJnBkYXRhLCAmZXJyb3JzKSkKQEAgLTY0MCwyOSArNjQwLDIzIEBACiAgICAgICAgIHJldHVybiBtYWtlX3R1cGxlKFB5VW5pY29kZV9OZXcoMCwgMCksIDApOwogICAgIH0KIAorICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmYnVmLndyaXRlcik7CisgICAgYnVmLndyaXRlci5taW5fbGVuZ3RoID0gZGF0YWxlbjsKICAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBidWYuaW5idWYgPSBidWYuaW5idWZfdG9wID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOwogICAgIGJ1Zi5pbmJ1Zl9lbmQgPSBidWYuaW5idWZfdG9wICsgZGF0YWxlbjsKLSAgICBidWYub3V0b2JqID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIGRhdGFsZW4pOwotICAgIGlmIChidWYub3V0b2JqID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3JleGl0OwotICAgIGJ1Zi5vdXRidWYgPSBQeVVuaWNvZGVfQVNfVU5JQ09ERShidWYub3V0b2JqKTsKLSAgICBpZiAoYnVmLm91dGJ1ZiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBidWYub3V0YnVmX2VuZCA9IGJ1Zi5vdXRidWYgKyBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLm91dG9iaik7CiAKICAgICBpZiAoc2VsZi0+Y29kZWMtPmRlY2luaXQgIT0gTlVMTCAmJgogICAgICAgICBzZWxmLT5jb2RlYy0+ZGVjaW5pdCgmc3RhdGUsIHNlbGYtPmNvZGVjLT5jb25maWcpICE9IDApCiAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgd2hpbGUgKGJ1Zi5pbmJ1ZiA8IGJ1Zi5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQsIHI7CisgICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0LCByOwogCiAgICAgICAgIGlubGVmdCA9IChQeV9zc2l6ZV90KShidWYuaW5idWZfZW5kIC0gYnVmLmluYnVmKTsKLSAgICAgICAgb3V0bGVmdCA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmX2VuZCAtIGJ1Zi5vdXRidWYpOwogCiAgICAgICAgIHIgPSBzZWxmLT5jb2RlYy0+ZGVjb2RlKCZzdGF0ZSwgc2VsZi0+Y29kZWMtPmNvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICZidWYuaW5idWYsIGlubGVmdCwgJmJ1Zi5vdXRidWYsIG91dGxlZnQpOworICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zi5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLndyaXRlcik7CiAgICAgICAgIGlmIChyID09IDApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZWxzZSBpZiAobXVsdGlieXRlY29kZWNfZGVjZXJyb3Ioc2VsZi0+Y29kZWMsICZzdGF0ZSwKQEAgLTY3MCwyMyArNjY0LDIwIEBACiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CiAKLSAgICBmaW5hbHNpemUgPSAoUHlfc3NpemVfdCkoYnVmLm91dGJ1ZiAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9BU19VTklDT0RFKGJ1Zi5vdXRvYmopKTsKLQotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7CiAgICAgRVJST1JfREVDUkVGKGVycm9yY2IpOwotICAgIHJldHVybiBtYWtlX3R1cGxlKGJ1Zi5vdXRvYmosIGRhdGFsZW4pOworICAgIHJldHVybiBtYWtlX3R1cGxlKHJlcywgZGF0YWxlbik7CiAKIGVycm9yZXhpdDoKICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwZGF0YSk7CiAgICAgRVJST1JfREVDUkVGKGVycm9yY2IpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogCiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC03NTIsOSArNzQzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp1bmlzdHIsIGludCBmaW5hbCkKIHsKICAgICBQeU9iamVjdCAqdWN2dCwgKnIgPSBOVUxMOwotICAgIFB5X1VOSUNPREUgKmluYnVmLCAqaW5idWZfZW5kLCAqaW5idWZfdG1wID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGRhdGFsZW4sIG9yaWdwZW5kaW5nOwotICAgIHdjaGFyX3QgKmRhdGE7CisgICAgUHlPYmplY3QgKmluYnVmID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGlucG9zLCBkYXRhbGVuOworICAgIFB5T2JqZWN0ICpvcmlncGVuZGluZyA9IE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHVuaXN0cikpCiAgICAgICAgIHVjdnQgPSBOVUxMOwpAQCAtNzcwLDY5ICs3NjEsNjYgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGRhdGEgPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZSh1bmlzdHIsICZkYXRhbGVuKTsKLSAgICBpZiAoZGF0YSA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICBvcmlncGVuZGluZyA9IGN0eC0+cGVuZGluZ3NpemU7CisgICAgaWYgKGN0eC0+cGVuZGluZykgeworICAgICAgICBQeU9iamVjdCAqaW5idWZfdG1wOwogCi0gICAgaWYgKG9yaWdwZW5kaW5nID4gMCkgewotICAgICAgICBpZiAoZGF0YWxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gY3R4LT5wZW5kaW5nc2l6ZSkgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIC8qIGluYnVmX3RtcCA9PSBOVUxMICovCi0gICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICAgICAgfQotICAgICAgICBpbmJ1Zl90bXAgPSBQeU1lbV9OZXcoUHlfVU5JQ09ERSwgZGF0YWxlbiArIGN0eC0+cGVuZGluZ3NpemUpOworICAgICAgICBQeV9JTkNSRUYoY3R4LT5wZW5kaW5nKTsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBjdHgtPnBlbmRpbmc7CisKKyAgICAgICAgUHlfSU5DUkVGKGN0eC0+cGVuZGluZyk7CisgICAgICAgIGluYnVmX3RtcCA9IGN0eC0+cGVuZGluZzsKKyAgICAgICAgUHlVbmljb2RlX0FwcGVuZCgmaW5idWZfdG1wLCB1bmlzdHIpOwogICAgICAgICBpZiAoaW5idWZfdG1wID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yZXhpdDsKLSAgICAgICAgbWVtY3B5KGluYnVmX3RtcCwgY3R4LT5wZW5kaW5nLAotICAgICAgICAgICAgUHlfVU5JQ09ERV9TSVpFICogY3R4LT5wZW5kaW5nc2l6ZSk7Ci0gICAgICAgIG1lbWNweShpbmJ1Zl90bXAgKyBjdHgtPnBlbmRpbmdzaXplLAotICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUodW5pc3RyKSwKLSAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIGRhdGFsZW4pOwotICAgICAgICBkYXRhbGVuICs9IGN0eC0+cGVuZGluZ3NpemU7Ci0gICAgICAgIGN0eC0+cGVuZGluZ3NpemUgPSAwOworICAgICAgICBQeV9DTEVBUihjdHgtPnBlbmRpbmcpOwogICAgICAgICBpbmJ1ZiA9IGluYnVmX3RtcDsKICAgICB9Ci0gICAgZWxzZQotICAgICAgICBpbmJ1ZiA9IChQeV9VTklDT0RFICopUHlVbmljb2RlX0FTX1VOSUNPREUodW5pc3RyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBOVUxMOwogCi0gICAgaW5idWZfZW5kID0gaW5idWYgKyBkYXRhbGVuOworICAgICAgICBQeV9JTkNSRUYodW5pc3RyKTsKKyAgICAgICAgaW5idWYgPSB1bmlzdHI7CisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaW5idWYpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgaW5wb3MgPSAwOworICAgIGRhdGFsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChpbmJ1Zik7CiAKICAgICByID0gbXVsdGlieXRlY29kZWNfZW5jb2RlKGN0eC0+Y29kZWMsICZjdHgtPnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAoY29uc3QgUHlfVU5JQ09ERSAqKikmaW5idWYsIGRhdGFsZW4sCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+ZXJyb3JzLCBmaW5hbCA/IE1CRU5DX0ZMVVNIIHwgTUJFTkNfUkVTRVQgOiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluYnVmLCAmaW5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmVycm9ycywgZmluYWwgPyBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUIDogMCk7CiAgICAgaWYgKHIgPT0gTlVMTCkgewogICAgICAgICAvKiByZWNvdmVyIHRoZSBvcmlnaW5hbCBwZW5kaW5nIGJ1ZmZlciAqLwotICAgICAgICBpZiAob3JpZ3BlbmRpbmcgPiAwKQotICAgICAgICAgICAgbWVtY3B5KGN0eC0+cGVuZGluZywgaW5idWZfdG1wLAotICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfU0laRSAqIG9yaWdwZW5kaW5nKTsKLSAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IG9yaWdwZW5kaW5nOworICAgICAgICBQeV9DTEVBUihjdHgtPnBlbmRpbmcpOworICAgICAgICBjdHgtPnBlbmRpbmcgPSBvcmlncGVuZGluZzsKKyAgICAgICAgb3JpZ3BlbmRpbmcgPSBOVUxMOwogICAgICAgICBnb3RvIGVycm9yZXhpdDsKICAgICB9CisgICAgUHlfWERFQ1JFRihvcmlncGVuZGluZyk7CiAKLSAgICBpZiAoaW5idWYgPCBpbmJ1Zl9lbmQpIHsKLSAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IChQeV9zc2l6ZV90KShpbmJ1Zl9lbmQgLSBpbmJ1Zik7Ci0gICAgICAgIGlmIChjdHgtPnBlbmRpbmdzaXplID4gTUFYRU5DUEVORElORykgeworICAgIGlmIChpbnBvcyA8IGRhdGFsZW4pIHsKKyAgICAgICAgaWYgKGRhdGFsZW4gLSBpbnBvcyA+IE1BWEVOQ1BFTkRJTkcpIHsKICAgICAgICAgICAgIC8qIG5vcm1hbCBjb2RlY3MgY2FuJ3QgcmVhY2ggaGVyZSAqLwotICAgICAgICAgICAgY3R4LT5wZW5kaW5nc2l6ZSA9IDA7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVW5pY29kZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZW5kaW5nIGJ1ZmZlciBvdmVyZmxvdyIpOwogICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAgICAgICAgIH0KLSAgICAgICAgbWVtY3B5KGN0eC0+cGVuZGluZywgaW5idWYsCi0gICAgICAgICAgICBjdHgtPnBlbmRpbmdzaXplICogUHlfVU5JQ09ERV9TSVpFKTsKKyAgICAgICAgY3R4LT5wZW5kaW5nID0gUHlVbmljb2RlX1N1YnN0cmluZyhpbmJ1ZiwgaW5wb3MsIGRhdGFsZW4pOworICAgICAgICBpZiAoY3R4LT5wZW5kaW5nID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIG5vcm1hbCBjb2RlY3MgY2FuJ3QgcmVhY2ggaGVyZSAqLworICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoaW5idWZfdG1wICE9IE5VTEwpCi0gICAgICAgIFB5TWVtX0RlbChpbmJ1Zl90bXApOworICAgIFB5X0RFQ1JFRihpbmJ1Zik7CiAgICAgUHlfWERFQ1JFRih1Y3Z0KTsKICAgICByZXR1cm4gcjsKIAogZXJyb3JleGl0OgotICAgIGlmIChpbmJ1Zl90bXAgIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRGVsKGluYnVmX3RtcCk7CiAgICAgUHlfWERFQ1JFRihyKTsKICAgICBQeV9YREVDUkVGKHVjdnQpOworICAgIFB5X1hERUNSRUYob3JpZ3BlbmRpbmcpOworICAgIFB5X1hERUNSRUYoaW5idWYpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC04NTksMTcgKzg0Nyw3IEBACiB7CiAgICAgYnVmLT5pbmJ1ZiA9IGJ1Zi0+aW5idWZfdG9wID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilkYXRhOwogICAgIGJ1Zi0+aW5idWZfZW5kID0gYnVmLT5pbmJ1Zl90b3AgKyBzaXplOwotICAgIGlmIChidWYtPm91dG9iaiA9PSBOVUxMKSB7IC8qIG9ubHkgaWYgb3V0b2JqIGlzIG5vdCBhbGxvY2F0ZWQgeWV0ICovCi0gICAgICAgIGJ1Zi0+b3V0b2JqID0gUHlVbmljb2RlX0Zyb21Vbmljb2RlKE5VTEwsIHNpemUpOwotICAgICAgICBpZiAoYnVmLT5vdXRvYmogPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgYnVmLT5vdXRidWYgPSBQeVVuaWNvZGVfQXNVbmljb2RlKGJ1Zi0+b3V0b2JqKTsKLSAgICAgICAgaWYgKGJ1Zi0+b3V0YnVmID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGJ1Zi0+b3V0YnVmX2VuZCA9IGJ1Zi0+b3V0YnVmICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi0+b3V0b2JqKTsKLSAgICB9Ci0KKyAgICBidWYtPndyaXRlci5taW5fbGVuZ3RoICs9IHNpemU7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTg3OCwxNCArODU2LDEzIEBACiAgICAgICAgICAgICAgICAgICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciAqYnVmKQogewogICAgIHdoaWxlIChidWYtPmluYnVmIDwgYnVmLT5pbmJ1Zl9lbmQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpbmxlZnQsIG91dGxlZnQ7CisgICAgICAgIFB5X3NzaXplX3QgaW5sZWZ0OwogICAgICAgICBQeV9zc2l6ZV90IHI7CiAKICAgICAgICAgaW5sZWZ0ID0gKFB5X3NzaXplX3QpKGJ1Zi0+aW5idWZfZW5kIC0gYnVmLT5pbmJ1Zik7Ci0gICAgICAgIG91dGxlZnQgPSAoUHlfc3NpemVfdCkoYnVmLT5vdXRidWZfZW5kIC0gYnVmLT5vdXRidWYpOwogCiAgICAgICAgIHIgPSBjdHgtPmNvZGVjLT5kZWNvZGUoJmN0eC0+c3RhdGUsIGN0eC0+Y29kZWMtPmNvbmZpZywKLSAgICAgICAgICAgICZidWYtPmluYnVmLCBpbmxlZnQsICZidWYtPm91dGJ1Ziwgb3V0bGVmdCk7CisgICAgICAgICAgICAmYnVmLT5pbmJ1ZiwgaW5sZWZ0LCAmYnVmLT53cml0ZXIpOwogICAgICAgICBpZiAociA9PSAwIHx8IHIgPT0gTUJFUlJfVE9PRkVXKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGVsc2UgaWYgKG11bHRpYnl0ZWNvZGVjX2RlY2Vycm9yKGN0eC0+Y29kZWMsICZjdHgtPnN0YXRlLApAQCAtOTI3LDcgKzkwNCw3IEBACiAgICAgICAgIGlmIChyICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIFB5X0NMRUFSKHNlbGYtPnBlbmRpbmcpOwogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC05NjMsNyArOTQwLDcgQEAKICAgICB9CiAKICAgICBzZWxmLT5jb2RlYyA9ICgoTXVsdGlieXRlQ29kZWNPYmplY3QgKiljb2RlYyktPmNvZGVjOwotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBzZWxmLT5wZW5kaW5nID0gTlVMTDsKICAgICBzZWxmLT5lcnJvcnMgPSBpbnRlcm5hbF9lcnJvcl9jYWxsYmFjayhlcnJvcnMpOwogICAgIGlmIChzZWxmLT5lcnJvcnMgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcmV4aXQ7CkBAIC0xMDU4LDggKzEwMzUsOSBAQAogICAgIE11bHRpYnl0ZURlY29kZUJ1ZmZlciBidWY7CiAgICAgY2hhciAqZGF0YSwgKndkYXRhID0gTlVMTDsKICAgICBQeV9idWZmZXIgcGRhdGE7Ci0gICAgUHlfc3NpemVfdCB3c2l6ZSwgZmluYWxzaXplID0gMCwgc2l6ZSwgb3JpZ3BlbmRpbmc7CisgICAgUHlfc3NpemVfdCB3c2l6ZSwgc2l6ZSwgb3JpZ3BlbmRpbmc7CiAgICAgaW50IGZpbmFsID0gMDsKKyAgICBQeU9iamVjdCAqcmVzOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAieSp8aTpkZWNvZGUiLAogICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnRhbGt3YXJnbGlzdCwgJnBkYXRhLCAmZmluYWwpKQpAQCAtMTA2Nyw3ICsxMDQ1LDggQEAKICAgICBkYXRhID0gcGRhdGEuYnVmOwogICAgIHNpemUgPSBwZGF0YS5sZW47CiAKLSAgICBidWYub3V0b2JqID0gYnVmLmV4Y29iaiA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZidWYud3JpdGVyKTsKKyAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBvcmlncGVuZGluZyA9IHNlbGYtPnBlbmRpbmdzaXplOwogCiAgICAgaWYgKHNlbGYtPnBlbmRpbmdzaXplID09IDApIHsKQEAgLTEwODEsOCArMTA2MCwxMCBAQAogICAgICAgICB9CiAgICAgICAgIHdzaXplID0gc2l6ZSArIHNlbGYtPnBlbmRpbmdzaXplOwogICAgICAgICB3ZGF0YSA9IFB5TWVtX01hbGxvYyh3c2l6ZSk7Ci0gICAgICAgIGlmICh3ZGF0YSA9PSBOVUxMKQorICAgICAgICBpZiAod2RhdGEgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgICAgICB9CiAgICAgICAgIG1lbWNweSh3ZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOwogICAgICAgICBtZW1jcHkod2RhdGEgKyBzZWxmLT5wZW5kaW5nc2l6ZSwgZGF0YSwgc2l6ZSk7CiAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKQEAgLTExMDksMjMgKzEwOTAsMjIgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgIH0KIAotICAgIGZpbmFsc2l6ZSA9IChQeV9zc2l6ZV90KShidWYub3V0YnVmIC0gUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaikpOwotICAgIGlmIChmaW5hbHNpemUgIT0gUHlVbmljb2RlX0dFVF9TSVpFKGJ1Zi5vdXRvYmopKQotICAgICAgICBpZiAoUHlVbmljb2RlX1Jlc2l6ZSgmYnVmLm91dG9iaiwgZmluYWxzaXplKSA9PSAtMSkKLSAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OworICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZidWYud3JpdGVyKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3JleGl0OwogCiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGRhdGEpOwogICAgIGlmICh3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgcmV0dXJuIGJ1Zi5vdXRvYmo7CisgICAgcmV0dXJuIHJlczsKIAogZXJyb3JleGl0OgogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBkYXRhKTsKICAgICBpZiAod2RhdGEgIT0gTlVMTCAmJiB3ZGF0YSAhPSBkYXRhKQogICAgICAgICBQeU1lbV9EZWwod2RhdGEpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgUHlfWERFQ1JFRihidWYub3V0b2JqKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmJ1Zi53cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xMjY1LDEzICsxMjQ1LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2QsIFB5X3NzaXplX3Qgc2l6ZWhpbnQpCiB7CiAgICAgTXVsdGlieXRlRGVjb2RlQnVmZmVyIGJ1ZjsKLSAgICBQeU9iamVjdCAqY3JlczsKLSAgICBQeV9zc2l6ZV90IHJzaXplLCBmaW5hbHNpemUgPSAwOworICAgIFB5T2JqZWN0ICpjcmVzLCAqcmVzOworICAgIFB5X3NzaXplX3QgcnNpemU7CiAKICAgICBpZiAoc2l6ZWhpbnQgPT0gMCkKICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9OZXcoMCwgMCk7CiAKLSAgICBidWYub3V0b2JqID0gYnVmLmV4Y29iaiA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZidWYud3JpdGVyKTsKKyAgICBidWYuZXhjb2JqID0gTlVMTDsKICAgICBjcmVzID0gTlVMTDsKIAogICAgIGZvciAoOzspIHsKQEAgLTEzMDMsMTkgKzEyODQsMTkgQEAKICAgICAgICAgICAgIGlmIChQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpID4gUFlfU1NJWkVfVF9NQVggLSBzZWxmLT5wZW5kaW5nc2l6ZSkgewogICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpICsgc2VsZi0+cGVuZGluZ3NpemU7Ci0gICAgICAgICAgICAgICAgICAgIGN0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcnNpemUpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7Ci0gICAgICAgICAgICAgICAgICAgIGN0cmRhdGEgPSBQeUJ5dGVzX0FTX1NUUklORyhjdHIpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSwgc2VsZi0+cGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUpOwotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSArIHNlbGYtPnBlbmRpbmdzaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGNyZXMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfR0VUX1NJWkUoY3JlcykpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7Ci0gICAgICAgICAgICAgICAgICAgIGNyZXMgPSBjdHI7Ci0gICAgICAgICAgICAgICAgICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJzaXplID0gUHlCeXRlc19HRVRfU0laRShjcmVzKSArIHNlbGYtPnBlbmRpbmdzaXplOworICAgICAgICAgICAgY3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCByc2l6ZSk7CisgICAgICAgICAgICBpZiAoY3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgICAgICAgICBjdHJkYXRhID0gUHlCeXRlc19BU19TVFJJTkcoY3RyKTsKKyAgICAgICAgICAgIG1lbWNweShjdHJkYXRhLCBzZWxmLT5wZW5kaW5nLCBzZWxmLT5wZW5kaW5nc2l6ZSk7CisgICAgICAgICAgICBtZW1jcHkoY3RyZGF0YSArIHNlbGYtPnBlbmRpbmdzaXplLAorICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjcmVzKSwKKyAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShjcmVzKSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7CisgICAgICAgICAgICBjcmVzID0gY3RyOworICAgICAgICAgICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOwogICAgICAgICB9CiAKICAgICAgICAgcnNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGNyZXMpOwpAQCAtMTM0MCwyOSArMTMyMSwyNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JleGl0OwogICAgICAgICB9CiAKLSAgICAgICAgZmluYWxzaXplID0gKFB5X3NzaXplX3QpKGJ1Zi5vdXRidWYgLQotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUoYnVmLm91dG9iaikpOwogICAgICAgICBQeV9ERUNSRUYoY3Jlcyk7CiAgICAgICAgIGNyZXMgPSBOVUxMOwogCi0gICAgICAgIGlmIChzaXplaGludCA8IDAgfHwgZmluYWxzaXplICE9IDAgfHwgcnNpemUgPT0gMCkKKyAgICAgICAgaWYgKHNpemVoaW50IDwgMCB8fCBidWYud3JpdGVyLnBvcyAhPSAwIHx8IHJzaXplID09IDApCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBzaXplaGludCA9IDE7IC8qIHJlYWQgMSBtb3JlIGJ5dGUgYW5kIHJldHJ5ICovCiAgICAgfQogCi0gICAgaWYgKGZpbmFsc2l6ZSAhPSBQeVVuaWNvZGVfR0VUX1NJWkUoYnVmLm91dG9iaikpCi0gICAgICAgIGlmIChQeVVuaWNvZGVfUmVzaXplKCZidWYub3V0b2JqLCBmaW5hbHNpemUpID09IC0xKQotICAgICAgICAgICAgZ290byBlcnJvcmV4aXQ7CisgICAgcmVzID0gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJmJ1Zi53cml0ZXIpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcmV4aXQ7CiAKICAgICBQeV9YREVDUkVGKGNyZXMpOwogICAgIFB5X1hERUNSRUYoYnVmLmV4Y29iaik7Ci0gICAgcmV0dXJuIGJ1Zi5vdXRvYmo7CisgICAgcmV0dXJuIHJlczsKIAogZXJyb3JleGl0OgogICAgIFB5X1hERUNSRUYoY3Jlcyk7CiAgICAgUHlfWERFQ1JFRihidWYuZXhjb2JqKTsKLSAgICBQeV9YREVDUkVGKGJ1Zi5vdXRvYmopOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmYnVmLndyaXRlcik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTE1OTUsNyArMTU3NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKnVuaXN0cikKIHsKICAgICBQeU9iamVjdCAqc3RyLCAqd3I7Ci0gICAgX1B5X0lERU5USUZJRVIod3JpdGUpOwogCiAgICAgc3RyID0gZW5jb2Rlcl9lbmNvZGVfc3RhdGVmdWwoU1RBVEVGVUxfRUNUWChzZWxmKSwgdW5pc3RyLCAwKTsKICAgICBpZiAoc3RyID09IE5VTEwpCkBAIC0xNjQ5LDI1ICsxNjI3LDI1IEBACiBzdGF0aWMgUHlPYmplY3QgKgogbWJzdHJlYW13cml0ZXJfcmVzZXQoTXVsdGlieXRlU3RyZWFtV3JpdGVyT2JqZWN0ICpzZWxmKQogewotICAgIGNvbnN0IFB5X1VOSUNPREUgKnBlbmRpbmc7CiAgICAgUHlPYmplY3QgKnB3cnQ7CiAKLSAgICBwZW5kaW5nID0gc2VsZi0+cGVuZGluZzsKKyAgICBpZiAoIXNlbGYtPnBlbmRpbmcpCisgICAgICAgIFB5X1JFVFVSTl9OT05FOworCiAgICAgcHdydCA9IG11bHRpYnl0ZWNvZGVjX2VuY29kZShzZWxmLT5jb2RlYywgJnNlbGYtPnN0YXRlLAotICAgICAgICAgICAgICAgICAgICAmcGVuZGluZywgc2VsZi0+cGVuZGluZ3NpemUsIHNlbGYtPmVycm9ycywKKyAgICAgICAgICAgICAgICAgICAgc2VsZi0+cGVuZGluZywgTlVMTCwgc2VsZi0+ZXJyb3JzLAogICAgICAgICAgICAgICAgICAgICBNQkVOQ19GTFVTSCB8IE1CRU5DX1JFU0VUKTsKICAgICAvKiBzb21lIHBlbmRpbmcgYnVmZmVyIGNhbiBiZSB0cnVuY2F0ZWQgd2hlbiBVbmljb2RlRW5jb2RlRXJyb3IgaXMKICAgICAgKiByYWlzZWQgb24gJ3N0cmljdCcgbW9kZS4gYnV0LCAncmVzZXQnIG1ldGhvZCBpcyBkZXNpZ25lZCB0bwogICAgICAqIHJlc2V0IHRoZSBwZW5kaW5nIGJ1ZmZlciBvciBzdGF0ZXMgc28gZmFpbGVkIHN0cmluZyBzZXF1ZW5jZQogICAgICAqIG91Z2h0IHRvIGJlIG1pc3NlZCAqLwotICAgIHNlbGYtPnBlbmRpbmdzaXplID0gMDsKKyAgICBQeV9DTEVBUihzZWxmLT5wZW5kaW5nKTsKICAgICBpZiAocHdydCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrKHB3cnQpKTsKICAgICBpZiAoUHlCeXRlc19TaXplKHB3cnQpID4gMCkgewogICAgICAgICBQeU9iamVjdCAqd3I7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKHdyaXRlKTsKIAogICAgICAgICB3ciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZi0+c3RyZWFtLCAmUHlJZF93cml0ZSwgIk8iLCBwd3J0KTsKICAgICAgICAgaWYgKHdyID09IE5VTEwpIHsKQEAgLTE3MDYsNyArMTY4NCw3IEBACiAgICAgc2VsZi0+Y29kZWMgPSAoKE11bHRpYnl0ZUNvZGVjT2JqZWN0ICopY29kZWMpLT5jb2RlYzsKICAgICBzZWxmLT5zdHJlYW0gPSBzdHJlYW07CiAgICAgUHlfSU5DUkVGKHN0cmVhbSk7Ci0gICAgc2VsZi0+cGVuZGluZ3NpemUgPSAwOworICAgIHNlbGYtPnBlbmRpbmcgPSBOVUxMOwogICAgIHNlbGYtPmVycm9ycyA9IGludGVybmFsX2Vycm9yX2NhbGxiYWNrKGVycm9ycyk7CiAgICAgaWYgKHNlbGYtPmVycm9ycyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yZXhpdDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmggYi9Nb2R1bGVzL2Nqa2NvZGVjcy9tdWx0aWJ5dGVjb2RlYy5oCmluZGV4IDFiNmVmNTUuLjViOGMyMjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvY2prY29kZWNzL211bHRpYnl0ZWNvZGVjLmgKKysrIGIvTW9kdWxlcy9jamtjb2RlY3MvbXVsdGlieXRlY29kZWMuaApAQCAtMTAsMTIgKzEwLDYgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLSNpZmRlZiB1aW50MzJfdAotdHlwZWRlZiB1aW50MzJfdCB1Y3M0X3Q7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWNzNF90OwotI2VuZGlmCi0KICNpZmRlZiB1aW50MTZfdAogdHlwZWRlZiB1aW50MTZfdCB1Y3MyX3QsIERCQ0hBUjsKICNlbHNlCkBAIC0yNywxMyArMjEsMTQgQEAKICAgICBpbnQgaTsKICAgICB1bnNpZ25lZCBjaGFyIGNbOF07CiAgICAgdWNzMl90IHUyWzRdOwotICAgIHVjczRfdCB1NFsyXTsKKyAgICBQeV9VQ1M0IHU0WzJdOwogfSBNdWx0aWJ5dGVDb2RlY19TdGF0ZTsKIAogdHlwZWRlZiBpbnQgKCptYmNvZGVjX2luaXQpKGNvbnN0IHZvaWQgKmNvbmZpZyk7CiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmVuY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQeV9VTklDT0RFICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGtpbmQsIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90ICppbnBvcywgUHlfc3NpemVfdCBpbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipvdXRidWYsIFB5X3NzaXplX3Qgb3V0bGVmdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyk7CiB0eXBlZGVmIGludCAoKm1iZW5jb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC00NCw3ICszOSw3IEBACiB0eXBlZGVmIFB5X3NzaXplX3QgKCptYmRlY29kZV9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoqaW5idWYsIFB5X3NzaXplX3QgaW5sZWZ0LAotICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERSAqKm91dGJ1ZiwgUHlfc3NpemVfdCBvdXRsZWZ0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcik7CiB0eXBlZGVmIGludCAoKm1iZGVjb2RlaW5pdF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpjb25maWcpOwogdHlwZWRlZiBQeV9zc2l6ZV90ICgqbWJkZWNvZGVyZXNldF9mdW5jKShNdWx0aWJ5dGVDb2RlY19TdGF0ZSAqc3RhdGUsCkBAIC04MSw4ICs3Niw3IEBACiAjZGVmaW5lIE1BWEVOQ1BFTkRJTkcgICAyCiAjZGVmaW5lIF9NdWx0aWJ5dGVTdGF0ZWZ1bEVuY29kZXJfSEVBRCAgICAgICAgICBcCiAgICAgX011bHRpYnl0ZVN0YXRlZnVsQ29kZWNfSEVBRCAgICAgICAgICAgICAgICBcCi0gICAgUHlfVU5JQ09ERSBwZW5kaW5nW01BWEVOQ1BFTkRJTkddOyAgICAgICAgICBcCi0gICAgUHlfc3NpemVfdCBwZW5kaW5nc2l6ZTsKKyAgICBQeU9iamVjdCAqcGVuZGluZzsKIHR5cGVkZWYgc3RydWN0IHsKICAgICBfTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyX0hFQUQKIH0gTXVsdGlieXRlU3RhdGVmdWxFbmNvZGVyQ29udGV4dDsKQEAgLTExOCwxNiArMTEyLDE3IEBACiAjZGVmaW5lIE1CRVJSX1RPT1NNQUxMICAgICAgICAgICgtMSkgLyogaW5zdWZmaWNpZW50IG91dHB1dCBidWZmZXIgc3BhY2UgKi8KICNkZWZpbmUgTUJFUlJfVE9PRkVXICAgICAgICAgICAgKC0yKSAvKiBpbmNvbXBsZXRlIGlucHV0IGJ1ZmZlciAqLwogI2RlZmluZSBNQkVSUl9JTlRFUk5BTCAgICAgICAgICAoLTMpIC8qIGludGVybmFsIHJ1bnRpbWUgZXJyb3IgKi8KKyNkZWZpbmUgTUJFUlJfRVhDRVBUSU9OICAgICAgICAgKC00KSAvKiBhbiBleGNlcHRpb24gaGFzIGJlZW4gcmFpc2VkICovCiAKICNkZWZpbmUgRVJST1JfU1RSSUNUICAgICAgICAgICAgKFB5T2JqZWN0ICopKDEpCiAjZGVmaW5lIEVSUk9SX0lHTk9SRSAgICAgICAgICAgIChQeU9iamVjdCAqKSgyKQogI2RlZmluZSBFUlJPUl9SRVBMQUNFICAgICAgICAgICAoUHlPYmplY3QgKikoMykKICNkZWZpbmUgRVJST1JfSVNDVVNUT00ocCkgICAgICAgKChwKSA8IEVSUk9SX1NUUklDVCB8fCBFUlJPUl9SRVBMQUNFIDwgKHApKQotI2RlZmluZSBFUlJPUl9ERUNSRUYocCkgZG8geyAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmIChwICE9IE5VTEwgJiYgRVJST1JfSVNDVVNUT00ocCkpIHsgICAgICAgXAotICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCk7CisjZGVmaW5lIEVSUk9SX0RFQ1JFRihwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHAgIT0gTlVMTCAmJiBFUlJPUl9JU0NVU1RPTShwKSkgICAgICAgICBcCisgICAgICAgICAgICBQeV9ERUNSRUYocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApOwogCiAjZGVmaW5lIE1CRU5DX0ZMVVNIICAgICAgICAgICAgIDB4MDAwMSAvKiBlbmNvZGUgYWxsIGNoYXJhY3RlcnMgZW5jb2RhYmxlICovCiAjZGVmaW5lIE1CRU5DX01BWCAgICAgICAgICAgICAgIE1CRU5DX0ZMVVNICmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fYnoybW9kdWxlLmMuaCBiL01vZHVsZXMvY2xpbmljL19iejJtb2R1bGUuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhMjAxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9fYnoybW9kdWxlLmMuaApAQCAtMCwwICsxLDE2MiBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX18sCisiY29tcHJlc3MoJHNlbGYsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJQcm92aWRlIGRhdGEgdG8gdGhlIGNvbXByZXNzb3Igb2JqZWN0LlxuIgorIlxuIgorIlJldHVybnMgYSBjaHVuayBvZiBjb21wcmVzc2VkIGRhdGEgaWYgcG9zc2libGUsIG9yIGJcJ1wnIG90aGVyd2lzZS5cbiIKKyJcbiIKKyJXaGVuIHlvdSBoYXZlIGZpbmlzaGVkIHByb3ZpZGluZyBkYXRhIHRvIHRoZSBjb21wcmVzc29yLCBjYWxsIHRoZVxuIgorImZsdXNoKCkgbWV0aG9kIHRvIGZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy4iKTsKKworI2RlZmluZSBfQloyX0JaMkNPTVBSRVNTT1JfQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKV9iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19iejJfQloyQ29tcHJlc3Nvcl9jb21wcmVzc19pbXBsKEJaMkNvbXByZXNzb3IgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnoyX0JaMkNvbXByZXNzb3JfY29tcHJlc3MoQloyQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2J6Ml9CWjJDb21wcmVzc29yX2NvbXByZXNzX2ltcGwoc2VsZiwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2J6Ml9CWjJDb21wcmVzc29yX2ZsdXNoX19kb2NfXywKKyJmbHVzaCgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkZpbmlzaCB0aGUgY29tcHJlc3Npb24gcHJvY2Vzcy5cbiIKKyJcbiIKKyJSZXR1cm5zIHRoZSBjb21wcmVzc2VkIGRhdGEgbGVmdCBpbiBpbnRlcm5hbCBidWZmZXJzLlxuIgorIlxuIgorIlRoZSBjb21wcmVzc29yIG9iamVjdCBtYXkgbm90IGJlIHVzZWQgYWZ0ZXIgdGhpcyBtZXRob2QgaXMgY2FsbGVkLiIpOworCisjZGVmaW5lIF9CWjJfQloyQ09NUFJFU1NPUl9GTFVTSF9NRVRIT0RERUYgICAgXAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pX2J6Ml9CWjJDb21wcmVzc29yX2ZsdXNoLCBNRVRIX05PQVJHUywgX2J6Ml9CWjJDb21wcmVzc29yX2ZsdXNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2hfaW1wbChCWjJDb21wcmVzc29yICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19iejJfQloyQ29tcHJlc3Nvcl9mbHVzaChCWjJDb21wcmVzc29yICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfYnoyX0JaMkNvbXByZXNzb3JfZmx1c2hfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sCisiQloyQ29tcHJlc3Nvcihjb21wcmVzc2xldmVsPTksIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDcmVhdGUgYSBjb21wcmVzc29yIG9iamVjdCBmb3IgY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LlxuIgorIlxuIgorIiAgY29tcHJlc3NsZXZlbFxuIgorIiAgICBDb21wcmVzc2lvbiBsZXZlbCwgYXMgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCA5LlxuIgorIlxuIgorIkZvciBvbmUtc2hvdCBjb21wcmVzc2lvbiwgdXNlIHRoZSBjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuIik7CisKK3N0YXRpYyBpbnQKK19iejJfQloyQ29tcHJlc3Nvcl9fX2luaXRfX19pbXBsKEJaMkNvbXByZXNzb3IgKnNlbGYsIGludCBjb21wcmVzc2xldmVsKTsKKworc3RhdGljIGludAorX2J6Ml9CWjJDb21wcmVzc29yX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgcmV0dXJuX3ZhbHVlID0gLTE7CisgICAgaW50IGNvbXByZXNzbGV2ZWwgPSA5OworCisgICAgaWYgKChQeV9UWVBFKHNlbGYpID09ICZCWjJDb21wcmVzc29yX1R5cGUpICYmCisgICAgICAgICFfUHlBcmdfTm9LZXl3b3JkcygiQloyQ29tcHJlc3NvciIsIGt3YXJncykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInxpOkJaMkNvbXByZXNzb3IiLAorICAgICAgICAmY29tcHJlc3NsZXZlbCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfYnoyX0JaMkNvbXByZXNzb3JfX19pbml0X19faW1wbCgoQloyQ29tcHJlc3NvciAqKXNlbGYsIGNvbXByZXNzbGV2ZWwpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfXywKKyJkZWNvbXByZXNzKCRzZWxmLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUHJvdmlkZSBkYXRhIHRvIHRoZSBkZWNvbXByZXNzb3Igb2JqZWN0LlxuIgorIlxuIgorIlJldHVybnMgYSBjaHVuayBvZiBkZWNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYlwnXCcgb3RoZXJ3aXNlLlxuIgorIlxuIgorIkF0dGVtcHRpbmcgdG8gZGVjb21wcmVzcyBkYXRhIGFmdGVyIHRoZSBlbmQgb2Ygc3RyZWFtIGlzIHJlYWNoZWRcbiIKKyJyYWlzZXMgYW4gRU9GRXJyb3IuICBBbnkgZGF0YSBmb3VuZCBhZnRlciB0aGUgZW5kIG9mIHRoZSBzdHJlYW1cbiIKKyJpcyBpZ25vcmVkIGFuZCBzYXZlZCBpbiB0aGUgdW51c2VkX2RhdGEgYXR0cmlidXRlLiIpOworCisjZGVmaW5lIF9CWjJfQloyREVDT01QUkVTU09SX0RFQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfYnoyX0JaMkRlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoQloyRGVjb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzcyhCWjJEZWNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2J6Ml9CWjJEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9iejJfQloyRGVjb21wcmVzc29yX19faW5pdF9fX19kb2NfXywKKyJCWjJEZWNvbXByZXNzb3IoKVxuIgorIi0tXG4iCisiXG4iCisiQ3JlYXRlIGEgZGVjb21wcmVzc29yIG9iamVjdCBmb3IgZGVjb21wcmVzc2luZyBkYXRhIGluY3JlbWVudGFsbHkuXG4iCisiXG4iCisiRm9yIG9uZS1zaG90IGRlY29tcHJlc3Npb24sIHVzZSB0aGUgZGVjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuIik7CisKK3N0YXRpYyBpbnQKK19iejJfQloyRGVjb21wcmVzc29yX19faW5pdF9fX2ltcGwoQloyRGVjb21wcmVzc29yICpzZWxmKTsKKworc3RhdGljIGludAorX2J6Ml9CWjJEZWNvbXByZXNzb3JfX19pbml0X18oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIGludCByZXR1cm5fdmFsdWUgPSAtMTsKKworICAgIGlmICgoUHlfVFlQRShzZWxmKSA9PSAmQloyRGVjb21wcmVzc29yX1R5cGUpICYmCisgICAgICAgICFfUHlBcmdfTm9Qb3NpdGlvbmFsKCJCWjJEZWNvbXByZXNzb3IiLCBhcmdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIGlmICgoUHlfVFlQRShzZWxmKSA9PSAmQloyRGVjb21wcmVzc29yX1R5cGUpICYmCisgICAgICAgICFfUHlBcmdfTm9LZXl3b3JkcygiQloyRGVjb21wcmVzc29yIiwga3dhcmdzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9iejJfQloyRGVjb21wcmVzc29yX19faW5pdF9fX2ltcGwoKEJaMkRlY29tcHJlc3NvciAqKXNlbGYpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MjFjYTQ0MDU1MTlhMDkzMSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9fbHptYW1vZHVsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fbHptYW1vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhZDg4MgotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL19sem1hbW9kdWxlLmMuaApAQCAtMCwwICsxLDI0NSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9sem1hX0xaTUFDb21wcmVzc29yX2NvbXByZXNzX19kb2NfXywKKyJjb21wcmVzcygkc2VsZiwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIlByb3ZpZGUgZGF0YSB0byB0aGUgY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiUmV0dXJucyBhIGNodW5rIG9mIGNvbXByZXNzZWQgZGF0YSBpZiBwb3NzaWJsZSwgb3IgYlwnXCcgb3RoZXJ3aXNlLlxuIgorIlxuIgorIldoZW4geW91IGhhdmUgZmluaXNoZWQgcHJvdmlkaW5nIGRhdGEgdG8gdGhlIGNvbXByZXNzb3IsIGNhbGwgdGhlXG4iCisiZmx1c2goKSBtZXRob2QgdG8gZmluaXNoIHRoZSBjb21wcmVzc2lvbiBwcm9jZXNzLiIpOworCisjZGVmaW5lIF9MWk1BX0xaTUFDT01QUkVTU09SX0NPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbilfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfbHptYV9MWk1BQ29tcHJlc3Nvcl9jb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3NfaW1wbChDb21wcmVzc29yICpzZWxmLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3MoQ29tcHJlc3NvciAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfTFpNQUNvbXByZXNzb3JfY29tcHJlc3NfaW1wbChzZWxmLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaF9fZG9jX18sCisiZmx1c2goJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJGaW5pc2ggdGhlIGNvbXByZXNzaW9uIHByb2Nlc3MuXG4iCisiXG4iCisiUmV0dXJucyB0aGUgY29tcHJlc3NlZCBkYXRhIGxlZnQgaW4gaW50ZXJuYWwgYnVmZmVycy5cbiIKKyJcbiIKKyJUaGUgY29tcHJlc3NvciBvYmplY3QgbWF5IG5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4iKTsKKworI2RlZmluZSBfTFpNQV9MWk1BQ09NUFJFU1NPUl9GTFVTSF9NRVRIT0RERUYgICAgXAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pX2x6bWFfTFpNQUNvbXByZXNzb3JfZmx1c2gsIE1FVEhfTk9BUkdTLCBfbHptYV9MWk1BQ29tcHJlc3Nvcl9mbHVzaF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfTFpNQUNvbXByZXNzb3JfZmx1c2hfaW1wbChDb21wcmVzc29yICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX0xaTUFDb21wcmVzc29yX2ZsdXNoKENvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9sem1hX0xaTUFDb21wcmVzc29yX2ZsdXNoX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX2RvY19fLAorImRlY29tcHJlc3MoJHNlbGYsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJQcm92aWRlIGRhdGEgdG8gdGhlIGRlY29tcHJlc3NvciBvYmplY3QuXG4iCisiXG4iCisiUmV0dXJucyBhIGNodW5rIG9mIGRlY29tcHJlc3NlZCBkYXRhIGlmIHBvc3NpYmxlLCBvciBiXCdcJyBvdGhlcndpc2UuXG4iCisiXG4iCisiQXR0ZW1wdGluZyB0byBkZWNvbXByZXNzIGRhdGEgYWZ0ZXIgdGhlIGVuZCBvZiBzdHJlYW0gaXMgcmVhY2hlZFxuIgorInJhaXNlcyBhbiBFT0ZFcnJvci4gIEFueSBkYXRhIGZvdW5kIGFmdGVyIHRoZSBlbmQgb2YgdGhlIHN0cmVhbVxuIgorImlzIGlnbm9yZWQgYW5kIHNhdmVkIGluIHRoZSB1bnVzZWRfZGF0YSBhdHRyaWJ1dGUuIik7CisKKyNkZWZpbmUgX0xaTUFfTFpNQURFQ09NUFJFU1NPUl9ERUNPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzcywgTUVUSF9WQVJBUkdTLCBfbHptYV9MWk1BRGVjb21wcmVzc29yX2RlY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzc19pbXBsKERlY29tcHJlc3NvciAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfZGVjb21wcmVzcyhEZWNvbXByZXNzb3IgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9kZWNvbXByZXNzX2ltcGwoc2VsZiwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2x6bWFfTFpNQURlY29tcHJlc3Nvcl9fX2luaXRfX19fZG9jX18sCisiTFpNQURlY29tcHJlc3Nvcihmb3JtYXQ9Rk9STUFUX0FVVE8sIG1lbWxpbWl0PU5vbmUsIGZpbHRlcnM9Tm9uZSlcbiIKKyItLVxuIgorIlxuIgorIkNyZWF0ZSBhIGRlY29tcHJlc3NvciBvYmplY3QgZm9yIGRlY29tcHJlc3NpbmcgZGF0YSBpbmNyZW1lbnRhbGx5LlxuIgorIlxuIgorIiAgZm9ybWF0XG4iCisiICAgIFNwZWNpZmllcyB0aGUgY29udGFpbmVyIGZvcm1hdCBvZiB0aGUgaW5wdXQgc3RyZWFtLiAgSWYgdGhpcyBpc1xuIgorIiAgICBGT1JNQVRfQVVUTyAodGhlIGRlZmF1bHQpLCB0aGUgZGVjb21wcmVzc29yIHdpbGwgYXV0b21hdGljYWxseSBkZXRlY3RcbiIKKyIgICAgd2hldGhlciB0aGUgaW5wdXQgaXMgRk9STUFUX1haIG9yIEZPUk1BVF9BTE9ORS4gIFN0cmVhbXMgY3JlYXRlZCB3aXRoXG4iCisiICAgIEZPUk1BVF9SQVcgY2Fubm90IGJlIGF1dG9kZXRlY3RlZC5cbiIKKyIgIG1lbWxpbWl0XG4iCisiICAgIExpbWl0IHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgYnkgdGhlIGRlY29tcHJlc3Nvci4gIFRoaXMgd2lsbCBjYXVzZVxuIgorIiAgICBkZWNvbXByZXNzaW9uIHRvIGZhaWwgaWYgdGhlIGlucHV0IGNhbm5vdCBiZSBkZWNvbXByZXNzZWQgd2l0aGluIHRoZVxuIgorIiAgICBnaXZlbiBsaW1pdC5cbiIKKyIgIGZpbHRlcnNcbiIKKyIgICAgQSBjdXN0b20gZmlsdGVyIGNoYWluLiAgVGhpcyBhcmd1bWVudCBpcyByZXF1aXJlZCBmb3IgRk9STUFUX1JBVywgYW5kXG4iCisiICAgIG5vdCBhY2NlcHRlZCB3aXRoIGFueSBvdGhlciBmb3JtYXQuICBXaGVuIHByb3ZpZGVkLCB0aGlzIHNob3VsZCBiZSBhXG4iCisiICAgIHNlcXVlbmNlIG9mIGRpY3RzLCBlYWNoIGluZGljYXRpbmcgdGhlIElEIGFuZCBvcHRpb25zIGZvciBhIHNpbmdsZVxuIgorIiAgICBmaWx0ZXIuXG4iCisiXG4iCisiRm9yIG9uZS1zaG90IGRlY29tcHJlc3Npb24sIHVzZSB0aGUgZGVjb21wcmVzcygpIGZ1bmN0aW9uIGluc3RlYWQuIik7CisKK3N0YXRpYyBpbnQKK19sem1hX0xaTUFEZWNvbXByZXNzb3JfX19pbml0X19faW1wbChEZWNvbXByZXNzb3IgKnNlbGYsIGludCBmb3JtYXQsIFB5T2JqZWN0ICptZW1saW1pdCwgUHlPYmplY3QgKmZpbHRlcnMpOworCitzdGF0aWMgaW50CitfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgcmV0dXJuX3ZhbHVlID0gLTE7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmb3JtYXQiLCAibWVtbGltaXQiLCAiZmlsdGVycyIsIE5VTEx9OworICAgIGludCBmb3JtYXQgPSBGT1JNQVRfQVVUTzsKKyAgICBQeU9iamVjdCAqbWVtbGltaXQgPSBQeV9Ob25lOworICAgIFB5T2JqZWN0ICpmaWx0ZXJzID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgInxpT086TFpNQURlY29tcHJlc3NvciIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZvcm1hdCwgJm1lbWxpbWl0LCAmZmlsdGVycykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfbHptYV9MWk1BRGVjb21wcmVzc29yX19faW5pdF9fX2ltcGwoKERlY29tcHJlc3NvciAqKXNlbGYsIGZvcm1hdCwgbWVtbGltaXQsIGZpbHRlcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfX2RvY19fLAorImlzX2NoZWNrX3N1cHBvcnRlZCgkbW9kdWxlLCBjaGVja19pZCwgLylcbiIKKyItLVxuIgorIlxuIgorIlRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gaW50ZWdyaXR5IGNoZWNrIGlzIHN1cHBvcnRlZC5cbiIKKyJcbiIKKyJBbHdheXMgcmV0dXJucyBUcnVlIGZvciBDSEVDS19OT05FIGFuZCBDSEVDS19DUkMzMi4iKTsKKworI2RlZmluZSBfTFpNQV9JU19DSEVDS19TVVBQT1JURURfTUVUSE9EREVGICAgIFwKKyAgICB7ImlzX2NoZWNrX3N1cHBvcnRlZCIsIChQeUNGdW5jdGlvbilfbHptYV9pc19jaGVja19zdXBwb3J0ZWQsIE1FVEhfVkFSQVJHUywgX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfbHptYV9pc19jaGVja19zdXBwb3J0ZWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgY2hlY2tfaWQpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIGludCBjaGVja19pZDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiaTppc19jaGVja19zdXBwb3J0ZWQiLAorICAgICAgICAmY2hlY2tfaWQpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfaXNfY2hlY2tfc3VwcG9ydGVkX2ltcGwobW9kdWxlLCBjaGVja19pZCk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfX2RvY19fLAorIl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoJG1vZHVsZSwgZmlsdGVyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGVuY29kaW5nIHRoZSBvcHRpb25zIChwcm9wZXJ0aWVzKSBvZiB0aGUgZmlsdGVyIHNwZWNpZmllZCBieSAqZmlsdGVyKiAoYSBkaWN0KS5cbiIKKyJcbiIKKyJUaGUgcmVzdWx0IGRvZXMgbm90IGluY2x1ZGUgdGhlIGZpbHRlciBJRCBpdHNlbGYsIG9ubHkgdGhlIG9wdGlvbnMuIik7CisKKyNkZWZpbmUgX0xaTUFfX0VOQ09ERV9GSUxURVJfUFJPUEVSVElFU19NRVRIT0RERUYgICAgXAorICAgIHsiX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyIsIChQeUNGdW5jdGlvbilfbHptYV9fZW5jb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzLCBNRVRIX1ZBUkFSR1MsIF9sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX19lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBsem1hX2ZpbHRlciBmaWx0ZXIpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBsem1hX2ZpbHRlciBmaWx0ZXIgPSB7TFpNQV9WTElfVU5LTk9XTiwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOl9lbmNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLAorICAgICAgICBsem1hX2ZpbHRlcl9jb252ZXJ0ZXIsICZmaWx0ZXIpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2x6bWFfX2VuY29kZV9maWx0ZXJfcHJvcGVydGllc19pbXBsKG1vZHVsZSwgZmlsdGVyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmaWx0ZXIgKi8KKyAgICBpZiAoZmlsdGVyLmlkICE9IExaTUFfVkxJX1VOS05PV04pCisgICAgICAgUHlNZW1fRnJlZShmaWx0ZXIub3B0aW9ucyk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19fZG9jX18sCisiX2RlY29kZV9maWx0ZXJfcHJvcGVydGllcygkbW9kdWxlLCBmaWx0ZXJfaWQsIGVuY29kZWRfcHJvcHMsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBieXRlcyBvYmplY3QgZW5jb2RpbmcgdGhlIG9wdGlvbnMgKHByb3BlcnRpZXMpIG9mIHRoZSBmaWx0ZXIgc3BlY2lmaWVkIGJ5ICpmaWx0ZXIqIChhIGRpY3QpLlxuIgorIlxuIgorIlRoZSByZXN1bHQgZG9lcyBub3QgaW5jbHVkZSB0aGUgZmlsdGVyIElEIGl0c2VsZiwgb25seSB0aGUgb3B0aW9ucy4iKTsKKworI2RlZmluZSBfTFpNQV9fREVDT0RFX0ZJTFRFUl9QUk9QRVJUSUVTX01FVEhPRERFRiAgICBcCisgICAgeyJfZGVjb2RlX2ZpbHRlcl9wcm9wZXJ0aWVzIiwgKFB5Q0Z1bmN0aW9uKV9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMsIE1FVEhfVkFSQVJHUywgX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX2x6bWFfX2RlY29kZV9maWx0ZXJfcHJvcGVydGllc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGx6bWFfdmxpIGZpbHRlcl9pZCwgUHlfYnVmZmVyICplbmNvZGVkX3Byb3BzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgbHptYV92bGkgZmlsdGVyX2lkOworICAgIFB5X2J1ZmZlciBlbmNvZGVkX3Byb3BzID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPJnkqOl9kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXMiLAorICAgICAgICBsem1hX3ZsaV9jb252ZXJ0ZXIsICZmaWx0ZXJfaWQsICZlbmNvZGVkX3Byb3BzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9sem1hX19kZWNvZGVfZmlsdGVyX3Byb3BlcnRpZXNfaW1wbChtb2R1bGUsIGZpbHRlcl9pZCwgJmVuY29kZWRfcHJvcHMpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGVuY29kZWRfcHJvcHMgKi8KKyAgICBpZiAoZW5jb2RlZF9wcm9wcy5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZW5jb2RlZF9wcm9wcyk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTgwOGZlYzgyMTZhYzcxMmIgaW5wdXQ9YTkwNDkwNTQwMTNhMWI3N10qLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9jbGluaWMvX3BpY2tsZS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9fcGlja2xlLmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGM1NGQyCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9jbGluaWMvX3BpY2tsZS5jLmgKQEAgLTAsMCArMSw1NDUgQEAKKy8qW2NsaW5pYyBpbnB1dF0KK3ByZXNlcnZlCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtb19fZG9jX18sCisiY2xlYXJfbWVtbygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkNsZWFycyB0aGUgcGlja2xlclwncyBcIm1lbW9cIi5cbiIKKyJcbiIKKyJUaGUgbWVtbyBpcyB0aGUgZGF0YSBzdHJ1Y3R1cmUgdGhhdCByZW1lbWJlcnMgd2hpY2ggb2JqZWN0cyB0aGVcbiIKKyJwaWNrbGVyIGhhcyBhbHJlYWR5IHNlZW4sIHNvIHRoYXQgc2hhcmVkIG9yIHJlY3Vyc2l2ZSBvYmplY3RzIGFyZVxuIgorInBpY2tsZWQgYnkgcmVmZXJlbmNlIGFuZCBub3QgYnkgdmFsdWUuICBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlblxuIgorInJlLXVzaW5nIHBpY2tsZXJzLiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUl9DTEVBUl9NRU1PX01FVEhPRERFRiAgICBcCisgICAgeyJjbGVhcl9tZW1vIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vLCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyX2NsZWFyX21lbW9fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlcl9jbGVhcl9tZW1vX2ltcGwoUGlja2xlck9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtbyhQaWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1BpY2tsZXJfY2xlYXJfbWVtb19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyX2R1bXBfX2RvY19fLAorImR1bXAoJHNlbGYsIG9iaiwgLylcbiIKKyItLVxuIgorIlxuIgorIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0IHRvIHRoZSBvcGVuIGZpbGUuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSX0RVTVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyX2R1bXAsIE1FVEhfTywgX3BpY2tsZV9QaWNrbGVyX2R1bXBfX2RvY19ffSwKKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlcl9fX3NpemVvZl9fX19kb2NfXywKKyJfX3NpemVvZl9fKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyBzaXplIGluIG1lbW9yeSwgaW4gYnl0ZXMuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSX19fU0laRU9GX19fTUVUSE9EREVGICAgIFwKKyAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyX19fc2l6ZW9mX18sIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJfX19zaXplb2ZfX19fZG9jX199LAorCitzdGF0aWMgUHlfc3NpemVfdAorX3BpY2tsZV9QaWNrbGVyX19fc2l6ZW9mX19faW1wbChQaWNrbGVyT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlcl9fX3NpemVvZl9fKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBfcmV0dXJuX3ZhbHVlOworCisgICAgX3JldHVybl92YWx1ZSA9IF9waWNrbGVfUGlja2xlcl9fX3NpemVvZl9fX2ltcGwoc2VsZik7CisgICAgaWYgKChfcmV0dXJuX3ZhbHVlID09IC0xKSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gUHlMb25nX0Zyb21Tc2l6ZV90KF9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJfX19pbml0X19fX2RvY19fLAorIlBpY2tsZXIoZmlsZSwgcHJvdG9jb2w9Tm9uZSwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIlRoaXMgdGFrZXMgYSBiaW5hcnkgZmlsZSBmb3Igd3JpdGluZyBhIHBpY2tsZSBkYXRhIHN0cmVhbS5cbiIKKyJcbiIKKyJUaGUgb3B0aW9uYWwgKnByb3RvY29sKiBhcmd1bWVudCB0ZWxscyB0aGUgcGlja2xlciB0byB1c2UgdGhlIGdpdmVuXG4iCisicHJvdG9jb2w7IHN1cHBvcnRlZCBwcm90b2NvbHMgYXJlIDAsIDEsIDIsIDMgYW5kIDQuICBUaGUgZGVmYXVsdFxuIgorInByb3RvY29sIGlzIDM7IGEgYmFja3dhcmQtaW5jb21wYXRpYmxlIHByb3RvY29sIGRlc2lnbmVkIGZvciBQeXRob24gMy5cbiIKKyJcbiIKKyJTcGVjaWZ5aW5nIGEgbmVnYXRpdmUgcHJvdG9jb2wgdmVyc2lvbiBzZWxlY3RzIHRoZSBoaWdoZXN0IHByb3RvY29sXG4iCisidmVyc2lvbiBzdXBwb3J0ZWQuICBUaGUgaGlnaGVyIHRoZSBwcm90b2NvbCB1c2VkLCB0aGUgbW9yZSByZWNlbnQgdGhlXG4iCisidmVyc2lvbiBvZiBQeXRob24gbmVlZGVkIHRvIHJlYWQgdGhlIHBpY2tsZSBwcm9kdWNlZC5cbiIKKyJcbiIKKyJUaGUgKmZpbGUqIGFyZ3VtZW50IG11c3QgaGF2ZSBhIHdyaXRlKCkgbWV0aG9kIHRoYXQgYWNjZXB0cyBhIHNpbmdsZVxuIgorImJ5dGVzIGFyZ3VtZW50LiBJdCBjYW4gdGh1cyBiZSBhIGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgYmluYXJ5XG4iCisid3JpdGluZywgYW4gaW8uQnl0ZXNJTyBpbnN0YW5jZSwgb3IgYW55IG90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0c1xuIgorInRoaXMgaW50ZXJmYWNlLlxuIgorIlxuIgorIklmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgcHJvdG9jb2wgaXMgbGVzcyB0aGFuIDMsIHBpY2tsZSB3aWxsIHRyeVxuIgorInRvIG1hcCB0aGUgbmV3IFB5dGhvbiAzIG5hbWVzIHRvIHRoZSBvbGQgbW9kdWxlIG5hbWVzIHVzZWQgaW4gUHl0aG9uXG4iCisiMiwgc28gdGhhdCB0aGUgcGlja2xlIGRhdGEgc3RyZWFtIGlzIHJlYWRhYmxlIHdpdGggUHl0aG9uIDIuIik7CisKK3N0YXRpYyBpbnQKK19waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKFBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpmaWxlLCBQeU9iamVjdCAqcHJvdG9jb2wsIGludCBmaXhfaW1wb3J0cyk7CisKK3N0YXRpYyBpbnQKK19waWNrbGVfUGlja2xlcl9fX2luaXRfXyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgaW50IHJldHVybl92YWx1ZSA9IC0xOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsiZmlsZSIsICJwcm90b2NvbCIsICJmaXhfaW1wb3J0cyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpmaWxlOworICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98T3A6UGlja2xlciIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZpbGUsICZwcm90b2NvbCwgJmZpeF9pbXBvcnRzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfUGlja2xlcl9fX2luaXRfX19pbXBsKChQaWNrbGVyT2JqZWN0ICopc2VsZiwgZmlsZSwgcHJvdG9jb2wsIGZpeF9pbXBvcnRzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfXywKKyJjbGVhcigkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlbW92ZSBhbGwgaXRlbXMgZnJvbSBtZW1vLiIpOworCisjZGVmaW5lIF9QSUNLTEVfUElDS0xFUk1FTU9QUk9YWV9DTEVBUl9NRVRIT0RERUYgICAgXAorICAgIHsiY2xlYXIiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyLCBNRVRIX05PQVJHUywgX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NsZWFyX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXJfaW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jbGVhcihQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY2xlYXJfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfXywKKyJjb3B5KCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29weSB0aGUgbWVtbyB0byBhIG5ldyBvYmplY3QuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9QSUNLTEVSTUVNT1BST1hZX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHksIE1FVEhfTk9BUkdTLCBfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfY29weV9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X2NvcHlfaW1wbChQaWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5KFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX18sCisiX19yZWR1Y2VfXygkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIkltcGxlbWVudCBwaWNrbGUgc3VwcG9ydC4iKTsKKworI2RlZmluZSBfUElDS0xFX1BJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfXywgTUVUSF9OT0FSR1MsIF9waWNrbGVfUGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1BpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19pbXBsKFBpY2tsZXJNZW1vUHJveHlPYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX18oUGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9QaWNrbGVyTWVtb1Byb3h5X19fcmVkdWNlX19faW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyX2xvYWRfX2RvY19fLAorImxvYWQoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJMb2FkIGEgcGlja2xlLlxuIgorIlxuIgorIlJlYWQgYSBwaWNrbGVkIG9iamVjdCByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBvcGVuIGZpbGUgb2JqZWN0IGdpdmVuXG4iCisiaW4gdGhlIGNvbnN0cnVjdG9yLCBhbmQgcmV0dXJuIHRoZSByZWNvbnN0aXR1dGVkIG9iamVjdCBoaWVyYXJjaHlcbiIKKyJzcGVjaWZpZWQgdGhlcmVpbi4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUl9MT0FEX01FVEhPRERFRiAgICBcCisgICAgeyJsb2FkIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyX2xvYWQsIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlcl9sb2FkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9sb2FkX2ltcGwoVW5waWNrbGVyT2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX2xvYWQoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1VucGlja2xlcl9sb2FkX2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzX19kb2NfXywKKyJmaW5kX2NsYXNzKCRzZWxmLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYW4gb2JqZWN0IGZyb20gYSBzcGVjaWZpZWQgbW9kdWxlLlxuIgorIlxuIgorIklmIG5lY2Vzc2FyeSwgdGhlIG1vZHVsZSB3aWxsIGJlIGltcG9ydGVkLiBTdWJjbGFzc2VzIG1heSBvdmVycmlkZVxuIgorInRoaXMgbWV0aG9kIChlLmcuIHRvIHJlc3RyaWN0IHVucGlja2xpbmcgb2YgYXJiaXRyYXJ5IGNsYXNzZXMgYW5kXG4iCisiZnVuY3Rpb25zKS5cbiIKKyJcbiIKKyJUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjbGFzcyBvciBhIGZ1bmN0aW9uIG9iamVjdCBpc1xuIgorIm5lZWRlZC4gIEJvdGggYXJndW1lbnRzIHBhc3NlZCBhcmUgc3RyIG9iamVjdHMuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJfRklORF9DTEFTU19NRVRIT0RERUYgICAgXAorICAgIHsiZmluZF9jbGFzcyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlcl9maW5kX2NsYXNzLCBNRVRIX1ZBUkFSR1MsIF9waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfaW1wbChVbnBpY2tsZXJPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICptb2R1bGVfbmFtZSwgUHlPYmplY3QgKmdsb2JhbF9uYW1lKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3MoVW5waWNrbGVyT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbW9kdWxlX25hbWU7CisgICAgUHlPYmplY3QgKmdsb2JhbF9uYW1lOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZmluZF9jbGFzcyIsCisgICAgICAgIDIsIDIsCisgICAgICAgICZtb2R1bGVfbmFtZSwgJmdsb2JhbF9uYW1lKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfVW5waWNrbGVyX2ZpbmRfY2xhc3NfaW1wbChzZWxmLCBtb2R1bGVfbmFtZSwgZ2xvYmFsX25hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlcl9fX3NpemVvZl9fX19kb2NfXywKKyJfX3NpemVvZl9fKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyBzaXplIGluIG1lbW9yeSwgaW4gYnl0ZXMuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJfX19TSVpFT0ZfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19zaXplb2ZfXyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlcl9fX3NpemVvZl9fLCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJfX19zaXplb2ZfX19fZG9jX199LAorCitzdGF0aWMgUHlfc3NpemVfdAorX3BpY2tsZV9VbnBpY2tsZXJfX19zaXplb2ZfX19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlcl9fX3NpemVvZl9fKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IF9yZXR1cm5fdmFsdWU7CisKKyAgICBfcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9VbnBpY2tsZXJfX19zaXplb2ZfX19pbXBsKHNlbGYpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChfcmV0dXJuX3ZhbHVlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJfX19pbml0X19fX2RvY19fLAorIlVucGlja2xlcihmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz1cJ0FTQ0lJXCcsIGVycm9ycz1cJ3N0cmljdFwnKVxuIgorIi0tXG4iCisiXG4iCisiVGhpcyB0YWtlcyBhIGJpbmFyeSBmaWxlIGZvciByZWFkaW5nIGEgcGlja2xlIGRhdGEgc3RyZWFtLlxuIgorIlxuIgorIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm9cbiIKKyJwcm90b2NvbCBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdFwnc1xuIgorInJlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLlxuIgorIlxuIgorIlRoZSBhcmd1bWVudCAqZmlsZSogbXVzdCBoYXZlIHR3byBtZXRob2RzLCBhIHJlYWQoKSBtZXRob2QgdGhhdCB0YWtlc1xuIgorImFuIGludGVnZXIgYXJndW1lbnQsIGFuZCBhIHJlYWRsaW5lKCkgbWV0aG9kIHRoYXQgcmVxdWlyZXMgbm9cbiIKKyJhcmd1bWVudHMuICBCb3RoIG1ldGhvZHMgc2hvdWxkIHJldHVybiBieXRlcy4gIFRodXMgKmZpbGUqIGNhbiBiZSBhXG4iCisiYmluYXJ5IGZpbGUgb2JqZWN0IG9wZW5lZCBmb3IgcmVhZGluZywgYW4gaW8uQnl0ZXNJTyBvYmplY3QsIG9yIGFueVxuIgorIm90aGVyIGN1c3RvbSBvYmplY3QgdGhhdCBtZWV0cyB0aGlzIGludGVyZmFjZS5cbiIKKyJcbiIKKyJPcHRpb25hbCBrZXl3b3JkIGFyZ3VtZW50cyBhcmUgKmZpeF9pbXBvcnRzKiwgKmVuY29kaW5nKiBhbmQgKmVycm9ycyosXG4iCisid2hpY2ggYXJlIHVzZWQgdG8gY29udHJvbCBjb21wYXRpYmxpdHkgc3VwcG9ydCBmb3IgcGlja2xlIHN0cmVhbVxuIgorImdlbmVyYXRlZCBieSBQeXRob24gMi4gIElmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSwgcGlja2xlIHdpbGwgdHJ5IHRvXG4iCisibWFwIHRoZSBvbGQgUHl0aG9uIDIgbmFtZXMgdG8gdGhlIG5ldyBuYW1lcyB1c2VkIGluIFB5dGhvbiAzLiAgVGhlXG4iCisiKmVuY29kaW5nKiBhbmQgKmVycm9ycyogdGVsbCBwaWNrbGUgaG93IHRvIGRlY29kZSA4LWJpdCBzdHJpbmdcbiIKKyJpbnN0YW5jZXMgcGlja2xlZCBieSBQeXRob24gMjsgdGhlc2UgZGVmYXVsdCB0byBcJ0FTQ0lJXCcgYW5kIFwnc3RyaWN0XCcsXG4iCisicmVzcGVjdGl2ZWx5LiAgVGhlICplbmNvZGluZyogY2FuIGJlIFwnYnl0ZXNcJyB0byByZWFkIHRoZXNlIDgtYml0XG4iCisic3RyaW5nIGluc3RhbmNlcyBhcyBieXRlcyBvYmplY3RzLiIpOworCitzdGF0aWMgaW50CitfcGlja2xlX1VucGlja2xlcl9fX2luaXRfX19pbXBsKFVucGlja2xlck9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmZpbGUsIGludCBmaXhfaW1wb3J0cywgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKmVycm9ycyk7CisKK3N0YXRpYyBpbnQKK19waWNrbGVfVW5waWNrbGVyX19faW5pdF9fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBpbnQgcmV0dXJuX3ZhbHVlID0gLTE7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJmaWxlIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpmaWxlOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiQVNDSUkiOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9ICJzdHJpY3QiOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiT3wkcHNzOlVucGlja2xlciIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfVW5waWNrbGVyX19faW5pdF9fX2ltcGwoKFVucGlja2xlck9iamVjdCAqKXNlbGYsIGZpbGUsIGZpeF9pbXBvcnRzLCBlbmNvZGluZywgZXJyb3JzKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXJfX2RvY19fLAorImNsZWFyKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmVtb3ZlIGFsbCBpdGVtcyBmcm9tIG1lbW8uIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfQ0xFQVJfTUVUSE9EREVGICAgIFwKKyAgICB7ImNsZWFyIiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyLCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyX2ltcGwoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NsZWFyKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfY2xlYXJfaW1wbChzZWxmKTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHlfX2RvY19fLAorImNvcHkoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDb3B5IHRoZSBtZW1vIHRvIGEgbmV3IG9iamVjdC4iKTsKKworI2RlZmluZSBfUElDS0xFX1VOUElDS0xFUk1FTU9QUk9YWV9DT1BZX01FVEhPRERFRiAgICBcCisgICAgeyJjb3B5IiwgKFB5Q0Z1bmN0aW9uKV9waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHksIE1FVEhfTk9BUkdTLCBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfVW5waWNrbGVyTWVtb1Byb3h5X2NvcHkoVW5waWNrbGVyTWVtb1Byb3h5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9jb3B5X2ltcGwoc2VsZik7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fX19kb2NfXywKKyJfX3JlZHVjZV9fKCRzZWxmLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSW1wbGVtZW50IHBpY2tsaW5nIHN1cHBvcnQuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9VTlBJQ0tMRVJNRU1PUFJPWFlfX19SRURVQ0VfX19NRVRIT0RERUYgICAgXAorICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fLCBNRVRIX05PQVJHUywgX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19pbXBsKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX1VucGlja2xlck1lbW9Qcm94eV9fX3JlZHVjZV9fKFVucGlja2xlck1lbW9Qcm94eU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gX3BpY2tsZV9VbnBpY2tsZXJNZW1vUHJveHlfX19yZWR1Y2VfX19pbXBsKHNlbGYpOworfQorCitQeURvY19TVFJWQVIoX3BpY2tsZV9kdW1wX19kb2NfXywKKyJkdW1wKCRtb2R1bGUsIC8sIG9iaiwgZmlsZSwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIldyaXRlIGEgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiBvYmogdG8gdGhlIG9wZW4gZmlsZSBvYmplY3QgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBQaWNrbGVyKGZpbGUsIHByb3RvY29sKS5kdW1wKG9iailgYCwgYnV0IG1heVxuIgorImJlIG1vcmUgZWZmaWNpZW50LlxuIgorIlxuIgorIlRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW5cbiIKKyJwcm90b2NvbCBzdXBwb3J0ZWQgcHJvdG9jb2xzIGFyZSAwLCAxLCAyLCAzIGFuZCA0LiAgVGhlIGRlZmF1bHRcbiIKKyJwcm90b2NvbCBpcyAzOyBhIGJhY2t3YXJkLWluY29tcGF0aWJsZSBwcm90b2NvbCBkZXNpZ25lZCBmb3IgUHl0aG9uIDMuXG4iCisiXG4iCisiU3BlY2lmeWluZyBhIG5lZ2F0aXZlIHByb3RvY29sIHZlcnNpb24gc2VsZWN0cyB0aGUgaGlnaGVzdCBwcm90b2NvbFxuIgorInZlcnNpb24gc3VwcG9ydGVkLiAgVGhlIGhpZ2hlciB0aGUgcHJvdG9jb2wgdXNlZCwgdGhlIG1vcmUgcmVjZW50IHRoZVxuIgorInZlcnNpb24gb2YgUHl0aG9uIG5lZWRlZCB0byByZWFkIHRoZSBwaWNrbGUgcHJvZHVjZWQuXG4iCisiXG4iCisiVGhlICpmaWxlKiBhcmd1bWVudCBtdXN0IGhhdmUgYSB3cml0ZSgpIG1ldGhvZCB0aGF0IGFjY2VwdHMgYSBzaW5nbGVcbiIKKyJieXRlcyBhcmd1bWVudC4gIEl0IGNhbiB0aHVzIGJlIGEgZmlsZSBvYmplY3Qgb3BlbmVkIGZvciBiaW5hcnlcbiIKKyJ3cml0aW5nLCBhbiBpby5CeXRlc0lPIGluc3RhbmNlLCBvciBhbnkgb3RoZXIgY3VzdG9tIG9iamVjdCB0aGF0IG1lZXRzXG4iCisidGhpcyBpbnRlcmZhY2UuXG4iCisiXG4iCisiSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlIGFuZCBwcm90b2NvbCBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGwgdHJ5XG4iCisidG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpbiBQeXRob25cbiIKKyIyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4iKTsKKworI2RlZmluZSBfUElDS0xFX0RVTVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImR1bXAiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9kdW1wLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9kdW1wX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2R1bXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqb2JqLCBQeU9iamVjdCAqZmlsZSwgUHlPYmplY3QgKnByb3RvY29sLCBpbnQgZml4X2ltcG9ydHMpOworCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dhcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsib2JqIiwgImZpbGUiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5T2JqZWN0ICpmaWxlOworICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk9PfE8kcDpkdW1wIiwgX2tleXdvcmRzLAorICAgICAgICAmb2JqLCAmZmlsZSwgJnByb3RvY29sLCAmZml4X2ltcG9ydHMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9kdW1wX2ltcGwobW9kdWxlLCBvYmosIGZpbGUsIHByb3RvY29sLCBmaXhfaW1wb3J0cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfZHVtcHNfX2RvY19fLAorImR1bXBzKCRtb2R1bGUsIC8sIG9iaiwgcHJvdG9jb2w9Tm9uZSwgKiwgZml4X2ltcG9ydHM9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgcGlja2xlZCByZXByZXNlbnRhdGlvbiBvZiB0aGUgb2JqZWN0IGFzIGEgYnl0ZXMgb2JqZWN0LlxuIgorIlxuIgorIlRoZSBvcHRpb25hbCAqcHJvdG9jb2wqIGFyZ3VtZW50IHRlbGxzIHRoZSBwaWNrbGVyIHRvIHVzZSB0aGUgZ2l2ZW5cbiIKKyJwcm90b2NvbDsgc3VwcG9ydGVkIHByb3RvY29scyBhcmUgMCwgMSwgMiwgMyBhbmQgNC4gIFRoZSBkZWZhdWx0XG4iCisicHJvdG9jb2wgaXMgMzsgYSBiYWNrd2FyZC1pbmNvbXBhdGlibGUgcHJvdG9jb2wgZGVzaWduZWQgZm9yIFB5dGhvbiAzLlxuIgorIlxuIgorIlNwZWNpZnlpbmcgYSBuZWdhdGl2ZSBwcm90b2NvbCB2ZXJzaW9uIHNlbGVjdHMgdGhlIGhpZ2hlc3QgcHJvdG9jb2xcbiIKKyJ2ZXJzaW9uIHN1cHBvcnRlZC4gIFRoZSBoaWdoZXIgdGhlIHByb3RvY29sIHVzZWQsIHRoZSBtb3JlIHJlY2VudCB0aGVcbiIKKyJ2ZXJzaW9uIG9mIFB5dGhvbiBuZWVkZWQgdG8gcmVhZCB0aGUgcGlja2xlIHByb2R1Y2VkLlxuIgorIlxuIgorIklmICpmaXhfaW1wb3J0cyogaXMgVHJ1ZSBhbmQgKnByb3RvY29sKiBpcyBsZXNzIHRoYW4gMywgcGlja2xlIHdpbGxcbiIKKyJ0cnkgdG8gbWFwIHRoZSBuZXcgUHl0aG9uIDMgbmFtZXMgdG8gdGhlIG9sZCBtb2R1bGUgbmFtZXMgdXNlZCBpblxuIgorIlB5dGhvbiAyLCBzbyB0aGF0IHRoZSBwaWNrbGUgZGF0YSBzdHJlYW0gaXMgcmVhZGFibGUgd2l0aCBQeXRob24gMi4iKTsKKworI2RlZmluZSBfUElDS0xFX0RVTVBTX01FVEhPRERFRiAgICBcCisgICAgeyJkdW1wcyIsIChQeUNGdW5jdGlvbilfcGlja2xlX2R1bXBzLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9kdW1wc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorX3BpY2tsZV9kdW1wc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICpwcm90b2NvbCwgaW50IGZpeF9pbXBvcnRzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfZHVtcHMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJvYmoiLCAicHJvdG9jb2wiLCAiZml4X2ltcG9ydHMiLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqb2JqOworICAgIFB5T2JqZWN0ICpwcm90b2NvbCA9IE5VTEw7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk98TyRwOmR1bXBzIiwgX2tleXdvcmRzLAorICAgICAgICAmb2JqLCAmcHJvdG9jb2wsICZmaXhfaW1wb3J0cykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfcGlja2xlX2R1bXBzX2ltcGwobW9kdWxlLCBvYmosIHByb3RvY29sLCBmaXhfaW1wb3J0cyk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKF9waWNrbGVfbG9hZF9fZG9jX18sCisibG9hZCgkbW9kdWxlLCAvLCBmaWxlLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz1cJ0FTQ0lJXCcsXG4iCisiICAgICBlcnJvcnM9XCdzdHJpY3RcJylcbiIKKyItLVxuIgorIlxuIgorIlJlYWQgYW5kIHJldHVybiBhbiBvYmplY3QgZnJvbSB0aGUgcGlja2xlIGRhdGEgc3RvcmVkIGluIGEgZmlsZS5cbiIKKyJcbiIKKyJUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYGBVbnBpY2tsZXIoZmlsZSkubG9hZCgpYGAsIGJ1dCBtYXkgYmUgbW9yZVxuIgorImVmZmljaWVudC5cbiIKKyJcbiIKKyJUaGUgcHJvdG9jb2wgdmVyc2lvbiBvZiB0aGUgcGlja2xlIGlzIGRldGVjdGVkIGF1dG9tYXRpY2FsbHksIHNvIG5vXG4iCisicHJvdG9jb2wgYXJndW1lbnQgaXMgbmVlZGVkLiAgQnl0ZXMgcGFzdCB0aGUgcGlja2xlZCBvYmplY3RcJ3NcbiIKKyJyZXByZXNlbnRhdGlvbiBhcmUgaWdub3JlZC5cbiIKKyJcbiIKKyJUaGUgYXJndW1lbnQgKmZpbGUqIG11c3QgaGF2ZSB0d28gbWV0aG9kcywgYSByZWFkKCkgbWV0aG9kIHRoYXQgdGFrZXNcbiIKKyJhbiBpbnRlZ2VyIGFyZ3VtZW50LCBhbmQgYSByZWFkbGluZSgpIG1ldGhvZCB0aGF0IHJlcXVpcmVzIG5vXG4iCisiYXJndW1lbnRzLiAgQm90aCBtZXRob2RzIHNob3VsZCByZXR1cm4gYnl0ZXMuICBUaHVzICpmaWxlKiBjYW4gYmUgYVxuIgorImJpbmFyeSBmaWxlIG9iamVjdCBvcGVuZWQgZm9yIHJlYWRpbmcsIGFuIGlvLkJ5dGVzSU8gb2JqZWN0LCBvciBhbnlcbiIKKyJvdGhlciBjdXN0b20gb2JqZWN0IHRoYXQgbWVldHMgdGhpcyBpbnRlcmZhY2UuXG4iCisiXG4iCisiT3B0aW9uYWwga2V5d29yZCBhcmd1bWVudHMgYXJlICpmaXhfaW1wb3J0cyosICplbmNvZGluZyogYW5kICplcnJvcnMqLFxuIgorIndoaWNoIGFyZSB1c2VkIHRvIGNvbnRyb2wgY29tcGF0aWJsaXR5IHN1cHBvcnQgZm9yIHBpY2tsZSBzdHJlYW1cbiIKKyJnZW5lcmF0ZWQgYnkgUHl0aG9uIDIuICBJZiAqZml4X2ltcG9ydHMqIGlzIFRydWUsIHBpY2tsZSB3aWxsIHRyeSB0b1xuIgorIm1hcCB0aGUgb2xkIFB5dGhvbiAyIG5hbWVzIHRvIHRoZSBuZXcgbmFtZXMgdXNlZCBpbiBQeXRob24gMy4gIFRoZVxuIgorIiplbmNvZGluZyogYW5kICplcnJvcnMqIHRlbGwgcGlja2xlIGhvdyB0byBkZWNvZGUgOC1iaXQgc3RyaW5nXG4iCisiaW5zdGFuY2VzIHBpY2tsZWQgYnkgUHl0aG9uIDI7IHRoZXNlIGRlZmF1bHQgdG8gXCdBU0NJSVwnIGFuZCBcJ3N0cmljdFwnLFxuIgorInJlc3BlY3RpdmVseS4gIFRoZSAqZW5jb2RpbmcqIGNhbiBiZSBcJ2J5dGVzXCcgdG8gcmVhZCB0aGVzZSA4LWJpdFxuIgorInN0cmluZyBpbnN0YW5jZXMgYXMgYnl0ZXMgb2JqZWN0cy4iKTsKKworI2RlZmluZSBfUElDS0xFX0xPQURfTUVUSE9EREVGICAgIFwKKyAgICB7ImxvYWQiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9sb2FkLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgX3BpY2tsZV9sb2FkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitfcGlja2xlX2xvYWRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZmlsZSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7ImZpbGUiLCAiZml4X2ltcG9ydHMiLCAiZW5jb2RpbmciLCAiZXJyb3JzIiwgTlVMTH07CisgICAgUHlPYmplY3QgKmZpbGU7CisgICAgaW50IGZpeF9pbXBvcnRzID0gMTsKKyAgICBjb25zdCBjaGFyICplbmNvZGluZyA9ICJBU0NJSSI7CisgICAgY29uc3QgY2hhciAqZXJyb3JzID0gInN0cmljdCI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJPfCRwc3M6bG9hZCIsIF9rZXl3b3JkcywKKyAgICAgICAgJmZpbGUsICZmaXhfaW1wb3J0cywgJmVuY29kaW5nLCAmZXJyb3JzKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9waWNrbGVfbG9hZF9pbXBsKG1vZHVsZSwgZmlsZSwgZml4X2ltcG9ydHMsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihfcGlja2xlX2xvYWRzX19kb2NfXywKKyJsb2FkcygkbW9kdWxlLCAvLCBkYXRhLCAqLCBmaXhfaW1wb3J0cz1UcnVlLCBlbmNvZGluZz1cJ0FTQ0lJXCcsXG4iCisiICAgICAgZXJyb3JzPVwnc3RyaWN0XCcpXG4iCisiLS1cbiIKKyJcbiIKKyJSZWFkIGFuZCByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGdpdmVuIHBpY2tsZSBkYXRhLlxuIgorIlxuIgorIlRoZSBwcm90b2NvbCB2ZXJzaW9uIG9mIHRoZSBwaWNrbGUgaXMgZGV0ZWN0ZWQgYXV0b21hdGljYWxseSwgc28gbm9cbiIKKyJwcm90b2NvbCBhcmd1bWVudCBpcyBuZWVkZWQuICBCeXRlcyBwYXN0IHRoZSBwaWNrbGVkIG9iamVjdFwnc1xuIgorInJlcHJlc2VudGF0aW9uIGFyZSBpZ25vcmVkLlxuIgorIlxuIgorIk9wdGlvbmFsIGtleXdvcmQgYXJndW1lbnRzIGFyZSAqZml4X2ltcG9ydHMqLCAqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKixcbiIKKyJ3aGljaCBhcmUgdXNlZCB0byBjb250cm9sIGNvbXBhdGlibGl0eSBzdXBwb3J0IGZvciBwaWNrbGUgc3RyZWFtXG4iCisiZ2VuZXJhdGVkIGJ5IFB5dGhvbiAyLiAgSWYgKmZpeF9pbXBvcnRzKiBpcyBUcnVlLCBwaWNrbGUgd2lsbCB0cnkgdG9cbiIKKyJtYXAgdGhlIG9sZCBQeXRob24gMiBuYW1lcyB0byB0aGUgbmV3IG5hbWVzIHVzZWQgaW4gUHl0aG9uIDMuICBUaGVcbiIKKyIqZW5jb2RpbmcqIGFuZCAqZXJyb3JzKiB0ZWxsIHBpY2tsZSBob3cgdG8gZGVjb2RlIDgtYml0IHN0cmluZ1xuIgorImluc3RhbmNlcyBwaWNrbGVkIGJ5IFB5dGhvbiAyOyB0aGVzZSBkZWZhdWx0IHRvIFwnQVNDSUlcJyBhbmQgXCdzdHJpY3RcJyxcbiIKKyJyZXNwZWN0aXZlbHkuICBUaGUgKmVuY29kaW5nKiBjYW4gYmUgXCdieXRlc1wnIHRvIHJlYWQgdGhlc2UgOC1iaXRcbiIKKyJzdHJpbmcgaW5zdGFuY2VzIGFzIGJ5dGVzIG9iamVjdHMuIik7CisKKyNkZWZpbmUgX1BJQ0tMRV9MT0FEU19NRVRIT0RERUYgICAgXAorICAgIHsibG9hZHMiLCAoUHlDRnVuY3Rpb24pX3BpY2tsZV9sb2FkcywgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsIF9waWNrbGVfbG9hZHNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZHNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqZGF0YSwgaW50IGZpeF9pbXBvcnRzLCBjb25zdCBjaGFyICplbmNvZGluZywgY29uc3QgY2hhciAqZXJyb3JzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19waWNrbGVfbG9hZHMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJkYXRhIiwgImZpeF9pbXBvcnRzIiwgImVuY29kaW5nIiwgImVycm9ycyIsIE5VTEx9OworICAgIFB5T2JqZWN0ICpkYXRhOworICAgIGludCBmaXhfaW1wb3J0cyA9IDE7CisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcgPSAiQVNDSUkiOworICAgIGNvbnN0IGNoYXIgKmVycm9ycyA9ICJzdHJpY3QiOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiT3wkcHNzOmxvYWRzIiwgX2tleXdvcmRzLAorICAgICAgICAmZGF0YSwgJmZpeF9pbXBvcnRzLCAmZW5jb2RpbmcsICZlcnJvcnMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX3BpY2tsZV9sb2Fkc19pbXBsKG1vZHVsZSwgZGF0YSwgZml4X2ltcG9ydHMsIGVuY29kaW5nLCBlcnJvcnMpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MWJhMjEwMTUyZTIyNjFkOCBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9hdWRpb29wLmMuaCBiL01vZHVsZXMvY2xpbmljL2F1ZGlvb3AuYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwZWY1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL2NsaW5pYy9hdWRpb29wLmMuaApAQCAtMCwwICsxLDg4OSBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfZ2V0c2FtcGxlX19kb2NfXywKKyJnZXRzYW1wbGUoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBpbmRleCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgdmFsdWUgb2Ygc2FtcGxlIGluZGV4IGZyb20gdGhlIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfR0VUU0FNUExFX01FVEhPRERFRiAgICBcCisgICAgeyJnZXRzYW1wbGUiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9nZXRzYW1wbGUsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9nZXRzYW1wbGVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZ2V0c2FtcGxlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBQeV9zc2l6ZV90IGluZGV4KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfZ2V0c2FtcGxlKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgUHlfc3NpemVfdCBpbmRleDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppbjpnZXRzYW1wbGUiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJmluZGV4KSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfZ2V0c2FtcGxlX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBpbmRleCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX21heF9fZG9jX18sCisibWF4KCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbWF4aW11bSBvZiB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYWxsIHNhbXBsZXMgaW4gYSBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX01BWF9NRVRIT0RERUYgICAgXAorICAgIHsibWF4IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbWF4LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbWF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21heChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bWF4IiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9tYXhfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9taW5tYXhfX2RvY19fLAorIm1pbm1heCgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzIG9mIGFsbCBzYW1wbGVzIGluIHRoZSBzb3VuZCBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX01JTk1BWF9NRVRIT0RERUYgICAgXAorICAgIHsibWlubWF4IiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbWlubWF4LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbWlubWF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21pbm1heF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX21pbm1heChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bWlubWF4IiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9taW5tYXhfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9hdmdfX2RvY19fLAorImF2ZygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIGF2ZXJhZ2Ugb3ZlciBhbGwgc2FtcGxlcyBpbiB0aGUgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9BVkdfTUVUSE9EREVGICAgIFwKKyAgICB7ImF2ZyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2F2ZywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2F2Z19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hdmdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hdmcoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmF2ZyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYXZnX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3Bfcm1zX19kb2NfXywKKyJybXMoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIHRoZSByb290LW1lYW4tc3F1YXJlIG9mIHRoZSBmcmFnbWVudCwgaS5lLiBzcXJ0KHN1bShTX2leMikvbikuIik7CisKKyNkZWZpbmUgQVVESU9PUF9STVNfTUVUSE9EREVGICAgIFwKKyAgICB7InJtcyIsIChQeUNGdW5jdGlvbilhdWRpb29wX3JtcywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3Jtc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9ybXNfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9ybXMoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOnJtcyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3Bfcm1zX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfZmluZGZpdF9fZG9jX18sCisiZmluZGZpdCgkbW9kdWxlLCBmcmFnbWVudCwgcmVmZXJlbmNlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiVHJ5IHRvIG1hdGNoIHJlZmVyZW5jZSBhcyB3ZWxsIGFzIHBvc3NpYmxlIHRvIGEgcG9ydGlvbiBvZiBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX0ZJTkRGSVRfTUVUSE9EREVGICAgIFwKKyAgICB7ImZpbmRmaXQiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9maW5kZml0LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfZmluZGZpdF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9maW5kZml0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgUHlfYnVmZmVyICpyZWZlcmVuY2UpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9maW5kZml0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeV9idWZmZXIgcmVmZXJlbmNlID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnkqOmZpbmRmaXQiLAorICAgICAgICAmZnJhZ21lbnQsICZyZWZlcmVuY2UpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9maW5kZml0X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsICZyZWZlcmVuY2UpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisgICAgLyogQ2xlYW51cCBmb3IgcmVmZXJlbmNlICovCisgICAgaWYgKHJlZmVyZW5jZS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcmVmZXJlbmNlKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2ZpbmRmYWN0b3JfX2RvY19fLAorImZpbmRmYWN0b3IoJG1vZHVsZSwgZnJhZ21lbnQsIHJlZmVyZW5jZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGZhY3RvciBGIHN1Y2ggdGhhdCBybXMoYWRkKGZyYWdtZW50LCBtdWwocmVmZXJlbmNlLCAtRikpKSBpcyBtaW5pbWFsLiIpOworCisjZGVmaW5lIEFVRElPT1BfRklOREZBQ1RPUl9NRVRIT0RERUYgICAgXAorICAgIHsiZmluZGZhY3RvciIsIChQeUNGdW5jdGlvbilhdWRpb29wX2ZpbmRmYWN0b3IsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9maW5kZmFjdG9yX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRmYWN0b3JfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9idWZmZXIgKnJlZmVyZW5jZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRmYWN0b3IoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciByZWZlcmVuY2UgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqeSo6ZmluZGZhY3RvciIsCisgICAgICAgICZmcmFnbWVudCwgJnJlZmVyZW5jZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2ZpbmRmYWN0b3JfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgJnJlZmVyZW5jZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKyAgICAvKiBDbGVhbnVwIGZvciByZWZlcmVuY2UgKi8KKyAgICBpZiAocmVmZXJlbmNlLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZyZWZlcmVuY2UpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfZmluZG1heF9fZG9jX18sCisiZmluZG1heCgkbW9kdWxlLCBmcmFnbWVudCwgbGVuZ3RoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiU2VhcmNoIGZyYWdtZW50IGZvciBhIHNsaWNlIG9mIHNwZWNpZmllZCBudW1iZXIgb2Ygc2FtcGxlcyB3aXRoIG1heGltdW0gZW5lcmd5LiIpOworCisjZGVmaW5lIEFVRElPT1BfRklORE1BWF9NRVRIT0RERUYgICAgXAorICAgIHsiZmluZG1heCIsIChQeUNGdW5jdGlvbilhdWRpb29wX2ZpbmRtYXgsIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9maW5kbWF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRtYXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBQeV9zc2l6ZV90IGxlbmd0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2ZpbmRtYXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIFB5X3NzaXplX3QgbGVuZ3RoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Km46ZmluZG1heCIsCisgICAgICAgICZmcmFnbWVudCwgJmxlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2ZpbmRtYXhfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgbGVuZ3RoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYXZncHBfX2RvY19fLAorImF2Z3BwKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgYXZlcmFnZSBwZWFrLXBlYWsgdmFsdWUgb3ZlciBhbGwgc2FtcGxlcyBpbiB0aGUgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9BVkdQUF9NRVRIT0RERUYgICAgXAorICAgIHsiYXZncHAiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9hdmdwcCwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2F2Z3BwX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2F2Z3BwX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYXZncHAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmF2Z3BwIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9hdmdwcF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX21heHBwX19kb2NfXywKKyJtYXhwcCgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG1heGltdW0gcGVhay1wZWFrIHZhbHVlIGluIHRoZSBzb3VuZCBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX01BWFBQX01FVEhPRERFRiAgICBcCisgICAgeyJtYXhwcCIsIChQeUNGdW5jdGlvbilhdWRpb29wX21heHBwLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbWF4cHBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbWF4cHBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9tYXhwcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bWF4cHAiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX21heHBwX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfY3Jvc3NfX2RvY19fLAorImNyb3NzKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiB0aGUgbnVtYmVyIG9mIHplcm8gY3Jvc3NpbmdzIGluIHRoZSBmcmFnbWVudCBwYXNzZWQgYXMgYW4gYXJndW1lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9DUk9TU19NRVRIT0RERUYgICAgXAorICAgIHsiY3Jvc3MiLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF9jcm9zcywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2Nyb3NzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2Nyb3NzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfY3Jvc3MoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOmNyb3NzIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9jcm9zc19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX211bF9fZG9jX18sCisibXVsKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgZmFjdG9yLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZnJhZ21lbnQgdGhhdCBoYXMgYWxsIHNhbXBsZXMgaW4gdGhlIG9yaWdpbmFsIGZyYWdtZW50IG11bHRpcGxpZWQgYnkgdGhlIGZsb2F0aW5nLXBvaW50IHZhbHVlIGZhY3Rvci4iKTsKKworI2RlZmluZSBBVURJT09QX01VTF9NRVRIT0RERUYgICAgXAorICAgIHsibXVsIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbXVsLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbXVsX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX211bF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgZG91YmxlIGZhY3Rvcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX211bChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIGRvdWJsZSBmYWN0b3I7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaWQ6bXVsIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZmYWN0b3IpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9tdWxfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGZhY3Rvcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX3RvbW9ub19fZG9jX18sCisidG9tb25vKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgbGZhY3RvciwgcmZhY3RvciwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgYSBzdGVyZW8gZnJhZ21lbnQgdG8gYSBtb25vIGZyYWdtZW50LiIpOworCisjZGVmaW5lIEFVRElPT1BfVE9NT05PX01FVEhPRERFRiAgICBcCisgICAgeyJ0b21vbm8iLCAoUHlDRnVuY3Rpb24pYXVkaW9vcF90b21vbm8sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF90b21vbm9fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfdG9tb25vX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpmcmFnbWVudCwgaW50IHdpZHRoLCBkb3VibGUgbGZhY3RvciwgZG91YmxlIHJmYWN0b3IpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF90b21vbm8oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKyAgICBkb3VibGUgbGZhY3RvcjsKKyAgICBkb3VibGUgcmZhY3RvcjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppZGQ6dG9tb25vIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZsZmFjdG9yLCAmcmZhY3RvcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3RvbW9ub19pbXBsKG1vZHVsZSwgJmZyYWdtZW50LCB3aWR0aCwgbGZhY3RvciwgcmZhY3Rvcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX3Rvc3RlcmVvX19kb2NfXywKKyJ0b3N0ZXJlbygkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIGxmYWN0b3IsIHJmYWN0b3IsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJHZW5lcmF0ZSBhIHN0ZXJlbyBmcmFnbWVudCBmcm9tIGEgbW9ubyBmcmFnbWVudC4iKTsKKworI2RlZmluZSBBVURJT09QX1RPU1RFUkVPX01FVEhPRERFRiAgICBcCisgICAgeyJ0b3N0ZXJlbyIsIChQeUNGdW5jdGlvbilhdWRpb29wX3Rvc3RlcmVvLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfdG9zdGVyZW9fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfdG9zdGVyZW9faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGRvdWJsZSBsZmFjdG9yLCBkb3VibGUgcmZhY3Rvcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3Rvc3RlcmVvKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgZG91YmxlIGxmYWN0b3I7CisgICAgZG91YmxlIHJmYWN0b3I7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaWRkOnRvc3RlcmVvIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZsZmFjdG9yLCAmcmZhY3RvcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3Rvc3RlcmVvX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBsZmFjdG9yLCByZmFjdG9yKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYWRkX19kb2NfXywKKyJhZGQoJG1vZHVsZSwgZnJhZ21lbnQxLCBmcmFnbWVudDIsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZnJhZ21lbnQgd2hpY2ggaXMgdGhlIGFkZGl0aW9uIG9mIHRoZSB0d28gc2FtcGxlcyBwYXNzZWQgYXMgcGFyYW1ldGVycy4iKTsKKworI2RlZmluZSBBVURJT09QX0FERF9NRVRIT0RERUYgICAgXAorICAgIHsiYWRkIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYWRkLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYWRkX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2FkZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQxLCBQeV9idWZmZXIgKmZyYWdtZW50MiwgaW50IHdpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYWRkKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudDEgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfYnVmZmVyIGZyYWdtZW50MiA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqeSppOmFkZCIsCisgICAgICAgICZmcmFnbWVudDEsICZmcmFnbWVudDIsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2FkZF9pbXBsKG1vZHVsZSwgJmZyYWdtZW50MSwgJmZyYWdtZW50Miwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50MSAqLworICAgIGlmIChmcmFnbWVudDEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50MSk7CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQyICovCisgICAgaWYgKGZyYWdtZW50Mi5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQyKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihhdWRpb29wX2JpYXNfX2RvY19fLAorImJpYXMoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBiaWFzLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZnJhZ21lbnQgdGhhdCBpcyB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgd2l0aCBhIGJpYXMgYWRkZWQgdG8gZWFjaCBzYW1wbGUuIik7CisKKyNkZWZpbmUgQVVESU9PUF9CSUFTX01FVEhPRERFRiAgICBcCisgICAgeyJiaWFzIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYmlhcywgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2JpYXNfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYmlhc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IGJpYXMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9iaWFzKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGJpYXM7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaWk6YmlhcyIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmYmlhcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2JpYXNfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIGJpYXMpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9yZXZlcnNlX19kb2NfXywKKyJyZXZlcnNlKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldmVyc2UgdGhlIHNhbXBsZXMgaW4gYSBmcmFnbWVudCBhbmQgcmV0dXJucyB0aGUgbW9kaWZpZWQgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9SRVZFUlNFX01FVEhPRERFRiAgICBcCisgICAgeyJyZXZlcnNlIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfcmV2ZXJzZSwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3JldmVyc2VfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfcmV2ZXJzZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3JldmVyc2UoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGZyYWdtZW50ID0ge05VTEwsIE5VTEx9OworICAgIGludCB3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppOnJldmVyc2UiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX3JldmVyc2VfaW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9ieXRlc3dhcF9fZG9jX18sCisiYnl0ZXN3YXAoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBiaWctZW5kaWFuIHNhbXBsZXMgdG8gbGl0dGxlLWVuZGlhbiBhbmQgdmljZSB2ZXJzYS4iKTsKKworI2RlZmluZSBBVURJT09QX0JZVEVTV0FQX01FVEhPRERFRiAgICBcCisgICAgeyJieXRlc3dhcCIsIChQeUNGdW5jdGlvbilhdWRpb29wX2J5dGVzd2FwLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfYnl0ZXN3YXBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfYnl0ZXN3YXBfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9ieXRlc3dhcChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6Ynl0ZXN3YXAiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2J5dGVzd2FwX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfbGluMmxpbl9fZG9jX18sCisibGluMmxpbigkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIG5ld3dpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzYW1wbGVzIGJldHdlZW4gMS0sIDItLCAzLSBhbmQgNC1ieXRlIGZvcm1hdHMuIik7CisKKyNkZWZpbmUgQVVESU9PUF9MSU4yTElOX01FVEhPRERFRiAgICBcCisgICAgeyJsaW4ybGluIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbGluMmxpbiwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2xpbjJsaW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgaW50IG5ld3dpZHRoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmxpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIGludCBuZXd3aWR0aDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppaTpsaW4ybGluIiwKKyAgICAgICAgJmZyYWdtZW50LCAmd2lkdGgsICZuZXd3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2xpbjJsaW5faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIG5ld3dpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfcmF0ZWN2X19kb2NfXywKKyJyYXRlY3YoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBuY2hhbm5lbHMsIGlucmF0ZSwgb3V0cmF0ZSwgc3RhdGUsXG4iCisiICAgICAgIHdlaWdodEE9MSwgd2VpZ2h0Qj0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCB0aGUgZnJhbWUgcmF0ZSBvZiB0aGUgaW5wdXQgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9SQVRFQ1ZfTUVUSE9EREVGICAgIFwKKyAgICB7InJhdGVjdiIsIChQeUNGdW5jdGlvbilhdWRpb29wX3JhdGVjdiwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX3JhdGVjdl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9yYXRlY3ZfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIGludCBuY2hhbm5lbHMsIGludCBpbnJhdGUsIGludCBvdXRyYXRlLCBQeU9iamVjdCAqc3RhdGUsIGludCB3ZWlnaHRBLCBpbnQgd2VpZ2h0Qik7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3JhdGVjdihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIGludCBuY2hhbm5lbHM7CisgICAgaW50IGlucmF0ZTsKKyAgICBpbnQgb3V0cmF0ZTsKKyAgICBQeU9iamVjdCAqc3RhdGU7CisgICAgaW50IHdlaWdodEEgPSAxOworICAgIGludCB3ZWlnaHRCID0gMDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppaWlpT3xpaTpyYXRlY3YiLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJm5jaGFubmVscywgJmlucmF0ZSwgJm91dHJhdGUsICZzdGF0ZSwgJndlaWdodEEsICZ3ZWlnaHRCKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfcmF0ZWN2X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBuY2hhbm5lbHMsIGlucmF0ZSwgb3V0cmF0ZSwgc3RhdGUsIHdlaWdodEEsIHdlaWdodEIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9saW4ydWxhd19fZG9jX18sCisibGluMnVsYXcoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzYW1wbGVzIGluIHRoZSBhdWRpbyBmcmFnbWVudCB0byB1LUxBVyBlbmNvZGluZy4iKTsKKworI2RlZmluZSBBVURJT09QX0xJTjJVTEFXX01FVEhPRERFRiAgICBcCisgICAgeyJsaW4ydWxhdyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2xpbjJ1bGF3LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbGluMnVsYXdfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMnVsYXdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4ydWxhdyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bGluMnVsYXciLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2xpbjJ1bGF3X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfdWxhdzJsaW5fX2RvY19fLAorInVsYXcybGluKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgc291bmQgZnJhZ21lbnRzIGluIHUtTEFXIGVuY29kaW5nIHRvIGxpbmVhcmx5IGVuY29kZWQgc291bmQgZnJhZ21lbnRzLiIpOworCisjZGVmaW5lIEFVRElPT1BfVUxBVzJMSU5fTUVUSE9EREVGICAgIFwKKyAgICB7InVsYXcybGluIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfdWxhdzJsaW4sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF91bGF3Mmxpbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF91bGF3Mmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX3VsYXcybGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTp1bGF3MmxpbiIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfdWxhdzJsaW5faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9saW4yYWxhd19fZG9jX18sCisibGluMmFsYXcoJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzYW1wbGVzIGluIHRoZSBhdWRpbyBmcmFnbWVudCB0byBhLUxBVyBlbmNvZGluZy4iKTsKKworI2RlZmluZSBBVURJT09QX0xJTjJBTEFXX01FVEhPRERFRiAgICBcCisgICAgeyJsaW4yYWxhdyIsIChQeUNGdW5jdGlvbilhdWRpb29wX2xpbjJhbGF3LCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbGluMmFsYXdfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmFsYXdfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgpOworCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9saW4yYWxhdyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5Kmk6bGluMmFsYXciLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBhdWRpb29wX2xpbjJhbGF3X2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYWxhdzJsaW5fX2RvY19fLAorImFsYXcybGluKCRtb2R1bGUsIGZyYWdtZW50LCB3aWR0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnQgc291bmQgZnJhZ21lbnRzIGluIGEtTEFXIGVuY29kaW5nIHRvIGxpbmVhcmx5IGVuY29kZWQgc291bmQgZnJhZ21lbnRzLiIpOworCisjZGVmaW5lIEFVRElPT1BfQUxBVzJMSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImFsYXcybGluIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfYWxhdzJsaW4sIE1FVEhfVkFSQVJHUywgYXVkaW9vcF9hbGF3Mmxpbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hbGF3Mmxpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2FsYXcybGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqaTphbGF3MmxpbiIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYWxhdzJsaW5faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGZyYWdtZW50ICovCisgICAgaWYgKGZyYWdtZW50Lm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZmcmFnbWVudCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYXVkaW9vcF9saW4yYWRwY21fX2RvY19fLAorImxpbjJhZHBjbSgkbW9kdWxlLCBmcmFnbWVudCwgd2lkdGgsIHN0YXRlLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29udmVydCBzYW1wbGVzIHRvIDQgYml0IEludGVsL0RWSSBBRFBDTSBlbmNvZGluZy4iKTsKKworI2RlZmluZSBBVURJT09QX0xJTjJBRFBDTV9NRVRIT0RERUYgICAgXAorICAgIHsibGluMmFkcGNtIiwgKFB5Q0Z1bmN0aW9uKWF1ZGlvb3BfbGluMmFkcGNtLCBNRVRIX1ZBUkFSR1MsIGF1ZGlvb3BfbGluMmFkcGNtX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2xpbjJhZHBjbV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZnJhZ21lbnQsIGludCB3aWR0aCwgUHlPYmplY3QgKnN0YXRlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2F1ZGlvb3BfbGluMmFkcGNtKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBmcmFnbWVudCA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2lkdGg7CisgICAgUHlPYmplY3QgKnN0YXRlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KmlPOmxpbjJhZHBjbSIsCisgICAgICAgICZmcmFnbWVudCwgJndpZHRoLCAmc3RhdGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYXVkaW9vcF9saW4yYWRwY21faW1wbChtb2R1bGUsICZmcmFnbWVudCwgd2lkdGgsIHN0YXRlKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBmcmFnbWVudCAqLworICAgIGlmIChmcmFnbWVudC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZnJhZ21lbnQpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGF1ZGlvb3BfYWRwY20ybGluX19kb2NfXywKKyJhZHBjbTJsaW4oJG1vZHVsZSwgZnJhZ21lbnQsIHdpZHRoLCBzdGF0ZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZSBhbiBJbnRlbC9EVkkgQURQQ00gY29kZWQgZnJhZ21lbnQgdG8gYSBsaW5lYXIgZnJhZ21lbnQuIik7CisKKyNkZWZpbmUgQVVESU9PUF9BRFBDTTJMSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImFkcGNtMmxpbiIsIChQeUNGdW5jdGlvbilhdWRpb29wX2FkcGNtMmxpbiwgTUVUSF9WQVJBUkdTLCBhdWRpb29wX2FkcGNtMmxpbl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYXVkaW9vcF9hZHBjbTJsaW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmZyYWdtZW50LCBpbnQgd2lkdGgsIFB5T2JqZWN0ICpzdGF0ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCithdWRpb29wX2FkcGNtMmxpbihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZnJhZ21lbnQgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHdpZHRoOworICAgIFB5T2JqZWN0ICpzdGF0ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSppTzphZHBjbTJsaW4iLAorICAgICAgICAmZnJhZ21lbnQsICZ3aWR0aCwgJnN0YXRlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGF1ZGlvb3BfYWRwY20ybGluX2ltcGwobW9kdWxlLCAmZnJhZ21lbnQsIHdpZHRoLCBzdGF0ZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZnJhZ21lbnQgKi8KKyAgICBpZiAoZnJhZ21lbnQub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmZyYWdtZW50KTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmU4NDBiYmE1ZDQwYzJjZSBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NsaW5pYy9iaW5hc2NpaS5jLmggYi9Nb2R1bGVzL2NsaW5pYy9iaW5hc2NpaS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY2NDZkZAotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL2JpbmFzY2lpLmMuaApAQCAtMCwwICsxLDU0NiBAQAorLypbY2xpbmljIGlucHV0XQorcHJlc2VydmUKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2EyYl91dV9fZG9jX18sCisiYTJiX3V1KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJEZWNvZGUgYSBsaW5lIG9mIHV1ZW5jb2RlZCBkYXRhLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0EyQl9VVV9NRVRIT0RERUYgICAgXAorICAgIHsiYTJiX3V1IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2EyYl91dSwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9hMmJfdXVfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl91dV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfdXUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOmEyYl91dSIsCisgICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl91dV9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYjJhX3V1X19kb2NfXywKKyJiMmFfdXUoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIlV1ZW5jb2RlIGxpbmUgb2YgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9CMkFfVVVfTUVUSE9EREVGICAgIFwKKyAgICB7ImIyYV91dSIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfdXUsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYjJhX3V1X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfdXVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX3V1KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpiMmFfdXUiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfdXVfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2EyYl9iYXNlNjRfX2RvY19fLAorImEyYl9iYXNlNjQoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkRlY29kZSBhIGxpbmUgb2YgYmFzZTY0IGRhdGEuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQTJCX0JBU0U2NF9NRVRIT0RERUYgICAgXAorICAgIHsiYTJiX2Jhc2U2NCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfYmFzZTY0LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2EyYl9iYXNlNjRfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9iYXNlNjRfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYTJiX2Jhc2U2NChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyY6YTJiX2Jhc2U2NCIsCisgICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl9iYXNlNjRfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2IyYV9iYXNlNjRfX2RvY19fLAorImIyYV9iYXNlNjQoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkJhc2U2NC1jb2RlIGxpbmUgb2YgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9CMkFfQkFTRTY0X01FVEhPRERFRiAgICBcCisgICAgeyJiMmFfYmFzZTY0IiwgKFB5Q0Z1bmN0aW9uKWJpbmFzY2lpX2IyYV9iYXNlNjQsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfYjJhX2Jhc2U2NF9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfYjJhX2Jhc2U2NF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfYmFzZTY0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpiMmFfYmFzZTY0IiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfYjJhX2Jhc2U2NF9pbXBsKG1vZHVsZSwgJmRhdGEpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYTJiX2hxeF9fZG9jX18sCisiYTJiX2hxeCgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlIC5ocXggY29kaW5nLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0EyQl9IUVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImEyYl9ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYTJiX2hxeCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9hMmJfaHF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9ocXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOmEyYl9ocXgiLAorICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9hMmJfaHF4X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9ybGVjb2RlX2hxeF9fZG9jX18sCisicmxlY29kZV9ocXgoJG1vZHVsZSwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIkJpbmhleCBSTEUtY29kZSBiaW5hcnkgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9STEVDT0RFX0hRWF9NRVRIT0RERUYgICAgXAorICAgIHsicmxlY29kZV9ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfcmxlY29kZV9ocXgsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfcmxlY29kZV9ocXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX3JsZWNvZGVfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX3JsZWNvZGVfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KjpybGVjb2RlX2hxeCIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX3JsZWNvZGVfaHF4X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9iMmFfaHF4X19kb2NfXywKKyJiMmFfaHF4KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJFbmNvZGUgLmhxeCBkYXRhLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0IyQV9IUVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImIyYV9ocXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX2hxeCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9iMmFfaHF4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfaHF4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9ocXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmIyYV9ocXgiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfaHF4X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9ybGVkZWNvZGVfaHF4X19kb2NfXywKKyJybGVkZWNvZGVfaHF4KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJEZWNvZGUgaGV4YmluIFJMRS1jb2RlZCBzdHJpbmcuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfUkxFREVDT0RFX0hRWF9NRVRIT0RERUYgICAgXAorICAgIHsicmxlZGVjb2RlX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9ybGVkZWNvZGVfaHF4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX3JsZWRlY29kZV9ocXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX3JsZWRlY29kZV9ocXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfcmxlZGVjb2RlX2hxeChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAieSo6cmxlZGVjb2RlX2hxeCIsCisgICAgICAgICZkYXRhKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX3JsZWRlY29kZV9ocXhfaW1wbChtb2R1bGUsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKGJpbmFzY2lpX2NyY19ocXhfX2RvY19fLAorImNyY19ocXgoJG1vZHVsZSwgZGF0YSwgY3JjLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29tcHV0ZSBocXggQ1JDIGluY3JlbWVudGFsbHkuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQ1JDX0hRWF9NRVRIT0RERUYgICAgXAorICAgIHsiY3JjX2hxeCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9jcmNfaHF4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2NyY19ocXhfX2RvY19ffSwKKworc3RhdGljIHVuc2lnbmVkIGludAorYmluYXNjaWlfY3JjX2hxeF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IGNyYyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9jcmNfaHF4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIHVuc2lnbmVkIGludCBjcmM7CisgICAgdW5zaWduZWQgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqSTpjcmNfaHF4IiwKKyAgICAgICAgJmRhdGEsICZjcmMpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgX3JldHVybl92YWx1ZSA9IGJpbmFzY2lpX2NyY19ocXhfaW1wbChtb2R1bGUsICZkYXRhLCBjcmMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfY3JjMzJfX2RvY19fLAorImNyYzMyKCRtb2R1bGUsIGRhdGEsIGNyYz0wLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQ29tcHV0ZSBDUkMtMzIgaW5jcmVtZW50YWxseS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9DUkMzMl9NRVRIT0RERUYgICAgXAorICAgIHsiY3JjMzIiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfY3JjMzIsIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfY3JjMzJfX2RvY19ffSwKKworc3RhdGljIHVuc2lnbmVkIGludAorYmluYXNjaWlfY3JjMzJfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCBjcmMpOworCitzdGF0aWMgUHlPYmplY3QgKgorYmluYXNjaWlfY3JjMzIoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgdW5zaWduZWQgaW50IGNyYyA9IDA7CisgICAgdW5zaWduZWQgaW50IF9yZXR1cm5fdmFsdWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfEk6Y3JjMzIiLAorICAgICAgICAmZGF0YSwgJmNyYykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICBfcmV0dXJuX3ZhbHVlID0gYmluYXNjaWlfY3JjMzJfaW1wbChtb2R1bGUsICZkYXRhLCBjcmMpOworICAgIGlmICgoX3JldHVybl92YWx1ZSA9PSAtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKV9yZXR1cm5fdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYjJhX2hleF9fZG9jX18sCisiYjJhX2hleCgkbW9kdWxlLCBkYXRhLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgYmluYXJ5IGRhdGEuXG4iCisiXG4iCisiVGhlIHJldHVybiB2YWx1ZSBpcyBhIGJ5dGVzIG9iamVjdC4gIFRoaXMgZnVuY3Rpb24gaXMgYWxzb1xuIgorImF2YWlsYWJsZSBhcyBcImhleGxpZnkoKVwiLiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0IyQV9IRVhfTUVUSE9EREVGICAgIFwKKyAgICB7ImIyYV9oZXgiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfYjJhX2hleCwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9iMmFfaGV4X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfaGV4X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9oZXgoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmIyYV9oZXgiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfaGV4X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9oZXhsaWZ5X19kb2NfXywKKyJoZXhsaWZ5KCRtb2R1bGUsIGRhdGEsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJIZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBiaW5hcnkgZGF0YS5cbiIKKyJcbiIKKyJUaGUgcmV0dXJuIHZhbHVlIGlzIGEgYnl0ZXMgb2JqZWN0LiIpOworCisjZGVmaW5lIEJJTkFTQ0lJX0hFWExJRllfTUVUSE9EREVGICAgIFwKKyAgICB7ImhleGxpZnkiLCAoUHlDRnVuY3Rpb24pYmluYXNjaWlfaGV4bGlmeSwgTUVUSF9WQVJBUkdTLCBiaW5hc2NpaV9oZXhsaWZ5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9oZXhsaWZ5X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2hleGxpZnkoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmhleGxpZnkiLAorICAgICAgICAmZGF0YSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9oZXhsaWZ5X2ltcGwobW9kdWxlLCAmZGF0YSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9hMmJfaGV4X19kb2NfXywKKyJhMmJfaGV4KCRtb2R1bGUsIGhleHN0ciwgLylcbiIKKyItLVxuIgorIlxuIgorIkJpbmFyeSBkYXRhIG9mIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLlxuIgorIlxuIgorImhleHN0ciBtdXN0IGNvbnRhaW4gYW4gZXZlbiBudW1iZXIgb2YgaGV4IGRpZ2l0cyAodXBwZXIgb3IgbG93ZXIgY2FzZSkuXG4iCisiVGhpcyBmdW5jdGlvbiBpcyBhbHNvIGF2YWlsYWJsZSBhcyBcInVuaGV4bGlmeSgpXCIuIik7CisKKyNkZWZpbmUgQklOQVNDSUlfQTJCX0hFWF9NRVRIT0RERUYgICAgXAorICAgIHsiYTJiX2hleCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfaGV4LCBNRVRIX1ZBUkFSR1MsIGJpbmFzY2lpX2EyYl9oZXhfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9oZXhfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmhleHN0cik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfaGV4KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBoZXhzdHIgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8mOmEyYl9oZXgiLAorICAgICAgICBhc2NpaV9idWZmZXJfY29udmVydGVyLCAmaGV4c3RyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl9oZXhfaW1wbChtb2R1bGUsICZoZXhzdHIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGhleHN0ciAqLworICAgIGlmIChoZXhzdHIub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmhleHN0cik7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfdW5oZXhsaWZ5X19kb2NfXywKKyJ1bmhleGxpZnkoJG1vZHVsZSwgaGV4c3RyLCAvKVxuIgorIi0tXG4iCisiXG4iCisiQmluYXJ5IGRhdGEgb2YgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24uXG4iCisiXG4iCisiaGV4c3RyIG11c3QgY29udGFpbiBhbiBldmVuIG51bWJlciBvZiBoZXggZGlnaXRzICh1cHBlciBvciBsb3dlciBjYXNlKS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9VTkhFWExJRllfTUVUSE9EREVGICAgIFwKKyAgICB7InVuaGV4bGlmeSIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV91bmhleGxpZnksIE1FVEhfVkFSQVJHUywgYmluYXNjaWlfdW5oZXhsaWZ5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV91bmhleGxpZnlfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmhleHN0cik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV91bmhleGxpZnkoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGhleHN0ciA9IHtOVUxMLCBOVUxMfTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiTyY6dW5oZXhsaWZ5IiwKKyAgICAgICAgYXNjaWlfYnVmZmVyX2NvbnZlcnRlciwgJmhleHN0cikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV91bmhleGxpZnlfaW1wbChtb2R1bGUsICZoZXhzdHIpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGhleHN0ciAqLworICAgIGlmIChoZXhzdHIub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmhleHN0cik7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoYmluYXNjaWlfYTJiX3FwX19kb2NfXywKKyJhMmJfcXAoJG1vZHVsZSwgLywgZGF0YSwgaGVhZGVyPUZhbHNlKVxuIgorIi0tXG4iCisiXG4iCisiRGVjb2RlIGEgc3RyaW5nIG9mIHFwLWVuY29kZWQgZGF0YS4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9BMkJfUVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImEyYl9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9hMmJfcXAsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBiaW5hc2NpaV9hMmJfcXBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2EyYl9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IGhlYWRlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9hMmJfcXAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJkYXRhIiwgImhlYWRlciIsIE5VTEx9OworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIGludCBoZWFkZXIgPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiTyZ8aTphMmJfcXAiLCBfa2V5d29yZHMsCisgICAgICAgIGFzY2lpX2J1ZmZlcl9jb252ZXJ0ZXIsICZkYXRhLCAmaGVhZGVyKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IGJpbmFzY2lpX2EyYl9xcF9pbXBsKG1vZHVsZSwgJmRhdGEsIGhlYWRlcik7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUihiaW5hc2NpaV9iMmFfcXBfX2RvY19fLAorImIyYV9xcCgkbW9kdWxlLCAvLCBkYXRhLCBxdW90ZXRhYnM9RmFsc2UsIGlzdGV4dD1UcnVlLCBoZWFkZXI9RmFsc2UpXG4iCisiLS1cbiIKKyJcbiIKKyJFbmNvZGUgYSBzdHJpbmcgdXNpbmcgcXVvdGVkLXByaW50YWJsZSBlbmNvZGluZy5cbiIKKyJcbiIKKyJPbiBlbmNvZGluZywgd2hlbiBpc3RleHQgaXMgc2V0LCBuZXdsaW5lcyBhcmUgbm90IGVuY29kZWQsIGFuZCB3aGl0ZVxuIgorInNwYWNlIGF0IGVuZCBvZiBsaW5lcyBpcy4gIFdoZW4gaXN0ZXh0IGlzIG5vdCBzZXQsIFxcciBhbmQgXFxuIChDUi9MRilcbiIKKyJhcmUgYm90aCBlbmNvZGVkLiAgV2hlbiBxdW90ZXRhYnMgaXMgc2V0LCBzcGFjZSBhbmQgdGFicyBhcmUgZW5jb2RlZC4iKTsKKworI2RlZmluZSBCSU5BU0NJSV9CMkFfUVBfTUVUSE9EREVGICAgIFwKKyAgICB7ImIyYV9xcCIsIChQeUNGdW5jdGlvbiliaW5hc2NpaV9iMmFfcXAsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBiaW5hc2NpaV9iMmFfcXBfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK2JpbmFzY2lpX2IyYV9xcF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgaW50IHF1b3RldGFicywgaW50IGlzdGV4dCwgaW50IGhlYWRlcik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitiaW5hc2NpaV9iMmFfcXAoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJkYXRhIiwgInF1b3RldGFicyIsICJpc3RleHQiLCAiaGVhZGVyIiwgTlVMTH07CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IHF1b3RldGFicyA9IDA7CisgICAgaW50IGlzdGV4dCA9IDE7CisgICAgaW50IGhlYWRlciA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ5KnxpaWk6YjJhX3FwIiwgX2tleXdvcmRzLAorICAgICAgICAmZGF0YSwgJnF1b3RldGFicywgJmlzdGV4dCwgJmhlYWRlcikpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBiaW5hc2NpaV9iMmFfcXBfaW1wbChtb2R1bGUsICZkYXRhLCBxdW90ZXRhYnMsIGlzdGV4dCwgaGVhZGVyKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD0yMjc2MWIzNmY0ZjllNWJiIGlucHV0PWE5MDQ5MDU0MDEzYTFiNzddKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvY2xpbmljL3psaWJtb2R1bGUuYy5oIGIvTW9kdWxlcy9jbGluaWMvemxpYm1vZHVsZS5jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU0YTgwNQotLS0gL2Rldi9udWxsCisrKyBiL01vZHVsZXMvY2xpbmljL3psaWJtb2R1bGUuYy5oCkBAIC0wLDAgKzEsNDUzIEBACisvKltjbGluaWMgaW5wdXRdCitwcmVzZXJ2ZQorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoemxpYl9jb21wcmVzc19fZG9jX18sCisiY29tcHJlc3MoJG1vZHVsZSwgYnl0ZXMsIGxldmVsPVpfREVGQVVMVF9DT01QUkVTU0lPTiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBjb21wcmVzc2VkIGRhdGEuXG4iCisiXG4iCisiICBieXRlc1xuIgorIiAgICBCaW5hcnkgZGF0YSB0byBiZSBjb21wcmVzc2VkLlxuIgorIiAgbGV2ZWxcbiIKKyIgICAgQ29tcHJlc3Npb24gbGV2ZWwsIGluIDAtOS4iKTsKKworI2RlZmluZSBaTElCX0NPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJjb21wcmVzcyIsIChQeUNGdW5jdGlvbil6bGliX2NvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIHpsaWJfY29tcHJlc3NfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY29tcHJlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmJ5dGVzLCBpbnQgbGV2ZWwpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jb21wcmVzcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgYnl0ZXMgPSB7TlVMTCwgTlVMTH07CisgICAgaW50IGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxpOmNvbXByZXNzIiwKKyAgICAgICAgJmJ5dGVzLCAmbGV2ZWwpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9jb21wcmVzc19pbXBsKG1vZHVsZSwgJmJ5dGVzLCBsZXZlbCk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgYnl0ZXMgKi8KKyAgICBpZiAoYnl0ZXMub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ5dGVzKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX2RlY29tcHJlc3NfX2RvY19fLAorImRlY29tcHJlc3MoJG1vZHVsZSwgZGF0YSwgd2JpdHM9TUFYX1dCSVRTLCBidWZzaXplPURFRl9CVUZfU0laRSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgdW5jb21wcmVzc2VkIGRhdGEuXG4iCisiXG4iCisiICBkYXRhXG4iCisiICAgIENvbXByZXNzZWQgZGF0YS5cbiIKKyIgIHdiaXRzXG4iCisiICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUuXG4iCisiICBidWZzaXplXG4iCisiICAgIFRoZSBpbml0aWFsIG91dHB1dCBidWZmZXIgc2l6ZS4iKTsKKworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pemxpYl9kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIHpsaWJfZGVjb21wcmVzc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9kZWNvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgd2JpdHMsIHVuc2lnbmVkIGludCBidWZzaXplKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeV9idWZmZXIgZGF0YSA9IHtOVUxMLCBOVUxMfTsKKyAgICBpbnQgd2JpdHMgPSBNQVhfV0JJVFM7CisgICAgdW5zaWduZWQgaW50IGJ1ZnNpemUgPSBERUZfQlVGX1NJWkU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfGlPJjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEsICZ3Yml0cywgdWludF9jb252ZXJ0ZXIsICZidWZzaXplKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfZGVjb21wcmVzc19pbXBsKG1vZHVsZSwgJmRhdGEsIHdiaXRzLCBidWZzaXplKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfY29tcHJlc3NvYmpfX2RvY19fLAorImNvbXByZXNzb2JqKCRtb2R1bGUsIC8sIGxldmVsPVpfREVGQVVMVF9DT01QUkVTU0lPTiwgbWV0aG9kPURFRkxBVEVELFxuIgorIiAgICAgICAgICAgIHdiaXRzPU1BWF9XQklUUywgbWVtTGV2ZWw9REVGX01FTV9MRVZFTCxcbiIKKyIgICAgICAgICAgICBzdHJhdGVneT1aX0RFRkFVTFRfU1RSQVRFR1ksIHpkaWN0PU5vbmUpXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBjb21wcmVzc29yIG9iamVjdC5cbiIKKyJcbiIKKyIgIGxldmVsXG4iCisiICAgIFRoZSBjb21wcmVzc2lvbiBsZXZlbCAoYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05OyBkZWZhdWx0IGlzIDYpLlxuIgorIiAgICBIaWdoZXIgY29tcHJlc3Npb24gbGV2ZWxzIGFyZSBzbG93ZXIsIGJ1dCBwcm9kdWNlIHNtYWxsZXIgcmVzdWx0cy5cbiIKKyIgIG1ldGhvZFxuIgorIiAgICBUaGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgSWYgZ2l2ZW4sIHRoaXMgbXVzdCBiZSBERUZMQVRFRC5cbiIKKyIgIHdiaXRzXG4iCisiICAgIFRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplIChyYW5nZTogOC4uMTUpLlxuIgorIiAgbWVtTGV2ZWxcbiIKKyIgICAgQ29udHJvbHMgdGhlIGFtb3VudCBvZiBtZW1vcnkgdXNlZCBmb3IgaW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUuXG4iCisiICAgIFZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDEgdG8gOS4gIEhpZ2hlciB2YWx1ZXMgcmVzdWx0IGluIGhpZ2hlciBtZW1vcnlcbiIKKyIgICAgdXNhZ2UsIGZhc3RlciBjb21wcmVzc2lvbiwgYW5kIHNtYWxsZXIgb3V0cHV0LlxuIgorIiAgc3RyYXRlZ3lcbiIKKyIgICAgVXNlZCB0byB0dW5lIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uICBQb3NzaWJsZSB2YWx1ZXMgYXJlXG4iCisiICAgIFpfREVGQVVMVF9TVFJBVEVHWSwgWl9GSUxURVJFRCwgYW5kIFpfSFVGRk1BTl9PTkxZLlxuIgorIiAgemRpY3RcbiIKKyIgICAgVGhlIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyeSAtIGEgc2VxdWVuY2Ugb2YgYnl0ZXNcbiIKKyIgICAgY29udGFpbmluZyBzdWJzZXF1ZW5jZXMgdGhhdCBhcmUgbGlrZWx5IHRvIG9jY3VyIGluIHRoZSBpbnB1dCBkYXRhLiIpOworCisjZGVmaW5lIFpMSUJfQ09NUFJFU1NPQkpfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfY29tcHJlc3NvYmosIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCB6bGliX2NvbXByZXNzb2JqX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NvbXByZXNzb2JqX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgaW50IGxldmVsLCBpbnQgbWV0aG9kLCBpbnQgd2JpdHMsIGludCBtZW1MZXZlbCwgaW50IHN0cmF0ZWd5LCBQeV9idWZmZXIgKnpkaWN0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY29tcHJlc3NvYmooUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgc3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0geyJsZXZlbCIsICJtZXRob2QiLCAid2JpdHMiLCAibWVtTGV2ZWwiLCAic3RyYXRlZ3kiLCAiemRpY3QiLCBOVUxMfTsKKyAgICBpbnQgbGV2ZWwgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT047CisgICAgaW50IG1ldGhvZCA9IERFRkxBVEVEOworICAgIGludCB3Yml0cyA9IE1BWF9XQklUUzsKKyAgICBpbnQgbWVtTGV2ZWwgPSBERUZfTUVNX0xFVkVMOworICAgIGludCBzdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsKKyAgICBQeV9idWZmZXIgemRpY3QgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ8aWlpaWl5Kjpjb21wcmVzc29iaiIsIF9rZXl3b3JkcywKKyAgICAgICAgJmxldmVsLCAmbWV0aG9kLCAmd2JpdHMsICZtZW1MZXZlbCwgJnN0cmF0ZWd5LCAmemRpY3QpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9jb21wcmVzc29ial9pbXBsKG1vZHVsZSwgbGV2ZWwsIG1ldGhvZCwgd2JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwgJnpkaWN0KTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciB6ZGljdCAqLworICAgIGlmICh6ZGljdC5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3QpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfZGVjb21wcmVzc29ial9fZG9jX18sCisiZGVjb21wcmVzc29iaigkbW9kdWxlLCAvLCB3Yml0cz1NQVhfV0JJVFMsIHpkaWN0PWJcJ1wnKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgZGVjb21wcmVzc29yIG9iamVjdC5cbiIKKyJcbiIKKyIgIHdiaXRzXG4iCisiICAgIFRoZSB3aW5kb3cgYnVmZmVyIHNpemUuXG4iCisiICB6ZGljdFxuIgorIiAgICBUaGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LiAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lXG4iCisiICAgIGRpY3Rpb25hcnkgYXMgdXNlZCBieSB0aGUgY29tcHJlc3NvciB0aGF0IHByb2R1Y2VkIHRoZSBpbnB1dCBkYXRhLiIpOworCisjZGVmaW5lIFpMSUJfREVDT01QUkVTU09CSl9NRVRIT0RERUYgICAgXAorICAgIHsiZGVjb21wcmVzc29iaiIsIChQeUNGdW5jdGlvbil6bGliX2RlY29tcHJlc3NvYmosIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCB6bGliX2RlY29tcHJlc3NvYmpfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCB3Yml0cywgUHlPYmplY3QgKnpkaWN0KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc29iaihQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7IndiaXRzIiwgInpkaWN0IiwgTlVMTH07CisgICAgaW50IHdiaXRzID0gTUFYX1dCSVRTOworICAgIFB5T2JqZWN0ICp6ZGljdCA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICJ8aU86ZGVjb21wcmVzc29iaiIsIF9rZXl3b3JkcywKKyAgICAgICAgJndiaXRzLCAmemRpY3QpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9kZWNvbXByZXNzb2JqX2ltcGwobW9kdWxlLCB3Yml0cywgemRpY3QpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX0NvbXByZXNzX2NvbXByZXNzX19kb2NfXywKKyJjb21wcmVzcygkc2VsZiwgZGF0YSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBjb21wcmVzc2VkIGRhdGEuXG4iCisiXG4iCisiICBkYXRhXG4iCisiICAgIEJpbmFyeSBkYXRhIHRvIGJlIGNvbXByZXNzZWQuXG4iCisiXG4iCisiQWZ0ZXIgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzb21lIG9mIHRoZSBpbnB1dCBkYXRhIG1heSBzdGlsbFxuIgorImJlIHN0b3JlZCBpbiBpbnRlcm5hbCBidWZmZXJzIGZvciBsYXRlciBwcm9jZXNzaW5nLlxuIgorIkNhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19DT01QUkVTU19NRVRIT0RERUYgICAgXAorICAgIHsiY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pemxpYl9Db21wcmVzc19jb21wcmVzcywgTUVUSF9WQVJBUkdTLCB6bGliX0NvbXByZXNzX2NvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2NvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfQ29tcHJlc3NfY29tcHJlc3MoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqOmNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9Db21wcmVzc19jb21wcmVzc19pbXBsKHNlbGYsICZkYXRhKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX19kb2NfXywKKyJkZWNvbXByZXNzKCRzZWxmLCBkYXRhLCBtYXhfbGVuZ3RoPTAsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBieXRlcyBvYmplY3QgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkIHZlcnNpb24gb2YgdGhlIGRhdGEuXG4iCisiXG4iCisiICBkYXRhXG4iCisiICAgIFRoZSBiaW5hcnkgZGF0YSB0byBkZWNvbXByZXNzLlxuIgorIiAgbWF4X2xlbmd0aFxuIgorIiAgICBUaGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YS5cbiIKKyIgICAgVW5jb25zdW1lZCBpbnB1dCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluXG4iCisiICAgIHRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLlxuIgorIlxuIgorIkFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgc3RpbGwgYmUgc3RvcmVkIGluXG4iCisiaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy5cbiIKKyJDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLiIpOworCisjZGVmaW5lIFpMSUJfREVDT01QUkVTU19ERUNPTVBSRVNTX01FVEhPRERFRiAgICBcCisgICAgeyJkZWNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKXpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsIHpsaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKGNvbXBvYmplY3QgKnNlbGYsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IG1heF9sZW5ndGgpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2RlY29tcHJlc3MoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlfYnVmZmVyIGRhdGEgPSB7TlVMTCwgTlVMTH07CisgICAgdW5zaWduZWQgaW50IG1heF9sZW5ndGggPSAwOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ5KnxPJjpkZWNvbXByZXNzIiwKKyAgICAgICAgJmRhdGEsIHVpbnRfY29udmVydGVyLCAmbWF4X2xlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX0RlY29tcHJlc3NfZGVjb21wcmVzc19pbXBsKHNlbGYsICZkYXRhLCBtYXhfbGVuZ3RoKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBkYXRhICovCisgICAgaWYgKGRhdGEub2JqKQorICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRhdGEpOworCisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworUHlEb2NfU1RSVkFSKHpsaWJfQ29tcHJlc3NfZmx1c2hfX2RvY19fLAorImZsdXNoKCRzZWxmLCBtb2RlPXpsaWIuWl9GSU5JU0gsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBhbnkgcmVtYWluaW5nIGNvbXByZXNzZWQgZGF0YS5cbiIKKyJcbiIKKyIgIG1vZGVcbiIKKyIgICAgT25lIG9mIHRoZSBjb25zdGFudHMgWl9TWU5DX0ZMVVNILCBaX0ZVTExfRkxVU0gsIFpfRklOSVNILlxuIgorIiAgICBJZiBtb2RlID09IFpfRklOSVNILCB0aGUgY29tcHJlc3NvciBvYmplY3QgY2FuIG5vIGxvbmdlciBiZVxuIgorIiAgICB1c2VkIGFmdGVyIGNhbGxpbmcgdGhlIGZsdXNoKCkgbWV0aG9kLiAgT3RoZXJ3aXNlLCBtb3JlIGRhdGFcbiIKKyIgICAgY2FuIHN0aWxsIGJlIGNvbXByZXNzZWQuIik7CisKKyNkZWZpbmUgWkxJQl9DT01QUkVTU19GTFVTSF9NRVRIT0RERUYgICAgXAorICAgIHsiZmx1c2giLCAoUHlDRnVuY3Rpb24pemxpYl9Db21wcmVzc19mbHVzaCwgTUVUSF9WQVJBUkdTLCB6bGliX0NvbXByZXNzX2ZsdXNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2ZsdXNoX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgaW50IG1vZGUpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9Db21wcmVzc19mbHVzaChjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgbW9kZSA9IFpfRklOSVNIOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ8aTpmbHVzaCIsCisgICAgICAgICZtb2RlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfQ29tcHJlc3NfZmx1c2hfaW1wbChzZWxmLCBtb2RlKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCisjaWYgZGVmaW5lZChIQVZFX1pMSUJfQ09QWSkKKworUHlEb2NfU1RSVkFSKHpsaWJfQ29tcHJlc3NfY29weV9fZG9jX18sCisiY29weSgkc2VsZiwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4iKTsKKworI2RlZmluZSBaTElCX0NPTVBSRVNTX0NPUFlfTUVUSE9EREVGICAgIFwKKyAgICB7ImNvcHkiLCAoUHlDRnVuY3Rpb24pemxpYl9Db21wcmVzc19jb3B5LCBNRVRIX05PQVJHUywgemxpYl9Db21wcmVzc19jb3B5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0NvbXByZXNzX2NvcHlfaW1wbChjb21wb2JqZWN0ICpzZWxmKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfQ29tcHJlc3NfY29weShjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiB6bGliX0NvbXByZXNzX2NvcHlfaW1wbChzZWxmKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9aTElCX0NPUFkpICovCisKKyNpZm5kZWYgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgorICAgICNkZWZpbmUgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKFpMSUJfQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYpICovCisKKyNpZiBkZWZpbmVkKEhBVkVfWkxJQl9DT1BZKQorCitQeURvY19TVFJWQVIoemxpYl9EZWNvbXByZXNzX2NvcHlfX2RvY19fLAorImNvcHkoJHNlbGYsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBjb3B5IG9mIHRoZSBkZWNvbXByZXNzaW9uIG9iamVjdC4iKTsKKworI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYgICAgXAorICAgIHsiY29weSIsIChQeUNGdW5jdGlvbil6bGliX0RlY29tcHJlc3NfY29weSwgTUVUSF9OT0FSR1MsIHpsaWJfRGVjb21wcmVzc19jb3B5X19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfY29weV9pbXBsKGNvbXBvYmplY3QgKnNlbGYpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9EZWNvbXByZXNzX2NvcHkoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKK3sKKyAgICByZXR1cm4gemxpYl9EZWNvbXByZXNzX2NvcHlfaW1wbChzZWxmKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQoSEFWRV9aTElCX0NPUFkpICovCisKKyNpZm5kZWYgWkxJQl9ERUNPTVBSRVNTX0NPUFlfTUVUSE9EREVGCisgICAgI2RlZmluZSBaTElCX0RFQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYKKyNlbmRpZiAvKiAhZGVmaW5lZChaTElCX0RFQ09NUFJFU1NfQ09QWV9NRVRIT0RERUYpICovCisKK1B5RG9jX1NUUlZBUih6bGliX0RlY29tcHJlc3NfZmx1c2hfX2RvY19fLAorImZsdXNoKCRzZWxmLCBsZW5ndGg9emxpYi5ERUZfQlVGX1NJWkUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBhbnkgcmVtYWluaW5nIGRlY29tcHJlc3NlZCBkYXRhLlxuIgorIlxuIgorIiAgbGVuZ3RoXG4iCisiICAgIHRoZSBpbml0aWFsIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIuIik7CisKKyNkZWZpbmUgWkxJQl9ERUNPTVBSRVNTX0ZMVVNIX01FVEhPRERFRiAgICBcCisgICAgeyJmbHVzaCIsIChQeUNGdW5jdGlvbil6bGliX0RlY29tcHJlc3NfZmx1c2gsIE1FVEhfVkFSQVJHUywgemxpYl9EZWNvbXByZXNzX2ZsdXNoX19kb2NfX30sCisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX0RlY29tcHJlc3NfZmx1c2hfaW1wbChjb21wb2JqZWN0ICpzZWxmLCB1bnNpZ25lZCBpbnQgbGVuZ3RoKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfRGVjb21wcmVzc19mbHVzaChjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gREVGX0JVRl9TSVpFOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJ8TyY6Zmx1c2giLAorICAgICAgICB1aW50X2NvbnZlcnRlciwgJmxlbmd0aCkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSB6bGliX0RlY29tcHJlc3NfZmx1c2hfaW1wbChzZWxmLCBsZW5ndGgpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK1B5RG9jX1NUUlZBUih6bGliX2FkbGVyMzJfX2RvY19fLAorImFkbGVyMzIoJG1vZHVsZSwgZGF0YSwgdmFsdWU9MSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbXB1dGUgYW4gQWRsZXItMzIgY2hlY2tzdW0gb2YgZGF0YS5cbiIKKyJcbiIKKyIgIHZhbHVlXG4iCisiICAgIFN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBjaGVja3N1bS5cbiIKKyJcbiIKKyJUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4iKTsKKworI2RlZmluZSBaTElCX0FETEVSMzJfTUVUSE9EREVGICAgIFwKKyAgICB7ImFkbGVyMzIiLCAoUHlDRnVuY3Rpb24pemxpYl9hZGxlcjMyLCBNRVRIX1ZBUkFSR1MsIHpsaWJfYWRsZXIzMl9fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9hZGxlcjMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9hZGxlcjMyKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIHVuc2lnbmVkIGludCB2YWx1ZSA9IDE7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfEk6YWRsZXIzMiIsCisgICAgICAgICZkYXRhLCAmdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gemxpYl9hZGxlcjMyX2ltcGwobW9kdWxlLCAmZGF0YSwgdmFsdWUpOworCitleGl0OgorICAgIC8qIENsZWFudXAgZm9yIGRhdGEgKi8KKyAgICBpZiAoZGF0YS5vYmopCisgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmZGF0YSk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitQeURvY19TVFJWQVIoemxpYl9jcmMzMl9fZG9jX18sCisiY3JjMzIoJG1vZHVsZSwgZGF0YSwgdmFsdWU9MCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbXB1dGUgYSBDUkMtMzIgY2hlY2tzdW0gb2YgZGF0YS5cbiIKKyJcbiIKKyIgIHZhbHVlXG4iCisiICAgIFN0YXJ0aW5nIHZhbHVlIG9mIHRoZSBjaGVja3N1bS5cbiIKKyJcbiIKKyJUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4iKTsKKworI2RlZmluZSBaTElCX0NSQzMyX01FVEhPRERFRiAgICBcCisgICAgeyJjcmMzMiIsIChQeUNGdW5jdGlvbil6bGliX2NyYzMyLCBNRVRIX1ZBUkFSR1MsIHpsaWJfY3JjMzJfX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfY3JjMzJfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeV9idWZmZXIgKmRhdGEsIHVuc2lnbmVkIGludCB2YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCit6bGliX2NyYzMyKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIFB5X2J1ZmZlciBkYXRhID0ge05VTEwsIE5VTEx9OworICAgIHVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgInkqfEk6Y3JjMzIiLAorICAgICAgICAmZGF0YSwgJnZhbHVlKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IHpsaWJfY3JjMzJfaW1wbChtb2R1bGUsICZkYXRhLCB2YWx1ZSk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgZGF0YSAqLworICAgIGlmIChkYXRhLm9iaikKKyAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkYXRhKTsKKworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmM5NDczNzIxY2E3Yzk2MiBpbnB1dD1hOTA0OTA1NDAxM2ExYjc3XSovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2NtYXRobW9kdWxlLmMgYi9Nb2R1bGVzL2NtYXRobW9kdWxlLmMKaW5kZXggMzZiZjRhMS4uYjM0MWMzNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9jbWF0aG1vZHVsZS5jCisrKyBiL01vZHVsZXMvY21hdGhtb2R1bGUuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiBQeURvY19TVFJWQVIoY19hY29zaF9kb2MsCiAiYWNvc2goeClcbiIKICJcbiIKLSJSZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjY29zaW5lIG9mIHguIik7CisiUmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgY29zaW5lIG9mIHguIik7CiAKIAogc3RhdGljIFB5X2NvbXBsZXgKQEAgLTI0OSw3ICsyNDksNyBAQAogUHlEb2NfU1RSVkFSKGNfYXNpbmhfZG9jLAogImFzaW5oKHgpXG4iCiAiXG4iCi0iUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyYyBzaW5lIG9mIHguIik7CisiUmV0dXJuIHRoZSBpbnZlcnNlIGh5cGVyYm9saWMgc2luZSBvZiB4LiIpOwogCiAKIHN0YXRpYyBQeV9jb21wbGV4CkBAIC0zNTMsNyArMzUzLDcgQEAKIFB5RG9jX1NUUlZBUihjX2F0YW5oX2RvYywKICJhdGFuaCh4KVxuIgogIlxuIgotIlJldHVybiB0aGUgaHlwZXJib2xpYyBhcmMgdGFuZ2VudCBvZiB4LiIpOworIlJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgeC4iKTsKIAogCiBzdGF0aWMgUHlfY29tcGxleApAQCAtOTQxLDkgKzk0MSwxMCBAQAogICAgIGRvdWJsZSByLCBwaGk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJEOnBvbGFyIiwgJnopKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBlcnJubyA9IDA7CiAgICAgUHlGUEVfU1RBUlRfUFJPVEVDVCgicG9sYXIgZnVuY3Rpb24iLCByZXR1cm4gMCkKICAgICBwaGkgPSBjX2F0YW4yKHopOyAvKiBzaG91bGQgbm90IGNhdXNlIGFueSBleGNlcHRpb24gKi8KLSAgICByID0gY19hYnMoeik7IC8qIHNldHMgZXJybm8gdG8gRVJBTkdFIG9uIG92ZXJmbG93OyAgb3RoZXJ3aXNlIDAgKi8KKyAgICByID0gY19hYnMoeik7IC8qIHNldHMgZXJybm8gdG8gRVJBTkdFIG9uIG92ZXJmbG93ICovCiAgICAgUHlGUEVfRU5EX1BST1RFQ1QocikKICAgICBpZiAoZXJybm8gIT0gMCkKICAgICAgICAgcmV0dXJuIG1hdGhfZXJyb3IoKTsKQEAgLTEwNjAsNyArMTA2MSw3IEBACiBjbWF0aF9pc2luZihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfY29tcGxleCB6OwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiRDppc25hbiIsICZ6KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIkQ6aXNpbmYiLCAmeikpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoUHlfSVNfSU5GSU5JVFkoei5yZWFsKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfSVNfSU5GSU5JVFkoei5pbWFnKSk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2V4cGF0L2V4cGF0LmggYi9Nb2R1bGVzL2V4cGF0L2V4cGF0LmgKaW5kZXggMDZiNWRlMC4uZThlZWZkZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9leHBhdC9leHBhdC5oCisrKyBiL01vZHVsZXMvZXhwYXQvZXhwYXQuaApAQCAtMTA0MCw3ICsxMDQwLDcgQEAKICovCiAjZGVmaW5lIFhNTF9NQUpPUl9WRVJTSU9OIDIKICNkZWZpbmUgWE1MX01JTk9SX1ZFUlNJT04gMQotI2RlZmluZSBYTUxfTUlDUk9fVkVSU0lPTiAwCisjZGVmaW5lIFhNTF9NSUNST19WRVJTSU9OIDEKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2V4cGF0L3B5ZXhwYXRucy5oIGIvTW9kdWxlcy9leHBhdC9weWV4cGF0bnMuaAppbmRleCAyZjJmNGY5Li45OTljNWM3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2V4cGF0L3B5ZXhwYXRucy5oCisrKyBiL01vZHVsZXMvZXhwYXQvcHlleHBhdG5zLmgKQEAgLTIxLDcgKzIxLDcgQEAKICAqCiAgKgogICogVGhlIFNvbHV0aW9uOgotICogUHJlZml4IGFsbCBhIGV4cG9ydGVkIHN5bWJvbHMgd2l0aCAiUHlFeHBhdF8iLiBUaGlzIGlzIHNpbWlsYXIgdG8KKyAqIFByZWZpeCBhbGwgZXhwb3J0ZWQgc3ltYm9scyB3aXRoICJQeUV4cGF0XyIuIFRoaXMgaXMgc2ltaWxhciB0bwogICogd2hhdCBNb3ppbGxhIGRvZXMgZm9yIHNvbWUgY29tbW9uIGxpYnM6CiAgKiBodHRwOi8vbHhyLm1vemlsbGEub3JnL3NlYW1vbmtleS9zb3VyY2UvbW9kdWxlcy9saWJpbWcvcG5nL21venBuZ2NvbmYuaCMxMTUKICAqCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMgYi9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMKaW5kZXggZjM1YWEzNi4uNDEyODM4NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9leHBhdC94bWxwYXJzZS5jCisrKyBiL01vZHVsZXMvZXhwYXQveG1scGFyc2UuYwpAQCAtMiwxMiArMiw2IEBACiAgICBTZWUgdGhlIGZpbGUgQ09QWUlORyBmb3IgY29weWluZyBwZXJtaXNzaW9uLgogKi8KIAotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIG1lbXNldCgpLCBtZW1jcHkoKSAqLwotI2luY2x1ZGUgPGFzc2VydC5oPgotI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIFVJTlRfTUFYICovCi0jaW5jbHVkZSA8dGltZS5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZSgpICovCi0KICNkZWZpbmUgWE1MX0JVSUxESU5HX0VYUEFUIDEKIAogI2lmZGVmIENPTVBJTEVEX0ZST01fRFNQCkBAIC0yMiw2ICsxNiwxMiBAQAogI2luY2x1ZGUgPGV4cGF0X2NvbmZpZy5oPgogI2VuZGlmIC8qIG5kZWYgQ09NUElMRURfRlJPTV9EU1AgKi8KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIG1lbXNldCgpLCBtZW1jcHkoKSAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPiAgICAgICAgICAgICAgICAgICAgIC8qIFVJTlRfTUFYICovCisjaW5jbHVkZSA8dGltZS5oPiAgICAgICAgICAgICAgICAgICAgICAgLyogdGltZSgpICovCisKICNpbmNsdWRlICJhc2NpaS5oIgogI2luY2x1ZGUgImV4cGF0LmgiCiAKQEAgLTE1NTAsNyArMTU1MCw3IEBACiAgIGVsc2UgaWYgKGJ1ZmZlclB0ciA9PSBidWZmZXJFbmQpIHsKICAgICBjb25zdCBjaGFyICplbmQ7CiAgICAgaW50IG5MZWZ0T3ZlcjsKLSAgICBlbnVtIFhNTF9FcnJvciByZXN1bHQ7CisgICAgZW51bSBYTUxfU3RhdHVzIHJlc3VsdDsKICAgICBwYXJzZUVuZEJ5dGVJbmRleCArPSBsZW47CiAgICAgcG9zaXRpb25QdHIgPSBzOwogICAgIHBzX2ZpbmFsQnVmZmVyID0gKFhNTF9Cb29sKWlzRmluYWw7CkBAIC0xNjc4LDYgKzE2NzgsMTAgQEAKIHZvaWQgKiBYTUxDQUxMCiBYTUxfR2V0QnVmZmVyKFhNTF9QYXJzZXIgcGFyc2VyLCBpbnQgbGVuKQogeworICBpZiAobGVuIDwgMCkgeworICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgcmV0dXJuIE5VTEw7CisgIH0KICAgc3dpdGNoIChwc19wYXJzaW5nKSB7CiAgIGNhc2UgWE1MX1NVU1BFTkRFRDoKICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfU1VTUEVOREVEOwpAQCAtMTY4OSwxMCArMTY5MywxNiBAQAogICB9CiAKICAgaWYgKGxlbiA+IGJ1ZmZlckxpbSAtIGJ1ZmZlckVuZCkgewotICAgIC8qIEZJWE1FIGF2b2lkIGludGVnZXIgb3ZlcmZsb3cgKi8KLSAgICBpbnQgbmVlZGVkU2l6ZSA9IGxlbiArIChpbnQpKGJ1ZmZlckVuZCAtIGJ1ZmZlclB0cik7CiAjaWZkZWYgWE1MX0NPTlRFWFRfQllURVMKLSAgICBpbnQga2VlcCA9IChpbnQpKGJ1ZmZlclB0ciAtIGJ1ZmZlcik7CisgICAgaW50IGtlZXA7CisjZW5kaWYKKyAgICBpbnQgbmVlZGVkU2l6ZSA9IGxlbiArIChpbnQpKGJ1ZmZlckVuZCAtIGJ1ZmZlclB0cik7CisgICAgaWYgKG5lZWRlZFNpemUgPCAwKSB7CisgICAgICBlcnJvckNvZGUgPSBYTUxfRVJST1JfTk9fTUVNT1JZOworICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2lmZGVmIFhNTF9DT05URVhUX0JZVEVTCisgICAga2VlcCA9IChpbnQpKGJ1ZmZlclB0ciAtIGJ1ZmZlcik7CiAKICAgICBpZiAoa2VlcCA+IFhNTF9DT05URVhUX0JZVEVTKQogICAgICAga2VlcCA9IFhNTF9DT05URVhUX0JZVEVTOwpAQCAtMTcxOSw3ICsxNzI5LDExIEBACiAgICAgICAgIGJ1ZmZlclNpemUgPSBJTklUX0JVRkZFUl9TSVpFOwogICAgICAgZG8gewogICAgICAgICBidWZmZXJTaXplICo9IDI7Ci0gICAgICB9IHdoaWxlIChidWZmZXJTaXplIDwgbmVlZGVkU2l6ZSk7CisgICAgICB9IHdoaWxlIChidWZmZXJTaXplIDwgbmVlZGVkU2l6ZSAmJiBidWZmZXJTaXplID4gMCk7CisgICAgICBpZiAoYnVmZmVyU2l6ZSA8PSAwKSB7CisgICAgICAgIGVycm9yQ29kZSA9IFhNTF9FUlJPUl9OT19NRU1PUlk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQogICAgICAgbmV3QnVmID0gKGNoYXIgKilNQUxMT0MoYnVmZmVyU2l6ZSk7CiAgICAgICBpZiAobmV3QnVmID09IDApIHsKICAgICAgICAgZXJyb3JDb2RlID0gWE1MX0VSUk9SX05PX01FTU9SWTsKQEAgLTI5MTEsNiArMjkyNSw4IEBACiAgICAgICAgIHVuc2lnbmVkIGxvbmcgdXJpSGFzaCA9IGhhc2hfc2VjcmV0X3NhbHQ7CiAgICAgICAgICgoWE1MX0NoYXIgKilzKVstMV0gPSAwOyAgLyogY2xlYXIgZmxhZyAqLwogICAgICAgICBpZCA9IChBVFRSSUJVVEVfSUQgKilsb29rdXAocGFyc2VyLCAmZHRkLT5hdHRyaWJ1dGVJZHMsIHMsIDApOworICAgICAgICBpZiAoIWlkIHx8ICFpZC0+cHJlZml4KQorICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfTk9fTUVNT1JZOwogICAgICAgICBiID0gaWQtPnByZWZpeC0+YmluZGluZzsKICAgICAgICAgaWYgKCFiKQogICAgICAgICAgIHJldHVybiBYTUxfRVJST1JfVU5CT1VORF9QUkVGSVg7CkBAIC01NDc1LDYgKzU0OTEsOCBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgaWQtPnByZWZpeCA9IChQUkVGSVggKilsb29rdXAocGFyc2VyLCAmZHRkLT5wcmVmaXhlcywgcG9vbFN0YXJ0KCZkdGQtPnBvb2wpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihQUkVGSVgpKTsKKyAgICAgICAgICBpZiAoIWlkLT5wcmVmaXgpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICBpZiAoaWQtPnByZWZpeC0+bmFtZSA9PSBwb29sU3RhcnQoJmR0ZC0+cG9vbCkpCiAgICAgICAgICAgICBwb29sRmluaXNoKCZkdGQtPnBvb2wpOwogICAgICAgICAgIGVsc2UKZGlmZiAtLWdpdCBhL01vZHVsZXMvZXhwYXQveG1sdG9rLmMgYi9Nb2R1bGVzL2V4cGF0L3htbHRvay5jCmluZGV4IGI5Y2Q3YTQuLmJmMDlkZmMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZXhwYXQveG1sdG9rLmMKKysrIGIvTW9kdWxlcy9leHBhdC94bWx0b2suYwpAQCAtMTU4NCw3ICsxNTg0LDcgQEAKICAgICAgIGlmIChwdHJbMF0gPT0gJ1wwJykgewogICAgICAgICAvKiAwIGlzbid0IGEgbGVnYWwgZGF0YSBjaGFyYWN0ZXIuIEZ1cnRoZXJtb3JlIGEgZG9jdW1lbnQKICAgICAgICAgICAgZW50aXR5IGNhbiBvbmx5IHN0YXJ0IHdpdGggQVNDSUkgY2hhcmFjdGVycy4gIFNvIHRoZSBvbmx5Ci0gICAgICAgICAgIHdheSB0aGlzIGNhbiBmYWlsIHRvIGJlIGJpZy1lbmRpYW4gVVRGLTE2IGlzIGlmIGl0IGlzIGFuCisgICAgICAgICAgIHdheSB0aGlzIGNhbiBmYWlsIHRvIGJlIGJpZy1lbmRpYW4gVVRGLTE2IGlmIGl0IGl0J3MgYW4KICAgICAgICAgICAgZXh0ZXJuYWwgcGFyc2VkIGdlbmVyYWwgZW50aXR5IHRoYXQncyBsYWJlbGxlZCBhcwogICAgICAgICAgICBVVEYtMTZMRS4KICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMgYi9Nb2R1bGVzL2ZhdWx0aGFuZGxlci5jCmluZGV4IDY4MGY2MzAuLjE0OTNmOGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvZmF1bHRoYW5kbGVyLmMKKysrIGIvTW9kdWxlcy9mYXVsdGhhbmRsZXIuYwpAQCAtMjIsNyArMjIsMTQgQEAKICMgIGRlZmluZSBGQVVMVEhBTkRMRVJfVVNFUgogI2VuZGlmCiAKLSNkZWZpbmUgUFVUUyhmZCwgc3RyKSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSkKKy8qIGNhc3Qgc2l6ZV90IHRvIGludCBiZWNhdXNlIHdyaXRlKCkgdGFrZXMgYW4gaW50IG9uIFdpbmRvd3MKKyAgIChhbnl3YXksIHRoZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIDMwIGNoYXJhY3RlcnMpICovCisjZGVmaW5lIFBVVFMoZmQsIHN0cikgd3JpdGUoZmQsIHN0ciwgKGludClzdHJsZW4oc3RyKSkKKworX1B5X0lERU5USUZJRVIoZW5hYmxlKTsKK19QeV9JREVOVElGSUVSKGZpbGVubyk7CitfUHlfSURFTlRJRklFUihmbHVzaCk7CitfUHlfSURFTlRJRklFUihzdGRlcnIpOwogCiAjaWZkZWYgSEFWRV9TSUdBQ1RJT04KIHR5cGVkZWYgc3RydWN0IHNpZ2FjdGlvbiBfUHlfc2lnaGFuZGxlcl90OwpAQCAtNzksOSArODYsNiBAQAogc3RhdGljIHVzZXJfc2lnbmFsX3QgKnVzZXJfc2lnbmFsczsKIAogLyogdGhlIGZvbGxvd2luZyBtYWNyb3MgY29tZSBmcm9tIFB5dGhvbjogTW9kdWxlcy9zaWduYWxtb2R1bGUuYyAqLwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2RlZmluZSBOU0lHIDEyCi0jZW5kaWYKICNpZm5kZWYgTlNJRwogIyBpZiBkZWZpbmVkKF9OU0lHKQogIyAgZGVmaW5lIE5TSUcgX05TSUcgICAgICAgICAgICAvKiBGb3IgQlNEL1N5c1YgKi8KQEAgLTEzMSwxNyArMTM1LDE5IEBACiBmYXVsdGhhbmRsZXJfZ2V0X2ZpbGVubyhQeU9iamVjdCAqZmlsZSwgaW50ICpwX2ZkKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgX1B5X0lERU5USUZJRVIoZmlsZW5vKTsKLSAgICBfUHlfSURFTlRJRklFUihmbHVzaCk7CiAgICAgbG9uZyBmZF9sb25nOwogICAgIGludCBmZDsKIAogICAgIGlmIChmaWxlID09IE5VTEwgfHwgZmlsZSA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGZpbGUgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgICAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgICAgIGlmIChmaWxlID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJ1bmFibGUgdG8gZ2V0IHN5cy5zdGRlcnIiKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CisgICAgICAgIGlmIChmaWxlID09IFB5X05vbmUpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJzeXMuc3RkZXJyIGlzIE5vbmUiKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmVzdWx0ID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmaWxlLCAmUHlJZF9maWxlbm8sICIiKTsKQEAgLTQ0OCw3ICs0NTQsNyBAQAogICAgICAgICAvKiBnZXQgdGhlIHRocmVhZCBob2xkaW5nIHRoZSBHSUwsIE5VTEwgaWYgbm8gdGhyZWFkIGhvbGQgdGhlIEdJTCAqLwogICAgICAgICBjdXJyZW50ID0gX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOwogCi0gICAgICAgIHdyaXRlKHRocmVhZC5mZCwgdGhyZWFkLmhlYWRlciwgdGhyZWFkLmhlYWRlcl9sZW4pOworICAgICAgICB3cml0ZSh0aHJlYWQuZmQsIHRocmVhZC5oZWFkZXIsIChpbnQpdGhyZWFkLmhlYWRlcl9sZW4pOwogCiAgICAgICAgIGVycm1zZyA9IF9QeV9EdW1wVHJhY2ViYWNrVGhyZWFkcyh0aHJlYWQuZmQsIHRocmVhZC5pbnRlcnAsIGN1cnJlbnQpOwogICAgICAgICBvayA9IChlcnJtc2cgPT0gTlVMTCk7CkBAIC00NzYsNyArNDgyLDcgQEAKIAogICAgIFB5X0NMRUFSKHRocmVhZC5maWxlKTsKICAgICBpZiAodGhyZWFkLmhlYWRlcikgewotICAgICAgICBmcmVlKHRocmVhZC5oZWFkZXIpOworICAgICAgICBQeU1lbV9GcmVlKHRocmVhZC5oZWFkZXIpOwogICAgICAgICB0aHJlYWQuaGVhZGVyID0gTlVMTDsKICAgICB9CiB9CkBAIC01MDUsNyArNTExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAiVGltZW91dCAoJWx1OiUwMmx1OiUwMmx1KSFcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgaG91ciwgbWluLCBzZWMpOwogCi0gICAgcmV0dXJuIHN0cmR1cChidWZmZXIpOworICAgIHJldHVybiBfUHlNZW1fU3RyZHVwKGJ1ZmZlcik7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCoKQEAgLTU3MSw3ICs1NzcsNyBAQAogICAgIGlmIChQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkKGZhdWx0aGFuZGxlcl90aHJlYWQsIE5VTEwpID09IC0xKSB7CiAgICAgICAgIFB5VGhyZWFkX3JlbGVhc2VfbG9jayh0aHJlYWQucnVubmluZyk7CiAgICAgICAgIFB5X0NMRUFSKHRocmVhZC5maWxlKTsKLSAgICAgICAgZnJlZShoZWFkZXIpOworICAgICAgICBQeU1lbV9GcmVlKGhlYWRlcik7CiAgICAgICAgIHRocmVhZC5oZWFkZXIgPSBOVUxMOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBzdGFydCB3YXRjaGRvZyB0aHJlYWQiKTsKQEAgLTczMCw5ICs3MzYsMTAgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAodXNlcl9zaWduYWxzID09IE5VTEwpIHsKLSAgICAgICAgdXNlcl9zaWduYWxzID0gY2FsbG9jKE5TSUcsIHNpemVvZih1c2VyX3NpZ25hbF90KSk7CisgICAgICAgIHVzZXJfc2lnbmFscyA9IFB5TWVtX01hbGxvYyhOU0lHICogc2l6ZW9mKHVzZXJfc2lnbmFsX3QpKTsKICAgICAgICAgaWYgKHVzZXJfc2lnbmFscyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgIG1lbXNldCh1c2VyX3NpZ25hbHMsIDAsIE5TSUcgKiBzaXplb2YodXNlcl9zaWduYWxfdCkpOwogICAgIH0KICAgICB1c2VyID0gJnVzZXJfc2lnbmFsc1tzaWdudW1dOwogCkBAIC04MDIsMjMgKzgwOSwxNSBAQAogewogICAgIHZvbGF0aWxlIGludCAqeDsKICAgICB2b2xhdGlsZSBpbnQgeTsKLSAgICBpbnQgcmVsZWFzZV9naWwgPSAwOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6X3JlYWRfbnVsbCIsICZyZWxlYXNlX2dpbCkpCi0gICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgeCA9IE5VTEw7Ci0gICAgaWYgKHJlbGVhc2VfZ2lsKSB7Ci0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgeSA9ICp4OwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIH0gZWxzZQotICAgICAgICB5ID0gKng7CisgICAgeSA9ICp4OwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoeSk7CiAKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLWZhdWx0aGFuZGxlcl9zaWdzZWd2KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3N0YXRpYyB2b2lkCitmYXVsdGhhbmRsZXJfcmFpc2Vfc2lnc2Vndih2b2lkKQogewogI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICAgICAvKiBGb3IgU0lHU0VHViwgZmF1bHRoYW5kbGVyX2ZhdGFsX2Vycm9yKCkgcmVzdG9yZXMgdGhlIHByZXZpb3VzIHNpZ25hbApAQCAtODM3LDYgKzgzNiwyMiBAQAogI2Vsc2UKICAgICByYWlzZShTSUdTRUdWKTsKICNlbmRpZgorfQorCitzdGF0aWMgUHlPYmplY3QgKgorZmF1bHRoYW5kbGVyX3NpZ3NlZ3YoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCByZWxlYXNlX2dpbCA9IDA7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpfcmVhZF9udWxsIiwgJnJlbGVhc2VfZ2lsKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAocmVsZWFzZV9naWwpIHsKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICBmYXVsdGhhbmRsZXJfcmFpc2Vfc2lnc2VndigpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0gZWxzZSB7CisgICAgICAgIGZhdWx0aGFuZGxlcl9yYWlzZV9zaWdzZWd2KCk7CisgICAgfQogICAgIFB5X1JFVFVSTl9OT05FOwogfQogCkBAIC04OTYsMTIgKzkxMSwxOSBAQAogfQogCiAjaWYgZGVmaW5lZChIQVZFX1NJR0FMVFNUQUNLKSAmJiBkZWZpbmVkKEhBVkVfU0lHQUNUSU9OKQotc3RhdGljIHZvaWQqCi1zdGFja19vdmVyZmxvdyh2b2lkICptaW5fc3AsIHZvaWQgKm1heF9zcCwgc2l6ZV90ICpkZXB0aCkKKyNpZmRlZiBfX0lOVEVMX0NPTVBJTEVSCisgICAvKiBJc3N1ZSAjMjM2NTQ6IFR1cm4gb2ZmIElDQydzIHRhaWwgY2FsbCBvcHRpbWl6YXRpb24gZm9yIHRoZQorICAgICogc3RhY2tfb3ZlcmZsb3cgZ2VuZXJhdG9yLiBJQ0MgdHVybnMgdGhlIHJlY3Vyc2l2ZSB0YWlsIGNhbGwgaW50bworICAgICogYSBsb29wLiAqLworIyAgcHJhZ21hIGludGVsIG9wdGltaXphdGlvbl9sZXZlbCAwCisjZW5kaWYKK3N0YXRpYworUHlfdWludHB0cl90CitzdGFja19vdmVyZmxvdyhQeV91aW50cHRyX3QgbWluX3NwLCBQeV91aW50cHRyX3QgbWF4X3NwLCBzaXplX3QgKmRlcHRoKQogewogICAgIC8qIGFsbG9jYXRlIDQwOTYgYnl0ZXMgb24gdGhlIHN0YWNrIGF0IGVhY2ggY2FsbCAqLwogICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzQwOTZdOwotICAgIHZvaWQgKnNwID0gJmJ1ZmZlcjsKKyAgICBQeV91aW50cHRyX3Qgc3AgPSAoUHlfdWludHB0cl90KSZidWZmZXI7CiAgICAgKmRlcHRoICs9IDE7CiAgICAgaWYgKHNwIDwgbWluX3NwIHx8IG1heF9zcCA8IHNwKQogICAgICAgICByZXR1cm4gc3A7CkBAIC05MTQsNyArOTM2LDggQEAKIGZhdWx0aGFuZGxlcl9zdGFja19vdmVyZmxvdyhQeU9iamVjdCAqc2VsZikKIHsKICAgICBzaXplX3QgZGVwdGgsIHNpemU7Ci0gICAgY2hhciAqc3AgPSAoY2hhciAqKSZkZXB0aCwgKnN0b3A7CisgICAgUHlfdWludHB0cl90IHNwID0gKFB5X3VpbnRwdHJfdCkmZGVwdGg7CisgICAgUHlfdWludHB0cl90IHN0b3A7CiAKICAgICBkZXB0aCA9IDA7CiAgICAgc3RvcCA9IHN0YWNrX292ZXJmbG93KHNwIC0gU1RBQ0tfT1ZFUkZMT1dfTUFYX1NJWkUsCkBAIC05OTYsMTIgKzEwMTksMTIgQEAKICAgICAgICAgICAgICAgICAiJ3NpZ251bScgcmVnaXN0ZXJlZCBieSByZWdpc3RlcigpIil9LAogI2VuZGlmCiAKLSAgICB7Il9yZWFkX251bGwiLCBmYXVsdGhhbmRsZXJfcmVhZF9udWxsLCBNRVRIX1ZBUkFSR1MsCi0gICAgIFB5RG9jX1NUUigiX3JlYWRfbnVsbChyZWxlYXNlX2dpbD1GYWxzZSk6IHJlYWQgZnJvbSBOVUxMLCByYWlzZSAiCisgICAgeyJfcmVhZF9udWxsIiwgZmF1bHRoYW5kbGVyX3JlYWRfbnVsbCwgTUVUSF9OT0FSR1MsCisgICAgIFB5RG9jX1NUUigiX3JlYWRfbnVsbCgpOiByZWFkIGZyb20gTlVMTCwgcmFpc2UgIgogICAgICAgICAgICAgICAgImEgU0lHU0VHViBvciBTSUdCVVMgc2lnbmFsIGRlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0iKX0sCiAgICAgeyJfc2lnc2VndiIsIGZhdWx0aGFuZGxlcl9zaWdzZWd2LCBNRVRIX1ZBUkFSR1MsCi0gICAgIFB5RG9jX1NUUigiX3NpZ3NlZ3YoKTogcmFpc2UgYSBTSUdTRUdWIHNpZ25hbCIpfSwKLSAgICB7Il9zaWdhYnJ0IiwgZmF1bHRoYW5kbGVyX3NpZ2FicnQsIE1FVEhfVkFSQVJHUywKKyAgICAgUHlEb2NfU1RSKCJfc2lnc2VndihyZWxlYXNlX2dpbD1GYWxzZSk6IHJhaXNlIGEgU0lHU0VHViBzaWduYWwiKX0sCisgICAgeyJfc2lnYWJydCIsIGZhdWx0aGFuZGxlcl9zaWdhYnJ0LCBNRVRIX05PQVJHUywKICAgICAgUHlEb2NfU1RSKCJfc2lnYWJydCgpOiByYWlzZSBhIFNJR0FCUlQgc2lnbmFsIil9LAogICAgIHsiX3NpZ2ZwZSIsIChQeUNGdW5jdGlvbilmYXVsdGhhbmRsZXJfc2lnZnBlLCBNRVRIX05PQVJHUywKICAgICAgUHlEb2NfU1RSKCJfc2lnZnBlKCk6IHJhaXNlIGEgU0lHRlBFIHNpZ25hbCIpfSwKQEAgLTEwNDcsOSArMTA3MCwxMSBAQAogZmF1bHRoYW5kbGVyX2Vudl9vcHRpb25zKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKnhvcHRpb25zLCAqa2V5LCAqbW9kdWxlLCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKGVuYWJsZSk7CisgICAgY2hhciAqcDsKIAotICAgIGlmICghUHlfR0VURU5WKCJQWVRIT05GQVVMVEhBTkRMRVIiKSkgeworICAgIGlmICghKChwID0gUHlfR0VURU5WKCJQWVRIT05GQVVMVEhBTkRMRVIiKSkgJiYgKnAgIT0gJ1wwJykpIHsKKyAgICAgICAgLyogUFlUSE9ORkFVTFRIQU5ETEVSIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG1pc3NpbmcKKyAgICAgICAgICAgb3IgYW4gZW1wdHkgc3RyaW5nICovCiAgICAgICAgIGludCBoYXNfa2V5OwogCiAgICAgICAgIHhvcHRpb25zID0gUHlTeXNfR2V0WE9wdGlvbnMoKTsKQEAgLTEwNjIsOCArMTA4Nyw4IEBACiAKICAgICAgICAgaGFzX2tleSA9IFB5RGljdF9Db250YWlucyh4b3B0aW9ucywga2V5KTsKICAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgIGlmICghaGFzX2tleSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAoaGFzX2tleSA8PSAwKQorICAgICAgICAgICAgcmV0dXJuIGhhc19rZXk7CiAgICAgfQogCiAgICAgbW9kdWxlID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJmYXVsdGhhbmRsZXIiKTsKQEAgLTExMzcsNyArMTE2Miw3IEBACiAgICAgaWYgKHVzZXJfc2lnbmFscyAhPSBOVUxMKSB7CiAgICAgICAgIGZvciAoc2lnbnVtPTA7IHNpZ251bSA8IE5TSUc7IHNpZ251bSsrKQogICAgICAgICAgICAgZmF1bHRoYW5kbGVyX3VucmVnaXN0ZXIoJnVzZXJfc2lnbmFsc1tzaWdudW1dLCBzaWdudW0pOwotICAgICAgICBmcmVlKHVzZXJfc2lnbmFscyk7CisgICAgICAgIFB5TWVtX0ZyZWUodXNlcl9zaWduYWxzKTsKICAgICAgICAgdXNlcl9zaWduYWxzID0gTlVMTDsKICAgICB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvZmNudGxtb2R1bGUuYyBiL01vZHVsZXMvZmNudGxtb2R1bGUuYwppbmRleCA2NzY5MDk4Li45MzI1OTQwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2ZjbnRsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9mY250bG1vZHVsZS5jCkBAIC0zNCw3ICszNCw3IEBACiB7CiAgICAgaW50IGZkOwogICAgIGludCBjb2RlOwotICAgIGxvbmcgYXJnOworICAgIGludCBhcmc7CiAgICAgaW50IHJldDsKICAgICBjaGFyICpzdHI7CiAgICAgUHlfc3NpemVfdCBsZW47CkBAIC02MSw3ICs2MSw3IEBACiAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICBhcmcgPSAwOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAotICAgICAgICAgIk8maXxsO2ZjbnRsIHJlcXVpcmVzIGEgZmlsZSBvciBmaWxlIGRlc2NyaXB0b3IsIgorICAgICAgICAgIk8maXxJO2ZjbnRsIHJlcXVpcmVzIGEgZmlsZSBvciBmaWxlIGRlc2NyaXB0b3IsIgogICAgICAgICAgIiBhbiBpbnRlZ2VyIGFuZCBvcHRpb25hbGx5IGEgdGhpcmQgaW50ZWdlciBvciBhIHN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnZfZGVzY3JpcHRvciwgJmZkLCAmY29kZSwgJmFyZykpIHsKICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjA4LDExICsyMDgsNyBAQAogICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZmRlZiBfX1ZNUwotICAgIHJldCA9IGlvY3RsKGZkLCBjb2RlLCAodm9pZCAqKWFyZyk7Ci0jZWxzZQogICAgIHJldCA9IGlvY3RsKGZkLCBjb2RlLCBhcmcpOwotI2VuZGlmCiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAocmV0IDwgMCkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CkBAIC0zMjcsMTEgKzMyMyw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZsZW5vYmosICZzdGFydG9iaiwgJndoZW5jZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgImxvY2tmIG5vdCBzdXBwb3J0ZWQgb24gT1MvMiAoRU1YKSIpOwotICAgIHJldHVybiBOVUxMOwotI2Vsc2UKICNpZm5kZWYgTE9DS19TSAogI2RlZmluZSBMT0NLX1NIICAgICAgICAgMSAgICAgICAvKiBzaGFyZWQgbG9jayAqLwogI2RlZmluZSBMT0NLX0VYICAgICAgICAgMiAgICAgICAvKiBleGNsdXNpdmUgbG9jayAqLwpAQCAtMzg1LDcgKzM3Niw2IEBACiAgICAgfQogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKLSNlbmRpZiAgLyogZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykgKi8KIH0KIAogUHlEb2NfU1RSVkFSKGxvY2tmX2RvYywKQEAgLTQzMiwxODggKzQyMiwxNzkgQEAKIAogLyogTW9kdWxlIGluaXRpYWxpc2F0aW9uICovCiAKLXN0YXRpYyBpbnQKLWlucyhQeU9iamVjdCogZCwgY2hhciogc3ltYm9sLCBsb25nIHZhbHVlKQotewotICAgIFB5T2JqZWN0KiB2ID0gUHlMb25nX0Zyb21Mb25nKHZhbHVlKTsKLSAgICBpZiAoIXYgfHwgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgc3ltYm9sLCB2KSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIFB5X0RFQ1JFRih2KTsKLSAgICByZXR1cm4gMDsKLX0KLQotI2RlZmluZSBJTlMoeCkgaWYgKGlucyhkLCAjeCwgKGxvbmcpeCkpIHJldHVybiAtMQogCiBzdGF0aWMgaW50Ci1hbGxfaW5zKFB5T2JqZWN0KiBkKQorYWxsX2lucyhQeU9iamVjdCogbSkKIHsKLSAgICBpZiAoaW5zKGQsICJMT0NLX1NIIiwgKGxvbmcpTE9DS19TSCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJMT0NLX0VYIiwgKGxvbmcpTE9DS19FWCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJMT0NLX05CIiwgKGxvbmcpTE9DS19OQikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJMT0NLX1VOIiwgKGxvbmcpTE9DS19VTikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19TSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19FWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19OQikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19VTikpIHJldHVybiAtMTsKIC8qIEdOVSBleHRlbnNpb25zLCBhcyBvZiBnbGliYyAyLjIuNCAqLwogI2lmZGVmIExPQ0tfTUFORAotICAgIGlmIChpbnMoZCwgIkxPQ0tfTUFORCIsIChsb25nKUxPQ0tfTUFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9DS19NQU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTE9DS19SRUFECi0gICAgaWYgKGlucyhkLCAiTE9DS19SRUFEIiwgKGxvbmcpTE9DS19SRUFEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NLX1JFQUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBMT0NLX1dSSVRFCi0gICAgaWYgKGlucyhkLCAiTE9DS19XUklURSIsIChsb25nKUxPQ0tfV1JJVEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfV1JJVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBMT0NLX1JXCi0gICAgaWYgKGlucyhkLCAiTE9DS19SVyIsIChsb25nKUxPQ0tfUlcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0tfUlcpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEZfRFVQRkQKLSAgICBpZiAoaW5zKGQsICJGX0RVUEZEIiwgKGxvbmcpRl9EVVBGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9EVVBGRCkpIHJldHVybiAtMTsKKyNlbmRpZgorI2lmZGVmIEZfRFVQRkRfQ0xPRVhFQworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0RVUEZEX0NMT0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVEZECi0gICAgaWYgKGlucyhkLCAiRl9HRVRGRCIsIChsb25nKUZfR0VURkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VURkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVEZECi0gICAgaWYgKGlucyhkLCAiRl9TRVRGRCIsIChsb25nKUZfU0VURkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VURkQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVEZMCi0gICAgaWYgKGlucyhkLCAiRl9HRVRGTCIsIChsb25nKUZfR0VURkwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VURkwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVEZMCi0gICAgaWYgKGlucyhkLCAiRl9TRVRGTCIsIChsb25nKUZfU0VURkwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VURkwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVExLCi0gICAgaWYgKGlucyhkLCAiRl9HRVRMSyIsIChsb25nKUZfR0VUTEspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUTEspKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLCi0gICAgaWYgKGlucyhkLCAiRl9TRVRMSyIsIChsb25nKUZfU0VUTEspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEspKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLVwotICAgIGlmIChpbnMoZCwgIkZfU0VUTEtXIiwgKGxvbmcpRl9TRVRMS1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEtXKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9HRVRPV04KLSAgICBpZiAoaW5zKGQsICJGX0dFVE9XTiIsIChsb25nKUZfR0VUT1dOKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX0dFVE9XTikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUT1dOCi0gICAgaWYgKGlucyhkLCAiRl9TRVRPV04iLCAobG9uZylGX1NFVE9XTikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRPV04pKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX0dFVFNJRwotICAgIGlmIChpbnMoZCwgIkZfR0VUU0lHIiwgKGxvbmcpRl9HRVRTSUcpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfR0VUU0lHKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRTSUcKLSAgICBpZiAoaW5zKGQsICJGX1NFVFNJRyIsIChsb25nKUZfU0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVFNJRykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfUkRMQ0sKLSAgICBpZiAoaW5zKGQsICJGX1JETENLIiwgKGxvbmcpRl9SRExDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9SRExDSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfV1JMQ0sKLSAgICBpZiAoaW5zKGQsICJGX1dSTENLIiwgKGxvbmcpRl9XUkxDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9XUkxDSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfVU5MQ0sKLSAgICBpZiAoaW5zKGQsICJGX1VOTENLIiwgKGxvbmcpRl9VTkxDSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9VTkxDSykpIHJldHVybiAtMTsKICNlbmRpZgogLyogTEZTIGNvbnN0YW50cyAqLwogI2lmZGVmIEZfR0VUTEs2NAotICAgIGlmIChpbnMoZCwgIkZfR0VUTEs2NCIsIChsb25nKUZfR0VUTEs2NCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRMSzY0KSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9TRVRMSzY0Ci0gICAgaWYgKGlucyhkLCAiRl9TRVRMSzY0IiwgKGxvbmcpRl9TRVRMSzY0KSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1NFVExLNjQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NFVExLVzY0Ci0gICAgaWYgKGlucyhkLCAiRl9TRVRMS1c2NCIsIChsb25nKUZfU0VUTEtXNjQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0VUTEtXNjQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIC8qIEdOVSBleHRlbnNpb25zLCBhcyBvZiBnbGliYyAyLjIuNC4gKi8KICNpZmRlZiBGQVNZTkMKLSAgICBpZiAoaW5zKGQsICJGQVNZTkMiLCAobG9uZylGQVNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZBU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfU0VUTEVBU0UKLSAgICBpZiAoaW5zKGQsICJGX1NFVExFQVNFIiwgKGxvbmcpRl9TRVRMRUFTRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9TRVRMRUFTRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfR0VUTEVBU0UKLSAgICBpZiAoaW5zKGQsICJGX0dFVExFQVNFIiwgKGxvbmcpRl9HRVRMRUFTRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9HRVRMRUFTRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEZfTk9USUZZCi0gICAgaWYgKGlucyhkLCAiRl9OT1RJRlkiLCAobG9uZylGX05PVElGWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9OT1RJRlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKIC8qIE9sZCBCU0QgZmxvY2soKS4gKi8KICNpZmRlZiBGX0VYTENLCi0gICAgaWYgKGlucyhkLCAiRl9FWExDSyIsIChsb25nKUZfRVhMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRVhMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBGX1NITENLCi0gICAgaWYgKGlucyhkLCAiRl9TSExDSyIsIChsb25nKUZfU0hMQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfU0hMQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogT1MgWCBzcGVjaWZpY3MgKi8KICNpZmRlZiBGX0ZVTExGU1lOQwotICAgIGlmIChpbnMoZCwgIkZfRlVMTEZTWU5DIiwgKGxvbmcpRl9GVUxMRlNZTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZfRlVMTEZTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9OT0NBQ0hFCi0gICAgaWYgKGlucyhkLCAiRl9OT0NBQ0hFIiwgKGxvbmcpRl9OT0NBQ0hFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX05PQ0FDSEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogRm9yIEZfe0dFVHxTRVR9RkwgKi8KICNpZmRlZiBGRF9DTE9FWEVDCi0gICAgaWYgKGlucyhkLCAiRkRfQ0xPRVhFQyIsIChsb25nKUZEX0NMT0VYRUMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZEX0NMT0VYRUMpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogLyogRm9yIEZfTk9USUZZICovCiAjaWZkZWYgRE5fQUNDRVNTCi0gICAgaWYgKGlucyhkLCAiRE5fQUNDRVNTIiwgKGxvbmcpRE5fQUNDRVNTKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9BQ0NFU1MpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9NT0RJRlkKLSAgICBpZiAoaW5zKGQsICJETl9NT0RJRlkiLCAobG9uZylETl9NT0RJRlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX01PRElGWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX0NSRUFURQotICAgIGlmIChpbnMoZCwgIkROX0NSRUFURSIsIChsb25nKUROX0NSRUFURSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fQ1JFQVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fREVMRVRFCi0gICAgaWYgKGlucyhkLCAiRE5fREVMRVRFIiwgKGxvbmcpRE5fREVMRVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9ERUxFVEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBETl9SRU5BTUUKLSAgICBpZiAoaW5zKGQsICJETl9SRU5BTUUiLCAobG9uZylETl9SRU5BTUUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEROX1JFTkFNRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIEROX0FUVFJJQgotICAgIGlmIChpbnMoZCwgIkROX0FUVFJJQiIsIChsb25nKUROX0FUVFJJQikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRE5fQVRUUklCKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRE5fTVVMVElTSE9UCi0gICAgaWYgKGlucyhkLCAiRE5fTVVMVElTSE9UIiwgKGxvbmcpRE5fTVVMVElTSE9UKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBETl9NVUxUSVNIT1QpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU1RST1BUU19ICiAgICAgLyogVW5peCA5OCBndWFyYW50ZWVzIHRoYXQgdGhlc2UgYXJlIGluIHN0cm9wdHMuaC4gKi8KLSAgICBJTlMoSV9QVVNIKTsKLSAgICBJTlMoSV9QT1ApOwotICAgIElOUyhJX0xPT0spOwotICAgIElOUyhJX0ZMVVNIKTsKLSAgICBJTlMoSV9GTFVTSEJBTkQpOwotICAgIElOUyhJX1NFVFNJRyk7Ci0gICAgSU5TKElfR0VUU0lHKTsKLSAgICBJTlMoSV9GSU5EKTsKLSAgICBJTlMoSV9QRUVLKTsKLSAgICBJTlMoSV9TUkRPUFQpOwotICAgIElOUyhJX0dSRE9QVCk7Ci0gICAgSU5TKElfTlJFQUQpOwotICAgIElOUyhJX0ZESU5TRVJUKTsKLSAgICBJTlMoSV9TVFIpOwotICAgIElOUyhJX1NXUk9QVCk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfUFVTSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QT1ApKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfTE9PSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GTFVTSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GTFVTSEJBTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU0VUU0lHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dFVFNJRykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GSU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1BFRUspKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU1JET1BUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0dSRE9QVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9OUkVBRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9GRElOU0VSVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9TVFIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU1dST1BUKSkgcmV0dXJuIC0xOwogI2lmZGVmIElfR1dST1BUCiAgICAgLyogZGVzcGl0ZSB0aGUgY29tbWVudCBhYm92ZSwgb2xkLWlzaCBnbGliY3MgbWlzcyBhIGNvdXBsZS4uLiAqLwotICAgIElOUyhJX0dXUk9QVCk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR1dST1BUKSkgcmV0dXJuIC0xOwogI2VuZGlmCi0gICAgSU5TKElfU0VOREZEKTsKLSAgICBJTlMoSV9SRUNWRkQpOwotICAgIElOUyhJX0xJU1QpOwotICAgIElOUyhJX0FUTUFSSyk7Ci0gICAgSU5TKElfQ0tCQU5EKTsKLSAgICBJTlMoSV9HRVRCQU5EKTsKLSAgICBJTlMoSV9DQU5QVVQpOwotICAgIElOUyhJX1NFVENMVElNRSk7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU0VOREZEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1JFQ1ZGRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9MSVNUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX0FUTUFSSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9DS0JBTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfR0VUQkFORCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9DQU5QVVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElfU0VUQ0xUSU1FKSkgcmV0dXJuIC0xOwogI2lmZGVmIElfR0VUQ0xUSU1FCi0gICAgSU5TKElfR0VUQ0xUSU1FKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9HRVRDTFRJTUUpKSByZXR1cm4gLTE7CiAjZW5kaWYKLSAgICBJTlMoSV9MSU5LKTsKLSAgICBJTlMoSV9VTkxJTkspOwotICAgIElOUyhJX1BMSU5LKTsKLSAgICBJTlMoSV9QVU5MSU5LKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9MSU5LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJX1VOTElOSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QTElOSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSV9QVU5MSU5LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICByZXR1cm4gMDsKQEAgLTYzNSw3ICs2MTYsNyBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9mY250bCh2b2lkKQogewotICAgIFB5T2JqZWN0ICptLCAqZDsKKyAgICBQeU9iamVjdCAqbTsKIAogICAgIC8qIENyZWF0ZSB0aGUgbW9kdWxlIGFuZCBhZGQgdGhlIGZ1bmN0aW9ucyBhbmQgZG9jdW1lbnRhdGlvbiAqLwogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJmZjbnRsbW9kdWxlKTsKQEAgLTY0Myw3ICs2MjQsOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEFkZCBzb21lIHN5bWJvbGljIGNvbnN0YW50cyB0byB0aGUgbW9kdWxlICovCi0gICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgYWxsX2lucyhkKTsKKyAgICBpZiAoYWxsX2lucyhtKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL2ZwZWN0bG1vZHVsZS5jIGIvTW9kdWxlcy9mcGVjdGxtb2R1bGUuYwppbmRleCA2YWYyZjgyLi4wNTJiODM0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2ZwZWN0bG1vZHVsZS5jCisrKyBiL01vZHVsZXMvZnBlY3RsbW9kdWxlLmMKQEAgLTcwLDEwICs3MCw2IEBACiAKICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQogIyAgaW5jbHVkZSA8aWVlZWZwLmg+Ci0jZWxpZiBkZWZpbmVkKF9fVk1TKQotI2RlZmluZSBfX05FV19TVEFSTEVUCi0jaW5jbHVkZSA8c3RhcmxldC5oPgotI2luY2x1ZGUgPGllZWVkZWYuaD4KICNlbmRpZgogCiAjaWZuZGVmIFdBTlRfU0lHRlBFX0hBTkRMRVIKQEAgLTE4MiwyMyArMTc4LDYgQEAKICAgICBpZWVlX3NldF9mcF9jb250cm9sKGZwX2NvbnRyb2wpOwogICAgIFB5T1Nfc2V0c2lnKFNJR0ZQRSwgaGFuZGxlcik7CiAKLS8qLS0gREVDIEFMUEhBIFZNUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZWxpZiBkZWZpbmVkKF9fQUxQSEEpICYmIGRlZmluZWQoX19WTVMpCi0gICAgICAgIElFRUUgY2xybXNrOwotICAgICAgICBJRUVFIHNldG1zazsKLSAgICAgICAgY2xybXNrLmllZWUkcV9mbGFncyA9Ci0gICAgICAgICAgICAgICAgSUVFRSRNX1RSQVBfRU5BQkxFX1VORiB8ICBJRUVFJE1fVFJBUF9FTkFCTEVfSU5FIHwKLSAgICAgICAgICAgICAgICAgSUVFRSRNX01BUF9VTVo7Ci0gICAgICAgIHNldG1zay5pZWVlJHFfZmxhZ3MgPQotICAgICAgICAgICAgICAgIElFRUUkTV9UUkFQX0VOQUJMRV9JTlYgfCBJRUVFJE1fVFJBUF9FTkFCTEVfRFpFIHwKLSAgICAgICAgICAgICAgICBJRUVFJE1fVFJBUF9FTkFCTEVfT1ZGOwotICAgICAgICBzeXMkaWVlZV9zZXRfZnBfY29udHJvbCgmY2xybXNrLCAmc2V0bXNrLCAwKTsKLSAgICAgICAgUHlPU19zZXRzaWcoU0lHRlBFLCBoYW5kbGVyKTsKLQotLyotLSBIUCBJQTY0IFZNUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZWxpZiBkZWZpbmVkKF9faWE2NCkgJiYgZGVmaW5lZChfX1ZNUykKLSAgICBQeU9TX3NldHNpZyhTSUdGUEUsIGhhbmRsZXIpOwotCiAvKi0tIENyYXkgVW5pY29zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogI2VsaWYgZGVmaW5lZChjcmF5KQogICAgIC8qIFVOSUNPUyBkZWxpdmVycyBTSUdGUEUgYnkgZGVmYXVsdCwgYnV0IG5vIG1hdGhlcnIgKi8KQEAgLTI1MSwxNCArMjMwLDYgQEAKICNpZmRlZiBfX0ZyZWVCU0RfXwogICAgIGZwcmVzZXRzdGlja3koZnBnZXRzdGlja3koKSk7CiAgICAgZnBzZXRtYXNrKDApOwotI2VsaWYgZGVmaW5lZChfX1ZNUykKLSAgICAgICAgSUVFRSBjbHJtc2s7Ci0gICAgICAgICBjbHJtc2suaWVlZSRxX2ZsYWdzID0KLSAgICAgICAgICAgICAgICBJRUVFJE1fVFJBUF9FTkFCTEVfVU5GIHwgIElFRUUkTV9UUkFQX0VOQUJMRV9JTkUgfAotICAgICAgICAgICAgICAgIElFRUUkTV9NQVBfVU1aIHwgSUVFRSRNX1RSQVBfRU5BQkxFX0lOViB8Ci0gICAgICAgICAgICAgICAgSUVFRSRNX1RSQVBfRU5BQkxFX0RaRSB8IElFRUUkTV9UUkFQX0VOQUJMRV9PVkYgfAotICAgICAgICAgICAgICAgIElFRUUkTV9JTkhFUklUOwotICAgICAgICBzeXMkaWVlZV9zZXRfZnBfY29udHJvbCgmY2xybXNrLCAwLCAwKTsKICNlbHNlCiAgICAgZnB1dHMoIk9wZXJhdGlvbiBub3QgaW1wbGVtZW50ZWRcbiIsIHN0ZGVycik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2Ntb2R1bGUuYyBiL01vZHVsZXMvZ2Ntb2R1bGUuYwppbmRleCBjNjZkZDM4Li45YmIzNjY2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL2djbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9nY21vZHVsZS5jCkBAIC0xNjgsNiArMTY4LDE4IEBACiBzdGF0aWMgaW50IGRlYnVnOwogc3RhdGljIFB5T2JqZWN0ICp0bW9kID0gTlVMTDsKIAorLyogUnVubmluZyBzdGF0cyBwZXIgZ2VuZXJhdGlvbiAqLworc3RydWN0IGdjX2dlbmVyYXRpb25fc3RhdHMgeworICAgIC8qIHRvdGFsIG51bWJlciBvZiBjb2xsZWN0aW9ucyAqLworICAgIFB5X3NzaXplX3QgY29sbGVjdGlvbnM7CisgICAgLyogdG90YWwgbnVtYmVyIG9mIGNvbGxlY3RlZCBvYmplY3RzICovCisgICAgUHlfc3NpemVfdCBjb2xsZWN0ZWQ7CisgICAgLyogdG90YWwgbnVtYmVyIG9mIHVuY29sbGVjdGFibGUgb2JqZWN0cyAocHV0IGludG8gZ2MuZ2FyYmFnZSkgKi8KKyAgICBQeV9zc2l6ZV90IHVuY29sbGVjdGFibGU7Cit9OworCitzdGF0aWMgc3RydWN0IGdjX2dlbmVyYXRpb25fc3RhdHMgZ2VuZXJhdGlvbl9zdGF0c1tOVU1fR0VORVJBVElPTlNdOworCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBnY19yZWZzIHZhbHVlcy4KIApAQCAtMjExLDEwICsyMjMsMTAgQEAKICNkZWZpbmUgR0NfUkVBQ0hBQkxFICAgICAgICAgICAgICAgICAgICBfUHlHQ19SRUZTX1JFQUNIQUJMRQogI2RlZmluZSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSAgICAgIF9QeUdDX1JFRlNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUKIAotI2RlZmluZSBJU19UUkFDS0VEKG8pICgoQVNfR0MobykpLT5nYy5nY19yZWZzICE9IEdDX1VOVFJBQ0tFRCkKLSNkZWZpbmUgSVNfUkVBQ0hBQkxFKG8pICgoQVNfR0MobykpLT5nYy5nY19yZWZzID09IEdDX1JFQUNIQUJMRSkKKyNkZWZpbmUgSVNfVFJBQ0tFRChvKSAoX1B5R0NfUkVGUyhvKSAhPSBHQ19VTlRSQUNLRUQpCisjZGVmaW5lIElTX1JFQUNIQUJMRShvKSAoX1B5R0NfUkVGUyhvKSA9PSBHQ19SRUFDSEFCTEUpCiAjZGVmaW5lIElTX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKG8pICggXAotICAgIChBU19HQyhvKSktPmdjLmdjX3JlZnMgPT0gR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUpCisgICAgX1B5R0NfUkVGUyhvKSA9PSBHQ19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRSkKIAogLyoqKiBsaXN0IGZ1bmN0aW9ucyAqKiovCiAKQEAgLTMyOSw4ICszNDEsOCBAQAogewogICAgIFB5R0NfSGVhZCAqZ2MgPSBjb250YWluZXJzLT5nYy5nY19uZXh0OwogICAgIGZvciAoOyBnYyAhPSBjb250YWluZXJzOyBnYyA9IGdjLT5nYy5nY19uZXh0KSB7Ci0gICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyA9PSBHQ19SRUFDSEFCTEUpOwotICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IFB5X1JFRkNOVChGUk9NX0dDKGdjKSk7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgPT0gR0NfUkVBQ0hBQkxFKTsKKyAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBQeV9SRUZDTlQoRlJPTV9HQyhnYykpKTsKICAgICAgICAgLyogUHl0aG9uJ3MgY3ljbGljIGdjIHNob3VsZCBuZXZlciBzZWUgYW4gaW5jb21pbmcgcmVmY291bnQKICAgICAgICAgICogb2YgMDogIGlmIHNvbWV0aGluZyBkZWNyZWYnZWQgdG8gMCwgaXQgc2hvdWxkIGhhdmUgYmVlbgogICAgICAgICAgKiBkZWFsbG9jYXRlZCBpbW1lZGlhdGVseSBhdCB0aGF0IHRpbWUuCkBAIC0zNDksNyArMzYxLDcgQEAKICAgICAgICAgICogc28gc2VyaW91cyB0aGF0IG1heWJlIHRoaXMgc2hvdWxkIGJlIGEgcmVsZWFzZS1idWlsZAogICAgICAgICAgKiBjaGVjayBpbnN0ZWFkIG9mIGFuIGFzc2VydD8KICAgICAgICAgICovCi0gICAgICAgIGFzc2VydChnYy0+Z2MuZ2NfcmVmcyAhPSAwKTsKKyAgICAgICAgYXNzZXJ0KF9QeUdDSGVhZF9SRUZTKGdjKSAhPSAwKTsKICAgICB9CiB9CiAKQEAgLTM2NCw5ICszNzYsOSBAQAogICAgICAgICAgKiBnZW5lcmF0aW9uIGJlaW5nIGNvbGxlY3RlZCwgd2hpY2ggY2FuIGJlIHJlY29nbml6ZWQKICAgICAgICAgICogYmVjYXVzZSBvbmx5IHRoZXkgaGF2ZSBwb3NpdGl2ZSBnY19yZWZzLgogICAgICAgICAgKi8KLSAgICAgICAgYXNzZXJ0KGdjLT5nYy5nY19yZWZzICE9IDApOyAvKiBlbHNlIHJlZmNvdW50IHdhcyB0b28gc21hbGwgKi8KLSAgICAgICAgaWYgKGdjLT5nYy5nY19yZWZzID4gMCkKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzLS07CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCk7IC8qIGVsc2UgcmVmY291bnQgd2FzIHRvbyBzbWFsbCAqLworICAgICAgICBpZiAoX1B5R0NIZWFkX1JFRlMoZ2MpID4gMCkKKyAgICAgICAgICAgIF9QeUdDSGVhZF9ERUNSRUYoZ2MpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTM5NSw3ICs0MDcsNyBAQAogewogICAgIGlmIChQeU9iamVjdF9JU19HQyhvcCkpIHsKICAgICAgICAgUHlHQ19IZWFkICpnYyA9IEFTX0dDKG9wKTsKLSAgICAgICAgY29uc3QgUHlfc3NpemVfdCBnY19yZWZzID0gZ2MtPmdjLmdjX3JlZnM7CisgICAgICAgIGNvbnN0IFB5X3NzaXplX3QgZ2NfcmVmcyA9IF9QeUdDSGVhZF9SRUZTKGdjKTsKIAogICAgICAgICBpZiAoZ2NfcmVmcyA9PSAwKSB7CiAgICAgICAgICAgICAvKiBUaGlzIGlzIGluIG1vdmVfdW5yZWFjaGFibGUncyAneW91bmcnIGxpc3QsIGJ1dApAQCAtNDAzLDcgKzQxNSw3IEBACiAgICAgICAgICAgICAgKiB3ZSBuZWVkIHRvIGRvIGlzIHRlbGwgbW92ZV91bnJlYWNoYWJsZSB0aGF0IGl0J3MKICAgICAgICAgICAgICAqIHJlYWNoYWJsZS4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSAxOworICAgICAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCAxKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIGlmIChnY19yZWZzID09IEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKSB7CiAgICAgICAgICAgICAvKiBUaGlzIGhhZCBnY19yZWZzID0gMCB3aGVuIG1vdmVfdW5yZWFjaGFibGUgZ290CkBAIC00MTMsNyArNDI1LDcgQEAKICAgICAgICAgICAgICAqIGFnYWluLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIHJlYWNoYWJsZSk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IDE7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIDEpOwogICAgICAgICB9CiAgICAgICAgIC8qIEVsc2UgdGhlcmUncyBub3RoaW5nIHRvIGRvLgogICAgICAgICAgKiBJZiBnY19yZWZzID4gMCwgaXQgbXVzdCBiZSBpbiBtb3ZlX3VucmVhY2hhYmxlJ3MgJ3lvdW5nJwpAQCAtNDU3LDcgKzQ2OSw3IEBACiAgICAgd2hpbGUgKGdjICE9IHlvdW5nKSB7CiAgICAgICAgIFB5R0NfSGVhZCAqbmV4dDsKIAotICAgICAgICBpZiAoZ2MtPmdjLmdjX3JlZnMpIHsKKyAgICAgICAgaWYgKF9QeUdDSGVhZF9SRUZTKGdjKSkgewogICAgICAgICAgICAgLyogZ2MgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgZnJvbSBvdXRzaWRlIHRoZQogICAgICAgICAgICAgICogb3JpZ2luYWwgJ3lvdW5nJy4gIE1hcmsgaXQgYXMgc3VjaCwgYW5kIHRyYXZlcnNlCiAgICAgICAgICAgICAgKiBpdHMgcG9pbnRlcnMgdG8gZmluZCBhbnkgb3RoZXIgb2JqZWN0cyB0aGF0IG1heQpAQCAtNDY4LDggKzQ4MCw4IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOwogICAgICAgICAgICAgdHJhdmVyc2Vwcm9jIHRyYXZlcnNlID0gUHlfVFlQRShvcCktPnRwX3RyYXZlcnNlOwotICAgICAgICAgICAgYXNzZXJ0KGdjLT5nYy5nY19yZWZzID4gMCk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgPiAwKTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgICAgICh2b2lkKSB0cmF2ZXJzZShvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlzaXRwcm9jKXZpc2l0X3JlYWNoYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXlvdW5nKTsKQEAgLTQ4OCw3ICs1MDAsNyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBuZXh0ID0gZ2MtPmdjLmdjX25leHQ7CiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIHVucmVhY2hhYmxlKTsKLSAgICAgICAgICAgIGdjLT5nYy5nY19yZWZzID0gR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEU7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1RFTlRBVElWRUxZX1VOUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgICAgICBnYyA9IG5leHQ7CiAgICAgfQpAQCAtNTA4LDIyICs1MjAsMTkgQEAKICAgICB9CiB9CiAKLS8qIFJldHVybiB0cnVlIGlmIG9iamVjdCBoYXMgYSBmaW5hbGl6YXRpb24gbWV0aG9kLiAqLworLyogUmV0dXJuIHRydWUgaWYgb2JqZWN0IGhhcyBhIHByZS1QRVAgNDQyIGZpbmFsaXphdGlvbiBtZXRob2QuICovCiBzdGF0aWMgaW50Ci1oYXNfZmluYWxpemVyKFB5T2JqZWN0ICpvcCkKK2hhc19sZWdhY3lfZmluYWxpemVyKFB5T2JqZWN0ICpvcCkKIHsKLSAgICBpZiAoUHlHZW5fQ2hlY2tFeGFjdChvcCkpCi0gICAgICAgIHJldHVybiBQeUdlbl9OZWVkc0ZpbmFsaXppbmcoKFB5R2VuT2JqZWN0ICopb3ApOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIG9wLT5vYl90eXBlLT50cF9kZWwgIT0gTlVMTDsKKyAgICByZXR1cm4gb3AtPm9iX3R5cGUtPnRwX2RlbCAhPSBOVUxMOwogfQogCi0vKiBNb3ZlIHRoZSBvYmplY3RzIGluIHVucmVhY2hhYmxlIHdpdGggX19kZWxfXyBtZXRob2RzIGludG8gYGZpbmFsaXplcnNgLgorLyogTW92ZSB0aGUgb2JqZWN0cyBpbiB1bnJlYWNoYWJsZSB3aXRoIHRwX2RlbCBzbG90cyBpbnRvIGBmaW5hbGl6ZXJzYC4KICAqIE9iamVjdHMgbW92ZWQgaW50byBgZmluYWxpemVyc2AgaGF2ZSBnY19yZWZzIHNldCB0byBHQ19SRUFDSEFCTEU7IHRoZQogICogb2JqZWN0cyByZW1haW5pbmcgaW4gdW5yZWFjaGFibGUgYXJlIGxlZnQgYXQgR0NfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUuCiAgKi8KIHN0YXRpYyB2b2lkCi1tb3ZlX2ZpbmFsaXplcnMoUHlHQ19IZWFkICp1bnJlYWNoYWJsZSwgUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQorbW92ZV9sZWdhY3lfZmluYWxpemVycyhQeUdDX0hlYWQgKnVucmVhY2hhYmxlLCBQeUdDX0hlYWQgKmZpbmFsaXplcnMpCiB7CiAgICAgUHlHQ19IZWFkICpnYzsKICAgICBQeUdDX0hlYWQgKm5leHQ7CkBAIC01MzcsMTQgKzU0NiwxNCBAQAogICAgICAgICBhc3NlcnQoSVNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUob3ApKTsKICAgICAgICAgbmV4dCA9IGdjLT5nYy5nY19uZXh0OwogCi0gICAgICAgIGlmIChoYXNfZmluYWxpemVyKG9wKSkgeworICAgICAgICBpZiAoaGFzX2xlZ2FjeV9maW5hbGl6ZXIob3ApKSB7CiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIGZpbmFsaXplcnMpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19SRUFDSEFCTEU7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLS8qIEEgdHJhdmVyc2FsIGNhbGxiYWNrIGZvciBtb3ZlX2ZpbmFsaXplcl9yZWFjaGFibGUuICovCisvKiBBIHRyYXZlcnNhbCBjYWxsYmFjayBmb3IgbW92ZV9sZWdhY3lfZmluYWxpemVyX3JlYWNoYWJsZS4gKi8KIHN0YXRpYyBpbnQKIHZpc2l0X21vdmUoUHlPYmplY3QgKm9wLCBQeUdDX0hlYWQgKnRvbGlzdCkKIHsKQEAgLTU1Miw3ICs1NjEsNyBAQAogICAgICAgICBpZiAoSVNfVEVOVEFUSVZFTFlfVU5SRUFDSEFCTEUob3ApKSB7CiAgICAgICAgICAgICBQeUdDX0hlYWQgKmdjID0gQVNfR0Mob3ApOwogICAgICAgICAgICAgZ2NfbGlzdF9tb3ZlKGdjLCB0b2xpc3QpOwotICAgICAgICAgICAgZ2MtPmdjLmdjX3JlZnMgPSBHQ19SRUFDSEFCTEU7CisgICAgICAgICAgICBfUHlHQ0hlYWRfU0VUX1JFRlMoZ2MsIEdDX1JFQUNIQUJMRSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC01NjIsNyArNTcxLDcgQEAKICAqIGludG8gZmluYWxpemVycyBzZXQuCiAgKi8KIHN0YXRpYyB2b2lkCi1tb3ZlX2ZpbmFsaXplcl9yZWFjaGFibGUoUHlHQ19IZWFkICpmaW5hbGl6ZXJzKQorbW92ZV9sZWdhY3lfZmluYWxpemVyX3JlYWNoYWJsZShQeUdDX0hlYWQgKmZpbmFsaXplcnMpCiB7CiAgICAgdHJhdmVyc2Vwcm9jIHRyYXZlcnNlOwogICAgIFB5R0NfSGVhZCAqZ2MgPSBmaW5hbGl6ZXJzLT5nYy5nY19uZXh0OwpAQCAtNzM1LDcgKzc0NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIG1zZywgUHlfVFlQRShvcCktPnRwX25hbWUsIG9wKTsKIH0KIAotLyogSGFuZGxlIHVuY29sbGVjdGFibGUgZ2FyYmFnZSAoY3ljbGVzIHdpdGggZmluYWxpemVycywgYW5kIHN0dWZmIHJlYWNoYWJsZQorLyogSGFuZGxlIHVuY29sbGVjdGFibGUgZ2FyYmFnZSAoY3ljbGVzIHdpdGggdHBfZGVsIHNsb3RzLCBhbmQgc3R1ZmYgcmVhY2hhYmxlCiAgKiBvbmx5IGZyb20gc3VjaCBjeWNsZXMpLgogICogSWYgREVCVUdfU0FWRUFMTCwgYWxsIG9iamVjdHMgaW4gZmluYWxpemVycyBhcmUgYXBwZW5kZWQgdG8gdGhlIG1vZHVsZQogICogZ2FyYmFnZSBsaXN0IChhIFB5dGhvbiBsaXN0KSwgZWxzZSBvbmx5IHRoZSBvYmplY3RzIGluIGZpbmFsaXplcnMgd2l0aApAQCAtNzQ1LDcgKzc1NCw3IEBACiAgKiBUaGUgZmluYWxpemVycyBsaXN0IGlzIG1hZGUgZW1wdHkgb24gYSBzdWNjZXNzZnVsIHJldHVybi4KICAqLwogc3RhdGljIGludAotaGFuZGxlX2ZpbmFsaXplcnMoUHlHQ19IZWFkICpmaW5hbGl6ZXJzLCBQeUdDX0hlYWQgKm9sZCkKK2hhbmRsZV9sZWdhY3lfZmluYWxpemVycyhQeUdDX0hlYWQgKmZpbmFsaXplcnMsIFB5R0NfSGVhZCAqb2xkKQogewogICAgIFB5R0NfSGVhZCAqZ2MgPSBmaW5hbGl6ZXJzLT5nYy5nY19uZXh0OwogCkBAIC03NTcsNyArNzY2LDcgQEAKICAgICBmb3IgKDsgZ2MgIT0gZmluYWxpemVyczsgZ2MgPSBnYy0+Z2MuZ2NfbmV4dCkgewogICAgICAgICBQeU9iamVjdCAqb3AgPSBGUk9NX0dDKGdjKTsKIAotICAgICAgICBpZiAoKGRlYnVnICYgREVCVUdfU0FWRUFMTCkgfHwgaGFzX2ZpbmFsaXplcihvcCkpIHsKKyAgICAgICAgaWYgKChkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpIHx8IGhhc19sZWdhY3lfZmluYWxpemVyKG9wKSkgewogICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoZ2FyYmFnZSwgb3ApIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTc2Nyw2ICs3NzYsNzQgQEAKICAgICByZXR1cm4gMDsKIH0KIAorLyogUnVuIGZpcnN0LXRpbWUgZmluYWxpemVycyAoaWYgYW55KSBvbiBhbGwgdGhlIG9iamVjdHMgaW4gY29sbGVjdGFibGUuCisgKiBOb3RlIHRoYXQgdGhpcyBtYXkgcmVtb3ZlIHNvbWUgKG9yIGV2ZW4gYWxsKSBvZiB0aGUgb2JqZWN0cyBmcm9tIHRoZQorICogbGlzdCwgZHVlIHRvIHJlZmNvdW50cyBmYWxsaW5nIHRvIDAuCisgKi8KK3N0YXRpYyB2b2lkCitmaW5hbGl6ZV9nYXJiYWdlKFB5R0NfSGVhZCAqY29sbGVjdGFibGUpCit7CisgICAgZGVzdHJ1Y3RvciBmaW5hbGl6ZTsKKyAgICBQeUdDX0hlYWQgc2VlbjsKKworICAgIC8qIFdoaWxlIHdlJ3JlIGdvaW5nIHRocm91Z2ggdGhlIGxvb3AsIGBmaW5hbGl6ZShvcClgIG1heSBjYXVzZSBvcCwgb3IKKyAgICAgKiBvdGhlciBvYmplY3RzLCB0byBiZSByZWNsYWltZWQgdmlhIHJlZmNvdW50cyBmYWxsaW5nIHRvIHplcm8uICBTbworICAgICAqIHRoZXJlJ3MgbGl0dGxlIHdlIGNhbiByZWx5IG9uIGFib3V0IHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGlucHV0CisgICAgICogYGNvbGxlY3RhYmxlYCBsaXN0IGFjcm9zcyBpdGVyYXRpb25zLiAgRm9yIHNhZmV0eSwgd2UgYWx3YXlzIHRha2UgdGhlCisgICAgICogZmlyc3Qgb2JqZWN0IGluIHRoYXQgbGlzdCBhbmQgbW92ZSBpdCB0byBhIHRlbXBvcmFyeSBgc2VlbmAgbGlzdC4KKyAgICAgKiBJZiBvYmplY3RzIHZhbmlzaCBmcm9tIHRoZSBgY29sbGVjdGFibGVgIGFuZCBgc2VlbmAgbGlzdHMgd2UgZG9uJ3QKKyAgICAgKiBjYXJlLgorICAgICAqLworICAgIGdjX2xpc3RfaW5pdCgmc2Vlbik7CisKKyAgICB3aGlsZSAoIWdjX2xpc3RfaXNfZW1wdHkoY29sbGVjdGFibGUpKSB7CisgICAgICAgIFB5R0NfSGVhZCAqZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsKKyAgICAgICAgUHlPYmplY3QgKm9wID0gRlJPTV9HQyhnYyk7CisgICAgICAgIGdjX2xpc3RfbW92ZShnYywgJnNlZW4pOworICAgICAgICBpZiAoIV9QeUdDSGVhZF9GSU5BTElaRUQoZ2MpICYmCisgICAgICAgICAgICAgICAgUHlUeXBlX0hhc0ZlYXR1cmUoUHlfVFlQRShvcCksIFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRSkgJiYKKyAgICAgICAgICAgICAgICAoZmluYWxpemUgPSBQeV9UWVBFKG9wKS0+dHBfZmluYWxpemUpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfRklOQUxJWkVEKGdjLCAxKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihvcCk7CisgICAgICAgICAgICBmaW5hbGl6ZShvcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYob3ApOworICAgICAgICB9CisgICAgfQorICAgIGdjX2xpc3RfbWVyZ2UoJnNlZW4sIGNvbGxlY3RhYmxlKTsKK30KKworLyogV2FsayB0aGUgY29sbGVjdGFibGUgbGlzdCBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSByZWFsbHkgdW5yZWFjaGFibGUKKyAgIGZyb20gdGhlIG91dHNpZGUgKHNvbWUgb2JqZWN0cyBjb3VsZCBoYXZlIGJlZW4gcmVzdXJyZWN0ZWQgYnkgYQorICAgZmluYWxpemVyKS4gKi8KK3N0YXRpYyBpbnQKK2NoZWNrX2dhcmJhZ2UoUHlHQ19IZWFkICpjb2xsZWN0YWJsZSkKK3sKKyAgICBQeUdDX0hlYWQgKmdjOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgUHlfUkVGQ05UKEZST01fR0MoZ2MpKSk7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCk7CisgICAgfQorICAgIHN1YnRyYWN0X3JlZnMoY29sbGVjdGFibGUpOworICAgIGZvciAoZ2MgPSBjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dDsgZ2MgIT0gY29sbGVjdGFibGU7CisgICAgICAgICBnYyA9IGdjLT5nYy5nY19uZXh0KSB7CisgICAgICAgIGFzc2VydChfUHlHQ0hlYWRfUkVGUyhnYykgPj0gMCk7CisgICAgICAgIGlmIChfUHlHQ0hlYWRfUkVGUyhnYykgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCityZXZpdmVfZ2FyYmFnZShQeUdDX0hlYWQgKmNvbGxlY3RhYmxlKQoreworICAgIFB5R0NfSGVhZCAqZ2M7CisgICAgZm9yIChnYyA9IGNvbGxlY3RhYmxlLT5nYy5nY19uZXh0OyBnYyAhPSBjb2xsZWN0YWJsZTsKKyAgICAgICAgIGdjID0gZ2MtPmdjLmdjX25leHQpIHsKKyAgICAgICAgX1B5R0NIZWFkX1NFVF9SRUZTKGdjLCBHQ19SRUFDSEFCTEUpOworICAgIH0KK30KKwogLyogQnJlYWsgcmVmZXJlbmNlIGN5Y2xlcyBieSBjbGVhcmluZyB0aGUgY29udGFpbmVycyBpbnZvbHZlZC4gIFRoaXMgaXMKICAqIHRyaWNreSBidXNpbmVzcyBhcyB0aGUgbGlzdHMgY2FuIGJlIGNoYW5naW5nIGFuZCB3ZSBkb24ndCBrbm93IHdoaWNoCiAgKiBvYmplY3RzIG1heSBiZSBmcmVlZC4gIEl0IGlzIHBvc3NpYmxlIEkgc2NyZXdlZCBzb21ldGhpbmcgdXAgaGVyZS4KQEAgLTc4MCw3ICs4NTcsNiBAQAogICAgICAgICBQeUdDX0hlYWQgKmdjID0gY29sbGVjdGFibGUtPmdjLmdjX25leHQ7CiAgICAgICAgIFB5T2JqZWN0ICpvcCA9IEZST01fR0MoZ2MpOwogCi0gICAgICAgIGFzc2VydChJU19URU5UQVRJVkVMWV9VTlJFQUNIQUJMRShvcCkpOwogICAgICAgICBpZiAoZGVidWcgJiBERUJVR19TQVZFQUxMKSB7CiAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKGdhcmJhZ2UsIG9wKTsKICAgICAgICAgfQpAQCAtNzk0LDcgKzg3MCw3IEBACiAgICAgICAgIGlmIChjb2xsZWN0YWJsZS0+Z2MuZ2NfbmV4dCA9PSBnYykgewogICAgICAgICAgICAgLyogb2JqZWN0IGlzIHN0aWxsIGFsaXZlLCBtb3ZlIGl0LCBpdCBtYXkgZGllIGxhdGVyICovCiAgICAgICAgICAgICBnY19saXN0X21vdmUoZ2MsIG9sZCk7Ci0gICAgICAgICAgICBnYy0+Z2MuZ2NfcmVmcyA9IEdDX1JFQUNIQUJMRTsKKyAgICAgICAgICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnYywgR0NfUkVBQ0hBQkxFKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTg0MSw3ICs5MTcsOCBAQAogLyogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbi4gIFJlYWQgdGhpcyB0byB1bmRlcnN0YW5kIGhvdyB0aGUKICAqIGNvbGxlY3Rpb24gcHJvY2VzcyB3b3Jrcy4gKi8KIHN0YXRpYyBQeV9zc2l6ZV90Ci1jb2xsZWN0KGludCBnZW5lcmF0aW9uLCBQeV9zc2l6ZV90ICpuX2NvbGxlY3RlZCwgUHlfc3NpemVfdCAqbl91bmNvbGxlY3RhYmxlKQorY29sbGVjdChpbnQgZ2VuZXJhdGlvbiwgUHlfc3NpemVfdCAqbl9jb2xsZWN0ZWQsIFB5X3NzaXplX3QgKm5fdW5jb2xsZWN0YWJsZSwKKyAgICAgICAgaW50IG5vZmFpbCkKIHsKICAgICBpbnQgaTsKICAgICBQeV9zc2l6ZV90IG0gPSAwOyAvKiAjIG9iamVjdHMgY29sbGVjdGVkICovCkBAIC04NTIsNiArOTI5LDcgQEAKICAgICBQeUdDX0hlYWQgZmluYWxpemVyczsgIC8qIG9iamVjdHMgd2l0aCwgJiByZWFjaGFibGUgZnJvbSwgX19kZWxfXyAqLwogICAgIFB5R0NfSGVhZCAqZ2M7CiAgICAgZG91YmxlIHQxID0gMC4wOworICAgIHN0cnVjdCBnY19nZW5lcmF0aW9uX3N0YXRzICpzdGF0cyA9ICZnZW5lcmF0aW9uX3N0YXRzW2dlbmVyYXRpb25dOwogCiAgICAgaWYgKGRlYnVnICYgREVCVUdfU1RBVFMpIHsKICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoImdjOiBjb2xsZWN0aW5nIGdlbmVyYXRpb24gJWQuLi5cbiIsCkBAIC05MTUsMTkgKzk5MywxNSBAQAogICAgIH0KIAogICAgIC8qIEFsbCBvYmplY3RzIGluIHVucmVhY2hhYmxlIGFyZSB0cmFzaCwgYnV0IG9iamVjdHMgcmVhY2hhYmxlIGZyb20KLSAgICAgKiBmaW5hbGl6ZXJzIGNhbid0IHNhZmVseSBiZSBkZWxldGVkLiAgUHl0aG9uIHByb2dyYW1tZXJzIHNob3VsZCB0YWtlCi0gICAgICogY2FyZSBub3QgdG8gY3JlYXRlIHN1Y2ggdGhpbmdzLiAgRm9yIFB5dGhvbiwgZmluYWxpemVycyBtZWFucwotICAgICAqIGluc3RhbmNlIG9iamVjdHMgd2l0aCBfX2RlbF9fIG1ldGhvZHMuICBXZWFrcmVmcyB3aXRoIGNhbGxiYWNrcwotICAgICAqIGNhbiBhbHNvIGNhbGwgYXJiaXRyYXJ5IFB5dGhvbiBjb2RlIGJ1dCB0aGV5IHdpbGwgYmUgZGVhbHQgd2l0aCBieQotICAgICAqIGhhbmRsZV93ZWFrcmVmcygpLgorICAgICAqIGxlZ2FjeSBmaW5hbGl6ZXJzIChlLmcuIHRwX2RlbCkgY2FuJ3Qgc2FmZWx5IGJlIGRlbGV0ZWQuCiAgICAgICovCiAgICAgZ2NfbGlzdF9pbml0KCZmaW5hbGl6ZXJzKTsKLSAgICBtb3ZlX2ZpbmFsaXplcnMoJnVucmVhY2hhYmxlLCAmZmluYWxpemVycyk7Ci0gICAgLyogZmluYWxpemVycyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cyB3aXRoIGEgZmluYWxpemVyOworICAgIG1vdmVfbGVnYWN5X2ZpbmFsaXplcnMoJnVucmVhY2hhYmxlLCAmZmluYWxpemVycyk7CisgICAgLyogZmluYWxpemVycyBjb250YWlucyB0aGUgdW5yZWFjaGFibGUgb2JqZWN0cyB3aXRoIGEgbGVnYWN5IGZpbmFsaXplcjsKICAgICAgKiB1bnJlYWNoYWJsZSBvYmplY3RzIHJlYWNoYWJsZSAqZnJvbSogdGhvc2UgYXJlIGFsc28gdW5jb2xsZWN0YWJsZSwKICAgICAgKiBhbmQgd2UgbW92ZSB0aG9zZSBpbnRvIHRoZSBmaW5hbGl6ZXJzIGxpc3QgdG9vLgogICAgICAqLwotICAgIG1vdmVfZmluYWxpemVyX3JlYWNoYWJsZSgmZmluYWxpemVycyk7CisgICAgbW92ZV9sZWdhY3lfZmluYWxpemVyX3JlYWNoYWJsZSgmZmluYWxpemVycyk7CiAKICAgICAvKiBDb2xsZWN0IHN0YXRpc3RpY3Mgb24gY29sbGVjdGFibGUgb2JqZWN0cyBmb3VuZCBhbmQgcHJpbnQKICAgICAgKiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24uCkBAIC05NDMsMTEgKzEwMTcsMjAgQEAKICAgICAvKiBDbGVhciB3ZWFrcmVmcyBhbmQgaW52b2tlIGNhbGxiYWNrcyBhcyBuZWNlc3NhcnkuICovCiAgICAgbSArPSBoYW5kbGVfd2Vha3JlZnMoJnVucmVhY2hhYmxlLCBvbGQpOwogCi0gICAgLyogQ2FsbCB0cF9jbGVhciBvbiBvYmplY3RzIGluIHRoZSB1bnJlYWNoYWJsZSBzZXQuICBUaGlzIHdpbGwgY2F1c2UKLSAgICAgKiB0aGUgcmVmZXJlbmNlIGN5Y2xlcyB0byBiZSBicm9rZW4uICBJdCBtYXkgYWxzbyBjYXVzZSBzb21lIG9iamVjdHMKLSAgICAgKiBpbiBmaW5hbGl6ZXJzIHRvIGJlIGZyZWVkLgotICAgICAqLwotICAgIGRlbGV0ZV9nYXJiYWdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsKKyAgICAvKiBDYWxsIHRwX2ZpbmFsaXplIG9uIG9iamVjdHMgd2hpY2ggaGF2ZSBvbmUuICovCisgICAgZmluYWxpemVfZ2FyYmFnZSgmdW5yZWFjaGFibGUpOworCisgICAgaWYgKGNoZWNrX2dhcmJhZ2UoJnVucmVhY2hhYmxlKSkgeworICAgICAgICByZXZpdmVfZ2FyYmFnZSgmdW5yZWFjaGFibGUpOworICAgICAgICBnY19saXN0X21lcmdlKCZ1bnJlYWNoYWJsZSwgb2xkKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIENhbGwgdHBfY2xlYXIgb24gb2JqZWN0cyBpbiB0aGUgdW5yZWFjaGFibGUgc2V0LiAgVGhpcyB3aWxsIGNhdXNlCisgICAgICAgICAqIHRoZSByZWZlcmVuY2UgY3ljbGVzIHRvIGJlIGJyb2tlbi4gIEl0IG1heSBhbHNvIGNhdXNlIHNvbWUgb2JqZWN0cworICAgICAgICAgKiBpbiBmaW5hbGl6ZXJzIHRvIGJlIGZyZWVkLgorICAgICAgICAgKi8KKyAgICAgICAgZGVsZXRlX2dhcmJhZ2UoJnVucmVhY2hhYmxlLCBvbGQpOworICAgIH0KIAogICAgIC8qIENvbGxlY3Qgc3RhdGlzdGljcyBvbiB1bmNvbGxlY3RhYmxlIG9iamVjdHMgZm91bmQgYW5kIHByaW50CiAgICAgICogZGVidWdnaW5nIGluZm9ybWF0aW9uLiAqLwpAQCAtOTc4LDcgKzEwNjEsNyBAQAogICAgICAqIHJlYWNoYWJsZSBsaXN0IG9mIGdhcmJhZ2UuICBUaGUgcHJvZ3JhbW1lciBoYXMgdG8gZGVhbCB3aXRoCiAgICAgICogdGhpcyBpZiB0aGV5IGluc2lzdCBvbiBjcmVhdGluZyB0aGlzIHR5cGUgb2Ygc3RydWN0dXJlLgogICAgICAqLwotICAgICh2b2lkKWhhbmRsZV9maW5hbGl6ZXJzKCZmaW5hbGl6ZXJzLCBvbGQpOworICAgICh2b2lkKWhhbmRsZV9sZWdhY3lfZmluYWxpemVycygmZmluYWxpemVycywgb2xkKTsKIAogICAgIC8qIENsZWFyIGZyZWUgbGlzdCBvbmx5IGR1cmluZyB0aGUgY29sbGVjdGlvbiBvZiB0aGUgaGlnaGVzdAogICAgICAqIGdlbmVyYXRpb24gKi8KQEAgLTk4NywxNiArMTA3MCwyNSBAQAogICAgIH0KIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgIGlmIChnY19zdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIGdjX3N0ciA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJnYXJiYWdlIGNvbGxlY3Rpb24iKTsKLSAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKGdjX3N0cik7Ci0gICAgICAgIFB5X0ZhdGFsRXJyb3IoInVuZXhwZWN0ZWQgZXhjZXB0aW9uIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgaWYgKG5vZmFpbCkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChnY19zdHIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnY19zdHIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiZ2FyYmFnZSBjb2xsZWN0aW9uIik7CisgICAgICAgICAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoZ2Nfc3RyKTsKKyAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInVuZXhwZWN0ZWQgZXhjZXB0aW9uIGR1cmluZyBnYXJiYWdlIGNvbGxlY3Rpb24iKTsKKyAgICAgICAgfQogICAgIH0KIAorICAgIC8qIFVwZGF0ZSBzdGF0cyAqLwogICAgIGlmIChuX2NvbGxlY3RlZCkKICAgICAgICAgKm5fY29sbGVjdGVkID0gbTsKICAgICBpZiAobl91bmNvbGxlY3RhYmxlKQogICAgICAgICAqbl91bmNvbGxlY3RhYmxlID0gbjsKKyAgICBzdGF0cy0+Y29sbGVjdGlvbnMrKzsKKyAgICBzdGF0cy0+Y29sbGVjdGVkICs9IG07CisgICAgc3RhdHMtPnVuY29sbGVjdGFibGUgKz0gbjsKICAgICByZXR1cm4gbittOwogfQogCkBAIC0xMDQ1LDcgKzExMzcsNyBAQAogewogICAgIFB5X3NzaXplX3QgcmVzdWx0LCBjb2xsZWN0ZWQsIHVuY29sbGVjdGFibGU7CiAgICAgaW52b2tlX2djX2NhbGxiYWNrKCJzdGFydCIsIGdlbmVyYXRpb24sIDAsIDApOwotICAgIHJlc3VsdCA9IGNvbGxlY3QoZ2VuZXJhdGlvbiwgJmNvbGxlY3RlZCwgJnVuY29sbGVjdGFibGUpOworICAgIHJlc3VsdCA9IGNvbGxlY3QoZ2VuZXJhdGlvbiwgJmNvbGxlY3RlZCwgJnVuY29sbGVjdGFibGUsIDApOwogICAgIGludm9rZV9nY19jYWxsYmFjaygic3RvcCIsIGdlbmVyYXRpb24sIGNvbGxlY3RlZCwgdW5jb2xsZWN0YWJsZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEzNDMsNiArMTQzNSw1MiBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK1B5RG9jX1NUUlZBUihnY19nZXRfc3RhdHNfX2RvY19fLAorImdldF9zdGF0cygpIC0+IFsuLi5dXG4iCisiXG4iCisiUmV0dXJuIGEgbGlzdCBvZiBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBwZXItZ2VuZXJhdGlvbiBzdGF0aXN0aWNzLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitnY19nZXRfc3RhdHMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCit7CisgICAgaW50IGk7CisgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBzdHJ1Y3QgZ2NfZ2VuZXJhdGlvbl9zdGF0cyBzdGF0c1tOVU1fR0VORVJBVElPTlNdLCAqc3Q7CisKKyAgICAvKiBUbyBnZXQgY29uc2lzdGVudCB2YWx1ZXMgZGVzcGl0ZSBhbGxvY2F0aW9ucyB3aGlsZSBjb25zdHJ1Y3RpbmcKKyAgICAgICB0aGUgcmVzdWx0IGxpc3QsIHdlIHVzZSBhIHNuYXBzaG90IG9mIHRoZSBydW5uaW5nIHN0YXRzLiAqLworICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fR0VORVJBVElPTlM7IGkrKykgeworICAgICAgICBzdGF0c1tpXSA9IGdlbmVyYXRpb25fc3RhdHNbaV07CisgICAgfQorCisgICAgcmVzdWx0ID0gUHlMaXN0X05ldygwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9HRU5FUkFUSU9OUzsgaSsrKSB7CisgICAgICAgIFB5T2JqZWN0ICpkaWN0OworICAgICAgICBzdCA9ICZzdGF0c1tpXTsKKyAgICAgICAgZGljdCA9IFB5X0J1aWxkVmFsdWUoIntzbnNuc259IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbGxlY3Rpb25zIiwgc3QtPmNvbGxlY3Rpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29sbGVjdGVkIiwgc3QtPmNvbGxlY3RlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuY29sbGVjdGFibGUiLCBzdC0+dW5jb2xsZWN0YWJsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgIGlmIChkaWN0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChyZXN1bHQsIGRpY3QpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGljdCk7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihkaWN0KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiBOVUxMOworfQorCisKIFB5RG9jX1NUUlZBUihnY19pc190cmFja2VkX19kb2NfXywKICJpc190cmFja2VkKG9iaikgLT4gYm9vbFxuIgogIlxuIgpAQCAtMTM3Miw2ICsxNTEwLDcgQEAKICJpc2VuYWJsZWQoKSAtLSBSZXR1cm5zIHRydWUgaWYgYXV0b21hdGljIGNvbGxlY3Rpb24gaXMgZW5hYmxlZC5cbiIKICJjb2xsZWN0KCkgLS0gRG8gYSBmdWxsIGNvbGxlY3Rpb24gcmlnaHQgbm93LlxuIgogImdldF9jb3VudCgpIC0tIFJldHVybiB0aGUgY3VycmVudCBjb2xsZWN0aW9uIGNvdW50cy5cbiIKKyJnZXRfc3RhdHMoKSAtLSBSZXR1cm4gbGlzdCBvZiBkaWN0aW9uYXJpZXMgY29udGFpbmluZyBwZXItZ2VuZXJhdGlvbiBzdGF0cy5cbiIKICJzZXRfZGVidWcoKSAtLSBTZXQgZGVidWdnaW5nIGZsYWdzLlxuIgogImdldF9kZWJ1ZygpIC0tIEdldCBkZWJ1Z2dpbmcgZmxhZ3MuXG4iCiAic2V0X3RocmVzaG9sZCgpIC0tIFNldCB0aGUgY29sbGVjdGlvbiB0aHJlc2hvbGRzLlxuIgpAQCAtMTM5Myw2ICsxNTMyLDcgQEAKICAgICB7ImNvbGxlY3QiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilnY19jb2xsZWN0LAogICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgICAgICAgZ2NfY29sbGVjdF9fZG9jX199LAogICAgIHsiZ2V0X29iamVjdHMiLCAgICBnY19nZXRfb2JqZWN0cyxNRVRIX05PQVJHUywgIGdjX2dldF9vYmplY3RzX19kb2NfX30sCisgICAgeyJnZXRfc3RhdHMiLCAgICAgIGdjX2dldF9zdGF0cywgTUVUSF9OT0FSR1MsIGdjX2dldF9zdGF0c19fZG9jX199LAogICAgIHsiaXNfdHJhY2tlZCIsICAgICBnY19pc190cmFja2VkLCBNRVRIX08sICAgICAgIGdjX2lzX3RyYWNrZWRfX2RvY19ffSwKICAgICB7ImdldF9yZWZlcnJlcnMiLCAgZ2NfZ2V0X3JlZmVycmVycywgTUVUSF9WQVJBUkdTLAogICAgICAgICBnY19nZXRfcmVmZXJyZXJzX19kb2NfX30sCkBAIC0xNDgwLDggKzE2MjAsMjkgQEAKICAgICByZXR1cm4gbjsKIH0KIAorUHlfc3NpemVfdAorX1B5R0NfQ29sbGVjdE5vRmFpbCh2b2lkKQoreworICAgIFB5X3NzaXplX3QgbjsKKworICAgIC8qIElkZWFsbHksIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWQgb24gaW50ZXJwcmV0ZXIgc2h1dGRvd24sCisgICAgICAgYW5kIHRoZXJlZm9yZSBub3QgcmVjdXJzaXZlbHkuICBVbmZvcnR1bmF0ZWx5LCB3aGVuIHRoZXJlIGFyZSBkYWVtb24KKyAgICAgICB0aHJlYWRzLCBhIGRhZW1vbiB0aHJlYWQgY2FuIHN0YXJ0IGEgY3ljbGljIGdhcmJhZ2UgY29sbGVjdGlvbgorICAgICAgIGR1cmluZyBpbnRlcnByZXRlciBzaHV0ZG93biAoYW5kIHRoZW4gbmV2ZXIgZmluaXNoIGl0KS4KKyAgICAgICBTZWUgaHR0cDovL2J1Z3MucHl0aG9uLm9yZy9pc3N1ZTg3MTMjbXNnMTk1MTc4IGZvciBhbiBleGFtcGxlLgorICAgICAgICovCisgICAgaWYgKGNvbGxlY3RpbmcpCisgICAgICAgIG4gPSAwOworICAgIGVsc2UgeworICAgICAgICBjb2xsZWN0aW5nID0gMTsKKyAgICAgICAgbiA9IGNvbGxlY3QoTlVNX0dFTkVSQVRJT05TIC0gMSwgTlVMTCwgTlVMTCwgMSk7CisgICAgICAgIGNvbGxlY3RpbmcgPSAwOworICAgIH0KKyAgICByZXR1cm4gbjsKK30KKwogdm9pZAotX1B5R0NfRmluaSh2b2lkKQorX1B5R0NfRHVtcFNodXRkb3duU3RhdHModm9pZCkKIHsKICAgICBpZiAoIShkZWJ1ZyAmIERFQlVHX1NBVkVBTEwpCiAgICAgICAgICYmIGdhcmJhZ2UgIT0gTlVMTCAmJiBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkgPiAwKSB7CkBAIC0xNDkyLDggKzE2NTMsMTIgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbWVzc2FnZSA9ICJnYzogJXpkIHVuY29sbGVjdGFibGUgb2JqZWN0cyBhdCAiIFwKICAgICAgICAgICAgICAgICAic2h1dGRvd247IHVzZSBnYy5zZXRfZGVidWcoZ2MuREVCVUdfVU5DT0xMRUNUQUJMRSkgdG8gbGlzdCB0aGVtIjsKLSAgICAgICAgaWYgKFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfUmVzb3VyY2VXYXJuaW5nLCAwLCBtZXNzYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkpIDwgMCkKKyAgICAgICAgLyogUHlFcnJfV2FybkZvcm1hdCBkb2VzIHRvbyBtYW55IHRoaW5ncyBhbmQgd2UgYXJlIGF0IHNodXRkb3duLAorICAgICAgICAgICB0aGUgd2FybmluZ3MgbW9kdWxlJ3MgZGVwZW5kZW5jaWVzIChlLmcuIGxpbmVjYWNoZSkgbWF5IGJlIGdvbmUKKyAgICAgICAgICAgYWxyZWFkeS4gKi8KKyAgICAgICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdEZvcm1hdChQeUV4Y19SZXNvdXJjZVdhcm5pbmcsICJnYyIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdjIiwgTlVMTCwgbWVzc2FnZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxpc3RfR0VUX1NJWkUoZ2FyYmFnZSkpKQogICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOwogICAgICAgICBpZiAoZGVidWcgJiBERUJVR19VTkNPTExFQ1RBQkxFKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqcmVwciA9IE5VTEwsICpieXRlcyA9IE5VTEw7CkBAIC0xNTAyLDcgKzE2NjcsNyBAQAogICAgICAgICAgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShnYXJiYWdlKTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKAotICAgICAgICAgICAgICAgICAgICAiICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAiICAgICAgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKQogICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgfQpAQCAtMTUxMCw3ICsxNjc1LDEzIEBACiAgICAgICAgICAgICBQeV9YREVDUkVGKGJ5dGVzKTsKICAgICAgICAgfQogICAgIH0KK30KKwordm9pZAorX1B5R0NfRmluaSh2b2lkKQorewogICAgIFB5X0NMRUFSKGNhbGxiYWNrcyk7CisgICAgUHlfQ0xFQVIodG1vZCk7CiB9CiAKIC8qIGZvciBkZWJ1Z2dpbmcgKi8KQEAgLTE1NTUsNyArMTcyNiw4IEBACiAgICAgICAgIHNpemVvZihQeUdDX0hlYWQpICsgYmFzaWNzaXplKTsKICAgICBpZiAoZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLSAgICBnLT5nYy5nY19yZWZzID0gR0NfVU5UUkFDS0VEOworICAgIGctPmdjLmdjX3JlZnMgPSAwOworICAgIF9QeUdDSGVhZF9TRVRfUkVGUyhnLCBHQ19VTlRSQUNLRUQpOwogICAgIGdlbmVyYXRpb25zWzBdLmNvdW50Kys7IC8qIG51bWJlciBvZiBhbGxvY2F0ZWQgR0Mgb2JqZWN0cyAqLwogICAgIGlmIChnZW5lcmF0aW9uc1swXS5jb3VudCA+IGdlbmVyYXRpb25zWzBdLnRocmVzaG9sZCAmJgogICAgICAgICBlbmFibGVkICYmCkBAIC0xNTgyLDggKzE3NTQsMTUgQEAKIFB5VmFyT2JqZWN0ICoKIF9QeU9iamVjdF9HQ19OZXdWYXIoUHlUeXBlT2JqZWN0ICp0cCwgUHlfc3NpemVfdCBuaXRlbXMpCiB7Ci0gICAgY29uc3Qgc2l6ZV90IHNpemUgPSBfUHlPYmplY3RfVkFSX1NJWkUodHAsIG5pdGVtcyk7Ci0gICAgUHlWYXJPYmplY3QgKm9wID0gKFB5VmFyT2JqZWN0ICopIF9QeU9iamVjdF9HQ19NYWxsb2Moc2l6ZSk7CisgICAgc2l6ZV90IHNpemU7CisgICAgUHlWYXJPYmplY3QgKm9wOworCisgICAgaWYgKG5pdGVtcyA8IDApIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzaXplID0gX1B5T2JqZWN0X1ZBUl9TSVpFKHRwLCBuaXRlbXMpOworICAgIG9wID0gKFB5VmFyT2JqZWN0ICopIF9QeU9iamVjdF9HQ19NYWxsb2Moc2l6ZSk7CiAgICAgaWYgKG9wICE9IE5VTEwpCiAgICAgICAgIG9wID0gUHlPYmplY3RfSU5JVF9WQVIob3AsIHRwLCBuaXRlbXMpOwogICAgIHJldHVybiBvcDsKZGlmZiAtLWdpdCBhL01vZHVsZXMvZ2V0cGF0aC5jIGIvTW9kdWxlcy9nZXRwYXRoLmMKaW5kZXggZmYxNGZkZC4uMTNlMzgxNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9nZXRwYXRoLmMKKysrIGIvTW9kdWxlcy9nZXRwYXRoLmMKQEAgLTExMCwxMSArMTEwLDcgQEAKICNlbmRpZgogCiAjaWZuZGVmIFBSRUZJWAotIyAgaWZkZWYgX19WTVMKLSMgICAgZGVmaW5lIFBSRUZJWCAiIgotIyAgZWxzZQotIyAgICBkZWZpbmUgUFJFRklYICIvdXNyL2xvY2FsIgotIyAgZW5kaWYKKyMgIGRlZmluZSBQUkVGSVggIi91c3IvbG9jYWwiCiAjZW5kaWYKIAogI2lmbmRlZiBFWEVDX1BSRUZJWApAQCAtMTM0LDggKzEzMCw2IEBACiBzdGF0aWMgd2NoYXJfdCBleGVjX3ByZWZpeFtNQVhQQVRITEVOKzFdOwogc3RhdGljIHdjaGFyX3QgcHJvZ3BhdGhbTUFYUEFUSExFTisxXTsKIHN0YXRpYyB3Y2hhcl90ICptb2R1bGVfc2VhcmNoX3BhdGggPSBOVUxMOwotc3RhdGljIGludCBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAwOwotc3RhdGljIHdjaGFyX3QgKmxpYl9weXRob24gPSBMImxpYi9weXRob24iIFZFUlNJT047CiAKIHN0YXRpYyB2b2lkCiByZWR1Y2Uod2NoYXJfdCAqZGlyKQpAQCAtMzE3LDcgKzMxMSw4IEBACiAgICBieXRlcyBsb25nLgogKi8KIHN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsIHdjaGFyX3QgKl9wcmVmaXgpCitzZWFyY2hfZm9yX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfcHJlZml4LAorICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqbGliX3B5dGhvbikKIHsKICAgICBzaXplX3QgbjsKICAgICB3Y2hhcl90ICp2cGF0aDsKQEAgLTM0Niw3ICszNDEsNyBAQAogICAgICAgICAgICAgd2NzbmNweShwcmVmaXgsIGFyZ3YwX3BhdGgsIE1BWFBBVEhMRU4pOwogICAgICAgICAgICAgcHJlZml4W01BWFBBVEhMRU5dID0gTCdcMCc7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIHZwYXRoKTsKLSAgICAgICAgICAgIFB5TWVtX0ZyZWUodnBhdGgpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh2cGF0aCk7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIEwiTGliIik7CiAgICAgICAgICAgICBqb2lucGF0aChwcmVmaXgsIExBTkRNQVJLKTsKICAgICAgICAgICAgIGlmIChpc21vZHVsZShwcmVmaXgpKQpAQCAtMzgzLDcgKzM3OCw4IEBACiAgICBNQVhQQVRITEVOIGJ5dGVzIGxvbmcuCiAqLwogc3RhdGljIGludAotc2VhcmNoX2Zvcl9leGVjX3ByZWZpeCh3Y2hhcl90ICphcmd2MF9wYXRoLCB3Y2hhcl90ICpob21lLCB3Y2hhcl90ICpfZXhlY19wcmVmaXgpCitzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KHdjaGFyX3QgKmFyZ3YwX3BhdGgsIHdjaGFyX3QgKmhvbWUsCisgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKl9leGVjX3ByZWZpeCwgd2NoYXJfdCAqbGliX3B5dGhvbikKIHsKICAgICBzaXplX3QgbjsKIApAQCAtNDkzLDEyICs0ODksMTQgQEAKICAgICBjaGFyIGV4ZWNwYXRoW01BWFBBVEhMRU4rMV07CiAjZW5kaWYKICAgICB3Y2hhcl90ICpfcHl0aG9ucGF0aCwgKl9wcmVmaXgsICpfZXhlY19wcmVmaXg7CisgICAgd2NoYXJfdCAqbGliX3B5dGhvbjsKIAogICAgIF9weXRob25wYXRoID0gX1B5X2NoYXIyd2NoYXIoUFlUSE9OUEFUSCwgTlVMTCk7CiAgICAgX3ByZWZpeCA9IF9QeV9jaGFyMndjaGFyKFBSRUZJWCwgTlVMTCk7CiAgICAgX2V4ZWNfcHJlZml4ID0gX1B5X2NoYXIyd2NoYXIoRVhFQ19QUkVGSVgsIE5VTEwpOworICAgIGxpYl9weXRob24gPSBfUHlfY2hhcjJ3Y2hhcigibGliL3B5dGhvbiIgVkVSU0lPTiwgTlVMTCk7CiAKLSAgICBpZiAoIV9weXRob25wYXRoIHx8ICFfcHJlZml4IHx8ICFfZXhlY19wcmVmaXgpIHsKKyAgICBpZiAoIV9weXRob25wYXRoIHx8ICFfcHJlZml4IHx8ICFfZXhlY19wcmVmaXggfHwgIWxpYl9weXRob24pIHsKICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICJVbmFibGUgdG8gZGVjb2RlIHBhdGggdmFyaWFibGVzIGluIGdldHBhdGguYzogIgogICAgICAgICAgICAgIm1lbW9yeSBlcnJvciIpOwpAQCAtNTYyLDggKzU2MCw3IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotICAgIGlmIChwYXRoX2J1ZmZlciAhPSBOVUxMKQotICAgICAgICBQeU1lbV9GcmVlKHBhdGhfYnVmZmVyKTsKKyAgICBQeU1lbV9SYXdGcmVlKHBhdGhfYnVmZmVyKTsKICAgICBpZiAocHJvZ3BhdGhbMF0gIT0gU0VQICYmIHByb2dwYXRoWzBdICE9ICdcMCcpCiAgICAgICAgIGFic29sdXRpemUocHJvZ3BhdGgpOwogICAgIHdjc25jcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgsIE1BWFBBVEhMRU4pOwpAQCAtNjA1LDcgKzYwMiw3IEBACiAgICAgICAgICAgICAvKiBVc2UgdGhlIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5IGFzIHRoZSBwcm9ncGF0aCAqLwogICAgICAgICAgICAgd2NzbmNweShhcmd2MF9wYXRoLCB3YnVmLCBNQVhQQVRITEVOKTsKICAgICAgICAgfQotICAgICAgICBQeU1lbV9GcmVlKHdidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgIH0KICNlbmRpZgogCkBAIC02NjcsNyArNjY0LDggQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICghKHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9wcmVmaXgpKSkgeworICAgIHBmb3VuZCA9IHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9wcmVmaXgsIGxpYl9weXRob24pOworICAgIGlmICghcGZvdW5kKSB7CiAgICAgICAgIGlmICghUHlfRnJvemVuRmxhZykKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZmluZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBsaWJyYXJpZXMgPHByZWZpeD5cbiIpOwpAQCAtNjkwLDcgKzY4OCw5IEBACiAgICAgemlwX3BhdGhbYnVmc3ogLSA2XSA9IFZFUlNJT05bMF07CiAgICAgemlwX3BhdGhbYnVmc3ogLSA1XSA9IFZFUlNJT05bMl07CiAKLSAgICBpZiAoIShlZm91bmQgPSBzZWFyY2hfZm9yX2V4ZWNfcHJlZml4KGFyZ3YwX3BhdGgsIGhvbWUsIF9leGVjX3ByZWZpeCkpKSB7CisgICAgZWZvdW5kID0gc2VhcmNoX2Zvcl9leGVjX3ByZWZpeChhcmd2MF9wYXRoLCBob21lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2V4ZWNfcHJlZml4LCBsaWJfcHl0aG9uKTsKKyAgICBpZiAoIWVmb3VuZCkgewogICAgICAgICBpZiAoIVB5X0Zyb3plbkZsYWcpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGZpbmQgcGxhdGZvcm0gZGVwZW5kZW50IGxpYnJhcmllcyA8ZXhlY19wcmVmaXg+XG4iKTsKQEAgLTcwNywxMyArNzA3LDExIEBACiAgICAgICovCiAgICAgYnVmc3ogPSAwOwogCi0gICAgaWYgKF9ydHB5cGF0aCkgeworICAgIGlmIChfcnRweXBhdGggJiYgX3J0cHlwYXRoWzBdICE9ICdcMCcpIHsKICAgICAgICAgc2l6ZV90IHJ0cHlwYXRoX2xlbjsKICAgICAgICAgcnRweXBhdGggPSBfUHlfY2hhcjJ3Y2hhcihfcnRweXBhdGgsICZydHB5cGF0aF9sZW4pOwogICAgICAgICBpZiAocnRweXBhdGggIT0gTlVMTCkKICAgICAgICAgICAgIGJ1ZnN6ICs9IHJ0cHlwYXRoX2xlbiArIDE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIF9ydHB5cGF0aCA9IE5VTEw7CiAgICAgfQogCiAgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOwpAQCAtNzM3LDYwICs3MzUsNTUgQEAKICAgICBidWZzeiArPSB3Y3NsZW4oemlwX3BhdGgpICsgMTsKICAgICBidWZzeiArPSB3Y3NsZW4oZXhlY19wcmVmaXgpICsgMTsKIAotICAgIGJ1ZiA9ICh3Y2hhcl90ICopUHlNZW1fTWFsbG9jKGJ1ZnN6KnNpemVvZih3Y2hhcl90KSk7Ci0KKyAgICBidWYgPSBQeU1lbV9OZXcod2NoYXJfdCwgYnVmc3opOwogICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZHluYW1pYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZGVmYXVsdCBzdGF0aWMgUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBMIiIgUFlUSE9OUEFUSDsKKyAgICAgICAgUHlfRmF0YWxFcnJvcigKKyAgICAgICAgICAgICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgZHluYW1pYyBQWVRIT05QQVRIIik7CiAgICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBSdW4tdGltZSB2YWx1ZSBvZiAkUFlUSE9OUEFUSCBnb2VzIGZpcnN0ICovCi0gICAgICAgIGlmIChydHB5cGF0aCkgewotICAgICAgICAgICAgd2NzY3B5KGJ1ZiwgcnRweXBhdGgpOwotICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgZGVsaW1pdGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWZbMF0gPSAnXDAnOwogCi0gICAgICAgIC8qIE5leHQgaXMgdGhlIGRlZmF1bHQgemlwIHBhdGggKi8KLSAgICAgICAgd2NzY2F0KGJ1ZiwgemlwX3BhdGgpOworICAgIC8qIFJ1bi10aW1lIHZhbHVlIG9mICRQWVRIT05QQVRIIGdvZXMgZmlyc3QgKi8KKyAgICBpZiAocnRweXBhdGgpIHsKKyAgICAgICAgd2NzY3B5KGJ1ZiwgcnRweXBhdGgpOwogICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotCi0gICAgICAgIC8qIE5leHQgZ29lcyBtZXJnZSBvZiBjb21waWxlLXRpbWUgJFBZVEhPTlBBVEggd2l0aAotICAgICAgICAgKiBkeW5hbWljYWxseSBsb2NhdGVkIHByZWZpeC4KLSAgICAgICAgICovCi0gICAgICAgIGRlZnBhdGggPSBfcHl0aG9ucGF0aDsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIHdjaGFyX3QgKmRlbGltID0gd2NzY2hyKGRlZnBhdGgsIERFTElNKTsKLQotICAgICAgICAgICAgaWYgKGRlZnBhdGhbMF0gIT0gU0VQKSB7Ci0gICAgICAgICAgICAgICAgd2NzY2F0KGJ1ZiwgcHJlZml4KTsKLSAgICAgICAgICAgICAgICB3Y3NjYXQoYnVmLCBzZXBhcmF0b3IpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gZGVsaW0gLSBkZWZwYXRoICsgMTsKLSAgICAgICAgICAgICAgICBzaXplX3QgZW5kID0gd2NzbGVuKGJ1ZikgKyBsZW47Ci0gICAgICAgICAgICAgICAgd2NzbmNhdChidWYsIGRlZnBhdGgsIGxlbik7Ci0gICAgICAgICAgICAgICAgKihidWYgKyBlbmQpID0gJ1wwJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHdjc2NhdChidWYsIGRlZnBhdGgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZGVmcGF0aCA9IGRlbGltICsgMTsKLSAgICAgICAgfQotICAgICAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOwotCi0gICAgICAgIC8qIEZpbmFsbHksIG9uIGdvZXMgdGhlIGRpcmVjdG9yeSBmb3IgZHluYW1pYy1sb2FkIG1vZHVsZXMgKi8KLSAgICAgICAgd2NzY2F0KGJ1ZiwgZXhlY19wcmVmaXgpOwotCi0gICAgICAgIC8qIEFuZCBwdWJsaXNoIHRoZSByZXN1bHRzICovCi0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZjsKLSAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkID0gMTsKICAgICB9CisgICAgZWxzZQorICAgICAgICBidWZbMF0gPSAnXDAnOworCisgICAgLyogTmV4dCBpcyB0aGUgZGVmYXVsdCB6aXAgcGF0aCAqLworICAgIHdjc2NhdChidWYsIHppcF9wYXRoKTsKKyAgICB3Y3NjYXQoYnVmLCBkZWxpbWl0ZXIpOworCisgICAgLyogTmV4dCBnb2VzIG1lcmdlIG9mIGNvbXBpbGUtdGltZSAkUFlUSE9OUEFUSCB3aXRoCisgICAgICogZHluYW1pY2FsbHkgbG9jYXRlZCBwcmVmaXguCisgICAgICovCisgICAgZGVmcGF0aCA9IF9weXRob25wYXRoOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIHdjaGFyX3QgKmRlbGltID0gd2NzY2hyKGRlZnBhdGgsIERFTElNKTsKKworICAgICAgICBpZiAoZGVmcGF0aFswXSAhPSBTRVApIHsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIHByZWZpeCk7CisgICAgICAgICAgICB3Y3NjYXQoYnVmLCBzZXBhcmF0b3IpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGRlbGltKSB7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gZGVsaW0gLSBkZWZwYXRoICsgMTsKKyAgICAgICAgICAgIHNpemVfdCBlbmQgPSB3Y3NsZW4oYnVmKSArIGxlbjsKKyAgICAgICAgICAgIHdjc25jYXQoYnVmLCBkZWZwYXRoLCBsZW4pOworICAgICAgICAgICAgKihidWYgKyBlbmQpID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHdjc2NhdChidWYsIGRlZnBhdGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGVmcGF0aCA9IGRlbGltICsgMTsKKyAgICB9CisgICAgd2NzY2F0KGJ1ZiwgZGVsaW1pdGVyKTsKKworICAgIC8qIEZpbmFsbHksIG9uIGdvZXMgdGhlIGRpcmVjdG9yeSBmb3IgZHluYW1pYy1sb2FkIG1vZHVsZXMgKi8KKyAgICB3Y3NjYXQoYnVmLCBleGVjX3ByZWZpeCk7CisKKyAgICAvKiBBbmQgcHVibGlzaCB0aGUgcmVzdWx0cyAqLworICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IGJ1ZjsKIAogICAgIC8qIFJlZHVjZSBwcmVmaXggYW5kIGV4ZWNfcHJlZml4IHRvIHRoZWlyIGVzc2VuY2UsCiAgICAgICogZS5nLiAvdXNyL2xvY2FsL2xpYi9weXRob24xLjUgaXMgcmVkdWNlZCB0byAvdXNyL2xvY2FsLgpAQCAtODE4LDExICs4MTEsMTEgQEAKICAgICBlbHNlCiAgICAgICAgIHdjc25jcHkoZXhlY19wcmVmaXgsIF9leGVjX3ByZWZpeCwgTUFYUEFUSExFTik7CiAKLSAgICBQeU1lbV9GcmVlKF9weXRob25wYXRoKTsKLSAgICBQeU1lbV9GcmVlKF9wcmVmaXgpOwotICAgIFB5TWVtX0ZyZWUoX2V4ZWNfcHJlZml4KTsKLSAgICBpZiAocnRweXBhdGggIT0gTlVMTCkKLSAgICAgICAgUHlNZW1fRnJlZShydHB5cGF0aCk7CisgICAgUHlNZW1fUmF3RnJlZShfcHl0aG9ucGF0aCk7CisgICAgUHlNZW1fUmF3RnJlZShfcHJlZml4KTsKKyAgICBQeU1lbV9SYXdGcmVlKF9leGVjX3ByZWZpeCk7CisgICAgUHlNZW1fUmF3RnJlZShsaWJfcHl0aG9uKTsKKyAgICBQeU1lbV9SYXdGcmVlKHJ0cHlwYXRoKTsKIH0KIAogCkBAIC04MzEsMTggKzgyNCwxNSBAQAogUHlfU2V0UGF0aChjb25zdCB3Y2hhcl90ICpwYXRoKQogewogICAgIGlmIChtb2R1bGVfc2VhcmNoX3BhdGggIT0gTlVMTCkgewotICAgICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoX21hbGxvY2VkKQotICAgICAgICAgICAgUHlNZW1fRnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CiAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aF9tYWxsb2NlZCA9IDA7CiAgICAgfQogICAgIGlmIChwYXRoICE9IE5VTEwpIHsKICAgICAgICAgZXh0ZXJuIHdjaGFyX3QgKlB5X0dldFByb2dyYW1OYW1lKHZvaWQpOwogICAgICAgICB3Y2hhcl90ICpwcm9nID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKICAgICAgICAgd2NzbmNweShwcm9ncGF0aCwgcHJvZywgTUFYUEFUSExFTik7CiAgICAgICAgIGV4ZWNfcHJlZml4WzBdID0gcHJlZml4WzBdID0gTCdcMCc7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFB5TWVtX01hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwotICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGhfbWFsbG9jZWQgPSAxOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbihwYXRoKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKQogICAgICAgICAgICAgd2NzY3B5KG1vZHVsZV9zZWFyY2hfcGF0aCwgcGF0aCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9ncnBtb2R1bGUuYyBiL01vZHVsZXMvZ3JwbW9kdWxlLmMKaW5kZXggMDQyY2YwNS4uZGE3ODI1MyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9ncnBtb2R1bGUuYworKysgYi9Nb2R1bGVzL2dycG1vZHVsZS5jCkBAIC01OCwxNyArNTgsMTIgQEAKIAogI2RlZmluZSBTRVQoaSx2YWwpIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgaSwgdmFsKQogICAgIFNFVChzZXRJbmRleCsrLCBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KHAtPmdyX25hbWUpKTsKLSNpZmRlZiBfX1ZNUwotICAgIFNFVChzZXRJbmRleCsrLCBQeV9Ob25lKTsKLSAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0jZWxzZQogICAgIGlmIChwLT5ncl9wYXNzd2QpCiAgICAgICAgICAgICBTRVQoc2V0SW5kZXgrKywgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChwLT5ncl9wYXNzd2QpKTsKICAgICBlbHNlIHsKICAgICAgICAgICAgIFNFVChzZXRJbmRleCsrLCBQeV9Ob25lKTsKICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICB9Ci0jZW5kaWYKICAgICBTRVQoc2V0SW5kZXgrKywgX1B5TG9uZ19Gcm9tR2lkKHAtPmdyX2dpZCkpOwogICAgIFNFVChzZXRJbmRleCsrLCB3KTsKICN1bmRlZiBTRVQKQEAgLTE1NywxMSArMTUyLDExIEBACiAKIHN0YXRpYyBQeU1ldGhvZERlZiBncnBfbWV0aG9kc1tdID0gewogICAgIHsiZ2V0Z3JnaWQiLCAgICAgICAgZ3JwX2dldGdyZ2lkLCAgIE1FVEhfTywKLSAgICAgImdldGdyZ2lkKGlkKSAtPiB0dXBsZVxuXAorICAgICAiZ2V0Z3JnaWQoaWQpIC0+IChncl9uYW1lLGdyX3Bhc3N3ZCxncl9naWQsZ3JfbWVtKVxuXAogUmV0dXJuIHRoZSBncm91cCBkYXRhYmFzZSBlbnRyeSBmb3IgdGhlIGdpdmVuIG51bWVyaWMgZ3JvdXAgSUQuICBJZlxuXAogaWQgaXMgbm90IHZhbGlkLCByYWlzZSBLZXlFcnJvci4ifSwKICAgICB7ImdldGdybmFtIiwgICAgICAgIGdycF9nZXRncm5hbSwgICBNRVRIX1ZBUkFSR1MsCi0gICAgICJnZXRncm5hbShuYW1lKSAtPiB0dXBsZVxuXAorICAgICAiZ2V0Z3JuYW0obmFtZSkgLT4gKGdyX25hbWUsZ3JfcGFzc3dkLGdyX2dpZCxncl9tZW0pXG5cCiBSZXR1cm4gdGhlIGdyb3VwIGRhdGFiYXNlIGVudHJ5IGZvciB0aGUgZ2l2ZW4gZ3JvdXAgbmFtZS4gIElmXG5cCiBuYW1lIGlzIG5vdCB2YWxpZCwgcmFpc2UgS2V5RXJyb3IuIn0sCiAgICAgeyJnZXRncmFsbCIsICAgICAgICBncnBfZ2V0Z3JhbGwsICAgTUVUSF9OT0FSR1MsCkBAIC0xNzgsMTAgKzE3MywxMCBAQAogR3JvdXAgZW50cmllcyBhcmUgcmVwb3J0ZWQgYXMgNC10dXBsZXMgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGZpZWxkc1xuXAogZnJvbSB0aGUgZ3JvdXAgZGF0YWJhc2UsIGluIG9yZGVyOlxuXAogXG5cCi0gIG5hbWUgICAtIG5hbWUgb2YgdGhlIGdyb3VwXG5cCi0gIHBhc3N3ZCAtIGdyb3VwIHBhc3N3b3JkIChlbmNyeXB0ZWQpOyBvZnRlbiBlbXB0eVxuXAotICBnaWQgICAgLSBudW1lcmljIElEIG9mIHRoZSBncm91cFxuXAotICBtZW0gICAgLSBsaXN0IG9mIG1lbWJlcnNcblwKKyAgZ3JfbmFtZSAgIC0gbmFtZSBvZiB0aGUgZ3JvdXBcblwKKyAgZ3JfcGFzc3dkIC0gZ3JvdXAgcGFzc3dvcmQgKGVuY3J5cHRlZCk7IG9mdGVuIGVtcHR5XG5cCisgIGdyX2dpZCAgICAtIG51bWVyaWMgSUQgb2YgdGhlIGdyb3VwXG5cCisgIGdyX21lbSAgICAtIGxpc3Qgb2YgbWVtYmVyc1xuXAogXG5cCiBUaGUgZ2lkIGlzIGFuIGludGVnZXIsIG5hbWUgYW5kIHBhc3N3b3JkIGFyZSBzdHJpbmdzLiAgKE5vdGUgdGhhdCBtb3N0XG5cCiB1c2VycyBhcmUgbm90IGV4cGxpY2l0bHkgbGlzdGVkIGFzIG1lbWJlcnMgb2YgdGhlIGdyb3VwcyB0aGV5IGFyZSBpblxuXApAQCAtMjEwLDkgKzIwNSwxNCBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RHcnBUeXBlLCAmc3RydWN0X2dyb3VwX3R5cGVfZGVzYyk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgInN0cnVjdF9ncm91cCIsIChQeU9iamVjdCAqKSAmU3RydWN0R3JwVHlwZSk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdEdycFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X2dyb3VwX3R5cGVfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAic3RydWN0X2dyb3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJlN0cnVjdEdycFR5cGUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9oYXNobGliLmggYi9Nb2R1bGVzL2hhc2hsaWIuaAppbmRleCA0NTk5MTQ2Li4zNTgwNDUzIDEwMDY0NAotLS0gYS9Nb2R1bGVzL2hhc2hsaWIuaAorKysgYi9Nb2R1bGVzL2hhc2hsaWIuaApAQCAtMjYsMyArMjYsMzYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOyBcCiAgICAgICAgIH0gXAogICAgIH0gd2hpbGUoMCk7CisKKy8qCisgKiBIZWxwZXIgY29kZSB0byBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gdGhlIGhhc2ggb2JqZWN0IHdoZW4gdGhlIEdJTCBpcworICogcmVsZWFzZWQgYXJvdW5kIGEgQ1BVIGNvbnN1bWluZyBoYXNobGliIG9wZXJhdGlvbi4gQWxsIGNvZGUgcGF0aHMgdGhhdAorICogYWNjZXNzIGEgbXV0YWJsZSBwYXJ0IG9mIG9iaiBtdXN0IGJlIGVuY2xvc2VkIGluIGFuIEVOVEVSX0hBU0hMSUIgLworICogTEVBVkVfSEFTSExJQiBibG9jayBvciBleHBsaWNpdGx5IGFjcXVpcmUgYW5kIHJlbGVhc2UgdGhlIGxvY2sgaW5zaWRlCisgKiBhIFBZX0JFR0lOIC8gRU5EX0FMTE9XX1RIUkVBRFMgYmxvY2sgaWYgdGhleSB3aXNoIHRvIHJlbGVhc2UgdGhlIEdJTCBmb3IKKyAqIGFuIG9wZXJhdGlvbi4KKyAqLworCisjaWZkZWYgV0lUSF9USFJFQUQKKyNpbmNsdWRlICJweXRocmVhZC5oIgorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopIFwKKyAgICAgICAgaWYgKChvYmopLT5sb2NrKSB7IFwKKyAgICAgICAgICAgIGlmICghUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAwKSkgeyBcCisgICAgICAgICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUyBcCisgICAgICAgICAgICAgICAgUHlUaHJlYWRfYWNxdWlyZV9sb2NrKChvYmopLT5sb2NrLCAxKTsgXAorICAgICAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTIFwKKyAgICAgICAgICAgIH0gXAorICAgICAgICB9CisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikgXAorICAgICAgICBpZiAoKG9iaiktPmxvY2spIHsgXAorICAgICAgICAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKChvYmopLT5sb2NrKTsgXAorICAgICAgICB9CisjZWxzZQorICAgICNkZWZpbmUgRU5URVJfSEFTSExJQihvYmopCisgICAgI2RlZmluZSBMRUFWRV9IQVNITElCKG9iaikKKyNlbmRpZgorCisvKiBUT0RPKGdwcyk6IFdlIHNob3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgYSBtb2R1bGUgb3IgRVZQb2JqZWN0IGF0dHJpYnV0ZQorICogdG8gYWxsb3cgdGhlIHVzZXIgdG8gb3B0aW1pemUgYmFzZWQgb24gdGhlIHBsYXRmb3JtIHRoZXkncmUgdXNpbmcuICovCisjZGVmaW5lIEhBU0hMSUJfR0lMX01JTlNJWkUgMjA0OAorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2hhc2h0YWJsZS5jIGIvTW9kdWxlcy9oYXNodGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzNmMzEzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9oYXNodGFibGUuYwpAQCAtMCwwICsxLDUxOSBAQAorLyogVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBoYXNoIHRhYmxlIChfUHlfaGFzaHRhYmxlX3QpIGlzIGJhc2VkIG9uIHRoZSBjZnVoYXNoCisgICBwcm9qZWN0OgorICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJjZnUvCisKKyAgIENvcHlyaWdodCBvZiBjZnVoYXNoOgorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgQ3JlYXRpb24gZGF0ZTogMjAwNS0wNi0yNCAyMToyMjo0MAorICAgQXV0aG9yczogRG9uCisgICBDaGFuZ2UgbG9nOgorCisgICBDb3B5cmlnaHQgKGMpIDIwMDUgRG9uIE93ZW5zCisgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEJTRCBsaWNlbnNlOgorCisgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICAgYXJlIG1ldDoKKworICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9yIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgICAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgICBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgICBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAgIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKyNpbmNsdWRlICJQeXRob24uaCIKKyNpbmNsdWRlICJoYXNodGFibGUuaCIKKworI2RlZmluZSBIQVNIVEFCTEVfTUlOX1NJWkUgMTYKKyNkZWZpbmUgSEFTSFRBQkxFX0hJR0ggMC41MAorI2RlZmluZSBIQVNIVEFCTEVfTE9XIDAuMTAKKyNkZWZpbmUgSEFTSFRBQkxFX1JFSEFTSF9GQUNUT1IgMi4wIC8gKEhBU0hUQUJMRV9MT1cgKyBIQVNIVEFCTEVfSElHSCkKKworI2RlZmluZSBCVUNLRVRTX0hFQUQoU0xJU1QpIFwKKyAgICAgICAgKChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKilfUHlfU0xJU1RfSEVBRCgmKFNMSVNUKSkpCisjZGVmaW5lIFRBQkxFX0hFQUQoSFQsIEJVQ0tFVCkgXAorICAgICAgICAoKF9QeV9oYXNodGFibGVfZW50cnlfdCAqKV9QeV9TTElTVF9IRUFEKCYoSFQpLT5idWNrZXRzW0JVQ0tFVF0pKQorI2RlZmluZSBFTlRSWV9ORVhUKEVOVFJZKSBcCisgICAgICAgICgoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopX1B5X1NMSVNUX0lURU1fTkVYVChFTlRSWSkpCisjZGVmaW5lIEhBU0hUQUJMRV9JVEVNX1NJWkUoSFQpIFwKKyAgICAgICAgKHNpemVvZihfUHlfaGFzaHRhYmxlX2VudHJ5X3QpICsgKEhUKS0+ZGF0YV9zaXplKQorCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9uICovCitzdGF0aWMgdm9pZCBoYXNodGFibGVfcmVoYXNoKF9QeV9oYXNodGFibGVfdCAqaHQpOworCitzdGF0aWMgdm9pZAorX1B5X3NsaXN0X2luaXQoX1B5X3NsaXN0X3QgKmxpc3QpCit7CisgICAgbGlzdC0+aGVhZCA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlfc2xpc3RfcHJlcGVuZChfUHlfc2xpc3RfdCAqbGlzdCwgX1B5X3NsaXN0X2l0ZW1fdCAqaXRlbSkKK3sKKyAgICBpdGVtLT5uZXh0ID0gbGlzdC0+aGVhZDsKKyAgICBsaXN0LT5oZWFkID0gaXRlbTsKK30KKworc3RhdGljIHZvaWQKK19QeV9zbGlzdF9yZW1vdmUoX1B5X3NsaXN0X3QgKmxpc3QsIF9QeV9zbGlzdF9pdGVtX3QgKnByZXZpb3VzLAorICAgICAgICAgICAgICAgICBfUHlfc2xpc3RfaXRlbV90ICppdGVtKQoreworICAgIGlmIChwcmV2aW91cyAhPSBOVUxMKQorICAgICAgICBwcmV2aW91cy0+bmV4dCA9IGl0ZW0tPm5leHQ7CisgICAgZWxzZQorICAgICAgICBsaXN0LT5oZWFkID0gaXRlbS0+bmV4dDsKK30KKworUHlfdWhhc2hfdAorX1B5X2hhc2h0YWJsZV9oYXNoX2ludChjb25zdCB2b2lkICprZXkpCit7CisgICAgcmV0dXJuIChQeV91aGFzaF90KWtleTsKK30KKworUHlfdWhhc2hfdAorX1B5X2hhc2h0YWJsZV9oYXNoX3B0cihjb25zdCB2b2lkICprZXkpCit7CisgICAgcmV0dXJuIChQeV91aGFzaF90KV9QeV9IYXNoUG9pbnRlcigodm9pZCAqKWtleSk7Cit9CisKK2ludAorX1B5X2hhc2h0YWJsZV9jb21wYXJlX2RpcmVjdChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnkpCit7CisgICAgcmV0dXJuIGVudHJ5LT5rZXkgPT0ga2V5OworfQorCisvKiBtYWtlcyBzdXJlIHRoZSByZWFsIHNpemUgb2YgdGhlIGJ1Y2tldHMgYXJyYXkgaXMgYSBwb3dlciBvZiAyICovCitzdGF0aWMgc2l6ZV90Cityb3VuZF9zaXplKHNpemVfdCBzKQoreworICAgIHNpemVfdCBpOworICAgIGlmIChzIDwgSEFTSFRBQkxFX01JTl9TSVpFKQorICAgICAgICByZXR1cm4gSEFTSFRBQkxFX01JTl9TSVpFOworICAgIGkgPSAxOworICAgIHdoaWxlIChpIDwgcykKKyAgICAgICAgaSA8PD0gMTsKKyAgICByZXR1cm4gaTsKK30KKworX1B5X2hhc2h0YWJsZV90ICoKK19QeV9oYXNodGFibGVfbmV3X2Z1bGwoc2l6ZV90IGRhdGFfc2l6ZSwgc2l6ZV90IGluaXRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMgY29weV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jIGdldF9kYXRhX3NpemVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9hbGxvY2F0b3JfdCAqYWxsb2NhdG9yKQoreworICAgIF9QeV9oYXNodGFibGVfdCAqaHQ7CisgICAgc2l6ZV90IGJ1Y2tldHNfc2l6ZTsKKyAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90IGFsbG9jOworCisgICAgaWYgKGFsbG9jYXRvciA9PSBOVUxMKSB7CisgICAgICAgIGFsbG9jLm1hbGxvYyA9IFB5TWVtX1Jhd01hbGxvYzsKKyAgICAgICAgYWxsb2MuZnJlZSA9IFB5TWVtX1Jhd0ZyZWU7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgYWxsb2MgPSAqYWxsb2NhdG9yOworCisgICAgaHQgPSAoX1B5X2hhc2h0YWJsZV90ICopYWxsb2MubWFsbG9jKHNpemVvZihfUHlfaGFzaHRhYmxlX3QpKTsKKyAgICBpZiAoaHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGh0OworCisgICAgaHQtPm51bV9idWNrZXRzID0gcm91bmRfc2l6ZShpbml0X3NpemUpOworICAgIGh0LT5lbnRyaWVzID0gMDsKKyAgICBodC0+ZGF0YV9zaXplID0gZGF0YV9zaXplOworCisgICAgYnVja2V0c19zaXplID0gaHQtPm51bV9idWNrZXRzICogc2l6ZW9mKGh0LT5idWNrZXRzWzBdKTsKKyAgICBodC0+YnVja2V0cyA9IGFsbG9jLm1hbGxvYyhidWNrZXRzX3NpemUpOworICAgIGlmIChodC0+YnVja2V0cyA9PSBOVUxMKSB7CisgICAgICAgIGFsbG9jLmZyZWUoaHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWVtc2V0KGh0LT5idWNrZXRzLCAwLCBidWNrZXRzX3NpemUpOworCisgICAgaHQtPmhhc2hfZnVuYyA9IGhhc2hfZnVuYzsKKyAgICBodC0+Y29tcGFyZV9mdW5jID0gY29tcGFyZV9mdW5jOworICAgIGh0LT5jb3B5X2RhdGFfZnVuYyA9IGNvcHlfZGF0YV9mdW5jOworICAgIGh0LT5mcmVlX2RhdGFfZnVuYyA9IGZyZWVfZGF0YV9mdW5jOworICAgIGh0LT5nZXRfZGF0YV9zaXplX2Z1bmMgPSBnZXRfZGF0YV9zaXplX2Z1bmM7CisgICAgaHQtPmFsbG9jID0gYWxsb2M7CisgICAgcmV0dXJuIGh0OworfQorCitfUHlfaGFzaHRhYmxlX3QgKgorX1B5X2hhc2h0YWJsZV9uZXcoc2l6ZV90IGRhdGFfc2l6ZSwKKyAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICAgICAgICAgICAgICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYykKK3sKKyAgICByZXR1cm4gX1B5X2hhc2h0YWJsZV9uZXdfZnVsbChkYXRhX3NpemUsIEhBU0hUQUJMRV9NSU5fU0laRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2Z1bmMsIGNvbXBhcmVfZnVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKK30KKworc2l6ZV90CitfUHlfaGFzaHRhYmxlX3NpemUoX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBzaXplX3QgaHY7CisKKyAgICBzaXplID0gc2l6ZW9mKF9QeV9oYXNodGFibGVfdCk7CisKKyAgICAvKiBidWNrZXRzICovCisgICAgc2l6ZSArPSBodC0+bnVtX2J1Y2tldHMgKiBzaXplb2YoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICopOworCisgICAgLyogZW50cmllcyAqLworICAgIHNpemUgKz0gaHQtPmVudHJpZXMgKiBIQVNIVEFCTEVfSVRFTV9TSVpFKGh0KTsKKworICAgIC8qIGRhdGEgbGlua2VkIGZyb20gZW50cmllcyAqLworICAgIGlmIChodC0+Z2V0X2RhdGFfc2l6ZV9mdW5jKSB7CisgICAgICAgIGZvciAoaHYgPSAwOyBodiA8IGh0LT5udW1fYnVja2V0czsgaHYrKykgeworICAgICAgICAgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgICAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGh2KTsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgICAgICB2b2lkICpkYXRhOworCisgICAgICAgICAgICAgICAgZGF0YSA9IF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpOworICAgICAgICAgICAgICAgIHNpemUgKz0gaHQtPmdldF9kYXRhX3NpemVfZnVuYyhkYXRhKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30KKworI2lmZGVmIFB5X0RFQlVHCit2b2lkCitfUHlfaGFzaHRhYmxlX3ByaW50X3N0YXRzKF9QeV9oYXNodGFibGVfdCAqaHQpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGNoYWluX2xlbiwgbWF4X2NoYWluX2xlbiwgdG90YWxfY2hhaW5fbGVuLCBuY2hhaW5zOworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgc2l6ZV90IGh2OworICAgIGRvdWJsZSBsb2FkOworCisgICAgc2l6ZSA9IF9QeV9oYXNodGFibGVfc2l6ZShodCk7CisKKyAgICBsb2FkID0gKGRvdWJsZSlodC0+ZW50cmllcyAvIGh0LT5udW1fYnVja2V0czsKKworICAgIG1heF9jaGFpbl9sZW4gPSAwOworICAgIHRvdGFsX2NoYWluX2xlbiA9IDA7CisgICAgbmNoYWlucyA9IDA7CisgICAgZm9yIChodiA9IDA7IGh2IDwgaHQtPm51bV9idWNrZXRzOyBodisrKSB7CisgICAgICAgIGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaHYpOworICAgICAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICAgICAgY2hhaW5fbGVuID0gMDsKKyAgICAgICAgICAgIGZvciAoOyBlbnRyeTsgZW50cnkgPSBFTlRSWV9ORVhUKGVudHJ5KSkgeworICAgICAgICAgICAgICAgIGNoYWluX2xlbisrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoYWluX2xlbiA+IG1heF9jaGFpbl9sZW4pCisgICAgICAgICAgICAgICAgbWF4X2NoYWluX2xlbiA9IGNoYWluX2xlbjsKKyAgICAgICAgICAgIHRvdGFsX2NoYWluX2xlbiArPSBjaGFpbl9sZW47CisgICAgICAgICAgICBuY2hhaW5zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJpbnRmKCJoYXNoIHRhYmxlICVwOiBlbnRyaWVzPSUiCisgICAgICAgICAgIFBZX0ZPUk1BVF9TSVpFX1QgInUvJSIgUFlfRk9STUFUX1NJWkVfVCAidSAoJS4wZiUlKSwgIiwKKyAgICAgICAgICAgaHQsIGh0LT5lbnRyaWVzLCBodC0+bnVtX2J1Y2tldHMsIGxvYWQgKiAxMDAuMCk7CisgICAgaWYgKG5jaGFpbnMpCisgICAgICAgIHByaW50ZigiYXZnX2NoYWluX2xlbj0lLjFmLCAiLCAoZG91YmxlKXRvdGFsX2NoYWluX2xlbiAvIG5jaGFpbnMpOworICAgIHByaW50ZigibWF4X2NoYWluX2xlbj0lIiBQWV9GT1JNQVRfU0laRV9UICJ1LCAlIiBQWV9GT1JNQVRfU0laRV9UICJ1IGtCXG4iLAorICAgICAgICAgICBtYXhfY2hhaW5fbGVuLCBzaXplIC8gMTAyNCk7Cit9CisjZW5kaWYKKworLyogR2V0IGFuIGVudHJ5LiBSZXR1cm4gTlVMTCBpZiB0aGUga2V5IGRvZXMgbm90IGV4aXN0LiAqLworX1B5X2hhc2h0YWJsZV9lbnRyeV90ICoKK19QeV9oYXNodGFibGVfZ2V0X2VudHJ5KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSkKK3sKKyAgICBQeV91aGFzaF90IGtleV9oYXNoOworICAgIHNpemVfdCBpbmRleDsKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5OworCisgICAga2V5X2hhc2ggPSBodC0+aGFzaF9mdW5jKGtleSk7CisgICAgaW5kZXggPSBrZXlfaGFzaCAmIChodC0+bnVtX2J1Y2tldHMgLSAxKTsKKworICAgIGZvciAoZW50cnkgPSBUQUJMRV9IRUFEKGh0LCBpbmRleCk7IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5rZXlfaGFzaCA9PSBrZXlfaGFzaCAmJiBodC0+Y29tcGFyZV9mdW5jKGtleSwgZW50cnkpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50CitfaGFzaHRhYmxlX3BvcF9lbnRyeShfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXksIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKyAgICBzaXplX3QgaW5kZXg7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgKnByZXZpb3VzOworCisgICAga2V5X2hhc2ggPSBodC0+aGFzaF9mdW5jKGtleSk7CisgICAgaW5kZXggPSBrZXlfaGFzaCAmIChodC0+bnVtX2J1Y2tldHMgLSAxKTsKKworICAgIHByZXZpb3VzID0gTlVMTDsKKyAgICBmb3IgKGVudHJ5ID0gVEFCTEVfSEVBRChodCwgaW5kZXgpOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgIGlmIChlbnRyeS0+a2V5X2hhc2ggPT0ga2V5X2hhc2ggJiYgaHQtPmNvbXBhcmVfZnVuYyhrZXksIGVudHJ5KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBwcmV2aW91cyA9IGVudHJ5OworICAgIH0KKworICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIF9QeV9zbGlzdF9yZW1vdmUoJmh0LT5idWNrZXRzW2luZGV4XSwgKF9QeV9zbGlzdF9pdGVtX3QgKilwcmV2aW91cywKKyAgICAgICAgICAgICAgICAgICAgIChfUHlfc2xpc3RfaXRlbV90ICopZW50cnkpOworICAgIGh0LT5lbnRyaWVzLS07CisKKyAgICBpZiAoZGF0YSAhPSBOVUxMKQorICAgICAgICBfUHlfSEFTSFRBQkxFX0VOVFJZX1JFQURfREFUQShodCwgZGF0YSwgZGF0YV9zaXplLCBlbnRyeSk7CisgICAgaHQtPmFsbG9jLmZyZWUoZW50cnkpOworCisgICAgaWYgKChmbG9hdClodC0+ZW50cmllcyAvIChmbG9hdClodC0+bnVtX2J1Y2tldHMgPCBIQVNIVEFCTEVfTE9XKQorICAgICAgICBoYXNodGFibGVfcmVoYXNoKGh0KTsKKyAgICByZXR1cm4gMTsKK30KKworLyogQWRkIGEgbmV3IGVudHJ5IHRvIHRoZSBoYXNoLiBUaGUga2V5IG11c3Qgbm90IGJlIHByZXNlbnQgaW4gdGhlIGhhc2ggdGFibGUuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCAtMSBvbiBtZW1vcnkgZXJyb3IuICovCitpbnQKK19QeV9oYXNodGFibGVfc2V0KF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwKKyAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKyAgICBzaXplX3QgaW5kZXg7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgIGFzc2VydChkYXRhICE9IE5VTEwgfHwgZGF0YV9zaXplID09IDApOworI2lmbmRlZiBOREVCVUcKKyAgICAvKiBEb24ndCB3cml0ZSB0aGUgYXNzZXJ0aW9uIG9uIGEgc2luZ2xlIGxpbmUgYmVjYXVzZSBpdCBpcyBpbnRlcmVzdGluZworICAgICAgIHRvIGtub3cgdGhlIGR1cGxpY2F0ZWQgZW50cnkgaWYgdGhlIGFzc2VydGlvbiBmYWlsZWQuIFRoZSBlbnRyeSBjYW4KKyAgICAgICBiZSByZWFkIHVzaW5nIGEgZGVidWdnZXIuICovCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeShodCwga2V5KTsKKyAgICBhc3NlcnQoZW50cnkgPT0gTlVMTCk7CisjZW5kaWYKKworICAgIGtleV9oYXNoID0gaHQtPmhhc2hfZnVuYyhrZXkpOworICAgIGluZGV4ID0ga2V5X2hhc2ggJiAoaHQtPm51bV9idWNrZXRzIC0gMSk7CisKKyAgICBlbnRyeSA9IGh0LT5hbGxvYy5tYWxsb2MoSEFTSFRBQkxFX0lURU1fU0laRShodCkpOworICAgIGlmIChlbnRyeSA9PSBOVUxMKSB7CisgICAgICAgIC8qIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZW50cnktPmtleSA9ICh2b2lkICopa2V5OworICAgIGVudHJ5LT5rZXlfaGFzaCA9IGtleV9oYXNoOworCisgICAgYXNzZXJ0KGRhdGFfc2l6ZSA9PSBodC0+ZGF0YV9zaXplKTsKKyAgICBtZW1jcHkoX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKGVudHJ5KSwgZGF0YSwgZGF0YV9zaXplKTsKKworICAgIF9QeV9zbGlzdF9wcmVwZW5kKCZodC0+YnVja2V0c1tpbmRleF0sIChfUHlfc2xpc3RfaXRlbV90KillbnRyeSk7CisgICAgaHQtPmVudHJpZXMrKzsKKworICAgIGlmICgoZmxvYXQpaHQtPmVudHJpZXMgLyAoZmxvYXQpaHQtPm51bV9idWNrZXRzID4gSEFTSFRBQkxFX0hJR0gpCisgICAgICAgIGhhc2h0YWJsZV9yZWhhc2goaHQpOworICAgIHJldHVybiAwOworfQorCisvKiBHZXQgZGF0YSBmcm9tIGFuIGVudHJ5LiBDb3B5IGVudHJ5IGRhdGEgaW50byBkYXRhIGFuZCByZXR1cm4gMSBpZiB0aGUgZW50cnkKKyAgIGV4aXN0cywgcmV0dXJuIDAgaWYgdGhlIGVudHJ5IGRvZXMgbm90IGV4aXN0LiAqLworaW50CitfUHlfaGFzaHRhYmxlX2dldChfUHlfaGFzaHRhYmxlX3QgKmh0LCBjb25zdCB2b2lkICprZXksIHZvaWQgKmRhdGEsIHNpemVfdCBkYXRhX3NpemUpCit7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKworICAgIGFzc2VydChkYXRhICE9IE5VTEwpOworCisgICAgZW50cnkgPSBfUHlfaGFzaHRhYmxlX2dldF9lbnRyeShodCwga2V5KTsKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgX1B5X0hBU0hUQUJMRV9FTlRSWV9SRUFEX0RBVEEoaHQsIGRhdGEsIGRhdGFfc2l6ZSwgZW50cnkpOworICAgIHJldHVybiAxOworfQorCitpbnQKK19QeV9oYXNodGFibGVfcG9wKF9QeV9oYXNodGFibGVfdCAqaHQsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqZGF0YSwgc2l6ZV90IGRhdGFfc2l6ZSkKK3sKKyAgICBhc3NlcnQoZGF0YSAhPSBOVUxMKTsKKyAgICBhc3NlcnQoaHQtPmZyZWVfZGF0YV9mdW5jID09IE5VTEwpOworICAgIHJldHVybiBfaGFzaHRhYmxlX3BvcF9lbnRyeShodCwga2V5LCBkYXRhLCBkYXRhX3NpemUpOworfQorCisvKiBEZWxldGUgYW4gZW50cnkuIFRoZSBlbnRyeSBtdXN0IGV4aXN0LiAqLwordm9pZAorX1B5X2hhc2h0YWJsZV9kZWxldGUoX1B5X2hhc2h0YWJsZV90ICpodCwgY29uc3Qgdm9pZCAqa2V5KQoreworI2lmbmRlZiBOREVCVUcKKyAgICBpbnQgZm91bmQgPSBfaGFzaHRhYmxlX3BvcF9lbnRyeShodCwga2V5LCBOVUxMLCAwKTsKKyAgICBhc3NlcnQoZm91bmQpOworI2Vsc2UKKyAgICAodm9pZClfaGFzaHRhYmxlX3BvcF9lbnRyeShodCwga2V5LCBOVUxMLCAwKTsKKyNlbmRpZgorfQorCisvKiBQcm90b3R5cGUgZm9yIGEgcG9pbnRlciB0byBhIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBmb3JlYWNoCisgICBrZXkvdmFsdWUgcGFpciBpbiB0aGUgaGFzaCBieSBoYXNodGFibGVfZm9yZWFjaCgpLiAgSXRlcmF0aW9uCisgICBzdG9wcyBpZiBhIG5vbi16ZXJvIHZhbHVlIGlzIHJldHVybmVkLiAqLworaW50CitfUHlfaGFzaHRhYmxlX2ZvcmVhY2goX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmdW5jKSAoX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeSwgdm9pZCAqYXJnKSwKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpCit7CisgICAgX1B5X2hhc2h0YWJsZV9lbnRyeV90ICplbnRyeTsKKyAgICBzaXplX3QgaHY7CisKKyAgICBmb3IgKGh2ID0gMDsgaHYgPCBodC0+bnVtX2J1Y2tldHM7IGh2KyspIHsKKyAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGh2KTsgZW50cnk7IGVudHJ5ID0gRU5UUllfTkVYVChlbnRyeSkpIHsKKyAgICAgICAgICAgIGludCByZXMgPSBmdW5jKGVudHJ5LCBhcmcpOworICAgICAgICAgICAgaWYgKHJlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAoraGFzaHRhYmxlX3JlaGFzaChfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIHNpemVfdCBidWNrZXRzX3NpemUsIG5ld19zaXplLCBidWNrZXQ7CisgICAgX1B5X3NsaXN0X3QgKm9sZF9idWNrZXRzID0gTlVMTDsKKyAgICBzaXplX3Qgb2xkX251bV9idWNrZXRzOworCisgICAgbmV3X3NpemUgPSByb3VuZF9zaXplKChzaXplX3QpKGh0LT5lbnRyaWVzICogSEFTSFRBQkxFX1JFSEFTSF9GQUNUT1IpKTsKKyAgICBpZiAobmV3X3NpemUgPT0gaHQtPm51bV9idWNrZXRzKQorICAgICAgICByZXR1cm47CisKKyAgICBvbGRfbnVtX2J1Y2tldHMgPSBodC0+bnVtX2J1Y2tldHM7CisKKyAgICBidWNrZXRzX3NpemUgPSBuZXdfc2l6ZSAqIHNpemVvZihodC0+YnVja2V0c1swXSk7CisgICAgb2xkX2J1Y2tldHMgPSBodC0+YnVja2V0czsKKyAgICBodC0+YnVja2V0cyA9IGh0LT5hbGxvYy5tYWxsb2MoYnVja2V0c19zaXplKTsKKyAgICBpZiAoaHQtPmJ1Y2tldHMgPT0gTlVMTCkgeworICAgICAgICAvKiBjYW5jZWwgcmVoYXNoIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgKi8KKyAgICAgICAgaHQtPmJ1Y2tldHMgPSBvbGRfYnVja2V0cyA7CisgICAgICAgIC8qIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCAqLworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1lbXNldChodC0+YnVja2V0cywgMCwgYnVja2V0c19zaXplKTsKKworICAgIGh0LT5udW1fYnVja2V0cyA9IG5ld19zaXplOworCisgICAgZm9yIChidWNrZXQgPSAwOyBidWNrZXQgPCBvbGRfbnVtX2J1Y2tldHM7IGJ1Y2tldCsrKSB7CisgICAgICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnksICpuZXh0OworICAgICAgICBmb3IgKGVudHJ5ID0gQlVDS0VUU19IRUFEKG9sZF9idWNrZXRzW2J1Y2tldF0pOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IG5leHQpIHsKKyAgICAgICAgICAgIHNpemVfdCBlbnRyeV9pbmRleDsKKworICAgICAgICAgICAgYXNzZXJ0KGh0LT5oYXNoX2Z1bmMoZW50cnktPmtleSkgPT0gZW50cnktPmtleV9oYXNoKTsKKyAgICAgICAgICAgIG5leHQgPSBFTlRSWV9ORVhUKGVudHJ5KTsKKyAgICAgICAgICAgIGVudHJ5X2luZGV4ID0gZW50cnktPmtleV9oYXNoICYgKG5ld19zaXplIC0gMSk7CisKKyAgICAgICAgICAgIF9QeV9zbGlzdF9wcmVwZW5kKCZodC0+YnVja2V0c1tlbnRyeV9pbmRleF0sIChfUHlfc2xpc3RfaXRlbV90KillbnRyeSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBodC0+YWxsb2MuZnJlZShvbGRfYnVja2V0cyk7Cit9CisKK3ZvaWQKK19QeV9oYXNodGFibGVfY2xlYXIoX1B5X2hhc2h0YWJsZV90ICpodCkKK3sKKyAgICBfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCAqbmV4dDsKKyAgICBzaXplX3QgaTsKKworICAgIGZvciAoaT0wOyBpIDwgaHQtPm51bV9idWNrZXRzOyBpKyspIHsKKyAgICAgICAgZm9yIChlbnRyeSA9IFRBQkxFX0hFQUQoaHQsIGkpOyBlbnRyeSAhPSBOVUxMOyBlbnRyeSA9IG5leHQpIHsKKyAgICAgICAgICAgIG5leHQgPSBFTlRSWV9ORVhUKGVudHJ5KTsKKyAgICAgICAgICAgIGlmIChodC0+ZnJlZV9kYXRhX2Z1bmMpCisgICAgICAgICAgICAgICAgaHQtPmZyZWVfZGF0YV9mdW5jKF9QeV9IQVNIVEFCTEVfRU5UUllfREFUQV9BU19WT0lEX1AoZW50cnkpKTsKKyAgICAgICAgICAgIGh0LT5hbGxvYy5mcmVlKGVudHJ5KTsKKyAgICAgICAgfQorICAgICAgICBfUHlfc2xpc3RfaW5pdCgmaHQtPmJ1Y2tldHNbaV0pOworICAgIH0KKyAgICBodC0+ZW50cmllcyA9IDA7CisgICAgaGFzaHRhYmxlX3JlaGFzaChodCk7Cit9CisKK3ZvaWQKK19QeV9oYXNodGFibGVfZGVzdHJveShfUHlfaGFzaHRhYmxlX3QgKmh0KQoreworICAgIHNpemVfdCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGh0LT5udW1fYnVja2V0czsgaSsrKSB7CisgICAgICAgIF9QeV9zbGlzdF9pdGVtX3QgKmVudHJ5ID0gaHQtPmJ1Y2tldHNbaV0uaGVhZDsKKyAgICAgICAgd2hpbGUgKGVudHJ5KSB7CisgICAgICAgICAgICBfUHlfc2xpc3RfaXRlbV90ICplbnRyeV9uZXh0ID0gZW50cnktPm5leHQ7CisgICAgICAgICAgICBpZiAoaHQtPmZyZWVfZGF0YV9mdW5jKQorICAgICAgICAgICAgICAgIGh0LT5mcmVlX2RhdGFfZnVuYyhfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KSk7CisgICAgICAgICAgICBodC0+YWxsb2MuZnJlZShlbnRyeSk7CisgICAgICAgICAgICBlbnRyeSA9IGVudHJ5X25leHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBodC0+YWxsb2MuZnJlZShodC0+YnVja2V0cyk7CisgICAgaHQtPmFsbG9jLmZyZWUoaHQpOworfQorCisvKiBSZXR1cm4gYSBjb3B5IG9mIHRoZSBoYXNoIHRhYmxlICovCitfUHlfaGFzaHRhYmxlX3QgKgorX1B5X2hhc2h0YWJsZV9jb3B5KF9QeV9oYXNodGFibGVfdCAqc3JjKQoreworICAgIF9QeV9oYXNodGFibGVfdCAqZHN0OworICAgIF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnk7CisgICAgc2l6ZV90IGJ1Y2tldDsKKyAgICBpbnQgZXJyOworICAgIHZvaWQgKmRhdGEsICpuZXdfZGF0YTsKKworICAgIGRzdCA9IF9QeV9oYXNodGFibGVfbmV3X2Z1bGwoc3JjLT5kYXRhX3NpemUsIHNyYy0+bnVtX2J1Y2tldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5oYXNoX2Z1bmMsIHNyYy0+Y29tcGFyZV9mdW5jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYy0+Y29weV9kYXRhX2Z1bmMsIHNyYy0+ZnJlZV9kYXRhX2Z1bmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLT5nZXRfZGF0YV9zaXplX2Z1bmMsICZzcmMtPmFsbG9jKTsKKyAgICBpZiAoZHN0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChidWNrZXQ9MDsgYnVja2V0IDwgc3JjLT5udW1fYnVja2V0czsgYnVja2V0KyspIHsKKyAgICAgICAgZW50cnkgPSBUQUJMRV9IRUFEKHNyYywgYnVja2V0KTsKKyAgICAgICAgZm9yICg7IGVudHJ5OyBlbnRyeSA9IEVOVFJZX05FWFQoZW50cnkpKSB7CisgICAgICAgICAgICBpZiAoc3JjLT5jb3B5X2RhdGFfZnVuYykgeworICAgICAgICAgICAgICAgIGRhdGEgPSBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBuZXdfZGF0YSA9IHNyYy0+Y29weV9kYXRhX2Z1bmMoZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKG5ld19kYXRhICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGVyciA9IF9QeV9oYXNodGFibGVfc2V0KGRzdCwgZW50cnktPmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X2RhdGEsIHNyYy0+ZGF0YV9zaXplKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVyciA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkYXRhID0gX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBlcnIgPSBfUHlfaGFzaHRhYmxlX3NldChkc3QsIGVudHJ5LT5rZXksIGRhdGEsIHNyYy0+ZGF0YV9zaXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlcnIpIHsKKyAgICAgICAgICAgICAgICBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koZHN0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZHN0OworfQorCmRpZmYgLS1naXQgYS9Nb2R1bGVzL2hhc2h0YWJsZS5oIGIvTW9kdWxlcy9oYXNodGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOWY5OTkzCi0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9oYXNodGFibGUuaApAQCAtMCwwICsxLDEyOCBAQAorI2lmbmRlZiBQeV9IQVNIVEFCTEVfSAorI2RlZmluZSBQeV9IQVNIVEFCTEVfSAorCisvKiBUaGUgd2hvbGUgQVBJIGlzIHByaXZhdGUgKi8KKyNpZm5kZWYgUHlfTElNSVRFRF9BUEkKKwordHlwZWRlZiBzdHJ1Y3QgX1B5X3NsaXN0X2l0ZW1fcyB7CisgICAgc3RydWN0IF9QeV9zbGlzdF9pdGVtX3MgKm5leHQ7Cit9IF9QeV9zbGlzdF9pdGVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBfUHlfc2xpc3RfaXRlbV90ICpoZWFkOworfSBfUHlfc2xpc3RfdDsKKworI2RlZmluZSBfUHlfU0xJU1RfSVRFTV9ORVhUKElURU0pICgoKF9QeV9zbGlzdF9pdGVtX3QgKilJVEVNKS0+bmV4dCkKKworI2RlZmluZSBfUHlfU0xJU1RfSEVBRChTTElTVCkgKCgoX1B5X3NsaXN0X3QgKilTTElTVCktPmhlYWQpCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICAvKiB1c2VkIGJ5IF9QeV9oYXNodGFibGVfdC5idWNrZXRzIHRvIGxpbmsgZW50cmllcyAqLworICAgIF9QeV9zbGlzdF9pdGVtX3QgX1B5X3NsaXN0X2l0ZW07CisKKyAgICBjb25zdCB2b2lkICprZXk7CisgICAgUHlfdWhhc2hfdCBrZXlfaGFzaDsKKworICAgIC8qIGRhdGEgZm9sbG93cyAqLworfSBfUHlfaGFzaHRhYmxlX2VudHJ5X3Q7CisKKyNkZWZpbmUgX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKEVOVFJZKSBcCisgICAgICAgICgoY2hhciAqKShFTlRSWSkgKyBzaXplb2YoX1B5X2hhc2h0YWJsZV9lbnRyeV90KSkKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0VOVFJZX0RBVEFfQVNfVk9JRF9QKEVOVFJZKSBcCisgICAgICAgICgqKHZvaWQgKiopX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKEVOVFJZKSkKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0VOVFJZX1JFQURfREFUQShUQUJMRSwgREFUQSwgREFUQV9TSVpFLCBFTlRSWSkgXAorICAgIGRvIHsgXAorICAgICAgICBhc3NlcnQoKERBVEFfU0laRSkgPT0gKFRBQkxFKS0+ZGF0YV9zaXplKTsgXAorICAgICAgICBtZW1jcHkoREFUQSwgX1B5X0hBU0hUQUJMRV9FTlRSWV9EQVRBKEVOVFJZKSwgREFUQV9TSVpFKTsgXAorICAgIH0gd2hpbGUgKDApCisKK3R5cGVkZWYgUHlfdWhhc2hfdCAoKl9QeV9oYXNodGFibGVfaGFzaF9mdW5jKSAoY29uc3Qgdm9pZCAqa2V5KTsKK3R5cGVkZWYgaW50ICgqX1B5X2hhc2h0YWJsZV9jb21wYXJlX2Z1bmMpIChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqaGUpOwordHlwZWRlZiB2b2lkKiAoKl9QeV9oYXNodGFibGVfY29weV9kYXRhX2Z1bmMpKHZvaWQgKmRhdGEpOwordHlwZWRlZiB2b2lkICgqX1B5X2hhc2h0YWJsZV9mcmVlX2RhdGFfZnVuYykodm9pZCAqZGF0YSk7Cit0eXBlZGVmIHNpemVfdCAoKl9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jKSh2b2lkICpkYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIC8qIGFsbG9jYXRlIGEgbWVtb3J5IGJsb2NrICovCisgICAgdm9pZCogKCptYWxsb2MpIChzaXplX3Qgc2l6ZSk7CisKKyAgICAvKiByZWxlYXNlIGEgbWVtb3J5IGJsb2NrICovCisgICAgdm9pZCAoKmZyZWUpICh2b2lkICpwdHIpOworfSBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgc2l6ZV90IG51bV9idWNrZXRzOworICAgIHNpemVfdCBlbnRyaWVzOyAvKiBUb3RhbCBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFibGUuICovCisgICAgX1B5X3NsaXN0X3QgKmJ1Y2tldHM7CisgICAgc2l6ZV90IGRhdGFfc2l6ZTsKKworICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmM7CisgICAgX1B5X2hhc2h0YWJsZV9jb3B5X2RhdGFfZnVuYyBjb3B5X2RhdGFfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2ZyZWVfZGF0YV9mdW5jIGZyZWVfZGF0YV9mdW5jOworICAgIF9QeV9oYXNodGFibGVfZ2V0X2RhdGFfc2l6ZV9mdW5jIGdldF9kYXRhX3NpemVfZnVuYzsKKyAgICBfUHlfaGFzaHRhYmxlX2FsbG9jYXRvcl90IGFsbG9jOworfSBfUHlfaGFzaHRhYmxlX3Q7CisKKy8qIGhhc2ggYW5kIGNvbXBhcmUgZnVuY3Rpb25zIGZvciBpbnRlZ2VycyBhbmQgcG9pbnRlcnMgKi8KK1B5QVBJX0ZVTkMoUHlfdWhhc2hfdCkgX1B5X2hhc2h0YWJsZV9oYXNoX3B0cihjb25zdCB2b2lkICprZXkpOworUHlBUElfRlVOQyhQeV91aGFzaF90KSBfUHlfaGFzaHRhYmxlX2hhc2hfaW50KGNvbnN0IHZvaWQgKmtleSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9jb21wYXJlX2RpcmVjdChjb25zdCB2b2lkICprZXksIGNvbnN0IF9QeV9oYXNodGFibGVfZW50cnlfdCAqZW50cnkpOworCitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfdCAqKSBfUHlfaGFzaHRhYmxlX25ldygKKyAgICBzaXplX3QgZGF0YV9zaXplLAorICAgIF9QeV9oYXNodGFibGVfaGFzaF9mdW5jIGhhc2hfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2NvbXBhcmVfZnVuYyBjb21wYXJlX2Z1bmMpOworUHlBUElfRlVOQyhfUHlfaGFzaHRhYmxlX3QgKikgX1B5X2hhc2h0YWJsZV9uZXdfZnVsbCgKKyAgICBzaXplX3QgZGF0YV9zaXplLAorICAgIHNpemVfdCBpbml0X3NpemUsCisgICAgX1B5X2hhc2h0YWJsZV9oYXNoX2Z1bmMgaGFzaF9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfY29tcGFyZV9mdW5jIGNvbXBhcmVfZnVuYywKKyAgICBfUHlfaGFzaHRhYmxlX2NvcHlfZGF0YV9mdW5jIGNvcHlfZGF0YV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfZnJlZV9kYXRhX2Z1bmMgZnJlZV9kYXRhX2Z1bmMsCisgICAgX1B5X2hhc2h0YWJsZV9nZXRfZGF0YV9zaXplX2Z1bmMgZ2V0X2RhdGFfc2l6ZV9mdW5jLAorICAgIF9QeV9oYXNodGFibGVfYWxsb2NhdG9yX3QgKmFsbG9jYXRvcik7CitQeUFQSV9GVU5DKF9QeV9oYXNodGFibGVfdCAqKSBfUHlfaGFzaHRhYmxlX2NvcHkoX1B5X2hhc2h0YWJsZV90ICpzcmMpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfaGFzaHRhYmxlX2NsZWFyKF9QeV9oYXNodGFibGVfdCAqaHQpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfaGFzaHRhYmxlX2Rlc3Ryb3koX1B5X2hhc2h0YWJsZV90ICpodCk7CisKK3R5cGVkZWYgaW50ICgqX1B5X2hhc2h0YWJsZV9mb3JlYWNoX2Z1bmMpIChfUHlfaGFzaHRhYmxlX2VudHJ5X3QgKmVudHJ5LCB2b2lkICphcmcpOworCitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9mb3JlYWNoKAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgX1B5X2hhc2h0YWJsZV9mb3JlYWNoX2Z1bmMgZnVuYywgdm9pZCAqYXJnKTsKK1B5QVBJX0ZVTkMoc2l6ZV90KSBfUHlfaGFzaHRhYmxlX3NpemUoX1B5X2hhc2h0YWJsZV90ICpodCk7CisKK1B5QVBJX0ZVTkMoX1B5X2hhc2h0YWJsZV9lbnRyeV90KikgX1B5X2hhc2h0YWJsZV9nZXRfZW50cnkoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXkpOworUHlBUElfRlVOQyhpbnQpIF9QeV9oYXNodGFibGVfc2V0KAorICAgIF9QeV9oYXNodGFibGVfdCAqaHQsCisgICAgY29uc3Qgdm9pZCAqa2V5LAorICAgIHZvaWQgKmRhdGEsCisgICAgc2l6ZV90IGRhdGFfc2l6ZSk7CitQeUFQSV9GVU5DKGludCkgX1B5X2hhc2h0YWJsZV9nZXQoCisgICAgX1B5X2hhc2h0YWJsZV90ICpodCwKKyAgICBjb25zdCB2b2lkICprZXksCisgICAgdm9pZCAqZGF0YSwKKyAgICBzaXplX3QgZGF0YV9zaXplKTsKK1B5QVBJX0ZVTkMoaW50KSBfUHlfaGFzaHRhYmxlX3BvcCgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSwKKyAgICB2b2lkICpkYXRhLAorICAgIHNpemVfdCBkYXRhX3NpemUpOworUHlBUElfRlVOQyh2b2lkKSBfUHlfaGFzaHRhYmxlX2RlbGV0ZSgKKyAgICBfUHlfaGFzaHRhYmxlX3QgKmh0LAorICAgIGNvbnN0IHZvaWQgKmtleSk7CisKKyNkZWZpbmUgX1B5X0hBU0hUQUJMRV9TRVQoVEFCTEUsIEtFWSwgREFUQSkgXAorICAgIF9QeV9oYXNodGFibGVfc2V0KFRBQkxFLCBLRVksICYoREFUQSksIHNpemVvZihEQVRBKSkKKworI2RlZmluZSBfUHlfSEFTSFRBQkxFX0dFVChUQUJMRSwgS0VZLCBEQVRBKSBcCisgICAgX1B5X2hhc2h0YWJsZV9nZXQoVEFCTEUsIEtFWSwgJihEQVRBKSwgc2l6ZW9mKERBVEEpKQorCisjZW5kaWYgICAvKiBQeV9MSU1JVEVEX0FQSSAqLworCisjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMgYi9Nb2R1bGVzL2l0ZXJ0b29sc21vZHVsZS5jCmluZGV4IGI1ODU5YTkuLjU1ZDg4YTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvaXRlcnRvb2xzbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYwpAQCAtMzk5LDcgKzM5OSw3IEBACiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgUHlPYmplY3RfSEVBRAogICAgIFB5T2JqZWN0ICppdDsKLSAgICBpbnQgbnVtcmVhZDsKKyAgICBpbnQgbnVtcmVhZDsgIC8qIDAgPD0gbnVtcmVhZCA8PSBMSU5LQ0VMTFMgKi8KICAgICBQeU9iamVjdCAqbmV4dGxpbms7CiAgICAgUHlPYmplY3QgKih2YWx1ZXNbTElOS0NFTExTXSk7CiB9IHRlZWRhdGFvYmplY3Q7CkBAIC00MDcsNyArNDA3LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECiAgICAgdGVlZGF0YW9iamVjdCAqZGF0YW9iajsKLSAgICBpbnQgaW5kZXg7CisgICAgaW50IGluZGV4OyAgICAvKiAwIDw9IGluZGV4IDw9IExJTktDRUxMUyAqLwogICAgIFB5T2JqZWN0ICp3ZWFrcmVmbGlzdDsKIH0gdGVlb2JqZWN0OwogCkBAIC0xNDkwLDE5ICsxNDkwLDIyIEBACiAgICAgUHlfc3NpemVfdCBvbGRuZXh0OwogICAgIFB5T2JqZWN0ICooKml0ZXJuZXh0KShQeU9iamVjdCAqKTsKIAorICAgIGlmIChpdCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGl0ZXJuZXh0ID0gKlB5X1RZUEUoaXQpLT50cF9pdGVybmV4dDsKICAgICB3aGlsZSAobHotPmNudCA8IGx6LT5uZXh0KSB7CiAgICAgICAgIGl0ZW0gPSBpdGVybmV4dChpdCk7CiAgICAgICAgIGlmIChpdGVtID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZW1wdHk7CiAgICAgICAgIFB5X0RFQ1JFRihpdGVtKTsKICAgICAgICAgbHotPmNudCsrOwogICAgIH0KICAgICBpZiAoc3RvcCAhPSAtMSAmJiBsei0+Y250ID49IHN0b3ApCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBnb3RvIGVtcHR5OwogICAgIGl0ZW0gPSBpdGVybmV4dChpdCk7CiAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZW1wdHk7CiAgICAgbHotPmNudCsrOwogICAgIG9sZG5leHQgPSBsei0+bmV4dDsKICAgICAvKiBUaGUgKHNpemVfdCkgY2FzdCBiZWxvdyBhdm9pZHMgdGhlIGRhbmdlciBvZiB1bmRlZmluZWQKQEAgLTE1MTEsNiArMTUxNCwxMCBAQAogICAgIGlmIChsei0+bmV4dCA8IG9sZG5leHQgfHwgKHN0b3AgIT0gLTEgJiYgbHotPm5leHQgPiBzdG9wKSkKICAgICAgICAgbHotPm5leHQgPSBzdG9wOwogICAgIHJldHVybiBpdGVtOworCitlbXB0eToKKyAgICBQeV9DTEVBUihsei0+aXQpOworICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTUyMCw2ICsxNTI3LDE4IEBACiAgICAgICogdGhlbiAnc2V0c3RhdGUnIHdpdGggdGhlIG5leHQgYW5kIGNvdW50CiAgICAgICovCiAgICAgUHlPYmplY3QgKnN0b3A7CisgICAgaWYgKGx6LT5pdCA9PSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICplbXB0eV9saXN0OworICAgICAgICBQeU9iamVjdCAqZW1wdHlfaXQ7CisgICAgICAgIGVtcHR5X2xpc3QgPSBQeUxpc3RfTmV3KDApOworICAgICAgICBpZiAoZW1wdHlfbGlzdCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGVtcHR5X2l0ID0gUHlPYmplY3RfR2V0SXRlcihlbXB0eV9saXN0KTsKKyAgICAgICAgUHlfREVDUkVGKGVtcHR5X2xpc3QpOworICAgICAgICBpZiAoZW1wdHlfaXQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhObiluIiwgUHlfVFlQRShseiksIGVtcHR5X2l0LCAwLCAwKTsKKyAgICB9CiAgICAgaWYgKGx6LT5zdG9wID09IC0xKSB7CiAgICAgICAgIHN0b3AgPSBQeV9Ob25lOwogICAgICAgICBQeV9JTkNSRUYoc3RvcCk7CkBAIC0xNzA0LDcgKzE3MjMsNyBAQAogInN0YXJtYXAoZnVuY3Rpb24sIHNlcXVlbmNlKSAtLT4gc3Rhcm1hcCBvYmplY3RcblwKIFxuXAogUmV0dXJuIGFuIGl0ZXJhdG9yIHdob3NlIHZhbHVlcyBhcmUgcmV0dXJuZWQgZnJvbSB0aGUgZnVuY3Rpb24gZXZhbHVhdGVkXG5cCi13aXRoIGEgYXJndW1lbnQgdHVwbGUgdGFrZW4gZnJvbSB0aGUgZ2l2ZW4gc2VxdWVuY2UuIik7Cit3aXRoIGFuIGFyZ3VtZW50IHR1cGxlIHRha2VuIGZyb20gdGhlIGdpdmVuIHNlcXVlbmNlLiIpOwogCiBzdGF0aWMgUHlUeXBlT2JqZWN0IHN0YXJtYXBfdHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKQEAgLTIwNjMsNiArMjA4MiwxOCBAQAogICAgIFB5X1RZUEUobHopLT50cF9mcmVlKGx6KTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK3Byb2R1Y3Rfc2l6ZW9mKHByb2R1Y3RvYmplY3QgKmx6LCB2b2lkICp1bnVzZWQpCit7CisgICAgUHlfc3NpemVfdCByZXM7CisKKyAgICByZXMgPSBzaXplb2YocHJvZHVjdG9iamVjdCk7CisgICAgcmVzICs9IFB5VHVwbGVfR0VUX1NJWkUobHotPnBvb2xzKSAqIHNpemVvZihQeV9zc2l6ZV90KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisKK1B5RG9jX1NUUlZBUihzaXplb2ZfZG9jLCAiUmV0dXJucyBzaXplIGluIG1lbW9yeSwgaW4gYnl0ZXMuIik7CisKIHN0YXRpYyBpbnQKIHByb2R1Y3RfdHJhdmVyc2UocHJvZHVjdG9iamVjdCAqbHosIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewpAQCAtMjI0MCw2ICsyMjcxLDggQEAKICAgICAgcmVkdWNlX2RvY30sCiAgICAgeyJfX3NldHN0YXRlX18iLCAgICAoUHlDRnVuY3Rpb24pcHJvZHVjdF9zZXRzdGF0ZSwgICAgTUVUSF9PLAogICAgICBzZXRzdGF0ZV9kb2N9LAorICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKXByb2R1Y3Rfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAorICAgICBzaXplb2ZfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTIzODAsNiArMjQxMywxNiBAQAogICAgIFB5X1RZUEUoY28pLT50cF9mcmVlKGNvKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICoKK2NvbWJpbmF0aW9uc19zaXplb2YoY29tYmluYXRpb25zb2JqZWN0ICpjbywgdm9pZCAqdW51c2VkKQoreworICAgIFB5X3NzaXplX3QgcmVzOworCisgICAgcmVzID0gc2l6ZW9mKGNvbWJpbmF0aW9uc29iamVjdCk7CisgICAgcmVzICs9IGNvLT5yICogc2l6ZW9mKFB5X3NzaXplX3QpOworICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKK30KKwogc3RhdGljIGludAogY29tYmluYXRpb25zX3RyYXZlcnNlKGNvbWJpbmF0aW9uc29iamVjdCAqY28sIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewpAQCAtMjU1MSw2ICsyNTk0LDggQEAKICAgICAgcmVkdWNlX2RvY30sCiAgICAgeyJfX3NldHN0YXRlX18iLCAgICAoUHlDRnVuY3Rpb24pY29tYmluYXRpb25zX3NldHN0YXRlLCAgICBNRVRIX08sCiAgICAgIHNldHN0YXRlX2RvY30sCisgICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pY29tYmluYXRpb25zX3NpemVvZiwgICAgICBNRVRIX05PQVJHUywKKyAgICAgc2l6ZW9mX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yNzA5LDYgKzI3NTQsMTYgQEAKICAgICBQeV9UWVBFKGNvKS0+dHBfZnJlZShjbyk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitjd3Jfc2l6ZW9mKGN3cm9iamVjdCAqY28sIHZvaWQgKnVudXNlZCkKK3sKKyAgICBQeV9zc2l6ZV90IHJlczsKKworICAgIHJlcyA9IHNpemVvZihjd3JvYmplY3QpOworICAgIHJlcyArPSBjby0+ciAqIHNpemVvZihQeV9zc2l6ZV90KTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisKIHN0YXRpYyBpbnQKIGN3cl90cmF2ZXJzZShjd3JvYmplY3QgKmNvLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKIHsKQEAgLTI3MzgsMTEgKzI3OTMsMTMgQEAKICAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlbXB0eTsKICAgICAgICAgY28tPnJlc3VsdCA9IHJlc3VsdDsKLSAgICAgICAgZWxlbSA9IFB5VHVwbGVfR0VUX0lURU0ocG9vbCwgMCk7Ci0gICAgICAgIGZvciAoaT0wOyBpPHIgOyBpKyspIHsKLSAgICAgICAgICAgIGFzc2VydChpbmRpY2VzW2ldID09IDApOwotICAgICAgICAgICAgUHlfSU5DUkVGKGVsZW0pOwotICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShyZXN1bHQsIGksIGVsZW0pOworICAgICAgICBpZiAobiA+IDApIHsKKyAgICAgICAgICAgIGVsZW0gPSBQeVR1cGxlX0dFVF9JVEVNKHBvb2wsIDApOworICAgICAgICAgICAgZm9yIChpPTA7IGk8ciA7IGkrKykgeworICAgICAgICAgICAgICAgIGFzc2VydChpbmRpY2VzW2ldID09IDApOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihlbGVtKTsKKyAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHJlc3VsdCwgaSwgZWxlbSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICAvKiBDb3B5IHRoZSBwcmV2aW91cyByZXN1bHQgdHVwbGUgb3IgcmUtdXNlIGl0IGlmIGF2YWlsYWJsZSAqLwpAQCAtMjg2OCw2ICsyOTI1LDggQEAKICAgICAgcmVkdWNlX2RvY30sCiAgICAgeyJfX3NldHN0YXRlX18iLCAgICAoUHlDRnVuY3Rpb24pY3dyX3NldHN0YXRlLCAgICBNRVRIX08sCiAgICAgIHNldHN0YXRlX2RvY30sCisgICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pY3dyX3NpemVvZiwgICAgICBNRVRIX05PQVJHUywKKyAgICAgc2l6ZW9mX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgIC8qIHNlbnRpbmVsICovCiB9OwogCkBAIC0yOTM0LDE4ICsyOTkzLDE4IEBACiAgICAgY3ljbGVzID0gcmFuZ2Uobi1yKzEsIG4rMSlbOjotMV0KICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXNbOnJdKQogICAgIHdoaWxlIG46Ci0gICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UocikpOgotICAgICAgICBjeWNsZXNbaV0gLT0gMQotICAgICAgICBpZiBjeWNsZXNbaV0gPT0gMDoKLSAgICAgICAgaW5kaWNlc1tpOl0gPSBpbmRpY2VzW2krMTpdICsgaW5kaWNlc1tpOmkrMV0KLSAgICAgICAgY3ljbGVzW2ldID0gbiAtIGkKKyAgICAgICAgZm9yIGkgaW4gcmV2ZXJzZWQocmFuZ2UocikpOgorICAgICAgICAgICAgY3ljbGVzW2ldIC09IDEKKyAgICAgICAgICAgIGlmIGN5Y2xlc1tpXSA9PSAwOgorICAgICAgICAgICAgICAgIGluZGljZXNbaTpdID0gaW5kaWNlc1tpKzE6XSArIGluZGljZXNbaTppKzFdCisgICAgICAgICAgICAgICAgY3ljbGVzW2ldID0gbiAtIGkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgaiA9IGN5Y2xlc1tpXQorICAgICAgICAgICAgICAgIGluZGljZXNbaV0sIGluZGljZXNbLWpdID0gaW5kaWNlc1stal0sIGluZGljZXNbaV0KKyAgICAgICAgICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXNbOnJdKQorICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGVsc2U6Ci0gICAgICAgIGogPSBjeWNsZXNbaV0KLSAgICAgICAgaW5kaWNlc1tpXSwgaW5kaWNlc1stal0gPSBpbmRpY2VzWy1qXSwgaW5kaWNlc1tpXQotICAgICAgICB5aWVsZCB0dXBsZShwb29sW2ldIGZvciBpIGluIGluZGljZXNbOnJdKQotICAgICAgICBicmVhawotICAgIGVsc2U6Ci0gICAgICAgIHJldHVybgorICAgICAgICAgICAgcmV0dXJuCiAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0zMDQ0LDYgKzMxMDMsMTcgQEAKICAgICBQeV9UWVBFKHBvKS0+dHBfZnJlZShwbyk7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitwZXJtdXRhdGlvbnNfc2l6ZW9mKHBlcm11dGF0aW9uc29iamVjdCAqcG8sIHZvaWQgKnVudXNlZCkKK3sKKyAgICBQeV9zc2l6ZV90IHJlczsKKworICAgIHJlcyA9IHNpemVvZihwZXJtdXRhdGlvbnNvYmplY3QpOworICAgIHJlcyArPSBQeVR1cGxlX0dFVF9TSVpFKHBvLT5wb29sKSAqIHNpemVvZihQeV9zc2l6ZV90KTsKKyAgICByZXMgKz0gcG8tPnIgKiBzaXplb2YoUHlfc3NpemVfdCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOworfQorCiBzdGF0aWMgaW50CiBwZXJtdXRhdGlvbnNfdHJhdmVyc2UocGVybXV0YXRpb25zb2JqZWN0ICpwbywgdmlzaXRwcm9jIHZpc2l0LCB2b2lkICphcmcpCiB7CkBAIC0zMjQ5LDYgKzMzMTksOCBAQAogICAgICByZWR1Y2VfZG9jfSwKICAgICB7Il9fc2V0c3RhdGVfXyIsICAgIChQeUNGdW5jdGlvbilwZXJtdXRhdGlvbnNfc2V0c3RhdGUsICAgIE1FVEhfTywKICAgICAgc2V0c3RhdGVfZG9jfSwKKyAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilwZXJtdXRhdGlvbnNfc2l6ZW9mLCAgICAgIE1FVEhfTk9BUkdTLAorICAgICBzaXplb2ZfZG9jfSwKICAgICB7TlVMTCwgICAgICAgICAgICAgIE5VTEx9ICAgLyogc2VudGluZWwgKi8KIH07CiAKQEAgLTQwNTMsMTQgKzQxMjUsMTcgQEAKIHsKICAgICByZXBlYXRvYmplY3QgKnJvOwogICAgIFB5T2JqZWN0ICplbGVtZW50OwotICAgIFB5X3NzaXplX3QgY250ID0gLTE7CisgICAgUHlfc3NpemVfdCBjbnQgPSAtMSwgbl9rd2RzID0gMDsKICAgICBzdGF0aWMgY2hhciAqa3dhcmdzW10gPSB7Im9iamVjdCIsICJ0aW1lcyIsIE5VTEx9OwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98bjpyZXBlYXQiLCBrd2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVsZW1lbnQsICZjbnQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVR1cGxlX1NpemUoYXJncykgPT0gMiAmJiBjbnQgPCAwKQorICAgIGlmIChrd2RzICE9IE5VTEwpCisgICAgICAgIG5fa3dkcyA9IFB5RGljdF9TaXplKGt3ZHMpOworICAgIC8qIERvZXMgdXNlciBzdXBwbHkgdGltZXMgYXJndW1lbnQ/ICovCisgICAgaWYgKChQeVR1cGxlX1NpemUoYXJncykgKyBuX2t3ZHMgPT0gMikgJiYgY250IDwgMCkKICAgICAgICAgY250ID0gMDsKIAogICAgIHJvID0gKHJlcGVhdG9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tYWluLmMgYi9Nb2R1bGVzL21haW4uYwppbmRleCAzY2ZjOWMzLi44N2EyMWQ3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL21haW4uYworKysgYi9Nb2R1bGVzL21haW4uYwpAQCAtNSwxMSArNSw2IEBACiAKICNpbmNsdWRlIDxsb2NhbGUuaD4KIAotI2lmZGVmIF9fVk1TCi0jZXJyb3IgIlBFUCAxMTogVk1TIGlzIG5vdyB1bnN1cHBvcnRlZCwgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNCIKLSNpbmNsdWRlIDx1bml4bGliLmg+Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0NZR1dJTl9fKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpZmRlZiBIQVZFX0ZDTlRMX0gKQEAgLTIyLDE1ICsxNywxMSBAQAogI2luY2x1ZGUgPGNydGRiZy5oPgogI2VuZGlmCiAKLSNpZiAoZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWYgZGVmaW5lZChNU19XSU5ET1dTKQogI2RlZmluZSBQWVRIT05IT01FSEVMUCAiPHByZWZpeD5cXGxpYiIKICNlbHNlCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgUFlUSE9OSE9NRUhFTFAgIjxwcmVmaXg+L0xpYiIKLSNlbHNlCiAjZGVmaW5lIFBZVEhPTkhPTUVIRUxQICI8cHJlZml4Pi9weXRob25YLlgiCiAjZW5kaWYKLSNlbmRpZgogCiAjaW5jbHVkZSAicHlnZXRvcHQuaCIKIApAQCAtNDcsNyArMzgsNyBAQAogc3RhdGljIGludCAgb3JpZ19hcmdjOwogCiAvKiBjb21tYW5kIGxpbmUgb3B0aW9ucyAqLwotI2RlZmluZSBCQVNFX09QVFMgTCJiQmM6ZEVoaUptOk9xUnNTdHV2Vlc6eFg6PyIKKyNkZWZpbmUgQkFTRV9PUFRTIEwiYkJjOmRFaGlJSm06T3FSc1N0dXZWVzp4WDo/IgogCiAjZGVmaW5lIFBST0dSQU1fT1BUUyBCQVNFX09QVFMKIApAQCAtNjksNiArNjAsNyBAQAogc3RhdGljIGNoYXIgKnVzYWdlXzIgPSAiXAogLWkgICAgIDogaW5zcGVjdCBpbnRlcmFjdGl2ZWx5IGFmdGVyIHJ1bm5pbmcgc2NyaXB0OyBmb3JjZXMgYSBwcm9tcHQgZXZlblxuXAogICAgICAgICAgaWYgc3RkaW4gZG9lcyBub3QgYXBwZWFyIHRvIGJlIGEgdGVybWluYWw7IGFsc28gUFlUSE9OSU5TUEVDVD14XG5cCistSSAgICAgOiBpc29sYXRlIFB5dGhvbiBmcm9tIHRoZSB1c2VyJ3MgZW52aXJvbm1lbnQgKGltcGxpZXMgLUUgYW5kIC1zKVxuXAogLW0gbW9kIDogcnVuIGxpYnJhcnkgbW9kdWxlIGFzIGEgc2NyaXB0ICh0ZXJtaW5hdGVzIG9wdGlvbiBsaXN0KVxuXAogLU8gICAgIDogb3B0aW1pemUgZ2VuZXJhdGVkIGJ5dGVjb2RlIHNsaWdodGx5OyBhbHNvIFBZVEhPTk9QVElNSVpFPXhcblwKIC1PTyAgICA6IHJlbW92ZSBkb2Mtc3RyaW5ncyBpbiBhZGRpdGlvbiB0byB0aGUgLU8gb3B0aW1pemF0aW9uc1xuXApAQCAtMTI3LDI2ICsxMTksMTQgQEAKICAgICAgICAgZnByaW50ZihmLCB1c2FnZV81LCBERUxJTSwgUFlUSE9OSE9NRUhFTFApOwogICAgICAgICBmcHV0cyh1c2FnZV82LCBmKTsKICAgICB9Ci0jaWYgZGVmaW5lZChfX1ZNUykKLSAgICBpZiAoZXhpdGNvZGUgPT0gMCkgewotICAgICAgICAvKiBzdXBwcmVzcyAnZXJyb3InIG1lc3NhZ2UgKi8KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICAvKiBTVFMkTV9JTkhJQl9NU0cgKyBTUyRfQUJPUlQgKi8KLSAgICAgICAgcmV0dXJuIDB4MTAwMDAwMmM7Ci0gICAgfQotI2Vsc2UKICAgICByZXR1cm4gZXhpdGNvZGU7Ci0jZW5kaWYKLSAgICAvKk5PVFJFQUNIRUQqLwogfQogCiBzdGF0aWMgdm9pZCBSdW5TdGFydHVwRmlsZShQeUNvbXBpbGVyRmxhZ3MgKmNmKQogewogICAgIGNoYXIgKnN0YXJ0dXAgPSBQeV9HRVRFTlYoIlBZVEhPTlNUQVJUVVAiKTsKICAgICBpZiAoc3RhcnR1cCAhPSBOVUxMICYmIHN0YXJ0dXBbMF0gIT0gJ1wwJykgewotICAgICAgICBGSUxFICpmcCA9IGZvcGVuKHN0YXJ0dXAsICJyIik7CisgICAgICAgIEZJTEUgKmZwID0gX1B5X2ZvcGVuKHN0YXJ0dXAsICJyIik7CiAgICAgICAgIGlmIChmcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAodm9pZCkgUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MoZnAsIHN0YXJ0dXAsIDAsIGNmKTsKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CkBAIC0xNjUsNiArMTQ1LDMyIEBACiAgICAgfQogfQogCitzdGF0aWMgdm9pZCBSdW5JbnRlcmFjdGl2ZUhvb2sodm9pZCkKK3sKKyAgICBQeU9iamVjdCAqc3lzLCAqaG9vaywgKnJlc3VsdDsKKyAgICBzeXMgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoInN5cyIpOworICAgIGlmIChzeXMgPT0gTlVMTCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBob29rID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhzeXMsICJfX2ludGVyYWN0aXZlaG9va19fIik7CisgICAgUHlfREVDUkVGKHN5cyk7CisgICAgaWYgKGhvb2sgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBlbHNlIHsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbE9iamVjdChob29rLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGhvb2spOworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBlbHNlCisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICB9CisgICAgcmV0dXJuOworCitlcnJvcjoKKyAgICBQeVN5c19Xcml0ZVN0ZGVycigiRmFpbGVkIGNhbGxpbmcgc3lzLl9faW50ZXJhY3RpdmVob29rX19cbiIpOworICAgIFB5RXJyX1ByaW50KCk7CisgICAgUHlFcnJfQ2xlYXIoKTsKK30KKwogCiBzdGF0aWMgaW50IFJ1bk1vZHVsZSh3Y2hhcl90ICptb2RuYW1lLCBpbnQgc2V0X2FyZ3YwKQogewpAQCAtMTcyLDE3ICsxNzgsMjAgQEAKICAgICBydW5weSA9IFB5SW1wb3J0X0ltcG9ydE1vZHVsZSgicnVucHkiKTsKICAgICBpZiAocnVucHkgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBpbXBvcnQgcnVucHkgbW9kdWxlXG4iKTsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBydW5tb2R1bGUgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHJ1bnB5LCAiX3J1bl9tb2R1bGVfYXNfbWFpbiIpOwogICAgIGlmIChydW5tb2R1bGUgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBhY2Nlc3MgcnVucHkuX3J1bl9tb2R1bGVfYXNfbWFpblxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgbW9kdWxlID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihtb2RuYW1lLCB3Y3NsZW4obW9kbmFtZSkpOwogICAgIGlmIChtb2R1bGUgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb252ZXJ0IG1vZHVsZSBuYW1lIHRvIHVuaWNvZGVcbiIpOworICAgICAgICBQeUVycl9QcmludCgpOwogICAgICAgICBQeV9ERUNSRUYocnVucHkpOwogICAgICAgICBQeV9ERUNSRUYocnVubW9kdWxlKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTkxLDYgKzIwMCw3IEBACiAgICAgaWYgKHJ1bmFyZ3MgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICJDb3VsZCBub3QgY3JlYXRlIGFyZ3VtZW50cyBmb3IgcnVucHkuX3J1bl9tb2R1bGVfYXNfbWFpblxuIik7CisgICAgICAgIFB5RXJyX1ByaW50KCk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5weSk7CiAgICAgICAgIFB5X0RFQ1JFRihydW5tb2R1bGUpOwogICAgICAgICBQeV9ERUNSRUYobW9kdWxlKTsKQEAgLTIzNSw4ICsyNDUsMTAgQEAKICAgICAvKiBhcmd2MCBpcyB1c2FibGUgYXMgYW4gaW1wb3J0IHNvdXJjZSwgc28gcHV0IGl0IGluIHN5cy5wYXRoWzBdCiAgICAgICAgYW5kIGltcG9ydCBfX21haW5fXyAqLwogICAgIHN5c19wYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7Ci0gICAgaWYgKHN5c19wYXRoID09IE5VTEwpCisgICAgaWYgKHN5c19wYXRoID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLnBhdGgiKTsKICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAgICAgaWYgKFB5TGlzdF9TZXRJdGVtKHN5c19wYXRoLCAwLCBhcmd2MCkpIHsKICAgICAgICAgYXJndjAgPSBOVUxMOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMzY2LDcgKzM3OCw3IEBACiAgICAgICAgICAgICAgICBjb21tYW5kIHRvIGludGVycHJldC4gKi8KIAogICAgICAgICAgICAgbGVuID0gd2NzbGVuKF9QeU9TX29wdGFyZykgKyAxICsgMTsKLSAgICAgICAgICAgIGNvbW1hbmQgPSAod2NoYXJfdCAqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiBsZW4pOworICAgICAgICAgICAgY29tbWFuZCA9ICh3Y2hhcl90ICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIGxlbik7CiAgICAgICAgICAgICBpZiAoY29tbWFuZCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgLWMgYXJndW1lbnQiKTsKQEAgLTM5OCw2ICs0MTAsMTIgQEAKICAgICAgICAgICAgIFB5X0ludGVyYWN0aXZlRmxhZysrOwogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgY2FzZSAnSSc6CisgICAgICAgICAgICBQeV9Jc29sYXRlZEZsYWcrKzsKKyAgICAgICAgICAgIFB5X05vVXNlclNpdGVEaXJlY3RvcnkrKzsKKyAgICAgICAgICAgIFB5X0lnbm9yZUVudmlyb25tZW50RmxhZysrOworICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgLyogY2FzZSAnSic6IHJlc2VydmVkIGZvciBKeXRob24gKi8KIAogICAgICAgICBjYXNlICdPJzoKQEAgLTQ3NSw3ICs0OTMsNyBAQAogICAgICAgICByZXR1cm4gdXNhZ2UoMCwgYXJndlswXSk7CiAKICAgICBpZiAodmVyc2lvbikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlB5dGhvbiAlc1xuIiwgUFlfVkVSU0lPTik7CisgICAgICAgIHByaW50ZigiUHl0aG9uICVzXG4iLCBQWV9WRVJTSU9OKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC00OTUsNyArNTEzLDcgQEAKICAgICAgICAgKndwICE9IEwnXDAnKSB7CiAgICAgICAgIHdjaGFyX3QgKmJ1ZiwgKndhcm5pbmc7CiAKLSAgICAgICAgYnVmID0gKHdjaGFyX3QgKiltYWxsb2MoKHdjc2xlbih3cCkgKyAxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIGJ1ZiA9ICh3Y2hhcl90ICopUHlNZW1fUmF3TWFsbG9jKCh3Y3NsZW4od3ApICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKAogICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggbWVtb3J5IHRvIGNvcHkgUFlUSE9OV0FSTklOR1MiKTsKQEAgLTUwNSw3ICs1MjMsNyBAQAogICAgICAgICAgICAgIHdhcm5pbmcgPSB3Y3N0b2soTlVMTCwgTCIsIikpIHsKICAgICAgICAgICAgIFB5U3lzX0FkZFdhcm5PcHRpb24od2FybmluZyk7CiAgICAgICAgIH0KLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGJ1Zik7CiAgICAgfQogI2Vsc2UKICAgICBpZiAoKHAgPSBQeV9HRVRFTlYoIlBZVEhPTldBUk5JTkdTIikpICYmICpwICE9ICdcMCcpIHsKQEAgLTUxNCwxMiArNTMyLDEyIEBACiAKICAgICAgICAgLyogc2V0dGxlIGZvciBzdHJ0b2sgaGVyZSBhcyB0aGVyZSdzIG5vIG9uZSBzdGFuZGFyZAogICAgICAgICAgICBDODkgd2NzdG9rICovCi0gICAgICAgIGJ1ZiA9IChjaGFyICopbWFsbG9jKHN0cmxlbihwKSArIDEpOworICAgICAgICBidWYgPSAoY2hhciAqKVB5TWVtX1Jhd01hbGxvYyhzdHJsZW4ocCkgKyAxKTsKICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IFBZVEhPTldBUk5JTkdTIik7CiAgICAgICAgIHN0cmNweShidWYsIHApOwotICAgICAgICBvbGRsb2MgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworICAgICAgICBvbGRsb2MgPSBfUHlNZW1fUmF3U3RyZHVwKHNldGxvY2FsZShMQ19BTEwsIE5VTEwpKTsKICAgICAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgICAgICBmb3IgKHAgPSBzdHJ0b2soYnVmLCAiLCIpOyBwICE9IE5VTEw7IHAgPSBzdHJ0b2soTlVMTCwgIiwiKSkgewogI2lmZGVmIF9fQVBQTEVfXwpAQCAtNTM3LDIyICs1NTUsMTUgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgfQogICAgICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOwotICAgICAgICBmcmVlKG9sZGxvYyk7Ci0gICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOworICAgICAgICBQeU1lbV9SYXdGcmVlKGJ1Zik7CiAgICAgfQogI2VuZGlmCiAKICAgICBpZiAoY29tbWFuZCA9PSBOVUxMICYmIG1vZHVsZSA9PSBOVUxMICYmIF9QeU9TX29wdGluZCA8IGFyZ2MgJiYKICAgICAgICAgd2NzY21wKGFyZ3ZbX1B5T1Nfb3B0aW5kXSwgTCItIikgIT0gMCkKICAgICB7Ci0jaWZkZWYgX19WTVMKLSAgICAgICAgZmlsZW5hbWUgPSBkZWNjJHRyYW5zbGF0ZV92bXMoYXJndltfUHlPU19vcHRpbmRdKTsKLSAgICAgICAgaWYgKGZpbGVuYW1lID09IChjaGFyICopMCB8fCBmaWxlbmFtZSA9PSAoY2hhciAqKS0xKQotICAgICAgICAgICAgZmlsZW5hbWUgPSBhcmd2W19QeU9TX29wdGluZF07Ci0KLSNlbHNlCiAgICAgICAgIGZpbGVuYW1lID0gYXJndltfUHlPU19vcHRpbmRdOwotI2VuZGlmCiAgICAgfQogCiAgICAgc3RkaW5faXNfaW50ZXJhY3RpdmUgPSBQeV9GZElzSW50ZXJhY3RpdmUoc3RkaW4sIChjaGFyICopMCk7CkBAIC01ODgsMTEgKzU5OSw2IEBACiAjZW5kaWYgLyogIU1TX1dJTkRPV1MgKi8KICAgICAgICAgLyogTGVhdmUgc3RkZXJyIGFsb25lIC0gaXQgc2hvdWxkIGJlIHVuYnVmZmVyZWQgYW55d2F5LiAqLwogICAgIH0KLSNpZmRlZiBfX1ZNUwotICAgIGVsc2UgewotICAgICAgICBzZXR2YnVmIChzdGRvdXQsIChjaGFyICopTlVMTCwgX0lPTEJGLCBCVUZTSVopOwotICAgIH0KLSNlbmRpZiAvKiBfX1ZNUyAqLwogCiAjaWZkZWYgX19BUFBMRV9fCiAgICAgLyogT24gTWFjT1MgWCwgd2hlbiB0aGUgUHl0aG9uIGludGVycHJldGVyIGlzIGVtYmVkZGVkIGluIGFuCkBAIC02MDgsNyArNjE0LDcgQEAKICAgICAgICAgd2NoYXJfdCogYnVmZmVyOwogICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKHApICsgMTsKIAotICAgICAgICBidWZmZXIgPSBtYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICAgICAgYnVmZmVyID0gUHlNZW1fUmF3TWFsbG9jKGxlbiAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigKICAgICAgICAgICAgICAgICJub3QgZW5vdWdoIG1lbW9yeSB0byBjb3B5IFBZVEhPTkVYRUNVVEFCTEUiKTsKQEAgLTY4Miw3ICs2ODgsNyBAQAogCiAgICAgaWYgKGNvbW1hbmQpIHsKICAgICAgICAgc3RzID0gcnVuX2NvbW1hbmQoY29tbWFuZCwgJmNmKTsKLSAgICAgICAgZnJlZShjb21tYW5kKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShjb21tYW5kKTsKICAgICB9IGVsc2UgaWYgKG1vZHVsZSkgewogICAgICAgICBzdHMgPSAoUnVuTW9kdWxlKG1vZHVsZSwgMSkgIT0gMCk7CiAgICAgfQpAQCAtNjkxLDYgKzY5Nyw3IEBACiAgICAgICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMICYmIHN0ZGluX2lzX2ludGVyYWN0aXZlKSB7CiAgICAgICAgICAgICBQeV9JbnNwZWN0RmxhZyA9IDA7IC8qIGRvIGV4aXQgb24gU3lzdGVtRXhpdCAqLwogICAgICAgICAgICAgUnVuU3RhcnR1cEZpbGUoJmNmKTsKKyAgICAgICAgICAgIFJ1bkludGVyYWN0aXZlSG9vaygpOwogICAgICAgICB9CiAgICAgICAgIC8qIFhYWCAqLwogCkBAIC03NTYsNiArNzYzLDcgQEAKICAgICBpZiAoUHlfSW5zcGVjdEZsYWcgJiYgc3RkaW5faXNfaW50ZXJhY3RpdmUgJiYKICAgICAgICAgKGZpbGVuYW1lICE9IE5VTEwgfHwgY29tbWFuZCAhPSBOVUxMIHx8IG1vZHVsZSAhPSBOVUxMKSkgewogICAgICAgICBQeV9JbnNwZWN0RmxhZyA9IDA7CisgICAgICAgIFJ1bkludGVyYWN0aXZlSG9vaygpOwogICAgICAgICAvKiBYWFggKi8KICAgICAgICAgc3RzID0gUHlSdW5fQW55RmlsZUZsYWdzKHN0ZGluLCAiPHN0ZGluPiIsICZjZikgIT0gMDsKICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL21ha2VzZXR1cCBiL01vZHVsZXMvbWFrZXNldHVwCmluZGV4IDQwZGZhOWQuLjhiNWNjMjggMTAwNzU1Ci0tLSBhL01vZHVsZXMvbWFrZXNldHVwCisrKyBiL01vZHVsZXMvbWFrZXNldHVwCkBAIC0yMTcsNyArMjE3LDcgQEAKIAkJCSopIHNyYz0nJChzcmNkaXIpLyciJHNyY2Rpci8kc3JjIjs7CiAJCQllc2FjCiAJCQljYXNlICRkb2NvbmZpZyBpbgotCQkJbm8pCWNjPSIkY2MgXCQoQ0NTSEFSRUQpIFwkKENGTEFHUykgXCQoQ1BQRkxBR1MpIjs7CisJCQlubykJY2M9IiRjYyBcJChDQ1NIQVJFRCkgXCQoUFlfQ0ZMQUdTKSBcJChQWV9DUFBGTEFHUykiOzsKIAkJCSopCiAJCQkJY2M9IiRjYyBcJChQWV9DT1JFX0NGTEFHUykiOzsKIAkJCWVzYWMKQEAgLTIyOSwxMSArMjI5LDcgQEAKIAkJZXNhYwogCQlmb3IgbW9kIGluICRtb2RzCiAJCWRvCi0JCQljYXNlICRvYmpzIGluCi0JCQkqJG1vZC5vKikJYmFzZT0kbW9kOzsKLQkJCSopCQliYXNlPSR7bW9kfW1vZHVsZTs7Ci0JCQllc2FjCi0JCQlmaWxlPSIkc3JjZGlyLyRiYXNlXCQoU08pIgorCQkJZmlsZT0iJHNyY2Rpci8kbW9kXCQoRVhUX1NVRkZJWCkiCiAJCQljYXNlICRkb2NvbmZpZyBpbgogCQkJbm8pCVNIQVJFRE1PRFM9IiRTSEFSRURNT0RTICRmaWxlIjs7CiAJCQllc2FjCmRpZmYgLS1naXQgYS9Nb2R1bGVzL21hdGhtb2R1bGUuYyBiL01vZHVsZXMvbWF0aG1vZHVsZS5jCmluZGV4IDdmMDk0ZmYuLjI0M2UyYTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWF0aG1vZHVsZS5jCisrKyBiL01vZHVsZXMvbWF0aG1vZHVsZS5jCkBAIC04NzMsMTggKzg3MywxOCBAQAogRlVOQzEoYWNvcywgYWNvcywgMCwKICAgICAgICJhY29zKHgpXG5cblJldHVybiB0aGUgYXJjIGNvc2luZSAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQogRlVOQzEoYWNvc2gsIG1fYWNvc2gsIDAsCi0gICAgICAiYWNvc2goeClcblxuUmV0dXJuIHRoZSBoeXBlcmJvbGljIGFyYyBjb3NpbmUgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKKyAgICAgICJhY29zaCh4KVxuXG5SZXR1cm4gdGhlIGludmVyc2UgaHlwZXJib2xpYyBjb3NpbmUgb2YgeC4iKQogRlVOQzEoYXNpbiwgYXNpbiwgMCwKICAgICAgICJhc2luKHgpXG5cblJldHVybiB0aGUgYXJjIHNpbmUgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKIEZVTkMxKGFzaW5oLCBtX2FzaW5oLCAwLAotICAgICAgImFzaW5oKHgpXG5cblJldHVybiB0aGUgaHlwZXJib2xpYyBhcmMgc2luZSAobWVhc3VyZWQgaW4gcmFkaWFucykgb2YgeC4iKQorICAgICAgImFzaW5oKHgpXG5cblJldHVybiB0aGUgaW52ZXJzZSBoeXBlcmJvbGljIHNpbmUgb2YgeC4iKQogRlVOQzEoYXRhbiwgYXRhbiwgMCwKICAgICAgICJhdGFuKHgpXG5cblJldHVybiB0aGUgYXJjIHRhbmdlbnQgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKIEZVTkMyKGF0YW4yLCBtX2F0YW4yLAogICAgICAgImF0YW4yKHksIHgpXG5cblJldHVybiB0aGUgYXJjIHRhbmdlbnQgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHkveC5cbiIKICAgICAgICJVbmxpa2UgYXRhbih5L3gpLCB0aGUgc2lnbnMgb2YgYm90aCB4IGFuZCB5IGFyZSBjb25zaWRlcmVkLiIpCiBGVU5DMShhdGFuaCwgbV9hdGFuaCwgMCwKLSAgICAgICJhdGFuaCh4KVxuXG5SZXR1cm4gdGhlIGh5cGVyYm9saWMgYXJjIHRhbmdlbnQgKG1lYXN1cmVkIGluIHJhZGlhbnMpIG9mIHguIikKKyAgICAgICJhdGFuaCh4KVxuXG5SZXR1cm4gdGhlIGludmVyc2UgaHlwZXJib2xpYyB0YW5nZW50IG9mIHguIikKIAogc3RhdGljIFB5T2JqZWN0ICogbWF0aF9jZWlsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbnVtYmVyKSB7CiAgICAgX1B5X0lERU5USUZJRVIoX19jZWlsX18pOwpAQCAtOTkyLDcgKzk5Miw3IEBACiAgICBOb3RlIDQ6IEEgc2ltaWxhciBpbXBsZW1lbnRhdGlvbiBpcyBpbiBNb2R1bGVzL2NtYXRobW9kdWxlLmMuCiAgICBCZSBzdXJlIHRvIHVwZGF0ZSBib3RoIHdoZW4gbWFraW5nIGNoYW5nZXMuCiAKLSAgIE5vdGUgNTogVGhlIHNpZ25hdHVyZSBvZiBtYXRoLmZzdW0oKSBkaWZmZXJzIGZyb20gX19idWlsdGluX18uc3VtKCkKKyAgIE5vdGUgNTogVGhlIHNpZ25hdHVyZSBvZiBtYXRoLmZzdW0oKSBkaWZmZXJzIGZyb20gYnVpbHRpbnMuc3VtKCkKICAgIGJlY2F1c2UgdGhlIHN0YXJ0IGFyZ3VtZW50IGRvZXNuJ3QgbWFrZSBzZW5zZSBpbiB0aGUgY29udGV4dCBvZgogICAgYWNjdXJhdGUgc3VtbWF0aW9uLiAgU2luY2UgdGhlIHBhcnRpYWxzIHRhYmxlIGlzIGNvbGxhcHNlZCBiZWZvcmUKICAgIHJldHVybmluZyBhIHJlc3VsdCwgc3VtKHNlcTIsIHN0YXJ0PXN1bShzZXExKSkgbWF5IG5vdCBlcXVhbCB0aGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvbWQ1bW9kdWxlLmMgYi9Nb2R1bGVzL21kNW1vZHVsZS5jCmluZGV4IDEyZTE4N2MuLjVjYjNkMzYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvbWQ1bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9tZDVtb2R1bGUuYwpAQCAtOTEsMTAgKzkxLDYgQEAKICAgICAgICAoeSlbM10gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVsyXSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICBcCiAgICAgICAgKHkpWzFdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICh5KVswXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMjU1KTsgfQogCi0jaWZuZGVmIE1JTgotICAgI2RlZmluZSBNSU4oeCwgeSkgKCAoKHgpPCh5KSk/KHgpOih5KSApCi0jZW5kaWYKLQogCiAvKiBNRDUgbWFjcm9zICovCiAKQEAgLTI0NCw5ICsyNDAsOSBAQAogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBNRDVfQkxPQ0tTSVpFOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBNRDVfQkxPQ0tTSVpFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICBuID0gTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoTUQ1X0JMT0NLU0laRSAtIG1kNS0+Y3VybGVuKSk7CisgICAgICAgICAgIG4gPSBQeV9NSU4oaW5sZW4sIChQeV9zc2l6ZV90KShNRDVfQkxPQ0tTSVpFIC0gbWQ1LT5jdXJsZW4pKTsKICAgICAgICAgICAgbWVtY3B5KG1kNS0+YnVmICsgbWQ1LT5jdXJsZW4sIGluLCAoc2l6ZV90KW4pOwotICAgICAgICAgICBtZDUtPmN1cmxlbiAgICArPSBuOworICAgICAgICAgICBtZDUtPmN1cmxlbiAgICArPSAoTUQ1X0lOVDMyKW47CiAgICAgICAgICAgIGluICAgICAgICAgICAgICs9IG47CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IG47CiAgICAgICAgICAgIGlmIChtZDUtPmN1cmxlbiA9PSBNRDVfQkxPQ0tTSVpFKSB7CkBAIC00NDMsNyArNDM5LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBNRDVfZ2V0X25hbWUoUHlPYmplY3QgKnNlbGYsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiTUQ1IiwgMyk7CisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgibWQ1IiwgMyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NzYsOCArNTcyLDE3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19tZDUodm9pZCkKIHsKKyAgICBQeU9iamVjdCAqbTsKKwogICAgIFB5X1RZUEUoJk1ENXR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJk1ENXR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX21kNW1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfbWQ1bW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmTUQ1dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJNRDVUeXBlIiwgKFB5T2JqZWN0ICopJk1ENXR5cGUpOworICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9tbWFwbW9kdWxlLmMgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwppbmRleCAxMTA3ZWI4Li5hMGNjZWViIDEwMDY0NAotLS0gYS9Nb2R1bGVzL21tYXBtb2R1bGUuYworKysgYi9Nb2R1bGVzL21tYXBtb2R1bGUuYwpAQCAtMjAsMTIgKzIwLDEzIEBACiAKICNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogI2luY2x1ZGUgPFB5dGhvbi5oPgorI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCiAjaWZuZGVmIE1TX1dJTkRPV1MKICNkZWZpbmUgVU5JWAotIyBpZmRlZiBfX0FQUExFX18KKyMgaWZkZWYgSEFWRV9GQ05UTF9ICiAjICBpbmNsdWRlIDxmY250bC5oPgotIyBlbmRpZgorIyBlbmRpZiAvKiBIQVZFX0ZDTlRMX0ggKi8KICNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtMTA4LDYgKzEwOSw3IEBACiAgICAgaW50IGZkOwogI2VuZGlmCiAKKyAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7CiAgICAgYWNjZXNzX21vZGUgYWNjZXNzOwogfSBtbWFwX29iamVjdDsKIApAQCAtMTM0LDYgKzEzNiw4IEBACiAgICAgfQogI2VuZGlmIC8qIFVOSVggKi8KIAorICAgIGlmIChtX29iai0+d2Vha3JlZmxpc3QgIT0gTlVMTCkKKyAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcygoUHlPYmplY3QgKikgbV9vYmopOwogICAgIFB5X1RZUEUobV9vYmopLT50cF9mcmVlKChQeU9iamVjdCopbV9vYmopOwogfQogCkBAIC03MDUsNiArNzA5LDE5IEBACiAgICAgcmV0dXJuIF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoc2VsZiwgJlB5SWRfY2xvc2UsIE5VTEwpOwogfQogCisjaWZkZWYgTVNfV0lORE9XUworc3RhdGljIFB5T2JqZWN0ICoKK21tYXBfX3NpemVvZl9fbWV0aG9kKG1tYXBfb2JqZWN0ICpzZWxmLCB2b2lkICp1bnVzZWQpCit7CisgICAgUHlfc3NpemVfdCByZXM7CisKKyAgICByZXMgPSBzaXplb2YobW1hcF9vYmplY3QpOworICAgIGlmIChzZWxmLT50YWduYW1lKQorICAgICAgICByZXMgKz0gc3RybGVuKHNlbGYtPnRhZ25hbWUpICsgMTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KHJlcyk7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBQeU1ldGhvZERlZiBtbWFwX29iamVjdF9tZXRob2RzW10gPSB7CiAgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pIG1tYXBfY2xvc2VfbWV0aG9kLCAgICAgICAgTUVUSF9OT0FSR1N9LAogICAgIHsiZmluZCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKSBtbWFwX2ZpbmRfbWV0aG9kLCAgICAgICAgIE1FVEhfVkFSQVJHU30sCkBAIC03MjIsNiArNzM5LDkgQEAKICAgICB7IndyaXRlX2J5dGUiLCAgICAgIChQeUNGdW5jdGlvbikgbW1hcF93cml0ZV9ieXRlX21ldGhvZCwgICBNRVRIX1ZBUkFSR1N9LAogICAgIHsiX19lbnRlcl9fIiwgICAgICAgKFB5Q0Z1bmN0aW9uKSBtbWFwX19lbnRlcl9fbWV0aG9kLCAgICAgIE1FVEhfTk9BUkdTfSwKICAgICB7Il9fZXhpdF9fIiwgICAgICAgIChQeUNGdW5jdGlvbikgbW1hcF9fZXhpdF9fbWV0aG9kLCAgICAgICBNRVRIX1ZBUkFSR1N9LAorI2lmZGVmIE1TX1dJTkRPV1MKKyAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbikgbW1hcF9fc2l6ZW9mX19tZXRob2QsICAgICBNRVRIX05PQVJHU30sCisjZW5kaWYKICAgICB7TlVMTCwgICAgICAgICBOVUxMfSAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIApAQCAtMTAzMiw3ICsxMDUyLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCisgICAgb2Zmc2V0b2YobW1hcF9vYmplY3QsIHdlYWtyZWZsaXN0KSwgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KICAgICBtbWFwX29iamVjdF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KQEAgLTExNTQsMTIgKzExNzQsNiBAQAogICAgICAgICAodm9pZClmY250bChmZCwgRl9GVUxMRlNZTkMpOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9GU1RBVAotIyAgaWZkZWYgX19WTVMKLSAgICAvKiBvbiBPcGVuVk1TIHdlIG11c3QgZW5zdXJlIHRoYXQgYWxsIGJ5dGVzIGFyZSB3cml0dGVuIHRvIHRoZSBmaWxlICovCi0gICAgaWYgKGZkICE9IC0xKSB7Ci0gICAgICAgIGZzeW5jKGZkKTsKLSAgICB9Ci0jICBlbmRpZgogICAgIGlmIChmZCAhPSAtMSAmJiBmc3RhdChmZCwgJnN0KSA9PSAwICYmIFNfSVNSRUcoc3Quc3RfbW9kZSkpIHsKICAgICAgICAgaWYgKG1hcF9zaXplID09IDApIHsKICAgICAgICAgICAgIGlmIChzdC5zdF9zaXplID09IDApIHsKQEAgLTExOTAsNiArMTIwNCw3IEBACiAgICAgbV9vYmotPmRhdGEgPSBOVUxMOwogICAgIG1fb2JqLT5zaXplID0gKHNpemVfdCkgbWFwX3NpemU7CiAgICAgbV9vYmotPnBvcyA9IChzaXplX3QpIDA7CisgICAgbV9vYmotPndlYWtyZWZsaXN0ID0gTlVMTDsKICAgICBtX29iai0+ZXhwb3J0cyA9IDA7CiAgICAgbV9vYmotPm9mZnNldCA9IG9mZnNldDsKICAgICBpZiAoZmQgPT0gLTEpIHsKQEAgLTEyMDMsMTggKzEyMTgsMTggQEAKICAgICAgICAgZmxhZ3MgfD0gTUFQX0FOT05ZTU9VUzsKICNlbHNlCiAgICAgICAgIC8qIFNWUjQgbWV0aG9kIHRvIG1hcCBhbm9ueW1vdXMgbWVtb3J5IGlzIHRvIG9wZW4gL2Rldi96ZXJvICovCi0gICAgICAgIGZkID0gZGV2emVybyA9IG9wZW4oIi9kZXYvemVybyIsIE9fUkRXUik7CisgICAgICAgIGZkID0gZGV2emVybyA9IF9QeV9vcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpOwogICAgICAgICBpZiAoZGV2emVybyA9PSAtMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKG1fb2JqKTsKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAjZW5kaWYKLSAgICB9IGVsc2UgewotICAgICAgICBtX29iai0+ZmQgPSBkdXAoZmQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbV9vYmotPmZkID0gX1B5X2R1cChmZCk7CiAgICAgICAgIGlmIChtX29iai0+ZmQgPT0gLTEpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihtX29iaik7Ci0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTEzOTQsNiArMTQwOSw3IEBACiAgICAgLyogc2V0IHRoZSBpbml0aWFsIHBvc2l0aW9uICovCiAgICAgbV9vYmotPnBvcyA9IChzaXplX3QpIDA7CiAKKyAgICBtX29iai0+d2Vha3JlZmxpc3QgPSBOVUxMOwogICAgIG1fb2JqLT5leHBvcnRzID0gMDsKICAgICAvKiBzZXQgdGhlIHRhZyBuYW1lICovCiAgICAgaWYgKHRhZ25hbWUgIT0gTlVMTCAmJiAqdGFnbmFtZSAhPSAnXDAnKSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMgYi9Nb2R1bGVzL29zc2F1ZGlvZGV2LmMKaW5kZXggODE3ZTIwNC4uMmQwZGQwOSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9vc3NhdWRpb2Rldi5jCisrKyBiL01vZHVsZXMvb3NzYXVkaW9kZXYuYwpAQCAtMTE1LDcgKzExNSw5IEBACiAgICAgICAgb25lIG9wZW4gYXQgYSB0aW1lLiAgVGhpcyBkb2VzICpub3QqIGFmZmVjdCBsYXRlciBJL087IE9TUwogICAgICAgIHByb3ZpZGVzIGEgc3BlY2lhbCBpb2N0bCgpIGZvciBub24tYmxvY2tpbmcgcmVhZC93cml0ZSwgd2hpY2ggaXMKICAgICAgICBleHBvc2VkIHZpYSBvc3Nfbm9uYmxvY2soKSBiZWxvdy4gKi8KLSAgICBpZiAoKGZkID0gb3BlbihkZXZpY2VuYW1lLCBpbW9kZXxPX05PTkJMT0NLKSkgPT0gLTEpIHsKKyAgICBmZCA9IF9QeV9vcGVuKGRldmljZW5hbWUsIGltb2RlfE9fTk9OQkxPQ0spOworCisgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19JT0Vycm9yLCBkZXZpY2VuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTc3LDcgKzE3OSw4IEBACiAgICAgICAgICAgICBkZXZpY2VuYW1lID0gIi9kZXYvbWl4ZXIiOwogICAgIH0KIAotICAgIGlmICgoZmQgPSBvcGVuKGRldmljZW5hbWUsIE9fUkRXUikpID09IC0xKSB7CisgICAgZmQgPSBfUHlfb3BlbihkZXZpY2VuYW1lLCBPX1JEV1IpOworICAgIGlmIChmZCA9PSAtMSkgewogICAgICAgICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUoUHlFeGNfSU9FcnJvciwgZGV2aWNlbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTI0NSw3ICsyNDgsNyBAQAogICAgIGludCBhcmc7CiAKICAgICBhc3NlcnQoc3RybGVuKGZuYW1lKSA8PSAzMCk7Ci0gICAgc3RyY2F0KGFyZ2ZtdCwgZm5hbWUpOworICAgIHN0cm5jYXQoYXJnZm10LCBmbmFtZSwgMzApOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdmbXQsICZhcmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjcwLDcgKzI3Myw3IEBACiAgICAgaW50IGFyZyA9IDA7CiAKICAgICBhc3NlcnQoc3RybGVuKGZuYW1lKSA8PSAzMCk7Ci0gICAgc3RyY2F0KGFyZ2ZtdCwgZm5hbWUpOworICAgIHN0cm5jYXQoYXJnZm10LCBmbmFtZSwgMzApOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBhcmdmbXQsICZhcmcpKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjkwLDcgKzI5Myw3IEBACiAgICAgaW50IHJ2OwogCiAgICAgYXNzZXJ0KHN0cmxlbihmbmFtZSkgPD0gMzApOwotICAgIHN0cmNhdChhcmdmbXQsIGZuYW1lKTsKKyAgICBzdHJuY2F0KGFyZ2ZtdCwgZm5hbWUsIDMwKTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgYXJnZm10KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTg5MSw3ICs4OTQsNyBAQAogICAgIC8qIEFsaWFzZXMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCiAgICAgeyAiZmx1c2giLCAgICAgICAgICAoUHlDRnVuY3Rpb24pb3NzX3N5bmMsIE1FVEhfVkFSQVJHUyB9LAogCi0gICAgLyogU3VwcG9ydCBmb3IgdGhlIGNvbnRleHQgbWFuYWdlciBwcm90b2NvbCAqLworICAgIC8qIFN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZW1lbnQgcHJvdG9jb2wgKi8KICAgICB7ICJfX2VudGVyX18iLCAgICAgIG9zc19zZWxmLCBNRVRIX05PQVJHUyB9LAogICAgIHsgIl9fZXhpdF9fIiwgICAgICAgb3NzX2V4aXQsIE1FVEhfVkFSQVJHUyB9LAogCkBAIC05MDMsNyArOTA2LDcgQEAKICAgICB7ICJjbG9zZSIsICAgICAgICAgIChQeUNGdW5jdGlvbilvc3NfbWl4ZXJfY2xvc2UsIE1FVEhfTk9BUkdTIH0sCiAgICAgeyAiZmlsZW5vIiwgICAgICAgICAoUHlDRnVuY3Rpb24pb3NzX21peGVyX2ZpbGVubywgTUVUSF9OT0FSR1MgfSwKIAotICAgIC8qIFN1cHBvcnQgZm9yIHRoZSBjb250ZXh0IG1hbmFnZXIgcHJvdG9jb2wgKi8KKyAgICAvKiBTdXBwb3J0IGZvciB0aGUgY29udGV4dCBtYW5hZ2VtZW50IHByb3RvY29sICovCiAgICAgeyAiX19lbnRlcl9fIiwgICAgICBvc3Nfc2VsZiwgTUVUSF9OT0FSR1MgfSwKICAgICB7ICJfX2V4aXRfXyIsICAgICAgIG9zc19leGl0LCBNRVRIX1ZBUkFSR1MgfSwKIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9vdmVybGFwcGVkLmMgYi9Nb2R1bGVzL292ZXJsYXBwZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjc3Yzg4Ci0tLSAvZGV2L251bGwKKysrIGIvTW9kdWxlcy9vdmVybGFwcGVkLmMKQEAgLTAsMCArMSwxMzM3IEBACisvKgorICogU3VwcG9ydCBmb3Igb3ZlcmxhcHBlZCBJTworICoKKyAqIFNvbWUgY29kZSBib3Jyb3dlZCBmcm9tIE1vZHVsZXMvX3dpbmFwaS5jIG9mIENQeXRob24KKyAqLworCisvKiBYWFggY2hlY2sgb3ZlcmZsb3cgYW5kIERXT1JEIDwtPiBQeV9zc2l6ZV90IGNvbnZlcnNpb25zCisgICBDaGVjayBpdGVtc2l6ZSAqLworCisjaW5jbHVkZSAiUHl0aG9uLmgiCisjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCisKKyNkZWZpbmUgV0lORE9XU19MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2luY2x1ZGUgPG1zd3NvY2suaD4KKworI2lmIGRlZmluZWQoTVNfV0lOMzIpICYmICFkZWZpbmVkKE1TX1dJTjY0KQorIyAgZGVmaW5lIEZfUE9JTlRFUiAiayIKKyMgIGRlZmluZSBUX1BPSU5URVIgVF9VTE9ORworI2Vsc2UKKyMgIGRlZmluZSBGX1BPSU5URVIgIksiCisjICBkZWZpbmUgVF9QT0lOVEVSIFRfVUxPTkdMT05HCisjZW5kaWYKKworI2RlZmluZSBGX0hBTkRMRSBGX1BPSU5URVIKKyNkZWZpbmUgRl9VTE9OR19QVFIgRl9QT0lOVEVSCisjZGVmaW5lIEZfRFdPUkQgImsiCisjZGVmaW5lIEZfQk9PTCAiaSIKKyNkZWZpbmUgRl9VSU5UICJJIgorCisjZGVmaW5lIFRfSEFORExFIFRfUE9JTlRFUgorCitlbnVtIHtUWVBFX05PTkUsIFRZUEVfTk9UX1NUQVJURUQsIFRZUEVfUkVBRCwgVFlQRV9XUklURSwgVFlQRV9BQ0NFUFQsCisgICAgICBUWVBFX0NPTk5FQ1QsIFRZUEVfRElTQ09OTkVDVCwgVFlQRV9DT05ORUNUX05BTUVEX1BJUEUsCisgICAgICBUWVBFX1dBSVRfTkFNRURfUElQRV9BTkRfQ09OTkVDVH07CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeU9iamVjdF9IRUFECisgICAgT1ZFUkxBUFBFRCBvdmVybGFwcGVkOworICAgIC8qIEZvciBjb252ZW5pZW5jZSwgd2Ugc3RvcmUgdGhlIGZpbGUgaGFuZGxlIHRvbyAqLworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgLyogRXJyb3IgcmV0dXJuZWQgYnkgbGFzdCBtZXRob2QgY2FsbCAqLworICAgIERXT1JEIGVycm9yOworICAgIC8qIFR5cGUgb2Ygb3BlcmF0aW9uICovCisgICAgRFdPUkQgdHlwZTsKKyAgICB1bmlvbiB7CisgICAgICAgIC8qIEJ1ZmZlciB1c2VkIGZvciByZWFkaW5nOiBUWVBFX1JFQUQgYW5kIFRZUEVfQUNDRVBUICovCisgICAgICAgIFB5T2JqZWN0ICpyZWFkX2J1ZmZlcjsKKyAgICAgICAgLyogQnVmZmVyIHVzZWQgZm9yIHdyaXRpbmc6IFRZUEVfV1JJVEUgKi8KKyAgICAgICAgUHlfYnVmZmVyIHdyaXRlX2J1ZmZlcjsKKyAgICB9OworfSBPdmVybGFwcGVkT2JqZWN0OworCisvKgorICogTWFwIFdpbmRvd3MgZXJyb3IgY29kZXMgdG8gc3ViY2xhc3NlcyBvZiBPU0Vycm9yCisgKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK1NldEZyb21XaW5kb3dzRXJyKERXT1JEIGVycikKK3sKKyAgICBQeU9iamVjdCAqZXhjZXB0aW9uX3R5cGU7CisKKyAgICBpZiAoZXJyID09IDApCisgICAgICAgIGVyciA9IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfQ09OTkVDVElPTl9SRUZVU0VEOgorICAgICAgICAgICAgZXhjZXB0aW9uX3R5cGUgPSBQeUV4Y19Db25uZWN0aW9uUmVmdXNlZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRVJST1JfQ09OTkVDVElPTl9BQk9SVEVEOgorICAgICAgICAgICAgZXhjZXB0aW9uX3R5cGUgPSBQeUV4Y19Db25uZWN0aW9uQWJvcnRlZEVycm9yOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBleGNlcHRpb25fdHlwZSA9IFB5RXhjX09TRXJyb3I7CisgICAgfQorICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihleGNlcHRpb25fdHlwZSwgZXJyKTsKK30KKworLyoKKyAqIFNvbWUgZnVuY3Rpb25zIHNob3VsZCBiZSBsb2FkZWQgYXQgcnVudGltZQorICovCisKK3N0YXRpYyBMUEZOX0FDQ0VQVEVYIFB5X0FjY2VwdEV4ID0gTlVMTDsKK3N0YXRpYyBMUEZOX0NPTk5FQ1RFWCBQeV9Db25uZWN0RXggPSBOVUxMOworc3RhdGljIExQRk5fRElTQ09OTkVDVEVYIFB5X0Rpc2Nvbm5lY3RFeCA9IE5VTEw7CitzdGF0aWMgQk9PTCAoQ0FMTEJBQ0sgKlB5X0NhbmNlbElvRXgpKEhBTkRMRSwgTFBPVkVSTEFQUEVEKSA9IE5VTEw7CisKKyNkZWZpbmUgR0VUX1dTQV9QT0lOVEVSKHMsIHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoU09DS0VUX0VSUk9SICE9IFdTQUlvY3RsKHMsIFNJT19HRVRfRVhURU5TSU9OX0ZVTkNUSU9OX1BPSU5URVIsICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHdWlkIyN4LCBzaXplb2YoR3VpZCMjeCksICZQeV8jI3gsICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihQeV8jI3gpLCAmZHdCeXRlcywgTlVMTCwgTlVMTCkpCisKK3N0YXRpYyBpbnQKK2luaXRpYWxpemVfZnVuY3Rpb25fcG9pbnRlcnModm9pZCkKK3sKKyAgICBHVUlEIEd1aWRBY2NlcHRFeCA9IFdTQUlEX0FDQ0VQVEVYOworICAgIEdVSUQgR3VpZENvbm5lY3RFeCA9IFdTQUlEX0NPTk5FQ1RFWDsKKyAgICBHVUlEIEd1aWREaXNjb25uZWN0RXggPSBXU0FJRF9ESVNDT05ORUNURVg7CisgICAgSElOU1RBTkNFIGhLZXJuZWwzMjsKKyAgICBTT0NLRVQgczsKKyAgICBEV09SRCBkd0J5dGVzOworCisgICAgcyA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApOworICAgIGlmIChzID09IElOVkFMSURfU09DS0VUKSB7CisgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICghR0VUX1dTQV9QT0lOVEVSKHMsIEFjY2VwdEV4KSB8fAorICAgICAgICAhR0VUX1dTQV9QT0lOVEVSKHMsIENvbm5lY3RFeCkgfHwKKyAgICAgICAgIUdFVF9XU0FfUE9JTlRFUihzLCBEaXNjb25uZWN0RXgpKQorICAgIHsKKyAgICAgICAgY2xvc2Vzb2NrZXQocyk7CisgICAgICAgIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGNsb3Nlc29ja2V0KHMpOworCisgICAgLyogT24gV2luWFAgd2Ugd2lsbCBoYXZlIFB5X0NhbmNlbElvRXggPT0gTlVMTCAqLworICAgIGhLZXJuZWwzMiA9IEdldE1vZHVsZUhhbmRsZSgiS0VSTkVMMzIiKTsKKyAgICAqKEZBUlBST0MgKikmUHlfQ2FuY2VsSW9FeCA9IEdldFByb2NBZGRyZXNzKGhLZXJuZWwzMiwgIkNhbmNlbElvRXgiKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIENvbXBsZXRpb24gcG9ydCBzdHVmZgorICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBDcmVhdGVJb0NvbXBsZXRpb25Qb3J0X2RvYywKKyAgICAiQ3JlYXRlSW9Db21wbGV0aW9uUG9ydChoYW5kbGUsIHBvcnQsIGtleSwgY29uY3VycmVuY3kpIC0+IHBvcnRcblxuIgorICAgICJDcmVhdGUgYSBjb21wbGV0aW9uIHBvcnQgb3IgcmVnaXN0ZXIgYSBoYW5kbGUgd2l0aCBhIHBvcnQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0NyZWF0ZUlvQ29tcGxldGlvblBvcnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBGaWxlSGFuZGxlOworICAgIEhBTkRMRSBFeGlzdGluZ0NvbXBsZXRpb25Qb3J0OworICAgIFVMT05HX1BUUiBDb21wbGV0aW9uS2V5OworICAgIERXT1JEIE51bWJlck9mQ29uY3VycmVudFRocmVhZHM7CisgICAgSEFORExFIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSBGX1VMT05HX1BUUiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmRmlsZUhhbmRsZSwgJkV4aXN0aW5nQ29tcGxldGlvblBvcnQsICZDb21wbGV0aW9uS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmTnVtYmVyT2ZDb25jdXJyZW50VGhyZWFkcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IENyZWF0ZUlvQ29tcGxldGlvblBvcnQoRmlsZUhhbmRsZSwgRXhpc3RpbmdDb21wbGV0aW9uUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb25LZXksIE51bWJlck9mQ29uY3VycmVudFRocmVhZHMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmV0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0hBTkRMRSwgcmV0KTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIEdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXNfZG9jLAorICAgICJHZXRRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHBvcnQsIG1zZWNzKSAtPiAoZXJyLCBieXRlcywga2V5LCBhZGRyZXNzKVxuXG4iCisgICAgIkdldCBhIG1lc3NhZ2UgZnJvbSBjb21wbGV0aW9uIHBvcnQuICBXYWl0IGZvciB1cCB0byBtc2VjcyBtaWxsaXNlY29uZHMuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBDb21wbGV0aW9uUG9ydCA9IE5VTEw7CisgICAgRFdPUkQgTnVtYmVyT2ZCeXRlcyA9IDA7CisgICAgVUxPTkdfUFRSIENvbXBsZXRpb25LZXkgPSAwOworICAgIE9WRVJMQVBQRUQgKk92ZXJsYXBwZWQgPSBOVUxMOworICAgIERXT1JEIE1pbGxpc2Vjb25kczsKKyAgICBEV09SRCBlcnI7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkNvbXBsZXRpb25Qb3J0LCAmTWlsbGlzZWNvbmRzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gR2V0UXVldWVkQ29tcGxldGlvblN0YXR1cyhDb21wbGV0aW9uUG9ydCwgJk51bWJlck9mQnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29tcGxldGlvbktleSwgJk92ZXJsYXBwZWQsIE1pbGxpc2Vjb25kcyk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBpZiAoT3ZlcmxhcHBlZCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChlcnIgPT0gV0FJVF9USU1FT1VUKQorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShGX0RXT1JEIEZfRFdPUkQgRl9VTE9OR19QVFIgRl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgIGVyciwgTnVtYmVyT2ZCeXRlcywgQ29tcGxldGlvbktleSwgT3ZlcmxhcHBlZCk7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2MsCisgICAgIlBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHBvcnQsIGJ5dGVzLCBrZXksIGFkZHJlc3MpIC0+IE5vbmVcblxuIgorICAgICJQb3N0IGEgbWVzc2FnZSB0byBjb21wbGV0aW9uIHBvcnQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1Bvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgQ29tcGxldGlvblBvcnQ7CisgICAgRFdPUkQgTnVtYmVyT2ZCeXRlczsKKyAgICBVTE9OR19QVFIgQ29tcGxldGlvbktleTsKKyAgICBPVkVSTEFQUEVEICpPdmVybGFwcGVkOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQgRl9VTE9OR19QVFIgRl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmQ29tcGxldGlvblBvcnQsICZOdW1iZXJPZkJ5dGVzLCAmQ29tcGxldGlvbktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk92ZXJsYXBwZWQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cyhDb21wbGV0aW9uUG9ydCwgTnVtYmVyT2ZCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wbGV0aW9uS2V5LCBPdmVybGFwcGVkKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIFdhaXQgZm9yIGEgaGFuZGxlCisgKi8KKworc3RydWN0IFBvc3RDYWxsYmFja0RhdGEgeworICAgIEhBTkRMRSBDb21wbGV0aW9uUG9ydDsKKyAgICBMUE9WRVJMQVBQRUQgT3ZlcmxhcHBlZDsKK307CisKK3N0YXRpYyBWT0lEIENBTExCQUNLCitQb3N0VG9RdWV1ZUNhbGxiYWNrKFBWT0lEIGxwUGFyYW1ldGVyLCBCT09MIFRpbWVyT3JXYWl0RmlyZWQpCit7CisgICAgc3RydWN0IFBvc3RDYWxsYmFja0RhdGEgKnAgPSAoc3RydWN0IFBvc3RDYWxsYmFja0RhdGEqKSBscFBhcmFtZXRlcjsKKworICAgIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzKHAtPkNvbXBsZXRpb25Qb3J0LCBUaW1lck9yV2FpdEZpcmVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHAtPk92ZXJsYXBwZWQpOworICAgIC8qIGlnbm9yZSBwb3NzaWJsZSBlcnJvciEgKi8KKyAgICBQeU1lbV9GcmVlKHApOworfQorCitQeURvY19TVFJWQVIoCisgICAgUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlX2RvYywKKyAgICAiUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlKE9iamVjdCwgQ29tcGxldGlvblBvcnQsIE92ZXJsYXBwZWQsIFRpbWVvdXQpXG4iCisgICAgIiAgICAtPiBXYWl0SGFuZGxlXG5cbiIKKyAgICAiUmVnaXN0ZXIgd2FpdCBmb3IgT2JqZWN0OyB3aGVuIGNvbXBsZXRlIENvbXBsZXRpb25Qb3J0IGlzIG5vdGlmaWVkLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1JlZ2lzdGVyV2FpdFdpdGhRdWV1ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIE5ld1dhaXRPYmplY3Q7CisgICAgSEFORExFIE9iamVjdDsKKyAgICBVTE9ORyBNaWxsaXNlY29uZHM7CisgICAgc3RydWN0IFBvc3RDYWxsYmFja0RhdGEgZGF0YSwgKnBkYXRhOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfSEFORExFIEZfUE9JTlRFUiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmT2JqZWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmZGF0YS5Db21wbGV0aW9uUG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGEuT3ZlcmxhcHBlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJk1pbGxpc2Vjb25kcykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcGRhdGEgPSBQeU1lbV9NYWxsb2Moc2l6ZW9mKHN0cnVjdCBQb3N0Q2FsbGJhY2tEYXRhKSk7CisgICAgaWYgKHBkYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKworICAgICpwZGF0YSA9IGRhdGE7CisKKyAgICBpZiAoIVJlZ2lzdGVyV2FpdEZvclNpbmdsZU9iamVjdCgKKyAgICAgICAgICAgICZOZXdXYWl0T2JqZWN0LCBPYmplY3QsIChXQUlUT1JUSU1FUkNBTExCQUNLKVBvc3RUb1F1ZXVlQ2FsbGJhY2ssCisgICAgICAgICAgICBwZGF0YSwgTWlsbGlzZWNvbmRzLAorICAgICAgICAgICAgV1RfRVhFQ1VURUlOV0FJVFRIUkVBRCB8IFdUX0VYRUNVVEVPTkxZT05DRSkpCisgICAgeworICAgICAgICBQeU1lbV9GcmVlKHBkYXRhKTsKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIH0KKworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCBOZXdXYWl0T2JqZWN0KTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFVucmVnaXN0ZXJXYWl0X2RvYywKKyAgICAiVW5yZWdpc3RlcldhaXQoV2FpdEhhbmRsZSkgLT4gTm9uZVxuXG4iCisgICAgIlVucmVnaXN0ZXIgd2FpdCBoYW5kbGUuXG4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfVW5yZWdpc3RlcldhaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBXYWl0SGFuZGxlOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmV2FpdEhhbmRsZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFVucmVnaXN0ZXJXYWl0KFdhaXRIYW5kbGUpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoCisgICAgVW5yZWdpc3RlcldhaXRFeF9kb2MsCisgICAgIlVucmVnaXN0ZXJXYWl0RXgoV2FpdEhhbmRsZSwgRXZlbnQpIC0+IE5vbmVcblxuIgorICAgICJVbnJlZ2lzdGVyIHdhaXQgaGFuZGxlLlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1VucmVnaXN0ZXJXYWl0RXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBXYWl0SGFuZGxlLCBFdmVudDsKKyAgICBCT09MIHJldDsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSwgJldhaXRIYW5kbGUsICZFdmVudCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFVucmVnaXN0ZXJXYWl0RXgoV2FpdEhhbmRsZSwgRXZlbnQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisvKgorICogRXZlbnQgZnVuY3Rpb25zIC0tIGN1cnJlbnRseSBvbmx5IHVzZWQgYnkgdGVzdHMKKyAqLworCitQeURvY19TVFJWQVIoCisgICAgQ3JlYXRlRXZlbnRfZG9jLAorICAgICJDcmVhdGVFdmVudChFdmVudEF0dHJpYnV0ZXMsIE1hbnVhbFJlc2V0LCBJbml0aWFsU3RhdGUsIE5hbWUpIgorICAgICIgLT4gSGFuZGxlXG5cbiIKKyAgICAiQ3JlYXRlIGFuIGV2ZW50LiAgRXZlbnRBdHRyaWJ1dGVzIG11c3QgYmUgTm9uZS5cbiIpOworCitzdGF0aWMgUHlPYmplY3QgKgorb3ZlcmxhcHBlZF9DcmVhdGVFdmVudChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKkV2ZW50QXR0cmlidXRlczsKKyAgICBCT09MIE1hbnVhbFJlc2V0OworICAgIEJPT0wgSW5pdGlhbFN0YXRlOworICAgIFB5X1VOSUNPREUgKk5hbWU7CisgICAgSEFORExFIEV2ZW50OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPIiBGX0JPT0wgRl9CT09MICJaIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkV2ZW50QXR0cmlidXRlcywgJk1hbnVhbFJlc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5pdGlhbFN0YXRlLCAmTmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKEV2ZW50QXR0cmlidXRlcyAhPSBQeV9Ob25lKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiRXZlbnRBdHRyaWJ1dGVzIG11c3QgYmUgTm9uZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgRXZlbnQgPSBDcmVhdGVFdmVudFcoTlVMTCwgTWFudWFsUmVzZXQsIEluaXRpYWxTdGF0ZSwgTmFtZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmIChFdmVudCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoRl9IQU5ETEUsIEV2ZW50KTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFNldEV2ZW50X2RvYywKKyAgICAiU2V0RXZlbnQoSGFuZGxlKSAtPiBOb25lXG5cbiIKKyAgICAiU2V0IGV2ZW50LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1NldEV2ZW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgSGFuZGxlOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmSGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gU2V0RXZlbnQoSGFuZGxlKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIFJlc2V0RXZlbnRfZG9jLAorICAgICJSZXNldEV2ZW50KEhhbmRsZSkgLT4gTm9uZVxuXG4iCisgICAgIlJlc2V0IGV2ZW50LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX1Jlc2V0RXZlbnQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBIYW5kbGU7CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUsICZIYW5kbGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBSZXNldEV2ZW50KEhhbmRsZSk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoMCk7CisgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKKy8qCisgKiBCaW5kIHNvY2tldCBoYW5kbGUgdG8gbG9jYWwgcG9ydCB3aXRob3V0IGRvaW5nIHNsb3cgZ2V0YWRkcmluZm8oKQorICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBCaW5kTG9jYWxfZG9jLAorICAgICJCaW5kTG9jYWwoaGFuZGxlLCBmYW1pbHkpIC0+IE5vbmVcblxuIgorICAgICJCaW5kIGEgc29ja2V0IGhhbmRsZSB0byBhbiBhcmJpdHJhcnkgbG9jYWwgcG9ydC5cbiIKKyAgICAiZmFtaWx5IHNob3VsZCBBRl9JTkVUIG9yIEFGX0lORVQ2LlxuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvdmVybGFwcGVkX0JpbmRMb2NhbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIFNvY2tldDsKKyAgICBpbnQgRmFtaWx5OworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFICJpIiwgJlNvY2tldCwgJkZhbWlseSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKEZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworICAgICAgICBtZW1zZXQoJmFkZHIsIDAsIHNpemVvZihhZGRyKSk7CisgICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIGFkZHIuc2luX3BvcnQgPSAwOworICAgICAgICBhZGRyLnNpbl9hZGRyLlNfdW4uU19hZGRyID0gSU5BRERSX0FOWTsKKyAgICAgICAgcmV0ID0gYmluZChTb2NrZXQsIChTT0NLQUREUiopJmFkZHIsIHNpemVvZihhZGRyKSkgIT0gU09DS0VUX0VSUk9SOworICAgIH0gZWxzZSBpZiAoRmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIGFkZHIuc2luNl9wb3J0ID0gMDsKKyAgICAgICAgYWRkci5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKyAgICAgICAgcmV0ID0gYmluZChTb2NrZXQsIChTT0NLQUREUiopJmFkZHIsIHNpemVvZihhZGRyKSkgIT0gU09DS0VUX0VSUk9SOworICAgIH0gZWxzZSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiZXhwZWN0ZWQgdHVwbGUgb2YgbGVuZ3RoIDIgb3IgNCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKFdTQUdldExhc3RFcnJvcigpKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworLyoKKyAqIFdpbmRvd3MgZXF1aXZhbGVudCBvZiBvcy5zdHJlcnJvcigpIC0tIGNvbXBhcmUgX2N0eXBlcy9jYWxscHJvYy5jCisgKi8KKworUHlEb2NfU1RSVkFSKAorICAgIEZvcm1hdE1lc3NhZ2VfZG9jLAorICAgICJGb3JtYXRNZXNzYWdlKGVycm9yX2NvZGUpIC0+IGVycm9yX21lc3NhZ2VcblxuIgorICAgICJSZXR1cm4gZXJyb3IgbWVzc2FnZSBmb3IgYW4gZXJyb3IgY29kZS4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK292ZXJsYXBwZWRfRm9ybWF0TWVzc2FnZShQeU9iamVjdCAqaWdub3JlLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBEV09SRCBjb2RlLCBuOworICAgIFdDSEFSICpscE1zZ0J1ZjsKKyAgICBQeU9iamVjdCAqcmVzOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfRFdPUkQsICZjb2RlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuID0gRm9ybWF0TWVzc2FnZVcoRk9STUFUX01FU1NBR0VfQUxMT0NBVEVfQlVGRkVSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgRk9STUFUX01FU1NBR0VfRlJPTV9TWVNURU0sCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgIE1BS0VMQU5HSUQoTEFOR19ORVVUUkFMLCBTVUJMQU5HX0RFRkFVTFQpLAorICAgICAgICAgICAgICAgICAgICAgICAoTFBXU1RSKSAmbHBNc2dCdWYsCisgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIGlmIChuKSB7CisgICAgICAgIHdoaWxlIChpc3dzcGFjZShscE1zZ0J1ZltuLTFdKSkKKyAgICAgICAgICAgIC0tbjsKKyAgICAgICAgbHBNc2dCdWZbbl0gPSBMJ1wwJzsKKyAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZSgidSIsIGxwTXNnQnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXMgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgidW5rbm93biBlcnJvciBjb2RlICV1IiwgY29kZSk7CisgICAgfQorICAgIExvY2FsRnJlZShscE1zZ0J1Zik7CisgICAgcmV0dXJuIHJlczsKK30KKworCisvKgorICogTWFyayBvcGVyYXRpb24gYXMgY29tcGxldGVkIC0gdXNlZCB3aGVuIHJlYWRpbmcgcHJvZHVjZXMgRVJST1JfQlJPS0VOX1BJUEUKKyAqLworCitzdGF0aWMgdm9pZAorbWFya19hc19jb21wbGV0ZWQoT1ZFUkxBUFBFRCAqb3YpCit7CisgICAgb3YtPkludGVybmFsID0gMDsKKyAgICBpZiAob3YtPmhFdmVudCAhPSBOVUxMKQorICAgICAgICBTZXRFdmVudChvdi0+aEV2ZW50KTsKK30KKworLyoKKyAqIEEgUHl0aG9uIG9iamVjdCB3cmFwcGluZyBhbiBPVkVSTEFQUEVEIHN0cnVjdHVyZSBhbmQgb3RoZXIgdXNlZnVsIGRhdGEKKyAqIGZvciBvdmVybGFwcGVkIEkvTworICovCisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX2RvYywKKyAgICAiT3ZlcmxhcHBlZCBvYmplY3QiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIE92ZXJsYXBwZWRPYmplY3QgKnNlbGY7CisgICAgSEFORExFIGV2ZW50ID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJldmVudCIsIE5VTEx9OworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInwiIEZfSEFORExFLCBrd2xpc3QsICZldmVudCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGV2ZW50ID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGV2ZW50ID0gQ3JlYXRlRXZlbnQoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpOworICAgICAgICBpZiAoZXZlbnQgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICB9CisKKyAgICBzZWxmID0gUHlPYmplY3RfTmV3KE92ZXJsYXBwZWRPYmplY3QsIHR5cGUpOworICAgIGlmIChzZWxmID09IE5VTEwpIHsKKyAgICAgICAgaWYgKGV2ZW50ICE9IE5VTEwpCisgICAgICAgICAgICBDbG9zZUhhbmRsZShldmVudCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYtPmhhbmRsZSA9IE5VTEw7CisgICAgc2VsZi0+ZXJyb3IgPSAwOworICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PTkU7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBOVUxMOworICAgIG1lbXNldCgmc2VsZi0+b3ZlcmxhcHBlZCwgMCwgc2l6ZW9mKE9WRVJMQVBQRUQpKTsKKyAgICBtZW1zZXQoJnNlbGYtPndyaXRlX2J1ZmZlciwgMCwgc2l6ZW9mKFB5X2J1ZmZlcikpOworICAgIGlmIChldmVudCkKKyAgICAgICAgc2VsZi0+b3ZlcmxhcHBlZC5oRXZlbnQgPSBldmVudDsKKyAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKK30KKworc3RhdGljIHZvaWQKK092ZXJsYXBwZWRfZGVhbGxvYyhPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIERXT1JEIGJ5dGVzOworICAgIERXT1JEIG9sZGVyciA9IEdldExhc3RFcnJvcigpOworICAgIEJPT0wgd2FpdCA9IEZBTFNFOworICAgIEJPT0wgcmV0OworCisgICAgaWYgKCFIYXNPdmVybGFwcGVkSW9Db21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpICYmCisgICAgICAgIHNlbGYtPnR5cGUgIT0gVFlQRV9OT1RfU1RBUlRFRCkKKyAgICB7CisgICAgICAgIGlmIChQeV9DYW5jZWxJb0V4ICYmIFB5X0NhbmNlbElvRXgoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCkpCisgICAgICAgICAgICB3YWl0ID0gVFJVRTsKKworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJldCA9IEdldE92ZXJsYXBwZWRSZXN1bHQoc2VsZi0+aGFuZGxlLCAmc2VsZi0+b3ZlcmxhcHBlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYnl0ZXMsIHdhaXQpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgICAgIHN3aXRjaCAocmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpKSB7CisgICAgICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgICAgICBjYXNlIEVSUk9SX05PVF9GT1VORDoKKyAgICAgICAgICAgIGNhc2UgRVJST1JfT1BFUkFUSU9OX0FCT1JURUQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAiJVIgc3RpbGwgaGFzIHBlbmRpbmcgb3BlcmF0aW9uIGF0ICIKKyAgICAgICAgICAgICAgICAgICAgImRlYWxsb2NhdGlvbiwgdGhlIHByb2Nlc3MgbWF5IGNyYXNoIiwgc2VsZik7CisgICAgICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50ICE9IE5VTEwpCisgICAgICAgIENsb3NlSGFuZGxlKHNlbGYtPm92ZXJsYXBwZWQuaEV2ZW50KTsKKworICAgIHN3aXRjaCAoc2VsZi0+dHlwZSkgeworICAgIGNhc2UgVFlQRV9SRUFEOgorICAgIGNhc2UgVFlQRV9BQ0NFUFQ6CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPnJlYWRfYnVmZmVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUWVBFX1dSSVRFOgorICAgICAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLm9iaikKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGYtPndyaXRlX2J1ZmZlcik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBQeU9iamVjdF9EZWwoc2VsZik7CisgICAgU2V0TGFzdEVycm9yKG9sZGVycik7Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX2NhbmNlbF9kb2MsCisgICAgImNhbmNlbCgpIC0+IE5vbmVcblxuIgorICAgICJDYW5jZWwgb3ZlcmxhcHBlZCBvcGVyYXRpb24iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfY2FuY2VsKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgQk9PTCByZXQgPSBUUlVFOworCisgICAgaWYgKHNlbGYtPnR5cGUgPT0gVFlQRV9OT1RfU1RBUlRFRAorICAgICAgICB8fCBzZWxmLT50eXBlID09IFRZUEVfV0FJVF9OQU1FRF9QSVBFX0FORF9DT05ORUNUKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKworICAgIGlmICghSGFzT3ZlcmxhcHBlZElvQ29tcGxldGVkKCZzZWxmLT5vdmVybGFwcGVkKSkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGlmIChQeV9DYW5jZWxJb0V4KQorICAgICAgICAgICAgcmV0ID0gUHlfQ2FuY2VsSW9FeChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0ID0gQ2FuY2VsSW8oc2VsZi0+aGFuZGxlKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICB9CisKKyAgICAvKiBDYW5jZWxJb0V4IHJldHVybnMgRVJST1JfTk9UX0ZPVU5EIGlmIHRoZSBJL08gY29tcGxldGVkIGluLWJldHdlZW4gKi8KKyAgICBpZiAoIXJldCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT1RfRk9VTkQpCisgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycigwKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfZ2V0cmVzdWx0X2RvYywKKyAgICAiZ2V0cmVzdWx0KHdhaXQ9RmFsc2UpIC0+IHJlc3VsdFxuXG4iCisgICAgIlJldHJpZXZlIHJlc3VsdCBvZiBvcGVyYXRpb24uICBJZiB3YWl0IGlzIHRydWUgdGhlbiBpdCBibG9ja3NcbiIKKyAgICAidW50aWwgdGhlIG9wZXJhdGlvbiBpcyBmaW5pc2hlZC4gIElmIHdhaXQgaXMgZmFsc2UgYW5kIHRoZVxuIgorICAgICJvcGVyYXRpb24gaXMgc3RpbGwgcGVuZGluZyB0aGVuIGFuIGVycm9yIGlzIHJhaXNlZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfZ2V0cmVzdWx0KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEJPT0wgd2FpdCA9IEZBTFNFOworICAgIERXT1JEIHRyYW5zZmVycmVkID0gMDsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInwiIEZfQk9PTCwgJndhaXQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlID09IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBub3QgeWV0IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoc2VsZi0+dHlwZSA9PSBUWVBFX05PVF9TVEFSVEVEKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGZhaWxlZCB0byBzdGFydCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gR2V0T3ZlcmxhcHBlZFJlc3VsdChzZWxmLT5oYW5kbGUsICZzZWxmLT5vdmVybGFwcGVkLCAmdHJhbnNmZXJyZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YWl0KTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX01PUkVfREFUQToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEVSUk9SX0JST0tFTl9QSVBFOgorICAgICAgICAgICAgaWYgKChzZWxmLT50eXBlID09IFRZUEVfUkVBRCB8fCBzZWxmLT50eXBlID09IFRZUEVfQUNDRVBUKSAmJiBzZWxmLT5yZWFkX2J1ZmZlciAhPSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogZmFsbCB0aHJvdWdoICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHNlbGYtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBUWVBFX1JFQUQ6CisgICAgICAgICAgICBhc3NlcnQoUHlCeXRlc19DaGVja0V4YWN0KHNlbGYtPnJlYWRfYnVmZmVyKSk7CisgICAgICAgICAgICBpZiAodHJhbnNmZXJyZWQgIT0gUHlCeXRlc19HRVRfU0laRShzZWxmLT5yZWFkX2J1ZmZlcikgJiYKKyAgICAgICAgICAgICAgICBfUHlCeXRlc19SZXNpemUoJnNlbGYtPnJlYWRfYnVmZmVyLCB0cmFuc2ZlcnJlZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBQeV9JTkNSRUYoc2VsZi0+cmVhZF9idWZmZXIpOworICAgICAgICAgICAgcmV0dXJuIHNlbGYtPnJlYWRfYnVmZmVyOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKSB0cmFuc2ZlcnJlZCk7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9SZWFkRmlsZV9kb2MsCisgICAgIlJlYWRGaWxlKGhhbmRsZSwgc2l6ZSkgLT4gT3ZlcmxhcHBlZFttZXNzYWdlXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgcmVhZCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9SZWFkRmlsZShPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIHNpemU7CisgICAgRFdPUkQgbnJlYWQ7CisgICAgUHlPYmplY3QgKmJ1ZjsKKyAgICBCT09MIHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgRl9EV09SRCwgJmhhbmRsZSwgJnNpemUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZiBTSVpFT0ZfU0laRV9UIDw9IFNJWkVPRl9MT05HCisgICAgc2l6ZSA9IFB5X01JTihzaXplLCAoRFdPUkQpUFlfU1NJWkVfVF9NQVgpOworI2VuZGlmCisgICAgYnVmID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBQeV9NQVgoc2l6ZSwgMSkpOworICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9SRUFEOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKyAgICBzZWxmLT5yZWFkX2J1ZmZlciA9IGJ1ZjsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBSZWFkRmlsZShoYW5kbGUsIFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1ZiksIHNpemUsICZucmVhZCwKKyAgICAgICAgICAgICAgICAgICAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6CisgICAgICAgICAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX01PUkVfREFUQToKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV1NBUmVjdl9kb2MsCisgICAgIlJlY3ZGaWxlKGhhbmRsZSwgc2l6ZSwgZmxhZ3MpIC0+IE92ZXJsYXBwZWRbbWVzc2FnZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHJlY2VpdmUiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfV1NBUmVjdihPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBIQU5ETEUgaGFuZGxlOworICAgIERXT1JEIHNpemU7CisgICAgRFdPUkQgZmxhZ3MgPSAwOworICAgIERXT1JEIG5yZWFkOworICAgIFB5T2JqZWN0ICpidWY7CisgICAgV1NBQlVGIHdzYWJ1ZjsKKyAgICBpbnQgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0RXT1JEICJ8IiBGX0RXT1JELAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmc2l6ZSwgJmZsYWdzKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoc2VsZi0+dHlwZSAhPSBUWVBFX05PTkUpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJvcGVyYXRpb24gYWxyZWFkeSBhdHRlbXB0ZWQiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjaWYgU0laRU9GX1NJWkVfVCA8PSBTSVpFT0ZfTE9ORworICAgIHNpemUgPSBQeV9NSU4oc2l6ZSwgKERXT1JEKVBZX1NTSVpFX1RfTUFYKTsKKyNlbmRpZgorICAgIGJ1ZiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgUHlfTUFYKHNpemUsIDEpKTsKKyAgICBpZiAoYnVmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfUkVBRDsKKyAgICBzZWxmLT5oYW5kbGUgPSBoYW5kbGU7CisgICAgc2VsZi0+cmVhZF9idWZmZXIgPSBidWY7CisgICAgd3NhYnVmLmxlbiA9IHNpemU7CisgICAgd3NhYnVmLmJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGJ1Zik7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gV1NBUmVjdigoU09DS0VUKWhhbmRsZSwgJndzYWJ1ZiwgMSwgJm5yZWFkLCAmZmxhZ3MsCisgICAgICAgICAgICAgICAgICAmc2VsZi0+b3ZlcmxhcHBlZCwgTlVMTCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gKHJldCA8IDAgPyBXU0FHZXRMYXN0RXJyb3IoKSA6IEVSUk9SX1NVQ0NFU1MpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfQlJPS0VOX1BJUEU6CisgICAgICAgICAgICBtYXJrX2FzX2NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX01PUkVfREFUQToKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV3JpdGVGaWxlX2RvYywKKyAgICAiV3JpdGVGaWxlKGhhbmRsZSwgYnVmKSAtPiBPdmVybGFwcGVkW2J5dGVzX3RyYW5zZmVycmVkXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgd3JpdGUiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfV3JpdGVGaWxlKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgUHlPYmplY3QgKmJ1Zm9iajsKKyAgICBEV09SRCB3cml0dGVuOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiTyIsICZoYW5kbGUsICZidWZvYmopKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChzZWxmLT50eXBlICE9IFRZUEVfTk9ORSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm9wZXJhdGlvbiBhbHJlYWR5IGF0dGVtcHRlZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlKGJ1Zm9iaiwgInkqIiwgJnNlbGYtPndyaXRlX2J1ZmZlcikpCisgICAgICAgIHJldHVybiBOVUxMOworCisjaWYgU0laRU9GX1NJWkVfVCA+IFNJWkVPRl9MT05HCisgICAgaWYgKHNlbGYtPndyaXRlX2J1ZmZlci5sZW4gPiAoUHlfc3NpemVfdClVTE9OR19NQVgpIHsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmc2VsZi0+d3JpdGVfYnVmZmVyKTsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJidWZmZXIgdG8gbGFyZ2UiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisKKyAgICBzZWxmLT50eXBlID0gVFlQRV9XUklURTsKKyAgICBzZWxmLT5oYW5kbGUgPSBoYW5kbGU7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gV3JpdGVGaWxlKGhhbmRsZSwgc2VsZi0+d3JpdGVfYnVmZmVyLmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgKERXT1JEKXNlbGYtPndyaXRlX2J1ZmZlci5sZW4sCisgICAgICAgICAgICAgICAgICAgICZ3cml0dGVuLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IEdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworUHlEb2NfU1RSVkFSKAorICAgIE92ZXJsYXBwZWRfV1NBU2VuZF9kb2MsCisgICAgIldTQVNlbmQoaGFuZGxlLCBidWYsIGZsYWdzKSAtPiBPdmVybGFwcGVkW2J5dGVzX3RyYW5zZmVycmVkXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgc2VuZCIpOworCitzdGF0aWMgUHlPYmplY3QgKgorT3ZlcmxhcHBlZF9XU0FTZW5kKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgUHlPYmplY3QgKmJ1Zm9iajsKKyAgICBEV09SRCBmbGFnczsKKyAgICBEV09SRCB3cml0dGVuOworICAgIFdTQUJVRiB3c2FidWY7CisgICAgaW50IHJldDsKKyAgICBEV09SRCBlcnI7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgRl9IQU5ETEUgIk8iIEZfRFdPUkQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZoYW5kbGUsICZidWZvYmosICZmbGFncykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICghUHlBcmdfUGFyc2UoYnVmb2JqLCAieSoiLCAmc2VsZi0+d3JpdGVfYnVmZmVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZiBTSVpFT0ZfU0laRV9UID4gU0laRU9GX0xPTkcKKyAgICBpZiAoc2VsZi0+d3JpdGVfYnVmZmVyLmxlbiA+IChQeV9zc2l6ZV90KVVMT05HX01BWCkgeworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZWxmLT53cml0ZV9idWZmZXIpOworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ1ZmZlciB0byBsYXJnZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX1dSSVRFOworICAgIHNlbGYtPmhhbmRsZSA9IGhhbmRsZTsKKyAgICB3c2FidWYubGVuID0gKERXT1JEKXNlbGYtPndyaXRlX2J1ZmZlci5sZW47CisgICAgd3NhYnVmLmJ1ZiA9IHNlbGYtPndyaXRlX2J1ZmZlci5idWY7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gV1NBU2VuZCgoU09DS0VUKWhhbmRsZSwgJndzYWJ1ZiwgMSwgJndyaXR0ZW4sIGZsYWdzLAorICAgICAgICAgICAgICAgICAgJnNlbGYtPm92ZXJsYXBwZWQsIE5VTEwpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IChyZXQgPCAwID8gV1NBR2V0TGFzdEVycm9yKCkgOiBFUlJPUl9TVUNDRVNTKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0FjY2VwdEV4X2RvYywKKyAgICAiQWNjZXB0RXgobGlzdGVuX2hhbmRsZSwgYWNjZXB0X2hhbmRsZSkgLT4gT3ZlcmxhcHBlZFthZGRyZXNzX2FzX2J5dGVzXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgd2FpdCBmb3IgY2xpZW50IHRvIGNvbm5lY3QiKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfQWNjZXB0RXgoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgU09DS0VUIExpc3RlblNvY2tldDsKKyAgICBTT0NLRVQgQWNjZXB0U29ja2V0OworICAgIERXT1JEIEJ5dGVzUmVjZWl2ZWQ7CisgICAgRFdPUkQgc2l6ZTsKKyAgICBQeU9iamVjdCAqYnVmOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSBGX0hBTkRMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJkxpc3RlblNvY2tldCwgJkFjY2VwdFNvY2tldCkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikgKyAxNjsKKyAgICBidWYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIHNpemUqMik7CisgICAgaWYgKCFidWYpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfQUNDRVBUOworICAgIHNlbGYtPmhhbmRsZSA9IChIQU5ETEUpTGlzdGVuU29ja2V0OworICAgIHNlbGYtPnJlYWRfYnVmZmVyID0gYnVmOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IFB5X0FjY2VwdEV4KExpc3RlblNvY2tldCwgQWNjZXB0U29ja2V0LCBQeUJ5dGVzX0FTX1NUUklORyhidWYpLAorICAgICAgICAgICAgICAgICAgICAgIDAsIHNpemUsIHNpemUsICZCeXRlc1JlY2VpdmVkLCAmc2VsZi0+b3ZlcmxhcHBlZCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgIHNlbGYtPmVycm9yID0gZXJyID0gcmV0ID8gRVJST1JfU1VDQ0VTUyA6IFdTQUdldExhc3RFcnJvcigpOworICAgIHN3aXRjaCAoZXJyKSB7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLT50eXBlID0gVFlQRV9OT1RfU1RBUlRFRDsKKyAgICAgICAgICAgIHJldHVybiBTZXRGcm9tV2luZG93c0VycihlcnIpOworICAgIH0KK30KKworCitzdGF0aWMgaW50CitwYXJzZV9hZGRyZXNzKFB5T2JqZWN0ICpvYmosIFNPQ0tBRERSICpBZGRyZXNzLCBpbnQgTGVuZ3RoKQoreworICAgIGNoYXIgKkhvc3Q7CisgICAgdW5zaWduZWQgc2hvcnQgUG9ydDsKKyAgICB1bnNpZ25lZCBsb25nIEZsb3dJbmZvOworICAgIHVuc2lnbmVkIGxvbmcgU2NvcGVJZDsKKworICAgIG1lbXNldChBZGRyZXNzLCAwLCBMZW5ndGgpOworCisgICAgaWYgKFB5QXJnX1BhcnNlVHVwbGUob2JqLCAic0giLCAmSG9zdCwgJlBvcnQpKQorICAgIHsKKyAgICAgICAgQWRkcmVzcy0+c2FfZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgaWYgKFdTQVN0cmluZ1RvQWRkcmVzc0EoSG9zdCwgQUZfSU5FVCwgTlVMTCwgQWRkcmVzcywgJkxlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBTZXRGcm9tV2luZG93c0VycihXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKChTT0NLQUREUl9JTiopQWRkcmVzcyktPnNpbl9wb3J0ID0gaHRvbnMoUG9ydCk7CisgICAgICAgIHJldHVybiBMZW5ndGg7CisgICAgfQorICAgIGVsc2UgaWYgKFB5QXJnX1BhcnNlVHVwbGUob2JqLCAic0hrayIsICZIb3N0LCAmUG9ydCwgJkZsb3dJbmZvLCAmU2NvcGVJZCkpCisgICAgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBBZGRyZXNzLT5zYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgaWYgKFdTQVN0cmluZ1RvQWRkcmVzc0EoSG9zdCwgQUZfSU5FVDYsIE5VTEwsIEFkZHJlc3MsICZMZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgU2V0RnJvbVdpbmRvd3NFcnIoV1NBR2V0TGFzdEVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgICgoU09DS0FERFJfSU42KilBZGRyZXNzKS0+c2luNl9wb3J0ID0gaHRvbnMoUG9ydCk7CisgICAgICAgICgoU09DS0FERFJfSU42KilBZGRyZXNzKS0+c2luNl9mbG93aW5mbyA9IEZsb3dJbmZvOworICAgICAgICAoKFNPQ0tBRERSX0lONiopQWRkcmVzcyktPnNpbjZfc2NvcGVfaWQgPSBTY29wZUlkOworICAgICAgICByZXR1cm4gTGVuZ3RoOworICAgIH0KKworICAgIHJldHVybiAtMTsKK30KKworCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9Db25uZWN0RXhfZG9jLAorICAgICJDb25uZWN0RXgoY2xpZW50X2hhbmRsZSwgYWRkcmVzc19hc19ieXRlcykgLT4gT3ZlcmxhcHBlZFtOb25lXVxuXG4iCisgICAgIlN0YXJ0IG92ZXJsYXBwZWQgY29ubmVjdC4gIGNsaWVudF9oYW5kbGUgc2hvdWxkIGJlIHVuYm91bmQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX0Nvbm5lY3RFeChPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBTT0NLRVQgQ29ubmVjdFNvY2tldDsKKyAgICBQeU9iamVjdCAqQWRkcmVzc09iajsKKyAgICBjaGFyIEFkZHJlc3NCdWZbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpXTsKKyAgICBTT0NLQUREUiAqQWRkcmVzcyA9IChTT0NLQUREUiopQWRkcmVzc0J1ZjsKKyAgICBpbnQgTGVuZ3RoOworICAgIEJPT0wgcmV0OworICAgIERXT1JEIGVycjsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBGX0hBTkRMRSAiTyIsICZDb25uZWN0U29ja2V0LCAmQWRkcmVzc09iaikpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIExlbmd0aCA9IHNpemVvZihBZGRyZXNzQnVmKTsKKyAgICBMZW5ndGggPSBwYXJzZV9hZGRyZXNzKEFkZHJlc3NPYmosIEFkZHJlc3MsIExlbmd0aCk7CisgICAgaWYgKExlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc2VsZi0+dHlwZSA9IFRZUEVfQ09OTkVDVDsKKyAgICBzZWxmLT5oYW5kbGUgPSAoSEFORExFKUNvbm5lY3RTb2NrZXQ7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUHlfQ29ubmVjdEV4KENvbm5lY3RTb2NrZXQsIEFkZHJlc3MsIExlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBXU0FHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1NVQ0NFU1M6CisgICAgICAgIGNhc2UgRVJST1JfSU9fUEVORElORzoKKyAgICAgICAgICAgIFB5X1JFVFVSTl9OT05FOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeF9kb2MsCisgICAgIkRpc2Nvbm5lY3RFeChoYW5kbGUsIGZsYWdzKSAtPiBPdmVybGFwcGVkW05vbmVdXG5cbiIKKyAgICAiU3RhcnQgb3ZlcmxhcHBlZCBjb25uZWN0LiAgY2xpZW50X2hhbmRsZSBzaG91bGQgYmUgdW5ib3VuZC4iKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK092ZXJsYXBwZWRfRGlzY29ubmVjdEV4KE92ZXJsYXBwZWRPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFNPQ0tFVCBTb2NrZXQ7CisgICAgRFdPUkQgZmxhZ3M7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFIEZfRFdPUkQsICZTb2NrZXQsICZmbGFncykpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX0RJU0NPTk5FQ1Q7CisgICAgc2VsZi0+aGFuZGxlID0gKEhBTkRMRSlTb2NrZXQ7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmV0ID0gUHlfRGlzY29ubmVjdEV4KFNvY2tldCwgJnNlbGYtPm92ZXJsYXBwZWQsIGZsYWdzLCAwKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgc2VsZi0+ZXJyb3IgPSBlcnIgPSByZXQgPyBFUlJPUl9TVUNDRVNTIDogV1NBR2V0TGFzdEVycm9yKCk7CisgICAgc3dpdGNoIChlcnIpIHsKKyAgICAgICAgY2FzZSBFUlJPUl9TVUNDRVNTOgorICAgICAgICBjYXNlIEVSUk9SX0lPX1BFTkRJTkc6CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYtPnR5cGUgPSBUWVBFX05PVF9TVEFSVEVEOworICAgICAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKGVycik7CisgICAgfQorfQorCitQeURvY19TVFJWQVIoCisgICAgT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlX2RvYywKKyAgICAiQ29ubmVjdE5hbWVkUGlwZShoYW5kbGUpIC0+IE92ZXJsYXBwZWRbTm9uZV1cblxuIgorICAgICJTdGFydCBvdmVybGFwcGVkIHdhaXQgZm9yIGEgY2xpZW50IHRvIGNvbm5lY3QuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitPdmVybGFwcGVkX0Nvbm5lY3ROYW1lZFBpcGUoT3ZlcmxhcHBlZE9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgSEFORExFIFBpcGU7CisgICAgQk9PTCByZXQ7CisgICAgRFdPUkQgZXJyOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIEZfSEFORExFLCAmUGlwZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNlbGYtPnR5cGUgIT0gVFlQRV9OT05FKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAib3BlcmF0aW9uIGFscmVhZHkgYXR0ZW1wdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHNlbGYtPnR5cGUgPSBUWVBFX0NPTk5FQ1RfTkFNRURfUElQRTsKKyAgICBzZWxmLT5oYW5kbGUgPSBQaXBlOworCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIHJldCA9IENvbm5lY3ROYW1lZFBpcGUoUGlwZSwgJnNlbGYtPm92ZXJsYXBwZWQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBzZWxmLT5lcnJvciA9IGVyciA9IHJldCA/IEVSUk9SX1NVQ0NFU1MgOiBHZXRMYXN0RXJyb3IoKTsKKyAgICBzd2l0Y2ggKGVycikgeworICAgICAgICBjYXNlIEVSUk9SX1BJUEVfQ09OTkVDVEVEOgorICAgICAgICAgICAgbWFya19hc19jb21wbGV0ZWQoJnNlbGYtPm92ZXJsYXBwZWQpOworICAgICAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgICAgIGNhc2UgRVJST1JfU1VDQ0VTUzoKKyAgICAgICAgY2FzZSBFUlJPUl9JT19QRU5ESU5HOgorICAgICAgICAgICAgUHlfUkVUVVJOX0ZBTFNFOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2VsZi0+dHlwZSA9IFRZUEVfTk9UX1NUQVJURUQ7CisgICAgICAgICAgICByZXR1cm4gU2V0RnJvbVdpbmRvd3NFcnIoZXJyKTsKKyAgICB9Cit9CisKK1B5RG9jX1NUUlZBUigKKyAgICBDb25uZWN0UGlwZV9kb2MsCisgICAgIkNvbm5lY3RQaXBlKGFkZHIpIC0+IHBpcGVfaGFuZGxlXG5cbiIKKyAgICAiQ29ubmVjdCB0byB0aGUgcGlwZSBmb3IgYXN5bmNocm9ub3VzIEkvTyAob3ZlcmxhcHBlZCkuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitDb25uZWN0UGlwZShPdmVybGFwcGVkT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqQWRkcmVzc09iajsKKyAgICB3Y2hhcl90ICpBZGRyZXNzOworICAgIEhBTkRMRSBQaXBlSGFuZGxlOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVIiwgICZBZGRyZXNzT2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBBZGRyZXNzID0gUHlVbmljb2RlX0FzV2lkZUNoYXJTdHJpbmcoQWRkcmVzc09iaiwgTlVMTCk7CisgICAgaWYgKEFkZHJlc3MgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgUGlwZUhhbmRsZSA9IENyZWF0ZUZpbGVXKEFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdFTkVSSUNfUkVBRCB8IEdFTkVSSUNfV1JJVEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE5VTEwsIE9QRU5fRVhJU1RJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEVfRkxBR19PVkVSTEFQUEVELCBOVUxMKTsKKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgUHlNZW1fRnJlZShBZGRyZXNzKTsKKyAgICBpZiAoUGlwZUhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAgICAgICAgcmV0dXJuIFNldEZyb21XaW5kb3dzRXJyKDApOworICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKEZfSEFORExFLCBQaXBlSGFuZGxlKTsKK30KKworc3RhdGljIFB5T2JqZWN0KgorT3ZlcmxhcHBlZF9nZXRhZGRyZXNzKE92ZXJsYXBwZWRPYmplY3QgKnNlbGYpCit7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVm9pZFB0cigmc2VsZi0+b3ZlcmxhcHBlZCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK092ZXJsYXBwZWRfZ2V0cGVuZGluZyhPdmVybGFwcGVkT2JqZWN0ICpzZWxmKQoreworICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoIUhhc092ZXJsYXBwZWRJb0NvbXBsZXRlZCgmc2VsZi0+b3ZlcmxhcHBlZCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnR5cGUgIT0gVFlQRV9OT1RfU1RBUlRFRCk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBPdmVybGFwcGVkX21ldGhvZHNbXSA9IHsKKyAgICB7ImdldHJlc3VsdCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9nZXRyZXN1bHQsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9nZXRyZXN1bHRfZG9jfSwKKyAgICB7ImNhbmNlbCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9jYW5jZWwsCisgICAgIE1FVEhfTk9BUkdTLCBPdmVybGFwcGVkX2NhbmNlbF9kb2N9LAorICAgIHsiUmVhZEZpbGUiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfUmVhZEZpbGUsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9SZWFkRmlsZV9kb2N9LAorICAgIHsiV1NBUmVjdiIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9XU0FSZWN2LAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV1NBUmVjdl9kb2N9LAorICAgIHsiV3JpdGVGaWxlIiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX1dyaXRlRmlsZSwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX1dyaXRlRmlsZV9kb2N9LAorICAgIHsiV1NBU2VuZCIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9XU0FTZW5kLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfV1NBU2VuZF9kb2N9LAorICAgIHsiQWNjZXB0RXgiLCAoUHlDRnVuY3Rpb24pIE92ZXJsYXBwZWRfQWNjZXB0RXgsCisgICAgIE1FVEhfVkFSQVJHUywgT3ZlcmxhcHBlZF9BY2NlcHRFeF9kb2N9LAorICAgIHsiQ29ubmVjdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Nvbm5lY3RFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Nvbm5lY3RFeF9kb2N9LAorICAgIHsiRGlzY29ubmVjdEV4IiwgKFB5Q0Z1bmN0aW9uKSBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeCwKKyAgICAgTUVUSF9WQVJBUkdTLCBPdmVybGFwcGVkX0Rpc2Nvbm5lY3RFeF9kb2N9LAorICAgIHsiQ29ubmVjdE5hbWVkUGlwZSIsIChQeUNGdW5jdGlvbikgT3ZlcmxhcHBlZF9Db25uZWN0TmFtZWRQaXBlLAorICAgICBNRVRIX1ZBUkFSR1MsIE92ZXJsYXBwZWRfQ29ubmVjdE5hbWVkUGlwZV9kb2N9LAorICAgIHtOVUxMfQorfTsKKworc3RhdGljIFB5TWVtYmVyRGVmIE92ZXJsYXBwZWRfbWVtYmVyc1tdID0geworICAgIHsiZXJyb3IiLCBUX1VMT05HLAorICAgICBvZmZzZXRvZihPdmVybGFwcGVkT2JqZWN0LCBlcnJvciksCisgICAgIFJFQURPTkxZLCAiRXJyb3IgZnJvbSBsYXN0IG9wZXJhdGlvbiJ9LAorICAgIHsiZXZlbnQiLCBUX0hBTkRMRSwKKyAgICAgb2Zmc2V0b2YoT3ZlcmxhcHBlZE9iamVjdCwgb3ZlcmxhcHBlZCkgKyBvZmZzZXRvZihPVkVSTEFQUEVELCBoRXZlbnQpLAorICAgICBSRUFET05MWSwgIk92ZXJsYXBwZWQgZXZlbnQgaGFuZGxlIn0sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgUHlHZXRTZXREZWYgT3ZlcmxhcHBlZF9nZXRzZXRzW10gPSB7CisgICAgeyJhZGRyZXNzIiwgKGdldHRlcilPdmVybGFwcGVkX2dldGFkZHJlc3MsIE5VTEwsCisgICAgICJBZGRyZXNzIG9mIG92ZXJsYXBwZWQgc3RydWN0dXJlIn0sCisgICAgeyJwZW5kaW5nIiwgKGdldHRlcilPdmVybGFwcGVkX2dldHBlbmRpbmcsIE5VTEwsCisgICAgICJXaGV0aGVyIHRoZSBvcGVyYXRpb24gaXMgcGVuZGluZyJ9LAorICAgIHtOVUxMfSwKK307CisKK1B5VHlwZU9iamVjdCBPdmVybGFwcGVkVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoTlVMTCwgMCkKKyAgICAvKiB0cF9uYW1lICAgICAgICAgICAqLyAiX292ZXJsYXBwZWQuT3ZlcmxhcHBlZCIsCisgICAgLyogdHBfYmFzaWNzaXplICAgICAgKi8gc2l6ZW9mKE92ZXJsYXBwZWRPYmplY3QpLAorICAgIC8qIHRwX2l0ZW1zaXplICAgICAgICovIDAsCisgICAgLyogdHBfZGVhbGxvYyAgICAgICAgKi8gKGRlc3RydWN0b3IpIE92ZXJsYXBwZWRfZGVhbGxvYywKKyAgICAvKiB0cF9wcmludCAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2dldGF0dHIgICAgICAgICovIDAsCisgICAgLyogdHBfc2V0YXR0ciAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9yZXNlcnZlZCAgICAgICAqLyAwLAorICAgIC8qIHRwX3JlcHIgICAgICAgICAgICovIDAsCisgICAgLyogdHBfYXNfbnVtYmVyICAgICAgKi8gMCwKKyAgICAvKiB0cF9hc19zZXF1ZW5jZSAgICAqLyAwLAorICAgIC8qIHRwX2FzX21hcHBpbmcgICAgICovIDAsCisgICAgLyogdHBfaGFzaCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9jYWxsICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX3N0ciAgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZ2V0YXR0cm8gICAgICAgKi8gMCwKKyAgICAvKiB0cF9zZXRhdHRybyAgICAgICAqLyAwLAorICAgIC8qIHRwX2FzX2J1ZmZlciAgICAgICovIDAsCisgICAgLyogdHBfZmxhZ3MgICAgICAgICAgKi8gUHlfVFBGTEFHU19ERUZBVUxULAorICAgIC8qIHRwX2RvYyAgICAgICAgICAgICovICJPVkVSTEFQUEVEIHN0cnVjdHVyZSB3cmFwcGVyIiwKKyAgICAvKiB0cF90cmF2ZXJzZSAgICAgICAqLyAwLAorICAgIC8qIHRwX2NsZWFyICAgICAgICAgICovIDAsCisgICAgLyogdHBfcmljaGNvbXBhcmUgICAgKi8gMCwKKyAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLyAwLAorICAgIC8qIHRwX2l0ZXIgICAgICAgICAgICovIDAsCisgICAgLyogdHBfaXRlcm5leHQgICAgICAgKi8gMCwKKyAgICAvKiB0cF9tZXRob2RzICAgICAgICAqLyBPdmVybGFwcGVkX21ldGhvZHMsCisgICAgLyogdHBfbWVtYmVycyAgICAgICAgKi8gT3ZlcmxhcHBlZF9tZW1iZXJzLAorICAgIC8qIHRwX2dldHNldCAgICAgICAgICovIE92ZXJsYXBwZWRfZ2V0c2V0cywKKyAgICAvKiB0cF9iYXNlICAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX2RpY3QgICAgICAgICAgICovIDAsCisgICAgLyogdHBfZGVzY3JfZ2V0ICAgICAgKi8gMCwKKyAgICAvKiB0cF9kZXNjcl9zZXQgICAgICAqLyAwLAorICAgIC8qIHRwX2RpY3RvZmZzZXQgICAgICovIDAsCisgICAgLyogdHBfaW5pdCAgICAgICAgICAgKi8gMCwKKyAgICAvKiB0cF9hbGxvYyAgICAgICAgICAqLyAwLAorICAgIC8qIHRwX25ldyAgICAgICAgICAgICovIE92ZXJsYXBwZWRfbmV3LAorfTsKKworc3RhdGljIFB5TWV0aG9kRGVmIG92ZXJsYXBwZWRfZnVuY3Rpb25zW10gPSB7CisgICAgeyJDcmVhdGVJb0NvbXBsZXRpb25Qb3J0Iiwgb3ZlcmxhcHBlZF9DcmVhdGVJb0NvbXBsZXRpb25Qb3J0LAorICAgICBNRVRIX1ZBUkFSR1MsIENyZWF0ZUlvQ29tcGxldGlvblBvcnRfZG9jfSwKKyAgICB7IkdldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMiLCBvdmVybGFwcGVkX0dldFF1ZXVlZENvbXBsZXRpb25TdGF0dXMsCisgICAgIE1FVEhfVkFSQVJHUywgR2V0UXVldWVkQ29tcGxldGlvblN0YXR1c19kb2N9LAorICAgIHsiUG9zdFF1ZXVlZENvbXBsZXRpb25TdGF0dXMiLCBvdmVybGFwcGVkX1Bvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzLAorICAgICBNRVRIX1ZBUkFSR1MsIFBvc3RRdWV1ZWRDb21wbGV0aW9uU3RhdHVzX2RvY30sCisgICAgeyJGb3JtYXRNZXNzYWdlIiwgb3ZlcmxhcHBlZF9Gb3JtYXRNZXNzYWdlLAorICAgICBNRVRIX1ZBUkFSR1MsIEZvcm1hdE1lc3NhZ2VfZG9jfSwKKyAgICB7IkJpbmRMb2NhbCIsIG92ZXJsYXBwZWRfQmluZExvY2FsLAorICAgICBNRVRIX1ZBUkFSR1MsIEJpbmRMb2NhbF9kb2N9LAorICAgIHsiUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlIiwgb3ZlcmxhcHBlZF9SZWdpc3RlcldhaXRXaXRoUXVldWUsCisgICAgIE1FVEhfVkFSQVJHUywgUmVnaXN0ZXJXYWl0V2l0aFF1ZXVlX2RvY30sCisgICAgeyJVbnJlZ2lzdGVyV2FpdCIsIG92ZXJsYXBwZWRfVW5yZWdpc3RlcldhaXQsCisgICAgIE1FVEhfVkFSQVJHUywgVW5yZWdpc3RlcldhaXRfZG9jfSwKKyAgICB7IlVucmVnaXN0ZXJXYWl0RXgiLCBvdmVybGFwcGVkX1VucmVnaXN0ZXJXYWl0RXgsCisgICAgIE1FVEhfVkFSQVJHUywgVW5yZWdpc3RlcldhaXRFeF9kb2N9LAorICAgIHsiQ3JlYXRlRXZlbnQiLCBvdmVybGFwcGVkX0NyZWF0ZUV2ZW50LAorICAgICBNRVRIX1ZBUkFSR1MsIENyZWF0ZUV2ZW50X2RvY30sCisgICAgeyJTZXRFdmVudCIsIG92ZXJsYXBwZWRfU2V0RXZlbnQsCisgICAgIE1FVEhfVkFSQVJHUywgU2V0RXZlbnRfZG9jfSwKKyAgICB7IlJlc2V0RXZlbnQiLCBvdmVybGFwcGVkX1Jlc2V0RXZlbnQsCisgICAgIE1FVEhfVkFSQVJHUywgUmVzZXRFdmVudF9kb2N9LAorICAgIHsiQ29ubmVjdFBpcGUiLAorICAgICAoUHlDRnVuY3Rpb24pIENvbm5lY3RQaXBlLAorICAgICBNRVRIX1ZBUkFSR1MsIENvbm5lY3RQaXBlX2RvY30sCisgICAge05VTEx9Cit9OworCitzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIG92ZXJsYXBwZWRfbW9kdWxlID0geworICAgIFB5TW9kdWxlRGVmX0hFQURfSU5JVCwKKyAgICAiX292ZXJsYXBwZWQiLAorICAgIE5VTEwsCisgICAgLTEsCisgICAgb3ZlcmxhcHBlZF9mdW5jdGlvbnMsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTAorfTsKKworI2RlZmluZSBXSU5BUElfQ09OU1RBTlQoZm10LCBjb24pIFwKKyAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAjY29uLCBQeV9CdWlsZFZhbHVlKGZtdCwgY29uKSkKKworUHlNT0RJTklUX0ZVTkMKK1B5SW5pdF9fb3ZlcmxhcHBlZCh2b2lkKQoreworICAgIFB5T2JqZWN0ICptLCAqZDsKKworICAgIC8qIEVuc3VyZSBXU0FTdGFydHVwKCkgY2FsbGVkIGJlZm9yZSBpbml0aWFsaXppbmcgZnVuY3Rpb24gcG9pbnRlcnMgKi8KKyAgICBtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJfc29ja2V0Iik7CisgICAgaWYgKCFtKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9ERUNSRUYobSk7CisKKyAgICBpZiAoaW5pdGlhbGl6ZV9mdW5jdGlvbl9wb2ludGVycygpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoUHlUeXBlX1JlYWR5KCZPdmVybGFwcGVkVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJm92ZXJsYXBwZWRfbW9kdWxlKTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJPdmVybGFwcGVkIiwgKFB5T2JqZWN0ICopJk92ZXJsYXBwZWRUeXBlKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CisKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIEVSUk9SX0lPX1BFTkRJTkcpOworICAgIFdJTkFQSV9DT05TVEFOVChGX0RXT1JELCAgRVJST1JfTkVUTkFNRV9ERUxFVEVEKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIEVSUk9SX1NFTV9USU1FT1VUKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIEVSUk9SX1BJUEVfQlVTWSk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBJTkZJTklURSk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfSEFORExFLCBJTlZBTElEX0hBTkRMRV9WQUxVRSk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfSEFORExFLCBOVUxMKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIFNPX1VQREFURV9BQ0NFUFRfQ09OVEVYVCk7CisgICAgV0lOQVBJX0NPTlNUQU5UKEZfRFdPUkQsICBTT19VUERBVEVfQ09OTkVDVF9DT05URVhUKTsKKyAgICBXSU5BUElfQ09OU1RBTlQoRl9EV09SRCwgIFRGX1JFVVNFX1NPQ0tFVCk7CisKKyAgICByZXR1cm4gbTsKK30KZGlmZiAtLWdpdCBhL01vZHVsZXMvcGFyc2VybW9kdWxlLmMgYi9Nb2R1bGVzL3BhcnNlcm1vZHVsZS5jCmluZGV4IGU1OTgwNDYuLjM2ZTk4OTMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcGFyc2VybW9kdWxlLmMKKysrIGIvTW9kdWxlcy9wYXJzZXJtb2R1bGUuYwpAQCAtODMsNTQgKzgzLDc4IEBACiAgICAgICAgICAgIGludCBsaW5lbm8sICAgICAgICAgICAgICAgICAgLyogaW5jbHVkZSBsaW5lIG51bWJlcnM/ICAgICAgICAgKi8KICAgICAgICAgICAgaW50IGNvbF9vZmZzZXQpICAgICAgICAgICAgICAvKiBpbmNsdWRlIGNvbHVtbiBvZmZzZXRzPyAgICAgICAqLwogeworICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMLCAqdzsKKwogICAgIGlmIChuID09IE5VTEwpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gKFB5X05vbmUpOworICAgICAgICByZXR1cm4gUHlfTm9uZTsKICAgICB9CisKICAgICBpZiAoSVNOT05URVJNSU5BTChUWVBFKG4pKSkgewogICAgICAgICBpbnQgaTsKLSAgICAgICAgUHlPYmplY3QgKnY7Ci0gICAgICAgIFB5T2JqZWN0ICp3OwogCi0gICAgICAgIHYgPSBta3NlcSgxICsgTkNIKG4pICsgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkpOwotICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuICh2KTsKKyAgICAgICAgcmVzdWx0ID0gbWtzZXEoMSArIE5DSChuKSArIChUWVBFKG4pID09IGVuY29kaW5nX2RlY2wpKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKwogICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKFRZUEUobikpOwotICAgICAgICBpZiAodyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICByZXR1cm4gKChQeU9iamVjdCopIE5VTEwpOwotICAgICAgICB9Ci0gICAgICAgICh2b2lkKSBhZGRlbGVtKHYsIDAsIHcpOworICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAwLCB3KTsKKwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpKyspIHsKICAgICAgICAgICAgIHcgPSBub2RlMnR1cGxlKENISUxEKG4sIGkpLCBta3NlcSwgYWRkZWxlbSwgbGluZW5vLCBjb2xfb2Zmc2V0KTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoUHlPYmplY3QqKSBOVUxMKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHYsIGkrMSwgdyk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIGkrMSwgdyk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoVFlQRShuKSA9PSBlbmNvZGluZ19kZWNsKQotICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0odiwgaSsxLCBQeVVuaWNvZGVfRnJvbVN0cmluZyhTVFIobikpKTsKLSAgICAgICAgcmV0dXJuICh2KTsKKyAgICAgICAgaWYgKFRZUEUobikgPT0gZW5jb2RpbmdfZGVjbCkgeworICAgICAgICAgICAgdyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKFNUUihuKSk7CisgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAodm9pZCkgYWRkZWxlbShyZXN1bHQsIGkrMSwgdyk7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoSVNURVJNSU5BTChUWVBFKG4pKSkgewotICAgICAgICBQeU9iamVjdCAqcmVzdWx0ID0gbWtzZXEoMiArIGxpbmVubyArIGNvbF9vZmZzZXQpOwotICAgICAgICBpZiAocmVzdWx0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMCwgUHlMb25nX0Zyb21Mb25nKFRZUEUobikpKTsKLSAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMSwgUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKSk7Ci0gICAgICAgICAgICBpZiAobGluZW5vID09IDEpCi0gICAgICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAyLCBQeUxvbmdfRnJvbUxvbmcobi0+bl9saW5lbm8pKTsKLSAgICAgICAgICAgIGlmIChjb2xfb2Zmc2V0ID09IDEpCi0gICAgICAgICAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAzLCBQeUxvbmdfRnJvbUxvbmcobi0+bl9jb2xfb2Zmc2V0KSk7CisgICAgICAgIHJlc3VsdCA9IG1rc2VxKDIgKyBsaW5lbm8gKyBjb2xfb2Zmc2V0KTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKFRZUEUobikpOworICAgICAgICBpZiAodyA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgKHZvaWQpIGFkZGVsZW0ocmVzdWx0LCAwLCB3KTsKKworICAgICAgICB3ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoU1RSKG4pKTsKKyAgICAgICAgaWYgKHcgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMSwgdyk7CisKKyAgICAgICAgaWYgKGxpbmVubyA9PSAxKSB7CisgICAgICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKG4tPm5fbGluZW5vKTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMiwgdyk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIChyZXN1bHQpOworCisgICAgICAgIGlmIChjb2xfb2Zmc2V0ID09IDEpIHsKKyAgICAgICAgICAgIHcgPSBQeUxvbmdfRnJvbUxvbmcobi0+bl9jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICh2b2lkKSBhZGRlbGVtKHJlc3VsdCwgMywgdyk7CisgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnJlY29nbml6ZWQgcGFyc2UgdHJlZSBub2RlIHR5cGUiKTsKICAgICAgICAgcmV0dXJuICgoUHlPYmplY3QqKSBOVUxMKTsKICAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKKworZXJyb3I6CisgICAgUHlfWERFQ1JFRihyZXN1bHQpOworICAgIHJldHVybiBOVUxMOwogfQogLyoKICAqICBFbmQgb2YgbWF0ZXJpYWwgY29weXJpZ2h0ZWQgYnkgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtLgpAQCAtNDUzLDMzICs0NzcsNDYgQEAKIHN0YXRpYyBQeU9iamVjdCoKIHBhcnNlcl9jb21waWxlc3QoUHlTVF9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3cpCiB7Ci0gICAgUHlPYmplY3QqICAgICByZXMgPSAwOwotICAgIFB5QXJlbmEqICAgICAgYXJlbmE7CisgICAgUHlPYmplY3QqICAgICByZXMgPSBOVUxMOworICAgIFB5QXJlbmEqICAgICAgYXJlbmEgPSBOVUxMOwogICAgIG1vZF90eSAgICAgICAgbW9kOwotICAgIGNoYXIqICAgICAgICAgc3RyID0gIjxzeW50YXgtdHJlZT4iOworICAgIFB5T2JqZWN0KiAgICAgZmlsZW5hbWUgPSBOVUxMOwogICAgIGludCBvazsKIAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJzdCIsICJmaWxlbmFtZSIsIE5VTEx9OwogCiAgICAgaWYgKHNlbGYgPT0gTlVMTCB8fCBQeU1vZHVsZV9DaGVjayhzZWxmKSkKLSAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJPIXxzOmNvbXBpbGVzdCIsIGtleXdvcmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlTVF9UeXBlLCAmc2VsZiwgJnN0cik7CisgICAgICAgIG9rID0gUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3LCAiTyF8TyY6Y29tcGlsZXN0Iiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeVNUX1R5cGUsICZzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUpOwogICAgIGVsc2UKLSAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8czpjb21waWxlIiwgJmtleXdvcmRzWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RyKTsKKyAgICAgICAgb2sgPSBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3csICJ8TyY6Y29tcGlsZSIsICZrZXl3b3Jkc1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTRGVjb2RlciwgJmZpbGVuYW1lKTsKKyAgICBpZiAoIW9rKQorICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgaWYgKG9rKSB7Ci0gICAgICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKLSAgICAgICAgaWYgKGFyZW5hKSB7Ci0gICAgICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlKHNlbGYtPnN0X25vZGUsICYoc2VsZi0+c3RfZmxhZ3MpLCBzdHIsIGFyZW5hKTsKLSAgICAgICAgICAgaWYgKG1vZCkgewotICAgICAgICAgICAgICAgcmVzID0gKFB5T2JqZWN0ICopUHlBU1RfQ29tcGlsZShtb2QsIHN0ciwgJihzZWxmLT5zdF9mbGFncyksIGFyZW5hKTsKLSAgICAgICAgICAgfQotICAgICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwotICAgICAgICB9CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPHN5bnRheC10cmVlPiIpOworICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCi0gICAgcmV0dXJuIChyZXMpOworICAgIGFyZW5hID0gUHlBcmVuYV9OZXcoKTsKKyAgICBpZiAoIWFyZW5hKQorICAgICAgICBnb3RvIGVycm9yOworCisgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3Qoc2VsZi0+c3Rfbm9kZSwgJnNlbGYtPnN0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgaWYgKCFtb2QpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICByZXMgPSAoUHlPYmplY3QgKilQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VsZi0+c3RfZmxhZ3MsIC0xLCBhcmVuYSk7CitlcnJvcjoKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lKTsKKyAgICBpZiAoYXJlbmEgIT0gTlVMTCkKKyAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiAKQEAgLTgwOSw4ICs4NDYsMTMgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHN0cm4gPSAoY2hhciAqKVB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKLSAgICAgICAgICAgIGlmIChzdHJuICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgKHZvaWQpIG1lbWNweShzdHJuLCB0ZW1wX3N0ciwgbGVuICsgMSk7CisgICAgICAgICAgICBpZiAoc3RybiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRlbXApOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoZWxlbSk7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICh2b2lkKSBtZW1jcHkoc3RybiwgdGVtcF9zdHIsIGxlbiArIDEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHRlbXApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKCFJU05PTlRFUk1JTkFMKHR5cGUpKSB7CkBAIC04NzAsNyArOTEyLDcgQEAKICAgICAgICAgICogIFRoZSB0dXBsZSBpcyBzaW1wbGUsIGJ1dCBpdCBkb2Vzbid0IHN0YXJ0IHdpdGggYSBzdGFydCBzeW1ib2wuCiAgICAgICAgICAqICBSYWlzZSBhbiBleGNlcHRpb24gbm93IGFuZCBiZSBkb25lIHdpdGggaXQuCiAgICAgICAgICAqLwotICAgICAgICB0dXBsZSA9IFB5X0J1aWxkVmFsdWUoIm9zIiwgdHVwbGUsCisgICAgICAgIHR1cGxlID0gUHlfQnVpbGRWYWx1ZSgiT3MiLCB0dXBsZSwKICAgICAgICAgICAgICAgICAgICAgIklsbGVnYWwgc3ludGF4LXRyZWU7IGNhbm5vdCBzdGFydCB3aXRoIHRlcm1pbmFsIHN5bWJvbC4iKTsKICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KHBhcnNlcl9lcnJvciwgdHVwbGUpOwogICAgICAgICBQeV9YREVDUkVGKHR1cGxlKTsKQEAgLTkwNiw4ICs5NDgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJlcy0+bl9zdHIgPSAoY2hhciAqKVB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzLT5uX3N0ciAhPSBOVUxMICYmIHRlbXAgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpIG1lbWNweShyZXMtPm5fc3RyLCB0ZW1wLCBsZW4gKyAxKTsKKyAgICAgICAgICAgICAgICBpZiAocmVzLT5uX3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RpbmcpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOworICAgICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgKHZvaWQpIG1lbWNweShyZXMtPm5fc3RyLCB0ZW1wLCBsZW4gKyAxKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZW5jb2RpbmcpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMgYi9Nb2R1bGVzL3Bvc2l4bW9kdWxlLmMKaW5kZXggNzY3YTY2NS4uN2M5MzdlMCAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wb3NpeG1vZHVsZS5jCisrKyBiL01vZHVsZXMvcG9zaXhtb2R1bGUuYwpAQCAtMSwxNSArMSwxNCBAQAogCiAvKiBQT1NJWCBtb2R1bGUgaW1wbGVtZW50YXRpb24gKi8KIAotLyogVGhpcyBmaWxlIGlzIGFsc28gdXNlZCBmb3IgV2luZG93cyBOVC9NUy1XaW4gYW5kIE9TLzIuICBJbiB0aGF0IGNhc2UgdGhlCi0gICBtb2R1bGUgYWN0dWFsbHkgY2FsbHMgaXRzZWxmICdudCcgb3IgJ29zMicsIG5vdCAncG9zaXgnLCBhbmQgYSBmZXcKKy8qIFRoaXMgZmlsZSBpcyBhbHNvIHVzZWQgZm9yIFdpbmRvd3MgTlQvTVMtV2luLiAgSW4gdGhhdCBjYXNlIHRoZQorICAgbW9kdWxlIGFjdHVhbGx5IGNhbGxzIGl0c2VsZiAnbnQnLCBub3QgJ3Bvc2l4JywgYW5kIGEgZmV3CiAgICBmdW5jdGlvbnMgYXJlIGVpdGhlciB1bmltcGxlbWVudGVkIG9yIGltcGxlbWVudGVkIGRpZmZlcmVudGx5LiAgVGhlIHNvdXJjZQogICAgYXNzdW1lcyB0aGF0IGZvciBXaW5kb3dzIE5ULCB0aGUgbWFjcm8gJ01TX1dJTkRPV1MnIGlzIGRlZmluZWQgaW5kZXBlbmRlbnQKICAgIG9mIHRoZSBjb21waWxlciB1c2VkLiAgRGlmZmVyZW50IGNvbXBpbGVycyBkZWZpbmUgdGhlaXIgb3duIGZlYXR1cmUKLSAgIHRlc3QgbWFjcm8sIGUuZy4gJ19fQk9STEFORENfXycgb3IgJ19NU0NfVkVSJy4gIEZvciBPUy8yLCB0aGUgY29tcGlsZXIKLSAgIGluZGVwZW5kZW50IG1hY3JvIFBZT1NfT1MyIHNob3VsZCBiZSBkZWZpbmVkLiAgT24gT1MvMiB0aGUgZGVmYXVsdAotICAgY29tcGlsZXIgaXMgYXNzdW1lZCB0byBiZSBJQk0ncyBWaXN1YWxBZ2UgQysrIChWQUNQUCkuICBQWUNDX0dDQyBpcyB1c2VkCi0gICBhcyB0aGUgY29tcGlsZXIgc3BlY2lmaWMgbWFjcm8gZm9yIHRoZSBFTVggcG9ydCBvZiBnY2MgdG8gT1MvMi4gKi8KKyAgIHRlc3QgbWFjcm8sIGUuZy4gJ19fQk9STEFORENfXycgb3IgJ19NU0NfVkVSJy4gKi8KKworCiAKICNpZmRlZiBfX0FQUExFX18KICAgIC8qCkBAIC0zMCwxMSArMjksNiBAQAogI2luY2x1ZGUgInBvc2l4bW9kdWxlLmgiCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoX19WTVMpCi0jICAgIGVycm9yICJQRVAgMTE6IFZNUyBpcyBub3cgdW5zdXBwb3J0ZWQsIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQiCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPgotI2VuZGlmIC8qIGRlZmluZWQoX19WTVMpICovCi0KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKQEAgLTQ2LDIyICs0MCw2IEBACiBjb3JyZXNwb25kaW5nIFVuaXggbWFudWFsIGVudHJpZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gY2FsbHMuIik7CiAKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0jZXJyb3IgIlBFUCAxMTogT1MvMiBpcyBub3cgdW5zdXBwb3J0ZWQsIGNvZGUgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQiCi0jZGVmaW5lICBJTkNMX0RPUwotI2RlZmluZSAgSU5DTF9ET1NFUlJPUlMKLSNkZWZpbmUgIElOQ0xfRE9TUFJPQ0VTUwotI2RlZmluZSAgSU5DTF9OT1BNQVBJCi0jaW5jbHVkZSA8b3MyLmg+Ci0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGlvLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxwcm9jZXNzLmg+Ci0jZW5kaWYKLSNpbmNsdWRlICJvc2RlZnMuaCIKLSNlbmRpZgotCiAjaWZkZWYgSEFWRV9TWVNfVUlPX0gKICNpbmNsdWRlIDxzeXMvdWlvLmg+CiAjZW5kaWYKQEAgLTExNCw3ICs5Miw3IEBACiAjdW5kZWYgSEFWRV9TQ0hFRF9TRVRBRkZJTklUWQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfU1lTX1hBVFRSX0gpICYmIGRlZmluZWQoX19HTElCQ19fKQorI2lmIGRlZmluZWQoSEFWRV9TWVNfWEFUVFJfSCkgJiYgZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fRnJlZUJTRF9rZXJuZWxfXykgJiYgIWRlZmluZWQoX19HTlVfXykKICNkZWZpbmUgVVNFX1hBVFRSUwogI2VuZGlmCiAKQEAgLTEzMiw2ICsxMTAsMTggQEAKICNpbmNsdWRlIDxkbGZjbi5oPgogI2VuZGlmCiAKKyNpZmRlZiBfX2hwdXgKKyNpbmNsdWRlIDxzeXMvbXBjdGwuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBcCisgICAgZGVmaW5lZChfX09wZW5CU0RfXykgICB8fCBcCisgICAgZGVmaW5lZChfX0ZyZWVCU0RfXykgICB8fCBcCisgICAgZGVmaW5lZChfX05ldEJTRF9fKSAgICB8fCBcCisgICAgZGVmaW5lZChfX0FQUExFX18pCisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VuZGlmCisKICNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAjICBkZWZpbmUgVEVSTVNJWkVfVVNFX0NPTklPCiAjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpCkBAIC0xNDYsMjkgKzEzNiwxOSBAQAogCiAvKiBWYXJpb3VzIGNvbXBpbGVycyBoYXZlIG9ubHkgY2VydGFpbiBwb3NpeCBmdW5jdGlvbnMgKi8KIC8qIFhYWCBHb3NoIEkgd2lzaCB0aGVzZSB3ZXJlIGFsbCBtb3ZlZCBpbnRvIHB5Y29uZmlnLmggKi8KLSNpZiBkZWZpbmVkKFBZQ0NfVkFDUFApICYmIGRlZmluZWQoUFlPU19PUzIpCi0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotI2Vsc2UKICNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChfX1FOWF9fKSAgICAgICAgICAgLyogV2F0Y29tIGNvbXBpbGVyICovCi0jZGVmaW5lIEhBVkVfR0VUQ1dEICAgICAxCiAjZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCiAjZGVmaW5lIEhBVkVfU1lTVEVNICAgICAxCi0jaWYgZGVmaW5lZChfX09TMl9fKQotI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQotI2RlZmluZSBIQVZFX1dBSVQgICAgICAgMQotI2VuZGlmCiAjaW5jbHVkZSA8cHJvY2Vzcy5oPgogI2Vsc2UKICNpZmRlZiBfX0JPUkxBTkRDX18gICAgICAgICAgICAgLyogQm9ybGFuZCBjb21waWxlciAqLwogI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX09QRU5ESVIgICAgMQogI2RlZmluZSBIQVZFX1BJUEUgICAgICAgMQogI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgMQogI2RlZmluZSBIQVZFX1dBSVQgICAgICAgMQogI2Vsc2UKICNpZmRlZiBfTVNDX1ZFUiAgICAgICAgIC8qIE1pY3Jvc29mdCBjb21waWxlciAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAgICAgMQogI2RlZmluZSBIQVZFX0dFVFBQSUQgICAgMQogI2RlZmluZSBIQVZFX0dFVExPR0lOICAgMQogI2RlZmluZSBIQVZFX1NQQVdOViAgICAgMQpAQCAtMTc5LDE2ICsxNTksMTIgQEAKICNkZWZpbmUgSEFWRV9GU1lOQyAgICAgIDEKICNkZWZpbmUgZnN5bmMgX2NvbW1pdAogI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKSB8fCBkZWZpbmVkKF9fVk1TKQotLyogRXZlcnl0aGluZyBuZWVkZWQgaXMgZGVmaW5lZCBpbiBQQy9vczJlbXgvcHljb25maWcuaCBvciB2bXMvcHljb25maWcuaCAqLwotI2Vsc2UgICAgICAgICAgICAgICAgICAgLyogYWxsIG90aGVyIGNvbXBpbGVycyAqLwogLyogVW5peCBmdW5jdGlvbnMgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBkb2Vzbid0IGNoZWNrIGZvciAqLwogI2RlZmluZSBIQVZFX0VYRUNWICAgICAgMQogI2RlZmluZSBIQVZFX0ZPUksgICAgICAgMQogI2lmIGRlZmluZWQoX19VU0xDX18pICYmIGRlZmluZWQoX19TQ09fVkVSU0lPTl9fKSAgICAgICAvKiBTQ08gVURLIENvbXBpbGVyICovCiAjZGVmaW5lIEhBVkVfRk9SSzEgICAgICAxCiAjZW5kaWYKLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgIDEKICNkZWZpbmUgSEFWRV9HRVRFR0lEICAgIDEKICNkZWZpbmUgSEFWRV9HRVRFVUlEICAgIDEKICNkZWZpbmUgSEFWRV9HRVRHSUQgICAgIDEKQEAgLTIwMCwxNCArMTc2LDE1IEBACiAjZGVmaW5lIEhBVkVfU1lTVEVNICAgICAxCiAjZGVmaW5lIEhBVkVfV0FJVCAgICAgICAxCiAjZGVmaW5lIEhBVkVfVFRZTkFNRSAgICAxCi0jZW5kaWYgIC8qIFBZT1NfT1MyICYmIFBZQ0NfR0NDICYmIF9fVk1TICovCiAjZW5kaWYgIC8qIF9NU0NfVkVSICovCiAjZW5kaWYgIC8qIF9fQk9STEFORENfXyAqLwogI2VuZGlmICAvKiAhIF9fV0FUQ09NQ19fIHx8IF9fUU5YX18gKi8KLSNlbmRpZiAvKiAhIF9fSUJNQ19fICovCiAKIAotCisvKltjbGluaWMgaW5wdXRdCittb2R1bGUgb3MKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PThjZmYwOTZkMTEzMzI4OGZdKi8KIAogI2lmbmRlZiBfTVNDX1ZFUgogCkBAIC0zMzUsMTAgKzMxMiw2IEBACiAjZW5kaWYKICNlbmRpZiAvKiBfTVNDX1ZFUiAqLwogCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKSAmJiBkZWZpbmVkKFBZT1NfT1MyKQotI2luY2x1ZGUgPGlvLmg+Ci0jZW5kaWYgLyogT1MyICovCi0KICNpZm5kZWYgTUFYUEFUSExFTgogI2lmIGRlZmluZWQoUEFUSF9NQVgpICYmIFBBVEhfTUFYID4gMTAyNAogI2RlZmluZSBNQVhQQVRITEVOIFBBVEhfTUFYCkBAIC0zODAsNyArMzUzLDcgQEAKICN1bmRlZiBTVEFUCiAjdW5kZWYgRlNUQVQKICN1bmRlZiBTVFJVQ1RfU1RBVAotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAjICAgICAgIGRlZmluZSBTVEFUIHdpbjMyX3N0YXQKICMgICAgICAgZGVmaW5lIExTVEFUIHdpbjMyX2xzdGF0CiAjICAgICAgIGRlZmluZSBGU1RBVCB3aW4zMl9mc3RhdApAQCAtNDAzLDYgKzM3Niw4IEBACiAjZW5kaWYKICNlbmRpZgogCisjZGVmaW5lIERXT1JEX01BWCA0Mjk0OTY3Mjk1VQorCiAKICNpZmRlZiBNU19XSU5ET1dTCiBzdGF0aWMgaW50CkBAIC00MzYsMTEzICs0MTEsMjQxIEBACiBpbnQKIF9QeV9VaWRfQ29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnApCiB7CisgICAgdWlkX3QgdWlkOworICAgIFB5T2JqZWN0ICppbmRleDsKICAgICBpbnQgb3ZlcmZsb3c7CiAgICAgbG9uZyByZXN1bHQ7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOworICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKKworICAgIGluZGV4ID0gUHlOdW1iZXJfSW5kZXgob2JqKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgInVpZCBzaG91bGQgYmUgaW50ZWdlciwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iaiwgJm92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cgPCAwKQotICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICBpZiAoIW92ZXJmbG93ICYmIHJlc3VsdCA9PSAtMSkgewotICAgICAgICAvKiBlcnJvciBvciAtMSAqLwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAqKHVpZF90ICopcCA9ICh1aWRfdCktMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIHVuc2lnbmVkIHVpZF90ICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKLSAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgewotICAgICAgICAgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCh1aWRfdCl1cmVzdWx0ID09ICh1aWRfdCktMSkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICAgICAgICAgIHVyZXN1bHQgPSByZXN1bHQ7CisKKyAgICAvKgorICAgICAqIEhhbmRsaW5nIHVpZF90IGlzIGNvbXBsaWNhdGVkIGZvciB0d28gcmVhc29uczoKKyAgICAgKiAgKiBBbHRob3VnaCB1aWRfdCBpcyAoYWx3YXlzPykgdW5zaWduZWQsIGl0IHN0aWxsCisgICAgICogICAgYWNjZXB0cyAtMS4KKyAgICAgKiAgKiBXZSBkb24ndCBrbm93IGl0cyBzaXplIGluIGFkdmFuY2UtLWl0IG1heSBiZQorICAgICAqICAgIGJpZ2dlciB0aGFuIGFuIGludCwgb3IgaXQgbWF5IGJlIHNtYWxsZXIgdGhhbgorICAgICAqICAgIGEgbG9uZy4KKyAgICAgKgorICAgICAqIFNvIGEgYml0IG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBpbiBvcmRlci4KKyAgICAgKiBTdGFydCB3aXRoIGludGVycHJldGluZyB0aGUgdmFsdWUgcGFzc2VkCisgICAgICogaW4gYXMgYSBzaWduZWQgbG9uZyBhbmQgc2VlIGlmIGl0IHdvcmtzLgorICAgICAqLworCisgICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGluZGV4LCAmb3ZlcmZsb3cpOworCisgICAgaWYgKCFvdmVyZmxvdykgeworICAgICAgICB1aWQgPSAodWlkX3QpcmVzdWx0OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIC8qIEl0J3MgYSBsZWdpdGltYXRlIC0xLCB3ZSdyZSBkb25lLiAqLworICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9CisKKyAgICAgICAgLyogQW55IG90aGVyIG5lZ2F0aXZlIG51bWJlciBpcyBkaXNhbGxvd2VkLiAqLworICAgICAgICBpZiAocmVzdWx0IDwgMCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworCisgICAgICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KICAgICAgICAgaWYgKHNpemVvZih1aWRfdCkgPCBzaXplb2YobG9uZykgJiYKLSAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSh1aWRfdCl1cmVzdWx0ICE9IHVyZXN1bHQpCi0gICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgICoodWlkX3QgKilwID0gKHVpZF90KXVyZXN1bHQ7CisgICAgICAgICAgICAobG9uZyl1aWQgIT0gcmVzdWx0KQorICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisgICAgICAgIGdvdG8gc3VjY2VzczsKICAgICB9CisKKyAgICBpZiAob3ZlcmZsb3cgPCAwKQorICAgICAgICBnb3RvIHVuZGVyZmxvdzsKKworICAgIC8qCisgICAgICogT2theSwgdGhlIHZhbHVlIG92ZXJmbG93ZWQgYSBzaWduZWQgbG9uZy4gIElmIGl0CisgICAgICogZml0cyBpbiBhbiAqdW5zaWduZWQqIGxvbmcsIGl0IG1heSBzdGlsbCBiZSBva2F5LAorICAgICAqIGFzIHVpZF90IG1heSBiZSB1bnNpZ25lZCBsb25nIG9uIHRoaXMgcGxhdGZvcm0uCisgICAgICovCisgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhpbmRleCk7CisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfT3ZlcmZsb3dFcnJvcikpCisgICAgICAgICAgICBnb3RvIG92ZXJmbG93OworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorCisgICAgdWlkID0gKHVpZF90KXVyZXN1bHQ7CisKKyAgICAvKgorICAgICAqIElmIHVpZCA9PSAodWlkX3QpLTEsIHRoZSB1c2VyIGFjdHVhbGx5IHBhc3NlZCBpbiBVTE9OR19NQVgsCisgICAgICogYnV0IHRoaXMgdmFsdWUgd291bGQgZ2V0IGludGVycHJldGVkIGFzICh1aWRfdCktMSAgYnkgY2hvd24KKyAgICAgKiBhbmQgaXRzIHNpYmxpbmdzLiAgIFRoYXQncyBub3Qgd2hhdCB0aGUgdXNlciBtZWFudCEgIFNvIHdlCisgICAgICogdGhyb3cgYW4gb3ZlcmZsb3cgZXhjZXB0aW9uIGluc3RlYWQuICAgKFdlIGFscmVhZHkKKyAgICAgKiBoYW5kbGVkIGEgcmVhbCAtMSB3aXRoIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdygpIGFib3ZlLikKKyAgICAgKi8KKyAgICBpZiAodWlkID09ICh1aWRfdCktMSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKworICAgIC8qIEVuc3VyZSB0aGUgdmFsdWUgd2Fzbid0IHRydW5jYXRlZC4gKi8KKyAgICBpZiAoc2l6ZW9mKHVpZF90KSA8IHNpemVvZihsb25nKSAmJgorICAgICAgICAodW5zaWduZWQgbG9uZyl1aWQgIT0gdXJlc3VsdCkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAvKiBmYWxsdGhyb3VnaCAqLworCitzdWNjZXNzOgorICAgIFB5X0RFQ1JFRihpbmRleCk7CisgICAgKih1aWRfdCAqKXAgPSB1aWQ7CiAgICAgcmV0dXJuIDE7CiAKLU92ZXJmbG93RG93bjoKK3VuZGVyZmxvdzoKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgInVzZXIgaWQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKLSAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgInVpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOworICAgIGdvdG8gZmFpbDsKIAotT3ZlcmZsb3dVcDoKK292ZXJmbG93OgogICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAidXNlciBpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgICAgICAgICAidWlkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworZmFpbDoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIHJldHVybiAwOwogfQogCiBpbnQKIF9QeV9HaWRfQ29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnApCiB7CisgICAgZ2lkX3QgZ2lkOworICAgIFB5T2JqZWN0ICppbmRleDsKICAgICBpbnQgb3ZlcmZsb3c7CiAgICAgbG9uZyByZXN1bHQ7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2sob2JqKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImludGVnZXIgYXJndW1lbnQgZXhwZWN0ZWQsIGdvdCBmbG9hdCIpOworICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKKworICAgIGluZGV4ID0gUHlOdW1iZXJfSW5kZXgob2JqKTsKKyAgICBpZiAoaW5kZXggPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImdpZCBzaG91bGQgYmUgaW50ZWdlciwgbm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG9iaiwgJm92ZXJmbG93KTsKLSAgICBpZiAob3ZlcmZsb3cgPCAwKQotICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICBpZiAoIW92ZXJmbG93ICYmIHJlc3VsdCA9PSAtMSkgewotICAgICAgICAvKiBlcnJvciBvciAtMSAqLwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAqKGdpZF90ICopcCA9IChnaWRfdCktMTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8qIHVuc2lnbmVkIGdpZF90ICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdXJlc3VsdDsKLSAgICAgICAgaWYgKG92ZXJmbG93ID4gMCkgewotICAgICAgICAgICAgdXJlc3VsdCA9IFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZyhvYmopOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PdmVyZmxvd0Vycm9yKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKChnaWRfdCl1cmVzdWx0ID09IChnaWRfdCktMSkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93VXA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAocmVzdWx0IDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIE92ZXJmbG93RG93bjsKLSAgICAgICAgICAgIHVyZXN1bHQgPSByZXN1bHQ7CisKKyAgICAvKgorICAgICAqIEhhbmRsaW5nIGdpZF90IGlzIGNvbXBsaWNhdGVkIGZvciB0d28gcmVhc29uczoKKyAgICAgKiAgKiBBbHRob3VnaCBnaWRfdCBpcyAoYWx3YXlzPykgdW5zaWduZWQsIGl0IHN0aWxsCisgICAgICogICAgYWNjZXB0cyAtMS4KKyAgICAgKiAgKiBXZSBkb24ndCBrbm93IGl0cyBzaXplIGluIGFkdmFuY2UtLWl0IG1heSBiZQorICAgICAqICAgIGJpZ2dlciB0aGFuIGFuIGludCwgb3IgaXQgbWF5IGJlIHNtYWxsZXIgdGhhbgorICAgICAqICAgIGEgbG9uZy4KKyAgICAgKgorICAgICAqIFNvIGEgYml0IG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZyBpcyBpbiBvcmRlci4KKyAgICAgKiBTdGFydCB3aXRoIGludGVycHJldGluZyB0aGUgdmFsdWUgcGFzc2VkCisgICAgICogaW4gYXMgYSBzaWduZWQgbG9uZyBhbmQgc2VlIGlmIGl0IHdvcmtzLgorICAgICAqLworCisgICAgcmVzdWx0ID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGluZGV4LCAmb3ZlcmZsb3cpOworCisgICAgaWYgKCFvdmVyZmxvdykgeworICAgICAgICBnaWQgPSAoZ2lkX3QpcmVzdWx0OworCisgICAgICAgIGlmIChyZXN1bHQgPT0gLTEpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIC8qIEl0J3MgYSBsZWdpdGltYXRlIC0xLCB3ZSdyZSBkb25lLiAqLworICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9CisKKyAgICAgICAgLyogQW55IG90aGVyIG5lZ2F0aXZlIG51bWJlciBpcyBkaXNhbGxvd2VkLiAqLworICAgICAgICBpZiAocmVzdWx0IDwgMCkgeworICAgICAgICAgICAgZ290byB1bmRlcmZsb3c7CisgICAgICAgIH0KKworICAgICAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCiAgICAgICAgIGlmIChzaXplb2YoZ2lkX3QpIDwgc2l6ZW9mKGxvbmcpICYmCi0gICAgICAgICAgICAodW5zaWduZWQgbG9uZykoZ2lkX3QpdXJlc3VsdCAhPSB1cmVzdWx0KQotICAgICAgICAgICAgZ290byBPdmVyZmxvd1VwOwotICAgICAgICAqKGdpZF90ICopcCA9IChnaWRfdCl1cmVzdWx0OworICAgICAgICAgICAgKGxvbmcpZ2lkICE9IHJlc3VsdCkKKyAgICAgICAgICAgIGdvdG8gdW5kZXJmbG93OworICAgICAgICBnb3RvIHN1Y2Nlc3M7CiAgICAgfQorCisgICAgaWYgKG92ZXJmbG93IDwgMCkKKyAgICAgICAgZ290byB1bmRlcmZsb3c7CisKKyAgICAvKgorICAgICAqIE9rYXksIHRoZSB2YWx1ZSBvdmVyZmxvd2VkIGEgc2lnbmVkIGxvbmcuICBJZiBpdAorICAgICAqIGZpdHMgaW4gYW4gKnVuc2lnbmVkKiBsb25nLCBpdCBtYXkgc3RpbGwgYmUgb2theSwKKyAgICAgKiBhcyBnaWRfdCBtYXkgYmUgdW5zaWduZWQgbG9uZyBvbiB0aGlzIHBsYXRmb3JtLgorICAgICAqLworICAgIHVyZXN1bHQgPSBQeUxvbmdfQXNVbnNpZ25lZExvbmcoaW5kZXgpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX092ZXJmbG93RXJyb3IpKQorICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIGdpZCA9IChnaWRfdCl1cmVzdWx0OworCisgICAgLyoKKyAgICAgKiBJZiBnaWQgPT0gKGdpZF90KS0xLCB0aGUgdXNlciBhY3R1YWxseSBwYXNzZWQgaW4gVUxPTkdfTUFYLAorICAgICAqIGJ1dCB0aGlzIHZhbHVlIHdvdWxkIGdldCBpbnRlcnByZXRlZCBhcyAoZ2lkX3QpLTEgIGJ5IGNob3duCisgICAgICogYW5kIGl0cyBzaWJsaW5ncy4gICBUaGF0J3Mgbm90IHdoYXQgdGhlIHVzZXIgbWVhbnQhICBTbyB3ZQorICAgICAqIHRocm93IGFuIG92ZXJmbG93IGV4Y2VwdGlvbiBpbnN0ZWFkLiAgIChXZSBhbHJlYWR5CisgICAgICogaGFuZGxlZCBhIHJlYWwgLTEgd2l0aCBQeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3coKSBhYm92ZS4pCisgICAgICovCisgICAgaWYgKGdpZCA9PSAoZ2lkX3QpLTEpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisKKyAgICAvKiBFbnN1cmUgdGhlIHZhbHVlIHdhc24ndCB0cnVuY2F0ZWQuICovCisgICAgaWYgKHNpemVvZihnaWRfdCkgPCBzaXplb2YobG9uZykgJiYKKyAgICAgICAgKHVuc2lnbmVkIGxvbmcpZ2lkICE9IHVyZXN1bHQpCisgICAgICAgIGdvdG8gb3ZlcmZsb3c7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworc3VjY2VzczoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOworICAgICooZ2lkX3QgKilwID0gZ2lkOwogICAgIHJldHVybiAxOwogCi1PdmVyZmxvd0Rvd246Cit1bmRlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJncm91cCBpZCBpcyBsZXNzIHRoYW4gbWluaW11bSIpOwotICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAiZ2lkIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CisgICAgZ290byBmYWlsOwogCi1PdmVyZmxvd1VwOgorb3ZlcmZsb3c6CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJncm91cCBpZCBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgICAgICAgICAiZ2lkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CisgICAgLyogZmFsbHRocm91Z2ggKi8KKworZmFpbDoKKyAgICBQeV9ERUNSRUYoaW5kZXgpOwogICAgIHJldHVybiAwOwogfQogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAogCisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyMgIGRlZmluZSBfUHlMb25nX0Zyb21EZXYgUHlMb25nX0Zyb21Mb25nTG9uZworI2Vsc2UKKyMgIGRlZmluZSBfUHlMb25nX0Zyb21EZXYgUHlMb25nX0Zyb21Mb25nCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChIQVZFX01LTk9EKSAmJiBkZWZpbmVkKEhBVkVfTUFLRURFVikKK3N0YXRpYyBpbnQKK19QeV9EZXZfQ29udmVydGVyKFB5T2JqZWN0ICpvYmosIHZvaWQgKnApCit7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAqKChkZXZfdCAqKXApID0gUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZyhvYmopOworI2Vsc2UKKyAgICAqKChkZXZfdCAqKXApID0gUHlMb25nX0FzVW5zaWduZWRMb25nKG9iaik7CisjZW5kaWYKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogSEFWRV9NS05PRCAmJiBIQVZFX01BS0VERVYgKi8KKworCiAjaWZkZWYgQVRfRkRDV0QKIC8qCiAgKiBXaHkgdGhlIChpbnQpIGNhc3Q/ICBTb2xhcmlzIDEwIGRlZmluZXMgQVRfRkRDV0QgYXMgMHhmZmQxOTU1MyAoLTMwNDE5NjUpOwpAQCAtNTYwLDI1ICs2NjMsMjkgQEAKIF9mZF9jb252ZXJ0ZXIoUHlPYmplY3QgKm8sIGludCAqcCwgY29uc3QgY2hhciAqYWxsb3dlZCkKIHsKICAgICBpbnQgb3ZlcmZsb3c7Ci0gICAgbG9uZyBsb25nX3ZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KG8sICZvdmVyZmxvdyk7Ci0gICAgaWYgKFB5RmxvYXRfQ2hlY2sobykgfHwKLSAgICAgICAgKGxvbmdfdmFsdWUgPT0gLTEgJiYgIW92ZXJmbG93ICYmIFB5RXJyX09jY3VycmVkKCkpKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgbG9uZyBsb25nX3ZhbHVlOworCisgICAgUHlPYmplY3QgKmluZGV4ID0gUHlOdW1iZXJfSW5kZXgobyk7CisgICAgaWYgKGluZGV4ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCBzaG91bGQgYmUgJXMsIG5vdCAlLjIwMHMiLAotICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dlZCwgUHlfVFlQRShvKS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgc2hvdWxkIGJlICVzLCBub3QgJS4yMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgIGFsbG93ZWQsIFB5X1RZUEUobyktPnRwX25hbWUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisKKyAgICBsb25nX3ZhbHVlID0gUHlMb25nX0FzTG9uZ0FuZE92ZXJmbG93KGluZGV4LCAmb3ZlcmZsb3cpOworICAgIFB5X0RFQ1JFRihpbmRleCk7CiAgICAgaWYgKG92ZXJmbG93ID4gMCB8fCBsb25nX3ZhbHVlID4gSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJzaWduZWQgaW50ZWdlciBpcyBncmVhdGVyIHRoYW4gbWF4aW11bSIpOworICAgICAgICAgICAgICAgICAgICAgICAgImZkIGlzIGdyZWF0ZXIgdGhhbiBtYXhpbXVtIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAob3ZlcmZsb3cgPCAwIHx8IGxvbmdfdmFsdWUgPCBJTlRfTUlOKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNpZ25lZCBpbnRlZ2VyIGlzIGxlc3MgdGhhbiBtaW5pbXVtIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiZmQgaXMgbGVzcyB0aGFuIG1pbmltdW0iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorCiAgICAgKnAgPSAoaW50KWxvbmdfdmFsdWU7CiAgICAgcmV0dXJuIDE7CiB9CkBAIC02MjYsNyArNzMzLDcgQEAKICAqICAgcGF0aC5mdW5jdGlvbl9uYW1lCiAgKiAgICAgSWYgbm9uLU5VTEwsIHBhdGhfY29udmVydGVyIHdpbGwgdXNlIHRoYXQgYXMgdGhlIG5hbWUKICAqICAgICBvZiB0aGUgZnVuY3Rpb24gaW4gZXJyb3IgbWVzc2FnZXMuCi0gKiAgICAgKElmIHBhdGguYXJndW1lbnRfbmFtZSBpcyBOVUxMIGl0IG9taXRzIHRoZSBmdW5jdGlvbiBuYW1lLikKKyAqICAgICAoSWYgcGF0aC5mdW5jdGlvbl9uYW1lIGlzIE5VTEwgaXQgb21pdHMgdGhlIGZ1bmN0aW9uIG5hbWUuKQogICogICBwYXRoLmFyZ3VtZW50X25hbWUKICAqICAgICBJZiBub24tTlVMTCwgcGF0aF9jb252ZXJ0ZXIgd2lsbCB1c2UgdGhhdCBhcyB0aGUgbmFtZQogICogICAgIG9mIHRoZSBwYXJhbWV0ZXIgaW4gZXJyb3IgbWVzc2FnZXMuCkBAIC02NzgsOCArNzg1LDggQEAKICAqIHBhdGhfY2xlYW51cCgpLiAgSG93ZXZlciBpdCBpcyBzYWZlIHRvIGRvIHNvLikKICAqLwogdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNoYXIgKmZ1bmN0aW9uX25hbWU7Ci0gICAgY2hhciAqYXJndW1lbnRfbmFtZTsKKyAgICBjb25zdCBjaGFyICpmdW5jdGlvbl9uYW1lOworICAgIGNvbnN0IGNoYXIgKmFyZ3VtZW50X25hbWU7CiAgICAgaW50IG51bGxhYmxlOwogICAgIGludCBhbGxvd19mZDsKICAgICB3Y2hhcl90ICp3aWRlOwpAQCAtNjkwLDYgKzc5Nyw5IEBACiAgICAgUHlPYmplY3QgKmNsZWFudXA7CiB9IHBhdGhfdDsKIAorI2RlZmluZSBQQVRIX1RfSU5JVElBTElaRShmdW5jdGlvbl9uYW1lLCBudWxsYWJsZSwgYWxsb3dfZmQpIFwKKyAgICB7ZnVuY3Rpb25fbmFtZSwgTlVMTCwgbnVsbGFibGUsIGFsbG93X2ZkLCBOVUxMLCBOVUxMLCAwLCAwLCBOVUxMLCBOVUxMfQorCiBzdGF0aWMgdm9pZAogcGF0aF9jbGVhbnVwKHBhdGhfdCAqcGF0aCkgewogICAgIGlmIChwYXRoLT5jbGVhbnVwKSB7CkBAIC03MzcsMTUgKzg0NywxOSBAQAogICAgIGlmICh1bmljb2RlKSB7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICB3Y2hhcl90ICp3aWRlOwotICAgICAgICBsZW5ndGggPSBQeVVuaWNvZGVfR0VUX1NJWkUodW5pY29kZSk7CisKKyAgICAgICAgd2lkZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHVuaWNvZGUsICZsZW5ndGgpOworICAgICAgICBpZiAoIXdpZGUpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIGlmIChsZW5ndGggPiAzMjc2NykgewogICAgICAgICAgICAgRk9STUFUX0VYQ0VQVElPTihQeUV4Y19WYWx1ZUVycm9yLCAiJXMgdG9vIGxvbmcgZm9yIFdpbmRvd3MiKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0KLSAgICAgICAgd2lkZSA9IFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pY29kZSk7Ci0gICAgICAgIGlmICghd2lkZSkgeworICAgICAgICBpZiAod2NzbGVuKHdpZGUpICE9IGxlbmd0aCkgeworICAgICAgICAgICAgRk9STUFUX0VYQ0VQVElPTihQeUV4Y19UeXBlRXJyb3IsICJlbWJlZGRlZCBudWxsIGNoYXJhY3RlciIpOwogICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KQEAgLTgwMyw3ICs5MTcsNyBAQAogCiAgICAgbGVuZ3RoID0gUHlCeXRlc19HRVRfU0laRShieXRlcyk7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChsZW5ndGggPiBNQVhfUEFUSCkgeworICAgIGlmIChsZW5ndGggPiBNQVhfUEFUSC0xKSB7CiAgICAgICAgIEZPUk1BVF9FWENFUFRJT04oUHlFeGNfVmFsdWVFcnJvciwgIiVzIHRvbyBsb25nIGZvciBXaW5kb3dzIik7CiAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTEwNCwxMCArMTIxOCw2IEBACiAjZWxzZQogICAgIGNoYXIgKiplOwogI2VuZGlmCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBBUElSRVQgcmM7Ci0gICAgY2hhciAgIGJ1ZmZlclsxMDI0XTsgLyogT1MvMiBQcm92aWRlcyBhIERvY3VtZW50ZWQgTWF4IG9mIDEwMjQgQ2hhcnMgKi8KLSNlbmRpZgogCiAgICAgZCA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoZCA9PSBOVUxMKQpAQCAtMTE3NiwyMCArMTI4Niw2IEBACiAgICAgICAgIFB5X0RFQ1JFRih2KTsKICAgICB9CiAjZW5kaWYKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIHJjID0gRG9zUXVlcnlFeHRMSUJQQVRIKGJ1ZmZlciwgQkVHSU5fTElCUEFUSCk7Ci0gICAgaWYgKHJjID09IE5PX0VSUk9SKSB7IC8qIChub3QgYSB0eXBlLCBlbnZuYW1lIGlzIE5PVCAnQkVHSU5fTElCUEFUSCcpICovCi0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJCRUdJTkxJQlBBVEgiLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSAgICByYyA9IERvc1F1ZXJ5RXh0TElCUEFUSChidWZmZXIsIEVORF9MSUJQQVRIKTsKLSAgICBpZiAocmMgPT0gTk9fRVJST1IpIHsgLyogKG5vdCBhIHR5cG8sIGVudm5hbWUgaXMgTk9UICdFTkRfTElCUEFUSCcpICovCi0gICAgICAgIFB5T2JqZWN0ICp2ID0gUHlCeXRlc19Gcm9tU3RyaW5nKGJ1ZmZlcik7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJFTkRMSUJQQVRIIiwgdik7Ci0gICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICB9Ci0jZW5kaWYKICAgICByZXR1cm4gZDsKIH0KIApAQCAtMTIwMCwyNSArMTI5Niw2IEBACiB7CiAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKIH0KLXN0YXRpYyBQeU9iamVjdCAqCi1wb3NpeF9lcnJvcl93aXRoX2ZpbGVuYW1lKGNoYXIqIG5hbWUpCi17Ci0gICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeUV4Y19PU0Vycm9yLCBuYW1lKTsKLX0KLQotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUoUHlPYmplY3QqIG5hbWUpCi17Ci0gICAgUHlPYmplY3QgKm5hbWVfc3RyLCAqcmM7Ci0gICAgbmFtZV9zdHIgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0QW5kU2l6ZShQeUJ5dGVzX0FzU3RyaW5nKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShuYW1lKSk7Ci0gICAgUHlfREVDUkVGKG5hbWUpOwotICAgIHJjID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZV9zdHIpOwotICAgIFB5X1hERUNSRUYobmFtZV9zdHIpOwotICAgIHJldHVybiByYzsKLX0KIAogI2lmZGVmIE1TX1dJTkRPV1MKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMjM3LDI0ICsxMzE0LDEzIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi13aW4zMl9lcnJvcl91bmljb2RlKGNoYXIqIGZ1bmN0aW9uLCB3Y2hhcl90KiBmaWxlbmFtZSkKLXsKLSAgICAvKiBYWFggLSBzZWUgd2luMzJfZXJyb3IgZm9yIGNvbW1lbnRzIG9uICdmdW5jdGlvbicgKi8KLSAgICBlcnJubyA9IEdldExhc3RFcnJvcigpOwotICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyV2l0aFVuaWNvZGVGaWxlbmFtZShlcnJubywgZmlsZW5hbWUpOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycm5vKTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKIHdpbjMyX2Vycm9yX29iamVjdChjaGFyKiBmdW5jdGlvbiwgUHlPYmplY3QqIGZpbGVuYW1lKQogewogICAgIC8qIFhYWCAtIHNlZSB3aW4zMl9lcnJvciBmb3IgY29tbWVudHMgb24gJ2Z1bmN0aW9uJyAqLwogICAgIGVycm5vID0gR2V0TGFzdEVycm9yKCk7CiAgICAgaWYgKGZpbGVuYW1lKQogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgZXJybm8sCiAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lKTsKICAgICBlbHNlCkBAIC0xMjYzLDEwOCArMTMyOSwzMCBAQAogCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCi0vKgotICogU29tZSBmdW5jdGlvbnMgcmV0dXJuIFdpbjMyIGVycm9ycywgb3RoZXJzIG9ubHkgZXZlciB1c2UgcG9zaXhfZXJyb3IKLSAqICh0aGlzIGlzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIGV4Y2VwdGlvbnMpCi0gKi8KIHN0YXRpYyBQeU9iamVjdCAqCi1wYXRoX3Bvc2l4X2Vycm9yKGNoYXIgKmZ1bmN0aW9uX25hbWUsIHBhdGhfdCAqcGF0aCkKLXsKLSAgICBpZiAocGF0aC0+bmFycm93KQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9maWxlbmFtZShwYXRoLT5uYXJyb3cpOwotICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotfQotCi1zdGF0aWMgUHlPYmplY3QgKgotcGF0aF9lcnJvcihjaGFyICpmdW5jdGlvbl9uYW1lLCBwYXRoX3QgKnBhdGgpCitwYXRoX2Vycm9yKHBhdGhfdCAqcGF0aCkKIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgaWYgKHBhdGgtPm5hcnJvdykKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKGZ1bmN0aW9uX25hbWUsIHBhdGgtPm5hcnJvdyk7Ci0gICAgaWYgKHBhdGgtPndpZGUpCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl91bmljb2RlKGZ1bmN0aW9uX25hbWUsIHBhdGgtPndpZGUpOwotICAgIHJldHVybiB3aW4zMl9lcnJvcihmdW5jdGlvbl9uYW1lLCBOVUxMKTsKKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcGF0aC0+b2JqZWN0KTsKICNlbHNlCi0gICAgcmV0dXJuIHBhdGhfcG9zaXhfZXJyb3IoZnVuY3Rpb25fbmFtZSwgcGF0aCk7CisgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdChQeUV4Y19PU0Vycm9yLCBwYXRoLT5vYmplY3QpOwogI2VuZGlmCiB9CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgSGVscGVyIEZ1bmN0aW9uIHRvIFRyaW0gYW5kIEZvcm1hdCBPUy8yIE1lc3NhZ2VzCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCi1vczJfZm9ybWF0bXNnKGNoYXIgKm1zZ2J1ZiwgaW50IG1zZ2xlbiwgY2hhciAqcmVhc29uKQotewotICAgIG1zZ2J1Zlttc2dsZW5dID0gJ1wwJzsgLyogT1MvMiBEb2Vzbid0IEd1YXJhbnRlZSBhIFRlcm1pbmF0b3IgKi8KLQotICAgIGlmIChzdHJsZW4obXNnYnVmKSA+IDApIHsgLyogSWYgTm9uLUVtcHR5IE1zZywgVHJpbSBDUkxGICovCi0gICAgICAgIGNoYXIgKmxhc3RjID0gJm1zZ2J1Zlsgc3RybGVuKG1zZ2J1ZiktMSBdOwotCi0gICAgICAgIHdoaWxlIChsYXN0YyA+IG1zZ2J1ZiAmJiBQeV9JU1NQQUNFKFB5X0NIQVJNQVNLKCpsYXN0YykpKQotICAgICAgICAgICAgKmxhc3RjLS0gPSAnXDAnOyAvKiBUcmltIFRyYWlsaW5nIFdoaXRlc3BhY2UgKENSTEYpICovCi0gICAgfQotCi0gICAgLyogQWRkIE9wdGlvbmFsIFJlYXNvbiBUZXh0ICovCi0gICAgaWYgKHJlYXNvbikgewotICAgICAgICBzdHJjYXQobXNnYnVmLCAiIDogIik7Ci0gICAgICAgIHN0cmNhdChtc2didWYsIHJlYXNvbik7Ci0gICAgfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogICAgICAgICAgICAgRGVjb2RlIGFuIE9TLzIgT3BlcmF0aW5nIFN5c3RlbSBFcnJvciBDb2RlCi0gKgotICogQSBjb252ZW5pZW5jZSBmdW5jdGlvbiB0byBsb29rdXAgYW4gT1MvMiBlcnJvciBjb2RlIGFuZCByZXR1cm4gYQotICogdGV4dCBtZXNzYWdlIHdlIGNhbiB1c2UgdG8gcmFpc2UgYSBQeXRob24gZXhjZXB0aW9uLgotICoKLSAqIE5vdGVzOgotICogICBUaGUgbWVzc2FnZXMgZm9yIGVycm9ycyByZXR1cm5lZCBmcm9tIHRoZSBPUy8yIGtlcm5lbCByZXNpZGUgaW4KLSAqICAgdGhlIGZpbGUgT1NPMDAxLk1TRyBpbiB0aGUgXE9TMiBkaXJlY3RvcnkgaGllcmFyY2h5LgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGNoYXIgKgotb3MyX3N0cmVycm9yKGNoYXIgKm1zZ2J1ZiwgaW50IG1zZ2J1ZmxlbiwgaW50IGVycm9yY29kZSwgY2hhciAqcmVhc29uKQotewotICAgIEFQSVJFVCByYzsKLSAgICBVTE9ORyAgbXNnbGVuOwotCi0gICAgLyogUmV0cmlldmUgS2VybmVsLVJlbGF0ZWQgRXJyb3IgTWVzc2FnZSBmcm9tIE9TTzAwMS5NU0cgRmlsZSAqLwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByYyA9IERvc0dldE1lc3NhZ2UoTlVMTCwgMCwgbXNnYnVmLCBtc2didWZsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIGVycm9yY29kZSwgIm9zbzAwMS5tc2ciLCAmbXNnbGVuKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgaWYgKHJjID09IE5PX0VSUk9SKQotICAgICAgICBvczJfZm9ybWF0bXNnKG1zZ2J1ZiwgbXNnbGVuLCByZWFzb24pOwotICAgIGVsc2UKLSAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIG1zZ2J1ZmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBPUyBlcnJvciAjJWQiLCBlcnJvcmNvZGUpOwotCi0gICAgcmV0dXJuIG1zZ2J1ZjsKLX0KLQotLyogU2V0IGFuIE9TLzItc3BlY2lmaWMgZXJyb3IgYW5kIHJldHVybiBOVUxMLiAgT1MvMiBrZXJuZWwKLSAgIGVycm9ycyBhcmUgbm90IGluIGEgZ2xvYmFsIHZhcmlhYmxlIGUuZy4gJ2Vycm5vJyBub3IgYXJlCi0gICB0aGV5IGNvbmdydWVudCB3aXRoIHBvc2l4IGVycm9yIG51bWJlcnMuICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1vczJfZXJyb3IoaW50IGNvZGUpCitwYXRoX2Vycm9yMihwYXRoX3QgKnBhdGgsIHBhdGhfdCAqcGF0aDIpCiB7Ci0gICAgY2hhciB0ZXh0WzEwMjRdOwotICAgIFB5T2JqZWN0ICp2OwotCi0gICAgb3MyX3N0cmVycm9yKHRleHQsIHNpemVvZih0ZXh0KSwgY29kZSwgIiIpOwotCi0gICAgdiA9IFB5X0J1aWxkVmFsdWUoIihpcykiLCBjb2RlLCB0ZXh0KTsKLSAgICBpZiAodiAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19PU0Vycm9yLCB2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsgLyogU2lnbmFsIHRvIFB5dGhvbiB0aGF0IGFuIEV4Y2VwdGlvbiBpcyBQZW5kaW5nICovCisjaWZkZWYgTVNfV0lORE9XUworICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgIDAsIHBhdGgtPm9iamVjdCwgcGF0aDItPm9iamVjdCk7CisjZWxzZQorICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3RzKFB5RXhjX09TRXJyb3IsCisgICAgICAgIHBhdGgtPm9iamVjdCwgcGF0aDItPm9iamVjdCk7CisjZW5kaWYKIH0KIAotI2VuZGlmIC8qIE9TMiAqLwogCiAvKiBQT1NJWCBnZW5lcmljIG1ldGhvZHMgKi8KIApAQCAtMTM4OCw2NSArMTM3NiwzMSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfMXN0cihQeU9iamVjdCAqYXJncywgY2hhciAqZm9ybWF0LCBpbnQgKCpmdW5jKShjb25zdCBjaGFyKikpCitwb3NpeF8xc3RyKGNvbnN0IGNoYXIgKmZ1bmNfbmFtZSwgUHlPYmplY3QgKmFyZ3MsIGNoYXIgKmZvcm1hdCwKKyAgICAgICAgICAgaW50ICgqZnVuYykoY29uc3QgY2hhciopKQogewotICAgIFB5T2JqZWN0ICpvcGF0aDEgPSBOVUxMOwotICAgIGNoYXIgKnBhdGgxOworICAgIHBhdGhfdCBwYXRoOwogICAgIGludCByZXM7CisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9IGZ1bmNfbmFtZTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoMSA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgxKTsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgcmVzID0gKCpmdW5jKShwYXRoMSk7CisgICAgcmVzID0gKCpmdW5jKShwYXRoLm5hcnJvdyk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoMSk7Ci0gICAgUHlfREVDUkVGKG9wYXRoMSk7CisgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CisgICAgICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOwogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KIAogCiAjaWZkZWYgTVNfV0lORE9XUwotc3RhdGljIFB5T2JqZWN0Kgotd2luMzJfMXN0cihQeU9iamVjdCogYXJncywgY2hhciogZnVuYywKLSAgICAgICAgICAgY2hhciogZm9ybWF0LCBCT09MIChfX3N0ZGNhbGwgKmZ1bmNBKShMUENTVFIpLAotICAgICAgICAgICBjaGFyKiB3Zm9ybWF0LCBCT09MIChfX3N0ZGNhbGwgKmZ1bmNXKShMUFdTVFIpKQotewotICAgIFB5T2JqZWN0ICp1bmk7Ci0gICAgY29uc3QgY2hhciAqYW5zaTsKLSAgICBCT09MIHJlc3VsdDsKLQotICAgIGlmIChQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHdmb3JtYXQsICZ1bmkpKQotICAgIHsKLSAgICAgICAgd2NoYXJfdCAqd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGUodW5pKTsKLSAgICAgICAgaWYgKHdzdHIgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIHJlc3VsdCA9IGZ1bmNXKHdzdHIpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcl9vYmplY3QoZnVuYywgdW5pKTsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9Ci0gICAgUHlFcnJfQ2xlYXIoKTsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBmb3JtYXQsICZhbnNpKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHdpbjMyX3dhcm5fYnl0ZXNfYXBpKCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXN1bHQgPSBmdW5jQShhbnNpKTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoZnVuYywgYW5zaSk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOwotCi19Ci0KIC8qIFRoaXMgaXMgYSByZWltcGxlbWVudGF0aW9uIG9mIHRoZSBDIGxpYnJhcnkncyBjaGRpciBmdW5jdGlvbiwKICAgIGJ1dCBvbmUgdGhhdCBwcm9kdWNlcyBXaW4zMiBlcnJvcnMgaW5zdGVhZCBvZiBET1MgZXJyb3IgY29kZXMuCiAgICBjaGRpciBpcyBlc3NlbnRpYWxseSBhIHdyYXBwZXIgYXJvdW5kIFNldEN1cnJlbnREaXJlY3Rvcnk7IGhvd2V2ZXIsCkBAIC0xNDU1LDE4ICsxNDA5LDE4IEBACiBzdGF0aWMgQk9PTCBfX3N0ZGNhbGwKIHdpbjMyX2NoZGlyKExQQ1NUUiBwYXRoKQogewotICAgIGNoYXIgbmV3X3BhdGhbTUFYX1BBVEgrMV07CisgICAgY2hhciBuZXdfcGF0aFtNQVhfUEFUSF07CiAgICAgaW50IHJlc3VsdDsKICAgICBjaGFyIGVudls0XSA9ICI9eDoiOwogCiAgICAgaWYoIVNldEN1cnJlbnREaXJlY3RvcnlBKHBhdGgpKQogICAgICAgICByZXR1cm4gRkFMU0U7Ci0gICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeUEoTUFYX1BBVEgrMSwgbmV3X3BhdGgpOworICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlBKFB5X0FSUkFZX0xFTkdUSChuZXdfcGF0aCksIG5ld19wYXRoKTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgIC8qIEluIHRoZSBBTlNJIEFQSSwgdGhlcmUgc2hvdWxkIG5vdCBiZSBhbnkgcGF0aHMgbG9uZ2VyCi0gICAgICAgdGhhbiBNQVhfUEFUSC4gKi8KLSAgICBhc3NlcnQocmVzdWx0IDw9IE1BWF9QQVRIKzEpOworICAgICAgIHRoYW4gTUFYX1BBVEgtMSAobm90IGluY2x1ZGluZyB0aGUgZmluYWwgbnVsbCBjaGFyYWN0ZXIpLiAqLworICAgIGFzc2VydChyZXN1bHQgPCBQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpKTsKICAgICBpZiAoc3RybmNtcChuZXdfcGF0aCwgIlxcXFwiLCAyKSA9PSAwIHx8CiAgICAgICAgIHN0cm5jbXAobmV3X3BhdGgsICIvLyIsIDIpID09IDApCiAgICAgICAgIC8qIFVOQyBwYXRoLCBub3RoaW5nIHRvIGRvLiAqLwpAQCAtMTQ4MCwyNCArMTQzNCwyNCBAQAogc3RhdGljIEJPT0wgX19zdGRjYWxsCiB3aW4zMl93Y2hkaXIoTFBDV1NUUiBwYXRoKQogewotICAgIHdjaGFyX3QgX25ld19wYXRoW01BWF9QQVRIKzFdLCAqbmV3X3BhdGggPSBfbmV3X3BhdGg7CisgICAgd2NoYXJfdCBfbmV3X3BhdGhbTUFYX1BBVEhdLCAqbmV3X3BhdGggPSBfbmV3X3BhdGg7CiAgICAgaW50IHJlc3VsdDsKICAgICB3Y2hhcl90IGVudls0XSA9IEwiPXg6IjsKIAogICAgIGlmKCFTZXRDdXJyZW50RGlyZWN0b3J5VyhwYXRoKSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIHJlc3VsdCA9IEdldEN1cnJlbnREaXJlY3RvcnlXKE1BWF9QQVRIKzEsIG5ld19wYXRoKTsKKyAgICByZXN1bHQgPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpLCBuZXdfcGF0aCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBpZiAocmVzdWx0ID4gTUFYX1BBVEgrMSkgewotICAgICAgICBuZXdfcGF0aCA9IG1hbGxvYyhyZXN1bHQgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIGlmIChyZXN1bHQgPiBQeV9BUlJBWV9MRU5HVEgobmV3X3BhdGgpKSB7CisgICAgICAgIG5ld19wYXRoID0gUHlNZW1fUmF3TWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CiAgICAgICAgIGlmICghbmV3X3BhdGgpIHsKICAgICAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICAgICAgcmVzdWx0ID0gR2V0Q3VycmVudERpcmVjdG9yeVcocmVzdWx0LCBuZXdfcGF0aCk7CiAgICAgICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUobmV3X3BhdGgpOwogICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgICB9CiAgICAgfQpAQCAtMTUwOCw3ICsxNDYyLDcgQEAKICAgICBlbnZbMV0gPSBuZXdfcGF0aFswXTsKICAgICByZXN1bHQgPSBTZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhlbnYsIG5ld19wYXRoKTsKICAgICBpZiAobmV3X3BhdGggIT0gX25ld19wYXRoKQotICAgICAgICBmcmVlKG5ld19wYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShuZXdfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICNlbmRpZgpAQCAtMTUyMywxMyArMTQ3NywxMyBAQAogI2RlZmluZSBIQVZFX1NUQVRfTlNFQyAxCiAKIHN0cnVjdCB3aW4zMl9zdGF0ewotICAgIGludCBzdF9kZXY7CisgICAgdW5zaWduZWQgbG9uZyBzdF9kZXY7CiAgICAgX19pbnQ2NCBzdF9pbm87CiAgICAgdW5zaWduZWQgc2hvcnQgc3RfbW9kZTsKICAgICBpbnQgc3Rfbmxpbms7CiAgICAgaW50IHN0X3VpZDsKICAgICBpbnQgc3RfZ2lkOwotICAgIGludCBzdF9yZGV2OworICAgIHVuc2lnbmVkIGxvbmcgc3RfcmRldjsKICAgICBfX2ludDY0IHN0X3NpemU7CiAgICAgdGltZV90IHN0X2F0aW1lOwogICAgIGludCBzdF9hdGltZV9uc2VjOwpAQCAtMTU4OCw2ICsxNTQyLDggQEAKICAgICBtZW1zZXQocmVzdWx0LCAwLCBzaXplb2YoKnJlc3VsdCkpOwogICAgIHJlc3VsdC0+c3RfbW9kZSA9IGF0dHJpYnV0ZXNfdG9fbW9kZShpbmZvLT5kd0ZpbGVBdHRyaWJ1dGVzKTsKICAgICByZXN1bHQtPnN0X3NpemUgPSAoKChfX2ludDY0KWluZm8tPm5GaWxlU2l6ZUhpZ2gpPDwzMikgKyBpbmZvLT5uRmlsZVNpemVMb3c7CisgICAgcmVzdWx0LT5zdF9kZXYgPSBpbmZvLT5kd1ZvbHVtZVNlcmlhbE51bWJlcjsKKyAgICByZXN1bHQtPnN0X3JkZXYgPSByZXN1bHQtPnN0X2RldjsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0Q3JlYXRpb25UaW1lLCAmcmVzdWx0LT5zdF9jdGltZSwgJnJlc3VsdC0+c3RfY3RpbWVfbnNlYyk7CiAgICAgRklMRV9USU1FX3RvX3RpbWVfdF9uc2VjKCZpbmZvLT5mdExhc3RXcml0ZVRpbWUsICZyZXN1bHQtPnN0X210aW1lLCAmcmVzdWx0LT5zdF9tdGltZV9uc2VjKTsKICAgICBGSUxFX1RJTUVfdG9fdGltZV90X25zZWMoJmluZm8tPmZ0TGFzdEFjY2Vzc1RpbWUsICZyZXN1bHQtPnN0X2F0aW1lLCAmcmVzdWx0LT5zdF9hdGltZV9uc2VjKTsKQEAgLTE1OTUsOSArMTU1MSw5IEBACiAgICAgcmVzdWx0LT5zdF9pbm8gPSAoKChfX2ludDY0KWluZm8tPm5GaWxlSW5kZXhIaWdoKTw8MzIpICsgaW5mby0+bkZpbGVJbmRleExvdzsKICAgICBpZiAocmVwYXJzZV90YWcgPT0gSU9fUkVQQVJTRV9UQUdfU1lNTElOSykgewogICAgICAgICAvKiBmaXJzdCBjbGVhciB0aGUgU19JRk1UIGJpdHMgKi8KLSAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiAwMTcwMDAwKTsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIF49IChyZXN1bHQtPnN0X21vZGUgJiBTX0lGTVQpOwogICAgICAgICAvKiBub3cgc2V0IHRoZSBiaXRzIHRoYXQgbWFrZSB0aGlzIGEgc3ltbGluayAqLwotICAgICAgICByZXN1bHQtPnN0X21vZGUgfD0gMDEyMDAwMDsKKyAgICAgICAgcmVzdWx0LT5zdF9tb2RlIHw9IFNfSUZMTks7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CkBAIC0xNjUwLDcgKzE2MDYsNyBAQAogfQogCiAvKiBHcmFiIEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZSBkeW5hbWljYWxseSBmcm9tIGtlcm5lbDMyICovCi1zdGF0aWMgaW50IGhhc19HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGUgPSAwOworc3RhdGljIGludCBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlID0gLTE7CiBzdGF0aWMgRFdPUkQgKENBTExCQUNLICpQeV9HZXRGaW5hbFBhdGhOYW1lQnlIYW5kbGVXKShIQU5ETEUsIExQV1NUUiwgRFdPUkQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCk7CiBzdGF0aWMgaW50CkBAIC0xNjYxLDcgKzE2MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQpOwogCiAgICAgLyogb25seSByZWNoZWNrICovCi0gICAgaWYgKCFoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQorICAgIGlmICgtMSA9PSBoYXNfR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlKQogICAgIHsKICAgICAgICAgaEtlcm5lbDMyID0gR2V0TW9kdWxlSGFuZGxlVyhMIktFUk5FTDMyIik7CiAgICAgICAgICooRkFSUFJPQyopJlB5X0dldEZpbmFsUGF0aE5hbWVCeUhhbmRsZUEgPSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsCkBAIC0xNjg3LDcgKzE2NDMsNyBAQAogICAgIGlmKCFidWZfc2l6ZSkKICAgICAgICAgcmV0dXJuIEZBTFNFOwogCi0gICAgYnVmID0gKHdjaGFyX3QgKiltYWxsb2MoKGJ1Zl9zaXplKzEpKnNpemVvZih3Y2hhcl90KSk7CisgICAgYnVmID0gUHlNZW1fTmV3KHdjaGFyX3QsIGJ1Zl9zaXplKzEpOwogICAgIGlmICghYnVmKSB7CiAgICAgICAgIFNldExhc3RFcnJvcihFUlJPUl9PVVRPRk1FTU9SWSk7CiAgICAgICAgIHJldHVybiBGQUxTRTsKQEAgLTE2OTcsMTIgKzE2NTMsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBidWZfc2l6ZSwgVk9MVU1FX05BTUVfRE9TKTsKIAogICAgIGlmKCFyZXN1bHRfbGVuZ3RoKSB7Ci0gICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgUHlNZW1fRnJlZShidWYpOwogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgfQogCiAgICAgaWYoIUNsb3NlSGFuZGxlKGhkbCkpIHsKLSAgICAgICAgZnJlZShidWYpOworICAgICAgICBQeU1lbV9GcmVlKGJ1Zik7CiAgICAgICAgIHJldHVybiBGQUxTRTsKICAgICB9CiAKQEAgLTE3OTMsNyArMTc0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKIAogICAgICAgICAgICAgICAgIGNvZGUgPSB3aW4zMl94c3RhdF9pbXBsX3codGFyZ2V0X3BhdGgsIHJlc3VsdCwgRkFMU0UpOwotICAgICAgICAgICAgICAgIGZyZWUodGFyZ2V0X3BhdGgpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUodGFyZ2V0X3BhdGgpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKQEAgLTE4ODksNyArMTg0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKIAogICAgICAgICAgICAgICAgIGNvZGUgPSB3aW4zMl94c3RhdF9pbXBsX3codGFyZ2V0X3BhdGgsIHJlc3VsdCwgRkFMU0UpOwotICAgICAgICAgICAgICAgIGZyZWUodGFyZ2V0X3BhdGgpOworICAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUodGFyZ2V0X3BhdGgpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb2RlOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UKQEAgLTIyODgsMTEgKzIyNDQsMTAgQEAKICNlbHNlCiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAxLCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpc3QtPnN0X2lubykpOwogI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX0xPTkdfTE9ORykgJiYgIWRlZmluZWQoTVNfV0lORE9XUykKLSAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmdMb25nKChQWV9MT05HX0xPTkcpc3QtPnN0X2RldikpOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKHYsIDIsIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKHN0LT5zdF9kZXYpKTsKICNlbHNlCi0gICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCAyLCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpc3QtPnN0X2RldikpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMiwgX1B5TG9uZ19Gcm9tRGV2KHN0LT5zdF9kZXYpKTsKICNlbmRpZgogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgMywgUHlMb25nX0Zyb21Mb25nKChsb25nKXN0LT5zdF9ubGluaykpOwogI2lmIGRlZmluZWQoTVNfV0lORE9XUykKQEAgLTI0MjMsNTMgKzIzNzgsMTU4IEBACiAgICAgICAgIHJlc3VsdCA9IFNUQVQocGF0aC0+bmFycm93LCAmc3QpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKLSAgICBpZiAocmVzdWx0ICE9IDApCi0gICAgICAgIHJldHVybiBwYXRoX2Vycm9yKCJzdGF0IiwgcGF0aCk7CisgICAgaWYgKHJlc3VsdCAhPSAwKSB7CisgICAgICAgIHJldHVybiBwYXRoX2Vycm9yKHBhdGgpOworICAgIH0KIAogICAgIHJldHVybiBfcHlzdGF0X2Zyb21zdHJ1Y3RzdGF0KCZzdCk7CiB9CiAKLVB5RG9jX1NUUlZBUihwb3NpeF9zdGF0X19kb2NfXywKLSJzdGF0KHBhdGgsICosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSkgLT4gc3RhdCByZXN1bHRcblxuXAotUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguXG5cCi1cblwKLXBhdGggbWF5IGJlIHNwZWNpZmllZCBhcyBlaXRoZXIgYSBzdHJpbmcgb3IgYXMgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuXG5cCi1cblwKLUlmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG5cCi0gIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuXG5cCi0gIGRpcl9mZCBtYXkgbm90IGJlIHN1cHBvcnRlZCBvbiB5b3VyIHBsYXRmb3JtOyBpZiBpdCBpcyB1bmF2YWlsYWJsZSwgdXNpbmdcblwKLSAgaXQgd2lsbCByYWlzZSBhIE5vdEltcGxlbWVudGVkRXJyb3IuXG5cCi1JZiBmb2xsb3dfc3ltbGlua3MgaXMgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWNcblwKLSAgbGluaywgc3RhdCB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUgdGhlXG5cCi0gIGxpbmsgcG9pbnRzIHRvLlxuXAotSXQgaXMgYW4gZXJyb3IgdG8gdXNlIGRpcl9mZCBvciBmb2xsb3dfc3ltbGlua3Mgd2hlbiBzcGVjaWZ5aW5nIHBhdGggYXNcblwKLSAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuIik7CisjaWZkZWYgSEFWRV9GU1RBVEFUCisgICAgI2RlZmluZSBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIgZGlyX2ZkX2NvbnZlcnRlcgorI2Vsc2UKKyAgICAjZGVmaW5lIE9TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfdW5hdmFpbGFibGUKKyNlbmRpZgorCisKKy8qW3B5dGhvbiBpbnB1dF0KKworY2xhc3MgcGF0aF90X2NvbnZlcnRlcihDQ29udmVydGVyKToKKworICAgIHR5cGUgPSAicGF0aF90IgorICAgIGltcGxfYnlfcmVmZXJlbmNlID0gVHJ1ZQorICAgIHBhcnNlX2J5X3JlZmVyZW5jZSA9IFRydWUKKworICAgIGNvbnZlcnRlciA9ICdwYXRoX2NvbnZlcnRlcicKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBhbGxvd19mZD1GYWxzZSwgbnVsbGFibGU9RmFsc2UpOgorICAgICAgICAjIHJpZ2h0IG5vdyBwYXRoX3QgZG9lc24ndCBzdXBwb3J0IGRlZmF1bHQgdmFsdWVzLgorICAgICAgICAjIHRvIHN1cHBvcnQgYSBkZWZhdWx0IHZhbHVlLCB5b3UnbGwgbmVlZCB0byBvdmVycmlkZSBpbml0aWFsaXplKCkuCisgICAgICAgIGlmIHNlbGYuZGVmYXVsdCBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBzcGVjaWZ5IGEgZGVmYXVsdCB0byB0aGUgcGF0aF90IGNvbnZlcnRlciEiKQorCisgICAgICAgIGlmIHNlbGYuY19kZWZhdWx0IGlzIG5vdCBOb25lOgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3Qgc3BlY2lmeSBhIGNfZGVmYXVsdCB0byB0aGUgcGF0aF90IGNvbnZlcnRlciEiKQorCisgICAgICAgIHNlbGYubnVsbGFibGUgPSBudWxsYWJsZQorICAgICAgICBzZWxmLmFsbG93X2ZkID0gYWxsb3dfZmQKKworICAgIGRlZiBwcmVfcmVuZGVyKHNlbGYpOgorICAgICAgICBkZWYgc3RyaWZ5KHZhbHVlKToKKyAgICAgICAgICAgIHJldHVybiBzdHIoaW50KGJvb2wodmFsdWUpKSkKKworICAgICAgICAjIGFkZCBzZWxmLnB5X25hbWUgaGVyZSB3aGVuIG1lcmdpbmcgd2l0aCBwb3NpeG1vZHVsZSBjb252ZXJzaW9uCisgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gJ1BBVEhfVF9JTklUSUFMSVpFKCJ7fSIsIHt9LCB7fSknLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24ubmFtZSwKKyAgICAgICAgICAgIHN0cmlmeShzZWxmLm51bGxhYmxlKSwKKyAgICAgICAgICAgIHN0cmlmeShzZWxmLmFsbG93X2ZkKSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiBjbGVhbnVwKHNlbGYpOgorICAgICAgICByZXR1cm4gInBhdGhfY2xlYW51cCgmIiArIHNlbGYubmFtZSArICIpO1xuIgorCisKK2NsYXNzIGRpcl9mZF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgY29udmVydGVyID0gJ09TX1NUQVRfRElSX0ZEX0NPTlZFUlRFUicKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0IGluICh1bnNwZWNpZmllZCwgTm9uZSk6CisgICAgICAgICAgICBzZWxmLmNfZGVmYXVsdCA9ICdERUZBVUxUX0RJUl9GRCcKKworCitbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD01YzlmNDU2ZjUzMjQ0ZmMzXSovCisKKy8qW2NsaW5pYyBpbnB1dF0KKworb3Muc3RhdAorCisgICAgcGF0aCA6IHBhdGhfdChhbGxvd19mZD1UcnVlKQorICAgICAgICBQYXRoIHRvIGJlIGV4YW1pbmVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LgorCisgICAgKgorCisgICAgZGlyX2ZkIDogZGlyX2ZkID0gTm9uZQorICAgICAgICBJZiBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksCisgICAgICAgIGFuZCBwYXRoIHNob3VsZCBiZSBhIHJlbGF0aXZlIHN0cmluZzsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8KKyAgICAgICAgdGhhdCBkaXJlY3RvcnkuCisKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlCisgICAgICAgIElmIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljIGxpbmssCisgICAgICAgIHN0YXQgd2lsbCBleGFtaW5lIHRoZSBzeW1ib2xpYyBsaW5rIGl0c2VsZiBpbnN0ZWFkIG9mIHRoZSBmaWxlCisgICAgICAgIHRoZSBsaW5rIHBvaW50cyB0by4KKworUGVyZm9ybSBhIHN0YXQgc3lzdGVtIGNhbGwgb24gdGhlIGdpdmVuIHBhdGguCisKK2Rpcl9mZCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQKKyAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYQorICBOb3RJbXBsZW1lbnRlZEVycm9yLgorCitJdCdzIGFuIGVycm9yIHRvIHVzZSBkaXJfZmQgb3IgZm9sbG93X3N5bWxpbmtzIHdoZW4gc3BlY2lmeWluZyBwYXRoIGFzCisgIGFuIG9wZW4gZmlsZSBkZXNjcmlwdG9yLgorCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihvc19zdGF0X19kb2NfXywKKyJzdGF0KCRtb2R1bGUsIC8sIHBhdGgsICosIGRpcl9mZD1Ob25lLCBmb2xsb3dfc3ltbGlua3M9VHJ1ZSlcbiIKKyItLVxuIgorIlxuIgorIlBlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLlxuIgorIlxuIgorIiAgcGF0aFxuIgorIiAgICBQYXRoIHRvIGJlIGV4YW1pbmVkOyBjYW4gYmUgc3RyaW5nLCBieXRlcywgb3Igb3Blbi1maWxlLWRlc2NyaXB0b3IgaW50LlxuIgorIiAgZGlyX2ZkXG4iCisiICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcbiIKKyIgICAgYW5kIHBhdGggc2hvdWxkIGJlIGEgcmVsYXRpdmUgc3RyaW5nOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0b1xuIgorIiAgICB0aGF0IGRpcmVjdG9yeS5cbiIKKyIgIGZvbGxvd19zeW1saW5rc1xuIgorIiAgICBJZiBGYWxzZSwgYW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHBhdGggaXMgYSBzeW1ib2xpYyBsaW5rLFxuIgorIiAgICBzdGF0IHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZVxuIgorIiAgICB0aGUgbGluayBwb2ludHMgdG8uXG4iCisiXG4iCisiZGlyX2ZkIGFuZCBmb2xsb3dfc3ltbGlua3MgbWF5IG5vdCBiZSBpbXBsZW1lbnRlZFxuIgorIiAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuIgorIiAgTm90SW1wbGVtZW50ZWRFcnJvci5cbiIKKyJcbiIKKyJJdFwncyBhbiBlcnJvciB0byB1c2UgZGlyX2ZkIG9yIGZvbGxvd19zeW1saW5rcyB3aGVuIHNwZWNpZnlpbmcgcGF0aCBhc1xuIgorIiAgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IuIik7CisKKyNkZWZpbmUgT1NfU1RBVF9NRVRIT0RERUYgICAgXAorICAgIHsic3RhdCIsIChQeUNGdW5jdGlvbilvc19zdGF0LCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywgb3Nfc3RhdF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3RhdChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitvc19zdGF0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK29zX3N0YXQoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgImZvbGxvd19zeW1saW5rcyIsIE5VTEx9OwotICAgIHBhdGhfdCBwYXRoOworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICpfa2V5d29yZHNbXSA9IHsicGF0aCIsICJkaXJfZmQiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CisgICAgcGF0aF90IHBhdGggPSBQQVRIX1RfSU5JVElBTElaRSgic3RhdCIsIDAsIDEpOwogICAgIGludCBkaXJfZmQgPSBERUZBVUxUX0RJUl9GRDsKICAgICBpbnQgZm9sbG93X3N5bWxpbmtzID0gMTsKLSAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlOwogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGguYWxsb3dfZmQgPSAxOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJnA6c3RhdCIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCi0jaWZkZWYgSEFWRV9GU1RBVEFUCi0gICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQsCi0jZWxzZQotICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQsCi0jZW5kaWYKLSAgICAgICAgJmZvbGxvd19zeW1saW5rcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybl92YWx1ZSA9IHBvc2l4X2RvX3N0YXQoInN0YXQiLCAmcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgIk8mfCRPJnA6c3RhdCIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCBPU19TVEFUX0RJUl9GRF9DT05WRVJURVIsICZkaXJfZmQsICZmb2xsb3dfc3ltbGlua3MpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gb3Nfc3RhdF9pbXBsKG1vZHVsZSwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKworZXhpdDoKKyAgICAvKiBDbGVhbnVwIGZvciBwYXRoICovCiAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKwogICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitvc19zdGF0X2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgZGlyX2ZkLCBpbnQgZm9sbG93X3N5bWxpbmtzKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWYxZGNhYTVlMjRkYjk4ODIgaW5wdXQ9NWFlMTU1YmQ0NzVmZDIwYV0qLworeworICAgIHJldHVybiBwb3NpeF9kb19zdGF0KCJzdGF0IiwgcGF0aCwgZGlyX2ZkLCBmb2xsb3dfc3ltbGlua3MpOworfQorCiBQeURvY19TVFJWQVIocG9zaXhfbHN0YXRfX2RvY19fLAogImxzdGF0KHBhdGgsICosIGRpcl9mZD1Ob25lKSAtPiBzdGF0IHJlc3VsdFxuXG5cCiBMaWtlIHN0YXQoKSwgYnV0IGRvIG5vdCBmb2xsb3cgc3ltYm9saWMgbGlua3MuXG5cCkBAIC0yNDg1LDYgKzI1NDUsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWU7CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxzdGF0IjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6bHN0YXQiLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogI2lmZGVmIEhBVkVfRlNUQVRBVApAQCAtMjQ5NCw0NCArMjU1NSwxMjIgQEAKICNlbmRpZgogICAgICAgICApKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9kb19zdGF0KCJzdGF0IiwgJnBhdGgsIGRpcl9mZCwgZm9sbG93X3N5bWxpbmtzKTsKKyAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9kb19zdGF0KCJsc3RhdCIsICZwYXRoLCBkaXJfZmQsIGZvbGxvd19zeW1saW5rcyk7CiAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCi1QeURvY19TVFJWQVIocG9zaXhfYWNjZXNzX19kb2NfXywKLSJhY2Nlc3MocGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsIGVmZmVjdGl2ZV9pZHM9RmFsc2UsXAotIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuXG5cCi1Vc2UgdGhlIHJlYWwgdWlkL2dpZCB0byB0ZXN0IGZvciBhY2Nlc3MgdG8gYSBwYXRoLiAgUmV0dXJucyBUcnVlIGlmIGdyYW50ZWQsXG5cCi1GYWxzZSBvdGhlcndpc2UuXG5cCi1cblwKLUlmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG5cCi0gIGFuZCBwYXRoIHNob3VsZCBiZSByZWxhdGl2ZTsgcGF0aCB3aWxsIHRoZW4gYmUgcmVsYXRpdmUgdG8gdGhhdCBkaXJlY3RvcnkuXG5cCi1JZiBlZmZlY3RpdmVfaWRzIGlzIFRydWUsIGFjY2VzcyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQgaW5zdGVhZCBvZlxuXAotICB0aGUgcmVhbCB1aWQvZ2lkLlxuXAotSWYgZm9sbG93X3N5bWxpbmtzIGlzIEZhbHNlLCBhbmQgdGhlIGxhc3QgZWxlbWVudCBvZiB0aGUgcGF0aCBpcyBhIHN5bWJvbGljXG5cCi0gIGxpbmssIGFjY2VzcyB3aWxsIGV4YW1pbmUgdGhlIHN5bWJvbGljIGxpbmsgaXRzZWxmIGluc3RlYWQgb2YgdGhlIGZpbGUgdGhlXG5cCi0gIGxpbmsgcG9pbnRzIHRvLlxuXAotZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWRcblwKLSAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYVxuXAotICBOb3RJbXBsZW1lbnRlZEVycm9yLlxuXAotXG5cCi1Ob3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXNcblwKLSAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyXG5cCi0gIGhhcyB0aGUgc3BlY2lmaWVkIGFjY2VzcyB0byB0aGUgcGF0aC5cblwKLVRoZSBtb2RlIGFyZ3VtZW50IGNhbiBiZSBGX09LIHRvIHRlc3QgZXhpc3RlbmNlLCBvciB0aGUgaW5jbHVzaXZlLU9SXG5cCi0gIG9mIFJfT0ssIFdfT0ssIGFuZCBYX09LLiIpOworCisjaWZkZWYgSEFWRV9GQUNDRVNTQVQKKyAgICAjZGVmaW5lIE9TX0FDQ0VTU19ESVJfRkRfQ09OVkVSVEVSIGRpcl9mZF9jb252ZXJ0ZXIKKyNlbHNlCisgICAgI2RlZmluZSBPU19BQ0NFU1NfRElSX0ZEX0NPTlZFUlRFUiBkaXJfZmRfdW5hdmFpbGFibGUKKyNlbmRpZgorLypbY2xpbmljIGlucHV0XQorb3MuYWNjZXNzCisKKyAgICBwYXRoOiBwYXRoX3QoYWxsb3dfZmQ9VHJ1ZSkKKyAgICAgICAgUGF0aCB0byBiZSB0ZXN0ZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuCisKKyAgICBtb2RlOiBpbnQKKyAgICAgICAgT3BlcmF0aW5nLXN5c3RlbSBtb2RlIGJpdGZpZWxkLiAgQ2FuIGJlIEZfT0sgdG8gdGVzdCBleGlzdGVuY2UsCisgICAgICAgIG9yIHRoZSBpbmNsdXNpdmUtT1Igb2YgUl9PSywgV19PSywgYW5kIFhfT0suCisKKyAgICAqCisKKyAgICBkaXJfZmQgOiBkaXJfZmQgPSBOb25lCisgICAgICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSwKKyAgICAgICAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0CisgICAgICAgIGRpcmVjdG9yeS4KKworICAgIGVmZmVjdGl2ZV9pZHM6IGJvb2wgPSBGYWxzZQorICAgICAgICBJZiBUcnVlLCBhY2Nlc3Mgd2lsbCB1c2UgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkIGluc3RlYWQgb2YKKyAgICAgICAgdGhlIHJlYWwgdWlkL2dpZC4KKworICAgIGZvbGxvd19zeW1saW5rczogYm9vbCA9IFRydWUKKyAgICAgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluaywKKyAgICAgICAgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZQorICAgICAgICB0aGUgbGluayBwb2ludHMgdG8uCisKK1VzZSB0aGUgcmVhbCB1aWQvZ2lkIHRvIHRlc3QgZm9yIGFjY2VzcyB0byBhIHBhdGguCisKK3twYXJhbWV0ZXJzfQorZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWQKKyAgb24geW91ciBwbGF0Zm9ybS4gIElmIHRoZXkgYXJlIHVuYXZhaWxhYmxlLCB1c2luZyB0aGVtIHdpbGwgcmFpc2UgYQorICBOb3RJbXBsZW1lbnRlZEVycm9yLgorCitOb3RlIHRoYXQgbW9zdCBvcGVyYXRpb25zIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCwgdGhlcmVmb3JlIHRoaXMKKyAgcm91dGluZSBjYW4gYmUgdXNlZCBpbiBhIHN1aWQvc2dpZCBlbnZpcm9ubWVudCB0byB0ZXN0IGlmIHRoZSBpbnZva2luZyB1c2VyCisgIGhhcyB0aGUgc3BlY2lmaWVkIGFjY2VzcyB0byB0aGUgcGF0aC4KKworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIob3NfYWNjZXNzX19kb2NfXywKKyJhY2Nlc3MoJG1vZHVsZSwgLywgcGF0aCwgbW9kZSwgKiwgZGlyX2ZkPU5vbmUsIGVmZmVjdGl2ZV9pZHM9RmFsc2UsXG4iCisiICAgICAgIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuIgorIi0tXG4iCisiXG4iCisiVXNlIHRoZSByZWFsIHVpZC9naWQgdG8gdGVzdCBmb3IgYWNjZXNzIHRvIGEgcGF0aC5cbiIKKyJcbiIKKyIgIHBhdGhcbiIKKyIgICAgUGF0aCB0byBiZSB0ZXN0ZWQ7IGNhbiBiZSBzdHJpbmcsIGJ5dGVzLCBvciBvcGVuLWZpbGUtZGVzY3JpcHRvciBpbnQuXG4iCisiICBtb2RlXG4iCisiICAgIE9wZXJhdGluZy1zeXN0ZW0gbW9kZSBiaXRmaWVsZC4gIENhbiBiZSBGX09LIHRvIHRlc3QgZXhpc3RlbmNlLFxuIgorIiAgICBvciB0aGUgaW5jbHVzaXZlLU9SIG9mIFJfT0ssIFdfT0ssIGFuZCBYX09LLlxuIgorIiAgZGlyX2ZkXG4iCisiICAgIElmIG5vdCBOb25lLCBpdCBzaG91bGQgYmUgYSBmaWxlIGRlc2NyaXB0b3Igb3BlbiB0byBhIGRpcmVjdG9yeSxcbiIKKyIgICAgYW5kIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlOyBwYXRoIHdpbGwgdGhlbiBiZSByZWxhdGl2ZSB0byB0aGF0XG4iCisiICAgIGRpcmVjdG9yeS5cbiIKKyIgIGVmZmVjdGl2ZV9pZHNcbiIKKyIgICAgSWYgVHJ1ZSwgYWNjZXNzIHdpbGwgdXNlIHRoZSBlZmZlY3RpdmUgdWlkL2dpZCBpbnN0ZWFkIG9mXG4iCisiICAgIHRoZSByZWFsIHVpZC9naWQuXG4iCisiICBmb2xsb3dfc3ltbGlua3NcbiIKKyIgICAgSWYgRmFsc2UsIGFuZCB0aGUgbGFzdCBlbGVtZW50IG9mIHRoZSBwYXRoIGlzIGEgc3ltYm9saWMgbGluayxcbiIKKyIgICAgYWNjZXNzIHdpbGwgZXhhbWluZSB0aGUgc3ltYm9saWMgbGluayBpdHNlbGYgaW5zdGVhZCBvZiB0aGUgZmlsZVxuIgorIiAgICB0aGUgbGluayBwb2ludHMgdG8uXG4iCisiXG4iCisiZGlyX2ZkLCBlZmZlY3RpdmVfaWRzLCBhbmQgZm9sbG93X3N5bWxpbmtzIG1heSBub3QgYmUgaW1wbGVtZW50ZWRcbiIKKyIgIG9uIHlvdXIgcGxhdGZvcm0uICBJZiB0aGV5IGFyZSB1bmF2YWlsYWJsZSwgdXNpbmcgdGhlbSB3aWxsIHJhaXNlIGFcbiIKKyIgIE5vdEltcGxlbWVudGVkRXJyb3IuXG4iCisiXG4iCisiTm90ZSB0aGF0IG1vc3Qgb3BlcmF0aW9ucyB3aWxsIHVzZSB0aGUgZWZmZWN0aXZlIHVpZC9naWQsIHRoZXJlZm9yZSB0aGlzXG4iCisiICByb3V0aW5lIGNhbiBiZSB1c2VkIGluIGEgc3VpZC9zZ2lkIGVudmlyb25tZW50IHRvIHRlc3QgaWYgdGhlIGludm9raW5nIHVzZXJcbiIKKyIgIGhhcyB0aGUgc3BlY2lmaWVkIGFjY2VzcyB0byB0aGUgcGF0aC4iKTsKKworI2RlZmluZSBPU19BQ0NFU1NfTUVUSE9EREVGICAgIFwKKyAgICB7ImFjY2VzcyIsIChQeUNGdW5jdGlvbilvc19hY2Nlc3MsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLCBvc19hY2Nlc3NfX2RvY19ffSwKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2FjY2VzcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCitvc19hY2Nlc3NfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBwYXRoX3QgKnBhdGgsIGludCBtb2RlLCBpbnQgZGlyX2ZkLCBpbnQgZWZmZWN0aXZlX2lkcywgaW50IGZvbGxvd19zeW1saW5rcyk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitvc19hY2Nlc3MoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibW9kZSIsICJkaXJfZmQiLCAiZWZmZWN0aXZlX2lkcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKLSAgICBwYXRoX3QgcGF0aDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciAqX2tleXdvcmRzW10gPSB7InBhdGgiLCAibW9kZSIsICJkaXJfZmQiLCAiZWZmZWN0aXZlX2lkcyIsICJmb2xsb3dfc3ltbGlua3MiLCBOVUxMfTsKKyAgICBwYXRoX3QgcGF0aCA9IFBBVEhfVF9JTklUSUFMSVpFKCJhY2Nlc3MiLCAwLCAxKTsKICAgICBpbnQgbW9kZTsKICAgICBpbnQgZGlyX2ZkID0gREVGQVVMVF9ESVJfRkQ7CiAgICAgaW50IGVmZmVjdGl2ZV9pZHMgPSAwOwogICAgIGludCBmb2xsb3dfc3ltbGlua3MgPSAxOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLAorICAgICAgICAiTyZpfCRPJnBwOmFjY2VzcyIsIF9rZXl3b3JkcywKKyAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLCAmbW9kZSwgT1NfU1RBVF9ESVJfRkRfQ09OVkVSVEVSLCAmZGlyX2ZkLCAmZWZmZWN0aXZlX2lkcywgJmZvbGxvd19zeW1saW5rcykpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBvc19hY2Nlc3NfaW1wbChtb2R1bGUsICZwYXRoLCBtb2RlLCBkaXJfZmQsIGVmZmVjdGl2ZV9pZHMsIGZvbGxvd19zeW1saW5rcyk7CisKK2V4aXQ6CisgICAgLyogQ2xlYW51cCBmb3IgcGF0aCAqLworICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CisKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorb3NfYWNjZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgcGF0aF90ICpwYXRoLCBpbnQgbW9kZSwgaW50IGRpcl9mZCwgaW50IGVmZmVjdGl2ZV9pZHMsIGludCBmb2xsb3dfc3ltbGlua3MpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YTZlZDRmMTUxYmU5ZGYwZiBpbnB1dD0yZTJlNzU5NDM3MWY1YjdlXSovCit7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAKICNpZmRlZiBNU19XSU5ET1dTCkBAIC0yNTQwLDE3ICsyNjc5LDYgQEAKICAgICBpbnQgcmVzdWx0OwogI2VuZGlmCiAKLSAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZpfCRPJnBwOmFjY2VzcyIsIGtleXdvcmRzLAotICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLAotI2lmZGVmIEhBVkVfRkFDQ0VTU0FUCi0gICAgICAgIGRpcl9mZF9jb252ZXJ0ZXIsICZkaXJfZmQsCi0jZWxzZQotICAgICAgICBkaXJfZmRfdW5hdmFpbGFibGUsICZkaXJfZmQsCi0jZW5kaWYKLSAgICAgICAgJmVmZmVjdGl2ZV9pZHMsICZmb2xsb3dfc3ltbGlua3MpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQogI2lmbmRlZiBIQVZFX0ZBQ0NFU1NBVAogICAgIGlmIChmb2xsb3dfc3ltbGlua3Nfc3BlY2lmaWVkKCJhY2Nlc3MiLCBmb2xsb3dfc3ltbGlua3MpKQogICAgICAgICBnb3RvIGV4aXQ7CkBAIC0yNTYzLDEwICsyNjkxLDEwIEBACiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIGlmIChwYXRoLndpZGUgIT0gTlVMTCkKLSAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLndpZGUpOworICAgIGlmIChwYXRoLT53aWRlICE9IE5VTEwpCisgICAgICAgIGF0dHIgPSBHZXRGaWxlQXR0cmlidXRlc1cocGF0aC0+d2lkZSk7CiAgICAgZWxzZQotICAgICAgICBhdHRyID0gR2V0RmlsZUF0dHJpYnV0ZXNBKHBhdGgubmFycm93KTsKKyAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoLT5uYXJyb3cpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAvKgpAQCAtMjU3OCw3ICsyNzA2LDcgQEAKICAgICAgKiAoRGlyZWN0b3JpZXMgY2Fubm90IGJlIHJlYWQtb25seSBvbiBXaW5kb3dzLikKICAgICAqLwogICAgIHJldHVybl92YWx1ZSA9IFB5Qm9vbF9Gcm9tTG9uZygKLSAgICAgICAgKGF0dHIgIT0gMHhGRkZGRkZGRikgJiYKKyAgICAgICAgKGF0dHIgIT0gSU5WQUxJRF9GSUxFX0FUVFJJQlVURVMpICYmCiAgICAgICAgICAgICAoIShtb2RlICYgMikgfHwKICAgICAgICAgICAgICEoYXR0ciAmIEZJTEVfQVRUUklCVVRFX1JFQURPTkxZKSB8fAogICAgICAgICAgICAgKGF0dHIgJiBGSUxFX0FUVFJJQlVURV9ESVJFQ1RPUlkpKSk7CkBAIC0yNTk0LDExICsyNzIyLDExIEBACiAgICAgICAgICAgICBmbGFncyB8PSBBVF9TWU1MSU5LX05PRk9MTE9XOwogICAgICAgICBpZiAoZWZmZWN0aXZlX2lkcykKICAgICAgICAgICAgIGZsYWdzIHw9IEFUX0VBQ0NFU1M7Ci0gICAgICAgIHJlc3VsdCA9IGZhY2Nlc3NhdChkaXJfZmQsIHBhdGgubmFycm93LCBtb2RlLCBmbGFncyk7CisgICAgICAgIHJlc3VsdCA9IGZhY2Nlc3NhdChkaXJfZmQsIHBhdGgtPm5hcnJvdywgbW9kZSwgZmxhZ3MpOwogICAgIH0KICAgICBlbHNlCiAjZW5kaWYKLSAgICAgICAgcmVzdWx0ID0gYWNjZXNzKHBhdGgubmFycm93LCBtb2RlKTsKKyAgICAgICAgcmVzdWx0ID0gYWNjZXNzKHBhdGgtPm5hcnJvdywgbW9kZSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICByZXR1cm5fdmFsdWUgPSBQeUJvb2xfRnJvbUxvbmcoIXJlc3VsdCk7CiAjZW5kaWYKQEAgLTI2MDYsNyArMjczNCw2IEBACiAjaWZuZGVmIEhBVkVfRkFDQ0VTU0FUCiBleGl0OgogI2VuZGlmCi0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOwogfQogCkBAIC0yNjIzLDM1ICsyNzUwLDY4IEBACiAjZGVmaW5lIFhfT0sgMQogI2VuZGlmCiAKKwogI2lmZGVmIEhBVkVfVFRZTkFNRQotUHlEb2NfU1RSVkFSKHBvc2l4X3R0eW5hbWVfX2RvY19fLAotInR0eW5hbWUoZmQpIC0+IHN0cmluZ1xuXG5cCi1SZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGRldmljZSBjb25uZWN0ZWQgdG8gJ2ZkJy4iKTsKKworLypbY2xpbmljIGlucHV0XQorb3MudHR5bmFtZSAtPiBEZWNvZGVGU0RlZmF1bHQKKworICAgIGZkOiBpbnQKKyAgICAgICAgSW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgaGFuZGxlLgorCisgICAgLworCitSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGRldmljZSBjb25uZWN0ZWQgdG8gJ2ZkJy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKG9zX3R0eW5hbWVfX2RvY19fLAorInR0eW5hbWUoJG1vZHVsZSwgZmQsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHRlcm1pbmFsIGRldmljZSBjb25uZWN0ZWQgdG8gXCdmZFwnLlxuIgorIlxuIgorIiAgZmRcbiIKKyIgICAgSW50ZWdlciBmaWxlIGRlc2NyaXB0b3IgaGFuZGxlLiIpOworCisjZGVmaW5lIE9TX1RUWU5BTUVfTUVUSE9EREVGICAgIFwKKyAgICB7InR0eW5hbWUiLCAoUHlDRnVuY3Rpb24pb3NfdHR5bmFtZSwgTUVUSF9WQVJBUkdTLCBvc190dHluYW1lX19kb2NfX30sCisKK3N0YXRpYyBjaGFyICoKK29zX3R0eW5hbWVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBpbnQgZmQpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfdHR5bmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitvc190dHluYW1lKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBpZDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBpbnQgZmQ7CisgICAgY2hhciAqX3JldHVybl92YWx1ZTsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAiaTp0dHluYW1lIiwKKyAgICAgICAgJmZkKSkKKyAgICAgICAgZ290byBleGl0OworICAgIF9yZXR1cm5fdmFsdWUgPSBvc190dHluYW1lX2ltcGwobW9kdWxlLCBmZCk7CisgICAgaWYgKF9yZXR1cm5fdmFsdWUgPT0gTlVMTCkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoX3JldHVybl92YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIGNoYXIgKgorb3NfdHR5bmFtZV9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBmZCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1jZWU3YmM0Y2ZmZWMwMWEyIGlucHV0PTVmNzJjYTgzZTc2YjNiNDVdKi8KK3sKICAgICBjaGFyICpyZXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6dHR5bmFtZSIsICZpZCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0jaWYgZGVmaW5lZChfX1ZNUykKLSAgICAvKiBmaWxlIGRlc2NyaXB0b3IgMCBvbmx5LCB0aGUgZGVmYXVsdCBpbnB1dCBkZXZpY2UgKHN0ZGluKSAqLwotICAgIGlmIChpZCA9PSAwKSB7Ci0gICAgICAgIHJldCA9IHR0eW5hbWUoKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJldCA9IE5VTEw7Ci0gICAgfQotI2Vsc2UKLSAgICByZXQgPSB0dHluYW1lKGlkKTsKLSNlbmRpZgorICAgIHJldCA9IHR0eW5hbWUoZmQpOwogICAgIGlmIChyZXQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQocmV0KTsKKyAgICAgICAgcG9zaXhfZXJyb3IoKTsKKyAgICByZXR1cm4gcmV0OwogfQorI2Vsc2UKKyNkZWZpbmUgT1NfVFRZTkFNRV9NRVRIT0RERUYKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9DVEVSTUlECkBAIC0yNjkzLDYgKzI4NTMsNyBAQAogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNoZGlyIjsKICNpZmRlZiBIQVZFX0ZDSERJUgogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC0yNzA4LDggKzI4NjksNiBAQAogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gd2luMzJfY2hkaXIocGF0aC5uYXJyb3cpOwogICAgIHJlc3VsdCA9ICFyZXN1bHQ7IC8qIG9uIHVuaXgsIHN1Y2Nlc3MgPSAwLCBvbiB3aW5kb3dzLCBzdWNjZXNzID0gITAgKi8KLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgcmVzdWx0ID0gX2NoZGlyMihwYXRoLm5hcnJvdyk7CiAjZWxzZQogI2lmZGVmIEhBVkVfRkNIRElSCiAgICAgaWYgKHBhdGguZmQgIT0gLTEpCkBAIC0yNzIxLDcgKzI4ODAsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoImNoZGlyIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMjc4NSw2ICsyOTQ0LDcgQEAKICNlbmRpZgogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJjaG1vZCI7CiAjaWZkZWYgSEFWRV9GQ0hNT0QKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtMjgxMCw3ICsyOTcwLDcgQEAKICAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzVyhwYXRoLndpZGUpOwogICAgIGVsc2UKICAgICAgICAgYXR0ciA9IEdldEZpbGVBdHRyaWJ1dGVzQShwYXRoLm5hcnJvdyk7Ci0gICAgaWYgKGF0dHIgPT0gMHhGRkZGRkZGRikKKyAgICBpZiAoYXR0ciA9PSBJTlZBTElEX0ZJTEVfQVRUUklCVVRFUykKICAgICAgICAgcmVzdWx0ID0gMDsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKG1vZGUgJiBfU19JV1JJVEUpCkBAIC0yODI1LDcgKzI5ODUsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAoIXJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSB3aW4zMl9lcnJvcl9vYmplY3QoImNobW9kIiwgcGF0aC5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlIC8qIE1TX1dJTkRPV1MgKi8KQEAgLTI4NzksNyArMzAzOSw3IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZQogI2VuZGlmCi0gICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJjaG1vZCIsICZwYXRoKTsKKyAgICAgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC0yOTIzLDIwICszMDgzLDIzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfbGNobW9kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqb3BhdGg7Ci0gICAgY2hhciAqcGF0aDsKKyAgICBwYXRoX3QgcGF0aDsKICAgICBpbnQgaTsKICAgICBpbnQgcmVzOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpOmxjaG1vZCIsIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmaSkpCisgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJsY2htb2QiOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZpOmxjaG1vZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJmkpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGxjaG1vZChwYXRoLCBpKTsKKyAgICByZXMgPSBsY2htb2QocGF0aC5uYXJyb3csIGkpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0gICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcl93aXRoX2FsbG9jYXRlZF9maWxlbmFtZShvcGF0aCk7Ci0gICAgUHlfREVDUkVGKG9wYXRoKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBwYXRoX2Vycm9yKCZwYXRoKTsKKyAgICAgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7CiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hNT0QgKi8KQEAgLTI5NjQsNiArMzEyNyw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZmxhZ3MiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNoZmxhZ3MiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8ma3wkaTpjaGZsYWdzIiwga2V5d29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZsYWdzLCAmZm9sbG93X3N5bWxpbmtzKSkKQEAgLTI5ODQsNyArMzE0OCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigiY2hmbGFncyIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTMwMDcsMjIgKzMxNzEsMjQgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9sY2hmbGFncyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7CisgICAgcGF0aF90IHBhdGg7CiAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICBpbnQgcmVzOworICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGNoZmxhZ3MiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyZrOmxjaGZsYWdzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLCAmb3BhdGgsICZmbGFncykpCisgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwgJmZsYWdzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICByZXMgPSBsY2hmbGFncyhwYXRoLCBmbGFncyk7CisgICAgcmVzID0gbGNoZmxhZ3MocGF0aC5uYXJyb3csIGZsYWdzKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgIGlmIChyZXMgPCAwKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3Jfd2l0aF9hbGxvY2F0ZWRfZmlsZW5hbWUob3BhdGgpOwotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KICNlbmRpZiAvKiBIQVZFX0xDSEZMQUdTICovCiAKQEAgLTMwMzQsNyArMzIwMCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfY2hyb290KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gcG9zaXhfMXN0cihhcmdzLCAiTyY6Y2hyb290IiwgY2hyb290KTsKKyAgICByZXR1cm4gcG9zaXhfMXN0cigiY2hyb290IiwgYXJncywgIk8mOmNocm9vdCIsIGNocm9vdCk7CiB9CiAjZW5kaWYKIApAQCAtMzExNiw2ICszMjgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImNob3duIjsKICNpZmRlZiBIQVZFX0ZDSE9XTgogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC0zMTczLDcgKzMzNDAsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfcG9zaXhfZXJyb3IoImNob3duIiwgJnBhdGgpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtMzIyMiw0OSArMzM4OSw1NCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X2xjaG93bihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7CisgICAgcGF0aF90IHBhdGg7CiAgICAgdWlkX3QgdWlkOwogICAgIGdpZF90IGdpZDsKICAgICBpbnQgcmVzOworICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGNob3duIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mTyZPJjpsY2hvd24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIsICZvcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlfVWlkX0NvbnZlcnRlciwgJnVpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1B5X0dpZF9Db252ZXJ0ZXIsICZnaWQpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwYXRoID0gUHlCeXRlc19Bc1N0cmluZyhvcGF0aCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJlcyA9IGxjaG93bihwYXRoLCB1aWQsIGdpZCk7CisgICAgcmVzID0gbGNob3duKHBhdGgubmFycm93LCB1aWQsIGdpZCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yX3dpdGhfYWxsb2NhdGVkX2ZpbGVuYW1lKG9wYXRoKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOworICAgICAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgcmV0dXJuIFB5X05vbmU7CiB9CiAjZW5kaWYgLyogSEFWRV9MQ0hPV04gKi8KIAogCi0jaWZkZWYgSEFWRV9HRVRDV0QKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9nZXRjd2QoaW50IHVzZV9ieXRlcykKIHsKLSAgICBjaGFyIGJ1ZlsxMDI2XTsKLSAgICBjaGFyICpyZXM7CisgICAgY2hhciAqYnVmLCAqdG1wYnVmOworICAgIGNoYXIgKmN3ZDsKKyAgICBjb25zdCBzaXplX3QgY2h1bmsgPSAxMDI0OworICAgIHNpemVfdCBidWZsZW4gPSAwOworICAgIFB5T2JqZWN0ICpvYmo7CiAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgaWYgKCF1c2VfYnl0ZXMpIHsKLSAgICAgICAgd2NoYXJfdCB3YnVmWzEwMjZdOworICAgICAgICB3Y2hhcl90IHdidWZbTUFYUEFUSExFTl07CiAgICAgICAgIHdjaGFyX3QgKndidWYyID0gd2J1ZjsKICAgICAgICAgUHlPYmplY3QgKnJlc29iajsKICAgICAgICAgRFdPUkQgbGVuOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGxlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKHNpemVvZiB3YnVmLyBzaXplb2Ygd2J1ZlswXSwgd2J1Zik7CisgICAgICAgIGxlbiA9IEdldEN1cnJlbnREaXJlY3RvcnlXKFB5X0FSUkFZX0xFTkdUSCh3YnVmKSwgd2J1Zik7CiAgICAgICAgIC8qIElmIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLCBsZW4gZG9lcyBub3QgaW5jbHVkZSB0aGUKICAgICAgICAgICAgdGVybWluYXRpbmcgXDAuIElmIHRoZSBidWZmZXIgaXMgdG9vIHNtYWxsLCBsZW4gaW5jbHVkZXMKICAgICAgICAgICAgdGhlIHNwYWNlIG5lZWRlZCBmb3IgdGhlIHRlcm1pbmF0b3IuICovCi0gICAgICAgIGlmIChsZW4gPj0gc2l6ZW9mIHdidWYvIHNpemVvZiB3YnVmWzBdKSB7Ci0gICAgICAgICAgICB3YnVmMiA9IG1hbGxvYyhsZW4gKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBpZiAobGVuID49IFB5X0FSUkFZX0xFTkdUSCh3YnVmKSkgeworICAgICAgICAgICAgd2J1ZjIgPSBQeU1lbV9SYXdNYWxsb2MobGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgICAgIGlmICh3YnVmMikKICAgICAgICAgICAgICAgICBsZW4gPSBHZXRDdXJyZW50RGlyZWN0b3J5VyhsZW4sIHdidWYyKTsKICAgICAgICAgfQpAQCAtMzI3NCwxMSArMzQ0NiwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFsZW4pIHsKLSAgICAgICAgICAgIGlmICh3YnVmMiAhPSB3YnVmKSBmcmVlKHdidWYyKTsKLSAgICAgICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiZ2V0Y3dkdSIsIE5VTEwpOworICAgICAgICAgICAgaWYgKHdidWYyICE9IHdidWYpCisgICAgICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmMik7CisgICAgICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAgICAgICAgIH0KICAgICAgICAgcmVzb2JqID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih3YnVmMiwgbGVuKTsKLSAgICAgICAgaWYgKHdidWYyICE9IHdidWYpIGZyZWUod2J1ZjIpOworICAgICAgICBpZiAod2J1ZjIgIT0gd2J1ZikKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod2J1ZjIpOwogICAgICAgICByZXR1cm4gcmVzb2JqOwogICAgIH0KIApAQCAtMzI4NiwxOCArMzQ2MCwzMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICNlbmRpZgogCisgICAgYnVmID0gY3dkID0gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXMgPSBfZ2V0Y3dkMihidWYsIHNpemVvZiBidWYpOwotI2Vsc2UKLSAgICByZXMgPSBnZXRjd2QoYnVmLCBzaXplb2YgYnVmKTsKLSNlbmRpZgorICAgIGRvIHsKKyAgICAgICAgYnVmbGVuICs9IGNodW5rOworICAgICAgICB0bXBidWYgPSBQeU1lbV9SYXdSZWFsbG9jKGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgaWYgKHRtcGJ1ZiA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgYnVmID0gdG1wYnVmOworICAgICAgICBjd2QgPSBnZXRjd2QoYnVmLCBidWZsZW4pOworICAgIH0gd2hpbGUgKGN3ZCA9PSBOVUxMICYmIGVycm5vID09IEVSQU5HRSk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAocmVzID09IE5VTEwpCisKKyAgICBpZiAoY3dkID09IE5VTEwpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShidWYpOwogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICB9CisKICAgICBpZiAodXNlX2J5dGVzKQotICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShidWYsIHN0cmxlbihidWYpKTsKLSAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChidWYpOworICAgICAgICBvYmogPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGJ1Ziwgc3RybGVuKGJ1ZikpOworICAgIGVsc2UKKyAgICAgICAgb2JqID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChidWYpOworICAgIFB5TWVtX1Jhd0ZyZWUoYnVmKTsKKworICAgIHJldHVybiBvYmo7CiB9CiAKIFB5RG9jX1NUUlZBUihwb3NpeF9nZXRjd2RfX2RvY19fLApAQCAtMzMxOSw3ICszNTA2LDYgQEAKIHsKICAgICByZXR1cm4gcG9zaXhfZ2V0Y3dkKDEpOwogfQotI2VuZGlmCiAKICNpZiAoKCFkZWZpbmVkKEhBVkVfTElOSykpICYmIGRlZmluZWQoTVNfV0lORE9XUykpCiAjZGVmaW5lIEhBVkVfTElOSyAxCkBAIC0zMzU4LDYgKzM1NDQsOCBAQAogCiAgICAgbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzcmMpKTsKICAgICBtZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKGRzdCkpOworICAgIHNyYy5mdW5jdGlvbl9uYW1lID0gImxpbmsiOworICAgIGRzdC5mdW5jdGlvbl9uYW1lID0gImxpbmsiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mTyZ8TyZPJnA6bGluayIsIGtleXdvcmRzLAogICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZzcmMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJmRzdCwKQEAgLTMzODgsNyArMzU3Niw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdCgibGluayIsIGRzdC5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbHNlCkBAIC0zNDA2LDcgKzM1OTQsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoImxpbmsiLCAmZHN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcjIoJnNyYywgJmRzdCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZW5kaWYKQEAgLTM0MzYsNzIgKzM2MjQsMzUgQEAKICAgdGhlIGZpbGUgZGVzY3JpcHRvciBtdXN0IHJlZmVyIHRvIGEgZGlyZWN0b3J5LlxuXAogICBJZiB0aGlzIGZ1bmN0aW9uYWxpdHkgaXMgdW5hdmFpbGFibGUsIHVzaW5nIGl0IHJhaXNlcyBOb3RJbXBsZW1lbnRlZEVycm9yLiIpOwogCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfbGlzdGRpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0gICAgcGF0aF90IHBhdGg7Ci0gICAgUHlPYmplY3QgKmxpc3QgPSBOVUxMOwotICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07Ci0jaWZkZWYgSEFWRV9GRE9QRU5ESVIKLSAgICBpbnQgZmQgPSAtMTsKLSNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLwotCiAjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiAhZGVmaW5lZChIQVZFX09QRU5ESVIpCitzdGF0aWMgUHlPYmplY3QgKgorX2xpc3RkaXJfd2luZG93c19ub19vcGVuZGlyKHBhdGhfdCAqcGF0aCwgUHlPYmplY3QgKmxpc3QpCit7CisgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCBOVUxMfTsKICAgICBQeU9iamVjdCAqdjsKICAgICBIQU5ETEUgaEZpbmRGaWxlID0gSU5WQUxJRF9IQU5ETEVfVkFMVUU7CiAgICAgQk9PTCByZXN1bHQ7CiAgICAgV0lOMzJfRklORF9EQVRBIEZpbGVEYXRhOwotICAgIGNoYXIgbmFtZWJ1ZltNQVhfUEFUSCs1XTsgLyogT3ZlcmFsbG9jYXRlIGZvciBcXCouKlwwICovCisgICAgY2hhciBuYW1lYnVmW01BWF9QQVRIKzRdOyAvKiBPdmVyYWxsb2NhdGUgZm9yICJcKi4qIiAqLwogICAgIGNoYXIgKmJ1ZnB0ciA9IG5hbWVidWY7CiAgICAgLyogb25seSBjbGFpbSB0byBoYXZlIHNwYWNlIGZvciBNQVhfUEFUSCAqLwotICAgIFB5X3NzaXplX3QgbGVuID0gc2l6ZW9mKG5hbWVidWYpLTU7CisgICAgUHlfc3NpemVfdCBsZW4gPSBQeV9BUlJBWV9MRU5HVEgobmFtZWJ1ZiktNDsKICAgICBQeU9iamVjdCAqcG8gPSBOVUxMOwogICAgIHdjaGFyX3QgKnduYW1lYnVmID0gTlVMTDsKLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0jaWZuZGVmIE1BWF9QQVRICi0jZGVmaW5lIE1BWF9QQVRIICAgIENDSE1BWFBBVEgKLSNlbmRpZgotICAgIGNoYXIgKnB0OwotICAgIFB5T2JqZWN0ICp2OwotICAgIGNoYXIgbmFtZWJ1ZltNQVhfUEFUSCs1XTsKLSAgICBIRElSICBoZGlyID0gMTsKLSAgICBVTE9ORyBzcmNoY250ID0gMTsKLSAgICBGSUxFRklOREJVRjMgICBlcDsKLSAgICBBUElSRVQgcmM7Ci0jZWxzZQotICAgIFB5T2JqZWN0ICp2OwotICAgIERJUiAqZGlycCA9IE5VTEw7Ci0gICAgc3RydWN0IGRpcmVudCAqZXA7Ci0gICAgaW50IHJldHVybl9zdHI7IC8qIGlmIGZhbHNlLCByZXR1cm4gYnl0ZXMgKi8KLSNlbmRpZgogCi0gICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwotICAgIHBhdGgubnVsbGFibGUgPSAxOwotI2lmZGVmIEhBVkVfRkRPUEVORElSCi0gICAgcGF0aC5hbGxvd19mZCA9IDE7Ci0gICAgcGF0aC5mZCA9IC0xOwotI2VuZGlmCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE8mOmxpc3RkaXIiLCBrZXl3b3JkcywKLSAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoCi0gICAgICAgICkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyogWFhYIFNob3VsZCByZWRvIHRoaXMgcHV0dGluZyB0aGUgKG5vdyBmb3VyKSB2ZXJzaW9ucyBvZiBvcGVuZGlyCi0gICAgICAgaW4gc2VwYXJhdGUgZmlsZXMgaW5zdGVhZCBvZiBoYXZpbmcgdGhlbSBhbGwgaGVyZS4uLiAqLwotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoSEFWRV9PUEVORElSKQotICAgIGlmICghcGF0aC5uYXJyb3cpIHsKKyAgICBpZiAoIXBhdGgtPm5hcnJvdykgewogICAgICAgICBXSU4zMl9GSU5EX0RBVEFXIHdGaWxlRGF0YTsKICAgICAgICAgd2NoYXJfdCAqcG9fd2NoYXJzOwogCi0gICAgICAgIGlmICghcGF0aC53aWRlKSB7IC8qIERlZmF1bHQgYXJnOiAiLiIgKi8KKyAgICAgICAgaWYgKCFwYXRoLT53aWRlKSB7IC8qIERlZmF1bHQgYXJnOiAiLiIgKi8KICAgICAgICAgICAgIHBvX3djaGFycyA9IEwiLiI7CiAgICAgICAgICAgICBsZW4gPSAxOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcG9fd2NoYXJzID0gcGF0aC53aWRlOwotICAgICAgICAgICAgbGVuID0gd2NzbGVuKHBhdGgud2lkZSk7CisgICAgICAgICAgICBwb193Y2hhcnMgPSBwYXRoLT53aWRlOworICAgICAgICAgICAgbGVuID0gd2NzbGVuKHBhdGgtPndpZGUpOwogICAgICAgICB9CiAgICAgICAgIC8qIFRoZSArNSBpcyBzbyB3ZSBjYW4gYXBwZW5kICJcXCouKlwwIiAqLwotICAgICAgICB3bmFtZWJ1ZiA9IG1hbGxvYygobGVuICsgNSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICB3bmFtZWJ1ZiA9IFB5TWVtX05ldyh3Y2hhcl90LCBsZW4gKyA1KTsKICAgICAgICAgaWYgKCF3bmFtZWJ1ZikgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIGdvdG8gZXhpdDsKQEAgLTM1MDksOCArMzY2MCw4IEBACiAgICAgICAgIHdjc2NweSh3bmFtZWJ1ZiwgcG9fd2NoYXJzKTsKICAgICAgICAgaWYgKGxlbiA+IDApIHsKICAgICAgICAgICAgIHdjaGFyX3Qgd2NoID0gd25hbWVidWZbbGVuLTFdOwotICAgICAgICAgICAgaWYgKHdjaCAhPSBMJy8nICYmIHdjaCAhPSBMJ1xcJyAmJiB3Y2ggIT0gTCc6JykKLSAgICAgICAgICAgICAgICB3bmFtZWJ1ZltsZW4rK10gPSBMJ1xcJzsKKyAgICAgICAgICAgIGlmICh3Y2ggIT0gU0VQICYmIHdjaCAhPSBBTFRTRVAgJiYgd2NoICE9IEwnOicpCisgICAgICAgICAgICAgICAgd25hbWVidWZbbGVuKytdID0gU0VQOwogICAgICAgICAgICAgd2NzY3B5KHduYW1lYnVmICsgbGVuLCBMIiouKiIpOwogICAgICAgICB9CiAgICAgICAgIGlmICgobGlzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKQEAgLTM1MjQsOCArMzY3NSw3IEBACiAgICAgICAgICAgICBpZiAoZXJyb3IgPT0gRVJST1JfRklMRV9OT1RfRk9VTkQpCiAgICAgICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgbGlzdCA9IE5VTEw7Ci0gICAgICAgICAgICB3aW4zMl9lcnJvcl91bmljb2RlKCJGaW5kRmlyc3RGaWxlVyIsIHduYW1lYnVmKTsKKyAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgICAgIGRvIHsKQEAgLTM1NTQsMTkgKzM3MDQsMTkgQEAKICAgICAgICAgICAgICAgIGl0IGdvdCB0byB0aGUgZW5kIG9mIHRoZSBkaXJlY3RvcnkuICovCiAgICAgICAgICAgICBpZiAoIXJlc3VsdCAmJiBHZXRMYXN0RXJyb3IoKSAhPSBFUlJPUl9OT19NT1JFX0ZJTEVTKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSB3aW4zMl9lcnJvcl91bmljb2RlKCJGaW5kTmV4dEZpbGVXIiwgd25hbWVidWYpOworICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfSB3aGlsZSAocmVzdWx0ID09IFRSVUUpOwogCiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9Ci0gICAgc3RyY3B5KG5hbWVidWYsIHBhdGgubmFycm93KTsKLSAgICBsZW4gPSBwYXRoLmxlbmd0aDsKKyAgICBzdHJjcHkobmFtZWJ1ZiwgcGF0aC0+bmFycm93KTsKKyAgICBsZW4gPSBwYXRoLT5sZW5ndGg7CiAgICAgaWYgKGxlbiA+IDApIHsKICAgICAgICAgY2hhciBjaCA9IG5hbWVidWZbbGVuLTFdOwotICAgICAgICBpZiAoY2ggIT0gU0VQICYmIGNoICE9IEFMVFNFUCAmJiBjaCAhPSAnOicpCi0gICAgICAgICAgICBuYW1lYnVmW2xlbisrXSA9ICcvJzsKKyAgICAgICAgaWYgKGNoICE9ICdcXCcgJiYgY2ggIT0gJy8nICYmIGNoICE9ICc6JykKKyAgICAgICAgICAgIG5hbWVidWZbbGVuKytdID0gJ1xcJzsKICAgICAgICAgc3RyY3B5KG5hbWVidWYgKyBsZW4sICIqLioiKTsKICAgICB9CiAKQEAgLTM1ODEsNyArMzczMSw3IEBACiAgICAgICAgIGlmIChlcnJvciA9PSBFUlJPUl9GSUxFX05PVF9GT1VORCkKICAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICBsaXN0ID0gd2luMzJfZXJyb3IoIkZpbmRGaXJzdEZpbGUiLCBuYW1lYnVmKTsKKyAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgZG8gewpAQCAtMzYwOSw3ICszNzU5LDcgQEAKICAgICAgICAgICAgaXQgZ290IHRvIHRoZSBlbmQgb2YgdGhlIGRpcmVjdG9yeS4gKi8KICAgICAgICAgaWYgKCFyZXN1bHQgJiYgR2V0TGFzdEVycm9yKCkgIT0gRVJST1JfTk9fTU9SRV9GSUxFUykgewogICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yKCJGaW5kTmV4dEZpbGUiLCBuYW1lYnVmKTsKKyAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgfSB3aGlsZSAocmVzdWx0ID09IFRSVUUpOwpAQCAtMzYxOSw5MiArMzc2OSwzNSBAQAogICAgICAgICBpZiAoRmluZENsb3NlKGhGaW5kRmlsZSkgPT0gRkFMU0UpIHsKICAgICAgICAgICAgIGlmIChsaXN0ICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IHdpbjMyX2Vycm9yX29iamVjdCgiRmluZENsb3NlIiwgcGF0aC5vYmplY3QpOworICAgICAgICAgICAgICAgIGxpc3QgPSBwYXRoX2Vycm9yKHBhdGgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIGlmICh3bmFtZWJ1ZikKLSAgICAgICAgZnJlZSh3bmFtZWJ1Zik7Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKKyAgICBQeU1lbV9GcmVlKHduYW1lYnVmKTsKIAogICAgIHJldHVybiBsaXN0OworfSAgLyogZW5kIG9mIF9saXN0ZGlyX3dpbmRvd3Nfbm9fb3BlbmRpciAqLwogCi0jZWxpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIGlmIChwYXRoLmxlbmd0aCA+PSBNQVhfUEFUSCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInBhdGggdG9vIGxvbmciKTsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLSAgICBzdHJjcHkobmFtZWJ1ZiwgcGF0aC5uYXJyb3cpOwotICAgIGZvciAocHQgPSBuYW1lYnVmOyAqcHQ7IHB0KyspCi0gICAgICAgIGlmICgqcHQgPT0gQUxUU0VQKQotICAgICAgICAgICAgKnB0ID0gU0VQOwotICAgIGlmIChuYW1lYnVmW2xlbi0xXSAhPSBTRVApCi0gICAgICAgIG5hbWVidWZbbGVuKytdID0gU0VQOwotICAgIHN0cmNweShuYW1lYnVmICsgbGVuLCAiKi4qIik7CisjZWxzZSAgLyogdGh1cyBQT1NJWCwgaWU6IG5vdCAoTVNfV0lORE9XUyBhbmQgbm90IEhBVkVfT1BFTkRJUikgKi8KIAotICAgIGlmICgobGlzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKLSAgICAgICAgZ290byBleGl0OwotICAgIH0KLQotICAgIHJjID0gRG9zRmluZEZpcnN0KG5hbWVidWYsICAgICAgICAgLyogV2lsZGNhcmQgUGF0dGVybiB0byBNYXRjaCAqLwotICAgICAgICAgICAgICAgICAgICAgICZoZGlyLCAgICAgICAgICAgLyogSGFuZGxlIHRvIFVzZSBXaGlsZSBTZWFyY2ggRGlyZWN0b3J5ICovCi0gICAgICAgICAgICAgICAgICAgICAgRklMRV9SRUFET05MWSB8IEZJTEVfSElEREVOIHwgRklMRV9TWVNURU0gfCBGSUxFX0RJUkVDVE9SWSwKLSAgICAgICAgICAgICAgICAgICAgICAmZXAsIHNpemVvZihlcCksIC8qIFN0cnVjdHVyZSB0byBSZWNlaXZlIERpcmVjdG9yeSBFbnRyeSAqLwotICAgICAgICAgICAgICAgICAgICAgICZzcmNoY250LCAgICAgICAgLyogTWF4IGFuZCBBY3R1YWwgQ291bnQgb2YgRW50cmllcyBQZXIgSXRlcmF0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgRklMX1NUQU5EQVJEKTsgICAvKiBGb3JtYXQgb2YgRW50cnkgKEVBcyBvciBOb3QpICovCi0KLSAgICBpZiAocmMgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgZXJybm8gPSBFTk9FTlQ7Ci0gICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgbGlzdCA9IHBvc2l4X2Vycm9yX3dpdGhfZmlsZW5hbWUocGF0aC5uYXJyb3cpOwotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgfQotCi0gICAgaWYgKHNyY2hjbnQgPiAwKSB7IC8qIElmIERpcmVjdG9yeSBpcyBOT1QgVG90YWxseSBFbXB0eSwgKi8KLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKGVwLmFjaE5hbWVbMF0gPT0gJy4nCi0gICAgICAgICAgICAmJiAoZXAuYWNoTmFtZVsxXSA9PSAnXDAnIHx8IChlcC5hY2hOYW1lWzFdID09ICcuJyAmJiBlcC5hY2hOYW1lWzJdID09ICdcMCcpKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogU2tpcCBPdmVyICIuIiBhbmQgIi4uIiBOYW1lcyAqLwotCi0gICAgICAgICAgICBzdHJjcHkobmFtZWJ1ZiwgZXAuYWNoTmFtZSk7Ci0KLSAgICAgICAgICAgIC8qIExlYXZlIENhc2Ugb2YgTmFtZSBBbG9uZSAtLSBJbiBOYXRpdmUgRm9ybSAqLwotICAgICAgICAgICAgLyogKFJlbW92ZWQgRm9yY2VkIExvd2VyY2FzaW5nIENvZGUpICovCi0KLSAgICAgICAgICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmcobmFtZWJ1Zik7Ci0gICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwotICAgICAgICAgICAgICAgIGxpc3QgPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQobGlzdCwgdikgIT0gMCkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGlzdCk7Ci0gICAgICAgICAgICAgICAgbGlzdCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgIH0gd2hpbGUgKERvc0ZpbmROZXh0KGhkaXIsICZlcCwgc2l6ZW9mKGVwKSwgJnNyY2hjbnQpID09IE5PX0VSUk9SICYmIHNyY2hjbnQgPiAwKTsKLSAgICB9Ci0KLWV4aXQ6Ci0gICAgcGF0aF9jbGVhbnVwKCZwYXRoKTsKLQotICAgIHJldHVybiBsaXN0OwotI2Vsc2UKK3N0YXRpYyBQeU9iamVjdCAqCitfcG9zaXhfbGlzdGRpcihwYXRoX3QgKnBhdGgsIFB5T2JqZWN0ICpsaXN0KQoreworICAgIFB5T2JqZWN0ICp2OworICAgIERJUiAqZGlycCA9IE5VTEw7CisgICAgc3RydWN0IGRpcmVudCAqZXA7CisgICAgaW50IHJldHVybl9zdHI7IC8qIGlmIGZhbHNlLCByZXR1cm4gYnl0ZXMgKi8KKyNpZmRlZiBIQVZFX0ZET1BFTkRJUgorICAgIGludCBmZCA9IC0xOworI2VuZGlmCiAKICAgICBlcnJubyA9IDA7CiAjaWZkZWYgSEFWRV9GRE9QRU5ESVIKLSAgICBpZiAocGF0aC5mZCAhPSAtMSkgeworICAgIGlmIChwYXRoLT5mZCAhPSAtMSkgewogICAgICAgICAvKiBjbG9zZWRpcigpIGNsb3NlcyB0aGUgRkQsIHNvIHdlIGR1cGxpY2F0ZSBpdCAqLwotICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGZkID0gZHVwKHBhdGguZmQpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotCi0gICAgICAgIGlmIChmZCA9PSAtMSkgewotICAgICAgICAgICAgbGlzdCA9IHBvc2l4X2Vycm9yKCk7Ci0gICAgICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgICAgIH0KKyAgICAgICAgZmQgPSBfUHlfZHVwKHBhdGgtPmZkKTsKKyAgICAgICAgaWYgKGZkID09IC0xKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgcmV0dXJuX3N0ciA9IDE7CiAKQEAgLTM3MTYsMTAgKzM4MDksMTAgQEAKICNlbmRpZgogICAgIHsKICAgICAgICAgY2hhciAqbmFtZTsKLSAgICAgICAgaWYgKHBhdGgubmFycm93KSB7Ci0gICAgICAgICAgICBuYW1lID0gcGF0aC5uYXJyb3c7CisgICAgICAgIGlmIChwYXRoLT5uYXJyb3cpIHsKKyAgICAgICAgICAgIG5hbWUgPSBwYXRoLT5uYXJyb3c7CiAgICAgICAgICAgICAvKiBvbmx5IHJldHVybiBieXRlcyBpZiB0aGV5IHNwZWNpZmllZCBhIGJ5dGVzIG9iamVjdCAqLwotICAgICAgICAgICAgcmV0dXJuX3N0ciA9ICEoUHlCeXRlc19DaGVjayhwYXRoLm9iamVjdCkpOworICAgICAgICAgICAgcmV0dXJuX3N0ciA9ICEoUHlCeXRlc19DaGVjayhwYXRoLT5vYmplY3QpKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIG5hbWUgPSAiLiI7CkBAIC0zNzMyLDE0ICszODI1LDE0IEBACiAgICAgfQogCiAgICAgaWYgKGRpcnAgPT0gTlVMTCkgewotICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcigibGlzdGRpciIsICZwYXRoKTsKKyAgICAgICAgbGlzdCA9IHBhdGhfZXJyb3IocGF0aCk7CiAjaWZkZWYgSEFWRV9GRE9QRU5ESVIKICAgICAgICAgaWYgKGZkICE9IC0xKSB7CiAgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgICAgICB9Ci0jZW5kaWYgLyogSEFWRV9GRE9QRU5ESVIgKi8KKyNlbmRpZgogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogICAgIGlmICgobGlzdCA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpIHsKQEAgLTM3NTUsNyArMzg0OCw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihsaXN0KTsKLSAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcigibGlzdGRpciIsICZwYXRoKTsKKyAgICAgICAgICAgICAgICBsaXN0ID0gcGF0aF9lcnJvcihwYXRoKTsKICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTM3ODUsMTcgKzM4NzgsNDQgQEAKICNpZmRlZiBIQVZFX0ZET1BFTkRJUgogICAgICAgICBpZiAoZmQgPiAtMSkKICAgICAgICAgICAgIHJld2luZGRpcihkaXJwKTsKLSNlbmRpZiAvKiBIQVZFX0ZET1BFTkRJUiAqLworI2VuZGlmCiAgICAgICAgIGNsb3NlZGlyKGRpcnApOwogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KIAotICAgIHBhdGhfY2xlYW51cCgmcGF0aCk7Ci0KICAgICByZXR1cm4gbGlzdDsKK30gIC8qIGVuZCBvZiBfcG9zaXhfbGlzdGRpciAqLworI2VuZGlmICAvKiB3aGljaCBPUyAqLwogCi0jZW5kaWYgLyogd2hpY2ggT1MgKi8KLX0gIC8qIGVuZCBvZiBwb3NpeF9saXN0ZGlyICovCitzdGF0aWMgUHlPYmplY3QgKgorcG9zaXhfbGlzdGRpcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCit7CisgICAgcGF0aF90IHBhdGg7CisgICAgUHlPYmplY3QgKmxpc3QgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJwYXRoIiwgTlVMTH07CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZTsKKworICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAibGlzdGRpciI7CisgICAgcGF0aC5udWxsYWJsZSA9IDE7CisjaWZkZWYgSEFWRV9GRE9QRU5ESVIKKyAgICBwYXRoLmFsbG93X2ZkID0gMTsKKyAgICBwYXRoLmZkID0gLTE7CisjZW5kaWYKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPJjpsaXN0ZGlyIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKEhBVkVfT1BFTkRJUikKKyAgICByZXR1cm5fdmFsdWUgPSBfbGlzdGRpcl93aW5kb3dzX25vX29wZW5kaXIoJnBhdGgsIGxpc3QpOworI2Vsc2UKKyAgICByZXR1cm5fdmFsdWUgPSBfcG9zaXhfbGlzdGRpcigmcGF0aCwgbGlzdCk7CisjZW5kaWYKKyAgICBwYXRoX2NsZWFudXAoJnBhdGgpOworICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CiAKICNpZmRlZiBNU19XSU5ET1dTCiAvKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgYWJzcGF0aCBvbiB3aW4zMiAqLwpAQCAtMzgwMywxNCArMzkyMywxNCBAQAogcG9zaXhfX2dldGZ1bGxwYXRobmFtZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgY29uc3QgY2hhciAqcGF0aDsKLSAgICBjaGFyIG91dGJ1ZltNQVhfUEFUSCoyXTsKKyAgICBjaGFyIG91dGJ1ZltNQVhfUEFUSF07CiAgICAgY2hhciAqdGVtcDsKICAgICBQeU9iamVjdCAqcG87CiAKICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVXw6X2dldGZ1bGxwYXRobmFtZSIsICZwbykpCiAgICAgewogICAgICAgICB3Y2hhcl90ICp3cGF0aDsKLSAgICAgICAgd2NoYXJfdCB3b3V0YnVmW01BWF9QQVRIKjJdLCAqd291dGJ1ZnAgPSB3b3V0YnVmOworICAgICAgICB3Y2hhcl90IHdvdXRidWZbTUFYX1BBVEhdLCAqd291dGJ1ZnAgPSB3b3V0YnVmOwogICAgICAgICB3Y2hhcl90ICp3dGVtcDsKICAgICAgICAgRFdPUkQgcmVzdWx0OwogICAgICAgICBQeU9iamVjdCAqdjsKQEAgLTM4MjIsNyArMzk0Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfQVJSQVlfTEVOR1RIKHdvdXRidWYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvdXRidWYsICZ3dGVtcCk7CiAgICAgICAgIGlmIChyZXN1bHQgPiBQeV9BUlJBWV9MRU5HVEgod291dGJ1ZikpIHsKLSAgICAgICAgICAgIHdvdXRidWZwID0gbWFsbG9jKHJlc3VsdCAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgICAgICB3b3V0YnVmcCA9IFB5TWVtX05ldyh3Y2hhcl90LCByZXN1bHQpOwogICAgICAgICAgICAgaWYgKCF3b3V0YnVmcCkKICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIHJlc3VsdCA9IEdldEZ1bGxQYXRoTmFtZVcod3BhdGgsIHJlc3VsdCwgd291dGJ1ZnAsICZ3dGVtcCk7CkBAIC0zODMyLDcgKzM5NTIsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICB2ID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJHZXRGdWxsUGF0aE5hbWVXIiwgcG8pOwogICAgICAgICBpZiAod291dGJ1ZnAgIT0gd291dGJ1ZikKLSAgICAgICAgICAgIGZyZWUod291dGJ1ZnApOworICAgICAgICAgICAgUHlNZW1fRnJlZSh3b3V0YnVmcCk7CiAgICAgICAgIHJldHVybiB2OwogICAgIH0KICAgICAvKiBEcm9wIHRoZSBhcmd1bWVudCBwYXJzaW5nIGVycm9yIGFzIG5hcnJvdyBzdHJpbmdzCkBAIC0zOTAyLDcgKzQwMjIsNyBAQAogICAgIGlmKCFidWZfc2l6ZSkKICAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yX29iamVjdCgiR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlIiwgcG8pOwogCi0gICAgdGFyZ2V0X3BhdGggPSAod2NoYXJfdCAqKW1hbGxvYygoYnVmX3NpemUrMSkqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICB0YXJnZXRfcGF0aCA9IFB5TWVtX05ldyh3Y2hhcl90LCBidWZfc2l6ZSsxKTsKICAgICBpZighdGFyZ2V0X3BhdGgpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogCkBAIC0zOTE2LDM2ICs0MDM2LDExIEBACiAKICAgICB0YXJnZXRfcGF0aFtyZXN1bHRfbGVuZ3RoXSA9IDA7CiAgICAgcmVzdWx0ID0gUHlVbmljb2RlX0Zyb21XaWRlQ2hhcih0YXJnZXRfcGF0aCwgcmVzdWx0X2xlbmd0aCk7Ci0gICAgZnJlZSh0YXJnZXRfcGF0aCk7CisgICAgUHlNZW1fRnJlZSh0YXJnZXRfcGF0aCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIAogfSAvKiBlbmQgb2YgcG9zaXhfX2dldGZpbmFscGF0aG5hbWUgKi8KIAotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X19nZXRmaWxlaW5mb3JtYXRpb24oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIEhBTkRMRSBoRmlsZTsKLSAgICBCWV9IQU5ETEVfRklMRV9JTkZPUk1BVElPTiBpbmZvOwotICAgIGludCBmZDsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpfZ2V0ZmlsZWluZm9ybWF0aW9uIiwgJmZkKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotCi0gICAgaEZpbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKLSAgICBpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwotCi0gICAgaWYgKCFHZXRGaWxlSW5mb3JtYXRpb25CeUhhbmRsZShoRmlsZSwgJmluZm8pKQotICAgICAgICByZXR1cm4gd2luMzJfZXJyb3IoIl9nZXRmaWxlaW5mb3JtYXRpb24iLCBOVUxMKTsKLQotICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJpaWkiLCBpbmZvLmR3Vm9sdW1lU2VyaWFsTnVtYmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm5GaWxlSW5kZXhIaWdoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLm5GaWxlSW5kZXhMb3cpOwotfQotCiBQeURvY19TVFJWQVIocG9zaXhfX2lzZGlyX19kb2NfXywKICJSZXR1cm4gdHJ1ZSBpZiB0aGUgcGF0aG5hbWUgcmVmZXJzIHRvIGFuIGV4aXN0aW5nIGRpcmVjdG9yeS4iKTsKIApAQCAtMzk4NCw2ICs0MDc5LDU1IEBACiAgICAgZWxzZQogICAgICAgICBQeV9SRVRVUk5fRkFMU0U7CiB9CisKK1B5RG9jX1NUUlZBUihwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWVfX2RvY19fLAorIlJldHVybiB2b2x1bWUgbW91bnQgcG9pbnQgb2YgdGhlIHNwZWNpZmllZCBwYXRoLiIpOworCisvKiBBIGhlbHBlciBmdW5jdGlvbiBmb3IgaXNtb3VudCBvbiB3aW5kb3dzICovCitzdGF0aWMgUHlPYmplY3QgKgorcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeU9iamVjdCAqcG8sICpyZXN1bHQ7CisgICAgd2NoYXJfdCAqcGF0aCwgKm1vdW50cGF0aD1OVUxMOworICAgIHNpemVfdCBidWZsZW47CisgICAgQk9PTCByZXQ7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlV8Ol9nZXR2b2x1bWVwYXRobmFtZSIsICZwbykpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHBhdGggPSBQeVVuaWNvZGVfQXNVbmljb2RlQW5kU2l6ZShwbywgJmJ1Zmxlbik7CisgICAgaWYgKHBhdGggPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnVmbGVuICs9IDE7CisKKyAgICAvKiBWb2x1bWUgcGF0aCBzaG91bGQgYmUgc2hvcnRlciB0aGFuIGVudGlyZSBwYXRoICovCisgICAgYnVmbGVuID0gUHlfTUFYKGJ1ZmxlbiwgTUFYX1BBVEgpOworCisgICAgaWYgKGJ1ZmxlbiA+IERXT1JEX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwgInBhdGggdG9vIGxvbmciKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbW91bnRwYXRoID0gUHlNZW1fTmV3KHdjaGFyX3QsIGJ1Zmxlbik7CisgICAgaWYgKG1vdW50cGF0aCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICByZXQgPSBHZXRWb2x1bWVQYXRoTmFtZVcocGF0aCwgbW91bnRwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TQUZFX0RPV05DQVNUKGJ1Zmxlbiwgc2l6ZV90LCBEV09SRCkpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAoIXJldCkgeworICAgICAgICByZXN1bHQgPSB3aW4zMl9lcnJvcl9vYmplY3QoIl9nZXR2b2x1bWVwYXRobmFtZSIsIHBvKTsKKyAgICAgICAgZ290byBleGl0OworICAgIH0KKyAgICByZXN1bHQgPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKG1vdW50cGF0aCwgd2NzbGVuKG1vdW50cGF0aCkpOworCitleGl0OgorICAgIFB5TWVtX0ZyZWUobW91bnRwYXRoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorLyogZW5kIG9mIHBvc2l4X19nZXR2b2x1bWVwYXRobmFtZSAqLworCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiBQeURvY19TVFJWQVIocG9zaXhfbWtkaXJfX2RvY19fLApAQCAtNDAwOCw2ICs0MTUyLDcgQEAKICAgICBpbnQgcmVzdWx0OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJta2RpciI7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8aSRPJjpta2RpciIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsICZtb2RlLAogI2lmZGVmIEhBVkVfTUtESVJBVApAQCAtNDAyNyw3ICs0MTcyLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KCJta2RpciIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZQpAQCAtNDA0NCw3ICs0MTg5LDcgQEAKICNlbmRpZgogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlc3VsdCA8IDApIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigibWtkaXIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC00MTYyLDYgKzQzMDcsOCBAQAogCiAgICAgbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzcmMpKTsKICAgICBtZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKGRzdCkpOworICAgIHNyYy5mdW5jdGlvbl9uYW1lID0gZnVuY3Rpb25fbmFtZTsKKyAgICBkc3QuZnVuY3Rpb25fbmFtZSA9IGZ1bmN0aW9uX25hbWU7CiAgICAgc3RyY3B5KGZvcm1hdCwgIk8mTyZ8JE8mTyY6Iik7CiAgICAgc3RyY2F0KGZvcm1hdCwgZnVuY3Rpb25fbmFtZSk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCBmb3JtYXQsIGtleXdvcmRzLApAQCAtNDE5NSw3ICs0MzQyLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKCFyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gd2luMzJfZXJyb3Jfb2JqZWN0KGZ1bmN0aW9uX25hbWUsIGRzdC5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNDIxMCw3ICs0MzU3LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKGZ1bmN0aW9uX25hbWUsICZkc3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KICNlbmRpZgpAQCAtNDI3NCw2ICs0NDIxLDcgQEAKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAicm1kaXIiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjpybWRpciIsIGtleXdvcmRzLAogICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogI2lmZGVmIEhBVkVfVU5MSU5LQVQKQEAgLTQzMDIsNyArNDQ1MCw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigicm1kaXIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC00NDMwLDYgKzQ1NzgsNyBAQAogICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJ1bmxpbmsiOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8mfCRPJjp1bmxpbmsiLCBrZXl3b3JkcywKICAgICAgICAgICAgIHBhdGhfY29udmVydGVyLCAmcGF0aCwKICNpZmRlZiBIQVZFX1VOTElOS0FUCkBAIC00NDU4LDcgKzQ2MDcsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICBpZiAocmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoInVubGluayIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTQ1NDYsNyArNDY5NSw3IEBACiAKIAogUHlEb2NfU1RSVkFSKHBvc2l4X3V0aW1lX19kb2NfXywKLSJ1dGltZShwYXRoLCB0aW1lcz1Ob25lLCAqLCBucz1Ob25lLCBkaXJfZmQ9Tm9uZSwgZm9sbG93X3N5bWxpbmtzPVRydWUpXG5cCisidXRpbWUocGF0aCwgdGltZXM9Tm9uZSwgKlssIG5zXSwgZGlyX2ZkPU5vbmUsIGZvbGxvd19zeW1saW5rcz1UcnVlKVxuXAogU2V0IHRoZSBhY2Nlc3MgYW5kIG1vZGlmaWVkIHRpbWUgb2YgcGF0aC5cblwKIFxuXAogcGF0aCBtYXkgYWx3YXlzIGJlIHNwZWNpZmllZCBhcyBhIHN0cmluZy5cblwKQEAgLTQ1NTUsMTAgKzQ3MDQsMTAgQEAKIFxuXAogSWYgdGltZXMgaXMgbm90IE5vbmUsIGl0IG11c3QgYmUgYSB0dXBsZSAoYXRpbWUsIG10aW1lKTtcblwKICAgICBhdGltZSBhbmQgbXRpbWUgc2hvdWxkIGJlIGV4cHJlc3NlZCBhcyBmbG9hdCBzZWNvbmRzIHNpbmNlIHRoZSBlcG9jaC5cblwKLUlmIG5zIGlzIG5vdCBOb25lLCBpdCBtdXN0IGJlIGEgdHVwbGUgKGF0aW1lX25zLCBtdGltZV9ucyk7XG5cCitJZiBucyBpcyBzcGVjaWZpZWQsIGl0IG11c3QgYmUgYSB0dXBsZSAoYXRpbWVfbnMsIG10aW1lX25zKTtcblwKICAgICBhdGltZV9ucyBhbmQgbXRpbWVfbnMgc2hvdWxkIGJlIGV4cHJlc3NlZCBhcyBpbnRlZ2VyIG5hbm9zZWNvbmRzXG5cCiAgICAgc2luY2UgdGhlIGVwb2NoLlxuXAotSWYgYm90aCB0aW1lcyBhbmQgbnMgYXJlIE5vbmUsIHV0aW1lIHVzZXMgdGhlIGN1cnJlbnQgdGltZS5cblwKK0lmIHRpbWVzIGlzIE5vbmUgYW5kIG5zIGlzIHVuc3BlY2lmaWVkLCB1dGltZSB1c2VzIHRoZSBjdXJyZW50IHRpbWUuXG5cCiBTcGVjaWZ5aW5nIHR1cGxlcyBmb3IgYm90aCB0aW1lcyBhbmQgbnMgaXMgYW4gZXJyb3IuXG5cCiBcblwKIElmIGRpcl9mZCBpcyBub3QgTm9uZSwgaXQgc2hvdWxkIGJlIGEgZmlsZSBkZXNjcmlwdG9yIG9wZW4gdG8gYSBkaXJlY3RvcnksXG5cCkBAIC00NTgwLDY0ICs0NzI5LDYyIEBACiB9IHV0aW1lX3Q7CiAKIC8qCi0gKiB0aGVzZSBtYWNyb3MgYXNzdW1lIHRoYXQgInV0aW1lIiBpcyBhIHBvaW50ZXIgdG8gYSB1dGltZV90CisgKiB0aGVzZSBtYWNyb3MgYXNzdW1lIHRoYXQgInV0IiBpcyBhIHBvaW50ZXIgdG8gYSB1dGltZV90CiAgKiB0aGV5IGFsc28gaW50ZW50aW9uYWxseSBsZWFrIHRoZSBkZWNsYXJhdGlvbiBvZiBhIHBvaW50ZXIgbmFtZWQgInRpbWUiCiAgKi8KICNkZWZpbmUgVVRJTUVfVE9fVElNRVNQRUMgXAogICAgIHN0cnVjdCB0aW1lc3BlYyB0c1syXTsgXAogICAgIHN0cnVjdCB0aW1lc3BlYyAqdGltZTsgXAotICAgIGlmICh1dGltZS0+bm93KSBcCisgICAgaWYgKHV0LT5ub3cpIFwKICAgICAgICAgdGltZSA9IE5VTEw7IFwKICAgICBlbHNlIHsgXAotICAgICAgICB0c1swXS50dl9zZWMgPSB1dGltZS0+YXRpbWVfczsgXAotICAgICAgICB0c1swXS50dl9uc2VjID0gdXRpbWUtPmF0aW1lX25zOyBcCi0gICAgICAgIHRzWzFdLnR2X3NlYyA9IHV0aW1lLT5tdGltZV9zOyBcCi0gICAgICAgIHRzWzFdLnR2X25zZWMgPSB1dGltZS0+bXRpbWVfbnM7IFwKKyAgICAgICAgdHNbMF0udHZfc2VjID0gdXQtPmF0aW1lX3M7IFwKKyAgICAgICAgdHNbMF0udHZfbnNlYyA9IHV0LT5hdGltZV9uczsgXAorICAgICAgICB0c1sxXS50dl9zZWMgPSB1dC0+bXRpbWVfczsgXAorICAgICAgICB0c1sxXS50dl9uc2VjID0gdXQtPm10aW1lX25zOyBcCiAgICAgICAgIHRpbWUgPSB0czsgXAogICAgIH0gXAogCiAjZGVmaW5lIFVUSU1FX1RPX1RJTUVWQUwgXAogICAgIHN0cnVjdCB0aW1ldmFsIHR2WzJdOyBcCiAgICAgc3RydWN0IHRpbWV2YWwgKnRpbWU7IFwKLSAgICBpZiAodXRpbWUtPm5vdykgXAorICAgIGlmICh1dC0+bm93KSBcCiAgICAgICAgIHRpbWUgPSBOVUxMOyBcCiAgICAgZWxzZSB7IFwKLSAgICAgICAgdHZbMF0udHZfc2VjID0gdXRpbWUtPmF0aW1lX3M7IFwKLSAgICAgICAgdHZbMF0udHZfdXNlYyA9IHV0aW1lLT5hdGltZV9ucyAvIDEwMDA7IFwKLSAgICAgICAgdHZbMV0udHZfc2VjID0gdXRpbWUtPm10aW1lX3M7IFwKLSAgICAgICAgdHZbMV0udHZfdXNlYyA9IHV0aW1lLT5tdGltZV9ucyAvIDEwMDA7IFwKKyAgICAgICAgdHZbMF0udHZfc2VjID0gdXQtPmF0aW1lX3M7IFwKKyAgICAgICAgdHZbMF0udHZfdXNlYyA9IHV0LT5hdGltZV9ucyAvIDEwMDA7IFwKKyAgICAgICAgdHZbMV0udHZfc2VjID0gdXQtPm10aW1lX3M7IFwKKyAgICAgICAgdHZbMV0udHZfdXNlYyA9IHV0LT5tdGltZV9ucyAvIDEwMDA7IFwKICAgICAgICAgdGltZSA9IHR2OyBcCiAgICAgfSBcCiAKICNkZWZpbmUgVVRJTUVfVE9fVVRJTUJVRiBcCi0gICAgc3RydWN0IHV0aW1idWYgdVsyXTsgXAorICAgIHN0cnVjdCB1dGltYnVmIHU7IFwKICAgICBzdHJ1Y3QgdXRpbWJ1ZiAqdGltZTsgXAotICAgIGlmICh1dGltZS0+bm93KSBcCisgICAgaWYgKHV0LT5ub3cpIFwKICAgICAgICAgdGltZSA9IE5VTEw7IFwKICAgICBlbHNlIHsgXAotICAgICAgICB1LmFjdGltZSA9IHV0aW1lLT5hdGltZV9zOyBcCi0gICAgICAgIHUubW9kdGltZSA9IHV0aW1lLT5tdGltZV9zOyBcCi0gICAgICAgIHRpbWUgPSB1OyBcCisgICAgICAgIHUuYWN0aW1lID0gdXQtPmF0aW1lX3M7IFwKKyAgICAgICAgdS5tb2R0aW1lID0gdXQtPm10aW1lX3M7IFwKKyAgICAgICAgdGltZSA9ICZ1OyBcCiAgICAgfQogCiAjZGVmaW5lIFVUSU1FX1RPX1RJTUVfVCBcCiAgICAgdGltZV90IHRpbWV0WzJdOyBcCi0gICAgc3RydWN0IHRpbWV0IHRpbWU7IFwKLSAgICBpZiAodXRpbWUtPm5vdykgXAorICAgIHRpbWVfdCAqdGltZTsgXAorICAgIGlmICh1dC0+bm93KSBcCiAgICAgICAgIHRpbWUgPSBOVUxMOyBcCiAgICAgZWxzZSB7IFwKLSAgICAgICAgdGltZXRbMF0gPSB1dGltZS0+YXRpbWVfczsgXAotICAgICAgICB0aW1ldFsxXSA9IHV0aW1lLT5tdGltZV9zOyBcCi0gICAgICAgIHRpbWUgPSAmdGltZXQ7IFwKKyAgICAgICAgdGltZXRbMF0gPSB1dC0+YXRpbWVfczsgXAorICAgICAgICB0aW1ldFsxXSA9IHV0LT5tdGltZV9zOyBcCisgICAgICAgIHRpbWUgPSB0aW1ldDsgXAogICAgIH0gXAogCiAKLSNkZWZpbmUgVVRJTUVfSEFWRV9ESVJfRkQgKGRlZmluZWQoSEFWRV9GVVRJTUVTQVQpIHx8IGRlZmluZWQoSEFWRV9VVElNRU5TQVQpKQotCi0jaWYgVVRJTUVfSEFWRV9ESVJfRkQKKyNpZiBkZWZpbmVkKEhBVkVfRlVUSU1FU0FUKSB8fCBkZWZpbmVkKEhBVkVfVVRJTUVOU0FUKQogCiBzdGF0aWMgaW50Ci11dGltZV9kaXJfZmQodXRpbWVfdCAqdXRpbWUsIGludCBkaXJfZmQsIGNoYXIgKnBhdGgsIGludCBmb2xsb3dfc3ltbGlua3MpCit1dGltZV9kaXJfZmQodXRpbWVfdCAqdXQsIGludCBkaXJfZmQsIGNoYXIgKnBhdGgsIGludCBmb2xsb3dfc3ltbGlua3MpCiB7CiAjaWZkZWYgSEFWRV9VVElNRU5TQVQKICAgICBpbnQgZmxhZ3MgPSBmb2xsb3dfc3ltbGlua3MgPyAwIDogQVRfU1lNTElOS19OT0ZPTExPVzsKQEAgLTQ2NTcsMTIgKzQ4MDQsMTAgQEAKIAogI2VuZGlmCiAKLSNkZWZpbmUgVVRJTUVfSEFWRV9GRCAoZGVmaW5lZChIQVZFX0ZVVElNRVMpIHx8IGRlZmluZWQoSEFWRV9GVVRJTUVOUykpCi0KLSNpZiBVVElNRV9IQVZFX0ZECisjaWYgZGVmaW5lZChIQVZFX0ZVVElNRVMpIHx8IGRlZmluZWQoSEFWRV9GVVRJTUVOUykKIAogc3RhdGljIGludAotdXRpbWVfZmQodXRpbWVfdCAqdXRpbWUsIGludCBmZCkKK3V0aW1lX2ZkKHV0aW1lX3QgKnV0LCBpbnQgZmQpCiB7CiAjaWZkZWYgSEFWRV9GVVRJTUVOUwogICAgIFVUSU1FX1RPX1RJTUVTUEVDOwpAQCAtNDY4Miw3ICs0ODI3LDcgQEAKICNpZiBVVElNRV9IQVZFX05PRk9MTE9XX1NZTUxJTktTCiAKIHN0YXRpYyBpbnQKLXV0aW1lX25vZm9sbG93X3N5bWxpbmtzKHV0aW1lX3QgKnV0aW1lLCBjaGFyICpwYXRoKQordXRpbWVfbm9mb2xsb3dfc3ltbGlua3ModXRpbWVfdCAqdXQsIGNoYXIgKnBhdGgpCiB7CiAjaWZkZWYgSEFWRV9VVElNRU5TQVQKICAgICBVVElNRV9UT19USU1FU1BFQzsKQEAgLTQ2OTgsNyArNDg0Myw3IEBACiAjaWZuZGVmIE1TX1dJTkRPV1MKIAogc3RhdGljIGludAotdXRpbWVfZGVmYXVsdCh1dGltZV90ICp1dGltZSwgY2hhciAqcGF0aCkKK3V0aW1lX2RlZmF1bHQodXRpbWVfdCAqdXQsIGNoYXIgKnBhdGgpCiB7CiAjaWZkZWYgSEFWRV9VVElNRU5TQVQKICAgICBVVElNRV9UT19USU1FU1BFQzsKQEAgLTQ3NjEsMTUgKzQ5MDYsMTYgQEAKICAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidXRpbWUiOwogICAgIG1lbXNldCgmdXRpbWUsIDAsIHNpemVvZih1dGltZV90KSk7Ci0jaWYgVVRJTUVfSEFWRV9GRAorI2lmIGRlZmluZWQoSEFWRV9GVVRJTUVTKSB8fCBkZWZpbmVkKEhBVkVfRlVUSU1FTlMpCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCiAgICAgICAgICAgICAiTyZ8TyRPTyZwOnV0aW1lIiwga2V5d29yZHMsCiAgICAgICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCiAgICAgICAgICAgICAmdGltZXMsICZucywKLSNpZiBVVElNRV9IQVZFX0RJUl9GRAorI2lmIGRlZmluZWQoSEFWRV9GVVRJTUVTQVQpIHx8IGRlZmluZWQoSEFWRV9VVElNRU5TQVQpCiAgICAgICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkLAogI2Vsc2UKICAgICAgICAgICAgIGRpcl9mZF91bmF2YWlsYWJsZSwgJmRpcl9mZCwKQEAgLTQ3OTYsOSArNDk0Miw5IEBACiAgICAgICAgIH0KICAgICAgICAgdXRpbWUubm93ID0gMDsKICAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhQeVR1cGxlX0dFVF9JVEVNKHRpbWVzLCAwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYV9zZWMsICZhX25zZWMpID09IC0xIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFfc2VjLCAmYV9uc2VjLCBfUHlUaW1lX1JPVU5EX0RPV04pID09IC0xIHx8CiAgICAgICAgICAgICBfUHlUaW1lX09iamVjdFRvVGltZXNwZWMoUHlUdXBsZV9HRVRfSVRFTSh0aW1lcywgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1fc2VjLCAmbV9uc2VjKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtX3NlYywgJm1fbnNlYywgX1B5VGltZV9ST1VORF9ET1dOKSA9PSAtMSkgewogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgICAgIHV0aW1lLmF0aW1lX3MgPSBhX3NlYzsKQEAgLTQ4NTYsMTggKzUwMDIsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFX0ZMQUdfQkFDS1VQX1NFTUFOVElDUywgTlVMTCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICBpZiAoaEZpbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgd2luMzJfZXJyb3Jfb2JqZWN0KCJ1dGltZSIsIHBhdGgub2JqZWN0KTsKKyAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKICAgICBpZiAodXRpbWUubm93KSB7Ci0gICAgICAgIFNZU1RFTVRJTUUgbm93OwotICAgICAgICBHZXRTeXN0ZW1UaW1lKCZub3cpOwotICAgICAgICBpZiAoIVN5c3RlbVRpbWVUb0ZpbGVUaW1lKCZub3csICZtdGltZSkgfHwKLSAgICAgICAgICAgICFTeXN0ZW1UaW1lVG9GaWxlVGltZSgmbm93LCAmYXRpbWUpKSB7Ci0gICAgICAgICAgICB3aW4zMl9lcnJvcigidXRpbWUiLCBOVUxMKTsKLSAgICAgICAgICAgIGdvdG8gZXhpdDsKLSAgICAgICAgfQorICAgICAgICBHZXRTeXN0ZW1UaW1lQXNGaWxlVGltZSgmbXRpbWUpOworICAgICAgICBhdGltZSA9IG10aW1lOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgdGltZV90X3RvX0ZJTEVfVElNRSh1dGltZS5hdGltZV9zLCB1dGltZS5hdGltZV9ucywgJmF0aW1lKTsKQEAgLTQ4NzgsNyArNTAxOSw3IEBACiAgICAgICAgICAgIGFzIHRoYXQgbWF5IGNvbmZ1c2UgdGhlIHVzZXIgaW50byBiZWxpZXZpbmcgdGhhdAogICAgICAgICAgICBzb21ldGhpbmcgaXMgd3Jvbmcgd2l0aCB0aGUgZmlsZSwgd2hlbiBpdCBhbHNvCiAgICAgICAgICAgIGNvdWxkIGJlIHRoZSB0aW1lIHN0YW1wIHRoYXQgZ2l2ZXMgYSBwcm9ibGVtLiAqLwotICAgICAgICB3aW4zMl9lcnJvcigidXRpbWUiLCBOVUxMKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAjZWxzZSAvKiBNU19XSU5ET1dTICovCkBAIC00ODkwLDEzICs1MDMxLDEzIEBACiAgICAgZWxzZQogI2VuZGlmCiAKLSNpZiBVVElNRV9IQVZFX0RJUl9GRAorI2lmIGRlZmluZWQoSEFWRV9GVVRJTUVTQVQpIHx8IGRlZmluZWQoSEFWRV9VVElNRU5TQVQpCiAgICAgaWYgKChkaXJfZmQgIT0gREVGQVVMVF9ESVJfRkQpIHx8ICghZm9sbG93X3N5bWxpbmtzKSkKICAgICAgICAgcmVzdWx0ID0gdXRpbWVfZGlyX2ZkKCZ1dGltZSwgZGlyX2ZkLCBwYXRoLm5hcnJvdywgZm9sbG93X3N5bWxpbmtzKTsKICAgICBlbHNlCiAjZW5kaWYKIAotI2lmIFVUSU1FX0hBVkVfRkQKKyNpZiBkZWZpbmVkKEhBVkVfRlVUSU1FUykgfHwgZGVmaW5lZChIQVZFX0ZVVElNRU5TKQogICAgIGlmIChwYXRoLmZkICE9IC0xKQogICAgICAgICByZXN1bHQgPSB1dGltZV9mZCgmdXRpbWUsIHBhdGguZmQpOwogICAgIGVsc2UKQEAgLTQ5NjEsOCArNTEwMiwxMCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRShieXRlcyk7CiAgICAgKm91dCA9IFB5TWVtX01hbGxvYyhzaXplKzEpOwotICAgIGlmICghKm91dCkKKyAgICBpZiAoISpvdXQpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIG1lbWNweSgqb3V0LCBQeUJ5dGVzX0FzU3RyaW5nKGJ5dGVzKSwgc2l6ZSsxKTsKICAgICBQeV9ERUNSRUYoYnl0ZXMpOwogICAgIHJldHVybiAxOwpAQCAtNDk5MCw4ICs1MTMzLDEwIEBACiAgICAgfQogICAgIGVudmMgPSAwOwogICAgIGtleXMgPSBQeU1hcHBpbmdfS2V5cyhlbnYpOworICAgIGlmICgha2V5cykKKyAgICAgICAgZ290byBlcnJvcjsKICAgICB2YWxzID0gUHlNYXBwaW5nX1ZhbHVlcyhlbnYpOwotICAgIGlmICgha2V5cyB8fCAhdmFscykKKyAgICBpZiAoIXZhbHMpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKCFQeUxpc3RfQ2hlY2soa2V5cykgfHwgIVB5TGlzdF9DaGVjayh2YWxzKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtNTAxMiwxMCArNTE1Nyw2IEBACiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICAvKiBPbWl0IFBzZXVkby1FbnYgVmFycyB0aGF0IFdvdWxkIENvbmZ1c2UgUHJvZ3JhbXMgaWYgUGFzc2VkIE9uICovCi0gICAgICAgIGlmIChzdHJpY21wKGssICJCRUdJTkxJQlBBVEgiKSAhPSAwICYmIHN0cmljbXAoaywgIkVORExJQlBBVEgiKSAhPSAwKSB7Ci0jZW5kaWYKICAgICAgICAgayA9IFB5Qnl0ZXNfQXNTdHJpbmcoa2V5Mik7CiAgICAgICAgIHYgPSBQeUJ5dGVzX0FzU3RyaW5nKHZhbDIpOwogICAgICAgICBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGtleTIpICsgUHlCeXRlc19HRVRfU0laRSh2YWwyKSArIDI7CkBAIC01MDMxLDkgKzUxNzIsNiBAQAogICAgICAgICBlbnZsaXN0W2VudmMrK10gPSBwOwogICAgICAgICBQeV9ERUNSRUYoa2V5Mik7CiAgICAgICAgIFB5X0RFQ1JFRih2YWwyKTsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgICAgICB9Ci0jZW5kaWYKICAgICB9CiAgICAgUHlfREVDUkVGKHZhbHMpOwogICAgIFB5X0RFQ1JFRihrZXlzKTsKQEAgLTUxNTksNiArNTI5Nyw3IEBACiAgICAgICAgbGlrZSBwb3NpeC5lbnZpcm9uLiAqLwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJleGVjdmUiOwogI2lmZGVmIEhBVkVfRkVYRUNWRQogICAgIHBhdGguYWxsb3dfZmQgPSAxOwogI2VuZGlmCkBAIC01MTk4LDcgKzUzMzcsNyBAQAogCiAgICAgLyogSWYgd2UgZ2V0IGhlcmUgaXQncyBkZWZpbml0ZWx5IGFuIGVycm9yICovCiAKLSAgICBwYXRoX3Bvc2l4X2Vycm9yKCJleGVjdmUiLCAmcGF0aCk7CisgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAKICAgICB3aGlsZSAoLS1lbnZjID49IDApCiAgICAgICAgIFB5TWVtX0RFTChlbnZsaXN0W2VudmNdKTsKQEAgLTUyNzQsMTggKzU0MTMsMTIgQEAKICAgICB9CiAgICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc3Bhd252YWwgPSBzcGF3bnYobW9kZSwgcGF0aCwgYXJndmxpc3QpOwotICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZWxzZQogICAgIGlmIChtb2RlID09IF9PTERfUF9PVkVSTEFZKQogICAgICAgICBtb2RlID0gX1BfT1ZFUkxBWTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBzcGF3bnZhbCA9IF9zcGF3bnYobW9kZSwgcGF0aCwgYXJndmxpc3QpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCi0jZW5kaWYKIAogICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBhcmdjKTsKICAgICBQeV9ERUNSRUYob3BhdGgpOwpAQCAtNTI5MywxMSArNTQyNiw3IEBACiAgICAgaWYgKHNwYXdudmFsID09IC0xKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICAgICBlbHNlCi0jaWYgU0laRU9GX0xPTkcgPT0gU0laRU9GX1ZPSURfUAotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgibCIsIChsb25nKSBzcGF3bnZhbCk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTCIsIChQWV9MT05HX0xPTkcpIHNwYXdudmFsKTsKLSNlbmRpZgorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSLCBzcGF3bnZhbCk7CiB9CiAKIApAQCAtNTM3MywyNyArNTUwMiwxNyBAQAogICAgIGlmIChlbnZsaXN0ID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmFpbF8xOwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgc3Bhd252YWwgPSBzcGF3bnZlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKLSAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotI2Vsc2UKICAgICBpZiAobW9kZSA9PSBfT0xEX1BfT1ZFUkxBWSkKICAgICAgICAgbW9kZSA9IF9QX09WRVJMQVk7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgc3Bhd252YWwgPSBfc3Bhd252ZShtb2RlLCBwYXRoLCBhcmd2bGlzdCwgZW52bGlzdCk7CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSNlbmRpZgogCiAgICAgaWYgKHNwYXdudmFsID09IC0xKQogICAgICAgICAodm9pZCkgcG9zaXhfZXJyb3IoKTsKICAgICBlbHNlCi0jaWYgU0laRU9GX0xPTkcgPT0gU0laRU9GX1ZPSURfUAotICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLSNlbHNlCi0gICAgICAgIHJlcyA9IFB5X0J1aWxkVmFsdWUoIkwiLCAoUFlfTE9OR19MT05HKSBzcGF3bnZhbCk7Ci0jZW5kaWYKKyAgICAgICAgcmVzID0gUHlfQnVpbGRWYWx1ZShfUHlfUEFSU0VfSU5UUFRSLCBzcGF3bnZhbCk7CiAKICAgICB3aGlsZSAoLS1lbnZjID49IDApCiAgICAgICAgIFB5TWVtX0RFTChlbnZsaXN0W2VudmNdKTsKQEAgLTU0MDUsMTgzICs1NTI0LDYgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKiBPUy8yIHN1cHBvcnRzIHNwYXdudnAgJiBzcGF3bnZwZSBuYXRpdmVseSAqLwotI2lmIGRlZmluZWQoUFlPU19PUzIpCi1QeURvY19TVFJWQVIocG9zaXhfc3Bhd252cF9fZG9jX18sCi0ic3Bhd252cChtb2RlLCBmaWxlLCBhcmdzKVxuXG5cCi1FeGVjdXRlIHRoZSBwcm9ncmFtICdmaWxlJyBpbiBhIG5ldyBwcm9jZXNzLCB1c2luZyB0aGUgZW52aXJvbm1lbnRcblwKLXNlYXJjaCBwYXRoIHRvIGZpbmQgdGhlIGZpbGUuXG5cCi1cblwKLSAgICBtb2RlOiBtb2RlIG9mIHByb2Nlc3MgY3JlYXRpb25cblwKLSAgICBmaWxlOiBleGVjdXRhYmxlIGZpbGUgbmFtZVxuXAotICAgIGFyZ3M6IHR1cGxlIG9yIGxpc3Qgb2Ygc3RyaW5ncyIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3Bhd252cChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCi17Ci0gICAgUHlPYmplY3QgKm9wYXRoOwotICAgIGNoYXIgKnBhdGg7Ci0gICAgUHlPYmplY3QgKmFyZ3Y7Ci0gICAgY2hhciAqKmFyZ3ZsaXN0OwotICAgIGludCBtb2RlLCBpLCBhcmdjOwotICAgIFB5X2ludHB0cl90IHNwYXdudmFsOwotICAgIFB5T2JqZWN0ICooKmdldGl0ZW0pKFB5T2JqZWN0ICosIFB5X3NzaXplX3QpOwotCi0gICAgLyogc3Bhd252cCBoYXMgdGhyZWUgYXJndW1lbnRzOiAobW9kZSwgcGF0aCwgYXJndiksIHdoZXJlCi0gICAgICAgYXJndiBpcyBhIGxpc3Qgb3IgdHVwbGUgb2Ygc3RyaW5ncy4gKi8KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU8mTzpzcGF3bnZwIiwgJm1vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm9wYXRoLCAmYXJndikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHBhdGggPSBQeUJ5dGVzX0FzU3RyaW5nKG9wYXRoKTsKLSAgICBpZiAoUHlMaXN0X0NoZWNrKGFyZ3YpKSB7Ci0gICAgICAgIGFyZ2MgPSBQeUxpc3RfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5TGlzdF9HZXRJdGVtOwotICAgIH0KLSAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKGFyZ3YpKSB7Ci0gICAgICAgIGFyZ2MgPSBQeVR1cGxlX1NpemUoYXJndik7Ci0gICAgICAgIGdldGl0ZW0gPSBQeVR1cGxlX0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNwYXdudnAoKSBhcmcgMiBtdXN0IGJlIGEgdHVwbGUgb3IgbGlzdCIpOwotICAgICAgICBQeV9ERUNSRUYob3BhdGgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBhcmd2bGlzdCA9IFB5TWVtX05FVyhjaGFyICosIGFyZ2MrMSk7Ci0gICAgaWYgKGFyZ3ZsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgaWYgKCFmc2NvbnZlcnRfc3RyZHVwKCgqZ2V0aXRlbSkoYXJndiwgaSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYXJndmxpc3RbaV0pKSB7Ci0gICAgICAgICAgICBmcmVlX3N0cmluZ19hcnJheShhcmd2bGlzdCwgaSk7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoCi0gICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJzcGF3bnZwKCkgYXJnIDIgbXVzdCBjb250YWluIG9ubHkgc3RyaW5ncyIpOwotICAgICAgICAgICAgUHlfREVDUkVGKG9wYXRoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIGFyZ3ZsaXN0W2FyZ2NdID0gTlVMTDsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHNwYXdudmFsID0gc3Bhd252cChtb2RlLCBwYXRoLCBhcmd2bGlzdCk7Ci0jZWxzZQotICAgIHNwYXdudmFsID0gX3NwYXdudnAobW9kZSwgcGF0aCwgYXJndmxpc3QpOwotI2VuZGlmCi0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBhcmdjKTsKLSAgICBQeV9ERUNSRUYob3BhdGgpOwotCi0gICAgaWYgKHNwYXdudmFsID09IC0xKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLX0KLQotCi1QeURvY19TVFJWQVIocG9zaXhfc3Bhd252cGVfX2RvY19fLAotInNwYXdudnBlKG1vZGUsIGZpbGUsIGFyZ3MsIGVudilcblxuXAotRXhlY3V0ZSB0aGUgcHJvZ3JhbSAnZmlsZScgaW4gYSBuZXcgcHJvY2VzcywgdXNpbmcgdGhlIGVudmlyb25tZW50XG5cCi1zZWFyY2ggcGF0aCB0byBmaW5kIHRoZSBmaWxlLlxuXAotXG5cCi0gICAgbW9kZTogbW9kZSBvZiBwcm9jZXNzIGNyZWF0aW9uXG5cCi0gICAgZmlsZTogZXhlY3V0YWJsZSBmaWxlIG5hbWVcblwKLSAgICBhcmdzOiB0dXBsZSBvciBsaXN0IG9mIGFyZ3VtZW50c1xuXAotICAgIGVudjogZGljdGlvbmFyeSBvZiBzdHJpbmdzIG1hcHBpbmcgdG8gc3RyaW5ncyIpOwotCi1zdGF0aWMgUHlPYmplY3QgKgotcG9zaXhfc3Bhd252cGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQotewotICAgIFB5T2JqZWN0ICpvcGF0aDsKLSAgICBjaGFyICpwYXRoOwotICAgIFB5T2JqZWN0ICphcmd2LCAqZW52OwotICAgIGNoYXIgKiphcmd2bGlzdDsKLSAgICBjaGFyICoqZW52bGlzdDsKLSAgICBQeU9iamVjdCAqcmVzPU5VTEw7Ci0gICAgaW50IG1vZGU7Ci0gICAgUHlfc3NpemVfdCBhcmdjLCBpLCBlbnZjOwotICAgIFB5X2ludHB0cl90IHNwYXdudmFsOwotICAgIFB5T2JqZWN0ICooKmdldGl0ZW0pKFB5T2JqZWN0ICosIFB5X3NzaXplX3QpOwotICAgIGludCBsYXN0YXJnID0gMDsKLQotICAgIC8qIHNwYXdudnBlIGhhcyBmb3VyIGFyZ3VtZW50czogKG1vZGUsIHBhdGgsIGFyZ3YsIGVudiksIHdoZXJlCi0gICAgICAgYXJndiBpcyBhIGxpc3Qgb3IgdHVwbGUgb2Ygc3RyaW5ncyBhbmQgZW52IGlzIGEgZGljdGlvbmFyeQotICAgICAgIGxpa2UgcG9zaXguZW52aXJvbi4gKi8KLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaWV0T086c3Bhd252cGUiLCAmbW9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ZTQ29udmVydGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhdGgsICZhcmd2LCAmZW52KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcGF0aCA9IFB5Qnl0ZXNfQXNTdHJpbmcob3BhdGgpOwotICAgIGlmIChQeUxpc3RfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5TGlzdF9TaXplKGFyZ3YpOwotICAgICAgICBnZXRpdGVtID0gUHlMaXN0X0dldEl0ZW07Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2soYXJndikpIHsKLSAgICAgICAgYXJnYyA9IFB5VHVwbGVfU2l6ZShhcmd2KTsKLSAgICAgICAgZ2V0aXRlbSA9IFB5VHVwbGVfR2V0SXRlbTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAic3Bhd252cGUoKSBhcmcgMiBtdXN0IGJlIGEgdHVwbGUgb3IgbGlzdCIpOwotICAgICAgICBnb3RvIGZhaWxfMDsKLSAgICB9Ci0gICAgaWYgKCFQeU1hcHBpbmdfQ2hlY2soZW52KSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNwYXdudnBlKCkgYXJnIDMgbXVzdCBiZSBhIG1hcHBpbmcgb2JqZWN0Iik7Ci0gICAgICAgIGdvdG8gZmFpbF8wOwotICAgIH0KLQotICAgIGFyZ3ZsaXN0ID0gUHlNZW1fTkVXKGNoYXIgKiwgYXJnYysxKTsKLSAgICBpZiAoYXJndmxpc3QgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICBnb3RvIGZhaWxfMDsKLSAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotICAgICAgICBpZiAoIWZzY29udmVydF9zdHJkdXAoKCpnZXRpdGVtKShhcmd2LCBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhcmd2bGlzdFtpXSkpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGxhc3RhcmcgPSBpOwotICAgICAgICAgICAgZ290byBmYWlsXzE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbGFzdGFyZyA9IGFyZ2M7Ci0gICAgYXJndmxpc3RbYXJnY10gPSBOVUxMOwotCi0gICAgZW52bGlzdCA9IHBhcnNlX2Vudmxpc3QoZW52LCAmZW52Yyk7Ci0gICAgaWYgKGVudmxpc3QgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsXzE7Ci0KLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBzcGF3bnZhbCA9IHNwYXdudnBlKG1vZGUsIHBhdGgsIGFyZ3ZsaXN0LCBlbnZsaXN0KTsKLSNlbHNlCi0gICAgc3Bhd252YWwgPSBfc3Bhd252cGUobW9kZSwgcGF0aCwgYXJndmxpc3QsIGVudmxpc3QpOwotI2VuZGlmCi0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmIChzcGF3bnZhbCA9PSAtMSkKLSAgICAgICAgKHZvaWQpIHBvc2l4X2Vycm9yKCk7Ci0gICAgZWxzZQotICAgICAgICByZXMgPSBQeV9CdWlsZFZhbHVlKCJsIiwgKGxvbmcpIHNwYXdudmFsKTsKLQotICAgIHdoaWxlICgtLWVudmMgPj0gMCkKLSAgICAgICAgUHlNZW1fREVMKGVudmxpc3RbZW52Y10pOwotICAgIFB5TWVtX0RFTChlbnZsaXN0KTsKLSAgZmFpbF8xOgotICAgIGZyZWVfc3RyaW5nX2FycmF5KGFyZ3ZsaXN0LCBsYXN0YXJnKTsKLSAgZmFpbF8wOgotICAgIFB5X0RFQ1JFRihvcGF0aCk7Ci0gICAgcmV0dXJuIHJlczsKLX0KLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2VuZGlmIC8qIEhBVkVfU1BBV05WICovCiAKIApAQCAtNjA4NCw3ICs2MDI2LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9vcGVucHR5KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQogewotICAgIGludCBtYXN0ZXJfZmQsIHNsYXZlX2ZkOworICAgIGludCBtYXN0ZXJfZmQgPSAtMSwgc2xhdmVfZmQgPSAtMTsKICNpZm5kZWYgSEFWRV9PUEVOUFRZCiAgICAgY2hhciAqIHNsYXZlX25hbWU7CiAjZW5kaWYKQEAgLTYwOTcsMzcgKzYwMzksNTYgQEAKIAogI2lmZGVmIEhBVkVfT1BFTlBUWQogICAgIGlmIChvcGVucHR5KCZtYXN0ZXJfZmQsICZzbGF2ZV9mZCwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShtYXN0ZXJfZmQsIDAsIE5VTEwpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzbGF2ZV9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworCiAjZWxpZiBkZWZpbmVkKEhBVkVfX0dFVFBUWSkKICAgICBzbGF2ZV9uYW1lID0gX2dldHB0eSgmbWFzdGVyX2ZkLCBPX1JEV1IsIDA2NjYsIDApOwogICAgIGlmIChzbGF2ZV9uYW1lID09IE5VTEwpCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG1hc3Rlcl9mZCwgMCwgTlVMTCkgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgc2xhdmVfZmQgPSBvcGVuKHNsYXZlX25hbWUsIE9fUkRXUik7CisgICAgc2xhdmVfZmQgPSBfUHlfb3BlbihzbGF2ZV9uYW1lLCBPX1JEV1IpOwogICAgIGlmIChzbGF2ZV9mZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworCiAjZWxzZQogICAgIG1hc3Rlcl9mZCA9IG9wZW4oREVWX1BUWV9GSUxFLCBPX1JEV1IgfCBPX05PQ1RUWSk7IC8qIG9wZW4gbWFzdGVyICovCiAgICAgaWYgKG1hc3Rlcl9mZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworCiAgICAgc2lnX3NhdmVkID0gUHlPU19zZXRzaWcoU0lHQ0hMRCwgU0lHX0RGTCk7CisKICAgICAvKiBjaGFuZ2UgcGVybWlzc2lvbiBvZiBzbGF2ZSAqLwogICAgIGlmIChncmFudHB0KG1hc3Rlcl9mZCkgPCAwKSB7CiAgICAgICAgIFB5T1Nfc2V0c2lnKFNJR0NITEQsIHNpZ19zYXZlZCk7Ci0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOwogICAgIH0KKwogICAgIC8qIHVubG9jayBzbGF2ZSAqLwogICAgIGlmICh1bmxvY2twdChtYXN0ZXJfZmQpIDwgMCkgewogICAgICAgICBQeU9TX3NldHNpZyhTSUdDSExELCBzaWdfc2F2ZWQpOwotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKKyAgICAgICAgZ290byBwb3NpeF9lcnJvcjsKICAgICB9CisKICAgICBQeU9TX3NldHNpZyhTSUdDSExELCBzaWdfc2F2ZWQpOworCiAgICAgc2xhdmVfbmFtZSA9IHB0c25hbWUobWFzdGVyX2ZkKTsgLyogZ2V0IG5hbWUgb2Ygc2xhdmUgKi8KICAgICBpZiAoc2xhdmVfbmFtZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBzbGF2ZV9mZCA9IG9wZW4oc2xhdmVfbmFtZSwgT19SRFdSIHwgT19OT0NUVFkpOyAvKiBvcGVuIHNsYXZlICovCisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKKyAgICBzbGF2ZV9mZCA9IF9QeV9vcGVuKHNsYXZlX25hbWUsIE9fUkRXUiB8IE9fTk9DVFRZKTsgLyogb3BlbiBzbGF2ZSAqLwogICAgIGlmIChzbGF2ZV9mZCA8IDApCi0gICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICBnb3RvIHBvc2l4X2Vycm9yOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUobWFzdGVyX2ZkLCAwLCBOVUxMKSA8IDApCisgICAgICAgIGdvdG8gcG9zaXhfZXJyb3I7CisKICNpZiAhZGVmaW5lZChfX0NZR1dJTl9fKSAmJiAhZGVmaW5lZChIQVZFX0RFVl9QVEMpCiAgICAgaW9jdGwoc2xhdmVfZmQsIElfUFVTSCwgInB0ZW0iKTsgLyogcHVzaCBwdGVtICovCiAgICAgaW9jdGwoc2xhdmVfZmQsIElfUFVTSCwgImxkdGVybSIpOyAvKiBwdXNoIGxkdGVybSAqLwpAQCAtNjEzOSw2ICs2MTAwLDE2IEBACiAKICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIG1hc3Rlcl9mZCwgc2xhdmVfZmQpOwogCitwb3NpeF9lcnJvcjoKKyAgICBwb3NpeF9lcnJvcigpOworI2lmIGRlZmluZWQoSEFWRV9PUEVOUFRZKSB8fCBkZWZpbmVkKEhBVkVfX0dFVFBUWSkKK2Vycm9yOgorI2VuZGlmCisgICAgaWYgKG1hc3Rlcl9mZCAhPSAtMSkKKyAgICAgICAgY2xvc2UobWFzdGVyX2ZkKTsKKyAgICBpZiAoc2xhdmVfZmQgIT0gLTEpCisgICAgICAgIGNsb3NlKHNsYXZlX2ZkKTsKKyAgICByZXR1cm4gTlVMTDsKIH0KICNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfT1BFTlBUWSkgfHwgZGVmaW5lZChIQVZFX19HRVRQVFkpIHx8IGRlZmluZWQoSEFWRV9ERVZfUFRNWCkgKi8KIApAQCAtNjI2Myw5ICs2MjM0LDkgQEAKICNlbmRpZgogCiAjaWZkZWYgX19BUFBMRV9fCi0gICAgZ3JvdXBzID0gUHlNZW1fTWFsbG9jKG5ncm91cHMgKiBzaXplb2YoaW50KSk7CisgICAgZ3JvdXBzID0gUHlNZW1fTmV3KGludCwgbmdyb3Vwcyk7CiAjZWxzZQotICAgIGdyb3VwcyA9IFB5TWVtX01hbGxvYyhuZ3JvdXBzICogc2l6ZW9mKGdpZF90KSk7CisgICAgZ3JvdXBzID0gUHlNZW1fTmV3KGdpZF90LCBuZ3JvdXBzKTsKICNlbmRpZgogICAgIGlmIChncm91cHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC02MzQzLDcgKzYzMTQsNyBAQAogICAgICAgICAvKiBncm91cHMgd2lsbCBmaXQgaW4gZXhpc3RpbmcgYXJyYXkgKi8KICAgICAgICAgYWx0X2dyb3VwbGlzdCA9IGdyb3VwbGlzdDsKICAgICB9IGVsc2UgewotICAgICAgICBhbHRfZ3JvdXBsaXN0ID0gUHlNZW1fTWFsbG9jKG4gKiBzaXplb2YoZ2lkX3QpKTsKKyAgICAgICAgYWx0X2dyb3VwbGlzdCA9IFB5TWVtX05ldyhnaWRfdCwgbik7CiAgICAgICAgIGlmIChhbHRfZ3JvdXBsaXN0ID09IE5VTEwpIHsKICAgICAgICAgICAgIGVycm5vID0gRUlOVkFMOwogICAgICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CkBAIC02MzY5LDcgKzYzNDAsNyBAQAogICAgICAgICAgICAgICAgIC8qIEF2b2lkIG1hbGxvYygwKSAqLwogICAgICAgICAgICAgICAgIGFsdF9ncm91cGxpc3QgPSBncm91cGxpc3Q7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGFsdF9ncm91cGxpc3QgPSBQeU1lbV9NYWxsb2MobiAqIHNpemVvZihnaWRfdCkpOworICAgICAgICAgICAgICAgIGFsdF9ncm91cGxpc3QgPSBQeU1lbV9OZXcoZ2lkX3QsIG4pOwogICAgICAgICAgICAgICAgIGlmIChhbHRfZ3JvdXBsaXN0ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOwpAQCAtNjYzMSwyMyArNjYwMiw4IEBACiAgICAgaW50IHNpZzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX1BJRCAiaTpraWxsIiwgJnBpZCwgJnNpZykpCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChzaWcgPT0gWENQVF9TSUdOQUxfSU5UUiB8fCBzaWcgPT0gWENQVF9TSUdOQUxfQlJFQUspIHsKLSAgICAgICAgQVBJUkVUIHJjOwotICAgICAgICBpZiAoKHJjID0gRG9zU2VuZFNpZ25hbEV4Y2VwdGlvbihwaWQsIHNpZykpICE9IE5PX0VSUk9SKQotICAgICAgICAgICAgcmV0dXJuIG9zMl9lcnJvcihyYyk7Ci0KLSAgICB9IGVsc2UgaWYgKHNpZyA9PSBYQ1BUX1NJR05BTF9LSUxMUFJPQykgewotICAgICAgICBBUElSRVQgcmM7Ci0gICAgICAgIGlmICgocmMgPSBEb3NLaWxsUHJvY2VzcyhES1BfUFJPQ0VTUywgcGlkKSkgIT0gTk9fRVJST1IpCi0gICAgICAgICAgICByZXR1cm4gb3MyX2Vycm9yKHJjKTsKLQotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsgLyogVW5yZWNvZ25pemVkIFNpZ25hbCBSZXF1ZXN0ZWQgKi8KLSNlbHNlCiAgICAgaWYgKGtpbGwocGlkLCBzaWcpID09IC0xKQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSNlbmRpZgogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKIH0KQEAgLTY2ODUsMTYgKzY2NDEsMTcgQEAKIHdpbjMyX2tpbGwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQ7Ci0gICAgRFdPUkQgcGlkLCBzaWcsIGVycjsKKyAgICBwaWRfdCBwaWQ7CisgICAgRFdPUkQgc2lnLCBlcnI7CiAgICAgSEFORExFIGhhbmRsZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAia2s6a2lsbCIsICZwaWQsICZzaWcpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfUElEICJrOmtpbGwiLCAmcGlkLCAmc2lnKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBDb25zb2xlIHByb2Nlc3NlcyB3aGljaCBzaGFyZSBhIGNvbW1vbiBjb25zb2xlIGNhbiBiZSBzZW50IENUUkwrQyBvcgogICAgICAgIENUUkwrQlJFQUsgZXZlbnRzLCBwcm92aWRlZCB0aGV5IGhhbmRsZSBzYWlkIGV2ZW50cy4gKi8KICAgICBpZiAoc2lnID09IENUUkxfQ19FVkVOVCB8fCBzaWcgPT0gQ1RSTF9CUkVBS19FVkVOVCkgewotICAgICAgICBpZiAoR2VuZXJhdGVDb25zb2xlQ3RybEV2ZW50KHNpZywgcGlkKSA9PSAwKSB7CisgICAgICAgIGlmIChHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQoc2lnLCAoRFdPUkQpcGlkKSA9PSAwKSB7CiAgICAgICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycik7CiAgICAgICAgIH0KQEAgLTY3MDQsNyArNjY2MSw3IEBACiAKICAgICAvKiBJZiB0aGUgc2lnbmFsIGlzIG91dHNpZGUgb2Ygd2hhdCBHZW5lcmF0ZUNvbnNvbGVDdHJsRXZlbnQgY2FuIHVzZSwKICAgICAgICBhdHRlbXB0IHRvIG9wZW4gYW5kIHRlcm1pbmF0ZSB0aGUgcHJvY2Vzcy4gKi8KLSAgICBoYW5kbGUgPSBPcGVuUHJvY2VzcyhQUk9DRVNTX0FMTF9BQ0NFU1MsIEZBTFNFLCBwaWQpOworICAgIGhhbmRsZSA9IE9wZW5Qcm9jZXNzKFBST0NFU1NfQUxMX0FDQ0VTUywgRkFMU0UsIChEV09SRClwaWQpOwogICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgewogICAgICAgICBlcnIgPSBHZXRMYXN0RXJyb3IoKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGVycik7CkBAIC03MTEwLDcgKzcwNjcsNyBAQAogICAgIFB5X2ludHB0cl90IHBpZDsKICAgICBpbnQgc3RhdHVzLCBvcHRpb25zOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgImk6d2FpdHBpZCIsICZwaWQsICZvcHRpb25zKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiaTp3YWl0cGlkIiwgJnBpZCwgJm9wdGlvbnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgcGlkID0gX2N3YWl0KCZzdGF0dXMsIHBpZCwgb3B0aW9ucyk7CkBAIC03MTE5LDcgKzcwNzYsNyBAQAogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKIAogICAgIC8qIHNoaWZ0IHRoZSBzdGF0dXMgbGVmdCBhIGJ5dGUgc28gdGhpcyBpcyBtb3JlIGxpa2UgdGhlIFBPU0lYIHdhaXRwaWQgKi8KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTmkiLCBQeUxvbmdfRnJvbVBpZChwaWQpLCBzdGF0dXMgPDwgOCk7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoX1B5X1BBUlNFX0lOVFBUUiAiaSIsIHBpZCwgc3RhdHVzIDw8IDgpOwogfQogI2VuZGlmIC8qIEhBVkVfV0FJVFBJRCB8fCBIQVZFX0NXQUlUICovCiAKQEAgLTcxNzAsNiArNzEyNyw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZGlyX2ZkIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJlYWRsaW5rIjsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnwkTyY6cmVhZGxpbmsiLCBrZXl3b3JkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogI2lmZGVmIEhBVkVfUkVBRExJTktBVApAQCAtNzE5MCw3ICs3MTQ4LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGxlbmd0aCA8IDApIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigicmVhZGxpbmsiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC03MjI2LDggKzcxODQsOSBAQAogLyogR3JhYiBDcmVhdGVTeW1ib2xpY0xpbmtXIGR5bmFtaWNhbGx5IGZyb20ga2VybmVsMzIgKi8KIHN0YXRpYyBEV09SRCAoQ0FMTEJBQ0sgKlB5X0NyZWF0ZVN5bWJvbGljTGlua1cpKExQV1NUUiwgTFBXU1RSLCBEV09SRCkgPSBOVUxMOwogc3RhdGljIERXT1JEIChDQUxMQkFDSyAqUHlfQ3JlYXRlU3ltYm9saWNMaW5rQSkoTFBTVFIsIExQU1RSLCBEV09SRCkgPSBOVUxMOworCiBzdGF0aWMgaW50Ci1jaGVja19DcmVhdGVTeW1ib2xpY0xpbmsoKQorY2hlY2tfQ3JlYXRlU3ltYm9saWNMaW5rKHZvaWQpCiB7CiAgICAgSElOU1RBTkNFIGhLZXJuZWwzMjsKICAgICAvKiBvbmx5IHJlY2hlY2sgKi8KQEAgLTcyNDEsNTUgKzcyMDAsNTcgQEAKICAgICByZXR1cm4gKFB5X0NyZWF0ZVN5bWJvbGljTGlua1cgJiYgUHlfQ3JlYXRlU3ltYm9saWNMaW5rQSk7CiB9CiAKLXZvaWQgX2Rpcm5hbWVXKFdDSEFSICpwYXRoKSB7Ci0gICAgLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KLQorLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KK3N0YXRpYyB2b2lkCitfZGlybmFtZVcoV0NIQVIgKnBhdGgpCit7CiAgICAgV0NIQVIgKnB0cjsKIAogICAgIC8qIHdhbGsgdGhlIHBhdGggZnJvbSB0aGUgZW5kIHVudGlsIGEgYmFja3NsYXNoIGlzIGVuY291bnRlcmVkICovCi0gICAgZm9yKHB0ciA9IHBhdGggKyB3Y3NsZW4ocGF0aCk7IHB0ciAhPSBwYXRoOyBwdHItLSkKLSAgICB7Ci0gICAgICAgIGlmKCpwdHIgPT0gKkwiXFwiIHx8ICpwdHIgPT0gKkwiLyIpIHsKKyAgICBmb3IocHRyID0gcGF0aCArIHdjc2xlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKSB7CisgICAgICAgIGlmICgqcHRyID09IEwnXFwnIHx8ICpwdHIgPT0gTCcvJykKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgfQogICAgICpwdHIgPSAwOwogfQogCi12b2lkIF9kaXJuYW1lQShjaGFyICpwYXRoKSB7Ci0gICAgLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KLQorLyogUmVtb3ZlIHRoZSBsYXN0IHBvcnRpb24gb2YgdGhlIHBhdGggKi8KK3N0YXRpYyB2b2lkCitfZGlybmFtZUEoY2hhciAqcGF0aCkKK3sKICAgICBjaGFyICpwdHI7CiAKICAgICAvKiB3YWxrIHRoZSBwYXRoIGZyb20gdGhlIGVuZCB1bnRpbCBhIGJhY2tzbGFzaCBpcyBlbmNvdW50ZXJlZCAqLwotICAgIGZvcihwdHIgPSBwYXRoICsgc3RybGVuKHBhdGgpOyBwdHIgIT0gcGF0aDsgcHRyLS0pCi0gICAgewotICAgICAgICBpZigqcHRyID09ICdcXCcgfHwgKnB0ciA9PSAnLycpIHsKKyAgICBmb3IocHRyID0gcGF0aCArIHN0cmxlbihwYXRoKTsgcHRyICE9IHBhdGg7IHB0ci0tKSB7CisgICAgICAgIGlmICgqcHRyID09ICdcXCcgfHwgKnB0ciA9PSAnLycpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgIH0KICAgICAqcHRyID0gMDsKIH0KIAotaW50IF9pc19hYnNXKFdDSEFSICpwYXRoKSB7Ci0gICAgLyogSXMgdGhpcyBwYXRoIGFic29sdXRlPyAqLwotCisvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCitzdGF0aWMgaW50CitfaXNfYWJzVyhjb25zdCBXQ0hBUiAqcGF0aCkKK3sKICAgICByZXR1cm4gcGF0aFswXSA9PSBMJ1xcJyB8fCBwYXRoWzBdID09IEwnLycgfHwgcGF0aFsxXSA9PSBMJzonOwogCiB9CiAKLWludCBfaXNfYWJzQShjaGFyICpwYXRoKSB7Ci0gICAgLyogSXMgdGhpcyBwYXRoIGFic29sdXRlPyAqLwotCisvKiBJcyB0aGlzIHBhdGggYWJzb2x1dGU/ICovCitzdGF0aWMgaW50CitfaXNfYWJzQShjb25zdCBjaGFyICpwYXRoKQorewogICAgIHJldHVybiBwYXRoWzBdID09ICdcXCcgfHwgcGF0aFswXSA9PSAnLycgfHwgcGF0aFsxXSA9PSAnOic7CiAKIH0KIAotdm9pZCBfam9pblcoV0NIQVIgKmRlc3RfcGF0aCwgY29uc3QgV0NIQVIgKnJvb3QsIGNvbnN0IFdDSEFSICpyZXN0KSB7Ci0gICAgLyogam9pbiByb290IGFuZCByZXN0IHdpdGggYSBiYWNrc2xhc2ggKi8KLSAgICBpbnQgcm9vdF9sZW47CisvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLworc3RhdGljIHZvaWQKK19qb2luVyhXQ0hBUiAqZGVzdF9wYXRoLCBjb25zdCBXQ0hBUiAqcm9vdCwgY29uc3QgV0NIQVIgKnJlc3QpCit7CisgICAgc2l6ZV90IHJvb3RfbGVuOwogCi0gICAgaWYoX2lzX2Fic1cocmVzdCkpIHsKKyAgICBpZiAoX2lzX2Fic1cocmVzdCkpIHsKICAgICAgICAgd2NzY3B5KGRlc3RfcGF0aCwgcmVzdCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03Mjk4LDE3ICs3MjU5LDE5IEBACiAKICAgICB3Y3NjcHkoZGVzdF9wYXRoLCByb290KTsKICAgICBpZihyb290X2xlbikgewotICAgICAgICBkZXN0X3BhdGhbcm9vdF9sZW5dID0gKkwiXFwiOwotICAgICAgICByb290X2xlbiArPSAxOworICAgICAgICBkZXN0X3BhdGhbcm9vdF9sZW5dID0gTCdcXCc7CisgICAgICAgIHJvb3RfbGVuKys7CiAgICAgfQogICAgIHdjc2NweShkZXN0X3BhdGgrcm9vdF9sZW4sIHJlc3QpOwogfQogCi12b2lkIF9qb2luQShjaGFyICpkZXN0X3BhdGgsIGNvbnN0IGNoYXIgKnJvb3QsIGNvbnN0IGNoYXIgKnJlc3QpIHsKLSAgICAvKiBqb2luIHJvb3QgYW5kIHJlc3Qgd2l0aCBhIGJhY2tzbGFzaCAqLwotICAgIGludCByb290X2xlbjsKKy8qIGpvaW4gcm9vdCBhbmQgcmVzdCB3aXRoIGEgYmFja3NsYXNoICovCitzdGF0aWMgdm9pZAorX2pvaW5BKGNoYXIgKmRlc3RfcGF0aCwgY29uc3QgY2hhciAqcm9vdCwgY29uc3QgY2hhciAqcmVzdCkKK3sKKyAgICBzaXplX3Qgcm9vdF9sZW47CiAKLSAgICBpZihfaXNfYWJzQShyZXN0KSkgeworICAgIGlmIChfaXNfYWJzQShyZXN0KSkgewogICAgICAgICBzdHJjcHkoZGVzdF9wYXRoLCByZXN0KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTczMTgsMTQgKzcyODEsMTUgQEAKICAgICBzdHJjcHkoZGVzdF9wYXRoLCByb290KTsKICAgICBpZihyb290X2xlbikgewogICAgICAgICBkZXN0X3BhdGhbcm9vdF9sZW5dID0gJ1xcJzsKLSAgICAgICAgcm9vdF9sZW4gKz0gMTsKKyAgICAgICAgcm9vdF9sZW4rKzsKICAgICB9CiAgICAgc3RyY3B5KGRlc3RfcGF0aCtyb290X2xlbiwgcmVzdCk7CiB9CiAKLWludCBfY2hlY2tfZGlyVyhXQ0hBUiAqc3JjLCBXQ0hBUiAqZGVzdCkKKy8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCitzdGF0aWMgaW50CitfY2hlY2tfZGlyVyhXQ0hBUiAqc3JjLCBXQ0hBUiAqZGVzdCkKIHsKLSAgICAvKiBSZXR1cm4gVHJ1ZSBpZiB0aGUgcGF0aCBhdCBzcmMgcmVsYXRpdmUgdG8gZGVzdCBpcyBhIGRpcmVjdG9yeSAqLwogICAgIFdJTjMyX0ZJTEVfQVRUUklCVVRFX0RBVEEgc3JjX2luZm87CiAgICAgV0NIQVIgZGVzdF9wYXJlbnRbTUFYX1BBVEhdOwogICAgIFdDSEFSIHNyY19yZXNvbHZlZFtNQVhfUEFUSF0gPSBMIiI7CkBAIC03MzQxLDE4ICs3MzA1LDE5IEBACiAgICAgKTsKIH0KIAotaW50IF9jaGVja19kaXJBKGNoYXIgKnNyYywgY2hhciAqZGVzdCkKKy8qIFJldHVybiBUcnVlIGlmIHRoZSBwYXRoIGF0IHNyYyByZWxhdGl2ZSB0byBkZXN0IGlzIGEgZGlyZWN0b3J5ICovCitzdGF0aWMgaW50CitfY2hlY2tfZGlyQShjaGFyICpzcmMsIGNoYXIgKmRlc3QpCiB7Ci0gICAgLyogUmV0dXJuIFRydWUgaWYgdGhlIHBhdGggYXQgc3JjIHJlbGF0aXZlIHRvIGRlc3QgaXMgYSBkaXJlY3RvcnkgKi8KICAgICBXSU4zMl9GSUxFX0FUVFJJQlVURV9EQVRBIHNyY19pbmZvOwogICAgIGNoYXIgZGVzdF9wYXJlbnRbTUFYX1BBVEhdOwogICAgIGNoYXIgc3JjX3Jlc29sdmVkW01BWF9QQVRIXSA9ICIiOwogCiAgICAgLyogZGVzdF9wYXJlbnQgPSBvcy5wYXRoLmRpcm5hbWUoZGVzdCkgKi8KICAgICBzdHJjcHkoZGVzdF9wYXJlbnQsIGRlc3QpOwotICAgIF9kaXJuYW1lVyhkZXN0X3BhcmVudCk7CisgICAgX2Rpcm5hbWVBKGRlc3RfcGFyZW50KTsKICAgICAvKiBzcmNfcmVzb2x2ZWQgPSBvcy5wYXRoLmpvaW4oZGVzdF9wYXJlbnQsIHNyYykgKi8KLSAgICBfam9pblcoc3JjX3Jlc29sdmVkLCBkZXN0X3BhcmVudCwgc3JjKTsKKyAgICBfam9pbkEoc3JjX3Jlc29sdmVkLCBkZXN0X3BhcmVudCwgc3JjKTsKICAgICByZXR1cm4gKAogICAgICAgICBHZXRGaWxlQXR0cmlidXRlc0V4QShzcmNfcmVzb2x2ZWQsIEdldEZpbGVFeEluZm9TdGFuZGFyZCwgJnNyY19pbmZvKQogICAgICAgICAmJiBzcmNfaW5mby5kd0ZpbGVBdHRyaWJ1dGVzICYgRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZCkBAIC03Mzc4LDggKzczNDMsMTAgQEAKICNlbmRpZgogCiAgICAgbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzcmMpKTsKKyAgICBzcmMuZnVuY3Rpb25fbmFtZSA9ICJzeW1saW5rIjsKICAgICBzcmMuYXJndW1lbnRfbmFtZSA9ICJzcmMiOwogICAgIG1lbXNldCgmZHN0LCAwLCBzaXplb2YoZHN0KSk7CisgICAgZHN0LmZ1bmN0aW9uX25hbWUgPSAic3ltbGluayI7CiAgICAgZHN0LmFyZ3VtZW50X25hbWUgPSAiZHN0IjsKIAogI2lmZGVmIE1TX1dJTkRPV1MKQEAgLTc0MzIsNyArNzM5OSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmICghcmVzdWx0KSB7Ci0gICAgICAgIHJldHVybl92YWx1ZSA9IHdpbjMyX2Vycm9yX29iamVjdCgic3ltbGluayIsIHNyYy5vYmplY3QpOworICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yMigmc3JjLCAmZHN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIApAQCAtNzQ0OCw3ICs3NDE1LDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJzeW1saW5rIiwgJmRzdCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IyKCZzcmMsICZkc3QpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogI2VuZGlmCkBAIC03NjEwLDMxICs3NTc3LDcgQEAKIHRpbWVzLiAgVGhlIG9iamVjdCBiZWhhdmVzIGxpa2UgYSBuYW1lZCB0dXBsZSB3aXRoIHRoZXNlIGZpZWxkczpcblwKICAgKHV0aW1lLCBzdGltZSwgY3V0aW1lLCBjc3RpbWUsIGVsYXBzZWRfdGltZSkiKTsKIAotI2lmIGRlZmluZWQoUFlDQ19WQUNQUCkgJiYgZGVmaW5lZChQWU9TX09TMikKLXN0YXRpYyBsb25nCi1zeXN0ZW1fdXB0aW1lKHZvaWQpCi17Ci0gICAgVUxPTkcgICAgIHZhbHVlID0gMDsKLQotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBEb3NRdWVyeVN5c0luZm8oUVNWX01TX0NPVU5ULCBRU1ZfTVNfQ09VTlQsICZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIHJldHVybiB2YWx1ZTsKLX0KLQotc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X3RpbWVzKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQotewotICAgIC8qIEN1cnJlbnRseSBPbmx5IFVwdGltZSBpcyBQcm92aWRlZCAtLSBPdGhlcnMgTGF0ZXIgKi8KLSAgICByZXR1cm4gYnVpbGRfdGltZXNfcmVzdWx0KAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc191dGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19zdGltZSAvIEhaICovLAotICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpMCAvKiB0LnRtc19jdXRpbWUgLyBIWiAqLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKTAgLyogdC50bXNfY3N0aW1lIC8gSFogKi8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGRvdWJsZSlzeXN0ZW1fdXB0aW1lKCkgLyAxMDAwKTsKLX0KLSNlbGlmIGRlZmluZWQoTVNfV0lORE9XUykKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfdGltZXMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7CkBAIC03NjU2LDcgKzc1OTksNyBAQAogICAgICAgICAoZG91YmxlKTAsCiAgICAgICAgIChkb3VibGUpMCk7CiB9Ci0jZWxzZSAvKiBOZWl0aGVyIFdpbmRvd3Mgbm9yIE9TLzIgKi8KKyNlbHNlIC8qIE5vdCBXaW5kb3dzICovCiAjZGVmaW5lIE5FRURfVElDS1NfUEVSX1NFQ09ORAogc3RhdGljIGxvbmcgdGlja3NfcGVyX3NlY29uZCA9IC0xOwogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTc3NzYsNiArNzcxOSwxMCBAQAogCiAvKiBGdW5jdGlvbnMgYWN0aW5nIG9uIGZpbGUgZGVzY3JpcHRvcnMgKi8KIAorI2lmZGVmIE9fQ0xPRVhFQworZXh0ZXJuIGludCBfUHlfb3Blbl9jbG9leGVjX3dvcmtzOworI2VuZGlmCisKIFB5RG9jX1NUUlZBUihwb3NpeF9vcGVuX19kb2NfXywKICJvcGVuKHBhdGgsIGZsYWdzLCBtb2RlPTBvNzc3LCAqLCBkaXJfZmQ9Tm9uZSlcblxuXAogT3BlbiBhIGZpbGUgZm9yIGxvdyBsZXZlbCBJTy4gIFJldHVybnMgYSBmaWxlIGhhbmRsZSAoaW50ZWdlcikuXG5cCkBAIC03Nzk1LDggKzc3NDIsMTQgQEAKICAgICBpbnQgZmQ7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZmxhZ3MiLCAibW9kZSIsICJkaXJfZmQiLCBOVUxMfTsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gJl9QeV9vcGVuX2Nsb2V4ZWNfd29ya3M7CisjZWxpZiAhZGVmaW5lZChNU19XSU5ET1dTKQorICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSBOVUxMOworI2VuZGlmCiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gIm9wZW4iOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgIk8maXxpJE8mOm9wZW4iLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAogICAgICAgICAmZmxhZ3MsICZtb2RlLApAQCAtNzgwOCw2ICs3NzYxLDEyIEBACiAgICAgICAgICkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisjaWZkZWYgTVNfV0lORE9XUworICAgIGZsYWdzIHw9IE9fTk9JTkhFUklUOworI2VsaWYgZGVmaW5lZChPX0NMT0VYRUMpCisgICAgZmxhZ3MgfD0gT19DTE9FWEVDOworI2VuZGlmCisKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIGlmIChwYXRoLndpZGUpCkBAIC03ODIzLDE2ICs3NzgyLDE3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChmZCA9PSAtMSkgewotI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgLyogZm9yY2UgdXNlIG9mIHBvc2l4X2Vycm9yIGhlcmUgZm9yIGV4YWN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0gICAgICAgIGlmIChwYXRoLndpZGUpCi0gICAgICAgICAgICByZXR1cm5fdmFsdWUgPSBwb3NpeF9lcnJvcigpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigib3BlbiIsICZwYXRoKTsKKyAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5RXhjX09TRXJyb3IsIHBhdGgub2JqZWN0KTsKICAgICAgICAgZ290byBleGl0OwogICAgIH0KIAorI2lmbmRlZiBNU19XSU5ET1dTCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm5fdmFsdWUgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpZmQpOwogCiBleGl0OgpAQCAtNzg5MywxMyArNzg1MywxNCBAQAogcG9zaXhfZHVwKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgZmQ7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6ZHVwIiwgJmZkKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKQotICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKLSAgICBmZCA9IGR1cChmZCk7Ci0gICAgaWYgKGZkIDwgMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyAgICBmZCA9IF9QeV9kdXAoZmQpOworICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKWZkKTsKIH0KIApAQCAtNzkwOSwxNiArNzg3MCw4MiBAQAogRHVwbGljYXRlIGZpbGUgZGVzY3JpcHRvci4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXBvc2l4X2R1cDIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorcG9zaXhfZHVwMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7Ci0gICAgaW50IGZkLCBmZDIsIHJlczsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOmR1cDIiLCAmZmQsICZmZDIpKQorICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJmZCIsICJmZDIiLCAiaW5oZXJpdGFibGUiLCBOVUxMfTsKKyAgICBpbnQgZmQsIGZkMjsKKyAgICBpbnQgaW5oZXJpdGFibGUgPSAxOworICAgIGludCByZXM7CisjaWYgZGVmaW5lZChIQVZFX0RVUDMpICYmIFwKKyAgICAhKGRlZmluZWQoSEFWRV9GQ05UTF9IKSAmJiBkZWZpbmVkKEZfRFVQMkZEX0NMT0VYRUMpKQorICAgIC8qIGR1cDMoKSBpcyBhdmFpbGFibGUgb24gTGludXggMi42LjI3KyBhbmQgZ2xpYmMgMi45ICovCisgICAgaW50IGR1cDNfd29ya3MgPSAtMTsKKyNlbmRpZgorCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiaWl8aTpkdXAyIiwga2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZkLCAmZmQyLCAmaW5oZXJpdGFibGUpKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIGlmICghX1B5VmVyaWZ5X2ZkX2R1cDIoZmQsIGZkMikpCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisjaWZkZWYgTVNfV0lORE9XUworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCiAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgLyogQ2hhcmFjdGVyIGZpbGVzIGxpa2UgY29uc29sZSBjYW5ub3QgYmUgbWFrZSBub24taW5oZXJpdGFibGUgKi8KKyAgICBpZiAoIWluaGVyaXRhYmxlICYmIF9QeV9zZXRfaW5oZXJpdGFibGUoZmQyLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQyKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgZGVmaW5lZChGX0RVUDJGRF9DTE9FWEVDKQorICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoIWluaGVyaXRhYmxlKQorICAgICAgICByZXMgPSBmY250bChmZCwgRl9EVVAyRkRfQ0xPRVhFQywgZmQyKTsKKyAgICBlbHNlCisgICAgICAgIHJlcyA9IGR1cDIoZmQsIGZkMik7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CisKKyNlbHNlCisKKyNpZmRlZiBIQVZFX0RVUDMKKyAgICBpZiAoIWluaGVyaXRhYmxlICYmIGR1cDNfd29ya3MgIT0gMCkgeworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IGR1cDMoZmQsIGZkMiwgT19DTE9FWEVDKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgIGlmIChkdXAzX3dvcmtzID09IC0xKQorICAgICAgICAgICAgICAgIGR1cDNfd29ya3MgPSAoZXJybm8gIT0gRU5PU1lTKTsKKyAgICAgICAgICAgIGlmIChkdXAzX3dvcmtzKQorICAgICAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlIHx8IGR1cDNfd29ya3MgPT0gMCkKKyAgICB7CisjZW5kaWYKKyAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgICAgICByZXMgPSBkdXAyKGZkLCBmZDIpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgICAgIGlmICghaW5oZXJpdGFibGUgJiYgX1B5X3NldF9pbmhlcml0YWJsZShmZDIsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgY2xvc2UoZmQyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisjaWZkZWYgSEFWRV9EVVAzCisgICAgfQorI2VuZGlmCisKKyNlbmRpZgorCiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogfQpAQCAtNzk2Miw3ICs3OTg5LDcgQEAKIHBvc2l4X2xzZWVrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBpbnQgZmQsIGhvdzsKLSNpZiBkZWZpbmVkKE1TX1dJTjY0KSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCisjaWZkZWYgTVNfV0lORE9XUwogICAgIFBZX0xPTkdfTE9ORyBwb3MsIHJlczsKICNlbHNlCiAgICAgb2ZmX3QgcG9zLCByZXM7CkBAIC03OTkwLDcgKzgwMTcsNyBAQAogICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkKICAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7CiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotI2lmIGRlZmluZWQoTVNfV0lONjQpIHx8IGRlZmluZWQoTVNfV0lORE9XUykKKyNpZmRlZiBNU19XSU5ET1dTCiAgICAgcmVzID0gX2xzZWVraTY0KGZkLCBwb3MsIGhvdyk7CiAjZWxzZQogICAgIHJlcyA9IGxzZWVrKGZkLCBwb3MsIGhvdyk7CkBAIC04MjAyLDcgKzgyMjksNyBAQAogICAgIH0KICAgICBsZW4gPSBwYnVmLmxlbjsKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAobGVuID4gSU5UX01BWCkKICAgICAgICAgbGVuID0gSU5UX01BWDsKICAgICBzaXplID0gd3JpdGUoZmQsIHBidWYuYnVmLCAoaW50KWxlbik7CkBAIC04MjE4LDEwICs4MjQ1LDEwIEBACiAKICNpZmRlZiBIQVZFX1NFTkRGSUxFCiBQeURvY19TVFJWQVIocG9zaXhfc2VuZGZpbGVfX2RvY19fLAotInNlbmRmaWxlKG91dCwgaW4sIG9mZnNldCwgbmJ5dGVzKSAtPiBieXRlc3dyaXR0ZW5cblwKLXNlbmRmaWxlKG91dCwgaW4sIG9mZnNldCwgbmJ5dGVzLCBoZWFkZXJzPU5vbmUsIHRyYWlsZXJzPU5vbmUsIGZsYWdzPTApXG5cCisic2VuZGZpbGUob3V0LCBpbiwgb2Zmc2V0LCBjb3VudCkgLT4gYnl0ZXN3cml0dGVuXG5cCitzZW5kZmlsZShvdXQsIGluLCBvZmZzZXQsIGNvdW50WywgaGVhZGVyc11bLCB0cmFpbGVyc10sIGZsYWdzPTApXG5cCiAgICAgICAgICAgICAtPiBieXRlc3dyaXR0ZW5cblwKLUNvcHkgbmJ5dGVzIGJ5dGVzIGZyb20gZmlsZSBkZXNjcmlwdG9yIGluIHRvIGZpbGUgZGVzY3JpcHRvciBvdXQuIik7CitDb3B5IGNvdW50IGJ5dGVzIGZyb20gZmlsZSBkZXNjcmlwdG9yIGluIHRvIGZpbGUgZGVzY3JpcHRvciBvdXQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9zZW5kZmlsZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RpY3QpCkBAIC04MjM5LDEyICs4MjY2LDE0IEBACiAgICAgb2ZmX3Qgc2J5dGVzOwogICAgIHN0cnVjdCBzZl9oZHRyIHNmOwogICAgIGludCBmbGFncyA9IDA7Ci0gICAgc2YuaGVhZGVycyA9IE5VTEw7Ci0gICAgc2YudHJhaWxlcnMgPSBOVUxMOworICAgIC8qIEJld2FyZSB0aGF0ICJpbiIgY2xhc2hlcyB3aXRoIFB5dGhvbidzIG93biAiaW4iIG9wZXJhdG9yIGtleXdvcmQgKi8KICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsib3V0IiwgImluIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9mZnNldCIsICJjb3VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJoZWFkZXJzIiwgInRyYWlsZXJzIiwgImZsYWdzIiwgTlVMTH07CiAKKyAgICBzZi5oZWFkZXJzID0gTlVMTDsKKyAgICBzZi50cmFpbGVycyA9IE5VTEw7CisKICNpZmRlZiBfX0FQUExFX18KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RpY3QsICJpaU8mTyZ8T09pOnNlbmRmaWxlIiwKICAgICAgICAga2V5d29yZHMsICZvdXQsICZpbiwgX3BhcnNlX29mZl90LCAmb2Zmc2V0LCBfcGFyc2Vfb2ZmX3QsICZzYnl0ZXMsCkBAIC04MjU3LDcgKzgyODYsNyBAQAogICAgIGlmIChoZWFkZXJzICE9IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNrKGhlYWRlcnMpKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJzZW5kZmlsZSgpIGhlYWRlcnMgbXVzdCBiZSBhIHNlcXVlbmNlIG9yIE5vbmUiKTsKKyAgICAgICAgICAgICAgICAic2VuZGZpbGUoKSBoZWFkZXJzIG11c3QgYmUgYSBzZXF1ZW5jZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IGkgPSAwOyAvKiBBdm9pZCB1bmluaXRpYWxpemVkIHdhcm5pbmcgKi8KQEAgLTgyNzQsNyArODMwMyw3IEBACiAgICAgaWYgKHRyYWlsZXJzICE9IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeVNlcXVlbmNlX0NoZWNrKHRyYWlsZXJzKSkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAic2VuZGZpbGUoKSB0cmFpbGVycyBtdXN0IGJlIGEgc2VxdWVuY2Ugb3IgTm9uZSIpOworICAgICAgICAgICAgICAgICJzZW5kZmlsZSgpIHRyYWlsZXJzIG11c3QgYmUgYSBzZXF1ZW5jZSIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IGkgPSAwOyAvKiBBdm9pZCB1bmluaXRpYWxpemVkIHdhcm5pbmcgKi8KQEAgLTgzNjgsMTYgKzgzOTcsMTIgQEAKICAgICBpbnQgcmVzOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaTpmc3RhdCIsICZmZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwotI2lmZGVmIF9fVk1TCi0gICAgLyogb24gT3BlblZNUyB3ZSBtdXN0IGVuc3VyZSB0aGF0IGFsbCBieXRlcyBhcmUgd3JpdHRlbiB0byB0aGUgZmlsZSAqLwotICAgIGZzeW5jKGZkKTsKLSNlbmRpZgogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICByZXMgPSBGU1RBVChmZCwgJnN0KTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmIChyZXMgIT0gMCkgewogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgcmV0dXJuIHdpbjMyX2Vycm9yKCJmc3RhdCIsIE5VTEwpOworICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnIoMCk7CiAjZWxzZQogICAgICAgICByZXR1cm4gcG9zaXhfZXJyb3IoKTsKICNlbmRpZgpAQCAtODQxMCwzNSArODQzNSw2OSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHBvc2l4X3BpcGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICBIRklMRSByZWFkLCB3cml0ZTsKLSAgICBBUElSRVQgcmM7Ci0KLSAgICByYyA9IERvc0NyZWF0ZVBpcGUoICZyZWFkLCAmd3JpdGUsIDQwOTYpOwotICAgIGlmIChyYyAhPSBOT19FUlJPUikKLSAgICAgICAgcmV0dXJuIG9zMl9lcnJvcihyYyk7Ci0KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIHJlYWQsIHdyaXRlKTsKLSNlbHNlCi0jaWYgIWRlZmluZWQoTVNfV0lORE9XUykKICAgICBpbnQgZmRzWzJdOwotICAgIGludCByZXM7Ci0gICAgcmVzID0gcGlwZShmZHMpOwotICAgIGlmIChyZXMgIT0gMCkKLSAgICAgICAgcmV0dXJuIHBvc2l4X2Vycm9yKCk7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCBmZHNbMF0sIGZkc1sxXSk7Ci0jZWxzZSAvKiBNU19XSU5ET1dTICovCisjaWZkZWYgTVNfV0lORE9XUwogICAgIEhBTkRMRSByZWFkLCB3cml0ZTsKLSAgICBpbnQgcmVhZF9mZCwgd3JpdGVfZmQ7CisgICAgU0VDVVJJVFlfQVRUUklCVVRFUyBhdHRyOwogICAgIEJPT0wgb2s7Ci0gICAgb2sgPSBDcmVhdGVQaXBlKCZyZWFkLCAmd3JpdGUsIE5VTEwsIDApOwotICAgIGlmICghb2spCi0gICAgICAgIHJldHVybiB3aW4zMl9lcnJvcigiQ3JlYXRlUGlwZSIsIE5VTEwpOwotICAgIHJlYWRfZmQgPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXJlYWQsIDApOwotICAgIHdyaXRlX2ZkID0gX29wZW5fb3NmaGFuZGxlKChQeV9pbnRwdHJfdCl3cml0ZSwgMSk7Ci0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihpaSkiLCByZWFkX2ZkLCB3cml0ZV9mZCk7Ci0jZW5kaWYgLyogTVNfV0lORE9XUyAqLworI2Vsc2UKKyAgICBpbnQgcmVzOwogI2VuZGlmCisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgYXR0ci5uTGVuZ3RoID0gc2l6ZW9mKGF0dHIpOworICAgIGF0dHIubHBTZWN1cml0eURlc2NyaXB0b3IgPSBOVUxMOworICAgIGF0dHIuYkluaGVyaXRIYW5kbGUgPSBGQUxTRTsKKworICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICBvayA9IENyZWF0ZVBpcGUoJnJlYWQsICZ3cml0ZSwgJmF0dHIsIDApOworICAgIGlmIChvaykgeworICAgICAgICBmZHNbMF0gPSBfb3Blbl9vc2ZoYW5kbGUoKFB5X2ludHB0cl90KXJlYWQsIF9PX1JET05MWSk7CisgICAgICAgIGZkc1sxXSA9IF9vcGVuX29zZmhhbmRsZSgoUHlfaW50cHRyX3Qpd3JpdGUsIF9PX1dST05MWSk7CisgICAgICAgIGlmIChmZHNbMF0gPT0gLTEgfHwgZmRzWzFdID09IC0xKSB7CisgICAgICAgICAgICBDbG9zZUhhbmRsZShyZWFkKTsKKyAgICAgICAgICAgIENsb3NlSGFuZGxlKHdyaXRlKTsKKyAgICAgICAgICAgIG9rID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworCisgICAgaWYgKCFvaykKKyAgICAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworI2Vsc2UKKworI2lmZGVmIEhBVkVfUElQRTIKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgcmVzID0gcGlwZTIoZmRzLCBPX0NMT0VYRUMpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmVzICE9IDAgJiYgZXJybm8gPT0gRU5PU1lTKQorICAgIHsKKyNlbmRpZgorICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIHJlcyA9IHBpcGUoZmRzKTsKKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAocmVzID09IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKGZkc1swXSwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICAgICAgY2xvc2UoZmRzWzBdKTsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMV0pOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmRzWzFdLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgICAgICBjbG9zZShmZHNbMF0pOworICAgICAgICAgICAgICAgIGNsb3NlKGZkc1sxXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNpZmRlZiBIQVZFX1BJUEUyCisgICAgfQorI2VuZGlmCisKKyAgICBpZiAocmVzICE9IDApCisgICAgICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisjZW5kaWYgLyogIU1TX1dJTkRPV1MgKi8KKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKGlpKSIsIGZkc1swXSwgZmRzWzFdKTsKIH0KICNlbmRpZiAgLyogSEFWRV9QSVBFICovCiAKQEAgLTg1OTcsOSArODY1Niw5IEBACiAKICNpZiBkZWZpbmVkKEhBVkVfTUtOT0QpICYmIGRlZmluZWQoSEFWRV9NQUtFREVWKQogUHlEb2NfU1RSVkFSKHBvc2l4X21rbm9kX19kb2NfXywKLSJta25vZChmaWxlbmFtZSwgbW9kZT0wbzYwMCwgZGV2aWNlPTAsICosIGRpcl9mZD1Ob25lKVxuXG5cCisibWtub2QocGF0aCwgbW9kZT0wbzYwMCwgZGV2aWNlPTAsICosIGRpcl9mZD1Ob25lKVxuXG5cCiBDcmVhdGUgYSBmaWxlc3lzdGVtIG5vZGUgKGZpbGUsIGRldmljZSBzcGVjaWFsIGZpbGUgb3IgbmFtZWQgcGlwZSlcblwKLW5hbWVkIGZpbGVuYW1lLiBtb2RlIHNwZWNpZmllcyBib3RoIHRoZSBwZXJtaXNzaW9ucyB0byB1c2UgYW5kIHRoZVxuXAorbmFtZWQgcGF0aC4gbW9kZSBzcGVjaWZpZXMgYm90aCB0aGUgcGVybWlzc2lvbnMgdG8gdXNlIGFuZCB0aGVcblwKIHR5cGUgb2Ygbm9kZSB0byBiZSBjcmVhdGVkLCBiZWluZyBjb21iaW5lZCAoYml0d2lzZSBPUikgd2l0aCBvbmUgb2ZcblwKIFNfSUZSRUcsIFNfSUZDSFIsIFNfSUZCTEssIGFuZCBTX0lGSUZPLiBGb3IgU19JRkNIUiBhbmQgU19JRkJMSyxcblwKIGRldmljZSBkZWZpbmVzIHRoZSBuZXdseSBjcmVhdGVkIGRldmljZSBzcGVjaWFsIGZpbGUgKHByb2JhYmx5IHVzaW5nXG5cCkBAIC04NjE2LDE2ICs4Njc1LDE2IEBACiB7CiAgICAgcGF0aF90IHBhdGg7CiAgICAgaW50IG1vZGUgPSAwNjY2OwotICAgIGludCBkZXZpY2UgPSAwOworICAgIGRldl90IGRldmljZSA9IDA7CiAgICAgaW50IGRpcl9mZCA9IERFRkFVTFRfRElSX0ZEOwogICAgIGludCByZXN1bHQ7CiAgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibW9kZSIsICJkZXZpY2UiLCAiZGlyX2ZkIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZ8aWkkTyY6bWtub2QiLCBrZXl3b3JkcywKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJnxpTyYkTyY6bWtub2QiLCBrZXl3b3JkcywKICAgICAgICAgcGF0aF9jb252ZXJ0ZXIsICZwYXRoLAotICAgICAgICAmbW9kZSwgJmRldmljZSwKKyAgICAgICAgJm1vZGUsIF9QeV9EZXZfQ29udmVydGVyLCAmZGV2aWNlLAogI2lmZGVmIEhBVkVfTUtOT0RBVAogICAgICAgICBkaXJfZmRfY29udmVydGVyLCAmZGlyX2ZkCiAjZWxzZQpAQCAtODY2NSw4ICs4NzI0LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBwb3NpeF9tYWpvcihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgaW50IGRldmljZTsKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6bWFqb3IiLCAmZGV2aWNlKSkKKyAgICBkZXZfdCBkZXZpY2U7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPJjptYWpvciIsIF9QeV9EZXZfQ29udmVydGVyLCAmZGV2aWNlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygobG9uZyltYWpvcihkZXZpY2UpKTsKIH0KQEAgLTg2NzgsOCArODczNyw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcG9zaXhfbWlub3IoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGludCBkZXZpY2U7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpOm1pbm9yIiwgJmRldmljZSkpCisgICAgZGV2X3QgZGV2aWNlOworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6bWlub3IiLCBfUHlfRGV2X0NvbnZlcnRlciwgJmRldmljZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpbWlub3IoZGV2aWNlKSk7CiB9CkBAIC04Njk0LDcgKzg3NTMsNyBAQAogICAgIGludCBtYWpvciwgbWlub3I7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpaTptYWtlZGV2IiwgJm1ham9yLCAmbWlub3IpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKChsb25nKW1ha2VkZXYobWFqb3IsIG1pbm9yKSk7CisgICAgcmV0dXJuIF9QeUxvbmdfRnJvbURldihtYWtlZGV2KG1ham9yLCBtaW5vcikpOwogfQogI2VuZGlmIC8qIGRldmljZSBtYWNyb3MgKi8KIApAQCAtODc0MSw2ICs4ODAwLDcgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJsZW5ndGgiLCBOVUxMfTsKIAogICAgIG1lbXNldCgmcGF0aCwgMCwgc2l6ZW9mKHBhdGgpKTsKKyAgICBwYXRoLmZ1bmN0aW9uX25hbWUgPSAidHJ1bmNhdGUiOwogI2lmZGVmIEhBVkVfRlRSVU5DQVRFCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTg3NTgsNyArODgxOCw3IEBACiAgICAgICAgIHJlcyA9IHRydW5jYXRlKHBhdGgubmFycm93LCBsZW5ndGgpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgaWYgKHJlcyA8IDApCi0gICAgICAgIHJlc3VsdCA9IHBhdGhfcG9zaXhfZXJyb3IoInRydW5jYXRlIiwgJnBhdGgpOworICAgICAgICByZXN1bHQgPSBwYXRoX2Vycm9yKCZwYXRoKTsKICAgICBlbHNlIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICByZXN1bHQgPSBQeV9Ob25lOwpAQCAtODc2OCw3ICs4ODI4LDE1IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfUE9TSVhfRkFMTE9DQVRFCisvKiBJc3N1ZSAjMjIzOTY6IE9uIDMyLWJpdCBBSVggcGxhdGZvcm0sIHRoZSBwcm90b3R5cGVzIG9mIG9zLnBvc2l4X2ZhZHZpc2UoKQorICAgYW5kIG9zLnBvc2l4X2ZhbGxvY2F0ZSgpIGluIHN5c3RlbSBoZWFkZXJzIGFyZSB3cm9uZyBpZiBfTEFSR0VfRklMRVMgaXMKKyAgIGRlZmluZWQsIHdoaWNoIGlzIHRoZSBjYXNlIGluIFB5dGhvbiBvbiBBSVguIEFJWCBidWcgcmVwb3J0OgorICAgaHR0cDovL3d3dy0wMS5pYm0uY29tL3N1cHBvcnQvZG9jdmlldy53c3M/dWlkPWlzZzFJVjU2MTcwICovCisjaWYgZGVmaW5lZChfQUlYKSAmJiBkZWZpbmVkKF9MQVJHRV9GSUxFUykgJiYgIWRlZmluZWQoX182NEJJVF9fKQorIyAgZGVmaW5lIFBPU0lYX0ZBRFZJU0VfQUlYX0JVRworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfUE9TSVhfRkFMTE9DQVRFKSAmJiAhZGVmaW5lZChQT1NJWF9GQURWSVNFX0FJWF9CVUcpCiBQeURvY19TVFJWQVIocG9zaXhfcG9zaXhfZmFsbG9jYXRlX19kb2NfXywKICJwb3NpeF9mYWxsb2NhdGUoZmQsIG9mZnNldCwgbGVuKVxuXG5cCiBFbnN1cmVzIHRoYXQgZW5vdWdoIGRpc2sgc3BhY2UgaXMgYWxsb2NhdGVkIGZvciB0aGUgZmlsZSBzcGVjaWZpZWQgYnkgZmRcblwKQEAgLTg3OTUsNyArODg2Myw3IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIEhBVkVfUE9TSVhfRkFEVklTRQorI2lmIGRlZmluZWQoSEFWRV9QT1NJWF9GQURWSVNFKSAmJiAhZGVmaW5lZChQT1NJWF9GQURWSVNFX0FJWF9CVUcpCiBQeURvY19TVFJWQVIocG9zaXhfcG9zaXhfZmFkdmlzZV9fZG9jX18sCiAicG9zaXhfZmFkdmlzZShmZCwgb2Zmc2V0LCBsZW4sIGFkdmljZSlcblxuXAogQW5ub3VuY2VzIGFuIGludGVudGlvbiB0byBhY2Nlc3MgZGF0YSBpbiBhIHNwZWNpZmljIHBhdHRlcm4gdGh1cyBhbGxvd2luZ1xuXApAQCAtOTE4MSw2ICs5MjQ5LDEwIEBACiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTSh2LCA4LCBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIHN0LmZfZmxhZykpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgOSwgUHlMb25nX0Zyb21Mb25nKChsb25nKSBzdC5mX25hbWVtYXgpKTsKICNlbmRpZgorICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmV0dXJuIHY7CiB9CkBAIC05MjMwLDYgKzkzMDIsNyBAQAogICAgIHN0cnVjdCBzdGF0dmZzIHN0OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJzdGF0dmZzIjsKICNpZmRlZiBIQVZFX0ZTVEFUVkZTCiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAjZW5kaWYKQEAgLTkyNTYsNyArOTMyOSw3IEBACiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9wb3NpeF9lcnJvcigic3RhdHZmcyIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTk0OTMsNiArOTU2Niw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAibmFtZSIsIE5VTEx9OwogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOworICAgIHBhdGguZnVuY3Rpb25fbmFtZSA9ICJwYXRoY29uZiI7CiAjaWZkZWYgSEFWRV9GUEFUSENPTkYKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICNlbmRpZgpAQCAtOTUxMyw3ICs5NTg3LDcgQEAKICAgICAgICAgICAgIC8qIGNvdWxkIGJlIGEgcGF0aCBvciBuYW1lIHByb2JsZW0gKi8KICAgICAgICAgICAgIHBvc2l4X2Vycm9yKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IHBhdGhfcG9zaXhfZXJyb3IoInBhdGhjb25mIiwgJnBhdGgpOworICAgICAgICAgICAgcmVzdWx0ID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gUHlMb25nX0Zyb21Mb25nKGxpbWl0KTsKQEAgLTk2OTUsNyArOTc2OSw3IEBACiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IG5hbWU7CiAgICAgY2hhciBidWZmZXJbMjU1XTsKLSAgICBpbnQgbGVuOworICAgIHNpemVfdCBsZW47CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk8mOmNvbmZzdHIiLCBjb252X2NvbmZzdHJfY29uZm5hbWUsICZuYW1lKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC05NzEyLDcgKzk3ODYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCh1bnNpZ25lZCBpbnQpbGVuID49IHNpemVvZihidWZmZXIpKSB7CisgICAgaWYgKGxlbiA+PSBzaXplb2YoYnVmZmVyKSkgewogICAgICAgICBjaGFyICpidWYgPSBQeU1lbV9NYWxsb2MobGVuKTsKICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMDI0Miw3ICsxMDMxNiw3IEBACiAgICAgaW50IG5hbWU7CiAKICAgICBpZiAoUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyY6c3lzY29uZiIsIGNvbnZfc3lzY29uZl9jb25mbmFtZSwgJm5hbWUpKSB7Ci0gICAgICAgIGludCB2YWx1ZTsKKyAgICAgICAgbG9uZyB2YWx1ZTsKIAogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIHZhbHVlID0gc3lzY29uZihuYW1lKTsKQEAgLTEwMjU3LDcgKzEwMzMxLDcgQEAKIAogCiAvKiBUaGlzIGNvZGUgaXMgdXNlZCB0byBlbnN1cmUgdGhhdCB0aGUgdGFibGVzIG9mIGNvbmZpZ3VyYXRpb24gdmFsdWUgbmFtZXMKLSAqIGFyZSBpbiBzb3J0ZWQgb3JkZXIgYXMgcmVxdWlyZWQgYnkgY29udl9jb25mbmFtZSgpLCBhbmQgYWxzbyB0byBidWlsZCB0aGUKKyAqIGFyZSBpbiBzb3J0ZWQgb3JkZXIgYXMgcmVxdWlyZWQgYnkgY29udl9jb25mbmFtZSgpLCBhbmQgYWxzbyB0byBidWlsZAogICogdGhlIGV4cG9ydGVkIGRpY3Rpb25hcmllcyB0aGF0IGFyZSB1c2VkIHRvIHB1Ymxpc2ggaW5mb3JtYXRpb24gYWJvdXQgdGhlCiAgKiBuYW1lcyBhdmFpbGFibGUgb24gdGhlIGhvc3QgcGxhdGZvcm0uCiAgKgpAQCAtMTA1NzIsNiArMTA2NDYsOCBAQAogCiAgICAgbWVtc2V0KCZwYXRoLCAwLCBzaXplb2YocGF0aCkpOwogICAgIG1lbXNldCgmYXR0cmlidXRlLCAwLCBzaXplb2YoYXR0cmlidXRlKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImdldHhhdHRyIjsKKyAgICBhdHRyaWJ1dGUuZnVuY3Rpb25fbmFtZSA9ICJnZXR4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAiTyZPJnwkcDpnZXR4YXR0ciIsIGtleXdvcmRzLAogICAgICAgICBwYXRoX2NvbnZlcnRlciwgJnBhdGgsCkBAIC0xMDU4OCw3ICsxMDY2NCw3IEBACiAgICAgICAgIHN0YXRpYyBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplc1tdID0gezEyOCwgWEFUVFJfU0laRV9NQVgsIDB9OwogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemVzW2ldOwogICAgICAgICBpZiAoIWJ1ZmZlcl9zaXplKSB7Ci0gICAgICAgICAgICBwYXRoX2Vycm9yKCJnZXR4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAgICAgICAgIGJ1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgYnVmZmVyX3NpemUpOwpAQCAtMTA2MTAsNyArMTA2ODYsNyBAQAogICAgICAgICAgICAgYnVmZmVyID0gTlVMTDsKICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFUkFOR0UpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBwYXRoX2Vycm9yKCJnZXR4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgZ290byBleGl0OwogICAgICAgICB9CiAKQEAgLTEwNjQ5LDYgKzEwNzI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmxhZ3MiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInNldHhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBtZW1zZXQoJmF0dHJpYnV0ZSwgMCwgc2l6ZW9mKGF0dHJpYnV0ZSkpOwogICAgIG1lbXNldCgmdmFsdWUsIDAsIHNpemVvZih2YWx1ZSkpOwpAQCAtMTA2NzYsNyArMTA3NTMsNyBAQAogICAgIFB5X0VORF9BTExPV19USFJFQURTOwogCiAgICAgaWYgKHJlc3VsdCkgewotICAgICAgICByZXR1cm5fdmFsdWUgPSBwYXRoX2Vycm9yKCJzZXR4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKQEAgLTEwNzEwLDcgKzEwNzg3LDkgQEAKICAgICBzdGF0aWMgY2hhciAqa2V5d29yZHNbXSA9IHsicGF0aCIsICJhdHRyaWJ1dGUiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gInJlbW92ZXhhdHRyIjsKICAgICBtZW1zZXQoJmF0dHJpYnV0ZSwgMCwgc2l6ZW9mKGF0dHJpYnV0ZSkpOworICAgIGF0dHJpYnV0ZS5mdW5jdGlvbl9uYW1lID0gInJlbW92ZXhhdHRyIjsKICAgICBwYXRoLmFsbG93X2ZkID0gMTsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPJk8mfCRwOnJlbW92ZXhhdHRyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXl3b3JkcywKQEAgLTEwNzMyLDcgKzEwODExLDcgQEAKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUzsKIAogICAgIGlmIChyZXN1bHQpIHsKLSAgICAgICAgcmV0dXJuX3ZhbHVlID0gcGF0aF9lcnJvcigicmVtb3ZleGF0dHIiLCAmcGF0aCk7CisgICAgICAgIHJldHVybl92YWx1ZSA9IHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgfQogCkBAIC0xMDc2OCw2ICsxMDg0Nyw3IEBACiAgICAgc3RhdGljIGNoYXIgKmtleXdvcmRzW10gPSB7InBhdGgiLCAiZm9sbG93X3N5bWxpbmtzIiwgTlVMTH07CiAKICAgICBtZW1zZXQoJnBhdGgsIDAsIHNpemVvZihwYXRoKSk7CisgICAgcGF0aC5mdW5jdGlvbl9uYW1lID0gImxpc3R4YXR0ciI7CiAgICAgcGF0aC5hbGxvd19mZCA9IDE7CiAgICAgcGF0aC5mZCA9IC0xOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxPJiRwOmxpc3R4YXR0ciIsIGtleXdvcmRzLApAQCAtMTA3ODYsNyArMTA4NjYsNyBAQAogICAgICAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9zaXplID0gYnVmZmVyX3NpemVzW2ldOwogICAgICAgICBpZiAoIWJ1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgICAvKiBFUkFOR0UgKi8KLSAgICAgICAgICAgIHBhdGhfZXJyb3IoImxpc3R4YXR0ciIsICZwYXRoKTsKKyAgICAgICAgICAgIHBhdGhfZXJyb3IoJnBhdGgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnVmZmVyID0gUHlNZW1fTUFMTE9DKGJ1ZmZlcl9zaXplKTsKQEAgLTEwODEwLDcgKzEwODkwLDcgQEAKICAgICAgICAgICAgICAgICBidWZmZXIgPSBOVUxMOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcGF0aF9lcnJvcigibGlzdHhhdHRyIiwgJnBhdGgpOworICAgICAgICAgICAgcGF0aF9lcnJvcigmcGF0aCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xMDk4OCwxNCArMTEwNjgsMTU0IEBACiB9CiAjZW5kaWYgLyogZGVmaW5lZChURVJNU0laRV9VU0VfQ09OSU8pIHx8IGRlZmluZWQoVEVSTVNJWkVfVVNFX0lPQ1RMKSAqLwogCitQeURvY19TVFJWQVIocG9zaXhfY3B1X2NvdW50X19kb2NfXywKKyJjcHVfY291bnQoKSAtPiBpbnRlZ2VyXG5cblwKK1JldHVybiB0aGUgbnVtYmVyIG9mIENQVXMgaW4gdGhlIHN5c3RlbSwgb3IgTm9uZSBpZiB0aGlzIHZhbHVlIGNhbm5vdCBiZVxuXAorZXN0YWJsaXNoZWQuIik7CisKK3N0YXRpYyBQeU9iamVjdCAqCitwb3NpeF9jcHVfY291bnQoUHlPYmplY3QgKnNlbGYpCit7CisgICAgaW50IG5jcHUgPSAwOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBTWVNURU1fSU5GTyBzeXNpbmZvOworICAgIEdldFN5c3RlbUluZm8oJnN5c2luZm8pOworICAgIG5jcHUgPSBzeXNpbmZvLmR3TnVtYmVyT2ZQcm9jZXNzb3JzOworI2VsaWYgZGVmaW5lZChfX2hwdXgpCisgICAgbmNwdSA9IG1wY3RsKE1QQ19HRVROVU1TUFVTLCBOVUxMLCBOVUxMKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9TWVNDT05GKSAmJiBkZWZpbmVkKF9TQ19OUFJPQ0VTU09SU19PTkxOKQorICAgIG5jcHUgPSBzeXNjb25mKF9TQ19OUFJPQ0VTU09SU19PTkxOKTsKKyNlbGlmIGRlZmluZWQoX19EcmFnb25GbHlfXykgfHwgXAorICAgICAgZGVmaW5lZChfX09wZW5CU0RfXykgICB8fCBcCisgICAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgIHx8IFwKKyAgICAgIGRlZmluZWQoX19OZXRCU0RfXykgICAgfHwgXAorICAgICAgZGVmaW5lZChfX0FQUExFX18pCisgICAgaW50IG1pYlsyXTsKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKG5jcHUpOworICAgIG1pYlswXSA9IENUTF9IVzsKKyAgICBtaWJbMV0gPSBIV19OQ1BVOworICAgIGlmIChzeXNjdGwobWliLCAyLCAmbmNwdSwgJmxlbiwgTlVMTCwgMCkgIT0gMCkKKyAgICAgICAgbmNwdSA9IDA7CisjZW5kaWYKKyAgICBpZiAobmNwdSA+PSAxKQorICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKG5jcHUpOworICAgIGVsc2UKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7Cit9CisKK1B5RG9jX1NUUlZBUihnZXRfaW5oZXJpdGFibGVfX2RvY19fLAorICAgICJnZXRfaW5oZXJpdGFibGUoZmQpIC0+IGJvb2xcbiIgXAorICAgICJcbiIgXAorICAgICJHZXQgdGhlIGNsb3NlLW9uLWV4ZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9nZXRfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmZDsKKyAgICBpbnQgaW5oZXJpdGFibGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImk6Z2V0X2luaGVyaXRhYmxlIiwgJmZkKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgaW5oZXJpdGFibGUgPSBfUHlfZ2V0X2luaGVyaXRhYmxlKGZkKTsKKyAgICBpZiAoaW5oZXJpdGFibGUgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGluaGVyaXRhYmxlKTsKK30KKworUHlEb2NfU1RSVkFSKHNldF9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgInNldF9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUpXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9zZXRfaW5oZXJpdGFibGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGludCBmZCwgaW5oZXJpdGFibGU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlpOnNldF9pbmhlcml0YWJsZSIsICZmZCwgJmluaGVyaXRhYmxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIV9QeVZlcmlmeV9mZChmZCkpCisgICAgICAgIHJldHVybiBwb3NpeF9lcnJvcigpOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCBOVUxMKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCisKKyNpZmRlZiBNU19XSU5ET1dTCitQeURvY19TVFJWQVIoZ2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX18sCisgICAgImdldF9oYW5kbGVfaW5oZXJpdGFibGUoZmQpIC0+IGJvb2xcbiIgXAorICAgICJcbiIgXAorICAgICJHZXQgdGhlIGNsb3NlLW9uLWV4ZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9nZXRfaGFuZGxlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBQeV9pbnRwdHJfdCBoYW5kbGU7CisgICAgRFdPUkQgZmxhZ3M7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgX1B5X1BBUlNFX0lOVFBUUiAiOmdldF9oYW5kbGVfaW5oZXJpdGFibGUiLCAmaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIUdldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpaGFuZGxlLCAmZmxhZ3MpKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGZsYWdzICYgSEFORExFX0ZMQUdfSU5IRVJJVCk7Cit9CisKK1B5RG9jX1NUUlZBUihzZXRfaGFuZGxlX2luaGVyaXRhYmxlX19kb2NfXywKKyAgICAic2V0X2hhbmRsZV9pbmhlcml0YWJsZShmZCwgaW5oZXJpdGFibGUpXG4iIFwKKyAgICAiXG4iIFwKKyAgICAiU2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgaGFuZGxlLiIpOworCitzdGF0aWMgUHlPYmplY3QqCitwb3NpeF9zZXRfaGFuZGxlX2luaGVyaXRhYmxlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgaW5oZXJpdGFibGUgPSAxOworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKKworICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBfUHlfUEFSU0VfSU5UUFRSICJpOnNldF9oYW5kbGVfaW5oZXJpdGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmaW5oZXJpdGFibGUpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgZmxhZ3MgPSBIQU5ETEVfRkxBR19JTkhFUklUOworICAgIGVsc2UKKyAgICAgICAgZmxhZ3MgPSAwOworICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSloYW5kbGUsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIGZsYWdzKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorI2VuZGlmICAgLyogTVNfV0lORE9XUyAqLworCisKKy8qW2NsaW5pYyBpbnB1dF0KK2R1bXAgYnVmZmVyCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKKyNpZm5kZWYgT1NfVFRZTkFNRV9NRVRIT0RERUYKKyAgICAjZGVmaW5lIE9TX1RUWU5BTUVfTUVUSE9EREVGCisjZW5kaWYgLyogIWRlZmluZWQoT1NfVFRZTkFNRV9NRVRIT0RERUYpICovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9NWQwNzFiYmM4ZjQ5ZWExMiBpbnB1dD01MjRjZTJlMDIxZTRlYmE2XSovCisKIAogc3RhdGljIFB5TWV0aG9kRGVmIHBvc2l4X21ldGhvZHNbXSA9IHsKLSAgICB7ImFjY2VzcyIsICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9hY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfYWNjZXNzX19kb2NfX30sCi0jaWZkZWYgSEFWRV9UVFlOQU1FCi0gICAgeyJ0dHluYW1lIiwgICAgICAgICBwb3NpeF90dHluYW1lLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3R0eW5hbWVfX2RvY19ffSwKLSNlbmRpZgorCisgICAgT1NfU1RBVF9NRVRIT0RERUYKKyAgICBPU19BQ0NFU1NfTUVUSE9EREVGCisgICAgT1NfVFRZTkFNRV9NRVRIT0RERUYKKwogICAgIHsiY2hkaXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2NoZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X2NoZGlyX19kb2NfX30sCkBAIC0xMTAzMywxMiArMTEyNTMsMTAgQEAKICNpZmRlZiBIQVZFX0NURVJNSUQKICAgICB7ImN0ZXJtaWQiLCAgICAgICAgIHBvc2l4X2N0ZXJtaWQsIE1FVEhfTk9BUkdTLCBwb3NpeF9jdGVybWlkX19kb2NfX30sCiAjZW5kaWYKLSNpZmRlZiBIQVZFX0dFVENXRAogICAgIHsiZ2V0Y3dkIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2dldGN3ZF91bmljb2RlLAogICAgIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRjd2RfX2RvY19ffSwKICAgICB7ImdldGN3ZGIiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9nZXRjd2RfYnl0ZXMsCiAgICAgTUVUSF9OT0FSR1MsIHBvc2l4X2dldGN3ZGJfX2RvY19ffSwKLSNlbmRpZgogI2lmIGRlZmluZWQoSEFWRV9MSU5LKSB8fCBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgeyJsaW5rIiwgICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfbGluaywKICAgICAgICAgICAgICAgICAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCkBAIC0xMTA4MSw5ICsxMTI5OSw2IEBACiAgICAgeyJybWRpciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcG9zaXhfcm1kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfcm1kaXJfX2RvY19ffSwKLSAgICB7InN0YXQiLCAgICAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9zdGF0LAotICAgICAgICAgICAgICAgICAgICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l4X3N0YXRfX2RvY19ffSwKICAgICB7InN0YXRfZmxvYXRfdGltZXMiLCBzdGF0X2Zsb2F0X3RpbWVzLCBNRVRIX1ZBUkFSR1MsIHN0YXRfZmxvYXRfdGltZXNfX2RvY19ffSwKICNpZiBkZWZpbmVkKEhBVkVfU1lNTElOSykKICAgICB7InN5bWxpbmsiLCAgICAgICAgIChQeUNGdW5jdGlvbilwb3NpeF9zeW1saW5rLApAQCAtMTExMTgsMTAgKzExMzMzLDYgQEAKICNpZmRlZiBIQVZFX1NQQVdOVgogICAgIHsic3Bhd252IiwgICAgICAgICAgcG9zaXhfc3Bhd252LCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3NwYXdudl9fZG9jX199LAogICAgIHsic3Bhd252ZSIsICAgICAgICAgcG9zaXhfc3Bhd252ZSwgTUVUSF9WQVJBUkdTLCBwb3NpeF9zcGF3bnZlX19kb2NfX30sCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICB7InNwYXdudnAiLCAgICAgICAgIHBvc2l4X3NwYXdudnAsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252cF9fZG9jX199LAotICAgIHsic3Bhd252cGUiLCAgICAgICAgcG9zaXhfc3Bhd252cGUsIE1FVEhfVkFSQVJHUywgcG9zaXhfc3Bhd252cGVfX2RvY19ffSwKLSNlbmRpZiAvKiBQWU9TX09TMiAqLwogI2VuZGlmIC8qIEhBVkVfU1BBV05WICovCiAjaWZkZWYgSEFWRV9GT1JLMQogICAgIHsiZm9yazEiLCAgICAgICBwb3NpeF9mb3JrMSwgTUVUSF9OT0FSR1MsIHBvc2l4X2ZvcmsxX19kb2NfX30sCkBAIC0xMTI2OSw3ICsxMTQ4MCw4IEBACiAgICAgeyJjbG9zZXJhbmdlIiwgICAgICBwb3NpeF9jbG9zZXJhbmdlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X2Nsb3NlcmFuZ2VfX2RvY19ffSwKICAgICB7ImRldmljZV9lbmNvZGluZyIsIGRldmljZV9lbmNvZGluZywgTUVUSF9WQVJBUkdTLCBkZXZpY2VfZW5jb2RpbmdfX2RvY19ffSwKICAgICB7ImR1cCIsICAgICAgICAgICAgIHBvc2l4X2R1cCwgTUVUSF9WQVJBUkdTLCBwb3NpeF9kdXBfX2RvY19ffSwKLSAgICB7ImR1cDIiLCAgICAgICAgICAgIHBvc2l4X2R1cDIsIE1FVEhfVkFSQVJHUywgcG9zaXhfZHVwMl9fZG9jX199LAorICAgIHsiZHVwMiIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXBvc2l4X2R1cDIsCisgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBwb3NpeF9kdXAyX19kb2NfX30sCiAjaWZkZWYgSEFWRV9MT0NLRgogICAgIHsibG9ja2YiLCAgICAgICAgICAgcG9zaXhfbG9ja2YsIE1FVEhfVkFSQVJHUywgcG9zaXhfbG9ja2ZfX2RvY19ffSwKICNlbmRpZgpAQCAtMTEzMjMsMTAgKzExNTM1LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLAogICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXhfdHJ1bmNhdGVfX2RvY19ffSwKICNlbmRpZgotI2lmZGVmIEhBVkVfUE9TSVhfRkFMTE9DQVRFCisjaWYgZGVmaW5lZChIQVZFX1BPU0lYX0ZBTExPQ0FURSkgJiYgIWRlZmluZWQoUE9TSVhfRkFEVklTRV9BSVhfQlVHKQogICAgIHsicG9zaXhfZmFsbG9jYXRlIiwgcG9zaXhfcG9zaXhfZmFsbG9jYXRlLCBNRVRIX1ZBUkFSR1MsIHBvc2l4X3Bvc2l4X2ZhbGxvY2F0ZV9fZG9jX199LAogI2VuZGlmCi0jaWZkZWYgSEFWRV9QT1NJWF9GQURWSVNFCisjaWYgZGVmaW5lZChIQVZFX1BPU0lYX0ZBRFZJU0UpICYmICFkZWZpbmVkKFBPU0lYX0ZBRFZJU0VfQUlYX0JVRykKICAgICB7InBvc2l4X2ZhZHZpc2UiLCAgIHBvc2l4X3Bvc2l4X2ZhZHZpc2UsIE1FVEhfVkFSQVJHUywgcG9zaXhfcG9zaXhfZmFkdmlzZV9fZG9jX199LAogI2VuZGlmCiAjaWZkZWYgSEFWRV9QVVRFTlYKQEAgLTExNDAwLDkgKzExNjEyLDkgQEAKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgeyJfZ2V0ZnVsbHBhdGhuYW1lIiwgICAgICAgIHBvc2l4X19nZXRmdWxscGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgTlVMTH0sCiAgICAgeyJfZ2V0ZmluYWxwYXRobmFtZSIsICAgICAgIHBvc2l4X19nZXRmaW5hbHBhdGhuYW1lLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAotICAgIHsiX2dldGZpbGVpbmZvcm1hdGlvbiIsICAgICBwb3NpeF9fZ2V0ZmlsZWluZm9ybWF0aW9uLCBNRVRIX1ZBUkFSR1MsIE5VTEx9LAogICAgIHsiX2lzZGlyIiwgICAgICAgICAgICAgICAgICBwb3NpeF9faXNkaXIsIE1FVEhfVkFSQVJHUywgcG9zaXhfX2lzZGlyX19kb2NfX30sCiAgICAgeyJfZ2V0ZGlza3VzYWdlIiwgICAgICAgICAgIHdpbjMyX19nZXRkaXNrdXNhZ2UsIE1FVEhfVkFSQVJHUywgd2luMzJfX2dldGRpc2t1c2FnZV9fZG9jX199LAorICAgIHsiX2dldHZvbHVtZXBhdGhuYW1lIiwgICAgICBwb3NpeF9fZ2V0dm9sdW1lcGF0aG5hbWUsIE1FVEhfVkFSQVJHUywgcG9zaXhfX2dldHZvbHVtZXBhdGhuYW1lX19kb2NfX30sCiAjZW5kaWYKICNpZmRlZiBIQVZFX0dFVExPQURBVkcKICAgICB7ImdldGxvYWRhdmciLCAgICAgIHBvc2l4X2dldGxvYWRhdmcsIE1FVEhfTk9BUkdTLCBwb3NpeF9nZXRsb2FkYXZnX19kb2NfX30sCkBAIC0xMTQzOCw2OSArMTE2NTAsMjAgQEAKICNpZiBkZWZpbmVkKFRFUk1TSVpFX1VTRV9DT05JTykgfHwgZGVmaW5lZChURVJNU0laRV9VU0VfSU9DVEwpCiAgICAgeyJnZXRfdGVybWluYWxfc2l6ZSIsIGdldF90ZXJtaW5hbF9zaXplLCBNRVRIX1ZBUkFSR1MsIHRlcm1zaXplX19kb2NfX30sCiAjZW5kaWYKKyAgICB7ImNwdV9jb3VudCIsIChQeUNGdW5jdGlvbilwb3NpeF9jcHVfY291bnQsCisgICAgICAgICAgICAgICAgICBNRVRIX05PQVJHUywgcG9zaXhfY3B1X2NvdW50X19kb2NfX30sCisgICAgeyJnZXRfaW5oZXJpdGFibGUiLCBwb3NpeF9nZXRfaW5oZXJpdGFibGUsIE1FVEhfVkFSQVJHUywgZ2V0X2luaGVyaXRhYmxlX19kb2NfX30sCisgICAgeyJzZXRfaW5oZXJpdGFibGUiLCBwb3NpeF9zZXRfaW5oZXJpdGFibGUsIE1FVEhfVkFSQVJHUywgc2V0X2luaGVyaXRhYmxlX19kb2NfX30sCisjaWZkZWYgTVNfV0lORE9XUworICAgIHsiZ2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsIHBvc2l4X2dldF9oYW5kbGVfaW5oZXJpdGFibGUsCisgICAgIE1FVEhfVkFSQVJHUywgZ2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX199LAorICAgIHsic2V0X2hhbmRsZV9pbmhlcml0YWJsZSIsIHBvc2l4X3NldF9oYW5kbGVfaW5oZXJpdGFibGUsCisgICAgIE1FVEhfVkFSQVJHUywgc2V0X2hhbmRsZV9pbmhlcml0YWJsZV9fZG9jX199LAorI2VuZGlmCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgIC8qIFNlbnRpbmVsICovCiB9OwogCiAKLXN0YXRpYyBpbnQKLWlucyhQeU9iamVjdCAqbW9kdWxlLCBjaGFyICpzeW1ib2wsIGxvbmcgdmFsdWUpCi17Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG1vZHVsZSwgc3ltYm9sLCB2YWx1ZSk7Ci19Ci0KLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotLyogSW5zZXJ0IFBsYXRmb3JtLVNwZWNpZmljIENvbnN0YW50IFZhbHVlcyAoU3RyaW5ncyAmIE51bWJlcnMpIG9mIENvbW1vbiBVc2UgKi8KLXN0YXRpYyBpbnQgaW5zZXJ0dmFsdWVzKFB5T2JqZWN0ICptb2R1bGUpCi17Ci0gICAgQVBJUkVUICAgIHJjOwotICAgIFVMT05HICAgICB2YWx1ZXNbUVNWX01BWCsxXTsKLSAgICBQeU9iamVjdCAqdjsKLSAgICBjaGFyICAgICAqdmVyLCB0bXBbNTBdOwotCi0gICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgIHJjID0gRG9zUXVlcnlTeXNJbmZvKDFMLCBRU1ZfTUFYLCAmdmFsdWVzWzFdLCBzaXplb2YoVUxPTkcpICogUVNWX01BWCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQotICAgIGlmIChyYyAhPSBOT19FUlJPUikgewotICAgICAgICBvczJfZXJyb3IocmMpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKGlucyhtb2R1bGUsICJtZW1pbnN0YWxsZWQiLCB2YWx1ZXNbUVNWX1RPVFBIWVNNRU1dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWVta2VybmVsIiwgICAgdmFsdWVzW1FTVl9UT1RSRVNNRU1dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAibWVtdmlydHVhbCIsICAgdmFsdWVzW1FTVl9UT1RBVkFJTE1FTV0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtYXhwYXRobGVuIiwgICB2YWx1ZXNbUVNWX01BWF9QQVRIX0xFTkdUSF0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJtYXhuYW1lbGVuIiwgICB2YWx1ZXNbUVNWX01BWF9DT01QX0xFTkdUSF0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhtb2R1bGUsICJyZXZpc2lvbiIsICAgICB2YWx1ZXNbUVNWX1ZFUlNJT05fUkVWSVNJT05dKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMobW9kdWxlLCAidGltZXNsaWNlIiwgICAgdmFsdWVzW1FTVl9NSU5fU0xJQ0VdKSkgcmV0dXJuIC0xOwotCi0gICAgc3dpdGNoICh2YWx1ZXNbUVNWX1ZFUlNJT05fTUlOT1JdKSB7Ci0gICAgY2FzZSAwOiAgdmVyID0gIjIuMDAiOyBicmVhazsKLSAgICBjYXNlIDEwOiB2ZXIgPSAiMi4xMCI7IGJyZWFrOwotICAgIGNhc2UgMTE6IHZlciA9ICIyLjExIjsgYnJlYWs7Ci0gICAgY2FzZSAzMDogdmVyID0gIjMuMDAiOyBicmVhazsKLSAgICBjYXNlIDQwOiB2ZXIgPSAiNC4wMCI7IGJyZWFrOwotICAgIGNhc2UgNTA6IHZlciA9ICI1LjAwIjsgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUHlPU19zbnByaW50Zih0bXAsIHNpemVvZih0bXApLAotICAgICAgICAgICAgICAgICAgICAgICIlZC0lZCIsIHZhbHVlc1tRU1ZfVkVSU0lPTl9NQUpPUl0sCi0gICAgICAgICAgICAgICAgICAgICAgdmFsdWVzW1FTVl9WRVJTSU9OX01JTk9SXSk7Ci0gICAgICAgIHZlciA9ICZ0bXBbMF07Ci0gICAgfQotCi0gICAgLyogQWRkIEluZGljYXRvciBvZiB0aGUgVmVyc2lvbiBvZiB0aGUgT3BlcmF0aW5nIFN5c3RlbSAqLwotICAgIGlmIChQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudChtb2R1bGUsICJ2ZXJzaW9uIiwgdG1wKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIC8qIEFkZCBJbmRpY2F0b3Igb2YgV2hpY2ggRHJpdmUgd2FzIFVzZWQgdG8gQm9vdCB0aGUgU3lzdGVtICovCi0gICAgdG1wWzBdID0gJ0EnICsgdmFsdWVzW1FTVl9CT09UX0RSSVZFXSAtIDE7Ci0gICAgdG1wWzFdID0gJzonOwotICAgIHRtcFsyXSA9ICdcMCc7Ci0KLSAgICByZXR1cm4gUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobW9kdWxlLCAiYm9vdGRyaXZlIiwgdG1wKTsKLX0KLSNlbmRpZgotCiAjaWYgZGVmaW5lZChIQVZFX1NZTUxJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykKIHN0YXRpYyBpbnQKIGVuYWJsZV9zeW1saW5rKCkKQEAgLTExNTMxLDQwMSArMTE2OTQsNDEwIEBACiAjZW5kaWYgLyogZGVmaW5lZChIQVZFX1NZTUxJTkspICYmIGRlZmluZWQoTVNfV0lORE9XUykgKi8KIAogc3RhdGljIGludAotYWxsX2lucyhQeU9iamVjdCAqZCkKK2FsbF9pbnMoUHlPYmplY3QgKm0pCiB7CiAjaWZkZWYgRl9PSwotICAgIGlmIChpbnMoZCwgIkZfT0siLCAobG9uZylGX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUl9PSwotICAgIGlmIChpbnMoZCwgIlJfT0siLCAobG9uZylSX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgV19PSwotICAgIGlmIChpbnMoZCwgIldfT0siLCAobG9uZylXX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBXX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgWF9PSwotICAgIGlmIChpbnMoZCwgIlhfT0siLCAobG9uZylYX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYX09LKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgTkdST1VQU19NQVgKLSAgICBpZiAoaW5zKGQsICJOR1JPVVBTX01BWCIsIChsb25nKU5HUk9VUFNfTUFYKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOR1JPVVBTX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFRNUF9NQVgKLSAgICBpZiAoaW5zKGQsICJUTVBfTUFYIiwgKGxvbmcpVE1QX01BWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVE1QX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdDT05USU5VRUQKLSAgICBpZiAoaW5zKGQsICJXQ09OVElOVUVEIiwgKGxvbmcpV0NPTlRJTlVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV0NPTlRJTlVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdOT0hBTkcKLSAgICBpZiAoaW5zKGQsICJXTk9IQU5HIiwgKGxvbmcpV05PSEFORykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV05PSEFORykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFdVTlRSQUNFRAotICAgIGlmIChpbnMoZCwgIldVTlRSQUNFRCIsIChsb25nKVdVTlRSQUNFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgV1VOVFJBQ0VEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SRE9OTFkKLSAgICBpZiAoaW5zKGQsICJPX1JET05MWSIsIChsb25nKU9fUkRPTkxZKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JET05MWSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fV1JPTkxZCi0gICAgaWYgKGlucyhkLCAiT19XUk9OTFkiLCAobG9uZylPX1dST05MWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19XUk9OTFkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1JEV1IKLSAgICBpZiAoaW5zKGQsICJPX1JEV1IiLCAobG9uZylPX1JEV1IpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fUkRXUikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fTkRFTEFZCi0gICAgaWYgKGlucyhkLCAiT19OREVMQVkiLCAobG9uZylPX05ERUxBWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OREVMQVkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PTkJMT0NLCi0gICAgaWYgKGlucyhkLCAiT19OT05CTE9DSyIsIChsb25nKU9fTk9OQkxPQ0spKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9OQkxPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0FQUEVORAotICAgIGlmIChpbnMoZCwgIk9fQVBQRU5EIiwgKGxvbmcpT19BUFBFTkQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQVBQRU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19EU1lOQwotICAgIGlmIChpbnMoZCwgIk9fRFNZTkMiLCAobG9uZylPX0RTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0RTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SU1lOQwotICAgIGlmIChpbnMoZCwgIk9fUlNZTkMiLCAobG9uZylPX1JTWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JTWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TWU5DCi0gICAgaWYgKGlucyhkLCAiT19TWU5DIiwgKGxvbmcpT19TWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NZTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PQ1RUWQotICAgIGlmIChpbnMoZCwgIk9fTk9DVFRZIiwgKGxvbmcpT19OT0NUVFkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTk9DVFRZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19DUkVBVAotICAgIGlmIChpbnMoZCwgIk9fQ1JFQVQiLCAobG9uZylPX0NSRUFUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0NSRUFUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19FWENMCi0gICAgaWYgKGlucyhkLCAiT19FWENMIiwgKGxvbmcpT19FWENMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0VYQ0wpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RSVU5DCi0gICAgaWYgKGlucyhkLCAiT19UUlVOQyIsIChsb25nKU9fVFJVTkMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVFJVTkMpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0JJTkFSWQotICAgIGlmIChpbnMoZCwgIk9fQklOQVJZIiwgKGxvbmcpT19CSU5BUlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fQklOQVJZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19URVhUCi0gICAgaWYgKGlucyhkLCAiT19URVhUIiwgKGxvbmcpT19URVhUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RFWFQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1hBVFRSCi0gICAgaWYgKGlucyhkLCAiT19YQVRUUiIsIChsb25nKU9fWEFUVFIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fWEFUVFIpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0xBUkdFRklMRQotICAgIGlmIChpbnMoZCwgIk9fTEFSR0VGSUxFIiwgKGxvbmcpT19MQVJHRUZJTEUpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fTEFSR0VGSUxFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19TSExPQ0sKLSAgICBpZiAoaW5zKGQsICJPX1NITE9DSyIsIChsb25nKU9fU0hMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1NITE9DSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRVhMT0NLCi0gICAgaWYgKGlucyhkLCAiT19FWExPQ0siLCAobG9uZylPX0VYTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19FWExPQ0spKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX0VYRUMKLSAgICBpZiAoaW5zKGQsICJPX0VYRUMiLCAobG9uZylPX0VYRUMpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRVhFQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU0VBUkNICi0gICAgaWYgKGlucyhkLCAiT19TRUFSQ0giLCAobG9uZylPX1NFQVJDSCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19TRUFSQ0gpKSByZXR1cm4gLTE7CisjZW5kaWYKKyNpZmRlZiBPX1BBVEgKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19QQVRIKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19UVFlfSU5JVAotICAgIGlmIChpbnMoZCwgIk9fVFRZX0lOSVQiLCAobG9uZylPX1RUWV9JTklUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1RUWV9JTklUKSkgcmV0dXJuIC0xOworI2VuZGlmCisjaWZkZWYgT19UTVBGSUxFCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVE1QRklMRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFBSSU9fUFJPQ0VTUwotICAgIGlmIChpbnMoZCwgIlBSSU9fUFJPQ0VTUyIsIChsb25nKVBSSU9fUFJPQ0VTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUFJJT19QUk9DRVNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUFJJT19QR1JQCi0gICAgaWYgKGlucyhkLCAiUFJJT19QR1JQIiwgKGxvbmcpUFJJT19QR1JQKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQUklPX1BHUlApKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQUklPX1VTRVIKLSAgICBpZiAoaW5zKGQsICJQUklPX1VTRVIiLCAobG9uZylQUklPX1VTRVIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBSSU9fVVNFUikpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fQ0xPRVhFQwotICAgIGlmIChpbnMoZCwgIk9fQ0xPRVhFQyIsIChsb25nKU9fQ0xPRVhFQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19DTE9FWEVDKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19BQ0NNT0RFCi0gICAgaWYgKGlucyhkLCAiT19BQ0NNT0RFIiwgKGxvbmcpT19BQ0NNT0RFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX0FDQ01PREUpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogCiAjaWZkZWYgU0VFS19IT0xFCi0gICAgaWYgKGlucyhkLCAiU0VFS19IT0xFIiwgKGxvbmcpU0VFS19IT0xFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRUVLX0hPTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBTRUVLX0RBVEEKLSAgICBpZiAoaW5zKGQsICJTRUVLX0RBVEEiLCAobG9uZylTRUVLX0RBVEEpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNFRUtfREFUQSkpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBNUyBXaW5kb3dzICovCiAjaWZkZWYgT19OT0lOSEVSSVQKICAgICAvKiBEb24ndCBpbmhlcml0IGluIGNoaWxkIHByb2Nlc3Nlcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX05PSU5IRVJJVCIsIChsb25nKU9fTk9JTkhFUklUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PSU5IRVJJVCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIF9PX1NIT1JUX0xJVkVECiAgICAgLyogT3B0aW1pemUgZm9yIHNob3J0IGxpZmUgKGtlZXAgaW4gbWVtb3J5KS4gKi8KICAgICAvKiBNUyBmb3Jnb3QgdG8gZGVmaW5lIHRoaXMgb25lIHdpdGggYSBub24tdW5kZXJzY29yZSBmb3JtIHRvby4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1NIT1JUX0xJVkVEIiwgKGxvbmcpX09fU0hPUlRfTElWRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJPX1NIT1JUX0xJVkVEIiwgX09fU0hPUlRfTElWRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX1RFTVBPUkFSWQogICAgIC8qIEF1dG9tYXRpY2FsbHkgZGVsZXRlIHdoZW4gbGFzdCBoYW5kbGUgaXMgY2xvc2VkLiAqLwotICAgIGlmIChpbnMoZCwgIk9fVEVNUE9SQVJZIiwgKGxvbmcpT19URU1QT1JBUlkpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fVEVNUE9SQVJZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19SQU5ET00KICAgICAvKiBPcHRpbWl6ZSBmb3IgcmFuZG9tIGFjY2Vzcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1JBTkRPTSIsIChsb25nKU9fUkFORE9NKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX1JBTkRPTSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fU0VRVUVOVElBTAogICAgIC8qIE9wdGltaXplIGZvciBzZXF1ZW50aWFsIGFjY2Vzcy4gKi8KLSAgICBpZiAoaW5zKGQsICJPX1NFUVVFTlRJQUwiLCAobG9uZylPX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fU0VRVUVOVElBTCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAvKiBHTlUgZXh0ZW5zaW9ucy4gKi8KICNpZmRlZiBPX0FTWU5DCiAgICAgLyogU2VuZCBhIFNJR0lPIHNpZ25hbCB3aGVuZXZlciBpbnB1dCBvciBvdXRwdXQKICAgICAgICBiZWNvbWVzIGF2YWlsYWJsZSBvbiBmaWxlIGRlc2NyaXB0b3IgKi8KLSAgICBpZiAoaW5zKGQsICJPX0FTWU5DIiwgKGxvbmcpT19BU1lOQykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19BU1lOQykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIE9fRElSRUNUCiAgICAgLyogRGlyZWN0IGRpc2sgYWNjZXNzLiAqLwotICAgIGlmIChpbnMoZCwgIk9fRElSRUNUIiwgKGxvbmcpT19ESVJFQ1QpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE9fRElSRUNUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19ESVJFQ1RPUlkKICAgICAvKiBNdXN0IGJlIGEgZGlyZWN0b3J5LiAgICAgICovCi0gICAgaWYgKGlucyhkLCAiT19ESVJFQ1RPUlkiLCAobG9uZylPX0RJUkVDVE9SWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19ESVJFQ1RPUlkpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBPX05PRk9MTE9XCiAgICAgLyogRG8gbm90IGZvbGxvdyBsaW5rcy4gICAgICAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9GT0xMT1ciLCAobG9uZylPX05PRk9MTE9XKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PRk9MTE9XKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0xJTktTCiAgICAgLyogRmFpbHMgaWYgbGluayBjb3VudCBvZiB0aGUgbmFtZWQgZmlsZSBpcyBncmVhdGVyIHRoYW4gMSAqLwotICAgIGlmIChpbnMoZCwgIk9fTk9MSU5LUyIsIChsb25nKU9fTk9MSU5LUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT19OT0xJTktTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgT19OT0FUSU1FCiAgICAgLyogRG8gbm90IHVwZGF0ZSB0aGUgYWNjZXNzIHRpbWUuICovCi0gICAgaWYgKGlucyhkLCAiT19OT0FUSU1FIiwgKGxvbmcpT19OT0FUSU1FKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPX05PQVRJTUUpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIFRoZXNlIGNvbWUgZnJvbSBzeXNleGl0cy5oICovCiAjaWZkZWYgRVhfT0sKLSAgICBpZiAoaW5zKGQsICJFWF9PSyIsIChsb25nKUVYX09LKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9PSykpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9PSyAqLwogI2lmZGVmIEVYX1VTQUdFCi0gICAgaWYgKGlucyhkLCAiRVhfVVNBR0UiLCAobG9uZylFWF9VU0FHRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfVVNBR0UpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfVVNBR0UgKi8KICNpZmRlZiBFWF9EQVRBRVJSCi0gICAgaWYgKGlucyhkLCAiRVhfREFUQUVSUiIsIChsb25nKUVYX0RBVEFFUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX0RBVEFFUlIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfREFUQUVSUiAqLwogI2lmZGVmIEVYX05PSU5QVVQKLSAgICBpZiAoaW5zKGQsICJFWF9OT0lOUFVUIiwgKGxvbmcpRVhfTk9JTlBVVCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfTk9JTlBVVCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT0lOUFVUICovCiAjaWZkZWYgRVhfTk9VU0VSCi0gICAgaWYgKGlucyhkLCAiRVhfTk9VU0VSIiwgKGxvbmcpRVhfTk9VU0VSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT1VTRVIpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9VU0VSICovCiAjaWZkZWYgRVhfTk9IT1NUCi0gICAgaWYgKGlucyhkLCAiRVhfTk9IT1NUIiwgKGxvbmcpRVhfTk9IT1NUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT0hPU1QpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9IT1NUICovCiAjaWZkZWYgRVhfVU5BVkFJTEFCTEUKLSAgICBpZiAoaW5zKGQsICJFWF9VTkFWQUlMQUJMRSIsIChsb25nKUVYX1VOQVZBSUxBQkxFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9VTkFWQUlMQUJMRSkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9VTkFWQUlMQUJMRSAqLwogI2lmZGVmIEVYX1NPRlRXQVJFCi0gICAgaWYgKGlucyhkLCAiRVhfU09GVFdBUkUiLCAobG9uZylFWF9TT0ZUV0FSRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfU09GVFdBUkUpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfU09GVFdBUkUgKi8KICNpZmRlZiBFWF9PU0VSUgotICAgIGlmIChpbnMoZCwgIkVYX09TRVJSIiwgKGxvbmcpRVhfT1NFUlIpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX09TRVJSKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX09TRVJSICovCiAjaWZkZWYgRVhfT1NGSUxFCi0gICAgaWYgKGlucyhkLCAiRVhfT1NGSUxFIiwgKGxvbmcpRVhfT1NGSUxFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9PU0ZJTEUpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfT1NGSUxFICovCiAjaWZkZWYgRVhfQ0FOVENSRUFUCi0gICAgaWYgKGlucyhkLCAiRVhfQ0FOVENSRUFUIiwgKGxvbmcpRVhfQ0FOVENSRUFUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9DQU5UQ1JFQVQpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfQ0FOVENSRUFUICovCiAjaWZkZWYgRVhfSU9FUlIKLSAgICBpZiAoaW5zKGQsICJFWF9JT0VSUiIsIChsb25nKUVYX0lPRVJSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9JT0VSUikpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9JT0VSUiAqLwogI2lmZGVmIEVYX1RFTVBGQUlMCi0gICAgaWYgKGlucyhkLCAiRVhfVEVNUEZBSUwiLCAobG9uZylFWF9URU1QRkFJTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVhfVEVNUEZBSUwpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfVEVNUEZBSUwgKi8KICNpZmRlZiBFWF9QUk9UT0NPTAotICAgIGlmIChpbnMoZCwgIkVYX1BST1RPQ09MIiwgKGxvbmcpRVhfUFJPVE9DT0wpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVYX1BST1RPQ09MKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIEVYX1BST1RPQ09MICovCiAjaWZkZWYgRVhfTk9QRVJNCi0gICAgaWYgKGlucyhkLCAiRVhfTk9QRVJNIiwgKGxvbmcpRVhfTk9QRVJNKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT1BFUk0pKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfTk9QRVJNICovCiAjaWZkZWYgRVhfQ09ORklHCi0gICAgaWYgKGlucyhkLCAiRVhfQ09ORklHIiwgKGxvbmcpRVhfQ09ORklHKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9DT05GSUcpKSByZXR1cm4gLTE7CiAjZW5kaWYgLyogRVhfQ09ORklHICovCiAjaWZkZWYgRVhfTk9URk9VTkQKLSAgICBpZiAoaW5zKGQsICJFWF9OT1RGT1VORCIsIChsb25nKUVYX05PVEZPVU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFWF9OT1RGT1VORCkpIHJldHVybiAtMTsKICNlbmRpZiAvKiBFWF9OT1RGT1VORCAqLwogCiAgICAgLyogc3RhdHZmcyAqLwogI2lmZGVmIFNUX1JET05MWQotICAgIGlmIChpbnMoZCwgIlNUX1JET05MWSIsIChsb25nKVNUX1JET05MWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfUkRPTkxZKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIFNUX1JET05MWSAqLwogI2lmZGVmIFNUX05PU1VJRAotICAgIGlmIChpbnMoZCwgIlNUX05PU1VJRCIsIChsb25nKVNUX05PU1VJRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfTk9TVUlEKSkgcmV0dXJuIC0xOwogI2VuZGlmIC8qIFNUX05PU1VJRCAqLwogCisgICAgICAgLyogR05VIGV4dGVuc2lvbnMgKi8KKyNpZmRlZiBTVF9OT0RFVgorICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9OT0RFVikpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9OT0RFViAqLworI2lmZGVmIFNUX05PRVhFQworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9OT0VYRUMpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfTk9FWEVDICovCisjaWZkZWYgU1RfU1lOQ0hST05PVVMKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfU1lOQ0hST05PVVMpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfU1lOQ0hST05PVVMgKi8KKyNpZmRlZiBTVF9NQU5ETE9DSworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTVF9NQU5ETE9DSykpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9NQU5ETE9DSyAqLworI2lmZGVmIFNUX1dSSVRFCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX1dSSVRFKSkgcmV0dXJuIC0xOworI2VuZGlmIC8qIFNUX1dSSVRFICovCisjaWZkZWYgU1RfQVBQRU5ECisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX0FQUEVORCkpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9BUFBFTkQgKi8KKyNpZmRlZiBTVF9OT0FUSU1FCisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNUX05PQVRJTUUpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfTk9BVElNRSAqLworI2lmZGVmIFNUX05PRElSQVRJTUUKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfTk9ESVJBVElNRSkpIHJldHVybiAtMTsKKyNlbmRpZiAvKiBTVF9OT0RJUkFUSU1FICovCisjaWZkZWYgU1RfUkVMQVRJTUUKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU1RfUkVMQVRJTUUpKSByZXR1cm4gLTE7CisjZW5kaWYgLyogU1RfUkVMQVRJTUUgKi8KKwogICAgIC8qIEZyZWVCU0Qgc2VuZGZpbGUoKSBjb25zdGFudHMgKi8KICNpZmRlZiBTRl9OT0RJU0tJTwotICAgIGlmIChpbnMoZCwgIlNGX05PRElTS0lPIiwgKGxvbmcpU0ZfTk9ESVNLSU8pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNGX05PRElTS0lPKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0ZfTU5PV0FJVAotICAgIGlmIChpbnMoZCwgIlNGX01OT1dBSVQiLCAobG9uZylTRl9NTk9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9NTk9XQUlUKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0ZfU1lOQwotICAgIGlmIChpbnMoZCwgIlNGX1NZTkMiLCAobG9uZylTRl9TWU5DKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTRl9TWU5DKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKICAgICAvKiBjb25zdGFudHMgZm9yIHBvc2l4X2ZhZHZpc2UgKi8KICNpZmRlZiBQT1NJWF9GQURWX05PUk1BTAotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfTk9STUFMIiwgKGxvbmcpUE9TSVhfRkFEVl9OT1JNQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfTk9STUFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9TRVFVRU5USUFMCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9TRVFVRU5USUFMIiwgKGxvbmcpUE9TSVhfRkFEVl9TRVFVRU5USUFMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX1NFUVVFTlRJQUwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX1JBTkRPTQotICAgIGlmIChpbnMoZCwgIlBPU0lYX0ZBRFZfUkFORE9NIiwgKGxvbmcpUE9TSVhfRkFEVl9SQU5ET00pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfUkFORE9NKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUE9TSVhfRkFEVl9OT1JFVVNFCi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9OT1JFVVNFIiwgKGxvbmcpUE9TSVhfRkFEVl9OT1JFVVNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT1NJWF9GQURWX05PUkVVU0UpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX1dJTExORUVECi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9XSUxMTkVFRCIsIChsb25nKVBPU0lYX0ZBRFZfV0lMTE5FRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfV0lMTE5FRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBQT1NJWF9GQURWX0RPTlRORUVECi0gICAgaWYgKGlucyhkLCAiUE9TSVhfRkFEVl9ET05UTkVFRCIsIChsb25nKVBPU0lYX0ZBRFZfRE9OVE5FRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPU0lYX0ZBRFZfRE9OVE5FRUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogICAgIC8qIGNvbnN0YW50cyBmb3Igd2FpdGlkICovCiAjaWYgZGVmaW5lZChIQVZFX1NZU19XQUlUX0gpICYmIGRlZmluZWQoSEFWRV9XQUlUSUQpCi0gICAgaWYgKGlucyhkLCAiUF9QSUQiLCAobG9uZylQX1BJRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1BHSUQiLCAobG9uZylQX1BHSUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9BTEwiLCAobG9uZylQX0FMTCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUF9QSUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBfUEdJRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUF9BTEwpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXRVhJVEVECi0gICAgaWYgKGlucyhkLCAiV0VYSVRFRCIsIChsb25nKVdFWElURUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdFWElURUQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXTk9XQUlUCi0gICAgaWYgKGlucyhkLCAiV05PV0FJVCIsIChsb25nKVdOT1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdOT1dBSVQpKSByZXR1cm4gLTE7CiAjZW5kaWYKICNpZmRlZiBXU1RPUFBFRAotICAgIGlmIChpbnMoZCwgIldTVE9QUEVEIiwgKGxvbmcpV1NUT1BQRUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFdTVE9QUEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX0VYSVRFRAotICAgIGlmIChpbnMoZCwgIkNMRF9FWElURUQiLCAobG9uZylDTERfRVhJVEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfRVhJVEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX0RVTVBFRAotICAgIGlmIChpbnMoZCwgIkNMRF9EVU1QRUQiLCAobG9uZylDTERfRFVNUEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfRFVNUEVEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgQ0xEX1RSQVBQRUQKLSAgICBpZiAoaW5zKGQsICJDTERfVFJBUFBFRCIsIChsb25nKUNMRF9UUkFQUEVEKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDTERfVFJBUFBFRCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIENMRF9DT05USU5VRUQKLSAgICBpZiAoaW5zKGQsICJDTERfQ09OVElOVUVEIiwgKGxvbmcpQ0xEX0NPTlRJTlVFRCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0xEX0NPTlRJTlVFRCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAgICAgLyogY29uc3RhbnRzIGZvciBsb2NrZiAqLwogI2lmZGVmIEZfTE9DSwotICAgIGlmIChpbnMoZCwgIkZfTE9DSyIsIChsb25nKUZfTE9DSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRl9MT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9UTE9DSwotICAgIGlmIChpbnMoZCwgIkZfVExPQ0siLCAobG9uZylGX1RMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1RMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9VTE9DSwotICAgIGlmIChpbnMoZCwgIkZfVUxPQ0siLCAobG9uZylGX1VMT0NLKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1VMT0NLKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgRl9URVNUCi0gICAgaWYgKGlucyhkLCAiRl9URVNUIiwgKGxvbmcpRl9URVNUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBGX1RFU1QpKSByZXR1cm4gLTE7CiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU1BBV05WCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoaW5zKGQsICJQX1dBSVQiLCAobG9uZylQX1dBSVQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9OT1dBSVQiLCAobG9uZylQX05PV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX09WRVJMQVkiLCAobG9uZylQX09WRVJMQVkpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERUJVRyIsIChsb25nKVBfREVCVUcpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9TRVNTSU9OIiwgKGxvbmcpUF9TRVNTSU9OKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVUQUNIIiwgKGxvbmcpUF9ERVRBQ0gpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9QTSIsIChsb25nKVBfUE0pKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERUZBVUxUIiwgKGxvbmcpUF9ERUZBVUxUKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTUlOSU1JWkUiLCAobG9uZylQX01JTklNSVpFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTUFYSU1JWkUiLCAobG9uZylQX01BWElNSVpFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfRlVMTFNDUkVFTiIsIChsb25nKVBfRlVMTFNDUkVFTikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX1dJTkRPV0VEIiwgKGxvbmcpUF9XSU5ET1dFRCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX0ZPUkVHUk9VTkQiLCAobG9uZylQX0ZPUkVHUk9VTkQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9CQUNLR1JPVU5EIiwgKGxvbmcpUF9CQUNLR1JPVU5EKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfTk9DTE9TRSIsIChsb25nKVBfTk9DTE9TRSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PU0VTU0lPTiIsIChsb25nKVBfTk9TRVNTSU9OKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfUVVPVEUiLCAobG9uZylQX1FVT1RFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfVElMREUiLCAobG9uZylQX1RJTERFKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfVU5SRUxBVEVEIiwgKGxvbmcpUF9VTlJFTEFURUQpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiUF9ERUJVR0RFU0MiLCAobG9uZylQX0RFQlVHREVTQykpIHJldHVybiAtMTsKLSNlbHNlCi0gICAgaWYgKGlucyhkLCAiUF9XQUlUIiwgKGxvbmcpX1BfV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PV0FJVCIsIChsb25nKV9QX05PV0FJVCkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX09WRVJMQVkiLCAobG9uZylfT0xEX1BfT1ZFUkxBWSkpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJQX05PV0FJVE8iLCAobG9uZylfUF9OT1dBSVRPKSkgcmV0dXJuIC0xOwotICAgIGlmIChpbnMoZCwgIlBfREVUQUNIIiwgKGxvbmcpX1BfREVUQUNIKSkgcmV0dXJuIC0xOwotI2VuZGlmCisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX1dBSVQiLCBfUF9XQUlUKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUF9OT1dBSVQiLCBfUF9OT1dBSVQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX09WRVJMQVkiLCBfT0xEX1BfT1ZFUkxBWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBfTk9XQUlUTyIsIF9QX05PV0FJVE8pKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQX0RFVEFDSCIsIF9QX0RFVEFDSCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgSEFWRV9TQ0hFRF9ICi0gICAgaWYgKGlucyhkLCAiU0NIRURfT1RIRVIiLCAobG9uZylTQ0hFRF9PVEhFUikpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9GSUZPIiwgKGxvbmcpU0NIRURfRklGTykpIHJldHVybiAtMTsKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9SUiIsIChsb25nKVNDSEVEX1JSKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9PVEhFUikpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfRklGTykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfUlIpKSByZXR1cm4gLTE7CiAjaWZkZWYgU0NIRURfU1BPUkFESUMKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9TUE9SQURJQyIsIChsb25nKVNDSEVEX1NQT1JBRElDKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9TUE9SQURJQykgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfQkFUQ0gKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9CQVRDSCIsIChsb25nKVNDSEVEX0JBVENIKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9CQVRDSCkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0lETEUKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9JRExFIiwgKGxvbmcpU0NIRURfSURMRSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfSURMRSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX1JFU0VUX09OX0ZPUksKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9SRVNFVF9PTl9GT1JLIiwgKGxvbmcpU0NIRURfUkVTRVRfT05fRk9SSykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfUkVTRVRfT05fRk9SSykpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX1NZUwotICAgIGlmIChpbnMoZCwgIlNDSEVEX1NZUyIsIChsb25nKVNDSEVEX1NZUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfU1lTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfSUEKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9JQSIsIChsb25nKVNDSEVEX0lBKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ0hFRF9JQSkpIHJldHVybiAtMTsKICNlbmRpZgogI2lmZGVmIFNDSEVEX0ZTUwotICAgIGlmIChpbnMoZCwgIlNDSEVEX0ZTUyIsIChsb25nKVNDSEVEX0ZTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NIRURfRlNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgU0NIRURfRlgKLSAgICBpZiAoaW5zKGQsICJTQ0hFRF9GWCIsIChsb25nKVNDSEVEX0ZTUykpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDSEVEX0ZYIiwgU0NIRURfRlNTKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIFVTRV9YQVRUUlMKLSAgICBpZiAoaW5zKGQsICJYQVRUUl9DUkVBVEUiLCAobG9uZylYQVRUUl9DUkVBVEUpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiWEFUVFJfUkVQTEFDRSIsIChsb25nKVhBVFRSX1JFUExBQ0UpKSByZXR1cm4gLTE7Ci0gICAgaWYgKGlucyhkLCAiWEFUVFJfU0laRV9NQVgiLCAobG9uZylYQVRUUl9TSVpFX01BWCkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWEFUVFJfQ1JFQVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9SRVBMQUNFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBYQVRUUl9TSVpFX01BWCkpIHJldHVybiAtMTsKICNlbmRpZgogCiAjaWZkZWYgUlRMRF9MQVpZCi0gICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKGQsIFJUTERfTEFaWSkpIHJldHVybiAtMTsKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlRMRF9MQVpZKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT1cKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT1cpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9XKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9HTE9CQUwKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9HTE9CQUwpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfR0xPQkFMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9MT0NBTAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0xPQ0FMKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0xPQ0FMKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT0RFTEVURQotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX05PREVMRVRFKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX05PREVMRVRFKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9OT0xPQUQKLSAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8oZCwgUlRMRF9OT0xPQUQpKSByZXR1cm4gLTE7CisgICAgaWYgKFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJUTERfTk9MT0FEKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAjaWZkZWYgUlRMRF9ERUVQQklORAotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhkLCBSVExEX0RFRVBCSU5EKSkgcmV0dXJuIC0xOworICAgIGlmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVExEX0RFRVBCSU5EKSkgcmV0dXJuIC0xOwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotICAgIGlmIChpbnNlcnR2YWx1ZXMoZCkpIHJldHVybiAtMTsKLSNlbmRpZgogICAgIHJldHVybiAwOwogfQogCkBAIC0xMTkzNCwxMCArMTIxMDYsNiBAQAogI2RlZmluZSBJTklURlVOQyBQeUluaXRfbnQKICNkZWZpbmUgTU9ETkFNRSAibnQiCiAKLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0jZGVmaW5lIElOSVRGVU5DIFB5SW5pdF9vczIKLSNkZWZpbmUgTU9ETkFNRSAib3MyIgotCiAjZWxzZQogI2RlZmluZSBJTklURlVOQyBQeUluaXRfcG9zaXgKICNkZWZpbmUgTU9ETkFNRSAicG9zaXgiCkBAIC0xMjEyNSwxOSArMTIyOTMsMjMgQEAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7CiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQogICAgICAgICB3YWl0aWRfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi53YWl0aWRfcmVzdWx0IjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmV2FpdGlkUmVzdWx0VHlwZSwgJndhaXRpZF9yZXN1bHRfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmV2FpdGlkUmVzdWx0VHlwZSwgJndhaXRpZF9yZXN1bHRfZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAjZW5kaWYKIAotICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc3RhdF9yZXN1bHQiOworICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLm5hbWUgPSAib3Muc3RhdF9yZXN1bHQiOyAvKiBzZWUgaXNzdWUgIzE5MjA5ICovCiAgICAgICAgIHN0YXRfcmVzdWx0X2Rlc2MuZmllbGRzWzddLm5hbWUgPSBQeVN0cnVjdFNlcXVlbmNlX1VubmFtZWRGaWVsZDsKICAgICAgICAgc3RhdF9yZXN1bHRfZGVzYy5maWVsZHNbOF0ubmFtZSA9IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkOwogICAgICAgICBzdGF0X3Jlc3VsdF9kZXNjLmZpZWxkc1s5XS5uYW1lID0gUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQ7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0YXRSZXN1bHRUeXBlLCAmc3RhdF9yZXN1bHRfZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmU3RhdFJlc3VsdFR5cGUsICZzdGF0X3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgc3RydWN0c2VxX25ldyA9IFN0YXRSZXN1bHRUeXBlLnRwX25ldzsKICAgICAgICAgU3RhdFJlc3VsdFR5cGUudHBfbmV3ID0gc3RhdHJlc3VsdF9uZXc7CiAKLSAgICAgICAgc3RhdHZmc19yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnN0YXR2ZnNfcmVzdWx0IjsKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmU3RhdFZGU1Jlc3VsdFR5cGUsICZzdGF0dmZzX3Jlc3VsdF9kZXNjKTsKKyAgICAgICAgc3RhdHZmc19yZXN1bHRfZGVzYy5uYW1lID0gIm9zLnN0YXR2ZnNfcmVzdWx0IjsgLyogc2VlIGlzc3VlICMxOTIwOSAqLworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0YXRWRlNSZXN1bHRUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXR2ZnNfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogI2lmZGVmIE5FRURfVElDS1NfUEVSX1NFQ09ORAogIyAgaWYgZGVmaW5lZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX0NMS19UQ0spCiAgICAgICAgIHRpY2tzX3Blcl9zZWNvbmQgPSBzeXNjb25mKF9TQ19DTEtfVENLKTsKQEAgLTEyMTUwLDEyICsxMjMyMiwxNSBAQAogCiAjaWYgZGVmaW5lZChIQVZFX1NDSEVEX1NFVFBBUkFNKSB8fCBkZWZpbmVkKEhBVkVfU0NIRURfU0VUU0NIRURVTEVSKQogICAgICAgICBzY2hlZF9wYXJhbV9kZXNjLm5hbWUgPSBNT0ROQU1FICIuc2NoZWRfcGFyYW0iOwotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTY2hlZFBhcmFtVHlwZSwgJnNjaGVkX3BhcmFtX2Rlc2MpOworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlNjaGVkUGFyYW1UeXBlLCAmc2NoZWRfcGFyYW1fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIFNjaGVkUGFyYW1UeXBlLnRwX25ldyA9IHNjaGVkX3BhcmFtX25ldzsKICNlbmRpZgogCiAgICAgICAgIC8qIGluaXRpYWxpemUgVGVybWluYWxTaXplX2luZm8gKi8KLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVGVybWluYWxTaXplVHlwZSwgJlRlcm1pbmFsU2l6ZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZUZXJtaW5hbFNpemVUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlRlcm1pbmFsU2l6ZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjaWYgZGVmaW5lZChIQVZFX1dBSVRJRCkgJiYgIWRlZmluZWQoX19BUFBMRV9fKQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmV2FpdGlkUmVzdWx0VHlwZSk7CkBAIC0xMjE3MywxMSArMTIzNDgsMTMgQEAKICNlbmRpZgogCiAgICAgdGltZXNfcmVzdWx0X2Rlc2MubmFtZSA9IE1PRE5BTUUgIi50aW1lc19yZXN1bHQiOwotICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlRpbWVzUmVzdWx0VHlwZSwgJnRpbWVzX3Jlc3VsdF9kZXNjKTsKKyAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlRpbWVzUmVzdWx0VHlwZSwgJnRpbWVzX3Jlc3VsdF9kZXNjKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAidGltZXNfcmVzdWx0IiwgKFB5T2JqZWN0ICopJlRpbWVzUmVzdWx0VHlwZSk7CiAKICAgICB1bmFtZV9yZXN1bHRfZGVzYy5uYW1lID0gTU9ETkFNRSAiLnVuYW1lX3Jlc3VsdCI7Ci0gICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVW5hbWVSZXN1bHRUeXBlLCAmdW5hbWVfcmVzdWx0X2Rlc2MpOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmVW5hbWVSZXN1bHRUeXBlLCAmdW5hbWVfcmVzdWx0X2Rlc2MpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJ1bmFtZV9yZXN1bHQiLCAoUHlPYmplY3QgKikmVW5hbWVSZXN1bHRUeXBlKTsKIAogI2lmZGVmIF9fQVBQTEVfXwpAQCAtMTIyNTUsNyArMTI0MzIsNiBAQAogICAgIGluaXRpYWxpemVkID0gMTsKIAogICAgIHJldHVybiBtOwotCiB9CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9wd2Rtb2R1bGUuYyBiL01vZHVsZXMvcHdkbW9kdWxlLmMKaW5kZXggMjg1ZmQ5Yy4uZWJiODcxMiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9wd2Rtb2R1bGUuYworKysgYi9Nb2R1bGVzL3B3ZG1vZHVsZS5jCkBAIC02OSwxOCArNjksMTAgQEAKICNkZWZpbmUgU0VUUyhpLHZhbCkgc2V0cyh2LCBpLCB2YWwpCiAKICAgICBTRVRTKHNldEluZGV4KyssIHAtPnB3X25hbWUpOwotI2lmZGVmIF9fVk1TCi0gICAgU0VUUyhzZXRJbmRleCsrLCAiIik7Ci0jZWxzZQogICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+cHdfcGFzc3dkKTsKLSNlbmRpZgogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgc2V0SW5kZXgrKywgX1B5TG9uZ19Gcm9tVWlkKHAtPnB3X3VpZCkpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0odiwgc2V0SW5kZXgrKywgX1B5TG9uZ19Gcm9tR2lkKHAtPnB3X2dpZCkpOwotI2lmZGVmIF9fVk1TCi0gICAgU0VUUyhzZXRJbmRleCsrLCAiIik7Ci0jZWxzZQogICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+cHdfZ2Vjb3MpOwotI2VuZGlmCiAgICAgU0VUUyhzZXRJbmRleCsrLCBwLT5wd19kaXIpOwogICAgIFNFVFMoc2V0SW5kZXgrKywgcC0+cHdfc2hlbGwpOwogCkBAIC0xNjgsMTIgKzE2MCw4IEBACiAgICAgc3RydWN0IHBhc3N3ZCAqcDsKICAgICBpZiAoKGQgPSBQeUxpc3RfTmV3KDApKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmICgocCA9IGdldHB3dWlkKDApKSAhPSBOVUxMKSB7Ci0jZWxzZQogICAgIHNldHB3ZW50KCk7CiAgICAgd2hpbGUgKChwID0gZ2V0cHdlbnQoKSkgIT0gTlVMTCkgewotI2VuZGlmCiAgICAgICAgIFB5T2JqZWN0ICp2ID0gbWtwd2VudChwKTsKICAgICAgICAgaWYgKHYgPT0gTlVMTCB8fCBQeUxpc3RfQXBwZW5kKGQsIHYpICE9IDApIHsKICAgICAgICAgICAgIFB5X1hERUNSRUYodik7CkBAIC0yMjAsOCArMjA4LDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFB3ZFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9wd2RfdHlwZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RQd2RUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9wd2RfdHlwZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopICZTdHJ1Y3RQd2RUeXBlKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHlleHBhdC5jIGIvTW9kdWxlcy9weWV4cGF0LmMKaW5kZXggNDU2ODBhZS4uNmE5MDFmNyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9weWV4cGF0LmMKKysrIGIvTW9kdWxlcy9weWV4cGF0LmMKQEAgLTgsNyArOCw4IEBACiAKICNkZWZpbmUgWE1MX0NPTUJJTkVEX1ZFUlNJT04gKDEwMDAwKlhNTF9NQUpPUl9WRVJTSU9OKzEwMCpYTUxfTUlOT1JfVkVSU0lPTitYTUxfTUlDUk9fVkVSU0lPTikKIAotI2RlZmluZSBGSVhfVFJBQ0UKK3N0YXRpYyBYTUxfTWVtb3J5X0hhbmRsaW5nX1N1aXRlIEV4cGF0TWVtb3J5SGFuZGxlciA9IHsKKyAgICBQeU9iamVjdF9NYWxsb2MsIFB5T2JqZWN0X1JlYWxsb2MsIFB5T2JqZWN0X0ZyZWV9OwogCiBlbnVtIEhhbmRsZXJUeXBlcyB7CiAgICAgU3RhcnRFbGVtZW50LApAQCAtMjA3LDEyMSArMjA4LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9leHRlcm5hbF9lbnRpdHlfcmVmX2hhbmRsZXIpOwogfQogCi1zdGF0aWMgUHlDb2RlT2JqZWN0KgotZ2V0Y29kZShlbnVtIEhhbmRsZXJUeXBlcyBzbG90LCBjaGFyKiBmdW5jX25hbWUsIGludCBsaW5lbm8pCi17Ci0gICAgaWYgKGhhbmRsZXJfaW5mb1tzbG90XS50Yl9jb2RlID09IE5VTEwpIHsKLSAgICAgICAgaGFuZGxlcl9pbmZvW3Nsb3RdLnRiX2NvZGUgPQotICAgICAgICAgICAgUHlDb2RlX05ld0VtcHR5KF9fRklMRV9fLCBmdW5jX25hbWUsIGxpbmVubyk7Ci0gICAgfQotICAgIHJldHVybiBoYW5kbGVyX2luZm9bc2xvdF0udGJfY29kZTsKLX0KLQotI2lmZGVmIEZJWF9UUkFDRQotc3RhdGljIGludAotdHJhY2VfZnJhbWUoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeUZyYW1lT2JqZWN0ICpmLCBpbnQgY29kZSwgUHlPYmplY3QgKnZhbCkKLXsKLSAgICBpbnQgcmVzdWx0ID0gMDsKLSAgICBpZiAoIXRzdGF0ZS0+dXNlX3RyYWNpbmcgfHwgdHN0YXRlLT50cmFjaW5nKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAodHN0YXRlLT5jX3Byb2ZpbGVmdW5jICE9IE5VTEwpIHsKLSAgICAgICAgdHN0YXRlLT50cmFjaW5nKys7Ci0gICAgICAgIHJlc3VsdCA9IHRzdGF0ZS0+Y19wcm9maWxlZnVuYyh0c3RhdGUtPmNfcHJvZmlsZW9iaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsIGNvZGUgLCB2YWwpOwotICAgICAgICB0c3RhdGUtPnVzZV90cmFjaW5nID0gKCh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHRzdGF0ZS0+Y19wcm9maWxlZnVuYyAhPSBOVUxMKSk7Ci0gICAgICAgIHRzdGF0ZS0+dHJhY2luZy0tOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCkgewotICAgICAgICB0c3RhdGUtPnRyYWNpbmcrKzsKLSAgICAgICAgcmVzdWx0ID0gdHN0YXRlLT5jX3RyYWNlZnVuYyh0c3RhdGUtPmNfdHJhY2VvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiwgY29kZSAsIHZhbCk7Ci0gICAgICAgIHRzdGF0ZS0+dXNlX3RyYWNpbmcgPSAoKHRzdGF0ZS0+Y190cmFjZWZ1bmMgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodHN0YXRlLT5jX3Byb2ZpbGVmdW5jICE9IE5VTEwpKTsKLSAgICAgICAgdHN0YXRlLT50cmFjaW5nLS07Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQKLXRyYWNlX2ZyYW1lX2V4YyhQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5RnJhbWVPYmplY3QgKmYpCi17Ci0gICAgUHlPYmplY3QgKnR5cGUsICp2YWx1ZSwgKnRyYWNlYmFjaywgKmFyZzsKLSAgICBpbnQgZXJyOwotCi0gICAgaWYgKHRzdGF0ZS0+Y190cmFjZWZ1bmMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKLSAgICBpZiAodmFsdWUgPT0gTlVMTCkgewotICAgICAgICB2YWx1ZSA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7Ci0gICAgfQotICAgIGFyZyA9IFB5VHVwbGVfUGFjaygzLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKLSAgICBpZiAoYXJnID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGVyciA9IHRyYWNlX2ZyYW1lKHRzdGF0ZSwgZiwgUHlUcmFjZV9FWENFUFRJT04sIGFyZyk7Ci0gICAgUHlfREVDUkVGKGFyZyk7Ci0gICAgaWYgKGVyciA9PSAwKQotICAgICAgICBQeUVycl9SZXN0b3JlKHR5cGUsIHZhbHVlLCB0cmFjZWJhY2spOwotICAgIGVsc2UgewotICAgICAgICBQeV9YREVDUkVGKHR5cGUpOwotICAgICAgICBQeV9YREVDUkVGKHZhbHVlKTsKLSAgICAgICAgUHlfWERFQ1JFRih0cmFjZWJhY2spOwotICAgIH0KLSAgICByZXR1cm4gZXJyOwotfQotI2VuZGlmCi0KIHN0YXRpYyBQeU9iamVjdCoKLWNhbGxfd2l0aF9mcmFtZShQeUNvZGVPYmplY3QgKmMsIFB5T2JqZWN0KiBmdW5jLCBQeU9iamVjdCogYXJncywKK2NhbGxfd2l0aF9mcmFtZShjaGFyICpmdW5jbmFtZSwgaW50IGxpbmVubywgUHlPYmplY3QqIGZ1bmMsIFB5T2JqZWN0KiBhcmdzLAogICAgICAgICAgICAgICAgIHhtbHBhcnNlb2JqZWN0ICpzZWxmKQogewotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7Ci0gICAgUHlGcmFtZU9iamVjdCAqZjsKLSAgICBQeU9iamVjdCAqcmVzLCAqZ2xvYmFsczsKKyAgICBQeU9iamVjdCAqcmVzOwogCi0gICAgaWYgKGMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBnbG9iYWxzID0gUHlFdmFsX0dldEdsb2JhbHMoKTsKLSAgICBpZiAoZ2xvYmFscyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGYgPSBQeUZyYW1lX05ldyh0c3RhdGUsIGMsIGdsb2JhbHMsIE5VTEwpOwotICAgIGlmIChmID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIHRzdGF0ZS0+ZnJhbWUgPSBmOwotI2lmZGVmIEZJWF9UUkFDRQotICAgIGlmICh0cmFjZV9mcmFtZSh0c3RhdGUsIGYsIFB5VHJhY2VfQ0FMTCwgUHlfTm9uZSkgPCAwKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSNlbmRpZgogICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIGFyZ3MpOwogICAgIGlmIChyZXMgPT0gTlVMTCkgewotICAgICAgICBpZiAodHN0YXRlLT5jdXJleGNfdHJhY2ViYWNrID09IE5VTEwpCi0gICAgICAgICAgICBQeVRyYWNlQmFja19IZXJlKGYpOworICAgICAgICBfUHlUcmFjZWJhY2tfQWRkKGZ1bmNuYW1lLCBfX0ZJTEVfXywgbGluZW5vKTsKICAgICAgICAgWE1MX1N0b3BQYXJzZXIoc2VsZi0+aXRzZWxmLCBYTUxfRkFMU0UpOwotI2lmZGVmIEZJWF9UUkFDRQotICAgICAgICBpZiAodHJhY2VfZnJhbWVfZXhjKHRzdGF0ZSwgZikgPCAwKSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKHRyYWNlX2ZyYW1lKHRzdGF0ZSwgZiwgUHlUcmFjZV9SRVRVUk4sIHJlcykgPCAwKSB7Ci0gICAgICAgICAgICBQeV9DTEVBUihyZXMpOwotICAgICAgICB9Ci0gICAgfQotI2Vsc2UKLSAgICB9Ci0jZW5kaWYKLSAgICB0c3RhdGUtPmZyYW1lID0gZi0+Zl9iYWNrOwotICAgIFB5X0RFQ1JFRihmKTsKICAgICByZXR1cm4gcmVzOwogfQogCkBAIC0zNzMsNyArMjcwLDcgQEAKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDAsIHRlbXApOwogICAgIC8qIHRlbXAgaXMgbm93IGEgYm9ycm93ZWQgcmVmZXJlbmNlOyBjb25zaWRlciBpdCB1bnVzZWQuICovCiAgICAgc2VsZi0+aW5fY2FsbGJhY2sgPSAxOwotICAgIHRlbXAgPSBjYWxsX3dpdGhfZnJhbWUoZ2V0Y29kZShDaGFyYWN0ZXJEYXRhLCAiQ2hhcmFjdGVyRGF0YSIsIF9fTElORV9fKSwKKyAgICB0ZW1wID0gY2FsbF93aXRoX2ZyYW1lKCJDaGFyYWN0ZXJEYXRhIiwgX19MSU5FX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5oYW5kbGVyc1tDaGFyYWN0ZXJEYXRhXSwgYXJncywgc2VsZik7CiAgICAgLyogdGVtcCBpcyBhbiBvd25lZCByZWZlcmVuY2UgYWdhaW4sIG9yIE5VTEwgKi8KICAgICBzZWxmLT5pbl9jYWxsYmFjayA9IDA7CkBAIC00MDMsNiArMzAwLDEwIEBACiBteV9DaGFyYWN0ZXJEYXRhSGFuZGxlcih2b2lkICp1c2VyRGF0YSwgY29uc3QgWE1MX0NoYXIgKmRhdGEsIGludCBsZW4pCiB7CiAgICAgeG1scGFyc2VvYmplY3QgKnNlbGYgPSAoeG1scGFyc2VvYmplY3QgKikgdXNlckRhdGE7CisKKyAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKHNlbGYtPmJ1ZmZlciA9PSBOVUxMKQogICAgICAgICBjYWxsX2NoYXJhY3Rlcl9oYW5kbGVyKHNlbGYsIGRhdGEsIGxlbik7CiAgICAgZWxzZSB7CkBAIC00MzcsNiArMzM4LDkgQEAKICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciwgKnJ2LCAqYXJnczsKICAgICAgICAgaW50IGksIG1heDsKIAorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAoZmx1c2hfY2hhcmFjdGVyX2J1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIC8qIFNldCBtYXggdG8gdGhlIG51bWJlciBvZiBzbG90cyBmaWxsZWQgaW4gYXR0c1tdOyBtYXgvMiBpcwpAQCAtNDk4LDcgKzQwMiw3IEBACiAgICAgICAgIH0KICAgICAgICAgLyogQ29udGFpbmVyIGlzIG5vdyBhIGJvcnJvd2VkIHJlZmVyZW5jZTsgaWdub3JlIGl0LiAqLwogICAgICAgICBzZWxmLT5pbl9jYWxsYmFjayA9IDE7Ci0gICAgICAgIHJ2ID0gY2FsbF93aXRoX2ZyYW1lKGdldGNvZGUoU3RhcnRFbGVtZW50LCAiU3RhcnRFbGVtZW50IiwgX19MSU5FX18pLAorICAgICAgICBydiA9IGNhbGxfd2l0aF9mcmFtZSgiU3RhcnRFbGVtZW50IiwgX19MSU5FX18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW1N0YXJ0RWxlbWVudF0sIGFyZ3MsIHNlbGYpOwogICAgICAgICBzZWxmLT5pbl9jYWxsYmFjayA9IDA7CiAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKQEAgLTUyMCwxMiArNDI0LDE0IEBACiAgICAgSU5JVCBcCiBcCiAgICAgaWYgKGhhdmVfaGFuZGxlcihzZWxmLCBOQU1FKSkgeyBcCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSBcCisgICAgICAgICAgICByZXR1cm4gUkVUVVJOOyBcCiAgICAgICAgIGlmIChmbHVzaF9jaGFyYWN0ZXJfYnVmZmVyKHNlbGYpIDwgMCkgXAogICAgICAgICAgICAgcmV0dXJuIFJFVFVSTjsgXAogICAgICAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSBQQVJBTV9GT1JNQVQgO1wKICAgICAgICAgaWYgKCFhcmdzKSB7IGZsYWdfZXJyb3Ioc2VsZik7IHJldHVybiBSRVRVUk47fSBcCiAgICAgICAgIHNlbGYtPmluX2NhbGxiYWNrID0gMTsgXAotICAgICAgICBydiA9IGNhbGxfd2l0aF9mcmFtZShnZXRjb2RlKE5BTUUsI05BTUUsX19MSU5FX18pLCBcCisgICAgICAgIHJ2ID0gY2FsbF93aXRoX2ZyYW1lKCNOQU1FLF9fTElORV9fLCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmhhbmRsZXJzW05BTUVdLCBhcmdzLCBzZWxmKTsgXAogICAgICAgICBzZWxmLT5pbl9jYWxsYmFjayA9IDA7IFwKICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOyBcCkBAIC02MzQsNiArNTQwLDkgQEAKICAgICAgICAgUHlPYmplY3QgKnJ2ID0gTlVMTDsKICAgICAgICAgUHlPYmplY3QgKm1vZGVsb2JqLCAqbmFtZW9iajsKIAorICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICBpZiAoZmx1c2hfY2hhcmFjdGVyX2J1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgICAgIG1vZGVsb2JqID0gY29udl9jb250ZW50X21vZGVsKG1vZGVsLCAoY29udl9zdHJpbmdfdG9fdW5pY29kZSkpOwpAQCAtNjU0LDcgKzU2Myw3IEBACiAgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+aW5fY2FsbGJhY2sgPSAxOwotICAgICAgICBydiA9IGNhbGxfd2l0aF9mcmFtZShnZXRjb2RlKEVsZW1lbnREZWNsLCAiRWxlbWVudERlY2wiLCBfX0xJTkVfXyksCisgICAgICAgIHJ2ID0gY2FsbF93aXRoX2ZyYW1lKCJFbGVtZW50RGVjbCIsIF9fTElORV9fLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5oYW5kbGVyc1tFbGVtZW50RGVjbF0sIGFyZ3MsIHNlbGYpOwogICAgICAgICBzZWxmLT5pbl9jYWxsYmFjayA9IDA7CiAgICAgICAgIGlmIChydiA9PSBOVUxMKSB7CkBAIC04MTksNyArNzI4LDggQEAKICAgICAgICAgcyArPSBNQVhfQ0hVTktfU0laRTsKICAgICAgICAgc2xlbiAtPSBNQVhfQ0hVTktfU0laRTsKICAgICB9Ci0gICAgcmMgPSBYTUxfUGFyc2Uoc2VsZi0+aXRzZWxmLCBzLCBzbGVuLCBpc0ZpbmFsKTsKKyAgICBhc3NlcnQoTUFYX0NIVU5LX1NJWkUgPCBJTlRfTUFYICYmIHNsZW4gPCBJTlRfTUFYKTsKKyAgICByYyA9IFhNTF9QYXJzZShzZWxmLT5pdHNlbGYsIHMsIChpbnQpc2xlbiwgaXNGaW5hbCk7CiAKIGRvbmU6CiAgICAgaWYgKHZpZXcuYnVmICE9IE5VTEwpCkBAIC04OTIsNyArODAyLDcgQEAKICAgICAgICAgdm9pZCAqYnVmID0gWE1MX0dldEJ1ZmZlcihzZWxmLT5pdHNlbGYsIEJVRl9TSVpFKTsKICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHJlYWRtZXRob2QpOwotICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gZ2V0X3BhcnNlX3Jlc3VsdChzZWxmLCAwKTsKICAgICAgICAgfQogCiAgICAgICAgIGJ5dGVzX3JlYWQgPSByZWFkaW5zdChidWYsIEJVRl9TSVpFLCByZWFkbWV0aG9kKTsKQEAgLTEwMDEsNyArOTExLDcgQEAKICAgICBQeU9iamVjdF9HQ19UcmFjayhuZXdfcGFyc2VyKTsKIAogICAgIGlmIChzZWxmLT5idWZmZXIgIT0gTlVMTCkgewotICAgICAgICBuZXdfcGFyc2VyLT5idWZmZXIgPSBtYWxsb2MobmV3X3BhcnNlci0+YnVmZmVyX3NpemUpOworICAgICAgICBuZXdfcGFyc2VyLT5idWZmZXIgPSBQeU1lbV9NYWxsb2MobmV3X3BhcnNlci0+YnVmZmVyX3NpemUpOwogICAgICAgICBpZiAobmV3X3BhcnNlci0+YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdfcGFyc2VyKTsKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMTAxOCw3ICs5MjgsNyBAQAogICAgIGZvciAoaSA9IDA7IGhhbmRsZXJfaW5mb1tpXS5uYW1lICE9IE5VTEw7IGkrKykKICAgICAgICAgLyogZG8gbm90aGluZyAqLzsKIAotICAgIG5ld19wYXJzZXItPmhhbmRsZXJzID0gbWFsbG9jKHNpemVvZihQeU9iamVjdCAqKSAqIGkpOworICAgIG5ld19wYXJzZXItPmhhbmRsZXJzID0gUHlNZW1fTmV3KFB5T2JqZWN0ICosIGkpOwogICAgIGlmICghbmV3X3BhcnNlci0+aGFuZGxlcnMpIHsKICAgICAgICAgUHlfREVDUkVGKG5ld19wYXJzZXIpOwogICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTExMjYsMTQgKzEwMzYsMTkgQEAKICAgICB2b2lkICpkYXRhOwogICAgIHVuc2lnbmVkIGludCBraW5kOwogCisgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiBYTUxfU1RBVFVTX0VSUk9SOworCiAgICAgaWYgKHRlbXBsYXRlX2J1ZmZlclsxXSA9PSAwKSB7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKICAgICAgICAgICAgIHRlbXBsYXRlX2J1ZmZlcltpXSA9IGk7CiAgICAgfQogCiAgICAgdSA9IFB5VW5pY29kZV9EZWNvZGUoKGNoYXIqKSB0ZW1wbGF0ZV9idWZmZXIsIDI1NiwgbmFtZSwgInJlcGxhY2UiKTsKLSAgICBpZiAodSA9PSBOVUxMIHx8IFB5VW5pY29kZV9SRUFEWSh1KSkKKyAgICBpZiAodSA9PSBOVUxMIHx8IFB5VW5pY29kZV9SRUFEWSh1KSkgeworICAgICAgICBQeV9YREVDUkVGKHUpOwogICAgICAgICByZXR1cm4gWE1MX1NUQVRVU19FUlJPUjsKKyAgICB9CiAKICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodSkgIT0gMjU2KSB7CiAgICAgICAgIFB5X0RFQ1JFRih1KTsKQEAgLTExNzksMjggKzEwOTQsMjYgQEAKICAgICBzZWxmLT5pbl9jYWxsYmFjayA9IDA7CiAgICAgc2VsZi0+bnNfcHJlZml4ZXMgPSAwOwogICAgIHNlbGYtPmhhbmRsZXJzID0gTlVMTDsKLSAgICBpZiAobmFtZXNwYWNlX3NlcGFyYXRvciAhPSBOVUxMKSB7Ci0gICAgICAgIHNlbGYtPml0c2VsZiA9IFhNTF9QYXJzZXJDcmVhdGVOUyhlbmNvZGluZywgKm5hbWVzcGFjZV9zZXBhcmF0b3IpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgc2VsZi0+aXRzZWxmID0gWE1MX1BhcnNlckNyZWF0ZShlbmNvZGluZyk7Ci0gICAgfQotI2lmICgoWE1MX01BSk9SX1ZFUlNJT04gPj0gMikgJiYgKFhNTF9NSU5PUl9WRVJTSU9OID49IDEpKSB8fCBkZWZpbmVkKFhNTF9IQVNfU0VUX0hBU0hfU0FMVCkKLSAgICAvKiBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIHVwc3RyZWFtIGluIGxpYmV4cGF0IDIuMS4wLiAgT3VyIGV4cGF0IGNvcHkKLSAgICAgKiBoYXMgYSBiYWNrcG9ydCBvZiB0aGlzIGZlYXR1cmUgd2hlcmUgd2UgYWxzbyBkZWZpbmUgWE1MX0hBU19TRVRfSEFTSF9TQUxUCi0gICAgICogdG8gaW5kaWNhdGUgdGhhdCB3ZSBjYW4gc3RpbGwgdXNlIGl0LiAqLwotICAgIFhNTF9TZXRIYXNoU2FsdChzZWxmLT5pdHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKV9QeV9IYXNoU2VjcmV0LnByZWZpeCk7Ci0jZW5kaWYKICAgICBzZWxmLT5pbnRlcm4gPSBpbnRlcm47CiAgICAgUHlfWElOQ1JFRihzZWxmLT5pbnRlcm4pOwogICAgIFB5T2JqZWN0X0dDX1RyYWNrKHNlbGYpOworCisgICAgLyogbmFtZXNwYWNlX3NlcGFyYXRvciBpcyBlaXRoZXIgTlVMTCBvciBjb250YWlucyBvbmUgY2hhciArIFwwICovCisgICAgc2VsZi0+aXRzZWxmID0gWE1MX1BhcnNlckNyZWF0ZV9NTShlbmNvZGluZywgJkV4cGF0TWVtb3J5SGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzcGFjZV9zZXBhcmF0b3IpOwogICAgIGlmIChzZWxmLT5pdHNlbGYgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlhNTF9QYXJzZXJDcmVhdGUgZmFpbGVkIik7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorI2lmICgoWE1MX01BSk9SX1ZFUlNJT04gPj0gMikgJiYgKFhNTF9NSU5PUl9WRVJTSU9OID49IDEpKSB8fCBkZWZpbmVkKFhNTF9IQVNfU0VUX0hBU0hfU0FMVCkKKyAgICAvKiBUaGlzIGZlYXR1cmUgd2FzIGFkZGVkIHVwc3RyZWFtIGluIGxpYmV4cGF0IDIuMS4wLiAgT3VyIGV4cGF0IGNvcHkKKyAgICAgKiBoYXMgYSBiYWNrcG9ydCBvZiB0aGlzIGZlYXR1cmUgd2hlcmUgd2UgYWxzbyBkZWZpbmUgWE1MX0hBU19TRVRfSEFTSF9TQUxUCisgICAgICogdG8gaW5kaWNhdGUgdGhhdCB3ZSBjYW4gc3RpbGwgdXNlIGl0LiAqLworICAgIFhNTF9TZXRIYXNoU2FsdChzZWxmLT5pdHNlbGYsCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKV9QeV9IYXNoU2VjcmV0LmV4cGF0Lmhhc2hzYWx0KTsKKyNlbmRpZgogICAgIFhNTF9TZXRVc2VyRGF0YShzZWxmLT5pdHNlbGYsICh2b2lkICopc2VsZik7CiAgICAgWE1MX1NldFVua25vd25FbmNvZGluZ0hhbmRsZXIoc2VsZi0+aXRzZWxmLAogICAgICAgICAgICAgICAgICAgKFhNTF9Vbmtub3duRW5jb2RpbmdIYW5kbGVyKSBQeVVua25vd25FbmNvZGluZ0hhbmRsZXIsIE5VTEwpOwpAQCAtMTIwOCw3ICsxMTIxLDcgQEAKICAgICBmb3IgKGkgPSAwOyBoYW5kbGVyX2luZm9baV0ubmFtZSAhPSBOVUxMOyBpKyspCiAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi87CiAKLSAgICBzZWxmLT5oYW5kbGVycyA9IG1hbGxvYyhzaXplb2YoUHlPYmplY3QgKikgKiBpKTsKKyAgICBzZWxmLT5oYW5kbGVycyA9IFB5TWVtX05ldyhQeU9iamVjdCAqLCBpKTsKICAgICBpZiAoIXNlbGYtPmhhbmRsZXJzKSB7CiAgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CkBAIC0xMjM1LDExICsxMTQ4LDExIEBACiAgICAgICAgICAgICBzZWxmLT5oYW5kbGVyc1tpXSA9IE5VTEw7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHRlbXApOwogICAgICAgICB9Ci0gICAgICAgIGZyZWUoc2VsZi0+aGFuZGxlcnMpOworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmhhbmRsZXJzKTsKICAgICAgICAgc2VsZi0+aGFuZGxlcnMgPSBOVUxMOwogICAgIH0KICAgICBpZiAoc2VsZi0+YnVmZmVyICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZShzZWxmLT5idWZmZXIpOworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IE5VTEw7CiAgICAgfQogICAgIFB5X1hERUNSRUYoc2VsZi0+aW50ZXJuKTsKQEAgLTE0MjgsMTggKzEzNDEsMjMgQEAKIHhtbHBhcnNlX3NldGF0dHJvKHhtbHBhcnNlb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKnYpCiB7CiAgICAgLyogU2V0IGF0dHJpYnV0ZSAnbmFtZScgdG8gdmFsdWUgJ3YnLiB2PT1OVUxMIG1lYW5zIGRlbGV0ZSAqLworICAgIGlmICghUHlVbmljb2RlX0NoZWNrKG5hbWUpKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAiYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBzdHJpbmcsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICAgICAgICAgICBuYW1lLT5vYl90eXBlLT50cF9uYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsICJDYW5ub3QgZGVsZXRlIGF0dHJpYnV0ZSIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2sobmFtZSkpOwogICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiYnVmZmVyX3RleHQiKSA9PSAwKSB7CiAgICAgICAgIGludCBiID0gUHlPYmplY3RfSXNUcnVlKHYpOwogICAgICAgICBpZiAoYiA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChiKSB7CiAgICAgICAgICAgICBpZiAoc2VsZi0+YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzZWxmLT5idWZmZXIgPSBtYWxsb2Moc2VsZi0+YnVmZmVyX3NpemUpOworICAgICAgICAgICAgICAgIHNlbGYtPmJ1ZmZlciA9IFB5TWVtX01hbGxvYyhzZWxmLT5idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgICAgICAgaWYgKHNlbGYtPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTE0NTAsNyArMTM2OCw3IEBACiAgICAgICAgIGVsc2UgaWYgKHNlbGYtPmJ1ZmZlciAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoZmx1c2hfY2hhcmFjdGVyX2J1ZmZlcihzZWxmKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgZnJlZShzZWxmLT5idWZmZXIpOworICAgICAgICAgICAgUHlNZW1fRnJlZShzZWxmLT5idWZmZXIpOwogICAgICAgICAgICAgc2VsZi0+YnVmZmVyID0gTlVMTDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMDsKQEAgLTE0ODUsMTcgKzE0MDMsMTggQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgfQogCi0gICAgICBuZXdfYnVmZmVyX3NpemU9UHlMb25nX0FTX0xPTkcodik7CisgICAgICBuZXdfYnVmZmVyX3NpemUgPSBQeUxvbmdfQXNMb25nKHYpOworICAgICAgaWYgKG5ld19idWZmZXJfc2l6ZSA8PSAwKSB7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJ1ZmZlcl9zaXplIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgICAgfQorCiAgICAgICAvKiB0cml2aWFsIGNhc2UgLS0gbm8gY2hhbmdlICovCiAgICAgICBpZiAobmV3X2J1ZmZlcl9zaXplID09IHNlbGYtPmJ1ZmZlcl9zaXplKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgICAgfQogCi0gICAgICBpZiAobmV3X2J1ZmZlcl9zaXplIDw9IDApIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJidWZmZXJfc2l6ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvIik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICAgIH0KLQogICAgICAgLyogY2hlY2sgbWF4aW11bSAqLwogICAgICAgaWYgKG5ld19idWZmZXJfc2l6ZSA+IElOVF9NQVgpIHsKICAgICAgICAgY2hhciBlcnJtc2dbMTAwXTsKQEAgLTE1MTIsOSArMTQzMSw5IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogZnJlZSBleGlzdGluZyBidWZmZXIgKi8KLSAgICAgICAgZnJlZShzZWxmLT5idWZmZXIpOworICAgICAgICBQeU1lbV9GcmVlKHNlbGYtPmJ1ZmZlcik7CiAgICAgICB9Ci0gICAgICBzZWxmLT5idWZmZXIgPSBtYWxsb2MobmV3X2J1ZmZlcl9zaXplKTsKKyAgICAgIHNlbGYtPmJ1ZmZlciA9IFB5TWVtX01hbGxvYyhuZXdfYnVmZmVyX3NpemUpOwogICAgICAgaWYgKHNlbGYtPmJ1ZmZlciA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiAtMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvcHl0aG9uLmMgYi9Nb2R1bGVzL3B5dGhvbi5jCmluZGV4IGY3ODFkOWEuLjk4MTFjMDEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcHl0aG9uLmMKKysrIGIvTW9kdWxlcy9weXRob24uYwpAQCAtMjMsOSArMjMsMTIgQEAKICAgICB3Y2hhcl90ICoqYXJndl9jb3B5MjsKICAgICBpbnQgaSwgcmVzOwogICAgIGNoYXIgKm9sZGxvYzsKKyNpZmRlZiBfX0ZyZWVCU0RfXworICAgIGZwX2V4Y2VwdF90IG07CisjZW5kaWYKIAotICAgIGFyZ3ZfY29weSA9ICh3Y2hhcl90ICoqKVB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCopKihhcmdjKzEpKTsKLSAgICBhcmd2X2NvcHkyID0gKHdjaGFyX3QgKiopUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqKGFyZ2MrMSkpOworICAgIGFyZ3ZfY29weSA9ICh3Y2hhcl90ICoqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yod2NoYXJfdCopICogKGFyZ2MrMSkpOworICAgIGFyZ3ZfY29weTIgPSAod2NoYXJfdCAqKilQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSAqIChhcmdjKzEpKTsKICAgICBpZiAoIWFyZ3ZfY29weSB8fCAhYXJndl9jb3B5MikgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm91dCBvZiBtZW1vcnlcbiIpOwogICAgICAgICByZXR1cm4gMTsKQEAgLTM3LDE3ICs0MCwyMSBAQAogICAgICAqIGV4Y2VwdGlvbnMgYnkgZGVmYXVsdC4gIEhlcmUgd2UgZGlzYWJsZSB0aGVtLgogICAgICAqLwogI2lmZGVmIF9fRnJlZUJTRF9fCi0gICAgZnBfZXhjZXB0X3QgbTsKLQogICAgIG0gPSBmcGdldG1hc2soKTsKICAgICBmcHNldG1hc2sobSAmIH5GUF9YX09GTCk7CiAjZW5kaWYKLSAgICBvbGRsb2MgPSBzdHJkdXAoc2V0bG9jYWxlKExDX0FMTCwgTlVMTCkpOworCisgICAgb2xkbG9jID0gX1B5TWVtX1Jhd1N0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgICAgaWYgKCFvbGRsb2MpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgIiIpOwogICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKICAgICAgICAgYXJndl9jb3B5W2ldID0gX1B5X2NoYXIyd2NoYXIoYXJndltpXSwgTlVMTCk7CiAgICAgICAgIGlmICghYXJndl9jb3B5W2ldKSB7Ci0gICAgICAgICAgICBmcmVlKG9sZGxvYyk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhdGFsIFB5dGhvbiBlcnJvcjogIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgIyVpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKyAxKTsKQEAgLTU4LDEzICs2NSwxMyBAQAogICAgIGFyZ3ZfY29weTJbYXJnY10gPSBhcmd2X2NvcHlbYXJnY10gPSBOVUxMOwogCiAgICAgc2V0bG9jYWxlKExDX0FMTCwgb2xkbG9jKTsKLSAgICBmcmVlKG9sZGxvYyk7CisgICAgUHlNZW1fUmF3RnJlZShvbGRsb2MpOwogICAgIHJlcyA9IFB5X01haW4oYXJnYywgYXJndl9jb3B5KTsKICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5MltpXSk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5MltpXSk7CiAgICAgfQotICAgIFB5TWVtX0ZyZWUoYXJndl9jb3B5KTsKLSAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weTIpOworICAgIFB5TWVtX1Jhd0ZyZWUoYXJndl9jb3B5KTsKKyAgICBQeU1lbV9SYXdGcmVlKGFyZ3ZfY29weTIpOwogICAgIHJldHVybiByZXM7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvcmVhZGxpbmUuYyBiL01vZHVsZXMvcmVhZGxpbmUuYwppbmRleCA4ZmFjNTI2Li5lOWVhYmY1IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3JlYWRsaW5lLmMKKysrIGIvTW9kdWxlcy9yZWFkbGluZS5jCkBAIC02LDYgKzYsNyBAQAogCiAvKiBTdGFuZGFyZCBkZWZpbml0aW9ucyAqLwogI2luY2x1ZGUgIlB5dGhvbi5oIgorI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgPHNldGptcC5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC03Niw2ICs3Nyw1NSBAQAogICAgKHNlZSBpc3N1ZSAjMTcyODkgZm9yIHRoZSBtb3RpdmF0aW9uKS4gKi8KIHN0YXRpYyBjaGFyICpjb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzOwogCit0eXBlZGVmIHN0cnVjdCB7CisgIFB5T2JqZWN0ICpjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rOworICBQeU9iamVjdCAqc3RhcnR1cF9ob29rOworICBQeU9iamVjdCAqcHJlX2lucHV0X2hvb2s7CisgIFB5T2JqZWN0ICpjb21wbGV0ZXI7CisgIFB5T2JqZWN0ICpiZWdpZHg7CisgIFB5T2JqZWN0ICplbmRpZHg7Cit9IHJlYWRsaW5lc3RhdGU7CisKKworI2RlZmluZSByZWFkbGluZV9zdGF0ZShvKSAoKHJlYWRsaW5lc3RhdGUgKilQeU1vZHVsZV9HZXRTdGF0ZShvKSkKKworc3RhdGljIGludAorcmVhZGxpbmVfY2xlYXIoUHlPYmplY3QgKm0pCit7CisgICByZWFkbGluZXN0YXRlICpzdGF0ZSA9IHJlYWRsaW5lX3N0YXRlKG0pOworICAgUHlfQ0xFQVIoc3RhdGUtPmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2spOworICAgUHlfQ0xFQVIoc3RhdGUtPnN0YXJ0dXBfaG9vayk7CisgICBQeV9DTEVBUihzdGF0ZS0+cHJlX2lucHV0X2hvb2spOworICAgUHlfQ0xFQVIoc3RhdGUtPmNvbXBsZXRlcik7CisgICBQeV9DTEVBUihzdGF0ZS0+YmVnaWR4KTsKKyAgIFB5X0NMRUFSKHN0YXRlLT5lbmRpZHgpOworICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3JlYWRsaW5lX3RyYXZlcnNlKFB5T2JqZWN0ICptLCB2aXNpdHByb2MgdmlzaXQsIHZvaWQgKmFyZykKK3sKKyAgICByZWFkbGluZXN0YXRlICpzdGF0ZSA9IHJlYWRsaW5lX3N0YXRlKG0pOworICAgIFB5X1ZJU0lUKHN0YXRlLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rKTsKKyAgICBQeV9WSVNJVChzdGF0ZS0+c3RhcnR1cF9ob29rKTsKKyAgICBQeV9WSVNJVChzdGF0ZS0+cHJlX2lucHV0X2hvb2spOworICAgIFB5X1ZJU0lUKHN0YXRlLT5jb21wbGV0ZXIpOworICAgIFB5X1ZJU0lUKHN0YXRlLT5iZWdpZHgpOworICAgIFB5X1ZJU0lUKHN0YXRlLT5lbmRpZHgpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcmVhZGxpbmVfZnJlZSh2b2lkICptKQoreworICAgIHJlYWRsaW5lX2NsZWFyKChQeU9iamVjdCAqKW0pOworfQorCitzdGF0aWMgUHlNb2R1bGVEZWYgcmVhZGxpbmVtb2R1bGU7CisKKyNkZWZpbmUgcmVhZGxpbmVzdGF0ZV9nbG9iYWwgKChyZWFkbGluZXN0YXRlICopUHlNb2R1bGVfR2V0U3RhdGUoUHlTdGF0ZV9GaW5kTW9kdWxlKCZyZWFkbGluZW1vZHVsZSkpKQorCisKIC8qIEV4cG9ydGVkIGZ1bmN0aW9uIHRvIHNlbmQgb25lIGxpbmUgdG8gcmVhZGxpbmUncyBpbml0IGZpbGUgcGFyc2VyICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC04NiwxMiArMTM2LDEyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIE1ha2UgYSBjb3B5IC0tIHJsX3BhcnNlX2FuZF9iaW5kKCkgbW9kaWZpZXMgaXRzIGFyZ3VtZW50ICovCiAgICAgLyogQmVybmFyZCBIZXJ6b2cgKi8KLSAgICBjb3B5ID0gbWFsbG9jKDEgKyBzdHJsZW4ocykpOworICAgIGNvcHkgPSBQeU1lbV9NYWxsb2MoMSArIHN0cmxlbihzKSk7CiAgICAgaWYgKGNvcHkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgc3RyY3B5KGNvcHksIHMpOwogICAgIHJsX3BhcnNlX2FuZF9iaW5kKGNvcHkpOwotICAgIGZyZWUoY29weSk7IC8qIEZyZWUgdGhlIGNvcHkgKi8KKyAgICBQeU1lbV9GcmVlKGNvcHkpOyAvKiBGcmVlIHRoZSBjb3B5ICovCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKQEAgLTI1MSwyMyArMzAxLDIxIEBACiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9ucyB0byBzcGVjaWZ5IGhvb2sgZnVuY3Rpb25zIGluIFB5dGhvbiAqLwogCi1zdGF0aWMgUHlPYmplY3QgKmNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2sgPSBOVUxMOwotc3RhdGljIFB5T2JqZWN0ICpzdGFydHVwX2hvb2sgPSBOVUxMOwogCiAjaWZkZWYgSEFWRV9STF9QUkVfSU5QVVRfSE9PSwotc3RhdGljIFB5T2JqZWN0ICpwcmVfaW5wdXRfaG9vayA9IE5VTEw7CisKICNlbmRpZgogCiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBzZXRfaG9vaygiY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayIsCi0gICAgICAgICAgICAgICAgICAgICZjb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLCBhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0aW9uX2Rpc3BsYXlfbWF0Y2hlc19ob29rLCBhcmdzKTsKICNpZmRlZiBIQVZFX1JMX0NPTVBMRVRJT05fRElTUExBWV9NQVRDSEVTX0hPT0sKICAgICAvKiBXZSBjYW5ub3Qgc2V0IHRoaXMgaG9vayBnbG9iYWxseSwgc2luY2UgaXQgcmVwbGFjZXMgdGhlCiAgICAgICAgZGVmYXVsdCBjb21wbGV0aW9uIGRpc3BsYXkuICovCiAgICAgcmxfY29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA9Ci0gICAgICAgIGNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2sgPworICAgICAgICByZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vayA/CiAjaWYgZGVmaW5lZChfUkxfRlVOQ1RJT05fVFlQRURFRikKICAgICAgICAgKHJsX2NvbXBkaXNwX2Z1bmNfdCAqKW9uX2NvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2sgOiAwOwogI2Vsc2UKQEAgLTI4OCw3ICszMzYsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9zdGFydHVwX2hvb2soUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIHJldHVybiBzZXRfaG9vaygic3RhcnR1cF9ob29rIiwgJnN0YXJ0dXBfaG9vaywgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJzdGFydHVwX2hvb2siLCAmcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPnN0YXJ0dXBfaG9vaywgYXJncyk7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2Nfc2V0X3N0YXJ0dXBfaG9vaywKQEAgLTMwNSw3ICszNTMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9wcmVfaW5wdXRfaG9vayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmV0dXJuIHNldF9ob29rKCJwcmVfaW5wdXRfaG9vayIsICZwcmVfaW5wdXRfaG9vaywgYXJncyk7CisgICAgcmV0dXJuIHNldF9ob29rKCJwcmVfaW5wdXRfaG9vayIsICZyZWFkbGluZXN0YXRlX2dsb2JhbC0+cHJlX2lucHV0X2hvb2ssIGFyZ3MpOwogfQogCiBQeURvY19TVFJWQVIoZG9jX3NldF9wcmVfaW5wdXRfaG9vaywKQEAgLTMyMCwxMCArMzY4LDEwIEBACiAKIC8qIEV4cG9ydGVkIGZ1bmN0aW9uIHRvIHNwZWNpZnkgYSB3b3JkIGNvbXBsZXRlciBpbiBQeXRob24gKi8KIAotc3RhdGljIFB5T2JqZWN0ICpjb21wbGV0ZXIgPSBOVUxMOwogCi1zdGF0aWMgUHlPYmplY3QgKmJlZ2lkeCA9IE5VTEw7Ci1zdGF0aWMgUHlPYmplY3QgKmVuZGlkeCA9IE5VTEw7CisKKworCiAKIAogLyogR2V0IHRoZSBjb21wbGV0aW9uIHR5cGUgZm9yIHRoZSBzY29wZSBvZiB0aGUgdGFiLWNvbXBsZXRpb24gKi8KQEAgLTM0Myw4ICszOTEsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9iZWdpZHgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZykKIHsKLSAgICBQeV9JTkNSRUYoYmVnaWR4KTsKLSAgICByZXR1cm4gYmVnaWR4OworICAgIFB5X0lOQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4KTsKKyAgICByZXR1cm4gcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmJlZ2lkeDsKIH0KIAogUHlEb2NfU1RSVkFSKGRvY19nZXRfYmVnaWR4LApAQCAtMzU3LDggKzQwNSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogZ2V0X2VuZGlkeChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJnKQogewotICAgIFB5X0lOQ1JFRihlbmRpZHgpOwotICAgIHJldHVybiBlbmRpZHg7CisgICAgUHlfSU5DUkVGKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5lbmRpZHgpOworICAgIHJldHVybiByZWFkbGluZXN0YXRlX2dsb2JhbC0+ZW5kaWR4OwogfQogCiBQeURvY19TVFJWQVIoZG9jX2dldF9lbmRpZHgsCkBAIC0zNzksMTAgKzQyNywxMSBAQAogICAgIC8qIEtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIGFsbG9jYXRlZCBtZW1vcnkgaW4gdGhlIG1vZHVsZSBzdGF0ZSBpbiBjYXNlCiAgICAgICAgc29tZSBvdGhlciBtb2R1bGUgbW9kaWZpZXMgcmxfY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycwogICAgICAgIChzZWUgaXNzdWUgIzE3Mjg5KS4gKi8KLSAgICBmcmVlKGNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMpOwotICAgIGNvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMgPSBzdHJkdXAoYnJlYWtfY2hhcnMpOwotICAgIGlmIChjb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzKSB7Ci0gICAgICAgIHJsX2NvbXBsZXRlcl93b3JkX2JyZWFrX2NoYXJhY3RlcnMgPSBjb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzOworICAgIGJyZWFrX2NoYXJzID0gc3RyZHVwKGJyZWFrX2NoYXJzKTsKKyAgICBpZiAoYnJlYWtfY2hhcnMpIHsKKyAgICAgICAgZnJlZShjb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzKTsKKyAgICAgICAgY29tcGxldGVyX3dvcmRfYnJlYWtfY2hhcmFjdGVycyA9IGJyZWFrX2NoYXJzOworICAgICAgICBybF9jb21wbGV0ZXJfd29yZF9icmVha19jaGFyYWN0ZXJzID0gYnJlYWtfY2hhcnM7CiAgICAgICAgIFB5X1JFVFVSTl9OT05FOwogICAgIH0KICAgICBlbHNlCkBAIC01MjMsNyArNTcyLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfY29tcGxldGVyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZXR1cm4gc2V0X2hvb2soImNvbXBsZXRlciIsICZjb21wbGV0ZXIsIGFyZ3MpOworICAgIHJldHVybiBzZXRfaG9vaygiY29tcGxldGVyIiwgJnJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIsIGFyZ3MpOwogfQogCiBQeURvY19TVFJWQVIoZG9jX3NldF9jb21wbGV0ZXIsCkBAIC01MzcsMTEgKzU4NiwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9jb21wbGV0ZXIoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpub2FyZ3MpCiB7Ci0gICAgaWYgKGNvbXBsZXRlciA9PSBOVUxMKSB7CisgICAgaWYgKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIgPT0gTlVMTCkgewogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9Ci0gICAgUHlfSU5DUkVGKGNvbXBsZXRlcik7Ci0gICAgcmV0dXJuIGNvbXBsZXRlcjsKKyAgICBQeV9JTkNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmNvbXBsZXRlcik7CisgICAgcmV0dXJuIHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXI7CiB9CiAKIFB5RG9jX1NUUlZBUihkb2NfZ2V0X2NvbXBsZXRlciwKQEAgLTc0NSw5ICs3OTQsNiBAQAogICAgIGludCByZXN1bHQgPSAwOwogICAgIGlmIChmdW5jICE9IE5VTEwpIHsKICAgICAgICAgUHlPYmplY3QgKnI7Ci0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7Ci0jZW5kaWYKICAgICAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihmdW5jLCBOVUxMKTsKICAgICAgICAgaWYgKHIgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC03NjQsOSArODEwLDYgQEAKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgUHlfWERFQ1JFRihyKTsKICAgICAgIGRvbmU6Ci0jaWZkZWYgV0lUSF9USFJFQUQKLSAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbHN0YXRlKTsKLSNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzc5LDcgKzgyMiwxNSBAQAogb25fc3RhcnR1cF9ob29rKCkKICNlbmRpZgogewotICAgIHJldHVybiBvbl9ob29rKHN0YXJ0dXBfaG9vayk7CisgICAgaW50IHI7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyNlbmRpZgorICAgIHIgPSBvbl9ob29rKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5zdGFydHVwX2hvb2spOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbHN0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByOwogfQogCiAjaWZkZWYgSEFWRV9STF9QUkVfSU5QVVRfSE9PSwpAQCAtNzkwLDcgKzg0MSwxNSBAQAogb25fcHJlX2lucHV0X2hvb2soKQogI2VuZGlmCiB7Ci0gICAgcmV0dXJuIG9uX2hvb2socHJlX2lucHV0X2hvb2spOworICAgIGludCByOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWxzdGF0ZSA9IFB5R0lMU3RhdGVfRW5zdXJlKCk7CisjZW5kaWYKKyAgICByID0gb25faG9vayhyZWFkbGluZXN0YXRlX2dsb2JhbC0+cHJlX2lucHV0X2hvb2spOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbHN0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByOwogfQogI2VuZGlmCiAKQEAgLTgxNyw3ICs4NzYsNyBAQAogICAgICAgICBpZiAoUHlMaXN0X1NldEl0ZW0obSwgaSwgcykgPT0gLTEpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICByID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKGNvbXBsZXRpb25fZGlzcGxheV9tYXRjaGVzX2hvb2ssCisgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGlvbl9kaXNwbGF5X21hdGNoZXNfaG9vaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzT2kiLCBtYXRjaGVzWzBdLCBtLCBtYXhfbGVuZ3RoKTsKIAogICAgIFB5X0RFQ1JFRihtKTsgbT1OVUxMOwpAQCAtODQ3LDEzICs5MDYsMTMgQEAKIG9uX2NvbXBsZXRpb24oY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXRlKQogewogICAgIGNoYXIgKnJlc3VsdCA9IE5VTEw7Ci0gICAgaWYgKGNvbXBsZXRlciAhPSBOVUxMKSB7CisgICAgaWYgKHJlYWRsaW5lc3RhdGVfZ2xvYmFsLT5jb21wbGV0ZXIgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqcjsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKICNlbmRpZgogICAgICAgICBybF9hdHRlbXB0ZWRfY29tcGxldGlvbl9vdmVyID0gMTsKLSAgICAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihjb21wbGV0ZXIsICJzaSIsIHRleHQsIHN0YXRlKTsKKyAgICAgICAgciA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbihyZWFkbGluZXN0YXRlX2dsb2JhbC0+Y29tcGxldGVyLCAic2kiLCB0ZXh0LCBzdGF0ZSk7CiAgICAgICAgIGlmIChyID09IE5VTEwpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBpZiAociA9PSBQeV9Ob25lKSB7CkBAIC04ODYsMjQgKzk0NSwzMiBAQAogc3RhdGljIGNoYXIgKioKIGZsZXhfY29tcGxldGUoY29uc3QgY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogeworICAgIGNoYXIgKipyZXN1bHQ7CisjaWZkZWYgV0lUSF9USFJFQUQKKyAgICBQeUdJTFN0YXRlX1NUQVRFIGdpbHN0YXRlID0gUHlHSUxTdGF0ZV9FbnN1cmUoKTsKKyNlbmRpZgogI2lmZGVmIEhBVkVfUkxfQ09NUExFVElPTl9BUFBFTkRfQ0hBUkFDVEVSCiAgICAgcmxfY29tcGxldGlvbl9hcHBlbmRfY2hhcmFjdGVyID0nXDAnOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9STF9DT01QTEVUSU9OX1NVUFBSRVNTX0FQUEVORAogICAgIHJsX2NvbXBsZXRpb25fc3VwcHJlc3NfYXBwZW5kID0gMDsKICNlbmRpZgotICAgIFB5X1hERUNSRUYoYmVnaWR4KTsKLSAgICBQeV9YREVDUkVGKGVuZGlkeCk7Ci0gICAgYmVnaWR4ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSBzdGFydCk7Ci0gICAgZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSBlbmQpOwotICAgIHJldHVybiBjb21wbGV0aW9uX21hdGNoZXModGV4dCwgKm9uX2NvbXBsZXRpb24pOworICAgIFB5X1hERUNSRUYocmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmJlZ2lkeCk7CisgICAgUHlfWERFQ1JFRihyZWFkbGluZXN0YXRlX2dsb2JhbC0+ZW5kaWR4KTsKKyAgICByZWFkbGluZXN0YXRlX2dsb2JhbC0+YmVnaWR4ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSBzdGFydCk7CisgICAgcmVhZGxpbmVzdGF0ZV9nbG9iYWwtPmVuZGlkeCA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgZW5kKTsKKyAgICByZXN1bHQgPSBjb21wbGV0aW9uX21hdGNoZXModGV4dCwgKm9uX2NvbXBsZXRpb24pOworI2lmZGVmIFdJVEhfVEhSRUFECisgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbHN0YXRlKTsKKyNlbmRpZgorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIAogLyogSGVscGVyIHRvIGluaXRpYWxpemUgR05VIHJlYWRsaW5lIHByb3Blcmx5LiAqLwogCiBzdGF0aWMgdm9pZAotc2V0dXBfcmVhZGxpbmUodm9pZCkKK3NldHVwX3JlYWRsaW5lKHJlYWRsaW5lc3RhdGUgKm1vZF9zdGF0ZSkKIHsKICNpZmRlZiBTQVZFX0xPQ0FMRQogICAgIGNoYXIgKnNhdmVkX2xvY2FsZSA9IHN0cmR1cChzZXRsb2NhbGUoTENfQ1RZUEUsIE5VTEwpKTsKQEAgLTkzMywxMCArMTAwMCw2IEBACiAgICAgdXNpbmdfaGlzdG9yeSgpOwogCiAgICAgcmxfcmVhZGxpbmVfbmFtZSA9ICJweXRob24iOwotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgLyogQWxsb3cgJGlmIHRlcm09IGluIC5pbnB1dHJjIHRvIHdvcmsgKi8KLSAgICBybF90ZXJtaW5hbF9uYW1lID0gZ2V0ZW52KCJURVJNIik7Ci0jZW5kaWYKICAgICAvKiBGb3JjZSByZWJpbmQgb2YgVEFCIHRvIGluc2VydC10YWIgKi8KICAgICBybF9iaW5kX2tleSgnXHQnLCBybF9pbnNlcnQpOwogICAgIC8qIEJpbmQgYm90aCBFU0MtVEFCIGFuZCBFU0MtRVNDIHRvIHRoZSBjb21wbGV0aW9uIGZ1bmN0aW9uICovCkBAIC05NTUsOCArMTAxOCwyMyBAQAogICAgICAgICBzdHJkdXAoIiBcdFxuYH4hQCMkJV4mKigpLT0rW3tdfVxcfDs6J1wiLDw+Lz8iKTsKICAgICAgICAgLyogQWxsIG5vbmFscGhhbnVtcyBleGNlcHQgJy4nICovCiAKLSAgICBiZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOwotICAgIGVuZGlkeCA9IFB5TG9uZ19Gcm9tTG9uZygwTCk7CisgICAgbW9kX3N0YXRlLT5iZWdpZHggPSBQeUxvbmdfRnJvbUxvbmcoMEwpOworICAgIG1vZF9zdGF0ZS0+ZW5kaWR4ID0gUHlMb25nX0Zyb21Mb25nKDBMKTsKKworI2lmbmRlZiBfX0FQUExFX18KKyAgICBpZiAoIWlzYXR0eShTVERPVVRfRklMRU5PKSkgeworICAgICAgICAvKiBJc3N1ZSAjMTk4ODQ6IHN0ZG91dCBpcyBubyBhIHRlcm1pbmFsLiBEaXNhYmxlIG1ldGEgbW9kaWZpZXIKKyAgICAgICAgICAga2V5cyB0byBub3Qgd3JpdGUgdGhlIEFOU0kgc2VxdWVuY2UgIlwwMzNbMTAzNGgiIGludG8gc3Rkb3V0LiBPbgorICAgICAgICAgICB0ZXJtaW5hbHMgc3VwcG9ydGluZyA4IGJpdCBjaGFyYWN0ZXJzIGxpa2UgVEVSTT14dGVybS0yNTZjb2xvcgorICAgICAgICAgICAod2hpY2ggaXMgbm93IHRoZSBkZWZhdWx0IEZlZG9yYSBzaW5jZSBGZWRvcmEgMTgpLCB0aGUgbWV0YSBrZXkgaXMKKyAgICAgICAgICAgdXNlZCB0byBlbmFibGUgc3VwcG9ydCBvZiA4IGJpdCBjaGFyYWN0ZXJzIChBTlNJIHNlcXVlbmNlCisgICAgICAgICAgICJcMDMzWzEwMzRoIikuCisKKyAgICAgICAgICAgV2l0aCBsaWJlZGl0LCB0aGlzIGNhbGwgbWFrZXMgcmVhZGxpbmUoKSBjcmFzaC4gKi8KKyAgICAgICAgcmxfdmFyaWFibGVfYmluZCAoImVuYWJsZS1tZXRhLWtleSIsICJvZmYiKTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8qIEluaXRpYWxpemUgKGFsbG93cyAuaW5wdXRyYyB0byBvdmVycmlkZSkKICAgICAgKgogICAgICAqIFhYWDogQSBidWcgaW4gdGhlIHJlYWRsaW5lLTIuMiBsaWJyYXJ5IGNhdXNlcyBhIG1lbW9yeSBsZWFrCkBAIC05ODUsMTAgKzEwNjMsOCBAQAogICAgIHJsX2NhbGxiYWNrX2hhbmRsZXJfcmVtb3ZlKCk7CiB9CiAKLWV4dGVybiBQeVRocmVhZFN0YXRlKiBfUHlPU19SZWFkbGluZVRTdGF0ZTsKLQogc3RhdGljIGNoYXIgKgotcmVhZGxpbmVfdW50aWxfZW50ZXJfb3Jfc2lnbmFsKGNoYXIgKnByb21wdCwgaW50ICpzaWduYWwpCityZWFkbGluZV91bnRpbF9lbnRlcl9vcl9zaWduYWwoY29uc3QgY2hhciAqcHJvbXB0LCBpbnQgKnNpZ25hbCkKIHsKICAgICBjaGFyICogbm90X2RvbmVfcmVhZGluZyA9ICIiOwogICAgIGZkX3NldCBzZWxlY3RzZXQ7CkBAIC0xMDYzLDcgKzExMzksNyBAQAogCiAKIHN0YXRpYyBjaGFyICoKLXJlYWRsaW5lX3VudGlsX2VudGVyX29yX3NpZ25hbChjaGFyICpwcm9tcHQsIGludCAqc2lnbmFsKQorcmVhZGxpbmVfdW50aWxfZW50ZXJfb3Jfc2lnbmFsKGNvbnN0IGNoYXIgKnByb21wdCwgaW50ICpzaWduYWwpCiB7CiAgICAgUHlPU19zaWdoYW5kbGVyX3Qgb2xkX2ludGhhbmRsZXI7CiAgICAgY2hhciAqcDsKQEAgLTEwOTAsNyArMTE2Niw3IEBACiAKIAogc3RhdGljIGNoYXIgKgotY2FsbF9yZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK2NhbGxfcmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7CiAgICAgc2l6ZV90IG47CiAgICAgY2hhciAqcCwgKnE7CkBAIC0xMTE5LDkgKzExOTUsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICAvKiBXZSBnb3QgYW4gRU9GLCByZXR1cm4gYSBlbXB0eSBzdHJpbmcuICovCisgICAgLyogV2UgZ290IGFuIEVPRiwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gKi8KICAgICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAgIHAgPSBQeU1lbV9NYWxsb2MoMSk7CisgICAgICAgIHAgPSBQeU1lbV9SYXdNYWxsb2MoMSk7CiAgICAgICAgIGlmIChwICE9IE5VTEwpCiAgICAgICAgICAgICAqcCA9ICdcMCc7CiAgICAgICAgIFJFU1RPUkVfTE9DQUxFKHNhdmVkX2xvY2FsZSkKQEAgLTExNDksNyArMTIyNSw3IEBACiAgICAgLyogQ29weSB0aGUgbWFsbG9jJ2VkIGJ1ZmZlciBpbnRvIGEgUHlNZW1fTWFsbG9jJ2VkIG9uZSBhbmQKICAgICAgICByZWxlYXNlIHRoZSBvcmlnaW5hbC4gKi8KICAgICBxID0gcDsKLSAgICBwID0gUHlNZW1fTWFsbG9jKG4rMik7CisgICAgcCA9IFB5TWVtX1Jhd01hbGxvYyhuKzIpOwogICAgIGlmIChwICE9IE5VTEwpIHsKICAgICAgICAgc3RybmNweShwLCBxLCBuKTsKICAgICAgICAgcFtuXSA9ICdcbic7CkBAIC0xMTc1LDEyICsxMjUxLDEyIEBACiAgICAgUHlNb2R1bGVEZWZfSEVBRF9JTklULAogICAgICJyZWFkbGluZSIsCiAgICAgZG9jX21vZHVsZSwKLSAgICAtMSwKKyAgICBzaXplb2YocmVhZGxpbmVzdGF0ZSksCiAgICAgcmVhZGxpbmVfbWV0aG9kcywKICAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTCwKLSAgICBOVUxMCisgICAgcmVhZGxpbmVfdHJhdmVyc2UsCisgICAgcmVhZGxpbmVfY2xlYXIsCisgICAgcmVhZGxpbmVfZnJlZQogfTsKIAogCkBAIC0xMTg4LDYgKzEyNjQsNyBAQAogUHlJbml0X3JlYWRsaW5lKHZvaWQpCiB7CiAgICAgUHlPYmplY3QgKm07CisgICAgcmVhZGxpbmVzdGF0ZSAqbW9kX3N0YXRlOwogCiAjaWZkZWYgX19BUFBMRV9fCiAgICAgaWYgKHN0cm5jbXAocmxfbGlicmFyeV92ZXJzaW9uLCBsaWJlZGl0X3ZlcnNpb25fdGFnLCBzdHJsZW4obGliZWRpdF92ZXJzaW9uX3RhZykpID09IDApIHsKQEAgLTEyMDQsNyArMTI4MSwxMiBAQAogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgbW9kX3N0YXRlID0gKHJlYWRsaW5lc3RhdGUgKikgUHlNb2R1bGVfR2V0U3RhdGUobSk7CiAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9IGNhbGxfcmVhZGxpbmU7Ci0gICAgc2V0dXBfcmVhZGxpbmUoKTsKKyAgICBzZXR1cF9yZWFkbGluZShtb2Rfc3RhdGUpOworCisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIl9SRUFETElORV9WRVJTSU9OIiwgUkxfUkVBRExJTkVfVkVSU0lPTik7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIl9SRUFETElORV9SVU5USU1FX1ZFUlNJT04iLCBybF9yZWFkbGluZV92ZXJzaW9uKTsKKwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9yZXNvdXJjZS5jIGIvTW9kdWxlcy9yZXNvdXJjZS5jCmluZGV4IGIyOTRhOGMuLjNhMWNmMDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvcmVzb3VyY2UuYworKysgYi9Nb2R1bGVzL3Jlc291cmNlLmMKQEAgLTEwNiw2ICsxMDYsNDQgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50CitweTJybGltaXQoUHlPYmplY3QgKmN1cm9iaiwgUHlPYmplY3QgKm1heG9iaiwgc3RydWN0IHJsaW1pdCAqcmxfb3V0KQoreworI2lmICFkZWZpbmVkKEhBVkVfTEFSR0VGSUxFX1NVUFBPUlQpCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZyhtYXhvYmopOworICAgIGlmIChybF9vdXQtPnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIC0xOworI2Vsc2UKKyAgICAvKiBUaGUgbGltaXRzIGFyZSBwcm9iYWJseSBiaWdnZXIgdGhhbiBhIGxvbmcgKi8KKyAgICBybF9vdXQtPnJsaW1fY3VyID0gUHlMb25nX0FzTG9uZ0xvbmcoY3Vyb2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBybF9vdXQtPnJsaW1fbWF4ID0gUHlMb25nX0FzTG9uZ0xvbmcobWF4b2JqKTsKKyAgICBpZiAocmxfb3V0LT5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorCisgICAgcmxfb3V0LT5ybGltX2N1ciA9IHJsX291dC0+cmxpbV9jdXIgJiBSTElNX0lORklOSVRZOworICAgIHJsX291dC0+cmxpbV9tYXggPSBybF9vdXQtPnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKKyAgICByZXR1cm4gMDsKKworfQorCitzdGF0aWMgUHlPYmplY3QqCitybGltaXQycHkoc3RydWN0IHJsaW1pdCBybCkKK3sKKyNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQorICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7CisgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgogcmVzb3VyY2VfZ2V0cmxpbWl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKQEAgLTEyNiwxNSArMTY0LDcgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0KLSNpZiBkZWZpbmVkKEhBVkVfTE9OR19MT05HKQotICAgIGlmIChzaXplb2YocmwucmxpbV9jdXIpID4gc2l6ZW9mKGxvbmcpKSB7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJMTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQWV9MT05HX0xPTkcpIHJsLnJsaW1fY3VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUFlfTE9OR19MT05HKSBybC5ybGltX21heCk7Ci0gICAgfQotI2VuZGlmCi0gICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImxsIiwgKGxvbmcpIHJsLnJsaW1fY3VyLCAobG9uZykgcmwucmxpbV9tYXgpOworICAgIHJldHVybiBybGltaXQycHkocmwpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTY2LDI1ICsxOTYsMTAgQEAKICAgICBjdXJvYmogPSBQeVR1cGxlX0dFVF9JVEVNKGxpbWl0cywgMCk7CiAgICAgbWF4b2JqID0gUHlUdXBsZV9HRVRfSVRFTShsaW1pdHMsIDEpOwogCi0jaWYgIWRlZmluZWQoSEFWRV9MQVJHRUZJTEVfU1VQUE9SVCkKLSAgICBybC5ybGltX2N1ciA9IFB5TG9uZ19Bc0xvbmcoY3Vyb2JqKTsKLSAgICBpZiAocmwucmxpbV9jdXIgPT0gKHJsaW1fdCktMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgIGlmIChweTJybGltaXQoY3Vyb2JqLCBtYXhvYmosICZybCkgPCAwKSB7CiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nKG1heG9iaik7Ci0gICAgaWYgKHJsLnJsaW1fbWF4ID09IChybGltX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBlcnJvcjsKLSNlbHNlCi0gICAgLyogVGhlIGxpbWl0cyBhcmUgcHJvYmFibHkgYmlnZ2VyIHRoYW4gYSBsb25nICovCi0gICAgcmwucmxpbV9jdXIgPSBQeUxvbmdfQXNMb25nTG9uZyhjdXJvYmopOwotICAgIGlmIChybC5ybGltX2N1ciA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgcmwucmxpbV9tYXggPSBQeUxvbmdfQXNMb25nTG9uZyhtYXhvYmopOwotICAgIGlmIChybC5ybGltX21heCA9PSAocmxpbV90KS0xICYmIFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0jZW5kaWYKKyAgICB9CiAKLSAgICBybC5ybGltX2N1ciA9IHJsLnJsaW1fY3VyICYgUkxJTV9JTkZJTklUWTsKLSAgICBybC5ybGltX21heCA9IHJsLnJsaW1fbWF4ICYgUkxJTV9JTkZJTklUWTsKICAgICBpZiAoc2V0cmxpbWl0KHJlc291cmNlLCAmcmwpID09IC0xKSB7CiAgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTIwNSw2ICsyMjAsNDggQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorI2lmZGVmIEhBVkVfUFJMSU1JVAorc3RhdGljIFB5T2JqZWN0ICoKK3Jlc291cmNlX3BybGltaXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIHN0cnVjdCBybGltaXQgb2xkX2xpbWl0LCBuZXdfbGltaXQ7CisgICAgaW50IHJlc291cmNlLCByZXR2YWw7CisgICAgcGlkX3QgcGlkOworICAgIFB5T2JqZWN0ICpjdXJvYmo9TlVMTCwgKm1heG9iaj1OVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9QSUQgIml8KE9PKTpwcmxpbWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgJnBpZCwgJnJlc291cmNlLCAmY3Vyb2JqLCAmbWF4b2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAocmVzb3VyY2UgPCAwIHx8IHJlc291cmNlID49IFJMSU1fTkxJTUlUUykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHJlc291cmNlIHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoY3Vyb2JqICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKHB5MnJsaW1pdChjdXJvYmosIG1heG9iaiwgJm5ld19saW1pdCkgPCAwKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSBwcmxpbWl0KHBpZCwgcmVzb3VyY2UsICZuZXdfbGltaXQsICZvbGRfbGltaXQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcmV0dmFsID0gcHJsaW1pdChwaWQsIHJlc291cmNlLCBOVUxMLCAmb2xkX2xpbWl0KTsKKyAgICB9CisKKyAgICBpZiAocmV0dmFsID09IC0xKSB7CisgICAgICAgIGlmIChlcnJubyA9PSBFSU5WQUwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdXJyZW50IGxpbWl0IGV4Y2VlZHMgbWF4aW11bSBsaW1pdCIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gcmxpbWl0MnB5KG9sZF9saW1pdCk7Cit9CisjZW5kaWYgLyogSEFWRV9QUkxJTUlUICovCisKIHN0YXRpYyBQeU9iamVjdCAqCiByZXNvdXJjZV9nZXRwYWdlc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKnVudXNlZCkKIHsKQEAgLTIyOSw2ICsyODYsOSBAQAogcmVzb3VyY2VfbWV0aG9kc1tdID0gewogICAgIHsiZ2V0cnVzYWdlIiwgICAgcmVzb3VyY2VfZ2V0cnVzYWdlLCAgIE1FVEhfVkFSQVJHU30sCiAgICAgeyJnZXRybGltaXQiLCAgICByZXNvdXJjZV9nZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKKyNpZmRlZiBIQVZFX1BSTElNSVQKKyAgICB7InBybGltaXQiLCAgICAgIHJlc291cmNlX3BybGltaXQsICAgICBNRVRIX1ZBUkFSR1N9LAorI2VuZGlmCiAgICAgeyJzZXRybGltaXQiLCAgICByZXNvdXJjZV9zZXRybGltaXQsICAgTUVUSF9WQVJBUkdTfSwKICAgICB7ImdldHBhZ2VzaXplIiwgIHJlc291cmNlX2dldHBhZ2VzaXplLCBNRVRIX05PQVJHU30sCiAgICAge05VTEwsIE5VTEx9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwpAQCAtMjYzLDgwICszMjMsMTE5IEBACiAgICAgLyogQWRkIHNvbWUgc3ltYm9saWMgY29uc3RhbnRzIHRvIHRoZSBtb2R1bGUgKi8KICAgICBQeV9JTkNSRUYoUHlFeGNfT1NFcnJvcik7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcnJvciIsIFB5RXhjX09TRXJyb3IpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFJVc2FnZVR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0cnVjdF9ydXNhZ2VfZGVzYyk7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlN0cnVjdFJVc2FnZVR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3J1c2FnZV9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBQeV9JTkNSRUYoJlN0cnVjdFJVc2FnZVR5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3J1c2FnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCopICZTdHJ1Y3RSVXNhZ2VUeXBlKTsKIAogICAgIC8qIGluc2VydCBjb25zdGFudHMgKi8KICNpZmRlZiBSTElNSVRfQ1BVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9DUFUiLCBSTElNSVRfQ1BVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ1BVKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0ZTSVpFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJMSU1JVF9GU0laRSIsIFJMSU1JVF9GU0laRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0ZTSVpFKTsKICNlbmRpZgogCiAjaWZkZWYgUkxJTUlUX0RBVEEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX0RBVEEiLCBSTElNSVRfREFUQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX0RBVEEpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfU1RBQ0sKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NUQUNLIiwgUkxJTUlUX1NUQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU1RBQ0spOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfQ09SRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQ09SRSIsIFJMSU1JVF9DT1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfQ09SRSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9OT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05PRklMRSIsIFJMSU1JVF9OT0ZJTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9OT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfT0ZJTEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX09GSUxFIiwgUkxJTUlUX09GSUxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfT0ZJTEUpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfVk1FTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfVk1FTSIsIFJMSU1JVF9WTUVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfVk1FTSk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9BUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfQVMiLCBSTElNSVRfQVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9BUyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9SU1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1JTUyIsIFJMSU1JVF9SU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SU1MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTlBST0MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX05QUk9DIiwgUkxJTUlUX05QUk9DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTlBST0MpOwogI2VuZGlmCiAKICNpZmRlZiBSTElNSVRfTUVNTE9DSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSTElNSVRfTUVNTE9DSyIsIFJMSU1JVF9NRU1MT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTUVNTE9DSyk7CiAjZW5kaWYKIAogI2lmZGVmIFJMSU1JVF9TQlNJWkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkxJTUlUX1NCU0laRSIsIFJMSU1JVF9TQlNJWkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TQlNJWkUpOwogI2VuZGlmCiAKKy8qIExpbnV4IHNwZWNpZmljICovCisjaWZkZWYgUkxJTUlUX01TR1FVRVVFCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkxJTUlUX01TR1FVRVVFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX05JQ0UKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTklDRSk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9SVFBSSU8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfUlRQUklPKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX1JUVElNRQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9SVFRJTUUpOworI2VuZGlmCisKKyNpZmRlZiBSTElNSVRfU0lHUEVORElORworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJMSU1JVF9TSUdQRU5ESU5HKTsKKyNlbmRpZgorCisvKiB0YXJnZXQgKi8KICNpZmRlZiBSVVNBR0VfU0VMRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfU0VMRiIsIFJVU0FHRV9TRUxGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSVVNBR0VfU0VMRik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9DSElMRFJFTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfQ0hJTERSRU4iLCBSVVNBR0VfQ0hJTERSRU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9DSElMRFJFTik7CiAjZW5kaWYKIAogI2lmZGVmIFJVU0FHRV9CT1RICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJVU0FHRV9CT1RIIiwgUlVTQUdFX0JPVEgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJVU0FHRV9CT1RIKTsKICNlbmRpZgogCiAjaWZkZWYgUlVTQUdFX1RIUkVBRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSVVNBR0VfVEhSRUFEIiwgUlVTQUdFX1RIUkVBRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUlVTQUdFX1RIUkVBRCk7CisjZW5kaWYKKworLyogRnJlZUJTRCBzcGVjaWZpYyAqLworCisjaWZkZWYgUkxJTUlUX1NXQVAKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU1dBUCk7CisjZW5kaWYKKworI2lmZGVmIFJMSU1JVF9TQlNJWkUKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfU0JTSVpFKTsKKyNlbmRpZgorCisjaWZkZWYgUkxJTUlUX05QVFMKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSTElNSVRfTlBUUyk7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9MT05HX0xPTkcpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jIGIvTW9kdWxlcy9zZWxlY3Rtb2R1bGUuYwppbmRleCA5NTJhMDkxLi42NWZiNmE0IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NlbGVjdG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2VsZWN0bW9kdWxlLmMKQEAgLTQ3LDE5ICs0NywxMSBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2luY2x1ZGUgPHV0aWxzLmg+Ci0jZW5kaWYKLQogI2lmZGVmIE1TX1dJTkRPV1MKICMgIGRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCiAjICBpbmNsdWRlIDx3aW5zb2NrLmg+CiAjZWxzZQogIyAgZGVmaW5lIFNPQ0tFVCBpbnQKLSMgIGlmIGRlZmluZWQoX19WTVMpCi0jICAgIGluY2x1ZGUgPHNvY2tldC5oPgotIyAgZW5kaWYKICNlbmRpZgogCiAvKiBsaXN0IG9mIFB5dGhvbiBvYmplY3RzIGFuZCB0aGVpciBmaWxlIGRlc2NyaXB0b3IgKi8KQEAgLTIyMCwxMCArMjEyLDE4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBlbHNlIHsKLSNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIC8qIE9uIE9wZW5CU0QgNS40LCB0aW1ldmFsLnR2X3NlYyBpcyBhIGxvbmcuCisgICAgICAgICAqIEV4YW1wbGU6IGxvbmcgaXMgNjQtYml0LCB3aGVyZWFzIHRpbWVfdCBpcyAzMi1iaXQuICovCiAgICAgICAgIHRpbWVfdCBzZWM7Ci0gICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXZhbCh0b3V0LCAmc2VjLCAmdHYudHZfdXNlYykgPT0gLTEpCisgICAgICAgIC8qIE9uIE9TIFggNjQtYml0LCB0aW1ldmFsLnR2X3VzZWMgaXMgYW4gaW50IChhbmQgdGh1cyBzdGlsbCA0CisgICAgICAgICAgIGJ5dGVzIGFzIHJlcXVpcmVkKSwgYnV0IG5vIGxvbmdlciBkZWZpbmVkIGJ5IGEgbG9uZy4gKi8KKyAgICAgICAgbG9uZyB1c2VjOworICAgICAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWV2YWwodG91dCwgJnNlYywgJnVzZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHlUaW1lX1JPVU5EX1VQKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICAgICAgLyogT24gV2luZG93cywgdGltZXZhbC50dl9zZWMgaXMgYSBsb25nICgzMiBiaXQpLAorICAgICAgICAgKiB3aGVyZWFzIHRpbWVfdCBjYW4gYmUgNjQtYml0LiAqLwogICAgICAgICBhc3NlcnQoc2l6ZW9mKHR2LnR2X3NlYykgPT0gc2l6ZW9mKGxvbmcpKTsKICNpZiBTSVpFT0ZfVElNRV9UID4gU0laRU9GX0xPTkcKICAgICAgICAgaWYgKHNlYyA+IExPTkdfTUFYKSB7CkBAIC0yMzQsMTMgKzIzNCwxMCBAQAogI2VuZGlmCiAgICAgICAgIHR2LnR2X3NlYyA9IChsb25nKXNlYzsKICNlbHNlCi0gICAgICAgIC8qIDY0LWJpdCBPUyBYIGhhcyBzdHJ1Y3QgdGltZXZhbC50dl91c2VjIGFzIGFuIGludCAoYW5kIHRodXMgc3RpbGwgNAotICAgICAgICAgICBieXRlcyBhcyByZXF1aXJlZCksIGJ1dCBubyBsb25nZXIgZGVmaW5lZCBieSBhIGxvbmcuICovCi0gICAgICAgIGxvbmcgdHZfdXNlYzsKLSAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1ldmFsKHRvdXQsICZ0di50dl9zZWMsICZ0dl91c2VjKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB0di50dl91c2VjID0gdHZfdXNlYzsKKyAgICAgICAgYXNzZXJ0KHNpemVvZih0di50dl9zZWMpID49IHNpemVvZihzZWMpKTsKKyAgICAgICAgdHYudHZfc2VjID0gc2VjOwogI2VuZGlmCisgICAgICAgIHR2LnR2X3VzZWMgPSB1c2VjOwogICAgICAgICBpZiAodHYudHZfc2VjIDwgMCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ0aW1lb3V0IG11c3QgYmUgbm9uLW5lZ2F0aXZlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMwMyw5ICszMDAsOSBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXQgPSBQeVR1cGxlX1BhY2soMywgaWZkbGlzdCwgb2ZkbGlzdCwgZWZkbGlzdCk7CiAKLSAgICAgICAgUHlfREVDUkVGKGlmZGxpc3QpOwotICAgICAgICBQeV9ERUNSRUYob2ZkbGlzdCk7Ci0gICAgICAgIFB5X0RFQ1JFRihlZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihpZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihvZmRsaXN0KTsKKyAgICAgICAgUHlfWERFQ1JFRihlZmRsaXN0KTsKICAgICB9CiAKICAgZmluYWxseToKQEAgLTcwNSw2ICs3MDIsMTMgQEAKIAogc3RhdGljIFB5VHlwZU9iamVjdCBkZXZwb2xsX1R5cGU7CiAKK3N0YXRpYyBQeU9iamVjdCAqCitkZXZwb2xsX2Vycl9jbG9zZWQodm9pZCkKK3sKKyAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGRldnBvbGwgb2JqZWN0Iik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBpbnQgZGV2cG9sbF9mbHVzaChkZXZwb2xsT2JqZWN0ICpzZWxmKQogewogICAgIGludCBzaXplLCBuOwpAQCAtNzQ2LDYgKzc1MCw5IEBACiAgICAgaW50IGZkOwogICAgIHVuc2lnbmVkIHNob3J0IGV2ZW50cyA9IFBPTExJTiB8IFBPTExQUkkgfCBQT0xMT1VUOwogCisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk98TyY6cmVnaXN0ZXIiLCAmbywgdXNob3J0X2NvbnZlcnRlciwgJmV2ZW50cykpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC04MDksNiArODE2LDkgQEAKIHsKICAgICBpbnQgZmQ7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGZkID0gUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvciggbyApOwogICAgIGlmIChmZCA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04MzgsNiArODQ4LDkgQEAKICAgICBsb25nIHRpbWVvdXQ7CiAgICAgUHlPYmplY3QgKnZhbHVlLCAqbnVtMSwgKm51bTI7CiAKKyAgICBpZiAoc2VsZi0+ZmRfZGV2cG9sbCA8IDApCisgICAgICAgIHJldHVybiBkZXZwb2xsX2Vycl9jbG9zZWQoKTsKKwogICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgInBvbGwiLCAwLCAxLCAmdG91dCkpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtOTE2LDYgKzkyOSw2MCBAQAogICAgIHJldHVybiBOVUxMOwogfQogCitzdGF0aWMgaW50CitkZXZwb2xsX2ludGVybmFsX2Nsb3NlKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaW50IHNhdmVfZXJybm8gPSAwOworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsID49IDApIHsKKyAgICAgICAgaW50IGZkID0gc2VsZi0+ZmRfZGV2cG9sbDsKKyAgICAgICAgc2VsZi0+ZmRfZGV2cG9sbCA9IC0xOworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgIGlmIChjbG9zZShmZCkgPCAwKQorICAgICAgICAgICAgc2F2ZV9lcnJubyA9IGVycm5vOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgIH0KKyAgICByZXR1cm4gc2F2ZV9lcnJubzsKK30KKworc3RhdGljIFB5T2JqZWN0KgorZGV2cG9sbF9jbG9zZShkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGVycm5vID0gZGV2cG9sbF9pbnRlcm5hbF9jbG9zZShzZWxmKTsKKyAgICBpZiAoZXJybm8gPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIFB5X1JFVFVSTl9OT05FOworfQorCitQeURvY19TVFJWQVIoZGV2cG9sbF9jbG9zZV9kb2MsCisiY2xvc2UoKSAtPiBOb25lXG5cCitcblwKK0Nsb3NlIHRoZSBkZXZwb2xsIGZpbGUgZGVzY3JpcHRvci4gRnVydGhlciBvcGVyYXRpb25zIG9uIHRoZSBkZXZwb2xsXG5cCitvYmplY3Qgd2lsbCByYWlzZSBhbiBleGNlcHRpb24uIik7CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfZ2V0X2Nsb3NlZChkZXZwb2xsT2JqZWN0ICpzZWxmKQoreworICAgIGlmIChzZWxmLT5mZF9kZXZwb2xsIDwgMCkKKyAgICAgICAgUHlfUkVUVVJOX1RSVUU7CisgICAgZWxzZQorICAgICAgICBQeV9SRVRVUk5fRkFMU0U7Cit9CisKK3N0YXRpYyBQeU9iamVjdCoKK2RldnBvbGxfZmlsZW5vKGRldnBvbGxPYmplY3QgKnNlbGYpCit7CisgICAgaWYgKHNlbGYtPmZkX2RldnBvbGwgPCAwKQorICAgICAgICByZXR1cm4gZGV2cG9sbF9lcnJfY2xvc2VkKCk7CisgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZyhzZWxmLT5mZF9kZXZwb2xsKTsKK30KKworUHlEb2NfU1RSVkFSKGRldnBvbGxfZmlsZW5vX2RvYywKKyJmaWxlbm8oKSAtPiBpbnRcblwKK1xuXAorUmV0dXJuIHRoZSBmaWxlIGRlc2NyaXB0b3IuIik7CisKIHN0YXRpYyBQeU1ldGhvZERlZiBkZXZwb2xsX21ldGhvZHNbXSA9IHsKICAgICB7InJlZ2lzdGVyIiwgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX3JlZ2lzdGVyLAogICAgICBNRVRIX1ZBUkFSR1MsICBkZXZwb2xsX3JlZ2lzdGVyX2RvY30sCkBAIC05MjUsOSArOTkyLDE5IEBACiAgICAgIE1FVEhfTywgICAgICAgIGRldnBvbGxfdW5yZWdpc3Rlcl9kb2N9LAogICAgIHsicG9sbCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRldnBvbGxfcG9sbCwKICAgICAgTUVUSF9WQVJBUkdTLCAgZGV2cG9sbF9wb2xsX2RvY30sCisgICAgeyJjbG9zZSIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGV2cG9sbF9jbG9zZSwgICAgTUVUSF9OT0FSR1MsCisgICAgIGRldnBvbGxfY2xvc2VfZG9jfSwKKyAgICB7ImZpbGVubyIsICAgICAgICAgIChQeUNGdW5jdGlvbilkZXZwb2xsX2ZpbGVubywgICAgTUVUSF9OT0FSR1MsCisgICAgIGRldnBvbGxfZmlsZW5vX2RvY30sCiAgICAge05VTEwsICAgICAgICAgICAgICBOVUxMfSAgICAgICAgICAgLyogc2VudGluZWwgKi8KIH07CiAKK3N0YXRpYyBQeUdldFNldERlZiBkZXZwb2xsX2dldHNldGxpc3RbXSA9IHsKKyAgICB7ImNsb3NlZCIsIChnZXR0ZXIpZGV2cG9sbF9nZXRfY2xvc2VkLCBOVUxMLAorICAgICAiVHJ1ZSBpZiB0aGUgZGV2cG9sbCBvYmplY3QgaXMgY2xvc2VkIn0sCisgICAgezB9LAorfTsKKwogc3RhdGljIGRldnBvbGxPYmplY3QgKgogbmV3RGV2UG9sbE9iamVjdCh2b2lkKQogewpAQCAtOTQ1LDcgKzEwMjIsNyBAQAogICAgICovCiAgICAgbGltaXRfcmVzdWx0ID0gZ2V0cmxpbWl0KFJMSU1JVF9OT0ZJTEUsICZsaW1pdCk7CiAgICAgaWYgKGxpbWl0X3Jlc3VsdCAhPSAtMSkKLSAgICAgICAgZmRfZGV2cG9sbCA9IG9wZW4oIi9kZXYvcG9sbCIsIE9fUkRXUik7CisgICAgICAgIGZkX2RldnBvbGwgPSBfUHlfb3BlbigiL2Rldi9wb2xsIiwgT19SRFdSKTsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKGxpbWl0X3Jlc3VsdCA9PSAtMSkgewpAQCAtOTgxLDEyICsxMDU4LDggQEAKIHN0YXRpYyB2b2lkCiBkZXZwb2xsX2RlYWxsb2MoZGV2cG9sbE9iamVjdCAqc2VsZikKIHsKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgY2xvc2Uoc2VsZi0+ZmRfZGV2cG9sbCk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLQorICAgICh2b2lkKWRldnBvbGxfaW50ZXJuYWxfY2xvc2Uoc2VsZik7CiAgICAgUHlNZW1fREVMKHNlbGYtPmZkcyk7Ci0KICAgICBQeU9iamVjdF9EZWwoc2VsZik7CiB9CiAKQEAgLTEwMjIsNiArMTA5NSw4IEBACiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlciovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qdHBfaXRlcm5leHQqLwogICAgIGRldnBvbGxfbWV0aG9kcywgICAgICAgICAgICAvKnRwX21ldGhvZHMqLworICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCisgICAgZGV2cG9sbF9nZXRzZXRsaXN0LCAgICAgICAgIC8qIHRwX2dldHNldCAqLwogfTsKICNlbmRpZiAgLyogSEFWRV9TWVNfREVWUE9MTF9IICovCiAKQEAgLTExMDUsNyArMTE4MCw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogcHllcG9sbF9lcnJfY2xvc2VkKHZvaWQpCiB7Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJJL08gb3BlcmF0aW9uIG9uIGNsb3NlZCBlcG9sbCBmZCIpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQgZXBvbGwgb2JqZWN0Iik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTExMzcsNiArMTIxMiw3IEBACiAgICAgaWYgKGZkID09IC0xKSB7CiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICNpZmRlZiBIQVZFX0VQT0xMX0NSRUFURTEKKyAgICAgICAgZmxhZ3MgfD0gRVBPTExfQ0xPRVhFQzsKICAgICAgICAgaWYgKGZsYWdzKQogICAgICAgICAgICAgc2VsZi0+ZXBmZCA9IGVwb2xsX2NyZWF0ZTEoZmxhZ3MpOwogICAgICAgICBlbHNlCkBAIC0xMTUyLDYgKzEyMjgsMTQgQEAKICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKKyNpZm5kZWYgSEFWRV9FUE9MTF9DUkVBVEUxCisgICAgaWYgKGZkID09IC0xICYmIF9QeV9zZXRfaW5oZXJpdGFibGUoc2VsZi0+ZXBmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2VuZGlmCisKICAgICByZXR1cm4gKFB5T2JqZWN0ICopc2VsZjsKIH0KIApAQCAtMTI1MSwxNiArMTMzNSwxNiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBzd2l0Y2gob3ApIHsKLSAgICAgICAgY2FzZSBFUE9MTF9DVExfQUREOgotICAgICAgICBjYXNlIEVQT0xMX0NUTF9NT0Q6CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgRVBPTExfQ1RMX0FERDoKKyAgICBjYXNlIEVQT0xMX0NUTF9NT0Q6CiAgICAgICAgIGV2LmV2ZW50cyA9IGV2ZW50czsKICAgICAgICAgZXYuZGF0YS5mZCA9IGZkOwogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIHJlc3VsdCA9IGVwb2xsX2N0bChlcGZkLCBvcCwgZmQsICZldik7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVQT0xMX0NUTF9ERUw6CisgICAgY2FzZSBFUE9MTF9DVExfREVMOgogICAgICAgICAvKiBJbiBrZXJuZWwgdmVyc2lvbnMgYmVmb3JlIDIuNi45LCB0aGUgRVBPTExfQ1RMX0RFTAogICAgICAgICAgKiBvcGVyYXRpb24gcmVxdWlyZWQgYSBub24tTlVMTCBwb2ludGVyIGluIGV2ZW50LCBldmVuCiAgICAgICAgICAqIHRob3VnaCB0aGlzIGFyZ3VtZW50IGlzIGlnbm9yZWQuICovCkBAIC0xMjczLDcgKzEzNTcsNyBAQAogICAgICAgICB9CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAgICAgICAgIHJlc3VsdCA9IC0xOwogICAgICAgICBlcnJubyA9IEVJTlZBTDsKICAgICB9CkBAIC0xMzc4LDcgKzE0NjIsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIHRpbWVvdXQgPSAoaW50KShkdGltZW91dCAqIDEwMDAuMCk7CisgICAgICAgIC8qIGVwb2xsX3dhaXQoKSBoYXMgYSByZXNvbHV0aW9uIG9mIDEgbWlsbGlzZWNvbmQsIHJvdW5kIGF3YXkgZnJvbSB6ZXJvCisgICAgICAgICAgIHRvIHdhaXQgKmF0IGxlYXN0KiBkdGltZW91dCBzZWNvbmRzLiAqLworICAgICAgICB0aW1lb3V0ID0gKGludCljZWlsKGR0aW1lb3V0ICogMTAwMC4wKTsKICAgICB9CiAKICAgICBpZiAobWF4ZXZlbnRzID09IC0xKSB7CkBAIC0xMzkzLDcgKzE0NzksNiBAQAogCiAgICAgZXZzID0gUHlNZW1fTmV3KHN0cnVjdCBlcG9sbF9ldmVudCwgbWF4ZXZlbnRzKTsKICAgICBpZiAoZXZzID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHNlbGYpOwogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xNDMyLDYgKzE1MTcsMjQgQEAKIGluIHNlY29uZHMgKGFzIGZsb2F0KS4gLTEgbWFrZXMgcG9sbCB3YWl0IGluZGVmaW5pdGVseS5cblwKIFVwIHRvIG1heGV2ZW50cyBhcmUgcmV0dXJuZWQgdG8gdGhlIGNhbGxlci4iKTsKIAorc3RhdGljIFB5T2JqZWN0ICoKK3B5ZXBvbGxfZW50ZXIocHlFcG9sbF9PYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIGlmIChzZWxmLT5lcGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIHB5ZXBvbGxfZXJyX2Nsb3NlZCgpOworCisgICAgUHlfSU5DUkVGKHNlbGYpOworICAgIHJldHVybiAoUHlPYmplY3QgKilzZWxmOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorcHllcG9sbF9leGl0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7CisKKyAgICByZXR1cm4gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChzZWxmLCAmUHlJZF9jbG9zZSwgTlVMTCk7Cit9CisKIHN0YXRpYyBQeU1ldGhvZERlZiBweWVwb2xsX21ldGhvZHNbXSA9IHsKICAgICB7ImZyb21mZCIsICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2Zyb21mZCwKICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9DTEFTUywgcHllcG9sbF9mcm9tZmRfZG9jfSwKQEAgLTE0NDcsNiArMTU1MCwxMCBAQAogICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAgICAgIHB5ZXBvbGxfdW5yZWdpc3Rlcl9kb2N9LAogICAgIHsicG9sbCIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXB5ZXBvbGxfcG9sbCwKICAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgICAgICBweWVwb2xsX3BvbGxfZG9jfSwKKyAgICB7Il9fZW50ZXJfXyIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pcHllcG9sbF9lbnRlciwgICAgIE1FVEhfTk9BUkdTLAorICAgICBOVUxMfSwKKyAgICB7Il9fZXhpdF9fIiwgICAgICAgICAgIChQeUNGdW5jdGlvbilweWVwb2xsX2V4aXQsICAgICBNRVRIX1ZBUkFSR1MsCisgICAgIE5VTEx9LAogICAgIHtOVUxMLCAgICAgIE5VTEx9LAogfTsKIApAQCAtMTYwNCwxNyArMTcxMSwxNyBAQAogICoga2V2ZW50IGlzIG5vdCBzdGFuZGFyZCBhbmQgaXRzIG1lbWJlcnMgdmFyeSBhY3Jvc3MgQlNEcy4KICAqLwogI2lmICFkZWZpbmVkKF9fT3BlbkJTRF9fKQotIyAgIGRlZmluZSBJREVOVF9UWVBFCVRfVUlOVFBUUlQKLSMgICBkZWZpbmUgSURFTlRfQ0FTVAlQeV9pbnRwdHJfdAotIyAgIGRlZmluZSBEQVRBX1RZUEUJVF9JTlRQVFJUCisjICAgZGVmaW5lIElERU5UX1RZUEUgIFRfVUlOVFBUUlQKKyMgICBkZWZpbmUgSURFTlRfQ0FTVCAgUHlfaW50cHRyX3QKKyMgICBkZWZpbmUgREFUQV9UWVBFICAgVF9JTlRQVFJUCiAjICAgZGVmaW5lIERBVEFfRk1UX1VOSVQgSU5UUFRSVF9GTVRfVU5JVAotIyAgIGRlZmluZSBJREVOVF9Bc1R5cGUJUHlMb25nX0FzVWludHB0cl90CisjICAgZGVmaW5lIElERU5UX0FzVHlwZSBQeUxvbmdfQXNVaW50cHRyX3QKICNlbHNlCi0jICAgZGVmaW5lIElERU5UX1RZUEUJVF9VSU5UCi0jICAgZGVmaW5lIElERU5UX0NBU1QJaW50Ci0jICAgZGVmaW5lIERBVEFfVFlQRQlUX0lOVAorIyAgIGRlZmluZSBJREVOVF9UWVBFICBUX1VJTlQKKyMgICBkZWZpbmUgSURFTlRfQ0FTVCAgaW50CisjICAgZGVmaW5lIERBVEFfVFlQRSAgIFRfSU5UCiAjICAgZGVmaW5lIERBVEFfRk1UX1VOSVQgImkiCi0jICAgZGVmaW5lIElERU5UX0FzVHlwZQlQeUxvbmdfQXNVbnNpZ25lZExvbmcKKyMgICBkZWZpbmUgSURFTlRfQXNUeXBlIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZwogI2VuZGlmCiAKIC8qIFVuZm9ydHVuYXRlbHksIHdlIGNhbid0IHN0b3JlIHB5dGhvbiBvYmplY3RzIGluIHVkYXRhLCBiZWNhdXNlCkBAIC0xNjY2LDcgKzE3NzMsNyBAQAogCiAgICAgaWYgKFB5TG9uZ19DaGVjayhwZmQpCiAjaWYgSURFTlRfVFlQRSA9PSBUX1VJTlQKLQkmJiBQeUxvbmdfQXNVbnNpZ25lZExvbmcocGZkKSA8PSBVSU5UX01BWAorICAgICAgICAmJiBQeUxvbmdfQXNVbnNpZ25lZExvbmcocGZkKSA8PSBVSU5UX01BWAogI2VuZGlmCiAgICAgKSB7CiAgICAgICAgIHNlbGYtPmUuaWRlbnQgPSBJREVOVF9Bc1R5cGUocGZkKTsKQEAgLTE3MDgsMjIgKzE4MTUsMjIgQEAKICAgICB9CiAKICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgUHlfRVE6CisgICAgY2FzZSBQeV9FUToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA9PSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTkU6CisgICAgY2FzZSBQeV9ORToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCAhPSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTEU6CisgICAgY2FzZSBQeV9MRToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8PSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfR0U6CisgICAgY2FzZSBQeV9HRToKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA+PSAwKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgUHlfTFQ6CisgICAgY2FzZSBQeV9MVDoKICAgICAgICAgcmVzdWx0ID0gKHJlc3VsdCA8IDApOwogICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBQeV9HVDoKKyAgICBjYXNlIFB5X0dUOgogICAgICAgICByZXN1bHQgPSAocmVzdWx0ID4gMCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE3NzUsNyArMTg4Miw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgoga3F1ZXVlX3F1ZXVlX2Vycl9jbG9zZWQodm9pZCkKIHsKLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkkvTyBvcGVyYXRpb24gb24gY2xvc2VkIGtxdWV1ZSBmZCIpOworICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiSS9PIG9wZXJhdGlvbiBvbiBjbG9zZWQga3F1ZXVlIG9iamVjdCIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0xODE3LDEzICsxOTI0LDE5IEBACiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgaWYgKGZkID09IC0xKSB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKHNlbGYtPmtxZmQsIDAsIE5VTEwpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlbGYpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBrcXVldWVfcXVldWVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewotCiAgICAgaWYgKChhcmdzICE9IE5VTEwgJiYgUHlPYmplY3RfU2l6ZShhcmdzKSkgfHwKICAgICAgICAgICAgICAgICAgICAgKGt3ZHMgIT0gTlVMTCAmJiBQeU9iamVjdF9TaXplKGt3ZHMpKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTE5MjksOCArMjA0Miw4IEBACiAgICAgICAgIHB0aW1lb3V0c3BlYyA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgaWYgKFB5TnVtYmVyX0NoZWNrKG90aW1lb3V0KSkgewotICAgICAgICBpZiAoX1B5VGltZV9PYmplY3RUb1RpbWVzcGVjKG90aW1lb3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aW1lb3V0LnR2X3NlYywgJnRpbWVvdXQudHZfbnNlYykgPT0gLTEpCisgICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWMob3RpbWVvdXQsICZ0aW1lb3V0LnR2X3NlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGltZW91dC50dl9uc2VjLCBfUHlUaW1lX1JPVU5EX1VQKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIGlmICh0aW1lb3V0LnR2X3NlYyA8IDApIHsKQEAgLTIxNDMsNyArMjI1Niw3IEBACiB0aGF0IGFyZSByZWFkeS5cblwKIFxuXAogKioqIElNUE9SVEFOVCBOT1RJQ0UgKioqXG5cCi1PbiBXaW5kb3dzIGFuZCBPcGVuVk1TLCBvbmx5IHNvY2tldHMgYXJlIHN1cHBvcnRlZDsgb24gVW5peCwgYWxsIGZpbGVcblwKK09uIFdpbmRvd3MsIG9ubHkgc29ja2V0cyBhcmUgc3VwcG9ydGVkOyBvbiBVbml4LCBhbGwgZmlsZVxuXAogZGVzY3JpcHRvcnMgY2FuIGJlIHVzZWQuIik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBzZWxlY3RfbWV0aG9kc1tdID0gewpAQCAtMjE2MSw3ICsyMjc0LDcgQEAKICJUaGlzIG1vZHVsZSBzdXBwb3J0cyBhc3luY2hyb25vdXMgSS9PIG9uIG11bHRpcGxlIGZpbGUgZGVzY3JpcHRvcnMuXG5cCiBcblwKICoqKiBJTVBPUlRBTlQgTk9USUNFICoqKlxuXAotT24gV2luZG93cyBhbmQgT3BlblZNUywgb25seSBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQ7IG9uIFVuaXgsIGFsbCBmaWxlIGRlc2NyaXB0b3JzLiIpOworT24gV2luZG93cywgb25seSBzb2NrZXRzIGFyZSBzdXBwb3J0ZWQ7IG9uIFVuaXgsIGFsbCBmaWxlIGRlc2NyaXB0b3JzLiIpOwogCiAKIHN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgc2VsZWN0bW9kdWxlID0gewpAQCAtMjE5NSw3ICsyMzA4LDcgQEAKICN1bmRlZiBQSVBFX0JVRgogI2RlZmluZSBQSVBFX0JVRiA1MTIKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSVBFX0JVRiIsIFBJUEVfQlVGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSVBFX0JVRik7CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9QT0xMKSAmJiAhZGVmaW5lZChIQVZFX0JST0tFTl9QT0xMKQpAQCAtMjIxMCwyNyArMjMyMywyNyBAQAogI2VuZGlmCiAgICAgICAgIGlmIChQeVR5cGVfUmVhZHkoJnBvbGxfVHlwZSkgPCAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMSU4iLCBQT0xMSU4pOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFBSSSIsIFBPTExQUkkpOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTE9VVCIsIFBPTExPVVQpOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTEVSUiIsIFBPTExFUlIpOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTEhVUCIsIFBPTExIVVApOwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTE5WQUwiLCBQT0xMTlZBTCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExJTik7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExQUkkpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMT1VUKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTEVSUik7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExIVVApOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMTlZBTCk7CiAKICNpZmRlZiBQT0xMUkROT1JNCi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMUkROT1JNIiwgUE9MTFJETk9STSk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExSRE5PUk0pOwogI2VuZGlmCiAjaWZkZWYgUE9MTFJEQkFORAotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTFJEQkFORCIsIFBPTExSREJBTkQpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMUkRCQU5EKTsKICNlbmRpZgogI2lmZGVmIFBPTExXUk5PUk0KLSAgICAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBPTExXUk5PUk0iLCBQT0xMV1JOT1JNKTsKKyAgICAgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUE9MTFdSTk9STSk7CiAjZW5kaWYKICNpZmRlZiBQT0xMV1JCQU5ECi0gICAgICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQT0xMV1JCQU5EIiwgUE9MTFdSQkFORCk7CisgICAgICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBPTExXUkJBTkQpOwogI2VuZGlmCiAjaWZkZWYgUE9MTE1TRwotICAgICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUE9MTE1TRyIsIFBPTExNU0cpOworICAgICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQT0xMTVNHKTsKICNlbmRpZgogICAgIH0KICNlbmRpZiAvKiBIQVZFX1BPTEwgKi8KQEAgLTIyNDgsMjUgKzIzNjEsMzYgQEAKICAgICBQeV9JTkNSRUYoJnB5RXBvbGxfVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJlcG9sbCIsIChQeU9iamVjdCAqKSAmcHlFcG9sbF9UeXBlKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTElOIiwgRVBPTExJTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMT1VUIiwgRVBPTExPVVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFBSSSIsIEVQT0xMUFJJKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExFUlIiLCBFUE9MTEVSUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMSFVQIiwgRVBPTExIVVApOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTEVUIiwgRVBPTExFVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExJTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExPVVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMUFJJKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTEVSUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExIVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMRVQpOwogI2lmZGVmIEVQT0xMT05FU0hPVAogICAgIC8qIEtlcm5lbCAyLjYuMisgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExPTkVTSE9UIiwgRVBPTExPTkVTSE9UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTE9ORVNIT1QpOwogI2VuZGlmCiAgICAgLyogUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMX1JESFVQIiwgRVBPTExSREhVUCk7ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMUkROT1JNIiwgRVBPTExSRE5PUk0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTFJEQkFORCIsIEVQT0xMUkRCQU5EKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExXUk5PUk0iLCBFUE9MTFdSTk9STSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVQT0xMV1JCQU5EIiwgRVBPTExXUkJBTkQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFUE9MTE1TRyIsIEVQT0xMTVNHKTsKKworI2lmZGVmIEVQT0xMUkROT1JNCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExSRE5PUk0pOworI2VuZGlmCisjaWZkZWYgRVBPTExSREJBTkQKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTFJEQkFORCk7CisjZW5kaWYKKyNpZmRlZiBFUE9MTFdSTk9STQorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMV1JOT1JNKTsKKyNlbmRpZgorI2lmZGVmIEVQT0xMV1JCQU5ECisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRVBPTExXUkJBTkQpOworI2VuZGlmCisjaWZkZWYgRVBPTExNU0cKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFUE9MTE1TRyk7CisjZW5kaWYKIAogI2lmZGVmIEVQT0xMX0NMT0VYRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRVBPTExfQ0xPRVhFQyIsIEVQT0xMX0NMT0VYRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVQT0xMX0NMT0VYRUMpOwogI2VuZGlmCiAjZW5kaWYgLyogSEFWRV9FUE9MTCAqLwogCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTFtb2R1bGUuYyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCmluZGV4IGQwZjMxOGQuLmI0NGZlMTggMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2hhMW1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMW1vZHVsZS5jCkBAIC05MiwxMCArOTIsNiBAQAogICAgICAoeSlbNF0gPSAodW5zaWduZWQgY2hhcikoKCh4KT4+MjQpJjI1NSk7ICh5KVs1XSA9ICh1bnNpZ25lZCBjaGFyKSgoKHgpPj4xNikmMjU1KTsgICAgIFwKICAgICAgKHkpWzZdID0gKHVuc2lnbmVkIGNoYXIpKCgoeCk+PjgpJjI1NSk7ICh5KVs3XSA9ICh1bnNpZ25lZCBjaGFyKSgoeCkmMjU1KTsgfQogCi0jaWZuZGVmIE1JTgotICAgI2RlZmluZSBNSU4oeCwgeSkgKCAoKHgpPCh5KSk/KHgpOih5KSApCi0jZW5kaWYKLQogCiAvKiBTSEExIG1hY3JvcyAqLwogCkBAIC0yMjAsOSArMjE2LDkgQEAKICAgICAgICAgICAgaW4gICAgICAgICAgICAgKz0gU0hBMV9CTE9DS1NJWkU7CiAgICAgICAgICAgIGlubGVuICAgICAgICAgIC09IFNIQTFfQkxPQ0tTSVpFOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICBuID0gTUlOKGlubGVuLCAoUHlfc3NpemVfdCkoU0hBMV9CTE9DS1NJWkUgLSBzaGExLT5jdXJsZW4pKTsKKyAgICAgICAgICAgbiA9IFB5X01JTihpbmxlbiwgKFB5X3NzaXplX3QpKFNIQTFfQkxPQ0tTSVpFIC0gc2hhMS0+Y3VybGVuKSk7CiAgICAgICAgICAgIG1lbWNweShzaGExLT5idWYgKyBzaGExLT5jdXJsZW4sIGluLCAoc2l6ZV90KW4pOwotICAgICAgICAgICBzaGExLT5jdXJsZW4gICArPSBuOworICAgICAgICAgICBzaGExLT5jdXJsZW4gICArPSAoU0hBMV9JTlQzMiluOwogICAgICAgICAgICBpbiAgICAgICAgICAgICArPSBuOwogICAgICAgICAgICBpbmxlbiAgICAgICAgICAtPSBuOwogICAgICAgICAgICBpZiAoc2hhMS0+Y3VybGVuID09IFNIQTFfQkxPQ0tTSVpFKSB7CkBAIC00MTUsNyArNDExLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBTSEExX2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewotICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlNIQTEiLCA0KTsKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJzaGExIiwgNCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC01NDgsOCArNTQ0LDE3IEBACiBQeU1PRElOSVRfRlVOQwogUHlJbml0X19zaGExKHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZTSEExdHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMXR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTFtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTFtb2R1bGUpOworICAgIGlmIChtID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgUHlfSU5DUkVGKChQeU9iamVjdCAqKSZTSEExdHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEExVHlwZSIsIChQeU9iamVjdCAqKSZTSEExdHlwZSk7CisgICAgcmV0dXJuIG07CiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jIGIvTW9kdWxlcy9zaGEyNTZtb2R1bGUuYwppbmRleCA5ZjZiNDE2Li5iMDViZmMxIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3NoYTI1Nm1vZHVsZS5jCisrKyBiL01vZHVsZXMvc2hhMjU2bW9kdWxlLmMKQEAgLTIxLDEzICsyMSw2IEBACiAjaW5jbHVkZSAiaGFzaGxpYi5oIgogCiAKLS8qIEVuZGlhbm5lc3MgdGVzdGluZyBhbmQgZGVmaW5pdGlvbnMgKi8KLSNkZWZpbmUgVGVzdEVuZGlhbm5lc3ModmFyaWFibGUpIHtpbnQgaT0xOyB2YXJpYWJsZT1QQ1RfQklHX0VORElBTjtcCi0gICAgICAgIGlmICgqKChjaGFyKikmaSk9PTEpIHZhcmlhYmxlPVBDVF9MSVRUTEVfRU5ESUFOO30KLQotI2RlZmluZSBQQ1RfTElUVExFX0VORElBTiAxCi0jZGVmaW5lIFBDVF9CSUdfRU5ESUFOIDAKLQogLyogU29tZSB1c2VmdWwgdHlwZXMgKi8KIAogdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFNIQV9CWVRFOwpAQCAtNTAsNyArNDMsNiBAQAogICAgIFNIQV9JTlQzMiBkaWdlc3RbOF07ICAgICAgICAgICAgICAgIC8qIE1lc3NhZ2UgZGlnZXN0ICovCiAgICAgU0hBX0lOVDMyIGNvdW50X2xvLCBjb3VudF9oaTsgICAgICAgLyogNjQtYml0IGJpdCBjb3VudCAqLwogICAgIFNIQV9CWVRFIGRhdGFbU0hBX0JMT0NLU0laRV07ICAgICAgIC8qIFNIQSBkYXRhIGJ1ZmZlciAqLwotICAgIGludCBFbmRpYW5uZXNzOwogICAgIGludCBsb2NhbDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVucHJvY2Vzc2VkIGFtb3VudCBpbiBkYXRhICovCiAgICAgaW50IGRpZ2VzdHNpemU7CiB9IFNIQW9iamVjdDsKQEAgLTU4LDEzICs1MCwxMSBAQAogLyogV2hlbiBydW4gb24gYSBsaXR0bGUtZW5kaWFuIENQVSB3ZSBuZWVkIHRvIHBlcmZvcm0gYnl0ZSByZXZlcnNhbCBvbiBhbgogICAgYXJyYXkgb2YgbG9uZ3dvcmRzLiAqLwogCi1zdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UMzIgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCwgaW50IEVuZGlhbm5lc3MpCisjaWYgUFlfTElUVExFX0VORElBTgorc3RhdGljIHZvaWQgbG9uZ1JldmVyc2UoU0hBX0lOVDMyICpidWZmZXIsIGludCBieXRlQ291bnQpCiB7CiAgICAgU0hBX0lOVDMyIHZhbHVlOwogCi0gICAgaWYgKCBFbmRpYW5uZXNzID09IFBDVF9CSUdfRU5ESUFOICkKLSAgICAgICAgcmV0dXJuOwotCiAgICAgYnl0ZUNvdW50IC89IHNpemVvZigqYnVmZmVyKTsKICAgICB3aGlsZSAoYnl0ZUNvdW50LS0pIHsKICAgICAgICAgdmFsdWUgPSAqYnVmZmVyOwpAQCAtNzMsMTAgKzYzLDEwIEBACiAgICAgICAgICpidWZmZXIrKyA9ICggdmFsdWUgPDwgMTYgKSB8ICggdmFsdWUgPj4gMTYgKTsKICAgICB9CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgU0hBY29weShTSEFvYmplY3QgKnNyYywgU0hBb2JqZWN0ICpkZXN0KQogewotICAgIGRlc3QtPkVuZGlhbm5lc3MgPSBzcmMtPkVuZGlhbm5lc3M7CiAgICAgZGVzdC0+bG9jYWwgPSBzcmMtPmxvY2FsOwogICAgIGRlc3QtPmRpZ2VzdHNpemUgPSBzcmMtPmRpZ2VzdHNpemU7CiAgICAgZGVzdC0+Y291bnRfbG8gPSBzcmMtPmNvdW50X2xvOwpAQCAtMTMxLDcgKzEyMSw5IEBACiAgICAgICAgIFNIQV9JTlQzMiBTWzhdLCBXWzY0XSwgdDAsIHQxOwogCiAgICAgbWVtY3B5KFcsIHNoYV9pbmZvLT5kYXRhLCBzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKLSAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSksIHNoYV9pbmZvLT5FbmRpYW5uZXNzKTsKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisgICAgbG9uZ1JldmVyc2UoVywgKGludClzaXplb2Yoc2hhX2luZm8tPmRhdGEpKTsKKyNlbmRpZgogCiAgICAgZm9yIChpID0gMTY7IGkgPCA2NDsgKytpKSB7CiAgICAgICAgICAgICAgICAgV1tpXSA9IEdhbW1hMShXW2kgLSAyXSkgKyBXW2kgLSA3XSArIEdhbW1hMChXW2kgLSAxNV0pICsgV1tpIC0gMTZdOwpAQCAtMjI4LDcgKzIyMCw2IEBACiBzdGF0aWMgdm9pZAogc2hhX2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gMHg2QTA5RTY2N0w7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IDB4QkI2N0FFODVMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSAweDNDNkVGMzcyTDsKQEAgLTI0Niw3ICsyMzcsNiBAQAogc3RhdGljIHZvaWQKIHNoYTIyNF9pbml0KFNIQW9iamVjdCAqc2hhX2luZm8pCiB7Ci0gICAgVGVzdEVuZGlhbm5lc3Moc2hhX2luZm8tPkVuZGlhbm5lc3MpCiAgICAgc2hhX2luZm8tPmRpZ2VzdFswXSA9IDB4YzEwNTllZDhMOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMV0gPSAweDM2N2NkNTA3TDsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzJdID0gMHgzMDcwZGQxN0w7CkBAIC0yODQsNyArMjc0LDcgQEAKICAgICAgICAgbWVtY3B5KCgoU0hBX0JZVEUgKikgc2hhX2luZm8tPmRhdGEpICsgc2hhX2luZm8tPmxvY2FsLCBidWZmZXIsIGkpOwogICAgICAgICBjb3VudCAtPSBpOwogICAgICAgICBidWZmZXIgKz0gaTsKLSAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IGk7CisgICAgICAgIHNoYV9pbmZvLT5sb2NhbCArPSAoaW50KWk7CiAgICAgICAgIGlmIChzaGFfaW5mby0+bG9jYWwgPT0gU0hBX0JMT0NLU0laRSkgewogICAgICAgICAgICAgc2hhX3RyYW5zZm9ybShzaGFfaW5mbyk7CiAgICAgICAgIH0KQEAgLTI5OSw3ICsyODksNyBAQAogICAgICAgICBzaGFfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICB9CiAgICAgbWVtY3B5KHNoYV9pbmZvLT5kYXRhLCBidWZmZXIsIGNvdW50KTsKLSAgICBzaGFfaW5mby0+bG9jYWwgPSBjb3VudDsKKyAgICBzaGFfaW5mby0+bG9jYWwgPSAoaW50KWNvdW50OwogfQogCiAvKiBmaW5pc2ggY29tcHV0aW5nIHRoZSBTSEEgZGlnZXN0ICovCkBAIC01MTEsOSArNTAxLDkgQEAKIFNIQTI1Nl9nZXRfbmFtZShQeU9iamVjdCAqc2VsZiwgdm9pZCAqY2xvc3VyZSkKIHsKICAgICBpZiAoKChTSEFvYmplY3QgKilzZWxmKS0+ZGlnZXN0c2l6ZSA9PSAzMikKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMjU2IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTI1NiIsIDYpOwogICAgIGVsc2UKLSAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgiU0hBMjI0IiwgNik7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoInNoYTIyNCIsIDYpOwogfQogCiBzdGF0aWMgUHlHZXRTZXREZWYgU0hBX2dldHNldGVyc1tdID0gewpAQCAtNzE2LDExICs3MDYsMjMgQEAKIFB5TU9ESU5JVF9GVU5DCiBQeUluaXRfX3NoYTI1Nih2b2lkKQogeworICAgIFB5T2JqZWN0ICptOworCiAgICAgUHlfVFlQRSgmU0hBMjI0dHlwZSkgPSAmUHlUeXBlX1R5cGU7CiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmU0hBMjI0dHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBQeV9UWVBFKCZTSEEyNTZ0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEyNTZ0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIHJldHVybiBQeU1vZHVsZV9DcmVhdGUoJl9zaGEyNTZtb2R1bGUpOworCisgICAgbSA9IFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTI1Nm1vZHVsZSk7CisgICAgaWYgKG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTIyNHR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMjI0VHlwZSIsIChQeU9iamVjdCAqKSZTSEEyMjR0eXBlKTsKKyAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopJlNIQTI1NnR5cGUpOworICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAiU0hBMjU2VHlwZSIsIChQeU9iamVjdCAqKSZTSEEyNTZ0eXBlKTsKKyAgICByZXR1cm4gbTsKKwogfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYyBiL01vZHVsZXMvc2hhNTEybW9kdWxlLmMKaW5kZXggNTUzNmZkNS4uNDdjNTdlNSAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zaGE1MTJtb2R1bGUuYworKysgYi9Nb2R1bGVzL3NoYTUxMm1vZHVsZS5jCkBAIC0yMiwxMyArMjIsNiBAQAogCiAjaWZkZWYgUFlfTE9OR19MT05HIC8qIElmIG5vIFBZX0xPTkdfTE9ORywgZG9uJ3QgY29tcGlsZSBhbnl0aGluZyEgKi8KIAotLyogRW5kaWFubmVzcyB0ZXN0aW5nIGFuZCBkZWZpbml0aW9ucyAqLwotI2RlZmluZSBUZXN0RW5kaWFubmVzcyh2YXJpYWJsZSkge2ludCBpPTE7IHZhcmlhYmxlPVBDVF9CSUdfRU5ESUFOO1wKLSAgICAgICAgaWYgKCooKGNoYXIqKSZpKT09MSkgdmFyaWFibGU9UENUX0xJVFRMRV9FTkRJQU47fQotCi0jZGVmaW5lIFBDVF9MSVRUTEVfRU5ESUFOIDEKLSNkZWZpbmUgUENUX0JJR19FTkRJQU4gMAotCiAvKiBTb21lIHVzZWZ1bCB0eXBlcyAqLwogCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgU0hBX0JZVEU7CkBAIC01Miw3ICs0NSw2IEBACiAgICAgU0hBX0lOVDY0IGRpZ2VzdFs4XTsgICAgICAgICAgICAgICAgLyogTWVzc2FnZSBkaWdlc3QgKi8KICAgICBTSEFfSU5UMzIgY291bnRfbG8sIGNvdW50X2hpOyAgICAgICAvKiA2NC1iaXQgYml0IGNvdW50ICovCiAgICAgU0hBX0JZVEUgZGF0YVtTSEFfQkxPQ0tTSVpFXTsgICAgICAgLyogU0hBIGRhdGEgYnVmZmVyICovCi0gICAgaW50IEVuZGlhbm5lc3M7CiAgICAgaW50IGxvY2FsOyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5wcm9jZXNzZWQgYW1vdW50IGluIGRhdGEgKi8KICAgICBpbnQgZGlnZXN0c2l6ZTsKIH0gU0hBb2JqZWN0OwpAQCAtNjAsMTMgKzUyLDExIEBACiAvKiBXaGVuIHJ1biBvbiBhIGxpdHRsZS1lbmRpYW4gQ1BVIHdlIG5lZWQgdG8gcGVyZm9ybSBieXRlIHJldmVyc2FsIG9uIGFuCiAgICBhcnJheSBvZiBsb25nd29yZHMuICovCiAKLXN0YXRpYyB2b2lkIGxvbmdSZXZlcnNlKFNIQV9JTlQ2NCAqYnVmZmVyLCBpbnQgYnl0ZUNvdW50LCBpbnQgRW5kaWFubmVzcykKKyNpZiBQWV9MSVRUTEVfRU5ESUFOCitzdGF0aWMgdm9pZCBsb25nUmV2ZXJzZShTSEFfSU5UNjQgKmJ1ZmZlciwgaW50IGJ5dGVDb3VudCkKIHsKICAgICBTSEFfSU5UNjQgdmFsdWU7CiAKLSAgICBpZiAoIEVuZGlhbm5lc3MgPT0gUENUX0JJR19FTkRJQU4gKQotICAgICAgICByZXR1cm47Ci0KICAgICBieXRlQ291bnQgLz0gc2l6ZW9mKCpidWZmZXIpOwogICAgIHdoaWxlIChieXRlQ291bnQtLSkgewogICAgICAgICB2YWx1ZSA9ICpidWZmZXI7CkBAIC04MywxMCArNzMsMTAgQEAKICAgICAgICAgICAgICAgICBidWZmZXIrKzsKICAgICB9CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgU0hBY29weShTSEFvYmplY3QgKnNyYywgU0hBb2JqZWN0ICpkZXN0KQogewotICAgIGRlc3QtPkVuZGlhbm5lc3MgPSBzcmMtPkVuZGlhbm5lc3M7CiAgICAgZGVzdC0+bG9jYWwgPSBzcmMtPmxvY2FsOwogICAgIGRlc3QtPmRpZ2VzdHNpemUgPSBzcmMtPmRpZ2VzdHNpemU7CiAgICAgZGVzdC0+Y291bnRfbG8gPSBzcmMtPmNvdW50X2xvOwpAQCAtMTQxLDcgKzEzMSw5IEBACiAgICAgU0hBX0lOVDY0IFNbOF0sIFdbODBdLCB0MCwgdDE7CiAKICAgICBtZW1jcHkoVywgc2hhX2luZm8tPmRhdGEsIHNpemVvZihzaGFfaW5mby0+ZGF0YSkpOwotICAgIGxvbmdSZXZlcnNlKFcsIChpbnQpc2l6ZW9mKHNoYV9pbmZvLT5kYXRhKSwgc2hhX2luZm8tPkVuZGlhbm5lc3MpOworI2lmIFBZX0xJVFRMRV9FTkRJQU4KKyAgICBsb25nUmV2ZXJzZShXLCAoaW50KXNpemVvZihzaGFfaW5mby0+ZGF0YSkpOworI2VuZGlmCiAKICAgICBmb3IgKGkgPSAxNjsgaSA8IDgwOyArK2kpIHsKICAgICAgICAgICAgICAgICBXW2ldID0gR2FtbWExKFdbaSAtIDJdKSArIFdbaSAtIDddICsgR2FtbWEwKFdbaSAtIDE1XSkgKyBXW2kgLSAxNl07CkBAIC0yNTQsNyArMjQ2LDYgQEAKIHN0YXRpYyB2b2lkCiBzaGE1MTJfaW5pdChTSEFvYmplY3QgKnNoYV9pbmZvKQogewotICAgIFRlc3RFbmRpYW5uZXNzKHNoYV9pbmZvLT5FbmRpYW5uZXNzKQogICAgIHNoYV9pbmZvLT5kaWdlc3RbMF0gPSBQeV9VTEwoMHg2YTA5ZTY2N2YzYmNjOTA4KTsKICAgICBzaGFfaW5mby0+ZGlnZXN0WzFdID0gUHlfVUxMKDB4YmI2N2FlODU4NGNhYTczYik7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsyXSA9IFB5X1VMTCgweDNjNmVmMzcyZmU5NGY4MmIpOwpAQCAtMjcyLDcgKzI2Myw2IEBACiBzdGF0aWMgdm9pZAogc2hhMzg0X2luaXQoU0hBb2JqZWN0ICpzaGFfaW5mbykKIHsKLSAgICBUZXN0RW5kaWFubmVzcyhzaGFfaW5mby0+RW5kaWFubmVzcykKICAgICBzaGFfaW5mby0+ZGlnZXN0WzBdID0gUHlfVUxMKDB4Y2JiYjlkNWRjMTA1OWVkOCk7CiAgICAgc2hhX2luZm8tPmRpZ2VzdFsxXSA9IFB5X1VMTCgweDYyOWEyOTJhMzY3Y2Q1MDcpOwogICAgIHNoYV9pbmZvLT5kaWdlc3RbMl0gPSBQeV9VTEwoMHg5MTU5MDE1YTMwNzBkZDE3KTsKQEAgLTMxMCw3ICszMDAsNyBAQAogICAgICAgICBtZW1jcHkoKChTSEFfQllURSAqKSBzaGFfaW5mby0+ZGF0YSkgKyBzaGFfaW5mby0+bG9jYWwsIGJ1ZmZlciwgaSk7CiAgICAgICAgIGNvdW50IC09IGk7CiAgICAgICAgIGJ1ZmZlciArPSBpOwotICAgICAgICBzaGFfaW5mby0+bG9jYWwgKz0gaTsKKyAgICAgICAgc2hhX2luZm8tPmxvY2FsICs9IChpbnQpaTsKICAgICAgICAgaWYgKHNoYV9pbmZvLT5sb2NhbCA9PSBTSEFfQkxPQ0tTSVpFKSB7CiAgICAgICAgICAgICBzaGE1MTJfdHJhbnNmb3JtKHNoYV9pbmZvKTsKICAgICAgICAgfQpAQCAtMzI1LDcgKzMxNSw3IEBACiAgICAgICAgIHNoYTUxMl90cmFuc2Zvcm0oc2hhX2luZm8pOwogICAgIH0KICAgICBtZW1jcHkoc2hhX2luZm8tPmRhdGEsIGJ1ZmZlciwgY291bnQpOwotICAgIHNoYV9pbmZvLT5sb2NhbCA9IGNvdW50OworICAgIHNoYV9pbmZvLT5sb2NhbCA9IChpbnQpY291bnQ7CiB9CiAKIC8qIGZpbmlzaCBjb21wdXRpbmcgdGhlIFNIQSBkaWdlc3QgKi8KQEAgLTU3Nyw5ICs1NjcsOSBAQAogU0hBNTEyX2dldF9uYW1lKFB5T2JqZWN0ICpzZWxmLCB2b2lkICpjbG9zdXJlKQogewogICAgIGlmICgoKFNIQW9iamVjdCAqKXNlbGYpLT5kaWdlc3RzaXplID09IDY0KQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEE1MTIiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhNTEyIiwgNik7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKCJTSEEzODQiLCA2KTsKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgic2hhMzg0IiwgNik7CiB9CiAKIHN0YXRpYyBQeUdldFNldERlZiBTSEFfZ2V0c2V0ZXJzW10gPSB7CkBAIC03ODIsMTMgKzc3MiwyNCBAQAogUHlNT0RJTklUX0ZVTkMKIFB5SW5pdF9fc2hhNTEyKHZvaWQpCiB7CisgICAgUHlPYmplY3QgKm07CisKICAgICBQeV9UWVBFKCZTSEEzODR0eXBlKSA9ICZQeVR5cGVfVHlwZTsKICAgICBpZiAoUHlUeXBlX1JlYWR5KCZTSEEzODR0eXBlKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X1RZUEUoJlNIQTUxMnR5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIGlmIChQeVR5cGVfUmVhZHkoJlNIQTUxMnR5cGUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmX3NoYTUxMm1vZHVsZSk7CisKKyAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZfc2hhNTEybW9kdWxlKTsKKyAgICBpZiAobSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBMzg0dHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEEzODRUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTM4NHR5cGUpOworICAgIFB5X0lOQ1JFRigoUHlPYmplY3QgKikmU0hBNTEydHlwZSk7CisgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJTSEE1MTJUeXBlIiwgKFB5T2JqZWN0ICopJlNIQTUxMnR5cGUpOworICAgIHJldHVybiBtOwogfQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMgYi9Nb2R1bGVzL3NpZ25hbG1vZHVsZS5jCmluZGV4IDcwNGM5ZjUuLmZlZGFkZGYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc2lnbmFsbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zaWduYWxtb2R1bGUuYwpAQCAtOSw3ICs5LDcgQEAKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwotI2luY2x1ZGUgPFdpbmRvd3MuaD4KKyNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjaWZkZWYgSEFWRV9QUk9DRVNTX0gKICNpbmNsdWRlIDxwcm9jZXNzLmg+CiAjZW5kaWYKQEAgLTM3LDExICszNyw2IEBACiAjZGVmaW5lIFNJR19FUlIgKChQeU9TX3NpZ2hhbmRsZXJfdCkoLTEpKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiAhZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTlNJRyAxMgotI2luY2x1ZGUgPHByb2Nlc3MuaD4KLSNlbmRpZgotCiAjaWZuZGVmIE5TSUcKICMgaWYgZGVmaW5lZChfTlNJRykKICMgIGRlZmluZSBOU0lHIF9OU0lHICAgICAgICAgICAgLyogRm9yIEJTRC9TeXNWICovCkBAIC03OCwxMCArNzMsNiBAQAogICAgYSB3b3JraW5nIGltcGxlbWVudGF0aW9uIHRoYXQgd29ya3MgaW4gYWxsIHRocmVlIGNhc2VzIC0tIHRoZQogICAgaGFuZGxlciBpZ25vcmVzIHNpZ25hbHMgaWYgZ2V0cGlkKCkgaXNuJ3QgdGhlIHNhbWUgYXMgaW4gdGhlIG1haW4KICAgIHRocmVhZC4gIFhYWCBUaGlzIGlzIGEgaGFjay4KLQotICAgR05VIHB0aCBpcyBhIHVzZXItc3BhY2UgdGhyZWFkaW5nIGxpYnJhcnksIGFuZCBhcyBzdWNoLCBhbGwgdGhyZWFkcwotICAgcnVuIHdpdGhpbiB0aGUgc2FtZSBwcm9jZXNzLiBJbiB0aGlzIGNhc2UsIGlmIHRoZSBjdXJyZW50bHkgcnVubmluZwotICAgdGhyZWFkIGlzIG5vdCB0aGUgbWFpbl90aHJlYWQsIHNlbmQgdGhlIHNpZ25hbCB0byB0aGUgbWFpbl90aHJlYWQuCiAqLwogCiAjaWZkZWYgV0lUSF9USFJFQUQKQEAgLTE4MCwxNSArMTcxLDMxIEBACiAgICAgcmV0dXJuIFB5RXJyX0NoZWNrU2lnbmFscygpOwogfQogCitzdGF0aWMgaW50CityZXBvcnRfd2FrZXVwX2Vycm9yKHZvaWQgKmRhdGEpCit7CisgICAgaW50IHNhdmVfZXJybm8gPSBlcnJubzsKKyAgICBlcnJubyA9IChpbnQpIChQeV9pbnRwdHJfdCkgZGF0YTsKKyAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgUHlTeXNfV3JpdGVTdGRlcnIoIkV4Y2VwdGlvbiBpZ25vcmVkIHdoZW4gdHJ5aW5nIHRvIHdyaXRlIHRvIHRoZSAiCisgICAgICAgICAgICAgICAgICAgICAgInNpZ25hbCB3YWtldXAgZmQ6XG4iKTsKKyAgICBQeUVycl9Xcml0ZVVucmFpc2FibGUoTlVMTCk7CisgICAgZXJybm8gPSBzYXZlX2Vycm5vOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZAogdHJpcF9zaWduYWwoaW50IHNpZ19udW0pCiB7CiAgICAgdW5zaWduZWQgY2hhciBieXRlOworICAgIGludCByYyA9IDA7CiAKICAgICBIYW5kbGVyc1tzaWdfbnVtXS50cmlwcGVkID0gMTsKICAgICBpZiAod2FrZXVwX2ZkICE9IC0xKSB7CiAgICAgICAgIGJ5dGUgPSAodW5zaWduZWQgY2hhcilzaWdfbnVtOwotICAgICAgICB3cml0ZSh3YWtldXBfZmQsICZieXRlLCAxKTsKKyAgICAgICAgd2hpbGUgKChyYyA9IHdyaXRlKHdha2V1cF9mZCwgJmJ5dGUsIDEpKSA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgICAgIGlmIChyYyA9PSAtMSkKKyAgICAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsKHJlcG9ydF93YWtldXBfZXJyb3IsICh2b2lkICopIChQeV9pbnRwdHJfdCkgZXJybm8pOwogICAgIH0KICAgICBpZiAoaXNfdHJpcHBlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjAzLDEzICsyMTAsNiBAQAogewogICAgIGludCBzYXZlX2Vycm5vID0gZXJybm87CiAKLSNpZiBkZWZpbmVkKFdJVEhfVEhSRUFEKSAmJiBkZWZpbmVkKFdJVEhfUFRIKQotICAgIGlmIChQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkgIT0gbWFpbl90aHJlYWQpIHsKLSAgICAgICAgcHRoX3JhaXNlKCoocHRoX3QgKikgbWFpbl90aHJlYWQsIHNpZ19udW0pOwotICAgIH0KLSAgICBlbHNlCi0jZW5kaWYKLSAgICB7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAvKiBTZWUgTk9URVMgc2VjdGlvbiBhYm92ZSAqLwogICAgIGlmIChnZXRwaWQoKSA9PSBtYWluX3BpZCkKQEAgLTIzMSw3ICsyMzEsNiBAQAogICAgICAqIG1ha2VzIHRoaXMgdHJ1ZS4gIFNlZSBhbHNvIGlzc3VlODM1NC4gKi8KICAgICBQeU9TX3NldHNpZyhzaWdfbnVtLCBzaWduYWxfaGFuZGxlcik7CiAjZW5kaWYKLSAgICB9CiAKICAgICAvKiBJc3N1ZSAjMTAzMTE6IGFzeW5jaHJvbm91c2x5IGV4ZWN1dGluZyBzaWduYWwgaGFuZGxlcnMgc2hvdWxkIG5vdAogICAgICAgIG11dGF0ZSBlcnJubyB1bmRlciB0aGUgZmVldCBvZiB1bnN1c3BlY3RpbmcgQyBjb2RlLiAqLwpAQCAtODAwLDcgKzc5OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICZzaWduYWxzLCAmdGltZW91dCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyh0aW1lb3V0LCAmdHZfc2VjLCAmdHZfbnNlYykgPT0gLTEpCisgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyh0aW1lb3V0LCAmdHZfc2VjLCAmdHZfbnNlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QeVRpbWVfUk9VTkRfRE9XTikgPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGJ1Zi50dl9zZWMgPSB0dl9zZWM7CiAgICAgYnVmLnR2X25zZWMgPSB0dl9uc2VjOwpAQCAtOTgzLDkgKzk4MywxMCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogI2lmIGRlZmluZWQoSEFWRV9TSUdXQUlUSU5GTykgfHwgZGVmaW5lZChIQVZFX1NJR1RJTUVEV0FJVCkKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTaWdpbmZvVHlwZSwgJnN0cnVjdF9zaWdpbmZvX2Rlc2MpOwotCisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlNpZ2luZm9UeXBlLCAmc3RydWN0X3NpZ2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFB5X0lOQ1JFRigoUHlPYmplY3QqKSAmU2lnaW5mb1R5cGUpOwogICAgIFB5TW9kdWxlX0FkZE9iamVjdChtLCAic3RydWN0X3NpZ2luZm8iLCAoUHlPYmplY3QqKSAmU2lnaW5mb1R5cGUpOwogICAgIGluaXRpYWxpemVkID0gMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5jCmluZGV4IDMyYjRlYmEuLjIzMDE5ZWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc29ja2V0bW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zb2NrZXRtb2R1bGUuYwpAQCAtMTUsNyArMTUsNyBAQAogCiBNb2R1bGUgaW50ZXJmYWNlOgogCi0tIHNvY2tldC5lcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3Igc29ja2V0IHNwZWNpZmljIGVycm9ycworLSBzb2NrZXQuZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIHNvY2tldCBzcGVjaWZpYyBlcnJvcnMsIGFsaWFzIGZvciBPU0Vycm9yCiAtIHNvY2tldC5nYWllcnJvcjogZXhjZXB0aW9uIHJhaXNlZCBmb3IgZ2V0YWRkcmluZm8vZ2V0bmFtZWluZm8gZXJyb3JzLAogICAgIGEgc3ViY2xhc3Mgb2Ygc29ja2V0LmVycm9yCiAtIHNvY2tldC5oZXJyb3I6IGV4Y2VwdGlvbiByYWlzZWQgZm9yIGdldGhvc3RieSogZXJyb3JzLApAQCAtMzMsOCArMzMsOCBAQAogLSBzb2NrZXQubnRvaGwoMzIgYml0IHZhbHVlKSAtLT4gbmV3IGludCBvYmplY3QKIC0gc29ja2V0Lmh0b25zKDE2IGJpdCB2YWx1ZSkgLS0+IG5ldyBpbnQgb2JqZWN0CiAtIHNvY2tldC5odG9ubCgzMiBiaXQgdmFsdWUpIC0tPiBuZXcgaW50IG9iamVjdAotLSBzb2NrZXQuZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCBbLCBmYW1pbHksIHNvY2t0eXBlLCBwcm90bywgZmxhZ3NdKQotICAgIC0tPiBMaXN0IG9mIChmYW1pbHksIHNvY2t0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzb2NrYWRkcikKKy0gc29ja2V0LmdldGFkZHJpbmZvKGhvc3QsIHBvcnQgWywgZmFtaWx5LCB0eXBlLCBwcm90bywgZmxhZ3NdKQorICAgIC0tPiBMaXN0IG9mIChmYW1pbHksIHR5cGUsIHByb3RvLCBjYW5vbm5hbWUsIHNvY2thZGRyKQogLSBzb2NrZXQuZ2V0bmFtZWluZm8oc29ja2FkZHIsIGZsYWdzKSAtLT4gKGhvc3QsIHBvcnQpCiAtIHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19TVFJFQU0sIGV0Yy46IGNvbnN0YW50cyBmcm9tIDxzb2NrZXQuaD4KIC0gc29ja2V0Lmhhc19pcHY2OiBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgSVB2NiBpcyBzdXBwb3J0ZWQKQEAgLTk1LDE4ICs5NSwxNiBAQAogI2luY2x1ZGUgIlB5dGhvbi5oIgogI2luY2x1ZGUgInN0cnVjdG1lbWJlci5oIgogCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotCiAvKiBTb2NrZXQgb2JqZWN0IGRvY3VtZW50YXRpb24gKi8KIFB5RG9jX1NUUlZBUihzb2NrX2RvYywKLSJzb2NrZXQoW2ZhbWlseVssIHR5cGVbLCBwcm90b11dXSkgLT4gc29ja2V0IG9iamVjdFxuXAorInNvY2tldChmYW1pbHk9QUZfSU5FVCwgdHlwZT1TT0NLX1NUUkVBTSwgcHJvdG89MCwgZmlsZW5vPU5vbmUpIC0+IHNvY2tldCBvYmplY3RcblwKIFxuXAogT3BlbiBhIHNvY2tldCBvZiB0aGUgZ2l2ZW4gdHlwZS4gIFRoZSBmYW1pbHkgYXJndW1lbnQgc3BlY2lmaWVzIHRoZVxuXAogYWRkcmVzcyBmYW1pbHk7IGl0IGRlZmF1bHRzIHRvIEFGX0lORVQuICBUaGUgdHlwZSBhcmd1bWVudCBzcGVjaWZpZXNcblwKIHdoZXRoZXIgdGhpcyBpcyBhIHN0cmVhbSAoU09DS19TVFJFQU0sIHRoaXMgaXMgdGhlIGRlZmF1bHQpXG5cCiBvciBkYXRhZ3JhbSAoU09DS19ER1JBTSkgc29ja2V0LiAgVGhlIHByb3RvY29sIGFyZ3VtZW50IGRlZmF1bHRzIHRvIDAsXG5cCiBzcGVjaWZ5aW5nIHRoZSBkZWZhdWx0IHByb3RvY29sLiAgS2V5d29yZCBhcmd1bWVudHMgYXJlIGFjY2VwdGVkLlxuXAorVGhlIHNvY2tldCBpcyBjcmVhdGVkIGFzIG5vbi1pbmhlcml0YWJsZS5cblwKIFxuXAogQSBzb2NrZXQgb2JqZWN0IHJlcHJlc2VudHMgb25lIGVuZHBvaW50IG9mIGEgbmV0d29yayBjb25uZWN0aW9uLlxuXAogXG5cCkBAIC0xMTcsNyArMTE1LDcgQEAKIGNsb3NlKCkgLS0gY2xvc2UgdGhlIHNvY2tldFxuXAogY29ubmVjdChhZGRyKSAtLSBjb25uZWN0IHRoZSBzb2NrZXQgdG8gYSByZW1vdGUgYWRkcmVzc1xuXAogY29ubmVjdF9leChhZGRyKSAtLSBjb25uZWN0LCByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIGFuIGV4Y2VwdGlvblxuXAotX2R1cCgpIC0tIHJldHVybiBhIG5ldyBzb2NrZXQgZmQgZHVwbGljYXRlZCBmcm9tIGZpbGVubygpXG5cCitkdXAoKSAtLSByZXR1cm4gYSBuZXcgc29ja2V0IGZkIGR1cGxpY2F0ZWQgZnJvbSBmaWxlbm8oKVxuXAogZmlsZW5vKCkgLS0gcmV0dXJuIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yXG5cCiBnZXRwZWVybmFtZSgpIC0tIHJldHVybiByZW1vdGUgYWRkcmVzcyBbKl1cblwKIGdldHNvY2tuYW1lKCkgLS0gcmV0dXJuIGxvY2FsIGFkZHJlc3NcblwKQEAgLTE5MCw3ICsxODgsNyBAQAogI2lmIGRlZmluZWQoV0lUSF9USFJFQUQpICYmIChkZWZpbmVkKF9fQVBQTEVfXykgfHwgXAogICAgIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiswIDwgNTAzMDAwKSB8fCBcCiAgICAgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBcCi0gICAgZGVmaW5lZChfX1ZNUykgfHwgIWRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykpCisgICAgIWRlZmluZWQoSEFWRV9HRVRBRERSSU5GTykpCiAjZGVmaW5lIFVTRV9HRVRBRERSSU5GT19MT0NLCiAjZW5kaWYKIApAQCAtMjE0LDIyICsyMTIsMTEgQEAKICMgaW5jbHVkZSA8Y3R5cGUuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX1ZNUykKLSMgIGluY2x1ZGUgPGlvY3RsLmg+Ci0jZW5kaWYKLQogI2lmZGVmIF9fQVBQTEVfXwogIyBpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNlbmRpZgogCiAKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKQotIyBkZWZpbmUgIElOQ0xfRE9TCi0jIGRlZmluZSAgSU5DTF9ET1NFUlJPUlMKLSMgZGVmaW5lICBJTkNMX05PUE1BUEkKLSMgaW5jbHVkZSA8b3MyLmg+Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19zZ2kpICYmIF9DT01QSUxFUl9WRVJTSU9OPjcwMCAmJiAhX1NHSUFQSQogLyogbWFrZSBzdXJlIHRoYXQgdGhlIHJlZW50cmFudCAoZ2V0aG9zdGJ5YWRkcl9yIGV0YykKICAgIGZ1bmN0aW9ucyBhcmUgZGVjbGFyZWQgY29ycmVjdGx5IGlmIGNvbXBpbGluZyB3aXRoCkBAIC0yODYsMTIgKzI3Myw3IEBACiAjIGluY2x1ZGUgPHVuaXN0ZC5oPgogCiAvKiBIZWFkZXJzIG5lZWRlZCBmb3IgaW5ldF9udG9hKCkgYW5kIGluZXRfYWRkcigpICovCi0jIGlmIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19WQUNQUCkKLSMgIGluY2x1ZGUgPG5ldGRiLmg+Ci10eXBlZGVmIHNpemVfdCBzb2NrbGVuX3Q7Ci0jIGVsc2UKICMgICBpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSMgZW5kaWYKIAogIyAgaW5jbHVkZSA8ZmNudGwuaD4KIApAQCAtMzcxLDIyICszNTMsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBNU19XSU5ET1dTCi0vKiBPbiBXaW5kb3dzIGEgc29ja2V0IGlzIHJlYWxseSBhIGhhbmRsZSBub3QgYW4gZmQgKi8KLXN0YXRpYyBTT0NLRVQKLWR1cF9zb2NrZXQoU09DS0VUIGhhbmRsZSkKLXsKLSAgICBXU0FQUk9UT0NPTF9JTkZPIGluZm87Ci0KLSAgICBpZiAoV1NBRHVwbGljYXRlU29ja2V0KGhhbmRsZSwgR2V0Q3VycmVudFByb2Nlc3NJZCgpLCAmaW5mbykpCi0gICAgICAgIHJldHVybiBJTlZBTElEX1NPQ0tFVDsKLQotICAgIHJldHVybiBXU0FTb2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLCBGUk9NX1BST1RPQ09MX0lORk8sCi0gICAgICAgICAgICAgICAgICAgICBGUk9NX1BST1RPQ09MX0lORk8sICZpbmZvLCAwLCBXU0FfRkxBR19PVkVSTEFQUEVEKTsKLX0KICNkZWZpbmUgU09DS0VUQ0xPU0UgY2xvc2Vzb2NrZXQKLSNlbHNlCi0vKiBPbiBVbml4IHdlIGNhbiB1c2UgZHVwIHRvIGR1cGxpY2F0ZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEgc29ja2V0Ki8KLSNkZWZpbmUgZHVwX3NvY2tldChmZCkgZHVwKGZkKQogI2VuZGlmCiAKICNpZmRlZiBNU19XSU4zMgpAQCAtMzk1LDExICszNjIsNiBAQAogI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0jZGVmaW5lIFNPQ0tFVENMT1NFIHNvY2xvc2UKLSNkZWZpbmUgTk9fRFVQIC8qIFNvY2tldHMgYXJlIE5vdCBBY3R1YWwgRmlsZSBIYW5kbGVzIHVuZGVyIE9TLzIgKi8KLSNlbmRpZgotCiAjaWZuZGVmIFNPQ0tFVENMT1NFCiAjZGVmaW5lIFNPQ0tFVENMT1NFIGNsb3NlCiAjZW5kaWYKQEAgLTQzNywxMSArMzk5LDYgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBfX1ZNUwotLyogVENQL0lQIFNlcnZpY2VzIGZvciBWTVMgdXNlcyBhIG1heGltdW0gc2VuZC9yZWN2IGJ1ZmZlciBsZW5ndGggKi8KLSNkZWZpbmUgU0VHTUVOVF9TSVpFICgzMiAqIDEwMjQgLTEpCi0jZW5kaWYKLQogLyogQ29udmVydCAic29ja19hZGRyX3QgKiIgdG8gInN0cnVjdCBzb2NrYWRkciAqIi4gKi8KICNkZWZpbmUgU0FTMlNBKHgpICAgICAgICgmKCh4KS0+c2EpKQogCkBAIC00NTksNiArNDE2LDEwIEBACiAjZGVmaW5lIElOVkFMSURfU09DS0VUICgtMSkKICNlbmRpZgogCisjaWZuZGVmIElOQUREUl9OT05FCisjZGVmaW5lIElOQUREUl9OT05FICgtMSkKKyNlbmRpZgorCiAvKiBYWFggVGhlcmUncyBhIHByb2JsZW0gaGVyZTogKnN0YXRpYyogZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9zZWQgdG8gaGF2ZQogICAgYSBQeSBwcmVmaXggKG9yIHVzZSBDYXBpdGFsaXplZFdvcmRzKS4gIExhdGVyLi4uICovCiAKQEAgLTUxOSw2ICs0ODAsMTEgQEAKICAgICAoZXJybm8gPT0gZXhwZWN0ZWQpCiAjZW5kaWYKIAorI2lmZGVmIE1TX1dJTkRPV1MKKy8qIERvZXMgV1NBU29ja2V0KCkgc3VwcG9ydCB0aGUgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQgZmxhZz8gKi8KK3N0YXRpYyBpbnQgc3VwcG9ydF93c2Ffbm9faW5oZXJpdCA9IC0xOworI2VuZGlmCisKIC8qIENvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIHJhaXNlIGFuIGVycm9yIGFjY29yZGluZyB0byBlcnJubwogICAgYW5kIHJldHVybiBhIE5VTEwgcG9pbnRlciBmcm9tIGEgZnVuY3Rpb24uICovCiAKQEAgLTUzNCw0MiArNTAwLDYgQEAKICAgICAgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyKFB5RXhjX09TRXJyb3IsIGVycl9ubyk7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIGlmIChzb2NrX2Vycm5vKCkgIT0gTk9fRVJST1IpIHsKLSAgICAgICAgQVBJUkVUIHJjOwotICAgICAgICBVTE9ORyAgbXNnbGVuOwotICAgICAgICBjaGFyIG91dGJ1ZlsxMDBdOwotICAgICAgICBpbnQgbXllcnJvcmNvZGUgPSBzb2NrX2Vycm5vKCk7Ci0KLSAgICAgICAgLyogUmV0cmlldmUgc29ja2V0LXJlbGF0ZWQgZXJyb3IgbWVzc2FnZSBmcm9tIE1QVE4uTVNHIGZpbGUgKi8KLSAgICAgICAgcmMgPSBEb3NHZXRNZXNzYWdlKE5VTEwsIDAsIG91dGJ1Ziwgc2l6ZW9mKG91dGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBteWVycm9yY29kZSAtIFNPQ0JBU0VFUlIgKyAyNiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJtcHRuLm1zZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmbXNnbGVuKTsKLSAgICAgICAgaWYgKHJjID09IE5PX0VSUk9SKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdjsKLQotICAgICAgICAgICAgLyogT1MvMiBkb2Vzbid0IGd1YXJhbnRlZSBhIHRlcm1pbmF0b3IgKi8KLSAgICAgICAgICAgIG91dGJ1Zlttc2dsZW5dID0gJ1wwJzsKLSAgICAgICAgICAgIGlmIChzdHJsZW4ob3V0YnVmKSA+IDApIHsKLSAgICAgICAgICAgICAgICAvKiBJZiBub24tZW1wdHkgbXNnLCB0cmltIENSTEYgKi8KLSAgICAgICAgICAgICAgICBjaGFyICpsYXN0YyA9ICZvdXRidWZbIHN0cmxlbihvdXRidWYpLTEgXTsKLSAgICAgICAgICAgICAgICB3aGlsZSAobGFzdGMgPiBvdXRidWYgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgUHlfSVNTUEFDRShQeV9DSEFSTUFTSygqbGFzdGMpKSkgewotICAgICAgICAgICAgICAgICAgICAvKiBUcmltIHRyYWlsaW5nIHdoaXRlc3BhY2UgKENSTEYpICovCi0gICAgICAgICAgICAgICAgICAgICpsYXN0Yy0tID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2ID0gUHlfQnVpbGRWYWx1ZSgiKGlzKSIsIG15ZXJyb3Jjb2RlLCBvdXRidWYpOwotICAgICAgICAgICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19PU0Vycm9yLCB2KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCiAgICAgcmV0dXJuIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKIH0KIApAQCAtNjE3LDM3ICs1NDcsMTQgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotI2lmZGVmIF9fVk1TCi0vKiBGdW5jdGlvbiB0byBzZW5kIGluIHNlZ21lbnRzICovCi1zdGF0aWMgaW50Ci1zZW5kc2VnbWVudGVkKGludCBzb2NrX2ZkLCBjaGFyICpidWYsIGludCBsZW4sIGludCBmbGFncykKLXsKLSAgICBpbnQgbiA9IDA7Ci0gICAgaW50IHJlbWFpbmluZyA9IGxlbjsKLQotICAgIHdoaWxlIChyZW1haW5pbmcgPiAwKSB7Ci0gICAgICAgIHVuc2lnbmVkIGludCBzZWdtZW50OwotCi0gICAgICAgIHNlZ21lbnQgPSAocmVtYWluaW5nID49IFNFR01FTlRfU0laRSA/IFNFR01FTlRfU0laRSA6IHJlbWFpbmluZyk7Ci0gICAgICAgIG4gPSBzZW5kKHNvY2tfZmQsIGJ1Ziwgc2VnbWVudCwgZmxhZ3MpOwotICAgICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgICAgIHJldHVybiBuOwotICAgICAgICB9Ci0gICAgICAgIHJlbWFpbmluZyAtPSBzZWdtZW50OwotICAgICAgICBidWYgKz0gc2VnbWVudDsKLSAgICB9IC8qIGVuZCB3aGlsZSAqLwotCi0gICAgcmV0dXJuIGxlbjsKLX0KLSNlbmRpZgotCiAvKiBGdW5jdGlvbiB0byBwZXJmb3JtIHRoZSBzZXR0aW5nIG9mIHNvY2tldCBibG9ja2luZyBtb2RlCiAgICBpbnRlcm5hbGx5LiBibG9jayA9ICgxIHwgMCkuICovCiBzdGF0aWMgaW50CiBpbnRlcm5hbF9zZXRibG9ja2luZyhQeVNvY2tldFNvY2tPYmplY3QgKnMsIGludCBibG9jaykKIHsKLSNpZm5kZWYgTVNfV0lORE9XUwotICAgIGludCBkZWxheV9mbGFnOworI2lmICFkZWZpbmVkKE1TX1dJTkRPV1MpIFwKKyAgICAmJiAhKChkZWZpbmVkKEhBVkVfU1lTX0lPQ1RMX0gpICYmIGRlZmluZWQoRklPTkJJTykpKQorICAgIGludCBkZWxheV9mbGFnLCBuZXdfZGVsYXlfZmxhZzsKICNlbmRpZgogI2lmZGVmIFNPQ0tfTk9OQkxPQ0sKICAgICBpZiAoYmxvY2spCkBAIC02NTgsMjAgKzU2NSwxOCBAQAogCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogI2lmbmRlZiBNU19XSU5ET1dTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgYmxvY2sgPSAhYmxvY2s7Ci0gICAgaW9jdGwocy0+c29ja19mZCwgRklPTkJJTywgKGNhZGRyX3QpJmJsb2NrLCBzaXplb2YoYmxvY2spKTsKLSNlbGlmIGRlZmluZWQoX19WTVMpCisjaWYgKGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9OQklPKSkKICAgICBibG9jayA9ICFibG9jazsKICAgICBpb2N0bChzLT5zb2NrX2ZkLCBGSU9OQklPLCAodW5zaWduZWQgaW50ICopJmJsb2NrKTsKLSNlbHNlICAvKiAhUFlPU19PUzIgJiYgIV9fVk1TICovCisjZWxzZQogICAgIGRlbGF5X2ZsYWcgPSBmY250bChzLT5zb2NrX2ZkLCBGX0dFVEZMLCAwKTsKICAgICBpZiAoYmxvY2spCi0gICAgICAgIGRlbGF5X2ZsYWcgJj0gKH5PX05PTkJMT0NLKTsKKyAgICAgICAgbmV3X2RlbGF5X2ZsYWcgPSBkZWxheV9mbGFnICYgKH5PX05PTkJMT0NLKTsKICAgICBlbHNlCi0gICAgICAgIGRlbGF5X2ZsYWcgfD0gT19OT05CTE9DSzsKLSAgICBmY250bChzLT5zb2NrX2ZkLCBGX1NFVEZMLCBkZWxheV9mbGFnKTsKLSNlbmRpZiAvKiAhUFlPU19PUzIgKi8KKyAgICAgICAgbmV3X2RlbGF5X2ZsYWcgPSBkZWxheV9mbGFnIHwgT19OT05CTE9DSzsKKyAgICBpZiAobmV3X2RlbGF5X2ZsYWcgIT0gZGVsYXlfZmxhZykKKyAgICAgICAgZmNudGwocy0+c29ja19mZCwgRl9TRVRGTCwgbmV3X2RlbGF5X2ZsYWcpOworI2VuZGlmCiAjZWxzZSAvKiBNU19XSU5ET1dTICovCiAgICAgYmxvY2sgPSAhYmxvY2s7CiAgICAgaW9jdGxzb2NrZXQocy0+c29ja19mZCwgRklPTkJJTywgKHVfbG9uZyopJmJsb2NrKTsKQEAgLTg1NSw4ICs3NjAsNiBAQAogewogICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlczsKICAgICBpbnQgZXJyb3I7Ci0gICAgaW50IGQxLCBkMiwgZDMsIGQ0OwotICAgIGNoYXIgY2g7CiAKICAgICBtZW1zZXQoKHZvaWQgKikgYWRkcl9yZXQsICdcMCcsIHNpemVvZigqYWRkcl9yZXQpKTsKICAgICBpZiAobmFtZVswXSA9PSAnXDAnKSB7CkBAIC05MDUsNyArODA4LDEwIEBACiAgICAgICAgIGZyZWVhZGRyaW5mbyhyZXMpOwogICAgICAgICByZXR1cm4gc2l6OwogICAgIH0KLSAgICBpZiAobmFtZVswXSA9PSAnPCcgJiYgc3RyY21wKG5hbWUsICI8YnJvYWRjYXN0PiIpID09IDApIHsKKyAgICAvKiBzcGVjaWFsLWNhc2UgYnJvYWRjYXN0IC0gaW5ldF9hZGRyKCkgYmVsb3cgY2FuIHJldHVybiBJTkFERFJfTk9ORSBmb3IKKyAgICAgKiB0aGlzICovCisgICAgaWYgKHN0cmNtcChuYW1lLCAiMjU1LjI1NS4yNTUuMjU1IikgPT0gMCB8fAorICAgICAgICBzdHJjbXAobmFtZSwgIjxicm9hZGNhc3Q+IikgPT0gMCkgewogICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKICAgICAgICAgaWYgKGFmICE9IEFGX0lORVQgJiYgYWYgIT0gQUZfVU5TUEVDKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKQEAgLTkyMSwyMCArODI3LDUzIEBACiAgICAgICAgIHNpbi0+c2luX2FkZHIuc19hZGRyID0gSU5BRERSX0JST0FEQ0FTVDsKICAgICAgICAgcmV0dXJuIHNpemVvZihzaW4tPnNpbl9hZGRyKTsKICAgICB9Ci0gICAgaWYgKHNzY2FuZihuYW1lLCAiJWQuJWQuJWQuJWQlYyIsICZkMSwgJmQyLCAmZDMsICZkNCwgJmNoKSA9PSA0ICYmCi0gICAgICAgIDAgPD0gZDEgJiYgZDEgPD0gMjU1ICYmIDAgPD0gZDIgJiYgZDIgPD0gMjU1ICYmCi0gICAgICAgIDAgPD0gZDMgJiYgZDMgPD0gMjU1ICYmIDAgPD0gZDQgJiYgZDQgPD0gMjU1KSB7Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotICAgICAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl9yZXQ7Ci0gICAgICAgIHNpbi0+c2luX2FkZHIuc19hZGRyID0gaHRvbmwoCi0gICAgICAgICAgICAoKGxvbmcpIGQxIDw8IDI0KSB8ICgobG9uZykgZDIgPDwgMTYpIHwKLSAgICAgICAgICAgICgobG9uZykgZDMgPDwgOCkgfCAoKGxvbmcpIGQ0IDw8IDApKTsKLSAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKworICAgIC8qIGF2b2lkIGEgbmFtZSByZXNvbHV0aW9uIGluIGNhc2Ugb2YgbnVtZXJpYyBhZGRyZXNzICovCisjaWZkZWYgSEFWRV9JTkVUX1BUT04KKyAgICAvKiBjaGVjayBmb3IgYW4gSVB2NCBhZGRyZXNzICovCisgICAgaWYgKGFmID09IEFGX1VOU1BFQyB8fCBhZiA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJfcmV0OworICAgICAgICBtZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOworICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIG5hbWUsICZzaW4tPnNpbl9hZGRyKSA+IDApIHsKKyAgICAgICAgICAgIHNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CiAjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KLSAgICAgICAgc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOworICAgICAgICAgICAgc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOwogI2VuZGlmCi0gICAgICAgIHJldHVybiA0OworICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIH0KICAgICB9CisjaWZkZWYgRU5BQkxFX0lQVjYKKyAgICAvKiBjaGVjayBmb3IgYW4gSVB2NiBhZGRyZXNzIC0gaWYgdGhlIGFkZHJlc3MgY29udGFpbnMgYSBzY29wZSBJRCwgd2UKKyAgICAgKiBmYWxsYmFjayB0byBnZXRhZGRyaW5mbygpLCB3aGljaCBjYW4gaGFuZGxlIHRyYW5zbGF0aW9uIGZyb20gaW50ZXJmYWNlCisgICAgICogbmFtZSB0byBpbnRlcmZhY2UgaW5kZXggKi8KKyAgICBpZiAoKGFmID09IEFGX1VOU1BFQyB8fCBhZiA9PSBBRl9JTkVUNikgJiYgIXN0cmNocihuYW1lLCAnJScpKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcl9yZXQ7CisgICAgICAgIG1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIG5hbWUsICZzaW4tPnNpbjZfYWRkcikgPiAwKSB7CisgICAgICAgICAgICBzaW4tPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TT0NLQUREUl9TQV9MRU4KKyAgICAgICAgICAgIHNpbi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKyAgICAgICAgICAgIHJldHVybiAxNjsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBFTkFCTEVfSVBWNiAqLworI2Vsc2UgLyogSEFWRV9JTkVUX1BUT04gKi8KKyAgICAvKiBjaGVjayBmb3IgYW4gSVB2NCBhZGRyZXNzICovCisgICAgaWYgKGFmID09IEFGX0lORVQgfHwgYWYgPT0gQUZfVU5TUEVDKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJfcmV0OworICAgICAgICBtZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOworICAgICAgICBpZiAoKHNpbi0+c2luX2FkZHIuc19hZGRyID0gaW5ldF9hZGRyKG5hbWUpKSAhPSBJTkFERFJfTk9ORSkgeworICAgICAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTgorICAgICAgICAgICAgc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBIQVZFX0lORVRfUFRPTiAqLworCisgICAgLyogcGVyZm9ybSBhIG5hbWUgcmVzb2x1dGlvbiAqLwogICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwogICAgIGhpbnRzLmFpX2ZhbWlseSA9IGFmOwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTEyMjYsNyArMTE2NSw3IEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0xJTlVYX0NBTl9ICisjaWZkZWYgQUZfQ0FOCiAgICAgY2FzZSBBRl9DQU46CiAgICAgewogICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfY2FuICphID0gKHN0cnVjdCBzb2NrYWRkcl9jYW4gKilhZGRyOwpAQCAtMTMyOSwxMSArMTI2OCw3IEBACiAgICAgICAgIH0KICAgICAgICAgYWRkci0+c3VuX2ZhbWlseSA9IHMtPnNvY2tfZmFtaWx5OwogICAgICAgICBtZW1jcHkoYWRkci0+c3VuX3BhdGgsIHBhdGgsIGxlbik7Ci0jaWYgZGVmaW5lZChQWU9TX09TMikKLSAgICAgICAgKmxlbl9yZXQgPSBzaXplb2YoKmFkZHIpOwotI2Vsc2UKICAgICAgICAgKmxlbl9yZXQgPSBsZW4gKyBvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfdW4sIHN1bl9wYXRoKTsKLSNlbmRpZgogICAgICAgICByZXR2YWwgPSAxOwogICAgIHVuaXhfb3V0OgogICAgICAgICBQeV9ERUNSRUYoYXJncyk7CkBAIC0xNjU0LDEwICsxNTg5LDEyIEBACiAgICAgfQogI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0xJTlVYX0NBTl9ICisjaWYgZGVmaW5lZChBRl9DQU4pICYmIGRlZmluZWQoQ0FOX1JBVykgJiYgZGVmaW5lZChDQU5fQkNNKQogICAgIGNhc2UgQUZfQ0FOOgogICAgICAgICBzd2l0Y2ggKHMtPnNvY2tfcHJvdG8pIHsKICAgICAgICAgY2FzZSBDQU5fUkFXOgorICAgICAgICAvKiBmYWxsLXRocm91Z2ggKi8KKyAgICAgICAgY2FzZSBDQU5fQkNNOgogICAgICAgICB7CiAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfY2FuICphZGRyOwogICAgICAgICAgICAgUHlPYmplY3QgKmludGVyZmFjZU5hbWU7CkBAIC0xODU5LDcgKzE3OTYsNyBAQAogICAgIH0KICNlbmRpZgogCi0jaWZkZWYgSEFWRV9MSU5VWF9DQU5fSAorI2lmZGVmIEFGX0NBTgogICAgIGNhc2UgQUZfQ0FOOgogICAgIHsKICAgICAgICAgKmxlbl9yZXQgPSBzaXplb2YgKHN0cnVjdCBzb2NrYWRkcl9jYW4pOwpAQCAtMTk0OCw4ICsxODg1LDIyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNtc2doLT5jbXNnX2xlbikpOwogCiAgICAgLyogTm90ZSB0aGF0IFBPU0lYIGFsbG93cyBtc2dfY29udHJvbGxlbiB0byBiZSBvZiBzaWduZWQgdHlwZS4gKi8KLSAgICBpZiAoY21zZ2ggPT0gTlVMTCB8fCBtc2ctPm1zZ19jb250cm9sID09IE5VTEwgfHwgbXNnLT5tc2dfY29udHJvbGxlbiA8IDApCisgICAgaWYgKGNtc2doID09IE5VTEwgfHwgbXNnLT5tc2dfY29udHJvbCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gMDsKKyAgICAvKiBOb3RlIHRoYXQgUE9TSVggYWxsb3dzIG1zZ19jb250cm9sbGVuIHRvIGJlIG9mIGEgc2lnbmVkIHR5cGUuIFRoaXMgaXMKKyAgICAgICBhbm5veWluZyB1bmRlciBPUyBYIGFzIGl0J3MgdW5zaWduZWQgdGhlcmUgYW5kIHNvIGl0IHRyaWdnZXJzIGEKKyAgICAgICB0YXV0b2xvZ2ljYWwgY29tcGFyaXNvbiB3YXJuaW5nIHVuZGVyIENsYW5nIHdoZW4gY29tcGFyZWQgYWdhaW5zdCAwLgorICAgICAgIFNpbmNlIHRoZSBjaGVjayBpcyB2YWxpZCBvbiBvdGhlciBwbGF0Zm9ybXMsIHNpbGVuY2UgdGhlIHdhcm5pbmcgdW5kZXIKKyAgICAgICBDbGFuZy4gKi8KKyAgICAjaWZkZWYgX19jbGFuZ19fCisgICAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyAgICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd0YXV0b2xvZ2ljYWwtY29tcGFyZSIKKyAgICAjZW5kaWYKKyAgICBpZiAobXNnLT5tc2dfY29udHJvbGxlbiA8IDApCisgICAgICAgIHJldHVybiAwOworICAgICNpZmRlZiBfX2NsYW5nX18KKyAgICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisgICAgI2VuZGlmCiAgICAgaWYgKHNwYWNlIDwgY21zZ19sZW5fZW5kKQogICAgICAgICBzcGFjZSA9IGNtc2dfbGVuX2VuZDsKICAgICBjbXNnX29mZnNldCA9IChjaGFyICopY21zZ2ggLSAoY2hhciAqKW1zZy0+bXNnX2NvbnRyb2w7CkBAIC0yMDE2LDYgKzE5NjcsMTEgQEAKICAgICBQeU9iamVjdCAqYWRkciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnJlcyA9IE5VTEw7CiAgICAgaW50IHRpbWVvdXQ7CisjaWYgZGVmaW5lZChIQVZFX0FDQ0VQVDQpICYmIGRlZmluZWQoU09DS19DTE9FWEVDKQorICAgIC8qIGFjY2VwdDQoKSBpcyBhdmFpbGFibGUgb24gTGludXggMi42LjI4KyBhbmQgZ2xpYmMgMi4xMCAqLworICAgIHN0YXRpYyBpbnQgYWNjZXB0NF93b3JrcyA9IC0xOworI2VuZGlmCisKICAgICBpZiAoIWdldHNvY2thZGRybGVuKHMsICZhZGRybGVuKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbWVtc2V0KCZhZGRyYnVmLCAwLCBhZGRybGVuKTsKQEAgLTIwMjQsMTAgKzE5ODAsMjQgQEAKICAgICAgICAgcmV0dXJuIHNlbGVjdF9lcnJvcigpOwogCiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKKwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDAsIGludGVydmFsKTsKICAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZiBkZWZpbmVkKEhBVkVfQUNDRVBUNCkgJiYgZGVmaW5lZChTT0NLX0NMT0VYRUMpCisgICAgICAgIGlmIChhY2NlcHQ0X3dvcmtzICE9IDApIHsKKyAgICAgICAgICAgIG5ld2ZkID0gYWNjZXB0NChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0NLX0NMT0VYRUMpOworICAgICAgICAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUICYmIGFjY2VwdDRfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAvKiBPbiBMaW51eCBvbGRlciB0aGFuIDIuNi4yOCwgYWNjZXB0NCgpIGZhaWxzIHdpdGggRU5PU1lTICovCisgICAgICAgICAgICAgICAgYWNjZXB0NF93b3JrcyA9IChlcnJubyAhPSBFTk9TWVMpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChhY2NlcHQ0X3dvcmtzID09IDApCisgICAgICAgICAgICBuZXdmZCA9IGFjY2VwdChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CisjZWxzZQogICAgICAgICBuZXdmZCA9IGFjY2VwdChzLT5zb2NrX2ZkLCBTQVMyU0EoJmFkZHJidWYpLCAmYWRkcmxlbik7CisjZW5kaWYKICAgICB9CiAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIApAQCAtMjA0MCw2ICsyMDEwLDI1IEBACiAgICAgaWYgKG5ld2ZkID09IElOVkFMSURfU09DS0VUKQogICAgICAgICByZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CiAKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbigoSEFORExFKW5ld2ZkLCBIQU5ETEVfRkxBR19JTkhFUklULCAwKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOworICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgfQorI2Vsc2UKKworI2lmIGRlZmluZWQoSEFWRV9BQ0NFUFQ0KSAmJiBkZWZpbmVkKFNPQ0tfQ0xPRVhFQykKKyAgICBpZiAoIWFjY2VwdDRfd29ya3MpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGlmIChfUHlfc2V0X2luaGVyaXRhYmxlKG5ld2ZkLCAwLCBOVUxMKSA8IDApIHsKKyAgICAgICAgICAgIFNPQ0tFVENMT1NFKG5ld2ZkKTsKKyAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCiAgICAgc29jayA9IFB5TG9uZ19Gcm9tU29ja2V0X3QobmV3ZmQpOwogICAgIGlmIChzb2NrID09IE5VTEwpIHsKICAgICAgICAgU09DS0VUQ0xPU0UobmV3ZmQpOwpAQCAtMjIxOSwxMyArMjIwOCw3IEBACiAgICAgICAgICAgICByZXR1cm4gcy0+ZXJyb3JoYW5kbGVyKCk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoZmxhZyk7CiAgICAgfQotI2lmZGVmIF9fVk1TCi0gICAgLyogc29ja2xlbl90IGlzIHVuc2lnbmVkIHNvIG5vIG5lZ2F0aXZlIHRlc3QgaXMgbmVlZGVkLAotICAgICAgIHRlc3QgYnVmbGVuID09IDAgaXMgcHJldmlvdXNseSBkb25lICovCi0gICAgaWYgKGJ1ZmxlbiA+IDEwMjQpIHsKLSNlbHNlCiAgICAgaWYgKGJ1ZmxlbiA8PSAwIHx8IGJ1ZmxlbiA+IDEwMjQpIHsKLSNlbmRpZgogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRzb2Nrb3B0IGJ1ZmxlbiBvdXQgb2YgcmFuZ2UiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzE0LDggKzIyOTcsOCBAQAogUHlEb2NfU1RSVkFSKGRldGFjaF9kb2MsCiAiZGV0YWNoKClcblwKIFxuXAotQ2xvc2UgdGhlIHNvY2tldCBvYmplY3Qgd2l0aG91dCBjbG9zaW5nIHRoZSB1bmRlcmx5aW5nIGZpbGUgZGVzY3JpcHRvci5cCi1UaGUgb2JqZWN0IGNhbm5vdCBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbCwgYnV0IHRoZSBmaWxlIGRlc2NyaXB0b3JcCitDbG9zZSB0aGUgc29ja2V0IG9iamVjdCB3aXRob3V0IGNsb3NpbmcgdGhlIHVuZGVybHlpbmcgZmlsZSBkZXNjcmlwdG9yLlxuXAorVGhlIG9iamVjdCBjYW5ub3QgYmUgdXNlZCBhZnRlciB0aGlzIGNhbGwsIGJ1dCB0aGUgZmlsZSBkZXNjcmlwdG9yXG5cCiBjYW4gYmUgcmV1c2VkIGZvciBvdGhlciBwdXJwb3Nlcy4gIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgcmV0dXJuZWQuIik7CiAKIHN0YXRpYyBpbnQKQEAgLTI1OTUsMTAgKzI1NzgsNiBAQAogewogICAgIFB5X3NzaXplX3Qgb3V0bGVuID0gLTE7CiAgICAgaW50IHRpbWVvdXQ7Ci0jaWZkZWYgX19WTVMKLSAgICBpbnQgcmVtYWluaW5nOwotICAgIGNoYXIgKnJlYWRfYnVmOwotI2VuZGlmCiAKICAgICBpZiAoIUlTX1NFTEVDVEFCTEUocykpIHsKICAgICAgICAgc2VsZWN0X2Vycm9yKCk7CkBAIC0yNjA5LDEyICsyNTg4LDE4IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotI2lmbmRlZiBfX1ZNUwogICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCiAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwotICAgIGlmICghdGltZW91dCkKKyAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgb3V0bGVuID0gcmVjdihzLT5zb2NrX2ZkLCBjYnVmLCAoaW50KWxlbiwgZmxhZ3MpOworI2Vsc2UKICAgICAgICAgb3V0bGVuID0gcmVjdihzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzKTsKKyNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewpAQCAtMjYyOCw0OCArMjYxMyw2IEBACiAgICAgICAgIHMtPmVycm9yaGFuZGxlcigpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotI2Vsc2UKLSAgICByZWFkX2J1ZiA9IGNidWY7Ci0gICAgcmVtYWluaW5nID0gbGVuOwotICAgIHdoaWxlIChyZW1haW5pbmcgIT0gMCkgewotICAgICAgICB1bnNpZ25lZCBpbnQgc2VnbWVudDsKLSAgICAgICAgaW50IG5yZWFkID0gLTE7Ci0KLSAgICAgICAgc2VnbWVudCA9IHJlbWFpbmluZyAvU0VHTUVOVF9TSVpFOwotICAgICAgICBpZiAoc2VnbWVudCAhPSAwKSB7Ci0gICAgICAgICAgICBzZWdtZW50ID0gU0VHTUVOVF9TSVpFOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgc2VnbWVudCA9IHJlbWFpbmluZzsKLSAgICAgICAgfQotCi0gICAgICAgIEJFR0lOX1NFTEVDVF9MT09QKHMpCi0gICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAwLCBpbnRlcnZhbCk7Ci0gICAgICAgIGlmICghdGltZW91dCkKLSAgICAgICAgICAgIG5yZWFkID0gcmVjdihzLT5zb2NrX2ZkLCByZWFkX2J1Ziwgc2VnbWVudCwgZmxhZ3MpOwotICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwotICAgICAgICBpZiAodGltZW91dCA9PSAxKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoc29ja2V0X3RpbWVvdXQsICJ0aW1lZCBvdXQiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBFTkRfU0VMRUNUX0xPT1AocykKLQotICAgICAgICBpZiAobnJlYWQgPCAwKSB7Ci0gICAgICAgICAgICBzLT5lcnJvcmhhbmRsZXIoKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBpZiAobnJlYWQgIT0gcmVtYWluaW5nKSB7Ci0gICAgICAgICAgICByZWFkX2J1ZiArPSBucmVhZDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVtYWluaW5nIC09IHNlZ21lbnQ7Ci0gICAgICAgIHJlYWRfYnVmICs9IHNlZ21lbnQ7Ci0gICAgfQotICAgIG91dGxlbiA9IHJlYWRfYnVmIC0gY2J1ZjsKLSNlbmRpZiAvKiAhX19WTVMgKi8KLQogICAgIHJldHVybiBvdXRsZW47CiB9CiAKQEAgLTI4MjAsMTQgKzI3NjMsMTEgQEAKICAgICBtZW1zZXQoJmFkZHJidWYsIDAsIGFkZHJsZW4pOwogICAgIHRpbWVvdXQgPSBpbnRlcm5hbF9zZWxlY3RfZXgocywgMCwgaW50ZXJ2YWwpOwogICAgIGlmICghdGltZW91dCkgewotI2lmbmRlZiBNU19XSU5ET1dTCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCBsZW4sIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgJmFkZHJsZW4pOwotI2Vsc2UKLSAgICAgICAgbiA9IHJlY3Zmcm9tKHMtPnNvY2tfZmQsIGNidWYsIGxlbiwgZmxhZ3MsCisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgIG4gPSByZWN2ZnJvbShzLT5zb2NrX2ZkLCBjYnVmLCAoaW50KWxlbiwgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSAmYWRkcmJ1ZiwgJmFkZHJsZW4pOwotI2VuZGlmCiAjZWxzZQogICAgICAgICBuID0gcmVjdmZyb20ocy0+c29ja19mZCwgY2J1ZiwgbGVuLCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgIFNBUzJTQSgmYWRkcmJ1ZiksICZhZGRybGVuKTsKQEAgLTMzMDksMTIgKzMyNDksMTUgQEAKICAgICBCRUdJTl9TRUxFQ1RfTE9PUChzKQogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICB0aW1lb3V0ID0gaW50ZXJuYWxfc2VsZWN0X2V4KHMsIDEsIGludGVydmFsKTsKLSAgICBpZiAoIXRpbWVvdXQpCi0jaWZkZWYgX19WTVMKLSAgICAgICAgbiA9IHNlbmRzZWdtZW50ZWQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKKyAgICBpZiAoIXRpbWVvdXQpIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIGlmIChsZW4gPiBJTlRfTUFYKQorICAgICAgICAgICAgbGVuID0gSU5UX01BWDsKKyAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MpOwogI2Vsc2UKICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKICNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIGlmICh0aW1lb3V0ID09IDEpIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcGJ1Zik7CkBAIC0zMzYyLDggKzMzMDUsMTAgQEAKICAgICAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdChzLCAxKTsKICAgICAgICAgbiA9IC0xOwogICAgICAgICBpZiAoIXRpbWVvdXQpIHsKLSNpZmRlZiBfX1ZNUwotICAgICAgICAgICAgbiA9IHNlbmRzZWdtZW50ZWQocy0+c29ja19mZCwgYnVmLCBsZW4sIGZsYWdzKTsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgICAgICBsZW4gPSBJTlRfTUFYOworICAgICAgICAgICAgbiA9IHNlbmQocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MpOwogI2Vsc2UKICAgICAgICAgICAgIG4gPSBzZW5kKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncyk7CiAjZW5kaWYKQEAgLTM0MjEsNyArMzM2Niw4IEBACiAgICAgY2hhciAqYnVmOwogICAgIFB5X3NzaXplX3QgbGVuLCBhcmdsZW47CiAgICAgc29ja19hZGRyX3QgYWRkcmJ1ZjsKLSAgICBpbnQgYWRkcmxlbiwgbiA9IC0xLCBmbGFncywgdGltZW91dDsKKyAgICBpbnQgYWRkcmxlbiwgZmxhZ3MsIHRpbWVvdXQ7CisgICAgUHlfc3NpemVfdCBuID0gLTE7CiAKICAgICBmbGFncyA9IDA7CiAgICAgYXJnbGVuID0gUHlUdXBsZV9TaXplKGFyZ3MpOwpAQCAtMzQ1OCw4ICszNDA0LDE3IEBACiAgICAgQkVHSU5fU0VMRUNUX0xPT1AocykKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgdGltZW91dCA9IGludGVybmFsX3NlbGVjdF9leChzLCAxLCBpbnRlcnZhbCk7Ci0gICAgaWYgKCF0aW1lb3V0KQotICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncywgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CisgICAgaWYgKCF0aW1lb3V0KSB7CisjaWZkZWYgTVNfV0lORE9XUworICAgICAgICBpZiAobGVuID4gSU5UX01BWCkKKyAgICAgICAgICAgIGxlbiA9IElOVF9NQVg7CisgICAgICAgIG4gPSBzZW5kdG8ocy0+c29ja19mZCwgYnVmLCAoaW50KWxlbiwgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgU0FTMlNBKCZhZGRyYnVmKSwgYWRkcmxlbik7CisjZWxzZQorICAgICAgICBuID0gc2VuZHRvKHMtPnNvY2tfZmQsIGJ1ZiwgbGVuLCBmbGFncywKKyAgICAgICAgICAgICAgICAgICBTQVMyU0EoJmFkZHJidWYpLCBhZGRybGVuKTsKKyNlbmRpZgorICAgIH0KICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCiAgICAgaWYgKHRpbWVvdXQgPT0gMSkgewpAQCAtMzUzOSw3ICszNDk0LDcgQEAKICAgICBmb3IgKDsgbmRhdGFidWZzIDwgbmRhdGFwYXJ0czsgbmRhdGFidWZzKyspIHsKICAgICAgICAgaWYgKCFQeUFyZ19QYXJzZShQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oZGF0YV9mYXN0LCBuZGF0YWJ1ZnMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICJ5KjtzZW5kbXNnKCkgYXJndW1lbnQgMSBtdXN0IGJlIGFuIGl0ZXJhYmxlIG9mICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyLWNvbXBhdGlibGUgb2JqZWN0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJ5dGVzLWxpa2Ugb2JqZWN0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGFidWZzW25kYXRhYnVmc10pKQogICAgICAgICAgICAgZ290byBmaW5hbGx5OwogICAgICAgICBpb3ZzW25kYXRhYnVmc10uaW92X2Jhc2UgPSBkYXRhYnVmc1tuZGF0YWJ1ZnNdLmJ1ZjsKQEAgLTM2OTYsMTIgKzM2NTEsMTIgQEAKIFNlbmQgbm9ybWFsIGFuZCBhbmNpbGxhcnkgZGF0YSB0byB0aGUgc29ja2V0LCBnYXRoZXJpbmcgdGhlXG5cCiBub24tYW5jaWxsYXJ5IGRhdGEgZnJvbSBhIHNlcmllcyBvZiBidWZmZXJzIGFuZCBjb25jYXRlbmF0aW5nIGl0IGludG9cblwKIGEgc2luZ2xlIG1lc3NhZ2UuICBUaGUgYnVmZmVycyBhcmd1bWVudCBzcGVjaWZpZXMgdGhlIG5vbi1hbmNpbGxhcnlcblwKLWRhdGEgYXMgYW4gaXRlcmFibGUgb2YgYnVmZmVyLWNvbXBhdGlibGUgb2JqZWN0cyAoZS5nLiBieXRlcyBvYmplY3RzKS5cblwKK2RhdGEgYXMgYW4gaXRlcmFibGUgb2YgYnl0ZXMtbGlrZSBvYmplY3RzIChlLmcuIGJ5dGVzIG9iamVjdHMpLlxuXAogVGhlIGFuY2RhdGEgYXJndW1lbnQgc3BlY2lmaWVzIHRoZSBhbmNpbGxhcnkgZGF0YSAoY29udHJvbCBtZXNzYWdlcylcblwKIGFzIGFuIGl0ZXJhYmxlIG9mIHplcm8gb3IgbW9yZSB0dXBsZXMgKGNtc2dfbGV2ZWwsIGNtc2dfdHlwZSxcblwKIGNtc2dfZGF0YSksIHdoZXJlIGNtc2dfbGV2ZWwgYW5kIGNtc2dfdHlwZSBhcmUgaW50ZWdlcnMgc3BlY2lmeWluZyB0aGVcblwKIHByb3RvY29sIGxldmVsIGFuZCBwcm90b2NvbC1zcGVjaWZpYyB0eXBlIHJlc3BlY3RpdmVseSwgYW5kIGNtc2dfZGF0YVxuXAotaXMgYSBidWZmZXItY29tcGF0aWJsZSBvYmplY3QgaG9sZGluZyB0aGUgYXNzb2NpYXRlZCBkYXRhLiAgVGhlIGZsYWdzXG5cCitpcyBhIGJ5dGVzLWxpa2Ugb2JqZWN0IGhvbGRpbmcgdGhlIGFzc29jaWF0ZWQgZGF0YS4gIFRoZSBmbGFnc1xuXAogYXJndW1lbnQgZGVmYXVsdHMgdG8gMCBhbmQgaGFzIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yIHNlbmQoKS4gIElmXG5cCiBhZGRyZXNzIGlzIHN1cHBsaWVkIGFuZCBub3QgTm9uZSwgaXQgc2V0cyBhIGRlc3RpbmF0aW9uIGFkZHJlc3MgZm9yXG5cCiB0aGUgbWVzc2FnZS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBieXRlcyBvZiBub24tYW5jaWxsYXJ5XG5cCkBAIC0zOTE0LDggKzM4NjksMTMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrX3JlcHIoUHlTb2NrZXRTb2NrT2JqZWN0ICpzKQogeworICAgIGxvbmcgc29ja19mZDsKKyAgICAvKiBPbiBXaW5kb3dzLCB0aGlzIHRlc3QgaXMgbmVlZGVkIGJlY2F1c2UgU09DS0VUX1QgaXMgdW5zaWduZWQgKi8KKyAgICBpZiAocy0+c29ja19mZCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICBzb2NrX2ZkID0gLTE7CisgICAgfQogI2lmIFNJWkVPRl9TT0NLRVRfVCA+IFNJWkVPRl9MT05HCi0gICAgaWYgKHMtPnNvY2tfZmQgPiBMT05HX01BWCkgeworICAgIGVsc2UgaWYgKHMtPnNvY2tfZmQgPiBMT05HX01BWCkgewogICAgICAgICAvKiB0aGlzIGNhbiBvY2N1ciBvbiBXaW42NCwgYW5kIGFjdHVhbGx5IHRoZXJlIGlzIGEgc3BlY2lhbAogICAgICAgICAgICB1Z2x5IHByaW50ZiBmb3JtYXR0ZXIgZm9yIGRlY2ltYWwgcG9pbnRlciBsZW5ndGggaW50ZWdlcgogICAgICAgICAgICBwcmludGluZywgb25seSBib3RoZXIgaWYgbmVjZXNzYXJ5Ki8KQEAgLTM5MjUsOSArMzg4NSwxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAjZW5kaWYKKyAgICBlbHNlCisgICAgICAgIHNvY2tfZmQgPSAobG9uZylzLT5zb2NrX2ZkOwogICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgKICAgICAgICAgIjxzb2NrZXQgb2JqZWN0LCBmZD0lbGQsIGZhbWlseT0lZCwgdHlwZT0lZCwgcHJvdG89JWQ+IiwKLSAgICAgICAgKGxvbmcpcy0+c29ja19mZCwgcy0+c29ja19mYW1pbHksCisgICAgICAgIHNvY2tfZmQsIHMtPnNvY2tfZmFtaWx5LAogICAgICAgICBzLT5zb2NrX3R5cGUsCiAgICAgICAgIHMtPnNvY2tfcHJvdG8pOwogfQpAQCAtMzk1Miw2ICszOTE0LDEyIEBACiAKIC8qIEluaXRpYWxpemUgYSBuZXcgc29ja2V0IG9iamVjdC4gKi8KIAorI2lmZGVmIFNPQ0tfQ0xPRVhFQworLyogc29ja2V0KCkgYW5kIHNvY2tldHBhaXIoKSBmYWlsIHdpdGggRUlOVkFMIG9uIExpbnV4IGtlcm5lbCBvbGRlcgorICogdGhhbiAyLjYuMjcgaWYgU09DS19DTE9FWEVDIGZsYWcgaXMgc2V0IGluIHRoZSBzb2NrZXQgdHlwZS4gKi8KK3N0YXRpYyBpbnQgc29ja19jbG9leGVjX3dvcmtzID0gLTE7CisjZW5kaWYKKwogLypBUkdTVVNFRCovCiBzdGF0aWMgaW50CiBzb2NrX2luaXRvYmooUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKQEAgLTM5NjEsNiArMzkyOSwxMyBAQAogICAgIFNPQ0tFVF9UIGZkID0gSU5WQUxJRF9TT0NLRVQ7CiAgICAgaW50IGZhbWlseSA9IEFGX0lORVQsIHR5cGUgPSBTT0NLX1NUUkVBTSwgcHJvdG8gPSAwOwogICAgIHN0YXRpYyBjaGFyICprZXl3b3Jkc1tdID0geyJmYW1pbHkiLCAidHlwZSIsICJwcm90byIsICJmaWxlbm8iLCAwfTsKKyNpZm5kZWYgTVNfV0lORE9XUworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmc29ja19jbG9leGVjX3dvcmtzOworI2Vsc2UKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorI2VuZGlmCiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ8aWlpTzpzb2NrZXQiLCBrZXl3b3JkcywKQEAgLTQwMDUsMTQgKzM5ODAsNzQgQEAKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgICAgIC8qIFdpbmRvd3MgaW1wbGVtZW50YXRpb24gKi8KKyNpZm5kZWYgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQKKyNkZWZpbmUgV1NBX0ZMQUdfTk9fSEFORExFX0lOSEVSSVQgMHg4MAorI2VuZGlmCisKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwotICAgICAgICBmZCA9IHNvY2tldChmYW1pbHksIHR5cGUsIHByb3RvKTsKKyAgICAgICAgaWYgKHN1cHBvcnRfd3NhX25vX2luaGVyaXQpIHsKKyAgICAgICAgICAgIGZkID0gV1NBU29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NBX0ZMQUdfT1ZFUkxBUFBFRCB8IFdTQV9GTEFHX05PX0hBTkRMRV9JTkhFUklUKTsKKyAgICAgICAgICAgIGlmIChmZCA9PSBJTlZBTElEX1NPQ0tFVCkgeworICAgICAgICAgICAgICAgIC8qIFdpbmRvd3MgNyBvciBXaW5kb3dzIDIwMDggUjIgd2l0aG91dCBTUDEgb3IgdGhlIGhvdGZpeCAqLworICAgICAgICAgICAgICAgIHN1cHBvcnRfd3NhX25vX2luaGVyaXQgPSAwOworICAgICAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgIH0KICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKIAogICAgICAgICBpZiAoZmQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKICAgICAgICAgICAgIHNldF9lcnJvcigpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CisKKyAgICAgICAgaWYgKCFzdXBwb3J0X3dzYV9ub19pbmhlcml0KSB7CisgICAgICAgICAgICBpZiAoIVNldEhhbmRsZUluZm9ybWF0aW9uKChIQU5ETEUpZmQsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIDApKSB7CisgICAgICAgICAgICAgICAgY2xvc2Vzb2NrZXQoZmQpOworICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgLyogVU5JWCAqLworICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgICAgIGlmIChzb2NrX2Nsb2V4ZWNfd29ya3MgIT0gMCkgeworICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlIHwgU09DS19DTE9FWEVDLCBwcm90byk7CisgICAgICAgICAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICAgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgc29ja19jbG9leGVjX3dvcmtzID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRUlOVkFMKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIExpbnV4IG9sZGVyIHRoYW4gMi42LjI3IGRvZXMgbm90IHN1cHBvcnQgU09DS19DTE9FWEVDICovCisgICAgICAgICAgICAgICAgICAgIHNvY2tfY2xvZXhlY193b3JrcyA9IDA7CisgICAgICAgICAgICAgICAgICAgIGZkID0gc29ja2V0KGZhbWlseSwgdHlwZSwgcHJvdG8pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgZmQgPSBzb2NrZXQoZmFtaWx5LCB0eXBlLCBwcm90byk7CisgICAgICAgIH0KKyAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKworICAgICAgICBpZiAoZmQgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKyAgICAgICAgICAgIHNldF9lcnJvcigpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoZmQsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgICAgIFNPQ0tFVENMT1NFKGZkKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgfQogICAgIGluaXRfc29ja29iamVjdChzLCBmZCwgZmFtaWx5LCB0eXBlLCBwcm90byk7CiAKQEAgLTQwOTIsOSArNDEyNywxMSBAQAogCiAgICAgLyogTVNETiBzYXlzIEVSUk9SX01PUkVfREFUQSBtYXkgb2NjdXIgYmVjYXVzZSBETlMgYWxsb3dzIGxvbmdlcgogICAgICAgIG5hbWVzICovCi0gICAgbmFtZSA9IFB5TWVtX01hbGxvYyhzaXplICogc2l6ZW9mKHdjaGFyX3QpKTsKLSAgICBpZiAoIW5hbWUpCisgICAgbmFtZSA9IFB5TWVtX05ldyh3Y2hhcl90LCBzaXplKTsKKyAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGlmICghR2V0Q29tcHV0ZXJOYW1lRXhXKENvbXB1dGVyTmFtZVBoeXNpY2FsRG5zSG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNpemUpKQpAQCAtNDU3OCwxNiArNDYxNSwzNiBAQAogewogICAgIFNPQ0tFVF9UIGZkLCBuZXdmZDsKICAgICBQeU9iamVjdCAqbmV3ZmRvYmo7Ci0KKyNpZmRlZiBNU19XSU5ET1dTCisgICAgV1NBUFJPVE9DT0xfSU5GTyBpbmZvOworI2VuZGlmCiAKICAgICBmZCA9IFB5TG9uZ19Bc1NvY2tldF90KGZkb2JqKTsKICAgICBpZiAoZmQgPT0gKFNPQ0tFVF9UKSgtMSkgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBuZXdmZCA9IGR1cF9zb2NrZXQoZmQpOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoV1NBRHVwbGljYXRlU29ja2V0KGZkLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCksICZpbmZvKSkKKyAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworCisgICAgbmV3ZmQgPSBXU0FTb2NrZXQoRlJPTV9QUk9UT0NPTF9JTkZPLCBGUk9NX1BST1RPQ09MX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgRlJPTV9QUk9UT0NPTF9JTkZPLAorICAgICAgICAgICAgICAgICAgICAgICZpbmZvLCAwLCBXU0FfRkxBR19PVkVSTEFQUEVEKTsKICAgICBpZiAobmV3ZmQgPT0gSU5WQUxJRF9TT0NLRVQpCiAgICAgICAgIHJldHVybiBzZXRfZXJyb3IoKTsKIAorICAgIGlmICghU2V0SGFuZGxlSW5mb3JtYXRpb24oKEhBTkRMRSluZXdmZCwgSEFORExFX0ZMQUdfSU5IRVJJVCwgMCkpIHsKKyAgICAgICAgY2xvc2Vzb2NrZXQobmV3ZmQpOworICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorI2Vsc2UKKyAgICAvKiBPbiBVTklYLCBkdXAgY2FuIGJlIHVzZWQgdG8gZHVwbGljYXRlIHRoZSBmaWxlIGRlc2NyaXB0b3Igb2YgYSBzb2NrZXQgKi8KKyAgICBuZXdmZCA9IF9QeV9kdXAoZmQpOworICAgIGlmIChuZXdmZCA9PSBJTlZBTElEX1NPQ0tFVCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYKKwogICAgIG5ld2Zkb2JqID0gUHlMb25nX0Zyb21Tb2NrZXRfdChuZXdmZCk7CiAgICAgaWYgKG5ld2Zkb2JqID09IE5VTEwpCiAgICAgICAgIFNPQ0tFVENMT1NFKG5ld2ZkKTsKQEAgLTQ2MTUsNiArNDY3MiwxMiBAQAogICAgIFNPQ0tFVF9UIHN2WzJdOwogICAgIGludCBmYW1pbHksIHR5cGUgPSBTT0NLX1NUUkVBTSwgcHJvdG8gPSAwOwogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworI2lmZGVmIFNPQ0tfQ0xPRVhFQworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3MgPSAmc29ja19jbG9leGVjX3dvcmtzOworI2Vsc2UKKyAgICBpbnQgKmF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorICAgIGludCByZXQ7CiAKICNpZiBkZWZpbmVkKEFGX1VOSVgpCiAgICAgZmFtaWx5ID0gQUZfVU5JWDsKQEAgLTQ2MjQsOSArNDY4NywzOCBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGlpaTpzb2NrZXRwYWlyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZhbWlseSwgJnR5cGUsICZwcm90bykpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgLyogQ3JlYXRlIGEgcGFpciBvZiBzb2NrZXQgZmRzICovCi0gICAgaWYgKHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpIDwgMCkKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisjaWZkZWYgU09DS19DTE9FWEVDCisgICAgaWYgKHNvY2tfY2xvZXhlY193b3JrcyAhPSAwKSB7CisgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlIHwgU09DS19DTE9FWEVDLCBwcm90bywgc3YpOworICAgICAgICBpZiAoc29ja19jbG9leGVjX3dvcmtzID09IC0xKSB7CisgICAgICAgICAgICBpZiAocmV0ID49IDApIHsKKyAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoZXJybm8gPT0gRUlOVkFMKSB7CisgICAgICAgICAgICAgICAgLyogTGludXggb2xkZXIgdGhhbiAyLjYuMjcgZG9lcyBub3Qgc3VwcG9ydCBTT0NLX0NMT0VYRUMgKi8KKyAgICAgICAgICAgICAgICBzb2NrX2Nsb2V4ZWNfd29ya3MgPSAwOworICAgICAgICAgICAgICAgIHJldCA9IHNvY2tldHBhaXIoZmFtaWx5LCB0eXBlLCBwcm90bywgc3YpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyNlbmRpZgorICAgIHsKKyAgICAgICAgcmV0ID0gc29ja2V0cGFpcihmYW1pbHksIHR5cGUsIHByb3RvLCBzdik7CisgICAgfQorICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICBpZiAocmV0IDwgMCkKICAgICAgICAgcmV0dXJuIHNldF9lcnJvcigpOworCisgICAgaWYgKF9QeV9zZXRfaW5oZXJpdGFibGUoc3ZbMF0sIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApCisgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShzdlsxXSwgMCwgYXRvbWljX2ZsYWdfd29ya3MpIDwgMCkKKyAgICAgICAgZ290byBmaW5hbGx5OworCiAgICAgczAgPSBuZXdfc29ja29iamVjdChzdlswXSwgZmFtaWx5LCB0eXBlLCBwcm90byk7CiAgICAgaWYgKHMwID09IE5VTEwpCiAgICAgICAgIGdvdG8gZmluYWxseTsKQEAgLTQ2NDgsNyArNDc0MCw3IEBACiB9CiAKIFB5RG9jX1NUUlZBUihzb2NrZXRwYWlyX2RvYywKLSJzb2NrZXRwYWlyKFtmYW1pbHlbLCB0eXBlWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KVxuXAorInNvY2tldHBhaXIoW2ZhbWlseVssIHR5cGUgWywgcHJvdG9dXV0pIC0+IChzb2NrZXQgb2JqZWN0LCBzb2NrZXQgb2JqZWN0KVxuXAogXG5cCiBDcmVhdGUgYSBwYWlyIG9mIHNvY2tldCBvYmplY3RzIGZyb20gdGhlIHNvY2tldHMgcmV0dXJuZWQgYnkgdGhlIHBsYXRmb3JtXG5cCiBzb2NrZXRwYWlyKCkgZnVuY3Rpb24uXG5cCkBAIC00NzgyLDkgKzQ4NzQsNiBAQAogc3RhdGljIFB5T2JqZWN0Kgogc29ja2V0X2luZXRfYXRvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0jaWZuZGVmIElOQUREUl9OT05FCi0jZGVmaW5lIElOQUREUl9OT05FICgtMSkKLSNlbmRpZgogI2lmZGVmIEhBVkVfSU5FVF9BVE9OCiAgICAgc3RydWN0IGluX2FkZHIgYnVmOwogI2VuZGlmCkBAIC00ODI2LDcgKzQ5MTUsNyBAQAogICAgIC8qIHNwZWNpYWwtY2FzZSB0aGlzIGFkZHJlc3MgYXMgaW5ldF9hZGRyIG1pZ2h0IHJldHVybiBJTkFERFJfTk9ORQogICAgICAqIGZvciB0aGlzICovCiAgICAgaWYgKHN0cmNtcChpcF9hZGRyLCAiMjU1LjI1NS4yNTUuMjU1IikgPT0gMCkgewotICAgICAgICBwYWNrZWRfYWRkciA9IDB4RkZGRkZGRkY7CisgICAgICAgIHBhY2tlZF9hZGRyID0gSU5BRERSX0JST0FEQ0FTVDsKICAgICB9IGVsc2UgewogCiAgICAgICAgIHBhY2tlZF9hZGRyID0gaW5ldF9hZGRyKGlwX2FkZHIpOwpAQCAtNDg3NCw3ICs0OTYzLDcgQEAKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoaW5ldF9udG9hKHBhY2tlZF9hZGRyKSk7CiB9CiAKLSNpZmRlZiBIQVZFX0lORVRfUFRPTgorI2lmIGRlZmluZWQoSEFWRV9JTkVUX1BUT04pIHx8IGRlZmluZWQoTVNfV0lORE9XUykKIAogUHlEb2NfU1RSVkFSKGluZXRfcHRvbl9kb2MsCiAiaW5ldF9wdG9uKGFmLCBpcCkgLT4gcGFja2VkIElQIGFkZHJlc3Mgc3RyaW5nXG5cCkBAIC00ODgyLDYgKzQ5NzEsMTAgQEAKIENvbnZlcnQgYW4gSVAgYWRkcmVzcyBmcm9tIHN0cmluZyBmb3JtYXQgdG8gYSBwYWNrZWQgc3RyaW5nIHN1aXRhYmxlXG5cCiBmb3IgdXNlIHdpdGggbG93LWxldmVsIG5ldHdvcmsgZnVuY3Rpb25zLiIpOwogCisjZW5kaWYKKworI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisKIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrZXRfaW5ldF9wdG9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTQ4ODksNyArNDk4Miw3IEBACiAgICAgY2hhciogaXA7CiAgICAgaW50IHJldHZhbDsKICNpZmRlZiBFTkFCTEVfSVBWNgotICAgIGNoYXIgcGFja2VkW01BWChzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSldOworICAgIGNoYXIgcGFja2VkW1B5X01BWChzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSldOwogI2Vsc2UKICAgICBjaGFyIHBhY2tlZFtzaXplb2Yoc3RydWN0IGluX2FkZHIpXTsKICNlbmRpZgpAQCAtNDkyNiwxMiArNTAxOSw1MiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiB9CisjZWxpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCisKK3N0YXRpYyBQeU9iamVjdCAqCitzb2NrZXRfaW5ldF9wdG9uKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICBpbnQgYWY7CisgICAgY2hhciogaXA7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworICAgIElOVCByZXQsIHNpemU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlzOmluZXRfcHRvbiIsICZhZiwgJmlwKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzaXplID0gc2l6ZW9mKGFkZHIpOworICAgIHJldCA9IFdTQVN0cmluZ1RvQWRkcmVzc0EoaXAsIGFmLCBOVUxMLCAoTFBTT0NLQUREUikmYWRkciwgJnNpemUpOworCisgICAgaWYgKHJldCkgeworICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeUV4Y19PU0Vycm9yLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSBpZihhZiA9PSBBRl9JTkVUKSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkcjQgPSAoc3RydWN0IHNvY2thZGRyX2luKikmYWRkcjsKKyAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNvbnN0IGNoYXIgKikmKGFkZHI0LT5zaW5fYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhZGRyNC0+c2luX2FkZHIpKTsKKyAgICB9IGVsc2UgaWYgKGFmID09IEFGX0lORVQ2KSB7CisgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKChjb25zdCBjaGFyICopJihhZGRyLnNpbjZfYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRkci5zaW42X2FkZHIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT1NFcnJvciwgInVua25vd24gYWRkcmVzcyBmYW1pbHkiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9JTkVUX1BUT04pIHx8IGRlZmluZWQoTVNfV0lORE9XUykKIAogUHlEb2NfU1RSVkFSKGluZXRfbnRvcF9kb2MsCiAiaW5ldF9udG9wKGFmLCBwYWNrZWRfaXApIC0+IHN0cmluZyBmb3JtYXR0ZWQgSVAgYWRkcmVzc1xuXAogXG5cCiBDb252ZXJ0IGEgcGFja2VkIElQIGFkZHJlc3Mgb2YgdGhlIGdpdmVuIGZhbWlseSB0byBzdHJpbmcgZm9ybWF0LiIpOwogCisjZW5kaWYKKworCisjaWZkZWYgSEFWRV9JTkVUX1BUT04KIHN0YXRpYyBQeU9iamVjdCAqCiBzb2NrZXRfaW5ldF9udG9wKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKQEAgLTQ5NDAsNyArNTA3Myw3IEBACiAgICAgaW50IGxlbjsKICAgICBjb25zdCBjaGFyKiByZXR2YWw7CiAjaWZkZWYgRU5BQkxFX0lQVjYKLSAgICBjaGFyIGlwW01BWChJTkVUX0FERFJTVFJMRU4sIElORVQ2X0FERFJTVFJMRU4pICsgMV07CisgICAgY2hhciBpcFtQeV9NQVgoSU5FVF9BRERSU1RSTEVOLCBJTkVUNl9BRERSU1RSTEVOKSArIDFdOwogI2Vsc2UKICAgICBjaGFyIGlwW0lORVRfQUREUlNUUkxFTiArIDFdOwogI2VuZGlmCkBAIC00OTg1LDYgKzUxMTgsNzAgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorI2VsaWYgZGVmaW5lZChNU19XSU5ET1dTKQorCitzdGF0aWMgUHlPYmplY3QgKgorc29ja2V0X2luZXRfbnRvcChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaW50IGFmOworICAgIGNoYXIqIHBhY2tlZDsKKyAgICBpbnQgbGVuOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAgICBEV09SRCBhZGRybGVuLCByZXQsIHJldGxlbjsKKyNpZmRlZiBFTkFCTEVfSVBWNgorICAgIGNoYXIgaXBbUHlfTUFYKElORVRfQUREUlNUUkxFTiwgSU5FVDZfQUREUlNUUkxFTikgKyAxXTsKKyNlbHNlCisgICAgY2hhciBpcFtJTkVUX0FERFJTVFJMRU4gKyAxXTsKKyNlbmRpZgorCisgICAgLyogR3VhcmFudGVlIE5VTC10ZXJtaW5hdGlvbiBmb3IgUHlVbmljb2RlX0Zyb21TdHJpbmcoKSBiZWxvdyAqLworICAgIG1lbXNldCgodm9pZCAqKSAmaXBbMF0sICdcMCcsIHNpemVvZihpcCkpOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJpeSM6aW5ldF9udG9wIiwgJmFmLCAmcGFja2VkLCAmbGVuKSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoYWYgPT0gQUZfSU5FVCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBhZGRyNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikmYWRkcjsKKworICAgICAgICBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICJpbnZhbGlkIGxlbmd0aCBvZiBwYWNrZWQgSVAgYWRkcmVzcyBzdHJpbmciKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbXNldChhZGRyNCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgICAgICBhZGRyNC0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIG1lbWNweSgmKGFkZHI0LT5zaW5fYWRkciksIHBhY2tlZCwgc2l6ZW9mKGFkZHI0LT5zaW5fYWRkcikpOworICAgICAgICBhZGRybGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgfSBlbHNlIGlmIChhZiA9PSBBRl9JTkVUNikgeworICAgICAgICBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAiaW52YWxpZCBsZW5ndGggb2YgcGFja2VkIElQIGFkZHJlc3Mgc3RyaW5nIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKGFkZHIpKTsKKyAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBtZW1jcHkoJihhZGRyLnNpbjZfYWRkciksIHBhY2tlZCwgc2l6ZW9mKGFkZHIuc2luNl9hZGRyKSk7CisgICAgICAgIGFkZHJsZW4gPSBzaXplb2YoYWRkcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAidW5rbm93biBhZGRyZXNzIGZhbWlseSAlZCIsIGFmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0bGVuID0gc2l6ZW9mKGlwKTsKKyAgICByZXQgPSBXU0FBZGRyZXNzVG9TdHJpbmdBKChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyLCBhZGRybGVuLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAsICZyZXRsZW4pOworCisgICAgaWYgKHJldCkgeworICAgICAgICBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycihQeUV4Y19PU0Vycm9yLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhpcCk7CisgICAgfQorfQorCiAjZW5kaWYgLyogSEFWRV9JTkVUX1BUT04gKi8KIAogLyogUHl0aG9uIGludGVyZmFjZSB0byBnZXRhZGRyaW5mbyhob3N0LCBwb3J0KS4gKi8KQEAgLTUwMDYsNyArNTIwMyw3IEBACiAgICAgUHlPYmplY3QgKmFsbCA9IChQeU9iamVjdCAqKU5VTEw7CiAgICAgUHlPYmplY3QgKmlkbmEgPSBOVUxMOwogCi0gICAgZmFtaWx5ID0gc29ja3R5cGUgPSBwcm90b2NvbCA9IGZsYWdzID0gMDsKKyAgICBzb2NrdHlwZSA9IHByb3RvY29sID0gZmxhZ3MgPSAwOwogICAgIGZhbWlseSA9IEFGX1VOU1BFQzsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJPT3xpaWlpOmdldGFkZHJpbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAga3duYW1lcywgJmhvYmosICZwb2JqLCAmZmFtaWx5LCAmc29ja3R5cGUsCkBAIC01MDE2LDkgKzUyMTMsNyBAQAogICAgIGlmIChob2JqID09IFB5X05vbmUpIHsKICAgICAgICAgaHB0ciA9IE5VTEw7CiAgICAgfSBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soaG9iaikpIHsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZW5jb2RlKTsKLQotICAgICAgICBpZG5hID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChob2JqLCAmUHlJZF9lbmNvZGUsICJzIiwgImlkbmEiKTsKKyAgICAgICAgaWRuYSA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcoaG9iaiwgImlkbmEiLCBOVUxMKTsKICAgICAgICAgaWYgKCFpZG5hKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrKGlkbmEpKTsKQEAgLTUwNTEsOSArNTI0Niw5IEBACiAjaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoQUlfTlVNRVJJQ1NFUlYpCiAgICAgaWYgKChmbGFncyAmIEFJX05VTUVSSUNTRVJWKSAmJiAocHB0ciA9PSBOVUxMIHx8IChwcHRyWzBdID09ICcwJyAmJiBwcHRyWzFdID09IDApKSkgewogICAgICAgICAvKiBPbiBPU1ggdXB0byBhdCBsZWFzdCBPU1ggMTAuOCBnZXRhZGRyaW5mbyBjcmFzaGVzCi0JICogaWYgQUlfTlVNRVJJQ1NFUlYgaXMgc2V0IGFuZCB0aGUgc2Vydm5hbWUgaXMgTlVMTCBvciAiMCIuCi0JICogVGhpcyB3b3JrYXJvdW5kIGF2b2lkcyBhIHNlZ2ZhdWx0IGluIGxpYnN5c3RlbS4KLQkgKi8KKyAgICAgICAgICogaWYgQUlfTlVNRVJJQ1NFUlYgaXMgc2V0IGFuZCB0aGUgc2Vydm5hbWUgaXMgTlVMTCBvciAiMCIuCisgICAgICAgICAqIFRoaXMgd29ya2Fyb3VuZCBhdm9pZHMgYSBzZWdmYXVsdCBpbiBsaWJzeXN0ZW0uCisgICAgICAgICAqLwogICAgICAgICBwcHRyID0gIjAwIjsKICAgICB9CiAjZW5kaWYKQEAgLTUwNzIsNyArNTI2Nyw4IEBACiAgICAgICAgIGdvdG8gZXJyOwogICAgIH0KIAotICAgIGlmICgoYWxsID0gUHlMaXN0X05ldygwKSkgPT0gTlVMTCkKKyAgICBhbGwgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChhbGwgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnI7CiAgICAgZm9yIChyZXMgPSByZXMwOyByZXM7IHJlcyA9IHJlcy0+YWlfbmV4dCkgewogICAgICAgICBQeU9iamVjdCAqc2luZ2xlOwpAQCAtNTEwNSw4ICs1MzAxLDggQEAKIH0KIAogUHlEb2NfU1RSVkFSKGdldGFkZHJpbmZvX2RvYywKLSJnZXRhZGRyaW5mbyhob3N0LCBwb3J0IFssIGZhbWlseSwgc29ja3R5cGUsIHByb3RvLCBmbGFnc10pXG5cCi0gICAgLT4gbGlzdCBvZiAoZmFtaWx5LCBzb2NrdHlwZSwgcHJvdG8sIGNhbm9ubmFtZSwgc29ja2FkZHIpXG5cCisiZ2V0YWRkcmluZm8oaG9zdCwgcG9ydCBbLCBmYW1pbHksIHR5cGUsIHByb3RvLCBmbGFnc10pXG5cCisgICAgLT4gbGlzdCBvZiAoZmFtaWx5LCB0eXBlLCBwcm90bywgY2Fub25uYW1lLCBzb2NrYWRkcilcblwKIFxuXAogUmVzb2x2ZSBob3N0IGFuZCBwb3J0IGludG8gYWRkcmluZm8gc3RydWN0LiIpOwogCkBAIC01NDUxLDcgKzU2NDcsNyBAQAogICAgICBNRVRIX1ZBUkFSR1MsIGluZXRfYXRvbl9kb2N9LAogICAgIHsiaW5ldF9udG9hIiwgICAgICAgICAgICAgICBzb2NrZXRfaW5ldF9udG9hLAogICAgICBNRVRIX1ZBUkFSR1MsIGluZXRfbnRvYV9kb2N9LAotI2lmZGVmIEhBVkVfSU5FVF9QVE9OCisjaWYgZGVmaW5lZChIQVZFX0lORVRfUFRPTikgfHwgZGVmaW5lZChNU19XSU5ET1dTKQogICAgIHsiaW5ldF9wdG9uIiwgICAgICAgICAgICAgICBzb2NrZXRfaW5ldF9wdG9uLAogICAgICBNRVRIX1ZBUkFSR1MsIGluZXRfcHRvbl9kb2N9LAogICAgIHsiaW5ldF9udG9wIiwgICAgICAgICAgICAgICBzb2NrZXRfaW5ldF9udG9wLApAQCAtNTUyNiwzMiArNTcyMiw2IEBACiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAKLSNpZmRlZiBQWU9TX09TMgotI2RlZmluZSBPU19JTklUX0RFRklORUQKLQotLyogQWRkaXRpb25hbCBpbml0aWFsaXphdGlvbiBmb3IgT1MvMiAqLwotCi1zdGF0aWMgaW50Ci1vc19pbml0KHZvaWQpCi17Ci0jaWZuZGVmIFBZQ0NfR0NDCi0gICAgaW50IHJjID0gc29ja19pbml0KCk7Ci0KLSAgICBpZiAocmMgPT0gMCkgewotICAgICAgICByZXR1cm4gMTsgLyogU3VjY2VzcyAqLwotICAgIH0KLQotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19JbXBvcnRFcnJvciwgIk9TLzIgVENQL0lQIEVycm9yIyAlZCIsIHNvY2tfZXJybm8oKSk7Ci0KLSAgICByZXR1cm4gMDsgIC8qIEZhaWx1cmUgKi8KLSNlbHNlCi0gICAgLyogTm8gbmVlZCB0byBpbml0aWFsaXplIHNvY2tldHMgd2l0aCBHQ0MvRU1YICovCi0gICAgcmV0dXJuIDE7IC8qIFN1Y2Nlc3MgKi8KLSNlbmRpZgotfQotCi0jZW5kaWYgLyogUFlPU19PUzIgKi8KLQogCiAjaWZuZGVmIE9TX0lOSVRfREVGSU5FRAogc3RhdGljIGludApAQCAtNTYwOCw2ICs1Nzc4LDE2IEBACiAgICAgaWYgKCFvc19pbml0KCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisjaWZkZWYgTVNfV0lORE9XUworICAgIGlmIChzdXBwb3J0X3dzYV9ub19pbmhlcml0ID09IC0xKSB7CisgICAgICAgIERXT1JEIHZlcnNpb24gPSBHZXRWZXJzaW9uKCk7CisgICAgICAgIERXT1JEIG1ham9yID0gKERXT1JEKUxPQllURShMT1dPUkQodmVyc2lvbikpOworICAgICAgICBEV09SRCBtaW5vciA9IChEV09SRClISUJZVEUoTE9XT1JEKHZlcnNpb24pKTsKKyAgICAgICAgLyogbmVlZCBXaW5kb3dzIDcgU1AxLCAyMDA4IFIyIFNQMSBvciBsYXRlciAqLworICAgICAgICBzdXBwb3J0X3dzYV9ub19pbmhlcml0ID0gKG1ham9yID49IDYgJiYgbWlub3IgPj0gMSk7CisgICAgfQorI2VuZGlmCisKICAgICBQeV9UWVBFKCZzb2NrX3R5cGUpID0gJlB5VHlwZV9UeXBlOwogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnNvY2tldG1vZHVsZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKQEAgLTU2NjEsMTg0ICs1ODQxLDE4NyBAQAogCiAgICAgLyogQWRkcmVzcyBmYW1pbGllcyAod2Ugb25seSBzdXBwb3J0IEFGX0lORVQgYW5kIEFGX1VOSVgpICovCiAjaWZkZWYgQUZfVU5TUEVDCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1VOU1BFQyIsIEFGX1VOU1BFQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfVU5TUEVDKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JTkVUIiwgQUZfSU5FVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSU5FVCk7CiAjaWZkZWYgQUZfSU5FVDYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfSU5FVDYiLCBBRl9JTkVUNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSU5FVDYpOwogI2VuZGlmIC8qIEFGX0lORVQ2ICovCiAjaWYgZGVmaW5lZChBRl9VTklYKQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9VTklYIiwgQUZfVU5JWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfVU5JWCk7CiAjZW5kaWYgLyogQUZfVU5JWCAqLwogI2lmZGVmIEFGX0FYMjUKICAgICAvKiBBbWF0ZXVyIFJhZGlvIEFYLjI1ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0FYMjUiLCBBRl9BWDI1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BWDI1KTsKICNlbmRpZgogI2lmZGVmIEFGX0lQWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9JUFgiLCBBRl9JUFgpOyAvKiBOb3ZlbGwgSVBYICovCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfSVBYKTsgLyogTm92ZWxsIElQWCAqLwogI2VuZGlmCiAjaWZkZWYgQUZfQVBQTEVUQUxLCiAgICAgLyogQXBwbGV0YWxrIEREUCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BUFBMRVRBTEsiLCBBRl9BUFBMRVRBTEspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FQUExFVEFMSyk7CiAjZW5kaWYKICNpZmRlZiBBRl9ORVRST00KICAgICAvKiBBbWF0ZXVyIHJhZGlvIE5ldFJPTSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ORVRST00iLCBBRl9ORVRST00pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX05FVFJPTSk7CiAjZW5kaWYKICNpZmRlZiBBRl9CUklER0UKICAgICAvKiBNdWx0aXByb3RvY29sIGJyaWRnZSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9CUklER0UiLCBBRl9CUklER0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0JSSURHRSk7CiAjZW5kaWYKICNpZmRlZiBBRl9BVE1QVkMKICAgICAvKiBBVE0gUFZDcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BVE1QVkMiLCBBRl9BVE1QVkMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FUTVBWQyk7CiAjZW5kaWYKICNpZmRlZiBBRl9BQUw1CiAgICAgLyogUmVzZXJ2ZWQgZm9yIFdlcm5lcidzIEFUTSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BQUw1IiwgQUZfQUFMNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfQUFMNSk7CiAjZW5kaWYKICNpZmRlZiBBRl9YMjUKICAgICAvKiBSZXNlcnZlZCBmb3IgWC4yNSBwcm9qZWN0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1gyNSIsIEFGX1gyNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfWDI1KTsKICNlbmRpZgogI2lmZGVmIEFGX0lORVQ2Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lORVQ2IiwgQUZfSU5FVDYpOyAvKiBJUCB2ZXJzaW9uIDYgKi8KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JTkVUNik7IC8qIElQIHZlcnNpb24gNiAqLwogI2VuZGlmCiAjaWZkZWYgQUZfUk9TRQogICAgIC8qIEFtYXRldXIgUmFkaW8gWC4yNSBQTFAgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfUk9TRSIsIEFGX1JPU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1JPU0UpOwogI2VuZGlmCiAjaWZkZWYgQUZfREVDbmV0CiAgICAgLyogUmVzZXJ2ZWQgZm9yIERFQ25ldCBwcm9qZWN0ICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0RFQ25ldCIsIEFGX0RFQ25ldCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfREVDbmV0KTsKICNlbmRpZgogI2lmZGVmIEFGX05FVEJFVUkKICAgICAvKiBSZXNlcnZlZCBmb3IgODAyLjJMTEMgcHJvamVjdCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9ORVRCRVVJIiwgQUZfTkVUQkVVSSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTkVUQkVVSSk7CiAjZW5kaWYKICNpZmRlZiBBRl9TRUNVUklUWQogICAgIC8qIFNlY3VyaXR5IGNhbGxiYWNrIHBzZXVkbyBBRiAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9TRUNVUklUWSIsIEFGX1NFQ1VSSVRZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9TRUNVUklUWSk7CiAjZW5kaWYKICNpZmRlZiBBRl9LRVkKICAgICAvKiBQRl9LRVkga2V5IG1hbmFnZW1lbnQgQVBJICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0tFWSIsIEFGX0tFWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfS0VZKTsKICNlbmRpZgogI2lmZGVmIEFGX05FVExJTksKICAgICAvKiAgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTkVUTElOSyIsIEFGX05FVExJTkspOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1JPVVRFIiwgTkVUTElOS19ST1VURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfTkVUTElOSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ST1VURSk7CiAjaWZkZWYgTkVUTElOS19TS0lQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfU0tJUCIsIE5FVExJTktfU0tJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19TS0lQKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfVzEKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19XMSIsIE5FVExJTktfVzEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfVzEpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVVNFUlNPQ0siLCBORVRMSU5LX1VTRVJTT0NLKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19GSVJFV0FMTCIsIE5FVExJTktfRklSRVdBTEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfVVNFUlNPQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfRklSRVdBTEwpOwogI2lmZGVmIE5FVExJTktfVENQRElBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1RDUERJQUciLCBORVRMSU5LX1RDUERJQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfVENQRElBRyk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX05GTE9HCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfTkZMT0ciLCBORVRMSU5LX05GTE9HKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX05GTE9HKTsKICNlbmRpZgogI2lmZGVmIE5FVExJTktfWEZSTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJORVRMSU5LX1hGUk0iLCBORVRMSU5LX1hGUk0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfWEZSTSk7CiAjZW5kaWYKICNpZmRlZiBORVRMSU5LX0FSUEQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19BUlBEIiwgTkVUTElOS19BUlBEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0FSUEQpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19ST1VURTYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ST1VURTYiLCBORVRMSU5LX1JPVVRFNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19ST1VURTYpOwogI2VuZGlmCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfSVA2X0ZXIiwgTkVUTElOS19JUDZfRlcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5FVExJTktfSVA2X0ZXKTsKICNpZmRlZiBORVRMSU5LX0ROUlRNU0cKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTkVUTElOS19ETlJUTVNHIiwgTkVUTElOS19ETlJUTVNHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBORVRMSU5LX0ROUlRNU0cpOwogI2VuZGlmCiAjaWZkZWYgTkVUTElOS19UQVBCQVNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5FVExJTktfVEFQQkFTRSIsIE5FVExJTktfVEFQQkFTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTkVUTElOS19UQVBCQVNFKTsKICNlbmRpZgogI2VuZGlmIC8qIEFGX05FVExJTksgKi8KICNpZmRlZiBBRl9ST1VURQogICAgIC8qIEFsaWFzIHRvIGVtdWxhdGUgNC40QlNEICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX1JPVVRFIiwgQUZfUk9VVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1JPVVRFKTsKKyNlbmRpZgorI2lmZGVmIEFGX0xJTksKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9MSU5LKTsKICNlbmRpZgogI2lmZGVmIEFGX0FTSAogICAgIC8qIEFzaCAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9BU0giLCBBRl9BU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0FTSCk7CiAjZW5kaWYKICNpZmRlZiBBRl9FQ09ORVQKICAgICAvKiBBY29ybiBFY29uZXQgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfRUNPTkVUIiwgQUZfRUNPTkVUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9FQ09ORVQpOwogI2VuZGlmCiAjaWZkZWYgQUZfQVRNU1ZDCiAgICAgLyogQVRNIFNWQ3MgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfQVRNU1ZDIiwgQUZfQVRNU1ZDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9BVE1TVkMpOwogI2VuZGlmCiAjaWZkZWYgQUZfU05BCiAgICAgLyogTGludXggU05BIFByb2plY3QgKG51dHRlcnMhKSAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9TTkEiLCBBRl9TTkEpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1NOQSk7CiAjZW5kaWYKICNpZmRlZiBBRl9JUkRBCiAgICAgLyogSVJEQSBzb2NrZXRzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0lSREEiLCBBRl9JUkRBKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9JUkRBKTsKICNlbmRpZgogI2lmZGVmIEFGX1BQUE9YCiAgICAgLyogUFBQb1ggc29ja2V0cyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9QUFBPWCIsIEFGX1BQUE9YKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9QUFBPWCk7CiAjZW5kaWYKICNpZmRlZiBBRl9XQU5QSVBFCiAgICAgLyogV2FucGlwZSBBUEkgU29ja2V0cyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9XQU5QSVBFIiwgQUZfV0FOUElQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfV0FOUElQRSk7CiAjZW5kaWYKICNpZmRlZiBBRl9MTEMKICAgICAvKiBMaW51eCBMTEMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfTExDIiwgQUZfTExDKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9MTEMpOwogI2VuZGlmCiAKICNpZmRlZiBVU0VfQkxVRVRPT1RICi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFGX0JMVUVUT09USCIsIEFGX0JMVUVUT09USCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkJUUFJPVE9fTDJDQVAiLCBCVFBST1RPX0wyQ0FQKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19IQ0kiLCBCVFBST1RPX0hDSSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9IQ0kiLCBTT0xfSENJKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9CTFVFVE9PVEgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fTDJDQVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEJUUFJPVE9fSENJKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfSENJKTsKICNpZiAhZGVmaW5lZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfRklMVEVSIiwgSENJX0ZJTFRFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSENJX0ZJTFRFUik7CiAjZW5kaWYKICNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKICNpZiAhZGVmaW5lZChfX05ldEJTRF9fKSAmJiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJIQ0lfVElNRV9TVEFNUCIsIEhDSV9USU1FX1NUQU1QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBIQ0lfVElNRV9TVEFNUCk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSENJX0RBVEFfRElSIiwgSENJX0RBVEFfRElSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19TQ08iLCBCVFBST1RPX1NDTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSENJX0RBVEFfRElSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBCVFBST1RPX1NDTyk7CiAjZW5kaWYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQlRQUk9UT19SRkNPTU0iLCBCVFBST1RPX1JGQ09NTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQlRQUk9UT19SRkNPTU0pOwogICAgIFB5TW9kdWxlX0FkZFN0cmluZ0NvbnN0YW50KG0sICJCREFERFJfQU5ZIiwgIjAwOjAwOjAwOjAwOjAwOjAwIik7CiAgICAgUHlNb2R1bGVfQWRkU3RyaW5nQ29uc3RhbnQobSwgIkJEQUREUl9MT0NBTCIsICIwMDowMDowMDpGRjpGRjpGRiIpOwogI2VuZGlmCiAKICNpZmRlZiBBRl9DQU4KICAgICAvKiBDb250cm9sbGVyIEFyZWEgTmV0d29yayAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9DQU4iLCBBRl9DQU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX0NBTik7CiAjZW5kaWYKICNpZmRlZiBQRl9DQU4KICAgICAvKiBDb250cm9sbGVyIEFyZWEgTmV0d29yayAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQRl9DQU4iLCBQRl9DQU4pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBGX0NBTik7CiAjZW5kaWYKIAogLyogUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAqLwogI2lmZGVmIEFGX1JEUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9SRFMiLCBBRl9SRFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFGX1JEUyk7CiAjZW5kaWYKICNpZmRlZiBQRl9SRFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUEZfUkRTIiwgUEZfUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQRl9SRFMpOwogI2VuZGlmCiAKIC8qIEtlcm5lbCBldmVudCBtZXNzYWdlcyAqLwogI2lmZGVmIFBGX1NZU1RFTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQRl9TWVNURU0iLCBQRl9TWVNURU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBGX1NZU1RFTSk7CiAjZW5kaWYKICNpZmRlZiBBRl9TWVNURU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUZfU1lTVEVNIiwgQUZfU1lTVEVNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBRl9TWVNURU0pOwogI2VuZGlmCiAKICNpZmRlZiBBRl9QQUNLRVQKQEAgLTU4NzAsNDQ3ICs2MDUzLDQ2MyBAQAogI2VuZGlmCiAKICNpZmRlZiBIQVZFX0xJTlVYX1RJUENfSAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBRl9USVBDIiwgQUZfVElQQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUZfVElQQyk7CiAKICAgICAvKiBmb3IgYWRkcmVzc2VzICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQUREUl9OQU1FU0VRIiwgVElQQ19BRERSX05BTUVTRVEpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0FERFJfTkFNRSIsIFRJUENfQUREUl9OQU1FKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19BRERSX0lEIiwgVElQQ19BRERSX0lEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0FERFJfTkFNRVNFUSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19BRERSX05BTUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQUREUl9JRCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19aT05FX1NDT1BFIiwgVElQQ19aT05FX1NDT1BFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DTFVTVEVSX1NDT1BFIiwgVElQQ19DTFVTVEVSX1NDT1BFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19OT0RFX1NDT1BFIiwgVElQQ19OT0RFX1NDT1BFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1pPTkVfU0NPUEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfQ0xVU1RFUl9TQ09QRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19OT0RFX1NDT1BFKTsKIAogICAgIC8qIGZvciBzZXRzb2Nrb3B0KCkgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1RJUEMiLCBTT0xfVElQQyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfSU1QT1JUQU5DRSIsIFRJUENfSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1JDX0RST1BQQUJMRSIsIFRJUENfU1JDX0RST1BQQUJMRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfREVTVF9EUk9QUEFCTEUiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0RFU1RfRFJPUFBBQkxFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19DT05OX1RJTUVPVVQiLCBUSVBDX0NPTk5fVElNRU9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1RJUEMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfSU1QT1JUQU5DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TUkNfRFJPUFBBQkxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0RFU1RfRFJPUFBBQkxFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NPTk5fVElNRU9VVCk7CiAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19MT1dfSU1QT1JUQU5DRSIsCi0gICAgICAgICAgICAgICAgICAgIFRJUENfTE9XX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX01FRElVTV9JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19NRURJVU1fSU1QT1JUQU5DRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfSElHSF9JTVBPUlRBTkNFIiwKLSAgICAgICAgICAgICAgICAgICAgVElQQ19ISUdIX0lNUE9SVEFOQ0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UiLAotICAgICAgICAgICAgICAgICAgICBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfTE9XX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfTUVESVVNX0lNUE9SVEFOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfSElHSF9JTVBPUlRBTkNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX0NSSVRJQ0FMX0lNUE9SVEFOQ0UpOwogCiAgICAgLyogZm9yIHN1YnNjcmlwdGlvbnMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19TVUJfUE9SVFMiLCBUSVBDX1NVQl9QT1JUUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCX1NFUlZJQ0UiLCBUSVBDX1NVQl9TRVJWSUNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1NVQl9QT1JUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TVUJfU0VSVklDRSk7CiAjaWZkZWYgVElQQ19TVUJfQ0FOQ0VMCiAgICAgLyogZG9lc24ndCBzZWVtIHRvIGJlIGF2YWlsYWJsZSBldmVyeXdoZXJlICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfU1VCX0NBTkNFTCIsIFRJUENfU1VCX0NBTkNFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TVUJfQ0FOQ0VMKTsKICNlbmRpZgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1dBSVRfRk9SRVZFUiIsIFRJUENfV0FJVF9GT1JFVkVSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVElQQ19QVUJMSVNIRUQiLCBUSVBDX1BVQkxJU0hFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfV0lUSERSQVdOIiwgVElQQ19XSVRIRFJBV04pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUSVBDX1NVQlNDUl9USU1FT1VUIiwgVElQQ19TVUJTQ1JfVElNRU9VVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfQ0ZHX1NSViIsIFRJUENfQ0ZHX1NSVik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRJUENfVE9QX1NSViIsIFRJUENfVE9QX1NSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19XQUlUX0ZPUkVWRVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRJUENfUFVCTElTSEVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1dJVEhEUkFXTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19TVUJTQ1JfVElNRU9VVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVElQQ19DRkdfU1JWKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUSVBDX1RPUF9TUlYpOwogI2VuZGlmCiAKICAgICAvKiBTb2NrZXQgdHlwZXMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09DS19TVFJFQU0iLCBTT0NLX1NUUkVBTSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfREdSQU0iLCBTT0NLX0RHUkFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1NUUkVBTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19ER1JBTSk7CiAvKiBXZSBoYXZlIGluY29tcGxldGUgc29ja2V0IHN1cHBvcnQuICovCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfUkFXIiwgU09DS19SQVcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX1NFUVBBQ0tFVCIsIFNPQ0tfU0VRUEFDS0VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09DS19TRVFQQUNLRVQpOwogI2lmIGRlZmluZWQoU09DS19SRE0pCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfUkRNIiwgU09DS19SRE0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfUkRNKTsKICNlbmRpZgogI2lmZGVmIFNPQ0tfQ0xPRVhFQwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0NLX0NMT0VYRUMiLCBTT0NLX0NMT0VYRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPQ0tfQ0xPRVhFQyk7CiAjZW5kaWYKICNpZmRlZiBTT0NLX05PTkJMT0NLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPQ0tfTk9OQkxPQ0siLCBTT0NLX05PTkJMT0NLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0NLX05PTkJMT0NLKTsKICNlbmRpZgogCiAjaWZkZWYgIFNPX0RFQlVHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0RFQlVHIiwgU09fREVCVUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0RFQlVHKTsKICNlbmRpZgogI2lmZGVmICBTT19BQ0NFUFRDT05OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0FDQ0VQVENPTk4iLCBTT19BQ0NFUFRDT05OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19BQ0NFUFRDT05OKTsKICNlbmRpZgogI2lmZGVmICBTT19SRVVTRUFERFIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkVVU0VBRERSIiwgU09fUkVVU0VBRERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SRVVTRUFERFIpOwogI2VuZGlmCiAjaWZkZWYgU09fRVhDTFVTSVZFQUREUlVTRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19FWENMVVNJVkVBRERSVVNFIiwgU09fRVhDTFVTSVZFQUREUlVTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fRVhDTFVTSVZFQUREUlVTRSk7CiAjZW5kaWYKIAogI2lmZGVmICBTT19LRUVQQUxJVkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fS0VFUEFMSVZFIiwgU09fS0VFUEFMSVZFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19LRUVQQUxJVkUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX0RPTlRST1VURQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19ET05UUk9VVEUiLCBTT19ET05UUk9VVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX0RPTlRST1VURSk7CiAjZW5kaWYKICNpZmRlZiAgU09fQlJPQURDQVNUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0JST0FEQ0FTVCIsIFNPX0JST0FEQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fQlJPQURDQVNUKTsKICNlbmRpZgogI2lmZGVmICBTT19VU0VMT09QQkFDSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19VU0VMT09QQkFDSyIsIFNPX1VTRUxPT1BCQUNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19VU0VMT09QQkFDSyk7CiAjZW5kaWYKICNpZmRlZiAgU09fTElOR0VSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX0xJTkdFUiIsIFNPX0xJTkdFUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fTElOR0VSKTsKICNlbmRpZgogI2lmZGVmICBTT19PT0JJTkxJTkUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fT09CSU5MSU5FIiwgU09fT09CSU5MSU5FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19PT0JJTkxJTkUpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JFVVNFUE9SVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SRVVTRVBPUlQiLCBTT19SRVVTRVBPUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JFVVNFUE9SVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fU05EQlVGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1NOREJVRiIsIFNPX1NOREJVRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fU05EQlVGKTsKICNlbmRpZgogI2lmZGVmICBTT19SQ1ZCVUYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUkNWQlVGIiwgU09fUkNWQlVGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SQ1ZCVUYpOwogI2VuZGlmCiAjaWZkZWYgIFNPX1NORExPV0FUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1NORExPV0FUIiwgU09fU05ETE9XQVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1NORExPV0FUKTsKICNlbmRpZgogI2lmZGVmICBTT19SQ1ZMT1dBVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19SQ1ZMT1dBVCIsIFNPX1JDVkxPV0FUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19SQ1ZMT1dBVCk7CiAjZW5kaWYKICNpZmRlZiAgU09fU05EVElNRU8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fU05EVElNRU8iLCBTT19TTkRUSU1FTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fU05EVElNRU8pOwogI2VuZGlmCiAjaWZkZWYgIFNPX1JDVlRJTUVPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1JDVlRJTUVPIiwgU09fUkNWVElNRU8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPX1JDVlRJTUVPKTsKICNlbmRpZgogI2lmZGVmICBTT19FUlJPUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19FUlJPUiIsIFNPX0VSUk9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19FUlJPUik7CiAjZW5kaWYKICNpZmRlZiAgU09fVFlQRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19UWVBFIiwgU09fVFlQRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fVFlQRSk7CiAjZW5kaWYKICNpZmRlZiAgU09fU0VURklCCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPX1NFVEZJQiIsIFNPX1NFVEZJQik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fU0VURklCKTsKICNlbmRpZgogI2lmZGVmICBTT19QQVNTQ1JFRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT19QQVNTQ1JFRCIsIFNPX1BBU1NDUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19QQVNTQ1JFRCk7CiAjZW5kaWYKICNpZmRlZiAgU09fUEVFUkNSRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09fUEVFUkNSRUQiLCBTT19QRUVSQ1JFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUEVFUkNSRUQpOwogI2VuZGlmCiAjaWZkZWYgIExPQ0FMX1BFRVJDUkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPQ0FMX1BFRVJDUkVEIiwgTE9DQUxfUEVFUkNSRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPQ0FMX1BFRVJDUkVEKTsKICNlbmRpZgogI2lmZGVmICBTT19CSU5EVE9ERVZJQ0UKICAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT19CSU5EVE9ERVZJQ0UpOwogI2VuZGlmCisjaWZkZWYgIFNPX1BSSU9SSVRZCisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09fUFJJT1JJVFkpOworI2VuZGlmCiAKICAgICAvKiBNYXhpbXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyBmb3IgImxpc3RlbiIgKi8KICNpZmRlZiAgU09NQVhDT05OCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTUFYQ09OTiIsIFNPTUFYQ09OTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09NQVhDT05OKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTUFYQ09OTiIsIDUpOyAvKiBDb21tb24gdmFsdWUgKi8KICNlbmRpZgogCiAgICAgLyogQW5jaWxsaWFyeSBtZXNzYWdlIHR5cGVzICovCiAjaWZkZWYgIFNDTV9SSUdIVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0NNX1JJR0hUUyIsIFNDTV9SSUdIVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDTV9SSUdIVFMpOwogI2VuZGlmCiAjaWZkZWYgIFNDTV9DUkVERU5USUFMUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTQ01fQ1JFREVOVElBTFMiLCBTQ01fQ1JFREVOVElBTFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNDTV9DUkVERU5USUFMUyk7CiAjZW5kaWYKICNpZmRlZiAgU0NNX0NSRURTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDTV9DUkVEUyIsIFNDTV9DUkVEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0NNX0NSRURTKTsKICNlbmRpZgogCiAgICAgLyogRmxhZ3MgZm9yIHNlbmQsIHJlY3YgKi8KICNpZmRlZiAgTVNHX09PQgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfT09CIiwgTVNHX09PQik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX09PQik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX1BFRUsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX1BFRUsiLCBNU0dfUEVFSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX1BFRUspOwogI2VuZGlmCiAjaWZkZWYgIE1TR19ET05UUk9VVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0RPTlRST1VURSIsIE1TR19ET05UUk9VVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19ET05UUk9VVEUpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19ET05UV0FJVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRE9OVFdBSVQiLCBNU0dfRE9OVFdBSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19ET05UV0FJVCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0VPUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRU9SIiwgTVNHX0VPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0VPUik7CiAjZW5kaWYKICNpZmRlZiAgTVNHX1RSVU5DCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19UUlVOQyIsIE1TR19UUlVOQyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX1RSVU5DKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQ1RSVU5DCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19DVFJVTkMiLCBNU0dfQ1RSVU5DKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQ1RSVU5DKTsKICNlbmRpZgogI2lmZGVmICBNU0dfV0FJVEFMTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfV0FJVEFMTCIsIE1TR19XQUlUQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfV0FJVEFMTCk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0JUQUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0JUQUciLCBNU0dfQlRBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0JUQUcpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FVEFHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FVEFHIiwgTVNHX0VUQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FVEFHKTsKICNlbmRpZgogI2lmZGVmICBNU0dfTk9TSUdOQUwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX05PU0lHTkFMIiwgTVNHX05PU0lHTkFMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfTk9TSUdOQUwpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19OT1RJRklDQVRJT04KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX05PVElGSUNBVElPTiIsIE1TR19OT1RJRklDQVRJT04pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19OT1RJRklDQVRJT04pOwogI2VuZGlmCiAjaWZkZWYgIE1TR19DTVNHX0NMT0VYRUMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0NNU0dfQ0xPRVhFQyIsIE1TR19DTVNHX0NMT0VYRUMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19DTVNHX0NMT0VYRUMpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19FUlJRVUVVRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfRVJSUVVFVUUiLCBNU0dfRVJSUVVFVUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19FUlJRVUVVRSk7CiAjZW5kaWYKICNpZmRlZiAgTVNHX0NPTkZJUk0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0NPTkZJUk0iLCBNU0dfQ09ORklSTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNHX0NPTkZJUk0pOwogI2VuZGlmCiAjaWZkZWYgIE1TR19NT1JFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19NT1JFIiwgTVNHX01PUkUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19NT1JFKTsKICNlbmRpZgogI2lmZGVmICBNU0dfRU9GCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TR19FT0YiLCBNU0dfRU9GKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRU9GKTsKICNlbmRpZgogI2lmZGVmICBNU0dfQkNBU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNHX0JDQVNUIiwgTVNHX0JDQVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfQkNBU1QpOwogI2VuZGlmCiAjaWZkZWYgIE1TR19NQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0dfTUNBU1QiLCBNU0dfTUNBU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TR19NQ0FTVCk7CisjZW5kaWYKKyNpZmRlZiBNU0dfRkFTVE9QRU4KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0dfRkFTVE9QRU4pOwogI2VuZGlmCiAKICAgICAvKiBQcm90b2NvbCBsZXZlbCBhbmQgbnVtYmVycywgdXNhYmxlIGZvciBbZ3NdZXRzb2Nrb3B0ICovCiAjaWZkZWYgIFNPTF9TT0NLRVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU09MX1NPQ0tFVCIsIFNPTF9TT0NLRVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9TT0NLRVQpOwogI2VuZGlmCiAjaWZkZWYgIFNPTF9JUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSVAiLCBTT0xfSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNPTF9JUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfSVAiLCAwKTsKICNlbmRpZgogI2lmZGVmICBTT0xfSVBYCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9JUFgiLCBTT0xfSVBYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfSVBYKTsKICNlbmRpZgogI2lmZGVmICBTT0xfQVgyNQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfQVgyNSIsIFNPTF9BWDI1KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfQVgyNSk7CiAjZW5kaWYKICNpZmRlZiAgU09MX0FUQUxLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9BVEFMSyIsIFNPTF9BVEFMSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0FUQUxLKTsKICNlbmRpZgogI2lmZGVmICBTT0xfTkVUUk9NCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9ORVRST00iLCBTT0xfTkVUUk9NKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfTkVUUk9NKTsKICNlbmRpZgogI2lmZGVmICBTT0xfUk9TRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfUk9TRSIsIFNPTF9ST1NFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfUk9TRSk7CiAjZW5kaWYKICNpZmRlZiAgU09MX1RDUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVENQIiwgU09MX1RDUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1RDUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVENQIiwgNik7CiAjZW5kaWYKICNpZmRlZiAgU09MX1VEUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVURQIiwgU09MX1VEUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX1VEUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTT0xfVURQIiwgMTcpOwogI2VuZGlmCiAjaWZkZWYgU09MX0NBTl9CQVNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9DQU5fQkFTRSIsIFNPTF9DQU5fQkFTRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0NBTl9CQVNFKTsKICNlbmRpZgogI2lmZGVmIFNPTF9DQU5fUkFXCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9DQU5fUkFXIiwgU09MX0NBTl9SQVcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXIiwgQ0FOX1JBVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU09MX0NBTl9SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVcpOwogI2VuZGlmCiAjaWZkZWYgSEFWRV9MSU5VWF9DQU5fSAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRUZGX0ZMQUciLCBDQU5fRUZGX0ZMQUcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUlRSX0ZMQUciLCBDQU5fUlRSX0ZMQUcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fRVJSX0ZMQUciLCBDQU5fRVJSX0ZMQUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FRkZfRkxBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1JUUl9GTEFHKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRVJSX0ZMQUcpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9TRkZfTUFTSyIsIENBTl9TRkZfTUFTSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FRkZfTUFTSyIsIENBTl9FRkZfTUFTSyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9FUlJfTUFTSyIsIENBTl9FUlJfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQ0FOX1NGRl9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fRUZGX01BU0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9FUlJfTUFTSyk7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0xJTlVYX0NBTl9SQVdfSAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX0ZJTFRFUiIsIENBTl9SQVdfRklMVEVSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19FUlJfRklMVEVSIiwgQ0FOX1JBV19FUlJfRklMVEVSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX1JBV19MT09QQkFDSyIsIENBTl9SQVdfTE9PUEJBQ0spOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fUkFXX1JFQ1ZfT1dOX01TR1MiLCBDQU5fUkFXX1JFQ1ZfT1dOX01TR1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVdfRklMVEVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBDQU5fUkFXX0VSUl9GSUxURVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVdfTE9PUEJBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9SQVdfUkVDVl9PV05fTVNHUyk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENBTl9CQ00pOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1NFVFVQIiwgVFhfU0VUVVApOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX0RFTEVURSIsIFRYX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNBTl9CQ01fVFhfUkVBRCIsIFRYX1JFQUQpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX1NFTkQiLCBUWF9TRU5EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9TRVRVUCIsIFJYX1NFVFVQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9ERUxFVEUiLCBSWF9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1JFQUQiLCBSWF9SRUFEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9UWF9TVEFUVVMiLCBUWF9TVEFUVVMpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1RYX0VYUElSRUQiLCBUWF9FWFBJUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9TVEFUVVMiLCBSWF9TVEFUVVMpOworICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJDQU5fQkNNX1JYX1RJTUVPVVQiLCBSWF9USU1FT1VUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQ0FOX0JDTV9SWF9DSEFOR0VEIiwgUlhfQ0hBTkdFRCk7CiAjZW5kaWYKICNpZmRlZiBTT0xfUkRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNPTF9SRFMiLCBTT0xfUkRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTT0xfUkRTKTsKICNlbmRpZgogI2lmZGVmIFJEU19DQU5DRUxfU0VOVF9UTwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ0FOQ0VMX1NFTlRfVE8iLCBSRFNfQ0FOQ0VMX1NFTlRfVE8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DQU5DRUxfU0VOVF9UTyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfR0VUX01SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19HRVRfTVIiLCBSRFNfR0VUX01SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfR0VUX01SKTsKICNlbmRpZgogI2lmZGVmIFJEU19GUkVFX01SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19GUkVFX01SIiwgUkRTX0ZSRUVfTVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19GUkVFX01SKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRUNWRVJSCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRUNWRVJSIiwgUkRTX1JFQ1ZFUlIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRUNWRVJSKTsKICNlbmRpZgogI2lmZGVmIFJEU19DT05HX01PTklUT1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NPTkdfTU9OSVRPUiIsIFJEU19DT05HX01PTklUT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DT05HX01PTklUT1IpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0dFVF9NUl9GT1JfREVTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfR0VUX01SX0ZPUl9ERVNUIiwgUkRTX0dFVF9NUl9GT1JfREVTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0dFVF9NUl9GT1JfREVTVCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQIiwgSVBQUk9UT19JUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQIiwgMCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19IT1BPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSE9QT1BUUyIsIElQUFJPVE9fSE9QT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19IT1BPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lDTVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JQ01QIiwgSVBQUk9UT19JQ01QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lDTVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JQ01QIiwgMSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JR01QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSUdNUCIsIElQUFJPVE9fSUdNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JR01QKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0dHUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0dHUCIsIElQUFJPVE9fR0dQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0dHUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19JUFY0Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBWNCIsIElQUFJPVE9fSVBWNCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19JUFY0KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQVjYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUFY2IiwgSVBQUk9UT19JUFY2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQVjYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lQSVAiLCBJUFBST1RPX0lQSVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBJUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19UQ1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19UQ1AiLCBJUFBST1RPX1RDUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19UQ1ApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19UQ1AiLCA2KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0VHUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0VHUCIsIElQUFJPVE9fRUdQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0VHUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19QVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19QVVAiLCBJUFBST1RPX1BVUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19QVVApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fVURQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVURQIiwgSVBQUk9UT19VRFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fVURQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVURQIiwgMTcpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSURQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSURQIiwgSVBQUk9UT19JRFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSURQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0hFTExPCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSEVMTE8iLCBJUFBST1RPX0hFTExPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0hFTExPKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX05ECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fTkQiLCBJUFBST1RPX05EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX05EKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1RQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fVFAiLCBJUFBST1RPX1RQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1RQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lQVjYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19JUFY2IiwgSVBQUk9UT19JUFY2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lQVjYpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fUk9VVElORwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1JPVVRJTkciLCBJUFBST1RPX1JPVVRJTkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUk9VVElORyk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19GUkFHTUVOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0ZSQUdNRU5UIiwgSVBQUk9UT19GUkFHTUVOVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19GUkFHTUVOVCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19SU1ZQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUlNWUCIsIElQUFJPVE9fUlNWUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19SU1ZQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0dSRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0dSRSIsIElQUFJPVE9fR1JFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0dSRSk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19FU1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19FU1AiLCBJUFBST1RPX0VTUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19FU1ApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fQUgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19BSCIsIElQUFJPVE9fQUgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fQUgpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fTU9CSUxFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fTU9CSUxFIiwgSVBQUk9UT19NT0JJTEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fTU9CSUxFKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0lDTVBWNgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0lDTVBWNiIsIElQUFJPVE9fSUNNUFY2KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0lDTVBWNik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19OT05FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fTk9ORSIsIElQUFJPVE9fTk9ORSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19OT05FKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0RTVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19EU1RPUFRTIiwgSVBQUk9UT19EU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0RTVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fWFRQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fWFRQIiwgSVBQUk9UT19YVFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fWFRQKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX0VPTgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX0VPTiIsIElQUFJPVE9fRU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX0VPTik7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19QSU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19QSU0iLCBJUFBST1RPX1BJTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19QSU0pOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fSVBDT01QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fSVBDT01QIiwgSVBQUk9UT19JUENPTVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fSVBDT01QKTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX1ZSUlAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19WUlJQIiwgSVBQUk9UT19WUlJQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX1ZSUlApOwogI2VuZGlmCiAjaWZkZWYgIElQUFJPVE9fU0NUUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX1NDVFAiLCBJUFBST1RPX1NDVFApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fU0NUUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBQUk9UT19CSVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQUk9UT19CSVAiLCBJUFBST1RPX0JJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQUk9UT19CSVApOwogI2VuZGlmCiAvKiovCiAjaWZkZWYgIElQUFJPVE9fUkFXCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUkFXIiwgSVBQUk9UT19SQVcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUFJPVE9fUkFXKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUFJPVE9fUkFXIiwgMjU1KTsKICNlbmRpZgogI2lmZGVmICBJUFBST1RPX01BWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFBST1RPX01BWCIsIElQUFJPVE9fTUFYKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFBST1RPX01BWCk7CiAjZW5kaWYKIAogI2lmZGVmICBTWVNQUk9UT19DT05UUk9MCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNZU1BST1RPX0NPTlRST0wiLCBTWVNQUk9UT19DT05UUk9MKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTWVNQUk9UT19DT05UUk9MKTsKICNlbmRpZgogCiAgICAgLyogU29tZSBwb3J0IGNvbmZpZ3VyYXRpb24gKi8KICNpZmRlZiAgSVBQT1JUX1JFU0VSVkVECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9SRVNFUlZFRCIsIElQUE9SVF9SRVNFUlZFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBQT1JUX1JFU0VSVkVEKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQUE9SVF9SRVNFUlZFRCIsIDEwMjQpOwogI2VuZGlmCiAjaWZkZWYgIElQUE9SVF9VU0VSUkVTRVJWRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1VTRVJSRVNFUlZFRCIsIElQUE9SVF9VU0VSUkVTRVJWRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQUE9SVF9VU0VSUkVTRVJWRUQpOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBQT1JUX1VTRVJSRVNFUlZFRCIsIDUwMDApOwogI2VuZGlmCiAKICAgICAvKiBTb21lIHJlc2VydmVkIElQIHYuNCBhZGRyZXNzZXMgKi8KICNpZmRlZiAgSU5BRERSX0FOWQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQU5ZIiwgSU5BRERSX0FOWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX0FOWSk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQU5ZIiwgMHgwMDAwMDAwMCk7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX0JST0FEQ0FTVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQlJPQURDQVNUIiwgSU5BRERSX0JST0FEQ0FTVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX0JST0FEQ0FTVCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfQlJPQURDQVNUIiwgMHhmZmZmZmZmZik7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX0xPT1BCQUNLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9MT09QQkFDSyIsIElOQUREUl9MT09QQkFDSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSU5BRERSX0xPT1BCQUNLKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9MT09QQkFDSyIsIDB4N0YwMDAwMDEpOwogI2VuZGlmCiAjaWZkZWYgIElOQUREUl9VTlNQRUNfR1JPVVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX1VOU1BFQ19HUk9VUCIsIElOQUREUl9VTlNQRUNfR1JPVVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElOQUREUl9VTlNQRUNfR1JPVVApOwogI2Vsc2UKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX1VOU1BFQ19HUk9VUCIsIDB4ZTAwMDAwMDApOwogI2VuZGlmCkBAIC02MzIxLDM1NCArNjUyMCwzNTMgQEAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSU5BRERSX0FMTEhPU1RTX0dST1VQIiwgMHhlMDAwMDAwMSk7CiAjZW5kaWYKICNpZmRlZiAgSU5BRERSX01BWF9MT0NBTF9HUk9VUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTUFYX0xPQ0FMX0dST1VQIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkFERFJfTUFYX0xPQ0FMX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfTUFYX0xPQ0FMX0dST1VQKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklOQUREUl9NQVhfTE9DQUxfR1JPVVAiLCAweGUwMDAwMGZmKTsKICNlbmRpZgogI2lmZGVmICBJTkFERFJfTk9ORQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTk9ORSIsIElOQUREUl9OT05FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJTkFERFJfTk9ORSk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJTkFERFJfTk9ORSIsIDB4ZmZmZmZmZmYpOwogI2VuZGlmCiAKICAgICAvKiBJUHY0IFtnc11ldHNvY2tvcHQgb3B0aW9ucyAqLwogI2lmZGVmICBJUF9PUFRJT05TCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX09QVElPTlMiLCBJUF9PUFRJT05TKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9PUFRJT05TKTsKICNlbmRpZgogI2lmZGVmICBJUF9IRFJJTkNMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0hEUklOQ0wiLCBJUF9IRFJJTkNMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9IRFJJTkNMKTsKICNlbmRpZgogI2lmZGVmICBJUF9UT1MKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfVE9TIiwgSVBfVE9TKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9UT1MpOwogI2VuZGlmCiAjaWZkZWYgIElQX1RUTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9UVEwiLCBJUF9UVEwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1RUTCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVDVk9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfUkVDVk9QVFMiLCBJUF9SRUNWT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVDVk9QVFMpOwogI2VuZGlmCiAjaWZkZWYgIElQX1JFQ1ZSRVRPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX1JFQ1ZSRVRPUFRTIiwgSVBfUkVDVlJFVE9QVFMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX1JFQ1ZSRVRPUFRTKTsKICNlbmRpZgogI2lmZGVmICBJUF9SRUNWRFNUQUREUgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRUNWRFNUQUREUiIsIElQX1JFQ1ZEU1RBRERSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9SRUNWRFNUQUREUik7CiAjZW5kaWYKICNpZmRlZiAgSVBfUkVUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9SRVRPUFRTIiwgSVBfUkVUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfUkVUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiAgSVBfTVVMVElDQVNUX0lGCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX01VTFRJQ0FTVF9JRiIsIElQX01VTFRJQ0FTVF9JRik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTVVMVElDQVNUX0lGKTsKICNlbmRpZgogI2lmZGVmICBJUF9NVUxUSUNBU1RfVFRMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX01VTFRJQ0FTVF9UVEwiLCBJUF9NVUxUSUNBU1RfVFRMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NVUxUSUNBU1RfVFRMKTsKICNlbmRpZgogI2lmZGVmICBJUF9NVUxUSUNBU1RfTE9PUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9NVUxUSUNBU1RfTE9PUCIsIElQX01VTFRJQ0FTVF9MT09QKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9NVUxUSUNBU1RfTE9PUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfQUREX01FTUJFUlNISVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfQUREX01FTUJFUlNISVAiLCBJUF9BRERfTUVNQkVSU0hJUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfQUREX01FTUJFUlNISVApOwogI2VuZGlmCiAjaWZkZWYgIElQX0RST1BfTUVNQkVSU0hJUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9EUk9QX01FTUJFUlNISVAiLCBJUF9EUk9QX01FTUJFUlNISVApOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQX0RST1BfTUVNQkVSU0hJUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX0RFRkFVTFRfTVVMVElDQVNUX1RUTCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9ERUZBVUxUX01VTFRJQ0FTVF9UVEwpOwogI2VuZGlmCiAjaWZkZWYgIElQX0RFRkFVTFRfTVVMVElDQVNUX0xPT1AKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBfTUFYX01FTUJFUlNISVBTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQX01BWF9NRU1CRVJTSElQUyIsIElQX01BWF9NRU1CRVJTSElQUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBfTUFYX01FTUJFUlNISVBTKTsKICNlbmRpZgogI2lmZGVmICBJUF9UUkFOU1BBUkVOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUF9UUkFOU1BBUkVOVCIsIElQX1RSQU5TUEFSRU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUF9UUkFOU1BBUkVOVCk7CiAjZW5kaWYKIAogICAgIC8qIElQdjYgW2dzXWV0c29ja29wdCBvcHRpb25zLCBkZWZpbmVkIGluIFJGQzI1NTMgKi8KICNpZmRlZiAgSVBWNl9KT0lOX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfSk9JTl9HUk9VUCIsIElQVjZfSk9JTl9HUk9VUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9KT0lOX0dST1VQKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X0xFQVZFX0dST1VQCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTEVBVkVfR1JPVVAiLCBJUFY2X0xFQVZFX0dST1VQKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0xFQVZFX0dST1VQKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X01VTFRJQ0FTVF9IT1BTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTVVMVElDQVNUX0hPUFMiLCBJUFY2X01VTFRJQ0FTVF9IT1BTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X01VTFRJQ0FTVF9IT1BTKTsKICNlbmRpZgogI2lmZGVmICBJUFY2X01VTFRJQ0FTVF9JRgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X01VTFRJQ0FTVF9JRiIsIElQVjZfTVVMVElDQVNUX0lGKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X01VTFRJQ0FTVF9JRik7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9NVUxUSUNBU1RfTE9PUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X01VTFRJQ0FTVF9MT09QIiwgSVBWNl9NVUxUSUNBU1RfTE9PUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9NVUxUSUNBU1RfTE9PUCk7CiAjZW5kaWYKICNpZmRlZiAgSVBWNl9VTklDQVNUX0hPUFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9VTklDQVNUX0hPUFMiLCBJUFY2X1VOSUNBU1RfSE9QUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9VTklDQVNUX0hPUFMpOwogI2VuZGlmCiAgICAgLyogQWRkaXRpb25hbCBJUFY2IHNvY2tldCBvcHRpb25zLCBkZWZpbmVkIGluIFJGQyAzNDkzICovCiAjaWZkZWYgSVBWNl9WNk9OTFkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9WNk9OTFkiLCBJUFY2X1Y2T05MWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9WNk9OTFkpOwogI2VuZGlmCiAgICAgLyogQWR2YW5jZWQgSVBWNiBzb2NrZXQgb3B0aW9ucywgZnJvbSBSRkMgMzU0MiAqLwogI2lmZGVmIElQVjZfQ0hFQ0tTVU0KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9DSEVDS1NVTSIsIElQVjZfQ0hFQ0tTVU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfQ0hFQ0tTVU0pOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9ET05URlJBRwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0RPTlRGUkFHIiwgSVBWNl9ET05URlJBRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9ET05URlJBRyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0RTVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9EU1RPUFRTIiwgSVBWNl9EU1RPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0RTVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9IT1BMSU1JVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X0hPUExJTUlUIiwgSVBWNl9IT1BMSU1JVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9IT1BMSU1JVCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X0hPUE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9IT1BPUFRTIiwgSVBWNl9IT1BPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X0hPUE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9ORVhUSE9QCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfTkVYVEhPUCIsIElQVjZfTkVYVEhPUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9ORVhUSE9QKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUEFUSE1UVQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1BBVEhNVFUiLCBJUFY2X1BBVEhNVFUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUEFUSE1UVSk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1BLVElORk8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9QS1RJTkZPIiwgSVBWNl9QS1RJTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1BLVElORk8pOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWRFNUT1BUUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZEU1RPUFRTIiwgSVBWNl9SRUNWRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWRFNUT1BUUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZIT1BMSU1JVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZIT1BMSU1JVCIsIElQVjZfUkVDVkhPUExJTUlUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZIT1BMSU1JVCk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1JFQ1ZIT1BPUFRTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVkhPUE9QVFMiLCBJUFY2X1JFQ1ZIT1BPUFRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1JFQ1ZIT1BPUFRTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUkVDVlBLVElORk8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWUEtUSU5GTyIsIElQVjZfUkVDVlBLVElORk8pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUkVDVlBLVElORk8pOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWUlRIRFIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SRUNWUlRIRFIiLCBJUFY2X1JFQ1ZSVEhEUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWUlRIRFIpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWVENMQVNTCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfUkVDVlRDTEFTUyIsIElQVjZfUkVDVlRDTEFTUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWVENMQVNTKTsKICNlbmRpZgogI2lmZGVmIElQVjZfUlRIRFIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SVEhEUiIsIElQVjZfUlRIRFIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIElQVjZfUlRIRFIpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SVEhEUkRTVE9QVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SVEhEUkRTVE9QVFMiLCBJUFY2X1JUSERSRFNUT1BUUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SVEhEUkRTVE9QVFMpOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SVEhEUl9UWVBFXzAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiSVBWNl9SVEhEUl9UWVBFXzAiLCBJUFY2X1JUSERSX1RZUEVfMCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SVEhEUl9UWVBFXzApOwogI2VuZGlmCiAjaWZkZWYgSVBWNl9SRUNWUEFUSE1UVQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1JFQ1ZQQVRITVRVIiwgSVBWNl9SRUNWUEFUSE1UVSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgSVBWNl9SRUNWUEFUSE1UVSk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1RDTEFTUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFY2X1RDTEFTUyIsIElQVjZfVENMQVNTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1RDTEFTUyk7CiAjZW5kaWYKICNpZmRlZiBJUFY2X1VTRV9NSU5fTVRVCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIklQVjZfVVNFX01JTl9NVFUiLCBJUFY2X1VTRV9NSU5fTVRVKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFY2X1VTRV9NSU5fTVRVKTsKICNlbmRpZgogCiAgICAgLyogVENQIG9wdGlvbnMgKi8KICNpZmRlZiAgVENQX05PREVMQVkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX05PREVMQVkiLCBUQ1BfTk9ERUxBWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX05PREVMQVkpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9NQVhTRUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX01BWFNFRyIsIFRDUF9NQVhTRUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9NQVhTRUcpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9DT1JLCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9DT1JLIiwgVENQX0NPUkspOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9DT1JLKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfS0VFUElETEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0tFRVBJRExFIiwgVENQX0tFRVBJRExFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfS0VFUElETEUpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9LRUVQSU5UVkwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0tFRVBJTlRWTCIsIFRDUF9LRUVQSU5UVkwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9LRUVQSU5UVkwpOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9LRUVQQ05UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9LRUVQQ05UIiwgVENQX0tFRVBDTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9LRUVQQ05UKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfU1lOQ05UCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRDUF9TWU5DTlQiLCBUQ1BfU1lOQ05UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfU1lOQ05UKTsKICNlbmRpZgogI2lmZGVmICBUQ1BfTElOR0VSMgotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfTElOR0VSMiIsIFRDUF9MSU5HRVIyKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfTElOR0VSMik7CiAjZW5kaWYKICNpZmRlZiAgVENQX0RFRkVSX0FDQ0VQVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfREVGRVJfQUNDRVBUIiwgVENQX0RFRkVSX0FDQ0VQVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0RFRkVSX0FDQ0VQVCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX1dJTkRPV19DTEFNUAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfV0lORE9XX0NMQU1QIiwgVENQX1dJTkRPV19DTEFNUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX1dJTkRPV19DTEFNUCk7CiAjZW5kaWYKICNpZmRlZiAgVENQX0lORk8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVENQX0lORk8iLCBUQ1BfSU5GTyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgVENQX0lORk8pOwogI2VuZGlmCiAjaWZkZWYgIFRDUF9RVUlDS0FDSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUQ1BfUVVJQ0tBQ0siLCBUQ1BfUVVJQ0tBQ0spOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFRDUF9RVUlDS0FDSyk7CiAjZW5kaWYKLQorI2lmZGVmICBUQ1BfRkFTVE9QRU4KKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBUQ1BfRkFTVE9QRU4pOworI2VuZGlmCiAKICAgICAvKiBJUFggb3B0aW9ucyAqLwogI2lmZGVmICBJUFhfVFlQRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJJUFhfVFlQRSIsIElQWF9UWVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBJUFhfVFlQRSk7CiAjZW5kaWYKIAogLyogUmVsaWFibGUgRGF0YWdyYW0gU29ja2V0cyAqLwogI2lmZGVmIFJEU19DTVNHX1JETUFfQVJHUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfQ01TR19SRE1BX0FSR1MiLCBSRFNfQ01TR19SRE1BX0FSR1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19DTVNHX1JETUFfQVJHUyk7CiAjZW5kaWYKICNpZmRlZiBSRFNfQ01TR19SRE1BX0RFU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9ERVNUIiwgUkRTX0NNU0dfUkRNQV9ERVNUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBSRFNfQ01TR19SRE1BX0RFU1QpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9NQVAKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9NQVAiLCBSRFNfQ01TR19SRE1BX01BUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9NQVApOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9TVEFUVVMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9TVEFUVVMiLCBSRFNfQ01TR19SRE1BX1NUQVRVUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9TVEFUVVMpOwogI2VuZGlmCiAjaWZkZWYgUkRTX0NNU0dfUkRNQV9VUERBVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX0NNU0dfUkRNQV9VUERBVEUiLCBSRFNfQ01TR19SRE1BX1VQREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX0NNU0dfUkRNQV9VUERBVEUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfUkVBRFdSSVRFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX1JFQURXUklURSIsIFJEU19SRE1BX1JFQURXUklURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfUkVBRFdSSVRFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX0ZFTkNFCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX0ZFTkNFIiwgUkRTX1JETUFfRkVOQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX0ZFTkNFKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX0lOVkFMSURBVEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfSU5WQUxJREFURSIsIFJEU19SRE1BX0lOVkFMSURBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX0lOVkFMSURBVEUpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfVVNFX09OQ0UKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfVVNFX09OQ0UiLCBSRFNfUkRNQV9VU0VfT05DRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfVVNFX09OQ0UpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfRE9OVFdBSVQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkRTX1JETUFfRE9OVFdBSVQiLCBSRFNfUkRNQV9ET05UV0FJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfRE9OVFdBSVQpOwogI2VuZGlmCiAjaWZkZWYgUkRTX1JETUFfTk9USUZZX01FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJEU19SRE1BX05PVElGWV9NRSIsIFJEU19SRE1BX05PVElGWV9NRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkRTX1JETUFfTk9USUZZX01FKTsKICNlbmRpZgogI2lmZGVmIFJEU19SRE1BX1NJTEVOVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSRFNfUkRNQV9TSUxFTlQiLCBSRFNfUkRNQV9TSUxFTlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJEU19SRE1BX1NJTEVOVCk7CiAjZW5kaWYKIAogICAgIC8qIGdldHthZGRyLG5hbWV9aW5mbyBwYXJhbWV0ZXJzICovCiAjaWZkZWYgRUFJX0FERFJGQU1JTFkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0FERFJGQU1JTFkiLCBFQUlfQUREUkZBTUlMWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0FERFJGQU1JTFkpOwogI2VuZGlmCiAjaWZkZWYgRUFJX0FHQUlOCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9BR0FJTiIsIEVBSV9BR0FJTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX0FHQUlOKTsKICNlbmRpZgogI2lmZGVmIEVBSV9CQURGTEFHUwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfQkFERkxBR1MiLCBFQUlfQkFERkxBR1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9CQURGTEFHUyk7CiAjZW5kaWYKICNpZmRlZiBFQUlfRkFJTAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfRkFJTCIsIEVBSV9GQUlMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfRkFJTCk7CiAjZW5kaWYKICNpZmRlZiBFQUlfRkFNSUxZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9GQU1JTFkiLCBFQUlfRkFNSUxZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfRkFNSUxZKTsKICNlbmRpZgogI2lmZGVmIEVBSV9NRU1PUlkKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX01FTU9SWSIsIEVBSV9NRU1PUlkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9NRU1PUlkpOwogI2VuZGlmCiAjaWZkZWYgRUFJX05PREFUQQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfTk9EQVRBIiwgRUFJX05PREFUQSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX05PREFUQSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfTk9OQU1FCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9OT05BTUUiLCBFQUlfTk9OQU1FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfTk9OQU1FKTsKICNlbmRpZgogI2lmZGVmIEVBSV9PVkVSRkxPVwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfT1ZFUkZMT1ciLCBFQUlfT1ZFUkZMT1cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9PVkVSRkxPVyk7CiAjZW5kaWYKICNpZmRlZiBFQUlfU0VSVklDRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfU0VSVklDRSIsIEVBSV9TRVJWSUNFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfU0VSVklDRSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfU09DS1RZUEUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX1NPQ0tUWVBFIiwgRUFJX1NPQ0tUWVBFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfU09DS1RZUEUpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1NZU1RFTQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJFQUlfU1lTVEVNIiwgRUFJX1NZU1RFTSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1NZU1RFTSk7CiAjZW5kaWYKICNpZmRlZiBFQUlfQkFESElOVFMKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX0JBREhJTlRTIiwgRUFJX0JBREhJTlRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBFQUlfQkFESElOVFMpOwogI2VuZGlmCiAjaWZkZWYgRUFJX1BST1RPQ09MCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkVBSV9QUk9UT0NPTCIsIEVBSV9QUk9UT0NPTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgRUFJX1BST1RPQ09MKTsKICNlbmRpZgogI2lmZGVmIEVBSV9NQVgKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiRUFJX01BWCIsIEVBSV9NQVgpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEVBSV9NQVgpOwogI2VuZGlmCiAjaWZkZWYgQUlfUEFTU0lWRQotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9QQVNTSVZFIiwgQUlfUEFTU0lWRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfUEFTU0lWRSk7CiAjZW5kaWYKICNpZmRlZiBBSV9DQU5PTk5BTUUKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfQ0FOT05OQU1FIiwgQUlfQ0FOT05OQU1FKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9DQU5PTk5BTUUpOwogI2VuZGlmCiAjaWZkZWYgQUlfTlVNRVJJQ0hPU1QKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfTlVNRVJJQ0hPU1QiLCBBSV9OVU1FUklDSE9TVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfTlVNRVJJQ0hPU1QpOwogI2VuZGlmCiAjaWZkZWYgQUlfTlVNRVJJQ1NFUlYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfTlVNRVJJQ1NFUlYiLCBBSV9OVU1FUklDU0VSVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfTlVNRVJJQ1NFUlYpOwogI2VuZGlmCiAjaWZkZWYgQUlfTUFTSwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9NQVNLIiwgQUlfTUFTSyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfTUFTSyk7CiAjZW5kaWYKICNpZmRlZiBBSV9BTEwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfQUxMIiwgQUlfQUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBBSV9BTEwpOwogI2VuZGlmCiAjaWZkZWYgQUlfVjRNQVBQRURfQ0ZHCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkFJX1Y0TUFQUEVEX0NGRyIsIEFJX1Y0TUFQUEVEX0NGRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfVjRNQVBQRURfQ0ZHKTsKICNlbmRpZgogI2lmZGVmIEFJX0FERFJDT05GSUcKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfQUREUkNPTkZJRyIsIEFJX0FERFJDT05GSUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEFJX0FERFJDT05GSUcpOwogI2VuZGlmCiAjaWZkZWYgQUlfVjRNQVBQRUQKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiQUlfVjRNQVBQRUQiLCBBSV9WNE1BUFBFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfVjRNQVBQRUQpOwogI2VuZGlmCiAjaWZkZWYgQUlfREVGQVVMVAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJBSV9ERUZBVUxUIiwgQUlfREVGQVVMVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgQUlfREVGQVVMVCk7CiAjZW5kaWYKICNpZmRlZiBOSV9NQVhIT1NUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX01BWEhPU1QiLCBOSV9NQVhIT1NUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBOSV9NQVhIT1NUKTsKICNlbmRpZgogI2lmZGVmIE5JX01BWFNFUlYKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTklfTUFYU0VSViIsIE5JX01BWFNFUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX01BWFNFUlYpOwogI2VuZGlmCiAjaWZkZWYgTklfTk9GUUROCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX05PRlFETiIsIE5JX05PRlFETik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTklfTk9GUUROKTsKICNlbmRpZgogI2lmZGVmIE5JX05VTUVSSUNIT1NUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX05VTUVSSUNIT1NUIiwgTklfTlVNRVJJQ0hPU1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX05VTUVSSUNIT1NUKTsKICNlbmRpZgogI2lmZGVmIE5JX05BTUVSRVFECi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX05BTUVSRVFEIiwgTklfTkFNRVJFUUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX05BTUVSRVFEKTsKICNlbmRpZgogI2lmZGVmIE5JX05VTUVSSUNTRVJWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX05VTUVSSUNTRVJWIiwgTklfTlVNRVJJQ1NFUlYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX05VTUVSSUNTRVJWKTsKICNlbmRpZgogI2lmZGVmIE5JX0RHUkFNCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk5JX0RHUkFNIiwgTklfREdSQU0pOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE5JX0RHUkFNKTsKICNlbmRpZgogCiAgICAgLyogc2h1dGRvd24oKSBwYXJhbWV0ZXJzICovCiAjaWZkZWYgU0hVVF9SRAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEIiwgU0hVVF9SRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgU0hVVF9SRCk7CiAjZWxpZiBkZWZpbmVkKFNEX1JFQ0VJVkUpCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkQiLCBTRF9SRUNFSVZFKTsKICNlbHNlCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNIVVRfUkQiLCAwKTsKICNlbmRpZgogI2lmZGVmIFNIVVRfV1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9XUiIsIFNIVVRfV1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFNIVVRfV1IpOwogI2VsaWYgZGVmaW5lZChTRF9TRU5EKQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1dSIiwgU0RfU0VORCk7CiAjZWxzZQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1dSIiwgMSk7CiAjZW5kaWYKICNpZmRlZiBTSFVUX1JEV1IKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiU0hVVF9SRFdSIiwgU0hVVF9SRFdSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTSFVUX1JEV1IpOwogI2VsaWYgZGVmaW5lZChTRF9CT1RIKQogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJTSFVUX1JEV1IiLCBTRF9CT1RIKTsKICNlbHNlCkBAIC02Njg4LDE0ICs2ODg2LDE0IEBACiAgICAgICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgbmFtZXNbaV0sIHRtcCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlJDVkFMTF9PRkYiLCBSQ1ZBTExfT0ZGKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX09OIiwgUkNWQUxMX09OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX1NPQ0tFVExFVkVMT05MWSIsIFJDVkFMTF9TT0NLRVRMRVZFTE9OTFkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9PRkYpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFJDVkFMTF9PTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX1NPQ0tFVExFVkVMT05MWSk7CiAjaWZkZWYgUkNWQUxMX0lQTEVWRUwKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUkNWQUxMX0lQTEVWRUwiLCBSQ1ZBTExfSVBMRVZFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX0lQTEVWRUwpOwogI2VuZGlmCiAjaWZkZWYgUkNWQUxMX01BWAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJSQ1ZBTExfTUFYIiwgUkNWQUxMX01BWCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUkNWQUxMX01BWCk7CiAjZW5kaWYKICNlbmRpZiAvKiBfTVNUQ1BJUF8gKi8KIApkaWZmIC0tZ2l0IGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaCBiL01vZHVsZXMvc29ja2V0bW9kdWxlLmgKaW5kZXggMDQzNTg3OC4uYjgzZjlhZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zb2NrZXRtb2R1bGUuaAorKysgYi9Nb2R1bGVzL3NvY2tldG1vZHVsZS5oCkBAIC04LDcgKzgsNyBAQAogIyAgIGluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICMgZW5kaWYKICMgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotIyBpZiAhKGRlZmluZWQoX19DWUdXSU5fXykgfHwgKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19WQUNQUCkpKQorIyBpZiAhZGVmaW5lZChfX0NZR1dJTl9fKQogIyAgaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KICMgZW5kaWYKIApAQCAtODAsNiArODAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9jYW4vcmF3Lmg+CiAjZW5kaWYKIAorI2lmZGVmIEhBVkVfTElOVVhfQ0FOX0JDTV9ICisjaW5jbHVkZSA8bGludXgvY2FuL2JjbS5oPgorI2VuZGlmCisKICNpZmRlZiBIQVZFX1NZU19TWVNfRE9NQUlOX0gKICNpbmNsdWRlIDxzeXMvc3lzX2RvbWFpbi5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3Nwd2Rtb2R1bGUuYyBiL01vZHVsZXMvc3B3ZG1vZHVsZS5jCmluZGV4IDE5NGFlMTkuLjY4ZWExYjUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3B3ZG1vZHVsZS5jCisrKyBiL01vZHVsZXMvc3B3ZG1vZHVsZS5jCkBAIC0yNiwyMiArMjYsMjQgQEAKICNpZiBkZWZpbmVkKEhBVkVfR0VUU1BOQU0pIHx8IGRlZmluZWQoSEFWRV9HRVRTUEVOVCkKIAogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRmllbGQgc3RydWN0X3Nwd2RfdHlwZV9maWVsZHNbXSA9IHsKLSAgICB7InNwX25hbSIsICJsb2dpbiBuYW1lIn0sCi0gICAgeyJzcF9wd2QiLCAiZW5jcnlwdGVkIHBhc3N3b3JkIn0sCisgICAgeyJzcF9uYW1wIiwgImxvZ2luIG5hbWUifSwKKyAgICB7InNwX3B3ZHAiLCAiZW5jcnlwdGVkIHBhc3N3b3JkIn0sCiAgICAgeyJzcF9sc3RjaGciLCAiZGF0ZSBvZiBsYXN0IGNoYW5nZSJ9LAogICAgIHsic3BfbWluIiwgIm1pbiAjZGF5cyBiZXR3ZWVuIGNoYW5nZXMifSwKICAgICB7InNwX21heCIsICJtYXggI2RheXMgYmV0d2VlbiBjaGFuZ2VzIn0sCiAgICAgeyJzcF93YXJuIiwgIiNkYXlzIGJlZm9yZSBwdyBleHBpcmVzIHRvIHdhcm4gdXNlciBhYm91dCBpdCJ9LAotICAgIHsic3BfaW5hY3QiLCAiI2RheXMgYWZ0ZXIgcHcgZXhwaXJlcyB1bnRpbCBhY2NvdW50IGlzIGJsb2NrZWQifSwKLSAgICB7InNwX2V4cGlyZSIsICIjZGF5cyBzaW5jZSAxOTcwLTAxLTAxIHVudGlsIGFjY291bnQgaXMgZGlzYWJsZWQifSwKKyAgICB7InNwX2luYWN0IiwgIiNkYXlzIGFmdGVyIHB3IGV4cGlyZXMgdW50aWwgYWNjb3VudCBpcyBkaXNhYmxlZCJ9LAorICAgIHsic3BfZXhwaXJlIiwgIiNkYXlzIHNpbmNlIDE5NzAtMDEtMDEgd2hlbiBhY2NvdW50IGV4cGlyZXMifSwKICAgICB7InNwX2ZsYWciLCAicmVzZXJ2ZWQifSwKKyAgICB7InNwX25hbSIsICJsb2dpbiBuYW1lOyBkZXByZWNhdGVkIn0sIC8qIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyAgICB7InNwX3B3ZCIsICJlbmNyeXB0ZWQgcGFzc3dvcmQ7IGRlcHJlY2F0ZWQifSwgLyogQmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogICAgIHswfQogfTsKIAogUHlEb2NfU1RSVkFSKHN0cnVjdF9zcHdkX19kb2NfXywKICJzcHdkLnN0cnVjdF9zcHdkOiBSZXN1bHRzIGZyb20gZ2V0c3AqKCkgcm91dGluZXMuXG5cblwKIFRoaXMgb2JqZWN0IG1heSBiZSBhY2Nlc3NlZCBlaXRoZXIgYXMgYSA5LXR1cGxlIG9mXG5cCi0gIChzcF9uYW0sc3BfcHdkLHNwX2xzdGNoZyxzcF9taW4sc3BfbWF4LHNwX3dhcm4sc3BfaW5hY3Qsc3BfZXhwaXJlLHNwX2ZsYWcpXG5cCisgIChzcF9uYW1wLHNwX3B3ZHAsc3BfbHN0Y2hnLHNwX21pbixzcF9tYXgsc3Bfd2FybixzcF9pbmFjdCxzcF9leHBpcmUsc3BfZmxhZylcblwKIG9yIHZpYSB0aGUgb2JqZWN0IGF0dHJpYnV0ZXMgYXMgbmFtZWQgaW4gdGhlIGFib3ZlIHR1cGxlLiIpOwogCiBzdGF0aWMgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjIHN0cnVjdF9zcHdkX3R5cGVfZGVzYyA9IHsKQEAgLTg2LDYgKzg4LDggQEAKICAgICBTRVRJKHNldEluZGV4KyssIHAtPnNwX2luYWN0KTsKICAgICBTRVRJKHNldEluZGV4KyssIHAtPnNwX2V4cGlyZSk7CiAgICAgU0VUSShzZXRJbmRleCsrLCBwLT5zcF9mbGFnKTsKKyAgICBTRVRTKHNldEluZGV4KyssIHAtPnNwX25hbXApOyAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBzcF9uYW0gKi8KKyAgICBTRVRTKHNldEluZGV4KyssIHAtPnNwX3B3ZHApOyAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZvciBzcF9wd2QgKi8KIAogI3VuZGVmIFNFVFMKICN1bmRlZiBTRVRJCkBAIC0xOTYsOSArMjAwLDExIEBACiAgICAgbT1QeU1vZHVsZV9DcmVhdGUoJnNwd2Rtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlN0cnVjdFNwd2RUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3Rfc3B3ZF90eXBlX2Rlc2MpOworICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RTcHdkVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3Rfc3B3ZF90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBQeV9JTkNSRUYoKFB5T2JqZWN0ICopICZTdHJ1Y3RTcHdkVHlwZSk7CiAgICAgUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJzdHJ1Y3Rfc3B3ZCIsIChQeU9iamVjdCAqKSAmU3RydWN0U3B3ZFR5cGUpOwogICAgIGluaXRpYWxpemVkID0gMTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3JlLmggYi9Nb2R1bGVzL3NyZS5oCmluZGV4IDBhOGYwY2YuLjQyZmUyOGQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3JlLmgKKysrIGIvTW9kdWxlcy9zcmUuaApAQCAtMzEsOSArMzEsNyBAQAogICAgIFB5T2JqZWN0KiBwYXR0ZXJuOyAvKiBwYXR0ZXJuIHNvdXJjZSAob3IgTm9uZSkgKi8KICAgICBpbnQgZmxhZ3M7IC8qIGZsYWdzIHVzZWQgd2hlbiBjb21waWxpbmcgcGF0dGVybiBzb3VyY2UgKi8KICAgICBQeU9iamVjdCAqd2Vha3JlZmxpc3Q7IC8qIExpc3Qgb2Ygd2VhayByZWZlcmVuY2VzICovCi0gICAgaW50IGxvZ2ljYWxfY2hhcnNpemU7IC8qIHBhdHRlcm4gY2hhcnNpemUgKG9yIC0xKSAqLwotICAgIGludCBjaGFyc2l6ZTsKLSAgICBQeV9idWZmZXIgdmlldzsKKyAgICBpbnQgaXNieXRlczsgLyogcGF0dGVybiB0eXBlICgxIC0gYnl0ZXMsIDAgLSBzdHJpbmcsIC0xIC0gTm9uZSkgKi8KICAgICAvKiBwYXR0ZXJuIGNvZGUgKi8KICAgICBQeV9zc2l6ZV90IGNvZGVzaXplOwogICAgIFNSRV9DT0RFIGNvZGVbMV07CkBAIC03Myw5ICs3MSw4IEBACiAgICAgLyogYXR0cmlidXRlcyBmb3IgdGhlIG1hdGNoIG9iamVjdCAqLwogICAgIFB5T2JqZWN0KiBzdHJpbmc7CiAgICAgUHlfc3NpemVfdCBwb3MsIGVuZHBvczsKLSAgICAvKiBjaGFyYWN0ZXIgc2l6ZSAqLwotICAgIGludCBsb2dpY2FsX2NoYXJzaXplOyAvKiBraW5kIG9mIHRoaW5nOiAxIC0gYnl0ZXMsIDIvNCAtIHVuaWNvZGUgKi8KLSAgICBpbnQgY2hhcnNpemU7CisgICAgaW50IGlzYnl0ZXM7CisgICAgaW50IGNoYXJzaXplOyAvKiBjaGFyYWN0ZXIgc2l6ZSAqLwogICAgIC8qIHJlZ2lzdGVycyAqLwogICAgIFB5X3NzaXplX3QgbGFzdGluZGV4OwogICAgIFB5X3NzaXplX3QgbGFzdG1hcms7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZV9jb25zdGFudHMuaCBiL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oCmluZGV4IDEzYzg5NTguLjU5NDBkNWEgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oCisrKyBiL01vZHVsZXMvc3JlX2NvbnN0YW50cy5oCkBAIC04MSw2ICs4MSw4IEBACiAjZGVmaW5lIFNSRV9GTEFHX0RPVEFMTCAxNgogI2RlZmluZSBTUkVfRkxBR19VTklDT0RFIDMyCiAjZGVmaW5lIFNSRV9GTEFHX1ZFUkJPU0UgNjQKKyNkZWZpbmUgU1JFX0ZMQUdfREVCVUcgMTI4CisjZGVmaW5lIFNSRV9GTEFHX0FTQ0lJIDI1NgogI2RlZmluZSBTUkVfSU5GT19QUkVGSVggMQogI2RlZmluZSBTUkVfSU5GT19MSVRFUkFMIDIKICNkZWZpbmUgU1JFX0lORk9fQ0hBUlNFVCA0CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3NyZV9saWIuaCBiL01vZHVsZXMvc3JlX2xpYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNDlkZTQKLS0tIC9kZXYvbnVsbAorKysgYi9Nb2R1bGVzL3NyZV9saWIuaApAQCAtMCwwICsxLDEzNTQgQEAKKy8qCisgKiBTZWNyZXQgTGFicycgUmVndWxhciBFeHByZXNzaW9uIEVuZ2luZQorICoKKyAqIHJlZ3VsYXIgZXhwcmVzc2lvbiBtYXRjaGluZyBlbmdpbmUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwMSBieSBTZWNyZXQgTGFicyBBQi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU2VlIHRoZSBfc3JlLmMgZmlsZSBmb3IgaW5mb3JtYXRpb24gb24gdXNhZ2UgYW5kIHJlZGlzdHJpYnV0aW9uLgorICovCisKKy8qIFN0cmluZyBtYXRjaGluZyBlbmdpbmUgKi8KKworLyogVGhpcyBmaWxlIGlzIGluY2x1ZGVkIHRocmVlIHRpbWVzLCB3aXRoIGRpZmZlcmVudCBjaGFyYWN0ZXIgc2V0dGluZ3MgKi8KKworTE9DQUwoaW50KQorU1JFKGF0KShTUkVfU1RBVEUqIHN0YXRlLCBTUkVfQ0hBUiogcHRyLCBTUkVfQ09ERSBhdCkKK3sKKyAgICAvKiBjaGVjayBpZiBwb2ludGVyIGlzIGF0IGdpdmVuIHBvc2l0aW9uICovCisKKyAgICBQeV9zc2l6ZV90IHRoaXNwLCB0aGF0cDsKKworICAgIHN3aXRjaCAoYXQpIHsKKworICAgIGNhc2UgU1JFX0FUX0JFR0lOTklORzoKKyAgICBjYXNlIFNSRV9BVF9CRUdJTk5JTkdfU1RSSU5HOgorICAgICAgICByZXR1cm4gKCh2b2lkKikgcHRyID09IHN0YXRlLT5iZWdpbm5pbmcpOworCisgICAgY2FzZSBTUkVfQVRfQkVHSU5OSU5HX0xJTkU6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmJlZ2lubmluZyB8fAorICAgICAgICAgICAgICAgIFNSRV9JU19MSU5FQlJFQUsoKGludCkgcHRyWy0xXSkpOworCisgICAgY2FzZSBTUkVfQVRfRU5EOgorICAgICAgICByZXR1cm4gKCgoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kIC0gcHRyID09IDEgJiYKKyAgICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBwdHJbMF0pKSB8fAorICAgICAgICAgICAgICAgICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kKSk7CisKKyAgICBjYXNlIFNSRV9BVF9FTkRfTElORToKKyAgICAgICAgcmV0dXJuICgodm9pZCopIHB0ciA9PSBzdGF0ZS0+ZW5kIHx8CisgICAgICAgICAgICAgICAgU1JFX0lTX0xJTkVCUkVBSygoaW50KSBwdHJbMF0pKTsKKworICAgIGNhc2UgU1JFX0FUX0VORF9TVFJJTkc6CisgICAgICAgIHJldHVybiAoKHZvaWQqKSBwdHIgPT0gc3RhdGUtPmVuZCk7CisKKyAgICBjYXNlIFNSRV9BVF9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clstMV0pIDogMDsKKyAgICAgICAgdGhpc3AgPSAoKHZvaWQqKSBwdHIgPCBzdGF0ZS0+ZW5kKSA/CisgICAgICAgICAgICBTUkVfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfTk9OX0JPVU5EQVJZOgorICAgICAgICBpZiAoc3RhdGUtPmJlZ2lubmluZyA9PSBzdGF0ZS0+ZW5kKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRoYXRwID0gKCh2b2lkKikgcHRyID4gc3RhdGUtPmJlZ2lubmluZykgPworICAgICAgICAgICAgU1JFX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9MT0NfQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfTE9DX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfTE9DX05PTl9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9MT0NfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX0xPQ19JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7CisKKyAgICBjYXNlIFNSRV9BVF9VTklfQk9VTkRBUlk6CisgICAgICAgIGlmIChzdGF0ZS0+YmVnaW5uaW5nID09IHN0YXRlLT5lbmQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgdGhhdHAgPSAoKHZvaWQqKSBwdHIgPiBzdGF0ZS0+YmVnaW5uaW5nKSA/CisgICAgICAgICAgICBTUkVfVU5JX0lTX1dPUkQoKGludCkgcHRyWy0xXSkgOiAwOworICAgICAgICB0aGlzcCA9ICgodm9pZCopIHB0ciA8IHN0YXRlLT5lbmQpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbMF0pIDogMDsKKyAgICAgICAgcmV0dXJuIHRoaXNwICE9IHRoYXRwOworCisgICAgY2FzZSBTUkVfQVRfVU5JX05PTl9CT1VOREFSWToKKyAgICAgICAgaWYgKHN0YXRlLT5iZWdpbm5pbmcgPT0gc3RhdGUtPmVuZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB0aGF0cCA9ICgodm9pZCopIHB0ciA+IHN0YXRlLT5iZWdpbm5pbmcpID8KKyAgICAgICAgICAgIFNSRV9VTklfSVNfV09SRCgoaW50KSBwdHJbLTFdKSA6IDA7CisgICAgICAgIHRoaXNwID0gKCh2b2lkKikgcHRyIDwgc3RhdGUtPmVuZCkgPworICAgICAgICAgICAgU1JFX1VOSV9JU19XT1JEKChpbnQpIHB0clswXSkgOiAwOworICAgICAgICByZXR1cm4gdGhpc3AgPT0gdGhhdHA7CisKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworTE9DQUwoaW50KQorU1JFKGNoYXJzZXQpKFNSRV9DT0RFKiBzZXQsIFNSRV9DT0RFIGNoKQoreworICAgIC8qIGNoZWNrIGlmIGNoYXJhY3RlciBpcyBhIG1lbWJlciBvZiB0aGUgZ2l2ZW4gc2V0ICovCisKKyAgICBpbnQgb2sgPSAxOworCisgICAgZm9yICg7OykgeworICAgICAgICBzd2l0Y2ggKCpzZXQrKykgeworCisgICAgICAgIGNhc2UgU1JFX09QX0ZBSUxVUkU6CisgICAgICAgICAgICByZXR1cm4gIW9rOworCisgICAgICAgIGNhc2UgU1JFX09QX0xJVEVSQUw6CisgICAgICAgICAgICAvKiA8TElURVJBTD4gPGNvZGU+ICovCisgICAgICAgICAgICBpZiAoY2ggPT0gc2V0WzBdKQorICAgICAgICAgICAgICAgIHJldHVybiBvazsKKyAgICAgICAgICAgIHNldCsrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQ0FURUdPUlk6CisgICAgICAgICAgICAvKiA8Q0FURUdPUlk+IDxjb2RlPiAqLworICAgICAgICAgICAgaWYgKHNyZV9jYXRlZ29yeShzZXRbMF0sIChpbnQpIGNoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0NIQVJTRVQ6CisgICAgICAgICAgICAvKiA8Q0hBUlNFVD4gPGJpdG1hcD4gKi8KKyAgICAgICAgICAgIGlmIChjaCA8IDI1NiAmJgorICAgICAgICAgICAgICAgIChzZXRbY2gvU1JFX0NPREVfQklUU10gJiAoMXUgPDwgKGNoICYgKFNSRV9DT0RFX0JJVFMtMSkpKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0ICs9IDI1Ni9TUkVfQ09ERV9CSVRTOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfUkFOR0U6CisgICAgICAgICAgICAvKiA8UkFOR0U+IDxsb3dlcj4gPHVwcGVyPiAqLworICAgICAgICAgICAgaWYgKHNldFswXSA8PSBjaCAmJiBjaCA8PSBzZXRbMV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIG9rOworICAgICAgICAgICAgc2V0ICs9IDI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9ORUdBVEU6CisgICAgICAgICAgICBvayA9ICFvazsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0JJR0NIQVJTRVQ6CisgICAgICAgICAgICAvKiA8QklHQ0hBUlNFVD4gPGJsb2NrY291bnQ+IDwyNTYgYmxvY2tpbmRpY2VzPiA8YmxvY2tzPiAqLworICAgICAgICB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGNvdW50LCBibG9jazsKKyAgICAgICAgICAgIGNvdW50ID0gKihzZXQrKyk7CisKKyAgICAgICAgICAgIGlmIChjaCA8IDB4MTAwMDB1KQorICAgICAgICAgICAgICAgIGJsb2NrID0gKCh1bnNpZ25lZCBjaGFyKilzZXQpW2NoID4+IDhdOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJsb2NrID0gLTE7CisgICAgICAgICAgICBzZXQgKz0gMjU2L3NpemVvZihTUkVfQ09ERSk7CisgICAgICAgICAgICBpZiAoYmxvY2sgPj0wICYmCisgICAgICAgICAgICAgICAgKHNldFsoYmxvY2sgKiAyNTYgKyAoY2ggJiAyNTUpKS9TUkVfQ09ERV9CSVRTXSAmCisgICAgICAgICAgICAgICAgICAgICgxdSA8PCAoY2ggJiAoU1JFX0NPREVfQklUUy0xKSkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gb2s7CisgICAgICAgICAgICBzZXQgKz0gY291bnQgKiAoMjU2L1NSRV9DT0RFX0JJVFMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogaW50ZXJuYWwgZXJyb3IgLS0gdGhlcmUncyBub3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgaXQKKyAgICAgICAgICAgICAgIGhlcmUsIHNvIGxldCdzIGp1c3QgcHJldGVuZCBpdCBkaWRuJ3QgbWF0Y2guLi4gKi8KKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorfQorCitMT0NBTChQeV9zc2l6ZV90KSBTUkUobWF0Y2gpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuLCBpbnQgbWF0Y2hfYWxsKTsKKworTE9DQUwoUHlfc3NpemVfdCkKK1NSRShjb3VudCkoU1JFX1NUQVRFKiBzdGF0ZSwgU1JFX0NPREUqIHBhdHRlcm4sIFB5X3NzaXplX3QgbWF4Y291bnQpCit7CisgICAgU1JFX0NPREUgY2hyOworICAgIFNSRV9DSEFSIGM7CisgICAgU1JFX0NIQVIqIHB0ciA9IChTUkVfQ0hBUiAqKXN0YXRlLT5wdHI7CisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgUHlfc3NpemVfdCBpOworCisgICAgLyogYWRqdXN0IGVuZCAqLworICAgIGlmIChtYXhjb3VudCA8IGVuZCAtIHB0ciAmJiBtYXhjb3VudCAhPSBTUkVfTUFYUkVQRUFUKQorICAgICAgICBlbmQgPSBwdHIgKyBtYXhjb3VudDsKKworICAgIHN3aXRjaCAocGF0dGVyblswXSkgeworCisgICAgY2FzZSBTUkVfT1BfSU46CisgICAgICAgIC8qIHJlcGVhdGVkIHNldCAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBJTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgU1JFKGNoYXJzZXQpKHBhdHRlcm4gKyAyLCAqcHRyKSkKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0FOWToKKyAgICAgICAgLyogcmVwZWF0ZWQgZG90IHdpbGRjYXJkLiAqLworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBBTllcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkVfSVNfTElORUJSRUFLKCpwdHIpKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfQU5ZX0FMTDoKKyAgICAgICAgLyogcmVwZWF0ZWQgZG90IHdpbGRjYXJkLiAgc2tpcCB0byB0aGUgZW5kIG9mIHRoZSB0YXJnZXQKKyAgICAgICAgICAgc3RyaW5nLCBhbmQgYmFja3RyYWNrIGZyb20gdGhlcmUgKi8KKyAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgQU5ZX0FMTFxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgIHB0ciA9IGVuZDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNSRV9PUF9MSVRFUkFMOgorICAgICAgICAvKiByZXBlYXRlZCBsaXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIExJVEVSQUwgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIGMgPSAoU1JFX0NIQVIpIGNocjsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGlmICgoU1JFX0NPREUpIGMgIT0gY2hyKQorICAgICAgICAgICAgOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICpwdHIgPT0gYykKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAvKiByZXBlYXRlZCBsaXRlcmFsICovCisgICAgICAgIGNociA9IHBhdHRlcm5bMV07CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIExJVEVSQUxfSUdOT1JFICVkXG4iLCBwYXR0ZXJuLCBwdHIsIGNocikpOworICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmIChTUkVfQ09ERSkgc3RhdGUtPmxvd2VyKCpwdHIpID09IGNocikKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMOgorICAgICAgICAvKiByZXBlYXRlZCBub24tbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBOT1RfTElURVJBTCAlZFxuIiwgcGF0dGVybiwgcHRyLCBjaHIpKTsKKyAgICAgICAgYyA9IChTUkVfQ0hBUikgY2hyOworI2lmIFNJWkVPRl9TUkVfQ0hBUiA8IDQKKyAgICAgICAgaWYgKChTUkVfQ09ERSkgYyAhPSBjaHIpCisgICAgICAgICAgICBwdHIgPSBlbmQ7IC8qIGxpdGVyYWwgY2FuJ3QgbWF0Y2g6IGRvZXNuJ3QgZml0IGluIGNoYXIgd2lkdGggKi8KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKnB0ciAhPSBjKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBTUkVfT1BfTk9UX0xJVEVSQUxfSUdOT1JFOgorICAgICAgICAvKiByZXBlYXRlZCBub24tbGl0ZXJhbCAqLworICAgICAgICBjaHIgPSBwYXR0ZXJuWzFdOworICAgICAgICBUUkFDRSgoInwlcHwlcHxDT1VOVCBOT1RfTElURVJBTF9JR05PUkUgJWRcbiIsIHBhdHRlcm4sIHB0ciwgY2hyKSk7CisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQgJiYgKFNSRV9DT0RFKSBzdGF0ZS0+bG93ZXIoKnB0cikgIT0gY2hyKQorICAgICAgICAgICAgcHRyKys7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogcmVwZWF0ZWQgc2luZ2xlIGNoYXJhY3RlciBwYXR0ZXJuICovCisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UIFNVQlBBVFRFUk5cbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICB3aGlsZSAoKFNSRV9DSEFSKikgc3RhdGUtPnB0ciA8IGVuZCkgeworICAgICAgICAgICAgaSA9IFNSRShtYXRjaCkoc3RhdGUsIHBhdHRlcm4sIDApOworICAgICAgICAgICAgaWYgKGkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICAgICAgaWYgKCFpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFRSQUNFKCgifCVwfCVwfENPVU5UICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIHBhdHRlcm4sIHB0ciwKKyAgICAgICAgICAgICAgIChTUkVfQ0hBUiopIHN0YXRlLT5wdHIgLSBwdHIpKTsKKyAgICAgICAgcmV0dXJuIChTUkVfQ0hBUiopIHN0YXRlLT5wdHIgLSBwdHI7CisgICAgfQorCisgICAgVFJBQ0UoKCJ8JXB8JXB8Q09VTlQgJSIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwgcGF0dGVybiwgcHRyLAorICAgICAgICAgICBwdHIgLSAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyKSk7CisgICAgcmV0dXJuIHB0ciAtIChTUkVfQ0hBUiopIHN0YXRlLT5wdHI7Cit9CisKKyNpZiAwIC8qIG5vdCB1c2VkIGluIHRoaXMgcmVsZWFzZSAqLworTE9DQUwoaW50KQorU1JFKGluZm8pKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIC8qIGNoZWNrIGlmIGFuIFNSRV9PUF9JTkZPIGJsb2NrIG1hdGNoZXMgYXQgdGhlIGN1cnJlbnQgcG9zaXRpb24uCisgICAgICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIFNSRV9DT0RFIG9iamVjdHMgdG8gc2tpcCBpZiBzdWNjZXNzZnVsLCAwCisgICAgICAgaWYgbm8gbWF0Y2ggKi8KKworICAgIFNSRV9DSEFSKiBlbmQgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+ZW5kOworICAgIFNSRV9DSEFSKiBwdHIgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+cHRyOworICAgIFB5X3NzaXplX3QgaTsKKworICAgIC8qIGNoZWNrIG1pbmltYWwgbGVuZ3RoICovCisgICAgaWYgKHBhdHRlcm5bM10gJiYgZW5kIC0gcHRyIDwgcGF0dGVyblszXSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiBjaGVjayBrbm93biBwcmVmaXggKi8KKyAgICBpZiAocGF0dGVyblsyXSAmIFNSRV9JTkZPX1BSRUZJWCAmJiBwYXR0ZXJuWzVdID4gMSkgeworICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGF0dGVybls1XTsgaSsrKQorICAgICAgICAgICAgaWYgKChTUkVfQ09ERSkgcHRyW2ldICE9IHBhdHRlcm5bNyArIGldKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcGF0dGVyblswXSArIDIgKiBwYXR0ZXJuWzZdOworICAgIH0KKyAgICByZXR1cm4gcGF0dGVyblswXTsKK30KKyNlbmRpZgorCisvKiBUaGUgbWFjcm9zIGJlbG93IHNob3VsZCBiZSB1c2VkIHRvIHByb3RlY3QgcmVjdXJzaXZlIFNSRShtYXRjaCkoKQorICogY2FsbHMgdGhhdCAqZmFpbGVkKiBhbmQgZG8gKm5vdCogcmV0dXJuIGltbWVkaWF0ZWx5IChJT1csIHRob3NlCisgKiB0aGF0IHdpbGwgYmFja3RyYWNrKS4gRXhwbGFpbmluZzoKKyAqCisgKiAtIFJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgcmV0dXJuZWQgdHJ1ZTogdGhhdCdzIHVzdWFsbHkgYSBzdWNjZXNzCisgKiAgIChiZXNpZGVzIGF0eXBpY2FsIGNhc2VzIGxpa2UgQVNTRVJUX05PVCksIHRoZXJlZm9yZSB0aGVyZSdzIG5vCisgKiAgIHJlYXNvbiB0byByZXN0b3JlIGxhc3RtYXJrOworICoKKyAqIC0gUmVjdXJzaXZlIFNSRShtYXRjaCkoKSByZXR1cm5lZCBmYWxzZSBidXQgdGhlIGN1cnJlbnQgU1JFKG1hdGNoKSgpCisgKiAgIGlzIHJldHVybmluZyB0byB0aGUgY2FsbGVyOiBJZiB0aGUgY3VycmVudCBTUkUobWF0Y2gpKCkgaXMgdGhlCisgKiAgIHRvcCBmdW5jdGlvbiBvZiB0aGUgcmVjdXJzaW9uLCByZXR1cm5pbmcgZmFsc2Ugd2lsbCBiZSBhIG1hdGNoaW5nCisgKiAgIGZhaWx1cmUsIGFuZCBpdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBsYXN0bWFyayBpcyBwb2ludGluZyB0by4KKyAqICAgSWYgaXQncyAqbm90KiB0aGUgdG9wIGZ1bmN0aW9uLCBpdCB3aWxsIGJlIGEgcmVjdXJzaXZlIFNSRShtYXRjaCkoKQorICogICBmYWlsdXJlIGJ5IGl0c2VsZiwgYW5kIHRoZSBjYWxsaW5nIFNSRShtYXRjaCkoKSB3aWxsIGhhdmUgdG8gZGVhbAorICogICB3aXRoIHRoZSBmYWlsdXJlIGJ5IHRoZSBzYW1lIHJ1bGVzIGV4cGxhaW5lZCBoZXJlIChpdCB3aWxsIHJlc3RvcmUKKyAqICAgbGFzdG1hcmsgYnkgaXRzZWxmIGlmIG5lY2Vzc2FyeSk7CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIGZhbHNlLCBhbmQgd2lsbCBjb250aW51ZSB0aGUKKyAqICAgb3V0c2lkZSAnZm9yJyBsb29wOiBtdXN0IGJlIHByb3RlY3RlZCB3aGVuIGJyZWFraW5nLCBzaW5jZSB0aGUgbmV4dAorICogICBPUCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcms7CisgKgorICogLSBSZWN1cnNpdmUgU1JFKG1hdGNoKSgpIHJldHVybmVkIGZhbHNlLCBhbmQgd2lsbCBiZSBjYWxsZWQgYWdhaW4KKyAqICAgaW5zaWRlIGEgbG9jYWwgZm9yL3doaWxlIGxvb3A6IG11c3QgYmUgcHJvdGVjdGVkIGJldHdlZW4gZWFjaAorICogICBsb29wIGl0ZXJhdGlvbiwgc2luY2UgdGhlIHJlY3Vyc2l2ZSBTUkUobWF0Y2gpKCkgY291bGQgZG8gYW55dGhpbmcsCisgKiAgIGFuZCBjb3VsZCBwb3RlbnRpYWxseSBkZXBlbmQgb24gbGFzdG1hcmsuCisgKgorICogRm9yIG1vcmUgaW5mb3JtYXRpb24sIGNoZWNrIHRoZSBkaXNjdXNzaW9uIGF0IFNGIHBhdGNoICM3MTI5MDAuCisgKi8KKyNkZWZpbmUgTEFTVE1BUktfU0FWRSgpICAgICBcCisgICAgZG8geyBcCisgICAgICAgIGN0eC0+bGFzdG1hcmsgPSBzdGF0ZS0+bGFzdG1hcms7IFwKKyAgICAgICAgY3R4LT5sYXN0aW5kZXggPSBzdGF0ZS0+bGFzdGluZGV4OyBcCisgICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgTEFTVE1BUktfUkVTVE9SRSgpICBcCisgICAgZG8geyBcCisgICAgICAgIHN0YXRlLT5sYXN0bWFyayA9IGN0eC0+bGFzdG1hcms7IFwKKyAgICAgICAgc3RhdGUtPmxhc3RpbmRleCA9IGN0eC0+bGFzdGluZGV4OyBcCisgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBSRVRVUk5fRVJST1IoaSkgZG8geyByZXR1cm4gaTsgfSB3aGlsZSgwKQorI2RlZmluZSBSRVRVUk5fRkFJTFVSRSBkbyB7IHJldCA9IDA7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQorI2RlZmluZSBSRVRVUk5fU1VDQ0VTUyBkbyB7IHJldCA9IDE7IGdvdG8gZXhpdDsgfSB3aGlsZSgwKQorCisjZGVmaW5lIFJFVFVSTl9PTl9FUlJPUihpKSBcCisgICAgZG8geyBpZiAoaSA8IDApIFJFVFVSTl9FUlJPUihpKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUkVUVVJOX09OX1NVQ0NFU1MoaSkgXAorICAgIGRvIHsgUkVUVVJOX09OX0VSUk9SKGkpOyBpZiAoaSA+IDApIFJFVFVSTl9TVUNDRVNTOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRVRVUk5fT05fRkFJTFVSRShpKSBcCisgICAgZG8geyBSRVRVUk5fT05fRVJST1IoaSk7IGlmIChpID09IDApIFJFVFVSTl9GQUlMVVJFOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNGWSh4KSAjeAorCisjZGVmaW5lIERBVEFfU1RBQ0tfQUxMT0Moc3RhdGUsIHR5cGUsIHB0cikgXAorZG8geyBcCisgICAgYWxsb2NfcG9zID0gc3RhdGUtPmRhdGFfc3RhY2tfYmFzZTsgXAorICAgIFRSQUNFKCgiYWxsb2NhdGluZyAlcyBpbiAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIFNGWSh0eXBlKSwgYWxsb2NfcG9zLCBzaXplb2YodHlwZSkpKTsgXAorICAgIGlmIChzaXplb2YodHlwZSkgPiBzdGF0ZS0+ZGF0YV9zdGFja19zaXplIC0gYWxsb2NfcG9zKSB7IFwKKyAgICAgICAgaW50IGogPSBkYXRhX3N0YWNrX2dyb3coc3RhdGUsIHNpemVvZih0eXBlKSk7IFwKKyAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAorICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAorICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsgXAorICAgIH0gXAorICAgIHB0ciA9ICh0eXBlKikoc3RhdGUtPmRhdGFfc3RhY2srYWxsb2NfcG9zKTsgXAorICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgKz0gc2l6ZW9mKHR5cGUpOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLCB0eXBlLCBwdHIsIHBvcykgXAorZG8geyBcCisgICAgVFJBQ0UoKCJsb29raW5nIHVwICVzIGF0ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIFNGWSh0eXBlKSwgcG9zKSk7IFwKKyAgICBwdHIgPSAodHlwZSopKHN0YXRlLT5kYXRhX3N0YWNrK3Bvcyk7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19QVVNIKHN0YXRlLCBkYXRhLCBzaXplKSBcCitkbyB7IFwKKyAgICBUUkFDRSgoImNvcHkgZGF0YSBpbiAlcCB0byAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UsIHNpemUpKTsgXAorICAgIGlmIChzaXplID4gc3RhdGUtPmRhdGFfc3RhY2tfc2l6ZSAtIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UpIHsgXAorICAgICAgICBpbnQgaiA9IGRhdGFfc3RhY2tfZ3JvdyhzdGF0ZSwgc2l6ZSk7IFwKKyAgICAgICAgaWYgKGogPCAwKSByZXR1cm4gajsgXAorICAgICAgICBpZiAoY3R4X3BvcyAhPSAtMSkgXAorICAgICAgICAgICAgREFUQV9TVEFDS19MT09LVVBfQVQoc3RhdGUsIFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsgXAorICAgIH0gXAorICAgIG1lbWNweShzdGF0ZS0+ZGF0YV9zdGFjaytzdGF0ZS0+ZGF0YV9zdGFja19iYXNlLCBkYXRhLCBzaXplKTsgXAorICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2UgKz0gc2l6ZTsgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgZGF0YSwgc2l6ZSwgZGlzY2FyZCkgXAorZG8geyBcCisgICAgVFJBQ0UoKCJjb3B5IGRhdGEgdG8gJXAgZnJvbSAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSkpOyBcCisgICAgbWVtY3B5KGRhdGEsIHN0YXRlLT5kYXRhX3N0YWNrK3N0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSk7IFwKKyAgICBpZiAoZGlzY2FyZCkgXAorICAgICAgICBzdGF0ZS0+ZGF0YV9zdGFja19iYXNlIC09IHNpemU7IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgREFUQV9TVEFDS19QT1BfRElTQ0FSRChzdGF0ZSwgc2l6ZSkgXAorZG8geyBcCisgICAgVFJBQ0UoKCJkaXNjYXJkIGRhdGEgZnJvbSAlIiBQWV9GT1JNQVRfU0laRV9UICJkICIgXAorICAgICAgICAgICAiKCUiIFBZX0ZPUk1BVF9TSVpFX1QgImQpXG4iLCBcCisgICAgICAgICAgIHN0YXRlLT5kYXRhX3N0YWNrX2Jhc2Utc2l6ZSwgc2l6ZSkpOyBcCisgICAgc3RhdGUtPmRhdGFfc3RhY2tfYmFzZSAtPSBzaXplOyBcCit9IHdoaWxlKDApCisKKyNkZWZpbmUgREFUQV9QVVNIKHgpIFwKKyAgICBEQVRBX1NUQUNLX1BVU0goc3RhdGUsICh4KSwgc2l6ZW9mKCooeCkpKQorI2RlZmluZSBEQVRBX1BPUCh4KSBcCisgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsICh4KSwgc2l6ZW9mKCooeCkpLCAxKQorI2RlZmluZSBEQVRBX1BPUF9ESVNDQVJEKHgpIFwKKyAgICBEQVRBX1NUQUNLX1BPUF9ESVNDQVJEKHN0YXRlLCBzaXplb2YoKih4KSkpCisjZGVmaW5lIERBVEFfQUxMT0ModCxwKSBcCisgICAgREFUQV9TVEFDS19BTExPQyhzdGF0ZSwgdCwgcCkKKyNkZWZpbmUgREFUQV9MT09LVVBfQVQodCxwLHBvcykgXAorICAgIERBVEFfU1RBQ0tfTE9PS1VQX0FUKHN0YXRlLHQscCxwb3MpCisKKyNkZWZpbmUgTUFSS19QVVNIKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIGkgPSBsYXN0bWFyazsgLyogY3R4LT5sYXN0bWFyayBtYXkgY2hhbmdlIGlmIHJlYWxsb2NhdGVkICovIFwKKyAgICAgICAgREFUQV9TVEFDS19QVVNIKHN0YXRlLCBzdGF0ZS0+bWFyaywgKGkrMSkqc2l6ZW9mKHZvaWQqKSk7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBNQVJLX1BPUChsYXN0bWFyaykgXAorICAgIGRvIGlmIChsYXN0bWFyayA+IDApIHsgXAorICAgICAgICBEQVRBX1NUQUNLX1BPUChzdGF0ZSwgc3RhdGUtPm1hcmssIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopLCAxKTsgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIE1BUktfUE9QX0tFRVAobGFzdG1hcmspIFwKKyAgICBkbyBpZiAobGFzdG1hcmsgPiAwKSB7IFwKKyAgICAgICAgREFUQV9TVEFDS19QT1Aoc3RhdGUsIHN0YXRlLT5tYXJrLCAobGFzdG1hcmsrMSkqc2l6ZW9mKHZvaWQqKSwgMCk7IFwKKyAgICB9IHdoaWxlICgwKQorI2RlZmluZSBNQVJLX1BPUF9ESVNDQVJEKGxhc3RtYXJrKSBcCisgICAgZG8gaWYgKGxhc3RtYXJrID4gMCkgeyBcCisgICAgICAgIERBVEFfU1RBQ0tfUE9QX0RJU0NBUkQoc3RhdGUsIChsYXN0bWFyaysxKSpzaXplb2Yodm9pZCopKTsgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSlVNUF9OT05FICAgICAgICAgICAgMAorI2RlZmluZSBKVU1QX01BWF9VTlRJTF8xICAgICAxCisjZGVmaW5lIEpVTVBfTUFYX1VOVElMXzIgICAgIDIKKyNkZWZpbmUgSlVNUF9NQVhfVU5USUxfMyAgICAgMworI2RlZmluZSBKVU1QX01JTl9VTlRJTF8xICAgICA0CisjZGVmaW5lIEpVTVBfTUlOX1VOVElMXzIgICAgIDUKKyNkZWZpbmUgSlVNUF9NSU5fVU5USUxfMyAgICAgNgorI2RlZmluZSBKVU1QX1JFUEVBVCAgICAgICAgICA3CisjZGVmaW5lIEpVTVBfUkVQRUFUX09ORV8xICAgIDgKKyNkZWZpbmUgSlVNUF9SRVBFQVRfT05FXzIgICAgOQorI2RlZmluZSBKVU1QX01JTl9SRVBFQVRfT05FICAxMAorI2RlZmluZSBKVU1QX0JSQU5DSCAgICAgICAgICAxMQorI2RlZmluZSBKVU1QX0FTU0VSVCAgICAgICAgICAxMgorI2RlZmluZSBKVU1QX0FTU0VSVF9OT1QgICAgICAxMworCisjZGVmaW5lIERPX0pVTVBYKGp1bXB2YWx1ZSwganVtcGxhYmVsLCBuZXh0cGF0dGVybiwgbWF0Y2hhbGwpIFwKKyAgICBEQVRBX0FMTE9DKFNSRShtYXRjaF9jb250ZXh0KSwgbmV4dGN0eCk7IFwKKyAgICBuZXh0Y3R4LT5sYXN0X2N0eF9wb3MgPSBjdHhfcG9zOyBcCisgICAgbmV4dGN0eC0+anVtcCA9IGp1bXB2YWx1ZTsgXAorICAgIG5leHRjdHgtPnBhdHRlcm4gPSBuZXh0cGF0dGVybjsgXAorICAgIG5leHRjdHgtPm1hdGNoX2FsbCA9IG1hdGNoYWxsOyBcCisgICAgY3R4X3BvcyA9IGFsbG9jX3BvczsgXAorICAgIGN0eCA9IG5leHRjdHg7IFwKKyAgICBnb3RvIGVudHJhbmNlOyBcCisgICAganVtcGxhYmVsOiBcCisgICAgd2hpbGUgKDApIC8qIGdjYyBkb2Vzbid0IGxpa2UgbGFiZWxzIGF0IGVuZCBvZiBzY29wZXMgKi8gXAorCisjZGVmaW5lIERPX0pVTVAoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuKSBcCisgICAgRE9fSlVNUFgoanVtcHZhbHVlLCBqdW1wbGFiZWwsIG5leHRwYXR0ZXJuLCBjdHgtPm1hdGNoX2FsbCkKKworI2RlZmluZSBET19KVU1QMChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4pIFwKKyAgICBET19KVU1QWChqdW1wdmFsdWUsIGp1bXBsYWJlbCwgbmV4dHBhdHRlcm4sIDApCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBQeV9zc2l6ZV90IGxhc3RfY3R4X3BvczsKKyAgICBQeV9zc2l6ZV90IGp1bXA7CisgICAgU1JFX0NIQVIqIHB0cjsKKyAgICBTUkVfQ09ERSogcGF0dGVybjsKKyAgICBQeV9zc2l6ZV90IGNvdW50OworICAgIFB5X3NzaXplX3QgbGFzdG1hcms7CisgICAgUHlfc3NpemVfdCBsYXN0aW5kZXg7CisgICAgdW5pb24geworICAgICAgICBTUkVfQ09ERSBjaHI7CisgICAgICAgIFNSRV9SRVBFQVQqIHJlcDsKKyAgICB9IHU7CisgICAgaW50IG1hdGNoX2FsbDsKK30gU1JFKG1hdGNoX2NvbnRleHQpOworCisvKiBjaGVjayBpZiBzdHJpbmcgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4gIHJldHVybnMgPDAgZm9yCisgICBlcnJvciwgMCBmb3IgZmFpbHVyZSwgYW5kIDEgZm9yIHN1Y2Nlc3MgKi8KK0xPQ0FMKFB5X3NzaXplX3QpCitTUkUobWF0Y2gpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuLCBpbnQgbWF0Y2hfYWxsKQoreworICAgIFNSRV9DSEFSKiBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgIFB5X3NzaXplX3QgYWxsb2NfcG9zLCBjdHhfcG9zID0gLTE7CisgICAgUHlfc3NpemVfdCBpLCByZXQgPSAwOworICAgIFB5X3NzaXplX3QganVtcDsKKyAgICB1bnNpZ25lZCBpbnQgc2lnY291bnQ9MDsKKworICAgIFNSRShtYXRjaF9jb250ZXh0KSogY3R4OworICAgIFNSRShtYXRjaF9jb250ZXh0KSogbmV4dGN0eDsKKworICAgIFRSQUNFKCgifCVwfCVwfEVOVEVSXG4iLCBwYXR0ZXJuLCBzdGF0ZS0+cHRyKSk7CisKKyAgICBEQVRBX0FMTE9DKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4KTsKKyAgICBjdHgtPmxhc3RfY3R4X3BvcyA9IC0xOworICAgIGN0eC0+anVtcCA9IEpVTVBfTk9ORTsKKyAgICBjdHgtPnBhdHRlcm4gPSBwYXR0ZXJuOworICAgIGN0eC0+bWF0Y2hfYWxsID0gbWF0Y2hfYWxsOworICAgIGN0eF9wb3MgPSBhbGxvY19wb3M7CisKK2VudHJhbmNlOgorCisgICAgY3R4LT5wdHIgPSAoU1JFX0NIQVIgKilzdGF0ZS0+cHRyOworCisgICAgaWYgKGN0eC0+cGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgeworICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLworICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gLi4uICovCisgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bM10gJiYgKFB5X3VpbnRwdHJfdCkoZW5kIC0gY3R4LT5wdHIpIDwgY3R4LT5wYXR0ZXJuWzNdKSB7CisgICAgICAgICAgICBUUkFDRSgoInJlamVjdCAoZ290ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQgY2hhcnMsICIKKyAgICAgICAgICAgICAgICAgICAibmVlZCAlIiBQWV9GT1JNQVRfU0laRV9UICJkKVxuIiwKKyAgICAgICAgICAgICAgICAgICBlbmQgLSBjdHgtPnB0ciwgKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblszXSkpOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblsxXSArIDE7CisgICAgfQorCisgICAgZm9yICg7OykgeworICAgICAgICArK3NpZ2NvdW50OworICAgICAgICBpZiAoKDAgPT0gKHNpZ2NvdW50ICYgMHhmZmYpKSAmJiBQeUVycl9DaGVja1NpZ25hbHMoKSkKKyAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfSU5URVJSVVBURUQpOworCisgICAgICAgIHN3aXRjaCAoKmN0eC0+cGF0dGVybisrKSB7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTUFSSzoKKyAgICAgICAgICAgIC8qIHNldCBtYXJrICovCisgICAgICAgICAgICAvKiA8TUFSSz4gPGdpZD4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE1BUksgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgaWYgKGkgJiAxKQorICAgICAgICAgICAgICAgIHN0YXRlLT5sYXN0aW5kZXggPSBpLzIgKyAxOworICAgICAgICAgICAgaWYgKGkgPiBzdGF0ZS0+bGFzdG1hcmspIHsKKyAgICAgICAgICAgICAgICAvKiBzdGF0ZS0+bGFzdG1hcmsgaXMgdGhlIGhpZ2hlc3QgdmFsaWQgaW5kZXggaW4gdGhlCisgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1hcmsgYXJyYXkuICBJZiBpdCBpcyBpbmNyZWFzZWQgYnkgbW9yZSB0aGFuIDEsCisgICAgICAgICAgICAgICAgICAgdGhlIGludGVydmVuaW5nIG1hcmtzIG11c3QgYmUgc2V0IHRvIE5VTEwgdG8gc2lnbmFsCisgICAgICAgICAgICAgICAgICAgdGhhdCB0aGVzZSBtYXJrcyBoYXZlIG5vdCBiZWVuIGVuY291bnRlcmVkLiAqLworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaiA9IHN0YXRlLT5sYXN0bWFyayArIDE7CisgICAgICAgICAgICAgICAgd2hpbGUgKGogPCBpKQorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bWFya1tqKytdID0gTlVMTDsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+bGFzdG1hcmsgPSBpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGUtPm1hcmtbaV0gPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTElURVJBTDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGxpdGVyYWwgc3RyaW5nICovCisgICAgICAgICAgICAvKiA8TElURVJBTD4gPGNvZGU+ICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxMSVRFUkFMICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgKFNSRV9DT0RFKSBjdHgtPnB0clswXSAhPSBjdHgtPnBhdHRlcm5bMF0pCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4rKzsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9OT1RfTElURVJBTDoKKyAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIHRoYXQgaXMgbm90IGxpdGVyYWwgY2hhcmFjdGVyICovCisgICAgICAgICAgICAvKiA8Tk9UX0xJVEVSQUw+IDxjb2RlPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8Tk9UX0xJVEVSQUwgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgKmN0eC0+cGF0dGVybikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAoU1JFX0NPREUpIGN0eC0+cHRyWzBdID09IGN0eC0+cGF0dGVyblswXSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX1NVQ0NFU1M6CisgICAgICAgICAgICAvKiBlbmQgb2YgcGF0dGVybiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U1VDQ0VTU1xuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKCFjdHgtPm1hdGNoX2FsbCB8fCBjdHgtPnB0ciA9PSBzdGF0ZS0+ZW5kKSB7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQVQ6CisgICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBwb3NpdGlvbiAqLworICAgICAgICAgICAgLyogPEFUPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFUICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoIVNSRShhdCkoc3RhdGUsIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfQ0FURUdPUlk6CisgICAgICAgICAgICAvKiBtYXRjaCBhdCBnaXZlbiBjYXRlZ29yeSAqLworICAgICAgICAgICAgLyogPENBVEVHT1JZPiA8Y29kZT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfENBVEVHT1JZICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsICpjdHgtPnBhdHRlcm4pKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIXNyZV9jYXRlZ29yeShjdHgtPnBhdHRlcm5bMF0sIGN0eC0+cHRyWzBdKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FOWToKKyAgICAgICAgICAgIC8qIG1hdGNoIGFueXRoaW5nIChleGNlcHQgYSBuZXdsaW5lKSAqLworICAgICAgICAgICAgLyogPEFOWT4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFOWVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCBTUkVfSVNfTElORUJSRUFLKGN0eC0+cHRyWzBdKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BTllfQUxMOgorICAgICAgICAgICAgLyogbWF0Y2ggYW55dGhpbmcgKi8KKyAgICAgICAgICAgIC8qIDxBTllfQUxMPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QU5ZX0FMTFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9JTjoKKyAgICAgICAgICAgIC8qIG1hdGNoIHNldCBtZW1iZXIgKG9yIG5vbl9tZW1iZXIpICovCisgICAgICAgICAgICAvKiA8SU4+IDxza2lwPiA8c2V0PiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5cbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGlmIChjdHgtPnB0ciA+PSBlbmQgfHwgIVNSRShjaGFyc2V0KShjdHgtPnBhdHRlcm4gKyAxLCAqY3R4LT5wdHIpKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuICs9IGN0eC0+cGF0dGVyblswXTsKKyAgICAgICAgICAgIGN0eC0+cHRyKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfExJVEVSQUxfSUdOT1JFICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblswXSkpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcigqY3R4LT5wdHIpICE9IHN0YXRlLT5sb3dlcigqY3R4LT5wYXR0ZXJuKSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybisrOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX05PVF9MSVRFUkFMX0lHTk9SRToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfE5PVF9MSVRFUkFMX0lHTk9SRSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLCAqY3R4LT5wYXR0ZXJuKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kIHx8CisgICAgICAgICAgICAgICAgc3RhdGUtPmxvd2VyKCpjdHgtPnB0cikgPT0gc3RhdGUtPmxvd2VyKCpjdHgtPnBhdHRlcm4pKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfSU5fSUdOT1JFOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SU5fSUdOT1JFXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgPj0gZW5kCisgICAgICAgICAgICAgICAgfHwgIVNSRShjaGFyc2V0KShjdHgtPnBhdHRlcm4rMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSlzdGF0ZS0+bG93ZXIoKmN0eC0+cHRyKSkpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0pVTVA6CisgICAgICAgIGNhc2UgU1JFX09QX0lORk86CisgICAgICAgICAgICAvKiBqdW1wIGZvcndhcmQgKi8KKyAgICAgICAgICAgIC8qIDxKVU1QPiA8b2Zmc2V0PiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUCAlZFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPnBhdHRlcm5bMF0pKTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9CUkFOQ0g6CisgICAgICAgICAgICAvKiBhbHRlcm5hdGlvbiAqLworICAgICAgICAgICAgLyogPEJSQU5DSD4gPDA9c2tpcD4gY29kZSA8SlVNUD4gLi4uIDxOVUxMPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QlJBTkNIXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisgICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGlmIChjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIE1BUktfUFVTSChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgIGZvciAoOyBjdHgtPnBhdHRlcm5bMF07IGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoY3R4LT5wYXR0ZXJuWzFdID09IFNSRV9PUF9MSVRFUkFMICYmCisgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICAgICAgIChTUkVfQ09ERSkgKmN0eC0+cHRyICE9IGN0eC0+cGF0dGVyblsyXSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bMV0gPT0gU1JFX09QX0lOICYmCisgICAgICAgICAgICAgICAgICAgIChjdHgtPnB0ciA+PSBlbmQgfHwKKyAgICAgICAgICAgICAgICAgICAgICFTUkUoY2hhcnNldCkoY3R4LT5wYXR0ZXJuICsgMywgKFNSRV9DT0RFKSAqY3R4LT5wdHIpKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9CUkFOQ0gsIGp1bXBfYnJhbmNoLCBjdHgtPnBhdHRlcm4rMSk7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0RJU0NBUkQoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgICAgIE1BUktfUE9QX0tFRVAoY3R4LT5sYXN0bWFyayk7CisgICAgICAgICAgICAgICAgTEFTVE1BUktfUkVTVE9SRSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN0eC0+dS5yZXApCisgICAgICAgICAgICAgICAgTUFSS19QT1BfRElTQ0FSRChjdHgtPmxhc3RtYXJrKTsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX1JFUEVBVF9PTkU6CisgICAgICAgICAgICAvKiBtYXRjaCByZXBlYXRlZCBzZXF1ZW5jZSAobWF4aW1pemluZyByZWdleHApICovCisKKyAgICAgICAgICAgIC8qIHRoaXMgb3BlcmF0b3Igb25seSB3b3JrcyBpZiB0aGUgcmVwZWF0ZWQgaXRlbSBpcworICAgICAgICAgICAgICAgZXhhY3RseSBvbmUgY2hhcmFjdGVyIHdpZGUsIGFuZCB3ZSdyZSBub3QgYWxyZWFkeQorICAgICAgICAgICAgICAgY29sbGVjdGluZyBiYWNrdHJhY2tpbmcgcG9pbnRzLiAgZm9yIG90aGVyIGNhc2VzLAorICAgICAgICAgICAgICAgdXNlIHRoZSBNQVhfUkVQRUFUIG9wZXJhdG9yICovCisKKyAgICAgICAgICAgIC8qIDxSRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVQRUFUX09ORSAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOworCisgICAgICAgICAgICBpZiAoKFB5X3NzaXplX3QpIGN0eC0+cGF0dGVyblsxXSA+IGVuZCAtIGN0eC0+cHRyKQorICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOyAvKiBjYW5ub3QgbWF0Y2ggKi8KKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzJdKTsKKyAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworICAgICAgICAgICAgY3R4LT5jb3VudCA9IHJldDsKKyAgICAgICAgICAgIGN0eC0+cHRyICs9IGN0eC0+Y291bnQ7CisKKyAgICAgICAgICAgIC8qIHdoZW4gd2UgYXJyaXZlIGhlcmUsIGNvdW50IGNvbnRhaW5zIHRoZSBudW1iZXIgb2YKKyAgICAgICAgICAgICAgIG1hdGNoZXMsIGFuZCBjdHgtPnB0ciBwb2ludHMgdG8gdGhlIHRhaWwgb2YgdGhlIHRhcmdldAorICAgICAgICAgICAgICAgc3RyaW5nLiAgY2hlY2sgaWYgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gbWF0Y2hlcywKKyAgICAgICAgICAgICAgIGFuZCBiYWNrdHJhY2sgaWYgbm90LiAqLworCisgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgICAgIGlmIChjdHgtPnBhdHRlcm5bY3R4LT5wYXR0ZXJuWzBdXSA9PSBTUkVfT1BfU1VDQ0VTUyAmJgorICAgICAgICAgICAgICAgIGN0eC0+cHRyID09IHN0YXRlLT5lbmQpIHsKKyAgICAgICAgICAgICAgICAvKiB0YWlsIGlzIGVtcHR5LiAgd2UncmUgZmluaXNoZWQgKi8KKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIExBU1RNQVJLX1NBVkUoKTsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9MSVRFUkFMKSB7CisgICAgICAgICAgICAgICAgLyogdGFpbCBzdGFydHMgd2l0aCBhIGxpdGVyYWwuIHNraXAgcG9zaXRpb25zIHdoZXJlCisgICAgICAgICAgICAgICAgICAgdGhlIHJlc3Qgb2YgdGhlIHBhdHRlcm4gY2Fubm90IHBvc3NpYmx5IG1hdGNoICovCisgICAgICAgICAgICAgICAgY3R4LT51LmNociA9IGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF0rMV07CisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoY3R4LT5jb3VudCA+PSAoUHlfc3NpemVfdCkgY3R4LT5wYXR0ZXJuWzFdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4LT5wdHIgPj0gZW5kIHx8ICpjdHgtPnB0ciAhPSBjdHgtPnUuY2hyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHItLTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+Y291bnQtLTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8xLCBqdW1wX3JlcGVhdF9vbmVfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKworICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGdlbmVyYWwgY2FzZSAqLworICAgICAgICAgICAgICAgIHdoaWxlIChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfUkVQRUFUX09ORV8yLCBqdW1wX3JlcGVhdF9vbmVfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4rY3R4LT5wYXR0ZXJuWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBjdHgtPnB0ci0tOworICAgICAgICAgICAgICAgICAgICBjdHgtPmNvdW50LS07CisgICAgICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9NSU5fUkVQRUFUX09ORToKKyAgICAgICAgICAgIC8qIG1hdGNoIHJlcGVhdGVkIHNlcXVlbmNlIChtaW5pbWl6aW5nIHJlZ2V4cCkgKi8KKworICAgICAgICAgICAgLyogdGhpcyBvcGVyYXRvciBvbmx5IHdvcmtzIGlmIHRoZSByZXBlYXRlZCBpdGVtIGlzCisgICAgICAgICAgICAgICBleGFjdGx5IG9uZSBjaGFyYWN0ZXIgd2lkZSwgYW5kIHdlJ3JlIG5vdCBhbHJlYWR5CisgICAgICAgICAgICAgICBjb2xsZWN0aW5nIGJhY2t0cmFja2luZyBwb2ludHMuICBmb3Igb3RoZXIgY2FzZXMsCisgICAgICAgICAgICAgICB1c2UgdGhlIE1JTl9SRVBFQVQgb3BlcmF0b3IgKi8KKworICAgICAgICAgICAgLyogPE1JTl9SRVBFQVRfT05FPiA8c2tpcD4gPDE9bWluPiA8Mj1tYXg+IGl0ZW0gPFNVQ0NFU1M+IHRhaWwgKi8KKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUlOX1JFUEVBVF9PTkUgJWQgJWRcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIsCisgICAgICAgICAgICAgICAgICAgY3R4LT5wYXR0ZXJuWzFdLCBjdHgtPnBhdHRlcm5bMl0pKTsKKworICAgICAgICAgICAgaWYgKChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0gPiBlbmQgLSBjdHgtPnB0cikKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsgLyogY2Fubm90IG1hdGNoICovCisKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVyblsxXSA9PSAwKQorICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSAwOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLyogY291bnQgdXNpbmcgcGF0dGVybiBtaW4gYXMgdGhlIG1heGltdW0gKi8KKyAgICAgICAgICAgICAgICByZXQgPSBTUkUoY291bnQpKHN0YXRlLCBjdHgtPnBhdHRlcm4rMywgY3R4LT5wYXR0ZXJuWzFdKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBEQVRBX0xPT0tVUF9BVChTUkUobWF0Y2hfY29udGV4dCksIGN0eCwgY3R4X3Bvcyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IChQeV9zc2l6ZV90KSBjdHgtPnBhdHRlcm5bMV0pCisgICAgICAgICAgICAgICAgICAgIC8qIGRpZG4ndCBtYXRjaCBtaW5pbXVtIG51bWJlciBvZiB0aW1lcyAqLworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICAvKiBhZHZhbmNlIHBhc3QgbWluaW11bSBtYXRjaGVzIG9mIHJlcGVhdCAqLworICAgICAgICAgICAgICAgIGN0eC0+Y291bnQgPSByZXQ7CisgICAgICAgICAgICAgICAgY3R4LT5wdHIgKz0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGN0eC0+cGF0dGVybltjdHgtPnBhdHRlcm5bMF1dID09IFNSRV9PUF9TVUNDRVNTICYmCisgICAgICAgICAgICAgICAgKCFtYXRjaF9hbGwgfHwgY3R4LT5wdHIgPT0gc3RhdGUtPmVuZCkpIHsKKyAgICAgICAgICAgICAgICAvKiB0YWlsIGlzIGVtcHR5LiAgd2UncmUgZmluaXNoZWQgKi8KKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCisgICAgICAgICAgICAgICAgTEFTVE1BUktfU0FWRSgpOworICAgICAgICAgICAgICAgIHdoaWxlICgoUHlfc3NpemVfdCljdHgtPnBhdHRlcm5bMl0gPT0gU1JFX01BWFJFUEVBVAorICAgICAgICAgICAgICAgICAgICAgICB8fCBjdHgtPmNvdW50IDw9IChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsyXSkgeworICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fUkVQRUFUX09ORSxqdW1wX21pbl9yZXBlYXRfb25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9TVUNDRVNTOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU1JFKGNvdW50KShzdGF0ZSwgY3R4LT5wYXR0ZXJuKzMsIDEpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgREFUQV9MT09LVVBfQVQoU1JFKG1hdGNoX2NvbnRleHQpLCBjdHgsIGN0eF9wb3MpOworICAgICAgICAgICAgICAgICAgICBpZiAocmV0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHJldCA9PSAxKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIrKzsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5jb3VudCsrOworICAgICAgICAgICAgICAgICAgICBMQVNUTUFSS19SRVNUT1JFKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfUkVQRUFUOgorICAgICAgICAgICAgLyogY3JlYXRlIHJlcGVhdCBjb250ZXh0LiAgYWxsIHRoZSBoYXJkIHdvcmsgaXMgZG9uZQorICAgICAgICAgICAgICAgYnkgdGhlIFVOVElMIG9wZXJhdG9yIChNQVhfVU5USUwsIE1JTl9VTlRJTCkgKi8KKyAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8VU5USUw+IHRhaWwgKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFJFUEVBVCAlZCAlZFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0ciwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm5bMV0sIGN0eC0+cGF0dGVyblsyXSkpOworCisgICAgICAgICAgICAvKiBpbnN0YWxsIG5ldyByZXBlYXQgY29udGV4dCAqLworICAgICAgICAgICAgY3R4LT51LnJlcCA9IChTUkVfUkVQRUFUKikgUHlPYmplY3RfTUFMTE9DKHNpemVvZigqY3R4LT51LnJlcCkpOworICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gLTE7CisgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuID0gY3R4LT5wYXR0ZXJuOworICAgICAgICAgICAgY3R4LT51LnJlcC0+cHJldiA9IHN0YXRlLT5yZXBlYXQ7CisgICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IE5VTEw7CisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcDsKKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgRE9fSlVNUChKVU1QX1JFUEVBVCwganVtcF9yZXBlYXQsIGN0eC0+cGF0dGVybitjdHgtPnBhdHRlcm5bMF0pOworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXAtPnByZXY7CisgICAgICAgICAgICBQeU9iamVjdF9GUkVFKGN0eC0+dS5yZXApOworCisgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKworICAgICAgICBjYXNlIFNSRV9PUF9NQVhfVU5USUw6CisgICAgICAgICAgICAvKiBtYXhpbWl6aW5nIHJlcGVhdCAqLworICAgICAgICAgICAgLyogPFJFUEVBVD4gPHNraXA+IDwxPW1pbj4gPDI9bWF4PiBpdGVtIDxNQVhfVU5USUw+IHRhaWwgKi8KKworICAgICAgICAgICAgLyogRklYTUU6IHdlIHByb2JhYmx5IG5lZWQgdG8gZGVhbCB3aXRoIHplcm8td2lkdGgKKyAgICAgICAgICAgICAgIG1hdGNoZXMgaW4gaGVyZS4uLiAqLworCisgICAgICAgICAgICBjdHgtPnUucmVwID0gc3RhdGUtPnJlcGVhdDsKKyAgICAgICAgICAgIGlmICghY3R4LT51LnJlcCkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRVJST1IoU1JFX0VSUk9SX1NUQVRFKTsKKworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworCisgICAgICAgICAgICBjdHgtPmNvdW50ID0gY3R4LT51LnJlcC0+Y291bnQrMTsKKworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8TUFYX1VOVElMICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5jb3VudCkpOworCisgICAgICAgICAgICBpZiAoY3R4LT5jb3VudCA8IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzFdKSB7CisgICAgICAgICAgICAgICAgLyogbm90IGVub3VnaCBtYXRjaGVzICovCisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50OworICAgICAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NQVhfVU5USUxfMSwganVtcF9tYXhfdW50aWxfMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPnBhdHRlcm4rMyk7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudC0xOworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMl0gfHwKKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdID09IFNSRV9NQVhSRVBFQVQpICYmCisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciAhPSBjdHgtPnUucmVwLT5sYXN0X3B0cikgeworICAgICAgICAgICAgICAgIC8qIHdlIG1heSBoYXZlIGVub3VnaCBtYXRjaGVzLCBidXQgaWYgd2UgY2FuCisgICAgICAgICAgICAgICAgICAgbWF0Y2ggYW5vdGhlciBpdGVtLCBkbyBzbyAqLworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisgICAgICAgICAgICAgICAgTUFSS19QVVNIKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgIC8qIHplcm8td2lkdGggbWF0Y2ggcHJvdGVjdGlvbiAqLworICAgICAgICAgICAgICAgIERBVEFfUFVTSCgmY3R4LT51LnJlcC0+bGFzdF9wdHIpOworICAgICAgICAgICAgICAgIGN0eC0+dS5yZXAtPmxhc3RfcHRyID0gc3RhdGUtPnB0cjsKKyAgICAgICAgICAgICAgICBET19KVU1QKEpVTVBfTUFYX1VOVElMXzIsIGp1bXBfbWF4X3VudGlsXzIsCisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5wYXR0ZXJuKzMpOworICAgICAgICAgICAgICAgIERBVEFfUE9QKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICBNQVJLX1BPUF9ESVNDQVJEKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE1BUktfUE9QKGN0eC0+bGFzdG1hcmspOworICAgICAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKKyAgICAgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGNhbm5vdCBtYXRjaCBtb3JlIHJlcGVhdGVkIGl0ZW1zIGhlcmUuICBtYWtlIHN1cmUgdGhlCisgICAgICAgICAgICAgICB0YWlsIG1hdGNoZXMgKi8KKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwLT5wcmV2OworICAgICAgICAgICAgRE9fSlVNUChKVU1QX01BWF9VTlRJTF8zLCBqdW1wX21heF91bnRpbF8zLCBjdHgtPnBhdHRlcm4pOworICAgICAgICAgICAgUkVUVVJOX09OX1NVQ0NFU1MocmV0KTsKKyAgICAgICAgICAgIHN0YXRlLT5yZXBlYXQgPSBjdHgtPnUucmVwOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgY2FzZSBTUkVfT1BfTUlOX1VOVElMOgorICAgICAgICAgICAgLyogbWluaW1pemluZyByZXBlYXQgKi8KKyAgICAgICAgICAgIC8qIDxSRVBFQVQ+IDxza2lwPiA8MT1taW4+IDwyPW1heD4gaXRlbSA8TUlOX1VOVElMPiB0YWlsICovCisKKyAgICAgICAgICAgIGN0eC0+dS5yZXAgPSBzdGF0ZS0+cmVwZWF0OworICAgICAgICAgICAgaWYgKCFjdHgtPnUucmVwKQorICAgICAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfU1RBVEUpOworCisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIGN0eC0+Y291bnQgPSBjdHgtPnUucmVwLT5jb3VudCsxOworCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxNSU5fVU5USUwgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCAlcFxuIiwgY3R4LT5wYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cHRyLCBjdHgtPmNvdW50LCBjdHgtPnUucmVwLT5wYXR0ZXJuKSk7CisKKyAgICAgICAgICAgIGlmIChjdHgtPmNvdW50IDwgKFB5X3NzaXplX3QpIGN0eC0+dS5yZXAtPnBhdHRlcm5bMV0pIHsKKyAgICAgICAgICAgICAgICAvKiBub3QgZW5vdWdoIG1hdGNoZXMgKi8KKyAgICAgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQ7CisgICAgICAgICAgICAgICAgRE9fSlVNUChKVU1QX01JTl9VTlRJTF8xLCBqdW1wX21pbl91bnRpbF8xLAorICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9PTl9FUlJPUihyZXQpOworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+Y291bnQgPSBjdHgtPmNvdW50LTE7CisgICAgICAgICAgICAgICAgc3RhdGUtPnB0ciA9IGN0eC0+cHRyOworICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBMQVNUTUFSS19TQVZFKCk7CisKKyAgICAgICAgICAgIC8qIHNlZSBpZiB0aGUgdGFpbCBtYXRjaGVzICovCisgICAgICAgICAgICBzdGF0ZS0+cmVwZWF0ID0gY3R4LT51LnJlcC0+cHJldjsKKyAgICAgICAgICAgIERPX0pVTVAoSlVNUF9NSU5fVU5USUxfMiwganVtcF9taW5fdW50aWxfMiwgY3R4LT5wYXR0ZXJuKTsKKyAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICBSRVRVUk5fT05fRVJST1IocmV0KTsKKyAgICAgICAgICAgICAgICBSRVRVUk5fU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGUtPnJlcGVhdCA9IGN0eC0+dS5yZXA7CisgICAgICAgICAgICBzdGF0ZS0+cHRyID0gY3R4LT5wdHI7CisKKyAgICAgICAgICAgIExBU1RNQVJLX1JFU1RPUkUoKTsKKworICAgICAgICAgICAgaWYgKChjdHgtPmNvdW50ID49IChQeV9zc2l6ZV90KSBjdHgtPnUucmVwLT5wYXR0ZXJuWzJdCisgICAgICAgICAgICAgICAgJiYgY3R4LT51LnJlcC0+cGF0dGVyblsyXSAhPSBTUkVfTUFYUkVQRUFUKSB8fAorICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPT0gY3R4LT51LnJlcC0+bGFzdF9wdHIpCisgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisKKyAgICAgICAgICAgIGN0eC0+dS5yZXAtPmNvdW50ID0gY3R4LT5jb3VudDsKKyAgICAgICAgICAgIC8qIHplcm8td2lkdGggbWF0Y2ggcHJvdGVjdGlvbiAqLworICAgICAgICAgICAgREFUQV9QVVNIKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7CisgICAgICAgICAgICBjdHgtPnUucmVwLT5sYXN0X3B0ciA9IHN0YXRlLT5wdHI7CisgICAgICAgICAgICBET19KVU1QKEpVTVBfTUlOX1VOVElMXzMsanVtcF9taW5fdW50aWxfMywKKyAgICAgICAgICAgICAgICAgICAgY3R4LT51LnJlcC0+cGF0dGVybiszKTsKKyAgICAgICAgICAgIERBVEFfUE9QKCZjdHgtPnUucmVwLT5sYXN0X3B0cik7CisgICAgICAgICAgICBpZiAocmV0KSB7CisgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgUkVUVVJOX1NVQ0NFU1M7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnUucmVwLT5jb3VudCA9IGN0eC0+Y291bnQtMTsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0cjsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGNhc2UgU1JFX09QX0dST1VQUkVGOgorICAgICAgICAgICAgLyogbWF0Y2ggYmFja3JlZmVyZW5jZSAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8R1JPVVBSRUYgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogcCA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIGUgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKQorICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fCAqY3R4LT5wdHIgIT0gKnApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRl9JR05PUkU6CisgICAgICAgICAgICAvKiBtYXRjaCBiYWNrcmVmZXJlbmNlICovCisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRl9JR05PUkUgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgeworICAgICAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogcCA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIGUgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKQorICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwIDwgZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC0+cHRyID49IGVuZCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sb3dlcigqY3R4LT5wdHIpICE9IHN0YXRlLT5sb3dlcigqcCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVUVVJOX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnB0cisrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgY3R4LT5wYXR0ZXJuKys7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9HUk9VUFJFRl9FWElTVFM6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxHUk9VUFJFRl9FWElTVFMgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzBdKSk7CisgICAgICAgICAgICAvKiA8R1JPVVBSRUZfRVhJU1RTPiA8Z3JvdXA+IDxza2lwPiBjb2RleWVzIDxKVU1QPiBjb2Rlbm8gLi4uICovCisgICAgICAgICAgICBpID0gY3R4LT5wYXR0ZXJuWzBdOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgZ3JvdXByZWYgPSBpK2k7CisgICAgICAgICAgICAgICAgaWYgKGdyb3VwcmVmID49IHN0YXRlLT5sYXN0bWFyaykgeworICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBTUkVfQ0hBUiogcCA9IChTUkVfQ0hBUiopIHN0YXRlLT5tYXJrW2dyb3VwcmVmXTsKKyAgICAgICAgICAgICAgICAgICAgU1JFX0NIQVIqIGUgPSAoU1JFX0NIQVIqKSBzdGF0ZS0+bWFya1tncm91cHJlZisxXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFwIHx8ICFlIHx8IGUgPCBwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gY3R4LT5wYXR0ZXJuWzFdOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjdHgtPnBhdHRlcm4gKz0gMjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1JFX09QX0FTU0VSVDoKKyAgICAgICAgICAgIC8qIGFzc2VydCBzdWJwYXR0ZXJuICovCisgICAgICAgICAgICAvKiA8QVNTRVJUPiA8c2tpcD4gPGJhY2s+IDxwYXR0ZXJuPiAqLworICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8QVNTRVJUICVkXG4iLCBjdHgtPnBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgY3R4LT5wdHIsIGN0eC0+cGF0dGVyblsxXSkpOworICAgICAgICAgICAgaWYgKGN0eC0+cHRyIC0gKFNSRV9DSEFSICopc3RhdGUtPmJlZ2lubmluZyA8IChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsxXSkKKyAgICAgICAgICAgICAgICBSRVRVUk5fRkFJTFVSRTsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgIERPX0pVTVAwKEpVTVBfQVNTRVJULCBqdW1wX2Fzc2VydCwgY3R4LT5wYXR0ZXJuKzIpOworICAgICAgICAgICAgUkVUVVJOX09OX0ZBSUxVUkUocmV0KTsKKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9BU1NFUlRfTk9UOgorICAgICAgICAgICAgLyogYXNzZXJ0IG5vdCBzdWJwYXR0ZXJuICovCisgICAgICAgICAgICAvKiA8QVNTRVJUX05PVD4gPHNraXA+IDxiYWNrPiA8cGF0dGVybj4gKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEFTU0VSVF9OT1QgJWRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgY3R4LT5wYXR0ZXJuWzFdKSk7CisgICAgICAgICAgICBpZiAoY3R4LT5wdHIgLSAoU1JFX0NIQVIgKilzdGF0ZS0+YmVnaW5uaW5nID49IChQeV9zc2l6ZV90KWN0eC0+cGF0dGVyblsxXSkgeworICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBjdHgtPnB0ciAtIGN0eC0+cGF0dGVyblsxXTsKKyAgICAgICAgICAgICAgICBET19KVU1QMChKVU1QX0FTU0VSVF9OT1QsIGp1bXBfYXNzZXJ0X25vdCwgY3R4LT5wYXR0ZXJuKzIpOworICAgICAgICAgICAgICAgIGlmIChyZXQpIHsKKyAgICAgICAgICAgICAgICAgICAgUkVUVVJOX09OX0VSUk9SKHJldCk7CisgICAgICAgICAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGN0eC0+cGF0dGVybiArPSBjdHgtPnBhdHRlcm5bMF07CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNSRV9PUF9GQUlMVVJFOgorICAgICAgICAgICAgLyogaW1tZWRpYXRlIGZhaWx1cmUgKi8KKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEZBSUxVUkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIFJFVFVSTl9GQUlMVVJFOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxVTktOT1dOICVkXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyLAorICAgICAgICAgICAgICAgICAgIGN0eC0+cGF0dGVyblstMV0pKTsKKyAgICAgICAgICAgIFJFVFVSTl9FUlJPUihTUkVfRVJST1JfSUxMRUdBTCk7CisgICAgICAgIH0KKyAgICB9CisKK2V4aXQ6CisgICAgY3R4X3BvcyA9IGN0eC0+bGFzdF9jdHhfcG9zOworICAgIGp1bXAgPSBjdHgtPmp1bXA7CisgICAgREFUQV9QT1BfRElTQ0FSRChjdHgpOworICAgIGlmIChjdHhfcG9zID09IC0xKQorICAgICAgICByZXR1cm4gcmV0OworICAgIERBVEFfTE9PS1VQX0FUKFNSRShtYXRjaF9jb250ZXh0KSwgY3R4LCBjdHhfcG9zKTsKKworICAgIHN3aXRjaCAoanVtcCkgeworICAgICAgICBjYXNlIEpVTVBfTUFYX1VOVElMXzI6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01BWF9VTlRJTF8yXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWF4X3VudGlsXzI7CisgICAgICAgIGNhc2UgSlVNUF9NQVhfVU5USUxfMzoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUFYX1VOVElMXzNcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9tYXhfdW50aWxfMzsKKyAgICAgICAgY2FzZSBKVU1QX01JTl9VTlRJTF8yOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NSU5fVU5USUxfMlxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21pbl91bnRpbF8yOworICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzM6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8zXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzM7CisgICAgICAgIGNhc2UgSlVNUF9CUkFOQ0g6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX0JSQU5DSFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX2JyYW5jaDsKKyAgICAgICAgY2FzZSBKVU1QX01BWF9VTlRJTF8xOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9NQVhfVU5USUxfMVxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX21heF91bnRpbF8xOworICAgICAgICBjYXNlIEpVTVBfTUlOX1VOVElMXzE6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX01JTl9VTlRJTF8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfbWluX3VudGlsXzE7CisgICAgICAgIGNhc2UgSlVNUF9SRVBFQVQ6CisgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxKVU1QX1JFUEVBVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX3JlcGVhdDsKKyAgICAgICAgY2FzZSBKVU1QX1JFUEVBVF9PTkVfMToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfUkVQRUFUX09ORV8xXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfcmVwZWF0X29uZV8xOworICAgICAgICBjYXNlIEpVTVBfUkVQRUFUX09ORV8yOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8SlVNUF9SRVBFQVRfT05FXzJcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9yZXBlYXRfb25lXzI7CisgICAgICAgIGNhc2UgSlVNUF9NSU5fUkVQRUFUX09ORToKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfTUlOX1JFUEVBVF9PTkVcbiIsIGN0eC0+cGF0dGVybiwgY3R4LT5wdHIpKTsKKyAgICAgICAgICAgIGdvdG8ganVtcF9taW5fcmVwZWF0X29uZTsKKyAgICAgICAgY2FzZSBKVU1QX0FTU0VSVDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQVNTRVJUXG4iLCBjdHgtPnBhdHRlcm4sIGN0eC0+cHRyKSk7CisgICAgICAgICAgICBnb3RvIGp1bXBfYXNzZXJ0OworICAgICAgICBjYXNlIEpVTVBfQVNTRVJUX05PVDoKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfEpVTVBfQVNTRVJUX05PVFxuIiwgY3R4LT5wYXR0ZXJuLCBjdHgtPnB0cikpOworICAgICAgICAgICAgZ290byBqdW1wX2Fzc2VydF9ub3Q7CisgICAgICAgIGNhc2UgSlVNUF9OT05FOgorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8UkVUVVJOICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsIGN0eC0+cGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICBjdHgtPnB0ciwgcmV0KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OyAvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KK30KKworTE9DQUwoUHlfc3NpemVfdCkKK1NSRShzZWFyY2gpKFNSRV9TVEFURSogc3RhdGUsIFNSRV9DT0RFKiBwYXR0ZXJuKQoreworICAgIFNSRV9DSEFSKiBwdHIgPSAoU1JFX0NIQVIgKilzdGF0ZS0+c3RhcnQ7CisgICAgU1JFX0NIQVIqIGVuZCA9IChTUkVfQ0hBUiAqKXN0YXRlLT5lbmQ7CisgICAgUHlfc3NpemVfdCBzdGF0dXMgPSAwOworICAgIFB5X3NzaXplX3QgcHJlZml4X2xlbiA9IDA7CisgICAgUHlfc3NpemVfdCBwcmVmaXhfc2tpcCA9IDA7CisgICAgU1JFX0NPREUqIHByZWZpeCA9IE5VTEw7CisgICAgU1JFX0NPREUqIGNoYXJzZXQgPSBOVUxMOworICAgIFNSRV9DT0RFKiBvdmVybGFwID0gTlVMTDsKKyAgICBpbnQgZmxhZ3MgPSAwOworCisgICAgaWYgKHB0ciA+IGVuZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfSU5GTykgeworICAgICAgICAvKiBvcHRpbWl6YXRpb24gaW5mbyBibG9jayAqLworICAgICAgICAvKiA8SU5GTz4gPDE9c2tpcD4gPDI9ZmxhZ3M+IDwzPW1pbj4gPDQ9bWF4PiA8NT1wcmVmaXggaW5mbz4gICovCisKKyAgICAgICAgZmxhZ3MgPSBwYXR0ZXJuWzJdOworCisgICAgICAgIGlmIChwYXR0ZXJuWzNdICYmIGVuZCAtIHB0ciA8IChQeV9zc2l6ZV90KXBhdHRlcm5bM10pIHsKKyAgICAgICAgICAgIFRSQUNFKCgicmVqZWN0IChnb3QgJXUgY2hhcnMsIG5lZWQgJXUpXG4iLAorICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKGVuZCAtIHB0ciksIHBhdHRlcm5bM10pKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGlmIChwYXR0ZXJuWzNdID4gMSkgeworICAgICAgICAgICAgLyogYWRqdXN0IGVuZCBwb2ludCAoYnV0IG1ha2Ugc3VyZSB3ZSBsZWF2ZSBhdCBsZWFzdCBvbmUKKyAgICAgICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGVyZSwgc28gbGl0ZXJhbCBzZWFyY2ggd2lsbCB3b3JrKSAqLworICAgICAgICAgICAgZW5kIC09IHBhdHRlcm5bM10gLSAxOworICAgICAgICAgICAgaWYgKGVuZCA8PSBwdHIpCisgICAgICAgICAgICAgICAgZW5kID0gcHRyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fUFJFRklYKSB7CisgICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEga25vd24gcHJlZml4ICovCisgICAgICAgICAgICAvKiA8bGVuZ3RoPiA8c2tpcD4gPHByZWZpeCBkYXRhPiA8b3ZlcmxhcCBkYXRhPiAqLworICAgICAgICAgICAgcHJlZml4X2xlbiA9IHBhdHRlcm5bNV07CisgICAgICAgICAgICBwcmVmaXhfc2tpcCA9IHBhdHRlcm5bNl07CisgICAgICAgICAgICBwcmVmaXggPSBwYXR0ZXJuICsgNzsKKyAgICAgICAgICAgIG92ZXJsYXAgPSBwcmVmaXggKyBwcmVmaXhfbGVuIC0gMTsKKyAgICAgICAgfSBlbHNlIGlmIChmbGFncyAmIFNSRV9JTkZPX0NIQVJTRVQpCisgICAgICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgY2hhcmFjdGVyIGZyb20gYSBrbm93biBzZXQgKi8KKyAgICAgICAgICAgIC8qIDxjaGFyc2V0PiAqLworICAgICAgICAgICAgY2hhcnNldCA9IHBhdHRlcm4gKyA1OworCisgICAgICAgIHBhdHRlcm4gKz0gMSArIHBhdHRlcm5bMV07CisgICAgfQorCisgICAgVFJBQ0UoKCJwcmVmaXggPSAlcCAlIiBQWV9GT1JNQVRfU0laRV9UICJkICUiIFBZX0ZPUk1BVF9TSVpFX1QgImRcbiIsCisgICAgICAgICAgIHByZWZpeCwgcHJlZml4X2xlbiwgcHJlZml4X3NraXApKTsKKyAgICBUUkFDRSgoImNoYXJzZXQgPSAlcFxuIiwgY2hhcnNldCkpOworCisjaWYgZGVmaW5lZChVU0VfRkFTVF9TRUFSQ0gpCisgICAgaWYgKHByZWZpeF9sZW4gPiAxKSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBrbm93biBwcmVmaXguICB1c2UgdGhlIG92ZXJsYXAKKyAgICAgICAgICAgdGFibGUgdG8gc2tpcCBmb3J3YXJkIGFzIGZhc3QgYXMgd2UgcG9zc2libHkgY2FuICovCisgICAgICAgIFB5X3NzaXplX3QgaSA9IDA7CisKKyAgICAgICAgZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICAgICAgaWYgKHByZWZpeF9sZW4gPiBlbmQgLSBwdHIpCisgICAgICAgICAgICByZXR1cm4gMDsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmVmaXhfbGVuOyBpKyspCisgICAgICAgICAgICBpZiAoKFNSRV9DT0RFKShTUkVfQ0hBUikgcHJlZml4W2ldICE9IHByZWZpeFtpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgLyogbGl0ZXJhbCBjYW4ndCBtYXRjaDogZG9lc24ndCBmaXQgaW4gY2hhciB3aWR0aCAqLworI2VuZGlmCisgICAgICAgIHdoaWxlIChwdHIgPCBlbmQpIHsKKyAgICAgICAgICAgIFNSRV9DSEFSIGMgPSAoU1JFX0NIQVIpIHByZWZpeFswXTsKKyAgICAgICAgICAgIHdoaWxlICgqcHRyKysgIT0gYykgeworICAgICAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwdHIgPj0gZW5kKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBpID0gMTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBpZiAoKnB0ciA9PSAoU1JFX0NIQVIpIHByZWZpeFtpXSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKytpICE9IHByZWZpeF9sZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgrK3B0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBmb3VuZCBhIHBvdGVudGlhbCBtYXRjaCAqLworICAgICAgICAgICAgICAgICAgICBUUkFDRSgoInwlcHwlcHxTRUFSQ0ggU0NBTlxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0ciAtIChwcmVmaXhfbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHIgLSAocHJlZml4X2xlbiAtIHByZWZpeF9za2lwIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIFNSRV9JTkZPX0xJVEVSQUwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuICsgMipwcmVmaXhfc2tpcCwgMCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIC8qIGNsb3NlIGJ1dCBubyBjaWdhciAtLSB0cnkgYWdhaW4gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKCsrcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpID0gb3ZlcmxhcFtpXTsKKyAgICAgICAgICAgIH0gd2hpbGUgKGkgIT0gMCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAocGF0dGVyblswXSA9PSBTUkVfT1BfTElURVJBTCkgeworICAgICAgICAvKiBwYXR0ZXJuIHN0YXJ0cyB3aXRoIGEgbGl0ZXJhbCBjaGFyYWN0ZXIuICB0aGlzIGlzIHVzZWQKKyAgICAgICAgICAgZm9yIHNob3J0IHByZWZpeGVzLCBhbmQgaWYgZmFzdCBzZWFyY2ggaXMgZGlzYWJsZWQgKi8KKyAgICAgICAgU1JFX0NIQVIgYyA9IChTUkVfQ0hBUikgcGF0dGVyblsxXTsKKyNpZiBTSVpFT0ZfU1JFX0NIQVIgPCA0CisgICAgICAgIGlmICgoU1JFX0NPREUpIGMgIT0gcGF0dGVyblsxXSkKKyAgICAgICAgICAgIHJldHVybiAwOyAvKiBsaXRlcmFsIGNhbid0IG1hdGNoOiBkb2Vzbid0IGZpdCBpbiBjaGFyIHdpZHRoICovCisjZW5kaWYKKyAgICAgICAgZW5kID0gKFNSRV9DSEFSICopc3RhdGUtPmVuZDsKKyAgICAgICAgd2hpbGUgKHB0ciA8IGVuZCkgeworICAgICAgICAgICAgd2hpbGUgKCpwdHIgIT0gYykgeworICAgICAgICAgICAgICAgIGlmICgrK3B0ciA+PSBlbmQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgVFJBQ0UoKCJ8JXB8JXB8U0VBUkNIIExJVEVSQUxcbiIsIHBhdHRlcm4sIHB0cikpOworICAgICAgICAgICAgc3RhdGUtPnN0YXJ0ID0gcHRyOworICAgICAgICAgICAgc3RhdGUtPnB0ciA9ICsrcHRyOworICAgICAgICAgICAgaWYgKGZsYWdzICYgU1JFX0lORk9fTElURVJBTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UgZ290IGFsbCBvZiBpdCAqLworICAgICAgICAgICAgc3RhdHVzID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybiArIDIsIDApOworICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChjaGFyc2V0KSB7CisgICAgICAgIC8qIHBhdHRlcm4gc3RhcnRzIHdpdGggYSBjaGFyYWN0ZXIgZnJvbSBhIGtub3duIHNldCAqLworICAgICAgICBlbmQgPSAoU1JFX0NIQVIgKilzdGF0ZS0+ZW5kOworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICB3aGlsZSAocHRyIDwgZW5kICYmICFTUkUoY2hhcnNldCkoY2hhcnNldCwgKnB0cikpCisgICAgICAgICAgICAgICAgcHRyKys7CisgICAgICAgICAgICBpZiAocHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSCBDSEFSU0VUXG4iLCBwYXR0ZXJuLCBwdHIpKTsKKyAgICAgICAgICAgIHN0YXRlLT5zdGFydCA9IHB0cjsKKyAgICAgICAgICAgIHN0YXRlLT5wdHIgPSBwdHI7CisgICAgICAgICAgICBzdGF0dXMgPSBTUkUobWF0Y2gpKHN0YXRlLCBwYXR0ZXJuLCAwKTsKKyAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogZ2VuZXJhbCBjYXNlICovCisgICAgICAgIGFzc2VydChwdHIgPD0gZW5kKTsKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIFRSQUNFKCgifCVwfCVwfFNFQVJDSFxuIiwgcGF0dGVybiwgcHRyKSk7CisgICAgICAgICAgICBzdGF0ZS0+c3RhcnQgPSBzdGF0ZS0+cHRyID0gcHRyOworICAgICAgICAgICAgc3RhdHVzID0gU1JFKG1hdGNoKShzdGF0ZSwgcGF0dGVybiwgMCk7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDAgfHwgcHRyID49IGVuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHB0cisrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHN0YXR1czsKK30KKworI3VuZGVmIFNSRV9DSEFSCisjdW5kZWYgU0laRU9GX1NSRV9DSEFSCisjdW5kZWYgU1JFCisKKy8qIHZpbTp0cz00OnN3PTQ6ZXQKKyovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMgYi9Nb2R1bGVzL3N5bXRhYmxlbW9kdWxlLmMKaW5kZXggMzdkZjgyZC4uY2RiNGZmYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy9zeW10YWJsZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvc3ltdGFibGVtb2R1bGUuYwpAQCAtMTEsMTIgKzExLDEyIEBACiAgICAgUHlPYmplY3QgKnQ7CiAKICAgICBjaGFyICpzdHI7Ci0gICAgY2hhciAqZmlsZW5hbWU7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOwogICAgIGNoYXIgKnN0YXJ0c3RyOwogICAgIGludCBzdGFydDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic3NzOnN5bXRhYmxlIiwgJnN0ciwgJmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzdHIpKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAic08mczpzeW10YWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHIsIFB5VW5pY29kZV9GU0RlY29kZXIsICZmaWxlbmFtZSwgJnN0YXJ0c3RyKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKHN0cmNtcChzdGFydHN0ciwgImV4ZWMiKSA9PSAwKQogICAgICAgICBzdGFydCA9IFB5X2ZpbGVfaW5wdXQ7CkBAIC0yNyw5ICsyNywxMSBAQAogICAgIGVsc2UgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgInN5bXRhYmxlKCkgYXJnIDMgbXVzdCBiZSAnZXhlYycgb3IgJ2V2YWwnIG9yICdzaW5nbGUnIik7CisgICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBzdCA9IFB5X1N5bXRhYmxlU3RyaW5nKHN0ciwgZmlsZW5hbWUsIHN0YXJ0KTsKKyAgICBzdCA9IFB5X1N5bXRhYmxlU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0KTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOwogICAgIGlmIChzdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB0ID0gKFB5T2JqZWN0ICopc3QtPnN0X3RvcDsKQEAgLTY5LDMwICs3MSwzMCBAQAogICAgIG0gPSBQeU1vZHVsZV9DcmVhdGUoJnN5bXRhYmxlbW9kdWxlKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVVNFIiwgVVNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0dMT0JBTCIsIERFRl9HTE9CQUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfTE9DQUwiLCBERUZfTE9DQUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfUEFSQU0iLCBERUZfUEFSQU0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfRlJFRSIsIERFRl9GUkVFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0ZSRUVfQ0xBU1MiLCBERUZfRlJFRV9DTEFTUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRl9JTVBPUlQiLCBERUZfSU1QT1JUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiREVGX0JPVU5EIiwgREVGX0JPVU5EKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBVU0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9HTE9CQUwpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9MT0NBTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX1BBUkFNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZfRlJFRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0ZSRUVfQ0xBU1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9JTVBPUlQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIERFRl9CT1VORCk7CiAKICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiVFlQRV9GVU5DVElPTiIsIEZ1bmN0aW9uQmxvY2spOwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJUWVBFX0NMQVNTIiwgQ2xhc3NCbG9jayk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlRZUEVfTU9EVUxFIiwgTW9kdWxlQmxvY2spOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QVF9JTVBPUlRfU1RBUiIsIE9QVF9JTVBPUlRfU1RBUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk9QVF9UT1BMRVZFTCIsIE9QVF9UT1BMRVZFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgT1BUX0lNUE9SVF9TVEFSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBPUFRfVE9QTEVWRUwpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPQ0FMIiwgTE9DQUwpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJHTE9CQUxfRVhQTElDSVQiLCBHTE9CQUxfRVhQTElDSVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJHTE9CQUxfSU1QTElDSVQiLCBHTE9CQUxfSU1QTElDSVQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJGUkVFIiwgRlJFRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkNFTEwiLCBDRUxMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0NBTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgR0xPQkFMX0VYUExJQ0lUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBHTE9CQUxfSU1QTElDSVQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIEZSRUUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIENFTEwpOwogCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDT1BFX09GRiIsIFNDT1BFX09GRlNFVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlNDT1BFX01BU0siLCBTQ09QRV9NQVNLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBTQ09QRV9NQVNLKTsKIAogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgIFB5X0RFQ1JFRihtKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMgYi9Nb2R1bGVzL3N5c2xvZ21vZHVsZS5jCmluZGV4IGZjM2YzNzUuLmYyZDQ0ZmYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvc3lzbG9nbW9kdWxlLmMKKysrIGIvTW9kdWxlcy9zeXNsb2dtb2R1bGUuYwpAQCAtMjc3LDQ0ICsyNzcsNDQgQEAKICAgICAvKiBBZGQgc29tZSBzeW1ib2xpYyBjb25zdGFudHMgdG8gdGhlIG1vZHVsZSAqLwogCiAgICAgLyogUHJpb3JpdGllcyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfRU1FUkciLCAgICAgICBMT0dfRU1FUkcpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQUxFUlQiLCAgICAgICBMT0dfQUxFUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQ1JJVCIsICAgICAgICBMT0dfQ1JJVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19FUlIiLCAgICAgICAgIExPR19FUlIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfV0FSTklORyIsIExPR19XQVJOSU5HKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05PVElDRSIsICBMT0dfTk9USUNFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0lORk8iLCAgICAgICAgTE9HX0lORk8pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfREVCVUciLCAgICAgICBMT0dfREVCVUcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19FTUVSRyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0FMRVJUKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQ1JJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0VSUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1dBUk5JTkcpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19OT1RJQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19JTkZPKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfREVCVUcpOwogCiAgICAgLyogb3BlbmxvZygpIG9wdGlvbiBmbGFncyAqLwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfUElEIiwgICAgICAgICBMT0dfUElEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0NPTlMiLCAgICAgICAgTE9HX0NPTlMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTkRFTEFZIiwgIExPR19OREVMQVkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19QSUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19DT05TKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfTkRFTEFZKTsKICNpZmRlZiBMT0dfT0RFTEFZCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19PREVMQVkiLCAgTE9HX09ERUxBWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX09ERUxBWSk7CiAjZW5kaWYKICNpZmRlZiBMT0dfTk9XQUlUCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19OT1dBSVQiLCAgTE9HX05PV0FJVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05PV0FJVCk7CiAjZW5kaWYKICNpZmRlZiBMT0dfUEVSUk9SCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19QRVJST1IiLCAgTE9HX1BFUlJPUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1BFUlJPUik7CiAjZW5kaWYKIAogICAgIC8qIEZhY2lsaXRpZXMgKi8KLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0tFUk4iLCAgICAgICAgTE9HX0tFUk4pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfVVNFUiIsICAgICAgICBMT0dfVVNFUik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19NQUlMIiwgICAgICAgIExPR19NQUlMKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0RBRU1PTiIsICBMT0dfREFFTU9OKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0FVVEgiLCAgICAgICAgTE9HX0FVVEgpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfTFBSIiwgICAgICAgICBMT0dfTFBSKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMMCIsICBMT0dfTE9DQUwwKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMMSIsICBMT0dfTE9DQUwxKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMMiIsICBMT0dfTE9DQUwyKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMMyIsICBMT0dfTE9DQUwzKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMNCIsICBMT0dfTE9DQUw0KTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMNSIsICBMT0dfTE9DQUw1KTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMNiIsICBMT0dfTE9DQUw2KTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX0xPQ0FMNyIsICBMT0dfTE9DQUw3KTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfS0VSTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX1VTRVIpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19NQUlMKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfREFFTU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfQVVUSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xQUik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMMCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMMSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMMik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMMyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMNCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMNSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMNik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0xPQ0FMNyk7CiAKICNpZm5kZWYgTE9HX1NZU0xPRwogI2RlZmluZSBMT0dfU1lTTE9HICAgICAgICAgICAgICBMT0dfREFFTU9OCkBAIC0zMjksMTMgKzMyOSwxMyBAQAogI2RlZmluZSBMT0dfQ1JPTiAgICAgICAgICAgICAgICBMT0dfREFFTU9OCiAjZW5kaWYKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfU1lTTE9HIiwgIExPR19TWVNMT0cpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJMT0dfQ1JPTiIsICAgICAgICBMT0dfQ1JPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19VVUNQIiwgICAgICAgIExPR19VVUNQKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTE9HX05FV1MiLCAgICAgICAgTE9HX05FV1MpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19TWVNMT0cpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIExPR19DUk9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBMT0dfVVVDUCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX05FV1MpOwogCiAjaWZkZWYgTE9HX0FVVEhQUklWCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkxPR19BVVRIUFJJViIsICAgIExPR19BVVRIUFJJVik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTE9HX0FVVEhQUklWKTsKICNlbmRpZgogCiAgICAgcmV0dXJuIG07CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3RpbWVtb2R1bGUuYyBiL01vZHVsZXMvdGltZW1vZHVsZS5jCmluZGV4IDQyZWMzNjYuLmQ3MWIzYWMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdGltZW1vZHVsZS5jCisrKyBiL01vZHVsZXMvdGltZW1vZHVsZS5jCkBAIC0zNywxNiArMzcsNiBAQAogI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KICNlbmRpZiAvKiAhX19XQVRDT01DX18gfHwgX19RTlhfXyAqLwogCi0jaWYgZGVmaW5lZChQWU9TX09TMikKLSNkZWZpbmUgSU5DTF9ET1MKLSNkZWZpbmUgSU5DTF9FUlJPUlMKLSNpbmNsdWRlIDxvczIuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChQWUNDX1ZBQ1BQKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLQogI2lmIGRlZmluZWQoX19BUFBMRV9fKQogI2luY2x1ZGUgPG1hY2gvbWFjaF90aW1lLmg+CiAjZW5kaWYKQEAgLTIwMyw3ICsxOTMsNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiaU86Y2xvY2tfc2V0dGltZSIsICZjbGtfaWQsICZvYmopKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZXNwZWMob2JqLCAmdHZfc2VjLCAmdHZfbnNlYykgPT0gLTEpCisgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhvYmosICZ0dl9zZWMsICZ0dl9uc2VjLCBfUHlUaW1lX1JPVU5EX0RPV04pID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB0cC50dl9zZWMgPSB0dl9zZWM7CiAgICAgdHAudHZfbnNlYyA9IHR2X25zZWM7CkBAIC0zNTEsNyArMzQxLDcgQEAKICAgICAgICAgd2hlbnQgPSB0aW1lKE5VTEwpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKF9QeVRpbWVfT2JqZWN0VG9UaW1lX3Qob3QsICZ3aGVudCkgPT0gLTEpCisgICAgICAgIGlmIChfUHlUaW1lX09iamVjdFRvVGltZV90KG90LCAmd2hlbnQsIF9QeVRpbWVfUk9VTkRfRE9XTikgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgKnB3aGVuID0gd2hlbnQ7CkBAIC01NDMsNiArNTMzLDI2IEBACiAgICAvKiB3Y3NmdGltZSgpIGRvZXNuJ3QgZm9ybWF0IGNvcnJlY3RseSB0aW1lIHpvbmVzLCBzZWUgaXNzdWUgIzEwNjUzICovCiAjICB1bmRlZiBIQVZFX1dDU0ZUSU1FCiAjZW5kaWYKKyNkZWZpbmUgU1RSRlRJTUVfRk9STUFUX0NPREVTIFwKKyJDb21tb25seSB1c2VkIGZvcm1hdCBjb2RlczpcblwKK1xuXAorJVkgIFllYXIgd2l0aCBjZW50dXJ5IGFzIGEgZGVjaW1hbCBudW1iZXIuXG5cCislbSAgTW9udGggYXMgYSBkZWNpbWFsIG51bWJlciBbMDEsMTJdLlxuXAorJWQgIERheSBvZiB0aGUgbW9udGggYXMgYSBkZWNpbWFsIG51bWJlciBbMDEsMzFdLlxuXAorJUggIEhvdXIgKDI0LWhvdXIgY2xvY2spIGFzIGEgZGVjaW1hbCBudW1iZXIgWzAwLDIzXS5cblwKKyVNICBNaW51dGUgYXMgYSBkZWNpbWFsIG51bWJlciBbMDAsNTldLlxuXAorJVMgIFNlY29uZCBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMCw2MV0uXG5cCisleiAgVGltZSB6b25lIG9mZnNldCBmcm9tIFVUQy5cblwKKyVhICBMb2NhbGUncyBhYmJyZXZpYXRlZCB3ZWVrZGF5IG5hbWUuXG5cCislQSAgTG9jYWxlJ3MgZnVsbCB3ZWVrZGF5IG5hbWUuXG5cCislYiAgTG9jYWxlJ3MgYWJicmV2aWF0ZWQgbW9udGggbmFtZS5cblwKKyVCICBMb2NhbGUncyBmdWxsIG1vbnRoIG5hbWUuXG5cCislYyAgTG9jYWxlJ3MgYXBwcm9wcmlhdGUgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRhdGlvbi5cblwKKyVJICBIb3VyICgxMi1ob3VyIGNsb2NrKSBhcyBhIGRlY2ltYWwgbnVtYmVyIFswMSwxMl0uXG5cCislcCAgTG9jYWxlJ3MgZXF1aXZhbGVudCBvZiBlaXRoZXIgQU0gb3IgUE0uXG5cCitcblwKK090aGVyIGNvZGVzIG1heSBiZSBhdmFpbGFibGUgb24geW91ciBwbGF0Zm9ybS4gIFNlZSBkb2N1bWVudGF0aW9uIGZvclxuXAordGhlIEMgbGlicmFyeSBzdHJmdGltZSBmdW5jdGlvbi5cbiIKIAogI2lmZGVmIEhBVkVfU1RSRlRJTUUKICNpZmRlZiBIQVZFX1dDU0ZUSU1FCkBAIC02NDAsNiArNjUwLDIxIEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KKyNlbGlmIChkZWZpbmVkKF9BSVgpIHx8IGRlZmluZWQoc3VuKSkgJiYgZGVmaW5lZChIQVZFX1dDU0ZUSU1FKQorICAgIGZvcihvdXRidWYgPSB3Y3NjaHIoZm10LCAnJScpOworICAgICAgICBvdXRidWYgIT0gTlVMTDsKKyAgICAgICAgb3V0YnVmID0gd2NzY2hyKG91dGJ1ZisyLCAnJScpKQorICAgIHsKKyAgICAgICAgaWYgKG91dGJ1ZlsxXSA9PSBMJ1wwJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAvKiBJc3N1ZSAjMTk2MzQ6IE9uIEFJWCwgd2NzZnRpbWUoInkiLCAoMTg5OSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMCkpCisgICAgICAgICAgIHJldHVybnMgIjAvIiBpbnN0ZWFkIG9mICI5OSIgKi8KKyAgICAgICAgaWYgKG91dGJ1ZlsxXSA9PSBMJ3knICYmIGJ1Zi50bV95ZWFyIDwgMCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCAleSByZXF1aXJlcyB5ZWFyID49IDE5MDAgb24gQUlYIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KICNlbmRpZgogCiAgICAgZm10bGVuID0gdGltZV9zdHJsZW4oZm10KTsKQEAgLTY5NCwxMyArNzE5LDEzIEBACiAKICN1bmRlZiB0aW1lX2NoYXIKICN1bmRlZiBmb3JtYXRfdGltZQotCiBQeURvY19TVFJWQVIoc3RyZnRpbWVfZG9jLAogInN0cmZ0aW1lKGZvcm1hdFssIHR1cGxlXSkgLT4gc3RyaW5nXG5cCiBcblwKIENvbnZlcnQgYSB0aW1lIHR1cGxlIHRvIGEgc3RyaW5nIGFjY29yZGluZyB0byBhIGZvcm1hdCBzcGVjaWZpY2F0aW9uLlxuXAogU2VlIHRoZSBsaWJyYXJ5IHJlZmVyZW5jZSBtYW51YWwgZm9yIGZvcm1hdHRpbmcgY29kZXMuIFdoZW4gdGhlIHRpbWUgdHVwbGVcblwKLWlzIG5vdCBwcmVzZW50LCBjdXJyZW50IHRpbWUgYXMgcmV0dXJuZWQgYnkgbG9jYWx0aW1lKCkgaXMgdXNlZC4iKTsKK2lzIG5vdCBwcmVzZW50LCBjdXJyZW50IHRpbWUgYXMgcmV0dXJuZWQgYnkgbG9jYWx0aW1lKCkgaXMgdXNlZC5cblwKK1xuIiBTVFJGVElNRV9GT1JNQVRfQ09ERVMpOwogI2VuZGlmIC8qIEhBVkVfU1RSRlRJTUUgKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTcyMyw3ICs3NDgsOSBAQAogInN0cnB0aW1lKHN0cmluZywgZm9ybWF0KSAtPiBzdHJ1Y3RfdGltZVxuXAogXG5cCiBQYXJzZSBhIHN0cmluZyB0byBhIHRpbWUgdHVwbGUgYWNjb3JkaW5nIHRvIGEgZm9ybWF0IHNwZWNpZmljYXRpb24uXG5cCi1TZWUgdGhlIGxpYnJhcnkgcmVmZXJlbmNlIG1hbnVhbCBmb3IgZm9ybWF0dGluZyBjb2RlcyAoc2FtZSBhcyBzdHJmdGltZSgpKS4iKTsKK1NlZSB0aGUgbGlicmFyeSByZWZlcmVuY2UgbWFudWFsIGZvciBmb3JtYXR0aW5nIGNvZGVzIChzYW1lIGFzXG5cCitzdHJmdGltZSgpKS5cblwKK1xuIiBTVFJGVElNRV9GT1JNQVRfQ09ERVMpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogX2FzY3RpbWUoc3RydWN0IHRtICp0aW1lcHRyKQpAQCAtNzk4LDExICs4MjUsMzEgQEAKICAgICB0aW1lX3QgdHQ7CiAgICAgaWYgKCFnZXR0bWFyZyh0dXAsICZidWYpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyNpZmRlZiBfQUlYCisgICAgLyogeWVhciA8IDE5MDIgb3IgeWVhciA+IDIwMzcgKi8KKyAgICBpZiAoYnVmLnRtX3llYXIgPCAyIHx8IGJ1Zi50bV95ZWFyID4gMTM3KSB7CisgICAgICAgIC8qIElzc3VlICMxOTc0ODogT24gQUlYLCBta3RpbWUoKSBkb2Vzbid0IHJlcG9ydCBvdmVyZmxvdyBlcnJvciBmb3IKKyAgICAgICAgICogdGltZXN0YW1wIDwgLTJeMzEgb3IgdGltZXN0YW1wID4gMioqMzEtMS4gKi8KKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAibWt0aW1lIGFyZ3VtZW50IG91dCBvZiByYW5nZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisjZWxzZQogICAgIGJ1Zi50bV93ZGF5ID0gLTE7ICAvKiBzZW50aW5lbDsgb3JpZ2luYWwgdmFsdWUgaWdub3JlZCAqLworI2VuZGlmCiAgICAgdHQgPSBta3RpbWUoJmJ1Zik7CiAgICAgLyogUmV0dXJuIHZhbHVlIG9mIC0xIGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gYW4gZXJyb3IsIGJ1dCB0bV93ZGF5CiAgICAgICogY2Fubm90IHJlbWFpbiBzZXQgdG8gLTEgaWYgbWt0aW1lIHN1Y2NlZWRlZC4gKi8KLSAgICBpZiAodHQgPT0gKHRpbWVfdCkoLTEpICYmIGJ1Zi50bV93ZGF5ID09IC0xKSB7CisgICAgaWYgKHR0ID09ICh0aW1lX3QpKC0xKQorI2lmbmRlZiBfQUlYCisgICAgICAgIC8qIFJldHVybiB2YWx1ZSBvZiAtMSBkb2VzIG5vdCBuZWNlc3NhcmlseSBtZWFuIGFuIGVycm9yLCBidXQKKyAgICAgICAgICogdG1fd2RheSBjYW5ub3QgcmVtYWluIHNldCB0byAtMSBpZiBta3RpbWUgc3VjY2VlZGVkLiAqLworICAgICAgICAmJiBidWYudG1fd2RheSA9PSAtMQorI2Vsc2UKKyAgICAgICAgLyogb24gQUlYLCB0bV93ZGF5IGlzIGFsd2F5cyBzZXRzLCBldmVuIG9uIGVycm9yICovCisjZW5kaWYKKyAgICAgICApCisgICAgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJta3RpbWUgYXJndW1lbnQgb3V0IG9mIHJhbmdlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODM3LDYgKzg4NCw4IEBACiAgICAgLyogUmVzZXQgdGltZXpvbmUsIGFsdHpvbmUsIGRheWxpZ2h0IGFuZCB0em5hbWUgKi8KICAgICBQeUluaXRfdGltZXpvbmUobSk7CiAgICAgUHlfREVDUkVGKG0pOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICByZXR1cm4gUHlfTm9uZTsKQEAgLTEyNzMsMTkgKzEzMjIsMTEgQEAKICNpZiBkZWZpbmVkKEhBVkVfVFpOQU1FKSAmJiAhZGVmaW5lZChfX0dMSUJDX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCiAgICAgUHlPYmplY3QgKm90ejAsICpvdHoxOwogICAgIHR6c2V0KCk7Ci0jaWZkZWYgUFlPU19PUzIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAidGltZXpvbmUiLCBfdGltZXpvbmUpOwotI2Vsc2UgLyogIVBZT1NfT1MyICovCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgInRpbWV6b25lIiwgdGltZXpvbmUpOwotI2VuZGlmIC8qIFBZT1NfT1MyICovCiAjaWZkZWYgSEFWRV9BTFRaT05FCiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgImFsdHpvbmUiLCBhbHR6b25lKTsKICNlbHNlCi0jaWZkZWYgUFlPU19PUzIKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiYWx0em9uZSIsIF90aW1lem9uZS0zNjAwKTsKLSNlbHNlIC8qICFQWU9TX09TMiAqLwogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJhbHR6b25lIiwgdGltZXpvbmUtMzYwMCk7Ci0jZW5kaWYgLyogUFlPU19PUzIgKi8KICNlbmRpZgogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJkYXlsaWdodCIsIGRheWxpZ2h0KTsKICAgICBvdHowID0gUHlVbmljb2RlX0RlY29kZUxvY2FsZSh0em5hbWVbMF0sICJzdXJyb2dhdGVlc2NhcGUiKTsKQEAgLTE0NjgsOCArMTUwOSw5IEBACiAgICAgUHlJbml0X3RpbWV6b25lKG0pOwogCiAgICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZTdHJ1Y3RUaW1lVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RydWN0X3RpbWVfdHlwZV9kZXNjKTsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZTdHJ1Y3RUaW1lVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdHJ1Y3RfdGltZV90eXBlX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICB3aW52ZXIuZHdPU1ZlcnNpb25JbmZvU2l6ZSA9IHNpemVvZih3aW52ZXIpOwpAQCAtMTU4MSw3ICsxNjIzLDcgQEAKICAgICAgICAgICAgIERXT1JEIHJjOwogICAgICAgICAgICAgSEFORExFIGhJbnRlcnJ1cHRFdmVudCA9IF9QeU9TX1NpZ2ludEV2ZW50KCk7CiAgICAgICAgICAgICBSZXNldEV2ZW50KGhJbnRlcnJ1cHRFdmVudCk7Ci0gICAgICAgICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaEludGVycnVwdEV2ZW50LCB1bF9taWxsaXMpOworICAgICAgICAgICAgcmMgPSBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCB1bF9taWxsaXMsIEZBTFNFKTsKICAgICAgICAgICAgIGlmIChyYyA9PSBXQUlUX09CSkVDVF8wKSB7CiAgICAgICAgICAgICAgICAgUHlfQkxPQ0tfVEhSRUFEUwogICAgICAgICAgICAgICAgIGVycm5vID0gRUlOVFI7CkBAIC0xNTkxLDE1ICsxNjMzLDYgQEAKICAgICAgICAgfQogICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogICAgIH0KLSNlbGlmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgLyogVGhpcyBTbGVlcCAqSVMqIEludGVycnVwdGFibGUgYnkgRXhjZXB0aW9ucyAqLwotICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoRG9zU2xlZXAoc2VjcyAqIDEwMDApICE9IE5PX0VSUk9SKSB7Ci0gICAgICAgIFB5X0JMT0NLX1RIUkVBRFMKLSAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX0lPRXJyb3IpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIFB5X0VORF9BTExPV19USFJFQURTCiAjZWxzZQogICAgIC8qIFhYWCBDYW4ndCBpbnRlcnJ1cHQgdGhpcyBzbGVlcCAqLwogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKZGlmZiAtLWdpdCBhL01vZHVsZXMvdGtpbnRlci5oIGIvTW9kdWxlcy90a2ludGVyLmgKaW5kZXggZjdlNTBjZC4uM2M1NTY3NiAxMDA2NDQKLS0tIGEvTW9kdWxlcy90a2ludGVyLmgKKysrIGIvTW9kdWxlcy90a2ludGVyLmgKQEAgLTQsMjQgKzQsMzIgQEAKIC8qIFRoaXMgaGVhZGVyIGlzIHVzZWQgdG8gc2hhcmUgc29tZSBtYWNyb3MgYmV0d2VlbiBfdGtpbnRlci5jIGFuZAogICogdGthcHBpbml0LmMuCiAgKiBCZSBzdXJlIHRvIGluY2x1ZGUgdGsuaCBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgaGVhZGVyIHNvCi0gKiBUS19WRVJTSU9OX0hFWCBpcyBwcm9wZXJseSBkZWZpbmVkLiAqLworICogVEtfSEVYX1ZFUlNJT04gaXMgcHJvcGVybHkgZGVmaW5lZC4gKi8KIAogLyogVEtfUkVMRUFTRV9MRVZFTCBpcyBhbHdheXMgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gKglUQ0xfQUxQSEFfUkVMRUFTRSAgIDAKKyAqICBUQ0xfQUxQSEFfUkVMRUFTRSAgIDAKICAqICBUQ0xfQkVUQV9SRUxFQVNFICAgIDEKICAqICBUQ0xfRklOQUxfUkVMRUFTRSAgIDIKICAqLworI2RlZmluZSBUS19IRVhfVkVSU0lPTiAoKFRLX01BSk9SX1ZFUlNJT04gPDwgMjQpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKFRLX01JTk9SX1ZFUlNJT04gPDwgMTYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKFRLX1JFTEVBU0VfTEVWRUwgPDwgOCkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAoVEtfUkVMRUFTRV9TRVJJQUwgPDwgMCkpCisKKy8qIFRLX1ZFUlNJT05fSEVYIHBhY2tzIGZpZWxkcyBpbiB3cm9uZyBvcmRlciwgbm90IHN1aXRhYmxlIGZvciBjb21wYXJpbmcgb2YKKyAqIG5vbi1maW5hbCByZWxlYXNlcy4gIExlZnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCisgKi8KICNkZWZpbmUgVEtfVkVSU0lPTl9IRVggKChUS19NQUpPUl9WRVJTSU9OIDw8IDI0KSB8IFwKLQkJKFRLX01JTk9SX1ZFUlNJT04gPDwgMTYpIHwgXAotCQkoVEtfUkVMRUFTRV9TRVJJQUwgPDwgOCkgfCBcCi0JCShUS19SRUxFQVNFX0xFVkVMIDw8IDApKQorICAgICAgICAgICAgICAgICAgICAgICAgKFRLX01JTk9SX1ZFUlNJT04gPDwgMTYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKFRLX1JFTEVBU0VfU0VSSUFMIDw8IDgpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgKFRLX1JFTEVBU0VfTEVWRUwgPDwgMCkpCiAKIC8qIFByb3RlY3QgVGsgOC40LjEzIGFuZCBvbGRlciBmcm9tIGEgZGVhZGxvY2sgdGhhdCBoYXBwZW5zIHdoZW4gdHJ5aW5nCiAgKiB0byBsb2FkIHRrIGFmdGVyIGEgZmFpbGVkIGF0dGVtcHQuICovCi0jaWYgVEtfVkVSU0lPTl9IRVggPCAweDA4MDQwZTAyCisjaWYgVEtfSEVYX1ZFUlNJT04gPCAweDA4MDQwMjBlCiAjZGVmaW5lIFRLSU5URVJfUFJPVEVDVF9MT0FEVEsKICNkZWZpbmUgVEtJTlRFUl9MT0FEVEtfRVJSTVNHIFwKLQkiQ2FsbGluZyBUa19Jbml0IGFnYWluIGFmdGVyIGEgcHJldmlvdXMgY2FsbCBmYWlsZWQgbWlnaHQgZGVhZGxvY2siCisgICAgICAgICJDYWxsaW5nIFRrX0luaXQgYWdhaW4gYWZ0ZXIgYSBwcmV2aW91cyBjYWxsIGZhaWxlZCBtaWdodCBkZWFkbG9jayIKICNlbmRpZgogCiAjZW5kaWYgLyogIVRLSU5URVJfSCAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy91bmljb2RlZGF0YS5jIGIvTW9kdWxlcy91bmljb2RlZGF0YS5jCmluZGV4IDlmYjExOTEuLjUwN2NlZjMgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvdW5pY29kZWRhdGEuYworKysgYi9Nb2R1bGVzL3VuaWNvZGVkYXRhLmMKQEAgLTEzLDEwICsxMywxOCBAQAogCiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCisKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJ1Y25oYXNoLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKKy8qW2NsaW5pYyBpbnB1dF0KK21vZHVsZSB1bmljb2RlZGF0YQorY2xhc3MgdW5pY29kZWRhdGEuVUNEICdQcmV2aW91c0RCVmVyc2lvbiAqJyAnJlVDRF9UeXBlJworW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9NmRhYzE1MzA4MmQxNTBiY10qLworCiAvKiBjaGFyYWN0ZXIgcHJvcGVydGllcyAqLwogCiB0eXBlZGVmIHN0cnVjdCB7CkBAIC0xMDcsMjUgKzExNSw2MyBAQAogCiAvKiAtLS0gTW9kdWxlIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX2RlY2ltYWxfX2RvY19fLAotImRlY2ltYWwodW5pY2hyWywgZGVmYXVsdF0pXG5cCi1cblwKLVJldHVybnMgdGhlIGRlY2ltYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHVuaWNoclxuXAotYXMgaW50ZWdlci4gSWYgbm8gc3VjaCB2YWx1ZSBpcyBkZWZpbmVkLCBkZWZhdWx0IGlzIHJldHVybmVkLCBvciwgaWZcblwKLW5vdCBnaXZlbiwgVmFsdWVFcnJvciBpcyByYWlzZWQuIik7CisvKltjbGluaWMgaW5wdXRdCisKK3VuaWNvZGVkYXRhLlVDRC5kZWNpbWFsCisKKyAgICB1bmljaHI6IG9iamVjdCh0eXBlPSdQeVVuaWNvZGVPYmplY3QgKicsIHN1YmNsYXNzX29mPScmUHlVbmljb2RlX1R5cGUnKQorICAgIGRlZmF1bHQ6IG9iamVjdD1OVUxMCisgICAgLworCitDb252ZXJ0cyBhIFVuaWNvZGUgY2hhcmFjdGVyIGludG8gaXRzIGVxdWl2YWxlbnQgZGVjaW1hbCB2YWx1ZS4KKworUmV0dXJucyB0aGUgZGVjaW1hbCB2YWx1ZSBhc3NpZ25lZCB0byB0aGUgVW5pY29kZSBjaGFyYWN0ZXIgdW5pY2hyCithcyBpbnRlZ2VyLiBJZiBubyBzdWNoIHZhbHVlIGlzIGRlZmluZWQsIGRlZmF1bHQgaXMgcmV0dXJuZWQsIG9yLCBpZgorbm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKHVuaWNvZGVkYXRhX1VDRF9kZWNpbWFsX19kb2NfXywKKyJkZWNpbWFsKCRzZWxmLCB1bmljaHIsIGRlZmF1bHQ9Tm9uZSwgLylcbiIKKyItLVxuIgorIlxuIgorIkNvbnZlcnRzIGEgVW5pY29kZSBjaGFyYWN0ZXIgaW50byBpdHMgZXF1aXZhbGVudCBkZWNpbWFsIHZhbHVlLlxuIgorIlxuIgorIlJldHVybnMgdGhlIGRlY2ltYWwgdmFsdWUgYXNzaWduZWQgdG8gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHVuaWNoclxuIgorImFzIGludGVnZXIuIElmIG5vIHN1Y2ggdmFsdWUgaXMgZGVmaW5lZCwgZGVmYXVsdCBpcyByZXR1cm5lZCwgb3IsIGlmXG4iCisibm90IGdpdmVuLCBWYWx1ZUVycm9yIGlzIHJhaXNlZC4iKTsKKworI2RlZmluZSBVTklDT0RFREFUQV9VQ0RfREVDSU1BTF9NRVRIT0RERUYgICAgXAorICAgIHsiZGVjaW1hbCIsIChQeUNGdW5jdGlvbil1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbCwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9fZG9jX199LAogCiBzdGF0aWMgUHlPYmplY3QgKgotdW5pY29kZWRhdGFfZGVjaW1hbChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKFByZXZpb3VzREJWZXJzaW9uICpzZWxmLCBQeVVuaWNvZGVPYmplY3QgKnVuaWNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpOworCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZWRhdGFfVUNEX2RlY2ltYWwoUHJldmlvdXNEQlZlcnNpb24gKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5VW5pY29kZU9iamVjdCAqdjsKLSAgICBQeU9iamVjdCAqZGVmb2JqID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeVVuaWNvZGVPYmplY3QgKnVuaWNocjsKKyAgICBQeU9iamVjdCAqZGVmYXVsdF92YWx1ZSA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIk8hfE86ZGVjaW1hbCIsCisgICAgICAgICZQeVVuaWNvZGVfVHlwZSwgJnVuaWNociwgJmRlZmF1bHRfdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gdW5pY29kZWRhdGFfVUNEX2RlY2ltYWxfaW1wbChzZWxmLCB1bmljaHIsIGRlZmF1bHRfdmFsdWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit1bmljb2RlZGF0YV9VQ0RfZGVjaW1hbF9pbXBsKFByZXZpb3VzREJWZXJzaW9uICpzZWxmLCBQeVVuaWNvZGVPYmplY3QgKnVuaWNociwgUHlPYmplY3QgKmRlZmF1bHRfdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODY4OTY2OTg5NmQyOTNkZiBpbnB1dD1jMjVjOWQyYjRkZTA3NmIxXSovCit7CiAgICAgaW50IGhhdmVfb2xkID0gMDsKICAgICBsb25nIHJjOwogICAgIFB5X1VDUzQgYzsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiTyF8TzpkZWNpbWFsIiwgJlB5VW5pY29kZV9UeXBlLCAmdiwgJmRlZm9iaikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGMgPSBnZXR1Y2hhcih2KTsKKyAgICBjID0gZ2V0dWNoYXIodW5pY2hyKTsKICAgICBpZiAoYyA9PSAoUHlfVUNTNCktMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTE0NSwxNCArMTkxLDE0IEBACiAgICAgaWYgKCFoYXZlX29sZCkKICAgICAgICAgcmMgPSBQeV9VTklDT0RFX1RPREVDSU1BTChjKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIGlmIChkZWZvYmogPT0gTlVMTCkgeworICAgICAgICBpZiAoZGVmYXVsdF92YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm90IGEgZGVjaW1hbCIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoZGVmb2JqKTsKLSAgICAgICAgICAgIHJldHVybiBkZWZvYmo7CisgICAgICAgICAgICBQeV9JTkNSRUYoZGVmYXVsdF92YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gZGVmYXVsdF92YWx1ZTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKHJjKTsKQEAgLTkzNyw3ICs5ODMsNyBAQAogICAgICAgICAoMHgyQjc0MCA8PSBjb2RlICYmIGNvZGUgPD0gMHgyQjgxRCk7ICAgLyogQ0pLIElkZW9ncmFwaCBFeHRlbnNpb24gRCAqLwogfQogCi0vKiBtYWNyb3MgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGdpdmVuIGNvZGVwb2ludCBpcyBpbiB0aGUgUFVBIHJhbmdlIHRoYXQKKy8qIG1hY3JvcyB1c2VkIHRvIGRldGVybWluZSBpZiB0aGUgZ2l2ZW4gY29kZSBwb2ludCBpcyBpbiB0aGUgUFVBIHJhbmdlIHRoYXQKICAqIHdlIGFyZSB1c2luZyB0byBzdG9yZSBhbGlhc2VzIGFuZCBuYW1lZCBzZXF1ZW5jZXMgKi8KICNkZWZpbmUgSVNfQUxJQVMoY3ApICgoY3AgPj0gYWxpYXNlc19zdGFydCkgJiYgKGNwIDwgYWxpYXNlc19lbmQpKQogI2RlZmluZSBJU19OQU1FRF9TRVEoY3ApICgoY3AgPj0gbmFtZWRfc2VxdWVuY2VzX3N0YXJ0KSAmJiBcCkBAIC05NDcsNyArOTkzLDcgQEAKIF9nZXR1Y25hbWUoUHlPYmplY3QgKnNlbGYsIFB5X1VDUzQgY29kZSwgY2hhciogYnVmZmVyLCBpbnQgYnVmbGVuLAogICAgICAgICAgICBpbnQgd2l0aF9hbGlhc19hbmRfc2VxKQogewotICAgIC8qIEZpbmQgdGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBjb2RlcG9pbnQuCisgICAgLyogRmluZCB0aGUgbmFtZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGNvZGUgcG9pbnQuCiAgICAgICogSWYgd2l0aF9hbGlhc19hbmRfc2VxIGlzIDEsIGNoZWNrIGZvciBuYW1lcyBpbiB0aGUgUHJpdmF0ZSBVc2UgQXJlYSAxNQogICAgICAqIHRoYXQgd2UgYXJlIHVzaW5nIGZvciBhbGlhc2VzIGFuZCBuYW1lZCBzZXF1ZW5jZXMuICovCiAgICAgaW50IG9mZnNldDsKQEAgLTk1OCw3ICsxMDA0LDcgQEAKICAgICBpZiAoY29kZSA+PSAweDExMDAwMCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAvKiBYWFggc2hvdWxkIHdlIGp1c3Qgc2tpcCBhbGwgdGhlIGNvZGVwb2ludHMgaW4gdGhlIFBVQXMgaGVyZT8gKi8KKyAgICAvKiBYWFggc2hvdWxkIHdlIGp1c3Qgc2tpcCBhbGwgdGhlIGNvZGUgcG9pbnRzIGluIHRoZSBQVUFzIGhlcmU/ICovCiAgICAgaWYgKCF3aXRoX2FsaWFzX2FuZF9zZXEgJiYgKElTX0FMSUFTKGNvZGUpIHx8IElTX05BTUVEX1NFUShjb2RlKSkpCiAgICAgICAgIHJldHVybiAwOwogCkBAIC0xMDg2LDggKzExMzIsOCBAQAogICAgIC8qIGNoZWNrIGlmIG5hbWVkIHNlcXVlbmNlcyBhcmUgYWxsb3dlZCAqLwogICAgIGlmICghd2l0aF9uYW1lZF9zZXEgJiYgSVNfTkFNRURfU0VRKGNwKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgLyogaWYgdGhlIGNvZGVwb2ludCBpcyBpbiB0aGUgUFVBIHJhbmdlIHRoYXQgd2UgdXNlIGZvciBhbGlhc2VzLAotICAgICAqIGNvbnZlcnQgaXQgdG8gb2J0YWluIHRoZSByaWdodCBjb2RlcG9pbnQgKi8KKyAgICAvKiBpZiB0aGUgY29kZSBwb2ludCBpcyBpbiB0aGUgUFVBIHJhbmdlIHRoYXQgd2UgdXNlIGZvciBhbGlhc2VzLAorICAgICAqIGNvbnZlcnQgaXQgdG8gb2J0YWluIHRoZSByaWdodCBjb2RlIHBvaW50ICovCiAgICAgaWYgKElTX0FMSUFTKGNwKSkKICAgICAgICAgKmNvZGUgPSBuYW1lX2FsaWFzZXNbY3AtYWxpYXNlc19zdGFydF07CiAgICAgZWxzZQpAQCAtMTA5OSw5ICsxMTQ1LDkgQEAKIF9nZXRjb2RlKFB5T2JqZWN0KiBzZWxmLCBjb25zdCBjaGFyKiBuYW1lLCBpbnQgbmFtZWxlbiwgUHlfVUNTNCogY29kZSwKICAgICAgICAgIGludCB3aXRoX25hbWVkX3NlcSkKIHsKLSAgICAvKiBSZXR1cm4gdGhlIGNvZGVwb2ludCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG5hbWUuCisgICAgLyogUmV0dXJuIHRoZSBjb2RlIHBvaW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gbmFtZS4KICAgICAgKiBOYW1lZCBhbGlhc2VzIGFyZSByZXNvbHZlZCB0b28gKHVubGVzcyBzZWxmICE9IE5VTEwgKGkuZS4gd2UgYXJlIHVzaW5nCi0gICAgICogMy4yLjApKS4gIElmIHdpdGhfbmFtZWRfc2VxIGlzIDEsIHJldHVybnMgdGhlIFBVQSBjb2RlcG9pbnQgdGhhdCB3ZSBhcmUKKyAgICAgKiAzLjIuMCkpLiAgSWYgd2l0aF9uYW1lZF9zZXEgaXMgMSwgcmV0dXJucyB0aGUgUFVBIGNvZGUgcG9pbnQgdGhhdCB3ZSBhcmUKICAgICAgKiB1c2luZyBmb3IgdGhlIG5hbWVkIHNlcXVlbmNlLCBhbmQgdGhlIGNhbGxlciBtdXN0IHRoZW4gY29udmVydCBpdC4gKi8KICAgICB1bnNpZ25lZCBpbnQgaCwgdjsKICAgICB1bnNpZ25lZCBpbnQgbWFzayA9IGNvZGVfc2l6ZS0xOwpAQCAtMTIzNCwxMiArMTI4MCwxNiBAQAogICAgIFB5X1VDUzQgY29kZTsKIAogICAgIGNoYXIqIG5hbWU7Ci0gICAgaW50IG5hbWVsZW47CisgICAgUHlfc3NpemVfdCBuYW1lbGVuOwogICAgIHVuc2lnbmVkIGludCBpbmRleDsKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMjOmxvb2t1cCIsICZuYW1lLCAmbmFtZWxlbikpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChuYW1lbGVuID4gSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfS2V5RXJyb3IsICJuYW1lIHRvbyBsb25nIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAotICAgIGlmICghX2dldGNvZGUoc2VsZiwgbmFtZSwgbmFtZWxlbiwgJmNvZGUsIDEpKSB7CisgICAgaWYgKCFfZ2V0Y29kZShzZWxmLCBuYW1lLCAoaW50KW5hbWVsZW4sICZjb2RlLCAxKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfS2V5RXJyb3IsICJ1bmRlZmluZWQgY2hhcmFjdGVyIG5hbWUgJyVzJyIsIG5hbWUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMjU3LDcgKzEzMDcsNyBAQAogLyogWFhYIEFkZCBkb2Mgc3RyaW5ncy4gKi8KIAogc3RhdGljIFB5TWV0aG9kRGVmIHVuaWNvZGVkYXRhX2Z1bmN0aW9uc1tdID0gewotICAgIHsiZGVjaW1hbCIsIHVuaWNvZGVkYXRhX2RlY2ltYWwsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfZGVjaW1hbF9fZG9jX199LAorICAgIFVOSUNPREVEQVRBX1VDRF9ERUNJTUFMX01FVEhPRERFRgogICAgIHsiZGlnaXQiLCB1bmljb2RlZGF0YV9kaWdpdCwgTUVUSF9WQVJBUkdTLCB1bmljb2RlZGF0YV9kaWdpdF9fZG9jX199LAogICAgIHsibnVtZXJpYyIsIHVuaWNvZGVkYXRhX251bWVyaWMsIE1FVEhfVkFSQVJHUywgdW5pY29kZWRhdGFfbnVtZXJpY19fZG9jX199LAogICAgIHsiY2F0ZWdvcnkiLCB1bmljb2RlZGF0YV9jYXRlZ29yeSwgTUVUSF9WQVJBUkdTLApAQCAtMTMzNCw3ICsxMzg0LDYgQEAKIFRoZSBtb2R1bGUgdXNlcyB0aGUgc2FtZSBuYW1lcyBhbmQgc3ltYm9scyBhcyBkZWZpbmVkIGJ5IHRoZVxuXAogVW5pY29kZURhdGEgRmlsZSBGb3JtYXQgIiBVTklEQVRBX1ZFUlNJT04gIi4iKTsKIAotCiBzdGF0aWMgc3RydWN0IFB5TW9kdWxlRGVmIHVuaWNvZGVkYXRhbW9kdWxlID0gewogICAgICAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCiAgICAgICAgICJ1bmljb2RlZGF0YSIsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmggYi9Nb2R1bGVzL3VuaWNvZGVkYXRhX2RiLmgKaW5kZXggNWQ1ZGNhOC4uZWMxMWZhMSAxMDA2NDQKLS0tIGEvTW9kdWxlcy91bmljb2RlZGF0YV9kYi5oCisrKyBiL01vZHVsZXMvdW5pY29kZWRhdGFfZGIuaApAQCAtMSw2ICsxLDYgQEAKIC8qIHRoaXMgZmlsZSB3YXMgZ2VuZXJhdGVkIGJ5IFRvb2xzL3VuaWNvZGUvbWFrZXVuaWNvZGVkYXRhLnB5IDMuMiAqLwogCi0jZGVmaW5lIFVOSURBVEFfVkVSU0lPTiAiNi4xLjAiCisjZGVmaW5lIFVOSURBVEFfVkVSU0lPTiAiNi4zLjAiCiAvKiBhIGxpc3Qgb2YgdW5pcXVlIGRhdGFiYXNlIHJlY29yZHMgKi8KIGNvbnN0IF9QeVVuaWNvZGVfRGF0YWJhc2VSZWNvcmQgX1B5VW5pY29kZV9EYXRhYmFzZV9SZWNvcmRzW10gPSB7CiAgICAgezAsIDAsIDAsIDAsIDAsIDB9LApAQCAtMTIwLDYgKzEyMCw3IEBACiAgICAgezQsIDMwLCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDMxLCAxNCwgMCwgNSwgMH0sCiAgICAgezQsIDMyLCAxNCwgMCwgNSwgMH0sCisgICAgezE0LCAwLCA1LCAwLCA1LCAwfSwKICAgICB7MTksIDAsIDUsIDAsIDUsIDB9LAogICAgIHsxOSwgMCwgNSwgMCwgNSwgMTB9LAogICAgIHsxOCwgMCwgNSwgMCwgNSwgMH0sCkBAIC0xMzYsNyArMTM3LDYgQEAKICAgICB7MTksIDAsIDUsIDAsIDUsIDEzNn0sCiAgICAgezcsIDAsIDksIDAsIDUsIDB9LAogICAgIHszMCwgMCwgNSwgMCwgNSwgMH0sCi0gICAgezE0LCAwLCA1LCAwLCA1LCAwfSwKICAgICB7NCwgMzYsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMCwgMTQsIDAsIDUsIDB9LAogICAgIHs3LCAwLCA0LCAwLCA1LCAwfSwKQEAgLTE3Nyw2ICsxNzcsNyBAQAogICAgIHsxOSwgMCwgMSwgMCwgNSwgODB9LAogICAgIHsxMCwgMCwgMTgsIDAsIDUsIDB9LAogICAgIHs4LCAwLCAxLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDE1LCAwLCA1LCAwfSwKICAgICB7NSwgOSwgMSwgMCwgNSwgMH0sCiAgICAgezQsIDEsIDE0LCAwLCA1LCAwfSwKICAgICB7NCwgMjM0LCAxNCwgMCwgNSwgMH0sCkBAIC0xOTAsNyArMTkxLDYgQEAKICAgICB7MjksIDAsIDE5LCAwLCA1LCAxNzB9LAogICAgIHsxMCwgMCwgMTgsIDAsIDUsIDE3MH0sCiAgICAgezEwLCAwLCAxOCwgMCwgNSwgMTM2fSwKLSAgICB7MTQsIDAsIDE1LCAwLCA1LCAwfSwKICAgICB7MTQsIDAsIDEsIDAsIDUsIDB9LAogICAgIHsxNCwgMCwgNCwgMCwgNSwgMH0sCiAgICAgezIxLCAwLCAxOSwgMCwgNCwgMH0sCkBAIC0yMTMsNiArMjEzLDEwIEBACiAgICAgezI2LCAwLCAxMSwgMCwgNSwgMTM2fSwKICAgICB7MjAsIDAsIDE5LCAwLCA1LCAwfSwKICAgICB7MjcsIDAsIDEzLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDIwLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDIxLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDIyLCAwLCA1LCAwfSwKKyAgICB7MTQsIDAsIDIzLCAwLCA1LCAwfSwKICAgICB7OSwgMCwgOSwgMCwgNSwgMTM2fSwKICAgICB7MjcsIDAsIDEwLCAwLCA1LCAxMzZ9LAogICAgIHsyNywgMCwgMTksIDAsIDUsIDEzNn0sCkBAIC02MzgsNiArNjQyLDEwIEBACiAgICAgIlMiLAogICAgICJXUyIsCiAgICAgIk9OIiwKKyAgICAiTFJJIiwKKyAgICAiUkxJIiwKKyAgICAiRlNJIiwKKyAgICAiUERJIiwKICAgICBOVUxMCiB9OwogY29uc3QgY2hhciAqX1B5VW5pY29kZV9FYXN0QXNpYW5XaWR0aE5hbWVzW10gPSB7CkBAIC0xMjczLDM1ICsxMjgxLDM1IEBACiAgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTA3LCAxMDcsIDEwNywgMTA0LCAxMDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwOCwgMTA4LCAKICAgICAxMDgsIDEwOCwgMTA4LCAwLCA3OCwgNzgsIDEwOSwgMTEwLCAxMTAsIDExMSwgMTEyLCAxMTMsIDI2LCAyNiwgODEsIDgxLCAKLSAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAxMTQsIDExNSwgMTE2LCAxMTMsIDAsIDAsIDExMywgMTEzLCAxMTcsIDExNywgCi0gICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE5LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDEyMCwgCi0gICAgMTIxLCAxMjIsIDExNCwgMTE1LCAxMTYsIDEyMywgMTI0LCAxMjUsIDEyNSwgMTI2LCA4NiwgODEsIDgxLCA4MSwgODEsIDgxLCAKLSAgICA4NiwgODEsIDgxLCA4NiwgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMjcsIDEyNywgMTI3LCAxMTAsIAotICAgIDEyOCwgMTI4LCAxMTMsIDExNywgMTE3LCAxMjksIDExNywgMTE3LCAxMTcsIDExNywgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE4LCAxMTcsIDExOCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTgsIDExMywgMTE3LCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgCi0gICAgMTA4LCAyNiwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgMTE5LCAxMTksIDgxLCA4MSwgMjYsIDg2LCA4MSwgODEsIDg2LCAKLSAgICAxMTcsIDExNywgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMTcsIDExNywgCi0gICAgMTE3LCAxMzIsIDEzMiwgMTE3LCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIAotICAgIDExMywgMTEzLCAxMTMsIDExMywgMCwgMTMzLCAxMTcsIDEzNCwgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgODEsIDg2LCA4MSwgODEsIDg2LCA4MSwgODEsIAorICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDExNCwgMTE1LCAxMTYsIDExMywgMTE3LCAwLCAxMTMsIDExMywgMTE4LCAxMTgsIAorICAgIDExOSwgMTE5LCAxMTksIDExOSwgMTE5LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDEyMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMjEsIAorICAgIDEyMiwgMTIzLCAxMTQsIDExNSwgMTE2LCAxMjQsIDEyNSwgMTI2LCAxMjYsIDEyNywgODYsIDgxLCA4MSwgODEsIDgxLCA4MSwgCisgICAgODYsIDgxLCA4MSwgODYsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTEwLCAKKyAgICAxMjksIDEyOSwgMTEzLCAxMTgsIDExOCwgMTMwLCAxMTgsIDExOCwgMTE4LCAxMTgsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOSwgMTE4LCAxMTksIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE5LCAxMTMsIDExOCwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIAorICAgIDEwOCwgMjYsIDgxLCA4MSwgODEsIDgxLCA4NiwgODEsIDEyMCwgMTIwLCA4MSwgODEsIDI2LCA4NiwgODEsIDgxLCA4NiwgCisgICAgMTE4LCAxMTgsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTMyLCAxMzIsIDEzMiwgMTE4LCAxMTgsIAorICAgIDExOCwgMTMzLCAxMzMsIDExOCwgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAxMTMsIDExMywgMTEzLCAKKyAgICAxMTMsIDExMywgMTEzLCAxMTMsIDAsIDExNywgMTE4LCAxMzQsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCAKICAgICA4NiwgODYsIDg2LCA4MSwgODYsIDg2LCA4MSwgODYsIDgxLCA4MSwgODEsIDg2LCA4MSwgODYsIDgxLCA4NiwgODEsIDg2LCAKLSAgICA4MSwgODEsIDAsIDAsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAKLSAgICAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgCi0gICAgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTE3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzYsIAorICAgIDgxLCA4MSwgMCwgMCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgCisgICAgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAKKyAgICAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNiwgCiAgICAgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTM2LCAxMzYsIDEzNiwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKICAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgODEsIApAQCAtMTMxNCwxMSArMTMyMiwxMSBAQAogICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDg2LCA4NiwgODYsIAogICAgIDAsIDAsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE3LCAwLCAxMTcsIAotICAgIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMTE3LCAxMTcsIDExNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTE4LCAwLCAxMTgsIAorICAgIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMTE4LCAxMTgsIDExOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIAotICAgIDgxLCA4NiwgODEsIDgxLCA4NiwgODEsIDgxLCA4MSwgODYsIDg2LCA4NiwgMTIwLCAxMjEsIDEyMiwgODEsIDgxLCA4MSwgCisgICAgODEsIDg2LCA4MSwgODEsIDg2LCA4MSwgODEsIDgxLCA4NiwgODYsIDg2LCAxMjEsIDEyMiwgMTIzLCA4MSwgODEsIDgxLCAKICAgICA4NiwgODEsIDgxLCA4NiwgODYsIDgxLCA4MSwgODEsIDgxLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCAKQEAgLTE0NDQsNDEgKzE0NTIsNDAgQEAKICAgICAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgCiAgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIAotICAgIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcxLCAxNzEsIDE3MSwgMTcxLCAxNzEsIDE3MSwgMTcxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgMCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDAsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAwLCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgCi0gICAgODEsIDgxLCA4MSwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDgxLCA4MSwgCisgICAgODEsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAwLCAKKyAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDg0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODQsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKQEAgLTE0OTgsMTUgKzE1MDUsMTYgQEAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzIsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTYzLCAxNjQsIDAsIAotICAgIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDE3MiwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNjMsIDE2NCwgMCwgMCwgMCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDgzLCA4MywgODMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgODMsIDgzLCA4MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgCiAgICAgMTQyLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCkBAIC0xNTIxLDcgKzE1MjksNyBAQAogICAgIDgzLCA1MywgODMsIDgzLCA4MywgODUsIDQ4LCA4MSwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCiAgICAgMTUzLCAxNTMsIDAsIDAsIDAsIDAsIDAsIDAsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDg0LCAxMzgsIDEzOCwgCi0gICAgMTM4LCAxMzgsIDEzNSwgMTM1LCAxMzUsIDE3MiwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDEzOCwgMTM4LCAxMzUsIDEzNSwgMTM1LCAxNzQsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA1MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKQEAgLTE1NTAsNyArMTU1OCw3IEBACiAgICAgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgODEsIDg2LCAxMzksIDEzOSwgMTM5LCAwLCAwLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDgxLCA4NiwgMTM5LCAxMzksIDEzNSwgMCwgMCwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM1LCAxMzksIDEzNSwgCkBAIC0xNTY2LDE3ICsxNTc0LDE3IEBACiAgICAgMTQwLCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0NSwgMTQ2LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTQ3LCAxMzUsIDE0NywgMTM5LCAxMzksIDE0NywgMTQ3LCAxMzUsIDE0NywgMTc0LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAxNDcsIDEzNSwgMTQ3LCAxMzksIDEzOSwgMTQ3LCAxNDcsIDEzNSwgMTQ3LCAxNzUsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDgzLCA4MywgCiAgICAgODMsIDgzLCA4MywgODMsIDgzLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODEsIDg2LCA4MSwgCiAgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgMTM1LCAKICAgICAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzUsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTc0LCAxNDIsIDEzOSwgMTM5LCA0OCwgNDgsIDE0NCwgMTQ0LCAxNDQsIAorICAgIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzUsIDE3NSwgMTQyLCAxMzksIDEzOSwgNDgsIDQ4LCAxNDQsIDE0NCwgMTQ0LCAKICAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ1LCAKLSAgICAxMzksIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTc0LCAxNzQsIDAsIDAsIDAsIAorICAgIDEzOSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxNzUsIDE3NSwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKQEAgLTE1ODgsOCArMTU5Niw4IEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgODMsIDgzLCA4MywgCi0gICAgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MywgMTc1LCA4NiwgODYsIDg2LCA4NiwgODYsIAotICAgIDgxLCA4MSwgODYsIDg2LCA4NiwgODYsIDgxLCAxMzksIDE3NSwgMTc1LCAxNzUsIDE3NSwgMTc1LCAxNzUsIDE3NSwgNDgsIAorICAgIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCA4MSwgODMsIDE3NiwgODYsIDg2LCA4NiwgODYsIDg2LCAKKyAgICA4MSwgODEsIDg2LCA4NiwgODYsIDg2LCA4MSwgMTM5LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDE3NiwgMTc2LCAxNzYsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA4NiwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCA4MSwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCiAgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCkBAIC0xNjAyLDkgKzE2MTAsOSBAQAogICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA1MSwgNTEsIDUxLCA1MSwgNTEsIAogICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIAogICAgIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgODEsIDgxLCA4NiwgODEsIAotICAgIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4MSwgODEsIDE3NiwgMTc3LCA4NiwgMTc4LCA4MSwgODEsIDgxLCA4MSwgCisgICAgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODYsIDgxLCA4MSwgMTc3LCAxNzgsIDg2LCAxNzksIDgxLCA4MSwgODEsIDgxLCAKICAgICA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzksIDg2LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxODAsIDg2LCAKICAgICA4MSwgODYsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKQEAgLTE2MTMsNyArMTYyMSw3IEBACiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCiAgICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgCi0gICAgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCA0MywgNDMsIDQzLCA0MywgMzUsIDE4MCwgNDcsIDQ3LCA0NCwgNDcsIAorICAgIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDM1LCAxODEsIDQ3LCA0NywgNDQsIDQ3LCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKICAgICAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAzOCwgNDMsIDM4LCA0MywgMzgsIDQzLCAKQEAgLTE2MjUsNjUgKzE2MzMsNjUgQEAKICAgICA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCA0MywgNDMsIDQzLCAKICAgICA0MywgNDMsIDQzLCAwLCAwLCAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAwLCAwLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAKICAgICA0MywgNDMsIDAsIDM4LCAwLCAzOCwgMCwgMzgsIDAsIDM4LCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDM4LCAKLSAgICAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDE4MSwgNDMsIDE4MSwgNDMsIDE4MSwgNDMsIDE4MSwgNDMsIDE4MSwgCi0gICAgNDMsIDE4MSwgNDMsIDE4MSwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODIsIDE4MiwgMTgyLCAKLSAgICAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODIsIDE4MiwgMTgyLCAKLSAgICAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODIsIDE4MiwgMTgyLCAKLSAgICAxODIsIDE4MiwgMTgyLCAxODIsIDE4MiwgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MywgCi0gICAgMTgyLCA1OCwgMTgxLCA1OCwgNTgsIDc2LCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODMsIDM4LCAxODMsIDE4MiwgCi0gICAgNzYsIDc2LCA3NiwgNDMsIDQzLCA0MywgMTgxLCAwLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4MywgMCwgNzYsIDc2LCAKLSAgICA3NiwgNDMsIDQzLCA0MywgMTgxLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTgzLCAzOCwgNzYsIDE4NCwgMTg0LCAKLSAgICAwLCAwLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODMsIDM4LCAxODMsIDE4MiwgMTg0LCA1OCwgMCwgMTg1LCAxODUsIAotICAgIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NiwgMTg2LCAxODYsIDE4NywgMTg3LCAxODcsIDE4OCwgMTg5LCAKKyAgICAzOCwgMzgsIDM4LCAzOCwgMzgsIDM4LCAzOCwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgNDMsIDE4MiwgCisgICAgNDMsIDE4MiwgNDMsIDE4MiwgMCwgMCwgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODMsIDE4MywgMTgzLCAKKyAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODMsIDE4MywgMTgzLCAKKyAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgNDMsIDQzLCA0MywgNDMsIDQzLCA0MywgNDMsIDQzLCAxODMsIDE4MywgMTgzLCAKKyAgICAxODMsIDE4MywgMTgzLCAxODMsIDE4MywgNDMsIDQzLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgCisgICAgMTgzLCA1OCwgMTgyLCA1OCwgNTgsIDc2LCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODQsIDM4LCAxODQsIDE4MywgCisgICAgNzYsIDc2LCA3NiwgNDMsIDQzLCA0MywgMTgyLCAwLCAwLCA0MywgNDMsIDM4LCAzOCwgMzgsIDE4NCwgMCwgNzYsIDc2LCAKKyAgICA3NiwgNDMsIDQzLCA0MywgMTgyLCA0MywgNDMsIDQzLCA0MywgMzgsIDM4LCAzOCwgMTg0LCAzOCwgNzYsIDE4NSwgMTg1LCAKKyAgICAwLCAwLCA0MywgNDMsIDQzLCAwLCA0MywgNDMsIDM4LCAxODQsIDM4LCAxODQsIDE4MywgMTg1LCA1OCwgMCwgMTg2LCAxODYsIAorICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE3NCwgMTc0LCAxNzQsIDE4OCwgMTg5LCAKICAgICAxOTAsIDE5MSwgODQsIDE5MCwgMTkwLCAxOTAsIDIyLCAxOTIsIDE5MywgMTk0LCAxOTUsIDE5NiwgMTkzLCAxOTQsIDE5NSwgCiAgICAgMTk2LCAyMiwgMjIsIDIyLCAxMzgsIDE5NywgMTk3LCAxOTcsIDIyLCAxOTgsIDE5OSwgMjAwLCAyMDEsIDIwMiwgMjAzLCAKICAgICAyMDQsIDIxLCAyMDUsIDExMCwgMjA1LCAyMDYsIDIwNywgMjIsIDE5MiwgMTkyLCAxMzgsIDI4LCAzNiwgMjIsIDE5MiwgCiAgICAgMTM4LCAxOTcsIDIwOCwgMjA4LCAxMzgsIDEzOCwgMTM4LCAyMDksIDE2MywgMTY0LCAxOTIsIDE5MiwgMTkyLCAxMzgsIAogICAgIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgNzgsIDEzOCwgMjA4LCAxMzgsIDEzOCwgMTkyLCAxMzgsIDEzOCwgCi0gICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDE4NiwgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDIxMCwgNTEsIDAsIDAsIDM0LCAyMTAsIDIxMCwgMjEwLCAyMTAsIDIxMCwgCi0gICAgMjExLCAyMTEsIDIxMiwgMjEzLCAyMTQsIDIxNSwgMjEwLCAzNCwgMzQsIDM0LCAzNCwgMjEwLCAyMTAsIDIxMCwgMjEwLCAKLSAgICAyMTAsIDIxMSwgMjExLCAyMTIsIDIxMywgMjE0LCAwLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCi0gICAgNTEsIDUxLCA1MSwgMCwgMCwgMCwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCAyMTYsIDIxNywgODUsIDg1LCAKLSAgICAyMywgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgxLCA4MSwgMTc1LCAxNzUsIDgxLCA4MSwgCi0gICAgODEsIDgxLCAxNzUsIDE3NSwgMTc1LCA4MSwgODEsIDgyLCA4MiwgODIsIDgyLCA4MSwgODIsIDgyLCA4MiwgMTc1LCAxNzUsIAotICAgIDgxLCA4NiwgODEsIDE3NSwgMTc1LCA4NiwgODYsIDg2LCA4NiwgODEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDIxOCwgMjE4LCA0OSwgMjE5LCAyNiwgMjE5LCAyMTgsIDQ5LCAyNiwgMjE5LCAzNSwgNDksIDQ5LCAKLSAgICA0OSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0NiwgMjYsIDQ5LCAyMTksIDI2LCA3OCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAyNiwgCi0gICAgMjYsIDIxOCwgMjE5LCAyMTksIDI2LCA0OSwgMjYsIDIyMCwgMjYsIDQ5LCAyNiwgMTgzLCAyMjAsIDQ5LCA0OSwgMjIxLCAKLSAgICAzNSwgNDksIDQ5LCA0NCwgNDksIDM1LCAxNTYsIDE1NiwgMTU2LCAxNTYsIDM1LCAyNiwgMjE4LCAzNSwgMzUsIDQ5LCA0OSwgCi0gICAgMjIyLCA3OCwgNzgsIDc4LCA3OCwgNDksIDM1LCAzNSwgMzUsIDM1LCAyNiwgNzgsIDI2LCAyNiwgNDcsIDgwLCAyMjMsIAotICAgIDIyMywgMjIzLCAzNywgMzcsIDIyMywgMjIzLCAyMjMsIDIyMywgMjIzLCAyMjMsIDM3LCAzNywgMzcsIDM3LCAyMjMsIDIyNCwgCi0gICAgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNSwgMjI1LCAyMjUsIAotICAgIDIyNSwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjQsIDIyNCwgMjI0LCAyMjUsIDIyNSwgMjI1LCAKLSAgICAyMjUsIDIyNSwgMjI1LCAxNzMsIDE3MywgMTczLCA0NCwgNDcsIDE3MywgMTczLCAxNzMsIDE3MywgMzcsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAyMjYsIDIyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI2LCAyNiwgMjYsIDI2LCAKKyAgICAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTg3LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMCwgMjEwLCAyMTEsIDIxMiwgCisgICAgMjEzLCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAyMTQsIDUxLCAwLCAwLCAzNCwgMjE0LCAyMTQsIDIxNCwgMjE0LCAKKyAgICAyMTQsIDIxNSwgMjE1LCAyMTYsIDIxNywgMjE4LCAyMTksIDIxNCwgMzQsIDM0LCAzNCwgMzQsIDIxNCwgMjE0LCAyMTQsIAorICAgIDIxNCwgMjE0LCAyMTUsIDIxNSwgMjE2LCAyMTcsIDIxOCwgMCwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgNTEsIDUxLCA1MSwgCisgICAgNTEsIDUxLCA1MSwgNTEsIDAsIDAsIDAsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMjIwLCAyMjEsIDg1LCAKKyAgICA4NSwgMjMsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgODUsIDg1LCA4NSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODEsIDgxLCAxNzYsIDE3NiwgCisgICAgODEsIDgxLCA4MSwgODEsIDE3NiwgMTc2LCAxNzYsIDgxLCA4MSwgODIsIDgyLCA4MiwgODIsIDgxLCA4MiwgODIsIDgyLCAKKyAgICAxNzYsIDE3NiwgODEsIDg2LCA4MSwgMTc2LCAxNzYsIDg2LCA4NiwgODYsIDg2LCA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjIyLCAyMjIsIDQ5LCAyMjMsIDI2LCAyMjMsIDIyMiwgNDksIDI2LCAyMjMsIDM1LCAKKyAgICA0OSwgNDksIDQ5LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ2LCAyNiwgNDksIDIyMywgMjYsIDc4LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDI2LCAyNiwgMjIyLCAyMjMsIDIyMywgMjYsIDQ5LCAyNiwgMjI0LCAyNiwgNDksIDI2LCAxODQsIDIyNCwgNDksIDQ5LCAKKyAgICAyMjUsIDM1LCA0OSwgNDksIDQ0LCA0OSwgMzUsIDE1NiwgMTU2LCAxNTYsIDE1NiwgMzUsIDI2LCAyMjIsIDM1LCAzNSwgNDksIAorICAgIDQ5LCAyMjYsIDc4LCA3OCwgNzgsIDc4LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDI2LCA3OCwgMjYsIDI2LCA0NywgODAsIDIyNywgCisgICAgMjI3LCAyMjcsIDM3LCAzNywgMjI3LCAyMjcsIDIyNywgMjI3LCAyMjcsIDIyNywgMzcsIDM3LCAzNywgMzcsIDIyNywgMjI4LCAKKyAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI5LCAyMjksIDIyOSwgCisgICAgMjI5LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOSwgMjI5LCAyMjksIAorICAgIDIyOSwgMjI5LCAyMjksIDE3MywgMTczLCAxNzMsIDQ0LCA0NywgMTczLCAxNzMsIDE3MywgMTczLCAzNywgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgNDAsIDQwLCA0MCwgNDAsIDQwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDIzMCwgMjMwLCAyNiwgMjYsIDI2LCAyNiwgCisgICAgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgNzgsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMzAsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDMwLCAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyNywgMjI2LCAyMjYsIDI2LCAyNiwgNDAsIDI2LCA0MCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMxLCAyMzAsIDIzMCwgMjYsIDI2LCA0MCwgMjYsIDQwLCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNDAsIDIyOCwgMjI5LCAyMjksIDIzMCwgNzgsIDc4LCA0MCwgMjI5LCAyMzAsIAotICAgIDIyOCwgMjI5LCAyMzAsIDIyOCwgNzgsIDQwLCA3OCwgMjI5LCAyMzEsIDIzMiwgNzgsIDIyOSwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICAyMjksIDIyOCwgMjI4LCAyMjksIDQwLCAyMjksIDIyOSwgMjI4LCAyMjgsIDQwLCAyMzAsIDQwLCAyMzAsIDQwLCA0MCwgNDAsIAotICAgIDQwLCAyMjksIDIzMywgMjIyLCAyMjksIDIyMiwgMjIyLCAyMjgsIDIyOCwgMjI4LCA0MCwgNDAsIDQwLCA0MCwgNzgsIDIyOCwgCi0gICAgNzgsIDIyOCwgMjI5LCAyMjksIDIyOCwgMjI4LCAyMjgsIDIzMCwgMjI4LCAyMjgsIDIzMCwgMjI4LCAyMjgsIDIzMCwgMjI5LCAKLSAgICAyMzAsIDIyOCwgMjI4LCAyMjksIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI5LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIzNCwgNDAsIDIzMCwgNzgsIDIyOSwgMjI5LCAyMjksIDIyOSwgMjI4LCAKLSAgICAyMjgsIDIyOSwgMjI5LCA3OCwgMjI2LCAyMzQsIDIzNCwgMjMwLCAyMzAsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjI4LCAyMjgsIAotICAgIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjI5LCAyMjksIDIzMCwgMjMwLCAKLSAgICAyMjksIDIyOSwgMjMwLCAyMzAsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIAotICAgIDQwLCA3OCwgNzgsIDIyOCwgNDAsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA0MCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIzMCwgMjMwLCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI5LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjMwLCAyMzAsIDIzMCwgCi0gICAgMjMwLCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMzAsIDIzMCwgMjMwLCAyMzAsIDc4LCA3OCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyMjgsIDIyOCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzNSwgMjM2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA0MCwgMjMyLCAyMzMsIDIzMywgMjM0LCA3OCwgNzgsIDQwLCAyMzMsIDIzNCwgCisgICAgMjMyLCAyMzMsIDIzNCwgMjMyLCA3OCwgNDAsIDc4LCAyMzMsIDIzNSwgMjM2LCA3OCwgMjMzLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDIzMywgMjMyLCAyMzIsIDIzMywgNDAsIDIzMywgMjMzLCAyMzIsIDIzMiwgNDAsIDIzNCwgNDAsIDIzNCwgNDAsIDQwLCA0MCwgCisgICAgNDAsIDIzMywgMjM3LCAyMjYsIDIzMywgMjI2LCAyMjYsIDIzMiwgMjMyLCAyMzIsIDQwLCA0MCwgNDAsIDQwLCA3OCwgMjMyLCAKKyAgICA3OCwgMjMyLCAyMzMsIDIzMywgMjMyLCAyMzIsIDIzMiwgMjM0LCAyMzIsIDIzMiwgMjM0LCAyMzIsIDIzMiwgMjM0LCAyMzMsIAorICAgIDIzNCwgMjMyLCAyMzIsIDIzMywgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzMsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjM4LCA0MCwgMjM0LCA3OCwgMjMzLCAyMzMsIDIzMywgMjMzLCAyMzIsIAorICAgIDIzMiwgMjMzLCAyMzMsIDc4LCAyMzAsIDIzOCwgMjM4LCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzIsIDIzMiwgCisgICAgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzMsIDIzMywgMjM0LCAyMzQsIAorICAgIDIzMywgMjMzLCAyMzQsIDIzNCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgCisgICAgNDAsIDc4LCA3OCwgMjMyLCA0MCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDQwLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAyMzQsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzMsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIAorICAgIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzQsIDIzNCwgMjM0LCAKKyAgICAyMzQsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzNCwgMjM0LCAyMzQsIDIzNCwgNzgsIDc4LCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMTYzLCAxNjQsIDE2MywgMTY0LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAzMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDIzMiwgMjMyLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjM5LCAyNDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCkBAIC0xNzAzLDE0ICsxNzExLDE0IEBACiAgICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgCiAgICAgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNywgMzcsIDM3LCAzNCwgCiAgICAgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCi0gICAgMzQsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIyMywgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIAotICAgIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKLSAgICAyMzgsIDIzOCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIAorICAgIDM0LCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyMjcsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAKKyAgICAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgCisgICAgMjQyLCAyNDIsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAKQEAgLTE3NDUsMTQgKzE3NTMsMTQgQEAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMzAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKICAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIAotICAgIDE2MywgMTY0LCAxNjMsIDE2NCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAyMzgsIDIzOCwgMjM4LCAKKyAgICAxNjMsIDE2NCwgMTYzLCAxNjQsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgMjQyLCAyNDIsIDI0MiwgCiAgICAgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAogICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjI4LCA3OCwgNzgsIAotICAgIDIyOCwgMjI4LCAxNjMsIDE2NCwgNzgsIDIyOCwgMjI4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCA5LCAxMCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgMTYzLCAxNjQsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjMyLCA3OCwgNzgsIAorICAgIDIzMiwgMjMyLCAxNjMsIDE2NCwgNzgsIDIzMiwgMjMyLCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCA5LCAxMCwgOSwgMTAsIDksIDEwLCA5LCAxMCwgMTYzLCAxNjQsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCiAgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCkBAIC0xNzY5LDMwICsxNzc3LDMwIEBACiAgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCiAgICAgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCiAgICAgMTYzLCAxNjQsIDksIDEwLCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgCi0gICAgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDE2MywgMTY0LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDIyOCwgNzgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDE2MywgMTY0LCA3OCwgNzgsIDc4LCAKLSAgICA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjIyLCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCA3OCwgMjI4LCA3OCwgNzgsIDIyOCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCAKKyAgICAxNjQsIDE2MywgMTY0LCAxNjMsIDE2NCwgMTYzLCAxNjQsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDE2MywgMTY0LCAxNjMsIDE2NCwgMjMyLCA3OCwgNzgsIDc4LCAKKyAgICA3OCwgMjMyLCA3OCwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMTYzLCAxNjQsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMjYsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgNzgsIDc4LCAyMzIsIDc4LCAyMzIsIDc4LCA3OCwgMjMyLCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCA3OCwgCisgICAgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIAogICAgIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKLSAgICAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgNzgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDIyOCwgMjI4LCA3OCwgNzgsIDIyOCwgCi0gICAgMjIyLCAyMTIsIDIxMiwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgCi0gICAgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIAotICAgIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDc4LCA3OCwgNzgsIAotICAgIDc4LCA3OCwgMjM5LCA3OCwgMjI4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAyMjgsIDIyOCwgNzgsIDc4LCA3OCwgCi0gICAgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCA3OCwgNzgsIDc4LCA3OCwgMjI4LCA3OCwgNzgsIDc4LCAyMjgsIDIyOCwgMjI4LCAKLSAgICAyMjgsIDIyOCwgNzgsIDIyOCwgNzgsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDc4LCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCAKKyAgICAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgNzgsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDIzMiwgMjMyLCA3OCwgNzgsIDIzMiwgCisgICAgMjI2LCAyMTYsIDIxNiwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgCisgICAgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIAorICAgIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgMjMyLCAyMzIsIDc4LCA3OCwgNzgsIAorICAgIDc4LCA3OCwgMjQzLCA3OCwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAyMzIsIDIzMiwgNzgsIDc4LCA3OCwgCisgICAgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCA3OCwgNzgsIDc4LCA3OCwgMjMyLCA3OCwgNzgsIDc4LCAyMzIsIDIzMiwgMjMyLCAKKyAgICAyMzIsIDIzMiwgNzgsIDIzMiwgNzgsIDc4LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIDc4LCA3OCwgNzgsIApAQCAtMTgzOCwxMDUgKzE4NDYsMTA1IEBACiAgICAgMTM4LCA1MiwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCA4NCwgODQsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MSwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCi0gICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAotICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAwLCAwLCAwLCAwLCAyNDIsIDI0MywgMjQzLCAyNDMsIAotICAgIDI0MCwgMjQ0LCAxNzAsIDI0NSwgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAKLSAgICAyNDAsIDI0MCwgMjQ2LCAyNDcsIDI0NiwgMjQ3LCAyNDYsIDI0NywgMjQ2LCAyNDcsIDI0OCwgMjQ5LCAyNTAsIDI1MCwgCi0gICAgMjQwLCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNTEsIDI1MiwgMjUzLCAyNTQsIAotICAgIDI1NSwgMjU1LCAyNDgsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDEsIDI0MCwgMjU2LCAyNTYsIDI1NiwgMjQ0LCAKLSAgICAxNzAsIDI0MywgMjQwLCAyNiwgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgCi0gICAgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMjU3LCAxNzAsIAotICAgIDI1NywgMTcwLCAyNTcsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAKLSAgICAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAxNzAsIDI1NywgMjU3LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ1LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ1LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAKKyAgICAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIAorICAgIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDAsIDAsIDAsIDAsIDI0NiwgMjQ3LCAyNDcsIDI0NywgCisgICAgMjQ0LCAyNDgsIDE3MCwgMjQ5LCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUwLCAyNTEsIAorICAgIDI0NCwgMjQ0LCAyNTAsIDI1MSwgMjUwLCAyNTEsIDI1MCwgMjUxLCAyNTAsIDI1MSwgMjUyLCAyNTMsIDI1NCwgMjU0LCAKKyAgICAyNDQsIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI0OSwgMjQ5LCAyNDksIDI1NSwgMjU2LCAyNTcsIDI1OCwgCisgICAgMjU5LCAyNTksIDI1MiwgMjQ4LCAyNDgsIDI0OCwgMjQ4LCAyNDgsIDI0NSwgMjQ0LCAyNjAsIDI2MCwgMjYwLCAyNDgsIAorICAgIDE3MCwgMjQ3LCAyNDQsIDI2LCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAKKyAgICAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAyNjEsIDE3MCwgCisgICAgMjYxLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIAorICAgIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMjU3LCAxNzAsIDE3MCwgMCwgMCwgMjU4LCAyNTgsIDI1OSwgMjU5LCAyNDQsIDI2MCwgMjYxLCAKLSAgICAyNDgsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNTcsIDE3MCwgCi0gICAgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIAotICAgIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAxNzAsIDI1NywgMTcwLCAxNzAsIDI1NywgMTcwLCAyNTcsIDE3MCwgMjU3LCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgCi0gICAgMTcwLCAyNTcsIDI1NywgMTcwLCAyNTcsIDI1NywgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDI2MSwgMTcwLCAxNzAsIDAsIDAsIDI2MiwgMjYyLCAyNjMsIDI2MywgMjQ4LCAyNjQsIDI2NSwgCisgICAgMjUyLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAxNzAsIAorICAgIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAKKyAgICAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgMTcwLCAyNjEsIDE3MCwgMTcwLCAyNjEsIDE3MCwgMjYxLCAxNzAsIDI2MSwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIAorICAgIDE3MCwgMjYxLCAyNjEsIDE3MCwgMjYxLCAyNjEsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMjU3LCAxNzAsIDE3MCwgMjU3LCAyNTcsIDI1NywgMjU3LCAyNDMsIDI0NCwgMjQ0LCAyNjAsIDI2MSwgMCwgMCwgMCwgMCwgCisgICAgMjYxLCAxNzAsIDE3MCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNDcsIDI0OCwgMjQ4LCAyNjQsIDI2NSwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKLSAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCi0gICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAotICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMCwgMjYyLCAyNjIsIDI2MywgMjYzLCAKLSAgICAyNjMsIDI2MywgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAxNzAsIDE3MCwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIAorICAgIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAKKyAgICAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgCisgICAgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAwLCAyNjYsIDI2NiwgMjY3LCAyNjcsIAorICAgIDI2NywgMjY3LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI0MSwgMjQxLCAwLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAKLSAgICAyNjMsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNjUsIDI2NSwgMjY1LCAyNDEsIDI2NiwgMjY2LCAKLSAgICAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjQxLCAKLSAgICAyNDEsIDI0MSwgMjYyLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2MywgMjYzLCAyNjMsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NiwgMjY2LCAyNjYsIDI2NiwgCi0gICAgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NiwgMjY2LCAyNjYsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDAsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNDEsIDI0MSwgMjQxLCAKLSAgICAyNDEsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI0MSwgMjQxLCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI0MSwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCisgICAgMTcwLCAxNzAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNDUsIDI0NSwgMCwgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgCisgICAgMjY3LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjQ1LCAyNzAsIDI3MCwgCisgICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI0NSwgCisgICAgMjQ1LCAyNDUsIDI2NiwgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjcsIDI2NywgMjY3LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNzAsIDI3MCwgMjcwLCAyNzAsIAorICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIDI0NSwgMjQ1LCAyNDUsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjQ1LCAyNDUsIDI0NSwgCisgICAgMjQ1LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNDUsIDI0NSwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNDUsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIApAQCAtMTk2Miw3ICsxOTcwLDcgQEAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAyNDQsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKKyAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMjQ4LCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCkBAIC0xOTcxLDExICsxOTc5LDExIEBACiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDAsIDAsIDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgCi0gICAgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIAotICAgIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAyNDAsIDI0MCwgMjQwLCAKLSAgICAyNDAsIDI0MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMTcwLCAxNzAsIDAsIDAsIDAsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgCisgICAgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIAorICAgIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAyNDQsIDI0NCwgMjQ0LCAKKyAgICAyNDQsIDI0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDUzLCA1MywgNTMsIDUzLCA1MywgCiAgICAgNTMsIDgzLCA4MywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNTMsIDEzOCwgMTM4LCAKQEAgLTE5OTksNyArMjAwNyw3IEBACiAgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCiAgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgCiAgICAgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTEsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDQsIDQ3LCA0NCwgCi0gICAgNDcsIDQ0LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNTIsIDI2NywgMjY3LCA0NCwgNDcsIDQ0LCAKKyAgICA0NywgNDQsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCA0NywgNDQsIDQ3LCA1MiwgMjcxLCAyNzEsIDQ0LCA0NywgNDQsIAogICAgIDQ3LCAwLCA0NCwgNDcsIDQ0LCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ3LCA0NCwgCiAgICAgNDcsIDQ0LCA0NywgNDQsIDQ3LCA0NCwgNDcsIDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTIwMDgsNyArMjAxNiw3IEBACiAgICAgNDgsIDQ4LCA0OCwgMTM1LCA0OCwgNDgsIDQ4LCAxNDIsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzksIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCA4MCwgODAsIDg1LCAyMjEsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDgwLCA4MCwgODUsIDIyNSwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMCwgMCwgMCwgMCwgCkBAIC0yMDI0LDEzICsyMDMyLDEzIEBACiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgODYsIAogICAgIDg2LCA4NiwgODMsIDgzLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDE3MCwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDE3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAKICAgICAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQ1LCAKLSAgICAxMzksIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTM1LCAxMzksIDEzOSwgMTM5LCAxNzQsIDgzLCA4MywgCisgICAgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzOSwgMTc1LCA4MywgODMsIAogICAgIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCA4MywgMCwgNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCiAgICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTIwNjAsNDk3ICsyMDY4LDQ5NiBAQAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzOSwgMTM5LCA4MywgMTM5LCAKICAgICAxNDIsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIAotICAgIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAKLSAgICAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgCi0gICAgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDI1NywgMjU3LCAyNTcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAotICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKLSAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCi0gICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAotICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAxNzAsIDE3MCwgMjcwLCAxNzAsIDI3MCwgMTcwLCAxNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMTcwLCAyNzAsIDE3MCwgMjcwLCAxNzAsIDE3MCwgMjcwLCAyNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAwLCAwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAKLSAgICAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDI3MSwgMjcyLCAyNzEsIDI3MywgMjczLCAyNzMsIDI3MywgCi0gICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDIxMSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIAotICAgIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAwLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMCwgMjcxLCAwLCAyNzEsIDI3MSwgCi0gICAgMCwgMjcxLCAyNzEsIDAsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MSwgMjcxLCAyNzEsIDI3MywgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDI3NCwgCisgICAgMCwgMCwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIAorICAgIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAKKyAgICAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgCisgICAgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDI2MSwgMjYxLCAyNjEsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIAorICAgIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAKKyAgICAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgCisgICAgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzIsIDI3MiwgMjcyLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjc0LCAyNzQsIAogICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKLSAgICAyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTk1LCAyNzUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMTcwLCAxNzAsIDI3NCwgMTcwLCAyNzQsIDE3MCwgMTcwLCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDE3MCwgMjc0LCAxNzAsIDI3NCwgMTcwLCAxNzAsIDI3NCwgMjc0LCAxNzAsIDE3MCwgMTcwLCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMCwgMCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIAorICAgIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAyNzYsIDI2LCAwLCAwLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKLSAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAyNzgsIDI3OSwgCi0gICAgMjc3LCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjc3LCAyODAsIDI4MCwgMjgxLCAyODEsIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAKLSAgICAyNzgsIDI3OSwgMjc4LCAyNzksIDI3OCwgMjc5LCAyNzgsIDI3OSwgMjQzLCAyNDMsIDI3OCwgMjc5LCAyNzcsIDI3NywgCi0gICAgMjc3LCAyNzcsIDI4MSwgMjgxLCAyODEsIDI4MiwgMjc3LCAyODIsIDAsIDI3NywgMjgyLCAyNzcsIDI3NywgMjgwLCAyODMsIAotICAgIDI4NCwgMjgzLCAyODQsIDI4MywgMjg0LCAyODUsIDI3NywgMjc3LCAyODYsIDI4NywgMjg4LCAyODgsIDI4OSwgMCwgMjc3LCAKLSAgICAyOTAsIDI4NSwgMjc3LCAwLCAwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMTcsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMTg3LCAwLCAyOTEsIDI5MSwgMjkyLCAyOTMsIDI5MiwgMjkxLCAKLSAgICAyOTEsIDI5NCwgMjk1LCAyOTEsIDI5NiwgMjk3LCAyOTgsIDI5NywgMjk3LCAyOTksIDI5OSwgMjk5LCAyOTksIDI5OSwgCi0gICAgMjk5LCAyOTksIDI5OSwgMjk5LCAyOTksIDI5NywgMjkxLCAzMDAsIDMwMSwgMzAwLCAyOTEsIDI5MSwgMzAyLCAzMDIsIAotICAgIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAKLSAgICAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDMwMiwgMzAyLCAzMDIsIDI5NCwgMjkxLCAyOTUsIDMwMywgCi0gICAgMzA0LCAzMDMsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIAotICAgIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAzMDUsIDMwNSwgMzA1LCAKLSAgICAyOTQsIDMwMSwgMjk1LCAzMDEsIDI5NCwgMjk1LCAzMDYsIDMwNywgMzA4LCAzMDYsIDMwNiwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMTAsIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMxMCwgMzEwLCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKLSAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgCi0gICAgMzA5LCAzMDksIDAsIDAsIDAsIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDAsIDAsIDMwOSwgMzA5LCAzMDksIAotICAgIDMwOSwgMzA5LCAzMDksIDAsIDAsIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDAsIDAsIDMwOSwgMzA5LCAzMDksIAotICAgIDAsIDAsIDAsIDI5MywgMjkzLCAzMDEsIDMwMywgMzExLCAyOTMsIDI5MywgMCwgMzEyLCAzMTMsIDMxMywgMzEzLCAzMTMsIAotICAgIDMxMiwgMzEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTQsIDMxNCwgMzE0LCAyNiwgMzAsIDAsIDAsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCA4MywgMTM4LCA4MywgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAotICAgIDE0OCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgCi0gICAgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIAotICAgIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAKLSAgICAzMTUsIDMxNSwgMzE1LCAzMTUsIDMxNSwgMzE1LCAzMTUsIDE1MywgMTUzLCAxNTMsIDE1MywgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAxNTMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDAsIDAsIDAsIDI3NSwgMjc2LCAyNzUsIDI3NywgMjc3LCAyNzcsIDI3NywgMjc3LCAKKyAgICAyNzcsIDI3NywgMjc3LCAyNzcsIDIxNSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgCisgICAgMjc1LCAyNzUsIDI3NSwgMjc1LCAwLCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMCwgMjc1LCAwLCAyNzUsIDI3NSwgMCwgCisgICAgMjc1LCAyNzUsIDAsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NSwgMjc1LCAyNzUsIDI3NywgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDI3OCwgMjc4LCAKKyAgICAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMjc4LCAyNzgsIDI3OCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxOTUsIDI3OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAwLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIDgwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAyODAsIDI2LCAwLCAwLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKKyAgICA3MSwgNzEsIDcxLCA3MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODEsIDI4MSwgMjgxLCAyODIsIDI4MywgMjgxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA4MSwgODEsIDgxLCA4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjgxLCAKKyAgICAyODQsIDI4NCwgMjg1LCAyODUsIDI4MiwgMjgzLCAyODIsIDI4MywgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgCisgICAgMjgyLCAyODMsIDI4MiwgMjgzLCAyODIsIDI4MywgMjQ3LCAyNDcsIDI4MiwgMjgzLCAyODEsIDI4MSwgMjgxLCAyODEsIAorICAgIDI4NSwgMjg1LCAyODUsIDI4NiwgMjgxLCAyODYsIDAsIDI4MSwgMjg2LCAyODEsIDI4MSwgMjg0LCAyODcsIDI4OCwgMjg3LCAKKyAgICAyODgsIDI4NywgMjg4LCAyODksIDI4MSwgMjgxLCAyOTAsIDI5MSwgMjkyLCAyOTIsIDI5MywgMCwgMjgxLCAyOTQsIDI4OSwgCisgICAgMjgxLCAwLCAwLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMTgsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMCwgMTc0LCAwLCAyOTUsIDI5NSwgMjk2LCAyOTcsIDI5NiwgMjk1LCAyOTUsIDI5OCwgCisgICAgMjk5LCAyOTUsIDMwMCwgMzAxLCAzMDIsIDMwMSwgMzAxLCAzMDMsIDMwMywgMzAzLCAzMDMsIDMwMywgMzAzLCAzMDMsIAorICAgIDMwMywgMzAzLCAzMDMsIDMwMSwgMjk1LCAzMDQsIDMwNSwgMzA0LCAyOTUsIDI5NSwgMzA2LCAzMDYsIDMwNiwgMzA2LCAKKyAgICAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgCisgICAgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDMwNiwgMzA2LCAzMDYsIDI5OCwgMjk1LCAyOTksIDMwNywgMzA4LCAzMDcsIAorICAgIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAKKyAgICAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAzMDksIDMwOSwgMzA5LCAyOTgsIDMwNSwgCisgICAgMjk5LCAzMDUsIDI5OCwgMjk5LCAzMTAsIDMxMSwgMzEyLCAzMTAsIDMxMCwgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTQsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxNCwgMzE0LCAzMTMsIDMxMywgMzEzLCAKKyAgICAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgCisgICAgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIAorICAgIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIAorICAgIDAsIDAsIDMxMywgMzEzLCAzMTMsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDMxMywgMzEzLCAzMTMsIDAsIDAsIDAsIDI5NywgCisgICAgMjk3LCAzMDUsIDMwNywgMzE1LCAyOTcsIDI5NywgMCwgMzE2LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNiwgMzE2LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMTgsIDMxOCwgMzE4LCAyNiwgMzAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDAsIDQ4LCA0OCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCAwLCAwLCAwLCAwLCAwLCA4MywgMTM4LCA4MywgMCwgMCwgMCwgMCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCisgICAgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAKKyAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgMCwgMCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIAorICAgIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAKKyAgICAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAzMTksIDMxOSwgCisgICAgMzE5LCAzMTksIDE1MywgMTUzLCAxNTMsIDE1MywgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAxNTMsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODYsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODYsIDAsIDAsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNzMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCA4MywgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgCi0gICAgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA4MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCAKLSAgICA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKLSAgICAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMCwgMCwgMTA3LCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDAsIDAsIDAsIDEwNywgMCwgMCwgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDEwNCwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgCi0gICAgMzE2LCAzMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMCwgMCwgMCwgMTM4LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTM1LCAxMzUsIDEzNSwgMCwgMTM1LCAxMzUsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEzNSwgODYsIDEzNSwgODEsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgMCwgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgODEsIDE3NSwgCi0gICAgODYsIDAsIDAsIDAsIDAsIDE0MiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAzMTYsIDMxNiwgMTA0LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAwLCAwLCAwLCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMzE2LCAzMTYsIDMxNiwgMzE2LCAzMTYsIDMxNiwgCi0gICAgMzE2LCAzMTYsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCi0gICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAotICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKLSAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIAotICAgIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAKLSAgICAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAzMTcsIDMxNywgMzE3LCAwLCAxMzksIDEzNSwgCi0gICAgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAKLSAgICAxNDIsIDgzLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgCi0gICAgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAotICAgIDE1MywgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM5LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE0MCwgNDgsIAotICAgIDE0MCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCAxMzksIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM5LCAxNDIsIDE0MSwgODMsIDgzLCAKLSAgICAxODgsIDgzLCA4MywgODMsIDgzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCA4MSwgODEsIDgxLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDksIDEzNSwgMTM1LCAxMzUsIDEzNSwgCi0gICAgMTM5LCAxMzUsIDE1MCwgMTUwLCAxMzUsIDEzNSwgMTM1LCAxNDIsIDE0MiwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIAotICAgIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM5LCAxNzQsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgMTM1LCAxMzksIDEzNSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIAotICAgIDE3NCwgMTQ1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgCi0gICAgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKICAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKLSAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCi0gICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAotICAgIDE3MywgMTczLCAxNzMsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODMsIDgzLCA4MywgCi0gICAgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCi0gICAgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKLSAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNDgsIDQ4LCAwLCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTczLCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDE3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCiAgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMCwgODMsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgODMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDQsIDQ0LCA0NCwgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIAorICAgIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAogICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAotICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICAwLCAwLCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDEwNywgMCwgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAxMDcsIDAsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAwLCAxMDQsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAKKyAgICAzMjAsIDAsIDAsIDAsIDEzOCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDAsIDAsIDAsIDAsIDEwNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEwNywgMTA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAxMDcsIDEzNSwgMTM1LCAxMzUsIDAsIDEzNSwgMTM1LCAwLCAwLCAwLCAwLCAwLCAxMzUsIDg2LCAxMzUsIDgxLCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDAsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDAsIDAsIDAsIDAsIDgxLCAxNzYsIDg2LCAwLCAwLCAwLCAwLCAxNDIsIAorICAgIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDQsIDEwNCwgCisgICAgMTA0LCAxMDQsIDEwNCwgMTA0LCAxMDQsIDEwNCwgMTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMzIwLCAzMjAsIAorICAgIDEwNCwgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMCwgMCwgMCwgCisgICAgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMzgsIDEzOCwgMTM4LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDAsIDAsIDAsIDAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAzMjAsIDMyMCwgMzIwLCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgCisgICAgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIAorICAgIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAxMDcsIDEwNywgMTA3LCAKKyAgICAxMDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgCisgICAgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIAorICAgIDMyMSwgMzIxLCAzMjEsIDMyMSwgMzIxLCAzMjEsIDMyMSwgMCwgMTM5LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgCisgICAgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTQyLCA4MywgODMsIDgzLCA4MywgODMsIDgzLCAKKyAgICA4MywgMCwgMCwgMCwgMCwgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIAorICAgIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE1MywgMTUzLCAxNTMsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAKKyAgICAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTM1LCAxMzUsIDEzOSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAxNDAsIDQ4LCAxNDAsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgMTQwLCA0OCwgNDgsIDQ4LCA0OCwgMTM5LCAxMzksIDEzOSwgMTM1LCAKKyAgICAxMzUsIDEzNSwgMTM1LCAxMzksIDEzOSwgMTQyLCAxNDEsIDgzLCA4MywgMTg4LCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgODEsIDgxLCA4MSwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgMTQ5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTM1LCAxNTAsIDE1MCwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTQyLCAxNDIsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgODMsIAorICAgIDgzLCA4MywgODMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNSwgMTM1LCAxMzksIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgCisgICAgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzOSwgMTM5LCAxMzksIDEzNSwgMTM1LCAxMzUsIAorICAgIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzOSwgMTc1LCA0OCwgNDgsIDQ4LCA0OCwgODMsIDgzLCA4MywgODMsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDEzNSwgCisgICAgMTM5LCAxMzUsIDEzOSwgMTM5LCAxMzUsIDEzNSwgMTM1LCAxMzUsIDEzNSwgMTM1LCAxNzUsIDE0NSwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAxNDQsIDE0NCwgMTQ0LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAKKyAgICAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgCisgICAgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIAorICAgIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAxNzMsIDE3MywgMTczLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MywgODMsIDgzLCA4MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIAorICAgIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCA0OCwgNDgsIDQ4LCAKKyAgICA0OCwgNDgsIDQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAogICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAKICAgICAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgCi0gICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIAotICAgIDEzOSwgMTM5LCAxMzksIDEzOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1LCAKLSAgICAxMzUsIDEzNSwgMTM1LCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgMCwgMCwgCisgICAgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAxMzksIDEzOSwgMTM5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzUsIDEzNSwgMTM1LCAxMzUsIDUzLCA1MywgNTMsIAorICAgIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCA1MywgNTMsIDUzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIAotICAgIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCiAgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAogICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAotICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOCwgMzE4LCAzMTgsIDMxOSwgMzE5LCAKLSAgICAxNzUsIDE3NSwgMTc1LCA4MCwgODAsIDgwLCAzMjAsIDMxOSwgMzE5LCAzMTksIDMxOSwgMzE5LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4MCwgODAsIDgxLCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODYsIDg2LCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MSwgCi0gICAgODEsIDgxLCA4MSwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDMxOCwgMzE4LCAKLSAgICAzMTgsIDMxOCwgMzE4LCAzMTgsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKLSAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDAsIDAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCisgICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjMsIDMyMywgMTc2LCAxNzYsIDE3NiwgODAsIDgwLCA4MCwgCisgICAgMzI0LCAzMjMsIDMyMywgMzIzLCAzMjMsIDMyMywgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDg2LCAKKyAgICA4NiwgODYsIDg2LCA4NiwgODYsIDg2LCA4NiwgODAsIDgwLCA4MSwgODEsIDgxLCA4MSwgODEsIDg2LCA4NiwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODEsIDgxLCA4MSwgODEsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIAorICAgIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCA4MSwgCi0gICAgODEsIDgxLCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDgxLCA4MSwgODEsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgsIDE0OCwgMTQ4LCAKLSAgICAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgCi0gICAgMTQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIAorICAgIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDE0OCwgMTQ4LCAxNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCiAgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDAsIDQ5LCA0OSwgMCwgMCwgNDksIDAsIDAsIDQ5LCA0OSwgMCwgMCwgNDksIAotICAgIDQ5LCA0OSwgNDksIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDAsIDM1LCAwLCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMCwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAwLCAKKyAgICA0OSwgNDksIDAsIDAsIDQ5LCAwLCAwLCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAwLCAzNSwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCAwLCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCAKKyAgICA0OSwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCAKLSAgICA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCAwLCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAwLCA0OSwgMCwgMCwgMCwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDAsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDAsIDAsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzMjUsIAogICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAwLCAwLCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCi0gICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzIxLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjIyLCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzIxLCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMjIyLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzIxLCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjIyLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyNiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgNDksIDQ5LCA0OSwgNDksIAogICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAotICAgIDQ5LCA0OSwgNDksIDMyMSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKLSAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDIyMiwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgNDksIDQ5LCA0OSwgMzI1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKICAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKLSAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzIxLCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjIyLCAzNSwgMzUsIAotICAgIDM1LCAzNSwgMzUsIDM1LCA0OSwgMzUsIDAsIDAsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgCi0gICAgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIAotICAgIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAzMjIsIDMyMiwgMzIyLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxMzAsIDAsIDAsIDAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDAsIAotICAgIDEzMCwgMTMwLCAwLCAxMzAsIDAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAwLCAxMzAsIDEzMCwgCi0gICAgMCwgMTMwLCAwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgCi0gICAgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMCwgMCwgMCwgMCwgMCwgMTMwLCAKLSAgICAxMzAsIDEzMCwgMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIAotICAgIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMCwgMTMwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCisgICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIAorICAgIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAKKyAgICAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgCisgICAgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMzI1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIAorICAgIDM1LCAzNSwgMzUsIDM1LCAzNSwgMjI2LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA0OSwgMzUsIDAsIDAsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgCisgICAgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIAorICAgIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAKKyAgICAzMjYsIDMyNiwgMzI2LCAzMjYsIDMyNiwgMzI2LCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDAsIAorICAgIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgCisgICAgMTMxLCAxMzEsIDAsIDEzMSwgMCwgMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzEsIDAsIDAsIDAsIDAsIDEzMSwgMCwgMTMxLCAKKyAgICAwLCAxMzEsIDAsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgMTMxLCAwLCAxMzEsIDAsIDAsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIAorICAgIDAsIDEzMSwgMCwgMTMxLCAwLCAxMzEsIDEzMSwgMCwgMTMxLCAwLCAwLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIDEzMSwgCisgICAgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDAsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAwLCAxMzEsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMCwgMCwgMCwgMCwgMCwgMTMxLCAxMzEsIDEzMSwgMCwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDAsIAorICAgIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMxLCAKKyAgICAxMzEsIDEzMSwgMTMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OCwgNzgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAwLCAwLCAwLCAwLCAwLCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAKLSAgICAzMjMsIDAsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgCi0gICAgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAyMzcsIAotICAgIDIzNywgMjM3LCAyMzcsIDIzNywgMjM3LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMjE4LCAyMTgsIDAsIDAsIDAsIDAsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgCi0gICAgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIAotICAgIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAyMzcsIDMyNCwgMzI0LCAKLSAgICAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMzI0LCAzMjQsIDMyNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgCi0gICAgODAsIDgwLCAyNjQsIDI2NCwgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjQsIDI2NCwgCi0gICAgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIAotICAgIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAKLSAgICAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDI2NCwgMjY0LCAyNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI2NCwgMjY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OCwgNzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDAsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgCisgICAgMzQsIDM0LCAwLCAwLCAwLCAwLCAwLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAKKyAgICAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAzMjcsIDAsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgCisgICAgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIAorICAgIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAyNDEsIDI0MSwgMjQxLCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMjIyLCAyMjIsIDAsIDAsIDAsIDAsIDMyOCwgCisgICAgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIAorICAgIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAKKyAgICAzMjgsIDMyOCwgMzI4LCAyNDEsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMzI4LCAzMjgsIDMyOCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAKKyAgICA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCA4MCwgODAsIDgwLCAyNjgsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIAorICAgIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAKKyAgICAyNjgsIDI2OCwgMjY4LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDI2OCwgMjY4LCAyNjgsIDI2OCwgMjY4LCAyNjgsIDI2OCwgCisgICAgMjY4LCAyNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2OCwgMjY4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDAsIDI2LCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCkBAIC0yNTYwLDc3ICsyNTY3LDc2IEBACiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMCwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCi0gICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAorICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKKyAgICAyNiwgMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgCiAgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgCi0gICAgMCwgMCwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAKLSAgICAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAogICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIAotICAgIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgCisgICAgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAyNiwgMjYsIDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNzAsIAorICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKICAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCiAgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIAogICAgIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAKLSAgICAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgCi0gICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDE3MCwgMTcwLCAxNzAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgCi0gICAgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIAotICAgIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDI3MCwgMjcwLCAyNzAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAKKyAgICAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgMjc0LCAyNzQsIDI3NCwgCisgICAgMjc0LCAyNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4NywgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAKLSAgICAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgCi0gICAgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIDE4NywgMTg3LCAxODcsIAotICAgIDE4NywgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAxNzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIAorICAgIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAKKyAgICAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDE3NCwgCisgICAgMTc0LCAxNzQsIDE3NCwgMTc0LCAxNzQsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIApAQCAtMjY0MywxNyArMjY0OSwxNyBAQAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAogICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIAotICAgIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAKLSAgICAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgCi0gICAgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIAotICAgIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAyNjksIDI2OSwgMjY5LCAwLCAKLSAgICAwLCAKKyAgICA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCA3MSwgNzEsIDcxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIAorICAgIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAKKyAgICAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgMjczLCAyNzMsIDI3MywgCisgICAgMjczLCAyNzMsIDI3MywgMjczLCAwLCAwLCAKIH07CiAKIC8qIGRlY29tcG9zaXRpb24gZGF0YSAqLwpAQCAtNTE3OCw3ICs1MTg0LDYgQEAKIAl7IDI1NSwgNywgOCwgMjU1LCAwIH0sCiAJeyAyNTUsIDcsIDksIDI1NSwgMCB9LAogCXsgMSwgNSwgMjU1LCAyNTUsIDAgfSwKLQl7IDE1LCAxNCwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMTAsIDI1NSwgMjU1LCAwIH0sCiAJeyAxOCwgMjU1LCAyNTUsIDI1NSwgMCB9LAogCXsgMTksIDI1NSwgMjU1LCAyNTUsIDAgfSwKQEAgLTUxOTEsNiArNTE5Niw3IEBACiAJeyAyNTUsIDI1NSwgOSwgMjU1LCAwIH0sCiAJeyAxOSwgMzAsIDI1NSwgMjU1LCAwIH0sCiAJeyAyNTUsIDgsIDI1NSwgMjU1LCAwIH0sCisJeyAyNTUsIDI3LCAyNTUsIDI1NSwgMCB9LAogCXsgMjU1LCAyMiwgMjU1LCAyNTUsIDAgfSwKIAl7IDI1NSwgMjMsIDI1NSwgMjU1LCAwIH0sCiAJeyA5LCAyNTUsIDI1NSwgMjU1LCAwIH0sCkBAIC01MjA1LDggKzUyMTEsOCBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgY2hhbmdlc18zXzJfMF9pbmRleFtdID0gewogICAgIDAsIDEsIDIsIDIsIDMsIDQsIDUsIDYsIDIsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIAogICAgIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDIsIDIsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgCi0gICAgMzYsIDIsIDIsIDIsIDM3LCAzOCwgMiwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgCi0gICAgNTEsIDIsIDUyLCAyLCAyLCA1MywgNTQsIDU1LCA1NiwgNTcsIDIsIDIsIDU4LCA1OSwgNjAsIDIsIDIsIDYxLCA2MiwgNjMsIAorICAgIDM2LCAyLCAyLCAyLCAzNywgMzgsIDIsIDM5LCAyLCA0MCwgNDEsIDQyLCA0MywgNDQsIDQ1LCA0NiwgNDcsIDQ4LCA0OSwgCisgICAgNTAsIDIsIDUxLCAyLCAyLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDIsIDU3LCA1OCwgNTksIDYwLCAyLCAyLCA2MSwgNjIsIDYzLCAKICAgICA2NCwgNjUsIDY1LCAyLCAyLCAyLCAyLCA2NiwgMiwgNjcsIDY4LCA2OSwgNzAsIDcxLCAyLCAyLCAyLCA3MiwgNzMsIDc0LCAKICAgICA3NSwgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgMiwgMiwgMiwgMiwgMiwgMiwgODIsIDIsIDIsIDIsIDIsIDIsIDgzLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKQEAgLTUyMTcsOCArNTIyMyw4IEBACiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDkzLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NCwgOTUsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDk2LCA1MCwgNTAsIAotICAgIDk3LCA5OCwgNTAsIDk5LCAxMDAsIDEwMSwgMTAyLCAxMDMsIDEwNCwgMTA1LCAxMDYsIDEwNywgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgOTQsIDk1LCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA5NiwgNDksIDQ5LCAKKyAgICA5NywgOTgsIDQ5LCA5OSwgMTAwLCAxMDEsIDEwMiwgMTAzLCAxMDQsIDEwNSwgMTA2LCAxMDcsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTIyOSwxMyArNTIzNSwxMyBAQAogICAgIDExOSwgMTIwLCAxMjEsIDEyMiwgMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDIsIDIsIDIsIDIsIDIsIDIsIDEyOCwgMiwgCiAgICAgMTI5LCAxMzAsIDEzMSwgMiwgMTMyLCAyLCAxMzMsIDIsIDIsIDIsIDEzNCwgMiwgMiwgMiwgMTM1LCAxMzYsIDEzNywgMTM4LCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAxMzksIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDE0MCwgMiwgMTQxLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgCi0gICAgNTAsIDE0MiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCisgICAgMiwgMiwgMiwgMiwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgMTQwLCAyLCAxNDEsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgMTQyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKLSAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA1MCwgNTAsIDUwLCA1MCwgMTQzLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCA0OSwgMTQzLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAKICAgICAyLCAyLCAxNDQsIDE0NSwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01MjYyLDkgKzUyNjgsOSBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDUwLCA1MCwgNTAsIAotICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIAotICAgIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgNTAsIDUwLCA1MCwgMTc4LCA1MCwgMTc5LCAyLCAyLCAyLCAyLCAyLCAKKyAgICAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCAKKyAgICA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDQ5LCA0OSwgNDksIDE3OCwgNDksIDE3OSwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCiAgICAgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgCkBAIC01NTA1LDcgKzU1MTEsNyBAQAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAotICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDUwLCAxODAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAorICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDQ5LCAxODAsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIAogICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIsIApAQCAtNTYyNyw3ICs1NjMzLDcgQEAKICAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAwLCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKICAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTU3ODcsNzA5ICs1NzkzLDI2NyBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAogICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAzNSwgNCwgMCwgMCwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgMSwgMSwgMCwgMCwgMCwgCisgICAgNCwgMzUsIDgsIDYsIDcsIDM2LCAzNywgMzgsIDM5LCA0MCwgNDEsIDEsIDEsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MywgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDQ0LCA0NCwgNDQsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDQ1LCA0NiwgMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgCisgICAgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCiAgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAKKyAgICAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCAzNCwgMzQsIDM0LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM1LCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzNiwgNCwgMCwgMCwgMzcsIDM4LCAzOSwgNDAsIAotICAgIDQxLCA0MiwgMSwgMSwgMCwgMCwgMCwgNCwgMzYsIDgsIDYsIDcsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDEsIDEsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0MywgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgNDQsIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ1LCAKLSAgICA0NiwgMTEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAKLSAgICA0NywgNDcsIDQ3LCA0NywgNDcsIDQ3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgCi0gICAgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCAzNSwgMzUsIDM1LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA0OCwgNDgsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUxLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAKLSAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIAogICAgIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMTksIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKLSAgICA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAxLCAxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxNCwgMTQsIDE0LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MywgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDAsIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDAsIDAsIAotICAgIDAsIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDAsIDAsIDAsIDAsIAotICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAotICAgIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCi0gICAgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgOSwgMCwgCi0gICAgOSwgMCwgOSwgMCwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgCi0gICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCi0gICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1MSwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIApAQCAtNjQ5NywxNSArNjA2MSwyMCBAQAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKQEAgLTY1MTUsMzMgKzYwODQsNDcwIEBACiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIAorICAgIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgCisgICAgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMTksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAxLCAxLCAyMSwgMjEsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDAsIDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDQ5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNCwgMTQsIDE0LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCA5LCA5LCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIAorICAgIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIAorICAgIDAsIDAsIDAsIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDksIDksIDAsIDAsIAorICAgIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIDAsIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDksIDksIDksIDksIDksIDksIDksIAorICAgIDksIDksIDksIDksIDksIDksIDksIDksIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDksIDksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOSwgMCwgMCwgMCwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgOSwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgMCwgCisgICAgOSwgMCwgOSwgMCwgOSwgMCwgOSwgMCwgOSwgOSwgMCwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgCisgICAgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgCisgICAgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgCisgICAgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgOSwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOSwgOSwgOSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTksIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKICAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAKLSAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAKKyAgICA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCA5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFuZ2VfcmVjb3JkKiBnZXRfY2hhbmdlXzNfMl8wKFB5X1VDUzQgbikKZGlmZiAtLWdpdCBhL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaCBiL01vZHVsZXMvdW5pY29kZW5hbWVfZGIuaAppbmRleCAzODM4ODgyLi43Y2NiMTI2IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3VuaWNvZGVuYW1lX2RiLmgKKysrIGIvTW9kdWxlcy91bmljb2RlbmFtZV9kYi5oCkBAIC02LDcgKzYsNyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgbGV4aWNvbltdID0gewogICAgIDc2LCA2OSwgODQsIDg0LCA2OSwgMjEwLCA4NywgNzMsIDg0LCAyMDAsIDgzLCA4OSwgNzYsIDc2LCA2NSwgNjYsIDc2LCAKICAgICAxOTcsIDgzLCA3NywgNjUsIDc2LCAyMDQsIDgzLCA3MywgNzEsIDIwNiwgNjcsIDY1LCA4MCwgNzMsIDg0LCA2NSwgMjA0LCAKLSAgICA3NiwgNjUsIDg0LCA3MywgMjA2LCA4OSwgMjAxLCA2NywgNzQsIDIwMywgNjUsIDgyLCA2NSwgNjYsIDczLCAxOTUsIDc3LCAKKyAgICA3NiwgNjUsIDg0LCA3MywgMjA2LCA4OSwgMjAxLCA2NSwgODIsIDY1LCA2NiwgNzMsIDE5NSwgNjcsIDc0LCAyMDMsIDc3LCAKICAgICA2NSwgODQsIDcyLCA2OSwgNzcsIDY1LCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzEsIDg5LCA4MCwgODQsIDczLCA2NSwgCiAgICAgMjA2LCA3MiwgNzMsIDY5LCA4MiwgNzksIDcxLCA3NiwgODksIDgwLCAyMDAsIDY3LCA3OSwgNzcsIDgwLCA2NSwgODQsIDczLCAKICAgICA2NiwgNzMsIDc2LCA3MywgODQsIDIxNywgNjcsIDg1LCA3OCwgNjksIDczLCA3MCwgNzksIDgyLCAyMDUsIDgzLCA4OSwgNzcsIApAQCAtMjcsMjQgKzI3LDI0IEBACiAgICAgNzUsIDY1LCA3OCwgMTkzLCAxOTQsIDc3LCA3OSwgNjgsIDczLCA3MCwgNzMsIDY5LCAyMTAsIDY4LCA3OSwgMjEyLCA3NSwgCiAgICAgNjUsIDc4LCA3MSwgODgsIDIwMSwgNjUsIDEyOCwgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDg0LCA3MywgNjYsIDY5LCAKICAgICA4NCwgNjUsIDIwNiwgNzksIDE5OCwgNzMsIDc4LCA3MywgODQsIDczLCA2NSwgMjA0LCA3NywgNjksIDY5LCAyMDUsIDg2LCAKLSAgICA2OSwgODIsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDc3LCA4OSwgNjUsIDc4LCA3NywgNjUsIDIxMCwgNzUsIDcyLCA3NywgNjksIAotICAgIDIxMCwgODUsIDEyOCwgODcsIDcyLCA3MywgODQsIDE5NywgNjcsIDY1LCA4MiwgODIsIDczLCA2OSwgMjEwLCA3MywgMTI4LCAKLSAgICA2NSwgODIsIDgyLCA3OSwgODcsIDEyOCwgNzksIDEyOCwgNjUsIDY2LCA3OSwgODYsIDE5NywgNzcsIDY1LCA4MiwgNzUsIAotICAgIDEyOCwgODksIDY5LCAyMDAsIDY1LCA4MiwgODIsIDc5LCAyMTUsIDY3LCA3OSwgODAsIDg0LCA3MywgMTk1LCA4MCwgNzIsIAotICAgIDY1LCA4MywgNjksIDQ1LCAxOTcsIDc3LCA3OSwgNzgsIDcxLCA3OSwgNzYsIDczLCA2NSwgMjA2LCA2OCwgNjksIDg2LCA2NSwgCi0gICAgNzgsIDY1LCA3MSwgNjUsIDgyLCAyMDEsIDY2LCA3NiwgNjUsIDY3LCAyMDMsIDg0LCA3MywgNzYsIDE5NywgODMsIDg5LCAKLSAgICA3NywgNjYsIDc5LCA3NiwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgOTAsIDY5LCAxOTYsIAotICAgIDg0LCA3MiwgNjUsIDIwNSwgNzQsIDc5LCA3OCwgNzEsIDgzLCA2OSwgNzksIDc4LCAxOTksIDgzLCA4NCwgODIsIDc5LCA3NSwgCi0gICAgNjksIDEyOCwgODMsIDgxLCA4NSwgNjUsIDgyLCA2OSwgMTk2LCA2NiwgNzksIDIxNiwgNzIsIDY5LCA2NiwgODIsIDY5LCAKLSAgICAyMTUsIDc3LCA3MywgNjUsIDIwNywgODAsIDc2LCA4NSwgMjExLCA4MiwgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgODIsIAotICAgIDY4LCAyMTEsIDcxLCA2OSwgNzksIDgyLCA3MSwgNzMsIDY1LCAyMDYsIDY4LCA4MiwgNjUsIDg3LCA3MywgNzgsIDcxLCAKLSAgICAyMTEsIDY3LCA3MiwgNzksIDgzLCA2OSwgNzksIDc4LCAxOTksIDcyLCA2NSwgNzYsIDcwLCA4NywgNzMsIDY4LCA4NCwgCisgICAgNjksIDgyLCA4NCwgNzMsIDY3LCA2NSwgMjA0LCA3NywgODksIDY1LCA3OCwgNzcsIDY1LCAyMTAsIDg1LCAxMjgsIDc1LCAKKyAgICA3MiwgNzcsIDY5LCAyMTAsIDg3LCA3MiwgNzMsIDg0LCAxOTcsIDY1LCA2NiwgNzksIDg2LCAxOTcsIDY3LCA2NSwgODIsIAorICAgIDgyLCA3MywgNjksIDIxMCwgNzMsIDEyOCwgNjUsIDgyLCA4MiwgNzksIDg3LCAxMjgsIDg5LCA2OSwgMjAwLCA3OSwgMTI4LCAKKyAgICA3NywgNjUsIDgyLCA3NSwgMTI4LCA2NSwgODIsIDgyLCA3OSwgMjE1LCA2NywgNzksIDgwLCA4NCwgNzMsIDE5NSwgODAsIAorICAgIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk3LCA3NywgNzksIDc4LCA3MSwgNzksIDc2LCA3MywgNjUsIDIwNiwgNjgsIDY5LCA4NiwgCisgICAgNjUsIDc4LCA2NSwgNzEsIDY1LCA4MiwgMjAxLCA2NiwgNzYsIDY1LCA2NywgMjAzLCA4NCwgNzMsIDc2LCAxOTcsIDgzLCAKKyAgICA4OSwgNzcsIDY2LCA3OSwgNzYsIDEyOCwgODAsIDY1LCA4MiwgNjksIDc4LCA4NCwgNzIsIDY5LCA4MywgNzMsIDkwLCA2OSwgCisgICAgMTk2LCA4NCwgNzIsIDY1LCAyMDUsIDc0LCA3OSwgNzgsIDcxLCA4MywgNjksIDc5LCA3OCwgMTk5LCA4MywgODQsIDgyLCAKKyAgICA3OSwgNzUsIDY5LCAxMjgsIDgzLCA4MSwgODUsIDY1LCA4MiwgNjksIDE5NiwgNjYsIDc5LCAyMTYsIDcyLCA2OSwgNjYsIAorICAgIDgyLCA2OSwgMjE1LCA3NywgNzMsIDY1LCAyMDcsIDgwLCA3NiwgODUsIDIxMSwgODIsIDczLCA3MSwgNzIsIDg0LCA4NywgCisgICAgNjUsIDgyLCA2OCwgMjExLCA3MSwgNjksIDc5LCA4MiwgNzEsIDczLCA2NSwgMjA2LCA2OCwgODIsIDY1LCA4NywgNzMsIDc4LCAKKyAgICA3MSwgMjExLCA2NywgNzIsIDc5LCA4MywgNjksIDc5LCA3OCwgMTk5LCA3MiwgNjUsIDc2LCA3MCwgODcsIDczLCA2OCwgODQsIAogICAgIDIwMCwgNjYsIDY1LCA3NiwgNzMsIDc4LCA2OSwgODMsIDE5NywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgMjEzLCA4NCwgODcsIAogICAgIDc5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAyMDUsIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NiwgCi0gICAgNjUsIDc2LCA2NywgNzIsIDY5LCA3NywgNzMsIDY3LCA2NSwgMjA0LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIAotICAgIDcyLCA3MywgMTk1LCA3OSwgNzgsIDY5LCAxMjgsIDg0LCA3OSwgMTI4LCA2NSwgNzYsIDY5LCAxOTgsIDg0LCA4NywgMjA3LCAKLSAgICA3MiwgNjksIDY1LCA4NiwgMjE3LCA2NywgNzksIDc4LCA4MywgNzksIDc4LCA2NSwgNzgsIDIxMiwgNzksIDg2LCA2OSwgCi0gICAgMjEwLCA2NiwgODIsIDY1LCA3MiwgNzcsIDIwMSwgODMsIDY3LCA4MiwgNzMsIDgwLCAyMTIsIDg1LCAyMDgsIDc2LCA3OSwgCisgICAgNjUsIDc2LCA2NywgNzIsIDY5LCA3NywgNzMsIDY3LCA2NSwgMjA0LCA2NSwgNzYsIDY5LCAxOTgsIDczLCA2OCwgNjksIDc5LCAKKyAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDczLCAxOTUsIDc5LCA3OCwgNjksIDEyOCwgODQsIDc5LCAxMjgsIDg0LCA4NywgMjA3LCAKKyAgICA3MiwgNjksIDY1LCA4NiwgMjE3LCA3OSwgODYsIDY5LCAyMTAsIDY3LCA3OSwgNzgsIDgzLCA3OSwgNzgsIDY1LCA3OCwgCisgICAgMjEyLCA2NiwgODIsIDY1LCA3MiwgNzcsIDIwMSwgODMsIDY3LCA4MiwgNzMsIDgwLCAyMTIsIDg1LCAyMDgsIDc2LCA3OSwgCiAgICAgMjE1LCA3MiwgNjUsIDIwMCwgNzksIDc4LCAxOTcsIDY4LCA3OSwgODcsIDIwNiwgNzIsIDczLCA3MSwgMjAwLCA3MCwgODUsIAogICAgIDc2LCA3NiwgODcsIDczLCA2OCwgODQsIDIwMCwgNjYsIDgyLCA2NSwgNjcsIDc1LCA2OSwgODQsIDEyOCwgNjksIDgxLCA4NSwgCiAgICAgNjUsIDIwNCwgODQsIDY1LCAxOTksIDY2LCA2NSwgODIsIDEyOCwgNjgsIDc5LCA3NywgNzMsIDc4LCAyMDcsIDc4LCA4NSwgCkBAIC02NSw0OSArNjUsNDkgQEAKICAgICA3NiwgODUsIDE5NywgODMsIDcyLCA2NSwgODIsIDY1LCA2OCwgMTkzLCA4MywgNzMsIDc4LCA3MiwgNjUsIDc2LCAxOTMsIAogICAgIDc1LCA2NSwgMTI4LCA4MiwgODUsIDc4LCA3MywgMTk1LCA4MywgNjUsIDg1LCA4MiwgNjUsIDgzLCA3MiwgODQsIDgyLCAKICAgICAxOTMsIDg0LCA2OSwgODQsIDgyLCA2NSwgNzEsIDgyLCA2NSwgMjA1LCA2OCwgNjksIDgzLCA2OSwgODIsIDY5LCAyMTIsIAotICAgIDg0LCA3MywgNzYsIDY4LCA2OSwgMTI4LCA3MSwgODUsIDgyLCA3NywgODUsIDc1LCA3MiwgMjAxLCA3NywgNjUsIDEyOCwgCi0gICAgNzcsIDY1LCA4OSwgNjksIDIwMywgNzcsIDY5LCA2OSwgODQsIDY5LCAyMDEsIDc4LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDgzLCA4OSwgODIsIDczLCA2NSwgMTk1LCA3MCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjUsIDEyOCwgODksIDY1LCAKLSAgICAxMjgsIDc2LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA3MywgODgsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCAKLSAgICA2OSwgODAsIDY3LCA3MiwgMTkzLCA3OCwgNjUsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCAxMjgsIDc2LCA3OSwgNzgsIAotICAgIDE5OSwgNzgsIDczLCA3OCwgNjksIDEyOCwgODQsIDg1LCA4MiwgNzUsIDczLCAxOTUsIDcyLCA2NSwgNzcsIDkwLCAxOTMsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDIwNCwgNzksIDgwLCA2OSwgMjA2LCA4MiwgNjUsIDEyOCwgCi0gICAgODMsIDY1LCAxMjgsIDgzLCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY5LCA4MywgMTk3LCA4NiwgNzMsIDY5LCAyMTIsIDc2LCAKLSAgICA2NSwgMjA3LCA5MCwgOTAsIDg5LCA4OCwgMTI4LCA5MCwgOTAsIDg5LCA4NCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgODgsIAotICAgIDEyOCwgOTAsIDkwLCA4OSwgODIsIDEyOCwgOTAsIDkwLCA4OSwgODAsIDEyOCwgOTAsIDkwLCA4OSwgNjUsIDEyOCwgOTAsIAotICAgIDkwLCA4OSwgMTI4LCA5MCwgOTAsIDg1LCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDkwLCA4NSwgCi0gICAgODIsIDEyOCwgOTAsIDkwLCA4NSwgODAsIDEyOCwgOTAsIDkwLCA4NSwgMTI4LCA5MCwgOTAsIDgzLCA4OSwgNjUsIDEyOCwgCi0gICAgOTAsIDkwLCA4MywgNjUsIDEyOCwgOTAsIDkwLCA3OSwgODgsIDEyOCwgOTAsIDkwLCA3OSwgODAsIDEyOCwgOTAsIDkwLCAKLSAgICA3OSwgMTI4LCA5MCwgOTAsIDczLCA4OCwgMTI4LCA5MCwgOTAsIDczLCA4NCwgMTI4LCA5MCwgOTAsIDczLCA4MCwgMTI4LCAKLSAgICA5MCwgOTAsIDczLCA2OSwgODgsIDEyOCwgOTAsIDkwLCA3MywgNjksIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCA4MCwgCi0gICAgMTI4LCA5MCwgOTAsIDczLCA2OSwgMTI4LCA5MCwgOTAsIDczLCAxMjgsIDkwLCA5MCwgNjksIDg4LCAxMjgsIDkwLCA5MCwgCi0gICAgNjksIDgwLCAxMjgsIDkwLCA5MCwgNjksIDY5LCAxMjgsIDkwLCA5MCwgNjksIDEyOCwgOTAsIDkwLCA2NSwgODgsIDEyOCwgCi0gICAgOTAsIDkwLCA2NSwgODQsIDEyOCwgOTAsIDkwLCA2NSwgODAsIDEyOCwgOTAsIDkwLCA2NSwgNjUsIDEyOCwgOTAsIDkwLCAKLSAgICA2NSwgMTI4LCA5MCwgODksIDcxLCA3OSwgODMsIDEyOCwgOTAsIDg3LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3OCwgNzQsIAotICAgIDEyOCwgOTAsIDg3LCA3OCwgNjYsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc0LCAxMjgsIDkwLCA4NywgNjUsIDgyLCA2NSwgCi0gICAgNzUsIDY1LCA4OSwgMTI4LCA5MCwgODcsIDY1LCAxMjgsIDkwLCA4NSwgODQsIDEyOCwgOTAsIDg1LCA3OSwgODgsIDEyOCwgCi0gICAgOTAsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDg1LCA3OSwgMTI4LCA5MCwgODUsIDc3LCAxMjgsIDkwLCA4NSwgNjYsIDg1LCAKLSAgICA4MiwgMTI4LCA5MCwgODUsIDUzLCAxMjgsIDkwLCA4NSwgMTgxLCA5MCwgODMsIDcyLCA2NSwgMTI4LCA5MCwgODIsIDY1LCAKLSAgICAxMjgsIDkwLCA4MSwgNjUsIDgwLCA3MiwgMTkzLCA5MCwgNzksIDg0LCAxMjgsIDkwLCA3OSwgNzksIDEyOCwgOTAsIDc5LCAKLSAgICA2NSwgMTI4LCA5MCwgNzYsIDY1LCA3NywgMTkzLCA5MCwgNzYsIDY1LCAxMjgsIDkwLCA3NiwgMTkzLCA5MCwgNzQsIDY5LCAKLSAgICAxMjgsIDkwLCA3MywgOTAsIDUwLCAxMjgsIDkwLCA3MywgODEsIDY1LCA2NSwgMTI4LCA5MCwgNzMsIDc4LCA3OSwgODIsIAotICAgIDEyOCwgOTAsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDkwLCA3MywgNzEsIDkwLCA2NSwgMTk5LCA5MCwgNzMsIDcxLCAxMjgsIAotICAgIDkwLCA3MywgNjgsIDE5MywgOTAsIDczLCA2NiwgMTI4LCA5MCwgNzMsIDE5NCwgOTAsIDczLCA1MSwgMTI4LCA5MCwgMjAxLCAKLSAgICA5MCwgNzIsIDg5LCA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4NCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgODgsIDEyOCwgOTAsIAotICAgIDcyLCA4OSwgODIsIDEyOCwgOTAsIDcyLCA4OSwgODAsIDEyOCwgOTAsIDcyLCA4OSwgMTI4LCA5MCwgNzIsIDg3LCA2OSwgCi0gICAgMTI4LCA5MCwgNzIsIDg3LCA2NSwgMTI4LCA5MCwgNzIsIDg1LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4NCwgMTI4LCA5MCwgCi0gICAgNzIsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODIsIDEyOCwgOTAsIDcyLCA4NSwgODAsIDEyOCwgOTAsIDcyLCAKLSAgICA4NSwgNzksIDg4LCAxMjgsIDkwLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgMTI4LCA5MCwgNzIsIAotICAgIDg1LCAxMjgsIDkwLCA3MiwgNzksIDg4LCAxMjgsIDkwLCA3MiwgNzksIDg0LCAxMjgsIDkwLCA3MiwgNzksIDgwLCAxMjgsIAotICAgIDkwLCA3MiwgNzksIDc5LCAxMjgsIDkwLCA3MiwgNzksIDEyOCwgOTAsIDcyLCA3MywgODYsIDY5LCA4NCwgNjksIDEyOCwgCi0gICAgOTAsIDcyLCA3MywgMTI4LCA5MCwgNzIsIDY5LCA4OCwgMTI4LCA5MCwgNzIsIDY5LCA4NCwgMTI4LCA5MCwgNzIsIDY5LCAKLSAgICA4MCwgMTI4LCA5MCwgNzIsIDY5LCA2OSwgMTI4LCA5MCwgNzIsIDY5LCAxMjgsIDkwLCA3MiwgMTk3LCA5MCwgNzIsIDY1LCAKLSAgICA4OCwgMTI4LCA5MCwgNzIsIDY1LCA4NCwgMTI4LCA5MCwgNzIsIDY1LCA4MiwgMTI4LCA5MCwgNzIsIDY1LCA4MCwgMTI4LCAKLSAgICA5MCwgNzIsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDcyLCA2NSwgNjUsIDEyOCwgOTAsIDcyLCA2NSwgMTI4LCA5MCwgNzIsIAotICAgIDEyOCwgOTAsIDY5LCA4NCwgNjUsIDEyOCwgOTAsIDY5LCA4MiwgNzksIDEyOCwgOTAsIDY5LCA4MiwgMjA3LCA5MCwgNjksIAotICAgIDc4LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA4OSwgNjUsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDc0LCA2NSwgMTI4LCA5MCwgCi0gICAgNjksIDUwLCAxMjgsIDkwLCAxOTcsIDkwLCA2NSwgODksIDc4LCAxMjgsIDkwLCA2NSwgODksIDczLCA3OCwgMTI4LCA5MCwgCi0gICAgNjUsIDg5LCA3MywgMjA2LCA5MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgOTAsIDY1LCA4NCwgNjUsIAorICAgIDcyLCA2NSwgNzcsIDkwLCAxOTMsIDgzLCA4OSwgODIsIDczLCA2NSwgMTk1LCA4NCwgNzMsIDc2LCA2OCwgNjksIDEyOCwgCisgICAgNzEsIDg1LCA4MiwgNzcsIDg1LCA3NSwgNzIsIDIwMSwgNzcsIDY1LCAxMjgsIDc3LCA2NSwgODksIDY5LCAyMDMsIDc3LCAKKyAgICA2OSwgNjksIDg0LCA2OSwgMjAxLCA3OCwgNzksIDg0LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MCwgNzMsIDg2LCA2OSwgCisgICAgMTI4LCA4MCwgNjUsIDEyOCwgODksIDY1LCAxMjgsIDc2LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA3MywgODgsIDEyOCwgNjksIAorICAgIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCA2OSwgODAsIDY3LCA3MiwgMTkzLCA3OCwgNjUsIDEyOCwgODMsIDY5LCA4NiwgCisgICAgNjksIDc4LCAxMjgsIDc2LCA3OSwgNzgsIDE5OSwgNzgsIDczLCA3OCwgNjksIDEyOCwgODQsIDg1LCA4MiwgNzUsIDczLCAKKyAgICAxOTUsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDIwNCwgNzksIDgwLCA2OSwgMjA2LCA4MiwgNjUsIAorICAgIDEyOCwgODMsIDY1LCAxMjgsIDgzLCA4NSwgNzgsIDY4LCA2NSwgNzgsIDY5LCA4MywgMTk3LCA4NiwgNzMsIDY5LCAyMTIsIAorICAgIDc2LCA2NSwgMjA3LCA5MCwgOTAsIDg5LCA4OCwgMTI4LCA5MCwgOTAsIDg5LCA4NCwgMTI4LCA5MCwgOTAsIDg5LCA4MiwgCisgICAgODgsIDEyOCwgOTAsIDkwLCA4OSwgODIsIDEyOCwgOTAsIDkwLCA4OSwgODAsIDEyOCwgOTAsIDkwLCA4OSwgNjUsIDEyOCwgCisgICAgOTAsIDkwLCA4OSwgMTI4LCA5MCwgOTAsIDg1LCA4OCwgMTI4LCA5MCwgOTAsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDkwLCAKKyAgICA4NSwgODIsIDEyOCwgOTAsIDkwLCA4NSwgODAsIDEyOCwgOTAsIDkwLCA4NSwgMTI4LCA5MCwgOTAsIDgzLCA4OSwgNjUsIAorICAgIDEyOCwgOTAsIDkwLCA4MywgNjUsIDEyOCwgOTAsIDkwLCA3OSwgODgsIDEyOCwgOTAsIDkwLCA3OSwgODAsIDEyOCwgOTAsIAorICAgIDkwLCA3OSwgMTI4LCA5MCwgOTAsIDczLCA4OCwgMTI4LCA5MCwgOTAsIDczLCA4NCwgMTI4LCA5MCwgOTAsIDczLCA4MCwgCisgICAgMTI4LCA5MCwgOTAsIDczLCA2OSwgODgsIDEyOCwgOTAsIDkwLCA3MywgNjksIDg0LCAxMjgsIDkwLCA5MCwgNzMsIDY5LCAKKyAgICA4MCwgMTI4LCA5MCwgOTAsIDczLCA2OSwgMTI4LCA5MCwgOTAsIDczLCAxMjgsIDkwLCA5MCwgNjksIDg4LCAxMjgsIDkwLCAKKyAgICA5MCwgNjksIDgwLCAxMjgsIDkwLCA5MCwgNjksIDY5LCAxMjgsIDkwLCA5MCwgNjksIDEyOCwgOTAsIDkwLCA2NSwgODgsIAorICAgIDEyOCwgOTAsIDkwLCA2NSwgODQsIDEyOCwgOTAsIDkwLCA2NSwgODAsIDEyOCwgOTAsIDkwLCA2NSwgNjUsIDEyOCwgOTAsIAorICAgIDkwLCA2NSwgMTI4LCA5MCwgODksIDcxLCA3OSwgODMsIDEyOCwgOTAsIDg3LCA4MywgODAsIDEyOCwgOTAsIDg3LCA3OCwgCisgICAgNzQsIDEyOCwgOTAsIDg3LCA3OCwgNjYsIDgzLCA4MCwgMTI4LCA5MCwgODcsIDc0LCAxMjgsIDkwLCA4NywgNjUsIDgyLCAKKyAgICA2NSwgNzUsIDY1LCA4OSwgMTI4LCA5MCwgODcsIDY1LCAxMjgsIDkwLCA4NSwgODQsIDEyOCwgOTAsIDg1LCA3OSwgODgsIAorICAgIDEyOCwgOTAsIDg1LCA3OSwgODAsIDEyOCwgOTAsIDg1LCA3OSwgMTI4LCA5MCwgODUsIDc3LCAxMjgsIDkwLCA4NSwgNjYsIAorICAgIDg1LCA4MiwgMTI4LCA5MCwgODUsIDUzLCAxMjgsIDkwLCA4NSwgMTgxLCA5MCwgODMsIDcyLCA2NSwgMTI4LCA5MCwgODIsIAorICAgIDY1LCAxMjgsIDkwLCA4MSwgNjUsIDgwLCA3MiwgMTkzLCA5MCwgNzksIDg0LCAxMjgsIDkwLCA3OSwgNzksIDEyOCwgOTAsIAorICAgIDc5LCA2NSwgMTI4LCA5MCwgNzYsIDY1LCA3NywgMTkzLCA5MCwgNzYsIDY1LCAxMjgsIDkwLCA3NiwgMTkzLCA5MCwgNzQsIAorICAgIDY5LCAxMjgsIDkwLCA3MywgOTAsIDUwLCAxMjgsIDkwLCA3MywgODEsIDY1LCA2NSwgMTI4LCA5MCwgNzMsIDc4LCA3OSwgCisgICAgODIsIDEyOCwgOTAsIDczLCA3NiwgNjgsIDY5LCAxMjgsIDkwLCA3MywgNzEsIDkwLCA2NSwgMTk5LCA5MCwgNzMsIDcxLCAKKyAgICAxMjgsIDkwLCA3MywgNjgsIDE5MywgOTAsIDczLCA2NiwgMTI4LCA5MCwgNzMsIDE5NCwgOTAsIDczLCA1MSwgMTI4LCA5MCwgCisgICAgMjAxLCA5MCwgNzIsIDg5LCA4OCwgMTI4LCA5MCwgNzIsIDg5LCA4NCwgMTI4LCA5MCwgNzIsIDg5LCA4MiwgODgsIDEyOCwgCisgICAgOTAsIDcyLCA4OSwgODIsIDEyOCwgOTAsIDcyLCA4OSwgODAsIDEyOCwgOTAsIDcyLCA4OSwgMTI4LCA5MCwgNzIsIDg3LCAKKyAgICA2OSwgMTI4LCA5MCwgNzIsIDg3LCA2NSwgMTI4LCA5MCwgNzIsIDg1LCA4OCwgMTI4LCA5MCwgNzIsIDg1LCA4NCwgMTI4LCAKKyAgICA5MCwgNzIsIDg1LCA4MiwgODgsIDEyOCwgOTAsIDcyLCA4NSwgODIsIDEyOCwgOTAsIDcyLCA4NSwgODAsIDEyOCwgOTAsIAorICAgIDcyLCA4NSwgNzksIDg4LCAxMjgsIDkwLCA3MiwgODUsIDc5LCA4MCwgMTI4LCA5MCwgNzIsIDg1LCA3OSwgMTI4LCA5MCwgCisgICAgNzIsIDg1LCAxMjgsIDkwLCA3MiwgNzksIDg4LCAxMjgsIDkwLCA3MiwgNzksIDg0LCAxMjgsIDkwLCA3MiwgNzksIDgwLCAKKyAgICAxMjgsIDkwLCA3MiwgNzksIDc5LCAxMjgsIDkwLCA3MiwgNzksIDEyOCwgOTAsIDcyLCA3MywgODYsIDY5LCA4NCwgNjksIAorICAgIDEyOCwgOTAsIDcyLCA3MywgMTI4LCA5MCwgNzIsIDY5LCA4OCwgMTI4LCA5MCwgNzIsIDY5LCA4NCwgMTI4LCA5MCwgNzIsIAorICAgIDY5LCA4MCwgMTI4LCA5MCwgNzIsIDY5LCA2OSwgMTI4LCA5MCwgNzIsIDY5LCAxMjgsIDkwLCA3MiwgMTk3LCA5MCwgNzIsIAorICAgIDY1LCA4OCwgMTI4LCA5MCwgNzIsIDY1LCA4NCwgMTI4LCA5MCwgNzIsIDY1LCA4MiwgMTI4LCA5MCwgNzIsIDY1LCA4MCwgCisgICAgMTI4LCA5MCwgNzIsIDY1LCA3MywgNzgsIDEyOCwgOTAsIDcyLCA2NSwgNjUsIDEyOCwgOTAsIDcyLCA2NSwgMTI4LCA5MCwgCisgICAgNzIsIDEyOCwgOTAsIDY5LCA4NCwgNjUsIDEyOCwgOTAsIDY5LCA4MiwgNzksIDEyOCwgOTAsIDY5LCA4MiwgMjA3LCA5MCwgCisgICAgNjksIDc4LCAxMjgsIDkwLCA2OSwgNzcsIDc2LCA4OSwgNjUsIDEyOCwgOTAsIDY5LCA3NywgNzYsIDc0LCA2NSwgMTI4LCAKKyAgICA5MCwgNjksIDUwLCAxMjgsIDkwLCAxOTcsIDkwLCA2NSwgODksIDc4LCAxMjgsIDkwLCA2NSwgODksIDczLCA3OCwgMTI4LCAKKyAgICA5MCwgNjUsIDg5LCA3MywgMjA2LCA5MCwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgOTAsIDY1LCA4NCwgNjUsIAogICAgIDEyOCwgOTAsIDY1LCA4MiwgODEsIDY1LCAxMjgsIDkwLCA2NSwgODEsIDY5LCAxOTgsIDkwLCA2NSwgNzcsIDg4LCAxMjgsIAogICAgIDkwLCA2NSwgMjA0LCA5MCwgNjUsIDczLCA3OCwgMTI4LCA5MCwgNjUsIDczLCAyMDYsIDkwLCA2NSwgNzMsIDEyOCwgOTAsIAogICAgIDY1LCA3MiwgMTI4LCA5MCwgNjUsIDIwMCwgOTAsIDY1LCA3MSwgMTI4LCA5MCwgNjUsIDY5LCA3MCwgMTI4LCA5MCwgNDgsIApAQCAtNTI1LDc5ICs1MjUsNzkgQEAKICAgICA4NCwgODUsIDg0LCA4NCwgODksIDEyOCwgODQsIDg1LCA4NCwgNjksIDg5LCA2NSwgODMsIDY1LCA4NCwgMTI4LCA4NCwgODUsIAogICAgIDg0LCAxMjgsIDg0LCA4NSwgODIsIDg4LCAxMjgsIDg0LCA4NSwgODIsIDg1LCAxMjgsIDg0LCA4NSwgODIsIDg0LCA3NiwgCiAgICAgNjksIDEyOCwgODQsIDg1LCA4MiwgNzksIDUwLCAxMjgsIDg0LCA4NSwgODIsIDc4LCA4MywgODQsIDczLCA3NiwgNjksIAotICAgIDEyOCwgODQsIDg1LCA4MiwgNzgsIDY5LCAxOTYsIDg0LCA4NSwgODIsIDIwNiwgODQsIDg1LCA4MiwgNjYsIDY1LCA3OCwgCi0gICAgMTI4LCA4NCwgODUsIDgyLCAxMjgsIDg0LCA4NSwgODAsIDEyOCwgODQsIDg1LCA3OSwgODgsIDEyOCwgODQsIDg1LCA3OSwgCi0gICAgODQsIDEyOCwgODQsIDg1LCA3OSwgODAsIDEyOCwgODQsIDg1LCA3OSwgMTI4LCA4NCwgODUsIDc4LCA3OCwgODksIDEyOCwgCi0gICAgODQsIDg1LCA3NywgNjksIDg0LCA2OSwgODMsIDEyOCwgODQsIDg1LCA3NywgNjUsIDY5LCAxMjgsIDg0LCA4NSwgNzcsIAotICAgIDEyOCwgODQsIDg1LCA3NiwgNzMsIDgwLCAxMjgsIDg0LCA4NSwgNzUsIDg3LCA2OSwgNzgsIDg0LCA3MywgODMsIDEyOCwgCi0gICAgODQsIDg1LCA3NSwgMTI4LCA4NCwgODUsIDcxLCA4MiwgNzMsIDIwMywgODQsIDg1LCA3MSwgNTAsIDEyOCwgODQsIDg1LCAKLSAgICA3MSwgMTc4LCA4NCwgODUsIDY1LCA4MiwgNjksIDE5OSwgODQsIDg1LCA2NSwgNjksIDgwLCAxMjgsIDg0LCA4NSwgNjUsIAotICAgIDY5LCAxMjgsIDg0LCAyMTMsIDg0LCA4NCwgODUsIDg1LCAxMjgsIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDcxLCAxMjgsIAotICAgIDg0LCA4NCwgODUsIDY4LCA2OCwgNjUsIDY1LCA3MSwgMTI4LCA4NCwgODQsIDg1LCAxMjgsIDg0LCA4NCwgODQsIDcyLCA2NSwgCi0gICAgMTI4LCA4NCwgODQsIDg0LCA2NSwgMTI4LCA4NCwgODQsIDgzLCA4NSwgMTI4LCA4NCwgODQsIDgzLCA3OSwgMTI4LCA4NCwgCi0gICAgODQsIDgzLCA3MywgMTI4LCA4NCwgODQsIDgzLCA2OSwgNjksIDEyOCwgODQsIDg0LCA4MywgNjksIDEyOCwgODQsIDg0LCAKLSAgICA4MywgNjUsIDEyOCwgODQsIDg0LCA3OSwgNzksIDEyOCwgODQsIDg0LCA3MywgNzMsIDEyOCwgODQsIDg0LCA3MywgMTI4LCAKLSAgICA4NCwgODQsIDcyLCA4NywgNjksIDEyOCwgODQsIDg0LCA3MiwgODUsIDEyOCwgODQsIDg0LCA3MiwgNzksIDc5LCAxMjgsIAotICAgIDg0LCA4NCwgNzIsIDc5LCAxMjgsIDg0LCA4NCwgNzIsIDczLCAxMjgsIDg0LCA4NCwgNzIsIDY5LCA2OSwgMTI4LCA4NCwgCi0gICAgODQsIDcyLCA2OSwgMTI4LCA4NCwgODQsIDcyLCA2NSwgNjUsIDEyOCwgODQsIDg0LCA3MiwgMTI4LCA4NCwgODQsIDY5LCAKLSAgICA3MiwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgMjAwLCA4NCwgODQsIDY5LCA3MiwgMTI4LCA4NCwgODQsIAotICAgIDY5LCAyMDAsIDg0LCA4NCwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4NCwgCi0gICAgODQsIDY1LCA4NSwgMTI4LCA4NCwgODQsIDY1LCA3MywgMTI4LCA4NCwgODQsIDY1LCA2NSwgMTI4LCA4NCwgODQsIDUwLCAKLSAgICAxMjgsIDg0LCA4MywgODcsIDY5LCAxMjgsIDg0LCA4MywgODcsIDY1LCAxMjgsIDg0LCA4MywgODYsIDEyOCwgODQsIDgzLCAKLSAgICA4MywgNjksIDEyOCwgODQsIDgzLCA4MywgNjUsIDEyOCwgODQsIDgzLCA3MiwgODUsIDcxLCA4MywgMTI4LCA4NCwgODMsIAotICAgIDcyLCA3OSwgNzksIDc1LCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgMjAzLCA4NCwgODMsIDcyLCA2OSwgODMsIDEyOCwgCi0gICAgODQsIDgzLCA3MiwgNjksIDcxLCAxMjgsIDg0LCA4MywgNzIsIDY5LCAxOTksIDg0LCA4MywgNzIsIDY5LCAxMjgsIDg0LCAKLSAgICA4MywgNzIsIDY1LCAxMjgsIDg0LCA4MywgNjksIDgyLCA2OSwgMTI4LCA4NCwgODMsIDY1LCA2OCwgNzMsIDEyOCwgODQsIAotICAgIDgzLCA2NSwgNjgsIDIwMSwgODQsIDgzLCA2NSwgNjUsIDY4LCA3MywgODksIDEyOCwgODQsIDgzLCA2NSwgNjUsIDEyOCwgCi0gICAgODQsIDgzLCAxOTMsIDg0LCA4MiwgODksIDY2LCA3NiwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgODUsIDg0LCA3MiwgMTI4LCAKLSAgICA4NCwgODIsIDg1LCA3OCwgNzUsIDEyOCwgODQsIDgyLCA4NSwgNzgsIDY3LCA2NSwgODQsIDY5LCAxOTYsIDg0LCA4MiwgODUsIAotICAgIDc3LCA4MCwgNjksIDg0LCAxMjgsIDg0LCA4MiwgODUsIDY5LCAxMjgsIDg0LCA4MiwgODUsIDY3LCA3NSwgMTI4LCA4NCwgCi0gICAgODIsIDc5LCA4MCwgNzMsIDY3LCA2NSwgMjA0LCA4NCwgODIsIDc5LCA4MCwgNzIsIDg5LCAxMjgsIDg0LCA4MiwgNzksIDc3LCAKLSAgICA3MywgNzUsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgCi0gICAgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgODAsIAotICAgIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAKLSAgICA3OCwgMTI4LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgMjA2LCA4NCwgODIsIDc5LCA3NywgNzMsIDc1LCA3OSwgNzYsIAotICAgIDg5LCA3MSwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODQsIDgyLCA3OSwgNzYsIDc2LCA2OSwgODksIDY2LCA4NSwgODMsIDEyOCwgCi0gICAgODQsIDgyLCA3OSwgNzUsIDg1LCA4NCwgNjUsIDgzLCA4NCwgMjAxLCA4NCwgODIsIDc5LCA2OSwgOTAsIDY5LCA3OCwgNzMsIAotICAgIDY1LCAyMDYsIDg0LCA4MiwgNzMsIDg1LCA3NywgODAsIDcyLCAxMjgsIDg0LCA4MiwgNzMsIDg0LCA3OSwgMjExLCA4NCwgCi0gICAgODIsIDczLCA4NCwgNzMsIDc3LCA3OSwgODIsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgODMsIDczLCA3NywgNzksIAotICAgIDg1LCAxMjgsIDg0LCA4MiwgNzMsIDgzLCA2OSwgNzcsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3OSwgNjgsIDEyOCwgCi0gICAgODQsIDgyLCA3MywgODAsIDc2LCA3MywgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDE5NywgODQsIDgyLCA3MywgNzksIAotICAgIDIwNiwgODQsIDgyLCA3MywgNzMsIDgzLCA2NSwgODAsIDEyOCwgODQsIDgyLCA3MywgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgCi0gICAgMjExLCA4NCwgODIsIDczLCA3MSwgODIsIDY1LCAyMDUsIDg0LCA4MiwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgNzgsIAotICAgIDEyOCwgODQsIDgyLCA3MywgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc2LCA3MywgCi0gICAgNjUsIDg0LCAxOTcsIDg0LCA4MiwgNzMsIDY4LCA2OSwgNzgsIDg0LCAxMjgsIDg0LCA4MiwgNzMsIDY4LCA2OSwgNzgsIAotICAgIDIxMiwgODQsIDgyLCA3MywgNjcsIDc5LCA3NiwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgCi0gICAgNjUsIDIxMCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODIsIDc5LCA4NSwgNzgsIDE5NiwgODQsIDgyLCAKLSAgICA3MywgNjUsIDc4LCA3MSwgNzYsIDY5LCA0NSwgNzIsIDY5LCA2NSwgNjgsIDY5LCAxOTYsIDg0LCA4MiwgNzMsIDY1LCA3OCwgCi0gICAgNzEsIDc2LCA2OSwgMTI4LCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgMTk3LCA4NCwgODIsIDczLCA2NSwgMTI4LCAKLSAgICA4NCwgODIsIDczLCAxMjgsIDg0LCA4MiwgNjksIDgzLCA3MywgNzYsIDc2LCA3OSwgMTI4LCA4NCwgODIsIDY5LCA3OCwgNjgsIAotICAgIDEyOCwgODQsIDgyLCA2OSwgNzgsIDE5NiwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIDQ1LCA1MSwgMTI4LCA4NCwgCi0gICAgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUwLCAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNDksIAotICAgIDEyOCwgODQsIDgyLCA2OSwgNjksIDEyOCwgODQsIDgyLCA2OSwgMTk3LCA4NCwgODIsIDY5LCA2NSwgNjgsIDczLCA3OCwgCi0gICAgNzEsIDEyOCwgODQsIDgyLCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgODAsIDY5LCA5MCwgNzMsIDg1LCA3NywgMTI4LCAKLSAgICA4NCwgODIsIDY1LCA3OCwgODMsIDg2LCA2OSwgODIsIDgzLCA2NSwgMjA0LCA4NCwgODIsIDY1LCA3OCwgODMsIDgwLCA3OSwgCi0gICAgODMsIDczLCA4NCwgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc4LCA4MywgNzcsIDczLCAyMTIsIDg0LCA4MiwgNjUsIDc4LCAKLSAgICA4MywgNzcsIDczLCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDgzLCA4MywgCi0gICAgNzMsIDc5LCAyMDYsIDg0LCA4MiwgNjUsIDc3LCA4NywgNjUsIDg5LCAxMjgsIDg0LCA4MiwgNjUsIDc3LCAxMjgsIDg0LCAKLSAgICA4MiwgNjUsIDIwNSwgODQsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIDg0LCA4MiwgNjUsIDczLCAyMDYsIDg0LCA4MiwgNjUsIAotICAgIDczLCA3NiwgNzMsIDc4LCAxOTksIDg0LCA4MiwgNjUsIDcwLCA3MCwgNzMsIDY3LCAxMjgsIDg0LCA4MiwgNjUsIDcwLCA3MCwgCi0gICAgNzMsIDE5NSwgODQsIDgyLCA2NSwgNjgsIDE5NywgODQsIDgyLCA2NSwgNjcsIDg0LCA3OSwgODIsIDEyOCwgODQsIDgyLCAKLSAgICA2NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgMTI4LCA4NCwgNzksIDg4LCAxMjgsIDg0LCA3OSwgODcsIDY5LCA4MiwgMTI4LCAKLSAgICA4NCwgNzksIDg1LCA4MiwgNzgsIDc5LCA3MywgMjExLCA4NCwgNzksIDg0LCA2NSwgMjA0LCA4NCwgNzksIDg0LCAxMjgsIAotICAgIDg0LCA3OSwgODIsIDg0LCA3OSwgNzMsIDgzLCAxOTcsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCA4MywgMTI4LCA4NCwgCi0gICAgNzksIDgyLCA2NywgODUsIDc2LCA4NSwgMjExLCA4NCwgNzksIDgyLCA2NywgNzIsIDEyOCwgODQsIDc5LCA4MSwgMTI4LCAKLSAgICA4NCwgNzksIDgwLCA2NiwgNjUsIDgyLCAxMjgsIDg0LCA3OSwgODAsIDQ1LCA3NiwgNzMsIDcxLCA3MiwgODQsIDY5LCAxOTYsIAotICAgIDg0LCA3OSwgODAsIDEyOCwgODQsIDc5LCAyMDgsIDg0LCA3OSwgNzksIDg0LCA3MiwgMTI4LCA4NCwgNzksIDc5LCA3OCwgCi0gICAgMTI4LCA4NCwgNzksIDc4LCA3OSwgODMsIDEyOCwgODQsIDc5LCA3OCwgNzEsIDg1LCA2OSwgMTI4LCA4NCwgNzksIDc4LCAKLSAgICA3MSwgODUsIDE5NywgODQsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NiwgMTI4LCA4NCwgNzksIAotICAgIDc4LCA2OSwgNDUsIDU1LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTQsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MywgCi0gICAgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDUyLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTEsIDEyOCwgODQsIDc5LCAKLSAgICA3OCwgNjksIDQ1LCA1MCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDg0LCA3OSwgNzgsIDY5LCAxMjgsIAotICAgIDg0LCA3OSwgNzgsIDY1LCAyMDQsIDg0LCA3OSwgNzcsIDgwLCA3MywgMTI4LCA4NCwgNzksIDc3LCA2NSwgODQsIDc5LCAKLSAgICAxMjgsIDg0LCA3OSwgNzYsIDc5LCA3OCwgNzEsIDEyOCwgODQsIDc5LCA3NSwgODksIDIwNywgODQsIDc5LCA3MywgNzYsIAotICAgIDY5LCA4NCwgMTI4LCA4NCwgNzksIDcxLCA2OSwgODQsIDcyLCA2OSwgODIsIDEyOCwgODQsIDc5LCA2OCwgMjA3LCA4NCwgCi0gICAgNzksIDY1LCA3OCwgNjgsIDY1LCA3NSwgNzIsIDczLCA2NSwgODQsIDEyOCwgODQsIDc5LCA2NSwgMTI4LCA4NCwgNzgsIAorICAgIDEyOCwgODQsIDg1LCA4MiwgNzgsIDY5LCAxOTYsIDg0LCA4NSwgODIsIDIwNiwgODQsIDg1LCA4MiwgNzUsIDczLCA4MywgCisgICAgMjAwLCA4NCwgODUsIDgyLCA2NiwgNjUsIDc4LCAxMjgsIDg0LCA4NSwgODIsIDEyOCwgODQsIDg1LCA4MCwgMTI4LCA4NCwgCisgICAgODUsIDc5LCA4OCwgMTI4LCA4NCwgODUsIDc5LCA4NCwgMTI4LCA4NCwgODUsIDc5LCA4MCwgMTI4LCA4NCwgODUsIDc5LCAKKyAgICAxMjgsIDg0LCA4NSwgNzgsIDc4LCA4OSwgMTI4LCA4NCwgODUsIDc3LCA2OSwgODQsIDY5LCA4MywgMTI4LCA4NCwgODUsIAorICAgIDc3LCA2NSwgNjksIDEyOCwgODQsIDg1LCA3NywgMTI4LCA4NCwgODUsIDc2LCA3MywgODAsIDEyOCwgODQsIDg1LCA3NSwgCisgICAgODcsIDY5LCA3OCwgODQsIDczLCA4MywgMTI4LCA4NCwgODUsIDc1LCAxMjgsIDg0LCA4NSwgNzEsIDgyLCA3MywgMjAzLCAKKyAgICA4NCwgODUsIDcxLCA1MCwgMTI4LCA4NCwgODUsIDcxLCAxNzgsIDg0LCA4NSwgNjUsIDgyLCA2OSwgMTk5LCA4NCwgODUsIAorICAgIDY1LCA2OSwgODAsIDEyOCwgODQsIDg1LCA2NSwgNjksIDEyOCwgODQsIDIxMywgODQsIDg0LCA4NSwgODUsIDEyOCwgODQsIAorICAgIDg0LCA4NSwgNjgsIDY4LCA2NSwgNzEsIDEyOCwgODQsIDg0LCA4NSwgNjgsIDY4LCA2NSwgNjUsIDcxLCAxMjgsIDg0LCA4NCwgCisgICAgODUsIDEyOCwgODQsIDg0LCA4NCwgNzIsIDY1LCAxMjgsIDg0LCA4NCwgODQsIDY1LCAxMjgsIDg0LCA4NCwgODMsIDg1LCAKKyAgICAxMjgsIDg0LCA4NCwgODMsIDc5LCAxMjgsIDg0LCA4NCwgODMsIDczLCAxMjgsIDg0LCA4NCwgODMsIDY5LCA2OSwgMTI4LCAKKyAgICA4NCwgODQsIDgzLCA2OSwgMTI4LCA4NCwgODQsIDgzLCA2NSwgMTI4LCA4NCwgODQsIDc5LCA3OSwgMTI4LCA4NCwgODQsIAorICAgIDczLCA3MywgMTI4LCA4NCwgODQsIDczLCAxMjgsIDg0LCA4NCwgNzIsIDg3LCA2OSwgMTI4LCA4NCwgODQsIDcyLCA4NSwgCisgICAgMTI4LCA4NCwgODQsIDcyLCA3OSwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzksIDEyOCwgODQsIDg0LCA3MiwgNzMsIDEyOCwgCisgICAgODQsIDg0LCA3MiwgNjksIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY5LCAxMjgsIDg0LCA4NCwgNzIsIDY1LCA2NSwgMTI4LCAKKyAgICA4NCwgODQsIDcyLCAxMjgsIDg0LCA4NCwgNjksIDcyLCA2OSwgNzIsIDEyOCwgODQsIDg0LCA2OSwgNzIsIDY5LCAyMDAsIAorICAgIDg0LCA4NCwgNjksIDcyLCAxMjgsIDg0LCA4NCwgNjksIDIwMCwgODQsIDg0LCA2OSwgNjksIDEyOCwgODQsIDg0LCA2NSwgCisgICAgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDg0LCA4NCwgNjUsIDg1LCAxMjgsIDg0LCA4NCwgNjUsIDczLCAxMjgsIDg0LCAKKyAgICA4NCwgNjUsIDY1LCAxMjgsIDg0LCA4NCwgNTAsIDEyOCwgODQsIDgzLCA4NywgNjksIDEyOCwgODQsIDgzLCA4NywgNjUsIAorICAgIDEyOCwgODQsIDgzLCA4NiwgMTI4LCA4NCwgODMsIDgzLCA2OSwgMTI4LCA4NCwgODMsIDgzLCA2NSwgMTI4LCA4NCwgODMsIAorICAgIDcyLCA4NSwgNzEsIDgzLCAxMjgsIDg0LCA4MywgNzIsIDc5LCA3OSwgNzUsIDEyOCwgODQsIDgzLCA3MiwgNzksIDc5LCAKKyAgICAyMDMsIDg0LCA4MywgNzIsIDY5LCA4MywgMTI4LCA4NCwgODMsIDcyLCA2OSwgNzEsIDEyOCwgODQsIDgzLCA3MiwgNjksIAorICAgIDE5OSwgODQsIDgzLCA3MiwgNjksIDEyOCwgODQsIDgzLCA3MiwgNjUsIDEyOCwgODQsIDgzLCA2OSwgODIsIDY5LCAxMjgsIAorICAgIDg0LCA4MywgNjUsIDY4LCA3MywgMTI4LCA4NCwgODMsIDY1LCA2OCwgMjAxLCA4NCwgODMsIDY1LCA2NSwgNjgsIDczLCA4OSwgCisgICAgMTI4LCA4NCwgODMsIDY1LCA2NSwgMTI4LCA4NCwgODMsIDE5MywgODQsIDgyLCA4OSwgNjYsIDc2LCA3MywgNzksIDIwNiwgCisgICAgODQsIDgyLCA4NSwgODQsIDcyLCAxMjgsIDg0LCA4MiwgODUsIDc4LCA3NSwgMTI4LCA4NCwgODIsIDg1LCA3OCwgNjcsIDY1LCAKKyAgICA4NCwgNjksIDE5NiwgODQsIDgyLCA4NSwgNzcsIDgwLCA2OSwgODQsIDEyOCwgODQsIDgyLCA4NSwgNjksIDEyOCwgODQsIAorICAgIDgyLCA4NSwgNjcsIDc1LCAxMjgsIDg0LCA4MiwgNzksIDgwLCA3MywgNjcsIDY1LCAyMDQsIDg0LCA4MiwgNzksIDgwLCA3MiwgCisgICAgODksIDEyOCwgODQsIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDg0LCAKKyAgICA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDc4LCAxMjgsIDg0LCA4MiwgCisgICAgNzksIDc3LCA3MywgNzUsIDc5LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDY1LCA3NiwgNjksIDgzLCA3NywgNjUsIDEyOCwgODQsIAorICAgIDgyLCA3OSwgNzcsIDczLCA3NSwgNzksIDc4LCAxMjgsIDg0LCA4MiwgNzksIDc3LCA3MywgNzUsIDc5LCAyMDYsIDg0LCA4MiwgCisgICAgNzksIDc3LCA3MywgNzUsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4NCwgODIsIDc5LCA3NiwgNzYsIAorICAgIDY5LCA4OSwgNjYsIDg1LCA4MywgMTI4LCA4NCwgODIsIDc5LCA3NSwgODUsIDg0LCA2NSwgODMsIDg0LCAyMDEsIDg0LCA4MiwgCisgICAgNzksIDY5LCA5MCwgNjksIDc4LCA3MywgNjUsIDIwNiwgODQsIDgyLCA3MywgODUsIDc3LCA4MCwgNzIsIDEyOCwgODQsIDgyLCAKKyAgICA3MywgODQsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDg0LCA3MywgNzcsIDc5LCA4MiwgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIAorICAgIDczLCA4MywgNzMsIDc3LCA3OSwgODUsIDEyOCwgODQsIDgyLCA3MywgODMsIDY5LCA3NywgNjksIDEyOCwgODQsIDgyLCA3MywgCisgICAgODAsIDc5LCA2OCwgMTI4LCA4NCwgODIsIDczLCA4MCwgNzYsIDczLCAxMjgsIDg0LCA4MiwgNzMsIDgwLCA3NiwgMTk3LCAKKyAgICA4NCwgODIsIDczLCA3OSwgMjA2LCA4NCwgODIsIDczLCA3MywgODMsIDY1LCA4MCwgMTI4LCA4NCwgODIsIDczLCA3MSwgODIsIAorICAgIDY1LCA3NywgNzcsIDc5LCAyMTEsIDg0LCA4MiwgNzMsIDcxLCA4MiwgNjUsIDIwNSwgODQsIDgyLCA3MywgNzEsIDc5LCA4MiwgCisgICAgNzEsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDczLCA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDg0LCA4MiwgNzMsIDcwLCAKKyAgICA3OSwgNzYsIDczLCA2NSwgODQsIDE5NywgODQsIDgyLCA3MywgNjgsIDY5LCA3OCwgODQsIDEyOCwgODQsIDgyLCA3MywgNjgsIAorICAgIDY5LCA3OCwgMjEyLCA4NCwgODIsIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODQsIDgyLCA3MywgNjUsIDc4LCA3MSwgCisgICAgODUsIDc2LCA2NSwgMjEwLCA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MiwgNzksIDg1LCA3OCwgMTk2LCAKKyAgICA4NCwgODIsIDczLCA2NSwgNzgsIDcxLCA3NiwgNjksIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgODQsIDgyLCA3MywgCisgICAgNjUsIDc4LCA3MSwgNzYsIDY5LCAxMjgsIDg0LCA4MiwgNzMsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDg0LCA4MiwgNzMsIDY1LCAKKyAgICAxMjgsIDg0LCA4MiwgNzMsIDEyOCwgODQsIDgyLCA2OSwgODMsIDczLCA3NiwgNzYsIDc5LCAxMjgsIDg0LCA4MiwgNjksIAorICAgIDc4LCA2OCwgMTI4LCA4NCwgODIsIDY5LCA3OCwgMTk2LCA4NCwgODIsIDY5LCA3NywgNzksIDc2LCA3OSwgNDUsIDUxLCAKKyAgICAxMjgsIDg0LCA4MiwgNjksIDc3LCA3OSwgNzYsIDc5LCA0NSwgNTAsIDEyOCwgODQsIDgyLCA2OSwgNzcsIDc5LCA3NiwgNzksIAorICAgIDQ1LCA0OSwgMTI4LCA4NCwgODIsIDY5LCA2OSwgMTI4LCA4NCwgODIsIDY5LCAxOTcsIDg0LCA4MiwgNjksIDY1LCA2OCwgCisgICAgNzMsIDc4LCA3MSwgMTI4LCA4NCwgODIsIDY1LCA4OSwgMTI4LCA4NCwgODIsIDY1LCA4MCwgNjksIDkwLCA3MywgODUsIDc3LCAKKyAgICAxMjgsIDg0LCA4MiwgNjUsIDc4LCA4MywgODYsIDY5LCA4MiwgODMsIDY1LCAyMDQsIDg0LCA4MiwgNjUsIDc4LCA4MywgODAsIAorICAgIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzgsIDgzLCA3NywgNzMsIDIxMiwgODQsIDgyLCA2NSwgCisgICAgNzgsIDgzLCA3NywgNzMsIDgzLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA4NCwgODIsIDY1LCA3OCwgODMsIDc3LCA3MywgODMsIAorICAgIDgzLCA3MywgNzksIDIwNiwgODQsIDgyLCA2NSwgNzcsIDg3LCA2NSwgODksIDEyOCwgODQsIDgyLCA2NSwgNzcsIDEyOCwgCisgICAgODQsIDgyLCA2NSwgMjA1LCA4NCwgODIsIDY1LCA3MywgNzgsIDEyOCwgODQsIDgyLCA2NSwgNzMsIDIwNiwgODQsIDgyLCAKKyAgICA2NSwgNzMsIDc2LCA3MywgNzgsIDE5OSwgODQsIDgyLCA2NSwgNzAsIDcwLCA3MywgNjcsIDEyOCwgODQsIDgyLCA2NSwgNzAsIAorICAgIDcwLCA3MywgMTk1LCA4NCwgODIsIDY1LCA2OCwgMTk3LCA4NCwgODIsIDY1LCA2NywgODQsIDc5LCA4MiwgMTI4LCA4NCwgCisgICAgODIsIDY1LCA2NywgNzUsIDEyOCwgODQsIDgyLCAxMjgsIDg0LCA3OSwgODgsIDEyOCwgODQsIDc5LCA4NywgNjksIDgyLCAKKyAgICAxMjgsIDg0LCA3OSwgODUsIDgyLCA3OCwgNzksIDczLCAyMTEsIDg0LCA3OSwgODQsIDY1LCAyMDQsIDg0LCA3OSwgODQsIAorICAgIDEyOCwgODQsIDc5LCA4MiwgODQsIDc5LCA3MywgODMsIDE5NywgODQsIDc5LCA4MiwgNjcsIDg1LCA3NiwgODUsIDgzLCAKKyAgICAxMjgsIDg0LCA3OSwgODIsIDY3LCA4NSwgNzYsIDg1LCAyMTEsIDg0LCA3OSwgODIsIDY3LCA3MiwgMTI4LCA4NCwgNzksIAorICAgIDgxLCAxMjgsIDg0LCA3OSwgODAsIDY2LCA2NSwgODIsIDEyOCwgODQsIDc5LCA4MCwgNDUsIDc2LCA3MywgNzEsIDcyLCA4NCwgCisgICAgNjksIDE5NiwgODQsIDc5LCA4MCwgMTI4LCA4NCwgNzksIDIwOCwgODQsIDc5LCA3OSwgODQsIDcyLCAxMjgsIDg0LCA3OSwgCisgICAgNzksIDc4LCAxMjgsIDg0LCA3OSwgNzgsIDc5LCA4MywgMTI4LCA4NCwgNzksIDc4LCA3MSwgODUsIDY5LCAxMjgsIDg0LCAKKyAgICA3OSwgNzgsIDcxLCA4NSwgMTk3LCA4NCwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc4LCA2OSwgNDUsIDU2LCAxMjgsIAorICAgIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTUsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1NCwgMTI4LCA4NCwgNzksIDc4LCA2OSwgCisgICAgNDUsIDUzLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNTIsIDEyOCwgODQsIDc5LCA3OCwgNjksIDQ1LCA1MSwgMTI4LCAKKyAgICA4NCwgNzksIDc4LCA2OSwgNDUsIDUwLCAxMjgsIDg0LCA3OSwgNzgsIDY5LCA0NSwgNDksIDEyOCwgODQsIDc5LCA3OCwgNjksIAorICAgIDEyOCwgODQsIDc5LCA3OCwgNjUsIDIwNCwgODQsIDc5LCA3NywgODAsIDczLCAxMjgsIDg0LCA3OSwgNzcsIDY1LCA4NCwgCisgICAgNzksIDEyOCwgODQsIDc5LCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4NCwgNzksIDc1LCA4OSwgMjA3LCA4NCwgNzksIDczLCAKKyAgICA3NiwgNjksIDg0LCAxMjgsIDg0LCA3OSwgNzEsIDY5LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA4NCwgNzksIDY4LCAyMDcsIAorICAgIDg0LCA3OSwgNjUsIDc4LCA2OCwgNjUsIDc1LCA3MiwgNzMsIDY1LCA4NCwgMTI4LCA4NCwgNzksIDY1LCAxMjgsIDg0LCA3OCwgCiAgICAgMTI4LCA4NCwgNzYsIDg2LCAxMjgsIDg0LCA3NiwgODUsIDEyOCwgODQsIDc2LCA3OSwgMTI4LCA4NCwgNzYsIDczLCAxMjgsIAogICAgIDg0LCA3NiwgNzIsIDg5LCA2NSwgMTI4LCA4NCwgNzYsIDcyLCA4NywgNjksIDEyOCwgODQsIDc2LCA3MiwgODUsIDEyOCwgCiAgICAgODQsIDc2LCA3MiwgNzksIDc5LCAxMjgsIDg0LCA3NiwgNzIsIDc5LCAxMjgsIDg0LCA3NiwgNzIsIDczLCAxMjgsIDg0LCAKQEAgLTc5Niw0MDkgKzc5Niw0MTAgQEAKICAgICA2OSwgODQsIDEyOCwgODMsIDg1LCA2NSwgNjksIDc4LCAxMjgsIDgzLCA4NSwgNjUsIDY5LCAxMjgsIDgzLCA4NSwgNjUsIAogICAgIDEyOCwgODMsIDIxMywgODMsIDg0LCA4OCwgMTI4LCA4MywgODQsIDg3LCA2NSwgMTI4LCA4MywgODQsIDg1LCA2OCwgODksIAogICAgIDEyOCwgODMsIDg0LCA4NSwgNjcsIDc1LCA0NSwgNzksIDg1LCAyMTIsIDgzLCA4NCwgODMsIDEyOCwgODMsIDg0LCA4MiwgCi0gICAgNzksIDc1LCA2OSwgODMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgMjExLCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTcsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU2LCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA1NSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTQsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCi0gICAgNDUsIDUzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MiwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAKLSAgICA0NSwgNTEsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUwLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIAotICAgIDQ1LCA0OSwgNDksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgODQsIDgyLCA3OSwgCi0gICAgNzUsIDY5LCA0NSwgNDksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCAxOTcsIDgzLCA4NCwgODIsIDczLCA4MCwgNjksIAotICAgIDEyOCwgODMsIDg0LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgODMsIDg0LCA4MiwgCi0gICAgNzMsIDc1LCA2OSwgODQsIDcyLCA4MiwgNzksIDg1LCA3MSwgNzIsIDEyOCwgODMsIDg0LCA4MiwgNzMsIDY4LCA2OSwgMTI4LCAKLSAgICA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA3NiwgMjE3LCA4MywgODQsIDgyLCA2OSwgODQsIDY3LCA3MiwgNjksIDE5NiwgODMsIAotICAgIDg0LCA4MiwgNjksIDgzLCAyMTEsIDgzLCA4NCwgODIsIDY5LCA3OCwgNzEsIDg0LCA3MiwgMTI4LCA4MywgODQsIDgyLCA2OSwgCi0gICAgNjUsIDc3LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg3LCA2NiwgNjksIDgyLCA4MiwgODksIDEyOCwgODMsIDg0LCAKLSAgICA4MiwgNjUsIDg0LCA4NSwgNzcsIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCA3NywgMTI4LCA4MywgODQsIAotICAgIDgyLCA2NSwgODQsIDg1LCAyMDUsIDgzLCA4NCwgODIsIDY1LCA4NCwgNzMsIDY1LCAyMDYsIDgzLCA4NCwgODIsIDY1LCA3MywgCi0gICAgNzgsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCAKLSAgICA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA4NCwgODIsIDY1LCA3MywgNzAsIDEyOCwgODMsIDg0LCA4MiwgNjUsIAotICAgIDcxLCA3MSwgNzMsIDgzLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MywgODQsIDc5LCA4NiwgNjksIDEyOCwgODMsIDg0LCA3OSwgCi0gICAgODIsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4NywgNjUsIDg0LCA2NywgNzIsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNjUsIDcxLCA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgCi0gICAgMTI4LCA4MywgODQsIDc5LCAyMDgsIDgzLCA4NCwgNzksIDc4LCA2OSwgMTI4LCA4MywgODQsIDc5LCA2NywgNzUsIDEyOCwgCi0gICAgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA4MywgODQsIDczLCA3NiwgMjA0LCA4MywgODQsIDczLCA3NiwgMTk3LCAKLSAgICA4MywgODQsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA4NCwgNjksIDgwLCAxMjgsIDgzLCA4NCwgNjksIDc3LCAxMjgsIAotICAgIDgzLCA4NCwgNjksIDY1LCA3NywgNzMsIDc4LCAxOTksIDgzLCA4NCwgNjksIDY1LCA3NywgMTI4LCA4MywgODQsIDY5LCA2NSwgCi0gICAgMjA1LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4NSwgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4MywgMTI4LCAKLSAgICA4MywgODQsIDY1LCA4NiwgODIsIDc5LCAyMTEsIDgzLCA4NCwgNjUsIDg1LCA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIAotICAgIDg0LCA4NSwgMTk3LCA4MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODQsIDY1LCA4NCwgNjksIDgyLCA4MywgCi0gICAgMTI4LCA4MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODMsIDg0LCA2NSwgODIsIDIxMiwgODMsIDg0LCA2NSwgODIsIDgzLCAKLSAgICAxMjgsIDgzLCA4NCwgNjUsIDgyLCA4MiwgNjksIDE5NiwgODMsIDg0LCA2NSwgODIsIDc1LCAxMjgsIDgzLCA4NCwgNjUsIAotICAgIDgyLCAxMjgsIDgzLCA4NCwgNjUsIDIxMCwgODMsIDg0LCA2NSwgNzgsIDY4LCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgCi0gICAgODMsIDg0LCA2NSwgNzgsIDY4LCA2NSwgODIsIDE5NiwgODMsIDg0LCA2NSwgNzgsIDY4LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCAKLSAgICAxMjgsIDgzLCA4NCwgNjUsIDc2LCA3NiwgNzMsIDc5LCA3OCwgMTI4LCA4MywgODQsIDY1LCA3MCwgNzAsIDEyOCwgODMsIAotICAgIDg0LCA2NSwgNzAsIDE5OCwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgzLCA4NCwgNjUsIDY3LCA2NywgCi0gICAgNjUsIDg0LCA3MywgODMsIDgzLCA3MywgNzcsIDc5LCAxMjgsIDgzLCA4NCwgNTAsIDEyOCwgODMsIDgzLCA4OSwgODgsIAotICAgIDEyOCwgODMsIDgzLCA4OSwgODQsIDEyOCwgODMsIDgzLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA4MywgODksIDgyLCAxMjgsIAotICAgIDgzLCA4MywgODksIDgwLCAxMjgsIDgzLCA4MywgODksIDEyOCwgODMsIDgzLCA4NSwgODgsIDEyOCwgODMsIDgzLCA4NSwgCi0gICAgODUsIDEyOCwgODMsIDgzLCA4NSwgODQsIDEyOCwgODMsIDgzLCA4NSwgODAsIDEyOCwgODMsIDgzLCA3OSwgODgsIDEyOCwgCi0gICAgODMsIDgzLCA3OSwgODQsIDEyOCwgODMsIDgzLCA3OSwgODAsIDEyOCwgODMsIDgzLCA3OSwgNzksIDEyOCwgODMsIDgzLCAKLSAgICA3OSwgMTI4LCA4MywgODMsIDczLCA4OCwgMTI4LCA4MywgODMsIDczLCA4NCwgMTI4LCA4MywgODMsIDczLCA4MCwgMTI4LCAKLSAgICA4MywgODMsIDczLCA3MywgMTI4LCA4MywgODMsIDczLCA2OSwgODgsIDEyOCwgODMsIDgzLCA3MywgNjksIDgwLCAxMjgsIAotICAgIDgzLCA4MywgNzMsIDY5LCAxMjgsIDgzLCA4MywgNzMsIDEyOCwgODMsIDgzLCA3MiwgNjksIDEyOCwgODMsIDgzLCA2OSwgCi0gICAgODgsIDEyOCwgODMsIDgzLCA2OSwgODAsIDEyOCwgODMsIDgzLCA2OSwgNjksIDEyOCwgODMsIDgzLCA2NSwgODgsIDEyOCwgCi0gICAgODMsIDgzLCA2NSwgODUsIDEyOCwgODMsIDgzLCA2NSwgODQsIDEyOCwgODMsIDgzLCA2NSwgODAsIDEyOCwgODMsIDgzLCAKLSAgICA2NSwgNzgsIDcxLCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgCi0gICAgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDg0LCA3MiwgNzMsIDY5LCAKLSAgICA4NSwgODQsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgCi0gICAgODUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIAotICAgIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgCi0gICAgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIAotICAgIDg1LCA3NiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCAKLSAgICA2OSwgODUsIDc2LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIAotICAgIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzcsIDczLCA2OSwgODUsIDc3LCAKLSAgICAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIAotICAgIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgCi0gICAgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIAotICAgIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY1LCA4MiwgNjUsIDY5LCAKLSAgICA2NSwgMTI4LCA4MywgODMsIDY1LCA3MywgMTI4LCA4MywgODMsIDY1LCA2NSwgMTI4LCA4MywgODMsIDUxLCAxMjgsIDgzLCAKLSAgICA4MywgNTAsIDEyOCwgODMsIDgyLCAxMjgsIDgzLCA4MSwgODUsIDczLCA4MywgMjAwLCA4MywgODEsIDg1LCA3MywgODIsIAotICAgIDgyLCA2OSwgMjA0LCA4MywgODEsIDg1LCA3MywgNzEsIDcxLCA3NiwgMTk3LCA4MywgODEsIDg1LCA2NSwgMjEyLCA4MywgCi0gICAgODEsIDg1LCA2NSwgODIsIDY5LCA4MywgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCA2OCwgMTI4LCA4MywgODEsIDg1LCAKLSAgICA2NSwgODIsIDY5LCAxMjgsIDgzLCA4MCwgODcsIDY1LCAxMjgsIDgzLCA4MCwgODUsIDc4LCA3MSwgMjExLCA4MywgODAsIAotICAgIDgyLCA3OSwgODUsIDg0LCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgCi0gICAgNzEsIDEyOCwgODMsIDgwLCA4MiwgNjksIDY3LCA3MiwgNzEsIDY5LCA4MywgNjUsIDc4LCAxOTksIDgzLCA4MCwgNzksIDg1LCAKLSAgICA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzksIDg0LCAxMjgsIDgzLCA4MCwgNzksIDc5LCA3OCwgMTI4LCA4MywgODAsIAotICAgIDc2LCA3MywgODQsIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3NiwgNjUsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDgzLCA4MCwgCi0gICAgNzMsIDgyLCA3MywgODQsIDg1LCAyMTEsIDgzLCA4MCwgNzMsIDgyLCA3MywgODQsIDEyOCwgODMsIDgwLCA3MywgODIsIDczLCAKLSAgICAyMTIsIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzYsIDEyOCwgODMsIAotICAgIDgwLCA3MywgODIsIDY1LCAyMDQsIDgzLCA4MCwgNzMsIDY4LCA2OSwgODIsIDIxNywgODMsIDgwLCA3MywgNjcsIDY5LCAKLSAgICAxMjgsIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA4MywgODAsIDY5LCA4MywgNzcsIDczLCA3NiwgCi0gICAgMjA3LCA4MywgODAsIDY5LCA2OSwgNjgsIDY2LCA3OSwgNjUsIDg0LCAxMjgsIDgzLCA4MCwgNjksIDY5LCA2NywgNzIsIAotICAgIDEyOCwgODMsIDgwLCA2OSwgNjksIDY3LCAyMDAsIDgzLCA4MCwgNjksIDY3LCA3MywgNjUsIDc2LCAxMjgsIDgzLCA4MCwgCi0gICAgNjksIDY1LCA4MiwgMTI4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCAKLSAgICAyMTAsIDgzLCA4MCwgNjksIDY1LCA3NSwgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgNzMsIDIwNCwgODMsIDgwLCA2NSwgODQsIAotICAgIDcyLCA3MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA3MywgNzgsIDE5OSwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgCi0gICAgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MiwgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCAKLSAgICA2OSwgMTI4LCA4MywgODAsIDY1LCA3MSwgNzIsIDY5LCA4NCwgODQsIDczLCAxMjgsIDgzLCA4MCwgNjUsIDY4LCA2OSwgODMsIAotICAgIDEyOCwgODMsIDgwLCA2NSwgNjgsIDE5NywgODMsIDgwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA4MywgODAsIDY1LCA2NywgCi0gICAgMTk3LCA4MywgODAsIDY1LCAxMjgsIDgzLCA3OSwgODksIDEyOCwgODMsIDc5LCA4NywgNzMsIDc2LCAyMDcsIDgzLCA3OSwgCi0gICAgODcsIDEyOCwgODMsIDc5LCA4NSwgODQsIDcyLCA2OSwgODIsIDIwNiwgODMsIDc5LCA4NSwgODQsIDcyLCA0NSwgODMsIDc2LCAKLSAgICA2NSwgODYsIDY5LCAyMTcsIDgzLCA3OSwgODUsIDg0LCAyMDAsIDgzLCA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgODMsIAotICAgIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgzLCA3OSwgODUsIDc4LCAxOTYsIDgzLCA3OSwgODUsIDc4LCA2NSwgODAsIDEyOCwgCi0gICAgODMsIDc5LCA4NSwgMTI4LCA4MywgNzksIDgzLCAxMjgsIDgzLCA3OSwgODIsIDE5MywgODMsIDc5LCA4MSwgMTI4LCA4MywgCi0gICAgNzksIDc5LCAyMDYsIDgzLCA3OSwgNzgsIDc0LCA2NSwgNzcsIDEyOCwgODMsIDc5LCA3OCwgNzEsIDEyOCwgODMsIDc5LCAKLSAgICA3OCwgMTI4LCA4MywgNzksIDc3LCA4MCwgNjksIDc4LCAxOTksIDgzLCA3OSwgNzcsIDEyOCwgODMsIDc5LCA3NiwgNzMsIAotICAgIDY4LCA4NSwgODMsIDEyOCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgMjExLCA4MywgNzksIDcyLCAxMjgsIDgzLCA3OSwgCi0gICAgNzEsIDY4LCA3MywgNjUsIDIwNiwgODMsIDc5LCA3MCwgODQsIDg3LCA2NSwgODIsIDY5LCA0NSwgNzAsIDg1LCA3OCwgNjcsIAotICAgIDg0LCA3MywgNzksIDIwNiwgODMsIDc5LCA3MCwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCA3OSwgNzAsIDIxMiwgCi0gICAgODMsIDc5LCAxOTgsIDgzLCA3OSwgNjcsIDczLCA2OSwgODQsIDg5LCAxMjgsIDgzLCA3OSwgNjcsIDY3LCA2OSwgMjEwLCAKLSAgICA4MywgNzksIDY1LCA4MCwgMTI4LCA4MywgNzksIDY1LCAxMjgsIDgzLCAyMDcsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIAotICAgIDc4LCAxMjgsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIDIwNiwgODMsIDc4LCA3OSwgODcsIDcwLCA3NiwgNjUsIDc1LCA2OSwgCi0gICAgMTI4LCA4MywgNzgsIDc5LCA4NywgNjYsIDc5LCA2NSwgODIsIDY4LCA2OSwgODIsIDEyOCwgODMsIDc4LCA3OSwgODcsIAotICAgIDEyOCwgODMsIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgzLCA3OCwgNzksIDg1LCAyMTIsIDgzLCA3OCwgNjUsIDIwOCwgODMsIAotICAgIDc4LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3OCwgNjUsIDc1LCAxOTcsIDgzLCA3OCwgNjUsIDczLCA3NiwgMTI4LCA4MywgCi0gICAgNzgsIDE5MywgODMsIDc3LCA3OSwgNzUsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA4MiwgNzUsIDczLCA3OCwgMTk5LCAKLSAgICA4MywgNzcsIDczLCA3NiwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDc2LCA2OSwgMTI4LCA4MywgNzcsIDY5LCA2NSwgODIsIAotICAgIDEyOCwgODMsIDc3LCA2NSwgODMsIDIwMCwgODMsIDc3LCA2NSwgNzYsIDc2LCA2OSwgMjEwLCA4MywgNzcsIDY1LCA3NiwgCi0gICAgNzYsIDEyOCwgODMsIDc2LCA4NSwgODIsIDEyOCwgODMsIDc2LCA3OSwgODcsIDc2LCA4OSwgMTI4LCA4MywgNzYsIDc5LCAKLSAgICAyMTUsIDgzLCA3NiwgNzksIDg2LCA3OSwgMTI4LCA4MywgNzYsIDc5LCAyMTIsIDgzLCA3NiwgNzksIDgwLCA3MywgNzgsIAotICAgIDE5OSwgODMsIDc2LCA3OSwgODAsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2OCwgCi0gICAgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2NywgNjksIDEyOCwgODMsIDc2LCA3MywgNjcsIDE5NywgODMsIDc2LCAKLSAgICA2OSwgNjksIDgwLCAyMTcsIDgzLCA3NiwgNjksIDY5LCA4MCwgNzMsIDc4LCAxOTksIDgzLCA3NiwgNjUsIDg2LCA3OSwgNzgsIAotICAgIDczLCAxOTUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMTI4LCA4MywgNzYsIDY1LCA4MywgNzIsIDEyOCwgODMsIDc2LCA2NSwgCi0gICAgODMsIDIwMCwgODMsIDc2LCA2NSwgNzgsIDg0LCA2OSwgMTk2LCA4MywgNzUsIDg3LCA2NSwgMTI4LCA4MywgNzUsIDg3LCAKLSAgICAxMjgsIDgzLCA3NSwgODUsIDc2LCA3NiwgMTI4LCA4MywgNzUsIDg1LCA3NiwgMjA0LCA4MywgNzUsIDc2LCA3MywgODIsIAotICAgIDc5LCAyMDYsIDgzLCA3NSwgNzMsIDc4LCAxMjgsIDgzLCA3NSwgNzMsIDY5LCA4MiwgMTI4LCA4MywgNzUsIDIwMSwgODMsIAotICAgIDc1LCA2OSwgODcsIDY5LCAxOTYsIDgzLCA3NSwgNjUsIDg0LCA2OSwgMTI4LCA4MywgNzUsIDEyOCwgODMsIDc0LCA2OSwgCi0gICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgODksIDQ1LCA3MCwgNzksIDg1LCA4MiwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDg5LCAKLSAgICAxMjgsIDgzLCA3MywgODgsIDg0LCAyMTcsIDgzLCA3MywgODgsIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIAotICAgIDcyLCAyMTEsIDgzLCA3MywgODgsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDcyLCA4MywgCi0gICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCAKLSAgICA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCAyMDYsIAotICAgIDgzLCA3MywgODgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDgzLCA3MywgODgsIDQ1LCA4MywgODQsIDgyLCAKLSAgICA3MywgNzgsIDE5OSwgODMsIDczLCA4OCwgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA4MywgNzMsIDg4LCA0NSwgNzYsIAotICAgIDczLCA3OCwgMTk3LCA4MywgNzMsIDIxNiwgODMsIDczLCA4NCwgNjksIDEyOCwgODMsIDczLCA4MywgNjUsIDEyOCwgODMsIAotICAgIDczLCA4MiwgNzMsIDc4LCA3MSwgODUsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKLSAgICA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIAotICAgIDczLCA3OSwgODMsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCAKLSAgICA4NSwgODAsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDcyLCA3MywgCi0gICAgNjksIDg1LCA4MCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCAKLSAgICA4MywgNzMsIDc5LCA4MywgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc3LCA3MywgCi0gICAgNjksIDg1LCA3NywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgCi0gICAgODMsIDczLCA3OSwgODMsIDQ1LCA3MywgNjksIDg1LCA3OCwgNzEsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MiwgNzMsIAotICAgIDY5LCA4NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDczLCA3OSwgCi0gICAgODMsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA4MywgNzMsIDc5LCAyMTEsIDgzLCA3MywgNzgsIDc1LCAKLSAgICA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzgsIDcxLCA3NiwgNjksIDQ1LCA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MSwgCi0gICAgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTAsIDEyOCwgODMsIDczLCAKLSAgICA3OCwgNzEsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4MywgNzMsIAotICAgIDc4LCA3MSwgNzYsIDE5NywgODMsIDczLCA3OCwgNzEsIDY1LCA2NSwgODQsIDEyOCwgODMsIDczLCA3OCwgMTk3LCA4MywgCi0gICAgNzMsIDc4LCA2OCwgNzIsIDIwMSwgODMsIDczLCAyMDYsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIAotICAgIDE5NiwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgODIsIDEyOCwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgMjEwLCA4MywgCi0gICAgNzMsIDc3LCA2NSwgNzgsIDgzLCA3MywgMjExLCA4MywgNzMsIDc3LCA2NSwgNzYsIDg1LCA3OCwgNzEsIDg1LCAyMDYsIDgzLCAKLSAgICA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzYsIDg2LCA2OSwgODIsIDEyOCwgODMsIDczLCA3NiwgNzUsIDEyOCwgODMsIAotICAgIDczLCA3NiwgNzMsIDgxLCA4NSwgMTkzLCA4MywgNzMsIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCA2OSwgMTI4LCA4MywgCi0gICAgNzMsIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCAxOTcsIDgzLCA3MywgNzYsIDY1LCA1MSwgMTI4LCA4MywgNzMsIDc1LCAKLSAgICA3MywgMTI4LCA4MywgNzMsIDc1LCA1MCwgMTI4LCA4MywgNzMsIDc1LCAxNzgsIDgzLCA3MywgNzEsIDc4LCA4MywgMTI4LCAKLSAgICA4MywgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIDczLCA3MSwgNzcsIDE5MywgODMsIDczLCA3MSwgNjksIDIwNCwgODMsIAotICAgIDczLCA3MSwgNTIsIDEyOCwgODMsIDczLCA3MSwgMTgwLCA4MywgNzMsIDcxLCAxMjgsIDgzLCA3MywgNjksIDY5LCAxMjgsIAotICAgIDgzLCA3MywgNjgsIDY5LCA4NywgNjUsIDg5LCAyMTEsIDgzLCA3MywgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgCi0gICAgNzMsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIDgzLCA3MywgNjYsIDE5NywgODMsIDIwMSwgODMsIDcyLCA4OSwgODgsIDEyOCwgCi0gICAgODMsIDcyLCA4OSwgODQsIDEyOCwgODMsIDcyLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODksIDgyLCAxMjgsIDgzLCAKLSAgICA3MiwgODksIDgwLCAxMjgsIDgzLCA3MiwgODksIDY5LCAxMjgsIDgzLCA3MiwgODksIDY1LCAxMjgsIDgzLCA3MiwgODksIAotICAgIDEyOCwgODMsIDcyLCA4NywgNzksIDg5LCAxMjgsIDgzLCA3MiwgODcsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgCi0gICAgMTI4LCA4MywgNzIsIDg3LCA3MywgNzMsIDEyOCwgODMsIDcyLCA4NywgNzMsIDEyOCwgODMsIDcyLCA4NywgNjksIDEyOCwgCi0gICAgODMsIDcyLCA4NywgNjUsIDY1LCAxMjgsIDgzLCA3MiwgODcsIDY1LCAxMjgsIDgzLCA3MiwgODUsIDg4LCAxMjgsIDgzLCAKLSAgICA3MiwgODUsIDg1LCAxMjgsIDgzLCA3MiwgODUsIDg0LCAxMjgsIDgzLCA3MiwgODUsIDgyLCA4OCwgMTI4LCA4MywgNzIsIAotICAgIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgODgsIDEyOCwgODMsIDcyLCA4NSwgCi0gICAgNzksIDgwLCAxMjgsIDgzLCA3MiwgODUsIDc5LCAxMjgsIDgzLCA3MiwgODUsIDc3LCAxMjgsIDgzLCA3MiwgODUsIDcwLCAKLSAgICA3MCwgNzYsIDE5NywgODMsIDcyLCA4NSwgNjksIDgxLCAxMjgsIDgzLCA3MiwgODUsIDY5LCA3OCwgODMsIDcyLCA4NSwgNjksIAotICAgIDg0LCAxMjgsIDgzLCA3MiwgODUsIDY2LCA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgNTAsIDEyOCwgODMsIDcyLCA4NSwgCi0gICAgMTc4LCA4MywgNzIsIDg1LCAxMjgsIDgzLCA3MiwgMjEzLCA4MywgNzIsIDg0LCA2NSwgODAsIDczLCA2NywgMTI4LCA4MywgCi0gICAgNzIsIDg0LCA2NSwgMTI4LCA4MywgNzIsIDgyLCA3MywgNzgsIDY5LCAxMjgsIDgzLCA3MiwgODIsIDczLCA3NywgODAsIAotICAgIDEyOCwgODMsIDcyLCA4MiwgNzMsIDczLCAxMjgsIDgzLCA3MiwgNzksIDg5LCAxMjgsIDgzLCA3MiwgNzksIDg4LCAxMjgsIAotICAgIDgzLCA3MiwgNzksIDg3LCA2OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODUsIDc2LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MywgCi0gICAgNzIsIDc5LCA4NCwgMTI4LCA4MywgNzIsIDc5LCA4MiwgODQsIDgzLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgMjExLCAKLSAgICA4MywgNzIsIDc5LCA4MiwgODQsIDY5LCA3OCwgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjcsIDY1LCA3NSwgCi0gICAgNjksIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4OSwgODIsIDEyOCwgODMsIDcyLCAKLSAgICA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4NCwgODksIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgCi0gICAgODQsIDg3LCA3MywgNzEsIDQ1LCA4MywgNzksIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIAotICAgIDQ1LCA3OSwgODMsIDIxMSwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OCwgNjUsIDg1LCAKLSAgICAxOTYsIDgzLCA3MiwgNzksIDgyLCA4NCwgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA4MywgNzIsIAotICAgIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA4MywgNzIsIDc5LCAKLSAgICA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCA3MSwgNDUsIDY2LCA3NCwgNjUsIDgyLCA3NSwgNjUsIDIwNiwgODMsIDcyLCA3OSwgCi0gICAgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA2NSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDEyOCwgODMsIDcyLCAKLSAgICA3OSwgODIsIDIxMiwgODMsIDcyLCA3OSwgODEsIDEyOCwgODMsIDcyLCA3OSwgMjA5LCA4MywgNzIsIDc5LCA4MCwgMTI4LCAKLSAgICA4MywgNzIsIDc5LCA3OSwgODQsIDczLCA3OCwgMTk5LCA4MywgNzIsIDc5LCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgNzksIAotICAgIDEyOCwgODMsIDcyLCA3OSwgNzEsIDIwMSwgODMsIDcyLCA3OSwgMTk5LCA4MywgNzIsIDc5LCA2OSwgMTI4LCA4MywgNzIsIAotICAgIDc5LCAxOTcsIDgzLCA3MiwgNzksIDY1LCAxMjgsIDgzLCA3MiwgNzksIDEyOCwgODMsIDcyLCA3MywgODksIDg5LCA2NSwgCi0gICAgNjUsIDc2LCA2NSwgNjUsIDEyOCwgODMsIDcyLCA3MywgODQsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCAxOTMsIDgzLCAKLSAgICA3MiwgNzMsIDgyLCAyMTIsIDgzLCA3MiwgNzMsIDgyLCA2NSwgNjksIDEyOCwgODMsIDcyLCA3MywgODIsIDEyOCwgODMsIAotICAgIDcyLCA3MywgMjEwLCA4MywgNzIsIDczLCA4MSwgMTI4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA4MywgNzIsIDczLCA3OCwgCi0gICAgODQsIDIwNywgODMsIDcyLCA3MywgNzgsIDczLCA3MSwgMTI4LCA4MywgNzIsIDczLCA3OCwgNjgsIDE5MywgODMsIDcyLCAKLSAgICA3MywgNzgsIDEyOCwgODMsIDcyLCA3MywgMjA2LCA4MywgNzIsIDczLCA3NywgNjUsIDEyOCwgODMsIDcyLCA3MywgNzcsIAotICAgIDE5MywgODMsIDcyLCA3MywgNzcsIDEyOCwgODMsIDcyLCA3MywgMjA1LCA4MywgNzIsIDczLCA3MywgNzgsIDEyOCwgODMsIAotICAgIDcyLCA3MywgNzMsIDEyOCwgODMsIDcyLCA3MywgNzAsIDIxMiwgODMsIDcyLCA3MywgNjksIDc2LCA2OCwgMTI4LCA4MywgCi0gICAgNzIsIDczLCA2OCwgMTI4LCA4MywgNzIsIDczLCAxOTYsIDgzLCA3MiwgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNzIsIDE5MywgCi0gICAgODMsIDcyLCA2OSwgODgsIDEyOCwgODMsIDcyLCA2OSwgODYsIDY1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA4OCwgMTI4LCAKLSAgICA4MywgNzIsIDY5LCA4NSwgNzksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCA4NCwgODUsIDEyOCwgODMsIAotICAgIDcyLCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA4NCwgCi0gICAgMTI4LCA4MywgNzIsIDY5LCAyMTIsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzYsIDY1LCA3NywgMTI4LCA4MywgNzIsIDY5LCAKLSAgICA4MywgNzIsIDczLCA3MSwgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDczLCAxOTksIDgzLCA3MiwgNjksIDgzLCA3MiwgNTAsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgODMsIDcyLCAxMjgsIDgzLCA3MiwgNjksIDgxLCA2OSwgMjA0LCA4MywgNzIsIDY5LCA4MCwgCi0gICAgMTI4LCA4MywgNzIsIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA3NiwgNzYsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDIwNCwgCi0gICAgODMsIDcyLCA2OSwgNzYsIDcwLCAxMjgsIDgzLCA3MiwgNjksIDczLCAxMjgsIDgzLCA3MiwgNjksIDcxLCA1NywgMTI4LCAKLSAgICA4MywgNzIsIDY5LCA2OSwgODAsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIAotICAgIDEyOCwgODMsIDcyLCA2OSwgNjksIDIwNiwgODMsIDcyLCA2OSwgNjksIDEyOCwgODMsIDcyLCA2OSwgNDUsIDcxLCA3OSwgCi0gICAgNjUsIDg0LCAxMjgsIDgzLCA3MiwgMTk3LCA4MywgNzIsIDY3LCA3MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODksIDEyOCwgCi0gICAgODMsIDcyLCA2NSwgODgsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MywgNzIsIDY1LCAKLSAgICA4NiwgNzMsIDY1LCAyMDYsIDgzLCA3MiwgNjUsIDg2LCA2OSwgMTk2LCA4MywgNzIsIDY1LCA4NSwgMTI4LCA4MywgNzIsIAotICAgIDY1LCA4NCwgMTI4LCA4MywgNzIsIDY1LCA4MiwgODUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDIxMywgODMsIDcyLCA2NSwgCi0gICAgODIsIDgwLCAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMDgsIDgzLCA3MiwgNjUsIDgyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCAKLSAgICA4MiwgNTAsIDEyOCwgODMsIDcyLCA2NSwgODIsIDE3OCwgODMsIDcyLCA2NSwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgODAsIDY5LCA4MywgMTI4LCA4MywgNzIsIDY1LCA4MCwgMTk3LCA4MywgNzIsIDY1LCA4MCwgMTI4LCA4MywgCi0gICAgNzIsIDY1LCA3OCwgNzEsIDEyOCwgODMsIDcyLCA2NSwgNzgsIDEyOCwgODMsIDcyLCA2NSwgMjA2LCA4MywgNzIsIDY1LCAKLSAgICA3NywgODIsIDc5LCA2NywgNzUsIDEyOCwgODMsIDcyLCA2NSwgNzYsIDgzLCA3MiwgNjksIDc2LCA2OSwgODQsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgNzUsIDg0LCA3MywgMTI4LCA4MywgNzIsIDY1LCA3MywgMTI4LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgCi0gICAgMTk2LCA4MywgNzIsIDY1LCA2OCwgNjksIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA4MywgNzIsIDY1LCAKLSAgICA2OCwgNjgsIDE5MywgODMsIDcyLCA2NSwgNjgsIDEyOCwgODMsIDcyLCA2NSwgMTk2LCA4MywgNzIsIDY1LCA2NiwgNTQsIAotICAgIDEyOCwgODMsIDcyLCA2NSwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNTQsIDEyOCwgODMsIDcyLCA2NSwgNTEsIDEyOCwgODMsIAotICAgIDcyLCA2NSwgMTc5LCA4MywgNzEsIDgyLCAxOTMsIDgzLCA3MSwgNzksIDIxMCwgODMsIDcxLCA2NywgMTI4LCA4MywgNzEsIAotICAgIDY1LCAyMTUsIDgzLCA3MSwgNjUsIDE5NCwgODMsIDcxLCAxMjgsIDgzLCA2OSwgODgsIDg0LCA4NSwgNzYsIDE5MywgODMsIAotICAgIDY5LCA4OCwgODQsIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA4OCwgODQsIDY1LCA3OCwgMjExLCA4MywgNjksIDg2LCA2OSwgCi0gICAgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCAKLSAgICA3OCwgODQsIDIxNywgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIAotICAgIDY5LCA3OCwgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDY5LCA4NiwgNjksIDc4LCA0NSwgCi0gICAgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgMjA2LCA4MywgNjksIDg1LCA4OCwgMTI4LCAKLSAgICA4MywgNjksIDg1LCA3OCwgODksIDY1LCA3NywgMTI4LCA4MywgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDgzLCA2OSwgODQsIAotICAgIDcwLCA3OSwgNzgsIDEyOCwgODMsIDY5LCA4MywgODQsIDY5LCA4MiwgODQsIDczLCA4NSwgMjExLCA4MywgNjksIDgzLCA4MSwgCi0gICAgODUsIDczLCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA4NCwgNjksIDEyOCwgODMsIDY5LCA4MywgNjUsIDc3LCAxOTcsIDgzLCAKLSAgICA2OSwgODIsIDg2LCA3MywgNjcsIDE5NywgODMsIDY5LCA4MiwgNzMsIDcwLCA4MywgMTI4LCA4MywgNjksIDgyLCA3MywgNzAsIAotICAgIDIxMSwgODMsIDY5LCA4MSwgODUsIDY5LCA3OCwgNjcsIDE5NywgODMsIDY5LCA4MCwgODQsIDY5LCA3NywgNjYsIDY5LCA4MiwgCi0gICAgMTI4LCA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCAKLSAgICA3OSwgMjEwLCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODMsIDY5LCA3OCwgODQsIDczLCAxMjgsIDgzLCA2OSwgNzcsIAotICAgIDg1LCA3OCwgNjcsIDczLCAxOTMsIDgzLCA2OSwgNzcsIDc1LCA2NSwgODQsIDcyLCAxMjgsIDgzLCA2OSwgNzcsIDc1LCAKLSAgICAxMjgsIDgzLCA2OSwgNzcsIDczLCA4NiwgNzksIDg3LCA2OSwgMjA0LCA4MywgNjksIDc3LCA3MywgODMsIDc5LCA3MCwgCi0gICAgMjEyLCA4MywgNjksIDc3LCA3MywgODMsIDY5LCA4OCwgODQsIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA3NywgNzMsIDc3LCAKLSAgICA3MywgNzgsIDczLCA3NywgMTkzLCA4MywgNjksIDc3LCA3MywgNjgsIDczLCA4MiwgNjksIDY3LCAyMTIsIDgzLCA2OSwgNzcsIAotICAgIDczLCA2NywgNzksIDc2LCA3OSwgNzgsIDEyOCwgODMsIDY5LCA3NywgNzMsIDY3LCA3OSwgNzYsIDc5LCAyMDYsIDgzLCA2OSwgCi0gICAgNzcsIDczLCA2NywgNzMsIDgyLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MywgNjksIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIAotICAgIDc2LCAxOTcsIDgzLCA2OSwgNzcsIDczLCA2NiwgODIsIDY5LCA4NiwgNzMsIDIxMSwgODMsIDY5LCA3NywgNzMsIDQ1LCA4NiwgCi0gICAgNzksIDczLCA2NywgNjksIDE5NiwgODMsIDY5LCA3NiwgNzAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MCwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1NiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU2LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAKLSAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCAKLSAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU3LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU0LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUxLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1NCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDQ4LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTYsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTMsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTAsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MSwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MSwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNTAsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUxLCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA1MCwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNTAsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUxLCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNTAsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIAotICAgIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCAKLSAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNTAsIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDQ4LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA1MCwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgCi0gICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDUwLCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MiwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAotICAgIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA1MCwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTYsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKLSAgICA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MiwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDUwLCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OSwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCi0gICAgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTYsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA1MCwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTMsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDUwLCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUxLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTcsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAotICAgIDU2LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDQ4LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1NSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MiwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDU1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDQ4LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTYsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1NCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MiwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCAKLSAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTMsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTYsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgCi0gICAgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCi0gICAgNDUsIDQ5LCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OSwgMTI4LCAKLSAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCi0gICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIAotICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgCi0gICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAotICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKLSAgICA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OSwgMTI4LCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKLSAgICA4MiwgNDUsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU3LCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgODMsIDY5LCAKLSAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCi0gICAgODIsIDQ1LCA0OSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTAsIAotICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCi0gICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAotICAgIDQ5LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgCi0gICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAotICAgIDgyLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU0LCAKLSAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAotICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTAsIDEyOCwgODMsIAotICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKLSAgICA3OSwgODIsIDQ1LCA0OSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgCi0gICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKLSAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCi0gICAgNDksIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU0LCAxMjgsIDgzLCAKLSAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCi0gICAgNzksIDgyLCA0NSwgNDksIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIAotICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCi0gICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAotICAgIDQ1LCA0OSwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgCi0gICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAotICAgIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCAKLSAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAotICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKLSAgICA0NSwgNDksIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUxLCAxMjgsIAotICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKLSAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCi0gICAgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCAKLSAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgMjEwLCA4MywgNjksIAotICAgIDc2LCA2OSwgNjcsIDg0LCA2OSwgMTk2LCA4MywgNjksIDczLCA4MywgNzcsIDY1LCAxMjgsIDgzLCA2OSwgNzMsIDgzLCA3NywgCi0gICAgMTkzLCA4MywgNjksIDcyLCAxMjgsIDgzLCA2OSwgNzEsIDc5LCA3NiwgMTI4LCA4MywgNjksIDcxLCA3OCwgNzksIDEyOCwgCi0gICAgODMsIDY5LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgODMsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA2OSwgNjksIDc4LCAKKyAgICA3OSwgNzgsIDE5OSwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgODMsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgCisgICAgMjExLCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTcsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDU2LCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1NSwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTQsIAorICAgIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUzLCAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA1MiwgCisgICAgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNTEsIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIDUwLCAKKyAgICAxMjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDQ1LCA0OSwgNDksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCA2OSwgNDUsIAorICAgIDQ5LCA0OCwgMTI4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCA0NSwgNDksIDEyOCwgODMsIDg0LCA4MiwgNzksIDc1LCAKKyAgICAxOTcsIDgzLCA4NCwgODIsIDczLCA4MCwgNjksIDEyOCwgODMsIDg0LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA4MywgODQsIAorICAgIDgyLCA3MywgNzgsIDE5OSwgODMsIDg0LCA4MiwgNzMsIDc1LCA2OSwgODQsIDcyLCA4MiwgNzksIDg1LCA3MSwgNzIsIDEyOCwgCisgICAgODMsIDg0LCA4MiwgNzMsIDY4LCA2OSwgMTI4LCA4MywgODQsIDgyLCA3MywgNjcsIDg0LCA3NiwgMjE3LCA4MywgODQsIDgyLCAKKyAgICA2OSwgODQsIDY3LCA3MiwgNjksIDE5NiwgODMsIDg0LCA4MiwgNjksIDgzLCAyMTEsIDgzLCA4NCwgODIsIDY5LCA3OCwgNzEsIAorICAgIDg0LCA3MiwgMTI4LCA4MywgODQsIDgyLCA2OSwgNjUsIDc3LCA2OSwgODIsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg3LCA2NiwgCisgICAgNjksIDgyLCA4MiwgODksIDEyOCwgODMsIDg0LCA4MiwgNjUsIDg0LCA4NSwgNzcsIDQ1LCA1MCwgMTI4LCA4MywgODQsIDgyLCAKKyAgICA2NSwgODQsIDg1LCA3NywgMTI4LCA4MywgODQsIDgyLCA2NSwgODQsIDg1LCAyMDUsIDgzLCA4NCwgODIsIDY1LCA4NCwgNzMsIAorICAgIDY1LCAyMDYsIDgzLCA4NCwgODIsIDY1LCA3MywgNzgsIDY5LCA4MiwgMTI4LCA4MywgODQsIDgyLCA2NSwgNzMsIDcxLCA3MiwgCisgICAgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDgzLCA4NCwgODIsIDY1LCA3MywgNzEsIDcyLCAyMTIsIDgzLCA4NCwgODIsIDY1LCAKKyAgICA3MywgNzAsIDEyOCwgODMsIDg0LCA4MiwgNjUsIDcxLCA3MSwgNzMsIDgzLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA4MywgODQsIAorICAgIDc5LCA4NiwgNjksIDEyOCwgODMsIDg0LCA3OSwgODIsIDY5LCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4NywgNjUsIDg0LCA2NywgCisgICAgNzIsIDEyOCwgODMsIDg0LCA3OSwgODAsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgzLCA4NCwgNzksIDgwLCA4MCwgNjUsIDcxLCAKKyAgICA2OSwgMTI4LCA4MywgODQsIDc5LCA4MCwgMTI4LCA4MywgODQsIDc5LCAyMDgsIDgzLCA4NCwgNzksIDc4LCA2OSwgMTI4LCAKKyAgICA4MywgODQsIDc5LCA2NywgNzUsIDEyOCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA4MywgODQsIDczLCA3NiwgCisgICAgMjA0LCA4MywgODQsIDczLCA3NiwgMTk3LCA4MywgODQsIDczLCA3MSwgNzcsIDY1LCAxMjgsIDgzLCA4NCwgNjksIDgwLCAKKyAgICAxMjgsIDgzLCA4NCwgNjksIDc3LCAxMjgsIDgzLCA4NCwgNjksIDY1LCA3NywgNzMsIDc4LCAxOTksIDgzLCA4NCwgNjksIAorICAgIDY1LCA3NywgMTI4LCA4MywgODQsIDY5LCA2NSwgMjA1LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCA4NSwgMTI4LCA4MywgCisgICAgODQsIDY1LCA4NiwgODIsIDc5LCA4MywgMTI4LCA4MywgODQsIDY1LCA4NiwgODIsIDc5LCAyMTEsIDgzLCA4NCwgNjUsIDg1LCAKKyAgICA4MiwgNzksIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDg0LCA4NSwgMTk3LCA4MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA4MywgODQsIDY1LCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MywgODQsIDY1LCA4NCwgNjksIDEyOCwgODMsIDg0LCAKKyAgICA2NSwgODIsIDIxMiwgODMsIDg0LCA2NSwgODIsIDgzLCAxMjgsIDgzLCA4NCwgNjUsIDgyLCA4MiwgNjksIDE5NiwgODMsIAorICAgIDg0LCA2NSwgODIsIDc1LCAxMjgsIDgzLCA4NCwgNjUsIDgyLCAxMjgsIDgzLCA4NCwgNjUsIDIxMCwgODMsIDg0LCA2NSwgCisgICAgNzgsIDY4LCA4MywgODQsIDczLCA3NiwgNzYsIDEyOCwgODMsIDg0LCA2NSwgNzgsIDY4LCA2NSwgODIsIDE5NiwgODMsIDg0LCAKKyAgICA2NSwgNzgsIDY4LCAxMjgsIDgzLCA4NCwgNjUsIDc4LCAxMjgsIDgzLCA4NCwgNjUsIDc2LCA3NiwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA4MywgODQsIDY1LCA3MCwgNzAsIDEyOCwgODMsIDg0LCA2NSwgNzAsIDE5OCwgODMsIDg0LCA2NSwgNjcsIDY3LCAKKyAgICA2NSwgODQsIDc5LCAxMjgsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3MywgODMsIDgzLCA3MywgNzcsIDc5LCAxMjgsIAorICAgIDgzLCA4NCwgNTAsIDEyOCwgODMsIDgzLCA4OSwgODgsIDEyOCwgODMsIDgzLCA4OSwgODQsIDEyOCwgODMsIDgzLCA4OSwgCisgICAgODIsIDg4LCAxMjgsIDgzLCA4MywgODksIDgyLCAxMjgsIDgzLCA4MywgODksIDgwLCAxMjgsIDgzLCA4MywgODksIDEyOCwgCisgICAgODMsIDgzLCA4NSwgODgsIDEyOCwgODMsIDgzLCA4NSwgODUsIDEyOCwgODMsIDgzLCA4NSwgODQsIDEyOCwgODMsIDgzLCAKKyAgICA4NSwgODAsIDEyOCwgODMsIDgzLCA3OSwgODgsIDEyOCwgODMsIDgzLCA3OSwgODQsIDEyOCwgODMsIDgzLCA3OSwgODAsIAorICAgIDEyOCwgODMsIDgzLCA3OSwgNzksIDEyOCwgODMsIDgzLCA3OSwgMTI4LCA4MywgODMsIDczLCA4OCwgMTI4LCA4MywgODMsIAorICAgIDczLCA4NCwgMTI4LCA4MywgODMsIDczLCA4MCwgMTI4LCA4MywgODMsIDczLCA3MywgMTI4LCA4MywgODMsIDczLCA2OSwgCisgICAgODgsIDEyOCwgODMsIDgzLCA3MywgNjksIDgwLCAxMjgsIDgzLCA4MywgNzMsIDY5LCAxMjgsIDgzLCA4MywgNzMsIDEyOCwgCisgICAgODMsIDgzLCA3MiwgNjksIDEyOCwgODMsIDgzLCA2OSwgODgsIDEyOCwgODMsIDgzLCA2OSwgODAsIDEyOCwgODMsIDgzLCAKKyAgICA2OSwgNjksIDEyOCwgODMsIDgzLCA2NSwgODgsIDEyOCwgODMsIDgzLCA2NSwgODUsIDEyOCwgODMsIDgzLCA2NSwgODQsIAorICAgIDEyOCwgODMsIDgzLCA2NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4OSwgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgCisgICAgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCA0NSwgODAsIAorICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MywgCisgICAgODMsIDY1LCA3OCwgNzEsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIAorICAgIDczLCA3OSwgODMsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIDczLCAKKyAgICA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgCisgICAgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCAKKyAgICA4MywgODMsIDY1LCA3OCwgNzEsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAKKyAgICAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIAorICAgIDczLCA2OSwgODUsIDgwLCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgzLCA4MywgCisgICAgNjUsIDc4LCA3MSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIAorICAgIDc5LCA3NSwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MywgODMsIDY1LCA3OCwgCisgICAgNzEsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgNDUsIAorICAgIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MywgODMsIDY1LCA3OCwgNzEsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MywgCisgICAgODMsIDY1LCA3OCwgNzEsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCA4MywgODMsIDY1LCA3MywgMTI4LCA4MywgODMsIDY1LCAKKyAgICA2NSwgMTI4LCA4MywgODMsIDUxLCAxMjgsIDgzLCA4MywgNTAsIDEyOCwgODMsIDgyLCAxMjgsIDgzLCA4MSwgODUsIDczLCAKKyAgICA4MywgMjAwLCA4MywgODEsIDg1LCA3MywgODIsIDgyLCA2OSwgMjA0LCA4MywgODEsIDg1LCA3MywgNzEsIDcxLCA3NiwgCisgICAgMTk3LCA4MywgODEsIDg1LCA2NSwgMjEyLCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCA4MywgMTI4LCA4MywgODEsIDg1LCAKKyAgICA2NSwgODIsIDY5LCA2OCwgMTI4LCA4MywgODEsIDg1LCA2NSwgODIsIDY5LCAxMjgsIDgzLCA4MCwgODcsIDY1LCAxMjgsIAorICAgIDgzLCA4MCwgODUsIDc4LCA3MSwgMjExLCA4MywgODAsIDgyLCA3OSwgODUsIDg0LCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgCisgICAgNzEsIDgzLCAxMjgsIDgzLCA4MCwgODIsIDczLCA3OCwgNzEsIDEyOCwgODMsIDgwLCA4MiwgNjksIDY3LCA3MiwgNzEsIDY5LCAKKyAgICA4MywgNjUsIDc4LCAxOTksIDgzLCA4MCwgNzksIDg1LCA4NCwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzksIDg0LCAxMjgsIAorICAgIDgzLCA4MCwgNzksIDc5LCA3OCwgMTI4LCA4MywgODAsIDc2LCA3MywgODQsIDg0LCA3MywgNzgsIDE5OSwgODMsIDgwLCA3NiwgCisgICAgNjUsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDgzLCA4MCwgNzMsIDgyLCA3MywgODQsIDg1LCAyMTEsIDgzLCA4MCwgNzMsIDgyLCAKKyAgICA3MywgODQsIDEyOCwgODMsIDgwLCA3MywgODIsIDczLCAyMTIsIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzgsIDg0LCAxMjgsIAorICAgIDgzLCA4MCwgNzMsIDgyLCA2NSwgNzYsIDEyOCwgODMsIDgwLCA3MywgODIsIDY1LCAyMDQsIDgzLCA4MCwgNzMsIDY4LCA2OSwgCisgICAgODIsIDIxNywgODMsIDgwLCA3MywgNjcsIDY5LCAxMjgsIDgzLCA4MCwgNzIsIDY5LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCAKKyAgICA4MywgODAsIDY5LCA4MywgNzcsIDczLCA3NiwgMjA3LCA4MywgODAsIDY5LCA2OSwgNjgsIDY2LCA3OSwgNjUsIDg0LCAxMjgsIAorICAgIDgzLCA4MCwgNjksIDY5LCA2NywgNzIsIDEyOCwgODMsIDgwLCA2OSwgNjksIDY3LCAyMDAsIDgzLCA4MCwgNjksIDY3LCA3MywgCisgICAgNjUsIDc2LCAxMjgsIDgzLCA4MCwgNjksIDY1LCA4MiwgMTI4LCA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCA4MiwgMTI4LCAKKyAgICA4MywgODAsIDY5LCA2NSwgNzUsIDY5LCAyMTAsIDgzLCA4MCwgNjksIDY1LCA3NSwgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgCisgICAgNzMsIDIwNCwgODMsIDgwLCA2NSwgODQsIDcyLCA3MywgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA3MywgNzgsIAorICAgIDE5OSwgODMsIDgwLCA2NSwgODIsIDc1LCA3NiwgNjksIDgzLCAxMjgsIDgzLCA4MCwgNjUsIDgyLCA3NSwgNzYsIDY5LCA4MiwgCisgICAgMTI4LCA4MywgODAsIDY1LCA4MiwgNzUsIDc2LCA2OSwgMTI4LCA4MywgODAsIDY1LCA3MSwgNzIsIDY5LCA4NCwgODQsIDczLCAKKyAgICAxMjgsIDgzLCA4MCwgNjUsIDY4LCA2OSwgODMsIDEyOCwgODMsIDgwLCA2NSwgNjgsIDE5NywgODMsIDgwLCA2NSwgNjcsIAorICAgIDczLCA3OCwgMTk5LCA4MywgODAsIDY1LCA2NywgMTk3LCA4MywgODAsIDY1LCAxMjgsIDgzLCA3OSwgODksIDEyOCwgODMsIAorICAgIDc5LCA4NywgNzMsIDc2LCAyMDcsIDgzLCA3OSwgODcsIDEyOCwgODMsIDc5LCA4NSwgODQsIDcyLCA2OSwgODIsIDIwNiwgCisgICAgODMsIDc5LCA4NSwgODQsIDcyLCA0NSwgODMsIDc2LCA2NSwgODYsIDY5LCAyMTcsIDgzLCA3OSwgODUsIDg0LCAyMDAsIDgzLCAKKyAgICA3OSwgODUsIDgyLCA2NywgNjksIDEyOCwgODMsIDc5LCA4NSwgNzgsIDY4LCAxMjgsIDgzLCA3OSwgODUsIDc4LCAxOTYsIAorICAgIDgzLCA3OSwgODUsIDc4LCA2NSwgODAsIDEyOCwgODMsIDc5LCA4NSwgMTI4LCA4MywgNzksIDgzLCAxMjgsIDgzLCA3OSwgCisgICAgODIsIDE5MywgODMsIDc5LCA4MSwgMTI4LCA4MywgNzksIDc5LCAyMDYsIDgzLCA3OSwgNzgsIDc0LCA2NSwgNzcsIDEyOCwgCisgICAgODMsIDc5LCA3OCwgNzEsIDEyOCwgODMsIDc5LCA3OCwgMTI4LCA4MywgNzksIDc3LCA4MCwgNjksIDc4LCAxOTksIDgzLCAKKyAgICA3OSwgNzcsIDEyOCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgODMsIDEyOCwgODMsIDc5LCA3NiwgNzMsIDY4LCA4NSwgCisgICAgMjExLCA4MywgNzksIDcyLCAxMjgsIDgzLCA3OSwgNzEsIDY4LCA3MywgNjUsIDIwNiwgODMsIDc5LCA3MCwgODQsIDg3LCAKKyAgICA2NSwgODIsIDY5LCA0NSwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDIwNiwgODMsIDc5LCA3MCwgODQsIDc4LCA2OSwgCisgICAgODMsIDgzLCAxMjgsIDgzLCA3OSwgNzAsIDIxMiwgODMsIDc5LCAxOTgsIDgzLCA3OSwgNjcsIDczLCA2OSwgODQsIDg5LCAKKyAgICAxMjgsIDgzLCA3OSwgNjcsIDY3LCA2OSwgMjEwLCA4MywgNzksIDY1LCA4MCwgMTI4LCA4MywgNzksIDY1LCAxMjgsIDgzLCAKKyAgICAyMDcsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIDc4LCAxMjgsIDgzLCA3OCwgNzksIDg3LCA3NywgNjUsIDIwNiwgODMsIAorICAgIDc4LCA3OSwgODcsIDcwLCA3NiwgNjUsIDc1LCA2OSwgMTI4LCA4MywgNzgsIDc5LCA4NywgNjYsIDc5LCA2NSwgODIsIDY4LCAKKyAgICA2OSwgODIsIDEyOCwgODMsIDc4LCA3OSwgODcsIDEyOCwgODMsIDc4LCA3OSwgODUsIDg0LCAxMjgsIDgzLCA3OCwgNzksIAorICAgIDg1LCAyMTIsIDgzLCA3OCwgNjUsIDIwOCwgODMsIDc4LCA2NSwgNzUsIDY5LCAxMjgsIDgzLCA3OCwgNjUsIDc1LCAxOTcsIAorICAgIDgzLCA3OCwgNjUsIDczLCA3NiwgMTI4LCA4MywgNzgsIDE5MywgODMsIDc3LCA3OSwgNzUsIDczLCA3OCwgMTk5LCA4MywgCisgICAgNzcsIDczLCA4MiwgNzUsIDczLCA3OCwgMTk5LCA4MywgNzcsIDczLCA3NiwgNzMsIDc4LCAxOTksIDgzLCA3NywgNzMsIDc2LCAKKyAgICA2OSwgMTI4LCA4MywgNzcsIDY5LCA2NSwgODIsIDEyOCwgODMsIDc3LCA2NSwgODMsIDIwMCwgODMsIDc3LCA2NSwgNzYsIAorICAgIDc2LCA2OSwgMjEwLCA4MywgNzcsIDY1LCA3NiwgNzYsIDEyOCwgODMsIDc2LCA4NSwgODIsIDEyOCwgODMsIDc2LCA3OSwgCisgICAgODcsIDc2LCA4OSwgMTI4LCA4MywgNzYsIDc5LCAyMTUsIDgzLCA3NiwgNzksIDg2LCA3OSwgMTI4LCA4MywgNzYsIDc5LCAKKyAgICAyMTIsIDgzLCA3NiwgNzksIDgwLCA3MywgNzgsIDE5OSwgODMsIDc2LCA3OSwgODAsIDY5LCAxMjgsIDgzLCA3NiwgNzMsIAorICAgIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA4MywgNzYsIDczLCA2NywgNjksIDEyOCwgCisgICAgODMsIDc2LCA3MywgNjcsIDE5NywgODMsIDc2LCA2OSwgNjksIDgwLCAyMTcsIDgzLCA3NiwgNjksIDY5LCA4MCwgNzMsIDc4LCAKKyAgICAxOTksIDgzLCA3NiwgNjUsIDg2LCA3OSwgNzgsIDczLCAxOTUsIDgzLCA3NiwgNjUsIDg2LCA2OSwgMTI4LCA4MywgNzYsIAorICAgIDY1LCA4MywgNzIsIDEyOCwgODMsIDc2LCA2NSwgODMsIDIwMCwgODMsIDc2LCA2NSwgNzgsIDg0LCA2OSwgMTk2LCA4MywgCisgICAgNzUsIDg3LCA2NSwgMTI4LCA4MywgNzUsIDg3LCAxMjgsIDgzLCA3NSwgODUsIDc2LCA3NiwgMTI4LCA4MywgNzUsIDg1LCAKKyAgICA3NiwgMjA0LCA4MywgNzUsIDc2LCA3MywgODIsIDc5LCAyMDYsIDgzLCA3NSwgNzMsIDc4LCAxMjgsIDgzLCA3NSwgNzMsIAorICAgIDY5LCA4MiwgMTI4LCA4MywgNzUsIDIwMSwgODMsIDc1LCA2OSwgODcsIDY5LCAxOTYsIDgzLCA3NSwgNjUsIDg0LCA2OSwgCisgICAgMTI4LCA4MywgNzUsIDEyOCwgODMsIDc0LCA2OSwgMTI4LCA4MywgNzMsIDg4LCA4NCwgODksIDQ1LCA3MCwgNzksIDg1LCAKKyAgICA4MiwgODQsIDIwMCwgODMsIDczLCA4OCwgODQsIDg5LCAxMjgsIDgzLCA3MywgODgsIDg0LCAyMTcsIDgzLCA3MywgODgsIAorICAgIDg0LCA3MiwgODMsIDEyOCwgODMsIDczLCA4OCwgODQsIDcyLCAyMTEsIDgzLCA3MywgODgsIDg0LCA3MiwgMTI4LCA4MywgCisgICAgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIDcyLCA4MywgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgODQsIAorICAgIDcyLCAxMjgsIDgzLCA3MywgODgsIDg0LCA2OSwgNjksIDc4LCA4NCwgMjAwLCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCA3OCwgCisgICAgMTI4LCA4MywgNzMsIDg4LCA4NCwgNjksIDY5LCAyMDYsIDgzLCA3MywgODgsIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAKKyAgICAxMjgsIDgzLCA3MywgODgsIDQ1LCA4MywgODQsIDgyLCA3MywgNzgsIDE5OSwgODMsIDczLCA4OCwgNDUsIDgwLCA2OSwgODIsIAorICAgIDQ1LCA2OSwgMjA1LCA4MywgNzMsIDg4LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA4MywgNzMsIDIxNiwgODMsIDczLCA4NCwgCisgICAgNjksIDEyOCwgODMsIDczLCA4MywgNjUsIDEyOCwgODMsIDczLCA4MiwgNzMsIDc4LCA3MSwgODUsIDEyOCwgODMsIDczLCAKKyAgICA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgzLCA4MywgCisgICAgNjUsIDc4LCA3MSwgODMsIDczLCA3OSwgODMsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKKyAgICAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIAorICAgIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc4LCA3MywgNjksIDg1LCAKKyAgICA3OCwgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MywgNzMsIDc5LCA4MywgNDUsIAorICAgIDc1LCA3MiwgNzMsIDY5LCA4NSwgNzUsIDcyLCAxMjgsIDgzLCA3MywgNzksIDgzLCA0NSwgNzUsIDY1LCA4MCwgODksIDY5LCAKKyAgICA3OSwgODUsIDc4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MywgNjksIDg1LCA3OCwgCisgICAgNzEsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCAKKyAgICA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgCisgICAgMTI4LCA4MywgNzMsIDc5LCAyMTEsIDgzLCA3MywgNzgsIDc1LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA3MywgNzgsIDcxLCAKKyAgICA3NiwgNjksIDQ1LCA4MywgNzIsIDczLCA3MCwgODQsIDQ1LCA1MSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDY5LCA0NSwgCisgICAgODMsIDcyLCA3MywgNzAsIDg0LCA0NSwgNTAsIDEyOCwgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgNDUsIDc2LCA3MywgNzgsIAorICAgIDE5NywgODMsIDczLCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4MywgNzMsIDc4LCA3MSwgNzYsIDE5NywgODMsIDczLCA3OCwgCisgICAgNzEsIDY1LCA2NSwgODQsIDEyOCwgODMsIDczLCA3OCwgMTk3LCA4MywgNzMsIDc4LCA2OCwgNzIsIDIwMSwgODMsIDczLCAKKyAgICAyMDYsIDgzLCA3MywgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIDE5NiwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgODIsIAorICAgIDEyOCwgODMsIDczLCA3NywgNzMsIDc2LCA2NSwgMjEwLCA4MywgNzMsIDc3LCA2NSwgNzgsIDgzLCA3MywgMjExLCA4MywgCisgICAgNzMsIDc3LCA2NSwgNzYsIDg1LCA3OCwgNzEsIDg1LCAyMDYsIDgzLCA3MywgNzcsIDY1LCAxMjgsIDgzLCA3MywgNzYsIDg2LCAKKyAgICA2OSwgODIsIDEyOCwgODMsIDczLCA3NiwgNzUsIDEyOCwgODMsIDczLCA3NiwgNzMsIDgxLCA4NSwgMTkzLCA4MywgNzMsIAorICAgIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCA2OSwgMTI4LCA4MywgNzMsIDc2LCA3MiwgNzksIDg1LCA2OSwgODQsIDg0LCAKKyAgICAxOTcsIDgzLCA3MywgNzYsIDY1LCA1MSwgMTI4LCA4MywgNzMsIDc1LCA3MywgMTI4LCA4MywgNzMsIDc1LCA1MCwgMTI4LCAKKyAgICA4MywgNzMsIDc1LCAxNzgsIDgzLCA3MywgNzEsIDc4LCA4MywgMTI4LCA4MywgNzMsIDcxLCA3NywgNjUsIDEyOCwgODMsIAorICAgIDczLCA3MSwgNzcsIDE5MywgODMsIDczLCA3MSwgNjksIDIwNCwgODMsIDczLCA3MSwgNTIsIDEyOCwgODMsIDczLCA3MSwgCisgICAgMTgwLCA4MywgNzMsIDcxLCAxMjgsIDgzLCA3MywgNjksIDY5LCAxMjgsIDgzLCA3MywgNjgsIDY5LCA4NywgNjUsIDg5LCAKKyAgICAyMTEsIDgzLCA3MywgNjcsIDc1LCA3OCwgNjksIDgzLCA4MywgMTI4LCA4MywgNzMsIDY3LCA3NSwgNzYsIDY5LCAxMjgsIAorICAgIDgzLCA3MywgNjYsIDE5NywgODMsIDIwMSwgODMsIDcyLCA4OSwgODgsIDEyOCwgODMsIDcyLCA4OSwgODQsIDEyOCwgODMsIAorICAgIDcyLCA4OSwgODIsIDg4LCAxMjgsIDgzLCA3MiwgODksIDgyLCAxMjgsIDgzLCA3MiwgODksIDgwLCAxMjgsIDgzLCA3MiwgCisgICAgODksIDY5LCAxMjgsIDgzLCA3MiwgODksIDY1LCAxMjgsIDgzLCA3MiwgODksIDEyOCwgODMsIDcyLCA4NywgNzksIDg5LCAKKyAgICAxMjgsIDgzLCA3MiwgODcsIDc5LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3OSwgMTI4LCA4MywgNzIsIDg3LCA3MywgNzMsIAorICAgIDEyOCwgODMsIDcyLCA4NywgNzMsIDEyOCwgODMsIDcyLCA4NywgNjksIDEyOCwgODMsIDcyLCA4NywgNjUsIDY1LCAxMjgsIAorICAgIDgzLCA3MiwgODcsIDY1LCAxMjgsIDgzLCA3MiwgODUsIDg4LCAxMjgsIDgzLCA3MiwgODUsIDg1LCAxMjgsIDgzLCA3MiwgCisgICAgODUsIDg0LCAxMjgsIDgzLCA3MiwgODUsIDgyLCA4OCwgMTI4LCA4MywgNzIsIDg1LCA4MiwgMTI4LCA4MywgNzIsIDg1LCAKKyAgICA4MCwgMTI4LCA4MywgNzIsIDg1LCA3OSwgODgsIDEyOCwgODMsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDgzLCA3MiwgODUsIAorICAgIDc5LCAxMjgsIDgzLCA3MiwgODUsIDc3LCAxMjgsIDgzLCA3MiwgODUsIDcwLCA3MCwgNzYsIDE5NywgODMsIDcyLCA4NSwgCisgICAgNjksIDgxLCAxMjgsIDgzLCA3MiwgODUsIDY5LCA3OCwgODMsIDcyLCA4NSwgNjksIDg0LCAxMjgsIDgzLCA3MiwgODUsIDY2LCAKKyAgICA4NSwgODIsIDEyOCwgODMsIDcyLCA4NSwgNTAsIDEyOCwgODMsIDcyLCA4NSwgMTc4LCA4MywgNzIsIDg1LCAxMjgsIDgzLCAKKyAgICA3MiwgMjEzLCA4MywgNzIsIDg0LCA2NSwgODAsIDczLCA2NywgMTI4LCA4MywgNzIsIDg0LCA2NSwgMTI4LCA4MywgNzIsIAorICAgIDgyLCA3MywgNzgsIDY5LCAxMjgsIDgzLCA3MiwgODIsIDczLCA3NywgODAsIDEyOCwgODMsIDcyLCA4MiwgNzMsIDczLCAKKyAgICAxMjgsIDgzLCA3MiwgNzksIDg5LCAxMjgsIDgzLCA3MiwgNzksIDg4LCAxMjgsIDgzLCA3MiwgNzksIDg3LCA2OSwgODIsIAorICAgIDEyOCwgODMsIDcyLCA3OSwgODUsIDc2LCA2OCwgNjksIDgyLCA2OSwgMTk2LCA4MywgNzIsIDc5LCA4NCwgMTI4LCA4MywgCisgICAgNzIsIDc5LCA4MiwgODQsIDgzLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgMjExLCA4MywgNzIsIDc5LCA4MiwgODQsIDY5LCAKKyAgICA3OCwgNjksIDgyLCAxMjgsIDgzLCA3MiwgNzksIDgyLCA4NCwgNjcsIDY1LCA3NSwgNjksIDEyOCwgODMsIDcyLCA3OSwgODIsIAorICAgIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4OSwgODIsIDEyOCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCAKKyAgICA3MywgNzEsIDQ1LCA4NCwgODksIDIxMCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA4MywgCisgICAgNzksIDIwNCwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OSwgODMsIDIxMSwgODMsIDcyLCAKKyAgICA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgNzEsIDQ1LCA3OCwgNjUsIDg1LCAxOTYsIDgzLCA3MiwgNzksIDgyLCA4NCwgCisgICAgNDUsIDg0LCA4NywgNzMsIDcxLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIAorICAgIDczLCA3MSwgNDUsIDcyLCA2NSwgNzEsIDY1LCA3NiwgMjA0LCA4MywgNzIsIDc5LCA4MiwgODQsIDQ1LCA4NCwgODcsIDczLCAKKyAgICA3MSwgNDUsIDY2LCA3NCwgNjUsIDgyLCA3NSwgNjUsIDIwNiwgODMsIDcyLCA3OSwgODIsIDg0LCA0NSwgODQsIDg3LCA3MywgCisgICAgNzEsIDQ1LCA2NSwgMjEwLCA4MywgNzIsIDc5LCA4MiwgODQsIDEyOCwgODMsIDcyLCA3OSwgODIsIDIxMiwgODMsIDcyLCAKKyAgICA3OSwgODEsIDEyOCwgODMsIDcyLCA3OSwgMjA5LCA4MywgNzIsIDc5LCA4MCwgMTI4LCA4MywgNzIsIDc5LCA3OSwgODQsIAorICAgIDczLCA3OCwgMTk5LCA4MywgNzIsIDc5LCA3OSwgODQsIDEyOCwgODMsIDcyLCA3OSwgNzksIDEyOCwgODMsIDcyLCA3OSwgCisgICAgNzEsIDIwMSwgODMsIDcyLCA3OSwgMTk5LCA4MywgNzIsIDc5LCA2OSwgMTI4LCA4MywgNzIsIDc5LCAxOTcsIDgzLCA3MiwgCisgICAgNzksIDY1LCAxMjgsIDgzLCA3MiwgNzksIDEyOCwgODMsIDcyLCA3MywgODksIDg5LCA2NSwgNjUsIDc2LCA2NSwgNjUsIAorICAgIDEyOCwgODMsIDcyLCA3MywgODQsIDY1LCAxMjgsIDgzLCA3MiwgNzMsIDg0LCAxOTMsIDgzLCA3MiwgNzMsIDgyLCAyMTIsIAorICAgIDgzLCA3MiwgNzMsIDgyLCA2NSwgNjksIDEyOCwgODMsIDcyLCA3MywgODIsIDEyOCwgODMsIDcyLCA3MywgMjEwLCA4MywgCisgICAgNzIsIDczLCA4MSwgMTI4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA4MywgNzIsIDczLCA3OCwgODQsIDIwNywgODMsIDcyLCAKKyAgICA3MywgNzgsIDczLCA3MSwgMTI4LCA4MywgNzIsIDczLCA3OCwgNjgsIDE5MywgODMsIDcyLCA3MywgNzgsIDEyOCwgODMsIAorICAgIDcyLCA3MywgMjA2LCA4MywgNzIsIDczLCA3NywgNjUsIDEyOCwgODMsIDcyLCA3MywgNzcsIDE5MywgODMsIDcyLCA3MywgCisgICAgNzcsIDEyOCwgODMsIDcyLCA3MywgMjA1LCA4MywgNzIsIDczLCA3MywgNzgsIDEyOCwgODMsIDcyLCA3MywgNzMsIDEyOCwgCisgICAgODMsIDcyLCA3MywgNzAsIDIxMiwgODMsIDcyLCA3MywgNjksIDc2LCA2OCwgMTI4LCA4MywgNzIsIDczLCA2OCwgMTI4LCAKKyAgICA4MywgNzIsIDczLCAxOTYsIDgzLCA3MiwgNzIsIDY1LCAxMjgsIDgzLCA3MiwgNzIsIDE5MywgODMsIDcyLCA2OSwgODgsIAorICAgIDEyOCwgODMsIDcyLCA2OSwgODYsIDY1LCAxMjgsIDgzLCA3MiwgNjksIDg1LCA4OCwgMTI4LCA4MywgNzIsIDY5LCA4NSwgCisgICAgNzksIDgxLCAxMjgsIDgzLCA3MiwgNjksIDg1LCA2NSwgNjksIDgxLCA4NCwgODUsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCAKKyAgICA2OSwgODEsIDEyOCwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA4MywgNzIsIDY5LCA4NCwgMTI4LCA4MywgNzIsIAorICAgIDY5LCAyMTIsIDgzLCA3MiwgNjksIDgzLCA3MiwgNzYsIDY1LCA3NywgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDczLCA3MSwgCisgICAgMTI4LCA4MywgNzIsIDY5LCA4MywgNzIsIDczLCAxOTksIDgzLCA3MiwgNjksIDgzLCA3MiwgNTAsIDEyOCwgODMsIDcyLCAKKyAgICA2OSwgODMsIDcyLCAxMjgsIDgzLCA3MiwgNjksIDgxLCA2OSwgMjA0LCA4MywgNzIsIDY5LCA4MCwgMTI4LCA4MywgNzIsIAorICAgIDY5LCA3OCwgMTI4LCA4MywgNzIsIDY5LCA3NiwgNzYsIDEyOCwgODMsIDcyLCA2OSwgNzYsIDIwNCwgODMsIDcyLCA2OSwgCisgICAgNzYsIDcwLCAxMjgsIDgzLCA3MiwgNjksIDczLCAxMjgsIDgzLCA3MiwgNjksIDcxLCA1NywgMTI4LCA4MywgNzIsIDY5LCAKKyAgICA2OSwgODAsIDEyOCwgODMsIDcyLCA2OSwgNjksIDc4LCA4NSwgMTI4LCA4MywgNzIsIDY5LCA2OSwgNzgsIDEyOCwgODMsIAorICAgIDcyLCA2OSwgNjksIDIwNiwgODMsIDcyLCA2OSwgNjksIDEyOCwgODMsIDcyLCA2OSwgNDUsIDcxLCA3OSwgNjUsIDg0LCAKKyAgICAxMjgsIDgzLCA3MiwgMTk3LCA4MywgNzIsIDY3LCA3MiwgNjUsIDEyOCwgODMsIDcyLCA2NSwgODksIDEyOCwgODMsIDcyLCAKKyAgICA2NSwgODgsIDEyOCwgODMsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MywgNzIsIDY1LCA4NiwgNzMsIAorICAgIDY1LCAyMDYsIDgzLCA3MiwgNjUsIDg2LCA2OSwgMTk2LCA4MywgNzIsIDY1LCA4NSwgMTI4LCA4MywgNzIsIDY1LCA4NCwgCisgICAgMTI4LCA4MywgNzIsIDY1LCA4MiwgODUsIDEyOCwgODMsIDcyLCA2NSwgODIsIDIxMywgODMsIDcyLCA2NSwgODIsIDgwLCAKKyAgICAxMjgsIDgzLCA3MiwgNjUsIDgyLCAyMDgsIDgzLCA3MiwgNjUsIDgyLCA2NSwgMTI4LCA4MywgNzIsIDY1LCA4MiwgNTAsIAorICAgIDEyOCwgODMsIDcyLCA2NSwgODIsIDE3OCwgODMsIDcyLCA2NSwgODAsIDczLCA3OCwgNzEsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgODAsIDY5LCA4MywgMTI4LCA4MywgNzIsIDY1LCA4MCwgMTk3LCA4MywgNzIsIDY1LCA4MCwgMTI4LCA4MywgNzIsIDY1LCAKKyAgICA3OCwgNzEsIDEyOCwgODMsIDcyLCA2NSwgNzgsIDEyOCwgODMsIDcyLCA2NSwgMjA2LCA4MywgNzIsIDY1LCA3NywgODIsIAorICAgIDc5LCA2NywgNzUsIDEyOCwgODMsIDcyLCA2NSwgNzYsIDgzLCA3MiwgNjksIDc2LCA2OSwgODQsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgNzUsIDg0LCA3MywgMTI4LCA4MywgNzIsIDY1LCA3MywgMTI4LCA4MywgNzIsIDY1LCA2OCwgNzksIDg3LCA2OSwgMTk2LCAKKyAgICA4MywgNzIsIDY1LCA2OCwgNjksIDEyOCwgODMsIDcyLCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA4MywgNzIsIDY1LCA2OCwgNjgsIAorICAgIDE5MywgODMsIDcyLCA2NSwgNjgsIDEyOCwgODMsIDcyLCA2NSwgMTk2LCA4MywgNzIsIDY1LCA2NiwgNTQsIDEyOCwgODMsIAorICAgIDcyLCA2NSwgNjUsIDEyOCwgODMsIDcyLCA2NSwgNTQsIDEyOCwgODMsIDcyLCA2NSwgNTEsIDEyOCwgODMsIDcyLCA2NSwgCisgICAgMTc5LCA4MywgNzEsIDgyLCAxOTMsIDgzLCA3MSwgNzksIDIxMCwgODMsIDcxLCA2NywgMTI4LCA4MywgNzEsIDY1LCAyMTUsIAorICAgIDgzLCA3MSwgNjUsIDE5NCwgODMsIDcxLCAxMjgsIDgzLCA2OSwgODgsIDg0LCA4NSwgNzYsIDE5MywgODMsIDY5LCA4OCwgCisgICAgODQsIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA4OCwgODQsIDY1LCA3OCwgMjExLCA4MywgNjksIDg2LCA2OSwgODIsIDY1LCAKKyAgICA3OCwgNjcsIDY5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIDg5LCAxMjgsIDgzLCA2OSwgODYsIDY5LCA3OCwgODQsIAorICAgIDIxNywgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNzIsIDEyOCwgODMsIDY5LCA4NiwgNjksIDc4LCA4NCwgNjksIDY5LCA3OCwgCisgICAgMTI4LCA4MywgNjksIDg2LCA2OSwgNzgsIDg0LCA2OSwgNjksIDIwNiwgODMsIDY5LCA4NiwgNjksIDc4LCA0NSwgODQsIDcyLCAKKyAgICA3MywgODIsIDg0LCA4OSwgMTI4LCA4MywgNjksIDg2LCA2OSwgMjA2LCA4MywgNjksIDg1LCA4OCwgMTI4LCA4MywgNjksIAorICAgIDg1LCA3OCwgODksIDY1LCA3NywgMTI4LCA4MywgNjksIDg1LCA2NSwgNjksIDgxLCAxMjgsIDgzLCA2OSwgODQsIDcwLCA3OSwgCisgICAgNzgsIDEyOCwgODMsIDY5LCA4MywgODQsIDY5LCA4MiwgODQsIDczLCA4NSwgMjExLCA4MywgNjksIDgzLCA4MSwgODUsIDczLCAKKyAgICA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA4NCwgNjksIDEyOCwgODMsIDY5LCA4MywgNjUsIDc3LCAxOTcsIDgzLCA2OSwgODIsIAorICAgIDg2LCA3MywgNjcsIDE5NywgODMsIDY5LCA4MiwgNzMsIDcwLCA4MywgMTI4LCA4MywgNjksIDgyLCA3MywgNzAsIDIxMSwgCisgICAgODMsIDY5LCA4MSwgODUsIDY5LCA3OCwgNjcsIDE5NywgODMsIDY5LCA4MCwgODQsIDY5LCA3NywgNjYsIDY5LCA4MiwgMTI4LCAKKyAgICA4MywgNjksIDgwLCA2NSwgODIsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDgzLCA2OSwgODAsIDY1LCA4MiwgNjUsIDg0LCA3OSwgCisgICAgMjEwLCA4MywgNjksIDc4LCA4NCwgNzksIDEyOCwgODMsIDY5LCA3OCwgODQsIDczLCAxMjgsIDgzLCA2OSwgNzcsIDg1LCAKKyAgICA3OCwgNjcsIDczLCAxOTMsIDgzLCA2OSwgNzcsIDc1LCA2NSwgODQsIDcyLCAxMjgsIDgzLCA2OSwgNzcsIDc1LCAxMjgsIAorICAgIDgzLCA2OSwgNzcsIDczLCA4NiwgNzksIDg3LCA2OSwgMjA0LCA4MywgNjksIDc3LCA3MywgODMsIDc5LCA3MCwgMjEyLCA4MywgCisgICAgNjksIDc3LCA3MywgODMsIDY5LCA4OCwgODQsIDczLCA3NiwgNjksIDEyOCwgODMsIDY5LCA3NywgNzMsIDc3LCA3MywgNzgsIAorICAgIDczLCA3NywgMTkzLCA4MywgNjksIDc3LCA3MywgNjgsIDczLCA4MiwgNjksIDY3LCAyMTIsIDgzLCA2OSwgNzcsIDczLCA2NywgCisgICAgNzksIDc2LCA3OSwgNzgsIDEyOCwgODMsIDY5LCA3NywgNzMsIDY3LCA3OSwgNzYsIDc5LCAyMDYsIDgzLCA2OSwgNzcsIDczLCAKKyAgICA2NywgNzMsIDgyLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MywgNjksIDc3LCA3MywgNjcsIDczLCA4MiwgNjcsIDc2LCAxOTcsIAorICAgIDgzLCA2OSwgNzcsIDczLCA2NiwgODIsIDY5LCA4NiwgNzMsIDIxMSwgODMsIDY5LCA3NywgNzMsIDQ1LCA4NiwgNzksIDczLCAKKyAgICA2NywgNjksIDE5NiwgODMsIDY5LCA3NiwgNzAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIAorICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIAorICAgIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIAorICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NywgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTcsIAorICAgIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU2LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTYsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU2LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTMsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU2LCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgNTAsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTYsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDU2LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTUsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1NSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTUsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA1MiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTUsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU1LCA0OSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1NSwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU3LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1NCwgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDU0LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1NCwgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDUxLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1NCwgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTQsIDQ4LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUzLCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTYsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUzLCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTMsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDUyLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUzLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgNTAsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTMsIDQ5LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUzLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MywgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTcsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTIsIDU2LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTQsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTIsIDUzLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNTEsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTIsIDUwLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MiwgNDgsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgCisgICAgNTUsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgCisgICAgNTIsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MSwgCisgICAgNDksIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NywgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNTAsIDU1LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1NCwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNTAsIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIDUxLCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNTAsIDUzLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTMsIAorICAgIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUyLCAKKyAgICA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNTAsIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTIsIDQ4LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgCisgICAgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUxLCA1MiwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIAorICAgIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA1MCwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgNTYsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCAKKyAgICA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA1MiwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDUwLCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDUwLCA0OSwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA1MCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgCisgICAgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTYsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA1MCwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OSwgNTMsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDUwLCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ5LCA0OSwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDU3LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA1MCwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgNTMsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA1MCwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDUwLCA0OCwgCisgICAgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNTAsIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgNDgsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDUwLCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA1MCwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1NywgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU3LCA1NSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDU3LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDUxLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDU3LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTcsIDQ4LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1NiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1NSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1NiwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU2LCA1MiwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDU2LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTYsIDQ4LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTUsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTYsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1NSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCA1MiwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA1NSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU1LCAKKyAgICA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTUsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTQsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgNTYsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTQsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgCisgICAgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA1MiwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA1NCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDU0LCA0OSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTQsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA1NCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIAorICAgIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTYsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTMsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MywgNTMsIDEyOCwgCisgICAgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCAKKyAgICA1MywgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUzLCA0OSwgMTI4LCA4MywgNjksIAorICAgIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTMsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCAKKyAgICA4MiwgNDUsIDQ5LCA1MywgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDU3LCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNTIsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTMsIDEyOCwgODMsIDY5LCAKKyAgICA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgCisgICAgODIsIDQ1LCA0OSwgNTIsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MiwgNTAsIAorICAgIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUyLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTIsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIAorICAgIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU3LCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDUxLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTEsIDU0LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIAorICAgIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCAKKyAgICA0OSwgNTEsIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgNTAsIDEyOCwgODMsIAorICAgIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUxLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCAKKyAgICA3OSwgODIsIDQ1LCA0OSwgNTEsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MSwgCisgICAgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCAKKyAgICA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgCisgICAgNDksIDUwLCA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIDU0LCAxMjgsIDgzLCAKKyAgICA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgCisgICAgNzksIDgyLCA0NSwgNDksIDUwLCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNTAsIAorICAgIDUxLCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgCisgICAgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDUwLCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIAorICAgIDQ1LCA0OSwgNTAsIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA1MCwgMTI4LCA4MywgCisgICAgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIAorICAgIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCAKKyAgICA1NSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDU0LCAxMjgsIDgzLCA2OSwgNzYsIAorICAgIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCAKKyAgICA0NSwgNDksIDQ5LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDksIDUxLCAxMjgsIAorICAgIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCAKKyAgICA4NCwgNzksIDgyLCA0NSwgNDksIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgCisgICAgNDksIDQ4LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OSwgMTI4LCA4MywgNjksIDc2LCAKKyAgICA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU3LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgCisgICAgNDUsIDQ5LCA0OCwgNTYsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIDQ4LCA1NSwgMTI4LCAKKyAgICA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDU0LCAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgCisgICAgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTMsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIDgyLCA0NSwgNDksIAorICAgIDQ4LCA1MiwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDUxLCAxMjgsIDgzLCA2OSwgCisgICAgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgNTAsIDEyOCwgODMsIDY5LCA3NiwgNjksIDY3LCA4NCwgNzksIAorICAgIDgyLCA0NSwgNDksIDQ4LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgODIsIDQ1LCA0OSwgNDgsIDQ4LCAKKyAgICAxMjgsIDgzLCA2OSwgNzYsIDY5LCA2NywgODQsIDc5LCA4MiwgNDUsIDQ5LCA0OCwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIAorICAgIDg0LCA3OSwgODIsIDQ1LCA0OSwgMTI4LCA4MywgNjksIDc2LCA2OSwgNjcsIDg0LCA3OSwgMjEwLCA4MywgNjksIDc2LCA2OSwgCisgICAgNjcsIDg0LCA2OSwgMTk2LCA4MywgNjksIDczLCA4MywgNzcsIDY1LCAxMjgsIDgzLCA2OSwgNzMsIDgzLCA3NywgMTkzLCAKKyAgICA4MywgNjksIDcyLCAxMjgsIDgzLCA2OSwgNzEsIDc5LCA3NiwgMTI4LCA4MywgNjksIDcxLCA3OCwgNzksIDEyOCwgODMsIAorICAgIDY5LCA3MSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgODMsIDY5LCA2OSwgNzgsIDg1LCAxMjgsIDgzLCA2OSwgNjksIDc4LCAKICAgICAxMjgsIDgzLCA2OSwgNjksIDIwNiwgODMsIDY5LCA2OSwgNjgsIDc2LCA3MywgNzgsIDcxLCAxMjgsIDgzLCA2OSwgNjksIAogICAgIDQ1LCA3OCwgNzksIDQ1LCA2OSwgODYsIDczLCAyMDQsIDgzLCA2OSwgNjcsIDg0LCA3OSwgODIsIDEyOCwgODMsIDY5LCA2NywgCiAgICAgODQsIDczLCA3OSwgNzgsIDEyOCwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA4MywgNjksIDY3LCA4MiwgNjksIDg0LCAKQEAgLTEyOTIsMjczMSArMTI5MywyNzMzIEBACiAgICAgNjcsIDIwMywgODIsIDc5LCA2NywgMTI4LCA4MiwgNzksIDY2LCA2NSwgODQsIDEyOCwgODIsIDc5LCA2NSwgODMsIDg0LCAKICAgICA2OSwgMTk2LCA4MiwgNzksIDY1LCA4MiwgMTI4LCA4MiwgNzksIDY1LCAxMjgsIDgyLCA3OCwgODksIDczLCA3OCwgMTk5LCAKICAgICA4MiwgNzgsIDc5LCA3OSwgNzgsIDEyOCwgODIsIDc4LCA3OSwgNzksIDIwNiwgODIsIDc4LCA2NSwgMjA1LCA4MiwgNzcsIAotICAgIDg0LCAxMjgsIDgyLCA3NiwgNzksIDEyOCwgODIsIDc2LCA3NywgMTI4LCA4MiwgNzYsIDY5LCAxMjgsIDgyLCA3NCwgNjksIAotICAgIDIxMSwgODIsIDc0LCA2OSwgMTI4LCA4MiwgNzQsIDE5NywgODIsIDczLCA4NiwgNjksIDgyLCAxMjgsIDgyLCA3MywgODQsIAotICAgIDg1LCA2NSwgNzYsIDEyOCwgODIsIDczLCA4NCwgODQsIDc5LCA4MiwgODUsIDEyOCwgODIsIDczLCA4NCwgODMsIDczLCAKLSAgICAxMjgsIDgyLCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDgzLCA3MiwgMTI4LCA4MiwgNzMsIDgyLCA2NSwgMTI4LCAKLSAgICA4MiwgNzMsIDgwLCAxMjgsIDgyLCA3MywgNzgsIDcxLCAyMTEsIDgyLCA3MywgNzgsIDcwLCA3OSwgODIsIDkwLCA2NSwgNzgsIAotICAgIDY4LCA3OSwgMTI4LCA4MiwgNzMsIDIwNiwgODIsIDczLCA3NywgNzEsIDY2LCA2NSwgMTI4LCA4MiwgNzMsIDc1LCA4MiwgCi0gICAgNzMsIDc1LCAxMjgsIDgyLCA3MywgNzEsIDg2LCA2OSwgNjgsIDczLCAxOTUsIDgyLCA3MywgNzEsIDcyLCA4NCwgODcsIDY1LCAKLSAgICA4MiwgNjgsIDgzLCAxMjgsIDgyLCA3MywgNzEsIDcyLCA4NCwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgODQsIAotICAgIDQ1LCA4NCwgNzksIDQ1LCA3NiwgNjksIDcwLCAyMTIsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MywgNjgsIDE5NywgCi0gICAgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIAotICAgIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgwLCA3OSwgNzMsIDc4LCAKLSAgICA4NCwgNzMsIDc4LCAxOTksIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcyLCA2NSwgNzgsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIAotICAgIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIDc4LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCAKLSAgICA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA4MywgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg5LCA2OSwgNzksIDgyLCA3MywgNzgsIDcyLCAKLSAgICA3MywgNjksIDg1LCA3MiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgCi0gICAgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIAotICAgIDczLCA3NSwgNjksIDg1LCA4NCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCAKLSAgICA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgCi0gICAgODQsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODQsIDczLCA3NSwgNjksIAotICAgIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIAotICAgIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCAKLSAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIAotICAgIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCi0gICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAotICAgIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCAKLSAgICA4MCwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIAotICAgIDczLCA2OSwgODUsIDc2LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgCi0gICAgNjksIDg1LCA3NywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzcsIAotICAgIDczLCA2OSwgODUsIDc3LCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCAKLSAgICA3MywgNjksIDg1LCA3NywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAotICAgIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAKLSAgICAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgCi0gICAgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCAKLSAgICA4NSwgNzYsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgODIsIDczLCA2OSwgODUsIDIwNCwgODIsIDczLCA2OSwgNzYsIAotICAgIDEyOCwgODIsIDczLCA2OSwgNjksIDEyOCwgODIsIDczLCA2NywgNjksIDc3LCAxMjgsIDgyLCA3MywgNjcsIDY5LCAxMjgsIAotICAgIDgyLCA3MywgNjcsIDE5NywgODIsIDczLCA2NiwgNjYsIDc5LCA3OCwgMTI4LCA4MiwgNzMsIDY1LCAyMDQsIDgyLCA3MiwgCi0gICAgNzksIDg0LCA3MywgMTk1LCA4MiwgNzIsIDc5LCAxMjgsIDgyLCA3MiwgMjA3LCA4MiwgNzIsIDY1LCAxMjgsIDgyLCA3MSwgCi0gICAgODksIDczLCA3OCwgNzEsIDgzLCAxMjgsIDgyLCA3MSwgODksIDY1LCA3OCwgMTI4LCA4MiwgNzEsIDg5LCAxOTMsIDgyLCAKLSAgICA2OSwgODYsIDc5LCA3NiwgODYsIDczLCA3OCwgMTk5LCA4MiwgNjksIDg2LCA3OSwgNzYsIDg1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA4MiwgNjksIDg2LCA3NywgNjUsIDEyOCwgODIsIDY5LCA4NiwgNzMsIDY1LCAxMjgsIDgyLCA2OSwgODYsIDY5LCAKLSAgICA4MiwgODMsIDY5LCA2OCwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgMTk2LCA4MiwgNjksIDg2LCA2OSwgODIsIAotICAgIDgzLCAxOTcsIDgyLCA2OSwgODUsIDg4LCAxMjgsIDgyLCA2OSwgODUsIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCA3OCwgCi0gICAgMTI4LCA4MiwgNjksIDg0LCA4NSwgODIsIDIwNiwgODIsIDY5LCA4NCwgODIsIDc5LCA3MCwgNzYsIDY5LCAyMTYsIDgyLCAKLSAgICA2OSwgODQsIDgyLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODQsIDc5LCA4MiwgODQsIDEyOCwgODIsIDY5LCA4MywgODUsIAotICAgIDgwLCA3MywgNzgsIDg1LCA4MywgMTI4LCA4MiwgNjksIDgzLCA4NCwgODIsIDc5LCA3OSwgNzcsIDEyOCwgODIsIDY5LCA4MywgCi0gICAgODQsIDgyLCA3MywgNjcsIDg0LCA2OSwgMTk2LCA4MiwgNjksIDgzLCA4NCwgMTI4LCA4MiwgNjksIDgzLCA4MCwgNzksIDc4LCAKLSAgICA4MywgNjksIDEyOCwgODIsIDY5LCA4MywgNzksIDg1LCA4MiwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDc5LCA3NiwgODUsIAotICAgIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCA2OSwgODMsIDczLCA4MywgODQsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgCi0gICAgODMsIDczLCA2OCwgNjksIDc4LCA2NywgNjksIDEyOCwgODIsIDY5LCA4MywgMjAwLCA4MiwgNjksIDgyLCA2OSwgNzgsIDcxLCAKLSAgICA3MSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgODIsIDY5LCA3NSwgNjUsIDc4LCAxMjgsIDgyLCA2OSwgODAsIDgyLCA2OSwgODMsIAotICAgIDY5LCA3OCwgODQsIDEyOCwgODIsIDY5LCA4MCwgNzYsIDY1LCA2NywgNjksIDc3LCA2OSwgNzgsIDIxMiwgODIsIDY5LCA4MCwgCi0gICAgNzIsIDEyOCwgODIsIDY5LCA4MCwgNjksIDg0LCA3MywgODQsIDczLCA3OSwgMjA2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCAKLSAgICA2OSwgMTk2LCA4MiwgNjksIDgwLCA2OSwgNjUsIDg0LCAxMjgsIDgyLCA2OSwgODAsIDY5LCA2NSwgMjEyLCA4MiwgNjksIAotICAgIDgwLCA2NSwgODksIDY1LCAxMjgsIDgyLCA2OSwgODAsIDY1LCAxMjgsIDgyLCA2OSwgODAsIDE5MywgODIsIDY5LCA3OCwgCi0gICAgODQsIDc5LCA3MSwgNjksIDc4LCAxMjgsIDgyLCA2OSwgNzgsIDEyOCwgODIsIDY5LCAyMDYsIDgyLCA2OSwgNzcsIDg1LCAKLSAgICAxMjgsIDgyLCA2OSwgNzcsIDY5LCA2OCwgODksIDEyOCwgODIsIDY5LCA3NiwgNzMsIDcxLCA3MywgNzksIDc4LCAxMjgsIAotICAgIDgyLCA2OSwgNzYsIDczLCA2OSwgODYsIDY5LCAxOTYsIDgyLCA2OSwgNzYsIDY5LCA2NSwgODMsIDY5LCAxMjgsIDgyLCA2OSwgCi0gICAgNzYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgyLCAKLSAgICA2OSwgNzYsIDY1LCA2NSwgMTI4LCA4MiwgNjksIDc0LCA2NSwgNzgsIDE5OSwgODIsIDY5LCA3MywgMTk2LCA4MiwgNjksIAotICAgIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUyLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTEsIDEyOCwgCi0gICAgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCA4MywgMTI4LCAKLSAgICA4MiwgNjksIDcxLCA4NSwgNzYsIDg1LCAyMTEsIDgyLCA2OSwgNzEsIDczLCA4MywgODQsIDY5LCA4MiwgNjksIDE5NiwgODIsIAotICAgIDY5LCA3MSwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODIsIDY5LCA3MSwgNzMsIDY1LCA0NSwgNTAsIDEyOCwgODIsIDY5LCA3MSwgCi0gICAgNzMsIDY1LCAxMjgsIDgyLCA2OSwgNzAsIDc5LCA4MiwgNzcsIDY5LCAxOTYsIDgyLCA2OSwgNzAsIDY5LCA4MiwgNjksIDc4LCAKLSAgICA2NywgMTk3LCA4MiwgNjksIDY4LCA4NSwgODAsIDc2LCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIAotICAgIDY3LCA4OSwgNjcsIDc2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgODksIDY3LCA3NiwgNjksIDE5NiwgODIsIDY5LCA2NywgCi0gICAgODQsIDczLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIAotICAgIDIxMCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCA2OSwgMTI4LCA4MiwgNjksIDY3LCA4NCwgNjUsIDc4LCA3MSwgCi0gICAgNzYsIDE5NywgODIsIDY5LCA2NywgODIsIDY5LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNjcsIDc5LCAKLSAgICA4MiwgNjgsIDczLCA3OCwgMTk5LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA2OSwgODIsIDEyOCwgODIsIDY5LCA2NywgNzksIAotICAgIDgyLCAxOTYsIDgyLCA2OSwgNjcsIDY5LCA4MCwgODQsIDczLCA4NiwgMTk3LCA4MiwgNjksIDY3LCA2OSwgNzMsIDg2LCA2OSwgCi0gICAgODIsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgODIsIDQ1LCA1MCwgMTI4LCA4MiwgNjksIDY1LCA3NiwgNzEsIDY1LCAKLSAgICA4MiwgMTI4LCA4MiwgNjksIDY1LCA3MiwgNzcsIDg1LCA3NSwgMTI4LCA4MiwgNjksIDY1LCA2NywgNzIsIDEyOCwgODIsIAotICAgIDY4LCAyMDcsIDgyLCA2OCwgNjksIDIwNCwgODIsIDY2LCA2NSwgODMsIDE5MywgODIsIDY1LCA4OSwgODMsIDEyOCwgODIsIAotICAgIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgODIsIDY1LCA4NCwgNzMsIDc5LCAxMjgsIDgyLCA2NSwgODQsIDcyLCA2NSwgCi0gICAgMTI4LCA4MiwgNjUsIDg0LCA3MiwgMTkzLCA4MiwgNjUsIDg0LCA2NSwgMTI4LCA4MiwgNjUsIDg0LCAxMjgsIDgyLCA2NSwgCi0gICAgODMsIDg3LCA2NSwgNjgsIDczLCAxMjgsIDgyLCA2NSwgODMsIDc5LCA4NSwgMjA0LCA4MiwgNjUsIDgzLCA3MiwgNjUsIAotICAgIDEyOCwgODIsIDY1LCA4MSwgMTI4LCA4MiwgNjUsIDgwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCA3MSwgCi0gICAgMTk3LCA4MiwgNjUsIDc4LCA2NSwgMTI4LCA4MiwgNjUsIDc4LCAxMjgsIDgyLCA2NSwgNzcsIDIxMSwgODIsIDY1LCA3NywgCi0gICAgNjYsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDc1LCA3MiwgNjUsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDc1LCA2NSwgNjUsIDgyLCAKLSAgICA2NSwgNjUsIDc4LCA4MywgNjUsIDg5LCA2NSwgMTI4LCA4MiwgNjUsIDczLCA4MywgNzMsIDc4LCAxOTksIDgyLCA2NSwgNzMsIAotICAgIDgzLCA2OSwgMTk2LCA4MiwgNjUsIDczLCA3OCwgNjYsIDc5LCA4NywgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCA4OSwgCi0gICAgMTI4LCA4MiwgNjUsIDczLCA3NiwgODcsIDY1LCAyMTcsIDgyLCA2NSwgNzMsIDc2LCAxMjgsIDgyLCA2NSwgNzMsIDY4LCAKLSAgICAyMDcsIDgyLCA2NSwgNzMsIDY4LCA2NSwgMTI4LCA4MiwgNjUsIDcyLCA3NywgNjUsIDg0LCA4NSwgNzYsIDc2LCA2NSwgCi0gICAgMjAwLCA4MiwgNjUsIDcyLCAxMjgsIDgyLCA2NSwgNzAsIDY5LCAxMjgsIDgyLCA2NSwgNjksIDc3LCAxMjgsIDgyLCA2NSwgCi0gICAgNjgsIDczLCA3OSwgNjUsIDY3LCA4NCwgNzMsIDg2LCAxOTcsIDgyLCA2NSwgNjgsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDY4LCAKLSAgICA3MywgMjA3LCA4MiwgNjUsIDY4LCAyMDEsIDgyLCA2NSwgNjgsIDEyOCwgODIsIDY1LCAxOTYsIDgyLCA2NSwgNjcsIDgxLCAKLSAgICA4NSwgNjksIDIxMiwgODIsIDY1LCA2NywgNzMsIDc4LCA3MSwgMTI4LCA4MiwgNjUsIDY2LCA2NiwgNzMsIDg0LCAxMjgsIAotICAgIDgyLCA2NSwgNjYsIDY2LCA3MywgMjEyLCA4MiwgNjUsIDY2LCAxMjgsIDgyLCA2NSwgNjUsIDczLCAxMjgsIDgyLCA2NSwgCi0gICAgNTEsIDEyOCwgODIsIDY1LCA1MCwgMTI4LCA4MiwgNjUsIDQ1LCA1MCwgMTI4LCA4MiwgNDgsIDUwLCA1NywgMTI4LCA4MiwgCi0gICAgNDgsIDUwLCA1NiwgMTI4LCA4MiwgNDgsIDUwLCA1NSwgMTI4LCA4MiwgNDgsIDUwLCA1NCwgMTI4LCA4MiwgNDgsIDUwLCAKLSAgICA1MywgMTI4LCA4MiwgNDgsIDUwLCA1MiwgMTI4LCA4MiwgNDgsIDUwLCA1MSwgMTI4LCA4MiwgNDgsIDUwLCA1MCwgMTI4LCAKLSAgICA4MiwgNDgsIDUwLCA0OSwgMTI4LCA4MiwgNDgsIDUwLCA0OCwgMTI4LCA4MiwgNDgsIDQ5LCA1NywgMTI4LCA4MiwgNDgsIAotICAgIDQ5LCA1NiwgMTI4LCA4MiwgNDgsIDQ5LCA1NSwgMTI4LCA4MiwgNDgsIDQ5LCA1NCwgNjUsIDEyOCwgODIsIDQ4LCA0OSwgCi0gICAgNTQsIDEyOCwgODIsIDQ4LCA0OSwgNTMsIDEyOCwgODIsIDQ4LCA0OSwgNTIsIDEyOCwgODIsIDQ4LCA0OSwgNTEsIDEyOCwgCi0gICAgODIsIDQ4LCA0OSwgNTAsIDEyOCwgODIsIDQ4LCA0OSwgNDksIDEyOCwgODIsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDgyLCAKLSAgICA0OCwgNDksIDQ4LCAxMjgsIDgyLCA0OCwgNDgsIDU3LCAxMjgsIDgyLCA0OCwgNDgsIDU2LCAxMjgsIDgyLCA0OCwgNDgsIAotICAgIDU1LCAxMjgsIDgyLCA0OCwgNDgsIDU0LCAxMjgsIDgyLCA0OCwgNDgsIDUzLCAxMjgsIDgyLCA0OCwgNDgsIDUyLCAxMjgsIAotICAgIDgyLCA0OCwgNDgsIDUxLCA2NiwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgNjUsIDEyOCwgODIsIDQ4LCA0OCwgNTEsIDEyOCwgCi0gICAgODIsIDQ4LCA0OCwgNTAsIDY1LCAxMjgsIDgyLCA0OCwgNDgsIDUwLCAxMjgsIDgyLCA0OCwgNDgsIDQ5LCAxMjgsIDgyLCAKLSAgICA0NSwgNjcsIDgyLCA2OSwgMTk3LCA4MSwgODksIDg4LCAxMjgsIDgxLCA4OSwgODUsIDEyOCwgODEsIDg5LCA4NCwgMTI4LCAKLSAgICA4MSwgODksIDgyLCA4OCwgMTI4LCA4MSwgODksIDgyLCAxMjgsIDgxLCA4OSwgODAsIDEyOCwgODEsIDg5LCA3OSwgMTI4LCAKLSAgICA4MSwgODksIDczLCAxMjgsIDgxLCA4OSwgNjksIDY5LCAxMjgsIDgxLCA4OSwgNjksIDEyOCwgODEsIDg5LCA2NSwgNjUsIAotICAgIDEyOCwgODEsIDg5LCA2NSwgMTI4LCA4MSwgODksIDEyOCwgODEsIDg3LCA3MywgMTI4LCA4MSwgODcsIDY5LCA2OSwgMTI4LCAKLSAgICA4MSwgODcsIDY5LCAxMjgsIDgxLCA4NywgNjUsIDY1LCAxMjgsIDgxLCA4NywgNjUsIDEyOCwgODEsIDg1LCA4OCwgMTI4LCAKLSAgICA4MSwgODUsIDg2LCAxMjgsIDgxLCA4NSwgODUsIDg2LCAxMjgsIDgxLCA4NSwgODUsIDEyOCwgODEsIDg1LCA4NCwgMTI4LCAKLSAgICA4MSwgODUsIDgzLCA3MiwgODMsIDcyLCA2NSwgODksIDY1LCAxMjgsIDgxLCA4NSwgODIsIDg4LCAxMjgsIDgxLCA4NSwgODIsIAotICAgIDEyOCwgODEsIDg1LCA4MCwgMTI4LCA4MSwgODUsIDc5LCA4OCwgMTI4LCA4MSwgODUsIDc5LCA4NCwgMTk3LCA4MSwgODUsIAotICAgIDc5LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODEsIDg1LCA3OSwgODQsIDEyOCwgODEsIDg1LCA3OSwgODAsIDEyOCwgCi0gICAgODEsIDg1LCA3OSwgMTI4LCA4MSwgODUsIDc1LCAxMjgsIDgxLCA4NSwgNzMsIDc4LCA4NCwgNjksIDgzLCA4MywgNjksIDc4LCAKLSAgICA2NywgNjksIDEyOCwgODEsIDg1LCA3MywgNzgsIDY4LCA3MywgNjcsIDY5LCA4MywgNzMsIDc3LCAxOTMsIDgxLCA4NSwgNzMsIAotICAgIDc4LCA2NywgODUsIDc4LCA4OCwgMTI4LCA4MSwgODUsIDczLCA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgODEsIDg1LCA3MywgCi0gICAgNzYsIDc2LCAxMjgsIDgxLCA4NSwgNzMsIDY3LCAyMDMsIDgxLCA4NSwgNzMsIDEyOCwgODEsIDg1LCA3MCwgMTI4LCA4MSwgCi0gICAgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDY5LCAxOTYsIDgxLCA4NSwgNjksIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKLSAgICA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgMjA2LCA4MSwgODUsIDY5LCA2OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgNjksIAotICAgIDIwNiwgODEsIDg1LCA2OSwgMTI4LCA4MSwgODUsIDY2LCA4NSwgODQsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDg0LCA2OSwgCi0gICAgODIsIDc4LCA3MywgNzksIDIwNiwgODEsIDg1LCA2NSwgODIsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCAKLSAgICA4NCwgNjksIDgyLCAyMTEsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCAxMjgsIDgxLCA4NSwgNjUsIDgyLCA4NCwgNjksIAotICAgIDIxMCwgODEsIDg1LCA2NSwgNzgsIDg0LCA3MywgODQsIDIxNywgODEsIDg1LCA2NSwgNjgsIDgyLCA4NSwgODAsIDc2LCAKLSAgICAxOTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgNjUsIDc4LCA4NCwgMTI4LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCA3OCwgCi0gICAgMjEyLCA4MSwgODUsIDY1LCA2OCwgMTI4LCA4MSwgODUsIDY1LCAxOTYsIDgxLCA4NSwgNjUsIDEyOCwgODEsIDg1LCAxMjgsIAotICAgIDgxLCAyMDgsIDgxLCA3OSwgODgsIDEyOCwgODEsIDc5LCA4NCwgMTI4LCA4MSwgNzksIDgwLCA3MiwgMTI4LCA4MSwgNzksIAotICAgIDgwLCA2NSwgMTI4LCA4MSwgNzksIDgwLCAxMjgsIDgxLCA3OSwgNzksIDEyOCwgODEsIDc5LCAyMDcsIDgxLCA3OSwgNzAsIAotICAgIDEyOCwgODEsIDc5LCAxOTgsIDgxLCA3OSwgNjUsIDEyOCwgODEsIDc5LCAxMjgsIDgxLCA3OCwgMTI4LCA4MSwgNzMsIDg4LCAKLSAgICAxMjgsIDgxLCA3MywgODQsIDgzLCA2NSwgMTI4LCA4MSwgNzMsIDg0LCAxMjgsIDgxLCA3MywgODAsIDEyOCwgODEsIDczLCAKLSAgICA3MywgMTI4LCA4MSwgNzMsIDY5LCA4OCwgMTI4LCA4MSwgNzMsIDY5LCA4NCwgMTI4LCA4MSwgNzMsIDY5LCA4MCwgMTI4LCAKLSAgICA4MSwgNzMsIDY5LCAxMjgsIDgxLCA3MywgMTI4LCA4MSwgNzIsIDg3LCA3MywgMTI4LCA4MSwgNzIsIDg3LCA2OSwgNjksIAotICAgIDEyOCwgODEsIDcyLCA4NywgNjksIDEyOCwgODEsIDcyLCA4NywgNjUsIDY1LCAxMjgsIDgxLCA3MiwgODcsIDY1LCAxMjgsIAotICAgIDgxLCA3MiwgODUsIDEyOCwgODEsIDcyLCA3OSwgMTI4LCA4MSwgNzIsIDczLCAxMjgsIDgxLCA3MiwgNjksIDY5LCAxMjgsIAotICAgIDgxLCA3MiwgNjksIDEyOCwgODEsIDcyLCA2NSwgNjUsIDEyOCwgODEsIDcyLCA2NSwgMTI4LCA4MSwgNzEsIDY1LCAxMjgsIAotICAgIDgxLCA2OSwgODQsIDY1LCA3OCwgNjUsIDEyOCwgODEsIDY5LCA2OSwgMTI4LCA4MSwgNjksIDEyOCwgODEsIDY1LCA4NSwgCi0gICAgMTI4LCA4MSwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgODEsIDY1LCA4MiwgNzgsIDY5LCAyMTcsIDgxLCA2NSwgODIsIDEyOCwgCi0gICAgODEsIDY1LCA4MSwgMTI4LCA4MSwgNjUsIDgwLCA3MiwgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDgzLCAxMjgsIDgxLCAKLSAgICA2NSwgNzcsIDY1LCA4NCwgMjExLCA4MSwgNjUsIDc2LCAxOTMsIDgxLCA2NSwgNzMsIDgyLCA4NCwgNzIsIDgyLCA2NSwgCi0gICAgMTI4LCA4MSwgNjUsIDczLCAxMjgsIDgxLCA2NSwgNzAsIDEyOCwgODEsIDY1LCAxOTgsIDgxLCA2NSwgNjgsIDc3LCA2NSwgCi0gICAgMTI4LCA4MSwgNjUsIDY1LCA3MywgMTI4LCA4MSwgNjUsIDY1LCA3MCwgODUsIDEyOCwgODEsIDY1LCA2NSwgNzAsIDEyOCwgCi0gICAgODEsIDQ4LCA0OCwgNTUsIDEyOCwgODEsIDQ4LCA0OCwgNTQsIDEyOCwgODEsIDQ4LCA0OCwgNTMsIDEyOCwgODEsIDQ4LCAKLSAgICA0OCwgNTIsIDEyOCwgODEsIDQ4LCA0OCwgNTEsIDEyOCwgODEsIDQ4LCA0OCwgNTAsIDEyOCwgODEsIDQ4LCA0OCwgNDksIAotICAgIDEyOCwgODAsIDkwLCAxMjgsIDgwLCA4OSwgODgsIDEyOCwgODAsIDg5LCA4NCwgMTI4LCA4MCwgODksIDgyLCA4OCwgMTI4LCAKLSAgICA4MCwgODksIDgyLCAxMjgsIDgwLCA4OSwgODAsIDEyOCwgODAsIDg5LCAxMjgsIDgwLCA4NywgNzksIDg5LCAxMjgsIDgwLCAKLSAgICA4NywgNzksIDc5LCAxMjgsIDgwLCA4NywgNzksIDEyOCwgODAsIDg3LCAyMDcsIDgwLCA4NywgNzMsIDczLCAxMjgsIDgwLCAKLSAgICA4NywgNzMsIDEyOCwgODAsIDg3LCA2OSwgNjksIDEyOCwgODAsIDg3LCA2OSwgMTI4LCA4MCwgODcsIDY1LCA2NSwgMTI4LCAKLSAgICA4MCwgODcsIDEyOCwgODAsIDg2LCAxMjgsIDgwLCA4NSwgODgsIDEyOCwgODAsIDg1LCA4NSwgODQsIDEyOCwgODAsIDg1LCAKLSAgICA4NSwgMTI4LCA4MCwgODUsIDg0LCA4MiwgNjksIDcwLCA2NSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgODQsIAotICAgIDEyOCwgODAsIDg1LCAyMTIsIDgwLCA4NSwgODMsIDcyLCA4MCwgNzMsIDc4LCAxMjgsIDgwLCA4NSwgODMsIDcyLCA4MCwgCi0gICAgNzMsIDc1LCA2NSwgMTI4LCA4MCwgODUsIDgzLCA3MiwgNzMsIDc4LCAxOTksIDgwLCA4NSwgODIsIDg4LCAxMjgsIDgwLCAKLSAgICA4NSwgODIsIDgzLCA2OSwgMTI4LCA4MCwgODUsIDgyLCA4MCwgNzYsIDE5NywgODAsIDg1LCA4MiwgNzgsIDY1LCA3NywgNjUsIAotICAgIDEyOCwgODAsIDg1LCA4MiwgNzMsIDg0LCA4OSwgMTI4LCA4MCwgODUsIDgyLCA3MywgNzAsIDg5LCAxMjgsIDgwLCA4NSwgCi0gICAgODIsIDEyOCwgODAsIDg1LCA4MSwgMTI4LCA4MCwgODUsIDgwLCAxMjgsIDgwLCA4NSwgNzksIDg4LCAxMjgsIDgwLCA4NSwgCi0gICAgNzksIDgwLCAxMjgsIDgwLCA4NSwgNzksIDEyOCwgODAsIDg1LCA3OCwgNzEsIDY1LCA2NSwgNzcsIDEyOCwgODAsIDg1LCAKLSAgICA3OCwgNzEsIDEyOCwgODAsIDg1LCA3OCwgNjcsIDg0LCA4NSwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCA4NSwgNzgsIAotICAgIDY3LCA4NCwgODUsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4NSwgNzcsIDgwLCAxMjgsIDgwLCA4NSwgNzcsIDEyOCwgCi0gICAgODAsIDg1LCA2OSwgMTI4LCA4MCwgODUsIDY2LCA3NiwgNzMsIDE5NSwgODAsIDg1LCA2NSwgODEsIDEyOCwgODAsIDg1LCAKLSAgICA2NSwgNjksIDEyOCwgODAsIDg1LCA1MCwgMTI4LCA4MCwgODUsIDQ5LCAxMjgsIDgwLCA4NSwgMTI4LCA4MCwgODQsIDcyLCAKLSAgICA2NSwgNzIsIDE5MywgODAsIDg0LCA2OSwgMTI4LCA4MCwgODMsIDczLCA3NiwgMjAxLCA4MCwgODMsIDczLCA3MCwgNzMsIAotICAgIDgzLCA4NCwgNzksIDgzLCA4OSwgNzgsIDY1LCA3MSwgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgODMsIDg0LCAKLSAgICA3OSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIDY1LCAxMjgsIDgwLCA4MywgNzMsIDcwLCA3MywgCi0gICAgODMsIDg0LCA3OSwgMjA2LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDc2LCA4OSwgNzEsIDczLCA4MywgNzcsIAotICAgIDY1LCAxMjgsIDgwLCA4MywgNzMsIDEyOCwgODAsIDgzLCAxMjgsIDgwLCA4MiwgNzksIDg2LCA2OSwgMTI4LCA4MCwgODIsIAotICAgIDc5LCA4NCwgNzksIDg2LCA2NSwgODIsIDg5LCAyMTEsIDgwLCA4MiwgNzksIDg0LCA3OSwgMjExLCA4MCwgODIsIDc5LCA4NCwgCi0gICAgNjksIDY3LCA4NCwgNjksIDE5NiwgODAsIDgyLCA3OSwgODMsIDcxLCA2OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA2OSwgNzgsIAotICAgIDczLCAxMjgsIDgwLCA4MiwgNzksIDgwLCA3OSwgODIsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCA4MCwgODIsIDc5LCA4MCwgCi0gICAgNzksIDgyLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODIsIDc5LCA4MCwgNjksIDgyLCA4NCwgMjE3LCA4MCwgODIsIDc5LCAKLSAgICA4MCwgNjksIDc2LCA3NiwgNjksIDIxMCwgODAsIDgyLCA3OSwgNzksIDcwLCAxMjgsIDgwLCA4MiwgNzksIDc2LCA3OSwgNzgsIAotICAgIDcxLCA2OSwgMTk2LCA4MCwgODIsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxOTcsIDgwLCA4MiwgNzksIDc0LCA2OSwgCi0gICAgNjcsIDg0LCA3MywgODYsIDY5LCAxMjgsIDgwLCA4MiwgNzksIDc0LCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDgwLCAKLSAgICA4MiwgNzksIDcxLCA4MiwgNjksIDgzLCA4MywgMTI4LCA4MCwgODIsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDgwLCA4MiwgNzksIAotICAgIDcwLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA4MCwgODIsIDc5LCA2OCwgODUsIDY3LCA4NCwgMTI4LCA4MCwgODIsIDc5LCA2OCwgCi0gICAgODUsIDY3LCAyMTIsIDgwLCA4MiwgNzMsIDg2LCA2NSwgODQsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDg2LCA2NSwgODQsIAotICAgIDE5NywgODAsIDgyLCA3MywgODYsIDY1LCA2NywgMjE3LCA4MCwgODIsIDczLCA4MywgNzIsIDg0LCA3MiwgNjUsIDc3LCA2NSwgCi0gICAgODQsIDgyLCAxOTMsIDgwLCA4MiwgNzMsIDc4LCA4NCwgODMsIDEyOCwgODAsIDgyLCA3MywgNzgsIDg0LCAxMjgsIDgwLCAKLSAgICA4MiwgNzMsIDc4LCAyMTIsIDgwLCA4MiwgNzMsIDc4LCA2NywgNjksIDgzLCA4MywgMTI4LCA4MCwgODIsIDczLCA3NywgNjksIAotICAgIDEyOCwgODAsIDgyLCA3MywgNzcsIDE5NywgODAsIDgyLCA2OSwgODYsIDczLCA3OSwgODUsIDIxMSwgODAsIDgyLCA2OSwgCi0gICAgODMsIDY5LCA4NCwgMTI4LCA4MCwgODIsIDY5LCA4MywgNjksIDc4LCA4NCwgNjUsIDg0LCA3MywgNzksIDIwNiwgODAsIDgyLCAKLSAgICA2OSwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgwLCA3OSwgNzgsIDY4LCA2OSwgCi0gICAgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDc4LCA3NSwgNzIsIDY1LCAxMjgsIDgwLCA4MiwgNjksIDcwLCAKLSAgICA2NSwgNjcsIDE5NywgODAsIDgyLCA2OSwgNjcsIDczLCA4MCwgNzMsIDg0LCA2NSwgODQsIDY5LCAxMjgsIDgwLCA4MiwgNjksIAotICAgIDY3LCA2OSwgNjgsIDczLCA3OCwgMTk5LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA2OSwgODMsIDEyOCwgODAsIDgyLCA2OSwgCi0gICAgNjcsIDY5LCA2OCwgNjksIDIxMSwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgNjksIDE5NiwgODAsIDgyLCA2OSwgNjcsIDY5LCAKLSAgICA2OCwgNjksIDEyOCwgODAsIDgyLCA2OSwgNjcsIDY5LCA2OCwgMTk3LCA4MCwgODIsIDY1LCA3NywgNDUsIDgwLCA3MywgNzMsIAotICAgIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDIwMSwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIDc5LCA4OSwgCi0gICAgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDc3LCA4NSwgNzksIDIxNywgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgODUsIDc5LCAKLSAgICA3OCwgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCA4NSwgNzksIDIwNiwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgNjksIAotICAgIDczLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCAyMDEsIDgwLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA4MiwgCi0gICAgNjUsIDIwNSwgODAsIDgyLCAxMjgsIDgwLCA4MCwgODYsIDEyOCwgODAsIDgwLCA3NywgMTI4LCA4MCwgODAsIDY1LCAxMjgsIAotICAgIDgwLCA3OSwgODksIDEyOCwgODAsIDc5LCA4OCwgMTI4LCA4MCwgNzksIDg3LCA2OSwgODIsIDIxMSwgODAsIDc5LCA4NywgCi0gICAgNjksIDgyLCAxMjgsIDgwLCA3OSwgODcsIDY4LCA2OSwgODIsIDY5LCAxOTYsIDgwLCA3OSwgODcsIDY4LCA2OSwgODIsIAotICAgIDEyOCwgODAsIDc5LCA4NSwgNzgsIDE5NiwgODAsIDc5LCA4NSwgNzYsIDg0LCA4MiwgMjE3LCA4MCwgNzksIDg1LCA2NywgCi0gICAgNzIsIDEyOCwgODAsIDc5LCA4NCwgNjUsIDg0LCA3OSwgMTI4LCA4MCwgNzksIDg0LCA2NSwgNjYsIDc2LCAxOTcsIDgwLCAKLSAgICA3OSwgMjEyLCA4MCwgNzksIDgzLCA4NCwgODAsIDc5LCA4MywgNzMsIDg0LCA3MywgNzksIDIwNiwgODAsIDc5LCA4MywgODQsIAotICAgIDY2LCA3OSwgODgsIDEyOCwgODAsIDc5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA3OSwgODMsIDg0LCAxMjgsIDgwLCA3OSwgCi0gICAgODMsIDIxMiwgODAsIDc5LCA4MywgODMsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgODAsIDc5LCA4MiwgODIsIDY5LCAKLSAgICA2NywgODQsIDg1LCA4MywgMTI4LCA4MCwgNzksIDgyLCA4MiwgNjksIDY3LCA4NCwgODUsIDIxMSwgODAsIDc5LCA4MCwgODAsIAotICAgIDY5LCA4MiwgMTI4LCA4MCwgNzksIDgwLCAxMjgsIDgwLCA3OSwgMjA4LCA4MCwgNzksIDc5LCA2OCwgNzYsIDY5LCAxMjgsIAotICAgIDgwLCA3OSwgNzksIDEyOCwgODAsIDc5LCA3OCwgNjgsIDc5LCAxMjgsIDgwLCA3OSwgMjA2LCA4MCwgNzksIDc3LCA3NywgCi0gICAgNjksIDY5LCAxMjgsIDgwLCA3OSwgNzcsIDc3LCA2OSwgMTk3LCA4MCwgNzksIDc2LCA3MywgODMsIDcyLCAxMjgsIDgwLCAKLSAgICA3OSwgNzYsIDczLCA2NywgMTk3LCA4MCwgNzksIDc2LCAyMDEsIDgwLCA3OSwgNzYsIDY5LCAxMjgsIDgwLCA3OSwgNzYsIAotICAgIDE5NywgODAsIDc5LCA3NSwgODIsIDg5LCA4NCwgNzMsIDY5LCAxMjgsIDgwLCA3OSwgNzUsIDc5LCA3NCwgNzMsIDEyOCwgCi0gICAgODAsIDc5LCA3MywgNzgsIDg0LCAyMTEsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzksIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCAKLSAgICA2OSwgODIsIDEyOCwgODAsIDc5LCA3MywgNzgsIDg0LCA2OSwgMTk2LCA4MCwgNzksIDczLCA3OCwgODQsIDEyOCwgODAsIAotICAgIDc5LCA3MywgNzgsIDIxMiwgODAsIDc5LCA2OSwgODQsIDgyLCAyMTcsIDgwLCA3OSwgNjksIDg0LCA3MywgMTk1LCA4MCwgCi0gICAgNzksIDY4LCA2NSwgODQsIDg1LCA4MywgMTI4LCA4MCwgNzksIDY1LCAxMjgsIDgwLCA3OSwgMTI4LCA4MCwgMjA3LCA4MCwgCi0gICAgNzgsIDY5LCA4NSwgNzcsIDY1LCA4NCwgNjUsIDEyOCwgODAsIDc2LCA4NSwgODQsIDc5LCAxMjgsIDgwLCA3NiwgODUsIDgzLCAKLSAgICA0NSwgNzcsIDczLCA3OCwgODUsIDIxMSwgODAsIDc2LCA4NSwgODMsIDEyOCwgODAsIDc2LCA4NSwgODIsIDY1LCA3NiwgCi0gICAgMTI4LCA4MCwgNzYsIDg1LCA3NywgNjksIDE5NiwgODAsIDc2LCA4NSwgNzcsIDEyOCwgODAsIDc2LCA4NSwgNzUsIDEyOCwgCi0gICAgODAsIDc2LCA4NSwgNzEsIDEyOCwgODAsIDc2LCA4NSwgMTI4LCA4MCwgNzYsIDc5LCA4NywgMTI4LCA4MCwgNzYsIDc5LCAKLSAgICA4MCwgNzIsIDg1LCAxMjgsIDgwLCA3NiwgNjksIDg0LCA3MiwgODIsIDc5LCA3OCwgMTI4LCA4MCwgNzYsIDY4LCAxMjgsIAotICAgIDgwLCA3NiwgNjUsIDg5LCA3MywgNzgsIDE5OSwgODAsIDc2LCA2NSwgODMsIDg0LCA3MywgNjcsIDgzLCAxMjgsIDgwLCA3NiwgCi0gICAgNjUsIDc4LCA2OSwgMTI4LCA4MCwgNzYsIDY1LCA3OCwgMTk3LCA4MCwgNzYsIDY1LCA3OCwgNjcsIDIwMywgODAsIDc2LCAKLSAgICA2NSwgNzUsIDEyOCwgODAsIDc2LCA2NSwgNzEsIDczLCA3OSwgMjExLCA4MCwgNzYsIDY1LCA2NywgNjksIDcyLCA3OSwgNzYsIAotICAgIDY4LCA2OSwgMjEwLCA4MCwgNzYsIDY1LCA2NywgMTk3LCA4MCwgNzYsIDY1LCAxMjgsIDgwLCA3MywgOTAsIDkwLCA3MywgCi0gICAgNjcsIDY1LCA4NCwgNzksIDEyOCwgODAsIDczLCA5MCwgOTAsIDY1LCAxMjgsIDgwLCA3MywgODgsIDEyOCwgODAsIDczLCAKLSAgICA4NywgODIsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCA3MCwgNzksIDgyLCA3NSwgMTI4LCA4MCwgNzMsIDg0LCA2NywgNzIsIAotICAgIDcwLCA3OSwgODIsIDIwMywgODAsIDczLCA4NCwgMTI4LCA4MCwgNzMsIDgzLCA4NCwgNzksIDc2LCAxMjgsIDgwLCA3MywgCi0gICAgODMsIDY5LCA3NiwgNjksIDcyLCAxMjgsIDgwLCA3MywgODMsIDY3LCA2OSwgODMsIDEyOCwgODAsIDczLCA4MiwgNzMsIDcxLCAKLSAgICAxMjgsIDgwLCA3MywgODIsIDczLCAxOTksIDgwLCA3MywgODIsIDczLCA2OSwgNjksIDc4LCAxMjgsIDgwLCA3MywgODAsIAotICAgIDczLCA3OCwgNzEsIDEyOCwgODAsIDczLCA4MCwgNjUsIDY5LCA3NywgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDgwLCA3MywgCi0gICAgODAsIDY1LCA2OSwgNzcsIDY2LCA2NSwgMTI4LCA4MCwgNzMsIDgwLCAxMjgsIDgwLCA3MywgNzgsIDg3LCA3MiwgNjksIDY5LCAKLSAgICAyMDQsIDgwLCA3MywgNzgsIDY5LCA2NSwgODAsIDgwLCA3NiwgNjksIDEyOCwgODAsIDczLCA3OCwgMTk3LCA4MCwgNzMsIAotICAgIDc4LCA2NSwgODIsIDY2LCA3OSwgODIsIDY1LCA4MywgMTI4LCA4MCwgNzMsIDc2LCA3NiwgMTI4LCA4MCwgNzMsIDc2LCAKLSAgICAxOTcsIDgwLCA3MywgNzYsIDY3LCA4MiwgNzksIDIxNSwgODAsIDczLCA3NSwgODUsIDgyLCA4NSwgMTI4LCA4MCwgNzMsIAotICAgIDc1LCA3OSwgMTI4LCA4MCwgNzMsIDcxLCAxMjgsIDgwLCA3MywgMTk5LCA4MCwgNzMsIDY5LCA4OCwgMTI4LCA4MCwgNzMsIAotICAgIDY5LCA4NSwgODAsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCAKLSAgICA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCAKLSAgICA3MywgNzksIDgzLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIAotICAgIDc5LCA4MywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgNzMsIDY5LCAKLSAgICA4NSwgNzYsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MiwgCi0gICAgNzMsIDY5LCA4NSwgNzYsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDgwLCAKLSAgICA3MywgNjksIDg1LCA4MCwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NSwgCi0gICAgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIAotICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgODAsIDczLCA2OSwgCi0gICAgODUsIDIwOCwgODAsIDczLCA2OSwgODQsIDEyOCwgODAsIDczLCA2OSwgODAsIDEyOCwgODAsIDczLCA2OSwgNjksIDg0LCAKLSAgICAxMjgsIDgwLCA3MywgNjksIDY5LCA4MSwgMTI4LCA4MCwgNzMsIDY5LCA2NywgNjksIDEyOCwgODAsIDczLCA2OSwgMTI4LCAKLSAgICA4MCwgNzMsIDY3LCA3NSwgNjksIDg0LCAxMjgsIDgwLCA3MywgNjcsIDc1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCA4NSwgODQsIAotICAgIDc5LCA4MiwgODUsIDEyOCwgODAsIDczLCA2NSwgODMsIDc3LCAxOTMsIDgwLCA3MywgNjUsIDc4LCA3OSwgMTI4LCA4MCwgCi0gICAgMjAxLCA4MCwgNzIsIDg3LCA2NSwgMTI4LCA4MCwgNzIsIDg1LCA4NCwgNzIsIDY1LCA3OSwgMTI4LCA4MCwgNzIsIDg1LCAKLSAgICAyMTAsIDgwLCA3MiwgODUsIDc4LCA3MSwgMTI4LCA4MCwgNzIsIDgyLCA2NSwgODMsIDY5LCAxMjgsIDgwLCA3MiwgNzksIAotICAgIDc4LCA2OSwgODMsIDEyOCwgODAsIDcyLCA3OSwgNjksIDc4LCA3MywgNjcsIDczLCA2NSwgMjA2LCA4MCwgNzIsIDc5LCA2NSwgCi0gICAgMTI4LCA4MCwgNzIsIDc5LCAxMjgsIDgwLCA3MiwgMjA3LCA4MCwgNzIsIDc4LCA2NSwgNjksIDIwMywgODAsIDcyLCA3MywgCi0gICAgNzgsIDg0LCA3MiwgODUsIDEyOCwgODAsIDcyLCA3MywgNzYsIDc5LCA4MywgNzksIDgwLCA3MiwgNjksIDgyLCAyMTEsIDgwLCAKLSAgICA3MiwgNzMsIDc2LCA3MywgODAsIDgwLCA3MywgNzgsIDE5NywgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4NCwgCi0gICAgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDgzLCA3MywgNzksIAotICAgIDgzLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA3MiwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIAotICAgIDIwMCwgODAsIDcyLCA3MywgMTI4LCA4MCwgNzIsIDIwMSwgODAsIDcyLCA2OSwgNjksIDEyOCwgODAsIDcyLCA2OSwgMTI4LCAKLSAgICA4MCwgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTgsIDgwLCA3MiwgNjUsIDgzLCA2OSwgNDUsIDE5NCwgODAsIDcyLCA2NSwgODIsIAotICAgIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA4MCwgNzIsIDY1LCA4MiwgMTI4LCA4MCwgNzIsIDY1LCA3OCwgMTI4LCA4MCwgCi0gICAgNzIsIDY1LCA3NywgMTI4LCA4MCwgNzIsIDY1LCA3MywgODMsIDg0LCA3OSwgMjExLCA4MCwgNzIsIDY1LCA3MSwgODMsIDQ1LCAKLSAgICA4MCwgMTkzLCA4MCwgNzIsIDY1LCA2NSwgODIsIDc1LCA2NSwgNjUsIDEyOCwgODAsIDcyLCA2NSwgNjUsIDEyOCwgODAsIAotICAgIDcyLCA2NSwgMTI4LCA4MCwgNzEsIDEyOCwgODAsIDcwLCAxMjgsIDgwLCA2OSwgODUsIDg4LCAxMjgsIDgwLCA2OSwgODUsIAotICAgIDg0LCA2NSwgNjksIDEyOCwgODAsIDY5LCA4NSwgODQsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzksIDc1LCA3OSwgCi0gICAgODUsIDcwLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCA2NSwgODMsIDg0LCA3MywgMTI4LCA4MCwgNjksIDg0LCAKLSAgICA2NSwgODMsIDc3LCA2NSwgMTI4LCA4MCwgNjksIDg0LCA2NSwgNzYsIDc2LCA2OSwgMTk2LCA4MCwgNjksIDgzLCA3OSwgCi0gICAgMTI4LCA4MCwgNjksIDgzLCAyMDcsIDgwLCA2OSwgODMsIDcyLCA1MCwgMTI4LCA4MCwgNjksIDgzLCA2OSwgODQsIDE5MywgCi0gICAgODAsIDY5LCAyMTEsIDgwLCA2OSwgODIsIDg0LCA3MiwgMjA3LCA4MCwgNjksIDgyLCA4MywgODAsIDY5LCA2NywgODQsIDczLCAKLSAgICA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDY5LCA4MiwgODMsIDc5LCA3OCwgCi0gICAgMTI4LCA4MCwgNjksIDgyLCA4MywgNzksIDIwNiwgODAsIDY5LCA4MiwgODMsIDczLCA2NSwgMjA2LCA4MCwgNjksIDgyLCAKLSAgICA4MywgNjksIDg2LCA2OSwgODIsIDczLCA3OCwgMTk5LCA4MCwgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgCi0gICAgNzYsIDY1LCA4MiwgMTI4LCA4MCwgNjksIDgyLCA4MCwgNjksIDc4LCA2OCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDgwLCAKLSAgICA2OSwgODIsIDc3LCA3MywgODQsIDg0LCA2OSwgMTk2LCA4MCwgNjksIDgyLCA3NywgNjUsIDc4LCA2OSwgNzgsIDIxMiwgODAsIAotICAgIDY5LCA4MiwgNzMsIDgzLCA4MCwgNzksIDc3LCA2OSwgNzgsIDczLCAxMjgsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCAKLSAgICA3NywgNjksIDc4LCAyMDEsIDgwLCA2OSwgODIsIDcwLCA3OSwgODIsIDc3LCA3MywgNzgsIDE5OSwgODAsIDY5LCA4MiwgNzAsIAotICAgIDY5LCA2NywgODQsIDg1LCAyMDUsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA2NSwgMTI4LCA4MCwgNjksIDgyLCA3MCwgCi0gICAgNjksIDY3LCA4NCwgMTkzLCA4MCwgNjksIDgyLCA2NywgODUsIDgzLCA4MywgNzMsIDg2LCA2OSwgMTI4LCA4MCwgNjksIDgyLCAKLSAgICA2NywgNjksIDc4LCAyMTIsIDgwLCA2OSwgODAsIDY5LCA4NCwgMTI4LCA4MCwgNjksIDgwLCA2OSwgMjEyLCA4MCwgNjksIAotICAgIDc5LCA4MiwgODQsIDIwMCwgODAsIDY5LCA3OSwgODAsIDc2LCA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDgzLCA2OSwgCi0gICAgNzcsIDY5LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgNzEsIDgyLCA2NSwgNzcsIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCAKLSAgICA3MSwgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDgzLCA4NSwgMTI4LCA4MCwgNjksIDc4LCA4MywgNzMsIDg2LCAxOTcsIAotICAgIDgwLCA2OSwgNzgsIDc4LCAyMTcsIDgwLCA2OSwgNzgsIDczLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDg1LCA3MywgCi0gICAgNzgsIDEyOCwgODAsIDY5LCA3OCwgNzEsIDc1LCA2NSwgNzYsIDEyOCwgODAsIDY5LCA3OCwgNjksIDg0LCA4MiwgNjUsIDg0LCAKLSAgICA3MywgNzksIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDY3LCA3MywgNzYsIDEyOCwgODAsIDY5LCA3NiwgNjUsIDgzLCA4NCwgNzksIAotICAgIDc4LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCAyMDYsIDgwLCA2OSwgNzMsIDg0LCA3MiwgMTI4LCA4MCwgCi0gICAgNjksIDcyLCA2OSwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIDIwMCwgODAsIDY5LCA3MiwgMTI4LCA4MCwgNjksIDIwMCwgCi0gICAgODAsIDY5LCA2OSwgOTAsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgzLCA3MiwgNzMsIDEyOCwgODAsIDY5LCA2OSwgODAsIAotICAgIDEyOCwgODAsIDY5LCA2OSwgNzcsIDEyOCwgODAsIDY5LCA2OSwgMTI4LCA4MCwgNjksIDY4LCA2OSwgODMsIDg0LCA4MiwgCi0gICAgNzMsIDY1LCA3OCwgODMsIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgODIsIDczLCA2NSwgNzgsIDEyOCwgODAsIDY5LCAKLSAgICA2OCwgNjksIDgzLCA4NCwgNjUsIDc2LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDY1LCAyMDQsIDgwLCA2OSwgNjgsIAotICAgIDY1LCAyMDQsIDgwLCA2OSwgNjUsIDY3LCA3MiwgMTI4LCA4MCwgNjksIDY1LCA2NywgNjksIDEyOCwgODAsIDY5LCA2NSwgCi0gICAgNjcsIDE5NywgODAsIDY4LCA3MCwgMTI4LCA4MCwgNjgsIDEyOCwgODAsIDY3LCAxMjgsIDgwLCA2NSwgOTAsIDY5LCA4MiwgCi0gICAgMTI4LCA4MCwgNjUsIDg5LCA2OSwgODIsIDc5LCA3NSwgMTI4LCA4MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCAKLSAgICA4MCwgNjUsIDg5LCAxMjgsIDgwLCA2NSwgODgsIDEyOCwgODAsIDY1LCA4NywgNzgsIDEyOCwgODAsIDY1LCAyMTUsIDgwLCAKLSAgICA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgMTI4LCA4MCwgNjUsIDg1LCAxMjgsIDgwLCA2NSwgODQsIDg0LCA2OSwgODIsIAotICAgIDc4LCAxMjgsIDgwLCA2NSwgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDgwLCA2NSwgODQsIDIwMCwgCi0gICAgODAsIDY1LCA4NCwgNjUsIDc1LCAxMjgsIDgwLCA2NSwgODQsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDg0LCAxMjgsIDgwLCAKLSAgICA2NSwgODMsIDg1LCA4MSwgMTI4LCA4MCwgNjUsIDgzLCA4MywgODAsIDc5LCA4MiwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIAotICAgIDg2LCA2OSwgNDUsIDgwLCA4NSwgNzYsIDc2LCA0NSwgODUsIDgwLCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDgwLCAKLSAgICA2NSwgODMsIDgzLCA3MywgODYsIDY5LCA0NSwgODAsIDg1LCA3NiwgNzYsIDQ1LCA2OCwgNzksIDg3LCA3OCwgNDUsIDc5LCAKLSAgICA4NSwgODQsIDgwLCA4NSwgMjEyLCA4MCwgNjUsIDgzLCA3MiwgODQsIDY1LCAxMjgsIDgwLCA2NSwgODMsIDcyLCA2NSwgNjksIAotICAgIDEyOCwgODAsIDY1LCA4MywgNjksIDgxLCAxMjgsIDgwLCA2NSwgODMsIDY1LCA3OCwgNzEsIDY1LCAyMDYsIDgwLCA2NSwgCi0gICAgODIsIDg1LCA3NywgMTI4LCA4MCwgNjUsIDgyLCA4NCwgMjE3LCA4MCwgNjUsIDgyLCA4NCwgNzgsIDY5LCA4MiwgODMsIDcyLCAKLSAgICA3MywgMjA4LCA4MCwgNjUsIDgyLCA4NCwgNzMsIDY1LCA3NiwgNzYsIDg5LCA0NSwgODIsIDY5LCA2NywgODksIDY3LCA3NiwgCi0gICAgNjksIDE5NiwgODAsIDY1LCA4MiwgODQsIDczLCA2NSwgMjA0LCA4MCwgNjUsIDgyLCA4NCwgNzIsIDczLCA2NSwgMjA2LCAKLSAgICA4MCwgNjUsIDgyLCAyMTIsIDgwLCA2NSwgODIsIDczLCA2NywgNzIsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgODMsIAotICAgIDg0LCA3MywgNzEsIDc3LCA2OSwgNzgsIDc5LCAyMDYsIDgwLCA2NSwgODIsIDY5LCA4MiwgNjksIDc4LCAxMjgsIDgwLCA2NSwgCi0gICAgODIsIDY5LCA3OCwgODQsIDcyLCA2OSwgODMsIDczLCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIAotICAgIDgzLCA3MywgMjExLCA4MCwgNjUsIDgyLCA2NSwgODAsIDcyLCA4MiwgNjUsIDgzLCAxOTcsIDgwLCA2NSwgODIsIDY1LCA3NiwgCi0gICAgNzYsIDY5LCA3NiwgNzksIDcxLCA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCA3NiwgMTI4LCAKLSAgICA4MCwgNjUsIDgyLCA2NSwgNzYsIDc2LCA2OSwgMjA0LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDc2LCA3MywgODQsIDczLCA3NSwgCi0gICAgNzMsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDIwMSwgODAsIDY1LCA4MiwgNjUsIDc1LCAKLSAgICA2NSwgNzYsIDY5LCA4MywgNzcsIDE5MywgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzksIDgzLCAxMjgsIAotICAgIDgwLCA2NSwgODIsIDY1LCA3MSwgODIsIDY1LCA4MCwgNzIsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCAKLSAgICAyMDAsIDgwLCA2NSwgODIsIDY1LCAxMjgsIDgwLCA2NSwgODIsIDEyOCwgODAsIDY1LCA4MCwgODksIDgyLCA4NSwgODMsIAotICAgIDEyOCwgODAsIDY1LCA4MCwgNjksIDgyLCA2NywgNzYsIDczLCA4MCwgMTI4LCA4MCwgNjUsIDgwLCA2OSwgMjEwLCA4MCwgCi0gICAgNjUsIDgwLCAxMjgsIDgwLCA2NSwgMjA4LCA4MCwgNjUsIDIwNywgODAsIDY1LCA3OCwgODksIDg1LCA3NSwgODUsIDEyOCwgCi0gICAgODAsIDY1LCA3OCwgODksIDczLCA3NSwgODUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY5LCA2NywgNjksIDc1LCAxMjgsIDgwLCAKLSAgICA2NSwgNzgsIDg5LCA2NSwgNzgsIDcxLCA3MSwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY1LCA3NSwgODIsIDY1LCAxMjgsIAotICAgIDgwLCA2NSwgNzgsIDg0LCA3MywgMTI4LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCAKLSAgICA4MCwgMTI4LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgwLCA2NSwgNzgsIDc5LCA3OCwgNzEsIDc5LCA3OCwgNjUsIDc4LCAxMjgsIDgwLCAKLSAgICA2NSwgNzgsIDc5LCA3NiwgNzksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODcsIDczLCA4MywgNjUsIDY4LCAxMjgsIAotICAgIDgwLCA2NSwgNzgsIDcxLCA4MiwgNjUsIDc4LCA3MSwgNzUsIDY5LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzksIDc2LCAKLSAgICA2NSwgODQsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgNjUsIAotICAgIDg5LCA2NSwgODIsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc1LCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc1LCA2NSwgCi0gICAgODQsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDcyLCA4NSwgNzYsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCAxMjgsIDgwLCAKLSAgICA2NSwgNzgsIDY5LCA4NSwgNzYsIDY5LCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY4LCAxOTMsIDgwLCA2NSwgNzgsIAotICAgIDY1LCA2OSwgNzYsIDY1LCA2OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3NywgODUsIDc4LCA3MSwgCi0gICAgNzUsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDc3LCA4NSwgNjgsIDgwLCA3OSwgNjgsIDEyOCwgODAsIDY1LCA3NywgODMsIDcyLCAKLSAgICA2NSwgNjksIDEyOCwgODAsIDY1LCA3NywgODAsIDcyLCA4OSwgNzYsIDczLCA2NSwgMjA2LCA4MCwgNjUsIDc3LCA3MywgNzgsIAotICAgIDcxLCA3NSwgNjUsIDc2LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA4MCwgNjksIDg0LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA3OCwgCi0gICAgNjksIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc3LCA2NSwgNjgsIDY1LCAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2NSwgNjksIDcyLCAKLSAgICAxMjgsIDgwLCA2NSwgNzYsIDg1LCA4NCwgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzksIDY3LCA3MiwgNzUsIDY1LCAxMjgsIAotICAgIDgwLCA2NSwgNzYsIDIwNSwgODAsIDY1LCA3NiwgNzYsIDY1LCA4NywgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzYsIDY1LCA4MywgCi0gICAgMTI4LCA4MCwgNjUsIDc2LCA2OSwgODQsIDg0LCA2OSwgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODUsIDc4LCAxOTksIDgwLCAKLSAgICA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgOTAsIDY5LCAxOTYsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgCi0gICAgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCAyMDQsIDgwLCA2NSwgNzUsIDgwLCAKLSAgICA2NSwgMjAzLCA4MCwgNjUsIDczLCA4OSwgNjUsIDc4LCA3OCwgNzksIDczLCAxMjgsIDgwLCA2NSwgNzMsIDgyLCA4NCwgNzIsIAotICAgIDgyLCA2NSwgMTI4LCA4MCwgNjUsIDczLCA4MiwgNjksIDE5NiwgODAsIDY1LCA3MywgMTI4LCA4MCwgNjUsIDcyLCA3NiwgCi0gICAgNjUsIDg2LCAyMDEsIDgwLCA2NSwgNzIsIDEyOCwgODAsIDY1LCA3MSwgNjksIDgyLCAxMjgsIDgwLCA2NSwgNzEsIDE5NywgCi0gICAgODAsIDY1LCA2OCwgNzcsIDE5MywgODAsIDY1LCA2OCwgNjgsIDczLCA3OCwgMTk5LCA4MCwgNjUsIDY4LCAxOTMsIDgwLCAKLSAgICA2NSwgNjgsIDEyOCwgODAsIDY1LCA2NywgNzUsIDczLCA3OCwgNzEsIDEyOCwgODAsIDY1LCA2NywgNzUsIDY1LCA3MSwgNjksIAotICAgIDEyOCwgODAsIDY1LCA2NSwgODQsIDg1LCAxMjgsIDgwLCA2NSwgNjUsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MCwgCi0gICAgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDgwLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA2NSwgNjUsIDczLCAxMjgsIDgwLCAKLSAgICA2NSwgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgODAsIDY1LCA2NSwgMTI4LCA4MCwgNTAsIDEyOCwgODAsIAotICAgIDQ4LCA0OSwgNDksIDEyOCwgODAsIDQ4LCA0OSwgNDgsIDEyOCwgODAsIDQ4LCA0OCwgNTcsIDEyOCwgODAsIDQ4LCA0OCwgCi0gICAgNTYsIDEyOCwgODAsIDQ4LCA0OCwgNTUsIDEyOCwgODAsIDQ4LCA0OCwgNTQsIDEyOCwgODAsIDQ4LCA0OCwgNTMsIDEyOCwgCi0gICAgODAsIDQ4LCA0OCwgNTIsIDEyOCwgODAsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDUxLCAxMjgsIDgwLCAKLSAgICA0OCwgNDgsIDUwLCAxMjgsIDgwLCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgODksIAotICAgIDgyLCA2NSwgNzgsIDczLCA4MywgNzcsIDE5MywgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgODgsIDczLCA2NSwgCi0gICAgMTI4LCA3OSwgODgsIDczLCAxOTMsIDc5LCA4OCwgNjksIDczLCA2NSwgMjAxLCA3OSwgODgsIDY5LCA3MywgMTkzLCA3OSwgCi0gICAgODYsIDY5LCA4MiwgODIsIDczLCA2OCwgNjksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA3OSwgNzgsIDE5OSwgNzksIDg2LCAKLSAgICA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDg5LCAxMjgsIDc5LCA4NiwgNjksIAotICAgIDgyLCA3NiwgNjUsIDgwLCA4MCwgNzMsIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDczLCA2OCwgMTI4LCA3OSwgCi0gICAgODYsIDY5LCA4MiwgNjYsIDY1LCA4MiwgMTI4LCA3OSwgODYsIDY1LCAyMDQsIDc5LCA4NiwgMTI4LCA3OSwgODUsIDg0LCAKLSAgICA3NiwgNzMsIDc4LCA2OSwgMTk2LCA3OSwgODUsIDg0LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODUsIDg0LCA2OSwgCi0gICAgMjEwLCA3OSwgODUsIDg0LCA2NiwgNzksIDIxNiwgNzksIDg1LCA3OCwgNzUsIDczLCAxOTMsIDc5LCA4NSwgNzgsIDY3LCAKLSAgICA2OSwgMTI4LCA3OSwgODUsIDc4LCA2NywgMTk3LCA3OSwgODQsIDg1LCAxMjgsIDc5LCA4NCwgODQsIDY1LCA4NiwgMTkzLCAKLSAgICA3OSwgODQsIDg0LCAxMjgsIDc5LCA4NCwgNzIsIDY1LCA3NiwgNjUsIDIwNiwgNzksIDg0LCA3MiwgNjUsIDc2LCAxMjgsIAotICAgIDc5LCA4MywgNzcsIDY1LCA3OCwgODksIDE5MywgNzksIDgzLCA2NywgMTI4LCA3OSwgODIsIDg0LCA3MiwgNzksIDcxLCA3OSwgCi0gICAgNzgsIDY1LCAyMDQsIDc5LCA4MiwgODQsIDcyLCA3OSwgNjgsIDc5LCAyMTYsIDc5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCAKLSAgICA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDIxMiwgNzksIAotICAgIDgyLCA3NSwgNzIsIDc5LCAyMDYsIDc5LCA4MiwgNzMsIDcxLCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNzMsIDcxLCA3MywgCi0gICAgNzgsIDEyOCwgNzksIDgyLCA2OSwgNDUsIDUwLCAxMjgsIDc5LCA4MiwgNjgsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCAKLSAgICA2OCwgNjksIDIxMCwgNzksIDgyLCA2NywgNzIsIDczLCA2OCwgMTI4LCA3OSwgODIsIDY1LCA3OCwgNzEsIDE5NywgNzksIAotICAgIDgwLCA4NCwgNzMsIDc5LCAyMDYsIDc5LCA4MCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzksIDgwLCA4MCwgODIsIDY5LCA4MywgCi0gICAgODMsIDczLCA3OSwgNzgsIDEyOCwgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzksIDgwLCAKLSAgICA4MCwgNzksIDgzLCA3MywgNzgsIDE5OSwgNzksIDgwLCA4MCwgNzksIDgzLCA2OSwgMTI4LCA3OSwgODAsIDcyLCA3MywgODUsIAotICAgIDY3LCA3MiwgODUsIDgzLCAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3OSwgODAsIDY5LCA4MiwgCi0gICAgNjUsIDg0LCA3OSwgMjEwLCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDczLCAKLSAgICA3OCwgMTk5LCA3OSwgODAsIDY5LCA3OCwgNDUsIDgwLCAxMjgsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzksIDg1LCA4NCwgNzYsIAotICAgIDczLCA3OCwgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgNzksIDgwLCA2OSwgCi0gICAgNzgsIDQ1LCA2NywgNzMsIDgyLCA2NywgODUsIDczLCA4NCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA3OSwgNzksIAotICAgIDkwLCA2OSwgMTI4LCA3OSwgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgNzksIDg1LCAxMjgsIDc5LCA3OSwgCi0gICAgNzcsIDg1LCAxMjgsIDc5LCA3OSwgNjksIDEyOCwgNzksIDc5LCA2NiwgNzksIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA3OSwgNzgsIDg1LCAxMjgsIDc5LCA3OCwgODMsIDg1LCAxMjgsIDc5LCA3OCwgNzgsIDEyOCwgNzksIDc4LCA3NSwgNjUsIAotICAgIDgyLCAxMjgsIDc5LCA3OCwgNjksIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA4NywgNjUsIDIxNywgCi0gICAgNzksIDc4LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzksIDc4LCA2OSwgNDUsIDc2LCA3MywgNzgsIAotICAgIDE5NywgNzksIDc4LCA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzksIDc4LCA2NSwgODAsIDEyOCwgNzksIDc3LCA3MywgCi0gICAgODMsIDgzLCA3MywgNzksIDIwNiwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzksIDc3LCA3MywgNjcsIDgyLCAKLSAgICA3OSwgMjA2LCA3OSwgNzcsIDY5LCA3MSwgNjUsIDEyOCwgNzksIDc3LCA2OSwgNzEsIDE5MywgNzksIDc3LCA2NSwgNzYsIAotICAgIDc5LCA3OCwgMTI4LCA3OSwgNzYsIDczLCA4NiwgNjksIDEyOCwgNzksIDc2LCA3MywgNzEsIDc5LCAyMDYsIDc5LCA3NiwgCi0gICAgNjgsIDEyOCwgNzksIDc1LCA4NCwgMjA3LCA3OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzksIDc1LCA2NSwgODIsIDE5MywgCi0gICAgNzksIDc0LCA3MywgNjYsIDg3LCA2NSwgMjE3LCA3OSwgNzQsIDY5LCA3OSwgNzgsIDEyOCwgNzksIDczLCA3NiwgMTI4LCAKLSAgICA3OSwgNzIsIDc3LCAxMjgsIDc5LCA3MiwgMjA1LCA3OSwgNzEsIDgyLCA2OSwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIAotICAgIDc1LCAxMjgsIDc5LCA3MSwgNzksIDc4LCA2OSwgMjAzLCA3OSwgNzEsIDcyLCA2NSwgMjA1LCA3OSwgNzAsIDcwLCA3MywgCi0gICAgNjcsIDY5LCA4MiwgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCAxMjgsIDc5LCA3MCwgNzAsIDczLCA2NywgMTk3LCAKLSAgICA3OSwgNzAsIDcwLCAxMjgsIDc5LCA2OSwgODksIDEyOCwgNzksIDY5LCA3NSwgMTI4LCA3OSwgNjgsIDY5LCA3OCwgMTI4LCAKLSAgICA3OSwgNjgsIDE5NiwgNzksIDY3LCA4NCwgNzksIDgwLCA4NSwgODMsIDEyOCwgNzksIDY3LCA4NCwgNzksIDY2LCA2OSwgODIsIAotICAgIDEyOCwgNzksIDY3LCA4NCwgNjksIDIxMiwgNzksIDY3LCAyMTAsIDc5LCA2NywgNzYsIDc5LCA2NywgNzUsIDEyOCwgNzksIAotICAgIDY3LCA2NywgNzYsIDg1LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA3OSwgNjYsIDgzLCA4NCwgODIsIDg1LCA2NywgODQsIDczLCAKLSAgICA3OSwgNzgsIDEyOCwgNzksIDY2LCA3OSwgNzYsIDIxMSwgNzksIDY2LCA3OSwgMjA0LCA3OSwgNjYsIDc5LCA3MCwgNzMsIAotICAgIDc2LCA3MywgMTI4LCA3OSwgNjYsIDc2LCA3MywgODEsIDg1LCAxOTcsIDc5LCA2NiwgNzQsIDY5LCA2NywgMjEyLCA3OSwgCi0gICAgNjYsIDY5LCA3NiwgODUsIDgzLCAxMjgsIDc5LCA2NiwgNjksIDc2LCA3OSwgODMsIDEyOCwgNzksIDY2LCAxMjgsIDc5LCAKLSAgICA2NSwgODksIDEyOCwgNzksIDY1LCA3NSwgMTI4LCA3OSwgNjUsIDY2LCA3OSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIAotICAgIDc5LCAxOTMsIDc5LCA0OCwgNTMsIDQ5LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA1MywgNDgsIDEyOCwgNzksIDQ4LCA1MiwgNTcsIDEyOCwgNzksIDQ4LCA1MiwgNTYsIDEyOCwgCi0gICAgNzksIDQ4LCA1MiwgNTUsIDEyOCwgNzksIDQ4LCA1MiwgNTQsIDEyOCwgNzksIDQ4LCA1MiwgNTMsIDEyOCwgNzksIDQ4LCAKLSAgICA1MiwgNTIsIDEyOCwgNzksIDQ4LCA1MiwgNTEsIDEyOCwgNzksIDQ4LCA1MiwgNTAsIDEyOCwgNzksIDQ4LCA1MiwgNDksIAotICAgIDEyOCwgNzksIDQ4LCA1MiwgNDgsIDEyOCwgNzksIDQ4LCA1MSwgNTcsIDEyOCwgNzksIDQ4LCA1MSwgNTYsIDEyOCwgNzksIAotICAgIDQ4LCA1MSwgNTUsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NywgMTI4LCA3OSwgCi0gICAgNDgsIDUxLCA1NCwgNjYsIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCAxMjgsIDc5LCAKLSAgICA0OCwgNTEsIDUzLCAxMjgsIDc5LCA0OCwgNTEsIDUyLCAxMjgsIDc5LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OSwgNDgsIAotICAgIDUxLCA1MSwgMTI4LCA3OSwgNDgsIDUxLCA1MCwgMTI4LCA3OSwgNDgsIDUxLCA0OSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgCi0gICAgNjUsIDEyOCwgNzksIDQ4LCA1MSwgNDgsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCAKLSAgICAxMjgsIDc5LCA0OCwgNTAsIDU2LCAxMjgsIDc5LCA0OCwgNTAsIDU1LCAxMjgsIDc5LCA0OCwgNTAsIDU0LCAxMjgsIDc5LCAKLSAgICA0OCwgNTAsIDUzLCA2NSwgMTI4LCA3OSwgNDgsIDUwLCA1MywgMTI4LCA3OSwgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzksIAotICAgIDQ4LCA1MCwgNTIsIDEyOCwgNzksIDQ4LCA1MCwgNTEsIDEyOCwgNzksIDQ4LCA1MCwgNTAsIDEyOCwgNzksIDQ4LCA1MCwgCi0gICAgNDksIDEyOCwgNzksIDQ4LCA1MCwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCAxMjgsIDc5LCA0OCwgNDksIDU3LCAKLSAgICA2NSwgMTI4LCA3OSwgNDgsIDQ5LCA1NywgMTI4LCA3OSwgNDgsIDQ5LCA1NiwgMTI4LCA3OSwgNDgsIDQ5LCA1NSwgMTI4LCAKLSAgICA3OSwgNDgsIDQ5LCA1NCwgMTI4LCA3OSwgNDgsIDQ5LCA1MywgMTI4LCA3OSwgNDgsIDQ5LCA1MiwgMTI4LCA3OSwgNDgsIAotICAgIDQ5LCA1MSwgMTI4LCA3OSwgNDgsIDQ5LCA1MCwgMTI4LCA3OSwgNDgsIDQ5LCA0OSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgCi0gICAgNjcsIDEyOCwgNzksIDQ4LCA0OSwgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDQ5LCAKLSAgICA0OCwgMTI4LCA3OSwgNDgsIDQ4LCA1NywgMTI4LCA3OSwgNDgsIDQ4LCA1NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NSwgMTI4LCAKLSAgICA3OSwgNDgsIDQ4LCA1NCwgNzAsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY5LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OCwgCi0gICAgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgNjcsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCAKLSAgICA2NSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIAotICAgIDEyOCwgNzksIDQ4LCA0OCwgNTIsIDEyOCwgNzksIDQ4LCA0OCwgNTEsIDEyOCwgNzksIDQ4LCA0OCwgNTAsIDEyOCwgNzksIAotICAgIDQ4LCA0OCwgNDksIDY1LCAxMjgsIDc5LCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA0NSwgODksIDY5LCAxMjgsIDc5LCA0NSwgCi0gICAgNzksIDQ1LCA3MywgMTI4LCA3OSwgNDUsIDY5LCAxMjgsIDc4LCA5MCwgODksIDg4LCAxMjgsIDc4LCA5MCwgODksIDg0LCAKLSAgICAxMjgsIDc4LCA5MCwgODksIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4MiwgMTI4LCA3OCwgOTAsIDg5LCA4MCwgMTI4LCAKLSAgICA3OCwgOTAsIDg5LCAxMjgsIDc4LCA5MCwgODUsIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgOTAsIAotICAgIDg1LCA4MiwgMTI4LCA3OCwgOTAsIDg1LCA4MSwgMTI4LCA3OCwgOTAsIDg1LCA4MCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgCi0gICAgODgsIDEyOCwgNzgsIDkwLCA4NSwgNzksIDEyOCwgNzgsIDkwLCA4NSwgMjA2LCA3OCwgOTAsIDg1LCAxMjgsIDc4LCA5MCwgCi0gICAgNzksIDg4LCAxMjgsIDc4LCA5MCwgNzksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDg4LCAxMjgsIDc4LCA5MCwgNzMsIDg0LCAKLSAgICAxMjgsIDc4LCA5MCwgNzMsIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODAsIAotICAgIDEyOCwgNzgsIDkwLCA3MywgNjksIDEyOCwgNzgsIDkwLCA3MywgMTI4LCA3OCwgOTAsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIAotICAgIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDkwLCA2OSwgMTI4LCA3OCwgOTAsIDY1LCA4OCwgMTI4LCA3OCwgOTAsIDY1LCA4NCwgCi0gICAgMTI4LCA3OCwgOTAsIDY1LCA4MSwgMTI4LCA3OCwgOTAsIDY1LCA4MCwgMTI4LCA3OCwgOTAsIDY1LCAxMjgsIDc4LCA5MCwgCi0gICAgMTkzLCA3OCwgODksIDg3LCA2NSwgMTI4LCA3OCwgODksIDg1LCA4OCwgMTI4LCA3OCwgODksIDg1LCA4NSwgMTI4LCA3OCwgCi0gICAgODksIDg1LCA4NCwgMTI4LCA3OCwgODksIDg1LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg5LCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDc4LCA4OSwgODUsIDc5LCAxMjgsIDc4LCA4OSwgODUsIDY5LCAxMjgsIDc4LCA4OSwgODUsIAotICAgIDEyOCwgNzgsIDg5LCA3OSwgODgsIDEyOCwgNzgsIDg5LCA3OSwgODQsIDEyOCwgNzgsIDg5LCA3OSwgODAsIDEyOCwgNzgsIAotICAgIDg5LCA3OSwgNzksIDEyOCwgNzgsIDg5LCA3OSwgNjUsIDEyOCwgNzgsIDg5LCA3OSwgMTI4LCA3OCwgODksIDc0LCA2NSwgCi0gICAgMTI4LCA3OCwgODksIDczLCA4OCwgMTI4LCA3OCwgODksIDczLCA4NCwgMTI4LCA3OCwgODksIDczLCAyMTIsIDc4LCA4OSwgCi0gICAgNzMsIDIxMSwgNzgsIDg5LCA3MywgMjEwLCA3OCwgODksIDczLCA4MCwgMTI4LCA3OCwgODksIDczLCA3OCwgNDUsIDY4LCAKLSAgICA3OSwgMTI4LCA3OCwgODksIDczLCA3MywgMTI4LCA3OCwgODksIDczLCA2OSwgODgsIDEyOCwgNzgsIDg5LCA3MywgNjksIAotICAgIDg0LCAxMjgsIDc4LCA4OSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgODksIDczLCA2OSwgMTI4LCA3OCwgODksIDczLCAxMjgsIAotICAgIDc4LCA4OSwgMjAxLCA3OCwgODksIDcyLCA2NSwgMTI4LCA3OCwgODksIDY5LCA4NCwgMTI4LCA3OCwgODksIDY5LCAyMTIsIAotICAgIDc4LCA4OSwgNjksIDcyLCAxMjgsIDc4LCA4OSwgNjksIDIwMCwgNzgsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDg5LCA2OSwgCi0gICAgMTI4LCA3OCwgODksIDE5NiwgNzgsIDg5LCA2NywgNjUsIDEyOCwgNzgsIDg5LCA2NSwgODUsIDEyOCwgNzgsIDg5LCA2NSwgCi0gICAgNzMsIDEyOCwgNzgsIDg5LCA2NSwgNzIsIDEyOCwgNzgsIDg5LCA2NSwgNjksIDc3LCA2NSwgNjksIDEyOCwgNzgsIDg5LCAKLSAgICA2NSwgNjUsIDEyOCwgNzgsIDg3LCA3OSwgNzksIDEyOCwgNzgsIDg3LCA3OSwgMTI4LCA3OCwgODcsIDczLCA3MywgMTI4LCAKLSAgICA3OCwgODcsIDczLCAxMjgsIDc4LCA4NywgNjksIDEyOCwgNzgsIDg3LCA2NSwgNjUsIDEyOCwgNzgsIDg3LCA2NSwgMTI4LCAKLSAgICA3OCwgODcsIDEyOCwgNzgsIDg2LCAxMjgsIDc4LCA4NSwgODgsIDEyOCwgNzgsIDg1LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCAKLSAgICA4NSwgMTI4LCA3OCwgODUsIDg0LCA3MywgNzYsIDc2LCA4NSwgMTI4LCA3OCwgODUsIDg0LCAxMjgsIDc4LCA4NSwgMjEyLCAKLSAgICA3OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODUsIDgyLCAxMjgsIDc4LCA4NSwgODAsIDEyOCwgNzgsIDg1LCA3OSwgODgsIAotICAgIDEyOCwgNzgsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDg1LCA3OSwgMTI4LCA3OCwgODUsIDc4LCA4NSwgOTAsIDEyOCwgNzgsIAotICAgIDg1LCA3OCwgODUsIDIxOCwgNzgsIDg1LCA3OCwgNzEsIDEyOCwgNzgsIDg1LCA3OCwgNjUsIDg2LCA4NSwgMjEyLCA3OCwgCi0gICAgODUsIDc4LCA2NSwgODYsIDczLCAyMDMsIDc4LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCAyMDYsIDc4LCA4NSwgNzcsIDY5LCAKLSAgICA4MiwgMjA3LCA3OCwgODUsIDc3LCA2OSwgODIsIDY1LCA4NCwgNzksIDIxMCwgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgCi0gICAgMjA0LCA3OCwgODUsIDc3LCA2NiwgNjksIDgyLCA4MywgMTI4LCA3OCwgODUsIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCAKLSAgICA4NSwgNzcsIDEyOCwgNzgsIDg1LCA3NiwgNzYsIDEyOCwgNzgsIDg1LCA3NiwgMjA0LCA3OCwgODUsIDc2LCAxMjgsIDc4LCAKLSAgICA4NSwgNzUsIDg0LCA2NSwgMTI4LCA3OCwgODUsIDY5LCA3OCwgNzEsIDEyOCwgNzgsIDg1LCA2OSwgMTI4LCA3OCwgODUsIAotICAgIDY2LCA3MywgNjUsIDIwNiwgNzgsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDg1LCA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgCi0gICAgNTAsIDUwLCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNTAsIDQ5LCAxMjgsIDc4LCAKLSAgICA4NSwgNDgsIDUwLCA0OCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU2LCA2NSwgCi0gICAgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCAKLSAgICA1NCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTMsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA4NSwgNDgsIAotICAgIDQ5LCA1MSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTAsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3OCwgCi0gICAgODUsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIAotICAgIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU3LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OCwgCi0gICAgNTUsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgODUsIDQ4LCAKLSAgICA0OCwgNTIsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgODUsIAotICAgIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDg0LCA4NSwgODUsIDEyOCwgNzgsIDg0LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCAyMTMsIAotICAgIDc4LCA4NCwgNzksIDgxLCA4MCwgNjksIDc4LCAxMjgsIDc4LCA4NCwgNzMsIDY5LCAxOTcsIDc4LCA4NCwgNjksIDg1LCA3OCwgCi0gICAgNzEsIDY2LCA2NSwgMTI4LCA3OCwgODQsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDg0LCA2OSwgNzgsIDEyOCwgNzgsIDg0LCAKLSAgICA2OSwgNjksIDEyOCwgNzgsIDg0LCA2NSwgODAsIDEyOCwgNzgsIDg0LCA2NSwgMjA4LCA3OCwgODQsIDY1LCA2NSwgMTI4LCAKLSAgICA3OCwgODMsIDg1LCA3OSwgMjEyLCA3OCwgODMsIDg1LCA3OCwgMTI4LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3OCwgODMsIAotICAgIDc5LCA3NywgMTI4LCA3OCwgODMsIDczLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODAsIDEyOCwgCi0gICAgNzgsIDgzLCA3MywgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDg1LCA4NCwgMTI4LCA3OCwgODMsIDcyLCA4NSwgMjEyLCAKLSAgICA3OCwgODMsIDcyLCA4NSwgNzksIDgwLCAxMjgsIDc4LCA4MywgNzIsIDg1LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA3MywgNjksIAotICAgIDY5LCAxMjgsIDc4LCA4MywgNzIsIDY5LCA2OSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgODEsIDEyOCwgNzgsIDgzLCA3MiwgCi0gICAgNjUsIDEyOCwgNzgsIDgzLCA2OSwgODUsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIDgzLCA2OSwgNzgsIDEyOCwgNzgsIDgzLCAKLSAgICA2NSwgMTI4LCA3OCwgODIsIDg5LCA4OCwgMTI4LCA3OCwgODIsIDg5LCA4NCwgMTI4LCA3OCwgODIsIDg5LCA4MiwgODgsIAotICAgIDEyOCwgNzgsIDgyLCA4OSwgODIsIDEyOCwgNzgsIDgyLCA4OSwgODAsIDEyOCwgNzgsIDgyLCA4OSwgMTI4LCA3OCwgODIsIAotICAgIDg1LCA4OCwgMTI4LCA3OCwgODIsIDg1LCA4NCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgODgsIDEyOCwgNzgsIDgyLCA4NSwgCi0gICAgODIsIDEyOCwgNzgsIDgyLCA4NSwgODAsIDEyOCwgNzgsIDgyLCA4NSwgMTI4LCA3OCwgODIsIDc5LCA4OCwgMTI4LCA3OCwgCi0gICAgODIsIDc5LCA4MCwgMTI4LCA3OCwgODIsIDc5LCAxMjgsIDc4LCA4MiwgNjksIDg4LCAxMjgsIDc4LCA4MiwgNjksIDg0LCAKLSAgICAxMjgsIDc4LCA4MiwgNjksIDgwLCAxMjgsIDc4LCA4MiwgNjksIDEyOCwgNzgsIDgyLCA2NSwgODgsIDEyOCwgNzgsIDgyLCAKLSAgICA2NSwgODQsIDEyOCwgNzgsIDgyLCA2NSwgODAsIDEyOCwgNzgsIDgyLCA2NSwgMTI4LCA3OCwgNzksIDg5LCAxMjgsIDc4LCAKLSAgICA3OSwgODgsIDEyOCwgNzgsIDc5LCA4NiwgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA3OSwgODQsIDg0LCA3OSwgCi0gICAgMTI4LCA3OCwgNzksIDg0LCA2OSwgODMsIDEyOCwgNzgsIDc5LCA4NCwgNjksIDcyLCA2OSwgNjUsIDY4LCAxMjgsIDc4LCAKLSAgICA3OSwgODQsIDY5LCA3MiwgNjksIDY1LCAxOTYsIDc4LCA3OSwgODQsIDY5LCA2NiwgNzksIDc5LCA3NSwgMTI4LCA3OCwgNzksIAotICAgIDg0LCA2OSwgNjYsIDc5LCA3OSwgMjAzLCA3OCwgNzksIDg0LCA2OSwgMTI4LCA3OCwgNzksIDg0LCAxOTcsIDc4LCA3OSwgCi0gICAgODQsIDY3LCA3MiwgNjksIDE5NiwgNzgsIDc5LCA4NCwgNjcsIDcyLCAxMjgsIDc4LCA3OSwgODQsIDEyOCwgNzgsIDc5LCAKLSAgICAyMTIsIDc4LCA3OSwgODMsIDY5LCAxMjgsIDc4LCA3OSwgODIsIDg0LCA3MiwgODcsIDY5LCA4MywgMjEyLCA3OCwgNzksIAotICAgIDgyLCA4NCwgNzIsIDY5LCA4MiwgMjA2LCA3OCwgNzksIDgyLCA4NCwgMjAwLCA3OCwgNzksIDgyLCA3NywgNjUsIDIwNCwgCi0gICAgNzgsIDc5LCAyMTAsIDc4LCA3OSwgODAsIDEyOCwgNzgsIDc5LCA3OSwgNzgsIDg1LCAxMjgsIDc4LCA3OSwgNzksIDEyOCwgCi0gICAgNzgsIDc5LCA3OCwgNzAsIDc5LCA4MiwgNzUsIDczLCA3OCwgNzEsIDEyOCwgNzgsIDc5LCA3OCwgNDUsIDgwLCA3OSwgODQsIAotICAgIDY1LCA2NiwgNzYsIDE5NywgNzgsIDc5LCA3OCwgNDUsIDc0LCA3OSwgNzMsIDc4LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA3OCwgCi0gICAgNDUsIDY2LCA4MiwgNjksIDY1LCA3NSwgNzMsIDc4LCAxOTksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDIwNCwgNzgsIDc5LCAKLSAgICA3NSwgNzIsIDg1LCA3NSwgMTI4LCA3OCwgNzksIDY4LCA2OSwgMTI4LCA3OCwgNzksIDY1LCAxMjgsIDc4LCA3OSwgNDUsIAotICAgIDY2LCA4MiwgNjksIDY1LCAyMDMsIDc4LCA3OCwgODUsIDg1LCAxMjgsIDc4LCA3OCwgODUsIDEyOCwgNzgsIDc4LCA3OSwgCi0gICAgNzksIDEyOCwgNzgsIDc4LCA3OSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA3OCwgODUsIDEyOCwgCi0gICAgNzgsIDc4LCA3OCwgNzksIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDczLCA3MywgMTI4LCAKLSAgICA3OCwgNzgsIDc4LCA3MywgMTI4LCA3OCwgNzgsIDc4LCA2OSwgNjksIDEyOCwgNzgsIDc4LCA3OCwgNjksIDEyOCwgNzgsIAotICAgIDc4LCA3OCwgNjUsIDg1LCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA3MywgMTI4LCA3OCwgNzgsIDc4LCA2NSwgNjUsIDEyOCwgCi0gICAgNzgsIDc4LCA3OCwgNjUsIDEyOCwgNzgsIDc4LCA3OCwgMTI4LCA3OCwgNzgsIDcyLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCAKLSAgICA3OSwgNzksIDEyOCwgNzgsIDc4LCA3MSwgNzksIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzEsIAotICAgIDczLCAxMjgsIDc4LCA3OCwgNzEsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDcxLCA2NSwgMTI4LCA3OCwgNzgsIDcxLCAxMjgsIAotICAgIDc4LCA3OCwgNjYsIDgzLCA4MCwgMTI4LCA3OCwgNzcsIDEyOCwgNzgsIDc2LCA0OCwgNTAsIDQ4LCAxMjgsIDc4LCA3NiwgCi0gICAgNDgsIDQ5LCA1NywgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU1LCA2NSwgMTI4LCAKLSAgICA3OCwgNzYsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU0LCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1MywgCi0gICAgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ5LCAKLSAgICA1MCwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNDksIDEyOCwgNzgsIDc2LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA3NiwgNDgsIAotICAgIDQ4LCA1NywgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTYsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA3NiwgCi0gICAgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTMsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgMTI4LCAKLSAgICA3OCwgNzYsIDQ4LCA0OCwgNTIsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MCwgCi0gICAgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNDksIDEyOCwgNzgsIDc2LCAxMjgsIDc4LCA3NSwgNzksIDc3LCAxMjgsIDc4LCA3NSwgCi0gICAgMjA3LCA3OCwgNzUsIDczLCA3OCwgNjgsIDczLCAxMjgsIDc4LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc4LCAKLSAgICA3NCwgODksIDg4LCAxMjgsIDc4LCA3NCwgODksIDg0LCAxMjgsIDc4LCA3NCwgODksIDgyLCA4OCwgMTI4LCA3OCwgNzQsIAotICAgIDg5LCA4MiwgMTI4LCA3OCwgNzQsIDg5LCA4MCwgMTI4LCA3OCwgNzQsIDg5LCAxMjgsIDc4LCA3NCwgODUsIDg4LCAxMjgsIAotICAgIDc4LCA3NCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNzQsIDg1LCA4MiwgMTI4LCA3OCwgNzQsIDg1LCA4MSwgNjUsIDEyOCwgCi0gICAgNzgsIDc0LCA4NSwgODAsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3NCwgODUsIDc5LCAxMjgsIDc4LCAKLSAgICA3NCwgODUsIDY5LCA4MSwgMTI4LCA3OCwgNzQsIDg1LCA2NSwgNjksIDEyOCwgNzgsIDc0LCA4NSwgMTI4LCA3OCwgNzQsIAotICAgIDc5LCA4OCwgMTI4LCA3OCwgNzQsIDc5LCA4NCwgMTI4LCA3OCwgNzQsIDc5LCA4MCwgMTI4LCA3OCwgNzQsIDc5LCA3OSwgCi0gICAgMTI4LCA3OCwgNzQsIDc5LCAxMjgsIDc4LCA3NCwgNzMsIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDg0LCAxMjgsIDc4LCA3NCwgCi0gICAgNzMsIDgwLCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODQsIDEyOCwgNzgsIDc0LCAKLSAgICA3MywgNjksIDgwLCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA2OSwgMTI4LCA3OCwgNzQsIDczLCA2OSwgMTI4LCA3OCwgNzQsIAotICAgIDczLCAxMjgsIDc4LCA3NCwgMjAxLCA3OCwgNzQsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDc0LCA2OSwgODUsIDg0LCAxMjgsIAotICAgIDc4LCA3NCwgNjksIDg1LCA2NSwgNjksIDc4LCA2NSwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgCi0gICAgNzQsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAxMjgsIDc4LCA3NCwgNjksIDE5NywgNzgsIDc0LCAKLSAgICA2OSwgMTI4LCA3OCwgNzQsIDY1LCA4MSwgMTI4LCA3OCwgNzQsIDY1LCA4MCwgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIAotICAgIDc2LCA3MywgMTI4LCA3OCwgNzQsIDY1LCA2OSwgNzcsIDEyOCwgNzgsIDc0LCA2NSwgNjUsIDEyOCwgNzgsIDczLCA4OCwgCi0gICAgMTI4LCA3OCwgNzMsIDg0LCA4MiwgNjksIDEyOCwgNzgsIDczLCA4MywgNjUsIDcxLCAxMjgsIDc4LCA3MywgODIsIDg1LCAKLSAgICA3MSwgODUsIDEyOCwgNzgsIDczLCA4MCwgMTI4LCA3OCwgNzMsIDc4LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA3OCwgNjksIAotICAgIDg0LCA4OSwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDIxNywgNzgsIDczLCA3OCwgNjksIDg0LCA2OSwgNjksIDc4LCAKLSAgICAxMjgsIDc4LCA3MywgNzgsIDY5LCA4NCwgNjksIDY5LCAyMDYsIDc4LCA3MywgNzgsIDY5LCA0NSwgODQsIDcyLCA3MywgODIsIAotICAgIDg0LCA4OSwgMTI4LCA3OCwgNzMsIDc4LCAxOTcsIDc4LCA3MywgNzgsIDY4LCA2NSwgNTAsIDEyOCwgNzgsIDczLCA3OCwgCi0gICAgNjgsIDY1LCAxNzgsIDc4LCA3MywgNzcsIDEyOCwgNzgsIDczLCAyMDUsIDc4LCA3MywgNzUsIDcyLCA2NSwgNzIsIDczLCAKLSAgICA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgNzIsIDczLCA4NCwgMTI4LCA3OCwgNzMsIDc1LCA2NSwgMTI4LCA3OCwgNzMsIAotICAgIDcyLCA4MywgNzIsIDg2LCA2NSwgODMsIDY1LCAxMjgsIDc4LCA3MywgNzEsIDczLCA2OCwgNjUsIDc3LCA3MywgNzgsIDEyOCwgCi0gICAgNzgsIDczLCA3MSwgNzMsIDY4LCA2NSwgNjksIDgzLCA3MiwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzgsIDczLCAKLSAgICA3MSwgNzIsIDIxMiwgNzgsIDczLCA3MSwgNzEsIDY1LCA3MiwgNzMsIDg0LCA2NSwgMTI4LCA3OCwgNzMsIDY5LCA4OCwgCi0gICAgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc4LCA3MywgNjksIDg1LCAKLSAgICA3OCwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgzLCA3MywgCi0gICAgNzksIDgzLCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3OCwgNzMsIDY5LCAKLSAgICA4NSwgNzgsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODAsIDY1LCA3OCwgCi0gICAgODMsIDczLCA3OSwgODMsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCAKLSAgICA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgCi0gICAgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgNjcsIAotICAgIDcyLCAxMjgsIDc4LCA3MywgNjksIDg1LCAyMDYsIDc4LCA3MywgNjksIDgwLCAxMjgsIDc4LCA3MywgNjksIDEyOCwgNzgsIAotICAgIDczLCA2NiwgMTI4LCA3OCwgNzMsIDY1LCAxMjgsIDc4LCA3MywgNTAsIDEyOCwgNzgsIDcyLCA4NSwgNjksIDEyOCwgNzgsIAotICAgIDcyLCA3NCwgNjUsIDEyOCwgNzgsIDcyLCAxMjgsIDc4LCA3MSwgODksIDY5LCAxMjgsIDc4LCA3MSwgODYsIDY5LCAxMjgsIAotICAgIDc4LCA3MSwgODUsIDg1LCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgODQsIDEyOCwgCi0gICAgNzgsIDcxLCA4NSwgNzksIDEyOCwgNzgsIDcxLCA4NSwgNjUsIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCA2NSwgNjksIAotICAgIDEyOCwgNzgsIDcxLCA3OSwgODgsIDEyOCwgNzgsIDcxLCA3OSwgODUsIDEyOCwgNzgsIDcxLCA3OSwgMjEzLCA3OCwgNzEsIAotICAgIDc5LCA4NCwgMTI4LCA3OCwgNzEsIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDc5LCA4MCwgMTI4LCA3OCwgNzEsIDc5LCA3OCwgCi0gICAgMTI4LCA3OCwgNzEsIDc5LCA3NywgMTI4LCA3OCwgNzEsIDc5LCA2OSwgNzIsIDEyOCwgNzgsIDcxLCA3OSwgNjksIDIwMCwgCi0gICAgNzgsIDcxLCAyMDcsIDc4LCA3MSwgNzUsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgODcsIDY1LCA2OSwgNzgsIAotICAgIDEyOCwgNzgsIDcxLCA3NSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgCi0gICAgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIDY5LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3NSwgODUsIAotICAgIDE5NywgNzgsIDcxLCA3NSwgNzMsIDc4LCA2OCwgMjAxLCA3OCwgNzEsIDc1LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3MSwgCi0gICAgNzUsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA4MiwgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCAKLSAgICA2NSwgNjksIDgxLCAxMjgsIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODEsIAotICAgIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDgwLCAxMjgsIDc4LCA3MSwgNzUsIDY1LCA2NSwgNzcsIDczLCAxMjgsIDc4LCA3MSwgCi0gICAgNzUsIDY1LCAxMjgsIDc4LCA3MSwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgODAsIDEyOCwgNzgsIDcxLCAKLSAgICA3MywgNjksIDEyOCwgNzgsIDcxLCA3MiwgNjUsIDEyOCwgNzgsIDcxLCA3MSwgODcsIDY1LCA2OSwgNzgsIDEyOCwgNzgsIAotICAgIDcxLCA3MSwgODUsIDgyLCA2NSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgODUsIDgwLCAxMjgsIDc4LCA3MSwgNzEsIDg1LCA3OSwgCi0gICAgODEsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCAyMDksIDc4LCA3MSwgNzEsIDg1LCA3OSwgNzgsIDEyOCwgNzgsIDcxLCAKLSAgICA3MSwgODUsIDc5LCA3NywgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY5LCA2OSwgODQsIAotICAgIDEyOCwgNzgsIDcxLCA3MSwgODUsIDY1LCA2OSwgODMsIDcyLCA2NSwgMTk3LCA3OCwgNzEsIDcxLCA4NSwgNjUsIDY5LCAKLSAgICAyMDYsIDc4LCA3MSwgNzEsIDg1LCAxMjgsIDc4LCA3MSwgNzEsIDc5LCA3OSwgMTI4LCA3OCwgNzEsIDcxLCA3OSwgMTI4LCAKLSAgICA3OCwgNzEsIDcxLCA3MywgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDg4LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA4NSwgNjUsIAotICAgIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMjEzLCA3OCwgCi0gICAgNzEsIDcxLCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDY5LCAKLSAgICA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjksIDEyOCwgNzgsIDcxLCA3MSwgNjUsIAotICAgIDgwLCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA2NSwgNzcsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgNjUsIDc3LCAKLSAgICAxMjgsIDc4LCA3MSwgNzEsIDEyOCwgNzgsIDcxLCA2OSwgODgsIDEyOCwgNzgsIDcxLCA2OSwgODUsIDgyLCA2OSwgODUsIAotICAgIDg0LCAxMjgsIDc4LCA3MSwgNjksIDgwLCAxMjgsIDc4LCA3MSwgNjksIDc4LCAxMjgsIDc4LCA3MSwgNjksIDY5LCAxMjgsIAotICAgIDc4LCA3MSwgNjksIDY1LCA2OCwgNjUsIDc2LCAxMjgsIDc4LCA3MSwgNjUsIDg4LCAxMjgsIDc4LCA3MSwgNjUsIDg1LCAKLSAgICAxMjgsIDc4LCA3MSwgNjUsIDg0LCAxMjgsIDc4LCA3MSwgNjUsIDIxMSwgNzgsIDcxLCA2NSwgODEsIDEyOCwgNzgsIDcxLCAKLSAgICA2NSwgODAsIDEyOCwgNzgsIDcxLCA2NSwgNzgsIDcxLCA4NSwgMTI4LCA3OCwgNzEsIDY1LCA3OCwgMTI4LCA3OCwgNzEsIAotICAgIDY1LCA3MywgMTI4LCA3OCwgNzEsIDY1LCA3MiwgMTI4LCA3OCwgNzEsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDcxLCAxOTMsIAotICAgIDc4LCA3MCwgMTI4LCA3OCwgNjksIDg4LCAyMTIsIDc4LCA2OSwgODgsIDEyOCwgNzgsIDY5LCA4NywgODMsIDgwLCA2NSwgCi0gICAgODAsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg3LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OCwgNjksIDg3LCAxMjgsIDc4LCAKLSAgICA2OSwgODUsIDg0LCA4MiwgNjUsIDIwNCwgNzgsIDY5LCA4NSwgODQsIDY5LCA4MiwgMTI4LCA3OCwgNjksIDg0LCAxMjgsIAotICAgIDc4LCA2OSwgMjEyLCA3OCwgNjksIDgzLCA4NCwgNjksIDE5NiwgNzgsIDY5LCA4MSwgODUsIDY4LCA2NSwgNjUsIDEyOCwgCi0gICAgNzgsIDY5LCA4MCwgODQsIDg1LCA3OCwgNjksIDEyOCwgNzgsIDY5LCA4MCwgMTI4LCA3OCwgNjksIDc5LCAxMjgsIDc4LCAKLSAgICA2OSwgMjA3LCA3OCwgNjksIDc4LCA2NSwgNzgsIDc5LCAxMjgsIDc4LCA2OSwgNzgsIDEyOCwgNzgsIDY5LCA3NiwgMTI4LCAKLSAgICA3OCwgNjksIDczLCA4NCwgNzIsIDY5LCAyMTAsIDc4LCA2OSwgNzEsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2OSwgNzEsIAotICAgIDY1LCA4NCwgNjksIDE5NiwgNzgsIDY5LCA2NywgNzUsIDg0LCA3MywgNjksIDEyOCwgNzgsIDY5LCA2NiwgNjksIDc4LCA4MywgCi0gICAgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDc4LCA2OCwgODUsIDg4LCAxMjgsIDc4LCA2OCwgODUsIDg0LCAxMjgsIDc4LCAKLSAgICA2OCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgNjgsIDg1LCA4MiwgMTI4LCA3OCwgNjgsIDg1LCA4MCwgMTI4LCA3OCwgNjgsIAotICAgIDg1LCA3OCwgMTI4LCA3OCwgNjgsIDIxMywgNzgsIDY4LCA3OSwgODgsIDEyOCwgNzgsIDY4LCA3OSwgODQsIDEyOCwgNzgsIAotICAgIDY4LCA3OSwgODAsIDEyOCwgNzgsIDY4LCA3OSwgNzksIDEyOCwgNzgsIDY4LCA3OSwgNzgsIDEyOCwgNzgsIDY4LCA3OSwgCi0gICAgNzcsIDY2LCA4NSwgMTI4LCA3OCwgNjgsIDc5LCA3NiwgMTk3LCA3OCwgNjgsIDczLCA4OCwgMTI4LCA3OCwgNjgsIDczLCAKLSAgICA4NCwgMTI4LCA3OCwgNjgsIDczLCA4MSwgMTI4LCA3OCwgNjgsIDczLCA4MCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgODgsIAotICAgIDEyOCwgNzgsIDY4LCA3MywgNjksIDEyOCwgNzgsIDY4LCA3MywgNjgsIDY1LCAxMjgsIDc4LCA2OCwgNzMsIDY1LCA4MSwgCi0gICAgMTI4LCA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDg0LCAKLSAgICAxMjgsIDc4LCA2OCwgNjksIDg1LCA2NSwgNjksIDgyLCA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgODAsIDEyOCwgNzgsIAotICAgIDY4LCA2OSwgNjksIDEyOCwgNzgsIDY4LCA2OSwgMTI4LCA3OCwgNjgsIDY1LCA4OCwgMTI4LCA3OCwgNjgsIDY1LCA4NCwgCi0gICAgMTI4LCA3OCwgNjgsIDY1LCA4MCwgMTI4LCA3OCwgNjgsIDY1LCA3NywgMTI4LCA3OCwgNjgsIDY1LCA2NSwgNzgsIDcxLCAKLSAgICA3MSwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA2OCwgNjUsIDY1LCAxMjgsIDc4LCA2OCwgNjUsIDE5MywgNzgsIAotICAgIDY2LCA4OSwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODQsIDEyOCwgNzgsIDY2LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA2NiwgCi0gICAgODksIDgyLCAxMjgsIDc4LCA2NiwgODksIDgwLCAxMjgsIDc4LCA2NiwgODksIDEyOCwgNzgsIDY2LCA4NSwgODgsIDEyOCwgCi0gICAgNzgsIDY2LCA4NSwgODQsIDEyOCwgNzgsIDY2LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA2NiwgODUsIDgyLCAxMjgsIDc4LCAKLSAgICA2NiwgODUsIDgwLCAxMjgsIDc4LCA2NiwgODUsIDEyOCwgNzgsIDY2LCA3OSwgODgsIDEyOCwgNzgsIDY2LCA3OSwgODQsIAotICAgIDEyOCwgNzgsIDY2LCA3OSwgODAsIDEyOCwgNzgsIDY2LCA3OSwgMTI4LCA3OCwgNjYsIDczLCA4OCwgMTI4LCA3OCwgNjYsIAotICAgIDczLCA4NCwgMTI4LCA3OCwgNjYsIDczLCA4MCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgODgsIDEyOCwgNzgsIDY2LCA3MywgCi0gICAgNjksIDgwLCAxMjgsIDc4LCA2NiwgNzMsIDY5LCAxMjgsIDc4LCA2NiwgNzMsIDEyOCwgNzgsIDY2LCA3MiwgMTI4LCA3OCwgCi0gICAgNjYsIDY1LCA4OCwgMTI4LCA3OCwgNjYsIDY1LCA4NCwgMTI4LCA3OCwgNjYsIDY1LCA4MCwgMTI4LCA3OCwgNjYsIDY1LCAKLSAgICAxMjgsIDc4LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgODksIDEyOCwgNzgsIDY1LCA4OCwgNzMsIAotICAgIDY1LCAyMDYsIDc4LCA2NSwgODgsIDEyOCwgNzgsIDY1LCA4NSwgODQsIDcyLCA4MywgMTI4LCA3OCwgNjUsIDg1LCA2OCwgCi0gICAgNzMsIDIxOCwgNzgsIDY1LCA4NCwgODUsIDgyLCA2NSwgMjA0LCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCA2NSwgMjA0LCAKLSAgICA3OCwgNjUsIDgzLCA3NSwgNjUsIDgwLCAyMDEsIDc4LCA2NSwgODMsIDcyLCA3MywgMTI4LCA3OCwgNjUsIDgzLCA2NSwgNzYsIAotICAgIDczLCA5MCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc4LCA2NSwgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCAKLSAgICA3OSwgMjA2LCA3OCwgNjUsIDgyLCA4MiwgNzksIDIxNSwgNzgsIDY1LCA4MiwgMTI4LCA3OCwgNjUsIDgxLCAxMjgsIDc4LCAKLSAgICA2NSwgNzksIDIxMSwgNzgsIDY1LCA3OCwgODMsIDY1LCA3OCwgNjUsIDgxLCAxMjgsIDc4LCA2NSwgNzgsIDcxLCA3NywgNzksIAotICAgIDc4LCA4NCwgNzIsIDc5LCAxMjgsIDc4LCA2NSwgNzgsIDY4LCAxMjgsIDc4LCA2NSwgNzgsIDY1LCAxMjgsIDc4LCA2NSwgCi0gICAgNzcsIDY5LCAxMjgsIDc4LCA2NSwgNzcsIDE5NywgNzgsIDY1LCA3NywgNTAsIDEyOCwgNzgsIDY1LCA3NywgMTI4LCA3OCwgCi0gICAgNjUsIDc1LCAxMjgsIDc4LCA2NSwgNzMsIDgyLCAxOTMsIDc4LCA2NSwgNzMsIDIwNCwgNzgsIDY1LCA3MSwgODIsIDIwMSwgCi0gICAgNzgsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc4LCA2NSwgNzEsIDY1LCAxMjgsIDc4LCA2NSwgNzEsIDE5MywgNzgsIDY1LCAKLSAgICA3MSwgMTI4LCA3OCwgNjUsIDE5OSwgNzgsIDY1LCA2OSwgMTI4LCA3OCwgNjUsIDY2LCA3NiwgNjUsIDEyOCwgNzgsIDY1LCAKLSAgICA2NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgNzUsIDgzLCA3MywgNzUsIDg5LCA2NSwgCi0gICAgODksIDY1LCAxMjgsIDc4LCA2NSwgNjUsIDczLCAxMjgsIDc4LCA2NSwgMTkzLCA3OCwgNjUsIDUwLCAxMjgsIDc4LCA2NSwgCi0gICAgNDUsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDUwLCAxMjgsIDc4LCA0OCwgNTIsIDQ5LCAxMjgsIDc4LCA0OCwgNTIsIDQ4LCAKLSAgICAxMjgsIDc4LCA0OCwgNTEsIDU3LCAxMjgsIDc4LCA0OCwgNTEsIDU2LCAxMjgsIDc4LCA0OCwgNTEsIDU1LCA2NSwgMTI4LCAKLSAgICA3OCwgNDgsIDUxLCA1NSwgMTI4LCA3OCwgNDgsIDUxLCA1NCwgMTI4LCA3OCwgNDgsIDUxLCA1MywgNjUsIDEyOCwgNzgsIAotICAgIDQ4LCA1MSwgNTMsIDEyOCwgNzgsIDQ4LCA1MSwgNTIsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUyLCAxMjgsIDc4LCA0OCwgCi0gICAgNTEsIDUxLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MSwgMTI4LCA3OCwgNDgsIDUxLCA1MCwgMTI4LCA3OCwgNDgsIDUxLCAKLSAgICA0OSwgMTI4LCA3OCwgNDgsIDUxLCA0OCwgMTI4LCA3OCwgNDgsIDUwLCA1NywgMTI4LCA3OCwgNDgsIDUwLCA1NiwgMTI4LCAKLSAgICA3OCwgNDgsIDUwLCA1NSwgMTI4LCA3OCwgNDgsIDUwLCA1NCwgMTI4LCA3OCwgNDgsIDUwLCA1MywgNjUsIDEyOCwgNzgsIAotICAgIDQ4LCA1MCwgNTMsIDEyOCwgNzgsIDQ4LCA1MCwgNTIsIDEyOCwgNzgsIDQ4LCA1MCwgNTEsIDEyOCwgNzgsIDQ4LCA1MCwgCi0gICAgNTAsIDEyOCwgNzgsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDQ4LCA0OSwgNTcsIDEyOCwgCi0gICAgNzgsIDQ4LCA0OSwgNTYsIDY2LCAxMjgsIDc4LCA0OCwgNDksIDU2LCA2NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgMTI4LCAKLSAgICA3OCwgNDgsIDQ5LCA1NSwgMTI4LCA3OCwgNDgsIDQ5LCA1NCwgMTI4LCA3OCwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgNDgsIAotICAgIDQ5LCA1MiwgMTI4LCA3OCwgNDgsIDQ5LCA1MSwgMTI4LCA3OCwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgNDgsIDQ5LCA0OSwgCi0gICAgMTI4LCA3OCwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgNDgsIDQ4LCA1NywgMTI4LCA3OCwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgCi0gICAgNDgsIDQ4LCA1NSwgMTI4LCA3OCwgNDgsIDQ4LCA1NCwgMTI4LCA3OCwgNDgsIDQ4LCA1MywgMTI4LCA3OCwgNDgsIDQ4LCAKLSAgICA1MiwgMTI4LCA3OCwgNDgsIDQ4LCA1MSwgMTI4LCA3OCwgNDgsIDQ4LCA1MCwgMTI4LCA3OCwgNDgsIDQ4LCA0OSwgMTI4LCAKLSAgICA3OCwgNDUsIDY3LCA4MiwgNjksIDE5NywgNzgsIDQ1LCA2NSwgODIsIDIxNywgNzcsIDg5LCA4OCwgMTI4LCA3NywgODksIAotICAgIDg0LCAxMjgsIDc3LCA4OSwgODMsIDc2LCA3MywgODQsIDY5LCAxMjgsIDc3LCA4OSwgODAsIDEyOCwgNzcsIDg5LCA2NSwgCi0gICAgMTI4LCA3NywgODksIDE5MywgNzcsIDg5LCAxMjgsIDc3LCAyMTcsIDc3LCA4NywgNzksIDc5LCAxMjgsIDc3LCA4NywgNzksIAotICAgIDEyOCwgNzcsIDg3LCA3MywgNzMsIDEyOCwgNzcsIDg3LCA3MywgMTI4LCA3NywgODcsIDY5LCA2OSwgMTI4LCA3NywgODcsIAotICAgIDY5LCAxMjgsIDc3LCA4NywgNjUsIDY1LCAxMjgsIDc3LCA4NywgNjUsIDEyOCwgNzcsIDg3LCAxMjgsIDc3LCAyMTUsIDc3LCAKLSAgICA4NiwgODMsIDEyOCwgNzcsIDg2LCA3OSwgODAsIDEyOCwgNzcsIDg2LCA3MywgMTI4LCA3NywgODYsIDY5LCA4NSwgNjUsIAotICAgIDY5LCA3OCwgNzEsIDY1LCA3NywgMTI4LCA3NywgODYsIDEyOCwgNzcsIDIxNCwgNzcsIDg1LCA4OCwgMTI4LCA3NywgODUsIAotICAgIDg1LCA4MywgNzMsIDc1LCA2NSwgODQsIDc5LCA2NSwgNzgsIDEyOCwgNzcsIDg1LCA4NSwgODIsIDY4LCA3MiwgNjUsIDc0LCAKLSAgICAxOTMsIDc3LCA4NSwgODUsIDEyOCwgNzcsIDg1LCA4NCwgMTI4LCA3NywgODUsIDgzLCA3MywgNjcsIDEyOCwgNzcsIDg1LCAKLSAgICA4MywgNzMsIDE5NSwgNzcsIDg1LCA4MywgNzIsIDgyLCA3OSwgNzksIDc3LCAxMjgsIDc3LCA4NSwgODMsIDcyLCA1MSwgCi0gICAgMTI4LCA3NywgODUsIDgzLCA3MiwgMTc5LCA3NywgODUsIDgzLCA3MiwgMTI4LCA3NywgODUsIDgzLCAyMDAsIDc3LCA4NSwgCi0gICAgODIsIDg4LCAxMjgsIDc3LCA4NSwgODIsIDcxLCA4NSwgNTAsIDEyOCwgNzcsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDg1LCAKLSAgICA4MiwgNjgsIDY1LCAxMjgsIDc3LCA4NSwgODIsIDY4LCAxOTMsIDc3LCA4NSwgODIsIDEyOCwgNzcsIDg1LCA4MSwgNjgsIAotICAgIDY1LCA3NywgMTI4LCA3NywgODUsIDgwLCAxMjgsIDc3LCA4NSwgNzksIDg4LCAxMjgsIDc3LCA4NSwgNzksIDg0LCAxMjgsIAotICAgIDc3LCA4NSwgNzksIDgwLCAxMjgsIDc3LCA4NSwgNzksIDc3LCA2NSwgNjksIDEyOCwgNzcsIDg1LCA3OSwgMTI4LCA3NywgCi0gICAgODUsIDc4LCA4MywgODUsIDY2LCAxMjgsIDc3LCA4NSwgNzgsIDY1LCA3MiwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCAKLSAgICA2OSwgODQsIDEyOCwgNzcsIDg1LCA3NiwgODQsIDczLCA4MywgNjksIDIxMiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgNzYsIAotICAgIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCA3MywgNjcsIDY1LCAKLSAgICA4NCwgNzMsIDc5LCAyMDYsIDc3LCA4NSwgNzYsIDg0LCA3MywgODAsIDc2LCAxOTcsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzksIAotICAgIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc3LCA4NSwgNzYsIDg0LCA3MywgNzcsIDY1LCA4MCwgMTI4LCA3NywgODUsIDc2LCA4NCwgCi0gICAgMjAxLCA3NywgODUsIDc1LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAxMjgsIDc3LCA4NSwgNzMsIDc4LCAxMjgsIDc3LCAKLSAgICA4NSwgNzEsIDgzLCAxMjgsIDc3LCA4NSwgNzEsIDEyOCwgNzcsIDg1LCAxOTksIDc3LCA4NSwgNjksIDEyOCwgNzcsIDg1LCAKLSAgICA2NywgNzIsIDEyOCwgNzcsIDg1LCA2NywgMjAwLCA3NywgODUsIDY3LCA2NSwgNjUsIDY4LCAxMjgsIDc3LCA4NSwgNjUsIAotICAgIDc4LCAxMjgsIDc3LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA4NSwgNDUsIDcxLCA2NSwgNjUsIDcyLCA3NiwgNjUsIDE5MywgCi0gICAgNzcsIDIxMywgNzcsIDgzLCAxMjgsIDc3LCA4MCwgNjUsIDEyOCwgNzcsIDc5LCA4OSwgNjUsIDczLCAxMjgsIDc3LCA3OSwgCi0gICAgODgsIDEyOCwgNzcsIDc5LCA4NiwgNzMsIDE5NywgNzcsIDc5LCA4NiwgNjksIDE5NiwgNzcsIDc5LCA4NSwgODQsIDcyLCAKLSAgICAxMjgsIDc3LCA3OSwgODUsIDg0LCAyMDAsIDc3LCA3OSwgODUsIDgzLCA2OSwgMTI4LCA3NywgNzksIDg1LCA4MywgMTk3LCAKLSAgICA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDgzLCAxMjgsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgCi0gICAgMTI4LCA3NywgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgMjA2LCA3NywgNzksIDg1LCA3OCwgMjEyLCA3NywgNzksIDg1LCAKLSAgICA3OCwgNjgsIDEyOCwgNzcsIDc5LCA4NSwgNzgsIDE5NiwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NywgNzksIAotICAgIDg0LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA4NSwgODUsIDc3LCAxMjgsIDc3LCA3OSwgODIsIDg0LCA2NSwgODIsIDEyOCwgCi0gICAgNzcsIDc5LCA4MiwgODAsIDcyLCA3OSwgNzYsIDc5LCA3MSwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNzksIDgyLCA3OCwgNzMsIAotICAgIDc4LCA3MSwgMTI4LCA3NywgNzksIDgwLCAxMjgsIDc3LCA3OSwgNzksIDgzLCA2OSwgNDUsIDY3LCA4MiwgNjksIDE5NywgCi0gICAgNzcsIDc5LCA3OSwgNzgsIDEyOCwgNzcsIDc5LCA3OSwgMjA2LCA3NywgNzksIDc5LCA3NywgODAsIDg1LCA4MSwgMTI4LCAKLSAgICA3NywgNzksIDc5LCA3NywgNjksIDg1LCA4NCwgMTI4LCA3NywgNzksIDc5LCAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MywgNjksIAotICAgIDY5LCA3OCwgMTI4LCA3NywgNzksIDc4LCA4NCwgNzIsIDEyOCwgNzcsIDc5LCA3OCwgODQsIDIwMCwgNzcsIDc5LCA3OCwgCi0gICAgODMsIDg0LCA2OSwgODIsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDgzLCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA3NywgNzksIDc4LCAKLSAgICA3OSwgODMsIDgwLCA2NSwgNjcsIDE5NywgNzcsIDc5LCA3OCwgNzksIDgyLCA2NSwgNzMsIDc2LCAxMjgsIDc3LCA3OSwgNzgsIAotICAgIDc5LCA3MSwgODIsIDY1LCA4MCwgMjAwLCA3NywgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgNzcsIDc3LCA3OSwgMjExLCA3NywgCi0gICAgNzksIDc4LCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA3NywgNzksIDc4LCA3OSwgNzAsIDc5LCA3OCwgNzMsIDY1LCA4MywgMTI4LCAKLSAgICA3NywgNzksIDc4LCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDc5LCA3OCwgNzUsIDY5LCA4OSwgMTI4LCA3NywgNzksIAotICAgIDc4LCA3NSwgNjksIDIxNywgNzcsIDc5LCA3OCwgNzMsIDEyOCwgNzcsIDc5LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgCi0gICAgODEsIDEyOCwgNzcsIDc5LCA3OCwgNjksIDIxNywgNzcsIDc5LCA3OCwgMTI4LCA3NywgNzksIDIwNiwgNzcsIDc5LCA3NiwgCi0gICAgMTI4LCA3NywgNzksIDcyLCA2NSwgNzcsIDc3LCA2NSwgMTk2LCA3NywgNzksIDY4LCA4NSwgNzYsIDIwNywgNzcsIDc5LCAKLSAgICA2OCwgNjksIDgzLCA4NCwgODksIDEyOCwgNzcsIDc5LCA2OCwgNjksIDc2LCA4MywgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIAotICAgIDEyOCwgNzcsIDc5LCA2OCwgNjksIDEyOCwgNzcsIDc5LCA2NiwgNzMsIDc2LCAxOTcsIDc3LCA3OSwgNjUsIDEyOCwgNzcsIAotICAgIDIwNywgNzcsIDc4LCA4OSwgNjUsIDIwNSwgNzcsIDc4LCA2NSwgODMsIDEyOCwgNzcsIDc3LCA4MywgODAsIDEyOCwgNzcsIAotICAgIDc3LCAxMjgsIDc3LCAyMDUsIDc3LCA3NiwgNjUsIDEyOCwgNzcsIDc2LCAxMjgsIDc3LCA3NSwgODAsIDY1LCA4MiwgNjUsIAotICAgIDIwOSwgNzcsIDczLCA4OCwgMTI4LCA3NywgNzMsIDg0LCAxMjgsIDc3LCA3MywgODMsIDgyLCA2NSwgMTI4LCA3NywgNzMsIAotICAgIDgyLCA3MywgNjYsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDc3LCA3MywgODIsIDczLCAxMjgsIDc3LCA3MywgODIsIDY5LCA2OCwgCi0gICAgMTI4LCA3NywgNzMsIDgwLCAxMjgsIDc3LCA3MywgNzgsIDg5LCAxMjgsIDc3LCA3MywgNzgsIDg1LCA4MywgNDUsIDc5LCAKLSAgICA4MiwgNDUsIDgwLCA3NiwgODUsIDIxMSwgNzcsIDczLCA3OCwgODUsIDgzLCAxMjgsIDc3LCA3MywgNzgsIDczLCA4MywgODQsIAotICAgIDY5LCA4MiwgMTI4LCA3NywgNzMsIDc4LCA3MywgNzcsIDY1LCAxMjgsIDc3LCA3MywgNzgsIDczLCA2OCwgNzMsIDgzLCA2NywgCi0gICAgMTI4LCA3NywgNzMsIDc4LCA3MywgNjYsIDg1LCA4MywgMTI4LCA3NywgNzMsIDc3LCA2OSwgMTI4LCA3NywgNzMsIDc3LCAKLSAgICAxMjgsIDc3LCA3MywgNzYsIDc2LCA3MywgNzksIDc4LCAyMTEsIDc3LCA3MywgNzYsIDc2LCA2OSwgODQsIDEyOCwgNzcsIAotICAgIDczLCA3NiwgNzYsIDE5NywgNzcsIDczLCA3NiwgMjA0LCA3NywgNzMsIDc2LCA3NSwgMjE3LCA3NywgNzMsIDc2LCAxMjgsIAotICAgIDc3LCA3MywgNzUsIDg1LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA3MywgNzUsIDgyLCA3OSwgMjA2LCA3NywgNzMsIDc1LCA4MiwgCi0gICAgNzMsIDEyOCwgNzcsIDczLCA3MywgNzgsIDEyOCwgNzcsIDczLCA3MywgMTI4LCA3NywgNzMsIDE5OSwgNzcsIDczLCA2OSwgCi0gICAgODgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NywgNzMsIDY5LCAKLSAgICA4NSwgNzcsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgCi0gICAgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIAotICAgIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCAKLSAgICA4MywgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzcsIAotICAgIDczLCA2OSwgODUsIDc3LCA0NSwgODAsIDY1LCA3OCwgODMsIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCAKLSAgICA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDY3LCA3MywgNjksIDg1LCA2NywgCi0gICAgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCA3NywgNzMsIDY5LCAKLSAgICA4NSwgMjA1LCA3NywgNzMsIDY5LCA4MCwgMTI4LCA3NywgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzMsIDY5LCAxMjgsIDc3LCAKLSAgICA3MywgNjgsIDc2LCA3MywgNzgsIDE5NywgNzcsIDczLCA2OCwgNjgsIDc2LCA2OSwgNDUsIDg3LCA2OSwgNzYsIDgzLCAyMDAsIAotICAgIDc3LCA3MywgNjgsIDY4LCA3NiwgMTk3LCA3NywgNzMsIDE5NiwgNzcsIDczLCA2NywgODIsIDc5LCA4MywgNjcsIDc5LCA4MCwgCi0gICAgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIDc5LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDczLCA2NywgODIsIAotICAgIDIwNywgNzcsIDczLCA2NywgMjEwLCA3NywgNzIsIDkwLCAxMjgsIDc3LCA3MiwgNjUsIDEyOCwgNzcsIDcyLCAxMjgsIDc3LCAKLSAgICA3MSwgODUsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDg0LCAxMjgsIDc3LCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3NywgNzEsIAotICAgIDg1LCA4MiwgMTI4LCA3NywgNzEsIDg1LCA4MCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgCi0gICAgNzksIDgwLCAxMjgsIDc3LCA3MSwgODUsIDc5LCAxMjgsIDc3LCA3MSwgODUsIDEyOCwgNzcsIDcxLCA3OSwgODgsIDEyOCwgCi0gICAgNzcsIDcxLCA3OSwgODQsIDEyOCwgNzcsIDcxLCA3OSwgODAsIDEyOCwgNzcsIDcxLCA3OSwgMTI4LCA3NywgNzEsIDIwNywgCi0gICAgNzcsIDcxLCA3MywgNjksIDg4LCAxMjgsIDc3LCA3MSwgNzMsIDY5LCAxMjgsIDc3LCA3MSwgNjksIDg4LCAxMjgsIDc3LCAKLSAgICA3MSwgNjksIDgwLCAxMjgsIDc3LCA3MSwgNjksIDEyOCwgNzcsIDcxLCA2NiwgODUsIDEyOCwgNzcsIDcxLCA2NiwgNzksIAotICAgIDc5LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCA3MCwgODUsIDc3LCAxMjgsIDc3LCA3MSwgNjYsIDc5LCAxMjgsIDc3LCA3MSwgCi0gICAgNjYsIDczLCAxMjgsIDc3LCA3MSwgNjYsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDc4LCAxMjgsIDc3LCAKLSAgICA3MSwgNjYsIDY5LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2OSwgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCA4MSwgCi0gICAgMTI4LCA3NywgNzEsIDY2LCA2NSwgODMsIDY1LCAxMjgsIDc3LCA3MSwgNjUsIDg4LCAxMjgsIDc3LCA3MSwgNjUsIDg0LCAKLSAgICAxMjgsIDc3LCA3MSwgNjUsIDgwLCAxMjgsIDc3LCA3MSwgNjUsIDEyOCwgNzcsIDcxLCAxMjgsIDc3LCA3MCwgNzksIDc4LCAKLSAgICAxMjgsIDc3LCA3MCwgNzksIDIwNiwgNzcsIDcwLCA3OSwgMTI4LCA3NywgNzAsIDczLCA4OSwgNjUsIDgxLCAxMjgsIDc3LCAKLSAgICA3MCwgNzMsIDY5LCA2OSwgMTI4LCA3NywgNzAsIDY5LCA4NSwgODQsIDEyOCwgNzcsIDcwLCA2OSwgODUsIDgxLCAxMjgsIAotICAgIDc3LCA3MCwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzcsIDcwLCA2NSwgNjUsIDEyOCwgNzcsIDY5LCA5MCwgOTAsIDc5LCAKLSAgICAxMjgsIDc3LCA2OSwgODgsIDEyOCwgNzcsIDY5LCA4NSwgMjEyLCA3NywgNjksIDg1LCA4MSwgMTI4LCA3NywgNjksIDg1LCAKLSAgICA3OCwgNzQsIDc5LCA3NywgNzgsIDY4LCA2OSwgODUsIDgxLCAxMjgsIDc3LCA2OSwgODUsIDc4LCAxMjgsIDc3LCA2OSwgODQsIAotICAgIDgyLCA3OSwgMTI4LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA3NywgNjksIDg0LCA4MiwgNzMsIDY1LCAKLSAgICAxMjgsIDc3LCA2OSwgODQsIDgyLCA2OSwgODQsIDY5LCAyMTEsIDc3LCA2OSwgODQsIDc5LCA2NiwgNjksIDc2LCA4NSwgODMsIAotICAgIDEyOCwgNzcsIDY5LCA4NCwgNjksIDc1LCAxMjgsIDc3LCA2OSwgODQsIDY5LCA3MSwgMTI4LCA3NywgNjksIDg0LCA2NSwgCi0gICAgNzYsIDEyOCwgNzcsIDY5LCA4NCwgMTkzLCA3NywgNjksIDgzLCA4MywgNjksIDc4LCA3MywgNjUsIDIwNiwgNzcsIDY5LCAKLSAgICA4MywgODMsIDY1LCA3MSwgNjksIDEyOCwgNzcsIDY5LCA4MywgODMsIDY1LCA3MSwgMTk3LCA3NywgNjksIDgzLCA3OSwgCi0gICAgMTI4LCA3NywgNjksIDgzLCA3MywgMTI4LCA3NywgNjksIDgzLCA3MiwgMTI4LCA3NywgNjksIDgyLCA3OSwgNzMsIDg0LCAKLSAgICA3MywgMTk1LCA3NywgNjksIDgyLCA3NSwgNzIsIDY1LCAxMjgsIDc3LCA2OSwgODIsIDc1LCA3MiwgMTkzLCA3NywgNjksIAotICAgIDgyLCA3MywgNjgsIDczLCA2NSwgNzgsIDgzLCAxMjgsIDc3LCA2OSwgODIsIDczLCAxMjgsIDc3LCA2OSwgODIsIDcxLCA2OSwgCi0gICAgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCA4OSwgMTI4LCA3NywgNjksIDgyLCA2NywgODUsIDgyLCAyMTcsIDc3LCAKLSAgICA2OSwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzcsIDY5LCA3OCwgMTI4LCA3NywgNjksIDc3LCA3OSwgMTI4LCA3NywgNjksIAotICAgIDc3LCA2NiwgNjksIDgyLCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NywgNjksIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc3LCA2OSwgCi0gICAgNzcsIDY2LCA2OSwgMjEwLCA3NywgNjksIDc3LCA0NSwgODEsIDc5LCA4MCwgNzIsIDEyOCwgNzcsIDY5LCA3NywgMTI4LCAKLSAgICA3NywgNjksIDIwNSwgNzcsIDY5LCA3NiwgNzksIDY4LCA3MywgMTk1LCA3NywgNjksIDc2LCA3MywgNzUsIDEyOCwgNzcsIAotICAgIDY5LCA3MywgOTAsIDczLCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4NCwgNzksIDc4LCAxMjgsIDc3LCA2OSwgNzEsIDY1LCA4MCwgCi0gICAgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDc2LCA3MywgMTI4LCA3NywgNjksIDY5LCA4NCwgNzksIDgyLCAKLSAgICA4NSwgMTI4LCA3NywgNjksIDY5LCA4NCwgMTI4LCA3NywgNjksIDY5LCA3NywgODUsIDEyOCwgNzcsIDY5LCA2OSwgNzcsIAotICAgIDEyOCwgNzcsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc3LCA2OSwgNjgsIDczLCA4NSwgNzcsIDEyOCwgNzcsIDY5LCA2OCwgCi0gICAgNzMsIDg1LCAyMDUsIDc3LCA2OSwgNjgsIDczLCA2NywgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjksIDY4LCA3MywgNjcsIDY1LCAKLSAgICAyMDQsIDc3LCA2OSwgNjUsIDg0LCAxMjgsIDc3LCA2OSwgNjUsIDIxMiwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIAotICAgIDE5NiwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNzcsIDY5LCA2NSwgODMsIDg1LCA4MiwgMTk3LCA3NywgCi0gICAgNjgsIDg1LCAyMDYsIDc3LCAxOTYsIDc3LCA2NywgNzIsIDIxMywgNzcsIDY3LCA3MiwgNjUsIDIwNiwgNzcsIDE5NSwgNzcsIAotICAgIDY2LCA4NSwgNzksIDgxLCAxMjgsIDc3LCA2NiwgODUsIDc5LCAxMjgsIDc3LCA2NiwgODUsIDY5LCAxMjgsIDc3LCA2NiwgCi0gICAgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY2LCA4NSwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNzksIDc5LCAxMjgsIDc3LCAKLSAgICA2NiwgNzksIDEyOCwgNzcsIDY2LCA3MywgODQsIDEyOCwgNzcsIDY2LCA3MywgMjEyLCA3NywgNjYsIDczLCA4MiwgNzMsIAotICAgIDY5LCA2OSwgNzgsIDEyOCwgNzcsIDY2LCA3MywgMTI4LCA3NywgNjYsIDY5LCA4NSwgODgsIDEyOCwgNzcsIDY2LCA2OSwgCi0gICAgODUsIDgyLCA3MywgMTI4LCA3NywgNjYsIDY5LCA4NSwgNzcsIDEyOCwgNzcsIDY2LCA2OSwgODIsIDY1LCA2OSwgMTI4LCAKLSAgICA3NywgNjYsIDY5LCA3OCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgNzUsIDY5LCA2OSwgODQsIDEyOCwgNzcsIDY2LCA2OSwgNjksIAotICAgIDEyOCwgNzcsIDY2LCA2OSwgMTI4LCA3NywgNjYsIDY1LCA4MSwgMTI4LCA3NywgNjYsIDY1LCA3OCwgODksIDczLCAxMjgsIAotICAgIDc3LCA2NiwgNjUsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDY1LCA3NSwgNjksIDg0LCAxMjgsIDc3LCA2NiwgCi0gICAgNjUsIDY1LCAxMjgsIDc3LCA2NiwgNjUsIDE5MywgNzcsIDY2LCAxOTMsIDc3LCA2NiwgNTIsIDEyOCwgNzcsIDY2LCA1MSwgCi0gICAgMTI4LCA3NywgNjYsIDUwLCAxMjgsIDc3LCA2NiwgMTI4LCA3NywgMTk0LCA3NywgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3NywgNjUsIDg5LCAxMjgsIDc3LCA2NSwgODgsIDczLCA3NywgNjUsIDEyOCwgNzcsIDY1LCA4OCwgMTI4LCA3NywgCi0gICAgNjUsIDg1LCAxMjgsIDc3LCA2NSwgODQsIDg0LCA3OSwgNjcsIDc1LCAxMjgsIDc3LCA2NSwgODQsIDgyLCA3MywgODgsIAotICAgIDEyOCwgNzcsIDY1LCA4NCwgNjksIDgyLCA3MywgNjUsIDc2LCA4MywgMTI4LCA3NywgNjUsIDg0LCAxMjgsIDc3LCA2NSwgCi0gICAgODMsIDIxMywgNzcsIDY1LCA4MywgODMsIDczLCA3OCwgNzEsIDEyOCwgNzcsIDY1LCA4MywgODMsIDY1LCA3MSwgNjksIAotICAgIDEyOCwgNzcsIDY1LCA4MywgNzksIDgyLCAxOTMsIDc3LCA2NSwgODMsIDc1LCAxMjgsIDc3LCA2NSwgODMsIDcyLCA3MCwgCi0gICAgNjUsIDY1LCA4NCwgMTI4LCA3NywgNjUsIDgzLCA3MiwgNTAsIDEyOCwgNzcsIDY1LCA4MywgNjcsIDg1LCA3NiwgNzMsIDc4LCAKLSAgICAxOTcsIDc3LCA2NSwgODIsIDg5LCAxMjgsIDc3LCA2NSwgODIsIDg1LCA3NSwgODUsIDEyOCwgNzcsIDY1LCA4MiwgODQsIAotICAgIDg5LCA4MiwgNzMsIDE5MywgNzcsIDY1LCA4MiwgODIsIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA4MiwgODIsIDczLCA2NSwgCi0gICAgNzEsIDE5NywgNzcsIDY1LCA4MiwgNzUsIDY5LCA4MiwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUyLCAxMjgsIDc3LCAKLSAgICA2NSwgODIsIDc1LCA0NSwgNTEsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MCwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIAotICAgIDQ5LCAxMjgsIDc3LCA2NSwgODIsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA3MiwgMTI4LCA3NywgNjUsIDgyLCA2NywgCi0gICAgNjUsIDg0LCA3OSwgNDUsIDgzLCA4NCwgNjUsIDY3LCA2NywgNjUsIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIAotICAgIDg0LCA3OSwgMTI4LCA3NywgNjUsIDgyLCA2NywgNjUsIDgzLCA3MywgODQsIDY5LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgCi0gICAgODQsIDY1LCAxMjgsIDc3LCA2NSwgODIsIDY2LCA4NSwgODQsIDE5MywgNzcsIDY1LCA4MiwgMTI4LCA3NywgNjUsIDgxLCAKLSAgICA2NSwgNzAsIDEyOCwgNzcsIDY1LCA4MSwgMTI4LCA3NywgNjUsIDgwLCA3NiwgMTk3LCA3NywgNjUsIDgwLCA3MywgODEsIAotICAgIDEyOCwgNzcsIDY1LCAyMDgsIDc3LCA2NSwgNzksIDEyOCwgNzcsIDY1LCA3OCwgODMsIDg5LCA3OSwgNzgsIDEyOCwgNzcsIAotICAgIDY1LCA3OCwgODMsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAyMTgsIDc3LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3NywgNjUsIDc4LCA3MSwgNjUsIDc2LCA2NSwgNzcsIDEyOCwgNzcsIDY1LCA3OCwgNjgsIDY1LCA3MywgNzYsIDczLCAKLSAgICA3OCwgMTk5LCA3NywgNjUsIDc4LCA2OCwgNjUsIDczLCAxOTUsIDc3LCA2NSwgNzgsIDY3LCA3MiwgMjEzLCA3NywgNjUsIAotICAgIDc4LCA2NSwgNjcsIDc2LCA2OSwgODMsIDEyOCwgNzcsIDY1LCA3NiwgODQsIDY5LCA4MywgMTk3LCA3NywgNjUsIDc2LCA2OSwgCi0gICAgNjksIDgyLCA3MywgMTI4LCA3NywgNjUsIDc2LCA2OSwgMTI4LCA3NywgNjUsIDc2LCAxOTcsIDc3LCA2NSwgNzYsIDY1LCAKLSAgICA3NSwgNzksIDIwNiwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgNjUsIDEyOCwgNzcsIDY1LCA3NSwgODMsIDg1LCA4MiwgCi0gICAgMTkzLCA3NywgNjUsIDczLCA5MCwgNjksIDEyOCwgNzcsIDY1LCA3MywgODksIDY1LCA3NywgNzksIDc1LCAxMjgsIDc3LCAKLSAgICA2NSwgNzMsIDg0LCA2NSwgNzMsIDc1LCA3MiwgODUsIDEyOCwgNzcsIDY1LCA3MywgODIsIDg1LCAxMjgsIDc3LCA2NSwgNzMsIAotICAgIDc3LCA4NSwgNjUsIDc4LCAxMjgsIDc3LCA2NSwgNzMsIDc3LCA2NSwgNzYsIDY1LCA3MywgMTI4LCA3NywgNjUsIDczLCA3NiwgCi0gICAgNjYsIDc5LCAyMTYsIDc3LCA2NSwgNzMsIDc1LCA4NSwgODIsIDc5LCAxMjgsIDc3LCA2NSwgNzMsIDY4LCA2OSwgNzgsIAotICAgIDEyOCwgNzcsIDY1LCA3MywgMTI4LCA3NywgNjUsIDcyLCA3NCwgNzksIDc4LCAxOTksIDc3LCA2NSwgNzIsIDcyLCA2NSwgCi0gICAgMTI4LCA3NywgNjUsIDcyLCA2NSwgODAsIDgyLCA2NSwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgNjUsIDc1LCAKLSAgICA3MiwgMTI4LCA3NywgNjUsIDcyLCA2NSwgNjUsIDgwLCA4MiwgNjUsIDY1LCA3OCwgMTkzLCA3NywgNjUsIDcyLCAxMjgsIAotICAgIDc3LCA2NSwgNzEsIDc4LCA3MywgNzAsIDg5LCA3MywgNzgsIDE5OSwgNzcsIDY1LCA2OSwgODMsIDczLCAxMjgsIDc3LCA2NSwgCi0gICAgNjksIDc4LCA4OSwgNzMsIDEyOCwgNzcsIDY1LCA2OSwgNzgsIDc0LCA2OSwgODQsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDg2LCAKLSAgICA2OSwgODUsIDg4LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA3NSwgODAsIDY5LCA3OCwgMTI4LCA3NywgNjUsIDY5LCA3NywgNzEsIAotICAgIDY2LCA3MywgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc3LCA2NiwgNzEsIDY2LCA3MywgNjksIDY5LCAxMjgsIDc3LCA2NSwgCi0gICAgNjksIDc3LCA2NiwgNjUsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDEyOCwgNzcsIDY1LCA2OSwgNzYsIDY5LCA2OSwgMTI4LCAKLSAgICA3NywgNjUsIDY5LCA3NSwgNjksIDg1LCA4MCwgMTI4LCA3NywgNjUsIDY4LCA4OSwgNjUsIDEyOCwgNzcsIDY1LCA2OCwgODUsIAotICAgIDEyOCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAyMDAsIDc3LCA2NSwgNjgsIDY4LCA2NSwgMTI4LCA3NywgNjUsIDY4LCA2OCwgCi0gICAgMTkzLCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCAKLSAgICA3OSwgNzgsIDQ1LCA2NiwgODIsIDY5LCA4NiwgNjksIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDY1LCA2NywgCi0gICAgODUsIDg0LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgMjA2LCAKLSAgICA3NywgNjUsIDY3LCA3MiwgNzMsIDc4LCA2OSwgMTI4LCA3NywgNjUsIDY1LCA4OSwgODksIDY1LCA2NSwgMTI4LCA3NywgNjUsIAotICAgIDY1LCA3MywgMTI4LCA3NywgNjUsIDY1LCAxMjgsIDc3LCA2NSwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNTIsIDEyOCwgNzcsIAotICAgIDQ4LCA1MiwgNTEsIDEyOCwgNzcsIDQ4LCA1MiwgNTAsIDEyOCwgNzcsIDQ4LCA1MiwgNDksIDEyOCwgNzcsIDQ4LCA1MiwgCi0gICAgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNTIsIDQ4LCAxMjgsIDc3LCA0OCwgNTEsIDU3LCAxMjgsIDc3LCA0OCwgNTEsIDU2LCAKLSAgICAxMjgsIDc3LCA0OCwgNTEsIDU1LCAxMjgsIDc3LCA0OCwgNTEsIDU0LCAxMjgsIDc3LCA0OCwgNTEsIDUzLCAxMjgsIDc3LCAKLSAgICA0OCwgNTEsIDUyLCAxMjgsIDc3LCA0OCwgNTEsIDUxLCA2NiwgMTI4LCA3NywgNDgsIDUxLCA1MSwgNjUsIDEyOCwgNzcsIAotICAgIDQ4LCA1MSwgNTEsIDEyOCwgNzcsIDQ4LCA1MSwgNTAsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIDY1LCAxMjgsIDc3LCA0OCwgCi0gICAgNTEsIDQ5LCAxMjgsIDc3LCA0OCwgNTEsIDQ4LCAxMjgsIDc3LCA0OCwgNTAsIDU3LCAxMjgsIDc3LCA0OCwgNTAsIDU2LCAKLSAgICA2NSwgMTI4LCA3NywgNDgsIDUwLCA1NiwgMTI4LCA3NywgNDgsIDUwLCA1NSwgMTI4LCA3NywgNDgsIDUwLCA1NCwgMTI4LCAKLSAgICA3NywgNDgsIDUwLCA1MywgMTI4LCA3NywgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgNTIsIDEyOCwgNzcsIAotICAgIDQ4LCA1MCwgNTEsIDEyOCwgNzcsIDQ4LCA1MCwgNTAsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDUwLCAxMjgsIDc3LCA0OCwgCi0gICAgNTAsIDQ5LCAxMjgsIDc3LCA0OCwgNTAsIDQ4LCAxMjgsIDc3LCA0OCwgNDksIDU3LCAxMjgsIDc3LCA0OCwgNDksIDU2LCAKLSAgICAxMjgsIDc3LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NSwgMTI4LCA3NywgNDgsIDQ5LCA1NCwgNjUsIAotICAgIDEyOCwgNzcsIDQ4LCA0OSwgNTQsIDEyOCwgNzcsIDQ4LCA0OSwgNTMsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDUzLCAxMjgsIAotICAgIDc3LCA0OCwgNDksIDUyLCAxMjgsIDc3LCA0OCwgNDksIDUxLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MiwgMTI4LCA3NywgCi0gICAgNDgsIDQ5LCA1MCwgNzEsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDcwLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2OSwgMTI4LCAKLSAgICA3NywgNDgsIDQ5LCA1MCwgNjgsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDY3LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NiwgCi0gICAgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNTAsIDEyOCwgNzcsIDQ4LCA0OSwgNDksIDEyOCwgCi0gICAgNzcsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDQ4LCAxMjgsIDc3LCA0OCwgNDgsIDU3LCAxMjgsIDc3LCAKLSAgICA0OCwgNDgsIDU2LCAxMjgsIDc3LCA0OCwgNDgsIDU1LCAxMjgsIDc3LCA0OCwgNDgsIDU0LCAxMjgsIDc3LCA0OCwgNDgsIAotICAgIDUzLCAxMjgsIDc3LCA0OCwgNDgsIDUyLCAxMjgsIDc3LCA0OCwgNDgsIDUxLCA2NSwgMTI4LCA3NywgNDgsIDQ4LCA1MSwgCi0gICAgMTI4LCA3NywgNDgsIDQ4LCA1MCwgMTI4LCA3NywgNDgsIDQ4LCA0OSwgNjYsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDY1LCAKLSAgICAxMjgsIDc3LCA0OCwgNDgsIDQ5LCAxMjgsIDc2LCAyMTgsIDc2LCA4OSwgODksIDEyOCwgNzYsIDg5LCA4OCwgMTI4LCA3NiwgCi0gICAgODksIDg0LCAxMjgsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDc2LCA4OSwgODIsIDEyOCwgNzYsIDg5LCA4MCwgMTI4LCA3NiwgCi0gICAgODksIDY4LCA3MywgNjUsIDIwNiwgNzYsIDg5LCA2NywgNzMsIDY1LCAyMDYsIDc2LCA4OCwgMTI4LCA3NiwgODcsIDc5LCAKLSAgICA3OSwgMTI4LCA3NiwgODcsIDc5LCAxMjgsIDc2LCA4NywgNzMsIDczLCAxMjgsIDc2LCA4NywgNzMsIDEyOCwgNzYsIDg3LCAKLSAgICA2OSwgMTI4LCA3NiwgODcsIDY1LCA2NSwgMTI4LCA3NiwgODcsIDY1LCAxMjgsIDc2LCA4NSwgODgsIDEyOCwgNzYsIDg1LCAKLSAgICA4NSwgMTI4LCA3NiwgODUsIDg0LCAxMjgsIDc2LCA4NSwgODIsIDg4LCAxMjgsIDc2LCA4NSwgODAsIDEyOCwgNzYsIDg1LCAKLSAgICA3OSwgODgsIDEyOCwgNzYsIDg1LCA3OSwgODQsIDEyOCwgNzYsIDg1LCA3OSwgODAsIDEyOCwgNzYsIDg1LCA3OSwgMTI4LCAKLSAgICA3NiwgODUsIDc4LCA3MSwgODMsIDczLCAxMjgsIDc2LCA4NSwgNzgsIDY1LCA4NCwgMTk3LCA3NiwgODUsIDIwNSwgNzYsIAotICAgIDg1LCA3NiwgMTI4LCA3NiwgODUsIDczLCA4MywgMTI4LCA3NiwgODUsIDcyLCA4NSwgODIsIDEyOCwgNzYsIDg1LCA3MiwgCi0gICAgMTI4LCA3NiwgODUsIDcxLCA3MSwgNjUsIDcxLCA2OSwgMTI4LCA3NiwgODUsIDcxLCA2NSwgNzYsIDEyOCwgNzYsIDg1LCAKLSAgICA3MSwgNjUsIDIwNCwgNzYsIDg1LCA2OSwgMTI4LCA3NiwgODUsIDY1LCA2OSwgODAsIDEyOCwgNzYsIDg1LCA1MSwgMTI4LCAKLSAgICA3NiwgODUsIDUwLCAxMjgsIDc2LCA4NSwgMTc4LCA3NiwgODIsIDc5LCAxMjgsIDc2LCA4MiwgNzcsIDEyOCwgNzYsIDgyLCAKLSAgICA2OSwgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCA2OSwgMTI4LCA3NiwgNzksIDkwLCA2OSwgNzgsIDcxLCAxOTcsIAotICAgIDc2LCA3OSwgODgsIDEyOCwgNzYsIDc5LCA4NywgNjksIDgyLCA2OSwgMTk2LCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3NiwgCi0gICAgNzksIDg3LCA0NSwgMTg1LCA3NiwgNzksIDg2LCAxOTcsIDc2LCA3OSwgODUsIDgyLCA2OSwgMTI4LCA3NiwgNzksIDg1LCAKLSAgICA2OCwgODMsIDgwLCA2OSwgNjUsIDc1LCA2OSwgODIsIDEyOCwgNzYsIDc5LCA4NSwgNjgsIDc2LCAyMTcsIDc2LCA3OSwgODQsIAotICAgIDg1LCA4MywgMTI4LCA3NiwgNzksIDg0LCAxMjgsIDc2LCA3OSwgODIsIDgyLCA4OSwgMTI4LCA3NiwgNzksIDgyLCA4MiwgCi0gICAgNjUsIDczLCA3OCwgNjksIDEyOCwgNzYsIDc5LCA4MSwgMTI4LCA3NiwgNzksIDgwLCAxMjgsIDc2LCA3OSwgNzksIDg0LCAKLSAgICAxMjgsIDc2LCA3OSwgNzksIDgwLCA2OSwgMTk2LCA3NiwgNzksIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCAyMDgsIDc2LCAKLSAgICA3OSwgNzksIDc4LCAxMjgsIDc2LCA3OSwgNzksIDIwMywgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzksIDc4LCA4MywgODUsIAotICAgIDc3LCAxMjgsIDc2LCA3OSwgNzgsIDcxLCA2NSwgMTI4LCA3NiwgNzksIDc4LCA3MSwgMTkzLCA3NiwgNzksIDc4LCA3MSwgCi0gICAgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA4OSwgODIsIDEyOCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIAotICAgIDY1LCA3OCwgNjcsIDcyLCA0NSwgODMsIDc5LCAyMDQsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCAKLSAgICA3MiwgNDUsIDc5LCA4MywgMjExLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3NywgCi0gICAgNjUsIDY4LCAyMTAsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDcyLCA2NSwgNzEsIAotICAgIDY1LCA3NiwgMjA0LCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA2NSwgMjEwLCA3NiwgCi0gICAgNzksIDc3LCA3NywgNjUsIDY5LCAxMjgsIDc2LCA3OSwgNzcsIDEyOCwgNzYsIDc5LCAyMDUsIDc2LCA3OSwgNzYsIDc2LCAKLSAgICA3MywgODAsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc2LCA3NiwgMTI4LCA3NiwgNzksIDcxLCAyMTAsIDc2LCA3OSwgNzEsIAotICAgIDc5LCA4NCwgODksIDgwLCAxOTcsIDc2LCA3OSwgNzEsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDc2LCA3OSwgNzEsIDEyOCwgCi0gICAgNzYsIDc5LCA2OCwgNjksIDgzLCA4NCwgNzksIDc4LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA3OSwgNzcsIDc5LCA4NCwgNzMsIAotICAgIDg2LCA2OSwgMTI4LCA3NiwgNzksIDY3LCA3NSwgNzMsIDc4LCA3MSwgNDUsIDgzLCA3MiwgNzMsIDcwLCAyMTIsIDc2LCA3OSwgCi0gICAgNjcsIDIwMywgNzYsIDc5LCA2NywgNjUsIDg0LCA3MywgODYsIDY5LCAxMjgsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDc2LCA3OSwgNjUsIDEyOCwgNzYsIDc4LCAxMjgsIDc2LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA3NiwgNzksIDc5LCAKLSAgICAxMjgsIDc2LCA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA4NSwgMTI4LCA3NiwgNzYsIDc2LCA3OSwgNzksIAotICAgIDEyOCwgNzYsIDc2LCA3NiwgNzksIDEyOCwgNzYsIDc2LCA3NiwgNzMsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDczLCAxMjgsIAotICAgIDc2LCA3NiwgNzYsIDY5LCA2OSwgMTI4LCA3NiwgNzYsIDc2LCA2OSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgODUsIDEyOCwgCi0gICAgNzYsIDc2LCA3NiwgNjUsIDczLCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA2NSwgMTI4LCA3NiwgNzYsIDc2LCA2NSwgMTI4LCAKLSAgICA3NiwgNzYsIDc2LCAxMjgsIDc2LCA3NCwgODUsIDY4LCA3MywgNzQsIDY5LCAxMjgsIDc2LCA3NCwgNjksIDEyOCwgNzYsIAotICAgIDc0LCAxMjgsIDc2LCA3MywgODgsIDEyOCwgNzYsIDczLCA4NywgNzgsIDEyOCwgNzYsIDczLCA4NiwgODIsIDE5NywgNzYsIAotICAgIDczLCA4NCwgODQsIDc2LCAxOTcsIDc2LCA3MywgODQsIDg0LCA2OSwgMjEwLCA3NiwgNzMsIDg0LCA4MiwgMTkzLCA3NiwgCi0gICAgNzMsIDg0LCAxMjgsIDc2LCA3MywgODMsIDIxMywgNzYsIDczLCA4MiwgMTkzLCA3NiwgNzMsIDgxLCA4NSwgNzMsIDE5NiwgCi0gICAgNzYsIDczLCA4MSwgMTI4LCA3NiwgNzMsIDgwLCA4MywgODQsIDczLCA2NywgNzUsIDEyOCwgNzYsIDczLCA3OCwgNzUsIDczLCAKLSAgICA3OCwgMTk5LCA3NiwgNzMsIDc4LCAyMDMsIDc2LCA3MywgNzgsIDcxLCA4MywgNjUsIDEyOCwgNzYsIDczLCA3OCwgNjksIAotICAgIDgzLCAxMjgsIDc2LCA3MywgNzgsIDY5LCAyMTEsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTcsIDEyOCwgNzYsIDczLCA3OCwgCi0gICAgNjksIDQ1LCA1NSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDUxLCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNDksIAotICAgIDEyOCwgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDUwLCAxMjgsIDc2LCA3MywgCi0gICAgNzcsIDc3LCA4NSwgMTI4LCA3NiwgNzMsIDc3LCA3NywgMjEzLCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAxOTYsIDc2LCAKLSAgICA3MywgNzcsIDczLCA4NCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc2LCA3MywgNzcsIDczLCA4NCwgMTI4LCA3NiwgNzMsIAotICAgIDc3LCA2OSwgMTI4LCA3NiwgNzMsIDc3LCA2NiwgMjEzLCA3NiwgNzMsIDc2LCA4OSwgMTI4LCA3NiwgNzMsIDc2LCA3MywgCi0gICAgODQsIDcyLCAxMjgsIDc2LCA3MywgNzYsIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCAKLSAgICA3NiwgNzMsIDcxLCA3MiwgODQsIDcyLCA3OSwgODUsIDgzLCA2OSwgMTI4LCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzYsIAotICAgIDczLCA3MCwgNjksIDEyOCwgNzYsIDczLCA2OSwgODgsIDEyOCwgNzYsIDczLCA2OSwgODQsIDEyOCwgNzYsIDczLCA2OSwgCi0gICAgODAsIDEyOCwgNzYsIDczLCA2OSwgNjksIDEyOCwgNzYsIDczLCA2OSwgMTI4LCA3NiwgNzMsIDY4LCAxMjgsIDc2LCA3MywgCi0gICAgNjYsIDgyLCA2NSwgMTI4LCA3NiwgNzMsIDY2LCA2OSwgODIsIDg0LCA4OSwgMTI4LCA3NiwgNzMsIDY1LCA2NiwgNzMsIDc2LCAKLSAgICA3MywgODQsIDIxNywgNzYsIDcyLCA3MywgNzMsIDEyOCwgNzYsIDcyLCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCi0gICAgMTI4LCA3NiwgNzIsIDY1LCAxOTksIDc2LCA3MiwgNjUsIDY1LCAxMjgsIDc2LCA3MiwgMTI4LCA3NiwgNjksIDkwLCA3MiwgCi0gICAgMTI4LCA3NiwgNjksIDg4LCAxMjgsIDc2LCA2OSwgODYsIDY5LCAyMDQsIDc2LCA2OSwgODUsIDc3LCAxMjgsIDc2LCA2OSwgCi0gICAgODUsIDY1LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NiwgNjksIDg1LCAxMjgsIDc2LCAKLSAgICA2OSwgMjEzLCA3NiwgNjksIDg0LCA4NCwgNjksIDgyLCA4MywgMTI4LCA3NiwgNjksIDg0LCA4NCwgNjksIDgyLCAxMjgsIAotICAgIDc2LCA2OSwgMjEyLCA3NiwgNjksIDgzLCA4MywgNjksIDIxMCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgCi0gICAgMTI4LCA3NiwgNjksIDgzLCA4MywgNDUsIDg0LCA3MiwgNjUsIDIwNiwgNzYsIDY5LCA4MCwgMTI4LCA3NiwgNjksIDc5LCAKLSAgICA4MCwgNjUsIDgyLCA2OCwgMTI4LCA3NiwgNjksIDc5LCAxMjgsIDc2LCA2OSwgNzgsIDg0LCA3MywgNjcsIDg1LCA3NiwgNjUsIAotICAgIDIxMCwgNzYsIDY5LCA3OCwgNzMsIDgzLCAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgNzIsIDY5LCA3OCwgNjksIDgyLCAKLSAgICAxMjgsIDc2LCA2OSwgNzgsIDcxLCA4NCwgMjAwLCA3NiwgNjksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIDY5LCA3OCwgNzEsIAotICAgIDE5MywgNzYsIDY5LCA3NywgNzksIDc4LCAxMjgsIDc2LCA2OSwgNzcsIDc5LCA3MywgMTI4LCA3NiwgNjksIDc2LCA2OSwgCi0gICAgODQsIDEyOCwgNzYsIDY5LCA3NiwgNjksIDIxMiwgNzYsIDY5LCAyMDMsIDc2LCA2OSwgNzMsIDc3LCA3NywgNjUsIDEyOCwgCi0gICAgNzYsIDY5LCA3MywgNzcsIDc3LCAxOTMsIDc2LCA2OSwgNzEsIDgzLCAxMjgsIDc2LCA2OSwgNzEsIDczLCA3OSwgNzgsIAotICAgIDEyOCwgNzYsIDY5LCA3MSwgNjksIDg0LCA3OSwgMjExLCA3NiwgNjksIDcxLCAxMjgsIDc2LCA2OSwgNzAsIDg0LCA4NywgCi0gICAgNjUsIDgyLCA2OCwgODMsIDEyOCwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4NCwgNzksIDQ1LCA4MiwgNzMsIDcxLCA3MiwgMjEyLCAKLSAgICA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA4NCwgNjksIDIwNSwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIAotICAgIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDcyLCA2NSwgNjgsIDY5LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODAsIDc5LCAKLSAgICA3MywgNzgsIDg0LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCA2OCwgNjksIDE5NiwgNzYsIAotICAgIDY5LCA3MCwgODQsIDQ1LCA3MiwgNjUsIDc4LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzAsIDY1LCA2NywgNzMsIDc4LCAKLSAgICAxOTksIDc2LCA2OSwgNzAsIDg0LCAxMjgsIDc2LCA2OSwgNjksIDgyLCA2NSwgNjksIDg3LCA2NSwgMTI4LCA3NiwgNjksIAotICAgIDY5LCA3NSwgMTI4LCA3NiwgNjksIDY5LCA2OSwgNjksIDEyOCwgNzYsIDY5LCA2OCwgNzEsIDY5LCA4MiwgMTI4LCA3NiwgCi0gICAgNjksIDY1LCA4NCwgNzIsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCA3MCwgMTI4LCA3NiwgNjksIDY1LCAxOTgsIDc2LCAKLSAgICA2OSwgNjUsIDY4LCA3MywgNzgsIDE5OSwgNzYsIDY5LCA2NSwgNjgsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDY1LCAxOTYsIAotICAgIDc2LCA2OCwgNjUsIDc4LCAxMjgsIDc2LCA2OCwgNTAsIDEyOCwgNzYsIDY3LCAyMDEsIDc2LCA2NywgMTk3LCA3NiwgNjUsIAotICAgIDkwLCAyMTcsIDc2LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc2LCA2NSwgODgsIDEyOCwgNzYsIDY1LCA4NywgCi0gICAgMTI4LCA3NiwgNjUsIDIxNSwgNzYsIDY1LCA4NSwgNzYsIDY1LCAxMjgsIDc2LCA2NSwgODUsIDc1LCA2NSwgMjE4LCA3NiwgCi0gICAgNjUsIDg0LCA3MywgNzgsIDY1LCA4NCwgMTk3LCA3NiwgNjUsIDg0LCA3MywgNzUsIDEyOCwgNzYsIDY1LCA4NCwgNjksIDgyLCAKLSAgICA2NSwgMjA0LCA3NiwgNjUsIDg0LCAxOTcsIDc2LCA2NSwgODMsIDIxMiwgNzYsIDY1LCA4MiwgODksIDc4LCA3MSwgNjksIAotICAgIDY1LCAyMDQsIDc2LCA2NSwgODIsIDcxLCA2OSwgMjEwLCA3NiwgNjUsIDgyLCA3MSwgNjksIDEyOCwgNzYsIDY1LCA4MiwgCi0gICAgNzEsIDE5NywgNzYsIDY1LCA4MSwgMTI4LCA3NiwgNjUsIDgwLCA2NSwgODEsIDEyOCwgNzYsIDY1LCA4MCwgMTI4LCA3NiwgCi0gICAgNjUsIDc4LCA4NCwgNjksIDgyLCA3OCwgMTI4LCA3NiwgNjUsIDc4LCA3MSwgODUsIDY1LCA3MSwgMTk3LCA3NiwgNjUsIDc4LCAKLSAgICA2OSwgODMsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCA3MiwgMTI4LCA3NiwgNjUsIDc3LCA2OSwgNjgsIDEyOCwgNzYsIAotICAgIDY1LCA3NywgNjksIDE5NiwgNzYsIDY1LCA3NywgNjksIDEyOCwgNzYsIDY1LCA3NywgMTk3LCA3NiwgNjUsIDc3LCA2OCwgCi0gICAgNjUsIDEyOCwgNzYsIDY1LCA3NywgNjgsIDEyOCwgNzYsIDY1LCA3NywgNjYsIDY4LCAxOTMsIDc2LCA2NSwgNzcsIDY1LCAKLSAgICA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NiwgMTI4LCA3NiwgNjUsIDIwNCwgNzYsIDY1LCA3NSwgNzUsIDcyLCA2NSwgNzgsIAotICAgIDcxLCA4OSwgNjUsIDc5LCAxMjgsIDc2LCA2NSwgNzQsIDY1LCA3OCwgODksIDY1LCA3NiwgNjUsIDc4LCAxMjgsIDc2LCA2NSwgCi0gICAgMjAxLCA3NiwgNjUsIDcyLCA4MywgNzIsIDg1LCAxMjgsIDc2LCA2NSwgNzIsIDEyOCwgNzYsIDY1LCA3MSwgODUsIDgzLCAKLSAgICAxMjgsIDc2LCA2NSwgNzEsIDIxMywgNzYsIDY1LCA3MSwgNjUsIDgyLCAxMjgsIDc2LCA2NSwgNzEsIDY1LCAyMTAsIDc2LCAKLSAgICA2NSwgNzEsIDY1LCA2NiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgMTk0LCA3NiwgNjUsIDY5LCA4NiwgMTI4LCA3NiwgNjUsIAotICAgIDY5LCAxMjgsIDc2LCA2NSwgNjgsIDIxNywgNzYsIDY1LCA2NywgNzUsIDEyOCwgNzYsIDY1LCA2NywgNjUsIDEyOCwgNzYsIAotICAgIDY1LCA2NiwgNzksIDg1LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3NiwgNjUsIDY2LCA3OSwgODIsIDEyOCwgNzYsIDY1LCA2NiwgCi0gICAgNzMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NiwgNjUsIDY2LCA3MywgNjUsIDIwNCwgNzYsIDY1LCAKLSAgICA2NiwgNjUsIDg0LCAxMjgsIDc2LCA2NSwgNjUsIDc4LCA2NSwgNjksIDEyOCwgNzYsIDY1LCA2NSwgNzgsIDEyOCwgNzYsIAotICAgIDY1LCA2NSwgNzcsIDg1LCAxMjgsIDc2LCA2NSwgNjUsIDc3LCAxMjgsIDc2LCA2NSwgNjUsIDczLCAxMjgsIDc2LCA0OCwgCi0gICAgNDgsIDU0LCA2NSwgMTI4LCA3NiwgNDgsIDQ4LCA1MCwgNjUsIDEyOCwgNzYsIDQ1LCA4NCwgODksIDgwLCAxOTcsIDc2LCAKLSAgICA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIDc1LCA4OSwgODUsIDgyLCA3MywgNzMsIDEyOCwgNzUsIDg5LCA4NSwgCi0gICAgMTI4LCA3NSwgODksIDc5LCAxMjgsIDc1LCA4OSwgNzYsIDczLCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4OSwgNzMsIDEyOCwgCi0gICAgNzUsIDg5LCA2OSwgMTI4LCA3NSwgODksIDY1LCA4NCwgNzIsIDc5LCAyMTEsIDc1LCA4OSwgNjUsIDY1LCAxMjgsIDc1LCAKLSAgICA4OSwgNjUsIDEyOCwgNzUsIDg4LCA4NywgNzMsIDEyOCwgNzUsIDg4LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4OCwgODcsIAotICAgIDY5LCAxMjgsIDc1LCA4OCwgODcsIDY1LCA2NSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgMTI4LCA3NSwgODgsIDg1LCAxMjgsIAotICAgIDc1LCA4OCwgNzksIDEyOCwgNzUsIDg4LCA3MywgMTI4LCA3NSwgODgsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDY5LCAxMjgsIAotICAgIDc1LCA4OCwgNjUsIDY1LCAxMjgsIDc1LCA4OCwgNjUsIDEyOCwgNzUsIDg3LCA4NSwgNTEsIDQ5LCA1NiwgMTI4LCA3NSwgCi0gICAgODcsIDc5LCA3OSwgMTI4LCA3NSwgODcsIDc5LCAxMjgsIDc1LCA4NywgNzMsIDczLCAxMjgsIDc1LCA4NywgNzMsIDEyOCwgCi0gICAgNzUsIDg3LCA2OSwgNjksIDEyOCwgNzUsIDg3LCA2OSwgMTI4LCA3NSwgODcsIDY1LCA4OSwgMTI4LCA3NSwgODcsIDY1LCAKLSAgICA2OSwgODQsIDEyOCwgNzUsIDg3LCA2NSwgNjUsIDEyOCwgNzUsIDg2LCA2NSwgMTI4LCA3NSwgODYsIDEyOCwgNzUsIDg1LCAKLSAgICA4OCwgMTI4LCA3NSwgODUsIDg1LCA3MiwgMTI4LCA3NSwgODUsIDg0LCAxMjgsIDc1LCA4NSwgODMsIDc3LCA2NSwgMTI4LCAKLSAgICA3NSwgODUsIDgzLCA3MiwgODUsIDUwLCAxMjgsIDc1LCA4NSwgODIsIDg4LCAxMjgsIDc1LCA4NSwgODIsIDg1LCA5MCwgNjksIAotICAgIDczLCA4MiwgNzksIDEyOCwgNzUsIDg1LCA4MiwgODQsIDEyOCwgNzUsIDg1LCA4MiwgNzksIDc5LCA3OCwgNjksIDEyOCwgCi0gICAgNzUsIDg1LCA4MiwgMTI4LCA3NSwgODUsIDIxMCwgNzUsIDg1LCA4MSwgMTI4LCA3NSwgODUsIDc5LCA4OCwgMTI4LCA3NSwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3NSwgODUsIDc5LCAyMDgsIDc1LCA4NSwgNzksIDc3LCAxMjgsIDc1LCA4NSwgNzksIDEyOCwgCi0gICAgNzUsIDg1LCA3OCwgNzEsIDEyOCwgNzUsIDg1LCA3OCwgNjgsIDY4LCA2NSwgNzYsIDczLCA4OSwgNjUsIDEyOCwgNzUsIDg1LCAKLSAgICA3NiwgMTI4LCA3NSwgODUsIDIwNCwgNzUsIDg1LCA2OSwgODQsIDEyOCwgNzUsIDg1LCA1NSwgMTI4LCA3NSwgODUsIDUyLCAKLSAgICAxMjgsIDc1LCA4NSwgMTgwLCA3NSwgODUsIDUxLCAxMjgsIDc1LCA4NSwgMTc5LCA3NSwgODQsIDEyOCwgNzUsIDgzLCA4MywgCi0gICAgODUsIDg1LCAxMjgsIDc1LCA4MywgODMsIDg1LCAxMjgsIDc1LCA4MywgODMsIDc5LCA3OSwgMTI4LCA3NSwgODMsIDgzLCAKLSAgICA3OSwgMTI4LCA3NSwgODMsIDgzLCA3MywgNzMsIDEyOCwgNzUsIDgzLCA4MywgNzMsIDEyOCwgNzUsIDgzLCA4MywgNjksIAotICAgIDY5LCAxMjgsIDc1LCA4MywgODMsIDY5LCAxMjgsIDc1LCA4MywgODMsIDY1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgCi0gICAgNzMsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDY1LCAxMjgsIDc1LCA4MywgODMsIDY1LCAxMjgsIDc1LCA4MywgODMsIDEyOCwgCi0gICAgNzUsIDgzLCA3MywgMTI4LCA3NSwgODIsIDY5LCA3NywgNjUsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCAKLSAgICA3NywgNzksIDg5LCA4MCwgNzksIDgyLCA4MiwgNzksIDc5LCA3OCwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA3OSwgCi0gICAgNzUsIDc5LCA4NSwgNzAsIDczLCA4MywgNzcsIDY1LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjUsIAotICAgIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgMTkzLCA3NSwgODAsIDg1LCAxMjgsIDc1LCA4MCwgNzksIDgxLCAxMjgsIAotICAgIDc1LCA4MCwgNzksIDc5LCAxMjgsIDc1LCA4MCwgNzksIDEyOCwgNzUsIDgwLCA3MywgMTI4LCA3NSwgODAsIDY5LCA4NSwgCi0gICAgODgsIDEyOCwgNzUsIDgwLCA2OSwgNjksIDEyOCwgNzUsIDgwLCA2OSwgMTI4LCA3NSwgODAsIDY1LCA4MiwgNjUsIDgxLCAKLSAgICAxMjgsIDc1LCA4MCwgNjUsIDc4LCAxMjgsIDc1LCA4MCwgNjUsIDEyOCwgNzUsIDc5LCA4OCwgMTI4LCA3NSwgNzksIDg2LCAKLSAgICA4NSwgODUsIDEyOCwgNzUsIDc5LCA4NCwgNzksIDEyOCwgNzUsIDc5LCA4MiwgODUsIDc4LCA2NSwgMTI4LCA3NSwgNzksIAotICAgIDgyLCA3OSwgNzgsIDczLCA4MywgMTI4LCA3NSwgNzksIDgyLCA2OSwgNjUsIDIwNiwgNzUsIDc5LCA4MiwgNjUsIDc4LCA3MywgCi0gICAgMTk1LCA3NSwgNzksIDgxLCA3OCwgNjgsIDc5LCA3OCwgMTI4LCA3NSwgNzksIDgwLCA4MCwgNjUsIDEyOCwgNzUsIDc5LCAKLSAgICA4MCwgMTI4LCA3NSwgNzksIDc5LCA4MCwgNzksIDEyOCwgNzUsIDc5LCA3OSwgNzcsIDg1LCA4NSwgODQsIDEyOCwgNzUsIAotICAgIDc5LCA3OSwgMTI4LCA3NSwgNzksIDc4LCA4NCwgNjksIDg2LCA3NywgNjUsIDEyOCwgNzUsIDc5LCA3OCwgODQsIDY5LCA4NiwgCi0gICAgNzcsIDE5MywgNzUsIDc5LCA3NywgMjAxLCA3NSwgNzksIDc3LCA2NiwgODUsIDg2LCA2NSwgMTI4LCA3NSwgNzksIDc3LCAKLSAgICA2NiwgODUsIDg2LCAxOTMsIDc1LCA3OSwgNzcsIDY2LCAyMTMsIDc1LCA3OSwgNzUsIDc5LCAxMjgsIDc1LCA3OSwgNzUsIAotICAgIDEyOCwgNzUsIDc5LCAyMDMsIDc1LCA3OSwgNzMsIDEyOCwgNzUsIDc5LCAyMDEsIDc1LCA3OSwgNzIsIDEyOCwgNzUsIDc5LCAKLSAgICA3MSwgNzIsIDc5LCA3NywgMTI4LCA3NSwgNzksIDY5LCA4NCwgMTI4LCA3NSwgNzksIDY1LCA3NiwgNjUsIDEyOCwgNzUsIAotICAgIDc5LCA2NSwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc1LCA3OCwgNzMsIDcxLCA3MiwgMjEyLCA3NSwgCi0gICAgNzgsIDczLCA3MCwgNjksIDEyOCwgNzUsIDc4LCA3MywgNzAsIDE5NywgNzUsIDc3LCAxMjgsIDc1LCAyMDUsIDc1LCA3NiwgCi0gICAgNzMsIDg0LCA3OSwgNzgsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCA2NSwgMTI4LCA3NSwgNzYsIDY1LCA4MywgNzcsIAotICAgIDE5MywgNzUsIDc2LCA2NSwgMTI4LCA3NSwgNzYsIDEyOCwgNzUsIDc1LCA4NSwgMTI4LCA3NSwgNzUsIDc5LCAxMjgsIDc1LCAKLSAgICA3NSwgNzMsIDEyOCwgNzUsIDc1LCA2OSwgNjksIDEyOCwgNzUsIDc1LCA2OSwgMTI4LCA3NSwgNzUsIDY1LCAxMjgsIDc1LCAKLSAgICA3NSwgMTI4LCA3NSwgNzQsIDY5LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4NCwgNzMsIDc1LCA2OSwgODUsIAotICAgIDg0LCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCAKLSAgICA3OSwgNzUsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3NSwgNzMsIAotICAgIDg5LCA2OSwgNzksIDc1LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCAKLSAgICA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDc1LCA3MiwgNzMsIDY5LCA4NSwgCi0gICAgNzUsIDcyLCAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA2NywgNzIsIDczLCA2OSwgODUsIDY3LCA3MiwgMTI4LCAKLSAgICA3NSwgNzMsIDg5LCA2OSwgNzksIDIwMywgNzUsIDczLCA4OCwgMTI4LCA3NSwgNzMsIDg0LCAxMjgsIDc1LCA3MywgODMsIAotICAgIDgzLCA3MywgNzgsIDE5OSwgNzUsIDczLCA4MywgODMsIDEyOCwgNzUsIDczLCA4MywgMjExLCA3NSwgNzMsIDgzLCA3MywgCi0gICAgNzcsIDUzLCAxMjgsIDc1LCA3MywgODMsIDczLCA3NywgMTgxLCA3NSwgNzMsIDgzLCA3MiwgMTI4LCA3NSwgNzMsIDgzLCAKLSAgICA2NSwgNzYsIDEyOCwgNzUsIDczLCA4MiwgNzksIDg3LCA2NSwgODQsIDg0LCA3OSwgMTI4LCA3NSwgNzMsIDgyLCA3OSwgNzcsIAotICAgIDY5LCA2OSwgODQsIDc5LCA4MiwgODUsIDEyOCwgNzUsIDczLCA4MiwgNzksIDcxLCA4NSwgODIsIDY1LCA3NywgODUsIDEyOCwgCi0gICAgNzUsIDczLCA4MiwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzEsIDcyLCA3MywgMjE4LCA3NSwgNzMsIDgxLCAxMjgsIDc1LCAKLSAgICA3MywgODAsIDEyOCwgNzUsIDczLCAyMDgsIDc1LCA3MywgNzgsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDc1LCA3MywgNzgsIAotICAgIDY4LCA2OSwgODIsIDcxLCA2NSwgODIsIDg0LCA2OSwgNzgsIDEyOCwgNzUsIDczLCA3NywgNzksIDc4LCA3OSwgMTI4LCA3NSwgCi0gICAgNzMsIDczLCAxMjgsIDc1LCA3MywgNzIsIDEyOCwgNzUsIDczLCA2OSwgODgsIDEyOCwgNzUsIDczLCA2OSwgODAsIDEyOCwgCi0gICAgNzUsIDczLCA2OSwgNjksIDc3LCAxMjgsIDc1LCA3MywgNjksIDEyOCwgNzUsIDczLCA2OCwgMTI4LCA3NSwgNzMsIDE5NiwgCi0gICAgNzUsIDczLCA2NywgNzUsIDEyOCwgNzUsIDcyLCA5MCwgMTI4LCA3NSwgNzIsIDg3LCA2NSwgNzMsIDEyOCwgNzUsIDcyLCAKLSAgICA4NSwgNjksIDc4LCA0NSwgNzYsIDg1LCAxOTcsIDc1LCA3MiwgODUsIDY5LCAyMDYsIDc1LCA3MiwgODUsIDY4LCA2NSwgNzcsIAotICAgIDEyOCwgNzUsIDcyLCA4NSwgNjUsIDg0LCAxMjgsIDc1LCA3MiwgNzksIDg1LCAxMjgsIDc1LCA3MiwgNzksIDIxMiwgNzUsIAotICAgIDcyLCA3OSwgNzgsIDEyOCwgNzUsIDcyLCA3OSwgNzcsIDg1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCAxMjgsIDc1LCA3MiwgCi0gICAgMjA3LCA3NSwgNzIsIDc3LCAyMTMsIDc1LCA3MiwgNzMsIDg0LCAxMjgsIDc1LCA3MiwgNzMsIDc4LCA4OSwgNjUsIDEyOCwgCi0gICAgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgMjAwLCA3NSwgNzIsIDczLCAxMjgsIDc1LCA3MiwgNzIsIDc5LCAxMjgsIDc1LCAKLSAgICA3MiwgNzIsIDY1LCAxMjgsIDc1LCA3MiwgNjksIDg0LCA3MiwgMTI4LCA3NSwgNzIsIDY5LCA3MywgMTI4LCA3NSwgNzIsIAotICAgIDY5LCA2OSwgMTI4LCA3NSwgNzIsIDY5LCAxMjgsIDc1LCA3MiwgNjUsIDgyLCA3OSwgODMsIDcyLCA4NCwgNzIsIDIwMSwgCi0gICAgNzUsIDcyLCA2NSwgODIsIDEyOCwgNzUsIDcyLCA2NSwgODAsIDcyLCAxMjgsIDc1LCA3MiwgNjUsIDc4LCAxOTksIDc1LCAKLSAgICA3MiwgNjUsIDc4LCA2OCwgMTkzLCA3NSwgNzIsIDY1LCA3OCwgMTI4LCA3NSwgNzIsIDY1LCA3NywgODQsIDIwMSwgNzUsIAotICAgIDcyLCA2NSwgNzUsIDY1LCA4MywgODMsIDczLCA2NSwgMjA2LCA3NSwgNzIsIDY1LCA3MywgMTI4LCA3NSwgNzIsIDY1LCA3MiwgCi0gICAgMTI4LCA3NSwgNzIsIDY1LCAyMDAsIDc1LCA3MiwgNjUsIDY1LCAxMjgsIDc1LCA3MSwgMTI4LCA3NSwgNjksIDg5LCA2NywgCi0gICAgNjUsIDgwLCAxMjgsIDc1LCA2OSwgODksIDY3LCA2NSwgMjA4LCA3NSwgNjksIDg5LCA2NiwgNzksIDY1LCA4MiwgNjgsIAotICAgIDEyOCwgNzUsIDY5LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4OSwgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCA4MywgCi0gICAgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCA3NSwgNjksIDg1LCA4MywgNjksIDg1LCA4OCwgMTI4LCA3NSwgNjksIDg1LCAKLSAgICA4MCwgODUsIDgxLCAxMjgsIDc1LCA2OSwgODUsIDc5LCAyMTIsIDc1LCA2OSwgODUsIDc3LCAxMjgsIDc1LCA2OSwgODUsIAotICAgIDc1LCA2OSwgODUsIDg0LCA3OCwgNjgsIDY1LCAxMjgsIDc1LCA2OSwgODUsIDc1LCA2NSwgODEsIDEyOCwgNzUsIDY5LCA4NSwgCi0gICAgNjUsIDY5LCA4NCwgNzcsIDY5LCA4NSwgNzgsIDEyOCwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNzMsIDEyOCwgNzUsIDY5LCAKLSAgICA4NCwgODQsIDIwMSwgNzUsIDY5LCA4MywgNzIsIDUwLCAxMjgsIDc1LCA2OSwgODIsIDY5LCA4NCwgMTI4LCA3NSwgNjksIAotICAgIDc5LCA4NywgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCA2OSwgNzgsIDg0LCA3MywgCi0gICAgNzcsIDY1LCA4NCwgMTkzLCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCAxOTMsIDc1LCA2OSwgNzgsIDY1LCA4NCwgMTI4LCAKLSAgICA3NSwgNjksIDc4LCAxMjgsIDc1LCA2OSwgMjA2LCA3NSwgNjksIDc3LCA4MCwgODUsIDc2LCAxMjgsIDc1LCA2OSwgNzcsIAotICAgIDgwLCA4NSwgMjA0LCA3NSwgNjksIDc3LCA4MCwgNzYsIDczLCAxMjgsIDc1LCA2OSwgNzcsIDgwLCA3NiwgMjAxLCA3NSwgCi0gICAgNjksIDc3LCA4MCwgNzIsIDgyLCA2OSwgNzgsIDcxLCAxMjgsIDc1LCA2OSwgNzcsIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDc1LCAKLSAgICA2OSwgNzYsIDg2LCA3MywgMjA2LCA3NSwgNjksIDcyLCA2OSwgNzIsIDEyOCwgNzUsIDY5LCA3MiwgNjksIDIwMCwgNzUsIAotICAgIDY5LCA3MiwgMTI4LCA3NSwgNjksIDcwLCA4NSwgNzYsIDY1LCAxMjgsIDc1LCA2OSwgNjksIDgzLCA4NSwgMTI4LCA3NSwgCi0gICAgNjksIDY5LCA4MCwgNzMsIDc4LCAxOTksIDc1LCA2OSwgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjcsIDY1LCA3NiwgMTI4LCAKLSAgICA3NSwgNjYsIDEyOCwgNzUsIDY1LCA5MCwgNjUsIDc1LCAyMDAsIDc1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIAotICAgIDc1LCA2NSwgODksIDY1LCAyMDAsIDc1LCA2NSwgODgsIDEyOCwgNzUsIDY1LCA4NywgNzMsIDEyOCwgNzUsIDY1LCA4NiwgCi0gICAgODksIDc1LCA2NSwgMTI4LCA3NSwgNjUsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDY1LCA4NSwgMjA2LCA3NSwgNjUsIDg1LCAKLSAgICAxMjgsIDc1LCA2NSwgODQsIDc5LCAxMjgsIDc1LCA2NSwgODQsIDcyLCA3MywgODMsIDg0LCA3MywgMTI4LCA3NSwgNjUsIAotICAgIDg0LCA3MiwgNjUsIDc1LCAxOTMsIDc1LCA2NSwgODQsIDY1LCA4NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDY1LCA4NCwgCi0gICAgNjUsIDg2LCAxOTMsIDc1LCA2NSwgODQsIDY1LCA3NSwgNjUsIDc4LCA2NSwgNDUsIDcyLCA3MywgODIsIDY1LCA3MSwgNjUsIAotICAgIDc4LCAxOTMsIDc1LCA2NSwgODMsIDgyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDg0LCA2NSwgCi0gICAgMjA2LCA3NSwgNjUsIDgzLCA4MiwgNjUsIDEyOCwgNzUsIDY1LCA4MywgODIsIDE5MywgNzUsIDY1LCA4MywgNzUsIDY1LCAKLSAgICA3NiwgMTI4LCA3NSwgNjUsIDgzLCA3NSwgNjUsIDIwNCwgNzUsIDY1LCA4MywgNzIsIDc3LCA3MywgODIsIDIwMSwgNzUsIAotICAgIDY1LCA4MiwgODMsIDcyLCA2NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODIsIDc5LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA2NSwgCi0gICAgODIsIDIwNywgNzUsIDY1LCA4MiwgNjksIDIwNiwgNzUsIDY1LCA4MiwgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDY1LCAKLSAgICA4MiwgNjUsIDc4LCAxMjgsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAotICAgIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgODUsIDc4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgMTI4LCA3NSwgCi0gICAgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDc3LCA3MywgNjksIDg1LCA3NywgMTI4LCA3NSwgNjUsIDgwLCA4MCwgNjUsIAotICAgIDEyOCwgNzUsIDY1LCA4MCwgODAsIDE5MywgNzUsIDY1LCA4MCwgNzksIDEyOCwgNzUsIDY1LCA4MCwgNzIsIDEyOCwgNzUsIAotICAgIDY1LCA4MCwgNjUsIDc2LCAxMjgsIDc1LCA2NSwgODAsIDY1LCAxMjgsIDc1LCA2NSwgNzgsIDg0LCA2NSwgNzQsIDE5MywgCi0gICAgNzUsIDY1LCA3OCwgNzEsIDEyOCwgNzUsIDY1LCA3OCwgMTk5LCA3NSwgNjUsIDc4LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCAKLSAgICA2NSwgNzcsIDUyLCAxMjgsIDc1LCA2NSwgNzcsIDUwLCAxMjgsIDc1LCA2NSwgNzcsIDEyOCwgNzUsIDY1LCA3NSwgNzksIAotICAgIDEyOCwgNzUsIDY1LCA3NSwgNjUsIDY2LCA2NSwgODQsIDEyOCwgNzUsIDY1LCA3NSwgMTI4LCA3NSwgNjUsIDIwMywgNzUsIAotICAgIDY1LCA3MywgODQsIDcyLCAyMDEsIDc1LCA2NSwgNzMsIDgyLCA3MywgMTI4LCA3NSwgNjUsIDczLCAxMjgsIDc1LCA2NSwgCi0gICAgMjAxLCA3NSwgNjUsIDcwLCA2NSwgMTI4LCA3NSwgNjUsIDcwLCAxMjgsIDc1LCA2NSwgMTk4LCA3NSwgNjUsIDY4LCA1MywgCi0gICAgMTI4LCA3NSwgNjUsIDY4LCAxODEsIDc1LCA2NSwgNjgsIDUyLCAxMjgsIDc1LCA2NSwgNjgsIDUxLCAxMjgsIDc1LCA2NSwgCi0gICAgNjgsIDE3OSwgNzUsIDY1LCA2OCwgNTAsIDEyOCwgNzUsIDY1LCA2OCwgMTI4LCA3NSwgNjUsIDY2LCAxOTMsIDc1LCA2NSwgCi0gICAgNjYsIDEyOCwgNzUsIDY1LCA2NSwgNzMsIDEyOCwgNzUsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDc1LCA2NSwgNjUsIDcwLCAKLSAgICAxMjgsIDc1LCA2NSwgNTAsIDEyOCwgNzUsIDY1LCAxNzgsIDc1LCA0OCwgNDgsIDU2LCAxMjgsIDc1LCA0OCwgNDgsIDU1LCAKLSAgICAxMjgsIDc1LCA0OCwgNDgsIDU0LCAxMjgsIDc1LCA0OCwgNDgsIDUzLCAxMjgsIDc1LCA0OCwgNDgsIDUyLCAxMjgsIDc1LCAKLSAgICA0OCwgNDgsIDUxLCAxMjgsIDc1LCA0OCwgNDgsIDUwLCAxMjgsIDc1LCA0OCwgNDgsIDQ5LCAxMjgsIDc0LCA4NywgNjUsIAotICAgIDEyOCwgNzQsIDg1LCA4NSwgMTI4LCA3NCwgODUsIDg0LCAxMjgsIDc0LCA4NSwgODMsIDg0LCA3MywgNzAsIDczLCA2NywgCi0gICAgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDc0LCA4NSwgODAsIDczLCA4NCwgNjksIDgyLCAxMjgsIDc0LCA4NSwgNzksIDg0LCAKLSAgICAxMjgsIDc0LCA4NSwgNzksIDgwLCAxMjgsIDc0LCA4NSwgNzgsIDc5LCAxMjgsIDc0LCA4NSwgNzgsIDY5LCAxMjgsIDc0LCAKLSAgICA4NSwgNzYsIDg5LCAxMjgsIDc0LCA4NSwgNjksIDg1LCA3MywgMTI4LCA3NCwgODUsIDY4LCA4NSwgNzYsIDEyOCwgNzQsIAotICAgIDg1LCA2OCwgNzEsIDY5LCAxMjgsIDc0LCA4NSwgNjgsIDY5LCA3OSwgNDUsIDgzLCA4MCwgNjUsIDc4LCA3MywgODMsIDIwMCwgCi0gICAgNzQsIDc5LCA4OSwgNzksIDg1LCAyMTEsIDc0LCA3OSwgODksIDEyOCwgNzQsIDc5LCA4NiwgNjksIDEyOCwgNzQsIDc5LCAKLSAgICAyMTIsIDc0LCA3OSwgNzgsIDcxLCAxMjgsIDc0LCA3OSwgNzgsIDE5MywgNzQsIDc5LCA3NSwgNjksIDgyLCAxMjgsIDc0LCAKLSAgICA3OSwgNzMsIDc4LCA2OSwgNjgsIDEyOCwgNzQsIDc5LCA3MywgNzgsIDEyOCwgNzQsIDc5LCA2NSwgMTI4LCA3NCwgNzQsIAotICAgIDg5LCA4OCwgMTI4LCA3NCwgNzQsIDg5LCA4NCwgMTI4LCA3NCwgNzQsIDg5LCA4MCwgMTI4LCA3NCwgNzQsIDg5LCAxMjgsIAotICAgIDc0LCA3NCwgODUsIDg4LCAxMjgsIDc0LCA3NCwgODUsIDg0LCAxMjgsIDc0LCA3NCwgODUsIDgyLCA4OCwgMTI4LCA3NCwgCi0gICAgNzQsIDg1LCA4MiwgMTI4LCA3NCwgNzQsIDg1LCA4MCwgMTI4LCA3NCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzQsIDc0LCAKLSAgICA4NSwgNzksIDgwLCAxMjgsIDc0LCA3NCwgODUsIDc5LCAxMjgsIDc0LCA3NCwgODUsIDEyOCwgNzQsIDc0LCA3OSwgODgsIAotICAgIDEyOCwgNzQsIDc0LCA3OSwgODQsIDEyOCwgNzQsIDc0LCA3OSwgODAsIDEyOCwgNzQsIDc0LCA3OSwgMTI4LCA3NCwgNzQsIAotICAgIDczLCA4OCwgMTI4LCA3NCwgNzQsIDczLCA4NCwgMTI4LCA3NCwgNzQsIDczLCA4MCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgCi0gICAgODgsIDEyOCwgNzQsIDc0LCA3MywgNjksIDg0LCAxMjgsIDc0LCA3NCwgNzMsIDY5LCA4MCwgMTI4LCA3NCwgNzQsIDczLCAKLSAgICA2OSwgMTI4LCA3NCwgNzQsIDczLCAxMjgsIDc0LCA3NCwgNjksIDY5LCAxMjgsIDc0LCA3NCwgNjksIDEyOCwgNzQsIDc0LCAKLSAgICA2NSwgMTI4LCA3NCwgNzMsIDc2LCAxMjgsIDc0LCA3MywgNzMsIDEyOCwgNzQsIDczLCA3MiwgODYsIDY1LCA3NywgODUsIAotICAgIDc2LCA3MywgODksIDY1LCAxMjgsIDc0LCA3MywgNjUsIDEyOCwgNzQsIDcyLCA3OSwgMTI4LCA3NCwgNzIsIDY5LCA3MiwgCi0gICAgMTI4LCA3NCwgNzIsIDY1LCA3OCwgMTI4LCA3NCwgNzIsIDY1LCA3NywgMTI4LCA3NCwgNzIsIDY1LCA2NSwgMTI4LCA3NCwgCi0gICAgNzIsIDY1LCAxMjgsIDc0LCA2OSwgODUsIDEyOCwgNzQsIDY5LCA4MiwgODUsIDgzLCA2NSwgNzYsIDY5LCA3NywgMTI4LCAKLSAgICA3NCwgNjksIDgyLCA2NSwgMjA2LCA3NCwgNjksIDgyLCA2NSwgMTI4LCA3NCwgNjksIDgyLCAxMjgsIDc0LCA2OSwgNzIsIAotICAgIDEyOCwgNzQsIDY5LCAyMDAsIDc0LCA2OSwgNzEsIDc5LCA3MSwgNjUsIDc4LCAxMjgsIDc0LCA2OSwgNjksIDc3LCAxMjgsIAotICAgIDc0LCA2OSwgNjUsIDc4LCA4MywgMTI4LCA3NCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NCwgNjUsIDg2LCA3MywgCi0gICAgODksIDY1LCA3OCwgNzMsIDEyOCwgNzQsIDY1LCA4NSwgMTI4LCA3NCwgNjUsIDgyLCAxMjgsIDc0LCA2NSwgODAsIDY1LCAKLSAgICA3OCwgNjksIDgzLCAxOTcsIDc0LCA2NSwgODAsIDY1LCA3OCwgMTI4LCA3NCwgNjUsIDc4LCA4NSwgNjUsIDgyLCA4OSwgCi0gICAgMTI4LCA3NCwgNjUsIDc2LCA3NiwgNjUsIDc0LCA2NSwgNzYsIDY1LCA3NiwgNzksIDg1LCA3MiwgNzksIDg1LCAxMjgsIDc0LCAKLSAgICA2NSwgNzMsIDEyOCwgNzQsIDY1LCA3MiwgMTI4LCA3NCwgNjUsIDY4LCA2OSwgMTI4LCA3NCwgNjUsIDY3LCA3NSwgNDUsIAotICAgIDc5LCA0NSwgNzYsIDY1LCA3OCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgNzQsIDY1LCA2NywgMjAzLCA3NCwgNDUsIDgzLCA3MywgCi0gICAgNzcsIDgwLCA3NiwgNzMsIDcwLCA3MywgNjksIDE5NiwgMjAyLCA3MywgOTAsIDcyLCA3MywgODQsIDgzLCA2NSwgMTI4LCAKLSAgICA3MywgOTAsIDcyLCA3MywgODQsIDgzLCAxOTMsIDczLCA5MCwgNzIsIDY5LCAxMjgsIDczLCA5MCwgNjUsIDc1LCA2NSwgODksIAotICAgIDE5MywgNzMsIDg5LCA2OSwgNzUsIDEyOCwgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODUsIDc0LCA2NSwgCi0gICAgMTI4LCA3MywgODUsIDEyOCwgNzMsIDg0LCAyMTEsIDczLCA4NCwgNjksIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgCi0gICAgODQsIDY5LCA3NywgMTI4LCA3MywgODMsIDgzLCA3MiwgNjUsIDgyLCAxMjgsIDczLCA4MywgNzksIDc4LCAxMjgsIDczLCAKLSAgICA4MywgNzksIDIwNiwgNzMsIDgzLCA2OSwgNzgsIDQ1LCA3MywgODMsIDY5LCA3OCwgMTI4LCA3MywgODMsIDY1LCA3NSwgNzMsIAotICAgIDE5MywgNzMsIDgzLCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDczLCA4MiwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCi0gICAgMTI4LCA3MywgODIsIDg1LCA4NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA4MiwgNzksIDc4LCA0NSwgNjcsIDc5LCAKLSAgICA4MCwgODAsIDY5LCAyMTAsIDczLCA4MiwgNzksIDc4LCAxMjgsIDczLCA3OSwgODQsIDczLCA3MCwgNzMsIDY5LCAxOTYsIAotICAgIDczLCA3OSwgODQsIDY1LCA4NCwgNjksIDE5NiwgNzMsIDc5LCA4NCwgNjUsIDEyOCwgNzMsIDc5LCA4NCwgMTkzLCA3MywgCi0gICAgNzksIDgyLCAxMjgsIDczLCA3OSwgNjgsIDcyLCA2NSwgNjgsIDcyLCAxMjgsIDczLCA3OCwgODYsIDczLCA4MywgNzMsIDY2LCAKLSAgICA3NiwgMTk3LCA3MywgNzgsIDg2LCA2OSwgODIsIDg0LCA2OSwgNjgsIDEyOCwgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIAotICAgIDE5NiwgNzMsIDc4LCA4NiwgNjksIDgyLCA4MywgMTk3LCA3MywgNzgsIDg0LCA4MiwgNzksIDY4LCA4NSwgNjcsIDY5LCA4MiwgCi0gICAgMTI4LCA3MywgNzgsIDg0LCA3MywgMTI4LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA4OSwgNzYsIDc2LCA2NSwgNjYsIDczLCAKLSAgICAxOTUsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCA4NCwgNjksIAotICAgIDgyLCA4MywgNjksIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCAKLSAgICA3OCwgMTk5LCA3MywgNzgsIDg0LCA2OSwgODIsIDgyLCA3OSwgNjYsIDY1LCA3OCwgNzEsIDEyOCwgNzMsIDc4LCA4NCwgNjksIAotICAgIDgyLCA4MCwgNzksIDc2LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCA3OSwgNjcsIDc1LCAKLSAgICA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCA2NSwgMjEwLCA3MywgNzgsIDg0LCA2OSwgODIsIAotICAgIDc2LCA2NSwgNjcsIDY5LCAxOTYsIDczLCA3OCwgODQsIDY5LCA4MiwgNzMsIDc5LCAyMTAsIDczLCA3OCwgODQsIDY5LCA4MiwgCi0gICAgNjksIDgzLCAyMTIsIDczLCA3OCwgODQsIDY5LCA4MiwgNjcsIDY1LCA3NiwgNjUsIDg0LCA2OSwgMTI4LCA3MywgNzgsIDg0LCAKLSAgICA2OSwgNzEsIDgyLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgCi0gICAgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDc2LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCAKLSAgICAyMDQsIDczLCA3OCwgODMsIDg1LCA3NiwgNjUsIDIxMCwgNzMsIDc4LCA4MywgODQsIDgyLCA4NSwgNzcsIDY5LCA3OCwgODQsIAotICAgIDY1LCAyMDQsIDczLCA3OCwgODMsIDczLCA2OCwgNjksIDEyOCwgNzMsIDc4LCA4MywgNjksIDgyLCA4NCwgNzMsIDc5LCAKLSAgICAyMDYsIDczLCA3OCwgODMsIDY5LCA2NywgODQsIDEyOCwgNzMsIDc4LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIAotICAgIDc4LCA2NSwgMjA0LCA3MywgNzgsIDgwLCA4NSwgMjEyLCA3MywgNzgsIDc4LCA3OSwgNjcsIDY5LCA3OCwgNjcsIDY5LCAKLSAgICAxMjgsIDczLCA3OCwgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzgsIDY5LCA4MiwgMTI4LCA3MywgNzgsIDc4LCA2OSwgMjEwLCAKLSAgICA3MywgNzgsIDc4LCAxMjgsIDczLCA3OCwgNzMsIDc4LCA3MSwgODUsIDEyOCwgNzMsIDc4LCA3MywgMTI4LCA3MywgNzgsIAotICAgIDcyLCA3MywgNjYsIDczLCAyMTIsIDczLCA3OCwgNzIsIDY5LCA4MiwgNjksIDc4LCAyMTIsIDczLCA3OCwgNzEsIDg3LCA2NSwgCi0gICAgOTAsIDEyOCwgNzMsIDc4LCA3MCwgNzksIDgyLCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA3MCwgNzYsIDg1LCAKLSAgICA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MywgNzgsIDcwLCA3MywgNzgsIDczLCA4NCwgODksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIAotICAgIDc4LCA3MywgODQsIDIxNywgNzMsIDc4LCA2OCwgODUsIDgzLCA4NCwgODIsIDczLCA2NSwgMjA0LCA3MywgNzgsIDY4LCA3MywgCi0gICAgODIsIDY5LCA2NywgMjEyLCA3MywgNzgsIDY4LCA3MywgNjcsIDY1LCA4NCwgNzksIDgyLCAxMjgsIDczLCA3OCwgNjgsIDczLCAKLSAgICA2NywgNjUsIDg0LCA3OSwgMjEwLCA3MywgNzgsIDY4LCA3MywgMTk1LCA3MywgNzgsIDY4LCA3MywgNjUsIDIwNiwgNzMsIAotICAgIDc4LCA2OCwgNjksIDg4LCAxMjgsIDczLCA3OCwgNjgsIDY5LCA4MCwgNjksIDc4LCA2OCwgNjksIDc4LCAyMTIsIDczLCA3OCwgCi0gICAgNjcsIDgyLCA2OSwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzMsIDc4LCA2NywgODIsIDY5LCA2NSwgODMsIDY5LCAyMTEsIDczLCAKLSAgICA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMTI4LCA3MywgNzgsIDY3LCA3OSwgNzcsIDgwLCA3NiwgNjksIDg0LCAxOTcsIAotICAgIDczLCA3OCwgNjcsIDc5LCA3NywgNzMsIDc4LCAxOTksIDczLCA3OCwgNjcsIDc2LCA4NSwgNjgsIDczLCA3OCwgMTk5LCA3MywgCi0gICAgNzgsIDY3LCA3MiwgMTI4LCA3MywgNzgsIDY2LCA3OSwgMjE2LCA3MywgNzgsIDY1LCA4MCwgMTI4LCA3MywgNzgsIDQ1LCAKLSAgICA2NSwgNzYsIDY1LCA3MCwgMTI4LCA3MywgNzcsIDgwLCA2OSwgODIsIDczLCA2NSwgMjA0LCA3MywgNzcsIDgwLCA2OSwgODIsIAotICAgIDcwLCA2OSwgNjcsIDg0LCA4NSwgMjA1LCA3MywgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA2NSwgMTI4LCA3MywgCi0gICAgNzcsIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCAxOTMsIDczLCA3NywgNzgsIDEyOCwgNzMsIDc3LCA3MywgODMsIDY5LCAKLSAgICA3OSwgMjExLCA3MywgNzcsIDczLCA3OCwgNTEsIDEyOCwgNzMsIDc3LCA3MywgNzgsIDEyOCwgNzMsIDc3LCA3MywgMjA2LCAKLSAgICA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgODIsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA3MCwgODQsIDcyLCA3OSwgCi0gICAgODIsIDY1LCAxMjgsIDczLCA3NywgNzMsIDcwLCA3OSwgNzgsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDczLCA2OCwgNzMsIDY1LCAKLSAgICA4MiwgNzEsIDc5LCA3OCwgMTI4LCA3MywgNzcsIDY1LCA3MSwgMTk3LCA3MywgNzYsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAotICAgIDEyOCwgNzMsIDc2LCA4NSwgODksIDEyOCwgNzMsIDc2LCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgCi0gICAgNzYsIDg1LCA4NCwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCA1MiwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCAKLSAgICA1MSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIDg1LCAxMjgsIDczLCA3NiwgNzMsIDc3LCA3NywgMjEzLCA3MywgNzYsIAotICAgIDUwLCAxMjgsIDczLCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA3MywgNzUsIDY1LCA4MiwgMTkzLCA3MywgNzQsIDEyOCwgNzMsIAotICAgIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDcxLCA3MywgMTI4LCA3MywgNzEsIDIwMSwgNzMsIDcxLCA3MSwgCi0gICAgODcsIDgzLCAxMjgsIDczLCA3MCwgNzMsIDc4LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MywgNzUsIDY5LCAKLSAgICA4NSwgODQsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzMsIAotICAgIDY5LCA4NSwgNzgsIDcxLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDczLCAKLSAgICA2OSwgODUsIDc4LCA3MSwgNDUsIDgyLCA3MywgNjksIDg1LCA3NiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MCwgCi0gICAgNzMsIDY5LCA4NSwgODAsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIAotICAgIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA3MywgNjksIDg1LCA3OCwgCi0gICAgNzEsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA2NywgNzMsIAotICAgIDY5LCA4NSwgNjcsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgCi0gICAgNzMsIDY5LCA4NSwgNzgsIDE5OSwgNzMsIDY4LCA3NiwgNjksIDEyOCwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzMsIDY4LCAKLSAgICA3MywgMjA1LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTMsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNTAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCAKLSAgICA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTMsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDcwLCA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU3LCA0OCwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNjgsIDU1LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTYsIDY3LCA2NSwgNTcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNjgsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTUsIDY1LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU1LCA1NywgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTQsIDY4LCAKLSAgICA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDUzLCA1MSwgNTEsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNDksIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTUsIDQ4LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU0LCA3MCwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNjksIDU2LCAKLSAgICA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA1MCwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTQsIDU0LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU0LCA1MywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTMsIDU3LCAKLSAgICA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUzLCA1MywgNTUsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MSwgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTQsIDUwLCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDU0LCA1MCwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTAsIDUyLCAKLSAgICA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDcwLCA1NiwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2OCwgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjYsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTMsIDY2LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUzLCA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTcsIDQ5LCAKLSAgICA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDU2LCA3MCwgNDgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MywgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTIsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTMsIDUyLCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUzLCA1MSwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTEsIDY3LCAKLSAgICA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA2OCwgNjgsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTMsIDUwLCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUzLCA0OSwgNTYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDY1LCAKLSAgICA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA1NiwgNjcsIDEyOCwgNzMsIAotICAgIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCAKLSAgICA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgCi0gICAgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNjUsIDQ4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA2NSwgNDgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDcwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNzAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDcwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDY1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNjUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU0LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDU0LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTMsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUzLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUyLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTIsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUyLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUxLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTEsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUxLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUwLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTAsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDUwLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDQ5LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNDksIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDQ4LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTcsIDQ4LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NywgNDgsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDcwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDcwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNzAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjcsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY3LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY2LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjYsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY2LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY1LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjUsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDY1LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU3LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTcsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU3LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgCi0gICAgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU2LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTYsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgCi0gICAgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUyLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU1LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgCi0gICAgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU1LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTUsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgCi0gICAgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDUwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgCi0gICAgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDU0LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTQsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgCi0gICAgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDQ4LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgCi0gICAgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUzLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTMsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgCi0gICAgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA3MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgCi0gICAgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUzLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUyLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTEsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgCi0gICAgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY3LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgCi0gICAgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUxLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUwLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTAsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgCi0gICAgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NiwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDY1LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgCi0gICAgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ5LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgCi0gICAgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NywgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU2LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgCi0gICAgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA0OCwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDcwLCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgCi0gICAgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NSwgMTI4LCAKLSAgICA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDU0LCAxMjgsIDczLCA2OCwgCi0gICAgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAotICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCAKLSAgICA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgCi0gICAgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIAotICAgIDUwLCA3MCwgNTYsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCAKLSAgICA1NiwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc4LCA4NCwgNzMsIDcwLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzMsIDY3LCA3MiwgNzksIDg1LCAxMjgsIDczLCAKLSAgICA2NywgNzIsIDc5LCA4MywgMTI4LCA3MywgNjcsIDcyLCA3MywgNzcsIDY1LCA4NCwgNzksIDgzLCAxMjgsIDczLCA2NywgNzIsIAotICAgIDY1LCA2OCwgNzMsIDc4LCAxMjgsIDczLCA2NywgNjksIDc2LCA2NSwgNzgsIDY4LCA3MywgNjcsIDQ1LCA4OSwgODIsIDEyOCwgCi0gICAgNzMsIDY2LCA3MywgNzAsIDczLCA3NiwgNzMsIDEyOCwgNzMsIDY1LCA4NSwgNjgsIDY1LCAxMjgsIDczLCA0OCwgNDksIDUzLCAKLSAgICAxMjgsIDczLCA0OCwgNDksIDUyLCAxMjgsIDczLCA0OCwgNDksIDUxLCAxMjgsIDczLCA0OCwgNDksIDUwLCAxMjgsIDczLCAKLSAgICA0OCwgNDksIDQ5LCA2NSwgMTI4LCA3MywgNDgsIDQ5LCA0OSwgMTI4LCA3MywgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzMsIAotICAgIDQ4LCA0OSwgNDgsIDEyOCwgNzMsIDQ4LCA0OCwgNTcsIDY1LCAxMjgsIDczLCA0OCwgNDgsIDU3LCAxMjgsIDczLCA0OCwgCi0gICAgNDgsIDU2LCAxMjgsIDczLCA0OCwgNDgsIDU1LCAxMjgsIDczLCA0OCwgNDgsIDU0LCAxMjgsIDczLCA0OCwgNDgsIDUzLCAKLSAgICA2NSwgMTI4LCA3MywgNDgsIDQ4LCA1MywgMTI4LCA3MywgNDgsIDQ4LCA1MiwgMTI4LCA3MywgNDgsIDQ4LCA1MSwgMTI4LCAKLSAgICA3MywgNDgsIDQ4LCA1MCwgMTI4LCA3MywgNDgsIDQ4LCA0OSwgMTI4LCA3MywgNDUsIDg5LCA4NSwgMTI4LCA3MywgNDUsIAotICAgIDg5LCA3OSwgMTI4LCA3MywgNDUsIDg5LCA2OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDEyOCwgNzMsIDQ1LCA4OSwgCi0gICAgNjUsIDY5LCAxMjgsIDczLCA0NSwgODksIDY1LCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjUsIDEyOCwgNzMsIDQ1LCAKLSAgICA3OSwgNDUsIDczLCAxMjgsIDczLCA0NSwgNzksIDEyOCwgNzMsIDQ1LCA2OSwgODUsIDEyOCwgNzMsIDQ1LCA2NiwgNjksIAotICAgIDY1LCA3NywgMTI4LCA3MywgNDUsIDY1LCA4MiwgNjUsIDY5LCA2NSwgMTI4LCA3MywgNDUsIDY1LCAxMjgsIDcyLCA5MCwgCi0gICAgOTAsIDkwLCA3MSwgMTI4LCA3MiwgOTAsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIDkwLCA4MCwgMTI4LCA3MiwgOTAsIDkwLCAKLSAgICAxMjgsIDcyLCA5MCwgODcsIDcxLCAxMjgsIDcyLCA5MCwgODcsIDEyOCwgNzIsIDkwLCA4NCwgMTI4LCA3MiwgOTAsIDcxLCAKLSAgICAxMjgsIDcyLCA4OSwgODMsIDg0LCA2OSwgODIsIDY5LCA4MywgNzMsIDIxMSwgNzIsIDg5LCA4MCwgNzksIDY4LCA3MywgNjUsIAotICAgIDgzLCA4NCwgNzksIDc2LCA2OSwgMTI4LCA3MiwgODksIDgwLCA3MiwgNjksIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MiwgCi0gICAgODksIDgwLCA3MiwgNjksIDc4LCA0NSwgNzcsIDczLCA3OCwgODUsIDgzLCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgNzgsIAotICAgIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCAyMDYsIDcyLCA4OCwgODcsIDcxLCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4OCwgCi0gICAgMTI4LCA3MiwgODgsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA4OCwgODUsIDc5LCAKLSAgICAxMjgsIDcyLCA4OCwgNzksIDg4LCAxMjgsIDcyLCA4OCwgNzksIDg0LCAxMjgsIDcyLCA4OCwgNzksIDgwLCAxMjgsIDcyLCAKLSAgICA4OCwgNzksIDEyOCwgNzIsIDg4LCA3MywgODgsIDEyOCwgNzIsIDg4LCA3MywgODQsIDEyOCwgNzIsIDg4LCA3MywgODAsIAotICAgIDEyOCwgNzIsIDg4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgODgsIDczLCA2OSwgCi0gICAgODAsIDEyOCwgNzIsIDg4LCA3MywgNjksIDEyOCwgNzIsIDg4LCA3MywgMTI4LCA3MiwgODgsIDY5LCA4OCwgMTI4LCA3MiwgCi0gICAgODgsIDY5LCA4MCwgMTI4LCA3MiwgODgsIDY5LCAxMjgsIDcyLCA4OCwgNjUsIDg4LCAxMjgsIDcyLCA4OCwgNjUsIDg0LCAKLSAgICAxMjgsIDcyLCA4OCwgNjUsIDgwLCAxMjgsIDcyLCA4OCwgNjUsIDEyOCwgNzIsIDg3LCA4NSwgMTI4LCA3MiwgODcsIDY1LCAKLSAgICA3MywgODIsIDEyOCwgNzIsIDg2LCAxMjgsIDcyLCA4NSwgODMsIDcyLCA2OSwgMTk2LCA3MiwgODUsIDgyLCA2NSwgNzgsIAotICAgIDEyOCwgNzIsIDg1LCA3OSwgODQsIDEyOCwgNzIsIDg1LCA3OCwgNjgsIDgyLCA2OSwgNjgsIDEyOCwgNzIsIDg1LCA3OCwgCi0gICAgNjgsIDgyLCA2OSwgMTk2LCA3MiwgODUsIDc4LCAxMjgsIDcyLCA4NSwgNzcsIDY1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCAKLSAgICA2NSwgMjA2LCA3MiwgODUsIDc2LCA1MCwgMTI4LCA3MiwgODUsIDczLCA3MywgODQsIDc5LCAxMjgsIDcyLCA4NSwgNjYsIAotICAgIDUwLCAxMjgsIDcyLCA4NSwgNjYsIDE3OCwgNzIsIDg1LCA2NiwgMTI4LCA3MiwgODUsIDY1LCA4MiwgNjUsIDY4LCA2OCwgCi0gICAgNzksIDEyOCwgNzIsIDg0LCA4MywgMTI4LCA3MiwgODQsIDc0LCAxMjgsIDcyLCA4MiwgODksIDg2LCA3OCwgNzMsIDE5MywgCi0gICAgNzIsIDgwLCA4NywgNzEsIDEyOCwgNzIsIDgwLCA2NSwgMTI4LCA3MiwgODAsIDEyOCwgNzIsIDc5LCA4NSwgODMsIDE5NywgCi0gICAgNzIsIDc5LCA4NSwgODIsIDcxLCA3NiwgNjUsIDgzLCA4MywgMTI4LCA3MiwgNzksIDg1LCA4MiwgNzEsIDc2LCA2NSwgODMsIAotICAgIDIxMSwgNzIsIDc5LCA4NSwgODIsIDEyOCwgNzIsIDc5LCA4NSwgMjEwLCA3MiwgNzksIDg0LCA2OSwgNzYsIDEyOCwgNzIsIAotICAgIDc5LCA4NCwgNjUsIDEyOCwgNzIsIDc5LCA4MywgODAsIDczLCA4NCwgNjUsIDc2LCAxMjgsIDcyLCA3OSwgODIsIDgzLCA2OSwgCi0gICAgMTI4LCA3MiwgNzksIDgyLCA4MywgMTk3LCA3MiwgNzksIDgyLCA3OCwgODMsIDEyOCwgNzIsIDc5LCA4MiwgNzMsIDkwLCAKLSAgICA3OSwgNzgsIDg0LCA2NSwgNzYsIDc2LCAyMTcsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDU0LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDU0LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCAKLSAgICA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgCi0gICAgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIAotICAgIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ5LCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDU0LCA0NSwgNDgsIDQ4LCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUzLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKLSAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUyLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDUyLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDUyLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDUyLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUyLCAKLSAgICA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgCi0gICAgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIAotICAgIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUyLCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUxLCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUxLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCAKLSAgICA4NCwgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgCi0gICAgNjUsIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIAotICAgIDc2LCA0NSwgNDgsIDUwLCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCAKLSAgICA0NSwgNDgsIDQ5LCA0NSwgNDgsIDU0LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgCi0gICAgNDgsIDQ5LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIAotICAgIDQ5LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCAKLSAgICA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgCi0gICAgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIAotICAgIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ5LCA0NSwgNDgsIDQ4LCAKLSAgICAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDU0LCAxMjgsIAotICAgIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUzLCAxMjgsIDcyLCAKLSAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUyLCAxMjgsIDcyLCA3OSwgCi0gICAgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUxLCAxMjgsIDcyLCA3OSwgODIsIAotICAgIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDUwLCAxMjgsIDcyLCA3OSwgODIsIDczLCAKLSAgICA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ5LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgCi0gICAgNzksIDc4LCA4NCwgNjUsIDc2LCA0NSwgNDgsIDQ4LCA0NSwgNDgsIDQ4LCAxMjgsIDcyLCA3OSwgODIsIDczLCA5MCwgNzksIAotICAgIDc4LCA4NCwgNjUsIDc2LCAxMjgsIDcyLCA3OSwgODIsIDczLCAxMjgsIDcyLCA3OSwgODIsIDE5MywgNzIsIDc5LCA3OSwgCi0gICAgODIsIDg1LCAxMjgsIDcyLCA3OSwgNzksIDgwLCAxMjgsIDcyLCA3OSwgNzksIDc4LCAxMjgsIDcyLCA3OSwgNzksIDc1LCAKLSAgICA2OSwgMTk2LCA3MiwgNzksIDc4LCA2OSwgODksIDY2LCA2OSwgNjksIDEyOCwgNzIsIDc5LCA3OCwgNjksIDIxNywgNzIsIAotICAgIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCA3MywgNjcsIDEyOCwgNzIsIDc5LCA3NywgNzksIDg0LCA3MiwgNjksIDg0LCAKLSAgICA3MywgMTk1LCA3MiwgNzksIDc2LCA2OSwgMTI4LCA3MiwgNzksIDc2LCA2OCwgNzMsIDc4LCAxOTksIDcyLCA3OSwgNzYsIAotICAgIDY1LCA3NywgMTI4LCA3MiwgNzksIDc2LCA2NSwgMjA1LCA3MiwgNzksIDc1LCA2NSwgMTI4LCA3MiwgNzksIDczLCAxMjgsIAotICAgIDcyLCA3OSwgNjcsIDcyLCA3OSwgMTI4LCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA3MiwgNzgsIDg1LCA3OSwgODgsIDEyOCwgCi0gICAgNzIsIDc4LCA4NSwgNzksIDEyOCwgNzIsIDc4LCA3OSwgODgsIDEyOCwgNzIsIDc4LCA3OSwgODQsIDEyOCwgNzIsIDc4LCAKLSAgICA3OSwgODAsIDEyOCwgNzIsIDc4LCA3MywgODgsIDEyOCwgNzIsIDc4LCA3MywgODQsIDEyOCwgNzIsIDc4LCA3MywgODAsIAotICAgIDEyOCwgNzIsIDc4LCA3MywgNjksIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4NCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgCi0gICAgODAsIDEyOCwgNzIsIDc4LCA3MywgNjksIDEyOCwgNzIsIDc4LCA3MywgMTI4LCA3MiwgNzgsIDY5LCA4OCwgMTI4LCA3MiwgCi0gICAgNzgsIDY5LCA4MCwgMTI4LCA3MiwgNzgsIDY5LCAxMjgsIDcyLCA3OCwgNjUsIDg4LCAxMjgsIDcyLCA3OCwgNjUsIDg0LCAKLSAgICAxMjgsIDcyLCA3OCwgNjUsIDgwLCAxMjgsIDcyLCA3OCwgNjUsIDEyOCwgNzIsIDc3LCA4OSwgODgsIDEyOCwgNzIsIDc3LCAKLSAgICA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NywgODksIDgyLCAxMjgsIDcyLCA3NywgODksIDgwLCAxMjgsIDcyLCA3NywgODksIAotICAgIDEyOCwgNzIsIDc3LCA4NSwgODgsIDEyOCwgNzIsIDc3LCA4NSwgODQsIDEyOCwgNzIsIDc3LCA4NSwgODIsIDg4LCAxMjgsIAotICAgIDcyLCA3NywgODUsIDgyLCAxMjgsIDcyLCA3NywgODUsIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCA4OCwgMTI4LCA3MiwgCi0gICAgNzcsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDEyOCwgNzIsIDc3LCA4NSwgMTI4LCA3MiwgNzcsIDc5LCAKLSAgICA4OCwgMTI4LCA3MiwgNzcsIDc5LCA4NCwgMTI4LCA3MiwgNzcsIDc5LCA4MCwgMTI4LCA3MiwgNzcsIDc5LCAxMjgsIDcyLCAKLSAgICA3NywgNzMsIDg4LCAxMjgsIDcyLCA3NywgNzMsIDg0LCAxMjgsIDcyLCA3NywgNzMsIDgwLCAxMjgsIDcyLCA3NywgNzMsIAotICAgIDY5LCA4OCwgMTI4LCA3MiwgNzcsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc3LCA3MywgNjksIDEyOCwgNzIsIDc3LCA3MywgCi0gICAgMTI4LCA3MiwgNzcsIDY5LCAxMjgsIDcyLCA3NywgNjUsIDg4LCAxMjgsIDcyLCA3NywgNjUsIDg0LCAxMjgsIDcyLCA3NywgCi0gICAgNjUsIDgwLCAxMjgsIDcyLCA3NywgNjUsIDEyOCwgNzIsIDc2LCA4OSwgODgsIDEyOCwgNzIsIDc2LCA4OSwgODQsIDEyOCwgCi0gICAgNzIsIDc2LCA4OSwgODIsIDg4LCAxMjgsIDcyLCA3NiwgODksIDgyLCAxMjgsIDcyLCA3NiwgODksIDgwLCAxMjgsIDcyLCAKLSAgICA3NiwgODksIDEyOCwgNzIsIDc2LCA4NSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgODQsIDEyOCwgNzIsIDc2LCA4NSwgODIsIAotICAgIDg4LCAxMjgsIDcyLCA3NiwgODUsIDgyLCAxMjgsIDcyLCA3NiwgODUsIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCA4OCwgCi0gICAgMTI4LCA3MiwgNzYsIDg1LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDEyOCwgNzIsIDc2LCA4NSwgMTI4LCA3MiwgCi0gICAgNzYsIDc5LCA4OCwgMTI4LCA3MiwgNzYsIDc5LCA4MCwgMTI4LCA3MiwgNzYsIDc5LCAxMjgsIDcyLCA3NiwgNzMsIDg4LCAKLSAgICAxMjgsIDcyLCA3NiwgNzMsIDg0LCAxMjgsIDcyLCA3NiwgNzMsIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCA4OCwgMTI4LCAKLSAgICA3MiwgNzYsIDczLCA2OSwgODAsIDEyOCwgNzIsIDc2LCA3MywgNjksIDEyOCwgNzIsIDc2LCA3MywgMTI4LCA3MiwgNzYsIAotICAgIDY5LCA4OCwgMTI4LCA3MiwgNzYsIDY5LCA4MCwgMTI4LCA3MiwgNzYsIDY5LCAxMjgsIDcyLCA3NiwgNjUsIDg4LCAxMjgsIAotICAgIDcyLCA3NiwgNjUsIDg0LCAxMjgsIDcyLCA3NiwgNjUsIDgwLCAxMjgsIDcyLCA3NiwgNjUsIDEyOCwgNzIsIDc1LCAxMjgsIAotICAgIDcyLCA3MywgOTAsIDY2LCAxMjgsIDcyLCA3MywgODMsIDg0LCA3OSwgODIsIDczLCAxOTUsIDcyLCA3MywgODIsIDczLCA4MSwgCi0gICAgMTI4LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDgzLCA4MCwgNjksIDY5LCAxOTYsIDcyLCA3MywgNzEsIDcyLCA0NSwgODIsIDY5LCAKLSAgICA4NiwgNjksIDgyLCA4MywgNjksIDY4LCA0NSwgMTg1LCA3MiwgNzMsIDcxLCA3MiwgNDUsIDcyLCA2OSwgNjksIDc2LCA2OSwgCi0gICAgMTk2LCA3MiwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgCi0gICAgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDcyLCA3MywgNjksIDg1LCA3MiwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCAKLSAgICA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzIsIDczLCA2OSwgODUsIDIwMCwgNzIsIAotICAgIDczLCA2OSwgODIsIDc5LCA3MSwgNzYsIDg5LCA4MCwgNzIsIDczLCAxOTUsIDcyLCA3MywgNjksIDEyOCwgNzIsIDczLCA2OCwgCi0gICAgNzMsIDc4LCAxOTksIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA3MiwgNzMsIDY4LCA2OSwgMTI4LCA3MiwgNzMsIDY2LCAKLSAgICA3MywgODMsIDY3LCA4NSwgODMsIDEyOCwgNzIsIDcyLCA4NywgNjUsIDEyOCwgNzIsIDcyLCA4NSwgMTI4LCA3MiwgNzIsIAotICAgIDczLCAxMjgsIDcyLCA3MiwgNjksIDY5LCAxMjgsIDcyLCA3MiwgNjksIDEyOCwgNzIsIDcyLCA2NSwgNjUsIDEyOCwgNzIsIAotICAgIDcxLCAxMjgsIDcyLCA2OSwgODgsIDczLCA3MCwgNzksIDgyLCAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgODIsIDY1LCAKLSAgICAyMDUsIDcyLCA2OSwgODgsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDcyLCA2OSwgODIsIDg1LCA4NCwgODUsIDEyOCwgNzIsIAotICAgIDY5LCA4MiwgODUsIDEyOCwgNzIsIDY5LCA4MiwgNzcsIDczLCA4NCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA3MywgCi0gICAgNzksIDc4LCA3MywgNjUsIDIwNiwgNzIsIDY5LCA4MiwgNzcsIDY5LCA4MywgMTI4LCA3MiwgNjksIDgyLCA2OSwgMTI4LCAKLSAgICA3MiwgNjksIDgyLCA2NiwgMTI4LCA3MiwgNjksIDgyLCA2NSwgNjksIDg1LCAyMDUsIDcyLCA2OSwgNzgsIDcxLCAxMjgsIAotICAgIDcyLCA2OSwgNzgsIDE5OSwgNzIsIDY5LCA3NywgODAsIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCA4NCwgMTI4LCA3MiwgCi0gICAgNjksIDc2LCA3NywgNjksIDIxMiwgNzIsIDY5LCA3NiwgMjA1LCA3MiwgNjksIDc2LCA3MywgNjcsIDc5LCA4MCwgODQsIDY5LCAKLSAgICA4MiwgMTI4LCA3MiwgNjksIDc1LCA4NSwgODQsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgNzMsIDgzLCA2OSwgNzMsIAotICAgIDEyOCwgNzIsIDY5LCA2NSwgODYsIDg5LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgNzgsIDc2LCAyMTcsIDcyLCA2OSwgCi0gICAgNjUsIDg2LCA2OSwgNzgsIDEyOCwgNzIsIDY5LCA2NSwgODYsIDY5LCAyMDYsIDcyLCA2OSwgNjUsIDgyLCA4NCwgODMsIAotICAgIDEyOCwgNzIsIDY5LCA2NSwgODIsIDg0LCA0NSwgODMsIDcyLCA2NSwgODAsIDY5LCAxOTYsIDcyLCA2OSwgNjUsIDgyLCA4NCwgCi0gICAgMTI4LCA3MiwgNjksIDY1LCA4MiwgMjEyLCA3MiwgNjksIDY1LCA4MiwgNDUsIDc4LCA3OSwgNDUsIDY5LCA4NiwgNzMsIAotICAgIDIwNCwgNzIsIDY5LCA2NSwgNjgsIDgzLCA4NCwgODIsIDc5LCA3NSwgNjksIDEyOCwgNzIsIDY5LCA2NSwgNjgsIDgzLCA4NCwgCi0gICAgNzksIDc4LCAxOTcsIDcyLCA2OSwgNjUsIDY4LCA4MCwgNzIsIDc5LCA3OCwgNjksIDEyOCwgNzIsIDY5LCA2NSwgNjgsIDczLCAKLSAgICA3OCwgNzEsIDEyOCwgNzIsIDY2LCA2NSwgODMsIDY1LCA0NSwgNjksIDgzLCA2NSwgODMsIDE5MywgNzIsIDY2LCA2NSwgODMsIAotICAgIDE5MywgNzIsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzIsIDY1LCA4NiwgNjksIDEyOCwgNzIsIDY1LCA4NSwgCi0gICAgODAsIDg0LCA4MywgODQsIDczLCA3NywgNzcsIDY5LCAxMjgsIDcyLCA2NSwgODQsIDcyLCA3MywgMTI4LCA3MiwgNjUsIDg0LCAKLSAgICA2OSwgMTI4LCA3MiwgNjUsIDg0LCA2NywgNzIsIDczLCA3OCwgMTk5LCA3MiwgNjUsIDg0LCA2NSwgMTk4LCA3MiwgNjUsIAotICAgIDgzLCA2OSwgMjEwLCA3MiwgNjUsIDgzLCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCA3OCwgCi0gICAgMTI4LCA3MiwgNjUsIDgyLCA4MCwgNzksIDc5LCAyMDYsIDcyLCA2NSwgODIsIDc3LCA3OSwgNzgsIDczLCA2NywgMTI4LCAKLSAgICA3MiwgNjUsIDgyLCA3NSwgNzYsIDY5LCA2NSwgMjA2LCA3MiwgNjUsIDgyLCA2OCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzIsIAotICAgIDY1LCA4MiwgMTk2LCA3MiwgNjUsIDgwLCA4MCwgMjE3LCA3MiwgNjUsIDc4LCA4NSwgNzgsIDc5LCAyMDcsIDcyLCA2NSwgCi0gICAgNzgsIDcxLCA5MCwgNzIsIDc5LCAyMTMsIDcyLCA2NSwgNzgsIDY4LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMjExLCAKLSAgICA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCA4MywgMTI4LCA3MiwgNjUsIDc4LCA2OCwgNzYsIDY5LCAxMjgsIDcyLCA2NSwgNzgsIAotICAgIDY4LCA2NiwgNjUsIDcxLCAxMjgsIDcyLCA2NSwgNzgsIDY4LCAxMjgsIDcyLCA2NSwgNzgsIDQ1LCA2NSwgNzUsIDY1LCA4NCwgCi0gICAgMTI4LCA3MiwgNjUsIDc3LCA5MCwgNjUsIDEyOCwgNzIsIDY1LCA3NywgODMsIDg0LCA2OSwgMjEwLCA3MiwgNjUsIDc3LCAKLSAgICA3NywgNjksIDgyLCAxMjgsIDcyLCA2NSwgNzcsIDc3LCA2OSwgMjEwLCA3MiwgNjUsIDc3LCA2NiwgODUsIDgyLCA3MSwgNjksIAotICAgIDgyLCAxMjgsIDcyLCA2NSwgNzYsIDgxLCA2NSwgMTI4LCA3MiwgNjUsIDc2LCA3OSwgMTI4LCA3MiwgNjUsIDc2LCA3MCwgCi0gICAgNDUsIDY3LCA3MywgODIsIDY3LCA3NiwgMTk3LCA3MiwgNjUsIDc2LCA3MCwgMTI4LCA3MiwgNjUsIDc2LCA2NiwgNjksIDgyLCAKLSAgICA2OCwgMTI4LCA3MiwgNjUsIDc2LCA2NSwgNzgsIDg0LCA2NSwgMTI4LCA3MiwgNjUsIDczLCA4NCwgODUsIDEyOCwgNzIsIAotICAgIDY1LCA3MywgODIsIDY3LCA4NSwgODQsIDEyOCwgNzIsIDY1LCA3MywgODIsIDEyOCwgNzIsIDY1LCA3MSwgNzYsIDY1LCAKLSAgICAyMTgsIDcyLCA2NSwgNzEsIDc2LCAxMjgsIDcyLCA2NSwgNzAsIDg1LCA3NSwgNzIsIDY1LCAxMjgsIDcyLCA2NSwgNzAsIAotICAgIDg1LCA3NSwgNzIsIDEyOCwgNzIsIDY1LCA2OSwgNzEsIDIwNCwgNzIsIDY1LCA2NSwgODIsIDg1LCAxMjgsIDcyLCA2NSwgCi0gICAgNjUsIDc3LCAxMjgsIDcyLCA2NSwgMTkzLCA3MiwgNjUsIDQ1LCA3MiwgNjUsIDEyOCwgNzIsIDQ4LCA0OCwgNTYsIDEyOCwgCi0gICAgNzIsIDQ4LCA0OCwgNTUsIDEyOCwgNzIsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCAxMjgsIDcyLCAKLSAgICA0OCwgNDgsIDUzLCAxMjgsIDcyLCA0OCwgNDgsIDUyLCAxMjgsIDcyLCA0OCwgNDgsIDUxLCAxMjgsIDcyLCA0OCwgNDgsIAotICAgIDUwLCAxMjgsIDcyLCA0OCwgNDgsIDQ5LCAxMjgsIDcyLCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3MSwgODksIDg1LCAxMjgsIAotICAgIDcxLCA4OSwgNzksIDc4LCAxMjgsIDcxLCA4OSwgNzksIDEyOCwgNzEsIDg5LCA3MywgMTI4LCA3MSwgODksIDcwLCAyMTMsIAotICAgIDcxLCA4OSwgNjksIDY5LCAxMjgsIDcxLCA4OSwgNjUsIDgzLCAxMjgsIDcxLCA4OSwgNjUsIDY1LCAxMjgsIDcxLCA4OSwgCi0gICAgNjUsIDEyOCwgNzEsIDg5LCAxMjgsIDcxLCA4NywgODUsIDEyOCwgNzEsIDg3LCA3MywgMTI4LCA3MSwgODcsIDY5LCA2OSwgCi0gICAgMTI4LCA3MSwgODcsIDY5LCAxMjgsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA4NywgNjUsIDEyOCwgNzEsIDg2LCAxMjgsIAotICAgIDcxLCA4NSwgODIsIDg1LCA4MywgNzIsIDEyOCwgNzEsIDg1LCA4MiwgODUsIDc4LCAxMjgsIDcxLCA4NSwgODIsIDY1LCA3NywgCi0gICAgODUsIDg0LCA3OSwgNzgsIDEyOCwgNzEsIDg1LCA4MiwgNTUsIDEyOCwgNzEsIDg1LCA3OCwgODUsIDEyOCwgNzEsIDg1LCAKLSAgICA3OCwgMjEzLCA3MSwgODUsIDIwNSwgNzEsIDg1LCA3NiwgMTI4LCA3MSwgODUsIDczLCA4NCwgNjUsIDgyLCAxMjgsIDcxLCAKLSAgICA4NSwgMTk5LCA3MSwgODUsIDY5LCA3MiwgMTI4LCA3MSwgODUsIDY5LCAyMDAsIDcxLCA4NSwgNjgsIDEyOCwgNzEsIDg1LCAKLSAgICAxOTYsIDcxLCA4NSwgNjUsIDgyLCA2OCwgODMsIDc3LCA2NSwgNzgsIDEyOCwgNzEsIDg1LCA2NSwgODIsIDY4LCA2OSwgNjgsIAotICAgIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2OCwgNjksIDE5NiwgNzEsIDg1LCA2NSwgODIsIDY4LCAKLSAgICAxMjgsIDcxLCA4NSwgNjUsIDgyLCA2NSwgNzgsIDIwMSwgNzEsIDg1LCAxOTMsIDcxLCA4NSwgMTc4LCA3MSwgODQsIDY5LCAKLSAgICAyMTAsIDcxLCA4MywgODUsIDc3LCAxMjgsIDcxLCA4MywgODUsIDIwNSwgNzEsIDgyLCAyMTMsIDcxLCA4MiwgNzksIDg3LCAKLSAgICA3MywgNzgsIDE5OSwgNzEsIDgyLCA3OSwgODUsIDc4LCA2OCwgMTI4LCA3MSwgODIsIDc5LCA3OCwgODQsIDcyLCA3MywgODMsIAotICAgIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcxLCA4MiwgNzMsIDc4LCA3OCwgNzMsIDc4LCAxOTksIDcxLCA4MiwgNzMsIDc3LCA2NSwgCi0gICAgNjcsIDczLCA3OCwgMTk5LCA3MSwgODIsIDY5LCA3MSwgNzksIDgyLCA3MywgNjUsIDIwNiwgNzEsIDgyLCA2OSwgNjksIAotICAgIDIwNiwgNzEsIDgyLCA2OSwgNjUsIDg0LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgCi0gICAgNDUsIDg0LCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA4MiwgNjksIDY1LCA4NCwgNjksIDgyLCA0NSwgODQsIDcyLCA2NSwgMjA2LCAKLSAgICA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCAyMTAsIDcxLCA4MiwgNjksIDY1LCAyMTIsIDcxLCA4MiwgNjUsIDg2LCA2OSwgODksIAotICAgIDY1LCA4MiwgMTk2LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDcxLCA4MiwgCi0gICAgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgMTI4LCA3MSwgODIsIAotICAgIDY1LCA4NiwgMTk3LCA3MSwgODIsIDY1LCA4NCwgNjksIDgyLCAxMjgsIDcxLCA4MiwgNjUsIDgzLCA4MywgMTI4LCA3MSwgCi0gICAgODIsIDY1LCA4MywgMjExLCA3MSwgODIsIDY1LCA4MCwgNzIsIDY5LCA3NywgMTk3LCA3MSwgODIsIDY1LCA4MCwgNjksIDgzLCAKLSAgICAxMjgsIDcxLCA4MiwgNjUsIDc3LCA3NywgMTkzLCA3MSwgODIsIDY1LCA3MywgNzgsIDEyOCwgNzEsIDgyLCA2NSwgNjgsIAotICAgIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgODIsIDY1LCA2NywgNjksIDEyOCwgNzEsIDgyLCA2NSwgNjcsIDE5NywgCi0gICAgNzEsIDgwLCA2NSwgMTI4LCA3MSwgNzksIDgyLCA4NCwgNzIsIDc3LCA3MywgNzUsIDc5LCAyMDYsIDcxLCA3OSwgODIsIDg0LCAKLSAgICAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgODQsIDY5LCA4MiwgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNzEsIDc5LCA4MywgODksIAotICAgIDc4LCA4NCwgNzIsIDY5LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCA3MSwgNzksIDgyLCA3MSwgCi0gICAgNzMsIDEyOCwgNzEsIDc5LCA4MiwgNjUsIDEyOCwgNzEsIDc5LCA3OSwgMTk2LCA3MSwgNzksIDc4LCA3MSwgMTI4LCA3MSwgCi0gICAgNzksIDc2LCA2OCwgMTI4LCA3MSwgNzksIDc1LCAxMjgsIDcxLCA3OSwgNzMsIDc4LCAxOTksIDcxLCA3OSwgNjYsIDc2LCAKLSAgICA3MywgNzgsIDEyOCwgNzEsIDc5LCA2NSwgNzYsIDEyOCwgNzEsIDc5LCA2NSwgMjA0LCA3MSwgNzksIDY1LCAxMjgsIDcxLCAKLSAgICA3OCwgODksIDczLCA4MywgMTI4LCA3MSwgNzgsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAxMjgsIDcxLCA3NiwgNzksIAotICAgIDg3LCA3MywgNzgsIDE5OSwgNzEsIDc2LCA3OSwgODQsIDg0LCA2NSwgMjA0LCA3MSwgNzYsIDc5LCA2NiwgMTk3LCA3MSwgCi0gICAgNzYsIDczLCA4MywgODMsIDY1LCA3OCwgNjgsIDIwNywgNzEsIDc2LCA2OSwgNzMsIDY3LCAyMDAsIDcxLCA3NiwgNjUsIDcxLCAKLSAgICA3OSwgNzYsIDczLCAxMjgsIDcxLCA3NiwgNjUsIDEyOCwgNzEsIDc0LCA2OSwgMTI4LCA3MSwgNzMsIDg4LCAxMjgsIDcxLCAKLSAgICA3MywgODQsIDEyOCwgNzEsIDczLCA4MywgNzIsIDEyOCwgNzEsIDczLCA4MywgMjAwLCA3MSwgNzMsIDgzLCA2NSwgNzYsIAotICAgIDEyOCwgNzEsIDczLCA4MiwgODUsIDY4LCA2NSwgNjUsIDEyOCwgNzEsIDczLCA4MiwgNzYsIDEyOCwgNzEsIDczLCA4MiwgCi0gICAgNTEsIDEyOCwgNzEsIDczLCA4MiwgMTc5LCA3MSwgNzMsIDgyLCA1MCwgMTI4LCA3MSwgNzMsIDgyLCAxNzgsIDcxLCA3MywgCi0gICAgODAsIDEyOCwgNzEsIDczLCA3OCwgNzMsIDczLCAxMjgsIDcxLCA3MywgNzcsIDY5LCA3NiwgMTI4LCA3MSwgNzMsIDc3LCAKLSAgICA2OSwgMjA0LCA3MSwgNzMsIDc3LCAxMjgsIDcxLCA3MywgNzEsIDY1LCAxMjgsIDcxLCA3MywgNjksIDg0LCAxMjgsIDcxLCAKLSAgICA3MywgNjgsIDczLCA3NywgMTI4LCA3MSwgNzMsIDY2LCA2NiwgNzksIDg1LCAyMTEsIDcxLCA3MywgNjYsIDY1LCAxMjgsIAotICAgIDcxLCA3MywgNTIsIDEyOCwgNzEsIDczLCAxODAsIDcxLCA3MiwgOTAsIDEyOCwgNzEsIDcyLCA4NywgNjUsIDEyOCwgNzEsIAotICAgIDcyLCA4NSwgNzgsIDc4LCA2NSwgMTI4LCA3MSwgNzIsIDg1LCA3OCwgNzgsIDE5MywgNzEsIDcyLCA4NSwgMTI4LCA3MSwgCi0gICAgNzIsIDc5LCA4NSwgMTI4LCA3MSwgNzIsIDc5LCA4MywgODQsIDEyOCwgNzEsIDcyLCA3OSwgMTI4LCA3MSwgNzIsIDczLCAKLSAgICAxMjgsIDcxLCA3MiwgNzIsIDY1LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA4OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNzgsIAotICAgIDEyOCwgNzEsIDcyLCA2OSwgODUsIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA3MSwgCi0gICAgNzIsIDY5LCA3OCwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA4MiwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjksIDg1LCAKLSAgICA2NSwgNjksIDcxLCA3MiwgNjksIDg1LCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2OSwgODQsIDEyOCwgNzEsIDcyLCA2OSwgNjksIAotICAgIDEyOCwgNzEsIDcyLCA2OSwgMTI4LCA3MSwgNzIsIDE5NywgNzEsIDcyLCA2NSwgODksIDc4LCAxMjgsIDcxLCA3MiwgNjUsIAotICAgIDgyLCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2NSwgODAsIDEyOCwgNzEsIDcyLCA2NSwgNzgsIDEyOCwgNzEsIDcyLCA2NSwgCi0gICAgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNzIsIDY1LCA3MywgNzgsIDg1LCAxMjgsIDcxLCA3MiwgNjUsIDczLCA3OCwgMTI4LCAKLSAgICA3MSwgNzIsIDY1LCA3MywgMjA2LCA3MSwgNzIsIDY1LCA2OCwgMTI4LCA3MSwgNzIsIDY1LCA2NSwgNzcsIDY1LCA2OSwgCi0gICAgMTI4LCA3MSwgNzIsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIDg3LCA3MywgMTI4LCA3MSwgNzEsIDg3LCA2OSwgNjksIDEyOCwgCi0gICAgNzEsIDcxLCA4NywgNjksIDEyOCwgNzEsIDcxLCA4NywgNjUsIDY1LCAxMjgsIDcxLCA3MSwgODcsIDY1LCAxMjgsIDcxLCAKLSAgICA3MSwgODUsIDg4LCAxMjgsIDcxLCA3MSwgODUsIDg0LCAxMjgsIDcxLCA3MSwgODUsIDgyLCA4OCwgMTI4LCA3MSwgNzEsIAotICAgIDg1LCA4MiwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODgsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg0LCAxMjgsIDcxLCA3MSwgCi0gICAgODUsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgMTI4LCA3MSwgNzEsIDc5LCA4OCwgMTI4LCA3MSwgNzEsIDc5LCAKLSAgICA4NCwgMTI4LCA3MSwgNzEsIDc5LCA4MCwgMTI4LCA3MSwgNzEsIDczLCA4OCwgMTI4LCA3MSwgNzEsIDczLCA4NCwgMTI4LCAKLSAgICA3MSwgNzEsIDczLCA2OSwgODgsIDEyOCwgNzEsIDcxLCA3MywgNjksIDgwLCAxMjgsIDcxLCA3MSwgNzMsIDY5LCAxMjgsIAotICAgIDcxLCA3MSwgNjksIDg4LCAxMjgsIDcxLCA3MSwgNjksIDg0LCAxMjgsIDcxLCA3MSwgNjksIDgwLCAxMjgsIDcxLCA3MSwgCi0gICAgNjUsIDg4LCAxMjgsIDcxLCA3MSwgNjUsIDg0LCAxMjgsIDcxLCA3MSwgNjUsIDY1LCAxMjgsIDcxLCA2OSwgODQsIDE5MywgCi0gICAgNzEsIDY5LCA4MywgODQsIDg1LCA4MiwgNjksIDEyOCwgNzEsIDY5LCA4MywgNzIsIDg1LCAxMjgsIDcxLCA2OSwgODMsIDcyLCAKLSAgICA4NCwgNzMsIDc4LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NCwgNzMsIDIwNiwgNzEsIDY5LCA4MywgNzIsIDUwLCAxMjgsIAotICAgIDcxLCA2OSwgODIsIDgzLCA3MiwgNjUsIDg5LCA3MywgNzcsIDEyOCwgNzEsIDY5LCA4MiwgNzcsIDY1LCAyMDYsIDcxLCA2OSwgCi0gICAgODIsIDY5LCA4MywgNzIsIDEyOCwgNzEsIDY5LCA4MiwgNjksIDgzLCAyMDAsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIDgyLCAKLSAgICA3MywgNjcsIDY1LCA3NiwgNzYsIDIxNywgNzEsIDY5LCA3OSwgNzcsIDY5LCA4NCwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzgsIAotICAgIDg0LCA3NiwgMTk3LCA3MSwgNjksIDc4LCA3MywgODQsIDczLCA4NiwgNjksIDEyOCwgNzEsIDY5LCA3OCwgNzMsIDc1LCAKLSAgICAyMDEsIDcxLCA2OSwgNzgsIDY5LCA4MiwgNzMsIDE5NSwgNzEsIDY5LCA3NywgNzMsIDc4LCA3MywgMTI4LCA3MSwgNjksIAotICAgIDc3LCA3MywgNzgsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDcxLCA2OSwgMjA1LCA3MSwgNjksIDY4LCA3OSwgNzYsIDY1LCAKLSAgICAxMjgsIDcxLCA2OSwgNjgsIDY5LCAxMjgsIDcxLCA2OSwgNjYsIDIwNywgNzEsIDY5LCA2NiwgMTkzLCA3MSwgNjksIDY1LCAKLSAgICA4MiwgMTI4LCA3MSwgNjksIDY1LCAyMTAsIDcxLCA2OCwgNjUsIDc4LCAxMjgsIDcxLCA2NywgNzMsIDcxLCAxMjgsIDcxLCAKLSAgICA2NywgNjUsIDIwNiwgNzEsIDY2LCA3OSwgNzgsIDEyOCwgNzEsIDY2LCA3MywgNjksIDE5NywgNzEsIDY2LCA2OSwgODUsIAotICAgIDg4LCAxMjgsIDcxLCA2NiwgNjksIDg0LCAxMjgsIDcxLCA2NiwgNjUsIDg5LCA3MywgMTI4LCA3MSwgNjYsIDY1LCA3NSwgCi0gICAgODUsIDgyLCA4NSwgNzgsIDY5LCA3OCwgMTI4LCA3MSwgNjYsIDEyOCwgNzEsIDY1LCA4OSwgNjUsIDc4LCA4NSwgNzUsIDczLCAKLSAgICA4NCwgODQsIDY1LCAxMjgsIDcxLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcxLCA2NSwgODksIDEyOCwgNzEsIAotICAgIDY1LCA4NSwgNzgsIDg0LCA3NiwgNjksIDg0LCAxMjgsIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgNzEsIDEyOCwgCi0gICAgNzEsIDY1LCA4NCwgNzIsIDY5LCA4MiwgNzMsIDc4LCAxOTksIDcxLCA2NSwgODQsIDY5LCAxMjgsIDcxLCA2NSwgODMsIDcyLCAKLSAgICA2NSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgODMsIDcyLCA4NSwgNzgsIDczLCAxMjgsIDcxLCA2NSwgODIsIDc5LCA3OCwgCi0gICAgMTI4LCA3MSwgNjUsIDgyLCA3NywgNjksIDc4LCA4NCwgMTI4LCA3MSwgNjUsIDgyLCA2OCwgNjksIDc4LCAxMjgsIDcxLCAKLSAgICA2NSwgODIsIDUxLCAxMjgsIDcxLCA2NSwgODAsIDgwLCA2OSwgMTk2LCA3MSwgNjUsIDIwOCwgNzEsIDY1LCA3OCwgNzcsIAotICAgIDY1LCAxMjgsIDcxLCA2NSwgNzgsIDcxLCA3MywgNjUsIDEyOCwgNzEsIDY1LCA3OCwgNjgsIDE5MywgNzEsIDY1LCA3OCwgCi0gICAgNTAsIDEyOCwgNzEsIDY1LCA3OCwgMTc4LCA3MSwgNjUsIDc3LCA3NywgNjUsIDEyOCwgNzEsIDY1LCA3NywgNzYsIDY1LCAKLSAgICAxMjgsIDcxLCA2NSwgNzcsIDc2LCAxMjgsIDcxLCA2NSwgNzcsIDY5LCAxMjgsIDcxLCA2NSwgNzcsIDE5NywgNzEsIDY1LCAKLSAgICA3NywgNjUsIDc4LCAxMjgsIDcxLCA2NSwgNzcsIDY1LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgMjA0LCA3MSwgNjUsIAotICAgIDcxLCAxMjgsIDcxLCA2NSwgNzAsIDEyOCwgNzEsIDY1LCAxOTgsIDcxLCA2NSwgNjksIDg0LCA4NCwgNjUsIDQ1LCA4MCwgCi0gICAgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNzEsIDY1LCA2OCwgNzksIDc2LCAxMjgsIDcxLCA2NSwgNjgsIDEyOCwgNzEsIDY1LCAKLSAgICAxOTYsIDcxLCA2NSwgNjYsIDY1LCAxMjgsIDcxLCA2NSwgNjYsIDE5MywgNzEsIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDcxLCAKLSAgICA2NSwgMTc4LCA3MSwgNDgsIDUzLCA1MiwgMTI4LCA3MSwgNDgsIDUzLCA1MSwgMTI4LCA3MSwgNDgsIDUzLCA1MCwgMTI4LCAKLSAgICA3MSwgNDgsIDUzLCA0OSwgMTI4LCA3MSwgNDgsIDUzLCA0OCwgMTI4LCA3MSwgNDgsIDUyLCA1NywgMTI4LCA3MSwgNDgsIAotICAgIDUyLCA1NiwgMTI4LCA3MSwgNDgsIDUyLCA1NSwgMTI4LCA3MSwgNDgsIDUyLCA1NCwgMTI4LCA3MSwgNDgsIDUyLCA1MywgCi0gICAgNjUsIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIDEyOCwgNzEsIDQ4LCA1MiwgNTIsIDEyOCwgNzEsIDQ4LCA1MiwgNTEsIDY1LCAKLSAgICAxMjgsIDcxLCA0OCwgNTIsIDUxLCAxMjgsIDcxLCA0OCwgNTIsIDUwLCAxMjgsIDcxLCA0OCwgNTIsIDQ5LCAxMjgsIDcxLCAKLSAgICA0OCwgNTIsIDQ4LCAxMjgsIDcxLCA0OCwgNTEsIDU3LCAxMjgsIDcxLCA0OCwgNTEsIDU2LCAxMjgsIDcxLCA0OCwgNTEsIAotICAgIDU1LCA2NSwgMTI4LCA3MSwgNDgsIDUxLCA1NSwgMTI4LCA3MSwgNDgsIDUxLCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgCi0gICAgNTQsIDEyOCwgNzEsIDQ4LCA1MSwgNTMsIDEyOCwgNzEsIDQ4LCA1MSwgNTIsIDEyOCwgNzEsIDQ4LCA1MSwgNTEsIDEyOCwgCi0gICAgNzEsIDQ4LCA1MSwgNTAsIDEyOCwgNzEsIDQ4LCA1MSwgNDksIDEyOCwgNzEsIDQ4LCA1MSwgNDgsIDEyOCwgNzEsIDQ4LCAKLSAgICA1MCwgNTcsIDEyOCwgNzEsIDQ4LCA1MCwgNTYsIDEyOCwgNzEsIDQ4LCA1MCwgNTUsIDEyOCwgNzEsIDQ4LCA1MCwgNTQsIAotICAgIDY1LCAxMjgsIDcxLCA0OCwgNTAsIDU0LCAxMjgsIDcxLCA0OCwgNTAsIDUzLCAxMjgsIDcxLCA0OCwgNTAsIDUyLCAxMjgsIAotICAgIDcxLCA0OCwgNTAsIDUxLCAxMjgsIDcxLCA0OCwgNTAsIDUwLCAxMjgsIDcxLCA0OCwgNTAsIDQ5LCAxMjgsIDcxLCA0OCwgCi0gICAgNTAsIDQ4LCA2NSwgMTI4LCA3MSwgNDgsIDUwLCA0OCwgMTI4LCA3MSwgNDgsIDQ5LCA1NywgMTI4LCA3MSwgNDgsIDQ5LCAKLSAgICA1NiwgMTI4LCA3MSwgNDgsIDQ5LCA1NSwgMTI4LCA3MSwgNDgsIDQ5LCA1NCwgMTI4LCA3MSwgNDgsIDQ5LCA1MywgMTI4LCAKLSAgICA3MSwgNDgsIDQ5LCA1MiwgMTI4LCA3MSwgNDgsIDQ5LCA1MSwgMTI4LCA3MSwgNDgsIDQ5LCA1MCwgMTI4LCA3MSwgNDgsIAotICAgIDQ5LCA0OSwgNjUsIDEyOCwgNzEsIDQ4LCA0OSwgNDksIDEyOCwgNzEsIDQ4LCA0OSwgNDgsIDEyOCwgNzEsIDQ4LCA0OCwgCi0gICAgNTcsIDEyOCwgNzEsIDQ4LCA0OCwgNTYsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDY2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCAKLSAgICA2NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgMTI4LCA3MSwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIAotICAgIDEyOCwgNzEsIDQ4LCA0OCwgNTMsIDEyOCwgNzEsIDQ4LCA0OCwgNTIsIDEyOCwgNzEsIDQ4LCA0OCwgNTEsIDEyOCwgNzEsIAotICAgIDQ4LCA0OCwgNTAsIDEyOCwgNzEsIDQ4LCA0OCwgNDksIDEyOCwgNzAsIDg5LCA4OCwgMTI4LCA3MCwgODksIDg0LCAxMjgsIAotICAgIDcwLCA4OSwgODAsIDEyOCwgNzAsIDg5LCA2NSwgMTI4LCA3MCwgODcsIDczLCAxMjgsIDcwLCA4NywgNjksIDY5LCAxMjgsIAotICAgIDcwLCA4NywgNjksIDEyOCwgNzAsIDg3LCA2NSwgNjUsIDEyOCwgNzAsIDg3LCA2NSwgMTI4LCA3MCwgODYsIDgzLCA1MSwgCi0gICAgMTI4LCA3MCwgODYsIDgzLCA1MCwgMTI4LCA3MCwgODYsIDgzLCA0OSwgMTI4LCA3MCwgODUsIDg4LCAxMjgsIDcwLCA4NSwgCi0gICAgODQsIDEyOCwgNzAsIDg1LCA4MywgNjksIDEyOCwgNzAsIDg1LCA4MywgMTkzLCA3MCwgODUsIDgyLCA4OCwgMTI4LCA3MCwgCi0gICAgODUsIDgwLCAxMjgsIDcwLCA4NSwgNzgsIDY5LCA4MiwgNjUsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAKLSAgICA2NSwgMjA0LCA3MCwgODUsIDc4LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzAsIDg1LCA3NiwgNzYsIDc4LCA2OSwgODMsIAotICAgIDgzLCAxMjgsIDcwLCA4NSwgNzYsIDIwNCwgNzAsIDg1LCA3NCwgNzMsIDEyOCwgNzAsIDg1LCA2OSwgODQsIDEyOCwgNzAsIAotICAgIDg1LCA2OSwgMjA0LCA3MCwgODUsIDY5LCAxMjgsIDcwLCA4NCwgNzIsIDc5LCA4MiwgMTkzLCA3MCwgODIsIDc5LCA4NywgCi0gICAgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDgyLCA3OSwgODcsIDc4LCA3MywgNzgsIDE5OSwgNzAsIDgyLCA3OSwgODcsIDc4LCAKLSAgICAxMjgsIDcwLCA4MiwgNzksIDc4LCA4NCwgNDUsIDg0LCA3MywgNzYsIDg0LCA2OSwgMTk2LCA3MCwgODIsIDc5LCA3OCwgODQsIAotICAgIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzAsIDgyLCA3OSwgMjA1LCA3MCwgODIsIDc5LCA3MSwgMTI4LCA3MCwgCi0gICAgODIsIDc5LCAxOTksIDcwLCA4MiwgNzMsIDg0LCA4NSwgMTI4LCA3MCwgODIsIDczLCA2OSwgODMsIDEyOCwgNzAsIDgyLCAKLSAgICA3MywgNjksIDE5NiwgNzAsIDgyLCA3MywgNjcsIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3MCwgODIsIDY5LCA4NCwgNjYsIAotICAgIDc5LCA2NSwgODIsIDY4LCAxMjgsIDcwLCA4MiwgNjksIDc4LCA2NywgMjAwLCA3MCwgODIsIDY5LCA2OSwgMTI4LCA3MCwgCi0gICAgODIsIDY5LCAxOTcsIDcwLCA4MiwgNjUsIDc4LCAxOTUsIDcwLCA4MiwgNjUsIDc3LCA2OSwgMTI4LCA3MCwgODIsIDY1LCAKLSAgICA3MSwgODIsIDY1LCA3OCwgODQsIDEyOCwgNzAsIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIAotICAgIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDcwLCA3OSwgODgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDc4LCAKLSAgICAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCAyMDYsIDcwLCA3OSwgODUsIDgyLCA0NSwgODQsIDcyLCA3MywgODIsIAotICAgIDg0LCA4OSwgMTI4LCA3MCwgNzksIDg1LCA4MiwgNDUsIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA3MCwgNzksIDg1LCA4MiwgCi0gICAgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA3MCwgNzksIDg1LCA4MiwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDc5LCAKLSAgICA4NSwgMjEwLCA3MCwgNzksIDg1LCA3OCwgODQsIDY1LCA3MywgNzgsIDEyOCwgNzAsIDc5LCA4MywgODQsIDY5LCA4MiwgNzMsIAotICAgIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA4NywgNjUsIDgyLCA2OCwgMTI4LCA3MCwgNzksIDgyLCA4NCwgODksIDEyOCwgCi0gICAgNzAsIDc5LCA4MiwgODQsIDIxNywgNzAsIDc5LCA4MiwgODQsIDY5LCAxMjgsIDcwLCA3OSwgODIsIDc3LCAyMTEsIDcwLCAKLSAgICA3OSwgODIsIDc3LCA2NSwgODQsIDg0LCA3MywgNzgsIDcxLCAxMjgsIDcwLCA3OSwgODIsIDc1LCA2OSwgMTk2LCA3MCwgNzksIAotICAgIDgyLCA2NywgNjksIDgzLCAxMjgsIDcwLCA3OSwgODIsIDY3LCA2OSwgMTI4LCA3MCwgNzksIDgwLCAxMjgsIDcwLCA3OSwgCi0gICAgNzksIDg0LCA4MywgODQsIDc5LCA3OSwgNzYsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDgwLCA4MiwgNzMsIDc4LCA4NCwgODMsIAotICAgIDEyOCwgNzAsIDc5LCA3OSwgODQsIDc4LCA3OSwgODQsIDE5NywgNzAsIDc5LCA3OSwgODQsIDY2LCA2NSwgNzYsIDc2LCAKLSAgICAxMjgsIDcwLCA3OSwgNzksIDg0LCAxMjgsIDcwLCA3OSwgNzksIDY4LCAxMjgsIDcwLCA3OSwgNzksIDEyOCwgNzAsIDc5LCAKLSAgICA3OCwgNzEsIDc3LCA2NSwgNzgsIDEyOCwgNzAsIDc5LCA3NywgMTI4LCA3MCwgNzksIDc2LCA3NiwgODksIDEyOCwgNzAsIAotICAgIDc5LCA3NiwgNzYsIDc5LCA4NywgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDc2LCA2OCwgNjksIDgyLCAxMjgsIDcwLCA3OSwgCi0gICAgNzYsIDY4LCA2OSwgMTk2LCA3MCwgNzksIDcxLCA3MSwgODksIDEyOCwgNzAsIDIwNywgNzAsIDc3LCAxMjgsIDcwLCA3NiwgCi0gICAgODksIDEyOCwgNzAsIDc2LCA4NSwgODQsIDg0LCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MCwgNzYsIDg1LCA4NCwgNjksIAotICAgIDEyOCwgNzAsIDc2LCA4NSwgODMsIDcyLCA2OSwgMTk2LCA3MCwgNzYsIDc5LCA4NywgNzMsIDc4LCAxOTksIDcwLCA3NiwgCi0gICAgNzksIDg3LCA2OSwgMjEwLCA3MCwgNzYsIDc5LCA4NSwgODIsIDczLCA4MywgNzIsIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY5LCAKLSAgICA4NCwgODQsIDY5LCAxMjgsIDcwLCA3NiwgNzksIDgyLCA2NSwgMjA0LCA3MCwgNzYsIDc5LCA4MCwgODAsIDIxNywgNzAsIAotICAgIDc2LCA3OSwgNzksIDgyLCAxMjgsIDcwLCA3NiwgNzMsIDgwLCAxMjgsIDcwLCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgCi0gICAgNzAsIDc2LCA2OSwgODgsIDg1LCA4MywgMTI4LCA3MCwgNzYsIDY5LCA4OCwgNjksIDE5NiwgNzAsIDc2LCA2OSwgODUsIDgyLCAKLSAgICA0NSwgNjgsIDY5LCA0NSwgNzYsIDczLCA4MywgMTI4LCA3MCwgNzYsIDY1LCA4NCwgODQsIDY5LCA3OCwgNjksIDE5NiwgNzAsIAotICAgIDc2LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDg0LCAxMjgsIDcwLCA3NiwgNjUsIDIxMiwgCi0gICAgNzAsIDc2LCA2NSwgNzEsIDgzLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTMsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCAKLSAgICA1MiwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIDUxLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTAsIDEyOCwgNzAsIAotICAgIDc2LCA2NSwgNzEsIDQ1LCA0OSwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgMTI4LCA3MCwgNzYsIDY1LCAxOTksIDcwLCA3NiwgCi0gICAgNjUsIDEyOCwgNzAsIDc2LCAxMjgsIDcwLCA3MywgODgsIDY5LCA2OCwgNDUsIDcwLCA3OSwgODIsIDIwNSwgNzAsIDczLCAKLSAgICA4OCwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzAsIDczLCA4NiwgNjksIAotICAgIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3MywgODYsIDE5NywgNzAsIDczLCA4NCwgNjUsIDEyOCwgNzAsIDczLCA4NCwgCi0gICAgMTI4LCA3MCwgNzMsIDgzLCA4NCwgNjksIDE5NiwgNzAsIDczLCA4MywgODQsIDEyOCwgNzAsIDczLCA4MywgNzIsIDczLCAKLSAgICA3OCwgMTk5LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgNzUsIDEyOCwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIAotICAgIDIwMywgNzAsIDczLCA4MywgNzIsIDY5LCA4OSwgNjksIDEyOCwgNzAsIDczLCA4MywgNzIsIDEyOCwgNzAsIDczLCA4MywgCi0gICAgMjAwLCA3MCwgNzMsIDgyLCA4MywgMjEyLCA3MCwgNzMsIDgyLCA3MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIDc5LCAKLSAgICA4MiwgNzUsIDgzLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgNzksIDgyLCAyMDMsIDcwLCA3MywgODIsIDY5LCAxMjgsIAotICAgIDcwLCA3MywgODIsIDE5NywgNzAsIDczLCA4MCwgMTI4LCA3MCwgNzMsIDc4LCA3MywgODQsIDE5NywgNzAsIDczLCA3OCwgCi0gICAgNzEsIDY5LCA4MiwgNzgsIDY1LCA3MywgNzYsIDgzLCAxMjgsIDcwLCA3MywgNzgsIDcxLCA2OSwgODIsIDY5LCAxOTYsIDcwLCAKLSAgICA3MywgNzgsIDY1LCA3OCwgNjcsIDczLCA2NSwgNzYsIDEyOCwgNzAsIDczLCA3NiwgNzYsIDY5LCA4MiwgMTI4LCA3MCwgNzMsIAotICAgIDc2LCA3NiwgNjksIDE5NiwgNzAsIDczLCA3NiwgNzYsIDEyOCwgNzAsIDczLCA3NiwgMjA0LCA3MCwgNzMsIDc2LCAxOTcsIAotICAgIDcwLCA3MywgNzMsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgCi0gICAgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIDY5LCA0NSwgNDksIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKLSAgICAxOTcsIDcwLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgNzMsIDcwLCA4NCwgODksIDEyOCwgNzAsIDczLCA3MCwgODQsIAotICAgIDIxNywgNzAsIDczLCA3MCwgODQsIDcyLCA4MywgMTI4LCA3MCwgNzMsIDcwLCA4NCwgNzIsIDEyOCwgNzAsIDczLCA3MCwgCi0gICAgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzAsIDczLCA3MCwgODQsIDY5LCA2OSwgMjA2LCA3MCwgNzMsIDY5LCA3NiwgNjgsIAotICAgIDEyOCwgNzAsIDcyLCA4NCwgNzksIDgyLCAxOTMsIDcwLCA3MCwgNzYsIDEyOCwgNzAsIDcwLCA3MywgMTI4LCA3MCwgNjksIAotICAgIDg1LCA4OCwgMTI4LCA3MCwgNjksIDg1LCA3MCwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDcwLCA2OSwgODMsIDg0LCA3MywgCi0gICAgODYsIDY1LCA3NiwgMTI4LCA3MCwgNjksIDgyLCA4MiwgODksIDEyOCwgNzAsIDY5LCA4MiwgODIsIDczLCAyMTEsIDcwLCAKLSAgICA2OSwgODIsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcwLCA2OSwgODIsIDc3LCA2NSwgODQsIDE5MywgNzAsIDY5LCA3OSwgCi0gICAgMjAwLCA3MCwgNjksIDc4LCAxOTksIDcwLCA2OSwgNzgsIDY3LCA2OSwgMTI4LCA3MCwgNjksIDc3LCA3MywgNzgsIDczLCAKLSAgICA3OCwgMTk3LCA3MCwgNjksIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDcwLCA2OSwgNzcsIDY1LCA3NiwgMTk3LCA3MCwgNjksIAotICAgIDc2LCA3NiwgNzksIDg3LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3MCwgNjksIDczLCAxMjgsIDcwLCA2OSwgNzIsIDIxMywgCi0gICAgNzAsIDY5LCA3MiwgMTI4LCA3MCwgNjksIDIwMCwgNzAsIDY5LCA2OSwgNzgsIDcxLCAxMjgsIDcwLCA2OSwgNjksIDY4LCAKLSAgICAxMjgsIDcwLCA2OSwgNjksIDE5NiwgNzAsIDY5LCA2OSwgMTI4LCA3MCwgNjksIDY2LCA4MiwgODUsIDY1LCA4MiwgODksIAotICAgIDEyOCwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgCi0gICAgNjksIDY1LCA4MiwgNzgsIDEyOCwgNzAsIDY5LCA2NSwgODIsIDcwLCA4NSwgMjA0LCA3MCwgNjksIDY1LCA4MiwgMTI4LCAKLSAgICA3MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MCwgNjUsIDg5LCAxMjgsIDcwLCA2NSwgODgsIDEyOCwgNzAsIAotICAgIDY1LCAyMTYsIDcwLCA2NSwgODQsIDczLCA3MSwgODUsIDY5LCAxMjgsIDcwLCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgCi0gICAgNzAsIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDg0LCAKLSAgICA3MiwgNjUsIDg0LCA2NSwgMjA2LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDE5MywgNzAsIAotICAgIDY1LCA4NCwgMTI4LCA3MCwgNjUsIDgyLCA4MywgMjAxLCA3MCwgNjUsIDgxLCAxMjgsIDcwLCA2NSwgODAsIDEyOCwgNzAsIAotICAgIDY1LCA3OCwgNzEsIDEyOCwgNzAsIDY1LCA3OCwgNjksIDgyLCA3OSwgODMsIDczLCAyMTEsIDcwLCA2NSwgNzgsIDEyOCwgCi0gICAgNzAsIDY1LCA3NywgNzMsIDc2LCA4OSwgMTI4LCA3MCwgNjUsIDc2LCA3NiwgNzMsIDc4LCAxOTksIDcwLCA2NSwgNzYsIDc2LCAKLSAgICA2OSwgMjA2LCA3MCwgNjUsIDczLCA3NiwgODUsIDgyLCA2OSwgMTI4LCA3MCwgNjUsIDczLCA3MiwgODUsIDEyOCwgNzAsIAotICAgIDY1LCA3MiwgODIsIDY5LCA3OCwgNzIsIDY5LCA3MywgODQsIDEyOCwgNzAsIDY1LCA2NywgODQsIDc5LCA4MiwgODksIDEyOCwgCi0gICAgNzAsIDY1LCA2NywgODQsIDc5LCAyMTAsIDcwLCA2NSwgNjcsIDgzLCA3MywgNzcsIDczLCA3NiwgMTk3LCA3MCwgNjUsIDY3LCAKLSAgICA2OSwgNDUsIDU0LCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTMsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MiwgCi0gICAgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDY1LCAKLSAgICA2NywgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNjUsIDY1LCA3NywgNjUsIDY5LCAxMjgsIDcwLCA2NSwgNjUsIDczLCAxMjgsIAotICAgIDcwLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MCwgNDgsIDUzLCA1MSwgMTI4LCA3MCwgNDgsIDUzLCA1MCwgMTI4LCA3MCwgCi0gICAgNDgsIDUzLCA0OSwgNjcsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY2LCAxMjgsIDcwLCA0OCwgNTMsIDQ5LCA2NSwgMTI4LCAKLSAgICA3MCwgNDgsIDUzLCA0OSwgMTI4LCA3MCwgNDgsIDUzLCA0OCwgMTI4LCA3MCwgNDgsIDUyLCA1NywgMTI4LCA3MCwgNDgsIAotICAgIDUyLCA1NiwgMTI4LCA3MCwgNDgsIDUyLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCA1MiwgNTUsIDEyOCwgNzAsIDQ4LCA1MiwgCi0gICAgNTQsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCAxMjgsIDcwLCA0OCwgNTIsIDUzLCA2NSwgMTI4LCA3MCwgNDgsIDUyLCAKLSAgICA1MywgMTI4LCA3MCwgNDgsIDUyLCA1MiwgMTI4LCA3MCwgNDgsIDUyLCA1MSwgMTI4LCA3MCwgNDgsIDUyLCA1MCwgMTI4LCAKLSAgICA3MCwgNDgsIDUyLCA0OSwgMTI4LCA3MCwgNDgsIDUyLCA0OCwgMTI4LCA3MCwgNDgsIDUxLCA1NywgMTI4LCA3MCwgNDgsIAotICAgIDUxLCA1NiwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDEyOCwgNzAsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgCi0gICAgNTEsIDU1LCAxMjgsIDcwLCA0OCwgNTEsIDU0LCAxMjgsIDcwLCA0OCwgNTEsIDUzLCAxMjgsIDcwLCA0OCwgNTEsIDUyLCAKLSAgICAxMjgsIDcwLCA0OCwgNTEsIDUxLCAxMjgsIDcwLCA0OCwgNTEsIDUwLCAxMjgsIDcwLCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCAKLSAgICA3MCwgNDgsIDUxLCA0OSwgMTI4LCA3MCwgNDgsIDUxLCA0OCwgMTI4LCA3MCwgNDgsIDUwLCA1NywgMTI4LCA3MCwgNDgsIAotICAgIDUwLCA1NiwgMTI4LCA3MCwgNDgsIDUwLCA1NSwgMTI4LCA3MCwgNDgsIDUwLCA1NCwgMTI4LCA3MCwgNDgsIDUwLCA1MywgCi0gICAgMTI4LCA3MCwgNDgsIDUwLCA1MiwgMTI4LCA3MCwgNDgsIDUwLCA1MSwgMTI4LCA3MCwgNDgsIDUwLCA1MCwgMTI4LCA3MCwgCi0gICAgNDgsIDUwLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIDEyOCwgNzAsIDQ4LCA1MCwgNDgsIDEyOCwgNzAsIDQ4LCAKLSAgICA0OSwgNTcsIDEyOCwgNzAsIDQ4LCA0OSwgNTYsIDEyOCwgNzAsIDQ4LCA0OSwgNTUsIDEyOCwgNzAsIDQ4LCA0OSwgNTQsIAotICAgIDEyOCwgNzAsIDQ4LCA0OSwgNTMsIDEyOCwgNzAsIDQ4LCA0OSwgNTIsIDEyOCwgNzAsIDQ4LCA0OSwgNTEsIDY1LCAxMjgsIAotICAgIDcwLCA0OCwgNDksIDUxLCAxMjgsIDcwLCA0OCwgNDksIDUwLCAxMjgsIDcwLCA0OCwgNDksIDQ5LCAxMjgsIDcwLCA0OCwgCi0gICAgNDksIDQ4LCAxMjgsIDcwLCA0OCwgNDgsIDU3LCAxMjgsIDcwLCA0OCwgNDgsIDU2LCAxMjgsIDcwLCA0OCwgNDgsIDU1LCAKLSAgICAxMjgsIDcwLCA0OCwgNDgsIDU0LCAxMjgsIDcwLCA0OCwgNDgsIDUzLCAxMjgsIDcwLCA0OCwgNDgsIDUyLCAxMjgsIDcwLCAKLSAgICA0OCwgNDgsIDUxLCAxMjgsIDcwLCA0OCwgNDgsIDUwLCAxMjgsIDcwLCA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIAotICAgIDQ4LCA0OSwgMTI4LCA2OSwgOTAsIDIwMCwgNjksIDkwLCA2OSwgNzgsIDEyOCwgNjksIDkwLCA2OSwgMjA2LCA2OSwgOTAsIAotICAgIDEyOCwgNjksIDg5LCA2OSwgODMsIDEyOCwgNjksIDg5LCA2OSwgNzEsIDc2LCA2NSwgODMsIDgzLCA2OSwgODMsIDEyOCwgCi0gICAgNjksIDg5LCA2NiwgNjksIDg5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCAKLSAgICA4OCwgODQsIDgyLCA2NSwgODQsIDY5LCA4MiwgODIsIDY5LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNjksIDg4LCA4NCwgCi0gICAgODIsIDY1LCA0NSwgNzYsIDc5LCAyMTUsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIDcyLCA3MywgNzEsIDIwMCwgNjksIDg4LCAKLSAgICA4NCwgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDg0LCA2OSwgNzgsIDY4LCA2OSwgMTk2LCA2OSwgODgsIAotICAgIDgwLCA4MiwgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgNzYsIDY5LCA4MywgMjExLCA2OSwgODgsIDgwLCA3OSwgNzgsIDY5LCAKLSAgICA3OCwgMjEyLCA2OSwgODgsIDc5LCAxMjgsIDY5LCA4OCwgMjA3LCA2OSwgODgsIDczLCA4MywgODQsIDgzLCAxMjgsIDY5LCAKLSAgICA4OCwgNzMsIDgzLCA4NCwgMTI4LCA2OSwgODgsIDcyLCA2NSwgODUsIDgzLCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIAotICAgIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCAKLSAgICA3MywgNzksIDIwNiwgNjksIDg4LCA2NywgNzIsIDY1LCA3OCwgNzEsIDY5LCAxMjgsIDY5LCA4OCwgNjcsIDY5LCA4MywgODMsIAotICAgIDEyOCwgNjksIDg4LCA2NywgNjksIDc2LCA3NiwgNjksIDc4LCA4NCwgMTI4LCA2OSwgODcsIDY5LCAxMjgsIDY5LCA4NiwgCi0gICAgNjksIDgyLCA3MSwgODIsIDY5LCA2OSwgMjA2LCA2OSwgODYsIDY5LCA3OCwgNzMsIDc4LCA3MSwgMTI4LCA2OSwgODUsIDgyLCAKLSAgICA3OSwgODAsIDY5LCA2NSwgMjA2LCA2OSwgODUsIDgyLCA3OSwgODAsIDY5LCA0NSwgNjUsIDcwLCA4MiwgNzMsIDY3LCA2NSwgCi0gICAgMTI4LCA2OSwgODUsIDgyLCA3OSwgNDUsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDY3LCAyMTcsIDY5LCA4NSwgODIsIAotICAgIDIwNywgNjksIDg1LCA3NiwgNjksIDIxMCwgNjksIDg1LCA0NSwgODUsIDEyOCwgNjksIDg1LCA0NSwgNzksIDEyOCwgNjksIAotICAgIDg1LCA0NSwgNjksIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCA2OSwgODUsIDQ1LCA2OSwgMTI4LCA2OSwgCi0gICAgODUsIDQ1LCA2NSwgMTI4LCA2OSwgODQsIDg4LCAxMjgsIDY5LCA4NCwgNzgsIDY1LCA3MiwgODQsIDY1LCAxMjgsIDY5LCAKLSAgICA4NCwgNzIsIDY5LCAyMDQsIDY5LCA4NCwgNjksIDgyLCA3OSwgMjA2LCA2OSwgODQsIDY5LCA4MiwgNzgsIDczLCA4NCwgODksIAotICAgIDEyOCwgNjksIDg0LCA2NiwgMTI4LCA2OSwgODMsIDg1LCA3NSwgODUsIDg1LCA2OCwgNzksIDEyOCwgNjksIDgzLCA4NCwgCi0gICAgNzMsIDc3LCA2NSwgODQsIDY5LCA4MywgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgNjksIDE5NiwgNjksIDgzLCAKLSAgICA3MiwgNjksIDUxLCAxMjgsIDY5LCA4MywgNzIsIDUwLCA0OSwgMTI4LCA2OSwgODMsIDcyLCAxNzgsIDY5LCA4MywgNzIsIAotICAgIDQ5LCA1NCwgMTI4LCA2OSwgODMsIDY3LCA2NSwgODAsIDY5LCAxMjgsIDY5LCA4MywgNjcsIDEyOCwgNjksIDgzLCA2NSwgCi0gICAgMTI4LCA2OSwgODMsIDQ1LCA4NCwgNjksIDEyOCwgNjksIDgyLCA4MiwgNzksIDgyLCA0NSwgNjYsIDY1LCA4MiwgODIsIDY5LCAKLSAgICAxOTYsIDY5LCA4MiwgODIsIDEyOCwgNjksIDgyLCA3MywgNzgsIDUwLCAxMjgsIDY5LCA4MiwgNzEsIDEyOCwgNjksIDgyLCAKLSAgICA2NSwgODMsIDE5NywgNjksIDgxLCA4NSwgNzMsIDg2LCA2NSwgNzYsIDY5LCA3OCwgMjEyLCA2OSwgODEsIDg1LCA3MywgNjgsIAotICAgIDEyOCwgNjksIDgxLCA4NSwgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIDIxMCwgNjksIDgxLCA4NSwgNjUsIDc2LCA4MywgCi0gICAgMTI4LCA2OSwgODEsIDg1LCA2NSwgNzYsIDIxMSwgNjksIDgxLCA4NSwgNjUsIDc2LCAxMjgsIDY5LCA4MCwgODMsIDczLCAKLSAgICA3NiwgNzksIDc4LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDIwNiwgNjksIDgwLCA3OSwgNjcsIDcyLCAxMjgsIAotICAgIDY5LCA4MCwgNzMsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzMsIDE5NSwgNjksIDgwLCA3MywgNjgsIDY1LCA4NSwgODIsIDY5LCAKLSAgICA2NSwgMjA2LCA2OSwgODAsIDY5LCA3OCwgODQsIDcyLCA2OSwgODQsIDczLCAxOTUsIDY5LCA4MCwgNjksIDcxLCA2OSwgODIsIAotICAgIDc3LCA2NSwgMTI4LCA2OSwgNzksIDg0LCAxMjgsIDY5LCA3OSwgNzcsIDEyOCwgNjksIDc5LCA3NiwgNzIsIDg4LCAxMjgsIAotICAgIDY5LCA3OSwgNzYsIDEyOCwgNjksIDc5LCA3MiwgMTI4LCA2OSwgNzgsIDg5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgCi0gICAgNzksIDgwLCA2OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCA4MCwgMTk3LCA2OSwgNzgsIDg1LCA3NywgNjksIDgyLCAKLSAgICA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgNzgsIDg0LCA4MiwgODksIDQ1LCA1MCwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIAotICAgIDQ1LCA0OSwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDEyOCwgNjksIDc4LCA4NCwgODIsIDIxNywgNjksIDc4LCA4NCwgCi0gICAgNzIsIDg1LCA4MywgNzMsIDY1LCA4MywgNzcsIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA4MCwgODIsIDczLCA4MywgNjksIAotICAgIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNjksIDc4LCA4NCwgNjksIDgyLCAxMjgsIDY5LCA3OCwgCi0gICAgODQsIDY5LCAyMTAsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAxMjgsIDY5LCA3OCwgODEsIDEyOCwgNjksIDc4LCAKLSAgICA3OSwgMjExLCA2OSwgNzgsIDc4LCAxMjgsIDY5LCA3OCwgNzYsIDY1LCA4MiwgNzEsIDY5LCA3NywgNjksIDc4LCA4NCwgCi0gICAgMTI4LCA2OSwgNzgsIDcxLCA3MywgNzgsIDY5LCAxMjgsIDY5LCA3OCwgNjgsIDc5LCA3MCwgNzksIDc4LCA3OSwgNzgsIAotICAgIDEyOCwgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY5LCA3OCwgNjgsIDY5LCA4MCwgMTI4LCA2OSwgNzgsIDY4LCA2OSwgCi0gICAgNjUsIDg2LCA3OSwgODUsIDgyLCAxMjgsIDY5LCA3OCwgNjcsIDc5LCA4NSwgNzgsIDg0LCA2OSwgODIsIDgzLCAxMjgsIDY5LCAKLSAgICA3OCwgNjcsIDc2LCA3OSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNjksIDc4LCA2NywgNzYsIDc5LCA4MywgNzMsIDc4LCAxOTksIAotICAgIDY5LCA3OCwgNjcsIDEyOCwgNjksIDc4LCA2NSwgODIsIDg4LCA3MywgMjExLCA2OSwgNzgsIDY1LCA4MiwgNzcsIDc5LCA3OCwgCi0gICAgNzMsIDc5LCAyMTEsIDY5LCA3NywgODAsIDg0LCAyMTcsIDY5LCA3NywgODAsIDcyLCA2NSwgODQsIDczLCAxOTUsIDY5LCAKLSAgICA3NywgODAsIDcyLCA2NSwgODMsIDczLCAyMTEsIDY5LCA3NywgNjYsIDgyLCA3OSwgNzMsIDY4LCA2OSwgODIsIDg5LCAxMjgsIAotICAgIDY5LCA3NywgNjYsIDc2LCA2OSwgNzcsIDEyOCwgNjksIDc3LCA2NiwgNjksIDc2LCA3NiwgNzMsIDgzLCA3MiwgNzcsIDY5LCAKLSAgICA3OCwgODQsIDEyOCwgNjksIDc3LCA2NiwgNjksIDY4LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCA2OSwgNzYsIDg0LCAxMjgsIAotICAgIDY5LCA3NiwgNzYsIDczLCA4MCwgODQsIDczLCAxOTUsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIDczLCA4MywgMTI4LCA2OSwgCi0gICAgNzYsIDc2LCA3MywgODAsIDgzLCA2OSwgMTI4LCA2OSwgNzYsIDczLCA3MCwgNzMsIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCAKLSAgICA3OCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNjksIDc2LCA2OSwgODYsIDY5LCA3OCwgMTI4LCA2OSwgNzYsIAotICAgIDY5LCA4NiwgNjksIDIwNiwgNjksIDc2LCA2OSwgODAsIDcyLCA2NSwgNzgsIDg0LCAxMjgsIDY5LCA3NiwgNjksIDc3LCA2OSwgCi0gICAgNzgsIDIxMiwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDY3LCA2NSwgMjA0LCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCAKLSAgICA3MywgMTk1LCA2OSwgNzYsIDY1LCA3MCwgODIsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCA4NCwgODIsIDY5LCA4MCwgODQsIAotICAgIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCAxMjgsIDY5LCA3NSwgNzAsIDc5LCA3OCwgNzMsIDg0LCA3MywgNzUsIDc5LCA3OCwgCi0gICAgMTI4LCA2OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjksIDc0LCA2OSwgNjcsIDIxMiwgNjksIDczLCA4MywgMTI4LCA2OSwgCi0gICAgNzMsIDcxLCA3MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgMjE3LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAKLSAgICA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAyMTEsIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDEyOCwgNjksIAotICAgIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDY5LCA3MywgNzEsIDcyLCA4NCwgNjksIDY5LCAyMDYsIDY5LCA3MywgCi0gICAgNzEsIDcyLCA4NCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNjksIDczLCA2OSwgMTI4LCA2OSwgNzIsIDg3LCAKLSAgICA2NSwgMjE4LCA2OSwgNzEsIDg5LCA4MCwgODQsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3MSwgNzMsIAotICAgIDgyLCAxMjgsIDY5LCA3MSwgNzEsIDEyOCwgNjksIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIDY5LCA3NSwgCi0gICAgNjUsIDY1LCAxMjgsIDY5LCA2OSwgNzIsIDEyOCwgNjksIDY5LCA2NiwgNjksIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKLSAgICA2OSwgNjgsIDczLCA4NCwgNzksIDgyLCA3MywgNjUsIDIwNCwgNjksIDY4LCA3MywgNzgsIDEyOCwgNjksIDY4LCA2OCwgCi0gICAgMTI4LCA2OSwgNjYsIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgNjUsIDgzLCA4NCwgNjksIDgyLCAyMDYsIDY5LCAKLSAgICA2NSwgODMsIDIxMiwgNjksIDY1LCA4MiwgODQsIDcyLCA3NiwgMjE3LCA2OSwgNjUsIDgyLCA4NCwgNzIsIDEyOCwgNjksIAotICAgIDY1LCA4MiwgODQsIDIwMCwgNjksIDY1LCA4MiwgODMsIDEyOCwgNjksIDY1LCA4MiwgNzYsIDIxNywgNjksIDY1LCA3NywgCi0gICAgNzIsIDY1LCA3OCwgNjcsIDcyLCA3OSwgNzYsIDc2LCAxMjgsIDY5LCA2NSwgNzEsIDc2LCA2OSwgMTI4LCA2OSwgNjUsIDY4LCAKLSAgICA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgNjUsIDY2LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgMTc4LCA2OSwgNDgsIAotICAgIDUxLCA1NiwgMTI4LCA2OSwgNDgsIDUxLCA1NSwgMTI4LCA2OSwgNDgsIDUxLCA1NCwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgCi0gICAgNjUsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDEyOCwgNjksIDQ4LCA1MSwgNTEsIDEyOCwgNjksIDQ4LCA1MSwgNTAsIDEyOCwgCi0gICAgNjksIDQ4LCA1MSwgNDksIDEyOCwgNjksIDQ4LCA1MSwgNDgsIDEyOCwgNjksIDQ4LCA1MCwgNTcsIDEyOCwgNjksIDQ4LCAKLSAgICA1MCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNTAsIDU2LCAxMjgsIDY5LCA0OCwgNTAsIDU1LCAxMjgsIDY5LCA0OCwgNTAsIAotICAgIDU0LCAxMjgsIDY5LCA0OCwgNTAsIDUzLCAxMjgsIDY5LCA0OCwgNTAsIDUyLCAxMjgsIDY5LCA0OCwgNTAsIDUxLCAxMjgsIAotICAgIDY5LCA0OCwgNTAsIDUwLCAxMjgsIDY5LCA0OCwgNTAsIDQ5LCAxMjgsIDY5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA2OSwgCi0gICAgNDgsIDUwLCA0OCwgMTI4LCA2OSwgNDgsIDQ5LCA1NywgMTI4LCA2OSwgNDgsIDQ5LCA1NiwgMTI4LCA2OSwgNDgsIDQ5LCAKLSAgICA1NSwgNjUsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIDEyOCwgNjksIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDY5LCA0OCwgNDksIAotICAgIDU0LCAxMjgsIDY5LCA0OCwgNDksIDUzLCAxMjgsIDY5LCA0OCwgNDksIDUyLCAxMjgsIDY5LCA0OCwgNDksIDUxLCAxMjgsIAotICAgIDY5LCA0OCwgNDksIDUwLCAxMjgsIDY5LCA0OCwgNDksIDQ5LCAxMjgsIDY5LCA0OCwgNDksIDQ4LCAxMjgsIDY5LCA0OCwgCi0gICAgNDgsIDU3LCA2NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NywgMTI4LCA2OSwgNDgsIDQ4LCA1NiwgNjUsIDEyOCwgNjksIDQ4LCAKLSAgICA0OCwgNTYsIDEyOCwgNjksIDQ4LCA0OCwgNTUsIDEyOCwgNjksIDQ4LCA0OCwgNTQsIDEyOCwgNjksIDQ4LCA0OCwgNTMsIAotICAgIDEyOCwgNjksIDQ4LCA0OCwgNTIsIDEyOCwgNjksIDQ4LCA0OCwgNTEsIDEyOCwgNjksIDQ4LCA0OCwgNTAsIDEyOCwgNjksIAotICAgIDQ4LCA0OCwgNDksIDEyOCwgNjksIDQ1LCA3NywgNjUsIDczLCAyMDQsIDY4LCA5MCwgOTAsIDY5LCAxMjgsIDY4LCA5MCwgCi0gICAgOTAsIDY1LCAxMjgsIDY4LCA5MCwgODcsIDY5LCAxMjgsIDY4LCA5MCwgODUsIDEyOCwgNjgsIDkwLCA3OSwgMTI4LCA2OCwgCi0gICAgOTAsIDc0LCA2OSwgMTI4LCA2OCwgOTAsIDczLCAxMjgsIDY4LCA5MCwgNzIsIDY5LCAxMjgsIDY4LCA5MCwgNzIsIDY1LCAKLSAgICAxMjgsIDY4LCA5MCwgNjksIDc2LCA3OSwgMTI4LCA2OCwgOTAsIDY5LCA2OSwgMTI4LCA2OCwgOTAsIDY5LCAxMjgsIDY4LCAKLSAgICA5MCwgNjUsIDY1LCAxMjgsIDY4LCA5MCwgNjUsIDEyOCwgNjgsIDkwLCAxMjgsIDY4LCAyMTgsIDY4LCA4OSwgNzksIDEyOCwgCi0gICAgNjgsIDg5LCAyMDcsIDY4LCA4OSwgNjksIDcyLCAxMjgsIDY4LCA4OSwgNjksIDIwMCwgNjgsIDg3LCA3OSwgMTI4LCA2OCwgCi0gICAgODcsIDY5LCAxMjgsIDY4LCA4NywgNjUsIDEyOCwgNjgsIDg2LCA3MywgODMsIDg2LCA2NSwgODIsIDY1LCAxMjgsIDY4LCAKLSAgICA4NiwgNjgsIDEyOCwgNjgsIDg2LCAxMjgsIDY4LCA4NSwgODQsIDczLCA2OSwgODMsIDEyOCwgNjgsIDg1LCA4MywgNzUsIAotICAgIDEyOCwgNjgsIDg1LCA4MywgNzIsIDY5LCA3OCwgNzgsIDY1LCAxMjgsIDY4LCA4NSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA2OCwgODUsIDgyLCA1MCwgMTI4LCA2OCwgODUsIDgwLCA3OSwgNzgsIDY4LCA3MywgODUsIDIxMSwgNjgsIDg1LCAKLSAgICA3OSwgODgsIDEyOCwgNjgsIDg1LCA3OSwgMTI4LCA2OCwgODUsIDc4LCA1MiwgMTI4LCA2OCwgODUsIDc4LCA1MSwgMTI4LCAKLSAgICA2OCwgODUsIDc4LCAxNzksIDY4LCA4NSwgNzcsIDEyOCwgNjgsIDg1LCAyMDQsIDY4LCA4NSwgNzIsIDEyOCwgNjgsIDg1LCAKLSAgICA3MSwgODUsIDY4LCAxMjgsIDY4LCA4NSwgNjYsIDUwLCAxMjgsIDY4LCA4NSwgNjYsIDEyOCwgNjgsIDg1LCAxOTQsIDY4LCAKLSAgICA4MiwgODksIDEyOCwgNjgsIDgyLCAyMTcsIDY4LCA4MiwgODUsIDc3LCAxMjgsIDY4LCA4MiwgODUsIDIwNSwgNjgsIDgyLCAKLSAgICA3OSwgODAsIDgzLCAxMjgsIDY4LCA4MiwgNzksIDgwLCA3NiwgNjksIDg0LCAxMjgsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIAotICAgIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgNjgsIDgyLCA3OSwgNzcsIDY5LCA2OCwgNjUsIDgyLCAyMTcsIDY4LCA4MiwgCi0gICAgNzMsIDg2LCA2OSwgMTI4LCA2OCwgODIsIDczLCA4NiwgMTk3LCA2OCwgODIsIDczLCA3OCwgNzUsIDEyOCwgNjgsIDgyLCAKLSAgICA3MywgMjA0LCA2OCwgODIsIDY5LCA4MywgODMsIDEyOCwgNjgsIDgyLCA2NSwgODUsIDcxLCA3MiwgODQsIDIxMSwgNjgsIAotICAgIDgyLCA2NSwgNzcsIDEyOCwgNjgsIDgyLCA2NSwgMjA1LCA2OCwgODIsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDY4LCA4MiwgCi0gICAgNjUsIDcxLCA3OSwgMjA2LCA2OCwgODIsIDY1LCA3MCwgODQsIDczLCA3OCwgMTk5LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCAKLSAgICA2NSwgODMsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgCi0gICAgMTkzLCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCAKLSAgICA2OCwgMjExLCA2OCwgNzksIDg3LCA3OCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDY4LCA3OSwgODcsIAotICAgIDc4LCAxMjgsIDY4LCA3OSwgODYsIDY5LCAxMjgsIDY4LCA3OSwgODUsIDcxLCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA2OCwgCi0gICAgNzksIDg1LCA2NiwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCAKLSAgICA0NSwgNzYsIDczLCA3OCwgMTk3LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjgsIAotICAgIDc5LCA4NSwgNjYsIDc2LCA2OSwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCA0NSwgODAsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODQsIDY5LCA2OCwgNDUsIDc4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgNjgsIDQ1LCA3NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4NCwgNjksIDY4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgMTk2LCA2OCwgNzksIDg0LCA4MywgNDUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCi0gICAgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgCi0gICAgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAotICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCAKLSAgICA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAKLSAgICA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIAotICAgIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCAKLSAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgCi0gICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAKLSAgICA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NSwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgCi0gICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKLSAgICA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA1MCwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgCi0gICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAotICAgIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCi0gICAgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCi0gICAgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCi0gICAgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNTAsIDUxLCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDUwLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU1LCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTYsIAotICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgCi0gICAgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIAotICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKLSAgICA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU1LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU2LCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKLSAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIAotICAgIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAKLSAgICA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAKLSAgICA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIAotICAgIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA2OCwgNzksIAotICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTUsIDU2LCAKLSAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIAotICAgIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAotICAgIDQ1LCA0OSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgCi0gICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIAotICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCi0gICAgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgCi0gICAgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgCi0gICAgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCAKLSAgICA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAKLSAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAotICAgIDQ5LCA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCi0gICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAotICAgIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCi0gICAgNDksIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCi0gICAgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCAKLSAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCAKLSAgICA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKLSAgICA0OSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgCi0gICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NiwgCi0gICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKLSAgICA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgCi0gICAgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCi0gICAgNTAsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCAKLSAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIAotICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDEyOCwgNjgsIDc5LCA4NCwgCi0gICAgODMsIDEyOCwgNjgsIDc5LCA4NCwgNzYsIDY5LCA4MywgMjExLCA2OCwgNzksIDgyLCA4NSwgMTI4LCA2OCwgNzksIDc5LCAKLSAgICA4MiwgMTI4LCA2OCwgNzksIDc5LCA3OCwgNzEsIDEyOCwgNjgsIDc5LCA3OCwgNzEsIDEyOCwgNjgsIDc5LCA3NywgNjUsIAotICAgIDczLCAyMDYsIDY4LCA3OSwgNzYsIDgwLCA3MiwgNzMsIDc4LCAxMjgsIDY4LCA3OSwgNzYsIDc2LCA4MywgMTI4LCA2OCwgCi0gICAgNzksIDc2LCA3NiwgNjUsIDIxMCwgNjgsIDc5LCA3NiwgNzMsIDg1LCA3NywgMTI4LCA2OCwgNzksIDc1LCA3NywgNjUsIDczLCAKLSAgICAxMjgsIDY4LCA3OSwgNzMsIDg0LCAxMjgsIDY4LCA3OSwgNzEsIDEyOCwgNjgsIDc5LCAxOTksIDY4LCA3OSwgNjksIDIxMSwgCi0gICAgNjgsIDc5LCA2OCwgNjksIDc1LCA2NSwgODQsIDY1LCAxMjgsIDY4LCA3OSwgNjYsIDgyLCA3OSwgMTI4LCA2OCwgNzksIDY1LCAKLSAgICA2NywgNzIsIDY1LCA4MywgNzIsIDc3LCA2OSwgNjksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgCi0gICAgNjksIDE5NywgNjgsIDc5LCA2NSwgMTI4LCA2OCwgNzksIDQ1LCA3OSwgMTI4LCA2OCwgNzcsIDEyOCwgNjgsIDIwNSwgNjgsIAotICAgIDc2LCA4NSwgMTI4LCA2OCwgNzYsIDc5LCAxMjgsIDY4LCA3NiwgNzMsIDEyOCwgNjgsIDc2LCA3MiwgODksIDY1LCAxMjgsIAotICAgIDY4LCA3NiwgNzIsIDY1LCAxMjgsIDY4LCA3NiwgNjksIDY5LCAxMjgsIDY4LCA3NiwgNjUsIDEyOCwgNjgsIDc2LCAxMjgsIAotICAgIDY4LCA3NSwgNjUsIDgyLCAxMjgsIDY4LCA3NSwgNjUsIDIxMCwgNjgsIDc0LCA2OSwgODIsIDg2LCA3MywgMTI4LCA2OCwgCi0gICAgNzQsIDY5LCA4MiwgODYsIDEyOCwgNjgsIDc0LCA2OSwgMTI4LCA2OCwgNzQsIDY1LCAxMjgsIDY4LCA3MywgOTAsIDkwLCAKLSAgICAyMTcsIDY4LCA3MywgODYsIDc5LCA4MiwgNjcsIDE5NywgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgNzksIDc4LCAxMjgsIAotICAgIDY4LCA3MywgODYsIDczLCA4MywgNzMsIDc5LCAyMDYsIDY4LCA3MywgODYsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCAKLSAgICAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDgzLCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDgyLCAxMjgsIAotICAgIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDE5NiwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgMTI4LCA2OCwgNzMsIDg2LCA3MywgCi0gICAgNjgsIDE5NywgNjgsIDczLCA4NiwgNjksIDgyLCA3MSwgNjksIDc4LCA2NywgNjksIDEyOCwgNjgsIDczLCA4NCwgODQsIAotICAgIDIwNywgNjgsIDczLCA4MywgODQsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgODQsIDczLCA3OCwgCi0gICAgNzEsIDg1LCA3MywgODMsIDcyLCAxMjgsIDY4LCA3MywgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDY4LCA3MywgODMsIDgzLCAKLSAgICA3OSwgNzYsIDg2LCA2OSwgNDUsIDUwLCAxMjgsIDY4LCA3MywgODMsIDgzLCA3OSwgNzYsIDg2LCA2OSwgMTI4LCA2OCwgNzMsIAotICAgIDgzLCA4MCwgNjksIDgyLCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA3NSwgMTI4LCA2OCwgNzMsIDgzLCA3MywgCi0gICAgNzcsIDc5LCA4NSwgMTI4LCA2OCwgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA2NywgNzksIDc4LCA4NCwgNzMsIDc4LCAKLSAgICA4NSwgNzksIDg1LCAyMTEsIDY4LCA3MywgODMsIDE5NSwgNjgsIDczLCA4MywgNjUsIDgwLCA4MCwgNzksIDczLCA3OCwgODQsIAotICAgIDY5LCAxOTYsIDY4LCA3MywgODMsIDY1LCA2NiwgNzYsIDY5LCAxOTYsIDY4LCA3MywgODIsIDcxLCAxOTMsIDY4LCA3MywgCi0gICAgODIsIDY5LCA2NywgODQsIDc2LCAyMTcsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCAKLSAgICA3MywgODAsIDg0LCA2OSwgMTI4LCA2OCwgNzMsIDgwLCA4MCwgNjksIDgyLCAxMjgsIDY4LCA3MywgODAsIDc2LCA3OSwgODUsIAotICAgIDc4LCAxMjgsIDY4LCA3MywgODAsIDc2LCA3MywgMTI4LCA2OCwgNzMsIDgwLCA3NiwgMjAxLCA2OCwgNzMsIDc4LCA3MSwgCi0gICAgNjYsIDY1LCAyMTIsIDY4LCA3MywgMjA2LCA2OCwgNzMsIDc3LCA3NywgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNzMsIDc3LCAKLSAgICA3MywgNzgsIDg1LCA4NCwgNzMsIDc5LCA3OCwgNDUsIDUxLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgCi0gICAgNzksIDc4LCA0NSwgNTAsIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA0OSwgMTI4LCAKLSAgICA2OCwgNzMsIDc3LCA3MywgNzgsIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY4LCA3MywgNzcsIDczLCA2OCwgCi0gICAgNzMsIDE5MywgNjgsIDczLCA3NywgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA3NywgNjksIDc4LCAKLSAgICA4MywgNzMsIDc5LCAyMDYsIDY4LCA3MywgNzcsIDUwLCAxMjgsIDY4LCA3MywgNzYsIDEyOCwgNjgsIDczLCA3MSwgODIsIAotICAgIDY1LCA4MCwgNzIsIDEyOCwgNjgsIDczLCA3MSwgODIsIDY1LCA4MCwgMjAwLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgCi0gICAgNzksIDIxMSwgNjgsIDczLCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNjgsIDczLCA3MSwgODIsIDY1LCAyMDUsIDY4LCAKLSAgICA3MywgNzEsIDc5LCA4MiwgNzEsIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCA2OCwgNzMsIAotICAgIDcxLCA2NSwgNzcsIDc3LCA2NSwgMTI4LCA2OCwgNzMsIDcxLCAxOTMsIDY4LCA3MywgNzAsIDg0LCA3OSwgNzEsIDcxLCA3OSwgCi0gICAgMjExLCA2OCwgNzMsIDcwLCA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCAKLSAgICA4NCwgMjE3LCA2OCwgNzMsIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA3MywgNzAsIAotICAgIDcwLCA2OSwgODIsIDY5LCA3OCwgODQsIDczLCA2NSwgNzYsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDY5LCA4MiwgNjksIDc4LCAKLSAgICA2NywgMTk3LCA2OCwgNzMsIDcwLCA2NSwgODQsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIAotICAgIDY5LCA4MywgNzMsIDIxMSwgNjgsIDczLCA2OSwgODAsIDEyOCwgNjgsIDczLCAxOTcsIDY4LCA3MywgNjYsIDEyOCwgNjgsIAotICAgIDczLCA2NSwgODQsIDc5LCA3OCwgNzksIDIwNiwgNjgsIDczLCA2NSwgODQsIDc5LCA3OCwgNzMsIDc1LCAyMDEsIDY4LCA3MywgCi0gICAgNjUsIDgzLCA4NCwgNzksIDc2LCAyMDEsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDY4LCA4MywgMTI4LCA2OCwgNzMsIDY1LCAKLSAgICA3NywgNzksIDc4LCA2OCwgMTI4LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCAxOTYsIDY4LCA3MywgNjUsIDc3LCA2OSwgODQsIAotICAgIDY5LCAyMTAsIDY4LCA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgNjUsIDEyOCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgCi0gICAgNzMsIDc1LCAxOTMsIDY4LCA3MywgNjUsIDc2LCA2OSwgNjcsIDg0LCA0NSwgMjA4LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCAKLSAgICA2NSwgNzYsIDEyOCwgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIAotICAgIDczLCA5MCwgNjksIDE5NiwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIDY1LCA2OSwgCi0gICAgODIsIDY5LCA4MywgNzMsIDIxMSwgNjgsIDcyLCA3OSwgODUsIDEyOCwgNjgsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCAKLSAgICA3OSwgMTI4LCA2OCwgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDg1LCAxMjgsIDY4LCA3MiwgNzIsIDc5LCA3OSwgMTI4LCAKLSAgICA2OCwgNzIsIDcyLCA3OSwgMTI4LCA2OCwgNzIsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNjgsIAotICAgIDcyLCA3MiwgNjksIDEyOCwgNjgsIDcyLCA3MiwgNjUsIDEyOCwgNjgsIDcyLCA2OSwgNjksIDEyOCwgNjgsIDcyLCA2NSwgCi0gICAgODIsIDc3LCA2NSwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjksIDg0LCA3MiwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjUsIDg0LCAKLSAgICA3MiwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgMTI4LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNjUsIAotICAgIDY1LCA3NiwgODUsIDEyOCwgNjgsIDcyLCA2NSwgNjUsIDEyOCwgNjgsIDcyLCA2NSwgMTI4LCA2OCwgNjksIDkwLCAyMDAsIAotICAgIDY4LCA2OSwgODksIDg0LCA2OSwgODIsIDc5LCAyMTMsIDY4LCA2OSwgODksIDg0LCA2OSwgODIsIDc5LCAyMTEsIDY4LCA2OSwgCi0gICAgODgsIDczLCA2NSwgMTI4LCA2OCwgNjksIDg2LCA3MywgNjcsIDE5NywgNjgsIDY5LCA4NiwgNjksIDc2LCA3OSwgODAsIDc3LCAKLSAgICA2OSwgNzgsIDg0LCAxMjgsIDY4LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA2OCwgNjksIDgzLCAyMDMsIDY4LCA2OSwgODMsIAotICAgIDczLCA3MSwgNzgsIDEyOCwgNjgsIDY5LCA4MywgNzMsIDEyOCwgNjgsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgCi0gICAgNzksIDIwNiwgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OCwgNjksIDgzLCA2NywgNjksIDc4LCAKLSAgICA2OCwgNjksIDgyLCAxMjgsIDY4LCA2OSwgODIsIDY5LCA4NCwgNDUsIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA2OCwgNjksIAotICAgIDgyLCA2OSwgODQsIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA2OCwgNjksIDgwLCA2NSwgCi0gICAgODIsIDg0LCA3NywgNjksIDc4LCAyMTIsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDczLCA3OCwgMTk5LCA2OCwgNjksIDc4LCAKLSAgICA4NCwgNzMsIDgzLCA4NCwgODIsIDIxNywgNjgsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIAotICAgIDc4LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgMjEwLCA2OCwgCi0gICAgNjksIDc4LCA3OCwgNjksIDc4LCAxMjgsIDY4LCA2OSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgNzgsIDE5NywgNjgsIDY5LCAKLSAgICA3OCwgNjUsIDgyLCA3MywgODUsIDIxMSwgNjgsIDY5LCA3NiwgODQsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCAxOTMsIAotICAgIDY4LCA2OSwgNzYsIDg0LCAxMjgsIDY4LCA2OSwgNzYsIDgwLCA3MiwgNzMsIDE5NSwgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgCi0gICAgODIsIDIxNywgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDczLCAKLSAgICA3NywgNzMsIDg0LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAyMTAsIDY4LCA2OSwgNzYsIAotICAgIDczLCA2NywgNzMsIDc5LCA4NSwgMjExLCA2OCwgNjksIDc2LCA2OSwgODQsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDY5LCA4NCwgCisgICAgODQsIDEyOCwgODIsIDc2LCA3OSwgMTI4LCA4MiwgNzYsIDc3LCAxMjgsIDgyLCA3NiwgNzMsIDEyOCwgODIsIDc2LCA2OSwgCisgICAgMTI4LCA4MiwgNzQsIDY5LCAyMTEsIDgyLCA3NCwgNjksIDEyOCwgODIsIDc0LCAxOTcsIDgyLCA3MywgODYsIDY5LCA4MiwgCisgICAgMTI4LCA4MiwgNzMsIDg0LCA4NSwgNjUsIDc2LCAxMjgsIDgyLCA3MywgODQsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgyLCAKKyAgICA3MywgODQsIDgzLCA3MywgMTI4LCA4MiwgNzMsIDgzLCA3MywgNzgsIDE5OSwgODIsIDczLCA4MywgNzIsIDEyOCwgODIsIAorICAgIDczLCA4MiwgNjUsIDEyOCwgODIsIDczLCA4MCwgMTI4LCA4MiwgNzMsIDc4LCA3MSwgMjExLCA4MiwgNzMsIDc4LCA3MCwgCisgICAgNzksIDgyLCA5MCwgNjUsIDc4LCA2OCwgNzksIDEyOCwgODIsIDczLCAyMDYsIDgyLCA3MywgNzcsIDcxLCA2NiwgNjUsIAorICAgIDEyOCwgODIsIDczLCA3NSwgODIsIDczLCA3NSwgMTI4LCA4MiwgNzMsIDcxLCA4NiwgNjksIDY4LCA3MywgMTk1LCA4MiwgCisgICAgNzMsIDcxLCA3MiwgODQsIDg3LCA2NSwgODIsIDY4LCA4MywgMTI4LCA4MiwgNzMsIDcxLCA3MiwgODQsIDcyLCA2NSwgNzgsIAorICAgIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgODQsIDc5LCA0NSwgNzYsIDY5LCA3MCwgMjEyLCA4MiwgNzMsIDcxLCA3MiwgCisgICAgODQsIDQ1LCA4MywgNzMsIDY4LCAxOTcsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA3OSwgODcsIAorICAgIDY5LCAxOTYsIDgyLCA3MywgNzEsIDcyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDY4LCA2OSwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgCisgICAgODQsIDQ1LCA4MCwgNzksIDczLCA3OCwgODQsIDczLCA3OCwgMTk5LCA4MiwgNzMsIDcxLCA3MiwgODQsIDQ1LCA3MiwgNjUsIAorICAgIDc4LCA2OCwgNjksIDE5NiwgODIsIDczLCA3MSwgNzIsIDg0LCA0NSwgNzIsIDY1LCA3OCwgMTk2LCA4MiwgNzMsIDcxLCA3MiwgCisgICAgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgODIsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDgyLCA3MywgNjksIDg1LCAKKyAgICA3NiwgNDUsIDg5LCA2OSwgODMsIDczLCA2OSwgODUsIDc4LCA3MSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4OSwgCisgICAgNjksIDc5LCA4MiwgNzMsIDc4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODksIDY5LCA3OSwgODIsIDczLCA3OCwgNzIsIDczLCA2OSwgODUsIDcyLCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgCisgICAgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIAorICAgIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCA3MiwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCAKKyAgICA3OCwgNzEsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDgzLCA2NSwgCisgICAgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIAorICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MywgODMsIDY1LCA3OCwgNzEsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgODIsIAorICAgIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCAKKyAgICA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgCisgICAgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIAorICAgIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgCisgICAgNDUsIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDgwLCA2NSwgNzgsIAorICAgIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MiwgNzMsIAorICAgIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDgyLCAKKyAgICA3MywgNjksIDg1LCA3NiwgNDUsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA4MiwgCisgICAgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNzUsIAorICAgIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDgyLCA3MywgNjksIDg1LCA3NiwgNDUsIDc1LCAKKyAgICA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgCisgICAgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3NSwgNjUsIDgwLCA4OSwgNjksIAorICAgIDc5LCA4NSwgNzgsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDQ1LCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgNzIsIDEyOCwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgyLCA3MywgNjksIAorICAgIDg1LCAyMDQsIDgyLCA3MywgNjksIDc2LCAxMjgsIDgyLCA3MywgNjksIDY5LCAxMjgsIDgyLCA3MywgNjcsIDY5LCA3NywgCisgICAgMTI4LCA4MiwgNzMsIDY3LCA2OSwgMTI4LCA4MiwgNzMsIDY3LCAxOTcsIDgyLCA3MywgNjYsIDY2LCA3OSwgNzgsIDEyOCwgCisgICAgODIsIDczLCA2NSwgMjA0LCA4MiwgNzIsIDc5LCA4NCwgNzMsIDE5NSwgODIsIDcyLCA3OSwgMTI4LCA4MiwgNzIsIDIwNywgCisgICAgODIsIDcyLCA2NSwgMTI4LCA4MiwgNzEsIDg5LCA3MywgNzgsIDcxLCA4MywgMTI4LCA4MiwgNzEsIDg5LCA2NSwgNzgsIAorICAgIDEyOCwgODIsIDcxLCA4OSwgMTkzLCA4MiwgNjksIDg2LCA3OSwgNzYsIDg2LCA3MywgNzgsIDE5OSwgODIsIDY5LCA4NiwgCisgICAgNzksIDc2LCA4NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDgyLCA2OSwgODYsIDczLCAKKyAgICA2NSwgMTI4LCA4MiwgNjksIDg2LCA2OSwgODIsIDgzLCA2OSwgNjgsIDEyOCwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgNjksIAorICAgIDE5NiwgODIsIDY5LCA4NiwgNjksIDgyLCA4MywgMTk3LCA4MiwgNjksIDg1LCA4OCwgMTI4LCA4MiwgNjksIDg1LCAxMjgsIAorICAgIDgyLCA2OSwgODQsIDg1LCA4MiwgNzgsIDEyOCwgODIsIDY5LCA4NCwgODUsIDgyLCAyMDYsIDgyLCA2OSwgODQsIDgyLCA3OSwgCisgICAgNzAsIDc2LCA2OSwgMjE2LCA4MiwgNjksIDg0LCA4MiwgNjksIDY1LCA4NCwgMTI4LCA4MiwgNjksIDg0LCA3OSwgODIsIDg0LCAKKyAgICAxMjgsIDgyLCA2OSwgODMsIDg1LCA4MCwgNzMsIDc4LCA4NSwgODMsIDEyOCwgODIsIDY5LCA4MywgODQsIDgyLCA3OSwgNzksIAorICAgIDc3LCAxMjgsIDgyLCA2OSwgODMsIDg0LCA4MiwgNzMsIDY3LCA4NCwgNjksIDE5NiwgODIsIDY5LCA4MywgODQsIDEyOCwgCisgICAgODIsIDY5LCA4MywgODAsIDc5LCA3OCwgODMsIDY5LCAxMjgsIDgyLCA2OSwgODMsIDc5LCA4NSwgODIsIDY3LCA2OSwgMTI4LCAKKyAgICA4MiwgNjksIDgzLCA3OSwgNzYsIDg1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDgzLCA3MywgODMsIDg0LCA2NSwgCisgICAgNzgsIDY3LCA2OSwgMTI4LCA4MiwgNjksIDgzLCA3MywgNjgsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDgyLCA2OSwgODMsIAorICAgIDIwMCwgODIsIDY5LCA4MiwgNjksIDc4LCA3MSwgNzEsIDY1LCA3OCwgMTI4LCA4MiwgNjksIDgyLCA2OSwgNzUsIDY1LCA3OCwgCisgICAgMTI4LCA4MiwgNjksIDgwLCA4MiwgNjksIDgzLCA2OSwgNzgsIDg0LCAxMjgsIDgyLCA2OSwgODAsIDc2LCA2NSwgNjcsIDY5LCAKKyAgICA3NywgNjksIDc4LCAyMTIsIDgyLCA2OSwgODAsIDcyLCAxMjgsIDgyLCA2OSwgODAsIDY5LCA4NCwgNzMsIDg0LCA3MywgNzksIAorICAgIDIwNiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgNjksIDE5NiwgODIsIDY5LCA4MCwgNjksIDY1LCA4NCwgMTI4LCA4MiwgCisgICAgNjksIDgwLCA2OSwgNjUsIDIxMiwgODIsIDY5LCA4MCwgNjUsIDg5LCA2NSwgMTI4LCA4MiwgNjksIDgwLCA2NSwgMTI4LCAKKyAgICA4MiwgNjksIDgwLCAxOTMsIDgyLCA2OSwgNzgsIDg0LCA3OSwgNzEsIDY5LCA3OCwgMTI4LCA4MiwgNjksIDc4LCAxMjgsIAorICAgIDgyLCA2OSwgMjA2LCA4MiwgNjksIDc3LCA4NSwgMTI4LCA4MiwgNjksIDc3LCA2OSwgNjgsIDg5LCAxMjgsIDgyLCA2OSwgCisgICAgNzYsIDczLCA3MSwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDc2LCA3MywgNjksIDg2LCA2OSwgMTk2LCA4MiwgNjksIDc2LCAKKyAgICA2OSwgNjUsIDgzLCA2OSwgMTI4LCA4MiwgNjksIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzYsIAorICAgIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MiwgNjksIDc2LCA2NSwgNjUsIDEyOCwgODIsIDY5LCA3NCwgNjUsIDc4LCAKKyAgICAxOTksIDgyLCA2OSwgNzMsIDE5NiwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDQ1LCA1MiwgMTI4LCA4MiwgNjksIAorICAgIDcxLCA4NSwgNzYsIDg1LCA4MywgNDUsIDUxLCAxMjgsIDgyLCA2OSwgNzEsIDg1LCA3NiwgODUsIDgzLCA0NSwgNTAsIDEyOCwgCisgICAgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgODMsIDEyOCwgODIsIDY5LCA3MSwgODUsIDc2LCA4NSwgMjExLCA4MiwgNjksIDcxLCAKKyAgICA3MywgODMsIDg0LCA2OSwgODIsIDY5LCAxOTYsIDgyLCA2OSwgNzEsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDgyLCA2OSwgNzEsIAorICAgIDczLCA2NSwgNDUsIDUwLCAxMjgsIDgyLCA2OSwgNzEsIDczLCA2NSwgMTI4LCA4MiwgNjksIDcwLCA3OSwgODIsIDc3LCA2OSwgCisgICAgMTk2LCA4MiwgNjksIDcwLCA2OSwgODIsIDY5LCA3OCwgNjcsIDE5NywgODIsIDY5LCA2OCwgODUsIDgwLCA3NiwgNzMsIDY3LCAKKyAgICA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgODIsIDY5LCA2NywgODksIDY3LCA3NiwgNzMsIDc4LCAxOTksIDgyLCA2OSwgNjcsIAorICAgIDg5LCA2NywgNzYsIDY5LCAxOTYsIDgyLCA2OSwgNjcsIDg0LCA3MywgNzYsIDczLCA3OCwgNjksIDY1LCAyMTAsIDgyLCA2OSwgCisgICAgNjcsIDg0LCA2NSwgNzgsIDcxLCA4NSwgNzYsIDY1LCAyMTAsIDgyLCA2OSwgNjcsIDg0LCA2NSwgNzgsIDcxLCA3NiwgNjksIAorICAgIDEyOCwgODIsIDY5LCA2NywgODQsIDY1LCA3OCwgNzEsIDc2LCAxOTcsIDgyLCA2OSwgNjcsIDgyLCA2OSwgNjUsIDg0LCA3MywgCisgICAgNzksIDc4LCA2NSwgMjA0LCA4MiwgNjksIDY3LCA3OSwgODIsIDY4LCA3MywgNzgsIDE5OSwgODIsIDY5LCA2NywgNzksIDgyLCAKKyAgICA2OCwgNjksIDgyLCAxMjgsIDgyLCA2OSwgNjcsIDc5LCA4MiwgMTk2LCA4MiwgNjksIDY3LCA2OSwgODAsIDg0LCA3MywgODYsIAorICAgIDE5NywgODIsIDY5LCA2NywgNjksIDczLCA4NiwgNjksIDgyLCAxMjgsIDgyLCA2OSwgNjUsIDc2LCA3MSwgNjUsIDgyLCA0NSwgCisgICAgNTAsIDEyOCwgODIsIDY5LCA2NSwgNzYsIDcxLCA2NSwgODIsIDEyOCwgODIsIDY5LCA2NSwgNzIsIDc3LCA4NSwgNzUsIAorICAgIDEyOCwgODIsIDY5LCA2NSwgNjcsIDcyLCAxMjgsIDgyLCA2OCwgMjA3LCA4MiwgNjgsIDY5LCAyMDQsIDgyLCA2NiwgNjUsIAorICAgIDgzLCAxOTMsIDgyLCA2NSwgODksIDgzLCAxMjgsIDgyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDgyLCA2NSwgCisgICAgODQsIDczLCA3OSwgMTI4LCA4MiwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgODIsIDY1LCA4NCwgNzIsIDE5MywgODIsIDY1LCAKKyAgICA4NCwgNjUsIDEyOCwgODIsIDY1LCA4NCwgMTI4LCA4MiwgNjUsIDgzLCA4NywgNjUsIDY4LCA3MywgMTI4LCA4MiwgNjUsIAorICAgIDgzLCA3OSwgODUsIDIwNCwgODIsIDY1LCA4MywgNzIsIDY1LCAxMjgsIDgyLCA2NSwgODEsIDEyOCwgODIsIDY1LCA4MCwgCisgICAgNzMsIDgzLCA3NywgNjUsIDEyOCwgODIsIDY1LCA3OCwgNzEsIDE5NywgODIsIDY1LCA3OCwgNjUsIDEyOCwgODIsIDY1LCAKKyAgICA3OCwgMTI4LCA4MiwgNjUsIDc3LCAyMTEsIDgyLCA2NSwgNzcsIDY2LCA2NSwgODQsIDEyOCwgODIsIDY1LCA3NSwgNzIsIAorICAgIDY1LCA3OCwgNzEsIDEyOCwgODIsIDY1LCA3NSwgNjUsIDY1LCA4MiwgNjUsIDY1LCA3OCwgODMsIDY1LCA4OSwgNjUsIDEyOCwgCisgICAgODIsIDY1LCA3MywgODMsIDczLCA3OCwgMTk5LCA4MiwgNjUsIDczLCA4MywgNjksIDE5NiwgODIsIDY1LCA3MywgNzgsIDY2LCAKKyAgICA3OSwgODcsIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgODksIDEyOCwgODIsIDY1LCA3MywgNzYsIDg3LCA2NSwgCisgICAgMjE3LCA4MiwgNjUsIDczLCA3NiwgMTI4LCA4MiwgNjUsIDczLCA2OCwgMjA3LCA4MiwgNjUsIDczLCA2OCwgNjUsIDEyOCwgCisgICAgODIsIDY1LCA3MiwgNzcsIDY1LCA4NCwgODUsIDc2LCA3NiwgNjUsIDIwMCwgODIsIDY1LCA3MiwgMTI4LCA4MiwgNjUsIDcwLCAKKyAgICA2OSwgMTI4LCA4MiwgNjUsIDY5LCA3NywgMTI4LCA4MiwgNjUsIDY4LCA3MywgNzksIDY1LCA2NywgODQsIDczLCA4NiwgCisgICAgMTk3LCA4MiwgNjUsIDY4LCA3MywgNzksIDEyOCwgODIsIDY1LCA2OCwgNzMsIDIwNywgODIsIDY1LCA2OCwgMjAxLCA4MiwgCisgICAgNjUsIDY4LCAxMjgsIDgyLCA2NSwgMTk2LCA4MiwgNjUsIDY3LCA4MSwgODUsIDY5LCAyMTIsIDgyLCA2NSwgNjcsIDczLCAKKyAgICA3OCwgNzEsIDEyOCwgODIsIDY1LCA2NiwgNjYsIDczLCA4NCwgMTI4LCA4MiwgNjUsIDY2LCA2NiwgNzMsIDIxMiwgODIsIAorICAgIDY1LCA2NiwgMTI4LCA4MiwgNjUsIDY1LCA3MywgMTI4LCA4MiwgNjUsIDUxLCAxMjgsIDgyLCA2NSwgNTAsIDEyOCwgODIsIAorICAgIDY1LCA0NSwgNTAsIDEyOCwgODIsIDQ4LCA1MCwgNTcsIDEyOCwgODIsIDQ4LCA1MCwgNTYsIDEyOCwgODIsIDQ4LCA1MCwgCisgICAgNTUsIDEyOCwgODIsIDQ4LCA1MCwgNTQsIDEyOCwgODIsIDQ4LCA1MCwgNTMsIDEyOCwgODIsIDQ4LCA1MCwgNTIsIDEyOCwgCisgICAgODIsIDQ4LCA1MCwgNTEsIDEyOCwgODIsIDQ4LCA1MCwgNTAsIDEyOCwgODIsIDQ4LCA1MCwgNDksIDEyOCwgODIsIDQ4LCAKKyAgICA1MCwgNDgsIDEyOCwgODIsIDQ4LCA0OSwgNTcsIDEyOCwgODIsIDQ4LCA0OSwgNTYsIDEyOCwgODIsIDQ4LCA0OSwgNTUsIAorICAgIDEyOCwgODIsIDQ4LCA0OSwgNTQsIDY1LCAxMjgsIDgyLCA0OCwgNDksIDU0LCAxMjgsIDgyLCA0OCwgNDksIDUzLCAxMjgsIAorICAgIDgyLCA0OCwgNDksIDUyLCAxMjgsIDgyLCA0OCwgNDksIDUxLCAxMjgsIDgyLCA0OCwgNDksIDUwLCAxMjgsIDgyLCA0OCwgCisgICAgNDksIDQ5LCAxMjgsIDgyLCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA4MiwgNDgsIDQ5LCA0OCwgMTI4LCA4MiwgNDgsIDQ4LCAKKyAgICA1NywgMTI4LCA4MiwgNDgsIDQ4LCA1NiwgMTI4LCA4MiwgNDgsIDQ4LCA1NSwgMTI4LCA4MiwgNDgsIDQ4LCA1NCwgMTI4LCAKKyAgICA4MiwgNDgsIDQ4LCA1MywgMTI4LCA4MiwgNDgsIDQ4LCA1MiwgMTI4LCA4MiwgNDgsIDQ4LCA1MSwgNjYsIDEyOCwgODIsIAorICAgIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgyLCA0OCwgNDgsIDUxLCAxMjgsIDgyLCA0OCwgNDgsIDUwLCA2NSwgMTI4LCA4MiwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA4MiwgNDgsIDQ4LCA0OSwgMTI4LCA4MiwgNDUsIDY3LCA4MiwgNjksIDE5NywgODEsIDg5LCAKKyAgICA4OCwgMTI4LCA4MSwgODksIDg1LCAxMjgsIDgxLCA4OSwgODQsIDEyOCwgODEsIDg5LCA4MiwgODgsIDEyOCwgODEsIDg5LCAKKyAgICA4MiwgMTI4LCA4MSwgODksIDgwLCAxMjgsIDgxLCA4OSwgNzksIDEyOCwgODEsIDg5LCA3MywgMTI4LCA4MSwgODksIDY5LCAKKyAgICA2OSwgMTI4LCA4MSwgODksIDY5LCAxMjgsIDgxLCA4OSwgNjUsIDY1LCAxMjgsIDgxLCA4OSwgNjUsIDEyOCwgODEsIDg5LCAKKyAgICAxMjgsIDgxLCA4NywgNzMsIDEyOCwgODEsIDg3LCA2OSwgNjksIDEyOCwgODEsIDg3LCA2OSwgMTI4LCA4MSwgODcsIDY1LCAKKyAgICA2NSwgMTI4LCA4MSwgODcsIDY1LCAxMjgsIDgxLCA4NSwgODgsIDEyOCwgODEsIDg1LCA4NiwgMTI4LCA4MSwgODUsIDg1LCAKKyAgICA4NiwgMTI4LCA4MSwgODUsIDg1LCAxMjgsIDgxLCA4NSwgODQsIDEyOCwgODEsIDg1LCA4MywgNzIsIDgzLCA3MiwgNjUsIAorICAgIDg5LCA2NSwgMTI4LCA4MSwgODUsIDgyLCA4OCwgMTI4LCA4MSwgODUsIDgyLCAxMjgsIDgxLCA4NSwgODAsIDEyOCwgODEsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgODEsIDg1LCA3OSwgODQsIDE5NywgODEsIDg1LCA3OSwgODQsIDY1LCA4NCwgNzMsIDc5LCAKKyAgICAyMDYsIDgxLCA4NSwgNzksIDg0LCAxMjgsIDgxLCA4NSwgNzksIDgwLCAxMjgsIDgxLCA4NSwgNzksIDEyOCwgODEsIDg1LCAKKyAgICA3NSwgMTI4LCA4MSwgODUsIDczLCA3OCwgODQsIDY5LCA4MywgODMsIDY5LCA3OCwgNjcsIDY5LCAxMjgsIDgxLCA4NSwgNzMsIAorICAgIDc4LCA2OCwgNzMsIDY3LCA2OSwgODMsIDczLCA3NywgMTkzLCA4MSwgODUsIDczLCA3OCwgNjcsIDg1LCA3OCwgODgsIDEyOCwgCisgICAgODEsIDg1LCA3MywgNzgsIDY1LCA4MiwgNzMsIDg1LCAyMTEsIDgxLCA4NSwgNzMsIDc2LCA3NiwgMTI4LCA4MSwgODUsIDczLCAKKyAgICA2NywgMjAzLCA4MSwgODUsIDczLCAxMjgsIDgxLCA4NSwgNzAsIDEyOCwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgNzksIAorICAgIDc4LCA2OSwgMTk2LCA4MSwgODUsIDY5LCA4MywgODQsIDczLCA3OSwgNzgsIDEyOCwgODEsIDg1LCA2OSwgODMsIDg0LCA3MywgCisgICAgNzksIDIwNiwgODEsIDg1LCA2OSwgNjksIDc4LCAxMjgsIDgxLCA4NSwgNjksIDY5LCAyMDYsIDgxLCA4NSwgNjksIDEyOCwgCisgICAgODEsIDg1LCA2NiwgODUsIDg0LCA4MywgMTI4LCA4MSwgODUsIDY1LCA4NCwgNjksIDgyLCA3OCwgNzMsIDc5LCAyMDYsIDgxLCAKKyAgICA4NSwgNjUsIDgyLCA4NCwgNjksIDgyLCA4MywgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCA4MiwgMjExLCA4MSwgODUsIAorICAgIDY1LCA4MiwgODQsIDY5LCA4MiwgMTI4LCA4MSwgODUsIDY1LCA4MiwgODQsIDY5LCAyMTAsIDgxLCA4NSwgNjUsIDc4LCA4NCwgCisgICAgNzMsIDg0LCAyMTcsIDgxLCA4NSwgNjUsIDY4LCA4MiwgODUsIDgwLCA3NiwgMTk3LCA4MSwgODUsIDY1LCA2OCwgODIsIDY1LCAKKyAgICA3OCwgODQsIDEyOCwgODEsIDg1LCA2NSwgNjgsIDgyLCA2NSwgNzgsIDIxMiwgODEsIDg1LCA2NSwgNjgsIDEyOCwgODEsIAorICAgIDg1LCA2NSwgMTk2LCA4MSwgODUsIDY1LCAxMjgsIDgxLCA4NSwgMTI4LCA4MSwgMjA4LCA4MSwgNzksIDg4LCAxMjgsIDgxLCAKKyAgICA3OSwgODQsIDEyOCwgODEsIDc5LCA4MCwgNzIsIDEyOCwgODEsIDc5LCA4MCwgNjUsIDEyOCwgODEsIDc5LCA4MCwgMTI4LCAKKyAgICA4MSwgNzksIDc5LCAxMjgsIDgxLCA3OSwgMjA3LCA4MSwgNzksIDcwLCAxMjgsIDgxLCA3OSwgMTk4LCA4MSwgNzksIDY1LCAKKyAgICAxMjgsIDgxLCA3OSwgMTI4LCA4MSwgNzgsIDEyOCwgODEsIDczLCA4OCwgMTI4LCA4MSwgNzMsIDg0LCA4MywgNjUsIDEyOCwgCisgICAgODEsIDczLCA4NCwgMTI4LCA4MSwgNzMsIDgwLCAxMjgsIDgxLCA3MywgNzMsIDEyOCwgODEsIDczLCA2OSwgODgsIDEyOCwgCisgICAgODEsIDczLCA2OSwgODQsIDEyOCwgODEsIDczLCA2OSwgODAsIDEyOCwgODEsIDczLCA2OSwgMTI4LCA4MSwgNzMsIDEyOCwgCisgICAgODEsIDcyLCA4NywgNzMsIDEyOCwgODEsIDcyLCA4NywgNjksIDY5LCAxMjgsIDgxLCA3MiwgODcsIDY5LCAxMjgsIDgxLCAKKyAgICA3MiwgODcsIDY1LCA2NSwgMTI4LCA4MSwgNzIsIDg3LCA2NSwgMTI4LCA4MSwgNzIsIDg1LCAxMjgsIDgxLCA3MiwgNzksIAorICAgIDEyOCwgODEsIDcyLCA3MywgMTI4LCA4MSwgNzIsIDY5LCA2OSwgMTI4LCA4MSwgNzIsIDY5LCAxMjgsIDgxLCA3MiwgNjUsIAorICAgIDY1LCAxMjgsIDgxLCA3MiwgNjUsIDEyOCwgODEsIDcxLCA2NSwgMTI4LCA4MSwgNjksIDg0LCA2NSwgNzgsIDY1LCAxMjgsIAorICAgIDgxLCA2OSwgNjksIDEyOCwgODEsIDY5LCAxMjgsIDgxLCA2NSwgODUsIDEyOCwgODEsIDY1LCA4NCwgNjUsIDc4LCAxMjgsIAorICAgIDgxLCA2NSwgODIsIDc4LCA2OSwgMjE3LCA4MSwgNjUsIDgyLCAxMjgsIDgxLCA2NSwgODEsIDEyOCwgODEsIDY1LCA4MCwgCisgICAgNzIsIDEyOCwgODEsIDY1LCA3NywgNjUsIDg0LCA4MywgMTI4LCA4MSwgNjUsIDc3LCA2NSwgODQsIDIxMSwgODEsIDY1LCAKKyAgICA3NiwgMTkzLCA4MSwgNjUsIDczLCA4MiwgODQsIDcyLCA4MiwgNjUsIDEyOCwgODEsIDY1LCA3MywgMTI4LCA4MSwgNjUsIAorICAgIDcwLCAxMjgsIDgxLCA2NSwgMTk4LCA4MSwgNjUsIDY4LCA3NywgNjUsIDEyOCwgODEsIDY1LCA2NSwgNzMsIDEyOCwgODEsIAorICAgIDY1LCA2NSwgNzAsIDg1LCAxMjgsIDgxLCA2NSwgNjUsIDcwLCAxMjgsIDgxLCA0OCwgNDgsIDU1LCAxMjgsIDgxLCA0OCwgCisgICAgNDgsIDU0LCAxMjgsIDgxLCA0OCwgNDgsIDUzLCAxMjgsIDgxLCA0OCwgNDgsIDUyLCAxMjgsIDgxLCA0OCwgNDgsIDUxLCAKKyAgICAxMjgsIDgxLCA0OCwgNDgsIDUwLCAxMjgsIDgxLCA0OCwgNDgsIDQ5LCAxMjgsIDgwLCA5MCwgMTI4LCA4MCwgODksIDg4LCAKKyAgICAxMjgsIDgwLCA4OSwgODQsIDEyOCwgODAsIDg5LCA4MiwgODgsIDEyOCwgODAsIDg5LCA4MiwgMTI4LCA4MCwgODksIDgwLCAKKyAgICAxMjgsIDgwLCA4OSwgMTI4LCA4MCwgODcsIDc5LCA4OSwgMTI4LCA4MCwgODcsIDc5LCA3OSwgMTI4LCA4MCwgODcsIDc5LCAKKyAgICAxMjgsIDgwLCA4NywgMjA3LCA4MCwgODcsIDczLCA3MywgMTI4LCA4MCwgODcsIDczLCAxMjgsIDgwLCA4NywgNjksIDY5LCAKKyAgICAxMjgsIDgwLCA4NywgNjksIDEyOCwgODAsIDg3LCA2NSwgNjUsIDEyOCwgODAsIDg3LCAxMjgsIDgwLCA4NiwgMTI4LCA4MCwgCisgICAgODUsIDg4LCAxMjgsIDgwLCA4NSwgODUsIDg0LCAxMjgsIDgwLCA4NSwgODUsIDEyOCwgODAsIDg1LCA4NCwgODIsIDY5LCAKKyAgICA3MCwgNjUsIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDg0LCAxMjgsIDgwLCA4NSwgMjEyLCA4MCwgODUsIAorICAgIDgzLCA3MiwgODAsIDczLCA3OCwgMTI4LCA4MCwgODUsIDgzLCA3MiwgODAsIDczLCA3NSwgNjUsIDEyOCwgODAsIDg1LCA4MywgCisgICAgNzIsIDczLCA3OCwgMTk5LCA4MCwgODUsIDgyLCA4OCwgMTI4LCA4MCwgODUsIDgyLCA4MywgNjksIDEyOCwgODAsIDg1LCAKKyAgICA4MiwgODAsIDc2LCAxOTcsIDgwLCA4NSwgODIsIDc4LCA2NSwgNzcsIDY1LCAxMjgsIDgwLCA4NSwgODIsIDczLCA4NCwgODksIAorICAgIDEyOCwgODAsIDg1LCA4MiwgNzMsIDcwLCA4OSwgMTI4LCA4MCwgODUsIDgyLCAxMjgsIDgwLCA4NSwgODEsIDEyOCwgODAsIAorICAgIDg1LCA4MCwgMTI4LCA4MCwgODUsIDc5LCA4OCwgMTI4LCA4MCwgODUsIDc5LCA4MCwgMTI4LCA4MCwgODUsIDc5LCAxMjgsIAorICAgIDgwLCA4NSwgNzgsIDcxLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA4NSwgNzgsIDcxLCAxMjgsIDgwLCA4NSwgNzgsIDY3LCA4NCwgCisgICAgODUsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODUsIDc4LCA2NywgODQsIDg1LCA2NSwgODQsIDczLCA3OSwgMjA2LCAKKyAgICA4MCwgODUsIDc3LCA4MCwgMTI4LCA4MCwgODUsIDc3LCAxMjgsIDgwLCA4NSwgNjksIDEyOCwgODAsIDg1LCA2NiwgNzYsIAorICAgIDczLCAxOTUsIDgwLCA4NSwgNjUsIDgxLCAxMjgsIDgwLCA4NSwgNjUsIDY5LCAxMjgsIDgwLCA4NSwgNTAsIDEyOCwgODAsIAorICAgIDg1LCA0OSwgMTI4LCA4MCwgODUsIDEyOCwgODAsIDg0LCA3MiwgNjUsIDcyLCAxOTMsIDgwLCA4NCwgNjksIDEyOCwgODAsIAorICAgIDgzLCA3MywgNzYsIDIwMSwgODAsIDgzLCA3MywgNzAsIDczLCA4MywgODQsIDc5LCA4MywgODksIDc4LCA2NSwgNzEsIDc3LCAKKyAgICA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDgwLCA2NSwgODIsIDY1LCA3NSwgNjUsIDc2LCA2OSwgCisgICAgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCA3MCwgNzMsIDgzLCA4NCwgNzksIDIwNiwgODAsIDgzLCA3MywgNzAsIDczLCAKKyAgICA4MywgODQsIDc5LCA3NiwgODksIDcxLCA3MywgODMsIDc3LCA2NSwgMTI4LCA4MCwgODMsIDczLCAxMjgsIDgwLCA4MywgCisgICAgMTI4LCA4MCwgODIsIDc5LCA4NiwgNjksIDEyOCwgODAsIDgyLCA3OSwgODQsIDc5LCA4NiwgNjUsIDgyLCA4OSwgMjExLCAKKyAgICA4MCwgODIsIDc5LCA4NCwgNzksIDIxMSwgODAsIDgyLCA3OSwgODQsIDY5LCA2NywgODQsIDY5LCAxOTYsIDgwLCA4MiwgNzksIAorICAgIDgzLCA3MSwgNjksIDcxLCA4MiwgNjUsIDc3LCA3NywgNjksIDc4LCA3MywgMTI4LCA4MCwgODIsIDc5LCA4MCwgNzksIDgyLCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgODAsIDgyLCA3OSwgODAsIDc5LCA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgODAsIAorICAgIDgyLCA3OSwgODAsIDY5LCA4MiwgODQsIDIxNywgODAsIDgyLCA3OSwgODAsIDY5LCA3NiwgNzYsIDY5LCAyMTAsIDgwLCA4MiwgCisgICAgNzksIDc5LCA3MCwgMTI4LCA4MCwgODIsIDc5LCA3NiwgNzksIDc4LCA3MSwgNjksIDE5NiwgODAsIDgyLCA3OSwgNzYsIDY1LCAKKyAgICA4NCwgNzMsIDc5LCA3OCwgMTk3LCA4MCwgODIsIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA4MCwgODIsIAorICAgIDc5LCA3NCwgNjksIDY3LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgODIsIDc5LCA3MSwgODIsIDY5LCA4MywgODMsIDEyOCwgCisgICAgODAsIDgyLCA3OSwgNzEsIDgyLCA2NSwgMjA1LCA4MCwgODIsIDc5LCA3MCwgNzksIDg1LCA3OCwgNjgsIDEyOCwgODAsIDgyLCAKKyAgICA3OSwgNjgsIDg1LCA2NywgODQsIDEyOCwgODAsIDgyLCA3OSwgNjgsIDg1LCA2NywgMjEyLCA4MCwgODIsIDczLCA4NiwgNjUsIAorICAgIDg0LCA2OSwgMTI4LCA4MCwgODIsIDczLCA4NiwgNjUsIDg0LCAxOTcsIDgwLCA4MiwgNzMsIDg2LCA2NSwgNjcsIDIxNywgCisgICAgODAsIDgyLCA3MywgODMsIDcyLCA4NCwgNzIsIDY1LCA3NywgNjUsIDg0LCA4MiwgMTkzLCA4MCwgODIsIDczLCA3OCwgODQsIAorICAgIDgzLCAxMjgsIDgwLCA4MiwgNzMsIDc4LCA4NCwgMTI4LCA4MCwgODIsIDczLCA3OCwgMjEyLCA4MCwgODIsIDczLCA3OCwgCisgICAgNjcsIDY5LCA4MywgODMsIDEyOCwgODAsIDgyLCA3MywgNzcsIDY5LCAxMjgsIDgwLCA4MiwgNzMsIDc3LCAxOTcsIDgwLCAKKyAgICA4MiwgNjksIDg2LCA3MywgNzksIDg1LCAyMTEsIDgwLCA4MiwgNjksIDgzLCA2OSwgODQsIDEyOCwgODAsIDgyLCA2OSwgODMsIAorICAgIDY5LCA3OCwgODQsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDgwLCA4MiwgNjksIDgzLCA2NywgODIsIDczLCA4MCwgODQsIDczLCAKKyAgICA3OSwgMjA2LCA4MCwgODIsIDY5LCA4MCwgNzksIDc4LCA2OCwgNjksIDgyLCA2NSwgNzgsIDY3LCA2OSwgMTI4LCA4MCwgODIsIAorICAgIDY5LCA3OCwgNzUsIDcyLCA2NSwgMTI4LCA4MCwgODIsIDY5LCA3MCwgNjUsIDY3LCAxOTcsIDgwLCA4MiwgNjksIDY3LCA3MywgCisgICAgODAsIDczLCA4NCwgNjUsIDg0LCA2OSwgMTI4LCA4MCwgODIsIDY5LCA2NywgNjksIDY4LCA3MywgNzgsIDE5OSwgODAsIDgyLCAKKyAgICA2OSwgNjcsIDY5LCA2OCwgNjksIDgzLCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAyMTEsIDgwLCA4MiwgNjksIAorICAgIDY3LCA2OSwgNjgsIDY5LCAxOTYsIDgwLCA4MiwgNjksIDY3LCA2OSwgNjgsIDY5LCAxMjgsIDgwLCA4MiwgNjksIDY3LCA2OSwgCisgICAgNjgsIDE5NywgODAsIDgyLCA2NSwgNzcsIDQ1LCA4MCwgNzMsIDczLCAxMjgsIDgwLCA4MiwgNjUsIDc3LCA0NSwgODAsIDczLCAKKyAgICAyMDEsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNzcsIDg1LCA3OSwgODksIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA3NywgODUsIAorICAgIDc5LCAyMTcsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDg1LCA3OSwgNzgsIDEyOCwgODAsIDgyLCA2NSwgNzcsIDQ1LCA2NiwgCisgICAgODUsIDc5LCAyMDYsIDgwLCA4MiwgNjUsIDc3LCA0NSwgNjYsIDY5LCA3MywgMTI4LCA4MCwgODIsIDY1LCA3NywgNDUsIDY2LCAKKyAgICA2OSwgMjAxLCA4MCwgODIsIDY1LCA3NywgMTI4LCA4MCwgODIsIDY1LCAyMDUsIDgwLCA4MiwgMTI4LCA4MCwgODAsIDg2LCAKKyAgICAxMjgsIDgwLCA4MCwgNzcsIDEyOCwgODAsIDgwLCA2NSwgMTI4LCA4MCwgNzksIDg5LCAxMjgsIDgwLCA3OSwgODgsIDEyOCwgCisgICAgODAsIDc5LCA4NywgNjksIDgyLCAyMTEsIDgwLCA3OSwgODcsIDY5LCA4MiwgMTI4LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAKKyAgICA2OSwgMTk2LCA4MCwgNzksIDg3LCA2OCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgODUsIDc4LCAxOTYsIDgwLCA3OSwgODUsIAorICAgIDc2LCA4NCwgODIsIDIxNywgODAsIDc5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3OSwgODQsIDY1LCA4NCwgNzksIDEyOCwgCisgICAgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgMTk3LCA4MCwgNzksIDIxMiwgODAsIDc5LCA4MywgODQsIDgwLCA3OSwgODMsIDczLCAKKyAgICA4NCwgNzMsIDc5LCAyMDYsIDgwLCA3OSwgODMsIDg0LCA2NiwgNzksIDg4LCAxMjgsIDgwLCA3OSwgODMsIDg0LCA2NSwgCisgICAgMjA0LCA4MCwgNzksIDgzLCA4NCwgMTI4LCA4MCwgNzksIDgzLCAyMTIsIDgwLCA3OSwgODMsIDgzLCA2OSwgODMsIDgzLCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDgwLCA3OSwgODIsIDgyLCA2OSwgNjcsIDg0LCA4NSwgODMsIDEyOCwgODAsIDc5LCA4MiwgODIsIAorICAgIDY5LCA2NywgODQsIDg1LCAyMTEsIDgwLCA3OSwgODAsIDgwLCA2OSwgODIsIDEyOCwgODAsIDc5LCA4MCwgMTI4LCA4MCwgCisgICAgNzksIDIwOCwgODAsIDc5LCA3OSwgNjgsIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc5LCAxMjgsIDgwLCA3OSwgNzgsIDY4LCAKKyAgICA3OSwgMTI4LCA4MCwgNzksIDIwNiwgODAsIDc5LCA3NywgNzcsIDY5LCA2OSwgMTI4LCA4MCwgNzksIDc3LCA3NywgNjksIAorICAgIDE5NywgODAsIDc5LCA3NiwgNzMsIDgzLCA3MiwgMTI4LCA4MCwgNzksIDc2LCA3MywgNjcsIDE5NywgODAsIDc5LCA3NiwgCisgICAgMjAxLCA4MCwgNzksIDc2LCA2OSwgMTI4LCA4MCwgNzksIDc2LCAxOTcsIDgwLCA3OSwgNzUsIDgyLCA4OSwgODQsIDczLCAKKyAgICA2OSwgMTI4LCA4MCwgNzksIDc1LCA3OSwgNzQsIDczLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgMjExLCA4MCwgNzksIAorICAgIDczLCA3OCwgODQsIDc5LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNjksIDgyLCAxMjgsIDgwLCA3OSwgNzMsIDc4LCA4NCwgCisgICAgNjksIDE5NiwgODAsIDc5LCA3MywgNzgsIDg0LCAxMjgsIDgwLCA3OSwgNzMsIDc4LCAyMTIsIDgwLCA3OSwgNjksIDg0LCAKKyAgICA4MiwgMjE3LCA4MCwgNzksIDY5LCA4NCwgNzMsIDE5NSwgODAsIDc5LCA2OCwgNjUsIDg0LCA4NSwgODMsIDEyOCwgODAsIAorICAgIDc5LCA2NSwgMTI4LCA4MCwgNzksIDEyOCwgODAsIDIwNywgODAsIDc4LCA2OSwgODUsIDc3LCA2NSwgODQsIDY1LCAxMjgsIAorICAgIDgwLCA3NiwgODUsIDg0LCA3OSwgMTI4LCA4MCwgNzYsIDg1LCA4MywgNDUsIDc3LCA3MywgNzgsIDg1LCAyMTEsIDgwLCA3NiwgCisgICAgODUsIDgzLCAxMjgsIDgwLCA3NiwgODUsIDgyLCA2NSwgNzYsIDEyOCwgODAsIDc2LCA4NSwgNzcsIDY5LCAxOTYsIDgwLCAKKyAgICA3NiwgODUsIDc3LCAxMjgsIDgwLCA3NiwgODUsIDc1LCAxMjgsIDgwLCA3NiwgODUsIDcxLCAxMjgsIDgwLCA3NiwgODUsIAorICAgIDEyOCwgODAsIDc2LCA3OSwgODcsIDEyOCwgODAsIDc2LCA3OSwgODAsIDcyLCA4NSwgMTI4LCA4MCwgNzYsIDY5LCA4NCwgCisgICAgNzIsIDgyLCA3OSwgNzgsIDEyOCwgODAsIDc2LCA2OCwgMTI4LCA4MCwgNzYsIDY1LCA4OSwgNzMsIDc4LCAxOTksIDgwLCAKKyAgICA3NiwgNjUsIDgzLCA4NCwgNzMsIDY3LCA4MywgMTI4LCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgODAsIDc2LCA2NSwgNzgsIAorICAgIDE5NywgODAsIDc2LCA2NSwgNzgsIDY3LCAyMDMsIDgwLCA3NiwgNjUsIDc1LCAxMjgsIDgwLCA3NiwgNjUsIDcxLCA3MywgCisgICAgNzksIDIxMSwgODAsIDc2LCA2NSwgNjcsIDY5LCA3MiwgNzksIDc2LCA2OCwgNjksIDIxMCwgODAsIDc2LCA2NSwgNjcsIAorICAgIDE5NywgODAsIDc2LCA2NSwgMTI4LCA4MCwgNzMsIDkwLCA5MCwgNzMsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDgwLCA3MywgCisgICAgOTAsIDkwLCA2NSwgMTI4LCA4MCwgNzMsIDg4LCAxMjgsIDgwLCA3MywgODcsIDgyLCAxMjgsIDgwLCA3MywgODQsIDY3LCAKKyAgICA3MiwgNzAsIDc5LCA4MiwgNzUsIDEyOCwgODAsIDczLCA4NCwgNjcsIDcyLCA3MCwgNzksIDgyLCAyMDMsIDgwLCA3MywgODQsIAorICAgIDEyOCwgODAsIDczLCA4MywgODQsIDc5LCA3NiwgMTI4LCA4MCwgNzMsIDgzLCA2OSwgNzYsIDY5LCA3MiwgMTI4LCA4MCwgCisgICAgNzMsIDgzLCA2NywgNjksIDgzLCAxMjgsIDgwLCA3MywgODIsIDczLCA3MSwgMTI4LCA4MCwgNzMsIDgyLCA3MywgMTk5LCAKKyAgICA4MCwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgMTI4LCA4MCwgNzMsIDgwLCA3MywgNzgsIDcxLCAxMjgsIDgwLCA3MywgODAsIAorICAgIDY1LCA2OSwgNzcsIDcxLCA2NiwgNzMsIDY5LCA2OSwgMTI4LCA4MCwgNzMsIDgwLCA2NSwgNjksIDc3LCA2NiwgNjUsIDEyOCwgCisgICAgODAsIDczLCA4MCwgMTI4LCA4MCwgNzMsIDc4LCA4NywgNzIsIDY5LCA2OSwgMjA0LCA4MCwgNzMsIDc4LCA2OSwgNjUsIDgwLCAKKyAgICA4MCwgNzYsIDY5LCAxMjgsIDgwLCA3MywgNzgsIDE5NywgODAsIDczLCA3OCwgNjUsIDgyLCA2NiwgNzksIDgyLCA2NSwgODMsIAorICAgIDEyOCwgODAsIDczLCA3NiwgNzYsIDEyOCwgODAsIDczLCA3NiwgMTk3LCA4MCwgNzMsIDc2LCA2NywgODIsIDc5LCAyMTUsIAorICAgIDgwLCA3MywgNzUsIDg1LCA4MiwgODUsIDEyOCwgODAsIDczLCA3NSwgNzksIDEyOCwgODAsIDczLCA3MSwgMTI4LCA4MCwgCisgICAgNzMsIDE5OSwgODAsIDczLCA2OSwgODgsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCAKKyAgICA4NCwgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA4MywgNzMsIDc5LCA4MywgCisgICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA4NCwgNzIsIDczLCA2OSwgODUsIDg0LCAKKyAgICA3MiwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgCisgICAgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIAorICAgIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIDEyOCwgCisgICAgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCA0NSwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgCisgICAgNzIsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDgwLCA3MywgNjksIDg1LCAKKyAgICA4MCwgNDUsIDc4LCA3MywgNjksIDg1LCA3OCwgMTI4LCA4MCwgNzMsIDY5LCA4NSwgODAsIDQ1LCA3NywgNzMsIDY5LCA4NSwgCisgICAgNzcsIDEyOCwgODAsIDczLCA2OSwgODUsIDgwLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgODAsIDczLCAKKyAgICA2OSwgODUsIDgwLCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDY3LCA3MiwgCisgICAgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDgwLCA3MywgNjksIDg1LCAyMDgsIDgwLCA3MywgNjksIDg0LCAxMjgsIDgwLCAKKyAgICA3MywgNjksIDgwLCAxMjgsIDgwLCA3MywgNjksIDY5LCA4NCwgMTI4LCA4MCwgNzMsIDY5LCA2OSwgODEsIDEyOCwgODAsIAorICAgIDczLCA2OSwgNjcsIDY5LCAxMjgsIDgwLCA3MywgNjksIDEyOCwgODAsIDczLCA2NywgNzUsIDY5LCA4NCwgMTI4LCA4MCwgCisgICAgNzMsIDY3LCA3NSwgMTI4LCA4MCwgNzMsIDY1LCA4MywgODUsIDg0LCA3OSwgODIsIDg1LCAxMjgsIDgwLCA3MywgNjUsIDgzLCAKKyAgICA3NywgMTkzLCA4MCwgNzMsIDY1LCA3OCwgNzksIDEyOCwgODAsIDIwMSwgODAsIDcyLCA4NywgNjUsIDEyOCwgODAsIDcyLCAKKyAgICA4NSwgODQsIDcyLCA2NSwgNzksIDEyOCwgODAsIDcyLCA4NSwgMjEwLCA4MCwgNzIsIDg1LCA3OCwgNzEsIDEyOCwgODAsIAorICAgIDcyLCA4MiwgNjUsIDgzLCA2OSwgMTI4LCA4MCwgNzIsIDc5LCA3OCwgNjksIDgzLCAxMjgsIDgwLCA3MiwgNzksIDY5LCA3OCwgCisgICAgNzMsIDY3LCA3MywgNjUsIDIwNiwgODAsIDcyLCA3OSwgNjUsIDEyOCwgODAsIDcyLCA3OSwgMTI4LCA4MCwgNzIsIDIwNywgCisgICAgODAsIDcyLCA3OCwgNjUsIDY5LCAyMDMsIDgwLCA3MiwgNzMsIDc4LCA4NCwgNzIsIDg1LCAxMjgsIDgwLCA3MiwgNzMsIDc2LCAKKyAgICA3OSwgODMsIDc5LCA4MCwgNzIsIDY5LCA4MiwgMjExLCA4MCwgNzIsIDczLCA3NiwgNzMsIDgwLCA4MCwgNzMsIDc4LCAxOTcsIAorICAgIDgwLCA3MiwgNzMsIDY5LCA4NSwgODAsIDcyLCA0NSwgODQsIDcyLCA3MywgNjksIDg1LCA4NCwgNzIsIDEyOCwgODAsIDcyLCAKKyAgICA3MywgNjksIDg1LCA4MCwgNzIsIDQ1LCA4MywgNzMsIDc5LCA4MywgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgCisgICAgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCA3MiwgNDUsIDcyLCA3MywgNjksIAorICAgIDg1LCA3MiwgMTI4LCA4MCwgNzIsIDczLCA2OSwgODUsIDgwLCAyMDAsIDgwLCA3MiwgNzMsIDEyOCwgODAsIDcyLCAyMDEsIAorICAgIDgwLCA3MiwgNjksIDY5LCAxMjgsIDgwLCA3MiwgNjksIDEyOCwgODAsIDcyLCA2NSwgODMsIDY5LCA0NSwgMTk4LCA4MCwgCisgICAgNzIsIDY1LCA4MywgNjksIDQ1LCAxOTQsIDgwLCA3MiwgNjUsIDgyLCA4OSwgNzgsIDcxLCA2OSwgNjUsIDIwNCwgODAsIDcyLCAKKyAgICA2NSwgODIsIDEyOCwgODAsIDcyLCA2NSwgNzgsIDEyOCwgODAsIDcyLCA2NSwgNzcsIDEyOCwgODAsIDcyLCA2NSwgNzMsIAorICAgIDgzLCA4NCwgNzksIDIxMSwgODAsIDcyLCA2NSwgNzEsIDgzLCA0NSwgODAsIDE5MywgODAsIDcyLCA2NSwgNjUsIDgyLCA3NSwgCisgICAgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDY1LCAxMjgsIDgwLCA3MiwgNjUsIDEyOCwgODAsIDcxLCAxMjgsIDgwLCA3MCwgCisgICAgMTI4LCA4MCwgNjksIDg1LCA4OCwgMTI4LCA4MCwgNjksIDg1LCA4NCwgNjUsIDY5LCAxMjgsIDgwLCA2OSwgODUsIDg0LCAKKyAgICAxMjgsIDgwLCA2OSwgODQsIDY1LCA4MywgODQsIDc5LCA3NSwgNzksIDg1LCA3MCwgNzMsIDgzLCA3NywgNjUsIDEyOCwgODAsIAorICAgIDY5LCA4NCwgNjUsIDgzLCA4NCwgNzMsIDEyOCwgODAsIDY5LCA4NCwgNjUsIDgzLCA3NywgNjUsIDEyOCwgODAsIDY5LCA4NCwgCisgICAgNjUsIDc2LCA3NiwgNjksIDE5NiwgODAsIDY5LCA4MywgNzksIDEyOCwgODAsIDY5LCA4MywgMjA3LCA4MCwgNjksIDgzLCAKKyAgICA3MiwgNTAsIDEyOCwgODAsIDY5LCA4MywgNjksIDg0LCAxOTMsIDgwLCA2OSwgMjExLCA4MCwgNjksIDgyLCA4NCwgNzIsIAorICAgIDIwNywgODAsIDY5LCA4MiwgODMsIDgwLCA2OSwgNjcsIDg0LCA3MywgODYsIDY5LCAxMjgsIDgwLCA2OSwgODIsIDgzLCA3OSwgCisgICAgNzgsIDY1LCAyMDQsIDgwLCA2OSwgODIsIDgzLCA3OSwgNzgsIDEyOCwgODAsIDY5LCA4MiwgODMsIDc5LCAyMDYsIDgwLCAKKyAgICA2OSwgODIsIDgzLCA3MywgNjUsIDIwNiwgODAsIDY5LCA4MiwgODMsIDY5LCA4NiwgNjksIDgyLCA3MywgNzgsIDE5OSwgODAsIAorICAgIDY5LCA4MiwgODAsIDY5LCA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgODIsIDEyOCwgODAsIDY5LCA4MiwgODAsIDY5LCAKKyAgICA3OCwgNjgsIDczLCA2NywgODUsIDc2LCA2NSwgMjEwLCA4MCwgNjksIDgyLCA3NywgNzMsIDg0LCA4NCwgNjksIDE5NiwgODAsIAorICAgIDY5LCA4MiwgNzcsIDY1LCA3OCwgNjksIDc4LCAyMTIsIDgwLCA2OSwgODIsIDczLCA4MywgODAsIDc5LCA3NywgNjksIDc4LCAKKyAgICA3MywgMTI4LCA4MCwgNjksIDgyLCA3MywgODMsIDgwLCA3OSwgNzcsIDY5LCA3OCwgMjAxLCA4MCwgNjksIDgyLCA3MCwgNzksIAorICAgIDgyLCA3NywgNzMsIDc4LCAxOTksIDgwLCA2OSwgODIsIDcwLCA2OSwgNjcsIDg0LCA4NSwgMjA1LCA4MCwgNjksIDgyLCA3MCwgCisgICAgNjksIDY3LCA4NCwgNjUsIDEyOCwgODAsIDY5LCA4MiwgNzAsIDY5LCA2NywgODQsIDE5MywgODAsIDY5LCA4MiwgNjcsIDg1LCAKKyAgICA4MywgODMsIDczLCA4NiwgNjksIDEyOCwgODAsIDY5LCA4MiwgNjcsIDY5LCA3OCwgMjEyLCA4MCwgNjksIDgwLCA2OSwgODQsIAorICAgIDEyOCwgODAsIDY5LCA4MCwgNjksIDIxMiwgODAsIDY5LCA3OSwgODIsIDg0LCAyMDAsIDgwLCA2OSwgNzksIDgwLCA3NiwgCisgICAgNjksIDEyOCwgODAsIDY5LCA3OCwgODQsIDY1LCA4MywgNjksIDc3LCA2OSwgMTI4LCA4MCwgNjksIDc4LCA4NCwgNjUsIDcxLCAKKyAgICA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2OSwgNzgsIDg0LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA4MywgODUsIAorICAgIDEyOCwgODAsIDY5LCA3OCwgODMsIDczLCA4NiwgMTk3LCA4MCwgNjksIDc4LCA3OCwgMjE3LCA4MCwgNjksIDc4LCA3MywgCisgICAgNzIsIDczLCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA4NSwgNzMsIDc4LCAxMjgsIDgwLCA2OSwgNzgsIDcxLCA3NSwgNjUsIDc2LCAKKyAgICAxMjgsIDgwLCA2OSwgNzgsIDY5LCA4NCwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc4LCA2NywgNzMsIAorICAgIDc2LCAxMjgsIDgwLCA2OSwgNzYsIDY1LCA4MywgODQsIDc5LCA3OCwgMTI4LCA4MCwgNjksIDc2LCA2NSwgODMsIDg0LCA3OSwgCisgICAgMjA2LCA4MCwgNjksIDczLCA4NCwgNzIsIDEyOCwgODAsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDgwLCA2OSwgNzIsIDY5LCAKKyAgICAyMDAsIDgwLCA2OSwgNzIsIDEyOCwgODAsIDY5LCAyMDAsIDgwLCA2OSwgNjksIDkwLCA3MywgMTI4LCA4MCwgNjksIDY5LCAKKyAgICA4MywgNzIsIDczLCAxMjgsIDgwLCA2OSwgNjksIDgwLCAxMjgsIDgwLCA2OSwgNjksIDc3LCAxMjgsIDgwLCA2OSwgNjksIAorICAgIDEyOCwgODAsIDY5LCA2OCwgNjksIDgzLCA4NCwgODIsIDczLCA2NSwgNzgsIDgzLCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgCisgICAgODQsIDgyLCA3MywgNjUsIDc4LCAxMjgsIDgwLCA2OSwgNjgsIDY5LCA4MywgODQsIDY1LCA3NiwgMTI4LCA4MCwgNjksIDY4LCAKKyAgICA2OSwgODMsIDg0LCA2NSwgMjA0LCA4MCwgNjksIDY4LCA2NSwgMjA0LCA4MCwgNjksIDY1LCA2NywgNzIsIDEyOCwgODAsIAorICAgIDY5LCA2NSwgNjcsIDY5LCAxMjgsIDgwLCA2OSwgNjUsIDY3LCAxOTcsIDgwLCA2OCwgNzMsIDEyOCwgODAsIDY4LCA3MCwgCisgICAgMTI4LCA4MCwgNjgsIDEyOCwgODAsIDY3LCAxMjgsIDgwLCA2NSwgOTAsIDY5LCA4MiwgMTI4LCA4MCwgNjUsIDg5LCA2OSwgCisgICAgODIsIDc5LCA3NSwgMTI4LCA4MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA4MCwgNjUsIDg5LCAxMjgsIDgwLCAKKyAgICA2NSwgODgsIDEyOCwgODAsIDY1LCA4NywgNzgsIDEyOCwgODAsIDY1LCAyMTUsIDgwLCA2NSwgODYsIDczLCA4OSwgNjUsIAorICAgIDc4LCA3MywgMTI4LCA4MCwgNjUsIDg1LCAxMjgsIDgwLCA2NSwgODQsIDg0LCA2OSwgODIsIDc4LCAxMjgsIDgwLCA2NSwgCisgICAgODQsIDcyLCA2NSwgNzcsIDY1LCA4MywgNjUsIDg0LCAxMjgsIDgwLCA2NSwgODQsIDIwMCwgODAsIDY1LCA4NCwgNjUsIDc1LCAKKyAgICAxMjgsIDgwLCA2NSwgODQsIDY1LCA3MiwgMTI4LCA4MCwgNjUsIDg0LCAxMjgsIDgwLCA2NSwgODMsIDg1LCA4MSwgMTI4LCAKKyAgICA4MCwgNjUsIDgzLCA4MywgODAsIDc5LCA4MiwgMjEyLCA4MCwgNjUsIDgzLCA4MywgNzMsIDg2LCA2OSwgNDUsIDgwLCA4NSwgCisgICAgNzYsIDc2LCA0NSwgODUsIDgwLCA0NSwgNzksIDg1LCA4NCwgODAsIDg1LCAyMTIsIDgwLCA2NSwgODMsIDgzLCA3MywgODYsIAorICAgIDY5LCA0NSwgODAsIDg1LCA3NiwgNzYsIDQ1LCA2OCwgNzksIDg3LCA3OCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCAKKyAgICA4MCwgNjUsIDgzLCA3MiwgODQsIDY1LCAxMjgsIDgwLCA2NSwgODMsIDcyLCA2NSwgNjksIDEyOCwgODAsIDY1LCA4MywgNjksIAorICAgIDgxLCAxMjgsIDgwLCA2NSwgODMsIDY1LCA3OCwgNzEsIDY1LCAyMDYsIDgwLCA2NSwgODIsIDg1LCA3NywgMTI4LCA4MCwgCisgICAgNjUsIDgyLCA4NCwgMjE3LCA4MCwgNjUsIDgyLCA4NCwgNzgsIDY5LCA4MiwgODMsIDcyLCA3MywgMjA4LCA4MCwgNjUsIDgyLCAKKyAgICA4NCwgNzMsIDY1LCA3NiwgNzYsIDg5LCA0NSwgODIsIDY5LCA2NywgODksIDY3LCA3NiwgNjksIDE5NiwgODAsIDY1LCA4MiwgCisgICAgODQsIDczLCA2NSwgMjA0LCA4MCwgNjUsIDgyLCA4NCwgNzIsIDczLCA2NSwgMjA2LCA4MCwgNjUsIDgyLCAyMTIsIDgwLCAKKyAgICA2NSwgODIsIDczLCA2NywgNzIsIDc5LCA3OCwgMTI4LCA4MCwgNjUsIDgyLCA2OSwgODMsIDg0LCA3MywgNzEsIDc3LCA2OSwgCisgICAgNzgsIDc5LCAyMDYsIDgwLCA2NSwgODIsIDY5LCA4MiwgNjksIDc4LCAxMjgsIDgwLCA2NSwgODIsIDY5LCA3OCwgODQsIDcyLCAKKyAgICA2OSwgODMsIDczLCA4MywgMTI4LCA4MCwgNjUsIDgyLCA2OSwgNzgsIDg0LCA3MiwgNjksIDgzLCA3MywgMjExLCA4MCwgNjUsIAorICAgIDgyLCA2NSwgODAsIDcyLCA4MiwgNjUsIDgzLCAxOTcsIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCA3NiwgNzksIDcxLCAKKyAgICA4MiwgNjUsIDc3LCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3NiwgNzYsIDY5LCA3NiwgMTI4LCA4MCwgNjUsIDgyLCA2NSwgNzYsIAorICAgIDc2LCA2OSwgMjA0LCA4MCwgNjUsIDgyLCA2NSwgNzUsIDc2LCA3MywgODQsIDczLCA3NSwgNzMsIDEyOCwgODAsIDY1LCA4MiwgCisgICAgNjUsIDc1LCA3NiwgNzMsIDg0LCA3MywgNzUsIDIwMSwgODAsIDY1LCA4MiwgNjUsIDc1LCA2NSwgNzYsIDY5LCA4MywgNzcsIAorICAgIDE5MywgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzksIDgzLCAxMjgsIDgwLCA2NSwgODIsIDY1LCA3MSwgCisgICAgODIsIDY1LCA4MCwgNzIsIDEyOCwgODAsIDY1LCA4MiwgNjUsIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDgwLCA2NSwgODIsIDY1LCAKKyAgICAxMjgsIDgwLCA2NSwgODIsIDEyOCwgODAsIDY1LCA4MCwgODksIDgyLCA4NSwgODMsIDEyOCwgODAsIDY1LCA4MCwgNjksIAorICAgIDgyLCA2NywgNzYsIDczLCA4MCwgMTI4LCA4MCwgNjUsIDgwLCA2OSwgMjEwLCA4MCwgNjUsIDgwLCAxMjgsIDgwLCA2NSwgCisgICAgMjA4LCA4MCwgNjUsIDIwNywgODAsIDY1LCA3OCwgODksIDg1LCA3NSwgODUsIDEyOCwgODAsIDY1LCA3OCwgODksIDczLCAKKyAgICA3NSwgODUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY5LCA2NywgNjksIDc1LCAxMjgsIDgwLCA2NSwgNzgsIDg5LCA2NSwgNzgsIAorICAgIDcxLCA3MSwgNjUsIDEyOCwgODAsIDY1LCA3OCwgODksIDY1LCA3NSwgODIsIDY1LCAxMjgsIDgwLCA2NSwgNzgsIDg0LCA3MywgCisgICAgMTI4LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCAKKyAgICA4MywgNzMsIDc5LCA4MywgNDUsIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODAsIDczLCA2OSwgODUsIDgwLCAKKyAgICAxMjgsIDgwLCA2NSwgNzgsIDc5LCA3OCwgNzEsIDc5LCA3OCwgNjUsIDc4LCAxMjgsIDgwLCA2NSwgNzgsIDc5LCA3NiwgNzksIAorICAgIDc4LCA3MSwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgODcsIDczLCA4MywgNjUsIDY4LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA4MiwgCisgICAgNjUsIDc4LCA3MSwgNzUsIDY5LCA4MCwgMTI4LCA4MCwgNjUsIDc4LCA3MSwgNzksIDc2LCA2NSwgODQsIDEyOCwgODAsIDY1LCAKKyAgICA3OCwgNzEsIDc2LCA3OSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDcxLCA3NiwgNjUsIDg5LCA2NSwgODIsIDEyOCwgODAsIAorICAgIDY1LCA3OCwgNzEsIDc1LCA3OSwgNzgsIDEyOCwgODAsIDY1LCA3OCwgNzEsIDc1LCA2NSwgODQsIDEyOCwgODAsIDY1LCA3OCwgCisgICAgNzEsIDcyLCA4NSwgNzYsIDg1LCAxMjgsIDgwLCA2NSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY5LCA4NSwgNzYsIDY5LCAKKyAgICA4NSwgNzgsIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDY4LCAxOTMsIDgwLCA2NSwgNzgsIDY1LCA2OSwgNzYsIDY1LCA2OSwgNzgsIAorICAgIDcxLCAxMjgsIDgwLCA2NSwgNzgsIDEyOCwgODAsIDY1LCA3NywgODUsIDc4LCA3MSwgNzUsIDY1LCA3MiwgMTI4LCA4MCwgCisgICAgNjUsIDc3LCA4NSwgNjgsIDgwLCA3OSwgNjgsIDEyOCwgODAsIDY1LCA3NywgODMsIDcyLCA2NSwgNjksIDEyOCwgODAsIDY1LCAKKyAgICA3NywgODAsIDcyLCA4OSwgNzYsIDczLCA2NSwgMjA2LCA4MCwgNjUsIDc3LCA3MywgNzgsIDcxLCA3NSwgNjUsIDc2LCAxMjgsIAorICAgIDgwLCA2NSwgNzcsIDY5LCA4MCwgNjksIDg0LCAxMjgsIDgwLCA2NSwgNzcsIDY5LCA3OCwgNjksIDc4LCA3MSwgMTI4LCA4MCwgCisgICAgNjUsIDc3LCA2NSwgNjgsIDY1LCAxMjgsIDgwLCA2NSwgNzcsIDY1LCA2NSwgNjksIDcyLCAxMjgsIDgwLCA2NSwgNzYsIDg1LCAKKyAgICA4NCwgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzksIDY3LCA3MiwgNzUsIDY1LCAxMjgsIDgwLCA2NSwgNzYsIDIwNSwgODAsIAorICAgIDY1LCA3NiwgNzYsIDY1LCA4NywgNjUsIDEyOCwgODAsIDY1LCA3NiwgNzYsIDY1LCA4MywgMTI4LCA4MCwgNjUsIDc2LCA2OSwgCisgICAgODQsIDg0LCA2OSwgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODUsIDc4LCAxOTksIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCAKKyAgICA3MywgOTAsIDY5LCAxOTYsIDgwLCA2NSwgNzYsIDY1LCA4NCwgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA4MCwgNjUsIDc2LCA2NSwgODQsIDY1LCAyMDQsIDgwLCA2NSwgNzUsIDgwLCA2NSwgMjAzLCA4MCwgNjUsIDczLCAKKyAgICA4OSwgNjUsIDc4LCA3OCwgNzksIDczLCAxMjgsIDgwLCA2NSwgNzMsIDgyLCA4NCwgNzIsIDgyLCA2NSwgMTI4LCA4MCwgNjUsIAorICAgIDczLCA4MiwgNjksIDE5NiwgODAsIDY1LCA3MywgMTI4LCA4MCwgNjUsIDcyLCA3NiwgNjUsIDg2LCAyMDEsIDgwLCA2NSwgCisgICAgNzIsIDEyOCwgODAsIDY1LCA3MSwgNjksIDgyLCAxMjgsIDgwLCA2NSwgNzEsIDE5NywgODAsIDY1LCA2OCwgNzcsIDE5MywgCisgICAgODAsIDY1LCA2OCwgNjgsIDczLCA3OCwgMTk5LCA4MCwgNjUsIDY4LCAxOTMsIDgwLCA2NSwgNjgsIDEyOCwgODAsIDY1LCAKKyAgICA2NywgNzUsIDczLCA3OCwgNzEsIDEyOCwgODAsIDY1LCA2NywgNzUsIDY1LCA3MSwgNjksIDEyOCwgODAsIDY1LCA2NSwgODQsIAorICAgIDg1LCAxMjgsIDgwLCA2NSwgNjUsIDgzLCA2OSwgNzgsIDg0LCA3OSwgMTI4LCA4MCwgNjUsIDY1LCA4MiwgNjUsIDY5LCAKKyAgICAxMjgsIDgwLCA2NSwgNjUsIDc3LCAxMjgsIDgwLCA2NSwgNjUsIDczLCAxMjgsIDgwLCA2NSwgNjUsIDQ1LCA4MCwgNzMsIAorICAgIDc2LCA3NiwgNjUsIDEyOCwgODAsIDY1LCA2NSwgMTI4LCA4MCwgNTAsIDEyOCwgODAsIDQ4LCA0OSwgNDksIDEyOCwgODAsIAorICAgIDQ4LCA0OSwgNDgsIDEyOCwgODAsIDQ4LCA0OCwgNTcsIDEyOCwgODAsIDQ4LCA0OCwgNTYsIDEyOCwgODAsIDQ4LCA0OCwgCisgICAgNTUsIDEyOCwgODAsIDQ4LCA0OCwgNTQsIDEyOCwgODAsIDQ4LCA0OCwgNTMsIDEyOCwgODAsIDQ4LCA0OCwgNTIsIDEyOCwgCisgICAgODAsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIDgwLCA0OCwgNDgsIDUxLCAxMjgsIDgwLCA0OCwgNDgsIDUwLCAxMjgsIDgwLCAKKyAgICA0OCwgNDgsIDQ5LCA2NSwgMTI4LCA4MCwgNDgsIDQ4LCA0OSwgMTI4LCA3OSwgODksIDgyLCA2NSwgNzgsIDczLCA4MywgNzcsIAorICAgIDE5MywgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgODgsIDczLCA2NSwgMTI4LCA3OSwgODgsIDczLCAxOTMsIAorICAgIDc5LCA4OCwgNjksIDczLCA2NSwgMjAxLCA3OSwgODgsIDY5LCA3MywgMTkzLCA3OSwgODYsIDY5LCA4MiwgODIsIDczLCA2OCwgCisgICAgNjksIDEyOCwgNzksIDg2LCA2OSwgODIsIDc2LCA3OSwgNzgsIDE5OSwgNzksIDg2LCA2OSwgODIsIDc2LCA3MywgNzgsIDY5LCAKKyAgICAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDg5LCAxMjgsIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDgwLCA4MCwgNzMsIAorICAgIDc4LCAxOTksIDc5LCA4NiwgNjksIDgyLCA3NiwgNjUsIDczLCA2OCwgMTI4LCA3OSwgODYsIDY5LCA4MiwgNjYsIDY1LCA4MiwgCisgICAgMTI4LCA3OSwgODYsIDY1LCAyMDQsIDc5LCA4NiwgMTI4LCA3OSwgODUsIDg0LCA3NiwgNzMsIDc4LCA2OSwgMTk2LCA3OSwgCisgICAgODUsIDg0LCA3NiwgNzMsIDc4LCA2OSwgMTI4LCA3OSwgODUsIDg0LCA2OSwgMjEwLCA3OSwgODUsIDg0LCA2NiwgNzksIAorICAgIDIxNiwgNzksIDg1LCA3OCwgNzUsIDczLCAxOTMsIDc5LCA4NSwgNzgsIDY3LCA2OSwgMTI4LCA3OSwgODUsIDc4LCA2NywgCisgICAgMTk3LCA3OSwgODQsIDg1LCAxMjgsIDc5LCA4NCwgODQsIDY1LCA4NiwgMTkzLCA3OSwgODQsIDg0LCAxMjgsIDc5LCA4NCwgCisgICAgNzIsIDY1LCA3NiwgNjUsIDIwNiwgNzksIDg0LCA3MiwgNjUsIDc2LCAxMjgsIDc5LCA4MywgNzcsIDY1LCA3OCwgODksIAorICAgIDE5MywgNzksIDgzLCA2NywgMTI4LCA3OSwgODIsIDg0LCA3MiwgNzksIDcxLCA3OSwgNzgsIDY1LCAyMDQsIDc5LCA4MiwgCisgICAgODQsIDcyLCA3OSwgNjgsIDc5LCAyMTYsIDc5LCA4MiwgNzgsIDY1LCA4NCwgMTk3LCA3OSwgODIsIDc4LCA2NSwgNzcsIDY5LCAKKyAgICA3OCwgODQsIDEyOCwgNzksIDgyLCA3OCwgNjUsIDc3LCA2OSwgNzgsIDIxMiwgNzksIDgyLCA3NSwgNzIsIDc5LCAyMDYsIAorICAgIDc5LCA4MiwgNzMsIDcxLCA3MywgNzgsIDY1LCAyMDQsIDc5LCA4MiwgNzMsIDcxLCA3MywgNzgsIDEyOCwgNzksIDgyLCA2OSwgCisgICAgNDUsIDUwLCAxMjgsIDc5LCA4MiwgNjgsIDczLCA3OCwgNjUsIDIwNCwgNzksIDgyLCA2OCwgNjksIDIxMCwgNzksIDgyLCAKKyAgICA2NywgNzIsIDczLCA2OCwgMTI4LCA3OSwgODIsIDY1LCA3OCwgNzEsIDE5NywgNzksIDgwLCA4NCwgNzMsIDc5LCAyMDYsIAorICAgIDc5LCA4MCwgODQsIDczLCA2NywgNjUsIDIwNCwgNzksIDgwLCA4MCwgODIsIDY5LCA4MywgODMsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgODQsIDczLCA3OSwgNzgsIDEyOCwgNzksIDgwLCA4MCwgNzksIDgzLCA3MywgNzgsIAorICAgIDE5OSwgNzksIDgwLCA4MCwgNzksIDgzLCA2OSwgMTI4LCA3OSwgODAsIDcyLCA3MywgODUsIDY3LCA3MiwgODUsIDgzLCAKKyAgICAxMjgsIDc5LCA4MCwgNjksIDgyLCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3OSwgCisgICAgMjEwLCA3OSwgODAsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzgsIDE5OSwgNzksIDgwLCA2OSwgNzgsIDczLCA3OCwgMTk5LCAKKyAgICA3OSwgODAsIDY5LCA3OCwgNDUsIDgwLCAxMjgsIDc5LCA4MCwgNjksIDc4LCA0NSwgNzksIDg1LCA4NCwgNzYsIDczLCA3OCwgCisgICAgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCA3MiwgNjksIDY1LCA2OCwgNjksIDE5NiwgNzksIDgwLCA2OSwgNzgsIDQ1LCAKKyAgICA2NywgNzMsIDgyLCA2NywgODUsIDczLCA4NCwgNDUsIDc5LCA4NSwgODQsIDgwLCA4NSwgMjEyLCA3OSwgNzksIDkwLCA2OSwgCisgICAgMTI4LCA3OSwgNzksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3OSwgNzksIDg1LCAxMjgsIDc5LCA3OSwgNzcsIDg1LCAKKyAgICAxMjgsIDc5LCA3OSwgNjksIDEyOCwgNzksIDc5LCA2NiwgNzksIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA3OSwgNzgsIAorICAgIDg1LCAxMjgsIDc5LCA3OCwgODMsIDg1LCAxMjgsIDc5LCA3OCwgNzgsIDEyOCwgNzksIDc4LCA3NSwgNjUsIDgyLCAxMjgsIAorICAgIDc5LCA3OCwgNjksIDgzLCA2OSwgNzYsIDcwLCAxMjgsIDc5LCA3OCwgNjksIDQ1LCA4NywgNjUsIDIxNywgNzksIDc4LCA2OSwgCisgICAgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzksIDc4LCA2OSwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzksIDc4LCAKKyAgICA2NywgNzksIDc3LCA3MywgNzgsIDE5OSwgNzksIDc4LCA2NSwgODAsIDEyOCwgNzksIDc3LCA3MywgODMsIDgzLCA3MywgNzksIAorICAgIDIwNiwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzksIDc3LCA3MywgNjcsIDgyLCA3OSwgMjA2LCA3OSwgCisgICAgNzcsIDY5LCA3MSwgNjUsIDEyOCwgNzksIDc3LCA2OSwgNzEsIDE5MywgNzksIDc3LCA2NSwgNzYsIDc5LCA3OCwgMTI4LCAKKyAgICA3OSwgNzYsIDczLCA4NiwgNjksIDEyOCwgNzksIDc2LCA3MywgNzEsIDc5LCAyMDYsIDc5LCA3NiwgNjgsIDEyOCwgNzksIAorICAgIDc1LCA4NCwgMjA3LCA3OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzksIDc1LCA2NSwgODIsIDE5MywgNzksIDc0LCA3MywgCisgICAgNjYsIDg3LCA2NSwgMjE3LCA3OSwgNzQsIDY5LCA3OSwgNzgsIDEyOCwgNzksIDczLCA3NiwgMTI4LCA3OSwgNzIsIDc3LCAKKyAgICAxMjgsIDc5LCA3MiwgMjA1LCA3OSwgNzEsIDgyLCA2OSwgMTI4LCA3OSwgNzEsIDc5LCA3OCwgNjksIDc1LCAxMjgsIDc5LCAKKyAgICA3MSwgNzksIDc4LCA2OSwgMjAzLCA3OSwgNzEsIDcyLCA2NSwgMjA1LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCA4MiwgCisgICAgMTI4LCA3OSwgNzAsIDcwLCA3MywgNjcsIDY5LCAxMjgsIDc5LCA3MCwgNzAsIDczLCA2NywgMTk3LCA3OSwgNzAsIDcwLCAKKyAgICAxMjgsIDc5LCA2OSwgODksIDEyOCwgNzksIDY5LCA3NSwgMTI4LCA3OSwgNjgsIDY5LCA3OCwgMTI4LCA3OSwgNjgsIDE5NiwgCisgICAgNzksIDY3LCA4NCwgNzksIDgwLCA4NSwgODMsIDEyOCwgNzksIDY3LCA4NCwgNzksIDY2LCA2OSwgODIsIDEyOCwgNzksIDY3LCAKKyAgICA4NCwgNjksIDIxMiwgNzksIDY3LCAyMTAsIDc5LCA2NywgNzYsIDc5LCA2NywgNzUsIDEyOCwgNzksIDY3LCA2NywgNzYsIAorICAgIDg1LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA3OSwgNjYsIDgzLCA4NCwgODIsIDg1LCA2NywgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNzksIDY2LCA3OSwgNzYsIDIxMSwgNzksIDY2LCA3OSwgMjA0LCA3OSwgNjYsIDc5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKKyAgICA3OSwgNjYsIDc2LCA3MywgODEsIDg1LCAxOTcsIDc5LCA2NiwgNzQsIDY5LCA2NywgMjEyLCA3OSwgNjYsIDY5LCA3NiwgODUsIAorICAgIDgzLCAxMjgsIDc5LCA2NiwgNjksIDc2LCA3OSwgODMsIDEyOCwgNzksIDY2LCAxMjgsIDc5LCA2NSwgODksIDEyOCwgNzksIAorICAgIDY1LCA3NSwgMTI4LCA3OSwgNjUsIDY2LCA3OSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDc5LCAxOTMsIDc5LCA0OCwgCisgICAgNTMsIDQ5LCAxMjgsIDc5LCA0OCwgNTMsIDQ4LCA2NiwgMTI4LCA3OSwgNDgsIDUzLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA1MywgNDgsIDEyOCwgNzksIDQ4LCA1MiwgNTcsIDEyOCwgNzksIDQ4LCA1MiwgNTYsIDEyOCwgNzksIDQ4LCA1MiwgNTUsIAorICAgIDEyOCwgNzksIDQ4LCA1MiwgNTQsIDEyOCwgNzksIDQ4LCA1MiwgNTMsIDEyOCwgNzksIDQ4LCA1MiwgNTIsIDEyOCwgNzksIAorICAgIDQ4LCA1MiwgNTEsIDEyOCwgNzksIDQ4LCA1MiwgNTAsIDEyOCwgNzksIDQ4LCA1MiwgNDksIDEyOCwgNzksIDQ4LCA1MiwgCisgICAgNDgsIDEyOCwgNzksIDQ4LCA1MSwgNTcsIDEyOCwgNzksIDQ4LCA1MSwgNTYsIDEyOCwgNzksIDQ4LCA1MSwgNTUsIDEyOCwgCisgICAgNzksIDQ4LCA1MSwgNTQsIDY4LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCA2NywgMTI4LCA3OSwgNDgsIDUxLCA1NCwgNjYsIAorICAgIDEyOCwgNzksIDQ4LCA1MSwgNTQsIDY1LCAxMjgsIDc5LCA0OCwgNTEsIDU0LCAxMjgsIDc5LCA0OCwgNTEsIDUzLCAxMjgsIAorICAgIDc5LCA0OCwgNTEsIDUyLCAxMjgsIDc5LCA0OCwgNTEsIDUxLCA2NSwgMTI4LCA3OSwgNDgsIDUxLCA1MSwgMTI4LCA3OSwgCisgICAgNDgsIDUxLCA1MCwgMTI4LCA3OSwgNDgsIDUxLCA0OSwgMTI4LCA3OSwgNDgsIDUxLCA0OCwgNjUsIDEyOCwgNzksIDQ4LCAKKyAgICA1MSwgNDgsIDEyOCwgNzksIDQ4LCA1MCwgNTcsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDU3LCAxMjgsIDc5LCA0OCwgNTAsIAorICAgIDU2LCAxMjgsIDc5LCA0OCwgNTAsIDU1LCAxMjgsIDc5LCA0OCwgNTAsIDU0LCAxMjgsIDc5LCA0OCwgNTAsIDUzLCA2NSwgCisgICAgMTI4LCA3OSwgNDgsIDUwLCA1MywgMTI4LCA3OSwgNDgsIDUwLCA1MiwgNjUsIDEyOCwgNzksIDQ4LCA1MCwgNTIsIDEyOCwgCisgICAgNzksIDQ4LCA1MCwgNTEsIDEyOCwgNzksIDQ4LCA1MCwgNTAsIDEyOCwgNzksIDQ4LCA1MCwgNDksIDEyOCwgNzksIDQ4LCAKKyAgICA1MCwgNDgsIDY1LCAxMjgsIDc5LCA0OCwgNTAsIDQ4LCAxMjgsIDc5LCA0OCwgNDksIDU3LCA2NSwgMTI4LCA3OSwgNDgsIAorICAgIDQ5LCA1NywgMTI4LCA3OSwgNDgsIDQ5LCA1NiwgMTI4LCA3OSwgNDgsIDQ5LCA1NSwgMTI4LCA3OSwgNDgsIDQ5LCA1NCwgCisgICAgMTI4LCA3OSwgNDgsIDQ5LCA1MywgMTI4LCA3OSwgNDgsIDQ5LCA1MiwgMTI4LCA3OSwgNDgsIDQ5LCA1MSwgMTI4LCA3OSwgCisgICAgNDgsIDQ5LCA1MCwgMTI4LCA3OSwgNDgsIDQ5LCA0OSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgNjcsIDEyOCwgNzksIDQ4LCAKKyAgICA0OSwgNDgsIDY2LCAxMjgsIDc5LCA0OCwgNDksIDQ4LCA2NSwgMTI4LCA3OSwgNDgsIDQ5LCA0OCwgMTI4LCA3OSwgNDgsIAorICAgIDQ4LCA1NywgMTI4LCA3OSwgNDgsIDQ4LCA1NiwgMTI4LCA3OSwgNDgsIDQ4LCA1NSwgMTI4LCA3OSwgNDgsIDQ4LCA1NCwgCisgICAgNzAsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY5LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2OCwgMTI4LCA3OSwgNDgsIDQ4LCAKKyAgICA1NCwgNjcsIDEyOCwgNzksIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDc5LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3OSwgNDgsIAorICAgIDQ4LCA1NCwgMTI4LCA3OSwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzksIDQ4LCA0OCwgNTMsIDEyOCwgNzksIDQ4LCA0OCwgCisgICAgNTIsIDEyOCwgNzksIDQ4LCA0OCwgNTEsIDEyOCwgNzksIDQ4LCA0OCwgNTAsIDEyOCwgNzksIDQ4LCA0OCwgNDksIDY1LCAKKyAgICAxMjgsIDc5LCA0OCwgNDgsIDQ5LCAxMjgsIDc5LCA0NSwgODksIDY5LCAxMjgsIDc5LCA0NSwgNzksIDQ1LCA3MywgMTI4LCAKKyAgICA3OSwgNDUsIDY5LCAxMjgsIDc4LCA5MCwgODksIDg4LCAxMjgsIDc4LCA5MCwgODksIDg0LCAxMjgsIDc4LCA5MCwgODksIAorICAgIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg5LCA4MiwgMTI4LCA3OCwgOTAsIDg5LCA4MCwgMTI4LCA3OCwgOTAsIDg5LCAxMjgsIAorICAgIDc4LCA5MCwgODUsIDg4LCAxMjgsIDc4LCA5MCwgODUsIDgyLCA4OCwgMTI4LCA3OCwgOTAsIDg1LCA4MiwgMTI4LCA3OCwgCisgICAgOTAsIDg1LCA4MSwgMTI4LCA3OCwgOTAsIDg1LCA4MCwgMTI4LCA3OCwgOTAsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDkwLCAKKyAgICA4NSwgNzksIDEyOCwgNzgsIDkwLCA4NSwgMjA2LCA3OCwgOTAsIDg1LCAxMjgsIDc4LCA5MCwgNzksIDg4LCAxMjgsIDc4LCAKKyAgICA5MCwgNzksIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDg4LCAxMjgsIDc4LCA5MCwgNzMsIDg0LCAxMjgsIDc4LCA5MCwgNzMsIAorICAgIDgwLCAxMjgsIDc4LCA5MCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDczLCA2OSwgODAsIDEyOCwgNzgsIDkwLCA3MywgCisgICAgNjksIDEyOCwgNzgsIDkwLCA3MywgMTI4LCA3OCwgOTAsIDY5LCA4OCwgMTI4LCA3OCwgOTAsIDY5LCA4NSwgNzcsIDEyOCwgCisgICAgNzgsIDkwLCA2OSwgMTI4LCA3OCwgOTAsIDY1LCA4OCwgMTI4LCA3OCwgOTAsIDY1LCA4NCwgMTI4LCA3OCwgOTAsIDY1LCAKKyAgICA4MSwgMTI4LCA3OCwgOTAsIDY1LCA4MCwgMTI4LCA3OCwgOTAsIDY1LCAxMjgsIDc4LCA5MCwgMTkzLCA3OCwgODksIDg3LCAKKyAgICA2NSwgMTI4LCA3OCwgODksIDg1LCA4OCwgMTI4LCA3OCwgODksIDg1LCA4NSwgMTI4LCA3OCwgODksIDg1LCA4NCwgMTI4LCAKKyAgICA3OCwgODksIDg1LCA4MCwgMTI4LCA3OCwgODksIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg5LCA4NSwgNzksIDgwLCAxMjgsIAorICAgIDc4LCA4OSwgODUsIDc5LCAxMjgsIDc4LCA4OSwgODUsIDY5LCAxMjgsIDc4LCA4OSwgODUsIDEyOCwgNzgsIDg5LCA3OSwgCisgICAgODgsIDEyOCwgNzgsIDg5LCA3OSwgODQsIDEyOCwgNzgsIDg5LCA3OSwgODAsIDEyOCwgNzgsIDg5LCA3OSwgNzksIDEyOCwgCisgICAgNzgsIDg5LCA3OSwgNjUsIDEyOCwgNzgsIDg5LCA3OSwgMTI4LCA3OCwgODksIDc0LCA2NSwgMTI4LCA3OCwgODksIDczLCAKKyAgICA4OCwgMTI4LCA3OCwgODksIDczLCA4NCwgMTI4LCA3OCwgODksIDczLCAyMTIsIDc4LCA4OSwgNzMsIDIxMSwgNzgsIDg5LCAKKyAgICA3MywgMjEwLCA3OCwgODksIDczLCA4MCwgMTI4LCA3OCwgODksIDczLCA3OCwgNDUsIDY4LCA3OSwgMTI4LCA3OCwgODksIAorICAgIDczLCA3MywgMTI4LCA3OCwgODksIDczLCA2OSwgODgsIDEyOCwgNzgsIDg5LCA3MywgNjksIDg0LCAxMjgsIDc4LCA4OSwgCisgICAgNzMsIDY5LCA4MCwgMTI4LCA3OCwgODksIDczLCA2OSwgMTI4LCA3OCwgODksIDczLCAxMjgsIDc4LCA4OSwgMjAxLCA3OCwgCisgICAgODksIDcyLCA2NSwgMTI4LCA3OCwgODksIDY5LCA4NCwgMTI4LCA3OCwgODksIDY5LCAyMTIsIDc4LCA4OSwgNjksIDcyLCAKKyAgICAxMjgsIDc4LCA4OSwgNjksIDIwMCwgNzgsIDg5LCA2OSwgNjksIDEyOCwgNzgsIDg5LCA2OSwgMTI4LCA3OCwgODksIDE5NiwgCisgICAgNzgsIDg5LCA2NywgNjUsIDEyOCwgNzgsIDg5LCA2NSwgODUsIDEyOCwgNzgsIDg5LCA2NSwgNzMsIDEyOCwgNzgsIDg5LCAKKyAgICA2NSwgNzIsIDEyOCwgNzgsIDg5LCA2NSwgNjksIDc3LCA2NSwgNjksIDEyOCwgNzgsIDg5LCA2NSwgNjUsIDEyOCwgNzgsIAorICAgIDg3LCA3OSwgNzksIDEyOCwgNzgsIDg3LCA3OSwgMTI4LCA3OCwgODcsIDczLCA3MywgMTI4LCA3OCwgODcsIDczLCAxMjgsIAorICAgIDc4LCA4NywgNjksIDEyOCwgNzgsIDg3LCA2NSwgNjUsIDEyOCwgNzgsIDg3LCA2NSwgMTI4LCA3OCwgODcsIDEyOCwgNzgsIAorICAgIDg2LCAxMjgsIDc4LCA4NSwgODgsIDEyOCwgNzgsIDg1LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgODUsIAorICAgIDg0LCA3MywgNzYsIDc2LCA4NSwgMTI4LCA3OCwgODUsIDg0LCAxMjgsIDc4LCA4NSwgMjEyLCA3OCwgODUsIDgyLCA4OCwgCisgICAgMTI4LCA3OCwgODUsIDgyLCAxMjgsIDc4LCA4NSwgODAsIDEyOCwgNzgsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDg1LCA3OSwgCisgICAgODAsIDEyOCwgNzgsIDg1LCA3OSwgMTI4LCA3OCwgODUsIDc4LCA4NSwgOTAsIDEyOCwgNzgsIDg1LCA3OCwgODUsIDIxOCwgCisgICAgNzgsIDg1LCA3OCwgNzEsIDEyOCwgNzgsIDg1LCA3OCwgNjUsIDg2LCA4NSwgMjEyLCA3OCwgODUsIDc4LCA2NSwgODYsIDczLCAKKyAgICAyMDMsIDc4LCA4NSwgNzgsIDEyOCwgNzgsIDg1LCAyMDYsIDc4LCA4NSwgNzcsIDY5LCA4MiwgMjA3LCA3OCwgODUsIDc3LCAKKyAgICA2OSwgODIsIDY1LCA4NCwgNzksIDIxMCwgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgMjA0LCA3OCwgODUsIDc3LCA2NiwgNjksIAorICAgIDgyLCA4MywgMTI4LCA3OCwgODUsIDc3LCA2NiwgNjksIDgyLCAxMjgsIDc4LCA4NSwgNzcsIDEyOCwgNzgsIDg1LCA3NiwgCisgICAgNzYsIDEyOCwgNzgsIDg1LCA3NiwgMjA0LCA3OCwgODUsIDc2LCAxMjgsIDc4LCA4NSwgNzUsIDg0LCA2NSwgMTI4LCA3OCwgCisgICAgODUsIDY5LCA3OCwgNzEsIDEyOCwgNzgsIDg1LCA2OSwgMTI4LCA3OCwgODUsIDY2LCA3MywgNjUsIDIwNiwgNzgsIDg1LCAKKyAgICA2NSwgNjksIDEyOCwgNzgsIDg1LCA0OSwgNDksIDEyOCwgNzgsIDg1LCA0OSwgMTc3LCA3OCwgODUsIDQ4LCA1MCwgNTAsIAorICAgIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDUwLCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA1MCwgNDksIDEyOCwgNzgsIDg1LCA0OCwgCisgICAgNTAsIDQ4LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1NywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTYsIDY1LCAxMjgsIDc4LCAKKyAgICA4NSwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTUsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDc4LCA4NSwgNDgsIDQ5LCA1MywgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNTIsIDEyOCwgNzgsIDg1LCA0OCwgNDksIDUxLCAKKyAgICAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA1MCwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDc4LCA4NSwgNDgsIAorICAgIDQ5LCA0OSwgMTI4LCA3OCwgODUsIDQ4LCA0OSwgNDgsIDY1LCAxMjgsIDc4LCA4NSwgNDgsIDQ5LCA0OCwgMTI4LCA3OCwgCisgICAgODUsIDQ4LCA0OCwgNTcsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1NSwgMTI4LCAKKyAgICA3OCwgODUsIDQ4LCA0OCwgNTQsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCA1MiwgCisgICAgMTI4LCA3OCwgODUsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDg1LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA4NSwgNDgsIDQ4LCAKKyAgICA0OSwgMTI4LCA3OCwgODQsIDg1LCA4NSwgMTI4LCA3OCwgODQsIDg1LCA3NywgMTI4LCA3OCwgODQsIDIxMywgNzgsIDg0LCAKKyAgICA3OSwgODEsIDgwLCA2OSwgNzgsIDEyOCwgNzgsIDg0LCA3MywgNjksIDE5NywgNzgsIDg0LCA2OSwgODUsIDc4LCA3MSwgNjYsIAorICAgIDY1LCAxMjgsIDc4LCA4NCwgNjksIDg1LCA3NywgMTI4LCA3OCwgODQsIDY5LCA3OCwgMTI4LCA3OCwgODQsIDY5LCA2OSwgCisgICAgMTI4LCA3OCwgODQsIDY1LCA4MCwgMTI4LCA3OCwgODQsIDY1LCAyMDgsIDc4LCA4NCwgNjUsIDY1LCAxMjgsIDc4LCA4MywgCisgICAgODUsIDc5LCAyMTIsIDc4LCA4MywgODUsIDc4LCAxMjgsIDc4LCA4MywgODUsIDc3LCAxMjgsIDc4LCA4MywgNzksIDc3LCAKKyAgICAxMjgsIDc4LCA4MywgNzMsIDY5LCA2OSwgODQsIDEyOCwgNzgsIDgzLCA3MywgNjksIDY5LCA4MCwgMTI4LCA3OCwgODMsIAorICAgIDczLCA2OSwgNjksIDEyOCwgNzgsIDgzLCA3MiwgODUsIDg0LCAxMjgsIDc4LCA4MywgNzIsIDg1LCAyMTIsIDc4LCA4MywgCisgICAgNzIsIDg1LCA3OSwgODAsIDEyOCwgNzgsIDgzLCA3MiwgODUsIDY5LCAxMjgsIDc4LCA4MywgNzIsIDczLCA2OSwgNjksIAorICAgIDEyOCwgNzgsIDgzLCA3MiwgNjksIDY5LCAxMjgsIDc4LCA4MywgNzIsIDY1LCA4MSwgMTI4LCA3OCwgODMsIDcyLCA2NSwgCisgICAgMTI4LCA3OCwgODMsIDY5LCA4NSwgNjUsIDY5LCA3OCwgMTI4LCA3OCwgODMsIDY5LCA3OCwgMTI4LCA3OCwgODMsIDY1LCAKKyAgICAxMjgsIDc4LCA4MiwgODksIDg4LCAxMjgsIDc4LCA4MiwgODksIDg0LCAxMjgsIDc4LCA4MiwgODksIDgyLCA4OCwgMTI4LCAKKyAgICA3OCwgODIsIDg5LCA4MiwgMTI4LCA3OCwgODIsIDg5LCA4MCwgMTI4LCA3OCwgODIsIDg5LCAxMjgsIDc4LCA4MiwgODUsIAorICAgIDg4LCAxMjgsIDc4LCA4MiwgODUsIDg0LCAxMjgsIDc4LCA4MiwgODUsIDgyLCA4OCwgMTI4LCA3OCwgODIsIDg1LCA4MiwgCisgICAgMTI4LCA3OCwgODIsIDg1LCA4MCwgMTI4LCA3OCwgODIsIDg1LCAxMjgsIDc4LCA4MiwgNzksIDg4LCAxMjgsIDc4LCA4MiwgCisgICAgNzksIDgwLCAxMjgsIDc4LCA4MiwgNzksIDEyOCwgNzgsIDgyLCA2OSwgODgsIDEyOCwgNzgsIDgyLCA2OSwgODQsIDEyOCwgCisgICAgNzgsIDgyLCA2OSwgODAsIDEyOCwgNzgsIDgyLCA2OSwgMTI4LCA3OCwgODIsIDY1LCA4OCwgMTI4LCA3OCwgODIsIDY1LCAKKyAgICA4NCwgMTI4LCA3OCwgODIsIDY1LCA4MCwgMTI4LCA3OCwgODIsIDY1LCAxMjgsIDc4LCA3OSwgODksIDEyOCwgNzgsIDc5LCAKKyAgICA4OCwgMTI4LCA3OCwgNzksIDg2LCA2OSwgNzcsIDY2LCA2OSwgODIsIDEyOCwgNzgsIDc5LCA4NCwgODQsIDc5LCAxMjgsIAorICAgIDc4LCA3OSwgODQsIDY5LCA4MywgMTI4LCA3OCwgNzksIDg0LCA2OSwgNzIsIDY5LCA2NSwgNjgsIDEyOCwgNzgsIDc5LCA4NCwgCisgICAgNjksIDcyLCA2OSwgNjUsIDE5NiwgNzgsIDc5LCA4NCwgNjksIDY2LCA3OSwgNzksIDc1LCAxMjgsIDc4LCA3OSwgODQsIDY5LCAKKyAgICA2NiwgNzksIDc5LCAyMDMsIDc4LCA3OSwgODQsIDY5LCAxMjgsIDc4LCA3OSwgODQsIDE5NywgNzgsIDc5LCA4NCwgNjcsIAorICAgIDcyLCA2OSwgMTk2LCA3OCwgNzksIDg0LCA2NywgNzIsIDEyOCwgNzgsIDc5LCA4NCwgMTI4LCA3OCwgNzksIDIxMiwgNzgsIAorICAgIDc5LCA4MywgNjksIDEyOCwgNzgsIDc5LCA4MiwgODQsIDcyLCA4NywgNjksIDgzLCAyMTIsIDc4LCA3OSwgODIsIDg0LCA3MiwgCisgICAgNjksIDgyLCAyMDYsIDc4LCA3OSwgODIsIDg0LCAyMDAsIDc4LCA3OSwgODIsIDc3LCA2NSwgMjA0LCA3OCwgNzksIDIxMCwgCisgICAgNzgsIDc5LCA4MCwgMTI4LCA3OCwgNzksIDc5LCA3OCwgODUsIDEyOCwgNzgsIDc5LCA3OSwgMTI4LCA3OCwgNzksIDc4LCAKKyAgICA3MCwgNzksIDgyLCA3NSwgNzMsIDc4LCA3MSwgMTI4LCA3OCwgNzksIDc4LCA0NSwgODAsIDc5LCA4NCwgNjUsIDY2LCA3NiwgCisgICAgMTk3LCA3OCwgNzksIDc4LCA0NSwgNzQsIDc5LCA3MywgNzgsIDY5LCA4MiwgMTI4LCA3OCwgNzksIDc4LCA0NSwgNjYsIDgyLCAKKyAgICA2OSwgNjUsIDc1LCA3MywgNzgsIDE5OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgMjA0LCA3OCwgNzksIDc1LCA3MiwgODUsIAorICAgIDc1LCAxMjgsIDc4LCA3OSwgNjgsIDY5LCAxMjgsIDc4LCA3OSwgNjUsIDEyOCwgNzgsIDc5LCA0NSwgNjYsIDgyLCA2OSwgCisgICAgNjUsIDIwMywgNzgsIDc4LCA4NSwgODUsIDEyOCwgNzgsIDc4LCA4NSwgMTI4LCA3OCwgNzgsIDc5LCA3OSwgMTI4LCA3OCwgCisgICAgNzgsIDc5LCAxMjgsIDc4LCA3OCwgNzgsIDg1LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCA4NSwgMTI4LCA3OCwgNzgsIDc4LCAKKyAgICA3OSwgNzksIDEyOCwgNzgsIDc4LCA3OCwgNzksIDEyOCwgNzgsIDc4LCA3OCwgNzMsIDczLCAxMjgsIDc4LCA3OCwgNzgsIAorICAgIDczLCAxMjgsIDc4LCA3OCwgNzgsIDY5LCA2OSwgMTI4LCA3OCwgNzgsIDc4LCA2OSwgMTI4LCA3OCwgNzgsIDc4LCA2NSwgCisgICAgODUsIDEyOCwgNzgsIDc4LCA3OCwgNjUsIDczLCAxMjgsIDc4LCA3OCwgNzgsIDY1LCA2NSwgMTI4LCA3OCwgNzgsIDc4LCAKKyAgICA2NSwgMTI4LCA3OCwgNzgsIDc4LCAxMjgsIDc4LCA3OCwgNzIsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDc5LCA3OSwgMTI4LCAKKyAgICA3OCwgNzgsIDcxLCA3OSwgMTI4LCA3OCwgNzgsIDcxLCA3MywgNzMsIDEyOCwgNzgsIDc4LCA3MSwgNzMsIDEyOCwgNzgsIAorICAgIDc4LCA3MSwgNjUsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDY1LCAxMjgsIDc4LCA3OCwgNzEsIDEyOCwgNzgsIDc4LCA2NiwgCisgICAgODMsIDgwLCAxMjgsIDc4LCA3NywgMTI4LCA3OCwgNzYsIDQ4LCA1MCwgNDgsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDU3LCAKKyAgICAxMjgsIDc4LCA3NiwgNDgsIDQ5LCA1NiwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDc4LCA3NiwgNDgsIAorICAgIDQ5LCA1NSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTQsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA3NiwgCisgICAgNDgsIDQ5LCA1MiwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNTEsIDEyOCwgNzgsIDc2LCA0OCwgNDksIDUwLCAxMjgsIDc4LCAKKyAgICA3NiwgNDgsIDQ5LCA0OSwgMTI4LCA3OCwgNzYsIDQ4LCA0OSwgNDgsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU3LCAxMjgsIAorICAgIDc4LCA3NiwgNDgsIDQ4LCA1NiwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTUsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDU0LCAKKyAgICAxMjgsIDc4LCA3NiwgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUzLCAxMjgsIDc4LCA3NiwgNDgsIAorICAgIDQ4LCA1MiwgMTI4LCA3OCwgNzYsIDQ4LCA0OCwgNTEsIDEyOCwgNzgsIDc2LCA0OCwgNDgsIDUwLCAxMjgsIDc4LCA3NiwgCisgICAgNDgsIDQ4LCA0OSwgMTI4LCA3OCwgNzYsIDEyOCwgNzgsIDc1LCA3OSwgNzcsIDEyOCwgNzgsIDc1LCAyMDcsIDc4LCA3NSwgCisgICAgNzMsIDc4LCA2OCwgNzMsIDEyOCwgNzgsIDc1LCA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzgsIDc0LCA4OSwgODgsIAorICAgIDEyOCwgNzgsIDc0LCA4OSwgODQsIDEyOCwgNzgsIDc0LCA4OSwgODIsIDg4LCAxMjgsIDc4LCA3NCwgODksIDgyLCAxMjgsIAorICAgIDc4LCA3NCwgODksIDgwLCAxMjgsIDc4LCA3NCwgODksIDEyOCwgNzgsIDc0LCA4NSwgODgsIDEyOCwgNzgsIDc0LCA4NSwgCisgICAgODIsIDg4LCAxMjgsIDc4LCA3NCwgODUsIDgyLCAxMjgsIDc4LCA3NCwgODUsIDgxLCA2NSwgMTI4LCA3OCwgNzQsIDg1LCAKKyAgICA4MCwgMTI4LCA3OCwgNzQsIDg1LCA3OSwgODgsIDEyOCwgNzgsIDc0LCA4NSwgNzksIDEyOCwgNzgsIDc0LCA4NSwgNjksIAorICAgIDgxLCAxMjgsIDc4LCA3NCwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzQsIDg1LCAxMjgsIDc4LCA3NCwgNzksIDg4LCAxMjgsIAorICAgIDc4LCA3NCwgNzksIDg0LCAxMjgsIDc4LCA3NCwgNzksIDgwLCAxMjgsIDc4LCA3NCwgNzksIDc5LCAxMjgsIDc4LCA3NCwgCisgICAgNzksIDEyOCwgNzgsIDc0LCA3MywgODgsIDEyOCwgNzgsIDc0LCA3MywgODQsIDEyOCwgNzgsIDc0LCA3MywgODAsIDEyOCwgCisgICAgNzgsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCA4NCwgMTI4LCA3OCwgNzQsIDczLCA2OSwgODAsIAorICAgIDEyOCwgNzgsIDc0LCA3MywgNjksIDY5LCAxMjgsIDc4LCA3NCwgNzMsIDY5LCAxMjgsIDc4LCA3NCwgNzMsIDEyOCwgNzgsIAorICAgIDc0LCAyMDEsIDc4LCA3NCwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzQsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDc0LCA2OSwgCisgICAgODUsIDY1LCA2OSwgNzgsIDY1LCAxMjgsIDc4LCA3NCwgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3NCwgNjksIDY5LCAKKyAgICA2OSwgNjksIDEyOCwgNzgsIDc0LCA2OSwgNjksIDEyOCwgNzgsIDc0LCA2OSwgMTk3LCA3OCwgNzQsIDY5LCAxMjgsIDc4LCAKKyAgICA3NCwgNjUsIDgxLCAxMjgsIDc4LCA3NCwgNjUsIDgwLCAxMjgsIDc4LCA3NCwgNjUsIDY5LCA3NywgNzYsIDczLCAxMjgsIAorICAgIDc4LCA3NCwgNjUsIDY5LCA3NywgMTI4LCA3OCwgNzQsIDY1LCA2NSwgMTI4LCA3OCwgNzMsIDg4LCAxMjgsIDc4LCA3MywgCisgICAgODQsIDgyLCA2OSwgMTI4LCA3OCwgNzMsIDgzLCA2NSwgNzEsIDEyOCwgNzgsIDczLCA4MiwgODUsIDcxLCA4NSwgMTI4LCAKKyAgICA3OCwgNzMsIDgwLCAxMjgsIDc4LCA3MywgNzgsIDg0LCA3MiwgMTI4LCA3OCwgNzMsIDc4LCA2OSwgODQsIDg5LCAxMjgsIAorICAgIDc4LCA3MywgNzgsIDY5LCA4NCwgMjE3LCA3OCwgNzMsIDc4LCA2OSwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzgsIDczLCA3OCwgCisgICAgNjksIDg0LCA2OSwgNjksIDIwNiwgNzgsIDczLCA3OCwgNjksIDQ1LCA4NCwgNzIsIDczLCA4MiwgODQsIDg5LCAxMjgsIDc4LCAKKyAgICA3MywgNzgsIDE5NywgNzgsIDczLCA3OCwgNjgsIDY1LCA1MCwgMTI4LCA3OCwgNzMsIDc4LCA2OCwgNjUsIDE3OCwgNzgsIAorICAgIDczLCA3NywgMTI4LCA3OCwgNzMsIDIwNSwgNzgsIDczLCA3NSwgNzIsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIDc4LCA3MywgCisgICAgNzUsIDY1LCA3MiwgNzMsIDg0LCAxMjgsIDc4LCA3MywgNzUsIDY1LCAxMjgsIDc4LCA3MywgNzIsIDgzLCA3MiwgODYsIDY1LCAKKyAgICA4MywgNjUsIDEyOCwgNzgsIDczLCA3MSwgNzMsIDY4LCA2NSwgNzcsIDczLCA3OCwgMTI4LCA3OCwgNzMsIDcxLCA3MywgNjgsIAorICAgIDY1LCA2OSwgODMsIDcyLCAxMjgsIDc4LCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3OCwgNzMsIDcxLCA3MiwgMjEyLCA3OCwgCisgICAgNzMsIDcxLCA3MSwgNjUsIDcyLCA3MywgODQsIDY1LCAxMjgsIDc4LCA3MywgNjksIDg4LCAxMjgsIDc4LCA3MywgNjksIDg1LCAKKyAgICA3OCwgNDUsIDg0LCA3MywgNzUsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODQsIDcyLCA3MywgCisgICAgNjksIDg1LCA4NCwgNzIsIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgODMsIDczLCA3OSwgODMsIDEyOCwgNzgsIDczLCAKKyAgICA2OSwgODUsIDc4LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgNDUsIDgwLCA3MywgCisgICAgNjksIDg1LCA4MCwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA4MCwgNjUsIDc4LCA4MywgNzMsIDc5LCA4MywgMTI4LCAKKyAgICA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDc4LCA3MywgNjksIDg1LCA3OCwgCisgICAgNDUsIDcyLCA3MywgNjksIDg1LCA3MiwgMTI4LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDQ1LCA2NywgNzMsIDY5LCA4NSwgNjcsIAorICAgIDEyOCwgNzgsIDczLCA2OSwgODUsIDc4LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzgsIDczLCA2OSwgCisgICAgODUsIDIwNiwgNzgsIDczLCA2OSwgODAsIDEyOCwgNzgsIDczLCA2OSwgMTI4LCA3OCwgNzMsIDY2LCAxMjgsIDc4LCA3MywgCisgICAgNjUsIDEyOCwgNzgsIDczLCA1MCwgMTI4LCA3OCwgNzIsIDg1LCA2OSwgMTI4LCA3OCwgNzIsIDc0LCA2NSwgMTI4LCA3OCwgCisgICAgNzIsIDEyOCwgNzgsIDcxLCA4OSwgNjksIDEyOCwgNzgsIDcxLCA4NiwgNjksIDEyOCwgNzgsIDcxLCA4NSwgODUsIDEyOCwgCisgICAgNzgsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDc4LCA3MSwgODUsIDc5LCA4NCwgMTI4LCA3OCwgNzEsIDg1LCA3OSwgMTI4LCAKKyAgICA3OCwgNzEsIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgODUsIDY1LCA2OSwgMTI4LCA3OCwgNzEsIDc5LCA4OCwgCisgICAgMTI4LCA3OCwgNzEsIDc5LCA4NSwgMTI4LCA3OCwgNzEsIDc5LCAyMTMsIDc4LCA3MSwgNzksIDg0LCAxMjgsIDc4LCA3MSwgCisgICAgNzksIDgxLCAxMjgsIDc4LCA3MSwgNzksIDgwLCAxMjgsIDc4LCA3MSwgNzksIDc4LCAxMjgsIDc4LCA3MSwgNzksIDc3LCAKKyAgICAxMjgsIDc4LCA3MSwgNzksIDY5LCA3MiwgMTI4LCA3OCwgNzEsIDc5LCA2OSwgMjAwLCA3OCwgNzEsIDIwNywgNzgsIDcxLCAKKyAgICA3NSwgODksIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDc1LCA4NywgNjUsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDc1LCA4NSwgODAsIAorICAgIDEyOCwgNzgsIDcxLCA3NSwgODUsIDc4LCAxMjgsIDc4LCA3MSwgNzUsIDg1LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA4NSwgCisgICAgNjksIDc4LCA5MCwgNjksIDg1LCA3NywgMTI4LCA3OCwgNzEsIDc1LCA4NSwgMTk3LCA3OCwgNzEsIDc1LCA3MywgNzgsIDY4LCAKKyAgICAyMDEsIDc4LCA3MSwgNzUsIDczLCA2OSwgNjksIDEyOCwgNzgsIDcxLCA3NSwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNzEsIAorICAgIDc1LCA2OSwgODUsIDgyLCA3MywgMTI4LCA3OCwgNzEsIDc1LCA2OSwgODUsIDY1LCA2OSwgODEsIDEyOCwgNzgsIDcxLCA3NSwgCisgICAgNjksIDg1LCA2NSwgNjksIDc3LCAxMjgsIDc4LCA3MSwgNzUsIDY1LCA4MSwgMTI4LCA3OCwgNzEsIDc1LCA2NSwgODAsIAorICAgIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDY1LCA3NywgNzMsIDEyOCwgNzgsIDcxLCA3NSwgNjUsIDEyOCwgNzgsIDcxLCA3MywgCisgICAgNjksIDg4LCAxMjgsIDc4LCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3OCwgNzEsIDczLCA2OSwgMTI4LCA3OCwgNzEsIDcyLCAKKyAgICA2NSwgMTI4LCA3OCwgNzEsIDcxLCA4NywgNjUsIDY5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgODIsIDY1LCA2OSwgCisgICAgMTI4LCA3OCwgNzEsIDcxLCA4NSwgODAsIDEyOCwgNzgsIDcxLCA3MSwgODUsIDc5LCA4MSwgMTI4LCA3OCwgNzEsIDcxLCAKKyAgICA4NSwgNzksIDIwOSwgNzgsIDcxLCA3MSwgODUsIDc5LCA3OCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNzksIDc3LCAxMjgsIAorICAgIDc4LCA3MSwgNzEsIDg1LCA3NywgMTI4LCA3OCwgNzEsIDcxLCA4NSwgNjksIDY5LCA4NCwgMTI4LCA3OCwgNzEsIDcxLCA4NSwgCisgICAgNjUsIDY5LCA4MywgNzIsIDY1LCAxOTcsIDc4LCA3MSwgNzEsIDg1LCA2NSwgNjksIDIwNiwgNzgsIDcxLCA3MSwgODUsIAorICAgIDEyOCwgNzgsIDcxLCA3MSwgNzksIDc5LCAxMjgsIDc4LCA3MSwgNzEsIDc5LCAxMjgsIDc4LCA3MSwgNzEsIDczLCAxMjgsIAorICAgIDc4LCA3MSwgNzEsIDY5LCA4NSwgODgsIDEyOCwgNzgsIDcxLCA3MSwgNjksIDg1LCA2NSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgCisgICAgNzEsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCAyMTMsIDc4LCA3MSwgNzEsIDY5LCA3OCwgMTI4LCAKKyAgICA3OCwgNzEsIDcxLCA2OSwgNjksIDg0LCAxMjgsIDc4LCA3MSwgNzEsIDY5LCA2OSwgNjksIDY5LCAxMjgsIDc4LCA3MSwgNzEsIAorICAgIDY5LCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2OSwgMTI4LCA3OCwgNzEsIDcxLCA2NSwgODAsIDEyOCwgNzgsIDcxLCA3MSwgCisgICAgNjUsIDY1LCA3NywgNjUsIDY5LCAxMjgsIDc4LCA3MSwgNzEsIDY1LCA2NSwgNzcsIDEyOCwgNzgsIDcxLCA3MSwgMTI4LCAKKyAgICA3OCwgNzEsIDY5LCA4OCwgMTI4LCA3OCwgNzEsIDY5LCA4NSwgODIsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDcxLCA2OSwgODAsIAorICAgIDEyOCwgNzgsIDcxLCA2OSwgNzgsIDEyOCwgNzgsIDcxLCA2OSwgNjksIDEyOCwgNzgsIDcxLCA2OSwgNjUsIDY4LCA2NSwgCisgICAgNzYsIDEyOCwgNzgsIDcxLCA2NSwgODgsIDEyOCwgNzgsIDcxLCA2NSwgODUsIDEyOCwgNzgsIDcxLCA2NSwgODQsIDEyOCwgCisgICAgNzgsIDcxLCA2NSwgMjExLCA3OCwgNzEsIDY1LCA4MSwgMTI4LCA3OCwgNzEsIDY1LCA4MCwgMTI4LCA3OCwgNzEsIDY1LCAKKyAgICA3OCwgNzEsIDg1LCAxMjgsIDc4LCA3MSwgNjUsIDc4LCAxMjgsIDc4LCA3MSwgNjUsIDczLCAxMjgsIDc4LCA3MSwgNjUsIAorICAgIDcyLCAxMjgsIDc4LCA3MSwgNjUsIDY1LCA3MywgMTI4LCA3OCwgNzEsIDE5MywgNzgsIDcwLCAxMjgsIDc4LCA2OSwgODgsIAorICAgIDIxMiwgNzgsIDY5LCA4OCwgMTI4LCA3OCwgNjksIDg3LCA4MywgODAsIDY1LCA4MCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgCisgICAgODcsIDc2LCA3MywgNzgsIDY5LCAxMjgsIDc4LCA2OSwgODcsIDEyOCwgNzgsIDY5LCA4NSwgODQsIDgyLCA2NSwgMjA0LCAKKyAgICA3OCwgNjksIDg1LCA4NCwgNjksIDgyLCAxMjgsIDc4LCA2OSwgODQsIDEyOCwgNzgsIDY5LCAyMTIsIDc4LCA2OSwgODMsIAorICAgIDg0LCA2OSwgMTk2LCA3OCwgNjksIDgxLCA4NSwgNjgsIDY1LCA2NSwgMTI4LCA3OCwgNjksIDgwLCA4NCwgODUsIDc4LCA2OSwgCisgICAgMTI4LCA3OCwgNjksIDgwLCAxMjgsIDc4LCA2OSwgNzksIDEyOCwgNzgsIDY5LCAyMDcsIDc4LCA2OSwgNzgsIDY1LCA3OCwgCisgICAgNzksIDEyOCwgNzgsIDY5LCA3OCwgMTI4LCA3OCwgNjksIDc2LCAxMjgsIDc4LCA2OSwgNzMsIDg0LCA3MiwgNjksIDIxMCwgCisgICAgNzgsIDY5LCA3MSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzgsIDY5LCA3MSwgNjUsIDg0LCA2OSwgMTk2LCA3OCwgNjksIDY3LCAKKyAgICA3NSwgODQsIDczLCA2OSwgMTI4LCA3OCwgNjksIDY2LCA2OSwgNzgsIDgzLCA4NCwgNzMsIDc3LCA3NywgNjksIDEyOCwgNzgsIAorICAgIDY4LCA4NSwgODgsIDEyOCwgNzgsIDY4LCA4NSwgODQsIDEyOCwgNzgsIDY4LCA4NSwgODIsIDg4LCAxMjgsIDc4LCA2OCwgCisgICAgODUsIDgyLCAxMjgsIDc4LCA2OCwgODUsIDgwLCAxMjgsIDc4LCA2OCwgODUsIDc4LCAxMjgsIDc4LCA2OCwgMjEzLCA3OCwgCisgICAgNjgsIDc5LCA4OCwgMTI4LCA3OCwgNjgsIDc5LCA4NCwgMTI4LCA3OCwgNjgsIDc5LCA4MCwgMTI4LCA3OCwgNjgsIDc5LCAKKyAgICA3OSwgMTI4LCA3OCwgNjgsIDc5LCA3OCwgMTI4LCA3OCwgNjgsIDc5LCA3NywgNjYsIDg1LCAxMjgsIDc4LCA2OCwgNzksIAorICAgIDc2LCAxOTcsIDc4LCA2OCwgNzMsIDg4LCAxMjgsIDc4LCA2OCwgNzMsIDg0LCAxMjgsIDc4LCA2OCwgNzMsIDgxLCAxMjgsIAorICAgIDc4LCA2OCwgNzMsIDgwLCAxMjgsIDc4LCA2OCwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjgsIDczLCA2OSwgMTI4LCA3OCwgCisgICAgNjgsIDczLCA2OCwgNjUsIDEyOCwgNzgsIDY4LCA3MywgNjUsIDgxLCAxMjgsIDc4LCA2OCwgNjksIDg4LCAxMjgsIDc4LCAKKyAgICA2OCwgNjksIDg1LCA4OCwgMTI4LCA3OCwgNjgsIDY5LCA4NSwgODQsIDEyOCwgNzgsIDY4LCA2OSwgODUsIDY1LCA2OSwgODIsIAorICAgIDY5LCA2OSwgMTI4LCA3OCwgNjgsIDY5LCA4MCwgMTI4LCA3OCwgNjgsIDY5LCA2OSwgMTI4LCA3OCwgNjgsIDY5LCAxMjgsIAorICAgIDc4LCA2OCwgNjUsIDg4LCAxMjgsIDc4LCA2OCwgNjUsIDg0LCAxMjgsIDc4LCA2OCwgNjUsIDgwLCAxMjgsIDc4LCA2OCwgCisgICAgNjUsIDc3LCAxMjgsIDc4LCA2OCwgNjUsIDY1LCA3OCwgNzEsIDcxLCA2OSwgODUsIDY1LCA2OSwgODQsIDEyOCwgNzgsIDY4LCAKKyAgICA2NSwgNjUsIDEyOCwgNzgsIDY4LCA2NSwgMTkzLCA3OCwgNjYsIDg5LCA4OCwgMTI4LCA3OCwgNjYsIDg5LCA4NCwgMTI4LCAKKyAgICA3OCwgNjYsIDg5LCA4MiwgODgsIDEyOCwgNzgsIDY2LCA4OSwgODIsIDEyOCwgNzgsIDY2LCA4OSwgODAsIDEyOCwgNzgsIAorICAgIDY2LCA4OSwgMTI4LCA3OCwgNjYsIDg1LCA4OCwgMTI4LCA3OCwgNjYsIDg1LCA4NCwgMTI4LCA3OCwgNjYsIDg1LCA4MiwgCisgICAgODgsIDEyOCwgNzgsIDY2LCA4NSwgODIsIDEyOCwgNzgsIDY2LCA4NSwgODAsIDEyOCwgNzgsIDY2LCA4NSwgMTI4LCA3OCwgCisgICAgNjYsIDc5LCA4OCwgMTI4LCA3OCwgNjYsIDc5LCA4NCwgMTI4LCA3OCwgNjYsIDc5LCA4MCwgMTI4LCA3OCwgNjYsIDc5LCAKKyAgICAxMjgsIDc4LCA2NiwgNzMsIDg4LCAxMjgsIDc4LCA2NiwgNzMsIDg0LCAxMjgsIDc4LCA2NiwgNzMsIDgwLCAxMjgsIDc4LCAKKyAgICA2NiwgNzMsIDY5LCA4OCwgMTI4LCA3OCwgNjYsIDczLCA2OSwgODAsIDEyOCwgNzgsIDY2LCA3MywgNjksIDEyOCwgNzgsIAorICAgIDY2LCA3MywgMTI4LCA3OCwgNjYsIDcyLCAxMjgsIDc4LCA2NiwgNjUsIDg4LCAxMjgsIDc4LCA2NiwgNjUsIDg0LCAxMjgsIAorICAgIDc4LCA2NiwgNjUsIDgwLCAxMjgsIDc4LCA2NiwgNjUsIDEyOCwgNzgsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgCisgICAgNzgsIDY1LCA4OSwgMTI4LCA3OCwgNjUsIDg4LCA3MywgNjUsIDIwNiwgNzgsIDY1LCA4OCwgMTI4LCA3OCwgNjUsIDg1LCAKKyAgICA4NCwgNzIsIDgzLCAxMjgsIDc4LCA2NSwgODUsIDY4LCA3MywgMjE4LCA3OCwgNjUsIDg0LCA4NSwgODIsIDY1LCAyMDQsIAorICAgIDc4LCA2NSwgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDc4LCA2NSwgODMsIDc1LCA2NSwgODAsIDIwMSwgNzgsIDY1LCA4MywgCisgICAgNzIsIDczLCAxMjgsIDc4LCA2NSwgODMsIDY1LCA3NiwgNzMsIDkwLCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzgsIDY1LCAKKyAgICA4MywgNjUsIDc2LCA3MywgOTAsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDc4LCA2NSwgODIsIDgyLCA3OSwgMjE1LCA3OCwgNjUsIAorICAgIDgyLCAxMjgsIDc4LCA2NSwgODEsIDEyOCwgNzgsIDY1LCA3OSwgMjExLCA3OCwgNjUsIDc4LCA4MywgNjUsIDc4LCA2NSwgCisgICAgODEsIDEyOCwgNzgsIDY1LCA3OCwgNzEsIDc3LCA3OSwgNzgsIDg0LCA3MiwgNzksIDEyOCwgNzgsIDY1LCA3OCwgNjgsIAorICAgIDEyOCwgNzgsIDY1LCA3OCwgNjUsIDEyOCwgNzgsIDY1LCA3NywgNjksIDEyOCwgNzgsIDY1LCA3NywgMTk3LCA3OCwgNjUsIAorICAgIDc3LCA1MCwgMTI4LCA3OCwgNjUsIDc3LCAxMjgsIDc4LCA2NSwgNzUsIDEyOCwgNzgsIDY1LCA3MywgODIsIDE5MywgNzgsIAorICAgIDY1LCA3MywgMjA0LCA3OCwgNjUsIDcxLCA4MiwgMjAxLCA3OCwgNjUsIDcxLCA2NSwgODIsIDEyOCwgNzgsIDY1LCA3MSwgCisgICAgNjUsIDEyOCwgNzgsIDY1LCA3MSwgMTkzLCA3OCwgNjUsIDcxLCAxMjgsIDc4LCA2NSwgMTk5LCA3OCwgNjUsIDY5LCAxMjgsIAorICAgIDc4LCA2NSwgNjYsIDc2LCA2NSwgMTI4LCA3OCwgNjUsIDY1LCA4MywgNzMsIDc1LCA4OSwgNjUsIDg5LCA2NSwgMTI4LCA3OCwgCisgICAgNjUsIDY1LCA3NSwgODMsIDczLCA3NSwgODksIDY1LCA4OSwgNjUsIDEyOCwgNzgsIDY1LCA2NSwgNzMsIDEyOCwgNzgsIDY1LCAKKyAgICAxOTMsIDc4LCA2NSwgNTAsIDEyOCwgNzgsIDY1LCA0NSwgNTAsIDEyOCwgNzgsIDQ4LCA1MiwgNTAsIDEyOCwgNzgsIDQ4LCAKKyAgICA1MiwgNDksIDEyOCwgNzgsIDQ4LCA1MiwgNDgsIDEyOCwgNzgsIDQ4LCA1MSwgNTcsIDEyOCwgNzgsIDQ4LCA1MSwgNTYsIAorICAgIDEyOCwgNzgsIDQ4LCA1MSwgNTUsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDU1LCAxMjgsIDc4LCA0OCwgNTEsIDU0LCAxMjgsIAorICAgIDc4LCA0OCwgNTEsIDUzLCA2NSwgMTI4LCA3OCwgNDgsIDUxLCA1MywgMTI4LCA3OCwgNDgsIDUxLCA1MiwgNjUsIDEyOCwgCisgICAgNzgsIDQ4LCA1MSwgNTIsIDEyOCwgNzgsIDQ4LCA1MSwgNTEsIDY1LCAxMjgsIDc4LCA0OCwgNTEsIDUxLCAxMjgsIDc4LCAKKyAgICA0OCwgNTEsIDUwLCAxMjgsIDc4LCA0OCwgNTEsIDQ5LCAxMjgsIDc4LCA0OCwgNTEsIDQ4LCAxMjgsIDc4LCA0OCwgNTAsIAorICAgIDU3LCAxMjgsIDc4LCA0OCwgNTAsIDU2LCAxMjgsIDc4LCA0OCwgNTAsIDU1LCAxMjgsIDc4LCA0OCwgNTAsIDU0LCAxMjgsIAorICAgIDc4LCA0OCwgNTAsIDUzLCA2NSwgMTI4LCA3OCwgNDgsIDUwLCA1MywgMTI4LCA3OCwgNDgsIDUwLCA1MiwgMTI4LCA3OCwgCisgICAgNDgsIDUwLCA1MSwgMTI4LCA3OCwgNDgsIDUwLCA1MCwgMTI4LCA3OCwgNDgsIDUwLCA0OSwgMTI4LCA3OCwgNDgsIDUwLCAKKyAgICA0OCwgMTI4LCA3OCwgNDgsIDQ5LCA1NywgMTI4LCA3OCwgNDgsIDQ5LCA1NiwgNjYsIDEyOCwgNzgsIDQ4LCA0OSwgNTYsIAorICAgIDY1LCAxMjgsIDc4LCA0OCwgNDksIDU2LCAxMjgsIDc4LCA0OCwgNDksIDU1LCAxMjgsIDc4LCA0OCwgNDksIDU0LCAxMjgsIAorICAgIDc4LCA0OCwgNDksIDUzLCAxMjgsIDc4LCA0OCwgNDksIDUyLCAxMjgsIDc4LCA0OCwgNDksIDUxLCAxMjgsIDc4LCA0OCwgCisgICAgNDksIDUwLCAxMjgsIDc4LCA0OCwgNDksIDQ5LCAxMjgsIDc4LCA0OCwgNDksIDQ4LCAxMjgsIDc4LCA0OCwgNDgsIDU3LCAKKyAgICAxMjgsIDc4LCA0OCwgNDgsIDU2LCAxMjgsIDc4LCA0OCwgNDgsIDU1LCAxMjgsIDc4LCA0OCwgNDgsIDU0LCAxMjgsIDc4LCAKKyAgICA0OCwgNDgsIDUzLCAxMjgsIDc4LCA0OCwgNDgsIDUyLCAxMjgsIDc4LCA0OCwgNDgsIDUxLCAxMjgsIDc4LCA0OCwgNDgsIAorICAgIDUwLCAxMjgsIDc4LCA0OCwgNDgsIDQ5LCAxMjgsIDc4LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3OCwgNDUsIDY1LCA4MiwgCisgICAgMjE3LCA3NywgODksIDg4LCAxMjgsIDc3LCA4OSwgODQsIDEyOCwgNzcsIDg5LCA4MywgNzYsIDczLCA4NCwgNjksIDEyOCwgCisgICAgNzcsIDg5LCA4MCwgMTI4LCA3NywgODksIDY1LCAxMjgsIDc3LCA4OSwgMTkzLCA3NywgODksIDEyOCwgNzcsIDIxNywgNzcsIAorICAgIDg3LCA3OSwgNzksIDEyOCwgNzcsIDg3LCA3OSwgMTI4LCA3NywgODcsIDczLCA3MywgMTI4LCA3NywgODcsIDczLCAxMjgsIAorICAgIDc3LCA4NywgNjksIDY5LCAxMjgsIDc3LCA4NywgNjksIDEyOCwgNzcsIDg3LCA2NSwgNjUsIDEyOCwgNzcsIDg3LCA2NSwgCisgICAgMTI4LCA3NywgODcsIDEyOCwgNzcsIDIxNSwgNzcsIDg2LCA4MywgMTI4LCA3NywgODYsIDc5LCA4MCwgMTI4LCA3NywgODYsIAorICAgIDczLCAxMjgsIDc3LCA4NiwgNjksIDg1LCA2NSwgNjksIDc4LCA3MSwgNjUsIDc3LCAxMjgsIDc3LCA4NiwgMTI4LCA3NywgCisgICAgMjE0LCA3NywgODUsIDg4LCAxMjgsIDc3LCA4NSwgODUsIDgzLCA3MywgNzUsIDY1LCA4NCwgNzksIDY1LCA3OCwgMTI4LCAKKyAgICA3NywgODUsIDg1LCA4MiwgNjgsIDcyLCA2NSwgNzQsIDE5MywgNzcsIDg1LCA4NSwgMTI4LCA3NywgODUsIDg0LCAxMjgsIAorICAgIDc3LCA4NSwgODMsIDczLCA2NywgMTI4LCA3NywgODUsIDgzLCA3MywgMTk1LCA3NywgODUsIDgzLCA3MiwgODIsIDc5LCA3OSwgCisgICAgNzcsIDEyOCwgNzcsIDg1LCA4MywgNzIsIDUxLCAxMjgsIDc3LCA4NSwgODMsIDcyLCAxNzksIDc3LCA4NSwgODMsIDcyLCAKKyAgICAxMjgsIDc3LCA4NSwgODMsIDIwMCwgNzcsIDg1LCA4MiwgODgsIDEyOCwgNzcsIDg1LCA4MiwgNzEsIDg1LCA1MCwgMTI4LCAKKyAgICA3NywgODUsIDgyLCA2OSwgMTI4LCA3NywgODUsIDgyLCA2OCwgNjUsIDEyOCwgNzcsIDg1LCA4MiwgNjgsIDE5MywgNzcsIAorICAgIDg1LCA4MiwgMTI4LCA3NywgODUsIDgxLCA2OCwgNjUsIDc3LCAxMjgsIDc3LCA4NSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgCisgICAgODgsIDEyOCwgNzcsIDg1LCA3OSwgODQsIDEyOCwgNzcsIDg1LCA3OSwgODAsIDEyOCwgNzcsIDg1LCA3OSwgNzcsIDY1LCAKKyAgICA2OSwgMTI4LCA3NywgODUsIDc5LCAxMjgsIDc3LCA4NSwgNzgsIDgzLCA4NSwgNjYsIDEyOCwgNzcsIDg1LCA3OCwgNjUsIAorICAgIDcyLCAxMjgsIDc3LCA4NSwgNzYsIDg0LCA3MywgODMsIDY5LCA4NCwgMTI4LCA3NywgODUsIDc2LCA4NCwgNzMsIDgzLCA2OSwgCisgICAgMjEyLCA3NywgODUsIDc2LCA4NCwgNzMsIDgwLCA3NiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNzcsIDg1LCAKKyAgICA3NiwgODQsIDczLCA4MCwgNzYsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNzcsIDg1LCA3NiwgODQsIDczLCA4MCwgCisgICAgNzYsIDE5NywgNzcsIDg1LCA3NiwgODQsIDczLCA3OSwgNjcsIDg1LCA3NiwgNjUsIDIxMCwgNzcsIDg1LCA3NiwgODQsIDczLCAKKyAgICA3NywgNjUsIDgwLCAxMjgsIDc3LCA4NSwgNzYsIDg0LCAyMDEsIDc3LCA4NSwgNzUsIDgwLCA3MiwgODIsIDY5LCA3OCwgNzEsIAorICAgIDEyOCwgNzcsIDg1LCA3MywgNzgsIDEyOCwgNzcsIDg1LCA3MSwgODMsIDEyOCwgNzcsIDg1LCA3MSwgMTI4LCA3NywgODUsIAorICAgIDE5OSwgNzcsIDg1LCA2OSwgMTI4LCA3NywgODUsIDY3LCA3MiwgMTI4LCA3NywgODUsIDY3LCAyMDAsIDc3LCA4NSwgNjcsIAorICAgIDY1LCA2NSwgNjgsIDEyOCwgNzcsIDg1LCA2NSwgNzgsIDEyOCwgNzcsIDg1LCA2NSwgNjksIDEyOCwgNzcsIDg1LCA0NSwgCisgICAgNzEsIDY1LCA2NSwgNzIsIDc2LCA2NSwgMTkzLCA3NywgMjEzLCA3NywgODMsIDEyOCwgNzcsIDgwLCA2NSwgMTI4LCA3NywgCisgICAgNzksIDg5LCA2NSwgNzMsIDEyOCwgNzcsIDc5LCA4OCwgMTI4LCA3NywgNzksIDg2LCA3MywgMTk3LCA3NywgNzksIDg2LCAKKyAgICA2OSwgMTk2LCA3NywgNzksIDg1LCA4NCwgNzIsIDEyOCwgNzcsIDc5LCA4NSwgODQsIDIwMCwgNzcsIDc5LCA4NSwgODMsIAorICAgIDY5LCAxMjgsIDc3LCA3OSwgODUsIDgzLCAxOTcsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCA3OCwgODMsIDEyOCwgCisgICAgNzcsIDc5LCA4NSwgNzgsIDg0LCA2NSwgNzMsIDc4LCAxMjgsIDc3LCA3OSwgODUsIDc4LCA4NCwgNjUsIDczLCAyMDYsIDc3LCAKKyAgICA3OSwgODUsIDc4LCAyMTIsIDc3LCA3OSwgODUsIDc4LCA2OCwgMTI4LCA3NywgNzksIDg1LCA3OCwgMTk2LCA3NywgNzksIAorICAgIDg0LCA3MiwgNjksIDgyLCAxMjgsIDc3LCA3OSwgODQsIDEyOCwgNzcsIDc5LCA4MiwgODQsIDg1LCA4NSwgNzcsIDEyOCwgCisgICAgNzcsIDc5LCA4MiwgODQsIDY1LCA4MiwgMTI4LCA3NywgNzksIDgyLCA4MCwgNzIsIDc5LCA3NiwgNzksIDcxLCA3MywgNjcsIAorICAgIDY1LCAyMDQsIDc3LCA3OSwgODIsIDc4LCA3MywgNzgsIDcxLCAxMjgsIDc3LCA3OSwgODAsIDEyOCwgNzcsIDc5LCA3OSwgCisgICAgODMsIDY5LCA0NSwgNjcsIDgyLCA2OSwgMTk3LCA3NywgNzksIDc5LCA3OCwgMTI4LCA3NywgNzksIDc5LCAyMDYsIDc3LCAKKyAgICA3OSwgNzksIDc3LCA4MCwgODUsIDgxLCAxMjgsIDc3LCA3OSwgNzksIDc3LCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3OSwgNzksIAorICAgIDEyOCwgNzcsIDc5LCA3OCwgODQsIDczLCA2OSwgNjksIDc4LCAxMjgsIDc3LCA3OSwgNzgsIDg0LCA3MiwgMTI4LCA3NywgCisgICAgNzksIDc4LCA4NCwgMjAwLCA3NywgNzksIDc4LCA4MywgODQsIDY5LCA4MiwgMTI4LCA3NywgNzksIDc4LCA3OSwgODMsIDg0LCAKKyAgICA2NSwgNjYsIDc2LCAxOTcsIDc3LCA3OSwgNzgsIDc5LCA4MywgODAsIDY1LCA2NywgMTk3LCA3NywgNzksIDc4LCA3OSwgODIsIAorICAgIDY1LCA3MywgNzYsIDEyOCwgNzcsIDc5LCA3OCwgNzksIDcxLCA4MiwgNjUsIDgwLCAyMDAsIDc3LCA3OSwgNzgsIDc5LCA3MSwgCisgICAgODIsIDY1LCA3NywgNzcsIDc5LCAyMTEsIDc3LCA3OSwgNzgsIDc5LCA3MSwgODIsIDY1LCAyMDUsIDc3LCA3OSwgNzgsIDc5LCAKKyAgICA3MCwgNzksIDc4LCA3MywgNjUsIDgzLCAxMjgsIDc3LCA3OSwgNzgsIDc5LCA2NywgODUsIDc2LCA2NSwgMjEwLCA3NywgNzksIAorICAgIDc4LCA3NSwgNjksIDg5LCAxMjgsIDc3LCA3OSwgNzgsIDc1LCA2OSwgMjE3LCA3NywgNzksIDc4LCA3MywgMTI4LCA3NywgCisgICAgNzksIDc4LCA3MSwgNzUsIDY5LCA4NSwgNjUsIDY5LCA4MSwgMTI4LCA3NywgNzksIDc4LCA2OSwgMjE3LCA3NywgNzksIDc4LCAKKyAgICAxMjgsIDc3LCA3OSwgMjA2LCA3NywgNzksIDc2LCAxMjgsIDc3LCA3OSwgNzIsIDY1LCA3NywgNzcsIDY1LCAxOTYsIDc3LCAKKyAgICA3OSwgNjgsIDg1LCA3NiwgMjA3LCA3NywgNzksIDY4LCA2OSwgODMsIDg0LCA4OSwgMTI4LCA3NywgNzksIDY4LCA2OSwgNzYsIAorICAgIDgzLCAxMjgsIDc3LCA3OSwgNjgsIDY5LCA3NiwgMTI4LCA3NywgNzksIDY4LCA2OSwgMTI4LCA3NywgNzksIDY2LCA3MywgCisgICAgNzYsIDE5NywgNzcsIDc5LCA2NSwgMTI4LCA3NywgMjA3LCA3NywgNzgsIDg5LCA2NSwgMjA1LCA3NywgNzgsIDY1LCA4MywgCisgICAgMTI4LCA3NywgNzcsIDgzLCA4MCwgMTI4LCA3NywgNzcsIDEyOCwgNzcsIDIwNSwgNzcsIDc2LCA2NSwgMTI4LCA3NywgNzYsIAorICAgIDEyOCwgNzcsIDc1LCA4MCwgNjUsIDgyLCA2NSwgMjA5LCA3NywgNzMsIDg4LCAxMjgsIDc3LCA3MywgODQsIDEyOCwgNzcsIAorICAgIDczLCA4MywgODIsIDY1LCAxMjgsIDc3LCA3MywgODIsIDczLCA2NiwgNjUsIDY1LCA4MiwgODUsIDEyOCwgNzcsIDczLCA4MiwgCisgICAgNzMsIDEyOCwgNzcsIDczLCA4MiwgNjksIDY4LCAxMjgsIDc3LCA3MywgODAsIDEyOCwgNzcsIDczLCA3OCwgODksIDEyOCwgCisgICAgNzcsIDczLCA3OCwgODUsIDgzLCA0NSwgNzksIDgyLCA0NSwgODAsIDc2LCA4NSwgMjExLCA3NywgNzMsIDc4LCA4NSwgODMsIAorICAgIDEyOCwgNzcsIDczLCA3OCwgNzMsIDgzLCA4NCwgNjksIDgyLCAxMjgsIDc3LCA3MywgNzgsIDczLCA3NywgNjUsIDEyOCwgCisgICAgNzcsIDczLCA3OCwgNzMsIDY4LCA3MywgODMsIDY3LCAxMjgsIDc3LCA3MywgNzgsIDczLCA2NiwgODUsIDgzLCAxMjgsIDc3LCAKKyAgICA3MywgNzcsIDY5LCAxMjgsIDc3LCA3MywgNzcsIDEyOCwgNzcsIDczLCA3NiwgNzYsIDczLCA3OSwgNzgsIDIxMSwgNzcsIAorICAgIDczLCA3NiwgNzYsIDY5LCA4NCwgMTI4LCA3NywgNzMsIDc2LCA3NiwgMTk3LCA3NywgNzMsIDc2LCAyMDQsIDc3LCA3MywgCisgICAgNzYsIDc1LCAyMTcsIDc3LCA3MywgNzYsIDEyOCwgNzcsIDczLCA3NSwgODUsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDczLCAKKyAgICA3NSwgODIsIDc5LCAyMDYsIDc3LCA3MywgNzUsIDgyLCA3MywgMTI4LCA3NywgNzMsIDczLCA3OCwgMTI4LCA3NywgNzMsIAorICAgIDczLCAxMjgsIDc3LCA3MywgMTk5LCA3NywgNzMsIDY5LCA4OCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4NCwgCisgICAgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgODMsIAorICAgIDczLCA3OSwgODMsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODMsIDgzLCA2NSwgNzgsIDcxLCA3OCwgNzMsIDY5LCAKKyAgICA4NSwgNzgsIDEyOCwgNzcsIDczLCA2OSwgODUsIDc3LCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc3LCA3MywgNjksIAorICAgIDg1LCA3NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgNDUsIDgzLCA3MywgNzksIDgzLCAxMjgsIDc3LCA3MywgNjksIDg1LCAKKyAgICA3NywgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA4MCwgNjUsIDc4LCA4MywgCisgICAgNzMsIDc5LCA4MywgMTI4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDQ1LCA3OCwgNzMsIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDczLCAKKyAgICA2OSwgODUsIDc3LCA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDc3LCA3MywgNjksIDg1LCA3NywgNDUsIDY3LCA3MiwgCisgICAgNzMsIDY5LCA4NSwgNjcsIDcyLCAxMjgsIDc3LCA3MywgNjksIDg1LCAyMDUsIDc3LCA3MywgNjksIDgwLCAxMjgsIDc3LCAKKyAgICA3MywgNjksIDY5LCAxMjgsIDc3LCA3MywgNjksIDEyOCwgNzcsIDczLCA2OCwgNzYsIDczLCA3OCwgMTk3LCA3NywgNzMsIAorICAgIDY4LCA2OCwgNzYsIDY5LCA0NSwgODcsIDY5LCA3NiwgODMsIDIwMCwgNzcsIDczLCA2OCwgNjgsIDc2LCAxOTcsIDc3LCA3MywgCisgICAgMTk2LCA3NywgNzMsIDY3LCA4MiwgNzksIDgzLCA2NywgNzksIDgwLCA2OSwgMTI4LCA3NywgNzMsIDY3LCA4MiwgNzksIDgwLCAKKyAgICA3MiwgNzksIDc4LCA2OSwgMTI4LCA3NywgNzMsIDY3LCA4MiwgMjA3LCA3NywgNzMsIDY3LCAyMTAsIDc3LCA3MiwgOTAsIAorICAgIDEyOCwgNzcsIDcyLCA2NSwgMTI4LCA3NywgNzIsIDEyOCwgNzcsIDcxLCA4NSwgODgsIDEyOCwgNzcsIDcxLCA4NSwgODQsIAorICAgIDEyOCwgNzcsIDcxLCA4NSwgODIsIDg4LCAxMjgsIDc3LCA3MSwgODUsIDgyLCAxMjgsIDc3LCA3MSwgODUsIDgwLCAxMjgsIAorICAgIDc3LCA3MSwgODUsIDc5LCA4OCwgMTI4LCA3NywgNzEsIDg1LCA3OSwgODAsIDEyOCwgNzcsIDcxLCA4NSwgNzksIDEyOCwgCisgICAgNzcsIDcxLCA4NSwgMTI4LCA3NywgNzEsIDc5LCA4OCwgMTI4LCA3NywgNzEsIDc5LCA4NCwgMTI4LCA3NywgNzEsIDc5LCAKKyAgICA4MCwgMTI4LCA3NywgNzEsIDc5LCAxMjgsIDc3LCA3MSwgMjA3LCA3NywgNzEsIDczLCA2OSwgODgsIDEyOCwgNzcsIDcxLCAKKyAgICA3MywgNjksIDEyOCwgNzcsIDcxLCA2OSwgODgsIDEyOCwgNzcsIDcxLCA2OSwgODAsIDEyOCwgNzcsIDcxLCA2OSwgMTI4LCAKKyAgICA3NywgNzEsIDY2LCA4NSwgMTI4LCA3NywgNzEsIDY2LCA3OSwgNzksIDEyOCwgNzcsIDcxLCA2NiwgNzksIDcwLCA4NSwgNzcsIAorICAgIDEyOCwgNzcsIDcxLCA2NiwgNzksIDEyOCwgNzcsIDcxLCA2NiwgNzMsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDg1LCA3OCwgCisgICAgMTI4LCA3NywgNzEsIDY2LCA2OSwgNzgsIDEyOCwgNzcsIDcxLCA2NiwgNjksIDY5LCAxMjgsIDc3LCA3MSwgNjYsIDY5LCAKKyAgICAxMjgsIDc3LCA3MSwgNjYsIDY1LCA4MywgNjUsIDgxLCAxMjgsIDc3LCA3MSwgNjYsIDY1LCA4MywgNjUsIDEyOCwgNzcsIAorICAgIDcxLCA2NSwgODgsIDEyOCwgNzcsIDcxLCA2NSwgODQsIDEyOCwgNzcsIDcxLCA2NSwgODAsIDEyOCwgNzcsIDcxLCA2NSwgCisgICAgMTI4LCA3NywgNzEsIDEyOCwgNzcsIDcwLCA3OSwgNzgsIDEyOCwgNzcsIDcwLCA3OSwgMjA2LCA3NywgNzAsIDc5LCAxMjgsIAorICAgIDc3LCA3MCwgNzMsIDg5LCA2NSwgODEsIDEyOCwgNzcsIDcwLCA3MywgNjksIDY5LCAxMjgsIDc3LCA3MCwgNjksIDg1LCA4NCwgCisgICAgMTI4LCA3NywgNzAsIDY5LCA4NSwgODEsIDEyOCwgNzcsIDcwLCA2OSwgODUsIDY1LCA2OSwgMTI4LCA3NywgNzAsIDY1LCAKKyAgICA2NSwgMTI4LCA3NywgNjksIDkwLCA5MCwgNzksIDEyOCwgNzcsIDY5LCA4OCwgMTI4LCA3NywgNjksIDg1LCAyMTIsIDc3LCAKKyAgICA2OSwgODUsIDgxLCAxMjgsIDc3LCA2OSwgODUsIDc4LCA3NCwgNzksIDc3LCA3OCwgNjgsIDY5LCA4NSwgODEsIDEyOCwgNzcsIAorICAgIDY5LCA4NSwgNzgsIDEyOCwgNzcsIDY5LCA4NCwgODIsIDc5LCAxMjgsIDc3LCA2OSwgODQsIDgyLCA3MywgNjcsIDY1LCAKKyAgICAyMDQsIDc3LCA2OSwgODQsIDgyLCA3MywgNjUsIDEyOCwgNzcsIDY5LCA4NCwgODIsIDY5LCA4NCwgNjksIDIxMSwgNzcsIAorICAgIDY5LCA4NCwgNzksIDY2LCA2OSwgNzYsIDg1LCA4MywgMTI4LCA3NywgNjksIDg0LCA2OSwgNzUsIDEyOCwgNzcsIDY5LCA4NCwgCisgICAgNjksIDcxLCAxMjgsIDc3LCA2OSwgODQsIDY1LCA3NiwgMTI4LCA3NywgNjksIDg0LCAxOTMsIDc3LCA2OSwgODMsIDgzLCAKKyAgICA2OSwgNzgsIDczLCA2NSwgMjA2LCA3NywgNjksIDgzLCA4MywgNjUsIDcxLCA2OSwgMTI4LCA3NywgNjksIDgzLCA4MywgNjUsIAorICAgIDcxLCAxOTcsIDc3LCA2OSwgODMsIDc5LCAxMjgsIDc3LCA2OSwgODMsIDczLCAxMjgsIDc3LCA2OSwgODMsIDcyLCAxMjgsIAorICAgIDc3LCA2OSwgODIsIDc5LCA3MywgODQsIDczLCAxOTUsIDc3LCA2OSwgODIsIDc1LCA3MiwgNjUsIDEyOCwgNzcsIDY5LCA4MiwgCisgICAgNzUsIDcyLCAxOTMsIDc3LCA2OSwgODIsIDczLCA2OCwgNzMsIDY1LCA3OCwgODMsIDEyOCwgNzcsIDY5LCA4MiwgNzMsIAorICAgIDEyOCwgNzcsIDY5LCA4MiwgNzEsIDY5LCAxMjgsIDc3LCA2OSwgODIsIDY3LCA4NSwgODIsIDg5LCAxMjgsIDc3LCA2OSwgCisgICAgODIsIDY3LCA4NSwgODIsIDIxNywgNzcsIDY5LCA3OCwgNjgsIDg1LCA4NCwgMTI4LCA3NywgNjksIDc4LCAxMjgsIDc3LCAKKyAgICA2OSwgNzcsIDc5LCAxMjgsIDc3LCA2OSwgNzcsIDY2LCA2OSwgODIsIDgzLCA3MiwgNzMsIDgwLCAxMjgsIDc3LCA2OSwgNzcsIAorICAgIDY2LCA2OSwgODIsIDEyOCwgNzcsIDY5LCA3NywgNjYsIDY5LCAyMTAsIDc3LCA2OSwgNzcsIDQ1LCA4MSwgNzksIDgwLCA3MiwgCisgICAgMTI4LCA3NywgNjksIDc3LCAxMjgsIDc3LCA2OSwgMjA1LCA3NywgNjksIDc2LCA3OSwgNjgsIDczLCAxOTUsIDc3LCA2OSwgCisgICAgNzYsIDczLCA3NSwgMTI4LCA3NywgNjksIDczLCA5MCwgNzMsIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDg0LCA3OSwgNzgsIAorICAgIDEyOCwgNzcsIDY5LCA3MSwgNjUsIDgwLCA3MiwgNzksIDc4LCA2OSwgMTI4LCA3NywgNjksIDcxLCA2NSwgNzYsIDczLCAKKyAgICAxMjgsIDc3LCA2OSwgNjksIDg0LCA3OSwgODIsIDg1LCAxMjgsIDc3LCA2OSwgNjksIDg0LCAxMjgsIDc3LCA2OSwgNjksIAorICAgIDc3LCA4NSwgMTI4LCA3NywgNjksIDY5LCA3NywgMTI4LCA3NywgNjksIDY5LCA2OSwgNjksIDEyOCwgNzcsIDY5LCA2OCwgCisgICAgNzMsIDg1LCA3NywgMTI4LCA3NywgNjksIDY4LCA3MywgODUsIDIwNSwgNzcsIDY5LCA2OCwgNzMsIDY3LCA3MywgNzgsIDY5LCAKKyAgICAxMjgsIDc3LCA2OSwgNjgsIDczLCA2NywgNjUsIDIwNCwgNzcsIDY5LCA2NSwgODQsIDEyOCwgNzcsIDY5LCA2NSwgMjEyLCAKKyAgICA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTk2LCA3NywgNjksIDY1LCA4MywgODUsIDgyLCA2OSwgMTI4LCA3NywgNjksIAorICAgIDY1LCA4MywgODUsIDgyLCAxOTcsIDc3LCA2OCwgODUsIDIwNiwgNzcsIDE5NiwgNzcsIDY3LCA3MiwgMjEzLCA3NywgNjcsIAorICAgIDcyLCA2NSwgMjA2LCA3NywgMTk1LCA3NywgNjYsIDg1LCA3OSwgODEsIDEyOCwgNzcsIDY2LCA4NSwgNzksIDEyOCwgNzcsIAorICAgIDY2LCA4NSwgNjksIDEyOCwgNzcsIDY2LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3NywgNjYsIDg1LCA2NSwgNjksIDEyOCwgCisgICAgNzcsIDY2LCA3OSwgNzksIDEyOCwgNzcsIDY2LCA3OSwgMTI4LCA3NywgNjYsIDczLCA4NCwgMTI4LCA3NywgNjYsIDczLCAKKyAgICAyMTIsIDc3LCA2NiwgNzMsIDgyLCA3MywgNjksIDY5LCA3OCwgMTI4LCA3NywgNjYsIDczLCAxMjgsIDc3LCA2NiwgNjksIAorICAgIDg1LCA4OCwgMTI4LCA3NywgNjYsIDY5LCA4NSwgODIsIDczLCAxMjgsIDc3LCA2NiwgNjksIDg1LCA3NywgMTI4LCA3NywgCisgICAgNjYsIDY5LCA4MiwgNjUsIDY5LCAxMjgsIDc3LCA2NiwgNjksIDc4LCAxMjgsIDc3LCA2NiwgNjksIDY5LCA3NSwgNjksIDY5LCAKKyAgICA4NCwgMTI4LCA3NywgNjYsIDY5LCA2OSwgMTI4LCA3NywgNjYsIDY5LCAxMjgsIDc3LCA2NiwgNjUsIDgxLCAxMjgsIDc3LCAKKyAgICA2NiwgNjUsIDc4LCA4OSwgNzMsIDEyOCwgNzcsIDY2LCA2NSwgNjUsIDgyLCA2NSwgNjksIDEyOCwgNzcsIDY2LCA2NSwgNjUsIAorICAgIDc1LCA2OSwgODQsIDEyOCwgNzcsIDY2LCA2NSwgNjUsIDEyOCwgNzcsIDY2LCA2NSwgMTkzLCA3NywgNjYsIDE5MywgNzcsIAorICAgIDY2LCA1MiwgMTI4LCA3NywgNjYsIDUxLCAxMjgsIDc3LCA2NiwgNTAsIDEyOCwgNzcsIDY2LCAxMjgsIDc3LCAxOTQsIDc3LCAKKyAgICA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgODksIDEyOCwgNzcsIDY1LCA4OCwgNzMsIDc3LCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDg4LCAxMjgsIDc3LCA2NSwgODUsIDEyOCwgNzcsIDY1LCA4NCwgODQsIDc5LCA2NywgNzUsIDEyOCwgCisgICAgNzcsIDY1LCA4NCwgODIsIDczLCA4OCwgMTI4LCA3NywgNjUsIDg0LCA2OSwgODIsIDczLCA2NSwgNzYsIDgzLCAxMjgsIDc3LCAKKyAgICA2NSwgODQsIDEyOCwgNzcsIDY1LCA4MywgMjEzLCA3NywgNjUsIDgzLCA4MywgNzMsIDc4LCA3MSwgMTI4LCA3NywgNjUsIAorICAgIDgzLCA4MywgNjUsIDcxLCA2OSwgMTI4LCA3NywgNjUsIDgzLCA3OSwgODIsIDE5MywgNzcsIDY1LCA4MywgNzUsIDEyOCwgCisgICAgNzcsIDY1LCA4MywgNzIsIDcwLCA2NSwgNjUsIDg0LCAxMjgsIDc3LCA2NSwgODMsIDcyLCA1MCwgMTI4LCA3NywgNjUsIDgzLCAKKyAgICA2NywgODUsIDc2LCA3MywgNzgsIDE5NywgNzcsIDY1LCA4MiwgODksIDEyOCwgNzcsIDY1LCA4MiwgODUsIDc1LCA4NSwgCisgICAgMTI4LCA3NywgNjUsIDgyLCA4NCwgODksIDgyLCA3MywgMTkzLCA3NywgNjUsIDgyLCA4MiwgODksIDczLCA3OCwgMTk5LCAKKyAgICA3NywgNjUsIDgyLCA4MiwgNzMsIDY1LCA3MSwgMTk3LCA3NywgNjUsIDgyLCA3NSwgNjksIDgyLCAxMjgsIDc3LCA2NSwgODIsIAorICAgIDc1LCA0NSwgNTIsIDEyOCwgNzcsIDY1LCA4MiwgNzUsIDQ1LCA1MSwgMTI4LCA3NywgNjUsIDgyLCA3NSwgNDUsIDUwLCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDc1LCA0NSwgNDksIDEyOCwgNzcsIDY1LCA4MiwgNjksIDEyOCwgNzcsIDY1LCA4MiwgNjcsIAorICAgIDcyLCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODQsIDc5LCA0NSwgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAKKyAgICAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDc3LCA2NSwgODIsIDY3LCA2NSwgODMsIDczLCA4NCwgNjksIAorICAgIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCA4NCwgNjUsIDEyOCwgNzcsIDY1LCA4MiwgNjYsIDg1LCA4NCwgMTkzLCA3NywgCisgICAgNjUsIDgyLCAxMjgsIDc3LCA2NSwgODEsIDY1LCA3MCwgMTI4LCA3NywgNjUsIDgxLCAxMjgsIDc3LCA2NSwgODAsIDc2LCAKKyAgICAxOTcsIDc3LCA2NSwgODAsIDczLCA4MSwgMTI4LCA3NywgNjUsIDIwOCwgNzcsIDY1LCA3OSwgMTI4LCA3NywgNjUsIDc4LCAKKyAgICA4MywgODksIDc5LCA3OCwgMTI4LCA3NywgNjUsIDc4LCA4MywgODUsIDY1LCA2OSwgMTI4LCA3NywgNjUsIDc4LCA3OCwgNjUsIAorICAgIDIxOCwgNzcsIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDc3LCA2NSwgNzgsIDcxLCA2NSwgNzYsIDY1LCA3NywgMTI4LCA3NywgCisgICAgNjUsIDc4LCA2OCwgNjUsIDczLCA3NiwgNzMsIDc4LCAxOTksIDc3LCA2NSwgNzgsIDY4LCA2NSwgNzMsIDE5NSwgNzcsIDY1LCAKKyAgICA3OCwgNjcsIDcyLCAyMTMsIDc3LCA2NSwgNzgsIDY1LCA2NywgNzYsIDY5LCA4MywgMTI4LCA3NywgNjUsIDc2LCA4NCwgNjksIAorICAgIDgzLCAxOTcsIDc3LCA2NSwgNzYsIDY5LCA2OSwgODIsIDczLCAxMjgsIDc3LCA2NSwgNzYsIDY5LCAxMjgsIDc3LCA2NSwgCisgICAgNzYsIDE5NywgNzcsIDY1LCA3NiwgNjUsIDc1LCA3OSwgMjA2LCA3NywgNjUsIDc1LCA4MywgODUsIDgyLCA2NSwgMTI4LCAKKyAgICA3NywgNjUsIDc1LCA4MywgODUsIDgyLCAxOTMsIDc3LCA2NSwgNzMsIDkwLCA2OSwgMTI4LCA3NywgNjUsIDczLCA4OSwgNjUsIAorICAgIDc3LCA3OSwgNzUsIDEyOCwgNzcsIDY1LCA3MywgODQsIDY1LCA3MywgNzUsIDcyLCA4NSwgMTI4LCA3NywgNjUsIDczLCA4MiwgCisgICAgODUsIDEyOCwgNzcsIDY1LCA3MywgNzcsIDg1LCA2NSwgNzgsIDEyOCwgNzcsIDY1LCA3MywgNzcsIDY1LCA3NiwgNjUsIDczLCAKKyAgICAxMjgsIDc3LCA2NSwgNzMsIDc2LCA2NiwgNzksIDIxNiwgNzcsIDY1LCA3MywgNzUsIDg1LCA4MiwgNzksIDEyOCwgNzcsIAorICAgIDY1LCA3MywgNjgsIDY5LCA3OCwgMTI4LCA3NywgNjUsIDczLCAxMjgsIDc3LCA2NSwgNzIsIDc0LCA3OSwgNzgsIDE5OSwgCisgICAgNzcsIDY1LCA3MiwgNzIsIDY1LCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA4MCwgODIsIDY1LCA3OCwgNjUsIDEyOCwgNzcsIDY1LCAKKyAgICA3MiwgNjUsIDgwLCA2NSwgNzUsIDcyLCAxMjgsIDc3LCA2NSwgNzIsIDY1LCA2NSwgODAsIDgyLCA2NSwgNjUsIDc4LCAxOTMsIAorICAgIDc3LCA2NSwgNzIsIDEyOCwgNzcsIDY1LCA3MSwgNzgsIDczLCA3MCwgODksIDczLCA3OCwgMTk5LCA3NywgNjUsIDY5LCA4MywgCisgICAgNzMsIDEyOCwgNzcsIDY1LCA2OSwgNzgsIDg5LCA3MywgMTI4LCA3NywgNjUsIDY5LCA3OCwgNzQsIDY5LCA4NCwgMTI4LCAKKyAgICA3NywgNjUsIDY5LCA3NywgODYsIDY5LCA4NSwgODgsIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDc1LCA4MCwgNjksIDc4LCAxMjgsIAorICAgIDc3LCA2NSwgNjksIDc3LCA3MSwgNjYsIDczLCA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDY2LCA3MSwgNjYsIDczLCAKKyAgICA2OSwgNjksIDEyOCwgNzcsIDY1LCA2OSwgNzcsIDY2LCA2NSwgMTI4LCA3NywgNjUsIDY5LCA3NywgMTI4LCA3NywgNjUsIAorICAgIDY5LCA3NiwgNjksIDY5LCAxMjgsIDc3LCA2NSwgNjksIDc1LCA2OSwgODUsIDgwLCAxMjgsIDc3LCA2NSwgNjgsIDg5LCA2NSwgCisgICAgMTI4LCA3NywgNjUsIDY4LCA4NSwgMTI4LCA3NywgNjUsIDY4LCA2OCwgNjUsIDIwMCwgNzcsIDY1LCA2OCwgNjgsIDY1LCAKKyAgICAxMjgsIDc3LCA2NSwgNjgsIDY4LCAxOTMsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIAorICAgIDEyOCwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgNDUsIDY2LCA4MiwgNjksIDg2LCA2OSwgMTI4LCA3NywgNjUsIDY3LCA4MiwgCisgICAgNzksIDc4LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCAxMjgsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNzcsIDY1LCAKKyAgICA2NywgODIsIDc5LCAyMDYsIDc3LCA2NSwgNjcsIDcyLCA3MywgNzgsIDY5LCAxMjgsIDc3LCA2NSwgNjUsIDg5LCA4OSwgNjUsIAorICAgIDY1LCAxMjgsIDc3LCA2NSwgNjUsIDczLCAxMjgsIDc3LCA2NSwgNjUsIDEyOCwgNzcsIDY1LCA1MCwgMTI4LCA3NywgNDgsIAorICAgIDUyLCA1MiwgMTI4LCA3NywgNDgsIDUyLCA1MSwgMTI4LCA3NywgNDgsIDUyLCA1MCwgMTI4LCA3NywgNDgsIDUyLCA0OSwgCisgICAgMTI4LCA3NywgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA1MiwgNDgsIDEyOCwgNzcsIDQ4LCA1MSwgNTcsIDEyOCwgCisgICAgNzcsIDQ4LCA1MSwgNTYsIDEyOCwgNzcsIDQ4LCA1MSwgNTUsIDEyOCwgNzcsIDQ4LCA1MSwgNTQsIDEyOCwgNzcsIDQ4LCAKKyAgICA1MSwgNTMsIDEyOCwgNzcsIDQ4LCA1MSwgNTIsIDEyOCwgNzcsIDQ4LCA1MSwgNTEsIDY2LCAxMjgsIDc3LCA0OCwgNTEsIAorICAgIDUxLCA2NSwgMTI4LCA3NywgNDgsIDUxLCA1MSwgMTI4LCA3NywgNDgsIDUxLCA1MCwgMTI4LCA3NywgNDgsIDUxLCA0OSwgCisgICAgNjUsIDEyOCwgNzcsIDQ4LCA1MSwgNDksIDEyOCwgNzcsIDQ4LCA1MSwgNDgsIDEyOCwgNzcsIDQ4LCA1MCwgNTcsIDEyOCwgCisgICAgNzcsIDQ4LCA1MCwgNTYsIDY1LCAxMjgsIDc3LCA0OCwgNTAsIDU2LCAxMjgsIDc3LCA0OCwgNTAsIDU1LCAxMjgsIDc3LCAKKyAgICA0OCwgNTAsIDU0LCAxMjgsIDc3LCA0OCwgNTAsIDUzLCAxMjgsIDc3LCA0OCwgNTAsIDUyLCA2NSwgMTI4LCA3NywgNDgsIAorICAgIDUwLCA1MiwgMTI4LCA3NywgNDgsIDUwLCA1MSwgMTI4LCA3NywgNDgsIDUwLCA1MCwgNjUsIDEyOCwgNzcsIDQ4LCA1MCwgCisgICAgNTAsIDEyOCwgNzcsIDQ4LCA1MCwgNDksIDEyOCwgNzcsIDQ4LCA1MCwgNDgsIDEyOCwgNzcsIDQ4LCA0OSwgNTcsIDEyOCwgCisgICAgNzcsIDQ4LCA0OSwgNTYsIDEyOCwgNzcsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDc3LCA0OCwgNDksIDU1LCAxMjgsIDc3LCAKKyAgICA0OCwgNDksIDU0LCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1NCwgMTI4LCA3NywgNDgsIDQ5LCA1MywgNjUsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNTMsIDEyOCwgNzcsIDQ4LCA0OSwgNTIsIDEyOCwgNzcsIDQ4LCA0OSwgNTEsIDEyOCwgNzcsIDQ4LCA0OSwgCisgICAgNTAsIDcyLCAxMjgsIDc3LCA0OCwgNDksIDUwLCA3MSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNzAsIDEyOCwgNzcsIDQ4LCAKKyAgICA0OSwgNTAsIDY5LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2OCwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgNjcsIDEyOCwgNzcsIAorICAgIDQ4LCA0OSwgNTAsIDY2LCAxMjgsIDc3LCA0OCwgNDksIDUwLCA2NSwgMTI4LCA3NywgNDgsIDQ5LCA1MCwgMTI4LCA3NywgCisgICAgNDgsIDQ5LCA0OSwgMTI4LCA3NywgNDgsIDQ5LCA0OCwgNjUsIDEyOCwgNzcsIDQ4LCA0OSwgNDgsIDEyOCwgNzcsIDQ4LCAKKyAgICA0OCwgNTcsIDEyOCwgNzcsIDQ4LCA0OCwgNTYsIDEyOCwgNzcsIDQ4LCA0OCwgNTUsIDEyOCwgNzcsIDQ4LCA0OCwgNTQsIAorICAgIDEyOCwgNzcsIDQ4LCA0OCwgNTMsIDEyOCwgNzcsIDQ4LCA0OCwgNTIsIDEyOCwgNzcsIDQ4LCA0OCwgNTEsIDY1LCAxMjgsIAorICAgIDc3LCA0OCwgNDgsIDUxLCAxMjgsIDc3LCA0OCwgNDgsIDUwLCAxMjgsIDc3LCA0OCwgNDgsIDQ5LCA2NiwgMTI4LCA3NywgCisgICAgNDgsIDQ4LCA0OSwgNjUsIDEyOCwgNzcsIDQ4LCA0OCwgNDksIDEyOCwgNzYsIDIxOCwgNzYsIDg5LCA4OSwgMTI4LCA3NiwgCisgICAgODksIDg4LCAxMjgsIDc2LCA4OSwgODQsIDEyOCwgNzYsIDg5LCA4MiwgODgsIDEyOCwgNzYsIDg5LCA4MiwgMTI4LCA3NiwgCisgICAgODksIDgwLCAxMjgsIDc2LCA4OSwgNjgsIDczLCA2NSwgMjA2LCA3NiwgODksIDY3LCA3MywgNjUsIDIwNiwgNzYsIDg4LCAKKyAgICAxMjgsIDc2LCA4NywgNzksIDc5LCAxMjgsIDc2LCA4NywgNzksIDEyOCwgNzYsIDg3LCA3MywgNzMsIDEyOCwgNzYsIDg3LCAKKyAgICA3MywgMTI4LCA3NiwgODcsIDY5LCAxMjgsIDc2LCA4NywgNjUsIDY1LCAxMjgsIDc2LCA4NywgNjUsIDEyOCwgNzYsIDg1LCAKKyAgICA4OCwgMTI4LCA3NiwgODUsIDg1LCAxMjgsIDc2LCA4NSwgODQsIDEyOCwgNzYsIDg1LCA4MiwgODgsIDEyOCwgNzYsIDg1LCAKKyAgICA4MCwgMTI4LCA3NiwgODUsIDc5LCA4OCwgMTI4LCA3NiwgODUsIDc5LCA4NCwgMTI4LCA3NiwgODUsIDc5LCA4MCwgMTI4LCAKKyAgICA3NiwgODUsIDc5LCAxMjgsIDc2LCA4NSwgNzgsIDcxLCA4MywgNzMsIDEyOCwgNzYsIDg1LCA3OCwgNjUsIDg0LCAxOTcsIAorICAgIDc2LCA4NSwgMjA1LCA3NiwgODUsIDc2LCAxMjgsIDc2LCA4NSwgNzMsIDgzLCAxMjgsIDc2LCA4NSwgNzIsIDg1LCA4MiwgCisgICAgMTI4LCA3NiwgODUsIDcyLCAxMjgsIDc2LCA4NSwgNzEsIDcxLCA2NSwgNzEsIDY5LCAxMjgsIDc2LCA4NSwgNzEsIDY1LCAKKyAgICA3NiwgMTI4LCA3NiwgODUsIDcxLCA2NSwgMjA0LCA3NiwgODUsIDY5LCAxMjgsIDc2LCA4NSwgNjUsIDY5LCA4MCwgMTI4LCAKKyAgICA3NiwgODUsIDUxLCAxMjgsIDc2LCA4NSwgNTAsIDEyOCwgNzYsIDg1LCAxNzgsIDc2LCA4MiwgNzksIDEyOCwgNzYsIDgyLCAKKyAgICA3NywgMTI4LCA3NiwgODIsIDczLCAxMjgsIDc2LCA4MiwgNjksIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgNjksIAorICAgIDEyOCwgNzYsIDc5LCA5MCwgNjksIDc4LCA3MSwgMTk3LCA3NiwgNzksIDg4LCAxMjgsIDc2LCA3OSwgODcsIDY5LCA4MiwgCisgICAgNjksIDE5NiwgNzYsIDc5LCA4NywgNjksIDIxMCwgNzYsIDc5LCA4NywgNDUsIDE4NSwgNzYsIDc5LCA4NiwgMTk3LCA3NiwgCisgICAgNzksIDg1LCA4MiwgNjksIDEyOCwgNzYsIDc5LCA4NSwgNjgsIDgzLCA4MCwgNjksIDY1LCA3NSwgNjksIDgyLCAxMjgsIDc2LCAKKyAgICA3OSwgODUsIDY4LCA3NiwgMjE3LCA3NiwgNzksIDg0LCA4NSwgODMsIDEyOCwgNzYsIDc5LCA4NCwgMTI4LCA3NiwgNzksIAorICAgIDgyLCA4MiwgODksIDEyOCwgNzYsIDc5LCA4MiwgODIsIDY1LCA3MywgNzgsIDY5LCAxMjgsIDc2LCA3OSwgODEsIDEyOCwgCisgICAgNzYsIDc5LCA4MCwgMTI4LCA3NiwgNzksIDc5LCA4NCwgMTI4LCA3NiwgNzksIDc5LCA4MCwgNjksIDE5NiwgNzYsIDc5LCAKKyAgICA3OSwgODAsIDEyOCwgNzYsIDc5LCA3OSwgMjA4LCA3NiwgNzksIDc5LCA3OCwgMTI4LCA3NiwgNzksIDc5LCAyMDMsIDc2LCAKKyAgICA3OSwgNzksIDEyOCwgNzYsIDc5LCA3OCwgODMsIDg1LCA3NywgMTI4LCA3NiwgNzksIDc4LCA3MSwgNjUsIDEyOCwgNzYsIAorICAgIDc5LCA3OCwgNzEsIDE5MywgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgODksIDgyLCAKKyAgICAxMjgsIDc2LCA3OSwgNzgsIDcxLCA0NSwgNjYsIDgyLCA2NSwgNzgsIDY3LCA3MiwgNDUsIDgzLCA3OSwgMjA0LCA3NiwgNzksIAorICAgIDc4LCA3MSwgNDUsIDY2LCA4MiwgNjUsIDc4LCA2NywgNzIsIDQ1LCA3OSwgODMsIDIxMSwgNzYsIDc5LCA3OCwgNzEsIDQ1LCAKKyAgICA2NiwgODIsIDY1LCA3OCwgNjcsIDcyLCA0NSwgNzcsIDY1LCA2OCwgMjEwLCA3NiwgNzksIDc4LCA3MSwgNDUsIDY2LCA4MiwgCisgICAgNjUsIDc4LCA2NywgNzIsIDQ1LCA3MiwgNjUsIDcxLCA2NSwgNzYsIDIwNCwgNzYsIDc5LCA3OCwgNzEsIDQ1LCA2NiwgODIsIAorICAgIDY1LCA3OCwgNjcsIDcyLCA0NSwgNjUsIDIxMCwgNzYsIDc5LCA3NywgNzcsIDY1LCA2OSwgMTI4LCA3NiwgNzksIDc3LCAKKyAgICAxMjgsIDc2LCA3OSwgMjA1LCA3NiwgNzksIDc2LCA3NiwgNzMsIDgwLCA3OSwgODAsIDEyOCwgNzYsIDc5LCA3NiwgNzYsIAorICAgIDEyOCwgNzYsIDc5LCA3MSwgMjEwLCA3NiwgNzksIDcxLCA3OSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNzksIDcxLCA3OSwgCisgICAgNzEsIDgyLCA2NSwgMjA1LCA3NiwgNzksIDcxLCAxMjgsIDc2LCA3OSwgNjgsIDY5LCA4MywgODQsIDc5LCA3OCwgNjksIAorICAgIDEyOCwgNzYsIDc5LCA2NywgNzksIDc3LCA3OSwgODQsIDczLCA4NiwgNjksIDEyOCwgNzYsIDc5LCA2NywgNzUsIDczLCA3OCwgCisgICAgNzEsIDQ1LCA4MywgNzIsIDczLCA3MCwgMjEyLCA3NiwgNzksIDY3LCAyMDMsIDc2LCA3OSwgNjcsIDY1LCA4NCwgNzMsIDg2LCAKKyAgICA2OSwgMTI4LCA3NiwgNzksIDY3LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3NiwgNzksIDY1LCAxMjgsIDc2LCA3OCwgMTI4LCAKKyAgICA3NiwgNzYsIDg1LCA4NSwgMTI4LCA3NiwgNzYsIDc5LCA3OSwgMTI4LCA3NiwgNzYsIDc2LCA4NSwgODUsIDEyOCwgNzYsIAorICAgIDc2LCA3NiwgODUsIDEyOCwgNzYsIDc2LCA3NiwgNzksIDc5LCAxMjgsIDc2LCA3NiwgNzYsIDc5LCAxMjgsIDc2LCA3NiwgCisgICAgNzYsIDczLCA3MywgMTI4LCA3NiwgNzYsIDc2LCA3MywgMTI4LCA3NiwgNzYsIDc2LCA2OSwgNjksIDEyOCwgNzYsIDc2LCAKKyAgICA3NiwgNjksIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDg1LCAxMjgsIDc2LCA3NiwgNzYsIDY1LCA3MywgMTI4LCA3NiwgNzYsIAorICAgIDc2LCA2NSwgNjUsIDEyOCwgNzYsIDc2LCA3NiwgNjUsIDEyOCwgNzYsIDc2LCA3NiwgMTI4LCA3NiwgNzQsIDg1LCA2OCwgCisgICAgNzMsIDc0LCA2OSwgMTI4LCA3NiwgNzQsIDY5LCAxMjgsIDc2LCA3NCwgMTI4LCA3NiwgNzMsIDg4LCAxMjgsIDc2LCA3MywgCisgICAgODcsIDc4LCAxMjgsIDc2LCA3MywgODYsIDgyLCAxOTcsIDc2LCA3MywgODQsIDg0LCA3NiwgMTk3LCA3NiwgNzMsIDg0LCAKKyAgICA4NCwgNjksIDIxMCwgNzYsIDczLCA4NCwgODIsIDE5MywgNzYsIDczLCA4NCwgMTI4LCA3NiwgNzMsIDgzLCAyMTMsIDc2LCAKKyAgICA3MywgODIsIDE5MywgNzYsIDczLCA4MSwgODUsIDczLCAxOTYsIDc2LCA3MywgODEsIDEyOCwgNzYsIDczLCA4MCwgODMsIAorICAgIDg0LCA3MywgNjcsIDc1LCAxMjgsIDc2LCA3MywgNzgsIDc1LCA3MywgNzgsIDE5OSwgNzYsIDczLCA3OCwgMjAzLCA3NiwgCisgICAgNzMsIDc4LCA3MSwgODMsIDY1LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA4MywgMTI4LCA3NiwgNzMsIDc4LCA2OSwgMjExLCAKKyAgICA3NiwgNzMsIDc4LCA2OSwgNDUsIDU3LCAxMjgsIDc2LCA3MywgNzgsIDY5LCA0NSwgNTUsIDEyOCwgNzYsIDczLCA3OCwgNjksIAorICAgIDQ1LCA1MSwgMTI4LCA3NiwgNzMsIDc4LCA2OSwgNDUsIDQ5LCAxMjgsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgCisgICAgNzYsIDczLCA3NywgNzcsIDg1LCA1MCwgMTI4LCA3NiwgNzMsIDc3LCA3NywgODUsIDEyOCwgNzYsIDczLCA3NywgNzcsIAorICAgIDIxMywgNzYsIDczLCA3NywgNzMsIDg0LCA2OSwgMTk2LCA3NiwgNzMsIDc3LCA3MywgODQsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCisgICAgMTI4LCA3NiwgNzMsIDc3LCA3MywgODQsIDEyOCwgNzYsIDczLCA3NywgNjksIDEyOCwgNzYsIDczLCA3NywgNjYsIDIxMywgCisgICAgNzYsIDczLCA3NiwgODksIDEyOCwgNzYsIDczLCA3NiwgNzMsIDg0LCA3MiwgMTI4LCA3NiwgNzMsIDc2LCAxMjgsIDc2LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCA3MiwgNzksIDg1LCA4MywgCisgICAgNjksIDEyOCwgNzYsIDczLCA3MSwgNzIsIDg0LCAxMjgsIDc2LCA3MywgNzAsIDY5LCAxMjgsIDc2LCA3MywgNjksIDg4LCAKKyAgICAxMjgsIDc2LCA3MywgNjksIDg0LCAxMjgsIDc2LCA3MywgNjksIDgwLCAxMjgsIDc2LCA3MywgNjksIDY5LCAxMjgsIDc2LCAKKyAgICA3MywgNjksIDEyOCwgNzYsIDczLCA2OCwgMTI4LCA3NiwgNzMsIDY2LCA4MiwgNjUsIDEyOCwgNzYsIDczLCA2NiwgNjksIAorICAgIDgyLCA4NCwgODksIDEyOCwgNzYsIDczLCA2NSwgNjYsIDczLCA3NiwgNzMsIDg0LCAyMTcsIDc2LCA3MiwgNzMsIDczLCAKKyAgICAxMjgsIDc2LCA3MiwgNjUsIDg2LCA3MywgODksIDY1LCA3OCwgNzMsIDEyOCwgNzYsIDcyLCA2NSwgMTk5LCA3NiwgNzIsIAorICAgIDY1LCA2NSwgMTI4LCA3NiwgNzIsIDEyOCwgNzYsIDY5LCA5MCwgNzIsIDEyOCwgNzYsIDY5LCA4OCwgMTI4LCA3NiwgNjksIAorICAgIDg2LCA2OSwgMjA0LCA3NiwgNjksIDg1LCA3NywgMTI4LCA3NiwgNjksIDg1LCA2NSwgNjksIDgwLCAxMjgsIDc2LCA2OSwgCisgICAgODUsIDY1LCA2OSwgNzcsIDEyOCwgNzYsIDY5LCA4NSwgMTI4LCA3NiwgNjksIDIxMywgNzYsIDY5LCA4NCwgODQsIDY5LCAKKyAgICA4MiwgODMsIDEyOCwgNzYsIDY5LCA4NCwgODQsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDIxMiwgNzYsIDY5LCA4MywgODMsIAorICAgIDY5LCAyMTAsIDc2LCA2OSwgODMsIDgzLCA0NSwgODQsIDcyLCA2NSwgNzgsIDEyOCwgNzYsIDY5LCA4MywgODMsIDQ1LCA4NCwgCisgICAgNzIsIDY1LCAyMDYsIDc2LCA2OSwgODAsIDEyOCwgNzYsIDY5LCA3OSwgODAsIDY1LCA4MiwgNjgsIDEyOCwgNzYsIDY5LCAKKyAgICA3OSwgMTI4LCA3NiwgNjksIDc4LCA4NCwgNzMsIDY3LCA4NSwgNzYsIDY1LCAyMTAsIDc2LCA2OSwgNzgsIDczLCA4MywgCisgICAgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIDcyLCA2OSwgNzgsIDY5LCA4MiwgMTI4LCA3NiwgNjksIDc4LCA3MSwgODQsIAorICAgIDIwMCwgNzYsIDY5LCA3OCwgNzEsIDY1LCAxMjgsIDc2LCA2OSwgNzgsIDcxLCAxOTMsIDc2LCA2OSwgNzcsIDc5LCA3OCwgCisgICAgMTI4LCA3NiwgNjksIDc3LCA3OSwgNzMsIDEyOCwgNzYsIDY5LCA3NiwgNjksIDg0LCAxMjgsIDc2LCA2OSwgNzYsIDY5LCAKKyAgICAyMTIsIDc2LCA2OSwgMjAzLCA3NiwgNjksIDczLCA3NywgNzcsIDY1LCAxMjgsIDc2LCA2OSwgNzMsIDc3LCA3NywgMTkzLCAKKyAgICA3NiwgNjksIDcxLCA4MywgMTI4LCA3NiwgNjksIDcxLCA3MywgNzksIDc4LCAxMjgsIDc2LCA2OSwgNzEsIDY5LCA4NCwgNzksIAorICAgIDIxMSwgNzYsIDY5LCA3MSwgMTI4LCA3NiwgNjksIDcwLCA4NCwgODcsIDY1LCA4MiwgNjgsIDgzLCAxMjgsIDc2LCA2OSwgCisgICAgNzAsIDg0LCA0NSwgODQsIDc5LCA0NSwgODIsIDczLCA3MSwgNzIsIDIxMiwgNzYsIDY5LCA3MCwgODQsIDQ1LCA4MywgODQsIAorICAgIDY5LCAyMDUsIDc2LCA2OSwgNzAsIDg0LCA0NSwgODMsIDczLCA2OCwgMTk3LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgzLCA3MiwgCisgICAgNjUsIDY4LCA2OSwgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDgwLCA3OSwgNzMsIDc4LCA4NCwgNzMsIDc4LCAxOTksIDc2LCAKKyAgICA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgNjgsIDY5LCAxOTYsIDc2LCA2OSwgNzAsIDg0LCA0NSwgNzIsIDY1LCA3OCwgCisgICAgMTk2LCA3NiwgNjksIDcwLCA4NCwgNDUsIDcwLCA2NSwgNjcsIDczLCA3OCwgMTk5LCA3NiwgNjksIDcwLCA4NCwgMTI4LCAKKyAgICA3NiwgNjksIDY5LCA4MiwgNjUsIDY5LCA4NywgNjUsIDEyOCwgNzYsIDY5LCA2OSwgNzUsIDEyOCwgNzYsIDY5LCA2OSwgNjksIAorICAgIDY5LCAxMjgsIDc2LCA2OSwgNjgsIDcxLCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgCisgICAgNzYsIDY5LCA2NSwgNzAsIDEyOCwgNzYsIDY5LCA2NSwgMTk4LCA3NiwgNjksIDY1LCA2OCwgNzMsIDc4LCAxOTksIDc2LCAKKyAgICA2OSwgNjUsIDY4LCA2OSwgODIsIDEyOCwgNzYsIDY5LCA2NSwgMTk2LCA3NiwgNjgsIDY1LCA3OCwgMTI4LCA3NiwgNjgsIAorICAgIDUwLCAxMjgsIDc2LCA2NywgMjAxLCA3NiwgNjcsIDE5NywgNzYsIDY1LCA5MCwgMjE3LCA3NiwgNjUsIDg5LCA2NSwgNzgsIAorICAgIDc4LCA2NSwgMTI4LCA3NiwgNjUsIDg4LCAxMjgsIDc2LCA2NSwgODcsIDEyOCwgNzYsIDY1LCAyMTUsIDc2LCA2NSwgODUsIAorICAgIDc2LCA2NSwgMTI4LCA3NiwgNjUsIDg1LCA3NSwgNjUsIDIxOCwgNzYsIDY1LCA4NCwgNzMsIDc4LCA2NSwgODQsIDE5NywgCisgICAgNzYsIDY1LCA4NCwgNzMsIDc1LCAxMjgsIDc2LCA2NSwgODQsIDY5LCA4MiwgNjUsIDIwNCwgNzYsIDY1LCA4NCwgMTk3LCAKKyAgICA3NiwgNjUsIDgzLCAyMTIsIDc2LCA2NSwgODIsIDg5LCA3OCwgNzEsIDY5LCA2NSwgMjA0LCA3NiwgNjUsIDgyLCA3MSwgNjksIAorICAgIDIxMCwgNzYsIDY1LCA4MiwgNzEsIDY5LCAxMjgsIDc2LCA2NSwgODIsIDcxLCAxOTcsIDc2LCA2NSwgODEsIDEyOCwgNzYsIAorICAgIDY1LCA4MCwgNjUsIDgxLCAxMjgsIDc2LCA2NSwgODAsIDEyOCwgNzYsIDY1LCA3OCwgODQsIDY5LCA4MiwgNzgsIDEyOCwgCisgICAgNzYsIDY1LCA3OCwgNzEsIDg1LCA2NSwgNzEsIDE5NywgNzYsIDY1LCA3OCwgNjksIDgzLCAxMjgsIDc2LCA2NSwgNzcsIDY5LCAKKyAgICA2OCwgNzIsIDEyOCwgNzYsIDY1LCA3NywgNjksIDY4LCAxMjgsIDc2LCA2NSwgNzcsIDY5LCAxOTYsIDc2LCA2NSwgNzcsIAorICAgIDY5LCAxMjgsIDc2LCA2NSwgNzcsIDE5NywgNzYsIDY1LCA3NywgNjgsIDY1LCAxMjgsIDc2LCA2NSwgNzcsIDY4LCAxMjgsIAorICAgIDc2LCA2NSwgNzcsIDY2LCA2OCwgMTkzLCA3NiwgNjUsIDc3LCA2NSwgNjgsIDcyLCAxMjgsIDc2LCA2NSwgNzYsIDEyOCwgCisgICAgNzYsIDY1LCAyMDQsIDc2LCA2NSwgNzUsIDc1LCA3MiwgNjUsIDc4LCA3MSwgODksIDY1LCA3OSwgMTI4LCA3NiwgNjUsIDc0LCAKKyAgICA2NSwgNzgsIDg5LCA2NSwgNzYsIDY1LCA3OCwgMTI4LCA3NiwgNjUsIDIwMSwgNzYsIDY1LCA3MiwgODMsIDcyLCA4NSwgCisgICAgMTI4LCA3NiwgNjUsIDcyLCAxMjgsIDc2LCA2NSwgNzEsIDg1LCA4MywgMTI4LCA3NiwgNjUsIDcxLCAyMTMsIDc2LCA2NSwgCisgICAgNzEsIDY1LCA4MiwgMTI4LCA3NiwgNjUsIDcxLCA2NSwgMjEwLCA3NiwgNjUsIDcxLCA2NSwgNjYsIDEyOCwgNzYsIDY1LCAKKyAgICA3MSwgNjUsIDE5NCwgNzYsIDY1LCA2OSwgODYsIDEyOCwgNzYsIDY1LCA2OSwgMTI4LCA3NiwgNjUsIDY4LCAyMTcsIDc2LCAKKyAgICA2NSwgNjcsIDc1LCAxMjgsIDc2LCA2NSwgNjcsIDY1LCAxMjgsIDc2LCA2NSwgNjYsIDc5LCA4NSwgODIsIDczLCA3OCwgNzEsIAorICAgIDEyOCwgNzYsIDY1LCA2NiwgNzksIDgyLCAxMjgsIDc2LCA2NSwgNjYsIDczLCA2NSwgNzYsIDczLCA5MCwgNjUsIDg0LCA3MywgCisgICAgNzksIDIwNiwgNzYsIDY1LCA2NiwgNzMsIDY1LCAyMDQsIDc2LCA2NSwgNjYsIDY1LCA4NCwgMTI4LCA3NiwgNjUsIDY1LCAKKyAgICA3OCwgNjUsIDY5LCAxMjgsIDc2LCA2NSwgNjUsIDc4LCAxMjgsIDc2LCA2NSwgNjUsIDc3LCA4NSwgMTI4LCA3NiwgNjUsIAorICAgIDY1LCA3NywgMTI4LCA3NiwgNjUsIDY1LCA3MywgMTI4LCA3NiwgNDgsIDQ4LCA1NCwgNjUsIDEyOCwgNzYsIDQ4LCA0OCwgCisgICAgNTAsIDY1LCAxMjgsIDc2LCA0NSwgODQsIDg5LCA4MCwgMTk3LCA3NiwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCAKKyAgICA3NSwgODksIDg1LCA4MiwgNzMsIDczLCAxMjgsIDc1LCA4OSwgODUsIDEyOCwgNzUsIDg5LCA3OSwgMTI4LCA3NSwgODksIAorICAgIDc2LCA3MywgODMsIDc3LCA2NSwgMTI4LCA3NSwgODksIDczLCAxMjgsIDc1LCA4OSwgNjksIDEyOCwgNzUsIDg5LCA2NSwgCisgICAgODQsIDcyLCA3OSwgMjExLCA3NSwgODksIDY1LCA2NSwgMTI4LCA3NSwgODksIDY1LCAxMjgsIDc1LCA4OCwgODcsIDczLCAKKyAgICAxMjgsIDc1LCA4OCwgODcsIDY5LCA2OSwgMTI4LCA3NSwgODgsIDg3LCA2OSwgMTI4LCA3NSwgODgsIDg3LCA2NSwgNjUsIAorICAgIDEyOCwgNzUsIDg4LCA4NywgNjUsIDEyOCwgNzUsIDg4LCA4NSwgMTI4LCA3NSwgODgsIDc5LCAxMjgsIDc1LCA4OCwgNzMsIAorICAgIDEyOCwgNzUsIDg4LCA2OSwgNjksIDEyOCwgNzUsIDg4LCA2OSwgMTI4LCA3NSwgODgsIDY1LCA2NSwgMTI4LCA3NSwgODgsIAorICAgIDY1LCAxMjgsIDc1LCA4NywgODUsIDUxLCA0OSwgNTYsIDEyOCwgNzUsIDg3LCA3OSwgNzksIDEyOCwgNzUsIDg3LCA3OSwgCisgICAgMTI4LCA3NSwgODcsIDczLCA3MywgMTI4LCA3NSwgODcsIDczLCAxMjgsIDc1LCA4NywgNjksIDY5LCAxMjgsIDc1LCA4NywgCisgICAgNjksIDEyOCwgNzUsIDg3LCA2NSwgODksIDEyOCwgNzUsIDg3LCA2NSwgNjksIDg0LCAxMjgsIDc1LCA4NywgNjUsIDY1LCAKKyAgICAxMjgsIDc1LCA4NiwgNjUsIDEyOCwgNzUsIDg2LCAxMjgsIDc1LCA4NSwgODgsIDEyOCwgNzUsIDg1LCA4NSwgNzIsIDEyOCwgCisgICAgNzUsIDg1LCA4NCwgMTI4LCA3NSwgODUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDg1LCA4MywgNzIsIDg1LCA1MCwgMTI4LCAKKyAgICA3NSwgODUsIDgyLCA4OCwgMTI4LCA3NSwgODUsIDgyLCA4NSwgOTAsIDY5LCA3MywgODIsIDc5LCAxMjgsIDc1LCA4NSwgODIsIAorICAgIDg0LCAxMjgsIDc1LCA4NSwgODIsIDc5LCA3OSwgNzgsIDY5LCAxMjgsIDc1LCA4NSwgODIsIDEyOCwgNzUsIDg1LCAyMTAsIAorICAgIDc1LCA4NSwgODEsIDEyOCwgNzUsIDg1LCA3OSwgODgsIDEyOCwgNzUsIDg1LCA3OSwgODAsIDEyOCwgNzUsIDg1LCA3OSwgCisgICAgMjA4LCA3NSwgODUsIDc5LCA3NywgMTI4LCA3NSwgODUsIDc5LCAxMjgsIDc1LCA4NSwgNzgsIDcxLCAxMjgsIDc1LCA4NSwgCisgICAgNzgsIDY4LCA2OCwgNjUsIDc2LCA3MywgODksIDY1LCAxMjgsIDc1LCA4NSwgNzYsIDEyOCwgNzUsIDg1LCAyMDQsIDc1LCAKKyAgICA4NSwgNjksIDg0LCAxMjgsIDc1LCA4NSwgNTUsIDEyOCwgNzUsIDg1LCA1MiwgMTI4LCA3NSwgODUsIDE4MCwgNzUsIDg1LCAKKyAgICA1MSwgMTI4LCA3NSwgODUsIDE3OSwgNzUsIDg0LCAxMjgsIDc1LCA4MywgODMsIDg1LCA4NSwgMTI4LCA3NSwgODMsIDgzLCAKKyAgICA4NSwgMTI4LCA3NSwgODMsIDgzLCA3OSwgNzksIDEyOCwgNzUsIDgzLCA4MywgNzksIDEyOCwgNzUsIDgzLCA4MywgNzMsIAorICAgIDczLCAxMjgsIDc1LCA4MywgODMsIDczLCAxMjgsIDc1LCA4MywgODMsIDY5LCA2OSwgMTI4LCA3NSwgODMsIDgzLCA2OSwgCisgICAgMTI4LCA3NSwgODMsIDgzLCA2NSwgODUsIDEyOCwgNzUsIDgzLCA4MywgNjUsIDczLCAxMjgsIDc1LCA4MywgODMsIDY1LCAKKyAgICA2NSwgMTI4LCA3NSwgODMsIDgzLCA2NSwgMTI4LCA3NSwgODMsIDgzLCAxMjgsIDc1LCA4MywgNzMsIDEyOCwgNzUsIDgyLCAKKyAgICA2OSwgNzcsIDY1LCA4MywgODQsIDczLCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgNzcsIDc5LCA4OSwgODAsIDc5LCA4MiwgCisgICAgODIsIDc5LCA3OSwgNzgsIDEyOCwgNzUsIDgyLCA2NSwgODQsIDczLCA3NywgNzksIDc1LCA3OSwgODUsIDcwLCA3MywgODMsIAorICAgIDc3LCA2NSwgMTI4LCA3NSwgODIsIDY1LCA4NCwgNzMsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDc1LCA4MiwgNjUsIDg0LCA3MywgCisgICAgNzcsIDE5MywgNzUsIDgwLCA4NSwgMTI4LCA3NSwgODAsIDc5LCA4MSwgMTI4LCA3NSwgODAsIDc5LCA3OSwgMTI4LCA3NSwgCisgICAgODAsIDc5LCAxMjgsIDc1LCA4MCwgNzMsIDEyOCwgNzUsIDgwLCA2OSwgODUsIDg4LCAxMjgsIDc1LCA4MCwgNjksIDY5LCAKKyAgICAxMjgsIDc1LCA4MCwgNjksIDEyOCwgNzUsIDgwLCA2NSwgODIsIDY1LCA4MSwgMTI4LCA3NSwgODAsIDY1LCA3OCwgMTI4LCAKKyAgICA3NSwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODgsIDEyOCwgNzUsIDc5LCA4NiwgODUsIDg1LCAxMjgsIDc1LCA3OSwgODQsIAorICAgIDc5LCAxMjgsIDc1LCA3OSwgODIsIDg1LCA3OCwgNjUsIDEyOCwgNzUsIDc5LCA4MiwgNzksIDc4LCA3MywgODMsIDEyOCwgCisgICAgNzUsIDc5LCA4MiwgNjksIDY1LCAyMDYsIDc1LCA3OSwgODIsIDY1LCA3OCwgNzMsIDE5NSwgNzUsIDc5LCA4MSwgNzgsIDY4LCAKKyAgICA3OSwgNzgsIDEyOCwgNzUsIDc5LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA3OSwgODAsIDEyOCwgNzUsIDc5LCA3OSwgODAsIAorICAgIDc5LCAxMjgsIDc1LCA3OSwgNzksIDc3LCA4NSwgODUsIDg0LCAxMjgsIDc1LCA3OSwgNzksIDEyOCwgNzUsIDc5LCA3OCwgCisgICAgODQsIDY5LCA4NiwgNzcsIDY1LCAxMjgsIDc1LCA3OSwgNzgsIDg0LCA2OSwgODYsIDc3LCAxOTMsIDc1LCA3OSwgNzcsIAorICAgIDIwMSwgNzUsIDc5LCA3NywgNjYsIDg1LCA4NiwgNjUsIDEyOCwgNzUsIDc5LCA3NywgNjYsIDg1LCA4NiwgMTkzLCA3NSwgCisgICAgNzksIDc3LCA2NiwgMjEzLCA3NSwgNzksIDc1LCA3OSwgMTI4LCA3NSwgNzksIDc1LCAxMjgsIDc1LCA3OSwgMjAzLCA3NSwgCisgICAgNzksIDczLCAxMjgsIDc1LCA3OSwgMjAxLCA3NSwgNzksIDcyLCAxMjgsIDc1LCA3OSwgNzEsIDcyLCA3OSwgNzcsIDEyOCwgCisgICAgNzUsIDc5LCA2OSwgODQsIDEyOCwgNzUsIDc5LCA2NSwgNzYsIDY1LCAxMjgsIDc1LCA3OSwgNjUsIDEyOCwgNzUsIDc4LCAKKyAgICA3MywgNzEsIDcyLCA4NCwgMTI4LCA3NSwgNzgsIDczLCA3MSwgNzIsIDIxMiwgNzUsIDc4LCA3MywgNzAsIDY5LCAxMjgsIAorICAgIDc1LCA3OCwgNzMsIDcwLCAxOTcsIDc1LCA3NywgMTI4LCA3NSwgMjA1LCA3NSwgNzYsIDczLCA4NCwgNzksIDc4LCAxMjgsIAorICAgIDc1LCA3NiwgNjUsIDgzLCA3NywgNjUsIDEyOCwgNzUsIDc2LCA2NSwgODMsIDc3LCAxOTMsIDc1LCA3NiwgNjUsIDEyOCwgCisgICAgNzUsIDc2LCAxMjgsIDc1LCA3NSwgODUsIDEyOCwgNzUsIDc1LCA3OSwgMTI4LCA3NSwgNzUsIDczLCAxMjgsIDc1LCA3NSwgCisgICAgNjksIDY5LCAxMjgsIDc1LCA3NSwgNjksIDEyOCwgNzUsIDc1LCA2NSwgMTI4LCA3NSwgNzUsIDEyOCwgNzUsIDc0LCA2OSwgCisgICAgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgODQsIDczLCA3NSwgNjksIDg1LCA4NCwgMTI4LCA3NSwgNzMsIDg5LCAKKyAgICA2OSwgNzksIDc1LCA0NSwgODMsIDczLCA3OSwgODMsIDQ1LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCAxMjgsIDc1LCA3MywgCisgICAgODksIDY5LCA3OSwgNzUsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCA3NSwgNDUsIAorICAgIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3NSwgNzMsIDg5LCA2OSwgNzksIDc1LCA0NSwgNzgsIDczLCA2OSwgODUsIDc4LCAKKyAgICAxMjgsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDQ1LCA3NSwgNzIsIDczLCA2OSwgODUsIDc1LCA3MiwgMTI4LCA3NSwgNzMsIAorICAgIDg5LCA2OSwgNzksIDc1LCA0NSwgNjcsIDcyLCA3MywgNjksIDg1LCA2NywgNzIsIDEyOCwgNzUsIDczLCA4OSwgNjksIDc5LCAKKyAgICAyMDMsIDc1LCA3MywgODgsIDEyOCwgNzUsIDczLCA4NCwgMTI4LCA3NSwgNzMsIDgzLCA4MywgNzMsIDc4LCAxOTksIDc1LCAKKyAgICA3MywgODMsIDgzLCAxMjgsIDc1LCA3MywgODMsIDIxMSwgNzUsIDczLCA4MywgNzMsIDc3LCA1MywgMTI4LCA3NSwgNzMsIAorICAgIDgzLCA3MywgNzcsIDE4MSwgNzUsIDczLCA4MywgNzIsIDEyOCwgNzUsIDczLCA4MywgNjUsIDc2LCAxMjgsIDc1LCA3MywgCisgICAgODIsIDc5LCA4NywgNjUsIDg0LCA4NCwgNzksIDEyOCwgNzUsIDczLCA4MiwgNzksIDc3LCA2OSwgNjksIDg0LCA3OSwgODIsIAorICAgIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCA3MSwgODUsIDgyLCA2NSwgNzcsIDg1LCAxMjgsIDc1LCA3MywgODIsIDc5LCAKKyAgICAxMjgsIDc1LCA3MywgODIsIDcxLCA3MiwgNzMsIDIxOCwgNzUsIDczLCA4MSwgMTI4LCA3NSwgNzMsIDgwLCAxMjgsIDc1LCAKKyAgICA3MywgMjA4LCA3NSwgNzMsIDc4LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3NSwgNzMsIDc4LCA2OCwgNjksIDgyLCA3MSwgNjUsIAorICAgIDgyLCA4NCwgNjksIDc4LCAxMjgsIDc1LCA3MywgNzcsIDc5LCA3OCwgNzksIDEyOCwgNzUsIDczLCA3MywgMTI4LCA3NSwgCisgICAgNzMsIDcyLCAxMjgsIDc1LCA3MywgNjksIDg4LCAxMjgsIDc1LCA3MywgNjksIDgwLCAxMjgsIDc1LCA3MywgNjksIDY5LCAKKyAgICA3NywgMTI4LCA3NSwgNzMsIDY5LCAxMjgsIDc1LCA3MywgNjgsIDEyOCwgNzUsIDczLCAxOTYsIDc1LCA3MywgNjcsIDc1LCAKKyAgICAxMjgsIDc1LCA3MiwgOTAsIDEyOCwgNzUsIDcyLCA4NywgNjUsIDczLCAxMjgsIDc1LCA3MiwgODUsIDY5LCA3OCwgNDUsIAorICAgIDc2LCA4NSwgMTk3LCA3NSwgNzIsIDg1LCA2OSwgMjA2LCA3NSwgNzIsIDg1LCA2OCwgNjUsIDc3LCAxMjgsIDc1LCA3MiwgCisgICAgODUsIDY1LCA4NCwgMTI4LCA3NSwgNzIsIDc5LCA4NSwgMTI4LCA3NSwgNzIsIDc5LCAyMTIsIDc1LCA3MiwgNzksIDc4LCAKKyAgICAxMjgsIDc1LCA3MiwgNzksIDc3LCA4NSwgODQsIDEyOCwgNzUsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIDIwNywgNzUsIDcyLCAKKyAgICA3NywgMjEzLCA3NSwgNzIsIDczLCA4NCwgMTI4LCA3NSwgNzIsIDczLCA3OCwgODksIDY1LCAxMjgsIDc1LCA3MiwgNzMsIAorICAgIDY5LCA4NSwgNzUsIDIwMCwgNzUsIDcyLCA3MywgMTI4LCA3NSwgNzIsIDcyLCA3OSwgMTI4LCA3NSwgNzIsIDcyLCA2NSwgCisgICAgMTI4LCA3NSwgNzIsIDY5LCA4NCwgNzIsIDEyOCwgNzUsIDcyLCA2OSwgNzMsIDEyOCwgNzUsIDcyLCA2OSwgNjksIDEyOCwgCisgICAgNzUsIDcyLCA2OSwgMTI4LCA3NSwgNzIsIDY1LCA4MiwgNzksIDgzLCA3MiwgODQsIDcyLCAyMDEsIDc1LCA3MiwgNjUsIDgyLCAKKyAgICAxMjgsIDc1LCA3MiwgNjUsIDgwLCA3MiwgMTI4LCA3NSwgNzIsIDY1LCA3OCwgMTk5LCA3NSwgNzIsIDY1LCA3OCwgNjgsIAorICAgIDE5MywgNzUsIDcyLCA2NSwgNzgsIDEyOCwgNzUsIDcyLCA2NSwgNzcsIDg0LCAyMDEsIDc1LCA3MiwgNjUsIDc1LCA2NSwgCisgICAgODMsIDgzLCA3MywgNjUsIDIwNiwgNzUsIDcyLCA2NSwgNzMsIDEyOCwgNzUsIDcyLCA2NSwgNzIsIDEyOCwgNzUsIDcyLCAKKyAgICA2NSwgMjAwLCA3NSwgNzIsIDY1LCA2NSwgMTI4LCA3NSwgNzEsIDEyOCwgNzUsIDY5LCA4OSwgNjcsIDY1LCA4MCwgMTI4LCAKKyAgICA3NSwgNjksIDg5LCA2NywgNjUsIDIwOCwgNzUsIDY5LCA4OSwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDc1LCA2OSwgODgsIAorICAgIDEyOCwgNzUsIDY5LCA4NSwgODksIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDcyLCA2OSwgODUsIDY1LCA2OSwgCisgICAgODAsIDEyOCwgNzUsIDY5LCA4NSwgODMsIDY5LCA4NSwgODgsIDEyOCwgNzUsIDY5LCA4NSwgODAsIDg1LCA4MSwgMTI4LCAKKyAgICA3NSwgNjksIDg1LCA3OSwgMjEyLCA3NSwgNjksIDg1LCA3NywgMTI4LCA3NSwgNjksIDg1LCA3NSwgNjksIDg1LCA4NCwgNzgsIAorICAgIDY4LCA2NSwgMTI4LCA3NSwgNjksIDg1LCA3NSwgNjUsIDgxLCAxMjgsIDc1LCA2OSwgODUsIDY1LCA2OSwgODQsIDc3LCA2OSwgCisgICAgODUsIDc4LCAxMjgsIDc1LCA2OSwgODUsIDY1LCA2OSwgODIsIDczLCAxMjgsIDc1LCA2OSwgODQsIDg0LCAyMDEsIDc1LCAKKyAgICA2OSwgODMsIDcyLCA1MCwgMTI4LCA3NSwgNjksIDgyLCA2OSwgODQsIDEyOCwgNzUsIDY5LCA3OSwgODcsIDEyOCwgNzUsIAorICAgIDY5LCA3OCwgODQsIDczLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3NSwgNjksIDc4LCA4NCwgNzMsIDc3LCA2NSwgODQsIDE5MywgCisgICAgNzUsIDY5LCA3OCwgODQsIDczLCA3NywgMTkzLCA3NSwgNjksIDc4LCA2NSwgODQsIDEyOCwgNzUsIDY5LCA3OCwgMTI4LCAKKyAgICA3NSwgNjksIDIwNiwgNzUsIDY5LCA3NywgODAsIDg1LCA3NiwgMTI4LCA3NSwgNjksIDc3LCA4MCwgODUsIDIwNCwgNzUsIAorICAgIDY5LCA3NywgODAsIDc2LCA3MywgMTI4LCA3NSwgNjksIDc3LCA4MCwgNzYsIDIwMSwgNzUsIDY5LCA3NywgODAsIDcyLCA4MiwgCisgICAgNjksIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc3LCA2NiwgNjUsIDc4LCA3MSwgMTI4LCA3NSwgNjksIDc2LCA4NiwgNzMsIAorICAgIDIwNiwgNzUsIDY5LCA3MiwgNjksIDcyLCAxMjgsIDc1LCA2OSwgNzIsIDY5LCAyMDAsIDc1LCA2OSwgNzIsIDEyOCwgNzUsIAorICAgIDY5LCA3MCwgODUsIDc2LCA2NSwgMTI4LCA3NSwgNjksIDY5LCA4MywgODUsIDEyOCwgNzUsIDY5LCA2OSwgODAsIDczLCA3OCwgCisgICAgMTk5LCA3NSwgNjksIDY5LCA3OCwgNzEsIDEyOCwgNzUsIDY3LCA2NSwgNzYsIDEyOCwgNzUsIDY2LCAxMjgsIDc1LCA2NSwgCisgICAgOTAsIDY1LCA3NSwgMjAwLCA3NSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3NSwgNjUsIDg5LCA2NSwgMjAwLCAKKyAgICA3NSwgNjUsIDg4LCAxMjgsIDc1LCA2NSwgODcsIDczLCAxMjgsIDc1LCA2NSwgODYsIDg5LCA3NSwgNjUsIDEyOCwgNzUsIAorICAgIDY1LCA4NSwgNzgsIDY1LCAxMjgsIDc1LCA2NSwgODUsIDIwNiwgNzUsIDY1LCA4NSwgMTI4LCA3NSwgNjUsIDg0LCA3OSwgCisgICAgMTI4LCA3NSwgNjUsIDg0LCA3MiwgNzMsIDgzLCA4NCwgNzMsIDEyOCwgNzUsIDY1LCA4NCwgNzIsIDY1LCA3NSwgMTkzLCAKKyAgICA3NSwgNjUsIDg0LCA2NSwgODYsIDY1LCA4MywgNzcsIDY1LCAxMjgsIDc1LCA2NSwgODQsIDY1LCA4NiwgMTkzLCA3NSwgNjUsIAorICAgIDg0LCA2NSwgNzUsIDY1LCA3OCwgNjUsIDQ1LCA3MiwgNzMsIDgyLCA2NSwgNzEsIDY1LCA3OCwgMTkzLCA3NSwgNjUsIDgzLCAKKyAgICA4MiwgNjUsIDg0LCA2NSwgNzgsIDEyOCwgNzUsIDY1LCA4MywgODIsIDY1LCA4NCwgNjUsIDIwNiwgNzUsIDY1LCA4MywgODIsIAorICAgIDY1LCAxMjgsIDc1LCA2NSwgODMsIDgyLCAxOTMsIDc1LCA2NSwgODMsIDc1LCA2NSwgNzYsIDEyOCwgNzUsIDY1LCA4MywgCisgICAgNzUsIDY1LCAyMDQsIDc1LCA2NSwgODMsIDcyLCA3NywgNzMsIDgyLCAyMDEsIDc1LCA2NSwgODIsIDgzLCA3MiwgNjUsIDc4LCAKKyAgICA2NSwgMTI4LCA3NSwgNjUsIDgyLCA3OSwgODIsIDczLCA3MywgMTI4LCA3NSwgNjUsIDgyLCAyMDcsIDc1LCA2NSwgODIsIAorICAgIDY5LCAyMDYsIDc1LCA2NSwgODIsIDY1LCA4NCwgODQsIDc5LCAxMjgsIDc1LCA2NSwgODIsIDY1LCA3OCwgMTI4LCA3NSwgCisgICAgNjUsIDgwLCA4OSwgNjksIDc5LCA4NSwgNzgsIDgzLCA4MywgNjUsIDc4LCA3MSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIAorICAgIDc1LCA2NSwgODAsIDg5LCA2OSwgNzksIDg1LCA3OCwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDc1LCA2NSwgODAsIDg5LCAKKyAgICA2OSwgNzksIDg1LCA3OCwgODAsIDcyLCA3MywgNjksIDg1LCA4MCwgNzIsIDEyOCwgNzUsIDY1LCA4MCwgODksIDY5LCA3OSwgCisgICAgODUsIDc4LCA3NywgNzMsIDY5LCA4NSwgNzcsIDEyOCwgNzUsIDY1LCA4MCwgODAsIDY1LCAxMjgsIDc1LCA2NSwgODAsIDgwLCAKKyAgICAxOTMsIDc1LCA2NSwgODAsIDc5LCAxMjgsIDc1LCA2NSwgODAsIDcyLCAxMjgsIDc1LCA2NSwgODAsIDY1LCA3NiwgMTI4LCAKKyAgICA3NSwgNjUsIDgwLCA2NSwgMTI4LCA3NSwgNjUsIDc4LCA4NCwgNjUsIDc0LCAxOTMsIDc1LCA2NSwgNzgsIDcxLCAxMjgsIAorICAgIDc1LCA2NSwgNzgsIDE5OSwgNzUsIDY1LCA3OCwgNjUsIDc1LCA3OSwgMTI4LCA3NSwgNjUsIDc3LCA1MiwgMTI4LCA3NSwgCisgICAgNjUsIDc3LCA1MCwgMTI4LCA3NSwgNjUsIDc3LCAxMjgsIDc1LCA2NSwgNzUsIDc5LCAxMjgsIDc1LCA2NSwgNzUsIDY1LCAKKyAgICA2NiwgNjUsIDg0LCAxMjgsIDc1LCA2NSwgNzUsIDEyOCwgNzUsIDY1LCAyMDMsIDc1LCA2NSwgNzMsIDg0LCA3MiwgMjAxLCAKKyAgICA3NSwgNjUsIDczLCA4MiwgNzMsIDEyOCwgNzUsIDY1LCA3MywgMTI4LCA3NSwgNjUsIDIwMSwgNzUsIDY1LCA3MCwgNjUsIAorICAgIDEyOCwgNzUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDE5OCwgNzUsIDY1LCA2OCwgNTMsIDEyOCwgNzUsIDY1LCA2OCwgMTgxLCAKKyAgICA3NSwgNjUsIDY4LCA1MiwgMTI4LCA3NSwgNjUsIDY4LCA1MSwgMTI4LCA3NSwgNjUsIDY4LCAxNzksIDc1LCA2NSwgNjgsIAorICAgIDUwLCAxMjgsIDc1LCA2NSwgNjgsIDEyOCwgNzUsIDY1LCA2NiwgMTkzLCA3NSwgNjUsIDY2LCAxMjgsIDc1LCA2NSwgNjUsIAorICAgIDczLCAxMjgsIDc1LCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3NSwgNjUsIDY1LCA3MCwgMTI4LCA3NSwgNjUsIDUwLCAxMjgsIAorICAgIDc1LCA2NSwgMTc4LCA3NSwgNDgsIDQ4LCA1NiwgMTI4LCA3NSwgNDgsIDQ4LCA1NSwgMTI4LCA3NSwgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3NSwgNDgsIDQ4LCA1MywgMTI4LCA3NSwgNDgsIDQ4LCA1MiwgMTI4LCA3NSwgNDgsIDQ4LCA1MSwgMTI4LCA3NSwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA3NSwgNDgsIDQ4LCA0OSwgMTI4LCA3NCwgODcsIDY1LCAxMjgsIDc0LCA4NSwgODUsIDEyOCwgCisgICAgNzQsIDg1LCA4NCwgMTI4LCA3NCwgODUsIDgzLCA4NCwgNzMsIDcwLCA3MywgNjcsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCAKKyAgICA3NCwgODUsIDgwLCA3MywgODQsIDY5LCA4MiwgMTI4LCA3NCwgODUsIDc5LCA4NCwgMTI4LCA3NCwgODUsIDc5LCA4MCwgCisgICAgMTI4LCA3NCwgODUsIDc4LCA3OSwgMTI4LCA3NCwgODUsIDc4LCA2OSwgMTI4LCA3NCwgODUsIDc2LCA4OSwgMTI4LCA3NCwgCisgICAgODUsIDY5LCA4NSwgNzMsIDEyOCwgNzQsIDg1LCA2OCwgODUsIDc2LCAxMjgsIDc0LCA4NSwgNjgsIDcxLCA2OSwgMTI4LCAKKyAgICA3NCwgODUsIDY4LCA2OSwgNzksIDQ1LCA4MywgODAsIDY1LCA3OCwgNzMsIDgzLCAyMDAsIDc0LCA3OSwgODksIDc5LCA4NSwgCisgICAgMjExLCA3NCwgNzksIDg5LCAxMjgsIDc0LCA3OSwgODYsIDY5LCAxMjgsIDc0LCA3OSwgMjEyLCA3NCwgNzksIDc4LCA3MSwgCisgICAgMTI4LCA3NCwgNzksIDc4LCAxOTMsIDc0LCA3OSwgNzUsIDY5LCA4MiwgMTI4LCA3NCwgNzksIDczLCA3OCwgNjksIDY4LCAKKyAgICAxMjgsIDc0LCA3OSwgNzMsIDc4LCAxMjgsIDc0LCA3OSwgNjUsIDEyOCwgNzQsIDc0LCA4OSwgODgsIDEyOCwgNzQsIDc0LCAKKyAgICA4OSwgODQsIDEyOCwgNzQsIDc0LCA4OSwgODAsIDEyOCwgNzQsIDc0LCA4OSwgMTI4LCA3NCwgNzQsIDg1LCA4OCwgMTI4LCAKKyAgICA3NCwgNzQsIDg1LCA4NCwgMTI4LCA3NCwgNzQsIDg1LCA4MiwgODgsIDEyOCwgNzQsIDc0LCA4NSwgODIsIDEyOCwgNzQsIAorICAgIDc0LCA4NSwgODAsIDEyOCwgNzQsIDc0LCA4NSwgNzksIDg4LCAxMjgsIDc0LCA3NCwgODUsIDc5LCA4MCwgMTI4LCA3NCwgCisgICAgNzQsIDg1LCA3OSwgMTI4LCA3NCwgNzQsIDg1LCAxMjgsIDc0LCA3NCwgNzksIDg4LCAxMjgsIDc0LCA3NCwgNzksIDg0LCAKKyAgICAxMjgsIDc0LCA3NCwgNzksIDgwLCAxMjgsIDc0LCA3NCwgNzksIDEyOCwgNzQsIDc0LCA3MywgODgsIDEyOCwgNzQsIDc0LCAKKyAgICA3MywgODQsIDEyOCwgNzQsIDc0LCA3MywgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIDg4LCAxMjgsIDc0LCA3NCwgNzMsIAorICAgIDY5LCA4NCwgMTI4LCA3NCwgNzQsIDczLCA2OSwgODAsIDEyOCwgNzQsIDc0LCA3MywgNjksIDEyOCwgNzQsIDc0LCA3MywgCisgICAgMTI4LCA3NCwgNzQsIDY5LCA2OSwgMTI4LCA3NCwgNzQsIDY5LCAxMjgsIDc0LCA3NCwgNjUsIDEyOCwgNzQsIDczLCA3NiwgCisgICAgMTI4LCA3NCwgNzMsIDczLCAxMjgsIDc0LCA3MywgNzIsIDg2LCA2NSwgNzcsIDg1LCA3NiwgNzMsIDg5LCA2NSwgMTI4LCAKKyAgICA3NCwgNzMsIDY1LCAxMjgsIDc0LCA3MiwgNzksIDEyOCwgNzQsIDcyLCA2OSwgNzIsIDEyOCwgNzQsIDcyLCA2NSwgNzgsIAorICAgIDEyOCwgNzQsIDcyLCA2NSwgNzcsIDEyOCwgNzQsIDcyLCA2NSwgNjUsIDEyOCwgNzQsIDcyLCA2NSwgMTI4LCA3NCwgNjksIAorICAgIDg1LCAxMjgsIDc0LCA2OSwgODIsIDg1LCA4MywgNjUsIDc2LCA2OSwgNzcsIDEyOCwgNzQsIDY5LCA4MiwgNjUsIDIwNiwgCisgICAgNzQsIDY5LCA4MiwgNjUsIDEyOCwgNzQsIDY5LCA4MiwgMTI4LCA3NCwgNjksIDcyLCAxMjgsIDc0LCA2OSwgMjAwLCA3NCwgCisgICAgNjksIDcxLCA3OSwgNzEsIDY1LCA3OCwgMTI4LCA3NCwgNjksIDY5LCA3NywgMTI4LCA3NCwgNjksIDY1LCA3OCwgODMsIAorICAgIDEyOCwgNzQsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzQsIDY1LCA4NiwgNzMsIDg5LCA2NSwgNzgsIDczLCAKKyAgICAxMjgsIDc0LCA2NSwgODUsIDEyOCwgNzQsIDY1LCA4MiwgMTI4LCA3NCwgNjUsIDgwLCA2NSwgNzgsIDY5LCA4MywgMTk3LCAKKyAgICA3NCwgNjUsIDgwLCA2NSwgNzgsIDEyOCwgNzQsIDY1LCA3OCwgODUsIDY1LCA4MiwgODksIDEyOCwgNzQsIDY1LCA3NiwgNzYsIAorICAgIDY1LCA3NCwgNjUsIDc2LCA2NSwgNzYsIDc5LCA4NSwgNzIsIDc5LCA4NSwgMTI4LCA3NCwgNjUsIDczLCAxMjgsIDc0LCA2NSwgCisgICAgNzIsIDEyOCwgNzQsIDY1LCA2OCwgNjksIDEyOCwgNzQsIDY1LCA2NywgNzUsIDQ1LCA3OSwgNDUsIDc2LCA2NSwgNzgsIDg0LCAKKyAgICA2OSwgODIsIDc4LCAxMjgsIDc0LCA2NSwgNjcsIDIwMywgNzQsIDQ1LCA4MywgNzMsIDc3LCA4MCwgNzYsIDczLCA3MCwgNzMsIAorICAgIDY5LCAxOTYsIDIwMiwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgNjUsIDEyOCwgNzMsIDkwLCA3MiwgNzMsIDg0LCA4MywgCisgICAgMTkzLCA3MywgOTAsIDcyLCA2OSwgMTI4LCA3MywgOTAsIDY1LCA3NSwgNjUsIDg5LCAxOTMsIDczLCA4OSwgNjksIDc1LCAKKyAgICAxMjgsIDczLCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDg1LCA3NCwgNjUsIDEyOCwgNzMsIDg1LCAxMjgsIDczLCAKKyAgICA4NCwgMjExLCA3MywgODQsIDY5LCA4MiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDg0LCA2OSwgNzcsIDEyOCwgNzMsIAorICAgIDgzLCA4MywgNzIsIDY1LCA4MiwgMTI4LCA3MywgODMsIDc5LCA3OCwgMTI4LCA3MywgODMsIDc5LCAyMDYsIDczLCA4MywgCisgICAgNzksIDc2LCA2NSwgODQsIDY5LCAxMjgsIDczLCA4MywgNjksIDc4LCA0NSwgNzMsIDgzLCA2OSwgNzgsIDEyOCwgNzMsIDgzLCAKKyAgICA2NSwgNzUsIDczLCAxOTMsIDczLCA4MywgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA3MywgODIsIDg1LCA4OSwgNjUsIAorICAgIDc4LCA3OCwgNjUsIDEyOCwgNzMsIDgyLCA4NSwgODUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MywgODIsIDc5LCA3OCwgCisgICAgNDUsIDY3LCA3OSwgODAsIDgwLCA2OSwgMjEwLCA3MywgODIsIDc5LCA3OCwgMTI4LCA3MywgNzksIDg0LCA3MywgNzAsIDczLCAKKyAgICA2OSwgMTk2LCA3MywgNzksIDg0LCA2NSwgODQsIDY5LCAxOTYsIDczLCA3OSwgODQsIDY1LCAxMjgsIDczLCA3OSwgODQsIAorICAgIDE5MywgNzMsIDc5LCA4MiwgMTI4LCA3MywgNzksIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA3MywgNzgsIDg2LCA3MywgCisgICAgODMsIDczLCA2NiwgNzYsIDE5NywgNzMsIDc4LCA4NiwgNjksIDgyLCA4NCwgNjksIDY4LCAxMjgsIDczLCA3OCwgODYsIDY5LCAKKyAgICA4MiwgODQsIDY5LCAxOTYsIDczLCA3OCwgODYsIDY5LCA4MiwgODMsIDE5NywgNzMsIDc4LCA4NCwgODIsIDc5LCA2OCwgODUsIAorICAgIDY3LCA2OSwgODIsIDEyOCwgNzMsIDc4LCA4NCwgNzMsIDEyOCwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MywgODksIDc2LCA3NiwgCisgICAgNjUsIDY2LCA3MywgMTk1LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCAKKyAgICA3OCwgODQsIDY5LCA4MiwgODMsIDY5LCA2NywgODQsIDczLCA3OSwgMjA2LCA3MywgNzgsIDg0LCA2OSwgODIsIDgzLCA2OSwgCisgICAgNjcsIDg0LCA3MywgNzgsIDE5OSwgNzMsIDc4LCA4NCwgNjksIDgyLCA4MiwgNzksIDY2LCA2NSwgNzgsIDcxLCAxMjgsIDczLCAKKyAgICA3OCwgODQsIDY5LCA4MiwgODAsIDc5LCA3NiwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgCisgICAgNzksIDY3LCA3NSwgNjksIDE5NiwgNzMsIDc4LCA4NCwgNjksIDgyLCA3NiwgNzMsIDc4LCA2OSwgNjUsIDIxMCwgNzMsIDc4LCAKKyAgICA4NCwgNjksIDgyLCA3NiwgNjUsIDY3LCA2OSwgMTk2LCA3MywgNzgsIDg0LCA2OSwgODIsIDczLCA3OSwgMjEwLCA3MywgNzgsIAorICAgIDg0LCA2OSwgODIsIDY5LCA4MywgMjEyLCA3MywgNzgsIDg0LCA2OSwgODIsIDY3LCA2NSwgNzYsIDY1LCA4NCwgNjksIDEyOCwgCisgICAgNzMsIDc4LCA4NCwgNjksIDcxLCA4MiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIAorICAgIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgODQsIDY5LCA3MSwgODIsIDY1LCA3NiwgMTI4LCA3MywgNzgsIDg0LCA2OSwgCisgICAgNzEsIDgyLCA2NSwgMjA0LCA3MywgNzgsIDgzLCA4NSwgNzYsIDY1LCAyMTAsIDczLCA3OCwgODMsIDg0LCA4MiwgODUsIDc3LCAKKyAgICA2OSwgNzgsIDg0LCA2NSwgMjA0LCA3MywgNzgsIDgzLCA3MywgNjgsIDY5LCAxMjgsIDczLCA3OCwgODMsIDY5LCA4MiwgODQsIAorICAgIDczLCA3OSwgMjA2LCA3MywgNzgsIDgzLCA2OSwgNjcsIDg0LCAxMjgsIDczLCA3OCwgODMsIDY3LCA4MiwgNzMsIDgwLCA4NCwgCisgICAgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzMsIDc4LCA4MCwgODUsIDIxMiwgNzMsIDc4LCA3OCwgNzksIDY3LCA2OSwgNzgsIDY3LCAKKyAgICA2OSwgMTI4LCA3MywgNzgsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDc4LCA2OSwgODIsIDEyOCwgNzMsIDc4LCA3OCwgNjksIAorICAgIDIxMCwgNzMsIDc4LCA3OCwgMTI4LCA3MywgNzgsIDczLCA3OCwgNzEsIDg1LCAxMjgsIDczLCA3OCwgNzMsIDEyOCwgNzMsIAorICAgIDc4LCA3MiwgNzMsIDY2LCA3MywgMjEyLCA3MywgNzgsIDcyLCA2OSwgODIsIDY5LCA3OCwgMjEyLCA3MywgNzgsIDcxLCA4NywgCisgICAgNjUsIDkwLCAxMjgsIDczLCA3OCwgNzAsIDc5LCA4MiwgNzcsIDY1LCA4NCwgNzMsIDc5LCAyMDYsIDczLCA3OCwgNzAsIDc2LCAKKyAgICA4NSwgNjksIDc4LCA2NywgNjksIDEyOCwgNzMsIDc4LCA3MCwgNzMsIDc4LCA3MywgODQsIDg5LCAxMjgsIDczLCA3OCwgNzAsIAorICAgIDczLCA3OCwgNzMsIDg0LCAyMTcsIDczLCA3OCwgNjgsIDg1LCA4MywgODQsIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc4LCA2OCwgCisgICAgNzMsIDgyLCA2OSwgNjcsIDIxMiwgNzMsIDc4LCA2OCwgNzMsIDY3LCA2NSwgODQsIDc5LCA4MiwgMTI4LCA3MywgNzgsIDY4LCAKKyAgICA3MywgNjcsIDY1LCA4NCwgNzksIDIxMCwgNzMsIDc4LCA2OCwgNzMsIDE5NSwgNzMsIDc4LCA2OCwgNzMsIDY1LCAyMDYsIAorICAgIDczLCA3OCwgNjgsIDY5LCA4OCwgMTI4LCA3MywgNzgsIDY4LCA2OSwgODAsIDY5LCA3OCwgNjgsIDY5LCA3OCwgMjEyLCA3MywgCisgICAgNzgsIDY3LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDczLCA3OCwgNjcsIDgyLCA2OSwgNjUsIDgzLCA2OSwgMjExLCAKKyAgICA3MywgNzgsIDY3LCA4MiwgNjksIDY1LCA4MywgNjksIDEyOCwgNzMsIDc4LCA2NywgNzksIDc3LCA4MCwgNzYsIDY5LCA4NCwgCisgICAgMTk3LCA3MywgNzgsIDY3LCA3OSwgNzcsIDczLCA3OCwgMTk5LCA3MywgNzgsIDY3LCA3NiwgODUsIDY4LCA3MywgNzgsIAorICAgIDE5OSwgNzMsIDc4LCA2NywgNzIsIDEyOCwgNzMsIDc4LCA2NiwgNzksIDIxNiwgNzMsIDc4LCA2NSwgODAsIDEyOCwgNzMsIAorICAgIDc4LCA0NSwgNjUsIDc2LCA2NSwgNzAsIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MywgNjUsIDIwNCwgNzMsIDc3LCA4MCwgCisgICAgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgODUsIDIwNSwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgNjUsIAorICAgIDEyOCwgNzMsIDc3LCA4MCwgNjksIDgyLCA3MCwgNjksIDY3LCA4NCwgMTkzLCA3MywgNzcsIDc4LCAxMjgsIDczLCA3NywgCisgICAgNzMsIDgzLCA2OSwgNzksIDIxMSwgNzMsIDc3LCA3MywgNzgsIDUxLCAxMjgsIDczLCA3NywgNzMsIDc4LCAxMjgsIDczLCAKKyAgICA3NywgNzMsIDIwNiwgNzMsIDc3LCA3MywgNzAsIDg0LCA3MiwgNzksIDgyLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgNzAsIAorICAgIDg0LCA3MiwgNzksIDgyLCA2NSwgMTI4LCA3MywgNzcsIDczLCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA3MywgCisgICAgNjgsIDczLCA2NSwgODIsIDcxLCA3OSwgNzgsIDEyOCwgNzMsIDc3LCA2NSwgNzEsIDE5NywgNzMsIDc2LCA4NSwgODksIDY1LCAKKyAgICA3OCwgNzgsIDY1LCAxMjgsIDczLCA3NiwgODUsIDg5LCAxMjgsIDczLCA3NiwgODUsIDg1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNzMsIDc2LCA4NSwgODQsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgNTIsIDEyOCwgNzMsIDc2LCA3MywgCisgICAgNzcsIDc3LCA4NSwgNTEsIDEyOCwgNzMsIDc2LCA3MywgNzcsIDc3LCA4NSwgMTI4LCA3MywgNzYsIDczLCA3NywgNzcsIAorICAgIDIxMywgNzMsIDc2LCA1MCwgMTI4LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNzMsIDc1LCA2NSwgODIsIDE5MywgNzMsIAorICAgIDc0LCAxMjgsIDczLCA3MywgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDczLCA3MSwgNzMsIDEyOCwgNzMsIDcxLCAyMDEsIAorICAgIDczLCA3MSwgNzEsIDg3LCA4MywgMTI4LCA3MywgNzAsIDczLCA3OCwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4NCwgCisgICAgNzMsIDc1LCA2OSwgODUsIDg0LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDg0LCA3MiwgNzMsIDY5LCA4NSwgODQsIAorICAgIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgzLCA4MywgNjUsIDc4LCA3MSwgNzUsIDczLCA4OSwgNjksIDc5LCAKKyAgICA3NSwgMTI4LCA3MywgNjksIDg1LCA3OCwgNzEsIDQ1LCA4MiwgNzMsIDY5LCA4NSwgNzYsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIAorICAgIDcxLCA0NSwgODAsIDczLCA2OSwgODUsIDgwLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDgwLCA3MiwgNzMsIDY5LCAKKyAgICA4NSwgODAsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDc1LCA3MywgODksIDY5LCA3OSwgNzUsIDEyOCwgNzMsIAorICAgIDY5LCA4NSwgNzgsIDcxLCA0NSwgNzUsIDcyLCA3MywgNjksIDg1LCA3NSwgNzIsIDEyOCwgNzMsIDY5LCA4NSwgNzgsIDcxLCAKKyAgICA0NSwgNjcsIDczLCA2OSwgODUsIDY3LCAxMjgsIDczLCA2OSwgODUsIDc4LCA3MSwgNDUsIDY3LCA3MiwgNzMsIDY5LCA4NSwgCisgICAgNjcsIDcyLCAxMjgsIDczLCA2OSwgODUsIDc4LCAxOTksIDczLCA2OCwgNzYsIDY5LCAxMjgsIDczLCA2OCwgNzMsIDc3LCAKKyAgICAxMjgsIDczLCA2OCwgNzMsIDIwNSwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY4LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjcsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY3LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDY1LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA2NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTcsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU3LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU1LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDU0LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUzLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTIsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUyLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTEsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUxLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDUwLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDksIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ5LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDY1LCA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA2NSwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDY1LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNzAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjksIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjYsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNjUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU3LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTcsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTYsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU2LCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTUsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTQsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTMsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTIsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUyLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTEsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNTAsIAorICAgIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAorICAgIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIAorICAgIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA1MiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAorICAgIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNzAsIDU3LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA3MCwgNTcsIDQ4LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNzAsIDU3LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDcwLCA1NywgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NywgNDgsIDUyLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTYsIDY4LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU2LCA2NywgNjUsIAorICAgIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NiwgNTcsIDY5LCA1MSwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDY4LCA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA2NSwgNTUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NSwgNTcsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTUsIDU0LCA2OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA1MywgNTEsIAorICAgIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NSwgNTMsIDQ5LCA3MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTUsIDQ5LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU1LCA0OCwgNjYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NCwgNzAsIDQ5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTQsIDY5LCA1NiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NSwgNTAsIAorICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTUsIDQ4LCA1NywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDU1LCA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1NCwgNTAsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NCwgNTMsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTQsIDUzLCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MywgNTMsIAorICAgIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1NCwgNTEsIDUzLCA1MywgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTQsIDUxLCA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDU0LCA1MCwgNTcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1NCwgNTAsIDUzLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTQsIDUwLCA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA3MCwgNTYsIAorICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNjgsIDY5LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDY2LCA1NiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA2NiwgNTMsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MywgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTMsIDU3LCA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1NiwgNzAsIAorICAgIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTMsIDY2LCA1NCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUyLCA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MywgNTEsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTMsIDUxLCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNjgsIAorICAgIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MywgNTAsIDU1LCA1MCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTMsIDUwLCA1MiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUzLCA1MCwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MywgNDksIDU2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgCisgICAgNTIsIDY5LCA2NSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNTYsIAorICAgIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MiwgNjksIDUwLCA2OCwgMTI4LCA3MywgCisgICAgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTIsIDY5LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIAorICAgIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUyLCA2OSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ5LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDksIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCAKKyAgICA0OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ5LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDksIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCAKKyAgICA0OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ5LCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ4LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDgsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCAKKyAgICA0OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNjUsIDQ4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA2NSwgNDgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDY1LCA0OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNjUsIDQ4LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA2NSwgNDgsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA3MCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDcwLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNzAsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA3MCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDcwLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNzAsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA3MCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY5LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjksIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY5LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjksIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjksIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY5LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY4LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjgsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2OCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY4LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjgsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2OCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY4LCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjgsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY3LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjcsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY3LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjcsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjYsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY2LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjUsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDY1LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNjUsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA2NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA2NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDY1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNjUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU3LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTcsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NywgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA2NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTcsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NywgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU3LCA1MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTcsIDQ5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NywgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU2LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTYsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NiwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTYsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NiwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU2LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTYsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NiwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU2LCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU1LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTUsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU1LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTUsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU1LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTUsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDU0LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTQsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1NCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDU0LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTQsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1NCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUzLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTMsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUzLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTMsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTMsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MywgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUzLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUyLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTIsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUyLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTIsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUyLCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTIsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUxLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTEsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTEsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUxLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTEsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNTAsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA1MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDUwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNTAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA1MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDUwLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDksIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDksIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDgsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA2NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NywgNDgsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCAKKyAgICA0OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTcsIDQ4LCA1MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NywgNDgsIDQ5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU3LCA0OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDcwLCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNzAsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA3MCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNzAsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA3MCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDcwLCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNzAsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA3MCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDcwLCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY5LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjksIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OSwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY5LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjksIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OSwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY5LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjksIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OCwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY4LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjgsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2OCwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY4LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjgsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2OCwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY3LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjcsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY3LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjcsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjcsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY2LCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjYsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY2LCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjYsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY2LCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjYsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY1LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjUsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNjUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA2NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDY1LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNjUsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA2NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTcsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NywgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU3LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTcsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NywgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU3LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTYsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NiwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDY3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU2LCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTYsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NiwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA1MiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDUxLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NiwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU2LCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTYsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU1LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTUsIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA2NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDY1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTUsIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU1LCA1MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTUsIDQ5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU0LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTQsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDU2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTQsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1NCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDU0LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTQsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1NCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDU0LCA0OCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDcwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUzLCA2NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTMsIDU3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MywgNTYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDU0LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTMsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUzLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTMsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MywgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUzLCA0OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTMsIDQ4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MiwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUyLCA1NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTIsIDU1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MiwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDUyLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUyLCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTIsIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MiwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUxLCA3MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTEsIDY5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MSwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA2NywgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDY2LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUxLCA1NCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTEsIDUzLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MSwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA1MSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTEsIDUwLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MSwgNDksIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUxLCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDcwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNjksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUwLCA2OCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTAsIDY3LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MCwgNjYsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA2NSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU3LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTYsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA1NSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDU0LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA1MCwgNTMsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDUwLCA1MiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNTAsIDUxLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA1MCwgNTAsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDUwLCA0OSwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNTAsIDQ4LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNzAsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2OSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDY4LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNjcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ5LCA2NiwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNDksIDY1LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA0OSwgNTcsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1NiwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDU1LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTQsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDksIDUyLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OSwgNTEsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ5LCA1MCwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNDksIDQ5LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA0OSwgNDgsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA3MCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY5LCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjgsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA2NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDY2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNjUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NywgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIAorICAgIDcwLCA1NiwgNDgsIDU2LCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCAKKyAgICA0OCwgNTUsIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1NCwgCisgICAgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUzLCAxMjgsIDczLCAKKyAgICA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNTIsIDEyOCwgNzMsIDY4LCA2OSwgCisgICAgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgNDUsIDUwLCA3MCwgNTYsIDQ4LCA1MSwgMTI4LCA3MywgNjgsIDY5LCA3OSwgNzEsIAorICAgIDgyLCA2NSwgODAsIDcyLCA0NSwgNTAsIDcwLCA1NiwgNDgsIDUwLCAxMjgsIDczLCA2OCwgNjksIDc5LCA3MSwgODIsIDY1LCAKKyAgICA4MCwgNzIsIDQ1LCA1MCwgNzAsIDU2LCA0OCwgNDksIDEyOCwgNzMsIDY4LCA2OSwgNzksIDcxLCA4MiwgNjUsIDgwLCA3MiwgCisgICAgNDUsIDUwLCA3MCwgNTYsIDQ4LCA0OCwgMTI4LCA3MywgNjgsIDY5LCA3OCwgODQsIDczLCA3MCwgNzMsIDY3LCA2NSwgODQsIAorICAgIDczLCA3OSwgNzgsIDEyOCwgNzMsIDY4LCA2OSwgNzgsIDg0LCA3MywgNjcsIDY1LCAyMDQsIDczLCA2NywgNzIsIDc5LCA4NSwgCisgICAgMTI4LCA3MywgNjcsIDcyLCA3OSwgODMsIDEyOCwgNzMsIDY3LCA3MiwgNzMsIDc3LCA2NSwgODQsIDc5LCA4MywgMTI4LCAKKyAgICA3MywgNjcsIDcyLCA2NSwgNjgsIDczLCA3OCwgMTI4LCA3MywgNjcsIDY5LCA3NiwgNjUsIDc4LCA2OCwgNzMsIDY3LCA0NSwgCisgICAgODksIDgyLCAxMjgsIDczLCA2NiwgNzMsIDcwLCA3MywgNzYsIDczLCAxMjgsIDczLCA2NSwgODUsIDY4LCA2NSwgMTI4LCAKKyAgICA3MywgNDgsIDQ5LCA1MywgMTI4LCA3MywgNDgsIDQ5LCA1MiwgMTI4LCA3MywgNDgsIDQ5LCA1MSwgMTI4LCA3MywgNDgsIAorICAgIDQ5LCA1MCwgMTI4LCA3MywgNDgsIDQ5LCA0OSwgNjUsIDEyOCwgNzMsIDQ4LCA0OSwgNDksIDEyOCwgNzMsIDQ4LCA0OSwgCisgICAgNDgsIDY1LCAxMjgsIDczLCA0OCwgNDksIDQ4LCAxMjgsIDczLCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA3MywgNDgsIDQ4LCAKKyAgICA1NywgMTI4LCA3MywgNDgsIDQ4LCA1NiwgMTI4LCA3MywgNDgsIDQ4LCA1NSwgMTI4LCA3MywgNDgsIDQ4LCA1NCwgMTI4LCAKKyAgICA3MywgNDgsIDQ4LCA1MywgNjUsIDEyOCwgNzMsIDQ4LCA0OCwgNTMsIDEyOCwgNzMsIDQ4LCA0OCwgNTIsIDEyOCwgNzMsIAorICAgIDQ4LCA0OCwgNTEsIDEyOCwgNzMsIDQ4LCA0OCwgNTAsIDEyOCwgNzMsIDQ4LCA0OCwgNDksIDEyOCwgNzMsIDQ1LCA4OSwgCisgICAgODUsIDEyOCwgNzMsIDQ1LCA4OSwgNzksIDEyOCwgNzMsIDQ1LCA4OSwgNjksIDc5LCAxMjgsIDczLCA0NSwgODksIDY5LCAKKyAgICAxMjgsIDczLCA0NSwgODksIDY1LCA2OSwgMTI4LCA3MywgNDUsIDg5LCA2NSwgNDUsIDc5LCAxMjgsIDczLCA0NSwgODksIAorICAgIDY1LCAxMjgsIDczLCA0NSwgNzksIDQ1LCA3MywgMTI4LCA3MywgNDUsIDc5LCAxMjgsIDczLCA0NSwgNjksIDg1LCAxMjgsIAorICAgIDczLCA0NSwgNjYsIDY5LCA2NSwgNzcsIDEyOCwgNzMsIDQ1LCA2NSwgODIsIDY1LCA2OSwgNjUsIDEyOCwgNzMsIDQ1LCA2NSwgCisgICAgMTI4LCA3MiwgOTAsIDkwLCA5MCwgNzEsIDEyOCwgNzIsIDkwLCA5MCwgOTAsIDEyOCwgNzIsIDkwLCA5MCwgODAsIDEyOCwgCisgICAgNzIsIDkwLCA5MCwgMTI4LCA3MiwgOTAsIDg3LCA3MSwgMTI4LCA3MiwgOTAsIDg3LCAxMjgsIDcyLCA5MCwgODQsIDEyOCwgCisgICAgNzIsIDkwLCA3MSwgMTI4LCA3MiwgODksIDgzLCA4NCwgNjksIDgyLCA2OSwgODMsIDczLCAyMTEsIDcyLCA4OSwgODAsIDc5LCAKKyAgICA2OCwgNzMsIDY1LCA4MywgODQsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNjUsIDg0LCA3MywgCisgICAgNzksIDIwNiwgNzIsIDg5LCA4MCwgNzIsIDY5LCA3OCwgNDUsIDc3LCA3MywgNzgsIDg1LCA4MywgMTI4LCA3MiwgODksIDgwLCAKKyAgICA3MiwgNjksIDc4LCAxMjgsIDcyLCA4OSwgODAsIDcyLCA2OSwgMjA2LCA3MiwgODgsIDg3LCA3MSwgMTI4LCA3MiwgODgsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgNzIsIDg4LCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4OCwgODUsIDc5LCA4MCwgMTI4LCA3MiwgCisgICAgODgsIDg1LCA3OSwgMTI4LCA3MiwgODgsIDc5LCA4OCwgMTI4LCA3MiwgODgsIDc5LCA4NCwgMTI4LCA3MiwgODgsIDc5LCAKKyAgICA4MCwgMTI4LCA3MiwgODgsIDc5LCAxMjgsIDcyLCA4OCwgNzMsIDg4LCAxMjgsIDcyLCA4OCwgNzMsIDg0LCAxMjgsIDcyLCAKKyAgICA4OCwgNzMsIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgODgsIDczLCA2OSwgODQsIDEyOCwgNzIsIAorICAgIDg4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA4OCwgNzMsIDY5LCAxMjgsIDcyLCA4OCwgNzMsIDEyOCwgNzIsIDg4LCA2OSwgCisgICAgODgsIDEyOCwgNzIsIDg4LCA2OSwgODAsIDEyOCwgNzIsIDg4LCA2OSwgMTI4LCA3MiwgODgsIDY1LCA4OCwgMTI4LCA3MiwgCisgICAgODgsIDY1LCA4NCwgMTI4LCA3MiwgODgsIDY1LCA4MCwgMTI4LCA3MiwgODgsIDY1LCAxMjgsIDcyLCA4NywgODUsIDEyOCwgCisgICAgNzIsIDg3LCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA4NiwgMTI4LCA3MiwgODUsIDgzLCA3MiwgNjksIDE5NiwgNzIsIDg1LCAKKyAgICA4MiwgNjUsIDc4LCAxMjgsIDcyLCA4NSwgNzksIDg0LCAxMjgsIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDY4LCAxMjgsIAorICAgIDcyLCA4NSwgNzgsIDY4LCA4MiwgNjksIDE5NiwgNzIsIDg1LCA3OCwgMTI4LCA3MiwgODUsIDc3LCA2NSwgNzgsIDEyOCwgCisgICAgNzIsIDg1LCA3NywgNjUsIDIwNiwgNzIsIDg1LCA3NiwgNTAsIDEyOCwgNzIsIDg1LCA3MywgNzMsIDg0LCA3OSwgMTI4LCAKKyAgICA3MiwgODUsIDY2LCA1MCwgMTI4LCA3MiwgODUsIDY2LCAxNzgsIDcyLCA4NSwgNjYsIDEyOCwgNzIsIDg1LCA2NSwgODIsIAorICAgIDY1LCA2OCwgNjgsIDc5LCAxMjgsIDcyLCA4NCwgODMsIDEyOCwgNzIsIDg0LCA3NCwgMTI4LCA3MiwgODIsIDg5LCA4NiwgCisgICAgNzgsIDczLCAxOTMsIDcyLCA4MCwgODcsIDcxLCAxMjgsIDcyLCA4MCwgNjUsIDEyOCwgNzIsIDgwLCAxMjgsIDcyLCA3OSwgCisgICAgODUsIDgzLCAxOTcsIDcyLCA3OSwgODUsIDgyLCA3MSwgNzYsIDY1LCA4MywgODMsIDEyOCwgNzIsIDc5LCA4NSwgODIsIDcxLCAKKyAgICA3NiwgNjUsIDgzLCAyMTEsIDcyLCA3OSwgODUsIDgyLCAxMjgsIDcyLCA3OSwgODUsIDIxMCwgNzIsIDc5LCA4NCwgNjksIAorICAgIDc2LCAxMjgsIDcyLCA3OSwgODQsIDY1LCAxMjgsIDcyLCA3OSwgODMsIDgwLCA3MywgODQsIDY1LCA3NiwgMTI4LCA3MiwgCisgICAgNzksIDgyLCA4MywgNjksIDEyOCwgNzIsIDc5LCA4MiwgODMsIDE5NywgNzIsIDc5LCA4MiwgNzgsIDgzLCAxMjgsIDcyLCAKKyAgICA3OSwgODIsIDczLCA5MCwgNzksIDc4LCA4NCwgNjUsIDc2LCA3NiwgMjE3LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCisgICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKKyAgICA3NiwgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1NCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAorICAgIDQ4LCA1NCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKKyAgICA1NCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1NCwgCisgICAgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIAorICAgIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCAKKyAgICA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MiwgCisgICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MSwgMTI4LCAKKyAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIAorICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MywgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCAKKyAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCisgICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAorICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKKyAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCisgICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKKyAgICA3NiwgNDUsIDQ4LCA1MiwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAorICAgIDQ4LCA1MSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKKyAgICA1MSwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgCisgICAgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIAorICAgIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCAKKyAgICA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MSwgNDUsIDQ4LCA0OCwgCisgICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1NCwgMTI4LCAKKyAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIAorICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCAKKyAgICA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgCisgICAgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIAorICAgIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA1MCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCAKKyAgICA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgCisgICAgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIAorICAgIDY1LCA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCAKKyAgICA3NiwgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgCisgICAgNDUsIDQ4LCA0OSwgNDUsIDQ4LCA1MCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIAorICAgIDQ4LCA0OSwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCAKKyAgICA0OSwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgCisgICAgNDUsIDQ4LCA1NCwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIAorICAgIDQ4LCA1MywgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCAKKyAgICA1MiwgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MSwgCisgICAgMTI4LCA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA1MCwgMTI4LCAKKyAgICA3MiwgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OSwgMTI4LCA3MiwgCisgICAgNzksIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgNDUsIDQ4LCA0OCwgNDUsIDQ4LCA0OCwgMTI4LCA3MiwgNzksIAorICAgIDgyLCA3MywgOTAsIDc5LCA3OCwgODQsIDY1LCA3NiwgMTI4LCA3MiwgNzksIDgyLCA3MywgMTI4LCA3MiwgNzksIDgyLCAKKyAgICAxOTMsIDcyLCA3OSwgNzksIDgyLCA4NSwgMTI4LCA3MiwgNzksIDc5LCA4MCwgMTI4LCA3MiwgNzksIDc5LCA3OCwgMTI4LCAKKyAgICA3MiwgNzksIDc5LCA3NSwgNjksIDE5NiwgNzIsIDc5LCA3OCwgNjksIDg5LCA2NiwgNjksIDY5LCAxMjgsIDcyLCA3OSwgNzgsIAorICAgIDY5LCAyMTcsIDcyLCA3OSwgNzcsIDc5LCA4NCwgNzIsIDY5LCA4NCwgNzMsIDY3LCAxMjgsIDcyLCA3OSwgNzcsIDc5LCA4NCwgCisgICAgNzIsIDY5LCA4NCwgNzMsIDE5NSwgNzIsIDc5LCA3NiwgNjksIDEyOCwgNzIsIDc5LCA3NiwgNjgsIDczLCA3OCwgMTk5LCAKKyAgICA3MiwgNzksIDc2LCA2NSwgNzcsIDEyOCwgNzIsIDc5LCA3NiwgNjUsIDIwNSwgNzIsIDc5LCA3NSwgNjUsIDEyOCwgNzIsIAorICAgIDc5LCA3MywgMTI4LCA3MiwgNzksIDY3LCA3MiwgNzksIDEyOCwgNzIsIDc4LCA4NSwgODQsIDEyOCwgNzIsIDc4LCA4NSwgCisgICAgNzksIDg4LCAxMjgsIDcyLCA3OCwgODUsIDc5LCAxMjgsIDcyLCA3OCwgNzksIDg4LCAxMjgsIDcyLCA3OCwgNzksIDg0LCAKKyAgICAxMjgsIDcyLCA3OCwgNzksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDg4LCAxMjgsIDcyLCA3OCwgNzMsIDg0LCAxMjgsIDcyLCAKKyAgICA3OCwgNzMsIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCA4OCwgMTI4LCA3MiwgNzgsIDczLCA2OSwgODQsIDEyOCwgNzIsIAorICAgIDc4LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3OCwgNzMsIDY5LCAxMjgsIDcyLCA3OCwgNzMsIDEyOCwgNzIsIDc4LCA2OSwgCisgICAgODgsIDEyOCwgNzIsIDc4LCA2OSwgODAsIDEyOCwgNzIsIDc4LCA2OSwgMTI4LCA3MiwgNzgsIDY1LCA4OCwgMTI4LCA3MiwgCisgICAgNzgsIDY1LCA4NCwgMTI4LCA3MiwgNzgsIDY1LCA4MCwgMTI4LCA3MiwgNzgsIDY1LCAxMjgsIDcyLCA3NywgODksIDg4LCAKKyAgICAxMjgsIDcyLCA3NywgODksIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg5LCA4MiwgMTI4LCA3MiwgNzcsIDg5LCA4MCwgMTI4LCAKKyAgICA3MiwgNzcsIDg5LCAxMjgsIDcyLCA3NywgODUsIDg4LCAxMjgsIDcyLCA3NywgODUsIDg0LCAxMjgsIDcyLCA3NywgODUsIAorICAgIDgyLCA4OCwgMTI4LCA3MiwgNzcsIDg1LCA4MiwgMTI4LCA3MiwgNzcsIDg1LCA4MCwgMTI4LCA3MiwgNzcsIDg1LCA3OSwgCisgICAgODgsIDEyOCwgNzIsIDc3LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NywgODUsIDc5LCAxMjgsIDcyLCA3NywgODUsIDEyOCwgCisgICAgNzIsIDc3LCA3OSwgODgsIDEyOCwgNzIsIDc3LCA3OSwgODQsIDEyOCwgNzIsIDc3LCA3OSwgODAsIDEyOCwgNzIsIDc3LCAKKyAgICA3OSwgMTI4LCA3MiwgNzcsIDczLCA4OCwgMTI4LCA3MiwgNzcsIDczLCA4NCwgMTI4LCA3MiwgNzcsIDczLCA4MCwgMTI4LCAKKyAgICA3MiwgNzcsIDczLCA2OSwgODgsIDEyOCwgNzIsIDc3LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NywgNzMsIDY5LCAxMjgsIAorICAgIDcyLCA3NywgNzMsIDEyOCwgNzIsIDc3LCA2OSwgMTI4LCA3MiwgNzcsIDY1LCA4OCwgMTI4LCA3MiwgNzcsIDY1LCA4NCwgCisgICAgMTI4LCA3MiwgNzcsIDY1LCA4MCwgMTI4LCA3MiwgNzcsIDY1LCAxMjgsIDcyLCA3NiwgODksIDg4LCAxMjgsIDcyLCA3NiwgCisgICAgODksIDg0LCAxMjgsIDcyLCA3NiwgODksIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg5LCA4MiwgMTI4LCA3MiwgNzYsIDg5LCAKKyAgICA4MCwgMTI4LCA3MiwgNzYsIDg5LCAxMjgsIDcyLCA3NiwgODUsIDg4LCAxMjgsIDcyLCA3NiwgODUsIDg0LCAxMjgsIDcyLCAKKyAgICA3NiwgODUsIDgyLCA4OCwgMTI4LCA3MiwgNzYsIDg1LCA4MiwgMTI4LCA3MiwgNzYsIDg1LCA4MCwgMTI4LCA3MiwgNzYsIAorICAgIDg1LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA4NSwgNzksIDgwLCAxMjgsIDcyLCA3NiwgODUsIDc5LCAxMjgsIDcyLCA3NiwgCisgICAgODUsIDEyOCwgNzIsIDc2LCA3OSwgODgsIDEyOCwgNzIsIDc2LCA3OSwgODAsIDEyOCwgNzIsIDc2LCA3OSwgMTI4LCA3MiwgCisgICAgNzYsIDczLCA4OCwgMTI4LCA3MiwgNzYsIDczLCA4NCwgMTI4LCA3MiwgNzYsIDczLCA4MCwgMTI4LCA3MiwgNzYsIDczLCAKKyAgICA2OSwgODgsIDEyOCwgNzIsIDc2LCA3MywgNjksIDgwLCAxMjgsIDcyLCA3NiwgNzMsIDY5LCAxMjgsIDcyLCA3NiwgNzMsIAorICAgIDEyOCwgNzIsIDc2LCA2OSwgODgsIDEyOCwgNzIsIDc2LCA2OSwgODAsIDEyOCwgNzIsIDc2LCA2OSwgMTI4LCA3MiwgNzYsIAorICAgIDY1LCA4OCwgMTI4LCA3MiwgNzYsIDY1LCA4NCwgMTI4LCA3MiwgNzYsIDY1LCA4MCwgMTI4LCA3MiwgNzYsIDY1LCAxMjgsIAorICAgIDcyLCA3NSwgMTI4LCA3MiwgNzMsIDkwLCA2NiwgMTI4LCA3MiwgNzMsIDgzLCA4NCwgNzksIDgyLCA3MywgMTk1LCA3MiwgCisgICAgNzMsIDgyLCA3MywgODEsIDEyOCwgNzIsIDczLCA3MSwgNzIsIDQ1LCA4MywgODAsIDY5LCA2OSwgMTk2LCA3MiwgNzMsIDcxLCAKKyAgICA3MiwgNDUsIDgyLCA2OSwgODYsIDY5LCA4MiwgODMsIDY5LCA2OCwgNDUsIDE4NSwgNzIsIDczLCA3MSwgNzIsIDQ1LCA3MiwgCisgICAgNjksIDY5LCA3NiwgNjksIDE5NiwgNzIsIDczLCA2OSwgODgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODMsIDczLCAKKyAgICA3OSwgODMsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgODIsIDczLCA2OSwgODUsIDc2LCAxMjgsIDcyLCA3MywgNjksIAorICAgIDg1LCA3MiwgNDUsIDgwLCA3MywgNjksIDg1LCA4MCwgMTI4LCA3MiwgNzMsIDY5LCA4NSwgNzIsIDQ1LCA3OCwgNzMsIDY5LCAKKyAgICA4NSwgNzgsIDEyOCwgNzIsIDczLCA2OSwgODUsIDcyLCA0NSwgNzcsIDczLCA2OSwgODUsIDc3LCAxMjgsIDcyLCA3MywgNjksIAorICAgIDg1LCAyMDAsIDcyLCA3MywgNjksIDgyLCA3OSwgNzEsIDc2LCA4OSwgODAsIDcyLCA3MywgMTk1LCA3MiwgNzMsIDY5LCAKKyAgICAxMjgsIDcyLCA3MywgNjgsIDczLCA3OCwgMTk5LCA3MiwgNzMsIDY4LCA2OSwgODQsIDEyOCwgNzIsIDczLCA2OCwgNjksIAorICAgIDEyOCwgNzIsIDczLCA2NiwgNzMsIDgzLCA2NywgODUsIDgzLCAxMjgsIDcyLCA3MiwgODcsIDY1LCAxMjgsIDcyLCA3MiwgCisgICAgODUsIDEyOCwgNzIsIDcyLCA3MywgMTI4LCA3MiwgNzIsIDY5LCA2OSwgMTI4LCA3MiwgNzIsIDY5LCAxMjgsIDcyLCA3MiwgCisgICAgNjUsIDY1LCAxMjgsIDcyLCA3MSwgMTI4LCA3MiwgNjksIDg4LCA3MywgNzAsIDc5LCA4MiwgMjA1LCA3MiwgNjksIDg4LCAKKyAgICA2NSwgNzEsIDgyLCA2NSwgMjA1LCA3MiwgNjksIDg4LCA2NSwgNzEsIDc5LCA3OCwgMTI4LCA3MiwgNjksIDgyLCA4NSwgODQsIAorICAgIDg1LCAxMjgsIDcyLCA2OSwgODIsIDg1LCAxMjgsIDcyLCA2OSwgODIsIDc3LCA3MywgODQsIDczLCA2NSwgMjA2LCA3MiwgCisgICAgNjksIDgyLCA3NywgNzMsIDc5LCA3OCwgNzMsIDY1LCAyMDYsIDcyLCA2OSwgODIsIDc3LCA2OSwgODMsIDEyOCwgNzIsIDY5LCAKKyAgICA4MiwgNjksIDEyOCwgNzIsIDY5LCA4MiwgNjYsIDEyOCwgNzIsIDY5LCA4MiwgNjUsIDY5LCA4NSwgMjA1LCA3MiwgNjksIAorICAgIDc4LCA3MSwgMTI4LCA3MiwgNjksIDc4LCAxOTksIDcyLCA2OSwgNzcsIDgwLCAxMjgsIDcyLCA2OSwgNzYsIDc3LCA2OSwgCisgICAgODQsIDEyOCwgNzIsIDY5LCA3NiwgNzcsIDY5LCAyMTIsIDcyLCA2OSwgNzYsIDIwNSwgNzIsIDY5LCA3NiwgNzMsIDY3LCAKKyAgICA3OSwgODAsIDg0LCA2OSwgODIsIDEyOCwgNzIsIDY5LCA3NSwgODUsIDg0LCA2NSwgNjUsIDgyLCA4NSwgMTI4LCA3MiwgNjksIAorICAgIDczLCA4MywgNjksIDczLCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA4OSwgMTI4LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCA3NiwgCisgICAgMjE3LCA3MiwgNjksIDY1LCA4NiwgNjksIDc4LCAxMjgsIDcyLCA2OSwgNjUsIDg2LCA2OSwgMjA2LCA3MiwgNjksIDY1LCAKKyAgICA4MiwgODQsIDgzLCAxMjgsIDcyLCA2OSwgNjUsIDgyLCA4NCwgNDUsIDgzLCA3MiwgNjUsIDgwLCA2OSwgMTk2LCA3MiwgNjksIAorICAgIDY1LCA4MiwgODQsIDEyOCwgNzIsIDY5LCA2NSwgODIsIDIxMiwgNzIsIDY5LCA2NSwgODIsIDQ1LCA3OCwgNzksIDQ1LCA2OSwgCisgICAgODYsIDczLCAyMDQsIDcyLCA2OSwgNjUsIDY4LCA4MywgODQsIDgyLCA3OSwgNzUsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIDY4LCAKKyAgICA4MywgODQsIDc5LCA3OCwgMTk3LCA3MiwgNjksIDY1LCA2OCwgODAsIDcyLCA3OSwgNzgsIDY5LCAxMjgsIDcyLCA2OSwgNjUsIAorICAgIDY4LCA3MywgNzgsIDcxLCAxMjgsIDcyLCA2NiwgNjUsIDgzLCA2NSwgNDUsIDY5LCA4MywgNjUsIDgzLCAxOTMsIDcyLCA2NiwgCisgICAgNjUsIDgzLCAxOTMsIDcyLCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDcyLCA2NSwgODYsIDY5LCAxMjgsIDcyLCAKKyAgICA2NSwgODUsIDgwLCA4NCwgODMsIDg0LCA3MywgNzcsIDc3LCA2OSwgMTI4LCA3MiwgNjUsIDg0LCA3MiwgNzMsIDEyOCwgNzIsIAorICAgIDY1LCA4NCwgNjksIDEyOCwgNzIsIDY1LCA4NCwgNjcsIDcyLCA3MywgNzgsIDE5OSwgNzIsIDY1LCA4NCwgNjUsIDE5OCwgCisgICAgNzIsIDY1LCA4MywgNjksIDIxMCwgNzIsIDY1LCA4MywgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCAKKyAgICA3OSwgNzgsIDEyOCwgNzIsIDY1LCA4MiwgODAsIDc5LCA3OSwgMjA2LCA3MiwgNjUsIDgyLCA3NywgNzksIDc4LCA3MywgNjcsIAorICAgIDEyOCwgNzIsIDY1LCA4MiwgNzUsIDc2LCA2OSwgNjUsIDIwNiwgNzIsIDY1LCA4MiwgNjgsIDc4LCA2OSwgODMsIDgzLCAKKyAgICAxMjgsIDcyLCA2NSwgODIsIDE5NiwgNzIsIDY1LCA4MCwgODAsIDIxNywgNzIsIDY1LCA3OCwgODUsIDc4LCA3OSwgMjA3LCAKKyAgICA3MiwgNjUsIDc4LCA3MSwgOTAsIDcyLCA3OSwgMjEzLCA3MiwgNjUsIDc4LCA2OCwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIAorICAgIDIxMSwgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgODMsIDEyOCwgNzIsIDY1LCA3OCwgNjgsIDc2LCA2OSwgMTI4LCA3MiwgCisgICAgNjUsIDc4LCA2OCwgNjYsIDY1LCA3MSwgMTI4LCA3MiwgNjUsIDc4LCA2OCwgMTI4LCA3MiwgNjUsIDc4LCA0NSwgNjUsIDc1LCAKKyAgICA2NSwgODQsIDEyOCwgNzIsIDY1LCA3NywgOTAsIDY1LCAxMjgsIDcyLCA2NSwgNzcsIDgzLCA4NCwgNjksIDIxMCwgNzIsIAorICAgIDY1LCA3NywgNzcsIDY5LCA4MiwgMTI4LCA3MiwgNjUsIDc3LCA3NywgNjksIDIxMCwgNzIsIDY1LCA3NywgNjYsIDg1LCA4MiwgCisgICAgNzEsIDY5LCA4MiwgMTI4LCA3MiwgNjUsIDc2LCA4MSwgNjUsIDEyOCwgNzIsIDY1LCA3NiwgNzksIDEyOCwgNzIsIDY1LCAKKyAgICA3NiwgNzAsIDQ1LCA2NywgNzMsIDgyLCA2NywgNzYsIDE5NywgNzIsIDY1LCA3NiwgNzAsIDEyOCwgNzIsIDY1LCA3NiwgNjYsIAorICAgIDY5LCA4MiwgNjgsIDEyOCwgNzIsIDY1LCA3NiwgNjUsIDc4LCA4NCwgNjUsIDEyOCwgNzIsIDY1LCA3MywgODQsIDg1LCAKKyAgICAxMjgsIDcyLCA2NSwgNzMsIDgyLCA2NywgODUsIDg0LCAxMjgsIDcyLCA2NSwgNzMsIDgyLCAxMjgsIDcyLCA2NSwgNzEsIAorICAgIDc2LCA2NSwgMjE4LCA3MiwgNjUsIDcxLCA3NiwgMTI4LCA3MiwgNjUsIDcwLCA4NSwgNzUsIDcyLCA2NSwgMTI4LCA3MiwgCisgICAgNjUsIDcwLCA4NSwgNzUsIDcyLCAxMjgsIDcyLCA2NSwgNjksIDcxLCAyMDQsIDcyLCA2NSwgNjUsIDgyLCA4NSwgMTI4LCAKKyAgICA3MiwgNjUsIDY1LCA3NywgMTI4LCA3MiwgNjUsIDE5MywgNzIsIDY1LCA0NSwgNzIsIDY1LCAxMjgsIDcyLCA0OCwgNDgsIAorICAgIDU2LCAxMjgsIDcyLCA0OCwgNDgsIDU1LCAxMjgsIDcyLCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA3MiwgNDgsIDQ4LCA1NCwgCisgICAgMTI4LCA3MiwgNDgsIDQ4LCA1MywgMTI4LCA3MiwgNDgsIDQ4LCA1MiwgMTI4LCA3MiwgNDgsIDQ4LCA1MSwgMTI4LCA3MiwgCisgICAgNDgsIDQ4LCA1MCwgMTI4LCA3MiwgNDgsIDQ4LCA0OSwgMTI4LCA3MiwgNDUsIDg0LCA4OSwgODAsIDE5NywgNzEsIDg5LCAKKyAgICA4NSwgMTI4LCA3MSwgODksIDc5LCA3OCwgMTI4LCA3MSwgODksIDc5LCAxMjgsIDcxLCA4OSwgNzMsIDEyOCwgNzEsIDg5LCAKKyAgICA3MCwgMjEzLCA3MSwgODksIDY5LCA2OSwgMTI4LCA3MSwgODksIDY1LCA4MywgMTI4LCA3MSwgODksIDY1LCA2NSwgMTI4LCAKKyAgICA3MSwgODksIDY1LCAxMjgsIDcxLCA4OSwgMTI4LCA3MSwgODcsIDg1LCAxMjgsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDg3LCAKKyAgICA2OSwgNjksIDEyOCwgNzEsIDg3LCA2OSwgMTI4LCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgODcsIDY1LCAxMjgsIDcxLCAKKyAgICA4NiwgMTI4LCA3MSwgODUsIDgyLCA4NSwgODMsIDcyLCAxMjgsIDcxLCA4NSwgODIsIDg1LCA3OCwgMTI4LCA3MSwgODUsIAorICAgIDgyLCA2NSwgNzcsIDg1LCA4NCwgNzksIDc4LCAxMjgsIDcxLCA4NSwgODIsIDU1LCAxMjgsIDcxLCA4NSwgNzgsIDg1LCAKKyAgICAxMjgsIDcxLCA4NSwgNzgsIDIxMywgNzEsIDg1LCAyMDUsIDcxLCA4NSwgNzYsIDEyOCwgNzEsIDg1LCA3MywgODQsIDY1LCAKKyAgICA4MiwgMTI4LCA3MSwgODUsIDE5OSwgNzEsIDg1LCA2OSwgNzIsIDEyOCwgNzEsIDg1LCA2OSwgMjAwLCA3MSwgODUsIDY4LCAKKyAgICAxMjgsIDcxLCA4NSwgMTk2LCA3MSwgODUsIDY1LCA4MiwgNjgsIDgzLCA3NywgNjUsIDc4LCAxMjgsIDcxLCA4NSwgNjUsIAorICAgIDgyLCA2OCwgNjksIDY4LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjgsIDY5LCAxOTYsIDcxLCA4NSwgCisgICAgNjUsIDgyLCA2OCwgMTI4LCA3MSwgODUsIDY1LCA4MiwgNjUsIDc4LCAyMDEsIDcxLCA4NSwgMTkzLCA3MSwgODUsIDE3OCwgCisgICAgNzEsIDg0LCA2OSwgMjEwLCA3MSwgODMsIDg1LCA3NywgMTI4LCA3MSwgODMsIDg1LCAyMDUsIDcxLCA4MiwgMjEzLCA3MSwgCisgICAgODIsIDc5LCA4NywgNzMsIDc4LCAxOTksIDcxLCA4MiwgNzksIDg1LCA3OCwgNjgsIDEyOCwgNzEsIDgyLCA3OSwgNzgsIDg0LCAKKyAgICA3MiwgNzMsIDgzLCA3NywgNjUsIDg0LCA2NSwgMTI4LCA3MSwgODIsIDczLCA3OCwgNzgsIDczLCA3OCwgMTk5LCA3MSwgODIsIAorICAgIDczLCA3NywgNjUsIDY3LCA3MywgNzgsIDE5OSwgNzEsIDgyLCA2OSwgNzEsIDc5LCA4MiwgNzMsIDY1LCAyMDYsIDcxLCA4MiwgCisgICAgNjksIDY5LCAyMDYsIDcxLCA4MiwgNjksIDY1LCA4NCwgNzgsIDY5LCA4MywgODMsIDEyOCwgNzEsIDgyLCA2OSwgNjUsIDg0LCAKKyAgICA2OSwgODIsIDQ1LCA4NCwgNzIsIDY1LCA3OCwgMTI4LCA3MSwgODIsIDY5LCA2NSwgODQsIDY5LCA4MiwgNDUsIDg0LCA3MiwgCisgICAgNjUsIDIwNiwgNzEsIDgyLCA2OSwgNjUsIDg0LCA2OSwgMjEwLCA3MSwgODIsIDY5LCA2NSwgMjEyLCA3MSwgODIsIDY1LCAKKyAgICA4NiwgNjksIDg5LCA2NSwgODIsIDE5NiwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNzcsIDY1LCA2NywgODIsIDc5LCA3OCwgCisgICAgMTI4LCA3MSwgODIsIDY1LCA4NiwgNjksIDQ1LCA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3MSwgODIsIDY1LCA4NiwgNjksIAorICAgIDEyOCwgNzEsIDgyLCA2NSwgODYsIDE5NywgNzEsIDgyLCA2NSwgODQsIDY5LCA4MiwgMTI4LCA3MSwgODIsIDY1LCA4MywgCisgICAgODMsIDEyOCwgNzEsIDgyLCA2NSwgODMsIDIxMSwgNzEsIDgyLCA2NSwgODAsIDcyLCA2OSwgNzcsIDE5NywgNzEsIDgyLCAKKyAgICA2NSwgODAsIDY5LCA4MywgMTI4LCA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNzEsIDgyLCA2NSwgNzMsIDc4LCAxMjgsIAorICAgIDcxLCA4MiwgNjUsIDY4LCA4NSwgNjUsIDg0LCA3MywgNzksIDIwNiwgNzEsIDgyLCA2NSwgNjcsIDY5LCAxMjgsIDcxLCA4MiwgCisgICAgNjUsIDY3LCAxOTcsIDcxLCA4MCwgNjUsIDEyOCwgNzEsIDc5LCA4MiwgODQsIDcyLCA3NywgNzMsIDc1LCA3OSwgMjA2LCAKKyAgICA3MSwgNzksIDgyLCA4NCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDg0LCA2OSwgODIsIDczLCAxMjgsIDcxLCA3OSwgODIsIAorICAgIDcxLCA3OSwgODMsIDg5LCA3OCwgODQsIDcyLCA2OSwgODQsIDc5LCA3OCwgMTI4LCA3MSwgNzksIDgyLCA3MSwgNzksIDIwNiwgCisgICAgNzEsIDc5LCA4MiwgNzEsIDczLCAxMjgsIDcxLCA3OSwgODIsIDY1LCAxMjgsIDcxLCA3OSwgNzksIDE5NiwgNzEsIDc5LCAKKyAgICA3OCwgNzEsIDEyOCwgNzEsIDc5LCA3NiwgNjgsIDEyOCwgNzEsIDc5LCA3NSwgMTI4LCA3MSwgNzksIDczLCA3OCwgMTk5LCAKKyAgICA3MSwgNzksIDY2LCA3NiwgNzMsIDc4LCAxMjgsIDcxLCA3OSwgNjUsIDc2LCAxMjgsIDcxLCA3OSwgNjUsIDIwNCwgNzEsIAorICAgIDc5LCA2NSwgMTI4LCA3MSwgNzgsIDg5LCA3MywgODMsIDEyOCwgNzEsIDc4LCA2NSwgODYsIDczLCA4OSwgNjUsIDc4LCA3MywgCisgICAgMTI4LCA3MSwgNzYsIDc5LCA4NywgNzMsIDc4LCAxOTksIDcxLCA3NiwgNzksIDg0LCA4NCwgNjUsIDIwNCwgNzEsIDc2LCAKKyAgICA3OSwgNjYsIDE5NywgNzEsIDc2LCA3MywgODMsIDgzLCA2NSwgNzgsIDY4LCAyMDcsIDcxLCA3NiwgNjksIDczLCA2NywgCisgICAgMjAwLCA3MSwgNzYsIDY1LCA3MSwgNzksIDc2LCA3MywgMTI4LCA3MSwgNzYsIDY1LCAxMjgsIDcxLCA3NCwgNjksIDEyOCwgCisgICAgNzEsIDczLCA4OCwgMTI4LCA3MSwgNzMsIDg0LCAxMjgsIDcxLCA3MywgODMsIDcyLCAxMjgsIDcxLCA3MywgODMsIDIwMCwgCisgICAgNzEsIDczLCA4MywgNjUsIDc2LCAxMjgsIDcxLCA3MywgODIsIDg1LCA2OCwgNjUsIDY1LCAxMjgsIDcxLCA3MywgODIsIDc2LCAKKyAgICAxMjgsIDcxLCA3MywgODIsIDUxLCAxMjgsIDcxLCA3MywgODIsIDE3OSwgNzEsIDczLCA4MiwgNTAsIDEyOCwgNzEsIDczLCAKKyAgICA4MiwgMTc4LCA3MSwgNzMsIDgwLCAxMjgsIDcxLCA3MywgNzgsIDczLCA3MywgMTI4LCA3MSwgNzMsIDc3LCA2OSwgNzYsIAorICAgIDEyOCwgNzEsIDczLCA3NywgNjksIDIwNCwgNzEsIDczLCA3NywgMTI4LCA3MSwgNzMsIDcxLCA2NSwgMTI4LCA3MSwgNzMsIAorICAgIDY5LCA4NCwgMTI4LCA3MSwgNzMsIDY4LCA3MywgNzcsIDEyOCwgNzEsIDczLCA2NiwgNjYsIDc5LCA4NSwgMjExLCA3MSwgCisgICAgNzMsIDY2LCA2NSwgMTI4LCA3MSwgNzMsIDUyLCAxMjgsIDcxLCA3MywgMTgwLCA3MSwgNzIsIDkwLCAxMjgsIDcxLCA3MiwgCisgICAgODcsIDY1LCAxMjgsIDcxLCA3MiwgODUsIDc4LCA3OCwgNjUsIDEyOCwgNzEsIDcyLCA4NSwgNzgsIDc4LCAxOTMsIDcxLCAKKyAgICA3MiwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODUsIDEyOCwgNzEsIDcyLCA3OSwgODMsIDg0LCAxMjgsIDcxLCA3MiwgNzksIAorICAgIDEyOCwgNzEsIDcyLCA3MywgMTI4LCA3MSwgNzIsIDcyLCA2NSwgMTI4LCA3MSwgNzIsIDY5LCA4NSwgODgsIDEyOCwgNzEsIAorICAgIDcyLCA2OSwgODUsIDc4LCAxMjgsIDcxLCA3MiwgNjksIDg1LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3NywgMTI4LCA3MSwgCisgICAgNzIsIDY5LCA4NSwgNzEsIDcyLCA2OSwgNzgsIDEyOCwgNzEsIDcyLCA2OSwgODUsIDY1LCA2OSwgODIsIDY1LCA2OSwgMTI4LCAKKyAgICA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCA3MSwgNzIsIDY5LCA4NSwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjksIDg0LCAxMjgsIAorICAgIDcxLCA3MiwgNjksIDY5LCAxMjgsIDcxLCA3MiwgNjksIDEyOCwgNzEsIDcyLCAxOTcsIDcxLCA3MiwgNjUsIDg5LCA3OCwgCisgICAgMTI4LCA3MSwgNzIsIDY1LCA4MiwgNjUsIDY5LCAxMjgsIDcxLCA3MiwgNjUsIDgwLCAxMjgsIDcxLCA3MiwgNjUsIDc4LCAKKyAgICAxMjgsIDcxLCA3MiwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDc4LCA4NSwgMTI4LCA3MSwgNzIsIAorICAgIDY1LCA3MywgNzgsIDEyOCwgNzEsIDcyLCA2NSwgNzMsIDIwNiwgNzEsIDcyLCA2NSwgNjgsIDEyOCwgNzEsIDcyLCA2NSwgCisgICAgNjUsIDc3LCA2NSwgNjksIDEyOCwgNzEsIDcyLCA2NSwgNjUsIDEyOCwgNzEsIDcxLCA4NywgNzMsIDEyOCwgNzEsIDcxLCAKKyAgICA4NywgNjksIDY5LCAxMjgsIDcxLCA3MSwgODcsIDY5LCAxMjgsIDcxLCA3MSwgODcsIDY1LCA2NSwgMTI4LCA3MSwgNzEsIAorICAgIDg3LCA2NSwgMTI4LCA3MSwgNzEsIDg1LCA4OCwgMTI4LCA3MSwgNzEsIDg1LCA4NCwgMTI4LCA3MSwgNzEsIDg1LCA4MiwgCisgICAgODgsIDEyOCwgNzEsIDcxLCA4NSwgODIsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDg4LCAxMjgsIDcxLCA3MSwgODUsIDc5LCAKKyAgICA4NCwgMTI4LCA3MSwgNzEsIDg1LCA3OSwgODAsIDEyOCwgNzEsIDcxLCA4NSwgNzksIDEyOCwgNzEsIDcxLCA3OSwgODgsIAorICAgIDEyOCwgNzEsIDcxLCA3OSwgODQsIDEyOCwgNzEsIDcxLCA3OSwgODAsIDEyOCwgNzEsIDcxLCA3MywgODgsIDEyOCwgNzEsIAorICAgIDcxLCA3MywgODQsIDEyOCwgNzEsIDcxLCA3MywgNjksIDg4LCAxMjgsIDcxLCA3MSwgNzMsIDY5LCA4MCwgMTI4LCA3MSwgCisgICAgNzEsIDczLCA2OSwgMTI4LCA3MSwgNzEsIDY5LCA4OCwgMTI4LCA3MSwgNzEsIDY5LCA4NCwgMTI4LCA3MSwgNzEsIDY5LCAKKyAgICA4MCwgMTI4LCA3MSwgNzEsIDY1LCA4OCwgMTI4LCA3MSwgNzEsIDY1LCA4NCwgMTI4LCA3MSwgNzEsIDY1LCA2NSwgMTI4LCAKKyAgICA3MSwgNjksIDg0LCAxOTMsIDcxLCA2OSwgODMsIDg0LCA4NSwgODIsIDY5LCAxMjgsIDcxLCA2OSwgODMsIDcyLCA4NSwgCisgICAgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCA3OCwgMTI4LCA3MSwgNjksIDgzLCA3MiwgODQsIDczLCAyMDYsIDcxLCAKKyAgICA2OSwgODMsIDcyLCA1MCwgMTI4LCA3MSwgNjksIDgyLCA4MywgNzIsIDY1LCA4OSwgNzMsIDc3LCAxMjgsIDcxLCA2OSwgODIsIAorICAgIDc3LCA2NSwgMjA2LCA3MSwgNjksIDgyLCA2OSwgODMsIDcyLCAxMjgsIDcxLCA2OSwgODIsIDY5LCA4MywgMjAwLCA3MSwgCisgICAgNjksIDc5LCA3NywgNjksIDg0LCA4MiwgNzMsIDY3LCA2NSwgNzYsIDc2LCAyMTcsIDcxLCA2OSwgNzksIDc3LCA2OSwgODQsIAorICAgIDgyLCA3MywgMTk1LCA3MSwgNjksIDc4LCA4NCwgNzYsIDE5NywgNzEsIDY5LCA3OCwgNzMsIDg0LCA3MywgODYsIDY5LCAKKyAgICAxMjgsIDcxLCA2OSwgNzgsIDczLCA3NSwgMjAxLCA3MSwgNjksIDc4LCA2OSwgODIsIDczLCAxOTUsIDcxLCA2OSwgNzcsIAorICAgIDczLCA3OCwgNzMsIDEyOCwgNzEsIDY5LCA3NywgNzMsIDc4LCA2NSwgODQsIDczLCA3OSwgMjA2LCA3MSwgNjksIDIwNSwgCisgICAgNzEsIDY5LCA2OCwgNzksIDc2LCA2NSwgMTI4LCA3MSwgNjksIDY4LCA2OSwgMTI4LCA3MSwgNjksIDY2LCAyMDcsIDcxLCAKKyAgICA2OSwgNjYsIDE5MywgNzEsIDY5LCA2NSwgODIsIDEyOCwgNzEsIDY5LCA2NSwgMjEwLCA3MSwgNjgsIDY1LCA3OCwgMTI4LCAKKyAgICA3MSwgNjcsIDczLCA3MSwgMTI4LCA3MSwgNjcsIDY1LCAyMDYsIDcxLCA2NiwgNzksIDc4LCAxMjgsIDcxLCA2NiwgNzMsIAorICAgIDY5LCAxOTcsIDcxLCA2NiwgNjksIDg1LCA4OCwgMTI4LCA3MSwgNjYsIDY5LCA4NCwgMTI4LCA3MSwgNjYsIDY1LCA4OSwgCisgICAgNzMsIDEyOCwgNzEsIDY2LCA2NSwgNzUsIDg1LCA4MiwgODUsIDc4LCA2OSwgNzgsIDEyOCwgNzEsIDY2LCAxMjgsIDcxLCAKKyAgICA2NSwgODksIDY1LCA3OCwgODUsIDc1LCA3MywgODQsIDg0LCA2NSwgMTI4LCA3MSwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgCisgICAgMTI4LCA3MSwgNjUsIDg5LCAxMjgsIDcxLCA2NSwgODUsIDc4LCA4NCwgNzYsIDY5LCA4NCwgMTI4LCA3MSwgNjUsIDg0LCAKKyAgICA3MiwgNjksIDgyLCA3MywgNzgsIDcxLCAxMjgsIDcxLCA2NSwgODQsIDcyLCA2OSwgODIsIDczLCA3OCwgMTk5LCA3MSwgNjUsIAorICAgIDg0LCA2OSwgMTI4LCA3MSwgNjUsIDgzLCA3MiwgNjUsIDc4LCAxMjgsIDcxLCA2NSwgODIsIDgzLCA3MiwgODUsIDc4LCA3MywgCisgICAgMTI4LCA3MSwgNjUsIDgyLCA3OSwgNzgsIDEyOCwgNzEsIDY1LCA4MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNzEsIDY1LCAKKyAgICA4MiwgNjgsIDY5LCA3OCwgMTI4LCA3MSwgNjUsIDgyLCA1MSwgMTI4LCA3MSwgNjUsIDgwLCA4MCwgNjksIDE5NiwgNzEsIAorICAgIDY1LCAyMDgsIDcxLCA2NSwgNzgsIDc3LCA2NSwgMTI4LCA3MSwgNjUsIDc4LCA3MSwgNzMsIDY1LCAxMjgsIDcxLCA2NSwgCisgICAgNzgsIDY4LCAxOTMsIDcxLCA2NSwgNzgsIDUwLCAxMjgsIDcxLCA2NSwgNzgsIDE3OCwgNzEsIDY1LCA3NywgNzcsIDY1LCAKKyAgICAxMjgsIDcxLCA2NSwgNzcsIDc2LCA2NSwgMTI4LCA3MSwgNjUsIDc3LCA3NiwgMTI4LCA3MSwgNjUsIDc3LCA2OSwgMTI4LCAKKyAgICA3MSwgNjUsIDc3LCAxOTcsIDcxLCA2NSwgNzcsIDY1LCA3OCwgMTI4LCA3MSwgNjUsIDc3LCA2NSwgNzYsIDEyOCwgNzEsIAorICAgIDY1LCA3NywgNjUsIDIwNCwgNzEsIDY1LCA3MSwgMTI4LCA3MSwgNjUsIDcwLCAxMjgsIDcxLCA2NSwgMTk4LCA3MSwgNjUsIAorICAgIDY5LCA4NCwgODQsIDY1LCA0NSwgODAsIDczLCA3NiwgNzYsIDY1LCAxMjgsIDcxLCA2NSwgNjgsIDc5LCA3NiwgMTI4LCA3MSwgCisgICAgNjUsIDY4LCAxMjgsIDcxLCA2NSwgMTk2LCA3MSwgNjUsIDY2LCA2NSwgMTI4LCA3MSwgNjUsIDY2LCAxOTMsIDcxLCA2NSwgCisgICAgNjUsIDcwLCA4NSwgMTI4LCA3MSwgNjUsIDE3OCwgNzEsIDQ4LCA1MywgNTIsIDEyOCwgNzEsIDQ4LCA1MywgNTEsIDEyOCwgCisgICAgNzEsIDQ4LCA1MywgNTAsIDEyOCwgNzEsIDQ4LCA1MywgNDksIDEyOCwgNzEsIDQ4LCA1MywgNDgsIDEyOCwgNzEsIDQ4LCAKKyAgICA1MiwgNTcsIDEyOCwgNzEsIDQ4LCA1MiwgNTYsIDEyOCwgNzEsIDQ4LCA1MiwgNTUsIDEyOCwgNzEsIDQ4LCA1MiwgNTQsIAorICAgIDEyOCwgNzEsIDQ4LCA1MiwgNTMsIDY1LCAxMjgsIDcxLCA0OCwgNTIsIDUzLCAxMjgsIDcxLCA0OCwgNTIsIDUyLCAxMjgsIAorICAgIDcxLCA0OCwgNTIsIDUxLCA2NSwgMTI4LCA3MSwgNDgsIDUyLCA1MSwgMTI4LCA3MSwgNDgsIDUyLCA1MCwgMTI4LCA3MSwgCisgICAgNDgsIDUyLCA0OSwgMTI4LCA3MSwgNDgsIDUyLCA0OCwgMTI4LCA3MSwgNDgsIDUxLCA1NywgMTI4LCA3MSwgNDgsIDUxLCAKKyAgICA1NiwgMTI4LCA3MSwgNDgsIDUxLCA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA1MSwgNTUsIDEyOCwgNzEsIDQ4LCA1MSwgNTQsIAorICAgIDY1LCAxMjgsIDcxLCA0OCwgNTEsIDU0LCAxMjgsIDcxLCA0OCwgNTEsIDUzLCAxMjgsIDcxLCA0OCwgNTEsIDUyLCAxMjgsIAorICAgIDcxLCA0OCwgNTEsIDUxLCAxMjgsIDcxLCA0OCwgNTEsIDUwLCAxMjgsIDcxLCA0OCwgNTEsIDQ5LCAxMjgsIDcxLCA0OCwgCisgICAgNTEsIDQ4LCAxMjgsIDcxLCA0OCwgNTAsIDU3LCAxMjgsIDcxLCA0OCwgNTAsIDU2LCAxMjgsIDcxLCA0OCwgNTAsIDU1LCAKKyAgICAxMjgsIDcxLCA0OCwgNTAsIDU0LCA2NSwgMTI4LCA3MSwgNDgsIDUwLCA1NCwgMTI4LCA3MSwgNDgsIDUwLCA1MywgMTI4LCAKKyAgICA3MSwgNDgsIDUwLCA1MiwgMTI4LCA3MSwgNDgsIDUwLCA1MSwgMTI4LCA3MSwgNDgsIDUwLCA1MCwgMTI4LCA3MSwgNDgsIAorICAgIDUwLCA0OSwgMTI4LCA3MSwgNDgsIDUwLCA0OCwgNjUsIDEyOCwgNzEsIDQ4LCA1MCwgNDgsIDEyOCwgNzEsIDQ4LCA0OSwgCisgICAgNTcsIDEyOCwgNzEsIDQ4LCA0OSwgNTYsIDEyOCwgNzEsIDQ4LCA0OSwgNTUsIDEyOCwgNzEsIDQ4LCA0OSwgNTQsIDEyOCwgCisgICAgNzEsIDQ4LCA0OSwgNTMsIDEyOCwgNzEsIDQ4LCA0OSwgNTIsIDEyOCwgNzEsIDQ4LCA0OSwgNTEsIDEyOCwgNzEsIDQ4LCAKKyAgICA0OSwgNTAsIDEyOCwgNzEsIDQ4LCA0OSwgNDksIDY1LCAxMjgsIDcxLCA0OCwgNDksIDQ5LCAxMjgsIDcxLCA0OCwgNDksIAorICAgIDQ4LCAxMjgsIDcxLCA0OCwgNDgsIDU3LCAxMjgsIDcxLCA0OCwgNDgsIDU2LCAxMjgsIDcxLCA0OCwgNDgsIDU1LCA2NiwgCisgICAgMTI4LCA3MSwgNDgsIDQ4LCA1NSwgNjUsIDEyOCwgNzEsIDQ4LCA0OCwgNTUsIDEyOCwgNzEsIDQ4LCA0OCwgNTQsIDY1LCAKKyAgICAxMjgsIDcxLCA0OCwgNDgsIDU0LCAxMjgsIDcxLCA0OCwgNDgsIDUzLCAxMjgsIDcxLCA0OCwgNDgsIDUyLCAxMjgsIDcxLCAKKyAgICA0OCwgNDgsIDUxLCAxMjgsIDcxLCA0OCwgNDgsIDUwLCAxMjgsIDcxLCA0OCwgNDgsIDQ5LCAxMjgsIDcwLCA4OSwgODgsIAorICAgIDEyOCwgNzAsIDg5LCA4NCwgMTI4LCA3MCwgODksIDgwLCAxMjgsIDcwLCA4OSwgNjUsIDEyOCwgNzAsIDg3LCA3MywgMTI4LCAKKyAgICA3MCwgODcsIDY5LCA2OSwgMTI4LCA3MCwgODcsIDY5LCAxMjgsIDcwLCA4NywgNjUsIDY1LCAxMjgsIDcwLCA4NywgNjUsIAorICAgIDEyOCwgNzAsIDg2LCA4MywgNTEsIDEyOCwgNzAsIDg2LCA4MywgNTAsIDEyOCwgNzAsIDg2LCA4MywgNDksIDEyOCwgNzAsIAorICAgIDg1LCA4OCwgMTI4LCA3MCwgODUsIDg0LCAxMjgsIDcwLCA4NSwgODMsIDY5LCAxMjgsIDcwLCA4NSwgODMsIDE5MywgNzAsIAorICAgIDg1LCA4MiwgODgsIDEyOCwgNzAsIDg1LCA4MCwgMTI4LCA3MCwgODUsIDc4LCA2OSwgODIsIDY1LCAyMDQsIDcwLCA4NSwgCisgICAgNzgsIDY3LCA4NCwgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNzAsIDg1LCA3OCwgNjcsIDg0LCA3MywgNzksIDc4LCAxMjgsIDcwLCAKKyAgICA4NSwgNzYsIDc2LCA3OCwgNjksIDgzLCA4MywgMTI4LCA3MCwgODUsIDc2LCAyMDQsIDcwLCA4NSwgNzQsIDczLCAxMjgsIAorICAgIDcwLCA4NSwgNjksIDg0LCAxMjgsIDcwLCA4NSwgNjksIDIwNCwgNzAsIDg1LCA2OSwgMTI4LCA3MCwgODQsIDcyLCA3OSwgCisgICAgODIsIDE5MywgNzAsIDgzLCA3MywgMTI4LCA3MCwgODIsIDc5LCA4NywgNzgsIDczLCA3OCwgNzEsIDEyOCwgNzAsIDgyLCAKKyAgICA3OSwgODcsIDc4LCA3MywgNzgsIDE5OSwgNzAsIDgyLCA3OSwgODcsIDc4LCAxMjgsIDcwLCA4MiwgNzksIDc4LCA4NCwgNDUsIAorICAgIDg0LCA3MywgNzYsIDg0LCA2OSwgMTk2LCA3MCwgODIsIDc5LCA3OCwgODQsIDQ1LCA3MCwgNjUsIDY3LCA3MywgNzgsIDE5OSwgCisgICAgNzAsIDgyLCA3OSwgMjA1LCA3MCwgODIsIDc5LCA3MSwgMTI4LCA3MCwgODIsIDc5LCAxOTksIDcwLCA4MiwgNzMsIDg0LCAKKyAgICA4NSwgMTI4LCA3MCwgODIsIDczLCA2OSwgODMsIDEyOCwgNzAsIDgyLCA3MywgNjksIDE5NiwgNzAsIDgyLCA3MywgNjcsIAorICAgIDY1LCA4NCwgNzMsIDg2LCA2OSwgMTI4LCA3MCwgODIsIDY5LCA4NCwgNjYsIDc5LCA2NSwgODIsIDY4LCAxMjgsIDcwLCA4MiwgCisgICAgNjksIDc4LCA2NywgMjAwLCA3MCwgODIsIDY5LCA2OSwgMTI4LCA3MCwgODIsIDY5LCAxOTcsIDcwLCA4MiwgNjUsIDc4LCAKKyAgICAxOTUsIDcwLCA4MiwgNjUsIDc3LCA2OSwgMTI4LCA3MCwgODIsIDY1LCA3MSwgODIsIDY1LCA3OCwgODQsIDEyOCwgNzAsIAorICAgIDgyLCA2NSwgNzEsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDcwLCA4MiwgNjUsIDY3LCA4NCwgNzMsIDc5LCAyMDYsIDcwLCA3OSwgCisgICAgODgsIDEyOCwgNzAsIDc5LCA4NSwgODIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDcwLCA3OSwgODUsIDgyLCA4NCwgNjksIDY5LCAKKyAgICAyMDYsIDcwLCA3OSwgODUsIDgyLCA0NSwgODQsIDcyLCA3MywgODIsIDg0LCA4OSwgMTI4LCA3MCwgNzksIDg1LCA4MiwgNDUsIAorICAgIDgzLCA4NCwgODIsIDczLCA3OCwgMTk5LCA3MCwgNzksIDg1LCA4MiwgNDUsIDgwLCA2OSwgODIsIDQ1LCA2OSwgMjA1LCA3MCwgCisgICAgNzksIDg1LCA4MiwgNDUsIDc2LCA3MywgNzgsIDE5NywgNzAsIDc5LCA4NSwgMjEwLCA3MCwgNzksIDg1LCA3OCwgODQsIDY1LCAKKyAgICA3MywgNzgsIDEyOCwgNzAsIDc5LCA4MywgODQsIDY5LCA4MiwgNzMsIDc4LCA3MSwgMTI4LCA3MCwgNzksIDgyLCA4NywgNjUsIAorICAgIDgyLCA2OCwgMTI4LCA3MCwgNzksIDgyLCA4NCwgODksIDEyOCwgNzAsIDc5LCA4MiwgODQsIDIxNywgNzAsIDc5LCA4MiwgCisgICAgODQsIDY5LCAxMjgsIDcwLCA3OSwgODIsIDc3LCAyMTEsIDcwLCA3OSwgODIsIDc3LCA2NSwgODQsIDg0LCA3MywgNzgsIDcxLCAKKyAgICAxMjgsIDcwLCA3OSwgODIsIDc1LCA2OSwgMTk2LCA3MCwgNzksIDgyLCA2NywgNjksIDgzLCAxMjgsIDcwLCA3OSwgODIsIAorICAgIDY3LCA2OSwgMTI4LCA3MCwgNzksIDgwLCAxMjgsIDcwLCA3OSwgNzksIDg0LCA4MywgODQsIDc5LCA3OSwgNzYsIDEyOCwgCisgICAgNzAsIDc5LCA3OSwgODQsIDgwLCA4MiwgNzMsIDc4LCA4NCwgODMsIDEyOCwgNzAsIDc5LCA3OSwgODQsIDc4LCA3OSwgODQsIAorICAgIDE5NywgNzAsIDc5LCA3OSwgODQsIDY2LCA2NSwgNzYsIDc2LCAxMjgsIDcwLCA3OSwgNzksIDg0LCAxMjgsIDcwLCA3OSwgCisgICAgNzksIDY4LCAxMjgsIDcwLCA3OSwgNzksIDEyOCwgNzAsIDc5LCA3OCwgNzEsIDc3LCA2NSwgNzgsIDEyOCwgNzAsIDc5LCAKKyAgICA3NywgMTI4LCA3MCwgNzksIDc2LCA3NiwgODksIDEyOCwgNzAsIDc5LCA3NiwgNzYsIDc5LCA4NywgNzMsIDc4LCA3MSwgCisgICAgMTI4LCA3MCwgNzksIDc2LCA2OCwgNjksIDgyLCAxMjgsIDcwLCA3OSwgNzYsIDY4LCA2OSwgMTk2LCA3MCwgNzksIDcxLCAKKyAgICA3MSwgODksIDEyOCwgNzAsIDIwNywgNzAsIDc3LCAxMjgsIDcwLCA3NiwgODksIDEyOCwgNzAsIDc2LCA4NSwgODQsIDg0LCAKKyAgICA2OSwgODIsIDczLCA3OCwgMTk5LCA3MCwgNzYsIDg1LCA4NCwgNjksIDEyOCwgNzAsIDc2LCA4NSwgODMsIDcyLCA2OSwgCisgICAgMTk2LCA3MCwgNzYsIDc5LCA4NywgNzMsIDc4LCAxOTksIDcwLCA3NiwgNzksIDg3LCA2OSwgMjEwLCA3MCwgNzYsIDc5LCAKKyAgICA4NSwgODIsIDczLCA4MywgNzIsIDEyOCwgNzAsIDc2LCA3OSwgODIsIDY5LCA4NCwgODQsIDY5LCAxMjgsIDcwLCA3NiwgNzksIAorICAgIDgyLCA2NSwgMjA0LCA3MCwgNzYsIDc5LCA4MCwgODAsIDIxNywgNzAsIDc2LCA3OSwgNzksIDgyLCAxMjgsIDcwLCA3NiwgCisgICAgNzMsIDgwLCAxMjgsIDcwLCA3NiwgNzMsIDcxLCA3MiwgODQsIDEyOCwgNzAsIDc2LCA2OSwgODgsIDg1LCA4MywgMTI4LCAKKyAgICA3MCwgNzYsIDY5LCA4OCwgNjksIDE5NiwgNzAsIDc2LCA2OSwgODUsIDgyLCA0NSwgNjgsIDY5LCA0NSwgNzYsIDczLCA4MywgCisgICAgMTI4LCA3MCwgNzYsIDY1LCA4NCwgODQsIDY5LCA3OCwgNjksIDE5NiwgNzAsIDc2LCA2NSwgODQsIDc4LCA2OSwgODMsIDgzLCAKKyAgICAxMjgsIDcwLCA3NiwgNjUsIDg0LCAxMjgsIDcwLCA3NiwgNjUsIDIxMiwgNzAsIDc2LCA2NSwgNzEsIDgzLCAxMjgsIDcwLCAKKyAgICA3NiwgNjUsIDcxLCA0NSwgNTMsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA1MiwgMTI4LCA3MCwgNzYsIDY1LCA3MSwgNDUsIAorICAgIDUxLCAxMjgsIDcwLCA3NiwgNjUsIDcxLCA0NSwgNTAsIDEyOCwgNzAsIDc2LCA2NSwgNzEsIDQ1LCA0OSwgMTI4LCA3MCwgCisgICAgNzYsIDY1LCA3MSwgMTI4LCA3MCwgNzYsIDY1LCAxOTksIDcwLCA3NiwgNjUsIDEyOCwgNzAsIDc2LCAxMjgsIDcwLCA3MywgCisgICAgODgsIDY5LCA2OCwgNDUsIDcwLCA3OSwgODIsIDIwNSwgNzAsIDczLCA4OCwgMTI4LCA3MCwgNzMsIDg2LCA2OSwgNDUsIDg0LCAKKyAgICA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNzAsIDczLCA4NiwgNjksIDQ1LCA3NiwgNzMsIDc4LCAxOTcsIDcwLCA3MywgODYsIAorICAgIDE5NywgNzAsIDczLCA4NCwgNjUsIDEyOCwgNzAsIDczLCA4NCwgMTI4LCA3MCwgNzMsIDgzLCA4NCwgNjksIDE5NiwgNzAsIAorICAgIDczLCA4MywgODQsIDEyOCwgNzAsIDczLCA4MywgNzIsIDczLCA3OCwgMTk5LCA3MCwgNzMsIDgzLCA3MiwgNzIsIDc5LCA3OSwgCisgICAgNzUsIDEyOCwgNzAsIDczLCA4MywgNzIsIDcyLCA3OSwgNzksIDIwMywgNzAsIDczLCA4MywgNzIsIDY5LCA4OSwgNjksIAorICAgIDEyOCwgNzAsIDczLCA4MywgNzIsIDEyOCwgNzAsIDczLCA4MywgMjAwLCA3MCwgNzMsIDgyLCA4MywgMjEyLCA3MCwgNzMsIAorICAgIDgyLCA3MywgMTI4LCA3MCwgNzMsIDgyLCA2OSwgODcsIDc5LCA4MiwgNzUsIDgzLCAxMjgsIDcwLCA3MywgODIsIDY5LCA4NywgCisgICAgNzksIDgyLCAyMDMsIDcwLCA3MywgODIsIDY5LCAxMjgsIDcwLCA3MywgODIsIDE5NywgNzAsIDczLCA4MCwgMTI4LCA3MCwgCisgICAgNzMsIDc4LCA3MywgODQsIDE5NywgNzAsIDczLCA3OCwgNzEsIDY5LCA4MiwgNzgsIDY1LCA3MywgNzYsIDgzLCAxMjgsIDcwLCAKKyAgICA3MywgNzgsIDcxLCA2OSwgODIsIDY5LCAxOTYsIDcwLCA3MywgNzgsIDY1LCA3OCwgNjcsIDczLCA2NSwgNzYsIDEyOCwgNzAsIAorICAgIDczLCA3NiwgNzYsIDY5LCA4MiwgMTI4LCA3MCwgNzMsIDc2LCA3NiwgNjksIDE5NiwgNzAsIDczLCA3NiwgNzYsIDEyOCwgCisgICAgNzAsIDczLCA3NiwgMjA0LCA3MCwgNzMsIDc2LCAxOTcsIDcwLCA3MywgNzMsIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAKKyAgICA2OSwgNDUsIDUxLCAxMjgsIDcwLCA3MywgNzEsIDg1LCA4MiwgNjksIDQ1LCA1MCwgMTI4LCA3MCwgNzMsIDcxLCA4NSwgODIsIAorICAgIDY5LCA0NSwgNDksIDEyOCwgNzAsIDczLCA3MSwgODUsIDgyLCAxOTcsIDcwLCA3MywgNzEsIDcyLCA4NCwgMTI4LCA3MCwgCisgICAgNzMsIDcwLCA4NCwgODksIDEyOCwgNzAsIDczLCA3MCwgODQsIDIxNywgNzAsIDczLCA3MCwgODQsIDcyLCA4MywgMTI4LCAKKyAgICA3MCwgNzMsIDcwLCA4NCwgNzIsIDEyOCwgNzAsIDczLCA3MCwgODQsIDY5LCA2OSwgNzgsIDEyOCwgNzAsIDczLCA3MCwgODQsIAorICAgIDY5LCA2OSwgMjA2LCA3MCwgNzMsIDY5LCA3NiwgNjgsIDEyOCwgNzAsIDcyLCA4NCwgNzksIDgyLCAxOTMsIDcwLCA3MCwgCisgICAgNzYsIDEyOCwgNzAsIDcwLCA3MywgMTI4LCA3MCwgNjksIDg1LCA4OCwgMTI4LCA3MCwgNjksIDg1LCA3MCwgNjksIDg1LCAKKyAgICA2NSwgNjksIDg0LCAxMjgsIDcwLCA2OSwgODMsIDg0LCA3MywgODYsIDY1LCA3NiwgMTI4LCA3MCwgNjksIDgyLCA4MiwgODksIAorICAgIDEyOCwgNzAsIDY5LCA4MiwgODIsIDczLCAyMTEsIDcwLCA2OSwgODIsIDc3LCA2NSwgODQsIDY1LCAxMjgsIDcwLCA2OSwgCisgICAgODIsIDc3LCA2NSwgODQsIDE5MywgNzAsIDY5LCA3OSwgMjAwLCA3MCwgNjksIDc4LCAxOTksIDcwLCA2OSwgNzgsIDY3LCAKKyAgICA2OSwgMTI4LCA3MCwgNjksIDc3LCA3MywgNzgsIDczLCA3OCwgMTk3LCA3MCwgNjksIDc3LCA2NSwgNzYsIDY5LCAxMjgsIAorICAgIDcwLCA2OSwgNzcsIDY1LCA3NiwgMTk3LCA3MCwgNjksIDc2LCA3NiwgNzksIDg3LCA4MywgNzIsIDczLCA4MCwgMTI4LCA3MCwgCisgICAgNjksIDczLCAxMjgsIDcwLCA2OSwgNzIsIDIxMywgNzAsIDY5LCA3MiwgMTI4LCA3MCwgNjksIDIwMCwgNzAsIDY5LCA2OSwgCisgICAgNzgsIDcxLCAxMjgsIDcwLCA2OSwgNjksIDY4LCAxMjgsIDcwLCA2OSwgNjksIDE5NiwgNzAsIDY5LCA2OSwgMTI4LCA3MCwgCisgICAgNjksIDY2LCA4MiwgODUsIDY1LCA4MiwgODksIDEyOCwgNzAsIDY5LCA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY5LCAKKyAgICA2NSwgODQsIDcyLCA2OSwgMjEwLCA3MCwgNjksIDY1LCA4MiwgNzgsIDEyOCwgNzAsIDY5LCA2NSwgODIsIDcwLCA4NSwgCisgICAgMjA0LCA3MCwgNjksIDY1LCA4MiwgMTI4LCA3MCwgNjUsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA3MCwgNjUsIDg5LCAKKyAgICAxMjgsIDcwLCA2NSwgODgsIDEyOCwgNzAsIDY1LCAyMTYsIDcwLCA2NSwgODQsIDczLCA3MSwgODUsIDY5LCAxMjgsIDcwLCAKKyAgICA2NSwgODQsIDcyLCA2OSwgODIsIDEyOCwgNzAsIDY1LCA4NCwgNzIsIDY5LCAyMTAsIDcwLCA2NSwgODQsIDcyLCA2NSwgODQsIAorICAgIDY1LCA3OCwgMTI4LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDg0LCA2NSwgMjA2LCA3MCwgNjUsIDg0LCA3MiwgNjUsIDEyOCwgCisgICAgNzAsIDY1LCA4NCwgNzIsIDE5MywgNzAsIDY1LCA4NCwgMTI4LCA3MCwgNjUsIDgyLCA4MywgMjAxLCA3MCwgNjUsIDgxLCAKKyAgICAxMjgsIDcwLCA2NSwgODAsIDEyOCwgNzAsIDY1LCA3OCwgNzEsIDEyOCwgNzAsIDY1LCA3OCwgNjksIDgyLCA3OSwgODMsIAorICAgIDczLCAyMTEsIDcwLCA2NSwgNzgsIDEyOCwgNzAsIDY1LCA3NywgNzMsIDc2LCA4OSwgMTI4LCA3MCwgNjUsIDc2LCA3NiwgCisgICAgNzMsIDc4LCAxOTksIDcwLCA2NSwgNzYsIDc2LCA2OSwgMjA2LCA3MCwgNjUsIDczLCA3NiwgODUsIDgyLCA2OSwgMTI4LCAKKyAgICA3MCwgNjUsIDczLCA3MiwgODUsIDEyOCwgNzAsIDY1LCA3MiwgODIsIDY5LCA3OCwgNzIsIDY5LCA3MywgODQsIDEyOCwgNzAsIAorICAgIDY1LCA2NywgODQsIDc5LCA4MiwgODksIDEyOCwgNzAsIDY1LCA2NywgODQsIDc5LCAyMTAsIDcwLCA2NSwgNjcsIDgzLCA3MywgCisgICAgNzcsIDczLCA3NiwgMTk3LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDU0LCAxMjgsIDcwLCA2NSwgNjcsIDY5LCA0NSwgNTMsIAorICAgIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA1MiwgMTI4LCA3MCwgNjUsIDY3LCA2OSwgNDUsIDUxLCAxMjgsIDcwLCA2NSwgCisgICAgNjcsIDY5LCA0NSwgNTAsIDEyOCwgNzAsIDY1LCA2NywgNjksIDQ1LCA0OSwgMTI4LCA3MCwgNjUsIDY1LCA3NywgNjUsIDY5LCAKKyAgICAxMjgsIDcwLCA2NSwgNjUsIDczLCAxMjgsIDcwLCA2NSwgNjUsIDcwLCA4NSwgMTI4LCA3MCwgNDgsIDUzLCA1MSwgMTI4LCAKKyAgICA3MCwgNDgsIDUzLCA1MCwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgNjcsIDEyOCwgNzAsIDQ4LCA1MywgNDksIDY2LCAxMjgsIAorICAgIDcwLCA0OCwgNTMsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUzLCA0OSwgMTI4LCA3MCwgNDgsIDUzLCA0OCwgMTI4LCA3MCwgCisgICAgNDgsIDUyLCA1NywgMTI4LCA3MCwgNDgsIDUyLCA1NiwgMTI4LCA3MCwgNDgsIDUyLCA1NSwgNjUsIDEyOCwgNzAsIDQ4LCAKKyAgICA1MiwgNTUsIDEyOCwgNzAsIDQ4LCA1MiwgNTQsIDY1LCAxMjgsIDcwLCA0OCwgNTIsIDU0LCAxMjgsIDcwLCA0OCwgNTIsIAorICAgIDUzLCA2NSwgMTI4LCA3MCwgNDgsIDUyLCA1MywgMTI4LCA3MCwgNDgsIDUyLCA1MiwgMTI4LCA3MCwgNDgsIDUyLCA1MSwgCisgICAgMTI4LCA3MCwgNDgsIDUyLCA1MCwgMTI4LCA3MCwgNDgsIDUyLCA0OSwgMTI4LCA3MCwgNDgsIDUyLCA0OCwgMTI4LCA3MCwgCisgICAgNDgsIDUxLCA1NywgMTI4LCA3MCwgNDgsIDUxLCA1NiwgNjUsIDEyOCwgNzAsIDQ4LCA1MSwgNTYsIDEyOCwgNzAsIDQ4LCAKKyAgICA1MSwgNTUsIDY1LCAxMjgsIDcwLCA0OCwgNTEsIDU1LCAxMjgsIDcwLCA0OCwgNTEsIDU0LCAxMjgsIDcwLCA0OCwgNTEsIAorICAgIDUzLCAxMjgsIDcwLCA0OCwgNTEsIDUyLCAxMjgsIDcwLCA0OCwgNTEsIDUxLCAxMjgsIDcwLCA0OCwgNTEsIDUwLCAxMjgsIAorICAgIDcwLCA0OCwgNTEsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDUxLCA0OSwgMTI4LCA3MCwgNDgsIDUxLCA0OCwgMTI4LCA3MCwgCisgICAgNDgsIDUwLCA1NywgMTI4LCA3MCwgNDgsIDUwLCA1NiwgMTI4LCA3MCwgNDgsIDUwLCA1NSwgMTI4LCA3MCwgNDgsIDUwLCAKKyAgICA1NCwgMTI4LCA3MCwgNDgsIDUwLCA1MywgMTI4LCA3MCwgNDgsIDUwLCA1MiwgMTI4LCA3MCwgNDgsIDUwLCA1MSwgMTI4LCAKKyAgICA3MCwgNDgsIDUwLCA1MCwgMTI4LCA3MCwgNDgsIDUwLCA0OSwgNjUsIDEyOCwgNzAsIDQ4LCA1MCwgNDksIDEyOCwgNzAsIAorICAgIDQ4LCA1MCwgNDgsIDEyOCwgNzAsIDQ4LCA0OSwgNTcsIDEyOCwgNzAsIDQ4LCA0OSwgNTYsIDEyOCwgNzAsIDQ4LCA0OSwgCisgICAgNTUsIDEyOCwgNzAsIDQ4LCA0OSwgNTQsIDEyOCwgNzAsIDQ4LCA0OSwgNTMsIDEyOCwgNzAsIDQ4LCA0OSwgNTIsIDEyOCwgCisgICAgNzAsIDQ4LCA0OSwgNTEsIDY1LCAxMjgsIDcwLCA0OCwgNDksIDUxLCAxMjgsIDcwLCA0OCwgNDksIDUwLCAxMjgsIDcwLCAKKyAgICA0OCwgNDksIDQ5LCAxMjgsIDcwLCA0OCwgNDksIDQ4LCAxMjgsIDcwLCA0OCwgNDgsIDU3LCAxMjgsIDcwLCA0OCwgNDgsIAorICAgIDU2LCAxMjgsIDcwLCA0OCwgNDgsIDU1LCAxMjgsIDcwLCA0OCwgNDgsIDU0LCAxMjgsIDcwLCA0OCwgNDgsIDUzLCAxMjgsIAorICAgIDcwLCA0OCwgNDgsIDUyLCAxMjgsIDcwLCA0OCwgNDgsIDUxLCAxMjgsIDcwLCA0OCwgNDgsIDUwLCAxMjgsIDcwLCA0OCwgCisgICAgNDgsIDQ5LCA2NSwgMTI4LCA3MCwgNDgsIDQ4LCA0OSwgMTI4LCA2OSwgOTAsIDIwMCwgNjksIDkwLCA2OSwgNzgsIDEyOCwgCisgICAgNjksIDkwLCA2OSwgMjA2LCA2OSwgOTAsIDEyOCwgNjksIDg5LCA2OSwgODMsIDEyOCwgNjksIDg5LCA2OSwgNzEsIDc2LCAKKyAgICA2NSwgODMsIDgzLCA2OSwgODMsIDEyOCwgNjksIDg5LCA2NiwgNjksIDg5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgODksIAorICAgIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY5LCA4OCwgODQsIDgyLCA2NSwgODQsIDY5LCA4MiwgODIsIDY5LCA4MywgODQsIDgyLCAKKyAgICA3MywgNjUsIDIwNCwgNjksIDg4LCA4NCwgODIsIDY1LCA0NSwgNzYsIDc5LCAyMTUsIDY5LCA4OCwgODQsIDgyLCA2NSwgNDUsIAorICAgIDcyLCA3MywgNzEsIDIwMCwgNjksIDg4LCA4NCwgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDg0LCA2OSwgCisgICAgNzgsIDY4LCA2OSwgMTk2LCA2OSwgODgsIDgwLCA4MiwgNjksIDgzLCA4MywgNzMsIDc5LCA3OCwgNzYsIDY5LCA4MywgMjExLCAKKyAgICA2OSwgODgsIDgwLCA3OSwgNzgsIDY5LCA3OCwgMjEyLCA2OSwgODgsIDc5LCAxMjgsIDY5LCA4OCwgMjA3LCA2OSwgODgsIAorICAgIDczLCA4MywgODQsIDgzLCAxMjgsIDY5LCA4OCwgNzMsIDgzLCA4NCwgMTI4LCA2OSwgODgsIDcyLCA2NSwgODUsIDgzLCA4NCwgCisgICAgNzMsIDc5LCA3OCwgMTI4LCA2OSwgODgsIDY3LCA3NiwgNjUsIDc3LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjksIDg4LCAKKyAgICA2NywgNzYsIDY1LCA3NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjksIDg4LCA2NywgNzIsIDY1LCA3OCwgNzEsIDY5LCAxMjgsIAorICAgIDY5LCA4OCwgNjcsIDY5LCA4MywgODMsIDEyOCwgNjksIDg4LCA2NywgNjksIDc2LCA3NiwgNjksIDc4LCA4NCwgMTI4LCA2OSwgCisgICAgODcsIDY5LCAxMjgsIDY5LCA4NiwgNjksIDgyLCA3MSwgODIsIDY5LCA2OSwgMjA2LCA2OSwgODYsIDY5LCA3OCwgNzMsIDc4LCAKKyAgICA3MSwgMTI4LCA2OSwgODUsIDgyLCA3OSwgODAsIDY5LCA2NSwgMjA2LCA2OSwgODUsIDgyLCA3OSwgODAsIDY5LCA0NSwgNjUsIAorICAgIDcwLCA4MiwgNzMsIDY3LCA2NSwgMTI4LCA2OSwgODUsIDgyLCA3OSwgNDUsIDY3LCA4NSwgODIsIDgyLCA2OSwgNzgsIDY3LCAKKyAgICAyMTcsIDY5LCA4NSwgODIsIDIwNywgNjksIDg1LCA3NiwgNjksIDIxMCwgNjksIDg1LCA0NSwgODUsIDEyOCwgNjksIDg1LCAKKyAgICA0NSwgNzksIDEyOCwgNjksIDg1LCA0NSwgNjksIDg1LCAxMjgsIDY5LCA4NSwgNDUsIDY5LCA3OSwgMTI4LCA2OSwgODUsIAorICAgIDQ1LCA2OSwgMTI4LCA2OSwgODUsIDQ1LCA2NSwgMTI4LCA2OSwgODQsIDg4LCAxMjgsIDY5LCA4NCwgNzgsIDY1LCA3MiwgCisgICAgODQsIDY1LCAxMjgsIDY5LCA4NCwgNzIsIDY5LCAyMDQsIDY5LCA4NCwgNjksIDgyLCA3OSwgMjA2LCA2OSwgODQsIDY5LCAKKyAgICA4MiwgNzgsIDczLCA4NCwgODksIDEyOCwgNjksIDg0LCA2NiwgMTI4LCA2OSwgODMsIDg1LCA3NSwgODUsIDg1LCA2OCwgNzksIAorICAgIDEyOCwgNjksIDgzLCA4NCwgNzMsIDc3LCA2NSwgODQsIDY5LCA4MywgMTI4LCA2OSwgODMsIDg0LCA3MywgNzcsIDY1LCA4NCwgCisgICAgNjksIDE5NiwgNjksIDgzLCA3MiwgNjksIDUxLCAxMjgsIDY5LCA4MywgNzIsIDUwLCA0OSwgMTI4LCA2OSwgODMsIDcyLCAKKyAgICAxNzgsIDY5LCA4MywgNzIsIDQ5LCA1NCwgMTI4LCA2OSwgODMsIDY3LCA2NSwgODAsIDY5LCAxMjgsIDY5LCA4MywgNjcsIAorICAgIDEyOCwgNjksIDgzLCA2NSwgMTI4LCA2OSwgODMsIDQ1LCA4NCwgNjksIDEyOCwgNjksIDgyLCA4MiwgNzksIDgyLCA0NSwgCisgICAgNjYsIDY1LCA4MiwgODIsIDY5LCAxOTYsIDY5LCA4MiwgODIsIDEyOCwgNjksIDgyLCA3MywgNzgsIDUwLCAxMjgsIDY5LCAKKyAgICA4MiwgNzEsIDEyOCwgNjksIDgyLCA2NSwgODMsIDE5NywgNjksIDgxLCA4NSwgNzMsIDg2LCA2NSwgNzYsIDY5LCA3OCwgCisgICAgMjEyLCA2OSwgODEsIDg1LCA3MywgNjgsIDEyOCwgNjksIDgxLCA4NSwgNzMsIDY1LCA3OCwgNzEsIDg1LCA3NiwgNjUsIAorICAgIDIxMCwgNjksIDgxLCA4NSwgNjUsIDc2LCA4MywgMTI4LCA2OSwgODEsIDg1LCA2NSwgNzYsIDIxMSwgNjksIDgxLCA4NSwgCisgICAgNjUsIDc2LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIDc4LCAxMjgsIDY5LCA4MCwgODMsIDczLCA3NiwgNzksIAorICAgIDIwNiwgNjksIDgwLCA3OSwgNjcsIDcyLCAxMjgsIDY5LCA4MCwgNzMsIDcxLCA4MiwgNjUsIDgwLCA3MiwgNzMsIDE5NSwgCisgICAgNjksIDgwLCA3MywgNjgsIDY1LCA4NSwgODIsIDY5LCA2NSwgMjA2LCA2OSwgODAsIDY5LCA3OCwgODQsIDcyLCA2OSwgODQsIAorICAgIDczLCAxOTUsIDY5LCA4MCwgNjksIDcxLCA2OSwgODIsIDc3LCA2NSwgMTI4LCA2OSwgNzksIDg0LCAxMjgsIDY5LCA3OSwgCisgICAgNzcsIDEyOCwgNjksIDc5LCA3NiwgNzIsIDg4LCAxMjgsIDY5LCA3OSwgNzYsIDEyOCwgNjksIDc5LCA3MiwgMTI4LCA2OSwgCisgICAgNzgsIDg5LCAxMjgsIDY5LCA3OCwgODYsIDY5LCA3NiwgNzksIDgwLCA2OSwgMTI4LCA2OSwgNzgsIDg2LCA2OSwgNzYsIDc5LCAKKyAgICA4MCwgMTk3LCA2OSwgNzgsIDg1LCA3NywgNjksIDgyLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2OSwgNzgsIDg0LCA4MiwgODksIAorICAgIDQ1LCA1MCwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDQ1LCA0OSwgMTI4LCA2OSwgNzgsIDg0LCA4MiwgODksIDEyOCwgCisgICAgNjksIDc4LCA4NCwgODIsIDIxNywgNjksIDc4LCA4NCwgNzIsIDg1LCA4MywgNzMsIDY1LCA4MywgNzcsIDEyOCwgNjksIDc4LCAKKyAgICA4NCwgNjksIDgyLCA4MCwgODIsIDczLCA4MywgNjksIDEyOCwgNjksIDc4LCA4NCwgNjksIDgyLCA3MywgNzgsIDE5OSwgNjksIAorICAgIDc4LCA4NCwgNjksIDgyLCAxMjgsIDY5LCA3OCwgODQsIDY5LCAyMTAsIDY5LCA3OCwgODEsIDg1LCA3MywgODIsIDg5LCAKKyAgICAxMjgsIDY5LCA3OCwgODEsIDEyOCwgNjksIDc4LCA3OSwgMjExLCA2OSwgNzgsIDc4LCAxMjgsIDY5LCA3OCwgNzYsIDY1LCAKKyAgICA4MiwgNzEsIDY5LCA3NywgNjksIDc4LCA4NCwgMTI4LCA2OSwgNzgsIDcxLCA3MywgNzgsIDY5LCAxMjgsIDY5LCA3OCwgNjgsIAorICAgIDc5LCA3MCwgNzksIDc4LCA3OSwgNzgsIDEyOCwgNjksIDc4LCA2OCwgNzMsIDc4LCAxOTksIDY5LCA3OCwgNjgsIDY5LCA4MCwgCisgICAgMTI4LCA2OSwgNzgsIDY4LCA2OSwgNjUsIDg2LCA3OSwgODUsIDgyLCAxMjgsIDY5LCA3OCwgNjcsIDc5LCA4NSwgNzgsIDg0LCAKKyAgICA2OSwgODIsIDgzLCAxMjgsIDY5LCA3OCwgNjcsIDc2LCA3OSwgODMsIDg1LCA4MiwgNjksIDEyOCwgNjksIDc4LCA2NywgNzYsIAorICAgIDc5LCA4MywgNzMsIDc4LCAxOTksIDY5LCA3OCwgNjcsIDEyOCwgNjksIDc4LCA2NSwgODIsIDg4LCA3MywgMjExLCA2OSwgCisgICAgNzgsIDY1LCA4MiwgNzcsIDc5LCA3OCwgNzMsIDc5LCAyMTEsIDY5LCA3NywgODAsIDg0LCAyMTcsIDY5LCA3NywgODAsIDcyLCAKKyAgICA2NSwgODQsIDczLCAxOTUsIDY5LCA3NywgODAsIDcyLCA2NSwgODMsIDczLCAyMTEsIDY5LCA3NywgNjYsIDgyLCA3OSwgNzMsIAorICAgIDY4LCA2OSwgODIsIDg5LCAxMjgsIDY5LCA3NywgNjYsIDc2LCA2OSwgNzcsIDEyOCwgNjksIDc3LCA2NiwgNjksIDc2LCA3NiwgCisgICAgNzMsIDgzLCA3MiwgNzcsIDY5LCA3OCwgODQsIDEyOCwgNjksIDc3LCA2NiwgNjksIDY4LCA2OCwgNzMsIDc4LCA3MSwgMTI4LCAKKyAgICA2OSwgNzYsIDg0LCAxMjgsIDY5LCA3NiwgNzYsIDczLCA4MCwgODQsIDczLCAxOTUsIDY5LCA3NiwgNzYsIDczLCA4MCwgODMsIAorICAgIDczLCA4MywgMTI4LCA2OSwgNzYsIDc2LCA3MywgODAsIDgzLCA2OSwgMTI4LCA2OSwgNzYsIDczLCA3MCwgNzMsIDEyOCwgCisgICAgNjksIDc2LCA2OSwgODYsIDY5LCA3OCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIDEyOCwgNjksIDc2LCA2OSwgODYsIAorICAgIDY5LCA3OCwgMTI4LCA2OSwgNzYsIDY5LCA4NiwgNjksIDIwNiwgNjksIDc2LCA2OSwgODAsIDcyLCA2NSwgNzgsIDg0LCAKKyAgICAxMjgsIDY5LCA3NiwgNjksIDc3LCA2OSwgNzgsIDIxMiwgNjksIDc2LCA2OSwgNjcsIDg0LCA4MiwgNzMsIDY3LCA2NSwgCisgICAgMjA0LCA2OSwgNzYsIDY5LCA2NywgODQsIDgyLCA3MywgMTk1LCA2OSwgNzYsIDY1LCA3MCwgODIsIDc5LCA3OCwgMTI4LCAKKyAgICA2OSwgNzUsIDgzLCA4NCwgODIsIDY5LCA4MCwgODQsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDgzLCAxMjgsIDY5LCA3NSwgNzAsIAorICAgIDc5LCA3OCwgNzMsIDg0LCA3MywgNzUsIDc5LCA3OCwgMTI4LCA2OSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjksIDc0LCA2OSwgCisgICAgNjcsIDIxMiwgNjksIDczLCA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDg5LCAxMjgsIDY5LCA3MywgNzEsIDcyLCAKKyAgICA4NCwgMjE3LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCA4MywgMTI4LCA2OSwgNzMsIDcxLCA3MiwgODQsIDcyLCAyMTEsIAorICAgIDY5LCA3MywgNzEsIDcyLCA4NCwgNzIsIDEyOCwgNjksIDczLCA3MSwgNzIsIDg0LCA2OSwgNjksIDc4LCAxMjgsIDY5LCA3MywgCisgICAgNzEsIDcyLCA4NCwgNjksIDY5LCAyMDYsIDY5LCA3MywgNzEsIDcyLCA4NCwgNDUsIDg0LCA3MiwgNzMsIDgyLCA4NCwgODksIAorICAgIDEyOCwgNjksIDczLCA2OSwgMTI4LCA2OSwgNzIsIDg3LCA2NSwgMjE4LCA2OSwgNzEsIDg5LCA4MCwgODQsIDc5LCA3NiwgCisgICAgNzksIDcxLCA3MywgNjcsIDY1LCAyMDQsIDY5LCA3MSwgNzMsIDgyLCAxMjgsIDY5LCA3MSwgNzEsIDEyOCwgNjksIDY5LCAKKyAgICA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjksIDY5LCA3NSwgNjUsIDY1LCAxMjgsIDY5LCA2OSwgNzIsIDEyOCwgNjksIAorICAgIDY5LCA2NiwgNjksIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2OSwgNjgsIDczLCA4NCwgNzksIDgyLCA3MywgNjUsIDIwNCwgCisgICAgNjksIDY4LCA3MywgNzgsIDEyOCwgNjksIDY4LCA2OCwgMTI4LCA2OSwgNjYsIDY5LCA3MCwgNzMsIDc2LCA3MywgMTI4LCAKKyAgICA2OSwgNjUsIDgzLCA4NCwgNjksIDgyLCAyMDYsIDY5LCA2NSwgODMsIDIxMiwgNjksIDY1LCA4MiwgODQsIDcyLCA3NiwgCisgICAgMjE3LCA2OSwgNjUsIDgyLCA4NCwgNzIsIDEyOCwgNjksIDY1LCA4MiwgODQsIDIwMCwgNjksIDY1LCA4MiwgODMsIDEyOCwgCisgICAgNjksIDY1LCA4MiwgNzYsIDIxNywgNjksIDY1LCA3NywgNzIsIDY1LCA3OCwgNjcsIDcyLCA3OSwgNzYsIDc2LCAxMjgsIDY5LCAKKyAgICA2NSwgNzEsIDc2LCA2OSwgMTI4LCA2OSwgNjUsIDY4LCA3MiwgNjUsIDY4LCA3MiwgMTI4LCA2OSwgNjUsIDY2LCA3MiwgNjUsIAorICAgIDY4LCA3MiwgMTI4LCA2OSwgMTc4LCA2OSwgNDgsIDUxLCA1NiwgMTI4LCA2OSwgNDgsIDUxLCA1NSwgMTI4LCA2OSwgNDgsIAorICAgIDUxLCA1NCwgMTI4LCA2OSwgNDgsIDUxLCA1MiwgNjUsIDEyOCwgNjksIDQ4LCA1MSwgNTIsIDEyOCwgNjksIDQ4LCA1MSwgCisgICAgNTEsIDEyOCwgNjksIDQ4LCA1MSwgNTAsIDEyOCwgNjksIDQ4LCA1MSwgNDksIDEyOCwgNjksIDQ4LCA1MSwgNDgsIDEyOCwgCisgICAgNjksIDQ4LCA1MCwgNTcsIDEyOCwgNjksIDQ4LCA1MCwgNTYsIDY1LCAxMjgsIDY5LCA0OCwgNTAsIDU2LCAxMjgsIDY5LCAKKyAgICA0OCwgNTAsIDU1LCAxMjgsIDY5LCA0OCwgNTAsIDU0LCAxMjgsIDY5LCA0OCwgNTAsIDUzLCAxMjgsIDY5LCA0OCwgNTAsIAorICAgIDUyLCAxMjgsIDY5LCA0OCwgNTAsIDUxLCAxMjgsIDY5LCA0OCwgNTAsIDUwLCAxMjgsIDY5LCA0OCwgNTAsIDQ5LCAxMjgsIAorICAgIDY5LCA0OCwgNTAsIDQ4LCA2NSwgMTI4LCA2OSwgNDgsIDUwLCA0OCwgMTI4LCA2OSwgNDgsIDQ5LCA1NywgMTI4LCA2OSwgCisgICAgNDgsIDQ5LCA1NiwgMTI4LCA2OSwgNDgsIDQ5LCA1NSwgNjUsIDEyOCwgNjksIDQ4LCA0OSwgNTUsIDEyOCwgNjksIDQ4LCAKKyAgICA0OSwgNTQsIDY1LCAxMjgsIDY5LCA0OCwgNDksIDU0LCAxMjgsIDY5LCA0OCwgNDksIDUzLCAxMjgsIDY5LCA0OCwgNDksIAorICAgIDUyLCAxMjgsIDY5LCA0OCwgNDksIDUxLCAxMjgsIDY5LCA0OCwgNDksIDUwLCAxMjgsIDY5LCA0OCwgNDksIDQ5LCAxMjgsIAorICAgIDY5LCA0OCwgNDksIDQ4LCAxMjgsIDY5LCA0OCwgNDgsIDU3LCA2NSwgMTI4LCA2OSwgNDgsIDQ4LCA1NywgMTI4LCA2OSwgCisgICAgNDgsIDQ4LCA1NiwgNjUsIDEyOCwgNjksIDQ4LCA0OCwgNTYsIDEyOCwgNjksIDQ4LCA0OCwgNTUsIDEyOCwgNjksIDQ4LCAKKyAgICA0OCwgNTQsIDEyOCwgNjksIDQ4LCA0OCwgNTMsIDEyOCwgNjksIDQ4LCA0OCwgNTIsIDEyOCwgNjksIDQ4LCA0OCwgNTEsIAorICAgIDEyOCwgNjksIDQ4LCA0OCwgNTAsIDEyOCwgNjksIDQ4LCA0OCwgNDksIDEyOCwgNjksIDQ1LCA3NywgNjUsIDczLCAyMDQsIAorICAgIDY4LCA5MCwgOTAsIDY5LCAxMjgsIDY4LCA5MCwgOTAsIDY1LCAxMjgsIDY4LCA5MCwgODcsIDY5LCAxMjgsIDY4LCA5MCwgCisgICAgODUsIDEyOCwgNjgsIDkwLCA3OSwgMTI4LCA2OCwgOTAsIDc0LCA2OSwgMTI4LCA2OCwgOTAsIDczLCAxMjgsIDY4LCA5MCwgCisgICAgNzIsIDY5LCAxMjgsIDY4LCA5MCwgNzIsIDY1LCAxMjgsIDY4LCA5MCwgNjksIDc2LCA3OSwgMTI4LCA2OCwgOTAsIDY5LCAKKyAgICA2OSwgMTI4LCA2OCwgOTAsIDY5LCAxMjgsIDY4LCA5MCwgNjUsIDY1LCAxMjgsIDY4LCA5MCwgNjUsIDEyOCwgNjgsIDkwLCAKKyAgICAxMjgsIDY4LCAyMTgsIDY4LCA4OSwgNzksIDEyOCwgNjgsIDg5LCAyMDcsIDY4LCA4OSwgNjksIDcyLCAxMjgsIDY4LCA4OSwgCisgICAgNjksIDIwMCwgNjgsIDg3LCA3OSwgMTI4LCA2OCwgODcsIDY5LCAxMjgsIDY4LCA4NywgNjUsIDEyOCwgNjgsIDg2LCA3MywgCisgICAgODMsIDg2LCA2NSwgODIsIDY1LCAxMjgsIDY4LCA4NiwgNjgsIDEyOCwgNjgsIDg2LCAxMjgsIDY4LCA4NSwgODQsIDczLCAKKyAgICA2OSwgODMsIDEyOCwgNjgsIDg1LCA4MywgNzUsIDEyOCwgNjgsIDg1LCA4MywgNzIsIDY5LCA3OCwgNzgsIDY1LCAxMjgsIAorICAgIDY4LCA4NSwgODIsIDY1LCA4NCwgNzMsIDc5LCA3OCwgMTI4LCA2OCwgODUsIDgyLCA1MCwgMTI4LCA2OCwgODUsIDgwLCA3OSwgCisgICAgNzgsIDY4LCA3MywgODUsIDIxMSwgNjgsIDg1LCA3OSwgODgsIDEyOCwgNjgsIDg1LCA3OSwgMTI4LCA2OCwgODUsIDc4LCAKKyAgICA1MiwgMTI4LCA2OCwgODUsIDc4LCA1MSwgMTI4LCA2OCwgODUsIDc4LCAxNzksIDY4LCA4NSwgNzcsIDEyOCwgNjgsIDg1LCAKKyAgICAyMDQsIDY4LCA4NSwgNzIsIDEyOCwgNjgsIDg1LCA3MSwgODUsIDY4LCAxMjgsIDY4LCA4NSwgNjYsIDUwLCAxMjgsIDY4LCAKKyAgICA4NSwgNjYsIDEyOCwgNjgsIDg1LCAxOTQsIDY4LCA4MiwgODksIDEyOCwgNjgsIDgyLCAyMTcsIDY4LCA4MiwgODUsIDc3LCAKKyAgICAxMjgsIDY4LCA4MiwgODUsIDIwNSwgNjgsIDgyLCA3OSwgODAsIDgzLCAxMjgsIDY4LCA4MiwgNzksIDgwLCA3NiwgNjksIAorICAgIDg0LCAxMjgsIDY4LCA4MiwgNzksIDgwLCA0NSwgODMsIDcyLCA2NSwgNjgsIDc5LCA4NywgNjksIDE5NiwgNjgsIDgyLCA3OSwgCisgICAgNzcsIDY5LCA2OCwgNjUsIDgyLCAyMTcsIDY4LCA4MiwgNzMsIDg2LCA2OSwgMTI4LCA2OCwgODIsIDczLCA4NiwgMTk3LCAKKyAgICA2OCwgODIsIDczLCA3OCwgNzUsIDEyOCwgNjgsIDgyLCA3MywgMjA0LCA2OCwgODIsIDY5LCA4MywgODMsIDEyOCwgNjgsIAorICAgIDgyLCA2NSwgODUsIDcxLCA3MiwgODQsIDIxMSwgNjgsIDgyLCA2NSwgNzcsIDEyOCwgNjgsIDgyLCA2NSwgMjA1LCA2OCwgCisgICAgODIsIDY1LCA3MSwgNzksIDc4LCAxMjgsIDY4LCA4MiwgNjUsIDcxLCA3OSwgMjA2LCA2OCwgODIsIDY1LCA3MCwgODQsIDczLCAKKyAgICA3OCwgMTk5LCA2OCwgODIsIDY1LCA2NywgNzIsIDc3LCA2NSwgODMsIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgNjUsIAorICAgIDEyOCwgNjgsIDgyLCA2NSwgNjcsIDcyLCA3NywgMTkzLCA2OCwgNzksIDg3LCA3OCwgODcsIDY1LCA4MiwgNjgsIDgzLCAKKyAgICAxMjgsIDY4LCA3OSwgODcsIDc4LCA4NywgNjUsIDgyLCA2OCwgMjExLCA2OCwgNzksIDg3LCA3OCwgNDUsIDgwLCA3OSwgNzMsIAorICAgIDc4LCA4NCwgNzMsIDc4LCAxOTksIDY4LCA3OSwgODcsIDc4LCAxMjgsIDY4LCA3OSwgODYsIDY5LCAxMjgsIDY4LCA3OSwgCisgICAgODUsIDcxLCA3MiwgNzgsIDg1LCA4NCwgMTI4LCA2OCwgNzksIDg1LCA2NiwgODQsIDEyOCwgNjgsIDc5LCA4NSwgNjYsIDc2LCAKKyAgICA2OSwgMTk2LCA2OCwgNzksIDg1LCA2NiwgNzYsIDY5LCA0NSwgNzYsIDczLCA3OCwgMTk3LCA2OCwgNzksIDg1LCA2NiwgNzYsIAorICAgIDY5LCA0NSwgNjksIDc4LCA2OCwgNjksIDE5NiwgNjgsIDc5LCA4NSwgNjYsIDc2LCA2OSwgMTI4LCA2OCwgNzksIDg0LCA4NCwgCisgICAgNjksIDY4LCA0NSwgODAsIDEyOCwgNjgsIDc5LCA4NCwgODQsIDY5LCA2OCwgNDUsIDc4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCAKKyAgICA2OSwgNjgsIDQ1LCA3NiwgMTI4LCA2OCwgNzksIDg0LCA4NCwgNjksIDY4LCAxMjgsIDY4LCA3OSwgODQsIDg0LCA2OSwgCisgICAgMTk2LCA2OCwgNzksIDg0LCA4MywgNDUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MywgNTUsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTMsIDU0LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUzLCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNTIsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUyLCAKKyAgICA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTQsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIAorICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTEsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTEsIDUyLCA1MywgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MSwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUxLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIDU2LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTQsIAorICAgIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NiwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNTAsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1NCwgNTUsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUyLCA1MywgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDUwLCA1MiwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgCisgICAgNTEsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA1MCwgNTEsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUzLCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgCisgICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCA1NSwgCisgICAgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCAKKyAgICA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIAorICAgIDUxLCA1MiwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1NCwgNTUsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNTAsIDUxLCA1MiwgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTYsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA1MCwgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgCisgICAgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNTAsIDUxLCA1MiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDUwLCA1MSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDUwLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTQsIAorICAgIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUzLCAKKyAgICA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MywgNTQsIDEyOCwgNjgsIDc5LCAKKyAgICA4NCwgODMsIDQ1LCA0OSwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU2LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU1LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUyLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgCisgICAgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MiwgNTMsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIAorICAgIDQ1LCA0OSwgNTEsIDU0LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1NCwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgCisgICAgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAKKyAgICA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUxLCA1MiwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTEsIDUyLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MSwgNTIsIDUzLCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCAKKyAgICA0OSwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCA1NSwgCisgICAgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCA1MywgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCAKKyAgICA0NSwgNDksIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCA1MiwgNTMsIDEyOCwgNjgsIAorICAgIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTEsIDUyLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUxLCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTUsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTQsIDU2LCAxMjgsIAorICAgIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MywgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTMsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUzLCA1NCwgMTI4LCA2OCwgNzksIDg0LCAKKyAgICA4MywgNDUsIDQ5LCA1MCwgNTMsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1NiwgMTI4LCA2OCwgNzksIAorICAgIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU1LCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIAorICAgIDUwLCA1MiwgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCA1NSwgMTI4LCA2OCwgCisgICAgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIAorICAgIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MiwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTYsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgCisgICAgNDUsIDQ5LCA1MCwgNTIsIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgNTQsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUyLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTIsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCAKKyAgICA1MCwgNTEsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU1LCAxMjgsIDY4LCA3OSwgODQsIAorICAgIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTQsIDU1LCAKKyAgICA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDU0LCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIAorICAgIDQ5LCA1MCwgNTEsIDU0LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU2LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTMsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAorICAgIDUzLCA1NSwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUzLCA1NCwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDU1LCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgNTQsIDEyOCwgNjgsIDc5LCA4NCwgCisgICAgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MywgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NiwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1MiwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTQsIDU2LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCA1NSwgNTYsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgCisgICAgNTAsIDUxLCA1MiwgNTQsIDU1LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDU0LCAxMjgsIDY4LCAKKyAgICA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NiwgMTI4LCA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgCisgICAgNTEsIDUyLCA1MywgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCA1NSwgMTI4LCAKKyAgICA2OCwgNzksIDg0LCA4MywgNDUsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgCisgICAgNDksIDUwLCA1MSwgNTIsIDUzLCA1NCwgNTUsIDU2LCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIAorICAgIDUzLCA1NCwgNTUsIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCAxMjgsIDY4LCA3OSwgCisgICAgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIDUzLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCA1MSwgNTIsIAorICAgIDEyOCwgNjgsIDc5LCA4NCwgODMsIDQ1LCA0OSwgNTAsIDUxLCAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDUwLCAKKyAgICAxMjgsIDY4LCA3OSwgODQsIDgzLCA0NSwgNDksIDEyOCwgNjgsIDc5LCA4NCwgODMsIDEyOCwgNjgsIDc5LCA4NCwgNzYsIAorICAgIDY5LCA4MywgMjExLCA2OCwgNzksIDgyLCA4NSwgMTI4LCA2OCwgNzksIDc5LCA4MiwgMTI4LCA2OCwgNzksIDc5LCA3OCwgCisgICAgNzEsIDEyOCwgNjgsIDc5LCA3OCwgNzEsIDEyOCwgNjgsIDc5LCA3NywgNjUsIDczLCAyMDYsIDY4LCA3OSwgNzYsIDgwLCAKKyAgICA3MiwgNzMsIDc4LCAxMjgsIDY4LCA3OSwgNzYsIDc2LCA4MywgMTI4LCA2OCwgNzksIDc2LCA3NiwgNjUsIDIxMCwgNjgsIAorICAgIDc5LCA3NiwgNzMsIDg1LCA3NywgMTI4LCA2OCwgNzksIDc1LCA3NywgNjUsIDczLCAxMjgsIDY4LCA3OSwgNzMsIDg0LCAKKyAgICAxMjgsIDY4LCA3OSwgNzEsIDEyOCwgNjgsIDc5LCAxOTksIDY4LCA3OSwgNjksIDIxMSwgNjgsIDc5LCA2OCwgNjksIDc1LCAKKyAgICA2NSwgODQsIDY1LCAxMjgsIDY4LCA3OSwgNjYsIDgyLCA3OSwgMTI4LCA2OCwgNzksIDY1LCA2NywgNzIsIDY1LCA4MywgNzIsIAorICAgIDc3LCA2OSwgNjksIDEyOCwgNjgsIDc5LCA2NSwgNjcsIDcyLCA2NSwgODMsIDcyLCA3NywgNjksIDE5NywgNjgsIDc5LCA2NSwgCisgICAgMTI4LCA2OCwgNzksIDQ1LCA3OSwgMTI4LCA2OCwgNzcsIDEyOCwgNjgsIDIwNSwgNjgsIDc2LCA4NSwgMTI4LCA2OCwgNzYsIAorICAgIDc5LCAxMjgsIDY4LCA3NiwgNzMsIDEyOCwgNjgsIDc2LCA3MiwgODksIDY1LCAxMjgsIDY4LCA3NiwgNzIsIDY1LCAxMjgsIAorICAgIDY4LCA3NiwgNjksIDY5LCAxMjgsIDY4LCA3NiwgNjUsIDEyOCwgNjgsIDc2LCAxMjgsIDY4LCA3NSwgNjUsIDgyLCAxMjgsIAorICAgIDY4LCA3NSwgNjUsIDIxMCwgNjgsIDc0LCA2OSwgODIsIDg2LCA3MywgMTI4LCA2OCwgNzQsIDY5LCA4MiwgODYsIDEyOCwgCisgICAgNjgsIDc0LCA2OSwgMTI4LCA2OCwgNzQsIDY1LCAxMjgsIDY4LCA3MywgOTAsIDkwLCAyMTcsIDY4LCA3MywgODYsIDc5LCAKKyAgICA4MiwgNjcsIDE5NywgNjgsIDczLCA4NiwgNzMsIDgzLCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODYsIDczLCA4MywgNzMsIAorICAgIDc5LCAyMDYsIDY4LCA3MywgODYsIDczLCA3OCwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgCisgICAgNjksIDgzLCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIDgyLCAxMjgsIDY4LCA3MywgODYsIDczLCA2OCwgNjksIAorICAgIDE5NiwgNjgsIDczLCA4NiwgNzMsIDY4LCA2OSwgMTI4LCA2OCwgNzMsIDg2LCA3MywgNjgsIDE5NywgNjgsIDczLCA4NiwgCisgICAgNjksIDgyLCA3MSwgNjksIDc4LCA2NywgNjksIDEyOCwgNjgsIDczLCA4NCwgODQsIDIwNywgNjgsIDczLCA4MywgODQsIDc5LCAKKyAgICA4MiwgODQsIDczLCA3OSwgNzgsIDEyOCwgNjgsIDczLCA4MywgODQsIDczLCA3OCwgNzEsIDg1LCA3MywgODMsIDcyLCAxMjgsIAorICAgIDY4LCA3MywgODMsIDg0LCA3MywgNzYsIDc2LCAxMjgsIDY4LCA3MywgODMsIDgzLCA3OSwgNzYsIDg2LCA2OSwgNDUsIDUwLCAKKyAgICAxMjgsIDY4LCA3MywgODMsIDgzLCA3OSwgNzYsIDg2LCA2OSwgMTI4LCA2OCwgNzMsIDgzLCA4MCwgNjksIDgyLCA4MywgNzMsIAorICAgIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDgzLCA3NSwgMTI4LCA2OCwgNzMsIDgzLCA3MywgNzcsIDc5LCA4NSwgMTI4LCA2OCwgCisgICAgNzMsIDgzLCA3MiwgMTI4LCA2OCwgNzMsIDgzLCA2NywgNzksIDc4LCA4NCwgNzMsIDc4LCA4NSwgNzksIDg1LCAyMTEsIDY4LCAKKyAgICA3MywgODMsIDE5NSwgNjgsIDczLCA4MywgNjUsIDgwLCA4MCwgNzksIDczLCA3OCwgODQsIDY5LCAxOTYsIDY4LCA3MywgODMsIAorICAgIDY1LCA2NiwgNzYsIDY5LCAxOTYsIDY4LCA3MywgODIsIDcxLCAxOTMsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDc2LCAKKyAgICAyMTcsIDY4LCA3MywgODIsIDY5LCA2NywgODQsIDczLCA3OSwgNzgsIDY1LCAyMDQsIDY4LCA3MywgODAsIDg0LCA2OSwgCisgICAgMTI4LCA2OCwgNzMsIDgwLCA4MCwgNjksIDgyLCAxMjgsIDY4LCA3MywgODAsIDc2LCA3OSwgODUsIDc4LCAxMjgsIDY4LCAKKyAgICA3MywgODAsIDc2LCA3MywgMTI4LCA2OCwgNzMsIDgwLCA3NiwgMjAxLCA2OCwgNzMsIDc4LCA3MSwgNjYsIDY1LCAyMTIsIAorICAgIDY4LCA3MywgMjA2LCA2OCwgNzMsIDc3LCA3NywgNzMsIDc4LCA3MSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgNzgsIDg1LCA4NCwgCisgICAgNzMsIDc5LCA3OCwgNDUsIDUxLCAxMjgsIDY4LCA3MywgNzcsIDczLCA3OCwgODUsIDg0LCA3MywgNzksIDc4LCA0NSwgNTAsIAorICAgIDEyOCwgNjgsIDczLCA3NywgNzMsIDc4LCA4NSwgODQsIDczLCA3OSwgNzgsIDQ1LCA0OSwgMTI4LCA2OCwgNzMsIDc3LCA3MywgCisgICAgNzgsIDczLCA4MywgNzIsIDc3LCA2OSwgNzgsIDg0LCAxMjgsIDY4LCA3MywgNzcsIDczLCA2OCwgNzMsIDE5MywgNjgsIDczLCAKKyAgICA3NywgNjksIDc4LCA4MywgNzMsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA3NywgNjksIDc4LCA4MywgNzMsIDc5LCAyMDYsIAorICAgIDY4LCA3MywgNzcsIDUwLCAxMjgsIDY4LCA3MywgNzYsIDEyOCwgNjgsIDczLCA3MSwgODIsIDY1LCA4MCwgNzIsIDEyOCwgCisgICAgNjgsIDczLCA3MSwgODIsIDY1LCA4MCwgMjAwLCA2OCwgNzMsIDcxLCA4MiwgNjUsIDc3LCA3NywgNzksIDIxMSwgNjgsIDczLCAKKyAgICA3MSwgODIsIDY1LCA3NywgNzcsIDE5MywgNjgsIDczLCA3MSwgODIsIDY1LCAyMDUsIDY4LCA3MywgNzEsIDc5LCA4MiwgNzEsIAorICAgIDc5LCA3OCwgMTI4LCA2OCwgNzMsIDcxLCA3OSwgODIsIDcxLCA3OSwgMjA2LCA2OCwgNzMsIDcxLCA2NSwgNzcsIDc3LCA2NSwgCisgICAgMTI4LCA2OCwgNzMsIDcxLCAxOTMsIDY4LCA3MywgNzAsIDg0LCA3OSwgNzEsIDcxLCA3OSwgMjExLCA2OCwgNzMsIDcwLCAKKyAgICA3OSwgNzgsIDczLCA2NSwgODMsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDczLCA2NywgODUsIDc2LCA4NCwgMjE3LCA2OCwgNzMsIAorICAgIDcwLCA3MCwgNzMsIDY3LCA4NSwgNzYsIDg0LCA3MywgNjksIDgzLCAxMjgsIDY4LCA3MywgNzAsIDcwLCA2OSwgODIsIDY5LCAKKyAgICA3OCwgODQsIDczLCA2NSwgNzYsIDEyOCwgNjgsIDczLCA3MCwgNzAsIDY5LCA4MiwgNjksIDc4LCA2NywgMTk3LCA2OCwgNzMsIAorICAgIDcwLCA2NSwgODQsIDEyOCwgNjgsIDczLCA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIDY5LCA4MywgNzMsIDIxMSwgCisgICAgNjgsIDczLCA2OSwgODAsIDEyOCwgNjgsIDczLCAxOTcsIDY4LCA3MywgNjYsIDEyOCwgNjgsIDczLCA2NSwgODQsIDc5LCAKKyAgICA3OCwgNzksIDIwNiwgNjgsIDczLCA2NSwgODQsIDc5LCA3OCwgNzMsIDc1LCAyMDEsIDY4LCA3MywgNjUsIDgzLCA4NCwgNzksIAorICAgIDc2LCAyMDEsIDY4LCA3MywgNjUsIDc3LCA3OSwgNzgsIDY4LCA4MywgMTI4LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCA2OCwgCisgICAgMTI4LCA2OCwgNzMsIDY1LCA3NywgNzksIDc4LCAxOTYsIDY4LCA3MywgNjUsIDc3LCA2OSwgODQsIDY5LCAyMTAsIDY4LCAKKyAgICA3MywgNjUsIDc2LCA4OSwgODQsIDczLCA3NSwgNjUsIDEyOCwgNjgsIDczLCA2NSwgNzYsIDg5LCA4NCwgNzMsIDc1LCAxOTMsIAorICAgIDY4LCA3MywgNjUsIDc2LCA2OSwgNjcsIDg0LCA0NSwgMjA4LCA2OCwgNzMsIDY1LCA3MSwgNzksIDc4LCA2NSwgNzYsIDEyOCwgCisgICAgNjgsIDczLCA2NSwgNzEsIDc5LCA3OCwgNjUsIDIwNCwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA5MCwgNjksIAorICAgIDE5NiwgNjgsIDczLCA2NSwgNjksIDgyLCA2OSwgODMsIDczLCA4MywgMTI4LCA2OCwgNzMsIDY1LCA2OSwgODIsIDY5LCA4MywgCisgICAgNzMsIDIxMSwgNjgsIDcyLCA3OSwgODUsIDEyOCwgNjgsIDcyLCA3OSwgNzksIDEyOCwgNjgsIDcyLCA3OSwgMTI4LCA2OCwgCisgICAgNzIsIDczLCAxMjgsIDY4LCA3MiwgNzIsIDg1LCAxMjgsIDY4LCA3MiwgNzIsIDc5LCA3OSwgMTI4LCA2OCwgNzIsIDcyLCAKKyAgICA3OSwgMTI4LCA2OCwgNzIsIDcyLCA3MywgMTI4LCA2OCwgNzIsIDcyLCA2OSwgNjksIDEyOCwgNjgsIDcyLCA3MiwgNjksIAorICAgIDEyOCwgNjgsIDcyLCA3MiwgNjUsIDEyOCwgNjgsIDcyLCA2OSwgNjksIDEyOCwgNjgsIDcyLCA2NSwgODIsIDc3LCA2NSwgCisgICAgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjksIDg0LCA3MiwgMTI4LCA2OCwgNzIsIDY1LCA3NiwgNjUsIDg0LCA3MiwgMTI4LCAKKyAgICA2OCwgNzIsIDY1LCA3NiwgMTI4LCA2OCwgNzIsIDY1LCA2OCwgNzIsIDY5LCAxMjgsIDY4LCA3MiwgNjUsIDY1LCA3NiwgODUsIAorICAgIDEyOCwgNjgsIDcyLCA2NSwgNjUsIDEyOCwgNjgsIDcyLCA2NSwgMTI4LCA2OCwgNjksIDkwLCAyMDAsIDY4LCA2OSwgODksIAorICAgIDg0LCA2OSwgODIsIDc5LCAyMTMsIDY4LCA2OSwgODksIDg0LCA2OSwgODIsIDc5LCAyMTEsIDY4LCA2OSwgODgsIDczLCA2NSwgCisgICAgMTI4LCA2OCwgNjksIDg2LCA3MywgNjcsIDE5NywgNjgsIDY5LCA4NiwgNjksIDc2LCA3OSwgODAsIDc3LCA2OSwgNzgsIDg0LCAKKyAgICAxMjgsIDY4LCA2OSwgODUsIDc4LCA3MSwgMTI4LCA2OCwgNjksIDgzLCAyMDMsIDY4LCA2OSwgODMsIDczLCA3MSwgNzgsIAorICAgIDEyOCwgNjgsIDY5LCA4MywgNzMsIDEyOCwgNjgsIDY5LCA4MywgNjcsIDgyLCA3MywgODAsIDg0LCA3MywgNzksIDIwNiwgCisgICAgNjgsIDY5LCA4MywgNjcsIDY5LCA3OCwgNjgsIDczLCA3OCwgMTk5LCA2OCwgNjksIDgzLCA2NywgNjksIDc4LCA2OCwgNjksIAorICAgIDgyLCAxMjgsIDY4LCA2OSwgODIsIDY5LCA4NCwgNDUsIDcyLCA3MywgNjgsIDY5LCA4NCwgMTI4LCA2OCwgNjksIDgyLCA2OSwgCisgICAgODQsIDEyOCwgNjgsIDY5LCA4MCwgNjUsIDgyLCA4NCwgODUsIDgyLCA2OSwgMTI4LCA2OCwgNjksIDgwLCA2NSwgODIsIDg0LCAKKyAgICA3NywgNjksIDc4LCAyMTIsIDY4LCA2OSwgODAsIDY1LCA4MiwgODQsIDczLCA3OCwgMTk5LCA2OCwgNjksIDc4LCA4NCwgNzMsIAorICAgIDgzLCA4NCwgODIsIDIxNywgNjgsIDY5LCA3OCwgODQsIDY1LCAyMDQsIDY4LCA2OSwgNzgsIDc5LCA3NywgNzMsIDc4LCA2NSwgCisgICAgODQsIDc5LCA4MiwgMTI4LCA2OCwgNjksIDc4LCA3OSwgNzcsIDczLCA3OCwgNjUsIDg0LCA3OSwgMjEwLCA2OCwgNjksIDc4LCAKKyAgICA3OCwgNjksIDc4LCAxMjgsIDY4LCA2OSwgNzgsIDcxLCAxMjgsIDY4LCA2OSwgNzgsIDE5NywgNjgsIDY5LCA3OCwgNjUsIAorICAgIDgyLCA3MywgODUsIDIxMSwgNjgsIDY5LCA3NiwgODQsIDY1LCAxMjgsIDY4LCA2OSwgNzYsIDg0LCAxOTMsIDY4LCA2OSwgCisgICAgNzYsIDg0LCAxMjgsIDY4LCA2OSwgNzYsIDgwLCA3MiwgNzMsIDE5NSwgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgODIsIAorICAgIDIxNywgNjgsIDY5LCA3NiwgNzMsIDg2LCA2OSwgODIsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDczLCA3NywgCisgICAgNzMsIDg0LCA2OSwgODIsIDEyOCwgNjgsIDY5LCA3NiwgNzMsIDc3LCA3MywgODQsIDY5LCAyMTAsIDY4LCA2OSwgNzYsIDczLCAKKyAgICA2NywgNzMsIDc5LCA4NSwgMjExLCA2OCwgNjksIDc2LCA2OSwgODQsIDY5LCAxMjgsIDY4LCA2OSwgNzYsIDY5LCA4NCwgCiAgICAgMTk3LCA2OCwgNjksIDc1LCA2NSwgMTI4LCA2OCwgNjksIDc1LCAxMjgsIDY4LCA2OSwgNzMsIDEyOCwgNjgsIDY5LCA3MiwgCiAgICAgNzMsIDEyOCwgNjgsIDY5LCA3MSwgODIsIDY5LCAxOTcsIDY4LCA2OSwgNzAsIDczLCA3OCwgNzMsIDg0LCA3MywgNzksIDc4LCAKICAgICAxMjgsIDY4LCA2OSwgNzAsIDY5LCA2NywgODQsIDczLCA4NiwgNjksIDc4LCA2OSwgODMsIDIxMSwgNjgsIDY5LCA2OSwgODIsIApAQCAtNDU0Nyw5NiArNDU1MCw5NiBAQAogICAgIDczLCA3OSwgMjA2LCA2NSwgNzYsIDg0LCA2OSwgODIsIDc4LCA2NSwgODQsIDE5NywgNjUsIDc2LCA4NCwgNjUsIDEyOCwgCiAgICAgNjUsIDc2LCA4MCwgNzIsIDY1LCAxMjgsIDY1LCA3NiwgODAsIDcyLCAxOTMsIDY1LCA3NiwgODAsIDY1LCA4MCwgODIsIDY1LCAKICAgICA3OCwgNjUsIDEyOCwgNjUsIDc2LCA4MCwgNjUsIDgwLCA4MiwgNjUsIDY1LCA3OCwgMTkzLCA2NSwgNzYsIDgwLCA2NSwgCi0gICAgMTI4LCA2NSwgNzYsIDc3LCA3OSwgODMsIDIxMiwgNjUsIDc2LCA3NiwgNzksIDEyOCwgNjUsIDc2LCA3NiwgNzMsIDY1LCAKLSAgICA3OCwgNjcsIDY5LCAxMjgsIDY1LCA3NiwgNzYsIDIwMSwgNjUsIDc2LCA3NiwgNjUsIDIwMCwgNjUsIDc2LCA3NSwgNjUsIAotICAgIDc2LCA3MywgNDUsIDUwLCAxMjgsIDY1LCA3NiwgNzUsIDY1LCA3NiwgNzMsIDEyOCwgNjUsIDc2LCA3MywgNzEsIDc4LCA2OSwgCi0gICAgMTk2LCA2NSwgNzYsIDczLCA3MCwgODUsIDEyOCwgNjUsIDc2LCA3MywgNjksIDc4LCAxMjgsIDY1LCA3NiwgNzMsIDY5LCAKLSAgICAyMDYsIDY1LCA3NiwgNzEsIDczLCAyMTgsIDY1LCA3NiwgNzAsIDY1LCAxMjgsIDY1LCA3NiwgNjksIDg1LCAyMTIsIDY1LCAKLSAgICA3NiwgNjksIDgyLCA4NCwgMTI4LCA2NSwgNzYsIDY5LCA4MCwgNzIsIDEyOCwgNjUsIDc2LCA2OSwgNzcsIDY2LCA3MywgNjcsIAotICAgIDEyOCwgNjUsIDc2LCA2OSwgNzAsIDEyOCwgNjUsIDc2LCA2NSwgODksIDcyLCA2OSwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgCi0gICAgNzIsIDE5NywgNjUsIDc2LCA2NSwgODIsIDIwNSwgNjUsIDc2LCA2NSwgODAsIDcyLCAxMjgsIDY1LCA3NiwgNDUsIDc2LCAKLSAgICA2NSwgNzUsIDg1LCA3OCwgNjUsIDEyOCwgNjUsIDc1LCA4NCwgNzMsIDY5LCA4MywgNjksIDc2LCA4MywgNzUsIDY1LCA2NiwgCi0gICAgMTI4LCA2NSwgNzUsIDgzLCA2NSwgMTI4LCA2NSwgNzUsIDcyLCA3NywgNzMsIDc3LCA3MywgMTk1LCA2NSwgNzUsIDY2LCAKLSAgICA2NSwgMjEwLCA2NSwgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDc1LCA2NSwgODIsIDE5MywgNjUsIDczLCA4OSwgNjUsIAotICAgIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDczLCA4NiwgNzMsIDc2LCA3MywgMjAzLCA2NSwgNzMsIDg0LCA3OSwgMjA2LCA2NSwgCi0gICAgNzMsIDgyLCA4MCwgNzYsIDY1LCA3OCwgNjksIDEyOCwgNjUsIDczLCA3OCwgMjEzLCA2NSwgNzMsIDc4LCA3OCwgMTI4LCAKLSAgICA2NSwgNzMsIDc2LCA3NywgMTI4LCA2NSwgNzMsIDc1LCA2NSwgODIsIDY1LCAxMjgsIDY1LCA3MywgNzIsIDg2LCA4NSwgODMsIAotICAgIDEyOCwgNjUsIDcyLCA4MywgNjgsIDY1LCAxMjgsIDY1LCA3MiwgODMsIDY1LCAxMjgsIDY1LCA3MiwgNjUsIDc4LCAxOTksIAotICAgIDY1LCA3MiwgNjUsIDcxLCA3MSwgNjUsIDIxMCwgNjUsIDcyLCA2NSwgNjgsIDEyOCwgNjUsIDcxLCA4NSwgNzgsIDcxLCAKLSAgICAxMjgsIDY1LCA3MSwgNzksIDcxLCAyMDEsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgNzMsIDc5LCA3OCwgCi0gICAgMTI4LCA2NSwgNzEsIDcxLCA4MiwgNjUsIDg2LCA2NSwgODQsIDY5LCAxOTYsIDY1LCA3MSwgNjUsIDczLCA3OCwgMTI4LCAKLSAgICA2NSwgNzAsIDg0LCA2OSwgMjEwLCA2NSwgNzAsIDgzLCA2NSwgNjUsIDgxLCAxMjgsIDY1LCA3MCwgODIsIDczLCA2NywgNjUsIAotICAgIDIwNiwgNjUsIDcwLCA3OSwgODIsIDY5LCA3NywgNjksIDc4LCA4NCwgNzMsIDc5LCA3OCwgNjksIDY4LCAxMjgsIDY1LCA3MCwgCi0gICAgNzEsIDcyLCA2NSwgNzgsIDIwMSwgNjUsIDcwLCA3MCwgODIsIDczLCA2NywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDY5LCAKLSAgICA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA4OSwgMTI4LCA2NSwgNjksIDgzLCA2NywgODUsIDc2LCA2NSwgODAsIAotICAgIDczLCA4NSwgODMsIDEyOCwgNjUsIDY5LCA4MywgNjcsIDEyOCwgNjUsIDY5LCA4MywgMTI4LCA2NSwgNjksIDgyLCA3MywgCi0gICAgNjUsIDIwNCwgNjUsIDY5LCA4MiwgMTI4LCA2NSwgNjksIDc2LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCAKLSAgICA2NSwgNjksIDc2LCAxMjgsIDY1LCA2OSwgNzUsIDEyOCwgNjUsIDY5LCA3MSwgNjksIDY1LCAyMDYsIDY1LCA2OSwgNzEsIAotICAgIDEyOCwgNjUsIDY5LCA2OSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2OSwgNjksIDEyOCwgNjUsIDY5LCA2OCwgCi0gICAgNjUsIDQ1LCA4MCwgNzMsIDc2LCA3NiwgNjUsIDEyOCwgNjUsIDY5LCA2OCwgMTI4LCA2NSwgNjksIDY2LCAxMjgsIDY1LCAKLSAgICA2OCwgODYsIDY1LCA3OCwgODQsIDY1LCA3MSwgNjksIDEyOCwgNjUsIDY4LCA4NiwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIAotICAgIDY4LCA2OSwgNzEsIDEyOCwgNjUsIDY4LCA2OSwgMTk5LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCA4MywgNjksIDE5NiwgCi0gICAgNjUsIDY4LCA2OCwgODIsIDY5LCA4MywgMjExLCA2NSwgNjgsIDY4LCA2NSwgNzUsIDEyOCwgNjUsIDY4LCA2NSwgMjAzLCAKLSAgICA2NSwgNjcsIDg1LCA4NCwgNjksIDQ1LCA3NywgNjUsIDY3LCA4MiwgNzksIDc4LCAxMjgsIDY1LCA2NywgODUsIDg0LCA2OSwgCi0gICAgNDUsIDcxLCA4MiwgNjUsIDg2LCA2OSwgNDUsIDY1LCA2NywgODUsIDg0LCA2OSwgMTI4LCA2NSwgNjcsIDg1LCA4NCwgMTk3LCAKLSAgICA2NSwgNjcsIDg0LCA4NSwgNjUsIDc2LCA3NiwgMjE3LCA2NSwgNjcsIDg0LCA3MywgODYsIDY1LCA4NCwgMTk3LCA2NSwgNjcsIAotICAgIDgyLCA3OSwgODAsIDcyLCA3OSwgNzgsIDczLCAxOTUsIDY1LCA2NywgNzUsIDc4LCA3OSwgODcsIDc2LCA2OSwgNjgsIDcxLCAKLSAgICA2OSwgMTI4LCA2NSwgNjcsIDY3LCA4NSwgNzcsIDg1LCA3NiwgNjUsIDg0LCA3MywgNzksIDc4LCAxMjgsIDY1LCA2NywgNjcsIAotICAgIDc5LCA4NSwgNzgsIDIxMiwgNjUsIDY3LCA2NywgNjksIDgwLCA4NCwgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDg0LCA0NSwgCi0gICAgODMsIDg0LCA2NSwgNjcsIDY3LCA2NSwgODQsIDc5LCAxMjgsIDY1LCA2NywgNjcsIDY5LCA3OCwgODQsIDEyOCwgNjUsIDY3LCAKLSAgICA2NywgNjksIDc4LCAyMTIsIDY1LCA2NywgNjUsIDY4LCA2OSwgNzcsIDIxNywgNjUsIDY2LCA4OSwgODMsIDc3LCA2NSwgCi0gICAgMjA0LCA2NSwgNjYsIDg1LCA3OCwgNjgsIDY1LCA3OCwgNjcsIDY5LCAxMjgsIDY1LCA2NiwgNzUsIDcyLCA2NSwgODMsIDczLCAKLSAgICA2NSwgMjA2LCA2NSwgNjYsIDY2LCA4MiwgNjksIDg2LCA3MywgNjUsIDg0LCA3MywgNzksIDIwNiwgNjUsIDY2LCA2NSwgNzAsIAotICAgIDczLCA3NiwgNzMsIDEyOCwgNjUsIDY2LCAxNzgsIDY1LCA2NSwgODksIDY1LCA3OCwgNzgsIDY1LCAxMjgsIDY1LCA2NSwgCi0gICAgODksIDEyOCwgNjUsIDY1LCA4NywgMTI4LCA2NSwgNjUsIDc5LCAxMjgsIDY1LCA2NSwgNzQsIDEyOCwgNjUsIDY1LCA2NiwgCi0gICAgNjUsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjUsIDQ4LCA1MSwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDQ5LCAKLSAgICAxMjgsIDY1LCA2NSwgNDgsIDUxLCA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIAotICAgIDU2LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgCi0gICAgNTAsIDUzLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTEsIDEyOCwgNjUsIDY1LCAKLSAgICA0OCwgNTAsIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNDgsIDEyOCwgNjUsIAotICAgIDY1LCA0OCwgNDksIDU3LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTUsIDEyOCwgCi0gICAgNjUsIDY1LCA0OCwgNDksIDU0LCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MywgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTIsIAotICAgIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUxLCAxMjgsIDY1LCA2NSwgNDgsIDQ5LCA1MCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgCi0gICAgNDksIDEyOCwgNjUsIDY1LCA0OCwgNDksIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NywgMTI4LCA2NSwgNjUsIDQ4LCAKLSAgICA0OCwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCA2NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDY1LCAxMjgsIAotICAgIDY1LCA2NSwgNDgsIDQ4LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUzLCAKLSAgICAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIAotICAgIDUwLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA0OSwgMTI4LCA2NSwgNDgsIDU1LCA0OCwgMTI4LCA2NSwgNDgsIDU0LCA1NywgCi0gICAgMTI4LCA2NSwgNDgsIDU0LCA1NiwgMTI4LCA2NSwgNDgsIDU0LCA1NSwgMTI4LCA2NSwgNDgsIDU0LCA1NCwgMTI4LCA2NSwgCi0gICAgNDgsIDU0LCA1MywgMTI4LCA2NSwgNDgsIDU0LCA1MiwgMTI4LCA2NSwgNDgsIDU0LCA1MSwgMTI4LCA2NSwgNDgsIDU0LCAKLSAgICA1MCwgMTI4LCA2NSwgNDgsIDU0LCA0OSwgMTI4LCA2NSwgNDgsIDU0LCA0OCwgMTI4LCA2NSwgNDgsIDUzLCA1NywgMTI4LCAKLSAgICA2NSwgNDgsIDUzLCA1NiwgMTI4LCA2NSwgNDgsIDUzLCA1NSwgMTI4LCA2NSwgNDgsIDUzLCA1NCwgMTI4LCA2NSwgNDgsIAotICAgIDUzLCA1MywgMTI4LCA2NSwgNDgsIDUzLCA1MiwgMTI4LCA2NSwgNDgsIDUzLCA1MSwgMTI4LCA2NSwgNDgsIDUzLCA1MCwgCi0gICAgMTI4LCA2NSwgNDgsIDUzLCA0OSwgMTI4LCA2NSwgNDgsIDUzLCA0OCwgMTI4LCA2NSwgNDgsIDUyLCA1NywgMTI4LCA2NSwgCi0gICAgNDgsIDUyLCA1NiwgMTI4LCA2NSwgNDgsIDUyLCA1NSwgMTI4LCA2NSwgNDgsIDUyLCA1NCwgMTI4LCA2NSwgNDgsIDUyLCAKLSAgICA1MywgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTMsIDEyOCwgNjUsIDQ4LCA1MiwgNTIsIDEyOCwgNjUsIDQ4LCA1MiwgNTEsIAotICAgIDY1LCAxMjgsIDY1LCA0OCwgNTIsIDUxLCAxMjgsIDY1LCA0OCwgNTIsIDUwLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MCwgCi0gICAgMTI4LCA2NSwgNDgsIDUyLCA0OSwgMTI4LCA2NSwgNDgsIDUyLCA0OCwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNDgsIDEyOCwgCi0gICAgNjUsIDQ4LCA1MSwgNTcsIDEyOCwgNjUsIDQ4LCA1MSwgNTYsIDEyOCwgNjUsIDQ4LCA1MSwgNTUsIDEyOCwgNjUsIDQ4LCAKLSAgICA1MSwgNTQsIDEyOCwgNjUsIDQ4LCA1MSwgNTMsIDEyOCwgNjUsIDQ4LCA1MSwgNTIsIDEyOCwgNjUsIDQ4LCA1MSwgNTEsIAotICAgIDEyOCwgNjUsIDQ4LCA1MSwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgNDksIDU1LCA2NSwgMTI4LCA2NSwgNDgsIDQ5LCA1MiwgCi0gICAgNjUsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY2LCAxMjgsIDY1LCA0OCwgNDgsIDU0LCA2NSwgMTI4LCA2NSwgNDgsIDQ4LCAKLSAgICA1MywgNjUsIDEyOCwgNjUsIDQ1LCA2OSwgODUsIDEyOCwgNDUsIDg1LCAyMDUsIDQ1LCA4MCwgNzIsIDgyLCA4NSwgMTI4LCAKLSAgICA0NSwgNzUsIDcyLCA4OSwgODUsIDE5NiwgNDUsIDc1LCA3MiwgODksIDczLCA3NiwgMTI4LCA0NSwgNjgsIDkwLCA4NSwgCi0gICAgMTk2LCA0NSwgNjcsIDcyLCA2NSwgMjEwLCA0NSwgNjcsIDcyLCA2NSwgNzYsIDEyOCwgCisgICAgMTI4LCA2NSwgNzYsIDc3LCA3OSwgODMsIDIxMiwgNjUsIDc2LCA3NywgMTI4LCA2NSwgNzYsIDc2LCA3OSwgMTI4LCA2NSwgCisgICAgNzYsIDc2LCA3MywgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDc2LCA3NiwgMjAxLCA2NSwgNzYsIDc2LCA2NSwgMjAwLCAKKyAgICA2NSwgNzYsIDc1LCA2NSwgNzYsIDczLCA0NSwgNTAsIDEyOCwgNjUsIDc2LCA3NSwgNjUsIDc2LCA3MywgMTI4LCA2NSwgNzYsIAorICAgIDczLCA3MSwgNzgsIDY5LCAxOTYsIDY1LCA3NiwgNzMsIDcwLCA4NSwgMTI4LCA2NSwgNzYsIDczLCA2OSwgNzgsIDEyOCwgCisgICAgNjUsIDc2LCA3MywgNjksIDIwNiwgNjUsIDc2LCA3MSwgNzMsIDIxOCwgNjUsIDc2LCA3MCwgNjUsIDEyOCwgNjUsIDc2LCAKKyAgICA2OSwgODUsIDIxMiwgNjUsIDc2LCA2OSwgODIsIDg0LCAxMjgsIDY1LCA3NiwgNjksIDgwLCA3MiwgMTI4LCA2NSwgNzYsIAorICAgIDY5LCA3NywgNjYsIDczLCA2NywgMTI4LCA2NSwgNzYsIDY5LCA3MCwgMTI4LCA2NSwgNzYsIDY1LCA4OSwgNzIsIDY5LCAKKyAgICAxMjgsIDY1LCA3NiwgNjUsIDg5LCA3MiwgMTk3LCA2NSwgNzYsIDY1LCA4MiwgMjA1LCA2NSwgNzYsIDY1LCA4MCwgNzIsIAorICAgIDEyOCwgNjUsIDc2LCA0NSwgNzYsIDY1LCA3NSwgODUsIDc4LCA2NSwgMTI4LCA2NSwgNzUsIDg0LCA3MywgNjksIDgzLCA2OSwgCisgICAgNzYsIDgzLCA3NSwgNjUsIDY2LCAxMjgsIDY1LCA3NSwgODMsIDY1LCAxMjgsIDY1LCA3NSwgNzIsIDc3LCA3MywgNzcsIDczLCAKKyAgICAxOTUsIDY1LCA3NSwgNjYsIDY1LCAyMTAsIDY1LCA3NSwgNjUsIDgyLCA2NSwgMTI4LCA2NSwgNzUsIDY1LCA4MiwgMTkzLCAKKyAgICA2NSwgNzMsIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNzMsIDg2LCA3MywgNzYsIDczLCAyMDMsIDY1LCA3MywgODQsIAorICAgIDc5LCAyMDYsIDY1LCA3MywgODIsIDgwLCA3NiwgNjUsIDc4LCA2OSwgMTI4LCA2NSwgNzMsIDc4LCAyMTMsIDY1LCA3MywgCisgICAgNzgsIDc4LCAxMjgsIDY1LCA3MywgNzYsIDc3LCAxMjgsIDY1LCA3MywgNzUsIDY1LCA4MiwgNjUsIDEyOCwgNjUsIDczLCAKKyAgICA3MiwgODYsIDg1LCA4MywgMTI4LCA2NSwgNzIsIDgzLCA2OCwgNjUsIDEyOCwgNjUsIDcyLCA4MywgNjUsIDEyOCwgNjUsIAorICAgIDcyLCA2NSwgNzgsIDE5OSwgNjUsIDcyLCA2NSwgNzEsIDcxLCA2NSwgMjEwLCA2NSwgNzIsIDY1LCA2OCwgMTI4LCA2NSwgCisgICAgNzEsIDg1LCA3OCwgNzEsIDEyOCwgNjUsIDcxLCA3OSwgNzEsIDIwMSwgNjUsIDcxLCA3MSwgODIsIDY1LCA4NiwgNjUsIDg0LCAKKyAgICA3MywgNzksIDc4LCAxMjgsIDY1LCA3MSwgNzEsIDgyLCA2NSwgODYsIDY1LCA4NCwgNjksIDE5NiwgNjUsIDcxLCA2NSwgNzMsIAorICAgIDc4LCAxMjgsIDY1LCA3MCwgODQsIDY5LCAyMTAsIDY1LCA3MCwgODMsIDY1LCA2NSwgODEsIDEyOCwgNjUsIDcwLCA4MiwgCisgICAgNzMsIDY3LCA2NSwgMjA2LCA2NSwgNzAsIDc5LCA4MiwgNjksIDc3LCA2OSwgNzgsIDg0LCA3MywgNzksIDc4LCA2OSwgNjgsIAorICAgIDEyOCwgNjUsIDcwLCA3MSwgNzIsIDY1LCA3OCwgMjAxLCA2NSwgNzAsIDcwLCA4MiwgNzMsIDY3LCA2NSwgODQsIDczLCA3OSwgCisgICAgMjA2LCA2NSwgNjksIDg5LCA2NSwgNzgsIDc4LCA2NSwgMTI4LCA2NSwgNjksIDg5LCAxMjgsIDY1LCA2OSwgODMsIDY3LCAKKyAgICA4NSwgNzYsIDY1LCA4MCwgNzMsIDg1LCA4MywgMTI4LCA2NSwgNjksIDgzLCA2NywgMTI4LCA2NSwgNjksIDgzLCAxMjgsIAorICAgIDY1LCA2OSwgODIsIDczLCA2NSwgMjA0LCA2NSwgNjksIDgyLCAxMjgsIDY1LCA2OSwgNzYsIDY1LCA0NSwgODAsIDczLCA3NiwgCisgICAgNzYsIDY1LCAxMjgsIDY1LCA2OSwgNzYsIDEyOCwgNjUsIDY5LCA3NSwgMTI4LCA2NSwgNjksIDcxLCA2OSwgNjUsIDIwNiwgCisgICAgNjUsIDY5LCA3MSwgMTI4LCA2NSwgNjksIDY5LCA4OSwgNjUsIDc4LCA3OCwgNjUsIDEyOCwgNjUsIDY5LCA2OSwgMTI4LCAKKyAgICA2NSwgNjksIDY4LCA2NSwgNDUsIDgwLCA3MywgNzYsIDc2LCA2NSwgMTI4LCA2NSwgNjksIDY4LCAxMjgsIDY1LCA2OSwgNjYsIAorICAgIDEyOCwgNjUsIDY4LCA4NiwgNjUsIDc4LCA4NCwgNjUsIDcxLCA2OSwgMTI4LCA2NSwgNjgsIDg2LCA2NSwgNzgsIDY3LCA2OSwgCisgICAgMTI4LCA2NSwgNjgsIDY5LCA3MSwgMTI4LCA2NSwgNjgsIDY5LCAxOTksIDY1LCA2OCwgNjgsIDgyLCA2OSwgODMsIDgzLCAKKyAgICA2OSwgMTk2LCA2NSwgNjgsIDY4LCA4MiwgNjksIDgzLCAyMTEsIDY1LCA2OCwgNjgsIDY1LCA3NSwgMTI4LCA2NSwgNjgsIAorICAgIDY1LCAyMDMsIDY1LCA2NywgODUsIDg0LCA2OSwgNDUsIDc3LCA2NSwgNjcsIDgyLCA3OSwgNzgsIDEyOCwgNjUsIDY3LCA4NSwgCisgICAgODQsIDY5LCA0NSwgNzEsIDgyLCA2NSwgODYsIDY5LCA0NSwgNjUsIDY3LCA4NSwgODQsIDY5LCAxMjgsIDY1LCA2NywgODUsIAorICAgIDg0LCAxOTcsIDY1LCA2NywgODQsIDg1LCA2NSwgNzYsIDc2LCAyMTcsIDY1LCA2NywgODQsIDczLCA4NiwgNjUsIDg0LCAKKyAgICAxOTcsIDY1LCA2NywgODIsIDc5LCA4MCwgNzIsIDc5LCA3OCwgNzMsIDE5NSwgNjUsIDY3LCA3NSwgNzgsIDc5LCA4NywgNzYsIAorICAgIDY5LCA2OCwgNzEsIDY5LCAxMjgsIDY1LCA2NywgNjcsIDg1LCA3NywgODUsIDc2LCA2NSwgODQsIDczLCA3OSwgNzgsIDEyOCwgCisgICAgNjUsIDY3LCA2NywgNzksIDg1LCA3OCwgMjEyLCA2NSwgNjcsIDY3LCA2OSwgODAsIDg0LCAxMjgsIDY1LCA2NywgNjcsIDY5LCAKKyAgICA3OCwgODQsIDQ1LCA4MywgODQsIDY1LCA2NywgNjcsIDY1LCA4NCwgNzksIDEyOCwgNjUsIDY3LCA2NywgNjksIDc4LCA4NCwgCisgICAgMTI4LCA2NSwgNjcsIDY3LCA2OSwgNzgsIDIxMiwgNjUsIDY3LCA2NSwgNjgsIDY5LCA3NywgMjE3LCA2NSwgNjYsIDg5LCAKKyAgICA4MywgNzcsIDY1LCAyMDQsIDY1LCA2NiwgODUsIDc4LCA2OCwgNjUsIDc4LCA2NywgNjksIDEyOCwgNjUsIDY2LCA3NSwgNzIsIAorICAgIDY1LCA4MywgNzMsIDY1LCAyMDYsIDY1LCA2NiwgNjYsIDgyLCA2OSwgODYsIDczLCA2NSwgODQsIDczLCA3OSwgMjA2LCA2NSwgCisgICAgNjYsIDY1LCA3MCwgNzMsIDc2LCA3MywgMTI4LCA2NSwgNjYsIDE3OCwgNjUsIDY1LCA4OSwgNjUsIDc4LCA3OCwgNjUsIAorICAgIDEyOCwgNjUsIDY1LCA4OSwgMTI4LCA2NSwgNjUsIDg3LCAxMjgsIDY1LCA2NSwgNzksIDEyOCwgNjUsIDY1LCA3NCwgMTI4LCAKKyAgICA2NSwgNjUsIDY2LCA2NSwgNjUsIDcwLCA3MywgNzYsIDczLCAxMjgsIDY1LCA2NSwgNDgsIDUxLCA1MCwgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA1MSwgNDksIDEyOCwgNjUsIDY1LCA0OCwgNTEsIDQ4LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NywgMTI4LCA2NSwgCisgICAgNjUsIDQ4LCA1MCwgNTYsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1NCwgMTI4LCAKKyAgICA2NSwgNjUsIDQ4LCA1MCwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDUwLCA1MSwgCisgICAgMTI4LCA2NSwgNjUsIDQ4LCA1MCwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNTAsIDQ5LCAxMjgsIDY1LCA2NSwgNDgsIDUwLCAKKyAgICA0OCwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTcsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDU2LCAxMjgsIDY1LCA2NSwgNDgsIAorICAgIDQ5LCA1NSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTQsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUzLCAxMjgsIDY1LCA2NSwgCisgICAgNDgsIDQ5LCA1MiwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNTEsIDEyOCwgNjUsIDY1LCA0OCwgNDksIDUwLCAxMjgsIDY1LCAKKyAgICA2NSwgNDgsIDQ5LCA0OSwgMTI4LCA2NSwgNjUsIDQ4LCA0OSwgNDgsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU3LCAxMjgsIAorICAgIDY1LCA2NSwgNDgsIDQ4LCA1NiwgMTI4LCA2NSwgNjUsIDQ4LCA0OCwgNTUsIDY2LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NSwgCisgICAgNjUsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDU1LCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1NCwgMTI4LCA2NSwgNjUsIDQ4LCAKKyAgICA0OCwgNTMsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDUyLCAxMjgsIDY1LCA2NSwgNDgsIDQ4LCA1MSwgMTI4LCA2NSwgNjUsIAorICAgIDQ4LCA0OCwgNTAsIDEyOCwgNjUsIDY1LCA0OCwgNDgsIDQ5LCAxMjgsIDY1LCA0OCwgNTUsIDQ4LCAxMjgsIDY1LCA0OCwgCisgICAgNTQsIDU3LCAxMjgsIDY1LCA0OCwgNTQsIDU2LCAxMjgsIDY1LCA0OCwgNTQsIDU1LCAxMjgsIDY1LCA0OCwgNTQsIDU0LCAKKyAgICAxMjgsIDY1LCA0OCwgNTQsIDUzLCAxMjgsIDY1LCA0OCwgNTQsIDUyLCAxMjgsIDY1LCA0OCwgNTQsIDUxLCAxMjgsIDY1LCAKKyAgICA0OCwgNTQsIDUwLCAxMjgsIDY1LCA0OCwgNTQsIDQ5LCAxMjgsIDY1LCA0OCwgNTQsIDQ4LCAxMjgsIDY1LCA0OCwgNTMsIAorICAgIDU3LCAxMjgsIDY1LCA0OCwgNTMsIDU2LCAxMjgsIDY1LCA0OCwgNTMsIDU1LCAxMjgsIDY1LCA0OCwgNTMsIDU0LCAxMjgsIAorICAgIDY1LCA0OCwgNTMsIDUzLCAxMjgsIDY1LCA0OCwgNTMsIDUyLCAxMjgsIDY1LCA0OCwgNTMsIDUxLCAxMjgsIDY1LCA0OCwgCisgICAgNTMsIDUwLCAxMjgsIDY1LCA0OCwgNTMsIDQ5LCAxMjgsIDY1LCA0OCwgNTMsIDQ4LCAxMjgsIDY1LCA0OCwgNTIsIDU3LCAKKyAgICAxMjgsIDY1LCA0OCwgNTIsIDU2LCAxMjgsIDY1LCA0OCwgNTIsIDU1LCAxMjgsIDY1LCA0OCwgNTIsIDU0LCAxMjgsIDY1LCAKKyAgICA0OCwgNTIsIDUzLCA2NSwgMTI4LCA2NSwgNDgsIDUyLCA1MywgMTI4LCA2NSwgNDgsIDUyLCA1MiwgMTI4LCA2NSwgNDgsIAorICAgIDUyLCA1MSwgNjUsIDEyOCwgNjUsIDQ4LCA1MiwgNTEsIDEyOCwgNjUsIDQ4LCA1MiwgNTAsIDY1LCAxMjgsIDY1LCA0OCwgCisgICAgNTIsIDUwLCAxMjgsIDY1LCA0OCwgNTIsIDQ5LCAxMjgsIDY1LCA0OCwgNTIsIDQ4LCA2NSwgMTI4LCA2NSwgNDgsIDUyLCAKKyAgICA0OCwgMTI4LCA2NSwgNDgsIDUxLCA1NywgMTI4LCA2NSwgNDgsIDUxLCA1NiwgMTI4LCA2NSwgNDgsIDUxLCA1NSwgMTI4LCAKKyAgICA2NSwgNDgsIDUxLCA1NCwgMTI4LCA2NSwgNDgsIDUxLCA1MywgMTI4LCA2NSwgNDgsIDUxLCA1MiwgMTI4LCA2NSwgNDgsIAorICAgIDUxLCA1MSwgMTI4LCA2NSwgNDgsIDUxLCA1MCwgNjUsIDEyOCwgNjUsIDQ4LCA0OSwgNTUsIDY1LCAxMjgsIDY1LCA0OCwgCisgICAgNDksIDUyLCA2NSwgMTI4LCA2NSwgNDgsIDQ4LCA1NCwgNjYsIDEyOCwgNjUsIDQ4LCA0OCwgNTQsIDY1LCAxMjgsIDY1LCAKKyAgICA0OCwgNDgsIDUzLCA2NSwgMTI4LCA2NSwgNDUsIDY5LCA4NSwgMTI4LCA0NSwgODUsIDIwNSwgNDUsIDgwLCA3MiwgODIsIAorICAgIDg1LCAxMjgsIDQ1LCA3NSwgNzIsIDg5LCA4NSwgMTk2LCA0NSwgNzUsIDcyLCA4OSwgNzMsIDc2LCAxMjgsIDQ1LCA2OCwgCisgICAgOTAsIDg1LCAxOTYsIDQ1LCA2NywgNzIsIDY1LCAyMTAsIDQ1LCA2NywgNzIsIDY1LCA3NiwgMTI4LCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGV4aWNvbl9vZmZzZXRbXSA9IHsKLSAgICAwLCAwLCA2LCAxMCwgMTgsIDIzLCAyNywgMzQsIDM5LCA0MSwgNDQsIDUwLCA2MiwgNzAsIDgwLCA5MywgMTAyLCAxMDgsIAorICAgIDAsIDAsIDYsIDEwLCAxOCwgMjMsIDI3LCAzNCwgMzksIDQxLCA0NywgNTAsIDYyLCA3MCwgODAsIDkzLCAxMDIsIDEwOCwgCiAgICAgMTEzLCAxMjEsIDEzMCwgMTM1LCAxNDAsIDE0MywgMTQ3LCAxNTMsIDE1OCwgMTYzLCAxNzEsIDE3OCwgMTg2LCAxOTEsIAogICAgIDE5NCwgMjAwLCAyMDgsIDIxNSwgMjI1LCAyMzAsIDIzNywgMjQ2LCAyNDksIDI1NCwgMjU3LCAyNjMsIDI2NywgMjcyLCAKICAgICAyODEsIDI4OCwgMjk1LCAzMDEsIDMxMCwgMzE1LCAzMjEsIDMyNywgMzM1LCAxNDQsIDM0MSwgMzQ5LCAzNTAsIDM1OCwgCi0gICAgMzYxLCAzNjcsIDM2OSwgMzc1LCAzODIsIDM4NCwgMzkxLCAzOTUsIDQwMywgNDEwLCA0MTUsIDQxNywgNDIyLCA0MjksIAotICAgIDQzMSwgMjk5LCA0MzcsIDQzOSwgNDQ0LCA0NDksIDQ1MiwgNDU3LCA0NjMsIDQ3MCwgNDc5LCA0ODksIDQ5NCwgNDk4LCAKKyAgICAzNjEsIDM2NywgMzY5LCAzNzUsIDM4MiwgMzg0LCAzOTEsIDM5NSwgNDAzLCA0MTAsIDQxMiwgNDE3LCA0MjIsIDQyNywgCisgICAgNDM0LCA0MzYsIDI5OSwgNDQyLCA0NDUsIDQ0NywgNDUyLCA0NTcsIDQ2MywgNDcwLCA0NzksIDQ4OSwgNDk0LCA0OTgsIAogICAgIDUwNSwgNTE4LCA1MjIsIDUzMSwgNTM4LCA1NDUsIDU0OCwgNTU0LCA1NTgsIDU2MiwgNTcyLCA1ODAsIDU4OCwgNTk2LCAKLSAgICA2MDUsIDYxMywgNjE4LCA2MTksIDYyMywgNjMxLCA2MzgsIDY0OCwgNjU5LCA2NjMsIDY2NiwgNjcwLCA2NzMsIDM0OCwgCi0gICAgNjc4LCA2ODcsIDY5MSwgNjk3LCA3MDMsIDcwNSwgNzA4LCA3MTEsIDcxNCwgNzE4LCA3MjIsIDczMSwgNzM5LCA3NDQsIAorICAgIDYwNSwgNjEzLCA2MTgsIDYxOSwgNjIzLCA2MzEsIDYzOCwgNjQ4LCA2NTIsIDY2MywgNjY3LCA2NzAsIDY3MywgNjc4LCAKKyAgICAzNDgsIDY4MiwgNjkxLCA2OTcsIDcwMywgNzA1LCA3MDgsIDcxMSwgNzE0LCA3MTgsIDcyMiwgNzMxLCA3MzksIDc0NCwgCiAgICAgNzQ3LCA3NTEsIDc1NywgNzY0LCA3NzEsIDc3NiwgNzg1LCA3OTQsIDgwMSwgODA1LCA4MTgsIDgyNywgODM1LCA4NDEsIAogICAgIDU1NywgODUwLCA4NjAsIDg2NywgODczLCA4NzksIDg4NiwgODk0LCA4OTgsIDc0OSwgOTA2LCA5MTUsIDUwMywgOTIzLCAKICAgICA5MjgsIDkzNCwgMTcsIDk0MywgOTQ4LCA5NTEsIDk1NSwgOTU5LCA5NjYsIDk2OSwgOTc2LCA5ODAsIDk4OCwgOTkyLCAKLSAgICAxMDAwLCAxMDA0LCAxMDA3LCAxMDE0LCAxMDIxLCAxOTIsIDEwMjQsIDEwMjksIDEwMzksIDEwNDgsIDEwNTUsIDEwNjEsIAotICAgIDEwNjksIDEwNzIsIDEwNzcsIDEwODMsIDEwOTEsIDEwOTcsIDExMDIsIDExMDUsIDExMDgsIDExMSwgMTExMywgMTExNywgCi0gICAgMTEyMywgMTEyOSwgMTEzMiwgMTEzOCwgMTE0MiwgMTE0NywgMTE1MywgMTE1OCwgMTE2OCwgMTE3MiwgMTE3NSwgMTE3OCwgCisgICAgMTAwMCwgMTAwNCwgMTAwNywgMTAxNCwgMTAyMSwgMTkyLCAxMDI0LCAxMDI5LCAxMDM5LCAxMDQ4LCAxMDU1LCAxMDYwLCAKKyAgICAxMDY2LCAxMDcyLCAxMDgwLCAxMDgzLCAxMDg4LCAxMDk0LCAxMTAyLCAxMTA3LCAxMTEwLCAxMTEzLCAxMTEsIDExMTgsIAorICAgIDExMjIsIDExMjgsIDExMzQsIDExMzcsIDExNDMsIDExNDcsIDExNTIsIDExNTgsIDExNjgsIDExNzIsIDExNzUsIDExNzgsIAogICAgIDExODcsIDExOTEsIDExOTQsIDExOTksIDEyMDQsIDEyMTAsIDEyMTUsIDEyMjAsIDEyMjUsIDEyMjksIDEyMzQsIDEyNDAsIAogICAgIDEyNDUsIDEyNTAsIDEyNTQsIDEyNjAsIDEyNjUsIDEyNzAsIDEyNzUsIDEyNzksIDEyODQsIDEyODksIDEyOTQsIDEzMDAsIAogICAgIDEzMDYsIDEzMTIsIDEzMTcsIDEzMjEsIDEzMjYsIDEzMzEsIDEzMzYsIDEzNDAsIDEzNDUsIDEzNTAsIDEzNTUsIDEzNjAsIApAQCAtNDY1MCw3ICs0NjUzLDcgQEAKICAgICAxNjY1LCAxNjcwLCAxNjc1LCAxNjc5LCAxNjgyLCAxNjg3LCAxNjkyLCAxNjk3LCAxNzAyLCAxNzA4LCAxNzEzLCAxNzE3LCAKICAgICAxMzIyLCAxNzIwLCAxNzI1LCAxNzMwLCAxMzI3LCAxNzM0LCAxNzM4LCAxNzQ1LCAxMzMyLCAxNzUyLCAxMzM3LCAxNzU2LCAKICAgICAxNzU4LCAxNzYzLCAxNzY5LCAxMzQxLCAxNzc0LCAxNzgzLCAxMzQ2LCAxNzg4LCAxNzk0LCAxMzUxLCAxNzk5LCAxODA0LCAKLSAgICAxODA3LCAxODEyLCAxODE2LCAxODIwLCAxODI0LCAxODI3LCAxODMxLCAxMzU2LCAxMzYxLCAxMTU2LCAxODM2LCAxODQyLCAKKyAgICAxODA3LCAxODEyLCAxODE2LCAxODIwLCAxODI0LCAxODI3LCAxODMxLCAxMzU2LCAxMzYxLCAxMDU4LCAxODM2LCAxODQyLCAKICAgICAxODQ4LCAxODU0LCAxODYwLCAxODY2LCAxODcyLCAxODc4LCAxODg0LCAxODg5LCAxODk1LCAxOTAxLCAxOTA3LCAxOTEzLCAKICAgICAxOTE5LCAxOTI1LCAxOTMxLCAxOTM3LCAxOTQzLCAxOTQ4LCAxOTUzLCAxOTU4LCAxOTYzLCAxOTY4LCAxOTczLCAxOTc4LCAKICAgICAxOTgzLCAxOTg4LCAxOTkzLCAxOTk5LCAyMDA0LCAyMDEwLCAyMDE1LCAyMDIxLCAyMDI3LCAyMDMyLCAyMDM4LCAyMDQ0LCAKQEAgLTQ2NzcsNyArNDY4MCw3IEBACiAgICAgMzI0MSwgMzI0NSwgMzI0OCwgMzI2MSwgMzI2NSwgMzI2OSwgMzI3MywgMzI3NywgMzI4MSwgMzI4NCwgMzI4OCwgMzI5MiwgCiAgICAgMzI5NywgMzMwMSwgMzMwNiwgMzMxMSwgMzMxNiwgMzMyMCwgMzMyMywgMzMyNiwgMzMzMiwgMzMzNiwgMzM0MCwgMzM0MywgCiAgICAgMzM0NywgMzM1MSwgMzM1NCwgMzM2MCwgMzM2NSwgMzM3MCwgMzM3NiwgMzM4MSwgMzM4NiwgMzM5MiwgMzM5OCwgMzQwMywgCi0gICAgMzQwOCwgMzQxMywgMTExNSwgNTQ3LCAzNDE4LCAzNDIxLCAzNDI2LCAzNDMwLCAzNDMzLCAzNDM3LCAzNDQyLCAzNDQ3LCAKKyAgICAzNDA4LCAzNDEzLCAxMTIwLCA1NDcsIDM0MTgsIDM0MjEsIDM0MjYsIDM0MzAsIDM0MzMsIDM0MzcsIDM0NDIsIDM0NDcsIAogICAgIDM0NTEsIDM0NTYsIDM0NjAsIDM0NjUsIDM0NjksIDM0NzMsIDM0NzksIDM0ODUsIDM0ODgsIDM0OTEsIDM0OTcsIDM1MDQsIAogICAgIDM1MTEsIDM1MTcsIDM1MjQsIDM1MjksIDM1MzMsIDM1NDAsIDM1NDcsIDM1NTIsIDM1NTYsIDM1NjYsIDM1NzAsIDM1NzQsIAogICAgIDM1NzksIDM1ODQsIDM1OTQsIDIxMDcsIDM1OTksIDM2MDMsIDM2MDYsIDM2MTIsIDM2MTcsIDM2MjMsIDM2MjksIDM2MzQsIApAQCAtNDcyNiw3ICs0NzI5LDcgQEAKICAgICA2NjgzLCA2Njk4LCA2NzEzLCA2NzI4LCA2NzQzLCA2NzU4LCA2NzczLCA2Nzg4LCA2ODAzLCA2ODE4LCA2ODMzLCA2ODQ4LCAKICAgICA2ODYzLCA2ODc4LCA2ODkzLCA2OTA4LCA2OTIzLCA2OTM4LCA2OTUzLCA2OTY4LCA2OTgzLCA2OTk4LCA3MDEzLCA3MDI4LCAKICAgICA3MDM3LCA3MDQ2LCA3MDUxLCA3MDU3LCA3MDY3LCA3MDcxLCA3MDc2LCA3MDgxLCA3MDg5LCA3MDkzLCA3MDk2LCA3MTAwLCAKLSAgICAyOTc1LCA3MTAzLCA3MTA4LCAyOTgsIDQ0MiwgNzExNCwgNzEyMiwgNzEyNiwgNzEzMCwgNzEzMywgNzEzNywgNzE0MywgCisgICAgMjk3NSwgNzEwMywgNzEwOCwgMjk4LCA0MjUsIDcxMTQsIDcxMjIsIDcxMjYsIDcxMzAsIDcxMzMsIDcxMzcsIDcxNDMsIAogICAgIDcxNDcsIDcxNTUsIDcxNjEsIDcxNjYsIDcxNzMsIDcxODAsIDcxODYsIDcxOTEsIDcxOTgsIDcyMDQsIDcyMTIsIDcyMTYsIAogICAgIDcyMjEsIDcyMzMsIDcyNDQsIDcyNTEsIDcyNTUsIDcyNTksIDcyNjUsIDMyMzMsIDcyNjksIDcyNzUsIDcyODAsIDcyODUsIAogICAgIDcyOTAsIDcyOTYsIDczMDEsIDczMDYsIDczMTEsIDczMTYsIDczMjIsIDczMjcsIDczMzIsIDczMzgsIDczNDMsIDczNDksIApAQCAtNDc1NSw3MjUyICs0NzU4LDcyNTAgQEAKICAgICA4NjQ1LCA4NjQ5LCA4NjUzLCA4NjU4LCA4NjY1LCA4Njc2LCA4Njg0LCA4Njk0LCA4NzAwLCA4NzA3LCA4NzEyLCA4NzE2LCAKICAgICA4NzI3LCA4NzQwLCA4NzUxLCA4NzY0LCA4Nzc1LCA4Nzg3LCA4Nzk5LCA4ODExLCA4ODI0LCA4ODM3LCA4ODQ0LCA4ODUwLCAKICAgICA4ODY0LCA4ODcxLCA4ODc3LCA4ODgxLCA4ODg2LCA4ODkwLCA4ODk3LCA4OTA1LCA4OTA5LCA4OTE1LCA4OTE5LCA4OTI1LCAKLSAgICA4OTM1LCA4OTM5LCA4OTQ0LCA4OTQ5LCA4OTU2LCA4OTYyLCA4OTcyLCA3OTA5LCA4OTc4LCA4OTgyLCA4OTg5LCA3NjgsIAotICAgIDg5OTMsIDg5OTcsIDkwMDIsIDkwMDcsIDkwMTIsIDkwMTYsIDkwMjIsIDkwMzAsIDkwMzYsIDkwNDAsIDkwNDYsIDkwNTYsIAotICAgIDkwNjAsIDkwNjYsIDkwNzEsIDkwNzUsIDkwODEsIDkwODcsIDIxNjEsIDkwOTIsIDkwOTQsIDkwOTksIDkxMDcsIDkxMTYsIAotICAgIDkxMjAsIDkxMjYsIDkxMzEsIDkxMzYsIDkxNDEsIDkxNDYsIDkxNTIsIDkxNTcsIDkxNjIsIDQwMDYsIDkxNjcsIDkxNzIsIAotICAgIDkxNzYsIDkxODIsIDkxODcsIDkxOTMsIDkxOTgsIDkyMDMsIDkyMDksIDkyMTQsIDkxMjEsIDkyMjAsIDkyMjQsIDkyMzEsIAotICAgIDkyMzcsIDkyNDIsIDkyNDYsIDYxODMsIDkyNTEsIDkyNjAsIDkyNjUsIDkyNzAsIDgyMTgsIDgyMjUsIDkyNzUsIDI4NTMsIAotICAgIDkyNzksIDkyODQsIDkyODksIDkxMzIsIDkyOTMsIDkyOTgsIDkxMzcsIDkxNDIsIDkzMDMsIDkzMTAsIDkzMTcsIDkzMjMsIAotICAgIDkzMjksIDkzMzUsIDkzNDAsIDkzNDUsIDkzNTAsIDkxNDcsIDkxNTMsIDkzNTYsIDkzNjIsIDkzNjcsIDkzNzUsIDkxNTgsIAotICAgIDkzODAsIDk5MCwgOTM4MywgOTM5MSwgOTM5NywgOTQwMywgOTQxMiwgOTQyMCwgOTQyNSwgOTQzMSwgOTQzOSwgOTQ0NiwgCi0gICAgOTQ2MSwgOTQ3OCwgOTQ5NywgOTUwNiwgOTUxNCwgOTUyOSwgOTU0MCwgOTU1MCwgOTU2MCwgOTU2OCwgOTU3NCwgOTU4NiwgCi0gICAgOTU5NSwgOTYwMywgOTYxMCwgOTYxNywgOTYyMywgOTYyOCwgOTYzNiwgOTY0NiwgOTY1MywgOTY2MywgOTY3MywgOTY4MywgCi0gICAgOTY5MSwgOTY5OCwgOTcwNywgOTcxNywgOTczMSwgOTc0NiwgOTc1NSwgOTc2MywgOTc2OCwgOTc3MiwgOTc4MSwgOTc4NywgCi0gICAgOTc5MiwgOTgwMiwgOTgxMiwgOTgyMiwgOTgyNywgOTgzMSwgOTg0MCwgOTg0NSwgOTg1NSwgOTg2NiwgOTg3OSwgOTg4NywgCi0gICAgOTkwMCwgOTkxMiwgOTkyMCwgOTkyNSwgOTkyOSwgOTkzNSwgOTk0MCwgOTk0OCwgOTk1NiwgOTk2MywgOTk2OCwgOTk3NiwgCi0gICAgOTk4MiwgOTk4NSwgOTk4OSwgOTk5NSwgMTAwMDMsIDEwMDA4LCAxMDAxMiwgMTAwMjAsIDEwMDI5LCAxMDAzNywgMTAwNDMsIAotICAgIDEwMDQ3LCAxMDA1NCwgMTAwNjUsIDEwMDY5LCAxMDA3MiwgMTAwNzgsIDkxNjMsIDEwMDgzLCAxMDA4OSwgMTAwOTYsIAotICAgIDEwMTAyLCAxMDEwNywgMTAxMTQsIDEwMTIxLCAxMDEyOCwgMTAxMzUsIDEwMTQyLCAxMDE0OSwgMTAxNTYsIDEwMTYzLCAKLSAgICAxMDE2OCwgOTQ3NCwgMTAxNzMsIDEwMTc5LCAxMDE4NiwgMTAxOTMsIDEwMTk4LCAxMDIwNSwgMTAyMTQsIDEwMjE4LCAKLSAgICAxMDIzMCwgODI1NiwgMTAyMzQsIDEwMjM3LCAxMDI0MSwgMTAyNDUsIDEwMjQ5LCAxMDI1MywgMTAyNTksIDEwMjY1LCAKLSAgICAxMDI3MCwgMTAyNzYsIDEwMjgxLCAxMDI4NiwgMTAyOTIsIDEwMjk3LCAxMDMwMiwgODk1MiwgMTAzMDcsIDEwMzExLCAKLSAgICAxMDMxNSwgMTAzMTksIDEwMzI0LCAxMDMyOSwgMTAzMzcsIDEwMzQzLCAxMDM0NywgMTAzNTEsIDEwMzU4LCAxMDM2MywgCi0gICAgMTAzNzEsIDEwMzc2LCAxMDM4MCwgMTAzODMsIDEwMzg5LCAxMDM5NiwgMTA0MDAsIDEwNDAzLCAxMDQwOCwgMTA0MTIsIAotICAgIDQwNDUsIDEwNDE4LCAxMDQyNywgMzYsIDEwNDM1LCAxMDQ0MSwgMTA0NDYsIDg5NjcsIDEwNDUxLCAxMDQ1NiwgMTA0NjAsIAotICAgIDEwNDYzLCAxMDQ3OCwgMTA0OTcsIDEwNTA5LCAxMDUyMiwgMTA1MzUsIDEwNTQ4LCAxMDU2MiwgMTA1NzUsIDEwNTkwLCAKLSAgICAxMDU5NywgOTE2OCwgMTA2MDMsIDEwNjE3LCAxMDYyMiwgMTA2MjgsIDEwNjMzLCAxMDY0MSwgMTA2NDYsIDgwNDAsIAotICAgIDEwNjUxLCAxMDY1NCwgMTA2NjEsIDEwNjY2LCAxMDY3MCwgMjg1OCwgOTk4LCAxMDY3NiwgMTA2ODAsIDEwNjg2LCAxMDY5MiwgCi0gICAgMTA2OTcsIDEwNzAzLCAxMDcwOCwgOTE3NywgMTA3MTQsIDEwNzIwLCAxMDcyNSwgMTA3MzAsIDEwNzM4LCAxMDc0NCwgCi0gICAgMTA3NTcsIDEwNzY1LCAxMDc3MiwgOTE4MywgMTA3NzgsIDEwNzg2LCAxMDc5NCwgMTA4MDEsIDEwODE0LCAxMDgyNiwgCi0gICAgMTA4MzYsIDEwODQ0LCAxMDg1MSwgMTA4NTgsIDEwODY3LCAxMDg3NiwgMTA4ODQsIDEwODkxLCAxMDg5NiwgMTA5MDIsIAotICAgIDkxODgsIDEwOTA3LCAxMDkxMywgOTE5NCwgMTA5MTgsIDEwOTIxLCAxMDkyOCwgMTA5MzQsIDEwOTQ3LCA4NjY5LCAxMDk1OCwgCi0gICAgMTA5NjQsIDEwOTczLCAxMDk4MSwgMTA5ODgsIDEwOTk0LCAxMTAwMCwgMTEwMDUsIDExMDA5LCAxMTAxNCwgMTA0NzAsIAotICAgIDExMDIwLCA5MTk5LCAxMTAyNywgMTEwMzIsIDExMDM5LCAxMTA0NSwgMTEwNTEsIDExMDU2LCAxMTA2NCwgMTEwNzIsIAotICAgIDExMDc5LCAxMTA4MywgMTEwOTcsIDExMTA3LCAxMTExMiwgMTExMTYsIDExMTI3LCAxMTEzMywgMTExMzgsIDExMTQzLCAKLSAgICA5MjA0LCA5MjEwLCAxMTE0NywgMTExNTAsIDExMTU1LCAxMTE2NywgMTExNzQsIDExMTc5LCAxMTE4MywgMTExODgsIAotICAgIDExMTkyLCAxMTE5OSwgMTEyMDUsIDkyMTUsIDkxMjIsIDExMjEyLCAyODYzLCA4LCAxMTIxOSwgMTEyMjQsIDExMjI4LCAKLSAgICAxMTIzNCwgMTEyNDIsIDExMjUyLCAxMTI1NywgMTEyNjIsIDExMjY5LCAxMTI3NiwgMTEyODAsIDExMjkxLCAxMTMwMSwgCi0gICAgMTEzMTAsIDExMzIyLCAxMTMyNywgMTEzMzEsIDExMzM5LCAxMTM1MywgMTEzNTcsIDExMzYwLCAxMTM2OCwgMTEzNzUsIAotICAgIDExMzgzLCAxMTM4NywgMTEzOTgsIDExNDAyLCAxMTQwOSwgMTE0MTQsIDExNDE4LCAxMTQyNCwgMTE0MjksIDExNDMzLCAKLSAgICAxMTQzOSwgMTE0NDQsIDExNDU1LCAxMTQ1OSwgMTE0NjIsIDExNDY4LCAxMTQ3MywgMTE0NzksIDExNDg1LCAxMTQ5MiwgCi0gICAgMTE1MDMsIDExNTEzLCAxMTUyMywgMTE1MzIsIDExNTM5LCAxMTU0OCwgOTIyNSwgOTIzMiwgOTIzOCwgOTI0MywgMTE1NTQsIAotICAgIDExNTYwLCA5MjQ3LCAxMTU2NiwgMTE1NjksIDExNTc2LCAxMTU4MSwgMTE1OTYsIDExNjEyLCAxMTYyNywgMTE2MzUsIAotICAgIDExNjQxLCAxMTY0NiwgODM4LCA0MjAsIDExNjUxLCAxMTY1OSwgMTE2NjYsIDExNjcyLCAxMTY3NywgMTE2ODIsIDkyNTIsIAotICAgIDExNjg0LCAxMTY4OCwgMTE2OTMsIDExNjk3LCAxMTcwNywgMTE3MTIsIDExNzE2LCAxMTcyNSwgMTE3MjksIDExNzMyLCAKLSAgICA5MjYxLCAxMTczOSwgMTE3NDIsIDExNzUwLCAxMTc1NywgMTE3NjUsIDExNzY5LCAxMTc3NiwgMTE3ODUsIDExNzg4LCAKLSAgICAxMTc5MiwgMTE3OTYsIDExODAyLCAxMTgwNiwgMTE4MTAsIDExODE0LCAxMTgyMCwgMTE4MzAsIDExODM0LCAxMTg0MiwgCi0gICAgMTE4NDYsIDExODUzLCAxMTg1NywgMTE4NjIsIDExODY2LCAxMTg3MywgMTE4NzksIDExODg3LCAxMTg5MywgMTE4OTgsIAotICAgIDExOTA4LCAxMTkxMywgMTE5MTgsIDExOTIyLCAxMTkzMCwgMzkwNSwgMTE5MzgsIDExOTQzLCA5MjY2LCAxMTk0NywgCi0gICAgMTE5NTEsIDExOTU0LCAxMTk2MiwgMTE5NjksIDExOTczLCA1OTkxLCAxMTk3NywgMTE5ODIsIDExOTg2LCAxMTk5NywgCi0gICAgMTIwMDcsIDEyMDEyLCAxMjAxOCwgMTIwMjIsIDEyMDI1LCAxMjAzMywgMTIwMzgsIDEyMDQzLCAxMjA1MCwgMTIwNTUsIAotICAgIDkyNzEsIDEyMDYwLCAxMjA2NCwgMTIwNzEsIDE3MjIsIDYxNDUsIDEyMDc2LCAxMjA4MSwgMTIwODYsIDEyMDkxLCAxMjA5NywgCi0gICAgMTIxMDIsIDEyMTA4LCAxMjExMywgMTIxMTgsIDEyMTIzLCAxMjEyOCwgMTIxMzMsIDEyMTM4LCAxMjE0MywgMTIxNDgsIAotICAgIDEyMTUzLCAxMjE1OCwgMTIxNjMsIDEyMTY4LCAxMjE3MywgMTIxNzgsIDEyMTgzLCAxMjE4OCwgMTIxOTQsIDEyMTk5LCAKLSAgICAxMjIwNCwgMTIyMDksIDEyMjE0LCAxMjIxOSwgMTIyMjUsIDEyMjMwLCAxMjIzNSwgMTIyNDEsIDEyMjQ2LCAxMjI1MiwgCi0gICAgMTIyNTcsIDEyMjYzLCAxMjI2OCwgMTIyNzMsIDEyMjc4LCAxMjI4MywgMTIyODksIDEyMjk0LCAxMjI5OSwgMTIzMDQsIAotICAgIDczNywgMTM5LCAxMjMxMiwgMTIzMTYsIDEyMzIxLCAxMjMyNiwgMTIzMzAsIDEyMzM0LCAxMjMzOCwgMTIzNDMsIDEyMzQ3LCAKLSAgICAxMjM1MiwgMTIzNTYsIDEyMzU5LCAxMjM2MywgMTIzNjcsIDEyMzczLCAxMjM3OCwgMTIzODgsIDEyMzk0LCAxMjQwMiwgCi0gICAgMTI0MDYsIDEyNDEwLCAxMjQxNywgMTI0MjUsIDEyNDM0LCAxMjQ0NSwgMTI0NTIsIDEyNDU5LCAxMjQ2MywgMTI0NzIsIAotICAgIDEyNDgxLCAxMjQ4OSwgMTI0OTgsIDEyNTA3LCAxMjUxNiwgMTI1MjUsIDEyNTM1LCAxMjU0NSwgMTI1NTUsIDEyNTY1LCAKLSAgICAxMjU3NSwgMTI1ODQsIDEyNTk0LCAxMjYwNCwgMTI2MTQsIDEyNjI0LCAxMjYzNCwgMTI2NDQsIDEyNjU0LCAxMjY2MywgCi0gICAgMTI2NzMsIDEyNjgzLCAxMjY5MywgMTI3MDMsIDEyNzEzLCAxMjcyMywgMTI3MzIsIDEyNzQyLCAxMjc1MiwgMTI3NjIsIAotICAgIDEyNzcyLCAxMjc4MiwgMTI3OTIsIDEyODAyLCAxMjgxMiwgMTI4MjIsIDEyODMxLCAxMjg0MSwgMTI4NTEsIDEyODYxLCAKLSAgICAxMjg3MSwgMTI4ODEsIDEyODkxLCAxMjkwMSwgMTI5MTEsIDEyOTIxLCAxMjkzMSwgMTI5NDAsIDEyNTYsIDEyOTQ2LCAKLSAgICAxMjk0OSwgMTI5NTMsIDEyOTU4LCAxMjk2NSwgMTI5NzEsIDEyOTc2LCAxMjk4MCwgMTI5ODUsIDEyOTk0LCAxMzAwMiwgCi0gICAgMTMwMDcsIDEzMDExLCAxMzAxNSwgMTMwMjEsIDEzMDI2LCAxMzAzMiwgOTI4MCwgMTMwMzcsIDEzMDQyLCAxMzA1MSwgCi0gICAgOTI4NSwgMTMwNTYsIDEzMDU5LCAxMzA2NSwgMTMwNzMsIDkyOTAsIDEzMDgwLCAxMzA4NCwgMTMwODgsIDEzMDkyLCAKLSAgICAxMzEwMiwgMTMxMDgsIDEzMTE0LCAxMzExOSwgMTMxMjgsIDEzMTM2LCAxMzE0MywgMTMxNTAsIDEzMTU1LCAxMzE2MiwgCi0gICAgMTMxNjcsIDEzMTcxLCAxMzE3NCwgMTMxODUsIDEzMTk1LCAxMzIwNCwgMTMyMTIsIDEzMjIzLCAxMzIzNSwgMTMyNDUsIAotICAgIDEzMjUwLCAxMzI1NCwgMTMyNTksIDEzMjY0LCAxMzI2OCwgMTMyNzQsIDEzMjgyLCAxMzI4OSwgMTMzMDAsIDEzMzA1LCAKLSAgICAxMzMxNSwgMTMzMTksIDEzMzIyLCAxMzMyOSwgMTMzMzksIDEzMzQ4LCAxMzM1NSwgMTMzNTksIDEzMzY2LCAxMzM3MiwgCi0gICAgMTMzNzcsIDEzMzgyLCAxMzM4NiwgMTMzOTUsIDEzNDAwLCAxMzQwNiwgMTM0MTAsIDEzNDE1LCAxMzQxOSwgMTM0MjgsIAotICAgIDEzNDM2LCAxMzQ0NCwgMTM0NTEsIDEzNDU5LCAxMzQ3MSwgMTM0ODIsIDEzNDkyLCAxMzQ5OSwgMTM1MDUsIDEzNTE0LCAKLSAgICAxMzUyNSwgMTM1MzQsIDEzNTQ2LCAxMzU1OCwgMTM1NzAsIDEzNTgwLCAxMzU4OSwgMTM1OTgsIDEzNjA2LCAxMzYxMywgCi0gICAgMTM2MjIsIDEzNjMwLCAxMzYzNCwgMTM2NDAsIDEzNjQ2LCAxMzY1MSwgNzc1MywgMTM2NTUsIDEzNjU3LCAxMzY2MSwgCi0gICAgMTM2NjYsIDEzNjcyLCAxMzY4MSwgMTM2ODUsIDEzNjkzLCAxMzcwMCwgMTM3MDksIDEzNzE4LCAxMzcyNywgMTM3MzYsIAotICAgIDEzNzQ1LCAxMzc1NCwgMTM3NjMsIDEzNzcyLCAxMzc4MiwgMTM3OTIsIDEzODAxLCAxMzgwNywgMTM4MTQsIDEzODIxLCAKLSAgICAxMzgyNywgMTM4NDEsIDEzODQ4LCAxMzg1NiwgMTM4NjUsIDEzODcxLCAxMzg4MCwgMTM4ODksIDEzOTAwLCAxMzkxMCwgCi0gICAgMTM5MTgsIDEzOTI1LCAxMzkzMywgMTM5NDIsIDEzOTU1LCAxMzk2MywgMTM5NzAsIDEzOTgzLCAxMzk4OSwgMTM5OTUsIAotICAgIDE0MDA1LCAxNDAxNCwgMTQwMjMsIDE0MDI4LCAxNDAzMiwgMTQwMzgsIDE0MDQ0LCAxNDA1MSwgODk2NiwgMTQwNTYsIAotICAgIDE0MDYxLCAxNDA2OCwgMTQwNzMsIDEyMzY5LCAxNDA3OCwgMTQwODYsIDE0MDkyLCAxNDA5NywgMTQxMDUsIDE0MTEzLCAKLSAgICAxNDEyMCwgMTQxMjgsIDE0MTM0LCAxNDE0MiwgMTQxNTAsIDE0MTU2LCAxNDE2MSwgMTQxNjcsIDE0MTc0LCAxNDE4MCwgCi0gICAgMTQxODUsIDE0MTg5LCAxNDIwMCwgMTQyMDgsIDE0MjE0LCAxNDIxOSwgMTQyMjgsIDE0MjM0LCAxNDIzOSwgMTQyNDgsIAotICAgIDE0MjYyLCAzODUzLCAxNDI2NiwgMTQyNzEsIDE0Mjc2LCAxNDI4MiwgMTQyODcsIDE0MjkyLCAxNDI5NiwgMTQzMDEsIAotICAgIDE0MzA2LCAxNDMxMSwgNzc1MiwgMTQzMTYsIDE0MzIxLCAxNDMyNiwgMTQzMzEsIDE0MzM2LCAxNDM0MCwgMTQzNDUsIAotICAgIDE0MzUwLCAxNDM1NSwgMTQzNjAsIDE0MzY2LCAxNDM3MiwgMTQzNzcsIDE0MzgxLCAxNDM4NiwgMTQzOTEsIDE0Mzk2LCAKLSAgICA5Mjk0LCAxNDQwMSwgMTQ0MDYsIDE0NDExLCAxNDQxNiwgMTQ0MjEsIDE0NDM4LCAxNDQ1NiwgMTQ0NjgsIDE0NDgxLCAKLSAgICAxNDQ5OCwgMTQ1MTQsIDE0NTMxLCAxNDU0MSwgMTQ1NjAsIDE0NTcxLCAxNDU4MiwgMTQ1OTMsIDE0NjA0LCAxNDYxNiwgCi0gICAgMTQ2MjcsIDE0NjM4LCAxNDY1NSwgMTQ2NjYsIDE0Njc3LCAxNDY4MiwgOTI5OSwgMTQ2ODcsIDE0NjkxLCAyMzgxLCAKLSAgICAxNDY5NSwgMTQ2OTgsIDE0NzA0LCAxNDcxMiwgMTQ3MjAsIDE0NzI1LCAxNDczMywgMTQ3NDEsIDE0NzQ4LCAxNDc1MywgCi0gICAgMTQ3NTksIDE0NzY2LCAxNDc3NCwgMTQ3ODEsIDE0NzkzLCAxNDgwMSwgMTQ4MDYsIDExNTkwLCAxNDgxMiwgMTQ4MjEsIAotICAgIDE0ODMwLCAxNDgzOCwgMTQ4NDUsIDE0ODUxLCAxNDg1OSwgMTQ4NjYsIDE0ODcyLCAxNDg3OSwgMTQ4ODUsIDE0ODk0LCAKLSAgICAxNDkwMiwgMTQ5MTIsIDE0OTE5LCAxNDkyNSwgMTQ5MzMsIDE0OTM5LCAxNDk0NywgMTQ5NTQsIDE0OTY3LCAxNDk3NCwgCi0gICAgMTQ5ODMsIDE0OTkyLCAxNTAwMSwgMTUwMDksIDE1MDE5LCAxNTAyNiwgMTUwMzEsIDM1NjAsIDE1MDM4LCAxNTA0MywgCi0gICAgMTM3MiwgMTUwNDcsIDE0MzE3LCAxNTA1MSwgMTUwNTcsIDE1MDYxLCAxNTA2OSwgMTUwODEsIDE1MDg2LCAxNTA5MywgCi0gICAgMTUwOTksIDE1MTA0LCAxNTExMSwgMTQzMjIsIDE1MTE1LCAxNTExOSwgMTUxMjMsIDE0MzI3LCAxNTEyNywgMTQzMzIsIAotICAgIDE1MTMxLCAxNTEzOCwgMTUxNDMsIDE1MTQ3LCAxNTE1NCwgMTUxNTgsIDE1MTY2LCAxNTE3MywgMTUxNzcsIDE1MTg0LCAKLSAgICAxNTIwMSwgMTUyMTAsIDE1MjE0LCAxNTIxNywgMTUyMjUsIDE1MjMxLCAxNTIzNiwgMzYzOCwgMTUyNDAsIDE1MjQyLCAKLSAgICAxNTI1MCwgMTUyNTcsIDE1MjY3LCAxNTI3OSwgMTUyODQsIDE1MjkwLCAxNTI5NSwgMTUyOTksIDE1MzA1LCAxNTMxMCwgCi0gICAgMTUzMTYsIDE1MzE5LCAxNTMyNiwgMTUzMzQsIDE1MzQxLCAxNTM0NywgMTUzNTMsIDE1MzU4LCAxNTM2NSwgMTUzNzEsIAotICAgIDE1Mzc2LCAxNTM4MywgMTUzODcsIDE1MzkzLCAxNTM5NywgMTU0MDQsIDE1NDEwLCAxNTQxNiwgMTU0MjQsIDE1NDMwLCAKLSAgICAxNTQzNSwgMTU0NDEsIDE1NDQ5LCAxNTQ1NywgMTU0NjMsIDE1NDY5LCAxNTQ3NCwgMTU0ODEsIDE1NDg2LCAxNTQ5MCwgCi0gICAgMTU0OTYsIDE1NTAxLCAxNTUwOCwgMTU1MTMsIDE1NTE5LCAxNTUyMiwgMTU1MjgsIDE1NTM0LCAxNTUzNywgMTU1NDEsIAotICAgIDE1NTUzLCAxNTU1OSwgMTU1NjQsIDE1NTcxLCAxNTU3NywgMTU1ODMsIDE1NTk0LCAxNTYwNCwgMTU2MTMsIDE1NjIxLCAKLSAgICAxNTYyOCwgMTU2MzksIDE1NjQ5LCAxNTY1OSwgMTU2NjcsIDE1NjcwLCAxNDM0NiwgMTU2NzUsIDE1NjgwLCAxNDM1MSwgCi0gICAgMTQ0ODYsIDE1Njg4LCAxNTcwMSwgMTU3MTYsIDE1NzI3LCAxNDUwMywgMTU3NDUsIDE1NzU4LCAxNTc3MSwgMTU3ODIsIAotICAgIDEwNDg1LCAxNTc5MywgMTU4MDYsIDE1ODI1LCAxNTgzNiwgMTU4NDcsIDE1ODU4LCAyNjQ5LCAxNTg3MSwgMTU4NzUsIAotICAgIDE1ODgzLCAxNTg5OCwgMTU5MTMsIDE1OTI0LCAxNTkzMSwgMTU5MzcsIDE1OTQ1LCAxNTk0OSwgMTU5NTUsIDE1OTU4LCAKLSAgICAxNTk2OCwgMTU5NzYsIDE1OTgzLCAxNTk5MSwgMTYwMDEsIDE2MDA2LCAxNjAxMywgMTYwMTgsIDE2MDI1LCAxNjAzNiwgCi0gICAgMTYwNDYsIDE2MDUyLCAxNjA1NywgMTYwNjIsIDE0MzU2LCAxNjA2NiwgMTYwNzIsIDE2MDc4LCAxNjA4MywgMTYwODgsIAotICAgIDE2MDkzLCAxNjA5NywgMTQzNjEsIDE0MzY3LCAxNjEwMSwgMTQzNzMsIDE2MTA2LCAxNjExNCwgMTYxMjMsIDE2MTMwLCAKLSAgICA5MTQzLCAxNjEzNCwgMTYxMzYsIDE2MTQxLCAxNjE0NiwgMTYxNTIsIDE2MTU3LCAxNjE2MiwgMTYxNjcsIDE2MTcyLCAKLSAgICAxNjE3NiwgMTYxODIsIDE2MTg4LCAxNjE5MywgMTYxOTksIDE2MjA0LCAxNjIwOSwgMTYyMTUsIDE2MjIwLCAxNjIyNSwgCi0gICAgMTYyMzAsIDE2MjM1LCAxNjI0MSwgMTYyNDYsIDE2MjUxLCAxNjI1NywgMTYyNjMsIDE2MjY4LCAxNjI3MywgMTYyODAsIAotICAgIDE2Mjg2LCAxNjI5NywgMTYzMDQsIDE2MzA5LCAxNjMxMywgMTYzMTcsIDE2MzIwLCAxNjMyOCwgMTYzMzMsIDE2MzQwLCAKLSAgICAxNjM0NywgMTYzNTMsIDE2MzU4LCAxNjM2MywgMTYzNzAsIDE2MzgwLCAxNjM4NSwgMTYzOTIsIDE2Mzk4LCAxNjQwOCwgCi0gICAgMTY0MTgsIDE2NDMyLCAxNjQ0NiwgMTY0NjAsIDE2NDc0LCAxNjQ4OSwgMTY1MDQsIDE2NTIxLCAxNjUzOSwgMTY1NTIsIAotICAgIDE2NTU4LCAxNjU2MywgMTY1NjgsIDE2NTcyLCAxNjU3NywgMTY1ODUsIDE2NTkxLCAxNjU5NiwgMTY2MDEsIDE2NjA1LCAKLSAgICAxNjYxMCwgMTY2MTQsIDE2NjE5LCAxNjYyMywgMTY2MzQsIDE2NjQwLCAxNjY0NSwgMTY2NTAsIDE2NjU3LCAxNjY2MiwgCi0gICAgMTY2NjYsIDE2NjcxLCAxNjY3NiwgMTY2ODIsIDE2Njg5LCAxNjY5NSwgMTY3MDAsIDE2NzA0LCAxNjcxMCwgMTY3MTUsIAotICAgIDE2NzIwLCAxNjcyNCwgMTY3MzAsIDE2NzM1LCAxNjc0MCwgMTY3NDcsIDE2NzUyLCAxMzEwNCwgMTY3NTYsIDE2NzYxLCAKLSAgICAxNjc2NSwgMTY3NzAsIDE2Nzc2LCAxNjc4MiwgMTY3ODksIDE2Nzk5LCAxNjgwNywgMTY4MTQsIDE2ODE5LCAxNjgyMywgCi0gICAgMTY4MzIsIDE2ODQwLCAxNjg0NywgMTY4NTQsIDE2ODYwLCAxNjg2NiwgMTY4NzEsIDE2ODc2LCAxNjg4MiwgMTY4ODcsIAotICAgIDE2ODkzLCAxNjg5OCwgMTY5MDQsIDE2OTEwLCAxNjkxNywgMTY5MjMsIDE2OTI4LCAxNjkzMywgOTM0MSwgMTY5NDIsIAotICAgIDE2OTQ1LCAxNjk1MSwgMTY5NTYsIDE2OTYxLCAxNjk3MSwgMTY5NzgsIDE2OTg0LCAxNjk4OSwgMTY5OTQsIDE3MDAwLCAKLSAgICAxNzAwNSwgMTcwMTEsIDE3MDE2LCAxNzAyMiwgMTcwMjgsIDE3MDMzLCAxNzA0MSwgMTcwNDgsIDE3MDUzLCAxNzA1OCwgCi0gICAgMTcwNjQsIDE3MDY5LCAxNzA3MywgMTcwODIsIDE3MDkzLCAxNzEwMCwgMTcxMDUsIDE3MTEzLCAxNzExOSwgMTcxMjYsIAotICAgIDE3MTMyLCAxNzEzNywgMTcxNDEsIDE3MTQ3LCAxNzE1MiwgMTcxNTcsIDE3MTYyLCAxNDQwLCA3Nzc3LCAyODc3LCAxNzE2NiwgCi0gICAgMTcxNzAsIDE3MTc0LCAxNzE3OCwgMTcxODIsIDE3MTg2LCAxNzE4OSwgMTcxOTYsIDE3MjA0LCAxNDM4NywgMTcyMTEsIAotICAgIDE3MjIxLCAxNzIyOSwgMTcyMzYsIDE3MjQ0LCAxNzI1NCwgMTcyNjMsIDE3Mjc2LCAxNzI4MSwgMTcyODYsIDE3Mjk0LCAKLSAgICAxNzMwMSwgMTMyMDAsIDEzMjA5LCAxNzMwOCwgMTczMTgsIDE3MzMzLCAxNzMzOSwgMTczNDYsIDE3MzUzLCAxNzM1OSwgCi0gICAgMTczNjcsIDE3Mzc3LCAxNzM4NywgMTQzOTIsIDE3Mzk2LCAxNzQwMiwgMTc0MDgsIDE3NDE2LCAxNzQyNCwgMTc0MjksIAotICAgIDE3NDM4LCAxNzQ0NiwgMTc0NTgsIDE3NDY4LCAxNzQ3OCwgMTc0ODgsIDE3NDk3LCAxNzUwOSwgMTc1MTksIDE3NTI5LCAKLSAgICAxNzU0MCwgMTc1NDUsIDE3NTU3LCAxNzU2OSwgMTc1ODEsIDE3NTkzLCAxNzYwNSwgMTc2MTcsIDE3NjI5LCAxNzY0MSwgCi0gICAgMTc2NTMsIDE3NjY1LCAxNzY3NiwgMTc2ODgsIDE3NzAwLCAxNzcxMiwgMTc3MjQsIDE3NzM2LCAxNzc0OCwgMTc3NjAsIAotICAgIDE3NzcyLCAxNzc4NCwgMTc3OTYsIDE3ODA3LCAxNzgxOSwgMTc4MzEsIDE3ODQzLCAxNzg1NSwgMTc4NjcsIDE3ODc5LCAKLSAgICAxNzg5MSwgMTc5MDMsIDE3OTE1LCAxNzkyNywgMTc5MzgsIDE3OTUwLCAxNzk2MiwgMTc5NzQsIDE3OTg2LCAxNzk5OCwgCi0gICAgMTgwMTAsIDE4MDIyLCAxODAzNCwgMTgwNDYsIDE4MDU4LCAxODA2OSwgMTgwODEsIDE4MDkzLCAxODEwNSwgMTgxMTcsIAotICAgIDE4MTI5LCAxODE0MSwgMTgxNTMsIDE4MTY1LCAxODE3NywgMTgxODksIDE4MjAwLCAxODIxMiwgMTgyMjQsIDE4MjM2LCAKLSAgICAxODI0OCwgMTgyNjAsIDE4MjcyLCAxODI4NCwgMTgyOTYsIDE4MzA4LCAxODMyMCwgMTgzMzEsIDE4MzQzLCAxODM1NSwgCi0gICAgMTgzNjcsIDE4Mzc5LCAxODM5MSwgMTg0MDMsIDE4NDE1LCAxODQyNywgMTg0MzksIDE4NDUxLCAxODQ2MiwgMTg0NzQsIAotICAgIDE4NDg2LCAxODQ5OCwgMTg1MTAsIDE4NTIzLCAxODUzNiwgMTg1NDksIDE4NTYyLCAxODU3NSwgMTg1ODgsIDE4NjAxLCAKLSAgICAxODYxMywgMTg2MjYsIDE4NjM5LCAxODY1MiwgMTg2NjUsIDE4Njc4LCAxODY5MSwgMTg3MDQsIDE4NzE3LCAxODczMCwgCi0gICAgMTg3NDMsIDE4NzU1LCAxODc2OCwgMTg3ODEsIDE4Nzk0LCAxODgwNywgMTg4MjAsIDE4ODMzLCAxODg0NiwgMTg4NTksIAotICAgIDE4ODcyLCAxODg4NSwgMTg4OTcsIDE4OTEwLCAxODkyMywgMTg5MzYsIDE4OTQ5LCAxODk2MiwgMTg5NzUsIDE4OTg4LCAKLSAgICAxOTAwMSwgMTkwMTQsIDE5MDI3LCAxOTAzOSwgMTkwNTIsIDE5MDY1LCAxOTA3OCwgMTkwOTEsIDE5MTA0LCAxOTExNywgCi0gICAgMTkxMzAsIDE5MTQzLCAxOTE1NiwgMTkxNjksIDE5MTgxLCAxOTE5NCwgMTkyMDcsIDE5MjIwLCAxOTIzMywgMTkyNDYsIAotICAgIDE5MjU5LCAxOTI3MiwgMTkyODUsIDE5Mjk4LCAxOTMxMSwgMTkzMjMsIDE5MzM0LCAxOTM0NywgMTkzNjAsIDE5MzczLCAKLSAgICAxOTM4NiwgMTkzOTksIDE5NDEyLCAxOTQyNSwgMTk0MzgsIDE5NDUxLCAxOTQ2NCwgMTk0NzYsIDE5NDg5LCAxOTUwMiwgCi0gICAgMTk1MTUsIDE5NTI4LCAxOTU0MSwgMTk1NTQsIDE5NTY3LCAxOTU4MCwgMTk1OTMsIDE5NjA2LCAxOTYxOCwgMTk2MzEsIAotICAgIDE5NjQ0LCAxOTY1NywgMTk2NzAsIDE5NjgzLCAxOTY5NiwgMTk3MDksIDE5NzIyLCAxOTczNSwgMTk3NDgsIDE5NzYwLCAKLSAgICAxOTc3MywgMTk3ODYsIDE5Nzk5LCAxOTgxMiwgMTk4MjUsIDE5ODM4LCAxOTg1MSwgMTk4NjQsIDE5ODc3LCAxOTg5MCwgCi0gICAgMTk5MDIsIDE5OTE1LCAxOTkyOCwgMTk5NDEsIDE5OTU0LCAxOTk2NywgMTk5ODAsIDE5OTkzLCAyMDAwNiwgMjAwMTksIAotICAgIDIwMDMyLCAyMDA0NCwgMjAwNTcsIDIwMDcwLCAyMDA4MywgMjAwOTYsIDIwMTA5LCAyMDEyMiwgMjAxMzUsIDIwMTQ4LCAKLSAgICAyMDE2MSwgMjAxNzQsIDIwMTg2LCAyMDE5OSwgMjAyMTIsIDIwMjI1LCAyMDIzOCwgMjAyNTEsIDIwMjY0LCAyMDI3NywgCi0gICAgMjAyOTAsIDIwMzAzLCAyMDMxNiwgMjAzMjgsIDIwMzQxLCAyMDM1NCwgMjAzNjcsIDIwMzgwLCAyMDM5MywgMjA0MDYsIAotICAgIDIwNDE5LCAyMDQzMiwgMjA0NDUsIDIwNDU4LCAyMDQ3MCwgMjA0ODMsIDIwNDk2LCAyMDUwOSwgMjA1MjIsIDIwNTM1LCAKLSAgICAyMDU0OCwgMjA1NjEsIDIwNTc0LCAyMDU4NywgMjA2MDAsIDIwNjEyLCAyMDYyNSwgMjA2MzgsIDIwNjUxLCAyMDY2NCwgCi0gICAgMjA2NzcsIDIwNjkwLCAyMDcwMywgMjA3MTYsIDIwNzI5LCAyMDc0MiwgMjA3NTQsIDIwNzY1LCAyMDc3MywgMjA3ODEsIAotICAgIDIwNzg4LCAyMDc5NCwgMjA3OTgsIDIwODA0LCAyMDgxMCwgMjA4MTgsIDIwODI0LCAyMDgyOSwgMjA4MzMsIDIwODQyLCAKLSAgICA5MTQ4LCAyMDg1MywgMjA4NjAsIDIwODY4LCAyMDg3NSwgMjA4ODIsIDEwOTQxLCAyMDg4OSwgMjA4OTgsIDIwOTAzLCAKLSAgICAyMDkwOCwgNzgwNSwgMjA5MTUsIDIwOTIwLCAyMDkyMywgMjA5MjgsIDIwOTM2LCAyMDk0MywgMjA5NTAsIDIwOTU3LCAKLSAgICAyMDk2MywgMjA5NzIsIDIwOTgxLCAyMDk4NywgMjA5OTYsIDIxMDAwLCAyMTAwNiwgMjEwMTEsIDIxMDIxLCAyMTAyOCwgCi0gICAgMjEwMzQsIDIxMDQyLCAyMTA0OCwgMjEwNTUsIDIxMDY1LCAyMTA3NCwgMjEwNzgsIDIxMDg1LCAyMTA4OSwgMjEwOTQsIAotICAgIDIxMTAwLCAyMTEwOCwgMjExMTIsIDIxMTIyLCAxNDQwMiwgMjExMzEsIDIxMTM3LCAyMTE0MSwgMjExNTAsIDE0NDA3LCAKLSAgICAyMTE1NiwgMjExNjMsIDIxMTc0LCAyMTE4MiwgMjExOTEsIDIxMTk5LCA4OTMxLCAyMTIwNywgMjEyMTIsIDIxMjE4LCAKLSAgICAyMTIyMywgMjEyMjcsIDIxMjMxLCAyMTIzNSwgOTYzMiwgMjEyNDAsIDIxMjQ4LCAyMTI1NSwgMjEyNjQsIDIxMjcxLCAKLSAgICAyMTI3OCwgMTA4NzEsIDIxMjg1LCAyMTI5MSwgMjEyOTUsIDIxMzAxLCAyMTMwOCwgMjEzMTQsIDIxMzIyLCAyMTMyOCwgCi0gICAgMjEzMzUsIDIxMzQxLCAyMTM0NywgMjEzNTYsIDIxMzYwLCAyMTM2OCwgMjEzNzcsIDIxMzg0LCAyMTM4OSwgMjEzOTMsIAotICAgIDIxNDA0LCAyMTQwOSwgMjE0MTQsIDIxNDE5LCAyMTQzMiwgNzk5NSwgMjE0MzYsIDIxNDQyLCAyMTQ1MCwgMjE0NTQsIAotICAgIDIxNDYxLCAyMTQ3MCwgMjE0NzUsIDE0Njc4LCAyMTQ4MywgMjE0ODcsIDIxNDk5LCAyMTUwNCwgMjE1MDgsIDIxNTExLCAKLSAgICAyMTUxNywgMjE1MjMsIDIxNTI4LCAyMTUzMiwgMjE1MzUsIDIxNTQ2LCAyMTU1MSwgOTM3NiwgMjE1NTgsIDIxNTYzLCAKLSAgICA5MzgxLCAyMTU2OCwgMjE1NzMsIDIxNTc4LCAyMTU4MywgMjE1ODgsIDIxNTkzLCAyMTU5OCwgMjE2MDMsIDIxNjA4LCAKLSAgICAyMTYxMywgMjE2MTgsIDIxNjIzLCAyMTYyOSwgMjE2MzQsIDIxNjM5LCAyMTY0NCwgMjE2NDksIDIxNjU0LCAyMTY1OSwgCi0gICAgMjE2NjQsIDIxNjY5LCAyMTY3NCwgMjE2ODAsIDIxNjg2LCAyMTY5MSwgMjE2OTYsIDIxNzAxLCAyMTcwNiwgMjE3MTEsIAotICAgIDIxNzE2LCAyMTcyMSwgMjE3MjYsIDIxNzMxLCAyMTczNywgMjE3NDIsIDIxNzQ3LCAyMTc1MiwgMjE3NTgsIDIxNzY0LCAKLSAgICAyMTc2OSwgMjE3NzQsIDIxNzc5LCAyMTc4NCwgMjE3ODksIDIxNzk0LCAyMTc5OSwgMjE4MDQsIDIxODEwLCAyMTgxNSwgCi0gICAgMjE4MjAsIDIxODI1LCAyMTgzMCwgMjE4MzYsIDIxODQxLCAyMTg0NiwgMjE4NTAsIDEzNjgsIDEyOSwgMjE4NTgsIDIxODYyLCAKLSAgICAyMTg2NiwgMjE4NzAsIDIxODc1LCAyMTg3OSwgMTMxMTAsIDEyNDY5LCAyMTg4MywgMjE4ODgsIDIxODkyLCAyMTg5NywgCi0gICAgMjE5MDEsIDIxOTA2LCAyMTkxMCwgMjE5MTYsIDIxOTIxLCAyMTkyNSwgMjE5MjksIDIxOTM3LCAyMTk0MSwgMjE5NDUsIAotICAgIDIxOTUwLCAyMTk1NSwgMjE5NTksIDIxOTY1LCAyMTk3MCwgMjE5NzQsIDIxOTc5LCAyMTk4NCwgMjE5ODgsIDIxOTk1LCAKLSAgICAyMjAwMiwgMjIwMDksIDIyMDEzLCAyMjAxNywgMjIwMjIsIDIyMDI2LCAyMjAyOSwgMjIwMzUsIDIyMDQ4LCAyMjA1MywgCi0gICAgMjIwNjIsIDIyMDY3LCA5NDIxLCAyMjA3MiwgMjIwNzUsIDI3MTIsIDI3MTcsIDIyMDc5LCAyMjA4NSwgMjIwOTEsIDcyMDksIAotICAgIDIyMDk2LCAyMjEwMSwgMjIxMDYsIDIyMTEyLCAyMjExNywgMTM4OTYsIDIyMTIyLCAyMjEyNywgMjIxMzIsIDIyMTM3LCAKLSAgICAyMjE0MywgMjIxNDgsIDIyMTUzLCAyMjE1OSwgMjIxNjQsIDIyMTY4LCAyMjE3MywgMjIxNzgsIDIyMTgzLCAyMjE4OCwgCi0gICAgMjIxOTIsIDIyMTk3LCAyMjIwMSwgMjIyMDYsIDIyMjExLCAyMjIxNiwgMjIyMjEsIDIyMjI1LCAyMjIzMCwgMjIyMzQsIAotICAgIDIyMjM5LCAyMjI0NCwgMjIyNDksIDIyMjU0LCAyODg2LCAyMjE2OSwgMjIyNTgsIDIyMjY2LCAyMjI3MywgOTcyNiwgCi0gICAgMjIyODUsIDIyMjkzLCAyMjE3NCwgMjIzMDAsIDIyMzA1LCAyMjMxMywgMjIxNzksIDIyMzE4LCAyMjMyMywgMjIzMzEsIAotICAgIDIyMzM2LCAyMjE4NCwgMjIzNDEsIDIyMzQ2LCAyMjM1MCwgMjIzNTYsIDIyMzY0LCAyMjM2NywgMjIzNzQsIDIyMzc4LCAKLSAgICAyMjM4MiwgMjIzODgsIDIyMzk1LCAyMjQwMCwgODk1OCwgMTcyNywgMTczMiwgMjI0MDQsIDIyNDEwLCAyMjQxNiwgMjI0MjEsIAotICAgIDIyNDI1LCAyMjQyOSwgMjI0MzMsIDIyNDM3LCAyMjQ0MSwgMjI0NDUsIDIyNDQ5LCAyMjQ1MiwgMjI0NTgsIDIyNDY1LCAKLSAgICAyMjQ3MywgMjI0NzksIDIyNDg1LCAyMjQ5MCwgMjI0OTUsIDIyNDk5LCAxMzgxNiwgMTM4MjMsIDIyNTA0LCAyMjUxNiwgCi0gICAgMjI1MTksIDIyNTI2LCAxNjM0OSwgMjI1MzMsIDIyNTQxLCAyMjU1MiwgMjI1NjEsIDIyNTc0LCAyMjU4NCwgMjI1OTgsIAotICAgIDIyNjEwLCAyMjYyNCwgMjI2MzYsIDIyNjQ2LCAyMjY1OCwgMjI2NjQsIDIyNjc5LCAyMjcwMywgMjI3MjEsIDIyNzQwLCAKLSAgICAyMjc1MywgMjI3NjcsIDIyNzg1LCAyMjgwMSwgMjI4MTgsIDIyODM2LCAyMjg0NywgMjI4NjYsIDIyODgzLCAyMjkwMywgCi0gICAgMjI5MjEsIDIyOTMzLCAyMjk0NywgMjI5NjEsIDIyOTczLCAyMjk5MCwgMjMwMDksIDIzMDI3LCAyMzAzOSwgMjMwNTcsIAotICAgIDIzMDc2LCAxNDU0NiwgMjMwODksIDIzMTA5LCAyMzEyMSwgMTA1MTYsIDIzMTMzLCAyMzEzOCwgMjMxNDMsIDIzMTQ4LCAKLSAgICAyMzE1NCwgMjMxNTksIDIzMTYzLCAyMzE3MCwgMjM5OCwgMjMxNzQsIDIzMTgwLCAyMzE4NCwgMjMxODcsIDIzMTkxLCAKLSAgICAyMzE5OSwgMjMyMDUsIDIyMjAyLCAyMzIwOSwgMjMyMTgsIDIzMjI5LCAyMzIzNSwgMjMyNDEsIDIzMjUwLCAyMzI1OCwgCi0gICAgMjMyNjUsIDIzMjcwLCAyMzI3NCwgMjMyODEsIDIzMjg3LCAyMzI5NiwgMjMzMDQsIDIzMzExLCAyMzMyMSwgMjMzMzAsIAotICAgIDIzMzQwLCAyMzM0NSwgMjMzNTQsIDIzMzYzLCAyMzM3NCwgMjMzODUsIDM5NjMsIDIzMzk1LCAyMzM5OSwgMjM0MDksIAotICAgIDIzNDE3LCAyMzQyNywgMjM0MzgsIDIzNDQzLCAyMzQ1MywgMjM0NjEsIDIzNDY4LCAyMzQ3NCwgMjM0ODEsIDIzNDg2LCAKLSAgICAyMjIxMiwgMjM0OTAsIDIzNDk5LCAyMzUwMywgMjM1MDYsIDIzNTExLCAyMzUxOCwgMjM1MjcsIDIzNTM1LCAyMzU0MywgCi0gICAgMjM1NTMsIDIzNTYyLCAyMzU2OCwgMjM1NzQsIDIyMjE3LCAyMjIyMiwgMjM1NzgsIDIzNTg4LCAyMzU5OCwgMjM2MDgsIAotICAgIDIzNjE2LCAyMzYyMywgMjM2MzMsIDIzNjQxLCAyMzY0OSwgMjM2NTUsIDIzNjYzLCA5MzAsIDIzNjcyLCAxNDczNywgNTQyLCAKLSAgICAyMzY4NiwgMjM2OTUsIDIzNzAzLCAyMzcxNCwgMjM3MjUsIDIzNzM1LCAyMzc0NCwgMjM3NTYsIDIzNzY1LCAyMzc3NCwgCi0gICAgMjM3ODAsIDIzNzg5LCAyMzc5OCwgMjM4MDgsIDIzODE2LCAyMzgyNCwgOTM1MywgMjM4MzAsIDIzODMzLCAyMzgzNywgCi0gICAgMjM4NDIsIDIzODQ3LCA5ODQxLCAyMjIzNSwgMjIyNDAsIDIzODU1LCAyMzg2MSwgMjM4NjcsIDIzODcyLCAyMzg3NywgCi0gICAgMjM4ODEsIDIzODg5LCAyMzg5NSwgMjM5MDEsIDIzOTA1LCAzNTI1LCAyMzkxMywgMjM5MTgsIDIzOTIzLCAyMzkyNywgCi0gICAgMjM5MzEsIDk5MjEsIDIzOTM4LCAyMzk0NiwgMjM5NjAsIDIzOTY3LCAyMzk3MywgOTkzMCwgOTkzNiwgMjM5ODEsIDIzOTg5LCAKLSAgICAyMzk5NiwgMjQwMDEsIDI0MDA2LCAyMjI0NSwgMjQwMTIsIDI0MDIzLCAyNDAyNywgMjQwMzIsIDI2MDEsIDI0MDM3LCAKLSAgICAyNDA0OCwgMjQwNTQsIDI0MDU5LCAyNDA2MywgMjQwNjcsIDI0MDcwLCAyNDA3NywgMjQwODQsIDI0MDkxLCAyNDA5NywgCi0gICAgMjQxMDEsIDIyMjUwLCAyNDEwNiwgMjQxMTAsIDI0MTE0LCAxMDM3LCAyNDExOSwgMjQxMjQsIDI0MTI5LCAyNDEzNCwgCi0gICAgMjQxMzksIDI0MTQ0LCAyNDE0OSwgMjQxNTQsIDI0MTU5LCAyNDE2NCwgMjQxNjksIDI0MTc0LCAyNDE3OSwgMjQxODQsIAotICAgIDI0MTkwLCAyNDE5NSwgMjQyMDAsIDI0MjA1LCAyNDIxMCwgMjQyMTUsIDI0MjIwLCAyNDIyNiwgMjQyMzEsIDI0MjM2LCAKLSAgICAyNDI0MSwgMjQyNDYsIDI0MjUxLCAyNDI1NiwgMjQyNjEsIDI0MjY3LCAyNDI3MywgMjQyNzgsIDI0Mjg0LCAyNDI4OSwgCi0gICAgMjQyOTQsIDUsIDI0MzAwLCAyNDMwNCwgMjQzMDgsIDI0MzEyLCAyNDMxNywgMjQzMjEsIDI0MzI1LCAyNDMyOSwgMjQzMzMsIAotICAgIDI0MzM4LCAyNDM0MiwgMjQzNDcsIDI0MzUxLCAyNDM1NCwgMjQzNTgsIDI0MzYzLCAyNDM2NywgMjQzNzIsIDI0Mzc2LCAKLSAgICAyNDM4MCwgMjQzODQsIDI0Mzg5LCAyNDM5MywgMjQzOTcsIDI0NDA3LCAyNDQxMiwgMjQ0MTYsIDI0NDIwLCAyNDQyNSwgCi0gICAgMjQ0MzAsIDI0NDM5LCAyNDQ0NCwgMjQ0NDksIDI0NDUzLCAyNDQ1NywgMjQ0NzAsIDI0NDgyLCAyNDQ5MSwgMjQ1MDAsIAotICAgIDI0NTA2LCAyNDUxMSwgMjQ1MTUsIDI0NTE5LCAyNDUyOSwgMjQ1MzgsIDI0NTQ2LCAyNDU1MiwgMjQ1NTcsIDI0NTYxLCAKLSAgICAyNDU2OCwgMjQ1NzgsIDI0NTg3LCAyNDU5NSwgMjQ2MDMsIDI0NjEwLCAyNDYxOCwgMjQ2MjcsIDI0NjM2LCAyNDY0NCwgCi0gICAgMjQ2NDksIDI0NjUzLCAyNDY1NywgMjQ2NjAsIDI0NjYyLCAyNDY2NiwgMjQ2NzAsIDI0Njc1LCAyNDY4MCwgMjQ2ODQsIAotICAgIDI0Njg4LCAyNDY5MSwgMjQ2OTUsIDI0Njk4LCAyNDcwMiwgMjQ3MDUsIDI0NzA4LCAyNDcxMiwgMjQ3MTgsIDI0NzIyLCAKLSAgICAyNDcyNiwgMjQ3MzAsIDI0NzM1LCAyNDc0MCwgMjQ3NDUsIDI0NzQ5LCAyNDc1MiwgMjQ3NTcsIDI0NzYzLCAyNDc2OCwgCi0gICAgMjQ3NzQsIDI0Nzc5LCAyNDc4MywgMjQ3ODcsIDI0NzkxLCAyNDc5NiwgMjQ4MDAsIDI0ODA1LCAyNDgwOSwgMjQ4MTMsIAotICAgIDI0ODIwLCAyNDgyNCwgMjQ4MjcsIDI0ODMxLCAyNDgzNywgMjQ4NDMsIDI0ODQ3LCAyNDg1MSwgMjQ4NTYsIDI0ODYzLCAKLSAgICAyNDg2OSwgMjQ4NzMsIDI0ODgyLCAyNDg4NiwgMjQ4OTAsIDI0ODkzLCAyNDg5OSwgMjQ5MDQsIDI0OTEwLCAxNDg5LCAKLSAgICAxNzkxLCAyNDkxNSwgMjQ5MjAsIDI0OTI1LCAyNDkzMCwgMjQ5MzUsIDI0OTQwLCAyNDk0NSwgMjE0OCwgMjE5NCwgMjQ5NTAsIAotICAgIDI0OTUzLCAyNDk1NywgMjQ5NjEsIDI0OTY2LCAyNDk3MCwgMjQ5NzQsIDI0OTc3LCAyNDk4MiwgMjQ5ODcsIDI0OTkxLCAKLSAgICAyNDk5NCwgMjQ5OTksIDI1MDAzLCAyNTAwOCwgMjUwMTIsIDE0NzQ5LCAyNTAxNywgMjUwMjAsIDI1MDIzLCAyNTAyNywgCi0gICAgMjUwMzIsIDI1MDM2LCAyNTA0OSwgMjUwNTMsIDI1MDU2LCAyNTA2NCwgMjUwNzMsIDI1MDgwLCAyNTA4NSwgMjUwOTEsIAotICAgIDI1MDk3LCAyNTEwNSwgMjUxMTIsIDI1MTE5LCAyNTEyMywgMjUxMjcsIDI1MTMxLCAyNTEzNiwgMjUxNDEsIDI1MTQ1LCAKLSAgICAyNTE1MywgMjUxNTgsIDI1MTcwLCAyNTE4MSwgMjUxODYsIDI1MTkwLCAyNTE5NCwgMjUyMDAsIDI1MjA1LCAyNTIxMCwgCi0gICAgMjUyMTQsIDI1MjE4LCAyNTIyMSwgMjUyMjcsIDc5MTUsIDIzMTYsIDI1MjMxLCAyNTIzNiwgMjUyNTIsIDk0NjgsIDI1MjcyLCAKLSAgICAyNTI4MSwgMjUyOTcsIDI1MzAxLCAyNTMwNCwgMjUzMTAsIDI1MzIwLCAyNTMyNiwgMjUzMzUsIDI1MzUwLCAyNTM2MiwgCi0gICAgMjUzNzMsIDI1MzgxLCAyNTM5MCwgMjUzOTYsIDI1NDA1LCAyNTQxNSwgMjU0MjYsIDI1NDM3LCAyNTQ0NiwgMjU0NTMsIAotICAgIDI1NDYyLCAyNTQ3MCwgMjU0NzcsIDI1NDg1LCAyNTQ5MiwgMjU0OTksIDI1NTEyLCAyNTUxOSwgMjU1MjUsIDI1NTMwLCAKLSAgICAyNTUzOSwgMjU1NDUsIDI1NTUwLCAyNTU1OCwgMjU1NjUsIDIzNDE5LCAyNTU3NywgMjU1ODksIDI1NjAzLCAyNTYxMSwgCi0gICAgMjU2MTgsIDI1NjMwLCAyNTYzOSwgMjU2NDgsIDI1NjU2LCAyNTY2NCwgMjU2NzIsIDI1Njc5LCAyNTY4OCwgMjU2OTYsIAotICAgIDI1NzA2LCAyNTcxNSwgMjU3MjUsIDI1NzM0LCAyNTc0MywgMjU3NTEsIDI1NzU2LCAyNTc2MCwgMjU3NjMsIDI1NzY3LCAKLSAgICAyNTc3MSwgMjU3NzUsIDI1Nzc5LCAyNTc4MywgMjU3ODksIDI1Nzk1LCAyNTgwMywgMTQ3OTQsIDI1ODEwLCAyNTgxNSwgCi0gICAgMjU4MjIsIDI1ODI4LCAyNTgzNSwgMTQ4MDIsIDI1ODQyLCAyNTg0NSwgMjU4NTcsIDI1ODY1LCAyNTg3MSwgMjU4NzYsIAotICAgIDI1ODgwLCA5ODcxLCAyNTg5MSwgMjU5MDEsIDI1OTEwLCAyNTkxNywgMjU5MjEsIDE0ODA3LCAyNTkyNCwgMjU5MzEsIAotICAgIDI1OTM1LCAyNTk0MSwgMjU5NDQsIDI1OTUxLCAyNTk1NywgMjU5NjQsIDI1OTcwLCAyNTk3NCwgMjU5NzksIDI1OTgzLCAKLSAgICAyNTk5MiwgMjU5OTksIDI2MDA1LCA3OTU2LCAyNjAxMiwgMjYwMjAsIDI2MDI3LCAyNjAzMywgMjYwMzgsIDI2MDQ0LCAKLSAgICAyNjA1MCwgMjYwNTgsIDI2MDYyLCAyNjA2NSwgMjYwNjcsIDI1NzY4LCAyNjA3NiwgMjYwODIsIDI2MDkyLCAyNjA5NywgCi0gICAgMjYxMDQsIDI2MTEwLCAyNjExNSwgMjYxMjAsIDI2MTI1LCAyNjEyOSwgMjYxMzQsIDI2MTQxLCAyNjE1MCwgMjYxNTQsIAotICAgIDI2MTYxLCAyNjE3MCwgMjYxNzYsIDI2MTgxLCAyNjE4NywgMjYxOTIsIDI2MTk5LCAyNjIxMCwgMjYyMTUsIDI2MjE5LCAKLSAgICAyNjIyOSwgMjYyMzUsIDI2MjM5LCAyNjI0NCwgMjYyNTQsIDI2MjYzLCAyNjI2NywgMjYyNzQsIDI2MjgyLCAyNjI4OSwgCi0gICAgMjYyOTUsIDI2MzAwLCAyNjMwOCwgMjYzMTUsIDI2MzI3LCAyNjMzNiwgMjYzNDAsIDEzMDQ2LCAyNjM0OCwgMjYzNTgsIAotICAgIDI2MzYyLCAyNTA2MCwgMjYzNzMsIDI2Mzc4LCAyNjM4MiwgMjYzODksIDI2Mzk2LCAyMTk2MSwgMjU2OTMsIDI2NDAxLCAKLSAgICAyNjQwNSwgMjY0MDgsIDIyODUzLCAyNjQxMywgMjY0MjcsIDI2NDQzLCAyNjQ2MSwgMjY0ODAsIDI2NDk3LCAyNjUxNSwgCi0gICAgMjI4NzIsIDI2NTMyLCAyNjU1MiwgMjI4ODksIDI2NTY0LCAyNjU3NiwgMTU3MzIsIDI2NTg4LCAyMjkwOSwgMjY2MDIsIAotICAgIDI2NjE0LCAxMDUyOSwgMjY2MjgsIDI2NjMzLCAyNjYzOCwgMjY2NDMsIDI2NjQ5LCAyNjY1NSwgMjY2NjEsIDI2NjY1LCAKLSAgICAyNjY3MiwgMjY2NzcsIDI2Njg3LCAyNjY5MywgMTAxNzYsIDI2Njk5LCAyNjcwMSwgMjY3MDYsIDI2NzE0LCAyNjcxOCwgCi0gICAgMjYxMzcsIDI2NzI0LCAyNjczMSwgMTE1MTcsIDExNTI3LCAyNjczOCwgMjY3NDgsIDI2NzUzLCAyNjc1NywgMjY3NjAsIAotICAgIDI2NzY2LCAyNjc3NCwgMjY3ODYsIDI2Nzk2LCAyNjgxMiwgMjY4MjUsIDI2ODM5LCAxNTc1MCwgMjY4NTMsIDI2ODYwLCAKLSAgICAyNjg2NCwgMjY4NjcsIDI2ODcyLCAyNjg3NiwgMjY4ODMsIDI2ODkwLCAyNjkwMCwgMjY5MDUsIDI2OTEwLCAyNjkxNSwgCi0gICAgMjY5MjMsIDI2OTMxLCAyNjk0MCwgMjY5NDUsIDk1NjUsIDI2OTQ5LCAyNjk1MiwgMjY5NTUsIDI2OTYwLCAyNjk2NywgCi0gICAgMjY5NzIsIDI2OTg4LCAyNjk5NiwgMjcwMDQsIDk0MTYsIDI3MDEyLCAyNzAxNywgMjcwMjEsIDI3MDI3LCAyNzAzMywgCi0gICAgMjcwMzYsIDI3MDQyLCAyNzA1NCwgMjcwNjIsIDI3MDY5LCAyNzA3NSwgMjcwODIsIDI3MDkzLCAyNzEwNywgMjcxMjAsIAotICAgIDI3MTI5LCAyNzEzOCwgMjcxNTAsIDI3MTYxLCAyNzE3MSwgMjcxODAsIDI3MTg5LCAyNzE5NywgMjcyMDgsIDc5MzgsIAotICAgIDI3MjE1LCAyNzIyMSwgMjcyMjYsIDI3MjMyLCAyNzIzOSwgMjcyNDksIDI3MjU5LCAyNzI2OCwgMjcyNzQsIDI3MjgxLCAKLSAgICAyNzI4NiwgMjcyOTMsIDI3MzAxLCAyNzMwOSwgMjczMjEsIDYyNDYsIDI3MzI4LCAyNzMzNywgMjczNDUsIDI3MzUxLCAKLSAgICAyNzM1NywgMjczNjIsIDI3MzY2LCAyNzM2OSwgMjczNzUsIDI3MzgyLCAyNzM4NywgMjczOTIsIDI3Mzk2LCAyNzQwOCwgCi0gICAgMjc0MTksIDI3NDI4LCAyNzQzNiwgMTQ5MzQsIDI3NDQxLCAyNzQ0NywgMjc0NTMsIDExNTEwLCA4NjM1LCAyNzQ1OCwgCi0gICAgMjc0NjIsIDI3NDY1LCAyNzQ2OCwgMjc0NzQsIDI3NDgyLCAyNzQ5MCwgMjc0OTQsIDI3NDk4LCAyNzUwMywgMjc1MDYsIAotICAgIDI3NTE1LCAyNzUxOSwgMjc1MjcsIDI3NTM4LCAyNzU0MiwgMjc1NDgsIDI3NTU0LCAyNzU1OCwgMjc1NjQsIDI3NTcyLCAKLSAgICAyNzU5NCwgMjc2MTgsIDI3NjI1LCAyNzYzMiwgMjc2MzgsIDI3NjQ2LCAyNzY1MiwgMjc2NTcsIDI3NjY4LCAyNzY4NiwgCi0gICAgMjc2OTMsIDI3NzAxLCAyNzcwNSwgMjc3MTQsIDI3NzI3LCAyNzczNSwgMjc3NDcsIDI3NzU4LCAyNzc2OCwgMjc3ODIsIAotICAgIDI3NzkxLCAyNzc5OSwgMjc4MTEsIDk0ODUsIDI3ODIyLCAyNzgzMywgMjc4NDUsIDI3ODU1LCAyNzg2NCwgMjc4NjksIAotICAgIDI3ODczLCAyNzg4MSwgMjc4OTEsIDI3ODk2LCAyNzkwMCwgMjc5MDMsIDI3OTA2LCAyNzkxNCwgMjc5MjIsIDI3OTMxLCAKLSAgICAyNzk0MSwgMjc5NTAsIDI3OTU2LCAyNzk3MCwgMjY2MywgMjc5OTIsIDI4MDAzLCAyODAxMiwgMjgwMjIsIDI4MDM0LCAKLSAgICAyODA0MywgMjgwNTIsIDI4MDYyLCAyODA3MCwgMjgwNzgsIDI4MDg3LCAyODA5MiwgMjgxMDMsIDI4MTA4LCAyODExOSwgCi0gICAgMjgxMjMsIDI4MTMzLCAyODE0MiwgMjgxNTAsIDI4MTYwLCAyODE3MCwgMjgxNzgsIDI4MTg3LCAyODE5NCwgMjgyMDIsIAotICAgIDI4MjA5LCAyODIxOCwgMjgyMjIsIDI4MjMwLCAyODIzNywgMjgyNDUsIDI4MjUyLCAyODI2MywgMjgyNzgsIDI4Mjg1LCAKLSAgICAyODI5MSwgMjgzMDEsIDI4MzEwLCAyODMxNiwgMjgzMjAsIDI4MzI3LCAyODMzMSwgMTQwMTgsIDI4MzM3LCAyODM0MSwgCi0gICAgMjgzNDYsIDI4MzUzLCAyODM1NywgMjgzNjEsIDI4MzY5LCAyODM3NywgMjgzODMsIDI4MzkyLCAyODM5OSwgMjg0MDQsIAotICAgIDI4NDA5LCAyODQxOSwgMjM0ODgsIDI4NDIzLCAyODQyNiwgMjg0MzEsIDI4NDM2LCAyODQ0MSwgMjg0NDYsIDI4NDUxLCAKLSAgICAyODQ1NiwgMjg0NjEsIDI4NDY2LCAyODQ3MiwgMjg0NzcsIDI4NDgyLCAyODQ4OCwgMTIxOCwgNzA0LCAyODQ5MywgMjg1MDIsIAotICAgIDIzNjQsIDI4NTA5LCAyODUxNCwgMjg1MTgsIDI4NTI0LCAxMjY3LCA1NDYsIDMxOCwgMjg1MjksIDI4NTM4LCAyODU0NiwgCi0gICAgMjg1NTUsIDI4NTYzLCAyODU3NCwgMjg1ODMsIDI4NTkxLCAyODU5NSwgMjg1OTgsIDI4NjA2LCAyODYxNCwgMjg2MTksIAotICAgIDE0NzYyLCAyODYyNSwgMjg2MzEsIDI4NjM3LCA1ODcyLCAyODY0MiwgMjg2NDYsIDI4NjUyLCAyODY1NiwgMjg2NjMsIAotICAgIDE0NTUsIDI4NjY5LCAyODY3NiwgOTU3MiwgMjg2ODAsIDI4NjkwLCAyODY5OCwgMjg3MDQsIDI4NzEzLCAyODcyMSwgCi0gICAgMjg3MjcsIDI4NzM1LCAyODc0MiwgMTExMDMsIDI4NzQ4LCAyODc1NSwgMjg3NjAsIDI4NzY3LCAxNDk2LCAyMTQ3LCAKLSAgICAyODc3MywgMjg3NzksIDI4Nzg2LCAyODc5NywgMjg4MDgsIDI4ODE2LCAyODgyMywgMjg4MzMsIDI4ODQyLCAyODg1MCwgCi0gICAgMjg4NTksIDI4ODY2LCAyODg3MywgMjg4ODYsIDI4ODk3LCAxMjcyLCAyODkxNiwgMjg5MjEsIDI4OTI5LCAzNTc1LCAKLSAgICAyODkzMywgMjg5MzgsIDI4OTQyLCAxNDU5LCAyNDY4OSwgMjg5NTIsIDI4OTU2LCAyODk2MSwgMjg5NjUsIDM0OTMsIAotICAgIDI4OTcxLCAyODk3OSwgMjg5ODYsIDI4OTk3LCAyOTAwNSwgMjkwMTMsIDM1NzYsIDI3OSwgMjkwMTgsIDI5MDI2LCAyOTAzNCwgCi0gICAgMjkwNDEsIDI5MDQ3LCAyOTA1MiwgMjIxNiwgMjkwNTksIDI5MDY1LCAyNTk3NSwgMjYyMDUsIDI5MDcxLCAxMDYsIDI5MDc1LCAKLSAgICAyOTA3OSwgMjkwODUsIDYxNSwgOTMyMSwgMjkwOTAsIDI5MDk3LCAyOTEwMywgMjMyNywgMjkxMDcsIDI5MTExLCAxNTE3NCwgCi0gICAgMjkxMTQsIDI5MTE5LCAyOTEyNiwgMjkxMzIsIDI5MTM3LCAyOTE0NSwgMjkxNTIsIDI5MTU4LCAyMjMzOCwgMjkxNjIsIAotICAgIDI5MTY2LCAzNjQ2LCAxNjYxMiwgMjkxNzAsIDI5MTc1LCAyOTE3OCwgMjkxODYsIDI5MTk0LCAyOTE5OSwgMjkyMDIsIAotICAgIDI5MjA5LCAyOTIxOSwgMjkyMzEsIDI5MjM2LCAyOTI0MCwgMjkyNDgsIDI5MjU1LCAyOTI2MSwgMjkyNjgsIDI5Mjc1LCAKLSAgICAyOTI3OCwgMjkyODIsIDI5Mjg2LCAxNDYzLCAyOTI5NiwgMjkyOTgsIDI5MzAzLCAyOTMwOSwgMjkzMTUsIDI5MzIwLCAKLSAgICAyOTMyNSwgMjkzMzAsIDI5MzM1LCAyOTM0MCwgMjkzNDUsIDI5MzUwLCAyOTM1NSwgMjkzNjAsIDI5MzY1LCAyOTM3MCwgCi0gICAgMjkzNzUsIDI5MzgwLCAyOTM4NSwgMjkzOTEsIDI5Mzk3LCAyOTQwMywgMjk0MDksIDI5NDE0LCAyOTQxOSwgMjk0MjQsIAotICAgIDI5NDMwLCAyOTQzNSwgMjk0NDAsIDI5NDQ1LCAyOTQ1MSwgMjk0NTYsIDI5NDYyLCAyOTQ2NywgMjk0NzIsIDI5NDc3LCAKLSAgICAyOTQ4MiwgMjk0ODgsIDI5NDkzLCAyOTQ5OSwgMjk1MDQsIDI5NTA5LCAyOTUxNCwgMjk1MTksIDI5NTI1LCAyOTUzMCwgCi0gICAgMjk1MzYsIDI5NTQxLCAyOTU0NiwgMjk1NTEsIDI5NTU2LCAyOTU2MSwgMjk1NjYsIDI5NTcxLCAyOTU3NiwgMjk1ODEsIAotICAgIDI5NTg3LCAyOTU5MywgMjk1OTksIDI5NjA0LCAyOTYwOSwgMjk2MTQsIDI5NjE5LCAyOTYyNSwgMjk2MzEsIDI5NjM3LCAKLSAgICAyOTY0MywgMjk2NDksIDI5NjU1LCAyOTY2MCwgMjk2NjYsIDI5NjcxLCAyOTY3NiwgMjk2ODEsIDI5Njg2LCAyOTY5MiwgCi0gICAgMjQ0MywgMjk2OTcsIDI0NTAsIDI0NTcsIDI3NTQsIDI5NzAyLCAyNDYzLCAyNDczLCAyOTcwOCwgMjk3MTIsIDI5NzE3LCAKLSAgICAyOTcyMiwgMjk3MjgsIDI5NzMzLCAyOTczOCwgMjk3NDIsIDI5NzQ3LCAyOTc1MywgMjk3NTgsIDI5NzYzLCAyOTc2OCwgCi0gICAgMjk3NzQsIDI5Nzc5LCAyOTc4MywgMjk3ODcsIDI5NzkyLCAyOTc5NywgMjk4MDIsIDI5ODA3LCAyOTgxMiwgMjk4MTgsIAotICAgIDI5ODI0LCAyOTgyOSwgMjk4MzMsIDI5ODM4LCAyOTg0NCwgMjk4NDgsIDI5ODUzLCAyOTg1OCwgMjk4NjMsIDI5ODY4LCAKLSAgICAyOTg3MiwgMjk4NzUsIDI5ODgwLCAyOTg4NSwgMjk4OTAsIDI5ODk1LCAyOTkwMCwgMjk5MDYsIDI5OTEyLCAyOTkxNywgCi0gICAgMjk5MjIsIDI5OTI2LCAyOTkzMSwgMjk5MzYsIDI5OTQxLCAyOTk0NiwgMjk5NTEsIDI5OTU1LCAyOTk2MCwgMjk5NjUsIAotICAgIDI5OTcwLCAyOTk3NCwgMjk5NzgsIDI5OTgyLCAyOTk4NywgMjk5OTUsIDMwMDAwLCAzMDAwNiwgMzAwMTIsIDMwMDE4LCAKLSAgICAzMDAyMywgMzAwMjcsIDMwMDMwLCAzMDAzNSwgMzAwNDAsIDMwMDQ0LCAzMDA0OSwgMzAwNTMsIDMwMDU4LCAzMDA2MiwgCi0gICAgMzAwNjUsIDMwMDcwLCAxNzI4OSwgMzAwNzUsIDMwMDgwLCAzMDA4NSwgMzAwOTMsIDIxMjY3LCAyODY3MywgOTAxOSwgCi0gICAgMzAwOTgsIDMwMTAzLCAzMDEwNywgMzAxMTIsIDMwMTE2LCAzMDEyMCwgMzAxMjUsIDMwMTI5LCAzMDEzMiwgMzAxMzUsIAotICAgIDMwMTM5LCAzMDE0NCwgMzAxNDgsIDMwMTU2LCAzMDE2MCwgMzAxNjMsIDMwMTY4LCAzMDE3MiwgMzAxNzYsIDMwMTgxLCAKLSAgICAzMDE4NiwgMzAxOTAsIDMwMTk2LCAzMDIwMSwgMzAyMDYsIDMwMjEzLCAzMDIyMCwgMzAyMjQsIDMwMjI3LCAzMDIzMywgCi0gICAgMzAyNDIsIDMwMjQ5LCAzMDI1NywgMzAyNjQsIDMwMjY4LCAzMDI3MywgMzAyNzcsIDMwMjgxLCAzMDI4NywgMzAyOTMsIAotICAgIDMwMjk3LCAzMDMwMywgMzAzMDgsIDMwMzEzLCAzMDMyMCwgMzAzMjYsIDMwMzMyLCAzMDMzOCwgMzAzNDQsIDMwMzUxLCAKLSAgICAzMDM1NywgMzAzNjMsIDMwMzY5LCAzMDM3NSwgMzAzODEsIDMwMzg3LCAzMDM5MywgMzA0MDAsIDMwNDA2LCAzMDQxMywgCi0gICAgMzA0MTksIDMwNDI1LCAzMDQzMSwgMzA0MzcsIDMwNDQzLCAzMDQ0OSwgMzA0NTUsIDMwNDYxLCAzMDQ2NywgMTE0MTEsIAotICAgIDMwNDczLCAzMDQ3OCwgMzA0ODMsIDMwNDg2LCAzMDQ5NCwgMzA0OTksIDMwNTA4LCAzMDUxNCwgMzA1MTksIDMwNTI0LCAKLSAgICAzMDUyOSwgMzA1MzMsIDMwNTM4LCAzMDU0MywgMzA1NDgsIDMwNTUzLCAzMDU1OCwgMzA1NjUsIDMwNTcyLCAzMDU3OCwgCi0gICAgMzA1ODQsIDMwNTg5LCAxNjI5MCwgMzA1OTYsIDMwNjAyLCAzMDYwOSwgMzA2MTUsIDMwNjIxLCAzMDYyNiwgMzA2MzQsIAotICAgIDMwNjM5LCAxNjA2OSwgMzA2NDMsIDMwNjQ4LCAzMDY1MywgMzA2NTksIDMwNjY0LCAzMDY2OSwgMzA2NzMsIDMwNjc4LCAKLSAgICAzMDY4MywgMzA2ODksIDMwNjk0LCAzMDY5OSwgMzA3MDMsIDMwNzA4LCAzMDcxMywgMzA3MTcsIDMwNzIyLCAzMDcyNywgCi0gICAgMzA3MzIsIDMwNzM2LCAzMDc0MSwgMzA3NDYsIDMwNzUxLCAzMDc1NSwgMzA3NTksIDE1MjgwLCAzMDc2MywgMzA3NzIsIAotICAgIDMwNzc4LCAzMDc4NCwgMzA3OTMsIDMwODAxLCAzMDgxMCwgMzA4MTgsIDMwODIzLCAzMDgyNywgMzA4MzQsIDMwODQwLCAKLSAgICAzMDg0NCwgMzA4NDcsIDMwODUyLCAzMDg2MSwgMzA4NjksIDMwODc0LCAxNDk1LCAzMDg4MCwgMzA4ODMsIDMwODg3LCAKLSAgICAyMjQxMSwgMjI0MTcsIDMwODkzLCAzMDg5NywgMzA5MDgsIDMwOTE5LCAzMDkzMCwgMzA5NDIsIDMwOTQ5LCAzMDk1NiwgCi0gICAgMzA5NjEsIDMwOTY1LCA1OTA5LCA3NTUsIDIxMjY2LCAzMDk3MywgMzA5NzgsIDMwOTgyLCAzMDk4NywgMzA5OTEsIDMwOTk3LCAKLSAgICAzMTAwMiwgMzEwMDgsIDMxMDEzLCAzMTAxOSwgMzEwMjQsIDMxMDMwLCAzMTAzNSwgMzEwNDEsIDMxMDQ3LCAzMTA1MywgCi0gICAgMzEwNTgsIDMxMDE0LCAzMTAyMCwgMzEwNjIsIDMxMDY3LCAzMTA3MywgMzEwNzgsIDMxMDg0LCAzMTA4OSwgMzEwOTUsIAotICAgIDMxMTAwLCAzMTAyNSwgMTA0MTQsIDMxMTA0LCAzMTAzNiwgMzEwNDIsIDMxMDQ4LCAyODMxLCAzNDIzLCAzMTExMCwgCi0gICAgMzExMTMsIDMxMTE5LCAzMTEyNSwgMzExMzEsIDMxMTM4LCAzMTE0NCwgMzExNTAsIDMxMTU2LCAzMTE2MiwgMzExNjgsIAotICAgIDMxMTc0LCAzMTE4MCwgMzExODYsIDMxMTkyLCAzMTE5OCwgMzEyMDQsIDMxMjEwLCAzMTIxNywgMzEyMjMsIDMxMjI5LCAKLSAgICAzMTIzNSwgMzEyNDEsIDMxMjQ3LCAzMTI1MCwgMzEyNTUsIDMxMjU4LCAzMTI2NSwgMzEyNzMsIDMxMjc4LCAzMTI4MywgCi0gICAgMzEyODksIDMxMjk0LCAzMTI5OSwgMzEzMDMsIDMxMzA4LCAzMTMxNCwgMzEzMTksIDMxMzI1LCAzMTMzMCwgMzEzMzYsIAotICAgIDMxMzQxLCAzMTM0NywgMzEzNTMsIDMxMzU3LCAzMTM2MiwgMzEzNjcsIDMxMzcyLCAzMTM3NywgMzEzODEsIDMxMzg2LCAKLSAgICAzMTM5MSwgMzEzOTYsIDMxNDAyLCAzMTQwOCwgMzE0MTQsIDMxNDIwLCAzMTQyNSwgMzE0MjksIDMxNDMyLCAzMTQzOCwgCi0gICAgMzE0NDQsIDMxNDUzLCAzMTQ2MSwgMzE0NjgsIDMxNDczLCAzMTQ3NywgMzE0ODEsIDMxNDg2LCAxNTEzMywgMzE0OTEsIAotICAgIDMxNDk5LCAzMTUwNSwgMzY4MywgMTM3NywgMzE1MTAsIDMxNTE0LCA4MDA1LCAzMTUyMCwgMzE1MjYsIDMxNTMzLCA4MDE0LCAKLSAgICAzMTUzNywgMzE1NDMsIDMxNTUwLCAzMTU1NiwgMzE1NjUsIDMxNTczLCAzMTU4NSwgMzE1ODksIDMxNTk2LCAzMTYwMiwgCi0gICAgMzE2MDYsIDMxNjA5LCAzMTYxOCwgMzE2MjYsIDMxMDE1LCAzMTYzMSwgMzE2NDEsIDMxNjUxLCAzMTY2MSwgMzE2NjcsIAotICAgIDMxNjcyLCAzMTY4MiwgMzE2ODcsIDMxNzAwLCAzMTcxNCwgMzE3MjUsIDMxNzM3LCAzMTc0OSwgMzE3NjMsIDMxNzc2LCAKLSAgICAzMTc4OCwgMzE4MDAsIDE0NTg3LCAzMTgxNCwgMzE4MTksIDMxODI0LCAzMTgyOCwgMzE4MzIsIDMxODM2LCAxNzgwLCAKLSAgICAyNzE1OSwgMzE4NDAsIDMxODQ1LCAzMTA2MywgMzE4NTAsIDMxODUzLCAzMTg1OCwgMzE4NjMsIDMxODY4LCAzMTg3NCwgCi0gICAgMzE4ODAsIDEwMDkxLCAzMTg4NSwgMzE4OTIsIDE1Njg0LCAzMTg5OCwgMzE5MDMsIDMxOTA4LCAzMTkxMiwgMzE5MTcsIAotICAgIDMxOTIyLCAzMTA2OCwgMzE5MjcsIDMxOTMyLCAzMTkzNywgMzE5NDMsIDMxMDc0LCAzMTk0OCwgMzE5NTEsIDMxOTU4LCAKLSAgICAzMTk2NiwgMzE5NzIsIDMxOTc4LCAzMTk4NCwgMzE5OTUsIDMyMDAwLCAzMjAwNywgMzIwMTQsIDMyMDIxLCAzMjAyOSwgCi0gICAgMzIwMzgsIDMyMDQ3LCAzMjA1MywgMzIwNTksIDMyMDY3LCAzMTA3OSwgMzIwNzIsIDMyMDc4LCAzMjA4NCwgMzEwODUsIAotICAgIDMyMDg5LCAzMjA5NCwgMzIxMDIsIDMyMTEwLCAzMjExNiwgMzIxMjMsIDMyMTI5LCAzMjEzNiwgMzIxNDMsIDMyMTQ5LCAKLSAgICAzMjE1NywgMzIxNjcsIDMyMTc0LCAzMjE3OSwgMzIxODUsIDMyMTkwLCAzMjE5NSwgMzIyMDIsIDMyMjExLCAzMjIxOSwgCi0gICAgMzIyMjQsIDMyMjMwLCAzMjIzNywgMzIyNDUsIDMyMjUxLCAzMjI1NiwgMzIyNjIsIDMyMjcxLCAyNzkzNiwgMzIyNzgsIAotICAgIDMyMjgyLCAzMjI4NywgMzIyOTYsIDMyMzAxLCAzMjMwNiwgMzIzMTEsIDEyMzk4LCAzMjMxOSwgMzIzMjQsIDMyMzI5LCAKLSAgICAzMjMzNCwgMzIzMzgsIDMyMzQzLCAzMjM0OCwgMzIzNTUsIDMyMzYwLCAzMjM2NSwgMzIzNzAsIDMxMDkwLCAyMTIwMywgCi0gICAgMzIzNzYsIDI1MTksIDI0NCwgMzIzNzksIDMyMzgyLCAzMjM4NiwgMzIzOTAsIDMyNDAwLCAzMjQwOCwgMzI0MTIsIDMyNDE5LCAKLSAgICAzMjQyNiwgMzI0MzAsIDMyNDMzLCAzMjQzOSwgMzI0NDcsIDMyNDU1LCAzMjQ1OSwgMzI0NjMsIDMyNDY2LCAzMjQ3MywgCi0gICAgMzI0NzcsIDMyNDgxLCAzMjQ4OCwgMzI0OTYsIDMxMDI2LCAzMjUwMywgMzI1MTEsIDEwMTUxLCA2NjAsIDMwOCwgMzI1MjMsIAotICAgIDMyNTI4LCAzMjUzMywgMzI1MzksIDMyNTQ0LCAzMjU0OSwgMzcwNCwgMzI1NTQsIDMyNTU3LCAzMjU2MiwgMzI1NjcsIAotICAgIDMyNTcyLCAzMjU3NywgMzI1ODIsIDMyNTg5LCAyMjUxMiwgMzI1OTQsIDMyNTk5LCAzMjYwNCwgMzI2MDksIDMyNjE0LCAKLSAgICAzMjYyMCwgMzI2MjUsIDMyNjMxLCAzMTI2MSwgMzI2MzcsIDMyNjQyLCAzMjY0OCwgMzI2NTQsIDMyNjY0LCAzMjY2OSwgCi0gICAgMzI2NzQsIDMyNjc4LCAzMjY4MywgMzI2ODgsIDMyNjkzLCAzMjY5OCwgMzI3MTEsIDMyNzE2LCAyMjI4OSwgMTY2OTIsIAotICAgIDM3MTAsIDMyNzIwLCAzMjcyNSwgMzI3MzAsIDMyNzM2LCAzMjc0MSwgMzI3NDYsIDMyNzUwLCAzMjc1NSwgMzI3NjAsIAotICAgIDMyNzY2LCAzMjc3MSwgMzI3NzYsIDEzODIsIDMyNzgwLCAzMjc4NSwgMzI3OTAsIDMyNzk1LCAzMjc5OSwgMzI4MDQsIAotICAgIDMyODA5LCAzMjgxNCwgMzI4MjAsIDMyODI2LCAzMjgzMSwgMzI4MzUsIDMyODM5LCAzMjg0NCwgMzI4NDksIDMyODU0LCAKLSAgICAzMjg1OCwgMzI4NjYsIDMyODcwLCAzMjg3NiwgMzI4ODAsIDMyODg3LCAxNjQ4NSwgMzEwMzcsIDMyODkzLCAzMjkwMCwgCi0gICAgMzI5MDgsIDMyOTE1LCAzMjkyMSwgMzI5MzQsIDMyOTQ2LCAzMjk1MiwgMzI5NTYsIDI3NzMsIDMyOTYwLCAzMjk2NCwgCi0gICAgMzI0NjgsIDMyOTczLCAzMjk4NCwgMzI5ODksIDMyOTk0LCAzMjk5OSwgMzMwMDMsIDMzMDA4LCAyMjQyMiwgMzMwMTIsIAotICAgIDMzMDE2LCAzMzAyMSwgMzEwNDMsIDIxMjg3LCAzMzAyNSwgMzMwMzAsIDMzMDM2LCAzMzA0MSwgMzMwNDUsIDMzMDQ5LCAKLSAgICAzMzA1MiwgMzMwNTYsIDMzMDYyLCAzMzA3MywgMzMwODUsIDMxMDQ5LCAzMzA5MCwgMzMwOTMsIDMzMDk3LCAzNDcsIAotICAgIDMzMTAyLCAzMzEwNywgMzMxMTIsIDMzMTE3LCAzMzEyMiwgMzMxMjcsIDMzMTMzLCAzMzEzOCwgMzMxNDMsIDMzMTQ5LCAKLSAgICAzMzE1NCwgMzMxNjAsIDMzMTY1LCAzMzE3MSwgMzMxNzYsIDMzMTgxLCAzMzE4NiwgMzMxOTEsIDMzMTk2LCAzMzIwMSwgCi0gICAgMzMyMDYsIDMzMjExLCAzMzIxNywgMzMyMjIsIDMzMjI3LCAzMzIzMiwgMzMyMzcsIDMzMjQyLCAzMzI0NywgMzMyNTIsIAotICAgIDMzMjU4LCAzMzI2NCwgMzMyNjksIDMzMjc0LCAzMzI3OSwgMzMyODQsIDMzMjg5LCAzMzI5NCwgMzMyOTksIDMzMzA0LCAKLSAgICAzMzMwOSwgMzMzMTQsIDMzMzE5LCAzMzMyNCwgMzMzMjksIDMzMzM0LCAzMzMzOSwgMzMzNDQsIDMzMzQ5LCAzMzM1NCwgCi0gICAgMzMzNjAsIDMxMywgMjYsIDMzMzY1LCAzMzM2OSwgMzMzNzMsIDMzMzgxLCAzMzM4NSwgMzMzODksIDMzMzkyLCAzMzM5NSwgCi0gICAgMzMzOTcsIDMzNDAyLCAzMzQwNiwgMzM0MTEsIDMzNDE1LCAzMzQyMCwgMzM0MjQsIDMzNDI5LCAzMzQzMywgMzM0MzYsIAotICAgIDMzNDM4LCAzMzQ0MiwgMzM0NDcsIDMzNDUxLCAzMzQ2MiwgMzM0NjUsIDMzNDY3LCAzMzQ3MSwgMzM0ODMsIDMzNDkyLCAKLSAgICAzMzQ5NiwgMzM1MDAsIDMzNTA2LCAzMzUxMSwgMzM1MjAsIDMzNTI2LCAzMzUzMSwgMzM1MzYsIDMzNTQwLCAzMzU0NSwgCi0gICAgMzM1NTIsIDMzNTU3LCAzMzU2MywgMzM1NjgsIDMzNTcyLCAzMzU3OSwgMjU3MDEsIDI1NzExLCAzMzU4MywgMzM1ODgsIAotICAgIDMzNTkzLCAzMzU5OCwgMzM2MDUsIDMzNjA5LCAzMzYxNiwgODExMywgMzM2MjIsIDMzNjMxLCAzMzYzOSwgMzM2NTQsIAotICAgIDMzNjY4LCAzMzY3NiwgMzM2ODcsIDMzNjk2LCAzMzcwMSwgNzIyNywgMzM3MTEsIDMzNzE2LCAzMzcyMSwgMzM3MjUsIAotICAgIDMzNzI4LCAzMzczMiwgMzM3MzcsIDMzNzQxLCAzMzc0OCwgMzM3NTMsIDMzNzU4LCA4OTEyLCAzMzc2OCwgMzM3NzAsIAotICAgIDMzNzczLCAzMzc3NywgMzM3ODMsIDMzNzg3LCAzMzc5MiwgMzM3OTcsIDMzODAzLCAzMzgwOCwgMzM4MTQsIDMzODE5LCAKLSAgICAzMzgyOSwgMzM4MzgsIDMzODQ2LCAzMzg1MSwgMzM4NTcsIDMzODYyLCAzMzg2OSwgMzM4NzMsIDMzODgxLCAzMzg4OCwgCi0gICAgMzM5MDEsIDMzOTA5LCAzMzkxMywgMzM5MjMsIDMzOTI4LCAzMzkzMiwgMzM5NDAsIDMzOTQ4LCAzMzk1MiwgMzM5NjEsIAotICAgIDMzOTY3LCAzMzk3MiwgMzM5ODAsIDMzOTkwLCAzMzk5OSwgMzQwMDgsIDM0MDE3LCAzNDAyOCwgMzQwMzYsIDM0MDQ3LCAKLSAgICAzNDA1NiwgMzQwNjMsIDM0MDY5LCAzNDA3NCwgMzQwODUsIDM0MDkwLCAzNDA5NCwgMzQwOTcsIDM0MTAxLCAzNDEwOSwgCi0gICAgMzQxMTUsIDM0MTIzLCAzNDEzMCwgMzQxMzYsIDM0MTQxLCAzNDE0NywgMjQxOCwgMzQxNTEsIDM0MTUzLCAzNDE1OCwgCi0gICAgMzQxNjMsIDM0MTY4LCAzNDE3MSwgMzQxNzMsIDM0MTc3LCAzNDE4MCwgMzQxODcsIDM0MTkxLCA5ODg0LCAzNDE5NSwgCi0gICAgMzQyMDEsIDM0MjExLCAzNDIxNiwgMzQyMjIsIDM0MjI2LCAzNDIzMSwgMzQyNDQsIDI2MDg3LCAzNDI1MCwgMzQyNTksIAotICAgIDE3NDYyLCAzNDI2NiwgMzQyNzUsIDMxNjQ3LCAzNDI4MywgMzQyODgsIDM0MjkyLCAzNDMwMCwgMzQzMDcsIDM0MzEyLCAKLSAgICAzNDMxNiwgMzQzMjEsIDM0MzI1LCAzNDMzMywgMzQzMzksIDM0MzQ1LCAzNDM1MCwgMzQzNTQsIDM0MzU3LCAzNDM2MiwgCi0gICAgMzQzNzUsIDM0MzkxLCAyMjk3OSwgMzQ0MDgsIDM0NDIwLCAzNDQzNywgMzQ0NDksIDM0NDYzLCAyMjk5NiwgMjMwMTUsIAotICAgIDM0NDc1LCAzNDQ4NywgMjY4MCwgMzQ1MDEsIDM0NTA2LCAzNDUxMSwgMzQ1MTYsIDM0NTIwLCAzNDUyNywgMzQ1MzksIAotICAgIDM0NTQ1LCAzNDU0OCwgMzQ1NTksIDM0NTcwLCAzNDU3NSwgMzIwNjQsIDY5NSwgMzQ1NzksIDM0NTgzLCAzNDU4NywgCi0gICAgMzQ1OTAsIDM0NTk1LCAzNDYwMCwgMzQ2MDYsIDM0NjExLCAzNDYxNiwgMzQ2MjIsIDM0NjI4LCAzNDYzMywgMzQ2MzcsIAotICAgIDM0NjQyLCAzNDY0NywgMzQ2NTIsIDM0NjU2LCAzNDY1OSwgMzQ2NjUsIDM0NjcwLCAzNDY3NSwgMzQ2ODAsIDM0Njg0LCAKLSAgICAzNDY4OSwgMzQ2OTUsIDM0NzAzLCAyNjMyMCwgMzQ3MDgsIDM0NzEzLCAzNDcyMCwgMzQ3MjYsIDM0NzMyLCAzNDczNywgCi0gICAgMzQ3NDUsIDIyNTIxLCAzNDc1MiwgMzQ3NTcsIDM0NzYyLCAzNDc2NywgMzQ3NzEsIDM0Nzc0LCAzNDc3OSwgMzQ3ODMsIAotICAgIDM0Nzg3LCAzNDc5NCwgMzQ4MDAsIDM0ODA2LCAzNDgxMiwgMzQ4MTksIDM0ODI0LCAzNDgzMCwgMzM5NDMsIDM0ODM0LCAKLSAgICAzNDgzOCwgMzQ4NDMsIDM0ODU2LCAzNDg2MSwgMzQ4NjcsIDM0ODc1LCAzNDg4MiwgMzQ4OTAsIDM0OTAwLCAzNDkwNiwgCi0gICAgMzQ5MTIsIDM0OTE4LCAzNDkyMiwgMzQ5MzEsIDM0OTM5LCAzNDk0NiwgMzQ5NTEsIDM0OTU2LCAxMDQzNywgMzQ5NjEsIAotICAgIDM0OTY5LCAzNDk3NiwgMzQ5ODIsIDM0OTkyLCAzNDk5NywgMzUwMDMsIDM1MDExLCAzNjA4LCAzNTAxOCwgMzUwMjUsIAotICAgIDM2MTQsIDM1MDI5LCAzNTAzNCwgMzUwNDUsIDM1MDUyLCAzNTA1OCwgMzUwNjcsIDM1MDcxLCA0MDE1LCAzNTA3NCwgCi0gICAgMzUwODEsIDM1MDg3LCAzNTA5MywgMzUxMDEsIDM1MTExLCAyOTA0MiwgMzUxMTgsIDM1MTI2LCAzNTEzMSwgMzUxMzcsIAotICAgIDM1MTQyLCAyNTk0NywgMzUxNDgsIDM1MTU1LCAzNTE2MSwgMzUxNzAsIDIzNjYwLCAzNTE3NywgMzUxODIsIDM1MTg2LCAKLSAgICAzNTE5NCwgMzUyMDIsIDk2MDAsIDU4OTUsIDM1MjA5LCAzNTIxMywgMzUyMTUsIDM1MjE5LCAzNTIyNCwgMzUyMjYsIAotICAgIDM1MjMyLCAzNTIzNywgMzUyNDIsIDM1MjQ5LCAzMjU4NSwgMzUyNTUsIDM1MjYwLCAzNTI2NCwgMzUyNjksIDM1MjczLCAKLSAgICAzNTI4MiwgMzUyODYsIDM1MjkyLCAzNTI5OSwgMzUzMDUsIDM1MzEyLCAzNTMxNywgMzUzMjYsIDM1MzMxLCAzNTMzNSwgCi0gICAgMzUzNDAsIDM1MzQ3LCAzNTM1NSwgMzUzNjMsIDM1MzY4LCAyMTM0MywgMzUzNzIsIDM1Mzc1LCAzNTM3OSwgMzUzODMsIAotICAgIDM1Mzg3LCAzNTM5MCwgMzUzOTIsIDM1NDAwLCAzNTQwNCwgMzU0MTEsIDM1NDE1LCAzNTQxOSwgMzU0MjcsIDM1NDM0LCAKLSAgICAzNTQ0NCwgMzU0NDgsIDM1NDUyLCAzNTQ2MCwgMzU0NjgsIDM1NDc0LCAzNTQ3OSwgMzU0ODgsIDEzMzUwLCAzNTQ5NCwgCi0gICAgMzU1MDMsIDM1NTA4LCAzNTUxNSwgMzU1MjMsIDM1NTMxLCAzNTUzOSwgMzU1NDYsIDM1NTUzLCAzNTU2MCwgMzU1NjcsIAotICAgIDM1NTc0LCAzNTU3OSwgMzU1ODUsIDM1NjAyLCAzNTYxMCwgMzU2MjAsIDM1NjI4LCAzNTYzNSwgNDA3LCAzNTYzOSwgCi0gICAgMzU2NDUsIDM1NjQ5LCAzNTY1NCwgMzM2OTIsIDM1NjYwLCAzNTY2MywgMzU2NjcsIDM1Njc1LCAzNjE5LCAzNTY4MywgCi0gICAgMzU2ODksIDM1Njk1LCAzNTcwNCwgMzU3MTQsIDM1NzIxLCAzNTcyNywgMzYyNSwgMzYzMSwgMzU3MzYsIDM1NzQzLCAKLSAgICAzNTc1MSwgMzU3NTYsIDM1NzYwLCAzNTc2NywgMzU3NzUsIDM1NzgyLCAzNTc4OCwgMzU3OTcsIDM1ODA3LCAzNTgxMywgCi0gICAgMzU4MjEsIDM1ODMwLCAzNTgzNywgMzU4NDUsIDM1ODUyLCAyMjAxOSwgMzU4NTYsIDM1ODYzLCAzNTg2OSwgMzU4NzksIAotICAgIDM1ODg4LCAzNTg5OSwgMzU5MDMsIDM1OTEzLCAzNTkxOSwgMzU5MjYsIDM1OTM0LCAzNTk0MywgMzU5NTIsIDM1OTYyLCAKLSAgICAzNTk3MywgMzU5ODAsIDM1OTg1LCAzNTk5MiwgMzAyOSwgMzYwMDAsIDM2MDA2LCAzNjAxMSwgMzYwMTcsIDM2MDIzLCAKLSAgICAzNjAyOCwgMzYwNDEsIDM2MDU0LCAzNjA2NywgMzYwNzQsIDM2MDgwLCAzNjA4OCwgMzYwOTYsIDM2MTAxLCAzNjEwNSwgCi0gICAgMTQ2OSwgMzYxMDksIDM2MTE0LCAzNjExOSwgMzYxMjQsIDM2MTI5LCAzNjEzNSwgMzYxNDAsIDM2MTQ1LCAzNjE1MCwgCi0gICAgMzYxNTUsIDM2MTYwLCAzNjE2NSwgMzYxNzAsIDM2MTc2LCAzNjE4MiwgMzYxODcsIDM2MTkyLCAzNjE5OCwgMzYyMDMsIAotICAgIDM2MjA4LCAzNjIxMywgMzYyMTksIDM2MjI0LCAzNjIyOSwgMzYyMzQsIDM2MjM5LCAzNjI0NSwgMzYyNTAsIDM2MjU1LCAKLSAgICAzNjI2MSwgMzYyNjYsIDM2MjcxLCAzNjI3NiwgMzYyODEsIDM2Mjg2LCAzNjI5MiwgMzYyOTcsIDM2MzAzLCAzNjMwOCwgCi0gICAgMzYzMTQsIDM2MzE5LCAzNjMyNCwgMzYzMjksIDM2MzM1LCAzNjM0MSwgMzYzNDcsIDM2MzUzLCAzNjM1OSwgMzYzNjUsIAotICAgIDM2MzcxLCAzNjM3NywgMzYzODIsIDM2Mzg3LCAzNjM5MywgMzYzOTgsIDM2NDAzLCAzNjQwOCwgMzY0MTMsIDM2NDE4LCAKLSAgICAzNjQyMywgMzY0MjgsIDM2NDM0LCAzNjQzOSwgMzY0NDQsIDM2NDUwLCAzNjQ1NiwgMTAxLCAzNjQ2MSwgMzY0NjMsIAotICAgIDM2NDY3LCAzNjQ3MSwgMzY0NzUsIDM2NDgwLCAzNjQ4NCwgOTUyMSwgMzY0ODgsIDM2NDk0LCAxNzQxLCA2MjgwLCAzNjUwMCwgCi0gICAgMzY1MDMsIDM2NTA4LCAzNjUxMiwgMzY1MTcsIDM2NTIxLCAzNjUyNSwgMzY1MzAsIDEwMjM4LCAzNjUzNCwgMzY1MzgsIAotICAgIDM2NTQyLCAzNjU0NiwgMTUzNzIsIDM2NTUxLCAzNjU1NSwgMzY1NjAsIDM2NTY1LCAzNjU3MCwgMzY1NzQsIDM2NTgxLCAKLSAgICAyNjExMSwgMzY1ODcsIDM2NTkwLCAzNjU5NCwgMzY1OTksIDM2NjA1LCAzNjYwOSwgMzY2MTcsIDM2NjIzLCAzNjYyOCwgCi0gICAgMzY2MzIsIDM2NjM4LCAzNjY0MiwgMzY2NDYsIDM0NjIsIDM0NjcsIDI5MjM0LCAzNjY0OSwgMzY2NTMsIDM2NjU3LCAKLSAgICAzNjY2MSwgMzY2NjksIDM2Njc2LCAzNjY4MCwgMzY2ODcsIDM2NjkyLCAzMTcsIDM2Njk3LCAzNjcwMSwgMzY3MDcsIAotICAgIDM2NzE5LCAzNjcyNSwgMzY3MzEsIDM2NzM1LCAzNjc0MSwgMzY3NTAsIDM2NzU0LCAzNjc1OCwgMzY3NjMsIDM2NzY5LCAKLSAgICAzNjc3NCwgMzY3NzgsIDM2NzgzLCAzNjc4NywgMzY3OTEsIDM2Nzk4LCAzNjgwNCwgMzY4MDksIDM2ODI0LCAzNjgzOSwgCi0gICAgMzY4NTQsIDM2ODcwLCAzNjg4OCwgMTAxODgsIDM2OTAyLCAzNjkwOSwgMzY5MTMsIDM2OTE2LCAzNjkyNSwgMzY5MzAsIAotICAgIDM2OTM0LCAzNjk0MiwgMzM4OTQsIDM2OTUwLCAzNjk1NCwgMzY5NjQsIDM2OTc1LCAyOTIwNCwgMzY5ODgsIDM2OTkyLCAKLSAgICAzNzAwMSwgMzcwMDksIDk3NzgsIDE0OTAwLCAzNzAxMywgMjI0MzQsIDM3MDE2LCAzMDE1MiwgMzcwMjEsIDk3NzcsIAotICAgIDM3MDI2LCAzNzAzMiwgMzcwMzcsIDM3MDQzLCAzNzA0OCwgMzcwNTQsIDM3MDU5LCAzNzA2NSwgMzcwNzAsIDM3MDc2LCAKLSAgICAzNzA4MiwgMzcwODgsIDM3MDkzLCAzNzA0OSwgMzcwNTUsIDM3MDYwLCAzNzA2NiwgMzcwNzEsIDM3MDc3LCAzNzA4MywgCi0gICAgODEyNiwgMzg3NCwgMzcwOTcsIDM3MTA1LCAzNzEwOSwgMzcxMTIsIDM3MTE2LCAzNzEyMSwgMzcxMjYsIDM3MTMyLCAKLSAgICAzNzEzOCwgMzcxNDMsIDM3MTQ3LCAyNTk1OSwgMzcxNTEsIDM3MTU1LCAzNzE2MSwgMzcxNjUsIDkwNDIsIDM3MTc0LCAKLSAgICAzNzE4MSwgMzcxODUsIDExODY4LCAzNzE5MiwgMzcxOTgsIDM3MjAzLCAzNzIxMCwgMzcyMTcsIDM3MjI0LCAyODU1MCwgCi0gICAgODA0OSwgMzcyMzEsIDM3MjM4LCAzNzI0NSwgMzcyNTEsIDM3MjU2LCAzNzI2MywgMzcyNzQsIDM3MjgwLCAzNzI4NSwgCi0gICAgMzcyOTAsIDM3Mjk1LCAzNzMwMiwgMzcwNTAsIDM3MzA2LCAzNzMxNiwgMzczMjcsIDM3MzMzLCAzNzMzOCwgMzczNDMsIAotICAgIDM3MzQ4LCAzNzM1MywgMzczNTgsIDM3MzYyLCAzNzM2NiwgMzczNzIsIDM3MzgwLCAyMzE5LCA4NjUsIDEwMjU0LCAxMDI2NiwgCi0gICAgMTAyNzEsIDEwMjc3LCAzNzM4OSwgMTAyODIsIDEwMjg3LCAxMDI5MywgMzczOTQsIDM3NDA0LCAzNzQwOCwgMTAyOTgsIAotICAgIDM3NDEzLCAxNjg5MCwgMzc0MTYsIDM3NDIxLCAzNzQyNSwgMzc0MzAsIDM3NDM1LCAzNzQ0MiwgMzc0NDksIDM3NDUzLCAKLSAgICAzNzQ1NiwgMzc0NjQsIDEwMjAxLCAzNzQ3MSwgMzc0NzQsIDM3NDgwLCAzNzQ5MCwgNTkyOSwgMzc0OTksIDM3NTAzLCAKLSAgICAzNzUxMSwgMzc1MTUsIDM3NTI1LCAzNzUzMSwgMzc1NDIsIDM3NTQ4LCAzNzU1NCwgMzc1NTksIDM3NTY1LCAzNzU3MSwgCi0gICAgMzc1NzcsIDM3NTgyLCAzNzU4NSwgMzc1OTIsIDM3NTk4LCAzNzYwMywgMzc2MTAsIDM3NjE3LCAzNzYyMSwgMzc2MzEsIAotICAgIDM3NjQ0LCAzNzY1MywgMzc2NjIsIDM3NjczLCAzNzY4NiwgMzc2OTcsIDM3NzA2LCAzNzcxNywgMzc3MjIsIDM3NzMxLCAKLSAgICAzNzczNiwgMTAzMDMsIDM3NzQyLCAzNzc0OSwgMzc3NTcsIDM3NzYyLCAzNzc2NiwgMzc3NzMsIDM3NzgwLCAzODI5LCAxNiwgCi0gICAgMzc3ODQsIDM3Nzg5LCAxNjc0NCwgMzc3OTMsIDM3Nzk2LCAzNzc5OSwgMjgwNTYsIDM3ODAzLCAyODU1OSwgMzc4MTEsIAotICAgIDM3ODE1LCAzNzgxOSwgMzc4MjIsIDM3ODI4LCAzNzA3MiwgMzc4MzQsIDM3ODQyLCAzNzg0OCwgMzc4NTUsIDI4MDM5LCAKLSAgICAzNzg1OSwgMjgyMzMsIDM3ODYzLCAzNzg3MiwgMzc4NzgsIDM3ODg0LCAzNzg4OSwgMzc4OTMsIDM3ODk5LCAzNzkwMywgCi0gICAgMzc5MTEsIDM3OTE5LCAyNjE3NywgMzc5MjUsIDM3OTMyLCAzNzkzOCwgMzc5NDMsIDM3OTQ4LCAzNzk1MiwgMzc5NTgsIAotICAgIDM3OTYzLCAzNzk2OSwgNDA1NiwgNzkxLCAzNzk3NiwgMzc5ODAsIDM3OTgzLCAxNTI2MiwgMzc5OTUsIDM1ODI2LCAzODAwNiwgCi0gICAgMzgwMDksIDM4MDE2LCAzODAyMCwgMzgwMjYsIDM4MDMwLCAzODAzNiwgMzgwNDEsIDM4MDQ3LCAzODA1MiwgMzgwNTcsIAotICAgIDM4MDYxLCAzODA2NSwgMzgwNzAsIDM4MDc1LCAzODA4NSwgMzgwOTEsIDM4MTA0LCAzODExMCwgMzgxMTYsIDM4MTIzLCAKLSAgICAzODEyOCwgMzgxMzQsIDM4MTM5LCAxNjYzMCwgMTQ3MiwgMTAxOSwgMzExOTMsIDMxMTk5LCAzODE0NCwgMzEyMDUsIAotICAgIDMxMjE4LCAzMTIyNCwgMzEyMzAsIDM4MTUwLCAzMTIzNiwgMzEyNDIsIDM4MTU2LCAzODE2MiwgMjIsIDM4MTcwLCAzODE3NywgCi0gICAgMzgxODEsIDM4MTg1LCAzODE5MywgMzE5NTMsIDM4MTk3LCAzODIwMSwgMzgyMDgsIDM4MjEzLCAzODIxNywgMzgyMjIsIAotICAgIDM4MjI4LCAzODIzMywgMzgyMzksIDM4MjQ0LCAzODI0OCwgMzgyNTIsIDM4MjU2LCAzODI2MSwgMzgyNjUsIDM4MjcwLCAKLSAgICAzODI3NCwgMzgyODEsIDM4Mjg2LCAzODI5MCwgMzgyOTUsIDM4Mjk5LCAzODMwNCwgMzgzMDgsIDM4MzEzLCAzODMxOSwgCi0gICAgMTU0ODIsIDE1NDg3LCAzODMyNCwgMzgzMjgsIDM4MzMxLCAzODMzNSwgMjExNzAsIDM4MzQwLCAzODM0NCwgMzgzNTAsIAotICAgIDM4MzU3LCAzODM2MiwgMzgzNzIsIDM4Mzc3LCAzODM4NSwgMzgzODksIDM4MzkyLCAzMTk2OCwgMzgzOTYsIDQxMDksIAotICAgIDM4NDAxLCAzODQwNiwgMzg0MTAsIDM4NDE1LCAzODQxOSwgMzg0MjQsIDEzMzY4LCAzODQzNSwgMzg0MzksIDM4NDQyLCAKLSAgICAzODQ0NywgMzg0NTEsIDM4NDU1LCAzODQ1OCwgMzg0NjIsIDgxNDUsIDEzMzg0LCAzODQ2NSwgMzg0NjgsIDM4NDc0LCAKLSAgICAzODQ3OSwgMzg0ODUsIDM4NDkwLCAzODQ5NiwgMzg1MDEsIDM4NTA3LCAzODUxMiwgMzg1MTgsIDM4NTI0LCAzODUzMCwgCi0gICAgMzg1MzUsIDM4NTM5LCAzODU0MywgMzg1NTIsIDM4NTY4LCAzODU4NCwgMzg1OTQsIDI3OTQ2LCAzODYwMSwgMzg2MDUsIAotICAgIDM4NjEwLCAzODYxNSwgMzg2MTksIDM4NjIzLCAzNTk0NywgMzg2MjksIDM4NjM0LCAzODYzOCwgMzg2NDUsIDM4NjUwLCAKLSAgICAzODY1NCwgMzg2NTgsIDI2OTc5LCAzODY2NCwgMjE0MzgsIDM4NjY5LCAzODY3NiwgMzg2ODQsIDM4NjkwLCAzODY5NywgCi0gICAgMzg3MDUsIDM4NzExLCAzODcxNSwgMzg3MjEsIDM4NzI5LCAzODczMywgMzg3NDIsIDk1MDIsIDM4NzUwLCAzODc1NCwgCi0gICAgMzg3NjIsIDM4NzY5LCAzODc3NCwgMzg3NzksIDM4NzgzLCAzODc4NiwgMzg3OTAsIDM4NzkzLCAzODc5NywgMzg4MDQsIAotICAgIDM4ODA5LCAzODgxNSwgMjYzOTgsIDMxMjU2LCAzODgxOSwgMzg4MjYsIDM4ODMyLCAzODgzOCwgMzg4NDMsIDM4ODQ2LCAKLSAgICAzODg0OCwgMzg4NTUsIDM4ODYyLCAzODg2OCwgMzg4NzIsIDM4ODc1LCAzODg3OSwgMzg4ODMsIDM4ODg3LCAzODg5MiwgCi0gICAgMzg4OTYsIDM4OTAwLCAzODkwMywgMzg5MDcsIDM4OTIxLCAyMzA0NSwgMzg5NDAsIDM4OTUzLCAzODk2NiwgMzg5NzksIAotICAgIDIzMDYzLCAzODk5NCwgMTA0OTAsIDM5MDA5LCAzOTAxNSwgMzkwMTksIDM5MDIzLCAzOTAzMCwgMzkwMzUsIDM5MDM5LCAKLSAgICAzOTA0NiwgMzkwNTIsIDM5MDU3LCAzOTA2MywgMzkwNzMsIDM5MDg1LCAzOTA5NiwgMzkxMDEsIDM5MTA4LCAzOTExMiwgCi0gICAgMzkxMTYsIDM5MTE5LCAxNTg3OCwgMzY3NywgMzkxMjcsIDE1NTA5LCAzOTE0MCwgMzkxNDcsIDM5MTUxLCAzOTE1NSwgCi0gICAgMzkxNjAsIDM5MTY1LCAzOTE3MSwgMzkxNzUsIDM5MTc5LCAzOTE4MiwgNzc0MiwgMTU1MjAsIDM5MTg3LCAzOTE5MSwgCi0gICAgMzkxOTcsIDM5MjA2LCAzOTIxMSwgMzkyMTgsIDM1ODAzLCAzOTIyNCwgMzkyMjksIDM5MjMzLCAzOTIzOCwgMzkyNDUsIAotICAgIDM5MjQ5LCAzOTI1MiwgMzkyNTYsIDM5MjYxLCAxNDU1MiwgMzkyNjgsIDM5Mjc1LCAxMDY2LCAzOTI3OSwgMzkyODQsIAotICAgIDM5Mjg5LCAzOTI5NSwgMzkzMDAsIDM5MzA1LCAzOTMwOSwgMzkzMTksIDM5MzI0LCAzOTMzMCwgMzkzMzUsIDM5MzQxLCAKLSAgICAzOTM0NiwgMzkzNTIsIDM5MzYyLCAzOTM2NywgMzkzNzIsIDM5Mzc2LCA3MjI5LCA3MjQxLCAzOTM4MSwgMzkzODQsIAotICAgIDM5MzkxLCAzOTM5NywgMzQwNTksIDM0MDY2LCAzOTQwNiwgMzk0MTAsIDMyMDE2LCAzOTQxOCwgMzk0MjksIDM5NDM3LCAKLSAgICAzNTk5NSwgMzk0NDQsIDM5NDQ5LCAzOTQ1NCwgMzk0NjUsIDM5NDcyLCAzOTQ4MywgMzIwNDAsIDIxNDQ0LCAzOTQ5MSwgCi0gICAgNzM1LCAzOTQ5NiwgMzk1MDIsIDI4MDMwLCAzOTUwOCwgMzk1MTMsIDM5NTIzLCAzOTUzMiwgMzk1MzksIDM5NTQ1LCAKLSAgICAzOTU0OSwgMzk1NTIsIDM5NTU5LCAzOTU2NSwgMzk1NzIsIDM5NTc4LCAzOTU4OCwgMzk1OTYsIDM5NjAyLCAzOTYwOCwgCi0gICAgMzk2MTMsIDM5NjE3LCAzOTYyNCwgMzk2MzAsIDM5NjM3LCAzODg4OCwgNTM1LCAxMzgwNSwgMzk2NDMsIDM5NjQ4LCAKLSAgICAzOTY1MSwgMzk2NTcsIDM5NjY1LCAxMzk2LCAzOTY3MCwgMzk2NzQsIDM5Njc5LCAzOTY4NiwgMzk2OTIsIDM5Njk2LCAKLSAgICAzOTcwMCwgMzk3MDUsIDM5NzE0LCAzOTcyMSwgMzk3MzEsIDM5NzM3LCAyODA3NCwgMzk3NTQsIDM5NzYzLCAzOTc3MSwgCi0gICAgMzk3NzcsIDM5NzgyLCAzOTc4OSwgMzk3OTUsIDM5ODAzLCAzOTgxMiwgMzk4MjAsIDM5ODI0LCAzOTgyOSwgMzk4MzcsIAotICAgIDMyMDQ5LCAzOTg0MywgMzk4NjIsIDE1ODExLCAzOTg3NiwgMzk4OTIsIDM5OTA2LCAzOTkxMiwgMzk5MTcsIDM5OTIyLCAKLSAgICAzOTkyNywgMzk5MzMsIDMyMDU1LCAzOTkzOCwgMzk5NDUsIDM5OTUwLCAzOTk1NCwgMzQ1LCAyOTM2LCAzOTk2MSwgMzk5NjYsIAotICAgIDM5OTcxLCAyNzMwNSwgMzk3OTIsIDM5OTc1LCAzOTk4MCwgMzk5ODgsIDM5OTkyLCAzOTk5NSwgNDAwMDEsIDQwMDA3LCAKLSAgICA0MDAxMSwgMjgxMjksIDQwMDE0LCA0MDAxOSwgNDAwMjMsIDQwMDI2LCA0MDAzMSwgNDAwMzUsIDQwMDQwLCA0MDA0NSwgCi0gICAgNDAwNDksIDQwMDU0LCA0MDA1OCwgNDAwNjIsIDIxMTY2LCAyMTE3NywgNDAwNjYsIDQwMDcxLCA0MDA3NywgMjY5MzYsIAotICAgIDQwMDgyLCA0MDA4NiwgMjEyNTMsIDE2MDU5LCA0MDA4OSwgNDAwOTQsIDQwMDk5LCA0MDEwNCwgNDAxMDksIDQwMTE0LCAKLSAgICA0MDExOSwgNDAxMjQsIDQ0NywgNDMsIDMxMjc0LCAzMTI3OSwgMzEyODQsIDMxMjkwLCAzMTI5NSwgMzEzMDAsIDQwMTI5LCAKLSAgICAzMTMwNCwgNDAxMzMsIDQwMTM3LCA0MDE0MSwgMzEzMDksIDMxMzE1LCA0MDE1NSwgMzEzMjYsIDMxMzMxLCA0MDE2MywgCi0gICAgNDAxNjgsIDMxMzM3LCA0MDE3MywgNDAxNzgsIDQwMTgzLCA0MDE4OCwgNDAxOTQsIDQwMjAwLCA0MDIwNiwgMzEzNTQsIAotICAgIDQwMjE5LCA0MDIyNSwgMzEzNTgsIDQwMjI5LCAzMTM2MywgNDAyMzQsIDMxMzY4LCAzMTM3MywgNDAyMzcsIDQwMjQyLCAKLSAgICA0MDI0NiwgMzA5MjMsIDQwMjUyLCAxMzU5MiwgNDAyNTksIDQwMjY0LCAzMTM3OCwgNDAyNjgsIDQwMjczLCA0MDI3OCwgCi0gICAgNDAyODMsIDQwMjg3LCA0MDI5MiwgNDAyOTcsIDQwMzAzLCA0MDMwOCwgNDAzMTMsIDQwMzE5LCA0MDMyNSwgNDAzMzAsIAotICAgIDQwMzM0LCA0MDMzOSwgNDAzNDQsIDQwMzQ5LCA0MDM1MywgNDAzNTgsIDQwMzYzLCA0MDM2OCwgNDAzNzQsIDQwMzgwLCAKLSAgICA0MDM4NiwgNDAzOTEsIDQwMzk1LCA0MDQwMCwgNDA0MDQsIDMxMzgyLCAzMTM4NywgMzEzOTIsIDQwNDA4LCA0MDQxMiwgCi0gICAgNDA0MTYsIDMxMzk3LCAzMTQwMywgMzE0MDksIDMxNDIxLCA0MDQyOCwgMjU5OTYsIDQwNDMyLCA0MDQzNiwgNDA0NDEsIAotICAgIDQwNDQ2LCA0MDQ1MSwgNDA0NTYsIDQwNDYwLCA0MDQ2NCwgNDA0NzQsIDQwNDc5LCA0MDQ4NCwgNDA0ODgsIDQwNDkyLCAKLSAgICA0MDQ5NSwgNDA1MDMsIDMxNDY5LCA0MDUwOCwgMTQ3OSwgNDA1MTQsIDQwNTIyLCA0MDUzMSwgNDA1MzUsIDQwNTM5LCAKLSAgICA0MDU0NywgNDA1NTMsIDQwNTYxLCA0MDU3NywgNDA1ODEsIDQwNTg1LCA0MDU5MCwgNDA2MDUsIDMxNTA2LCAxNzQ5LCAKLSAgICAxMjA0OCwgNDA2MDksIDEzNzgsIDQwNjIxLCA0MDYyMiwgNDA2MzAsIDQwNjM3LCA0MDY0MiwgNDA2NDksIDQwNjU0LCAKLSAgICA5MzcyLCAxMTE0LCAxMDMyNSwgNDA2NjEsIDQwNjY2LCA0MDY2OSwgNDA2NzIsIDQwNjgxLCAxMjg2LCA0MDY4NiwgMzkwMzYsIAotICAgIDQwNjkzLCA0MDY5OCwgMjI0ODYsIDI1NTcsIDQwNzAyLCAxMDczNCwgNDA3MTIsIDQwNzE4LCAyMzM3LCAyMzQ3LCA0MDcyNywgCi0gICAgNDA3MzYsIDQwNzQ2LCA0MDc1NywgMzI5MywgMzQyMTIsIDEwMzc3LCAzODA3LCAxNjY2OCwgMTI5MSwgNDA3NjIsIDQwNzcwLCAKLSAgICA0MDc3NywgNDA3ODIsIDQwNzg2LCA0MDc5MCwgMjM4NTgsIDEwNDA0LCA0MDc5OCwgNDA4MDcsIDQwODE2LCA0MDgyNCwgCi0gICAgNDA4MzEsIDQwODQyLCA0MDg0NywgNDA4NjAsIDQwODczLCA0MDg4NSwgNDA4OTcsIDQwOTA5LCA0MDkyMiwgNDA5MzMsIAotICAgIDQwOTQ0LCA0MDk1NCwgNDA5NjIsIDQwOTcwLCA0MDk4MiwgNDA5OTQsIDQxMDA1LCA0MTAxNCwgNDEwMjIsIDQxMDI5LCAKLSAgICA0MTA0MSwgNDEwNDgsIDQxMDU3LCA0MTA2NCwgNDEwNzcsIDQxMDgyLCA0MTA5MiwgNDEwOTcsIDQxMTAzLCA0MTEwOCwgCi0gICAgMzcxODIsIDQxMTEyLCA0MTExOSwgNDExMjMsIDQxMTMwLCA0MTEzOCwgMjUxOCwgNDExNDUsIDQxMTU2LCA0MTE2NiwgCi0gICAgNDExNzUsIDQxMTgzLCA0MTE5MywgNDEyMDEsIDQxMjExLCA0MTIyMCwgNDEyMjUsIDQxMjMxLCA0MTIzNywgMzcwOSwgCi0gICAgNDEyNDgsIDQxMjU4LCA0MTI2NywgNDEyNzYsIDQxMjg2LCA0MTI5NCwgNDEzMDMsIDQxMzA4LCA0MTMxMywgNDEzMTgsIAotICAgIDE3MDUsIDM3LCA0MTMyNiwgNDEzMzQsIDQxMzQ1LCA0MTM1NiwgMTYzNDMsIDQxMzY2LCA0MTM3MCwgNDEzNzcsIDQxMzgzLCAKLSAgICA0MTM4OCwgNDEzOTIsIDQxNDAzLCA0MTQxMywgNDE0MjIsIDQxNDMzLCAxNjcxNywgMTY3MjIsIDQxNDM4LCA0MTQ0NywgCi0gICAgNDE0NTIsIDQxNDYyLCA0MTQ2NywgNDE0NzUsIDQxNDgzLCA0MTQ5MCwgNDE0OTYsIDcwNzgsIDIyOCwgNDE1MDAsIDQxNTA2LCAKLSAgICA0MTUxMSwgNDE1MTQsIDIxMTcsIDM5MTUyLCA0MTUyMiwgNDE1MjYsIDQxNTI5LCAxNTEyLCA0MTUzNSwgMTM5NjcsIDEyOTYsIAotICAgIDQxNTQwLCA0MTU1MywgNDE1NjcsIDI2NDMsIDQxNTg1LCA0MTU5NywgNDE2MDksIDI2NTcsIDI2NzQsIDQxNjIzLCA0MTYzNiwgCi0gICAgMjY4OSwgNDE2NTAsIDQxNjYyLCAyNzA0LCA0MTY3NiwgMTMwMiwgMTMwOCwgMTMxNCwgMTA2NTIsIDQxNjgxLCA0MTY4NiwgCi0gICAgNDE2OTEsIDQxNjk1LCA0MTcxMCwgNDE3MjUsIDQxNzQwLCA0MTc1NSwgNDE3NzAsIDQxNzg1LCA0MTgwMCwgNDE4MTUsIAotICAgIDQxODMwLCA0MTg0NSwgNDE4NjAsIDQxODc1LCA0MTg5MCwgNDE5MDUsIDQxOTIwLCA0MTkzNSwgNDE5NTAsIDQxOTY1LCAKLSAgICA0MTk4MCwgNDE5OTUsIDQyMDEwLCA0MjAyNSwgNDIwNDAsIDQyMDU1LCA0MjA3MCwgNDIwODUsIDQyMTAwLCA0MjExNSwgCi0gICAgNDIxMzAsIDQyMTQ1LCA0MjE2MCwgNDIxNzUsIDQyMTkwLCA0MjIwNSwgNDIyMjAsIDQyMjM1LCA0MjI1MCwgNDIyNjUsIAotICAgIDQyMjgwLCA0MjI5NSwgNDIzMTAsIDQyMzI1LCA0MjM0MCwgNDIzNTUsIDQyMzcwLCA0MjM4NSwgNDI0MDAsIDQyNDE1LCAKLSAgICA0MjQzMCwgNDI0NDUsIDQyNDYwLCA0MjQ3NSwgNDI0OTAsIDQyNTA1LCA0MjUyMCwgNDI1MzUsIDQyNTUwLCA0MjU2NSwgCi0gICAgNDI1ODAsIDQyNTk1LCA0MjYxMCwgNDI2MjUsIDQyNjQwLCA0MjY1NSwgNDI2NzAsIDQyNjg1LCA0MjcwMCwgNDI3MTUsIAotICAgIDQyNzMwLCA0Mjc0NSwgNDI3NjAsIDQyNzc1LCA0Mjc5MCwgNDI4MDUsIDQyODIwLCA0MjgzNSwgNDI4NTAsIDQyODY1LCAKLSAgICA0Mjg4MCwgNDI4OTUsIDQyOTEwLCA0MjkyNSwgNDI5NDAsIDQyOTU1LCA0Mjk3MCwgNDI5ODUsIDQzMDAwLCA0MzAxNSwgCi0gICAgNDMwMzAsIDQzMDQ1LCA0MzA2MCwgNDMwNzUsIDQzMDkwLCA0MzEwNSwgNDMxMjAsIDQzMTM1LCA0MzE1MCwgNDMxNjUsIAotICAgIDQzMTgwLCA0MzE5NSwgNDMyMTAsIDQzMjI1LCA0MzI0MCwgNDMyNTUsIDQzMjcwLCA0MzI4NSwgNDMzMDAsIDQzMzE1LCAKLSAgICA0MzMzMCwgNDMzNDUsIDQzMzYwLCA0MzM3NSwgNDMzOTAsIDQzNDA1LCA0MzQyMCwgNDM0MzUsIDQzNDUwLCA0MzQ2NSwgCi0gICAgNDM0ODAsIDQzNDk1LCA0MzUxMCwgNDM1MjUsIDQzNTQwLCA0MzU1NSwgNDM1NzAsIDQzNTg1LCA0MzYwMCwgNDM2MTUsIAotICAgIDQzNjMwLCA0MzY0NSwgNDM2NjAsIDQzNjc1LCA0MzY5MCwgNDM3MDUsIDQzNzIwLCA0MzczNSwgNDM3NTAsIDQzNzY1LCAKLSAgICA0Mzc4MCwgNDM3OTUsIDQzODEwLCA0MzgyNSwgNDM4NDAsIDQzODU1LCA0Mzg3MCwgNDM4ODUsIDQzOTAwLCA0MzkxNSwgCi0gICAgNDM5MzAsIDQzOTQ1LCA0Mzk2MCwgNDM5NzUsIDQzOTkwLCA0NDAwNSwgNDQwMjAsIDQ0MDM1LCA0NDA1MCwgNDQwNjUsIAotICAgIDQ0MDgwLCA0NDA5NSwgNDQxMTAsIDQ0MTI1LCA0NDE0MCwgNDQxNTUsIDQ0MTcwLCA0NDE4NSwgNDQyMDAsIDQ0MjE1LCAKLSAgICA0NDIzMCwgNDQyNDUsIDQ0MjYwLCA0NDI3NSwgNDQyOTAsIDQ0MzA1LCA0NDMyMCwgNDQzMzUsIDQ0MzUwLCA0NDM2NSwgCi0gICAgNDQzODAsIDQ0Mzk1LCA0NDQxMCwgNDQ0MjUsIDQ0NDQwLCA0NDQ1NSwgNDQ0NzAsIDQ0NDg1LCA0NDUwMCwgNDQ1MTUsIAotICAgIDQ0NTMwLCA0NDU0NSwgNDQ1NjAsIDQ0NTc1LCA0NDU5MCwgNDQ2MDUsIDQ0NjIwLCA0NDYzNSwgNDQ2NTAsIDQ0NjY1LCAKLSAgICA0NDY4MCwgNDQ2OTUsIDQ0NzEwLCA0NDcyNSwgNDQ3NDAsIDQ0NzU1LCA0NDc3MCwgNDQ3ODUsIDQ0ODAwLCA0NDgxNSwgCi0gICAgNDQ4MzAsIDQ0ODQ1LCA0NDg2MCwgNDQ4NzUsIDQ0ODkwLCA0NDkwNSwgNDQ5MjAsIDQ0OTM1LCA0NDk1MCwgNDQ5NjUsIAotICAgIDQ0OTgwLCA0NDk5NSwgNDUwMTAsIDQ1MDI1LCA0NTA0MCwgNDUwNTUsIDQ1MDcwLCA0NTA4NSwgNDUxMDAsIDQ1MTE1LCAKLSAgICA0NTEzMCwgNDUxNDUsIDQ1MTYwLCA0NTE3NSwgNDUxOTAsIDQ1MjA1LCA0NTIyMCwgNDUyMzUsIDQ1MjUwLCA0NTI2NSwgCi0gICAgNDUyODAsIDQ1Mjk1LCA0NTMxMCwgNDUzMjUsIDQ1MzQwLCA0NTM1NSwgNDUzNzAsIDQ1Mzg1LCA0NTQwMCwgNDU0MTUsIAotICAgIDQ1NDMwLCA0NTQ0NSwgNDU0NjAsIDQ1NDc1LCA0NTQ5MCwgNDU1MDUsIDQ1NTIwLCA0NTUzNSwgNDU1NTAsIDQ1NTY1LCAKLSAgICA0NTU4MCwgNDU1OTUsIDQ1NjEwLCA0NTYyNSwgNDU2NDAsIDQ1NjU1LCA0NTY3MCwgNDU2ODUsIDQ1NzAwLCA0NTcxNSwgCi0gICAgNDU3MzAsIDQ1NzQ1LCA0NTc2MCwgNDU3NzUsIDQ1NzkwLCA0NTgwNSwgNDU4MjAsIDQ1ODM1LCA0NTg1MCwgNDU4NjUsIAotICAgIDQ1ODgwLCA0NTg5NSwgNDU5MTAsIDQ1OTI1LCA0NTk0MCwgNDU5NTUsIDQ1OTcwLCA0NTk4NSwgNDYwMDAsIDQ2MDE1LCAKLSAgICA0NjAzMCwgNDYwNDUsIDQ2MDYwLCA0NjA3NSwgNDYwOTAsIDQ2MTA1LCA0NjEyMCwgNDYxMzUsIDQ2MTUwLCA0NjE2NSwgCi0gICAgNDYxODAsIDQ2MTk1LCA0NjIxMCwgNDYyMjUsIDQ2MjQwLCA0NjI1NSwgNDYyNzAsIDQ2Mjg1LCA0NjMwMCwgNDYzMTUsIAotICAgIDQ2MzMwLCA0NjM0NSwgNDYzNjAsIDQ2Mzc1LCA0NjM5MCwgNDY0MDUsIDQ2NDIwLCA0NjQzNSwgNDY0NTAsIDQ2NDY1LCAKLSAgICA0NjQ4MCwgNDY0OTUsIDQ2NTEwLCA0NjUyNSwgNDY1NDAsIDQ2NTU1LCA0NjU3MCwgNDY1ODUsIDQ2NjAwLCA0NjYxNSwgCi0gICAgNDY2MzAsIDQ2NjQ1LCA0NjY2MCwgNDY2NzUsIDQ2NjkwLCA0NjcwNSwgNDY3MjAsIDQ2NzM1LCA0Njc1MCwgNDY3NjUsIAotICAgIDQ2NzgwLCA0Njc5NSwgNDY4MTAsIDQ2ODI1LCA0Njg0MCwgNDY4NTUsIDQ2ODcwLCA0Njg4NSwgNDY5MDAsIDQ2OTE1LCAKLSAgICA0NjkzMCwgNDY5NDUsIDQ2OTYwLCA0Njk3NSwgNDY5OTAsIDQ3MDA1LCA0NzAyMCwgNDcwMzUsIDQ3MDUwLCA0NzA2NSwgCi0gICAgNDcwODAsIDQ3MDk1LCA0NzExMCwgNDcxMjUsIDQ3MTQwLCA0NzE1NSwgNDcxNzAsIDQ3MTg1LCA0NzIwMCwgNDcyMTUsIAotICAgIDQ3MjMwLCA0NzI0NSwgNDcyNjAsIDQ3Mjc1LCA0NzI5MCwgNDczMDUsIDQ3MzIwLCA0NzMzNSwgNDczNTAsIDQ3MzY1LCAKLSAgICA0NzM4MCwgNDczOTUsIDQ3NDEwLCA0NzQyNSwgNDc0NDAsIDQ3NDU1LCA0NzQ3MCwgNDc0ODUsIDQ3NTAwLCA0NzUxNSwgCi0gICAgNDc1MzAsIDQ3NTQ1LCA0NzU2MCwgNDc1NzUsIDQ3NTkwLCA0NzYwNSwgNDc2MjAsIDQ3NjM1LCA0NzY1MCwgNDc2NjUsIAotICAgIDQ3NjgwLCA0NzY5NSwgNDc3MTAsIDQ3NzI1LCA0Nzc0MCwgNDc3NTUsIDQ3NzcwLCA0Nzc4NSwgNDc4MDAsIDQ3ODE1LCAKLSAgICA0NzgzMCwgNDc4NDUsIDQ3ODYwLCA0Nzg3NSwgNDc4OTAsIDQ3OTA1LCA0NzkyMCwgNDc5MzUsIDQ3OTUwLCA0Nzk2NSwgCi0gICAgNDc5ODAsIDQ3OTk1LCA0ODAxMCwgNDgwMjUsIDQ4MDQwLCA0ODA1NSwgNDgwNzAsIDQ4MDg1LCA0ODEwMCwgNDgxMTUsIAotICAgIDQ4MTMwLCA0ODE0NSwgNDgxNjAsIDQ4MTc1LCA0ODE5MCwgNDgyMDUsIDQ4MjIwLCA0ODIzNSwgNDgyNTAsIDQ4MjY1LCAKLSAgICA0ODI4MCwgNDgyOTUsIDQ4MzEwLCA0ODMyNSwgNDgzNDAsIDQ4MzU1LCA0ODM3MCwgNDgzODUsIDQ4NDAwLCA0ODQxNSwgCi0gICAgNDg0MzAsIDQ4NDQ1LCA0ODQ2MCwgNDg0NzUsIDQ4NDkwLCA0ODUwNSwgNDg1MjAsIDQ4NTM1LCA0ODU1MCwgNDg1NjUsIAotICAgIDQ4NTgwLCA0ODU5NSwgNDg2MTAsIDQ4NjI1LCA0ODY0MCwgNDg2NTUsIDQ4NjcwLCA0ODY4NSwgNDg3MDAsIDQ4NzE1LCAKLSAgICA0ODczMCwgNDg3NDUsIDQ4NzYwLCA0ODc3NSwgNDg3OTAsIDQ4ODA1LCA0ODgyMCwgNDg4MzUsIDQ4ODUwLCA0ODg2NSwgCi0gICAgNDg4ODAsIDQ4ODk1LCA0ODkxMCwgNDg5MjUsIDQ4OTQwLCA0ODk1NSwgNDg5NzAsIDQ4OTg1LCA0OTAwMCwgNDkwMTUsIAotICAgIDQ5MDMwLCA0OTA0NSwgNDkwNjAsIDQ5MDc1LCA0OTA5MCwgNDkxMDUsIDQ5MTIwLCA0OTEzNSwgNDkxNTAsIDQ5MTY1LCAKLSAgICA0OTE4MCwgNDkxOTUsIDQ5MjEwLCA0OTIyNSwgNDkyNDAsIDQ5MjU1LCA0OTI3MCwgNDkyODUsIDQ5MzAwLCA0OTMxNSwgCi0gICAgNDkzMzAsIDQ5MzQ1LCA0OTM2MCwgNDkzNzUsIDQ5MzkwLCA0OTQwNSwgNDk0MjAsIDQ5NDM1LCA0OTQ1MCwgNDk0NjUsIAotICAgIDQ5NDgwLCA0OTQ5NSwgNDk1MTEsIDQ5NTI3LCA0OTU0MywgNDk1NTksIDQ5NTc1LCA0OTU5MSwgNDk2MDcsIDQ5NjIzLCAKLSAgICA0OTYzOSwgNDk2NTUsIDQ5NjcxLCA0OTY4NywgNDk3MDMsIDQ5NzE5LCA0OTczNSwgNDk3NTEsIDQ5NzY3LCA0OTc4MywgCi0gICAgNDk3OTksIDQ5ODE1LCA0OTgzMSwgNDk4NDcsIDQ5ODYzLCA0OTg3OSwgNDk4OTUsIDQ5OTExLCA0OTkyNywgNDk5NDMsIAotICAgIDQ5OTU5LCA0OTk3NSwgNDk5OTEsIDUwMDA3LCA1MDAyMywgNTAwMzksIDUwMDU1LCA1MDA3MSwgNTAwODcsIDUwMTAzLCAKLSAgICA1MDExOSwgNTAxMzUsIDUwMTUxLCA1MDE2NywgNTAxODMsIDUwMTk5LCA1MDIxNSwgNTAyMzEsIDUwMjQ3LCA1MDI2MywgCi0gICAgNTAyNzksIDUwMjk1LCA1MDMxMSwgNTAzMjcsIDUwMzQzLCA1MDM1OSwgNTAzNzUsIDUwMzkxLCA1MDQwNywgNTA0MjMsIAotICAgIDUwNDM5LCA1MDQ1NSwgNTA0NzEsIDUwNDg3LCA1MDUwMywgNTA1MTksIDUwNTM1LCA1MDU1MSwgNTA1NjcsIDUwNTgzLCAKLSAgICA1MDU5OSwgNTA2MTUsIDUwNjMxLCA1MDY0NywgNTA2NjMsIDUwNjc5LCA1MDY5NSwgNTA3MTEsIDUwNzI3LCA1MDc0MywgCi0gICAgNTA3NTksIDUwNzc1LCA1MDc5MSwgNTA4MDcsIDUwODIzLCA1MDgzOSwgNTA4NTUsIDUwODcxLCA1MDg4NywgNTA5MDMsIAotICAgIDUwOTE5LCA1MDkzNSwgNTA5NTEsIDUwOTY3LCA1MDk4MywgNTA5OTksIDUxMDE1LCA1MTAzMSwgNTEwNDcsIDUxMDYzLCAKLSAgICA1MTA3OSwgNTEwOTUsIDUxMTExLCA1MTEyNywgNTExNDMsIDUxMTU5LCA1MTE3NSwgNTExOTEsIDUxMjA3LCA1MTIyMywgCi0gICAgNTEyMzksIDUxMjU1LCA1MTI3MSwgNTEyODcsIDUxMzAzLCA1MTMxOSwgNTEzMzUsIDUxMzUxLCA1MTM2NywgNTEzODMsIAotICAgIDUxMzk5LCA1MTQxNSwgNTE0MzEsIDUxNDQ3LCA1MTQ2MywgNTE0NzksIDUxNDk1LCA1MTUxMSwgNTE1MjcsIDUxNTQzLCAKLSAgICA1MTU1OSwgNTE1NzUsIDUxNTkxLCA1MTYwNywgNTE2MjMsIDUxNjM5LCA1MTY1NSwgNTE2NzEsIDUxNjg3LCA1MTcwMywgCi0gICAgNTE3MTksIDUxNzM1LCA1MTc1MSwgNTE3NjcsIDUxNzgzLCA1MTc5OSwgNTE4MTUsIDUxODMxLCA1MTg0NywgNTE4NjMsIAotICAgIDUxODc5LCA1MTg5NSwgNTE5MTEsIDUxOTI3LCA1MTk0MywgNTE5NTksIDUxOTc1LCA1MTk5MSwgNTIwMDcsIDUyMDIzLCAKLSAgICA1MjAzOSwgNTIwNTUsIDUyMDcxLCA1MjA4NywgNTIxMDMsIDUyMTE5LCA1MjEzNSwgNTIxNTEsIDUyMTY3LCA1MjE4MywgCi0gICAgNTIxOTksIDUyMjE1LCA1MjIzMSwgNTIyNDcsIDUyMjYzLCA1MjI3OSwgNTIyOTUsIDUyMzExLCA1MjMyNywgNTIzNDMsIAotICAgIDUyMzU5LCA1MjM3NSwgNTIzOTEsIDUyNDA3LCA1MjQyMywgNTI0MzksIDUyNDU1LCA1MjQ3MSwgNTI0ODcsIDUyNTAzLCAKLSAgICA1MjUxOSwgNTI1MzUsIDUyNTUxLCA1MjU2NywgNTI1ODMsIDUyNTk5LCA1MjYxNSwgNTI2MzEsIDUyNjQ3LCA1MjY2MywgCi0gICAgNTI2NzksIDUyNjk1LCA1MjcxMSwgNTI3MjcsIDUyNzQzLCA1Mjc1OSwgNTI3NzUsIDUyNzkxLCA1MjgwNywgNTI4MjMsIAotICAgIDUyODM5LCA1Mjg1NSwgNTI4NzEsIDUyODg3LCA1MjkwMywgNTI5MTksIDUyOTM1LCA1Mjk1MSwgNTI5NjcsIDUyOTgzLCAKLSAgICA1Mjk5OSwgNTMwMTUsIDUzMDMxLCA1MzA0NywgNTMwNjMsIDUzMDc5LCA1MzA5NSwgNTMxMTEsIDUzMTI3LCA1MzE0MywgCi0gICAgNTMxNTksIDUzMTc1LCA1MzE5MSwgNTMyMDcsIDUzMjIzLCA1MzIzOSwgNTMyNTUsIDUzMjcxLCA1MzI4NywgNTMzMDMsIAotICAgIDUzMzE5LCA1MzMzNSwgNTMzNTEsIDUzMzY3LCA1MzM4MywgNTMzOTksIDUzNDE1LCA1MzQzMSwgNTM0NDcsIDUzNDYzLCAKLSAgICA1MzQ3OSwgNTM0OTUsIDUzNTExLCA1MzUyNywgNTM1NDMsIDUzNTU5LCA1MzU3NSwgNTM1OTEsIDUzNjA3LCA1MzYyMywgCi0gICAgNTM2MzksIDUzNjU1LCA1MzY3MSwgNTM2ODcsIDUzNzAzLCA1MzcxOSwgNTM3MzUsIDUzNzUxLCA1Mzc2NywgNTM3ODMsIAotICAgIDUzNzk5LCA1MzgxNSwgNTM4MzEsIDUzODQ3LCA1Mzg2MywgNTM4NzksIDUzODk1LCA1MzkxMSwgNTM5MjcsIDUzOTQzLCAKLSAgICA1Mzk1OSwgNTM5NzUsIDUzOTkxLCA1NDAwNywgNTQwMjMsIDU0MDM5LCA1NDA1NSwgNTQwNzEsIDU0MDg3LCA1NDEwMywgCi0gICAgNTQxMTksIDU0MTM1LCA1NDE1MSwgNTQxNjcsIDU0MTgzLCA1NDE5OSwgNTQyMTUsIDU0MjMxLCA1NDI0NywgNTQyNjMsIAotICAgIDU0Mjc5LCA1NDI5NSwgNTQzMTEsIDU0MzI3LCA1NDM0MywgNTQzNTksIDU0Mzc1LCA1NDM5MSwgNTQ0MDcsIDU0NDIzLCAKLSAgICA1NDQzOSwgNTQ0NTUsIDU0NDcxLCA1NDQ4NywgNTQ1MDMsIDU0NTE5LCA1NDUzNSwgNTQ1NTEsIDU0NTY3LCA1NDU4MywgCi0gICAgNTQ1OTksIDU0NjE1LCA1NDYzMSwgNTQ2NDcsIDU0NjYzLCA1NDY3OSwgNTQ2OTUsIDU0NzExLCA1NDcyNywgNTQ3NDMsIAotICAgIDU0NzU5LCA1NDc3NSwgNTQ3OTEsIDU0ODA3LCA1NDgyMywgNTQ4MzksIDU0ODU1LCA1NDg3MSwgNTQ4ODcsIDU0OTAzLCAKLSAgICA1NDkxOSwgNTQ5MzUsIDU0OTUxLCA1NDk2NywgNTQ5ODMsIDU0OTk5LCA1NTAxNSwgNTUwMzEsIDU1MDQ3LCA1NTA2MywgCi0gICAgNTUwNzksIDU1MDk1LCA1NTExMSwgNTUxMjcsIDU1MTQzLCA1NTE1OSwgNTUxNzUsIDU1MTkxLCA1NTIwNywgNTUyMjMsIAotICAgIDU1MjM5LCA1NTI1NSwgNTUyNzEsIDU1Mjg3LCA1NTMwMywgNTUzMTksIDU1MzM1LCA1NTM1MSwgNTUzNjcsIDU1MzgzLCAKLSAgICA1NTM5OSwgNTU0MTUsIDU1NDMxLCA1NTQ0NywgNTU0NjMsIDU1NDc5LCA1NTQ5NSwgNTU1MTEsIDU1NTI3LCA1NTU0MywgCi0gICAgNTU1NTksIDU1NTc1LCA1NTU5MSwgNTU2MDcsIDU1NjIzLCA1NTYzOSwgNTU2NTUsIDU1NjcxLCA1NTY4NywgNTU3MDMsIAotICAgIDU1NzE5LCA1NTczNSwgNTU3NTEsIDU1NzY3LCA1NTc4MywgNTU3OTksIDU1ODE1LCA1NTgzMSwgNTU4NDcsIDU1ODYzLCAKLSAgICA1NTg3OSwgNTU4OTUsIDU1OTExLCA1NTkyNywgNTU5NDMsIDU1OTU5LCA1NTk3NSwgNTU5OTEsIDU2MDA3LCA1NjAyMywgCi0gICAgNTYwMzksIDU2MDU1LCA1NjA3MSwgNTYwODcsIDU2MTAzLCA1NjExOSwgNTYxMzUsIDU2MTUxLCA1NjE2NywgNTYxODMsIAotICAgIDU2MTk5LCA1NjIxNSwgNTYyMzEsIDU2MjQ3LCA1NjI2MywgNTYyNzksIDU2Mjk1LCA1NjMxMSwgNTYzMjcsIDU2MzQzLCAKLSAgICA1NjM1OSwgNTYzNzUsIDU2MzkxLCA1NjQwNywgNTY0MjMsIDU2NDM5LCA1NjQ1NSwgNTY0NzEsIDU2NDg3LCA1NjUwMywgCi0gICAgNTY1MTksIDU2NTM1LCA1NjU1MSwgNTY1NjcsIDU2NTgzLCA1NjU5OSwgNTY2MTUsIDU2NjMxLCA1NjY0NywgNTY2NjMsIAotICAgIDU2Njc5LCA1NjY5NSwgNTY3MTEsIDU2NzI3LCA1Njc0MywgNTY3NTksIDU2Nzc1LCA1Njc5MSwgNTY4MDcsIDU2ODIzLCAKLSAgICA1NjgzOSwgNTY4NTUsIDU2ODcxLCA1Njg4NywgNTY5MDMsIDU2OTE5LCA1NjkzNSwgNTY5NTEsIDU2OTY3LCA1Njk4MywgCi0gICAgNTY5OTksIDU3MDE1LCA1NzAzMSwgNTcwNDcsIDU3MDYzLCA1NzA3OSwgNTcwOTUsIDU3MTExLCA1NzEyNywgNTcxNDMsIAotICAgIDU3MTU5LCA1NzE3NSwgNTcxOTEsIDU3MjA3LCA1NzIyMywgNTcyMzksIDU3MjU1LCA1NzI3MSwgNTcyODcsIDU3MzAzLCAKLSAgICA1NzMxOSwgNTczMzUsIDU3MzUxLCA1NzM2NywgNTczODMsIDU3Mzk5LCA1NzQxNSwgNTc0MzEsIDU3NDQ3LCA1NzQ2MywgCi0gICAgNTc0NzksIDU3NDk1LCA1NzUxMSwgNTc1MjcsIDU3NTQzLCA1NzU1OSwgNTc1NzUsIDU3NTkxLCA1NzYwNywgNTc2MjMsIAotICAgIDU3NjM5LCA1NzY1NSwgNTc2NzEsIDU3Njg3LCA1NzcwMywgNTc3MTksIDU3NzM1LCA1Nzc1MSwgNTc3NjcsIDU3NzgzLCAKLSAgICA1Nzc5OSwgNTc4MTUsIDU3ODMxLCA1Nzg0NywgNTc4NjMsIDU3ODc5LCA1Nzg5NSwgNTc5MTEsIDU3OTI3LCA1Nzk0MywgCi0gICAgNTc5NTksIDU3OTc1LCA1Nzk5MSwgNTgwMDcsIDU4MDIzLCA1ODAzOSwgNTgwNTUsIDU4MDcxLCA1ODA4NywgNTgxMDMsIAotICAgIDU4MTE5LCA1ODEzNSwgNTgxNTEsIDU4MTY3LCA1ODE4MiwgMTY3NDksIDU4MTkxLCA1ODE5NywgNTgyMDMsIDU4MjEzLCAKLSAgICA1ODIyMSwgMTQ4ODEsIDE1NDMyLCA5OTUzLCA1ODIzNCwgMTUyMCwgNTgyNDIsIDM3NjEsIDI3NDE1LCA3MTgzLCA1ODI0OCwgCi0gICAgNTgyNTMsIDU4MjU4LCA1ODI2MywgNTgyNjgsIDU4Mjc0LCA1ODI3OSwgNTgyODUsIDU4MjkwLCA1ODI5NiwgNTgzMDEsIAotICAgIDU4MzA2LCA1ODMxMSwgNTgzMTYsIDU4MzIyLCA1ODMyNywgNTgzMzIsIDU4MzM3LCA1ODM0MiwgNTgzNDcsIDU4MzUyLCAKLSAgICA1ODM1NywgNTgzNjMsIDU4MzY4LCA1ODM3NCwgNTgzODEsIDI1NjEsIDU4Mzg2LCA1ODM5MiwgODUyNiwgNTgzOTYsIAotICAgIDU4NDAxLCA1ODQwOCwgNTg0MTYsIDQwLCA1ODQyMCwgNTg0MjYsIDU4NDMxLCA1ODQzNiwgNTg0NDAsIDU4NDQ1LCA1ODQ0OSwgCi0gICAgNTg0NTMsIDEwNjc3LCA1ODQ1NywgNTg0NjcsIDU4NDgwLCA1ODQ5MSwgNTg1MDQsIDU4NTExLCA1ODUxNywgNTg1MjIsIAotICAgIDU4NTI4LCA1ODUzNCwgNTg1NDAsIDU4NTQ1LCA1ODU1MCwgNTg1NTUsIDU4NTYwLCA1ODU2NCwgNTg1NjksIDU4NTc0LCAKLSAgICA1ODU3OSwgNTg1ODUsIDU4NTkxLCA1ODU5NywgNTg2MDIsIDU4NjA2LCA1ODYxMSwgNTg2MTYsIDU4NjIwLCA1ODYyNSwgCi0gICAgNTg2MzAsIDU4NjM1LCA1ODYzOSwgMTA2OTMsIDEwNzA0LCAxMDcwOSwgMTU2MywgNTg2NDMsIDE1NjgsIDU4NjQ5LCAKLSAgICAxNjIyNiwgNTg2NTIsIDU4NjU4LCAxNTk5LCA1ODY2NCwgMTYwNSwgMTYxMSwgMTA3MzksIDU4NjY5LCA1ODY3NywgNTg2ODQsIAotICAgIDU4Njg4LCA1ODY5NCwgNTg2OTksIDMwOTUyLCA1ODcwNCwgNTg3MTEsIDU4NzE2LCA1ODcyMCwgNTg3MjQsIDE2MTYsIAotICAgIDE2MzE4LCA1ODczMywgNTg3MzcsIDE2MzI5LCAxMTIwLCA1ODc0MSwgNTg3NDgsIDU4NzUzLCA1ODc1NywgMTYzNTQsIAotICAgIDE2MjAsIDM3MzIxLCA1ODc2MCwgNTg3NjUsIDU4Nzc1LCA1ODc4NCwgNTg3ODksIDU4NzkzLCA1ODc5OSwgMTYyNSwgCi0gICAgMzkyMzAsIDU4ODA0LCA1ODgxMywgNTg4MTksIDU4ODI0LCAxMDg5NywgMTA5MDMsIDU4ODMwLCA1ODg0MiwgNTg4NTksIAotICAgIDU4ODc2LCA1ODg5MywgNTg5MTAsIDU4OTI3LCA1ODk0NCwgNTg5NjEsIDU4OTc4LCA1ODk5NSwgNTkwMTIsIDU5MDI5LCAKLSAgICA1OTA0NiwgNTkwNjMsIDU5MDgwLCA1OTA5NywgNTkxMTQsIDU5MTMxLCA1OTE0OCwgNTkxNjUsIDU5MTgyLCA1OTE5OSwgCi0gICAgNTkyMTYsIDU5MjMzLCA1OTI1MCwgNTkyNjcsIDU5Mjg0LCA1OTMwMSwgNTkzMTgsIDU5MzM1LCA1OTM1MiwgNTkzNjksIAotICAgIDU5Mzg2LCA1OTQwMywgNTk0MjAsIDU5NDM3LCA1OTQ1NCwgNTk0NzEsIDU5NDg4LCA1OTUwNSwgNTk1MjIsIDU5NTM5LCAKLSAgICA1OTU1NiwgNTk1NzMsIDU5NTkwLCA1OTYwNywgNTk2MjQsIDU5NjQxLCA1OTY1OCwgNTk2NzUsIDU5Njg2LCA1OTY5MSwgCi0gICAgMTYzMCwgNTk2OTUsIDU5NzAxLCA1OTcwNiwgNTk3MTEsIDkzMTksIDE2MzUsIDU5NzE3LCA1OTcyNiwgMjc3MTAsIDU5NzMxLCAKLSAgICA1OTc0MiwgNTk3NTIsIDU5NzU3LCA1OTc2NCwgNTk3NzAsIDU5Nzc1LCA1OTc4MCwgMTY2MDYsIDU5Nzg0LCAxMDkxNCwgCi0gICAgMTY0MCwgMTA5MTksIDU5NzkwLCA1OTc5NSwgNTk4MDEsIDU5ODA2LCA1OTgxMSwgNTk4MTYsIDU5ODIxLCA1OTgyNiwgCi0gICAgNTk4MzEsIDU5ODM2LCA1OTg0MiwgNTk4NDgsIDU5ODU0LCA1OTg1OSwgNTk4NjMsIDU5ODY4LCA1OTg3MywgNTk4NzcsIAotICAgIDU5ODgyLCA1OTg4NywgNTk4OTIsIDU5ODk2LCA1OTkwMSwgNTk5MDcsIDU5OTEyLCA1OTkxNywgNTk5MjEsIDU5OTI2LCAKLSAgICA1OTkzMSwgNTk5MzcsIDU5OTQyLCA1OTk0NywgNTk5NTMsIDU5OTU5LCA1OTk2NCwgNTk5NjgsIDU5OTczLCA1OTk3OCwgCi0gICAgNTk5ODMsIDU5OTg3LCA1OTk5MiwgNTk5OTcsIDYwMDAyLCA2MDAwOCwgNjAwMTQsIDYwMDE5LCA2MDAyMywgNjAwMjcsIAotICAgIDYwMDMyLCA2MDAzNywgNjAwNDIsIDI5MTA4LCA2MDA0NiwgNjAwNTEsIDYwMDU2LCA2MDA2MiwgNjAwNjcsIDYwMDcyLCAKLSAgICA2MDA3NiwgNjAwODEsIDYwMDg2LCA2MDA5MiwgNjAwOTcsIDYwMTAyLCA2MDEwOCwgNjAxMTQsIDYwMTE5LCA2MDEyMywgCi0gICAgNjAxMjgsIDYwMTMzLCA2MDEzNywgNjAxNDIsIDYwMTQ3LCA2MDE1MiwgNjAxNTgsIDYwMTY0LCA2MDE2OSwgNjAxNzMsIAotICAgIDYwMTc4LCA2MDE4MywgNjAxODcsIDYwMTkyLCA2MDE5NywgNjAyMDIsIDYwMjA2LCA2MDIwOSwgMzE2MTQsIDYwMjE0LCAKLSAgICA2MDIyMiwgMTY2NzIsIDM2NjMsIDExMDEwLCA2MDIyOCwgNjAyMzgsIDYwMjUzLCAxMTAxNSwgNjAyNjQsIDYwMjY5LCAKLSAgICA2MDI4MCwgNjAyOTIsIDYwMzA0LCA2MDMxNiwgMjY5NSwgNjAzMjgsIDYwMzMzLCA2MDM0NSwgNjAzNDksIDYwMzU1LCAKLSAgICA2MDM2MSwgNjAzNjYsIDE2NTIsIDEwNjcsIDYwMzc1LCA2MDM4MCwgMzkyODAsIDYwMzg0LCA2MDM4OCwgNjAzOTMsIAotICAgIDYwMzk3LCAxNjc1NywgNjA0MDIsIDYwNDA1LCA2MDQxMywgNjA0MjEsIDE2NTYsIDExMDQwLCAxMTA0NiwgMTY2MSwgCi0gICAgNjA0MjksIDYwNDM2LCA2MDQ0MSwgNjA0NTAsIDYwNDYwLCA2MDQ2NywgNjA0NzIsIDYwNDc3LCAxNjY2LCA2MDQ4NCwgCi0gICAgNjA0ODksIDE2ODcyLCA2MDQ5MywgNjA0OTgsIDYwNTA1LCA2MDUxMSwgNjA1MTUsIDYwNTI2LCA2MDUzNiwgMTY4OTQsIAotICAgIDkyMjcsIDkyMzQsIDE2NzEsIDYwNTQzLCA2MDU0OSwgNjA1NTcsIDYwNTY0LCA2MDU3MCwgNjA1NzcsIDYwNTg5LCA2MDU5NSwgCi0gICAgNjA2MDAsIDYwNjEyLCA2MDYyMywgNjA2MzIsIDYwNjQyLCAzNzQwLCAzMDc4OCwgMzA3OTcsIDE2OTM0LCAxNjc2LCAxNjgwLCAKLSAgICA2MDY1MCwgNjA2NjEsIDYwNjY2LCAxNjgzLCA2MDY3NCwgNjA2NzksIDE2OTg1LCA2MDY5MSwgNjA2OTcsIDYwNzAyLCAKLSAgICA2MDcxMCwgMTY4OCwgNjA3MTUsIDYwNzIwLCA2MDcyOCwgNjA3MzYsIDYwNzQzLCA2MDc1MiwgNjA3NjAsIDYwNzY5LCAKLSAgICAxNjkzLCA2MDc3MywgMTY5OCwgNjA3NzgsIDYwNzg1LCAxNzA1OSwgNjA3OTMsIDYwNzk5LCA2MDgwNCwgNjA4MTIsIAotICAgIDYwODE5LCA2MDgyNywgMjI1NTcsIDYwODMyLCAxMTE3NSwgNjA4NDEsIDYwODQ3LCA2MDg1NCwgNjA4NjEsIDYwODY3LCAKLSAgICA2MDg3NywgNjA4ODMsIDYwODg4LCA2MDg5OSwgNjA5MDQsIDYwOTEyLCAxMTE4NCwgMTExODksIDYwOTIwLCA2MDkyNiwgCi0gICAgNjA5MzQsIDM4MDUsIDE3MTAxLCAzOTM2OCwgNjA5MzksIDYwOTQ1LCA2MDk1MCwgNjA5NTgsIDYwOTY1LCAxMjAyOSwgCi0gICAgNjA5NzAsIDYwOTc2LCAxNzA5LCA2MDk4MSwgNjA5ODQsIDExMjcsIDYwOTkwLCA2MDk5NSwgNjEwMDAsIDYxMDA2LCAKLSAgICA2MTAxMSwgNjEwMTYsIDYxMDIxLCA2MTAyNiwgNjEwMzEsIDYxMDM2LCAxNzE4LCA5LCA2MTA0MiwgNjEwNDYsIDYxMDUxLCAKLSAgICA2MTA1NSwgNjEwNTksIDYxMDYzLCAzMTg1NCwgNjEwNjgsIDYxMDczLCA2MTA3OCwgNjEwODIsIDYxMDg1LCA2MTA4OSwgCi0gICAgNjEwOTMsIDYxMDk4LCA2MTEwMiwgNjExMDcsIDYxMTExLCAzNDU5MSwgMzQ1OTYsIDM0NjAxLCA2MTExNCwgNjExMjEsIAotICAgIDYxMTI3LCAzOTA4OSwgNjExMzcsIDM0NjA3LCAzMjExMiwgMzE4NjksIDMxODc1LCAzNDYyMywgMzE4ODEsIDYxMTQyLCAKLSAgICA2MTE0NywgMzIxNDUsIDYxMTUxLCA2MTE1NCwgNjExNTgsIDYxMTY1LCA2MTE2OCwgNjExNzMsIDYxMTc3LCA2MTE4MSwgCi0gICAgNjExODQsIDYxMTk0LCA2MTIwNiwgNjEyMTMsIDYxMjE5LCA2MTIyNiwgMzM1NDgsIDYxMjI5LCA4NTQzLCA4NzcsIDYxMjMyLCAKLSAgICA2MTIzNiwgNjEyNDEsIDM2OTAsIDYxMjQ1LCA2MTI0OCwgMTM2MjUsIDYxMjU1LCA2MTI2MiwgNjEyNzUsIDYxMjgzLCAKLSAgICA2MTI5MiwgNjEzMDEsIDYxMzA2LCA2MTMxNiwgNjEzMjksIDYxMzQxLCA2MTM0OCwgNjEzNTMsIDYxMzYyLCA2MTM3NSwgCi0gICAgMzYwMzUsIDYxMzkzLCA2MTM5OCwgNjE0MDUsIDYxNDExLCA2NTIsIDYxNDE2LCA2MTQyNCwgNjE0MzEsIDI3MjU0LCA2MjcsIAotICAgIDYxNDM3LCA2MTQ0MywgNjE0NTMsIDYxNDU5LCA2MTQ2NCwgMzE4OTksIDYwMDMsIDMxOTEzLCA2MTQ2OCwgNjE0NzgsIAotICAgIDYxNDgzLCA2MTQ5MywgNjE1MDgsIDYxNTE0LCA2MTUyMCwgMzE5MjMsIDYxNTI1LCAzMTA2OSwgNjE1MjksIDYxNTM0LCAKLSAgICA2MTUzOSwgNjE1NDMsIDYxNTQ4LCAxNjkzNywgNjE1NTUsIDYxNTYwLCA2MTU2NCwgNjA0NCwgMzE5NDksIDYxNTY4LCAKLSAgICA2MTU3NCwgMzEyLCA2MTU4NCwgNjE1OTEsIDYxNTk4LCA2MTYwMywgNjE2MTIsIDU4NzY5LCA2MTYxOCwgNjE2MjYsIAotICAgIDYxNjMwLCA2MTYzNCwgNjE2MzgsIDYxNjQyLCA2MTY0NywgNjE2NTEsIDYxNjU3LCA2MTY2NSwgNjE2NzAsIDYxNjc1LCAKLSAgICA2MTY3OSwgNjE2ODQsIDYxNjg4LCA2MTY5MiwgNjE2OTgsIDYxNzA0LCA2MTcwOSwgNjE3MTMsIDMyMDczLCA2MTcxOCwgCi0gICAgMzIwNzksIDMyMDg1LCA2MTcyMywgNjE3MjksIDYxNzM2LCA2MTc0MSwgNjE3NDUsIDMxMDg2LCAxNjU5OSwgNjE3NDgsIAotICAgIDYxNzUyLCA2MTc1NywgNjE3NjQsIDYxNzcwLCA2MTc3NCwgNjE3NzksIDM4Nzk5LCA2MTc4NSwgNjE3ODksIDYxNzkzLCAKLSAgICA2MTc5OCwgNjE4MDQsIDYxODEwLCA2MTgyMiwgNjE4MzEsIDYxODQxLCA2MTg0NywgNjE4NTQsIDYxODU5LCA2MTg2NCwgCi0gICAgNjE4NjgsIDYxODcxLCA2MTg3NywgNjE4ODQsIDYxODg5LCA2MTg5NCwgNjE5MDEsIDYxOTA4LCA2MTkxNCwgNjE5MTksIAotICAgIDYxOTI0LCA2MTkzMiwgMzIwOTAsIDI0MjMsIDYxOTM3LCA2MTk0MiwgNjE5NDgsIDYxOTUzLCA2MTk1OSwgNjE5NjQsIAotICAgIDYxOTY5LCA2MTk3NCwgNjE5ODAsIDMyMTExLCA2MTk4NSwgNjE5OTEsIDYxOTk3LCA2MjAwMywgMzIxNzUsIDYyMDA4LCAKLSAgICA2MjAxMywgNjIwMTgsIDMyMTg2LCA2MjAyMywgNjIwMjgsIDYyMDMzLCA2MjAzOSwgNjIwNDUsIDMyMTkxLCA2MjA1MCwgCi0gICAgNjIwNTUsIDYyMDYwLCAzMjI0NiwgMzIyNTIsIDYyMDY1LCA2MjA3MCwgMzIyNTcsIDYyMDc1LCAyNzkzNywgMzIyNzksIAotICAgIDMyMjgzLCA2MjA4MCwgNjIwNTYsIDYyMDg0LCA2MjA5MiwgNjIwOTgsIDYyMTA2LCA2MjExMywgNjIxMTksIDYyMTI5LCAKLSAgICA2MjEzNSwgNjIxNDIsIDEwNjI0LCAzMjI5NywgNjIxNDgsIDYyMTYxLCA2MjE3MCwgNjIxNzYsIDYyMTg1LCA2MjE5MSwgCi0gICAgMjM0OTUsIDYyMTk4LCA2MjIwNSwgNjIyMTUsIDMyMjQ3LCA2MjIxOCwgNjIyMjUsIDYyMjMwLCA2MjIzNCwgNjIyMzgsIAotICAgIDYyMjQzLCA2MTIwLCA2MjI0NywgNjIyNTIsIDYyMjU3LCAzNDY4NSwgMzQ2OTAsIDYyMjYxLCAzNDcwNCwgNjIyNjYsIAotICAgIDM0NzA5LCA2MjI3MSwgNjIyNzcsIDM0NzIxLCAzNDcyNywgMzQ3MzMsIDYyMjgyLCA2MjI4OCwgMjI1MjIsIDYyMjk5LCAKLSAgICA2MjMwMiwgNjIzMTQsIDYyMzIyLCAzMjMyMCwgNjIzMjYsIDYyMzM1LCA2MjM0NSwgNjIzNTQsIDMyMzMwLCA2MjM1OSwgCi0gICAgNjIzNjYsIDYyMzc1LCA2MjM4MSwgNjIzODksIDYyMzk2LCA2MDk1LCA0Mzk3LCA2MjQwMSwgMzIyNTgsIDYyNDA3LCAKLSAgICA2MjQxMCwgNjI0MTYsIDYyNDIzLCA2MjQyOCwgNjI0MzMsIDIzNDA1LCA2MjQzNywgNjI0NDMsIDYyNDQ5LCA2MjQ1NCwgCi0gICAgNjI0NTksIDYyNDYzLCA2MjQ2OSwgNjI0NzUsIDMzNDU4LCA4NjMsIDM1Njk4LCAzNjYxOSwgMzY2MjUsIDMyMzY2LCAKLSAgICA2MjQ4MCwgNjI0ODQsIDYyNDg4LCA2MjQ5MSwgNjI1MDQsIDYyNTEwLCA2MjUxNCwgNjI1MTcsIDYyNTIyLCAzMzc2MSwgCi0gICAgNjI1MjYsIDMxMDkxLCAyMTI3NCwgNjI1MzIsIDYwMjQsIDYwMzIsIDkwNjgsIDYyNTM1LCA2MjU0MCwgNjI1NDUsIDYyNTUwLCAKLSAgICA2MjU1NSwgNjI1NjAsIDYyNTY1LCA2MjU3MCwgNjI1NzUsIDYyNTgwLCA2MjU4NiwgNjI1OTEsIDYyNTk2LCA2MjYwMiwgCi0gICAgNjI2MDcsIDYyNjEyLCA2MjYxNywgNjI2MjIsIDYyNjI3LCA2MjYzMiwgNjI2MzgsIDYyNjQzLCA2MjY0OSwgNjI2NTQsIAotICAgIDYyNjU5LCA2MjY2NCwgNjI2NjksIDYyNjc0LCA2MjY3OSwgNjI2ODQsIDYyNjg5LCA2MjY5NCwgNjI2OTksIDYyNzA1LCAKLSAgICA2MjcxMCwgNjI3MTUsIDYyNzIwLCA2MjcyNSwgNjI3MzAsIDYyNzM1LCA2Mjc0MSwgNjI3NDYsIDYyNzUxLCA2Mjc1NiwgCi0gICAgNjI3NjEsIDYyNzY2LCA2Mjc3MSwgNjI3NzYsIDYyNzgxLCA2Mjc4NiwgNjI3OTIsIDYyNzk3LCA2MjgwMiwgNjI4MDcsIAotICAgIDYyODEyLCA2MjgxOCwgNjI4MjQsIDYyODI5LCA2MjgzNSwgNjI4NDAsIDYyODQ1LCA2Mjg1MCwgNjI4NTUsIDYyODYwLCAKLSAgICAxNTEzLCAyNDUsIDYyODY1LCA2Mjg2OSwgNjI4NzMsIDYyODc3LCAyNTExNiwgNjI4ODEsIDYyODg1LCA2Mjg5MCwgNjI4OTQsIAotICAgIDYyODk5LCA2MjkwMywgNjI5MDgsIDYyOTEzLCA2MjkxOCwgNjI5MjIsIDYyOTI2LCA2MjkzMSwgNjI5MzUsIDEzMzYyLCAKLSAgICA2Mjk0MCwgNjI5NDQsIDYyOTUxLCA2Mjk2MSwgMTUxOTMsIDYyOTcwLCA2Mjk3OSwgNjI5ODMsIDYyOTg4LCA2Mjk5MywgCi0gICAgNjI5OTcsIDI0OTA3LCAzMDE5LCA2MzAwMSwgMTczNTAsIDYzMDA3LCA2MzAxNiwgNjMwMjQsIDYzMDMwLCA2MzA0MiwgCi0gICAgNjMwNTQsIDYzMDU4LCA2MzA2MywgNjMwNjcsIDYzMDczLCA2MzA3OSwgNjMwODQsIDYzMDk0LCA2MzEwNCwgNjMxMTAsIAotICAgIDYzMTE1LCA2MzExOSwgNjMxMjQsIDYzMTMwLCA2MzEzOSwgNjMxNDgsIDYzMTU2LCAxNTU0NywgNjMxNjAsIDYzMTY5LCAKLSAgICA2MzE3NywgNjMxODksIDYzMjAwLCA2MzIxMSwgNjMyMjAsIDYzMjI0LCA2MzIzMywgNjMyNDMsIDYzMjUxLCA2MzI1NywgCi0gICAgNjMyNjIsIDYzMjY4LCA2MzI3MywgOTgsIDMwOTAwLCA2MzI4NCwgMjYyNDksIDI2MjU5LCA2MzI5MCwgNjMyOTcsIDYzMzAzLCAKLSAgICA2MzMwNywgNjMzMTcsIDYzMzI4LCA2MzMzNiwgNjMzNDUsIDYzMzUwLCA2MzM1NSwgNjMzNTksIDE3MzA0LCA2MzM2NywgCi0gICAgNjMzNzEsIDYzMzc3LCA2MzM4NywgNjMzOTQsIDYzNDAwLCAzNDc4NCwgNjM0MDYsIDYzNDA4LCA2MzQxMSwgNjM0MTUsIAotICAgIDYzNDI1LCA2MzQzMSwgNjM0MzgsIDEzMzA4LCA2MzQ0NSwgNjM0NTEsIDYzNDYwLCA2MzQ2OSwgNjM0NzUsIDYzNDgxLCAKLSAgICA2MzQ4NywgNjM0OTIsIDYzNDk5LCA2MzUwNiwgNjM1MTIsIDYzNTI1LCA2MzUzNCwgNjM1NDMsIDYzNTQ4LCA2MzU1MiwgCi0gICAgNjM1NTgsIDYzNTY1LCA2MzU3MiwgNjM1NzksIDYzNTg2LCA2MzU5MywgNjM1OTgsIDYzNjAyLCA2MzYwNiwgNjM2MDksIAotICAgIDYzNjE5LCA2MzYyMywgNjM2MzUsIDYzNjQ0LCA2MzY0OCwgNjM2NTMsIDYzNjU3LCA2MzY2MywgNjM2NjgsIDYzNjc1LCAKLSAgICA2MzY4NCwgNjM2OTIsIDYzNzAwLCA2MzcwNSwgNjM3MDksIDYzNzE0LCA2MzcxOSwgNjM3MjksIDYzNzM3LCA2Mzc0MiwgCi0gICAgNjM3NDYsIDYzNzUwLCA2Mzc1NiwgNjM3NjgsIDYzNzc2LCA2Mzc4NiwgNjM3OTMsIDYzNzk5LCA2MzgwNCwgNjM4MDgsIAotICAgIDYzODEyLCA2MzgxNiwgNjM4MjUsIDYzODM0LCA2Mzg0MywgNjM4NDksIDYzODU1LCA2Mzg2MSwgNjM4NjYsIDYzODczLCAKLSAgICA2Mzg3OSwgNjM4ODcsIDYzODk0LCAxMjQ1NiwgNjM5MDAsIDYzOTA2LCA2MzkxMCwgMTQyMzEsIDYzOTE0LCA2MzkxOSwgCi0gICAgNjM5MjksIDYzOTM4LCA2Mzk0NCwgNjM5NTAsIDYzOTU4LCA2Mzk2NSwgNjM5NjksIDYzOTczLCA2Mzk3OSwgNjM5ODcsIAotICAgIDYzOTk0LCA2NDAwMCwgNjQwMTEsIDY0MDE1LCA2NDAxOSwgNjQwMjMsIDY0MDI2LCA2NDAzMiwgNjQwMzcsIDY0MDQxLCAKLSAgICA2NDA0NSwgNjQwNTQsIDY0MDYyLCA2NDA2OSwgNjQwNzUsIDY0MDgyLCAyNDAyOSwgMzg4NDEsIDY0MDg3LCA2NDA5NSwgCi0gICAgNjQwOTksIDY0MTAzLCA2NDEwNiwgNjQxMTQsIDY0MTIxLCA2NDEyNywgNjQxMzYsIDY0MTQ0LCA2NDE1MCwgNjQxNTUsIAotICAgIDY0MTU5LCA2NDE2NCwgNjQxNjgsIDY0MTcyLCA2NDE3NywgNjQxODYsIDY0MTkwLCA2NDE5NywgNjQyMDQsIDY0MjEwLCAKLSAgICA2NDIxOCwgNjQyMjQsIDY0MjM1LCA2NDI0MywgNjQyNDksIDIyNjUyLCA2NDI1OCwgNjQyNjUsIDY0MjcyLCA2NDI3OSwgCi0gICAgNjQyODYsIDY0MjkzLCA0MTg3MCwgMTMxNDYsIDY0MzAwLCA2NDMwNywgNjQzMTIsIDM0ODIwLCA2MjE3LCA2NDMxOCwgCi0gICAgNjQzMjMsIDY0MzI4LCA2NDMzNCwgNjQzNDAsIDY0MzQ2LCA2NDM1MSwgNjQzNTYsIDY0MzYxLCA2NDM2NiwgNjQzNzIsIAotICAgIDY0Mzc3LCA2NDM4MywgNjQzODgsIDY0Mzk0LCA2NDM5OSwgNjQ0MDQsIDY0NDA5LCA2NDQxNCwgNjQ0MTksIDY0NDI0LCAKLSAgICA2NDQyOSwgNjQ0MzUsIDY0NDQwLCA2NDQ0NiwgNjQ0NTEsIDY0NDU2LCA2NDQ2MSwgNjQ0NjYsIDY0NDcxLCA2NDQ3NiwgCi0gICAgNjQ0ODIsIDY0NDg3LCA2NDQ5MiwgNjQ0OTcsIDY0NTAyLCA2NDUwNywgNjQ1MTIsIDY0NTE3LCA2NDUyMiwgNjQ1MjcsIAotICAgIDY0NTMyLCA2NDUzOCwgNjQ1NDMsIDY0NTQ4LCA2NDU1MywgNjQ1NTgsIDY0NTYzLCA2NDU2OCwgNjQ1NzMsIDY0NTc4LCAKLSAgICA2NDU4NCwgNjQ1ODksIDY0NTk0LCA2NDU5OSwgNjQ2MDQsIDY0NjA5LCA2NDYxNCwgNjQ2MTksIDY0NjI0LCA2NDYyOSwgCi0gICAgNjQ2MzQsIDY0NjM5LCA2NDY0NCwgNjQ2NTAsIDE4MzQsIDIyNCwgMzc0MTcsIDY0NjU1LCA2NDY1OCwgNjQ2NjMsIDY0NjY3LCAKLSAgICA2NDY3MCwgNjQ2NzUsIDYzNjk2LCA2NDY4NiwgNjQ2OTYsIDY0NzAzLCA2NDcxOSwgNjQ3MjgsIDY0NzM4LCA2NDc0OCwgCi0gICAgNjQ3NTYsIDY0NzcwLCA2NDc3OCwgNjQ3ODIsIDY0Nzg1LCA2NDc5MiwgNjQ3OTgsIDY0ODA5LCA2NDgyMSwgNjQ4MzIsIAotICAgIDY0ODQxLCA2NDg0OCwgMTI5NywgMjMyOTQsIDY0ODU4LCAyNTkwLCA2NDg2MiwgNjQ4NzEsIDExMzMsIDE3Mjc3LCAzODA1NCwgCi0gICAgNjQ4NzksIDY0ODg3LCA2NDkwMSwgNjQ5MTQsIDY0OTE4LCA2NDkyMywgNjQ5MjgsIDY0OTMzLCA2NDkzOSwgNjQ5NDUsIAotICAgIDY0OTUwLCA4NTM1LCA2NDk1NSwgNjQ5NTksIDY0OTY3LCAxMTA0MSwgNjQ5NzIsIDY0OTc4LCA2NDk4NywgMTcyMSwgCi0gICAgMTEwNTMsIDczNiwgNjQ5OTEsIDY1MDAwLCA2NTAxMCwgMjcwMTMsIDY1MDE5LCA2NTAyNSwgMTY4NDksIDY1MDMxLCAKLSAgICA2NTAzNSwgMzk2NCwgMTEzODQsIDY1MDQxLCA2NTA0OCwgNjA2NTYsIDY1MDUyLCA2NTA1NiwgMzk4OCwgMTg5LCAxNDE0NiwgCi0gICAgNjUwNjIsIDY1MDc0LCA2NTA3OCwgNjUwODQsIDI3NzMwLCA2NTA4OCwgMTEzNzIsIDI3MzAsIDQsIDY1MDkzLCA2NTEwMywgCi0gICAgNjUxMDksIDY1MTIwLCA2NTEyNywgNjUxMzMsIDY1MTM5LCA2NTE0NywgNjUxNTQsIDY1MTYwLCA2NTE3MCwgNjUxODAsIAotICAgIDY1MTkwLCAyMzQ4MiwgMTMwOSwgNjUxOTksIDY1MjAzLCA2NTIwNywgNjUyMTMsIDY1MjE3LCAyNzUzLCAyNzU5LCA4NTMyLCAKLSAgICAyMjY0LCA2NTIyMSwgNjUyMjUsIDY1MjM0LCA2NTI0MiwgNjUyNTMsIDY1MjYxLCA2NTI2OSwgNjUyNzUsIDY1MjgwLCAKLSAgICA2NTI5MSwgNjUzMDIsIDY1MzEwLCA2NTMxNiwgOTY4NywgNjUzMjEsIDY1MzI5LCA2NTMzMywgNjUzMzcsIDY1MzQxLCAKLSAgICA2NTM1MywgMjgxMTUsIDY1MzYwLCA2NTM3MCwgNjUzNzYsIDY1MzgyLCA5Nzg5LCA2NTM5MiwgNjU0MDMsIDY1NDEzLCAKLSAgICA2NTQyMiwgNjU0MjYsIDY1NDMzLCAxMTM1LCAxMTcwLCA2NTQ0MywgNjU0NDgsIDY1NDU2LCA2NTQ2NCwgNjU0NzUsIAotICAgIDY1NDgyLCA2NTQ5NiwgMTQwNzUsIDM5MywgNjU1MDYsIDY1NTEwLCA2NTUxOCwgNjU1MjcsIDY1NTM1LCA2NTU0MSwgCi0gICAgNjU1NTUsIDY1NTYyLCA2NTU2OCwgNjU1NzcsIDY1NTg0LCA2NTU5NCwgNjU2MDIsIDM4MTIsIDE1NiwgNjU2MTAsIDY1NjIxLCAKLSAgICA2NTYyNSwgNjU2MzcsIDI3OTI4LCAxNjEsIDY1NjQzLCA2NTY0OCwgNjU2NTIsIDY1NjU5LCA2NTY2NSwgNjU2NzMsIAotICAgIDY1NjgwLCA4ODE4LCA2NTY4NywgNjU2OTYsIDY1NzA0LCAzODc4LCA2NTcxNywgODE5OSwgNjU3MjEsIDI3OTgsIDQ1MCwgCi0gICAgNjU3MjYsIDY1NzM5LCA2NTc0NCwgMTgzMywgNjY4LCA2NTc0OCwgMzg5NSwgNjU3NTYsIDY1NzYyLCA2NTc2NiwgOTMxLCAKLSAgICA2NTc3NiwgNjU3ODUsIDY1NzkwLCAxNDkxNSwgMTQ5MjIsIDQ1MjMyLCA2NTc5NCwgMzgyMiwgMTMwMzQsIDY1ODAyLCAKLSAgICA2NTgwOSwgMjM1MzgsIDY1ODEzLCA2NTgyMCwgNjU4MjYsIDY1ODMxLCA2NTgzNiwgMTQ5MzUsIDM3MiwgNjU4NDEsIAotICAgIDY1ODUzLCA2NTg1OSwgNjU4NjcsIDI4MTAsIDE3NTMsIDY1ODc1LCA2NTg3NywgNjU4ODIsIDY1ODg3LCA2NTg5MiwgCi0gICAgNjU4OTgsIDY1OTAzLCA2NTkwOCwgNjU5MTMsIDY1OTE4LCA2NTkyMywgNjU5MjgsIDY1OTM0LCA2NTkzOSwgNjU5NDQsIAotICAgIDY1OTQ5LCA2NTk1NCwgNjU5NTksIDY1OTY0LCA2NTk2OSwgNjU5NzQsIDY1OTgwLCA2NTk4NSwgNjU5OTAsIDY1OTk1LCAKLSAgICA2NjAwMSwgNjYwMDYsIDY2MDEyLCA2NjAxNywgNjYwMjIsIDY2MDI3LCA2NjAzMiwgNjYwMzcsIDY2MDQyLCA2NjA0NywgCi0gICAgNjYwNTMsIDY2MDU4LCA2NjA2NCwgNjYwNjksIDY2MDc0LCA2NjA3OSwgNjYwODQsIDY2MDg5LCA2NjA5NCwgNjYwOTksIAotICAgIDY2MTA0LCA2NjExMCwgNjYxMTUsIDY2MTIwLCA2NjEyNSwgNjYxMjksIDY2MTMzLCA2NjEzOCwgNjYxNDIsIDY2MTQ3LCAKLSAgICA2NjE1MiwgNjYxNTgsIDY2MTYzLCA2NjE2NywgNjYxNzIsIDY2MTc2LCA2NjE3OSwgNjYxODEsIDY2MTg1LCA2NjE4OCwgCi0gICAgNjYxOTMsIDY2MTk3LCA2NjIwMSwgNjYyMDUsIDY2MjA5LCA2NjIxOCwgNjYyMjIsIDMyNTI0LCA2NjIyNSwgMzI1MjksIAotICAgIDY2MjMyLCA2NjIzNywgMzI1MzQsIDY2MjQ2LCA2NjI1NSwgMzI1NDAsIDY2MjYwLCAzMjU0NSwgNjYyNjksIDY2Mjc0LCAKLSAgICAxMTU3MSwgNjYyNzgsIDY2MjgzLCA2NjI4OCwgMzI1NTAsIDY2MjkyLCA0MDE5NiwgNjYyOTYsIDY2Mjk5LCA2NjMwMywgCi0gICAgODIxMSwgNjYzMDksIDY2MzE0LCA2NjMxOCwgMzcwNSwgMzI1NTUsIDY2MzIxLCA2NjMyNSwgNjYzMjgsIDY2MzMzLCAKLSAgICA2NjMzNywgNjYzNDMsIDY2MzUxLCA2NjM2NCwgNjYzNzMsIDY2Mzc5LCA2NjM4NCwgNjYzOTAsIDY2Mzk0LCA2NjQwMCwgCi0gICAgNjY0MDgsIDY2NDEzLCA2NjQxNywgNjY0MjQsIDY2NDMwLCA2NjQzOCwgNjY0NDcsIDY2NDU1LCAzMjU1OCwgNjY0NjIsIAotICAgIDY2NDcyLCA2NjQ4MSwgNjY0OTQsIDY2NDk5LCA2NjUwNCwgNjY1MTMsIDY2NTE5LCA2NjUyNiwgNjY1MzcsIDY2NTQ5LCAKLSAgICA2NjU1NiwgNjY1NjUsIDY2NTc0LCA2NjU4MywgNjY1OTAsIDY2NTk2LCA2NjYwMywgNjY2MTEsIDY2NjE4LCA2NjYyNiwgCi0gICAgNjY2MzUsIDY2NjQzLCA2NjY1MCwgNjY2NTgsIDY2NjY3LCA2NjY3NSwgNjY2ODQsIDY2Njk0LCA2NjcwMywgNjY3MTEsIAotICAgIDY2NzE4LCA2NjcyNiwgNjY3MzUsIDY2NzQzLCA2Njc1MiwgNjY3NjIsIDY2NzcxLCA2Njc3OSwgNjY3ODgsIDY2Nzk4LCAKLSAgICA2NjgwNywgNjY4MTcsIDY2ODI4LCA2NjgzOCwgNjY4NDcsIDY2ODU1LCA2Njg2MiwgNjY4NzAsIDY2ODc5LCA2Njg4NywgCi0gICAgNjY4OTYsIDY2OTA2LCA2NjkxNSwgNjY5MjMsIDY2OTMyLCA2Njk0MiwgNjY5NTEsIDY2OTYxLCA2Njk3MiwgNjY5ODIsIAotICAgIDY2OTkxLCA2Njk5OSwgNjcwMDgsIDY3MDE4LCA2NzAyNywgNjcwMzcsIDY3MDQ4LCA2NzA1OCwgNjcwNjcsIDY3MDc3LCAKLSAgICA2NzA4OCwgNjcwOTgsIDY3MTA5LCA2NzEyMSwgNjcxMzIsIDY3MTQyLCA2NzE1MSwgNjcxNTksIDY3MTY2LCA2NzE3NCwgCi0gICAgNjcxODMsIDY3MTkxLCA2NzIwMCwgNjcyMTAsIDY3MjE5LCA2NzIyNywgNjcyMzYsIDY3MjQ2LCA2NzI1NSwgNjcyNjUsIAotICAgIDY3Mjc2LCA2NzI4NiwgNjcyOTUsIDY3MzAzLCA2NzMxMiwgNjczMjIsIDY3MzMxLCA2NzM0MSwgNjczNTIsIDY3MzYyLCAKLSAgICA2NzM3MSwgNjczODEsIDY3MzkyLCA2NzQwMiwgNjc0MTMsIDY3NDI1LCA2NzQzNiwgNjc0NDYsIDY3NDU1LCA2NzQ2MywgCi0gICAgNjc0NzIsIDY3NDgyLCA2NzQ5MSwgNjc1MDEsIDY3NTEyLCA2NzUyMiwgNjc1MzEsIDY3NTQxLCA2NzU1MiwgNjc1NjIsIAotICAgIDY3NTczLCA2NzU4NSwgNjc1OTYsIDY3NjA2LCA2NzYxNSwgNjc2MjUsIDY3NjM2LCA2NzY0NiwgNjc2NTcsIDY3NjY5LCAKLSAgICA2NzY4MCwgNjc2OTAsIDY3NzAxLCA2NzcxMywgNjc3MjQsIDY3NzM2LCA2Nzc0OSwgNjc3NjEsIDY3NzcyLCA2Nzc4MiwgCi0gICAgNjc3OTEsIDY3Nzk5LCA2NzgwNiwgNjc4MTQsIDY3ODIzLCA2NzgzMSwgNjc4NDAsIDY3ODUwLCA2Nzg1OSwgNjc4NjcsIAotICAgIDY3ODc2LCA2Nzg4NiwgNjc4OTUsIDY3OTA1LCA2NzkxNiwgNjc5MjYsIDY3OTM1LCA2Nzk0MywgNjc5NTIsIDY3OTYyLCAKLSAgICA2Nzk3MSwgNjc5ODEsIDY3OTkyLCA2ODAwMiwgNjgwMTEsIDY4MDIxLCA2ODAzMiwgNjgwNDIsIDY4MDUzLCA2ODA2NSwgCi0gICAgNjgwNzYsIDY4MDg2LCA2ODA5NSwgNjgxMDMsIDY4MTEyLCA2ODEyMiwgNjgxMzEsIDY4MTQxLCA2ODE1MiwgNjgxNjIsIAotICAgIDY4MTcxLCA2ODE4MSwgNjgxOTIsIDY4MjAyLCA2ODIxMywgNjgyMjUsIDY4MjM2LCA2ODI0NiwgNjgyNTUsIDY4MjY1LCAKLSAgICA2ODI3NiwgNjgyODYsIDY4Mjk3LCA2ODMwOSwgNjgzMjAsIDY4MzMwLCA2ODM0MSwgNjgzNTMsIDY4MzY0LCA2ODM3NiwgCi0gICAgNjgzODksIDY4NDAxLCA2ODQxMiwgNjg0MjIsIDY4NDMxLCA2ODQzOSwgNjg0NDgsIDY4NDU4LCA2ODQ2NywgNjg0NzcsIAotICAgIDY4NDg4LCA2ODQ5OCwgNjg1MDcsIDY4NTE3LCA2ODUyOCwgNjg1MzgsIDY4NTQ5LCA2ODU2MSwgNjg1NzIsIDY4NTgyLCAKLSAgICA2ODU5MSwgNjg2MDEsIDY4NjEyLCA2ODYyMiwgNjg2MzMsIDY4NjQ1LCA2ODY1NiwgNjg2NjYsIDY4Njc3LCA2ODY4OSwgCi0gICAgNjg3MDAsIDY4NzEyLCA2ODcyNSwgNjg3MzcsIDY4NzQ4LCA2ODc1OCwgNjg3NjcsIDY4Nzc3LCA2ODc4OCwgNjg3OTgsIAotICAgIDY4ODA5LCA2ODgyMSwgNjg4MzIsIDY4ODQyLCA2ODg1MywgNjg4NjUsIDY4ODc2LCA2ODg4OCwgNjg5MDEsIDY4OTEzLCAKLSAgICA2ODkyNCwgNjg5MzQsIDY4OTQ1LCA2ODk1NywgNjg5NjgsIDY4OTgwLCA2ODk5MywgNjkwMDUsIDY5MDE2LCA2OTAyOCwgCi0gICAgNjkwNDEsIDY5MDUzLCA2OTA2NiwgNjkwODAsIDY5MDkzLCA2OTEwNSwgNjkxMTYsIDY5MTI2LCA2OTEzNSwgNjkxNDMsIAotICAgIDY5MTUwLCA2OTE1NSwgODA1OCwgNjkxNjIsIDMyNTY4LCA2OTE2NywgNjkxNzIsIDMyNTczLCA2OTE3OCwgMjA5MTYsIAotICAgIDMyNTc4LCA2OTE4MywgNjkxODksIDY5MTk3LCA2OTIwMywgNjkyMDksIDY5MjE2LCA2OTIyMywgNjkyMjgsIDY5MjMyLCAKLSAgICA2OTIzNSwgNjkyMzksIDY5MjQ4LCA2OTI1NCwgNjkyNjYsIDY5Mjc3LCA2OTI4MSwgMzA4MSwgODAzMywgNjkyODYsIAotICAgIDY5Mjg5LCA2OTI5MSwgNjkyOTUsIDY5Mjk5LCA2OTMwMywgNjkzMDksIDY5MzE0LCAyNTkyNywgNjkzMTksIDY5MzIzLCAKLSAgICA2OTMyNiwgNjkzMzEsIDY5MzM1LCA2OTM0MiwgNjkzNDgsIDY5MzUyLCA2MTcwLCA2OTM1NiwgMzI1OTUsIDY5MzYxLCAKLSAgICA2OTM2OCwgNjkzNzcsIDY5Mzg1LCA2OTM5NiwgNjk0MDQsIDY5NDEyLCA2OTQxOSwgNjk0MjYsIDY5NDMyLCA2OTQ0MywgCi0gICAgMzI2MDAsIDY5NDQ4LCA2OTQ1OSwgNjk0NzEsIDY5NDc5LCA2OTQ5MCwgNjk0OTksIDY5NTEwLCA2OTUxNSwgNjk1MjMsIAotICAgIDI1NTYsIDY5NTI4LCAzNDI3MCwgNjk1NDEsIDY5NTQ1LCA2OTU1NywgNjk1NjUsIDY5NTcwLCA2OTU3OCwgMTc0NzIsIAotICAgIDY5NTg5LCA2OTU5NSwgNjk2MDIsIDY5NjEwLCA2OTYxNiwgMzI2MTAsIDY5NjIxLCAzOTE0LCA1ODIxNywgNjk2MjgsIAotICAgIDY5NjMxLCA2OTYzOSwgNjk2NTIsIDY5NjY1LCA2OTY3OCwgNjk2OTEsIDY5Njk4LCA2OTcwOSwgNjk3MTgsIDQxNjg3LCAKLSAgICA0MTY5MiwgNjk3MjMsIDY5NzI3LCA2OTczNSwgNjk3NDIsIDY5NzUxLCA2OTc1OSwgNjk3NjUsIDY5Nzc0LCA2OTc4MiwgCi0gICAgNjk3OTAsIDY5Nzk0LCA2OTgwMywgNjk4MTIsIDY5ODIyLCA2OTgzNSwgNjk4NDgsIDY5ODU4LCAzMjYxNSwgNjk4NjQsIAotICAgIDY5ODcxLCA2OTg3NywgMzI2MjEsIDY5ODgyLCA2OTg4NSwgNjk4ODksIDY5ODk3LCA2OTkwNiwgNDE0MjUsIDY5OTE0LCAKLSAgICA2OTkyMywgNjk5MzEsIDY5OTM4LCA2OTk0NiwgNjk5NTYsIDY5OTY1LCA2OTk3NCwgNjk5ODMsIDY5OTkxLCA3MDAwMiwgCi0gICAgNzAwMTIsIDkzNTksIDIxNTU0LCA3MDAyMSwgNzAwMjYsIDcwMDMxLCA3MDAzNSwgNzAwMzksIDcwMDQ0LCA3MDA1MCwgCi0gICAgNzAwNTUsIDcwMDYwLCA3MDA2NiwgNzAwNzEsIDcwMDc2LCAyMTUxOSwgNzAwODEsIDcwMDg4LCA3MDA5NiwgNzAxMDQsIAotICAgIDcwMTA5LCA3MDExNiwgNzAxMjMsIDcwMTI4LCA3MDEzMiwgNzAxMzYsIDcwMTQ0LCA3MDE1MiwgMzI2MzgsIDcwMTU4LCAKLSAgICA3MDE2NCwgNzAxNzYsIDcwMTgyLCA3MDE4NiwgNzAxOTMsIDcwMTk4LCA3MDIwOSwgNzAyMTksIDcwMjI5LCA3MDI0MSwgCi0gICAgNzAyNDcsIDcwMjU3LCA3MDI2NywgMzI2NjUsIDcwMjc2LCA3MDI4NSwgNzAyOTEsIDcwMzAzLCA3MDMxNCwgNzAzMjEsIAotICAgIDcwMzI2LCA3MDMzMCwgNzAzMzgsIDcwMzQ0LCA3MDM0OSwgNzAzNTQsIDcwMzYxLCA3MDM2OSwgNzAzODEsIDcwMzkxLCAKLSAgICA3MDQwMCwgNzA0MDksIDcwNDE2LCAzNDEzMiwgMjM4MzQsIDcwNDIyLCA3MDQyNywgNzA0MzEsIDcwNDM1LCA3MDQ0MCwgCi0gICAgNzA0NDYsIDcwNDU3LCA3MDQ3MCwgNzA0NzUsIDcwNDgyLCAzMjY3MCwgNzA0ODcsIDcwNDk5LCA3MDUwOCwgNzA1MTgsIAotICAgIDcwNTI5LCA3MDU0MiwgNzA1NDksIDcwNTU4LCA3MDU2NywgNzA1NzUsIDcwNTgwLCA3MDU4NiwgMTA1OCwgNzA1OTEsIAotICAgIDcwNTk2LCA3MDYwMSwgNzA2MDYsIDcwNjEyLCA3MDYxNywgNzA2MjIsIDcwNjI4LCA3MDYzNCwgNzA2MzksIDcwNjQzLCAKLSAgICA3MDY0OCwgNzA2NTMsIDcwNjU4LCA1ODcyOSwgNzA2NjMsIDcwNjY4LCA3MDY3MywgNzA2NzgsIDcwNjg0LCA3MDY5MCwgCi0gICAgNzA2OTUsIDcwNjk5LCA3MDcwNCwgNzA3MDksIDcwNzE0LCA3MDcyMCwgNzA3MjUsIDcwNzMxLCA3MDczNiwgNzA3NDEsIAotICAgIDcwNzQ2LCA3MDc1MSwgNzA3NTUsIDcwNzYxLCA3MDc2NiwgNzA3NzUsIDcwNzgwLCA3MDc4NSwgNzA3OTAsIDcwNzk1LCAKLSAgICA3MDc5OSwgNzA4MDYsIDcwODEyLCAxNzEyMiwgMTcxMjksIDcwODE3LCA3MDgyMSwgNzA4MjUsIDcwODI5LCA3MDgzMywgCi0gICAgNDU0ODcsIDcwODM3LCA3MDc2NywgNzA4MzksIDcwODQ5LCAzMjY3OSwgNzA4NTIsIDcwODYxLCA3MDg2NywgNjE0MywgCi0gICAgMzI2ODQsIDcwODcxLCA3MDg3NywgNzA4ODIsIDcwODg4LCA3MDg5MywgNzA4OTcsIDcwOTA0LCA3MDkwOSwgNzA5MTksIAotICAgIDcwOTI4LCA3MDkzMiwgNzA5MzgsIDcwOTQ0LCA3MDk1MCwgNzA5NTQsIDcwOTYyLCA3MDk2OSwgNzA5NzcsIDcwOTg1LCAKLSAgICAzMjY4OSwgNzA5OTIsIDcwOTk1LCA3MTAwMiwgNzEwMDgsIDcxMDEzLCA3MTAxNywgNzEwMjMsIDcxMDMwLCA3MTAzNSwgCi0gICAgNzEwMzksIDcxMDQ4LCA3MTA1NiwgNzEwNjIsIDcxMDY3LCAzMjY5NCwgNzEwNzQsIDcxMDgxLCA3MTA4NywgNzEwOTIsIAotICAgIDcxMDk4LCA3MTEwNSwgNzExMTEsIDIxMjgxLCAyNzQzOCwgNzExMTcsIDcxMTIyLCA3MTEyOCwgNzExNDAsIDcwODAwLCAKLSAgICA3MDgwNywgMjE0NTcsIDcxMTUwLCA3MTE1NSwgNzExNjIsIDcxMTY4LCA3MTE3NSwgNzExODEsIDcxMTkyLCA3MTE5NywgCi0gICAgOTEwMywgNzEyMDUsIDcxMjA4LCA3MTIxNCwgNzEyMTgsIDcxMjIyLCA3MTIyNSwgNzEyMzEsIDMyNDQzLCA2MTk0LCA5NjQsIAotICAgIDEzNDEyLCA3MTIzOCwgNzEyNDQsIDcxMjUwLCA3MTI1NiwgNzEyNjIsIDcxMjY4LCA3MTI3NCwgNzEyODAsIDcxMjg2LCAKLSAgICA3MTI5MSwgNzEyOTYsIDcxMzAxLCA3MTMwNiwgNzEzMTEsIDcxMzE2LCA3MTMyMSwgNzEzMjYsIDcxMzMxLCA3MTMzNiwgCi0gICAgNzEzNDEsIDcxMzQ2LCA3MTM1MSwgNzEzNTcsIDcxMzYyLCA3MTM2NywgNzEzNzMsIDcxMzc4LCA3MTM4MywgNzEzODksIAotICAgIDcxMzk1LCA3MTQwMSwgNzE0MDcsIDcxNDEzLCA3MTQxOSwgNzE0MjUsIDcxNDMxLCA3MTQzNywgNzE0NDIsIDcxNDQ3LCAKLSAgICA3MTQ1MywgNzE0NTgsIDcxNDYzLCA3MTQ2OSwgNzE0NzQsIDcxNDc5LCA3MTQ4NCwgNzE0ODksIDcxNDk0LCA3MTQ5OSwgCi0gICAgNzE1MDQsIDcxNTA5LCA3MTUxNCwgNzE1MTksIDcxNTI0LCA3MTUyOSwgNzE1MzUsIDcxNTQwLCA3MTU0NSwgNzE1NTAsIAotICAgIDcxNTU2LCA3MTU2MSwgNzE1NjYsIDcxNTcxLCA3MTU3NiwgNzE1ODIsIDcxNTg3LCA3MTU5MiwgNzE1OTcsIDcxNjAyLCAKLSAgICA3MTYwNywgNzE2MTIsIDcxNjE3LCA3MTYyMiwgNzE2MjcsIDcxNjMyLCA3MTYzNywgNzE2NDIsIDcxNjQ3LCA3MTY1MiwgCi0gICAgNzE2NTcsIDcxNjYyLCA3MTY2NywgNzE2NzIsIDcxNjc3LCA3MTY4MywgNzE2ODgsIDcxNjkzLCA3MTY5OCwgNzE3MDMsIAotICAgIDcxNzA4LCA3MTcxMywgNzE3MTgsIDE4NjQsIDE0MiwgNzE3MjMsIDcxNzI3LCA3MTczMSwgNzE3MzYsIDcxNzQ0LCA3MTc0OCwgCi0gICAgNzE3NTUsIDcxNzYzLCA3MTc2NywgNzE3ODAsIDcxNzg4LCA3MTc5MiwgNzE3OTUsIDcxODAwLCA3MTgwNCwgNzE4MDksIAotICAgIDcxODEzLCA3MTgyMSwgNzE4MjUsIDIwOTI0LCA3MTgzMCwgNzE4MzQsIDYwOTMwLCA3MTgzOCwgNzE4NDEsIDcxODQ5LCAKLSAgICA3MTg1NywgNzE4NjUsIDcxODcwLCA3MTg3NywgNzE4ODMsIDcxODg5LCA3MTg5NCwgNzE5MDEsIDcxOTA2LCA3MTkxNCwgCi0gICAgNjQ5MDYsIDcxOTIxLCA3MTkyNiwgNzE5MzEsIDcxOTM1LCAxMTYzOCwgNzE5MzksIDcxOTQ0LCA3MTk0OSwgNzE5NTMsIAotICAgIDcxOTU2LCA3MTk2MiwgNzE5NjYsIDcxOTc2LCA3MTk4NSwgNzE5ODgsIDcxOTkyLCA3MTk5OSwgNzIwMTIsIDcyMDE4LCAKLSAgICA3MjAyNiwgNzIwMzcsIDcyMDQ4LCA3MjA1OSwgNzIwNzAsIDcyMDc5LCA3MjA4NSwgNzIwOTQsIDcyMTAyLCA3MjExMiwgCi0gICAgNzIxMjUsIDcyMTMyLCA3MjE0MywgNzIxNDksIDcyMTU0LCA3MjE1OSwgNzIxNjUsIDcyMTcxLCA3MjE4MSwgNzIxOTAsIAotICAgIDcwNDg5LCA3MjE5OCwgNzIyMDQsIDcyMjEyLCA3MjIxOCwgNzIyMjYsIDcyMjI5LCA3MjIzMywgNzIyMzcsIDcyMjQwLCAKLSAgICA3MjI0NiwgNzIyNTIsIDcyMjYwLCA3MjI3MiwgNzIyODQsIDcyMjkxLCA3MjI5NSwgNzIzMDYsIDcyMzE0LCA3MjMyMSwgCi0gICAgNzIzMzMsIDcyMzQxLCA3MjM0OSwgNzIzNTYsIDcyMzYyLCA3MjM3MiwgNzIzODEsIDcyMzg2LCA3MjM5NiwgNzI0MDUsIAotICAgIDQwNzUxLCA3MjQxMiwgNzI0MTYsIDcyNDIxLCA3MjQyOSwgNzI0MzYsIDcyNDQyLCA3MjQ0NiwgNzI0NTYsIDcyNDY3LCAKLSAgICA3MjQ3NSwgNzI0ODIsIDcyNDk0LCA3MjUwNiwgNzI1MTUsIDY5NTMxLCA3MjUyMiwgNzI1MzMsIDcyNTQ3LCA3MjU1NSwgCi0gICAgNzI1NjUsIDcyNTcyLCA3MjU4MCwgNzI1OTIsIDcyNjAxLCA3MjYwOSwgNzI2MTksIDcyNjMwLCA3MjY0MiwgNzI2NTEsIAotICAgIDcyNjYxLCA3MjY2OCwgNzI2NzcsIDcyNjkyLCA3MjcwMCwgNzI3MTAsIDcyNzE5LCA3MjcyNywgNzI3NDAsIDcyNzU1LCAKLSAgICA3Mjc1OSwgNzI3NjgsIDcyNzgwLCA3Mjc5MSwgNzI4MDIsIDcyODEzLCA3MjgyMywgNzI4MzQsIDcyODQyLCA3Mjg0OCwgCi0gICAgNzI4NTgsIDcyODY2LCA3Mjg3MiwgMjkwMDcsIDcyODc3LCA3Mjg4MywgNzI4ODgsIDcyODk1LCA5NzAxLCAxNzQ5MiwgCi0gICAgNzI5MDEsIDcyOTEwLCA3MjkxNSwgNzI5MTksIDcyOTI2LCA3MjkzMiwgNzI5MzcsIDcyOTQyLCA3Mjk1MCwgNzI5NTgsIAotICAgIDcyOTYyLCA3Mjk2NSwgNzI5NjgsIDcyOTcwLCA3Mjk3NywgNzI5ODMsIDcyOTk0LCA3Mjk5OSwgNzMwMDMsIDczMDEwLCAKLSAgICA3MzAxNiwgNzMwMjEsIDczMDI5LCA2NTQwNSwgNjU0MTUsIDczMDM1LCA3MzA0MiwgNzMwNTIsIDEwNjExLCA3MzA1OSwgCi0gICAgNzMwNjQsIDI5MjAzLCA3MzA3MywgNzMwNzgsIDczMDg1LCA3MzA5NSwgNzMxMDMsIDczMTExLCA3MzEyMCwgNzMxMjYsIAotICAgIDczMTMyLCA3MzEzOSwgNzMxNDYsIDczMTUxLCA3MzE1NSwgNzMxNjMsIDczMTY4LCA3MzE3MywgNzMxODEsIDczMTg4LCAKLSAgICA3MzE5MywgNzMxOTksIDczMjAyLCA3MzIwNiwgNzMyMTUsIDcxNzc1LCA3MzIyNCwgNzMyMjgsIDczMjM0LCA3MzI0NSwgCi0gICAgNzMyNTUsIDE3NTAxLCA3MzI2NiwgNzMyNzQsIDE3NTEzLCA3MzI4MSwgNzMyODUsIDczMjk0LCAyNzMyNCwgNzMzMDEsIAotICAgIDczMzA1LCA3MzMxMCwgNzMzMjcsIDczMzM5LCAxMDU2OSwgNzMzNTEsIDczMzU2LCA3MzM2MSwgNzMzNjYsIDIwOTk3LCAKLSAgICA3MzM3MCwgNzMzNzUsIDczMzgwLCA3MzM4NiwgNzMzOTEsIDU4NDYsIDIxMDAxLCA3MzM5NiwgNzM0MDEsIDczNDA3LCAKLSAgICA3MzQxNCwgNzM0MTksIDczNDI0LCA3MzQzMCwgNzM0MzYsIDczNDQyLCA3MzQ0NywgNzM0NTMsIDczNDU3LCA3MzQ3MSwgCi0gICAgNzM0NzksIDczNDg3LCA3MzQ5MywgNzM0OTgsIDczNTA1LCA3MzUxNSwgNzM1MjQsIDczNTI5LCA3MzUzNCwgNzM1NDIsIAotICAgIDczNTQ3LCA3MzU1MywgNzM1NTgsIDczNTY3LCA1OTc4NiwgNzM1NzIsIDczNTc1LCA3MzU5MywgNzM2MTIsIDczNjI1LCAKLSAgICA3MzYzOSwgNzM2NTUsIDczNjYyLCA3MzY2OSwgNzM2NzUsIDczNjgyLCA3MzY4NywgNzM2OTMsIDczNjk5LCA3MzcwNywgCi0gICAgNzM3MTMsIDczNzE4LCA3MzcyMywgNzM3MzksIDEwNTgyLCA3Mzc1MywgNzM3NjAsIDczNzY4LCA3Mzc3NCwgNzM3NzgsIAotICAgIDczNzgxLCA3Mzc4NiwgNzM3OTEsIDczNzk4LCA3MzgwMywgNzM4MTIsIDczODE3LCA3MzgyMywgNzM4MzIsIDczODQxLCAKLSAgICA3Mzg0NiwgNzM4NTAsIDczODU4LCA3Mzg2NywgMTE2NjcsIDczODc2LCA3Mzg4NCwgNzM4ODksIDczODk1LCAxMTY3OCwgCi0gICAgNzM5MDAsIDczOTAzLCA3MzkwOCwgNzM5MTgsIDczOTI3LCA3MzkzMiwgNzM5MzgsIDczOTQzLCA3Mzk1MSwgNzM5NTgsIAotICAgIDczOTY5LCA3Mzk3OSwgNzM5ODQsIDY0ODM0LCA3Mzk4OSwgNzM5OTUsIDc0MDAwLCA3NDAwNywgNzQwMTYsIDc0MDI0LCAKLSAgICA3NDAzMCwgNzQwMzYsIDc0MDQzLCA3NDA0OSwgNzQwNTMsIDE2OTQ3LCAzMDU1LCA3NDA1OCwgNzQwNjIsIDc0MDY2LCAKLSAgICA3NDA3MiwgNzQwODEsIDc0MDg3LCA3NDA5NCwgNzQwOTgsIDc0MTE5LCA3NDE0MSwgNzQxNTcsIDc0MTc0LCA3NDE5MywgCi0gICAgNzQyMDIsIDc0MjEyLCA3NDIxOSwgNzQyMjYsIDI3MjExLCA3NDIzMiwgNzQyMzYsIDc0MjQ0LCA3NDI1NiwgNzQyNjIsIAotICAgIDc0MjcwLCA3NDI3NCwgNzQyODIsIDc0Mjg5LCA3NDI5MywgNzQyOTksIDc0MzA1LCA3NDMxMCwgMzU2MywgNDE4ODcsIAotICAgIDc0MzE2LCA3NDMyMCwgNzQzMjQsIDc0MzI4LCA3NDMzMywgNzQzMzgsIDc0MzQzLCA3NDM0OSwgNzQzNTUsIDc0MzYxLCAKLSAgICA3NDM2OCwgNzQzNzQsIDc0MzgxLCA3NDM4NywgNzQzOTMsIDc0Mzk4LCA3NDQwNCwgNzQ0MDksIDc0NDEzLCA3NDQxOCwgCi0gICAgNzQ0MjIsIDc0NDI3LCA0MTkwMiwgNzQ0MzEsIDc0NDM2LCA3NDQ0NCwgNzQ0NDgsIDc0NDUzLCA3NDQ2MCwgNzQ0NjksIAotICAgIDc0NDc1LCA3NDQ3OSwgNzQ0ODYsIDc0NDkwLCA3NDQ5MywgNzQ1MDAsIDc0NTA5LCA3NDUxNCwgNzQ1MTgsIDc0NTI2LCAKLSAgICA3NDUzNSwgNzQ1MzksIDc0NTQ3LCA3NDU1MywgNzQ1NTgsIDc0NTYzLCA3NDU2OSwgNzQ1NzUsIDc0NTgwLCA3NDU4NCwgCi0gICAgNzQ1OTAsIDc0NTk1LCA3NDU5OSwgNzQ2MDMsIDc0NjA2LCA3NDYxMSwgNzQ2MTksIDc0NjI5LCA3NDYzNCwgMzkzODcsIAotICAgIDc0NjQyLCA3NDY1NCwgNzQ2NTgsIDc0NjY0LCA3NDY3NiwgNzQ2ODcsIDc0Njk0LCA3NDcwMCwgNzQ3MDcsIDc0NzE5LCAKLSAgICA3NDcyNiwgNzQ3MzIsIDIxMDc1LCA3NDczNiwgNzQ3NDIsIDc0NzQ5LCA3NDc1NSwgNzQ3NjEsIDc0NzY2LCA3NDc3MSwgCi0gICAgNzQ3NzYsIDc0Nzg1LCA3MDMzLCA3NDc5MCwgMTY0MTMsIDc0Nzk2LCA3NDgwMCwgNzQ4MDQsIDc0ODA4LCA3NDgxNiwgCi0gICAgNzQ4MjUsIDc0ODI5LCA3NDgzNiwgNzQ4NDUsIDc0ODU4LCA3NDg2NCwgNzQ0MjMsIDMwMDY3LCA3NDg2OSwgNzQ4NzEsIAotICAgIDc0ODc2LCA3NDg4MSwgNzQ4ODYsIDc0ODkxLCA3NDg5NiwgNzQ5MDEsIDc0OTA2LCA3NDkxMSwgNzQ5MTYsIDc0OTIxLCAKLSAgICA3NDkyNiwgNzQ5MzEsIDc0OTM2LCA3NDk0MSwgNzQ5NDcsIDc0OTUyLCA3NDk1NywgNzQ5NjIsIDc0OTY3LCA3NDk3MiwgCi0gICAgNzQ5NzcsIDc0OTgyLCA3NDk4NywgNzQ5OTMsIDc0OTk5LCA3NTAwNSwgNzUwMTAsIDc1MDE1LCA3NTAyNywgNzUwMzIsIAotICAgIDE4NzAsIDQ5LCA3NTAzNywgNzUwNDIsIDMyNzIxLCA3NTA0NiwgMzI3MjYsIDMyNzMxLCAzMjczNywgMzI3NDIsIDc1MDUwLCAKLSAgICAzMjc0NywgMjIwNzAsIDc1MDcyLCA3NTA3NiwgNzUwODAsIDc1MDg1LCA3NTA4OSwgMzI3NTEsIDc1MDkzLCA3NTEwMSwgCi0gICAgMzI3NTYsIDc1MTA4LCA3NTExMSwgNzUxMTYsIDc1MTIwLCA5NTM2LCA3NTEyOSwgMzI3NjEsIDIxOTMyLCA3NTEzMiwgCi0gICAgNzUxMzYsIDE0MjgsIDc1MTQxLCAzMjc3MiwgNzUxNDQsIDc1MTQ5LCAyNTcyMCwgMjU3MzAsIDM1MjMzLCA3NTE1NCwgCi0gICAgNzUxNTksIDc1MTY0LCA3NTE2OSwgNzUxNzUsIDc1MTgwLCA3NTE4OSwgNzUxOTQsIDc1MjAxLCA3NTIwNywgNzUyMTIsIAotICAgIDc1MjE3LCA3NTIyMiwgNzUyMzIsIDc1MjQxLCA3NTI0NiwgNzUyNTQsIDc1MjU4LCA3NTI2NiwgMzI1ODYsIDM3Mjg4LCAKLSAgICA3NTI3MywgNzUyNzksIDc1Mjg0LCA3NTI4OSwgMTIwMDksIDc1Mjk0LCA3NTMwMCwgNzUzMDUsIDc1MzEyLCA3NTMxOCwgCi0gICAgNzUzMjMsIDc1MzMxLCA3NTM0MSwgNzUzNTEsIDc1MzU3LCA3NTM2MiwgNzUzNjgsIDE3NTIzLCA3NTM3NSwgMzYwNDgsIAotICAgIDc1Mzg4LCA3NTM5MywgNzUzOTksIDMwOTY4LCA3NTQxMiwgNzU0MTgsIDc1NDIyLCA3NTQzMSwgNzU0MzgsIDc1NDQ0LCAKLSAgICA3NTQ1MiwgNzU0NjEsIDc1NDY4LCA3NTQ3NCwgNzU0NzcsIDc1NDgxLCAyNTg2MSwgNzU0ODUsIDc1NDkyLCA3NTQ5OCwgCi0gICAgNzU1MDYsIDc1NTExLCAyMzk3NywgNzU1MTcsIDc1NTIwLCA3NTUyOCwgNzU1MzYsIDc1NTUwLCA3NTU1NywgNzU1NjMsIAotICAgIDc1NTcwLCA3NTU3NiwgMzI3ODYsIDc1NTgwLCA3NTU4NywgNzU1OTUsIDc1NjAzLCA3NTYwOSwgMzI3OTEsIDc1NjE3LCAKLSAgICA3NTYyMywgNzU2MjgsIDc1NjM4LCA3NTY0NCwgNzU2NTMsIDMwODA1LCAzNDY5MSwgNzU2NjEsIDc1NjY2LCA3NTY3MSwgCi0gICAgNzU2NzUsIDc1NjgwLCA3NTY4NCwgNzU2OTIsIDE0OTA3LCAzOTQwMCwgNzU2OTcsIDc1NzAyLCAzMjc5NiwgNjIyMzIsIAotICAgIDc1NzA2LCA3NTcxMSwgNzU3MTUsIDc1NzI0LCA3NTczMiwgNzU3MzgsIDc1NzQzLCA3NTc0OSwgNzU3NTYsIDc1NzYyLCAKLSAgICA3NTc2NywgNzU3NzIsIDc1NzgxLCA3NTc5MywgNzU4MDgsIDMzMDU4LCA3NTgxNCwgMTY1MzIsIDMyODAwLCA3NTgxOCwgCi0gICAgNzU4MjUsIDI0MDg3LCA3NTgzMSwgNzU4MzgsIDc1ODQ3LCA3NTg1NCwgNzU4NjMsIDc1ODY5LCA3NTg3NCwgNzU4ODIsIAotICAgIDc1ODg4LCAzMjgxMCwgNzU4OTMsIDc1OTAyLCA3NDY4MiwgNzU5MTEsIDc1OTE4LCA3NTkyNCwgNzU5MzAsIDc1OTQwLCAKLSAgICA3NTk0OCwgNzU5NTUsIDc1OTU5LCAzMjgxNSwgNzU5NjIsIDMyODIxLCAzMjgyNywgNzU5NjcsIDc1OTc1LCA3NTk4MywgCi0gICAgNzU5OTMsIDc2MDAyLCA3NjAxMCwgNzYwMTcsIDc2MDI3LCAzMjgzMiwgNzYwMzEsIDc2MDMzLCA3NjAzNywgNzYwNDIsIAotICAgIDc2MDQ2LCA3NjA1MCwgNzYwNTYsIDc2MDYxLCA3NjA2NSwgNzYwNzYsIDc2MDgxLCA3NjA4NiwgMzA2MCwgNzYwOTAsIAotICAgIDc2MDk3LCA3NjEwMSwgNzYxMTAsIDc2MTE4LCA3NjEyNSwgNzYxMzAsIDc2MTM1LCA2MjI3OCwgNzYxMzksIDc2MTQyLCAKLSAgICA3NjE0OCwgNzYxNTYsIDc2MTYyLCA3NjE2NiwgNzYxNzEsIDc2MTc4LCA3NjE4MywgNzYxODksIDM0NzIyLCA3NjE5NCwgCi0gICAgNzYxOTcsIDc2MjAyLCA3NjIwNiwgNzYyMTEsIDc2MjE2LCA3NjIyMCwgNzYyMjgsIDc2MjMyLCAyNTczOSwgMjU3NDgsIAotICAgIDc2MjM4LCA3NjI0NCwgNzYyNTAsIDc2MjU1LCA3NjI1OSwgNzYyNjIsIDc2MjcyLCA3NjI4MSwgNzYyODYsIDc2MjkyLCAKLSAgICA3NjI5OSwgNzYzMDUsIDc2MzA5LCA3NjMxNywgNzYzMjIsIDM0NzI4LCA3NjMyNiwgNzYzMzQsIDc2MzQwLCA3NjM0NywgCi0gICAgNzYzNTIsIDc2MzU2LCA3NjM2MSwgNTg0MDMsIDM0NzM0LCA3NjM2NywgNzYzNzIsIDc2Mzc2LCA3NjM4MSwgNzYzODYsIAotICAgIDc2MzkxLCA3NjM5NSwgNzY0MDAsIDc2NDA1LCA3NjQxMSwgNzY0MTYsIDc2NDIxLCA3NjQyNywgNzY0MzMsIDc2NDM4LCAKLSAgICA3NjQ0MiwgNzY0NDcsIDc2NDUyLCA3NjQ1NywgNzY0NjEsIDI0MDg2LCA3NjQ2NiwgNzY0NzEsIDc2NDc3LCA3NjQ4MywgCi0gICAgNzY0ODksIDc2NDk0LCA3NjQ5OCwgNzY1MDMsIDc2NTA4LCA3NjUxMywgNzY1MTcsIDc2NTIyLCA3NjUyNywgNzY1MzIsIAotICAgIDc2NTM3LCA3NjU0MSwgMzI4NDAsIDc2NTQ5LCA3NjU1MywgNzY1NjEsIDc2NTY5LCA3NjU4MCwgNzY1ODUsIDc2NTg5LCAKLSAgICAyMjM4NCwgNzY1OTQsIDc2NjAwLCA3NjYxMCwgNzY2MTcsIDc2NjIyLCA3NjYzMSwgNzY2MzYsIDc2NjQwLCA3NjY0NSwgCi0gICAgNzY2NTMsIDc2NjYxLCA3NjY2OCwgNjUwNjgsIDc2Njc0LCA3NjY4MiwgNzY2ODksIDc2NzAwLCA3NjcwNiwgNzY3MTAsIAotICAgIDc2NzE2LCAzMjg1MCwgNzY3MTksIDc2NzI2LCA3NjczNCwgNzY3MzksIDM5NTkxLCA3Njc0MywgNzY3NDgsIDc2NzU1LCAKLSAgICA3Njc2MCwgODk4NSwgNzY3NjQsIDc2NzcyLCA3Njc3OSwgNzY3ODYsIDc2NzkyLCA3NjgwNiwgNjMzNDAsIDc2ODE0LCAKLSAgICA3NjgyMCwgNzY4MjQsIDc2ODI3LCA3NjgzNSwgNzY4NDIsIDc2ODQ3LCA3Njg2MCwgNzY4NjcsIDc2ODcxLCA3Njg3OCwgCi0gICAgNzY4ODMsIDYwODIzLCA3Njg4OCwgNzY4OTEsIDc2ODk4LCA3NjkwNCwgNzY5MDgsIDc2OTE2LCA3NjkyNSwgNzY5MzUsIAotICAgIDc2OTQ1LCA3Njk1NCwgNzY5NjIsIDc2OTczLCA3Njk3OCwgNzY5ODIsIDc2OTg3LCA3Njk5MSwgMzUzNjQsIDc2OTk5LCAKLSAgICAyMTM0NCwgMzUzNzMsIDc3MDA0LCA3NzAwOSwgNzcwMTQsIDc3MDE5LCA3NzAyNCwgNzcwMjksIDc3MDM0LCA3NzAzOCwgCi0gICAgNzcwNDMsIDc3MDQ4LCA3NzA1MywgNzcwNTgsIDc3MDYzLCA3NzA2OCwgNzcwNzIsIDc3MDc3LCA3NzA4MiwgNzcwODYsIAotICAgIDc3MDkwLCA3NzA5NCwgNzcwOTgsIDc3MTAzLCA3NzEwOCwgNzcxMTIsIDc3MTE3LCA3NzEyMSwgNzcxMjUsIDc3MTMwLCAKLSAgICA3NzEzNSwgNzcxNDAsIDc3MTQ1LCA3NzE0OSwgNzcxNTQsIDc3MTU5LCA3NzE2MywgNzcxNjgsIDc3MTczLCA3NzE3OCwgCi0gICAgNzcxODMsIDc3MTg4LCA3NzE5MywgNzcxOTgsIDc3MjAzLCA3NzIwOCwgNzcyMTMsIDc3MjE4LCA3NzIyMywgNzcyMjgsIAotICAgIDc3MjMzLCA3NzIzOCwgNzcyNDMsIDc3MjQ4LCA3NzI1MywgNzcyNTgsIDc3MjYzLCA3NzI2NywgNzcyNzIsIDc3Mjc3LCAKLSAgICA3NzI4MiwgNzcyODcsIDc3MjkyLCA3NzI5NywgNzczMDIsIDc3MzA3LCA3NzMxMiwgNzczMTcsIDc3MzIyLCA3NzMyNiwgCi0gICAgNzczMzEsIDc3MzM1LCA3NzM0MCwgNzczNDUsIDc3MzUwLCA3NzM1NSwgNzczNjAsIDc3MzY1LCA3NzM3MCwgNzczNzUsIAotICAgIDc3MzgwLCA3NzM4NCwgNzczODgsIDc3MzkzLCA3NzM5OCwgNzc0MDIsIDc3NDA3LCA3NzQxMiwgNzc0MTYsIDc3NDIxLCAKLSAgICA3NzQyNiwgNzc0MzEsIDc3NDM2LCA3NzQ0MCwgNzc0NDUsIDc3NDUwLCA3NzQ1NCwgNzc0NTksIDc3NDYzLCA3NzQ2NywgCi0gICAgNzc0NzEsIDc3NDc1LCA3NzQ4MCwgNzc0ODQsIDc3NDg4LCA3NzQ5MiwgNzc0OTYsIDc3NTAwLCA3NzUwNCwgNzc1MDgsIAotICAgIDc3NTEyLCA3NzUxNiwgNzc1MjEsIDc3NTI2LCA3NzUzMSwgNzc1MzYsIDc3NTQxLCA3NzU0NiwgNzc1NTEsIDc3NTU2LCAKLSAgICA3NzU2MSwgNzc1NjYsIDc3NTcwLCA3NzU3NCwgNzc1NzgsIDc3NTgyLCA3NzU4NiwgNzc1OTAsIDc3NTk1LCA3NzU5OSwgCi0gICAgNzc2MDQsIDc3NjA4LCA3NzYxMywgNzc2MTgsIDc3NjIyLCA3NzYyNiwgNzc2MzEsIDc3NjM1LCA3NzYzOSwgNzc2NDMsIAotICAgIDc3NjQ3LCA3NzY1MSwgNzc2NTUsIDc3NjU5LCA3NzY2MywgNzc2NjcsIDc3NjcxLCA3NzY3NSwgNzc2NzksIDc3NjgzLCAKLSAgICA3NzY4NywgNzc2OTIsIDc3Njk3LCA3NzcwMSwgNzc3MDUsIDc3NzA5LCA3NzcxMywgNzc3MTcsIDc3NzIxLCA3NzcyNiwgCi0gICAgNzc3MzAsIDc3NzM0LCA3NzczOCwgNzc3NDIsIDc3NzQ2LCA3Nzc1MCwgNzc3NTUsIDc3NzU5LCA3Nzc2NCwgNzc3NjgsIAotICAgIDc3NzcyLCA3Nzc3NiwgNzc3ODAsIDc3Nzg0LCA3Nzc4OCwgNzc3OTIsIDc3Nzk2LCA3NzgwMCwgNzc4MDQsIDc3ODA4LCAKKyAgICA4OTM1LCA4OTM5LCA4OTQ0LCA4OTQ5LCA4OTU2LCA4OTYyLCA4OTcyLCA3OTA5LCA4OTc4LCA4OTgyLCA4OTg5LCA4OTk2LCAKKyAgICA3NjgsIDkwMDAsIDkwMDQsIDkwMDksIDkwMTQsIDkwMTksIDkwMjMsIDkwMjksIDkwMzcsIDkwNDMsIDkwNDcsIDkwNTMsIAorICAgIDkwNjMsIDkwNjcsIDkwNzMsIDkwNzgsIDkwODIsIDkwODgsIDkwOTQsIDIxNjEsIDkwOTksIDkxMDEsIDkxMDYsIDkxMTQsIAorICAgIDkxMjMsIDkxMjcsIDkxMzMsIDkxMzgsIDkxNDMsIDkxNDgsIDkxNTMsIDkxNTksIDkxNjQsIDkxNjksIDQwMDYsIDkxNzQsIAorICAgIDkxNzksIDkxODMsIDkxODksIDkxOTQsIDkyMDAsIDkyMDUsIDkyMTAsIDkyMTYsIDkyMjEsIDkxMjgsIDkyMjcsIDkyMzEsIAorICAgIDkyMzgsIDkyNDQsIDkyNDksIDkyNTMsIDYxODMsIDkyNTgsIDkyNjcsIDkyNzIsIDkyNzcsIDgyMTgsIDgyMjUsIDkyODIsIAorICAgIDI4NTMsIDkyODYsIDkyOTEsIDkyOTYsIDkxMzksIDkzMDAsIDkzMDUsIDkxNDQsIDkxNDksIDkzMTAsIDkzMTcsIDkzMjQsIAorICAgIDkzMzAsIDkzMzYsIDkzNDIsIDkzNDcsIDkzNTIsIDkzNTcsIDkxNTQsIDkxNjAsIDkzNjMsIDkzNjksIDkzNzQsIDkzODIsIAorICAgIDkxNjUsIDkzODcsIDk5MCwgOTM5MCwgOTM5OCwgOTQwNCwgOTQxMCwgOTQxOSwgOTQyNywgOTQzMiwgOTQzOCwgOTQ0NiwgCisgICAgOTQ1MywgOTQ2OCwgOTQ4NSwgOTUwNCwgOTUxMywgOTUyMSwgOTUzNiwgOTU0NywgOTU1NywgOTU2NywgOTU3NSwgOTU4MSwgCisgICAgOTU5MywgOTYwMiwgOTYxMCwgOTYxNywgOTYyNCwgOTYzMCwgOTYzNSwgOTY0MywgOTY1MywgOTY2MCwgOTY3MCwgOTY4MCwgCisgICAgOTY5MCwgOTY5OCwgOTcwNSwgOTcxNCwgOTcyNCwgOTczOCwgOTc1MywgOTc2MiwgOTc3MCwgOTc3NSwgOTc3OSwgOTc4OCwgCisgICAgOTc5NCwgOTc5OSwgOTgwOSwgOTgxOSwgOTgyOSwgOTgzNCwgOTgzOCwgOTg0NywgOTg1MiwgOTg2MiwgOTg3MywgOTg4NiwgCisgICAgOTg5NCwgOTkwNywgOTkxOSwgOTkyNywgOTkzMiwgOTkzNiwgOTk0MiwgOTk0NywgOTk1NSwgOTk2MywgOTk3MCwgOTk3NSwgCisgICAgOTk4MywgOTk4OSwgOTk5MiwgOTk5NiwgMTAwMDIsIDEwMDEwLCAxMDAxNSwgMTAwMTksIDEwMDI3LCAxMDAzNiwgMTAwNDQsIAorICAgIDEwMDUwLCAxMDA1NCwgMTAwNjEsIDEwMDcyLCAxMDA3NiwgMTAwNzksIDEwMDg1LCA5MTcwLCAxMDA5MCwgMTAwOTYsIAorICAgIDEwMTAzLCAxMDEwOSwgMTAxMTQsIDEwMTIxLCAxMDEyOCwgMTAxMzUsIDEwMTQyLCAxMDE0OSwgMTAxNTYsIDEwMTYzLCAKKyAgICAxMDE3MCwgMTAxNzUsIDk0ODEsIDEwMTgwLCAxMDE4NiwgMTAxOTMsIDEwMjAwLCAxMDIwNSwgMTAyMTIsIDEwMjIxLCAKKyAgICAxMDIyNSwgMTAyMzcsIDgyNTYsIDEwMjQxLCAxMDI0NCwgMTAyNDgsIDEwMjUyLCAxMDI1NiwgMTAyNjAsIDEwMjY2LCAKKyAgICAxMDI3MiwgMTAyNzcsIDEwMjgzLCAxMDI4OCwgMTAyOTMsIDEwMjk5LCAxMDMwNCwgMTAzMDksIDg5NTIsIDEwMzE0LCAKKyAgICAxMDMxOCwgMTAzMjIsIDEwMzI2LCAxMDMzMSwgMTAzMzYsIDEwMzQ0LCAxMDM1MCwgMTAzNTQsIDEwMzU4LCAxMDM2NSwgCisgICAgMTAzNzAsIDEwMzc4LCAxMDM4MywgMTAzODcsIDEwMzkwLCAxMDM5NiwgMTA0MDMsIDEwNDA3LCAxMDQxMCwgMTA0MTUsIAorICAgIDEwNDE5LCA0MDQ1LCAxMDQyNSwgMTA0MzQsIDM2LCAxMDQ0MiwgMTA0NDgsIDEwNDUzLCA4OTY3LCAxMDQ1OCwgMTA0NjMsIAorICAgIDEwNDY3LCAxMDQ3MCwgMTA0ODUsIDEwNTA0LCAxMDUxNiwgMTA1MjksIDEwNTQyLCAxMDU1NSwgMTA1NjksIDEwNTgyLCAKKyAgICAxMDU5NywgMTA2MDQsIDkxNzUsIDEwNjEwLCAxMDYyNCwgMTA2MjksIDEwNjM1LCAxMDY0MCwgMTA2NDgsIDEwNjUzLCAKKyAgICA4MDQwLCAxMDY1OCwgMTA2NjEsIDEwNjY4LCAxMDY3MywgMTA2NzcsIDI4NTgsIDk5OCwgMTA2ODMsIDEwNjg3LCAxMDY5MywgCisgICAgMTA2OTksIDEwNzA0LCAxMDcxMCwgMTA3MTUsIDkxODQsIDEwNzIxLCAxMDcyNywgMTA3MzIsIDEwNzM3LCAxMDc0NSwgCisgICAgMTA3NTEsIDEwNzY0LCAxMDc3MiwgMTA3NzksIDkxOTAsIDEwNzg1LCAxMDc5MywgMTA4MDEsIDEwODA4LCAxMDgyMSwgCisgICAgMTA4MzMsIDEwODQzLCAxMDg1MSwgMTA4NTgsIDEwODY1LCAxMDg3NCwgMTA4ODMsIDEwODkxLCAxMDg5OCwgMTA5MDMsIAorICAgIDEwOTA5LCA5MTk1LCAxMDkxNCwgMTA5MjAsIDkyMDEsIDEwOTI1LCAxMDkyOCwgMTA5MzUsIDEwOTQxLCAxMDk1NCwgODY2OSwgCisgICAgMTA5NjUsIDEwOTcxLCAxMDk4MCwgMTA5ODgsIDEwOTk1LCAxMTAwMSwgMTEwMDcsIDExMDEyLCAxMTAxNiwgMTEwMjEsIAorICAgIDEwNDc3LCAxMTAyNywgOTIwNiwgMTEwMzQsIDExMDM5LCAxMTA0NiwgMTEwNTIsIDExMDU4LCAxMTA2MywgMTEwNzEsIAorICAgIDExMDc5LCAxMTA4NiwgMTEwOTAsIDExMTA0LCAxMTExNCwgMTExMTksIDExMTIzLCAxMTEzNCwgMTExNDAsIDExMTQ1LCAKKyAgICAxMTE1MCwgOTIxMSwgOTIxNywgMTExNTQsIDExMTU3LCAxMTE2MiwgMTExNzQsIDExMTgxLCAxMTE4NiwgMTExOTAsIAorICAgIDExMTk1LCAxMTE5OSwgMTEyMDYsIDExMjEyLCA5MjIyLCA5MTI5LCAxMTIxOSwgMjg2MywgOCwgMTEyMjYsIDExMjMxLCAKKyAgICAxMTIzNSwgMTEyNDEsIDExMjQ5LCAxMTI1OSwgMTEyNjQsIDExMjY5LCAxMTI3NiwgMTEyODMsIDExMjg3LCAxMTI5OCwgCisgICAgMTEzMDgsIDExMzE3LCAxMTMyOSwgMTEzMzQsIDExMzM4LCAxMTM0NiwgMTEzNjAsIDExMzY0LCAxMTM2NywgMTEzNzUsIAorICAgIDExMzgyLCAxMTM5MCwgMTEzOTQsIDExNDA1LCAxMTQwOSwgMTE0MTYsIDExNDIxLCAxMTQyNSwgMTE0MzEsIDExNDM2LCAKKyAgICAxMTQ0MCwgMTE0NDYsIDExNDUxLCAxMTQ2MiwgMTE0NjYsIDExNDY5LCAxMTQ3NSwgMTE0ODAsIDExNDg2LCAxMTQ5MiwgCisgICAgMTE0OTksIDExNTEwLCAxMTUyMCwgMTE1MzAsIDExNTM5LCAxMTU0NiwgMTE1NTUsIDkyMzIsIDkyMzksIDkyNDUsIDkyNTAsIAorICAgIDExNTYxLCAxMTU2NywgOTI1NCwgMTE1NzMsIDExNTc2LCAxMTU4MywgMTE1ODgsIDExNjAzLCAxMTYxOSwgMTE2MzQsIAorICAgIDExNjQyLCAxMTY0OCwgMTE2NTMsIDgzOCwgNDIwLCAxMTY1OCwgMTE2NjYsIDExNjczLCAxMTY3OSwgMTE2ODQsIDExNjg5LCAKKyAgICA5MjU5LCAxMTY5MSwgMTE2OTUsIDExNzAwLCAxMTcwNCwgMTE3MTQsIDExNzE5LCAxMTcyMywgMTE3MzIsIDExNzM2LCAKKyAgICAxMTczOSwgOTI2OCwgMTE3NDYsIDExNzQ5LCAxMTc1NywgMTE3NjQsIDExNzcyLCAxMTc3NiwgMTE3ODMsIDExNzkyLCAKKyAgICAxMTc5NSwgMTE3OTksIDExODAzLCAxMTgwOSwgMTE4MTMsIDExODE3LCAxMTgyMSwgMTE4MjcsIDExODM3LCAxMTg0MSwgCisgICAgMTE4NDksIDExODUzLCAxMTg2MCwgMTE4NjQsIDExODY5LCAxMTg3MywgMTE4ODAsIDExODg2LCAxMTg5NCwgMTE5MDAsIAorICAgIDExOTA1LCAxMTkxNSwgMTE5MjAsIDExOTI1LCAxMTkyOSwgMTE5MzcsIDM5MDUsIDExOTQ1LCAxMTk1MCwgOTI3MywgCisgICAgMTE5NTQsIDExOTU4LCAxMTk2MSwgMTE5NjksIDExOTc2LCAxMTk4MCwgNTk5MSwgMTE5ODQsIDExOTg5LCAxMTk5MywgCisgICAgMTIwMDQsIDEyMDE0LCAxMjAxOSwgMTIwMjUsIDEyMDI5LCAxMjAzMiwgMTIwNDAsIDEyMDQ1LCAxMjA1MCwgMTIwNTcsIAorICAgIDEyMDYyLCA5Mjc4LCAxMjA2NywgMTIwNzEsIDEyMDc4LCAxNzIyLCA2MTQ1LCAxMjA4MywgMTIwODgsIDEyMDkzLCAxMjA5OCwgCisgICAgMTIxMDQsIDEyMTA5LCAxMjExNSwgMTIxMjAsIDEyMTI1LCAxMjEzMCwgMTIxMzUsIDEyMTQwLCAxMjE0NSwgMTIxNTAsIAorICAgIDEyMTU1LCAxMjE2MCwgMTIxNjUsIDEyMTcwLCAxMjE3NSwgMTIxODAsIDEyMTg1LCAxMjE5MCwgMTIxOTUsIDEyMjAxLCAKKyAgICAxMjIwNiwgMTIyMTEsIDEyMjE2LCAxMjIyMSwgMTIyMjYsIDEyMjMyLCAxMjIzNywgMTIyNDIsIDEyMjQ4LCAxMjI1MywgCisgICAgMTIyNTksIDEyMjY0LCAxMjI3MCwgMTIyNzUsIDEyMjgwLCAxMjI4NSwgMTIyOTAsIDEyMjk2LCAxMjMwMSwgMTIzMDYsIAorICAgIDEyMzExLCA3MzcsIDEzOSwgMTIzMTksIDEyMzIzLCAxMjMyOCwgMTIzMzMsIDEyMzM3LCAxMjM0MSwgMTIzNDUsIDEyMzUwLCAKKyAgICAxMjM1NCwgMTIzNTksIDEyMzYzLCAxMjM2NiwgMTIzNzAsIDEyMzc0LCAxMjM4MCwgMTIzODUsIDEyMzk1LCAxMjQwMSwgCisgICAgMTI0MDksIDEyNDEzLCAxMjQxNywgMTI0MjQsIDEyNDMyLCAxMjQ0MSwgMTI0NTIsIDEyNDU5LCAxMjQ2NiwgMTI0NzAsIAorICAgIDEyNDc5LCAxMjQ4OCwgMTI0OTYsIDEyNTA1LCAxMjUxNCwgMTI1MjMsIDEyNTMyLCAxMjU0MiwgMTI1NTIsIDEyNTYyLCAKKyAgICAxMjU3MiwgMTI1ODIsIDEyNTkxLCAxMjYwMSwgMTI2MTEsIDEyNjIxLCAxMjYzMSwgMTI2NDEsIDEyNjUxLCAxMjY2MSwgCisgICAgMTI2NzAsIDEyNjgwLCAxMjY5MCwgMTI3MDAsIDEyNzEwLCAxMjcyMCwgMTI3MzAsIDEyNzM5LCAxMjc0OSwgMTI3NTksIAorICAgIDEyNzY5LCAxMjc3OSwgMTI3ODksIDEyNzk5LCAxMjgwOSwgMTI4MTksIDEyODI5LCAxMjgzOCwgMTI4NDgsIDEyODU4LCAKKyAgICAxMjg2OCwgMTI4NzgsIDEyODg4LCAxMjg5OCwgMTI5MDgsIDEyOTE4LCAxMjkyOCwgMTI5MzgsIDEyOTQ3LCAxMjU2LCAKKyAgICAxMjk1MywgMTI5NTYsIDEyOTYwLCAxMjk2NSwgMTI5NzIsIDEyOTc4LCAxMjk4MywgMTI5ODcsIDEyOTkyLCAxMzAwMSwgCisgICAgMTMwMDksIDEzMDE0LCAxMzAxOCwgMTMwMjIsIDEzMDI4LCAxMzAzMywgMTMwMzksIDkyODcsIDEzMDQ0LCAxMzA0OSwgCisgICAgMTMwNTgsIDkyOTIsIDEzMDYzLCAxMzA2NiwgMTMwNzIsIDEzMDgwLCA5Mjk3LCAxMzA4NywgMTMwOTEsIDEzMDk1LCAKKyAgICAxMzA5OSwgMTMxMDksIDEzMTE1LCAxMzEyMSwgMTMxMjYsIDEzMTM1LCAxMzE0MywgMTMxNTAsIDEzMTU3LCAxMzE2MiwgCisgICAgMTMxNjksIDEzMTc0LCAxMzE3OCwgMTMxODEsIDEzMTkyLCAxMzIwMiwgMTMyMTEsIDEzMjE5LCAxMzIzMCwgMTMyNDIsIAorICAgIDEzMjUyLCAxMzI1NywgMTMyNjEsIDEzMjY2LCAxMzI3MSwgMTMyNzUsIDEzMjgxLCAxMzI4OSwgMTMyOTYsIDEzMzA3LCAKKyAgICAxMzMxMiwgMTMzMjIsIDEzMzI2LCAxMzMyOSwgMTMzMzYsIDEzMzQ2LCAxMzM1NSwgMTMzNjIsIDEzMzY2LCAxMzM3MywgCisgICAgMTMzNzksIDEzMzg0LCAxMzM4OSwgMTMzOTMsIDEzNDAyLCAxMzQwNywgMTM0MTMsIDEzNDE3LCAxMzQyMiwgMTM0MjYsIAorICAgIDEzNDM1LCAxMzQ0MywgMTM0NTEsIDEzNDU4LCAxMzQ2NiwgMTM0NzgsIDEzNDg5LCAxMzQ5OSwgMTM1MDYsIDEzNTEyLCAKKyAgICAxMzUyMSwgMTM1MzIsIDEzNTQxLCAxMzU1MywgMTM1NjUsIDEzNTc3LCAxMzU4NywgMTM1OTYsIDEzNjA1LCAxMzYxMywgCisgICAgMTM2MjAsIDEzNjI5LCAxMzYzNywgMTM2NDEsIDEzNjQ3LCAxMzY1MywgMTM2NTgsIDc3NTMsIDEzNjYyLCAxMzY2NCwgCisgICAgMTM2NjgsIDEzNjczLCAxMzY3OSwgMTM2ODgsIDEzNjkyLCAxMzY5OCwgMTM3MDYsIDEzNzEzLCAxMzcyMiwgMTM3MzEsIAorICAgIDEzNzQwLCAxMzc0OSwgMTM3NTgsIDEzNzY3LCAxMzc3NiwgMTM3ODUsIDEzNzk1LCAxMzgwNSwgMTM4MTQsIDEzODIwLCAKKyAgICAxMzgyNywgMTM4MzQsIDEzODQwLCAxMzg1NCwgMTM4NjEsIDEzODY5LCAxMzg3OCwgMTM4ODQsIDEzODkzLCAxMzkwMiwgCisgICAgMTM5MTMsIDEzOTIzLCAxMzkzMSwgMTM5MzgsIDEzOTQ2LCAxMzk1NSwgMTM5NjgsIDEzOTc2LCAxMzk4MywgMTM5OTYsIAorICAgIDE0MDAyLCAxNDAwOCwgMTQwMTgsIDE0MDI3LCAxNDAzNiwgMTQwNDEsIDE0MDQ1LCAxNDA1MSwgMTQwNTcsIDE0MDY0LCAKKyAgICA4OTY2LCAxNDA2OSwgMTQwNzQsIDE0MDgxLCAxNDA4NiwgMTIzNzYsIDE0MDkxLCAxNDA5OSwgMTQxMDUsIDE0MTEwLCAKKyAgICAxNDExOCwgMTQxMjYsIDE0MTMzLCAxNDE0MSwgMTQxNDcsIDE0MTU1LCAxNDE2MywgMTQxNjksIDE0MTc0LCAxNDE4MCwgCisgICAgMTQxODcsIDE0MTkzLCAxNDE5OCwgMTQyMDIsIDE0MjEzLCAxNDIyMSwgMTQyMjcsIDE0MjMyLCAxNDI0MSwgMTQyNDcsIAorICAgIDE0MjUyLCAxNDI2MSwgMTQyNzUsIDM4NTMsIDE0Mjc5LCAxNDI4NCwgMTQyODksIDE0Mjk1LCAxNDMwMCwgMTQzMDUsIAorICAgIDE0MzA5LCAxNDMxNCwgMTQzMTksIDE0MzI0LCA3NzUyLCAxNDMyOSwgMTQzMzQsIDE0MzM5LCAxNDM0NCwgMTQzNDksIAorICAgIDE0MzUzLCAxNDM1OCwgMTQzNjMsIDE0MzY4LCAxNDM3MywgMTQzNzksIDE0Mzg1LCAxNDM5MCwgMTQzOTQsIDE0Mzk5LCAKKyAgICAxNDQwNCwgMTQ0MDksIDkzMDEsIDE0NDE0LCAxNDQxOSwgMTQ0MjQsIDE0NDI5LCAxNDQzNCwgMTQ0NTEsIDE0NDY5LCAKKyAgICAxNDQ4MSwgMTQ0OTQsIDE0NTExLCAxNDUyNywgMTQ1NDQsIDE0NTU0LCAxNDU3MywgMTQ1ODQsIDE0NTk1LCAxNDYwNiwgCisgICAgMTQ2MTcsIDE0NjI5LCAxNDY0MCwgMTQ2NTEsIDE0NjY4LCAxNDY3OSwgMTQ2OTAsIDE0Njk1LCA5MzA2LCAxNDcwMCwgCisgICAgMTQ3MDQsIDIzODEsIDE0NzA4LCAxNDcxMSwgMTQ3MTcsIDE0NzI1LCAxNDczMywgMTQ3MzgsIDE0NzQ2LCAxNDc1NCwgCisgICAgMTQ3NjEsIDE0NzY2LCAxNDc3MiwgMTQ3NzksIDE0Nzg3LCAxNDc5NCwgMTQ4MDYsIDE0ODE0LCAxNDgxOSwgMTE1OTcsIAorICAgIDE0ODI1LCAxNDgzNCwgMTQ4NDMsIDE0ODUxLCAxNDg1OCwgMTQ4NjQsIDE0ODcyLCAxNDg3OSwgMTQ4ODUsIDE0ODkyLCAKKyAgICAxNDg5OCwgMTQ5MDcsIDE0OTE1LCAxNDkyNSwgMTQ5MzIsIDE0OTM4LCAxNDk0NiwgMTQ5NTIsIDE0OTYwLCAxNDk2NywgCisgICAgMTQ5ODAsIDE0OTg3LCAxNDk5NiwgMTUwMDUsIDE1MDE0LCAxNTAyMiwgMTUwMzIsIDE1MDM5LCAxNTA0NCwgMzU2MCwgCisgICAgMTUwNTEsIDE1MDU2LCAxMzcyLCAxNTA2MCwgMTQzMzAsIDE1MDY0LCAxNTA3MCwgMTUwNzQsIDE1MDgyLCAxNTA5NCwgCisgICAgMTUwOTksIDE1MTA2LCAxNTExMiwgMTUxMTcsIDE1MTI0LCAxNDMzNSwgMTUxMjgsIDE1MTMyLCAxNTEzNiwgMTQzNDAsIAorICAgIDE1MTQwLCAxNDM0NSwgMTUxNDQsIDE1MTUxLCAxNTE1NiwgMTUxNjAsIDE1MTY3LCAxNTE3MSwgMTUxNzksIDE1MTg2LCAKKyAgICAxNTE5MCwgMTUxOTcsIDE1MjE0LCAxNTIyMywgMTUyMjcsIDE1MjMwLCAxNTIzOCwgMTUyNDQsIDE1MjQ5LCAzNjM4LCAKKyAgICAxNTI1MywgMTUyNTUsIDE1MjYzLCAxNTI3MCwgMTUyODAsIDE1MjkyLCAxNTI5NywgMTUzMDMsIDE1MzA4LCAxNTMxMiwgCisgICAgMTUzMTgsIDE1MzIzLCAxNTMyOSwgMTUzMzIsIDE1MzM5LCAxNTM0NywgMTUzNTQsIDE1MzYwLCAxNTM2NiwgMTUzNzEsIAorICAgIDE1Mzc4LCAxNTM4NCwgMTUzODksIDE1Mzk2LCAxNTQwMCwgMTU0MDYsIDE1NDEwLCAxNTQxNywgMTU0MjMsIDE1NDI5LCAKKyAgICAxNTQzNywgMTU0NDMsIDE1NDQ4LCAxNTQ1NCwgMTU0NjIsIDE1NDcwLCAxNTQ3NiwgMTU0ODIsIDE1NDg3LCAxNTQ5NCwgCisgICAgMTU0OTksIDE1NTAzLCAxNTUwOSwgMTU1MTQsIDE1NTIxLCAxNTUyNiwgMTU1MzIsIDE1NTM1LCAxNTU0MSwgMTU1NDcsIAorICAgIDE1NTUwLCAxNTU1NCwgMTU1NjYsIDE1NTcyLCAxNTU3NywgMTU1ODQsIDE1NTkwLCAxNTU5NiwgMTU2MDcsIDE1NjE3LCAKKyAgICAxNTYyNiwgMTU2MzQsIDE1NjQxLCAxNTY1MiwgMTU2NjIsIDE1NjcyLCAxNTY4MCwgMTU2ODMsIDE0MzU5LCAxNTY4OCwgCisgICAgMTU2OTMsIDE0MzY0LCAxNDQ5OSwgMTU3MDEsIDE1NzE0LCAxNTcyOSwgMTU3NDAsIDE0NTE2LCAxNTc1OCwgMTU3NzEsIAorICAgIDE1Nzg0LCAxNTc5NSwgMTA0OTIsIDE1ODA2LCAxNTgxOSwgMTU4MzgsIDE1ODQ5LCAxNTg2MCwgMTU4NzEsIDI2NDksIAorICAgIDE1ODg0LCAxNTg4OCwgMTU4OTYsIDE1OTExLCAxNTkyNiwgMTU5MzcsIDE1OTQ0LCAxNTk1MCwgMTU5NTgsIDE1OTYyLCAKKyAgICAxNTk2OCwgMTU5NzEsIDE1OTgxLCAxNTk4OSwgMTU5OTYsIDE2MDA0LCAxNjAxNCwgMTYwMTksIDE2MDI2LCAxNjAzMSwgCisgICAgMTYwMzgsIDE2MDQ5LCAxNjA1OSwgMTYwNjUsIDE2MDcwLCAxNjA3NSwgMTQzNjksIDE2MDc5LCAxNjA4NSwgMTYwOTEsIAorICAgIDE2MDk2LCAxNjEwMSwgMTYxMDYsIDE2MTEwLCAxNDM3NCwgMTQzODAsIDE2MTE0LCAxNDM4NiwgMTYxMTksIDE2MTI3LCAKKyAgICAxNjEzNiwgMTYxNDMsIDkxNTAsIDE2MTQ3LCAxNjE0OSwgMTYxNTQsIDE2MTU5LCAxNjE2NSwgMTYxNzAsIDE2MTc1LCAKKyAgICAxNjE4MCwgMTYxODUsIDE2MTg5LCAxNjE5NSwgMTYyMDEsIDE2MjA2LCAxNjIxMiwgMTYyMTcsIDE2MjIyLCAxNjIyOCwgCisgICAgMTYyMzMsIDE2MjM4LCAxNjI0MywgMTYyNDgsIDE2MjU0LCAxNjI1OSwgMTYyNjQsIDE2MjcwLCAxNjI3NiwgMTYyODEsIAorICAgIDE2Mjg2LCAxNjI5MywgMTYyOTksIDE2MzEwLCAxNjMxNywgMTYzMjIsIDE2MzI2LCAxNjMzMCwgMTYzMzMsIDE2MzQxLCAKKyAgICAxNjM0NiwgMTYzNTMsIDE2MzYwLCAxNjM2NiwgMTYzNzEsIDE2Mzc2LCAxNjM4MywgMTYzOTMsIDE2Mzk4LCAxNjQwNSwgCisgICAgMTY0MTEsIDE2NDIxLCAxNjQzMSwgMTY0NDUsIDE2NDU5LCAxNjQ3MywgMTY0ODcsIDE2NTAyLCAxNjUxNywgMTY1MzQsIAorICAgIDE2NTUyLCAxNjU2NSwgMTY1NzEsIDE2NTc2LCAxNjU4MSwgMTY1ODUsIDE2NTkwLCAxNjU5OCwgMTY2MDQsIDE2NjA5LCAKKyAgICAxNjYxNCwgMTY2MTgsIDE2NjIzLCAxNjYyNywgMTY2MzIsIDE2NjM2LCAxNjY0NywgMTY2NTMsIDE2NjU4LCAxNjY2MywgCisgICAgMTY2NzAsIDE2Njc1LCAxNjY3OSwgMTY2ODQsIDE2Njg5LCAxNjY5NSwgMTY3MDIsIDE2NzA4LCAxNjcxMywgMTY3MTcsIAorICAgIDE2NzIzLCAxNjcyOCwgMTY3MzMsIDE2NzM3LCAxNjc0MywgMTY3NDgsIDE2NzUzLCAxNjc2MCwgMTY3NjUsIDEzMTExLCAKKyAgICAxNjc2OSwgMTY3NzQsIDE2Nzc4LCAxNjc4MywgMTY3ODksIDE2Nzk1LCAxNjgwMiwgMTY4MTIsIDE2ODIwLCAxNjgyNywgCisgICAgMTY4MzIsIDE2ODM2LCAxNjg0NSwgMTY4NTMsIDE2ODYwLCAxNjg2NywgMTY4NzMsIDE2ODc5LCAxNjg4NCwgMTY4ODksIAorICAgIDE2ODk1LCAxNjkwMCwgMTY5MDYsIDE2OTExLCAxNjkxNywgMTY5MjMsIDE2OTMwLCAxNjkzNiwgMTY5NDEsIDE2OTQ2LCAKKyAgICA5MzQ4LCAxNjk1NSwgMTY5NTgsIDE2OTY0LCAxNjk2OSwgMTY5NzQsIDE2OTg0LCAxNjk5MSwgMTY5OTcsIDE3MDAyLCAKKyAgICAxNzAwNywgMTcwMTMsIDE3MDE4LCAxNzAyNCwgMTcwMjksIDE3MDM1LCAxNzA0MSwgMTcwNDYsIDE3MDU0LCAxNzA2MSwgCisgICAgMTcwNjYsIDE3MDcxLCAxNzA3NywgMTcwODIsIDE3MDg2LCAxNzA5NSwgMTcxMDYsIDE3MTEzLCAxNzExOCwgMTcxMjYsIAorICAgIDE3MTMyLCAxNzEzOSwgMTcxNDUsIDE3MTUwLCAxNzE1NCwgMTcxNjAsIDE3MTY1LCAxNzE3MCwgMTcxNzUsIDE0NDAsIAorICAgIDc3NzcsIDI4NzcsIDE3MTc5LCAxNzE4MywgMTcxODcsIDE3MTkxLCAxNzE5NSwgMTcxOTksIDE3MjAyLCAxNzIwOSwgCisgICAgMTcyMTcsIDE0NDAwLCAxNzIyNCwgMTcyMzQsIDE3MjQyLCAxNzI0OSwgMTcyNTcsIDE3MjY3LCAxNzI3NiwgMTcyODksIAorICAgIDE3Mjk0LCAxNzI5OSwgMTczMDcsIDE3MzE0LCAxMzIwNywgMTMyMTYsIDE3MzIxLCAxNzMzMSwgMTczNDYsIDE3MzUyLCAKKyAgICAxNzM1OSwgMTczNjYsIDE3MzcyLCAxNzM4MCwgMTczOTAsIDE3NDAwLCAxNDQwNSwgMTc0MDksIDE3NDE1LCAxNzQyMSwgCisgICAgMTc0MjksIDE3NDM3LCAxNzQ0MiwgMTc0NTEsIDE3NDU5LCAxNzQ3MSwgMTc0ODEsIDE3NDkxLCAxNzUwMSwgMTc1MTAsIAorICAgIDE3NTIyLCAxNzUzMiwgMTc1NDIsIDE3NTUzLCAxNzU1OCwgMTc1NzAsIDE3NTgyLCAxNzU5NCwgMTc2MDYsIDE3NjE4LCAKKyAgICAxNzYzMCwgMTc2NDIsIDE3NjU0LCAxNzY2NiwgMTc2NzgsIDE3Njg5LCAxNzcwMSwgMTc3MTMsIDE3NzI1LCAxNzczNywgCisgICAgMTc3NDksIDE3NzYxLCAxNzc3MywgMTc3ODUsIDE3Nzk3LCAxNzgwOSwgMTc4MjAsIDE3ODMyLCAxNzg0NCwgMTc4NTYsIAorICAgIDE3ODY4LCAxNzg4MCwgMTc4OTIsIDE3OTA0LCAxNzkxNiwgMTc5MjgsIDE3OTQwLCAxNzk1MSwgMTc5NjMsIDE3OTc1LCAKKyAgICAxNzk4NywgMTc5OTksIDE4MDExLCAxODAyMywgMTgwMzUsIDE4MDQ3LCAxODA1OSwgMTgwNzEsIDE4MDgyLCAxODA5NCwgCisgICAgMTgxMDYsIDE4MTE4LCAxODEzMCwgMTgxNDIsIDE4MTU0LCAxODE2NiwgMTgxNzgsIDE4MTkwLCAxODIwMiwgMTgyMTMsIAorICAgIDE4MjI1LCAxODIzNywgMTgyNDksIDE4MjYxLCAxODI3MywgMTgyODUsIDE4Mjk3LCAxODMwOSwgMTgzMjEsIDE4MzMzLCAKKyAgICAxODM0NCwgMTgzNTYsIDE4MzY4LCAxODM4MCwgMTgzOTIsIDE4NDA0LCAxODQxNiwgMTg0MjgsIDE4NDQwLCAxODQ1MiwgCisgICAgMTg0NjQsIDE4NDc1LCAxODQ4NywgMTg0OTksIDE4NTExLCAxODUyMywgMTg1MzYsIDE4NTQ5LCAxODU2MiwgMTg1NzUsIAorICAgIDE4NTg4LCAxODYwMSwgMTg2MTQsIDE4NjI2LCAxODYzOSwgMTg2NTIsIDE4NjY1LCAxODY3OCwgMTg2OTEsIDE4NzA0LCAKKyAgICAxODcxNywgMTg3MzAsIDE4NzQzLCAxODc1NiwgMTg3NjgsIDE4NzgxLCAxODc5NCwgMTg4MDcsIDE4ODIwLCAxODgzMywgCisgICAgMTg4NDYsIDE4ODU5LCAxODg3MiwgMTg4ODUsIDE4ODk4LCAxODkxMCwgMTg5MjMsIDE4OTM2LCAxODk0OSwgMTg5NjIsIAorICAgIDE4OTc1LCAxODk4OCwgMTkwMDEsIDE5MDE0LCAxOTAyNywgMTkwNDAsIDE5MDUyLCAxOTA2NSwgMTkwNzgsIDE5MDkxLCAKKyAgICAxOTEwNCwgMTkxMTcsIDE5MTMwLCAxOTE0MywgMTkxNTYsIDE5MTY5LCAxOTE4MiwgMTkxOTQsIDE5MjA3LCAxOTIyMCwgCisgICAgMTkyMzMsIDE5MjQ2LCAxOTI1OSwgMTkyNzIsIDE5Mjg1LCAxOTI5OCwgMTkzMTEsIDE5MzI0LCAxOTMzNiwgMTkzNDcsIAorICAgIDE5MzYwLCAxOTM3MywgMTkzODYsIDE5Mzk5LCAxOTQxMiwgMTk0MjUsIDE5NDM4LCAxOTQ1MSwgMTk0NjQsIDE5NDc3LCAKKyAgICAxOTQ4OSwgMTk1MDIsIDE5NTE1LCAxOTUyOCwgMTk1NDEsIDE5NTU0LCAxOTU2NywgMTk1ODAsIDE5NTkzLCAxOTYwNiwgCisgICAgMTk2MTksIDE5NjMxLCAxOTY0NCwgMTk2NTcsIDE5NjcwLCAxOTY4MywgMTk2OTYsIDE5NzA5LCAxOTcyMiwgMTk3MzUsIAorICAgIDE5NzQ4LCAxOTc2MSwgMTk3NzMsIDE5Nzg2LCAxOTc5OSwgMTk4MTIsIDE5ODI1LCAxOTgzOCwgMTk4NTEsIDE5ODY0LCAKKyAgICAxOTg3NywgMTk4OTAsIDE5OTAzLCAxOTkxNSwgMTk5MjgsIDE5OTQxLCAxOTk1NCwgMTk5NjcsIDE5OTgwLCAxOTk5MywgCisgICAgMjAwMDYsIDIwMDE5LCAyMDAzMiwgMjAwNDUsIDIwMDU3LCAyMDA3MCwgMjAwODMsIDIwMDk2LCAyMDEwOSwgMjAxMjIsIAorICAgIDIwMTM1LCAyMDE0OCwgMjAxNjEsIDIwMTc0LCAyMDE4NywgMjAxOTksIDIwMjEyLCAyMDIyNSwgMjAyMzgsIDIwMjUxLCAKKyAgICAyMDI2NCwgMjAyNzcsIDIwMjkwLCAyMDMwMywgMjAzMTYsIDIwMzI5LCAyMDM0MSwgMjAzNTQsIDIwMzY3LCAyMDM4MCwgCisgICAgMjAzOTMsIDIwNDA2LCAyMDQxOSwgMjA0MzIsIDIwNDQ1LCAyMDQ1OCwgMjA0NzEsIDIwNDgzLCAyMDQ5NiwgMjA1MDksIAorICAgIDIwNTIyLCAyMDUzNSwgMjA1NDgsIDIwNTYxLCAyMDU3NCwgMjA1ODcsIDIwNjAwLCAyMDYxMywgMjA2MjUsIDIwNjM4LCAKKyAgICAyMDY1MSwgMjA2NjQsIDIwNjc3LCAyMDY5MCwgMjA3MDMsIDIwNzE2LCAyMDcyOSwgMjA3NDIsIDIwNzU1LCAyMDc2NywgCisgICAgMjA3NzgsIDIwNzg2LCAyMDc5NCwgMjA4MDEsIDIwODA3LCAyMDgxMSwgMjA4MTcsIDIwODIzLCAyMDgzMSwgMjA4MzcsIAorICAgIDIwODQyLCAyMDg0NiwgMjA4NTUsIDkxNTUsIDIwODY2LCAyMDg3MywgMjA4ODEsIDIwODg4LCAyMDg5NSwgMTA5NDgsIAorICAgIDIwOTAyLCAyMDkxMSwgMjA5MTYsIDIwOTIxLCA3ODA1LCAyMDkyOCwgMjA5MzMsIDIwOTM2LCAyMDk0MSwgMjA5NDksIAorICAgIDIwOTU2LCAyMDk2MywgMjA5NzAsIDIwOTc2LCAyMDk4NSwgMjA5OTQsIDIxMDAwLCAyMTAwOSwgMjEwMTMsIDIxMDE5LCAKKyAgICAyMTAyNCwgMjEwMzQsIDIxMDQxLCAyMTA0NywgMjEwNTUsIDIxMDYxLCAyMTA2OCwgMjEwNzgsIDIxMDg3LCAyMTA5MSwgCisgICAgMjEwOTgsIDIxMTAyLCAyMTEwNywgMjExMTMsIDIxMTIxLCAyMTEyNSwgMjExMzUsIDE0NDE1LCAyMTE0NCwgMjExNTAsIAorICAgIDIxMTU0LCAyMTE2MywgMTQ0MjAsIDIxMTY5LCAyMTE3NiwgMjExODcsIDIxMTk1LCAyMTIwNCwgMjEyMTIsIDg5MzEsIAorICAgIDIxMjIwLCAyMTIyNSwgMjEyMzEsIDIxMjM2LCAyMTI0MCwgMjEyNDQsIDIxMjQ4LCA5NjM5LCAyMTI1MywgMjEyNjEsIAorICAgIDIxMjY4LCAyMTI3NywgMjEyODQsIDIxMjkxLCAxMDg3OCwgMjEyOTgsIDIxMzA0LCAyMTMwOCwgMjEzMTQsIDIxMzIxLCAKKyAgICAyMTMyNywgMjEzMzUsIDIxMzQxLCAyMTM0OCwgMjEzNTQsIDIxMzYwLCAyMTM2OSwgMjEzNzMsIDIxMzgxLCAyMTM5MCwgCisgICAgMjEzOTcsIDIxNDAyLCAyMTQwNiwgMjE0MTcsIDIxNDIyLCAyMTQyNywgMjE0MzIsIDIxNDQ1LCA3OTk1LCAyMTQ0OSwgCisgICAgMjE0NTUsIDIxNDYzLCAyMTQ2NywgMjE0NzQsIDIxNDgzLCAyMTQ4OCwgMTQ2OTEsIDIxNDk2LCAyMTUwMCwgMjE1MTIsIAorICAgIDIxNTE3LCAyMTUyMSwgMjE1MjQsIDIxNTMwLCAyMTUzNiwgMjE1NDEsIDIxNTQ1LCAyMTU0OCwgMjE1NTksIDIxNTY0LCAKKyAgICA5MzgzLCAyMTU3MSwgMjE1NzYsIDkzODgsIDIxNTgxLCAyMTU4NiwgMjE1OTEsIDIxNTk2LCAyMTYwMSwgMjE2MDYsIAorICAgIDIxNjExLCAyMTYxNiwgMjE2MjEsIDIxNjI2LCAyMTYzMSwgMjE2MzYsIDIxNjQyLCAyMTY0NywgMjE2NTIsIDIxNjU3LCAKKyAgICAyMTY2MiwgMjE2NjcsIDIxNjcyLCAyMTY3NywgMjE2ODIsIDIxNjg3LCAyMTY5MywgMjE2OTksIDIxNzA0LCAyMTcwOSwgCisgICAgMjE3MTQsIDIxNzE5LCAyMTcyNCwgMjE3MjksIDIxNzM0LCAyMTczOSwgMjE3NDQsIDIxNzUwLCAyMTc1NSwgMjE3NjAsIAorICAgIDIxNzY1LCAyMTc3MSwgMjE3NzcsIDIxNzgyLCAyMTc4NywgMjE3OTIsIDIxNzk3LCAyMTgwMiwgMjE4MDcsIDIxODEyLCAKKyAgICAyMTgxNywgMjE4MjMsIDIxODI4LCAyMTgzMywgMjE4MzgsIDIxODQzLCAyMTg0OSwgMjE4NTQsIDIxODU5LCAyMTg2MywgCisgICAgMTM2OCwgMTI5LCAyMTg3MSwgMjE4NzUsIDIxODc5LCAyMTg4MywgMjE4ODgsIDIxODkyLCAxMzExNywgMTI0NzYsIDIxODk2LCAKKyAgICAyMTkwMSwgMjE5MDUsIDIxOTEwLCAyMTkxNCwgMjE5MTksIDIxOTIzLCAyMTkyOSwgMjE5MzQsIDIxOTM4LCAyMTk0MiwgCisgICAgMjE5NTAsIDIxOTU0LCAyMTk1OCwgMjE5NjMsIDIxOTY4LCAyMTk3MiwgMjE5NzgsIDIxOTgzLCAyMTk4NywgMjE5OTIsIAorICAgIDIxOTk3LCAyMjAwMSwgMjIwMDgsIDIyMDE1LCAyMjAyMiwgMjIwMjYsIDIyMDMwLCAyMjAzNSwgMjIwMzksIDIyMDQyLCAKKyAgICAyMjA0OCwgMjIwNjEsIDIyMDY2LCAyMjA3NSwgMjIwODAsIDk0MjgsIDIyMDg1LCAyMjA4OCwgMjcxMiwgMjcxNywgMjIwOTIsIAorICAgIDIyMDk4LCAyMjEwNCwgNzIwOSwgMjIxMDksIDIyMTE0LCAyMjExOSwgMjIxMjUsIDIyMTMwLCAxMzkwOSwgMjIxMzUsIAorICAgIDIyMTQwLCAyMjE0NSwgMjIxNTAsIDIyMTU2LCAyMjE2MSwgMjIxNjYsIDIyMTcyLCAyMjE3NywgMjIxODEsIDIyMTg2LCAKKyAgICAyMjE5MSwgMjIxOTYsIDIyMjAxLCAyMjIwNSwgMjIyMTAsIDIyMjE0LCAyMjIxOSwgMjIyMjQsIDIyMjI5LCAyMjIzNCwgCisgICAgMjIyMzgsIDIyMjQzLCAyMjI0NywgMjIyNTIsIDIyMjU3LCAyMjI2MiwgMjIyNjcsIDI4ODYsIDIyMTgyLCAyMjI3MSwgCisgICAgMjIyNzksIDIyMjg2LCA5NzMzLCAyMjI5OCwgMjIzMDYsIDIyMTg3LCAyMjMxMywgMjIzMTgsIDIyMzI2LCAyMjE5MiwgCisgICAgMjIzMzEsIDIyMzM2LCAyMjM0NCwgMjIzNDksIDIyMTk3LCAyMjM1NCwgMjIzNTksIDIyMzYzLCAyMjM2OSwgMjIzNzcsIAorICAgIDIyMzgwLCAyMjM4NywgMjIzOTEsIDIyMzk1LCAyMjQwMSwgMjI0MDgsIDIyNDEzLCA4OTU4LCAxNzI3LCAxNzMyLCAyMjQxNywgCisgICAgMjI0MjMsIDIyNDI5LCAyMjQzNCwgMjI0MzgsIDIyNDQyLCAyMjQ0NiwgMjI0NTAsIDIyNDU0LCAyMjQ1OCwgMjI0NjIsIAorICAgIDIyNDY2LCAyMjQ2OSwgMjI0NzUsIDIyNDgyLCAyMjQ5MCwgMjI0OTYsIDIyNTAyLCAyMjUwNywgMjI1MTIsIDIyNTE2LCAKKyAgICAxMzgyOSwgMTM4MzYsIDIyNTIxLCAyMjUzMywgMjI1MzYsIDIyNTQzLCAxNjM2MiwgMjI1NTAsIDIyNTU4LCAyMjU2OSwgCisgICAgMjI1NzgsIDIyNTkxLCAyMjYwMSwgMjI2MTUsIDIyNjI3LCAyMjY0MSwgMjI2NTMsIDIyNjYzLCAyMjY3NSwgMjI2ODEsIAorICAgIDIyNjk2LCAyMjcyMCwgMjI3MzgsIDIyNzU3LCAyMjc3MCwgMjI3ODQsIDIyODAyLCAyMjgxOCwgMjI4MzUsIDIyODUzLCAKKyAgICAyMjg2NCwgMjI4ODMsIDIyOTAwLCAyMjkyMCwgMjI5MzgsIDIyOTUwLCAyMjk2NCwgMjI5NzgsIDIyOTkwLCAyMzAwNywgCisgICAgMjMwMjYsIDIzMDQ0LCAyMzA1NiwgMjMwNzQsIDIzMDkzLCAxNDU1OSwgMjMxMDYsIDIzMTI2LCAyMzEzOCwgMTA1MjMsIAorICAgIDIzMTUwLCAyMzE1NSwgMjMxNjAsIDIzMTY1LCAyMzE3MSwgMjMxNzYsIDIzMTgwLCAyMzE4NywgMjM5OCwgMjMxOTEsIAorICAgIDIzMTk3LCAyMzIwMSwgMjMyMDQsIDIzMjA4LCAyMzIxNiwgMjMyMjIsIDIyMjE1LCAyMzIyNiwgMjMyMzUsIDIzMjQ2LCAKKyAgICAyMzI1MiwgMjMyNTgsIDIzMjY3LCAyMzI3NSwgMjMyODIsIDIzMjg3LCAyMzI5MSwgMjMyOTgsIDIzMzA0LCAyMzMxMywgCisgICAgMjMzMjEsIDIzMzI4LCAyMzMzOCwgMjMzNDcsIDIzMzU3LCAyMzM2MiwgMjMzNzEsIDIzMzgwLCAyMzM5MSwgMjM0MDIsIAorICAgIDM5NjMsIDIzNDEyLCAyMzQxNiwgMjM0MjYsIDIzNDM0LCAyMzQ0NCwgMjM0NTUsIDIzNDYwLCAyMzQ3MCwgMjM0NzgsIAorICAgIDIzNDg1LCAyMzQ5MSwgMjM0OTgsIDIzNTAzLCAyMjIyNSwgMjM1MDcsIDIzNTE2LCAyMzUyMCwgMjM1MjMsIDIzNTI4LCAKKyAgICAyMzUzNSwgMjM1NDQsIDIzNTUyLCAyMzU2MCwgMjM1NzAsIDIzNTc5LCAyMzU4NSwgMjM1OTEsIDIyMjMwLCAyMjIzNSwgCisgICAgMjM1OTUsIDIzNjA1LCAyMzYxNSwgMjM2MjUsIDIzNjMzLCAyMzY0MCwgMjM2NTAsIDIzNjU4LCAyMzY2NiwgMjM2NzIsIAorICAgIDIzNjgwLCA5MzAsIDIzNjg5LCAxNDc1MCwgNTQyLCAyMzcwMywgMjM3MTIsIDIzNzIwLCAyMzczMSwgMjM3NDIsIDIzNzUyLCAKKyAgICAyMzc2MSwgMjM3NzMsIDIzNzgyLCAyMzc5MSwgMjM3OTcsIDIzODA2LCAyMzgxNSwgMjM4MjUsIDIzODMzLCAyMzg0MSwgCisgICAgOTM2MCwgMjM4NDcsIDIzODUwLCAyMzg1NCwgMjM4NTksIDIzODY0LCA5ODQ4LCAyMjI0OCwgMjIyNTMsIDIzODcyLCAKKyAgICAyMzg3OCwgMjM4ODQsIDIzODg5LCAyMzg5NCwgMjM4OTgsIDIzOTA2LCAyMzkxMiwgMjM5MTgsIDIzOTIyLCAzNTI1LCAKKyAgICAyMzkzMCwgMjM5MzUsIDIzOTQwLCAyMzk0NCwgMjM5NDgsIDk5MjgsIDIzOTU1LCAyMzk2MywgMjM5NzcsIDIzOTg0LCAKKyAgICAyMzk5MCwgOTkzNywgOTk0MywgMjM5OTgsIDI0MDA2LCAyNDAxMywgMjQwMTgsIDI0MDIzLCAyMjI1OCwgMjQwMjksIAorICAgIDI0MDQwLCAyNDA0NCwgMjQwNDksIDI2MDEsIDI0MDU0LCAyNDA2NSwgMjQwNzEsIDI0MDc2LCAyNDA4MCwgMjQwODQsIAorICAgIDI0MDg3LCAyNDA5NCwgMjQxMDEsIDI0MTA4LCAyNDExNCwgMjQxMTgsIDIyMjYzLCAyNDEyMywgMjQxMjcsIDI0MTMxLCAKKyAgICAxMDM3LCAyNDEzNiwgMjQxNDEsIDI0MTQ2LCAyNDE1MSwgMjQxNTYsIDI0MTYxLCAyNDE2NiwgMjQxNzEsIDI0MTc2LCAKKyAgICAyNDE4MSwgMjQxODYsIDI0MTkxLCAyNDE5NiwgMjQyMDEsIDI0MjA3LCAyNDIxMiwgMjQyMTcsIDI0MjIyLCAyNDIyNywgCisgICAgMjQyMzIsIDI0MjM3LCAyNDI0MywgMjQyNDgsIDI0MjUzLCAyNDI1OCwgMjQyNjMsIDI0MjY4LCAyNDI3MywgMjQyNzgsIAorICAgIDI0Mjg0LCAyNDI5MCwgMjQyOTUsIDI0MzAxLCAyNDMwNiwgMjQzMTEsIDUsIDI0MzE3LCAyNDMyMSwgMjQzMjUsIDI0MzI5LCAKKyAgICAyNDMzNCwgMjQzMzgsIDI0MzQyLCAyNDM0NiwgMjQzNTAsIDI0MzU1LCAyNDM1OSwgMjQzNjQsIDI0MzY4LCAyNDM3MSwgCisgICAgMjQzNzUsIDI0MzgwLCAyNDM4NCwgMjQzODksIDI0MzkzLCAyNDM5NywgMjQ0MDEsIDI0NDA2LCAyNDQxMCwgMjQ0MTQsIAorICAgIDI0NDI0LCAyNDQyOSwgMjQ0MzMsIDI0NDM3LCAyNDQ0MiwgMjQ0NDcsIDI0NDU2LCAyNDQ2MSwgMjQ0NjYsIDI0NDcwLCAKKyAgICAyNDQ3NCwgMjQ0ODcsIDI0NDk5LCAyNDUwOCwgMjQ1MTcsIDI0NTIzLCAyNDUyOCwgMjQ1MzIsIDI0NTM2LCAyNDU0NiwgCisgICAgMjQ1NTUsIDI0NTYzLCAyNDU2OSwgMjQ1NzQsIDI0NTc4LCAyNDU4NSwgMjQ1OTUsIDI0NjA0LCAyNDYxMiwgMjQ2MjAsIAorICAgIDI0NjI3LCAyNDYzNSwgMjQ2NDQsIDI0NjUzLCAyNDY2MSwgMjQ2NjYsIDI0NjcwLCAyNDY3NCwgMjQ2NzcsIDI0Njc5LCAKKyAgICAyNDY4MywgMjQ2ODcsIDI0NjkyLCAyNDY5NywgMjQ3MDEsIDI0NzA1LCAyNDcwOCwgMjQ3MTIsIDI0NzE1LCAyNDcxOSwgCisgICAgMjQ3MjIsIDI0NzI1LCAyNDcyOSwgMjQ3MzUsIDI0NzM5LCAyNDc0MywgMjQ3NDcsIDI0NzUyLCAyNDc1NywgMjQ3NjIsIAorICAgIDI0NzY2LCAyNDc2OSwgMjQ3NzQsIDI0NzgwLCAyNDc4NSwgMjQ3OTEsIDI0Nzk2LCAyNDgwMCwgMjQ4MDQsIDI0ODA4LCAKKyAgICAyNDgxMywgMjQ4MTcsIDI0ODIyLCAyNDgyNiwgMjQ4MzAsIDI0ODM3LCAyNDg0MSwgMjQ4NDQsIDI0ODQ4LCAyNDg1NCwgCisgICAgMjQ4NjAsIDI0ODY0LCAyNDg2OCwgMjQ4NzMsIDI0ODgwLCAyNDg4NiwgMjQ4OTAsIDI0ODk5LCAyNDkwMywgMjQ5MDcsIAorICAgIDI0OTEwLCAyNDkxNiwgMjQ5MjEsIDI0OTI3LCAxNDg5LCAxNzkxLCAyNDkzMiwgMjQ5MzcsIDI0OTQyLCAyNDk0NywgCisgICAgMjQ5NTIsIDI0OTU3LCAyNDk2MiwgMjE0OCwgMjE5NCwgMjQ5NjcsIDI0OTcwLCAyNDk3NCwgMjQ5NzgsIDI0OTgzLCAKKyAgICAyNDk4NywgMjQ5OTEsIDI0OTk0LCAyNDk5OSwgMjUwMDQsIDI1MDA4LCAyNTAxMSwgMjUwMTYsIDI1MDIwLCAyNTAyNSwgCisgICAgMjUwMjksIDE0NzYyLCAyNTAzNCwgMjUwMzcsIDI1MDQwLCAyNTA0NCwgMjUwNDksIDI1MDUzLCAyNTA2NiwgMjUwNzAsIAorICAgIDI1MDczLCAyNTA4MSwgMjUwOTAsIDI1MDk3LCAyNTEwMiwgMjUxMDgsIDI1MTE0LCAyNTEyMiwgMjUxMjksIDI1MTM2LCAKKyAgICAyNTE0MCwgMjUxNDQsIDI1MTQ4LCAyNTE1MywgMjUxNTgsIDI1MTYyLCAyNTE3MCwgMjUxNzUsIDI1MTg3LCAyNTE5OCwgCisgICAgMjUyMDMsIDI1MjA3LCAyNTIxMSwgMjUyMTcsIDI1MjIyLCAyNTIyNywgMjUyMzEsIDI1MjM1LCAyNTIzOCwgMjUyNDQsIAorICAgIDc5MTUsIDIzMTYsIDI1MjQ4LCAyNTI1MywgMjUyNjksIDk0NzUsIDI1Mjg5LCAyNTI5OCwgMjUzMTQsIDI1MzE4LCAyNTMyMSwgCisgICAgMjUzMjcsIDI1MzM3LCAyNTM0MywgMjUzNTIsIDI1MzY3LCAyNTM3OSwgMjUzOTAsIDI1Mzk4LCAyNTQwNywgMjU0MTMsIAorICAgIDI1NDIyLCAyNTQzMiwgMjU0NDMsIDI1NDU0LCAyNTQ2MywgMjU0NzAsIDI1NDc5LCAyNTQ4NywgMjU0OTQsIDI1NTAyLCAKKyAgICAyNTUwOSwgMjU1MTYsIDI1NTI5LCAyNTUzNiwgMjU1NDIsIDI1NTQ3LCAyNTU1NiwgMjU1NjIsIDI1NTY3LCAyNTU3NSwgCisgICAgMjU1ODIsIDIzNDM2LCAyNTU5NCwgMjU2MDYsIDI1NjIwLCAyNTYyOCwgMjU2MzUsIDI1NjQ3LCAyNTY1NiwgMjU2NjUsIAorICAgIDI1NjczLCAyNTY4MSwgMjU2ODksIDI1Njk2LCAyNTcwNSwgMjU3MTMsIDI1NzIzLCAyNTczMiwgMjU3NDIsIDI1NzUxLCAKKyAgICAyNTc2MCwgMjU3NjgsIDI1NzczLCAyNTc3NywgMjU3ODAsIDI1Nzg0LCAyNTc4OCwgMjU3OTIsIDI1Nzk2LCAyNTgwMCwgCisgICAgMjU4MDYsIDI1ODEyLCAyNTgyMCwgMTQ4MDcsIDI1ODI3LCAyNTgzMiwgMjU4MzksIDI1ODQ1LCAyNTg1MiwgMTQ4MTUsIAorICAgIDI1ODU5LCAyNTg2MiwgMjU4NzQsIDI1ODgyLCAyNTg4OCwgMjU4OTMsIDI1ODk3LCA5ODc4LCAyNTkwOCwgMjU5MTgsIAorICAgIDI1OTI3LCAyNTkzNCwgMjU5MzgsIDE0ODIwLCAyNTk0MSwgMjU5NDgsIDI1OTUyLCAyNTk1OCwgMjU5NjEsIDI1OTY4LCAKKyAgICAyNTk3NCwgMjU5ODEsIDI1OTg3LCAyNTk5MSwgMjU5OTYsIDI2MDAwLCAyNjAwOSwgMjYwMTYsIDI2MDIyLCA3OTU2LCAKKyAgICAyNjAyOSwgMjYwMzcsIDI2MDQ0LCAyNjA1MCwgMjYwNTUsIDI2MDYxLCAyNjA2NywgMjYwNzUsIDI2MDc5LCAyNjA4MiwgCisgICAgMjYwODQsIDI1Nzg1LCAyNjA5MywgMjYwOTksIDI2MTA5LCAyNjExNCwgMjYxMjEsIDI2MTI3LCAyNjEzMiwgMjYxMzcsIAorICAgIDI2MTQyLCAyNjE0NiwgMjYxNTEsIDI2MTU4LCAyNjE2NywgMjYxNzEsIDI2MTc4LCAyNjE4NywgMjYxOTMsIDI2MTk4LCAKKyAgICAyNjIwNCwgMjYyMDksIDI2MjE2LCAyNjIyNywgMjYyMzIsIDI2MjM2LCAyNjI0NiwgMjYyNTIsIDI2MjU2LCAyNjI2MSwgCisgICAgMjYyNzEsIDI2MjgwLCAyNjI4NCwgMjYyOTEsIDI2Mjk5LCAyNjMwNiwgMjYzMTIsIDI2MzE3LCAyNjMyNSwgMjYzMzIsIAorICAgIDI2MzQ0LCAyNjM1MywgMjYzNTcsIDEzMDUzLCAyNjM2NSwgMjYzNzUsIDI2Mzc5LCAyNTA3NywgMjYzOTAsIDI2Mzk1LCAKKyAgICAyNjM5OSwgMjY0MDYsIDI2NDEzLCAyMTk3NCwgMjU3MTAsIDI2NDE4LCAyNjQyMiwgMjY0MjUsIDIyODcwLCAyNjQzMCwgCisgICAgMjY0NDQsIDI2NDYwLCAyNjQ3OCwgMjY0OTcsIDI2NTE0LCAyNjUzMiwgMjI4ODksIDI2NTQ5LCAyNjU2OSwgMjI5MDYsIAorICAgIDI2NTgxLCAyNjU5MywgMTU3NDUsIDI2NjA1LCAyMjkyNiwgMjY2MTksIDI2NjMxLCAxMDUzNiwgMjY2NDUsIDI2NjUwLCAKKyAgICAyNjY1NSwgMjY2NjAsIDI2NjY2LCAyNjY3MiwgMjY2NzgsIDI2NjgyLCAyNjY4OSwgMjY2OTQsIDI2NzA0LCAyNjcxMCwgCisgICAgMTAxODMsIDI2NzE2LCAyNjcxOCwgMjY3MjMsIDI2NzMxLCAyNjczNSwgMjYxNTQsIDI2NzQxLCAyNjc0OCwgMTE1MjQsIAorICAgIDExNTM0LCAyNjc1NSwgMjY3NjUsIDI2NzcwLCAyNjc3NCwgMjY3NzcsIDI2NzgzLCAyNjc5MSwgMjY4MDMsIDI2ODEzLCAKKyAgICAyNjgyOSwgMjY4NDIsIDI2ODU2LCAxNTc2MywgMjY4NzAsIDI2ODc3LCAyNjg4MSwgMjY4ODQsIDI2ODg5LCAyNjg5MywgCisgICAgMjY5MDAsIDI2OTA3LCAyNjkxNywgMjY5MjIsIDI2OTI3LCAyNjkzMiwgMjY5NDAsIDI2OTQ4LCAyNjk1NywgMjY5NjIsIAorICAgIDk1NzIsIDI2OTY2LCAyNjk2OSwgMjY5NzIsIDI2OTc3LCAyNjk4NCwgMjY5ODksIDI3MDA1LCAyNzAxMywgMjcwMjEsIAorICAgIDk0MjMsIDI3MDI5LCAyNzAzNCwgMjcwMzgsIDI3MDQ0LCAyNzA1MCwgMjcwNTMsIDI3MDU5LCAyNzA3MSwgMjcwNzksIAorICAgIDI3MDg2LCAyNzA5MiwgMjcwOTksIDI3MTEwLCAyNzEyNCwgMjcxMzcsIDI3MTQ2LCAyNzE1NSwgMjcxNjcsIDI3MTc4LCAKKyAgICAyNzE4OCwgMjcxOTcsIDI3MjA2LCAyNzIxNCwgMjcyMjUsIDc5MzgsIDI3MjMyLCAyNzIzOCwgMjcyNDMsIDI3MjQ5LCAKKyAgICAyNzI1NiwgMjcyNjYsIDI3Mjc2LCAyNzI4NSwgMjcyOTEsIDI3Mjk4LCAyNzMwMywgMjczMTAsIDI3MzE4LCAyNzMyNiwgCisgICAgMjczMzgsIDYyNDYsIDI3MzQ1LCAyNzM1NCwgMjczNjIsIDI3MzY4LCAyNzM3NCwgMjczNzksIDI3MzgzLCAyNzM4NiwgCisgICAgMjczOTIsIDI3Mzk5LCAyNzQwNCwgMjc0MDksIDI3NDEzLCAyNzQyNSwgMjc0MzYsIDI3NDQ1LCAyNzQ1MywgMTQ5NDcsIAorICAgIDI3NDU4LCAyNzQ2NCwgMjc0NzAsIDExNTE3LCA4NjM1LCAyNzQ3NSwgMjc0NzksIDI3NDgzLCAyNzQ4NiwgMjc0ODksIAorICAgIDI3NDk1LCAyNzUwMywgMjc1MTEsIDI3NTE1LCAyNzUxOSwgMjc1MjQsIDI3NTI3LCAyNzUzNiwgMjc1NDAsIDI3NTQ4LCAKKyAgICAyNzU1OSwgMjc1NjMsIDI3NTY5LCAyNzU3NSwgMjc1NzksIDI3NTg1LCAyNzU5MywgMjc2MTUsIDI3NjM5LCAyNzY0NiwgCisgICAgMjc2NTMsIDI3NjU5LCAyNzY2NywgMjc2NzMsIDI3Njc4LCAyNzY4OSwgMjc3MDcsIDI3NzE0LCAyNzcyMiwgMjc3MjYsIAorICAgIDI3NzM1LCAyNzc0OCwgMjc3NTYsIDI3NzY4LCAyNzc3OSwgMjc3ODksIDI3ODAzLCAyNzgxMiwgMjc4MjAsIDI3ODMyLCAKKyAgICA5NDkyLCAyNzg0MywgMjc4NTQsIDI3ODY2LCAyNzg3NiwgMjc4ODUsIDI3ODkwLCAyNzg5NCwgMjc5MDIsIDI3OTEyLCAKKyAgICAyNzkxNywgMjc5MjEsIDI3OTI0LCAyNzkyNywgMjc5MzUsIDI3OTQzLCAyNzk1MiwgMjc5NjIsIDI3OTcxLCAyNzk3NywgCisgICAgMjc5OTEsIDI2NjMsIDI4MDEzLCAyODAyNCwgMjgwMzMsIDI4MDQzLCAyODA1NSwgMjgwNjQsIDI4MDczLCAyODA4MywgCisgICAgMjgwOTEsIDI4MDk5LCAyODEwOCwgMjgxMTMsIDI4MTI0LCAyODEyOSwgMjgxNDAsIDI4MTQ0LCAyODE1NCwgMjgxNjMsIAorICAgIDI4MTcxLCAyODE4MSwgMjgxOTEsIDI4MTk5LCAyODIwOCwgMjgyMTUsIDI4MjIzLCAyODIzMCwgMjgyMzksIDI4MjQzLCAKKyAgICAyODI1MSwgMjgyNTgsIDI4MjY2LCAyODI3MywgMjgyODQsIDI4Mjk5LCAyODMwNiwgMjgzMTIsIDI4MzIyLCAyODMzMSwgCisgICAgMjgzMzcsIDI4MzQxLCAyODM0OCwgMjgzNTIsIDE0MDMxLCAyODM1OCwgMjgzNjIsIDI4MzY3LCAyODM3NCwgMjgzNzgsIAorICAgIDI4MzgyLCAyODM5MCwgMjgzOTgsIDI4NDA0LCAyODQxMywgMjg0MjAsIDI4NDI1LCAyODQzMCwgMjg0NDAsIDIzNTA1LCAKKyAgICAyODQ0NCwgMjg0NDcsIDI4NDUyLCAyODQ1NywgMjg0NjIsIDI4NDY3LCAyODQ3MiwgMjg0NzcsIDI4NDgyLCAyODQ4NywgCisgICAgMjg0OTMsIDI4NDk4LCAyODUwMywgMjg1MDksIDEyMTgsIDcwNCwgMjg1MTQsIDI4NTIzLCAyMzY0LCAyODUzMCwgMjg1MzUsIAorICAgIDI4NTM5LCAyODU0NSwgMTI2NywgNTQ2LCAzMTgsIDI4NTUwLCAyODU1OSwgMjg1NjcsIDI4NTc2LCAyODU4NCwgMjg1OTUsIAorICAgIDI4NjA0LCAyODYxMiwgMjg2MTYsIDI4NjE5LCAyODYyNywgMjg2MzUsIDI4NjQwLCAxNDc3NSwgMjg2NDYsIDI4NjUyLCAKKyAgICAyODY1OCwgNTg3MiwgMjg2NjMsIDI4NjY3LCAyODY3MywgMjg2NzcsIDI4Njg0LCAxNDU1LCAyODY5MCwgMjg2OTcsIDk1NzksIAorICAgIDI4NzAxLCAyODcxMSwgMjg3MTksIDI4NzI1LCAyODczNCwgMjg3NDIsIDI4NzQ4LCAyODc1NiwgMjg3NjMsIDExMTEwLCAKKyAgICAyODc2OSwgMjg3NzYsIDI4NzgxLCAyODc4OCwgMTQ5NiwgMjE0NywgMjg3OTQsIDI4ODAwLCAyODgwNywgMjg4MTgsIAorICAgIDI4ODI5LCAyODgzNywgMjg4NDQsIDI4ODU0LCAyODg2MywgMjg4NzEsIDI4ODgwLCAyODg4NywgMjg4OTQsIDI4OTA3LCAKKyAgICAyODkxOCwgMTI3MiwgMjg5MzcsIDI4OTQyLCAyODk1MCwgMzU3NSwgMjg5NTQsIDI4OTU5LCAyODk2MywgMTQ1OSwgMjQ3MDYsIAorICAgIDI4OTczLCAyODk3NywgMjg5ODIsIDI4OTg2LCAzNDkzLCAyODk5MiwgMjkwMDAsIDI5MDA3LCAyOTAxOCwgMjkwMjYsIAorICAgIDI5MDM0LCAzNTc2LCAyNzksIDI5MDM5LCAyOTA0NywgMjkwNTUsIDI5MDYyLCAyOTA2OCwgMjkwNzMsIDIyMTYsIDI5MDgwLCAKKyAgICAyOTA4NiwgMjU5OTIsIDI2MjIyLCAyOTA5MiwgMTA2LCAyOTA5NiwgMjkxMDAsIDI5MTA2LCA2MTUsIDkzMjgsIDI5MTExLCAKKyAgICAyOTExOCwgMjkxMjQsIDIzMjcsIDI5MTI4LCAyOTEzMiwgMTUxODcsIDI5MTM1LCAyOTE0MCwgMjkxNDcsIDI5MTUzLCAKKyAgICAyOTE1OCwgMjkxNjYsIDI5MTczLCAyOTE3OSwgMjIzNTEsIDI5MTgzLCAyOTE4NywgMzY0NiwgMTY2MjUsIDI5MTkxLCAKKyAgICAyOTE5NiwgMjkxOTksIDI5MjA3LCAyOTIxNSwgMjkyMjAsIDI5MjIzLCAyOTIzMCwgMjkyNDAsIDI5MjUyLCAyOTI1NywgCisgICAgMjkyNjEsIDI5MjY5LCAyOTI3NiwgMjkyODIsIDI5Mjg5LCAyOTI5NiwgMjkyOTksIDI5MzAzLCAyOTMwNywgMTQ2MywgCisgICAgMjkzMTcsIDI5MzE5LCAyOTMyNCwgMjkzMzAsIDI5MzM2LCAyOTM0MSwgMjkzNDYsIDI5MzUxLCAyOTM1NiwgMjkzNjEsIAorICAgIDI5MzY2LCAyOTM3MSwgMjkzNzYsIDI5MzgxLCAyOTM4NiwgMjkzOTEsIDI5Mzk2LCAyOTQwMSwgMjk0MDYsIDI5NDEyLCAKKyAgICAyOTQxOCwgMjk0MjQsIDI5NDMwLCAyOTQzNSwgMjk0NDAsIDI5NDQ1LCAyOTQ1MSwgMjk0NTYsIDI5NDYxLCAyOTQ2NiwgCisgICAgMjk0NzIsIDI5NDc3LCAyOTQ4MywgMjk0ODgsIDI5NDkzLCAyOTQ5OCwgMjk1MDMsIDI5NTA5LCAyOTUxNCwgMjk1MjAsIAorICAgIDI5NTI1LCAyOTUzMCwgMjk1MzUsIDI5NTQwLCAyOTU0NiwgMjk1NTEsIDI5NTU3LCAyOTU2MiwgMjk1NjcsIDI5NTcyLCAKKyAgICAyOTU3NywgMjk1ODIsIDI5NTg3LCAyOTU5MiwgMjk1OTcsIDI5NjAyLCAyOTYwOCwgMjk2MTQsIDI5NjIwLCAyOTYyNSwgCisgICAgMjk2MzAsIDI5NjM1LCAyOTY0MCwgMjk2NDYsIDI5NjUyLCAyOTY1OCwgMjk2NjQsIDI5NjcwLCAyOTY3NiwgMjk2ODEsIAorICAgIDI5Njg3LCAyOTY5MiwgMjk2OTcsIDI5NzAyLCAyOTcwNywgMjk3MTMsIDI0NDMsIDI5NzE4LCAyNDUwLCAyNDU3LCAyNzU0LCAKKyAgICAyOTcyMywgMjQ2MywgMjQ3MywgMjk3MjksIDI5NzMzLCAyOTczOCwgMjk3NDMsIDI5NzQ5LCAyOTc1NCwgMjk3NTksIAorICAgIDI5NzYzLCAyOTc2OCwgMjk3NzQsIDI5Nzc5LCAyOTc4NCwgMjk3ODksIDI5Nzk1LCAyOTgwMCwgMjk4MDQsIDI5ODA4LCAKKyAgICAyOTgxMywgMjk4MTgsIDI5ODIzLCAyOTgyOCwgMjk4MzMsIDI5ODM5LCAyOTg0NSwgMjk4NTAsIDI5ODU0LCAyOTg1OSwgCisgICAgMjk4NjUsIDI5ODY5LCAyOTg3NCwgMjk4NzksIDI5ODg0LCAyOTg4OSwgMjk4OTMsIDI5ODk2LCAyOTkwMSwgMjk5MDYsIAorICAgIDI5OTExLCAyOTkxNiwgMjk5MjEsIDI5OTI3LCAyOTkzMywgMjk5MzgsIDI5OTQzLCAyOTk0NywgMjk5NTIsIDI5OTU3LCAKKyAgICAyOTk2MiwgMjk5NjcsIDI5OTcyLCAyOTk3NiwgMjk5ODEsIDI5OTg2LCAyOTk5MSwgMjk5OTUsIDI5OTk5LCAzMDAwMywgCisgICAgMzAwMDgsIDMwMDE2LCAzMDAyMSwgMzAwMjcsIDMwMDMzLCAzMDAzOSwgMzAwNDQsIDMwMDQ4LCAzMDA1MSwgMzAwNTYsIAorICAgIDMwMDYxLCAzMDA2NSwgMzAwNzAsIDMwMDc0LCAzMDA3OSwgMzAwODMsIDMwMDg2LCAzMDA5MSwgMTczMDIsIDMwMDk2LCAKKyAgICAzMDEwMSwgMzAxMDYsIDMwMTE0LCAyMTI4MCwgMjg2OTQsIDkwMjYsIDMwMTE5LCAzMDEyNCwgMzAxMjgsIDMwMTMzLCAKKyAgICAzMDEzNywgMzAxNDEsIDMwMTQ2LCAzMDE1MCwgMzAxNTMsIDMwMTU2LCAzMDE2MCwgMzAxNjUsIDMwMTY5LCAzMDE3NywgCisgICAgMzAxODEsIDMwMTg0LCAzMDE4OSwgMzAxOTMsIDMwMTk3LCAzMDIwMiwgMzAyMDcsIDMwMjExLCAzMDIxNywgMzAyMjIsIAorICAgIDMwMjI3LCAzMDIzNCwgMzAyNDEsIDMwMjQ1LCAzMDI0OCwgMzAyNTQsIDMwMjYzLCAzMDI3MCwgMzAyNzgsIDMwMjg1LCAKKyAgICAzMDI4OSwgMzAyOTQsIDMwMjk4LCAzMDMwMiwgMzAzMDgsIDMwMzE0LCAzMDMxOCwgMzAzMjQsIDMwMzI5LCAzMDMzNCwgCisgICAgMzAzMzgsIDMwMzQ1LCAzMDM1MSwgMzAzNTcsIDMwMzYzLCAzMDM2OSwgMzAzNzYsIDMwMzgyLCAzMDM4OCwgMzAzOTQsIAorICAgIDMwNDAwLCAzMDQwNiwgMzA0MTIsIDMwNDE4LCAzMDQyNSwgMzA0MzEsIDMwNDM4LCAzMDQ0NCwgMzA0NTAsIDMwNDU2LCAKKyAgICAzMDQ2MiwgMzA0NjgsIDMwNDc0LCAzMDQ4MCwgMzA0ODYsIDMwNDkyLCAxMTQxOCwgMzA0OTgsIDMwNTAzLCAzMDUwOCwgCisgICAgMzA1MTEsIDMwNTE5LCAzMDUyNCwgMzA1MzMsIDMwNTM5LCAzMDU0NCwgMzA1NDksIDMwNTU0LCAzMDU1OCwgMzA1NjMsIAorICAgIDMwNTY4LCAzMDU3MywgMzA1NzgsIDMwNTgzLCAzMDU5MCwgMzA1OTcsIDMwNjAzLCAzMDYwOSwgMzA2MTQsIDE2MzAzLCAKKyAgICAzMDYyMSwgMzA2MjcsIDMwNjM0LCAzMDY0MCwgMzA2NDYsIDMwNjUxLCAzMDY1OSwgMzA2NjQsIDE2MDgyLCAzMDY2OCwgCisgICAgMzA2NzMsIDMwNjc4LCAzMDY4NCwgMzA2ODksIDMwNjk0LCAzMDY5OCwgMzA3MDMsIDMwNzA4LCAzMDcxNCwgMzA3MTksIAorICAgIDMwNzI0LCAzMDcyOCwgMzA3MzMsIDMwNzM4LCAzMDc0MiwgMzA3NDcsIDMwNzUyLCAzMDc1NywgMzA3NjEsIDMwNzY2LCAKKyAgICAzMDc3MSwgMzA3NzYsIDMwNzgwLCAzMDc4NCwgMTUyOTMsIDMwNzg4LCAzMDc5NywgMzA4MDMsIDMwODA5LCAzMDgxOCwgCisgICAgMzA4MjYsIDMwODM1LCAzMDg0MywgMzA4NDgsIDMwODUyLCAzMDg1OSwgMzA4NjUsIDMwODY5LCAzMDg3MiwgMzA4NzcsIAorICAgIDMwODg2LCAzMDg5NCwgMzA4OTksIDE0OTUsIDMwOTA1LCAzMDkwOCwgMzA5MTIsIDIyNDI0LCAyMjQzMCwgMzA5MTgsIAorICAgIDMwOTIyLCAzMDkzMywgMzA5NDQsIDMwOTU1LCAzMDk2NywgMzA5NzQsIDMwOTgxLCAzMDk4NiwgMzA5OTAsIDU5MDksIDc1NSwgCisgICAgMjEyNzksIDMwOTk4LCAzMTAwMywgMzEwMDcsIDMxMDEyLCAzMTAxNiwgMzEwMjIsIDMxMDI3LCAzMTAzMywgMzEwMzgsIAorICAgIDMxMDQ0LCAzMTA0OSwgMzEwNTUsIDMxMDYwLCAzMTA2NiwgMzEwNzIsIDMxMDc4LCAzMTA4MywgMzEwMzksIDMxMDQ1LCAKKyAgICAzMTA4NywgMzEwOTIsIDMxMDk4LCAzMTEwMywgMzExMDksIDMxMTE0LCAzMTEyMCwgMzExMjUsIDMxMDUwLCAxMDQyMSwgCisgICAgMzExMjksIDMxMDYxLCAzMTA2NywgMzEwNzMsIDI4MzEsIDM0MjMsIDMxMTM1LCAzMTEzOCwgMzExNDQsIDMxMTUwLCAKKyAgICAzMTE1NiwgMzExNjMsIDMxMTY5LCAzMTE3NSwgMzExODEsIDMxMTg3LCAzMTE5MywgMzExOTksIDMxMjA1LCAzMTIxMSwgCisgICAgMzEyMTcsIDMxMjIzLCAzMTIyOSwgMzEyMzUsIDMxMjQyLCAzMTI0OCwgMzEyNTQsIDMxMjYwLCAzMTI2NiwgMzEyNzIsIAorICAgIDMxMjc1LCAzMTI4MCwgMzEyODMsIDMxMjkwLCAzMTI5OCwgMzEzMDMsIDMxMzA4LCAzMTMxNCwgMzEzMTksIDMxMzI0LCAKKyAgICAzMTMyOCwgMzEzMzMsIDMxMzM5LCAzMTM0NCwgMzEzNTAsIDMxMzU1LCAzMTM2MSwgMzEzNjYsIDMxMzcyLCAzMTM3OCwgCisgICAgMzEzODIsIDMxMzg3LCAzMTM5MiwgMzEzOTcsIDMxNDAyLCAzMTQwNiwgMzE0MTEsIDMxNDE2LCAzMTQyMSwgMzE0MjcsIAorICAgIDMxNDMzLCAzMTQzOSwgMzE0NDUsIDMxNDUwLCAzMTQ1NCwgMzE0NTcsIDMxNDYzLCAzMTQ2OSwgMzE0NzgsIDMxNDg2LCAKKyAgICAzMTQ5MywgMzE0OTgsIDMxNTAyLCAzMTUwNiwgMzE1MTEsIDE1MTQ2LCAzMTUxNiwgMzE1MjQsIDMxNTMwLCAzNjgzLCAKKyAgICAxMzc3LCAzMTUzNSwgMzE1MzksIDgwMDUsIDMxNTQ1LCAzMTU1MSwgMzE1NTgsIDgwMTQsIDMxNTYyLCAzMTU2OCwgMzE1NzUsIAorICAgIDMxNTgxLCAzMTU5MCwgMzE1OTgsIDMxNjEwLCAzMTYxNCwgMzE2MjEsIDMxNjI3LCAzMTYzMSwgMzE2MzQsIDMxNjQzLCAKKyAgICAzMTY1MSwgMzEwNDAsIDMxNjU2LCAzMTY2NiwgMzE2NzYsIDMxNjg2LCAzMTY5MiwgMzE2OTcsIDMxNzA3LCAzMTcxMiwgCisgICAgMzE3MjUsIDMxNzM5LCAzMTc1MCwgMzE3NjIsIDMxNzc0LCAzMTc4OCwgMzE4MDEsIDMxODEzLCAzMTgyNSwgMTQ2MDAsIAorICAgIDMxODM5LCAzMTg0NCwgMzE4NDksIDMxODUzLCAzMTg1NywgMzE4NjEsIDE3ODAsIDI3MTc2LCAzMTg2NSwgMzE4NzAsIAorICAgIDMxMDg4LCAzMTg3NSwgMzE4NzgsIDMxODgzLCAzMTg4OCwgMzE4OTMsIDMxODk5LCAzMTkwNSwgMTAwOTgsIDMxOTEwLCAKKyAgICAzMTkxNywgMTU2OTcsIDMxOTIzLCAzMTkyOCwgMzE5MzMsIDMxOTM3LCAzMTk0MiwgMzE5NDcsIDMxMDkzLCAzMTk1MiwgCisgICAgMzE5NTcsIDMxOTYyLCAzMTk2OCwgMzEwOTksIDMxOTczLCAzMTk3NiwgMzE5ODMsIDMxOTkxLCAzMTk5NywgMzIwMDMsIAorICAgIDMyMDA5LCAzMjAyMCwgMzIwMjUsIDMyMDMyLCAzMjAzOSwgMzIwNDYsIDMyMDU0LCAzMjA2MywgMzIwNzIsIDMyMDc4LCAKKyAgICAzMjA4NCwgMzIwOTIsIDMxMTA0LCAzMjA5NywgMzIxMDMsIDMyMTA5LCAzMTExMCwgMzIxMTQsIDMyMTE5LCAzMjEyNywgCisgICAgMzIxMzUsIDMyMTQxLCAzMjE0OCwgMzIxNTQsIDMyMTYxLCAzMjE2OCwgMzIxNzQsIDMyMTgyLCAzMjE5MiwgMzIxOTksIAorICAgIDMyMjA0LCAzMjIxMCwgMzIyMTUsIDMyMjIwLCAzMjIyNywgMzIyMzYsIDMyMjQ0LCAzMjI0OSwgMzIyNTUsIDMyMjYyLCAKKyAgICAzMjI3MCwgMzIyNzYsIDMyMjgxLCAzMjI4NywgMzIyOTYsIDI3OTU3LCAzMjMwMywgMzIzMDcsIDMyMzEyLCAzMjMyMSwgCisgICAgMzIzMjYsIDMyMzMxLCAzMjMzNiwgMTI0MDUsIDMyMzQ0LCAzMjM0OSwgMzIzNTQsIDMyMzU5LCAzMjM2MywgMzIzNjgsIAorICAgIDMyMzczLCAzMjM4MCwgMzIzODUsIDMyMzkwLCAzMjM5NSwgMzExMTUsIDIxMjE2LCAzMjQwMSwgMjUxOSwgMjQ0LCAzMjQwNCwgCisgICAgMzI0MDcsIDMyNDExLCAzMjQxNSwgMzI0MjUsIDMyNDMzLCAzMjQzNywgMzI0NDQsIDMyNDUxLCAzMjQ1NSwgMzI0NTgsIAorICAgIDMyNDY0LCAzMjQ3MiwgMzI0ODAsIDMyNDg0LCAzMjQ4OCwgMzI0OTEsIDMyNDk4LCAzMjUwMiwgMzI1MDYsIDMyNTEzLCAKKyAgICAzMjUyMSwgMzEwNTEsIDMyNTI4LCAzMjUzNiwgMTAxNTgsIDY2NCwgMzA4LCAzMjU0OCwgMzI1NTMsIDMyNTU4LCAzMjU2NCwgCisgICAgMzI1NjksIDMyNTc0LCAzNzA0LCAzMjU3OSwgMzI1ODIsIDMyNTg3LCAzMjU5MiwgMzI1OTcsIDMyNjAyLCAzMjYwNywgCisgICAgMzI2MTQsIDIyNTI5LCAzMjYxOSwgMzI2MjQsIDMyNjI5LCAzMjYzNCwgMzI2MzksIDMyNjQ1LCAzMjY1MCwgMzI2NTYsIAorICAgIDMxMjg2LCAzMjY2MiwgMzI2NjcsIDMyNjczLCAzMjY3OSwgMzI2ODksIDMyNjk0LCAzMjY5OSwgMzI3MDMsIDMyNzA4LCAKKyAgICAzMjcxMywgMzI3MTgsIDMyNzIzLCAzMjczNiwgMzI3NDEsIDIyMzAyLCAxNjcwNSwgMzcxMCwgMzI3NDUsIDMyNzUwLCAKKyAgICAzMjc1NSwgMzI3NjEsIDMyNzY2LCAzMjc3MSwgMzI3NzUsIDMyNzgwLCAzMjc4NSwgMzI3OTEsIDMyNzk2LCAzMjgwMSwgCisgICAgMTM4MiwgMzI4MDUsIDMyODEwLCAzMjgxNSwgMzI4MjAsIDMyODI0LCAzMjgyOSwgMzI4MzQsIDMyODM5LCAzMjg0NSwgCisgICAgMzI4NTEsIDMyODU2LCAzMjg2MCwgMzI4NjQsIDMyODY5LCAzMjg3NCwgMzI4NzksIDMyODgzLCAzMjg5MSwgMzI4OTUsIAorICAgIDMyOTAxLCAzMjkwNSwgMzI5MTIsIDE2NDk4LCAzMTA2MiwgMzI5MTgsIDMyOTI1LCAzMjkzMywgMzI5NDAsIDMyOTQ2LCAKKyAgICAzMjk1OSwgMzI5NzEsIDMyOTc3LCAzMjk4MSwgMjc3MywgMzI5ODUsIDMyOTg5LCAzMjQ5MywgMzI5OTgsIDMzMDA5LCAKKyAgICAzMzAxNCwgMzMwMTksIDMzMDI0LCAzMzAyOCwgMzMwMzMsIDIyNDM1LCAzMzAzNywgMzMwNDEsIDMzMDQ2LCAzMTA2OCwgCisgICAgMjEzMDAsIDMzMDUwLCAzMzA1NSwgMzMwNjEsIDMzMDY2LCAzMzA3MCwgMzMwNzQsIDMzMDc3LCAzMzA4MSwgMzMwODcsIAorICAgIDMzMDk4LCAzMzExMCwgMzEwNzQsIDMzMTE1LCAzMzExOCwgMzMxMjIsIDM0NywgMzMxMjcsIDMzMTMyLCAzMzEzNywgCisgICAgMzMxNDIsIDMzMTQ3LCAzMzE1MiwgMzMxNTgsIDMzMTYzLCAzMzE2OCwgMzMxNzQsIDMzMTc5LCAzMzE4NSwgMzMxOTAsIAorICAgIDMzMTk2LCAzMzIwMSwgMzMyMDYsIDMzMjExLCAzMzIxNiwgMzMyMjEsIDMzMjI2LCAzMzIzMSwgMzMyMzYsIDMzMjQyLCAKKyAgICAzMzI0NywgMzMyNTIsIDMzMjU3LCAzMzI2MiwgMzMyNjcsIDMzMjcyLCAzMzI3NywgMzMyODMsIDMzMjg5LCAzMzI5NCwgCisgICAgMzMyOTksIDMzMzA0LCAzMzMwOSwgMzMzMTQsIDMzMzE5LCAzMzMyNCwgMzMzMjksIDMzMzM0LCAzMzMzOSwgMzMzNDQsIAorICAgIDMzMzQ5LCAzMzM1NCwgMzMzNTksIDMzMzY0LCAzMzM2OSwgMzMzNzQsIDMzMzc5LCAzMzM4NSwgMzEzLCAyNiwgMzMzOTAsIAorICAgIDMzMzk0LCAzMzM5OCwgMzM0MDYsIDMzNDEwLCAzMzQxNCwgMzM0MTcsIDMzNDIwLCAzMzQyMiwgMzM0MjcsIDMzNDMxLCAKKyAgICAzMzQzNiwgMzM0NDAsIDMzNDQ1LCAzMzQ0OSwgMzM0NTQsIDMzNDU4LCAzMzQ2MSwgMzM0NjMsIDMzNDY3LCAzMzQ3MiwgCisgICAgMzM0NzYsIDMzNDg3LCAzMzQ5MCwgMzM0OTIsIDMzNDk2LCAzMzUwOCwgMzM1MTcsIDMzNTIxLCAzMzUyNSwgMzM1MzEsIAorICAgIDMzNTM2LCAzMzU0NSwgMzM1NTEsIDMzNTU2LCAzMzU2MSwgMzM1NjUsIDMzNTcwLCAzMzU3NywgMzM1ODIsIDMzNTg4LCAKKyAgICAzMzU5MywgMzM1OTcsIDMzNjA0LCAyNTcxOCwgMjU3MjgsIDMzNjA4LCAzMzYxMywgMzM2MTgsIDMzNjIzLCAzMzYzMCwgCisgICAgMzM2MzQsIDMzNjQxLCA4MTEzLCAzMzY0NywgMzM2NTYsIDMzNjY0LCAzMzY3OSwgMzM2OTMsIDMzNzAxLCAzMzcxMiwgCisgICAgMzM3MjEsIDMzNzI2LCA3MjI3LCAzMzczNiwgMzM3NDEsIDMzNzQ2LCAzMzc1MCwgMzM3NTMsIDMzNzU3LCAzMzc2MiwgCisgICAgMzM3NjYsIDMzNzczLCAzMzc3OCwgMzM3ODMsIDg5MTIsIDMzNzkzLCAzMzc5NSwgMzM3OTgsIDMzODAyLCAzMzgwOCwgCisgICAgMzM4MTIsIDMzODE3LCAzMzgyMiwgMzM4MjgsIDMzODMzLCAzMzgzOSwgMzM4NDQsIDMzODU0LCAzMzg2MywgMzM4NzEsIAorICAgIDMzODc2LCAzMzg4MiwgMzM4ODcsIDMzODk0LCAzMzg5OCwgMzM5MDYsIDMzOTEzLCAzMzkyNiwgMzM5MzQsIDMzOTM4LCAKKyAgICAzMzk0OCwgMzM5NTMsIDMzOTU3LCAzMzk2NSwgMzM5NzMsIDMzOTc3LCAzMzk4NiwgMzM5OTIsIDMzOTk3LCAzNDAwNSwgCisgICAgMzQwMTUsIDM0MDI0LCAzNDAzMywgMzQwNDIsIDM0MDUzLCAzNDA2MSwgMzQwNzIsIDM0MDgxLCAzNDA4OCwgMzQwOTQsIAorICAgIDM0MDk5LCAzNDExMCwgMzQxMTUsIDM0MTE5LCAzNDEyMiwgMzQxMjYsIDM0MTM0LCAzNDE0MCwgMzQxNDgsIDM0MTU1LCAKKyAgICAzNDE2MSwgMzQxNjYsIDM0MTcyLCAyNDE4LCAzNDE3NiwgMzQxNzgsIDM0MTgzLCAzNDE4OCwgMzQxOTMsIDM0MTk2LCAKKyAgICAzNDE5OCwgMzQyMDIsIDM0MjA1LCAzNDIxMiwgMzQyMTYsIDk4OTEsIDM0MjIwLCAzNDIyNiwgMzQyMzYsIDM0MjQxLCAKKyAgICAzNDI0NywgMzQyNTEsIDM0MjU2LCAzNDI2OSwgMjYxMDQsIDM0Mjc1LCAzNDI4NCwgMTc0NzUsIDM0MjkxLCAzNDMwMCwgCisgICAgMzE2NzIsIDM0MzA4LCAzNDMxMywgMzQzMTcsIDM0MzI1LCAzNDMzMiwgMzQzMzcsIDM0MzQxLCAzNDM0NiwgMzQzNTAsIAorICAgIDM0MzU4LCAzNDM2NCwgMzQzNzAsIDM0Mzc1LCAzNDM3OSwgMzQzODIsIDM0Mzg3LCAzNDQwMCwgMzQ0MTYsIDIyOTk2LCAKKyAgICAzNDQzMywgMzQ0NDUsIDM0NDYyLCAzNDQ3NCwgMzQ0ODgsIDIzMDEzLCAyMzAzMiwgMzQ1MDAsIDM0NTEyLCAyNjgwLCAKKyAgICAzNDUyNiwgMzQ1MzEsIDM0NTM2LCAzNDU0MSwgMzQ1NDUsIDM0NTUyLCAzNDU2NCwgMzQ1NzAsIDM0NTczLCAzNDU4NCwgCisgICAgMzQ1OTUsIDM0NjAwLCAzMjA4OSwgNjk1LCAzNDYwNCwgMzQ2MDgsIDM0NjEyLCAzNDYxNSwgMzQ2MjAsIDM0NjI1LCAKKyAgICAzNDYzMSwgMzQ2MzYsIDM0NjQxLCAzNDY0NywgMzQ2NTMsIDM0NjU4LCAzNDY2MiwgMzQ2NjcsIDM0NjcyLCAzNDY3NywgCisgICAgMzQ2ODEsIDM0Njg0LCAzNDY5MCwgMzQ2OTUsIDM0NzAwLCAzNDcwNSwgMzQ3MDksIDM0NzE0LCAzNDcyMCwgMzQ3MjgsIAorICAgIDI2MzM3LCAzNDczMywgMzQ3MzgsIDM0NzQ1LCAzNDc1MSwgMzQ3NTcsIDM0NzYyLCAzNDc3MCwgMjI1MzgsIDM0Nzc3LCAKKyAgICAzNDc4MiwgMzQ3ODcsIDM0NzkyLCAzNDc5NiwgMzQ3OTksIDM0ODA0LCAzNDgwOCwgMzQ4MTIsIDM0ODE5LCAzNDgyNSwgCisgICAgMzQ4MzEsIDM0ODM3LCAzNDg0NCwgMzQ4NDksIDM0ODU1LCAzMzk2OCwgMzQ4NTksIDM0ODYzLCAzNDg2OCwgMzQ4ODEsIAorICAgIDM0ODg2LCAzNDg5MiwgMzQ5MDAsIDM0OTA3LCAzNDkxNSwgMzQ5MjUsIDM0OTMxLCAzNDkzNywgMzQ5NDMsIDM0OTQ3LCAKKyAgICAzNDk1NiwgMzQ5NjQsIDM0OTcxLCAzNDk3NiwgMzQ5ODEsIDEwNDQ0LCAzNDk4NiwgMzQ5OTQsIDM1MDAxLCAzNTAwNywgCisgICAgMzUwMTcsIDM1MDIyLCAzNTAyOCwgMzUwMzYsIDM2MDgsIDM1MDQzLCAzNTA1MCwgMzYxNCwgMzUwNTQsIDM1MDU5LCAKKyAgICAzNTA3MCwgMzUwNzcsIDM1MDgzLCAzNTA5MiwgMzUwOTYsIDQwMTUsIDM1MDk5LCAzNTEwNiwgMzUxMTIsIDM1MTE4LCAKKyAgICAzNTEyNiwgMzUxMzYsIDI5MDYzLCAzNTE0MywgMzUxNTEsIDM1MTU2LCAzNTE2MiwgMzUxNjcsIDI1OTY0LCAzNTE3MywgCisgICAgMzUxODAsIDM1MTg2LCAzNTE5NSwgMjM2NzcsIDM1MjAyLCAzNTIwNywgMzUyMTEsIDM1MjE5LCAzNTIyNywgOTYwNywgCisgICAgNTg5NSwgMzUyMzQsIDM1MjM4LCAzNTI0MCwgMzUyNDQsIDM1MjQ5LCAzNTI1MSwgMzUyNTcsIDM1MjYyLCAzNTI2NywgCisgICAgMzUyNzQsIDMyNjEwLCAzNTI4MCwgMzUyODUsIDM1Mjg5LCAzNTI5NCwgMzUyOTgsIDM1MzA3LCAzNTMxMSwgMzUzMTcsIAorICAgIDM1MzI0LCAzNTMzMCwgMzUzMzcsIDM1MzQyLCAzNTM1MSwgMzUzNTYsIDM1MzYwLCAzNTM2NSwgMzUzNzIsIDM1MzgwLCAKKyAgICAzNTM4OCwgMzUzOTMsIDIxMzU2LCAzNTM5NywgMzU0MDAsIDM1NDA0LCAzNTQwOCwgMzU0MTIsIDM1NDE1LCAzNTQxNywgCisgICAgMzU0MjUsIDM1NDI5LCAzNTQzNiwgMzU0NDAsIDM1NDQ0LCAzNTQ1MiwgMzU0NTksIDM1NDY5LCAzNTQ3MywgMzU0NzcsIAorICAgIDM1NDg1LCAzNTQ5MywgMzU0OTksIDM1NTA0LCAzNTUxMywgMTMzNTcsIDM1NTE5LCAzNTUyOCwgMzU1MzMsIDM1NTQwLCAKKyAgICAzNTU0OCwgMzU1NTYsIDM1NTY0LCAzNTU3MSwgMzU1NzgsIDM1NTg1LCAzNTU5MiwgMzU1OTksIDM1NjA0LCAzNTYxMCwgCisgICAgMzU2MjcsIDM1NjM1LCAzNTY0NSwgMzU2NTMsIDM1NjYwLCA0MDcsIDM1NjY0LCAzNTY3MCwgMzU2NzQsIDM1Njc5LCAKKyAgICAzMzcxNywgMzU2ODUsIDM1Njg4LCAzNTY5MiwgMzU3MDAsIDM2MTksIDM1NzA4LCAzNTcxNCwgMzU3MjAsIDM1NzI5LCAKKyAgICAzNTczOSwgMzU3NDYsIDM1NzUyLCAzNjI1LCAzNjMxLCAzNTc2MSwgMzU3NjgsIDM1Nzc2LCAzNTc4MSwgMzU3ODUsIAorICAgIDM1NzkyLCAzNTgwMCwgMzU4MDcsIDM1ODEzLCAzNTgyMiwgMzU4MzIsIDM1ODM4LCAzNTg0NiwgMzU4NTUsIDM1ODYyLCAKKyAgICAzNTg3MCwgMzU4NzcsIDIyMDMyLCAzNTg4MSwgMzU4ODgsIDM1ODk0LCAzNTkwNCwgMzU5MTMsIDM1OTI0LCAzNTkyOCwgCisgICAgMzU5MzgsIDM1OTQ0LCAzNTk1MSwgMzU5NTksIDM1OTY4LCAzNTk3NywgMzU5ODcsIDM1OTk4LCAzNjAwNSwgMzYwMTAsIAorICAgIDM2MDE3LCAzMDI5LCAzNjAyNSwgMzYwMzEsIDM2MDM2LCAzNjA0MiwgMzYwNDgsIDM2MDUzLCAzNjA2NiwgMzYwNzksIAorICAgIDM2MDkyLCAzNjA5OSwgMzYxMDUsIDM2MTEzLCAzNjEyMSwgMzYxMjYsIDM2MTMwLCAxNDY5LCAzNjEzNCwgMzYxMzksIAorICAgIDM2MTQ0LCAzNjE0OSwgMzYxNTQsIDM2MTYwLCAzNjE2NSwgMzYxNzAsIDM2MTc1LCAzNjE4MCwgMzYxODUsIDM2MTkwLCAKKyAgICAzNjE5NSwgMzYyMDEsIDM2MjA3LCAzNjIxMiwgMzYyMTcsIDM2MjIzLCAzNjIyOCwgMzYyMzMsIDM2MjM4LCAzNjI0NCwgCisgICAgMzYyNDksIDM2MjU0LCAzNjI1OSwgMzYyNjQsIDM2MjcwLCAzNjI3NSwgMzYyODAsIDM2Mjg2LCAzNjI5MSwgMzYyOTYsIAorICAgIDM2MzAxLCAzNjMwNiwgMzYzMTEsIDM2MzE3LCAzNjMyMiwgMzYzMjgsIDM2MzMzLCAzNjMzOSwgMzYzNDQsIDM2MzQ5LCAKKyAgICAzNjM1NCwgMzYzNjAsIDM2MzY2LCAzNjM3MiwgMzYzNzgsIDM2Mzg0LCAzNjM5MCwgMzYzOTYsIDM2NDAyLCAzNjQwNywgCisgICAgMzY0MTIsIDM2NDE4LCAzNjQyMywgMzY0MjgsIDM2NDMzLCAzNjQzOCwgMzY0NDMsIDM2NDQ4LCAzNjQ1MywgMzY0NTksIAorICAgIDM2NDY0LCAzNjQ2OSwgMzY0NzUsIDM2NDgxLCAxMDEsIDM2NDg2LCAzNjQ4OCwgMzY0OTIsIDM2NDk2LCAzNjUwMCwgCisgICAgMzY1MDUsIDM2NTA5LCA5NTI4LCAzNjUxMywgMzY1MTksIDE3NDEsIDYyODAsIDM2NTI1LCAzNjUyOCwgMzY1MzMsIDM2NTM3LCAKKyAgICAzNjU0MiwgMzY1NDYsIDM2NTUwLCAzNjU1NSwgMTAyNDUsIDM2NTU5LCAzNjU2MywgMzY1NjcsIDM2NTcxLCAxNTM4NSwgCisgICAgMzY1NzYsIDM2NTgwLCAzNjU4NSwgMzY1OTAsIDM2NTk1LCAzNjU5OSwgMzY2MDYsIDI2MTI4LCAzNjYxMiwgMzY2MTUsIAorICAgIDM2NjE5LCAzNjYyNCwgMzY2MzAsIDM2NjM0LCAzNjY0MiwgMzY2NDgsIDM2NjUzLCAzNjY1NywgMzY2NjMsIDM2NjY3LCAKKyAgICAzNjY3MSwgMzQ2MiwgMzQ2NywgMjkyNTUsIDM2Njc0LCAzNjY3OCwgMzY2ODIsIDM2Njg2LCAzNjY5MCwgMzY2OTgsIAorICAgIDM2NzA1LCAzNjcwOSwgMzY3MTYsIDM2NzIxLCAzMTcsIDM2NzI2LCAzNjczMCwgMzY3MzYsIDM2NzQ4LCAzNjc1NCwgCisgICAgMzY3NjAsIDM2NzY0LCAzNjc3MCwgMzY3NzksIDM2NzgzLCAzNjc4NywgMzY3OTIsIDM2Nzk4LCAzNjgwMywgMzY4MDcsIAorICAgIDM2ODEyLCAzNjgxNiwgMzY4MjAsIDM2ODI3LCAzNjgzMywgMzY4MzgsIDM2ODUzLCAzNjg2OCwgMzY4ODMsIDM2ODk5LCAKKyAgICAzNjkxNywgMTAxOTUsIDM2OTMxLCAzNjkzOCwgMzY5NDIsIDM2OTQ1LCAzNjk1NCwgMzY5NTksIDM2OTYzLCAzNjk3MSwgCisgICAgMzM5MTksIDM2OTc5LCAzNjk4MywgMzY5OTMsIDM3MDA0LCAyOTIyNSwgMzcwMTcsIDM3MDIxLCAzNzAzMCwgMzcwMzgsIAorICAgIDk3ODUsIDE0OTEzLCAzNzA0MiwgMjI0NDcsIDM3MDQ1LCAzMDE3MywgMzcwNTAsIDk3ODQsIDM3MDU1LCAzNzA2MSwgCisgICAgMzcwNjYsIDM3MDcyLCAzNzA3NywgMzcwODMsIDM3MDg4LCAzNzA5NCwgMzcwOTksIDM3MTA1LCAzNzExMSwgMzcxMTcsIAorICAgIDM3MTIyLCAzNzA3OCwgMzcwODQsIDM3MDg5LCAzNzA5NSwgMzcxMDAsIDM3MTA2LCAzNzExMiwgODEyNiwgMzg3NCwgCisgICAgMzcxMjYsIDM3MTM0LCAzNzEzOCwgMzcxNDEsIDM3MTQ1LCAzNzE1MCwgMzcxNTUsIDM3MTYxLCAzNzE2NywgMzcxNzIsIAorICAgIDM3MTc2LCAyNTk3NiwgMzcxODAsIDM3MTg0LCAzNzE5MCwgMzcxOTQsIDkwNDksIDM3MjAzLCAzNzIxMCwgMzcyMTQsIAorICAgIDExODc1LCAzNzIyMSwgMzcyMjcsIDM3MjMyLCAzNzIzOSwgMzcyNDYsIDM3MjUzLCAyODU3MSwgODA0OSwgMzcyNjAsIAorICAgIDM3MjY3LCAzNzI3NCwgMzcyODAsIDM3Mjg1LCAzNzI5MiwgMzczMDMsIDM3MzA5LCAzNzMxNCwgMzczMTksIDM3MzI0LCAKKyAgICAzNzMzMSwgMzcwNzksIDM3MzM1LCAzNzM0NSwgMzczNTYsIDM3MzYyLCAzNzM2NywgMzczNzIsIDM3Mzc3LCAzNzM4MiwgCisgICAgMzczODcsIDM3MzkxLCAzNzM5NSwgMzc0MDEsIDM3NDA5LCAyMzE5LCA4NjUsIDEwMjYxLCAxMDI3MywgMTAyNzgsIDEwMjg0LCAKKyAgICAzNzQxOCwgMTAyODksIDEwMjk0LCAxMDMwMCwgMzc0MjMsIDM3NDMzLCAzNzQzNywgMTAzMDUsIDM3NDQyLCAxNjkwMywgCisgICAgMzc0NDUsIDM3NDUwLCAzNzQ1NCwgMzc0NTksIDM3NDY0LCAzNzQ3MSwgMzc0NzgsIDM3NDgyLCAzNzQ4NSwgMzc0OTMsIAorICAgIDEwMjA4LCAzNzUwMCwgMzc1MDMsIDM3NTA5LCAzNzUxOSwgNTkyOSwgMzc1MjgsIDM3NTMyLCAzNzU0MCwgMzc1NDQsIAorICAgIDM3NTU0LCAzNzU2MCwgMzc1NzEsIDM3NTc3LCAzNzU4MywgMzc1ODgsIDM3NTk0LCAzNzYwMCwgMzc2MDYsIDM3NjExLCAKKyAgICAzNzYxNCwgMzc2MjEsIDM3NjI3LCAzNzYzMiwgMzc2MzksIDM3NjQ2LCAzNzY1MCwgMzc2NjAsIDM3NjczLCAzNzY4MiwgCisgICAgMzc2OTEsIDM3NzAyLCAzNzcxNSwgMzc3MjYsIDM3NzM1LCAzNzc0NiwgMzc3NTEsIDM3NzYwLCAzNzc2NSwgMTAzMTAsIAorICAgIDM3NzcxLCAzNzc3OCwgMzc3ODYsIDM3NzkxLCAzNzc5NSwgMzc4MDIsIDM3ODA5LCAzODI5LCAxNiwgMzc4MTMsIDM3ODE4LCAKKyAgICAxNjc1NywgMzc4MjIsIDM3ODI1LCAzNzgyOCwgMjgwNzcsIDM3ODMyLCAyODU4MCwgMzc4NDAsIDM3ODQ0LCAzNzg0OCwgCisgICAgMzc4NTEsIDM3ODU3LCAzNzEwMSwgMzc4NjMsIDM3ODcxLCAzNzg3NywgMzc4ODQsIDI4MDYwLCAzNzg4OCwgMjgyNTQsIAorICAgIDM3ODkyLCAzNzkwMSwgMzc5MDcsIDM3OTEzLCAzNzkxOCwgMzc5MjIsIDM3OTI4LCAzNzkzMiwgMzc5NDAsIDM3OTQ4LCAKKyAgICAyNjE5NCwgMzc5NTQsIDM3OTYxLCAzNzk2NywgMzc5NzIsIDM3OTc3LCAzNzk4MSwgMzc5ODcsIDM3OTkyLCAzNzk5OCwgCisgICAgNDA1NiwgNzkxLCAzODAwNSwgMzgwMDksIDM4MDEyLCAxNTI3NSwgMzgwMjQsIDM1ODUxLCAzODAzNSwgMzgwMzgsIDM4MDQ1LCAKKyAgICAzODA0OSwgMzgwNTUsIDM4MDU5LCAzODA2NSwgMzgwNzAsIDM4MDc2LCAzODA4MSwgMzgwODYsIDM4MDkwLCAzODA5NCwgCisgICAgMzgwOTksIDM4MTA0LCAzODExNCwgMzgxMjAsIDM4MTMzLCAzODEzOSwgMzgxNDUsIDM4MTUyLCAzODE1NywgMzgxNjMsIAorICAgIDM4MTY4LCAxNjY0MywgMTQ3MiwgMTAxOSwgMzEyMTgsIDMxMjI0LCAzODE3MywgMzEyMzAsIDMxMjQzLCAzMTI0OSwgCisgICAgMzEyNTUsIDM4MTc5LCAzMTI2MSwgMzEyNjcsIDM4MTg1LCAzODE5MSwgMjIsIDM4MTk5LCAzODIwNiwgMzgyMTAsIDM4MjE0LCAKKyAgICAzODIyMiwgMzE5NzgsIDM4MjI2LCAzODIzMCwgMzgyMzcsIDM4MjQyLCAzODI0NiwgMzgyNTEsIDM4MjU3LCAzODI2MiwgCisgICAgMzgyNjgsIDM4MjczLCAzODI3NywgMzgyODEsIDM4Mjg1LCAzODI5MCwgMzgyOTQsIDM4Mjk5LCAzODMwMywgMzgzMTAsIAorICAgIDM4MzE1LCAzODMxOSwgMzgzMjQsIDM4MzI4LCAzODMzMywgMzgzMzcsIDM4MzQyLCAzODM0OCwgMTU0OTUsIDE1NTAwLCAKKyAgICAzODM1MywgMzgzNTcsIDM4MzYwLCAzODM2NCwgMjExODMsIDM4MzY5LCAzODM3MywgMzgzNzksIDM4Mzg2LCAzODM5MSwgCisgICAgMzg0MDEsIDM4NDA2LCAzODQxNCwgMzg0MTgsIDM4NDIxLCAzMTk5MywgMzg0MjUsIDQxMDksIDM4NDMwLCAzODQzNSwgCisgICAgMzg0MzksIDM4NDQ0LCAzODQ0OCwgMzg0NTMsIDEzMzc1LCAzODQ2NCwgMzg0NjgsIDM4NDcxLCAzODQ3NiwgMzg0ODAsIAorICAgIDM4NDg0LCAzODQ4NywgMzg0OTEsIDgxNDUsIDEzMzkxLCAzODQ5NCwgMzg0OTcsIDM4NTAzLCAzODUwOCwgMzg1MTQsIAorICAgIDM4NTE5LCAzODUyNSwgMzg1MzAsIDM4NTM2LCAzODU0MSwgMzg1NDcsIDM4NTUzLCAzODU1OSwgMzg1NjQsIDM4NTY4LCAKKyAgICAzODU3MiwgMzg1ODEsIDM4NTk3LCAzODYxMywgMzg2MjMsIDI3OTY3LCAzODYzMCwgMzg2MzQsIDM4NjM5LCAzODY0NCwgCisgICAgMzg2NDgsIDM4NjUyLCAzNTk3MiwgMzg2NTgsIDM4NjYzLCAzODY2NywgMzg2NzQsIDM4Njc5LCAzODY4MywgMzg2ODcsIAorICAgIDI2OTk2LCAzODY5MywgMjE0NTEsIDM4Njk4LCAzODcwNSwgMzg3MTMsIDM4NzE5LCAzODcyNiwgMzg3MzQsIDM4NzQwLCAKKyAgICAzODc0NCwgMzg3NTAsIDM4NzU4LCAzODc2MiwgMzg3NzEsIDk1MDksIDM4Nzc5LCAzODc4MywgMzg3OTEsIDM4Nzk4LCAKKyAgICAzODgwMywgMzg4MDgsIDM4ODEyLCAzODgxNSwgMzg4MTksIDM4ODIyLCAzODgyNiwgMzg4MzMsIDM4ODM4LCAzODg0NCwgCisgICAgMjY0MTUsIDMxMjgxLCAzODg0OCwgMzg4NTUsIDM4ODYxLCAzODg2NywgMzg4NzIsIDM4ODc1LCAzODg3NywgMzg4ODQsIAorICAgIDM4ODkxLCAzODg5NywgMzg5MDEsIDM4OTA0LCAzODkwOCwgMzg5MTIsIDM4OTE2LCAzODkyMSwgMzg5MjUsIDM4OTI5LCAKKyAgICAzODkzMiwgMzg5MzYsIDM4OTUwLCAyMzA2MiwgMzg5NjksIDM4OTgyLCAzODk5NSwgMzkwMDgsIDIzMDgwLCAzOTAyMywgCisgICAgMTA0OTcsIDM5MDM4LCAzOTA0NCwgMzkwNDgsIDM5MDUyLCAzOTA1OSwgMzkwNjQsIDM5MDY4LCAzOTA3NSwgMzkwODEsIAorICAgIDM5MDg2LCAzOTA5MiwgMzkxMDIsIDM5MTE0LCAzOTEyNSwgMzkxMzAsIDM5MTM3LCAzOTE0MSwgMzkxNDUsIDM5MTQ4LCAKKyAgICAxNTg5MSwgMzY3NywgMzkxNTYsIDE1NTIyLCAzOTE2OSwgMzkxNzYsIDM5MTgwLCAzOTE4NCwgMzkxODksIDM5MTk0LCAKKyAgICAzOTIwMCwgMzkyMDQsIDM5MjA4LCAzOTIxMSwgNzc0MiwgMTU1MzMsIDM5MjE2LCAzOTIyMCwgMzkyMjYsIDM5MjM1LCAKKyAgICAzOTI0MCwgMzkyNDcsIDM1ODI4LCAzOTI1MywgMzkyNTgsIDM5MjYyLCAzOTI2NywgMzkyNzQsIDM5Mjc4LCAzOTI4MSwgCisgICAgMzkyODUsIDM5MjkwLCAxNDU2NSwgMzkyOTcsIDM5MzA0LCAxMDc3LCAzOTMwOCwgMzkzMTMsIDM5MzE4LCAzOTMyNCwgCisgICAgMzkzMjksIDM5MzM0LCAzOTMzOCwgMzkzNDgsIDM5MzUzLCAzOTM1OSwgMzkzNjQsIDM5MzcwLCAzOTM3NSwgMzkzODEsIAorICAgIDM5MzkxLCAzOTM5NiwgMzk0MDEsIDM5NDA1LCA3MjI5LCA3MjQxLCAzOTQxMCwgMzk0MTMsIDM5NDIwLCAzOTQyNiwgCisgICAgMzQwODQsIDM0MDkxLCAzOTQzNSwgMzk0MzksIDMyMDQxLCAzOTQ0NywgMzk0NTgsIDM5NDY2LCAzNjAyMCwgMzk0NzMsIAorICAgIDM5NDc4LCAzOTQ4MywgMzk0OTQsIDM5NTAxLCAzOTUxMiwgMzIwNjUsIDIxNDU3LCAzOTUyMCwgNzM1LCAzOTUyNSwgCisgICAgMzk1MzEsIDI4MDUxLCAzOTUzNywgMzk1NDIsIDM5NTUyLCAzOTU2MSwgMzk1NjgsIDM5NTc0LCAzOTU3OCwgMzk1ODEsIAorICAgIDM5NTg4LCAzOTU5NCwgMzk2MDEsIDM5NjA3LCAzOTYxNywgMzk2MjUsIDM5NjMxLCAzOTYzNywgMzk2NDIsIDM5NjQ2LCAKKyAgICAzOTY1MywgMzk2NTksIDM5NjY2LCAzODkxNywgNTM1LCAxMzgxOCwgMzk2NzIsIDM5Njc3LCAzOTY4MCwgMzk2ODYsIAorICAgIDM5Njk0LCAxMzk2LCAzOTY5OSwgMzk3MDMsIDM5NzA4LCAzOTcxNSwgMzk3MjEsIDM5NzI1LCAzOTcyOSwgMzk3MzQsIAorICAgIDM5NzQzLCAzOTc1MCwgMzk3NjAsIDM5NzY2LCAyODA5NSwgMzk3ODMsIDM5NzkyLCAzOTgwMCwgMzk4MDYsIDM5ODExLCAKKyAgICAzOTgxOCwgMzk4MjQsIDM5ODMyLCAzOTg0MSwgMzk4NDksIDM5ODUzLCAzOTg1OCwgMzk4NjYsIDMyMDc0LCAzOTg3MiwgCisgICAgMzk4OTEsIDE1ODI0LCAzOTkwNSwgMzk5MjEsIDM5OTM1LCAzOTk0MSwgMzk5NDYsIDM5OTUxLCAzOTk1NiwgMzk5NjIsIAorICAgIDMyMDgwLCAzOTk2NywgMzk5NzQsIDM5OTc5LCAzOTk4MywgMzQ1LCAyOTM2LCAzOTk5MCwgMzk5OTUsIDQwMDAwLCAyNzMyMiwgCisgICAgMzk4MjEsIDQwMDA0LCA0MDAwOSwgNDAwMTcsIDQwMDIxLCA0MDAyNCwgNDAwMzAsIDQwMDM2LCA0MDA0MCwgMjgxNTAsIAorICAgIDQwMDQzLCA0MDA0OCwgNDAwNTIsIDQwMDU1LCA0MDA2MCwgNDAwNjQsIDQwMDY5LCA0MDA3NCwgNDAwNzgsIDQwMDgzLCAKKyAgICA0MDA4NywgNDAwOTEsIDIxMTc5LCAyMTE5MCwgNDAwOTUsIDQwMTAwLCA0MDEwNiwgMjY5NTMsIDQwMTExLCA0MDExNSwgCisgICAgMjEyNjYsIDE2MDcyLCA0MDExOCwgNDAxMjMsIDQwMTI4LCA0MDEzMywgNDAxMzgsIDQwMTQzLCA0MDE0OCwgNDAxNTMsIAorICAgIDQ1MCwgNDksIDMxMjk5LCAzMTMwNCwgMzEzMDksIDMxMzE1LCAzMTMyMCwgMzEzMjUsIDQwMTU4LCAzMTMyOSwgNDAxNjIsIAorICAgIDQwMTY2LCA0MDE3MCwgMzEzMzQsIDMxMzQwLCA0MDE4NCwgMzEzNTEsIDMxMzU2LCA0MDE5MiwgNDAxOTcsIDMxMzYyLCAKKyAgICA0MDIwMiwgNDAyMDcsIDQwMjEyLCA0MDIxNywgNDAyMjMsIDQwMjI5LCA0MDIzNSwgMzEzNzksIDQwMjQ4LCA0MDI1NCwgCisgICAgMzEzODMsIDQwMjU4LCAzMTM4OCwgNDAyNjMsIDMxMzkzLCAzMTM5OCwgNDAyNjYsIDQwMjcxLCA0MDI3NSwgMzA5NDgsIAorICAgIDQwMjgxLCAxMzU5OSwgNDAyODgsIDQwMjkzLCAzMTQwMywgNDAyOTcsIDQwMzAyLCA0MDMwNywgNDAzMTIsIDQwMzE2LCAKKyAgICA0MDMyMSwgNDAzMjYsIDQwMzMyLCA0MDMzNywgNDAzNDIsIDQwMzQ4LCA0MDM1NCwgNDAzNTksIDQwMzYzLCA0MDM2OCwgCisgICAgNDAzNzMsIDQwMzc4LCA0MDM4MiwgNDAzODcsIDQwMzkyLCA0MDM5NywgNDA0MDMsIDQwNDA5LCA0MDQxNSwgNDA0MjAsIAorICAgIDQwNDI0LCA0MDQyOSwgNDA0MzMsIDMxNDA3LCAzMTQxMiwgMzE0MTcsIDQwNDM3LCA0MDQ0MSwgNDA0NDUsIDMxNDIyLCAKKyAgICAzMTQyOCwgMzE0MzQsIDMxNDQ2LCA0MDQ1NywgMjYwMTMsIDQwNDYxLCA0MDQ2NSwgNDA0NzAsIDQwNDc1LCA0MDQ4MCwgCisgICAgNDA0ODUsIDQwNDg5LCA0MDQ5MywgNDA1MDMsIDQwNTA4LCA0MDUxMywgNDA1MTcsIDQwNTIxLCA0MDUyNCwgNDA1MzIsIAorICAgIDMxNDk0LCA0MDUzNywgMTQ3OSwgNDA1NDMsIDQwNTUxLCA0MDU2MCwgNDA1NjQsIDQwNTY4LCA0MDU3NiwgNDA1ODIsIAorICAgIDQwNTkwLCA0MDYwNiwgNDA2MTAsIDQwNjE0LCA0MDYxOSwgNDA2MzQsIDMxNTMxLCAxNzQ5LCAxMjA1NSwgNDA2MzgsIAorICAgIDEzNzgsIDQwNjUwLCA0MDY1MSwgNDA2NTksIDQwNjY2LCA0MDY3MSwgNDA2NzgsIDQwNjgzLCA5Mzc5LCAxMTE5LCAxMDMzMiwgCisgICAgNDA2OTAsIDQwNjk1LCA0MDY5OCwgNDA3MDEsIDQwNzEwLCAxMjg2LCA0MDcxNSwgMzkwNjUsIDQwNzIyLCA0MDcyNywgCisgICAgNDA3MzEsIDIyNTAzLCAyNTU3LCA0MDczOSwgMTA3NDEsIDQwNzQ5LCA0MDc1NSwgMjMzNywgMjM0NywgNDA3NjQsIDQwNzczLCAKKyAgICA0MDc4MywgNDA3OTQsIDMyOTMsIDM0MjM3LCAxMDM4NCwgMzgwNywgMTY2ODEsIDEyOTEsIDQwNzk5LCA0MDgwNywgNDA4MTQsIAorICAgIDQwODE5LCA0MDgyMywgNDA4MjcsIDIzODc1LCAxMDQxMSwgNDA4MzUsIDQwODQ0LCA0MDg1MywgNDA4NjEsIDQwODY4LCAKKyAgICA0MDg3OSwgNDA4ODQsIDQwODk3LCA0MDkxMCwgNDA5MjIsIDQwOTM0LCA0MDk0NiwgNDA5NTksIDQwOTcwLCA0MDk4MSwgCisgICAgNDA5OTEsIDQwOTk5LCA0MTAwNywgNDEwMTksIDQxMDMxLCA0MTA0MiwgNDEwNTEsIDQxMDU5LCA0MTA2NiwgNDEwNzgsIAorICAgIDQxMDg1LCA0MTA5NCwgNDExMDEsIDQxMTE0LCA0MTExOSwgNDExMjksIDQxMTM0LCA0MTE0MCwgNDExNDUsIDM3MjExLCAKKyAgICA0MTE0OSwgNDExNTYsIDQxMTYwLCA0MTE2NywgNDExNzUsIDI1MTgsIDQxMTgyLCA0MTE5MywgNDEyMDMsIDQxMjEyLCAKKyAgICA0MTIyMCwgNDEyMzAsIDQxMjM4LCA0MTI0OCwgNDEyNTcsIDQxMjYyLCA0MTI2OCwgNDEyNzQsIDM3MDksIDQxMjg1LCAKKyAgICA0MTI5NSwgNDEzMDQsIDQxMzEzLCA0MTMyMywgNDEzMzEsIDQxMzQwLCA0MTM0NSwgNDEzNTAsIDQxMzU1LCAxNzA1LCAzNywgCisgICAgNDEzNjMsIDQxMzcxLCA0MTM4MiwgNDEzOTMsIDE2MzU2LCA0MTQwMywgNDE0MDcsIDQxNDE0LCA0MTQyMCwgNDE0MjUsIAorICAgIDQxNDI5LCA0MTQ0MCwgNDE0NTAsIDQxNDU5LCA0MTQ3MCwgMTY3MzAsIDE2NzM1LCA0MTQ3NSwgNDE0ODQsIDQxNDg5LCAKKyAgICA0MTQ5OSwgNDE1MDQsIDQxNTEyLCA0MTUyMCwgNDE1MjcsIDQxNTMzLCA3MDc4LCAyMjgsIDQxNTM3LCA0MTU0MywgNDE1NDgsIAorICAgIDQxNTUxLCAyMTE3LCAzOTE4MSwgNDE1NTksIDQxNTYzLCA0MTU2NiwgMTUxMiwgNDE1NzIsIDEzOTgwLCAxMjk2LCA0MTU3NywgCisgICAgNDE1OTAsIDQxNjA0LCAyNjQzLCA0MTYyMiwgNDE2MzQsIDQxNjQ2LCAyNjU3LCAyNjc0LCA0MTY2MCwgNDE2NzMsIDI2ODksIAorICAgIDQxNjg3LCA0MTY5OSwgMjcwNCwgNDE3MTMsIDEzMDIsIDEzMDgsIDEzMTQsIDEwNjU5LCA0MTcxOCwgNDE3MjMsIDQxNzI4LCAKKyAgICA0MTczMiwgNDE3NDcsIDQxNzYyLCA0MTc3NywgNDE3OTIsIDQxODA3LCA0MTgyMiwgNDE4MzcsIDQxODUyLCA0MTg2NywgCisgICAgNDE4ODIsIDQxODk3LCA0MTkxMiwgNDE5MjcsIDQxOTQyLCA0MTk1NywgNDE5NzIsIDQxOTg3LCA0MjAwMiwgNDIwMTcsIAorICAgIDQyMDMyLCA0MjA0NywgNDIwNjIsIDQyMDc3LCA0MjA5MiwgNDIxMDcsIDQyMTIyLCA0MjEzNywgNDIxNTIsIDQyMTY3LCAKKyAgICA0MjE4MiwgNDIxOTcsIDQyMjEyLCA0MjIyNywgNDIyNDIsIDQyMjU3LCA0MjI3MiwgNDIyODcsIDQyMzAyLCA0MjMxNywgCisgICAgNDIzMzIsIDQyMzQ3LCA0MjM2MiwgNDIzNzcsIDQyMzkyLCA0MjQwNywgNDI0MjIsIDQyNDM3LCA0MjQ1MiwgNDI0NjcsIAorICAgIDQyNDgyLCA0MjQ5NywgNDI1MTIsIDQyNTI3LCA0MjU0MiwgNDI1NTcsIDQyNTcyLCA0MjU4NywgNDI2MDIsIDQyNjE3LCAKKyAgICA0MjYzMiwgNDI2NDcsIDQyNjYyLCA0MjY3NywgNDI2OTIsIDQyNzA3LCA0MjcyMiwgNDI3MzcsIDQyNzUyLCA0Mjc2NywgCisgICAgNDI3ODIsIDQyNzk3LCA0MjgxMiwgNDI4MjcsIDQyODQyLCA0Mjg1NywgNDI4NzIsIDQyODg3LCA0MjkwMiwgNDI5MTcsIAorICAgIDQyOTMyLCA0Mjk0NywgNDI5NjIsIDQyOTc3LCA0Mjk5MiwgNDMwMDcsIDQzMDIyLCA0MzAzNywgNDMwNTIsIDQzMDY3LCAKKyAgICA0MzA4MiwgNDMwOTcsIDQzMTEyLCA0MzEyNywgNDMxNDIsIDQzMTU3LCA0MzE3MiwgNDMxODcsIDQzMjAyLCA0MzIxNywgCisgICAgNDMyMzIsIDQzMjQ3LCA0MzI2MiwgNDMyNzcsIDQzMjkyLCA0MzMwNywgNDMzMjIsIDQzMzM3LCA0MzM1MiwgNDMzNjcsIAorICAgIDQzMzgyLCA0MzM5NywgNDM0MTIsIDQzNDI3LCA0MzQ0MiwgNDM0NTcsIDQzNDcyLCA0MzQ4NywgNDM1MDIsIDQzNTE3LCAKKyAgICA0MzUzMiwgNDM1NDcsIDQzNTYyLCA0MzU3NywgNDM1OTIsIDQzNjA3LCA0MzYyMiwgNDM2MzcsIDQzNjUyLCA0MzY2NywgCisgICAgNDM2ODIsIDQzNjk3LCA0MzcxMiwgNDM3MjcsIDQzNzQyLCA0Mzc1NywgNDM3NzIsIDQzNzg3LCA0MzgwMiwgNDM4MTcsIAorICAgIDQzODMyLCA0Mzg0NywgNDM4NjIsIDQzODc3LCA0Mzg5MiwgNDM5MDcsIDQzOTIyLCA0MzkzNywgNDM5NTIsIDQzOTY3LCAKKyAgICA0Mzk4MiwgNDM5OTcsIDQ0MDEyLCA0NDAyNywgNDQwNDIsIDQ0MDU3LCA0NDA3MiwgNDQwODcsIDQ0MTAyLCA0NDExNywgCisgICAgNDQxMzIsIDQ0MTQ3LCA0NDE2MiwgNDQxNzcsIDQ0MTkyLCA0NDIwNywgNDQyMjIsIDQ0MjM3LCA0NDI1MiwgNDQyNjcsIAorICAgIDQ0MjgyLCA0NDI5NywgNDQzMTIsIDQ0MzI3LCA0NDM0MiwgNDQzNTcsIDQ0MzcyLCA0NDM4NywgNDQ0MDIsIDQ0NDE3LCAKKyAgICA0NDQzMiwgNDQ0NDcsIDQ0NDYyLCA0NDQ3NywgNDQ0OTIsIDQ0NTA3LCA0NDUyMiwgNDQ1MzcsIDQ0NTUyLCA0NDU2NywgCisgICAgNDQ1ODIsIDQ0NTk3LCA0NDYxMiwgNDQ2MjcsIDQ0NjQyLCA0NDY1NywgNDQ2NzIsIDQ0Njg3LCA0NDcwMiwgNDQ3MTcsIAorICAgIDQ0NzMyLCA0NDc0NywgNDQ3NjIsIDQ0Nzc3LCA0NDc5MiwgNDQ4MDcsIDQ0ODIyLCA0NDgzNywgNDQ4NTIsIDQ0ODY3LCAKKyAgICA0NDg4MiwgNDQ4OTcsIDQ0OTEyLCA0NDkyNywgNDQ5NDIsIDQ0OTU3LCA0NDk3MiwgNDQ5ODcsIDQ1MDAyLCA0NTAxNywgCisgICAgNDUwMzIsIDQ1MDQ3LCA0NTA2MiwgNDUwNzcsIDQ1MDkyLCA0NTEwNywgNDUxMjIsIDQ1MTM3LCA0NTE1MiwgNDUxNjcsIAorICAgIDQ1MTgyLCA0NTE5NywgNDUyMTIsIDQ1MjI3LCA0NTI0MiwgNDUyNTcsIDQ1MjcyLCA0NTI4NywgNDUzMDIsIDQ1MzE3LCAKKyAgICA0NTMzMiwgNDUzNDcsIDQ1MzYyLCA0NTM3NywgNDUzOTIsIDQ1NDA3LCA0NTQyMiwgNDU0MzcsIDQ1NDUyLCA0NTQ2NywgCisgICAgNDU0ODIsIDQ1NDk3LCA0NTUxMiwgNDU1MjcsIDQ1NTQyLCA0NTU1NywgNDU1NzIsIDQ1NTg3LCA0NTYwMiwgNDU2MTcsIAorICAgIDQ1NjMyLCA0NTY0NywgNDU2NjIsIDQ1Njc3LCA0NTY5MiwgNDU3MDcsIDQ1NzIyLCA0NTczNywgNDU3NTIsIDQ1NzY3LCAKKyAgICA0NTc4MiwgNDU3OTcsIDQ1ODEyLCA0NTgyNywgNDU4NDIsIDQ1ODU3LCA0NTg3MiwgNDU4ODcsIDQ1OTAyLCA0NTkxNywgCisgICAgNDU5MzIsIDQ1OTQ3LCA0NTk2MiwgNDU5NzcsIDQ1OTkyLCA0NjAwNywgNDYwMjIsIDQ2MDM3LCA0NjA1MiwgNDYwNjcsIAorICAgIDQ2MDgyLCA0NjA5NywgNDYxMTIsIDQ2MTI3LCA0NjE0MiwgNDYxNTcsIDQ2MTcyLCA0NjE4NywgNDYyMDIsIDQ2MjE3LCAKKyAgICA0NjIzMiwgNDYyNDcsIDQ2MjYyLCA0NjI3NywgNDYyOTIsIDQ2MzA3LCA0NjMyMiwgNDYzMzcsIDQ2MzUyLCA0NjM2NywgCisgICAgNDYzODIsIDQ2Mzk3LCA0NjQxMiwgNDY0MjcsIDQ2NDQyLCA0NjQ1NywgNDY0NzIsIDQ2NDg3LCA0NjUwMiwgNDY1MTcsIAorICAgIDQ2NTMyLCA0NjU0NywgNDY1NjIsIDQ2NTc3LCA0NjU5MiwgNDY2MDcsIDQ2NjIyLCA0NjYzNywgNDY2NTIsIDQ2NjY3LCAKKyAgICA0NjY4MiwgNDY2OTcsIDQ2NzEyLCA0NjcyNywgNDY3NDIsIDQ2NzU3LCA0Njc3MiwgNDY3ODcsIDQ2ODAyLCA0NjgxNywgCisgICAgNDY4MzIsIDQ2ODQ3LCA0Njg2MiwgNDY4NzcsIDQ2ODkyLCA0NjkwNywgNDY5MjIsIDQ2OTM3LCA0Njk1MiwgNDY5NjcsIAorICAgIDQ2OTgyLCA0Njk5NywgNDcwMTIsIDQ3MDI3LCA0NzA0MiwgNDcwNTcsIDQ3MDcyLCA0NzA4NywgNDcxMDIsIDQ3MTE3LCAKKyAgICA0NzEzMiwgNDcxNDcsIDQ3MTYyLCA0NzE3NywgNDcxOTIsIDQ3MjA3LCA0NzIyMiwgNDcyMzcsIDQ3MjUyLCA0NzI2NywgCisgICAgNDcyODIsIDQ3Mjk3LCA0NzMxMiwgNDczMjcsIDQ3MzQyLCA0NzM1NywgNDczNzIsIDQ3Mzg3LCA0NzQwMiwgNDc0MTcsIAorICAgIDQ3NDMyLCA0NzQ0NywgNDc0NjIsIDQ3NDc3LCA0NzQ5MiwgNDc1MDcsIDQ3NTIyLCA0NzUzNywgNDc1NTIsIDQ3NTY3LCAKKyAgICA0NzU4MiwgNDc1OTcsIDQ3NjEyLCA0NzYyNywgNDc2NDIsIDQ3NjU3LCA0NzY3MiwgNDc2ODcsIDQ3NzAyLCA0NzcxNywgCisgICAgNDc3MzIsIDQ3NzQ3LCA0Nzc2MiwgNDc3NzcsIDQ3NzkyLCA0NzgwNywgNDc4MjIsIDQ3ODM3LCA0Nzg1MiwgNDc4NjcsIAorICAgIDQ3ODgyLCA0Nzg5NywgNDc5MTIsIDQ3OTI3LCA0Nzk0MiwgNDc5NTcsIDQ3OTcyLCA0Nzk4NywgNDgwMDIsIDQ4MDE3LCAKKyAgICA0ODAzMiwgNDgwNDcsIDQ4MDYyLCA0ODA3NywgNDgwOTIsIDQ4MTA3LCA0ODEyMiwgNDgxMzcsIDQ4MTUyLCA0ODE2NywgCisgICAgNDgxODIsIDQ4MTk3LCA0ODIxMiwgNDgyMjcsIDQ4MjQyLCA0ODI1NywgNDgyNzIsIDQ4Mjg3LCA0ODMwMiwgNDgzMTcsIAorICAgIDQ4MzMyLCA0ODM0NywgNDgzNjIsIDQ4Mzc3LCA0ODM5MiwgNDg0MDcsIDQ4NDIyLCA0ODQzNywgNDg0NTIsIDQ4NDY3LCAKKyAgICA0ODQ4MiwgNDg0OTcsIDQ4NTEyLCA0ODUyNywgNDg1NDIsIDQ4NTU3LCA0ODU3MiwgNDg1ODcsIDQ4NjAyLCA0ODYxNywgCisgICAgNDg2MzIsIDQ4NjQ3LCA0ODY2MiwgNDg2NzcsIDQ4NjkyLCA0ODcwNywgNDg3MjIsIDQ4NzM3LCA0ODc1MiwgNDg3NjcsIAorICAgIDQ4NzgyLCA0ODc5NywgNDg4MTIsIDQ4ODI3LCA0ODg0MiwgNDg4NTcsIDQ4ODcyLCA0ODg4NywgNDg5MDIsIDQ4OTE3LCAKKyAgICA0ODkzMiwgNDg5NDcsIDQ4OTYyLCA0ODk3NywgNDg5OTIsIDQ5MDA3LCA0OTAyMiwgNDkwMzcsIDQ5MDUyLCA0OTA2NywgCisgICAgNDkwODIsIDQ5MDk3LCA0OTExMiwgNDkxMjcsIDQ5MTQyLCA0OTE1NywgNDkxNzIsIDQ5MTg3LCA0OTIwMiwgNDkyMTcsIAorICAgIDQ5MjMyLCA0OTI0NywgNDkyNjIsIDQ5Mjc3LCA0OTI5MiwgNDkzMDcsIDQ5MzIyLCA0OTMzNywgNDkzNTIsIDQ5MzY3LCAKKyAgICA0OTM4MiwgNDkzOTcsIDQ5NDEyLCA0OTQyNywgNDk0NDIsIDQ5NDU3LCA0OTQ3MiwgNDk0ODcsIDQ5NTAyLCA0OTUxNywgCisgICAgNDk1MzIsIDQ5NTQ4LCA0OTU2NCwgNDk1ODAsIDQ5NTk2LCA0OTYxMiwgNDk2MjgsIDQ5NjQ0LCA0OTY2MCwgNDk2NzYsIAorICAgIDQ5NjkyLCA0OTcwOCwgNDk3MjQsIDQ5NzQwLCA0OTc1NiwgNDk3NzIsIDQ5Nzg4LCA0OTgwNCwgNDk4MjAsIDQ5ODM2LCAKKyAgICA0OTg1MiwgNDk4NjgsIDQ5ODg0LCA0OTkwMCwgNDk5MTYsIDQ5OTMyLCA0OTk0OCwgNDk5NjQsIDQ5OTgwLCA0OTk5NiwgCisgICAgNTAwMTIsIDUwMDI4LCA1MDA0NCwgNTAwNjAsIDUwMDc2LCA1MDA5MiwgNTAxMDgsIDUwMTI0LCA1MDE0MCwgNTAxNTYsIAorICAgIDUwMTcyLCA1MDE4OCwgNTAyMDQsIDUwMjIwLCA1MDIzNiwgNTAyNTIsIDUwMjY4LCA1MDI4NCwgNTAzMDAsIDUwMzE2LCAKKyAgICA1MDMzMiwgNTAzNDgsIDUwMzY0LCA1MDM4MCwgNTAzOTYsIDUwNDEyLCA1MDQyOCwgNTA0NDQsIDUwNDYwLCA1MDQ3NiwgCisgICAgNTA0OTIsIDUwNTA4LCA1MDUyNCwgNTA1NDAsIDUwNTU2LCA1MDU3MiwgNTA1ODgsIDUwNjA0LCA1MDYyMCwgNTA2MzYsIAorICAgIDUwNjUyLCA1MDY2OCwgNTA2ODQsIDUwNzAwLCA1MDcxNiwgNTA3MzIsIDUwNzQ4LCA1MDc2NCwgNTA3ODAsIDUwNzk2LCAKKyAgICA1MDgxMiwgNTA4MjgsIDUwODQ0LCA1MDg2MCwgNTA4NzYsIDUwODkyLCA1MDkwOCwgNTA5MjQsIDUwOTQwLCA1MDk1NiwgCisgICAgNTA5NzIsIDUwOTg4LCA1MTAwNCwgNTEwMjAsIDUxMDM2LCA1MTA1MiwgNTEwNjgsIDUxMDg0LCA1MTEwMCwgNTExMTYsIAorICAgIDUxMTMyLCA1MTE0OCwgNTExNjQsIDUxMTgwLCA1MTE5NiwgNTEyMTIsIDUxMjI4LCA1MTI0NCwgNTEyNjAsIDUxMjc2LCAKKyAgICA1MTI5MiwgNTEzMDgsIDUxMzI0LCA1MTM0MCwgNTEzNTYsIDUxMzcyLCA1MTM4OCwgNTE0MDQsIDUxNDIwLCA1MTQzNiwgCisgICAgNTE0NTIsIDUxNDY4LCA1MTQ4NCwgNTE1MDAsIDUxNTE2LCA1MTUzMiwgNTE1NDgsIDUxNTY0LCA1MTU4MCwgNTE1OTYsIAorICAgIDUxNjEyLCA1MTYyOCwgNTE2NDQsIDUxNjYwLCA1MTY3NiwgNTE2OTIsIDUxNzA4LCA1MTcyNCwgNTE3NDAsIDUxNzU2LCAKKyAgICA1MTc3MiwgNTE3ODgsIDUxODA0LCA1MTgyMCwgNTE4MzYsIDUxODUyLCA1MTg2OCwgNTE4ODQsIDUxOTAwLCA1MTkxNiwgCisgICAgNTE5MzIsIDUxOTQ4LCA1MTk2NCwgNTE5ODAsIDUxOTk2LCA1MjAxMiwgNTIwMjgsIDUyMDQ0LCA1MjA2MCwgNTIwNzYsIAorICAgIDUyMDkyLCA1MjEwOCwgNTIxMjQsIDUyMTQwLCA1MjE1NiwgNTIxNzIsIDUyMTg4LCA1MjIwNCwgNTIyMjAsIDUyMjM2LCAKKyAgICA1MjI1MiwgNTIyNjgsIDUyMjg0LCA1MjMwMCwgNTIzMTYsIDUyMzMyLCA1MjM0OCwgNTIzNjQsIDUyMzgwLCA1MjM5NiwgCisgICAgNTI0MTIsIDUyNDI4LCA1MjQ0NCwgNTI0NjAsIDUyNDc2LCA1MjQ5MiwgNTI1MDgsIDUyNTI0LCA1MjU0MCwgNTI1NTYsIAorICAgIDUyNTcyLCA1MjU4OCwgNTI2MDQsIDUyNjIwLCA1MjYzNiwgNTI2NTIsIDUyNjY4LCA1MjY4NCwgNTI3MDAsIDUyNzE2LCAKKyAgICA1MjczMiwgNTI3NDgsIDUyNzY0LCA1Mjc4MCwgNTI3OTYsIDUyODEyLCA1MjgyOCwgNTI4NDQsIDUyODYwLCA1Mjg3NiwgCisgICAgNTI4OTIsIDUyOTA4LCA1MjkyNCwgNTI5NDAsIDUyOTU2LCA1Mjk3MiwgNTI5ODgsIDUzMDA0LCA1MzAyMCwgNTMwMzYsIAorICAgIDUzMDUyLCA1MzA2OCwgNTMwODQsIDUzMTAwLCA1MzExNiwgNTMxMzIsIDUzMTQ4LCA1MzE2NCwgNTMxODAsIDUzMTk2LCAKKyAgICA1MzIxMiwgNTMyMjgsIDUzMjQ0LCA1MzI2MCwgNTMyNzYsIDUzMjkyLCA1MzMwOCwgNTMzMjQsIDUzMzQwLCA1MzM1NiwgCisgICAgNTMzNzIsIDUzMzg4LCA1MzQwNCwgNTM0MjAsIDUzNDM2LCA1MzQ1MiwgNTM0NjgsIDUzNDg0LCA1MzUwMCwgNTM1MTYsIAorICAgIDUzNTMyLCA1MzU0OCwgNTM1NjQsIDUzNTgwLCA1MzU5NiwgNTM2MTIsIDUzNjI4LCA1MzY0NCwgNTM2NjAsIDUzNjc2LCAKKyAgICA1MzY5MiwgNTM3MDgsIDUzNzI0LCA1Mzc0MCwgNTM3NTYsIDUzNzcyLCA1Mzc4OCwgNTM4MDQsIDUzODIwLCA1MzgzNiwgCisgICAgNTM4NTIsIDUzODY4LCA1Mzg4NCwgNTM5MDAsIDUzOTE2LCA1MzkzMiwgNTM5NDgsIDUzOTY0LCA1Mzk4MCwgNTM5OTYsIAorICAgIDU0MDEyLCA1NDAyOCwgNTQwNDQsIDU0MDYwLCA1NDA3NiwgNTQwOTIsIDU0MTA4LCA1NDEyNCwgNTQxNDAsIDU0MTU2LCAKKyAgICA1NDE3MiwgNTQxODgsIDU0MjA0LCA1NDIyMCwgNTQyMzYsIDU0MjUyLCA1NDI2OCwgNTQyODQsIDU0MzAwLCA1NDMxNiwgCisgICAgNTQzMzIsIDU0MzQ4LCA1NDM2NCwgNTQzODAsIDU0Mzk2LCA1NDQxMiwgNTQ0MjgsIDU0NDQ0LCA1NDQ2MCwgNTQ0NzYsIAorICAgIDU0NDkyLCA1NDUwOCwgNTQ1MjQsIDU0NTQwLCA1NDU1NiwgNTQ1NzIsIDU0NTg4LCA1NDYwNCwgNTQ2MjAsIDU0NjM2LCAKKyAgICA1NDY1MiwgNTQ2NjgsIDU0Njg0LCA1NDcwMCwgNTQ3MTYsIDU0NzMyLCA1NDc0OCwgNTQ3NjQsIDU0NzgwLCA1NDc5NiwgCisgICAgNTQ4MTIsIDU0ODI4LCA1NDg0NCwgNTQ4NjAsIDU0ODc2LCA1NDg5MiwgNTQ5MDgsIDU0OTI0LCA1NDk0MCwgNTQ5NTYsIAorICAgIDU0OTcyLCA1NDk4OCwgNTUwMDQsIDU1MDIwLCA1NTAzNiwgNTUwNTIsIDU1MDY4LCA1NTA4NCwgNTUxMDAsIDU1MTE2LCAKKyAgICA1NTEzMiwgNTUxNDgsIDU1MTY0LCA1NTE4MCwgNTUxOTYsIDU1MjEyLCA1NTIyOCwgNTUyNDQsIDU1MjYwLCA1NTI3NiwgCisgICAgNTUyOTIsIDU1MzA4LCA1NTMyNCwgNTUzNDAsIDU1MzU2LCA1NTM3MiwgNTUzODgsIDU1NDA0LCA1NTQyMCwgNTU0MzYsIAorICAgIDU1NDUyLCA1NTQ2OCwgNTU0ODQsIDU1NTAwLCA1NTUxNiwgNTU1MzIsIDU1NTQ4LCA1NTU2NCwgNTU1ODAsIDU1NTk2LCAKKyAgICA1NTYxMiwgNTU2MjgsIDU1NjQ0LCA1NTY2MCwgNTU2NzYsIDU1NjkyLCA1NTcwOCwgNTU3MjQsIDU1NzQwLCA1NTc1NiwgCisgICAgNTU3NzIsIDU1Nzg4LCA1NTgwNCwgNTU4MjAsIDU1ODM2LCA1NTg1MiwgNTU4NjgsIDU1ODg0LCA1NTkwMCwgNTU5MTYsIAorICAgIDU1OTMyLCA1NTk0OCwgNTU5NjQsIDU1OTgwLCA1NTk5NiwgNTYwMTIsIDU2MDI4LCA1NjA0NCwgNTYwNjAsIDU2MDc2LCAKKyAgICA1NjA5MiwgNTYxMDgsIDU2MTI0LCA1NjE0MCwgNTYxNTYsIDU2MTcyLCA1NjE4OCwgNTYyMDQsIDU2MjIwLCA1NjIzNiwgCisgICAgNTYyNTIsIDU2MjY4LCA1NjI4NCwgNTYzMDAsIDU2MzE2LCA1NjMzMiwgNTYzNDgsIDU2MzY0LCA1NjM4MCwgNTYzOTYsIAorICAgIDU2NDEyLCA1NjQyOCwgNTY0NDQsIDU2NDYwLCA1NjQ3NiwgNTY0OTIsIDU2NTA4LCA1NjUyNCwgNTY1NDAsIDU2NTU2LCAKKyAgICA1NjU3MiwgNTY1ODgsIDU2NjA0LCA1NjYyMCwgNTY2MzYsIDU2NjUyLCA1NjY2OCwgNTY2ODQsIDU2NzAwLCA1NjcxNiwgCisgICAgNTY3MzIsIDU2NzQ4LCA1Njc2NCwgNTY3ODAsIDU2Nzk2LCA1NjgxMiwgNTY4MjgsIDU2ODQ0LCA1Njg2MCwgNTY4NzYsIAorICAgIDU2ODkyLCA1NjkwOCwgNTY5MjQsIDU2OTQwLCA1Njk1NiwgNTY5NzIsIDU2OTg4LCA1NzAwNCwgNTcwMjAsIDU3MDM2LCAKKyAgICA1NzA1MiwgNTcwNjgsIDU3MDg0LCA1NzEwMCwgNTcxMTYsIDU3MTMyLCA1NzE0OCwgNTcxNjQsIDU3MTgwLCA1NzE5NiwgCisgICAgNTcyMTIsIDU3MjI4LCA1NzI0NCwgNTcyNjAsIDU3Mjc2LCA1NzI5MiwgNTczMDgsIDU3MzI0LCA1NzM0MCwgNTczNTYsIAorICAgIDU3MzcyLCA1NzM4OCwgNTc0MDQsIDU3NDIwLCA1NzQzNiwgNTc0NTIsIDU3NDY4LCA1NzQ4NCwgNTc1MDAsIDU3NTE2LCAKKyAgICA1NzUzMiwgNTc1NDgsIDU3NTY0LCA1NzU4MCwgNTc1OTYsIDU3NjEyLCA1NzYyOCwgNTc2NDQsIDU3NjYwLCA1NzY3NiwgCisgICAgNTc2OTIsIDU3NzA4LCA1NzcyNCwgNTc3NDAsIDU3NzU2LCA1Nzc3MiwgNTc3ODgsIDU3ODA0LCA1NzgyMCwgNTc4MzYsIAorICAgIDU3ODUyLCA1Nzg2OCwgNTc4ODQsIDU3OTAwLCA1NzkxNiwgNTc5MzIsIDU3OTQ4LCA1Nzk2NCwgNTc5ODAsIDU3OTk2LCAKKyAgICA1ODAxMiwgNTgwMjgsIDU4MDQ0LCA1ODA2MCwgNTgwNzYsIDU4MDkyLCA1ODEwOCwgNTgxMjQsIDU4MTQwLCA1ODE1NiwgCisgICAgNTgxNzIsIDU4MTg4LCA1ODIwNCwgNTgyMTksIDE2NzYyLCA1ODIyOCwgNTgyMzQsIDU4MjQwLCA1ODI1MCwgNTgyNTgsIAorICAgIDE0ODk0LCAxNTQ0NSwgOTk2MCwgNTgyNzEsIDE1MjAsIDU4Mjc5LCAzNzYxLCAyNzQzMiwgNzE4MywgNTgyODUsIDU4MjkwLCAKKyAgICA1ODI5NSwgNTgzMDAsIDU4MzA1LCA1ODMxMSwgNTgzMTYsIDU4MzIyLCA1ODMyNywgNTgzMzMsIDU4MzM4LCA1ODM0MywgCisgICAgNTgzNDgsIDU4MzUzLCA1ODM1OSwgNTgzNjQsIDU4MzY5LCA1ODM3NCwgNTgzNzksIDU4Mzg0LCA1ODM4OSwgNTgzOTQsIAorICAgIDU4NDAwLCA1ODQwNSwgNTg0MTEsIDU4NDE4LCAyNTYxLCA1ODQyMywgNTg0MjksIDg1MjYsIDU4NDMzLCA1ODQzOCwgCisgICAgNTg0NDUsIDU4NDUzLCA0MCwgNTg0NTcsIDU4NDYzLCA1ODQ2OCwgNTg0NzMsIDU4NDc3LCA1ODQ4MiwgNTg0ODYsIDU4NDkwLCAKKyAgICAxMDY4NCwgNTg0OTQsIDU4NTA0LCA1ODUxNywgNTg1MjgsIDU4NTQxLCA1ODU0OCwgNTg1NTQsIDU4NTU5LCA1ODU2NSwgCisgICAgNTg1NzEsIDU4NTc3LCA1ODU4MiwgNTg1ODcsIDU4NTkyLCA1ODU5NywgNTg2MDEsIDU4NjA2LCA1ODYxMSwgNTg2MTYsIAorICAgIDU4NjIyLCA1ODYyOCwgNTg2MzQsIDU4NjM5LCA1ODY0MywgNTg2NDgsIDU4NjUzLCA1ODY1NywgNTg2NjIsIDU4NjY3LCAKKyAgICA1ODY3MiwgNTg2NzYsIDEwNzAwLCAxMDcxMSwgMTA3MTYsIDE1NjMsIDU4NjgwLCAxNTY4LCA1ODY4NiwgMTYyMzksIAorICAgIDU4Njg5LCA1ODY5NSwgMTU5OSwgNTg3MDEsIDE2MDUsIDE2MTEsIDEwNzQ2LCA1ODcwNiwgNTg3MTQsIDU4NzIxLCA1ODcyNSwgCisgICAgNTg3MzEsIDU4NzM2LCAzMDk3NywgNTg3NDEsIDU4NzQ4LCA1ODc1MywgNTg3NTcsIDU4NzYxLCAxNjE2LCAxNjMzMSwgCisgICAgNTg3NzAsIDU4Nzc0LCAxNjM0MiwgMTEyNSwgNTg3NzgsIDU4Nzg1LCA1ODc5MCwgNTg3OTQsIDE2MzY3LCAxNjIwLCAKKyAgICAzNzM1MCwgNTg3OTcsIDU4ODAyLCA1ODgxMiwgNTg4MjEsIDU4ODI2LCA1ODgzMCwgNTg4MzYsIDE2MjUsIDM5MjU5LCAKKyAgICA1ODg0MSwgNTg4NTAsIDU4ODU2LCA1ODg2MSwgMTA5MDQsIDEwOTEwLCA1ODg2NywgNTg4NzksIDU4ODk2LCA1ODkxMywgCisgICAgNTg5MzAsIDU4OTQ3LCA1ODk2NCwgNTg5ODEsIDU4OTk4LCA1OTAxNSwgNTkwMzIsIDU5MDQ5LCA1OTA2NiwgNTkwODMsIAorICAgIDU5MTAwLCA1OTExNywgNTkxMzQsIDU5MTUxLCA1OTE2OCwgNTkxODUsIDU5MjAyLCA1OTIxOSwgNTkyMzYsIDU5MjUzLCAKKyAgICA1OTI3MCwgNTkyODcsIDU5MzA0LCA1OTMyMSwgNTkzMzgsIDU5MzU1LCA1OTM3MiwgNTkzODksIDU5NDA2LCA1OTQyMywgCisgICAgNTk0NDAsIDU5NDU3LCA1OTQ3NCwgNTk0OTEsIDU5NTA4LCA1OTUyNSwgNTk1NDIsIDU5NTU5LCA1OTU3NiwgNTk1OTMsIAorICAgIDU5NjEwLCA1OTYyNywgNTk2NDQsIDU5NjYxLCA1OTY3OCwgNTk2OTUsIDU5NzEyLCA1OTcyMywgNTk3MjgsIDE2MzAsIAorICAgIDU5NzMyLCA1OTczOCwgNTk3NDMsIDU5NzQ4LCA5MzI2LCAxNjM1LCA1OTc1NCwgNTk3NjMsIDI3NzMxLCA1OTc2OCwgCisgICAgNTk3NzksIDU5Nzg5LCA1OTc5NCwgNTk4MDEsIDU5ODA3LCA1OTgxMiwgNTk4MTcsIDE2NjE5LCA1OTgyMSwgMTA5MjEsIAorICAgIDE2NDAsIDEwOTI2LCA1OTgyNywgNTk4MzIsIDU5ODM4LCA1OTg0MywgNTk4NDgsIDU5ODUzLCA1OTg1OCwgNTk4NjMsIAorICAgIDU5ODY4LCA1OTg3MywgNTk4NzksIDU5ODg1LCA1OTg5MSwgNTk4OTYsIDU5OTAwLCA1OTkwNSwgNTk5MTAsIDU5OTE0LCAKKyAgICA1OTkxOSwgNTk5MjQsIDU5OTI5LCA1OTkzMywgNTk5MzgsIDU5OTQ0LCA1OTk0OSwgNTk5NTQsIDU5OTU4LCA1OTk2MywgCisgICAgNTk5NjgsIDU5OTc0LCA1OTk3OSwgNTk5ODQsIDU5OTkwLCA1OTk5NiwgNjAwMDEsIDYwMDA1LCA2MDAxMCwgNjAwMTUsIAorICAgIDYwMDIwLCA2MDAyNCwgNjAwMjksIDYwMDM0LCA2MDAzOSwgNjAwNDUsIDYwMDUxLCA2MDA1NiwgNjAwNjAsIDYwMDY0LCAKKyAgICA2MDA2OSwgNjAwNzQsIDYwMDc5LCAyOTEyOSwgNjAwODMsIDYwMDg4LCA2MDA5MywgNjAwOTksIDYwMTA0LCA2MDEwOSwgCisgICAgNjAxMTMsIDYwMTE4LCA2MDEyMywgNjAxMjksIDYwMTM0LCA2MDEzOSwgNjAxNDUsIDYwMTUxLCA2MDE1NiwgNjAxNjAsIAorICAgIDYwMTY1LCA2MDE3MCwgNjAxNzQsIDYwMTc5LCA2MDE4NCwgNjAxODksIDYwMTk1LCA2MDIwMSwgNjAyMDYsIDYwMjEwLCAKKyAgICA2MDIxNSwgNjAyMjAsIDYwMjI0LCA2MDIyOSwgNjAyMzQsIDYwMjM5LCA2MDI0MywgNjAyNDYsIDMxNjM5LCA2MDI1MSwgCisgICAgNjAyNTksIDE2Njg1LCAzNjYzLCAxMTAxNywgNjAyNjUsIDYwMjc1LCA2MDI5MCwgMTEwMjIsIDYwMzAxLCA2MDMwNiwgCisgICAgNjAzMTcsIDYwMzI5LCA2MDM0MSwgNjAzNTMsIDI2OTUsIDYwMzY1LCA2MDM3MCwgNjAzODIsIDYwMzg2LCA2MDM5MiwgCisgICAgNjAzOTgsIDYwNDAzLCAxNjUyLCAxMDc4LCA2MDQxMiwgNjA0MTcsIDM5MzA5LCA2MDQyMSwgNjA0MjUsIDYwNDMwLCAKKyAgICA2MDQzNCwgMTY3NzAsIDYwNDM5LCA2MDQ0MiwgNjA0NTAsIDYwNDU4LCAxNjU2LCAxMTA0NywgMTEwNTMsIDE2NjEsIAorICAgIDYwNDY2LCA2MDQ3MywgNjA0NzgsIDYwNDg3LCA2MDQ5NywgNjA1MDQsIDYwNTA5LCA2MDUxNCwgMTY2NiwgNjA1MjEsIAorICAgIDYwNTI2LCAxNjg4NSwgNjA1MzAsIDYwNTM1LCA2MDU0MiwgNjA1NDgsIDYwNTUyLCA2MDU2MywgNjA1NzMsIDE2OTA3LCAKKyAgICA5MjM0LCA5MjQxLCAxNjcxLCA2MDU4MCwgNjA1ODYsIDYwNTk0LCA2MDYwMSwgNjA2MDcsIDYwNjE0LCA2MDYyNiwgNjA2MzIsIAorICAgIDYwNjM3LCA2MDY0OSwgNjA2NjAsIDYwNjY5LCA2MDY3OSwgMzc0MCwgMzA4MTMsIDMwODIyLCAxNjk0NywgMTY3NiwgMTY4MCwgCisgICAgNjA2ODcsIDYwNjk4LCA2MDcwMywgMTY4MywgNjA3MTEsIDYwNzE2LCAxNjk5OCwgNjA3MjgsIDYwNzM0LCA2MDczOSwgCisgICAgNjA3NDcsIDE2ODgsIDYwNzUyLCA2MDc1NywgNjA3NjUsIDYwNzczLCA2MDc4MCwgNjA3ODksIDYwNzk3LCA2MDgwNiwgCisgICAgMTY5MywgNjA4MTAsIDE2OTgsIDYwODE1LCA2MDgyMiwgMTcwNzIsIDYwODMwLCA2MDgzNiwgNjA4NDEsIDYwODQ5LCAKKyAgICA2MDg1NiwgNjA4NjQsIDIyNTc0LCA2MDg2OSwgMTExODIsIDYwODc4LCA2MDg4NCwgNjA4OTEsIDYwODk4LCA2MDkwNCwgCisgICAgNjA5MTQsIDYwOTIwLCA2MDkyNSwgNjA5MzYsIDYwOTQxLCA2MDk0OSwgMTExOTEsIDExMTk2LCA2MDk1NywgNjA5NjMsIAorICAgIDYwOTcxLCAzODA1LCAxNzExNCwgMzkzOTcsIDYwOTc2LCA2MDk4MiwgNjA5ODcsIDYwOTk1LCA2MTAwMiwgMTIwMzYsIAorICAgIDYxMDA3LCA2MTAxMywgMTcwOSwgNjEwMTgsIDYxMDIxLCAxMTMyLCA2MTAyNywgNjEwMzIsIDYxMDM3LCA2MTA0MywgCisgICAgNjEwNDgsIDYxMDUzLCA2MTA1OCwgNjEwNjMsIDYxMDY4LCA2MTA3MywgMTcxOCwgOSwgNjEwNzksIDYxMDgzLCA2MTA4OCwgCisgICAgNjEwOTIsIDYxMDk2LCA2MTEwMCwgMzE4NzksIDYxMTA1LCA2MTExMCwgNjExMTUsIDYxMTE5LCA2MTEyMiwgNjExMjYsIAorICAgIDYxMTMwLCA2MTEzNSwgNjExMzksIDYxMTQ0LCA2MTE0OCwgMzQ2MTYsIDM0NjIxLCAzNDYyNiwgNjExNTEsIDYxMTU4LCAKKyAgICA2MTE2NCwgMzkxMTgsIDYxMTc0LCAzNDYzMiwgMzIxMzcsIDMxODk0LCAzMTkwMCwgMzQ2NDgsIDMxOTA2LCA2MTE3OSwgCisgICAgNjExODQsIDMyMTcwLCA2MTE4OCwgNjExOTEsIDYxMTk1LCA2MTIwMiwgNjEyMDUsIDYxMjEwLCA2MTIxNCwgNjEyMTgsIAorICAgIDYxMjIxLCA2MTIzMSwgNjEyNDMsIDYxMjUwLCA2MTI1NiwgNjEyNjMsIDMzNTczLCA2MTI2NiwgODU0MywgODc3LCA2MTI2OSwgCisgICAgNjEyNzMsIDYxMjc4LCAzNjkwLCA2MTI4MiwgNjEyODUsIDEzNjMyLCA2MTI5MiwgNjEyOTksIDYxMzEyLCA2MTMyMCwgCisgICAgNjEzMjksIDYxMzM4LCA2MTM0MywgNjEzNTMsIDYxMzY2LCA2MTM3OCwgNjEzODUsIDYxMzkwLCA2MTM5OSwgNjE0MTIsIAorICAgIDM2MDYwLCA2MTQzMCwgNjE0MzUsIDYxNDQyLCA2MTQ0OCwgNjU2LCA2MTQ1MywgNjE0NjEsIDYxNDY4LCAyNzI3MSwgNjI3LCAKKyAgICA2MTQ3NCwgNjE0ODAsIDYxNDkwLCA2MTQ5NiwgNjE1MDEsIDMxOTI0LCA2MDAzLCAzMTkzOCwgNjE1MDUsIDYxNTE1LCAKKyAgICA2MTUyMCwgNjE1MzAsIDYxNTQ1LCA2MTU1MSwgNjE1NTcsIDMxOTQ4LCA2MTU2MiwgMzEwOTQsIDYxNTY2LCA2MTU3MSwgCisgICAgNjE1NzYsIDYxNTgwLCA2MTU4NSwgMTY5NTAsIDYxNTkyLCA2MTU5NywgNjE2MDEsIDYwNDQsIDMxOTc0LCA2MTYwNSwgCisgICAgNjE2MTEsIDMxMiwgNjE2MjEsIDYxNjI4LCA2MTYzNSwgNjE2NDAsIDYxNjQ5LCA1ODgwNiwgNjE2NTUsIDYxNjYzLCAKKyAgICA2MTY2NywgNjE2NzEsIDYxNjc1LCA2MTY3OSwgNjE2ODQsIDYxNjg4LCA2MTY5NCwgNjE3MDIsIDYxNzA3LCA2MTcxMiwgCisgICAgNjE3MTYsIDYxNzIxLCA2MTcyNSwgNjE3MjksIDYxNzM1LCA2MTc0MSwgNjE3NDYsIDYxNzUwLCAzMjA5OCwgNjE3NTUsIAorICAgIDMyMTA0LCAzMjExMCwgNjE3NjAsIDYxNzY2LCA2MTc3MywgNjE3NzgsIDYxNzgyLCAzMTExMSwgMTY2MTIsIDYxNzg1LCAKKyAgICA2MTc4OSwgNjE3OTQsIDYxODAxLCA2MTgwNywgNjE4MTEsIDYxODE2LCAzODgyOCwgNjE4MjIsIDYxODI2LCA2MTgzMCwgCisgICAgNjE4MzUsIDYxODQxLCA2MTg0NywgNjE4NTksIDYxODY4LCA2MTg3OCwgNjE4ODQsIDYxODkxLCA2MTg5NiwgNjE5MDEsIAorICAgIDYxOTA1LCA2MTkwOCwgNjE5MTQsIDYxOTIxLCA2MTkyNiwgNjE5MzEsIDYxOTM4LCA2MTk0NSwgNjE5NTEsIDYxOTU2LCAKKyAgICA2MTk2MSwgNjE5NjksIDMyMTE1LCAyNDIzLCA2MTk3NCwgNjE5NzksIDYxOTg1LCA2MTk5MCwgNjE5OTYsIDYyMDAxLCAKKyAgICA2MjAwNiwgNjIwMTEsIDYyMDE3LCAzMjEzNiwgNjIwMjIsIDYyMDI4LCA2MjAzNCwgNjIwNDAsIDMyMjAwLCA2MjA0NSwgCisgICAgNjIwNTAsIDYyMDU1LCAzMjIxMSwgNjIwNjAsIDYyMDY1LCA2MjA3MCwgNjIwNzYsIDYyMDgyLCAzMjIxNiwgNjIwODcsIAorICAgIDYyMDkyLCA2MjA5NywgMzIyNzEsIDMyMjc3LCA2MjEwMiwgNjIxMDcsIDMyMjgyLCA2MjExMiwgMjc5NTgsIDMyMzA0LCAKKyAgICAzMjMwOCwgNjIxMTcsIDYyMDkzLCA2MjEyMSwgNjIxMjksIDYyMTM1LCA2MjE0MywgNjIxNTAsIDYyMTU2LCA2MjE2NiwgCisgICAgNjIxNzIsIDYyMTc5LCAxMDYzMSwgMzIzMjIsIDYyMTg1LCA2MjE5OCwgNjIyMDcsIDYyMjEzLCA2MjIyMiwgNjIyMjgsIAorICAgIDIzNTEyLCA2MjIzNSwgNjIyNDIsIDYyMjUyLCAzMjI3MiwgNjIyNTUsIDYyMjYyLCA2MjI2NywgNjIyNzEsIDYyMjc1LCAKKyAgICA2MjI4MCwgNjEyMCwgNjIyODQsIDYyMjg5LCA2MjI5NCwgMzQ3MTAsIDM0NzE1LCA2MjI5OCwgMzQ3MjksIDYyMzAzLCAKKyAgICAzNDczNCwgNjIzMDgsIDYyMzE0LCAzNDc0NiwgMzQ3NTIsIDM0NzU4LCA2MjMxOSwgNjIzMjUsIDIyNTM5LCA2MjMzNiwgCisgICAgNjIzMzksIDYyMzUxLCA2MjM1OSwgMzIzNDUsIDYyMzYzLCA2MjM3MiwgNjIzODIsIDYyMzkxLCAzMjM1NSwgNjIzOTYsIAorICAgIDYyNDAzLCA2MjQxMiwgNjI0MTgsIDYyNDI2LCA2MjQzMywgNjA5NSwgNDM5NywgNjI0MzgsIDMyMjgzLCA2MjQ0NCwgCisgICAgNjI0NDcsIDYyNDUzLCA2MjQ2MCwgNjI0NjUsIDYyNDcwLCAyMzQyMiwgNjI0NzQsIDYyNDgwLCA2MjQ4NiwgNjI0OTEsIAorICAgIDYyNDk2LCA2MjUwMCwgNjI1MDYsIDYyNTEyLCAzMzQ4MywgODYzLCAzNTcyMywgMzY2NDQsIDM2NjUwLCAzMjM5MSwgCisgICAgNjI1MTcsIDYyNTIxLCA2MjUyNSwgNjI1MjgsIDYyNTQxLCA2MjU0NywgNjI1NTEsIDYyNTU0LCA2MjU1OSwgMzM3ODYsIAorICAgIDYyNTYzLCAzMTExNiwgMjEyODcsIDYyNTY5LCA2MDI0LCA2MDMyLCA5MDc1LCA2MjU3MiwgNjI1NzcsIDYyNTgyLCA2MjU4NywgCisgICAgNjI1OTIsIDYyNTk3LCA2MjYwMiwgNjI2MDcsIDYyNjEyLCA2MjYxNywgNjI2MjMsIDYyNjI4LCA2MjYzMywgNjI2MzksIAorICAgIDYyNjQ0LCA2MjY0OSwgNjI2NTQsIDYyNjU5LCA2MjY2NCwgNjI2NjksIDYyNjc1LCA2MjY4MCwgNjI2ODYsIDYyNjkxLCAKKyAgICA2MjY5NiwgNjI3MDEsIDYyNzA2LCA2MjcxMSwgNjI3MTYsIDYyNzIxLCA2MjcyNiwgNjI3MzEsIDYyNzM2LCA2Mjc0MiwgCisgICAgNjI3NDcsIDYyNzUyLCA2Mjc1NywgNjI3NjIsIDYyNzY3LCA2Mjc3MiwgNjI3NzgsIDYyNzgzLCA2Mjc4OCwgNjI3OTMsIAorICAgIDYyNzk4LCA2MjgwMywgNjI4MDgsIDYyODEzLCA2MjgxOCwgNjI4MjMsIDYyODI5LCA2MjgzNCwgNjI4MzksIDYyODQ0LCAKKyAgICA2Mjg0OSwgNjI4NTUsIDYyODYxLCA2Mjg2NiwgNjI4NzIsIDYyODc3LCA2Mjg4MiwgNjI4ODcsIDYyODkyLCA2Mjg5NywgCisgICAgMTUxMywgMjQ1LCA2MjkwMiwgNjI5MDYsIDYyOTEwLCA2MjkxNCwgMjUxMzMsIDYyOTE4LCA2MjkyMiwgNjI5MjcsIDYyOTMxLCAKKyAgICA2MjkzNiwgNjI5NDAsIDYyOTQ1LCA2Mjk1MCwgNjI5NTUsIDYyOTU5LCA2Mjk2MywgNjI5NjgsIDYyOTcyLCAxMzM2OSwgCisgICAgNjI5NzcsIDYyOTgxLCA2Mjk4OCwgNjI5OTgsIDE1MjA2LCA2MzAwNywgNjMwMTYsIDYzMDIwLCA2MzAyNSwgNjMwMzAsIAorICAgIDYzMDM0LCAyNDkyNCwgMzAxOSwgNjMwMzgsIDYzMDQ0LCAxNzM2MywgNjMwNDgsIDYzMDU3LCA2MzA2NSwgNjMwNzEsIAorICAgIDYzMDgzLCA2MzA5NSwgNjMwOTksIDYzMTA0LCA2MzEwOCwgNjMxMTQsIDYzMTIwLCA2MzEyNSwgNjMxMzUsIDYzMTQ1LCAKKyAgICA2MzE1MSwgNjMxNTYsIDYzMTYwLCA2MzE2NSwgNjMxNzEsIDYzMTgwLCA2MzE4OSwgNjMxOTcsIDE1NTYwLCA2MzIwMSwgCisgICAgNjMyMTAsIDYzMjE4LCA2MzIzMCwgNjMyNDEsIDYzMjUyLCA2MzI2MSwgNjMyNjUsIDYzMjc0LCA2MzI4NCwgNjMyOTIsIAorICAgIDYzMjk4LCA2MzMwMywgNjMzMDksIDYzMzE0LCA5OCwgMzA5MjUsIDYzMzI1LCAyNjI2NiwgMjYyNzYsIDYzMzMxLCA2MzMzOCwgCisgICAgNjMzNDQsIDYzMzQ4LCA2MzM1OCwgNjMzNjksIDYzMzc3LCA2MzM4NiwgNjMzOTEsIDYzMzk2LCA2MzQwMCwgMTczMTcsIAorICAgIDYzNDA4LCA2MzQxMiwgNjM0MTgsIDYzNDI4LCA2MzQzNSwgNjM0NDEsIDM0ODA5LCA2MzQ0NywgNjM0NDksIDYzNDUyLCAKKyAgICA2MzQ1NiwgNjM0NjYsIDYzNDcyLCA2MzQ3OSwgMTMzMTUsIDYzNDg2LCA2MzQ5MiwgNjM1MDEsIDYzNTEwLCA2MzUxNiwgCisgICAgNjM1MjIsIDYzNTI4LCA2MzUzMywgNjM1NDAsIDYzNTQ3LCA2MzU1MywgNjM1NjYsIDYzNTc1LCA2MzU4NCwgNjM1ODksIAorICAgIDYzNTkzLCA2MzU5OSwgNjM2MDYsIDYzNjEzLCA2MzYyMCwgNjM2MjcsIDYzNjM0LCA2MzYzOSwgNjM2NDMsIDYzNjQ3LCAKKyAgICA2MzY1MCwgNjM2NjAsIDYzNjY0LCA2MzY3NiwgNjM2ODUsIDYzNjg5LCA2MzY5NCwgNjM2OTgsIDYzNzA0LCA2MzcwOSwgCisgICAgNjM3MTYsIDYzNzI1LCA2MzczMywgNjM3NDEsIDYzNzQ2LCA2Mzc1MCwgNjM3NTUsIDYzNzYwLCA2Mzc3MCwgNjM3NzgsIAorICAgIDYzNzgzLCA2Mzc4NywgNjM3OTEsIDYzNzk3LCA2MzgwOSwgNjM4MTcsIDYzODI3LCA2MzgzNCwgNjM4NDAsIDYzODQ1LCAKKyAgICA2Mzg0OSwgNjM4NTMsIDYzODU3LCA2Mzg2NiwgNjM4NzUsIDYzODg0LCA2Mzg5MCwgNjM4OTYsIDYzOTAyLCA2MzkwNywgCisgICAgNjM5MTQsIDYzOTIwLCA2MzkyOCwgNjM5MzUsIDEyNDYzLCA2Mzk0MSwgNjM5NDcsIDYzOTUxLCAxNDI0NCwgNjM5NTUsIAorICAgIDYzOTYwLCA2Mzk3MCwgNjM5NzksIDYzOTg1LCA2Mzk5MSwgNjM5OTksIDY0MDA2LCA2NDAxMCwgNjQwMTQsIDY0MDIwLCAKKyAgICA2NDAyOCwgNjQwMzUsIDY0MDQxLCA2NDA1MiwgNjQwNTYsIDY0MDYwLCA2NDA2NCwgNjQwNjcsIDY0MDczLCA2NDA3OCwgCisgICAgNjQwODIsIDY0MDg2LCA2NDA5NSwgNjQxMDMsIDY0MTEwLCA2NDExNiwgNjQxMjMsIDI0MDQ2LCAzODg3MCwgNjQxMjgsIAorICAgIDY0MTM2LCA2NDE0MCwgNjQxNDQsIDY0MTQ3LCA2NDE1NSwgNjQxNjIsIDY0MTY4LCA2NDE3NywgNjQxODUsIDY0MTkxLCAKKyAgICA2NDE5NiwgNjQyMDAsIDY0MjA1LCA2NDIwOSwgNjQyMTMsIDY0MjE4LCA2NDIyNywgNjQyMzEsIDY0MjM4LCA2NDI0NSwgCisgICAgNjQyNTEsIDY0MjU5LCA2NDI2NSwgNjQyNzYsIDY0Mjg0LCA2NDI5MCwgMjI2NjksIDY0Mjk5LCA2NDMwNiwgNjQzMTMsIAorICAgIDY0MzIwLCA2NDMyNywgNjQzMzQsIDQxOTA3LCAxMzE1MywgNjQzNDEsIDY0MzQ4LCA2NDM1MywgMzQ4NDUsIDYyMTcsIAorICAgIDY0MzU5LCA2NDM2NCwgNjQzNjksIDY0Mzc1LCA2NDM4MSwgNjQzODcsIDY0MzkyLCA2NDM5NywgNjQ0MDIsIDY0NDA3LCAKKyAgICA2NDQxMywgNjQ0MTgsIDY0NDI0LCA2NDQyOSwgNjQ0MzUsIDY0NDQwLCA2NDQ0NSwgNjQ0NTAsIDY0NDU1LCA2NDQ2MCwgCisgICAgNjQ0NjUsIDY0NDcwLCA2NDQ3NiwgNjQ0ODEsIDY0NDg3LCA2NDQ5MiwgNjQ0OTcsIDY0NTAyLCA2NDUwNywgNjQ1MTIsIAorICAgIDY0NTE3LCA2NDUyMywgNjQ1MjgsIDY0NTMzLCA2NDUzOCwgNjQ1NDMsIDY0NTQ4LCA2NDU1MywgNjQ1NTgsIDY0NTYzLCAKKyAgICA2NDU2OCwgNjQ1NzMsIDY0NTc5LCA2NDU4NCwgNjQ1ODksIDY0NTk0LCA2NDU5OSwgNjQ2MDQsIDY0NjA5LCA2NDYxNCwgCisgICAgNjQ2MTksIDY0NjI1LCA2NDYzMCwgNjQ2MzUsIDY0NjQwLCA2NDY0NSwgNjQ2NTAsIDY0NjU1LCA2NDY2MCwgNjQ2NjUsIAorICAgIDY0NjcwLCA2NDY3NSwgNjQ2ODAsIDY0Njg1LCA2NDY5MSwgMTgzNCwgMjI0LCAzNzQ0NiwgNjQ2OTYsIDY0Njk5LCA2NDcwNCwgCisgICAgNjQ3MDgsIDY0NzExLCA2NDcxNiwgNjM3MzcsIDY0NzI3LCA2NDczNywgNjQ3NDQsIDY0NzYwLCA2NDc2OSwgNjQ3NzksIAorICAgIDY0Nzg5LCA2NDc5NywgNjQ4MTEsIDY0ODE5LCA2NDgyMywgNjQ4MjYsIDY0ODMzLCA2NDgzOSwgNjQ4NTAsIDY0ODYyLCAKKyAgICA2NDg3MywgNjQ4ODIsIDY0ODg5LCAxMjk3LCAyMzMxMSwgNjQ4OTksIDI1OTAsIDY0OTAzLCA2NDkxMiwgMTEzOCwgMTcyOTAsIAorICAgIDM4MDgzLCA2NDkyMCwgNjQ5MjgsIDY0OTQyLCA2NDk1NSwgNjQ5NTksIDY0OTY0LCA2NDk2OSwgNjQ5NzQsIDY0OTgwLCAKKyAgICA2NDk4NiwgNjQ5OTEsIDg1MzUsIDY0OTk2LCA2NTAwMCwgNjUwMDgsIDExMDQ4LCA2NTAxMywgNjUwMTksIDY1MDI4LCAKKyAgICAxNzIxLCAxMTA2MCwgNzM2LCA2NTAzMiwgNjUwNDEsIDY1MDUxLCAyNzAzMCwgNjUwNjAsIDY1MDY2LCAxNjg2MiwgNjUwNzIsIAorICAgIDY1MDc2LCAzOTY0LCAxMTM5MSwgNjUwODIsIDY1MDg5LCA2MDY5MywgNjUwOTMsIDY1MDk3LCAzOTg4LCAxODksIDE0MTU5LCAKKyAgICA2NTEwMywgNjUxMTUsIDY1MTE5LCA2NTEyNSwgMjc3NTEsIDY1MTI5LCAxMTM3OSwgMjczMCwgNCwgNjUxMzQsIDY1MTQ0LCAKKyAgICA2NTE1MCwgNjUxNjEsIDY1MTY4LCA2NTE3NCwgNjUxODAsIDY1MTg4LCA2NTE5NSwgNjUyMDEsIDY1MjExLCA2NTIyMSwgCisgICAgNjUyMzEsIDIzNDk5LCAxMzA5LCA2NTI0MCwgNjUyNDQsIDY1MjQ4LCA2NTI1NCwgNjUyNTgsIDI3NTMsIDI3NTksIDg1MzIsIAorICAgIDIyNjQsIDY1MjYyLCA2NTI2NiwgNjUyNzUsIDY1MjgzLCA2NTI5NCwgNjUzMDIsIDY1MzEwLCA2NTMxNiwgNjUzMjEsIAorICAgIDY1MzMyLCA2NTM0MywgNjUzNTEsIDY1MzU3LCA5Njk0LCA2NTM2MiwgNjUzNzAsIDY1Mzc0LCA2NTM3OCwgNjUzODIsIAorICAgIDY1Mzk0LCAyODEzNiwgNjU0MDEsIDY1NDExLCA2NTQxNywgNjU0MjMsIDk3OTYsIDY1NDMzLCA2NTQ0NCwgNjU0NTQsIAorICAgIDY1NDYzLCA2NTQ2NywgNjU0NzQsIDExNDAsIDExNzAsIDY1NDg0LCA2NTQ4OSwgNjU0OTcsIDY1NTA1LCA2NTUxNiwgCisgICAgNjU1MjMsIDY1NTM3LCAxNDA4OCwgMzkzLCA2NTU0NywgNjU1NTEsIDY1NTU5LCA2NTU2OCwgNjU1NzYsIDY1NTgyLCAKKyAgICA2NTU5NiwgNjU2MDMsIDY1NjA5LCA2NTYxOCwgNjU2MjUsIDY1NjM1LCA2NTY0MywgMzgxMiwgMTU2LCA2NTY1MSwgNjU2NjIsIAorICAgIDY1NjY2LCA2NTY3OCwgMjc5NDksIDE2MSwgNjU2ODQsIDY1Njg5LCA2NTY5MywgNjU3MDAsIDY1NzA2LCA2NTcxNCwgCisgICAgNjU3MjEsIDg4MTgsIDY1NzI4LCA2NTczNywgNjU3NDUsIDM4NzgsIDY1NzU4LCA4MTk5LCA2NTc2MiwgMjc5OCwgNDQzLCAKKyAgICA2NTc2NywgNjU3ODAsIDY1Nzg1LCAxODMzLCA2NTAsIDY1Nzg5LCAzODk1LCA2NTc5NywgNjU4MDMsIDY1ODA3LCA5MzEsIAorICAgIDY1ODE3LCA2NTgyNiwgNjU4MzEsIDE0OTI4LCAxNDkzNSwgNDUyNjksIDY1ODM1LCAzODIyLCAxMzA0MSwgNjU4NDMsIAorICAgIDY1ODUwLCAyMzU1NSwgNjU4NTQsIDY1ODYxLCA2NTg2NywgNjU4NzIsIDY1ODc3LCAxNDk0OCwgMzcyLCA2NTg4MiwgCisgICAgNjU4OTQsIDY1OTAwLCA2NTkwOCwgMjgxMCwgMTc1MywgNjU5MTYsIDY1OTE4LCA2NTkyMywgNjU5MjgsIDY1OTMzLCAKKyAgICA2NTkzOSwgNjU5NDQsIDY1OTQ5LCA2NTk1NCwgNjU5NTksIDY1OTY0LCA2NTk2OSwgNjU5NzUsIDY1OTgwLCA2NTk4NSwgCisgICAgNjU5OTAsIDY1OTk1LCA2NjAwMCwgNjYwMDUsIDY2MDEwLCA2NjAxNSwgNjYwMjEsIDY2MDI2LCA2NjAzMSwgNjYwMzYsIAorICAgIDY2MDQyLCA2NjA0NywgNjYwNTMsIDY2MDU4LCA2NjA2MywgNjYwNjgsIDY2MDczLCA2NjA3OCwgNjYwODMsIDY2MDg4LCAKKyAgICA2NjA5NCwgNjYwOTksIDY2MTA1LCA2NjExMCwgNjYxMTUsIDY2MTIwLCA2NjEyNSwgNjYxMzAsIDY2MTM1LCA2NjE0MCwgCisgICAgNjYxNDUsIDY2MTUxLCA2NjE1NiwgNjYxNjEsIDY2MTY2LCA2NjE3MCwgNjYxNzQsIDY2MTc5LCA2NjE4MywgNjYxODgsIAorICAgIDY2MTkzLCA2NjE5OSwgNjYyMDQsIDY2MjA4LCA2NjIxMywgNjYyMTcsIDY2MjIwLCA2NjIyMiwgNjYyMjYsIDY2MjI5LCAKKyAgICA2NjIzNCwgNjYyMzgsIDY2MjQyLCA2NjI0NiwgNjYyNTAsIDY2MjU5LCA2NjI2MywgMzI1NDksIDY2MjY2LCAzMjU1NCwgCisgICAgNjYyNzMsIDY2Mjc4LCAzMjU1OSwgNjYyODcsIDY2Mjk2LCAzMjU2NSwgNjYzMDEsIDMyNTcwLCA2NjMxMCwgNjYzMTUsIAorICAgIDExNTc4LCA2NjMxOSwgNjYzMjQsIDY2MzI5LCAzMjU3NSwgNjYzMzMsIDQwMjI1LCA2NjMzNywgNjYzNDAsIDY2MzQ0LCAKKyAgICA4MjExLCA2NjM1MCwgNjYzNTUsIDY2MzU5LCAzNzA1LCAzMjU4MCwgNjYzNjIsIDY2MzY2LCA2NjM2OSwgNjYzNzQsIAorICAgIDY2Mzc4LCA2NjM4NCwgNjYzOTIsIDY2NDA1LCA2NjQxNCwgNjY0MjAsIDY2NDI1LCA2NjQzMSwgNjY0MzUsIDY2NDQxLCAKKyAgICA2NjQ0OSwgNjY0NTQsIDY2NDU4LCA2NjQ2NSwgNjY0NzEsIDY2NDc5LCA2NjQ4OCwgNjY0OTYsIDMyNTgzLCA2NjUwMywgCisgICAgNjY1MTMsIDY2NTIyLCA2NjUzNSwgNjY1NDAsIDY2NTQ1LCA2NjU1NCwgNjY1NjAsIDY2NTY3LCA2NjU3OCwgNjY1OTAsIAorICAgIDY2NTk3LCA2NjYwNiwgNjY2MTUsIDY2NjI0LCA2NjYzMSwgNjY2MzcsIDY2NjQ0LCA2NjY1MiwgNjY2NTksIDY2NjY3LCAKKyAgICA2NjY3NiwgNjY2ODQsIDY2NjkxLCA2NjY5OSwgNjY3MDgsIDY2NzE2LCA2NjcyNSwgNjY3MzUsIDY2NzQ0LCA2Njc1MiwgCisgICAgNjY3NTksIDY2NzY3LCA2Njc3NiwgNjY3ODQsIDY2NzkzLCA2NjgwMywgNjY4MTIsIDY2ODIwLCA2NjgyOSwgNjY4MzksIAorICAgIDY2ODQ4LCA2Njg1OCwgNjY4NjksIDY2ODc5LCA2Njg4OCwgNjY4OTYsIDY2OTAzLCA2NjkxMSwgNjY5MjAsIDY2OTI4LCAKKyAgICA2NjkzNywgNjY5NDcsIDY2OTU2LCA2Njk2NCwgNjY5NzMsIDY2OTgzLCA2Njk5MiwgNjcwMDIsIDY3MDEzLCA2NzAyMywgCisgICAgNjcwMzIsIDY3MDQwLCA2NzA0OSwgNjcwNTksIDY3MDY4LCA2NzA3OCwgNjcwODksIDY3MDk5LCA2NzEwOCwgNjcxMTgsIAorICAgIDY3MTI5LCA2NzEzOSwgNjcxNTAsIDY3MTYyLCA2NzE3MywgNjcxODMsIDY3MTkyLCA2NzIwMCwgNjcyMDcsIDY3MjE1LCAKKyAgICA2NzIyNCwgNjcyMzIsIDY3MjQxLCA2NzI1MSwgNjcyNjAsIDY3MjY4LCA2NzI3NywgNjcyODcsIDY3Mjk2LCA2NzMwNiwgCisgICAgNjczMTcsIDY3MzI3LCA2NzMzNiwgNjczNDQsIDY3MzUzLCA2NzM2MywgNjczNzIsIDY3MzgyLCA2NzM5MywgNjc0MDMsIAorICAgIDY3NDEyLCA2NzQyMiwgNjc0MzMsIDY3NDQzLCA2NzQ1NCwgNjc0NjYsIDY3NDc3LCA2NzQ4NywgNjc0OTYsIDY3NTA0LCAKKyAgICA2NzUxMywgNjc1MjMsIDY3NTMyLCA2NzU0MiwgNjc1NTMsIDY3NTYzLCA2NzU3MiwgNjc1ODIsIDY3NTkzLCA2NzYwMywgCisgICAgNjc2MTQsIDY3NjI2LCA2NzYzNywgNjc2NDcsIDY3NjU2LCA2NzY2NiwgNjc2NzcsIDY3Njg3LCA2NzY5OCwgNjc3MTAsIAorICAgIDY3NzIxLCA2NzczMSwgNjc3NDIsIDY3NzU0LCA2Nzc2NSwgNjc3NzcsIDY3NzkwLCA2NzgwMiwgNjc4MTMsIDY3ODIzLCAKKyAgICA2NzgzMiwgNjc4NDAsIDY3ODQ3LCA2Nzg1NSwgNjc4NjQsIDY3ODcyLCA2Nzg4MSwgNjc4OTEsIDY3OTAwLCA2NzkwOCwgCisgICAgNjc5MTcsIDY3OTI3LCA2NzkzNiwgNjc5NDYsIDY3OTU3LCA2Nzk2NywgNjc5NzYsIDY3OTg0LCA2Nzk5MywgNjgwMDMsIAorICAgIDY4MDEyLCA2ODAyMiwgNjgwMzMsIDY4MDQzLCA2ODA1MiwgNjgwNjIsIDY4MDczLCA2ODA4MywgNjgwOTQsIDY4MTA2LCAKKyAgICA2ODExNywgNjgxMjcsIDY4MTM2LCA2ODE0NCwgNjgxNTMsIDY4MTYzLCA2ODE3MiwgNjgxODIsIDY4MTkzLCA2ODIwMywgCisgICAgNjgyMTIsIDY4MjIyLCA2ODIzMywgNjgyNDMsIDY4MjU0LCA2ODI2NiwgNjgyNzcsIDY4Mjg3LCA2ODI5NiwgNjgzMDYsIAorICAgIDY4MzE3LCA2ODMyNywgNjgzMzgsIDY4MzUwLCA2ODM2MSwgNjgzNzEsIDY4MzgyLCA2ODM5NCwgNjg0MDUsIDY4NDE3LCAKKyAgICA2ODQzMCwgNjg0NDIsIDY4NDUzLCA2ODQ2MywgNjg0NzIsIDY4NDgwLCA2ODQ4OSwgNjg0OTksIDY4NTA4LCA2ODUxOCwgCisgICAgNjg1MjksIDY4NTM5LCA2ODU0OCwgNjg1NTgsIDY4NTY5LCA2ODU3OSwgNjg1OTAsIDY4NjAyLCA2ODYxMywgNjg2MjMsIAorICAgIDY4NjMyLCA2ODY0MiwgNjg2NTMsIDY4NjYzLCA2ODY3NCwgNjg2ODYsIDY4Njk3LCA2ODcwNywgNjg3MTgsIDY4NzMwLCAKKyAgICA2ODc0MSwgNjg3NTMsIDY4NzY2LCA2ODc3OCwgNjg3ODksIDY4Nzk5LCA2ODgwOCwgNjg4MTgsIDY4ODI5LCA2ODgzOSwgCisgICAgNjg4NTAsIDY4ODYyLCA2ODg3MywgNjg4ODMsIDY4ODk0LCA2ODkwNiwgNjg5MTcsIDY4OTI5LCA2ODk0MiwgNjg5NTQsIAorICAgIDY4OTY1LCA2ODk3NSwgNjg5ODYsIDY4OTk4LCA2OTAwOSwgNjkwMjEsIDY5MDM0LCA2OTA0NiwgNjkwNTcsIDY5MDY5LCAKKyAgICA2OTA4MiwgNjkwOTQsIDY5MTA3LCA2OTEyMSwgNjkxMzQsIDY5MTQ2LCA2OTE1NywgNjkxNjcsIDY5MTc2LCA2OTE4NCwgCisgICAgNjkxOTEsIDY5MTk2LCA4MDU4LCA2OTIwMywgMzI1OTMsIDY5MjA4LCA2OTIxMywgMzI1OTgsIDY5MjE5LCAyMDkyOSwgCisgICAgMzI2MDMsIDY5MjI0LCA2OTIzMCwgNjkyMzgsIDY5MjQ0LCA2OTI1MCwgNjkyNTcsIDY5MjY0LCA2OTI2OSwgNjkyNzMsIAorICAgIDY5Mjc2LCA2OTI4MCwgNjkyODksIDY5Mjk1LCA2OTMwNywgNjkzMTgsIDY5MzIyLCAzMDgxLCA4MDMzLCA2OTMyNywgCisgICAgNjkzMzAsIDY5MzMyLCA2OTMzNiwgNjkzNDAsIDY5MzQ0LCA2OTM1MCwgNjkzNTUsIDI1OTQ0LCA2OTM2MCwgNjkzNjQsIAorICAgIDY5MzY3LCA2OTM3MiwgNjkzNzYsIDY5MzgzLCA2OTM4OSwgNjkzOTMsIDYxNzAsIDY5Mzk3LCAzMjYyMCwgNjk0MDIsIAorICAgIDY5NDA5LCA2OTQxOCwgNjk0MjYsIDY5NDM3LCA2OTQ0NSwgNjk0NTMsIDY5NDYwLCA2OTQ2NywgNjk0NzMsIDY5NDg0LCAKKyAgICAzMjYyNSwgNjk0ODksIDY5NTAwLCA2OTUxMiwgNjk1MjAsIDY5NTMxLCA2OTU0MCwgNjk1NTEsIDY5NTU2LCA2OTU2NCwgCisgICAgMjU1NiwgNjk1NjksIDM0Mjk1LCA2OTU4MiwgNjk1ODYsIDY5NTk4LCA2OTYwNiwgNjk2MTEsIDY5NjE5LCAxNzQ4NSwgCisgICAgNjk2MzAsIDY5NjM2LCA2OTY0MywgNjk2NTEsIDY5NjU3LCAzMjYzNSwgNjk2NjIsIDM5MTQsIDU4MjU0LCA2OTY2OSwgCisgICAgNjk2NzIsIDY5NjgwLCA2OTY5MywgNjk3MDYsIDY5NzE5LCA2OTczMiwgNjk3MzksIDY5NzUwLCA2OTc1OSwgNDE3MjQsIAorICAgIDQxNzI5LCA2OTc2NCwgNjk3NjgsIDY5Nzc2LCA2OTc4MywgNjk3OTIsIDY5ODAwLCA2OTgwNiwgNjk4MTUsIDY5ODIzLCAKKyAgICA2OTgzMSwgNjk4MzUsIDY5ODQ0LCA2OTg1MywgNjk4NjMsIDY5ODc2LCA2OTg4OSwgNjk4OTksIDMyNjQwLCA2OTkwNSwgCisgICAgNjk5MTIsIDY5OTE4LCAzMjY0NiwgNjk5MjMsIDY5OTI2LCA2OTkzMCwgNjk5MzgsIDY5OTQ3LCA0MTQ2MiwgNjk5NTUsIAorICAgIDY5OTY0LCA2OTk3MiwgNjk5NzksIDY5OTg3LCA2OTk5NywgNzAwMDYsIDcwMDE1LCA3MDAyNCwgNzAwMzIsIDcwMDQzLCAKKyAgICA3MDA1MywgOTM2NiwgMjE1NjcsIDcwMDYyLCA3MDA2NywgNzAwNzIsIDcwMDc2LCA3MDA4MCwgNzAwODUsIDcwMDkxLCAKKyAgICA3MDA5NiwgNzAxMDEsIDcwMTA3LCA3MDExMiwgNzAxMTcsIDIxNTMyLCA3MDEyMiwgNzAxMjksIDcwMTM3LCA3MDE0NSwgCisgICAgNzAxNTAsIDcwMTU3LCA3MDE2NCwgNzAxNjksIDcwMTczLCA3MDE3NywgNzAxODUsIDcwMTkzLCAzMjY2MywgNzAxOTksIAorICAgIDcwMjA1LCA3MDIxNywgNzAyMjMsIDcwMjI3LCA3MDIzNCwgNzAyMzksIDcwMjUwLCA3MDI2MCwgNzAyNzAsIDcwMjgyLCAKKyAgICA3MDI4OCwgNzAyOTgsIDcwMzA4LCAzMjY5MCwgNzAzMTcsIDcwMzI2LCA3MDMzMiwgNzAzNDQsIDcwMzU1LCA3MDM2MiwgCisgICAgNzAzNjcsIDcwMzcxLCA3MDM3OSwgNzAzODUsIDcwMzkwLCA3MDM5NSwgNzA0MDIsIDcwNDEwLCA3MDQyMiwgNzA0MzIsIAorICAgIDcwNDQxLCA3MDQ1MCwgNzA0NTcsIDM0MTU3LCAyMzg1MSwgNzA0NjMsIDcwNDY4LCA3MDQ3MiwgNzA0NzYsIDcwNDgxLCAKKyAgICA3MDQ4NywgNzA0OTgsIDcwNTExLCA3MDUxNiwgNzA1MjMsIDMyNjk1LCA3MDUyOCwgNzA1NDAsIDcwNTQ5LCA3MDU1OSwgCisgICAgNzA1NzAsIDcwNTgzLCA3MDU5MCwgNzA1OTksIDcwNjA4LCA3MDYxNiwgNzA2MjEsIDcwNjI3LCAxMDY5LCA3MDYzMiwgCisgICAgNzA2MzcsIDcwNjQyLCA3MDY0NywgNzA2NTMsIDcwNjU4LCA3MDY2MywgNzA2NjksIDcwNjc1LCA3MDY4MCwgNzA2ODQsIAorICAgIDcwNjg5LCA3MDY5NCwgNzA2OTksIDU4NzY2LCA3MDcwNCwgNzA3MDksIDcwNzE0LCA3MDcxOSwgNzA3MjUsIDcwNzMxLCAKKyAgICA3MDczNiwgNzA3NDAsIDcwNzQ1LCA3MDc1MCwgNzA3NTUsIDcwNzYxLCA3MDc2NiwgNzA3NzIsIDcwNzc3LCA3MDc4MiwgCisgICAgNzA3ODcsIDcwNzkyLCA3MDc5NiwgNzA4MDIsIDcwODA3LCA3MDgxNiwgNzA4MjEsIDcwODI2LCA3MDgzMSwgNzA4MzYsIAorICAgIDcwODQwLCA3MDg0NywgNzA4NTMsIDE3MTM1LCAxNzE0MiwgNzA4NTgsIDcwODYyLCA3MDg2NiwgNzA4NzAsIDcwODc0LCAKKyAgICA0NTUyNCwgNzA4NzgsIDcwODA4LCA3MDg4MCwgNzA4OTAsIDMyNzA0LCA3MDg5MywgNzA5MDIsIDcwOTA4LCA2MTQzLCAKKyAgICAzMjcwOSwgNzA5MTIsIDcwOTE4LCA3MDkyMywgNzA5MjksIDcwOTM0LCA3MDkzOCwgNzA5NDUsIDcwOTUwLCA3MDk2MCwgCisgICAgNzA5NjksIDcwOTczLCA3MDk3OSwgNzA5ODUsIDcwOTkxLCA3MDk5NSwgNzEwMDMsIDcxMDEwLCA3MTAxOCwgNzEwMjYsIAorICAgIDMyNzE0LCA3MTAzMywgNzEwMzYsIDcxMDQzLCA3MTA0OSwgNzEwNTQsIDcxMDU4LCA3MTA2NCwgNzEwNzEsIDcxMDc2LCAKKyAgICA3MTA4MCwgNzEwODksIDcxMDk3LCA3MTEwMywgNzExMDgsIDMyNzE5LCA3MTExNSwgNzExMjIsIDcxMTI4LCA3MTEzMywgCisgICAgNzExMzksIDcxMTQ2LCA3MTE1MiwgMjEyOTQsIDI3NDU1LCA3MTE1OCwgNzExNjMsIDcxMTY5LCA3MTE4MSwgNzA4NDEsIAorICAgIDcwODQ4LCAyMTQ3MCwgNzExOTEsIDcxMTk2LCA3MTIwMywgNzEyMDksIDcxMjE2LCA3MTIyMiwgNzEyMzMsIDcxMjM4LCAKKyAgICA5MTEwLCA3MTI0NiwgNzEyNDksIDcxMjU1LCA3MTI1OSwgNzEyNjMsIDcxMjY2LCA3MTI3MiwgMzI0NjgsIDYxOTQsIDk2NCwgCisgICAgMTM0MTksIDcxMjc5LCA3MTI4NSwgNzEyOTEsIDcxMjk3LCA3MTMwMywgNzEzMDksIDcxMzE1LCA3MTMyMSwgNzEzMjcsIAorICAgIDcxMzMyLCA3MTMzNywgNzEzNDIsIDcxMzQ3LCA3MTM1MiwgNzEzNTcsIDcxMzYyLCA3MTM2NywgNzEzNzIsIDcxMzc3LCAKKyAgICA3MTM4MiwgNzEzODcsIDcxMzkyLCA3MTM5OCwgNzE0MDMsIDcxNDA4LCA3MTQxNCwgNzE0MTksIDcxNDI0LCA3MTQzMCwgCisgICAgNzE0MzYsIDcxNDQyLCA3MTQ0OCwgNzE0NTQsIDcxNDYwLCA3MTQ2NiwgNzE0NzIsIDcxNDc4LCA3MTQ4MywgNzE0ODgsIAorICAgIDcxNDk0LCA3MTQ5OSwgNzE1MDQsIDcxNTEwLCA3MTUxNSwgNzE1MjAsIDcxNTI1LCA3MTUzMCwgNzE1MzUsIDcxNTQwLCAKKyAgICA3MTU0NSwgNzE1NTAsIDcxNTU1LCA3MTU2MCwgNzE1NjUsIDcxNTcwLCA3MTU3NiwgNzE1ODEsIDcxNTg2LCA3MTU5MSwgCisgICAgNzE1OTcsIDcxNjAyLCA3MTYwNywgNzE2MTIsIDcxNjE3LCA3MTYyMywgNzE2MjgsIDcxNjMzLCA3MTYzOCwgNzE2NDMsIAorICAgIDcxNjQ4LCA3MTY1MywgNzE2NTgsIDcxNjYzLCA3MTY2OCwgNzE2NzMsIDcxNjc4LCA3MTY4MywgNzE2ODgsIDcxNjkzLCAKKyAgICA3MTY5OCwgNzE3MDMsIDcxNzA4LCA3MTcxMywgNzE3MTgsIDcxNzI0LCA3MTcyOSwgNzE3MzQsIDcxNzM5LCA3MTc0NCwgCisgICAgNzE3NDksIDcxNzU0LCA3MTc1OSwgMTg2NCwgMTQyLCA3MTc2NCwgNzE3NjgsIDcxNzcyLCA3MTc3NywgNzE3ODUsIDcxNzg5LCAKKyAgICA3MTc5NiwgNzE4MDQsIDcxODA4LCA3MTgyMSwgNzE4MjksIDcxODMzLCA3MTgzNiwgNzE4NDEsIDcxODQ1LCA3MTg1MCwgCisgICAgNzE4NTQsIDcxODYyLCA3MTg2NiwgMjA5MzcsIDcxODcxLCA3MTg3NSwgNjA5NjcsIDcxODc5LCA3MTg4MiwgNzE4OTAsIAorICAgIDcxODk4LCA3MTkwNiwgNzE5MTEsIDcxOTE4LCA3MTkyNCwgNzE5MzAsIDcxOTM1LCA3MTk0MiwgNzE5NDcsIDcxOTU1LCAKKyAgICA2NDk0NywgNzE5NjIsIDcxOTY3LCA3MTk3MiwgNzE5NzYsIDExNjQ1LCA3MTk4MCwgNzE5ODUsIDcxOTkwLCA3MTk5NCwgCisgICAgNzE5OTcsIDcyMDAzLCA3MjAwNywgNzIwMTcsIDcyMDI2LCA3MjAyOSwgNzIwMzMsIDcyMDQwLCA3MjA1MywgNzIwNTksIAorICAgIDcyMDY3LCA3MjA3OCwgNzIwODksIDcyMTAwLCA3MjExMSwgNzIxMjAsIDcyMTI2LCA3MjEzNSwgNzIxNDMsIDcyMTUzLCAKKyAgICA3MjE2NiwgNzIxNzMsIDcyMTg0LCA3MjE5MCwgNzIxOTUsIDcyMjAwLCA3MjIwNiwgNzIyMTIsIDcyMjIyLCA3MjIzMSwgCisgICAgNzA1MzAsIDcyMjM5LCA3MjI0NSwgNzIyNTMsIDcyMjU5LCA3MjI2NywgNzIyNzAsIDcyMjc0LCA3MjI3OCwgNzIyODEsIAorICAgIDcyMjg3LCA3MjI5MywgNzIzMDEsIDcyMzEzLCA3MjMyNSwgNzIzMzIsIDcyMzM2LCA3MjM0NywgNzIzNTUsIDcyMzYyLCAKKyAgICA3MjM3NCwgNzIzODIsIDcyMzkwLCA3MjM5NywgNzI0MDMsIDcyNDEzLCA3MjQyMiwgNzI0MjcsIDcyNDM3LCA3MjQ0NiwgCisgICAgNDA3ODgsIDcyNDUzLCA3MjQ1NywgNzI0NjIsIDcyNDcwLCA3MjQ3NywgNzI0ODMsIDcyNDg3LCA3MjQ5NywgNzI1MDgsIAorICAgIDcyNTE2LCA3MjUyMywgNzI1MzUsIDcyNTQ3LCA3MjU1NiwgNjk1NzIsIDcyNTYzLCA3MjU3NCwgNzI1ODgsIDcyNTk2LCAKKyAgICA3MjYwNiwgNzI2MTMsIDcyNjIxLCA3MjYzMywgNzI2NDIsIDcyNjUwLCA3MjY2MCwgNzI2NzEsIDcyNjgzLCA3MjY5MiwgCisgICAgNzI3MDIsIDcyNzA5LCA3MjcxOCwgNzI3MzMsIDcyNzQxLCA3Mjc1MSwgNzI3NjAsIDcyNzY4LCA3Mjc4MSwgNzI3OTYsIAorICAgIDcyODAwLCA3MjgwOSwgNzI4MjEsIDcyODMyLCA3Mjg0MywgNzI4NTQsIDcyODY0LCA3Mjg3NSwgNzI4ODMsIDcyODg5LCAKKyAgICA3Mjg5OSwgNzI5MDcsIDcyOTEzLCAyOTAyOCwgNzI5MTgsIDcyOTI0LCA3MjkyOSwgNzI5MzYsIDk3MDgsIDE3NTA1LCAKKyAgICA3Mjk0MiwgNzI5NTEsIDcyOTU2LCA3Mjk2MCwgNzI5NjcsIDcyOTczLCA3Mjk3OCwgNzI5ODMsIDcyOTkxLCA3Mjk5OSwgCisgICAgNzMwMDMsIDczMDA2LCA3MzAwOSwgNzMwMTEsIDczMDE4LCA3MzAyNCwgNzMwMzUsIDczMDQwLCA3MzA0NCwgNzMwNTEsIAorICAgIDczMDU3LCA3MzA2MiwgNzMwNzAsIDY1NDQ2LCA2NTQ1NiwgNzMwNzYsIDczMDgzLCA3MzA5MywgMTA2MTgsIDczMTAwLCAKKyAgICA3MzEwNSwgMjkyMjQsIDczMTE0LCA3MzExOSwgNzMxMjYsIDczMTM2LCA3MzE0NCwgNzMxNTIsIDczMTYxLCA3MzE2NywgCisgICAgNzMxNzMsIDczMTgwLCA3MzE4NywgNzMxOTIsIDczMTk2LCA3MzIwNCwgNzMyMDksIDczMjE0LCA3MzIyMiwgNzMyMjksIAorICAgIDczMjM0LCA3MzI0MCwgNzMyNDMsIDczMjQ3LCA3MzI1NiwgNzE4MTYsIDczMjY1LCA3MzI2OSwgNzMyNzUsIDczMjg2LCAKKyAgICA3MzI5NiwgMTc1MTQsIDczMzA3LCA3MzMxNSwgMTc1MjYsIDczMzIyLCA3MzMyNiwgNzMzMzUsIDI3MzQxLCA3MzM0MiwgCisgICAgNzMzNDYsIDczMzUxLCA3MzM2OCwgNzMzODAsIDEwNTc2LCA3MzM5MiwgNzMzOTcsIDczNDAyLCA3MzQwNywgMjEwMTAsIAorICAgIDczNDExLCA3MzQxNiwgNzM0MjEsIDczNDI3LCA3MzQzMiwgNTg0NiwgMjEwMTQsIDczNDM3LCA3MzQ0MiwgNzM0NDgsIAorICAgIDczNDU1LCA3MzQ2MCwgNzM0NjUsIDczNDcxLCA3MzQ3NywgNzM0ODMsIDczNDg4LCA3MzQ5NCwgNzM0OTgsIDczNTEyLCAKKyAgICA3MzUyMCwgNzM1MjgsIDczNTM0LCA3MzUzOSwgNzM1NDYsIDczNTU2LCA3MzU2NSwgNzM1NzAsIDczNTc1LCA3MzU4MywgCisgICAgNzM1ODgsIDczNTk0LCA3MzU5OSwgNzM2MDgsIDU5ODIzLCA3MzYxMywgNzM2MTYsIDczNjM0LCA3MzY1MywgNzM2NjYsIAorICAgIDczNjgwLCA3MzY5NiwgNzM3MDMsIDczNzEwLCA3MzcxNiwgNzM3MjMsIDczNzI4LCA3MzczNCwgNzM3NDAsIDczNzQ4LCAKKyAgICA3Mzc1NCwgNzM3NTksIDczNzY0LCA3Mzc4MCwgMTA1ODksIDczNzk0LCA3MzgwMSwgNzM4MDksIDczODE1LCA3MzgxOSwgCisgICAgNzM4MjIsIDczODI3LCA3MzgzMiwgNzM4MzksIDczODQ0LCA3Mzg1MywgNzM4NTgsIDczODY0LCA3Mzg3MywgNzM4ODIsIAorICAgIDczODg3LCA3Mzg5MSwgNzM4OTksIDczOTA4LCAxMTY3NCwgNzM5MTcsIDczOTI1LCA3MzkzMCwgNzM5MzYsIDExNjg1LCAKKyAgICA3Mzk0MSwgNzM5NDQsIDczOTQ5LCA3Mzk1OSwgNzM5NjgsIDczOTczLCA3Mzk3OSwgNzM5ODQsIDczOTkyLCA3Mzk5OSwgCisgICAgNzQwMTAsIDc0MDIwLCA3NDAyNSwgNjQ4NzUsIDc0MDMwLCA3NDAzNiwgNzQwNDEsIDc0MDQ4LCA3NDA1NywgNzQwNjUsIAorICAgIDc0MDcxLCA3NDA3NywgNzQwODQsIDc0MDkwLCA3NDA5NCwgMTY5NjAsIDMwNTUsIDc0MDk5LCA3NDEwMywgNzQxMDcsIAorICAgIDc0MTEzLCA3NDEyMiwgNzQxMjgsIDc0MTM1LCA3NDEzOSwgNzQxNjAsIDc0MTgyLCA3NDE5OCwgNzQyMTUsIDc0MjM0LCAKKyAgICA3NDI0MywgNzQyNTMsIDc0MjYwLCA3NDI2NywgMjcyMjgsIDc0MjczLCA3NDI3NywgNzQyODUsIDc0Mjk3LCA3NDMwMywgCisgICAgNzQzMTEsIDc0MzE1LCA3NDMyMywgNzQzMzAsIDc0MzM0LCA3NDM0MCwgNzQzNDYsIDc0MzUxLCAzNTYzLCA0MTkyNCwgCisgICAgNzQzNTcsIDc0MzYxLCA3NDM2NSwgNzQzNjksIDc0Mzc0LCA3NDM3OSwgNzQzODQsIDc0MzkwLCA3NDM5NiwgNzQ0MDIsIAorICAgIDc0NDA5LCA3NDQxNSwgNzQ0MjIsIDc0NDI4LCA3NDQzNCwgNzQ0MzksIDc0NDQ1LCA3NDQ1MCwgNzQ0NTQsIDc0NDU5LCAKKyAgICA3NDQ2MywgNzQ0NjgsIDQxOTM5LCA3NDQ3MiwgNzQ0NzcsIDc0NDg1LCA3NDQ4OSwgNzQ0OTQsIDc0NTAxLCA3NDUxMCwgCisgICAgNzQ1MTYsIDc0NTIwLCA3NDUyNywgNzQ1MzEsIDc0NTM0LCA3NDU0MSwgNzQ1NTAsIDc0NTU1LCA3NDU1OSwgNzQ1NjcsIAorICAgIDc0NTc2LCA3NDU4MCwgNzQ1ODgsIDc0NTk0LCA3NDU5OSwgNzQ2MDQsIDc0NjEwLCA3NDYxNiwgNzQ2MjEsIDc0NjI1LCAKKyAgICA3NDYzMSwgNzQ2MzYsIDc0NjQwLCA3NDY0NCwgNzQ2NDcsIDc0NjUyLCA3NDY2MCwgNzQ2NzAsIDc0Njc1LCAzOTQxNiwgCisgICAgNzQ2ODMsIDc0Njk1LCA3NDY5OSwgNzQ3MDUsIDc0NzE3LCA3NDcyOCwgNzQ3MzUsIDc0NzQxLCA3NDc0OCwgNzQ3NjAsIAorICAgIDc0NzY3LCA3NDc3MywgMjEwODgsIDc0Nzc3LCA3NDc4MywgNzQ3OTAsIDc0Nzk2LCA3NDgwMiwgNzQ4MDcsIDc0ODEyLCAKKyAgICA3NDgxNywgNzQ4MjYsIDcwMzMsIDc0ODMxLCAxNjQyNiwgNzQ4MzcsIDc0ODQxLCA3NDg0NSwgNzQ4NDksIDc0ODU3LCAKKyAgICA3NDg2NiwgNzQ4NzAsIDc0ODc3LCA3NDg4NiwgNzQ4OTksIDc0OTA1LCA3NDQ2NCwgMzAwODgsIDc0OTEwLCA3NDkxMiwgCisgICAgNzQ5MTcsIDc0OTIyLCA3NDkyNywgNzQ5MzIsIDc0OTM3LCA3NDk0MiwgNzQ5NDcsIDc0OTUyLCA3NDk1NywgNzQ5NjIsIAorICAgIDc0OTY3LCA3NDk3MiwgNzQ5NzcsIDc0OTgyLCA3NDk4OCwgNzQ5OTMsIDc0OTk4LCA3NTAwMywgNzUwMDgsIDc1MDEzLCAKKyAgICA3NTAxOCwgNzUwMjMsIDc1MDI4LCA3NTAzNCwgNzUwNDAsIDc1MDQ2LCA3NTA1MSwgNzUwNTYsIDc1MDY4LCA3NTA3MywgCisgICAgMTg3MCwgNDYsIDc1MDc4LCA3NTA4MywgMzI3NDYsIDc1MDg3LCAzMjc1MSwgMzI3NTYsIDMyNzYyLCAzMjc2NywgNzUwOTEsIAorICAgIDMyNzcyLCAyMjA4MywgNzUxMTMsIDc1MTE3LCA3NTEyMSwgNzUxMjYsIDc1MTMwLCAzMjc3NiwgNzUxMzQsIDc1MTQyLCAKKyAgICAzMjc4MSwgNzUxNDksIDc1MTUyLCA3NTE1NywgNzUxNjEsIDk1NDMsIDc1MTcwLCAzMjc4NiwgMjE5NDUsIDc1MTczLCAKKyAgICA3NTE3NywgMTQyOCwgNzUxODIsIDMyNzk3LCA3NTE4NSwgNzUxOTAsIDI1NzM3LCAyNTc0NywgMzUyNTgsIDc1MTk1LCAKKyAgICA3NTIwMCwgNzUyMDUsIDc1MjEwLCA3NTIxNiwgNzUyMjEsIDc1MjMwLCA3NTIzNSwgNzUyNDIsIDc1MjQ4LCA3NTI1MywgCisgICAgNzUyNTgsIDc1MjYzLCA3NTI3MywgNzUyODIsIDc1Mjg3LCA3NTI5NSwgNzUyOTksIDc1MzA3LCAzMjYxMSwgMzczMTcsIAorICAgIDc1MzE0LCA3NTMyMCwgNzUzMjUsIDc1MzMwLCAxMjAxNiwgNzUzMzUsIDc1MzQxLCA3NTM0NiwgNzUzNTMsIDc1MzU5LCAKKyAgICA3NTM2NCwgNzUzNzIsIDc1MzgyLCA3NTM5MiwgNzUzOTgsIDc1NDAzLCA3NTQwOSwgMTc1MzYsIDc1NDE2LCAzNjA3MywgCisgICAgNzU0MjksIDc1NDM0LCA3NTQ0MCwgMzA5OTMsIDc1NDUzLCA3NTQ1OSwgNzU0NjMsIDc1NDcyLCA3NTQ3OSwgNzU0ODUsIAorICAgIDc1NDkzLCA3NTUwMiwgNzU1MDksIDc1NTE1LCA3NTUxOCwgNzU1MjIsIDI1ODc4LCA3NTUyNiwgNzU1MzMsIDc1NTM5LCAKKyAgICA3NTU0NywgNzU1NTIsIDIzOTk0LCA3NTU1OCwgNzU1NjEsIDc1NTY5LCA3NTU3NywgNzU1OTEsIDc1NTk4LCA3NTYwNCwgCisgICAgNzU2MTEsIDc1NjE3LCAzMjgxMSwgNzU2MjEsIDc1NjI4LCA3NTYzNiwgNzU2NDQsIDc1NjUwLCAzMjgxNiwgNzU2NTgsIAorICAgIDc1NjY0LCA3NTY2OSwgNzU2NzksIDc1Njg1LCA3NTY5NCwgMzA4MzAsIDM0NzE2LCA3NTcwMiwgNzU3MDcsIDc1NzEyLCAKKyAgICA3NTcxNiwgNzU3MjEsIDc1NzI1LCA3NTczMywgMTQ5MjAsIDM5NDI5LCA3NTczOCwgNzU3NDMsIDMyODIxLCA2MjI2OSwgCisgICAgNzU3NDcsIDc1NzUyLCA3NTc1NiwgNzU3NjUsIDc1NzczLCA3NTc3OSwgNzU3ODQsIDc1NzkwLCA3NTc5NywgNzU4MDMsIAorICAgIDc1ODA4LCA3NTgxMywgNzU4MjIsIDc1ODM0LCA3NTg0OSwgMzMwODMsIDc1ODU1LCAxNjU0NSwgMzI4MjUsIDc1ODU5LCAKKyAgICA3NTg2NiwgMjQxMDQsIDc1ODcyLCA3NTg3OSwgNzU4ODgsIDc1ODk1LCA3NTkwNCwgNzU5MTAsIDc1OTE1LCA3NTkyMywgCisgICAgNzU5MjksIDMyODM1LCA3NTkzNCwgNzU5NDMsIDc0NzIzLCA3NTk1MiwgNzU5NTksIDc1OTY1LCA3NTk3MSwgNzU5ODEsIAorICAgIDc1OTg5LCA3NTk5NiwgNzYwMDAsIDMyODQwLCA3NjAwMywgMzI4NDYsIDMyODUyLCA3NjAwOCwgNzYwMTYsIDc2MDI0LCAKKyAgICA3NjAzNCwgNzYwNDMsIDc2MDUxLCA3NjA1OCwgNzYwNjgsIDMyODU3LCA3NjA3MiwgNzYwNzQsIDc2MDc4LCA3NjA4MywgCisgICAgNzYwODcsIDc2MDkxLCA3NjA5NywgNzYxMDIsIDc2MTA2LCA3NjExNywgNzYxMjIsIDc2MTI3LCAzMDYwLCA3NjEzMSwgCisgICAgNzYxMzgsIDc2MTQyLCA3NjE1MSwgNzYxNTksIDc2MTY2LCA3NjE3MSwgNzYxNzYsIDYyMzE1LCA3NjE4MCwgNzYxODMsIAorICAgIDc2MTg5LCA3NjE5NywgNzYyMDMsIDc2MjA3LCA3NjIxMiwgNzYyMTksIDc2MjI0LCA3NjIzMCwgMzQ3NDcsIDc2MjM1LCAKKyAgICA3NjIzOCwgNzYyNDMsIDc2MjQ3LCA3NjI1MiwgNzYyNTcsIDc2MjYxLCA3NjI2OSwgNzYyNzMsIDI1NzU2LCAyNTc2NSwgCisgICAgNzYyNzksIDc2Mjg1LCA3NjI5MSwgNzYyOTYsIDc2MzAwLCA3NjMwMywgNzYzMTMsIDc2MzIyLCA3NjMyNywgNzYzMzMsIAorICAgIDc2MzQwLCA3NjM0NiwgNzYzNTAsIDc2MzU4LCA3NjM2MywgMzQ3NTMsIDc2MzY3LCA3NjM3NSwgNzYzODEsIDc2Mzg4LCAKKyAgICA3NjM5MywgNzYzOTcsIDc2NDAyLCA1ODQ0MCwgMzQ3NTksIDc2NDA4LCA3NjQxMywgNzY0MTcsIDc2NDIyLCA3NjQyNywgCisgICAgNzY0MzIsIDc2NDM2LCA3NjQ0MSwgNzY0NDYsIDc2NDUyLCA3NjQ1NywgNzY0NjIsIDc2NDY4LCA3NjQ3NCwgNzY0NzksIAorICAgIDc2NDgzLCA3NjQ4OCwgNzY0OTMsIDc2NDk4LCA3NjUwMiwgMjQxMDMsIDc2NTA3LCA3NjUxMiwgNzY1MTgsIDc2NTI0LCAKKyAgICA3NjUzMCwgNzY1MzUsIDc2NTM5LCA3NjU0NCwgNzY1NDksIDc2NTU0LCA3NjU1OCwgNzY1NjMsIDc2NTY4LCA3NjU3MywgCisgICAgNzY1NzgsIDc2NTgyLCAzMjg2NSwgNzY1OTAsIDc2NTk0LCA3NjYwMiwgNzY2MTAsIDc2NjIxLCA3NjYyNiwgNzY2MzAsIAorICAgIDIyMzk3LCA3NjYzNSwgNzY2NDEsIDc2NjUxLCA3NjY1OCwgNzY2NjMsIDc2NjcyLCA3NjY3NywgNzY2ODEsIDc2Njg2LCAKKyAgICA3NjY5NCwgNzY3MDIsIDc2NzA5LCA2NTEwOSwgNzY3MTUsIDc2NzIzLCA3NjczMCwgNzY3NDEsIDc2NzQ3LCA3Njc1MSwgCisgICAgNzY3NTcsIDMyODc1LCA3Njc2MCwgNzY3NjcsIDc2Nzc1LCA3Njc4MCwgMzk2MjAsIDc2Nzg0LCA3Njc4OSwgNzY3OTYsIAorICAgIDc2ODAxLCA4OTkyLCA3NjgwNSwgNzY4MTMsIDc2ODIwLCA3NjgyNywgNzY4MzMsIDc2ODQ3LCA2MzM4MSwgNzY4NTUsIAorICAgIDc2ODYxLCA3Njg2NSwgNzY4NjgsIDc2ODc2LCA3Njg4MywgNzY4ODgsIDc2OTAxLCA3NjkwOCwgNzY5MTIsIDc2OTE5LCAKKyAgICA3NjkyNCwgNjA4NjAsIDc2OTI5LCA3NjkzMiwgNzY5MzksIDc2OTQ1LCA3Njk0OSwgNzY5NTcsIDc2OTY2LCA3Njk3NiwgCisgICAgNzY5ODYsIDc2OTk1LCA3NzAwMywgNzcwMTQsIDc3MDE5LCA3NzAyMywgNzcwMjgsIDc3MDMyLCAzNTM4OSwgNzcwNDAsIAorICAgIDIxMzU3LCAzNTM5OCwgNzcwNDUsIDc3MDUwLCA3NzA1NSwgNzcwNjAsIDc3MDY1LCA3NzA3MCwgNzcwNzUsIDc3MDc5LCAKKyAgICA3NzA4NCwgNzcwODksIDc3MDk0LCA3NzA5OSwgNzcxMDQsIDc3MTA5LCA3NzExMywgNzcxMTgsIDc3MTIzLCA3NzEyNywgCisgICAgNzcxMzEsIDc3MTM1LCA3NzEzOSwgNzcxNDQsIDc3MTQ5LCA3NzE1MywgNzcxNTgsIDc3MTYyLCA3NzE2NiwgNzcxNzEsIAorICAgIDc3MTc2LCA3NzE4MSwgNzcxODYsIDc3MTkwLCA3NzE5NSwgNzcyMDAsIDc3MjA0LCA3NzIwOSwgNzcyMTQsIDc3MjE5LCAKKyAgICA3NzIyNCwgNzcyMjksIDc3MjM0LCA3NzIzOSwgNzcyNDQsIDc3MjQ5LCA3NzI1NCwgNzcyNTksIDc3MjY0LCA3NzI2OSwgCisgICAgNzcyNzQsIDc3Mjc5LCA3NzI4NCwgNzcyODksIDc3Mjk0LCA3NzI5OSwgNzczMDQsIDc3MzA4LCA3NzMxMywgNzczMTgsIAorICAgIDc3MzIzLCA3NzMyOCwgNzczMzMsIDc3MzM4LCA3NzM0MywgNzczNDgsIDc3MzUzLCA3NzM1OCwgNzczNjMsIDc3MzY3LCAKKyAgICA3NzM3MiwgNzczNzYsIDc3MzgxLCA3NzM4NiwgNzczOTEsIDc3Mzk2LCA3NzQwMSwgNzc0MDYsIDc3NDExLCA3NzQxNiwgCisgICAgNzc0MjEsIDc3NDI1LCA3NzQyOSwgNzc0MzQsIDc3NDM5LCA3NzQ0MywgNzc0NDgsIDc3NDUzLCA3NzQ1NywgNzc0NjIsIAorICAgIDc3NDY3LCA3NzQ3MiwgNzc0NzcsIDc3NDgxLCA3NzQ4NiwgNzc0OTEsIDc3NDk1LCA3NzUwMCwgNzc1MDQsIDc3NTA4LCAKKyAgICA3NzUxMiwgNzc1MTYsIDc3NTIxLCA3NzUyNSwgNzc1MjksIDc3NTMzLCA3NzUzNywgNzc1NDEsIDc3NTQ1LCA3NzU0OSwgCisgICAgNzc1NTMsIDc3NTU3LCA3NzU2MiwgNzc1NjcsIDc3NTcyLCA3NzU3NywgNzc1ODIsIDc3NTg3LCA3NzU5MiwgNzc1OTcsIAorICAgIDc3NjAyLCA3NzYwNywgNzc2MTEsIDc3NjE1LCA3NzYxOSwgNzc2MjMsIDc3NjI3LCA3NzYzMSwgNzc2MzYsIDc3NjQwLCAKKyAgICA3NzY0NSwgNzc2NDksIDc3NjU0LCA3NzY1OSwgNzc2NjMsIDc3NjY3LCA3NzY3MiwgNzc2NzYsIDc3NjgwLCA3NzY4NCwgCisgICAgNzc2ODgsIDc3NjkyLCA3NzY5NiwgNzc3MDAsIDc3NzA0LCA3NzcwOCwgNzc3MTIsIDc3NzE2LCA3NzcyMCwgNzc3MjQsIAorICAgIDc3NzI4LCA3NzczMywgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU0LCA3Nzc1OCwgNzc3NjIsIDc3NzY3LCAKKyAgICA3Nzc3MSwgNzc3NzUsIDc3Nzc5LCA3Nzc4MywgNzc3ODcsIDc3NzkxLCA3Nzc5NiwgNzc4MDAsIDc3ODA1LCA3NzgwOSwgCiAgICAgNzc4MTMsIDc3ODE3LCA3NzgyMSwgNzc4MjUsIDc3ODI5LCA3NzgzMywgNzc4MzcsIDc3ODQxLCA3Nzg0NSwgNzc4NDksIAotICAgIDc3ODUzLCA3Nzg1NywgNzc4NjIsIDc3ODY2LCA3Nzg3MCwgNzc4NzUsIDc3ODgwLCA3Nzg4NCwgNzc4ODgsIDc3ODkyLCAKLSAgICA3Nzg5NiwgNzc5MDAsIDc3OTA0LCA3NzkwOCwgNzc5MTIsIDc3OTE3LCA3NzkyMSwgNzc5MjYsIDc3OTMwLCA3NzkzNSwgCi0gICAgNzc5MzksIDc3OTQ0LCA3Nzk0OCwgNzc5NTQsIDc3OTU5LCA3Nzk2MywgNzc5NjgsIDc3OTcyLCA3Nzk3NywgNzc5ODEsIAotICAgIDc3OTg2LCA3Nzk5MCwgNzc5OTUsIDE1MjEsIDc3OTk5LCAyODI0LCAxNzU5LCAxNzY0LCA3ODAwMywgNzgwMDcsIDI4MjgsIAotICAgIDc4MDExLCAxMzk3LCA3ODAxNiwgMTM0MiwgNzgwMjAsIDI4NDAsIDc4MDI0LCA3ODAzMSwgNzgwMzgsIDc4MDUyLCAyODQ0LCAKLSAgICA3MTMxLCA3ODA2MSwgNzgwNjksIDc4MDc2LCA3ODA4NywgNzgwOTYsIDc4MTAzLCA3ODExNSwgNzgxMjgsIDc4MTQxLCAKLSAgICA3ODE1MiwgNzgxNTcsIDc4MTY0LCA3ODE3NiwgNzgxODAsIDI4NDgsIDExNzQwLCA3ODE5MCwgNzgxOTUsIDc4MjA0LCAKLSAgICA3ODIxNCwgMjg1MiwgNzgyMTksIDc4MjIzLCA3ODIyOCwgNzgyMzUsIDc4MjQxLCA3ODI0OSwgNzgyNjEsIDEzNDcsIAotICAgIDEzMDM1LCA3ODI3MSwgNzgyNzUsIDc4MjgxLCA3ODI5NSwgNzgzMDcsIDc4MzE5LCA3ODMyOSwgNzgzMzgsIDc4MzQ3LCAKLSAgICA3ODM1NiwgNzgzNjQsIDc4Mzc1LCA3ODM4MywgNDA1MSwgNzgzOTMsIDc4NDA0LCA3ODQxMywgNzg0MTksIDc4NDM0LCAKLSAgICA3ODQ0MSwgNzg0NDcsIDM1NDg5LCA3ODQ1MiwgMjg3NiwgMTMwMzksIDc4NDU2LCA3ODQ2MywgODkzMCwgNzg0NzIsIDI4ODEsIAotICAgIDMyMzM2LCA3ODQ3OCwgNjA1NzIsIDc4NDg1LCA3ODQ5MSwgNzg1MDIsIDc4NTA4LCA3ODUxNSwgNzg1MjEsIDc4NTI5LCAKLSAgICA3ODUzNiwgNzg1NDIsIDc4NTUyLCA3ODU2MSwgNzg1NzIsIDc4NTc5LCA3ODU4NSwgNzg1OTUsIDc4NjAzLCA3ODYwOSwgCi0gICAgNzg2MjQsIDc4NjMwLCA3ODYzNSwgNzg2NDIsIDc4NjQ1LCA3ODY1MSwgNzg2NTgsIDc4NjY0LCA3ODY3MiwgNzg2ODEsIAotICAgIDc4Njg5LCA3ODY5NSwgNzg3MDQsIDQxNDI3LCA3ODcxOCwgNzg3MjMsIDc4NzI5LCAxNDc0NCwgNzg3MzQsIDc4NzQ3LCAKLSAgICA3ODc1NiwgNzg3NjQsIDc4NzcxLCA3ODc3NSwgNzg3NzksIDc4NzgyLCA3ODc4OSwgNzg3OTYsIDc4ODA0LCA3ODgxMiwgCi0gICAgNzg4MjEsIDc4ODI5LCAxNDY3MSwgNzg4MzcsIDc4ODQyLCA3ODg0NiwgNzg4NTgsIDc4ODY1LCA3ODg3NCwgNzQ4LCAKLSAgICA3ODg4NCwgNzg4OTMsIDc4OTA0LCAyODk3LCA3ODkwOCwgNzg5MTIsIDc4OTE4LCA3ODkzMSwgNzg5NDMsIDc4OTUzLCAKLSAgICA3ODk2MiwgNzg5NzQsIDI2MzUyLCA3ODk4NSwgNzg5OTMsIDc5MDAyLCA3OTAxMywgNzkwMjQsIDc5MDM0LCA3OTA0NCwgCi0gICAgNzkwNTMsIDc5MDYxLCAxMTMwNSwgNzkwNjgsIDc5MDcyLCA3OTA3NSwgNzkwODAsIDc5MDg1LCA3OTA4OSwgNzkwOTUsIAotICAgIDEzNTIsIDExODExLCA3OTEwMiwgNzkxMTMsIDc5MTIyLCA3OTEzMCwgNzkxMzksIDc5MTQ3LCA3OTE2MywgNzkxNzQsIAotICAgIDc5MTgzLCA3OTE5MSwgNzkyMDMsIDc5MjE0LCA3OTIzMCwgNzkyNDAsIDc5MjYxLCA3OTI3NCwgNzkyODIsIDc5Mjg5LCAKLSAgICAxNDg1NSwgNzkzMDIsIDc5MzA3LCA3OTMxMywgNTkwOCwgNzkzMTksIDc5MzIyLCA3OTMyOSwgNzkzMzksIDgxNzYsIAotICAgIDc5MzQ2LCA3OTM1MSwgNzkzNTYsIDc5MzYxLCA3OTM2OSwgNzkzNzgsIDc5Mzg2LCA5NzQ5LCA5NzU4LCA3OTM5MSwgCi0gICAgNzk0MDIsIDc5NDA3LCA3OTQxMywgMjkxMywgMjkxOCwgNzk0MTksIDEwODcyLCA3OTQyNSwgNzk0MzIsIDc5NDM5LCAKLSAgICA3OTQ1MiwgMjI1MSwgNjgsIDc5NDU3LCA3OTQ2MiwgNzk0NzIsIDc5NDc4LCA3OTQ4NywgNzk0OTUsIDc5NTA1LCA3OTUwOSwgCi0gICAgNzk1MTQsIDc5NTE4LCA3OTUzMCwgMjk0MSwgNzk1MzgsIDc5NTQ2LCA3OTU1MSwgNzk1NjIsIDc5NTczLCA3OTU4MiwgCi0gICAgNzk1ODcsIDc5NTkzLCA3OTU5OCwgNzk2MDgsIDc5NjE4LCA3OTYyMywgNzk2MjksIDc5NjM0LCA3OTY0MywgMjEzOTcsIAotICAgIDc5NjQ3LCA0MTI4LCAyMCwgNzk2NTIsIDc5NjYxLCA3OTY2OCwgNzk2NzUsIDc5NjgxLCA3OTY4NywgODY0LCA3OTY5MiwgCi0gICAgNzk2OTcsIDYwOTAwLCA3OTcwMiwgNzk3MDcsIDc5NzEzLCA3OTcxOSwgNzk3MjcsIDc5NzMyLCA3OTczOSwgNzk3NDUsIAotICAgIDc5NzUwLCAzODAwMSwgNDEzMjEsIDc5NzU2LCAyOTQ1LCAzMiwgNzk3NjYsIDc5Nzc5LCA3OTc4NCwgNzk3OTIsIDc5Nzk3LCAKLSAgICA3OTgwMywgMjk2NywgMjgyODksIDc5ODA4LCA3OTgxNiwgNzk4MjMsIDc5ODI4LCA1ODY0NSwgNjE5MDMsIDc5ODM3LCAKLSAgICA3OTg0MSwgMTcwNCwgMTgxMywgNzk4NDYsIDc5ODUxLCA3OTg1OCwgMTgxNywgMjQ3LCA3OTg2NSwgNzk4NzEsIDI5ODksIAotICAgIDc5ODc2LCA3OTg4MSwgNzk4ODgsIDE4MjEsIDc5ODkzLCA3OTg5OSwgNzk5MDQsIDc5OTE2LCA2MTE5LCA3OTkyNiwgMTgyOCwgCi0gICAgNzk5MzIsIDc5OTM3LCA3OTk0NCwgNzk5NTEsIDc5OTY2LCA3OTk3MywgNzk5ODQsIDc5OTkyLCAyNjE4LCA3OTk5NiwgCi0gICAgODAwMDgsIDgwMDEzLCA4MDAxNywgODAwMjMsIDI4MTE0LCAyMjU2LCA4MDAyNywgODAwMzgsIDgwMDQyLCA4MDA0NiwgCi0gICAgODAwNTIsIDgwMDU2LCA4MDA2NSwgODAwNjksIDgwMDgwLCA4MDA4NCwgMjMwMiwgMzIxNjUsIDgwMDg4LCA4MDA5OCwgCi0gICAgMzA4MCwgOTM2NCwgODAxMDYsIDgwMTExLCA4MDExNSwgODAxMjQsIDgwMTMxLCA4MDEzNywgMzA1MCwgMTcxMzksIDgwMTQxLCAKLSAgICA4MDE1NCwgODAxNzIsIDgwMTc3LCA4MDE4NSwgODAxOTMsIDgwMjAzLCA5OTc4LCAxMzE0NywgODAyMTUsIDgwMjI4LCAKLSAgICA4MDIzNSwgODAyNDIsIDgwMjU4LCA4MDI2NSwgODAyNzEsIDEwOTUsIDgwMjc4LCA4MDI4NSwgODAyOTUsIDgwMzA0LCAKLSAgICA4MDMxNiwgNDIyOTEsIDgwMzI0LCAzMDY0LCAxMjAyMywgODAzMjcsIDgwMzM1LCA4MDMzOSwgNzgyMzEsIDMwNjgsIAotICAgIDgwMzQzLCAyMTE3OCwgMTIwMzksIDM3NTYsIDgwMzQ3LCAzMDc0LCA4MDM1MSwgODAzNjEsIDgwMzY3LCA4MDM3MywgCi0gICAgODAzNzksIDgwMzg1LCA4MDM5MSwgODAzOTcsIDgwNDAzLCA4MDQwOSwgODA0MTUsIDgwNDIxLCA4MDQyNywgODA0MzMsIAotICAgIDgwNDM5LCA4MDQ0NSwgODA0NTEsIDgwNDU3LCA4MDQ2MywgODA0NjksIDgwNDc1LCA4MDQ4MSwgODA0ODcsIDgwNDkzLCAKLSAgICA4MDQ5OSwgODA1MDUsIDgwNTExLCA4MDUxOCwgODA1MjUsIDgwNTMxLCA4MDUzNywgODA1NDMsIDgwNTQ5LCA4MDU1NSwgCi0gICAgODA1NjEsIDEzNTcsIDE2MDQ5LCAxMjA2MSwgODA1NjcsIDgwNTcyLCA4MDU3NywgODA1ODIsIDgwNTg3LCA4MDU5MiwgCi0gICAgODA1OTcsIDgwNjAyLCA4MDYwNywgODA2MTIsIDgwNjE3LCA4MDYyMiwgODA2MjcsIDgwNjMyLCA4MDYzNywgODA2NDIsIAotICAgIDgwNjQ3LCA4MDY1MiwgODA2NTcsIDgwNjYyLCA4MDY2NywgODA2NzIsIDgwNjc3LCA4MDY4MiwgODA2ODcsIDgwNjkyLCAKLSAgICA4MDY5OCwgODA3MDMsIDgwNzA4LCA4MDcxNCwgODA3MTksIDgwNzI1LCA4MDczMCwgODA3MzUsIDgwNzQxLCA4MDc0NiwgCi0gICAgODA3NTEsIDgwNzU2LCA4MDc2MSwgODA3NjYsIDgwNzcxLCA4MDc3NiwgODA3ODEsIDgwMzYyLCA4MDM2OCwgODAzNzQsIAotICAgIDgwMzgwLCA4MDM4NiwgODAzOTIsIDgwMzk4LCA4MDQwNCwgODA0MTAsIDgwNDE2LCA4MDQyMiwgODA0MjgsIDgwNDM0LCAKLSAgICA4MDQ0MCwgODA0NDYsIDgwNzg3LCA4MDQ1MiwgODA0NTgsIDgwNDY0LCA4MDc5MywgODA0NzAsIDgwNDc2LCA4MDQ4MiwgCi0gICAgODA0ODgsIDgwNDk0LCA4MDUwMCwgODA1MDYsIDgwNTI2LCA4MDc5OSwgODA4MDUsIDgwNTMyLCA4MDgxMSwgODA1MzgsIAotICAgIDgwNTQ0LCA4MDU1MCwgODA1NTYsIDgwNTYyLCAzMDkxLCAzMDk2LCA4MDgxNywgODA4MjIsIDgwODI1LCA4MDgzMSwgCi0gICAgODA4MzcsIDgwODQ0LCA4MDg0OSwgODA4NTQsIDIzMDcsIAorICAgIDc3ODU0LCA3Nzg1OCwgNzc4NjIsIDc3ODY2LCA3Nzg3MCwgNzc4NzQsIDc3ODc4LCA3Nzg4MiwgNzc4ODYsIDc3ODkwLCAKKyAgICA3Nzg5NCwgNzc4OTgsIDc3OTAzLCA3NzkwNywgNzc5MTEsIDc3OTE2LCA3NzkyMSwgNzc5MjUsIDc3OTI5LCA3NzkzMywgCisgICAgNzc5MzcsIDc3OTQxLCA3Nzk0NSwgNzc5NDksIDc3OTUzLCA3Nzk1OCwgNzc5NjIsIDc3OTY3LCA3Nzk3MSwgNzc5NzYsIAorICAgIDc3OTgwLCA3Nzk4NSwgNzc5ODksIDc3OTk1LCA3ODAwMCwgNzgwMDQsIDc4MDA5LCA3ODAxMywgNzgwMTgsIDc4MDIyLCAKKyAgICA3ODAyNywgNzgwMzEsIDc4MDM2LCAxNTIxLCA3ODA0MCwgMjgyNCwgMTc1OSwgMTc2NCwgNzgwNDQsIDc4MDQ4LCAyODI4LCAKKyAgICA3ODA1MiwgMTM5NywgNzgwNTcsIDEzNDIsIDc4MDYxLCAyODQwLCA3ODA2NSwgNzgwNzIsIDc4MDc5LCA3ODA5MywgMjg0NCwgCisgICAgNzEzMSwgNzgxMDIsIDc4MTEwLCA3ODExNywgNzgxMjgsIDc4MTM3LCA3ODE0NCwgNzgxNTYsIDc4MTY5LCA3ODE4MiwgCisgICAgNzgxOTMsIDc4MTk4LCA3ODIwNSwgNzgyMTcsIDc4MjIxLCAyODQ4LCAxMTc0NywgNzgyMzEsIDc4MjM2LCA3ODI0NSwgCisgICAgNzgyNTUsIDI4NTIsIDc4MjYwLCA3ODI2NCwgNzgyNjksIDc4Mjc2LCA3ODI4MiwgNzgyOTAsIDc4MzAyLCAxMzQ3LCAKKyAgICAxMzA0MiwgNzgzMTIsIDc4MzE2LCA3ODMyMiwgNzgzMzYsIDc4MzQ4LCA3ODM2MCwgNzgzNzAsIDc4Mzc5LCA3ODM4OCwgCisgICAgNzgzOTcsIDc4NDA1LCA3ODQxNiwgNzg0MjQsIDQwNTEsIDc4NDM0LCA3ODQ0NSwgNzg0NTQsIDc4NDYwLCA3ODQ3NSwgCisgICAgNzg0ODIsIDc4NDg4LCAzNTUxNCwgNzg0OTMsIDI4NzYsIDEzMDQ2LCA3ODQ5NywgNzg1MDQsIDg5MzAsIDc4NTEzLCAyODgxLCAKKyAgICAzMjM2MSwgNzg1MTksIDYwNjA5LCA3ODUyNiwgNzg1MzIsIDc4NTQzLCA3ODU0OSwgNzg1NTYsIDc4NTYyLCA3ODU3MCwgCisgICAgNzg1NzcsIDc4NTgzLCA3ODU5MywgNzg2MDIsIDc4NjEzLCA3ODYyMCwgNzg2MjYsIDc4NjM2LCA3ODY0NCwgNzg2NTAsIAorICAgIDc4NjY1LCA3ODY3MSwgNzg2NzYsIDc4NjgzLCA3ODY4NiwgNzg2OTIsIDc4Njk5LCA3ODcwNSwgNzg3MTMsIDc4NzIyLCAKKyAgICA3ODczMCwgNzg3MzYsIDc4NzQ1LCA0MTQ2NCwgNzg3NTksIDc4NzY0LCA3ODc3MCwgMTQ3NTcsIDc4Nzc1LCA3ODc4OCwgCisgICAgNzg3OTcsIDc4ODA1LCA3ODgxMiwgNzg4MTYsIDc4ODIwLCA3ODgyMywgNzg4MzAsIDc4ODM3LCA3ODg0NSwgNzg4NTMsIAorICAgIDc4ODYyLCA3ODg3MCwgMTQ2ODQsIDc4ODc4LCA3ODg4MywgNzg4ODcsIDc4ODk5LCA3ODkwNiwgNzg5MTUsIDc0OCwgCisgICAgNzg5MjUsIDc4OTM0LCA3ODk0NSwgMjg5NywgNzg5NDksIDc4OTUzLCA3ODk1OSwgNzg5NzIsIDc4OTg0LCA3ODk5NCwgCisgICAgNzkwMDMsIDc5MDE1LCAyNjM2OSwgNzkwMjYsIDc5MDM0LCA3OTA0MywgNzkwNTQsIDc5MDY1LCA3OTA3NSwgNzkwODUsIAorICAgIDc5MDk0LCA3OTEwMiwgMTEzMTIsIDc5MTA5LCA3OTExMywgNzkxMTYsIDc5MTIxLCA3OTEyNiwgNzkxMzAsIDc5MTM2LCAKKyAgICAxMzUyLCAxMTgxOCwgNzkxNDMsIDc5MTU0LCA3OTE2MywgNzkxNzEsIDc5MTgwLCA3OTE4OCwgNzkyMDQsIDc5MjE1LCAKKyAgICA3OTIyNCwgNzkyMzIsIDc5MjQ0LCA3OTI1NSwgNzkyNzEsIDc5MjgxLCA3OTMwMiwgNzkzMTUsIDc5MzIzLCA3OTMzMCwgCisgICAgMTQ4NjgsIDc5MzQzLCA3OTM0OCwgNzkzNTQsIDU5MDgsIDc5MzYwLCA3OTM2MywgNzkzNzAsIDc5MzgwLCA4MTc2LCAKKyAgICA3OTM4NywgNzkzOTIsIDc5Mzk3LCA3OTQwMiwgNzk0MTAsIDc5NDE5LCA3OTQyNywgOTc1NiwgOTc2NSwgNzk0MzIsIAorICAgIDc5NDQzLCA3OTQ0OCwgNzk0NTQsIDI5MTMsIDI5MTgsIDc5NDYwLCAxMDg3OSwgNzk0NjYsIDc5NDczLCA3OTQ4MCwgCisgICAgNzk0OTMsIDIyNTEsIDY4LCA3OTQ5OCwgNzk1MDMsIDc5NTEzLCA3OTUxOSwgNzk1MjgsIDc5NTM2LCA3OTU0NiwgNzk1NTAsIAorICAgIDc5NTU1LCA3OTU1OSwgNzk1NzEsIDI5NDEsIDc5NTc5LCA3OTU4NywgNzk1OTIsIDc5NjAzLCA3OTYxNCwgNzk2MjMsIAorICAgIDc5NjI4LCA3OTYzNCwgNzk2MzksIDc5NjQ5LCA3OTY1OSwgNzk2NjQsIDc5NjcwLCA3OTY3NCwgNzk2NzksIDc5Njg4LCAKKyAgICAyMTQxMCwgNzk2OTIsIDQxMjgsIDIwLCA3OTY5NywgNzk3MDYsIDc5NzEzLCA3OTcyMCwgNzk3MjYsIDc5NzMyLCA4NjQsIAorICAgIDc5NzM3LCA3OTc0MiwgNjA5MzcsIDc5NzQ3LCA3OTc1MiwgNzk3NTgsIDc5NzY0LCA3OTc3MiwgNzk3NzcsIDc5Nzg0LCAKKyAgICA3OTc5MCwgNzk3OTUsIDM4MDMwLCA0MTM1OCwgNzk4MDEsIDI5NDUsIDMyLCA3OTgxMSwgNzk4MjQsIDc5ODI5LCA3OTgzNywgCisgICAgNzk4NDIsIDc5ODQ4LCAyOTY3LCAyODMxMCwgNzk4NTMsIDc5ODYxLCA3OTg2OCwgNzk4NzMsIDU4NjgyLCA2MTk0MCwgCisgICAgNzk4ODIsIDc5ODg2LCAxNzA0LCAxODEzLCA3OTg5MSwgNzk4OTYsIDc5OTAzLCAxODE3LCAyNDcsIDc5OTEwLCA3OTkxNiwgCisgICAgMjk4OSwgNzk5MjEsIDc5OTI2LCA3OTkzMywgMTgyMSwgNzk5MzgsIDc5OTQ0LCA3OTk0OSwgNzk5NjEsIDYxMTksIDc5OTcxLCAKKyAgICAxODI4LCA3OTk3NywgNzk5ODIsIDc5OTg5LCA3OTk5NiwgODAwMTEsIDgwMDE4LCA4MDAyOSwgODAwMzcsIDI2MTgsIAorICAgIDgwMDQxLCA4MDA1MywgODAwNTgsIDgwMDYyLCA4MDA2OCwgMjgxMzUsIDIyNTYsIDgwMDcyLCA4MDA4MywgODAwODcsIAorICAgIDgwMDkxLCA4MDA5NywgODAxMDEsIDgwMTEwLCA4MDExNCwgODAxMjUsIDgwMTI5LCAyMzAyLCAzMjE5MCwgODAxMzMsIAorICAgIDgwMTQzLCAzMDgwLCA5MzcxLCA4MDE1MSwgODAxNTYsIDgwMTYwLCA4MDE2OSwgODAxNzYsIDgwMTgyLCAzMDUwLCAxNzE1MiwgCisgICAgODAxODYsIDgwMTk5LCA4MDIxNywgODAyMjIsIDgwMjMwLCA4MDIzOCwgODAyNDgsIDk5ODUsIDEzMTU0LCA4MDI2MCwgCisgICAgODAyNzMsIDgwMjgwLCA4MDI4NywgODAzMDMsIDgwMzEwLCA4MDMxNiwgMTA2NCwgODAzMjMsIDgwMzMwLCA4MDM0MCwgCisgICAgODAzNDksIDgwMzYxLCA0MjMyOCwgODAzNjksIDMwNjQsIDEyMDMwLCA4MDM3MiwgODAzODAsIDgwMzg0LCA3ODI3MiwgCisgICAgMzA2OCwgODAzODgsIDIxMTkxLCAxMjA0NiwgMzc1NiwgODAzOTIsIDMwNzQsIDgwMzk2LCA4MDQwNiwgODA0MTIsIDgwNDE4LCAKKyAgICA4MDQyNCwgODA0MzAsIDgwNDM2LCA4MDQ0MiwgODA0NDgsIDgwNDU0LCA4MDQ2MCwgODA0NjYsIDgwNDcyLCA4MDQ3OCwgCisgICAgODA0ODQsIDgwNDkwLCA4MDQ5NiwgODA1MDIsIDgwNTA4LCA4MDUxNCwgODA1MjAsIDgwNTI2LCA4MDUzMiwgODA1MzgsIAorICAgIDgwNTQ0LCA4MDU1MCwgODA1NTYsIDgwNTYzLCA4MDU3MCwgODA1NzYsIDgwNTgyLCA4MDU4OCwgODA1OTQsIDgwNjAwLCAKKyAgICA4MDYwNiwgMTM1NywgMTYwNjIsIDEyMDY4LCA4MDYxMiwgODA2MTcsIDgwNjIyLCA4MDYyNywgODA2MzIsIDgwNjM3LCAKKyAgICA4MDY0MiwgODA2NDcsIDgwNjUyLCA4MDY1NywgODA2NjIsIDgwNjY3LCA4MDY3MiwgODA2NzcsIDgwNjgyLCA4MDY4NywgCisgICAgODA2OTIsIDgwNjk3LCA4MDcwMiwgODA3MDcsIDgwNzEyLCA4MDcxNywgODA3MjIsIDgwNzI3LCA4MDczMiwgODA3MzcsIAorICAgIDgwNzQzLCA4MDc0OCwgODA3NTMsIDgwNzU5LCA4MDc2NCwgODA3NzAsIDgwNzc1LCA4MDc4MCwgODA3ODYsIDgwNzkxLCAKKyAgICA4MDc5NiwgODA4MDEsIDgwODA2LCA4MDgxMSwgODA4MTYsIDgwODIxLCA4MDgyNiwgODA0MDcsIDgwNDEzLCA4MDQxOSwgCisgICAgODA0MjUsIDgwNDMxLCA4MDQzNywgODA0NDMsIDgwNDQ5LCA4MDQ1NSwgODA0NjEsIDgwNDY3LCA4MDQ3MywgODA0NzksIAorICAgIDgwNDg1LCA4MDQ5MSwgODA4MzIsIDgwNDk3LCA4MDUwMywgODA1MDksIDgwODM4LCA4MDUxNSwgODA1MjEsIDgwNTI3LCAKKyAgICA4MDUzMywgODA1MzksIDgwNTQ1LCA4MDU1MSwgODA1NzEsIDgwODQ0LCA4MDg1MCwgODA1NzcsIDgwODU2LCA4MDU4MywgCisgICAgODA1ODksIDgwNTk1LCA4MDYwMSwgODA2MDcsIDMwOTEsIDMwOTYsIDgwODYyLCA4MDg2NywgODA4NzAsIDgwODc2LCAKKyAgICA4MDg4MiwgODA4ODksIDgwODk0LCA4MDg5OSwgMjMwNywgCiB9OwogCiAvKiBjb2RlLT5uYW1lIHBocmFzZWJvb2sgKi8KICNkZWZpbmUgcGhyYXNlYm9va19zaGlmdCA3CiAjZGVmaW5lIHBocmFzZWJvb2tfc2hvcnQgMjA5CiBzdGF0aWMgdW5zaWduZWQgY2hhciBwaHJhc2Vib29rW10gPSB7Ci0gICAgMCwgMjE5LCAxOCwgMjQ1LCAzMSwgNzgsIDIyMywgMjU0LCA3OCwgNTQsIDUwLCAyNDcsIDEzMiwgNTAsIDIyNSwgMTgyLCAKLSAgICA1MCwgMjU0LCAxMjYsIDI1NCwgNTcsIDQzLCAyMjYsIDMsIDQ0LCAyMjYsIDMsIDI1MywgMjE2LCA5NiwgNTAsIDI0OSwgCi0gICAgMjE5LCAyNDAsIDE2NywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMTksIDQ2LCAyMSwgMjEwLCA4NiwgMjEsIDExMCwgMjEsIAotICAgIDEwNSwgMjEsIDE1OCwgMjEsIDE2MSwgMjEsIDE4OSwgMjEsIDE5NCwgMjEsIDE5OCwgMjEsIDE5NSwgMjEsIDIwMCwgMjQ5LCAKLSAgICAyMjYsIDIyMCwgMTUwLCAyMzMsIDE1LCA1MCwgMjQ1LCA5OCwgNTAsIDI0MiwgMTMwLCA1MCwgMjI0LCAxMywgNzgsIDI0OSwgCi0gICAgMjE3LCAyNTMsIDIwNiwgNywgNiwgMSwgNjEsIDcsIDYsIDEsIDI1MywgMTU4LCA3LCA2LCAxLCAyNTEsIDY2LCA3LCA2LCAxLCAKLSAgICAyNDksIDYwLCA3LCA2LCAxLCA3NSwgNywgNiwgMSwgMjQ1LCA2LCA3LCA2LCAxLCAyNDMsIDIwMiwgNywgNiwgMSwgMjQyLCAKLSAgICA2MCwgNywgNiwgMSwgNzMsIDcsIDYsIDEsIDIzNSwgMTQ0LCA3LCA2LCAxLCAyMzUsIDIzLCA3LCA2LCAxLCAxNTYsIDcsIDYsIAotICAgIDEsIDE5MywgNywgNiwgMSwgMjMwLCAyNSwgNywgNiwgMSwgNzYsIDcsIDYsIDEsIDIyNiwgMTA1LCA3LCA2LCAxLCAyMjQsIAotICAgIDk2LCA3LCA2LCAxLCAxNTMsIDcsIDYsIDEsIDIyMiwgOTEsIDcsIDYsIDEsIDIxNywgMTUyLCA3LCA2LCAxLCA3MCwgNywgNiwgCi0gICAgMSwgMjE0LCAxMDUsIDcsIDYsIDEsIDIxMiwgOTgsIDcsIDYsIDEsIDIxMSwgMTc4LCA3LCA2LCAxLCAyMTEsIDExNywgNywgCi0gICAgNiwgMSwgMjEwLCAxNTksIDQzLCA0MiwgMTI3LCAyMjMsIDUwLCAyMTksIDQ2LCA0NCwgNDIsIDEyNywgMjUwLCAzMSwgMjU1LCAKLSAgICAxNCwgMTIxLCAyMzIsIDIxMywgMjQyLCAxMzcsIDI1NSwgMTQsIDcsIDQsIDEsIDYxLCA3LCA0LCAxLCAyNTMsIDE1OCwgNywgCi0gICAgNCwgMSwgMjUxLCA2NiwgNywgNCwgMSwgMjQ5LCA2MCwgNywgNCwgMSwgNzUsIDcsIDQsIDEsIDI0NSwgNiwgNywgNCwgMSwgCi0gICAgMjQzLCAyMDIsIDcsIDQsIDEsIDI0MiwgNjAsIDcsIDQsIDEsIDczLCA3LCA0LCAxLCAyMzUsIDE0NCwgNywgNCwgMSwgMjM1LCAKLSAgICAyMywgNywgNCwgMSwgMTU2LCA3LCA0LCAxLCAxOTMsIDcsIDQsIDEsIDIzMCwgMjUsIDcsIDQsIDEsIDc2LCA3LCA0LCAxLCAKLSAgICAyMjYsIDEwNSwgNywgNCwgMSwgMjI0LCA5NiwgNywgNCwgMSwgMTUzLCA3LCA0LCAxLCAyMjIsIDkxLCA3LCA0LCAxLCAyMTcsIAotICAgIDE1MiwgNywgNCwgMSwgNzAsIDcsIDQsIDEsIDIxNCwgMTA1LCA3LCA0LCAxLCAyMTIsIDk4LCA3LCA0LCAxLCAyMTEsIDE3OCwgCi0gICAgNywgNCwgMSwgMjExLCAxMTcsIDcsIDQsIDEsIDIxMCwgMTU5LCA0MywgMjQ5LCA5OSwgMTI3LCA2NywgMjMyLCAyMTMsIDQ0LCAKLSAgICAyNDksIDk5LCAxMjcsIDE4MiwgMjI4LCA3MywgMjE5LCAxOCwgMjM1LCAxOTMsIDI0NSwgMzEsIDc4LCAyNTAsIDE3NiwgNTAsIAotICAgIDIyNCwgMjI4LCA1MCwgMjQ5LCA5OCwgNTAsIDIxMSwgNDAsIDUwLCAyNTEsIDEzNSwgMTMwLCAyMjEsIDE3MywgNTAsIDI0OCwgCi0gICAgMSwgMjQ5LCAxNjMsIDUwLCAyNDQsIDEzNiwgMjI2LCAxNTQsIDIzNSwgMjM4LCAyMzMsIDQyLCA1MiwgMjU0LCAxMTAsIAotICAgIDIyMywgMjU0LCA3OCwgMjI4LCA1MiwgNTAsIDIxOSwgNTIsIDI0MCwgMTY4LCAyMjMsIDEwMiwgNTAsIDIzMSwgMjMyLCAKLSAgICAyNDgsIDcxLCA1MCwgMjI1LCAyMSwgNTAsIDIxOCwgMjMsIDEwNSwgMjE4LCAyMywgMTU4LCAyNTUsIDMsIDI1NSwgMTQsIAotICAgIDIzMCwgMjI4LCA1MCwgMjI1LCA2OCwgNTAsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjUwLCAxODMsIDIxOCwgMjMsIDExMCwgCi0gICAgMjMxLCAxNDgsIDIyNiwgMTU0LCAyMzUsIDIzOCwgMjIyLCAyNDcsIDUyLCAyNTQsIDExMCwgMjIzLCAyNTQsIDc4LCAyMTIsIAotICAgIDExNCwgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjQyLCAyNywgMjEyLCAxMTQsIDI0NCwgCi0gICAgMiwgMTM0LCAyMjQsIDE5LCAyMzUsIDE5MywgMjI0LCAxMywgNzgsIDcsIDYsIDEsIDExNSwgMiwgMjQyLCAxMzYsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgMTQyLCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzAsIDcsIDYsIDEsIDExNSwgMiwgMTgyLCA3LCA2LCAxLCAKLSAgICAxMTUsIDIsIDI0OCwgMSwgNywgNiwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNDgsIDcsIDYsIDEsIDI1NCwgMjQzLCA3LCA2LCAKLSAgICAxLCAyNTEsIDY3LCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMTYwLCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCAxNDIsIAotICAgIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMTYwLCAyLCAyNDgsIDEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAKLSAgICAyNDIsIDEzNiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDE0MiwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDI1MCwgMzAsIDcsIDYsIAotICAgIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDI0NSwgNTksIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDE4MiwgNywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTQ0LCAyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzMCwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCAxODIsIDcsIDYsIDEsIDE0NCwgMiwgMjQ4LCAxLCAyMzAsIDg0LCA1MCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICA5MSwgNywgNiwgMSwgMTA0LCAyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTA0LCAyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgCi0gICAgMjUwLCAzMCwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAxNDIsIDcsIDYsIDEsIAotICAgIDIxNiwgMTUxLCA3LCA0LCAxLCAyMjAsIDc2LCAyMjIsIDkxLCA3LCA0LCAxLCAxMTUsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAKLSAgICAxMTUsIDIsIDE0MiwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDMwLCA3LCA0LCAxLCAxMTUsIDIsIDE4MiwgNywgNCwgMSwgCi0gICAgMTE1LCAyLCAyNDgsIDEsIDcsIDQsIDEsIDExNSwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA0LCAxLCAyNTQsIDI0MywgNywgNCwgCi0gICAgMSwgMjUxLCA2NywgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDE2MCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE2MCwgMiwgMTQyLCAKLSAgICA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDE2MCwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgCi0gICAgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAxNDIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyNTAsIDMwLCA3LCA0LCAKLSAgICAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyNDUsIDU5LCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAxODIsIDcsIDQsIAotICAgIDEsIDE0NCwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzAsIDcsIAotICAgIDQsIDEsIDE0NCwgMiwgMTgyLCA3LCA0LCAxLCAxNDQsIDIsIDI0OCwgMSwgMjQ3LCAxNjksIDUwLCA3LCA0LCAxLCAxNDQsIAotICAgIDIsIDkxLCA3LCA0LCAxLCAxMDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAKLSAgICAyNTAsIDMwLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDE0MiwgNywgNCwgMSwgCi0gICAgMjE2LCAxNTEsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDExNSwgMiwgMjMxLCAyMzIsIDcsIDQsIAotICAgIDEsIDExNSwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAKLSAgICAxNDYsIDcsIDYsIDEsIDExNSwgMiwgMjI2LCAyMjQsIDcsIDQsIDEsIDExNSwgMiwgMjI2LCAyMjQsIDcsIDYsIDEsIDI1MSwgCi0gICAgNjcsIDIsIDE0MiwgNywgNCwgMSwgMjUxLCA2NywgMiwgMTQyLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAyNTAsIDMwLCA3LCA0LCAKLSAgICAxLCAyNTEsIDY3LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyNTEsIDY3LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIAotICAgIDU5LCA0OCwgNywgNiwgMSwgMjUxLCA2NywgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMjM0LCA3LCAKLSAgICA2LCAxLCAyNDksIDYxLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDI0OSwgCi0gICAgNjEsIDIsIDkxLCA3LCA0LCAxLCAyNDksIDYxLCAyLCA5MSwgNywgNiwgMSwgMTYwLCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMTYwLCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMTYwLCAyLCAyNTEsIDE0NiwgCi0gICAgNywgNiwgMSwgMTYwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgCi0gICAgMjI0LCA3LCA0LCAxLCAxNjAsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxNjAsIAotICAgIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjUwLCAzMCwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgCi0gICAgMzAsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDI1MSwgMTQ2LCA3LCA2LCAKLSAgICAxLCAyNDMsIDIwMywgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDMsIDIwMywgCi0gICAgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUwLCAKLSAgICAzMCwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjQyLCA2MSwgMiwgOTEsIDcsIDQsIDEsIDI0MiwgCi0gICAgNjEsIDIsIDkxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMTgyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMTgyLCA3LCA2LCAxLCAKLSAgICAyNDAsIDE1NCwgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIDIzMiwgNywgNiwgMSwgMjQwLCAxNTQsIAotICAgIDIsIDI1MSwgMTQ2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjUxLCAxNDYsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIAotICAgIDIyNCwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIyNiwgMjI0LCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgNTksIDQ4LCA3LCA0LCAKLSAgICAxLCAyNDcsIDExOSwgNzMsIDcsIDYsIDI3LCAyMzYsIDMxLCA3LCA0LCAyNywgMjM2LCAzMSwgNywgNiwgMSwgMjM1LCAxNDUsIAotICAgIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDIzNSwgMTQ1LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDE4MywgCi0gICAgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIzMywgMjM5LCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgCi0gICAgMTQyLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMTQyLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjUwLCAxODMsIDcsIDQsIDEsIAotICAgIDIzMywgMTQ5LCAyLCAyNTAsIDE4MywgNywgNiwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDcsIDQsIDEsIDIzMywgMTQ5LCAKLSAgICAyLCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCA5MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIAotICAgIDkxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAxNDIsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDE0MiwgNywgNiwgMSwgMjMwLCAyNiwgCi0gICAgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAyNTAsIAotICAgIDIzNCwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIzMCwgMjYsIDIyNCwgMjA0LCAyNTEsIDc4LCAKLSAgICAyNTQsIDU3LCA3LCA2LCAxLCAyNDUsIDEzOCwgNywgNCwgMSwgMjQ1LCAxMzgsIDcsIDYsIDEsIDE0NCwgMiwgMjMxLCAyMzIsIAotICAgIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDE0NCwgMiwgMjUxLCAxNDYsIDcsIDQsIDEsIDE0NCwgMiwgCi0gICAgMjUxLCAxNDYsIDcsIDYsIDEsIDE0NCwgMiwgNTIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCA1MiwgMTQyLCA3LCA2LCAyNywgCi0gICAgMjI2LCAyMzQsIDcsIDQsIDI3LCAyMjYsIDIzNCwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDE0MiwgNywgNCwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDE0MiwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgMTgzLCA3LCA0LCAxLCAyMjMsIDIyNCwgMiwgMjUwLCAKLSAgICAxODMsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDI1MCwgMjM0LCA3LCAKLSAgICA2LCAxLCAyMjIsIDkyLCAyLCAxNDIsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDE0MiwgNywgNiwgMSwgMjIyLCA5MiwgMiwgCi0gICAgMjUwLCAzMCwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjUwLCAzMCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjUwLCAxODMsIDcsIAotICAgIDQsIDEsIDIyMiwgOTIsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjIyLCAKLSAgICA5MiwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMjE3LCAxNTMsIDIsIAotICAgIDI1MCwgMTgzLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyNTAsIDIzNCwgCi0gICAgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDkxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgOTEsIDcsIDYsIDEsIDEwNCwgMiwgMTgyLCAKLSAgICA3LCA0LCAxLCAxMDQsIDIsIDE4MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMTA0LCAyLCAyNTEsIDE0NiwgNywgNCwgMSwgMTA0LCAyLCAyNTEsIDE0NiwgNywgNiwgMSwgMTA0LCAKLSAgICAyLCAyMjIsIDIzNCwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjIyLCAyMzQsIDQ4LCA3LCA2LCAxLCAxMDQsIDIsIDUyLCAxNDIsIAotICAgIDcsIDQsIDEsIDEwNCwgMiwgNTIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyNCwgNywgNCwgMSwgMTA0LCAyLCAKLSAgICAyMjYsIDIyNCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjUwLCAzMCwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjUwLCAzMCwgNywgCi0gICAgNiwgMSwgMjExLCAxMTgsIDIsIDI1MCwgMzAsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyMTEsIAotICAgIDExOCwgMiwgMjQ4LCAxLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMTQyLCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMTQyLCA3LCAKLSAgICA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTAsIAotICAgIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTk5LCAyMjIsIDkxLCAKLSAgICA3LCA0LCAxLCA1NywgMiwgOTEsIDcsIDYsIDEsIDU3LCAyLCAxMDMsIDcsIDYsIDEsIDU3LCAyLCAyMTYsIDExLCA3LCA0LCAKLSAgICAxLCA1NywgMiwgMjE2LCAxMSwgNywgNiwgMSwgMTM4LCAxOTQsIDcsIDQsIDEsIDEzOCwgMTk0LCA3LCA2LCAxLCAyMDQsIAotICAgIDc2LCA3LCA2LCAxLCAyNTEsIDY3LCAyLCAxMDMsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDEwMywgNywgNiwgMSwgMjU0LCAKLSAgICAyMTksIDI0OSwgNjAsIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDEwMywgNywgNiwgMSwgMjQ5LCA2MSwgMiwgMjE2LCAxMSwgNywgCi0gICAgNCwgMSwgMjQ5LCA2MSwgMiwgMjE2LCAxMSwgNywgNCwgMSwgMjE1LCA5NCwgMjQ4LCA1NCwgNywgNiwgMSwgMjIzLCA0OSwgCi0gICAgNzUsIDcsIDYsIDEsIDIyMSwgMTk1LCA3LCA2LCAxLCAyMDQsIDc1LCA3LCA2LCAxLCAyNDUsIDcsIDIsIDEwMywgNywgNCwgCi0gICAgMSwgMjQ1LCA3LCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAxMDMsIDcsIDYsIDEsIDI0MywgMTA3LCA3LCA0LCAxLCAKLSAgICAyNDAsIDIwMSwgNywgNiwgMSwgMjM1LCAxODUsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCA5MSwgNywgNiwgMSwgMjM1LCAyNCwgCi0gICAgMiwgMTAzLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAxMDMsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAxMzAsIDcsIDQsIDEsIAotICAgIDIzMywgMTAwLCAyLCA5MSwgNywgNiwgMSwgMjE1LCA5NCwgMTkzLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA0MywgMTAzLCA3LCAKLSAgICA0LCAxLCAyMzAsIDI2LCAyLCAxOTksIDQ0LCAyMzMsIDM2LCA3LCA2LCAxLCAxNDQsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjQwLCAyNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQwLCAyNDgsIDcsIDYsIDEsIDIyNiwgMjE5LCA3LCA0LCAKLSAgICAxLCAyMjYsIDIxOSwgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDEwMywgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDEwMywgNywgMSwgCi0gICAgMjEwLCAyMTQsIDcsIDYsIDEsIDEzOCwgMTA1LCA3LCA0LCAxLCAxMzgsIDEwNSwgNywgNiwgMSwgMjQ1LCA3NSwgNywgMSwgCi0gICAgMjIzLCA0OSwgMjQ1LCA3NiwgMjMyLCAxMjMsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyMjYsIDY2LCAxMDMsIDcsIDYsIDEsIAotICAgIDIxNywgMTUzLCAyLCAxMDMsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAxMDMsIDcsIDYsIDEsIDIxNywgMTUzLCAyLCAyMjMsIAotICAgIDU1LCAxMDMsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDgsIDcsIDYsIDEsIAotICAgIDIxNCwgMTU3LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTAzLCA3LCA0LCAxLCAKLSAgICAyMTEsIDExOCwgMiwgMTAzLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgOTEsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgCi0gICAgNiwgMSwgMjQ1LCA4LCA3LCA2LCAxLCAyNDUsIDksIDIyMywgNDgsIDcsIDQsIDEsIDI0NSwgOSwgMjIzLCA0OCwgNywgNCwgCi0gICAgMSwgMjQ1LCA5LCAyLCAyMTcsIDc3LCA3LCAxLCAxMTMsIDIsIDkxLCA3LCA2LCAxLCAxMzgsIDE4OSwgNywgNCwgMSwgMTM4LCAKLSAgICAxODksIDcsIDEsIDIzNSwgMTkzLCAyNDIsIDE4MCwgMjE4LCAxMzAsIDIsIDkxLCA3LCAxLCAyMTEsIDE4MSwgNywgMSwgCi0gICAgMjQ4LCA0NywgMjUwLCAxMSwgNywgMSwgMjMzLCA3NywgMjUwLCAxMSwgNywgMSwgMjU0LCAxMzcsIDI1MCwgMTEsIDcsIDEsIAotICAgIDIyMywgNTUsIDI1MCwgMTEsIDcsIDYsIDEsIDI0NiwgNDAsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyNDksIDYxLCAyLCA0LCAKLSAgICAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0NiwgNDAsIDIsIDI1MCwgMjM0LCA3LCA2LCAxLCAyMzIsIAotICAgIDE4OCwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDQsIDEsIDIzNSwgMTQ0LCA3LCA0LCAxLCAyMzIsIDE4OCwgNywgNiwgMSwgCi0gICAgMjI4LCAxODYsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDQsIDEsIDIzNSwgMTQ0LCA3LCA0LCAxLCAyMjgsIDE4NiwgNywgNiwgCi0gICAgMSwgMTE1LCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTE1LCAyLCAyNTAsIDIzNCwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIAotICAgIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAyMzQsIDcsIAotICAgIDQsIDEsIDE0NCwgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDEwNCwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAKLSAgICAyMzQsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgCi0gICAgMjMxLCAyMzIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMiwgMjIsIAotICAgIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAyNTAsIDIzNCwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAKLSAgICAyNTAsIDIzNCwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDIsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjE1LCA5NCwgNzUsIDcsIDYsIDEsIDExNSwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAKLSAgICAyMzIsIDcsIDQsIDEsIDExNSwgMiwgMjQ4LCAyLCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDExNSwgMiwgNTksIDc3LCAyMiwgCi0gICAgMjMxLCAyMzIsIDcsIDQsIDEsIDExNSwgMiwgNTksIDc3LCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIDI1NCwgMjQ0LCAyLCAKLSAgICAyMzEsIDIzMiwgNywgNCwgMSwgMjU0LCAyNDQsIDIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgOTEsIDcsIDQsIAotICAgIDEsIDI0MywgMjAzLCAyLCA5MSwgNywgNiwgMSwgMjQzLCAyMDMsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgCi0gICAgMjUwLCAyMzQsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDI1MCwgMjM0LCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyNTAsIDIzNCwgCi0gICAgNywgNiwgMSwgMTQ0LCAyLCAyMjYsIDIyNCwgNywgNCwgMSwgMTQ0LCAyLCAyMjYsIDIyNCwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyMjYsIDIyNSwgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAxNDQsIDIsIDIyNiwgMjI1LCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIAotICAgIDI0NSwgOSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDI0NSwgOSwgMiwgMjUwLCAyMzQsIDcsIDQsIDEsIDIzNSwgMTQ1LCAyLCAKLSAgICAyNTAsIDIzNCwgNywgNiwgMSwgMjQ2LCAzOSwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNCwgMSwgMjEwLCAxNTksIDcsIDQsIDEsIAotICAgIDI0NiwgMzksIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAxNDIsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAxNDIsIDcsIDYsIDEsIAotICAgIDI0MCwgMTk5LCA3LCA2LCAxLCAyMTEsIDE4MSwgNywgNiwgMSwgMjMwLCAyNiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIzMCwgCi0gICAgMjYsIDIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA3NywgMjIsIDE0MiwgNywgNCwgMSwgMTE1LCAyLCAKLSAgICAyMjIsIDIzNCwgNzcsIDIyLCAxNDIsIDcsIDYsIDEsIDI1NCwgMjQ0LCAyLCAxNDIsIDcsIDQsIDEsIDI1NCwgMjQ0LCAyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjE4LCAxMDMsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE4LCAxMDMsIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDExNSwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMTUsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTE1LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDExNSwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAKLSAgICAxLCAxNjAsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTYwLCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgCi0gICAgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA0LCAxLCAxNjAsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNiwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMjQwLCAKLSAgICAxNTQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMjQwLCAxNTQsIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNDQsIAotICAgIDIsIDIzNSwgMTkzLCAyNTEsIDE0NiwgNywgNCwgMSwgMTQ0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDYsIDEsIDIyMywgCi0gICAgMjI0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCA1MiwgMjQyLCAxMzYsIDcsIDYsIDEsIDIyMywgCi0gICAgMjI0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIAotICAgIDYsIDEsIDEwNCwgMiwgNTIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTA0LCAKLSAgICAyLCAyMzUsIDE5MywgMjUxLCAxNDYsIDcsIDQsIDEsIDEwNCwgMiwgMjM1LCAxOTMsIDI1MSwgMTQ2LCA3LCA2LCAxLCAyMjIsIAotICAgIDkyLCAyLCAyNDksIDIyMCwgNTEsIDcsIDQsIDEsIDIyMiwgOTIsIDIsIDI0OSwgMjIwLCA1MSwgNywgNiwgMSwgMjE3LCAKLSAgICAxNTMsIDIsIDI0OSwgMjIwLCA1MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI0OSwgMjIwLCA1MSwgNywgNiwgMSwgMjEwLCAKLSAgICAyMzEsIDcsIDQsIDEsIDIxMCwgMjMxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNTAsIDIzNCwgNywgNCwgMSwgMjQyLCA2MSwgCi0gICAgMiwgMjUwLCAyMzQsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDE5OSwgNDQsIDIzMywgMzYsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIAotICAgIDI0OSwgMTAwLCA3LCA2LCAxLCAyMjYsIDEzNCwgNywgNCwgMSwgMjI2LCAxMzQsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAxMDMsIDcsIDYsIDEsIDExNSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxMTUsIDIsIAotICAgIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE4MywgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDE4MywgNywgNiwgMSwgCi0gICAgMTQ0LCAyLCAyNDgsIDIsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTQ0LCAyLCAyNDgsIDIsIDIyLCAyMzEsIDIzMiwgNywgCi0gICAgNiwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA4OSwgMjIsIDIzMSwgCi0gICAgMjMyLCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA0OCwgNywgNCwgMSwgMTQ0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgNTksIDc3LCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDc3LCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIAotICAgIDIxMSwgMTE4LCAyLCAyMzEsIDIzMiwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMzMsIDE0OSwgCi0gICAgMiwgMjQ5LCAxMDAsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgMjQ5LCAKLSAgICAxMDAsIDcsIDQsIDEsIDI0NywgMTE5LCAyMzUsIDE0NCwgNywgNCwgMSwgMjQ4LCAxNDMsIDI0NywgMjIwLCA3LCA0LCAxLCAKLSAgICAyMjQsIDMxLCAyNDcsIDIyMCwgNywgNiwgMSwgMTE1LCAyLCA5MSwgNywgNiwgMSwgMjUxLCA2NywgMiwgOTEsIDcsIDQsIDEsIAotICAgIDI1MSwgNjcsIDIsIDkxLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMTMwLCA3LCA2LCAxLCAyMTcsIDE1MywgMiwgMjQ3LCAKLSAgICAyNTUsIDkxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAyMTcsIDI1MCwgMjE3LCA3NywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIAotICAgIDIxNywgMjUwLCAyMTcsIDc3LCA3LCA2LCAxLCAyNDIsIDE4MCwgMjE4LCAxMjksIDcsIDQsIDEsIDI0MiwgMTgwLCAyMTgsIAotICAgIDEyOSwgNywgNiwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDEzMCwgNywgNiwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIAotICAgIDcsIDYsIDEsIDE2MCwgMiwgOTEsIDcsIDQsIDEsIDE2MCwgMiwgOTEsIDcsIDYsIDEsIDIzNSwgMTQ1LCAyLCA5MSwgNywgNCwgCi0gICAgMSwgMjM1LCAxNDUsIDIsIDkxLCA3LCA2LCAxLCA0LCAyMjQsIDk3LCAyLCAyNDEsIDUyLCAyMTcsIDc3LCA3LCA0LCAxLCAKLSAgICAyMjQsIDk3LCAyLCAyNDEsIDUyLCAyMTcsIDc3LCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgOTEsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCA5MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDkxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIAotICAgIDIxNSwgOTQsIDYxLCA3LCA0LCAxLCAyNTQsIDE0MywgNywgNCwgMSwgMjE1LCA5NCwgMjU0LCAxNDMsIDcsIDQsIDEsIDU3LCAKLSAgICAyLCAxMDMsIDcsIDQsIDEsIDIwNCwgNzYsIDcsIDQsIDEsIDI1MSwgNjcsIDIsIDI0OSwgMTAwLCA3LCA0LCAxLCAyNDksIAotICAgIDYxLCAyLCAyMTcsIDc3LCA3LCA0LCAxLCAyNDksIDYxLCAyLCAxMDMsIDcsIDQsIDEsIDIyMywgNDksIDc1LCA3LCA0LCAxLCAKLSAgICAyMjEsIDE5NSwgNywgNCwgMSwgMjIxLCAxOTYsIDIsIDEwMywgNywgNCwgMSwgMjA0LCA3NSwgNywgNCwgMSwgMjIzLCA0OSwgCi0gICAgMjA0LCA3NSwgNywgNCwgMSwgMjIzLCA0OSwgMjA0LCAxNjAsIDIsIDEwMywgNywgNCwgMSwgMjUwLCAwLCAyMjMsIDQ5LCAKLSAgICAyMDQsIDc1LCA3LCA0LCAxLCAyNDcsIDExOSwgMjM1LCAxNDUsIDIsIDkxLCA3LCA0LCAxLCAyNDMsIDIwMywgMiwgMTAzLCAKLSAgICA3LCA0LCAxLCAxMTksIDI0MywgMjAyLCA3LCAxLCA0LCA2LCAyNDMsIDIwMiwgNywgNCwgMSwgMjQzLCAxMDcsIDcsIDQsIDEsIAotICAgIDIyMywgMTUxLCAyNDAsIDI0OCwgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2MCwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMTAzLCAKLSAgICA3LCA0LCAxLCAyNDEsIDIwOCwgMiwgMTAzLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMTg1LCAKLSAgICA3LCAxLCA0LCA2LCA3MywgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIzMywgMTQ5LCAKLSAgICAyLCAyNTIsIDQxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyMzMsIDEsIDcsIDQsIDEsIAotICAgIDIxNSwgOTQsIDE5MywgNywgNCwgMSwgMjE1LCA5NCwgMjMyLCA1MCwgMiwgMTk5LCAyMzMsIDM2LCA3LCA0LCAxLCAyMzIsIAotICAgIDUwLCAyLCAxMDMsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDQzLCAxMDMsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDIyMywgNTUsIAotICAgIDEwMywgNywgMSwgNCwgNiwgMjMwLCAyNSwgNywgNCwgMSwgMjUyLCAxMzQsIDc2LCA3LCAxLCA0LCA2LCAyMjYsIDIzNCwgNywgCi0gICAgNCwgMSwgMjUwLCAwLCAyMjYsIDIwMSwgNywgNCwgMSwgMjI1LCAxMzMsIDcsIDQsIDEsIDIxNSwgOTQsIDE1MywgNywgNCwgCi0gICAgMSwgMjE1LCA5NCwgMjIzLCAyMjQsIDIsIDE5OSwgMjMzLCAzNiwgNywgNCwgMSwgMjE1LCA5NCwgMjIzLCAyMjQsIDIsIAotICAgIDEwMywgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDE5OSwgMjMzLCAzNiwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDIxNywgNzcsIAotICAgIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNDQsIDg3LCA3LCA0LCAxLCAyMjMsIDQ5LCAyMjMsIDIyNCwgMiwgMjQ0LCA4NywgNywgCi0gICAgMSwgNCwgNiwgMTUzLCA3LCAxLCA0LCA2LCAyMzUsIDE5MywgMTUzLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCAxMDMsIDcsIDQsIAotICAgIDEsIDI0NSwgNzUsIDcsIDQsIDEsIDI0NywgMTE5LCAyMzUsIDE0NSwgMiwgMjE4LCAxMDMsIDIyLCAxMDMsIDcsIDQsIDEsIAotICAgIDIxOCwgMjMxLCAyMjMsIDQ5LCAyNDUsIDc1LCA3LCA0LCAxLCAyNDUsIDc2LCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjE1LCAKLSAgICA5NCwgMjE3LCAxNTIsIDcsIDQsIDEsIDIxNywgMTUzLCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDEwNCwgMTMwLCA3LCAKLSAgICA0LCAxLCAyMTQsIDE1NywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDEwMywgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIDcsIAotICAgIDQsIDEsIDIxNSwgOTQsIDIxMiwgOTgsIDcsIDQsIDEsIDIxNSwgOTQsIDIxMSwgMTE3LCA3LCAxLCA0LCA2LCAyMTEsIDExNywgCi0gICAgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI0OSwgMTAwLCA3LCA0LCAKLSAgICAxLCAyNDUsIDgsIDcsIDQsIDEsIDI0NSwgOSwgMiwgMjQ5LCAxMDAsIDcsIDEsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNywgMSwgCi0gICAgMjI1LCAxMzksIDIxMywgMTM1LCAyNDMsIDI0OSwgNywgMSwgMjM1LCAxOTMsIDI0MiwgMTgwLCAyMTgsIDEyOSwgNywgMSwgCi0gICAgMjE4LCAxMTAsIDI1MSwgNjYsIDcsIDEsIDI1MSwgMjQ2LCAyNTAsIDExLCA3LCAxLCA0LCA2LCAyNTMsIDE1OCwgNywgNCwgCi0gICAgMSwgMjUwLCAwLCAyMDQsIDc1LCA3LCAxLCA0LCA2LCAyNDMsIDIwMywgMiwgMTAzLCA3LCAxLCA0LCA2LCAyNDIsIDYwLCA3LCAKLSAgICA0LCAxLCAyMzUsIDE0NSwgMiwgMjQ5LCAxMjcsIDcsIDQsIDEsIDIxNSwgOTQsIDIzNSwgMjMsIDcsIDEsIDQsIDYsIDE1NiwgCi0gICAgNywgNCwgMSwgMjI0LCA5NywgMiwgMTAzLCA3LCAxLCAyNDIsIDE4MCwgMjE4LCAxMzAsIDIsIDkxLCA3LCAxLCAyMjMsIDQ5LCAKLSAgICAyNDIsIDE4MCwgMjE4LCAxMzAsIDIsIDkxLCA3LCA0LCAxLCAyNDYsIDQwLCAyNDcsIDIyMCwgNywgNCwgMSwgMjQ4LCAyNiwgCi0gICAgMjQ3LCAyMjAsIDcsIDQsIDEsIDI0NiwgNDAsIDI0NywgMjIxLCAyLCAyNDksIDEwMCwgNywgNCwgMSwgMjE1LCAxODUsIAotICAgIDI0NywgMjIwLCA3LCA0LCAxLCAyMTYsIDIzNSwgMjQ3LCAyMjAsIDcsIDQsIDEsIDIxNywgMjksIDI0NywgMjIxLCAyLCAKLSAgICAyNDksIDEwMCwgNywgNCwgMSwgMjQ0LCAxMzQsIDI0NywgMjIwLCA3LCA0LCAxLCAyMzIsIDEwMCwgMjQ3LCAyMjAsIDcsIDQsIAotICAgIDEsIDIzMiwgNTEsIDI0NywgMjIwLCA3LCAxLCAyNTEsIDI0NiwgMjI1LCAxODEsIDcsIDEsIDI1MSwgMjU0LCAyMjUsIDE4MSwgCi0gICAgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2MSwgMiwgMjQ0LCA4NywgNywgNCwgMSwgMjE1LCA5NCwgMjQyLCA2MSwgMiwgMjQ0LCAKLSAgICA4OCwgMjIsIDIxNywgNzcsIDU4LCAxLCA0LCAyNDIsIDYwLCA1OCwgMSwgNCwgMjQyLCA2MSwgMiwgMTAzLCA1OCwgMSwgNCwgCi0gICAgMjM1LCAxNDQsIDU4LCAxLCA0LCAxNTMsIDU4LCAxLCA0LCAyMTUsIDk0LCAxNTMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMjMsIAotICAgIDIyNCwgMiwgMTAzLCA1OCwgMSwgNCwgNiwgMjM1LCAxOTMsIDE1MywgNTgsIDEsIDQsIDIxMiwgOTgsIDU4LCAxLCA0LCAKLSAgICAyMTEsIDExNywgNTgsIDEsIDIyNCwgMTkwLCA1OCwgMSwgNTIsIDIyNCwgMTkwLCA1OCwgMSwgMjE1LCA5NCwgMjQ5LCAyMTksIAotICAgIDU4LCAxLCAyNTQsIDU3LCA1OCwgMSwgMjIzLCA0OSwgMjQ5LCAyMTksIDU4LCAxLCA0NCwgMTYzLCAyMjIsIDIzMywgNTgsIAotICAgIDEsIDQzLCAxNjMsIDIyMiwgMjMzLCA1OCwgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA1OCwgMSwgMjIzLCA0OSwgMjQyLCAKLSAgICAxODAsIDIxOCwgMTI5LCA1OCwgMSwgNDMsIDI1MywgMjQ5LCA1OCwgMSwgNDQsIDI1MywgMjQ5LCA1OCwgMSwgMTIwLCAyNTMsIAotICAgIDI0OSwgNTgsIDEsIDEyNCwgMjUzLCAyNDksIDU4LCAxLCAyNTAsIDMxLCAyNTUsIDE0LCAyNTAsIDIzNCwgNTgsIDEsIDY3LCAKLSAgICAyMzIsIDIxMywgNTgsIDEsIDIzMSwgMjMyLCA1OCwgMSwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMjQyLCAxMzcsIDI1NSwgCi0gICAgMTQsIDU4LCAxLCAxMjEsIDY3LCAyMzIsIDIxMywgNTgsIDEsIDEyMSwgMjMxLCAyMzIsIDU4LCAxLCAxMjEsIDI0MiwgMTM3LCAKLSAgICAyNTUsIDE0LCA1OCwgMSwgMTIxLCAyNTUsIDMsIDI1NSwgMTQsIDU4LCAxLCAyMTUsIDIyMiwgMjQ5LCAyMjYsIDU4LCAxLCAKLSAgICAxNjMsIDIxNSwgMjIyLCAyNDksIDIyNiwgNTgsIDEsIDI1MCwgMTczLCA0NCwgMTYzLCAyMjIsIDIzMywgNTgsIDEsIDI1MCwgCi0gICAgMTczLCA0MywgMTYzLCAyMjIsIDIzMywgNTgsIDEsIDEyMCwgMjE3LCA4NywgNTgsIDEsIDEyNCwgMjE3LCA4NywgNTgsIDEsIAotICAgIDk2LCA1MCwgNTgsIDEsIDIzMCwgMTgyLCA1MCwgMjUxLCAxNDYsIDU5LCA0OCwgMjIyLCAyMzQsIDQ4LCAyMjYsIDIyNCwgNCwgCi0gICAgMTgyLCA1MiwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMjIzLCAzNiwgMTAzLCA1OCwgMSwgMjQ5LCAxMzEsIDI1NSwgMTQsIAotICAgIDU4LCAxLCA0LCAyNDMsIDEwNywgNTgsIDEsIDQsIDE1NiwgNTgsIDEsIDQsIDIyMiwgOTEsIDU4LCAxLCA0LCAyMTEsIDE3OCwgCi0gICAgNTgsIDEsIDQsIDIyMywgNDksIDI0MiwgMTgwLCAyMTgsIDEyOSwgNTgsIDEsIDI0NSwgMjAsIDEzOCwgMTMwLCA1OCwgMSwgCi0gICAgMTI1LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjI1LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMTM4LCAxMzAsIDU4LCAxLCAKLSAgICAyNDUsIDE5LCAxMzgsIDEzMCwgNTgsIDEsIDIxMCwgMjU0LCAyNDgsIDQ0LCAxMzgsIDc4LCA1OCwgMSwgMjExLCA3MCwgCi0gICAgMjQ4LCA0NCwgMTM4LCA3OCwgNTgsIDEsIDIxMywgMTMzLCA1OCwgMSwgMjE0LCAxODYsIDU4LCAxLCA1MiwgMjU0LCA1NywgCi0gICAgNTgsIDEsIDEyMSwgMTI0LCAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgMTIwLCAyNTMsIDI0OSwgNTgsIDEsIDEyMSwgNDMsIAotICAgIDI1MywgMjQ5LCA1OCwgMSwgMTIxLCA0NCwgMjUzLCAyNDksIDU4LCAxLCAxMjEsIDIyMiwgMjMzLCA1OCwgMSwgMjMwLCAKLSAgICAyMjQsIDI0MiwgMTM3LCAyNTUsIDE0LCA1OCwgMSwgMjMwLCAyMjQsIDUyLCAyNDIsIDEzNywgMjU1LCAxNCwgNTgsIDEsIAotICAgIDIzMCwgMjI0LCA1MiwgMjU1LCAzLCAyNTUsIDE0LCA1OCwgMSwgMTIxLCAxODIsIDU4LCAxLCAyMjMsIDE1NywgMjQ5LCAKLSAgICAyMjYsIDU4LCAxLCAyNTIsIDU4LCAxMjUsIDIxNiwgMzAsIDU4LCAxLCAyNDUsIDE0MywgMTI1LCAyMTYsIDMwLCA1OCwgMSwgCi0gICAgMjUyLCA1OCwgMTIxLCAyMTYsIDMwLCA1OCwgMSwgMjQ1LCAxNDMsIDEyMSwgMjE2LCAzMCwgNTgsIDEsIDIyMCwgNTQsIDU4LCAKLSAgICAxLCAyMDQsIDIyMCwgNTQsIDU4LCAxLCAxMjEsIDQzLCA3NCwgMzgsIDI0MiwgMTM3LCAyNTUsIDE0LCAzOCwgMjU1LCAzLCAKLSAgICAyNTUsIDE0LCAzOCwgMjUwLCAzMSwgMjU1LCAxNCwgMzgsIDE4MiwgMzgsIDIzMSwgMjMyLCAzOCwgMjI2LCAxMTksIDM4LCAKLSAgICAyNTEsIDE0NiwgMzgsIDU5LCA0OCwgMzgsIDI0OCwgMSwgMzgsIDI0MSwgNTIsIDQ4LCAzOCwgMjIyLCAyMzQsIDQ4LCAzOCwgCi0gICAgNTIsIDI1NSwgMywgMjU1LCAxNCwgMzgsIDI1MCwgMjM0LCAzOCwgNjcsIDIzMiwgMjE0LCA0OCwgMzgsIDUyLCA2NywgMjMyLCAKLSAgICAyMTQsIDQ4LCAzOCwgNTIsIDI0MiwgMTM3LCAyNTUsIDE0LCAzOCwgMjUwLCAyNTUsIDM4LCAyMzUsIDE5MywgMjUxLCAxNDYsIAotICAgIDM4LCAyMTUsIDk0LCAyNDksIDIyMCwgNDgsIDM4LCAyNDksIDIyMCwgNDgsIDM4LCAyMjMsIDQ5LCAyNDksIDIyMCwgNDgsIAotICAgIDM4LCAyNDksIDIyMCwgNzcsIDIyMiwgMjUxLCAzOCwgMjQyLCAxMzcsIDI1NSwgMTUsIDUxLCAzOCwgMjU1LCAzLCAyNTUsIAotICAgIDE1LCA1MSwgMzgsIDQzLCAyMTcsIDg4LCA1MSwgMzgsIDQ0LCAyMTcsIDg4LCA1MSwgMzgsIDQzLCAyNTQsIDExMCwgNDgsIAotICAgIDM4LCAyNDAsIDI0OCwgMzgsIDQzLCAxNjMsIDIyMiwgMjM0LCA1MSwgMzgsIDEyMCwgMjE3LCA4OCwgNTEsIDM4LCAxMjQsIAotICAgIDIxNywgODgsIDUxLCAzOCwgOTYsIDUsIDUxLCAzOCwgMjMwLCAxODIsIDUsIDUxLCAzOCwgMjI2LCA2NCwgMjQxLCA1MiwgCi0gICAgNTEsIDM4LCAyMjMsIDU1LCAyNDEsIDUyLCA1MSwgMzgsIDU5LCA1MSwgMzgsIDI0OCwgMiwgNTEsIDM4LCAyMjIsIDIzNCwgCi0gICAgNTEsIDM4LCAyNDksIDIyMCwgNTEsIDM4LCAyNTAsIDE4MywgMzgsIDIyNiwgMjI0LCAzOCwgNjcsIDIzMiwgMjE0LCA1MSwgCi0gICAgMzgsIDI1MSwgMTQwLCA1MSwgMzgsIDIzNSwgMTkzLCA1MiwgMjU0LCAyNCwgNTEsIDM4LCAyNTAsIDIzNSwgNTEsIDM4LCAKLSAgICAyNTAsIDMxLCAyNTUsIDE1LCA1MSwgMzgsIDI1MSwgMTQ3LCA1MSwgMzgsIDIzNSwgMTkzLCAyNTEsIDE0NywgNTEsIDM4LCAKLSAgICAyMTYsIDg5LCA1MSwgMzgsIDIzMSwgMjMzLCA1MSwgMzgsIDEyMSwgMjMyLCAyMTMsIDM4LCA1MiwgMTIxLCAyMzIsIDIxMywgCi0gICAgMzgsIDIxNiwgODksIDIyNiwgMTIwLCAzOCwgMjE5LCAyNTEsIDIxOCwgMTAzLCAyMjYsIDEyMCwgMzgsIDE5OSwgMjE4LCAKLSAgICAxMDMsIDIyNiwgMTIwLCAzOCwgMjE5LCAyNTEsIDIxOSwgNDcsIDIyNiwgMTIwLCAzOCwgMTk5LCAyMTksIDQ3LCAyMjYsIAotICAgIDEyMCwgMzgsIDQ0LCAxNjMsIDIyMiwgMjM0LCA1MSwgMzgsIDIzNSwgMTkzLCAyNTEsIDE0MCwgNTEsIDM4LCA0MiwgNTEsIAotICAgIDM4LCAyMjEsIDE4MCwgNTEsIDM4LCAyMTEsIDE3OSwgNDgsIDM4LCA2NywgMTgyLCAzOCwgNTIsIDIyNiwgMTE5LCAzOCwgCi0gICAgMjQyLCAxMzcsIDEzOCwgNzgsIDM4LCAyNTUsIDMsIDEzOCwgNzgsIDM4LCAyNiwgMjI1LCAxNzUsIDM4LCAyNiwgMjM0LCAyLCAKLSAgICAzOCwgMjYsIDI0NywgMjUyLCAyMTYsIDE4LCAzOCwgMjYsIDIxMCwgMjE5LCAzOCwgMjUxLCAxNDAsIDQ4LCAzOCwgMjQ1LCAKLSAgICA5OCwgNSwgNTEsIDM4LCA1MiwgNjcsIDIzMiwgMjE0LCA1MSwgMzgsIDQzLCAyNTQsIDExMCwgNTEsIDM4LCAyMjgsIDUyLCAKLSAgICAyMTYsIDg5LCA0OCwgMzgsIDI0MSwgNTgsIDQ4LCAzOCwgMjU0LCAxNDgsIDEyOCwgMjE2LCA0MiwgNDgsIDM4LCA0MywgNDQsIAotICAgIDgwLCA1MSwgMzgsIDIxNCwgMTUzLCA4MCwgNTEsIDM4LCAyNDIsIDE0MiwgMjM1LCA2MywgMzgsIDQ0LCAyNTMsIDI1MCwgCi0gICAgNDgsIDM4LCA0MywgMTYzLCAyMjIsIDIzNCwgNDgsIDM4LCAyNDQsIDEzMSwgMzgsIDIxMSwgMTc5LCA1MSwgMzgsIDQzLCAKLSAgICAyNTMsIDI1MCwgNTEsIDM4LCA0NCwgMjUzLCAyNTAsIDUxLCAzOCwgNDQsIDI1MywgMjUwLCAyMiwgMTIwLCAyNTMsIDI1MCwgCi0gICAgNTEsIDM4LCA0NCwgMTYzLCAyMjIsIDIzNCwgNDgsIDM4LCA1OSwgNzcsIDIyMiwgMjUxLCAzOCwgMjUzLCAyMTcsIDUxLCAKLSAgICAzOCwgNTIsIDIyMiwgMjM0LCA1MSwgMzgsIDIxMCwgMzUsIDQ4LCAzOCwgNTIsIDI1MSwgMTQ3LCA1MSwgMzgsIDUyLCAyNTEsIAotICAgIDE0NiwgMzgsIDUyLCAyMzEsIDIzMiwgMzgsIDUyLCAyMzEsIDIzMywgNTEsIDM4LCA1MiwgMTgyLCAzOCwgNTIsIDIzNSwgCi0gICAgMTkzLCAyNTEsIDE0NiwgMzgsIDUyLCA5NywgODAsIDUxLCAzOCwgNywgNCwgMSwgNjEsIDM4LCA3LCA0LCAxLCA3NSwgMzgsIAotICAgIDcsIDQsIDEsIDczLCAzOCwgNywgNCwgMSwgNzYsIDM4LCA3LCA0LCAxLCA3MCwgMzgsIDcsIDQsIDEsIDI1MSwgNjYsIDM4LCAKLSAgICA3LCA0LCAxLCAyNDksIDYwLCAzOCwgNywgNCwgMSwgMjQyLCA2MCwgMzgsIDcsIDQsIDEsIDE5MywgMzgsIDcsIDQsIDEsIAotICAgIDE1MywgMzgsIDcsIDQsIDEsIDIxNywgMTUyLCAzOCwgNywgNCwgMSwgMjE0LCAxMDUsIDM4LCA3LCA0LCAxLCAyMTEsIDE3OCwgCi0gICAgMjYsIDYsIDEsIDI0MSwgMTk2LCAyNiwgNCwgMSwgMjQxLCAxOTYsIDI2LCA2LCAxLCAyNTQsIDIzLCAyMjEsIDI0NiwgMjYsIAotICAgIDQsIDEsIDI1NCwgMjMsIDIyMSwgMjQ2LCAyNiwgMjI3LCAxOTgsIDUwLCAyNiwgMjMyLCAxMDgsIDIyNywgMTk4LCA1MCwgCi0gICAgMjYsIDYsIDEsIDIyNiwgNTEsIDI0NywgMjI3LCAyNiwgNCwgMSwgMjI2LCA1MSwgMjQ3LCAyMjcsIDI2LCAyMTAsIDIxOSwgCi0gICAgMjYsIDQsIDIyMywgNDksIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDQsIDI0NiwgMTE4LCAyMzIsIDgzLCAyMTksIAotICAgIDE3OCwgODcsIDI2LCA0LCAyMjMsIDQ5LCAyNDYsIDExOCwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAyNiwgMjI0LCAxMywgCi0gICAgNzgsIDI2LCAyMTYsIDE4LCAyNiwgMjQ3LCAyNTIsIDIxNiwgMTgsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjE2LCAxOCwgCi0gICAgMjYsIDI1NCwgOTcsIDIxNywgMiwgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjQ1LCA2NCwgCi0gICAgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMTYsIDE4LCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDIxNiwgCi0gICAgMTgsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIDE4LCAyNiwgCi0gICAgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUyLCAyMiwgMjE2LCAxOCwgMjYsIDYsIDEsIDI1NCwgMTQzLCAyNiwgNiwgMSwgCi0gICAgMjUyLCAyNiwgMjYsIDYsIDEsIDI0MywgMTA3LCAyNiwgNiwgMSwgMjQ4LCA1NCwgMjYsIDYsIDEsIDI0NSwgMTAwLCAyNiwgCi0gICAgNiwgMSwgMjEwLCA4NSwgMjYsIDYsIDEsIDI0NSwgNjMsIDI2LCA2LCAxLCAyMTYsIDE3OSwgMjYsIDYsIDEsIDIzNSwgMTg1LCAKLSAgICAyNiwgNiwgMSwgMjM0LCAyMjIsIDI2LCA2LCAxLCAyMzMsIDk4LCAyNiwgNiwgMSwgMjMwLCAxMDIsIDI2LCA2LCAxLCAyMjcsIAotICAgIDIzNywgMjYsIDYsIDEsIDIxMSwgMTU3LCAyNiwgNiwgMSwgMjI2LCAxOTksIDI2LCA2LCAxLCAyMjUsIDEwOCwgMjYsIDYsIAotICAgIDEsIDIyMywgMzcsIDI2LCA2LCAxLCAyMTksIDE3NywgMjYsIDYsIDEsIDIxNywgNDEsIDI2LCA2LCAxLCAyMTQsIDE1NywgCi0gICAgMjYsIDYsIDEsIDIyNSwgMTMzLCAyNiwgNiwgMSwgMjUwLCAxMTAsIDI2LCA2LCAxLCAyMjQsIDE2MSwgMjYsIDYsIDEsIAotICAgIDIyNiwgMjAxLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUxLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0NywgCi0gICAgMjUxLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjE2LCAxOCwgMjYsIAotICAgIDQsIDEsIDI0NSwgNjQsIDIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjE2LCAxOCwgMjYsIDQsIDEsIDIxNCwgCi0gICAgMTU4LCAyLCAyNDcsIDI1MiwgMjIsIDIxNiwgMTgsIDI2LCA0LCAxLCAyNTQsIDE0MywgMjYsIDQsIDEsIDI1MiwgMjYsIDI2LCAKLSAgICA0LCAxLCAyNDMsIDEwNywgMjYsIDQsIDEsIDI0OCwgNTQsIDI2LCA0LCAxLCAyNDUsIDEwMCwgMjYsIDQsIDEsIDIxMCwgODUsIAotICAgIDI2LCA0LCAxLCAyNDUsIDYzLCAyNiwgNCwgMSwgMjE2LCAxNzksIDI2LCA0LCAxLCAyMzUsIDE4NSwgMjYsIDQsIDEsIDIzNCwgCi0gICAgMjIyLCAyNiwgNCwgMSwgMjMzLCA5OCwgMjYsIDQsIDEsIDIzMCwgMTAyLCAyNiwgNCwgMSwgMjI3LCAyMzcsIDI2LCA0LCAxLCAKLSAgICAyMTEsIDE1NywgMjYsIDQsIDEsIDIyNiwgMTk5LCAyNiwgNCwgMSwgMjI1LCAxMDgsIDI2LCA0LCAxLCAyMjMsIDM3LCAyNiwgCi0gICAgNCwgMSwgNDAsIDIxOSwgMTc3LCAyNiwgNCwgMSwgMjE5LCAxNzcsIDI2LCA0LCAxLCAyMTcsIDQxLCAyNiwgNCwgMSwgMjE0LCAKLSAgICAxNTcsIDI2LCA0LCAxLCAyMjUsIDEzMywgMjYsIDQsIDEsIDI1MCwgMTEwLCAyNiwgNCwgMSwgMjI0LCAxNjEsIDI2LCA0LCAKLSAgICAxLCAyMjYsIDIwMSwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDcsIDI1MSwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDcsIAotICAgIDI1MSwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyMTYsIDE4LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIxNiwgMTgsIDI2LCAKLSAgICA0LCAxLCAyMjYsIDIwMiwgMiwgMjE2LCAxOCwgMjYsIDYsIDIzNCwgMjQ3LCA4NywgMjYsIDI1MiwgMjcsIDg3LCAyNiwgCi0gICAgMjE2LCAxODAsIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI0MSwgNTIsIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI1NSwgMywgMjIsIAotICAgIDI0MSwgNTIsIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI0OCwgMiwgMjIsIDI0MSwgNTIsIDg3LCAyNiwgMjI1LCAxMzQsIDg3LCAKLSAgICAyNiwgMjI1LCAxMDksIDg3LCAyNiwgMjM0LCAyNDcsIDg3LCAyNiwgMSwgMjU0LCAyMywgMjM0LCA2LCAyNiwgNCwgMSwgCi0gICAgMjU0LCAyMywgMjM0LCA2LCAyNiwgMSwgMjE4LCAxMzcsIDI2LCA0LCAxLCAyMTgsIDEzNywgMjYsIDEsIDI0NywgMjI3LCAKLSAgICAyNiwgNCwgMSwgMjQ3LCAyMjcsIDI2LCAxLCAyMzQsIDYsIDI2LCA0LCAxLCAyMzQsIDYsIDI2LCAxLCAyMjEsIDI0NiwgMjYsIAotICAgIDQsIDEsIDIyMSwgMjQ2LCA4MSwgNiwgMSwgMjIwLCA1NSwgODEsIDQsIDEsIDIyMCwgNTUsIDgxLCA2LCAxLCAyNDQsIDE0MCwgCi0gICAgODEsIDQsIDEsIDI0NCwgMTQwLCA4MSwgNiwgMSwgMjM0LCAxMTcsIDgxLCA0LCAxLCAyMzQsIDExNywgODEsIDYsIDEsIAotICAgIDI0MSwgNDUsIDgxLCA0LCAxLCAyNDEsIDQ1LCA4MSwgNiwgMSwgMjQzLCAxMDIsIDgxLCA0LCAxLCAyNDMsIDEwMiwgODEsIAotICAgIDYsIDEsIDIyMCwgMjIsIDgxLCA0LCAxLCAyMjAsIDIyLCA4MSwgNiwgMSwgMjQ4LCA2OSwgODEsIDQsIDEsIDI0OCwgNjksIAotICAgIDI2LCAyMzQsIDIyMywgODcsIDI2LCAyMjMsIDM4LCA4NywgMjYsIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDEsIDIxMCwgCi0gICAgMjI0LCAyNiwgNiwgMjE2LCAxODAsIDg3LCAyNiwgMjMyLCA4MywgMjQ1LCAxMDEsIDg3LCAyNiwgMjIzLCA0OSwgMjMyLCAKLSAgICA4MywgMjQ1LCAxMDEsIDg3LCAyNiwgNiwgMSwgMjIwLCA3LCAyNiwgNCwgMSwgMjIwLCA3LCAyNiwgNiwgMjMyLCA4MywgCi0gICAgMjE5LCAxNzgsIDg3LCAyNiwgNiwgMSwgMjIxLCAyNDMsIDI2LCA0LCAxLCAyMjEsIDI0MywgMjYsIDIyMywgMzgsIDIsIAotICAgIDIxOCwgMTAzLCA4NywgMjYsIDYsIDIyMywgNDksIDIzMiwgODMsIDIxOSwgMTc4LCA4NywgMjYsIDYsIDI0NiwgMTE4LCAKLSAgICAyMzIsIDgzLCAyMTksIDE3OCwgODcsIDI2LCA2LCAyMjMsIDQ5LCAyNDYsIDExOCwgMjMyLCA4MywgMjE5LCAxNzgsIDg3LCAKLSAgICAzMywgNiwgMSwgMjM2LCA2MSwgMiwgMjQyLCAxMzYsIDMzLCA2LCAxLCAyMzUsIDE4OSwgMzMsIDYsIDEsIDI0NywgMTYyLCAKLSAgICAzMywgNiwgMSwgMjQyLCAxODcsIDMzLCA2LCAxLCAyMTQsIDIwMiwgMjM2LCA2MCwgMzMsIDYsIDEsIDI0NiwgMzYsIDMzLCAKLSAgICA2LCAxLCAyNTEsIDc2LCA3MywgMzMsIDYsIDEsIDIxMSwgOCwgMzMsIDYsIDEsIDIzNSwgMTI2LCAzMywgNiwgMSwgMjMyLCAKLSAgICAxODcsIDMzLCA2LCAxLCAyMjgsIDE3OCwgMzMsIDYsIDEsIDIxNSwgMTc0LCAzMywgNiwgMSwgMjM0LCA0OCwgMzMsIDYsIDEsIAotICAgIDI0MCwgMTU0LCAyLCAyNDIsIDEzNiwgMzMsIDYsIDEsIDIxOSwgMjUxLCA3MCwgMzMsIDYsIDEsIDI0NiwgMzIsIDMzLCA2LCAKLSAgICAxLCA2MSwgMzMsIDYsIDEsIDI1MiwgNzUsIDMzLCA2LCAxLCAyMTMsIDI1NSwgMzMsIDYsIDEsIDI0MiwgMjM2LCAzMywgNiwgCi0gICAgMSwgMjQ4LCA5MCwgMzMsIDYsIDEsIDIzNiwgNjAsIDMzLCA2LCAxLCAyMTAsIDc0LCAzMywgNiwgMSwgMjEwLCA5NCwgMzMsIAotICAgIDYsIDEsIDczLCAzMywgNiwgMSwgMjE5LCAyNTEsIDczLCAzMywgNiwgMSwgMTc2LCAzMywgNiwgMSwgMjQ1LCAxNzQsIDMzLCAKLSAgICA2LCAxLCAyNDUsIDE1OSwgMzMsIDYsIDEsIDI0NSwgMTUwLCAzMywgNiwgMSwgNzYsIDMzLCA2LCAxLCAyMjUsIDIyMSwgMzMsIAotICAgIDYsIDEsIDI0NSwgOTIsIDMzLCA2LCAxLCAyNDUsIDgyLCAzMywgNiwgMSwgMjE3LCAyMiwgMzMsIDYsIDEsIDcwLCAzMywgNiwgCi0gICAgMSwgMjQ1LCAyMDIsIDMzLCA2LCAxLCAxNjIsIDMzLCA2LCAxLCAyMTUsIDE3OCwgMzMsIDYsIDEsIDI1MCwgMTMxLCAzMywgCi0gICAgNiwgMSwgMjIwLCAxMDIsIDMzLCA2LCAxLCAyMjAsIDY1LCAzMywgNiwgMSwgMjQyLCAzLCA1MCwgMzMsIDYsIDEsIDIxMSwgCi0gICAgMjcsIDMzLCA2LCAxLCAyMTksIDUyLCA1MCwgMzMsIDYsIDEsIDc1LCAzMywgNiwgMSwgMjEwLCAyMTIsIDMzLCA2LCAxLCAKLSAgICAxOTEsIDMzLCA0LCAxLCA2MSwgMzMsIDQsIDEsIDI1MiwgNzUsIDMzLCA0LCAxLCAyMTMsIDI1NSwgMzMsIDQsIDEsIDI0MiwgCi0gICAgMjM2LCAzMywgNCwgMSwgMjQ4LCA5MCwgMzMsIDQsIDEsIDIzNiwgNjAsIDMzLCA0LCAxLCAyMTAsIDc0LCAzMywgNCwgMSwgCi0gICAgMjEwLCA5NCwgMzMsIDQsIDEsIDczLCAzMywgNCwgMSwgMjE5LCAyNTEsIDczLCAzMywgNCwgMSwgMTc2LCAzMywgNCwgMSwgCi0gICAgMjQ1LCAxNzQsIDMzLCA0LCAxLCAyNDUsIDE1OSwgMzMsIDQsIDEsIDI0NSwgMTUwLCAzMywgNCwgMSwgNzYsIDMzLCA0LCAxLCAKLSAgICAyMjUsIDIyMSwgMzMsIDQsIDEsIDI0NSwgOTIsIDMzLCA0LCAxLCAyNDUsIDgyLCAzMywgNCwgMSwgMjE3LCAyMiwgMzMsIDQsIAotICAgIDEsIDcwLCAzMywgNCwgMSwgMjQ1LCAyMDIsIDMzLCA0LCAxLCAxNjIsIDMzLCA0LCAxLCAyMTUsIDE3OCwgMzMsIDQsIDEsIAotICAgIDI1MCwgMTMxLCAzMywgNCwgMSwgMjIwLCAxMDIsIDMzLCA0LCAxLCAyMjAsIDY1LCAzMywgNCwgMSwgMjQyLCAzLCA1MCwgCi0gICAgMzMsIDQsIDEsIDIxMSwgMjcsIDMzLCA0LCAxLCAyMTksIDUyLCA1MCwgMzMsIDQsIDEsIDc1LCAzMywgNCwgMSwgMjEwLCAKLSAgICAyMTIsIDMzLCA0LCAxLCAxOTEsIDMzLCA0LCAxLCAyMzYsIDYxLCAyLCAyNDIsIDEzNiwgMzMsIDQsIDEsIDIzNSwgMTg5LCAKLSAgICAzMywgNCwgMSwgMjQ3LCAxNjIsIDMzLCA0LCAxLCAyNDIsIDE4NywgMzMsIDQsIDEsIDIxNCwgMjAyLCAyMzYsIDYwLCAzMywgCi0gICAgNCwgMSwgMjQ2LCAzNiwgMzMsIDQsIDEsIDI1MSwgNzYsIDczLCAzMywgNCwgMSwgMjExLCA4LCAzMywgNCwgMSwgMjM1LCAKLSAgICAxMjYsIDMzLCA0LCAxLCAyMzIsIDE4NywgMzMsIDQsIDEsIDIyOCwgMTc4LCAzMywgNCwgMSwgMjE1LCAxNzQsIDMzLCA0LCAKLSAgICAxLCAyMzQsIDQ4LCAzMywgNCwgMSwgMjQwLCAxNTQsIDIsIDI0MiwgMTM2LCAzMywgNCwgMSwgMjE5LCAyNTEsIDcwLCAzMywgCi0gICAgNCwgMSwgMjQ2LCAzMiwgMzMsIDYsIDEsIDIyNiwgMjAxLCAzMywgNCwgMSwgMjI2LCAyMDEsIDMzLCA2LCAxLCAyMTEsIDU5LCAKLSAgICAzMywgNCwgMSwgMjExLCA1OSwgMzMsIDYsIDEsIDIzNSwgMTgzLCA3NSwgMzMsIDQsIDEsIDIzNSwgMTgzLCA3NSwgMzMsIDYsIAotICAgIDEsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIDIzNSwgMTgzLCAKLSAgICAyMzIsIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE4MywgMjMyLCAxOTIsIDIxMCwgMTgzLCAzMywgNiwgMSwgCi0gICAgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNCwgMSwgMjUxLCAyNDksIDIxMCwgMTgzLCAzMywgNiwgMSwgMjM1LCAxODMsIAotICAgIDI1MSwgMjQ5LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTgzLCAyNTEsIDI0OSwgMjEwLCAxODMsIDMzLCA2LCAxLCAKLSAgICAyMzMsIDIzMywgMzMsIDQsIDEsIDIzMywgMjMzLCAzMywgNiwgMSwgMjI0LCAxNjEsIDMzLCA0LCAxLCAyMjQsIDE2MSwgMzMsIAotICAgIDYsIDEsIDI0NCwgODIsIDMzLCA0LCAxLCAyNDQsIDgyLCAzMywgNiwgMSwgMjM1LCAxNDYsIDMzLCA0LCAxLCAyMzUsIDE0NiwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTQ3LCAyLCA1MiwgMjQyLCAxMzcsIDI1NSwgMTQsIDMzLCA0LCAxLCAyMzUsIDE0NywgMiwgNTIsIAotICAgIDI0MiwgMTM3LCAyNTUsIDE0LCAzMywgNiwgMSwgMjE0LCAyMDUsIDMzLCA0LCAxLCAyMTQsIDIwNSwgMzMsIDYsIDEsIDIyMiwgCi0gICAgMTg1LCAyMjYsIDIwMSwgMzMsIDQsIDEsIDIyMiwgMTg1LCAyMjYsIDIwMSwgMzMsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMTYsIAotICAgIDY1LCAzMywgNCwgMSwgMjI2LCAyMDIsIDIsIDIxNiwgNjUsIDMzLCA2LCAxLCAyMjYsIDE0MCwgMzMsIDQsIDEsIDIyNiwgCi0gICAgMTQwLCAzMywgNiwgMSwgMjM0LCA2LCAzMywgNCwgMSwgMjM0LCA2LCAzMywgMjE2LCAxNDYsIDUwLCAzOCwgMzMsIDIxNiwgCi0gICAgNjUsIDM4LCAzMywgMjI2LCA2NSwgMzgsIDMzLCAyNDgsIDE1NCwgMjI1LCAxOCwgMzgsIDMzLCAyMjQsIDE1NSwgMjI1LCAKLSAgICAxOCwgMzgsIDMzLCAyMjUsIDMsIDM4LCAzMywgMjQwLCAyMTEsIDIxNiwgMTQ2LCA1MCwgMzgsIDMzLCAyMzAsIDE5MSwgNTAsIAotICAgIDMzLCA2LCAxLCAyMTksIDI1MSwgMjQwLCAxNTQsIDIsIDIxNywgNzcsIDMzLCA0LCAxLCAyMTksIDI1MSwgMjQwLCAxNTQsIAotICAgIDIsIDIxNywgNzcsIDMzLCA2LCAxLCAyMjAsIDE0NiwgNTAsIDMzLCA0LCAxLCAyMjAsIDE0NiwgNTAsIDMzLCA2LCAxLCAKLSAgICAyNDUsIDkzLCAyLCAyMTYsIDExNCwgMzMsIDQsIDEsIDI0NSwgOTMsIDIsIDIxNiwgMTE0LCAzMywgNiwgMSwgMjQyLCAyMzcsIAotICAgIDIsIDIxNCwgMTU2LCAzMywgNCwgMSwgMjQyLCAyMzcsIDIsIDIxNCwgMTU2LCAzMywgNiwgMSwgMjQyLCAyMzcsIDIsIDkxLCAKLSAgICAzMywgNCwgMSwgMjQyLCAyMzcsIDIsIDkxLCAzMywgNiwgMSwgMjQyLCAyMzcsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA0LCAKLSAgICAxLCAyNDIsIDIzNywgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDYsIDEsIDIxMCwgNzUsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAKLSAgICAyMTAsIDc1LCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjEwLCA5NSwgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIAotICAgIDI0OCwgMzksIDMzLCA2LCAxLCAyMzUsIDEzLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjM1LCAxMywgMiwgMjQ4LCAzOSwgCi0gICAgMzMsIDYsIDEsIDIzNSwgMTMsIDIsIDY3LCA5MSwgMzMsIDQsIDEsIDIzNSwgMTMsIDIsIDY3LCA5MSwgMzMsIDYsIDEsIAotICAgIDIzNSwgMTMsIDIsIDkxLCAzMywgNCwgMSwgMjM1LCAxMywgMiwgOTEsIDMzLCA2LCAxLCAyNTIsIDEyNCwgMTc2LCAzMywgNCwgCi0gICAgMSwgMjUyLCAxMjQsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTUxLCAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQ1LCAxNTEsIDIsIAotICAgIDI0OCwgMzksIDMzLCA2LCAyNywgMjQ1LCAxNTEsIDI0MiwgMjM2LCAzMywgNCwgMjcsIDI0NSwgMTUxLCAyNDIsIDIzNiwgCi0gICAgMzMsIDYsIDEsIDIyNSwgMjIyLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgMSwgMjI1LCAyMjIsIDIsIDIzMCwgMjI0LCAKLSAgICAxMDMsIDMzLCA2LCAxLCAyNTUsIDIwLCAxNjIsIDMzLCA0LCAxLCAyNTUsIDIwLCAxNjIsIDMzLCA2LCAxLCAyNDUsIDgzLCAKLSAgICAyLCAyNDgsIDM5LCAzMywgNCwgMSwgMjQ1LCA4MywgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIxNywgMjMsIDIsIDI0OCwgMzksIAotICAgIDMzLCA0LCAxLCAyMTcsIDIzLCAyLCAyNDgsIDM5LCAzMywgNiwgMSwgMjE4LCAxMjEsIDcwLCAzMywgNCwgMSwgMjE4LCAKLSAgICAxMjEsIDcwLCAzMywgNiwgMSwgMjE4LCAxMjEsIDEwNCwgMiwgOTEsIDMzLCA0LCAxLCAyMTgsIDEyMSwgMTA0LCAyLCA5MSwgCi0gICAgMzMsIDYsIDEsIDI0MiwgNDksIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNDIsIDQ5LCAyLCAyNDgsIDM5LCAzMywgNiwgMjcsIAotICAgIDIxNywgMjMsIDIxNSwgMTc4LCAzMywgNCwgMjcsIDIxNywgMjMsIDIxNSwgMTc4LCAzMywgNiwgMSwgMjUwLCAxMzIsIDIsIAotICAgIDI0OCwgMzksIDMzLCA0LCAxLCAyNTAsIDEzMiwgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDI1MCwgMTMyLCAyLCA2NywgOTEsIAotICAgIDMzLCA0LCAxLCAyNTAsIDEzMiwgMiwgNjcsIDkxLCAzMywgNiwgMSwgMjIwLCAzMywgMzMsIDQsIDEsIDIyMCwgMzMsIDMzLCAKLSAgICA2LCAxLCAyNTUsIDIwLCAyNTAsIDEzMSwgMzMsIDQsIDEsIDI1NSwgMjAsIDI1MCwgMTMxLCAzMywgNiwgMSwgMjU1LCAyMCwgCi0gICAgMjUwLCAxMzIsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyNTUsIDIwLCAyNTAsIDEzMiwgMiwgMjQ4LCAzOSwgMzMsIDEsIAotICAgIDIyNiwgNTgsIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNTEsIDE0NiwgMzMsIDQsIDEsIDIxMCwgNzUsIDIsIDI1MSwgMTQ2LCAKLSAgICAzMywgNiwgMSwgMjM1LCAxMywgMiwgMTAzLCAzMywgNCwgMSwgMjM1LCAxMywgMiwgMTAzLCAzMywgNiwgMSwgMjQ1LCAxNzUsIAotICAgIDIsIDIxNywgNzcsIDMzLCA0LCAxLCAyNDUsIDE3NSwgMiwgMjE3LCA3NywgMzMsIDYsIDEsIDI0NSwgMTUxLCAyLCAxMDMsIAotICAgIDMzLCA0LCAxLCAyNDUsIDE1MSwgMiwgMTAzLCAzMywgNiwgMSwgMjQ1LCAxNTEsIDIsIDIxNywgNzcsIDMzLCA0LCAxLCAKLSAgICAyNDUsIDE1MSwgMiwgMjE3LCA3NywgMzMsIDYsIDEsIDIzNCwgMTI3LCAyNTAsIDEzMSwgMzMsIDQsIDEsIDIzNCwgMTI3LCAKLSAgICAyNTAsIDEzMSwgMzMsIDYsIDEsIDI0NSwgMTYwLCAyLCAyMTcsIDc3LCAzMywgNCwgMSwgMjQ1LCAxNjAsIDIsIDIxNywgNzcsIAotICAgIDMzLCA0LCAxLCAyMjYsIDU4LCAzMywgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NiwgMzMsIDQsIDEsIDExNSwgMiwgMjUxLCAKLSAgICAxNDYsIDMzLCA2LCAxLCAxMTUsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDExNSwgMiwgMjQ4LCAxLCAzMywgNiwgMjcsIDExNSwgCi0gICAgMjM2LCA2MCwgMzMsIDQsIDI3LCAxMTUsIDIzNiwgNjAsIDMzLCA2LCAxLCAyMzYsIDYxLCAyLCAyNTEsIDE0NiwgMzMsIDQsIAotICAgIDEsIDIzNiwgNjEsIDIsIDI1MSwgMTQ2LCAzMywgNiwgMSwgMjIxLCAxOTUsIDMzLCA0LCAxLCAyMjEsIDE5NSwgMzMsIDYsIAotICAgIDEsIDIyMSwgMTk2LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyMjEsIDE5NiwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjEwLCA3NSwgCi0gICAgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjEwLCA5NSwgMiwgMjQ4LCAxLCAKLSAgICAzMywgNCwgMSwgMjEwLCA5NSwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMjU1LCAyMCwgMjQ2LCAzNiwgMzMsIDQsIDEsIDI1NSwgCi0gICAgMjAsIDI0NiwgMzYsIDMzLCA2LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAyMzIsIDMzLCA0LCAxLCAyNDAsIDE1NCwgMiwgMjMxLCAKLSAgICAyMzIsIDMzLCA2LCAxLCAyNDAsIDE1NCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjQwLCAxNTQsIDIsIDI0OCwgMSwgMzMsIDYsIAotICAgIDEsIDE0NCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMTQ0LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAyNTIsIDEzNCwgNzYsIDMzLCAKLSAgICA0LCAxLCAyNTIsIDEzNCwgNzYsIDMzLCA2LCAxLCAyNTIsIDEzNCwgMTQ0LCAyLCAyNDgsIDEsIDMzLCA0LCAxLCAyNTIsIAotICAgIDEzNCwgMTQ0LCAyLCAyNDgsIDEsIDMzLCA2LCAxLCAxNjAsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDE2MCwgMiwgMjQ4LCAxLCAKLSAgICAzMywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMiwgMzMsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzIsIDMzLCA2LCAxLCAxMDQsIDIsIAotICAgIDI0OCwgMSwgMzMsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgMTA0LCAyLCA1MiwgMTQyLCAzMywgNCwgMSwgCi0gICAgMTA0LCAyLCA1MiwgMTQyLCAzMywgNiwgMSwgMjUwLCAxMzIsIDIsIDI0OCwgMSwgMzMsIDQsIDEsIDI1MCwgMTMyLCAyLCAKLSAgICAyNDgsIDEsIDMzLCA2LCAxLCAyNDIsIDIzNywgMiwgMjQ4LCAzOSwgMzMsIDQsIDEsIDI0MiwgMjM3LCAyLCAyNDgsIDM5LCAKLSAgICAzMywgNiwgMSwgMjExLCAyOCwgMiwgMjQ4LCAxLCAzMywgNCwgMSwgMjExLCAyOCwgMiwgMjQ4LCAxLCAzMywgNiwgMSwgCi0gICAgMjQyLCAyMzcsIDIsIDIxOCwgMTAzLCAyMiwgMTAzLCAzMywgNCwgMSwgMjQyLCAyMzcsIDIsIDIxOCwgMTAzLCAyMiwgMTAzLCAKLSAgICAzMywgNiwgMSwgMjQyLCA0OSwgMiwgMTAzLCAzMywgNCwgMSwgMjQyLCA0OSwgMiwgMTAzLCAzMywgNiwgMSwgMjQyLCA0OSwgCi0gICAgMiwgOTEsIDMzLCA0LCAxLCAyNDIsIDQ5LCAyLCA5MSwgMzMsIDYsIDEsIDIzNCwgMTQsIDI0OCwgOTAsIDMzLCA0LCAxLCAKLSAgICAyMzQsIDE0LCAyNDgsIDkwLCAzMywgNiwgMSwgMjM0LCAxNCwgMjQ3LCAxNjIsIDMzLCA0LCAxLCAyMzQsIDE0LCAyNDcsIAotICAgIDE2MiwgMzMsIDYsIDEsIDIzNCwgMTQsIDIxMCwgMjcsIDMzLCA0LCAxLCAyMzQsIDE0LCAyMTAsIDI3LCAzMywgNiwgMSwgCi0gICAgMjM0LCAxNCwgMjQ2LCAzMCwgMzMsIDQsIDEsIDIzNCwgMTQsIDI0NiwgMzAsIDMzLCA2LCAxLCAyMzQsIDE0LCAyMzIsIAotICAgIDE4NywgMzMsIDQsIDEsIDIzNCwgMTQsIDIzMiwgMTg3LCAzMywgNiwgMSwgMjM0LCAxNCwgMjI4LCAxNzgsIDMzLCA0LCAxLCAKLSAgICAyMzQsIDE0LCAyMjgsIDE3OCwgMzMsIDYsIDEsIDIzNCwgMTQsIDIxOSwgMTA5LCAzMywgNCwgMSwgMjM0LCAxNCwgMjE5LCAKLSAgICAxMDksIDMzLCA2LCAxLCAyMzQsIDE0LCAyMTYsIDYwLCAzMywgNCwgMSwgMjM0LCAxNCwgMjE2LCA2MCwgMzMsIDYsIDEsIAotICAgIDIyMywgNDksIDIxMCwgOTQsIDMzLCA0LCAxLCAyMjMsIDQ5LCAyMTAsIDk0LCAzMywgNiwgMSwgMjQ1LCAxNzUsIDIsIDEwMywgCi0gICAgMzMsIDQsIDEsIDI0NSwgMTc1LCAyLCAxMDMsIDMzLCA2LCAxLCAyMzIsIDI1NCwgMzMsIDQsIDEsIDIzMiwgMjU0LCAzMywgCi0gICAgNiwgMSwgMjIzLCAzOSwgMzMsIDQsIDEsIDIyMywgMzksIDMzLCA2LCAxLCAyMTEsIDkyLCAzMywgNCwgMSwgMjExLCA5MiwgCi0gICAgMzMsIDYsIDEsIDIyNCwgODgsIDMzLCA0LCAxLCAyMjQsIDg4LCAzMywgNiwgMSwgMjEyLCAyMiwgMzMsIDQsIDEsIDIxMiwgCi0gICAgMjIsIDMzLCA2LCAxLCAyNTQsIDE2NiwgMTc2LCAzMywgNCwgMSwgMjU0LCAxNjYsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTc1LCAKLSAgICAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNzUsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAyNDUsIAotICAgIDE1MSwgMiwgMjMwLCAyMjQsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTUxLCAyLCAyMzAsIDIyNCwgMTAzLCAzMywgNiwgMSwgCi0gICAgMjI1LCAyMjIsIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMjUsIDIyMiwgMiwgMjQ4LCAzOSwgMzMsIDYsIDEsIDIyMCwgMzQsIAotICAgIDIsIDI0OCwgMzksIDMzLCA0LCAxLCAyMjAsIDM0LCAyLCAyNDgsIDM5LCAxNTAsIDYsIDEsIDI1MywgMTY0LCAxNTAsIDYsIAotICAgIDEsIDI1MiwgMzksIDE1MCwgNiwgMSwgMjQyLCAyMDMsIDE1MCwgNiwgMSwgMjQ4LCAyMjEsIDE1MCwgNiwgMSwgMjQ1LCAKLSAgICAyMTMsIDE1MCwgNiwgMSwgMjEwLCAxMTYsIDE1MCwgNiwgMSwgMjQ1LCAxOTcsIDE1MCwgNiwgMSwgMjQ1LCA2NSwgMTUwLCAKLSAgICA2LCAxLCAxMTEsIDE1MCwgNiwgMSwgMjEwLCA3NCwgMTUwLCA2LCAxLCAyMzUsIDIyNywgMTUwLCA2LCAxLCAyMzIsIDE5MCwgCi0gICAgMTUwLCA2LCAxLCAyMTEsIDE2MCwgMTUwLCA2LCAxLCAyNTEsIDMzLCAxNTAsIDYsIDEsIDIzNCwgMTY1LCAxNTAsIDYsIDEsIAotICAgIDI0MSwgNjgsIDE1MCwgNiwgMSwgMjM1LCAxNDEsIDE1MCwgNiwgMSwgMjQyLCAyNDYsIDE1MCwgNiwgMSwgMjUwLCAxMjYsIAotICAgIDE1MCwgNiwgMSwgMjMxLCA1OCwgMTUwLCA2LCAxLCAyMTEsIDgsIDE1MCwgNiwgMSwgMjI4LCAzOSwgMTUwLCA2LCAxLCAKLSAgICAyMjAsIDEwMiwgMTUwLCA2LCAxLCAyMTMsIDEzOCwgMTUwLCA2LCAxLCAyNTAsIDE1NywgMTUwLCA2LCAxLCAyMjUsIDIwNSwgCi0gICAgMTUwLCA2LCAxLCAyMzUsIDExMCwgMTUwLCA2LCAxLCAyMDUsIDE1MCwgNiwgMSwgMjIxLCAxNjEsIDE1MCwgNiwgMSwgMjEzLCAKLSAgICAxNzksIDE1MCwgNiwgMSwgMjE2LCA2MiwgMTUwLCA2LCAxLCAyMjMsIDk1LCAxNTAsIDYsIDEsIDI0OSwgMjM4LCAxNTAsIDYsIAotICAgIDEsIDIxMCwgMjQ5LCAxNTAsIDYsIDEsIDIyNSwgNDYsIDE1MCwgNiwgMSwgMjM0LCAxNzYsIDE1MCwgNiwgMSwgMjI2LCAKLSAgICAyMjIsIDE1MCwgNiwgMSwgMjQ0LCAxNDIsIDE1MCwgNTgsIDEsIDQzLCAxNjMsIDIyMiwgMjMzLCAxNTAsIDI1NCwgNTcsIAotICAgIDE1MCwgMjQ1LCAxNTQsIDc4LCAxNTAsIDI0NSwgMzEsIDc4LCAxNTAsIDI0OSwgMjE5LCAxNTAsIDIyNCwgMTMsIDc4LCAKLSAgICAxNTAsIDI1NSwgMjEsIDc4LCAxNTAsIDQsIDEsIDI1MywgMTY0LCAxNTAsIDQsIDEsIDI1MiwgMzksIDE1MCwgNCwgMSwgCi0gICAgMjQyLCAyMDMsIDE1MCwgNCwgMSwgMjQ4LCAyMjEsIDE1MCwgNCwgMSwgMjQ1LCAyMTMsIDE1MCwgNCwgMSwgMjEwLCAxMTYsIAotICAgIDE1MCwgNCwgMSwgMjQ1LCAxOTcsIDE1MCwgNCwgMSwgMjQ1LCA2NSwgMTUwLCA0LCAxLCAxMTEsIDE1MCwgNCwgMSwgMjEwLCAKLSAgICA3NCwgMTUwLCA0LCAxLCAyMzUsIDIyNywgMTUwLCA0LCAxLCAyMzIsIDE5MCwgMTUwLCA0LCAxLCAyMTEsIDE2MCwgMTUwLCAKLSAgICA0LCAxLCAyNTEsIDMzLCAxNTAsIDQsIDEsIDIzNCwgMTY1LCAxNTAsIDQsIDEsIDI0MSwgNjgsIDE1MCwgNCwgMSwgMjM1LCAKLSAgICAxNDEsIDE1MCwgNCwgMSwgMjQyLCAyNDYsIDE1MCwgNCwgMSwgMjUwLCAxMjYsIDE1MCwgNCwgMSwgMjMxLCA1OCwgMTUwLCAKLSAgICA0LCAxLCAyMTEsIDgsIDE1MCwgNCwgMSwgMjI4LCAzOSwgMTUwLCA0LCAxLCAyMjAsIDEwMiwgMTUwLCA0LCAxLCAyMTMsIAotICAgIDEzOCwgMTUwLCA0LCAxLCAyNTAsIDE1NywgMTUwLCA0LCAxLCAyMjUsIDIwNSwgMTUwLCA0LCAxLCAyMzUsIDExMCwgMTUwLCAKLSAgICA0LCAxLCAyMDUsIDE1MCwgNCwgMSwgMjIxLCAxNjEsIDE1MCwgNCwgMSwgMjEzLCAxNzksIDE1MCwgNCwgMSwgMjE2LCA2MiwgCi0gICAgMTUwLCA0LCAxLCAyMjMsIDk1LCAxNTAsIDQsIDEsIDI0OSwgMjM4LCAxNTAsIDQsIDEsIDIxMCwgMjQ5LCAxNTAsIDQsIDEsIAotICAgIDIyNSwgNDYsIDE1MCwgNCwgMSwgMjM0LCAxNzYsIDE1MCwgNCwgMSwgMjI2LCAyMjIsIDE1MCwgNCwgMSwgMjQ0LCAxNDIsIAotICAgIDE1MCwgNCwgMjcsIDI0NSwgMjE0LCAyMTAsIDI0OSwgMTUwLCAyNDMsIDIyOSwgMjE4LCAxMjksIDE1MCwgMjQwLCAxNjgsIAotICAgIDE1MCwgMjQ2LCA5NSwgNTAsIDk0LCAyNTUsIDE1LCAyNDUsIDU3LCA5NCwgMjU1LCAxNSwgMjIxLCAxNjIsIDk0LCAyNTUsIAotICAgIDE1LCAyMjAsIDg4LCA5NCwgMjU1LCAxNSwgMjEwLCAxMDQsIDIyNCwgNzEsIDk0LCAyNTUsIDE1LCAyMTAsIDEwNCwgMjQzLCAKLSAgICAxMjUsIDk0LCAyNTUsIDE1LCAyMTYsIDc1LCA5NCwgMjU1LCAxNSwgMjIzLCA0NywgOTQsIDI1NSwgMTUsIDIxMCwgMTAzLCAKLSAgICA5NCwgMjU1LCAxNSwgMjI1LCAyNDUsIDk0LCAyNTUsIDE1LCAyMTEsIDIwLCA5NCwgMjU1LCAxNSwgMjE2LCAyMTQsIDk0LCAKLSAgICAyNTUsIDE1LCAyNDMsIDQxLCA5NCwgMjU1LCAxNSwgMjQzLCA0MiwgMjMwLCA2OSwgOTQsIDI1NSwgMTUsIDI0MywgMzksIAotICAgIDk0LCAyNTUsIDE1LCAyMjQsIDcyLCAyMjYsIDE2LCA5NCwgMjU1LCAxNSwgMjE2LCAyNTMsIDI0MywgNTYsIDk0LCAyNTUsIAotICAgIDE1LCAyMjUsIDIyNiwgOTQsIDI1NSwgMTUsIDI1MywgMjAwLCAyNDIsIDQxLCA5NCwgMjU1LCAxNSwgMjMwLCA3OSwgOTQsIAotICAgIDI1NSwgMTUsIDIzMSwgMjA4LCA5NCwgMjU1LCAxNSwgMjMxLCA0OSwgOTQsIDI1NSwgMTUsIDIzMSwgNTAsIDIzNCwgMTc3LCAKLSAgICA5NCwgMjU1LCAxNSwgMjQ4LCAxNjMsIDk0LCAyNTUsIDE1LCAyMjQsIDgzLCA5NCwgMjU1LCAxNSwgMjE2LCAyNTMsIDIyNCwgCi0gICAgNjcsIDk0LCAyNTUsIDE1LCAyMTEsIDMwLCAyNTIsIDQwLCAyMTAsIDIzMCwgOTQsIDI1NSwgMTUsIDIyNiwgMjA3LCA5NCwgCi0gICAgMjU1LCAxNSwgMjM2LCAxOSwgOTQsIDI1NSwgMTUsIDI0OCwgNzAsIDk0LCAyNTUsIDE1LCAyMTAsIDMzLCA5NCwgMTY0LCAKLSAgICAyMzEsIDE0MywgMjUwLCAzNSwgOTQsIDIyNSwgMTEsIDIyMCwgMzYsIDk0LCAyMjUsIDExLCAyNDEsIDI1MCwgMjIxLCAxNjIsIAotICAgIDk0LCAyMjUsIDExLCAyNDEsIDI1MCwgMjI1LCAyMzksIDk0LCAyMjUsIDExLCAyNDEsIDI1MCwgMjI0LCA3NiwgOTQsIDIyNSwgCi0gICAgMTEsIDI0MSwgMTU4LCA5NCwgMjI1LCAxMSwgMjE1LCAxNzYsIDk0LCAyMjUsIDExLCAyMjEsIDE2MiwgOTQsIDIyNSwgMTEsIAotICAgIDIyNSwgMjM5LCA5NCwgMjI1LCAxMSwgMjI0LCA3NiwgOTQsIDIyNSwgMTEsIDI0MSwgNjEsIDk0LCAyMjUsIDExLCAyNDEsIAotICAgIDYyLCAyNDEsIDI1MiwgMzEsIDIxNCwgMywgOTQsIDIyNSwgMTEsIDIyNCwgMTcsIDk0LCAyMjUsIDExLCAyNDgsIDIwOCwgCi0gICAgMTc3LCAyMzEsIDE3MSwgOTQsIDIyNSwgMTEsIDIzMSwgMzgsIDk0LCAyMjQsIDE0MSwgMjMxLCAxNjgsIDk0LCAyMjUsIDExLCAKLSAgICAyMjMsIDE2OSwgOTQsIDIyNCwgMTQxLCAyMjUsIDI0NywgOTQsIDIyNSwgMTEsIDIyMCwgMjEsIDI0NywgMTIwLCA5NCwgCi0gICAgMjI1LCAxMSwgMjE5LCAxNTksIDI0NywgMTIwLCA5NCwgMjI0LCAxNDEsIDIxOSwgNTMsIDIyNSwgMjQxLCA5NCwgMTY0LCAKLSAgICAyMTQsIDE2MCwgMjQ3LCAxMjAsIDk0LCAxNjQsIDIzMiwgMTA4LCAyNDcsIDEyMCwgOTQsIDIyNCwgMTQxLCAyMjcsIDE5NSwgCi0gICAgMjQyLCA0MCwgOTQsIDIyNSwgMTEsIDIyNCwgNzcsIDIyNCwgNzEsIDk0LCAxLCAyNTQsIDE3MCwgOTQsIDEsIDI1MiwgMjgsIAotICAgIDk0LCAxLCAyNDIsIDIwMSwgOTQsIDEsIDI0OCwgMTg5LCA5NCwgMSwgMjQxLCAyMzgsIDk0LCAxLCAyMTQsIDMsIDk0LCAxLCAKLSAgICAyMTAsIDk3LCA5NCwgMSwgMjQxLCAxOTcsIDk0LCAxLCAyMTYsIDIzMCwgOTQsIDEsIDIxMCwgMjMzLCA5NCwgMSwgNDAsIAotICAgIDIzNCwgMjUwLCA5NCwgMSwgMjM0LCAyNTAsIDk0LCAxLCAyMzMsIDk0LCA5NCwgMSwgNDAsIDIzMSwgNjUsIDk0LCAxLCAKLSAgICAyMzEsIDY1LCA5NCwgMSwgNDAsIDIyNywgMTk0LCA5NCwgMSwgMjI3LCAxOTQsIDk0LCAxLCAyMjEsIDI0OSwgOTQsIDEsIAotICAgIDI1MywgMTYyLCA5NCwgMSwgNDAsIDIyNSwgMjIxLCA5NCwgMSwgMjI1LCAyMjEsIDk0LCAxLCA0MCwgMjE1LCAxNzksIDk0LCAKLSAgICAxLCAyMTUsIDE3OSwgOTQsIDEsIDIyNCwgMzksIDk0LCAxLCAyMjMsIDY3LCA5NCwgMSwgMjIwLCAyMCwgOTQsIDEsIDIxNywgCi0gICAgMzgsIDk0LCAyNywgMjExLCA2LCA1MiwgMjE0LCAzLCA5NCwgMjcsIDIxMSwgNiwgMjE0LCA0LCAyMTAsIDIzMywgOTQsIDI3LCAKLSAgICAyMTEsIDYsIDUyLCAyMTAsIDIzMywgOTQsIDIyNCwgMTQxLCAyNDMsIDQxLCA5NCwgMjI0LCAxNDEsIDI0MywgMzksIDEwLCAKLSAgICA1NCwgNTAsIDEwLCA1LCAyMjEsIDI0MiwgMTAsIDI0NCwgMzAsIDIzMSwgMTU0LCAxMCwgNSwgMjIyLCAyMywgMTAsIDUsIAotICAgIDIyMSwgMjQ1LCAyNTQsIDM3LCAyNDksIDEwOSwgMjIyLCAxOTMsIDI1NCwgMzcsIDI0NCwgNCwgMjIyLCAxOTMsIDEwLCAKLSAgICAyMjMsIDEzNCwgMjU0LCAzNywgMjI1LCAxODMsIDIzMCwgMTkzLCA1MCwgMjU0LCAzNywgMjI1LCAxODMsIDIxNiwgMjQ4LCAKLSAgICAyMTYsIDE0OCwgNTAsIDI1NCwgMjIxLCA1MCwgMTAsIDI0OSwgMjE5LCAxMCwgMjQ4LCAxNTAsIDIyMCwgMTM3LCAxMCwgCi0gICAgMjI1LCAxMywgMjEzLCAyNDEsIDUwLCAxMCwgNSwgMjMwLCAxNzQsIDEwLCA1LCAyMjIsIDMsIDI1NCwgMTcyLCAyMTIsIDQ1LCAKLSAgICAxMCwgNSwgMjU0LCAxNzIsIDI1MywgMjIxLCAxMCwgNSwgMjIzLCAxNjcsIDI1NCwgMTcxLCAxMCwgNSwgMjIzLCAxNzUsIAotICAgIDI1NCwgMTUyLCAyNTQsIDEwNCwgMTAsIDUsIDIxNywgNzAsIDEwLCA0LCAxMjUsIDIxNywgODAsIDEwLCA0LCAxMjUsIDI3LCAKLSAgICAxMTIsIDIsIDIzMywgMTAzLCAyLCAyMTEsIDQzLCAxMCwgNCwgMTI1LCAyMTAsIDEwOCwgMTAsIDQsIDI0NCwgMTY1LCAxMCwgCi0gICAgNCwgMjQ4LCAxODQsIDEwLCA0LCAyMzQsIDIwNSwgMTAsIDIyMCwgMTUwLCAxMCwgMjE1LCAyMTEsIDU5LCAyMjQsIDE0MSwgCi0gICAgNzgsIDEwLCAyMjQsIDEzLCA3OCwgMTAsIDEsIDIzNCwgMjA5LCAyMTEsIDQzLCAxMCwgMSwgMjQyLCAxOSwgMTAsIDEsIAotICAgIDExMiwgMiwgMjMxLCAyMjgsIDQ4LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDQ4LCAxMCwgMSwgMjEyLCAzMSwgMiwgMjAyLCA0OCwgCi0gICAgMTAsIDEsIDExMiwgMiwgMjAyLCA1MSwgMTAsIDEsIDc5LCAyLCAyMDIsIDQ4LCAxMCwgMSwgMjU0LCAxNzAsIDEwLCAxLCAKLSAgICAyNTIsIDU0LCAxMCwgMSwgMjE3LCA4LCAyMzEsIDE2NCwgMTAsIDEsIDIxNywgNywgMTAsIDEsIDIxNiwgMTkyLCAxMCwgMSwgCi0gICAgMjM1LCAxMjMsIDEwLCAxLCAyNDIsIDM3LCAxMCwgMSwgMjM0LCAxMjksIDEwLCAxLCAyNDgsIDE5NSwgMTAsIDEsIDIxNiwgCi0gICAgMjAyLCAxMCwgMSwgMjIzLCA5NSwgMTAsIDEsIDIxMCwgMTA4LCAxMCwgMSwgMjIxLCAxNjYsIDEwLCAxLCAyMjAsIDU5LCAKLSAgICAxMCwgMSwgMjIyLCAyNiwgMTAsIDEsIDI0OCwgMjE2LCAxMCwgMSwgMjE3LCA4MCwgMTAsIDEsIDIxMCwgMTExLCAxMCwgMSwgCi0gICAgMjU0LCAxOTYsIDEwLCAxLCAyNDIsIDI0NCwgMTAsIDEsIDIzNCwgMTc1LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyMzQsIAotICAgIDE3NSwgMiwgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAyMzUsIDE5MywgMjE0LCAxMDUsIDEwLCAxLCAKLSAgICAyNDQsIDE2OCwgNzksIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgCi0gICAgMjE3LCA0MywgMTAsIDEsIDI0NCwgMTQyLCAxMCwgMSwgMjI0LCA4MSwgMTAsIDEsIDIzNCwgMjUwLCAxMCwgMSwgMjMzLCAKLSAgICAxMDIsIDEwLCAxLCAyMzEsIDc4LCAxMCwgMSwgMjI4LCA2MiwgMTAsIDEsIDI0MSwgMjE4LCAxMCwgMSwgMjEyLCAzMCwgMTAsIAotICAgIDEsIDExMiwgMjMxLCAxOTIsIDEwLCAxLCAyMTEsIDQzLCAxMCwgMjQ0LCAxNjMsIDEwLCAyNDgsIDE4MiwgMTAsIDIzNCwgCi0gICAgMjAzLCAxMCwgMjQ0LCAxNjUsIDEwLCAyNDgsIDE4NCwgMTAsIDIzNCwgMjA1LCAxMCwgMjIwLCA5MywgMTAsIDIxOCwgNDUsIAotICAgIDEwLCAyMzEsIDIyNiwgNDgsIDEwLCAyMDIsIDQ4LCAxMCwgMjAyLCA1MSwgMTAsIDIxOCwgNjUsIDI1NCwgMTcwLCAxMCwgCi0gICAgMjM1LCAxOTMsIDI0OCwgMTg0LCAxMCwgMTY0LCAyMjgsIDYzLCAyNDIsIDIxOCwgMTAsIDIwOSwgMjU1LCAxMCwgMjUsIDUsIAotICAgIDQsIDIxNCwgMTA2LCA0OCwgMTAsIDI1LCA1LCAyMzUsIDE5MywgNCwgMjE0LCAxMDYsIDQ4LCAxMCwgMjUsIDUsIDU5LCA1MSwgCi0gICAgMTAsIDIyMywgNDksIDI0OCwgMTg0LCAxMCwgMjQ0LCAxNjYsIDIsIDExMywgMjQ3LCAxMTgsIDEwLCAyMTIsIDMyLCAyMDIsIAotICAgIDUxLCAyNTQsIDM3LCAyMSwgMjEwLCA4NiwgMjU0LCAzNywgMjEsIDExMCwgMjU0LCAzNywgMjEsIDEwNSwgMjU0LCAzNywgCi0gICAgMjEsIDE1OCwgMjU0LCAzNywgMjEsIDE2MSwgMjU0LCAzNywgMjEsIDE4OSwgMjU0LCAzNywgMjEsIDE5NCwgMjU0LCAzNywgCi0gICAgMjEsIDE5OCwgMjU0LCAzNywgMjEsIDE5NSwgMjU0LCAzNywgMjEsIDIwMCwgMTAsIDIyNSwgMTgyLCA1MCwgMTAsIDI0OCwgCi0gICAgODMsIDIyMCwgMTM3LCAxMCwgMjE2LCAxNDYsIDIyMCwgMTM3LCAxMCwgMjQ0LCA4MSwgMjI1LCA5LCAyMTgsIDE1NiwgMTAsIAotICAgIDEsIDI0NywgMTE5LCAyNTIsIDU0LCAxMCwgMSwgMjQ3LCAxMTksIDIyNCwgODEsIDEwLCAxLCAyMTgsIDIzLCAyNTQsIDE3MCwgCi0gICAgMTAsIDEsIDExMiwgMjEyLCA0NiwgMTAsIDEsIDExMiwgMiwgMjEyLCAzMiwgMjAyLCA0OCwgMTAsIDEsIDExMiwgMiwgMjEyLCAKLSAgICAzMiwgMjAyLCA1MSwgMTAsIDEsIDEyNSwgMjQyLCAxOSwgMTAsIDEsIDEyNSwgMjAyLCAyNTQsIDE3MCwgMTAsIDEsIDEyNSwgCi0gICAgMjAyLCAyMTIsIDMwLCAxMCwgMSwgMTA0LCAyLCAyMDIsIDQ4LCAxMCwgMSwgMTI1LCAyMDIsIDIxMSwgNDMsIDEwLCAxLCAKLSAgICAyMTUsIDE0OCwgMTAsIDEsIDIxNSwgMTQ2LCAxMCwgMSwgMjUyLCA2NCwgMTAsIDEsIDIxNywgOCwgMiwgMjIyLCAyMzMsIAotICAgIDEwLCAxLCAyMTcsIDgsIDIsIDEzNCwgMTcwLCA3NywgMjQ2LCAxMDMsIDEwLCAxLCAyMjUsIDIwNSwgMTAsIDEsIDIxNywgNSwgCi0gICAgMTAsIDEsIDI1MiwgNTIsIDEwLCAxLCAxMjIsIDIsIDIwMiwgNDgsIDEwLCAxLCAxMjIsIDIsIDExMywgMTcwLCA2NywgNDgsIAotICAgIDEwLCAxLCAyMjcsIDE1MywgMTAsIDEsIDI0NiwgNDMsIDEwLCAxLCAxMjIsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIxNywgCi0gICAgMjYsIDEwLCAxLCAyMTcsIDI0LCAxMCwgMSwgMjQ4LCAxMzAsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMjIyLCAyMzMsIDEwLCAxLCAKLSAgICAyNDgsIDE5NiwgMiwgNTksIDUxLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDU5LCAyNTIsIDQzLCAyMiwgNCwgMjE3LCA4MCwgMTAsIAotICAgIDEsIDI0OCwgMjAxLCAxMCwgMSwgMjQ4LCAxMzIsIDEwLCAxLCAyNDYsIDcwLCAxMCwgMSwgMjQ4LCAxOTYsIDIsIDEzNCwgCi0gICAgMTcwLCA3NywgMjQ2LCAxMDMsIDEwLCAxLCAyNDgsIDE5NiwgMiwgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIDEsIDIyMiwgMTcxLCAKLSAgICAxMCwgMSwgMjIzLCA5NiwgMiwgNCwgMjE0LCAxMDUsIDEwLCAxLCAyMjMsIDk2LCAyLCAyMjIsIDIzMywgMTAsIDEsIDIyMywgCi0gICAgOTYsIDIsIDU5LCA1MSwgMTAsIDEsIDIyMywgOTYsIDIsIDQsIDIxNCwgMTA2LCA1MSwgMTAsIDEsIDIyMywgOTYsIDIsIDU5LCAKLSAgICAyNTIsIDQzLCAyMiwgNTksIDQ4LCAxMCwgMSwgMjIzLCA5NiwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjM1LCAxMjAsIAotICAgIDEwLCAxLCAyMjMsIDk2LCAyLCAyNDQsIDExLCAxNzAsIDQ4LCAxMCwgMSwgMjIxLCAxNjcsIDIsIDU5LCAyNTIsIDQzLCAyMiwgCi0gICAgNTksIDQ4LCAxMCwgMSwgMjIxLCAxNjcsIDIsIDEzNCwgMTcwLCA1MSwgMTAsIDEsIDIyMSwgMTY3LCAyLCAxMzQsIDE3MCwgCi0gICAgMjUyLCA0MywgMjIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIyMiwgMjcsIDIsIDExMywgMTcwLCA1MSwgMTAsIDEsIDIyMiwgCi0gICAgMjcsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIxNywgODEsIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAKLSAgICAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyNDcsIDExOSwgMjQ0LCAxNDIsIDEwLCAxLCAyNDQsIDE0MywgMiwgNTksIDIzMCwgCi0gICAgMTA5LCA1MSwgMTAsIDEsIDI0NCwgMTQzLCAyLCA1OSwgNTEsIDEwLCAxLCAyMTMsIDI0OCwgMTAsIDEsIDI0NCwgMTQzLCAyLCAKLSAgICAxMzQsIDE3MCwgNTEsIDEwLCAxLCAyMjUsIDIwMywgMTAsIDEsIDIyNCwgODIsIDIsIDU5LCA0OCwgMTAsIDEsIDIyNCwgODIsIAotICAgIDIsIDEzNCwgMTcwLCA0OCwgMTAsIDEsIDIzNCwgMTc0LCAxMCwgMSwgMjE3LCAyNTAsIDIzNCwgMjUwLCAxMCwgMSwgMjM0LCAKLSAgICAyNTEsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjM0LCAyNTEsIDIsIDU5LCA0OCwgMTAsIDEsIDIyOSwgNzksIDEwLCAxLCAyMzQsIAotICAgIDI1MSwgMiwgMTM0LCAxNzAsIDUxLCAxMCwgMSwgMjQzLCAxMjIsIDEwLCAxLCAyNDMsIDEyMywgMiwgMjIyLCAyMzMsIDEwLCAKLSAgICAxLCAyMjksIDIsIDEwLCAxLCAyNDMsIDEyMywgMiwgMTEzLCAxNzAsIDUxLCAxMCwgMSwgMjQyLCAxMDEsIDEwLCAxLCAyNDMsIAotICAgIDEyMywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjMzLCAxMDMsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMjMzLCAxMDMsIAotICAgIDIsIDU5LCA0OCwgMTAsIDEsIDIzMywgMTAzLCAyLCAxMzQsIDE3MCwgNDgsIDEwLCAxLCAyMzMsIDEwMywgMiwgMTM0LCAKLSAgICAxNzAsIDUxLCAxMCwgMSwgMjI4LCA2MywgMiwgNTksIDUxLCAxMCwgMSwgMjI4LCA2MywgMjQyLCAyMTgsIDEwLCAxLCAyMjIsIAotICAgIDIxNCwgMTAsIDEsIDIyOCwgNjMsIDIsIDIyMiwgMjMzLCAxMCwgMSwgMjI4LCA2MywgMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0NywgMTQxLCAxMCwgMSwgMjE3LCAyNywgMiwgNTksIDQ4LCAxMCwgMSwgMjQxLCAyMTksIDIsIDc5LCAKLSAgICA0OCwgMTAsIDEsIDI0MSwgMjE5LCAyNDIsIDE3MSwgMTAsIDEsIDI0MSwgMjE5LCAyNDIsIDE3MiwgMiwgMjAyLCA0OCwgMTAsIAotICAgIDEsIDIxNywgOCwgMjMxLCAxNjUsIDI0MiwgMTcxLCAxMCwgMSwgMjEyLCAzMSwgMiwgMjIyLCAyMzMsIDEwLCAxLCAyMzQsIAotICAgIDczLCAyMjYsIDIzNCwgMTAsIDEsIDIyNiwgMjM0LCAxMCwgMSwgNzAsIDEwLCAxLCAyMTAsIDIxMiwgMTAsIDEsIDIzNCwgCi0gICAgNzMsIDIxMCwgMjEyLCAxMCwgMSwgMjEyLCAzMSwgMiwgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMjEzLCAyNTUsIDEwLCAxLCAKLSAgICAyNDQsIDE2OCwgMjExLCA0MywgMTAsIDEsIDc5LCAyLCAyMTcsIDc3LCAxMCwgMSwgNzksIDIsIDQsIDIxNCwgMTA1LCAxMCwgCi0gICAgMSwgMjEyLCAzMSwgMiwgNTksIDQ4LCAxMCwgMSwgNzUsIDEwLCAxLCA3OSwgMiwgMTM0LCAxNzAsIDUxLCAxMCwgMSwgNzksIAotICAgIDI1MiwgMTMyLCAxMCwgMSwgNzksIDI1MiwgMTMzLCAyLCAyMDIsIDQ4LCAxMCwgMjQzLCAyMjksIDIxOCwgMTI5LCAxMCwgMSwgCi0gICAgMjU0LCAyNDMsIDEwLCA0LCAxMjUsIDI3LCAyMjIsIDI3LCAyLCAyMzMsIDEwMywgMiwgMTEyLCAyMzEsIDE5MiwgMTAsIDQsIAotICAgIDEyNSwgMjcsIDIyNCwgODIsIDIsIDIzMywgMTAzLCAyLCAxMTIsIDIzMSwgMTkyLCAxMCwgNCwgMTI1LCA2NiwgNjUsIDE3LCAKLSAgICAxMCwgNCwgMTI1LCAyMzMsIDEwMywgMjU0LCAxNzAsIDEwLCA0LCAxMjUsIDIzNSwgMTIzLCAxMCwgNCwgMTI1LCAxMzQsIAotICAgIDI0NywgMTE4LCAxMCwgNCwgMTI1LCAyMjEsIDE2NiwgMTAsIDI0NSwgMTQzLCA2NCwgMjUzLCAxNjYsIDEwLCAyMTgsIDE1MiwgCi0gICAgNjQsIDIyMiwgMTM4LCAyNDUsIDE3NSwgMjQxLCAxNTUsIDEwLCA0LCAxMjUsIDIyMiwgMTgzLCAyMTAsIDg2LCAxMCwgNCwgCi0gICAgMTI1LCAyMTQsIDE1OSwgMjIzLCAxMTUsIDIxMCwgODYsIDEwLCA0LCAxMjUsIDI0NywgMTE5LCAyNDEsIDIzNiwgNjQsIAotICAgIDIzNCwgMTI5LCAxMCwgNCwgMTI1LCA2NiwgNTMsIDE3LCAxMCwgNCwgMTIxLCAyMjEsIDE2NiwgMTAsIDQsIDEyNSwgMjMxLCAKLSAgICAyMjcsIDEwLCA0LCAyMTIsIDMwLCAxMCwgNCwgMjExLCA0MywgMTAsIDQsIDEyNSwgMjExLCA0MywgMTAsIDQsIDEyNSwgCi0gICAgMjI4LCA2MiwgMTAsIDIyNSwgNDEsIDY0LCAyMjIsIDEzLCAxMCwgMjQ1LCAxNTIsIDI1MCwgMTc1LCAxMjEsIDIxOCwgMTI5LCAKLSAgICAxMCwgMjQ1LCAxNTIsIDI1MCwgMTc1LCAxMjUsIDIxOCwgMTI5LCAxMCwgMjIyLCAxODMsIDEyNSwgMjE4LCAxMzAsIDIsIAotICAgIDI0NCwgMTA0LCAyNTAsIDE3NCwgMTAsIDQsIDEyMSwgMjMxLCA3OCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAyMzUsIDE5MywgCi0gICAgMjE0LCAxMDUsIDEwLCAxLCAyMjMsIDk2LCAyLCAyMzUsIDE5MywgMjE0LCAxMDUsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAKLSAgICAyMTAsIDg2LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTEwLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTA1LCAyNDUsIDIyLCAKLSAgICAyNTQsIDM3LCAyMSwgMTU4LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTYxLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTg5LCAKLSAgICAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTk0LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTk4LCAyNDUsIDIyLCAyNTQsIDM3LCAKLSAgICAyMSwgMTk1LCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMjAwLCAxMCwgMSwgMjIwLCA2MCwgMiwgNTksIDUxLCAxMCwgMSwgCi0gICAgMjQ4LCAyMTcsIDIsIDU5LCA1MSwgMTAsIDEsIDI0MiwgMjQ1LCAyLCA1OSwgNTEsIDEwLCA1LCAyMTksIDE1OCwgMjU0LCAKLSAgICAxMjYsIDEwLCA1LCAyMTksIDE1OCwgMjI0LCAyMzUsIDIzMSwgNTgsIDEwLCAxLCAyNDEsIDIxOSwgMiwgMjM1LCAxOTMsIAotICAgIDIxNCwgMTA1LCAxODgsIDI0NSwgMTQzLCA2NCwgMjI2LCAxNCwgMTg4LCAyMTgsIDE5LCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDE4OCwgMjE4LCA2NywgMjQzLCAyMjksIDIxOCwgMTI5LCAxODgsIDIxOCwgMTksIDI0OSwgMjI2LCAxODgsIDIxOCwgNjcsIAotICAgIDI0OSwgMjI2LCAxODgsIDIwMywgMjQ5LCAyMjYsIDE4OCwgMjQ5LCAyMjcsIDIxOSwgMTA2LCAyMzMsIDQ2LCAxODgsIDI0OSwgCi0gICAgMjI3LCAyMTksIDEwNiwgMjIyLCAyNTEsIDE4OCwgMjE4LCAxOSwgMjQ5LCAyMjcsIDIxOSwgMTA2LCAyMzMsIDQ2LCAxODgsIAotICAgIDIxOCwgNjcsIDI0OSwgMjI3LCAyMTksIDEwNiwgMjIyLCAyNTEsIDE4OCwgMjQ5LCAxODAsIDE4OCwgMjQyLCAxLCAyMjYsIAotICAgIDI1MCwgMTg4LCAyNDIsIDEsIDIzMSwgMzYsIDE4OCwgMjQyLCAxLCAyNTMsIDIxOCwgMTg4LCAyNTUsIDIxLCA3OCwgMTg4LCAKLSAgICAxLCAyNTQsIDE3NCwgMTg4LCAxLCAyMTgsIDIzLCAyNTQsIDE3NCwgMTg4LCAxLCAyNTIsIDI1LCAxODgsIDEsIDI0MywgCi0gICAgMTEzLCAxODgsIDEsIDI0MywgMTE0LCAyNDMsIDkxLCAxODgsIDEsIDI0OCwgMTkyLCAxODgsIDEsIDI0NywgMTE5LCAyNDgsIAotICAgIDE5MywgMjIyLCAyMjksIDE4OCwgMSwgMjQxLCAyMzgsIDE4OCwgMSwgMjEyLCAzMCwgMTg4LCAxLCAyMTAsIDEwOCwgMTg4LCAKLSAgICAxLCAyNDEsIDE5NSwgMTg4LCAxLCAyMTYsIDIyNiwgMTg4LCAxLCAyMTYsIDIyNywgMjQzLCA5MSwgMTg4LCAxLCAyMTAsIAotICAgIDE5OSwgMTg4LCAxLCAyMTAsIDIwMCwgMjQxLCAyMzgsIDE4OCwgMSwgMjM0LCAyMjUsIDE4OCwgMSwgMjMzLCAxMDEsIDE4OCwgCi0gICAgMSwgMjMwLCAxOTAsIDE4OCwgMSwgMjI3LCAxOTQsIDE4OCwgMSwgMjIwLCAxNDMsIDE4OCwgMSwgNDAsIDIyMCwgMTQzLCAKLSAgICAxODgsIDEsIDc1LCAxODgsIDEsIDIyNSwgMjIxLCAxODgsIDEsIDIyMywgNDksIDIyNSwgMjIxLCAxODgsIDEsIDIyMiwgMjQsIAotICAgIDE4OCwgMSwgMjI0LCA3NSwgMTg4LCAxLCAyMjIsIDIyOSwgMTg4LCAxLCAyMjAsIDIwLCAxODgsIDEsIDIxNywgMzYsIDE4OCwgCi0gICAgMSwgMjI1LCAxNjksIDI1MiwgMTIsIDE4OCwgMSwgMjI1LCAxNjksIDI0MiwgMjQyLCAxODgsIDEsIDIyNSwgMTY5LCAyNDgsIAotICAgIDIwLCAxODgsIDIyNCwgMTUxLCA0OCwgMTg4LCAyMjQsIDE1MSwgNTEsIDE4OCwgMjI0LCAxNTEsIDI0NiwgMTE3LCAxODgsIAotICAgIDIxMCwgMTcsIDQ4LCAxODgsIDIxMCwgMTcsIDUxLCAxODgsIDIxMCwgMTcsIDI0NiwgMTE3LCAxODgsIDIyMywgMTMxLCA0OCwgCi0gICAgMTg4LCAyMjMsIDEzMSwgNTEsIDE4OCwgMjQ2LCAxMTgsIDIxMCwgMjQsIDI0MSwgNDQsIDE4OCwgMjQ2LCAxMTgsIDIxMCwgCi0gICAgMjQsIDI1NCwgMTA1LCAxODgsIDI0MSwgMjQxLCA0OCwgMTg4LCAyNDEsIDI0MSwgNTEsIDE4OCwgMjQxLCAyNDAsIDI0NiwgCi0gICAgMTE3LCAxODgsIDI0NSwgNzksIDQ4LCAxODgsIDI0NSwgNzksIDUxLCAxODgsIDIyMiwgMTA3LCAxODgsIDI0NCwgMTM2LCAKLSAgICAyNDcsIDEyMCwgMTg4LCAyMjMsIDI0OCwgMTg4LCAyMjIsIDEzNCwgMTg4LCAxMTMsIDY3LCAxNzAsIDQ4LCAxODgsIDExMywgCi0gICAgNjcsIDE3MCwgNTEsIDE4OCwgMTM0LCAxNzAsIDQ4LCAxODgsIDEzNCwgMTcwLCA1MSwgMTg4LCAyMjYsIDI0OCwgMjMyLCAKLSAgICAyMTQsIDQ4LCAxODgsIDIyNiwgMjQ4LCAyMzIsIDIxNCwgNTEsIDE4OCwgMjMwLCA1NiwgMTg4LCAyNTIsIDEzMSwgMTg4LCAKLSAgICAxLCAyMTksIDQ5LCAyMTAsIDgwLCAxODgsIDEsIDIxOSwgNDksIDIzNCwgMTIyLCAxODgsIDEsIDIxOSwgNDksIDI0NCwgCi0gICAgMTU0LCAxMCwgMSwgMjUyLCA1NSwgMiwgMTM0LCAxNzAsIDI0MCwgMjUwLCA1MSwgMTAsIDEsIDI1MiwgNTUsIDIsIDU5LCAKLSAgICAyNTIsIDQzLCAyMiwgMTM0LCAxNzAsIDQ4LCAxMCwgMSwgMjUyLCA1NSwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIAotICAgIDUxLCAxMCwgMSwgMjUyLCA1NSwgMiwgMTM0LCAxNzAsIDIyNSwgNywgMjE0LCAxNTMsIDI1MiwgNDMsIDIyLCAxMTMsIDE3MCwgCi0gICAgNDgsIDEwLCAxLCAyNTIsIDU1LCAyLCAxMTMsIDE3MCwgMjUyLCA0MywgMjIsIDU5LCA0OCwgMTAsIDEsIDI1MiwgNTUsIDIsIAotICAgIDIzNSwgMTkzLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAyNTIsIDU1LCAyLCA0LCAyMTQsIDEwNSwgMTAsIDEsIDEyMiwgMiwgCi0gICAgMTEzLCAxNzAsIDQ4LCAxMCwgMSwgMTIyLCAyLCAxMzQsIDE3MCwgMjI1LCA3LCAyMTQsIDE1MywgNTEsIDEwLCAxLCAyNDgsIAotICAgIDE5NiwgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCAyNTIsIDQzLCAyMiwgNCwgMjE3LCA4MCwgMTAsIDEsIDI0OCwgMTk2LCAyLCAKLSAgICAyMzUsIDE5MywgNCwgMjE0LCAxMDYsIDUxLCAxMCwgMSwgMjIzLCA5NiwgMiwgOTEsIDEwLCAxLCAyMjEsIDE2NywgMiwgCi0gICAgMjQ0LCAxMSwgMTcwLCA0OCwgMTAsIDEsIDI1NCwgMTk3LCAyLCAxMTMsIDE3MCwgNDgsIDEwLCAxLCAyNTQsIDE5NywgMiwgCi0gICAgMTM0LCAxNzAsIDIyNSwgNywgMjQ2LCAxMDQsIDQ4LCAxMCwgMSwgMjU0LCAxOTcsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgCi0gICAgNDgsIDEwLCAxLCAyNDQsIDE0MywgMiwgMTEzLCAxNzAsIDUxLCAxMCwgMSwgMjQ0LCAxNDMsIDIsIDEzNCwgMTcwLCAyMjUsIAotICAgIDcsIDIxNCwgMTUzLCA1MSwgMTAsIDEsIDIzNCwgMTc1LCAyLCA1OSwgNDgsIDEwLCAxLCAyMzQsIDE3NSwgMiwgMTM0LCAKLSAgICAxNzAsIDQ4LCAxMCwgMSwgMjM0LCAxNzUsIDIsIDEzNCwgMTcwLCAyMjUsIDcsIDIxNCwgMTUzLCA1MSwgMTAsIDEsIDY2LCAKLSAgICAyLCA1OSwgNDgsIDEwLCAxLCA2NiwgMiwgNTksIDUxLCAxMCwgMSwgMjI4LCA2MywgMiwgMTEzLCAxNzAsIDUxLCAxMCwgMSwgCi0gICAgMjI4LCA2MywgMiwgNCwgMjE3LCA4MCwgMTAsIDEsIDIyOCwgNjMsIDIsIDQsIDIxNCwgMTA1LCAxMCwgMSwgMjMzLCAxMDMsIAotICAgIDIsIDEzMCwgMTAsIDEsIDIyMywgOTYsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDEwLCAxLCAyMjMsIDk2LCAyLCAKLSAgICAyMDIsIDQ4LCAxMCwgMSwgMjIxLCAxNjcsIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDEwLCAxLCAxMjIsIDIsIDQsIAotICAgIDEwLCAxLCAyMTcsIDgxLCA1MSwgMTAsIDEsIDEyMiwgMiwgNCwgMTAsIDEsIDIxNywgODEsIDIyLCAxMTMsIDI0NywgMTE4LCAKLSAgICAxMCwgMSwgMjIxLCAxNjcsIDIsIDQsIDEwLCAxLCAyMTcsIDgxLCAyMiwgMTEzLCAyNDcsIDExOCwgMTAsIDEsIDIyMywgOTYsIAotICAgIDIsIDQsIDEwLCAxLCAyMTcsIDgxLCAyMiwgMTEzLCAyNDcsIDExOCwgMTAsIDEsIDEyMiwgMiwgNCwgMTAsIDEsIDIxNywgCi0gICAgODEsIDQ4LCAxMCwgMSwgMTEyLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTEzLCA0OCwgMTAsIDEsIDExMiwgMiwgMjQ1LCAKLSAgICAyMiwgMjU0LCAzNywgMjEsIDEzNCwgNDgsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAKLSAgICAxMTMsIDQ4LCAxMCwgMSwgMjQ0LCAxNjgsIDc5LCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgMTM0LCA0OCwgMTAsIDEsIAotICAgIDI0NCwgMTY4LCA3OSwgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDI0NCwgMTEsIDUxLCAxMCwgMSwgMjEyLCAzMSwgMiwgCi0gICAgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMywgNDgsIDEwLCAxLCAyMTIsIDMxLCAyLCAyNDUsIDIyLCAyNTQsIDM3LCAyMSwgCi0gICAgMTM0LCA0OCwgMTAsIDEsIDc5LCAyNTIsIDEzMywgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDExMywgNDgsIDEwLCAxLCAKLSAgICA3OSwgMjUyLCAxMzMsIDIsIDI0NSwgMjIsIDI1NCwgMzcsIDIxLCAxMzQsIDQ4LCAxMCwgMSwgMTIyLCAyLCAyNDUsIDIyLCAKLSAgICAyNTQsIDM3LCAyMSwgMjQ0LCAxMSwgNTEsIDEwLCAxLCAyMjEsIDE2NywgMiwgMjQ1LCAyMiwgMjU0LCAzNywgMjEsIDI0NCwgCi0gICAgMTEsIDQ4LCAxMCwgMSwgMjIxLCAxNjcsIDIsIDIzNSwgMTkzLCAyMTQsIDEwNSwgMTAsIDEsIDIzNCwgMjUxLCAyLCAxMTMsIAotICAgIDE3MCwgNDgsIDIxNiwgMjA1LCAxLCAyNDIsIDQ2LCAyMTYsIDIwNSwgMSwgMjIwLCA2OCwgMjE2LCAyMDUsIDEsIDIyOCwgCi0gICAgNjEsIDIxNiwgMjA1LCAxLCAyMjMsIDE4NCwgMjE2LCAyMDUsIDEsIDI1MiwgMTg5LCAyMTYsIDIwNSwgMSwgMjMyLCAyNTEsIAotICAgIDIxNiwgMjA1LCAxLCAyMzUsIDgsIDIxNiwgMjA1LCAxLCAyNTQsIDE1OSwgMjE2LCAyMDUsIDEsIDIxNCwgMjUsIDIxNiwgCi0gICAgMjA1LCAxLCAyMzEsIDc3LCAyMTYsIDIwNSwgMSwgMjQ0LCAxOTQsIDIxNiwgMjA1LCAxLCAyNDgsIDIzLCAyMTYsIDIwNSwgCi0gICAgMSwgMjE2LCAyMDcsIDIxNiwgMjA1LCAxLCAyMzMsIDEzMSwgMjE2LCAyMDUsIDEsIDI0MywgMTMxLCAyMTYsIDIwNSwgMSwgCi0gICAgMjQyLCAxNzcsIDIxNiwgMjA1LCAxLCAyMjEsIDE2NSwgMjE2LCAyMDUsIDEsIDI0OCwgMTQ4LCAyMTYsIDIwNSwgMSwgMjEwLCAKLSAgICAxMDAsIDIxNiwgMjA1LCAxLCAyMTcsIDM3LCAyMTYsIDIwNSwgMSwgMjExLCAxMDMsIDIxNiwgMjA1LCAxLCAyMjUsIDIzMywgCi0gICAgMjE2LCAyMDUsIDEsIDIzNSwgMTI4LCAyMTYsIDIwNSwgMSwgMjUwLCAxMzQsIDIxNiwgMjA1LCAxLCAyMTUsIDE1NSwgMjE2LCAKLSAgICAyMDUsIDEsIDI0MSwgMTg4LCAyMTYsIDIwNSwgMSwgMjM0LCAxMzEsIDIxNiwgMjA1LCAxLCAyMTYsIDIwNiwgMjE2LCAyMDUsIAotICAgIDEsIDIxMCwgMTE1LCAyMTYsIDIwNSwgMSwgMjIwLCA1OCwgMjE2LCAyMDUsIDEsIDIyMiwgMzAsIDIxNiwgMjA1LCAxLCAKLSAgICAyNDgsIDIxOSwgMjE2LCAyMDUsIDEsIDExMSwgMjE2LCAyMDUsIDEsIDIxMCwgMjMsIDIxNiwgMjA1LCAxLCAyNTQsIDE5MywgCi0gICAgMjE2LCAyMDUsIDEsIDI0MiwgMjQzLCAyMTYsIDIwNSwgMSwgMjI0LCA4NSwgMjE2LCAyMDUsIDEsIDIxMiwgNjMsIDIxNiwgCi0gICAgMjA1LCAyNTUsIDIyLCAyMTYsIDIwNSwgMjU1LCAzOCwgMjE2LCAyMDUsIDI0MCwgMTE0LCAyMTYsIDIwNSwgMjQ1LCAyMDgsIAotICAgIDIxNiwgMjA1LCAyMTQsIDIyMiwgMjE2LCAyMDUsIDIyNiwgMTgyLCAyMTYsIDIwNSwgMjQ1LCAyMTYsIDIxNiwgMjA1LCAKLSAgICAyNDUsIDE2LCAyMTYsIDIwNSwgMjI2LCAyNDcsIDIxNiwgMjA1LCAyMjYsIDI1NSwgMjE2LCAyMDUsIDIxOCwgNDUsIDIxNiwgCi0gICAgMjA1LCAxLCAyMjksIDIyNSwgMjI4LCAxMzcsIDIxLCAyMTAsIDg2LCAyMjgsIDEzNywgMjEsIDExMCwgMjI4LCAxMzcsIDIxLCAKLSAgICAxMDUsIDIyOCwgMTM3LCAyMSwgMTU4LCAyMjgsIDEzNywgMjEsIDE2MSwgMjI4LCAxMzcsIDIxLCAxODksIDIyOCwgMTM3LCAKLSAgICAyMSwgMTk0LCAyMjgsIDEzNywgMjEsIDE5OCwgMjI4LCAxMzcsIDIxLCAxOTUsIDIyOCwgMTM3LCAyMSwgMjAwLCAyMjgsIAotICAgIDEzNywgMSwgNjEsIDIyOCwgMTM3LCAxLCAyNDUsIDIwOSwgMjI4LCAxMzcsIDEsIDczLCAyMjgsIDEzNywgMSwgNzUsIDIyOCwgCi0gICAgMTM3LCAxLCA3MCwgMjI4LCAxMzcsIDEsIDIyNiwgMTgzLCAyMjgsIDEzNywgMSwgNzYsIDIyOCwgMTM3LCAxLCAyNDgsIAotICAgIDIwOSwgMjI4LCAxMzcsIDEsIDIzMCwgMjUsIDIyOCwgMTM3LCAxLCAyNTIsIDE5MSwgMjI4LCAxMzcsIDEsIDE5MCwgMjI4LCAKLSAgICAxMzcsIDEsIDIxNywgMTA1LCAyMjgsIDEzNywgMSwgMjM1LCAxNDEsIDIyOCwgMTM3LCAxLCAyNTAsIDE1NywgMjI4LCAxMzcsIAotICAgIDEsIDI0OCwgMjIxLCAyMjgsIDEzNywgMSwgMjA1LCAyMjgsIDEzNywgMSwgMjIyLCAxNzksIDIyOCwgMTM3LCAxLCAyMDYsIAotICAgIDIyOCwgMTM3LCAxLCAyNDMsIDc5LCAyMjgsIDEzNywgMSwgMjQ0LCAxOTYsIDIyOCwgMTM3LCAxLCAxNzYsIDIyOCwgMTM3LCAKLSAgICAxLCAyMzMsIDEzNSwgMjI4LCAxMzcsIDEsIDIyOSwgMjI5LCAyMTEsIDIyMywgMjI4LCAxMzcsIDEsIDE4NCwgMjI4LCAxMzcsIAotICAgIDEsIDIyNywgMTY1LCAyMjgsIDEzNywgMSwgMTk3LCAyMjgsIDEzNywgMSwgMTYyLCAyMjgsIDEzNywgMSwgMjEyLCA2NSwgCi0gICAgMjI4LCAxMzcsIDEsIDE5MSwgMjI4LCAxMzcsIDEsIDIyNywgMTY2LCAyMTEsIDIyMywgMjI4LCAxMzcsIDEsIDIzNSwgNjEsIAotICAgIDIzNSwgMTQxLCAyMjgsIDEzNywgMSwgMjM1LCA2MSwgMjUwLCAxNTcsIDIyOCwgMTM3LCAxLCAyMzUsIDYxLCAyMDUsIDIyOCwgCi0gICAgMTM3LCAzOCwgMjE5LCAyNTEsIDEyNSwgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAyMTksIDI1MSwgMTIxLCAyMTYsIDMwLCAKLSAgICAyMjgsIDEzNywgMzgsIDIxOSwgMjUxLCAyMjIsIDIyOCwgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAxOTksIDI0OCwgMzgsIAotICAgIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAxMjUsIDIxNiwgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAxMjEsIDIxNiwgCi0gICAgMzAsIDIyOCwgMTM3LCAzOCwgMTk5LCAyMjIsIDIyOCwgMjE2LCAzMCwgMjI4LCAxMzcsIDM4LCAyMjksIDE5MywgNzgsIAotICAgIDIyOCwgMTM3LCAzOCwgNTIsIDU5LCA0OCwgMjI4LCAxMzcsIDEyNSwgMTM4LCAyNTQsIDU3LCAyMjgsIDEzNywgMTIxLCAKLSAgICAxMzgsIDI1NCwgNTcsIDIyOCwgMTM3LCAxNiwgMjI2LCAxODQsIDI0OCwgNTAsIDIyOCwgMTM3LCAxNiwgMjQzLCA3OCwgCi0gICAgMjI4LCAxMzcsIDI0OSwgMjE5LCAyMjgsIDEzNywgMjQ1LCAzMSwgNzgsIDIyOCwgMTM3LCAyMzMsIDEwOCwgMjIxLCAyNTIsIAotICAgIDEsIDI1NCwgMTc2LCAyMjEsIDI1MiwgMSwgMjUxLCAyMjgsIDIyMSwgMjUyLCAxLCAyNDMsIDExMiwgMjIxLCAyNTIsIDEsIAotICAgIDI0OCwgMTk0LCAyMjEsIDI1MiwgMSwgMjM1LCAxNTIsIDIyMSwgMjUyLCAxLCAyNTIsIDE4OSwgMjIxLCAyNTIsIDEsIDIxMCwgCi0gICAgODksIDIyMSwgMjUyLCAxLCAyMzUsIDE2MCwgMjIxLCAyNTIsIDEsIDIxNiwgNjcsIDIyMSwgMjUyLCAxLCAyMTAsIDE4MiwgCi0gICAgMjIxLCAyNTIsIDEsIDIzNSwgOSwgMjIxLCAyNTIsIDEsIDIzMywgMTI4LCAyMjEsIDI1MiwgMSwgMjMwLCAxOTAsIDIyMSwgCi0gICAgMjUyLCAxLCAyMjcsIDE5NCwgMjIxLCAyNTIsIDEsIDIxOSwgMTU2LCAyMjEsIDI1MiwgMSwgMjM1LCAyNTUsIDIyMSwgMjUyLCAKLSAgICAxLCAyNDQsIDEyMSwgMjIxLCAyNTIsIDEsIDIxNSwgMTgxLCAyMjEsIDI1MiwgMSwgMjI0LCAxMCwgMjIxLCAyNTIsIDEsIAotICAgIDIyMiwgMjI5LCAyMjEsIDI1MiwgMSwgMjIwLCA4NSwgMjIxLCAyNTIsIDEsIDIxNywgMTAwLCAyMjEsIDI1MiwgMTY0LCAKLSAgICAyMzUsIDI1NSwgMjIxLCAyNTIsIDE2NCwgMjM1LCAyNTQsIDIyMSwgMjUyLCAxNjQsIDIyNiwgMjQzLCAyMjEsIDI1MiwgCi0gICAgMTY0LCAyNDgsIDIwNywgMjIxLCAyNTIsIDU4LCAxLCAyNDUsIDEwNSwgMjEwLCAxODIsIDIyMSwgMjUyLCAxNjQsIDI0NSwgCi0gICAgMTA1LCAyMTAsIDE4MiwgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDc1LCAyMjEsIDI1MiwgMjUsIDUsIDc1LCAyMjEsIDI1MiwgCi0gICAgMjUsIDUsIDIyNiwgMTE4LCAyNTUsIDczLCAyMjEsIDI1MiwgMjUsIDUsIDE5OSwgMjU1LCA3MywgMjIxLCAyNTIsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAyMjEsIDI1MiwgMjUsIDUsIDIyNiwgMTE4LCA2MSwgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDYxLCAyMjEsIAotICAgIDI1MiwgMjUsIDUsIDYxLCAyMjEsIDI1MiwgNTgsIDEsIDIxOSwgMjUxLCA2MSwgMjIxLCAyNTIsIDI1LCA1LCAyMTksIDI1MSwgCi0gICAgNjEsIDIyMSwgMjUyLCAyNSwgNSwgMTk5LCA3MCwgMjIxLCAyNTIsIDI1LCA1LCA3MCwgMjIxLCAyNTIsIDU4LCAxLCA3MywgCi0gICAgMjIxLCAyNTIsIDI1LCA1LCAxOTksIDczLCAyMjEsIDI1MiwgMjUsIDUsIDczLCAyMjEsIDI1MiwgMjUsIDUsIDc2LCAyMjEsIAotICAgIDI1MiwgMjUsIDUsIDIxOCwgNDUsIDIyMSwgMjUyLCAxNjQsIDIyOSwgOTIsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjI5LCA5MiwgCi0gICAgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDIxOCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDExNCwgMjIxLCAyNTIsIAotICAgIDIyNCwgMTQxLCAyNTIsIDExNCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTMsIDIwMSwgMjIxLCAyNTIsIDIyNCwgMTQxLCAKLSAgICAyMjAsIDgsIDIyMSwgMjUyLCAyNTUsIDIxLCA3OCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyMzEsIDY4LCAyMjQsIDQ1LCAyMjEsIAotICAgIDI1MiwgMjI0LCAxNDEsIDIxMCwgMzEsIDIyMSwgMjUyLCAyMjQsIDE0MSwgMjI0LCA0NSwgMjIxLCAyNTIsIDIyNCwgMTQxLCAKLSAgICAyMTAsIDExNCwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyMTUsIDkwLCAyMjEsIDI1MiwgMjI0LCAxNDEsIDI1NCwgOSwgMjIxLCAKLSAgICAyNTIsIDIyNCwgMTQxLCAyMTksIDUzLCAyMzEsIDE0NSwgMjIxLCAyNTIsIDIyNCwgMTQxLCAyNTQsIDEwMCwgMjMxLCAxODIsIAotICAgIDEsIDI0MiwgMjQsIDIzMSwgMTgyLCAxLCAyNTUsIDI1LCAyMzEsIDE4MiwgMSwgMjU0LCAyMTYsIDIzMSwgMTgyLCAxLCAKLSAgICAyNTQsIDI1NSwgMjMxLCAxODIsIDEsIDI1NCwgMjA5LCAyMzEsIDE4MiwgMSwgMjE0LCAxMjQsIDIzMSwgMTgyLCAxLCAyNTMsIAotICAgIDE2MCwgMjMxLCAxODIsIDEsIDIzNSwgMTYwLCAyMzEsIDE4MiwgMSwgMjUzLCAxOTgsIDIzMSwgMTgyLCAxLCAyNTQsIDE4MSwgCi0gICAgMjMxLCAxODIsIDEsIDI1NCwgMTg2LCAyMzEsIDE4MiwgMSwgMjU0LCAxNzgsIDIzMSwgMTgyLCAxLCAyNTQsIDEzNiwgMjMxLCAKLSAgICAxODIsIDEsIDI1NCwgMTIzLCAyMzEsIDE4MiwgMSwgMjUzLCAyMzcsIDIzMSwgMTgyLCAxLCAyMzUsIDI1NSwgMjMxLCAxODIsIAotICAgIDEsIDI1NCwgNzIsIDIzMSwgMTgyLCAxLCAyNTMsIDIwOCwgMjMxLCAxODIsIDEsIDI1NCwgNDUsIDIzMSwgMTgyLCAxLCAKLSAgICAyNTQsIDQxLCAyMzEsIDE4MiwgMSwgMjUzLCAyMzEsIDIzMSwgMTgyLCAxLCAyNTMsIDIwNiwgMjMxLCAxODIsIDEsIDI0NiwgCi0gICAgNTUsIDIzMSwgMTgyLCAxLCAyMzUsIDIsIDIzMSwgMTgyLCAxLCAyNTQsIDE5NiwgMjMxLCAxODIsIDI1NCwgMjIyLCA3OCwgCi0gICAgMjMxLCAxODIsIDIxMywgMTM2LCA3OCwgMjMxLCAxODIsIDI0MywgNTMsIDc4LCAyMzEsIDE4MiwgMjI0LCAxNDAsIDEwLCAxLCAKLSAgICAyNTIsIDU1LCAyLCA0LCAyMTQsIDEwNiwgNTEsIDEwLCAxLCAxNTEsIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDIxNywgODEsIAotICAgIDIsIDExMywgMTcwLCA0OCwgMTAsIDEsIDI0NCwgMTQzLCAyLCA1OSwgMjUyLCA0MywgMjIsIDEzNCwgMTcwLCA0OCwgMTAsIAotICAgIDEsIDIyNCwgODIsIDIsIDU5LCA1MSwgMTAsIDEsIDIzMywgMTAzLCAyLCA1MiwgMTMwLCAxMCwgMSwgNjYsIDIsIDEzNCwgCi0gICAgMTcwLCA0OCwgMTAsIDEsIDc5LCAyLCAxMTMsIDE3MCwgMjUyLCA0MywgMjIsIDIwMiwgNDgsIDEwLCAxLCA3OSwgMiwgMTEzLCAKLSAgICAxNzAsIDI1MiwgNDMsIDIyLCA1OSwgNDgsIDEwLCAxLCAyMjMsIDk2LCAyLCAyMzIsIDEyMywgMTAsIDEsIDIxMiwgMzEsIDIsIAotICAgIDU5LCAyMTEsIDIzMSwgMTAsIDEsIDIyMiwgMjAxLCAyMTEsIDQzLCAxMCwgMjQ5LCA5OSwgMjQ0LCAxNjUsIDEwLCAyNDksIAotICAgIDk5LCAyNDgsIDE4NCwgMTAsIDI0OSwgOTksIDIzNCwgMjA1LCAxMCwgMjQ5LCA5OSwgMjQ0LCAxNjMsIDEwLCAyNDksIDk5LCAKLSAgICAyNDgsIDE4MiwgMTAsIDI0OSwgOTksIDIzNCwgMjAzLCAxMCwgMTM4LCAxMjMsIDU5LCA0OCwgMTAsIDEzOCwgMTEzLCAxNzAsIAotICAgIDQ4LCAxMCwgMTM4LCAyMzIsIDEyNCwgNDgsIDEwLCAxMzgsIDEyMywgNTksIDUxLCAxMCwgMTM4LCAxMTMsIDE3MCwgNTEsIAotICAgIDEwLCAxMzgsIDIzMiwgMTI0LCA1MSwgMTAsIDIwNCwgMjQ0LCAxNjMsIDEwLCAyMDQsIDI0OCwgMTgyLCAxMCwgMjA0LCAKLSAgICAyMzQsIDIwMywgMTAsIDQsIDEyNSwgMjEyLCAzMCwgMTAsIDI0NCwgMTY2LCAyLCAyMjIsIDIzMywgMTAsIDI0NCwgMTY2LCAKLSAgICAyLCA1OSwgNDgsIDEwLCAyMzQsIDIwNiwgMiwgNTksIDUxLCAxMCwgNDMsIDI1MywgMjUwLCA0OCwgMTAsIDQ0LCAyNTMsIAotICAgIDI1MCwgNDgsIDEwLCA0MywgMjUzLCAyNTAsIDUxLCAxMCwgNDQsIDI1MywgMjUwLCA1MSwgMTAsIDUyLCA0NCwgMjUzLCAKLSAgICAyNTAsIDQ4LCAxMCwgNTIsIDQ0LCAyNTMsIDI1MCwgNzcsIDIsIDI0NywgMTIwLCAxMCwgNDQsIDI1MywgMjUwLCA3NywgMiwgCi0gICAgMjQ3LCAxMjAsIDEwLCAyNDgsIDE4NSwgMiwgMjQ3LCAxMjAsIDg0LCA1LCAyMzUsIDE5MywgMjUwLCAyNTUsIDg0LCA1LCAKLSAgICAyNTAsIDI1NSwgODQsIDUsIDI1NCwgNzUsIDg0LCA1LCAyMTMsIDE0NywgODQsIDEsIDIxOSwgMjUxLCA2MSwgODQsIDEsIAotICAgIDYxLCA4NCwgMSwgMjU1LCA3MywgODQsIDEsIDczLCA4NCwgMSwgMjM2LCAzMywgODQsIDEsIDcwLCA4NCwgMSwgMjE0LCAKLSAgICAxMTgsIDg0LCAxLCAxNDksIDE1MywgODQsIDEsIDE0OSwgMTU2LCA4NCwgMSwgMjUxLCAyLCA3NSwgODQsIDEsIDIxOSwgCi0gICAgMjUxLCA3NSwgODQsIDEsIDc1LCA4NCwgMSwgMjU0LCAyMDEsIDg0LCAxLCAyNTEsIDIsIDc2LCA4NCwgMSwgMjE5LCAyNTEsIAotICAgIDc2LCA4NCwgMSwgNzYsIDg0LCAxLCAyNTMsIDE5MiwgODQsIDEsIDE3NiwgODQsIDEsIDIzNCwgMTMyLCA4NCwgMSwgMjQzLCAKLSAgICAxMzUsIDg0LCAxLCAyNDIsIDI0OSwgODQsIDEsIDIyOSwgNzcsIDg0LCAxLCAyNTEsIDMzLCA4NCwgMSwgMjUwLCAxNTcsIAotICAgIDg0LCAxLCAyMzUsIDE0MSwgODQsIDEsIDIzNSwgMTE0LCA4NCwgMSwgMjI3LCAxNjUsIDg0LCAxLCAyMTUsIDE1NiwgODQsIAotICAgIDEsIDIxNSwgMTQ0LCA4NCwgMSwgMjQ4LCAxMzUsIDg0LCAxLCAyNDgsIDExOSwgODQsIDEsIDIyOCwgMTEwLCA4NCwgMSwgCi0gICAgMjE3LCAxMDUsIDg0LCAxLCAyMTYsIDIwOCwgODQsIDEsIDI0OCwgMjIxLCA4NCwgMSwgMjQ4LCAyNSwgODQsIDEsIDE5NywgCi0gICAgODQsIDEsIDIyOCwgOTIsIDg0LCAxLCAxOTAsIDg0LCAxLCAyMjUsIDE0NywgODQsIDEsIDI1MiwgMTkxLCA4NCwgMSwgMjUyLCAKLSAgICAxOCwgODQsIDEsIDE4NCwgODQsIDEsIDE5MSwgODQsIDEsIDIwNSwgODQsIDEsIDIyMiwgMTc5LCA4NCwgMSwgMjMzLCAxMzUsIAotICAgIDg0LCAxLCAyMzIsIDE4NCwgODQsIDEsIDIzMiwgMTc1LCA4NCwgMSwgMjE0LCAyNywgODQsIDEsIDIyMCwgMTAyLCA4NCwgMSwgCi0gICAgMjE4LCAyMjMsIDg0LCAxLCAyMDYsIDg0LCAxLCAxNjIsIDg0LCAyNSwgNSwgMjI2LCAyMzQsIDg0LCAyNSwgNSwgMjI2LCAKLSAgICAxODEsIDg0LCA1LCAyMjcsIDIwNSwgODQsIDUsIDI1MywgMTc1LCA4NCwgMjUsIDUsIDI1NSwgNzMsIDg0LCAyNSwgNSwgNzMsIAotICAgIDg0LCAyNSwgNSwgMjM2LCAzMywgODQsIDI1LCA1LCA3MCwgODQsIDI1LCA1LCAyMTQsIDExOCwgODQsIDI1LCA1LCAxNDksIAotICAgIDE1MywgODQsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCA4NCwgMjUsIDUsIDI1MSwgMiwgNzUsIDg0LCAyNSwgNSwgMjE5LCAKLSAgICAyNTEsIDc1LCA4NCwgMjUsIDUsIDc1LCA4NCwgMjUsIDUsIDI1NCwgMjAxLCA4NCwgMjUsIDUsIDI1MSwgMiwgNzYsIDg0LCAKLSAgICAyNSwgNSwgMjE5LCAyNTEsIDc2LCA4NCwgMjUsIDUsIDc2LCA4NCwgMjUsIDUsIDI1MywgMTkyLCA4NCwgNSwgMjEzLCAxNTIsIAotICAgIDg0LCAyNSwgNSwgMjI0LCAxODUsIDc1LCA4NCwgMjUsIDUsIDI1MywgMTcxLCA4NCwgMjI2LCAyMDQsIDg0LCAyMTgsIDExMSwgCi0gICAgNSwgMjE0LCAyMTYsIDg0LCAyMTgsIDExMSwgNSwgMjU0LCA3NywgODQsIDI0MiwgMTM3LCAyNTUsIDE0LCA4NCwgMjU1LCAzLCAKLSAgICAyNTUsIDE0LCA4NCwgMjUsIDUsIDI1MSwgMiwgMTk5LCA3NSwgODQsIDI1LCA1LCAyMTQsIDIxNCwgODQsIDI1LCA1LCAyMTQsIAotICAgIDExNywgODQsIDEsIDIyNCwgODgsIDg0LCAxLCAyMzQsIDExNSwgODQsIDEsIDI0MiwgMjI2LCA4NCwgMSwgMjEwLCAxMTYsIAotICAgIDg0LCAxLCAyNDgsIDEyNCwgODQsIDEsIDIyMywgMzksIDg0LCAxLCAyNDQsIDE5NiwgODQsIDEsIDIxMCwgMTY4LCA4NCwgMSwgCi0gICAgMTQ5LCAyMjIsIDE4MCwgODQsIDEsIDE0OSwgMjMyLCAxODUsIDg0LCAyNSwgNSwgMTQ5LCAxNTYsIDg0LCAyNSwgNSwgMTQ5LCAKLSAgICAyMzIsIDE4NSwgODQsIDI0OCwgMTc4LCA4NCwgNTIsIDI0OCwgMTc4LCA4NCwgMjEsIDIxMCwgODYsIDg0LCAyMSwgMTEwLCAKLSAgICA4NCwgMjEsIDEwNSwgODQsIDIxLCAxNTgsIDg0LCAyMSwgMTYxLCA4NCwgMjEsIDE4OSwgODQsIDIxLCAxOTQsIDg0LCAyMSwgCi0gICAgMTk4LCA4NCwgMjEsIDE5NSwgODQsIDIxLCAyMDAsIDg0LCAyNTUsIDIxLCA1MCwgODQsIDUsIDEyNSwgMjE5LCAxNywgMjQ3LCAKLSAgICAxMjAsIDg0LCAxLCAyNTEsIDIsIDYxLCA4NCwgMSwgMjI2LCAyMzQsIDg0LCAxLCAyMjYsIDE4MSwgODQsIDEsIDI1MywgCi0gICAgMTcxLCA4NCwgMSwgMjE0LCAyMTQsIDg0LCAxLCAyMTQsIDExNywgODQsIDEsIDIxMCwgODIsIDg0LCAxLCAxMTQsIDE5MSwgCi0gICAgODQsIDEsIDI0MywgMjksIDg0LCAxLCAyMzUsIDk2LCA4NCwgMSwgMjQyLCAxODAsIDIxOCwgMTI5LCA4NCwgMSwgMjQ4LCAKLSAgICAxMjUsIDg0LCAxLCAyNTIsIDExMSwgMTQ2LCA1LCAyNTAsIDI1NSwgMTQ2LCA1LCAyNTQsIDc1LCAxNDYsIDUsIDIxMywgCi0gICAgMTQ3LCAxNDYsIDEsIDYxLCAxNDYsIDEsIDI1NSwgNzMsIDE0NiwgMSwgNzMsIDE0NiwgMSwgMjM2LCAzMywgMTQ2LCAxLCAKLSAgICA3MCwgMTQ2LCAxLCAyMTQsIDExOCwgMTQ2LCAxLCAxNDksIDE1MywgMTQ2LCAxLCAxNDksIDE1NiwgMTQ2LCAxLCA3NSwgCi0gICAgMTQ2LCAxLCAyNTQsIDIwMSwgMTQ2LCAxLCA3NiwgMTQ2LCAxLCAyNTMsIDE5MiwgMTQ2LCAxLCAxNzYsIDE0NiwgMSwgMjM0LCAKLSAgICAxMzIsIDE0NiwgMSwgMjQzLCAxMzUsIDE0NiwgMSwgMjQyLCAyNDksIDE0NiwgMSwgMjI5LCA3NywgMTQ2LCAxLCAyNTEsIAotICAgIDMzLCAxNDYsIDEsIDI1MCwgMTU3LCAxNDYsIDEsIDIzNSwgMTQxLCAxNDYsIDEsIDIzNSwgMTE0LCAxNDYsIDEsIDIyNywgCi0gICAgMTY1LCAxNDYsIDEsIDIxNSwgMTU2LCAxNDYsIDEsIDIxNSwgMTQ0LCAxNDYsIDEsIDI0OCwgMTM1LCAxNDYsIDEsIDI0OCwgCi0gICAgMTE5LCAxNDYsIDEsIDIyOCwgMTEwLCAxNDYsIDEsIDIxNywgMTA1LCAxNDYsIDEsIDIxNiwgMjA4LCAxNDYsIDEsIDI0OCwgCi0gICAgMjIxLCAxNDYsIDEsIDI0OCwgMjUsIDE0NiwgMSwgMTk3LCAxNDYsIDEsIDE5MCwgMTQ2LCAxLCAyMjUsIDE0NywgMTQ2LCAxLCAKLSAgICAyNTIsIDE5MSwgMTQ2LCAxLCAyNTIsIDE4LCAxNDYsIDEsIDE4NCwgMTQ2LCAxLCAxOTEsIDE0NiwgMSwgMjA1LCAxNDYsIDEsIAotICAgIDIzMywgMTM1LCAxNDYsIDEsIDIyMCwgMTAyLCAxNDYsIDEsIDIxOCwgMjIzLCAxNDYsIDEsIDIwNiwgMTQ2LCAxLCAxNjIsIAotICAgIDE0NiwgNSwgMjI3LCAyMDUsIDE0NiwgNSwgMjUzLCAxNzUsIDE0NiwgMjUsIDUsIDI1NSwgNzMsIDE0NiwgMjUsIDUsIDczLCAKLSAgICAxNDYsIDI1LCA1LCAyMzYsIDMzLCAxNDYsIDI1LCA1LCA3MCwgMTQ2LCAyNSwgNSwgMjE0LCAxMTgsIDE0NiwgMjUsIDUsIAotICAgIDE0OSwgMTUzLCAxNDYsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNDYsIDI1LCA1LCA3NSwgMTQ2LCAyNSwgNSwgMjU0LCAKLSAgICAyMDEsIDE0NiwgMjUsIDUsIDc2LCAxNDYsIDI1LCA1LCAyNTMsIDE5MiwgMTQ2LCA1LCAyMTMsIDE1MiwgMTQ2LCAxLCAyMzQsIAotICAgIDEyNCwgMjE3LCAxMDUsIDE0NiwgMjUzLCAxOTMsIDIzMywgMjMsIDc4LCAxNDYsIDEsIDIyMiwgMTc5LCAxNDYsIDEsIDIyMywgCi0gICAgMzksIDE0NiwgMSwgMjEwLCAxNjgsIDE0NiwgMSwgMTQ5LCAyMjIsIDE4MCwgMTQ2LCAxLCAxNDksIDIzMiwgMTg1LCAxNDYsIAotICAgIDI1LCA1LCAxNDksIDE1NiwgMTQ2LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTQ2LCAyMSwgMjEwLCA4NiwgMTQ2LCAyMSwgCi0gICAgMTEwLCAxNDYsIDIxLCAxMDUsIDE0NiwgMjEsIDE1OCwgMTQ2LCAyMSwgMTYxLCAxNDYsIDIxLCAxODksIDE0NiwgMjEsIAotICAgIDE5NCwgMTQ2LCAyMSwgMTk4LCAxNDYsIDIxLCAxOTUsIDE0NiwgMjEsIDIwMCwgMTQ2LCAxLCAyMjMsIDE4OCwgMiwgMjMwLCAKLSAgICAyMjQsIDI0NywgMjU0LCAxNDYsIDEsIDIyMywgMTg4LCAyLCAyMzIsIDEwOCwgMjQ3LCAyNTQsIDE0NiwgMjIyLCAxMTgsIAotICAgIDc4LCAxNDYsIDIyMiwgMTE4LCA1MCwgMTQ2LCAyNDksIDk4LCAyMjcsIDE5NywgMTEwLCAxNDYsIDI0OSwgOTgsIDIyNywgCi0gICAgMTk3LCAxMDUsIDE0NiwgMjQ5LCA5OCwgMjI3LCAxOTcsIDE1OCwgMTQ2LCAyNDksIDk4LCAyMjcsIDE5NywgMTYxLCAxNDYsIAotICAgIDI0OSwgOTgsIDIyNywgMTk3LCAxMjMsIDIzMywgMTYsIDIxNiwgMjAxLCAyMTYsIDE5NiwgMjQ4LCA0OCwgMTQ2LCAyNDksIAotICAgIDk4LCAyNDgsIDQ5LCAyMTksIDExOSwgMTQ2LCAyMzUsIDE2MSwgMTQ2LCAyNDMsIDEwMywgNzgsIDE4MywgNSwgMjU0LCAKLSAgICAyNTQsIDI1MSwgMjQzLCAxODMsIDUsIDI1MSwgMjQzLCAxODMsIDUsIDIxMywgMTQ3LCAxODMsIDEsIDYxLCAxODMsIDEsIAotICAgIDI1NSwgNzMsIDE4MywgMSwgNzMsIDE4MywgMSwgMjM2LCAzMywgMTgzLCAxLCA3MCwgMTgzLCAxLCAyMTQsIDExOCwgMTgzLCAKLSAgICAxLCAyNDUsIDIwOSwgMTgzLCAxLCAyNTQsIDIwMSwgMTgzLCAxLCAyMjYsIDE4MywgMTgzLCAxLCAyNTMsIDE5MiwgMTgzLCAKLSAgICAxLCAxNzYsIDE4MywgMSwgMjM0LCAxMzIsIDE4MywgMSwgMjQzLCAxMzUsIDE4MywgMSwgMjQyLCAyNDksIDE4MywgMSwgCi0gICAgMjI5LCA3NywgMTgzLCAxLCAyNTEsIDMzLCAxODMsIDEsIDI1MCwgMTU3LCAxODMsIDEsIDIzNSwgMTQxLCAxODMsIDEsIAotICAgIDIzNSwgMTE0LCAxODMsIDEsIDIyNywgMTY1LCAxODMsIDEsIDIxNSwgMTU2LCAxODMsIDEsIDIxNSwgMTQ0LCAxODMsIDEsIAotICAgIDI0OCwgMTM1LCAxODMsIDEsIDI0OCwgMTE5LCAxODMsIDEsIDIyOCwgMTEwLCAxODMsIDEsIDIxNywgMTA1LCAxODMsIDEsIAotICAgIDIxNiwgMjA4LCAxODMsIDEsIDI0OCwgMjIxLCAxODMsIDEsIDI0OCwgMjUsIDE4MywgMSwgMTk3LCAxODMsIDEsIDE5MCwgCi0gICAgMTgzLCAxLCAyMjUsIDE0NywgMTgzLCAxLCAyNTIsIDE5MSwgMTgzLCAxLCAyNTIsIDE4LCAxODMsIDEsIDE4NCwgMTgzLCAxLCAKLSAgICAxOTEsIDE4MywgMSwgMjA1LCAxODMsIDEsIDIzMywgMTM1LCAxODMsIDEsIDIzMiwgMTg0LCAxODMsIDEsIDIxNCwgMjcsIAotICAgIDE4MywgMSwgMjIwLCAxMDIsIDE4MywgMSwgMjA2LCAxODMsIDEsIDE2MiwgMTgzLCA1LCAyMjcsIDIwNSwgMTgzLCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMTgzLCAyNSwgNSwgNzMsIDE4MywgMjUsIDUsIDIzNiwgMzMsIDE4MywgMjUsIDUsIDcwLCAxODMsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMTgzLCAyNSwgNSwgMjQ1LCAyMDksIDE4MywgMjUsIDUsIDI1NCwgMjAxLCAxODMsIDI1LCA1LCAyMjYsIAotICAgIDE4MywgMTgzLCAyNSwgNSwgMjUzLCAxOTIsIDE4MywgNSwgMjEzLCAxNTIsIDE4MywgNSwgMjE0LCAyMTgsIDE4MywgMSwgCi0gICAgMjM0LCAxMTUsIDE4MywgMSwgMjQyLCAyMjYsIDE4MywgMSwgMjEwLCAxMTYsIDE4MywgMSwgMjIyLCAxNzksIDE4MywgMSwgCi0gICAgMjQ0LCAxOTYsIDE4MywgMjEsIDIxMCwgODYsIDE4MywgMjEsIDExMCwgMTgzLCAyMSwgMTA1LCAxODMsIDIxLCAxNTgsIAotICAgIDE4MywgMjEsIDE2MSwgMTgzLCAyMSwgMTg5LCAxODMsIDIxLCAxOTQsIDE4MywgMjEsIDE5OCwgMTgzLCAyMSwgMTk1LCAKLSAgICAxODMsIDIxLCAyMDAsIDE4MywgMjE2LCA3NCwgMTgzLCAyNTQsIDI1MywgMTgzLCAyMzUsIDE3OCwgMTgzLCAyMTQsIDE0NiwgCi0gICAgMTgzLCAyNDUsIDE4MSwgMjI2LCAxODgsIDE4MywgNSwgMjExLCA3OCwgMTcxLCA1LCAyNTAsIDI1NSwgMTcxLCA1LCAyNTQsIAotICAgIDc1LCAxNzEsIDUsIDIxMywgMTQ3LCAxNzEsIDEsIDYxLCAxNzEsIDEsIDI1NSwgNzMsIDE3MSwgMSwgNzMsIDE3MSwgMSwgCi0gICAgMjM2LCAzMywgMTcxLCAxLCA3MCwgMTcxLCAxLCAyMTQsIDExOCwgMTcxLCAxLCAxNDksIDE1MywgMTcxLCAxLCAxNDksIAotICAgIDE1NiwgMTcxLCAyNSwgMjUxLCAyLCA3NSwgMTcxLCAxLCA3NSwgMTcxLCAxLCAyNTQsIDIwMSwgMTcxLCAyNSwgMjUxLCAyLCAKLSAgICA3NiwgMTcxLCAxLCA3NiwgMTcxLCAxLCAyNTMsIDE5MiwgMTcxLCAxLCAxNzYsIDE3MSwgMSwgMjM0LCAxMzIsIDE3MSwgMSwgCi0gICAgMjQzLCAxMzUsIDE3MSwgMSwgMjQyLCAyNDksIDE3MSwgMSwgMjI5LCA3NywgMTcxLCAxLCAyNTEsIDMzLCAxNzEsIDEsIAotICAgIDI1MCwgMTU3LCAxNzEsIDEsIDIzNSwgMTQxLCAxNzEsIDEsIDIzNSwgMTE0LCAxNzEsIDEsIDIyNywgMTY1LCAxNzEsIDEsIAotICAgIDIxNSwgMTU2LCAxNzEsIDEsIDIxNSwgMTQ0LCAxNzEsIDEsIDI0OCwgMTM1LCAxNzEsIDEsIDI0OCwgMTE5LCAxNzEsIDEsIAotICAgIDIyOCwgMTEwLCAxNzEsIDEsIDIxNywgMTA1LCAxNzEsIDEsIDIxNiwgMjA4LCAxNzEsIDEsIDI0OCwgMjIxLCAxNzEsIDEsIAotICAgIDI0OCwgMjUsIDE3MSwgMSwgMTk3LCAxNzEsIDEsIDE5MCwgMTcxLCAxLCAyMjUsIDE0NywgMTcxLCAxLCAyNTIsIDE5MSwgCi0gICAgMTcxLCAxLCAyNTIsIDE4LCAxNzEsIDEsIDE4NCwgMTcxLCAxLCAxOTEsIDE3MSwgMSwgMjA1LCAxNzEsIDEsIDIzMywgMTM1LCAKLSAgICAxNzEsIDEsIDIzMiwgMTg0LCAxNzEsIDEsIDIxNCwgMjcsIDE3MSwgMSwgMjIwLCAxMDIsIDE3MSwgMSwgMjE4LCAyMjMsIAotICAgIDE3MSwgMSwgMjA2LCAxNzEsIDEsIDE2MiwgMTcxLCA1LCAyMjcsIDIwNSwgMTcxLCA1LCAyNTMsIDE3NSwgMTcxLCAyNSwgNSwgCi0gICAgMjU1LCA3MywgMTcxLCAyNSwgNSwgNzMsIDE3MSwgMjUsIDUsIDIzNiwgMzMsIDE3MSwgMjUsIDUsIDcwLCAxNzEsIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgMTcxLCAyNSwgNSwgMTQ5LCAxNTMsIDE3MSwgMjUsIDUsIDE0OSwgMjIyLCAxODAsIDE3MSwgMjUsIDUsIAotICAgIDI1MSwgMiwgNzUsIDE3MSwgMjUsIDUsIDc1LCAxNzEsIDI1LCA1LCAyNTQsIDIwMSwgMTcxLCAyNSwgNSwgMjUxLCAyLCA3NiwgCi0gICAgMTcxLCAyNSwgNSwgNzYsIDE3MSwgMjUsIDUsIDI1MywgMTkyLCAxNzEsIDUsIDIxMywgMTUyLCAxNzEsIDIyNiwgMjA0LCAKLSAgICAxNzEsIDEsIDE0OSwgMjIyLCAxODAsIDE3MSwgMSwgMTQ5LCAyMzIsIDE4NSwgMTcxLCAyNSwgNSwgMTQ5LCAxNTYsIDE3MSwgCi0gICAgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE3MSwgMjEsIDIxMCwgODYsIDE3MSwgMjEsIDExMCwgMTcxLCAyMSwgMTA1LCAxNzEsIAotICAgIDIxLCAxNTgsIDE3MSwgMjEsIDE2MSwgMTcxLCAyMSwgMTg5LCAxNzEsIDIxLCAxOTQsIDE3MSwgMjEsIDE5OCwgMTcxLCAyMSwgCi0gICAgMTk1LCAxNzEsIDIxLCAyMDAsIDE3MSwgMjU1LCAyMSwgNTAsIDE3MSwgMjIyLCAxMTgsIDUwLCAxNTcsIDUsIDI1MCwgMjU1LCAKLSAgICAxNTcsIDUsIDI1NCwgNzUsIDE1NywgNSwgMjEzLCAxNDcsIDE1NywgMSwgNjEsIDE1NywgMSwgMjU1LCA3MywgMTU3LCAxLCAKLSAgICA3MywgMTU3LCAxLCAyMzYsIDMzLCAxNTcsIDEsIDcwLCAxNTcsIDEsIDIxNCwgMTE4LCAxNTcsIDEsIDE0OSwgMTUzLCAxNTcsIAotICAgIDEsIDE0OSwgMTU2LCAxNTcsIDEsIDc1LCAxNTcsIDEsIDI1NCwgMjAxLCAxNTcsIDEsIDc2LCAxNTcsIDEsIDI1MywgMTkyLCAKLSAgICAxNTcsIDEsIDE3NiwgMTU3LCAxLCAyMzQsIDEzMiwgMTU3LCAxLCAyNDMsIDEzNSwgMTU3LCAxLCAyNDIsIDI0OSwgMTU3LCAKLSAgICAxLCAyMjksIDc3LCAxNTcsIDEsIDI1MSwgMzMsIDE1NywgMSwgMjUwLCAxNTcsIDE1NywgMSwgMjM1LCAxNDEsIDE1NywgMSwgCi0gICAgMjM1LCAxMTQsIDE1NywgMSwgMjI3LCAxNjUsIDE1NywgMSwgMjE1LCAxNTYsIDE1NywgMSwgMjE1LCAxNDQsIDE1NywgMSwgCi0gICAgMjQ4LCAxMzUsIDE1NywgMSwgMjQ4LCAxMTksIDE1NywgMSwgMjI4LCAxMTAsIDE1NywgMSwgMjE3LCAxMDUsIDE1NywgMSwgCi0gICAgMjE2LCAyMDgsIDE1NywgMSwgMjQ4LCAyMjEsIDE1NywgMSwgMjQ4LCAyNSwgMTU3LCAxLCAxOTcsIDE1NywgMSwgMTkwLCAKLSAgICAxNTcsIDEsIDIyNSwgMTQ3LCAxNTcsIDEsIDI1MiwgMTkxLCAxNTcsIDEsIDI1MiwgMTgsIDE1NywgMSwgMTg0LCAxNTcsIDEsIAotICAgIDE5MSwgMTU3LCAxLCAyMDUsIDE1NywgMSwgMjMzLCAxMzUsIDE1NywgMSwgMjMyLCAxODQsIDE1NywgMSwgMjE0LCAyNywgCi0gICAgMTU3LCAxLCAyMjAsIDEwMiwgMTU3LCAxLCAyMTgsIDIyMywgMTU3LCAxLCAyMDYsIDE1NywgMSwgMTYyLCAxNTcsIDUsIAotICAgIDIyNywgMjA1LCAxNTcsIDUsIDI1MywgMTc1LCAxNTcsIDI1LCA1LCAyNTUsIDczLCAxNTcsIDI1LCA1LCA3MywgMTU3LCAyNSwgCi0gICAgNSwgMjM2LCAzMywgMTU3LCAyNSwgNSwgNzAsIDE1NywgMjUsIDUsIDIxNCwgMTE4LCAxNTcsIDI1LCA1LCAxNDksIDE1MywgCi0gICAgMTU3LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTU3LCAyNSwgNSwgNzUsIDE1NywgMjUsIDUsIDI1NCwgMjAxLCAxNTcsIDI1LCAKLSAgICA1LCA3NiwgMTU3LCAyNSwgNSwgMjUzLCAxOTIsIDE1NywgNSwgMjEzLCAxNTIsIDE1NywgMjU0LCAyMDIsIDIzMywgMjMsIAotICAgIDc4LCAxNTcsIDI1MywgMTkzLCAyMzMsIDIzLCA3OCwgMTU3LCAxLCAyMjIsIDE3OSwgMTU3LCAxLCAyMjMsIDM5LCAxNTcsIAotICAgIDEsIDIxMCwgMTY4LCAxNTcsIDEsIDE0OSwgMjIyLCAxODAsIDE1NywgMSwgMTQ5LCAyMzIsIDE4NSwgMTU3LCAyNSwgNSwgCi0gICAgMTQ5LCAxNTYsIDE1NywgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE1NywgMjEsIDIxMCwgODYsIDE1NywgMjEsIDExMCwgMTU3LCAKLSAgICAyMSwgMTA1LCAxNTcsIDIxLCAxNTgsIDE1NywgMjEsIDE2MSwgMTU3LCAyMSwgMTg5LCAxNTcsIDIxLCAxOTQsIDE1NywgMjEsIAotICAgIDE5OCwgMTU3LCAyMSwgMTk1LCAxNTcsIDIxLCAyMDAsIDE1NywgMjM1LCAxNjEsIDE1NywgMSwgMjEyLCA2NSwgMTU3LCAKLSAgICAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMTU3LCAyNDQsIDIsIDEyMywgMjQyLCAyNywgMTU3LCAyNDQsIDIsIDEzNCwgMjI0LCAKLSAgICAxOSwgMTU3LCAyNDQsIDIsIDEyMywgMjE5LCAxMTcsIDE1NywgMjQ0LCAyLCAxMjMsIDI0NSwgMTg4LCAxNTcsIDI0NCwgMiwgCi0gICAgMTM0LCAyMTksIDExNiwgMzYsIDUsIDI1NCwgNzUsIDM2LCA1LCAyMTMsIDE0NywgMzYsIDEsIDYxLCAzNiwgMSwgMjU1LCAKLSAgICA3MywgMzYsIDEsIDczLCAzNiwgMSwgMjM2LCAzMywgMzYsIDEsIDcwLCAzNiwgMSwgMjE0LCAxMTgsIDM2LCAxLCA3NSwgMzYsIAotICAgIDEsIDI0NSwgMjA5LCAzNiwgMSwgMjU0LCAyMDEsIDM2LCAxLCA3NiwgMzYsIDEsIDIyNiwgMTgzLCAzNiwgMSwgMjUzLCAKLSAgICAxOTIsIDM2LCAxLCAxNzYsIDM2LCAxLCAyMjksIDc3LCAzNiwgMSwgMjUxLCAzMywgMzYsIDEsIDIzNSwgMTQxLCAzNiwgMSwgCi0gICAgMjI3LCAxNjUsIDM2LCAxLCAyMTUsIDE1NiwgMzYsIDEsIDIyOCwgMTEwLCAzNiwgMSwgMjE3LCAxMDUsIDM2LCAxLCAxOTcsIAotICAgIDM2LCAxLCAyMjgsIDkyLCAzNiwgMSwgMTkwLCAzNiwgMSwgMTg0LCAzNiwgMSwgMTkxLCAzNiwgMSwgMjA1LCAzNiwgMSwgCi0gICAgMjIyLCAxNzksIDM2LCAxLCAyMzMsIDEzNSwgMzYsIDEsIDIzMiwgMTg0LCAzNiwgMSwgMjMyLCAxNzUsIDM2LCAxLCAyMTQsIAotICAgIDI3LCAzNiwgMSwgMjIwLCAxMDIsIDM2LCAxLCAyMTgsIDIyMywgMzYsIDEsIDIwNiwgMzYsIDEsIDE2MiwgMzYsIDI1LCA1LCAKLSAgICAyNTUsIDczLCAzNiwgMjUsIDUsIDczLCAzNiwgMjUsIDUsIDIzNiwgMzMsIDM2LCAyNSwgNSwgNzAsIDM2LCAyNSwgNSwgCi0gICAgMjE0LCAxMTgsIDM2LCAyNSwgNSwgNzUsIDM2LCAyNSwgNSwgMjQ1LCAyMDksIDM2LCAyNSwgNSwgMjU0LCAyMDEsIDM2LCAKLSAgICAyNSwgNSwgNzYsIDM2LCAyNSwgNSwgMjI2LCAxODMsIDM2LCAyNSwgNSwgMjUzLCAxOTIsIDM2LCA1LCAyMTMsIDE1MiwgMzYsIAotICAgIDIyNiwgMjA0LCAzNiwgMjUzLCAxOTMsIDIzMywgMjMsIDc4LCAzNiwgMjEsIDIxMCwgODYsIDM2LCAyMSwgMTEwLCAzNiwgCi0gICAgMjEsIDEwNSwgMzYsIDIxLCAxNTgsIDM2LCAyMSwgMTYxLCAzNiwgMjEsIDE4OSwgMzYsIDIxLCAxOTQsIDM2LCAyMSwgMTk4LCAKLSAgICAzNiwgMjEsIDE5NSwgMzYsIDIxLCAyMDAsIDM2LCA1NCwgMjE2LCAyNDcsIDM2LCA1NCwgMTIzLCAyNDAsIDIxMCwgMzYsIAotICAgIDU0LCAxMjMsIDIxNiwgMTQ3LCAzNiwgMjQ4LCAxNDYsIDUwLCAzNiwgMjMwLCAxMzUsIDUwLCAzNiwgMjExLCA0NSwgNTAsIAotICAgIDM2LCAyNDgsIDg3LCA1MCwgMzYsIDI0OSwgMTM5LCA1MCwgMzYsIDI1MywgMjM4LCA3NywgNTAsIDM2LCAyMjIsIDExOCwgCi0gICAgNTAsIDM2LCA1NCwgNTAsIDE0OCwgNSwgMjUwLCAyNTUsIDE0OCwgNSwgMjU0LCA3NSwgMTQ4LCA1LCAyMTMsIDE0NywgMTQ4LCAKLSAgICAxLCA2MSwgMTQ4LCAxLCAyNTUsIDczLCAxNDgsIDEsIDczLCAxNDgsIDEsIDIzNiwgMzMsIDE0OCwgMSwgNzAsIDE0OCwgMSwgCi0gICAgMjE0LCAxMTgsIDE0OCwgMSwgMTQ5LCAxNTMsIDE0OCwgMSwgMTQ5LCAxNTYsIDE0OCwgMSwgNzUsIDE0OCwgMSwgMjQ1LCAKLSAgICAyMDksIDE0OCwgMSwgMjU0LCAyMDEsIDE0OCwgMSwgNzYsIDE0OCwgMSwgMjI2LCAxODMsIDE0OCwgMSwgMjUzLCAxOTIsIAotICAgIDE0OCwgMSwgMTc2LCAxNDgsIDEsIDIzNCwgMTMyLCAxNDgsIDEsIDI0MywgMTM1LCAxNDgsIDEsIDI0MiwgMjQ5LCAxNDgsIAotICAgIDEsIDIyOSwgNzcsIDE0OCwgMSwgMjUxLCAzMywgMTQ4LCAxLCAyNTAsIDE1NywgMTQ4LCAxLCAyMzUsIDE0MSwgMTQ4LCAxLCAKLSAgICAyMzUsIDExNCwgMTQ4LCAxLCAyMjcsIDE2NSwgMTQ4LCAxLCAyMTUsIDE1NiwgMTQ4LCAxLCAyMTUsIDE0NCwgMTQ4LCAxLCAKLSAgICAyNDgsIDEzNSwgMTQ4LCAxLCAyNDgsIDExOSwgMTQ4LCAxLCAyMjgsIDExMCwgMTQ4LCAxLCAyMTcsIDEwNSwgMTQ4LCAxLCAKLSAgICAyMTYsIDIwOCwgMTQ4LCAxLCAyNDgsIDIyMSwgMTQ4LCAxLCAyNDgsIDI1LCAxNDgsIDEsIDE5NywgMTQ4LCAxLCAxOTAsIAotICAgIDE0OCwgMSwgMjI1LCAxNDcsIDE0OCwgMSwgMjUyLCAxOTEsIDE0OCwgMSwgMjUyLCAxOCwgMTQ4LCAxLCAxODQsIDE0OCwgMSwgCi0gICAgMTkxLCAxNDgsIDEsIDIwNSwgMTQ4LCAxLCAyMjIsIDE3OSwgMTQ4LCAxLCAyMzMsIDEzNSwgMTQ4LCAxLCAyMzIsIDE4NCwgCi0gICAgMTQ4LCAxLCAyMTQsIDI3LCAxNDgsIDEsIDIyMCwgMTAyLCAxNDgsIDEsIDIxOCwgMjIzLCAxNDgsIDEsIDIwNiwgMTQ4LCAxLCAKLSAgICAxNjIsIDE0OCwgNSwgMjUzLCAxNzUsIDE0OCwgMjUsIDUsIDI1NSwgNzMsIDE0OCwgMjUsIDUsIDczLCAxNDgsIDI1LCA1LCAKLSAgICAyMzYsIDMzLCAxNDgsIDI1LCA1LCA3MCwgMTQ4LCAyNSwgNSwgMjE0LCAxMTgsIDE0OCwgMjUsIDUsIDE0OSwgMTUzLCAxNDgsIAotICAgIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAxNDgsIDI1LCA1LCA3NSwgMTQ4LCAyNSwgNSwgMjQ1LCAyMDksIDE0OCwgMjUsIDUsIAotICAgIDI1NCwgMjAxLCAxNDgsIDI1LCA1LCA3NiwgMTQ4LCAyNSwgNSwgMjI2LCAxODMsIDE0OCwgMjUsIDUsIDI1MywgMTkyLCAKLSAgICAxNDgsIDUsIDIxMywgMTUyLCAxNDgsIDIzMywgMjMsIDc4LCAxNDgsIDI1NCwgMjAyLCAyMzMsIDIzLCA3OCwgMTQ4LCAxLCAKLSAgICAyMTUsIDE4MywgMTQ4LCAxLCAyNDYsIDM4LCAxNDgsIDEsIDE0OSwgMjIyLCAxODAsIDE0OCwgMSwgMTQ5LCAyMzIsIDE4NSwgCi0gICAgMTQ4LCAyNSwgNSwgMTQ5LCAxNTYsIDE0OCwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE0OCwgMjEsIDIxMCwgODYsIDE0OCwgCi0gICAgMjEsIDExMCwgMTQ4LCAyMSwgMTA1LCAxNDgsIDIxLCAxNTgsIDE0OCwgMjEsIDE2MSwgMTQ4LCAyMSwgMTg5LCAxNDgsIDIxLCAKLSAgICAxOTQsIDE0OCwgMjEsIDE5OCwgMTQ4LCAyMSwgMTk1LCAxNDgsIDIxLCAyMDAsIDE0OCwgMjQ0LCAyLCAyMSwgMjEwLCA4NywgCi0gICAgMzEsIDIyNiwgMjM3LCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMjMsIDMxLCAyMjYsIDIzNywgMjI0LCAKLSAgICAyMjMsIDY0LCAxNjEsIDE0OCwgMjQ0LCAyLCAyMSwgMTEzLCAzMSwgMjI2LCAyMzcsIDIyNCwgMjIzLCA2NCwgMTYxLCAxNDgsIAotICAgIDI0NCwgMiwgMjEsIDEzNCwgMzEsIDIyNiwgMjM3LCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMjMsIAotICAgIDMxLCAyNDUsIDQyLCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMTMsIDMxLCAyNDUsIDQyLCAyMjQsIAotICAgIDIyMywgNjQsIDE2MSwgMTQ4LCAyNDQsIDIsIDIxLCAxMzQsIDMxLCAyNDUsIDQyLCAyMjQsIDIyMywgNjQsIDE2MSwgMTQ4LCAKLSAgICA1LCAyMTUsIDg0LCAxNjUsIDUsIDI1NCwgNzUsIDE2NSwgNSwgMjEzLCAxNDcsIDE2NSwgMSwgNjEsIDE2NSwgMSwgMjU1LCAKLSAgICA3MywgMTY1LCAxLCA3MywgMTY1LCAxLCAyMzYsIDMzLCAxNjUsIDEsIDcwLCAxNjUsIDEsIDIxNCwgMTE4LCAxNjUsIDEsIAotICAgIDE0OSwgMTUzLCAxNjUsIDEsIDE0OSwgMTU2LCAxNjUsIDEsIDc1LCAxNjUsIDEsIDI0NSwgMjA5LCAxNjUsIDEsIDI1NCwgCi0gICAgMjAxLCAxNjUsIDEsIDc2LCAxNjUsIDEsIDIyNiwgMTgzLCAxNjUsIDEsIDI1MywgMTkyLCAxNjUsIDEsIDE3NiwgMTY1LCAxLCAKLSAgICAyMzQsIDEzMiwgMTY1LCAxLCAyNDMsIDEzNSwgMTY1LCAxLCAyNDIsIDI0OSwgMTY1LCAxLCAyMjksIDc3LCAxNjUsIDEsIAotICAgIDI1MSwgMzMsIDE2NSwgMSwgMjUwLCAxNTcsIDE2NSwgMSwgMjM1LCAxNDEsIDE2NSwgMSwgMjM1LCAxMTQsIDE2NSwgMSwgCi0gICAgMjI3LCAxNjUsIDE2NSwgMSwgMjE1LCAxNTYsIDE2NSwgMSwgMjE1LCAxNDQsIDE2NSwgMSwgMjQ4LCAxMzUsIDE2NSwgMSwgCi0gICAgMjQ4LCAxMTksIDE2NSwgMSwgMjI4LCAxMTAsIDE2NSwgMSwgMjE3LCAxMDUsIDE2NSwgMSwgMjE2LCAyMDgsIDE2NSwgMSwgCi0gICAgMjQ4LCAyMjEsIDE2NSwgMSwgMjQ4LCAyNSwgMTY1LCAxLCAxOTcsIDE2NSwgMSwgMTkwLCAxNjUsIDEsIDIyNSwgMTQ3LCAKLSAgICAxNjUsIDEsIDI1MiwgMTkxLCAxNjUsIDEsIDI1MiwgMTgsIDE2NSwgMSwgMTg0LCAxNjUsIDEsIDE5MSwgMTY1LCAxLCAyMDUsIAotICAgIDE2NSwgMSwgMjIyLCAxNzksIDE2NSwgMSwgMjMzLCAxMzUsIDE2NSwgMSwgMjMyLCAxODQsIDE2NSwgMSwgMjE0LCAyNywgCi0gICAgMTY1LCAxLCAyMjAsIDEwMiwgMTY1LCAxLCAyMTgsIDIyMywgMTY1LCAxLCAyMDYsIDE2NSwgMSwgMTYyLCAxNjUsIDUsIAotICAgIDIyNywgMjA1LCAxNjUsIDUsIDI1MywgMTc1LCAxNjUsIDI1LCA1LCAyNTUsIDczLCAxNjUsIDI1LCA1LCA3MywgMTY1LCAyNSwgCi0gICAgNSwgMjM2LCAzMywgMTY1LCAyNSwgNSwgNzAsIDE2NSwgMjUsIDUsIDIxNCwgMTE4LCAxNjUsIDI1LCA1LCAxNDksIDE1MywgCi0gICAgMTY1LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTY1LCAyNSwgNSwgNzUsIDE2NSwgMjUsIDUsIDI0NSwgMjA5LCAxNjUsIDI1LCAKLSAgICA1LCAyNTQsIDIwMSwgMTY1LCAyNSwgNSwgNzYsIDE2NSwgMjUsIDUsIDIyNiwgMTgzLCAxNjUsIDI1LCA1LCAyNTMsIDE5MiwgCi0gICAgMTY1LCA1LCAyMTMsIDE1MiwgMTY1LCAyMzMsIDIzLCA3OCwgMTY1LCAyNTQsIDIwMiwgMjMzLCAyMywgNzgsIDE2NSwgMSwgCi0gICAgMjQ0LCAxOTYsIDE2NSwgMSwgMTQ5LCAyMjIsIDE4MCwgMTY1LCAxLCAxNDksIDIzMiwgMTg1LCAxNjUsIDI1LCA1LCAxNDksIAotICAgIDE1NiwgMTY1LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTY1LCAyMSwgMjEwLCA4NiwgMTY1LCAyMSwgMTEwLCAxNjUsIDIxLCAKLSAgICAxMDUsIDE2NSwgMjEsIDE1OCwgMTY1LCAyMSwgMTYxLCAxNjUsIDIxLCAxODksIDE2NSwgMjEsIDE5NCwgMTY1LCAyMSwgCi0gICAgMTk4LCAxNjUsIDIxLCAxOTUsIDE2NSwgMjEsIDIwMCwgMTY1LCA1LCAyMzUsIDEwMiwgMTY1LCA1LCAyMTQsIDE2MSwgMTM2LCAKLSAgICA1LCAyNTQsIDc1LCAxMzYsIDUsIDIxMywgMTQ3LCAxMzYsIDEsIDYxLCAxMzYsIDEsIDI1NSwgNzMsIDEzNiwgMSwgNzMsIAotICAgIDEzNiwgMSwgMjM2LCAzMywgMTM2LCAxLCA3MCwgMTM2LCAxLCAyMTQsIDExOCwgMTM2LCAxLCAxNDksIDE1MywgMTM2LCAxLCAKLSAgICAxNDksIDE1NiwgMTM2LCAxLCA3NSwgMTM2LCAxLCAyNDUsIDIwOSwgMTM2LCAxLCAyNTQsIDIwMSwgMTM2LCAxLCA3NiwgCi0gICAgMTM2LCAxLCAyMjYsIDE4MywgMTM2LCAxLCAyNTMsIDE5MiwgMTM2LCAxLCAxNzYsIDEzNiwgMSwgMjM0LCAxMzIsIDEzNiwgCi0gICAgMSwgMjQzLCAxMzUsIDEzNiwgMSwgMjQyLCAyNDksIDEzNiwgMSwgMjI5LCA3NywgMTM2LCAxLCAyNTEsIDMzLCAxMzYsIDEsIAotICAgIDI1MCwgMTU3LCAxMzYsIDEsIDIzNSwgMTQxLCAxMzYsIDEsIDIzNSwgMTE0LCAxMzYsIDEsIDIyNywgMTY1LCAxMzYsIDEsIAotICAgIDIxNSwgMTU2LCAxMzYsIDEsIDIxNSwgMTQ0LCAxMzYsIDEsIDI0OCwgMTM1LCAxMzYsIDEsIDI0OCwgMTE5LCAxMzYsIDEsIAotICAgIDIyOCwgMTEwLCAxMzYsIDEsIDIxNywgMTA1LCAxMzYsIDEsIDIxNiwgMjA4LCAxMzYsIDEsIDI0OCwgMjIxLCAxMzYsIDEsIAotICAgIDI0OCwgMjUsIDEzNiwgMSwgMTk3LCAxMzYsIDEsIDIyOCwgOTIsIDEzNiwgMSwgMTkwLCAxMzYsIDEsIDIyNSwgMTQ3LCAKLSAgICAxMzYsIDEsIDI1MiwgMTkxLCAxMzYsIDEsIDI1MiwgMTgsIDEzNiwgMSwgMTg0LCAxMzYsIDEsIDE5MSwgMTM2LCAxLCAyMDUsIAotICAgIDEzNiwgMSwgMjIyLCAxNzksIDEzNiwgMSwgMjMzLCAxMzUsIDEzNiwgMSwgMjMyLCAxODQsIDEzNiwgMSwgMjMyLCAxNzUsIAotICAgIDEzNiwgMSwgMjE0LCAyNywgMTM2LCAxLCAyMjAsIDEwMiwgMTM2LCAxLCAyMTgsIDIyMywgMTM2LCAxLCAyMDYsIDEzNiwgMSwgCi0gICAgMTYyLCAxMzYsIDEsIDIxNSwgMTI1LCAxMzYsIDUsIDI1MywgMTc1LCAxMzYsIDI1LCA1LCAyNTUsIDczLCAxMzYsIDI1LCA1LCAKLSAgICA3MywgMTM2LCAyNSwgNSwgMjM2LCAzMywgMTM2LCAyNSwgNSwgNzAsIDEzNiwgMjUsIDUsIDIxNCwgMTE4LCAxMzYsIDI1LCAKLSAgICA1LCAxNDksIDE1MywgMTM2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgMTM2LCAyNSwgNSwgNzUsIDEzNiwgMjUsIDUsIDI0NSwgCi0gICAgMjA5LCAxMzYsIDI1LCA1LCAyNTQsIDIwMSwgMTM2LCAyNSwgNSwgNzYsIDEzNiwgMjUsIDUsIDIyNiwgMTgzLCAxMzYsIDI1LCAKLSAgICA1LCAyNTMsIDE5MiwgMTM2LCA1LCAyMTMsIDE1MiwgMTM2LCAxLCA1OSwgMjIzLCA3MywgMTM2LCAyNTMsIDE5MywgMjMzLCAKLSAgICAyMywgNzgsIDEzNiwgMSwgMTQ5LCAyMjIsIDE4MCwgMTM2LCAxLCAxNDksIDIzMiwgMTg1LCAxMzYsIDI1LCA1LCAxNDksIAotICAgIDE1NiwgMTM2LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTM2LCAyMSwgMjEwLCA4NiwgMTM2LCAyMSwgMTEwLCAxMzYsIDIxLCAKLSAgICAxMDUsIDEzNiwgMjEsIDE1OCwgMTM2LCAyMSwgMTYxLCAxMzYsIDIxLCAxODksIDEzNiwgMjEsIDE5NCwgMTM2LCAyMSwgCi0gICAgMTk4LCAxMzYsIDIxLCAxOTUsIDEzNiwgMjEsIDIwMCwgMTM2LCA1NCwgMjE2LCAyNDcsIDEzNiwgNTQsIDEyMywgMjQwLCAKLSAgICAyMTAsIDEzNiwgNTQsIDEyMywgMjE2LCAxNDcsIDEzNiwgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDEzNiwgMjQ0LCAyLCAxMjMsIAotICAgIDI0MiwgMjcsIDEzNiwgMjQ0LCAyLCAxMzQsIDIyNCwgMTksIDEzNiwgMjQ4LCAxNTAsIDc4LCAxMzYsIDEsIDI1MCwgOTksIAotICAgIDIyOCwgMTExLCAxMzYsIDEsIDI1MCwgOTksIDIzMCwgMjUsIDEzNiwgMSwgMjUwLCA5OSwgMjIyLCAxODAsIDEzNiwgMSwgCi0gICAgMjUwLCA5OSwgMTU2LCAxMzYsIDEsIDI1MCwgOTksIDIzMiwgMTg1LCAxMzYsIDEsIDI1MCwgOTksIDIzNSwgMjMsIDE3NSwgCi0gICAgNSwgMjU0LCA3NCwgMTc1LCA1LCAyMTMsIDE0NiwgMTc1LCAxLCAyNTMsIDE2NSwgMTc1LCAxLCAyNTUsIDI3LCAxNzUsIDEsIAotICAgIDI1NCwgMjIzLCAxNzUsIDEsIDI1NCwgMjM4LCAxNzUsIDEsIDIzNSwgMTUxLCAxNzUsIDEsIDIzNiwgMzIsIDE3NSwgMSwgCi0gICAgMjE0LCAxMTAsIDE3NSwgMSwgMjE0LCAxMTIsIDE3NSwgMSwgMjM1LCAxNzMsIDE3NSwgMSwgMjM1LCAxNzQsIDE3NSwgMSwgCi0gICAgMjM2LCAxOCwgMTc1LCAxLCAyMzYsIDIwLCAxNzUsIDEsIDI0NSwgMTcsIDE3NSwgMSwgMjQ1LCAyMDQsIDE3NSwgMSwgMjU0LCAKLSAgICAxODgsIDE3NSwgMSwgMjI2LCAxMDgsIDE3NSwgMSwgMjI2LCAxNzcsIDE3NSwgMSwgMjUzLCAxNzgsIDE3NSwgMSwgMjU0LCAKLSAgICAxNDYsIDIzNCwgMTg3LCAxNzUsIDEsIDIzMSwgMjA5LCAyMzQsIDE4NywgMTc1LCAxLCAyNTQsIDE0NiwgMjQzLCA4MiwgCi0gICAgMTc1LCAxLCAyMzEsIDIwOSwgMjQzLCA4MiwgMTc1LCAxLCAyMzQsIDIyOSwgMjI5LCAyMjIsIDE3NSwgMSwgMjIxLCAyMzYsIAotICAgIDI0MywgODIsIDE3NSwgMSwgMjU0LCAxNDYsIDI1MCwgMjE2LCAxNzUsIDEsIDIzMSwgMjA5LCAyNTAsIDIxNiwgMTc1LCAxLCAKLSAgICAyNTQsIDE0NiwgMjM1LCAxMjcsIDE3NSwgMSwgMjMxLCAyMDksIDIzNSwgMTI3LCAxNzUsIDEsIDIxNywgOTgsIDIyOSwgCi0gICAgMjIyLCAxNzUsIDEsIDIxNywgOTgsIDIyMSwgMjM1LCAyMjksIDIyMywgMTc1LCAxLCAyMjEsIDIzNiwgMjM1LCAxMjcsIAotICAgIDE3NSwgMSwgMjU0LCAxNDYsIDIxNSwgMTUyLCAxNzUsIDEsIDIzMSwgMjA5LCAyMTUsIDE1MiwgMTc1LCAxLCAyNTQsIDE0NiwgCi0gICAgMjQ4LCAxMjYsIDE3NSwgMSwgMjMxLCAyMDksIDI0OCwgMTI2LCAxNzUsIDEsIDIzMCwgNTMsIDIyOSwgMTgwLCAxNzUsIDEsIAotICAgIDIyMSwgMjM2LCAyNDgsIDEyNiwgMTc1LCAxLCAyNTQsIDE0NiwgMjE3LCAzMCwgMTc1LCAxLCAyMzEsIDIwOSwgMjE3LCAzMCwgCi0gICAgMTc1LCAxLCAyNTQsIDE0NiwgMjQ4LCAxNDQsIDE3NSwgMSwgMjMxLCAyMDksIDI0OCwgMTQ0LCAxNzUsIDEsIDI0OCwgMTc0LCAKLSAgICAyMjksIDE4MCwgMTc1LCAxLCAyMjEsIDIzNiwgMjQ4LCAxNDQsIDE3NSwgMSwgMjU0LCAxNDYsIDIyNSwgMjI4LCAxNzUsIDEsIAotICAgIDIzMSwgMjA5LCAyMjUsIDIyOCwgMTc1LCAxLCAyNTQsIDE0NiwgMjUyLCAxMTIsIDE3NSwgMSwgMjMxLCAyMDksIDI1MiwgCi0gICAgMTEyLCAxNzUsIDEsIDIzMSwgMTMxLCAxNzUsIDEsIDI1NCwgMTMxLCAyNTIsIDExMiwgMTc1LCAxLCAyMTEsIDUxLCAxNzUsIAotICAgIDEsIDIyMywgMTMzLCAxNzUsIDEsIDI0OCwgMTc0LCAyMzMsIDY3LCAxNzUsIDEsIDIxNCwgMSwgMTc1LCAxLCAyMTcsIDk4LCAKLSAgICAyMjEsIDIxMCwgMTc1LCAxLCAyMzAsIDUzLCAyMjEsIDIxMCwgMTc1LCAxLCAyNDgsIDE3NCwgMjIxLCAyMTAsIDE3NSwgMSwgCi0gICAgMjQxLCAyNDIsIDE3NSwgMSwgMjMwLCA1MywgMjMzLCA2NywgMTc1LCAxLCAyNDQsIDE1NiwgMTc1LCA1LCAyNTQsIDE3NywgCi0gICAgMTc1LCAyNSwgNSwgMjU0LCAyMzMsIDE3NSwgMjUsIDUsIDIzNCwgMTU1LCAyNTQsIDI0MCwgMTc1LCAyNSwgNSwgMjQ3LCAKLSAgICAyMjgsIDI1NCwgMjQwLCAxNzUsIDI1LCA1LCAyMzQsIDE1NSwgMjM1LCAxNzAsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyMzUsIAotICAgIDE3MCwgMTc1LCAyNSwgNSwgMjM0LCAxNTUsIDIyNiwgODgsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyMjYsIDg4LCAxNzUsIAotICAgIDI1LCA1LCAyNDMsIDEyNCwgMTc1LCAyNSwgNSwgMjM0LCAxNSwgMTc1LCAyNSwgNSwgMjQ3LCAyMjgsIDIzNCwgMTUsIDE3NSwgCi0gICAgMjUsIDUsIDIzNCwgMTcsIDI0OCwgNjcsIDE3NSwgMjUsIDUsIDIzNCwgMTYsIDI0MiwgNDcsIDI1NCwgMjMzLCAxNzUsIDI1LCAKLSAgICA1LCAyMzQsIDE2LCAyNDIsIDQ3LCAyNDcsIDIyOCwgMjU0LCAyMzMsIDE3NSwgMjUsIDUsIDIzNCwgMTYsIDI0MiwgNDcsIAotICAgIDI0MywgODEsIDE3NSwgMjUsIDUsIDI0MywgODEsIDE3NSwgMjUsIDUsIDI0NywgMjI4LCAyNDMsIDEyNCwgMTc1LCAyNSwgNSwgCi0gICAgMjQ3LCAyMjgsIDI0MywgODEsIDE3NSwgMjI0LCAxNDEsIDIzMywgMjA3LCAxNjgsIDEzNSwgMjM0LCAyOSwgMjM0LCAyNDYsIAotICAgIDE2OCwgMTM1LCAyMzQsIDEwNiwgMjM0LCAxMjgsIDE2OCwgMTM1LCAyMzQsIDEwNiwgMjM0LCA5OSwgMTY4LCAxMzUsIDIzNCwgCi0gICAgMTA2LCAyMzQsIDk1LCAxNjgsIDEzNSwgMjM0LCAxMDYsIDIzNCwgMTAzLCAxNjgsIDEzNSwgMjM0LCAxMDYsIDIyMywgMTU0LCAKLSAgICAxNjgsIDEzNSwgMjI5LCA1LCAyMjgsIDI0OCwgMTY4LCAxMzUsIDI1MCwgODcsIDI1MCwgMTQ3LCAxNjgsIDEzNSwgMjUwLCAKLSAgICA4NywgMjUwLCA5NSwgMTY4LCAxMzUsIDI1MCwgODcsIDI1MCwgMTQ2LCAxNjgsIDEzNSwgMjE5LCA1OSwgMjE5LCA1OCwgCi0gICAgMTY4LCAxMzUsIDI1MCwgODcsIDI1MCwgODMsIDE2OCwgMTM1LCAyMTAsIDI0NSwgMjEwLCAyNTIsIDE2OCwgMTM1LCAyNDcsIAotICAgIDE0NiwgMjUwLCAxNTQsIDE2OCwgMTM1LCAyMTYsIDQyLCAyMjUsIDIzOCwgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMTYsIDIwMCwgCi0gICAgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMjksIDIwMSwgMTY4LCAxMzUsIDIxNiwgMTU3LCAyMjUsIDExMSwgMTY4LCAxMzUsIAotICAgIDIyOCwgNzUsIDIyOSwgOTgsIDE2OCwgMTM1LCAyNDcsIDE0NiwgMjQ4LCA2OCwgMTY4LCAxMzUsIDIxNiwgNDIsIDIxNywgCi0gICAgNTUsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjE2LCAxMzEsIDE2OCwgMTM1LCAyMTYsIDE1NywgMjE2LCAyMDQsIDE2OCwgMTM1LCAKLSAgICAyMTYsIDE1NywgMjE2LCAxNTQsIDE2OCwgMTM1LCAyMjgsIDc1LCAyMjcsIDIzNywgMTY4LCAxMzUsIDI1MSwgMjA2LCAyNTIsIAotICAgIDE2NCwgMTY4LCAxMzUsIDIyNSwgMTcsIDIyNSwgNDIsIDE2OCwgMTM1LCAyMjUsIDEyMiwgMjI1LCAxMTMsIDE2OCwgMTM1LCAKLSAgICAyNDQsIDQ0LCAyNDQsIDE5NiwgMTY4LCAxMzUsIDIyNSwgMTIyLCAyMjUsIDE0MSwgMTY4LCAxMzUsIDI0NCwgNDQsIDI0NCwgCi0gICAgMTczLCAxNjgsIDEzNSwgMjI1LCAxMjIsIDIyMSwgMjQ3LCAxNjgsIDEzNSwgMjMwLCAxNjIsIDE4NCwgMTY4LCAxMzUsIAotICAgIDIxMCwgMjQ1LCAyMTEsIDc5LCAxNjgsIDEzNSwgMjIyLCAyMTIsIDIyMiwgMTM5LCAxNjgsIDEzNSwgMjIyLCAxNDAsIDE2OCwgCi0gICAgMTM1LCAyMzIsIDE1NywgMjMyLCAyMDYsIDE2OCwgMTM1LCAyMzIsIDk4LCAxNjgsIDEzNSwgMjExLCAyMjgsIDIxMiwgNjEsIAotICAgIDE2OCwgMTM1LCAyMTksIDU5LCAyMjIsIDYsIDE2OCwgMTM1LCAyMTksIDU5LCAyMjIsIDExNCwgMTY4LCAxMzUsIDIxOSwgCi0gICAgNTksIDIxOCwgODIsIDE2OCwgMTM1LCAyNDEsIDY5LCAyNDEsIDE1OSwgMTY4LCAxMzUsIDIzMiwgMTU3LCAyNTAsIDY4LCAKLSAgICAxNjgsIDEzNSwgMTQ0LCAyNTQsIDExNSwgMTY4LCAxMzUsIDI0MSwgNjksIDIyOCwgNzAsIDE2OCwgMTM1LCAyMjYsIDY4LCAKLSAgICAxNjgsIDEzNSwgMjIxLCAyMzAsIDYxLCAxNjgsIDEzNSwgMjMxLCAyMDQsIDI0MiwgMTcsIDE2OCwgMTM1LCAyMjEsIDIzMCwgCi0gICAgMjU1LCA3MywgMTY4LCAxMzUsIDIyMSwgMjMwLCAyNTQsIDEzNiwgMTY4LCAxMzUsIDIyMSwgMjMwLCA3MywgMTY4LCAxMzUsIAotICAgIDIyMSwgMjMwLCAyMzYsIDMzLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDIxNCwgMjE0LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDIxNCwgCi0gICAgMjEyLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDcwLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDIxNCwgMTE4LCAxNjgsIDEzNSwgMjI1LCAKLSAgICAxMjQsIDE2OCwgMjQ5LCA5OCwgMTYsIDI1MiwgMTY1LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDc1LCAxNjgsIDEzNSwgMjIxLCAKLSAgICAyMzAsIDI1NCwgMjQzLCAxNjgsIDEzNSwgMjIxLCAyMzAsIDc2LCAxNjgsIDEzNSwgMjIxLCAyMzAsIDI1NCwgMjAyLCAyMzEsIAotICAgIDE5OCwgMTY4LCAxMzUsIDIyMSwgMjMwLCAyNTQsIDIwMiwgMjMxLCAxOTksIDE2OCwgMTM1LCAyMzMsIDEwNiwgMTY4LCAKLSAgICAxMzUsIDIzMSwgMTk1LCAxNjgsIDEzNSwgMjMxLCAxOTYsIDE2OCwgMTM1LCAyMzEsIDIwNCwgMjQ1LCAxODAsIDE2OCwgCi0gICAgMTM1LCAyMzEsIDIwNCwgMjE2LCAxNTYsIDE2OCwgMTM1LCAyMzEsIDIwNCwgMjE1LCAyMjgsIDE2OCwgMTM1LCAyMzEsIAotICAgIDIwNCwgMjUwLCAxMzUsIDE2OCwgMTM1LCAyMTYsIDE5OCwgMTY4LCAxMzUsIDIyOCwgMjA1LCAxNjgsIDEzNSwgMjExLCA3MywgCi0gICAgMTY4LCAxMzUsIDI0NCwgMzUsIDE2OCwgMjEsIDIxMCwgODYsIDE2OCwgMjEsIDExMCwgMTY4LCAyMSwgMTA1LCAxNjgsIDIxLCAKLSAgICAxNTgsIDE2OCwgMjEsIDE2MSwgMTY4LCAyMSwgMTg5LCAxNjgsIDIxLCAxOTQsIDE2OCwgMjEsIDE5OCwgMTY4LCAyMSwgCi0gICAgMTk1LCAxNjgsIDIxLCAyMDAsIDE2OCwgMTM1LCAyNTQsIDExMSwgMTY4LCAxMzUsIDIzNCwgMTA0LCAyMDksIDIwOSwgMSwgCi0gICAgMjM0LCAyOCwgMjA5LCAyMDksIDEsIDIzNCwgMTA2LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgMjM0LCAxMDYsIDIxNywgNjIsIAotICAgIDIwOSwgMjA5LCAxLCAyMjksIDQsIDIwOSwgMjA5LCAxLCAyNDksIDIzOCwgMjA5LCAyMDksIDEsIDIxOSwgNTksIDIxNywgCi0gICAgNjIsIDIwOSwgMjA5LCAxLCAyMjcsIDEzNCwgMjA5LCAyMDksIDEsIDI0NywgMTQ1LCAyMDksIDIwOSwgMSwgMTExLCAyMDksIAotICAgIDIwOSwgMSwgMjE2LCAxNTcsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyMTYsIDE1NywgMjE3LCA2MiwgMjA5LCAyMDksIDEsIAotICAgIDIyOCwgNzQsIDIwOSwgMjA5LCAxLCAyNTEsIDIwNSwgMjA5LCAyMDksIDEsIDIyNSwgMTYsIDIwOSwgMjA5LCAxLCAyMjUsIAotICAgIDEyMiwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIDIxNywgNjIsIDIwOSwgMjA5LCAxLCAyMjUsIDEyMiwgMjE3LCAKLSAgICA2MiwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIDIxOCwgMzUsIDIwOSwgMjA5LCAxLCAyMzAsIDE2MSwgMjA5LCAyMDksIDEsIAotICAgIDIxMCwgMjQ0LCAyMDksIDIwOSwgMSwgMjMyLCAxNTcsIDIzMiwgMjA2LCAyMDksIDIwOSwgMSwgMjMyLCAxNTcsIDIzMiwgCi0gICAgMTIxLCAyMDksIDIwOSwgMSwgMjExLCAyMjcsIDIwOSwgMjA5LCAxLCAyMTksIDU5LCAyMTgsIDM1LCAyMDksIDIwOSwgMSwgCi0gICAgMjQxLCA2OSwgMjE4LCAzNSwgMjA5LCAyMDksIDEsIDc2LCAyMDksIDIwOSwgMSwgMjQxLCA2OSwgMjE3LCA2MiwgMjA5LCAKLSAgICAyMDksIDI0NSwgMTYzLCAyMDksIDIwOSwgMjUsIDUsIDYxLCAyMDksIDIwOSwgMjUsIDUsIDIzMSwgMjA0LCAyMzQsIDIzNCwgCi0gICAgMjA5LCAyMDksIDI1LCA1LCAyNTUsIDczLCAyMDksIDIwOSwgMjUsIDUsIDI1NCwgMTM2LCAyMDksIDIwOSwgMjUsIDUsIDczLCAKLSAgICAyMDksIDIwOSwgMjUsIDUsIDIzNiwgMzMsIDIwOSwgMjA5LCAyNSwgNSwgMjExLCAxMTcsIDIwOSwgMjA5LCAyNSwgNSwgCi0gICAgMjEwLCAxNjksIDIwOSwgMjA5LCAyNSwgNSwgNzAsIDIwOSwgMjA5LCAyNSwgNSwgMjE0LCAxMTgsIDIwOSwgMjA5LCAyNSwgCi0gICAgNSwgMjMxLCAyMDQsIDIzNCwgMTMsIDIwOSwgMjA5LCAyMjAsIDE0NSwgNSwgMjMyLCAxNTYsIDIwOSwgMjA5LCAyMjAsIAotICAgIDE0NSwgNSwgMjI3LCAxMzQsIDIwOSwgMjA5LCAyNSwgNSwgNzUsIDIwOSwgMjA5LCAyNSwgNSwgMjQ1LCAxOTUsIDIwOSwgCi0gICAgMjA5LCAyNSwgNSwgNzYsIDIwOSwgMjA5LCAyNSwgNSwgMjUzLCAxNjcsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAyMDEsIAotICAgIDIwOSwgMjA5LCAyMzQsIDI5LCAyMzMsIDEzNSwgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDQsIDI0NSwgMTgwLCAyMDksIDIwOSwgCi0gICAgMTM4LCAyMzEsIDIwNCwgMjE2LCAxNTYsIDIwOSwgMjA5LCAxMzgsIDIzMSwgMjA0LCAyMTYsIDExNywgMjA5LCAyMDksIAotICAgIDEzOCwgMjMxLCAyMDQsIDI1MCwgMjIzLCAyMDksIDIwOSwgMjUxLCA0LCA3OCwgMjA5LCAyMDksIDIyOCwgMjE0LCAyMDksIAotICAgIDIwOSwgMjEsIDIxMCwgODYsIDIwOSwgMjA5LCAyMSwgMTEwLCAyMDksIDIwOSwgMjEsIDEwNSwgMjA5LCAyMDksIDIxLCAKLSAgICAxNTgsIDIwOSwgMjA5LCAyMSwgMTYxLCAyMDksIDIwOSwgMjEsIDE4OSwgMjA5LCAyMDksIDIxLCAxOTQsIDIwOSwgMjA5LCAKLSAgICAyMSwgMTk4LCAyMDksIDIwOSwgMjEsIDE5NSwgMjA5LCAyMDksIDIxLCAyMDAsIDIwOSwgMjA5LCAyNDEsIDY5LCAyMjgsIAotICAgIDc0LCAyMDksIDIwOSwgMjQxLCA2OSwgMjMwLCAxNjEsIDIwOSwgMjA5LCAxLCAyMzQsIDEwNywgMjQyLCAxNzQsIDIwOSwgCi0gICAgMjA5LCAxLCAyMzQsIDEwNywgMjI3LCAxMzQsIDYzLCAzLCAyMjYsIDIwNCwgNjMsIDE2NCwgMjQyLCAxMTUsIDIxMSwgMCwgCi0gICAgMjMwLCAyNDgsIDIxNSwgMTg5LCA2MSwgNjMsIDE2NCwgMjQyLCAxMTUsIDIxMSwgMCwgMjMwLCAyNDgsIDI1NSwgMTU5LCAKLSAgICAyMjIsIDIxNiwgMjUyLCA3NywgMTg0LCA2MywgMTY0LCAyNDIsIDExNSwgMjExLCAwLCAyMzAsIDI0OCwgMjU1LCAxNTksIAotICAgIDI0MiwgMTE1LCAyMTUsIDE3MywgMTg0LCA2MywgMTY0LCA2NSwgMjExLCAwLCAyMzAsIDI0OCwgMjMxLCA5MywgMTg0LCA2MywgCi0gICAgMTY0LCAyNDksIDI1MiwgMjExLCAwLCAyMzAsIDI0OCwgMjIwLCAxMDksIDE4NCwgNjMsIDE2NCwgMjUwLCAyMzksIDIxMSwgCi0gICAgMCwgMjMwLCAyNDgsIDIyNSwgMTEyLCAyMjAsIDk2LCAxODQsIDYzLCAxNjQsIDIxMSwgMCwgMjMwLCAyNDgsIDIxNSwgMTczLCAKLSAgICAyMjAsIDk2LCAxODQsIDYzLCAxNjQsIDIyMSwgMjA4LCAyMjAsIDk1LCA2MywgMTY0LCAyNTEsIDEyOCwgMjExLCAwLCAyMzAsIAotICAgIDI0NywgNjMsIDE2NCwgMjUxLCAyMjMsIDIyMCwgMywgMjExLCAwLCAyMzAsIDI0NywgNjMsIDE2NCwgMjM1LCAxOTcsIDIxNSwgCi0gICAgMTcyLCA2MywgMTY0LCAyNDgsIDYxLCAyMTUsIDE3MywgMjUxLCAxMjcsIDYzLCAxNjQsIDIyMCwgOTUsIDYzLCAxNjQsIAotICAgIDIyNywgMTM5LCAyMjAsIDk1LCA2MywgMTY0LCAyMTUsIDE3MywgMjIwLCA5NSwgNjMsIDE2NCwgMjI3LCAxMzksIDIxNSwgCi0gICAgMTczLCAyMjAsIDk1LCA2MywgMTY0LCAyMjIsIDIzNiwgMjUwLCAxMjIsIDIxOCwgMjM2LCAyMjAsIDk1LCA2MywgMTY0LCAKLSAgICAyMjMsIDQyLCAyNDIsIDE0NiwgMjIwLCA5NSwgNjMsIDE2NCwgMjUwLCAyMzksIDI1NSwgMTYzLCAyMjIsIDE0NCwgMjMxLCAKLSAgICA5MiwgMTk5LCAyNTEsIDcsIDYzLCAxNjQsIDI0MiwgMTE1LCAyMTUsIDE3MiwgNjMsIDIzMiwgMTQ0LCA1LCAyNTAsIDE1NSwgCi0gICAgMjIyLCAxNDMsIDYzLCAyMzIsIDE0NCwgNSwgMjMyLCAyNTIsIDIyMiwgMTQzLCA2MywgMjUzLCAyMTIsIDUsIDIyMCwgMTA1LCAKLSAgICAyNDMsIDY1LCAyNTUsIDE2NCwgMjIyLCAxNDMsIDYzLCAyNTMsIDIxMiwgNSwgMjU1LCAxNjEsIDE5MCwgNjMsIDI1MywgCi0gICAgMjEyLCA1LCAyMjEsIDE4MiwgMjE1LCAxNjgsIDYzLCA1LCAyMjMsIDEzMCwgMjQ3LCAxNTksIDI0MywgNjQsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjQ3LCAxNTksIDI0MiwgMTc2LCA2MywgNSwgMjIzLCAxMzAsIDI0NywgMTU5LCAyNDIsIDExNiwgNjMsIDUsIAotICAgIDIyMywgMTMwLCAyMjksIDIxOSwgMjQzLCA2NCwgNjMsIDUsIDIyMywgMTMwLCAyMjksIDIxOSwgMjQyLCAxNzYsIDYzLCA1LCAKLSAgICAyMjMsIDEzMCwgMjQ3LCAxNTksIDIyMywgMTMwLCAyMjksIDIxOCwgNjMsIDIxLCAyMTAsIDg2LCA2MywgMjEsIDExMCwgNjMsIAotICAgIDIxLCAxMDUsIDYzLCAyMSwgMTU4LCA2MywgMjEsIDE2MSwgNjMsIDIxLCAxODksIDYzLCAyMSwgMTk0LCA2MywgMjEsIDE5OCwgCi0gICAgNjMsIDIxLCAxOTUsIDYzLCAyMSwgMjAwLCA2MywgMjEsIDE2MywgMTEwLCA2MywgMjEsIDE2MywgMTA1LCA2MywgMjEsIAotICAgIDE2MywgMTU4LCA2MywgMjEsIDE2MywgMTYxLCA2MywgMjEsIDE2MywgMTg5LCA2MywgMjEsIDE2MywgMTk0LCA2MywgMjEsIAotICAgIDE2MywgMTk4LCA2MywgMjEsIDE2MywgMTk1LCA2MywgMjEsIDE2MywgMjAwLCA2MywgMjEsIDE2MywgMjEwLCA4NiwgNjMsIAotICAgIDE2NCwgMjUxLCAxMzAsIDIyMiwgMTQzLCA2MywgMTY0LCAyMjksIDY4LCAyNTEsIDY4LCAyMjcsIDE0OSwgMjEwLCAyNSwgCi0gICAgNjMsIDE2NCwgMjUwLCAyMzksIDI1NSwgMTYzLCAyMjIsIDE0NCwgMjUxLCA2OSwgMjMwLCAyMDIsIDI1MSwgNywgNjMsIAotICAgIDE2NCwgMjI5LCA2OCwgMjUxLCA2OCwgMjIwLCAxMDYsIDIyMiwgMTQzLCA2MywgMTY0LCAyNTAsIDEzMiwgMjMwLCAyNDcsIAotICAgIDYzLCAxNjQsIDIxNSwgMTg0LCAyNTUsIDE2MCwgNjMsIDE2NCwgMjQyLCAxMDAsIDIyMiwgMTQ0LCAyNDIsIDYzLCA2MywgCi0gICAgMTY0LCAyNDIsIDEwMCwgMjIyLCAxNDQsIDI0MiwgNjksIDYzLCAxNjQsIDI1NCwgMTE2LCAyMzQsIDEyMywgMjQyLCA2MywgCi0gICAgNjMsIDE2NCwgMjU0LCAxMTYsIDIzNCwgMTIzLCAyNDIsIDY5LCA2MywgNSwgMjExLCA2NSwgMjE1LCAxNzEsIDYzLCA1LCAKLSAgICAyMzEsIDE2NywgMjE1LCAxNzEsIDYzLCAxLCAxNzYsIDYzLCAxLCAyMzQsIDEzMiwgNjMsIDEsIDI0MywgMTM1LCA2MywgMSwgCi0gICAgMjQyLCAyNDksIDYzLCAxLCAyMjksIDc3LCA2MywgMSwgMjUxLCAzMywgNjMsIDEsIDI1MCwgMTU3LCA2MywgMSwgMjM1LCAKLSAgICAxNDEsIDYzLCAxLCAyMjcsIDE2NSwgNjMsIDEsIDIxNSwgMTU2LCA2MywgMSwgMjE1LCAxNDQsIDYzLCAxLCAyNDgsIDEzNSwgCi0gICAgNjMsIDEsIDI0OCwgMTE5LCA2MywgMSwgMjI4LCAxMTAsIDYzLCAxLCAyMTcsIDEwNSwgNjMsIDEsIDIxNiwgMjA4LCA2MywgCi0gICAgMSwgMjQ4LCAyMjEsIDYzLCAxLCAyNDgsIDI1LCA2MywgMSwgMTk3LCA2MywgMSwgMTkwLCA2MywgMSwgMjI1LCAxNDcsIDYzLCAKLSAgICAxLCAyNTIsIDE5MSwgNjMsIDEsIDI1MiwgMTgsIDYzLCAxLCAxODQsIDYzLCAxLCAyMTUsIDE4MywgNjMsIDEsIDIxNSwgCi0gICAgMTc1LCA2MywgMSwgMjQ2LCAzOCwgNjMsIDEsIDI0NiwgMzMsIDYzLCAxLCAyMTIsIDY1LCA2MywgMSwgMjEwLCA4MiwgNjMsIAotICAgIDEsIDIxMCwgMTE2LCA2MywgMSwgMjU1LCAxNjYsIDYzLCAxLCAxOTEsIDYzLCAxLCAyMDUsIDYzLCAxLCAyMzMsIDEzNSwgCi0gICAgNjMsIDEsIDIyMCwgMTAyLCA2MywgMSwgMjE4LCAyMjMsIDYzLCAxLCAyMDYsIDYzLCAxLCAxNjIsIDYzLCAxLCA2MSwgNjMsIAotICAgIDEsIDIzMywgMjMxLCA2MywgMSwgMjQ0LCA3NywgMjA1LCA2MywgMSwgMjM0LCA0NiwgNjMsIDEsIDIyMiwgMTc5LCA2MywgCi0gICAgMjUsIDUsIDI1NSwgNzMsIDYzLCAyNSwgNSwgNzMsIDYzLCAyNSwgNSwgMjM2LCAzMywgNjMsIDI1LCA1LCA3MCwgNjMsIDI1LCAKLSAgICA1LCAyMTQsIDExOCwgNjMsIDI1LCA1LCAxNDksIDE1MywgNjMsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCA2MywgMjUsIDUsIAotICAgIDE0OSwgMTU2LCA2MywgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDYzLCAyNSwgNSwgNzUsIDYzLCAyNSwgNSwgMjQ1LCAyMDksIAotICAgIDYzLCAyNSwgNSwgNzYsIDYzLCAyNSwgNSwgMjI2LCAxODMsIDYzLCA1LCAyMjIsIDIyMSwgMjE4LCA4NCwgMjI5LCA3OCwgCi0gICAgMjIyLCAyMTEsIDYzLCA1LCAyMjIsIDIxNiwgMjUyLCA3NiwgNjMsIDI1LCA1LCAyMjMsIDQ5LCA3MywgNjMsIDI1LCA1LCAKLSAgICAyMjMsIDQ5LCAyMzYsIDMzLCA2MywgNSwgMjI3LCAxNDksIDIxMCwgMjYsIDIyOSwgMjI2LCAyNDgsIDIyMSwgNjMsIDUsIAotICAgIDIxOSwgNzEsIDIzMywgNjAsIDYzLCAxNjQsIDI0MiwgMjksIDYzLCAxNjQsIDIyNiwgNTcsIDYzLCA1LCAyMzMsIDYzLCAKLSAgICAyMjIsIDE0MywgNjMsIDUsIDIxMSwgNzAsIDIyMiwgMTQzLCA2MywgNSwgMjMzLCA2NCwgMjE1LCAxODQsIDI1MSwgNywgNjMsIAotICAgIDUsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDUsIDI0MiwgMTE5LCAyNTEsIDgsIDIyMywgNDAsIDYzLCA1LCAyNDIsIDExOSwgCi0gICAgMjMxLCA4NSwgMjIzLCA0MCwgNjMsIDUsIDIzNSwgMTkzLCAyMzEsIDk1LCAyNTEsIDcsIDYzLCAyMTgsIDczLCA1LCAyMzMsIAotICAgIDY0LCAyMTUsIDE4NCwgMjUxLCA3LCA2MywgMjE4LCA3MywgNSwgMjMxLCA5NSwgMjUxLCA3LCA2MywgMjE4LCA3MywgNSwgCi0gICAgMjM1LCAxOTMsIDIzMSwgOTUsIDI1MSwgNywgNjMsIDIxOCwgNzMsIDEsIDE3NiwgNjMsIDIxOCwgNzMsIDEsIDIzNCwgMTMyLCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjQzLCAxMzUsIDYzLCAyMTgsIDczLCAxLCAyNDIsIDI0OSwgNjMsIDIxOCwgNzMsIDEsIDIyOSwgCi0gICAgNzcsIDYzLCAyMTgsIDczLCAxLCAyNTEsIDMzLCA2MywgMjE4LCA3MywgMSwgMjUwLCAxNTcsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMzUsIDE0MSwgNjMsIDIxOCwgNzMsIDEsIDIyNywgMTY1LCA2MywgMjE4LCA3MywgMSwgMjE1LCAxNTYsIDYzLCAyMTgsIAotICAgIDczLCAxLCAyMTUsIDE0NCwgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMTM1LCA2MywgMjE4LCA3MywgMSwgMjQ4LCAxMTksIDYzLCAKLSAgICAyMTgsIDczLCAxLCAyMjgsIDExMCwgNjMsIDIxOCwgNzMsIDEsIDIxNywgMTA1LCA2MywgMjE4LCA3MywgMSwgMjE2LCAyMDgsIAotICAgIDYzLCAyMTgsIDczLCAxLCAyNDgsIDIyMSwgNjMsIDIxOCwgNzMsIDEsIDI0OCwgMjUsIDYzLCAyMTgsIDczLCAxLCAxOTcsIAotICAgIDYzLCAyMTgsIDczLCAxLCAxOTAsIDYzLCAyMTgsIDczLCAxLCAyMjUsIDE0NywgNjMsIDIxOCwgNzMsIDEsIDI1MiwgMTkxLCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjUyLCAxOCwgNjMsIDIxOCwgNzMsIDEsIDE4NCwgNjMsIDIxOCwgNzMsIDEsIDIxNSwgMTgzLCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjE1LCAxNzUsIDYzLCAyMTgsIDczLCAxLCAyNDYsIDM4LCA2MywgMjE4LCA3MywgMSwgMjQ2LCAKLSAgICAzMywgNjMsIDIxOCwgNzMsIDEsIDIxMiwgNjUsIDYzLCAyMTgsIDczLCAxLCAyMTAsIDgyLCA2MywgMjE4LCA3MywgMSwgCi0gICAgMjEwLCAxMTYsIDYzLCAyMTgsIDczLCAxLCAyNTUsIDE2NiwgNjMsIDIxOCwgNzMsIDEsIDE5MSwgNjMsIDIxOCwgNzMsIDEsIAotICAgIDIwNSwgNjMsIDIxOCwgNzMsIDEsIDIzMywgMTM1LCA2MywgMjE4LCA3MywgMSwgMjIwLCAxMDIsIDYzLCAyMTgsIDczLCAxLCAKLSAgICAyMTgsIDIyMywgNjMsIDIxOCwgNzMsIDEsIDIwNiwgNjMsIDIxOCwgNzMsIDEsIDE2MiwgNjMsIDIxOCwgNzMsIDEsIDYxLCAKLSAgICA2MywgMjE4LCA3MywgMSwgMjMzLCAyMzEsIDYzLCAyMTgsIDczLCAxLCAyNDQsIDc3LCAyMTIsIDY1LCA2MywgMjE4LCA3MywgCi0gICAgMSwgMjQ0LCA3NywgMTkxLCA2MywgMjE4LCA3MywgMSwgMjQ0LCA3NywgMjA1LCA2MywgMjMzLCAyMTgsIDIyMiwgMTQxLCAKLSAgICAyMzQsIDEzMiwgNjMsIDIzMywgMjE4LCAyMjIsIDE0MSwgMjM0LCAxMzMsIDI1MSwgNjksIDIzMCwgMjAyLCAyNTEsIDcsIAotICAgIDYzLCAyNTAsIDI1MiwgNSwgMTE0LCAyNTIsIDcwLCA2MywgMjUwLCAyNTIsIDUsIDE5MiwgMjUyLCA3MCwgNjMsIDI1MCwgCi0gICAgMjUyLCA1LCAyNTAsIDI1MywgMjE3LCAyMCwgNjMsIDI1MCwgMjUyLCA1LCAyMjEsIDIwNywgMjU1LCAxNjUsIDYzLCAxNiwgCi0gICAgMjQ2LCA5MSwgMjUxLCAxMjUsIDYzLCAxNiwgMjIzLCAxMjksIDIyMiwgMjIyLCA2MywgMTYsIDIyNiwgNzcsIDI0MywgNjMsIAotICAgIDYzLCAxNiwgMjIzLCAxMjksIDIyMiwgMjIzLCAyMjMsIDQyLCAyNDIsIDE0NSwgNjMsIDE2LCAyMjUsIDExMiwgMTkwLCA2MywgCi0gICAgMTYsIDIyOCwgNTksIDI1MSwgMTI1LCA2MywgMTYsIDIyOCwgNTksIDI1MSwgMTI2LCAyMjcsIDEzOSwgMjU1LCAxNjIsIDYzLCAKLSAgICAxNiwgMjI4LCA1OSwgMjUxLCAxMjYsIDI0MiwgMTE3LCAyNTUsIDE2MiwgNjMsIDE2LCAyMjgsIDU5LCAyNTEsIDEyNiwgCi0gICAgMjUxLCA2OSwgMjU1LCAxNjIsIDYzLCA1LCAyMjMsIDEzMCwgMjI5LCAyMTksIDIyMywgMTMwLCAyNDcsIDE1OCwgNjMsIDUsIAotICAgIDIyMywgMTMwLCAyMjksIDIxOSwgMjQyLCAxMTYsIDYzLCAxNjQsIDI1MSwgMTI5LCAyMjAsIDMsIDI0MiwgMjE1LCAyMzAsIAotICAgIDI0OCwgMjIzLCA0MSwgNjMsIDE2NCwgMjMwLCAxNjMsIDIxMSwgMCwgMjQyLCAyMTUsIDIzMCwgMjQ4LCAyMjMsIDQxLCA2MywgCi0gICAgMTY0LCAyMjcsIDEzOSwgMjE1LCAxNzIsIDYzLCAxNjQsIDY1LCAyNTEsIDE1MiwgMjIyLCAyMTMsIDIxMSwgMCwgMjMwLCAKLSAgICAyNDgsIDIzMSwgOTMsIDE4NCwgNjMsIDE2NCwgMjQ5LCAyNTIsIDI1MSwgMTUyLCAyMjIsIDIxMywgMjExLCAwLCAyMzAsIAotICAgIDI0OCwgMjIwLCAxMDksIDE4NCwgMjIyLCAyNTAsIDIxNywgMjU1LCA1MCwgMjMzLCA0NSwgMjE3LCAyNTUsIDUwLCAyMjIsIAotICAgIDI1MCwgMjE3LCAyNTUsIDUsIDIsIDI0NywgMTE4LCAyMzMsIDQ1LCAyMTcsIDI1NSwgNSwgMiwgMjQ3LCAxMTgsIDYzLCAKLSAgICAxNjQsIDIzMywgNTUsIDIzMSwgOTYsIDIyMiwgMTQzLCA2MywgMTY0LCAyMTUsIDI1MCwgMjMxLCA5NiwgMjIyLCAxNDMsIAotICAgIDY4LCAxLCAxNzYsIDY4LCAxLCAyMzQsIDEzMiwgNjgsIDEsIDI0MywgMTM1LCA2OCwgMSwgMjQyLCAyNDksIDY4LCAxLCAKLSAgICAyMjksIDc3LCA2OCwgMSwgMjUxLCAzMywgNjgsIDEsIDI1MCwgMTU3LCA2OCwgMSwgMjM1LCAxNDEsIDY4LCAxLCAyMzUsIAotICAgIDExNCwgNjgsIDEsIDIyNywgMTY1LCA2OCwgMSwgMjI4LCA3NiwgNjgsIDEsIDIxNSwgMTU2LCA2OCwgMSwgMjE1LCAxNDQsIAotICAgIDY4LCAxLCAyNDgsIDEzNSwgNjgsIDEsIDI0OCwgMTE5LCA2OCwgMSwgMjI4LCAxMTAsIDY4LCAxLCAyMTcsIDEwNSwgNjgsIAotICAgIDEsIDIxNiwgMjA4LCA2OCwgMSwgMjQ4LCAyMjEsIDY4LCAxLCAyNDgsIDI1LCA2OCwgMSwgMTk3LCA2OCwgMSwgMTkwLCA2OCwgCi0gICAgMSwgMjI1LCAxNDcsIDY4LCAxLCAyNTIsIDE5MSwgNjgsIDEsIDI1MiwgMTgsIDY4LCAxLCAxODQsIDY4LCAxLCAxOTEsIDY4LCAKLSAgICAxLCAyMDUsIDY4LCAxLCAyMzMsIDEzNSwgNjgsIDEsIDIxMiwgNjUsIDY4LCAxLCAyMDYsIDY4LCAxLCAxNjIsIDY4LCAxLCAKLSAgICAyMzIsIDE4NCwgNjgsIDEsIDYxLCA2OCwgMSwgMjIwLCA4NiwgNjEsIDY4LCAxLCA3MywgNjgsIDEsIDIzNiwgMzMsIDY4LCAKLSAgICAxLCA3MCwgNjgsIDEsIDIxNCwgMTE4LCA2OCwgMSwgNzUsIDY4LCAxLCAyMzAsIDE1MSwgNzUsIDY4LCAxLCA3NiwgNjgsIDEsIAotICAgIDI1MywgMTkyLCA2OCwgMjUsIDUsIDIxNywgNjQsIDI1NSwgNzMsIDY4LCAyNSwgNSwgMjU1LCA3MywgNjgsIDI1LCA1LCA3MywgCi0gICAgNjgsIDI1LCA1LCAyMzYsIDMzLCA2OCwgMjUsIDUsIDcwLCA2OCwgMjUsIDUsIDIxNCwgMTE4LCA2OCwgMjUsIDUsIDc1LCAKLSAgICA2OCwgMjUsIDUsIDI1NCwgMjAxLCA2OCwgMjUsIDUsIDIzMCwgMTUxLCAyMzYsIDMzLCA2OCwgMjUsIDUsIDIzMCwgMTUxLCAKLSAgICA3NiwgNjgsIDI1LCA1LCAxNjAsIDQ4LCA2OCwgNSwgMjU0LCA3NSwgNjgsIDUsIDU5LCA1MSwgNjgsIDUsIDIxMywgMTQ3LCAKLSAgICA2OCwgNSwgMjEzLCAxNTIsIDY4LCA1LCAyNTMsIDIzNSwgNjgsIDExNiwgNSwgMTQ3LCAxOTEsIDY4LCAxMTYsIDUsIDE0NywgCi0gICAgMjA1LCA2OCwgMTE2LCA1LCAxNDcsIDIxMiwgNjUsIDY4LCAxMTYsIDUsIDE0NywgMTYyLCA2OCwgMSwgMjQyLCAxMzIsIAotICAgIDIwNiwgNjgsIDIxLCAyMTAsIDg2LCA2OCwgMjEsIDExMCwgNjgsIDIxLCAxMDUsIDY4LCAyMSwgMTU4LCA2OCwgMjEsIDE2MSwgCi0gICAgNjgsIDIxLCAxODksIDY4LCAyMSwgMTk0LCA2OCwgMjEsIDE5OCwgNjgsIDIxLCAxOTUsIDY4LCAyMSwgMjAwLCA2OCwgNSwgCi0gICAgMjMyLCAxOTIsIDIyMSwgMTcyLCA2OCwgNSwgMjIxLCAxNzIsIDY4LCAxNiwgMjMyLCAxNTMsIDY4LCAxNiwgMjQ5LCAyMTMsIAotICAgIDY4LCAxNiwgMjU0LCAyMjAsIDY4LCAxNiwgMjQzLCA0OCwgNjgsIDEsIDIyMCwgMTAyLCA2OCwgMSwgMjE4LCAyMjMsIDY4LCAKLSAgICAxLCAxNDksIDE1MywgNjgsIDEsIDE0OSwgMjIyLCAxODAsIDY4LCAxLCAxNDksIDE1NiwgNjgsIDEsIDE0OSwgMjMyLCAxODUsIAotICAgIDY4LCAyNSwgNSwgMTQ5LCAxNTMsIDY4LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MCwgNjgsIDI1LCA1LCAxNDksIDE1NiwgNjgsIAotICAgIDI1LCA1LCAxNDksIDIzMiwgMTg1LCA2OCwgMSwgMjMwLCAxNTEsIDIyOSwgNzcsIDY4LCAxLCAyMzAsIDE1MSwgMjM1LCAKLSAgICAxMTQsIDY4LCAxLCAyMzAsIDE1MSwgMjUyLCAxMTEsIDY4LCAxLCAyMzAsIDE1MSwgMjUyLCAxMDYsIDY4LCAxMTYsIDUsIAotICAgIDIzMCwgMTUxLCAxNDcsIDE5NywgNjgsIDExNiwgNSwgMjMwLCAxNTEsIDE0NywgMTg0LCA2OCwgMTE2LCA1LCAyMzAsIDE1MSwgCi0gICAgMTQ3LCAyMzMsIDEzNSwgNjgsIDEsIDIyMCwgMTA4LCAyMzQsIDIxMywgMjIwLCAxMDIsIDY4LCAyNSwgNSwgMjIwLCAxMDgsIAotICAgIDIzNCwgMjEzLCAyNDUsIDU1LCA2OCwgMTM4LCAxNjQsIDIyMCwgMTA4LCAyMzQsIDIxMywgMjQxLCAyNDcsIDY4LCAxMzgsIAotICAgIDE2NCwgMjIwLCAxMDgsIDIzNCwgMjEzLCAyMzQsIDE4MywgMjI1LCAxMjEsIDY4LCAxLCAyMTIsIDcsIDIyNCwgMTA4LCAKLSAgICAyMzQsIDIxMywgMjE2LCAyMDgsIDY4LCAxLCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIDIxMywgMjI0LCAxMTQsIDY4LCAyNSwgCi0gICAgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDI0NSwgNTUsIDY4LCAyNSwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAKLSAgICAyMTMsIDIxNCwgMjE0LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjksIDY4LCA1LCAyMTIsIDcsIAotICAgIDIyNCwgMTA4LCAyMzQsIDIxMywgMjE2LCAyOCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMDgsIDIzNCwgMjEzLCAyMTYsIDI3LCAKLSAgICA2OCwgNSwgMjEyLCA3LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIxNiwgMjYsIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTA4LCAyMzQsIAotICAgIDIxMywgMjE2LCAyNSwgNjgsIDEsIDI0NSwgMjE5LCAyMjQsIDEwOCwgMjM0LCAyMTMsIDIyOCwgMTEwLCA2OCwgMSwgMjQ1LCAKLSAgICAyMTksIDIyNCwgMTA4LCAyMzQsIDIxMywgMjEwLCAxNzYsIDY4LCAxLCAyNDUsIDIxOSwgMjI0LCAxMDgsIDIzNCwgMjEzLCAKLSAgICAyNDIsIDIxNywgNjgsIDI1LCA1LCAyNDMsIDU5LCAyMzQsIDIxMywgNzMsIDY4LCAyNSwgNSwgMjM0LCAxODgsIDIyNiwgCi0gICAgMjM0LCA2OCwgMjUsIDUsIDIzNCwgMTg4LCA3MCwgNjgsIDI1LCA1LCAyMzQsIDE4OCwgMjQ1LCAyMDksIDY4LCAxLCAyMjAsIAotICAgIDg2LCAxNzYsIDY4LCAxLCAyMjAsIDg2LCAyMzQsIDEzMiwgNjgsIDEsIDIyMCwgODYsIDI0MywgMTM1LCA2OCwgMSwgMjIwLCAKLSAgICA4NiwgMjUxLCAzMywgNjgsIDEsIDIyMCwgODYsIDIxMCwgMTE2LCA2OCwgMSwgMjIwLCA4NiwgMjI3LCAxNjUsIDY4LCAxLCAKLSAgICAyMjAsIDg2LCAyNDgsIDIyMSwgNjgsIDEsIDIyMCwgODYsIDE5NywgNjgsIDEsIDIyMCwgODYsIDIyNSwgMTQ3LCA2OCwgMSwgCi0gICAgMjIwLCA4NiwgMjQ0LCAxOTYsIDY4LCAxLCAyMjAsIDg2LCAyNTIsIDE5MSwgNjgsIDEsIDIyMCwgODYsIDIxNiwgMjA4LCAKLSAgICA2OCwgMSwgMjIwLCA4NiwgMTYyLCA2OCwgMTE2LCA1LCAyMjAsIDg2LCAxNDcsIDIxMiwgNjUsIDY4LCAyNSwgNSwgMjIwLCAKLSAgICA4NiwgMjU1LCA3MywgNjgsIDI1LCA1LCAyMjAsIDg2LCA3NSwgNjgsIDI1LCA1LCAyMjAsIDg2LCAxNjAsIDQ4LCA2OCwgMjUsIAotICAgIDUsIDIyMCwgODYsIDQwLCAyMTEsIDExNywgNjgsIDUsIDIyMCwgODYsIDIxNiwgMjgsIDY4LCA1LCAyMjAsIDg2LCAyMTYsIAotICAgIDI3LCA2OCwgNSwgMjIwLCA4NiwgMjE2LCAyNSwgNjgsIDUsIDIyMCwgODYsIDIxNiwgMjQsIDY4LCA1LCAyMjAsIDg2LCAKLSAgICAyNDksIDE1MiwgMjE2LCAyOCwgNjgsIDUsIDIyMCwgODYsIDI0OSwgMTUyLCAyMTYsIDI3LCA2OCwgNSwgMjIwLCA4NiwgCi0gICAgMjQ5LCAxNTIsIDI0NSwgMTUzLCAyMTYsIDMwLCA2OCwgMSwgMjIyLCAxMjgsIDIyNiwgNjMsIDI0NCwgMTk2LCA2OCwgNSwgCi0gICAgMjIyLCAxMjgsIDIyNiwgNjMsIDIxNiwgMjUsIDY4LCAyMjAsIDg2LCAyMSwgMjEwLCA4NiwgNjgsIDIyMCwgODYsIDIxLCAKLSAgICAxMTAsIDY4LCAyMjAsIDg2LCAyMSwgMTA1LCA2OCwgMjIwLCA4NiwgMjEsIDE1OCwgNjgsIDIyMCwgODYsIDIxLCAxNjEsIAotICAgIDY4LCAyMjAsIDg2LCAyMSwgMTg5LCA2OCwgMjIwLCA4NiwgMjEsIDE5NCwgNjgsIDIyMCwgODYsIDIxLCAxOTgsIDY4LCAKLSAgICAyMjAsIDg2LCAyMSwgMTk1LCA2OCwgMjIwLCA4NiwgMjEsIDIwMCwgNjgsIDUsIDIzNCwgMTI2LCAyMTYsIDI5LCA2OCwgNSwgCi0gICAgMjM0LCAxMjYsIDIxNiwgMjcsIDY4LCAyNSwgNSwgMjU0LCAxOTAsIDYxLCA2OCwgMjUsIDUsIDI1NCwgMTkwLCAyNTQsIAotICAgIDIwMSwgNjgsIDE2LCAyMjAsIDg2LCAxMTAsIDY4LCAxNiwgMjIwLCA4NiwgMjQ1LCAzMCwgOTgsIDYsIDEsIDI1NCwgMTIzLCAKLSAgICA5OCwgNiwgMSwgMjUyLCAxNTIsIDk4LCA2LCAxLCAyNDMsIDEwNiwgOTgsIDYsIDEsIDI0NywgMTI4LCA5OCwgNiwgMSwgCi0gICAgMjQ1LCAxNTAsIDk4LCA2LCAxLCAyMTMsIDE2MCwgOTgsIDYsIDEsIDIxMCwgODksIDk4LCA2LCAxLCAyMTcsIDYwLCA5OCwgCi0gICAgNiwgMSwgMjM1LCAyNTUsIDk4LCA2LCAxLCAyMzQsIDIzNCwgOTgsIDYsIDEsIDIzMywgODEsIDk4LCA2LCAxLCAyMzEsIAotICAgIDE4NSwgOTgsIDYsIDEsIDIyOSwgMTk1LCA5OCwgNiwgMSwgMjI2LCAxOTYsIDk4LCA2LCAxLCAyMjYsIDE3LCA5OCwgNiwgMSwgCi0gICAgMjEwLCA3OCwgOTgsIDYsIDEsIDIyMywgMTcxLCA5OCwgNiwgMSwgMjIxLCAyNDMsIDk4LCA2LCAxLCAyMTcsIDUwLCA5OCwgCi0gICAgNiwgMSwgMjE0LCAxOTAsIDk4LCA2LCAxLCAyMjUsIDE0MCwgOTgsIDYsIDEsIDIzNCwgMTIxLCA5OCwgNiwgMSwgMjQyLCAKLSAgICAyNDEsIDk4LCA2LCAxLCAyMjQsIDczLCA5OCwgNiwgMSwgMjIwLCAyMCwgOTgsIDYsIDEsIDI1MCwgOTcsIDk4LCA2LCAxLCAKLSAgICAyNTEsIDcsIDk4LCA2LCAxLCAyMzUsIDEwMCwgOTgsIDYsIDEsIDI1MCwgNDAsIDk4LCA2LCAxLCAyNTAsIDE0MywgOTgsIDYsIAotICAgIDEsIDIxMSwgMTYzLCA5OCwgNiwgMSwgMjM1LCAxMTEsIDk4LCA2LCAxLCAyNDIsIDQzLCA5OCwgNiwgMSwgMjQxLCAyMzgsIAotICAgIDk4LCA2LCAxLCAyNDEsIDE3NSwgOTgsIDYsIDEsIDIxMiwgMjIsIDk4LCA2LCAxLCAyNDIsIDQsIDk4LCA2LCAxLCAyNDEsIAotICAgIDY1LCA5OCwgNiwgMSwgMjEwLCAyNDYsIDk4LCA2LCAxLCAyNTQsIDIzMiwgOTgsIDEsIDI1NCwgMTIzLCA5OCwgMSwgMjUyLCAKLSAgICAxNTIsIDk4LCAxLCAyNDMsIDEwNiwgOTgsIDEsIDI0NywgMTI4LCA5OCwgMSwgMjQ1LCAxNTAsIDk4LCAxLCAyMTMsIDE2MCwgCi0gICAgOTgsIDEsIDIxMCwgODksIDk4LCAxLCAyMTcsIDYwLCA5OCwgMSwgMjM1LCAyNTUsIDk4LCAxLCAyMzQsIDIzNCwgOTgsIDEsIAotICAgIDIzMywgODEsIDk4LCAxLCAyMzEsIDE4NSwgOTgsIDEsIDIyOSwgMTk1LCA5OCwgMSwgMjI2LCAxOTYsIDk4LCAxLCAyMjYsIAotICAgIDE3LCA5OCwgMSwgMjEwLCA3OCwgOTgsIDEsIDIyMywgMTcxLCA5OCwgMSwgMjIxLCAyNDMsIDk4LCAxLCAyMTcsIDUwLCA5OCwgCi0gICAgMSwgMjE0LCAxOTAsIDk4LCAxLCAyMjUsIDE0MCwgOTgsIDEsIDIzNCwgMTIxLCA5OCwgMSwgMjQyLCAyNDEsIDk4LCAxLCAKLSAgICAyMjQsIDczLCA5OCwgMSwgMjIwLCAyMCwgOTgsIDEsIDI1MCwgOTcsIDk4LCAxLCAyNTEsIDcsIDk4LCAxLCAyMzUsIDEwMCwgCi0gICAgOTgsIDEsIDI1MCwgNDAsIDk4LCAxLCAyNTAsIDE0MywgOTgsIDEsIDIxMSwgMTYzLCA5OCwgMSwgMjM1LCAxMTEsIDk4LCAxLCAKLSAgICAyNDIsIDQzLCA5OCwgMSwgMjQxLCAyMzgsIDk4LCAxLCAyNDEsIDE3NSwgOTgsIDEsIDIxMiwgMjIsIDk4LCAxLCAyNDIsIDQsIAotICAgIDk4LCAxLCAyNDEsIDY1LCA5OCwgMSwgMjQ0LCAxMjEsIDk4LCAxLCAyMTAsIDI0NiwgOTgsIDEsIDI0NSwgMTY1LCA5OCwgMSwgCi0gICAgMjE1LCA5NCwgMjQzLCAxMDYsIDk4LCAxLCAyNTQsIDE5NiwgOTgsIDIyNiwgMTUsIDIyMCwgMTM3LCA1OCwgMSwgOTgsIAotICAgIDIyOSwgMTk1LCA5OCwgMSwgMjU0LCAyMzIsIDk4LCAxLCAyNDIsIDMsIDUwLCA5OCwgMSwgMjMzLCAxMjcsIDUwLCAyNCwgCi0gICAgMTAwLCAyMzQsIDU4LCAyNCwgMTAwLCAyMTgsIDIxNSwgMjQsIDEwMCwgMjI4LCAyMjYsIDI0LCAxMDAsIDIxNiwgMTAxLCAKLSAgICAyNCwgMTAwLCAyMTgsIDIwNCwgMjQsIDEwMCwgMjIzLCAyNiwgMjQsIDEwMCwgMjMwLCAyMTcsIDI0LCAxMDAsIDIyNSwgOTUsIAotICAgIDI0LCAxMDAsIDIxOCwgMjEyLCAyNCwgMTAwLCAyMTksIDE0OCwgMjQsIDEwMCwgMjE4LCAyMDksIDI0LCAxMDAsIDIzNiwgCi0gICAgNTYsIDI0LCAxMDAsIDI1MCwgNDYsIDI0LCAxMDAsIDIxOCwgMjE5LCAyNCwgMTAwLCAyNTAsIDEwNiwgMjQsIDEwMCwgMjM0LCAKLSAgICAxMTAsIDI0LCAxMDAsIDIxNiwgMTczLCAyNCwgMTAwLCAyMjUsIDEzMSwgMjQsIDEwMCwgMjQxLCAxNzIsIDI0LCAxMDAsIAotICAgIDIyOCwgMjIyLCAyNCwgMTAwLCAyMTgsIDIxMywgMjQsIDEwMCwgMjI4LCAyMTYsIDI0LCAxMDAsIDIyOCwgMjIwLCAyNCwgCi0gICAgMTAwLCAyMTYsIDk4LCAyNCwgMTAwLCAyMjMsIDE0LCAyNCwgMTAwLCAyMTgsIDIxMSwgMjQsIDEwMCwgMjIzLCAyNCwgMjQsIAotICAgIDEwMCwgMjM0LCAyMTgsIDI0LCAxMDAsIDIzMCwgMjEwLCAyNCwgMTAwLCAyMzQsIDIyMSwgMjQsIDEwMCwgMjI1LCA5MCwgCi0gICAgMjQsIDEwMCwgMjI1LCA4OCwgMjQsIDEwMCwgMjI1LCA3NiwgMjQsIDEwMCwgMjI1LCA4NCwgMjQsIDEwMCwgMjI1LCA4MiwgCi0gICAgMjQsIDEwMCwgMjI1LCA3OSwgMjQsIDEwMCwgMjI1LCA4MSwgMjQsIDEwMCwgMjI1LCA3OCwgMjQsIDEwMCwgMjI1LCA4MywgCi0gICAgMjQsIDEwMCwgMjI1LCA5MywgMjQsIDEwMCwgMjI1LCA5NCwgMjQsIDEwMCwgMjI1LCA3NywgMjQsIDEwMCwgMjI1LCA4NywgCi0gICAgMjQsIDEwMCwgMjM0LCAyMTksIDI0LCAxMDAsIDIzNCwgMjE3LCAyNCwgMTAwLCAyMTksIDE0MSwgMjQsIDEwMCwgMjE5LCAKLSAgICAxMzksIDI0LCAxMDAsIDIxOSwgMTMxLCAyNCwgMTAwLCAyMTksIDEzNCwgMjQsIDEwMCwgMjE5LCAxNDAsIDI0LCAxMDAsIAotICAgIDIxOSwgMTM2LCAyNCwgMTAwLCAyMTksIDEzNSwgMjQsIDEwMCwgMjE5LCAxMzMsIDI0LCAxMDAsIDIxOSwgMTQ0LCAyNCwgCi0gICAgMTAwLCAyMTksIDE0NiwgMjQsIDEwMCwgMjE5LCAxNDcsIDI0LCAxMDAsIDIxOSwgMTQyLCAyNCwgMTAwLCAyMTksIDEzMiwgCi0gICAgMjQsIDEwMCwgMjE5LCAxMzcsIDI0LCAxMDAsIDIxOSwgMTQ1LCAyNCwgMTAwLCAyNTAsIDkwLCAyNCwgMTAwLCAyNTAsIDg4LCAKLSAgICAyNCwgMTAwLCAyNTAsIDE2OCwgMjQsIDEwMCwgMjUwLCAxNjYsIDI0LCAxMDAsIDIyNiwgMzIsIDI0LCAxMDAsIDIzNiwgNTEsIAotICAgIDI0LCAxMDAsIDIzNiwgNDIsIDI0LCAxMDAsIDIzNiwgNTAsIDI0LCAxMDAsIDIzNiwgNDcsIDI0LCAxMDAsIDIzNiwgNDUsIAotICAgIDI0LCAxMDAsIDIzNiwgNDksIDI0LCAxMDAsIDIxOCwgMjE2LCAyNCwgMTAwLCAyMzYsIDU0LCAyNCwgMTAwLCAyMzYsIDU1LCAKLSAgICAyNCwgMTAwLCAyMzYsIDQzLCAyNCwgMTAwLCAyMzYsIDQ4LCAyNCwgMTAwLCAyMTEsIDI2LCAyNCwgMTAwLCAyNTAsIDQ1LCAKLSAgICAyNCwgMTAwLCAyNTAsIDkxLCAyNCwgMTAwLCAyNTAsIDg5LCAyNCwgMTAwLCAyNTAsIDE2OSwgMjQsIDEwMCwgMjUwLCAxNjcsIAotICAgIDI0LCAxMDAsIDI1MCwgMTA0LCAyNCwgMTAwLCAyNTAsIDEwNSwgMjQsIDEwMCwgMjUwLCA5MiwgMjQsIDEwMCwgMjUwLCAKLSAgICAxNzAsIDI0LCAxMDAsIDIyNSwgMTI5LCAyNCwgMTAwLCAyMzQsIDIyMCwgMjQsIDEwMCwgMjE4LCAyMTcsIDI0LCAxMDAsIAotICAgIDIxMSwgMzIsIDI0LCAxMDAsIDIzNCwgNDksIDI0LCAxMDAsIDIyOCwgMjE4LCAyNCwgMTAwLCAyMjgsIDIyNCwgMjQsIDEwMCwgCi0gICAgMjI4LCAyMjMsIDI0LCAxMDAsIDIxNiwgOTUsIDI0LCAxMDAsIDI0NCwgMTAzLCAyNCwgMTQzLCAyNDQsIDEwMywgMjQsIAotICAgIDE0MywgNjEsIDI0LCAxNDMsIDI1NCwgMjQzLCAyNCwgMTQzLCAxOTEsIDI0LCAxNDMsIDIxMSwgOTIsIDI0LCAxNDMsIDI0NSwgCi0gICAgMTE3LCAyNCwgMTQzLCA3NSwgMjQsIDE0MywgMjExLCAzNiwgMjQsIDE0MywgMjExLCA0NywgMjQsIDE0MywgNzYsIDI0LCAKLSAgICAxNDMsIDIxMiwgNjUsIDI0LCAxNDMsIDIxMiwgNjIsIDI0LCAxNDMsIDIyNiwgMjM0LCAyNCwgMTQzLCAyMTAsIDI0NCwgMjQsIAotICAgIDE0MywgNzAsIDI0LCAxNDMsIDIxMiwgMTEsIDI0LCAxNDMsIDIxMiwgMjIsIDI0LCAxNDMsIDIxMSwgMjUwLCAyNCwgMTQzLCAKLSAgICAyMTAsIDIxMiwgMjQsIDE0MywgMjQ1LCA1NSwgMjQsIDE0MywgMjExLCA4LCAyNCwgMTQzLCA3MywgMjQsIDE0MywgMjU1LCAKLSAgICAxNTcsIDI0LCAxNDMsIDI1NSwgMTU2LCAyNCwgMTQzLCAyMTEsIDEwNiwgMjQsIDE0MywgMjExLCAxMDQsIDI0LCAxNDMsIAotICAgIDI0NSwgMTE1LCAyNCwgMTQzLCAyNDUsIDExNCwgMjQsIDE0MywgMjQ1LCAxMTYsIDI0LCAxNDMsIDIxMSwgMzUsIDI0LCAKLSAgICAxNDMsIDIxMSwgMzQsIDI0LCAxNDMsIDIyNywgODQsIDI0LCAxNDMsIDIyNywgODUsIDI0LCAxNDMsIDIyNywgNzgsIDI0LCAKLSAgICAxNDMsIDIyNywgODMsIDI0LCAxNDMsIDIyNywgODEsIDI0LCAxNDMsIDIxMCwgMjM4LCAyNCwgMTQzLCAyMTAsIDIzNywgMjQsIAotICAgIDE0MywgMjEwLCAyMzYsIDI0LCAxNDMsIDIxMCwgMjM5LCAyNCwgMTQzLCAyMTAsIDI0MCwgMjQsIDE0MywgMjE1LCAzMCwgCi0gICAgMjQsIDE0MywgMjE1LCAyOSwgMjQsIDE0MywgMjE1LCAyNywgMjQsIDE0MywgMjE1LCAyNCwgMjQsIDE0MywgMjE1LCAyNSwgCi0gICAgMjQsIDE0MywgMjEwLCAyMTEsIDI0LCAxNDMsIDIxMCwgMjA4LCAyNCwgMTQzLCAyMTAsIDIwOSwgMjQsIDE0MywgMjEwLCAKLSAgICAyMDMsIDI0LCAxNDMsIDIxMCwgMjA0LCAyNCwgMTQzLCAyMTAsIDIwNSwgMjQsIDE0MywgMjEwLCAyMDcsIDI0LCAxNDMsIAotICAgIDI0NSwgNDksIDI0LCAxNDMsIDI0NSwgNTEsIDI0LCAxNDMsIDIxMSwgNywgMjQsIDE0MywgMjQwLCAxNTMsIDI0LCAxNDMsIAotICAgIDI0MCwgMTQ1LCAyNCwgMTQzLCAyNDAsIDE0OCwgMjQsIDE0MywgMjQwLCAxNDYsIDI0LCAxNDMsIDI0MCwgMTUwLCAyNCwgCi0gICAgMTQzLCAyNDAsIDE1MiwgMjQsIDE0MywgMjU0LCAzNCwgMjQsIDE0MywgMjU0LCAzMSwgMjQsIDE0MywgMjU0LCAyOSwgMjQsIAotICAgIDE0MywgMjU0LCAzMCwgMjQsIDE0MywgMjE4LCAyMjAsIDI0LCAxNDMsIDI1NSwgMTU4LCAyNCwgMTQzLCAyMTEsIDEwNSwgCi0gICAgMjQsIDE0MywgMjExLCAzMywgMjQsIDE0MywgMjI3LCA4MCwgMjQsIDE0MywgMjI3LCA3OSwgMjQsIDkwLCAyMzQsIDU4LCAKLSAgICAyNCwgOTAsIDIxOCwgMjE1LCAyNCwgOTAsIDIzNCwgNTEsIDI0LCA5MCwgMjI4LCAyMjYsIDI0LCA5MCwgMjI4LCAyMjQsIAotICAgIDI0LCA5MCwgMjI4LCAyMjMsIDI0LCA5MCwgMjE2LCAxMDEsIDI0LCA5MCwgMjIzLCAyNiwgMjQsIDkwLCAyMjMsIDIxLCAyNCwgCi0gICAgOTAsIDIyMywgMTgsIDI0LCA5MCwgMjIzLCAxMSwgMjQsIDkwLCAyMjMsIDYsIDI0LCA5MCwgMjIzLCAxLCAyNCwgOTAsIAotICAgIDIyMywgMTIsIDI0LCA5MCwgMjIzLCAyNCwgMjQsIDkwLCAyMzAsIDIxNywgMjQsIDkwLCAyMjUsIDk1LCAyNCwgOTAsIDIyNSwgCi0gICAgODQsIDI0LCA5MCwgMjE5LCAxNDgsIDI0LCA5MCwgMjE4LCAyMDksIDI0LCA5MCwgMjM2LCA1NiwgMjQsIDkwLCAyNTAsIDQ2LCAKLSAgICAyNCwgOTAsIDI1MCwgMTA2LCAyNCwgOTAsIDIzNCwgMTEwLCAyNCwgOTAsIDIxNiwgMTczLCAyNCwgOTAsIDIyNSwgMTMxLCAKLSAgICAyNCwgOTAsIDI0MSwgMTcyLCAyNCwgOTAsIDIzNCwgNTIsIDI0LCA5MCwgMjM0LCA1MCwgMjQsIDkwLCAyMjgsIDIyMiwgMjQsIAotICAgIDkwLCAyMjgsIDIxNiwgMjQsIDkwLCAyMjgsIDIxOCwgMjQsIDkwLCAyMjgsIDIyMSwgMjQsIDkwLCAyMjgsIDIxNywgMjQsIAotICAgIDkwLCAyMTYsIDk4LCAyNCwgOTAsIDIxNiwgOTUsIDI0LCA5MCwgMjIzLCAxOSwgMjQsIDkwLCAyMjMsIDE0LCAyNCwgOTAsIAotICAgIDIyMywgMCwgMjQsIDkwLCAyMjIsIDI1NSwgMjQsIDkwLCAyMTgsIDIxMSwgMjQsIDkwLCAyMjMsIDE2LCAyNCwgOTAsIDIyMywgCi0gICAgMTUsIDI0LCA5MCwgMjIzLCA4LCAyNCwgOTAsIDIyMywgMTAsIDI0LCA5MCwgMjIzLCAyMywgMjQsIDkwLCAyMjMsIDMsIDI0LCAKLSAgICA5MCwgMjIzLCAxMywgMjQsIDkwLCAyMjMsIDIyLCAyNCwgOTAsIDIyMiwgMjU0LCAyNCwgOTAsIDIzMCwgMjEzLCAyNCwgOTAsIAotICAgIDIzMCwgMjA4LCAyNCwgOTAsIDIzMCwgMjEwLCAyNCwgOTAsIDIzMCwgMjA3LCAyNCwgOTAsIDIzMCwgMjA1LCAyNCwgOTAsIAotICAgIDIzMCwgMjExLCAyNCwgOTAsIDIzMCwgMjE2LCAyNCwgOTAsIDIzMCwgMjE0LCAyNCwgOTAsIDIzNCwgMjIxLCAyNCwgOTAsIAotICAgIDIyNSwgODYsIDI0LCA5MCwgMjI1LCA4NywgMjQsIDkwLCAyMjUsIDkyLCAyNCwgOTAsIDIzNCwgMjE5LCAyNCwgOTAsIDIxOSwgCi0gICAgMTQxLCAyNCwgOTAsIDIxOSwgMTMxLCAyNCwgOTAsIDIxOSwgMTM0LCAyNCwgOTAsIDIxOSwgMTM2LCAyNCwgOTAsIDIyNiwgCi0gICAgMzIsIDI0LCA5MCwgMjM2LCA1MSwgMjQsIDkwLCAyMzYsIDQ0LCAyNCwgOTAsIDIxOCwgMjE2LCAyNCwgOTAsIDIzNiwgNTIsIAotICAgIDI0LCA5MCwgMjExLCAyNiwgMjQsIDkwLCAyMTEsIDIyLCAyNCwgOTAsIDIxMSwgMjMsIDI0LCA5MCwgMjI1LCAxMjksIDI0LCAKLSAgICA5MCwgMjM0LCAyMjAsIDI0LCA5MCwgMjQxLCAxNzAsIDI0LCA5MCwgMjQxLCAxNjgsIDI0LCA5MCwgMjQxLCAxNzEsIDI0LCAKLSAgICA5MCwgMjQxLCAxNjksIDI0LCA5MCwgMjExLCAzMiwgMjQsIDkwLCAyMzQsIDU0LCAyNCwgOTAsIDIzNCwgNTMsIDI0LCA5MCwgCi0gICAgMjM0LCA1NywgMjQsIDkwLCAyMzQsIDU1LCAyNCwgOTAsIDIzNCwgNTYsIDI0LCA5MCwgMjE4LCAyMTMsIDI5LCAzLCAxNjIsIAotICAgIDI5LCAzLCAyNDAsIDIyMiwgMjksIDMsIDI0MSwgMTgwLCAyOSwgMywgMjQyLCA0NiwgMjksIDMsIDI0MSwgMjIwLCAyOSwgMywgCi0gICAgMjQxLCAyMzgsIDI5LCAzLCAyNDEsIDY4LCAyOSwgMywgMjQxLCA2NywgMjksIDMsIDIzMywgMTM1LCAyOSwgMywgMjMyLCAKLSAgICA5OCwgMjksIDMsIDIzMiwgMjQxLCAyOSwgMywgMjMzLCAxMzQsIDI5LCAzLCAyMzMsIDUwLCAyOSwgMywgMjMzLCA1OCwgMjksIAotICAgIDMsIDIzMiwgMTU2LCAyOSwgMywgMjMyLCA3MCwgMjksIDMsIDI0MSwgMTg5LCAyOSwgMywgMjQxLCAxODMsIDI5LCAzLCAKLSAgICAyNDEsIDE4NSwgMjksIDMsIDI0MSwgMTg4LCAyOSwgMywgMjQxLCAxODYsIDI5LCAzLCAyNDEsIDE4NywgMjksIDMsIDI0MSwgCi0gICAgMTg0LCAyOSwgMywgMjQxLCAxODIsIDI5LCAzLCAxODQsIDI5LCAzLCAyMzAsIDEwMiwgMjksIDMsIDIzMCwgMjMwLCAyOSwgCi0gICAgMywgMjMxLCAyMzcsIDI5LCAzLCAyMzEsIDgwLCAyOSwgMywgMjMxLCA5MSwgMjksIDMsIDIzMCwgMTYxLCAyOSwgMywgMjMwLCAKLSAgICA0MiwgMjksIDMsIDIxNywgMTYzLCAyOSwgMywgMjE3LCAxNTcsIDI5LCAzLCAyMTcsIDE1OSwgMjksIDMsIDIxNywgMTYyLCAKLSAgICAyOSwgMywgMjE3LCAxNjAsIDI5LCAzLCAyMTcsIDE2MSwgMjksIDMsIDIxNywgMTU4LCAyOSwgMywgMjE3LCAxNTYsIDI5LCAKLSAgICAzLCAyMDUsIDI5LCAzLCAyMjIsIDE0MCwgMjksIDMsIDIyMywgMzUsIDI5LCAzLCAyMjMsIDE4NCwgMjksIDMsIDIyMywgCi0gICAgMTA4LCAyOSwgMywgMjIzLCAxMjgsIDI5LCAzLCAyMjIsIDIxMSwgMjksIDMsIDIyMiwgMTA5LCAyOSwgMywgMjA2LCAyOSwgCi0gICAgMywgMjE4LCA4MywgMjksIDMsIDIxOSwgMTkxLCAyOSwgMywgMjIyLCAzMSwgMjksIDMsIDIyMSwgMTcwLCAyOSwgMywgMjIxLCAKLSAgICAxODEsIDI5LCAzLCAyMTksIDU4LCAyOSwgMywgMjE3LCAyNTMsIDI5LCAzLCAyMjAsIDEwMiwgMjksIDMsIDIxOSwgMjI1LCAKLSAgICAyOSwgMywgMjIwLCAzMiwgMjksIDMsIDIyMCwgOTgsIDI5LCAzLCAyMjAsIDYxLCAyOSwgMywgMjIwLCA2MywgMjksIDMsIAotICAgIDIyMCwgNywgMjksIDMsIDIxOSwgMjA4LCAyOSwgMywgMjI0LCA4OCwgMjksIDMsIDIyNCwgMzAsIDI5LCAzLCAyMjQsIDUzLCAKLSAgICAyOSwgMywgMjI0LCA4NywgMjksIDMsIDIyNCwgNjgsIDI5LCAzLCAyMjQsIDY5LCAyOSwgMywgMjI0LCA0MiwgMjksIDMsIAotICAgIDIyNCwgNDEsIDI5LCAzLCAyMjMsIDI0MiwgMjksIDMsIDIyMywgMjM4LCAyOSwgMywgMjIzLCAyNDEsIDI5LCAzLCAyMjMsIAotICAgIDIzOSwgMjksIDMsIDIyMywgMjQwLCAyOSwgMywgMjI0LCA2NSwgMjksIDMsIDIyNCwgNTksIDI5LCAzLCAyMjQsIDYxLCAyOSwgCi0gICAgMywgMjI0LCA2NCwgMjksIDMsIDIyNCwgNjIsIDI5LCAzLCAyMjQsIDYzLCAyOSwgMywgMjI0LCA2MCwgMjksIDMsIDIyNCwgCi0gICAgNTgsIDI5LCAzLCAyMjQsIDU0LCAyOSwgMywgMjI0LCA1NywgMjksIDMsIDIyNCwgNTUsIDI5LCAzLCAyMjQsIDU2LCAyOSwgCi0gICAgMywgMjUyLCAxOTEsIDI5LCAzLCAyNTEsIDEyNSwgMjksIDMsIDI1MiwgNiwgMjksIDMsIDI1MiwgMTg5LCAyOSwgMywgMjUyLCAKLSAgICA2NiwgMjksIDMsIDI1MiwgNzUsIDI5LCAzLCAyNTEsIDIwNSwgMjksIDMsIDI1MSwgODMsIDI5LCAzLCAyMTQsIDI3LCAyOSwgCi0gICAgMywgMjEyLCAxMTYsIDI5LCAzLCAyMTMsIDE3NiwgMjksIDMsIDIxNCwgMjYsIDI5LCAzLCAyMTMsIDI1MCwgMjksIDMsIAotICAgIDIxMywgMjU1LCAyOSwgMywgMjEzLCAxMzgsIDI5LCAzLCAyMTIsIDEwNywgMjksIDMsIDIxNywgMTA1LCAyOSwgMywgMjE1LCAKLSAgICAxMTgsIDI5LCAzLCAyMTYsIDExNywgMjksIDMsIDIxNywgMTAxLCAyOSwgMywgMjE3LCAxMSwgMjksIDMsIDIxNywgMjIsIAotICAgIDI5LCAzLCAxMTEsIDI5LCAzLCAyMTUsIDgwLCAyOSwgMywgMjUxLCAzMywgMjksIDMsIDI0OSwgMTEyLCAyOSwgMywgMjUwLCAKLSAgICA1MSwgMjksIDMsIDI1MSwgMzIsIDI5LCAzLCAyNTAsIDE4MiwgMjksIDMsIDI1MCwgMTkwLCAyOSwgMywgMjQ5LCAyMzgsIAotICAgIDI5LCAzLCAyNDksIDgxLCAyOSwgMywgMjExLCAxNjUsIDI5LCAzLCAyMTEsIDE0MSwgMjksIDMsIDIxMSwgMTU3LCAyOSwgMywgCi0gICAgMjExLCAxNjQsIDI5LCAzLCAyMTEsIDE2MSwgMjksIDMsIDIxMSwgMTYyLCAyOSwgMywgMjExLCAxNDgsIDI5LCAzLCAyMTEsIAotICAgIDE0NywgMjksIDMsIDIxMSwgMTM2LCAyOSwgMywgMjExLCAxMzIsIDI5LCAzLCAyMTEsIDEzNSwgMjksIDMsIDIxMSwgMTMzLCAKLSAgICAyOSwgMywgMjExLCAxMzQsIDI5LCAzLCAxOTcsIDI5LCAzLCAyMjcsIDIzNywgMjksIDMsIDIyOCwgMjMzLCAyOSwgMywgCi0gICAgMjI5LCAyMjUsIDI5LCAzLCAyMjksIDEwMywgMjksIDMsIDIyOSwgMTA3LCAyOSwgMywgMjI4LCA3NCwgMjksIDMsIDIyNywgCi0gICAgMTc0LCAyOSwgMywgMjI3LCAxNjUsIDI5LCAzLCAyMjcsIDEyOCwgMjksIDMsIDIyNywgMTQ4LCAyOSwgMywgMjI3LCAxNjQsIAotICAgIDI5LCAzLCAyMjcsIDE1NSwgMjksIDMsIDIyNywgMTU2LCAyOSwgMywgMjI3LCAxMzQsIDI5LCAzLCAyMjcsIDExOSwgMjksIAotICAgIDMsIDI0MiwgMTgwLCA2MSwgMjksIDMsIDI0MiwgMTgwLCA3MCwgMjksIDMsIDI0MiwgMTgwLCA3MywgMjksIDMsIDI0MiwgCi0gICAgMTgwLCAyNTUsIDczLCAyOSwgMywgMjQyLCAxODAsIDI0NSwgMjA5LCAyOSwgMywgMjQyLCAxODAsIDc1LCAyOSwgMywgMjQyLCAKLSAgICAxODAsIDc2LCAyOSwgMywgMjQyLCAxODAsIDIxMiwgNjUsIDI5LCAzLCAxNzYsIDI5LCAzLCAyMzMsIDIxNywgMjksIDMsIAotICAgIDIzNCwgOTIsIDI5LCAzLCAyMzUsIDEwLCAyOSwgMywgMjM0LCAxODEsIDI5LCAzLCAyMzQsIDE4MiwgMjksIDMsIDIzNCwgCi0gICAgMjgsIDI5LCAzLCAyMzQsIDI3LCAyOSwgMywgMjMzLCAxODIsIDI5LCAzLCAyMzMsIDE3NiwgMjksIDMsIDIzMywgMTgxLCAKLSAgICAyOSwgMywgMjMzLCAxNzcsIDI5LCAzLCAyMzMsIDE3OCwgMjksIDMsIDIzMywgMTcxLCAyOSwgMywgMjMzLCAxNjUsIDI5LCAKLSAgICAzLCAyMzMsIDE2NywgMjksIDMsIDIzMywgMTcwLCAyOSwgMywgMjMzLCAxNjgsIDI5LCAzLCAyMzMsIDE2OSwgMjksIDMsIAotICAgIDIzMywgMTY2LCAyOSwgMywgMjMzLCAxNjQsIDI5LCAzLCAyMzMsIDE2MCwgMjksIDMsIDIzMywgMTYzLCAyOSwgMywgMjMzLCAKLSAgICAxNjEsIDI5LCAzLCAyMzMsIDE2MiwgMjksIDMsIDIxMiwgNjUsIDI5LCAzLCAyMTEsIDE5NSwgMjksIDMsIDIxMSwgMjUwLCAKLSAgICAyOSwgMywgMjEyLCA2NCwgMjksIDMsIDIxMiwgMTcsIDI5LCAzLCAyMTIsIDIyLCAyOSwgMywgMjExLCAyMjcsIDI5LCAzLCAKLSAgICAyMTEsIDIyNiwgMjksIDMsIDIyNSwgMTM5LCA2MSwgMjksIDMsIDIyNSwgMTM5LCA3MCwgMjksIDMsIDIyNSwgMTM5LCA3MywgCi0gICAgMjksIDMsIDIyNSwgMTM5LCAyNTUsIDczLCAyOSwgMywgMjI1LCAxMzksIDI0NSwgMjA5LCAyOSwgMywgMjI1LCAxMzksIDc1LCAKLSAgICAyOSwgMywgMjI1LCAxMzksIDc2LCAyOSwgMywgMjEwLCAxMTYsIDI5LCAzLCAyMTAsIDEzLCAyOSwgMywgMjEwLCA0NCwgMjksIAotICAgIDMsIDIxMCwgMTE1LCAyOSwgMywgMjEwLCA5MiwgMjksIDMsIDIxMCwgOTQsIDI5LCAzLCAyMTAsIDIzLCAyOSwgMywgMjEwLCAKLSAgICAwLCAyOSwgMywgMjEwLCA4MiwgMjksIDMsIDIxMCwgNjIsIDI5LCAzLCAyMTAsIDY5LCAyOSwgMywgMjEwLCA4MSwgMjksIDMsIAotICAgIDIxMCwgNzMsIDI5LCAzLCAyMTAsIDc0LCAyOSwgMywgMjEwLCA2NywgMjksIDMsIDIxMCwgNTMsIDI5LCAzLCAxOTEsIDI5LCAKLSAgICAzLCAyMTAsIDIxMiwgMjksIDMsIDIxMSwgOCwgMjksIDMsIDIxMSwgMTAzLCAyOSwgMywgMjExLCA0NCwgMjksIDMsIDIxMSwgCi0gICAgNDcsIDI5LCAzLCAyMTAsIDI0NCwgMjksIDMsIDIxMCwgMjM1LCAyOSwgMywgMjQ4LCAyMjEsIDI5LCAzLCAyNDYsIDc4LCAKLSAgICAyOSwgMywgMjQ4LCAzLCAyOSwgMywgMjQ4LCAyMjAsIDI5LCAzLCAyNDgsIDc3LCAyOSwgMywgMjQ4LCA5MCwgMjksIDMsIAotICAgIDI0NywgMTQ1LCAyOSwgMywgMjQ2LCA0NywgMjksIDMsIDI0OCwgMTM1LCAyOSwgMywgMjQ4LCAxMDAsIDI5LCAzLCAyNDgsIAotICAgIDExMiwgMjksIDMsIDI0OCwgMTM0LCAyOSwgMywgMjQ4LCAxMjIsIDI5LCAzLCAyNDgsIDEyMywgMjksIDMsIDI0OCwgMTA1LCAKLSAgICAyOSwgMywgMjQ4LCA5MSwgMjksIDMsIDIzNSwgMTQxLCAyOSwgMywgMjM1LCA1MSwgMjksIDMsIDIzNSwgMTA4LCAyOSwgMywgCi0gICAgMjM1LCAxNDAsIDI5LCAzLCAyMzUsIDEyNCwgMjksIDMsIDIzNSwgMTI2LCAyOSwgMywgMjM1LCA2OCwgMjksIDMsIDIzNSwgCi0gICAgMzEsIDI5LCAzLCAyNDMsIDEzNSwgMjksIDMsIDI0MiwgMTEzLCAyOSwgMywgMjQyLCAyMTQsIDI5LCAzLCAyNDMsIDEzMiwgCi0gICAgMjksIDMsIDI0MywgNTUsIDI5LCAzLCAyNDMsIDYyLCAyOSwgMywgMjQyLCAxNzQsIDI5LCAzLCAyNDIsIDE3MywgMjksIDMsIAotICAgIDI0MiwgNzgsIDI5LCAzLCAyNDIsIDc0LCAyOSwgMywgMjQyLCA3NywgMjksIDMsIDI0MiwgNzUsIDI5LCAzLCAyNDIsIDc2LCAKLSAgICAyOSwgMywgMjQzLCAyOSwgMjksIDMsIDI0MywgOSwgMjksIDMsIDI0MywgMTksIDI5LCAzLCAyNDMsIDI4LCAyOSwgMywgCi0gICAgMjQzLCAyMywgMjksIDMsIDI0MywgMjQsIDI5LCAzLCAyNDMsIDEzLCAyOSwgMywgMjQyLCAyNTQsIDI5LCAzLCAyMTYsIAotICAgIDIwOCwgMjksIDMsIDIxNiwgMTM2LCAyOSwgMywgMjE2LCAxNzUsIDI5LCAzLCAyMTYsIDIwNywgMjksIDMsIDIxNiwgMTk0LCAKLSAgICAyOSwgMywgMjE2LCAxOTUsIDI5LCAzLCAyMTYsIDE1NiwgMjksIDMsIDIxNiwgMTI4LCAyOSwgMywgMjUwLCAxNTcsIDI5LCAKLSAgICAzLCAyNTAsIDY5LCAyOSwgMywgMjUwLCAxMTAsIDI5LCAzLCAyNTAsIDE1NiwgMjksIDMsIDI1MCwgMTI4LCAyOSwgMywgCi0gICAgMjUwLCAxMzEsIDI5LCAzLCAyNTAsIDg2LCAyOSwgMywgMjUwLCA1OCwgMjksIDMsIDIyNSwgMTQ3LCAyOSwgMywgMjI1LCAKLSAgICAxMTQsIDI5LCAzLCAyMjUsIDEzMywgMjksIDMsIDIyNSwgMTQ2LCAyOSwgMywgMjI1LCAxMzUsIDI5LCAzLCAyMjUsIDEzNiwgCi0gICAgMjksIDMsIDIyNSwgMTIxLCAyOSwgMywgMjI1LCAxMTAsIDI5LCAzLCAyMTUsIDE4MywgMjksIDMsIDIxNSwgMTYzLCAyOSwgCi0gICAgMywgMjE1LCAxNjcsIDI5LCAzLCAyMTUsIDE4MiwgMjksIDMsIDIxNSwgMTc3LCAyOSwgMywgMjE1LCAxNzgsIDI5LCAzLCAKLSAgICAyMTUsIDE2NiwgMjksIDMsIDIxNSwgMTYxLCAyOSwgMywgMjE1LCAzOSwgMjksIDMsIDIxNSwgMzEsIDI5LCAzLCAyMTUsIAotICAgIDM1LCAyOSwgMywgMjE1LCAzOCwgMjksIDMsIDIxNSwgMzYsIDI5LCAzLCAyMTUsIDM3LCAyOSwgMywgMjE1LCAzMywgMjksIAotICAgIDMsIDIxNSwgMzIsIDI5LCAzLCAyNDQsIDE5NiwgMjksIDMsIDI0MywgMjM0LCAyOSwgMywgMjQ0LCAxMjEsIDI5LCAzLCAKLSAgICAyNDQsIDE5NSwgMjksIDMsIDI0NCwgMTQ3LCAyOSwgMywgMjQ0LCAxNTQsIDI5LCAzLCAyNDQsIDQzLCAyOSwgMywgMjQzLCAKLSAgICAyMTMsIDI5LCAzLCAxOTAsIDI5LCAzLCAyMjQsIDE1MCwgMjksIDMsIDIyNSwgMTA4LCAyOSwgMywgMjI2LCA4OSwgMjksIDMsIAotICAgIDIyNSwgMjExLCAyOSwgMywgMjI1LCAyMjEsIDI5LCAzLCAyMjUsIDE2LCAyOSwgMywgMjI0LCAxMTQsIDI5LCAzLCAyMjIsIAotICAgIDk5LCAyOSwgMywgMjMwLCAzMSwgMjksIDMsIDI0MywgMjA3LCAyOSwgMzgsIDI0MywgNTMsIDIyLCAyNSwgMjMzLCAyMywgCi0gICAgNzgsIDI5LCAzOCwgMjUsIDIzMywgMjMsIDc4LCAyOSwgMzgsIDI0MywgNTMsIDc4LCAyOSwgMjIxLCAxNzMsIDc4LCAyOSwgCi0gICAgMjExLCAyMDgsIDI5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDI5LCAyNDksIDIxOSwgMjksIDIyMCwgMTUwLCAyOSwgMjQ5LCAKLSAgICAyMjYsIDI5LCAyMjQsIDE5OSwgMjQ5LCAyMjYsIDI5LCAyMjQsIDEzLCA3OCwgMjksIDIyNiwgMTUsIDIyMCwgMTM3LCAyOSwgCi0gICAgMjEsIDExMCwgMjksIDIxLCAxMDUsIDI5LCAyMSwgMTU4LCAyOSwgMjEsIDE2MSwgMjksIDIxLCAxODksIDI5LCAyMSwgMTk0LCAKLSAgICAyOSwgMjEsIDE5OCwgMjksIDIxLCAxOTUsIDI5LCAyMSwgMjAwLCAyOSwgNTQsIDIxNiwgMjQ3LCAyOSwgNTQsIDIxNSwgNzMsIAotICAgIDI5LCA1NCwgMjE2LCAxNjIsIDI5LCA1NCwgMjQ0LCAxNSwgMjksIDU0LCAyNDQsIDExNCwgMjksIDU0LCAyMTksIDExMSwgCi0gICAgMjksIDU0LCAyMjAsIDExNiwgMjksIDU0LCAyNDUsIDE4NCwgMjksIDU0LCAyMjgsIDE5NSwgMjksIDU0LCAyNDAsIDIxMCwgCi0gICAgMjksIDU0LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDI5LCAzLCAyMjEsIDE3NywgMjMwLCA0MiwgMjksIDMsIDIzMCwgMzgsIDI5LCAKLSAgICAzLCAyMzAsIDM5LCAyOSwgMywgMjMwLCA0MCwgMjksIDMsIDIyMSwgMTc3LCAyNTEsIDgzLCAyOSwgMywgMjUxLCA4MCwgMjksIAotICAgIDMsIDI1MSwgODEsIDI5LCAzLCAyNTEsIDgyLCAyOSwgMywgMjIxLCAxNzcsIDI0MywgMjEzLCAyOSwgMywgMjQzLCAyMDksIAotICAgIDI5LCAzLCAyNDMsIDIxMCwgMjksIDMsIDI0MywgMjExLCAyOSwgMywgMjIxLCAxNzcsIDIyNCwgMTE0LCAyOSwgMywgMjI0LCAKLSAgICAxMTAsIDI5LCAzLCAyMjQsIDExMSwgMjksIDMsIDIyNCwgMTEyLCAyOSwgMjE2LCAzMSwgMTY0LCAyMTAsIDI0NywgMjksIAotICAgIDIxNiwgMzEsIDE2NCwgMjQ4LCA0MSwgMjksIDIxNiwgMzEsIDE2NCwgMjIyLCAyMzgsIDI5LCAyMTYsIDMxLCAxNjQsIDIxOSwgCi0gICAgMjUxLCAyMjIsIDIzOCwgMjksIDIxNiwgMzEsIDE2NCwgMjQ3LCAyMzUsIDI5LCAyMTYsIDMxLCAxNjQsIDIzNCwgMTY0LCAKLSAgICAyOSwgMjE2LCAzMSwgMTY0LCAyNTAsIDk0LCAyOSwgMjE2LCAzMSwgMTY0LCAyNDEsIDE3NywgMjksIDIxNiwgMzEsIDE2NCwgCi0gICAgMjQ4LCA0MCwgMjksIDIxNiwgMzEsIDE2NCwgMjMzLCAxOTQsIDE2OSwgMSwgNjEsIDE2OSwgMSwgNzUsIDE2OSwgMSwgNzMsIAotICAgIDE2OSwgMSwgNzYsIDE2OSwgMSwgNzAsIDE2OSwgMSwgMjE0LCAxMDUsIDE2OSwgMSwgMjQzLCAxMzUsIDE2OSwgMSwgMTc2LCAKLSAgICAxNjksIDEsIDI0MywgNjIsIDE2OSwgMSwgMjQyLCAyMTQsIDE2OSwgMSwgMjQyLCAxNzQsIDE2OSwgMSwgMjQyLCAxMTMsIAotICAgIDE2OSwgMSwgMjQyLCA3OSwgMTY5LCAxLCAxNjIsIDE2OSwgMSwgMjQxLCAyMzgsIDE2OSwgMSwgMjQxLCAxODAsIDE2OSwgMSwgCi0gICAgMjQxLCA2OCwgMTY5LCAxLCAyNDAsIDIyMiwgMTY5LCAxLCAyNDAsIDIwMSwgMTY5LCAxLCAyMzMsIDEzNSwgMTY5LCAxLCAKLSAgICAyMzMsIDU4LCAxNjksIDEsIDIzMiwgMjQxLCAxNjksIDEsIDIzMiwgMTU2LCAxNjksIDEsIDIzMiwgOTgsIDE2OSwgMSwgCi0gICAgMjMyLCA3MSwgMTY5LCAxLCAxODQsIDE2OSwgMSwgMjMxLCA5MSwgMTY5LCAxLCAyMzAsIDIzMCwgMTY5LCAxLCAyMzAsIAotICAgIDE2MSwgMTY5LCAxLCAyMzAsIDEwMiwgMTY5LCAxLCAxOTcsIDE2OSwgMSwgMjQxLCA5MCwgMTY5LCAxLCAyMjksIDIxMywgCi0gICAgMTY5LCAxLCAyMjksIDEwNywgMTY5LCAxLCAyMjgsIDIzMywgMTY5LCAxLCAyMjgsIDc0LCAxNjksIDEsIDIyNywgMjM3LCAKLSAgICAxNjksIDEsIDIyNywgMTc2LCAxNjksIDEsIDIyNCwgMjksIDE2OSwgMSwgMjI0LCAxNiwgMTY5LCAxLCAyMjQsIDksIDE2OSwgCi0gICAgMSwgMjI0LCAxLCAxNjksIDEsIDIyMywgMjQ2LCAxNjksIDEsIDIyMywgMjQ0LCAxNjksIDEsIDIwNiwgMTY5LCAxLCAyMjIsIAotICAgIDkxLCAxNjksIDEsIDIyMSwgMTgxLCAxNjksIDEsIDIxOSwgMTkxLCAxNjksIDEsIDIxOSwgNTgsIDE2OSwgMSwgMjE4LCA4MywgCi0gICAgMTY5LCAxLCAyMTgsIDIsIDE2OSwgMSwgMjQ4LCAyMjEsIDE2OSwgMSwgMjE3LCAxMDUsIDE2OSwgMSwgMjQ4LCA5MCwgMTY5LCAKLSAgICAxLCAyMTcsIDIyLCAxNjksIDEsIDI0OCwgMywgMTY5LCAxLCAyMTYsIDExNywgMTY5LCAxLCAyNDcsIDE0NSwgMTY5LCAxLCAKLSAgICAyNDYsIDc4LCAxNjksIDEsIDI0NiwgNTAsIDE2OSwgMSwgMjQ3LCAxNTYsIDE2OSwgMSwgMjE2LCA1OSwgMTY5LCAxLCAyMTYsIAotICAgIDU4LCAxNjksIDEsIDIxNiwgNDcsIDE2OSwgMSwgMjE2LCA0NiwgMTY5LCAxLCAyMTYsIDQ1LCAxNjksIDEsIDIxNiwgNDQsIAotICAgIDE2OSwgMSwgMjE1LCAxODMsIDE2OSwgMSwgMjE1LCAxNzgsIDE2OSwgMSwgMjE1LCAxNjcsIDE2OSwgMSwgMjE1LCAxNjYsIAotICAgIDE2OSwgMSwgMjE1LCAxNjMsIDE2OSwgMSwgMjE1LCAxNjIsIDE2OSwgMSwgMjEyLCA2NSwgMTY5LCAxLCAyMTIsIDIyLCAKLSAgICAxNjksIDEsIDIxMSwgMjUwLCAxNjksIDEsIDIxMSwgMjI3LCAxNjksIDEsIDIxMSwgMTk1LCAxNjksIDEsIDIxMSwgMTgzLCAKLSAgICAxNjksIDEsIDE5MSwgMTY5LCAxLCAyMTEsIDQ3LCAxNjksIDEsIDIxMSwgOCwgMTY5LCAxLCAyMTAsIDI0NCwgMTY5LCAxLCAKLSAgICAyMTAsIDIxMiwgMTY5LCAxLCAyMTAsIDE3NywgMTgsIDE5LCAyNDAsIDE2OCwgMTgsIDE5LCA3NSwgMTgsIDE5LCAyNTUsIAotICAgIDM3LCAxOCwgMTksIDczLCAxOCwgMTksIDIzNiwgMzMsIDE4LCAxOSwgNzYsIDE4LCAxOSwgMjI2LCAxODMsIDE4LCAxOSwgCi0gICAgMjExLCAxMTYsIDIyNiwgMTgzLCAxOCwgMTksIDcyLCAyNDUsIDIwOSwgMTgsIDE5LCA3MiwgNzMsIDE4LCAxOSwgNjEsIDE4LCAKLSAgICAxOSwgMjU1LCA3MywgMTgsIDE5LCAyMTIsIDIyLCAxOCwgMTksIDE1OSwgMjEyLCAyMiwgMTgsIDE5LCAyMTEsIDI1MCwgMTgsIAotICAgIDE5LCAxNTksIDIxMSwgMjUwLCAxOCwgMTksIDIxMSwgMjQyLCAxOCwgMTksIDE1OSwgMjExLCAyNDIsIDE4LCAxOSwgMjExLCAKLSAgICAyMjcsIDE4LCAxOSwgMTU5LCAyMTEsIDIyNywgMTgsIDE5LCAyMTEsIDIxNSwgMTgsIDE5LCAxNTksIDIxMSwgMjE1LCAxOCwgCi0gICAgMTksIDIyOSwgMTkwLCAyMTEsIDIxNSwgMTgsIDE5LCAyMTIsIDY1LCAxOCwgMTksIDE1OSwgMjEyLCA2NSwgMTgsIDE5LCAKLSAgICAyMTIsIDY0LCAxOCwgMTksIDE1OSwgMjEyLCA2NCwgMTgsIDE5LCAyMjksIDE5MCwgMjEyLCA2NCwgMTgsIDE5LCAyNTQsIAotICAgIDIwMSwgMTgsIDE5LCAyMTEsIDExNiwgMjEyLCA5OCwgMTgsIDE5LCAyNDIsIDE4MCwgMjE4LCAxMjksIDE4LCAxOSwgNDAsIAotICAgIDE0MiwgMTgsIDE5LCA0MCwgMjQyLCAxMzYsIDE4LCAxOSwgNDAsIDI1MSwgMTc1LCAxNjMsIDIyMiwgMjMzLCAxOCwgMTksIAotICAgIDQwLCAyMTYsIDE0LCAxNjMsIDIyMiwgMjMzLCAxOCwgMTksIDQwLCA0NCwgMTYzLCAyMjIsIDIzMywgMTgsIDE5LCA0MCwgCi0gICAgMjIyLCAyMzMsIDE4LCAxOSwgNDAsIDUyLCAxNDIsIDE4LCAxOSwgNDAsIDUyLCAyMTksIDI1MSwgNjcsIDIxOCwgOTAsIDE4LCAKLSAgICAxOSwgNDAsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMTgsIDE5LCA0MCwgMjE5LCAyNTEsIDIwMywgOTEsIDE4LCAxOSwgNDAsIAotICAgIDIyNSwgMjIsIDE4LCAxOSwgNDAsIDEyNCwgMjE3LCA4NywgMTgsIDE5LCAyNDUsIDE1MCwgMTgsIDE5LCAyMzUsIDI1NSwgCi0gICAgMTgsIDE5LCAyMjYsIDE5NiwgMTgsIDE5LCAyNTQsIDEyMywgMTgsIDE5LCAyMjUsIDIyMSwgMTgsIDE5LCAyMjYsIDg3LCAKLSAgICAxOCwgMTksIDIyNSwgMTA4LCAxOCwgMTksIDIyNSwgNzEsIDE4LCAxOSwgMjI1LCAxNiwgMTgsIDE5LCAyMjQsIDI0OSwgMTgsIAotICAgIDE5LCAyMTEsIDExNiwgMjI0LCAyNDksIDE4LCAxOSwgNzIsIDI0MSwgMjIwLCAxOCwgMTksIDcyLCAyNDEsIDE4MCwgMTgsIAotICAgIDE5LCAxOTAsIDE4LCAxOSwgMjI2LCA4OSwgMTgsIDE5LCAyMjQsIDExMiwgMTgsIDE5LCAxNTksIDIyNCwgMTEyLCAxOCwgCi0gICAgMTksIDIyNCwgMTEwLCAxOCwgMTksIDE1OSwgMjI0LCAxMTAsIDE4LCAxOSwgMjI0LCAxMDksIDE4LCAxOSwgMTU5LCAyMjQsIAotICAgIDEwOSwgMTgsIDE5LCAyMjQsIDEwNywgMTgsIDE5LCAxNTksIDIyNCwgMTA3LCAxOCwgMTksIDIyNCwgMTA2LCAxOCwgMTksIAotICAgIDE1OSwgMjI0LCAxMDYsIDE4LCAxOSwgMjI0LCAxMTQsIDE4LCAxOSwgMTU5LCAyMjQsIDExNCwgMTgsIDE5LCAyMjQsIDExMywgCi0gICAgMTgsIDE5LCAxNTksIDIyNCwgMTEzLCAxOCwgMTksIDIxMSwgMTE2LCAyMjQsIDExMywgMTgsIDE5LCAyMjYsIDEwNSwgMTgsIAotICAgIDE5LCAxNTksIDIyNiwgMTA1LCAxOCwgMTksIDcyLCAyNDIsIDYwLCAxOCwgMTksIDIxNywgMjIsIDE4LCAxOSwgMjE3LCA5OSwgCi0gICAgMTgsIDE5LCAyMTYsIDExNywgMTgsIDE5LCAyMTYsIDEwMywgMTgsIDE5LCAxMTEsIDE4LCAxOSwgMjE2LCAxNywgMTgsIDE5LCAKLSAgICAyMTEsIDExNiwgMjE2LCAxNywgMTgsIDE5LCA3MiwgMjQ4LCA3NywgMTgsIDE5LCA3MiwgMjQ4LCAzLCAxOCwgMTksIDIxNywgCi0gICAgMTA1LCAxOCwgMTksIDIxNywgMTAxLCAxOCwgMTksIDIxNSwgNzgsIDE4LCAxOSwgMTU5LCAyMTUsIDc4LCAxOCwgMTksIAotICAgIDIxNSwgNjIsIDE4LCAxOSwgMTU5LCAyMTUsIDYyLCAxOCwgMTksIDIxNSwgNjEsIDE4LCAxOSwgMTU5LCAyMTUsIDYxLCAxOCwgCi0gICAgMTksIDEwNSwgMTgsIDE5LCAxNTksIDEwNSwgMTgsIDE5LCAyMTUsIDU0LCAxOCwgMTksIDE1OSwgMjE1LCA1NCwgMTgsIDE5LCAKLSAgICAyMTUsIDgwLCAxOCwgMTksIDE1OSwgMjE1LCA4MCwgMTgsIDE5LCAyMTUsIDc5LCAxOCwgMTksIDE1OSwgMjE1LCA3OSwgMTgsIAotICAgIDE5LCAyMjksIDE5MCwgMjE1LCA3OSwgMTgsIDE5LCAyMTcsIDE1MiwgMTgsIDE5LCAyMTUsIDE1MSwgMTgsIDE5LCAyMTUsIAotICAgIDEzNSwgMTgsIDE5LCAyMTUsIDEzMywgMTgsIDE5LCAyMTUsIDE1NiwgMTgsIDE5LCAyMzQsIDE4MiwgMTgsIDE5LCAyMzUsIAotICAgIDcsIDE4LCAxOSwgMjM0LCA5MiwgMTgsIDE5LCAyMzQsIDgzLCAxOCwgMTksIDIzNCwgMjgsIDE4LCAxOSwgMjM0LCAxMCwgCi0gICAgMTgsIDE5LCAyMTEsIDExNiwgMjM0LCAxMCwgMTgsIDE5LCAxNzYsIDE4LCAxOSwgMjM1LCAxMCwgMTgsIDE5LCAyMzMsIAotICAgIDE3OCwgMTgsIDE5LCAxNTksIDIzMywgMTc4LCAxOCwgMTksIDIzMywgMTc2LCAxOCwgMTksIDE1OSwgMjMzLCAxNzYsIDE4LCAKLSAgICAxOSwgMjMzLCAxNzUsIDE4LCAxOSwgMTU5LCAyMzMsIDE3NSwgMTgsIDE5LCAyMzMsIDE3NCwgMTgsIDE5LCAxNTksIDIzMywgCi0gICAgMTc0LCAxOCwgMTksIDIzMywgMTczLCAxOCwgMTksIDE1OSwgMjMzLCAxNzMsIDE4LCAxOSwgMjMzLCAxODIsIDE4LCAxOSwgCi0gICAgMTU5LCAyMzMsIDE4MiwgMTgsIDE5LCAyMzMsIDE4MSwgMTgsIDE5LCAxNTksIDIzMywgMTgxLCAxOCwgMTksIDIyOSwgMTkwLCAKLSAgICAyMzMsIDE4MSwgMTgsIDE5LCAyMzUsIDIzLCAxOCwgMTksIDIzMywgMTgzLCAxOCwgMTksIDIxOSwgMjcsIDIzNCwgMTc2LCAKLSAgICAxOCwgMTksIDIxOSwgMjcsIDIzNCwgODQsIDE4LCAxOSwgMjE5LCAyNywgMjM0LCAyMywgMTgsIDE5LCAyMTksIDI3LCAyMzQsIAotICAgIDI0OCwgMTgsIDE5LCAyNTAsIDE5MCwgMTgsIDE5LCAyNTEsIDMxLCAxOCwgMTksIDI1MCwgNTEsIDE4LCAxOSwgMjUwLCA0MSwgCi0gICAgMTgsIDE5LCAyNDksIDIzOCwgMTgsIDE5LCAyNDksIDE3NCwgMTgsIDE5LCAyMTEsIDExNiwgMjQ5LCAxNzQsIDE4LCAxOSwgCi0gICAgMjUxLCAzMywgMTgsIDE5LCAyNTEsIDMyLCAxOCwgMTksIDI0OSwgNzksIDE4LCAxOSwgMTU5LCAyNDksIDc5LCAxOCwgMTksIAotICAgIDI0OSwgNzcsIDE4LCAxOSwgMTU5LCAyNDksIDc3LCAxOCwgMTksIDI0OSwgNzYsIDE4LCAxOSwgMTU5LCAyNDksIDc2LCAxOCwgCi0gICAgMTksIDI0OSwgNzUsIDE4LCAxOSwgMTU5LCAyNDksIDc1LCAxOCwgMTksIDI0OSwgNzQsIDE4LCAxOSwgMTU5LCAyNDksIDc0LCAKLSAgICAxOCwgMTksIDI0OSwgODEsIDE4LCAxOSwgMTU5LCAyNDksIDgxLCAxOCwgMTksIDI0OSwgODAsIDE4LCAxOSwgMTU5LCAyNDksIAotICAgIDgwLCAxOCwgMTksIDIyOSwgMTkwLCAyNDksIDgwLCAxOCwgMTksIDI1MSwgNjYsIDE4LCAxOSwgMjIxLCAyMDksIDIxNiwgCi0gICAgMjEwLCAxOCwgMTksIDIzMSwgOTEsIDE4LCAxOSwgMjMxLCAyMzYsIDE4LCAxOSwgMjMwLCAyMzAsIDE4LCAxOSwgMjMwLCAKLSAgICAyMDEsIDE4LCAxOSwgMjMwLCAxNjEsIDE4LCAxOSwgMjMwLCAxMzIsIDE4LCAxOSwgMjExLCAxMTYsIDIzMCwgMTMyLCAxOCwgCi0gICAgMTksIDE4NCwgMTgsIDE5LCAyMzEsIDIzNywgMTgsIDE5LCAyMzAsIDQwLCAxOCwgMTksIDE1OSwgMjMwLCA0MCwgMTgsIDE5LCAKLSAgICAyMzAsIDM4LCAxOCwgMTksIDE1OSwgMjMwLCAzOCwgMTgsIDE5LCAyMzAsIDM3LCAxOCwgMTksIDE1OSwgMjMwLCAzNywgMTgsIAotICAgIDE5LCAyMzAsIDM2LCAxOCwgMTksIDE1OSwgMjMwLCAzNiwgMTgsIDE5LCAyMzAsIDM1LCAxOCwgMTksIDE1OSwgMjMwLCAzNSwgCi0gICAgMTgsIDE5LCAyMzAsIDQyLCAxOCwgMTksIDE1OSwgMjMwLCA0MiwgMTgsIDE5LCAyMzAsIDQxLCAxOCwgMTksIDE1OSwgMjMwLCAKLSAgICA0MSwgMTgsIDE5LCAyMjksIDE5MCwgMjMwLCA0MSwgMTgsIDE5LCAxOTMsIDE4LCAxOSwgMTU5LCAxOTMsIDE4LCAxOSwgCi0gICAgMjMwLCAyMzQsIDE4LCAxOSwgMjUzLCAyMDUsIDE5MywgMTgsIDE5LCAyMjEsIDIwOSwgMTkzLCAxOCwgMTksIDIyOSwgMTA3LCAKLSAgICAxOCwgMTksIDIyOSwgMjI0LCAxOCwgMTksIDIyOCwgMjMzLCAxOCwgMTksIDIyOCwgMjA4LCAxOCwgMTksIDIyOCwgNzQsIAotICAgIDE4LCAxOSwgMjI4LCA2NCwgMTgsIDE5LCAyMTEsIDExNiwgMjI4LCA2NCwgMTgsIDE5LCAxOTcsIDE4LCAxOSwgMjI5LCAKLSAgICAyMjUsIDE4LCAxOSwgMjI3LCAxNzIsIDE4LCAxOSwgMTU5LCAyMjcsIDE3MiwgMTgsIDE5LCAyMjcsIDE3NCwgMTgsIDE5LCAKLSAgICAxNTksIDIyNywgMTc0LCAxOCwgMTksIDIyNywgMTczLCAxOCwgMTksIDE1OSwgMjI3LCAxNzMsIDE4LCAxOSwgMjI5LCAxOTAsIAotICAgIDIyNywgMTczLCAxOCwgMTksIDIzMCwgMjUsIDE4LCAxOSwgNzIsIDIyOSwgNzksIDE4LCAxOSwgMjI4LCAyMzgsIDE4LCAxOSwgCi0gICAgMjMzLCA1OCwgMTgsIDE5LCAyMzMsIDEzMywgMTgsIDE5LCAyMzIsIDI0MSwgMTgsIDE5LCAyMzIsIDIyNywgMTgsIDE5LCAKLSAgICAyMzIsIDE1NiwgMTgsIDE5LCAyMzIsIDEyNywgMTgsIDE5LCAyMTEsIDExNiwgMjMyLCAxMjcsIDE4LCAxOSwgMjMzLCAxMzUsIAotICAgIDE4LCAxOSwgMjMzLCAxMzQsIDE4LCAxOSwgMjMyLCA2OCwgMTgsIDE5LCAxNTksIDIzMiwgNjgsIDE4LCAxOSwgMjMyLCA2NywgCi0gICAgMTgsIDE5LCAxNTksIDIzMiwgNjcsIDE4LCAxOSwgMjMyLCA2NiwgMTgsIDE5LCAxNTksIDIzMiwgNjYsIDE4LCAxOSwgMjMyLCAKLSAgICA2NSwgMTgsIDE5LCAxNTksIDIzMiwgNjUsIDE4LCAxOSwgMjMyLCA2NCwgMTgsIDE5LCAxNTksIDIzMiwgNjQsIDE4LCAxOSwgCi0gICAgMjMyLCA3MCwgMTgsIDE5LCAxNTksIDIzMiwgNzAsIDE4LCAxOSwgMjMyLCA2OSwgMTgsIDE5LCAxNTksIDIzMiwgNjksIDE4LCAKLSAgICAxOSwgMTU2LCAxOCwgMTksIDE1OSwgMTU2LCAxOCwgMTksIDE0NywgMTU2LCAxOCwgMTksIDIyMSwgMTgxLCAxOCwgMTksIAotICAgIDIyMiwgMjksIDE4LCAxOSwgMjE5LCAxOTEsIDE4LCAxOSwgMjE5LCAxNzUsIDE4LCAxOSwgMjE5LCA1OCwgMTgsIDE5LCAKLSAgICAyMTksIDQwLCAxOCwgMTksIDIxMSwgMTE2LCAyMTksIDQwLCAxOCwgMTksIDIwNiwgMTgsIDE5LCAyMjIsIDMxLCAxOCwgMTksIAotICAgIDIxNywgMjQ5LCAxOCwgMTksIDE1OSwgMjE3LCAyNDksIDE4LCAxOSwgMjE3LCAyNDMsIDE4LCAxOSwgMTU5LCAyMTcsIDI0MywgCi0gICAgMTgsIDE5LCAyMTcsIDI0MiwgMTgsIDE5LCAxNTksIDIxNywgMjQyLCAxOCwgMTksIDIxNywgMjM4LCAxOCwgMTksIDE1OSwgCi0gICAgMjE3LCAyMzgsIDE4LCAxOSwgMjE3LCAyMzcsIDE4LCAxOSwgMTU5LCAyMTcsIDIzNywgMTgsIDE5LCAyMTcsIDI1MywgMTgsIAotICAgIDE5LCAxNTksIDIxNywgMjUzLCAxOCwgMTksIDIxNywgMjUyLCAxOCwgMTksIDE1OSwgMjE3LCAyNTIsIDE4LCAxOSwgMjI5LCAKLSAgICAxOTAsIDIxNywgMjUyLCAxOCwgMTksIDIyMiwgOTEsIDE4LCAxOSwgMjUzLCAyMDUsIDIyMiwgOTEsIDE4LCAxOSwgMjE3LCAKLSAgICAyNTQsIDE4LCAxOSwgMjUxLCAyMTgsIDIyMiwgOTEsIDE4LCAxOSwgMjMwLCAxMjcsIDIxOSwgMTA4LCAxOCwgMTksIDIyOSwgCi0gICAgMTkwLCAyMTksIDk5LCAxOCwgMTksIDIyOSwgMTkwLCAyMjIsIDg5LCAxOCwgMTksIDIyOSwgMTkwLCAyMTgsIDIzNSwgMTgsIAotICAgIDE5LCAyMjksIDE5MCwgMjE4LCA4NiwgMTgsIDE5LCAyMjksIDE5MCwgMjE5LCA5OCwgMTgsIDE5LCAyMjksIDE5MCwgMjIxLCAKLSAgICAxODQsIDE4LCAxOSwgMjIwLCA2MywgMTgsIDE5LCAyMjAsIDMyLCAxOCwgMTksIDIyMCwgMjcsIDE4LCAxOSwgMjIwLCA3LCAKLSAgICAxOCwgMTksIDIyMCwgMSwgMTgsIDE5LCAyMjAsIDEwMiwgMTgsIDE5LCAyMjAsIDk4LCAxOCwgMTksIDIxOSwgMjA2LCAxOCwgCi0gICAgMTksIDE1OSwgMjE5LCAyMDYsIDE4LCAxOSwgMjE5LCAyMDUsIDE4LCAxOSwgMTU5LCAyMTksIDIwNSwgMTgsIDE5LCAyMTksIAotICAgIDIwNCwgMTgsIDE5LCAxNTksIDIxOSwgMjA0LCAxOCwgMTksIDIxOSwgMjAzLCAxOCwgMTksIDE1OSwgMjE5LCAyMDMsIDE4LCAKLSAgICAxOSwgMjE5LCAyMDIsIDE4LCAxOSwgMTU5LCAyMTksIDIwMiwgMTgsIDE5LCAyMTksIDIwOCwgMTgsIDE5LCAxNTksIDIxOSwgCi0gICAgMjA4LCAxOCwgMTksIDIxOSwgMjA3LCAxOCwgMTksIDE1OSwgMjE5LCAyMDcsIDE4LCAxOSwgMjIwLCAxMDQsIDE4LCAxOSwgCi0gICAgMjExLCA0NywgMTgsIDE5LCAyMTEsIDEwMSwgMTgsIDE5LCAyMTEsIDgsIDE4LCAxOSwgMjEwLCAyNTUsIDE4LCAxOSwgMjEwLCAKLSAgICAyNDQsIDE4LCAxOSwgMjEwLCAyMjksIDE4LCAxOSwgMjExLCAxMTYsIDIxMCwgMjI5LCAxOCwgMTksIDE5MSwgMTgsIDE5LCAKLSAgICAyMTEsIDEwMywgMTgsIDE5LCAyMTAsIDE3NCwgMTgsIDE5LCAxNTksIDIxMCwgMTc0LCAxOCwgMTksIDIxMCwgMTczLCAxOCwgCi0gICAgMTksIDE1OSwgMjEwLCAxNzMsIDE4LCAxOSwgMjEwLCAxNzIsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MiwgMTgsIDE5LCAyMTAsIAotICAgIDE3MSwgMTgsIDE5LCAxNTksIDIxMCwgMTcxLCAxOCwgMTksIDIxMCwgMTcwLCAxOCwgMTksIDE1OSwgMjEwLCAxNzAsIDE4LCAKLSAgICAxOSwgMjEwLCAxNzYsIDE4LCAxOSwgMTU5LCAyMTAsIDE3NiwgMTgsIDE5LCAyMTAsIDE3NSwgMTgsIDE5LCAxNTksIDIxMCwgCi0gICAgMTc1LCAxOCwgMTksIDIyOSwgMTkwLCAyMTAsIDE3NSwgMTgsIDE5LCAyMTEsIDExNywgMTgsIDE5LCAyNTIsIDQsIDIxMSwgCi0gICAgMTE3LCAxOCwgMTksIDE1OSwgMjExLCAxMTcsIDE4LCAxOSwgMjIxLCAyMDksIDIxMSwgOCwgMTgsIDE5LCAyMjMsIDEyOCwgCi0gICAgMTgsIDE5LCAyMjMsIDIyMywgMjIzLCAxMjgsIDE4LCAxOSwgMTU5LCAyMzMsIDU4LCAxOCwgMTksIDIyMywgMTgzLCAxOCwgCi0gICAgMTksIDIyMywgMzUsIDE4LCAxOSwgMjIyLCAyMzksIDE4LCAxOSwgMjIyLCAyMTEsIDE4LCAxOSwgMjIyLCAxOTcsIDE4LCAKLSAgICAxOSwgMTU5LCAyMzIsIDE1NiwgMTgsIDE5LCAyMDUsIDE4LCAxOSwgMjIzLCAxODQsIDE4LCAxOSwgMTU5LCAyMzMsIDEzNSwgCi0gICAgMTgsIDE5LCAyMjIsIDEwOCwgMTgsIDE5LCAxNTksIDIyMiwgMTA4LCAxOCwgMTksIDE1MywgMTgsIDE5LCAxNTksIDE1MywgCi0gICAgMTgsIDE5LCAxNDcsIDE1MywgMTgsIDE5LCAyNDQsIDE1NCwgMTgsIDE5LCAyNDQsIDE5MywgMTgsIDE5LCAyNDQsIDEyMSwgCi0gICAgMTgsIDE5LCAyNDQsIDEwOCwgMTgsIDE5LCAyNDQsIDQzLCAxOCwgMTksIDI0NCwgMzQsIDE4LCAxOSwgMjQ0LCAxOTYsIDE4LCAKLSAgICAxOSwgMjQ0LCAxOTUsIDE4LCAxOSwgMjQzLCAyMTIsIDE4LCAxOSwgMTU5LCAyNDMsIDIxMiwgMTgsIDE5LCAyNDUsIDYsIAotICAgIDE4LCAxOSwgMjE2LCAxOTUsIDE4LCAxOSwgMjMwLCAyMywgMjE2LCAxOTUsIDE4LCAxOSwgMjE2LCAxNzUsIDE4LCAxOSwgCi0gICAgMjMwLCAyMywgMjE2LCAxNzUsIDE4LCAxOSwgMjE2LCAxNzEsIDE4LCAxOSwgMjMwLCAyMywgMjE2LCAxNzEsIDE4LCAxOSwgCi0gICAgMjE2LCAxNTYsIDE4LCAxOSwgMjE2LCAxNTMsIDE4LCAxOSwgMjE2LCAyMDgsIDE4LCAxOSwgMjE2LCAyMDcsIDE4LCAxOSwgCi0gICAgMjE2LCAxMjcsIDE4LCAxOSwgMTU5LCAyMTYsIDEyNywgMTgsIDE5LCAyMTYsIDIxMCwgMTgsIDE5LCAyMTUsIDE0MiwgMTgsIAotICAgIDE5LCAyMTUsIDE0MCwgMTgsIDE5LCAyMTUsIDEzOSwgMTgsIDE5LCAyMTUsIDE0NCwgMTgsIDE5LCAyMTUsIDE0NSwgMTgsIAotICAgIDE5LCAyMTUsIDUyLCAxOCwgMTksIDIxNSwgNTEsIDE4LCAxOSwgMjE1LCA1MCwgMTgsIDE5LCAyMTUsIDUzLCAxOCwgMTksIAotICAgIDIyNywgMTkzLCAyNDEsIDIzOCwgMTgsIDE5LCAyMjcsIDE5MywgMjQxLCAxODAsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MSwgCi0gICAgMTYxLCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIDY4LCAxOCwgMTksIDIyNywgMTkzLCAyNDEsIDUzLCAxOCwgMTksIDIyNywgCi0gICAgMTkzLCAxNjIsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MiwgNDYsIDE4LCAxOSwgMjI3LCAxOTMsIDI0MiwgNjAsIDE4LCAxOSwgCi0gICAgMjI3LCAxOTIsIDI0MiwgNjAsIDE4LCAxOSwgMjQxLCAxNTQsIDE4LCAxOSwgMjI0LCA4NCwgMTgsIDE5LCAyMjQsIDUzLCAKLSAgICAxOCwgMTksIDIyNCwgNDgsIDE4LCAxOSwgMjI0LCA0MiwgMTgsIDE5LCAyMjQsIDM3LCAxOCwgMTksIDIyNCwgODgsIDE4LCAKLSAgICAxOSwgMjI0LCA4NywgMTgsIDE5LCAyMjQsIDk2LCAxOCwgMTksIDIxNiwgNTUsIDE4LCAxOSwgMjE2LCA1MywgMTgsIDE5LCAKLSAgICAyMTYsIDUyLCAxOCwgMTksIDIxNiwgNTYsIDE4LCAxOSwgMTU5LCAyMjMsIDEyOCwgMTgsIDE5LCAxNTksIDIyMywgMzUsIAotICAgIDE4LCAxOSwgMTU5LCAyMjIsIDIxMSwgMTgsIDE5LCAxNTksIDIwNSwgMTgsIDE5LCAyMjksIDc1LCAxOCwgMTksIDIyOSwgCi0gICAgMjcsIDE4LCAxOSwgMjI5LCAyMywgMTgsIDE5LCAyMjksIDQsIDE4LCAxOSwgMjI4LCAyNTUsIDE4LCAxOSwgMjI5LCA3NywgCi0gICAgMTgsIDE5LCAyMjksIDc2LCAxOCwgMTksIDIyOSwgNzksIDE4LCAxOSwgMjI4LCAxMDMsIDE4LCAxOSwgMjIxLCAyMDksIAotICAgIDIyMCwgNjMsIDE4LCAxOSwgMjIxLCAyMDksIDIyMCwgMzIsIDE4LCAxOSwgMjIxLCAyMDksIDIyMCwgNywgMTgsIDE5LCAKLSAgICAyMjEsIDIwOSwgMjIwLCAxMDIsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTk1LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIAotICAgIDE3NSwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxNTYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMjA4LCAxOCwgMTksIDIxMSwgCi0gICAgMjEzLCAyMTYsIDIxMCwgMTgsIDE5LCAyMzIsIDI0OCwgMTgsIDE5LCAyMzIsIDI0NywgMTgsIDE5LCAyMzIsIDI0NiwgMTgsIAotICAgIDE5LCAyMzIsIDI0NSwgMTgsIDE5LCAyMzIsIDI1NCwgMTgsIDE5LCAyMzIsIDI1MywgMTgsIDE5LCAyMzIsIDI1NSwgMTgsIAotICAgIDE5LCAyMTYsIDIwOSwgMjE2LCAxOTUsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMTc1LCAxOCwgMTksIDIxNiwgMjA5LCAKLSAgICAyMTYsIDE3MSwgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAxNTYsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgMTUzLCAxOCwgMTksIAotICAgIDIxNiwgMjA5LCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDIwOSwgMjE2LCAyMDcsIDE4LCAxOSwgMjE2LCAyMDksIDIxNiwgCi0gICAgMjEwLCAxOCwgMTksIDI1NCwgMTg5LCAyNTMsIDE1OCwgMTgsIDE5LCAyNTEsIDIxOCwgNzUsIDE4LCAxOSwgMjUxLCAyMTgsIAotICAgIDczLCAxOCwgMTksIDI1MSwgMjE4LCA3NiwgMTgsIDE5LCAyNTEsIDIxOCwgNjEsIDE4LCAxOSwgMjUxLCAyMTgsIDIxMiwgCi0gICAgMjIsIDE4LCAxOSwgMjUxLCAyMTgsIDIxMSwgMjUwLCAxOCwgMTksIDI1MSwgMjE4LCAyMTEsIDIyNywgMTgsIDE5LCAyNTEsIAotICAgIDIxOCwgMjEyLCA2NSwgMTgsIDE5LCAyNTEsIDIxOCwgMjI5LCAxMDcsIDE4LCAxOSwgMjUxLCAyMTgsIDIyOCwgMjMzLCAxOCwgCi0gICAgMTksIDI1MSwgMjE4LCAyMjgsIDc0LCAxOCwgMTksIDI1MSwgMjE4LCAxOTcsIDE4LCAxOSwgMjUxLCAyMTgsIDIzNCwgMTgyLCAKLSAgICAxOCwgMTksIDI1MSwgMjE4LCAyMzQsIDkyLCAxOCwgMTksIDI1MSwgMjE4LCAyMzQsIDI4LCAxOCwgMTksIDI1MSwgMjE4LCAKLSAgICAxNzYsIDE4LCAxOSwgMjIxLCAyMDksIDI0MSwgMjM4LCAxOCwgMTksIDIyMSwgMjA5LCAyNDEsIDE4MCwgMTgsIDE5LCAyMjEsIAotICAgIDIwOSwgMjQxLCA2OCwgMTgsIDE5LCAyMjEsIDIwOSwgMTYyLCAxOCwgMTksIDcyLCAyNDIsIDIyMCwgMTgsIDE5LCA3MiwgCi0gICAgMjQyLCAyMjQsIDE4LCAxOSwgNzIsIDI0MiwgMjM2LCAxOCwgMTksIDcyLCAyNDIsIDIzNSwgMTgsIDE5LCA3MiwgMjQyLCAKLSAgICAyMjUsIDE4LCAxOSwgNzIsIDI0MiwgMjQ5LCAxOCwgMTksIDcyLCAyMjIsIDE0MCwgMTgsIDE5LCA3MiwgMjIyLCAyMTEsIAotICAgIDE4LCAxOSwgNzIsIDIyMywgMTI4LCAxOCwgMTksIDcyLCAyMjMsIDEwOCwgMTgsIDE5LCA3MiwgMjIzLCAzNSwgMTgsIDE5LCAKLSAgICA3MiwgMjA1LCAxOCwgMTksIDcyLCAyMTEsIDE5NSwgMTgsIDE5LCA3MiwgMjExLCAyMjcsIDE4LCAxOSwgNzIsIDIxMiwgMjIsIAotICAgIDE4LCAxOSwgNzIsIDIxMiwgMTcsIDE4LCAxOSwgNzIsIDIxMSwgMjUwLCAxOCwgMTksIDcyLCAyMTIsIDY1LCAxOCwgMTksIAotICAgIDcyLCAyNDAsIDE5NCwgMTgsIDE5LCA3MiwgMjQwLCAxOTUsIDE4LCAxOSwgNzIsIDI0MCwgMTk4LCAxOCwgMTksIDcyLCAKLSAgICAyNDAsIDE5NywgMTgsIDE5LCA3MiwgMjQwLCAxOTYsIDE4LCAxOSwgNzIsIDI0MCwgMjAwLCAxOCwgMTksIDcyLCAyMTYsIAotICAgIDEzNiwgMTgsIDE5LCA3MiwgMjE2LCAxNTYsIDE4LCAxOSwgNzIsIDIxNiwgMTk1LCAxOCwgMTksIDcyLCAyMTYsIDE5NCwgCi0gICAgMTgsIDE5LCA3MiwgMjE2LCAxNzUsIDE4LCAxOSwgNzIsIDIxNiwgMjA4LCAxOCwgMTksIDcyLCAyMTUsIDEyMywgMTgsIDE5LCAKLSAgICA3MiwgMjE1LCAxMzMsIDE4LCAxOSwgNzIsIDIxNSwgMTUxLCAxOCwgMTksIDcyLCAyMTUsIDE1MCwgMTgsIDE5LCA3MiwgCi0gICAgMjE1LCAxMzUsIDE4LCAxOSwgNzIsIDIxNSwgMTU2LCAxOCwgMTksIDcyLCAyMjQsIDE1MCwgMTgsIDE5LCA3MiwgMjI1LCAKLSAgICAxNiwgMTgsIDE5LCA3MiwgMjI1LCAyMjEsIDE4LCAxOSwgNzIsIDIyNSwgMjExLCAxOCwgMTksIDcyLCAyMjUsIDEwOCwgMTgsIAotICAgIDE5LCA3MiwgMTkwLCAxOCwgMTksIDcyLCAyMjYsIDEwNSwgMTgsIDE5LCA3MiwgMjQyLCAxMTMsIDE4LCAxOSwgNzIsIDI0MiwgCi0gICAgMTc0LCAxOCwgMTksIDcyLCAyNDMsIDYyLCAxOCwgMTksIDcyLCAyNDMsIDU1LCAxOCwgMTksIDcyLCAyNDIsIDIxNCwgMTgsIAotICAgIDE5LCA3MiwgMjQzLCAxMzUsIDE4LCAxOSwgNzIsIDIzNCwgMTAwLCAxOCwgMTksIDcyLCAyMzQsIDEwNSwgMTgsIDE5LCA3MiwgCi0gICAgMjM0LCAxMTksIDE4LCAxOSwgNzIsIDIzNCwgMTE4LCAxOCwgMTksIDcyLCAyMzQsIDExMiwgMTgsIDE5LCA3MiwgMjM0LCAKLSAgICAxMzIsIDE4LCAxOSwgNzIsIDIzNCwgNDEsIDE4LCAxOSwgNzIsIDIzNCwgNDIsIDE4LCAxOSwgNzIsIDIzNCwgNDUsIDE4LCAKLSAgICAxOSwgNzIsIDIzNCwgNDQsIDE4LCAxOSwgNzIsIDIzNCwgNDMsIDE4LCAxOSwgNzIsIDIzNCwgNDYsIDE4LCAxOSwgNzIsIAotICAgIDIzNCwgNDcsIDE4LCAxOSwgNzIsIDIyNywgMjM3LCAxOCwgMTksIDcyLCAyMjgsIDc0LCAxOCwgMTksIDcyLCAyMjksIDEwNywgCi0gICAgMTgsIDE5LCA3MiwgMjI5LCAxMDMsIDE4LCAxOSwgNzIsIDIyOCwgMjMzLCAxOCwgMTksIDcyLCAxOTcsIDE4LCAxOSwgNzIsIAotICAgIDIzMCwgMTAyLCAxOCwgMTksIDcyLCAyMzAsIDE2MSwgMTgsIDE5LCA3MiwgMjMxLCA5MSwgMTgsIDE5LCA3MiwgMjMxLCA4MCwgCi0gICAgMTgsIDE5LCA3MiwgMjMwLCAyMzAsIDE4LCAxOSwgNzIsIDE4NCwgMTgsIDE5LCA3MiwgMjEwLCAyMTIsIDE4LCAxOSwgNzIsIAotICAgIDIxMCwgMjQ0LCAxOCwgMTksIDcyLCAyMTEsIDQ3LCAxOCwgMTksIDcyLCAyMTEsIDQ0LCAxOCwgMTksIDcyLCAyMTEsIDgsIAotICAgIDE4LCAxOSwgNzIsIDE5MSwgMTgsIDE5LCA3MiwgMjM1LCA1MSwgMTgsIDE5LCAyMjEsIDIwOSwgMjM1LCA1MSwgMTgsIDE5LCAKLSAgICA3MiwgMjM1LCA2OCwgMTgsIDE5LCA3MiwgMjM1LCAxMjYsIDE4LCAxOSwgNzIsIDIzNSwgMTI0LCAxOCwgMTksIDcyLCAyMzUsIAotICAgIDEwOCwgMTgsIDE5LCAyMjEsIDIwOSwgMjM1LCAxMDgsIDE4LCAxOSwgNzIsIDIzNSwgMTQxLCAxOCwgMTksIDcyLCAyMzUsIAotICAgIDgxLCAxOCwgMTksIDcyLCAyMzUsIDg1LCAxOCwgMTksIDcyLCAyMzUsIDk1LCAxOCwgMTksIDcyLCAyMzUsIDk0LCAxOCwgCi0gICAgMTksIDcyLCAyMzUsIDkzLCAxOCwgMTksIDcyLCAyMzUsIDk2LCAxOCwgMTksIDcyLCAyMzIsIDk4LCAxOCwgMTksIDcyLCAKLSAgICAyMzIsIDE1NiwgMTgsIDE5LCA3MiwgMjMzLCA1OCwgMTgsIDE5LCA3MiwgMjMzLCA1MCwgMTgsIDE5LCA3MiwgMjMyLCAyNDEsIAotICAgIDE4LCAxOSwgNzIsIDIzMywgMTM1LCAxOCwgMTksIDcyLCAyNDcsIDE0OSwgMTgsIDE5LCA3MiwgMjQ3LCAxNTAsIDE4LCAxOSwgCi0gICAgNzIsIDI0NywgMTU1LCAxOCwgMTksIDcyLCAyNDcsIDE1NCwgMTgsIDE5LCA3MiwgMjQ3LCAxNTEsIDE4LCAxOSwgNzIsIAotICAgIDI0NywgMTU2LCAxOCwgMTksIDcyLCAyMzIsIDI0NCwgMTgsIDE5LCA3MiwgMjMyLCAyNDYsIDE4LCAxOSwgNzIsIDIzMiwgCi0gICAgMjUwLCAxOCwgMTksIDcyLCAyMzIsIDI0OSwgMTgsIDE5LCA3MiwgMjMyLCAyNDgsIDE4LCAxOSwgNzIsIDIzMiwgMjU0LCAKLSAgICAxOCwgMTksIDcyLCAyMTYsIDUwLCAxOCwgMTksIDcyLCAyMTYsIDUyLCAxOCwgMTksIDcyLCAyMTYsIDU1LCAxOCwgMTksIAotICAgIDcyLCAyMTYsIDU0LCAxOCwgMTksIDcyLCAyMTYsIDUzLCAxOCwgMTksIDcyLCAyMTYsIDU2LCAxOCwgMTksIDcyLCAyMTYsIAotICAgIDQ1LCAxOCwgMTksIDcyLCAyMTYsIDQ2LCAxOCwgMTksIDcyLCAyMTYsIDU4LCAxOCwgMTksIDcyLCAyMTYsIDU3LCAxOCwgCi0gICAgMTksIDcyLCAyMTYsIDQ3LCAxOCwgMTksIDcyLCAyMTYsIDU5LCAxOCwgMTksIDcyLCAyMTAsIDEzLCAxOCwgMTksIDcyLCAKLSAgICAyMTAsIDIzLCAxOCwgMTksIDcyLCAyMTAsIDk0LCAxOCwgMTksIDcyLCAyMTAsIDkyLCAxOCwgMTksIDcyLCAyMTAsIDQ0LCAKLSAgICAxOCwgMTksIDcyLCAyMTAsIDExNiwgMTgsIDE5LCA3MiwgMjEwLCAxNTksIDE4LCAxOSwgNzIsIDY1LCAyMTAsIDE1OSwgMTgsIAotICAgIDE5LCA3MiwgMjQ2LCAyOCwgMTgsIDE5LCA3MiwgMjQ2LCAyOSwgMTgsIDE5LCA3MiwgMjQ2LCAzNiwgMTgsIDE5LCA3MiwgCi0gICAgMjQ2LCAzNSwgMTgsIDE5LCA3MiwgMjQ2LCAzMSwgMTgsIDE5LCA3MiwgMjQ2LCAzOCwgMTgsIDE5LCA3MiwgMjE4LCA4MywgCi0gICAgMTgsIDE5LCA3MiwgMjE5LCA1OCwgMTgsIDE5LCA3MiwgMjIxLCAxODEsIDE4LCAxOSwgNzIsIDIyMSwgMTcwLCAxOCwgMTksIAotICAgIDcyLCAyMTksIDE5MSwgMTgsIDE5LCA3MiwgMjA2LCAxOCwgMTksIDcyLCAyMTksIDIyNSwgMTgsIDE5LCA3MiwgMjIwLCA3LCAKLSAgICAxOCwgMTksIDcyLCAyMjAsIDYzLCAxOCwgMTksIDcyLCAyMjAsIDYxLCAxOCwgMTksIDcyLCAyMjAsIDMyLCAxOCwgMTksIAotICAgIDcyLCAyMjAsIDEwMiwgMTgsIDE5LCA3MiwgMjIwLCAxMDQsIDE4LCAxOSwgNzIsIDIxNSwgMTYzLCAxOCwgMTksIDcyLCAKLSAgICAyMTUsIDE2NiwgMTgsIDE5LCA3MiwgMjE1LCAxNzgsIDE4LCAxOSwgNzIsIDIxNSwgMTc3LCAxOCwgMTksIDcyLCAyMTUsIAotICAgIDE2NywgMTgsIDE5LCA3MiwgMjE1LCAxODMsIDE4LCAxOSwgNzIsIDI1MCwgNjksIDE4LCAxOSwgNzIsIDI1MCwgODYsIDE4LCAKLSAgICAxOSwgNzIsIDI1MCwgMTMxLCAxOCwgMTksIDcyLCAyNTAsIDEyOCwgMTgsIDE5LCA3MiwgMjUwLCAxMTAsIDE4LCAxOSwgNzIsIAotICAgIDI1MCwgMTU3LCAxOCwgMTksIDcyLCAyMTUsIDEyNiwgMTgsIDE5LCA3MiwgMjE1LCAxMjcsIDE4LCAxOSwgNzIsIDIxNSwgCi0gICAgMTMwLCAxOCwgMTksIDcyLCAyMTUsIDEyOSwgMTgsIDE5LCA3MiwgMjE1LCAxMjgsIDE4LCAxOSwgNzIsIDIxNSwgMTMxLCAKLSAgICAxOCwgMTksIDI1MCwgMTExLCA1MCwgMTgsIDE5LCAyNDMsIDIyOSwgMjE4LCAxMjksIDE4LCAxOSwgMjI0LCA4MCwgMTgsIAotICAgIDE5LCAyMjksIDczLCAxOCwgMTksIDIyOCwgMTAwLCAxOCwgMTksIDIyOCwgOTksIDE4LCAxOSwgMjI4LCA5OCwgMTgsIDE5LCAKLSAgICAyMjgsIDk3LCAxOCwgMTksIDIyOCwgMTAyLCAxOCwgMTksIDIyOCwgMTAxLCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyNSwgCi0gICAgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjQsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTIzLCAxOCwgMTksIDIxMSwgMjEzLCAKLSAgICAyMTYsIDEyMiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjEsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTI4LCAxOCwgMTksIAotICAgIDIxMSwgMjEzLCAyMTYsIDEyNywgMTgsIDE5LCAyMTEsIDIxMywgNDAsIDIxNiwgMjEwLCAxOCwgMTksIDI1MSwgMjE4LCAKLSAgICAyMTIsIDk4LCAyMjYsIDIyNiwgMjE5LCAxOSwgNzgsIDIyNiwgMjI2LCAxLCAyNTIsIDQ4LCAyMjYsIDIyNiwgMSwgMjMyLCAKLSAgICA4NywgMjI2LCAyMjYsIDEsIDI0NCwgMTUxLCAyMjYsIDIyNiwgMSwgMjIyLCAxNSwgMjI2LCAyMjYsIDEsIDIyOCwgMTkzLCAKLSAgICAyMjYsIDIyNiwgMSwgMjE0LCAyMjYsIDIyNiwgMjI2LCAxLCAyNDgsIDE5NywgMjI2LCAyMjYsIDEsIDIxNiwgODAsIDIyNiwgCi0gICAgMjI2LCAxLCAyNDksIDIyOSwgMjI2LCAyMjYsIDEsIDI1MCwgMTgwLCAyMjYsIDIyNiwgMSwgMjMwLCA5MSwgMjI2LCAyMjYsIAotICAgIDEsIDI0MiwgMTU2LCAyMjYsIDIyNiwgMSwgMjI5LCA2MywgMjI2LCAyMjYsIDEsIDIxOCwgMTIyLCAyMjYsIDIyNiwgMSwgCi0gICAgMjIyLCAxMzUsIDIyNiwgMjI2LCAxLCAyNTQsIDE5OCwgMjI2LCAyMjYsIDEsIDIyNiwgMTg3LCAyMjYsIDIyNiwgMSwgMjE0LCAKLSAgICAxNTAsIDIyNiwgMjI2LCAxLCAyNDUsIDIzMSwgMjI2LCAyMjYsIDEsIDIzNSwgMTg4LCAyMjYsIDIyNiwgMSwgMjQ1LCAyMzIsIAotICAgIDIyNiwgMjI2LCAxLCAyMjYsIDE1OCwgMjI2LCAyMjYsIDEsIDIxNCwgMjA2LCAyMjYsIDIyNiwgMSwgMjM2LCAzOSwgMjI2LCAKLSAgICAyMjYsIDEsIDI0NSwgMjI5LCAyMjYsIDIyNiwgMSwgMjI1LCAyMDIsIDIyNiwgMjI2LCAyNDQsIDE1MCwgNzgsIDIyNiwgCi0gICAgMjI2LCAyMjMsIDQ5LCAyNDQsIDE1MCwgNzgsIDE3OCwgMSwgMjQ0LCAxNDEsIDI0NCwgMTMzLCAyNDQsIDE1NSwgMjQ1LCA2LCAKLSAgICAxNzgsIDEsIDIxNCwgMTA1LCAxNzgsIDEsIDIxNCwgMTM1LCAyMTQsIDE1MSwgNzAsIDE3OCwgMSwgMjEwLCAyMTQsIDE3OCwgCi0gICAgMSwgMjExLCAxMTcsIDE3OCwgMSwgMjEyLCA5OCwgMTc4LCAxLCAyMTYsIDEzMCwgMjE2LCAxMjksIDIxNiwgMTUxLCAxNzgsIAotICAgIDEsIDI0NSwgNTksIDE3OCwgMSwgMjU0LCA5MywgNjEsIDE3OCwgMSwgMjI2LCAxNDMsIDc2LCAxNzgsIDEsIDI1NSwgMTcsIAotICAgIDYxLCAxNzgsIDEsIDI1NCwgMjI3LCAxNzgsIDEsIDIzMiwgMTMzLCA3NiwgMTc4LCAxLCAyMTksIDI0NCwgNzYsIDE3OCwgMSwgCi0gICAgNzYsIDE3OCwgMSwgMjI2LCAyMzQsIDE3OCwgMSwgMjI2LCAxOTYsIDE3OCwgMSwgMjIzLCAxNjQsIDIyMywgMTc3LCAyMjMsIAotICAgIDk0LCAxNTMsIDE3OCwgMSwgMjM0LCAxOTMsIDE3OCwgMSwgMjUwLCAxNzcsIDE3OCwgMSwgMjM0LCAxOTQsIDIzNSwgMjMsIAotICAgIDE3OCwgMSwgMjQzLCAyMDIsIDE3OCwgMSwgMjQ1LCAxMzgsIDE3OCwgMSwgMjQzLCA1OCwgMjQyLCA2NiwgMjQzLCAyMDIsIAotICAgIDE3OCwgMSwgMjQzLCA5NiwgMTc4LCAxLCAyMTEsIDE4OCwgMjExLCAxODIsIDIxMiwgOTgsIDE3OCwgMSwgMjQyLCAzOCwgCi0gICAgMjQyLCA2MCwgMTc4LCAxLCAyNDIsIDQyLCAyNDIsIDYwLCAxNzgsIDEsIDIzMiwgMTM1LCAyNDIsIDYwLCAxNzgsIDEsIAotICAgIDIxOSwgMjQ3LCAyNDIsIDYwLCAxNzgsIDEsIDIyOSwgMTg1LCAyMjcsIDE1NywgMjI5LCAxODYsIDIzMCwgMjUsIDE3OCwgMSwgCi0gICAgMjE5LCAyNDUsIDIzMCwgMjUsIDE3OCwgMSwgMjQ2LCAxMTUsIDE3OCwgMSwgMjM1LCAxNjgsIDIzNSwgMTcyLCAyMzUsIAotICAgIDE2MiwgNzMsIDE3OCwgMSwgNzUsIDE3OCwgMSwgMjM1LCAxMTcsIDIzNSwgMTQ0LCAxNzgsIDEsIDI0MywgNDMsIDE3OCwgMSwgCi0gICAgMjMyLCAxMzYsIDI1NCwgMjQzLCAxNzgsIDEsIDIxOSwgMjQ5LCA2MSwgMTc4LCAxLCAyMzUsIDE1NCwgMjQ1LCAxMTMsIAotICAgIDE3OCwgMSwgMjI1LCAxNjQsIDIyNSwgMTg2LCAyMjYsIDEwNSwgMTc4LCAxLCAyNTQsIDE2MywgMjQ1LCAxMTEsIDE3OCwgMSwgCi0gICAgMjE5LCAyNCwgMjIyLCA5MSwgMTc4LCAxLCAyMTksIDE3OSwgMjMyLCAxMzIsIDIyMiwgOTEsIDE3OCwgMSwgMjE5LCAyNDMsIAotICAgIDIyMiwgOTEsIDE3OCwgMSwgMjUxLCA2NiwgMTc4LCAxLCAyMTAsIDE1OSwgMTc4LCAxLCAyMTYsIDYzLCAyMTYsIDczLCAKLSAgICAyMTUsIDQxLCAyMTcsIDE1MiwgMTc4LCAxLCAyMTksIDI0MiwgMjE3LCAxNTIsIDE3OCwgMSwgMjQ5LCA2MCwgMTc4LCAxLCAKLSAgICAyNTIsIDMxLCAyNTIsIDM0LCAyNTEsIDIyNCwgMjUzLCAxNTgsIDE3OCwgMSwgMjE5LCAyNDgsIDI1MywgMTU4LCAxNzgsIDEsIAotICAgIDI0NiwgMTE0LCAxNzgsIDEsIDIyNiwgMTcxLCAxNzgsIDEsIDI0NSwgMTk2LCAyNDUsIDE5OCwgNzUsIDE3OCwgMSwgMjMxLCAKLSAgICAxNzgsIDIzMSwgMTg2LCAxOTMsIDE3OCwgMSwgMjMyLCAxMzQsIDE5MywgMTc4LCAxLCAyMTksIDI0NiwgMTkzLCAxNzgsIDEsIAotICAgIDIzMywgNzMsIDIzMywgMTE0LCAyMzIsIDE0MywgMTU2LCAxNzgsIDEsIDI0NiwgMTE2LCAxNzgsIDEsIDIzNSwgMjMwLCAKLSAgICAxNzgsIDEsIDIzNSwgMjMxLCAxNzgsIDEsIDI0OCwgMjEwLCAyNDgsIDIxNSwgMjQ5LCA2MCwgMTc4LCAxLCAyMjYsIDEzOCwgCi0gICAgMjQ1LCA1OCwgNzYsIDE3OCwgMSwgMjQ1LCAyMjcsIDE3OCwgMSwgMjM1LCAxODcsIDE3OCwgMSwgMjQ5LCA3OCwgMTc4LCAxLCAKLSAgICAyNTEsIDE3LCAxNzgsIDEsIDI1MCwgMTg5LCAxNzgsIDEsIDIxOCwgMTYxLCAxNzgsIDEsIDIzMiwgMTMxLCAxNzgsIDEsIAotICAgIDIxOSwgMjQxLCAxNzgsIDEsIDI0MCwgMTEwLCAxNzgsIDEsIDIyNCwgOTYsIDE3OCwgMSwgMjExLCAxNzgsIDE3OCwgMjE5LCAKLSAgICAxNTUsIDIyNCwgMTQwLCAxNzgsIDIzMCwgODUsIDIyNCwgMTQwLCAxNzgsIDI0OSwgMTMxLCAyMjQsIDE0MCwgMTc4LCAyNTQsIAotICAgIDYsIDg3LCAxNzgsIDIxNSwgODIsIDg3LCAxNzgsIDI1MiwgNDYsIDg3LCAyMTcsIDgzLCAxLCA2MSwgMjE3LCA4MywgMSwgCi0gICAgNzMsIDIxNywgODMsIDEsIDcwLCAyMTcsIDgzLCAxLCAxNzYsIDIxNywgODMsIDEsIDI0MywgMTM1LCAyMTcsIDgzLCAxLCAKLSAgICAyMjksIDc3LCAyMTcsIDgzLCAxLCAyMTcsIDEwNSwgMjE3LCA4MywgMSwgMjQ4LCAyMjEsIDIxNywgODMsIDEsIDE5NywgCi0gICAgMjE3LCA4MywgMSwgMTkwLCAyMTcsIDgzLCAxLCAyNTIsIDE5MSwgMjE3LCA4MywgMSwgMTg0LCAyMTcsIDgzLCAxLCAxOTEsIAotICAgIDIxNywgODMsIDEsIDIzMywgMTM1LCAyMTcsIDgzLCAxLCAyMTIsIDY1LCAyMTcsIDgzLCAxLCAyMDYsIDIxNywgODMsIDEsIAotICAgIDE2MiwgMjE3LCA4MywgMjUsIDUsIDczLCAyMTcsIDgzLCAyNSwgNSwgNzAsIDIxNywgODMsIDUsIDIxMywgMTUyLCAyNDIsIAotICAgIDcsIDEsIDYxLCAyNDIsIDcsIDEsIDczLCAyNDIsIDcsIDEsIDcwLCAyNDIsIDcsIDEsIDE3NiwgMjQyLCA3LCAxLCAyNDMsIAotICAgIDEzNSwgMjQyLCA3LCAxLCAyMjksIDc3LCAyNDIsIDcsIDEsIDIxNywgMTA1LCAyNDIsIDcsIDEsIDI0OCwgMjIxLCAyNDIsIAotICAgIDcsIDEsIDE5NywgMjQyLCA3LCAxLCAxOTAsIDI0MiwgNywgMSwgMjUyLCAxOTEsIDI0MiwgNywgMSwgMTg0LCAyNDIsIDcsIAotICAgIDEsIDE5MSwgMjQyLCA3LCAxLCAyMDUsIDI0MiwgNywgMSwgMjMzLCAxMzUsIDI0MiwgNywgMSwgMjEyLCA2NSwgMjQyLCA3LCAKLSAgICAxLCAyMDYsIDI0MiwgNywgMSwgMTYyLCAyNDIsIDcsIDI1LCA1LCA3MywgMjQyLCA3LCAyNSwgNSwgNzAsIDI0MiwgNywgNSwgCi0gICAgMjI2LCA0OSwgMjI1LCAxMjYsIDIxOSwgMTU1LCAyMjQsIDE0MCwgMjI1LCAxMjYsIDUyLCAyMjQsIDE0MCwgMjUxLCAxMjAsIAotICAgIDEsIDYxLCAyNTEsIDEyMCwgMSwgNzMsIDI1MSwgMTIwLCAxLCA3MCwgMjUxLCAxMjAsIDEsIDE3NiwgMjUxLCAxMjAsIDEsIAotICAgIDI0MywgMTM1LCAyNTEsIDEyMCwgMSwgMjI5LCA3NywgMjUxLCAxMjAsIDEsIDIxNywgMTA1LCAyNTEsIDEyMCwgMSwgMjQ4LCAKLSAgICAyMjEsIDI1MSwgMTIwLCAxLCAxOTcsIDI1MSwgMTIwLCAxLCAxOTAsIDI1MSwgMTIwLCAxLCAyNTIsIDE5MSwgMjUxLCAxMjAsIAotICAgIDEsIDE4NCwgMjUxLCAxMjAsIDEsIDE5MSwgMjUxLCAxMjAsIDEsIDIwNSwgMjUxLCAxMjAsIDEsIDIzMywgMTM1LCAyNTEsIAotICAgIDEyMCwgMSwgMjEyLCA2NSwgMjUxLCAxMjAsIDEsIDIwNiwgMjUxLCAxMjAsIDEsIDE2MiwgMjUxLCAxMjAsIDI1LCA1LCA3MywgCi0gICAgMjUxLCAxMjAsIDI1LCA1LCA3MCwgMjE3LCA4MiwgMSwgNjEsIDIxNywgODIsIDEsIDczLCAyMTcsIDgyLCAxLCA3MCwgMjE3LCAKLSAgICA4MiwgMSwgMTc2LCAyMTcsIDgyLCAxLCAyNDMsIDEzNSwgMjE3LCA4MiwgMSwgMjI5LCA3NywgMjE3LCA4MiwgMSwgMjE3LCAKLSAgICAxMDUsIDIxNywgODIsIDEsIDI0OCwgMjIxLCAyMTcsIDgyLCAxLCAxOTcsIDIxNywgODIsIDEsIDE5MCwgMjE3LCA4MiwgMSwgCi0gICAgMjUyLCAxOTEsIDIxNywgODIsIDEsIDE4NCwgMjE3LCA4MiwgMSwgMTkxLCAyMTcsIDgyLCAxLCAyMzMsIDEzNSwgMjE3LCAKLSAgICA4MiwgMSwgMjEyLCA2NSwgMjE3LCA4MiwgMSwgMjA2LCAyMTcsIDgyLCAyNSwgNSwgNzMsIDIxNywgODIsIDI1LCA1LCA3MCwgCi0gICAgNjksIDEsIDE3NiwgNjksIDEsIDIzNCwgMTMyLCA2OSwgMSwgMjM0LCAyOCwgNjksIDEsIDIzNCwgMTA1LCA2OSwgMSwgMjI5LCAKLSAgICA0LCA2OSwgMSwgMjUxLCAzMywgNjksIDEsIDI1MCwgMTU3LCA2OSwgMSwgMjQ5LCAyMzgsIDY5LCAxLCAyNTAsIDg2LCA2OSwgCi0gICAgMSwgMjI3LCAxMzQsIDY5LCAxLCAyNDgsIDIyMSwgNjksIDEsIDIxNSwgMTQ0LCA2OSwgMSwgMjQ3LCAxNDUsIDY5LCAxLCAKLSAgICAyMTUsIDEzOSwgNjksIDEsIDIyOCwgODAsIDY5LCAxLCAyMTcsIDEwNSwgNjksIDEsIDIxNiwgMjA4LCA2OSwgMSwgMTExLCAKLSAgICA2OSwgMSwgMjE2LCAxNTYsIDY5LCAxLCAyMjgsIDc0LCA2OSwgMSwgMjUyLCAxOTEsIDY5LCAxLCAyMjUsIDE0NywgNjksIDEsIAotICAgIDIyNSwgMTYsIDY5LCAxLCAyMjUsIDEyMSwgNjksIDEsIDIzMCwgMTYxLCA2OSwgMSwgMjEwLCAyNDQsIDY5LCAxLCAyMjIsIAotICAgIDIxMSwgNjksIDEsIDIzMiwgMTU2LCA2OSwgMSwgMjEzLCAxMzgsIDY5LCAxLCAyMjAsIDEwMiwgNjksIDEsIDIxOCwgMTg0LCAKLSAgICA2OSwgMSwgMjA2LCA2OSwgMSwgMTYyLCA2OSwgMSwgMjMzLCAxMzUsIDY5LCAxLCAyMjQsIDg4LCA2OSwgMjM1LCAyNDMsIAotICAgIDI1LCAyMjQsIDc0LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDg3LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDUzLCA2OSwgCi0gICAgMjM1LCAyNDMsIDI1LCAyMjQsIDQ4LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDMwLCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIAotICAgIDIsIDY5LCAyMzUsIDI0MywgMjUsIDIyMywgMjQ2LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjMsIDI0NSwgNjksIDIzNSwgMjQzLCAKLSAgICAyNSwgMjIyLCAxMDAsIDY5LCAyMzUsIDI0MywgMjUsIDIyMiwgOTMsIDY5LCAyMzUsIDI0MywgMjUsIDIzMiwgNjIsIDY5LCAKLSAgICAyMzUsIDI0MywgMjUsIDIzMiwgNTIsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgNjksIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgCi0gICAgODAsIDY5LCAyMzUsIDI0MywgMjUsIDIyNCwgMzgsIDIxNSwgNDksIDExMCwgNjksIDIzNSwgMjQzLCAyNSwgMjI0LCAzOCwgCi0gICAgMjE1LCA0OSwgMTA1LCA2OSwgMjM1LCAyNDMsIDI1LCAyMjQsIDcwLCA2OSwgMjUsIDIzNSwgMjI5LCAyNTQsIDQ1LCA2OSwgCi0gICAgMjUsIDIzNSwgMjI5LCAyNTUsIDczLCA2OSwgMjUsIDUsIDI1NSwgNzMsIDY5LCAyNSwgNSwgNzMsIDY5LCAyNSwgNSwgMjM2LCAKLSAgICAzMywgNjksIDI1LCA1LCAyMTEsIDExNywgNjksIDI1LCA1LCAyMTAsIDE2OSwgNjksIDI1LCA1LCA3MCwgNjksIDI1LCA1LCAKLSAgICAyMTQsIDExOCwgNjksIDI1LCA1LCAyMTQsIDIyOSwgNjksIDI1LCA1LCAyMjYsIDIzNCwgNjksIDI1LCA1LCAxOTEsIDY5LCAKLSAgICAyNSwgNSwgMjM2LCA2MCwgNjksIDI1LCA1LCA3NSwgNjksIDI1LCA1LCAyNTQsIDI0MywgNjksIDI1LCA1LCAyNTQsIDIwMSwgCi0gICAgNjksIDI1LCA1LCAyMjYsIDE4MywgNjksIDI1LCA1LCAyNTMsIDE5MiwgNjksIDUsIDIyOCwgMjA2LCA2OSwgNSwgMjIzLCAKLSAgICAxMjYsIDY5LCA1LCAyMTAsIDE4MCwgNjksIDUsIDIzMCwgNTIsIDY5LCA1LCAyMTUsIDIxMywgNjksIDUsIDI1MiwgMTQzLCAKLSAgICA2OSwgNSwgMjIyLCAyMDYsIDY5LCA1LCAyMTYsIDQwLCA2OSwgNSwgMjM0LCAyNDEsIDY5LCA1LCAyNTQsIDIwMywgNjksIDUsIAotICAgIDIyMSwgMjQ0LCAyMjEsIDIzOCwgNjksIDUsIDIxMywgMTQ5LCA2OSwgNSwgMjQ5LCAyMzIsIDY5LCA1LCAyNTIsIDExNywgCi0gICAgNjksIDUsIDIzNCwgMTI1LCA2OSwgNSwgMjUyLCAxMzcsIDY5LCA1LCAyNTEsIDksIDIyNSwgNzIsIDIzMywgMTg3LCA2OSwgCi0gICAgNSwgMjMzLCAzMCwgMjE2LCAxNywgNjksIDUsIDI1MiwgMjAsIDY5LCA1LCAyMjUsIDEyMywgMjMwLCA5OSwgNjksIDUsIAotICAgIDIzNCwgOSwgNjksIDI0OSwgOTgsIDE2LCAyMjMsIDI4LCA2OSwgNSwgMjUzLCAxNzQsIDY5LCA1LCAyNTMsIDE5NSwgNjksIAotICAgIDIxLCAyMTAsIDg2LCA2OSwgMjEsIDExMCwgNjksIDIxLCAxMDUsIDY5LCAyMSwgMTU4LCA2OSwgMjEsIDE2MSwgNjksIDIxLCAKLSAgICAxODksIDY5LCAyMSwgMTk0LCA2OSwgMjEsIDE5OCwgNjksIDIxLCAxOTUsIDY5LCAyMSwgMjAwLCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMTksIDQzLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMzAsIDcxLCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyMjUsIDcxLCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyNTIsIDQ5LCA2OSwgMTYsIDIzMywgMzAsIAotICAgIDI1MywgMTk3LCAyNTEsIDEwMywgNjksIDE2LCAyMzMsIDMwLCAyNTMsIDE5NywgMjI0LCAyMTUsIDY5LCAxNiwgMjMzLCAzMCwgCi0gICAgMjUzLCAxOTcsIDIyNCwgMjA5LCA2OSwgMTYsIDIzMywgMzAsIDI1MywgMTk3LCAyMjQsIDIwNywgNjksIDE2LCAyMzMsIDMwLCAKLSAgICAyNTMsIDE5NywgMjI0LCAyMTMsIDY5LCAxNiwgMjMzLCAzMCwgMjUzLCAxOTcsIDIyNCwgMjExLCA4MywgMjUxLCAyMzYsIAotICAgIDgzLCAyNDUsIDE2MywgODMsIDI0OSwgMjE5LCA4MywgMjQzLCAyMjksIDIxOCwgMTI5LCA4MywgMjQ5LCAyMjYsIDgzLCAKLSAgICAyNDQsIDExLCAyNDcsIDExOCwgODMsIDIxNiwgMzksIDIxOSwgNTIsIDI0MCwgMTY4LCA4MywgMjE5LCAxOTAsIDMsIDI1MSwgCi0gICAgMTcyLCAyMzEsIDE1NCwgODMsIDIzMSwgMTgzLCAyNDksIDIxOSwgODMsIDIzMSwgMTgzLCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDgzLCAyMjgsIDE5MSwgODMsIDI0MywgMjUzLCA0NSwgMjIxLCAxNTcsIDExMCwgODMsIDI0MywgMjUzLCA0NSwgMjIxLCAKLSAgICAxNTcsIDEwNSwgODMsIDI0MywgMjUzLCA0NSwgMjIxLCAxNTcsIDE1OCwgODMsIDI1LCAyMjAsIDEzNywgODMsIDIxLCAyMTAsIAotICAgIDg2LCA4MywgMjEsIDExMCwgODMsIDIxLCAxMDUsIDgzLCAyMSwgMTU4LCA4MywgMjEsIDE2MSwgODMsIDIxLCAxODksIDgzLCAKLSAgICAyMSwgMTk0LCA4MywgMjEsIDE5OCwgODMsIDIxLCAxOTUsIDgzLCAyMSwgMjAwLCA4MywgMSwgNjEsIDgzLCAxLCA3NSwgODMsIAotICAgIDEsIDczLCA4MywgMSwgNzYsIDgzLCAxLCA3MCwgODMsIDEsIDIyNiwgMjM0LCA4MywgMSwgMjE0LCAyMTQsIDgzLCAxLCAKLSAgICAyNDUsIDIwOSwgODMsIDEsIDE5NywgODMsIDEsIDI1NCwgMTE1LCA4MywgMSwgMjUyLCAxOTEsIDgzLCAxLCAxOTAsIDgzLCAKLSAgICAxLCAyMjQsIDg4LCA4MywgMSwgMjQzLCAxMzUsIDgzLCAxLCAxODQsIDgzLCAxLCAyMzMsIDEzNSwgODMsIDEsIDIwNiwgODMsIAotICAgIDEsIDIyMCwgMTAyLCA4MywgMSwgMjE3LCAxMDUsIDgzLCAxLCAyNDgsIDIyMSwgODMsIDEsIDI1MCwgMTU3LCA4MywgMSwgCi0gICAgMjM1LCAxNDEsIDgzLCAxLCAxOTEsIDgzLCAxLCAyMDUsIDgzLCAxLCAyMTIsIDY1LCA4MywgMSwgMjQ0LCAxOTYsIDgzLCAxLCAKLSAgICAxNzYsIDgzLCAxLCAyMzQsIDEzMiwgODMsIDEsIDIxNSwgMTgzLCA4MywgMSwgMjEwLCAxMTYsIDgzLCAxLCAyNDIsIDQ2LCAKLSAgICA4MywgMSwgMjEwLCAxNiwgODMsIDEsIDIzMiwgMjU0LCA4MywgMSwgMjEwLCA2OSwgODMsIDEsIDI1MCwgMTEwLCA4MywgMSwgCi0gICAgMjE2LCAzOSwgMTk5LCAyNSwgNTAsIDgzLCAxLCAyMTYsIDM5LCA3NSwgODMsIDEsIDIxNiwgMzksIDczLCA4MywgMSwgMjE2LCAKLSAgICAzOSwgNzYsIDgzLCAxLCAyMTYsIDM5LCA3MCwgODMsIDEsIDIxNiwgMzksIDIyNiwgMjM0LCA4MywgMSwgMjE2LCAzOSwgCi0gICAgMjE0LCAyMTQsIDgzLCAxLCAyMTYsIDM5LCAyNTQsIDExNSwgODMsIDEsIDIxNiwgMzksIDI1MiwgMTkxLCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMTkwLCA4MywgMSwgMjE2LCAzOSwgMjI0LCA4OCwgODMsIDEsIDIxNiwgMzksIDI0MywgMTM1LCA4MywgMSwgMjE2LCAKLSAgICAzOSwgMTg0LCA4MywgMSwgMjE2LCAzOSwgMjE3LCAxMDUsIDgzLCAxLCAyMTYsIDM5LCAyNDgsIDIyMSwgODMsIDEsIDIxNiwgCi0gICAgMzksIDI1MCwgMTU3LCA4MywgMSwgMjE2LCAzOSwgMjM1LCAxNDEsIDgzLCAxLCAyMTYsIDM5LCAyMTUsIDE4MywgODMsIDEsIAotICAgIDIxNiwgMzksIDE5MSwgODMsIDEsIDIxNiwgMzksIDIxMiwgNjUsIDgzLCAxLCAyMTYsIDM5LCAxNzYsIDgzLCAxLCAyMTYsIAotICAgIDM5LCAyNDMsIDEzMiwgODMsIDEsIDIxNiwgMzksIDI0MiwgNDYsIDgzLCAxLCAyMTYsIDM5LCAyMzUsIDEwNywgODMsIDEsIAotICAgIDIxNiwgMzksIDIyOCwgMjMxLCA4MywgMSwgMjE2LCAzOSwgMjQ2LCAzOCwgODMsIDEsIDIxOSwgMTkwLCA3NSwgODMsIDEsIAotICAgIDIxOSwgMTkwLCA3MywgODMsIDEsIDIxOSwgMTkwLCAyMzUsIDE1MiwgODMsIDEsIDIxOSwgMTkwLCAyMTQsIDIxNCwgODMsIAotICAgIDEsIDIxOSwgMTkwLCA3MCwgODMsIDEsIDIxOSwgMTkwLCAyNTQsIDExNSwgODMsIDEsIDIxOSwgMTkwLCAxNzYsIDgzLCAxLCAKLSAgICAyMTksIDE5MCwgMjQzLCAxMzUsIDgzLCAxLCAyMTksIDE5MCwgMTYyLCA4MywgMSwgMjE5LCAxOTAsIDE5MCwgODMsIDEsIAotICAgIDIxOSwgMTkwLCAyMjAsIDEwMiwgODMsIDEsIDIxOSwgMTkwLCAyMTcsIDEwNSwgODMsIDEsIDIxOSwgMTkwLCAyNDgsIDIyMSwgCi0gICAgODMsIDEsIDIxOSwgMTkwLCAyMzUsIDE0MSwgODMsIDEsIDIxOSwgMTkwLCAyNDQsIDE5NiwgODMsIDEsIDIxOSwgMTkwLCAKLSAgICAyNDMsIDEzMiwgODMsIDEsIDIxOSwgMTkwLCAyNDIsIDQ2LCA4MywgMSwgMjE5LCAxOTAsIDIxNSwgMTgzLCA4MywgMSwgCi0gICAgMjE5LCAxOTAsIDIxMCwgMTE2LCA4MywgMSwgMjE5LCAxOTAsIDIyMywgMTg0LCA4MywgMSwgMjE5LCAxOTAsIDI1MCwgMTU3LCAKLSAgICA4MywgMSwgMjE5LCAxOTAsIDIxMCwgODIsIDgzLCAxLCAyMzEsIDE4MywgNzMsIDgzLCAxLCAyMzEsIDE4MywgMTc2LCA4MywgCi0gICAgMSwgMjMxLCAxODMsIDIwNSwgODMsIDEsIDIzMSwgMTgzLCAyNDQsIDE5NiwgODMsIDEsIDIzMSwgMTgzLCAyMTAsIDgyLCAKLSAgICA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyNTQsIDc2LCAxMTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMywgCi0gICAgMTQ4LCAxMTAsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDI0OCwgMTg2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjM1LCAxOTMsIDIxNCwgMjI0LCA4MywgMSwgMjU0LCAxNjIsIAotICAgIDI0MywgMTE2LCAyNTIsIDE1NSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMTM0LCAyNTIsIDE1NSwgODMsIDEsIDI1NCwgCi0gICAgMTYyLCAyNDMsIDExNiwgNjEsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDczLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgCi0gICAgMTE2LCAxNzYsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIyOSwgNzcsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDI1MSwgMzMsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNSwgMTU2LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAKLSAgICAyMTUsIDE0NCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQ4LCAxMzUsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDIyOCwgMTEwLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTcsIDEwNSwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgCi0gICAgMjQ4LCAyMjEsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDE5MCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjI1LCAKLSAgICAxNDcsIDgzLCAxLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxOCwgMjIzLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIAotICAgIDgyLCA4MywgMSwgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIDExNiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjU0LCAKLSAgICAyMDksIDgzLCAxLCAyMTYsIDM5LCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNywgMTA1LCA4MywgMSwgMjE2LCAzOSwgMjU0LCAKLSAgICAxNjIsIDI0MywgMTE2LCAyMTAsIDgyLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQyLCAyNDksIAotICAgIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMjksIDc3LCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAKLSAgICAyNDMsIDExNiwgMjUxLCAzMywgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIzNSwgMTE0LCA4MywgMSwgCi0gICAgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjE1LCAxNTYsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgCi0gICAgMTE2LCAyNDgsIDExOSwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxNywgMTA1LCA4MywgMSwgMjMxLCAKLSAgICAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQ4LCAyNSwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIAotICAgIDIxOCwgMjIzLCA4MywgMSwgMjMxLCAxODMsIDI1NCwgMTYyLCAyNDMsIDExNiwgMjQ5LCA3MiwgODMsIDEsIDIzMSwgMTgzLCAKLSAgICAyNTQsIDE2MiwgMjQzLCAxMTYsIDIxMCwgODIsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyMTAsIAotICAgIDExNiwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMTYzLCA3MCwgODMsIDEsIDI1NCwgMTYyLCAyNDMsIDExNiwgMTYzLCAKLSAgICAxOTEsIDgzLCAxLCAyMzEsIDE4MywgMjU0LCAxNjIsIDI0MywgMTE2LCAyNTIsIDE4LCA4MywgMSwgMjU0LCAxNjIsIDI0MywgCi0gICAgMTE2LCAyNDgsIDIxMSwgODMsIDEsIDIzMSwgMTgzLCAyNTQsIDE2MiwgMjQzLCAxMTYsIDIzMiwgMjU0LCAxOCwgMTksIAotICAgIDIyNiwgMTA5LCAxOCwgMTksIDI1MywgMTY3LCAxOCwgMTksIDI1NSwgMjgsIDE4LCAxOSwgMjEyLCAyNSwgMTgsIDE5LCAKLSAgICAyMjQsIDIyMSwgMTgsIDE5LCAyMjUsIDIyOSwgMTgsIDE5LCAyMjQsIDEwNSwgMTgsIDE5LCAyMTcsIDMxLCAxOCwgMTksIAotICAgIDIzNCwgMTg5LCAxOCwgMTksIDIzMywgMTc5LCAxOCwgMTksIDIzMSwgMTMyLCAxOCwgMTksIDIyOCwgMzcsIDE4LCAxOSwgCi0gICAgMjI5LCAxODEsIDE4LCAxOSwgMjMzLCA2OCwgMTgsIDE5LCAyMTksIDIyLCAxOCwgMTksIDIyMSwgMjExLCAxOCwgMTksIAotICAgIDIxOSwgMjMyLCAxOCwgMTksIDIyMCwgNjYsIDE4LCAxOSwgMjE5LCAyMDEsIDE4LCAxOSwgMjEwLCAyMjAsIDE4LCAxOSwgCi0gICAgMjExLCA1MiwgMTgsIDE5LCAyMjMsIDEzNCwgMTgsIDE5LCAyMjcsIDE3MSwgMTgsIDE5LCAyMjYsIDIxNiwgMjI3LCAxNzEsIAotICAgIDE4LCAxOSwgMjI3LCAxNzAsIDE4LCAxOSwgMjI2LCAyMTYsIDIyNywgMTcwLCAxOCwgMTksIDIyNywgMTY5LCAxOCwgMTksIAotICAgIDIyNiwgMjE2LCAyMjcsIDE2OSwgMTgsIDE5LCAyMjcsIDE2OCwgMTgsIDE5LCAyMjYsIDIxNiwgMjI3LCAxNjgsIDE4LCAxOSwgCi0gICAgMjIyLCAxMDUsIDE4LCAxOSwgMjIyLCAxMDQsIDE4LCAxOSwgMjIyLCAxMDMsIDE4LCAxOSwgMjIyLCAxMDIsIDE4LCAxOSwgCi0gICAgMjIyLCAxMDEsIDE4LCAxOSwgMjIyLCAxMDksIDE4LCAxOSwgMjI2LCAyMTYsIDIyNiwgMTA1LCAxOCwgMTksIDIyNiwgMjE2LCAKLSAgICAyMTcsIDE1MiwgMTgsIDE5LCAyMjYsIDIxNiwgMjM1LCAyMywgMTgsIDE5LCAyMjYsIDIxNiwgMjUxLCA2NiwgMTgsIDE5LCAKLSAgICAyMjYsIDIxNiwgMTkzLCAxOCwgMTksIDIyNiwgMjE2LCAyMzAsIDI1LCAxOCwgMTksIDIyNiwgMjE2LCAyMjIsIDkxLCAxOCwgCi0gICAgMTksIDIyNiwgMjE2LCAyMjAsIDEwNCwgMTgsIDE5LCAyNDUsIDIxOSwgMjEyLCA5OCwgMTgsIDE5LCAyMTIsIDcsIDIxMiwgCi0gICAgOTgsIDE4LCAxOSwgNDAsIDQsIDIyMiwgMjMzLCAxOCwgMTksIDQwLCAyMjMsIDE1NywgMjQ3LCAxMjAsIDE4LCAxOSwgMjIzLCAKLSAgICAyMjMsIDIyMiwgMTA2LCAxOCwgMTksIDE1OSwgMjMyLCAxMjcsIDE4LCAxOSwgMTU5LCAyMzMsIDEzNCwgMTgsIDE5LCAyMTYsIAotICAgIDEyNiwgMTgsIDE5LCAyMTYsIDEyOCwgMTgsIDE5LCAyMTUsIDEzNiwgMTgsIDE5LCAyMTUsIDEzOCwgMTgsIDE5LCAyMTUsIAotICAgIDE0MywgMTgsIDE5LCAyMTYsIDQ5LCAxOCwgMTksIDIxNiwgNTEsIDE4LCAxOSwgMjIxLCAyMDksIDIxOSwgMjA2LCAxOCwgCi0gICAgMTksIDIyMSwgMjA5LCAyMjAsIDEsIDE4LCAxOSwgMjIxLCAyMDksIDI0MSwgNTMsIDE4LCAxOSwgNzIsIDI0MiwgNzMsIDE4LCAKLSAgICAxOSwgNzIsIDI0OCwgNTIsIDI0MywgNTUsIDE4LCAxOSwgNzIsIDI0MywgMTMyLCAxOCwgMTksIDcyLCAyNDIsIDc4LCAxOCwgCi0gICAgMTksIDIyMSwgMjA5LCAyMzUsIDMzLCAxOCwgMTksIDcyLCAyMzUsIDMxLCAxOCwgMTksIDI1MiwgNjgsIDI0OCwgNTIsIAotICAgIDE1NiwgMTgsIDE5LCAyNTIsIDY4LCAyNDgsIDUyLCAxNTMsIDE4LCAxOSwgNzIsIDI0OCwgNDcsIDIyMiwgOTEsIDIzMiwgCi0gICAgMjIzLCAyMTMsIDEyMiwgMjMzLCAxMCwgMjMyLCAyMjMsIDEsIDE3NiwgMjMyLCAyMjMsIDEsIDIzNCwgMTMyLCAyMzIsIAotICAgIDIyMywgMSwgMjQzLCAxMzUsIDIzMiwgMjIzLCAxLCAyNDIsIDI0OSwgMjMyLCAyMjMsIDEsIDIyOSwgNzcsIDIzMiwgMjIzLCAKLSAgICAxLCAyNTEsIDMzLCAyMzIsIDIyMywgMSwgMjUwLCAxNTcsIDIzMiwgMjIzLCAxLCAyMzUsIDE0MSwgMjMyLCAyMjMsIDEsIAotICAgIDIzNSwgMTE0LCAyMzIsIDIyMywgMSwgMjExLCA3MSwgMjMyLCAyMjMsIDEsIDIxNywgMTA1LCAyMzIsIDIyMywgMSwgMjE2LCAKLSAgICAyMDgsIDIzMiwgMjIzLCAxLCAyNDgsIDIyMSwgMjMyLCAyMjMsIDEsIDI0OCwgMjUsIDIzMiwgMjIzLCAxLCAxOTcsIDIzMiwgCi0gICAgMjIzLCAxLCAxOTAsIDIzMiwgMjIzLCAxLCAyMjUsIDE0NywgMjMyLCAyMjMsIDEsIDI1MiwgMTkxLCAyMzIsIDIyMywgMSwgCi0gICAgMjUyLCAxOCwgMjMyLCAyMjMsIDEsIDE4NCwgMjMyLCAyMjMsIDEsIDE5MSwgMjMyLCAyMjMsIDEsIDIwNSwgMjMyLCAyMjMsIAotICAgIDEsIDIzMywgMTM1LCAyMzIsIDIyMywgMSwgMjEyLCA2NSwgMjMyLCAyMjMsIDEsIDIyMCwgMTAyLCAyMzIsIDIyMywgMSwgCi0gICAgMjE4LCAyMjMsIDIzMiwgMjIzLCAxLCAyMDYsIDIzMiwgMjIzLCAxLCAxNjIsIDIzMiwgMjIzLCAyNSwgNSwgNjEsIDIzMiwgCi0gICAgMjIzLCAyNSwgNSwgNzMsIDIzMiwgMjIzLCAyNSwgNSwgNzAsIDIzMiwgMjIzLCAyNSwgNSwgMjQ1LCAyMDksIDIzMiwgMjIzLCAKLSAgICAyNSwgNSwgMjU0LCAyMDEsIDIzMiwgMjIzLCAyNSwgNSwgMjI2LCAxODMsIDIzMiwgMjIzLCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDIzMiwgMjIzLCAyNSwgNSwgNzUsIDIzMiwgMjIzLCAyNSwgNSwgNzYsIDIzMiwgMjIzLCAyMTgsIDczLCAxLCAxOTEsIDIzMiwgCi0gICAgMjIzLCAyMTgsIDczLCAxLCAyMDUsIDIzMiwgMjIzLCAyMTgsIDczLCAxLCAyMTIsIDY1LCAyMzIsIDIyMywgNCwgMSwgMTc2LCAKLSAgICAyMzIsIDIyMywgNCwgMSwgMjI5LCA3NywgMjMyLCAyMjMsIDQsIDEsIDI1NCwgNzUsIDIzMiwgMjIzLCA0LCAxLCAyMTcsIAotICAgIDEwNSwgMjMyLCAyMjMsIDQsIDEsIDE5NywgMjMyLCAyMjMsIDQsIDEsIDE5MCwgMjMyLCAyMjMsIDQsIDEsIDE4NCwgMjMyLCAKLSAgICAyMjMsIDQsIDEsIDIwNSwgMjMyLCAyMjMsIDQsIDEsIDIzMywgMTM1LCAyMzIsIDIyMywgNSwgMjMwLCA4OSwgMjMyLCAyMjMsIAotICAgIDUsIDIzNCwgMTcxLCAyMzIsIDIyMywgNSwgMjIyLCAzMiwgMjMyLCAyMjMsIDUsIDIzMiwgMTI3LCAyMzIsIDIyMywgMjQ1LCAKLSAgICAzMSwgNzgsIDIzMiwgMjIzLCAyMjQsIDEzLCA3OCwgMjMyLCAyMjMsIDIxLCAyMTAsIDg2LCAyMzIsIDIyMywgMjEsIDExMCwgCi0gICAgMjMyLCAyMjMsIDIxLCAxMDUsIDIzMiwgMjIzLCAyMSwgMTU4LCAyMzIsIDIyMywgMjEsIDE2MSwgMjMyLCAyMjMsIDIxLCAKLSAgICAxODksIDIzMiwgMjIzLCAyMSwgMTk0LCAyMzIsIDIyMywgMjEsIDE5OCwgMjMyLCAyMjMsIDIxLCAxOTUsIDIzMiwgMjIzLCAKLSAgICAyMSwgMjAwLCAzOSwgMjMzLCA1OSwgMSwgMTc2LCAzOSwgMjMzLCA1OSwgMSwgMjExLCAxNjUsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAyMjksIDc3LCAzOSwgMjMzLCA1OSwgMSwgMjE1LCAxODMsIDM5LCAyMzMsIDU5LCAxLCAyMDYsIDM5LCAyMzMsIDU5LCAxLCAKLSAgICAxOTEsIDM5LCAyMzMsIDU5LCAxLCAyMTcsIDEwNSwgMzksIDIzMywgNTksIDEsIDIxNiwgMjA4LCAzOSwgMjMzLCA1OSwgMSwgCi0gICAgMjMzLCAxMzUsIDM5LCAyMzMsIDU5LCAxLCAxOTAsIDM5LCAyMzMsIDU5LCAxLCAyMjUsIDE0NywgMzksIDIzMywgNTksIDEsIAotICAgIDE4NCwgMzksIDIzMywgNTksIDEsIDI0NCwgMTk2LCAzOSwgMjMzLCA1OSwgMSwgMjE0LCAyNywgMzksIDIzMywgNTksIDEsIAotICAgIDE2MiwgMzksIDIzMywgNTksIDEsIDIyNCwgODgsIDM5LCAyMzMsIDU5LCAxLCAyMzQsIDEzMiwgMzksIDIzMywgNTksIDEsIAotICAgIDIxNSwgMTc1LCAzOSwgMjMzLCA1OSwgMSwgMTk3LCAzOSwgMjMzLCA1OSwgMSwgNjEsIDM5LCAyMzMsIDU5LCAxLCA3MywgCi0gICAgMzksIDIzMywgNTksIDEsIDI0NSwgMjA5LCAzOSwgMjMzLCA1OSwgMSwgMjQ1LCAxOTcsIDM5LCAyMzMsIDU5LCAxLCA3MCwgCi0gICAgMzksIDIzMywgNTksIDEsIDIyNiwgMTgzLCAzOSwgMjMzLCA1OSwgMSwgNzYsIDM5LCAyMzMsIDU5LCAxLCAyMTQsIDIxNCwgCi0gICAgMzksIDIzMywgNTksIDEsIDc1LCAzOSwgMjMzLCA1OSwgMSwgMjUzLCAxOTAsIDM5LCAyMzMsIDU5LCAxLCAyNTQsIDIwMSwgCi0gICAgMzksIDIzMywgNTksIDEsIDIxNiwgMjgsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI3LCAzOSwgMjMzLCA1OSwgMSwgMjE2LCAKLSAgICAyNiwgMzksIDIzMywgNTksIDEsIDIxNiwgMjUsIDM5LCAyMzMsIDU5LCAxLCAyMTYsIDI0LCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDEyNSwgMjI0LCA4OCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIyNCwgODgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNzYsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTEsIDE2NSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyOSwgNzcsIDE2NiwgMzksIAotICAgIDE3MywgMSwgMTIxLCAxNzYsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMTEsIDE2NSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAotICAgIDIyOSwgNzcsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTUsIDE4MywgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIwNiwgMTY2LCAKLSAgICAzOSwgMTczLCAxLCAxMjUsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNSwgMTgzLCAxNjYsIDM5LCAxNzMsIDEsIAotICAgIDEyMSwgMjA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE3LCAxMDUsIDE2NiwgCi0gICAgMzksIDE3MywgMSwgMTI1LCAyMTYsIDIwOCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE5NywgMTY2LCAzOSwgMTczLCAxLCAKLSAgICAxMjEsIDIxNywgMTA1LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE2LCAyMDgsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTcsIAotICAgIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMjUsIDE0NywgMTY2LCAzOSwgMTczLCAKLSAgICAxLCAxMjUsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDE5MCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIyNSwgMTQ3LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTg0LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjQ0LCAxOTYsIDE2NiwgMzksIDE3MywgCi0gICAgMSwgMTI1LCAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjMzLCAxMzUsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAKLSAgICAyNDQsIDE5NiwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNCwgMjcsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMzMsIDEzNSwgCi0gICAgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE2MiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDI0OCwgMjIxLCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyNSwgMjUyLCAxOTEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxNjIsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNDgsIAotICAgIDIyMSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI1MiwgMTkxLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjMzLCAxODQsIDE2NiwgCi0gICAgMzksIDE3MywgMSwgMTI1LCAyMTEsIDEzOCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIzMywgMTg0LCAxNjYsIDM5LCAxNzMsIAotICAgIDEsIDEyMSwgMjExLCAxMzgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTgsIDgyLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCi0gICAgMjE4LCA4MiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjUsIDIxOSwgMjM5LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTUsIDczLCAKLSAgICAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMzYsIDMzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCA3MCwgMTY2LCAzOSwgMTczLCAyNSwgCi0gICAgNSwgMjE0LCAxMTgsIDE2NiwgMzksIDE3MywgMjUsIDUsIDc1LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTQsIDI0MywgMTY2LCAKLSAgICAzOSwgMTczLCAyNSwgNSwgNzYsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNywgMCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgCi0gICAgMjE0LCAyMTQsIDE2NiwgMzksIDE3MywgMjUsIDUsIDI1MywgMTY3LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTUsIDI4LCAKLSAgICAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDExMSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjI2LCAxMDksIDE2NiwgMzksIAotICAgIDE3MywgMjUsIDUsIDIyNiwgMjUzLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDIxMCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgCi0gICAgMjM1LCAxNTIsIDE2NiwgMzksIDE3MywgMSwgNDAsIDIxNCwgMTA1LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMjksIDc5LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMzAsIDI1LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAxOTMsIDE2NiwgMzksIDE3MywgMSwgCi0gICAgNDAsIDIzNSwgMjMsIDE2NiwgMzksIDE3MywgMSwgNDAsIDI0OSwgNjAsIDE2NiwgMzksIDE3MywgMSwgNDAsIDI1MywgMTU4LCAKLSAgICAxNjYsIDM5LCAxNzMsIDEzOCwgMjMxLCAxNTgsIDE2NiwgMzksIDE3MywgMTM4LCAyMzEsIDE1NywgMTY2LCAzOSwgMTczLCAKLSAgICAyMSwgMjEwLCA4NiwgMTY2LCAzOSwgMTczLCAyMSwgMTEwLCAxNjYsIDM5LCAxNzMsIDIxLCAxMDUsIDE2NiwgMzksIDE3MywgCi0gICAgMjEsIDE1OCwgMTY2LCAzOSwgMTczLCAyMSwgMTYxLCAxNjYsIDM5LCAxNzMsIDIxLCAxODksIDE2NiwgMzksIDE3MywgMjEsIAotICAgIDE5NCwgMTY2LCAzOSwgMTczLCAyMSwgMTk4LCAxNjYsIDM5LCAxNzMsIDIxLCAxOTUsIDE2NiwgMzksIDE3MywgMjEsIDIwMCwgCi0gICAgMTY2LCAzOSwgMTczLCA4OSwgMjEsIDExMCwgMTY2LCAzOSwgMTczLCA1LCAyMzMsIDEyMCwgMTY2LCAzOSwgMTczLCA1LCAKLSAgICAyMzMsIDExOSwgNjksIDE2LCAyMjUsIDIzNiwgNjksIDE2LCAyMzAsIDcyLCAyMzQsIDI1LCA2OSwgMTYsIDIyNSwgNzIsIAotICAgIDIzNCwgMjUsIDY5LCAxNiwgMjUyLCA1MCwgMjM0LCAyNSwgNjksIDE2LCAyNTEsIDEwNCwgMjM0LCAyNSwgNjksIDE2LCAKLSAgICAyMjQsIDIxNiwgMjM0LCAyNSwgNjksIDE2LCAyMjQsIDIxMCwgMjM0LCAyNSwgNjksIDE2LCAyMjQsIDIwOCwgMjM0LCAyNSwgCi0gICAgNjksIDE2LCAyMjQsIDIxNCwgMjM0LCAyNSwgNjksIDE2LCAyMjQsIDIxMiwgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE3MywgCi0gICAgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE2OSwgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE2OCwgMjM0LCAyNSwgNjksIDE2LCAKLSAgICAyNDgsIDE3MSwgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE3MCwgMjM0LCAyNSwgNjksIDE2LCAyNDgsIDE2NywgMjM0LCAyNSwgCi0gICAgNjksIDE2LCAyMTUsIDg3LCA2OSwgMTYsIDIzMCwgNzIsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNSwgNzIsIDIyMiwgMjA1LCAKLSAgICA2OSwgMTYsIDI1MiwgNTAsIDIyMiwgMjA1LCA2OSwgMTYsIDI1MSwgMTA0LCAyMjIsIDIwNSwgNjksIDE2LCAyMjQsIDIxNiwgCi0gICAgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMTAsIDIyMiwgMjA1LCA2OSwgMTYsIDIyNCwgMjA4LCAyMjIsIDIwNSwgNjksIDE2LCAKLSAgICAyMjQsIDIxNCwgMjIyLCAyMDUsIDY5LCAxNiwgMjI0LCAyMTIsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgMTczLCAyMjIsIAotICAgIDIwNSwgNjksIDE2LCAyNDgsIDE2OSwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNjgsIDIyMiwgMjA1LCA2OSwgMTYsIDI0OCwgCi0gICAgMTcxLCAyMjIsIDIwNSwgNjksIDE2LCAyNDgsIDE3MCwgMjIyLCAyMDUsIDY5LCAxNiwgMjQ4LCAxNjcsIDIyMiwgMjA1LCAKLSAgICAyNTEsIDEyMSwgMSwgMTc2LCAyNTEsIDEyMSwgMSwgMjQzLCAxMzUsIDI1MSwgMTIxLCAxLCAyMjksIDc3LCAyNTEsIDEyMSwgCi0gICAgMSwgMjI5LCAyMiwgMjUxLCAxMjEsIDEsIDE5MCwgMjUxLCAxMjEsIDEsIDI1MiwgMTkxLCAyNTEsIDEyMSwgMSwgMTg0LCAKLSAgICAyNTEsIDEyMSwgMSwgMjMwLCAxMDUsIDI1MSwgMTIxLCAxLCAyMTcsIDEwNSwgMjUxLCAxMjEsIDEsIDI0OCwgMjIxLCAyNTEsIAotICAgIDEyMSwgMSwgMTk3LCAyNTEsIDEyMSwgMSwgMjI4LCAzNiwgMjUxLCAxMjEsIDEsIDI1MSwgMzMsIDI1MSwgMTIxLCAxLCAKLSAgICAyMzUsIDE0MSwgMjUxLCAxMjEsIDEsIDIyNywgMTY1LCAyNTEsIDEyMSwgMSwgMjI3LCAxNTgsIDI1MSwgMTIxLCAxLCAxOTEsIAotICAgIDI1MSwgMTIxLCAxLCAyMDUsIDI1MSwgMTIxLCAxLCAyMzMsIDEzNSwgMjUxLCAxMjEsIDEsIDIxNCwgMjcsIDI1MSwgMTIxLCAKLSAgICAxLCAyMDYsIDI1MSwgMTIxLCAxLCA2MSwgMjUxLCAxMjEsIDEsIDE2MiwgMjUxLCAxMjEsIDI1LCA1LCA3MywgMjUxLCAxMjEsIAotICAgIDI1LCA1LCA3MCwgMjUxLCAxMjEsIDI1LCA1LCA3NSwgMjUxLCAxMjEsIDI1LCA1LCA3NiwgMjUxLCAxMjEsIDI1LCA1LCAKLSAgICAyNTQsIDI0MywgMjUxLCAxMjEsIDIyNiwgNjAsIDI1MSwgMTIxLCAyNDUsIDE0MywgNjQsIDIyMSwgMTcyLCAzOSwgODksIDEsIAotICAgIDEyNSwgMTc2LCAzOSwgODksIDEsIDEyNSwgMjM0LCAxMzIsIDM5LCA4OSwgMSwgMTI1LCAyMzMsIDE3MSwgMzksIDg5LCAxLCAKLSAgICAxMjEsIDE3NiwgMzksIDg5LCAxLCAxMjEsIDIzMywgMTcxLCAzOSwgODksIDEsIDEyMSwgMjM0LCAxMzIsIDM5LCA4OSwgMSwgCi0gICAgMjI5LCA3NywgMzksIDg5LCAxLCAxMjUsIDI1MSwgMzMsIDM5LCA4OSwgMSwgMTI1LCAyNTAsIDE1NywgMzksIDg5LCAxLCAKLSAgICAxMjEsIDI1MSwgMzMsIDM5LCA4OSwgMSwgMTIxLCAyMDYsIDM5LCA4OSwgMSwgMTIxLCAyNTAsIDE1NywgMzksIDg5LCAxLCAKLSAgICAyMjcsIDE2NSwgMzksIDg5LCAxLCAyMjMsIDE0MCwgMzksIDg5LCAxLCAxMjUsIDIyMywgMTM4LCAzOSwgODksIDEsIDI0OCwgCi0gICAgMjIxLCAzOSwgODksIDEsIDEyMSwgMjIzLCAxMzgsIDM5LCA4OSwgMSwgMjIzLCAxNDksIDM5LCA4OSwgMSwgMTI1LCAyMTcsIAotICAgIDEwNSwgMzksIDg5LCAxLCAxMjUsIDIxNiwgMjA4LCAzOSwgODksIDEsIDEyMSwgMjE3LCAxMDUsIDM5LCA4OSwgMSwgMTIxLCAKLSAgICAyMTYsIDIwOCwgMzksIDg5LCAxLCAxOTcsIDM5LCA4OSwgMSwgMjUyLCAxOTEsIDM5LCA4OSwgMSwgMTI1LCAxOTAsIDM5LCAKLSAgICA4OSwgMSwgMTI1LCAyMjUsIDE0NywgMzksIDg5LCAxLCAxMjUsIDI0NCwgMTk2LCAzOSwgODksIDEsIDEyMSwgMTkwLCAzOSwgCi0gICAgODksIDEsIDEyMSwgMjQ0LCAxOTYsIDM5LCA4OSwgMSwgMTIxLCAyMjUsIDE0NywgMzksIDg5LCAxLCAxODQsIDM5LCA4OSwgCi0gICAgMSwgMTIxLCAxOTEsIDM5LCA4OSwgMSwgMTI1LCAxOTEsIDM5LCA4OSwgMSwgMjA1LCAzOSwgODksIDEsIDIyMiwgMTM3LCAKLSAgICAzOSwgODksIDEsIDIzMywgMTM1LCAzOSwgODksIDEsIDIzMiwgOTMsIDM5LCA4OSwgMSwgMjEyLCA2NSwgMzksIDg5LCAxLCAKLSAgICAxMjUsIDIyMCwgMTAyLCAzOSwgODksIDEsIDEyNSwgMjE4LCAyMjMsIDM5LCA4OSwgMSwgMTI1LCAyMDYsIDM5LCA4OSwgMSwgCi0gICAgMTI1LCAxNjIsIDM5LCA4OSwgMSwgMjMyLCAxODQsIDM5LCA4OSwgMSwgNjEsIDM5LCA4OSwgMSwgMTIxLCAxNjIsIDM5LCAKLSAgICA4OSwgMSwgNzMsIDM5LCA4OSwgMSwgMjM2LCAzMywgMzksIDg5LCAxLCA3MCwgMzksIDg5LCAxLCAyMTQsIDExOCwgMzksIAotICAgIDg5LCAxLCAyNDUsIDIwOSwgMzksIDg5LCAxLCAyMjYsIDE4MywgMzksIDg5LCAxLCAyMzMsIDEyMCwgMzksIDg5LCAxLCAKLSAgICAyNDIsIDEzMiwgMjA2LCAzOSwgODksIDExNiwgNSwgMTQ3LCAyMDUsIDM5LCA4OSwgMTE2LCA1LCAxNDcsIDIzMywgMTM1LCAKLSAgICAzOSwgODksIDExNiwgNSwgMjMzLCAxMzYsIDIxNywgNTgsIDIzMywgMTA5LCAzOSwgODksIDUsIDIzMSwgMjA0LCAyMzQsIAotICAgIDIzMSwgMjMzLCAxMDksIDM5LCA4OSwgMTE2LCA1LCA0MCwgMjI5LCA3NywgMzksIDg5LCAxMTYsIDUsIDEyMSwgMTkwLCAzOSwgCi0gICAgODksIDExNiwgNSwgMTI1LCAyMjMsIDEzOSwgMTc3LCAxMjEsIDE5MCwgMzksIDg5LCAxMTYsIDUsIDE4NCwgMzksIDg5LCAKLSAgICAxMTYsIDUsIDI1MiwgMTkxLCAzOSwgODksIDExNiwgNSwgMjA2LCAzOSwgODksIDUsIDIyMiwgMTAsIDM5LCA4OSwgMjUsIDUsIAotICAgIDYxLCAzOSwgODksIDI1LCA1LCAyMzEsIDIwNCwgMjIxLCAyMjYsIDM5LCA4OSwgMjUsIDUsIDI1NSwgNzMsIDM5LCA4OSwgCi0gICAgMjUsIDUsIDIxNywgNjQsIDI1NSwgNzMsIDM5LCA4OSwgMjUsIDUsIDczLCAzOSwgODksIDI1LCA1LCAyMzYsIDMzLCAzOSwgCi0gICAgODksIDI1LCA1LCAyMTQsIDIxNCwgMzksIDg5LCAyNSwgNSwgMjE0LCAxMTcsIDM5LCA4OSwgMjUsIDUsIDcwLCAzOSwgODksIAotICAgIDI1LCA1LCAyMTQsIDExOCwgMzksIDg5LCAyNSwgNSwgNzYsIDM5LCA4OSwgMjUsIDUsIDIyNywgMSwgNTEsIDM5LCA4OSwgCi0gICAgMjUsIDUsIDIyNiwgMTA5LCAzOSwgODksIDI1LCA1LCA3NSwgMzksIDg5LCAyNSwgNSwgMjU0LCAyNDMsIDM5LCA4OSwgMjUsIAotICAgIDUsIDIyNiwgMTgzLCAzOSwgODksIDI1LCA1LCAyNTQsIDIwMSwgMzksIDg5LCAyNSwgNSwgODksIDI1NCwgMjAxLCAzOSwgCi0gICAgODksIDI1LCA1LCAyMjcsIDEsIDQ4LCAzOSwgODksIDUsIDIzMSwgMjA0LCAyMzQsIDIzMCwgMzksIDg5LCA1LCAyMTYsIDI5LCAKLSAgICAzOSwgODksIDUsIDIxNiwgMjgsIDM5LCA4OSwgNSwgMjM0LCA5NywgMjE2LCAyNywgMzksIDg5LCA1LCAyMzQsIDk3LCAyMTYsIAotICAgIDI2LCAzOSwgODksIDUsIDIzNCwgOTcsIDIxNiwgMjUsIDM5LCA4OSwgNSwgMjIzLCAxODgsIDI0MiwgNDUsIDM5LCA4OSwgNSwgCi0gICAgMjMxLCAyMDQsIDIyMSwgMjUzLCAzOSwgODksIDUsIDIzNCwgOTYsIDIzNCwgMjE1LCAzOSwgODksIDM4LCAyNDksIDExNSwgCi0gICAgMjQ3LCAxMjAsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDIxMCwgODYsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDExMCwgMzksIDg5LCAKLSAgICAyNDEsIDQ2LCAyMSwgMTA1LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxNTgsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE2MSwgMzksIAotICAgIDg5LCAyNDEsIDQ2LCAyMSwgMTg5LCAzOSwgODksIDI0MSwgNDYsIDIxLCAxOTQsIDM5LCA4OSwgMjQxLCA0NiwgMjEsIDE5OCwgCi0gICAgMzksIDg5LCAyNDEsIDQ2LCAyMSwgMTk1LCAzOSwgODksIDI0MSwgNDYsIDIxLCAyMDAsIDM5LCA4OSwgODksIDIxLCAyMTAsIAotICAgIDg2LCAzOSwgODksIDg5LCAyMSwgMTEwLCAzOSwgODksIDg5LCAyMSwgMTA1LCAzOSwgODksIDg5LCAyMSwgMTU4LCAzOSwgCi0gICAgODksIDg5LCAyMSwgMTYxLCAzOSwgODksIDg5LCAyMSwgMTg5LCAzOSwgODksIDg5LCAyMSwgMTk0LCAzOSwgODksIDg5LCAKLSAgICAyMSwgMTk4LCAzOSwgODksIDg5LCAyMSwgMTk1LCAzOSwgODksIDg5LCAyMSwgMjAwLCAzOSwgODksIDUsIDIxMSwgMjQ5LCAKLSAgICAzOSwgODksIDUsIDIxMSwgMjQ4LCAzOSwgODksIDUsIDIyMSwgMjE1LCAzOSwgODksIDUsIDIzNCwgMTYwLCAzOSwgODksIDUsIAotICAgIDI0MCwgMjMyLCAzOSwgODksIDUsIDI0NywgMTM0LCAzOSwgODksIDUsIDIyMywgNDksIDIyMiwgMTg3LCAyMjMsIDE0OSwgCi0gICAgMzksIDg5LCA1LCAyMzEsIDIwNCwgMjExLCA3MiwgMzksIDg5LCA1LCAyMzUsIDYsIDM5LCA4OSwgNSwgMjM1LCA1LCAzOSwgCi0gICAgODksIDUsIDIyMSwgMjIyLCAzOSwgODksIDUsIDIyMSwgMjIxLCAzOSwgODksIDUsIDI0MiwgOSwgMzksIDg5LCA1LCAyNTEsIAotICAgIDMwLCAxMDIsIDUsIDIxNCwgMjAwLCAyMjMsIDMwLCAxMDIsIDUsIDIxNCwgMjAwLCAyNTEsIDEsIDEwMiwgNSwgMjUwLCAKLSAgICAxODYsIDEwMiwgNSwgMjE4LCAxNSwgMTAyLCA1LCAyNTEsIDIzMywgMTAyLCAxLCAyNTQsIDE4NCwgMTAyLCAxLCAyNTQsIAotICAgIDE4NSwgMjE3LCAxMywgMTAyLCAxLCAyMzYsIDI5LCAxMDIsIDEsIDIzNiwgMzAsIDIxNywgMTMsIDEwMiwgMSwgMjE0LCAKLSAgICAyMDMsIDEwMiwgMSwgMjE0LCAyMDQsIDIxNywgMTMsIDEwMiwgMSwgMjIzLCAxODgsIDIyMywgNzksIDEwMiwgMSwgMjIzLCAKLSAgICAxODgsIDIyMywgODAsIDIxNywgMTMsIDEwMiwgMSwgMjMzLCAxMzYsIDIzMywgMjQsIDEwMiwgMSwgMjMzLCAxMzYsIDIzMywgCi0gICAgMjUsIDIxNywgMTMsIDEwMiwgMSwgMjQ1LCAxNzksIDEwMiwgMSwgMjU0LCAxOTksIDEwMiwgMSwgMjI2LCAyMTIsIDEwMiwgCi0gICAgMSwgMjI2LCAyMTMsIDIxNywgMTMsIDEwMiwgMSwgMTc2LCAxMDIsIDEsIDIzNSwgMTMsIDIzMSwgMjA3LCAxMDIsIDEsIAotICAgIDI0MywgMTM1LCAxMDIsIDEsIDI0MywgMTM2LCAyNDIsIDE2MSwgMTAyLCAxLCAyMjksIDc3LCAxMDIsIDEsIDI1MSwgMzMsIAotICAgIDEwMiwgMSwgMjUxLCAzNCwgMjMzLCAxMjMsIDEwMiwgMSwgMjM1LCAxNDEsIDEwMiwgMSwgMjM1LCAxNDIsIDIzNSwgMTE4LCAKLSAgICAxMDIsIDEsIDIyNywgMTY1LCAxMDIsIDEsIDIxNywgMTA2LCAyMzMsIDc2LCAxMDIsIDEsIDIxNywgMTA2LCAyMzAsIDY3LCAKLSAgICAyMzEsIDIwNywgMTAyLCAxLCAyNDgsIDIyMiwgMjMwLCA2NywgMjU0LCAxNDUsIDEwMiwgMSwgMjQ4LCAyMjIsIDIzMCwgNjcsIAotICAgIDIzMSwgMjA3LCAxMDIsIDEsIDIyOSwgMjI5LCAyMjMsIDE1MiwgMTAyLCAxLCAyMTcsIDEwNSwgMTAyLCAxLCAyMTcsIDEwNiwgCi0gICAgMjE3LCAzNSwgMTAyLCAxLCAyNDgsIDIyMSwgMTAyLCAxLCAyNDgsIDIyMiwgMjMxLCAyMjUsIDEwMiwgMSwgMTk3LCAxMDIsIAotICAgIDEsIDE5MCwgMTAyLCAxLCAyMjYsIDkwLCAyMzQsIDIyNiwgMTAyLCAxLCAyNTIsIDE5MSwgMTAyLCAxLCAyNTIsIDE5MiwgCi0gICAgMjM0LCAxNzIsIDEwMiwgMSwgMTg0LCAxMDIsIDEsIDE5MSwgMTAyLCAxLCAyMDUsIDEwMiwgMSwgMjMzLCAxMzUsIDEwMiwgCi0gICAgMSwgMjEyLCA2NSwgMTAyLCAxLCAyMjIsIDM0LCAyMjIsIDIwLCAxMDIsIDEsIDIyMiwgMzQsIDIyMSwgMjMzLCAxMDIsIDEsIAotICAgIDIwNiwgMTAyLCAxLCAxNjIsIDEwMiwgNSwgMjIzLCA3MCwgMTAyLCAyNSwgNSwgMjE3LCAxMywgMTAyLCAyNSwgNSwgMjE0LCAKLSAgICAxOTksIDEwMiwgMjUsIDUsIDIxNCwgMjAwLCAyMjEsIDIyOSwgMTAyLCAyNSwgNSwgMjE4LCA0NywgMTAyLCAyNSwgNSwgCi0gICAgMjE4LCA0OCwgMjM2LCAyMSwgMTAyLCAyNSwgNSwgMjIzLCAxODgsIDIyMywgNzksIDEwMiwgMjUsIDUsIDIyMywgMTg4LCAKLSAgICAyMjMsIDgwLCAyMTcsIDEzLCAxMDIsIDI1LCA1LCAyMzMsIDEzNiwgMjMzLCAyNCwgMTAyLCAyNSwgNSwgMjMzLCAxMzYsIAotICAgIDIzMywgMjUsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIxNywgNjUsIDEwMiwgMjUsIDUsIDIxNywgNjYsIDIyMywgNzksIDEwMiwgCi0gICAgMjUsIDUsIDIxNywgNjYsIDIxNywgMTMsIDEwMiwgMjUsIDUsIDIxNywgNjYsIDIyMywgODAsIDIxNywgMTMsIDEwMiwgMjUsIAotICAgIDUsIDIyNSwgMTg0LCAxMDIsIDI1LCA1LCAyMjUsIDE4NSwgMjE3LCAxMywgMTAyLCAyNTQsIDI1MCwgMjU0LCAyNDksIDEwMiwgCi0gICAgMSwgMjM0LCAyNTEsIDIyMSwgMjI4LCAxMDIsIDEsIDIzNCwgMTAyLCAyMjEsIDIyOCwgMTAyLCAxLCAyMTUsIDM0LCAyMjEsIAotICAgIDIyOCwgMTAyLCAxLCAyNDUsIDIwMywgMjIxLCAyMjgsIDEwMiwgMSwgMjE0LCAwLCAyMjEsIDIyOCwgMTAyLCAxLCAyMTAsIAotICAgIDEwNywgMjIxLCAyMjgsIDEwMiwgMSwgMjUzLCAyMDksIDIyMSwgMjI4LCAxMDIsIDIxLCAyMTAsIDg2LCAxMDIsIDIxLCAKLSAgICAxMTAsIDEwMiwgMjEsIDEwNSwgMTAyLCAyMSwgMTU4LCAxMDIsIDIxLCAxNjEsIDEwMiwgMjEsIDE4OSwgMTAyLCAyMSwgCi0gICAgMTk0LCAxMDIsIDIxLCAxOTgsIDEwMiwgMjEsIDE5NSwgMTAyLCAyMSwgMjAwLCAxMDIsIDIyNiwgMjksIDEwMiwgMjI2LCAKLSAgICA1NSwgMTAyLCAyMTEsIDIzOCwgMTAyLCAyNTAsIDIzNiwgMjI2LCA0OCwgMTAyLCAyNTAsIDIzNiwgMjE5LCAxNzIsIDEwMiwgCi0gICAgMjUwLCAyMzYsIDIyNiwgMiwgMTAyLCAyMjYsIDU0LCAxMDIsIDI4LCAxNiwgMjQ3LCAxMjYsIDEwMiwgMjgsIDE2LCAyNDgsIAotICAgIDUxLCAxMDIsIDI4LCAxNiwgMjQ2LCA2NCwgMTAyLCAyOCwgMTYsIDI0OCwgMTc2LCAxMDIsIDI4LCAxNiwgMjQ4LCAxNzcsIAotICAgIDIxOCwgMTUsIDEwMiwgMjgsIDE2LCAyNDcsIDIwNSwgMTAyLCAyOCwgMTYsIDI0OCwgMjE0LCAxMDIsIDI4LCAxNiwgMjQ4LCAKLSAgICAzMywgMTAyLCAyOCwgMTYsIDI0OCwgMTk4LCAxMDIsIDI4LCAxNiwgMjQ4LCAxNzcsIDI0MywgNTcsIDEwMiwgMjgsIDE2LCAKLSAgICAzOCwgMjE3LCA5LCAxMDIsIDI4LCAxNiwgMzgsIDI0NSwgMTQxLCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTY3LCAxMDIsIAotICAgIDI4LCAxNiwgMzgsIDIzNCwgMTY5LCAxMDIsIDI4LCAxNiwgMzgsIDIzNSwgMTIyLCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgCi0gICAgMTY4LCAyLCAyMzUsIDEyMiwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3MCwgMiwgMjM1LCAxMjIsIDEwMiwgMjgsIDE2LCAKLSAgICAzOCwgMjUyLCAzNywgMTAyLCAyOCwgMTYsIDM4LCAyNDIsIDE2NSwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyMDQsIDI0NiwgCi0gICAgNzQsIDEwMiwgMjgsIDE2LCAyMjIsIDI0OSwgMjA0LCAyNDgsIDIxMiwgMTAyLCAyOCwgMTYsIDIyMiwgMjQ5LCAyNTAsIDAsIAotICAgIDIxNSwgMTExLCAxMDIsIDI4LCAxNiwgMjIyLCAyNDksIDI1MCwgMCwgMjE3LCA3MywgMTAyLCAyOCwgMTYsIDIzMywgNDQsIAotICAgIDIwNCwgMjI2LCA0MywgMTAyLCAyOCwgMTYsIDIzMywgNDQsIDIwNCwgMjI0LCAxMzksIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAKLSAgICAyNTAsIDAsIDIyNSwgMzgsIDEwMiwgMjgsIDE2LCAyMzMsIDQ0LCAyNTAsIDAsIDIyNSwgMjYsIDEwMiwgMjgsIDE2LCAyMzMsIAotICAgIDQ0LCAyMDQsIDIyNSwgNjEsIDIwNywgNSwgMjI2LCAyNiwgMjA3LCA1LCAyMjYsIDM5LCAyMDcsIDUsIDIyNiwgMzUsIDIwNywgCi0gICAgMSwgNjEsIDIwNywgMSwgNzMsIDIwNywgMSwgNzAsIDIwNywgMSwgMjU0LCAyNDMsIDIwNywgMSwgNzYsIDIwNywgMSwgNzUsIAotICAgIDIwNywgMSwgMjQ1LCA1NSwgMjA3LCAxLCAxNzYsIDIwNywgMSwgMjI0LCA4OCwgMjA3LCAxLCAyNDMsIDEzNSwgMjA3LCAxLCAKLSAgICAyMjksIDc3LCAyMDcsIDEsIDI1MSwgMzMsIDIwNywgMSwgMjM1LCAxNDEsIDIwNywgMSwgMjEwLCAxMTYsIDIwNywgMSwgCi0gICAgMjI3LCAxNjUsIDIwNywgMSwgMjE3LCAxMDUsIDIwNywgMSwgMjQ4LCAyMjEsIDIwNywgMSwgMTk3LCAyMDcsIDEsIDE5MCwgCi0gICAgMjA3LCAxLCAyNDQsIDE5NiwgMjA3LCAxLCAyMTQsIDI3LCAyMDcsIDEsIDI1MiwgMTkxLCAyMDcsIDEsIDE4NCwgMjA3LCAxLCAKLSAgICAxOTEsIDIwNywgMSwgMjA1LCAyMDcsIDEsIDIzMywgMTM1LCAyMDcsIDEsIDIxMiwgNjUsIDIwNywgMSwgMjA2LCAyMDcsIDEsIAotICAgIDIxMSwgMTY1LCAyMDcsIDEsIDE2MiwgMjA3LCAxMTYsIDUsIDIyNiwgNTIsIDIwNywgMTE2LCA1LCAyMjYsIDI4LCAyMDcsIAotICAgIDExNiwgNSwgMjI2LCAyNSwgMjA3LCAyNSwgNSwgMjI2LCA0MiwgMjA3LCAyNSwgNSwgMjI2LCAyNCwgMjA3LCAyNSwgNSwgCi0gICAgMjI2LCA0NiwgMjA3LCAyNSwgNSwgMjI2LCAzNCwgMjA3LCAyNSwgNSwgMjI2LCA1MywgMjA3LCAyNSwgNSwgMjI2LCA0NCwgCi0gICAgMjA3LCA1LCAyMjYsIDU2LCAyMDcsIDUsIDIxMywgMTUyLCAyMDcsIDExNiwgNSwgMjI1LCAyNDgsIDE4NCwgMjA3LCAxMTYsIAotICAgIDUsIDIyNSwgMjQ4LCAyMTIsIDY1LCAyMDcsIDEsIDIzNCwgMTMyLCAyMDcsIDEsIDIxNywgMjMxLCAyMDcsIDIxLCAyMTAsIAotICAgIDg2LCAyMDcsIDIxLCAxMTAsIDIwNywgMjEsIDEwNSwgMjA3LCAyMSwgMTU4LCAyMDcsIDIxLCAxNjEsIDIwNywgMjEsIDE4OSwgCi0gICAgMjA3LCAyMSwgMTk0LCAyMDcsIDIxLCAxOTgsIDIwNywgMjEsIDE5NSwgMjA3LCAyMSwgMjAwLCAyMDcsIDI1MywgMTc1LCAKLSAgICAyMDcsIDEsIDIyMywgNTIsIDIwNywgMSwgMjMzLCA3LCAyMDcsIDEsIDI1MiwgMTgsIDIwNywgMSwgNDAsIDIzNSwgMjMsIAotICAgIDIwNywgMSwgNDAsIDE5MywgMjUyLCAxMjAsIDEsIDYxLCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDYxLCAyNTIsIDEyMCwgMSwgCi0gICAgMTYyLCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDE2MiwgMjUyLCAxMjAsIDEsIDIzMSwgMTgxLCAxNjIsIDI1MiwgMTIwLCAxLCAKLSAgICAyNTIsIDE5MSwgMjUyLCAxMjAsIDEsIDIzNCwgMjEyLCAyNTIsIDE5MSwgMjUyLCAxMjAsIDEsIDE5MCwgMjUyLCAxMjAsIDEsIAotICAgIDIxOSwgMTY0LCAxOTAsIDI1MiwgMTIwLCAxLCAxOTcsIDI1MiwgMTIwLCAxLCAyMzEsIDE4MSwgMTk3LCAyNTIsIDEyMCwgMSwgCi0gICAgMjEyLCA2NSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAyMTIsIDY1LCAyNTIsIDEyMCwgMSwgMjI2LCA2NywgMjEyLCA2NSwgCi0gICAgMjUyLCAxMjAsIDEsIDI0MywgMTM1LCAyNTIsIDEyMCwgMSwgMjE5LCAxNjQsIDI0MywgMTM1LCAyNTIsIDEyMCwgMSwgMjM1LCAKLSAgICAxNDEsIDI1MiwgMTIwLCAxLCAyNDgsIDIyMSwgMjUyLCAxMjAsIDEsIDIwNSwgMjUyLCAxMjAsIDEsIDIxOSwgMTY0LCAyMDUsIAotICAgIDI1MiwgMTIwLCAxLCAxODQsIDI1MiwgMTIwLCAxLCAyMTksIDE2NCwgMTg0LCAyNTIsIDEyMCwgMSwgMjE5LCAyNiwgMjE3LCAKLSAgICAxMDUsIDI1MiwgMTIwLCAxLCAyMjgsIDU1LCAyMTcsIDEwNSwgMjUyLCAxMjAsIDEsIDIwNiwgMjUyLCAxMjAsIDEsIDIxOSwgCi0gICAgMTY0LCAyMDYsIDI1MiwgMTIwLCAxLCAyMzEsIDE4MSwgMjA2LCAyNTIsIDEyMCwgMSwgMTkxLCAyNTIsIDEyMCwgMSwgMjE5LCAKLSAgICAxNjQsIDE5MSwgMjUyLCAxMjAsIDEsIDIyOSwgNzcsIDI1MiwgMTIwLCAxLCAyMzMsIDEzNSwgMjUyLCAxMjAsIDEsIDIxOSwgCi0gICAgMTY0LCAyMzMsIDEzNSwgMjUyLCAxMjAsIDEsIDIyNywgMTY1LCAyNTIsIDEyMCwgMSwgMjUxLCAzMywgMjUyLCAxMjAsIDEsIAotICAgIDIyOSwgMTQ4LCAyNTIsIDEyMCwgMSwgMjMxLCAxMjQsIDI1MiwgMTIwLCAxLCA3MywgMjUyLCAxMjAsIDEsIDcwLCAyNTIsIAotICAgIDEyMCwgNSwgMjE2LCAzMywgMjUyLCAxMjAsIDI1LCA1LCA3NSwgMjUyLCAxMjAsIDI1LCA1LCAyMjYsIDY3LCA3NSwgMjUyLCAKLSAgICAxMjAsIDI1LCA1LCAyNDUsIDIwOSwgMjUyLCAxMjAsIDI1LCA1LCA3MywgMjUyLCAxMjAsIDI1LCA1LCAyMzQsIDIxMiwgNzMsIAotICAgIDI1MiwgMTIwLCAyNSwgNSwgNzYsIDI1MiwgMTIwLCAyNSwgNSwgMjM0LCAyMTIsIDc2LCAyNTIsIDEyMCwgMjUsIDUsIDcwLCAKLSAgICAyNTIsIDEyMCwgMjUsIDUsIDEwNCwgMzEsIDIxOSwgMTY0LCAyMDYsIDI1MiwgMTIwLCAxMTYsIDUsIDIyOSwgNzksIDI1MiwgCi0gICAgMTIwLCAxMTYsIDUsIDI0MiwgNjAsIDI1MiwgMTIwLCAyMjYsIDM3LCAyNTIsIDEyMCwgMjI2LCAzMywgMjUyLCAxMjAsIDE2LCAKLSAgICAyNTEsIDI0MSwgMjI5LCAyMjksIDIzMSwgMzcsIDI1MiwgMTIwLCAxNiwgMjUxLCAyNDEsIDIyNSwgNjQsIDI1MiwgMTIwLCAKLSAgICAxNiwgMjUxLCAyNDEsIDIzNSwgNDgsIDI1MiwgMTIwLCAxNiwgMjUxLCAyNDEsIDIyNiwgMzcsIDE5NiwgMSwgMTc2LCAxOTYsIAotICAgIDEsIDIzNCwgMzksIDE5NiwgMSwgMjM0LCAxMzIsIDE5NiwgMSwgMjQzLCAxMzUsIDE5NiwgMSwgMjQyLCAxODYsIDE5NiwgMSwgCi0gICAgMjI5LCA3NywgMTk2LCAxLCAyNTEsIDMzLCAxOTYsIDEsIDI1MCwgMTU3LCAxOTYsIDEsIDIzNSwgMTQxLCAxOTYsIDEsIAotICAgIDIyNywgMTY1LCAxOTYsIDEsIDIxNywgMTA1LCAxOTYsIDEsIDIxNiwgMjA4LCAxOTYsIDEsIDI0OCwgMjIxLCAxOTYsIDEsIAotICAgIDE5NywgMTk2LCAxLCAxOTAsIDE5NiwgMSwgMjI1LCA0MiwgMTk2LCAxLCAyMjUsIDE0NywgMTk2LCAxLCAyNDQsIDE5NiwgCi0gICAgMTk2LCAxLCAyNDQsIDc1LCAxOTYsIDEsIDI1MiwgMTkxLCAxOTYsIDEsIDI1MSwgMjIyLCAxOTYsIDEsIDE4NCwgMTk2LCAxLCAKLSAgICAyMzAsIDE2OCwgMTk2LCAxLCAyMTUsIDE4MywgMTk2LCAxLCAyMTUsIDE3NSwgMTk2LCAxLCAyNDYsIDM4LCAxOTYsIDEsIAotICAgIDE5MSwgMTk2LCAxLCAyMDUsIDE5NiwgMSwgMjMzLCAxMzUsIDE5NiwgMSwgMTYyLCAxOTYsIDEsIDI0MSwgMTUzLCAxOTYsIAotICAgIDEsIDIxNCwgMjcsIDE5NiwgMSwgMjA2LCAxOTYsIDEsIDIyMCwgMTAyLCAxOTYsIDEsIDIxMiwgNjUsIDE5NiwgMSwgNjEsIAotICAgIDE5NiwgMjE4LCA3MywgMSwgMTkxLCAxOTYsIDIxOCwgNzMsIDEsIDIwNSwgMTk2LCAyNSwgNSwgMjU1LCA3MywgMTk2LCAyNSwgCi0gICAgNSwgNzMsIDE5NiwgMjUsIDUsIDc2LCAxOTYsIDI1LCA1LCAyMjYsIDE4MywgMTk2LCAyNSwgNSwgNzAsIDE5NiwgMjUsIDUsIAotICAgIDIxNCwgMTE4LCAxOTYsIDI1LCA1LCA3NSwgMTk2LCAxMTYsIDUsIDIzNSwgMjMsIDE5NiwgMTE2LCA1LCAxOTMsIDE5NiwgCi0gICAgMTE2LCA1LCAxNTYsIDE5NiwgMTE2LCA1LCAyMzAsIDI1LCAxOTYsIDExNiwgNSwgMjI2LCAxMDUsIDE5NiwgMTE2LCA1LCAKLSAgICAxNTMsIDE5NiwgMTE2LCA1LCAyMTcsIDE1MiwgMTk2LCAxMTYsIDUsIDIyNywgMTQyLCAxOTYsIDExNiwgNSwgMjM0LCAyMzAsIAotICAgIDE5NiwgNSwgMjIzLCAxNTAsIDE5NiwgNSwgMjI3LCAyMDUsIDE5NiwgMjI0LCAxNDEsIDIxNywgMTAzLCAxOTYsIDIyNCwgCi0gICAgMTQxLCAyMjcsIDE1MiwgMjE2LCAxMjAsIDIxNywgMTAzLCAxOTYsIDIyNCwgMTQxLCAyNTAsIDE2NCwgMTk2LCAyMjQsIAotICAgIDE0MSwgMjE1LCAxNzAsIDI1MCwgMTY0LCAxOTYsIDIyNCwgMTQxLCAyMTUsIDE2OSwgMTk2LCAyMSwgMjEwLCA4NiwgMTk2LCAKLSAgICAyMSwgMTEwLCAxOTYsIDIxLCAxMDUsIDE5NiwgMjEsIDE1OCwgMTk2LCAyMSwgMTYxLCAxOTYsIDIxLCAxODksIDE5NiwgMjEsIAotICAgIDE5NCwgMTk2LCAyMSwgMTk4LCAxOTYsIDIxLCAxOTUsIDE5NiwgMjEsIDIwMCwgMTk2LCAxLCAyMTUsIDE1NiwgMTk2LCAxLCAKLSAgICAyMTUsIDE0NCwgMTk2LCAxLCAyNDgsIDEzNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMjEwLCA4NiwgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAyMSwgMTEwLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAxMDUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIAotICAgIDE1OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTYxLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAxODksIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMjEsIDE5NCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMSwgMTk4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDIxLCAKLSAgICAxOTUsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjEsIDIwMCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzMsIDEzNSwgMjI2LCAKLSAgICAyMTAsIDI1MCwgMTAzLCAxLCAyNTMsIDIwNiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTQsIDIxNiwgMjI2LCAyMTAsIAotICAgIDI1MCwgMTAzLCAxLCAyNTQsIDExNSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTQsIDE3OCwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAxLCAyMzMsIDEzNCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTUsIDM1LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIAotICAgIDI1NSwgMzYsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjU1LCAzNCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyNTUsIDI5LCAKLSAgICAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzMiwgMjQxLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDIzNSwgMTcxLCAyMjYsIAotICAgIDIxMCwgMjUwLCAxMDMsIDEsIDIzNiwgMzQsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjM1LCAxOTAsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMSwgMjM1LCAxNzksIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjMyLCA5OCwgMjI2LCAyMTAsIDI1MCwgCi0gICAgMTAzLCAxLCAyMTQsIDIyMSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMTQsIDIxOSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAKLSAgICAyMTQsIDE2OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMTQsIDExMSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAxLCAyMzMsIAotICAgIDU4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI0NSwgMTA4LCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI0NSwgMjEyLCAKLSAgICAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI0NSwgMTUwLCAyMjYsIDIxMCwgMjUwLCAxMDMsIDEsIDI0NSwgODYsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMSwgMjMyLCAxNTYsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjI2LCAxMzcsIDIyNiwgMjEwLCAKLSAgICAyNTAsIDEwMywgMSwgMjI2LCAyNTIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMSwgMjI2LCAxMjUsIDIyNiwgMjEwLCAyNTAsIAotICAgIDEwMywgMSwgMjI2LCAyMjIsIDIyNiwgMjEwLCAyNTAsIDEwMywgMjMwLCAxMDMsIDIxNSwgMTIxLCAyMjYsIDIxMCwgMjUwLCAKLSAgICAxMDMsIDI0MywgMTMwLCAyMTUsIDEyMiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMzAsIDEwMSwgMjE1LCAxMjIsIDIyNiwgCi0gICAgMjEwLCAyNTAsIDEwMywgMjIzLCA5MiwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMjUsIDE0NSwgMjI2LCAyMTAsIDI1MCwgMTAzLCAKLSAgICAyNTQsIDIwOCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMjQsIDE0MSwgMjMwLCA5OCwgMjI2LCAyMTAsIDI1MCwgMTAzLCAyMjQsIAotICAgIDE0MSwgNTIsIDIzMCwgOTgsIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAyMTgsIDgsIDIwNywgMjI0LCAxNDEsIDI1MSwgCi0gICAgMjQxLCAyMjYsIDM4LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjI0LCAxMjksIDIwNywgMjI0LCAxNDEsIDI1MSwgMjQxLCAKLSAgICAyNTEsIDE5LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjMzLCA4LCAyMjEsIDIyNSwgMjA3LCAyMjQsIDE0MSwgMjUxLCAKLSAgICAyNDEsIDIzNSwgMTMsIDIyMSwgMjI1LCAyMDcsIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjQ4LCAyMjIsIDIyMSwgMjI1LCAyMDcsIAotICAgIDIyNCwgMTQxLCAyNTEsIDI0MSwgMjUyLCAxOTIsIDIyMSwgMjI1LCAyMTMsIDI1MiwgMTM4LCAyMzQsIDIxMCwgMjEzLCAKLSAgICAyNTIsIDEzOCwgMjIwLCA3NywgMjEzLCAyNTIsIDEzOCwgMjI0LCAxOTgsIDIxMywgMjUyLCA1LCAyMjgsIDIwOSwgMjEzLCAKLSAgICAyNTIsIDUsIDIxMSwgODAsIDIzMCwgMjIyLCAyMTgsIDAsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIDI1NCwgMjEzLCAyMzUsIAotICAgIDI0MywgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyMzUsIDI0MywgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAKLSAgICAyMTEsIDgwLCAyMzQsIDE5OCwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDEzOCwgMjUxLCAyLCA1MSwgMjEzLCAyNTIsIAotICAgIDEzOCwgMjExLCA4MCwgMjM0LCAxOTgsIDIzNSwgMjQzLCAyMTgsIDEsIDIyMSwgMTk3LCAyMTMsIDI1MiwgMTM4LCA1MiwgCi0gICAgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMTUsIDIxMSwgMjE4LCAwLCAyMTMsIDI1MiwgMTM4LCAyMzQsIDE5OCwgMjU0LCAKLSAgICA3NywgMjEzLCAyNTIsIDEzOCwgNTksIDUxLCAyMTMsIDI1MiwgMTM4LCAxMTMsIDE3MCwgNTEsIDIxMywgMjUyLCAxMzgsIAotICAgIDEzNCwgMTcwLCA1MSwgMjEzLCAyNTIsIDEzOCwgMjIyLCAyNDAsIDIzNCwgMjA5LCAyMzUsIDI0MywgMjE4LCAwLCAyMTMsIAotICAgIDI1MiwgMTM4LCAyNTMsIDIwNCwgMjM1LCAyNDMsIDIxOCwgMCwgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyMTgsIDAsIDIxMywgCi0gICAgMjUyLCA1LCAyMTMsIDE0OCwgMjE0LCAyMTYsIDIxMywgMjUyLCA1LCAyMjMsIDQ5LCAyMTMsIDE0OCwgMjE0LCAyMTYsIAotICAgIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjU0LCA3NywgMjEzLCAyNTIsIDUsIDIyMywgNDksIDIxMywgMTQ4LCAyNTQsIDc3LCAKLSAgICAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDIxNCwgMjE3LCAyLCAyMTcsIDc3LCAyMTMsIDI1MiwgNSwgMjEzLCAxNDgsIDI1NCwgCi0gICAgNzgsIDIsIDIxNywgNzcsIDIxMywgMjUyLCA1LCAyNTQsIDc2LCAyNTQsIDkxLCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjUyLCAKLSAgICAxNjYsIDIxMywgMjUyLCA1LCAyNTQsIDc2LCAyMTQsIDIwLCAyMTMsIDI1MiwgNSwgMjU0LCA3NiwgMjE0LCAyMSwgMiwgCi0gICAgMjE3LCA3NywgMjEzLCAyNTIsIDUsIDIxNiwgNjgsIDIxMywgMjUyLCA1LCAyNDEsIDE5MSwgMTk5LCAyNTQsIDc1LCAyMTMsIAotICAgIDI1MiwgNSwgMTk5LCAyNTQsIDc1LCAyMTMsIDI1MiwgNSwgMjIyLCAxNDIsIDE5OSwgMjU0LCA3NSwgMjEzLCAyNTIsIDUsIAotICAgIDI1NCwgNzYsIDIxNCwgMjIzLCAyMzAsIDkwLCAyMTMsIDI1MiwgNSwgMjU0LCAyMCwgMjEzLCAyNTIsIDUsIDIyMiwgMTg3LCAKLSAgICAyNTQsIDIwLCAyMTMsIDI1MiwgMTM4LCAyNTEsIDIsIDQ4LCAyMTMsIDI1MiwgNSwgMjM1LCAxMDIsIDIxMywgMjUyLCA1LCAKLSAgICAyMTQsIDE2MSwgNywgMSwgNCwgNiwgNjEsIDcsIDEsIDQsIDYsIDI1NCwgMjQzLCA3LCA0LCAxLCAyMTUsIDk0LCAyNTQsIAotICAgIDI0MywgNywgMSwgNCwgNiwgMjUyLCAxMzQsIDI1MywgMTU4LCA3LCAxLCA0LCA2LCAyNTEsIDY2LCA3LCAxLCA0LCA2LCAKLSAgICAyNDksIDYwLCA3LCAxLCA0LCA2LCAyNDUsIDU5LCA3LCAxLCA0LCA2LCA3NSwgNywgNCwgMSwgMjE1LCA5NCwgMjA0LCA3NSwgCi0gICAgNywgNCwgMSwgMjE1LCA5NCwgNzMsIDcsIDEsIDQsIDYsIDIzNSwgMTQ0LCA3LCAxLCA0LCA2LCAyMzUsIDIzLCA3LCAxLCA0LCAKLSAgICA2LCAyMzMsIDE0OSwgMiwgOTEsIDcsIDEsIDQsIDYsIDE5MywgNywgMSwgNCwgNiwgMjIzLCA0OSwgMjMwLCAyNSwgNywgMSwgCi0gICAgNCwgNiwgNzYsIDcsIDEsIDQsIDYsIDIwNCwgNzYsIDcsIDQsIDEsIDIxOSwgMTg3LCA3NiwgNywgNCwgMSwgMjE5LCAxODcsIAotICAgIDIwNCwgNzYsIDcsIDQsIDEsIDIxOSwgMTg3LCAxNDQsIDIsIDkxLCA3LCA0LCAxLCAyMTUsIDk0LCAyMjYsIDIzNCwgNywgMSwgCi0gICAgNCwgNiwgMjI2LCAxMzQsIDcsIDQsIDEsIDIxNiwgMTQsIDE2MywgNzYsIDcsIDQsIDEsIDI1MSwgMTc1LCAxNjMsIDc2LCA3LCAKLSAgICAxLCA0LCA2LCAyMjYsIDEwNSwgNywgMSwgNCwgNiwgMjIzLCA0OSwgMTUzLCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxNTMsIDcsIAotICAgIDEsIDQsIDYsIDIxNywgMTUyLCA3LCAxLCA0LCA2LCA3MCwgNywgNCwgMSwgMjE5LCAxODcsIDcwLCA3LCA0LCAxLCAyMTksIAotICAgIDE4NywgMjQ4LCAwLCA3MCwgNywgNCwgMSwgMjE5LCAxODcsIDIxNSwgOTQsIDE5MywgNywgMSwgNCwgNiwgMjE0LCAxMDUsIAotICAgIDcsIDEsIDQsIDYsIDIxMiwgOTgsIDcsIDEsIDQsIDYsIDIxMCwgMTU5LCA3LCAxLCA0LCA2LCAyNDUsIDgsIDcsIDEsIDIxMywgCi0gICAgMTM1LCAyMzMsIDgyLCAyMTgsIDI1MCwgNywgMSwgMjU0LCAxOTYsIDI2LCAxLCA0LCA2LCAyNDMsIDEwNywgMjYsIDEsIDQsIAotICAgIDYsIDIzMywgOTgsIDI2LCAxLCA0LCA2LCAyMjUsIDEwOCwgMjYsIDEsIDQsIDYsIDIyMywgMzcsIDI2LCAxLCA0LCA2LCAKLSAgICAyMjQsIDE2MSwgMzMsIDEsIDQsIDYsIDI0NSwgMTc0LCA1OCwgMSwgNiwgNjEsIDU4LCAxLCA2LCAyNTQsIDI0MywgNTgsIDEsIAotICAgIDYsIDI1MywgMTU4LCA1OCwgMSwgNiwgMjUyLCAxMzQsIDI1MywgMTU4LCA1OCwgMSwgNiwgMjQ5LCA2MCwgNTgsIDEsIDYsIAotICAgIDc1LCA1OCwgMSwgNiwgMjIzLCA0OSwgNzUsIDU4LCAxLCA2LCAyNDMsIDIwMiwgNTgsIDEsIDYsIDI0MiwgNjAsIDU4LCAxLCAKLSAgICA2LCA3MywgNTgsIDEsIDYsIDIzNSwgMTQ0LCA1OCwgMSwgNiwgMjM1LCAyMywgNTgsIDEsIDYsIDE1NiwgNTgsIDEsIDYsIAotICAgIDE5MywgNTgsIDEsIDYsIDIzMCwgMjUsIDU4LCAxLCA2LCAyMjMsIDQ5LCAyMzAsIDI1LCA1OCwgMSwgNiwgNzYsIDU4LCAxLCAKLSAgICA2LCAyMjYsIDEzNCwgNTgsIDEsIDYsIDIyNiwgMTA1LCA1OCwgMSwgNiwgMTUzLCA1OCwgMSwgNiwgMjE3LCAxNTIsIDU4LCAKLSAgICAxLCA2LCA3MCwgNTgsIDEsIDYsIDIxMiwgOTgsIDU4LCAxLCA0LCA2MSwgNTgsIDEsIDQsIDIxNSwgOTQsIDYxLCA1OCwgMSwgCi0gICAgNCwgMjU0LCAxNDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyNTQsIDI0MywgNTgsIDEsIDQsIDI1MywgMTU4LCA1OCwgMSwgNCwgCi0gICAgMjQ5LCA2MCwgNTgsIDEsIDQsIDc1LCA1OCwgMSwgNCwgMjIxLCAxOTUsIDU4LCAxLCA0LCAyMDQsIDc1LCA1OCwgMSwgNCwgCi0gICAgMjE1LCA5NCwgMjA0LCA3NSwgNTgsIDEsIDQsIDI0MywgMjAyLCA1OCwgMSwgNCwgMjE1LCA5NCwgNzMsIDU4LCAxLCA0LCAKLSAgICAyMzUsIDIzLCA1OCwgMSwgNCwgMTkzLCA1OCwgMSwgNCwgMjQ1LCAxMzgsIDU4LCAxLCA0LCA3NiwgNTgsIDEsIDQsIDIwNCwgCi0gICAgNzYsIDU4LCAxLCA0LCAyMTYsIDE0LCAxNjMsIDc2LCA1OCwgMSwgNCwgMjUxLCAxNzUsIDE2MywgNzYsIDU4LCAxLCA0LCAKLSAgICAyMjYsIDEwNSwgNTgsIDEsIDQsIDIxNywgMTUyLCA1OCwgMSwgNCwgNzAsIDU4LCAxLCA0LCAyMTksIDE4NywgNzAsIDU4LCAKLSAgICAxLCA0LCAyMTUsIDk0LCAxOTMsIDU4LCAxLCA0LCAyMTQsIDEwNSwgNTgsIDEsIDQsIDI1NCwgMTk2LCA1OCwgMSwgNCwgCi0gICAgMjUyLCAyNiwgNTgsIDEsIDQsIDI2LCAyNDMsIDEwNywgNTgsIDEsIDQsIDI0OCwgNTQsIDU4LCAxLCA0LCAyNiwgMjI1LCAKLSAgICAxMzMsIDU4LCAxLCA0LCAyNTAsIDExMCwgNywgMjE4LCA2NSwgNCwgMSwgNzMsIDcsIDIxOCwgNjUsIDQsIDEsIDE1MywgNywgCi0gICAgMjE4LCA2NSwgNCwgMSwgNzAsIDcsIDIxOCwgNjUsIDQsIDEsIDIxNCwgMTA1LCAyNiwgMjE4LCA2NSwgNCwgMSwgMjUyLCAKLSAgICAyNiwgMjYsIDIxOCwgNjUsIDQsIDEsIDI0MywgMTA3LCAyNiwgMjE4LCA2NSwgNCwgMSwgMjIzLCAzNywgMjYsIDIxOCwgNjUsIAotICAgIDQsIDEsIDIyNSwgMTMzLCAyNiwgMjE4LCA2NSwgNCwgMSwgMjUwLCAxMTAsIDcsIDQsIDEsIDIxNCwgMjE0LCA3LCA0LCAxLCAKLSAgICA1NywgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjQ1LCAKLSAgICA3LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMzIsIDUwLCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMzAsIAotICAgIDI2LCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMjYsIDEwNiwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjIzLCAKLSAgICAyMjQsIDIsIDIzMCwgMjI0LCAxODIsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAyNDQsIDg4LCAyMiwgMjMwLCAyMjQsIDE4MiwgCi0gICAgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDIzMCwgMjI0LCAxODIsIAotICAgIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMzAsIDIyNCwgMTgyLCA3LCA0LCAxLCAyMTUsIDk0LCAyNDMsIDIwMiwgNTgsIDEsIAotICAgIDMzLCAyNDUsIDE1MCwgNywgNCwgMSwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA0LCAxLCAyMTYsIDIxMSwgMiwgMjE4LCAKLSAgICAxMDcsIDcsIDQsIDYsIDEsIDI0MCwgMTU0LCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxODYsIDIsIDkxLCA3LCA0LCAxLCAyMjYsIAotICAgIDEwNiwgMiwgOTEsIDcsIDQsIDYsIDEsIDEwNCwgMiwgOTEsIDcsIDQsIDEsIDIxNCwgMTU4LCAyLCA5MSwgNywgNCwgMSwgCi0gICAgNTcsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyNDUsIDcsIAotICAgIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjQzLCAyMDMsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjM1LCAyNCwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyMzIsIDUwLCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjI2LCAxMDYsIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjIzLCAyMjQsIDIsIDIyNiwgNjYsIDEwMywgNywgNCwgMSwgMjIyLCA5MiwgMiwgCi0gICAgMjI2LCA2NiwgMTAzLCA3LCA0LCAxLCAyNDUsIDc2LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIxMSwgMTc5LCAyLCAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAKLSAgICAyMjYsIDY2LCAxMDMsIDcsIDQsIDEsIDExNSwgMiwgMjIzLCA1NSwgMTAzLCA3LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjIzLCAKLSAgICA1NSwgMTAzLCA3LCA0LCAxLCAyNDksIDYxLCAyLCAyNDEsIDUyLCAyMiwgMjE3LCA3NywgNywgNCwgMSwgMTYwLCAyLCAyMjMsIAotICAgIDU1LCAxMDMsIDcsIDQsIDEsIDIwNCwgMTYwLCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIyMywgNDksIDIwNCwgMTYwLCAKLSAgICAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIyMSwgMTk2LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDI0MCwgMTU0LCAKLSAgICAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDIwNCwgMTQ0LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDI0NSwgNzYsIDIsIAotICAgIDIyMywgNTUsIDEwMywgNywgNCwgMSwgMTA0LCAyLCAyMjMsIDU1LCAxMDMsIDcsIDQsIDEsIDI0NSwgOSwgMiwgMjIzLCA1NSwgCi0gICAgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjU0LCAxNDMsIDU4LCAxLCA0LCAyNTEsIDY2LCA1OCwgMSwgNCwgMjUxLCA2NywgCi0gICAgMiwgMjQ5LCAxMDAsIDU4LCAxLCA0LCAyNDUsIDU5LCA1OCwgMSwgNCwgMjIzLCA0OSwgMjA0LCA3NSwgNTgsIDEsIDQsIAotICAgIDI0NSwgNiwgNTgsIDEsIDQsIDI0NywgMTE5LCAyMzUsIDE0NSwgMiwgOTEsIDU4LCAxLCA0LCAxMTksIDI0MywgMjAyLCA1OCwgCi0gICAgMSwgNCwgMjE1LCA5NCwgMjQyLCA2MCwgNTgsIDEsIDQsIDI0MCwgMTU0LCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTg1LCAKLSAgICA1OCwgMSwgNCwgNiwgNzMsIDU4LCAxLCA0LCA2LCAyNDAsIDE1NCwgMiwgOTEsIDU4LCAxLCA0LCAyMzUsIDE0NSwgMiwgCi0gICAgMjQ5LCAxMjcsIDU4LCAxLCA0LCAyMzMsIDE0OSwgMiwgMjIzLCA1NSwgMTAzLCA1OCwgMSwgNCwgMjMzLCAxNDksIDIsIAotICAgIDIyNiwgNjYsIDEwMywgNTgsIDEsIDQsIDYsIDE1NiwgNTgsIDEsIDQsIDIzMiwgNTAsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgCi0gICAgOTQsIDIzMiwgNTAsIDIsIDE5OSwgMjMzLCAzNiwgNTgsIDEsIDQsIDIzMCwgMjYsIDIsIDQzLCAxMDMsIDU4LCAxLCA0LCAKLSAgICAyMzAsIDI2LCAyLCAyMjMsIDU1LCAxMDMsIDU4LCAxLCA0LCA2LCAyMzAsIDI1LCA1OCwgMSwgNCwgMjUyLCAxMzQsIDc2LCAKLSAgICA1OCwgMSwgNCwgMjI1LCAxMzMsIDU4LCAxLCA0LCAyMjIsIDkyLCAyLCAxMDMsIDU4LCAxLCA0LCAyNDUsIDc1LCA1OCwgMSwgCi0gICAgNCwgMjE3LCAxNTMsIDIsIDIyNiwgNjYsIDEwMywgNTgsIDEsIDQsIDEwNCwgMTMwLCA1OCwgMSwgNCwgMjE0LCAxNTcsIDU4LCAKLSAgICAxLCA0LCA2LCA3MCwgNTgsIDEsIDQsIDIxNCwgMTA2LCAyLCAxMDMsIDU4LCAxLCA0LCAyMTUsIDk0LCAyMTQsIDEwNSwgNTgsIAotICAgIDEsIDQsIDIxMCwgMTU5LCA1OCwgMSwgNCwgMjEwLCAxNjAsIDIsIDIyMywgNTUsIDEwMywgNTgsIDEsIDQsIDIxMCwgMTYwLCAKLSAgICAyLCAyNDksIDEwMCwgNTgsIDEsIDQsIDI0NSwgOCwgNTgsIDEsIDQsIDIxNiwgMTc5LCAzOCwgMjQ2LCAxMTgsIDI0MiwgCi0gICAgMTM3LCAyNTUsIDE0LCAzOCwgMjQ2LCAxMTgsIDI1NSwgMywgMjU1LCAxNCwgMzgsIDIxOSwgNjksIDUxLCAzOCwgMjE4LCA2LCAKLSAgICA3OCwgMzgsIDIzMSwgMjMxLCAzOCwgMjQyLCAxMzQsIDM4LCAyMzEsIDIyOSwgMzgsIDI1NSwgMSwgMzgsIDI0MiwgMTM1LCAKLSAgICAzOCwgMjU1LCAyLCAzOCwgNywgNCwgMSwgMjIzLCAyMjQsIDUxLCAzOCwgMjUxLCAxNDUsIDM4LCAyMzEsIDIzMCwgMzgsIAotICAgIDUyLCAyNTAsIDMxLCA0OCwgMzgsIDIyNiwgMjI1LCA0OCwgMzgsIDIxMCwgMzUsIDUxLCAzOCwgMjM1LCAxNzIsIDUxLCAzOCwgCi0gICAgMjE0LCAxNTEsIDQ4LCAzOCwgMjE0LCAxMzQsIDQ4LCAzOCwgNywgNCwgMSwgMjQ0LCA2MywgMjA0LCAxMTUsIDQ4LCAzOCwgCi0gICAgNywgNCwgMSwgMjU0LCAyNDMsIDM4LCA3LCA0LCAxLCAyNTQsIDczLCAzOCwgNywgNCwgMSwgMjUzLCAxNzYsIDM4LCA3LCA0LCAKLSAgICAxLCAyNTEsIDY3LCAyNTAsIDE4MywgMzgsIDcsIDQsIDEsIDIzNSwgMjEzLCAyNDksIDYwLCAzOCwgNywgNCwgMSwgMjQ1LCAKLSAgICA1OSwgMzgsIDcsIDQsIDEsIDI0MywgMjAyLCAzOCwgNywgMSwgNCwgNiwgMjQzLCAyMDIsIDM4LCA3LCA0LCAxLCAyMzUsIAotICAgIDIzLCAzOCwgNywgNCwgMSwgMTU2LCAzOCwgNywgMSwgNCwgNiwgMTU2LCAzOCwgNywgMSwgNCwgNiwgMTkzLCAzOCwgNywgNCwgCi0gICAgMSwgMjMwLCAyNSwgMzgsIDcsIDEsIDQsIDYsIDIzMCwgMjUsIDM4LCA3LCAxLCA0LCA2LCAxNTMsIDM4LCA3LCA0LCAxLCAKLSAgICAyMjMsIDIyNCwgMjIyLCAxODYsIDM4LCA3LCA0LCAxLCAyMjIsIDkxLCAzOCwgNywgNCwgMSwgMTk5LCAyMjIsIDkxLCAzOCwgCi0gICAgNywgNCwgMSwgMjEwLCAxNTksIDM4LCA1MiwgMjM1LCAxOTMsIDI1MSwgMTQ3LCA1MSwgMzgsIDI1NCwgMTQ4LCAxMjgsIAotICAgIDIxNiwgNDIsIDUxLCAzOCwgNDMsIDI1MywgMjUwLCA0OCwgMzgsIDQ0LCAyNTMsIDI1MCwgMjIsIDEyNCwgMjUzLCAyNTAsIAotICAgIDUxLCA3LCA2LCAxLCAxMTUsIDIsIDIyMiwgMjM0LCA1MSwgNywgNCwgMSwgMTE1LCAyLCAyMjIsIDIzNCwgNTEsIDcsIDYsIAotICAgIDEsIDU3LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDU3LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDU3LCAyLCA1OSwgNTEsIDcsIDQsIAotICAgIDEsIDU3LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDU3LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDU3LCAyLCAyMzIsIDIxNCwgCi0gICAgNTEsIDcsIDYsIDEsIDI1MSwgNjcsIDIsIDI1MCwgMTg0LCAyMiwgMTQyLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAyNTAsIAotICAgIDE4NCwgMjIsIDE0MiwgNywgNiwgMSwgMjQ5LCA2MSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDksIDYxLCAyLCA1OSwgNDgsIAotICAgIDcsIDYsIDEsIDI0OSwgNjEsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDksIAotICAgIDYxLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMjQ5LCA2MSwgCi0gICAgMiwgMjUwLCAxODMsIDcsIDQsIDEsIDI0OSwgNjEsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyNDksIDYxLCAyLCAyNTAsIDMxLCAKLSAgICA1MSwgNywgNCwgMSwgMjQ5LCA2MSwgMiwgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIAotICAgIDEzNiwgNywgNCwgMSwgMTYwLCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAKLSAgICAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDIzMSwgMjMzLCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIAotICAgIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIxNiwgODksIDUxLCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDIxNiwgODksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMTg0LCAyMiwgMjUxLCAxNDYsIDcsIDQsIDEsIAotICAgIDE2MCwgMiwgMjUwLCAxODQsIDIyLCAyNTEsIDE0NiwgNywgNiwgMSwgMjQ1LCA3LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0NSwgCi0gICAgNywgMiwgNTksIDQ4LCA3LCA2LCAxLCAyNDMsIDIwMywgMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMjQyLCA2MSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDIsIDYxLCAyLCA1OSwgNDgsIDcsIDYsIDEsIAotICAgIDI0MiwgNjEsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAKLSAgICAyNDgsIDEsIDcsIDQsIDEsIDI0MiwgNjEsIDIsIDI0OCwgMSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjUwLCAxODMsIDcsIDQsIAotICAgIDEsIDI0MiwgNjEsIDIsIDI1MCwgMTgzLCA3LCA2LCAxLCAyNDIsIDYxLCAyLCAyNTEsIDE0NywgNTEsIDcsIDQsIDEsIDI0MiwgCi0gICAgNjEsIDIsIDI1MSwgMTQ3LCA1MSwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDIxNiwgODksIDUxLCA3LCA0LCAxLCAyNDAsIAotICAgIDE1NCwgMiwgMjE2LCA4OSwgNTEsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyNDgsIDIsIDIyLCAxNDIsIDcsIDQsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCAyNDgsIDIsIDIyLCAxNDIsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDE0MiwgNywgNCwgMSwgMjM1LCAyNCwgMiwgCi0gICAgMTQyLCA3LCA2LCAxLCAyMzUsIDI0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDU5LCA1MSwgNywgNiwgMSwgCi0gICAgMjM1LCAyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMzUsIDI0LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIAotICAgIDIzMywgMTQ5LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMywgMTQ5LCAyLCAKLSAgICA1OSwgMjUyLCA0MywgMjIsIDIzMSwgMjMyLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgNTksIDI1MiwgNDMsIDIyLCAyMzEsIAotICAgIDIzMiwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDIzMiwgMjE0LCAKLSAgICA1MSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDI1MCwgMzEsIDUxLCA3LCA0LCAxLCAyMzMsIDE0OSwgMiwgMjUwLCAzMSwgNTEsIAotICAgIDcsIDYsIDEsIDIzMiwgNTAsIDIsIDE0MiwgNywgNCwgMSwgMjMyLCA1MCwgMiwgMTQyLCA3LCA2LCAxLCAyMzIsIDUwLCAyLCAKLSAgICA1OSwgNDgsIDcsIDQsIDEsIDIzMiwgNTAsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjMyLCA1MCwgMiwgNTksIDUxLCA3LCA0LCAKLSAgICAxLCAyMzIsIDUwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMCwgMjYsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjMwLCAyNiwgMiwgCi0gICAgNTksIDQ4LCA3LCA2LCAxLCAyMzAsIDI2LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIzMCwgMjYsIDIsIDU5LCA1MSwgNywgNiwgCi0gICAgMSwgMjMwLCAyNiwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIAotICAgIDIzMCwgMjYsIDIsIDI1MCwgMzEsIDUxLCA3LCA0LCAxLCAyMzAsIDI2LCAyLCAyNTAsIDMxLCA1MSwgNywgNiwgMSwgMTQ0LCAKLSAgICAyLCAyMTYsIDg5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDIxNiwgODksIDIyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMjE2LCA4OSwgMjIsIDI0OCwgMSwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDg5LCAyMiwgMjQ4LCAxLCA3LCA2LCAxLCAxNDQsIAotICAgIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNiwgCi0gICAgMSwgMTQ0LCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMzEsIDIzMywgMjIsIDE0MiwgNywgNiwgCi0gICAgMSwgMjI2LCAxMDYsIDIsIDE0MiwgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDE0MiwgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDU5LCAKLSAgICA0OCwgNywgNCwgMSwgMjI2LCAxMDYsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDU5LCA0OCwgNywgNCwgMSwgCi0gICAgMjIzLCAyMjQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIzLCAyMjQsIDIsIAotICAgIDU5LCA1MSwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDU5LCAyNTIsIDQzLCAyMiwgMjMxLCAyMzIsIDcsIDQsIDEsIDIyMywgCi0gICAgMjI0LCAyLCA1OSwgMjUyLCA0MywgMjIsIDIzMSwgMjMyLCA3LCA2LCAxLCAyMjMsIDIyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCAKLSAgICA0LCAxLCAyMjMsIDIyNCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA2LCAxLCAyMjIsIDkyLCAyLCA1OSwgNDgsIDcsIDQsIDEsIAotICAgIDIyMiwgOTIsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMjIsIDkyLCAyLCA1OSwgCi0gICAgNTEsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDI1NSwgMywgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5MiwgMiwgMjU1LCAzLCAKLSAgICAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyNTAsIDIzNSwgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5MiwgCi0gICAgMiwgMjUwLCAyMzUsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTIsIDIsIDU5LCAyNTIsIDQzLCAyMiwgNTksIDQ4LCA3LCAKLSAgICA0LCAxLCAyMjIsIDkyLCAyLCA1OSwgMjUyLCA0MywgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDU5LCA0OCwgCi0gICAgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjE3LCAKLSAgICAxNTMsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIAotICAgIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMjE3LCAxNTMsIDIsIDI1MCwgMzEsIDUxLCA3LCA0LCAxLCAyMTcsIDE1MywgMiwgCi0gICAgMjUwLCAzMSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAyLCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNDgsIDIsIDUxLCA3LCAKLSAgICA2LCAxLCAxMDQsIDIsIDIxNiwgODksIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDIxNiwgODksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIAotICAgIDI1MCwgMzEsIDUxLCA3LCA0LCAxLCAxMDQsIDIsIDI1MCwgMzEsIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDIxNiwgODksIDIyLCAKLSAgICAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA4OSwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIAotICAgIDI0OCwgMSwgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDI0OCwgMSwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDE4MiwgCi0gICAgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDE4MiwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjE0LCAKLSAgICAxMDYsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI0MiwgCi0gICAgMTM2LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAxNDIsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNiwgMSwgMjEyLCAKLSAgICA5OSwgMiwgMjQ4LCAxLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAyNDgsIDEsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCA0OCwgCi0gICAgNywgNCwgMSwgMjEyLCA5OSwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTIsIDk5LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxMiwgCi0gICAgOTksIDIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxNzksIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxNzksIDIsIDU5LCAKLSAgICA0OCwgNywgNiwgMSwgMjExLCAxNzksIDIsIDI0OCwgMSwgNywgNCwgMSwgMjExLCAxNzksIDIsIDI0OCwgMSwgNywgNiwgMSwgCi0gICAgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjEwLCAxNjAsIDIsIAotICAgIDI1MCwgMzAsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDMwLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCA3LCAKLSAgICA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAKLSAgICAyMTAsIDE2MCwgMiwgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAyNDIsIDYxLCAyLCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIAotICAgIDIxNywgMTUzLCAyLCAyNDgsIDEsIDcsIDQsIDEsIDIxMiwgOTksIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMjExLCAKLSAgICAxMTgsIDIsIDIyMiwgMjM0LCA0OCwgNywgNCwgMSwgMTE1LCAyLCA0NCwgMTYzLCAyMjIsIDIzMywgNywgNCwgMSwgMTk5LCAKLSAgICAyMjIsIDkyLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE5OSwgMjIyLCA5MiwgMiwgMjQ3LCAyNTUsIDkxLCA3LCA0LCAxLCAxOTksIAotICAgIDIyMiwgOTIsIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDIyMCwgNzYsIDIyMiwgOTEsIDcsIDQsIDEsIDI0OCwgNTQsIDcsIDYsIAotICAgIDEsIDExNSwgMiwgNTksIDUxLCA3LCA0LCAxLCAxMTUsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTE1LCAyLCAyNDEsIDUyLCA0OCwgCi0gICAgNywgNCwgMSwgMTE1LCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMTQyLCA3LCA0LCAxLCAKLSAgICAxMTUsIDIsIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDYsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAKLSAgICAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgCi0gICAgNDgsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxMTUsIDIsIDI1MCwgMzEsIAotICAgIDIyLCAxODIsIDcsIDQsIDEsIDExNSwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgNiwgMSwgMTE1LCAyLCAyNTAsIDMxLCAyMiwgCi0gICAgNTksIDUxLCA3LCA0LCAxLCAxMTUsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIAotICAgIDIyLCAxNDIsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAxNDIsIDcsIDYsIDEsIDExNSwgMiwgMjUxLCAxNDcsIAotICAgIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMTUsIDIsIAotICAgIDI1MSwgMTQ3LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDExNSwgMiwgMjUxLCAxNDcsIDIyLCAyNDEsIDUyLCA0OCwgNywgCi0gICAgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDE4MiwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDE4MiwgNywgCi0gICAgNiwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTE1LCAyLCAyNTEsIDE0NywgMjIsIDU5LCAKKyAgICAwLCAyMTksIDIwLCAyNDUsIDM5LCA3OSwgMjI0LCAxLCA3OSwgNTQsIDUwLCAyNDcsIDE0MCwgNTAsIDIyNSwgMTg1LCA1MCwgCisgICAgMjU0LCAxMzQsIDI1NCwgNjUsIDQzLCAyMjYsIDcsIDQ0LCAyMjYsIDcsIDI1MywgMjI0LCA5NiwgNTAsIDI0OSwgMjI3LCAKKyAgICAyNDAsIDE3NCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMTksIDQ4LCAyMSwgMjEwLCA4NiwgMjEsIDExMSwgMjEsIDEwNSwgMjEsIAorICAgIDE1OCwgMjEsIDE2MSwgMjEsIDE5MCwgMjEsIDE5NSwgMjEsIDE5OSwgMjEsIDE5NiwgMjEsIDIwMSwgMjQ5LCAyMzQsIDIyMCwgCisgICAgMTUyLCAyMzMsIDIxLCA1MCwgMjQ1LCAxMDYsIDUwLCAyNDIsIDEzNywgNTAsIDIyNCwgMTYsIDc5LCAyNDksIDIyNSwgMjUzLCAKKyAgICAyMTQsIDcsIDYsIDEsIDYxLCA3LCA2LCAxLCAyNTMsIDE2NiwgNywgNiwgMSwgMjUxLCA3NCwgNywgNiwgMSwgMjQ5LCA2OCwgCisgICAgNywgNiwgMSwgNzYsIDcsIDYsIDEsIDI0NSwgMTQsIDcsIDYsIDEsIDI0MywgMjA5LCA3LCA2LCAxLCAyNDIsIDY3LCA3LCA2LCAKKyAgICAxLCA3NCwgNywgNiwgMSwgMjM1LCAxNTAsIDcsIDYsIDEsIDIzNSwgMjksIDcsIDYsIDEsIDE1NiwgNywgNiwgMSwgMTk0LCAKKyAgICA3LCA2LCAxLCAyMzAsIDMwLCA3LCA2LCAxLCA3OCwgNywgNiwgMSwgMjI2LCAxMDksIDcsIDYsIDEsIDIyNCwgOTksIDcsIDYsIAorICAgIDEsIDE1MywgNywgNiwgMSwgMjIyLCA5MywgNywgNiwgMSwgMjE3LCAxNTMsIDcsIDYsIDEsIDY5LCA3LCA2LCAxLCAyMTQsIAorICAgIDEwNSwgNywgNiwgMSwgMjEyLCA5OCwgNywgNiwgMSwgMjExLCAxNzgsIDcsIDYsIDEsIDIxMSwgMTE3LCA3LCA2LCAxLCAKKyAgICAyMTAsIDE1OSwgNDMsIDQyLCAxMjcsIDIyMywgNTMsIDIxOSwgNDgsIDQ0LCA0MiwgMTI3LCAyNTAsIDM5LCAyNTUsIDIzLCAKKyAgICAxMjEsIDIzMiwgMjE5LCAyNDIsIDE0NCwgMjU1LCAyMywgNywgNCwgMSwgNjEsIDcsIDQsIDEsIDI1MywgMTY2LCA3LCA0LCAKKyAgICAxLCAyNTEsIDc0LCA3LCA0LCAxLCAyNDksIDY4LCA3LCA0LCAxLCA3NiwgNywgNCwgMSwgMjQ1LCAxNCwgNywgNCwgMSwgCisgICAgMjQzLCAyMDksIDcsIDQsIDEsIDI0MiwgNjcsIDcsIDQsIDEsIDc0LCA3LCA0LCAxLCAyMzUsIDE1MCwgNywgNCwgMSwgMjM1LCAKKyAgICAyOSwgNywgNCwgMSwgMTU2LCA3LCA0LCAxLCAxOTQsIDcsIDQsIDEsIDIzMCwgMzAsIDcsIDQsIDEsIDc4LCA3LCA0LCAxLCAKKyAgICAyMjYsIDEwOSwgNywgNCwgMSwgMjI0LCA5OSwgNywgNCwgMSwgMTUzLCA3LCA0LCAxLCAyMjIsIDkzLCA3LCA0LCAxLCAyMTcsIAorICAgIDE1MywgNywgNCwgMSwgNjksIDcsIDQsIDEsIDIxNCwgMTA1LCA3LCA0LCAxLCAyMTIsIDk4LCA3LCA0LCAxLCAyMTEsIDE3OCwgCisgICAgNywgNCwgMSwgMjExLCAxMTcsIDcsIDQsIDEsIDIxMCwgMTU5LCA0MywgMjQ5LCAxMDcsIDEyNywgNjcsIDIzMiwgMjE5LCAKKyAgICA0NCwgMjQ5LCAxMDcsIDEyNywgMTg0LCAyMjgsIDc4LCAyMTksIDIwLCAyMzUsIDIwMCwgMjQ1LCAzOSwgNzksIDI1MCwgCisgICAgMTg0LCA1MCwgMjI0LCAyMzEsIDUwLCAyNDksIDEwNiwgNTAsIDIxMSwgNDAsIDUwLCAyNTEsIDE0MywgMTMwLCAyMjEsIAorICAgIDE3NSwgNTAsIDI0OCwgOSwgMjQ5LCAxNzEsIDUwLCAyNDQsIDE0NCwgMjI2LCAxNTgsIDIzNSwgMjQ1LCAyMzMsIDQ4LCA1MiwgCisgICAgMjU0LCAxMTgsIDIyNCwgMSwgNzksIDIyOCwgNTcsIDUwLCAyMTksIDU0LCAyNDAsIDE3NSwgMjIzLCAxMDUsIDUwLCAyMzEsIAorICAgIDIzNywgMjQ4LCA3OSwgNTAsIDIyNSwgMjQsIDUwLCAyMTgsIDI0LCAxMDUsIDIxOCwgMjQsIDE1OCwgMjU1LCAxMiwgMjU1LCAKKyAgICAyMywgMjMwLCAyMzMsIDUwLCAyMjUsIDcxLCA1MCwgMjMwLCAyMjksIDI0NywgMTI4LCAyNTAsIDE5MSwgMjE4LCAyNCwgCisgICAgMTExLCAyMzEsIDE1MywgMjI2LCAxNTgsIDIzNSwgMjQ1LCAyMjIsIDI1MCwgNTIsIDI1NCwgMTE4LCAyMjQsIDEsIDc5LCAKKyAgICAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyNDIsIDM0LCAyMTIsIAorICAgIDExNCwgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAyMzUsIDIwMCwgMjI0LCAxNiwgNzksIDcsIDYsIDEsIDExNiwgMiwgMjQyLCAKKyAgICAxNDMsIDcsIDYsIDEsIDExNiwgMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDExNiwgMiwgCisgICAgMTg0LCA3LCA2LCAxLCAxMTYsIDIsIDI0OCwgOSwgNywgNiwgMSwgMTE2LCAyLCAyMjIsIDIzNywgNDgsIDcsIDYsIDEsIAorICAgIDI1NCwgMjUyLCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMTYwLCAyLCAyNDIsIDE0MywgNywgNiwgCisgICAgMSwgMTYwLCAyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMTYwLCAyLCAyNDgsIDksIDcsIDYsIAorICAgIDEsIDI0MCwgMTYxLCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDE0MiwgNywgNiwgMSwgMjQwLCAxNjEsIAorICAgIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDgsIDksIDcsIDYsIDEsIDI0NSwgNjcsIDcsIDYsIDEsIDIzMCwgCisgICAgMzEsIDIsIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMTQ0LCAyLCAxNDIsIDcsIDYsIDEsIAorICAgIDE0NCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMTQ0LCAyLCAxODQsIDcsIDYsIDEsIDE0NCwgMiwgMjQ4LCA5LCAyMzAsIDg5LCAKKyAgICA1MCwgNywgNiwgMSwgMTQ0LCAyLCA5MSwgNywgNiwgMSwgMTA0LCAyLCAyNDIsIDE0MywgNywgNiwgMSwgMTA0LCAyLCAxNDIsIAorICAgIDcsIDYsIDEsIDEwNCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDksIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAKKyAgICAxNDIsIDcsIDYsIDEsIDIxNiwgMTUyLCA3LCA0LCAxLCAyMjAsIDc4LCAyMjIsIDkzLCA3LCA0LCAxLCAxMTYsIDIsIDI0MiwgCisgICAgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxMTYsIDIsIAorICAgIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyNDgsIDksIDcsIDQsIDEsIDExNiwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAKKyAgICAyNTQsIDI1MiwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDE2MCwgMiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDE2MCwgMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDE2MCwgMiwgMjQ4LCA5LCA3LCA0LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAxNDIsIDcsIDQsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCAyNTAsIDM4LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyNDUsIDY3LCA3LCA0LCAxLCAyMzAsIAorICAgIDMxLCAyLCAxODQsIDcsIDQsIDEsIDE0NCwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMTQyLCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDE0NCwgMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI0OCwgOSwgMjQ3LCAxNzcsIAorICAgIDUwLCA3LCA0LCAxLCAxNDQsIDIsIDkxLCA3LCA0LCAxLCAxMDQsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxMDQsIDIsIDE0MiwgCisgICAgNywgNCwgMSwgMTA0LCAyLCAyNTAsIDM4LCA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgOSwgNywgNCwgMSwgMjExLCAxMTgsIDIsIAorICAgIDE0MiwgNywgNCwgMSwgMjE2LCAxNTIsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDgsIDksIDcsIDYsIDEsIDExNiwgMiwgCisgICAgMjMxLCAyMzcsIDcsIDQsIDEsIDExNiwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTQsIDcsIDQsIDEsIAorICAgIDExNiwgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDExNiwgMiwgMjI2LCAyMjgsIDcsIDQsIDEsIDExNiwgMiwgMjI2LCAyMjgsIAorICAgIDcsIDYsIDEsIDI1MSwgNzUsIDIsIDE0MiwgNywgNCwgMSwgMjUxLCA3NSwgMiwgMTQyLCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAKKyAgICAyNTAsIDM4LCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDM4LCA3LCA2LCAxLCAyNTEsIDc1LCAyLCA1OSwgNDgsIDcsIDQsIAorICAgIDEsIDI1MSwgNzUsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjUxLCA3NSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI1MSwgNzUsIAorICAgIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAKKyAgICAyNDIsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDkxLCA3LCA0LCAxLCAyNDksIDY5LCAyLCA5MSwgNywgNiwgMSwgMTYwLCAyLCAKKyAgICAyMzEsIDIzNywgNywgNCwgMSwgMTYwLCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTYwLCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyNTEsIDE1NCwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDQ4LCA3LCA2LCAKKyAgICAxLCAxNjAsIDIsIDIyNiwgMjI4LCA3LCA0LCAxLCAxNjAsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgCisgICAgMjQyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgCisgICAgMjQzLCAyMTAsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgMjQzLCAyMTAsIAorICAgIDIsIDI1MSwgMTU0LCA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyNDMsIDIxMCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjQyLCA2OCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjQyLCA2OCwgMiwgCisgICAgOTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDkxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMTg0LCA3LCA0LCAxLCAyNDAsIAorICAgIDE2MSwgMiwgMTg0LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIAorICAgIDIzNywgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDI1MSwgMTU0LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjUxLCAxNTQsIDcsIAorICAgIDYsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgMjI4LCA3LCA2LCAxLCAKKyAgICAyNDAsIDE2MSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDcsIDEyNywgNzQsIDcsIDYsIDI3LCAyMzYsIDM4LCA3LCA0LCAyNywgCisgICAgMjM2LCAzOCwgNywgNiwgMSwgMjM1LCAxNTEsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCAyNTAsIDM4LCA3LCAKKyAgICA2LCAxLCAyMzUsIDMwLCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzMywgCisgICAgMjQ1LCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMTQyLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTQyLCA3LCA2LCAxLCAyMzMsIAorICAgIDE1NSwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDI1MCwgMjQyLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAyMzAsIDIyOSwgCisgICAgMjQ3LCAxMjgsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICA5MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDkxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAxNDIsIDcsIDQsIDEsIDIzMCwgMzEsIAorICAgIDIsIDE0MiwgNywgNiwgMSwgMjMwLCAzMSwgMiwgMjUwLCAxOTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI1MCwgMTkxLCA3LCAKKyAgICA2LCAxLCAyMzAsIDMxLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIzMCwgCisgICAgMzEsIDIyNCwgMjA3LCAyNTEsIDg2LCAyNTQsIDY1LCA3LCA2LCAxLCAyNDUsIDE0NiwgNywgNCwgMSwgMjQ1LCAxNDYsIDcsIAorICAgIDYsIDEsIDE0NCwgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE0NCwgMiwgMjUxLCAKKyAgICAxNTQsIDcsIDQsIDEsIDE0NCwgMiwgMjUxLCAxNTQsIDcsIDYsIDEsIDE0NCwgMiwgNTIsIDE0MiwgNywgNCwgMSwgMTQ0LCAKKyAgICAyLCA1MiwgMTQyLCA3LCA2LCAyNywgMjI2LCAyMzgsIDcsIDQsIDI3LCAyMjYsIDIzOCwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIAorICAgIDE0MiwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDE0MiwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDI1MCwgMTkxLCA3LCA0LCAxLCAKKyAgICAyMjMsIDIyNywgMiwgMjUwLCAxOTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjIzLCAyMjcsIAorICAgIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAxNDIsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDE0MiwgNywgNiwgMSwgCisgICAgMjIyLCA5NCwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjIyLCA5NCwgMiwgCisgICAgMjUwLCAxOTEsIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDI0MiwgCisgICAgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgCisgICAgMjE3LCAxNTQsIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyMTcsIDE1NCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIxNywgMTU0LCAKKyAgICAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDkxLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgOTEsIDcsIDYsIDEsIAorICAgIDEwNCwgMiwgMTg0LCA3LCA0LCAxLCAxMDQsIDIsIDE4NCwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzNywgNywgNCwgMSwgCisgICAgMTA0LCAyLCAyMzEsIDIzNywgNywgNiwgMSwgMTA0LCAyLCAyNTEsIDE1NCwgNywgNCwgMSwgMTA0LCAyLCAyNTEsIDE1NCwgCisgICAgNywgNiwgMSwgMTA0LCAyLCAyMjIsIDIzNywgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDUyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgNTIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyMjYsIDIyOCwgNywgCisgICAgNCwgMSwgMTA0LCAyLCAyMjYsIDIyOCwgNywgNiwgMSwgMjEyLCA5OSwgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjEyLCA5OSwgCisgICAgMiwgMjUwLCAzOCwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI1MCwgMzgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNTAsIDM4LCAKKyAgICA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMTQyLCA3LCA0LCAxLCAyMTAsIAorICAgIDE2MCwgMiwgMTQyLCA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgNTksIDQ4LCAKKyAgICA3LCA2LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgCisgICAgMjAwLCAyMjIsIDkzLCA3LCA0LCAxLCA1NywgMiwgOTEsIDcsIDYsIDEsIDU3LCAyLCAxMDMsIDcsIDYsIDEsIDU3LCAyLCAKKyAgICAyMTYsIDEyLCA3LCA0LCAxLCA1NywgMiwgMjE2LCAxMiwgNywgNiwgMSwgMTM4LCAxOTUsIDcsIDQsIDEsIDEzOCwgMTk1LCAKKyAgICA3LCA2LCAxLCAyMDQsIDc4LCA3LCA2LCAxLCAyNTEsIDc1LCAyLCAxMDMsIDcsIDQsIDEsIDI1MSwgNzUsIDIsIDEwMywgNywgCisgICAgNiwgMSwgMjU0LCAyMjgsIDI0OSwgNjgsIDcsIDYsIDEsIDI0OSwgNjksIDIsIDEwMywgNywgNiwgMSwgMjQ5LCA2OSwgMiwgCisgICAgMjE2LCAxMiwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgMjE2LCAxMiwgNywgNCwgMSwgMjE1LCA5NCwgMjQ4LCA2MiwgNywgNiwgCisgICAgMSwgMjIzLCA1MiwgNzYsIDcsIDYsIDEsIDIyMSwgMTk3LCA3LCA2LCAxLCAyMDQsIDc2LCA3LCA2LCAxLCAyNDUsIDE1LCAyLCAKKyAgICAxMDMsIDcsIDQsIDEsIDI0NSwgMTUsIDIsIDEwMywgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDEwMywgNywgNiwgMSwgMjQzLCAKKyAgICAxMTQsIDcsIDQsIDEsIDI0MCwgMjA4LCA3LCA2LCAxLCAyMzUsIDE5MiwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDkxLCA3LCAKKyAgICA2LCAxLCAyMzUsIDMwLCAyLCAxMDMsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDEwMywgNywgNCwgMSwgMjMzLCAxNTUsIDIsIAorICAgIDEzMCwgNywgNCwgMSwgMjMzLCAxMDYsIDIsIDkxLCA3LCA2LCAxLCAyMTUsIDk0LCAxOTQsIDcsIDYsIDEsIDIzMCwgMzEsIAorICAgIDIsIDQzLCAxMDMsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDIwMCwgNDQsIDIzMywgNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjMwLCAKKyAgICAyMjksIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI1NSwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI1NSwgNywgNiwgMSwgCisgICAgMjI2LCAyMjMsIDcsIDQsIDEsIDIyNiwgMjIzLCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMTAzLCA3LCA0LCAxLCAyMjYsIAorICAgIDExMCwgMiwgMTAzLCA3LCAxLCAyMTAsIDIxNCwgNywgNiwgMSwgMTM4LCAxMDUsIDcsIDQsIDEsIDEzOCwgMTA1LCA3LCA2LCAKKyAgICAxLCAyNDUsIDgzLCA3LCAxLCAyMjMsIDUyLCAyNDUsIDg0LCAyMzIsIDEyOSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDIyNiwgCisgICAgNzAsIDEwMywgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDEwMywgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDEwMywgNywgNiwgMSwgCisgICAgMjE3LCAxNTQsIDIsIDIyMywgNTgsIDEwMywgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI1NSwgNywgNCwgMSwgMTA0LCAyLCAKKyAgICAyNDAsIDI1NSwgNywgNiwgMSwgMjE0LCAxNTcsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAxMDMsIDcsIDYsIDEsIDIxMSwgCisgICAgMTE4LCAyLCAxMDMsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAxMDMsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA5MSwgNywgNCwgCisgICAgMSwgMjEwLCAxNjAsIDIsIDkxLCA3LCA2LCAxLCAyNDUsIDE2LCA3LCA2LCAxLCAyNDUsIDE3LCAyMjMsIDUxLCA3LCA0LCAxLCAKKyAgICAyNDUsIDE3LCAyMjMsIDUxLCA3LCA0LCAxLCAyNDUsIDE3LCAyLCAyMTcsIDc4LCA3LCAxLCAxMTMsIDIsIDkxLCA3LCA2LCAKKyAgICAxLCAxMzgsIDE5MCwgNywgNCwgMSwgMTM4LCAxOTAsIDcsIDEsIDIzNSwgMjAwLCAyNDIsIDE4NywgMjE4LCAxMzIsIDIsIAorICAgIDkxLCA3LCAxLCAyMTEsIDE4MSwgNywgMSwgMjQ4LCA1NSwgMjUwLCAxOSwgNywgMSwgMjMzLCA4MywgMjUwLCAxOSwgNywgMSwgCisgICAgMjU0LCAxNDUsIDI1MCwgMTksIDcsIDEsIDIyMywgNTgsIDI1MCwgMTksIDcsIDYsIDEsIDI0NiwgNDgsIDIsIDI1MCwgMjQyLCAKKyAgICA3LCA2LCAxLCAyNDksIDY5LCAyLCA0LCAxLCAyMTAsIDE2MCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDI0NiwgNDgsIDIsIAorICAgIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzIsIDE5NCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDQsIDEsIDIzNSwgMTUwLCA3LCA0LCAKKyAgICAxLCAyMzIsIDE5NCwgNywgNiwgMSwgMjI4LCAxOTEsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIDQsIDEsIDIzNSwgMTUwLCA3LCAKKyAgICA0LCAxLCAyMjgsIDE5MSwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMTE2LCAyLCAyNTAsIDI0MiwgNywgCisgICAgNiwgMSwgMjQwLCAxNjEsIDIsIDI1MCwgMjQyLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIAorICAgIDE0NCwgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjUwLCAyNDIsIAorICAgIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgMTQyLCA3LCAKKyAgICA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDI1MCwgMjQyLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDI0OCwgMTAsIDIyLCAyNTAsIDI0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDgsIDEwLCAyMiwgCisgICAgMjQyLCAxNDMsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMTUsIDk0LCA3NiwgCisgICAgNywgNiwgMSwgMTE2LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDExNiwgMiwgMjQ4LCAxMCwgMjIsIAorICAgIDIzMSwgMjM3LCA3LCA2LCAxLCAxMTYsIDIsIDU5LCA3MiwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAxMTYsIDIsIDU5LCA3MiwgCisgICAgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyNTQsIDI1MywgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDI1NCwgMjUzLCAyLCAyMzEsIAorICAgIDIzNywgNywgNiwgMSwgMjQzLCAyMTAsIDIsIDkxLCA3LCA0LCAxLCAyNDMsIDIxMCwgMiwgOTEsIDcsIDYsIDEsIDI0MywgCisgICAgMjEwLCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDI1MCwgMjQyLCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAKKyAgICAyNTAsIDI0MiwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjI2LCAyMjgsIDcsIDQsIAorICAgIDEsIDE0NCwgMiwgMjI2LCAyMjgsIDcsIDYsIDEsIDE0NCwgMiwgMjI2LCAyMjksIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgCisgICAgMTQ0LCAyLCAyMjYsIDIyOSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAyNDUsIDE3LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgCisgICAgMjQ1LCAxNywgMiwgMjUwLCAyNDIsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCAyNTAsIDI0MiwgNywgNiwgMSwgMjQ2LCA0NywgCisgICAgNywgNiwgMSwgMjQ5LCA2OSwgMiwgNCwgMSwgMjEwLCAxNTksIDcsIDQsIDEsIDI0NiwgNDcsIDcsIDYsIDEsIDI0MywgMjEwLCAKKyAgICAyLCAxNDIsIDcsIDQsIDEsIDI0MywgMjEwLCAyLCAxNDIsIDcsIDYsIDEsIDI0MCwgMjA2LCA3LCA2LCAxLCAyMTEsIDE4MSwgCisgICAgNywgNiwgMSwgMjMwLCAzMSwgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAKKyAgICAxMTYsIDIsIDIyMiwgMjM3LCA3MiwgMjIsIDE0MiwgNywgNCwgMSwgMTE2LCAyLCAyMjIsIDIzNywgNzIsIDIyLCAxNDIsIDcsIAorICAgIDYsIDEsIDI1NCwgMjUzLCAyLCAxNDIsIDcsIDQsIDEsIDI1NCwgMjUzLCAyLCAxNDIsIDcsIDYsIDEsIDE0NCwgMiwgMjE4LCAKKyAgICAxMDUsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjE4LCAxMDUsIDIyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgNTIsIAorICAgIDI0MiwgMTQzLCA3LCA0LCAxLCAxMTYsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAyMzUsIDIwMCwgMjUxLCAKKyAgICAxNTQsIDcsIDQsIDEsIDExNiwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAxNjAsIDIsIDUyLCAyNDIsIDE0MywgCisgICAgNywgNCwgMSwgMTYwLCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA0LCAKKyAgICAxLCAxNjAsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDUyLCAyNDIsIDE0MywgNywgNCwgCisgICAgMSwgMjQwLCAxNjEsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgCisgICAgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNiwgMSwgMTQ0LCAyLCA1MiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDE0NCwgMiwgNTIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDIzNSwgMjAwLCAyNTEsIDE1NCwgNywgNCwgCisgICAgMSwgMTQ0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDQsIAorICAgIDEsIDIyMywgMjI3LCAyLCA1MiwgMjQyLCAxNDMsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIAorICAgIDcsIDQsIDEsIDIyMywgMjI3LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDYsIDEsIDEwNCwgMiwgNTIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAxMDQsIDIsIDUyLCAyNDIsIDE0MywgNywgNiwgMSwgMTA0LCAyLCAyMzUsIDIwMCwgMjUxLCAxNTQsIDcsIDQsIAorICAgIDEsIDEwNCwgMiwgMjM1LCAyMDAsIDI1MSwgMTU0LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyNDksIDIyOCwgNTEsIDcsIDQsIAorICAgIDEsIDIyMiwgOTQsIDIsIDI0OSwgMjI4LCA1MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI0OSwgMjI4LCA1MSwgNywgNCwgMSwgCisgICAgMjE3LCAxNTQsIDIsIDI0OSwgMjI4LCA1MSwgNywgNiwgMSwgMjEwLCAyMzEsIDcsIDQsIDEsIDIxMCwgMjMxLCA3LCA2LCAxLCAKKyAgICAyNDIsIDY4LCAyLCAyNTAsIDI0MiwgNywgNCwgMSwgMjQyLCA2OCwgMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDIzMCwgMzEsIDIsIAorICAgIDIwMCwgNDQsIDIzMywgNDIsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDI0OSwgMTA4LCA3LCA2LCAxLCAyMjYsIDEzOCwgNywgNCwgCisgICAgMSwgMjI2LCAxMzgsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAxMDMsIDcsIDYsIAorICAgIDEsIDExNiwgMiwgNTksIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDE5MSwgNywgCisgICAgNCwgMSwgMTYwLCAyLCAyNTAsIDE5MSwgNywgNiwgMSwgMTQ0LCAyLCAyNDgsIDEwLCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIAorICAgIDE0NCwgMiwgMjQ4LCAxMCwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNDQsIDIsIDIxNiwgOTAsIDIyLCAyMzEsIDIzNywgNywgCisgICAgNCwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIDE0NCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAKKyAgICAxNDQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNzIsIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMTQ0LCAyLCAKKyAgICA1OSwgNzIsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjExLCAxMTgsIDIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMTEsIDExOCwgCisgICAgMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjQ5LCAKKyAgICAxMDgsIDcsIDQsIDEsIDIxNywgMTU0LCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjQ3LCAxMjcsIDIzNSwgMTUwLCA3LCA0LCAKKyAgICAxLCAyNDgsIDE1MSwgMjQ3LCAyMjgsIDcsIDQsIDEsIDIyNCwgMzQsIDI0NywgMjI4LCA3LCA2LCAxLCAxMTYsIDIsIDkxLCAKKyAgICA3LCA2LCAxLCAyNTEsIDc1LCAyLCA5MSwgNywgNCwgMSwgMjUxLCA3NSwgMiwgOTEsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAKKyAgICAxMzAsIDcsIDYsIDEsIDIxNywgMTU0LCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyMTcsIDI1MSwgCisgICAgMjE3LCA3OCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDIxNywgMjUxLCAyMTcsIDc4LCA3LCA2LCAxLCAyNDIsIDE4NywgMjE4LCAKKyAgICAxMzEsIDcsIDQsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNywgNiwgMSwgNTcsIDIsIDkxLCA3LCA2LCAxLCAxMDQsIDEzMCwgCisgICAgNywgNiwgMSwgMjE1LCA5NCwgMjE0LCAxMDUsIDcsIDYsIDEsIDE2MCwgMiwgOTEsIDcsIDQsIDEsIDE2MCwgMiwgOTEsIDcsIAorICAgIDYsIDEsIDIzNSwgMTUxLCAyLCA5MSwgNywgNCwgMSwgMjM1LCAxNTEsIDIsIDkxLCA3LCA2LCAxLCA0LCAyMjQsIDEwMCwgMiwgCisgICAgMjQxLCA1OSwgMjE3LCA3OCwgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDI0MSwgNTksIDIxNywgNzgsIDcsIDYsIDEsIDIyMywgCisgICAgMjI3LCAyLCA5MSwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDkxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgOTEsIDcsIDQsIDEsIAorICAgIDIxMSwgMTE4LCAyLCA5MSwgNywgNCwgMSwgMjE1LCA5NCwgNjEsIDcsIDQsIDEsIDI1NCwgMTUxLCA3LCA0LCAxLCAyMTUsIAorICAgIDk0LCAyNTQsIDE1MSwgNywgNCwgMSwgNTcsIDIsIDEwMywgNywgNCwgMSwgMjA0LCA3OCwgNywgNCwgMSwgMjUxLCA3NSwgMiwgCisgICAgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIxNywgNzgsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDEwMywgNywgNCwgCisgICAgMSwgMjIzLCA1MiwgNzYsIDcsIDQsIDEsIDIyMSwgMTk3LCA3LCA0LCAxLCAyMjEsIDE5OCwgMiwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMDQsIDc2LCA3LCA0LCAxLCAyMjMsIDUyLCAyMDQsIDc2LCA3LCA0LCAxLCAyMjMsIDUyLCAyMDQsIDE2MCwgMiwgMTAzLCAKKyAgICA3LCA0LCAxLCAyNTAsIDgsIDIyMywgNTIsIDIwNCwgNzYsIDcsIDQsIDEsIDI0NywgMTI3LCAyMzUsIDE1MSwgMiwgOTEsIDcsIAorICAgIDQsIDEsIDI0MywgMjEwLCAyLCAxMDMsIDcsIDQsIDEsIDExOSwgMjQzLCAyMDksIDcsIDEsIDQsIDYsIDI0MywgMjA5LCA3LCAKKyAgICA0LCAxLCAyNDMsIDExNCwgNywgNCwgMSwgMjIzLCAxNTQsIDI0MCwgMjU1LCA3LCA0LCAxLCAyMTUsIDk0LCAyNDIsIDY3LCAKKyAgICA3LCA0LCAxLCAyNDIsIDY4LCAyLCAxMDMsIDcsIDQsIDEsIDI0MSwgMjE1LCAyLCAxMDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAKKyAgICAyLCA5MSwgNywgNCwgMSwgMjM1LCAxOTIsIDcsIDEsIDQsIDYsIDc0LCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MiwgNDksIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyMjMsIDU4LCAxMDMsIAorICAgIDcsIDQsIDEsIDIzMywgNywgNywgNCwgMSwgMjE1LCA5NCwgMTk0LCA3LCA0LCAxLCAyMTUsIDk0LCAyMzIsIDU1LCAyLCAKKyAgICAyMDAsIDIzMywgNDIsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDEwMywgNywgNCwgMSwgMjMwLCAzMSwgMiwgNDMsIDEwMywgNywgCisgICAgNCwgMSwgMjMwLCAzMSwgMiwgMjIzLCA1OCwgMTAzLCA3LCAxLCA0LCA2LCAyMzAsIDMwLCA3LCA0LCAxLCAyNTIsIDE0MiwgCisgICAgNzgsIDcsIDEsIDQsIDYsIDIyNiwgMjM4LCA3LCA0LCAxLCAyNTAsIDgsIDIyNiwgMjA1LCA3LCA0LCAxLCAyMjUsIDEzNiwgCisgICAgNywgNCwgMSwgMjE1LCA5NCwgMTUzLCA3LCA0LCAxLCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMjAwLCAyMzMsIDQyLCA3LCA0LCAKKyAgICAxLCAyMTUsIDk0LCAyMjMsIDIyNywgMiwgMTAzLCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjAwLCAyMzMsIDQyLCA3LCA0LCAKKyAgICAxLCAyMjMsIDIyNywgMiwgMjE3LCA3OCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDI0NCwgOTUsIDcsIDQsIDEsIDIyMywgNTIsIAorICAgIDIyMywgMjI3LCAyLCAyNDQsIDk1LCA3LCAxLCA0LCA2LCAxNTMsIDcsIDEsIDQsIDYsIDIzNSwgMjAwLCAxNTMsIDcsIDQsIAorICAgIDEsIDIyMiwgOTQsIDIsIDEwMywgNywgNCwgMSwgMjQ1LCA4MywgNywgNCwgMSwgMjQ3LCAxMjcsIDIzNSwgMTUxLCAyLCAKKyAgICAyMTgsIDEwNSwgMjIsIDEwMywgNywgNCwgMSwgMjE4LCAyMzMsIDIyMywgNTIsIDI0NSwgODMsIDcsIDQsIDEsIDI0NSwgODQsIAorICAgIDIsIDI0OSwgMTA4LCA3LCA0LCAxLCAyMTUsIDk0LCAyMTcsIDE1MywgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDIyMywgNTgsIAorICAgIDEwMywgNywgNCwgMSwgMTA0LCAxMzAsIDcsIDQsIDEsIDIxNCwgMTU3LCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMTAzLCA3LCAKKyAgICA0LCAxLCAyMTUsIDk0LCAyMTQsIDEwNSwgNywgNCwgMSwgMjE1LCA5NCwgMjEyLCA5OCwgNywgNCwgMSwgMjE1LCA5NCwgCisgICAgMjExLCAxMTcsIDcsIDEsIDQsIDYsIDIxMSwgMTE3LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAKKyAgICAxLCAyMTAsIDE2MCwgMiwgMjQ5LCAxMDgsIDcsIDQsIDEsIDI0NSwgMTYsIDcsIDQsIDEsIDI0NSwgMTcsIDIsIDI0OSwgCisgICAgMTA4LCA3LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDcsIDEsIDIyNSwgMTQyLCAyMTMsIDEzNSwgMjQ0LCAxLCA3LCAxLCAKKyAgICAyMzUsIDIwMCwgMjQyLCAxODcsIDIxOCwgMTMxLCA3LCAxLCAyMTgsIDExMiwgMjUxLCA3NCwgNywgMSwgMjUxLCAyNTQsIAorICAgIDI1MCwgMTksIDcsIDEsIDQsIDYsIDI1MywgMTY2LCA3LCA0LCAxLCAyNTAsIDgsIDIwNCwgNzYsIDcsIDEsIDQsIDYsIDI0MywgCisgICAgMjEwLCAyLCAxMDMsIDcsIDEsIDQsIDYsIDI0MiwgNjcsIDcsIDQsIDEsIDIzNSwgMTUxLCAyLCAyNDksIDEzNSwgNywgNCwgCisgICAgMSwgMjE1LCA5NCwgMjM1LCAyOSwgNywgMSwgNCwgNiwgMTU2LCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMTAzLCA3LCAxLCAKKyAgICAyNDIsIDE4NywgMjE4LCAxMzIsIDIsIDkxLCA3LCAxLCAyMjMsIDUyLCAyNDIsIDE4NywgMjE4LCAxMzIsIDIsIDkxLCA3LCAKKyAgICA0LCAxLCAyNDYsIDQ4LCAyNDcsIDIyOCwgNywgNCwgMSwgMjQ4LCAzNCwgMjQ3LCAyMjgsIDcsIDQsIDEsIDI0NiwgNDgsIAorICAgIDI0NywgMjI5LCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjE1LCAxODYsIDI0NywgMjI4LCA3LCA0LCAxLCAyMTYsIDIzNiwgCisgICAgMjQ3LCAyMjgsIDcsIDQsIDEsIDIxNywgMzAsIDI0NywgMjI5LCAyLCAyNDksIDEwOCwgNywgNCwgMSwgMjQ0LCAxNDIsIAorICAgIDI0NywgMjI4LCA3LCA0LCAxLCAyMzIsIDEwNSwgMjQ3LCAyMjgsIDcsIDQsIDEsIDIzMiwgNTYsIDI0NywgMjI4LCA3LCAxLCAKKyAgICAyNTEsIDI1NCwgMjI1LCAxODQsIDcsIDEsIDI1MiwgNiwgMjI1LCAxODQsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjgsIDIsIAorICAgIDI0NCwgOTUsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MiwgNjgsIDIsIDI0NCwgOTYsIDIyLCAyMTcsIDc4LCA1OCwgMSwgNCwgCisgICAgMjQyLCA2NywgNTgsIDEsIDQsIDI0MiwgNjgsIDIsIDEwMywgNTgsIDEsIDQsIDIzNSwgMTUwLCA1OCwgMSwgNCwgMTUzLCAKKyAgICA1OCwgMSwgNCwgMjE1LCA5NCwgMTUzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjIzLCAyMjcsIDIsIDEwMywgNTgsIDEsIDQsIDYsIAorICAgIDIzNSwgMjAwLCAxNTMsIDU4LCAxLCA0LCAyMTIsIDk4LCA1OCwgMSwgNCwgMjExLCAxMTcsIDU4LCAxLCAyMjQsIDE5MywgCisgICAgNTgsIDEsIDUyLCAyMjQsIDE5MywgNTgsIDEsIDIxNSwgOTQsIDI0OSwgMjI3LCA1OCwgMSwgMjU0LCA2NSwgNTgsIDEsIAorICAgIDIyMywgNTIsIDI0OSwgMjI3LCA1OCwgMSwgNDQsIDE2MywgMjIyLCAyMzYsIDU4LCAxLCA0MywgMTYzLCAyMjIsIDIzNiwgCisgICAgNTgsIDEsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNTgsIDEsIDIyMywgNTIsIDI0MiwgMTg3LCAyMTgsIDEzMSwgNTgsIDEsIDQzLCAKKyAgICAyNTQsIDEsIDU4LCAxLCA0NCwgMjU0LCAxLCA1OCwgMSwgMTIwLCAyNTQsIDEsIDU4LCAxLCAxMjQsIDI1NCwgMSwgNTgsIDEsIAorICAgIDI1MCwgMzksIDI1NSwgMjMsIDI1MCwgMjQyLCA1OCwgMSwgNjcsIDIzMiwgMjE5LCA1OCwgMSwgMjMxLCAyMzcsIDU4LCAxLCAKKyAgICAyNTUsIDEyLCAyNTUsIDIzLCA1OCwgMSwgMjQyLCAxNDQsIDI1NSwgMjMsIDU4LCAxLCAxMjEsIDY3LCAyMzIsIDIxOSwgNTgsIAorICAgIDEsIDEyMSwgMjMxLCAyMzcsIDU4LCAxLCAxMjEsIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMTIxLCAyNTUsIDEyLCAKKyAgICAyNTUsIDIzLCA1OCwgMSwgMjE1LCAyMjMsIDI0OSwgMjM0LCA1OCwgMSwgMTYzLCAyMTUsIDIyMywgMjQ5LCAyMzQsIDU4LCAKKyAgICAxLCAyNTAsIDE4MSwgNDQsIDE2MywgMjIyLCAyMzYsIDU4LCAxLCAyNTAsIDE4MSwgNDMsIDE2MywgMjIyLCAyMzYsIDU4LCAKKyAgICAxLCAxMjAsIDIxNywgODgsIDU4LCAxLCAxMjQsIDIxNywgODgsIDU4LCAxLCA5NiwgNTAsIDU4LCAxLCAyMzAsIDE4NywgNTAsIAorICAgIDI1MSwgMTU0LCA1OSwgNDgsIDIyMiwgMjM3LCA0OCwgMjI2LCAyMjgsIDQsIDE4NCwgNTIsIDI1NSwgMTIsIDI1NSwgMjMsIAorICAgIDU4LCAxLCAyMjMsIDM5LCAxMDMsIDU4LCAxLCAyNDksIDEzOSwgMjU1LCAyMywgNTgsIDEsIDQsIDI0MywgMTE0LCA1OCwgMSwgCisgICAgNCwgMTU2LCA1OCwgMSwgNCwgMjIyLCA5MywgNTgsIDEsIDQsIDIxMSwgMTc4LCA1OCwgMSwgNCwgMjIzLCA1MiwgMjQyLCAKKyAgICAxODcsIDIxOCwgMTMxLCA1OCwgMSwgMjQ1LCAyOCwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDEzOCwgMTMwLCA1OCwgMSwgCisgICAgMjMwLCAyMzAsIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDEzOCwgMTMwLCA1OCwgCisgICAgMSwgMjEwLCAyNTQsIDI0OCwgNTIsIDEzOCwgNzksIDU4LCAxLCAyMTEsIDcwLCAyNDgsIDUyLCAxMzgsIDc5LCA1OCwgMSwgCisgICAgMjEzLCAxMzMsIDU4LCAxLCAyMTQsIDE4NiwgNTgsIDEsIDUyLCAyNTQsIDY1LCA1OCwgMSwgMTIxLCAxMjQsIDI1NCwgMSwgCisgICAgNTgsIDEsIDEyMSwgMTIwLCAyNTQsIDEsIDU4LCAxLCAxMjEsIDQzLCAyNTQsIDEsIDU4LCAxLCAxMjEsIDQ0LCAyNTQsIDEsIAorICAgIDU4LCAxLCAxMjEsIDIyMiwgMjM2LCA1OCwgMSwgMjMwLCAyMjksIDI0MiwgMTQ0LCAyNTUsIDIzLCA1OCwgMSwgMjMwLCAKKyAgICAyMjksIDUyLCAyNDIsIDE0NCwgMjU1LCAyMywgNTgsIDEsIDIzMCwgMjI5LCA1MiwgMjU1LCAxMiwgMjU1LCAyMywgNTgsIDEsIAorICAgIDEyMSwgMTg0LCA1OCwgMSwgMjIzLCAxNjAsIDI0OSwgMjM0LCA1OCwgMSwgMjUyLCA2NiwgMTI1LCAyMTYsIDMxLCA1OCwgMSwgCisgICAgMjQ1LCAxNTEsIDEyNSwgMjE2LCAzMSwgNTgsIDEsIDI1MiwgNjYsIDEyMSwgMjE2LCAzMSwgNTgsIDEsIDI0NSwgMTUxLCAKKyAgICAxMjEsIDIxNiwgMzEsIDU4LCAxLCAyMjAsIDU2LCA1OCwgMSwgMjA0LCAyMjAsIDU2LCA1OCwgMSwgMTIxLCA0MywgNzUsIAorICAgIDM4LCAyNDIsIDE0NCwgMjU1LCAyMywgMzgsIDI1NSwgMTIsIDI1NSwgMjMsIDM4LCAyNTAsIDM5LCAyNTUsIDIzLCAzOCwgCisgICAgMTg0LCAzOCwgMjMxLCAyMzcsIDM4LCAyMjYsIDEyMywgMzgsIDI1MSwgMTU0LCAzOCwgNTksIDQ4LCAzOCwgMjQ4LCA5LCAKKyAgICAzOCwgMjQxLCA1OSwgNDgsIDM4LCAyMjIsIDIzNywgNDgsIDM4LCA1MiwgMjU1LCAxMiwgMjU1LCAyMywgMzgsIDI1MCwgCisgICAgMjQyLCAzOCwgNjcsIDIzMiwgMjIwLCA0OCwgMzgsIDUyLCA2NywgMjMyLCAyMjAsIDQ4LCAzOCwgNTIsIDI0MiwgMTQ0LCAKKyAgICAyNTUsIDIzLCAzOCwgMjUxLCA3LCAzOCwgMjM1LCAyMDAsIDI1MSwgMTU0LCAzOCwgMjE1LCA5NCwgMjQ5LCAyMjgsIDQ4LCAKKyAgICAzOCwgMjQ5LCAyMjgsIDQ4LCAzOCwgMjIzLCA1MiwgMjQ5LCAyMjgsIDQ4LCAzOCwgMjQ5LCAyMjgsIDcyLCAyMjIsIDI1NCwgCisgICAgMzgsIDI0MiwgMTQ0LCAyNTUsIDI0LCA1MSwgMzgsIDI1NSwgMTIsIDI1NSwgMjQsIDUxLCAzOCwgNDMsIDIxNywgODksIDUxLCAKKyAgICAzOCwgNDQsIDIxNywgODksIDUxLCAzOCwgNDMsIDI1NCwgMTE4LCA0OCwgMzgsIDI0MCwgMjU1LCAzOCwgNDMsIDE2MywgCisgICAgMjIyLCAyMzcsIDUxLCAzOCwgMTIwLCAyMTcsIDg5LCA1MSwgMzgsIDEyNCwgMjE3LCA4OSwgNTEsIDM4LCA5NiwgNSwgNTEsIAorICAgIDM4LCAyMzAsIDE4NywgNSwgNTEsIDM4LCAyMjYsIDY4LCAyNDEsIDU5LCA1MSwgMzgsIDIyMywgNTgsIDI0MSwgNTksIDUxLCAKKyAgICAzOCwgNTksIDUxLCAzOCwgMjQ4LCAxMCwgNTEsIDM4LCAyMjIsIDIzNywgNTEsIDM4LCAyNDksIDIyOCwgNTEsIDM4LCAyNTAsIAorICAgIDE5MSwgMzgsIDIyNiwgMjI4LCAzOCwgNjcsIDIzMiwgMjIwLCA1MSwgMzgsIDI1MSwgMTQ4LCA1MSwgMzgsIDIzNSwgMjAwLCAKKyAgICA1MiwgMjU0LCAzMiwgNTEsIDM4LCAyNTAsIDI0MywgNTEsIDM4LCAyNTAsIDM5LCAyNTUsIDI0LCA1MSwgMzgsIDI1MSwgCisgICAgMTU1LCA1MSwgMzgsIDIzNSwgMjAwLCAyNTEsIDE1NSwgNTEsIDM4LCAyMTYsIDkwLCA1MSwgMzgsIDIzMSwgMjM4LCA1MSwgCisgICAgMzgsIDEyMSwgMjMyLCAyMTksIDM4LCA1MiwgMTIxLCAyMzIsIDIxOSwgMzgsIDIxNiwgOTAsIDIyNiwgMTI0LCAzOCwgMjE5LCAKKyAgICAyNTMsIDIxOCwgMTA1LCAyMjYsIDEyNCwgMzgsIDIwMCwgMjE4LCAxMDUsIDIyNiwgMTI0LCAzOCwgMjE5LCAyNTMsIDIxOSwgCisgICAgNDksIDIyNiwgMTI0LCAzOCwgMjAwLCAyMTksIDQ5LCAyMjYsIDEyNCwgMzgsIDQ0LCAxNjMsIDIyMiwgMjM3LCA1MSwgMzgsIAorICAgIDIzNSwgMjAwLCAyNTEsIDE0OCwgNTEsIDM4LCA0MiwgNTEsIDM4LCAyMjEsIDE4MiwgNTEsIDM4LCAyMTEsIDE3OSwgNDgsIAorICAgIDM4LCA2NywgMTg0LCAzOCwgNTIsIDIyNiwgMTIzLCAzOCwgMjQyLCAxNDQsIDEzOCwgNzksIDM4LCAyNTUsIDEyLCAxMzgsIAorICAgIDc5LCAzOCwgMjYsIDIyNSwgMTc4LCAzOCwgMjYsIDIzNCwgOCwgMzgsIDI2LCAyNDgsIDQsIDIxNiwgMTksIDM4LCAyNiwgCisgICAgMjEwLCAyMTksIDM4LCAyNTEsIDE0OCwgNDgsIDM4LCAyNDUsIDEwNiwgNSwgNTEsIDM4LCA1MiwgNjcsIDIzMiwgMjIwLCAKKyAgICA1MSwgMzgsIDQzLCAyNTQsIDExOCwgNTEsIDM4LCAyMjgsIDU3LCAyMTYsIDkwLCA0OCwgMzgsIDI0MSwgNjUsIDQ4LCAzOCwgCisgICAgMjU0LCAxNTYsIDEyOCwgMjE2LCA0MywgNDgsIDM4LCA0MywgNDQsIDgwLCA1MSwgMzgsIDIxNCwgMTUzLCA4MCwgNTEsIDM4LCAKKyAgICAyNDIsIDE0OSwgMjM1LCA2OSwgMzgsIDQ0LCAyNTQsIDIsIDQ4LCAzOCwgNDMsIDE2MywgMjIyLCAyMzcsIDQ4LCAzOCwgCisgICAgMjQ0LCAxMzksIDM4LCAyMTEsIDE3OSwgNTEsIDM4LCA0MywgMjU0LCAyLCA1MSwgMzgsIDQ0LCAyNTQsIDIsIDUxLCAzOCwgCisgICAgNDQsIDI1NCwgMiwgMjIsIDEyMCwgMjU0LCAyLCA1MSwgMzgsIDQ0LCAxNjMsIDIyMiwgMjM3LCA0OCwgMzgsIDU5LCA3MiwgCisgICAgMjIyLCAyNTQsIDM4LCAyNTMsIDIyNSwgNTEsIDM4LCA1MiwgMjIyLCAyMzcsIDUxLCAzOCwgMjEwLCAzNSwgNDgsIDM4LCAKKyAgICA1MiwgMjUxLCAxNTUsIDUxLCAzOCwgNTIsIDI1MSwgMTU0LCAzOCwgNTIsIDIzMSwgMjM3LCAzOCwgNTIsIDIzMSwgMjM4LCAKKyAgICA1MSwgMzgsIDUyLCAxODQsIDM4LCA1MiwgMjM1LCAyMDAsIDI1MSwgMTU0LCAzOCwgNTIsIDk3LCA4MCwgNTEsIDM4LCA3LCAKKyAgICA0LCAxLCA2MSwgMzgsIDcsIDQsIDEsIDc2LCAzOCwgNywgNCwgMSwgNzQsIDM4LCA3LCA0LCAxLCA3OCwgMzgsIDcsIDQsIDEsIAorICAgIDY5LCAzOCwgNywgNCwgMSwgMjUxLCA3NCwgMzgsIDcsIDQsIDEsIDI0OSwgNjgsIDM4LCA3LCA0LCAxLCAyNDIsIDY3LCAzOCwgCisgICAgNywgNCwgMSwgMTk0LCAzOCwgNywgNCwgMSwgMTUzLCAzOCwgNywgNCwgMSwgMjE3LCAxNTMsIDM4LCA3LCA0LCAxLCAyMTQsIAorICAgIDEwNSwgMzgsIDcsIDQsIDEsIDIxMSwgMTc4LCAyNiwgNiwgMSwgMjQxLCAyMDMsIDI2LCA0LCAxLCAyNDEsIDIwMywgMjYsIAorICAgIDYsIDEsIDI1NCwgMzEsIDIyMSwgMjQ4LCAyNiwgNCwgMSwgMjU0LCAzMSwgMjIxLCAyNDgsIDI2LCAyMjcsIDIwMiwgNTAsIAorICAgIDI2LCAyMzIsIDExNCwgMjI3LCAyMDIsIDUwLCAyNiwgNiwgMSwgMjI2LCA1NSwgMjQ3LCAyMzUsIDI2LCA0LCAxLCAyMjYsIAorICAgIDU1LCAyNDcsIDIzNSwgMjYsIDIxMCwgMjE5LCAyNiwgNCwgMjIzLCA1MiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNCwgCisgICAgMjQ2LCAxMjYsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDQsIDIyMywgNTIsIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIAorICAgIDE4MCwgODcsIDI2LCAyMjQsIDE2LCA3OSwgMjYsIDIxNiwgMTksIDI2LCAyNDgsIDQsIDIxNiwgMTksIDI2LCA2LCAxLCAKKyAgICAyNTQsIDE1MiwgMiwgMjE2LCAxOSwgMjYsIDI1NCwgMTA1LCAyMTcsIDMsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjE2LCAKKyAgICAxOSwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDIxNiwgMTksIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjE2LCAxOSwgMjYsIDYsIAorICAgIDEsIDIyNiwgMjA0LCAyLCAyMTYsIDE5LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIxNiwgMTksIDI2LCA2LCAxLCAyMjYsIAorICAgIDIwNiwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMTYsIDE5LCAyNiwgNiwgMSwgCisgICAgMjU0LCAxNTEsIDI2LCA2LCAxLCAyNTIsIDM0LCAyNiwgNiwgMSwgMjQzLCAxMTQsIDI2LCA2LCAxLCAyNDgsIDYyLCAyNiwgCisgICAgNiwgMSwgMjQ1LCAxMDgsIDI2LCA2LCAxLCAyMTAsIDg1LCAyNiwgNiwgMSwgMjQ1LCA3MSwgMjYsIDYsIDEsIDIxNiwgMTgwLCAKKyAgICAyNiwgNiwgMSwgMjM1LCAxOTIsIDI2LCA2LCAxLCAyMzQsIDIyOCwgMjYsIDYsIDEsIDIzMywgMTA0LCAyNiwgNiwgMSwgCisgICAgMjMwLCAxMDcsIDI2LCA2LCAxLCAyMjcsIDI0MiwgMjYsIDYsIDEsIDIxMSwgMTU3LCAyNiwgNiwgMSwgMjI2LCAyMDMsIDI2LCAKKyAgICA2LCAxLCAyMjUsIDExMSwgMjYsIDYsIDEsIDIyMywgNDAsIDI2LCA2LCAxLCAyMTksIDE3OSwgMjYsIDYsIDEsIDIxNywgNDIsIAorICAgIDI2LCA2LCAxLCAyMTQsIDE1NywgMjYsIDYsIDEsIDIyNSwgMTM2LCAyNiwgNiwgMSwgMjUwLCAxMTgsIDI2LCA2LCAxLCAKKyAgICAyMjQsIDE2NCwgMjYsIDYsIDEsIDIyNiwgMjA1LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMywgMjYsIDYsIDEsIAorICAgIDIxNCwgMTU4LCAyLCAyNDgsIDMsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDI0NSwgMTA5LCAKKyAgICAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjE2LCAxOSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMTYsIAorICAgIDE5LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgNCwgMjIsIDIxNiwgMTksIDI2LCA0LCAxLCAyNTQsIDE1MSwgMjYsIAorICAgIDQsIDEsIDI1MiwgMzQsIDI2LCA0LCAxLCAyNDMsIDExNCwgMjYsIDQsIDEsIDI0OCwgNjIsIDI2LCA0LCAxLCAyNDUsIDEwOCwgCisgICAgMjYsIDQsIDEsIDIxMCwgODUsIDI2LCA0LCAxLCAyNDUsIDcxLCAyNiwgNCwgMSwgMjE2LCAxODAsIDI2LCA0LCAxLCAyMzUsIAorICAgIDE5MiwgMjYsIDQsIDEsIDIzNCwgMjI4LCAyNiwgNCwgMSwgMjMzLCAxMDQsIDI2LCA0LCAxLCAyMzAsIDEwNywgMjYsIDQsIAorICAgIDEsIDIyNywgMjQyLCAyNiwgNCwgMSwgMjExLCAxNTcsIDI2LCA0LCAxLCAyMjYsIDIwMywgMjYsIDQsIDEsIDIyNSwgMTExLCAKKyAgICAyNiwgNCwgMSwgMjIzLCA0MCwgMjYsIDQsIDEsIDQwLCAyMTksIDE3OSwgMjYsIDQsIDEsIDIxOSwgMTc5LCAyNiwgNCwgMSwgCisgICAgMjE3LCA0MiwgMjYsIDQsIDEsIDIxNCwgMTU3LCAyNiwgNCwgMSwgMjI1LCAxMzYsIDI2LCA0LCAxLCAyNTAsIDExOCwgMjYsIAorICAgIDQsIDEsIDIyNCwgMTY0LCAyNiwgNCwgMSwgMjI2LCAyMDUsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAzLCAyNiwgNCwgCisgICAgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMywgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyMTYsIDE5LCAyNiwgNCwgMSwgMjE0LCAKKyAgICAxNTgsIDIsIDIxNiwgMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjE2LCAxOSwgMjYsIDYsIDIzNCwgMjUzLCA4NywgMjYsIAorICAgIDI1MiwgMzUsIDg3LCAyNiwgMjE2LCAxODEsIDg3LCAyNiwgMjE0LCAxNTgsIDIsIDI0MSwgNTksIDg3LCAyNiwgMjE0LCAKKyAgICAxNTgsIDIsIDI1NSwgMTIsIDIyLCAyNDEsIDU5LCA4NywgMjYsIDIxNCwgMTU4LCAyLCAyNDgsIDEwLCAyMiwgMjQxLCA1OSwgCisgICAgODcsIDI2LCAyMjUsIDEzNywgODcsIDI2LCAyMjUsIDExMiwgODcsIDI2LCAyMzQsIDI1MywgODcsIDI2LCAxLCAyNTQsIDMxLCAKKyAgICAyMzQsIDEyLCAyNiwgNCwgMSwgMjU0LCAzMSwgMjM0LCAxMiwgMjYsIDEsIDIxOCwgMTM5LCAyNiwgNCwgMSwgMjE4LCAxMzksIAorICAgIDI2LCAxLCAyNDcsIDIzNSwgMjYsIDQsIDEsIDI0NywgMjM1LCAyNiwgMSwgMjM0LCAxMiwgMjYsIDQsIDEsIDIzNCwgMTIsIAorICAgIDI2LCAxLCAyMjEsIDI0OCwgMjYsIDQsIDEsIDIyMSwgMjQ4LCA4MSwgNiwgMSwgMjIwLCA1NywgODEsIDQsIDEsIDIyMCwgCisgICAgNTcsIDgxLCA2LCAxLCAyNDQsIDE0OCwgODEsIDQsIDEsIDI0NCwgMTQ4LCA4MSwgNiwgMSwgMjM0LCAxMjMsIDgxLCA0LCAxLCAKKyAgICAyMzQsIDEyMywgODEsIDYsIDEsIDI0MSwgNTIsIDgxLCA0LCAxLCAyNDEsIDUyLCA4MSwgNiwgMSwgMjQzLCAxMDksIDgxLCAKKyAgICA0LCAxLCAyNDMsIDEwOSwgODEsIDYsIDEsIDIyMCwgMjQsIDgxLCA0LCAxLCAyMjAsIDI0LCA4MSwgNiwgMSwgMjQ4LCA3NywgCisgICAgODEsIDQsIDEsIDI0OCwgNzcsIDI2LCAyMzQsIDIyOSwgODcsIDI2LCAyMjMsIDQxLCA4NywgMjYsIDIzMiwgODgsIDIxOSwgCisgICAgMTgwLCA4NywgMjYsIDEsIDIxMCwgMjI0LCAyNiwgNiwgMjE2LCAxODEsIDg3LCAyNiwgMjMyLCA4OCwgMjQ1LCAxMDksIDg3LCAKKyAgICAyNiwgMjIzLCA1MiwgMjMyLCA4OCwgMjQ1LCAxMDksIDg3LCAyNiwgNiwgMSwgMjIwLCA5LCAyNiwgNCwgMSwgMjIwLCA5LCAKKyAgICAyNiwgNiwgMjMyLCA4OCwgMjE5LCAxODAsIDg3LCAyNiwgNiwgMSwgMjIxLCAyNDUsIDI2LCA0LCAxLCAyMjEsIDI0NSwgMjYsIAorICAgIDIyMywgNDEsIDIsIDIxOCwgMTA1LCA4NywgMjYsIDYsIDIyMywgNTIsIDIzMiwgODgsIDIxOSwgMTgwLCA4NywgMjYsIDYsIAorICAgIDI0NiwgMTI2LCAyMzIsIDg4LCAyMTksIDE4MCwgODcsIDI2LCA2LCAyMjMsIDUyLCAyNDYsIDEyNiwgMjMyLCA4OCwgMjE5LCAKKyAgICAxODAsIDg3LCAzMywgNiwgMSwgMjM2LCA2OCwgMiwgMjQyLCAxNDMsIDMzLCA2LCAxLCAyMzUsIDE5NiwgMzMsIDYsIDEsIAorICAgIDI0NywgMTcwLCAzMywgNiwgMSwgMjQyLCAxOTQsIDMzLCA2LCAxLCAyMTQsIDIwMiwgMjM2LCA2NywgMzMsIDYsIDEsIDI0NiwgCisgICAgNDQsIDMzLCA2LCAxLCAyNTEsIDg0LCA3NCwgMzMsIDYsIDEsIDIxMSwgOCwgMzMsIDYsIDEsIDIzNSwgMTMyLCAzMywgNiwgCisgICAgMSwgMjMyLCAxOTMsIDMzLCA2LCAxLCAyMjgsIDE4MywgMzMsIDYsIDEsIDIxNSwgMTc1LCAzMywgNiwgMSwgMjM0LCA1NCwgCisgICAgMzMsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDIsIDE0MywgMzMsIDYsIDEsIDIxOSwgMjUzLCA2OSwgMzMsIDYsIDEsIDI0NiwgCisgICAgNDAsIDMzLCA2LCAxLCA2MSwgMzMsIDYsIDEsIDI1MiwgODMsIDMzLCA2LCAxLCAyMTMsIDI1NSwgMzMsIDYsIDEsIDI0MiwgCisgICAgMjQzLCAzMywgNiwgMSwgMjQ4LCA5OCwgMzMsIDYsIDEsIDIzNiwgNjcsIDMzLCA2LCAxLCAyMTAsIDc0LCAzMywgNiwgMSwgCisgICAgMjEwLCA5NCwgMzMsIDYsIDEsIDc0LCAzMywgNiwgMSwgMjE5LCAyNTMsIDc0LCAzMywgNiwgMSwgMTc2LCAzMywgNiwgMSwgCisgICAgMjQ1LCAxODIsIDMzLCA2LCAxLCAyNDUsIDE2NywgMzMsIDYsIDEsIDI0NSwgMTU4LCAzMywgNiwgMSwgNzgsIDMzLCA2LCAxLCAKKyAgICAyMjUsIDIyNCwgMzMsIDYsIDEsIDI0NSwgMTAwLCAzMywgNiwgMSwgMjQ1LCA5MCwgMzMsIDYsIDEsIDIxNywgMjMsIDMzLCAKKyAgICA2LCAxLCA2OSwgMzMsIDYsIDEsIDI0NSwgMjEwLCAzMywgNiwgMSwgMTYyLCAzMywgNiwgMSwgMjE1LCAxNzksIDMzLCA2LCAKKyAgICAxLCAyNTAsIDEzOSwgMzMsIDYsIDEsIDIyMCwgMTA0LCAzMywgNiwgMSwgMjIwLCA2NywgMzMsIDYsIDEsIDI0MiwgMTAsIAorICAgIDUwLCAzMywgNiwgMSwgMjExLCAyNywgMzMsIDYsIDEsIDIxOSwgNTQsIDUwLCAzMywgNiwgMSwgNzYsIDMzLCA2LCAxLCAKKyAgICAyMTAsIDIxMiwgMzMsIDYsIDEsIDE5MiwgMzMsIDQsIDEsIDYxLCAzMywgNCwgMSwgMjUyLCA4MywgMzMsIDQsIDEsIDIxMywgCisgICAgMjU1LCAzMywgNCwgMSwgMjQyLCAyNDMsIDMzLCA0LCAxLCAyNDgsIDk4LCAzMywgNCwgMSwgMjM2LCA2NywgMzMsIDQsIDEsIAorICAgIDIxMCwgNzQsIDMzLCA0LCAxLCAyMTAsIDk0LCAzMywgNCwgMSwgNzQsIDMzLCA0LCAxLCAyMTksIDI1MywgNzQsIDMzLCA0LCAKKyAgICAxLCAxNzYsIDMzLCA0LCAxLCAyNDUsIDE4MiwgMzMsIDQsIDEsIDI0NSwgMTY3LCAzMywgNCwgMSwgMjQ1LCAxNTgsIDMzLCAKKyAgICA0LCAxLCA3OCwgMzMsIDQsIDEsIDIyNSwgMjI0LCAzMywgNCwgMSwgMjQ1LCAxMDAsIDMzLCA0LCAxLCAyNDUsIDkwLCAzMywgCisgICAgNCwgMSwgMjE3LCAyMywgMzMsIDQsIDEsIDY5LCAzMywgNCwgMSwgMjQ1LCAyMTAsIDMzLCA0LCAxLCAxNjIsIDMzLCA0LCAxLCAKKyAgICAyMTUsIDE3OSwgMzMsIDQsIDEsIDI1MCwgMTM5LCAzMywgNCwgMSwgMjIwLCAxMDQsIDMzLCA0LCAxLCAyMjAsIDY3LCAzMywgCisgICAgNCwgMSwgMjQyLCAxMCwgNTAsIDMzLCA0LCAxLCAyMTEsIDI3LCAzMywgNCwgMSwgMjE5LCA1NCwgNTAsIDMzLCA0LCAxLCAKKyAgICA3NiwgMzMsIDQsIDEsIDIxMCwgMjEyLCAzMywgNCwgMSwgMTkyLCAzMywgNCwgMSwgMjM2LCA2OCwgMiwgMjQyLCAxNDMsIAorICAgIDMzLCA0LCAxLCAyMzUsIDE5NiwgMzMsIDQsIDEsIDI0NywgMTcwLCAzMywgNCwgMSwgMjQyLCAxOTQsIDMzLCA0LCAxLCAKKyAgICAyMTQsIDIwMiwgMjM2LCA2NywgMzMsIDQsIDEsIDI0NiwgNDQsIDMzLCA0LCAxLCAyNTEsIDg0LCA3NCwgMzMsIDQsIDEsIAorICAgIDIxMSwgOCwgMzMsIDQsIDEsIDIzNSwgMTMyLCAzMywgNCwgMSwgMjMyLCAxOTMsIDMzLCA0LCAxLCAyMjgsIDE4MywgMzMsIAorICAgIDQsIDEsIDIxNSwgMTc1LCAzMywgNCwgMSwgMjM0LCA1NCwgMzMsIDQsIDEsIDI0MCwgMTYxLCAyLCAyNDIsIDE0MywgMzMsIAorICAgIDQsIDEsIDIxOSwgMjUzLCA2OSwgMzMsIDQsIDEsIDI0NiwgNDAsIDMzLCA2LCAxLCAyMjYsIDIwNSwgMzMsIDQsIDEsIDIyNiwgCisgICAgMjA1LCAzMywgNiwgMSwgMjExLCA1OSwgMzMsIDQsIDEsIDIxMSwgNTksIDMzLCA2LCAxLCAyMzUsIDE5MCwgNzYsIDMzLCA0LCAKKyAgICAxLCAyMzUsIDE5MCwgNzYsIDMzLCA2LCAxLCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzIsIDE5OCwgMjEwLCAKKyAgICAxODMsIDMzLCA2LCAxLCAyMzUsIDE5MCwgMjMyLCAxOTgsIDIxMCwgMTgzLCAzMywgNCwgMSwgMjM1LCAxOTAsIDIzMiwgCisgICAgMTk4LCAyMTAsIDE4MywgMzMsIDYsIDEsIDI1MiwgMSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTIsIDEsIDIxMCwgMTgzLCAKKyAgICAzMywgNiwgMSwgMjM1LCAxOTAsIDI1MiwgMSwgMjEwLCAxODMsIDMzLCA0LCAxLCAyMzUsIDE5MCwgMjUyLCAxLCAyMTAsIAorICAgIDE4MywgMzMsIDYsIDEsIDIzMywgMjM5LCAzMywgNCwgMSwgMjMzLCAyMzksIDMzLCA2LCAxLCAyMjQsIDE2NCwgMzMsIDQsIAorICAgIDEsIDIyNCwgMTY0LCAzMywgNiwgMSwgMjQ0LCA5MCwgMzMsIDQsIDEsIDI0NCwgOTAsIDMzLCA2LCAxLCAyMzUsIDE1MiwgCisgICAgMzMsIDQsIDEsIDIzNSwgMTUyLCAzMywgNiwgMSwgMjM1LCAxNTMsIDIsIDUyLCAyNDIsIDE0NCwgMjU1LCAyMywgMzMsIDQsIAorICAgIDEsIDIzNSwgMTUzLCAyLCA1MiwgMjQyLCAxNDQsIDI1NSwgMjMsIDMzLCA2LCAxLCAyMTQsIDIwNSwgMzMsIDQsIDEsIDIxNCwgCisgICAgMjA1LCAzMywgNiwgMSwgMjIyLCAxODcsIDIyNiwgMjA1LCAzMywgNCwgMSwgMjIyLCAxODcsIDIyNiwgMjA1LCAzMywgNiwgCisgICAgMSwgMjI2LCAyMDYsIDIsIDIxNiwgNjYsIDMzLCA0LCAxLCAyMjYsIDIwNiwgMiwgMjE2LCA2NiwgMzMsIDYsIDEsIDIyNiwgCisgICAgMTQ0LCAzMywgNCwgMSwgMjI2LCAxNDQsIDMzLCA2LCAxLCAyMzQsIDEyLCAzMywgNCwgMSwgMjM0LCAxMiwgMzMsIDIxNiwgCisgICAgMTQ3LCA1MCwgMzgsIDMzLCAyMTYsIDY2LCAzOCwgMzMsIDIyNiwgNjksIDM4LCAzMywgMjQ4LCAxNjIsIDIyNSwgMjEsIDM4LCAKKyAgICAzMywgMjI0LCAxNTgsIDIyNSwgMjEsIDM4LCAzMywgMjI1LCA2LCAzOCwgMzMsIDI0MCwgMjE4LCAyMTYsIDE0NywgNTAsIAorICAgIDM4LCAzMywgMjMwLCAxOTYsIDUwLCAzMywgNiwgMSwgMjE5LCAyNTMsIDI0MCwgMTYxLCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgCisgICAgMjE5LCAyNTMsIDI0MCwgMTYxLCAyLCAyMTcsIDc4LCAzMywgNiwgMSwgMjIwLCAxNDgsIDUwLCAzMywgNCwgMSwgMjIwLCAKKyAgICAxNDgsIDUwLCAzMywgNiwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgMTE1LCAzMywgNCwgMSwgMjQ1LCAxMDEsIDIsIDIxNiwgCisgICAgMTE1LCAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDIxNCwgMTU2LCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDIxNCwgMTU2LCAKKyAgICAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDkxLCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDkxLCAzMywgNiwgMSwgMjQyLCAyNDQsIAorICAgIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyNDIsIDI0NCwgMiwgMjMwLCAyMjksIDEwMywgMzMsIDYsIDEsIDIxMCwgCisgICAgNzUsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMTAsIDc1LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjEwLCA5NSwgMiwgMjQ4LCAKKyAgICA0NywgMzMsIDQsIDEsIDIxMCwgOTUsIDIsIDI0OCwgNDcsIDMzLCA2LCAxLCAyMzUsIDE5LCAyLCAyNDgsIDQ3LCAzMywgNCwgCisgICAgMSwgMjM1LCAxOSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDY3LCA5MSwgMzMsIDQsIDEsIDIzNSwgMTksIAorICAgIDIsIDY3LCA5MSwgMzMsIDYsIDEsIDIzNSwgMTksIDIsIDkxLCAzMywgNCwgMSwgMjM1LCAxOSwgMiwgOTEsIDMzLCA2LCAxLCAKKyAgICAyNTIsIDEzMiwgMTc2LCAzMywgNCwgMSwgMjUyLCAxMzIsIDE3NiwgMzMsIDYsIDEsIDI0NSwgMTU5LCAyLCAyNDgsIDQ3LCAKKyAgICAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDI0OCwgNDcsIDMzLCA2LCAyNywgMjQ1LCAxNTksIDI0MiwgMjQzLCAzMywgNCwgMjcsIAorICAgIDI0NSwgMTU5LCAyNDIsIDI0MywgMzMsIDYsIDEsIDIyNSwgMjI1LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjI1LCAKKyAgICAyMjUsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA2LCAxLCAyNTUsIDI5LCAxNjIsIDMzLCA0LCAxLCAyNTUsIDI5LCAxNjIsIAorICAgIDMzLCA2LCAxLCAyNDUsIDkxLCAyLCAyNDgsIDQ3LCAzMywgNCwgMSwgMjQ1LCA5MSwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIAorICAgIDIxNywgMjQsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyMTcsIDI0LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjE4LCAxMjMsIAorICAgIDY5LCAzMywgNCwgMSwgMjE4LCAxMjMsIDY5LCAzMywgNiwgMSwgMjE4LCAxMjMsIDEwNCwgMiwgOTEsIDMzLCA0LCAxLCAKKyAgICAyMTgsIDEyMywgMTA0LCAyLCA5MSwgMzMsIDYsIDEsIDI0MiwgNTYsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNDIsIDU2LCAKKyAgICAyLCAyNDgsIDQ3LCAzMywgNiwgMjcsIDIxNywgMjQsIDIxNSwgMTc5LCAzMywgNCwgMjcsIDIxNywgMjQsIDIxNSwgMTc5LCAKKyAgICAzMywgNiwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNTAsIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDYsIDEsIAorICAgIDI1MCwgMTQwLCAyLCA2NywgOTEsIDMzLCA0LCAxLCAyNTAsIDE0MCwgMiwgNjcsIDkxLCAzMywgNiwgMSwgMjIwLCAzNSwgCisgICAgMzMsIDQsIDEsIDIyMCwgMzUsIDMzLCA2LCAxLCAyNTUsIDI5LCAyNTAsIDEzOSwgMzMsIDQsIDEsIDI1NSwgMjksIDI1MCwgCisgICAgMTM5LCAzMywgNiwgMSwgMjU1LCAyOSwgMjUwLCAxNDAsIDIsIDI0OCwgNDcsIDMzLCA0LCAxLCAyNTUsIDI5LCAyNTAsIAorICAgIDE0MCwgMiwgMjQ4LCA0NywgMzMsIDEsIDIyNiwgNjIsIDMzLCA2LCAxLCAyMTAsIDc1LCAyLCAyNTEsIDE1NCwgMzMsIDQsIAorICAgIDEsIDIxMCwgNzUsIDIsIDI1MSwgMTU0LCAzMywgNiwgMSwgMjM1LCAxOSwgMiwgMTAzLCAzMywgNCwgMSwgMjM1LCAxOSwgMiwgCisgICAgMTAzLCAzMywgNiwgMSwgMjQ1LCAxODMsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAyNDUsIDE4MywgMiwgMjE3LCA3OCwgMzMsIAorICAgIDYsIDEsIDI0NSwgMTU5LCAyLCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMTAzLCAzMywgNiwgMSwgMjQ1LCAxNTksIAorICAgIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAyNDUsIDE1OSwgMiwgMjE3LCA3OCwgMzMsIDYsIDEsIDIzNCwgMTMzLCAyNTAsIDEzOSwgCisgICAgMzMsIDQsIDEsIDIzNCwgMTMzLCAyNTAsIDEzOSwgMzMsIDYsIDEsIDI0NSwgMTY4LCAyLCAyMTcsIDc4LCAzMywgNCwgMSwgCisgICAgMjQ1LCAxNjgsIDIsIDIxNywgNzgsIDMzLCA0LCAxLCAyMjYsIDYyLCAzMywgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NCwgMzMsIAorICAgIDQsIDEsIDExNiwgMiwgMjUxLCAxNTQsIDMzLCA2LCAxLCAxMTYsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDExNiwgMiwgMjQ4LCAKKyAgICA5LCAzMywgNiwgMjcsIDExNiwgMjM2LCA2NywgMzMsIDQsIDI3LCAxMTYsIDIzNiwgNjcsIDMzLCA2LCAxLCAyMzYsIDY4LCAKKyAgICAyLCAyNTEsIDE1NCwgMzMsIDQsIDEsIDIzNiwgNjgsIDIsIDI1MSwgMTU0LCAzMywgNiwgMSwgMjIxLCAxOTcsIDMzLCA0LCAKKyAgICAxLCAyMjEsIDE5NywgMzMsIDYsIDEsIDIyMSwgMTk4LCAyLCAyNDgsIDksIDMzLCA0LCAxLCAyMjEsIDE5OCwgMiwgMjQ4LCAKKyAgICA5LCAzMywgNiwgMSwgMjEwLCA3NSwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjEwLCA3NSwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgCisgICAgMjEwLCA5NSwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjEwLCA5NSwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMjU1LCAyOSwgMjQ2LCAKKyAgICA0NCwgMzMsIDQsIDEsIDI1NSwgMjksIDI0NiwgNDQsIDMzLCA2LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzcsIDMzLCA0LCAKKyAgICAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzcsIDMzLCA2LCAxLCAyNDAsIDE2MSwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjQwLCAKKyAgICAxNjEsIDIsIDI0OCwgOSwgMzMsIDYsIDEsIDE0NCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMTQ0LCAyLCAyNDgsIDksIDMzLCAKKyAgICA2LCAxLCAyNTIsIDE0MiwgNzgsIDMzLCA0LCAxLCAyNTIsIDE0MiwgNzgsIDMzLCA2LCAxLCAyNTIsIDE0MiwgMTQ0LCAyLCAKKyAgICAyNDgsIDksIDMzLCA0LCAxLCAyNTIsIDE0MiwgMTQ0LCAyLCAyNDgsIDksIDMzLCA2LCAxLCAxNjAsIDIsIDI0OCwgOSwgMzMsIAorICAgIDQsIDEsIDE2MCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzNywgMzMsIDQsIDEsIDEwNCwgMiwgMjMxLCAKKyAgICAyMzcsIDMzLCA2LCAxLCAxMDQsIDIsIDI0OCwgOSwgMzMsIDQsIDEsIDEwNCwgMiwgMjQ4LCA5LCAzMywgNiwgMSwgMTA0LCAKKyAgICAyLCA1MiwgMTQyLCAzMywgNCwgMSwgMTA0LCAyLCA1MiwgMTQyLCAzMywgNiwgMSwgMjUwLCAxNDAsIDIsIDI0OCwgOSwgMzMsIAorICAgIDQsIDEsIDI1MCwgMTQwLCAyLCAyNDgsIDksIDMzLCA2LCAxLCAyNDIsIDI0NCwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDI0MiwgCisgICAgMjQ0LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgMjExLCAyOCwgMiwgMjQ4LCA5LCAzMywgNCwgMSwgMjExLCAyOCwgMiwgMjQ4LCAKKyAgICA5LCAzMywgNiwgMSwgMjQyLCAyNDQsIDIsIDIxOCwgMTA1LCAyMiwgMTAzLCAzMywgNCwgMSwgMjQyLCAyNDQsIDIsIDIxOCwgCisgICAgMTA1LCAyMiwgMTAzLCAzMywgNiwgMSwgMjQyLCA1NiwgMiwgMTAzLCAzMywgNCwgMSwgMjQyLCA1NiwgMiwgMTAzLCAzMywgCisgICAgNiwgMSwgMjQyLCA1NiwgMiwgOTEsIDMzLCA0LCAxLCAyNDIsIDU2LCAyLCA5MSwgMzMsIDYsIDEsIDIzNCwgMjAsIDI0OCwgCisgICAgOTgsIDMzLCA0LCAxLCAyMzQsIDIwLCAyNDgsIDk4LCAzMywgNiwgMSwgMjM0LCAyMCwgMjQ3LCAxNzAsIDMzLCA0LCAxLCAKKyAgICAyMzQsIDIwLCAyNDcsIDE3MCwgMzMsIDYsIDEsIDIzNCwgMjAsIDIxMCwgMjcsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMTAsIAorICAgIDI3LCAzMywgNiwgMSwgMjM0LCAyMCwgMjQ2LCAzOCwgMzMsIDQsIDEsIDIzNCwgMjAsIDI0NiwgMzgsIDMzLCA2LCAxLCAKKyAgICAyMzQsIDIwLCAyMzIsIDE5MywgMzMsIDQsIDEsIDIzNCwgMjAsIDIzMiwgMTkzLCAzMywgNiwgMSwgMjM0LCAyMCwgMjI4LCAKKyAgICAxODMsIDMzLCA0LCAxLCAyMzQsIDIwLCAyMjgsIDE4MywgMzMsIDYsIDEsIDIzNCwgMjAsIDIxOSwgMTExLCAzMywgNCwgMSwgCisgICAgMjM0LCAyMCwgMjE5LCAxMTEsIDMzLCA2LCAxLCAyMzQsIDIwLCAyMTYsIDYxLCAzMywgNCwgMSwgMjM0LCAyMCwgMjE2LCAKKyAgICA2MSwgMzMsIDYsIDEsIDIyMywgNTIsIDIxMCwgOTQsIDMzLCA0LCAxLCAyMjMsIDUyLCAyMTAsIDk0LCAzMywgNiwgMSwgCisgICAgMjQ1LCAxODMsIDIsIDEwMywgMzMsIDQsIDEsIDI0NSwgMTgzLCAyLCAxMDMsIDMzLCA2LCAxLCAyMzMsIDQsIDMzLCA0LCAxLCAKKyAgICAyMzMsIDQsIDMzLCA2LCAxLCAyMjMsIDQyLCAzMywgNCwgMSwgMjIzLCA0MiwgMzMsIDYsIDEsIDIxMSwgOTIsIDMzLCA0LCAKKyAgICAxLCAyMTEsIDkyLCAzMywgNiwgMSwgMjI0LCA5MSwgMzMsIDQsIDEsIDIyNCwgOTEsIDMzLCA2LCAxLCAyMTIsIDIyLCAzMywgCisgICAgNCwgMSwgMjEyLCAyMiwgMzMsIDYsIDEsIDI1NCwgMTc1LCAxNzYsIDMzLCA0LCAxLCAyNTQsIDE3NSwgMTc2LCAzMywgNiwgCisgICAgMSwgMjQ1LCAxODMsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyNDUsIDE4MywgMiwgMjMwLCAyMjksIDEwMywgMzMsIAorICAgIDYsIDEsIDI0NSwgMTU5LCAyLCAyMzAsIDIyOSwgMTAzLCAzMywgNCwgMSwgMjQ1LCAxNTksIDIsIDIzMCwgMjI5LCAxMDMsIAorICAgIDMzLCA2LCAxLCAyMjUsIDIyNSwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIyNSwgMjI1LCAyLCAyNDgsIDQ3LCAzMywgNiwgMSwgCisgICAgMjIwLCAzNiwgMiwgMjQ4LCA0NywgMzMsIDQsIDEsIDIyMCwgMzYsIDIsIDI0OCwgNDcsIDE1MCwgNiwgMSwgMjUzLCAxNzIsIAorICAgIDE1MCwgNiwgMSwgMjUyLCA0NywgMTUwLCA2LCAxLCAyNDIsIDIxMCwgMTUwLCA2LCAxLCAyNDgsIDIyOSwgMTUwLCA2LCAxLCAKKyAgICAyNDUsIDIyMSwgMTUwLCA2LCAxLCAyMTAsIDExNiwgMTUwLCA2LCAxLCAyNDUsIDIwNSwgMTUwLCA2LCAxLCAyNDUsIDczLCAKKyAgICAxNTAsIDYsIDEsIDExMiwgMTUwLCA2LCAxLCAyMTAsIDc0LCAxNTAsIDYsIDEsIDIzNSwgMjM0LCAxNTAsIDYsIDEsIDIzMiwgCisgICAgMTk2LCAxNTAsIDYsIDEsIDIxMSwgMTYwLCAxNTAsIDYsIDEsIDI1MSwgNDEsIDE1MCwgNiwgMSwgMjM0LCAxNzEsIDE1MCwgCisgICAgNiwgMSwgMjQxLCA3NSwgMTUwLCA2LCAxLCAyMzUsIDE0NywgMTUwLCA2LCAxLCAyNDIsIDI1MywgMTUwLCA2LCAxLCAyNTAsIAorICAgIDEzNCwgMTUwLCA2LCAxLCAyMzEsIDYzLCAxNTAsIDYsIDEsIDIxMSwgOCwgMTUwLCA2LCAxLCAyMjgsIDQ0LCAxNTAsIDYsIAorICAgIDEsIDIyMCwgMTA0LCAxNTAsIDYsIDEsIDIxMywgMTM4LCAxNTAsIDYsIDEsIDI1MCwgMTY1LCAxNTAsIDYsIDEsIDIyNSwgCisgICAgMjA4LCAxNTAsIDYsIDEsIDIzNSwgMTE2LCAxNTAsIDYsIDEsIDIwNSwgMTUwLCA2LCAxLCAyMjEsIDE2MywgMTUwLCA2LCAxLCAKKyAgICAyMTMsIDE3OSwgMTUwLCA2LCAxLCAyMTYsIDYzLCAxNTAsIDYsIDEsIDIyMywgOTgsIDE1MCwgNiwgMSwgMjQ5LCAyNDYsIAorICAgIDE1MCwgNiwgMSwgMjEwLCAyNDksIDE1MCwgNiwgMSwgMjI1LCA0OSwgMTUwLCA2LCAxLCAyMzQsIDE4MiwgMTUwLCA2LCAxLCAKKyAgICAyMjYsIDIyNiwgMTUwLCA2LCAxLCAyNDQsIDE1MCwgMTUwLCA1OCwgMSwgNDMsIDE2MywgMjIyLCAyMzYsIDE1MCwgMjU0LCAKKyAgICA2NSwgMTUwLCAyNDUsIDE2MiwgNzksIDE1MCwgMjQ1LCAzOSwgNzksIDE1MCwgMjQ5LCAyMjcsIDE1MCwgMjI0LCAxNiwgNzksIAorICAgIDE1MCwgMjU1LCAzMCwgNzksIDE1MCwgNCwgMSwgMjUzLCAxNzIsIDE1MCwgNCwgMSwgMjUyLCA0NywgMTUwLCA0LCAxLCAKKyAgICAyNDIsIDIxMCwgMTUwLCA0LCAxLCAyNDgsIDIyOSwgMTUwLCA0LCAxLCAyNDUsIDIyMSwgMTUwLCA0LCAxLCAyMTAsIDExNiwgCisgICAgMTUwLCA0LCAxLCAyNDUsIDIwNSwgMTUwLCA0LCAxLCAyNDUsIDczLCAxNTAsIDQsIDEsIDExMiwgMTUwLCA0LCAxLCAyMTAsIAorICAgIDc0LCAxNTAsIDQsIDEsIDIzNSwgMjM0LCAxNTAsIDQsIDEsIDIzMiwgMTk2LCAxNTAsIDQsIDEsIDIxMSwgMTYwLCAxNTAsIAorICAgIDQsIDEsIDI1MSwgNDEsIDE1MCwgNCwgMSwgMjM0LCAxNzEsIDE1MCwgNCwgMSwgMjQxLCA3NSwgMTUwLCA0LCAxLCAyMzUsIAorICAgIDE0NywgMTUwLCA0LCAxLCAyNDIsIDI1MywgMTUwLCA0LCAxLCAyNTAsIDEzNCwgMTUwLCA0LCAxLCAyMzEsIDYzLCAxNTAsIAorICAgIDQsIDEsIDIxMSwgOCwgMTUwLCA0LCAxLCAyMjgsIDQ0LCAxNTAsIDQsIDEsIDIyMCwgMTA0LCAxNTAsIDQsIDEsIDIxMywgCisgICAgMTM4LCAxNTAsIDQsIDEsIDI1MCwgMTY1LCAxNTAsIDQsIDEsIDIyNSwgMjA4LCAxNTAsIDQsIDEsIDIzNSwgMTE2LCAxNTAsIAorICAgIDQsIDEsIDIwNSwgMTUwLCA0LCAxLCAyMjEsIDE2MywgMTUwLCA0LCAxLCAyMTMsIDE3OSwgMTUwLCA0LCAxLCAyMTYsIDYzLCAKKyAgICAxNTAsIDQsIDEsIDIyMywgOTgsIDE1MCwgNCwgMSwgMjQ5LCAyNDYsIDE1MCwgNCwgMSwgMjEwLCAyNDksIDE1MCwgNCwgMSwgCisgICAgMjI1LCA0OSwgMTUwLCA0LCAxLCAyMzQsIDE4MiwgMTUwLCA0LCAxLCAyMjYsIDIyNiwgMTUwLCA0LCAxLCAyNDQsIDE1MCwgCisgICAgMTUwLCA0LCAyNywgMjQ1LCAyMjIsIDIxMCwgMjQ5LCAxNTAsIDI0MywgMjM2LCAyMTgsIDEzMSwgMTUwLCAyNDAsIDE3NSwgCisgICAgMTUwLCAyNDYsIDEwMywgNTAsIDk0LCAyNTUsIDI0LCAyNDUsIDY1LCA5NCwgMjU1LCAyNCwgMjIxLCAxNjQsIDk0LCAyNTUsIAorICAgIDI0LCAyMjAsIDkwLCA5NCwgMjU1LCAyNCwgMjEwLCAxMDQsIDIyNCwgNzQsIDk0LCAyNTUsIDI0LCAyMTAsIDEwNCwgMjQzLCAKKyAgICAxMzIsIDk0LCAyNTUsIDI0LCAyMTYsIDc2LCA5NCwgMjU1LCAyNCwgMjIzLCA1MCwgOTQsIDI1NSwgMjQsIDIxMCwgMTAzLCAKKyAgICA5NCwgMjU1LCAyNCwgMjI1LCAyNDksIDk0LCAyNTUsIDI0LCAyMTEsIDIwLCA5NCwgMjU1LCAyNCwgMjE2LCAyMTUsIDk0LCAKKyAgICAyNTUsIDI0LCAyNDMsIDQ4LCA5NCwgMjU1LCAyNCwgMjQzLCA0OSwgMjMwLCA3NCwgOTQsIDI1NSwgMjQsIDI0MywgNDYsIAorICAgIDk0LCAyNTUsIDI0LCAyMjQsIDc1LCAyMjYsIDIwLCA5NCwgMjU1LCAyNCwgMjE2LCAyNTQsIDI0MywgNjMsIDk0LCAyNTUsIAorICAgIDI0LCAyMjUsIDIzMCwgOTQsIDI1NSwgMjQsIDI1MywgMjA4LCAyNDIsIDQ4LCA5NCwgMjU1LCAyNCwgMjMwLCA4NCwgOTQsIAorICAgIDI1NSwgMjQsIDIzMSwgMjEzLCA5NCwgMjU1LCAyNCwgMjMxLCA1NCwgOTQsIDI1NSwgMjQsIDIzMSwgNTUsIDIzNCwgMTgzLCAKKyAgICA5NCwgMjU1LCAyNCwgMjQ4LCAxNzEsIDk0LCAyNTUsIDI0LCAyMjQsIDg2LCA5NCwgMjU1LCAyNCwgMjE2LCAyNTQsIDIyNCwgCisgICAgNzAsIDk0LCAyNTUsIDI0LCAyMTEsIDMwLCAyNTIsIDQ4LCAyMTAsIDIzMCwgOTQsIDI1NSwgMjQsIDIyNiwgMjExLCA5NCwgCisgICAgMjU1LCAyNCwgMjM2LCAyNiwgOTQsIDI1NSwgMjQsIDI0OCwgNzgsIDk0LCAyNTUsIDI0LCAyMTAsIDMzLCA5NCwgMTY0LCAKKyAgICAyMzEsIDE0OCwgMjUwLCA0MywgOTQsIDIyNSwgMTQsIDIyMCwgMzgsIDk0LCAyMjUsIDE0LCAyNDIsIDEsIDIyMSwgMTY0LCAKKyAgICA5NCwgMjI1LCAxNCwgMjQyLCAxLCAyMjUsIDI0MywgOTQsIDIyNSwgMTQsIDI0MiwgMSwgMjI0LCA3OSwgOTQsIDIyNSwgMTQsIAorICAgIDI0MSwgMTY1LCA5NCwgMjI1LCAxNCwgMjE1LCAxNzcsIDk0LCAyMjUsIDE0LCAyMjEsIDE2NCwgOTQsIDIyNSwgMTQsIDIyNSwgCisgICAgMjQzLCA5NCwgMjI1LCAxNCwgMjI0LCA3OSwgOTQsIDIyNSwgMTQsIDI0MSwgNjgsIDk0LCAyMjUsIDE0LCAyNDEsIDY5LCAKKyAgICAyNDIsIDMsIDMxLCAyMTQsIDMsIDk0LCAyMjUsIDE0LCAyMjQsIDIwLCA5NCwgMjI1LCAxNCwgMjQ4LCAyMTYsIDE3NywgCisgICAgMjMxLCAxNzYsIDk0LCAyMjUsIDE0LCAyMzEsIDQzLCA5NCwgMjI0LCAxNDQsIDIzMSwgMTczLCA5NCwgMjI1LCAxNCwgMjIzLCAKKyAgICAxNzIsIDk0LCAyMjQsIDE0NCwgMjI1LCAyNTEsIDk0LCAyMjUsIDE0LCAyMjAsIDIzLCAyNDcsIDEyOCwgOTQsIDIyNSwgMTQsIAorICAgIDIxOSwgMTYxLCAyNDcsIDEyOCwgOTQsIDIyNCwgMTQ0LCAyMTksIDU1LCAyMjUsIDI0NSwgOTQsIDE2NCwgMjE0LCAxNjAsIAorICAgIDI0NywgMTI4LCA5NCwgMTY0LCAyMzIsIDExNCwgMjQ3LCAxMjgsIDk0LCAyMjQsIDE0NCwgMjI3LCAxOTksIDI0MiwgNDcsIAorICAgIDk0LCAyMjUsIDE0LCAyMjQsIDgwLCAyMjQsIDc0LCA5NCwgMSwgMjU0LCAxNzksIDk0LCAxLCAyNTIsIDM2LCA5NCwgMSwgCisgICAgMjQyLCAyMDgsIDk0LCAxLCAyNDgsIDE5NywgOTQsIDEsIDI0MSwgMjQ1LCA5NCwgMSwgMjE0LCAzLCA5NCwgMSwgMjEwLCAKKyAgICA5NywgOTQsIDEsIDI0MSwgMjA0LCA5NCwgMSwgMjE2LCAyMzEsIDk0LCAxLCAyMTAsIDIzMywgOTQsIDEsIDQwLCAyMzUsIDAsIAorICAgIDk0LCAxLCAyMzUsIDAsIDk0LCAxLCAyMzMsIDEwMCwgOTQsIDEsIDQwLCAyMzEsIDcwLCA5NCwgMSwgMjMxLCA3MCwgOTQsIAorICAgIDEsIDQwLCAyMjcsIDE5OCwgOTQsIDEsIDIyNywgMTk4LCA5NCwgMSwgMjIxLCAyNTEsIDk0LCAxLCAyNTMsIDE3MCwgOTQsIAorICAgIDEsIDQwLCAyMjUsIDIyNCwgOTQsIDEsIDIyNSwgMjI0LCA5NCwgMSwgNDAsIDIxNSwgMTgwLCA5NCwgMSwgMjE1LCAxODAsIAorICAgIDk0LCAxLCAyMjQsIDQyLCA5NCwgMSwgMjIzLCA3MCwgOTQsIDEsIDIyMCwgMjIsIDk0LCAxLCAyMTcsIDM5LCA5NCwgMjcsIAorICAgIDIxMSwgNiwgNTIsIDIxNCwgMywgOTQsIDI3LCAyMTEsIDYsIDIxNCwgNCwgMjEwLCAyMzMsIDk0LCAyNywgMjExLCA2LCA1MiwgCisgICAgMjEwLCAyMzMsIDk0LCAyMjQsIDE0NCwgMjQzLCA0OCwgOTQsIDIyNCwgMTQ0LCAyNDMsIDQ2LCA5LCA1NCwgNTAsIDksIDUsIAorICAgIDIyMSwgMjQ0LCA5LCAyNDQsIDM4LCAyMzEsIDE1OSwgOSwgNSwgMjIyLCAyNSwgOSwgNSwgMjIxLCAyNDcsIDI1NCwgNDUsIAorICAgIDI0OSwgMTE3LCAyMjIsIDE5NSwgMjU0LCA0NSwgMjQ0LCAxMiwgMjIyLCAxOTUsIDksIDIyMywgMTM3LCAyNTQsIDQ1LCAKKyAgICAyMjUsIDE4NiwgMjMwLCAxOTgsIDUwLCAyNTQsIDQ1LCAyMjUsIDE4NiwgMjE2LCAyNDksIDIxNiwgMTQ5LCA1MCwgMjU0LCAKKyAgICAyMzAsIDUwLCA5LCAyNDksIDIyNywgOSwgMjQ4LCAxNTgsIDIyMCwgMTM5LCA5LCAyMjUsIDE2LCAyMTMsIDI0MSwgNTAsIDksIAorICAgIDUsIDIzMCwgMTc5LCA5LCA1LCAyMjIsIDUsIDI1NCwgMTgxLCAyMTIsIDQ1LCA5LCA1LCAyNTQsIDE4MSwgMjUzLCAyMjksIAorICAgIDksIDUsIDIyMywgMTcwLCAyNTQsIDE4MCwgOSwgNSwgMjIzLCAxNzgsIDI1NCwgMTYxLCAyNTQsIDExMiwgOSwgNSwgMjE3LCAKKyAgICA3MSwgOSwgNCwgMTI1LCAyMTcsIDgxLCA5LCA0LCAxMjUsIDI3LCAxMDksIDIsIDIzMywgMTA5LCAyLCAyMTEsIDQzLCA5LCAKKyAgICA0LCAxMjUsIDIxMCwgMTA4LCA5LCA0LCAyNDQsIDE3MywgOSwgNCwgMjQ4LCAxOTIsIDksIDQsIDIzNCwgMjExLCA5LCAyMjAsIAorICAgIDE1MiwgOSwgMSwgNzksIDksIDIxNSwgMjEyLCA1OSwgMjI0LCAxNDQsIDc5LCA5LCAyMjQsIDE2LCA3OSwgOSwgMSwgMjM0LCAKKyAgICAyMTUsIDIxMSwgNDMsIDksIDEsIDI0MiwgMjYsIDksIDEsIDEwOSwgMiwgMjMxLCAyMzMsIDQ4LCA5LCAxLCAxMDksIDIsIAorICAgIDE4MiwgNDgsIDksIDEsIDIxMiwgMzEsIDIsIDE4MiwgNDgsIDksIDEsIDEwOSwgMiwgMTgyLCA1MSwgOSwgMSwgNzcsIDIsIAorICAgIDE4MiwgNDgsIDksIDEsIDI1NCwgMTc5LCA5LCAxLCAyNTIsIDYyLCA5LCAxLCAyMTcsIDksIDIzMSwgMTY5LCA5LCAxLCAKKyAgICAyMTcsIDgsIDksIDEsIDIxNiwgMTkzLCA5LCAxLCAyMzUsIDEyOSwgOSwgMSwgMjQyLCA0NCwgOSwgMSwgMjM0LCAxMzUsIDksIAorICAgIDEsIDI0OCwgMjAzLCA5LCAxLCAyMTYsIDIwMywgOSwgMSwgMjIzLCA5OCwgOSwgMSwgMjEwLCAxMDgsIDksIDEsIDIyMSwgCisgICAgMTY4LCA5LCAxLCAyMjAsIDYxLCA5LCAxLCAyMjIsIDI4LCA5LCAxLCAyNDgsIDIyNCwgOSwgMSwgMjE3LCA4MSwgOSwgMSwgCisgICAgMjEwLCAxMTEsIDksIDEsIDI1NCwgMjA1LCA5LCAxLCAyNDIsIDI1MSwgOSwgMSwgMjM0LCAxODEsIDIsIDExMywgMTcwLCAKKyAgICA0OCwgOSwgMSwgMjM0LCAxODEsIDIsIDEzNCwgMTcwLCA1MSwgOSwgMSwgMjQ0LCAxNzYsIDc3LCAyLCAyMzUsIDIwMCwgCisgICAgMjE0LCAxMDUsIDksIDEsIDI0NCwgMTc2LCA3NywgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIAorICAgIDEzNCwgMTcwLCA0OCwgOSwgMjE3LCA0NCwgOSwgMSwgMjQ0LCAxNTAsIDksIDEsIDIyNCwgODQsIDksIDEsIDIzNSwgMCwgOSwgCisgICAgMSwgMjMzLCAxMDgsIDksIDEsIDIzMSwgODMsIDksIDEsIDIyOCwgNjcsIDksIDEsIDI0MSwgMjI1LCA5LCAxLCAyMTIsIDMwLCAKKyAgICA5LCAxLCAxMDksIDIzMSwgMTk3LCA5LCAxLCAyMTEsIDQzLCA5LCAyNDQsIDE3MSwgOSwgMjQ4LCAxOTAsIDksIDIzNCwgCisgICAgMjA5LCA5LCAyNDQsIDE3MywgOSwgMjQ4LCAxOTIsIDksIDIzNCwgMjExLCA5LCAyMjAsIDk1LCA5LCAyMTgsIDQ2LCA5LCAKKyAgICAyMzEsIDIzMSwgNDgsIDksIDE4MiwgNDgsIDksIDE4MiwgNTEsIDksIDIxOCwgNjYsIDI1NCwgMTc5LCA5LCAyMzUsIDIwMCwgCisgICAgMjQ4LCAxOTIsIDksIDE2NCwgMjI4LCA2OCwgMjQyLCAyMjUsIDksIDIwOSwgMjU1LCA5LCAyNSwgNSwgNCwgMjE0LCAxMDYsIAorICAgIDQ4LCA5LCAyNSwgNSwgMjM1LCAyMDAsIDQsIDIxNCwgMTA2LCA0OCwgOSwgMjUsIDUsIDU5LCA1MSwgOSwgMjIzLCA1MiwgCisgICAgMjQ4LCAxOTIsIDksIDI0NCwgMTc0LCAyLCAxMTMsIDI0NywgMTI2LCA5LCAyMTIsIDMyLCAxODIsIDUxLCAyNTQsIDQ1LCAKKyAgICAyMSwgMjEwLCA4NiwgMjU0LCA0NSwgMjEsIDExMSwgMjU0LCA0NSwgMjEsIDEwNSwgMjU0LCA0NSwgMjEsIDE1OCwgMjU0LCAKKyAgICA0NSwgMjEsIDE2MSwgMjU0LCA0NSwgMjEsIDE5MCwgMjU0LCA0NSwgMjEsIDE5NSwgMjU0LCA0NSwgMjEsIDE5OSwgMjU0LCAKKyAgICA0NSwgMjEsIDE5NiwgMjU0LCA0NSwgMjEsIDIwMSwgOSwgMjI1LCAxODUsIDUwLCA5LCAyNDgsIDkxLCAyMjAsIDEzOSwgOSwgCisgICAgMjE2LCAxNDcsIDIyMCwgMTM5LCA5LCAyNDQsIDg5LCAyMjUsIDEyLCAyMTgsIDE1OCwgOSwgMSwgMjQ3LCAxMjcsIDI1MiwgCisgICAgNjIsIDksIDEsIDI0NywgMTI3LCAyMjQsIDg0LCA5LCAxLCAyMTgsIDI0LCAyNTQsIDE3OSwgOSwgMSwgMTA5LCAyMTIsIDQ2LCAKKyAgICA5LCAxLCAxMDksIDIsIDIxMiwgMzIsIDE4MiwgNDgsIDksIDEsIDEwOSwgMiwgMjEyLCAzMiwgMTgyLCA1MSwgOSwgMSwgCisgICAgMTI1LCAyNDIsIDI2LCA5LCAxLCAxMjUsIDE4MiwgMjU0LCAxNzksIDksIDEsIDEyNSwgMTgyLCAyMTIsIDMwLCA5LCAxLCAKKyAgICAxMDQsIDIsIDE4MiwgNDgsIDksIDEsIDEyNSwgMTgyLCAyMTEsIDQzLCA5LCAxLCAyMTUsIDE0OSwgOSwgMSwgMjE1LCAxNDcsIAorICAgIDksIDEsIDI1MiwgNzIsIDksIDEsIDIxNywgOSwgMiwgMjIyLCAyMzYsIDksIDEsIDIxNywgOSwgMiwgMTM0LCAxNzAsIDcyLCAKKyAgICAyNDYsIDExMSwgOSwgMSwgMjI1LCAyMDgsIDksIDEsIDIxNywgNiwgOSwgMSwgMjUyLCA2MCwgOSwgMSwgMTIyLCAyLCAxODIsIAorICAgIDQ4LCA5LCAxLCAxMjIsIDIsIDExMywgMTcwLCA2NywgNDgsIDksIDEsIDIyNywgMTU3LCA5LCAxLCAyNDYsIDUxLCA5LCAxLCAKKyAgICAxMjIsIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjE3LCAyNywgOSwgMSwgMjE3LCAyNSwgOSwgMSwgMjQ4LCAxMzgsIDksIDEsIAorICAgIDI0OCwgMjA0LCAyLCAyMjIsIDIzNiwgOSwgMSwgMjQ4LCAyMDQsIDIsIDU5LCA1MSwgOSwgMSwgMjQ4LCAyMDQsIDIsIDU5LCAKKyAgICAyNTIsIDUxLCAyMiwgNCwgMjE3LCA4MSwgOSwgMSwgMjQ4LCAyMDksIDksIDEsIDI0OCwgMTQwLCA5LCAxLCAyNDYsIDc4LCAKKyAgICA5LCAxLCAyNDgsIDIwNCwgMiwgMTM0LCAxNzAsIDcyLCAyNDYsIDExMSwgOSwgMSwgMjQ4LCAyMDQsIDIsIDI0NCwgMTksIAorICAgIDE3MCwgNDgsIDksIDEsIDIyMiwgMTczLCA5LCAxLCAyMjMsIDk5LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjIzLCA5OSwgMiwgCisgICAgMjIyLCAyMzYsIDksIDEsIDIyMywgOTksIDIsIDU5LCA1MSwgOSwgMSwgMjIzLCA5OSwgMiwgNCwgMjE0LCAxMDYsIDUxLCA5LCAKKyAgICAxLCAyMjMsIDk5LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjIzLCA5OSwgMiwgMTEzLCAxNzAsIDQ4LCAKKyAgICA5LCAxLCAyMzUsIDEyNiwgOSwgMSwgMjIzLCA5OSwgMiwgMjQ0LCAxOSwgMTcwLCA0OCwgOSwgMSwgMjIxLCAxNjksIDIsIAorICAgIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA5LCAxLCAyMjEsIDE2OSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyMjEsIDE2OSwgCisgICAgMiwgMTM0LCAxNzAsIDI1MiwgNTEsIDIyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIyMiwgMjksIDIsIDExMywgMTcwLCA1MSwgCisgICAgOSwgMSwgMjIyLCAyOSwgMiwgMTM0LCAxNzAsIDQ4LCA5LCAxLCAyMTcsIDgyLCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIAorICAgIDI1NCwgMjA2LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDI0NywgMTI3LCAyNDQsIDE1MCwgOSwgMSwgMjQ0LCAxNTEsIDIsIAorICAgIDU5LCAyMzAsIDExNCwgNTEsIDksIDEsIDI0NCwgMTUxLCAyLCA1OSwgNTEsIDksIDEsIDIxMywgMjQ4LCA5LCAxLCAyNDQsIAorICAgIDE1MSwgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCAyMjUsIDIwNiwgOSwgMSwgMjI0LCA4NSwgMiwgNTksIDQ4LCA5LCAxLCAKKyAgICAyMjQsIDg1LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIzNCwgMTgwLCA5LCAxLCAyMTcsIDI1MSwgMjM1LCAwLCA5LCAxLCAKKyAgICAyMzUsIDEsIDIsIDIyMiwgMjM2LCA5LCAxLCAyMzUsIDEsIDIsIDU5LCA0OCwgOSwgMSwgMjI5LCA4NCwgOSwgMSwgMjM1LCAKKyAgICAxLCAyLCAxMzQsIDE3MCwgNTEsIDksIDEsIDI0MywgMTI5LCA5LCAxLCAyNDMsIDEzMCwgMiwgMjIyLCAyMzYsIDksIDEsIAorICAgIDIyOSwgNywgOSwgMSwgMjQzLCAxMzAsIDIsIDExMywgMTcwLCA1MSwgOSwgMSwgMjQyLCAxMDgsIDksIDEsIDI0MywgMTMwLCAKKyAgICAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDIzMywgMTA5LCAyLCA0LCAyMTQsIDEwNSwgOSwgMSwgMjMzLCAxMDksIDIsIDU5LCAKKyAgICA0OCwgOSwgMSwgMjMzLCAxMDksIDIsIDEzNCwgMTcwLCA0OCwgOSwgMSwgMjMzLCAxMDksIDIsIDEzNCwgMTcwLCA1MSwgOSwgCisgICAgMSwgMjI4LCA2OCwgMiwgNTksIDUxLCA5LCAxLCAyMjgsIDY4LCAyNDIsIDIyNSwgOSwgMSwgMjIyLCAyMTYsIDksIDEsIAorICAgIDIyOCwgNjgsIDIsIDIyMiwgMjM2LCA5LCAxLCAyMjgsIDY4LCAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDI0MSwgMjI2LCAKKyAgICAyNDcsIDE0OSwgOSwgMSwgMjE3LCAyOCwgMiwgNTksIDQ4LCA5LCAxLCAyNDEsIDIyNiwgMiwgNzcsIDQ4LCA5LCAxLCAyNDEsIAorICAgIDIyNiwgMjQyLCAxNzgsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgMiwgMTgyLCA0OCwgOSwgMSwgMjE3LCA5LCAyMzEsIAorICAgIDE3MCwgMjQyLCAxNzgsIDksIDEsIDIxMiwgMzEsIDIsIDIyMiwgMjM2LCA5LCAxLCAyMzQsIDc5LCAyMjYsIDIzOCwgOSwgMSwgCisgICAgMjI2LCAyMzgsIDksIDEsIDY5LCA5LCAxLCAyMTAsIDIxMiwgOSwgMSwgMjM0LCA3OSwgMjEwLCAyMTIsIDksIDEsIDIxMiwgCisgICAgMzEsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjEzLCAyNTUsIDksIDEsIDI0NCwgMTc2LCAyMTEsIDQzLCA5LCAxLCA3NywgCisgICAgMiwgMjE3LCA3OCwgOSwgMSwgNzcsIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAyMTIsIDMxLCAyLCA1OSwgNDgsIDksIDEsIDc2LCAKKyAgICA5LCAxLCA3NywgMiwgMTM0LCAxNzAsIDUxLCA5LCAxLCA3NywgMjUyLCAxNDAsIDksIDEsIDc3LCAyNTIsIDE0MSwgMiwgCisgICAgMTgyLCA0OCwgOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA5LCAxLCAyNTQsIDI1MiwgOSwgNCwgMTI1LCAyNywgMjIyLCAyOSwgCisgICAgMiwgMjMzLCAxMDksIDIsIDEwOSwgMjMxLCAxOTcsIDksIDQsIDEyNSwgMjcsIDIyNCwgODUsIDIsIDIzMywgMTA5LCAyLCAKKyAgICAxMDksIDIzMSwgMTk3LCA5LCA0LCAxMjUsIDY2LCA2NSwgMTcsIDksIDQsIDEyNSwgMjMzLCAxMDksIDI1NCwgMTc5LCA5LCAKKyAgICA0LCAxMjUsIDIzNSwgMTI5LCA5LCA0LCAxMjUsIDEzNCwgMjQ3LCAxMjYsIDksIDQsIDEyNSwgMjIxLCAxNjgsIDksIDI0NSwgCisgICAgMTUxLCA2NCwgMjUzLCAxNzQsIDksIDIxOCwgMTU0LCA2NCwgMjIyLCAxNDAsIDI0NSwgMTgzLCAyNDEsIDE2MiwgOSwgNCwgCisgICAgMTI1LCAyMjIsIDE4NSwgMjEwLCA4NiwgOSwgNCwgMTI1LCAyMTQsIDE1OSwgMjIzLCAxMTgsIDIxMCwgODYsIDksIDQsIAorICAgIDEyNSwgMjQ3LCAxMjcsIDI0MSwgMjQzLCA2NCwgMjM0LCAxMzUsIDksIDQsIDEyNSwgNjYsIDUzLCAxNywgOSwgNCwgMTIxLCAKKyAgICAyMjEsIDE2OCwgOSwgNCwgMTI1LCAyMzEsIDIzMiwgOSwgNCwgMjEyLCAzMCwgOSwgNCwgMjExLCA0MywgOSwgNCwgMTI1LCAKKyAgICAyMTEsIDQzLCA5LCA0LCAxMjUsIDIyOCwgNjcsIDksIDIyNSwgNDQsIDY0LCAyMjIsIDE1LCA5LCAyNDUsIDE2MCwgMjUwLCAKKyAgICAxODMsIDEyMSwgMjE4LCAxMzEsIDksIDI0NSwgMTYwLCAyNTAsIDE4MywgMTI1LCAyMTgsIDEzMSwgOSwgMjIyLCAxODUsIAorICAgIDEyNSwgMjE4LCAxMzIsIDIsIDI0NCwgMTEyLCAyNTAsIDE4MiwgOSwgNCwgMTIxLCAyMzEsIDgzLCA5LCAxLCAyNDgsIDIwNCwgCisgICAgMiwgMjM1LCAyMDAsIDIxNCwgMTA1LCA5LCAxLCAyMjMsIDk5LCAyLCAyMzUsIDIwMCwgMjE0LCAxMDUsIDI0NSwgMzAsIAorICAgIDI1NCwgNDUsIDIxLCAyMTAsIDg2LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTExLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgCisgICAgMTA1LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTU4LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTYxLCAyNDUsIDMwLCAyNTQsIAorICAgIDQ1LCAyMSwgMTkwLCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTk1LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMTk5LCAyNDUsIAorICAgIDMwLCAyNTQsIDQ1LCAyMSwgMTk2LCAyNDUsIDMwLCAyNTQsIDQ1LCAyMSwgMjAxLCA5LCAxLCAyMjAsIDYyLCAyLCA1OSwgCisgICAgNTEsIDksIDEsIDI0OCwgMjI1LCAyLCA1OSwgNTEsIDksIDEsIDI0MiwgMjUyLCAyLCA1OSwgNTEsIDksIDUsIDIxOSwgMTYwLCAKKyAgICAyNTQsIDEzNCwgOSwgNSwgMjE5LCAxNjAsIDIyNCwgMjM4LCAyMzEsIDYzLCA5LCAxLCAyNDEsIDIyNiwgMiwgMjM1LCAyMDAsIAorICAgIDIxNCwgMTA1LCAxODMsIDI0NSwgMTUxLCA2NCwgMjI2LCAxOCwgMTgzLCAyMTgsIDIwLCAyNDMsIDIzNiwgMjE4LCAxMzEsIAorICAgIDE4MywgMjE4LCA2OCwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxODMsIDIxOCwgMjAsIDI0OSwgMjM0LCAxODMsIDIxOCwgNjgsIAorICAgIDI0OSwgMjM0LCAxODMsIDIwMywgMjQ5LCAyMzQsIDE4MywgMjQ5LCAyMzUsIDIxOSwgMTA4LCAyMzMsIDUyLCAxODMsIDI0OSwgCisgICAgMjM1LCAyMTksIDEwOCwgMjIyLCAyNTQsIDE4MywgMjE4LCAyMCwgMjQ5LCAyMzUsIDIxOSwgMTA4LCAyMzMsIDUyLCAxODMsIAorICAgIDIxOCwgNjgsIDI0OSwgMjM1LCAyMTksIDEwOCwgMjIyLCAyNTQsIDE4MywgMjQ5LCAxODgsIDE4MywgMjQyLCA4LCAyMjYsIAorICAgIDI1NCwgMTgzLCAyNDIsIDgsIDIzMSwgNDEsIDE4MywgMjQyLCA4LCAyNTMsIDIyNiwgMTgzLCAyNTUsIDMwLCA3OSwgMTgzLCAKKyAgICAxLCAyNTQsIDE4MywgMTgzLCAxLCAyMTgsIDI0LCAyNTQsIDE4MywgMTgzLCAxLCAyNTIsIDMzLCAxODMsIDEsIDI0MywgCisgICAgMTIwLCAxODMsIDEsIDI0MywgMTIxLCAyNDMsIDk4LCAxODMsIDEsIDI0OCwgMjAwLCAxODMsIDEsIDI0NywgMTI3LCAyNDgsIAorICAgIDIwMSwgMjIyLCAyMzIsIDE4MywgMSwgMjQxLCAyNDUsIDE4MywgMSwgMjEyLCAzMCwgMTgzLCAxLCAyMTAsIDEwOCwgMTgzLCAKKyAgICAxLCAyNDEsIDIwMiwgMTgzLCAxLCAyMTYsIDIyNywgMTgzLCAxLCAyMTYsIDIyOCwgMjQzLCA5OCwgMTgzLCAxLCAyMTAsIAorICAgIDE5OSwgMTgzLCAxLCAyMTAsIDIwMCwgMjQxLCAyNDUsIDE4MywgMSwgMjM0LCAyMzEsIDE4MywgMSwgMjMzLCAxMDcsIDE4MywgCisgICAgMSwgMjMwLCAxOTUsIDE4MywgMSwgMjI3LCAxOTgsIDE4MywgMSwgMjIwLCAxNDUsIDE4MywgMSwgNDAsIDIyMCwgMTQ1LCAKKyAgICAxODMsIDEsIDc2LCAxODMsIDEsIDIyNSwgMjI0LCAxODMsIDEsIDIyMywgNTIsIDIyNSwgMjI0LCAxODMsIDEsIDIyMiwgMjYsIAorICAgIDE4MywgMSwgMjI0LCA3OCwgMTgzLCAxLCAyMjIsIDIzMiwgMTgzLCAxLCAyMjAsIDIyLCAxODMsIDEsIDIxNywgMzcsIDE4MywgCisgICAgMSwgMjI1LCAxNzIsIDI1MiwgMjAsIDE4MywgMSwgMjI1LCAxNzIsIDI0MiwgMjQ5LCAxODMsIDEsIDIyNSwgMTcyLCAyNDgsIAorICAgIDI4LCAxODMsIDIyNCwgMTU0LCA0OCwgMTgzLCAyMjQsIDE1NCwgNTEsIDE4MywgMjI0LCAxNTQsIDI0NiwgMTI1LCAxODMsIAorICAgIDIxMCwgMTcsIDQ4LCAxODMsIDIxMCwgMTcsIDUxLCAxODMsIDIxMCwgMTcsIDI0NiwgMTI1LCAxODMsIDIyMywgMTM0LCA0OCwgCisgICAgMTgzLCAyMjMsIDEzNCwgNTEsIDE4MywgMjQ2LCAxMjYsIDIxMCwgMjQsIDI0MSwgNTEsIDE4MywgMjQ2LCAxMjYsIDIxMCwgCisgICAgMjQsIDI1NCwgMTEzLCAxODMsIDI0MSwgMjQ4LCA0OCwgMTgzLCAyNDEsIDI0OCwgNTEsIDE4MywgMjQxLCAyNDcsIDI0NiwgCisgICAgMTI1LCAxODMsIDI0NSwgODcsIDQ4LCAxODMsIDI0NSwgODcsIDUxLCAxODMsIDIyMiwgMTA5LCAxODMsIDI0NCwgMTQ0LCAKKyAgICAyNDcsIDEyOCwgMTgzLCAyMjMsIDI1MSwgMTgzLCAyMjIsIDEzNiwgMTgzLCAxMTMsIDY3LCAxNzAsIDQ4LCAxODMsIDExMywgCisgICAgNjcsIDE3MCwgNTEsIDE4MywgMTM0LCAxNzAsIDQ4LCAxODMsIDEzNCwgMTcwLCA1MSwgMTgzLCAyMjYsIDI1MiwgMjMyLCAKKyAgICAyMjAsIDQ4LCAxODMsIDIyNiwgMjUyLCAyMzIsIDIyMCwgNTEsIDE4MywgMjMwLCA2MSwgMTgzLCAyNTIsIDEzOSwgMTgzLCAKKyAgICAxLCAyMTksIDUxLCAyMTAsIDgwLCAxODMsIDEsIDIxOSwgNTEsIDIzNCwgMTI4LCAxODMsIDEsIDIxOSwgNTEsIDI0NCwgCisgICAgMTYyLCA5LCAxLCAyNTIsIDYzLCAyLCAxMzQsIDE3MCwgMjQxLCAxLCA1MSwgOSwgMSwgMjUyLCA2MywgMiwgNTksIDI1MiwgCisgICAgNTEsIDIyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDI1MiwgNjMsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIDE1MywgNTEsIAorICAgIDksIDEsIDI1MiwgNjMsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIDE1MywgMjUyLCA1MSwgMjIsIDExMywgMTcwLCA0OCwgCisgICAgOSwgMSwgMjUyLCA2MywgMiwgMTEzLCAxNzAsIDI1MiwgNTEsIDIyLCA1OSwgNDgsIDksIDEsIDI1MiwgNjMsIDIsIDIzNSwgCisgICAgMjAwLCA0LCAyMTQsIDEwNiwgNTEsIDksIDEsIDI1MiwgNjMsIDIsIDQsIDIxNCwgMTA1LCA5LCAxLCAxMjIsIDIsIDExMywgCisgICAgMTcwLCA0OCwgOSwgMSwgMTIyLCAyLCAxMzQsIDE3MCwgMjI1LCAxMCwgMjE0LCAxNTMsIDUxLCA5LCAxLCAyNDgsIDIwNCwgCisgICAgMiwgMTEzLCAxNzAsIDIxMywgMTg5LCAyNTIsIDUxLCAyMiwgNCwgMjE3LCA4MSwgOSwgMSwgMjQ4LCAyMDQsIDIsIDIzNSwgCisgICAgMjAwLCA0LCAyMTQsIDEwNiwgNTEsIDksIDEsIDIyMywgOTksIDIsIDkxLCA5LCAxLCAyMjEsIDE2OSwgMiwgMjQ0LCAxOSwgCisgICAgMTcwLCA0OCwgOSwgMSwgMjU0LCAyMDYsIDIsIDExMywgMTcwLCA0OCwgOSwgMSwgMjU0LCAyMDYsIDIsIDEzNCwgMTcwLCAKKyAgICAyMjUsIDEwLCAyNDYsIDExMiwgNDgsIDksIDEsIDI1NCwgMjA2LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCA5LCAxLCAKKyAgICAyNDQsIDE1MSwgMiwgMTEzLCAxNzAsIDUxLCA5LCAxLCAyNDQsIDE1MSwgMiwgMTM0LCAxNzAsIDIyNSwgMTAsIDIxNCwgCisgICAgMTUzLCA1MSwgOSwgMSwgMjM0LCAxODEsIDIsIDU5LCA0OCwgOSwgMSwgMjM0LCAxODEsIDIsIDEzNCwgMTcwLCA0OCwgOSwgCisgICAgMSwgMjM0LCAxODEsIDIsIDEzNCwgMTcwLCAyMjUsIDEwLCAyMTQsIDE1MywgNTEsIDksIDEsIDY2LCAyLCA1OSwgNDgsIDksIAorICAgIDEsIDY2LCAyLCA1OSwgNTEsIDksIDEsIDIyOCwgNjgsIDIsIDExMywgMTcwLCA1MSwgOSwgMSwgMjI4LCA2OCwgMiwgNCwgCisgICAgMjE3LCA4MSwgOSwgMSwgMjI4LCA2OCwgMiwgNCwgMjE0LCAxMDUsIDksIDEsIDIzMywgMTA5LCAyLCAxMzAsIDksIDEsIAorICAgIDIyMywgOTksIDIsIDExMywgMTcwLCAyMTMsIDE4OSwgNDgsIDksIDEsIDIyMywgOTksIDIsIDE4MiwgNDgsIDksIDEsIDIyMSwgCisgICAgMTY5LCAyLCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCA5LCAxLCAxMjIsIDIsIDQsIDksIDEsIDIxNywgODIsIDUxLCA5LCAxLCAKKyAgICAxMjIsIDIsIDQsIDksIDEsIDIxNywgODIsIDIyLCAxMTMsIDI0NywgMTI2LCA5LCAxLCAyMjEsIDE2OSwgMiwgNCwgOSwgMSwgCisgICAgMjE3LCA4MiwgMjIsIDExMywgMjQ3LCAxMjYsIDksIDEsIDIyMywgOTksIDIsIDQsIDksIDEsIDIxNywgODIsIDIyLCAxMTMsIAorICAgIDI0NywgMTI2LCA5LCAxLCAxMjIsIDIsIDQsIDksIDEsIDIxNywgODIsIDQ4LCA5LCAxLCAxMDksIDIsIDI0NSwgMzAsIDI1NCwgCisgICAgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCAxMDksIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMzQsIDQ4LCA5LCAxLCAyNDQsIAorICAgIDE3NiwgNzcsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDI0NSwgCisgICAgMzAsIDI1NCwgNDUsIDIxLCAxMzQsIDQ4LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAKKyAgICAyNDQsIDE5LCA1MSwgOSwgMSwgMjEyLCAzMSwgMiwgMjQ1LCAzMCwgMjU0LCA0NSwgMjEsIDExMywgNDgsIDksIDEsIDIxMiwgCisgICAgMzEsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMzQsIDQ4LCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIDI0NSwgMzAsIAorICAgIDI1NCwgNDUsIDIxLCAxMTMsIDQ4LCA5LCAxLCA3NywgMjUyLCAxNDEsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAxMzQsIAorICAgIDQ4LCA5LCAxLCAxMjIsIDIsIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAyNDQsIDE5LCA1MSwgOSwgMSwgMjIxLCAxNjksIDIsIAorICAgIDI0NSwgMzAsIDI1NCwgNDUsIDIxLCAyNDQsIDE5LCA0OCwgOSwgMSwgMjIxLCAxNjksIDIsIDIzNSwgMjAwLCAyMTQsIDEwNSwgCisgICAgOSwgMSwgMjM1LCAxLCAyLCAxMTMsIDE3MCwgNDgsIDIxNiwgMjA2LCAxLCAyNDIsIDUzLCAyMTYsIDIwNiwgMSwgMjIwLCAKKyAgICA3MCwgMjE2LCAyMDYsIDEsIDIyOCwgNjYsIDIxNiwgMjA2LCAxLCAyMjMsIDE4NywgMjE2LCAyMDYsIDEsIDI1MiwgMTk3LCAKKyAgICAyMTYsIDIwNiwgMSwgMjMzLCAxLCAyMTYsIDIwNiwgMSwgMjM1LCAxNCwgMjE2LCAyMDYsIDEsIDI1NCwgMTY4LCAyMTYsIAorICAgIDIwNiwgMSwgMjE0LCAyNSwgMjE2LCAyMDYsIDEsIDIzMSwgODIsIDIxNiwgMjA2LCAxLCAyNDQsIDIwMiwgMjE2LCAyMDYsIAorICAgIDEsIDI0OCwgMzEsIDIxNiwgMjA2LCAxLCAyMTYsIDIwOCwgMjE2LCAyMDYsIDEsIDIzMywgMTM3LCAyMTYsIDIwNiwgMSwgCisgICAgMjQzLCAxMzgsIDIxNiwgMjA2LCAxLCAyNDIsIDE4NCwgMjE2LCAyMDYsIDEsIDIyMSwgMTY3LCAyMTYsIDIwNiwgMSwgMjQ4LCAKKyAgICAxNTYsIDIxNiwgMjA2LCAxLCAyMTAsIDEwMCwgMjE2LCAyMDYsIDEsIDIxNywgMzgsIDIxNiwgMjA2LCAxLCAyMTEsIDEwMywgCisgICAgMjE2LCAyMDYsIDEsIDIyNSwgMjM3LCAyMTYsIDIwNiwgMSwgMjM1LCAxMzQsIDIxNiwgMjA2LCAxLCAyNTAsIDE0MiwgMjE2LCAKKyAgICAyMDYsIDEsIDIxNSwgMTU2LCAyMTYsIDIwNiwgMSwgMjQxLCAxOTUsIDIxNiwgMjA2LCAxLCAyMzQsIDEzNywgMjE2LCAyMDYsIAorICAgIDEsIDIxNiwgMjA3LCAyMTYsIDIwNiwgMSwgMjEwLCAxMTUsIDIxNiwgMjA2LCAxLCAyMjAsIDYwLCAyMTYsIDIwNiwgMSwgCisgICAgMjIyLCAzMiwgMjE2LCAyMDYsIDEsIDI0OCwgMjI3LCAyMTYsIDIwNiwgMSwgMTEyLCAyMTYsIDIwNiwgMSwgMjEwLCAyMywgCisgICAgMjE2LCAyMDYsIDEsIDI1NCwgMjAyLCAyMTYsIDIwNiwgMSwgMjQyLCAyNTAsIDIxNiwgMjA2LCAxLCAyMjQsIDg4LCAyMTYsIAorICAgIDIwNiwgMSwgMjEyLCA2MywgMjE2LCAyMDYsIDI1NSwgMzEsIDIxNiwgMjA2LCAyNTUsIDQ3LCAyMTYsIDIwNiwgMjQwLCAKKyAgICAxMjEsIDIxNiwgMjA2LCAyNDUsIDIxNiwgMjE2LCAyMDYsIDIxNCwgMjIyLCAyMTYsIDIwNiwgMjI2LCAxODYsIDIxNiwgCisgICAgMjA2LCAyNDUsIDIyNCwgMjE2LCAyMDYsIDI0NSwgMjQsIDIxNiwgMjA2LCAyMjYsIDI1MSwgMjE2LCAyMDYsIDIyNywgMywgCisgICAgMjE2LCAyMDYsIDIxOCwgNDYsIDIxNiwgMjA2LCAxLCAyMjksIDIzMCwgMjI4LCAxNDIsIDIxLCAyMTAsIDg2LCAyMjgsIAorICAgIDE0MiwgMjEsIDExMSwgMjI4LCAxNDIsIDIxLCAxMDUsIDIyOCwgMTQyLCAyMSwgMTU4LCAyMjgsIDE0MiwgMjEsIDE2MSwgCisgICAgMjI4LCAxNDIsIDIxLCAxOTAsIDIyOCwgMTQyLCAyMSwgMTk1LCAyMjgsIDE0MiwgMjEsIDE5OSwgMjI4LCAxNDIsIDIxLCAKKyAgICAxOTYsIDIyOCwgMTQyLCAyMSwgMjAxLCAyMjgsIDE0MiwgMSwgNjEsIDIyOCwgMTQyLCAxLCAyNDUsIDIxNywgMjI4LCAxNDIsIAorICAgIDEsIDc0LCAyMjgsIDE0MiwgMSwgNzYsIDIyOCwgMTQyLCAxLCA2OSwgMjI4LCAxNDIsIDEsIDIyNiwgMTg3LCAyMjgsIDE0MiwgCisgICAgMSwgNzgsIDIyOCwgMTQyLCAxLCAyNDgsIDIxNywgMjI4LCAxNDIsIDEsIDIzMCwgMzAsIDIyOCwgMTQyLCAxLCAyNTIsIAorICAgIDE5OSwgMjI4LCAxNDIsIDEsIDE5MSwgMjI4LCAxNDIsIDEsIDIxNywgMTA2LCAyMjgsIDE0MiwgMSwgMjM1LCAxNDcsIDIyOCwgCisgICAgMTQyLCAxLCAyNTAsIDE2NSwgMjI4LCAxNDIsIDEsIDI0OCwgMjI5LCAyMjgsIDE0MiwgMSwgMjA1LCAyMjgsIDE0MiwgMSwgCisgICAgMjIyLCAxODEsIDIyOCwgMTQyLCAxLCAyMDYsIDIyOCwgMTQyLCAxLCAyNDMsIDg2LCAyMjgsIDE0MiwgMSwgMjQ0LCAyMDQsIAorICAgIDIyOCwgMTQyLCAxLCAxNzYsIDIyOCwgMTQyLCAxLCAyMzMsIDE0MSwgMjI4LCAxNDIsIDEsIDIyOSwgMjM0LCAyMTEsIDIyMywgCisgICAgMjI4LCAxNDIsIDEsIDE4NiwgMjI4LCAxNDIsIDEsIDIyNywgMTY5LCAyMjgsIDE0MiwgMSwgMTk4LCAyMjgsIDE0MiwgMSwgCisgICAgMTYyLCAyMjgsIDE0MiwgMSwgMjEyLCA2NSwgMjI4LCAxNDIsIDEsIDE5MiwgMjI4LCAxNDIsIDEsIDIyNywgMTcwLCAyMTEsIAorICAgIDIyMywgMjI4LCAxNDIsIDEsIDIzNSwgNjcsIDIzNSwgMTQ3LCAyMjgsIDE0MiwgMSwgMjM1LCA2NywgMjUwLCAxNjUsIDIyOCwgCisgICAgMTQyLCAxLCAyMzUsIDY3LCAyMDUsIDIyOCwgMTQyLCAzOCwgMjE5LCAyNTMsIDEyNSwgMjE2LCAzMSwgMjI4LCAxNDIsIDM4LCAKKyAgICAyMTksIDI1MywgMTIxLCAyMTYsIDMxLCAyMjgsIDE0MiwgMzgsIDIxOSwgMjUzLCAyMjIsIDIzMSwgMjE2LCAzMSwgMjI4LCAKKyAgICAxNDIsIDM4LCAyMDAsIDI0OCwgNDYsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgMjAwLCAxMjUsIDIxNiwgMzEsIDIyOCwgCisgICAgMTQyLCAzOCwgMjAwLCAxMjEsIDIxNiwgMzEsIDIyOCwgMTQyLCAzOCwgMjAwLCAyMjIsIDIzMSwgMjE2LCAzMSwgMjI4LCAKKyAgICAxNDIsIDM4LCAyMjksIDE5OCwgNzksIDIyOCwgMTQyLCAzOCwgNTIsIDU5LCA0OCwgMjI4LCAxNDIsIDEyNSwgMTM4LCAyNTQsIAorICAgIDY1LCAyMjgsIDE0MiwgMTIxLCAxMzgsIDI1NCwgNjUsIDIyOCwgMTQyLCAxNiwgMjI2LCAxODgsIDI0OCwgNTgsIDIyOCwgCisgICAgMTQyLCAxNiwgMjQzLCA4NSwgMjI4LCAxNDIsIDI0OSwgMjI3LCAyMjgsIDE0MiwgMjQ1LCAzOSwgNzksIDIyOCwgMTQyLCAKKyAgICAyMzMsIDExNCwgMjIxLCAyNTQsIDEsIDI1NCwgMTg1LCAyMjEsIDI1NCwgMSwgMjUxLCAyMzYsIDIyMSwgMjU0LCAxLCAyNDMsIAorICAgIDExOSwgMjIxLCAyNTQsIDEsIDI0OCwgMjAyLCAyMjEsIDI1NCwgMSwgMjM1LCAxNTgsIDIyMSwgMjU0LCAxLCAyNTIsIDE5NywgCisgICAgMjIxLCAyNTQsIDEsIDIxMCwgODksIDIyMSwgMjU0LCAxLCAyMzUsIDE2NiwgMjIxLCAyNTQsIDEsIDIxNiwgNjgsIDIyMSwgCisgICAgMjU0LCAxLCAyMTAsIDE4MiwgMjIxLCAyNTQsIDEsIDIzNSwgMTUsIDIyMSwgMjU0LCAxLCAyMzMsIDEzNCwgMjIxLCAyNTQsIAorICAgIDEsIDIzMCwgMTk1LCAyMjEsIDI1NCwgMSwgMjI3LCAxOTgsIDIyMSwgMjU0LCAxLCAyMTksIDE1OCwgMjIxLCAyNTQsIDEsIAorICAgIDIzNiwgNiwgMjIxLCAyNTQsIDEsIDI0NCwgMTI5LCAyMjEsIDI1NCwgMSwgMjE1LCAxODIsIDIyMSwgMjU0LCAxLCAyMjQsIAorICAgIDEzLCAyMjEsIDI1NCwgMSwgMjIyLCAyMzIsIDIyMSwgMjU0LCAxLCAyMjAsIDg3LCAyMjEsIDI1NCwgMSwgMjE3LCAxMDEsIAorICAgIDIyMSwgMjU0LCAxNjQsIDIzNiwgNiwgMjIxLCAyNTQsIDE2NCwgMjM2LCA1LCAyMjEsIDI1NCwgMTY0LCAyMjYsIDI0NywgCisgICAgMjIxLCAyNTQsIDE2NCwgMjQ4LCAyMTUsIDIyMSwgMjU0LCA1OCwgMSwgMjQ1LCAxMTMsIDIxMCwgMTgyLCAyMjEsIDI1NCwgCisgICAgMTY0LCAyNDUsIDExMywgMjEwLCAxODIsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCA3NiwgMjIxLCAyNTQsIDI1LCA1LCA3NiwgCisgICAgMjIxLCAyNTQsIDI1LCA1LCAyMjYsIDEyMiwgMjU1LCA4MiwgMjIxLCAyNTQsIDI1LCA1LCAyMDAsIDI1NSwgODIsIDIyMSwgCisgICAgMjU0LCAyNSwgNSwgMjU1LCA4MiwgMjIxLCAyNTQsIDI1LCA1LCAyMjYsIDEyMiwgNjEsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCAKKyAgICA2MSwgMjIxLCAyNTQsIDI1LCA1LCA2MSwgMjIxLCAyNTQsIDU4LCAxLCAyMTksIDI1MywgNjEsIDIyMSwgMjU0LCAyNSwgNSwgCisgICAgMjE5LCAyNTMsIDYxLCAyMjEsIDI1NCwgMjUsIDUsIDIwMCwgNjksIDIyMSwgMjU0LCAyNSwgNSwgNjksIDIyMSwgMjU0LCAKKyAgICA1OCwgMSwgNzQsIDIyMSwgMjU0LCAyNSwgNSwgMjAwLCA3NCwgMjIxLCAyNTQsIDI1LCA1LCA3NCwgMjIxLCAyNTQsIDI1LCAKKyAgICA1LCA3OCwgMjIxLCAyNTQsIDI1LCA1LCAyMTgsIDQ2LCAyMjEsIDI1NCwgMTY0LCAyMjksIDk3LCAyMjEsIDI1NCwgMjI0LCAKKyAgICAxNDQsIDIyOSwgOTcsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjU0LCAyMjcsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjU0LCAxMjIsIAorICAgIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjUyLCAxMjIsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjUzLCAyMDksIDIyMSwgMjU0LCAKKyAgICAyMjQsIDE0NCwgMjIwLCAxMCwgMjIxLCAyNTQsIDI1NSwgMzAsIDc5LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIzMSwgNzMsIAorICAgIDIyNCwgNDgsIDIyMSwgMjU0LCAyMjQsIDE0NCwgMjEwLCAzMSwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMjQsIDQ4LCAyMjEsIAorICAgIDI1NCwgMjI0LCAxNDQsIDIxMCwgMTE0LCAyMjEsIDI1NCwgMjI0LCAxNDQsIDIxNSwgOTAsIDIyMSwgMjU0LCAyMjQsIDE0NCwgCisgICAgMjU0LCAxNywgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyMTksIDU1LCAyMzEsIDE1MCwgMjIxLCAyNTQsIDIyNCwgMTQ0LCAyNTQsIAorICAgIDEwOCwgMjMxLCAxODcsIDEsIDI0MiwgMzEsIDIzMSwgMTg3LCAxLCAyNTUsIDM0LCAyMzEsIDE4NywgMSwgMjU0LCAyMjUsIAorICAgIDIzMSwgMTg3LCAxLCAyNTUsIDgsIDIzMSwgMTg3LCAxLCAyNTQsIDIxOCwgMjMxLCAxODcsIDEsIDIxNCwgMTI0LCAyMzEsIAorICAgIDE4NywgMSwgMjUzLCAxNjgsIDIzMSwgMTg3LCAxLCAyMzUsIDE2NiwgMjMxLCAxODcsIDEsIDI1MywgMjA2LCAyMzEsIDE4NywgCisgICAgMSwgMjU0LCAxOTAsIDIzMSwgMTg3LCAxLCAyNTQsIDE5NSwgMjMxLCAxODcsIDEsIDI1NCwgMTg3LCAyMzEsIDE4NywgMSwgCisgICAgMjU0LCAxNDQsIDIzMSwgMTg3LCAxLCAyNTQsIDEzMSwgMjMxLCAxODcsIDEsIDI1MywgMjQ1LCAyMzEsIDE4NywgMSwgMjM2LCAKKyAgICA2LCAyMzEsIDE4NywgMSwgMjU0LCA4MCwgMjMxLCAxODcsIDEsIDI1MywgMjE2LCAyMzEsIDE4NywgMSwgMjU0LCA1MywgCisgICAgMjMxLCAxODcsIDEsIDI1NCwgNDksIDIzMSwgMTg3LCAxLCAyNTMsIDIzOSwgMjMxLCAxODcsIDEsIDI1MywgMjE0LCAyMzEsIAorICAgIDE4NywgMSwgMjQ2LCA2MywgMjMxLCAxODcsIDEsIDIzNSwgOCwgMjMxLCAxODcsIDEsIDI1NCwgMjA1LCAyMzEsIDE4NywgCisgICAgMjU0LCAyMzEsIDc5LCAyMzEsIDE4NywgMjEzLCAxMzYsIDc5LCAyMzEsIDE4NywgMjQzLCA2MCwgNzksIDIzMSwgMTg3LCAKKyAgICAyMjQsIDE0MywgOSwgMSwgMjUyLCA2MywgMiwgNCwgMjE0LCAxMDYsIDUxLCA5LCAxLCAxNTEsIDIsIDExMywgMTcwLCA0OCwgCisgICAgOSwgMSwgMjE3LCA4MiwgMiwgMTEzLCAxNzAsIDQ4LCA5LCAxLCAyNDQsIDE1MSwgMiwgNTksIDI1MiwgNTEsIDIyLCAxMzQsIAorICAgIDE3MCwgNDgsIDksIDEsIDIyNCwgODUsIDIsIDU5LCA1MSwgOSwgMSwgMjMzLCAxMDksIDIsIDUyLCAxMzAsIDksIDEsIDY2LCAKKyAgICAyLCAxMzQsIDE3MCwgNDgsIDksIDEsIDc3LCAyLCAxMTMsIDE3MCwgMjUyLCA1MSwgMjIsIDE4MiwgNDgsIDksIDEsIDc3LCAKKyAgICAyLCAxMTMsIDE3MCwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgOSwgMSwgMjIzLCA5OSwgMiwgMjMyLCAxMjksIDksIDEsIDIxMiwgCisgICAgMzEsIDIsIDU5LCAyMTEsIDIzMSwgOSwgMSwgMjIyLCAyMDMsIDIxMSwgNDMsIDksIDI0OSwgMTA3LCAyNDQsIDE3MywgOSwgCisgICAgMjQ5LCAxMDcsIDI0OCwgMTkyLCA5LCAyNDksIDEwNywgMjM0LCAyMTEsIDksIDI0OSwgMTA3LCAyNDQsIDE3MSwgOSwgMjQ5LCAKKyAgICAxMDcsIDI0OCwgMTkwLCA5LCAyNDksIDEwNywgMjM0LCAyMDksIDksIDEzOCwgMTIzLCA1OSwgNDgsIDksIDEzOCwgMTEzLCAKKyAgICAxNzAsIDQ4LCA5LCAxMzgsIDIzMiwgMTMwLCA0OCwgOSwgMTM4LCAxMjMsIDU5LCA1MSwgOSwgMTM4LCAxMTMsIDE3MCwgNTEsIAorICAgIDksIDEzOCwgMjMyLCAxMzAsIDUxLCA5LCAyMDQsIDI0NCwgMTcxLCA5LCAyMDQsIDI0OCwgMTkwLCA5LCAyMDQsIDIzNCwgCisgICAgMjA5LCA5LCA0LCAxMjUsIDIxMiwgMzAsIDksIDI0NCwgMTc0LCAyLCAyMjIsIDIzNiwgOSwgMjQ0LCAxNzQsIDIsIDU5LCAKKyAgICA0OCwgOSwgMjM0LCAyMTIsIDIsIDU5LCA1MSwgOSwgNDMsIDI1NCwgMiwgNDgsIDksIDQ0LCAyNTQsIDIsIDQ4LCA5LCA0MywgCisgICAgMjU0LCAyLCA1MSwgOSwgNDQsIDI1NCwgMiwgNTEsIDksIDUyLCA0NCwgMjU0LCAyLCA0OCwgOSwgNTIsIDQ0LCAyNTQsIDIsIAorICAgIDcyLCAyLCAyNDcsIDEyOCwgOSwgNDQsIDI1NCwgMiwgNzIsIDIsIDI0NywgMTI4LCA5LCAyNDgsIDE5MywgMiwgMjQ3LCAKKyAgICAxMjgsIDg0LCA1LCAyMzUsIDIwMCwgMjUxLCA3LCA4NCwgNSwgMjUxLCA3LCA4NCwgNSwgMjU0LCA4MywgODQsIDUsIDIxMywgCisgICAgMTQ3LCA4NCwgMSwgMjE5LCAyNTMsIDYxLCA4NCwgMSwgNjEsIDg0LCAxLCAyNTUsIDgyLCA4NCwgMSwgNzQsIDg0LCAxLCAKKyAgICAyMzYsIDQwLCA4NCwgMSwgNjksIDg0LCAxLCAyMTQsIDExOCwgODQsIDEsIDE0OSwgMTUzLCA4NCwgMSwgMTQ5LCAxNTYsIAorICAgIDg0LCAxLCAyNTEsIDEwLCA3NiwgODQsIDEsIDIxOSwgMjUzLCA3NiwgODQsIDEsIDc2LCA4NCwgMSwgMjU0LCAyMTAsIDg0LCAKKyAgICAxLCAyNTEsIDEwLCA3OCwgODQsIDEsIDIxOSwgMjUzLCA3OCwgODQsIDEsIDc4LCA4NCwgMSwgMjUzLCAyMDAsIDg0LCAxLCAKKyAgICAxNzYsIDg0LCAxLCAyMzQsIDEzOCwgODQsIDEsIDI0MywgMTQyLCA4NCwgMSwgMjQzLCAwLCA4NCwgMSwgMjI5LCA4MiwgODQsIAorICAgIDEsIDI1MSwgNDEsIDg0LCAxLCAyNTAsIDE2NSwgODQsIDEsIDIzNSwgMTQ3LCA4NCwgMSwgMjM1LCAxMjAsIDg0LCAxLCAKKyAgICAyMjcsIDE2OSwgODQsIDEsIDIxNSwgMTU3LCA4NCwgMSwgMjE1LCAxNDUsIDg0LCAxLCAyNDgsIDE0MywgODQsIDEsIDI0OCwgCisgICAgMTI3LCA4NCwgMSwgMjI4LCAxMTUsIDg0LCAxLCAyMTcsIDEwNiwgODQsIDEsIDIxNiwgMjA5LCA4NCwgMSwgMjQ4LCAyMjksIAorICAgIDg0LCAxLCAyNDgsIDMzLCA4NCwgMSwgMTk4LCA4NCwgMSwgMjI4LCA5NywgODQsIDEsIDE5MSwgODQsIDEsIDIyNSwgMTUwLCAKKyAgICA4NCwgMSwgMjUyLCAxOTksIDg0LCAxLCAyNTIsIDI2LCA4NCwgMSwgMTg2LCA4NCwgMSwgMTkyLCA4NCwgMSwgMjA1LCA4NCwgCisgICAgMSwgMjIyLCAxODEsIDg0LCAxLCAyMzMsIDE0MSwgODQsIDEsIDIzMiwgMTkwLCA4NCwgMSwgMjMyLCAxODEsIDg0LCAxLCAKKyAgICAyMTQsIDI3LCA4NCwgMSwgMjIwLCAxMDQsIDg0LCAxLCAyMTgsIDIyNSwgODQsIDEsIDIwNiwgODQsIDEsIDE2MiwgODQsIAorICAgIDI1LCA1LCAyMjYsIDIzOCwgODQsIDI1LCA1LCAyMjYsIDE4NSwgODQsIDUsIDIyNywgMjA5LCA4NCwgNSwgMjUzLCAxODMsIAorICAgIDg0LCAyNSwgNSwgMjU1LCA4MiwgODQsIDI1LCA1LCA3NCwgODQsIDI1LCA1LCAyMzYsIDQwLCA4NCwgMjUsIDUsIDY5LCA4NCwgCisgICAgMjUsIDUsIDIxNCwgMTE4LCA4NCwgMjUsIDUsIDE0OSwgMTUzLCA4NCwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDg0LCAyNSwgCisgICAgNSwgMjUxLCAxMCwgNzYsIDg0LCAyNSwgNSwgMjE5LCAyNTMsIDc2LCA4NCwgMjUsIDUsIDc2LCA4NCwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCA4NCwgMjUsIDUsIDI1MSwgMTAsIDc4LCA4NCwgMjUsIDUsIDIxOSwgMjUzLCA3OCwgODQsIDI1LCA1LCA3OCwgODQsIAorICAgIDI1LCA1LCAyNTMsIDIwMCwgODQsIDUsIDIxMywgMTUyLCA4NCwgMjUsIDUsIDIyNCwgMTg4LCA3NiwgODQsIDI1LCA1LCAKKyAgICAyNTMsIDE3OSwgODQsIDIyNiwgMjA4LCA4NCwgMjE4LCAxMTMsIDUsIDIxNCwgMjE2LCA4NCwgMjE4LCAxMTMsIDUsIDI1NCwgCisgICAgODUsIDg0LCAyNDIsIDE0NCwgMjU1LCAyMywgODQsIDI1NSwgMTIsIDI1NSwgMjMsIDg0LCAyNSwgNSwgMjUxLCAxMCwgMjAwLCAKKyAgICA3NiwgODQsIDI1LCA1LCAyMTQsIDIxNCwgODQsIDI1LCA1LCAyMTQsIDExNywgODQsIDEsIDIyNCwgOTEsIDg0LCAxLCAyMzQsIAorICAgIDEyMSwgODQsIDEsIDI0MiwgMjMzLCA4NCwgMSwgMjEwLCAxMTYsIDg0LCAxLCAyNDgsIDEzMiwgODQsIDEsIDIyMywgNDIsIAorICAgIDg0LCAxLCAyNDQsIDIwNCwgODQsIDEsIDIxMCwgMTY4LCA4NCwgMSwgMTQ5LCAyMjIsIDE4MiwgODQsIDEsIDE0OSwgMjMyLCAKKyAgICAxOTEsIDg0LCAyNSwgNSwgMTQ5LCAxNTYsIDg0LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgODQsIDI0OCwgMTg2LCA4NCwgNTIsIAorICAgIDI0OCwgMTg2LCA4NCwgMjEsIDIxMCwgODYsIDg0LCAyMSwgMTExLCA4NCwgMjEsIDEwNSwgODQsIDIxLCAxNTgsIDg0LCAyMSwgCisgICAgMTYxLCA4NCwgMjEsIDE5MCwgODQsIDIxLCAxOTUsIDg0LCAyMSwgMTk5LCA4NCwgMjEsIDE5NiwgODQsIDIxLCAyMDEsIDg0LCAKKyAgICAyNTUsIDMwLCA1MCwgODQsIDUsIDEyNSwgMjE5LCAxOSwgMjQ3LCAxMjgsIDg0LCAxLCAyNTEsIDEwLCA2MSwgODQsIDEsIAorICAgIDIyNiwgMjM4LCA4NCwgMSwgMjI2LCAxODUsIDg0LCAxLCAyNTMsIDE3OSwgODQsIDEsIDIxNCwgMjE0LCA4NCwgMSwgMjE0LCAKKyAgICAxMTcsIDg0LCAxLCAyMTAsIDgyLCA4NCwgMSwgMTE0LCAxOTIsIDg0LCAxLCAyNDMsIDM2LCA4NCwgMSwgMjM1LCAxMDIsIAorICAgIDg0LCAxLCAyNDIsIDE4NywgMjE4LCAxMzEsIDg0LCAxLCAyNDgsIDEzMywgODQsIDEsIDI1MiwgMTE5LCAxNDYsIDUsIDI1MSwgCisgICAgNywgMTQ2LCA1LCAyNTQsIDgzLCAxNDYsIDUsIDIxMywgMTQ3LCAxNDYsIDEsIDYxLCAxNDYsIDEsIDI1NSwgODIsIDE0NiwgCisgICAgMSwgNzQsIDE0NiwgMSwgMjM2LCA0MCwgMTQ2LCAxLCA2OSwgMTQ2LCAxLCAyMTQsIDExOCwgMTQ2LCAxLCAxNDksIDE1MywgCisgICAgMTQ2LCAxLCAxNDksIDE1NiwgMTQ2LCAxLCA3NiwgMTQ2LCAxLCAyNTQsIDIxMCwgMTQ2LCAxLCA3OCwgMTQ2LCAxLCAyNTMsIAorICAgIDIwMCwgMTQ2LCAxLCAxNzYsIDE0NiwgMSwgMjM0LCAxMzgsIDE0NiwgMSwgMjQzLCAxNDIsIDE0NiwgMSwgMjQzLCAwLCAKKyAgICAxNDYsIDEsIDIyOSwgODIsIDE0NiwgMSwgMjUxLCA0MSwgMTQ2LCAxLCAyNTAsIDE2NSwgMTQ2LCAxLCAyMzUsIDE0NywgCisgICAgMTQ2LCAxLCAyMzUsIDEyMCwgMTQ2LCAxLCAyMjcsIDE2OSwgMTQ2LCAxLCAyMTUsIDE1NywgMTQ2LCAxLCAyMTUsIDE0NSwgCisgICAgMTQ2LCAxLCAyNDgsIDE0MywgMTQ2LCAxLCAyNDgsIDEyNywgMTQ2LCAxLCAyMjgsIDExNSwgMTQ2LCAxLCAyMTcsIDEwNiwgCisgICAgMTQ2LCAxLCAyMTYsIDIwOSwgMTQ2LCAxLCAyNDgsIDIyOSwgMTQ2LCAxLCAyNDgsIDMzLCAxNDYsIDEsIDE5OCwgMTQ2LCAxLCAKKyAgICAxOTEsIDE0NiwgMSwgMjI1LCAxNTAsIDE0NiwgMSwgMjUyLCAxOTksIDE0NiwgMSwgMjUyLCAyNiwgMTQ2LCAxLCAxODYsIAorICAgIDE0NiwgMSwgMTkyLCAxNDYsIDEsIDIwNSwgMTQ2LCAxLCAyMzMsIDE0MSwgMTQ2LCAxLCAyMjAsIDEwNCwgMTQ2LCAxLCAKKyAgICAyMTgsIDIyNSwgMTQ2LCAxLCAyMDYsIDE0NiwgMSwgMTYyLCAxNDYsIDUsIDIyNywgMjA5LCAxNDYsIDUsIDI1MywgMTgzLCAKKyAgICAxNDYsIDI1LCA1LCAyNTUsIDgyLCAxNDYsIDI1LCA1LCA3NCwgMTQ2LCAyNSwgNSwgMjM2LCA0MCwgMTQ2LCAyNSwgNSwgNjksIAorICAgIDE0NiwgMjUsIDUsIDIxNCwgMTE4LCAxNDYsIDI1LCA1LCAxNDksIDE1MywgMTQ2LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTQ2LCAyNSwgNSwgNzYsIDE0NiwgMjUsIDUsIDI1NCwgMjEwLCAxNDYsIDI1LCA1LCA3OCwgMTQ2LCAyNSwgNSwgMjUzLCAKKyAgICAyMDAsIDE0NiwgNSwgMjEzLCAxNTIsIDE0NiwgMSwgMjM0LCAxMzAsIDIxNywgMTA2LCAxNDYsIDI1MywgMjAxLCAyMzMsIAorICAgIDI5LCA3OSwgMTQ2LCAxLCAyMjIsIDE4MSwgMTQ2LCAxLCAyMjMsIDQyLCAxNDYsIDEsIDIxMCwgMTY4LCAxNDYsIDEsIDE0OSwgCisgICAgMjIyLCAxODIsIDE0NiwgMSwgMTQ5LCAyMzIsIDE5MSwgMTQ2LCAyNSwgNSwgMTQ5LCAxNTYsIDE0NiwgMjUsIDUsIDE0OSwgCisgICAgMjMyLCAxOTEsIDE0NiwgMjEsIDIxMCwgODYsIDE0NiwgMjEsIDExMSwgMTQ2LCAyMSwgMTA1LCAxNDYsIDIxLCAxNTgsIAorICAgIDE0NiwgMjEsIDE2MSwgMTQ2LCAyMSwgMTkwLCAxNDYsIDIxLCAxOTUsIDE0NiwgMjEsIDE5OSwgMTQ2LCAyMSwgMTk2LCAKKyAgICAxNDYsIDIxLCAyMDEsIDE0NiwgMSwgMjIzLCAxOTEsIDIsIDIzMCwgMjI5LCAyNDgsIDYsIDE0NiwgMSwgMjIzLCAxOTEsIDIsIAorICAgIDIzMiwgMTE0LCAyNDgsIDYsIDE0NiwgMjIyLCAxMjAsIDc5LCAxNDYsIDIyMiwgMTIwLCA1MCwgMTQ2LCAyNDksIDEwNiwgCisgICAgMjI3LCAyMDEsIDExMSwgMTQ2LCAyNDksIDEwNiwgMjI3LCAyMDEsIDEwNSwgMTQ2LCAyNDksIDEwNiwgMjI3LCAyMDEsIAorICAgIDE1OCwgMTQ2LCAyNDksIDEwNiwgMjI3LCAyMDEsIDE2MSwgMTQ2LCAyNDksIDEwNiwgMjI3LCAyMDEsIDEyMywgMjMzLCAyMiwgCisgICAgMjE2LCAyMDIsIDIxNiwgMTk3LCAyNDgsIDU2LCAxNDYsIDI0OSwgMTA2LCAyNDgsIDU3LCAyMTksIDEyMSwgMTQ2LCAyMzUsIAorICAgIDE2NywgMTQ2LCAyNDMsIDExMCwgNzksIDE4NSwgNSwgMjU1LCA3LCAyNTEsIDI1MSwgMTg1LCA1LCAyNTEsIDI1MSwgMTg1LCAKKyAgICA1LCAyMTMsIDE0NywgMTg1LCAxLCA2MSwgMTg1LCAxLCAyNTUsIDgyLCAxODUsIDEsIDc0LCAxODUsIDEsIDIzNiwgNDAsIAorICAgIDE4NSwgMSwgNjksIDE4NSwgMSwgMjE0LCAxMTgsIDE4NSwgMSwgMjQ1LCAyMTcsIDE4NSwgMSwgMjU0LCAyMTAsIDE4NSwgMSwgCisgICAgMjI2LCAxODcsIDE4NSwgMSwgMjUzLCAyMDAsIDE4NSwgMSwgMTc2LCAxODUsIDEsIDIzNCwgMTM4LCAxODUsIDEsIDI0MywgCisgICAgMTQyLCAxODUsIDEsIDI0MywgMCwgMTg1LCAxLCAyMjksIDgyLCAxODUsIDEsIDI1MSwgNDEsIDE4NSwgMSwgMjUwLCAxNjUsIAorICAgIDE4NSwgMSwgMjM1LCAxNDcsIDE4NSwgMSwgMjM1LCAxMjAsIDE4NSwgMSwgMjI3LCAxNjksIDE4NSwgMSwgMjE1LCAxNTcsIAorICAgIDE4NSwgMSwgMjE1LCAxNDUsIDE4NSwgMSwgMjQ4LCAxNDMsIDE4NSwgMSwgMjQ4LCAxMjcsIDE4NSwgMSwgMjI4LCAxMTUsIAorICAgIDE4NSwgMSwgMjE3LCAxMDYsIDE4NSwgMSwgMjE2LCAyMDksIDE4NSwgMSwgMjQ4LCAyMjksIDE4NSwgMSwgMjQ4LCAzMywgCisgICAgMTg1LCAxLCAxOTgsIDE4NSwgMSwgMTkxLCAxODUsIDEsIDIyNSwgMTUwLCAxODUsIDEsIDI1MiwgMTk5LCAxODUsIDEsIAorICAgIDI1MiwgMjYsIDE4NSwgMSwgMTg2LCAxODUsIDEsIDE5MiwgMTg1LCAxLCAyMDUsIDE4NSwgMSwgMjMzLCAxNDEsIDE4NSwgMSwgCisgICAgMjMyLCAxOTAsIDE4NSwgMSwgMjE0LCAyNywgMTg1LCAxLCAyMjAsIDEwNCwgMTg1LCAxLCAyMDYsIDE4NSwgMSwgMTYyLCAKKyAgICAxODUsIDUsIDIyNywgMjA5LCAxODUsIDI1LCA1LCAyNTUsIDgyLCAxODUsIDI1LCA1LCA3NCwgMTg1LCAyNSwgNSwgMjM2LCAKKyAgICA0MCwgMTg1LCAyNSwgNSwgNjksIDE4NSwgMjUsIDUsIDIxNCwgMTE4LCAxODUsIDI1LCA1LCAyNDUsIDIxNywgMTg1LCAyNSwgCisgICAgNSwgMjU0LCAyMTAsIDE4NSwgMjUsIDUsIDIyNiwgMTg3LCAxODUsIDI1LCA1LCAyNTMsIDIwMCwgMTg1LCA1LCAyMTMsIAorICAgIDE1MiwgMTg1LCA1LCAyMTQsIDIxOCwgMTg1LCAxLCAyMzQsIDEyMSwgMTg1LCAxLCAyNDIsIDIzMywgMTg1LCAxLCAyMTAsIAorICAgIDExNiwgMTg1LCAxLCAyMjIsIDE4MSwgMTg1LCAxLCAyNDQsIDIwNCwgMTg1LCAyMSwgMjEwLCA4NiwgMTg1LCAyMSwgMTExLCAKKyAgICAxODUsIDIxLCAxMDUsIDE4NSwgMjEsIDE1OCwgMTg1LCAyMSwgMTYxLCAxODUsIDIxLCAxOTAsIDE4NSwgMjEsIDE5NSwgCisgICAgMTg1LCAyMSwgMTk5LCAxODUsIDIxLCAxOTYsIDE4NSwgMjEsIDIwMSwgMTg1LCAyMTYsIDc1LCAxODUsIDI1NSwgNiwgMTg1LCAKKyAgICAyMzUsIDE4NSwgMTg1LCAyMTQsIDE0NiwgMTg1LCAyNDUsIDE4OSwgMjI2LCAxOTIsIDE4NSwgNSwgMjExLCA3OCwgMTcxLCAKKyAgICA1LCAyNTEsIDcsIDE3MSwgNSwgMjU0LCA4MywgMTcxLCA1LCAyMTMsIDE0NywgMTcxLCAxLCA2MSwgMTcxLCAxLCAyNTUsIAorICAgIDgyLCAxNzEsIDEsIDc0LCAxNzEsIDEsIDIzNiwgNDAsIDE3MSwgMSwgNjksIDE3MSwgMSwgMjE0LCAxMTgsIDE3MSwgMSwgCisgICAgMTQ5LCAxNTMsIDE3MSwgMSwgMTQ5LCAxNTYsIDE3MSwgMjUsIDI1MSwgMTAsIDc2LCAxNzEsIDEsIDc2LCAxNzEsIDEsIAorICAgIDI1NCwgMjEwLCAxNzEsIDI1LCAyNTEsIDEwLCA3OCwgMTcxLCAxLCA3OCwgMTcxLCAxLCAyNTMsIDIwMCwgMTcxLCAxLCAKKyAgICAxNzYsIDE3MSwgMSwgMjM0LCAxMzgsIDE3MSwgMSwgMjQzLCAxNDIsIDE3MSwgMSwgMjQzLCAwLCAxNzEsIDEsIDIyOSwgODIsIAorICAgIDE3MSwgMSwgMjUxLCA0MSwgMTcxLCAxLCAyNTAsIDE2NSwgMTcxLCAxLCAyMzUsIDE0NywgMTcxLCAxLCAyMzUsIDEyMCwgCisgICAgMTcxLCAxLCAyMjcsIDE2OSwgMTcxLCAxLCAyMTUsIDE1NywgMTcxLCAxLCAyMTUsIDE0NSwgMTcxLCAxLCAyNDgsIDE0MywgCisgICAgMTcxLCAxLCAyNDgsIDEyNywgMTcxLCAxLCAyMjgsIDExNSwgMTcxLCAxLCAyMTcsIDEwNiwgMTcxLCAxLCAyMTYsIDIwOSwgCisgICAgMTcxLCAxLCAyNDgsIDIyOSwgMTcxLCAxLCAyNDgsIDMzLCAxNzEsIDEsIDE5OCwgMTcxLCAxLCAxOTEsIDE3MSwgMSwgMjI1LCAKKyAgICAxNTAsIDE3MSwgMSwgMjUyLCAxOTksIDE3MSwgMSwgMjUyLCAyNiwgMTcxLCAxLCAxODYsIDE3MSwgMSwgMTkyLCAxNzEsIDEsIAorICAgIDIwNSwgMTcxLCAxLCAyMzMsIDE0MSwgMTcxLCAxLCAyMzIsIDE5MCwgMTcxLCAxLCAyMTQsIDI3LCAxNzEsIDEsIDIyMCwgCisgICAgMTA0LCAxNzEsIDEsIDIxOCwgMjI1LCAxNzEsIDEsIDIwNiwgMTcxLCAxLCAxNjIsIDE3MSwgNSwgMjI3LCAyMDksIDE3MSwgCisgICAgNSwgMjUzLCAxODMsIDE3MSwgMjUsIDUsIDI1NSwgODIsIDE3MSwgMjUsIDUsIDc0LCAxNzEsIDI1LCA1LCAyMzYsIDQwLCAKKyAgICAxNzEsIDI1LCA1LCA2OSwgMTcxLCAyNSwgNSwgMjE0LCAxMTgsIDE3MSwgMjUsIDUsIDE0OSwgMTUzLCAxNzEsIDI1LCA1LCAKKyAgICAxNDksIDIyMiwgMTgyLCAxNzEsIDI1LCA1LCAyNTEsIDEwLCA3NiwgMTcxLCAyNSwgNSwgNzYsIDE3MSwgMjUsIDUsIDI1NCwgCisgICAgMjEwLCAxNzEsIDI1LCA1LCAyNTEsIDEwLCA3OCwgMTcxLCAyNSwgNSwgNzgsIDE3MSwgMjUsIDUsIDI1MywgMjAwLCAxNzEsIAorICAgIDUsIDIxMywgMTUyLCAxNzEsIDIyNiwgMjA4LCAxNzEsIDEsIDE0OSwgMjIyLCAxODIsIDE3MSwgMSwgMTQ5LCAyMzIsIDE5MSwgCisgICAgMTcxLCAyNSwgNSwgMTQ5LCAxNTYsIDE3MSwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE3MSwgMjEsIDIxMCwgODYsIDE3MSwgCisgICAgMjEsIDExMSwgMTcxLCAyMSwgMTA1LCAxNzEsIDIxLCAxNTgsIDE3MSwgMjEsIDE2MSwgMTcxLCAyMSwgMTkwLCAxNzEsIDIxLCAKKyAgICAxOTUsIDE3MSwgMjEsIDE5OSwgMTcxLCAyMSwgMTk2LCAxNzEsIDIxLCAyMDEsIDE3MSwgMjU1LCAzMCwgNTAsIDE3MSwgCisgICAgMjIyLCAxMjAsIDUwLCAxNTcsIDUsIDI1MSwgNywgMTU3LCA1LCAyNTQsIDgzLCAxNTcsIDUsIDIxMywgMTQ3LCAxNTcsIDEsIAorICAgIDYxLCAxNTcsIDEsIDI1NSwgODIsIDE1NywgMSwgNzQsIDE1NywgMSwgMjM2LCA0MCwgMTU3LCAxLCA2OSwgMTU3LCAxLCAKKyAgICAyMTQsIDExOCwgMTU3LCAxLCAxNDksIDE1MywgMTU3LCAxLCAxNDksIDE1NiwgMTU3LCAxLCA3NiwgMTU3LCAxLCAyNTQsIAorICAgIDIxMCwgMTU3LCAxLCA3OCwgMTU3LCAxLCAyNTMsIDIwMCwgMTU3LCAxLCAxNzYsIDE1NywgMSwgMjM0LCAxMzgsIDE1NywgMSwgCisgICAgMjQzLCAxNDIsIDE1NywgMSwgMjQzLCAwLCAxNTcsIDEsIDIyOSwgODIsIDE1NywgMSwgMjUxLCA0MSwgMTU3LCAxLCAyNTAsIAorICAgIDE2NSwgMTU3LCAxLCAyMzUsIDE0NywgMTU3LCAxLCAyMzUsIDEyMCwgMTU3LCAxLCAyMjcsIDE2OSwgMTU3LCAxLCAyMTUsIAorICAgIDE1NywgMTU3LCAxLCAyMTUsIDE0NSwgMTU3LCAxLCAyNDgsIDE0MywgMTU3LCAxLCAyNDgsIDEyNywgMTU3LCAxLCAyMjgsIAorICAgIDExNSwgMTU3LCAxLCAyMTcsIDEwNiwgMTU3LCAxLCAyMTYsIDIwOSwgMTU3LCAxLCAyNDgsIDIyOSwgMTU3LCAxLCAyNDgsIAorICAgIDMzLCAxNTcsIDEsIDE5OCwgMTU3LCAxLCAxOTEsIDE1NywgMSwgMjI1LCAxNTAsIDE1NywgMSwgMjUyLCAxOTksIDE1NywgMSwgCisgICAgMjUyLCAyNiwgMTU3LCAxLCAxODYsIDE1NywgMSwgMTkyLCAxNTcsIDEsIDIwNSwgMTU3LCAxLCAyMzMsIDE0MSwgMTU3LCAxLCAKKyAgICAyMzIsIDE5MCwgMTU3LCAxLCAyMTQsIDI3LCAxNTcsIDEsIDIyMCwgMTA0LCAxNTcsIDEsIDIxOCwgMjI1LCAxNTcsIDEsIAorICAgIDIwNiwgMTU3LCAxLCAxNjIsIDE1NywgNSwgMjI3LCAyMDksIDE1NywgNSwgMjUzLCAxODMsIDE1NywgMjUsIDUsIDI1NSwgCisgICAgODIsIDE1NywgMjUsIDUsIDc0LCAxNTcsIDI1LCA1LCAyMzYsIDQwLCAxNTcsIDI1LCA1LCA2OSwgMTU3LCAyNSwgNSwgMjE0LCAKKyAgICAxMTgsIDE1NywgMjUsIDUsIDE0OSwgMTUzLCAxNTcsIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAxNTcsIDI1LCA1LCA3NiwgCisgICAgMTU3LCAyNSwgNSwgMjU0LCAyMTAsIDE1NywgMjUsIDUsIDc4LCAxNTcsIDI1LCA1LCAyNTMsIDIwMCwgMTU3LCA1LCAyMTMsIAorICAgIDE1MiwgMTU3LCAyNTQsIDIxMSwgMjMzLCAyOSwgNzksIDE1NywgMjUzLCAyMDEsIDIzMywgMjksIDc5LCAxNTcsIDEsIDIyMiwgCisgICAgMTgxLCAxNTcsIDEsIDIyMywgNDIsIDE1NywgMSwgMjEwLCAxNjgsIDE1NywgMSwgMTQ5LCAyMjIsIDE4MiwgMTU3LCAxLCAKKyAgICAxNDksIDIzMiwgMTkxLCAxNTcsIDI1LCA1LCAxNDksIDE1NiwgMTU3LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTU3LCAyMSwgCisgICAgMjEwLCA4NiwgMTU3LCAyMSwgMTExLCAxNTcsIDIxLCAxMDUsIDE1NywgMjEsIDE1OCwgMTU3LCAyMSwgMTYxLCAxNTcsIDIxLCAKKyAgICAxOTAsIDE1NywgMjEsIDE5NSwgMTU3LCAyMSwgMTk5LCAxNTcsIDIxLCAxOTYsIDE1NywgMjEsIDIwMSwgMTU3LCAyMzUsIAorICAgIDE2NywgMTU3LCAxLCAyMTIsIDY1LCAxNTcsIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMTU3LCAyNDQsIDEwLCAxMjMsIDI0MiwgCisgICAgMzQsIDE1NywgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAxNTcsIDI0NCwgMTAsIDEyMywgMjE5LCAxMTksIDE1NywgMjQ0LCAKKyAgICAxMCwgMTIzLCAyNDUsIDE5NiwgMTU3LCAyNDQsIDEwLCAxMzQsIDIxOSwgMTE4LCAzNiwgNSwgMjU0LCA4MywgMzYsIDUsIAorICAgIDIxMywgMTQ3LCAzNiwgMSwgNjEsIDM2LCAxLCAyNTUsIDgyLCAzNiwgMSwgNzQsIDM2LCAxLCAyMzYsIDQwLCAzNiwgMSwgCisgICAgNjksIDM2LCAxLCAyMTQsIDExOCwgMzYsIDEsIDc2LCAzNiwgMSwgMjQ1LCAyMTcsIDM2LCAxLCAyNTQsIDIxMCwgMzYsIDEsIAorICAgIDc4LCAzNiwgMSwgMjI2LCAxODcsIDM2LCAxLCAyNTMsIDIwMCwgMzYsIDEsIDE3NiwgMzYsIDEsIDIyOSwgODIsIDM2LCAxLCAKKyAgICAyNTEsIDQxLCAzNiwgMSwgMjM1LCAxNDcsIDM2LCAxLCAyMjcsIDE2OSwgMzYsIDEsIDIxNSwgMTU3LCAzNiwgMSwgMjI4LCAKKyAgICAxMTUsIDM2LCAxLCAyMTcsIDEwNiwgMzYsIDEsIDE5OCwgMzYsIDEsIDIyOCwgOTcsIDM2LCAxLCAxOTEsIDM2LCAxLCAxODYsIAorICAgIDM2LCAxLCAxOTIsIDM2LCAxLCAyMDUsIDM2LCAxLCAyMjIsIDE4MSwgMzYsIDEsIDIzMywgMTQxLCAzNiwgMSwgMjMyLCAKKyAgICAxOTAsIDM2LCAxLCAyMzIsIDE4MSwgMzYsIDEsIDIxNCwgMjcsIDM2LCAxLCAyMjAsIDEwNCwgMzYsIDEsIDIxOCwgMjI1LCAKKyAgICAzNiwgMSwgMjA2LCAzNiwgMSwgMTYyLCAzNiwgMjUsIDUsIDI1NSwgODIsIDM2LCAyNSwgNSwgNzQsIDM2LCAyNSwgNSwgCisgICAgMjM2LCA0MCwgMzYsIDI1LCA1LCA2OSwgMzYsIDI1LCA1LCAyMTQsIDExOCwgMzYsIDI1LCA1LCA3NiwgMzYsIDI1LCA1LCAKKyAgICAyNDUsIDIxNywgMzYsIDI1LCA1LCAyNTQsIDIxMCwgMzYsIDI1LCA1LCA3OCwgMzYsIDI1LCA1LCAyMjYsIDE4NywgMzYsIAorICAgIDI1LCA1LCAyNTMsIDIwMCwgMzYsIDUsIDIxMywgMTUyLCAzNiwgMjI2LCAyMDgsIDM2LCAyNTMsIDIwMSwgMjMzLCAyOSwgCisgICAgNzksIDM2LCAyMSwgMjEwLCA4NiwgMzYsIDIxLCAxMTEsIDM2LCAyMSwgMTA1LCAzNiwgMjEsIDE1OCwgMzYsIDIxLCAxNjEsIAorICAgIDM2LCAyMSwgMTkwLCAzNiwgMjEsIDE5NSwgMzYsIDIxLCAxOTksIDM2LCAyMSwgMTk2LCAzNiwgMjEsIDIwMSwgMzYsIDU0LCAKKyAgICAyMTYsIDI0OCwgMzYsIDU0LCAxMjMsIDI0MCwgMjE3LCAzNiwgNTQsIDEyMywgMjE2LCAxNDgsIDM2LCAyNDgsIDE1NCwgNTAsIAorICAgIDM2LCAyMzAsIDE0MCwgNTAsIDM2LCAyMTEsIDQ1LCA1MCwgMzYsIDI0OCwgOTUsIDUwLCAzNiwgMjQ5LCAxNDcsIDUwLCAzNiwgCisgICAgMjUzLCAyNDYsIDcyLCA1MCwgMzYsIDIyMiwgMTIwLCA1MCwgMzYsIDU0LCA1MCwgMTQ4LCA1LCAyNTEsIDcsIDE0OCwgNSwgCisgICAgMjU0LCA4MywgMTQ4LCA1LCAyMTMsIDE0NywgMTQ4LCAxLCA2MSwgMTQ4LCAxLCAyNTUsIDgyLCAxNDgsIDEsIDc0LCAxNDgsIAorICAgIDEsIDIzNiwgNDAsIDE0OCwgMSwgNjksIDE0OCwgMSwgMjE0LCAxMTgsIDE0OCwgMSwgMTQ5LCAxNTMsIDE0OCwgMSwgMTQ5LCAKKyAgICAxNTYsIDE0OCwgMSwgNzYsIDE0OCwgMSwgMjQ1LCAyMTcsIDE0OCwgMSwgMjU0LCAyMTAsIDE0OCwgMSwgNzgsIDE0OCwgMSwgCisgICAgMjI2LCAxODcsIDE0OCwgMSwgMjUzLCAyMDAsIDE0OCwgMSwgMTc2LCAxNDgsIDEsIDIzNCwgMTM4LCAxNDgsIDEsIDI0MywgCisgICAgMTQyLCAxNDgsIDEsIDI0MywgMCwgMTQ4LCAxLCAyMjksIDgyLCAxNDgsIDEsIDI1MSwgNDEsIDE0OCwgMSwgMjUwLCAxNjUsIAorICAgIDE0OCwgMSwgMjM1LCAxNDcsIDE0OCwgMSwgMjM1LCAxMjAsIDE0OCwgMSwgMjI3LCAxNjksIDE0OCwgMSwgMjE1LCAxNTcsIAorICAgIDE0OCwgMSwgMjE1LCAxNDUsIDE0OCwgMSwgMjQ4LCAxNDMsIDE0OCwgMSwgMjQ4LCAxMjcsIDE0OCwgMSwgMjI4LCAxMTUsIAorICAgIDE0OCwgMSwgMjE3LCAxMDYsIDE0OCwgMSwgMjE2LCAyMDksIDE0OCwgMSwgMjQ4LCAyMjksIDE0OCwgMSwgMjQ4LCAzMywgCisgICAgMTQ4LCAxLCAxOTgsIDE0OCwgMSwgMTkxLCAxNDgsIDEsIDIyNSwgMTUwLCAxNDgsIDEsIDI1MiwgMTk5LCAxNDgsIDEsIAorICAgIDI1MiwgMjYsIDE0OCwgMSwgMTg2LCAxNDgsIDEsIDE5MiwgMTQ4LCAxLCAyMDUsIDE0OCwgMSwgMjIyLCAxODEsIDE0OCwgMSwgCisgICAgMjMzLCAxNDEsIDE0OCwgMSwgMjMyLCAxOTAsIDE0OCwgMSwgMjE0LCAyNywgMTQ4LCAxLCAyMjAsIDEwNCwgMTQ4LCAxLCAKKyAgICAyMTgsIDIyNSwgMTQ4LCAxLCAyMDYsIDE0OCwgMSwgMTYyLCAxNDgsIDUsIDI1MywgMTgzLCAxNDgsIDI1LCA1LCAyNTUsIAorICAgIDgyLCAxNDgsIDI1LCA1LCA3NCwgMTQ4LCAyNSwgNSwgMjM2LCA0MCwgMTQ4LCAyNSwgNSwgNjksIDE0OCwgMjUsIDUsIDIxNCwgCisgICAgMTE4LCAxNDgsIDI1LCA1LCAxNDksIDE1MywgMTQ4LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgMTQ4LCAyNSwgNSwgNzYsIAorICAgIDE0OCwgMjUsIDUsIDI0NSwgMjE3LCAxNDgsIDI1LCA1LCAyNTQsIDIxMCwgMTQ4LCAyNSwgNSwgNzgsIDE0OCwgMjUsIDUsIAorICAgIDIyNiwgMTg3LCAxNDgsIDI1LCA1LCAyNTMsIDIwMCwgMTQ4LCA1LCAyMTMsIDE1MiwgMTQ4LCAyMzMsIDI5LCA3OSwgMTQ4LCAKKyAgICAyNTQsIDIxMSwgMjMzLCAyOSwgNzksIDE0OCwgMSwgMjE1LCAxODQsIDE0OCwgMSwgMjQ2LCA0NiwgMTQ4LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCAxNDgsIDEsIDE0OSwgMjMyLCAxOTEsIDE0OCwgMjUsIDUsIDE0OSwgMTU2LCAxNDgsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxNDgsIDIxLCAyMTAsIDg2LCAxNDgsIDIxLCAxMTEsIDE0OCwgMjEsIDEwNSwgMTQ4LCAyMSwgMTU4LCAKKyAgICAxNDgsIDIxLCAxNjEsIDE0OCwgMjEsIDE5MCwgMTQ4LCAyMSwgMTk1LCAxNDgsIDIxLCAxOTksIDE0OCwgMjEsIDE5NiwgCisgICAgMTQ4LCAyMSwgMjAxLCAxNDgsIDI0NCwgMTAsIDIxLCAyMTAsIDg3LCAzMSwgMjI2LCAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAKKyAgICAxNDgsIDI0NCwgMTAsIDIxLCAxMjMsIDMxLCAyMjYsIDI0MSwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgMjEsIAorICAgIDExMywgMzEsIDIyNiwgMjQxLCAyMjQsIDIyNiwgNjQsIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgMTM0LCAzMSwgMjI2LCAKKyAgICAyNDEsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDI0NCwgMTAsIDIxLCAxMjMsIDMxLCAyNDUsIDUwLCAyMjQsIDIyNiwgNjQsIAorICAgIDE2MSwgMTQ4LCAyNDQsIDEwLCAyMSwgMTEzLCAzMSwgMjQ1LCA1MCwgMjI0LCAyMjYsIDY0LCAxNjEsIDE0OCwgMjQ0LCAxMCwgCisgICAgMjEsIDEzNCwgMzEsIDI0NSwgNTAsIDIyNCwgMjI2LCA2NCwgMTYxLCAxNDgsIDUsIDIxNSwgODQsIDE2NSwgNSwgMjU0LCAKKyAgICA4MywgMTY1LCA1LCAyMTMsIDE0NywgMTY1LCAxLCA2MSwgMTY1LCAxLCAyNTUsIDgyLCAxNjUsIDEsIDc0LCAxNjUsIDEsIAorICAgIDIzNiwgNDAsIDE2NSwgMSwgNjksIDE2NSwgMSwgMjE0LCAxMTgsIDE2NSwgMSwgMTQ5LCAxNTMsIDE2NSwgMSwgMTQ5LCAKKyAgICAxNTYsIDE2NSwgMSwgNzYsIDE2NSwgMSwgMjQ1LCAyMTcsIDE2NSwgMSwgMjU0LCAyMTAsIDE2NSwgMSwgNzgsIDE2NSwgMSwgCisgICAgMjI2LCAxODcsIDE2NSwgMSwgMjUzLCAyMDAsIDE2NSwgMSwgMTc2LCAxNjUsIDEsIDIzNCwgMTM4LCAxNjUsIDEsIDI0MywgCisgICAgMTQyLCAxNjUsIDEsIDI0MywgMCwgMTY1LCAxLCAyMjksIDgyLCAxNjUsIDEsIDI1MSwgNDEsIDE2NSwgMSwgMjUwLCAxNjUsIAorICAgIDE2NSwgMSwgMjM1LCAxNDcsIDE2NSwgMSwgMjM1LCAxMjAsIDE2NSwgMSwgMjI3LCAxNjksIDE2NSwgMSwgMjE1LCAxNTcsIAorICAgIDE2NSwgMSwgMjE1LCAxNDUsIDE2NSwgMSwgMjQ4LCAxNDMsIDE2NSwgMSwgMjQ4LCAxMjcsIDE2NSwgMSwgMjI4LCAxMTUsIAorICAgIDE2NSwgMSwgMjE3LCAxMDYsIDE2NSwgMSwgMjE2LCAyMDksIDE2NSwgMSwgMjQ4LCAyMjksIDE2NSwgMSwgMjQ4LCAzMywgCisgICAgMTY1LCAxLCAxOTgsIDE2NSwgMSwgMTkxLCAxNjUsIDEsIDIyNSwgMTUwLCAxNjUsIDEsIDI1MiwgMTk5LCAxNjUsIDEsIAorICAgIDI1MiwgMjYsIDE2NSwgMSwgMTg2LCAxNjUsIDEsIDE5MiwgMTY1LCAxLCAyMDUsIDE2NSwgMSwgMjIyLCAxODEsIDE2NSwgMSwgCisgICAgMjMzLCAxNDEsIDE2NSwgMSwgMjMyLCAxOTAsIDE2NSwgMSwgMjE0LCAyNywgMTY1LCAxLCAyMjAsIDEwNCwgMTY1LCAxLCAKKyAgICAyMTgsIDIyNSwgMTY1LCAxLCAyMDYsIDE2NSwgMSwgMTYyLCAxNjUsIDUsIDIyNywgMjA5LCAxNjUsIDUsIDI1MywgMTgzLCAKKyAgICAxNjUsIDI1LCA1LCAyNTUsIDgyLCAxNjUsIDI1LCA1LCA3NCwgMTY1LCAyNSwgNSwgMjM2LCA0MCwgMTY1LCAyNSwgNSwgNjksIAorICAgIDE2NSwgMjUsIDUsIDIxNCwgMTE4LCAxNjUsIDI1LCA1LCAxNDksIDE1MywgMTY1LCAyNSwgNSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTY1LCAyNSwgNSwgNzYsIDE2NSwgMjUsIDUsIDI0NSwgMjE3LCAxNjUsIDI1LCA1LCAyNTQsIDIxMCwgMTY1LCAyNSwgNSwgCisgICAgNzgsIDE2NSwgMjUsIDUsIDIyNiwgMTg3LCAxNjUsIDI1LCA1LCAyNTMsIDIwMCwgMTY1LCA1LCAyMTMsIDE1MiwgMTY1LCAKKyAgICAyMzMsIDI5LCA3OSwgMTY1LCAyNTQsIDIxMSwgMjMzLCAyOSwgNzksIDE2NSwgMSwgMjQ0LCAyMDQsIDE2NSwgMSwgMTQ5LCAKKyAgICAyMjIsIDE4MiwgMTY1LCAxLCAxNDksIDIzMiwgMTkxLCAxNjUsIDI1LCA1LCAxNDksIDE1NiwgMTY1LCAyNSwgNSwgMTQ5LCAKKyAgICAyMzIsIDE5MSwgMTY1LCAyMSwgMjEwLCA4NiwgMTY1LCAyMSwgMTExLCAxNjUsIDIxLCAxMDUsIDE2NSwgMjEsIDE1OCwgCisgICAgMTY1LCAyMSwgMTYxLCAxNjUsIDIxLCAxOTAsIDE2NSwgMjEsIDE5NSwgMTY1LCAyMSwgMTk5LCAxNjUsIDIxLCAxOTYsIAorICAgIDE2NSwgMjEsIDIwMSwgMTY1LCA1LCAyMzUsIDEwOCwgMTY1LCA1LCAyMTQsIDE2MSwgMTM2LCA1LCAyNTQsIDgzLCAxMzYsIAorICAgIDUsIDIxMywgMTQ3LCAxMzYsIDEsIDYxLCAxMzYsIDEsIDI1NSwgODIsIDEzNiwgMSwgNzQsIDEzNiwgMSwgMjM2LCA0MCwgCisgICAgMTM2LCAxLCA2OSwgMTM2LCAxLCAyMTQsIDExOCwgMTM2LCAxLCAxNDksIDE1MywgMTM2LCAxLCAxNDksIDE1NiwgMTM2LCAxLCAKKyAgICA3NiwgMTM2LCAxLCAyNDUsIDIxNywgMTM2LCAxLCAyNTQsIDIxMCwgMTM2LCAxLCA3OCwgMTM2LCAxLCAyMjYsIDE4NywgCisgICAgMTM2LCAxLCAyNTMsIDIwMCwgMTM2LCAxLCAxNzYsIDEzNiwgMSwgMjM0LCAxMzgsIDEzNiwgMSwgMjQzLCAxNDIsIDEzNiwgCisgICAgMSwgMjQzLCAwLCAxMzYsIDEsIDIyOSwgODIsIDEzNiwgMSwgMjUxLCA0MSwgMTM2LCAxLCAyNTAsIDE2NSwgMTM2LCAxLCAKKyAgICAyMzUsIDE0NywgMTM2LCAxLCAyMzUsIDEyMCwgMTM2LCAxLCAyMjcsIDE2OSwgMTM2LCAxLCAyMTUsIDE1NywgMTM2LCAxLCAKKyAgICAyMTUsIDE0NSwgMTM2LCAxLCAyNDgsIDE0MywgMTM2LCAxLCAyNDgsIDEyNywgMTM2LCAxLCAyMjgsIDExNSwgMTM2LCAxLCAKKyAgICAyMTcsIDEwNiwgMTM2LCAxLCAyMTYsIDIwOSwgMTM2LCAxLCAyNDgsIDIyOSwgMTM2LCAxLCAyNDgsIDMzLCAxMzYsIDEsIAorICAgIDE5OCwgMTM2LCAxLCAyMjgsIDk3LCAxMzYsIDEsIDE5MSwgMTM2LCAxLCAyMjUsIDE1MCwgMTM2LCAxLCAyNTIsIDE5OSwgCisgICAgMTM2LCAxLCAyNTIsIDI2LCAxMzYsIDEsIDE4NiwgMTM2LCAxLCAxOTIsIDEzNiwgMSwgMjA1LCAxMzYsIDEsIDIyMiwgMTgxLCAKKyAgICAxMzYsIDEsIDIzMywgMTQxLCAxMzYsIDEsIDIzMiwgMTkwLCAxMzYsIDEsIDIzMiwgMTgxLCAxMzYsIDEsIDIxNCwgMjcsIAorICAgIDEzNiwgMSwgMjIwLCAxMDQsIDEzNiwgMSwgMjE4LCAyMjUsIDEzNiwgMSwgMjA2LCAxMzYsIDEsIDE2MiwgMTM2LCAxLCAKKyAgICAyMTUsIDEyNiwgMTM2LCA1LCAyNTMsIDE4MywgMTM2LCAyNSwgNSwgMjU1LCA4MiwgMTM2LCAyNSwgNSwgNzQsIDEzNiwgMjUsIAorICAgIDUsIDIzNiwgNDAsIDEzNiwgMjUsIDUsIDY5LCAxMzYsIDI1LCA1LCAyMTQsIDExOCwgMTM2LCAyNSwgNSwgMTQ5LCAxNTMsIAorICAgIDEzNiwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDEzNiwgMjUsIDUsIDc2LCAxMzYsIDI1LCA1LCAyNDUsIDIxNywgMTM2LCAyNSwgCisgICAgNSwgMjU0LCAyMTAsIDEzNiwgMjUsIDUsIDc4LCAxMzYsIDI1LCA1LCAyMjYsIDE4NywgMTM2LCAyNSwgNSwgMjUzLCAyMDAsIAorICAgIDEzNiwgNSwgMjEzLCAxNTIsIDEzNiwgMSwgNTksIDIyMywgNzYsIDEzNiwgMjUzLCAyMDEsIDIzMywgMjksIDc5LCAxMzYsIAorICAgIDEsIDE0OSwgMjIyLCAxODIsIDEzNiwgMSwgMTQ5LCAyMzIsIDE5MSwgMTM2LCAyNSwgNSwgMTQ5LCAxNTYsIDEzNiwgMjUsIAorICAgIDUsIDE0OSwgMjMyLCAxOTEsIDEzNiwgMjEsIDIxMCwgODYsIDEzNiwgMjEsIDExMSwgMTM2LCAyMSwgMTA1LCAxMzYsIDIxLCAKKyAgICAxNTgsIDEzNiwgMjEsIDE2MSwgMTM2LCAyMSwgMTkwLCAxMzYsIDIxLCAxOTUsIDEzNiwgMjEsIDE5OSwgMTM2LCAyMSwgCisgICAgMTk2LCAxMzYsIDIxLCAyMDEsIDEzNiwgNTQsIDIxNiwgMjQ4LCAxMzYsIDU0LCAxMjMsIDI0MCwgMjE3LCAxMzYsIDU0LCAKKyAgICAxMjMsIDIxNiwgMTQ4LCAxMzYsIDI0NCwgMTAsIDEyMywgMjI0LCAyNCwgMTM2LCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIAorICAgIDEzNiwgMjQ0LCAxMCwgMTM0LCAyMjQsIDIyLCAxMzYsIDI0OCwgMTU4LCA3OSwgMTM2LCAxLCAyNTAsIDEwNywgMjI4LCAKKyAgICAxMTYsIDEzNiwgMSwgMjUwLCAxMDcsIDIzMCwgMzAsIDEzNiwgMSwgMjUwLCAxMDcsIDIyMiwgMTgyLCAxMzYsIDEsIDI1MCwgCisgICAgMTA3LCAxNTYsIDEzNiwgMSwgMjUwLCAxMDcsIDIzMiwgMTkxLCAxMzYsIDEsIDI1MCwgMTA3LCAyMzUsIDI5LCAxNzUsIDUsIAorICAgIDI1NCwgODIsIDE3NSwgNSwgMjEzLCAxNDYsIDE3NSwgMSwgMjUzLCAxNzMsIDE3NSwgMSwgMjU1LCAzNiwgMTc1LCAxLCAKKyAgICAyNTQsIDIzMiwgMTc1LCAxLCAyNTQsIDI0NywgMTc1LCAxLCAyMzUsIDE1NywgMTc1LCAxLCAyMzYsIDM5LCAxNzUsIDEsIAorICAgIDIxNCwgMTEwLCAxNzUsIDEsIDIxNCwgMTEyLCAxNzUsIDEsIDIzNSwgMTgwLCAxNzUsIDEsIDIzNSwgMTgxLCAxNzUsIDEsIAorICAgIDIzNiwgMjUsIDE3NSwgMSwgMjM2LCAyNywgMTc1LCAxLCAyNDUsIDI1LCAxNzUsIDEsIDI0NSwgMjEyLCAxNzUsIDEsIDI1NCwgCisgICAgMTk3LCAxNzUsIDEsIDIyNiwgMTEyLCAxNzUsIDEsIDIyNiwgMTgxLCAxNzUsIDEsIDI1MywgMTg2LCAxNzUsIDEsIDI1NCwgCisgICAgMTU0LCAyMzQsIDE5MywgMTc1LCAxLCAyMzEsIDIxNCwgMjM0LCAxOTMsIDE3NSwgMSwgMjU0LCAxNTQsIDI0MywgODksIAorICAgIDE3NSwgMSwgMjMxLCAyMTQsIDI0MywgODksIDE3NSwgMSwgMjM0LCAyMzUsIDIyOSwgMjI3LCAxNzUsIDEsIDIyMSwgMjM4LCAKKyAgICAyNDMsIDg5LCAxNzUsIDEsIDI1NCwgMTU0LCAyNTAsIDIyNCwgMTc1LCAxLCAyMzEsIDIxNCwgMjUwLCAyMjQsIDE3NSwgMSwgCisgICAgMjU0LCAxNTQsIDIzNSwgMTMzLCAxNzUsIDEsIDIzMSwgMjE0LCAyMzUsIDEzMywgMTc1LCAxLCAyMTcsIDk5LCAyMjksIAorICAgIDIyNywgMTc1LCAxLCAyMTcsIDk5LCAyMjEsIDIzNywgMjI5LCAyMjgsIDE3NSwgMSwgMjIxLCAyMzgsIDIzNSwgMTMzLCAKKyAgICAxNzUsIDEsIDI1NCwgMTU0LCAyMTUsIDE1MywgMTc1LCAxLCAyMzEsIDIxNCwgMjE1LCAxNTMsIDE3NSwgMSwgMjU0LCAxNTQsIAorICAgIDI0OCwgMTM0LCAxNzUsIDEsIDIzMSwgMjE0LCAyNDgsIDEzNCwgMTc1LCAxLCAyMzAsIDU4LCAyMjksIDE4NSwgMTc1LCAxLCAKKyAgICAyMjEsIDIzOCwgMjQ4LCAxMzQsIDE3NSwgMSwgMjU0LCAxNTQsIDIxNywgMzEsIDE3NSwgMSwgMjMxLCAyMTQsIDIxNywgMzEsIAorICAgIDE3NSwgMSwgMjU0LCAxNTQsIDI0OCwgMTUyLCAxNzUsIDEsIDIzMSwgMjE0LCAyNDgsIDE1MiwgMTc1LCAxLCAyNDgsIDE4MiwgCisgICAgMjI5LCAxODUsIDE3NSwgMSwgMjIxLCAyMzgsIDI0OCwgMTUyLCAxNzUsIDEsIDI1NCwgMTU0LCAyMjUsIDIzMiwgMTc1LCAxLCAKKyAgICAyMzEsIDIxNCwgMjI1LCAyMzIsIDE3NSwgMSwgMjU0LCAxNTQsIDI1MiwgMTIwLCAxNzUsIDEsIDIzMSwgMjE0LCAyNTIsIAorICAgIDEyMCwgMTc1LCAxLCAyMzEsIDEzNiwgMTc1LCAxLCAyNTQsIDEzOSwgMjUyLCAxMjAsIDE3NSwgMSwgMjExLCA1MSwgMTc1LCAKKyAgICAxLCAyMjMsIDEzNiwgMTc1LCAxLCAyNDgsIDE4MiwgMjMzLCA3MywgMTc1LCAxLCAyMTQsIDEsIDE3NSwgMSwgMjE3LCA5OSwgCisgICAgMjIxLCAyMTIsIDE3NSwgMSwgMjMwLCA1OCwgMjIxLCAyMTIsIDE3NSwgMSwgMjQ4LCAxODIsIDIyMSwgMjEyLCAxNzUsIDEsIAorICAgIDI0MSwgMjQ5LCAxNzUsIDEsIDIzMCwgNTgsIDIzMywgNzMsIDE3NSwgMSwgMjQ0LCAxNjQsIDE3NSwgNSwgMjU0LCAxODYsIAorICAgIDE3NSwgMjUsIDUsIDI1NCwgMjQyLCAxNzUsIDI1LCA1LCAyMzQsIDE2MSwgMjU0LCAyNDksIDE3NSwgMjUsIDUsIDI0NywgCisgICAgMjM2LCAyNTQsIDI0OSwgMTc1LCAyNSwgNSwgMjM0LCAxNjEsIDIzNSwgMTc3LCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjM1LCAKKyAgICAxNzcsIDE3NSwgMjUsIDUsIDIzNCwgMTYxLCAyMjYsIDkyLCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjI2LCA5MiwgMTc1LCAKKyAgICAyNSwgNSwgMjQzLCAxMzEsIDE3NSwgMjUsIDUsIDIzNCwgMjEsIDE3NSwgMjUsIDUsIDI0NywgMjM2LCAyMzQsIDIxLCAxNzUsIAorICAgIDI1LCA1LCAyMzQsIDIzLCAyNDgsIDc1LCAxNzUsIDI1LCA1LCAyMzQsIDIyLCAyNDIsIDU0LCAyNTQsIDI0MiwgMTc1LCAyNSwgCisgICAgNSwgMjM0LCAyMiwgMjQyLCA1NCwgMjQ3LCAyMzYsIDI1NCwgMjQyLCAxNzUsIDI1LCA1LCAyMzQsIDIyLCAyNDIsIDU0LCAKKyAgICAyNDMsIDg4LCAxNzUsIDI1LCA1LCAyNDMsIDg4LCAxNzUsIDI1LCA1LCAyNDcsIDIzNiwgMjQzLCAxMzEsIDE3NSwgMjUsIDUsIAorICAgIDI0NywgMjM2LCAyNDMsIDg4LCAxNzUsIDIyNCwgMTQ0LCAyMzMsIDIxMywgMTY4LCAxMzUsIDIzNCwgMzUsIDIzNCwgMjUyLCAKKyAgICAxNjgsIDEzNSwgMjM0LCAxMTIsIDIzNCwgMTM0LCAxNjgsIDEzNSwgMjM0LCAxMTIsIDIzNCwgMTA1LCAxNjgsIDEzNSwgCisgICAgMjM0LCAxMTIsIDIzNCwgMTAxLCAxNjgsIDEzNSwgMjM0LCAxMTIsIDIzNCwgMTA5LCAxNjgsIDEzNSwgMjM0LCAxMTIsIAorICAgIDIyMywgMTU3LCAxNjgsIDEzNSwgMjI5LCAxMCwgMjI4LCAyNTMsIDE2OCwgMTM1LCAyNTAsIDk1LCAyNTAsIDE1NSwgMTY4LCAKKyAgICAxMzUsIDI1MCwgOTUsIDI1MCwgMTAzLCAxNjgsIDEzNSwgMjUwLCA5NSwgMjUwLCAxNTQsIDE2OCwgMTM1LCAyMTksIDYxLCAKKyAgICAyMTksIDYwLCAxNjgsIDEzNSwgMjUwLCA5NSwgMjUwLCA5MSwgMTY4LCAxMzUsIDIxMCwgMjQ1LCAyMTAsIDI1MiwgMTY4LCAKKyAgICAxMzUsIDI0NywgMTU0LCAyNTAsIDE2MiwgMTY4LCAxMzUsIDIxNiwgNDMsIDIyNSwgMjQyLCAxNjgsIDEzNSwgMjE2LCAxNTgsIAorICAgIDIxNiwgMjAxLCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIyOSwgMjA2LCAxNjgsIDEzNSwgMjE2LCAxNTgsIDIyNSwgMTE0LCAKKyAgICAxNjgsIDEzNSwgMjI4LCA4MCwgMjI5LCAxMDMsIDE2OCwgMTM1LCAyNDcsIDE1NCwgMjQ4LCA3NiwgMTY4LCAxMzUsIDIxNiwgCisgICAgNDMsIDIxNywgNTYsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjE2LCAxMzIsIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjE2LCAyMDUsIAorICAgIDE2OCwgMTM1LCAyMTYsIDE1OCwgMjE2LCAxNTUsIDE2OCwgMTM1LCAyMjgsIDgwLCAyMjcsIDI0MiwgMTY4LCAxMzUsIDI1MSwgCisgICAgMjE0LCAyNTIsIDE3MiwgMTY4LCAxMzUsIDIyNSwgMjAsIDIyNSwgNDUsIDE2OCwgMTM1LCAyMjUsIDEyNSwgMjI1LCAxMTYsIAorICAgIDE2OCwgMTM1LCAyNDQsIDUyLCAyNDQsIDIwNCwgMTY4LCAxMzUsIDIyNSwgMTI1LCAyMjUsIDE0NCwgMTY4LCAxMzUsIDI0NCwgCisgICAgNTIsIDI0NCwgMTgxLCAxNjgsIDEzNSwgMjI1LCAxMjUsIDIyMSwgMjQ5LCAxNjgsIDEzNSwgMjMwLCAxNjcsIDE4NiwgMTY4LCAKKyAgICAxMzUsIDIxMCwgMjQ1LCAyMTEsIDc5LCAxNjgsIDEzNSwgMjIyLCAyMTQsIDIyMiwgMTQxLCAxNjgsIDEzNSwgMjIyLCAxNDIsIAorICAgIDE2OCwgMTM1LCAyMzIsIDE2MywgMjMyLCAyMTIsIDE2OCwgMTM1LCAyMzIsIDEwMywgMTY4LCAxMzUsIDIxMSwgMjI4LCAKKyAgICAyMTIsIDYxLCAxNjgsIDEzNSwgMjE5LCA2MSwgMjIyLCA4LCAxNjgsIDEzNSwgMjE5LCA2MSwgMjIyLCAxMTYsIDE2OCwgCisgICAgMTM1LCAyMTksIDYxLCAyMTgsIDgzLCAxNjgsIDEzNSwgMjQxLCA3NiwgMjQxLCAxNjYsIDE2OCwgMTM1LCAyMzIsIDE2MywgCisgICAgMjUwLCA3NiwgMTY4LCAxMzUsIDE0NCwgMjU0LCAxMjMsIDE2OCwgMTM1LCAyNDEsIDc2LCAyMjgsIDc1LCAxNjgsIDEzNSwgCisgICAgMjI2LCA3MiwgMTY4LCAxMzUsIDIyMSwgMjMyLCA2MSwgMTY4LCAxMzUsIDIzMSwgMjA5LCAyNDIsIDI0LCAxNjgsIDEzNSwgCisgICAgMjIxLCAyMzIsIDI1NSwgODIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjU0LCAxNDQsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNzQsIAorICAgIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjM2LCA0MCwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyMTQsIDIxNCwgMTY4LCAxMzUsIDIyMSwgCisgICAgMjMyLCAyMTQsIDIxMiwgMTY4LCAxMzUsIDIyMSwgMjMyLCA2OSwgMTY4LCAxMzUsIDIyMSwgMjMyLCAyMTQsIDExOCwgMTY4LCAKKyAgICAxMzUsIDIyNSwgMTI3LCAxNjgsIDI0OSwgMTA2LCAxNiwgMjUyLCAxNzMsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNzYsIDE2OCwgCisgICAgMTM1LCAyMjEsIDIzMiwgMjU0LCAyNTIsIDE2OCwgMTM1LCAyMjEsIDIzMiwgNzgsIDE2OCwgMTM1LCAyMjEsIDIzMiwgMjU0LCAKKyAgICAyMTEsIDIzMSwgMjAzLCAxNjgsIDEzNSwgMjIxLCAyMzIsIDI1NCwgMjExLCAyMzEsIDIwNCwgMTY4LCAxMzUsIDIzMywgCisgICAgMTEyLCAxNjgsIDEzNSwgMjMxLCAyMDAsIDE2OCwgMTM1LCAyMzEsIDIwMSwgMTY4LCAxMzUsIDIzMSwgMjA5LCAyNDUsIAorICAgIDE4OCwgMTY4LCAxMzUsIDIzMSwgMjA5LCAyMTYsIDE1NywgMTY4LCAxMzUsIDIzMSwgMjA5LCAyMTUsIDIyOSwgMTY4LCAKKyAgICAxMzUsIDIzMSwgMjA5LCAyNTAsIDE0MywgMTY4LCAxMzUsIDIxNiwgMTk5LCAxNjgsIDEzNSwgMjI4LCAyMTAsIDE2OCwgCisgICAgMTM1LCAyMTEsIDczLCAxNjgsIDEzNSwgMjQ0LCA0MywgMTY4LCAyMSwgMjEwLCA4NiwgMTY4LCAyMSwgMTExLCAxNjgsIDIxLCAKKyAgICAxMDUsIDE2OCwgMjEsIDE1OCwgMTY4LCAyMSwgMTYxLCAxNjgsIDIxLCAxOTAsIDE2OCwgMjEsIDE5NSwgMTY4LCAyMSwgCisgICAgMTk5LCAxNjgsIDIxLCAxOTYsIDE2OCwgMjEsIDIwMSwgMTY4LCAxMzUsIDI1NCwgMTE5LCAxNjgsIDEzNSwgMjM0LCAxMTAsIAorICAgIDIwOSwgMjA5LCAxLCAyMzQsIDM0LCAyMDksIDIwOSwgMSwgMjM0LCAxMTIsIDIxOCwgMzYsIDIwOSwgMjA5LCAxLCAyMzQsIAorICAgIDExMiwgMjE3LCA2MywgMjA5LCAyMDksIDEsIDIyOSwgOSwgMjA5LCAyMDksIDEsIDI0OSwgMjQ2LCAyMDksIDIwOSwgMSwgCisgICAgMjE5LCA2MSwgMjE3LCA2MywgMjA5LCAyMDksIDEsIDIyNywgMTM4LCAyMDksIDIwOSwgMSwgMjQ3LCAxNTMsIDIwOSwgMjA5LCAKKyAgICAxLCAxMTIsIDIwOSwgMjA5LCAxLCAyMTYsIDE1OCwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDIxNiwgMTU4LCAyMTcsIDYzLCAKKyAgICAyMDksIDIwOSwgMSwgMjI4LCA3OSwgMjA5LCAyMDksIDEsIDI1MSwgMjEzLCAyMDksIDIwOSwgMSwgMjI1LCAxOSwgMjA5LCAKKyAgICAyMDksIDEsIDIyNSwgMTI1LCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgMjQ0LCA1MiwgMjE3LCA2MywgMjA5LCAyMDksIDEsIAorICAgIDIyNSwgMTI1LCAyMTcsIDYzLCAyMDksIDIwOSwgMSwgMjQ0LCA1MiwgMjE4LCAzNiwgMjA5LCAyMDksIDEsIDIzMCwgMTY2LCAKKyAgICAyMDksIDIwOSwgMSwgMjEwLCAyNDQsIDIwOSwgMjA5LCAxLCAyMzIsIDE2MywgMjMyLCAyMTIsIDIwOSwgMjA5LCAxLCAyMzIsIAorICAgIDE2MywgMjMyLCAxMjcsIDIwOSwgMjA5LCAxLCAyMTEsIDIyNywgMjA5LCAyMDksIDEsIDIxOSwgNjEsIDIxOCwgMzYsIDIwOSwgCisgICAgMjA5LCAxLCAyNDEsIDc2LCAyMTgsIDM2LCAyMDksIDIwOSwgMSwgNzgsIDIwOSwgMjA5LCAxLCAyNDEsIDc2LCAyMTcsIDYzLCAKKyAgICAyMDksIDIwOSwgMjQ1LCAxNzEsIDIwOSwgMjA5LCAyNSwgNSwgNjEsIDIwOSwgMjA5LCAyNSwgNSwgMjMxLCAyMDksIDIzNCwgCisgICAgMjQwLCAyMDksIDIwOSwgMjUsIDUsIDI1NSwgODIsIDIwOSwgMjA5LCAyNSwgNSwgMjU0LCAxNDQsIDIwOSwgMjA5LCAyNSwgCisgICAgNSwgNzQsIDIwOSwgMjA5LCAyNSwgNSwgMjM2LCA0MCwgMjA5LCAyMDksIDI1LCA1LCAyMTEsIDExNywgMjA5LCAyMDksIDI1LCAKKyAgICA1LCAyMTAsIDE2OSwgMjA5LCAyMDksIDI1LCA1LCA2OSwgMjA5LCAyMDksIDI1LCA1LCAyMTQsIDExOCwgMjA5LCAyMDksIAorICAgIDI1LCA1LCAyMzEsIDIwOSwgMjM0LCAxOSwgMjA5LCAyMDksIDIyMCwgMTQ3LCA1LCAyMzIsIDE2MiwgMjA5LCAyMDksIDIyMCwgCisgICAgMTQ3LCA1LCAyMjcsIDEzOCwgMjA5LCAyMDksIDI1LCA1LCA3NiwgMjA5LCAyMDksIDI1LCA1LCAyNDUsIDIwMywgMjA5LCAKKyAgICAyMDksIDI1LCA1LCA3OCwgMjA5LCAyMDksIDI1LCA1LCAyNTMsIDE3NSwgMjA5LCAyMDksIDI1LCA1LCAyNTQsIDIxMCwgCisgICAgMjA5LCAyMDksIDIzNCwgMzUsIDIzMywgMTQxLCAyMDksIDIwOSwgMTM4LCAyMzEsIDIwOSwgMjQ1LCAxODgsIDIwOSwgMjA5LCAKKyAgICAxMzgsIDIzMSwgMjA5LCAyMTYsIDE1NywgMjA5LCAyMDksIDEzOCwgMjMxLCAyMDksIDIxNiwgMTE4LCAyMDksIDIwOSwgCisgICAgMTM4LCAyMzEsIDIwOSwgMjUwLCAyMzEsIDIwOSwgMjA5LCAyNTEsIDEyLCA3OSwgMjA5LCAyMDksIDIyOCwgMjE5LCAyMDksIAorICAgIDIwOSwgMjEsIDIxMCwgODYsIDIwOSwgMjA5LCAyMSwgMTExLCAyMDksIDIwOSwgMjEsIDEwNSwgMjA5LCAyMDksIDIxLCAKKyAgICAxNTgsIDIwOSwgMjA5LCAyMSwgMTYxLCAyMDksIDIwOSwgMjEsIDE5MCwgMjA5LCAyMDksIDIxLCAxOTUsIDIwOSwgMjA5LCAKKyAgICAyMSwgMTk5LCAyMDksIDIwOSwgMjEsIDE5NiwgMjA5LCAyMDksIDIxLCAyMDEsIDIwOSwgMjA5LCAyNDEsIDc2LCAyMjgsIAorICAgIDc5LCAyMDksIDIwOSwgMjQxLCA3NiwgMjMwLCAxNjYsIDIwOSwgMjA5LCAxLCAyMzQsIDExMywgMjQyLCAxODEsIDIwOSwgCisgICAgMjA5LCAxLCAyMzQsIDExMywgMjI3LCAxMzgsIDYzLCAzLCAyMjYsIDIwOCwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxMSwgMCwgCisgICAgMjMwLCAyNTMsIDIxNSwgMTkwLCA2MSwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxMSwgMCwgMjMwLCAyNTMsIDI1NSwgMTY4LCAKKyAgICAyMjIsIDIxOCwgMjUyLCA4NSwgMTg2LCA2MywgMTY0LCAyNDIsIDEyMiwgMjExLCAwLCAyMzAsIDI1MywgMjU1LCAxNjgsIAorICAgIDI0MiwgMTIyLCAyMTUsIDE3NCwgMTg2LCA2MywgMTY0LCA2NSwgMjExLCAwLCAyMzAsIDI1MywgMjMxLCA5OCwgMTg2LCA2MywgCisgICAgMTY0LCAyNTAsIDQsIDIxMSwgMCwgMjMwLCAyNTMsIDIyMCwgMTExLCAxODYsIDYzLCAxNjQsIDI1MCwgMjQ3LCAyMTEsIDAsIAorICAgIDIzMCwgMjUzLCAyMjUsIDExNSwgMjIwLCA5OCwgMTg2LCA2MywgMTY0LCAyMTEsIDAsIDIzMCwgMjUzLCAyMTUsIDE3NCwgCisgICAgMjIwLCA5OCwgMTg2LCA2MywgMTY0LCAyMjEsIDIxMCwgMjIwLCA5NywgNjMsIDE2NCwgMjUxLCAxMzYsIDIxMSwgMCwgMjMwLCAKKyAgICAyNTIsIDYzLCAxNjQsIDI1MSwgMjMxLCAyMjAsIDUsIDIxMSwgMCwgMjMwLCAyNTIsIDYzLCAxNjQsIDIzNSwgMjA0LCAyMTUsIAorICAgIDE3MywgNjMsIDE2NCwgMjQ4LCA2OSwgMjE1LCAxNzQsIDI1MSwgMTM1LCA2MywgMTY0LCAyMjAsIDk3LCA2MywgMTY0LCAKKyAgICAyMjcsIDE0MywgMjIwLCA5NywgNjMsIDE2NCwgMjE1LCAxNzQsIDIyMCwgOTcsIDYzLCAxNjQsIDIyNywgMTQzLCAyMTUsIAorICAgIDE3NCwgMjIwLCA5NywgNjMsIDE2NCwgMjIyLCAyMzksIDI1MCwgMTMwLCAyMTgsIDIzOCwgMjIwLCA5NywgNjMsIDE2NCwgCisgICAgMjIzLCA0NSwgMjQyLCAxNTMsIDIyMCwgOTcsIDYzLCAxNjQsIDI1MCwgMjQ3LCAyNTUsIDE3MiwgMjIyLCAxNDYsIDIzMSwgCisgICAgOTcsIDIwMCwgMjUxLCAxNSwgNjMsIDE2NCwgMjQyLCAxMjIsIDIxNSwgMTczLCA2MywgMjMyLCAxNTAsIDUsIDI1MCwgMTYzLCAKKyAgICAyMjIsIDE0NSwgNjMsIDIzMiwgMTUwLCA1LCAyMzMsIDIsIDIyMiwgMTQ1LCA2MywgMjUzLCAyMjAsIDUsIDIyMCwgMTA3LCAKKyAgICAyNDMsIDcyLCAyNTUsIDE3MywgMjIyLCAxNDUsIDYzLCAyNTMsIDIyMCwgNSwgMjU1LCAxNzAsIDE5MSwgNjMsIDI1MywgCisgICAgMjIwLCA1LCAyMjEsIDE4NCwgMjE1LCAxNjksIDYzLCA1LCAyMjMsIDEzMywgMjQ3LCAxNjcsIDI0MywgNzEsIDYzLCA1LCAKKyAgICAyMjMsIDEzMywgMjQ3LCAxNjcsIDI0MiwgMTgzLCA2MywgNSwgMjIzLCAxMzMsIDI0NywgMTY3LCAyNDIsIDEyMywgNjMsIDUsIAorICAgIDIyMywgMTMzLCAyMjksIDIyNCwgMjQzLCA3MSwgNjMsIDUsIDIyMywgMTMzLCAyMjksIDIyNCwgMjQyLCAxODMsIDYzLCA1LCAKKyAgICAyMjMsIDEzMywgMjQ3LCAxNjcsIDIyMywgMTMzLCAyMjksIDIyMywgNjMsIDIxLCAyMTAsIDg2LCA2MywgMjEsIDExMSwgNjMsIAorICAgIDIxLCAxMDUsIDYzLCAyMSwgMTU4LCA2MywgMjEsIDE2MSwgNjMsIDIxLCAxOTAsIDYzLCAyMSwgMTk1LCA2MywgMjEsIDE5OSwgCisgICAgNjMsIDIxLCAxOTYsIDYzLCAyMSwgMjAxLCA2MywgMjEsIDE2MywgMTExLCA2MywgMjEsIDE2MywgMTA1LCA2MywgMjEsIAorICAgIDE2MywgMTU4LCA2MywgMjEsIDE2MywgMTYxLCA2MywgMjEsIDE2MywgMTkwLCA2MywgMjEsIDE2MywgMTk1LCA2MywgMjEsIAorICAgIDE2MywgMTk5LCA2MywgMjEsIDE2MywgMTk2LCA2MywgMjEsIDE2MywgMjAxLCA2MywgMjEsIDE2MywgMjEwLCA4NiwgNjMsIAorICAgIDE2NCwgMjUxLCAxMzgsIDIyMiwgMTQ1LCA2MywgMTY0LCAyMjksIDczLCAyNTEsIDc2LCAyMjcsIDE1MywgMjEwLCAyNSwgCisgICAgNjMsIDE2NCwgMjUwLCAyNDcsIDI1NSwgMTcyLCAyMjIsIDE0NiwgMjUxLCA3NywgMjMwLCAyMDcsIDI1MSwgMTUsIDYzLCAKKyAgICAxNjQsIDIyOSwgNzMsIDI1MSwgNzYsIDIyMCwgMTA4LCAyMjIsIDE0NSwgNjMsIDE2NCwgMjUwLCAxNDAsIDIzMCwgMjUyLCAKKyAgICA2MywgMTY0LCAyMTUsIDE4NSwgMjU1LCAxNjksIDYzLCAxNjQsIDI0MiwgMTA3LCAyMjIsIDE0NiwgMjQyLCA3MCwgNjMsIAorICAgIDE2NCwgMjQyLCAxMDcsIDIyMiwgMTQ2LCAyNDIsIDc2LCA2MywgMTY0LCAyNTQsIDEyNCwgMjM0LCAxMjksIDI0MiwgNzAsIAorICAgIDYzLCAxNjQsIDI1NCwgMTI0LCAyMzQsIDEyOSwgMjQyLCA3NiwgNjMsIDUsIDIxMSwgNjUsIDIxNSwgMTcyLCA2MywgNSwgCisgICAgMjMxLCAxNzIsIDIxNSwgMTcyLCA2MywgMSwgMTc2LCA2MywgMSwgMjM0LCAxMzgsIDYzLCAxLCAyNDMsIDE0MiwgNjMsIDEsIAorICAgIDI0MywgMCwgNjMsIDEsIDIyOSwgODIsIDYzLCAxLCAyNTEsIDQxLCA2MywgMSwgMjUwLCAxNjUsIDYzLCAxLCAyMzUsIDE0NywgCisgICAgNjMsIDEsIDIyNywgMTY5LCA2MywgMSwgMjE1LCAxNTcsIDYzLCAxLCAyMTUsIDE0NSwgNjMsIDEsIDI0OCwgMTQzLCA2MywgCisgICAgMSwgMjQ4LCAxMjcsIDYzLCAxLCAyMjgsIDExNSwgNjMsIDEsIDIxNywgMTA2LCA2MywgMSwgMjE2LCAyMDksIDYzLCAxLCAKKyAgICAyNDgsIDIyOSwgNjMsIDEsIDI0OCwgMzMsIDYzLCAxLCAxOTgsIDYzLCAxLCAxOTEsIDYzLCAxLCAyMjUsIDE1MCwgNjMsIDEsIAorICAgIDI1MiwgMTk5LCA2MywgMSwgMjUyLCAyNiwgNjMsIDEsIDE4NiwgNjMsIDEsIDIxNSwgMTg0LCA2MywgMSwgMjE1LCAxNzYsIAorICAgIDYzLCAxLCAyNDYsIDQ2LCA2MywgMSwgMjQ2LCA0MSwgNjMsIDEsIDIxMiwgNjUsIDYzLCAxLCAyMTAsIDgyLCA2MywgMSwgCisgICAgMjEwLCAxMTYsIDYzLCAxLCAyNTUsIDE3NSwgNjMsIDEsIDE5MiwgNjMsIDEsIDIwNSwgNjMsIDEsIDIzMywgMTQxLCA2MywgCisgICAgMSwgMjIwLCAxMDQsIDYzLCAxLCAyMTgsIDIyNSwgNjMsIDEsIDIwNiwgNjMsIDEsIDE2MiwgNjMsIDEsIDYxLCA2MywgMSwgCisgICAgMjMzLCAyMzcsIDYzLCAxLCAyNDQsIDg1LCAyMDUsIDYzLCAxLCAyMzQsIDUyLCA2MywgMSwgMjIyLCAxODEsIDYzLCAyNSwgCisgICAgNSwgMjU1LCA4MiwgNjMsIDI1LCA1LCA3NCwgNjMsIDI1LCA1LCAyMzYsIDQwLCA2MywgMjUsIDUsIDY5LCA2MywgMjUsIDUsIAorICAgIDIxNCwgMTE4LCA2MywgMjUsIDUsIDE0OSwgMTUzLCA2MywgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDYzLCAyNSwgNSwgMTQ5LCAKKyAgICAxNTYsIDYzLCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgNjMsIDI1LCA1LCA3NiwgNjMsIDI1LCA1LCAyNDUsIDIxNywgNjMsIAorICAgIDI1LCA1LCA3OCwgNjMsIDI1LCA1LCAyMjYsIDE4NywgNjMsIDUsIDIyMiwgMjI0LCAyMTgsIDg1LCAyMjksIDgzLCAyMjIsIAorICAgIDIxMywgNjMsIDUsIDIyMiwgMjE4LCAyNTIsIDg0LCA2MywgMjUsIDUsIDIyMywgNTIsIDc0LCA2MywgMjUsIDUsIDIyMywgCisgICAgNTIsIDIzNiwgNDAsIDYzLCA1LCAyMjcsIDE1MywgMjEwLCAyNiwgMjI5LCAyMzEsIDI0OCwgMjI5LCA2MywgNSwgMjE5LCAKKyAgICA3MywgMjMzLCA2NiwgNjMsIDE2NCwgMjQyLCAzNiwgNjMsIDE2NCwgMjI2LCA2MSwgNjMsIDUsIDIzMywgNjksIDIyMiwgCisgICAgMTQ1LCA2MywgNSwgMjExLCA3MCwgMjIyLCAxNDUsIDYzLCA1LCAyMzMsIDcwLCAyMTUsIDE4NSwgMjUxLCAxNSwgNjMsIDUsIAorICAgIDIzMSwgMTAwLCAyNTEsIDE1LCA2MywgNSwgMjQyLCAxMjYsIDI1MSwgMTYsIDIyMywgNDMsIDYzLCA1LCAyNDIsIDEyNiwgCisgICAgMjMxLCA5MCwgMjIzLCA0MywgNjMsIDUsIDIzNSwgMjAwLCAyMzEsIDEwMCwgMjUxLCAxNSwgNjMsIDIxOCwgNzQsIDUsIAorICAgIDIzMywgNzAsIDIxNSwgMTg1LCAyNTEsIDE1LCA2MywgMjE4LCA3NCwgNSwgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCAyMTgsIAorICAgIDc0LCA1LCAyMzUsIDIwMCwgMjMxLCAxMDAsIDI1MSwgMTUsIDYzLCAyMTgsIDc0LCAxLCAxNzYsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICAyMzQsIDEzOCwgNjMsIDIxOCwgNzQsIDEsIDI0MywgMTQyLCA2MywgMjE4LCA3NCwgMSwgMjQzLCAwLCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjI5LCA4MiwgNjMsIDIxOCwgNzQsIDEsIDI1MSwgNDEsIDYzLCAyMTgsIDc0LCAxLCAyNTAsIDE2NSwgNjMsIDIxOCwgCisgICAgNzQsIDEsIDIzNSwgMTQ3LCA2MywgMjE4LCA3NCwgMSwgMjI3LCAxNjksIDYzLCAyMTgsIDc0LCAxLCAyMTUsIDE1NywgNjMsIAorICAgIDIxOCwgNzQsIDEsIDIxNSwgMTQ1LCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAxNDMsIDYzLCAyMTgsIDc0LCAxLCAyNDgsIDEyNywgCisgICAgNjMsIDIxOCwgNzQsIDEsIDIyOCwgMTE1LCA2MywgMjE4LCA3NCwgMSwgMjE3LCAxMDYsIDYzLCAyMTgsIDc0LCAxLCAyMTYsIAorICAgIDIwOSwgNjMsIDIxOCwgNzQsIDEsIDI0OCwgMjI5LCA2MywgMjE4LCA3NCwgMSwgMjQ4LCAzMywgNjMsIDIxOCwgNzQsIDEsIAorICAgIDE5OCwgNjMsIDIxOCwgNzQsIDEsIDE5MSwgNjMsIDIxOCwgNzQsIDEsIDIyNSwgMTUwLCA2MywgMjE4LCA3NCwgMSwgMjUyLCAKKyAgICAxOTksIDYzLCAyMTgsIDc0LCAxLCAyNTIsIDI2LCA2MywgMjE4LCA3NCwgMSwgMTg2LCA2MywgMjE4LCA3NCwgMSwgMjE1LCAKKyAgICAxODQsIDYzLCAyMTgsIDc0LCAxLCAyMTUsIDE3NiwgNjMsIDIxOCwgNzQsIDEsIDI0NiwgNDYsIDYzLCAyMTgsIDc0LCAxLCAKKyAgICAyNDYsIDQxLCA2MywgMjE4LCA3NCwgMSwgMjEyLCA2NSwgNjMsIDIxOCwgNzQsIDEsIDIxMCwgODIsIDYzLCAyMTgsIDc0LCAKKyAgICAxLCAyMTAsIDExNiwgNjMsIDIxOCwgNzQsIDEsIDI1NSwgMTc1LCA2MywgMjE4LCA3NCwgMSwgMTkyLCA2MywgMjE4LCA3NCwgCisgICAgMSwgMjA1LCA2MywgMjE4LCA3NCwgMSwgMjMzLCAxNDEsIDYzLCAyMTgsIDc0LCAxLCAyMjAsIDEwNCwgNjMsIDIxOCwgNzQsIAorICAgIDEsIDIxOCwgMjI1LCA2MywgMjE4LCA3NCwgMSwgMjA2LCA2MywgMjE4LCA3NCwgMSwgMTYyLCA2MywgMjE4LCA3NCwgMSwgCisgICAgNjEsIDYzLCAyMTgsIDc0LCAxLCAyMzMsIDIzNywgNjMsIDIxOCwgNzQsIDEsIDI0NCwgODUsIDIxMiwgNjUsIDYzLCAyMTgsIAorICAgIDc0LCAxLCAyNDQsIDg1LCAxOTIsIDYzLCAyMTgsIDc0LCAxLCAyNDQsIDg1LCAyMDUsIDYzLCAyMzMsIDIyNCwgMjIyLCAKKyAgICAxNDMsIDIzNCwgMTM4LCA2MywgMjMzLCAyMjQsIDIyMiwgMTQzLCAyMzQsIDEzOSwgMjUxLCA3NywgMjMwLCAyMDcsIDI1MSwgCisgICAgMTUsIDYzLCAyNTEsIDQsIDUsIDExNCwgMjUyLCA3OCwgNjMsIDI1MSwgNCwgNSwgMTkzLCAyNTIsIDc4LCA2MywgMjUxLCA0LCAKKyAgICA1LCAyNTEsIDUsIDIxNywgMjEsIDYzLCAyNTEsIDQsIDUsIDIyMSwgMjA5LCAyNTUsIDE3NCwgNjMsIDE2LCAyNDYsIDk5LCAKKyAgICAyNTEsIDEzMywgNjMsIDE2LCAyMjMsIDEzMiwgMjIyLCAyMjUsIDYzLCAxNiwgMjI2LCA4MSwgMjQzLCA3MCwgNjMsIDE2LCAKKyAgICAyMjMsIDEzMiwgMjIyLCAyMjYsIDIyMywgNDUsIDI0MiwgMTUyLCA2MywgMTYsIDIyNSwgMTE1LCAxOTEsIDYzLCAxNiwgCisgICAgMjI4LCA2NCwgMjUxLCAxMzMsIDYzLCAxNiwgMjI4LCA2NCwgMjUxLCAxMzQsIDIyNywgMTQzLCAyNTUsIDE3MSwgNjMsIDE2LCAKKyAgICAyMjgsIDY0LCAyNTEsIDEzNCwgMjQyLCAxMjQsIDI1NSwgMTcxLCA2MywgMTYsIDIyOCwgNjQsIDI1MSwgMTM0LCAyNTEsIAorICAgIDc3LCAyNTUsIDE3MSwgNjMsIDUsIDIyMywgMTMzLCAyMjksIDIyNCwgMjIzLCAxMzMsIDI0NywgMTY2LCA2MywgNSwgMjIzLCAKKyAgICAxMzMsIDIyOSwgMjI0LCAyNDIsIDEyMywgNjMsIDE2NCwgMjUxLCAxMzcsIDIyMCwgNSwgMjQyLCAyMjIsIDIzMCwgMjUzLCAKKyAgICAyMjMsIDQ0LCA2MywgMTY0LCAyMzAsIDE2OCwgMjExLCAwLCAyNDIsIDIyMiwgMjMwLCAyNTMsIDIyMywgNDQsIDYzLCAxNjQsIAorICAgIDIyNywgMTQzLCAyMTUsIDE3MywgNjMsIDE2NCwgNjUsIDI1MSwgMTYwLCAyMjIsIDIxNSwgMjExLCAwLCAyMzAsIDI1MywgCisgICAgMjMxLCA5OCwgMTg2LCA2MywgMTY0LCAyNTAsIDQsIDI1MSwgMTYwLCAyMjIsIDIxNSwgMjExLCAwLCAyMzAsIDI1MywgMjIwLCAKKyAgICAxMTEsIDE4NiwgMjIyLCAyNTMsIDIxOCwgMCwgNTAsIDIzMywgNTEsIDIxOCwgMCwgNTAsIDIyMiwgMjUzLCAyMTgsIDAsIDUsIAorICAgIDIsIDI0NywgMTI2LCAyMzMsIDUxLCAyMTgsIDAsIDUsIDIsIDI0NywgMTI2LCA2MywgMTY0LCAyMzMsIDYxLCAyMzEsIDEwMSwgCisgICAgMjIyLCAxNDUsIDYzLCAxNjQsIDIxNSwgMjUxLCAyMzEsIDEwMSwgMjIyLCAxNDUsIDY4LCAxLCAxNzYsIDY4LCAxLCAyMzQsIAorICAgIDEzOCwgNjgsIDEsIDI0MywgMTQyLCA2OCwgMSwgMjQzLCAwLCA2OCwgMSwgMjI5LCA4MiwgNjgsIDEsIDI1MSwgNDEsIDY4LCAKKyAgICAxLCAyNTAsIDE2NSwgNjgsIDEsIDIzNSwgMTQ3LCA2OCwgMSwgMjM1LCAxMjAsIDY4LCAxLCAyMjcsIDE2OSwgNjgsIDEsIAorICAgIDIyOCwgODEsIDY4LCAxLCAyMTUsIDE1NywgNjgsIDEsIDIxNSwgMTQ1LCA2OCwgMSwgMjQ4LCAxNDMsIDY4LCAxLCAyNDgsIAorICAgIDEyNywgNjgsIDEsIDIyOCwgMTE1LCA2OCwgMSwgMjE3LCAxMDYsIDY4LCAxLCAyMTYsIDIwOSwgNjgsIDEsIDI0OCwgMjI5LCAKKyAgICA2OCwgMSwgMjQ4LCAzMywgNjgsIDEsIDE5OCwgNjgsIDEsIDE5MSwgNjgsIDEsIDIyNSwgMTUwLCA2OCwgMSwgMjUyLCAxOTksIAorICAgIDY4LCAxLCAyNTIsIDI2LCA2OCwgMSwgMTg2LCA2OCwgMSwgMTkyLCA2OCwgMSwgMjA1LCA2OCwgMSwgMjMzLCAxNDEsIDY4LCAKKyAgICAxLCAyMTIsIDY1LCA2OCwgMSwgMjA2LCA2OCwgMSwgMTYyLCA2OCwgMSwgMjMyLCAxOTAsIDY4LCAxLCA2MSwgNjgsIDEsIAorICAgIDIyMCwgODgsIDYxLCA2OCwgMSwgNzQsIDY4LCAxLCAyMzYsIDQwLCA2OCwgMSwgNjksIDY4LCAxLCAyMTQsIDExOCwgNjgsIAorICAgIDEsIDc2LCA2OCwgMSwgMjMwLCAxNTYsIDc2LCA2OCwgMSwgNzgsIDY4LCAxLCAyNTMsIDIwMCwgNjgsIDI1LCA1LCAyMTcsIAorICAgIDY1LCAyNTUsIDgyLCA2OCwgMjUsIDUsIDI1NSwgODIsIDY4LCAyNSwgNSwgNzQsIDY4LCAyNSwgNSwgMjM2LCA0MCwgNjgsIAorICAgIDI1LCA1LCA2OSwgNjgsIDI1LCA1LCAyMTQsIDExOCwgNjgsIDI1LCA1LCA3NiwgNjgsIDI1LCA1LCAyNTQsIDIxMCwgNjgsIAorICAgIDI1LCA1LCAyMzAsIDE1NiwgMjM2LCA0MCwgNjgsIDI1LCA1LCAyMzAsIDE1NiwgNzgsIDY4LCAyNSwgNSwgMTYwLCA0OCwgCisgICAgNjgsIDUsIDI1NCwgODMsIDY4LCA1LCA1OSwgNTEsIDY4LCA1LCAyMTMsIDE0NywgNjgsIDUsIDIxMywgMTUyLCA2OCwgNSwgCisgICAgMjUzLCAyNDMsIDY4LCAxMTcsIDUsIDE0NywgMTkyLCA2OCwgMTE3LCA1LCAxNDcsIDIwNSwgNjgsIDExNywgNSwgMTQ3LCAKKyAgICAyMTIsIDY1LCA2OCwgMTE3LCA1LCAxNDcsIDE2MiwgNjgsIDEsIDI0MiwgMTM5LCAyMDYsIDY4LCAyMSwgMjEwLCA4NiwgNjgsIAorICAgIDIxLCAxMTEsIDY4LCAyMSwgMTA1LCA2OCwgMjEsIDE1OCwgNjgsIDIxLCAxNjEsIDY4LCAyMSwgMTkwLCA2OCwgMjEsIDE5NSwgCisgICAgNjgsIDIxLCAxOTksIDY4LCAyMSwgMTk2LCA2OCwgMjEsIDIwMSwgNjgsIDUsIDIzMiwgMTk4LCAyMjEsIDE3NCwgNjgsIDUsIAorICAgIDIyMSwgMTc0LCA2OCwgMTYsIDIzMiwgMTU5LCA2OCwgMTYsIDI0OSwgMjIxLCA2OCwgMTYsIDI1NCwgMjI5LCA2OCwgMTYsIAorICAgIDI0MywgNTUsIDY4LCAxLCAyMjAsIDEwNCwgNjgsIDEsIDIxOCwgMjI1LCA2OCwgMSwgMTQ5LCAxNTMsIDY4LCAxLCAxNDksIAorICAgIDIyMiwgMTgyLCA2OCwgMSwgMTQ5LCAxNTYsIDY4LCAxLCAxNDksIDIzMiwgMTkxLCA2OCwgMjUsIDUsIDE0OSwgMTUzLCA2OCwgCisgICAgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDY4LCAyNSwgNSwgMTQ5LCAxNTYsIDY4LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgNjgsIAorICAgIDEsIDIzMCwgMTU2LCAyMjksIDgyLCA2OCwgMSwgMjMwLCAxNTYsIDIzNSwgMTIwLCA2OCwgMSwgMjMwLCAxNTYsIDI1MiwgCisgICAgMTE5LCA2OCwgMSwgMjMwLCAxNTYsIDI1MiwgMTE0LCA2OCwgMTE3LCA1LCAyMzAsIDE1NiwgMTQ3LCAxOTgsIDY4LCAxMTcsIAorICAgIDUsIDIzMCwgMTU2LCAxNDcsIDE4NiwgNjgsIDExNywgNSwgMjMwLCAxNTYsIDE0NywgMjMzLCAxNDEsIDY4LCAxLCAyMjAsIAorICAgIDExMCwgMjM0LCAyMTksIDIyMCwgMTA0LCA2OCwgMjUsIDUsIDIyMCwgMTEwLCAyMzQsIDIxOSwgMjQ1LCA2MywgNjgsIDEzOCwgCisgICAgMTY0LCAyMjAsIDExMCwgMjM0LCAyMTksIDI0MSwgMjU0LCA2OCwgMTM4LCAxNjQsIDIyMCwgMTEwLCAyMzQsIDIxOSwgMjM0LCAKKyAgICAxODksIDIyNSwgMTI0LCA2OCwgMSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjA5LCA2OCwgMSwgMjEyLCAKKyAgICA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIyNCwgMTE3LCA2OCwgMjUsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAKKyAgICAyNDUsIDYzLCA2OCwgMjUsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTQsIDIxNCwgNjgsIDUsIDIxMiwgNywgCisgICAgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMTYsIDMwLCA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjksIAorICAgIDY4LCA1LCAyMTIsIDcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjE2LCAyOCwgNjgsIDUsIDIxMiwgNywgMjI0LCAxMTEsIDIzNCwgCisgICAgMjE5LCAyMTYsIDI3LCA2OCwgNSwgMjEyLCA3LCAyMjQsIDExMSwgMjM0LCAyMTksIDIxNiwgMjYsIDY4LCAxLCAyNDUsIAorICAgIDIyNywgMjI0LCAxMTEsIDIzNCwgMjE5LCAyMjgsIDExNSwgNjgsIDEsIDI0NSwgMjI3LCAyMjQsIDExMSwgMjM0LCAyMTksIAorICAgIDIxMCwgMTc2LCA2OCwgMSwgMjQ1LCAyMjcsIDIyNCwgMTExLCAyMzQsIDIxOSwgMjQyLCAyMjQsIDY4LCAyNSwgNSwgMjQzLCAKKyAgICA2NiwgMjM0LCAyMTksIDc0LCA2OCwgMjUsIDUsIDIzNCwgMTk0LCAyMjYsIDIzOCwgNjgsIDI1LCA1LCAyMzQsIDE5NCwgNjksIAorICAgIDY4LCAyNSwgNSwgMjM0LCAxOTQsIDI0NSwgMjE3LCA2OCwgMSwgMjIwLCA4OCwgMTc2LCA2OCwgMSwgMjIwLCA4OCwgMjM0LCAKKyAgICAxMzgsIDY4LCAxLCAyMjAsIDg4LCAyNDMsIDE0MiwgNjgsIDEsIDIyMCwgODgsIDI1MSwgNDEsIDY4LCAxLCAyMjAsIDg4LCAKKyAgICAyMTAsIDExNiwgNjgsIDEsIDIyMCwgODgsIDIyNywgMTY5LCA2OCwgMSwgMjIwLCA4OCwgMjQ4LCAyMjksIDY4LCAxLCAyMjAsIAorICAgIDg4LCAxOTgsIDY4LCAxLCAyMjAsIDg4LCAyMjUsIDE1MCwgNjgsIDEsIDIyMCwgODgsIDI0NCwgMjA0LCA2OCwgMSwgMjIwLCAKKyAgICA4OCwgMjUyLCAxOTksIDY4LCAxLCAyMjAsIDg4LCAyMTYsIDIwOSwgNjgsIDEsIDIyMCwgODgsIDE2MiwgNjgsIDExNywgNSwgCisgICAgMjIwLCA4OCwgMTQ3LCAyMTIsIDY1LCA2OCwgMjUsIDUsIDIyMCwgODgsIDI1NSwgODIsIDY4LCAyNSwgNSwgMjIwLCA4OCwgCisgICAgNzYsIDY4LCAyNSwgNSwgMjIwLCA4OCwgMTYwLCA0OCwgNjgsIDI1LCA1LCAyMjAsIDg4LCA0MCwgMjExLCAxMTcsIDY4LCA1LCAKKyAgICAyMjAsIDg4LCAyMTYsIDI5LCA2OCwgNSwgMjIwLCA4OCwgMjE2LCAyOCwgNjgsIDUsIDIyMCwgODgsIDIxNiwgMjYsIDY4LCAKKyAgICA1LCAyMjAsIDg4LCAyMTYsIDI1LCA2OCwgNSwgMjIwLCA4OCwgMjQ5LCAxNjAsIDIxNiwgMjksIDY4LCA1LCAyMjAsIDg4LCAKKyAgICAyNDksIDE2MCwgMjE2LCAyOCwgNjgsIDUsIDIyMCwgODgsIDI0OSwgMTYwLCAyNDUsIDE2MSwgMjE2LCAzMSwgNjgsIDEsIAorICAgIDIyMiwgMTMwLCAyMjYsIDY3LCAyNDQsIDIwNCwgNjgsIDUsIDIyMiwgMTMwLCAyMjYsIDY3LCAyMTYsIDI2LCA2OCwgMjIwLCAKKyAgICA4OCwgMjEsIDIxMCwgODYsIDY4LCAyMjAsIDg4LCAyMSwgMTExLCA2OCwgMjIwLCA4OCwgMjEsIDEwNSwgNjgsIDIyMCwgODgsIAorICAgIDIxLCAxNTgsIDY4LCAyMjAsIDg4LCAyMSwgMTYxLCA2OCwgMjIwLCA4OCwgMjEsIDE5MCwgNjgsIDIyMCwgODgsIDIxLCAKKyAgICAxOTUsIDY4LCAyMjAsIDg4LCAyMSwgMTk5LCA2OCwgMjIwLCA4OCwgMjEsIDE5NiwgNjgsIDIyMCwgODgsIDIxLCAyMDEsIAorICAgIDY4LCA1LCAyMzQsIDEzMiwgMjE2LCAzMCwgNjgsIDUsIDIzNCwgMTMyLCAyMTYsIDI4LCA2OCwgMjUsIDUsIDI1NCwgMTk5LCAKKyAgICA2MSwgNjgsIDI1LCA1LCAyNTQsIDE5OSwgMjU0LCAyMTAsIDY4LCAxNiwgMjIwLCA4OCwgMTExLCA2OCwgMTYsIDIyMCwgODgsIAorICAgIDI0NSwgMzgsIDk4LCA2LCAxLCAyNTQsIDEzMSwgOTgsIDYsIDEsIDI1MiwgMTYwLCA5OCwgNiwgMSwgMjQzLCAxMTMsIDk4LCAKKyAgICA2LCAxLCAyNDcsIDEzNiwgOTgsIDYsIDEsIDI0NSwgMTU4LCA5OCwgNiwgMSwgMjEzLCAxNjAsIDk4LCA2LCAxLCAyMTAsIAorICAgIDg5LCA5OCwgNiwgMSwgMjE3LCA2MSwgOTgsIDYsIDEsIDIzNiwgNiwgOTgsIDYsIDEsIDIzNCwgMjQwLCA5OCwgNiwgMSwgCisgICAgMjMzLCA4NywgOTgsIDYsIDEsIDIzMSwgMTkwLCA5OCwgNiwgMSwgMjI5LCAyMDAsIDk4LCA2LCAxLCAyMjYsIDIwMCwgOTgsIAorICAgIDYsIDEsIDIyNiwgMjEsIDk4LCA2LCAxLCAyMTAsIDc4LCA5OCwgNiwgMSwgMjIzLCAxNzQsIDk4LCA2LCAxLCAyMjEsIDI0NSwgCisgICAgOTgsIDYsIDEsIDIxNywgNTEsIDk4LCA2LCAxLCAyMTQsIDE5MCwgOTgsIDYsIDEsIDIyNSwgMTQzLCA5OCwgNiwgMSwgMjM0LCAKKyAgICAxMjcsIDk4LCA2LCAxLCAyNDIsIDI0OCwgOTgsIDYsIDEsIDIyNCwgNzYsIDk4LCA2LCAxLCAyMjAsIDIyLCA5OCwgNiwgMSwgCisgICAgMjUwLCAxMDUsIDk4LCA2LCAxLCAyNTEsIDE1LCA5OCwgNiwgMSwgMjM1LCAxMDYsIDk4LCA2LCAxLCAyNTAsIDQ4LCA5OCwgCisgICAgNiwgMSwgMjUwLCAxNTEsIDk4LCA2LCAxLCAyMTEsIDE2MywgOTgsIDYsIDEsIDIzNSwgMTE3LCA5OCwgNiwgMSwgMjQyLCAKKyAgICA1MCwgOTgsIDYsIDEsIDI0MSwgMjQ1LCA5OCwgNiwgMSwgMjQxLCAxODIsIDk4LCA2LCAxLCAyMTIsIDIyLCA5OCwgNiwgMSwgCisgICAgMjQyLCAxMSwgOTgsIDYsIDEsIDI0MSwgNzIsIDk4LCA2LCAxLCAyMTAsIDI0NiwgOTgsIDYsIDEsIDI1NCwgMjQxLCA5OCwgCisgICAgMSwgMjU0LCAxMzEsIDk4LCAxLCAyNTIsIDE2MCwgOTgsIDEsIDI0MywgMTEzLCA5OCwgMSwgMjQ3LCAxMzYsIDk4LCAxLCAKKyAgICAyNDUsIDE1OCwgOTgsIDEsIDIxMywgMTYwLCA5OCwgMSwgMjEwLCA4OSwgOTgsIDEsIDIxNywgNjEsIDk4LCAxLCAyMzYsIDYsIAorICAgIDk4LCAxLCAyMzQsIDI0MCwgOTgsIDEsIDIzMywgODcsIDk4LCAxLCAyMzEsIDE5MCwgOTgsIDEsIDIyOSwgMjAwLCA5OCwgMSwgCisgICAgMjI2LCAyMDAsIDk4LCAxLCAyMjYsIDIxLCA5OCwgMSwgMjEwLCA3OCwgOTgsIDEsIDIyMywgMTc0LCA5OCwgMSwgMjIxLCAKKyAgICAyNDUsIDk4LCAxLCAyMTcsIDUxLCA5OCwgMSwgMjE0LCAxOTAsIDk4LCAxLCAyMjUsIDE0MywgOTgsIDEsIDIzNCwgMTI3LCAKKyAgICA5OCwgMSwgMjQyLCAyNDgsIDk4LCAxLCAyMjQsIDc2LCA5OCwgMSwgMjIwLCAyMiwgOTgsIDEsIDI1MCwgMTA1LCA5OCwgMSwgCisgICAgMjUxLCAxNSwgOTgsIDEsIDIzNSwgMTA2LCA5OCwgMSwgMjUwLCA0OCwgOTgsIDEsIDI1MCwgMTUxLCA5OCwgMSwgMjExLCAKKyAgICAxNjMsIDk4LCAxLCAyMzUsIDExNywgOTgsIDEsIDI0MiwgNTAsIDk4LCAxLCAyNDEsIDI0NSwgOTgsIDEsIDI0MSwgMTgyLCAKKyAgICA5OCwgMSwgMjEyLCAyMiwgOTgsIDEsIDI0MiwgMTEsIDk4LCAxLCAyNDEsIDcyLCA5OCwgMSwgMjQ0LCAxMjksIDk4LCAxLCAKKyAgICAyMTAsIDI0NiwgOTgsIDEsIDI0NSwgMTczLCA5OCwgMSwgMjE1LCA5NCwgMjQzLCAxMTMsIDk4LCAxLCAyNTQsIDIwNSwgOTgsIAorICAgIDIyNiwgMTksIDIyMCwgMTM5LCA1OCwgMSwgOTgsIDIyOSwgMjAwLCA5OCwgMSwgMjU0LCAyNDEsIDk4LCAxLCAyNDIsIDEwLCAKKyAgICA1MCwgOTgsIDEsIDIzMywgMTMzLCA1MCwgMjQsIDEwMCwgMjM0LCA2NCwgMjQsIDEwMCwgMjE4LCAyMTcsIDI0LCAxMDAsIAorICAgIDIyOCwgMjMxLCAyNCwgMTAwLCAyMTYsIDEwMiwgMjQsIDEwMCwgMjE4LCAyMDYsIDI0LCAxMDAsIDIyMywgMjksIDI0LCAKKyAgICAxMDAsIDIzMCwgMjIyLCAyNCwgMTAwLCAyMjUsIDk4LCAyNCwgMTAwLCAyMTgsIDIxNCwgMjQsIDEwMCwgMjE5LCAxNTAsIAorICAgIDI0LCAxMDAsIDIxOCwgMjExLCAyNCwgMTAwLCAyMzYsIDYzLCAyNCwgMTAwLCAyNTAsIDU0LCAyNCwgMTAwLCAyMTgsIDIyMSwgCisgICAgMjQsIDEwMCwgMjUwLCAxMTQsIDI0LCAxMDAsIDIzNCwgMTE2LCAyNCwgMTAwLCAyMTYsIDE3NCwgMjQsIDEwMCwgMjI1LCAKKyAgICAxMzQsIDI0LCAxMDAsIDI0MSwgMTc5LCAyNCwgMTAwLCAyMjgsIDIyNywgMjQsIDEwMCwgMjE4LCAyMTUsIDI0LCAxMDAsIAorICAgIDIyOCwgMjIxLCAyNCwgMTAwLCAyMjgsIDIyNSwgMjQsIDEwMCwgMjE2LCA5OSwgMjQsIDEwMCwgMjIzLCAxNywgMjQsIDEwMCwgCisgICAgMjE4LCAyMTMsIDI0LCAxMDAsIDIyMywgMjcsIDI0LCAxMDAsIDIzNCwgMjI0LCAyNCwgMTAwLCAyMzAsIDIxNSwgMjQsIAorICAgIDEwMCwgMjM0LCAyMjcsIDI0LCAxMDAsIDIyNSwgOTMsIDI0LCAxMDAsIDIyNSwgOTEsIDI0LCAxMDAsIDIyNSwgNzksIDI0LCAKKyAgICAxMDAsIDIyNSwgODcsIDI0LCAxMDAsIDIyNSwgODUsIDI0LCAxMDAsIDIyNSwgODIsIDI0LCAxMDAsIDIyNSwgODQsIDI0LCAKKyAgICAxMDAsIDIyNSwgODEsIDI0LCAxMDAsIDIyNSwgODYsIDI0LCAxMDAsIDIyNSwgOTYsIDI0LCAxMDAsIDIyNSwgOTcsIDI0LCAKKyAgICAxMDAsIDIyNSwgODAsIDI0LCAxMDAsIDIyNSwgOTAsIDI0LCAxMDAsIDIzNCwgMjI1LCAyNCwgMTAwLCAyMzQsIDIyMywgMjQsIAorICAgIDEwMCwgMjE5LCAxNDMsIDI0LCAxMDAsIDIxOSwgMTQxLCAyNCwgMTAwLCAyMTksIDEzMywgMjQsIDEwMCwgMjE5LCAxMzYsIAorICAgIDI0LCAxMDAsIDIxOSwgMTQyLCAyNCwgMTAwLCAyMTksIDEzOCwgMjQsIDEwMCwgMjE5LCAxMzcsIDI0LCAxMDAsIDIxOSwgCisgICAgMTM1LCAyNCwgMTAwLCAyMTksIDE0NiwgMjQsIDEwMCwgMjE5LCAxNDgsIDI0LCAxMDAsIDIxOSwgMTQ5LCAyNCwgMTAwLCAKKyAgICAyMTksIDE0NCwgMjQsIDEwMCwgMjE5LCAxMzQsIDI0LCAxMDAsIDIxOSwgMTM5LCAyNCwgMTAwLCAyMTksIDE0NywgMjQsIAorICAgIDEwMCwgMjUwLCA5OCwgMjQsIDEwMCwgMjUwLCA5NiwgMjQsIDEwMCwgMjUwLCAxNzYsIDI0LCAxMDAsIDI1MCwgMTc0LCAyNCwgCisgICAgMTAwLCAyMjYsIDM2LCAyNCwgMTAwLCAyMzYsIDU4LCAyNCwgMTAwLCAyMzYsIDQ5LCAyNCwgMTAwLCAyMzYsIDU3LCAyNCwgCisgICAgMTAwLCAyMzYsIDU0LCAyNCwgMTAwLCAyMzYsIDUyLCAyNCwgMTAwLCAyMzYsIDU2LCAyNCwgMTAwLCAyMTgsIDIxOCwgMjQsIAorICAgIDEwMCwgMjM2LCA2MSwgMjQsIDEwMCwgMjM2LCA2MiwgMjQsIDEwMCwgMjM2LCA1MCwgMjQsIDEwMCwgMjM2LCA1NSwgMjQsIAorICAgIDEwMCwgMjExLCAyNiwgMjQsIDEwMCwgMjUwLCA1MywgMjQsIDEwMCwgMjUwLCA5OSwgMjQsIDEwMCwgMjUwLCA5NywgMjQsIAorICAgIDEwMCwgMjUwLCAxNzcsIDI0LCAxMDAsIDI1MCwgMTc1LCAyNCwgMTAwLCAyNTAsIDExMiwgMjQsIDEwMCwgMjUwLCAxMTMsIAorICAgIDI0LCAxMDAsIDI1MCwgMTAwLCAyNCwgMTAwLCAyNTAsIDE3OCwgMjQsIDEwMCwgMjI1LCAxMzIsIDI0LCAxMDAsIDIzNCwgCisgICAgMjI2LCAyNCwgMTAwLCAyMTgsIDIxOSwgMjQsIDEwMCwgMjExLCAzMiwgMjQsIDEwMCwgMjM0LCA1NSwgMjQsIDEwMCwgMjI4LCAKKyAgICAyMjMsIDI0LCAxMDAsIDIyOCwgMjI5LCAyNCwgMTAwLCAyMjgsIDIyOCwgMjQsIDEwMCwgMjE2LCA5NiwgMjQsIDEwMCwgCisgICAgMjQ0LCAxMTEsIDI0LCAxNDMsIDI0NCwgMTExLCAyNCwgMTQzLCA2MSwgMjQsIDE0MywgMjU0LCAyNTIsIDI0LCAxNDMsIAorICAgIDE5MiwgMjQsIDE0MywgMjExLCA5MiwgMjQsIDE0MywgMjQ1LCAxMjUsIDI0LCAxNDMsIDc2LCAyNCwgMTQzLCAyMTEsIDM2LCAKKyAgICAyNCwgMTQzLCAyMTEsIDQ3LCAyNCwgMTQzLCA3OCwgMjQsIDE0MywgMjEyLCA2NSwgMjQsIDE0MywgMjEyLCA2MiwgMjQsIAorICAgIDE0MywgMjI2LCAyMzgsIDI0LCAxNDMsIDIxMCwgMjQ0LCAyNCwgMTQzLCA2OSwgMjQsIDE0MywgMjEyLCAxMSwgMjQsIDE0MywgCisgICAgMjEyLCAyMiwgMjQsIDE0MywgMjExLCAyNTAsIDI0LCAxNDMsIDIxMCwgMjEyLCAyNCwgMTQzLCAyNDUsIDYzLCAyNCwgMTQzLCAKKyAgICAyMTEsIDgsIDI0LCAxNDMsIDc0LCAyNCwgMTQzLCAyNTUsIDE2NiwgMjQsIDE0MywgMjU1LCAxNjUsIDI0LCAxNDMsIDIxMSwgCisgICAgMTA2LCAyNCwgMTQzLCAyMTEsIDEwNCwgMjQsIDE0MywgMjQ1LCAxMjMsIDI0LCAxNDMsIDI0NSwgMTIyLCAyNCwgMTQzLCAKKyAgICAyNDUsIDEyNCwgMjQsIDE0MywgMjExLCAzNSwgMjQsIDE0MywgMjExLCAzNCwgMjQsIDE0MywgMjI3LCA4OCwgMjQsIDE0MywgCisgICAgMjI3LCA4OSwgMjQsIDE0MywgMjI3LCA4MiwgMjQsIDE0MywgMjI3LCA4NywgMjQsIDE0MywgMjI3LCA4NSwgMjQsIDE0MywgCisgICAgMjEwLCAyMzgsIDI0LCAxNDMsIDIxMCwgMjM3LCAyNCwgMTQzLCAyMTAsIDIzNiwgMjQsIDE0MywgMjEwLCAyMzksIDI0LCAKKyAgICAxNDMsIDIxMCwgMjQwLCAyNCwgMTQzLCAyMTUsIDMwLCAyNCwgMTQzLCAyMTUsIDI5LCAyNCwgMTQzLCAyMTUsIDI3LCAyNCwgCisgICAgMTQzLCAyMTUsIDI0LCAyNCwgMTQzLCAyMTUsIDI1LCAyNCwgMTQzLCAyMTAsIDIxMSwgMjQsIDE0MywgMjEwLCAyMDgsIDI0LCAKKyAgICAxNDMsIDIxMCwgMjA5LCAyNCwgMTQzLCAyMTAsIDIwMywgMjQsIDE0MywgMjEwLCAyMDQsIDI0LCAxNDMsIDIxMCwgMjA1LCAKKyAgICAyNCwgMTQzLCAyMTAsIDIwNywgMjQsIDE0MywgMjQ1LCA1NywgMjQsIDE0MywgMjQ1LCA1OSwgMjQsIDE0MywgMjExLCA3LCAKKyAgICAyNCwgMTQzLCAyNDAsIDE2MCwgMjQsIDE0MywgMjQwLCAxNTIsIDI0LCAxNDMsIDI0MCwgMTU1LCAyNCwgMTQzLCAyNDAsIAorICAgIDE1MywgMjQsIDE0MywgMjQwLCAxNTcsIDI0LCAxNDMsIDI0MCwgMTU5LCAyNCwgMTQzLCAyNTQsIDQyLCAyNCwgMTQzLCAKKyAgICAyNTQsIDM5LCAyNCwgMTQzLCAyNTQsIDM3LCAyNCwgMTQzLCAyNTQsIDM4LCAyNCwgMTQzLCAyMTgsIDIyMiwgMjQsIDE0MywgCisgICAgMjU1LCAxNjcsIDI0LCAxNDMsIDIxMSwgMTA1LCAyNCwgMTQzLCAyMTEsIDMzLCAyNCwgMTQzLCAyMjcsIDg0LCAyNCwgMTQzLCAKKyAgICAyMjcsIDgzLCAyNCwgOTAsIDIzNCwgNjQsIDI0LCA5MCwgMjE4LCAyMTcsIDI0LCA5MCwgMjM0LCA1NywgMjQsIDkwLCAyMjgsIAorICAgIDIzMSwgMjQsIDkwLCAyMjgsIDIyOSwgMjQsIDkwLCAyMjgsIDIyOCwgMjQsIDkwLCAyMTYsIDEwMiwgMjQsIDkwLCAyMjMsIAorICAgIDI5LCAyNCwgOTAsIDIyMywgMjQsIDI0LCA5MCwgMjIzLCAyMSwgMjQsIDkwLCAyMjMsIDE0LCAyNCwgOTAsIDIyMywgOSwgCisgICAgMjQsIDkwLCAyMjMsIDQsIDI0LCA5MCwgMjIzLCAxNSwgMjQsIDkwLCAyMjMsIDI3LCAyNCwgOTAsIDIzMCwgMjIyLCAyNCwgCisgICAgOTAsIDIyNSwgOTgsIDI0LCA5MCwgMjI1LCA4NywgMjQsIDkwLCAyMTksIDE1MCwgMjQsIDkwLCAyMTgsIDIxMSwgMjQsIDkwLCAKKyAgICAyMzYsIDYzLCAyNCwgOTAsIDI1MCwgNTQsIDI0LCA5MCwgMjUwLCAxMTQsIDI0LCA5MCwgMjM0LCAxMTYsIDI0LCA5MCwgCisgICAgMjE2LCAxNzQsIDI0LCA5MCwgMjI1LCAxMzQsIDI0LCA5MCwgMjQxLCAxNzksIDI0LCA5MCwgMjM0LCA1OCwgMjQsIDkwLCAKKyAgICAyMzQsIDU2LCAyNCwgOTAsIDIyOCwgMjI3LCAyNCwgOTAsIDIyOCwgMjIxLCAyNCwgOTAsIDIyOCwgMjIzLCAyNCwgOTAsIAorICAgIDIyOCwgMjI2LCAyNCwgOTAsIDIyOCwgMjIyLCAyNCwgOTAsIDIxNiwgOTksIDI0LCA5MCwgMjE2LCA5NiwgMjQsIDkwLCAKKyAgICAyMjMsIDIyLCAyNCwgOTAsIDIyMywgMTcsIDI0LCA5MCwgMjIzLCAzLCAyNCwgOTAsIDIyMywgMiwgMjQsIDkwLCAyMTgsIAorICAgIDIxMywgMjQsIDkwLCAyMjMsIDE5LCAyNCwgOTAsIDIyMywgMTgsIDI0LCA5MCwgMjIzLCAxMSwgMjQsIDkwLCAyMjMsIDEzLCAKKyAgICAyNCwgOTAsIDIyMywgMjYsIDI0LCA5MCwgMjIzLCA2LCAyNCwgOTAsIDIyMywgMTYsIDI0LCA5MCwgMjIzLCAyNSwgMjQsIAorICAgIDkwLCAyMjMsIDEsIDI0LCA5MCwgMjMwLCAyMTgsIDI0LCA5MCwgMjMwLCAyMTMsIDI0LCA5MCwgMjMwLCAyMTUsIDI0LCA5MCwgCisgICAgMjMwLCAyMTIsIDI0LCA5MCwgMjMwLCAyMTAsIDI0LCA5MCwgMjMwLCAyMTYsIDI0LCA5MCwgMjMwLCAyMjEsIDI0LCA5MCwgCisgICAgMjMwLCAyMTksIDI0LCA5MCwgMjM0LCAyMjcsIDI0LCA5MCwgMjI1LCA4OSwgMjQsIDkwLCAyMjUsIDkwLCAyNCwgOTAsIAorICAgIDIyNSwgOTUsIDI0LCA5MCwgMjM0LCAyMjUsIDI0LCA5MCwgMjE5LCAxNDMsIDI0LCA5MCwgMjE5LCAxMzMsIDI0LCA5MCwgCisgICAgMjE5LCAxMzYsIDI0LCA5MCwgMjE5LCAxMzgsIDI0LCA5MCwgMjI2LCAzNiwgMjQsIDkwLCAyMzYsIDU4LCAyNCwgOTAsIAorICAgIDIzNiwgNTEsIDI0LCA5MCwgMjE4LCAyMTgsIDI0LCA5MCwgMjM2LCA1OSwgMjQsIDkwLCAyMTEsIDI2LCAyNCwgOTAsIDIxMSwgCisgICAgMjIsIDI0LCA5MCwgMjExLCAyMywgMjQsIDkwLCAyMjUsIDEzMiwgMjQsIDkwLCAyMzQsIDIyNiwgMjQsIDkwLCAyNDEsIAorICAgIDE3NywgMjQsIDkwLCAyNDEsIDE3NSwgMjQsIDkwLCAyNDEsIDE3OCwgMjQsIDkwLCAyNDEsIDE3NiwgMjQsIDkwLCAyMTEsIAorICAgIDMyLCAyNCwgOTAsIDIzNCwgNjAsIDI0LCA5MCwgMjM0LCA1OSwgMjQsIDkwLCAyMzQsIDYzLCAyNCwgOTAsIDIzNCwgNjEsIAorICAgIDI0LCA5MCwgMjM0LCA2MiwgMjQsIDkwLCAyMTgsIDIxNSwgMjksIDMsIDE2MiwgMjksIDMsIDI0MCwgMjI5LCAyOSwgMywgCisgICAgMjQxLCAxODcsIDI5LCAzLCAyNDIsIDUzLCAyOSwgMywgMjQxLCAyMjcsIDI5LCAzLCAyNDEsIDI0NSwgMjksIDMsIDI0MSwgCisgICAgNzUsIDI5LCAzLCAyNDEsIDc0LCAyOSwgMywgMjMzLCAxNDEsIDI5LCAzLCAyMzIsIDEwMywgMjksIDMsIDIzMiwgMjQ3LCAKKyAgICAyOSwgMywgMjMzLCAxNDAsIDI5LCAzLCAyMzMsIDU2LCAyOSwgMywgMjMzLCA2NCwgMjksIDMsIDIzMiwgMTYyLCAyOSwgMywgCisgICAgMjMyLCA3NSwgMjksIDMsIDI0MSwgMTk2LCAyOSwgMywgMjQxLCAxOTAsIDI5LCAzLCAyNDEsIDE5MiwgMjksIDMsIDI0MSwgCisgICAgMTk1LCAyOSwgMywgMjQxLCAxOTMsIDI5LCAzLCAyNDEsIDE5NCwgMjksIDMsIDI0MSwgMTkxLCAyOSwgMywgMjQxLCAxODksIAorICAgIDI5LCAzLCAxODYsIDI5LCAzLCAyMzAsIDEwNywgMjksIDMsIDIzMCwgMjM1LCAyOSwgMywgMjMxLCAyNDIsIDI5LCAzLCAKKyAgICAyMzEsIDg1LCAyOSwgMywgMjMxLCA5NiwgMjksIDMsIDIzMCwgMTY2LCAyOSwgMywgMjMwLCA0NywgMjksIDMsIDIxNywgCisgICAgMTY0LCAyOSwgMywgMjE3LCAxNTgsIDI5LCAzLCAyMTcsIDE2MCwgMjksIDMsIDIxNywgMTYzLCAyOSwgMywgMjE3LCAxNjEsIAorICAgIDI5LCAzLCAyMTcsIDE2MiwgMjksIDMsIDIxNywgMTU5LCAyOSwgMywgMjE3LCAxNTcsIDI5LCAzLCAyMDUsIDI5LCAzLCAKKyAgICAyMjIsIDE0MiwgMjksIDMsIDIyMywgMzgsIDI5LCAzLCAyMjMsIDE4NywgMjksIDMsIDIyMywgMTExLCAyOSwgMywgMjIzLCAKKyAgICAxMzEsIDI5LCAzLCAyMjIsIDIxMywgMjksIDMsIDIyMiwgMTExLCAyOSwgMywgMjA2LCAyOSwgMywgMjE4LCA4NCwgMjksIDMsIAorICAgIDIxOSwgMTkzLCAyOSwgMywgMjIyLCAzMywgMjksIDMsIDIyMSwgMTcyLCAyOSwgMywgMjIxLCAxODMsIDI5LCAzLCAyMTksIAorICAgIDYwLCAyOSwgMywgMjE3LCAyNTQsIDI5LCAzLCAyMjAsIDEwNCwgMjksIDMsIDIxOSwgMjI3LCAyOSwgMywgMjIwLCAzNCwgCisgICAgMjksIDMsIDIyMCwgMTAwLCAyOSwgMywgMjIwLCA2MywgMjksIDMsIDIyMCwgNjUsIDI5LCAzLCAyMjAsIDksIDI5LCAzLCAKKyAgICAyMTksIDIxMCwgMjksIDMsIDIyNCwgOTEsIDI5LCAzLCAyMjQsIDMzLCAyOSwgMywgMjI0LCA1NiwgMjksIDMsIDIyNCwgOTAsIAorICAgIDI5LCAzLCAyMjQsIDcxLCAyOSwgMywgMjI0LCA3MiwgMjksIDMsIDIyNCwgNDUsIDI5LCAzLCAyMjQsIDQ0LCAyOSwgMywgCisgICAgMjIzLCAyNDUsIDI5LCAzLCAyMjMsIDI0MSwgMjksIDMsIDIyMywgMjQ0LCAyOSwgMywgMjIzLCAyNDIsIDI5LCAzLCAyMjMsIAorICAgIDI0MywgMjksIDMsIDIyNCwgNjgsIDI5LCAzLCAyMjQsIDYyLCAyOSwgMywgMjI0LCA2NCwgMjksIDMsIDIyNCwgNjcsIDI5LCAKKyAgICAzLCAyMjQsIDY1LCAyOSwgMywgMjI0LCA2NiwgMjksIDMsIDIyNCwgNjMsIDI5LCAzLCAyMjQsIDYxLCAyOSwgMywgMjI0LCAKKyAgICA1NywgMjksIDMsIDIyNCwgNjAsIDI5LCAzLCAyMjQsIDU4LCAyOSwgMywgMjI0LCA1OSwgMjksIDMsIDI1MiwgMTk5LCAyOSwgCisgICAgMywgMjUxLCAxMzMsIDI5LCAzLCAyNTIsIDE0LCAyOSwgMywgMjUyLCAxOTcsIDI5LCAzLCAyNTIsIDc0LCAyOSwgMywgMjUyLCAKKyAgICA4MywgMjksIDMsIDI1MSwgMjEzLCAyOSwgMywgMjUxLCA5MSwgMjksIDMsIDIxNCwgMjcsIDI5LCAzLCAyMTIsIDExNiwgMjksIAorICAgIDMsIDIxMywgMTc2LCAyOSwgMywgMjE0LCAyNiwgMjksIDMsIDIxMywgMjUwLCAyOSwgMywgMjEzLCAyNTUsIDI5LCAzLCAKKyAgICAyMTMsIDEzOCwgMjksIDMsIDIxMiwgMTA3LCAyOSwgMywgMjE3LCAxMDYsIDI5LCAzLCAyMTUsIDExOSwgMjksIDMsIDIxNiwgCisgICAgMTE4LCAyOSwgMywgMjE3LCAxMDIsIDI5LCAzLCAyMTcsIDEyLCAyOSwgMywgMjE3LCAyMywgMjksIDMsIDExMiwgMjksIDMsIAorICAgIDIxNSwgODAsIDI5LCAzLCAyNTEsIDQxLCAyOSwgMywgMjQ5LCAxMjAsIDI5LCAzLCAyNTAsIDU5LCAyOSwgMywgMjUxLCA0MCwgCisgICAgMjksIDMsIDI1MCwgMTkwLCAyOSwgMywgMjUwLCAxOTgsIDI5LCAzLCAyNDksIDI0NiwgMjksIDMsIDI0OSwgODksIDI5LCAzLCAKKyAgICAyMTEsIDE2NSwgMjksIDMsIDIxMSwgMTQxLCAyOSwgMywgMjExLCAxNTcsIDI5LCAzLCAyMTEsIDE2NCwgMjksIDMsIDIxMSwgCisgICAgMTYxLCAyOSwgMywgMjExLCAxNjIsIDI5LCAzLCAyMTEsIDE0OCwgMjksIDMsIDIxMSwgMTQ3LCAyOSwgMywgMjExLCAxMzYsIAorICAgIDI5LCAzLCAyMTEsIDEzMiwgMjksIDMsIDIxMSwgMTM1LCAyOSwgMywgMjExLCAxMzMsIDI5LCAzLCAyMTEsIDEzNCwgMjksIAorICAgIDMsIDE5OCwgMjksIDMsIDIyNywgMjQyLCAyOSwgMywgMjI4LCAyMzgsIDI5LCAzLCAyMjksIDIzMCwgMjksIDMsIDIyOSwgCisgICAgMTA4LCAyOSwgMywgMjI5LCAxMTIsIDI5LCAzLCAyMjgsIDc5LCAyOSwgMywgMjI3LCAxNzgsIDI5LCAzLCAyMjcsIDE2OSwgCisgICAgMjksIDMsIDIyNywgMTMyLCAyOSwgMywgMjI3LCAxNTIsIDI5LCAzLCAyMjcsIDE2OCwgMjksIDMsIDIyNywgMTU5LCAyOSwgCisgICAgMywgMjI3LCAxNjAsIDI5LCAzLCAyMjcsIDEzOCwgMjksIDMsIDIyNywgMTIzLCAyOSwgMywgMjQyLCAxODcsIDYxLCAyOSwgCisgICAgMywgMjQyLCAxODcsIDY5LCAyOSwgMywgMjQyLCAxODcsIDc0LCAyOSwgMywgMjQyLCAxODcsIDI1NSwgODIsIDI5LCAzLCAKKyAgICAyNDIsIDE4NywgMjQ1LCAyMTcsIDI5LCAzLCAyNDIsIDE4NywgNzYsIDI5LCAzLCAyNDIsIDE4NywgNzgsIDI5LCAzLCAyNDIsIAorICAgIDE4NywgMjEyLCA2NSwgMjksIDMsIDE3NiwgMjksIDMsIDIzMywgMjIzLCAyOSwgMywgMjM0LCA5OCwgMjksIDMsIDIzNSwgCisgICAgMTYsIDI5LCAzLCAyMzQsIDE4NywgMjksIDMsIDIzNCwgMTg4LCAyOSwgMywgMjM0LCAzNCwgMjksIDMsIDIzNCwgMzMsIDI5LCAKKyAgICAzLCAyMzMsIDE4OCwgMjksIDMsIDIzMywgMTgyLCAyOSwgMywgMjMzLCAxODcsIDI5LCAzLCAyMzMsIDE4MywgMjksIDMsIAorICAgIDIzMywgMTg0LCAyOSwgMywgMjMzLCAxNzcsIDI5LCAzLCAyMzMsIDE3MSwgMjksIDMsIDIzMywgMTczLCAyOSwgMywgMjMzLCAKKyAgICAxNzYsIDI5LCAzLCAyMzMsIDE3NCwgMjksIDMsIDIzMywgMTc1LCAyOSwgMywgMjMzLCAxNzIsIDI5LCAzLCAyMzMsIDE3MCwgCisgICAgMjksIDMsIDIzMywgMTY2LCAyOSwgMywgMjMzLCAxNjksIDI5LCAzLCAyMzMsIDE2NywgMjksIDMsIDIzMywgMTY4LCAyOSwgCisgICAgMywgMjEyLCA2NSwgMjksIDMsIDIxMSwgMTk1LCAyOSwgMywgMjExLCAyNTAsIDI5LCAzLCAyMTIsIDY0LCAyOSwgMywgMjEyLCAKKyAgICAxNywgMjksIDMsIDIxMiwgMjIsIDI5LCAzLCAyMTEsIDIyNywgMjksIDMsIDIxMSwgMjI2LCAyOSwgMywgMjI1LCAxNDIsIAorICAgIDYxLCAyOSwgMywgMjI1LCAxNDIsIDY5LCAyOSwgMywgMjI1LCAxNDIsIDc0LCAyOSwgMywgMjI1LCAxNDIsIDI1NSwgODIsIAorICAgIDI5LCAzLCAyMjUsIDE0MiwgMjQ1LCAyMTcsIDI5LCAzLCAyMjUsIDE0MiwgNzYsIDI5LCAzLCAyMjUsIDE0MiwgNzgsIDI5LCAKKyAgICAzLCAyMTAsIDExNiwgMjksIDMsIDIxMCwgMTMsIDI5LCAzLCAyMTAsIDQ0LCAyOSwgMywgMjEwLCAxMTUsIDI5LCAzLCAyMTAsIAorICAgIDkyLCAyOSwgMywgMjEwLCA5NCwgMjksIDMsIDIxMCwgMjMsIDI5LCAzLCAyMTAsIDAsIDI5LCAzLCAyMTAsIDgyLCAyOSwgMywgCisgICAgMjEwLCA2MiwgMjksIDMsIDIxMCwgNjksIDI5LCAzLCAyMTAsIDgxLCAyOSwgMywgMjEwLCA3MywgMjksIDMsIDIxMCwgNzQsIAorICAgIDI5LCAzLCAyMTAsIDY3LCAyOSwgMywgMjEwLCA1MywgMjksIDMsIDE5MiwgMjksIDMsIDIxMCwgMjEyLCAyOSwgMywgMjExLCAKKyAgICA4LCAyOSwgMywgMjExLCAxMDMsIDI5LCAzLCAyMTEsIDQ0LCAyOSwgMywgMjExLCA0NywgMjksIDMsIDIxMCwgMjQ0LCAyOSwgCisgICAgMywgMjEwLCAyMzUsIDI5LCAzLCAyNDgsIDIyOSwgMjksIDMsIDI0NiwgODYsIDI5LCAzLCAyNDgsIDExLCAyOSwgMywgMjQ4LCAKKyAgICAyMjgsIDI5LCAzLCAyNDgsIDg1LCAyOSwgMywgMjQ4LCA5OCwgMjksIDMsIDI0NywgMTUzLCAyOSwgMywgMjQ2LCA1NSwgMjksIAorICAgIDMsIDI0OCwgMTQzLCAyOSwgMywgMjQ4LCAxMDgsIDI5LCAzLCAyNDgsIDEyMCwgMjksIDMsIDI0OCwgMTQyLCAyOSwgMywgCisgICAgMjQ4LCAxMzAsIDI5LCAzLCAyNDgsIDEzMSwgMjksIDMsIDI0OCwgMTEzLCAyOSwgMywgMjQ4LCA5OSwgMjksIDMsIDIzNSwgCisgICAgMTQ3LCAyOSwgMywgMjM1LCA1NywgMjksIDMsIDIzNSwgMTE0LCAyOSwgMywgMjM1LCAxNDYsIDI5LCAzLCAyMzUsIDEzMCwgCisgICAgMjksIDMsIDIzNSwgMTMyLCAyOSwgMywgMjM1LCA3NCwgMjksIDMsIDIzNSwgMzcsIDI5LCAzLCAyNDMsIDE0MiwgMjksIDMsIAorICAgIDI0MiwgMTIwLCAyOSwgMywgMjQyLCAyMjEsIDI5LCAzLCAyNDMsIDEzOSwgMjksIDMsIDI0MywgNjIsIDI5LCAzLCAyNDMsIAorICAgIDY5LCAyOSwgMywgMjQyLCAxODEsIDI5LCAzLCAyNDIsIDE4MCwgMjksIDMsIDI0MiwgODUsIDI5LCAzLCAyNDIsIDgxLCAyOSwgCisgICAgMywgMjQyLCA4NCwgMjksIDMsIDI0MiwgODIsIDI5LCAzLCAyNDIsIDgzLCAyOSwgMywgMjQzLCAzNiwgMjksIDMsIDI0MywgCisgICAgMTYsIDI5LCAzLCAyNDMsIDI2LCAyOSwgMywgMjQzLCAzNSwgMjksIDMsIDI0MywgMzAsIDI5LCAzLCAyNDMsIDMxLCAyOSwgCisgICAgMywgMjQzLCAyMCwgMjksIDMsIDI0MywgNSwgMjksIDMsIDIxNiwgMjA5LCAyOSwgMywgMjE2LCAxMzcsIDI5LCAzLCAyMTYsIAorICAgIDE3NiwgMjksIDMsIDIxNiwgMjA4LCAyOSwgMywgMjE2LCAxOTUsIDI5LCAzLCAyMTYsIDE5NiwgMjksIDMsIDIxNiwgMTU3LCAKKyAgICAyOSwgMywgMjE2LCAxMjksIDI5LCAzLCAyNTAsIDE2NSwgMjksIDMsIDI1MCwgNzcsIDI5LCAzLCAyNTAsIDExOCwgMjksIDMsIAorICAgIDI1MCwgMTY0LCAyOSwgMywgMjUwLCAxMzYsIDI5LCAzLCAyNTAsIDEzOSwgMjksIDMsIDI1MCwgOTQsIDI5LCAzLCAyNTAsIAorICAgIDY2LCAyOSwgMywgMjI1LCAxNTAsIDI5LCAzLCAyMjUsIDExNywgMjksIDMsIDIyNSwgMTM2LCAyOSwgMywgMjI1LCAxNDksIAorICAgIDI5LCAzLCAyMjUsIDEzOCwgMjksIDMsIDIyNSwgMTM5LCAyOSwgMywgMjI1LCAxMjQsIDI5LCAzLCAyMjUsIDExMywgMjksIAorICAgIDMsIDIxNSwgMTg0LCAyOSwgMywgMjE1LCAxNjQsIDI5LCAzLCAyMTUsIDE2OCwgMjksIDMsIDIxNSwgMTgzLCAyOSwgMywgCisgICAgMjE1LCAxNzgsIDI5LCAzLCAyMTUsIDE3OSwgMjksIDMsIDIxNSwgMTY3LCAyOSwgMywgMjE1LCAxNjIsIDI5LCAzLCAyMTUsIAorICAgIDM5LCAyOSwgMywgMjE1LCAzMSwgMjksIDMsIDIxNSwgMzUsIDI5LCAzLCAyMTUsIDM4LCAyOSwgMywgMjE1LCAzNiwgMjksIAorICAgIDMsIDIxNSwgMzcsIDI5LCAzLCAyMTUsIDMzLCAyOSwgMywgMjE1LCAzMiwgMjksIDMsIDI0NCwgMjA0LCAyOSwgMywgMjQzLCAKKyAgICAyNDEsIDI5LCAzLCAyNDQsIDEyOSwgMjksIDMsIDI0NCwgMjAzLCAyOSwgMywgMjQ0LCAxNTUsIDI5LCAzLCAyNDQsIDE2MiwgCisgICAgMjksIDMsIDI0NCwgNTEsIDI5LCAzLCAyNDMsIDIyMCwgMjksIDMsIDE5MSwgMjksIDMsIDIyNCwgMTUzLCAyOSwgMywgMjI1LCAKKyAgICAxMTEsIDI5LCAzLCAyMjYsIDkzLCAyOSwgMywgMjI1LCAyMTQsIDI5LCAzLCAyMjUsIDIyNCwgMjksIDMsIDIyNSwgMTksIAorICAgIDI5LCAzLCAyMjQsIDExNywgMjksIDMsIDIyMiwgMTAxLCAyOSwgMywgMjMwLCAzNiwgMjksIDMsIDI0MywgMjE0LCAyOSwgCisgICAgMzgsIDI0MywgNjAsIDIyLCAyNSwgMjMzLCAyOSwgNzksIDI5LCAzOCwgMjUsIDIzMywgMjksIDc5LCAyOSwgMzgsIDI0MywgCisgICAgNjAsIDc5LCAyOSwgMjIxLCAxNzUsIDc5LCAyOSwgMjExLCAyMDgsIDI5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDI5LCAyNDksIAorICAgIDIyNywgMjksIDIyMCwgMTUyLCAyOSwgMjQ5LCAyMzQsIDI5LCAyMjQsIDIwMiwgMjQ5LCAyMzQsIDI5LCAyMjQsIDE2LCA3OSwgCisgICAgMjksIDIyNiwgMTksIDIyMCwgMTM5LCAyOSwgMjEsIDExMSwgMjksIDIxLCAxMDUsIDI5LCAyMSwgMTU4LCAyOSwgMjEsIAorICAgIDE2MSwgMjksIDIxLCAxOTAsIDI5LCAyMSwgMTk1LCAyOSwgMjEsIDE5OSwgMjksIDIxLCAxOTYsIDI5LCAyMSwgMjAxLCAyOSwgCisgICAgNTQsIDIxNiwgMjQ4LCAyOSwgNTQsIDIxNSwgNzMsIDI5LCA1NCwgMjE2LCAxNjMsIDI5LCA1NCwgMjQ0LCAyMywgMjksIDU0LCAKKyAgICAyNDQsIDEyMiwgMjksIDU0LCAyMTksIDExMywgMjksIDU0LCAyMjAsIDExOCwgMjksIDU0LCAyNDUsIDE5MiwgMjksIDU0LCAKKyAgICAyMjgsIDIwMCwgMjksIDU0LCAyNDAsIDIxNywgMjksIDU0LCAyMTYsIDI0OSwgMjE2LCAxNDgsIDI5LCAzLCAyMjEsIDE3OSwgCisgICAgMjMwLCA0NywgMjksIDMsIDIzMCwgNDMsIDI5LCAzLCAyMzAsIDQ0LCAyOSwgMywgMjMwLCA0NSwgMjksIDMsIDIyMSwgMTc5LCAKKyAgICAyNTEsIDkxLCAyOSwgMywgMjUxLCA4OCwgMjksIDMsIDI1MSwgODksIDI5LCAzLCAyNTEsIDkwLCAyOSwgMywgMjIxLCAxNzksIAorICAgIDI0MywgMjIwLCAyOSwgMywgMjQzLCAyMTYsIDI5LCAzLCAyNDMsIDIxNywgMjksIDMsIDI0MywgMjE4LCAyOSwgMywgMjIxLCAKKyAgICAxNzksIDIyNCwgMTE3LCAyOSwgMywgMjI0LCAxMTMsIDI5LCAzLCAyMjQsIDExNCwgMjksIDMsIDIyNCwgMTE1LCAyOSwgCisgICAgMjE2LCAzMiwgMTY0LCAyMTAsIDI0NywgMjksIDIxNiwgMzIsIDE2NCwgMjQ4LCA0OSwgMjksIDIxNiwgMzIsIDE2NCwgMjIyLCAKKyAgICAyNDEsIDI5LCAyMTYsIDMyLCAxNjQsIDIxOSwgMjUzLCAyMjIsIDI0MSwgMjksIDIxNiwgMzIsIDE2NCwgMjQ3LCAyNDMsIAorICAgIDI5LCAyMTYsIDMyLCAxNjQsIDIzNCwgMTcwLCAyOSwgMjE2LCAzMiwgMTY0LCAyNTAsIDEwMiwgMjksIDIxNiwgMzIsIDE2NCwgCisgICAgMjQxLCAxODQsIDI5LCAyMTYsIDMyLCAxNjQsIDI0OCwgNDgsIDI5LCAyMTYsIDMyLCAxNjQsIDIzMywgMjAwLCAxNjksIDEsIAorICAgIDYxLCAxNjksIDEsIDc2LCAxNjksIDEsIDc0LCAxNjksIDEsIDc4LCAxNjksIDEsIDY5LCAxNjksIDEsIDIxNCwgMTA1LCAKKyAgICAxNjksIDEsIDI0MywgMTQyLCAxNjksIDEsIDE3NiwgMTY5LCAxLCAyNDMsIDY5LCAxNjksIDEsIDI0MiwgMjIxLCAxNjksIDEsIAorICAgIDI0MiwgMTgxLCAxNjksIDEsIDI0MiwgMTIwLCAxNjksIDEsIDI0MiwgODYsIDE2OSwgMSwgMTYyLCAxNjksIDEsIDI0MSwgCisgICAgMjQ1LCAxNjksIDEsIDI0MSwgMTg3LCAxNjksIDEsIDI0MSwgNzUsIDE2OSwgMSwgMjQwLCAyMjksIDE2OSwgMSwgMjQwLCAKKyAgICAyMDgsIDE2OSwgMSwgMjMzLCAxNDEsIDE2OSwgMSwgMjMzLCA2NCwgMTY5LCAxLCAyMzIsIDI0NywgMTY5LCAxLCAyMzIsIAorICAgIDE2MiwgMTY5LCAxLCAyMzIsIDEwMywgMTY5LCAxLCAyMzIsIDc2LCAxNjksIDEsIDE4NiwgMTY5LCAxLCAyMzEsIDk2LCAKKyAgICAxNjksIDEsIDIzMCwgMjM1LCAxNjksIDEsIDIzMCwgMTY2LCAxNjksIDEsIDIzMCwgMTA3LCAxNjksIDEsIDE5OCwgMTY5LCAKKyAgICAxLCAyNDEsIDk3LCAxNjksIDEsIDIyOSwgMjE4LCAxNjksIDEsIDIyOSwgMTEyLCAxNjksIDEsIDIyOCwgMjM4LCAxNjksIDEsIAorICAgIDIyOCwgNzksIDE2OSwgMSwgMjI3LCAyNDIsIDE2OSwgMSwgMjI3LCAxODAsIDE2OSwgMSwgMjI0LCAzMiwgMTY5LCAxLCAKKyAgICAyMjQsIDE5LCAxNjksIDEsIDIyNCwgMTIsIDE2OSwgMSwgMjI0LCA0LCAxNjksIDEsIDIyMywgMjQ5LCAxNjksIDEsIDIyMywgCisgICAgMjQ3LCAxNjksIDEsIDIwNiwgMTY5LCAxLCAyMjIsIDkzLCAxNjksIDEsIDIyMSwgMTgzLCAxNjksIDEsIDIxOSwgMTkzLCAKKyAgICAxNjksIDEsIDIxOSwgNjAsIDE2OSwgMSwgMjE4LCA4NCwgMTY5LCAxLCAyMTgsIDMsIDE2OSwgMSwgMjQ4LCAyMjksIDE2OSwgCisgICAgMSwgMjE3LCAxMDYsIDE2OSwgMSwgMjQ4LCA5OCwgMTY5LCAxLCAyMTcsIDIzLCAxNjksIDEsIDI0OCwgMTEsIDE2OSwgMSwgCisgICAgMjE2LCAxMTgsIDE2OSwgMSwgMjQ3LCAxNTMsIDE2OSwgMSwgMjQ2LCA4NiwgMTY5LCAxLCAyNDYsIDU4LCAxNjksIDEsIAorICAgIDI0NywgMTY0LCAxNjksIDEsIDIxNiwgNjAsIDE2OSwgMSwgMjE2LCA1OSwgMTY5LCAxLCAyMTYsIDQ4LCAxNjksIDEsIDIxNiwgCisgICAgNDcsIDE2OSwgMSwgMjE2LCA0NiwgMTY5LCAxLCAyMTYsIDQ1LCAxNjksIDEsIDIxNSwgMTg0LCAxNjksIDEsIDIxNSwgMTc5LCAKKyAgICAxNjksIDEsIDIxNSwgMTY4LCAxNjksIDEsIDIxNSwgMTY3LCAxNjksIDEsIDIxNSwgMTY0LCAxNjksIDEsIDIxNSwgMTYzLCAKKyAgICAxNjksIDEsIDIxMiwgNjUsIDE2OSwgMSwgMjEyLCAyMiwgMTY5LCAxLCAyMTEsIDI1MCwgMTY5LCAxLCAyMTEsIDIyNywgCisgICAgMTY5LCAxLCAyMTEsIDE5NSwgMTY5LCAxLCAyMTEsIDE4MywgMTY5LCAxLCAxOTIsIDE2OSwgMSwgMjExLCA0NywgMTY5LCAxLCAKKyAgICAyMTEsIDgsIDE2OSwgMSwgMjEwLCAyNDQsIDE2OSwgMSwgMjEwLCAyMTIsIDE2OSwgMSwgMjEwLCAxNzcsIDE4LCAxOSwgCisgICAgMjQwLCAxNzUsIDE4LCAxOSwgNzYsIDE4LCAxOSwgMjU1LCA0NiwgMTgsIDE5LCA3NCwgMTgsIDE5LCAyMzYsIDQwLCAxOCwgCisgICAgMTksIDc4LCAxOCwgMTksIDIyNiwgMTg3LCAxOCwgMTksIDIxMSwgMTE2LCAyMjYsIDE4NywgMTgsIDE5LCA3MywgMjQ1LCAKKyAgICAyMTcsIDE4LCAxOSwgNzMsIDc0LCAxOCwgMTksIDYxLCAxOCwgMTksIDI1NSwgODIsIDE4LCAxOSwgMjEyLCAyMiwgMTgsIAorICAgIDE5LCAxNTksIDIxMiwgMjIsIDE4LCAxOSwgMjExLCAyNTAsIDE4LCAxOSwgMTU5LCAyMTEsIDI1MCwgMTgsIDE5LCAyMTEsIAorICAgIDI0MiwgMTgsIDE5LCAxNTksIDIxMSwgMjQyLCAxOCwgMTksIDIxMSwgMjI3LCAxOCwgMTksIDE1OSwgMjExLCAyMjcsIDE4LCAKKyAgICAxOSwgMjExLCAyMTUsIDE4LCAxOSwgMTU5LCAyMTEsIDIxNSwgMTgsIDE5LCAyMjksIDE5NSwgMjExLCAyMTUsIDE4LCAxOSwgCisgICAgMjEyLCA2NSwgMTgsIDE5LCAxNTksIDIxMiwgNjUsIDE4LCAxOSwgMjEyLCA2NCwgMTgsIDE5LCAxNTksIDIxMiwgNjQsIDE4LCAKKyAgICAxOSwgMjI5LCAxOTUsIDIxMiwgNjQsIDE4LCAxOSwgMjU0LCAyMTAsIDE4LCAxOSwgMjExLCAxMTYsIDIxMiwgOTgsIDE4LCAKKyAgICAxOSwgMjQyLCAxODcsIDIxOCwgMTMxLCAxOCwgMTksIDQwLCAxNDIsIDE4LCAxOSwgNDAsIDI0MiwgMTQzLCAxOCwgMTksIAorICAgIDQwLCAyNTEsIDE4MywgMTYzLCAyMjIsIDIzNiwgMTgsIDE5LCA0MCwgMjE2LCAxNSwgMTYzLCAyMjIsIDIzNiwgMTgsIDE5LCAKKyAgICA0MCwgNDQsIDE2MywgMjIyLCAyMzYsIDE4LCAxOSwgNDAsIDIyMiwgMjM2LCAxOCwgMTksIDQwLCA1MiwgMTQyLCAxOCwgMTksIAorICAgIDQwLCA1MiwgMjE5LCAyNTMsIDY3LCAyMTgsIDkyLCAxOCwgMTksIDQwLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDE4LCAxOSwgCisgICAgNDAsIDIxOSwgMjUzLCAyMDMsIDkxLCAxOCwgMTksIDQwLCAyMjUsIDI1LCAxOCwgMTksIDQwLCAxMjQsIDIxNywgODgsIDE4LCAKKyAgICAxOSwgMjQ1LCAxNTgsIDE4LCAxOSwgMjM2LCA2LCAxOCwgMTksIDIyNiwgMjAwLCAxOCwgMTksIDI1NCwgMTMxLCAxOCwgMTksIAorICAgIDIyNSwgMjI0LCAxOCwgMTksIDIyNiwgOTEsIDE4LCAxOSwgMjI1LCAxMTEsIDE4LCAxOSwgMjI1LCA3NCwgMTgsIDE5LCAKKyAgICAyMjUsIDE5LCAxOCwgMTksIDIyNCwgMjUyLCAxOCwgMTksIDIxMSwgMTE2LCAyMjQsIDI1MiwgMTgsIDE5LCA3MywgMjQxLCAKKyAgICAyMjcsIDE4LCAxOSwgNzMsIDI0MSwgMTg3LCAxOCwgMTksIDE5MSwgMTgsIDE5LCAyMjYsIDkzLCAxOCwgMTksIDIyNCwgCisgICAgMTE1LCAxOCwgMTksIDE1OSwgMjI0LCAxMTUsIDE4LCAxOSwgMjI0LCAxMTMsIDE4LCAxOSwgMTU5LCAyMjQsIDExMywgMTgsIAorICAgIDE5LCAyMjQsIDExMiwgMTgsIDE5LCAxNTksIDIyNCwgMTEyLCAxOCwgMTksIDIyNCwgMTEwLCAxOCwgMTksIDE1OSwgMjI0LCAKKyAgICAxMTAsIDE4LCAxOSwgMjI0LCAxMDksIDE4LCAxOSwgMTU5LCAyMjQsIDEwOSwgMTgsIDE5LCAyMjQsIDExNywgMTgsIDE5LCAKKyAgICAxNTksIDIyNCwgMTE3LCAxOCwgMTksIDIyNCwgMTE2LCAxOCwgMTksIDE1OSwgMjI0LCAxMTYsIDE4LCAxOSwgMjExLCAxMTYsIAorICAgIDIyNCwgMTE2LCAxOCwgMTksIDIyNiwgMTA5LCAxOCwgMTksIDE1OSwgMjI2LCAxMDksIDE4LCAxOSwgNzMsIDI0MiwgNjcsIAorICAgIDE4LCAxOSwgMjE3LCAyMywgMTgsIDE5LCAyMTcsIDEwMCwgMTgsIDE5LCAyMTYsIDExOCwgMTgsIDE5LCAyMTYsIDEwNCwgCisgICAgMTgsIDE5LCAxMTIsIDE4LCAxOSwgMjE2LCAxOCwgMTgsIDE5LCAyMTEsIDExNiwgMjE2LCAxOCwgMTgsIDE5LCA3MywgMjQ4LCAKKyAgICA4NSwgMTgsIDE5LCA3MywgMjQ4LCAxMSwgMTgsIDE5LCAyMTcsIDEwNiwgMTgsIDE5LCAyMTcsIDEwMiwgMTgsIDE5LCAyMTUsIAorICAgIDc4LCAxOCwgMTksIDE1OSwgMjE1LCA3OCwgMTgsIDE5LCAyMTUsIDYyLCAxOCwgMTksIDE1OSwgMjE1LCA2MiwgMTgsIDE5LCAKKyAgICAyMTUsIDYxLCAxOCwgMTksIDE1OSwgMjE1LCA2MSwgMTgsIDE5LCAxMDUsIDE4LCAxOSwgMTU5LCAxMDUsIDE4LCAxOSwgCisgICAgMjE1LCA1NCwgMTgsIDE5LCAxNTksIDIxNSwgNTQsIDE4LCAxOSwgMjE1LCA4MCwgMTgsIDE5LCAxNTksIDIxNSwgODAsIDE4LCAKKyAgICAxOSwgMjE1LCA3OSwgMTgsIDE5LCAxNTksIDIxNSwgNzksIDE4LCAxOSwgMjI5LCAxOTUsIDIxNSwgNzksIDE4LCAxOSwgCisgICAgMjE3LCAxNTMsIDE4LCAxOSwgMjE1LCAxNTIsIDE4LCAxOSwgMjE1LCAxMzYsIDE4LCAxOSwgMjE1LCAxMzQsIDE4LCAxOSwgCisgICAgMjE1LCAxNTcsIDE4LCAxOSwgMjM0LCAxODgsIDE4LCAxOSwgMjM1LCAxMywgMTgsIDE5LCAyMzQsIDk4LCAxOCwgMTksIAorICAgIDIzNCwgODksIDE4LCAxOSwgMjM0LCAzNCwgMTgsIDE5LCAyMzQsIDE2LCAxOCwgMTksIDIxMSwgMTE2LCAyMzQsIDE2LCAxOCwgCisgICAgMTksIDE3NiwgMTgsIDE5LCAyMzUsIDE2LCAxOCwgMTksIDIzMywgMTg0LCAxOCwgMTksIDE1OSwgMjMzLCAxODQsIDE4LCAKKyAgICAxOSwgMjMzLCAxODIsIDE4LCAxOSwgMTU5LCAyMzMsIDE4MiwgMTgsIDE5LCAyMzMsIDE4MSwgMTgsIDE5LCAxNTksIDIzMywgCisgICAgMTgxLCAxOCwgMTksIDIzMywgMTgwLCAxOCwgMTksIDE1OSwgMjMzLCAxODAsIDE4LCAxOSwgMjMzLCAxNzksIDE4LCAxOSwgCisgICAgMTU5LCAyMzMsIDE3OSwgMTgsIDE5LCAyMzMsIDE4OCwgMTgsIDE5LCAxNTksIDIzMywgMTg4LCAxOCwgMTksIDIzMywgMTg3LCAKKyAgICAxOCwgMTksIDE1OSwgMjMzLCAxODcsIDE4LCAxOSwgMjI5LCAxOTUsIDIzMywgMTg3LCAxOCwgMTksIDIzNSwgMjksIDE4LCAKKyAgICAxOSwgMjMzLCAxODksIDE4LCAxOSwgMjE5LCAyOSwgMjM0LCAxODIsIDE4LCAxOSwgMjE5LCAyOSwgMjM0LCA5MCwgMTgsIAorICAgIDE5LCAyMTksIDI5LCAyMzQsIDI5LCAxOCwgMTksIDIxOSwgMjksIDIzNCwgMjU0LCAxOCwgMTksIDI1MCwgMTk4LCAxOCwgCisgICAgMTksIDI1MSwgMzksIDE4LCAxOSwgMjUwLCA1OSwgMTgsIDE5LCAyNTAsIDQ5LCAxOCwgMTksIDI0OSwgMjQ2LCAxOCwgMTksIAorICAgIDI0OSwgMTgyLCAxOCwgMTksIDIxMSwgMTE2LCAyNDksIDE4MiwgMTgsIDE5LCAyNTEsIDQxLCAxOCwgMTksIDI1MSwgNDAsIAorICAgIDE4LCAxOSwgMjQ5LCA4NywgMTgsIDE5LCAxNTksIDI0OSwgODcsIDE4LCAxOSwgMjQ5LCA4NSwgMTgsIDE5LCAxNTksIDI0OSwgCisgICAgODUsIDE4LCAxOSwgMjQ5LCA4NCwgMTgsIDE5LCAxNTksIDI0OSwgODQsIDE4LCAxOSwgMjQ5LCA4MywgMTgsIDE5LCAxNTksIAorICAgIDI0OSwgODMsIDE4LCAxOSwgMjQ5LCA4MiwgMTgsIDE5LCAxNTksIDI0OSwgODIsIDE4LCAxOSwgMjQ5LCA4OSwgMTgsIDE5LCAKKyAgICAxNTksIDI0OSwgODksIDE4LCAxOSwgMjQ5LCA4OCwgMTgsIDE5LCAxNTksIDI0OSwgODgsIDE4LCAxOSwgMjI5LCAxOTUsIAorICAgIDI0OSwgODgsIDE4LCAxOSwgMjUxLCA3NCwgMTgsIDE5LCAyMjEsIDIxMSwgMjE2LCAyMTEsIDE4LCAxOSwgMjMxLCA5NiwgCisgICAgMTgsIDE5LCAyMzEsIDI0MSwgMTgsIDE5LCAyMzAsIDIzNSwgMTgsIDE5LCAyMzAsIDIwNiwgMTgsIDE5LCAyMzAsIDE2NiwgCisgICAgMTgsIDE5LCAyMzAsIDEzNywgMTgsIDE5LCAyMTEsIDExNiwgMjMwLCAxMzcsIDE4LCAxOSwgMTg2LCAxOCwgMTksIDIzMSwgCisgICAgMjQyLCAxOCwgMTksIDIzMCwgNDUsIDE4LCAxOSwgMTU5LCAyMzAsIDQ1LCAxOCwgMTksIDIzMCwgNDMsIDE4LCAxOSwgMTU5LCAKKyAgICAyMzAsIDQzLCAxOCwgMTksIDIzMCwgNDIsIDE4LCAxOSwgMTU5LCAyMzAsIDQyLCAxOCwgMTksIDIzMCwgNDEsIDE4LCAxOSwgCisgICAgMTU5LCAyMzAsIDQxLCAxOCwgMTksIDIzMCwgNDAsIDE4LCAxOSwgMTU5LCAyMzAsIDQwLCAxOCwgMTksIDIzMCwgNDcsIDE4LCAKKyAgICAxOSwgMTU5LCAyMzAsIDQ3LCAxOCwgMTksIDIzMCwgNDYsIDE4LCAxOSwgMTU5LCAyMzAsIDQ2LCAxOCwgMTksIDIyOSwgCisgICAgMTk1LCAyMzAsIDQ2LCAxOCwgMTksIDE5NCwgMTgsIDE5LCAxNTksIDE5NCwgMTgsIDE5LCAyMzAsIDIzOSwgMTgsIDE5LCAKKyAgICAyNTMsIDIxMywgMTk0LCAxOCwgMTksIDIyMSwgMjExLCAxOTQsIDE4LCAxOSwgMjI5LCAxMTIsIDE4LCAxOSwgMjI5LCAyMjksIAorICAgIDE4LCAxOSwgMjI4LCAyMzgsIDE4LCAxOSwgMjI4LCAyMTMsIDE4LCAxOSwgMjI4LCA3OSwgMTgsIDE5LCAyMjgsIDY5LCAxOCwgCisgICAgMTksIDIxMSwgMTE2LCAyMjgsIDY5LCAxOCwgMTksIDE5OCwgMTgsIDE5LCAyMjksIDIzMCwgMTgsIDE5LCAyMjcsIDE3NiwgCisgICAgMTgsIDE5LCAxNTksIDIyNywgMTc2LCAxOCwgMTksIDIyNywgMTc4LCAxOCwgMTksIDE1OSwgMjI3LCAxNzgsIDE4LCAxOSwgCisgICAgMjI3LCAxNzcsIDE4LCAxOSwgMTU5LCAyMjcsIDE3NywgMTgsIDE5LCAyMjksIDE5NSwgMjI3LCAxNzcsIDE4LCAxOSwgMjMwLCAKKyAgICAzMCwgMTgsIDE5LCA3MywgMjI5LCA4NCwgMTgsIDE5LCAyMjgsIDI0MywgMTgsIDE5LCAyMzMsIDY0LCAxOCwgMTksIDIzMywgCisgICAgMTM5LCAxOCwgMTksIDIzMiwgMjQ3LCAxOCwgMTksIDIzMiwgMjMzLCAxOCwgMTksIDIzMiwgMTYyLCAxOCwgMTksIDIzMiwgCisgICAgMTMzLCAxOCwgMTksIDIxMSwgMTE2LCAyMzIsIDEzMywgMTgsIDE5LCAyMzMsIDE0MSwgMTgsIDE5LCAyMzMsIDE0MCwgMTgsIAorICAgIDE5LCAyMzIsIDczLCAxOCwgMTksIDE1OSwgMjMyLCA3MywgMTgsIDE5LCAyMzIsIDcyLCAxOCwgMTksIDE1OSwgMjMyLCA3MiwgCisgICAgMTgsIDE5LCAyMzIsIDcxLCAxOCwgMTksIDE1OSwgMjMyLCA3MSwgMTgsIDE5LCAyMzIsIDcwLCAxOCwgMTksIDE1OSwgMjMyLCAKKyAgICA3MCwgMTgsIDE5LCAyMzIsIDY5LCAxOCwgMTksIDE1OSwgMjMyLCA2OSwgMTgsIDE5LCAyMzIsIDc1LCAxOCwgMTksIDE1OSwgCisgICAgMjMyLCA3NSwgMTgsIDE5LCAyMzIsIDc0LCAxOCwgMTksIDE1OSwgMjMyLCA3NCwgMTgsIDE5LCAxNTYsIDE4LCAxOSwgMTU5LCAKKyAgICAxNTYsIDE4LCAxOSwgMTQ3LCAxNTYsIDE4LCAxOSwgMjIxLCAxODMsIDE4LCAxOSwgMjIyLCAzMSwgMTgsIDE5LCAyMTksIAorICAgIDE5MywgMTgsIDE5LCAyMTksIDE3NywgMTgsIDE5LCAyMTksIDYwLCAxOCwgMTksIDIxOSwgNDIsIDE4LCAxOSwgMjExLCAKKyAgICAxMTYsIDIxOSwgNDIsIDE4LCAxOSwgMjA2LCAxOCwgMTksIDIyMiwgMzMsIDE4LCAxOSwgMjE3LCAyNTAsIDE4LCAxOSwgCisgICAgMTU5LCAyMTcsIDI1MCwgMTgsIDE5LCAyMTcsIDI0NCwgMTgsIDE5LCAxNTksIDIxNywgMjQ0LCAxOCwgMTksIDIxNywgMjQzLCAKKyAgICAxOCwgMTksIDE1OSwgMjE3LCAyNDMsIDE4LCAxOSwgMjE3LCAyMzksIDE4LCAxOSwgMTU5LCAyMTcsIDIzOSwgMTgsIDE5LCAKKyAgICAyMTcsIDIzOCwgMTgsIDE5LCAxNTksIDIxNywgMjM4LCAxOCwgMTksIDIxNywgMjU0LCAxOCwgMTksIDE1OSwgMjE3LCAyNTQsIAorICAgIDE4LCAxOSwgMjE3LCAyNTMsIDE4LCAxOSwgMTU5LCAyMTcsIDI1MywgMTgsIDE5LCAyMjksIDE5NSwgMjE3LCAyNTMsIDE4LCAKKyAgICAxOSwgMjIyLCA5MywgMTgsIDE5LCAyNTMsIDIxMywgMjIyLCA5MywgMTgsIDE5LCAyMTcsIDI1NSwgMTgsIDE5LCAyNTEsIAorICAgIDIyNiwgMjIyLCA5MywgMTgsIDE5LCAyMzAsIDEzMiwgMjE5LCAxMTAsIDE4LCAxOSwgMjI5LCAxOTUsIDIxOSwgMTAxLCAxOCwgCisgICAgMTksIDIyOSwgMTk1LCAyMjIsIDkxLCAxOCwgMTksIDIyOSwgMTk1LCAyMTgsIDIzNywgMTgsIDE5LCAyMjksIDE5NSwgMjE4LCAKKyAgICA4NywgMTgsIDE5LCAyMjksIDE5NSwgMjE5LCAxMDAsIDE4LCAxOSwgMjI5LCAxOTUsIDIyMSwgMTg2LCAxOCwgMTksIDIyMCwgCisgICAgNjUsIDE4LCAxOSwgMjIwLCAzNCwgMTgsIDE5LCAyMjAsIDI5LCAxOCwgMTksIDIyMCwgOSwgMTgsIDE5LCAyMjAsIDMsIDE4LCAKKyAgICAxOSwgMjIwLCAxMDQsIDE4LCAxOSwgMjIwLCAxMDAsIDE4LCAxOSwgMjE5LCAyMDgsIDE4LCAxOSwgMTU5LCAyMTksIDIwOCwgCisgICAgMTgsIDE5LCAyMTksIDIwNywgMTgsIDE5LCAxNTksIDIxOSwgMjA3LCAxOCwgMTksIDIxOSwgMjA2LCAxOCwgMTksIDE1OSwgCisgICAgMjE5LCAyMDYsIDE4LCAxOSwgMjE5LCAyMDUsIDE4LCAxOSwgMTU5LCAyMTksIDIwNSwgMTgsIDE5LCAyMTksIDIwNCwgMTgsIAorICAgIDE5LCAxNTksIDIxOSwgMjA0LCAxOCwgMTksIDIxOSwgMjEwLCAxOCwgMTksIDE1OSwgMjE5LCAyMTAsIDE4LCAxOSwgMjE5LCAKKyAgICAyMDksIDE4LCAxOSwgMTU5LCAyMTksIDIwOSwgMTgsIDE5LCAyMjAsIDEwNiwgMTgsIDE5LCAyMTEsIDQ3LCAxOCwgMTksIAorICAgIDIxMSwgMTAxLCAxOCwgMTksIDIxMSwgOCwgMTgsIDE5LCAyMTAsIDI1NSwgMTgsIDE5LCAyMTAsIDI0NCwgMTgsIDE5LCAKKyAgICAyMTAsIDIyOSwgMTgsIDE5LCAyMTEsIDExNiwgMjEwLCAyMjksIDE4LCAxOSwgMTkyLCAxOCwgMTksIDIxMSwgMTAzLCAxOCwgCisgICAgMTksIDIxMCwgMTc0LCAxOCwgMTksIDE1OSwgMjEwLCAxNzQsIDE4LCAxOSwgMjEwLCAxNzMsIDE4LCAxOSwgMTU5LCAyMTAsIAorICAgIDE3MywgMTgsIDE5LCAyMTAsIDE3MiwgMTgsIDE5LCAxNTksIDIxMCwgMTcyLCAxOCwgMTksIDIxMCwgMTcxLCAxOCwgMTksIAorICAgIDE1OSwgMjEwLCAxNzEsIDE4LCAxOSwgMjEwLCAxNzAsIDE4LCAxOSwgMTU5LCAyMTAsIDE3MCwgMTgsIDE5LCAyMTAsIDE3NiwgCisgICAgMTgsIDE5LCAxNTksIDIxMCwgMTc2LCAxOCwgMTksIDIxMCwgMTc1LCAxOCwgMTksIDE1OSwgMjEwLCAxNzUsIDE4LCAxOSwgCisgICAgMjI5LCAxOTUsIDIxMCwgMTc1LCAxOCwgMTksIDIxMSwgMTE3LCAxOCwgMTksIDI1MiwgMTIsIDIxMSwgMTE3LCAxOCwgMTksIAorICAgIDE1OSwgMjExLCAxMTcsIDE4LCAxOSwgMjIxLCAyMTEsIDIxMSwgOCwgMTgsIDE5LCAyMjMsIDEzMSwgMTgsIDE5LCAyMjMsIAorICAgIDIyNiwgMjIzLCAxMzEsIDE4LCAxOSwgMTU5LCAyMzMsIDY0LCAxOCwgMTksIDIyMywgMTg2LCAxOCwgMTksIDIyMywgMzgsIAorICAgIDE4LCAxOSwgMjIyLCAyNDIsIDE4LCAxOSwgMjIyLCAyMTMsIDE4LCAxOSwgMjIyLCAxOTksIDE4LCAxOSwgMTU5LCAyMzIsIAorICAgIDE2MiwgMTgsIDE5LCAyMDUsIDE4LCAxOSwgMjIzLCAxODcsIDE4LCAxOSwgMTU5LCAyMzMsIDE0MSwgMTgsIDE5LCAyMjIsIAorICAgIDExMCwgMTgsIDE5LCAxNTksIDIyMiwgMTEwLCAxOCwgMTksIDE1MywgMTgsIDE5LCAxNTksIDE1MywgMTgsIDE5LCAxNDcsIAorICAgIDE1MywgMTgsIDE5LCAyNDQsIDE2MiwgMTgsIDE5LCAyNDQsIDIwMSwgMTgsIDE5LCAyNDQsIDEyOSwgMTgsIDE5LCAyNDQsIAorICAgIDExNiwgMTgsIDE5LCAyNDQsIDUxLCAxOCwgMTksIDI0NCwgNDIsIDE4LCAxOSwgMjQ0LCAyMDQsIDE4LCAxOSwgMjQ0LCAKKyAgICAyMDMsIDE4LCAxOSwgMjQzLCAyMTksIDE4LCAxOSwgMTU5LCAyNDMsIDIxOSwgMTgsIDE5LCAyNDUsIDE0LCAxOCwgMTksIAorICAgIDIxNiwgMTk2LCAxOCwgMTksIDIzMCwgMjgsIDIxNiwgMTk2LCAxOCwgMTksIDIxNiwgMTc2LCAxOCwgMTksIDIzMCwgMjgsIAorICAgIDIxNiwgMTc2LCAxOCwgMTksIDIxNiwgMTcyLCAxOCwgMTksIDIzMCwgMjgsIDIxNiwgMTcyLCAxOCwgMTksIDIxNiwgMTU3LCAKKyAgICAxOCwgMTksIDIxNiwgMTU0LCAxOCwgMTksIDIxNiwgMjA5LCAxOCwgMTksIDIxNiwgMjA4LCAxOCwgMTksIDIxNiwgMTI4LCAKKyAgICAxOCwgMTksIDE1OSwgMjE2LCAxMjgsIDE4LCAxOSwgMjE2LCAyMTEsIDE4LCAxOSwgMjE1LCAxNDMsIDE4LCAxOSwgMjE1LCAKKyAgICAxNDEsIDE4LCAxOSwgMjE1LCAxNDAsIDE4LCAxOSwgMjE1LCAxNDUsIDE4LCAxOSwgMjE1LCAxNDYsIDE4LCAxOSwgMjE1LCAKKyAgICA1MiwgMTgsIDE5LCAyMTUsIDUxLCAxOCwgMTksIDIxNSwgNTAsIDE4LCAxOSwgMjE1LCA1MywgMTgsIDE5LCAyMjcsIDE5NywgCisgICAgMjQxLCAyNDUsIDE4LCAxOSwgMjI3LCAxOTcsIDI0MSwgMTg3LCAxOCwgMTksIDIyNywgMTk3LCAyNDEsIDE2OCwgMTgsIDE5LCAKKyAgICAyMjcsIDE5NywgMjQxLCA3NSwgMTgsIDE5LCAyMjcsIDE5NywgMjQxLCA2MCwgMTgsIDE5LCAyMjcsIDE5NywgMTYyLCAxOCwgCisgICAgMTksIDIyNywgMTk3LCAyNDIsIDUzLCAxOCwgMTksIDIyNywgMTk3LCAyNDIsIDY3LCAxOCwgMTksIDIyNywgMTk2LCAyNDIsIAorICAgIDY3LCAxOCwgMTksIDI0MSwgMTYxLCAxOCwgMTksIDIyNCwgODcsIDE4LCAxOSwgMjI0LCA1NiwgMTgsIDE5LCAyMjQsIDUxLCAKKyAgICAxOCwgMTksIDIyNCwgNDUsIDE4LCAxOSwgMjI0LCA0MCwgMTgsIDE5LCAyMjQsIDkxLCAxOCwgMTksIDIyNCwgOTAsIDE4LCAKKyAgICAxOSwgMjI0LCA5OSwgMTgsIDE5LCAyMTYsIDU2LCAxOCwgMTksIDIxNiwgNTQsIDE4LCAxOSwgMjE2LCA1MywgMTgsIDE5LCAKKyAgICAyMTYsIDU3LCAxOCwgMTksIDE1OSwgMjIzLCAxMzEsIDE4LCAxOSwgMTU5LCAyMjMsIDM4LCAxOCwgMTksIDE1OSwgMjIyLCAKKyAgICAyMTMsIDE4LCAxOSwgMTU5LCAyMDUsIDE4LCAxOSwgMjI5LCA4MCwgMTgsIDE5LCAyMjksIDMyLCAxOCwgMTksIDIyOSwgMjgsIAorICAgIDE4LCAxOSwgMjI5LCA5LCAxOCwgMTksIDIyOSwgNCwgMTgsIDE5LCAyMjksIDgyLCAxOCwgMTksIDIyOSwgODEsIDE4LCAxOSwgCisgICAgMjI5LCA4NCwgMTgsIDE5LCAyMjgsIDEwOCwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCA2NSwgMTgsIDE5LCAyMjEsIDIxMSwgCisgICAgMjIwLCAzNCwgMTgsIDE5LCAyMjEsIDIxMSwgMjIwLCA5LCAxOCwgMTksIDIyMSwgMjExLCAyMjAsIDEwNCwgMTgsIDE5LCAKKyAgICAyMTEsIDIxMywgMjE2LCAxOTYsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMTc2LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIAorICAgIDE1NywgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAyMDksIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgMjExLCAxOCwgMTksIDIzMiwgCisgICAgMjU0LCAxOCwgMTksIDIzMiwgMjUzLCAxOCwgMTksIDIzMiwgMjUyLCAxOCwgMTksIDIzMiwgMjUxLCAxOCwgMTksIDIzMywgCisgICAgNCwgMTgsIDE5LCAyMzMsIDMsIDE4LCAxOSwgMjMzLCA1LCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIDE5NiwgMTgsIDE5LCAKKyAgICAyMTYsIDIxMCwgMjE2LCAxNzYsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMTcyLCAxOCwgMTksIDIxNiwgMjEwLCAyMTYsIAorICAgIDE1NywgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAxNTQsIDE4LCAxOSwgMjE2LCAyMTAsIDIxNiwgMjA5LCAxOCwgMTksIDIxNiwgCisgICAgMjEwLCAyMTYsIDIwOCwgMTgsIDE5LCAyMTYsIDIxMCwgMjE2LCAyMTEsIDE4LCAxOSwgMjU0LCAxOTgsIDI1MywgMTY2LCAKKyAgICAxOCwgMTksIDI1MSwgMjI2LCA3NiwgMTgsIDE5LCAyNTEsIDIyNiwgNzQsIDE4LCAxOSwgMjUxLCAyMjYsIDc4LCAxOCwgMTksIAorICAgIDI1MSwgMjI2LCA2MSwgMTgsIDE5LCAyNTEsIDIyNiwgMjEyLCAyMiwgMTgsIDE5LCAyNTEsIDIyNiwgMjExLCAyNTAsIDE4LCAKKyAgICAxOSwgMjUxLCAyMjYsIDIxMSwgMjI3LCAxOCwgMTksIDI1MSwgMjI2LCAyMTIsIDY1LCAxOCwgMTksIDI1MSwgMjI2LCAyMjksIAorICAgIDExMiwgMTgsIDE5LCAyNTEsIDIyNiwgMjI4LCAyMzgsIDE4LCAxOSwgMjUxLCAyMjYsIDIyOCwgNzksIDE4LCAxOSwgMjUxLCAKKyAgICAyMjYsIDE5OCwgMTgsIDE5LCAyNTEsIDIyNiwgMjM0LCAxODgsIDE4LCAxOSwgMjUxLCAyMjYsIDIzNCwgOTgsIDE4LCAxOSwgCisgICAgMjUxLCAyMjYsIDIzNCwgMzQsIDE4LCAxOSwgMjUxLCAyMjYsIDE3NiwgMTgsIDE5LCAyMjEsIDIxMSwgMjQxLCAyNDUsIDE4LCAKKyAgICAxOSwgMjIxLCAyMTEsIDI0MSwgMTg3LCAxOCwgMTksIDIyMSwgMjExLCAyNDEsIDc1LCAxOCwgMTksIDIyMSwgMjExLCAxNjIsIAorICAgIDE4LCAxOSwgNzMsIDI0MiwgMjI3LCAxOCwgMTksIDczLCAyNDIsIDIzMSwgMTgsIDE5LCA3MywgMjQyLCAyNDMsIDE4LCAxOSwgCisgICAgNzMsIDI0MiwgMjQyLCAxOCwgMTksIDczLCAyNDIsIDIzMiwgMTgsIDE5LCA3MywgMjQzLCAwLCAxOCwgMTksIDczLCAyMjIsIAorICAgIDE0MiwgMTgsIDE5LCA3MywgMjIyLCAyMTMsIDE4LCAxOSwgNzMsIDIyMywgMTMxLCAxOCwgMTksIDczLCAyMjMsIDExMSwgCisgICAgMTgsIDE5LCA3MywgMjIzLCAzOCwgMTgsIDE5LCA3MywgMjA1LCAxOCwgMTksIDczLCAyMTEsIDE5NSwgMTgsIDE5LCA3MywgCisgICAgMjExLCAyMjcsIDE4LCAxOSwgNzMsIDIxMiwgMjIsIDE4LCAxOSwgNzMsIDIxMiwgMTcsIDE4LCAxOSwgNzMsIDIxMSwgMjUwLCAKKyAgICAxOCwgMTksIDczLCAyMTIsIDY1LCAxOCwgMTksIDczLCAyNDAsIDIwMSwgMTgsIDE5LCA3MywgMjQwLCAyMDIsIDE4LCAxOSwgCisgICAgNzMsIDI0MCwgMjA1LCAxOCwgMTksIDczLCAyNDAsIDIwNCwgMTgsIDE5LCA3MywgMjQwLCAyMDMsIDE4LCAxOSwgNzMsIAorICAgIDI0MCwgMjA3LCAxOCwgMTksIDczLCAyMTYsIDEzNywgMTgsIDE5LCA3MywgMjE2LCAxNTcsIDE4LCAxOSwgNzMsIDIxNiwgCisgICAgMTk2LCAxOCwgMTksIDczLCAyMTYsIDE5NSwgMTgsIDE5LCA3MywgMjE2LCAxNzYsIDE4LCAxOSwgNzMsIDIxNiwgMjA5LCAKKyAgICAxOCwgMTksIDczLCAyMTUsIDEyNCwgMTgsIDE5LCA3MywgMjE1LCAxMzQsIDE4LCAxOSwgNzMsIDIxNSwgMTUyLCAxOCwgMTksIAorICAgIDczLCAyMTUsIDE1MSwgMTgsIDE5LCA3MywgMjE1LCAxMzYsIDE4LCAxOSwgNzMsIDIxNSwgMTU3LCAxOCwgMTksIDczLCAKKyAgICAyMjQsIDE1MywgMTgsIDE5LCA3MywgMjI1LCAxOSwgMTgsIDE5LCA3MywgMjI1LCAyMjQsIDE4LCAxOSwgNzMsIDIyNSwgCisgICAgMjE0LCAxOCwgMTksIDczLCAyMjUsIDExMSwgMTgsIDE5LCA3MywgMTkxLCAxOCwgMTksIDczLCAyMjYsIDEwOSwgMTgsIDE5LCAKKyAgICA3MywgMjQyLCAxMjAsIDE4LCAxOSwgNzMsIDI0MiwgMTgxLCAxOCwgMTksIDczLCAyNDMsIDY5LCAxOCwgMTksIDczLCAyNDMsIAorICAgIDYyLCAxOCwgMTksIDczLCAyNDIsIDIyMSwgMTgsIDE5LCA3MywgMjQzLCAxNDIsIDE4LCAxOSwgNzMsIDIzNCwgMTA2LCAxOCwgCisgICAgMTksIDczLCAyMzQsIDExMSwgMTgsIDE5LCA3MywgMjM0LCAxMjUsIDE4LCAxOSwgNzMsIDIzNCwgMTI0LCAxOCwgMTksIDczLCAKKyAgICAyMzQsIDExOCwgMTgsIDE5LCA3MywgMjM0LCAxMzgsIDE4LCAxOSwgNzMsIDIzNCwgNDcsIDE4LCAxOSwgNzMsIDIzNCwgNDgsIAorICAgIDE4LCAxOSwgNzMsIDIzNCwgNTEsIDE4LCAxOSwgNzMsIDIzNCwgNTAsIDE4LCAxOSwgNzMsIDIzNCwgNDksIDE4LCAxOSwgCisgICAgNzMsIDIzNCwgNTIsIDE4LCAxOSwgNzMsIDIzNCwgNTMsIDE4LCAxOSwgNzMsIDIyNywgMjQyLCAxOCwgMTksIDczLCAyMjgsIAorICAgIDc5LCAxOCwgMTksIDczLCAyMjksIDExMiwgMTgsIDE5LCA3MywgMjI5LCAxMDgsIDE4LCAxOSwgNzMsIDIyOCwgMjM4LCAxOCwgCisgICAgMTksIDczLCAxOTgsIDE4LCAxOSwgNzMsIDIzMCwgMTA3LCAxOCwgMTksIDczLCAyMzAsIDE2NiwgMTgsIDE5LCA3MywgMjMxLCAKKyAgICA5NiwgMTgsIDE5LCA3MywgMjMxLCA4NSwgMTgsIDE5LCA3MywgMjMwLCAyMzUsIDE4LCAxOSwgNzMsIDE4NiwgMTgsIDE5LCAKKyAgICA3MywgMjEwLCAyMTIsIDE4LCAxOSwgNzMsIDIxMCwgMjQ0LCAxOCwgMTksIDczLCAyMTEsIDQ3LCAxOCwgMTksIDczLCAyMTEsIAorICAgIDQ0LCAxOCwgMTksIDczLCAyMTEsIDgsIDE4LCAxOSwgNzMsIDE5MiwgMTgsIDE5LCA3MywgMjM1LCA1NywgMTgsIDE5LCAKKyAgICAyMjEsIDIxMSwgMjM1LCA1NywgMTgsIDE5LCA3MywgMjM1LCA3NCwgMTgsIDE5LCA3MywgMjM1LCAxMzIsIDE4LCAxOSwgNzMsIAorICAgIDIzNSwgMTMwLCAxOCwgMTksIDczLCAyMzUsIDExNCwgMTgsIDE5LCAyMjEsIDIxMSwgMjM1LCAxMTQsIDE4LCAxOSwgNzMsIAorICAgIDIzNSwgMTQ3LCAxOCwgMTksIDczLCAyMzUsIDg3LCAxOCwgMTksIDczLCAyMzUsIDkxLCAxOCwgMTksIDczLCAyMzUsIDEwMSwgCisgICAgMTgsIDE5LCA3MywgMjM1LCAxMDAsIDE4LCAxOSwgNzMsIDIzNSwgOTksIDE4LCAxOSwgNzMsIDIzNSwgMTAyLCAxOCwgMTksIAorICAgIDczLCAyMzIsIDEwMywgMTgsIDE5LCA3MywgMjMyLCAxNjIsIDE4LCAxOSwgNzMsIDIzMywgNjQsIDE4LCAxOSwgNzMsIDIzMywgCisgICAgNTYsIDE4LCAxOSwgNzMsIDIzMiwgMjQ3LCAxOCwgMTksIDczLCAyMzMsIDE0MSwgMTgsIDE5LCA3MywgMjQ3LCAxNTcsIDE4LCAKKyAgICAxOSwgNzMsIDI0NywgMTU4LCAxOCwgMTksIDczLCAyNDcsIDE2MywgMTgsIDE5LCA3MywgMjQ3LCAxNjIsIDE4LCAxOSwgNzMsIAorICAgIDI0NywgMTU5LCAxOCwgMTksIDczLCAyNDcsIDE2NCwgMTgsIDE5LCA3MywgMjMyLCAyNTAsIDE4LCAxOSwgNzMsIDIzMiwgCisgICAgMjUyLCAxOCwgMTksIDczLCAyMzMsIDAsIDE4LCAxOSwgNzMsIDIzMiwgMjU1LCAxOCwgMTksIDczLCAyMzIsIDI1NCwgMTgsIAorICAgIDE5LCA3MywgMjMzLCA0LCAxOCwgMTksIDczLCAyMTYsIDUxLCAxOCwgMTksIDczLCAyMTYsIDUzLCAxOCwgMTksIDczLCAKKyAgICAyMTYsIDU2LCAxOCwgMTksIDczLCAyMTYsIDU1LCAxOCwgMTksIDczLCAyMTYsIDU0LCAxOCwgMTksIDczLCAyMTYsIDU3LCAKKyAgICAxOCwgMTksIDczLCAyMTYsIDQ2LCAxOCwgMTksIDczLCAyMTYsIDQ3LCAxOCwgMTksIDczLCAyMTYsIDU5LCAxOCwgMTksIAorICAgIDczLCAyMTYsIDU4LCAxOCwgMTksIDczLCAyMTYsIDQ4LCAxOCwgMTksIDczLCAyMTYsIDYwLCAxOCwgMTksIDczLCAyMTAsIAorICAgIDEzLCAxOCwgMTksIDczLCAyMTAsIDIzLCAxOCwgMTksIDczLCAyMTAsIDk0LCAxOCwgMTksIDczLCAyMTAsIDkyLCAxOCwgCisgICAgMTksIDczLCAyMTAsIDQ0LCAxOCwgMTksIDczLCAyMTAsIDExNiwgMTgsIDE5LCA3MywgMjEwLCAxNTksIDE4LCAxOSwgNzMsIAorICAgIDY1LCAyMTAsIDE1OSwgMTgsIDE5LCA3MywgMjQ2LCAzNiwgMTgsIDE5LCA3MywgMjQ2LCAzNywgMTgsIDE5LCA3MywgMjQ2LCAKKyAgICA0NCwgMTgsIDE5LCA3MywgMjQ2LCA0MywgMTgsIDE5LCA3MywgMjQ2LCAzOSwgMTgsIDE5LCA3MywgMjQ2LCA0NiwgMTgsIAorICAgIDE5LCA3MywgMjE4LCA4NCwgMTgsIDE5LCA3MywgMjE5LCA2MCwgMTgsIDE5LCA3MywgMjIxLCAxODMsIDE4LCAxOSwgNzMsIAorICAgIDIyMSwgMTcyLCAxOCwgMTksIDczLCAyMTksIDE5MywgMTgsIDE5LCA3MywgMjA2LCAxOCwgMTksIDczLCAyMTksIDIyNywgCisgICAgMTgsIDE5LCA3MywgMjIwLCA5LCAxOCwgMTksIDczLCAyMjAsIDY1LCAxOCwgMTksIDczLCAyMjAsIDYzLCAxOCwgMTksIDczLCAKKyAgICAyMjAsIDM0LCAxOCwgMTksIDczLCAyMjAsIDEwNCwgMTgsIDE5LCA3MywgMjIwLCAxMDYsIDE4LCAxOSwgNzMsIDIxNSwgCisgICAgMTY0LCAxOCwgMTksIDczLCAyMTUsIDE2NywgMTgsIDE5LCA3MywgMjE1LCAxNzksIDE4LCAxOSwgNzMsIDIxNSwgMTc4LCAKKyAgICAxOCwgMTksIDczLCAyMTUsIDE2OCwgMTgsIDE5LCA3MywgMjE1LCAxODQsIDE4LCAxOSwgNzMsIDI1MCwgNzcsIDE4LCAxOSwgCisgICAgNzMsIDI1MCwgOTQsIDE4LCAxOSwgNzMsIDI1MCwgMTM5LCAxOCwgMTksIDczLCAyNTAsIDEzNiwgMTgsIDE5LCA3MywgMjUwLCAKKyAgICAxMTgsIDE4LCAxOSwgNzMsIDI1MCwgMTY1LCAxOCwgMTksIDczLCAyMTUsIDEyNywgMTgsIDE5LCA3MywgMjE1LCAxMjgsIAorICAgIDE4LCAxOSwgNzMsIDIxNSwgMTMxLCAxOCwgMTksIDczLCAyMTUsIDEzMCwgMTgsIDE5LCA3MywgMjE1LCAxMjksIDE4LCAxOSwgCisgICAgNzMsIDIxNSwgMTMyLCAxOCwgMTksIDI1MCwgMTE5LCA1MCwgMTgsIDE5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDE4LCAxOSwgCisgICAgMjI0LCA4MywgMTgsIDE5LCAyMjksIDc4LCAxOCwgMTksIDIyOCwgMTA1LCAxOCwgMTksIDIyOCwgMTA0LCAxOCwgMTksIAorICAgIDIyOCwgMTAzLCAxOCwgMTksIDIyOCwgMTAyLCAxOCwgMTksIDIyOCwgMTA3LCAxOCwgMTksIDIyOCwgMTA2LCAxOCwgMTksIAorICAgIDIxMSwgMjEzLCAyMTYsIDEyNiwgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjUsIDE4LCAxOSwgMjExLCAyMTMsIDIxNiwgCisgICAgMTI0LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyMywgMTgsIDE5LCAyMTEsIDIxMywgMjE2LCAxMjIsIDE4LCAxOSwgMjExLCAKKyAgICAyMTMsIDIxNiwgMTI5LCAxOCwgMTksIDIxMSwgMjEzLCAyMTYsIDEyOCwgMTgsIDE5LCAyMTEsIDIxMywgNDAsIDIxNiwgCisgICAgMjExLCAxOCwgMTksIDI1MSwgMjI2LCAyMTIsIDk4LCAyMjYsIDIzMCwgMjE5LCAyMSwgNzksIDIyNiwgMjMwLCAxLCAyNTIsIAorICAgIDU2LCAyMjYsIDIzMCwgMSwgMjMyLCA5MiwgMjI2LCAyMzAsIDEsIDI0NCwgMTU5LCAyMjYsIDIzMCwgMSwgMjIyLCAxNywgCisgICAgMjI2LCAyMzAsIDEsIDIyOCwgMTk4LCAyMjYsIDIzMCwgMSwgMjE0LCAyMjYsIDIyNiwgMjMwLCAxLCAyNDgsIDIwNSwgMjI2LCAKKyAgICAyMzAsIDEsIDIxNiwgODEsIDIyNiwgMjMwLCAxLCAyNDksIDIzNywgMjI2LCAyMzAsIDEsIDI1MCwgMTg4LCAyMjYsIDIzMCwgCisgICAgMSwgMjMwLCA5NiwgMjI2LCAyMzAsIDEsIDI0MiwgMTYzLCAyMjYsIDIzMCwgMSwgMjI5LCA2OCwgMjI2LCAyMzAsIDEsIAorICAgIDIxOCwgMTI0LCAyMjYsIDIzMCwgMSwgMjIyLCAxMzcsIDIyNiwgMjMwLCAxLCAyNTQsIDIwNywgMjI2LCAyMzAsIDEsIDIyNiwgCisgICAgMTkxLCAyMjYsIDIzMCwgMSwgMjE0LCAxNTAsIDIyNiwgMjMwLCAxLCAyNDUsIDIzOSwgMjI2LCAyMzAsIDEsIDIzNSwgMTk1LCAKKyAgICAyMjYsIDIzMCwgMSwgMjQ1LCAyNDAsIDIyNiwgMjMwLCAxLCAyMjYsIDE2MiwgMjI2LCAyMzAsIDEsIDIxNCwgMjA2LCAyMjYsIAorICAgIDIzMCwgMSwgMjM2LCA0NiwgMjI2LCAyMzAsIDEsIDI0NSwgMjM3LCAyMjYsIDIzMCwgMSwgMjI1LCAyMDUsIDIyNiwgMjMwLCAKKyAgICAyNDQsIDE1OCwgNzksIDIyNiwgMjMwLCAyMjMsIDUyLCAyNDQsIDE1OCwgNzksIDE3OCwgMSwgMjQ0LCAxNDksIDI0NCwgCisgICAgMTQxLCAyNDQsIDE2MywgMjQ1LCAxNCwgMTc4LCAxLCAyMTQsIDEwNSwgMTc4LCAxLCAyMTQsIDEzNSwgMjE0LCAxNTEsIDY5LCAKKyAgICAxNzgsIDEsIDIxMCwgMjE0LCAxNzgsIDEsIDIxMSwgMTE3LCAxNzgsIDEsIDIxMiwgOTgsIDE3OCwgMSwgMjE2LCAxMzEsIAorICAgIDIxNiwgMTMwLCAyMTYsIDE1MiwgMTc4LCAxLCAyNDUsIDY3LCAxNzgsIDEsIDI1NCwgMTAxLCA2MSwgMTc4LCAxLCAyMjYsIAorICAgIDE0NywgNzgsIDE3OCwgMSwgMjU1LCAyNiwgNjEsIDE3OCwgMSwgMjU0LCAyMzYsIDE3OCwgMSwgMjMyLCAxMzksIDc4LCAKKyAgICAxNzgsIDEsIDIxOSwgMjQ2LCA3OCwgMTc4LCAxLCA3OCwgMTc4LCAxLCAyMjYsIDIzOCwgMTc4LCAxLCAyMjYsIDIwMCwgCisgICAgMTc4LCAxLCAyMjMsIDE2NywgMjIzLCAxODAsIDIyMywgOTcsIDE1MywgMTc4LCAxLCAyMzQsIDE5OSwgMTc4LCAxLCAyNTAsIAorICAgIDE4NSwgMTc4LCAxLCAyMzQsIDIwMCwgMjM1LCAyOSwgMTc4LCAxLCAyNDMsIDIwOSwgMTc4LCAxLCAyNDUsIDE0NiwgMTc4LCAKKyAgICAxLCAyNDMsIDY1LCAyNDIsIDczLCAyNDMsIDIwOSwgMTc4LCAxLCAyNDMsIDEwMywgMTc4LCAxLCAyMTEsIDE4OCwgMjExLCAKKyAgICAxODIsIDIxMiwgOTgsIDE3OCwgMSwgMjQyLCA0NSwgMjQyLCA2NywgMTc4LCAxLCAyNDIsIDQ5LCAyNDIsIDY3LCAxNzgsIDEsIAorICAgIDIzMiwgMTQxLCAyNDIsIDY3LCAxNzgsIDEsIDIxOSwgMjQ5LCAyNDIsIDY3LCAxNzgsIDEsIDIyOSwgMTkwLCAyMjcsIDE2MSwgCisgICAgMjI5LCAxOTEsIDIzMCwgMzAsIDE3OCwgMSwgMjE5LCAyNDcsIDIzMCwgMzAsIDE3OCwgMSwgMjQ2LCAxMjMsIDE3OCwgMSwgCisgICAgMjM1LCAxNzUsIDIzNSwgMTc5LCAyMzUsIDE2OCwgNzQsIDE3OCwgMSwgNzYsIDE3OCwgMSwgMjM1LCAxMjMsIDIzNSwgMTUwLCAKKyAgICAxNzgsIDEsIDI0MywgNTAsIDE3OCwgMSwgMjMyLCAxNDIsIDI1NCwgMjUyLCAxNzgsIDEsIDIxOSwgMjUxLCA2MSwgMTc4LCAKKyAgICAxLCAyMzUsIDE2MCwgMjQ1LCAxMjEsIDE3OCwgMSwgMjI1LCAxNjcsIDIyNSwgMTg5LCAyMjYsIDEwOSwgMTc4LCAxLCAyNTQsIAorICAgIDE3MiwgMjQ1LCAxMTksIDE3OCwgMSwgMjE5LCAyNiwgMjIyLCA5MywgMTc4LCAxLCAyMTksIDE4MSwgMjMyLCAxMzgsIDIyMiwgCisgICAgOTMsIDE3OCwgMSwgMjE5LCAyNDUsIDIyMiwgOTMsIDE3OCwgMSwgMjUxLCA3NCwgMTc4LCAxLCAyMTAsIDE1OSwgMTc4LCAxLCAKKyAgICAyMTYsIDY0LCAyMTYsIDc0LCAyMTUsIDQxLCAyMTcsIDE1MywgMTc4LCAxLCAyMTksIDI0NCwgMjE3LCAxNTMsIDE3OCwgMSwgCisgICAgMjQ5LCA2OCwgMTc4LCAxLCAyNTIsIDM5LCAyNTIsIDQyLCAyNTEsIDIzMiwgMjUzLCAxNjYsIDE3OCwgMSwgMjE5LCAyNTAsIAorICAgIDI1MywgMTY2LCAxNzgsIDEsIDI0NiwgMTIyLCAxNzgsIDEsIDIyNiwgMTc1LCAxNzgsIDEsIDI0NSwgMjA0LCAyNDUsIDIwNiwgCisgICAgNzYsIDE3OCwgMSwgMjMxLCAxODMsIDIzMSwgMTkxLCAxOTQsIDE3OCwgMSwgMjMyLCAxNDAsIDE5NCwgMTc4LCAxLCAyMTksIAorICAgIDI0OCwgMTk0LCAxNzgsIDEsIDIzMywgNzksIDIzMywgMTIwLCAyMzIsIDE0OSwgMTU2LCAxNzgsIDEsIDI0NiwgMTI0LCAKKyAgICAxNzgsIDEsIDIzNSwgMjM3LCAxNzgsIDEsIDIzNSwgMjM4LCAxNzgsIDEsIDI0OCwgMjE4LCAyNDgsIDIyMywgMjQ5LCA2OCwgCisgICAgMTc4LCAxLCAyMjYsIDE0MiwgMjQ1LCA2NiwgNzgsIDE3OCwgMSwgMjQ1LCAyMzUsIDE3OCwgMSwgMjM1LCAxOTQsIDE3OCwgCisgICAgMSwgMjQ5LCA4NiwgMTc4LCAxLCAyNTEsIDI1LCAxNzgsIDEsIDI1MCwgMTk3LCAxNzgsIDEsIDIxOCwgMTYzLCAxNzgsIDEsIAorICAgIDIzMiwgMTM3LCAxNzgsIDEsIDIxOSwgMjQzLCAxNzgsIDEsIDI0MCwgMTE3LCAxNzgsIDEsIDIyNCwgOTksIDE3OCwgMSwgCisgICAgMjExLCAxNzgsIDE3OCwgMjE5LCAxNTcsIDIyNCwgMTQzLCAxNzgsIDIzMCwgOTAsIDIyNCwgMTQzLCAxNzgsIDI0OSwgMTM5LCAKKyAgICAyMjQsIDE0MywgMTc4LCAyNTQsIDE0LCA4NywgMTc4LCAyMTUsIDgyLCA4NywgMTc4LCAyNTIsIDU0LCA4NywgMjE3LCA4NCwgCisgICAgMSwgNjEsIDIxNywgODQsIDEsIDc0LCAyMTcsIDg0LCAxLCA2OSwgMjE3LCA4NCwgMSwgMTc2LCAyMTcsIDg0LCAxLCAyNDMsIAorICAgIDE0MiwgMjE3LCA4NCwgMSwgMjI5LCA4MiwgMjE3LCA4NCwgMSwgMjE3LCAxMDYsIDIxNywgODQsIDEsIDI0OCwgMjI5LCAKKyAgICAyMTcsIDg0LCAxLCAxOTgsIDIxNywgODQsIDEsIDE5MSwgMjE3LCA4NCwgMSwgMjUyLCAxOTksIDIxNywgODQsIDEsIDE4NiwgCisgICAgMjE3LCA4NCwgMSwgMTkyLCAyMTcsIDg0LCAxLCAyMzMsIDE0MSwgMjE3LCA4NCwgMSwgMjEyLCA2NSwgMjE3LCA4NCwgMSwgCisgICAgMjA2LCAyMTcsIDg0LCAxLCAxNjIsIDIxNywgODQsIDI1LCA1LCA3NCwgMjE3LCA4NCwgMjUsIDUsIDY5LCAyMTcsIDg0LCA1LCAKKyAgICAyMTMsIDE1MiwgMjQyLCAxNCwgMSwgNjEsIDI0MiwgMTQsIDEsIDc0LCAyNDIsIDE0LCAxLCA2OSwgMjQyLCAxNCwgMSwgCisgICAgMTc2LCAyNDIsIDE0LCAxLCAyNDMsIDE0MiwgMjQyLCAxNCwgMSwgMjI5LCA4MiwgMjQyLCAxNCwgMSwgMjE3LCAxMDYsIAorICAgIDI0MiwgMTQsIDEsIDI0OCwgMjI5LCAyNDIsIDE0LCAxLCAxOTgsIDI0MiwgMTQsIDEsIDE5MSwgMjQyLCAxNCwgMSwgMjUyLCAKKyAgICAxOTksIDI0MiwgMTQsIDEsIDE4NiwgMjQyLCAxNCwgMSwgMTkyLCAyNDIsIDE0LCAxLCAyMDUsIDI0MiwgMTQsIDEsIDIzMywgCisgICAgMTQxLCAyNDIsIDE0LCAxLCAyMTIsIDY1LCAyNDIsIDE0LCAxLCAyMDYsIDI0MiwgMTQsIDEsIDE2MiwgMjQyLCAxNCwgMjUsIAorICAgIDUsIDc0LCAyNDIsIDE0LCAyNSwgNSwgNjksIDI0MiwgMTQsIDUsIDIyNiwgNTMsIDIyNSwgMTI5LCAyMTksIDE1NywgMjI0LCAKKyAgICAxNDMsIDIyNSwgMTI5LCA1MiwgMjI0LCAxNDMsIDI1MSwgMTI4LCAxLCA2MSwgMjUxLCAxMjgsIDEsIDc0LCAyNTEsIDEyOCwgCisgICAgMSwgNjksIDI1MSwgMTI4LCAxLCAxNzYsIDI1MSwgMTI4LCAxLCAyNDMsIDE0MiwgMjUxLCAxMjgsIDEsIDIyOSwgODIsIAorICAgIDI1MSwgMTI4LCAxLCAyMTcsIDEwNiwgMjUxLCAxMjgsIDEsIDI0OCwgMjI5LCAyNTEsIDEyOCwgMSwgMTk4LCAyNTEsIDEyOCwgCisgICAgMSwgMTkxLCAyNTEsIDEyOCwgMSwgMjUyLCAxOTksIDI1MSwgMTI4LCAxLCAxODYsIDI1MSwgMTI4LCAxLCAxOTIsIDI1MSwgCisgICAgMTI4LCAxLCAyMDUsIDI1MSwgMTI4LCAxLCAyMzMsIDE0MSwgMjUxLCAxMjgsIDEsIDIxMiwgNjUsIDI1MSwgMTI4LCAxLCAKKyAgICAyMDYsIDI1MSwgMTI4LCAxLCAxNjIsIDI1MSwgMTI4LCAyNSwgNSwgNzQsIDI1MSwgMTI4LCAyNSwgNSwgNjksIDIxNywgODMsIAorICAgIDEsIDYxLCAyMTcsIDgzLCAxLCA3NCwgMjE3LCA4MywgMSwgNjksIDIxNywgODMsIDEsIDE3NiwgMjE3LCA4MywgMSwgMjQzLCAKKyAgICAxNDIsIDIxNywgODMsIDEsIDIyOSwgODIsIDIxNywgODMsIDEsIDIxNywgMTA2LCAyMTcsIDgzLCAxLCAyNDgsIDIyOSwgCisgICAgMjE3LCA4MywgMSwgMTk4LCAyMTcsIDgzLCAxLCAxOTEsIDIxNywgODMsIDEsIDI1MiwgMTk5LCAyMTcsIDgzLCAxLCAxODYsIAorICAgIDIxNywgODMsIDEsIDE5MiwgMjE3LCA4MywgMSwgMjMzLCAxNDEsIDIxNywgODMsIDEsIDIxMiwgNjUsIDIxNywgODMsIDEsIAorICAgIDIwNiwgMjE3LCA4MywgMjUsIDUsIDc0LCAyMTcsIDgzLCAyNSwgNSwgNjksIDcwLCAxLCAxNzYsIDcwLCAxLCAyMzQsIDEzOCwgCisgICAgNzAsIDEsIDIzNCwgMzQsIDcwLCAxLCAyMzQsIDExMSwgNzAsIDEsIDIyOSwgOSwgNzAsIDEsIDI1MSwgNDEsIDcwLCAxLCAKKyAgICAyNTAsIDE2NSwgNzAsIDEsIDI0OSwgMjQ2LCA3MCwgMSwgMjUwLCA5NCwgNzAsIDEsIDIyNywgMTM4LCA3MCwgMSwgMjQ4LCAKKyAgICAyMjksIDcwLCAxLCAyMTUsIDE0NSwgNzAsIDEsIDI0NywgMTUzLCA3MCwgMSwgMjE1LCAxNDAsIDcwLCAxLCAyMjgsIDg1LCAKKyAgICA3MCwgMSwgMjE3LCAxMDYsIDcwLCAxLCAyMTYsIDIwOSwgNzAsIDEsIDExMiwgNzAsIDEsIDIxNiwgMTU3LCA3MCwgMSwgCisgICAgMjI4LCA3OSwgNzAsIDEsIDI1MiwgMTk5LCA3MCwgMSwgMjI1LCAxNTAsIDcwLCAxLCAyMjUsIDE5LCA3MCwgMSwgMjI1LCAKKyAgICAxMjQsIDcwLCAxLCAyMzAsIDE2NiwgNzAsIDEsIDIxMCwgMjQ0LCA3MCwgMSwgMjIyLCAyMTMsIDcwLCAxLCAyMzIsIDE2MiwgCisgICAgNzAsIDEsIDIxMywgMTM4LCA3MCwgMSwgMjIwLCAxMDQsIDcwLCAxLCAyMTgsIDE4NiwgNzAsIDEsIDIwNiwgNzAsIDEsIAorICAgIDE2MiwgNzAsIDEsIDIzMywgMTQxLCA3MCwgMSwgMjI0LCA5MSwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA3NywgNzAsIDIzNSwgCisgICAgMjUwLCAyNSwgMjI0LCA5MCwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA1NiwgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA1MSwgCisgICAgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCAzMywgNzAsIDIzNSwgMjUwLCAyNSwgMjI0LCA1LCA3MCwgMjM1LCAyNTAsIDI1LCAKKyAgICAyMjMsIDI0OSwgNzAsIDIzNSwgMjUwLCAyNSwgMjIzLCAyNDgsIDcwLCAyMzUsIDI1MCwgMjUsIDIyMiwgMTAyLCA3MCwgCisgICAgMjM1LCAyNTAsIDI1LCAyMjIsIDk1LCA3MCwgMjM1LCAyNTAsIDI1LCAyMzIsIDY3LCA3MCwgMjM1LCAyNTAsIDI1LCAyMzIsIAorICAgIDU3LCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDcyLCA3MCwgMjM1LCAyNTAsIDI1LCAyMjQsIDgzLCA3MCwgMjM1LCAyNTAsIAorICAgIDI1LCAyMjQsIDQxLCAyMTUsIDQ5LCAxMTEsIDcwLCAyMzUsIDI1MCwgMjUsIDIyNCwgNDEsIDIxNSwgNDksIDEwNSwgNzAsIAorICAgIDIzNSwgMjUwLCAyNSwgMjI0LCA3MywgNzAsIDI1LCAyMzUsIDIzNiwgMjU0LCA1MywgNzAsIDI1LCAyMzUsIDIzNiwgMjU1LCAKKyAgICA4MiwgNzAsIDI1LCA1LCAyNTUsIDgyLCA3MCwgMjUsIDUsIDc0LCA3MCwgMjUsIDUsIDIzNiwgNDAsIDcwLCAyNSwgNSwgCisgICAgMjExLCAxMTcsIDcwLCAyNSwgNSwgMjEwLCAxNjksIDcwLCAyNSwgNSwgNjksIDcwLCAyNSwgNSwgMjE0LCAxMTgsIDcwLCAKKyAgICAyNSwgNSwgMjE0LCAyMjksIDcwLCAyNSwgNSwgMjI2LCAyMzgsIDcwLCAyNSwgNSwgMTkyLCA3MCwgMjUsIDUsIDIzNiwgNjcsIAorICAgIDcwLCAyNSwgNSwgNzYsIDcwLCAyNSwgNSwgMjU0LCAyNTIsIDcwLCAyNSwgNSwgMjU0LCAyMTAsIDcwLCAyNSwgNSwgMjI2LCAKKyAgICAxODcsIDcwLCAyNSwgNSwgMjUzLCAyMDAsIDcwLCA1LCAyMjgsIDIxMSwgNzAsIDUsIDIyMywgMTI5LCA3MCwgNSwgMjEwLCAKKyAgICAxODAsIDcwLCA1LCAyMzAsIDU3LCA3MCwgNSwgMjE1LCAyMTQsIDcwLCA1LCAyNTIsIDE1MSwgNzAsIDUsIDIyMiwgMjA4LCAKKyAgICA3MCwgNSwgMjE2LCA0MSwgNzAsIDUsIDIzNCwgMjQ3LCA3MCwgNSwgMjU0LCAyMTIsIDcwLCA1LCAyMjEsIDI0NiwgMjIxLCAKKyAgICAyNDAsIDcwLCA1LCAyMTMsIDE0OSwgNzAsIDUsIDI0OSwgMjQwLCA3MCwgNSwgMjUyLCAxMjUsIDcwLCA1LCAyMzQsIDEzMSwgCisgICAgNzAsIDUsIDI1MiwgMTQ1LCA3MCwgNSwgMjUxLCAxNywgMjI1LCA3NSwgMjMzLCAxOTMsIDcwLCA1LCAyMzMsIDM2LCAyMTYsIAorICAgIDE4LCA3MCwgNSwgMjUyLCAyOCwgNzAsIDUsIDIyNSwgMTI2LCAyMzAsIDEwNCwgNzAsIDUsIDIzNCwgMTUsIDcwLCAyNDksIAorICAgIDEwNiwgMTYsIDIyMywgMzEsIDcwLCA1LCAyNTMsIDE4MiwgNzAsIDUsIDI1MywgMjAzLCA3MCwgMjEsIDIxMCwgODYsIDcwLCAKKyAgICAyMSwgMTExLCA3MCwgMjEsIDEwNSwgNzAsIDIxLCAxNTgsIDcwLCAyMSwgMTYxLCA3MCwgMjEsIDE5MCwgNzAsIDIxLCAxOTUsIAorICAgIDcwLCAyMSwgMTk5LCA3MCwgMjEsIDE5NiwgNzAsIDIxLCAyMDEsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIxOSwgCisgICAgNDUsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIzMCwgNzYsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNSwgCisgICAgNzQsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDI1MiwgNTcsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDI1MSwgCisgICAgMTExLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIDIxOCwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAKKyAgICAyMTIsIDcwLCAxNiwgMjMzLCAzNiwgMjUzLCAyMDUsIDIyNCwgMjEwLCA3MCwgMTYsIDIzMywgMzYsIDI1MywgMjA1LCAyMjQsIAorICAgIDIxNiwgNzAsIDE2LCAyMzMsIDM2LCAyNTMsIDIwNSwgMjI0LCAyMTQsIDgzLCAyNTEsIDI0NCwgODMsIDI0NSwgMTcxLCA4MywgCisgICAgMjQ5LCAyMjcsIDgzLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDgzLCAyNDksIDIzNCwgODMsIDI0NCwgMTksIDI0NywgMTI2LCAKKyAgICA4MywgMjE2LCA0MCwgMjE5LCA1NCwgMjQwLCAxNzUsIDgzLCAyMTksIDE5MiwgMywgMjUxLCAxODAsIDIzMSwgMTU5LCA4MywgCisgICAgMjMxLCAxODgsIDI0OSwgMjI3LCA4MywgMjMxLCAxODgsIDI0MywgMjM2LCAyMTgsIDEzMSwgODMsIDIyOCwgMTk2LCA4MywgCisgICAgMjQ0LCA1LCA0NSwgMjIxLCAxNTksIDExMSwgODMsIDI0NCwgNSwgNDUsIDIyMSwgMTU5LCAxMDUsIDgzLCAyNDQsIDUsIDQ1LCAKKyAgICAyMjEsIDE1OSwgMTU4LCA4MywgMjUsIDIyMCwgMTM5LCA4MywgMjEsIDIxMCwgODYsIDgzLCAyMSwgMTExLCA4MywgMjEsIAorICAgIDEwNSwgODMsIDIxLCAxNTgsIDgzLCAyMSwgMTYxLCA4MywgMjEsIDE5MCwgODMsIDIxLCAxOTUsIDgzLCAyMSwgMTk5LCA4MywgCisgICAgMjEsIDE5NiwgODMsIDIxLCAyMDEsIDgzLCAxLCA2MSwgODMsIDEsIDc2LCA4MywgMSwgNzQsIDgzLCAxLCA3OCwgODMsIDEsIAorICAgIDY5LCA4MywgMSwgMjI2LCAyMzgsIDgzLCAxLCAyMTQsIDIxNCwgODMsIDEsIDI0NSwgMjE3LCA4MywgMSwgMTk4LCA4MywgMSwgCisgICAgMjU0LCAxMjMsIDgzLCAxLCAyNTIsIDE5OSwgODMsIDEsIDE5MSwgODMsIDEsIDIyNCwgOTEsIDgzLCAxLCAyNDMsIDE0MiwgCisgICAgODMsIDEsIDE4NiwgODMsIDEsIDIzMywgMTQxLCA4MywgMSwgMjA2LCA4MywgMSwgMjIwLCAxMDQsIDgzLCAxLCAyMTcsIAorICAgIDEwNiwgODMsIDEsIDI0OCwgMjI5LCA4MywgMSwgMjUwLCAxNjUsIDgzLCAxLCAyMzUsIDE0NywgODMsIDEsIDE5MiwgODMsIAorICAgIDEsIDIwNSwgODMsIDEsIDIxMiwgNjUsIDgzLCAxLCAyNDQsIDIwNCwgODMsIDEsIDE3NiwgODMsIDEsIDIzNCwgMTM4LCA4MywgCisgICAgMSwgMjE1LCAxODQsIDgzLCAxLCAyMTAsIDExNiwgODMsIDEsIDI0MiwgNTMsIDgzLCAxLCAyMTAsIDE2LCA4MywgMSwgMjMzLCAKKyAgICA0LCA4MywgMSwgMjEwLCA2OSwgODMsIDEsIDI1MCwgMTE4LCA4MywgMSwgMjE2LCA0MCwgMjAwLCAyNSwgNTAsIDgzLCAxLCAKKyAgICAyMTYsIDQwLCA3NiwgODMsIDEsIDIxNiwgNDAsIDc0LCA4MywgMSwgMjE2LCA0MCwgNzgsIDgzLCAxLCAyMTYsIDQwLCA2OSwgCisgICAgODMsIDEsIDIxNiwgNDAsIDIyNiwgMjM4LCA4MywgMSwgMjE2LCA0MCwgMjE0LCAyMTQsIDgzLCAxLCAyMTYsIDQwLCAyNTQsIAorICAgIDEyMywgODMsIDEsIDIxNiwgNDAsIDI1MiwgMTk5LCA4MywgMSwgMjE2LCA0MCwgMTkxLCA4MywgMSwgMjE2LCA0MCwgMjI0LCAKKyAgICA5MSwgODMsIDEsIDIxNiwgNDAsIDI0MywgMTQyLCA4MywgMSwgMjE2LCA0MCwgMTg2LCA4MywgMSwgMjE2LCA0MCwgMjE3LCAKKyAgICAxMDYsIDgzLCAxLCAyMTYsIDQwLCAyNDgsIDIyOSwgODMsIDEsIDIxNiwgNDAsIDI1MCwgMTY1LCA4MywgMSwgMjE2LCA0MCwgCisgICAgMjM1LCAxNDcsIDgzLCAxLCAyMTYsIDQwLCAyMTUsIDE4NCwgODMsIDEsIDIxNiwgNDAsIDE5MiwgODMsIDEsIDIxNiwgNDAsIAorICAgIDIxMiwgNjUsIDgzLCAxLCAyMTYsIDQwLCAxNzYsIDgzLCAxLCAyMTYsIDQwLCAyNDMsIDEzOSwgODMsIDEsIDIxNiwgNDAsIAorICAgIDI0MiwgNTMsIDgzLCAxLCAyMTYsIDQwLCAyMzUsIDExMywgODMsIDEsIDIxNiwgNDAsIDIyOCwgMjM2LCA4MywgMSwgMjE2LCAKKyAgICA0MCwgMjQ2LCA0NiwgODMsIDEsIDIxOSwgMTkyLCA3NiwgODMsIDEsIDIxOSwgMTkyLCA3NCwgODMsIDEsIDIxOSwgMTkyLCAKKyAgICAyMzUsIDE1OCwgODMsIDEsIDIxOSwgMTkyLCAyMTQsIDIxNCwgODMsIDEsIDIxOSwgMTkyLCA2OSwgODMsIDEsIDIxOSwgCisgICAgMTkyLCAyNTQsIDEyMywgODMsIDEsIDIxOSwgMTkyLCAxNzYsIDgzLCAxLCAyMTksIDE5MiwgMjQzLCAxNDIsIDgzLCAxLCAKKyAgICAyMTksIDE5MiwgMTYyLCA4MywgMSwgMjE5LCAxOTIsIDE5MSwgODMsIDEsIDIxOSwgMTkyLCAyMjAsIDEwNCwgODMsIDEsIAorICAgIDIxOSwgMTkyLCAyMTcsIDEwNiwgODMsIDEsIDIxOSwgMTkyLCAyNDgsIDIyOSwgODMsIDEsIDIxOSwgMTkyLCAyMzUsIDE0NywgCisgICAgODMsIDEsIDIxOSwgMTkyLCAyNDQsIDIwNCwgODMsIDEsIDIxOSwgMTkyLCAyNDMsIDEzOSwgODMsIDEsIDIxOSwgMTkyLCAKKyAgICAyNDIsIDUzLCA4MywgMSwgMjE5LCAxOTIsIDIxNSwgMTg0LCA4MywgMSwgMjE5LCAxOTIsIDIxMCwgMTE2LCA4MywgMSwgCisgICAgMjE5LCAxOTIsIDIyMywgMTg3LCA4MywgMSwgMjE5LCAxOTIsIDI1MCwgMTY1LCA4MywgMSwgMjE5LCAxOTIsIDIxMCwgODIsIAorICAgIDgzLCAxLCAyMzEsIDE4OCwgNzQsIDgzLCAxLCAyMzEsIDE4OCwgMTc2LCA4MywgMSwgMjMxLCAxODgsIDIwNSwgODMsIDEsIAorICAgIDIzMSwgMTg4LCAyNDQsIDIwNCwgODMsIDEsIDIzMSwgMTg4LCAyMTAsIDgyLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAKKyAgICAyNTQsIDg0LCAxMTEsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIxMywgMTQ4LCAxMTEsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDI0OCwgMTk0LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTQsIDIyNCwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjM1LCAyMDAsIDIxNCwgMjI0LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyNTIsIDE2MywgODMsIDEsIAorICAgIDI1NCwgMTcxLCAyNDMsIDEyMywgMTM0LCAyNTIsIDE2MywgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgNjEsIDgzLCAxLCAKKyAgICAyNTQsIDE3MSwgMjQzLCAxMjMsIDc0LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAxNzYsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIyOSwgODIsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1MSwgNDEsIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDIxNSwgMTU3LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTUsIDE0NSwgODMsIDEsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjQ4LCAxNDMsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDIyOCwgMTE1LCA4MywgMSwgMjU0LCAxNzEsIAorICAgIDI0MywgMTIzLCAyMTcsIDEwNiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQ4LCAyMjksIDgzLCAxLCAyNTQsIDE3MSwgCisgICAgMjQzLCAxMjMsIDE5MSwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjI1LCAxNTAsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAKKyAgICAxMjMsIDIxOCwgMjI1LCA4MywgMSwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTAsIDgyLCA4MywgMSwgMjU0LCAxNzEsIDI0MywgCisgICAgMTIzLCAyMTAsIDExNiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjU0LCAyMTgsIDgzLCAxLCAyMTYsIDQwLCAyNTQsIAorICAgIDE3MSwgMjQzLCAxMjMsIDIxNywgMTA2LCA4MywgMSwgMjE2LCA0MCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTAsIDgyLCA4MywgCisgICAgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQzLCAwLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIAorICAgIDEyMywgMjI5LCA4MiwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI1MSwgNDEsIDgzLCAxLCAyMzEsIAorICAgIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMzUsIDEyMCwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIAorICAgIDIxNSwgMTU3LCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQ4LCAxMjcsIDgzLCAxLCAyMzEsIDE4OCwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTcsIDEwNiwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIDE3MSwgMjQzLCAxMjMsIDI0OCwgCisgICAgMzMsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTgsIDIyNSwgODMsIDEsIDIzMSwgMTg4LCAyNTQsIAorICAgIDE3MSwgMjQzLCAxMjMsIDI0OSwgODAsIDgzLCAxLCAyMzEsIDE4OCwgMjU0LCAxNzEsIDI0MywgMTIzLCAyMTAsIDgyLCA4MywgCisgICAgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjEwLCAxMTYsIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIAorICAgIDE2MywgNjksIDgzLCAxLCAyNTQsIDE3MSwgMjQzLCAxMjMsIDE2MywgMTkyLCA4MywgMSwgMjMxLCAxODgsIDI1NCwgMTcxLCAKKyAgICAyNDMsIDEyMywgMjUyLCAyNiwgODMsIDEsIDI1NCwgMTcxLCAyNDMsIDEyMywgMjQ4LCAyMTksIDgzLCAxLCAyMzEsIDE4OCwgCisgICAgMjU0LCAxNzEsIDI0MywgMTIzLCAyMzMsIDQsIDE4LCAxOSwgMjI2LCAxMTMsIDE4LCAxOSwgMjUzLCAxNzUsIDE4LCAxOSwgCisgICAgMjU1LCAzNywgMTgsIDE5LCAyMTIsIDI1LCAxOCwgMTksIDIyNCwgMjI0LCAxOCwgMTksIDIyNSwgMjMzLCAxOCwgMTksIAorICAgIDIyNCwgMTA4LCAxOCwgMTksIDIxNywgMzIsIDE4LCAxOSwgMjM0LCAxOTUsIDE4LCAxOSwgMjMzLCAxODUsIDE4LCAxOSwgCisgICAgMjMxLCAxMzcsIDE4LCAxOSwgMjI4LCA0MiwgMTgsIDE5LCAyMjksIDE4NiwgMTgsIDE5LCAyMzMsIDc0LCAxOCwgMTksIAorICAgIDIxOSwgMjQsIDE4LCAxOSwgMjIxLCAyMTMsIDE4LCAxOSwgMjE5LCAyMzQsIDE4LCAxOSwgMjIwLCA2OCwgMTgsIDE5LCAKKyAgICAyMTksIDIwMywgMTgsIDE5LCAyMTAsIDIyMCwgMTgsIDE5LCAyMTEsIDUyLCAxOCwgMTksIDIyMywgMTM3LCAxOCwgMTksIAorICAgIDIyNywgMTc1LCAxOCwgMTksIDIyNiwgMjIwLCAyMjcsIDE3NSwgMTgsIDE5LCAyMjcsIDE3NCwgMTgsIDE5LCAyMjYsIDIyMCwgCisgICAgMjI3LCAxNzQsIDE4LCAxOSwgMjI3LCAxNzMsIDE4LCAxOSwgMjI2LCAyMjAsIDIyNywgMTczLCAxOCwgMTksIDIyNywgMTcyLCAKKyAgICAxOCwgMTksIDIyNiwgMjIwLCAyMjcsIDE3MiwgMTgsIDE5LCAyMjIsIDEwNywgMTgsIDE5LCAyMjIsIDEwNiwgMTgsIDE5LCAKKyAgICAyMjIsIDEwNSwgMTgsIDE5LCAyMjIsIDEwNCwgMTgsIDE5LCAyMjIsIDEwMywgMTgsIDE5LCAyMjIsIDExMSwgMTgsIDE5LCAKKyAgICAyMjYsIDIyMCwgMjI2LCAxMDksIDE4LCAxOSwgMjI2LCAyMjAsIDIxNywgMTUzLCAxOCwgMTksIDIyNiwgMjIwLCAyMzUsIAorICAgIDI5LCAxOCwgMTksIDIyNiwgMjIwLCAyNTEsIDc0LCAxOCwgMTksIDIyNiwgMjIwLCAxOTQsIDE4LCAxOSwgMjI2LCAyMjAsIAorICAgIDIzMCwgMzAsIDE4LCAxOSwgMjI2LCAyMjAsIDIyMiwgOTMsIDE4LCAxOSwgMjI2LCAyMjAsIDIyMCwgMTA2LCAxOCwgMTksIAorICAgIDI0NSwgMjI3LCAyMTIsIDk4LCAxOCwgMTksIDIxMiwgNywgMjEyLCA5OCwgMTgsIDE5LCA0MCwgNCwgMjIyLCAyMzYsIDE4LCAKKyAgICAxOSwgNDAsIDIyMywgMTYwLCAyNDcsIDEyOCwgMTgsIDE5LCAyMjMsIDIyNiwgMjIyLCAxMDgsIDE4LCAxOSwgMTU5LCAyMzIsIAorICAgIDEzMywgMTgsIDE5LCAxNTksIDIzMywgMTQwLCAxOCwgMTksIDIxNiwgMTI3LCAxOCwgMTksIDIxNiwgMTI5LCAxOCwgMTksIAorICAgIDIxNSwgMTM3LCAxOCwgMTksIDIxNSwgMTM5LCAxOCwgMTksIDIxNSwgMTQ0LCAxOCwgMTksIDIxNiwgNTAsIDE4LCAxOSwgCisgICAgMjE2LCA1MiwgMTgsIDE5LCAyMjEsIDIxMSwgMjE5LCAyMDgsIDE4LCAxOSwgMjIxLCAyMTEsIDIyMCwgMywgMTgsIDE5LCAKKyAgICAyMjEsIDIxMSwgMjQxLCA2MCwgMTgsIDE5LCA3MywgMjQyLCA4MCwgMTgsIDE5LCA3MywgMjQ4LCA2MCwgMjQzLCA2MiwgMTgsIAorICAgIDE5LCA3MywgMjQzLCAxMzksIDE4LCAxOSwgNzMsIDI0MiwgODUsIDE4LCAxOSwgMjIxLCAyMTEsIDIzNSwgMzksIDE4LCAxOSwgCisgICAgNzMsIDIzNSwgMzcsIDE4LCAxOSwgMjUyLCA3NiwgMjQ4LCA2MCwgMTU2LCAxOCwgMTksIDI1MiwgNzYsIDI0OCwgNjAsIAorICAgIDE1MywgMTgsIDE5LCA3MywgMjQ4LCA1NSwgMjIyLCA5MywgMjMyLCAyMjksIDIxMywgMTIyLCAyMzMsIDE2LCAyMzIsIDIyOSwgCisgICAgMSwgMTc2LCAyMzIsIDIyOSwgMSwgMjM0LCAxMzgsIDIzMiwgMjI5LCAxLCAyNDMsIDE0MiwgMjMyLCAyMjksIDEsIDI0MywgCisgICAgMCwgMjMyLCAyMjksIDEsIDIyOSwgODIsIDIzMiwgMjI5LCAxLCAyNTEsIDQxLCAyMzIsIDIyOSwgMSwgMjUwLCAxNjUsIAorICAgIDIzMiwgMjI5LCAxLCAyMzUsIDE0NywgMjMyLCAyMjksIDEsIDIzNSwgMTIwLCAyMzIsIDIyOSwgMSwgMjExLCA3MSwgMjMyLCAKKyAgICAyMjksIDEsIDIxNywgMTA2LCAyMzIsIDIyOSwgMSwgMjE2LCAyMDksIDIzMiwgMjI5LCAxLCAyNDgsIDIyOSwgMjMyLCAyMjksIAorICAgIDEsIDI0OCwgMzMsIDIzMiwgMjI5LCAxLCAxOTgsIDIzMiwgMjI5LCAxLCAxOTEsIDIzMiwgMjI5LCAxLCAyMjUsIDE1MCwgCisgICAgMjMyLCAyMjksIDEsIDI1MiwgMTk5LCAyMzIsIDIyOSwgMSwgMjUyLCAyNiwgMjMyLCAyMjksIDEsIDE4NiwgMjMyLCAyMjksIAorICAgIDEsIDE5MiwgMjMyLCAyMjksIDEsIDIwNSwgMjMyLCAyMjksIDEsIDIzMywgMTQxLCAyMzIsIDIyOSwgMSwgMjEyLCA2NSwgCisgICAgMjMyLCAyMjksIDEsIDIyMCwgMTA0LCAyMzIsIDIyOSwgMSwgMjE4LCAyMjUsIDIzMiwgMjI5LCAxLCAyMDYsIDIzMiwgMjI5LCAKKyAgICAxLCAxNjIsIDIzMiwgMjI5LCAyNSwgNSwgNjEsIDIzMiwgMjI5LCAyNSwgNSwgNzQsIDIzMiwgMjI5LCAyNSwgNSwgNjksIAorICAgIDIzMiwgMjI5LCAyNSwgNSwgMjQ1LCAyMTcsIDIzMiwgMjI5LCAyNSwgNSwgMjU0LCAyMTAsIDIzMiwgMjI5LCAyNSwgNSwgCisgICAgMjI2LCAxODcsIDIzMiwgMjI5LCAyNSwgNSwgMjUzLCAyMDAsIDIzMiwgMjI5LCAyNSwgNSwgNzYsIDIzMiwgMjI5LCAyNSwgCisgICAgNSwgNzgsIDIzMiwgMjI5LCAyMTgsIDc0LCAxLCAxOTIsIDIzMiwgMjI5LCAyMTgsIDc0LCAxLCAyMDUsIDIzMiwgMjI5LCAKKyAgICAyMTgsIDc0LCAxLCAyMTIsIDY1LCAyMzIsIDIyOSwgNCwgMSwgMTc2LCAyMzIsIDIyOSwgNCwgMSwgMjI5LCA4MiwgMjMyLCAKKyAgICAyMjksIDQsIDEsIDI1NCwgODMsIDIzMiwgMjI5LCA0LCAxLCAyMTcsIDEwNiwgMjMyLCAyMjksIDQsIDEsIDE5OCwgMjMyLCAKKyAgICAyMjksIDQsIDEsIDE5MSwgMjMyLCAyMjksIDQsIDEsIDE4NiwgMjMyLCAyMjksIDQsIDEsIDIwNSwgMjMyLCAyMjksIDQsIDEsIAorICAgIDIzMywgMTQxLCAyMzIsIDIyOSwgNSwgMjMwLCA5NCwgMjMyLCAyMjksIDUsIDIzNCwgMTc3LCAyMzIsIDIyOSwgNSwgMjIyLCAKKyAgICAzNCwgMjMyLCAyMjksIDUsIDIzMiwgMTMzLCAyMzIsIDIyOSwgMjQ1LCAzOSwgNzksIDIzMiwgMjI5LCAyMjQsIDE2LCA3OSwgCisgICAgMjMyLCAyMjksIDIxLCAyMTAsIDg2LCAyMzIsIDIyOSwgMjEsIDExMSwgMjMyLCAyMjksIDIxLCAxMDUsIDIzMiwgMjI5LCAKKyAgICAyMSwgMTU4LCAyMzIsIDIyOSwgMjEsIDE2MSwgMjMyLCAyMjksIDIxLCAxOTAsIDIzMiwgMjI5LCAyMSwgMTk1LCAyMzIsIAorICAgIDIyOSwgMjEsIDE5OSwgMjMyLCAyMjksIDIxLCAxOTYsIDIzMiwgMjI5LCAyMSwgMjAxLCAzOSwgMjMzLCA2NSwgMSwgMTc2LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjExLCAxNjUsIDM5LCAyMzMsIDY1LCAxLCAyMjksIDgyLCAzOSwgMjMzLCA2NSwgMSwgMjE1LCAKKyAgICAxODQsIDM5LCAyMzMsIDY1LCAxLCAyMDYsIDM5LCAyMzMsIDY1LCAxLCAxOTIsIDM5LCAyMzMsIDY1LCAxLCAyMTcsIDEwNiwgCisgICAgMzksIDIzMywgNjUsIDEsIDIxNiwgMjA5LCAzOSwgMjMzLCA2NSwgMSwgMjMzLCAxNDEsIDM5LCAyMzMsIDY1LCAxLCAxOTEsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMjUsIDE1MCwgMzksIDIzMywgNjUsIDEsIDE4NiwgMzksIDIzMywgNjUsIDEsIDI0NCwgMjA0LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgMjE0LCAyNywgMzksIDIzMywgNjUsIDEsIDE2MiwgMzksIDIzMywgNjUsIDEsIDIyNCwgOTEsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMzQsIDEzOCwgMzksIDIzMywgNjUsIDEsIDIxNSwgMTc2LCAzOSwgMjMzLCA2NSwgMSwgMTk4LCAKKyAgICAzOSwgMjMzLCA2NSwgMSwgNjEsIDM5LCAyMzMsIDY1LCAxLCA3NCwgMzksIDIzMywgNjUsIDEsIDI0NSwgMjE3LCAzOSwgCisgICAgMjMzLCA2NSwgMSwgMjQ1LCAyMDUsIDM5LCAyMzMsIDY1LCAxLCA2OSwgMzksIDIzMywgNjUsIDEsIDIyNiwgMTg3LCAzOSwgCisgICAgMjMzLCA2NSwgMSwgNzgsIDM5LCAyMzMsIDY1LCAxLCAyMTQsIDIxNCwgMzksIDIzMywgNjUsIDEsIDc2LCAzOSwgMjMzLCAKKyAgICA2NSwgMSwgMjUzLCAxOTgsIDM5LCAyMzMsIDY1LCAxLCAyNTQsIDIxMCwgMzksIDIzMywgNjUsIDEsIDIxNiwgMjksIDM5LCAKKyAgICAyMzMsIDY1LCAxLCAyMTYsIDI4LCAzOSwgMjMzLCA2NSwgMSwgMjE2LCAyNywgMzksIDIzMywgNjUsIDEsIDIxNiwgMjYsIAorICAgIDM5LCAyMzMsIDY1LCAxLCAyMTYsIDI1LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjI0LCA5MSwgMTY2LCAzOSwgMTczLCAxLCAKKyAgICAxMjEsIDIyNCwgOTEsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxNzYsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTEsIDE2NSwgCisgICAgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIyOSwgODIsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxNzYsIDE2NiwgMzksIDE3MywgCisgICAgMSwgMTIxLCAyMTEsIDE2NSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIyOSwgODIsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAKKyAgICAyMTUsIDE4NCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDIwNiwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE5MiwgMTY2LCAzOSwgCisgICAgMTczLCAxLCAxMjEsIDIxNSwgMTg0LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjA2LCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgCisgICAgMTkyLCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjE3LCAxMDYsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTYsIDIwOSwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDE5OCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIxNywgMTA2LCAxNjYsIDM5LCAxNzMsIDEsIAorICAgIDEyMSwgMjE2LCAyMDksIDE2NiwgMzksIDE3MywgMSwgMTIxLCAxOTgsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAxOTEsIDE2NiwgCisgICAgMzksIDE3MywgMSwgMTI1LCAyMjUsIDE1MCwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE4NiwgMTY2LCAzOSwgMTczLCAxLCAKKyAgICAxMjEsIDE5MSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDIyNSwgMTUwLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMTg2LCAxNjYsIAorICAgIDM5LCAxNzMsIDEsIDEyNSwgMjQ0LCAyMDQsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTQsIDI3LCAxNjYsIDM5LCAxNzMsIAorICAgIDEsIDEyNSwgMjMzLCAxNDEsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNDQsIDIwNCwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIAorICAgIDIxNCwgMjcsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyMzMsIDE0MSwgMTY2LCAzOSwgMTczLCAxLCAxMjUsIDE2MiwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjUsIDI0OCwgMjI5LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjUyLCAxOTksIDE2NiwgMzksIDE3MywgCisgICAgMSwgMTIxLCAxNjIsIDE2NiwgMzksIDE3MywgMSwgMTIxLCAyNDgsIDIyOSwgMTY2LCAzOSwgMTczLCAxLCAxMjEsIDI1MiwgCisgICAgMTk5LCAxNjYsIDM5LCAxNzMsIDEsIDEyNSwgMjMzLCAxOTAsIDE2NiwgMzksIDE3MywgMSwgMTI1LCAyMTEsIDEzOCwgMTY2LCAKKyAgICAzOSwgMTczLCAxLCAxMjEsIDIzMywgMTkwLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjExLCAxMzgsIDE2NiwgMzksIDE3MywgCisgICAgMSwgMTI1LCAyMTgsIDgzLCAxNjYsIDM5LCAxNzMsIDEsIDEyMSwgMjE4LCA4MywgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjUsIAorICAgIDIxOSwgMjQxLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTUsIDgyLCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMzYsIDQwLCAKKyAgICAxNjYsIDM5LCAxNzMsIDI1LCA1LCA2OSwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAxMTgsIDE2NiwgMzksIDE3MywgMjUsIAorICAgIDUsIDc2LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTQsIDI1MiwgMTY2LCAzOSwgMTczLCAyNSwgNSwgNzgsIDE2NiwgMzksIAorICAgIDE3MywgMjUsIDUsIDIyNywgNCwgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjE0LCAyMTQsIDE2NiwgMzksIDE3MywgMjUsIDUsIAorICAgIDI1MywgMTc1LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyNTUsIDM3LCAxNjYsIDM5LCAxNzMsIDI1LCA1LCAyMTQsIDExMSwgCisgICAgMTY2LCAzOSwgMTczLCAyNSwgNSwgMjI2LCAxMTMsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIyNywgMSwgMTY2LCAzOSwgMTczLCAKKyAgICAyNSwgNSwgMjE0LCAyMTAsIDE2NiwgMzksIDE3MywgMjUsIDUsIDIzNSwgMTU4LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMTQsIAorICAgIDEwNSwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjI5LCA4NCwgMTY2LCAzOSwgMTczLCAxLCA0MCwgMjMwLCAzMCwgMTY2LCAzOSwgCisgICAgMTczLCAxLCA0MCwgMTk0LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyMzUsIDI5LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNDksIAorICAgIDY4LCAxNjYsIDM5LCAxNzMsIDEsIDQwLCAyNTMsIDE2NiwgMTY2LCAzOSwgMTczLCAxMzgsIDIzMSwgMTYzLCAxNjYsIDM5LCAKKyAgICAxNzMsIDEzOCwgMjMxLCAxNjIsIDE2NiwgMzksIDE3MywgMjEsIDIxMCwgODYsIDE2NiwgMzksIDE3MywgMjEsIDExMSwgCisgICAgMTY2LCAzOSwgMTczLCAyMSwgMTA1LCAxNjYsIDM5LCAxNzMsIDIxLCAxNTgsIDE2NiwgMzksIDE3MywgMjEsIDE2MSwgMTY2LCAKKyAgICAzOSwgMTczLCAyMSwgMTkwLCAxNjYsIDM5LCAxNzMsIDIxLCAxOTUsIDE2NiwgMzksIDE3MywgMjEsIDE5OSwgMTY2LCAzOSwgCisgICAgMTczLCAyMSwgMTk2LCAxNjYsIDM5LCAxNzMsIDIxLCAyMDEsIDE2NiwgMzksIDE3MywgODksIDIxLCAxMTEsIDE2NiwgMzksIAorICAgIDE3MywgNSwgMjMzLCAxMjYsIDE2NiwgMzksIDE3MywgNSwgMjMzLCAxMjUsIDcwLCAxNiwgMjI1LCAyNDAsIDcwLCAxNiwgCisgICAgMjMwLCA3NywgMjM0LCAzMSwgNzAsIDE2LCAyMjUsIDc1LCAyMzQsIDMxLCA3MCwgMTYsIDI1MiwgNTgsIDIzNCwgMzEsIDcwLCAKKyAgICAxNiwgMjUxLCAxMTIsIDIzNCwgMzEsIDcwLCAxNiwgMjI0LCAyMTksIDIzNCwgMzEsIDcwLCAxNiwgMjI0LCAyMTMsIDIzNCwgCisgICAgMzEsIDcwLCAxNiwgMjI0LCAyMTEsIDIzNCwgMzEsIDcwLCAxNiwgMjI0LCAyMTcsIDIzNCwgMzEsIDcwLCAxNiwgMjI0LCAKKyAgICAyMTUsIDIzNCwgMzEsIDcwLCAxNiwgMjQ4LCAxODEsIDIzNCwgMzEsIDcwLCAxNiwgMjQ4LCAxNzcsIDIzNCwgMzEsIDcwLCAKKyAgICAxNiwgMjQ4LCAxNzYsIDIzNCwgMzEsIDcwLCAxNiwgMjQ4LCAxNzksIDIzNCwgMzEsIDcwLCAxNiwgMjQ4LCAxNzgsIDIzNCwgCisgICAgMzEsIDcwLCAxNiwgMjQ4LCAxNzUsIDIzNCwgMzEsIDcwLCAxNiwgMjE1LCA4NywgNzAsIDE2LCAyMzAsIDc3LCAyMjIsIAorICAgIDIwNywgNzAsIDE2LCAyMjUsIDc1LCAyMjIsIDIwNywgNzAsIDE2LCAyNTIsIDU4LCAyMjIsIDIwNywgNzAsIDE2LCAyNTEsIAorICAgIDExMiwgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTksIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjEzLCAyMjIsIDIwNywgCisgICAgNzAsIDE2LCAyMjQsIDIxMSwgMjIyLCAyMDcsIDcwLCAxNiwgMjI0LCAyMTcsIDIyMiwgMjA3LCA3MCwgMTYsIDIyNCwgMjE1LCAKKyAgICAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE4MSwgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxNzcsIDIyMiwgMjA3LCA3MCwgMTYsIAorICAgIDI0OCwgMTc2LCAyMjIsIDIwNywgNzAsIDE2LCAyNDgsIDE3OSwgMjIyLCAyMDcsIDcwLCAxNiwgMjQ4LCAxNzgsIDIyMiwgCisgICAgMjA3LCA3MCwgMTYsIDI0OCwgMTc1LCAyMjIsIDIwNywgMjUxLCAxMjksIDEsIDE3NiwgMjUxLCAxMjksIDEsIDI0MywgMTQyLCAKKyAgICAyNTEsIDEyOSwgMSwgMjI5LCA4MiwgMjUxLCAxMjksIDEsIDIyOSwgMjcsIDI1MSwgMTI5LCAxLCAxOTEsIDI1MSwgMTI5LCAKKyAgICAxLCAyNTIsIDE5OSwgMjUxLCAxMjksIDEsIDE4NiwgMjUxLCAxMjksIDEsIDIzMCwgMTEwLCAyNTEsIDEyOSwgMSwgMjE3LCAKKyAgICAxMDYsIDI1MSwgMTI5LCAxLCAyNDgsIDIyOSwgMjUxLCAxMjksIDEsIDE5OCwgMjUxLCAxMjksIDEsIDIyOCwgNDEsIDI1MSwgCisgICAgMTI5LCAxLCAyNTEsIDQxLCAyNTEsIDEyOSwgMSwgMjM1LCAxNDcsIDI1MSwgMTI5LCAxLCAyMjcsIDE2OSwgMjUxLCAxMjksIAorICAgIDEsIDIyNywgMTYyLCAyNTEsIDEyOSwgMSwgMTkyLCAyNTEsIDEyOSwgMSwgMjA1LCAyNTEsIDEyOSwgMSwgMjMzLCAxNDEsIAorICAgIDI1MSwgMTI5LCAxLCAyMTQsIDI3LCAyNTEsIDEyOSwgMSwgMjA2LCAyNTEsIDEyOSwgMSwgNjEsIDI1MSwgMTI5LCAxLCAKKyAgICAxNjIsIDI1MSwgMTI5LCAyNSwgNSwgNzQsIDI1MSwgMTI5LCAyNSwgNSwgNjksIDI1MSwgMTI5LCAyNSwgNSwgNzYsIDI1MSwgCisgICAgMTI5LCAyNSwgNSwgNzgsIDI1MSwgMTI5LCAyNSwgNSwgMjU0LCAyNTIsIDI1MSwgMTI5LCAyMjYsIDY0LCAyNTEsIDEyOSwgCisgICAgMjQ1LCAxNTEsIDY0LCAyMjEsIDE3NCwgMzksIDg5LCAxLCAxMjUsIDE3NiwgMzksIDg5LCAxLCAxMjUsIDIzNCwgMTM4LCAKKyAgICAzOSwgODksIDEsIDEyNSwgMjMzLCAxNzcsIDM5LCA4OSwgMSwgMTIxLCAxNzYsIDM5LCA4OSwgMSwgMTIxLCAyMzMsIDE3NywgCisgICAgMzksIDg5LCAxLCAxMjEsIDIzNCwgMTM4LCAzOSwgODksIDEsIDIyOSwgODIsIDM5LCA4OSwgMSwgMTI1LCAyNTEsIDQxLCAKKyAgICAzOSwgODksIDEsIDEyNSwgMjUwLCAxNjUsIDM5LCA4OSwgMSwgMTIxLCAyNTEsIDQxLCAzOSwgODksIDEsIDEyMSwgMjA2LCAKKyAgICAzOSwgODksIDEsIDEyMSwgMjUwLCAxNjUsIDM5LCA4OSwgMSwgMjI3LCAxNjksIDM5LCA4OSwgMSwgMjIzLCAxNDMsIDM5LCAKKyAgICA4OSwgMSwgMTI1LCAyMjMsIDE0MSwgMzksIDg5LCAxLCAyNDgsIDIyOSwgMzksIDg5LCAxLCAxMjEsIDIyMywgMTQxLCAzOSwgCisgICAgODksIDEsIDIyMywgMTUyLCAzOSwgODksIDEsIDEyNSwgMjE3LCAxMDYsIDM5LCA4OSwgMSwgMTI1LCAyMTYsIDIwOSwgMzksIAorICAgIDg5LCAxLCAxMjEsIDIxNywgMTA2LCAzOSwgODksIDEsIDEyMSwgMjE2LCAyMDksIDM5LCA4OSwgMSwgMTk4LCAzOSwgODksIAorICAgIDEsIDI1MiwgMTk5LCAzOSwgODksIDEsIDEyNSwgMTkxLCAzOSwgODksIDEsIDEyNSwgMjI1LCAxNTAsIDM5LCA4OSwgMSwgCisgICAgMTI1LCAyNDQsIDIwNCwgMzksIDg5LCAxLCAxMjEsIDE5MSwgMzksIDg5LCAxLCAxMjEsIDI0NCwgMjA0LCAzOSwgODksIDEsIAorICAgIDEyMSwgMjI1LCAxNTAsIDM5LCA4OSwgMSwgMTg2LCAzOSwgODksIDEsIDEyMSwgMTkyLCAzOSwgODksIDEsIDEyNSwgMTkyLCAKKyAgICAzOSwgODksIDEsIDIwNSwgMzksIDg5LCAxLCAyMjIsIDEzOSwgMzksIDg5LCAxLCAyMzMsIDE0MSwgMzksIDg5LCAxLCAyMzIsIAorICAgIDk4LCAzOSwgODksIDEsIDIxMiwgNjUsIDM5LCA4OSwgMSwgMTI1LCAyMjAsIDEwNCwgMzksIDg5LCAxLCAxMjUsIDIxOCwgCisgICAgMjI1LCAzOSwgODksIDEsIDEyNSwgMjA2LCAzOSwgODksIDEsIDEyNSwgMTYyLCAzOSwgODksIDEsIDIzMiwgMTkwLCAzOSwgCisgICAgODksIDEsIDYxLCAzOSwgODksIDEsIDEyMSwgMTYyLCAzOSwgODksIDEsIDc0LCAzOSwgODksIDEsIDIzNiwgNDAsIDM5LCAKKyAgICA4OSwgMSwgNjksIDM5LCA4OSwgMSwgMjE0LCAxMTgsIDM5LCA4OSwgMSwgMjQ1LCAyMTcsIDM5LCA4OSwgMSwgMjI2LCAxODcsIAorICAgIDM5LCA4OSwgMSwgMjMzLCAxMjYsIDM5LCA4OSwgMSwgMjQyLCAxMzksIDIwNiwgMzksIDg5LCAxMTcsIDUsIDE0NywgMjA1LCAKKyAgICAzOSwgODksIDExNywgNSwgMTQ3LCAyMzMsIDE0MSwgMzksIDg5LCAxMTcsIDUsIDIzMywgMTQyLCAyMTcsIDU5LCAyMzMsIAorICAgIDExNSwgMzksIDg5LCA1LCAyMzEsIDIwOSwgMjM0LCAyMzcsIDIzMywgMTE1LCAzOSwgODksIDExNywgNSwgNDAsIDIyOSwgCisgICAgODIsIDM5LCA4OSwgMTE3LCA1LCAxMjEsIDE5MSwgMzksIDg5LCAxMTcsIDUsIDEyNSwgMjIzLCAxNDIsIDE3NywgMTIxLCAKKyAgICAxOTEsIDM5LCA4OSwgMTE3LCA1LCAxODYsIDM5LCA4OSwgMTE3LCA1LCAyNTIsIDE5OSwgMzksIDg5LCAxMTcsIDUsIDIwNiwgCisgICAgMzksIDg5LCA1LCAyMjIsIDEyLCAzOSwgODksIDI1LCA1LCA2MSwgMzksIDg5LCAyNSwgNSwgMjMxLCAyMDksIDIyMSwgMjI4LCAKKyAgICAzOSwgODksIDI1LCA1LCAyNTUsIDgyLCAzOSwgODksIDI1LCA1LCAyMTcsIDY1LCAyNTUsIDgyLCAzOSwgODksIDI1LCA1LCAKKyAgICA3NCwgMzksIDg5LCAyNSwgNSwgMjM2LCA0MCwgMzksIDg5LCAyNSwgNSwgMjE0LCAyMTQsIDM5LCA4OSwgMjUsIDUsIDIxNCwgCisgICAgMTE3LCAzOSwgODksIDI1LCA1LCA2OSwgMzksIDg5LCAyNSwgNSwgMjE0LCAxMTgsIDM5LCA4OSwgMjUsIDUsIDc4LCAzOSwgCisgICAgODksIDI1LCA1LCAyMjcsIDUsIDUxLCAzOSwgODksIDI1LCA1LCAyMjYsIDExMywgMzksIDg5LCAyNSwgNSwgNzYsIDM5LCAKKyAgICA4OSwgMjUsIDUsIDI1NCwgMjUyLCAzOSwgODksIDI1LCA1LCAyMjYsIDE4NywgMzksIDg5LCAyNSwgNSwgMjU0LCAyMTAsIAorICAgIDM5LCA4OSwgMjUsIDUsIDg5LCAyNTQsIDIxMCwgMzksIDg5LCAyNSwgNSwgMjI3LCA1LCA0OCwgMzksIDg5LCA1LCAyMzEsIAorICAgIDIwOSwgMjM0LCAyMzYsIDM5LCA4OSwgNSwgMjE2LCAzMCwgMzksIDg5LCA1LCAyMTYsIDI5LCAzOSwgODksIDUsIDIzNCwgCisgICAgMTAzLCAyMTYsIDI4LCAzOSwgODksIDUsIDIzNCwgMTAzLCAyMTYsIDI3LCAzOSwgODksIDUsIDIzNCwgMTAzLCAyMTYsIDI2LCAKKyAgICAzOSwgODksIDUsIDIyMywgMTkxLCAyNDIsIDUyLCAzOSwgODksIDUsIDIzMSwgMjA5LCAyMjEsIDI1NSwgMzksIDg5LCA1LCAKKyAgICAyMzQsIDEwMiwgMjM0LCAyMjEsIDM5LCA4OSwgMzgsIDI0OSwgMTIzLCAyNDcsIDEyOCwgMzksIDg5LCAyNDEsIDUzLCAyMSwgCisgICAgMjEwLCA4NiwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTExLCAzOSwgODksIDI0MSwgNTMsIDIxLCAxMDUsIDM5LCA4OSwgMjQxLCAKKyAgICA1MywgMjEsIDE1OCwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTYxLCAzOSwgODksIDI0MSwgNTMsIDIxLCAxOTAsIDM5LCA4OSwgCisgICAgMjQxLCA1MywgMjEsIDE5NSwgMzksIDg5LCAyNDEsIDUzLCAyMSwgMTk5LCAzOSwgODksIDI0MSwgNTMsIDIxLCAxOTYsIDM5LCAKKyAgICA4OSwgMjQxLCA1MywgMjEsIDIwMSwgMzksIDg5LCA4OSwgMjEsIDIxMCwgODYsIDM5LCA4OSwgODksIDIxLCAxMTEsIDM5LCAKKyAgICA4OSwgODksIDIxLCAxMDUsIDM5LCA4OSwgODksIDIxLCAxNTgsIDM5LCA4OSwgODksIDIxLCAxNjEsIDM5LCA4OSwgODksIAorICAgIDIxLCAxOTAsIDM5LCA4OSwgODksIDIxLCAxOTUsIDM5LCA4OSwgODksIDIxLCAxOTksIDM5LCA4OSwgODksIDIxLCAxOTYsIAorICAgIDM5LCA4OSwgODksIDIxLCAyMDEsIDM5LCA4OSwgNSwgMjExLCAyNDksIDM5LCA4OSwgNSwgMjExLCAyNDgsIDM5LCA4OSwgNSwgCisgICAgMjIxLCAyMTcsIDM5LCA4OSwgNSwgMjM0LCAxNjYsIDM5LCA4OSwgNSwgMjQwLCAyMzksIDM5LCA4OSwgNSwgMjQ3LCAxNDIsIAorICAgIDM5LCA4OSwgNSwgMjIzLCA1MiwgMjIyLCAxODksIDIyMywgMTUyLCAzOSwgODksIDUsIDIzMSwgMjA5LCAyMTEsIDcyLCAzOSwgCisgICAgODksIDUsIDIzNSwgMTIsIDM5LCA4OSwgNSwgMjM1LCAxMSwgMzksIDg5LCA1LCAyMjEsIDIyNCwgMzksIDg5LCA1LCAyMjEsIAorICAgIDIyMywgMzksIDg5LCA1LCAyNDIsIDE2LCAzOSwgODksIDUsIDI1MSwgMzgsIDEwMiwgNSwgMjE0LCAyMDAsIDIyMywgMzMsIAorICAgIDEwMiwgNSwgMjE0LCAyMDAsIDI1MSwgOSwgMTAyLCA1LCAyNTAsIDE5NCwgMTAyLCA1LCAyMTgsIDE2LCAxMDIsIDUsIDI1MSwgCisgICAgMjQxLCAxMDIsIDEsIDI1NCwgMTkzLCAxMDIsIDEsIDI1NCwgMTk0LCAyMTcsIDE0LCAxMDIsIDEsIDIzNiwgMzYsIDEwMiwgCisgICAgMSwgMjM2LCAzNywgMjE3LCAxNCwgMTAyLCAxLCAyMTQsIDIwMywgMTAyLCAxLCAyMTQsIDIwNCwgMjE3LCAxNCwgMTAyLCAxLCAKKyAgICAyMjMsIDE5MSwgMjIzLCA4MiwgMTAyLCAxLCAyMjMsIDE5MSwgMjIzLCA4MywgMjE3LCAxNCwgMTAyLCAxLCAyMzMsIDE0MiwgCisgICAgMjMzLCAzMCwgMTAyLCAxLCAyMzMsIDE0MiwgMjMzLCAzMSwgMjE3LCAxNCwgMTAyLCAxLCAyNDUsIDE4NywgMTAyLCAxLCAKKyAgICAyNTQsIDIwOCwgMTAyLCAxLCAyMjYsIDIxNiwgMTAyLCAxLCAyMjYsIDIxNywgMjE3LCAxNCwgMTAyLCAxLCAxNzYsIDEwMiwgCisgICAgMSwgMjM1LCAxOSwgMjMxLCAyMTIsIDEwMiwgMSwgMjQzLCAxNDIsIDEwMiwgMSwgMjQzLCAxNDMsIDI0MiwgMTY4LCAxMDIsIAorICAgIDEsIDIyOSwgODIsIDEwMiwgMSwgMjUxLCA0MSwgMTAyLCAxLCAyNTEsIDQyLCAyMzMsIDEyOSwgMTAyLCAxLCAyMzUsIDE0NywgCisgICAgMTAyLCAxLCAyMzUsIDE0OCwgMjM1LCAxMjQsIDEwMiwgMSwgMjI3LCAxNjksIDEwMiwgMSwgMjE3LCAxMDcsIDIzMywgODIsIAorICAgIDEwMiwgMSwgMjE3LCAxMDcsIDIzMCwgNzIsIDIzMSwgMjEyLCAxMDIsIDEsIDI0OCwgMjMwLCAyMzAsIDcyLCAyNTQsIDE1MywgCisgICAgMTAyLCAxLCAyNDgsIDIzMCwgMjMwLCA3MiwgMjMxLCAyMTIsIDEwMiwgMSwgMjI5LCAyMzQsIDIyMywgMTU1LCAxMDIsIDEsIAorICAgIDIxNywgMTA2LCAxMDIsIDEsIDIxNywgMTA3LCAyMTcsIDM2LCAxMDIsIDEsIDI0OCwgMjI5LCAxMDIsIDEsIDI0OCwgMjMwLCAKKyAgICAyMzEsIDIzMCwgMTAyLCAxLCAxOTgsIDEwMiwgMSwgMTkxLCAxMDIsIDEsIDIyNiwgOTQsIDIzNCwgMjMyLCAxMDIsIDEsIAorICAgIDI1MiwgMTk5LCAxMDIsIDEsIDI1MiwgMjAwLCAyMzQsIDE3OCwgMTAyLCAxLCAxODYsIDEwMiwgMSwgMTkyLCAxMDIsIDEsIAorICAgIDIwNSwgMTAyLCAxLCAyMzMsIDE0MSwgMTAyLCAxLCAyMTIsIDY1LCAxMDIsIDEsIDIyMiwgMzYsIDIyMiwgMjIsIDEwMiwgMSwgCisgICAgMjIyLCAzNiwgMjIxLCAyMzUsIDEwMiwgMSwgMjA2LCAxMDIsIDEsIDE2MiwgMTAyLCA1LCAyMjMsIDczLCAxMDIsIDI1LCA1LCAKKyAgICAyMTcsIDE0LCAxMDIsIDI1LCA1LCAyMTQsIDE5OSwgMTAyLCAyNSwgNSwgMjE0LCAyMDAsIDIyMSwgMjMxLCAxMDIsIDI1LCAKKyAgICA1LCAyMTgsIDQ4LCAxMDIsIDI1LCA1LCAyMTgsIDQ5LCAyMzYsIDI4LCAxMDIsIDI1LCA1LCAyMjMsIDE5MSwgMjIzLCA4MiwgCisgICAgMTAyLCAyNSwgNSwgMjIzLCAxOTEsIDIyMywgODMsIDIxNywgMTQsIDEwMiwgMjUsIDUsIDIzMywgMTQyLCAyMzMsIDMwLCAKKyAgICAxMDIsIDI1LCA1LCAyMzMsIDE0MiwgMjMzLCAzMSwgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjE3LCA2NiwgMTAyLCAyNSwgNSwgCisgICAgMjE3LCA2NywgMjIzLCA4MiwgMTAyLCAyNSwgNSwgMjE3LCA2NywgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjE3LCA2NywgMjIzLCAKKyAgICA4MywgMjE3LCAxNCwgMTAyLCAyNSwgNSwgMjI1LCAxODcsIDEwMiwgMjUsIDUsIDIyNSwgMTg4LCAyMTcsIDE0LCAxMDIsIAorICAgIDI1NSwgMywgMjU1LCAyLCAxMDIsIDEsIDIzNSwgMSwgMjIxLCAyMzAsIDEwMiwgMSwgMjM0LCAxMDgsIDIyMSwgMjMwLCAKKyAgICAxMDIsIDEsIDIxNSwgMzQsIDIyMSwgMjMwLCAxMDIsIDEsIDI0NSwgMjExLCAyMjEsIDIzMCwgMTAyLCAxLCAyMTQsIDAsIAorICAgIDIyMSwgMjMwLCAxMDIsIDEsIDIxMCwgMTA3LCAyMjEsIDIzMCwgMTAyLCAxLCAyNTMsIDIxNywgMjIxLCAyMzAsIDEwMiwgCisgICAgMjEsIDIxMCwgODYsIDEwMiwgMjEsIDExMSwgMTAyLCAyMSwgMTA1LCAxMDIsIDIxLCAxNTgsIDEwMiwgMjEsIDE2MSwgMTAyLCAKKyAgICAyMSwgMTkwLCAxMDIsIDIxLCAxOTUsIDEwMiwgMjEsIDE5OSwgMTAyLCAyMSwgMTk2LCAxMDIsIDIxLCAyMDEsIDEwMiwgCisgICAgMjI2LCAzMywgMTAyLCAyMjYsIDU5LCAxMDIsIDIxMSwgMjM4LCAxMDIsIDI1MCwgMjQ0LCAyMjYsIDUyLCAxMDIsIDI1MCwgCisgICAgMjQ0LCAyMTksIDE3NCwgMTAyLCAyNTAsIDI0NCwgMjI2LCA2LCAxMDIsIDIyNiwgNTgsIDEwMiwgMjgsIDE2LCAyNDcsIAorICAgIDEzNCwgMTAyLCAyOCwgMTYsIDI0OCwgNTksIDEwMiwgMjgsIDE2LCAyNDYsIDcyLCAxMDIsIDI4LCAxNiwgMjQ4LCAxODQsIAorICAgIDEwMiwgMjgsIDE2LCAyNDgsIDE4NSwgMjE4LCAxNiwgMTAyLCAyOCwgMTYsIDI0NywgMjEzLCAxMDIsIDI4LCAxNiwgMjQ4LCAKKyAgICAyMjIsIDEwMiwgMjgsIDE2LCAyNDgsIDQxLCAxMDIsIDI4LCAxNiwgMjQ4LCAyMDYsIDEwMiwgMjgsIDE2LCAyNDgsIDE4NSwgCisgICAgMjQzLCA2NCwgMTAyLCAyOCwgMTYsIDM4LCAyMTcsIDEwLCAxMDIsIDI4LCAxNiwgMzgsIDI0NSwgMTQ5LCAxMDIsIDI4LCAKKyAgICAxNiwgMzgsIDIzNCwgMTczLCAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTc1LCAxMDIsIDI4LCAxNiwgMzgsIDIzNSwgMTI4LCAKKyAgICAxMDIsIDI4LCAxNiwgMzgsIDIzNCwgMTc0LCAyLCAyMzUsIDEyOCwgMTAyLCAyOCwgMTYsIDM4LCAyMzQsIDE3NiwgMiwgCisgICAgMjM1LCAxMjgsIDEwMiwgMjgsIDE2LCAzOCwgMjUyLCA0NSwgMTAyLCAyOCwgMTYsIDM4LCAyNDIsIDE3MiwgMTAyLCAyOCwgCisgICAgMTYsIDIyMiwgMjUyLCAyMDQsIDI0NiwgODIsIDEwMiwgMjgsIDE2LCAyMjIsIDI1MiwgMjA0LCAyNDgsIDIyMCwgMTAyLCAKKyAgICAyOCwgMTYsIDIyMiwgMjUyLCAyNTAsIDgsIDIxNSwgMTEyLCAxMDIsIDI4LCAxNiwgMjIyLCAyNTIsIDI1MCwgOCwgMjE3LCAKKyAgICA3NCwgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDIwNCwgMjI2LCA0NywgMTAyLCAyOCwgMTYsIDIzMywgNTAsIDIwNCwgMjI0LCAKKyAgICAxNDIsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyNTAsIDgsIDIyNSwgNDEsIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyNTAsIDgsIAorICAgIDIyNSwgMjksIDEwMiwgMjgsIDE2LCAyMzMsIDUwLCAyMDQsIDIyNSwgNjQsIDIwNywgNSwgMjI2LCAzMCwgMjA3LCA1LCAKKyAgICAyMjYsIDQzLCAyMDcsIDUsIDIyNiwgMzksIDIwNywgMSwgNjEsIDIwNywgMSwgNzQsIDIwNywgMSwgNjksIDIwNywgMSwgCisgICAgMjU0LCAyNTIsIDIwNywgMSwgNzgsIDIwNywgMSwgNzYsIDIwNywgMSwgMjQ1LCA2MywgMjA3LCAxLCAxNzYsIDIwNywgMSwgCisgICAgMjI0LCA5MSwgMjA3LCAxLCAyNDMsIDE0MiwgMjA3LCAxLCAyMjksIDgyLCAyMDcsIDEsIDI1MSwgNDEsIDIwNywgMSwgMjM1LCAKKyAgICAxNDcsIDIwNywgMSwgMjEwLCAxMTYsIDIwNywgMSwgMjI3LCAxNjksIDIwNywgMSwgMjE3LCAxMDYsIDIwNywgMSwgMjQ4LCAKKyAgICAyMjksIDIwNywgMSwgMTk4LCAyMDcsIDEsIDE5MSwgMjA3LCAxLCAyNDQsIDIwNCwgMjA3LCAxLCAyMTQsIDI3LCAyMDcsIDEsIAorICAgIDI1MiwgMTk5LCAyMDcsIDEsIDE4NiwgMjA3LCAxLCAxOTIsIDIwNywgMSwgMjA1LCAyMDcsIDEsIDIzMywgMTQxLCAyMDcsIAorICAgIDEsIDIxMiwgNjUsIDIwNywgMSwgMjA2LCAyMDcsIDEsIDIxMSwgMTY1LCAyMDcsIDEsIDE2MiwgMjA3LCAxMTcsIDUsIDIyNiwgCisgICAgNTYsIDIwNywgMTE3LCA1LCAyMjYsIDMyLCAyMDcsIDExNywgNSwgMjI2LCAyOSwgMjA3LCAyNSwgNSwgMjI2LCA0NiwgMjA3LCAKKyAgICAyNSwgNSwgMjI2LCAyOCwgMjA3LCAyNSwgNSwgMjI2LCA1MCwgMjA3LCAyNSwgNSwgMjI2LCAzOCwgMjA3LCAyNSwgNSwgCisgICAgMjI2LCA1NywgMjA3LCAyNSwgNSwgMjI2LCA0OCwgMjA3LCA1LCAyMjYsIDYwLCAyMDcsIDUsIDIxMywgMTUyLCAyMDcsIAorICAgIDExNywgNSwgMjI1LCAyNTIsIDE4NiwgMjA3LCAxMTcsIDUsIDIyNSwgMjUyLCAyMTIsIDY1LCAyMDcsIDEsIDIzNCwgMTM4LCAKKyAgICAyMDcsIDEsIDIxNywgMjMyLCAyMDcsIDIxLCAyMTAsIDg2LCAyMDcsIDIxLCAxMTEsIDIwNywgMjEsIDEwNSwgMjA3LCAyMSwgCisgICAgMTU4LCAyMDcsIDIxLCAxNjEsIDIwNywgMjEsIDE5MCwgMjA3LCAyMSwgMTk1LCAyMDcsIDIxLCAxOTksIDIwNywgMjEsIAorICAgIDE5NiwgMjA3LCAyMSwgMjAxLCAyMDcsIDI1MywgMTgzLCAyMDcsIDEsIDIyMywgNTUsIDIwNywgMSwgMjMzLCAxMywgMjA3LCAKKyAgICAxLCAyNTIsIDI2LCAyMDcsIDEsIDQwLCAyMzUsIDI5LCAyMDcsIDEsIDQwLCAxOTQsIDI1MiwgMTI4LCAxLCA2MSwgMjUyLCAKKyAgICAxMjgsIDEsIDIxOSwgMTY2LCA2MSwgMjUyLCAxMjgsIDEsIDE2MiwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAxNjIsIDI1MiwgCisgICAgMTI4LCAxLCAyMzEsIDE4NiwgMTYyLCAyNTIsIDEyOCwgMSwgMjUyLCAxOTksIDI1MiwgMTI4LCAxLCAyMzQsIDIxOCwgMjUyLCAKKyAgICAxOTksIDI1MiwgMTI4LCAxLCAxOTEsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMTkxLCAyNTIsIDEyOCwgMSwgMTk4LCAyNTIsIAorICAgIDEyOCwgMSwgMjMxLCAxODYsIDE5OCwgMjUyLCAxMjgsIDEsIDIxMiwgNjUsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMjEyLCAKKyAgICA2NSwgMjUyLCAxMjgsIDEsIDIyNiwgNzEsIDIxMiwgNjUsIDI1MiwgMTI4LCAxLCAyNDMsIDE0MiwgMjUyLCAxMjgsIDEsIAorICAgIDIxOSwgMTY2LCAyNDMsIDE0MiwgMjUyLCAxMjgsIDEsIDIzNSwgMTQ3LCAyNTIsIDEyOCwgMSwgMjQ4LCAyMjksIDI1MiwgCisgICAgMTI4LCAxLCAyMDUsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMjA1LCAyNTIsIDEyOCwgMSwgMTg2LCAyNTIsIDEyOCwgMSwgCisgICAgMjE5LCAxNjYsIDE4NiwgMjUyLCAxMjgsIDEsIDIxOSwgMjgsIDIxNywgMTA2LCAyNTIsIDEyOCwgMSwgMjI4LCA2MCwgMjE3LCAKKyAgICAxMDYsIDI1MiwgMTI4LCAxLCAyMDYsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMjA2LCAyNTIsIDEyOCwgMSwgMjMxLCAxODYsIAorICAgIDIwNiwgMjUyLCAxMjgsIDEsIDE5MiwgMjUyLCAxMjgsIDEsIDIxOSwgMTY2LCAxOTIsIDI1MiwgMTI4LCAxLCAyMjksIDgyLCAKKyAgICAyNTIsIDEyOCwgMSwgMjMzLCAxNDEsIDI1MiwgMTI4LCAxLCAyMTksIDE2NiwgMjMzLCAxNDEsIDI1MiwgMTI4LCAxLCAyMjcsIAorICAgIDE2OSwgMjUyLCAxMjgsIDEsIDI1MSwgNDEsIDI1MiwgMTI4LCAxLCAyMjksIDE1MywgMjUyLCAxMjgsIDEsIDIzMSwgMTI5LCAKKyAgICAyNTIsIDEyOCwgMSwgNzQsIDI1MiwgMTI4LCAxLCA2OSwgMjUyLCAxMjgsIDUsIDIxNiwgMzQsIDI1MiwgMTI4LCAyNSwgNSwgCisgICAgNzYsIDI1MiwgMTI4LCAyNSwgNSwgMjI2LCA3MSwgNzYsIDI1MiwgMTI4LCAyNSwgNSwgMjQ1LCAyMTcsIDI1MiwgMTI4LCAKKyAgICAyNSwgNSwgNzQsIDI1MiwgMTI4LCAyNSwgNSwgMjM0LCAyMTgsIDc0LCAyNTIsIDEyOCwgMjUsIDUsIDc4LCAyNTIsIDEyOCwgCisgICAgMjUsIDUsIDIzNCwgMjE4LCA3OCwgMjUyLCAxMjgsIDI1LCA1LCA2OSwgMjUyLCAxMjgsIDI1LCA1LCAxMDQsIDMxLCAyMTksIAorICAgIDE2NiwgMjA2LCAyNTIsIDEyOCwgMTE3LCA1LCAyMjksIDg0LCAyNTIsIDEyOCwgMTE3LCA1LCAyNDIsIDY3LCAyNTIsIDEyOCwgCisgICAgMjI2LCA0MSwgMjUyLCAxMjgsIDIyNiwgMzcsIDI1MiwgMTI4LCAxNiwgMjUxLCAyNDksIDIyOSwgMjM0LCAyMzEsIDQyLCAKKyAgICAyNTIsIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMjUsIDY3LCAyNTIsIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMzUsIDU0LCAyNTIsIAorICAgIDEyOCwgMTYsIDI1MSwgMjQ5LCAyMjYsIDQxLCAxOTcsIDEsIDE3NiwgMTk3LCAxLCAyMzQsIDQ1LCAxOTcsIDEsIDIzNCwgCisgICAgMTM4LCAxOTcsIDEsIDI0MywgMTQyLCAxOTcsIDEsIDI0MiwgMTkzLCAxOTcsIDEsIDIyOSwgODIsIDE5NywgMSwgMjUxLCAKKyAgICA0MSwgMTk3LCAxLCAyNTAsIDE2NSwgMTk3LCAxLCAyMzUsIDE0NywgMTk3LCAxLCAyMjcsIDE2OSwgMTk3LCAxLCAyMTcsIAorICAgIDEwNiwgMTk3LCAxLCAyMTYsIDIwOSwgMTk3LCAxLCAyNDgsIDIyOSwgMTk3LCAxLCAxOTgsIDE5NywgMSwgMTkxLCAxOTcsIAorICAgIDEsIDIyNSwgNDUsIDE5NywgMSwgMjI1LCAxNTAsIDE5NywgMSwgMjQ0LCAyMDQsIDE5NywgMSwgMjQ0LCA4MywgMTk3LCAxLCAKKyAgICAyNTIsIDE5OSwgMTk3LCAxLCAyNTEsIDIzMCwgMTk3LCAxLCAxODYsIDE5NywgMSwgMjMwLCAxNzMsIDE5NywgMSwgMjE1LCAKKyAgICAxODQsIDE5NywgMSwgMjE1LCAxNzYsIDE5NywgMSwgMjQ2LCA0NiwgMTk3LCAxLCAxOTIsIDE5NywgMSwgMjA1LCAxOTcsIDEsIAorICAgIDIzMywgMTQxLCAxOTcsIDEsIDE2MiwgMTk3LCAxLCAyNDEsIDE2MCwgMTk3LCAxLCAyMTQsIDI3LCAxOTcsIDEsIDIwNiwgCisgICAgMTk3LCAxLCAyMjAsIDEwNCwgMTk3LCAxLCAyMTIsIDY1LCAxOTcsIDEsIDYxLCAxOTcsIDIxOCwgNzQsIDEsIDE5MiwgMTk3LCAKKyAgICAyMTgsIDc0LCAxLCAyMDUsIDE5NywgMjUsIDUsIDI1NSwgODIsIDE5NywgMjUsIDUsIDc0LCAxOTcsIDI1LCA1LCA3OCwgCisgICAgMTk3LCAyNSwgNSwgMjI2LCAxODcsIDE5NywgMjUsIDUsIDY5LCAxOTcsIDI1LCA1LCAyMTQsIDExOCwgMTk3LCAyNSwgNSwgCisgICAgNzYsIDE5NywgMTE3LCA1LCAyMzUsIDI5LCAxOTcsIDExNywgNSwgMTk0LCAxOTcsIDExNywgNSwgMTU2LCAxOTcsIDExNywgCisgICAgNSwgMjMwLCAzMCwgMTk3LCAxMTcsIDUsIDIyNiwgMTA5LCAxOTcsIDExNywgNSwgMTUzLCAxOTcsIDExNywgNSwgMjE3LCAKKyAgICAxNTMsIDE5NywgMTE3LCA1LCAyMjcsIDE0NiwgMTk3LCAxMTcsIDUsIDIzNCwgMjM2LCAxOTcsIDUsIDIyMywgMTUzLCAxOTcsIAorICAgIDUsIDIyNywgMjA5LCAxOTcsIDIyNCwgMTQ0LCAyMTcsIDEwNCwgMTk3LCAyMjQsIDE0NCwgMjI3LCAxNTYsIDIxNiwgMTIxLCAKKyAgICAyMTcsIDEwNCwgMTk3LCAyMjQsIDE0NCwgMjUwLCAxNzIsIDE5NywgMjI0LCAxNDQsIDIxNSwgMTcxLCAyNTAsIDE3MiwgCisgICAgMTk3LCAyMjQsIDE0NCwgMjE1LCAxNzAsIDE5NywgMjEsIDIxMCwgODYsIDE5NywgMjEsIDExMSwgMTk3LCAyMSwgMTA1LCAKKyAgICAxOTcsIDIxLCAxNTgsIDE5NywgMjEsIDE2MSwgMTk3LCAyMSwgMTkwLCAxOTcsIDIxLCAxOTUsIDE5NywgMjEsIDE5OSwgCisgICAgMTk3LCAyMSwgMTk2LCAxOTcsIDIxLCAyMDEsIDE5NywgMSwgMjE1LCAxNTcsIDE5NywgMSwgMjE1LCAxNDUsIDE5NywgMSwgCisgICAgMjQ4LCAxNDMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDIxMCwgODYsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDExMSwgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTA1LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxNTgsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMjEsIDE2MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTkwLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDIxLCAxOTUsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMjEsIDE5OSwgMjI2LCAyMTQsIDI1MCwgMTExLCAyMSwgMTk2LCAyMjYsIDIxNCwgMjUwLCAKKyAgICAxMTEsIDIxLCAyMDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMzLCAxNDEsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgCisgICAgMjUzLCAyMTQsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU0LCAyMjUsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU0LCAKKyAgICAxMjMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU0LCAxODcsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjMzLCAxNDAsIAorICAgIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU1LCA0NCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyNTUsIDQ1LCAyMjYsIDIxNCwgCisgICAgMjUwLCAxMTEsIDEsIDI1NSwgNDMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjU1LCAzOCwgMjI2LCAyMTQsIDI1MCwgMTExLCAKKyAgICAxLCAyMzIsIDI0NywgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzUsIDE3OCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzYsIAorICAgIDQxLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNSwgMTk3LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzNSwgMTg2LCAKKyAgICAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMiwgMTAzLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIxNCwgMjIxLCAyMjYsIAorICAgIDIxNCwgMjUwLCAxMTEsIDEsIDIxNCwgMjE5LCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIxNCwgMTY4LCAyMjYsIDIxNCwgCisgICAgMjUwLCAxMTEsIDEsIDIxNCwgMTExLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDEsIDIzMywgNjQsIDIyNiwgMjE0LCAyNTAsIAorICAgIDExMSwgMSwgMjQ1LCAxMTYsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjQ1LCAyMjAsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgCisgICAgMjQ1LCAxNTgsIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjQ1LCA5NCwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMzIsIAorICAgIDE2MiwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMjYsIDE0MSwgMjI2LCAyMTQsIDI1MCwgMTExLCAxLCAyMjcsIDAsIDIyNiwgCisgICAgMjE0LCAyNTAsIDExMSwgMSwgMjI2LCAxMjksIDIyNiwgMjE0LCAyNTAsIDExMSwgMSwgMjI2LCAyMjYsIDIyNiwgMjE0LCAKKyAgICAyNTAsIDExMSwgMjMwLCAxMDgsIDIxNSwgMTIyLCAyMjYsIDIxNCwgMjUwLCAxMTEsIDI0MywgMTM3LCAyMTUsIDEyMywgCisgICAgMjI2LCAyMTQsIDI1MCwgMTExLCAyMzAsIDEwNiwgMjE1LCAxMjMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjIzLCA5NSwgMjI2LCAKKyAgICAyMTQsIDI1MCwgMTExLCAyMjUsIDE0OCwgMjI2LCAyMTQsIDI1MCwgMTExLCAyNTQsIDIxNywgMjI2LCAyMTQsIDI1MCwgCisgICAgMTExLCAyMjQsIDE0NCwgMjMwLCAxMDMsIDIyNiwgMjE0LCAyNTAsIDExMSwgMjI0LCAxNDQsIDUyLCAyMzAsIDEwMywgMjA3LCAKKyAgICAyMjQsIDE0NCwgMjUxLCAyNDksIDIxOCwgOSwgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDIyNiwgNDIsIDIwNywgMjI0LCAKKyAgICAxNDQsIDI1MSwgMjQ5LCAyMjQsIDEzMiwgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDI1MSwgMjcsIDIwNywgMjI0LCAxNDQsIAorICAgIDI1MSwgMjQ5LCAyMzMsIDE0LCAyMjEsIDIyNywgMjA3LCAyMjQsIDE0NCwgMjUxLCAyNDksIDIzNSwgMTksIDIyMSwgMjI3LCAKKyAgICAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgMjQ4LCAyMzAsIDIyMSwgMjI3LCAyMDcsIDIyNCwgMTQ0LCAyNTEsIDI0OSwgCisgICAgMjUyLCAyMDAsIDIyMSwgMjI3LCAyMTMsIDI1MiwgMTM4LCAyMzQsIDIxNiwgMjEzLCAyNTIsIDEzOCwgMjIwLCA3OSwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjI0LCAyMDEsIDIxMywgMjUyLCA1LCAyMjgsIDIxNCwgMjEzLCAyNTIsIDUsIDIxMSwgODAsIDIzMCwgCisgICAgMjI3LCAyMTgsIDEsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIDI1NCwgMjIyLCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIAorICAgIDI1MiwgMTM4LCAyMTEsIDgwLCAyMzUsIDI1MCwgMjE4LCAxLCAyMTMsIDI1MiwgMTM4LCAyMTEsIDgwLCAyMzQsIDIwNCwgCisgICAgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjUxLCAxMCwgNTEsIDIxMywgMjUyLCAxMzgsIDIxMSwgODAsIAorICAgIDIzNCwgMjA0LCAyMzUsIDI1MCwgMjE4LCAyLCAyMjEsIDE5OSwgMjEzLCAyNTIsIDEzOCwgNTIsIDIxOCwgMSwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjE1LCAyMTIsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjM0LCAyMDQsIDI1NCwgODUsIDIxMywgMjUyLCAKKyAgICAxMzgsIDU5LCA1MSwgMjEzLCAyNTIsIDEzOCwgMTEzLCAxNzAsIDUxLCAyMTMsIDI1MiwgMTM4LCAxMzQsIDE3MCwgNTEsIAorICAgIDIxMywgMjUyLCAxMzgsIDIyMiwgMjQzLCAyMzQsIDIxNSwgMjM1LCAyNTAsIDIxOCwgMSwgMjEzLCAyNTIsIDEzOCwgMjUzLCAKKyAgICAyMTIsIDIzNSwgMjUwLCAyMTgsIDEsIDIxMywgMjUyLCA1LCAyMTMsIDE0OCwgMjE4LCAxLCAyMTMsIDI1MiwgNSwgMjEzLCAKKyAgICAxNDgsIDIxNCwgMjE2LCAyMTMsIDI1MiwgNSwgMjIzLCA1MiwgMjEzLCAxNDgsIDIxNCwgMjE2LCAyMTMsIDI1MiwgNSwgCisgICAgMjEzLCAxNDgsIDI1NCwgODUsIDIxMywgMjUyLCA1LCAyMjMsIDUyLCAyMTMsIDE0OCwgMjU0LCA4NSwgMjEzLCAyNTIsIDUsIAorICAgIDIxMywgMTQ4LCAyMTQsIDIxNywgMiwgMjE3LCA3OCwgMjEzLCAyNTIsIDUsIDIxMywgMTQ4LCAyNTQsIDg2LCAyLCAyMTcsIAorICAgIDc4LCAyMTMsIDI1MiwgNSwgMjU0LCA4NCwgMjU0LCA5OSwgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDI1MiwgMTc0LCAyMTMsIAorICAgIDI1MiwgNSwgMjU0LCA4NCwgMjE0LCAyMCwgMjEzLCAyNTIsIDUsIDI1NCwgODQsIDIxNCwgMjEsIDIsIDIxNywgNzgsIDIxMywgCisgICAgMjUyLCA1LCAyMTYsIDY5LCAyMTMsIDI1MiwgNSwgMjQxLCAxOTgsIDIwMCwgMjU0LCA4MywgMjEzLCAyNTIsIDUsIDIwMCwgCisgICAgMjU0LCA4MywgMjEzLCAyNTIsIDUsIDIyMiwgMTQ0LCAyMDAsIDI1NCwgODMsIDIxMywgMjUyLCA1LCAyNTQsIDg0LCAyMTQsIAorICAgIDIyMywgMjMwLCA5NSwgMjEzLCAyNTIsIDUsIDI1NCwgMjgsIDIxMywgMjUyLCA1LCAyMjIsIDE4OSwgMjU0LCAyOCwgMjEzLCAKKyAgICAyNTIsIDEzOCwgMjUxLCAxMCwgNDgsIDIxMywgMjUyLCA1LCAyMzUsIDEwOCwgMjEzLCAyNTIsIDUsIDIxNCwgMTYxLCA3LCAKKyAgICAxLCA0LCA2LCA2MSwgNywgMSwgNCwgNiwgMjU0LCAyNTIsIDcsIDQsIDEsIDIxNSwgOTQsIDI1NCwgMjUyLCA3LCAxLCA0LCAKKyAgICA2LCAyNTIsIDE0MiwgMjUzLCAxNjYsIDcsIDEsIDQsIDYsIDI1MSwgNzQsIDcsIDEsIDQsIDYsIDI0OSwgNjgsIDcsIDEsIDQsIAorICAgIDYsIDI0NSwgNjcsIDcsIDEsIDQsIDYsIDc2LCA3LCA0LCAxLCAyMTUsIDk0LCAyMDQsIDc2LCA3LCA0LCAxLCAyMTUsIDk0LCAKKyAgICA3NCwgNywgMSwgNCwgNiwgMjM1LCAxNTAsIDcsIDEsIDQsIDYsIDIzNSwgMjksIDcsIDEsIDQsIDYsIDIzMywgMTU1LCAyLCAKKyAgICA5MSwgNywgMSwgNCwgNiwgMTk0LCA3LCAxLCA0LCA2LCAyMjMsIDUyLCAyMzAsIDMwLCA3LCAxLCA0LCA2LCA3OCwgNywgMSwgCisgICAgNCwgNiwgMjA0LCA3OCwgNywgNCwgMSwgMjE5LCAxODksIDc4LCA3LCA0LCAxLCAyMTksIDE4OSwgMjA0LCA3OCwgNywgNCwgCisgICAgMSwgMjE5LCAxODksIDE0NCwgMiwgOTEsIDcsIDQsIDEsIDIxNSwgOTQsIDIyNiwgMjM4LCA3LCAxLCA0LCA2LCAyMjYsIAorICAgIDEzOCwgNywgNCwgMSwgMjE2LCAxNSwgMTYzLCA3OCwgNywgNCwgMSwgMjUxLCAxODMsIDE2MywgNzgsIDcsIDEsIDQsIDYsIAorICAgIDIyNiwgMTA5LCA3LCAxLCA0LCA2LCAyMjMsIDUyLCAxNTMsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDE1MywgNywgMSwgNCwgNiwgCisgICAgMjE3LCAxNTMsIDcsIDEsIDQsIDYsIDY5LCA3LCA0LCAxLCAyMTksIDE4OSwgNjksIDcsIDQsIDEsIDIxOSwgMTg5LCAyNDgsIAorICAgIDgsIDY5LCA3LCA0LCAxLCAyMTksIDE4OSwgMjE1LCA5NCwgMTk0LCA3LCAxLCA0LCA2LCAyMTQsIDEwNSwgNywgMSwgNCwgNiwgCisgICAgMjEyLCA5OCwgNywgMSwgNCwgNiwgMjEwLCAxNTksIDcsIDEsIDQsIDYsIDI0NSwgMTYsIDcsIDEsIDIxMywgMTM1LCAyMzMsIAorICAgIDg4LCAyMTgsIDI1MiwgNywgMSwgMjU0LCAyMDUsIDI2LCAxLCA0LCA2LCAyNDMsIDExNCwgMjYsIDEsIDQsIDYsIDIzMywgCisgICAgMTA0LCAyNiwgMSwgNCwgNiwgMjI1LCAxMTEsIDI2LCAxLCA0LCA2LCAyMjMsIDQwLCAyNiwgMSwgNCwgNiwgMjI0LCAxNjQsIAorICAgIDMzLCAxLCA0LCA2LCAyNDUsIDE4MiwgNTgsIDEsIDYsIDYxLCA1OCwgMSwgNiwgMjU0LCAyNTIsIDU4LCAxLCA2LCAyNTMsIAorICAgIDE2NiwgNTgsIDEsIDYsIDI1MiwgMTQyLCAyNTMsIDE2NiwgNTgsIDEsIDYsIDI0OSwgNjgsIDU4LCAxLCA2LCA3NiwgNTgsIAorICAgIDEsIDYsIDIyMywgNTIsIDc2LCA1OCwgMSwgNiwgMjQzLCAyMDksIDU4LCAxLCA2LCAyNDIsIDY3LCA1OCwgMSwgNiwgNzQsIAorICAgIDU4LCAxLCA2LCAyMzUsIDE1MCwgNTgsIDEsIDYsIDIzNSwgMjksIDU4LCAxLCA2LCAxNTYsIDU4LCAxLCA2LCAxOTQsIDU4LCAKKyAgICAxLCA2LCAyMzAsIDMwLCA1OCwgMSwgNiwgMjIzLCA1MiwgMjMwLCAzMCwgNTgsIDEsIDYsIDc4LCA1OCwgMSwgNiwgMjI2LCAKKyAgICAxMzgsIDU4LCAxLCA2LCAyMjYsIDEwOSwgNTgsIDEsIDYsIDE1MywgNTgsIDEsIDYsIDIxNywgMTUzLCA1OCwgMSwgNiwgNjksIAorICAgIDU4LCAxLCA2LCAyMTIsIDk4LCA1OCwgMSwgNCwgNjEsIDU4LCAxLCA0LCAyMTUsIDk0LCA2MSwgNTgsIDEsIDQsIDI1NCwgCisgICAgMTUxLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjU0LCAyNTIsIDU4LCAxLCA0LCAyNTMsIDE2NiwgNTgsIDEsIDQsIDI0OSwgNjgsIAorICAgIDU4LCAxLCA0LCA3NiwgNTgsIDEsIDQsIDIyMSwgMTk3LCA1OCwgMSwgNCwgMjA0LCA3NiwgNTgsIDEsIDQsIDIxNSwgOTQsIAorICAgIDIwNCwgNzYsIDU4LCAxLCA0LCAyNDMsIDIwOSwgNTgsIDEsIDQsIDIxNSwgOTQsIDc0LCA1OCwgMSwgNCwgMjM1LCAyOSwgCisgICAgNTgsIDEsIDQsIDE5NCwgNTgsIDEsIDQsIDI0NSwgMTQ2LCA1OCwgMSwgNCwgNzgsIDU4LCAxLCA0LCAyMDQsIDc4LCA1OCwgCisgICAgMSwgNCwgMjE2LCAxNSwgMTYzLCA3OCwgNTgsIDEsIDQsIDI1MSwgMTgzLCAxNjMsIDc4LCA1OCwgMSwgNCwgMjI2LCAxMDksIAorICAgIDU4LCAxLCA0LCAyMTcsIDE1MywgNTgsIDEsIDQsIDY5LCA1OCwgMSwgNCwgMjE5LCAxODksIDY5LCA1OCwgMSwgNCwgMjE1LCAKKyAgICA5NCwgMTk0LCA1OCwgMSwgNCwgMjE0LCAxMDUsIDU4LCAxLCA0LCAyNTQsIDIwNSwgNTgsIDEsIDQsIDI1MiwgMzQsIDU4LCAKKyAgICAxLCA0LCAyNiwgMjQzLCAxMTQsIDU4LCAxLCA0LCAyNDgsIDYyLCA1OCwgMSwgNCwgMjYsIDIyNSwgMTM2LCA1OCwgMSwgNCwgCisgICAgMjUwLCAxMTgsIDcsIDIxOCwgNjYsIDQsIDEsIDc0LCA3LCAyMTgsIDY2LCA0LCAxLCAxNTMsIDcsIDIxOCwgNjYsIDQsIDEsIAorICAgIDY5LCA3LCAyMTgsIDY2LCA0LCAxLCAyMTQsIDEwNSwgMjYsIDIxOCwgNjYsIDQsIDEsIDI1MiwgMzQsIDI2LCAyMTgsIDY2LCAKKyAgICA0LCAxLCAyNDMsIDExNCwgMjYsIDIxOCwgNjYsIDQsIDEsIDIyMywgNDAsIDI2LCAyMTgsIDY2LCA0LCAxLCAyMjUsIDEzNiwgCisgICAgMjYsIDIxOCwgNjYsIDQsIDEsIDI1MCwgMTE4LCA3LCA0LCAxLCAyMTQsIDIxNCwgNywgNCwgMSwgNTcsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDI0NSwgMTUsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDIzMCwgMjI5LCAKKyAgICAxODQsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMjMwLCAyMjksIAorICAgIDE4NCwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIDI0NCwgOTYsIDIyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMjIsIDk0LCAKKyAgICAyLCAyMzAsIDIyOSwgMTg0LCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgMjMwLCAyMjksIDE4NCwgNywgNCwgMSwgMjEwLCAxNjAsIAorICAgIDIsIDIzMCwgMjI5LCAxODQsIDcsIDQsIDEsIDIxNSwgOTQsIDI0MywgMjA5LCA1OCwgMSwgMzMsIDI0NSwgMTU4LCA3LCA0LCAKKyAgICAxLCAyMzUsIDIyMCwgMjQzLCAyMDksIDcsIDQsIDEsIDIxNiwgMjEyLCAyLCAyMTgsIDEwOSwgNywgNCwgNiwgMSwgMjQwLCAKKyAgICAxNjEsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDE5MywgMiwgOTEsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCA5MSwgNywgNCwgNiwgCisgICAgMSwgMTA0LCAyLCA5MSwgNywgNCwgMSwgMjE0LCAxNTgsIDIsIDkxLCA3LCA0LCAxLCA1NywgMiwgMjI2LCA3MCwgMTAzLCA3LCAKKyAgICA0LCAxLCAyNDksIDY5LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDI0NSwgMTUsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgCisgICAgMSwgMjQzLCAyMTAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyMzMsIDE1NSwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAyMzIsIDU1LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIzMCwgMzEsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjI2LCAxMTAsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgCisgICAgMjIzLCAyMjcsIDIsIDIyNiwgNzAsIDEwMywgNywgNCwgMSwgMjIyLCA5NCwgMiwgMjI2LCA3MCwgMTAzLCA3LCA0LCAxLCAKKyAgICAyNDUsIDg0LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDIxMSwgMTc5LCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyMjYsIDcwLCAxMDMsIDcsIDQsIDEsIAorICAgIDExNiwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjIzLCA1OCwgMTAzLCA3LCA0LCAxLCAyNDksIAorICAgIDY5LCAyLCAyNDEsIDU5LCAyMiwgMjE3LCA3OCwgNywgNCwgMSwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDIwNCwgCisgICAgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDIyMywgNTIsIDIwNCwgMTYwLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIAorICAgIDEsIDIyMSwgMTk4LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIAorICAgIDEsIDIwNCwgMTQ0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI0NSwgODQsIDIsIDIyMywgNTgsIDEwMywgNywgNCwgMSwgCisgICAgMTA0LCAyLCAyMjMsIDU4LCAxMDMsIDcsIDQsIDEsIDI0NSwgMTcsIDIsIDIyMywgNTgsIDEwMywgNTgsIDEsIDQsIDIxNSwgCisgICAgOTQsIDI1NCwgMTUxLCA1OCwgMSwgNCwgMjUxLCA3NCwgNTgsIDEsIDQsIDI1MSwgNzUsIDIsIDI0OSwgMTA4LCA1OCwgMSwgCisgICAgNCwgMjQ1LCA2NywgNTgsIDEsIDQsIDIyMywgNTIsIDIwNCwgNzYsIDU4LCAxLCA0LCAyNDUsIDE0LCA1OCwgMSwgNCwgMjQ3LCAKKyAgICAxMjcsIDIzNSwgMTUxLCAyLCA5MSwgNTgsIDEsIDQsIDExOSwgMjQzLCAyMDksIDU4LCAxLCA0LCAyMTUsIDk0LCAyNDIsIAorICAgIDY3LCA1OCwgMSwgNCwgMjQwLCAxNjEsIDIsIDkxLCA1OCwgMSwgNCwgMjM1LCAxOTIsIDU4LCAxLCA0LCA2LCA3NCwgNTgsIAorICAgIDEsIDQsIDYsIDI0MCwgMTYxLCAyLCA5MSwgNTgsIDEsIDQsIDIzNSwgMTUxLCAyLCAyNDksIDEzNSwgNTgsIDEsIDQsIDIzMywgCisgICAgMTU1LCAyLCAyMjMsIDU4LCAxMDMsIDU4LCAxLCA0LCAyMzMsIDE1NSwgMiwgMjI2LCA3MCwgMTAzLCA1OCwgMSwgNCwgNiwgCisgICAgMTU2LCA1OCwgMSwgNCwgMjMyLCA1NSwgMiwgMTAzLCA1OCwgMSwgNCwgMjE1LCA5NCwgMjMyLCA1NSwgMiwgMjAwLCAyMzMsIAorICAgIDQyLCA1OCwgMSwgNCwgMjMwLCAzMSwgMiwgNDMsIDEwMywgNTgsIDEsIDQsIDIzMCwgMzEsIDIsIDIyMywgNTgsIDEwMywgCisgICAgNTgsIDEsIDQsIDYsIDIzMCwgMzAsIDU4LCAxLCA0LCAyNTIsIDE0MiwgNzgsIDU4LCAxLCA0LCAyMjUsIDEzNiwgNTgsIDEsIAorICAgIDQsIDIyMiwgOTQsIDIsIDEwMywgNTgsIDEsIDQsIDI0NSwgODMsIDU4LCAxLCA0LCAyMTcsIDE1NCwgMiwgMjI2LCA3MCwgCisgICAgMTAzLCA1OCwgMSwgNCwgMTA0LCAxMzAsIDU4LCAxLCA0LCAyMTQsIDE1NywgNTgsIDEsIDQsIDYsIDY5LCA1OCwgMSwgNCwgCisgICAgMjE0LCAxMDYsIDIsIDEwMywgNTgsIDEsIDQsIDIxNSwgOTQsIDIxNCwgMTA1LCA1OCwgMSwgNCwgMjEwLCAxNTksIDU4LCAxLCAKKyAgICA0LCAyMTAsIDE2MCwgMiwgMjIzLCA1OCwgMTAzLCA1OCwgMSwgNCwgMjEwLCAxNjAsIDIsIDI0OSwgMTA4LCA1OCwgMSwgNCwgCisgICAgMjQ1LCAxNiwgNTgsIDEsIDQsIDIxNiwgMTgwLCAzOCwgMjQ2LCAxMjYsIDI0MiwgMTQ0LCAyNTUsIDIzLCAzOCwgMjQ2LCAKKyAgICAxMjYsIDI1NSwgMTIsIDI1NSwgMjMsIDM4LCAyMTksIDcxLCA1MSwgMzgsIDIxOCwgNywgNzksIDM4LCAyMzEsIDIzNiwgMzgsIAorICAgIDI0MiwgMTQxLCAzOCwgMjMxLCAyMzQsIDM4LCAyNTUsIDEwLCAzOCwgMjQyLCAxNDIsIDM4LCAyNTUsIDExLCAzOCwgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDUxLCAzOCwgMjUxLCAxNTMsIDM4LCAyMzEsIDIzNSwgMzgsIDUyLCAyNTAsIDM5LCA0OCwgMzgsIAorICAgIDIyNiwgMjI5LCA0OCwgMzgsIDIxMCwgMzUsIDUxLCAzOCwgMjM1LCAxNzksIDUxLCAzOCwgMjE0LCAxNTEsIDQ4LCAzOCwgCisgICAgMjE0LCAxMzQsIDQ4LCAzOCwgNywgNCwgMSwgMjQ0LCA3MSwgMjA0LCAxMTYsIDQ4LCAzOCwgNywgNCwgMSwgMjU0LCAyNTIsIAorICAgIDM4LCA3LCA0LCAxLCAyNTQsIDgxLCAzOCwgNywgNCwgMSwgMjUzLCAxODQsIDM4LCA3LCA0LCAxLCAyNTEsIDc1LCAyNTAsIAorICAgIDE5MSwgMzgsIDcsIDQsIDEsIDIzNSwgMjIwLCAyNDksIDY4LCAzOCwgNywgNCwgMSwgMjQ1LCA2NywgMzgsIDcsIDQsIDEsIAorICAgIDI0MywgMjA5LCAzOCwgNywgMSwgNCwgNiwgMjQzLCAyMDksIDM4LCA3LCA0LCAxLCAyMzUsIDI5LCAzOCwgNywgNCwgMSwgCisgICAgMTU2LCAzOCwgNywgMSwgNCwgNiwgMTU2LCAzOCwgNywgMSwgNCwgNiwgMTk0LCAzOCwgNywgNCwgMSwgMjMwLCAzMCwgMzgsIAorICAgIDcsIDEsIDQsIDYsIDIzMCwgMzAsIDM4LCA3LCAxLCA0LCA2LCAxNTMsIDM4LCA3LCA0LCAxLCAyMjMsIDIyNywgMjIyLCAKKyAgICAxODgsIDM4LCA3LCA0LCAxLCAyMjIsIDkzLCAzOCwgNywgNCwgMSwgMjAwLCAyMjIsIDkzLCAzOCwgNywgNCwgMSwgMjEwLCAKKyAgICAxNTksIDM4LCA1MiwgMjM1LCAyMDAsIDI1MSwgMTU1LCA1MSwgMzgsIDI1NCwgMTU2LCAxMjgsIDIxNiwgNDMsIDUxLCAzOCwgCisgICAgNDMsIDI1NCwgMiwgNDgsIDM4LCA0NCwgMjU0LCAyLCAyMiwgMTI0LCAyNTQsIDIsIDUxLCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDIyMiwgMjM3LCA1MSwgNywgNCwgMSwgMTE2LCAyLCAyMjIsIDIzNywgNTEsIDcsIDYsIDEsIDU3LCAyLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDU3LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDU3LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDU3LCAyLCA1OSwgNTEsIDcsIAorICAgIDYsIDEsIDU3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDU3LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDI1MSwgCisgICAgNzUsIDIsIDI1MCwgMTkyLCAyMiwgMTQyLCA3LCA0LCAxLCAyNTEsIDc1LCAyLCAyNTAsIDE5MiwgMjIsIDE0MiwgNywgNiwgCisgICAgMSwgMjQ5LCA2OSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDksIDY5LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDI0OSwgNjksIDIsIAorICAgIDU5LCA1MSwgNywgNCwgMSwgMjQ5LCA2OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAyMzIsIDIyMCwgNTEsIAorICAgIDcsIDQsIDEsIDI0OSwgNjksIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjQ5LCA2OSwgMiwgMjUwLCAxOTEsIDcsIDQsIAorICAgIDEsIDI0OSwgNjksIDIsIDI1MCwgMTkxLCA3LCA2LCAxLCAyNDksIDY5LCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjQ5LCAKKyAgICA2OSwgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgCisgICAgMTYwLCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA0LCAKKyAgICAxLCAxNjAsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAxNjAsIAorICAgIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDIxNiwgOTAsIDUxLCA3LCA0LCAxLCAxNjAsIDIsIDIxNiwgOTAsIAorICAgIDUxLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMTkyLCAyMiwgMjUxLCAxNTQsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAxOTIsIAorICAgIDIyLCAyNTEsIDE1NCwgNywgNiwgMSwgMjQ1LCAxNSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyNDUsIDE1LCAyLCA1OSwgNDgsIAorICAgIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyMzEsIDIzNywgNywgNCwgMSwgMjQzLCAyMTAsIDIsIDIzMSwgMjM3LCA3LCA2LCAxLCAKKyAgICAyNDIsIDY4LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjQyLCA2OCwgMiwgNTksIAorICAgIDUxLCA3LCA0LCAxLCAyNDIsIDY4LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI0OCwgOSwgNywgNCwgMSwgCisgICAgMjQyLCA2OCwgMiwgMjQ4LCA5LCA3LCA2LCAxLCAyNDIsIDY4LCAyLCAyNTAsIDE5MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgCisgICAgMjUwLCAxOTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI1MSwgMTU1LCA1MSwgNywgNCwgMSwgMjQyLCA2OCwgMiwgMjUxLCAKKyAgICAxNTUsIDUxLCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgMjE2LCA5MCwgNTEsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMTYsIAorICAgIDkwLCA1MSwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDI0OCwgMTAsIDIyLCAxNDIsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAKKyAgICAyNDgsIDEwLCAyMiwgMTQyLCA3LCA2LCAxLCAyMzUsIDMwLCAyLCAxNDIsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIDE0MiwgNywgCisgICAgNiwgMSwgMjM1LCAzMCwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzNSwgMzAsIAorICAgIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgCisgICAgNTksIDUxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgNTksIDI1MiwgNTEsIAorICAgIDIyLCAyMzEsIDIzNywgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDU5LCAyNTIsIDUxLCAyMiwgMjMxLCAyMzcsIDcsIDYsIDEsIAorICAgIDIzMywgMTU1LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIAorICAgIDIzMywgMTU1LCAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjMzLCAxNTUsIDIsIDI1MCwgMzksIDUxLCA3LCA2LCAxLCAKKyAgICAyMzIsIDU1LCAyLCAxNDIsIDcsIDQsIDEsIDIzMiwgNTUsIDIsIDE0MiwgNywgNiwgMSwgMjMyLCA1NSwgMiwgNTksIDQ4LCAKKyAgICA3LCA0LCAxLCAyMzIsIDU1LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjMyLCAKKyAgICA1NSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIDU5LCA0OCwgCisgICAgNywgNiwgMSwgMjMwLCAzMSwgMiwgNTksIDUxLCA3LCA0LCAxLCAyMzAsIDMxLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIzMCwgCisgICAgMzEsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAyMzAsIDMxLCAKKyAgICAyLCAyNTAsIDM5LCA1MSwgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgMjE2LCAKKyAgICA5MCwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyMTYsIDkwLCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIDIxNiwgOTAsIAorICAgIDIyLCAyNDgsIDksIDcsIDQsIDEsIDE0NCwgMiwgMjE2LCA5MCwgMjIsIDI0OCwgOSwgNywgNiwgMSwgMTQ0LCAyLCAyMzEsIAorICAgIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE0NCwgCisgICAgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjMxLCAyMzgsIDIyLCAxNDIsIDcsIDYsIDEsIDIyNiwgCisgICAgMTEwLCAyLCAxNDIsIDcsIDQsIDEsIDIyNiwgMTEwLCAyLCAxNDIsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCA1OSwgNDgsIDcsIAorICAgIDQsIDEsIDIyNiwgMTEwLCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCA1OSwgNDgsIDcsIDQsIDEsIDIyMywgCisgICAgMjI3LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIyMywgMjI3LCAyLCA1OSwgCisgICAgNTEsIDcsIDYsIDEsIDIyMywgMjI3LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDIzMSwgMjM3LCA3LCA0LCAxLCAyMjMsIDIyNywgCisgICAgMiwgNTksIDI1MiwgNTEsIDIyLCAyMzEsIDIzNywgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgCisgICAgMSwgMjIzLCAyMjcsIDIsIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIAorICAgIDk0LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjIyLCA5NCwgMiwgNTksIDUxLCAKKyAgICA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyNTUsIDEyLCAyMiwgNTksIDQ4LCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAyNTUsIDEyLCAKKyAgICAyMiwgNTksIDQ4LCA3LCA2LCAxLCAyMjIsIDk0LCAyLCAyNTAsIDI0MywgMjIsIDU5LCA0OCwgNywgNCwgMSwgMjIyLCA5NCwgCisgICAgMiwgMjUwLCAyNDMsIDIyLCA1OSwgNDgsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDU5LCAyNTIsIDUxLCAyMiwgNTksIDQ4LCA3LCAKKyAgICA0LCAxLCAyMjIsIDk0LCAyLCA1OSwgMjUyLCA1MSwgMjIsIDU5LCA0OCwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDU5LCA0OCwgCisgICAgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDU5LCA0OCwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMjE3LCAKKyAgICAxNTQsIDIsIDU5LCA1MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgMjE3LCAxNTQsIDIsIAorICAgIDIzMiwgMjIwLCA1MSwgNywgNiwgMSwgMjE3LCAxNTQsIDIsIDI1MCwgMzksIDUxLCA3LCA0LCAxLCAyMTcsIDE1NCwgMiwgCisgICAgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjQ4LCAxMCwgNTEsIAorICAgIDcsIDYsIDEsIDEwNCwgMiwgMjE2LCA5MCwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjE2LCA5MCwgNTEsIDcsIDYsIDEsIDEwNCwgCisgICAgMiwgMjUwLCAzOSwgNTEsIDcsIDQsIDEsIDEwNCwgMiwgMjUwLCAzOSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjE2LCA5MCwgCisgICAgMjIsIDE0MiwgNywgNCwgMSwgMTA0LCAyLCAyMTYsIDkwLCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAKKyAgICAyMiwgMjQ4LCA5LCA3LCA0LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMjQ4LCA5LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgCisgICAgMTg0LCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgMTg0LCA3LCA2LCAxLCAyMTQsIDEwNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAKKyAgICAyMTQsIDEwNiwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjEyLCA5OSwgMiwgCisgICAgMjQyLCAxNDMsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDE0MiwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMTQyLCA3LCA2LCAxLCAKKyAgICAyMTIsIDk5LCAyLCAyNDgsIDksIDcsIDQsIDEsIDIxMiwgOTksIDIsIDI0OCwgOSwgNywgNiwgMSwgMjEyLCA5OSwgMiwgNTksIAorICAgIDQ4LCA3LCA0LCAxLCAyMTIsIDk5LCAyLCA1OSwgNDgsIDcsIDYsIDEsIDIxMiwgOTksIDIsIDU5LCA1MSwgNywgNCwgMSwgCisgICAgMjEyLCA5OSwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDE3OSwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgCisgICAgNTksIDQ4LCA3LCA2LCAxLCAyMTEsIDE3OSwgMiwgMjQ4LCA5LCA3LCA0LCAxLCAyMTEsIDE3OSwgMiwgMjQ4LCA5LCA3LCA2LCAKKyAgICAxLCAyMTEsIDExOCwgMiwgNTksIDQ4LCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgNTksIDQ4LCA3LCA2LCAxLCAyMTAsIDE2MCwgCisgICAgMiwgMjUwLCAzOCwgNywgNCwgMSwgMjEwLCAxNjAsIDIsIDI1MCwgMzgsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNTEsIAorICAgIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIAorICAgIDEsIDIxMCwgMTYwLCAyLCAyMzIsIDIyMCwgNTEsIDcsIDQsIDEsIDI0MiwgNjgsIDIsIDIzMiwgMjIwLCA1MSwgNywgNCwgMSwgCisgICAgMjE3LCAxNTQsIDIsIDI0OCwgOSwgNywgNCwgMSwgMjEyLCA5OSwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAyMTEsIAorICAgIDExOCwgMiwgMjIyLCAyMzcsIDQ4LCA3LCA0LCAxLCAxMTYsIDIsIDQ0LCAxNjMsIDIyMiwgMjM2LCA3LCA0LCAxLCAyMDAsIAorICAgIDIyMiwgOTQsIDIsIDU5LCA0OCwgNywgNCwgMSwgMjAwLCAyMjIsIDk0LCAyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMDAsIAorICAgIDIyMiwgOTQsIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDIyMCwgNzgsIDIyMiwgOTMsIDcsIDQsIDEsIDI0OCwgNjIsIDcsIDYsIAorICAgIDEsIDExNiwgMiwgNTksIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTE2LCAyLCAyNDEsIDU5LCA0OCwgCisgICAgNywgNCwgMSwgMTE2LCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA0LCAxLCAKKyAgICAxMTYsIDIsIDI1MCwgMzksIDIyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA0LCAKKyAgICAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgCisgICAgNDgsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxMTYsIDIsIDI1MCwgMzksIAorICAgIDIyLCAxODQsIDcsIDQsIDEsIDExNiwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgNiwgMSwgMTE2LCAyLCAyNTAsIDM5LCAyMiwgCisgICAgNTksIDUxLCA3LCA0LCAxLCAxMTYsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIAorICAgIDIyLCAxNDIsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAxNDIsIDcsIDYsIDEsIDExNiwgMiwgMjUxLCAxNTUsIAorICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIAorICAgIDI1MSwgMTU1LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDExNiwgMiwgMjUxLCAxNTUsIDIyLCAyNDEsIDU5LCA0OCwgNywgCisgICAgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDE4NCwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDE4NCwgNywgCisgICAgNiwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTE2LCAyLCAyNTEsIDE1NSwgMjIsIDU5LCAKICAgICA1MSwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNTEsIDcsIDQsIDEsIDE2MCwgMiwgNTksIDUxLCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxNjAsIDIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDE4MiwgNywgNCwgMSwgCi0gICAgMTYwLCAyLCAxODIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAKLSAgICAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIAotICAgIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAKLSAgICAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMTgyLCA3LCAKLSAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAxODIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgNTksIDUxLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjQxLCA1MiwgNDgsIDcsIAotICAgIDQsIDEsIDI0MCwgMTU0LCAyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMjQwLCAxNTQsIDIsIDU5LCA1MSwgNywgNCwgMSwgCi0gICAgMjQwLCAxNTQsIDIsIDU5LCA1MSwgNywgNiwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgNTksIDUxLCA3LCAKLSAgICA2LCAxLCAxNDQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIAotICAgIDI1MCwgMzEsIDIyLCAxNDIsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAKLSAgICAyNTAsIDMxLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAKLSAgICAxNDQsIDIsIDI1MCwgMzEsIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMjQxLCA1MiwgCi0gICAgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDE4MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDMxLCAyMiwgMTgyLCAKLSAgICA3LCA2LCAxLCAxNDQsIDIsIDI1MCwgMzEsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgMjUwLCAzMSwgMjIsIDU5LCAKLSAgICA1MSwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIAotICAgIDE0MiwgNywgNiwgMSwgMTQ0LCAyLCAyNDAsIDI0OSwgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAKLSAgICAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMTQ0LCAKLSAgICAyLCAyNDAsIDI0OSwgMjIsIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgMTgyLCA3LCA2LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgNTksIDUxLCA3LCAKLSAgICA0LCAxLCAxNDQsIDIsIDI0MCwgMjQ5LCAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgCi0gICAgMTA0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCA1MiwgCi0gICAgNDgsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAKLSAgICAxNDIsIDcsIDYsIDEsIDEwNCwgMiwgMjQwLCAyNDksIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgCi0gICAgMjIsIDI0MiwgMTM2LCA3LCA2LCAxLCAxMDQsIDIsIDI0MCwgMjQ5LCAyMiwgMjQxLCA1MiwgNDgsIDcsIDQsIDEsIDEwNCwgCi0gICAgMiwgMjQwLCAyNDksIDIyLCAyNDEsIDUyLCA0OCwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNCwgCi0gICAgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDE4MiwgNywgNiwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgCi0gICAgNCwgMSwgMTA0LCAyLCAyNDAsIDI0OSwgMjIsIDU5LCA1MSwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDI0MiwgMTM2LCA3LCA0LCAKLSAgICAxLCAyMTEsIDExOCwgMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCA1OSwgNTEsIDcsIDQsIDEsIDIxMSwgCi0gICAgMTE4LCAyLCA1OSwgNTEsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyNDEsIDUyLCA0OCwgNywgNCwgMSwgMjExLCAxMTgsIDIsIAotICAgIDI0MSwgNTIsIDQ4LCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMTgyLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgMTgyLCA3LCA2LCAKLSAgICAxLCAyMzAsIDIyMywgMjMyLCAxODUsIDcsIDQsIDEsIDIzMCwgMjIzLCAyMzIsIDE4NSwgNywgNiwgMSwgMjMwLCAyMjMsIAotICAgIDIxNCwgMTA1LCA3LCA0LCAxLCAyMzAsIDIyMywgMjE0LCAxMDUsIDcsIDYsIDEsIDIxMSwgMTE4LCAyLCAyMzIsIDEyMywgNywgCi0gICAgNCwgMSwgMjExLCAxMTgsIDIsIDIzMiwgMTIzLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgCi0gICAgMjU0LCAxNDQsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIAotICAgIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAKLSAgICAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgCi0gICAgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAKLSAgICAyNDgsIDE1MywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIAotICAgIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAKLSAgICAxMTAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAKLSAgICAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgMTAxLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgCi0gICAgMjQ1LCAxMDEsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTQsIDI2LCAKLSAgICA2LCAxLCAyNDUsIDEwMSwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIAotICAgIDEzLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgMTAxLCAyLCAKLSAgICAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCAxMDEsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIAotICAgIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgCi0gICAgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAKLSAgICAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI0NSwgNjQsIAotICAgIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc1LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgCi0gICAgMTU0LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIAotICAgIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgCi0gICAgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIAotICAgIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU0LCAyNiwgNCwgMSwgMjM1LCAxODYsIAotICAgIDIsIDI0OCwgMTUzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgCi0gICAgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIAotICAgIDExMCwgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjM1LCAxODYsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NCwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyNDgsIDE1MywgMjYsIDYsIAotICAgIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAKLSAgICAyMzUsIDE4NiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMjQsIDE1NSwgMjIsIAotICAgIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMjYsIAotICAgIDIwMCwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyMjYsIDIwMCwgMiwgCi0gICAgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIAotICAgIDQsIDEsIDIyNiwgMjAwLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgCi0gICAgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTQsIDI2LCA2LCAxLCAyMjYsIDIwMCwgCi0gICAgMiwgMjQ4LCAxNTMsIDI2LCA2LCAxLCAyMjYsIDIwMCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDAsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgCi0gICAgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDAsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgCi0gICAgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAKLSAgICAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAotICAgIDIxNCwgMTU4LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgCi0gICAgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDIxNCwgCi0gICAgMTU4LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTUzLCAyNiwgNiwgCi0gICAgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAKLSAgICAyMjYsIDIwMiwgMiwgMjI0LCAxNTQsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTMsIDI2LCA0LCAxLCAyMjYsIAotICAgIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAKLSAgICAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIDE3NSwgCi0gICAgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc1LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIAotICAgIDIyNCwgMTU0LCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTUzLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKLSAgICAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIAotICAgIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMjYsIAotICAgIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCi0gICAgMjU0LCAxNDQsIDIsIDIyNiwgMTEwLCAyNiwgNCwgMSwgMjQ1LCAxMDEsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIAotICAgIDEwMSwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgCi0gICAgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIzNSwgMTg2LCAyLCAyMjYsIAotICAgIDExMCwgMjYsIDQsIDEsIDIyNiwgMjAwLCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDAsIDIsIDIyNiwgMTEwLCAyNiwgCi0gICAgNCwgMSwgMjE0LCAxNTgsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAKLSAgICAyMjYsIDIwMiwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyMjYsIDExMCwgMjYsIDQsIDEsIDI1NCwgCi0gICAgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKLSAgICAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgCi0gICAgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDI0OCwgMTU0LCAKLSAgICAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgCi0gICAgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjUsIDE3NiwgMjIsIAotICAgIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNDQsIDIsIDIyNCwgMTU1LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNTQsIAotICAgIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIxNCwgCi0gICAgMTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIAotICAgIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAKLSAgICAxLCAyNTQsIDE0NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjU0LCAxNDQsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzYsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIxMCwgMjE5LCAKLSAgICAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIDIyNCwgCi0gICAgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIAotICAgIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAKLSAgICAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAKLSAgICAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgCi0gICAgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgMjQ4LCAxNTQsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIAotICAgIDI0NSwgNjQsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjQ1LCA2NCwgMiwgCi0gICAgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIAotICAgIDIyNiwgMTExLCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNiwgMTExLCAyMiwgCi0gICAgMjI0LCAxNjcsIDI2LCA2LCAxLCAyNDUsIDY0LCAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCAKLSAgICA2LCAxLCAyNDUsIDY0LCAyLCAyNDgsIDE1NCwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA0LCAxLCAyMjYsIAotICAgIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNCwgMTU1LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgCi0gICAgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIAotICAgIDIsIDIyNCwgMTU1LCAyMiwgMjI2LCAxMTEsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjAyLCAyLCAyNDgsIDE1NCwgCi0gICAgMjIsIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjUsIAotICAgIDE3NiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzYsIDIyLCAKLSAgICAyMTAsIDIxOSwgMjYsIDYsIDEsIDIyNiwgMjAyLCAyLCAyMjQsIDE1NSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMTQsIAotICAgIDE0LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAKLSAgICAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMSwgMjIsIDIyNCwgMTY3LCAyNiwgNiwgCi0gICAgMSwgMjI2LCAyMDIsIDIsIDI0OCwgMTU0LCAyMiwgMjI2LCAxMTEsIDIyLCAyMjQsIDE2NywgMjYsIDYsIDEsIDIyNiwgMjAyLCAKLSAgICAyLCAyMjQsIDE1NSwgMjIsIDIyNSwgMTc2LCAyMiwgMjI0LCAxNjcsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjQ4LCAxNTQsIAotICAgIDIyLCAyMjUsIDE3NiwgMjIsIDIyNCwgMTY3LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIxMywgMTIwLCAyNiwgNCwgMSwgCi0gICAgMjU0LCAxNDQsIDIsIDIzMSwgMjMyLCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIAotICAgIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTQ0LCAyLCAyMjYsIDExMSwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjU0LCAxNDQsIDIsIDIyNSwgMTc2LCAKLSAgICAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgCi0gICAgMjMxLCAyMzIsIDI2LCA2LCAxLCAyNTQsIDE0NCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDI1NCwgMTQ0LCAyLCAyMjQsIDE2NywgMjYsIDIzNCwgMiwgMjYsIDIyNCwgMTY3LCAyNiwgMjI0LCAKLSAgICAxNTQsIDI2LCAyMjUsIDE3NSwgMjYsIDI0NywgMjUyLCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMTQsIAotICAgIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNjQsIDIsIAotICAgIDIyNiwgMTExLCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNDUsIDY0LCAyLCAyMjUsIDE3NSwgMjYsIDQsIDEsIDI0NSwgCi0gICAgNjQsIDIsIDIyNSwgMTc2LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyNDUsIDEwMSwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIAotICAgIDI0NSwgMTAxLCAyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNDUsIDY0LCAKLSAgICAyLCAyMjYsIDExMCwgMjYsIDYsIDEsIDI0NSwgNjQsIDIsIDIyNCwgMTY3LCAyNiwgMjI0LCAxNTUsIDIyLCAyMTQsIDEzLCAKLSAgICAyNiwgMjI0LCAxNTUsIDIyLCAyMjYsIDExMCwgMjYsIDIyNCwgMTU1LCAyMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMzUsIAotICAgIDE4NiwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjMxLCAyMzIsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgCi0gICAgMjQ3LCAyNTIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxODYsIDIsIDI0NywgMjUyLCAyMiwgMjI2LCAxMTAsIDI2LCAKLSAgICA0LCAxLCAyMzUsIDE4NiwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMzUsIDE4NiwgMiwgMjQ3LCAyNTIsIDIyLCAyMjUsIAotICAgIDE3NSwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMzEsIDIzMiwgCi0gICAgMjYsIDYsIDEsIDIzNSwgMTg2LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjM1LCAxODYsIDIsIDIyNiwgMTEwLCAyNiwgMjQ4LCAKLSAgICAxNTQsIDIyLCAyMTQsIDEzLCAyNiwgMjQ4LCAxNTQsIDIyLCAyMjYsIDExMCwgMjYsIDI0OCwgMTU0LCAyMiwgMjI1LCAxNzUsIAotICAgIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjMxLCAyMzIsIDI2LCA0LCAKLSAgICAxLCAyMTQsIDE1OCwgMiwgMjQ3LCAyNTIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0NywgMjUyLCAKLSAgICAyMiwgMjI2LCAxMTAsIDI2LCA0LCAxLCAyMjMsIDM4LCAyLCAyMjQsIDE1NCwgMjYsIDQsIDEsIDIyMywgMzgsIDIsIDI0OCwgCi0gICAgMTUzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNSwgMTc1LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0NywgMjUyLCAKLSAgICAyMiwgMjI1LCAxNzUsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjEzLCAxMjAsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgCi0gICAgMjMxLCAyMzIsIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMjYsIAotICAgIDExMCwgMjYsIDYsIDEsIDIyMywgMzgsIDIsIDI0OCwgMTUzLCAyNiwgMjQ3LCAyNTIsIDIyLCAyMTQsIDEzLCAyNiwgMjQ3LCAKLSAgICAyNTIsIDIyLCAyMjYsIDExMCwgMjYsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjE0LCAxNCwgMjIsIDIxMCwgCi0gICAgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDIsIDIsIDIyNiwgMTExLCAKLSAgICAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgMjI1LCAxNzUsIDI2LCA0LCAxLCAyMjYsIDIwMiwgMiwgCi0gICAgMjI1LCAxNzYsIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDIyNiwgMjAwLCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAKLSAgICAyMDAsIDIsIDIyNiwgMTEwLCAyNiwgNiwgMSwgMjI2LCAyMDIsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgCi0gICAgMjI2LCAxMTAsIDI2LCA2LCAxLCAyMjYsIDIwMiwgMiwgMjI0LCAxNjcsIDI2LCAyMjYsIDExMCwgMjYsIDI0OCwgMTUzLCAKLSAgICAyNDUsIDE1MSwgMjI0LCAyNywgMjQ1LCAxNjAsIDIyNCwgMjcsIDI0NSwgMTUxLCAyMTksIDE4LCAyNDUsIDE2MCwgMjE5LCAKLSAgICAxOCwgMjE2LCAxNDEsIDIxOSwgMTgsIDI0NCwgOSwgMjE5LCAxOCwgMjE5LCAxMjMsIDIxOSwgMTgsIDI0NCwgMTEyLCAyMTksIAotICAgIDE4LCAyMjQsIDE0MSwgMjE5LCAxOCwgMjE2LCAxNzAsIDIxOSwgMTgsIDI0MiwgMzUsIDIxOSwgMTgsIDIxMCwgODcsIDIxMSwgCi0gICAgMjQ1LCAyMTksIDE4LCAyMTAsIDg3LCAyMTEsIDI0NSwgMjI4LCA2NywgMjEwLCA4NywgMjExLCAyNDUsIDIzNSwgNjMsIAotICAgIDIzMywgMzgsIDc4LCAyMjIsIDI0MywgNzgsIDI0MCwgMTY4LCAyMjgsIDY4LCAyNDAsIDE2OCwgMjQ0LCAxMTIsIDI0OCwgCi0gICAgMTU2LCAyNDUsIDE1MSwgMjQ4LCAxNTYsIDI0NSwgMTYwLCAyNDgsIDE1NiwgMjAzLCAxMzAsIDUyLCA2NywgMjMyLCAyMTMsIAotICAgIDUyLCAxMjEsIDIzMiwgMjEzLCA0MywgMjE5LCAxNTUsIDIyMywgMjU0LCA3OCwgNDQsIDIxOSwgMTU1LCAyMjMsIDI1NCwgCi0gICAgNzgsIDIxOSwgMTU1LCAyMzIsIDEwOSwgMjIzLCAyNTQsIDc4LCAyMTksIDE1NSwgMjQxLCAxNjMsIDIyMywgMjU0LCA3OCwgCi0gICAgNDMsIDUyLCAyMjMsIDI1NCwgNzgsIDQ0LCA1MiwgMjIzLCAyNTQsIDc4LCA1MiwgMjMyLCAxMDksIDIyMywgMjU0LCA3OCwgCi0gICAgNTIsIDI0MSwgMTYzLCAyMjMsIDI1NCwgNzgsIDI0OCwgMjA1LCA1MiwgMjQ4LCAyMDUsIDI1MSwgMTEzLCAyMTUsIDIyMiwgCi0gICAgMjUxLCAxMTMsIDEyMywgNTksIDIzMywgNTYsIDExMywgNTksIDIzMywgNTYsIDIwMywgMjQ1LCAxNjMsIDI0MCwgMTY2LCAKLSAgICAyMjUsIDEwLCAyMzIsIDIxNCwgMjIwLCAxMzcsIDIyNiwgMTUsIDIyMCwgMTM3LCAyMzMsIDM4LCAyNDUsIDE1OCwgMjIyLCAKLSAgICAyNDMsIDI0NSwgMTU4LCAyMjQsIDI0NiwgMjQ3LCAxOTYsIDI0NCwgMTksIDIzMywgMzgsIDIyNiwgMTE3LCAyMjIsIDI0MywgCi0gICAgMjI2LCAxMTcsIDIyOSwgMTk0LCAyMjgsIDczLCAyMTksIDE4LCAyMjUsIDE4MywgMjMwLCAxOTMsIDUwLCAyMjUsIDE4MywgCi0gICAgMjE2LCAyNDgsIDIxNiwgMTQ4LCA1MCwgMjI0LCAxOTAsIDUyLCAyMjQsIDE5MCwgMjE1LCAyMTEsIDIyNCwgMTkwLCAyMjMsIAotICAgIDQ5LCAyMjQsIDE5MCwgMjIzLCA0OSwgNTIsIDIyNCwgMTkwLCAyMjMsIDQ5LCAyMTUsIDIxMSwgMjI0LCAxOTAsIDI1MCwgCi0gICAgMjM4LCAyMTksIDE1NSwgMjMzLCA0MiwgMjU0LCAxMTAsIDIyMywgMjU0LCA3OCwgMjE5LCAxNTUsIDIyMiwgMjQ3LCAyNTQsIAotICAgIDExMCwgMjIzLCAyNTQsIDc4LCAyMjMsIDEwNywgNzgsIDUyLCAyNDUsIDMxLCA3OCwgMjM1LCAyMDEsIDIyNiwgMTE5LCAKLSAgICAyMTQsIDE4MCwgMTM1LCAyMTYsIDExMSwgMjUwLCAyMzksIDIzNSwgMjE2LCAyMjUsIDEwLCAyNTMsIDIxNCwgMjQwLCAxNjksIAotICAgIDI1MSwgMTEzLCAyNDQsIDIsIDIxOSwgOTUsIDQzLCA0MiwgMjUxLCAxNTgsIDIsIDIyNCwgNywgNDQsIDQyLCAyNTEsIDE1OCwgCi0gICAgMiwgMjI0LCA3LCA1MiwgMjI0LCAxMywgNzgsIDIyNCwgMTMsIDI0NSwgMzEsIDc4LCAyNDUsIDMxLCAyMjQsIDEzLCA3OCwgCi0gICAgMjE2LCA3MCwgNSwgMjQ1LCA2NSwgMjIzLCA0OSwgMjI1LCA2OCwgNTAsIDg1LCAxNDAsIDI1MSwgMTEzLCA4NSwgOTcsIAotICAgIDI1MSwgMTEzLCAxMjEsIDI1MywgMjE2LCAyMjMsIDQ5LCAyMjAsIDE1MCwgMjUwLCAxLCAyMTQsIDE2MywgMTEzLCAyNTMsIAotICAgIDIxNSwgMjU0LCAxNTgsIDIxMywgMTg4LCAyNDksIDIxNywgMjMwLCAxODIsIDUwLCAyMTcsIDIzNCwgMjQ4LCAxNTYsIDIzNSwgCi0gICAgMTkzLCAyMTQsIDE4MCwgMjQ0LCA1MiwgMjI0LCAxNDEsIDc4LCAxMzQsIDU5LCAyMjQsIDE0MCwgMjI0LCAyNCwgMjI0LCAKLSAgICAxOTAsIDI0NCwgMTEsIDU5LCAyMjQsIDE0MCwgMjQ0LCA4MSwgNTksIDIyNCwgMTQwLCAxMTMsIDU5LCAyMjQsIDE0MCwgCi0gICAgMjQ0LCAxMSwgNTksIDc4LCAyNDYsIDExOCwgMjQ5LCAxMzAsIDIxNSwgMjIxLCA2NywgMjQ0LCAxMSwgMjQ3LCAxMTgsIAotICAgIDIzMSwgODIsIDExLCAyMTksIDE4LCAyMTEsIDIwOSwgMjM1LCA2MywgMjQzLCAyMjcsIDI1NCwgNTIsIDIzNSwgMTkxLCAKLSAgICAyMTYsIDg1LCAyMzUsIDE5MSwgMjIwLCAxMzcsIDIzNSwgMTkxLCAyMjUsIDIyLCAyMzUsIDIyOCwgMjE3LCAxODIsIDIxNywgCi0gICAgMjUxLCAyNTUsIDUsIDIxNywgMTgyLCAyMTcsIDI1MSwgMjM1LCAyMjgsIDEwLCAyNDQsIDIwLCAyMjAsIDgwLCAyNTUsIDUsIAotICAgIDEwLCAyNDQsIDIwLCAyMjAsIDgwLCAyMjksIDE4OSwgMjEsIDIyMCwgODEsIDIyOCwgNjksIDIxLCAyMjAsIDgxLCAyMTgsIAotICAgIDIzLCAyMTAsIDg2LCAyMTgsIDIzLCA3LCA0LCAxLCA3MywgMjE4LCAyMywgMTYxLCAyMTgsIDIzLCAxODksIDIxOCwgMjMsIAotICAgIDE5NCwgMjE4LCAyMywgMTk4LCAyMTgsIDIzLCAxOTUsIDIxOCwgMjMsIDIwMCwgMjE4LCAyMywgOTYsIDUwLCAyMTgsIDIzLCAKLSAgICAyMzAsIDE4MSwgMjE4LCAyMywgMjQ1LCA5OCwgNTAsIDIxOCwgMjMsIDQzLCAyMjYsIDMsIDIxOCwgMjMsIDQ0LCAyMjYsIDMsIAotICAgIDIxOCwgMjMsIDcsIDQsIDEsIDIzMCwgMjUsIDIxOCwgNjUsIDIxMCwgODYsIDIxOCwgNjUsIDExMCwgMjE4LCA2NSwgMTA1LCAKLSAgICAyMTgsIDY1LCAxNTgsIDIxOCwgNjUsIDE2MSwgMjE4LCA2NSwgMTg5LCAyMTgsIDY1LCAxOTQsIDIxOCwgNjUsIDE5OCwgCi0gICAgMjE4LCA2NSwgMTk1LCAyMTgsIDY1LCAyMDAsIDIxOCwgNjUsIDk2LCA1MCwgMjE4LCA2NSwgMjMwLCAxODEsIDIxOCwgNjUsIAotICAgIDI0NSwgOTgsIDUwLCAyMTgsIDY1LCA0MywgMjI2LCAzLCAyMTgsIDY1LCA0NCwgMjI2LCAzLCA3LCAyMTgsIDY1LCA0LCAxLCAKLSAgICA2MSwgNywgMjE4LCA2NSwgNCwgMSwgNzUsIDcsIDIxOCwgNjUsIDQsIDEsIDc2LCA3LCAyMTgsIDY1LCA0LCAxLCAyMTEsIAotICAgIDE3OCwgNywgMjE4LCA2NSwgNCwgMSwgMjIxLCAxOTUsIDcsIDIxOCwgNjUsIDQsIDEsIDI0MiwgNjAsIDcsIDIxOCwgNjUsIAotICAgIDQsIDEsIDIzNSwgMjMsIDcsIDIxOCwgNjUsIDQsIDEsIDE1NiwgNywgMjE4LCA2NSwgNCwgMSwgMTkzLCA3LCAyMTgsIDY1LCAKLSAgICA0LCAxLCAyMzAsIDI1LCA3LCAyMTgsIDY1LCA0LCAxLCAyMjYsIDEwNSwgNywgMjE4LCA2NSwgNCwgMSwgMjIyLCA5MSwgNywgCi0gICAgMjE4LCA2NSwgNCwgMSwgMjE3LCAxNTIsIDI0NSwgNDYsIDUwLCAyNDksIDIyNywgNTAsIDI0OSwgMTE3LCA1MCwgMjQzLCAKLSAgICAyNTEsIDI0MywgMjU0LCA1MCwgMjMyLCAxOTgsIDUwLCAyMzAsIDE5NCwgNTAsIDIyOSwgMjEwLCA1MCwgMjI1LCAxNjIsIAotICAgIDUwLCAyMjIsIDExOCwgNTAsIDIxMSwgMjE3LCA1MCwgMTY2LCAyMjAsIDQ5LCA1MCwgMjQ3LCAxMjcsIDUwLCAyNDUsIDQ3LCAKLSAgICA1MCwgMjM0LCA3NiwgNTAsIDIxNSwgMTEyLCA1MCwgMjQ2LCAxMDEsIDUwLCAyNDMsIDQwLCAyMjUsIDE5MywgNTAsIDIyNSwgCi0gICAgMTYwLCA1MCwgMjQyLCAxMDksIDUwLCAyNTMsIDE4MiwgNTAsIDI0MCwgMjI4LCA1MCwgMjUwLCAxODUsIDUwLCAyMzIsIAotICAgIDE5MSwgMjE2LCAzLCA1MCwgMjE5LCAwLCA1MCwgMjE2LCAyNDUsIDUwLCAyMzUsIDI0MSwgMjIyLCAxMTgsIDUwLCAzOCwgCi0gICAgNDMsIDI0MSwgMjU1LCA0OCwgMzgsIDQ0LCAyNDEsIDI1NSwgNDgsIDM4LCAxOTksIDY3LCAyMzIsIDIxNCwgMjI2LCAxMjAsIAotICAgIDM4LCAyMTksIDI1MSwgNjcsIDIzMiwgMjE0LCAyMjYsIDEyMCwgMzgsIDI1NCwgODgsIDgwLCA0OCwgMzgsIDI1MCwgMiwgCi0gICAgODAsIDQ4LCAzOCwgNDMsIDgwLCA0OCwgMzgsIDQ0LCA4MCwgNDgsIDM4LCAyMjIsIDIzNCwgMjI2LCAxMjAsIDM4LCAyNTAsIAotICAgIDIsIDIyMiwgMjM0LCAyMjYsIDEyMCwgMzgsIDI1NCwgODgsIDIyMiwgMjM0LCAyMjYsIDEyMCwgMzgsIDEzNCwgMTcwLCA0OCwgCi0gICAgMzgsIDI0NCwgMTEsIDE3MCwgNDgsIDM4LCAyNDUsIDE0NiwgMjUwLCAzNSwgMzgsIDI0NSwgMTQ2LCAyMTgsIDIzNCwgMzgsIAotICAgIDI0NSwgMTQ2LCAyNDcsIDI0OCwgMzgsIDI0NSwgMTQ2LCAyNTAsIDM2LCAyNTIsIDE4MCwgMzgsIDQzLCA0NCwgODAsIDQ4LCAKLSAgICAzOCwgMjQ1LCAxNDYsIDIyMSwgMTg4LCAzOCwgMjQ1LCAxNDYsIDIzNCwgMTM1LCAzOCwgMjQ1LCAxNDYsIDIxNCwgMTU1LCAKLSAgICAyMjUsIDcsIDIxNSwgMjI1LCAzOCwgMjIzLCA1MCwgMjE5LCA0NywgMjI2LCAxMjAsIDM4LCA1MiwgNjcsIDIxOCwgMTAzLCAKLSAgICAyMjYsIDEyMCwgMzgsIDI1NCwgOTgsIDg3LCAzOCwgMjE1LCAyMTEsIDIxNCwgMTgyLCAzOCwgMjExLCAyNDcsIDI1MSwgCi0gICAgMTQwLCA0OCwgMzgsIDE0MCwgODAsIDIyNiwgMTIwLCAzOCwgMTk5LCA1MiwgMjE5LCA0NywgMjI2LCAxMjAsIDM4LCA5NywgCi0gICAgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIDEwMywgMzgsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIAotICAgIDEwMywgMzgsIDQzLCA4MCwgNTEsIDM4LCA0NCwgODAsIDUxLCAzOCwgMjUzLCAyMTcsIDQ4LCAyNTUsIDExLCAyMjYsIDIzMSwgCi0gICAgMjU0LCAyNTEsIDIxNiwgNDIsIDIxNiwgMTk2LCAyMTgsIDc0LCAxMzksIDYsIDI1MSwgNjYsIDI0OCwgNzEsIDI1MCwgMTc4LCAKLSAgICAyNTAsIDE3NSwgMjMyLCAyMTQsIDg3LCAyNTAsIDI0MCwgMjI2LCAyMzEsIDI1MSwgMjYsIDIxNCwgMTg5LCAyNDUsIDQ4LCAKLSAgICAyNDksIDE5MSwgMjIxLCAxODUsIDI0OCwgNzEsIDI0NCwgMTc5LCAxMTksIDQsIDI0MywgMjAyLCAxMTksIDYsIDI0MiwgNjAsIAotICAgIDI1MSwgMjE5LCA2LCAyNDIsIDYwLCAxMzksIDYsIDI0MiwgNjAsIDIyNSwgMzcsIDI0OSwgMTkxLCAyMjUsIDM3LCAyNDksIAotICAgIDE5MiwgMTE3LCAxMTMsIDIyNSwgMTA4LCAxMTksIDYsIDczLCAyNTEsIDIxOSwgNiwgNzMsIDExOSwgNiwgMTU2LCAxMTksIAotICAgIDQsIDE1NiwgMjMzLCAxNDksIDU3LCAyNTIsIDE0MSwgODcsIDEzOSwgNiwgMjMwLCAyNSwgMjI3LCAxOTYsIDUwLCAyMTksIAotICAgIDMxLCAyMjMsIDExOSwgMjQ5LCAxNjIsIDExOSwgNiwgMjI2LCAxMDUsIDEzOSwgNiwgMjI2LCAxMDUsIDEzOSwgNiwgMjI0LCAKLSAgICA5NiwgMTE5LCA2LCAxNTMsIDI1MSwgMjE5LCA2LCAxNTMsIDEzOSwgNiwgMTUzLCAyMjQsIDE5NiwgMjE3LCA3MSwgMjIzLCAKLSAgICA2MiwgMjIwLCAxMzIsIDc4LCAyMTcsIDEsIDUwLCAyMTUsIDI1MywgMTY0LCA1MCwgMjEzLCAyNDAsIDEzOSwgNiwgMjEwLCAKLSAgICAxNTksIDIyNiwgMTMzLCA1MCwgMjI2LCAyMjEsIDUwLCAyMzUsIDE5MywgMjI2LCAyMjEsIDUwLCAyNTEsIDIxOSwgNiwgCi0gICAgMjEwLCAxNTksIDIxNSwgOTQsIDI2LCA0LCAxLCAyMzUsIDE4NSwgMjM0LCAxNzMsIDUwLCAyNTQsIDEwNywgNTAsIDExOSwgCi0gICAgNiwgMjUzLCAxNTgsIDI1MSwgMjE5LCA2LCAyNTEsIDY2LCAyNDUsIDY4LCA4NywgMTE5LCA0LCA3NSwgMTE5LCA2LCA3NSwgCi0gICAgMTE5LCA2LCAyNDUsIDYsIDIxNSwgOTQsIDYsIDI0NSwgNiwgMTE5LCA2LCAxOTMsIDExOSwgNCwgNzYsIDExMiwgODcsIAotICAgIDI1MiwgMjksIDg3LCAyNDIsIDIwMiwgODcsIDI0OCwgMTkwLCA4NywgMjM1LCAyMzIsIDIxOSwgMjksIDIyMiwgMTg3LCA2LCAKLSAgICAyMjQsIDk2LCAyNDQsIDE4MiwgNTAsIDEzOSwgNCwgMjI1LCAxMDgsIDEzOSwgNCwgMjQzLCAxMDcsIDEzOSwgNiwgMjQzLCAKLSAgICAxMDcsIDEzOSwgNiwgMjI1LCAxMDgsIDEzOSwgMjMwLCAyNCwgMjE4LCA0MCwgMjE1LCA5NCwgMzUsIDYsIDI0MywgMjAyLCAKLSAgICAyMTUsIDk0LCAzNSwgNiwgMTU2LCAyMjMsIDQ5LCAzNSwgNiwgMTU2LCAyMTUsIDk0LCAzNSwgNiwgMjExLCAxMTcsIDEzOSwgCi0gICAgMzIsIDYsIDI0OSwgNjAsIDEzOSwgMzIsIDQsIDI0OSwgNjAsIDEzOSwgMzIsIDQsIDc1LCAxMzksIDMyLCA0LCA3MywgMTM5LCAKLSAgICAzMiwgNCwgMjM1LCAxNDQsIDIyNCwgMTcwLCAyMzIsIDIxMywgMjE1LCA5NCwgMjU0LCAxMjYsIDIyNSwgMTgzLCA1MCwgCi0gICAgMjU0LCAxODAsIDIxNSwgOTQsIDQsIDI0NSwgNiwgMTYsIDMxLCAyMjEsIDI1MiwgMjE5LCAyOSwgMjEyLCAxMTQsIDI0NCwgCi0gICAgMiwgMTIzLCAyMjAsIDExOCwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyMjgsIDE5NCwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAKLSAgICAyMTYsIDI0MSwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyMTYsIDE2OCwgMjEyLCAxMTQsIDI0NCwgMiwgMTEzLCAyMTYsIAotICAgIDE2NiwgMjEyLCAxMTQsIDI0NCwgMiwgMTIzLCAyNDQsIDExNywgMjEyLCAxMTQsIDI0NCwgMiwgMTEzLCAyNDQsIDExNiwgCi0gICAgMjEyLCAxMTQsIDI0NCwgMiwgMTM0LCAyNDQsIDExNiwgMjEyLCAxMTQsIDI0NCwgMiwgMjQ0LCAxMSwgMjQ0LCAxMTYsIAotICAgIDIxMiwgMTE0LCAyNDQsIDIsIDEyMywgMjE5LCAxMTUsIDIxMiwgMTE0LCAyNDQsIDIsIDI0NCwgODEsIDIxOSwgMTEzLCAKLSAgICAyMTIsIDExNCwgMjQ0LCAyLCAxMjMsIDI0NSwgMTg4LCAyMTIsIDExNCwgMjQ0LCAyLCAxMzQsIDI0NSwgMTg2LCAyMTIsIAotICAgIDExNCwgMjQ0LCAyLCAyNDQsIDgxLCAyNDUsIDE4NiwgMjEyLCAxMTQsIDI0NCwgMiwgMjIwLCAxMjIsIDI0NSwgMTg2LCAKLSAgICAyNDQsIDIsIDIyNywgMTk3LCAxMTAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEwNSwgCi0gICAgMjIyLCAxOTgsIDIyNywgMTk4LCAxNTgsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTYxLCAyMjIsIDE5OCwgMjI3LCAxOTgsIAotICAgIDE4OSwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTk4LCAyMjIsIDE5OCwgMjI3LCAKLSAgICAxOTgsIDE5NSwgMjIyLCAxOTgsIDIyNywgMTk4LCAyMDAsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE2LCAyNDcsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMjQ1LCAxNjcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE1LCA3NiwgMjIyLCAxOTgsIDIyNywgMTk4LCAKLSAgICAyNDQsIDExNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxMjMsIDI0MCwgMjEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgODEsIAotICAgIDI0MCwgMjEwLCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjE2LCAxNDcsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTEwLCAKLSAgICA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEwNSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxNTgsIDQsIDIyMiwgMTk4LCAyMjcsIAotICAgIDE5OCwgMTYxLCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE4OSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAxOTQsIDQsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMTk4LCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDE5NSwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAKLSAgICAyMDAsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE2LCAyNDcsIDQsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjQ1LCAxNjcsIDQsIAotICAgIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjE1LCA3NiwgNCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDExNCwgNCwgMjIyLCAKLSAgICAxOTgsIDIyNywgMTk4LCAxMjMsIDI0MCwgMjEwLCA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDI0NCwgODEsIDI0MCwgMjEwLCAKLSAgICA0LCAyMjIsIDE5OCwgMjI3LCAxOTgsIDEyMywgMjE2LCAxNDcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyMTYsIDE0OCwgCi0gICAgMjUxLCA2NywgMjQ5LCA2MCwgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDgxLCAyMTYsIDE0NywgMjIyLCAxOTgsIDIyNywgCi0gICAgMTk4LCAyMTYsIDI0OCwgMjE2LCAxNDcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMjIzLCA0OSwgMTIzLCAyNDAsIDIxMCwgNywgCi0gICAgNCwgMSwgMjIzLCA0OSwgMjUxLCA2NiwgMjIyLCAxOTgsIDIyNywgMTk4LCAyMTksIDEyNSwgMjMzLCA3OCwgMTcsIDIyMiwgCi0gICAgMTk4LCAyMjcsIDE5OCwgMjQ0LCAxMTUsIDI0NSwgMjI2LCAxNywgMjIyLCAxOTgsIDIyNywgMTk4LCAyNDQsIDExNSwgMjE2LCAKLSAgICAxNDcsIDIyMiwgMTk4LCAyMjcsIDE5OCwgMTIzLCAyNDAsIDIxMSwgMjE2LCAxNDcsIDIxMiwgMTE0LCAyNDQsIDIsIDIxMCwgCi0gICAgODcsIDIxNiwgMTY2LCAxNDAsIDc0LCAyMTQsIDE1MywgNzQsIDk3LCA3NCwgMjQ2LCAxMDQsIDc0LCA0MywgNDQsIDc0LCAKLSAgICAxMjAsIDEyNCwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgMjE5LCAyOCwgMjQ1LCAKLSAgICAyMjAsIDc0LCAyMTksIDI4LCAyMTIsIDksIDc0LCAxNDAsIDgwLCAyLCA5MSwgOTcsIDgwLCAyLCA5MSwgMTQwLCAyMTIsIAotICAgIDM2LCA3NCwgOTcsIDIxMiwgMzYsIDc0LCAxNDAsIDExMywgMjQxLCAyMzQsIDc0LCAyMTQsIDE1MywgMTEzLCAyNDEsIDIzNCwgCi0gICAgNzQsIDk3LCAxMTMsIDI0MSwgMjM0LCA3NCwgMjQ2LCAxMDQsIDExMywgMjQxLCAyMzQsIDc0LCAxNDAsIDgwLCAyLCAyMTcsIAotICAgIDc3LCA5NywgODAsIDIsIDIxNywgNzcsIDE0MCwgODAsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCA4MCwgMjQzLCAyNDMsIAotICAgIDEzMCwgOTcsIDgwLCAyNDMsIDI0MywgMTMwLCAyNDYsIDEwNCwgODAsIDI0MywgMjQzLCAxMzAsIDEyMCwgMTI0LCA4MCwgMiwgCi0gICAgMjUyLCAxMjcsIDE0MCwgODAsIDIsIDEwMywgOTcsIDgwLCAyLCAxMDMsIDE0MCwgODAsIDIsIDIzMiwgMTIzLCA5NywgODAsIAotICAgIDIsIDIzMiwgMTIzLCA0MywgNDQsIDIxMiwgMzYsIDc0LCA0MywgNDQsIDgwLCAyLCA5MSwgMjQ2LCAxMDQsIDIxMCwgMzUsIAotICAgIDc0LCAyMTQsIDE1MywgODAsIDIsIDIxNiwgNzcsIDIzMywgMzcsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3NywgMjIyLCAKLSAgICAyNDEsIDI0NiwgMTA0LCA4MCwgMiwgMjE2LCA3NywgMjMzLCAzNywgMjQ2LCAxMDQsIDgwLCAyLCAyMTYsIDc3LCAyMjIsIAotICAgIDI0MSwgOTcsIDgwLCAyLCAyNDksIDE2MSwgMjQ2LCAxMDMsIDI0NiwgMTA0LCA4MCwgMiwgMjQ5LCAxNjEsIDIzMywgMzcsIAotICAgIDI1NCwgODgsIDIxNiwgMTQsIDIyMCwgMTUzLCA3NCwgMjUwLCAyLCAyMTYsIDE0LCAyMjAsIDE1MywgNzQsIDIyOCwgNTYsIAotICAgIDIxMiwgOSwgODAsIDIxNiwgNDIsIDE5OSwgMTMwLCAxNDAsIDgwLCAyMTYsIDQyLCAyNTIsIDE0MSwgMTE3LCA5NywgODAsIAotICAgIDIxNiwgNDIsIDEzMCwgMjU0LCA4OCwgMjA0LCAyNTAsIDM2LCA3NCwgMjUwLCAyLCAyMDQsIDI1MCwgMzYsIDc0LCAxNDAsIAotICAgIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjE0LCAxNTIsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIDEwMywgCi0gICAgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNDEsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAKLSAgICAxMzksIDIzMywgMzcsIDk3LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIxNCwgMTUyLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgCi0gICAgMTM5LCAyNDYsIDEwMywgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMjIyLCAyNDEsIDI0NiwgMTA0LCAyNDEsIAotICAgIDI1NSwgMiwgMjUyLCAxMzksIDIzMywgMzcsIDk3LCA4MCwgMTE3LCAxNDAsIDc0LCAyMTQsIDE1MywgODAsIDE0MCwgNjQsIAotICAgIDI0NiwgMTA0LCA3NCwgMTQwLCA4MCwgMTE3LCA5NywgNzQsIDE0MCwgMjI2LCA3MCwgMjUzLCAyNDcsIDIxNCwgMTUzLCAKLSAgICAyMjYsIDcwLCAyNTMsIDI0NywgOTcsIDIyNiwgNzAsIDI1MywgMjQ3LCAyNDYsIDEwNCwgMjI2LCA3MCwgMjUzLCAyNDcsIAotICAgIDE0MCwgMjQxLCAyNTUsIDExNywgOTcsIDI0MSwgMjU0LCA5NywgMjQxLCAyNTUsIDExNywgMTQwLCAyNDEsIDI1NCwgMTQwLCAKLSAgICA1MiwgODAsIDIsIDkxLCA0MywgNDQsIDUyLCA4MCwgMiwgOTEsIDk3LCA1MiwgODAsIDIsIDkxLCAxNDAsIDUyLCA3NCwgCi0gICAgMjE0LCAxNTMsIDUyLCA3NCwgOTcsIDUyLCA3NCwgMjQ2LCAxMDQsIDUyLCA3NCwgNDMsIDQ0LCA1MiwgNzQsIDEyMCwgMTI0LCAKLSAgICA1MiwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgNTIsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgNTIsIDc0LCAyMTksIDI4LCAyNDUsIAotICAgIDIyMCwgNTIsIDc0LCAyMTksIDI4LCAyMTIsIDksIDUyLCA3NCwgMTQwLCAyMTUsIDIxMSwgNzQsIDk3LCAyMTUsIDIxMSwgCi0gICAgNzQsIDE0MCwgMjE4LCAyMzAsIDc0LCA5NywgMjE4LCAyMzAsIDc0LCAyMTQsIDE1MywgODAsIDIsIDUyLCA5MSwgMjQ2LCAKLSAgICAxMDQsIDgwLCAyLCA1MiwgOTEsIDE0MCwgMjQ4LCAxNTUsIDc0LCAyMTQsIDE1MywgMjQ4LCAxNTUsIDc0LCA5NywgMjQ4LCAKLSAgICAxNTUsIDc0LCAyNDYsIDEwNCwgMjQ4LCAxNTUsIDc0LCAxNDAsIDgwLCAyMTYsIDQyLCAxMzAsIDk3LCA4MCwgMjE2LCA0MiwgCi0gICAgMTMwLCAxNDAsIDcxLCA3NCwgMjE0LCAxNTMsIDcxLCA3NCwgOTcsIDcxLCA3NCwgMjQ2LCAxMDQsIDcxLCA3NCwgMjE0LCAKLSAgICAxNTMsIDcxLCA4MCwgMjQzLCAyNDMsIDEzMCwgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAxOTcsIDIyNSwgMjE0LCAyMTQsIAotICAgIDE1MywgNzEsIDgwLCAyMjYsIDE5NywgMjI1LCAyMTUsIDIsIDIwMywgMTMwLCAyMTQsIDE1MywgNzEsIDgwLCAyMjYsIDE5NywgCi0gICAgMjI1LCAyMTUsIDIsIDY3LCAxMzAsIDIxNCwgMTUzLCA3MSwgNTIsIDc0LCAyMTQsIDE1MywgNzEsIDUyLCA4MCwgMjI2LCAKLSAgICAxOTcsIDIyNSwgMjE0LCA5NywgNzEsIDgwLCAyNDMsIDI0MywgMjEyLCA1NiwgMjI4LCA1NiwgMjEyLCA5LCA4MCwgMjE2LCAKLSAgICA0MiwgMjQ5LCAxNjAsIDIxOSwgMjgsIDI0NSwgMjIwLCA4MCwgMjE2LCA0MiwgMjQ5LCAxNjAsIDEyMCwgMTI0LCA3MSwgNzQsIAotICAgIDQ0LCA4MCwgMiwgNCwgMjUwLCAzNSwgMjQ2LCAxMDQsIDgwLCAxNDAsIDY0LCAyMTQsIDE1MywgNzQsIDEzNCwgOTcsIDI1MywgCi0gICAgMjQ3LCAxNDAsIDgwLCAyLCA2NywgOTEsIDk3LCA4MCwgMiwgNjcsIDkxLCA0MywgNDQsIDgwLCAyLCA2NywgOTEsIDE0MCwgCi0gICAgODAsIDIsIDUyLCA2NywgOTEsIDk3LCA4MCwgMiwgNTIsIDY3LCA5MSwgNDMsIDQ0LCA4MCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAKLSAgICAyMjYsIDE3MywgNzQsIDk3LCAyMjYsIDE3MywgNzQsIDQzLCA0NCwgMjI2LCAxNzMsIDc0LCAzMSwgMjU0LCAxNTQsIDI0OSwgCi0gICAgMjE0LCAyMjUsIDI1MywgMjQ3LCAyMzMsIDIxNiwgMTg3LCAyNDUsIDI3LCAyMTYsIDE4NywgMjQ3LCAxMzgsIDIyOCwgNTIsIAotICAgIDI0NSwgMjgsIDI0NSwgMTUyLCAyMjAsIDEyNywgMjM1LCAyNDUsIDIyOSwgMjIxLCAyNDUsIDE3MCwgMjI2LCAyMzEsIDIyOCwgCi0gICAgNTIsIDI1NCwgMTI0LCAyNDUsIDE3MCwgMjI2LCAyMzEsIDQsIDI0NSwgMTcwLCAyMjYsIDIzMSwgMjQ5LCAxODYsIDI1MywgCi0gICAgMjM4LCAyMzEsIDYyLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjQ5LCAxODgsIDI1MywgMjM4LCAyMzEsIDYyLCA0LCAyNDksIAotICAgIDE4NiwgMjUzLCAyMzgsIDIzMSwgNjIsIDI0NSwgMTQzLCA2NCwgMjI0LCAxNzIsIDIzMCwgMjQsIDIyNCwgMTgwLCAyMzAsIAotICAgIDI0LCAyNDksIDE2NSwgMjMwLCAyNCwgMjE4LCA0MCwgMjMwLCAxODIsIDUwLCAyMzAsIDE4MCwgNTAsIDU5LCAyMjUsIDIyLCAKLSAgICAyNDcsIDE2OSwgMjE5LCA5NSwgMjIwLCAxMjgsIDIzMCwgMTgxLCAyNTMsIDIxNywgMjI2LCAxNjcsIDIyMiwgMjM0LCAyMjYsIAotICAgIDE2NywgMjUxLCAxMTQsIDIyNiwgMTY3LCA0MiwgMjIyLCAxOTMsIDI0OSwgMTA5LCAyMjIsIDE5MywgMjQ0LCA0LCAyMjIsIAotICAgIDE5MywgMjI0LCAxNjgsIDExMSwgMjM1LCAyMzQsIDQ0LCAyNTQsIDEwOSwgMjU0LCAxMDksIDIzMSwgODgsIDI1NCwgMTA5LCAKLSAgICAyMTgsIDI1NSwgMjU0LCAxMDksIDI0NywgMTcxLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjQ3LCAxNzQsIDIyNiwgOCwgMTExLCAKLSAgICAyMjgsIDUyLCAyMjYsIDgsIDExMSwgMjMyLCAxNDYsIDI1NCwgMTE4LCAyMzIsIDE0NiwgMjI2LCAxNTgsIDIzNSwgMTk4LCAKLSAgICAyMTQsIDE3NSwgMjM1LCAyMTEsIDUyLCAyMzUsIDIxMSwgMjE1LCAyMTEsIDIzNSwgMjExLCAyNDksIDE4MiwgMjM1LCAyMTEsIAotICAgIDIxOCwgMTMsIDIzNSwgMjExLCAyMTMsIDEyOSwgMjM1LCAyMTEsIDI1MCwgMiwgMjM1LCAyMTEsIDI1MCwgMiwgMjQ5LCAKLSAgICAxODIsIDIzNSwgMjExLCAyNTQsIDg4LCAyNDksIDE4MiwgMjM1LCAyMTEsIDIxNiwgMTg2LCAyNTIsIDY3LCAyMjMsIDEzNywgCi0gICAgMjI0LCAxNjksIDU5LCAyMzAsIDE4MSwgMjQ1LCAzMywgMjQzLCA0NiwgMjI0LCAxNjksIDI0MSwgNTcsIDIxNiwgODksIAotICAgIDIyNiwgMTY3LCAyMjMsIDQ5LCAxODIsIDIzNSwgMTkzLCAyMzMsIDY1LCAyMjIsIDkxLCAyMTksIDE1NywgMjEyLCAzNSwgCi0gICAgMjExLCAyMDAsIDIyNCwgMTgwLCAyMjgsIDUyLCAxODIsIDIzMCwgMTgyLCAxODIsIDI1MywgMjEwLCAxMjgsIDExMSwgMjI4LCAKLSAgICA1MiwgMjUzLCAyMTAsIDEyOCwgMTExLCAyNTQsIDQ4LCAxMjgsIDExMSwgMjU0LCA0OCwgMjUxLCA4OCwgMjI4LCA1MiwgCi0gICAgMjU1LCA0LCAxMjgsIDExMSwgMjI5LCAxMDAsIDI1NCwgNDgsIDIyOCwgNTksIDI1NSwgNCwgMTI4LCAxMTEsIDI1NCwgMTQ4LCAKLSAgICAxMjgsIDExMSwgMjI4LCA1MiwgMjU0LCAxNDgsIDEyOCwgMTExLCAyNTQsIDE0OCwgMTI4LCAxNzcsIDEyOCwgMTExLCAyMTUsIAotICAgIDIxMSwgMTgyLCAyNTQsIDE1NSwgMTI4LCAxMTEsIDI0NSwgOTQsIDExMSwgMjQzLCA0NSwgMjQ1LCA5NCwgMTExLCAyNDcsIAotICAgIDIzNCwgMjUyLCAyMywgMjU0LCA1MCwgMjE2LCAxOTYsIDIzMiwgMjIxLCAyNDMsIDQ1LCAxMjgsIDExMSwgMjU0LCA0OCwgCi0gICAgMTI4LCAyMTYsIDQyLCAxNzcsIDIxNiwgMTk2LCAyMzYsIDE1LCAyMjYsIDIzMSwgMjM2LCAxNSwgNjQsIDE3NywgMjU0LCAKLSAgICA0OCwgMTI4LCAxMTEsIDI0OSwgMjI3LCAyNDUsIDk3LCAyNDUsIDk4LCAyNDksIDIyNiwgMjIyLCAyMzQsIDIzNiwgMCwgCi0gICAgMTI4LCAxMTEsIDIyMiwgMjM0LCAxMjgsIDExMSwgMjQ5LCAxNTQsIDExMSwgMjQ1LCA2NywgMjQ1LCA5NiwgMTExLCAyMTgsIAotICAgIDE1NywgMjQ1LCA5NywgMjQ4LCA1NSwgMTI4LCAxMTEsIDEyOCwgMjE2LCA0MiwgMjUxLCA3OCwgMjQ4LCA3MiwgMjMxLCA4OCwgCi0gICAgMjUxLCA3NywgMjI0LCAxMSwgMTI4LCAxMTEsIDIyOCwgNTIsIDEyOCwgMTExLCAyNDAsIDEwNCwgMTExLCAyMjgsIDUyLCAKLSAgICAyNDAsIDEwNCwgMTExLCAyMTgsIDEwOSwgMjQ1LCA5NCwgMTExLCAyMzMsIDE1LCAxNzcsIDEyOCwgMTExLCAyNDIsIDEzMCwgCi0gICAgMTc3LCAxMjgsIDExMSwgMjMzLCAxNSwgMTE3LCAxMjgsIDExMSwgMjQyLCAxMzAsIDExNywgMTI4LCAxMTEsIDIzMywgMTUsIAotICAgIDI1MSwgODgsIDIyOCwgNTIsIDEyOCwgMTExLCAyNDIsIDEzMCwgMjUxLCA4OCwgMjI4LCA1MiwgMTI4LCAxMTEsIDIzMCwgCi0gICAgOTcsIDIzMywgMTQsIDIzMCwgOTcsIDI0MiwgMTI5LCAyNTIsIDIzLCAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDIyOCwgNTIsIAotICAgIDIzMywgMTQsIDIyOCwgNTIsIDI0MiwgMTI5LCAyMjksIDEwMCwgMjMzLCAxNSwgMjI4LCA1OSwgMTI4LCAxMTEsIDIyOSwgCi0gICAgMTAwLCAyNDIsIDEzMCwgMjI4LCA1OSwgMTI4LCAxMTEsIDIzMywgMTUsIDE3NywgMjQ1LCA5NCwgMTExLCAyNDIsIDEzMCwgCi0gICAgMTc3LCAyNDUsIDk0LCAxMTEsIDIyOSwgMTAwLCAyMzMsIDE1LCAyMjgsIDU5LCAyNDUsIDk0LCAxMTEsIDIyOSwgMTAwLCAKLSAgICAyNDIsIDEzMCwgMjI4LCA1OSwgMjQ1LCA5NCwgMTExLCAyMzMsIDE1LCAxNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgMTc3LCAKLSAgICAyMzMsIDE0LCAyMjksIDEwMCwgMjMzLCAxNSwgMjI4LCA1OSwgMjQyLCAxMjksIDIyOSwgMTAwLCAyNDIsIDEzMCwgMjI4LCAKLSAgICA1OSwgMjMzLCAxNCwgMjI0LCAyMDIsIDIxOCwgNTUsIDIyNCwgMjAzLCAxNzcsIDEyOCwgMTExLCAyMTgsIDU2LCAxNzcsIAotICAgIDEyOCwgMTExLCAyMjQsIDIwMywgMTc3LCAyNDUsIDk0LCAxMTEsIDIxOCwgNTYsIDE3NywgMjQ1LCA5NCwgMTExLCAyNDcsIAotICAgIDEzOCwgMjI4LCA1MiwgMjI0LCAyMDUsIDI0NywgMTM4LCAyMjgsIDUyLCAyMTgsIDU3LCAyMTgsIDY0LCAyMjYsIDIzMSwgCi0gICAgMjE4LCAyMiwgMjI2LCAyMzEsIDIyOCwgNTIsIDExNSwgMjE4LCA2NCwgMjI2LCAyMzEsIDIyOCwgNTIsIDExNSwgMjE4LCAKLSAgICAyMiwgMjI2LCAyMzEsIDIxOCwgNjQsIDY0LCAxNzcsIDEyOCwgMTExLCAyMTgsIDIyLCA2NCwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjI5LCAxMDAsIDExNSwgMjE4LCA2NCwgNjQsIDIyOCwgNTksIDEyOCwgMTExLCAyMjksIDEwMCwgMTE1LCAyMTgsIDIyLCAKLSAgICA2NCwgMjI4LCA1OSwgMTI4LCAxMTEsIDIxOCwgNjQsIDY0LCAyLCAyMjgsIDUyLCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDIsIAotICAgIDIyOCwgNTIsIDEyOCwgMTExLCAyMzAsIDgxLCAyMzAsIDgyLCAyMzAsIDgzLCAyMzAsIDgyLCAyMTQsIDE3NSwgNDIsIDIzNiwgCi0gICAgMTUsIDIyNiwgMjMxLCA0MiwgMjI2LCAxNTAsIDIyNiwgMjMxLCA0MiwgMjM2LCAxNSwgNjQsIDE3NywgMTI4LCAxMTEsIDQyLCAKLSAgICAyMjYsIDE1MCwgNjQsIDE3NywgMTI4LCAxMTEsIDQyLCAyNTAsIDI1MSwgNDIsIDI0OSwgMTAyLCAzNywgMjI1LCAyMiwgMzcsIAotICAgIDIzMCwgMTgxLCAzNywgMjE2LCA4NSwgMzcsIDI0NywgMTY5LCAyMTksIDk1LCAzNywgNTksIDIyNiwgMTY3LCAzNywgMjIyLCAKLSAgICAyMzQsIDIyNiwgMTY3LCAzNywgMjUzLCAyMTcsIDIyNiwgMTY3LCAzNywgMjQ1LCA5NywgMzcsIDI0OCwgMTU2LCA5MiwgCi0gICAgMjI1LCAyMiwgOTIsIDIzMCwgMTgxLCA5MiwgMjE2LCA4NSwgOTIsIDU5LCAyMjYsIDE2NywgNDQsIDIxNywgODcsIDQzLCAKLSAgICAyMTcsIDg3LCAxMjQsIDIxNywgODcsIDEyMCwgMjE3LCA4NywgMjUzLCAyMjAsIDIzMCwgMTU2LCAyMTUsIDE5MSwgMjQ0LCAKLSAgICAyNSwgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgNDQsIDIxNSwgOTMsIDUyLCA2NywgMjUyLCAxNDEsIDUyLCA0NCwgMjE1LCAKLSAgICA5MywgMjQ3LCAxMzgsIDIyOCwgNTIsIDIyNCwgMTYzLCAyMjgsIDUyLCAyMTUsIDE5MSwgMjQ3LCAxMzgsIDIyOCwgNTIsIAotICAgIDI0NCwgMjYsIDIyOSwgMTAyLCA1MiwgNjcsIDI1MiwgMTQxLCA1MiwgNDQsIDIxNSwgOTMsIDIyNCwgMjAzLCAyMTQsIDE4NCwgCi0gICAgMjIzLCA5MSwgMjE4LCA1NiwgMjE0LCAxODQsIDIyMywgOTEsIDIyOCwgNTcsIDIxOCwgNzcsIDIyNiwgMjMxLCAyNDksIAotICAgIDE4NiwgMjUzLCAyMzgsIDIyOCwgNTcsIDIxOCwgNzYsIDIyOCwgNTcsIDIxOCwgNzcsIDY0LCAxNzcsIDEyOCwgMTExLCAKLSAgICAyNDksIDE4NiwgMjUzLCAyMzgsIDIyOCwgNTcsIDIxOCwgNzcsIDE3NywgMTI4LCAxMTEsIDIyNiwgMTUwLCAyMjYsIDIzMSwgCi0gICAgMjM2LCAxNSwgMjI2LCAyMzEsIDIzMCwgODcsIDI0MSwgMjAwLCAyNDksIDE5NiwgMjMxLCAxMzcsIDIzNSwgMjA4LCAyMTEsIAotICAgIDE0NSwgMjI5LCAyMDIsIDIyOCwgNTgsIDQ0LCAyNTQsIDExMCwgMiwgMjU0LCAyNSwgNDQsIDIxNSwgMjI1LCAyMzAsIDI0LCAKLSAgICAyMzIsIDE0NiwgMjU0LCAxMTgsIDIzMCwgMjQsIDIzMiwgMTQ2LCAyMjYsIDE1OCwgMjMwLCAyNCwgMjM1LCAxOTgsIDIzMCwgCi0gICAgMjQsIDIxNCwgMTc1LCAyNDcsIDI0OSwgMjI2LCAxNjcsIDU5LCAyMjYsIDE2NywgMjE4LCAxNTcsIDIyNiwgMTY3LCAyNDcsIAotICAgIDE2OSwgMjE2LCA4NSwgMjUxLCAxNjQsIDQzLCAyMjgsIDU3LCAyNDQsIDE4MSwgMjIwLCAxNDksIDIyNCwgMTgwLCA0NCwgCi0gICAgMjI4LCA1NywgMjQ0LCAxODEsIDIyMCwgMTQ5LCAyMjQsIDE4MCwgNDMsIDIyMCwgMTQ5LCAyMjQsIDE4MCwgNDQsIDIyMCwgCi0gICAgMTQ5LCAyMjQsIDE4MCwgMjIzLCA0OSwgMjE2LCA4OSwgMjQ1LCA5NywgMjQ5LCA5OSwgMjMyLCAxNDYsIDIyNiwgMTU4LCAKLSAgICAyNDksIDk5LCAyMzIsIDE0NiwgMjU0LCAxMTgsIDUyLCAyMTgsIDYzLCA1MiwgMjE4LCAyMSwgNTIsIDIzNSwgMTk4LCA1MiwgCi0gICAgMjE0LCAxNzUsIDIyNSwgNDcsIDEyOCwgMjIsIDIyNiwgOCwgMTExLCAyMzMsIDE1LCAyLCAyNDcsIDEyMCwgMjQyLCAxMzAsIAotICAgIDIsIDI0NywgMTIwLCAyMTMsIDE4NywgMjMwLCA5NywgMjMzLCAxNCwgMjEzLCAxODcsIDIzMCwgOTcsIDI0MiwgMTI5LCAKLSAgICAyMzMsIDE1LCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMjksIDI0MiwgMTMwLCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAKLSAgICAxNCwgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDEyOCwgMjE2LCA0MiwgMTc3LCAyNDIsIDEyOSwgMTI4LCAyMTYsIAotICAgIDQyLCAxNzcsIDIyNCwgMjAyLCAxMjgsIDIxNiwgNDIsIDE3NywgMjE4LCA1NSwgMjQ3LCAxMzgsIDIyOCwgNTIsIDIyNCwgCi0gICAgMjA2LCAxNzcsIDI0NSwgOTksIDI0NywgMTM4LCAyMjgsIDUyLCAyMTgsIDU4LCAxNzcsIDI0NSwgOTksIDIyOCwgNTIsIDQyLCAKLSAgICAyMzYsIDE1LCA2NCwgMTc3LCAxMjgsIDExMSwgMjI4LCA1MiwgNDIsIDIyNiwgMTUwLCA2NCwgMTc3LCAxMjgsIDExMSwgNDIsIAotICAgIDIzNiwgMTUsIDY0LCAxNzcsIDIyOCwgNTIsIDEyOCwgMTExLCA0MiwgMjI2LCAxNTAsIDY0LCAxNzcsIDIyOCwgNTIsIDEyOCwgCi0gICAgMTExLCAyMzMsIDE1LCAyNTEsIDg4LCAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDI0MiwgMTMwLCAyNTEsIDg4LCAyMjgsIDUyLCAKLSAgICAyNDUsIDk0LCAxMTEsIDIyNCwgMjAzLCAyNTEsIDg4LCAyMjgsIDUyLCAyNDUsIDk0LCAxMTEsIDIxOCwgNTYsIDI1MSwgODgsIAotICAgIDIyOCwgNTIsIDI0NSwgOTQsIDExMSwgMjI4LCA1MiwgMjI4LCA1NywgMjE4LCA3NywgMjI2LCAyMzEsIDI0NywgMTM4LCAKLSAgICAyMjgsIDUyLCAyNDksIDE4OCwgMjUzLCAyMzgsIDIyOCwgNTcsIDIxOCwgNzYsIDIyOCwgNTIsIDIyOCwgNTcsIDIxOCwgNzcsIAotICAgIDY0LCAxNzcsIDEyOCwgMTExLCAyNDcsIDEzOCwgMjI4LCA1MiwgMjQ5LCAxODgsIDI1MywgMjM4LCAyMjgsIDU3LCAyMTgsIAotICAgIDc3LCAxNzcsIDI0NSwgOTksIDY3LCAyNDUsIDE2MywgMjMwLCAyMjIsIDIwMywgMjQ1LCAxNjMsIDEyMCwgNDQsIDI0NywgCi0gICAgMjU1LCAyNDUsIDE2MywgMTI0LCA0NCwgMjQ3LCAyNTUsIDI0NSwgMTYzLCAyNDUsIDE3MCwgNjQsIDIsIDE5OSwgMjAzLCAKLSAgICA5MSwgMjQ1LCAxNzAsIDY0LCAyLCA2NywgMjUyLCAxNDEsIDI1MywgMjA3LCAyNDUsIDE0MywgNjQsIDIwMywgOTEsIDQsIAotICAgIDI0NSwgMTcwLCA2NCwgMiwgNjcsIDI1MiwgMTQxLCAyNTMsIDIwNywgMjQ1LCAxNDMsIDY0LCAyMDMsIDkxLCAyNDUsIDE3MCwgCi0gICAgNjQsIDIsIDU5LCA0OCwgMjQ1LCAxNzAsIDY0LCAyLCAyMjYsIDEyMywgNCwgMjQ1LCAxNzAsIDY0LCAyLCAyMjYsIDEyMywgCi0gICAgMjQ1LCAxNzAsIDY0LCAyLCAyMTQsIDE4MywgMjQ1LCAxNzAsIDY0LCAyLCAxMTMsIDIwMywgMjE4LCA5MCwgMjQ5LCAxODYsIAotICAgIDIsIDE5OSwgMjAzLCA5MSwgMjQ5LCAxODYsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCAKLSAgICA5MSwgNCwgMjQ5LCAxODYsIDIsIDY3LCAyNTIsIDE0MSwgMjUzLCAyMDcsIDI0NSwgMTQzLCA2NCwgMjAzLCA5MSwgMjQ5LCAKLSAgICAxODYsIDIsIDIyNiwgMTIzLCA0LCAyNDksIDE4NiwgMiwgMjI2LCAxMjMsIDIxMCwgMTYwLCAxODcsIDI1MiwgMTczLCAyMzEsIAotICAgIDYxLCAyNDcsIDI1MCwgNTAsIDI0NSwgMTcyLCA3NCwgMjQwLCAyMzQsIDEyMCwgMjUzLCAyNDksIDEyNCwgMjUzLCAyNDksIAotICAgIDIyNCwgMTc1LCAyMjUsIDE2NSwgMjEyLCAzMiwgMjMyLCAyMTMsIDQzLCAyNTAsIDE4MSwgNDQsIDI1MCwgMTgxLCA0MywgCi0gICAgMjQ0LCA1NywgNDQsIDI0NCwgNTcsIDI1MSwgMTc1LCA0NCwgMjQ5LCAxMzIsIDI1MSwgMTc1LCA0MywgMjQ5LCAxMzIsIAotICAgIDIxNiwgMTQsIDQ0LCAyNDksIDEzMiwgMjE2LCAxNCwgNDMsIDI0OSwgMTMyLCAyMjMsIDQ5LCAyMjgsIDUyLCA1MCwgNDIsIAotICAgIDIzMiwgMTA0LCAyNTQsIDI1LCAyMjEsIDE2NCwgMjIxLCAxNzEsIDIxNywgMSwgMjIzLCAxMjAsIDIyNCwgMjQxLCAyMzUsIAotICAgIDIzOCwgMjEzLCAxNjUsIDIxOCwgMjM0LCAyMjUsIDQxLCA2NCwgMjM1LCAyMDcsIDUwLCAyMTUsIDk0LCAyMjgsIDUyLCA1MCwgCi0gICAgMjEyLCA0MiwgMjQwLCAyMzYsIDIxNiwgMTQsIDQzLCAyNDksIDE2MCwgMjE2LCAxNCwgNDQsIDI0OSwgMTYwLCAyNTEsIAotICAgIDE3NSwgNDMsIDI0OSwgMTYwLCAyNTEsIDE3NSwgNDQsIDI0OSwgMTYwLCAyMTYsIDE0LCAxNjMsIDIzNSwgMjExLCAyNTEsIAotICAgIDE3NSwgMTYzLCAyMzUsIDIxMSwgMjQzLCAyNDAsIDIxOSwgNzUsIDEyMCwgMjUzLCAyNTAsIDI1MiwgMjQsIDExMywgMjAzLCAKLSAgICAyNTIsIDEyOSwgMjI2LCAxNjAsIDIzNCwgMTM4LCAyNDUsIDkwLCAyMTYsIDQyLCAyMTYsIDE5NiwgMjIyLCAyNTEsIDIxMSwgCi0gICAgMTc5LCAyMzYsIDAsIDExNSwgMjIzLCAxMTcsIDI1MSwgMTYzLCAyMzQsIDEzNywgMjMzLCA0MiwgMjU0LCAxMTAsIDEyNywgCi0gICAgMjIyLCAyNDcsIDI1NCwgMTEwLCAxMjcsIDI0NSwgOTAsIDIxNiwgNDIsIDIxNiwgMTk2LCAyMzMsIDQ2LCAyNTIsIDM1LCAKLSAgICAyMjIsIDIzMywgMjQ5LCA3MCwgMjU0LCAxNTUsIDI1NCwgMSwgMjE3LCAxODEsIDIxNiwgNCwgMjIyLCAxMjMsIDI0NywgCi0gICAgMjE1LCAyMjYsIDE1MSwgMjQ5LCAxOTgsIDIxNywgNTIsIDIxOSwgODYsIDI0OSwgMTUxLCAyNDksIDE1MCwgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAyNDAsIDE1MSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMTgsIDIyOCwgMjI0LCAyNywgMjU0LCAKLSAgICA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyNDUsIDk5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NywgCi0gICAgMTc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0NywgMjQ4LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDIyNCwgMjgsIDIzNSwgNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjUwLCAzNSwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyNTAsIDM2LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTAsIDM2LCAyMzUsIDU2LCAyNTQsIAotICAgIDY2LCAyNDMsIDIyNSwgMTYsIDIxOSwgOTYsIDEzMCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTIsIDE4MSwgMTMwLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDIxOSwgOTUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgCi0gICAgMjUyLCAxODAsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjMzLCAxNCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyMjQsIDI4LCAyNDIsIDEyOSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxNDAsIDIxNCwgMTksIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgOTcsIDIxNCwgMTksIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMTQwLCA3NCwgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCA5NywgNzQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjUyLCAxODAsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTI0LCAyMTcsIDg4LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAKLSAgICAyNDgsIDU1LCAyMTgsIDEzNSwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAxMjQsIDI1MCwgMjM4LCAyNTQsIAotICAgIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIDI0OCwgNTQsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTI0LCAyMTcsIDg4LCAKLSAgICAyMzUsIDU2LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxNCwgMTUzLCAyMTQsIDE5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDIyNCwgMjgsIDIxNCwgMTUzLCA3NCwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAxMjAsIDIxNywgODgsIDIyNiwgMTIzLCAKLSAgICAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI0OCwgNjYsIDIxOCwgMTM1LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIAotICAgIDEyMCwgMjUwLCAyMzgsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ4LCA2NSwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAxMjAsIDIxNywgODgsIDIzNSwgNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ2LCAxMDQsIDIxNCwgMTksIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ2LCAxMDQsIDc0LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyMywgCi0gICAgMjUzLCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDgsIDU1LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyNDcsIDI0OSwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjM1LCA1NywgMjE0LCAxODMsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjUwLCAzNiwgMjE0LCAxODMsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTIwLCAKLSAgICAyMjAsIDUsIDIzNSwgNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjIzLCAyNTMsIDIyNCwgMjcsIDI1NCwgNjYsIDI0MywgCi0gICAgMjI1LCAxNiwgMjUwLCAzNiwgMjE4LCAxNTYsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjI0LCAyOCwgMjQ5LCAyMjYsIAotICAgIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTIwLCAyMTcsIDg4LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ4LCAKLSAgICA2NiwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIxOCwgMTU3LCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAKLSAgICAxNiwgMjM1LCA1NywgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDI1MCwgMzYsIDI0OCwgMSwgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAxMjQsIDIyMCwgNSwgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgNDMsIDIyMCwgNSwgCi0gICAgMjE4LCAxMzUsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjE2LCA4OSwgMjQ4LCAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDI0MiwgMTMwLCAyNDgsIDEsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjQ5LCAyMjAsIDEzMCwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyNDgsIDY2LCAxODIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMjEwLCAzNCwgMjU0LCA2NiwgMjQzLCAyMjUsIAotICAgIDE2LCAyMTgsIDEzNiwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyMCwgMTUxLCAyMTQsIDE4MywgMjU0LCA2NiwgCi0gICAgMjQzLCAyMjUsIDE2LCAyMjQsIDI4LCAyMjgsIDUyLCAyNDUsIDk5LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjgsIAotICAgIDIyNCwgMTIsIDI1NCwgNjYsIDI0MywgMjI1LCAxNiwgMTI0LCAyNTAsIDIzOSwgMTgyLCAyNTQsIDY2LCAyNDMsIDIyNSwgCi0gICAgMTYsIDEyMCwgMjUwLCAyMzksIDE4MiwgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyMzUsIDE4NSwgMjU0LCA2NiwgMjQzLCAKLSAgICAyMjUsIDE2LCAyMjMsIDM3LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNiwgMjAxLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIAotICAgIDI1NCwgMTQ0LCAyMTQsIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNDUsIDEwMSwgMjE0LCAxODMsIDI1NCwgNjYsIAotICAgIDI0MywgMjI1LCAxNiwgMjM1LCAxODYsIDIxNCwgMTgzLCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNiwgMjAyLCAyMTQsIAotICAgIDE4MywgMjU0LCA2NiwgMjQzLCAyMjUsIDE2LCAyNTQsIDE0MywgMjI4LCA1MiwgMjUwLCAxMzAsIDc4LCA0NCwgMjU0LCAKLSAgICAxMTAsIDIsIDI0NiwgMTA0LCAyMTAsIDM1LCA3NCwgMjE5LCAyMzUsIDIwNCwgMjUxLCAxNjMsIDI1MiwgNDUsIDg3LCA2NywgCi0gICAgMjMyLCAyMTQsIDIsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjM1LCAyMTYsIDg3LCAyNDksIDE4MywgMjE0LCAxODEsIDg3LCAKLSAgICAyNDcsIDE4OSwgMjE0LCAxODEsIDg3LCAyNDUsIDE1NCwgODcsIDI0OSwgMjEwLCA4NywgNzEsIDQyLCAyLCAyNTAsIDE3NSwgCi0gICAgNjcsIDIzMiwgMjEzLCAyNDUsIDEzMCwgODcsIDI1NCwgMTM5LCAyMzQsIDEzOSwgODcsIDI0MSwgMjEzLCA4NywgMzcsIAotICAgIDIwMywgMjUyLCAxNDEsIDIsIDIyOCwgNTAsIDM3LCAyMTUsIDIyNiwgMjQ2LCAxMDYsIDI1MSwgMTM1LCAyNTAsIDM2LCAyLCAKLSAgICAyMjgsIDU0LCA3NCwgMjE0LCAxNzksIDg3LCAyMzAsIDEzNywgODcsIDI0MCwgMTY0LCA4NywgMjI2LCAxNzQsIDI0MiwgNTksIAotICAgIDg3LCAyMjYsIDE3NCwgMjMzLCAxNDcsIDg3LCAyMjUsIDI0NCwgODcsIDIyNSwgMjQzLCA4NywgMjQ3LCAxOTcsIDI0OSwgCi0gICAgOTcsIDE2LCAyNDQsIDIwLCAxMDUsIDIxOSwgNTAsIDg3LCAyNTQsIDY2LCAyNDMsIDIyNSwgMTYsIDIyNCwgMjcsIDI0OCwgCi0gICAgODMsIDIyMCwgMTM4LCAyMzQsIDEzOSwgODcsIDIyNCwgMTkyLCAyMjYsIDc1LCAyMjksIDgyLCAyMjYsIDc1LCAyMjQsIAotICAgIDE4OCwgMjIxLCAxODksIDg3LCAyNTAsIDE3LCAyMjEsIDE4OSwgODcsIDQzLCAyMjYsIDQsIDIxNCwgMTYwLCAxMDMsIDQzLCAKLSAgICAyMjYsIDQsIDI0NSwgMjEsIDQzLCAyMjYsIDQsIDIzMiwgMTA4LCAxMDMsIDQ0LCAyMjYsIDQsIDIxNCwgMTYwLCAxMDMsIAotICAgIDQ0LCAyMjYsIDQsIDI0NSwgMjEsIDQ0LCAyMjYsIDQsIDIzMiwgMTA4LCAxMDMsIDQzLCA0MiwgMjUxLCAxNTgsIDIxNCwgCi0gICAgMTYwLCAyNDksIDE2MCwgNDMsIDQyLCAyNTEsIDE1OCwgMjQ1LCAyMSwgNDMsIDQyLCAyNTEsIDE1OCwgMjMyLCAxMDgsIAotICAgIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyMTQsIDE2MCwgMjQ5LCAxNjAsIDQ0LCA0MiwgMjUxLCAxNTgsIDI0NSwgCi0gICAgMjEsIDQ0LCA0MiwgMjUxLCAxNTgsIDIzMiwgMTA4LCAyNDksIDE2MCwgNDMsIDI0OSwgOTksIDI1MSwgMTU4LCAyMTQsIAotICAgIDE2MCwgMTAzLCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIzMCwgMjI0LCAyMjUsIDEwMSwgNDMsIDI0OSwgOTksIDI1MSwgCi0gICAgMTU4LCAyMzIsIDEwOCwgMTAzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjQ1LCAyMSwgNDQsIDI0OSwgOTksIDI1MSwgMTU4LCAKLSAgICAyMTQsIDE2MCwgMTAzLCA0NCwgMjQ5LCA5OSwgMjUxLCAxNTgsIDIzMCwgMjI0LCAyMjUsIDEwMSwgNDQsIDI0OSwgOTksIAotICAgIDI1MSwgMTU4LCAyMzIsIDEwOCwgMTAzLCAyMzUsIDIxMiwgMjQ1LCAyMSwgMjAzLCAyMzIsIDIxNCwgMjQ1LCAyMSwgMjE0LCAKLSAgICAxNjAsIDQzLCAxNzcsIDIzMiwgMTA4LCA0NCwgMjQ5LCA5OSwgMjUxLCAxNTgsIDIyMSwgMTcyLCAyMTQsIDE2MCwgNDQsIAotICAgIDE3NywgMjMyLCAxMDgsIDQzLCAyNDksIDk5LCAyNTEsIDE1OCwgMjIxLCAxNzIsIDIxOCwgNDEsIDIxNiwgMTMsIDIxOCwgCi0gICAgNDEsIDI1MSwgMTc0LCAyMTYsIDE0LCA0MiwgMTI3LCAyNTEsIDE3NSwgNDIsIDEyNywgMjUxLCAxNzUsIDQyLCAyNTEsIAotICAgIDE1OCwgMTE3LCAyMTYsIDE0LCA0MiwgMTI3LCAzNCwgMTYsIDI1MSwgMTc0LCA0MywgNjcsIDkzLCAyMzIsIDIxMywgNDQsIAotICAgIDY3LCA5MywgMjMyLCAyMTMsIDIwMywgMjIxLCAyMDUsIDIzMiwgMjEyLCAyMDMsIDIyMSwgMjA1LCAyMzIsIDIxMSwgMjAzLCAKLSAgICAyMjEsIDIwNSwgMjMyLCAyMTAsIDIwMywgMjIxLCAyMDUsIDIzMiwgMjA5LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIAotICAgIDIxNiwgMTQsIDIyMiwgMjUxLCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMjIsIDI1MSwgMTc1LCAyMjIsIDI1MSwgMjQ4LCA0NiwgCi0gICAgMTYsIDE5MiwgNjcsIDIsIDI1MCwgMzUsIDI0OCwgNDYsIDE2LCAxOTIsIDEyNCwgMjIsIDIwMywgMiwgMjUwLCAzNSwgMjQ4LCAKLSAgICA0NiwgMTYsIDE5MiwgMTIwLCAyMiwgMjAzLCAyLCAyNTAsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCA2NywgMiwgMjE1LCAyMjUsIAotICAgIDI0OCwgNDYsIDE2LCAxOTIsIDEyNCwgMjIsIDIwMywgMiwgMjE1LCAyMjUsIDI0OCwgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIAotICAgIDIwMywgMiwgMjE1LCAyMjUsIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgMjEyLCAzNSwgMjQ4LCA0NiwgMTYsIDE5MiwgCi0gICAgMTI0LCAyMiwgMjAzLCAyLCAyMTIsIDM1LCAyNDgsIDQ2LCAxNiwgMTkyLCAxMjAsIDIyLCAyMDMsIDIsIDIxMiwgMzUsIAotICAgIDI0OCwgNDYsIDE2LCAxOTIsIDEyNCwgMjIsIDI0MSwgNDQsIDI0OCwgNDYsIDE2LCAxOTIsIDEyMCwgMjIsIDI0MSwgNDQsIAotICAgIDI0OCwgNDYsIDE2LCAxOTIsIDY3LCAyMiwgMjE2LCAxNCwgMjMzLCA0NiwgMjQ4LCA0NiwgMTYsIDE5MiwgNjcsIDIyLCAKLSAgICAyNTEsIDE3NSwgMjMzLCA0NiwgNDIsIDI0NCwgMzIsIDIyMywgNTQsIDg3LCAyNDUsIDE4MiwgODcsIDY3LCAyMzIsIDIxNCwgCi0gICAgMjQ1LCAyMSwgMjMxLCAzMywgMjUxLCAxNDYsIDIzMSwgMzMsIDE5OSwgMTE3LCAyMTksIDI1MCwgMjMxLCAzMywgMjE5LCAKLSAgICAyNTEsIDExNywgMjMyLCAxMzcsIDIzMSwgMzMsIDE5OSwgMTE3LCAxMTMsIDIxOSwgMjM3LCAyMzEsIDMzLCAxMTMsIDIxOSwgCi0gICAgMjM4LCAxMTcsIDIzMiwgMTM3LCAyMzEsIDMzLCAxMTMsIDIxOSwgMjM4LCAyMzUsIDY0LCAyMzEsIDMzLCAyMTUsIDIwOCwgCi0gICAgMjMxLCAzMywgMjE2LCAyMjMsIDIzMSwgMzMsIDIyNSwgMTg4LCAyNDUsIDIyNCwgMjQyLCAxMjIsIDI0MywgMjE5LCAyMTYsIAotICAgIDE0LCAyMjYsIDMsIDI1MSwgMTc1LCAyMjYsIDMsIDIxNiwgMTQsIDI0OSwgOTksIDEyNywgMjUxLCAxNzUsIDI0OSwgOTksIAotICAgIDEyNywgMjE2LCAxNCwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDI1MSwgMTc1LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNzEsIAotICAgIDIxNSwgMjM5LCAyNTIsIDM1LCAyMjIsIDIzNCwgMiwgMjUwLCAzNSwgMjE4LCAxMjAsIDI0NCwgNjQsIDI1NSwgMTcsIDI0OSwgCi0gICAgOTYsIDI0NSwgMTcxLCAyMzUsIDE5OCwgMjQ4LCA4MywgMjQ1LCAyNCwgODcsIDg1LCAyMjIsIDI0NywgNTIsIDIxNSwgMjI1LCAKLSAgICA4NSwgMjMzLCA0MiwgNTIsIDIxNSwgMjI1LCA4NSwgMjE0LCAxNjIsIDUyLCAyMTUsIDIyNSwgODUsIDI0NiwgMTA1LCA1MiwgCi0gICAgMjE1LCAyMjUsIDg1LCAyMjIsIDI0NywgNTIsIDIxNSwgMjI2LCAyLCA2NywgMTMwLCA4NSwgMjMzLCA0MiwgNTIsIDIxNSwgCi0gICAgMjI2LCAyLCA2NywgMTMwLCA4NSwgMjIyLCAyNDcsIDIxNSwgMjI2LCAyLCA1MiwgNjcsIDEzMCwgMjU0LCAxNzMsIDI1MCwgCi0gICAgMywgMjE4LCAxMjYsIDIxNiwgODYsIDI1MCwgMywgMjQwLCAyMzcsIDIsIDI0NCwgNTAsIDIyMSwgMjQxLCAxNiwgMzEsIAotICAgIDIyNywgMjAyLCAxNiwgMzEsIDIxOCwgMTUyLCA2NCwgMjQxLCAyMzMsIDE2LCAzMSwgMjE4LCAxNTIsIDY0LCAyMTYsIDIxMiwgCi0gICAgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIxNiwgMjEyLCAxNiwgMzEsIDI0NSwgMTQzLCA2NCwgMjE1LCAyNDMsIDE2LCAzMSwgCi0gICAgMjQ1LCAxMzIsIDE2LCAzMSwgMjU1LCA3LCAxNiwgMzEsIDI1MiwgNDQsIDE2LCAzMSwgMjUyLCAxNzksIDE2LCAzMSwgMjAzLCAKLSAgICAyMTcsIDg5LCAxNiwgMzEsIDIzMiwgMjE0LCAyNDQsIDE0NSwgMTYsIDMxLCA2NywgMjE3LCA4OSwgMTYsIDMxLCAyNDQsIAotICAgIDIwLCAyNDQsIDE0NSwgMTYsIDMxLCAyNTAsIDIzMCwgMjIzLCA1MywgMTYsIDMxLCAyMjAsIDI4LCAyMjYsIDEzMCwgMTYsIAotICAgIDMxLCAyMjAsIDI4LCAyMzUsIDI1NSwgMTYsIDMxLCAyNDgsIDE1MSwgMjMyLCAyMDQsIDI0NSwgNzcsIDE2LCAzMSwgMjQ4LCAKLSAgICAzMSwgMjQ5LCAxNzgsIDExMCwgMTYsIDMxLCAyNDgsIDMxLCAyNDksIDE3OCwgMTA1LCAxNiwgMzEsIDI0OCwgMzEsIDI0OSwgCi0gICAgMTc4LCAxNTgsIDE2LCAzMSwgMjQ4LCAzMSwgMjQ5LCAxNzgsIDE2MSwgMTYsIDMxLCAxNTIsIDI1NSwgNywgMTYsIDMxLCAKLSAgICAyMTcsIDE3NywgMjM2LCA2MiwgMTYsIDMxLCAyNDUsIDE0MywgNjQsIDIxNSwgMjQ0LCAyNTEsIDIxMywgMTYsIDMxLCAyNTEsIAotICAgIDUsIDE2LCAzMSwgMjQ1LCAxNDMsIDY0LCAyMzEsIDgxLCAxNiwgMzEsIDIxOCwgNjEsIDE2LCAzMSwgMjQ1LCA3NywgMTYsIAotICAgIDMxLCAyNDQsIDEwNywgMjIwLCAxMzcsIDE2LCAzMSwgMjQyLCAxMjEsIDIyMCwgMTM3LCAxNiwgMzEsIDIyMywgMTIxLCAKLSAgICAyMjAsIDEzNywgMTYsIDMxLCAyMTQsIDE3NCwgMjIwLCAxMzcsIDE2LCAzMSwgMjE5LCAxOCwgMTYsIDMxLCAyNDgsIDYzLCAKLSAgICAyNTEsIDIxNiwgODcsIDIwNCwgMjUxLCAxNjMsIDE2LCAzMSwgMjI5LCA4NSwgMTYsIDMxLCAyNDgsIDY0LCAyNDQsIDIwLCAKLSAgICAxMDUsIDE2LCAzMSwgMjE4LCA2MiwgMjQ0LCAyMCwgMTA1LCAyMjYsIDI0MSwgMTAzLCAyMjYsIDI0MSwgMjUwLCAxNTIsIAotICAgIDIyNiwgMjQxLCAyNDQsIDIzLCAyMjYsIDI0MSwgMjM1LCAxOTMsIDI0NCwgMjMsIDIyNiwgMjQxLCAyNTIsIDQyLCAyNTEsIAotICAgIDEyNCwgMjI2LCAyNDEsIDI1MSwgMTcwLCAyMTYsIDExMSwgMjI2LCAyNDEsIDI1MSwgMTU1LCAyNTIsIDE0NiwgMjQwLCAKLSAgICAxMDMsIDIyNiwgMjQxLCAyNTQsIDEyNywgNjQsIDI1MCwgMTI5LCAyMjYsIDI0MSwgMjQ4LCAxNTYsIDIyNiwgMjQxLCAyNDksIAotICAgIDg3LCAyNTUsIDExLCAyMjcsIDIwMCwgMjI2LCAyNDEsIDUyLCAyNTIsIDE4MCwgMzcsIDIxLCAxMTAsIDM3LCAyMSwgMTA1LCAKLSAgICAzNywgMjEsIDE1OCwgMzcsIDIxLCAxNjEsIDM3LCAyMSwgMTg5LCAzNywgMjEsIDE5NCwgMzcsIDIxLCAxOTgsIDM3LCAyMSwgCi0gICAgMTk1LCAzNywgMjEsIDIwMCwgMzcsIDU0LCAyMTYsIDI0NywgMzcsIDU0LCAyNDUsIDE2NywgMzcsIDU0LCAyMTUsIDc2LCAKLSAgICAzNywgNTQsIDIxNiwgMTY0LCAzNywgNTQsIDI0NCwgNSwgMzcsIDU0LCAyNDQsIDExOCwgMzcsIDU0LCAyMTksIDExOSwgMzcsIAotICAgIDU0LCAyMjAsIDExOSwgMzcsIDU0LCAyNDUsIDE5MCwgMzcsIDU0LCAyMjgsIDE5NywgMzcsIDU0LCAyMTUsIDczLCA4OCwgCi0gICAgMjEsIDExMCwgODgsIDIxLCAxMDUsIDg4LCAyMSwgMTU4LCA4OCwgMjEsIDE2MSwgODgsIDIxLCAxODksIDg4LCAyMSwgMTk0LCAKLSAgICA4OCwgMjEsIDE5OCwgODgsIDIxLCAxOTUsIDg4LCAyMSwgMjAwLCA4OCwgNTQsIDIxNiwgMjQ3LCA4OCwgNTQsIDI0NSwgCi0gICAgMTY3LCA4OCwgNTQsIDIxNSwgNzYsIDg4LCA1NCwgMjE2LCAxNjQsIDg4LCA1NCwgMjQ0LCA1LCA4OCwgNTQsIDI0NCwgMTE4LCAKLSAgICA4OCwgNTQsIDIxOSwgMTE5LCA4OCwgNTQsIDIyMCwgMTE5LCA4OCwgNTQsIDI0NSwgMTkwLCA4OCwgNTQsIDIyOCwgMTk3LCAKLSAgICA4OCwgNTQsIDIxNSwgNzMsIDIxLCAxMjMsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDExMywgMjQzLCAyMjksIDIxOCwgCi0gICAgMTI5LCAyMSwgMTM0LCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyNDQsIDExLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAKLSAgICAyNDQsIDgxLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyMTksIDEyNSwgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjIwLCAKLSAgICAxMjIsIDI0MywgMjI5LCAyMTgsIDEyOSwgMjEsIDI0NSwgMTkzLCAyNDMsIDIyOSwgMjE4LCAxMjksIDIxLCAyMjgsIDIwMCwgCi0gICAgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjE2LCAyNDgsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDI0NSwgMTY4LCAyNDMsIAotICAgIDIyOSwgMjE4LCAxMjksIDU0LCAyMTUsIDc3LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyMTYsIDE2NSwgMjQzLCAyMjksIAotICAgIDIxOCwgMTI5LCA1NCwgMjQ0LCA2LCAyNDMsIDIyOSwgMjE4LCAxMjksIDU0LCAyNDQsIDExOSwgMjQzLCAyMjksIDIxOCwgCi0gICAgMTI5LCA1NCwgMjE5LCAxMjAsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIDIyMCwgMTIwLCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDU0LCAyNDUsIDE5MSwgMjQzLCAyMjksIDIxOCwgMTI5LCA1NCwgMjI4LCAxOTgsIDI0MywgMjI5LCAyMTgsIDEyOSwgNTQsIAotICAgIDIxNSwgNzQsIDI0MywgMjI5LCAyMTgsIDEyOSwgODgsIDcsIDQsIDEsIDYxLCA4OCwgNywgNCwgMSwgMjUzLCAxNTgsIDg4LCAKLSAgICA3LCA0LCAxLCAyNTEsIDY2LCA4OCwgNywgNCwgMSwgMjQ5LCA2MCwgODgsIDcsIDQsIDEsIDc1LCA4OCwgNywgNCwgMSwgCi0gICAgMjQ1LCA2LCA4OCwgNywgNCwgMSwgMjQzLCAyMDIsIDg4LCA3LCA0LCAxLCAyNDIsIDYwLCA4OCwgNywgNCwgMSwgNzMsIDg4LCAKLSAgICA3LCA0LCAxLCAyMzUsIDE0NCwgODgsIDcsIDQsIDEsIDIzNSwgMjMsIDg4LCA3LCA0LCAxLCAxNTYsIDg4LCA3LCA0LCAxLCAKLSAgICAxOTMsIDg4LCA3LCA0LCAxLCAyMzAsIDI1LCA4OCwgNywgNCwgMSwgNzYsIDg4LCA3LCA0LCAxLCAyMjYsIDEwNSwgODgsIDcsIAotICAgIDQsIDEsIDIyNCwgOTYsIDg4LCA3LCA0LCAxLCAxNTMsIDg4LCA3LCA0LCAxLCAyMjIsIDkxLCA4OCwgNywgNCwgMSwgMjE3LCAKLSAgICAxNTIsIDg4LCA3LCA0LCAxLCA3MCwgODgsIDcsIDQsIDEsIDIxNCwgMTA1LCA4OCwgNywgNCwgMSwgMjEyLCA5OCwgODgsIDcsIAotICAgIDQsIDEsIDIxMSwgMTc4LCA4OCwgNywgNCwgMSwgMjExLCAxMTcsIDg4LCA3LCA0LCAxLCAyMTAsIDE1OSwgMzcsIDcsIDYsIAotICAgIDEsIDYxLCAzNywgNywgNiwgMSwgMjUzLCAxNTgsIDM3LCA3LCA2LCAxLCAyNTEsIDY2LCAzNywgNywgNiwgMSwgMjQ5LCA2MCwgCi0gICAgMzcsIDcsIDYsIDEsIDc1LCAzNywgNywgNiwgMSwgMjQ1LCA2LCAzNywgNywgNiwgMSwgMjQzLCAyMDIsIDM3LCA3LCA2LCAxLCAKLSAgICAyNDIsIDYwLCAzNywgNywgNiwgMSwgNzMsIDM3LCA3LCA2LCAxLCAyMzUsIDE0NCwgMzcsIDcsIDYsIDEsIDIzNSwgMjMsIAotICAgIDM3LCA3LCA2LCAxLCAxNTYsIDM3LCA3LCA2LCAxLCAxOTMsIDM3LCA3LCA2LCAxLCAyMzAsIDI1LCAzNywgNywgNiwgMSwgCi0gICAgNzYsIDM3LCA3LCA2LCAxLCAyMjYsIDEwNSwgMzcsIDcsIDYsIDEsIDIyNCwgOTYsIDM3LCA3LCA2LCAxLCAxNTMsIDM3LCA3LCAKLSAgICA2LCAxLCAyMjIsIDkxLCAzNywgNywgNiwgMSwgMjE3LCAxNTIsIDM3LCA3LCA2LCAxLCA3MCwgMzcsIDcsIDYsIDEsIDIxNCwgCi0gICAgMTA1LCAzNywgNywgNiwgMSwgMjEyLCA5OCwgMzcsIDcsIDYsIDEsIDIxMSwgMTc4LCAzNywgNywgNiwgMSwgMjExLCAxMTcsIAotICAgIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMzcsIDcsIDQsIDEsIDYxLCAzNywgNywgNCwgMSwgMjUzLCAxNTgsIDM3LCA3LCA0LCAKLSAgICAxLCAyNTEsIDY2LCAzNywgNywgNCwgMSwgMjQ5LCA2MCwgMzcsIDcsIDQsIDEsIDc1LCAzNywgNywgNCwgMSwgMjQ1LCA2LCAKLSAgICAzNywgNywgNCwgMSwgMjQzLCAyMDIsIDM3LCA3LCA0LCAxLCAyNDIsIDYwLCAzNywgNywgNCwgMSwgNzMsIDM3LCA3LCA0LCAKLSAgICAxLCAyMzUsIDE0NCwgMzcsIDcsIDQsIDEsIDIzNSwgMjMsIDM3LCA3LCA0LCAxLCAxNTYsIDM3LCA3LCA0LCAxLCAxOTMsIAotICAgIDM3LCA3LCA0LCAxLCAyMzAsIDI1LCAzNywgNywgNCwgMSwgNzYsIDM3LCA3LCA0LCAxLCAyMjYsIDEwNSwgMzcsIDcsIDQsIAotICAgIDEsIDIyNCwgOTYsIDM3LCA3LCA0LCAxLCAxNTMsIDM3LCA3LCA0LCAxLCAyMjIsIDkxLCAzNywgNywgNCwgMSwgMjE3LCAKLSAgICAxNTIsIDM3LCA3LCA0LCAxLCA3MCwgMzcsIDcsIDQsIDEsIDIxNCwgMTA1LCAzNywgNywgNCwgMSwgMjEyLCA5OCwgMzcsIDcsIAotICAgIDQsIDEsIDIxMSwgMTc4LCAzNywgNywgNCwgMSwgMjExLCAxMTcsIDM3LCA3LCA0LCAxLCAyMTAsIDE1OSwgMzcsIDIxLCAKLSAgICAyMTAsIDg2LCAxNTIsIDM3LCA1NCwgMjQ1LCAxNjcsIDE1MiwgMzcsIDU0LCAyMTUsIDc2LCAxNTIsIDM3LCA1NCwgMjE2LCAKLSAgICAxNjQsIDE1MiwgMzcsIDU0LCAyNDQsIDUsIDE1MiwgMzcsIDU0LCAyNDQsIDExOCwgMTUyLCAzNywgNTQsIDIxOSwgMTE5LCAKLSAgICAxNTIsIDM3LCA1NCwgMjIwLCAxMTksIDE1MiwgMzcsIDU0LCAyNDUsIDE5MCwgMTUyLCAzNywgNTQsIDIyOCwgMTk3LCAxNTIsIAotICAgIDM3LCA1NCwgMjE1LCA3MywgNTIsIDM3LCAyMSwgMTEwLCA1MiwgMzcsIDIxLCAxMDUsIDUyLCAzNywgMjEsIDE1OCwgNTIsIAotICAgIDM3LCAyMSwgMTYxLCA1MiwgMzcsIDIxLCAxODksIDUyLCAzNywgMjEsIDE5NCwgNTIsIDM3LCAyMSwgMTk4LCA1MiwgMzcsIAotICAgIDIxLCAxOTUsIDUyLCAzNywgMjEsIDIwMCwgNTIsIDM3LCA1NCwgMjE2LCAyNDcsIDE1MiwgMzcsIDIxLCAyMTAsIDg2LCA5MywgCi0gICAgOTksIDE5MiwgMjQxLCA0NCwgOTMsIDk5LCAxMTQsIDI0MSwgNDQsIDkzLCA5OSwgMTkyLCAyMTMsIDIzOSwgOTMsIDk5LCAKLSAgICAxMTQsIDIxMywgMjM5LCA5MywgOTksIDE5MiwgMjE1LCAyMTEsIDI0OCwgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDExNCwgCi0gICAgMjE1LCAyMTEsIDI0OCwgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjE1LCAyMTEsIDI0OCwgMTU3LCAyMTMsIDIzOSwgCi0gICAgOTMsIDk5LCAxMTQsIDIxNSwgMjExLCAyNDgsIDE1NywgMjEzLCAyMzksIDkzLCA5OSwgMTkyLCAyMjQsIDI0LCAyNDgsIAotICAgIDE1NywgMjQxLCA0NCwgOTMsIDk5LCAxMTQsIDIyNCwgMjQsIDI0OCwgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjI0LCAKLSAgICAyNCwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjI0LCAyNCwgMjQ4LCAxNTcsIDIxMywgMjM5LCA5MywgOTksIAotICAgIDE5MiwgMTI0LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCA0NCwgMjQxLCAyMjEsIDkzLCA5OSwgMTI0LCAKLSAgICAxMTQsIDIyLCA0NCwgMjMyLCAyMzAsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDEyNCwgCi0gICAgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCA0MywgMjQxLCAyMjEsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCAKLSAgICA0MywgMjMyLCAyMzAsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMTIwLCAyMiwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCA0NCwgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0NCwgMjMyLCAKLSAgICAyMzAsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIDIzMywgNDYsIDkzLCAKLSAgICA5OSwgMTIwLCAxOTIsIDIyLCA0MywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0MywgMjMyLCAyMzAsIDkzLCAKLSAgICA5OSwgMTE0LCAxMjAsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgNjcsIDIyLCAyMjIsIDI1MSwgOTMsIDk5LCA2NywgCi0gICAgMTkyLCAyMiwgNDQsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDQsIDEyNCwgMjMyLCAyMzAsIDkzLCA5OSwgCi0gICAgMTI0LCAxMTQsIDIyLCA0NCwgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCA2NywgMTE0LCAyMiwgNDQsIDIzMiwgMjMwLCA5MywgCi0gICAgOTksIDEyNCwgMTkyLCAyMiwgNDQsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxOTIsIDIyLCA0NCwgMTI0LCAyNDEsIAotICAgIDIyMSwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCA2NywgMjIsIDIzMywgNDYsIDkzLCA5OSwgCi0gICAgNjcsIDE5MiwgMjIsIDQzLCAyNDEsIDIyMSwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjMwLCA5MywgCi0gICAgOTksIDEyNCwgMTE0LCAyMiwgNDMsIDEyMCwgMjMyLCAyMzAsIDkzLCA5OSwgNjcsIDExNCwgMjIsIDQzLCAyMzIsIDIzMCwgCi0gICAgOTMsIDk5LCAxMjQsIDE5MiwgMjIsIDQzLCAxMjAsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgNDMsIDEyNCwgCi0gICAgMjQxLCAyMjEsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAxMjQsIDIyLCAyNDEsIDQ0LCAKLSAgICA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgMTI0LCAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTE0LCAyMiwgNDMsIDEyNCwgCi0gICAgMjMyLCAyMzAsIDkzLCA5OSwgMTI0LCAxOTIsIDIyLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyNCwgMTE0LCAyMiwgMjAzLCAKLSAgICAyMzIsIDIzMCwgOTMsIDk5LCA0NCwgMTkyLCAyMiwgNDMsIDEyNCwgMjQxLCAyMjEsIDkzLCA5OSwgNDMsIDE5MiwgMjIsIAotICAgIDQ0LCAxMjQsIDI0MSwgMjIxLCA5MywgOTksIDExNCwgMTI0LCAyMiwgMjQxLCA0NCwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIAotICAgIDI0MSwgNDQsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxMTQsIDIyLCA0MywgCi0gICAgMTIwLCAyMzIsIDIzMCwgOTMsIDk5LCAxMjAsIDE5MiwgMjIsIDIwMywgMjQxLCAyMjEsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAKLSAgICAyMDMsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxOTIsIDIyLCA0MywgMTIwLCAyNDEsIDIyMSwgOTMsIDk5LCA0MywgMTkyLCAKLSAgICAyMiwgNDQsIDEyMCwgMjQxLCAyMjEsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgNjcsIAotICAgIDIyLCAyNDEsIDQ0LCA5MywgOTksIDQzLCAxMTQsIDIyLCA0NCwgNjcsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxMTQsIDIyLCAKLSAgICA0MywgNjcsIDIzMiwgMjMwLCA5MywgOTksIDY3LCAxOTIsIDIyLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTE0LCAKLSAgICAyMiwgMTI0LCAyMDMsIDIzMiwgMjMwLCA5MywgOTksIDEyNCwgMTE0LCAyMiwgMTIwLCAyMDMsIDIzMiwgMjMwLCA5MywgOTksIAotICAgIDY3LCAxMTQsIDIyLCAyMDMsIDIzMiwgMjMwLCA5MywgOTksIDQzLCAxMjAsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjMwLCAKLSAgICA5MywgOTksIDQ0LCAxMjAsIDExNCwgMjIsIDQzLCAxMjQsIDIzMiwgMjMwLCA5MywgOTksIDQzLCAxMjQsIDExNCwgMjIsIAotICAgIDQ0LCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIDQ0LCAxMjQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjMwLCA5MywgOTksIAotICAgIDEyNCwgMTkyLCAyMiwgMTIwLCAyMDMsIDI0MSwgMjIxLCA5MywgOTksIDEyMCwgMTkyLCAyMiwgMTI0LCAyMDMsIDI0MSwgCi0gICAgMjIxLCA5MywgOTksIDQ0LCAxOTIsIDIyLCA0MywgNjcsIDI0MSwgMjIxLCA5MywgOTksIDQzLCAxOTIsIDIyLCA0NCwgNjcsIAotICAgIDI0MSwgMjIxLCA5MywgOTksIDExNCwgNjcsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgNTIsIDI0OCwgMTU3LCAyNDEsIAotICAgIDQ0LCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTU3LCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgNTIsIDI0OCwgMTU3LCAyMTMsIAotICAgIDIzOSwgOTMsIDk5LCAxMTQsIDUyLCAyNDgsIDE1NywgMjEzLCAyMzksIDkzLCA5OSwgNTIsIDI0MSwgNDQsIDkzLCA5OSwgCi0gICAgNTIsIDIxMywgMjM5LCA5MywgOTksIDEyNCwgMjE5LCAxNTUsIDIyLCA0NCwgMjQ2LCAxMTMsIDkzLCA5OSwgMTI0LCA1MiwgCi0gICAgMjIsIDQ0LCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTI0LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTI0LCAyMTksIDE1NSwgCi0gICAgMjIsIDQzLCAyNDYsIDExMywgOTMsIDk5LCAxMjQsIDUyLCAyMiwgNDMsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjQsIDIyLCAKLSAgICAyMzMsIDQ2LCA5MywgOTksIDEyMCwgMjE5LCAxNTUsIDIyLCA0NCwgMjQ2LCAxMTMsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIAotICAgIDQ0LCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgMTIwLCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgMTIwLCAyMTksIDE1NSwgMjIsIAotICAgIDQzLCAyNDYsIDExMywgOTMsIDk5LCAxMjAsIDUyLCAyMiwgNDMsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjAsIDIyLCAKLSAgICAyMzMsIDQ2LCA5MywgOTksIDY3LCAyMTksIDE1NSwgMjIsIDQ0LCAyNDYsIDExMywgOTMsIDk5LCA2NywgNTIsIDIyLCA0NCwgCi0gICAgMjE5LCAxNTQsIDkzLCA5OSwgNTIsIDY3LCAyMiwgMjIyLCAyNTEsIDkzLCA5OSwgNjcsIDIxOSwgMTU1LCAyMiwgNDMsIAotICAgIDI0NiwgMTEzLCA5MywgOTksIDY3LCA1MiwgMjIsIDQzLCAyMTksIDE1NCwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyMzMsIDQ2LCAKLSAgICA5MywgOTksIDEyNCwgMjE5LCAxNTUsIDIyLCAyMDMsIDI0NiwgMTEzLCA5MywgOTksIDEyNCwgNTIsIDIyLCAyMDMsIDIxOSwgCi0gICAgMTU0LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDEyMCwgMjE5LCAxNTUsIDIyLCAyMDMsIDI0NiwgCi0gICAgMTEzLCA5MywgOTksIDEyMCwgNTIsIDIyLCAyMDMsIDIxOSwgMTU0LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyNDEsIDQ0LCAKLSAgICA5MywgOTksIDY3LCAyMTksIDE1NSwgMjIsIDIwMywgMjQ2LCAxMTMsIDkzLCA5OSwgNjcsIDUyLCAyMiwgMjAzLCAyMTksIAotICAgIDE1NCwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyNDEsIDQ0LCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTI0LCAyMiwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTkyLCAyNTQsIDI2LCAxMjQsIDIyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjU0LCAyNiwgMTIwLCAKLSAgICAyMiwgMjMzLCA0NiwgOTMsIDk5LCAxOTIsIDI1NCwgMjYsIDEyMCwgMjIsIDIyMiwgMjUxLCA5MywgOTksIDE5MiwgMjQ3LCAKLSAgICAyNTUsIDIxNCwgMTYwLCA0NCwgMjE2LCA0MiwgMjMyLCAxMDgsIDIzMywgNDYsIDkzLCA5OSwgMTkyLCAyNDcsIDI1NSwgCi0gICAgMjE0LCAxNjAsIDQzLCAyMTYsIDQyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDkzLCA5OSwgMTkyLCAyNDcsIDI1NSwgMjQ5LCAKLSAgICAxMzAsIDkzLCA5OSwgMTkyLCAyMzMsIDQ2LCA5MywgOTksIDE5MiwgMjE0LCAxNjMsIDkzLCA5OSwgMTkyLCAyMjIsIDI1MSwgCi0gICAgOTMsIDk5LCAxOTIsIDI0NiwgMTA2LCA5MywgOTksIDExNCwgMjMzLCA0NiwgOTMsIDk5LCAxMTQsIDIxNCwgMTYzLCA5MywgCi0gICAgOTksIDExNCwgMjIyLCAyNTEsIDkzLCA5OSwgMTE0LCAyNDYsIDEwNiwgOTMsIDk5LCAxOTIsIDQzLCAyMiwgMTE0LCAyMjIsIAotICAgIDI1MSwgOTMsIDk5LCAxOTIsIDEyMCwgMjIsIDExNCwgMjQ2LCAxMDYsIDkzLCA5OSwgMTE0LCA0MywgMjIsIDE5MiwgMjIyLCAKLSAgICAyNTEsIDkzLCA5OSwgMTE0LCAxMjAsIDIyLCAxOTIsIDI0NiwgMTA2LCAyMTQsIDE2MCwgMTYzLCAyNTEsIDIxMywgMjMyLCAKLSAgICAxMDgsIDEyMywgMjQ1LCAxODksIDI1MSwgMjEzLCAyMzIsIDEwOCwgMTIzLCAyMjQsIDIyLCAyNTEsIDIxMywgMjMyLCAxMDgsIAotICAgIDEzNCwgMjQ1LCAxODcsIDI1MSwgMjEzLCAyMzIsIDEwOCwgMTYzLCAyNTEsIDIxMywgMjMyLCAxMDgsIDI0NCwgODEsIDI0NSwgCi0gICAgMTg3LCAyNTEsIDIxMywgMjMyLCAxMDgsIDEzNCwgMjI0LCAyMCwgMjUxLCAyMTMsIDIzMiwgMTA4LCAyMjAsIDEyMiwgMjQ1LCAKLSAgICAxODcsIDI1MSwgMjEzLCAyNDMsIDIyOSwgMjUxLCAyMTMsIDQzLCAyMjAsIDEyMiwgMjQ1LCAxODcsIDI1MSwgMjEzLCA0MywgCi0gICAgMTM0LCAyMjQsIDIwLCAyNTEsIDIxMywgNDMsIDI0NCwgODEsIDI0NSwgMTg3LCAyNTEsIDIxMywgNDMsIDE2MywgMjUxLCAKLSAgICAyMTMsIDQzLCAxMzQsIDI0NSwgMTg3LCAyNTEsIDIxMywgNDMsIDEyMywgMjI0LCAyMiwgMjUxLCAyMTMsIDQzLCAxMjMsIAotICAgIDI0NSwgMTg5LCAyNTEsIDIxMywgNDQsIDE2MywgMjUxLCAyMTMsIDE5MiwgMjIwLCA5MiwgMjMxLCA4MiwgMjIwLCA5MiwgCi0gICAgMjQ4LCAxNjIsIDIyMCwgOTIsIDIxNCwgMTYwLCAxMjMsIDI0NSwgMTg5LCAyNTEsIDIxMywgNDQsIDEyMywgMjQ1LCAxODksIAotICAgIDI1MSwgMjEzLCAyMjQsIDI2LCAyMzIsIDEwOCwgMjMzLCA0NiwgMjI0LCAyNiwgMjMyLCAxMDgsIDIyMiwgMjUxLCAyMjQsIAotICAgIDI2LCAyMTQsIDE2MCwgMjMzLCA0NiwgMjI0LCAyNiwgMjE0LCAxNjAsIDQzLCAyMiwgMjMyLCAxMDgsIDQzLCAyMiwgMjMyLCAKLSAgICAxMDgsIDIyMiwgMjUxLCAyMjQsIDI2LCAyMTQsIDE2MCwgNDMsIDIyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDIyNCwgMjYsIAotICAgIDIxNCwgMTYwLCA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTA4LCAyMzMsIDQ2LCAyMjQsIDI2LCAyMTQsIDE2MCwgCi0gICAgNDMsIDIyLCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDEwOCwgMjIyLCAyNTEsIDIyNCwgMjYsIDIxNCwgMTYwLCAyMjIsIAotICAgIDI1MSwgMjI0LCAyNiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMDgsIDIzMywgNDYsIDIyNCwgMjYsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjIsIDIzMiwgMTA4LCA0MywgMjIsIDIzMiwgMTA4LCAyMjIsIDI1MSwgODUsIDIxOCwgMjM0LCA3MSwgMjE4LCAyMzQsIDcxLCAKLSAgICA0MiwgMiwgMjIyLCAxODMsIDI0OSwgMTU5LCA3MSwgNDIsIDI0OSwgMTg3LCA4NSwgNCwgMjE4LCAyMzQsIDQyLCAyLCAyMDMsIAotICAgIDI0NCwgMTA1LCA0MiwgMiwgNjcsIDI0NCwgMTA1LCA0MiwgMiwgMjI2LCAxNDQsIDI0OSwgMTI2LCAyNDQsIDEwNSwgNDIsIAotICAgIDIsIDIxNCwgMTYwLCA0MywgMjE2LCA0MiwgMjMyLCAxMDgsIDQ0LCAyNDQsIDEwNSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgCi0gICAgMjE2LCA0MiwgMjMyLCAxMDgsIDQzLCAyNDQsIDEwNSwgNDIsIDIsIDI0NywgMjU1LCAyNDksIDEyNiwgMjQ0LCAxMDUsIDg1LCAKLSAgICA0LCAyMTgsIDIzNCwgNzEsIDQsIDIxOCwgMjM0LCA4NSwgMjIzLCAxMTYsIDcxLCAyMjMsIDExNiwgODUsIDY3LCAyMjMsIAotICAgIDExNiwgNzEsIDY3LCAyMjMsIDExNiwgODUsIDIyNiwgNiwgNzEsIDIyNiwgNiwgODUsIDIxNCwgMTYyLCAyMTUsIDIyNSwgCi0gICAgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNSwgODUsIDIxNCwgMTYyLCA0LCAyMTUsIDIyNSwgNzEsIDIxNCwgMTYyLCA0LCAyMTUsIAotICAgIDIyNSwgODUsIDIyMiwgMjQ3LCAyMTUsIDIyNSwgNzEsIDIyMiwgMjQ3LCAyMTUsIDIyNSwgODUsIDIyMiwgMjQ3LCA0LCAKLSAgICAyMTUsIDIyNSwgNzEsIDIyMiwgMjQ3LCA0LCAyMTUsIDIyNSwgODUsIDIyMiwgMjQ3LCAyMjUsIDgsIDcxLCAyMjIsIDI0NywgCi0gICAgMjI1LCA4LCA4NSwgMjQ2LCAxMDUsIDIxNSwgMjI1LCA3MSwgMjQ2LCAxMDUsIDIxNSwgMjI1LCA4NSwgMjQ2LCAxMDUsIDQsIAotICAgIDIxNSwgMjI1LCA3MSwgMjQ2LCAxMDUsIDQsIDIxNSwgMjI1LCA4NSwgMjMzLCA0MiwgMjE1LCAyMjUsIDcxLCAyMzMsIDQyLCAKLSAgICAyMTUsIDIyNSwgODUsIDIzMywgNDIsIDQsIDIxNSwgMjI1LCA3MSwgMjMzLCA0MiwgNCwgMjE1LCAyMjUsIDg1LCAyMzMsIAotICAgIDQyLCAyMjUsIDgsIDcxLCAyMzMsIDQyLCAyMjUsIDgsIDg1LCAyNDcsIDI0OCwgNzEsIDI0NywgMjQ4LCA3MSwgMjQ3LCAKLSAgICAyNDksIDI0OSwgMTg3LCA4NSwgNCwgMjQ3LCAyNDgsIDI0NCwgODksIDIzMiwgMTA0LCA3MSwgMjUwLCAzNSwgMjQ2LCAxMTgsIAotICAgIDI1MCwgMzUsIDI1MCwgMzYsIDIsIDY3LCAyNDQsIDEwNSwgMjUxLCAxMTEsIDg1LCAyNTAsIDM1LCAyNTAsIDM2LCAyLCA0MywgCi0gICAgMTYzLCAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDI1MCwgMzYsIDIsIDIzMiwgMTA4LCAxNjMsIAotICAgIDI1MSwgMjIxLCAyNTAsIDM2LCAyLCAyMTQsIDE2MCwgMTYzLCAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDQ0LCAKLSAgICAyMjQsIDI2LCAyNTEsIDIyMSwgMjUwLCAzNiwgMiwgMjU0LCAxNTUsIDI1MSwgODgsIDIxNCwgMTYwLCA0MywgMjI0LCAyNiwgCi0gICAgMjUxLCAyMjEsIDQzLCAxNjMsIDg1LCAyNTAsIDM1LCA0NCwgMTYzLCA4NSwgMjUwLCAzNSwgMjM1LCAxOTQsIDI1MSwgMTEzLCAKLSAgICAyMzUsIDE5NCwgNzEsIDI1MCwgMzUsIDIxNCwgMTYwLCAxNjMsIDIzNSwgMTk0LCA3MSwgMjUwLCAzNSwgMjMyLCAxMDgsIAotICAgIDE2MywgMjM1LCAxOTQsIDcxLCAyNTAsIDM1LCAyMTQsIDE2MCwgNDMsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgMjUsIDIxNCwgCi0gICAgMTYwLCA0NCwgMjI0LCAyNiwgMjUwLCAzMywgMjU0LCAyNSwgMjMyLCAxMDgsIDQ0LCAyMjQsIDI2LCAyNTAsIDMzLCAyNTQsIAotICAgIDI1LCAyMzIsIDEwOCwgNDMsIDIyNCwgMjYsIDI1MCwgMzMsIDI1NCwgMjUsIDIxNCwgMTYwLCAxNjMsIDI1MCwgMzUsIDIzMiwgCi0gICAgMTA4LCAxNjMsIDI1MCwgMzUsIDg1LCAyMzIsIDEwOCwgNDQsIDIxNSwgMjI1LCA4NSwgMjMyLCAxMDgsIDQzLCAyMTUsIAotICAgIDIyNSwgODUsIDIxNCwgMTYwLCA0MywgMjE1LCAyMjUsIDg1LCAyMTQsIDE2MCwgNDQsIDIxNSwgMjI1LCA3MSwgMjUxLCAKLSAgICAxMTMsIDQyLCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDQ0LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjE0LCAxNjAsIAotICAgIDQzLCAyNDcsIDI1NSwgMTYzLCAyNTEsIDIyMSwgNDIsIDIsIDIzMiwgMTA4LCA0NCwgMjQ3LCAyNTUsIDE2MywgMjUxLCAKLSAgICAyMjEsIDcxLCA0MiwgMiwgNjcsIDI1MSwgMjMyLCAyMzIsIDIxMywgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNiwgMiwgMjQ3LCAKLSAgICAxMjAsIDIxNCwgMTYyLCAyMTUsIDIyNiwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDIxNCwgMTYyLCAyMTUsIDIyNiwgMiwgNDQsIAotICAgIDE2MywgMjUxLCAyMjEsIDIzMywgODUsIDI1MCwgMzUsIDcxLCA0MiwgMiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI1LCA3MSwgCi0gICAgNDIsIDIsIDIzMiwgMTA4LCA0MywgMjI0LCAyNSwgNzEsIDQyLCAyLCAyMzIsIDEwOCwgNDQsIDIyNCwgMjUsIDcxLCA0MiwgCi0gICAgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI1LCA3MSwgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI1LCA3MSwgMjUwLCAKLSAgICAzNiwgMiwgMjMyLCAxMDgsIDQzLCAyMjQsIDI1LCA3MSwgMjUwLCAzNiwgMiwgMjMyLCAxMDgsIDQ0LCAyMjQsIDI1LCA3MSwgCi0gICAgMjUwLCAzNiwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI1LCAyMTQsIDE2MCwgNDMsIDIxNSwgMjI1LCAyMTQsIDE2MCwgNDQsIAotICAgIDIxNSwgMjI1LCAyMzIsIDEwOCwgNDMsIDIxNSwgMjI1LCA3MSwgMjMxLCA4MiwgMjE4LCAyMzQsIDg1LCAyMzEsIDgyLCAKLSAgICAyMTgsIDIzNCwgNzEsIDIzMSwgODIsIDQsIDIxOCwgMjM0LCA4NSwgMjMxLCA4MiwgNCwgMjE4LCAyMzQsIDIzMiwgMTA4LCAKLSAgICA0NCwgMjE1LCAyMjUsIDg1LCAyMTgsIDM4LCAyLCAyMjMsIDEzMiwgMjQ5LCAyNDcsIDIxNCwgMTk0LCAyMTksIDYwLCAyNDksIAotICAgIDIyMiwgODUsIDIxOCwgMTU2LCA3MSwgMjE4LCAxNTYsIDIzMiwgMjI4LCAyMTYsIDEzMiwgMjE4LCAzNywgMjUzLCAyMzQsIAotICAgIDIyOCwgNzEsIDI0OCwgMzgsIDIyOCwgNzEsIDI0OSwgMTk1LCAyMjYsIDE2MywgODUsIDIxNywgMCwgNzEsIDIxNywgMCwgCi0gICAgMjUyLCAxNTYsIDI1MSwgMTYzLCAyNTIsIDE1NiwgOTMsIDIsIDI1MCwgMTI5LCAyNTIsIDE1NiwgOTMsIDIsIDIxMSwgMTc4LCAKLSAgICAyMjEsIDI1NCwgMjE0LCAxOTUsIDIsIDIyMywgMTYwLCAyNDYsIDg0LCAyNDAsIDI0MywgMjUyLCAyMiwgNzEsIDIyMCwgMiwgCi0gICAgMjI1LCAxMDEsIDg1LCAyMjAsIDIsIDIyNSwgMTAxLCAyMjAsIDg3LCAyMjMsIDQ5LCAyMjIsIDE4NywgMjQ0LCA1NSwgMjQxLCAKLSAgICAyMjgsIDI1MSwgMTEzLCA4NSwgNDMsIDIyNSwgNywgMjM1LCAyNDIsIDg1LCA0NCwgMjI1LCA3LCAyMzUsIDI0MiwgNzEsIAotICAgIDQzLCAyMjUsIDcsIDIzNSwgMjQyLCA3MSwgMTIwLCAyMjUsIDcsIDIzNSwgMjQyLCA3MSwgNDQsIDIyNSwgNywgMjM1LCAKLSAgICAyNDIsIDcxLCAxMjQsIDIyNSwgNywgMjM1LCAyNDIsIDIxOSwgMTAxLCAyMiwgMjQ5LCAxMjksIDI1MCwgMjE5LCA1MCwgCi0gICAgMjIzLCAxNzIsIDUwLCAyNTEsIDIzOSwgNTAsIDI1MSwgMjUsIDI1NCwgMTAyLCAyMjYsIDE0NSwgMjQ5LCAxMzAsIDI1MCwgCi0gICAgMTExLCAyMjMsIDM3LCAyNDksIDEzMSwgNjQsIDIzMiwgMTE4LCAyNDksIDEzMSwgNjQsIDIzNSwgMTE2LCAyMTgsIDE1NywgCi0gICAgMjIsIDI0OSwgMTM2LCAyNDQsIDE2OCwgODcsIDI1NCwgMjQ4LCAyMjAsIDg5LCAyNDIsIDIyLCAyMiwgMjE5LCAxODksIAotICAgIDIyNSwgMjIwLCA4NywgMjEwLCAyNTQsIDIxMSwgNjksIDIxNSwgMjE1LCAzMSwgMjQxLCAyMjMsIDIxNSwgMjE1LCAzMSwgCi0gICAgMjMzLCAxMDcsIDIxNSwgMjE1LCAzMSwgMjQ0LCA5NiwgMjE1LCAyMTUsIDMxLCAyMTYsIDEzMywgMjE1LCAyMTUsIDMxLCAKLSAgICAyMTEsIDIzOSwgMjE1LCAyMTUsIDMxLCAyMTIsIDQwLCAyMTUsIDIxNSwgMzEsIDIzMCwgMTE1LCAyMTUsIDIxNSwgMzEsIAotICAgIDI0NSwgMjIzLCAyMTIsIDEsIDY0LCAyNDgsIDE4LCA3MSwgMjQzLCAyMzksIDI0NCwgMTkwLCA3MSwgMjE5LCA3NCwgMjQ0LCAKLSAgICAxOTAsIDg1LCAyMTksIDc0LCAyNDQsIDE5MCwgNzEsIDIxOCwgMzgsIDIsIDIyMywgMTMyLCAyNDQsIDkyLCAyMjQsIDIyLCAKLSAgICAyMzAsIDEyOCwgMjMzLCA4MCwgMjI0LCAyMiwgMjMwLCAxMjgsIDIzMSwgNTQsIDI0NCwgMTM4LCA1MCwgMjQ1LCAyMjMsIAotICAgIDIzMSwgMTkwLCA1MCwgMjM1LCAzOCwgMjIxLCAyMjAsIDIxNCwgMTQ1LCAyMjksIDkzLCAyMjUsIDIwLCAyNTQsIDEyLCAKLSAgICAyMTcsIDQwLCAyNDMsIDUyLCAyNTEsIDMsIDIzMywgMTksIDIxMywgMTUwLCAyMzIsIDIzOCwgMjIxLCAxOTEsIDIyMiwgMTksIAotICAgIDI1MCwgMjQ4LCAyNTQsIDQyLCAyMjUsIDUyLCA3MSwgMjUwLCAxMTcsIDIzNCwgNzgsIDcxLCAyNTAsIDExNywgMjI0LCAxNCwgCi0gICAgNzEsIDI1MCwgMTE3LCAyMjIsIDE5NSwgNzEsIDI1MCwgMTE3LCAyNTEsIDIzMSwgNzEsIDI1MCwgMTE3LCAyMzQsIDMwLCAKLSAgICA3MSwgMjUwLCAxMTcsIDIyNSwgMjMxLCA4NSwgMjUwLCAxMTcsIDIzNCwgNzgsIDg1LCAyNTAsIDExNywgMjI0LCAxNCwgODUsIAotICAgIDI1MCwgMTE3LCAyMjIsIDE5NSwgODUsIDI1MCwgMTE3LCAyNTEsIDIzMSwgODUsIDI1MCwgMTE3LCAyMzQsIDMwLCA4NSwgCi0gICAgMjUwLCAxMTcsIDIyNSwgMjMxLCA4NSwgMjE5LCAxNiwgMjE4LCA1MCwgNzEsIDI0MSwgMjI4LCAyMTgsIDUwLCA3MSwgMjQ3LCAKLSAgICAyNDksIDIxOCwgNTAsIDg1LCAyNDksIDI0NSwgMjE4LCA1MCwgNzEsIDIxOSwgMTYsIDIxOCwgNTAsIDg1LCAyNDEsIDIyOCwgCi0gICAgMjE4LCA1MCwgODUsIDI0NywgMjQ5LCAyMTgsIDUwLCA3MSwgMjQ5LCAyNDUsIDIxOCwgNTAsIDI0MCwgMjQzLCAyMTgsIAotICAgIDIzOCwgMjI0LCAyMiwgMjI4LCA0NywgMjQ1LCAxODksIDIyOCwgNDcsIDI1MiwgNzMsIDI0NSwgMTg5LCAyMjgsIDQyLCAKLSAgICAyNTIsIDczLCAyMTksIDExOCwgMjI4LCA0MiwgMjMwLCA1NywgMjQ0LCA2NiwgNTAsIDIzMCwgNTcsIDIyOSwgMTg4LCA1MCwgCi0gICAgMjMwLCA1NywgMjIwLCA3NiwgNTAsIDIxMiwgOSwgMTg4LCAyNDksIDEzMCwgMjQ1LCAyMjAsIDE4OCwgMjQ5LCAxMzAsIAotICAgIDIxNCwgMTcxLCAyMjMsIDExMiwgODcsIDIyMywgMTEyLCAxNiwgMzEsIDIxNSwgNDgsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgCi0gICAgMzEsIDIxNSwgNDcsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgMzEsIDIxNSwgNDYsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgCi0gICAgMzEsIDIxNSwgNDUsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgMzEsIDIxNSwgNDQsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgCi0gICAgMzEsIDIxNSwgNDMsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgMzEsIDIxNSwgNDIsIDIyNSwgMzQsIDIyMywgMTEyLCAxNiwgCi0gICAgMzEsIDI0MywgNTAsIDIzMSwgMTM4LCA4NSwgMjE0LCAxNzEsIDIyMywgMTEyLCA4NywgMjIzLCAxMTMsIDIyNiwgMjAsIDg3LCAKLSAgICAyMjUsIDI1MiwgMjI2LCAyMCwgODcsIDIyNSwgMTc0LCAyMjYsIDIwLCA1MCwgMjExLCAyNTUsIDg3LCAyNDcsIDI0MSwgCi0gICAgMjQ0LCAxODksIDI0NywgMjQxLCAyNDQsIDE4OCwgMjQ3LCAyNDEsIDI0NCwgMTg3LCAyNDcsIDI0MSwgMjQ0LCAxODYsIAotICAgIDI0NywgMjQxLCAyNDQsIDE4NSwgMjQ3LCAyNDEsIDI0NCwgMTg0LCA3MSwgMjUwLCAzNiwgMiwgNTksIDIyMiwgMjUxLCA3MSwgCi0gICAgMjUwLCAzNiwgMiwgMTEzLCAyNDcsIDExOCwgODUsIDI1MCwgMzYsIDIsIDcxLCA1OSwgMjIyLCAyNTEsIDg1LCAyNTAsIDM2LCAKLSAgICAyLCAxMTMsIDcxLCAyNDcsIDExOCwgMjMwLCAxNDIsIDMxLCAyMTEsIDY5LCAyMzAsIDE0MiwgMzEsIDIxMCwgMjUzLCAyNDcsIAotICAgIDIyNCwgMzEsIDI0MiwgMTMxLCAyMTEsIDY5LCAyNDcsIDIyNCwgMzEsIDIzMywgMTMsIDIxMCwgMjUzLCAyNDcsIDIyNCwgCi0gICAgMzEsIDIzMywgMTMsIDIxMSwgNjksIDI0NywgMjI0LCAzMSwgMjQyLCAxMzEsIDIxMCwgMjUzLCA3MSwgMjQ0LCA3MywgODUsIAotICAgIDI0NCwgNzMsIDI0MiwgMjIsIDIyLCAyMjUsIDEwNCwgMjU0LCAxMjAsIDI0OSwgMTI4LCAyMTcsIDIzNSwgMjE4LCAxNjQsIAotICAgIDY0LCAyNTQsIDIyNiwgMjIxLCAyMDYsIDI1NCwgMTY5LCAyNDQsIDUxLCAyNDMsIDYwLCAyMTgsIDE2NCwgNjQsIDI0MSwgCi0gICAgMjAyLCAyNTMsIDE5OSwgODcsIDI0NCwgNjIsIDIyNiwgMTI2LCA3MSwgMjE4LCAxNTYsIDEzNCwgMjMyLCAyMDgsIDI0OSwgCi0gICAgMTc1LCAyMjIsIDI1MSwgMTM0LCAyMzIsIDIwOCwgMjQ5LCAxNzUsIDIzMywgNDYsIDIxMiwgNTAsIDUwLCAxMjUsIDIxMywgCi0gICAgMTMwLCA1MCwgMjQ2LCAxMTAsIDI0NCwgMTM4LCA1MCwgMjQ2LCAxMTAsIDIzMSwgMTkwLCA1MCwgMjM1LCAyMDMsIDI0NCwgCi0gICAgMTM4LCAyMiwgMjMxLCAxOTAsIDUwLCAyMzEsIDE5MCwgMjIsIDI0NCwgMTM4LCA1MCwgMjMxLCAxOTAsIDIsIDIxOCwgMTAzLCAKLSAgICA1MCwgMjMxLCAxOTAsIDIsIDIxOCwgMTAzLCAyMiwgMjMxLCAxOTAsIDIyLCAyNDQsIDEzOCwgNTAsIDY3LCAyMzEsIDE5MCwgCi0gICAgMiwgMjE4LCAxMDMsIDUwLCAyMDMsIDIzMSwgMTkwLCAyLCAyMTgsIDEwMywgNTAsIDIzMSwgODIsIDcxLCAyNTAsIDM1LCAKLSAgICAyMzEsIDgyLCA4NSwgMjUwLCAzNSwgMjMxLCA4MiwgNCwgNzEsIDI1MCwgMzUsIDIzMSwgMTUzLCA4NywgMjQ3LCAxNjcsIAotICAgIDg3LCAyMTQsIDE2OSwgMjI1LCAyNTEsIDg3LCAyNDksIDIzMSwgMjQzLCAyMjQsIDIxNCwgMTQxLCAyMjksIDg4LCAyNTAsIAotICAgIDE2MSwgMjI2LCA2MSwgMjM1LCA0NCwgMjEzLCAxODUsIDI1MCwgOTMsIDg1LCAyMzAsIDEyOSwgMjMyLCAyMjUsIDIyMCwgCi0gICAgMTEyLCAyMjAsIDE0NywgMjI0LCA1LCAyMjAsIDEzMCwgMjE5LCA1NSwgMjUyLCAxNTksIDI1MiwgMTI2LCA5MiwgMjM0LCAKLSAgICAxMzgsIDcxLCAyNDYsIDkzLCAyMzEsIDE4NSwgNzEsIDI0NiwgOTMsIDIzNCwgNzgsIDg1LCAyNDYsIDkzLCAyMzEsIDE4NSwgCi0gICAgODUsIDI0NiwgOTMsIDIzNCwgNzgsIDIxOSwgNjEsIDIxMSwgMjMwLCAyMTksIDY0LCAyMTgsIDM4LCAyNTIsIDUxLCAyNDksIAotICAgIDI0NywgMjIzLCAxNTksIDg1LCAyMTksIDYwLCAyMTYsIDEzNCwgMjQ5LCAyNDgsIDIyLCAyMjMsIDE1OSwgMjE1LCA5NCwgCi0gICAgNzEsIDIyMCwgMiwgMjI1LCAxMDEsIDIxNSwgOTQsIDg1LCAyMjAsIDIsIDIyNSwgMTAxLCA3MSwgMjQ3LCAyNDksIDIzNiwgCi0gICAgMCwgMjE4LCAyMzQsIDI0OSwgMTI1LCAyMzMsIDkxLCAyNDcsIDE5MywgMjUwLCAyNDQsIDIyNiwgMTY2LCAyMjUsIDEwNCwgCi0gICAgMjUwLCAyNDUsIDIxOSwgODgsIDI0MSwgMjEyLCAyLCA3MSwgMjQ5LCAxMzAsIDM3LCAyNDksIDEyNSwgMjMzLCA5MSwgMjUwLCAKLSAgICAxNTMsIDIyOCwgNzUsIDI0NSwgMTI0LCAyNTQsIDE0MSwgMjI2LCAxOTEsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MSwgODUsIAotICAgIDIxNSwgNTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MSwgNzEsIDIxNSwgNTUsIDQzLCAyMTIsIDI2LCAyMTUsIDI1MSwgODUsIAotICAgIDQzLCAyMzMsIDkyLCAyMzEsIDUzLCA3MSwgNDMsIDIzMywgOTIsIDIzMSwgNTMsIDI0NiwgODksIDIxOSwgODIsIDUwLCAKLSAgICAxMTQsIDcxLCAyNDYsIDEwNSwgMjE1LCAyMjUsIDQzLCAyNTAsIDAsIDI0NSwgMTI0LCA5MiwgMjIxLCAyNTQsIDI0NCwgCi0gICAgMTc1LCAyNDcsIDI1NSwgMjM2LCAwLCA3MSwgMjUwLCAzNiwgMjM2LCAwLCA4NSwgMjE4LCAyMzQsIDg1LCAyMTUsIDE5MiwgCi0gICAgMjIzLCA2MCwgNDMsIDI0NSwgMTIzLCAyMjMsIDYwLCA0MywgMjQ1LCAxMjIsIDI1MywgMjExLCAxNiwgMzEsIDIxNCwgMTQ1LCAKLSAgICAxMTQsIDI1MCwgMzYsIDIsIDIxOCwgMTAzLCAyMiwgMTEzLCAxNzAsIDQ4LCAyMjUsIDE4OSwgMjIyLCAyNDgsIDIzNSwgCi0gICAgMjA1LCAyMjUsIDE4OSwgMjMzLCA0MywgMjM1LCAyMDUsIDIyNSwgMTg5LCAyMzUsIDE5MywgMjI1LCAxODksIDg1LCAyNDksIAotICAgIDEzMSwgMjI2LCAxOTcsIDIyMCwgMjksIDIyMCwgMTcsIDIxOSwgMjI5LCAyNTAsIDYxLCAyNTAsIDIyNiwgMjQxLCAxNTcsIAotICAgIDIxOSwgMTI2LCAyNDMsIDYxLCAyMTEsIDIzMCwgMjQwLCAyMjAsIDI0MywgNjEsIDIsIDI0MiwgMTIsIDIzMSwgMTczLCAxNiwgCi0gICAgMzEsIDIzMiwgMjI5LCAyMzAsIDExNSwgMjE0LCAxOTUsIDIyNiwgMTk3LCAyNDIsIDEyMiwgMjQ0LCAxMiwgMjQ0LCA3NCwgCi0gICAgMjM2LCAwLCAyNDEsIDU5LCAyNDQsIDEyOSwgMjIyLCAxNCwgNDIsIDI0NCwgMTEsIDI0OSwgMTU5LCAyMTksIDEwNCwgMjQwLCAKLSAgICAxMTIsIDIxOSwgMTA3LCAyMjUsIDE2OCwgMiwgMjUyLCAxNTksIDIxNiwgMjQyLCAyMzUsIDEzMSwgMjUyLCAxNDYsIDg3LCAKLSAgICAyNDEsIDIzMSwgMjQyLCAxMzMsIDg3LCAyNDMsIDIzMiwgMjI0LCAxNDIsIDI0OSwgMTAzLCAyMjYsIDE5NywgODUsIDIxOCwgCi0gICAgMjM0LCA3MSwgMjQ0LCA3NCwgMiwgMjAzLCAyMzAsIDIyNCwgODUsIDIxOCwgMTA0LCAyMTQsIDE2MCwgMjUxLCAyMTcsIAotICAgIDIyMSwgMTkzLCA4NSwgMjIxLCAxOTMsIDIzMiwgMTA4LCAyNTEsIDIxNywgMjIxLCAxOTMsIDcxLCAyMjEsIDE5MywgNzEsIAotICAgIDExNCwgMjUwLCAxMzAsIDc4LCAyMTcsIDEsIDIzMiwgMTU0LCA1MCwgMjE3LCA1MywgMjQ2LCA4OCwgMjU0LCAxOTEsIDI0NSwgCi0gICAgMTE5LCAyMjMsIDE1NywgMjQ0LCA4NSwgMjIzLCAxNTcsIDI0MiwgMTUsIDIxMywgMTc0LCAyNDIsIDE1LCAyMTEsIDE5OCwgCi0gICAgMjQyLCAxNSwgMjMyLCAxMDgsIDQ0LCAyMjUsIDE5OCwgMjI1LCAxOTgsIDIxNCwgMTYwLCA0NCwgMjI1LCAxOTgsIDcxLCAKLSAgICAyMjgsIDIzMCwgODUsIDIyOCwgMjMwLCAyNTAsIDEzMCwgNzgsIDExNCwgMjUwLCAxMzAsIDc4LCAyMzAsIDg0LCAyMTEsIAotICAgIDE3OCwgMTE0LCAyMzAsIDg0LCAyMTEsIDE3OCwgMjUyLCAxNTYsIDIxMSwgMTc4LCAxMTQsIDI1MiwgMTU2LCAyMTEsIDE3OCwgCi0gICAgMjI2LCAxMjYsIDI2LCAyNDksIDEzMCwgMTE0LCAyNiwgMjQ5LCAxMzAsIDIwNCwgMjUwLCAxNzUsIDI0OSwgMTMwLCAxMTQsIAotICAgIDIwNCwgMjUwLCAxNzUsIDI0OSwgMTMwLCA3LCAyNDksIDEzMCwgMjIwLCA5MSwgNzEsIDcsIDI0OSwgMTMwLCAyMjYsIDEyNiwgCi0gICAgNywgMjQ5LCAxMzAsIDIzMSwgMTg3LCAyNDksIDEzMCwgMjE4LCAxNTcsIDY0LCAyNDgsIDE0OSwgMjQ0LCAxMSwgMjE3LCAKLSAgICAxNSwgMjUzLCAyMTYsIDI0NCwgMTEsIDI1MiwgMTU3LCAyNTMsIDIxNiwgMTE0LCAyNDQsIDExLCAyNTIsIDE1NywgMjUzLCAKLSAgICAyMTYsIDI0NCwgMTEsIDI0OSwgMjQzLCAyNTMsIDIxNiwgODUsIDI0NCwgMTEsIDIyNSwgOSwgMjE4LCAxNTYsIDcxLCAyNDQsIAotICAgIDExLCAyMjUsIDksIDIxOCwgMTU2LCAyMTksIDExLCAyMTgsIDExMSwgMjI2LCAxMjYsIDcxLCAyMTgsIDE1NiwgMzcsIDcxLCAKLSAgICAyMTgsIDE1NiwgMjA0LCAyNTAsIDE3NSwgODUsIDIxOCwgMTU2LCA4NSwgMjUwLCAxNzUsIDcxLCAyMTgsIDE1NiwgMjI2LCAKLSAgICAxMjYsIDg1LCAyMTgsIDE1NiwgMTE0LCAyMjYsIDEyNiwgODUsIDIxOCwgMTU2LCAyMjUsIDYwLCAyMTgsIDE1NiwgMjIwLCAKLSAgICA5MSwgNzEsIDIxOCwgMTU2LCAxMTQsIDI1MywgMjE2LCAyMDQsIDI1MCwgMTc1LCAyNTMsIDIxNiwgMjQ1LCAxOTMsIDIxOCwgCi0gICAgMjQ0LCAyNTMsIDIxNiwgMjQ1LCAxOTMsIDIyNSwgOSwgODUsIDIxOCwgMTU2LCAyNDUsIDE5MywgMjI1LCA5LCAyMjUsIDYwLCAKLSAgICAyMTgsIDE1NiwgMjE5LCAxMjUsIDIyNSwgOSwgODUsIDIxOCwgMTU2LCAyNDUsIDE5MywgMjI1LCA5LCAyMjMsIDExNCwgODUsIAotICAgIDIxOCwgMTU2LCAxMTQsIDI0NSwgMTkzLCAyMjUsIDksIDIyMywgMTE0LCA4NSwgMjE4LCAxNTYsIDIxNSwgNzcsIDIyNSwgOSwgCi0gICAgODUsIDIxOCwgMTU2LCAyMTksIDEyMCwgMjI1LCA5LCAyNTMsIDIxNiwgMjE3LCAxNSwgMjUzLCAyMTYsIDIwNCwgMjUwLCAKLSAgICAxNzUsIDIxNywgMTUsIDI1MywgMjE2LCAxMTQsIDIxNywgMTUsIDI1MywgMjE2LCAyMTksIDEyNSwgMjI1LCAxNTcsIDg1LCAKLSAgICAyMiwgNzEsIDI0NCwgNTQsIDg1LCAyNDQsIDU0LCA3MSwgMjQ0LCA1NCwgMjQ1LCAxOTMsIDIyNSwgMTU3LCAyMjYsIDEyNiwgCi0gICAgODUsIDI0NCwgNTQsIDM3LCAyMDQsIDI1MCwgMTc1LCAyNDUsIDE5MywgMjI1LCA5LCAyMTgsIDE1NiwgMTE0LCAyMTcsIDE1LCAKLSAgICAyMjUsIDYwLCAyNTMsIDIxNiwgMjE5LCA2MiwgMjE2LCAxMDUsIDIxNSwgMjE4LCAyMTksIDYyLCAxMTQsIDI1MCwgMTE0LCAKLSAgICAyMTksIDYyLCAyMTksIDEzLCAxMTQsIDIxOSwgMTMsIDI1MiwgMTU3LCAyNTMsIDIxNiwgMjQ1LCAxOTMsIDIxNywgMTUsIAotICAgIDIyNCwgMTcxLCAyNTMsIDIxNiwgMTE0LCAyNDUsIDE5MywgMjE3LCAxNSwgMjI0LCAxNzEsIDI1MywgMjE2LCAyNDksIDEzMSwgCi0gICAgNzgsIDIyMCwgOTEsIDcxLCAyNTAsIDM1LCAxNTIsIDkyLCAyNDksIDEzMSwgNzgsIDIzMiwgMTA4LCA0NCwgMjQ2LCA4NiwgCi0gICAgNzEsIDIxOCwgMjM0LCAyMTQsIDE2MCwgNDQsIDI0NiwgODYsIDcxLCAyMTgsIDIzNCwgMjMyLCAxMDgsIDQ0LCAyMjAsIDkxLCAKLSAgICA3MSwgMjE4LCAyMzQsIDIxNCwgMTYwLCA0NCwgMjIwLCA5MSwgNzEsIDIxOCwgMjM0LCA4NSwgMjI0LCAxMywgMTY0LCAyMjYsIAotICAgIDE0NywgNzEsIDIyNCwgMTMsIDE2NCwgMjI2LCAxNDcsIDcxLCAyNDUsIDMxLCAxNjQsIDIyNiwgMTQ3LCA4NSwgMjQ3LCAKLSAgICAyNDksIDIzMCwgMTgyLCA3MSwgMjExLCAxNzgsIDExNCwgMjQ1LCAzMSwgMTY0LCA4NywgMTkyLCA2NywgMTMwLCAyMzEsIAotICAgIDgyLCA2NywgMTMwLCAxMTQsIDY3LCAxMzAsIDExNCwgMjE5LCAxNTUsIDIxNSwgOTQsIDI0OSwgMjIwLCAyMjMsIDI1NCwgCi0gICAgMTY0LCAyMjYsIDE0NywgMTE0LCAyMTksIDE1NSwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDUyLCAKLSAgICAyMTUsIDk0LCAyNDksIDIyMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDExNCwgNTIsIDI0OSwgMjIwLCAyMjMsIDI1NCwgCi0gICAgMTY0LCAyMjYsIDE0NywgMTE0LCAxMjEsIDIxOSwgMTU1LCAyNDksIDIyMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIAotICAgIDExNCwgMTIxLCA1MiwgMjQ5LCAyMjAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAyNDksIDkxLCAyMTgsIDE0MCwgMjI2LCAKLSAgICAxNSwgNSwgMjI2LCAxNDcsIDExNCwgMjQ1LCAzMSwgMTY0LCAyMjYsIDE0NywgMTE0LCAyNDEsIDIyOCwgMjQ1LCAzMSwgCi0gICAgMTY0LCAyMjYsIDE0NywgMTE0LCA4NSwgMjQxLCAyMjcsIDIyMiwgMTg3LCAxMTQsIDg1LCAyNDEsIDIyOCwgMjUxLCAxMTMsIAotICAgIDI0NCwgNTUsIDI0MSwgMjI3LCAyMjIsIDE4NywgMjQ0LCA1NSwgMjQxLCAyMjgsIDI1MSwgMTEzLCAyMzEsIDgyLCA0MywgCi0gICAgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgNDQsIDIyNiwgNCwgMjI2LCAxNDcsIDIzMSwgODIsIDI0NCwgNjMsIDQzLCAKLSAgICAyMjYsIDQsIDIyNiwgMTQ3LCAyMzEsIDgyLCAyNDQsIDYzLCA0NCwgMjI2LCA0LCAyMjYsIDE0NywgMjMxLCA4MiwgMjMzLCAKLSAgICA0MiwgMjU0LCAxMTAsIDI1MSwgMTU4LCAyMjYsIDE0NywgMjMxLCA4MiwgMjIyLCAyNDcsIDI1NCwgMTEwLCAyNTEsIDE1OCwgCi0gICAgMjI2LCAxNDcsIDExNCwgMjMzLCA0MiwgMjU0LCAxMTAsIDIyMywgMjU0LCAxNjQsIDIyNiwgMTQ3LCAxMTQsIDIyMiwgMjQ3LCAKLSAgICAyNTQsIDExMCwgMjIzLCAyNTQsIDE2NCwgMjI2LCAxNDcsIDExNCwgMjMzLCA0MiwgMjU0LCAxMTAsIDI1MSwgMTU4LCAyMjYsIAotICAgIDE0NywgMTE0LCAyMjIsIDI0NywgMjU0LCAxMTAsIDI1MSwgMTU4LCAyMjYsIDE0NywgMTkyLCA0MywgMjE2LCA2LCAyMjAsIAotICAgIDUzLCAyNTEsIDE1OCwgMjI2LCAxNDcsIDE5MiwgNDQsIDIxNiwgNiwgMjIwLCA1MywgMjUxLCAxNTgsIDIyNiwgMTQ3LCAKLSAgICAyMzEsIDgyLCA0MywgMjQ5LCA5OSwgMjUxLCAxNTgsIDIyNiwgMTQ3LCAyMzEsIDgyLCA0NCwgMjQ5LCA5OSwgMjUxLCAxNTgsIAotICAgIDIyNiwgMTQ3LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDExMCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAxMDUsIDI0NywgCi0gICAgMjA0LCAxNTIsIDM3LCAyMSwgMTU4LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDE2MSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDIxLCAKLSAgICAxODksIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMTk0LCAyNDcsIDIwNCwgMTUyLCAzNywgMjEsIDE5OCwgMjQ3LCAyMDQsIAotICAgIDE1MiwgMzcsIDIxLCAxOTUsIDI0NywgMjA0LCAxNTIsIDM3LCAyMSwgMjAwLCAyNDcsIDIwNCwgMTUyLCAzNywgNTQsIDIxNiwgCi0gICAgMjQ3LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTEwLCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTA1LCAyNDcsIDIwNCwgMzcsIAotICAgIDM1LCAyMSwgMTU4LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTYxLCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTg5LCAyNDcsIAotICAgIDIwNCwgMzcsIDM1LCAyMSwgMTk0LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMTk4LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgCi0gICAgMTk1LCAyNDcsIDIwNCwgMzcsIDM1LCAyMSwgMjAwLCAyNDcsIDIwNCwgMzcsIDM1LCA1NCwgMjE2LCAyNDcsIDI0NywgMjA0LCAKLSAgICAxNTIsIDM3LCAzNSwgMjEsIDExMCwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTA1LCAyNDcsIDIwNCwgMTUyLCAzNywgCi0gICAgMzUsIDIxLCAxNTgsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE2MSwgMjQ3LCAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgCi0gICAgMTg5LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAxOTQsIDI0NywgMjA0LCAxNTIsIDM3LCAzNSwgMjEsIDE5OCwgMjQ3LCAKLSAgICAyMDQsIDE1MiwgMzcsIDM1LCAyMSwgMTk1LCAyNDcsIDIwNCwgMTUyLCAzNywgMzUsIDIxLCAyMDAsIDI0NywgMjA0LCAxNTIsIAotICAgIDM3LCAzNSwgNTQsIDIxNiwgMjQ3LCAxMTQsIDIxMSwgMjQ2LCA5NywgNzQsIDExNCwgOTYsIDUwLCAxMTQsIDIzMCwgMTgyLCAKLSAgICA1MCwgMTE0LCAyNDcsIDE2OSwgNTAsIDExNCwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAxMTQsIDk3LCA3NCwgMTE0LCAyMjgsIAotICAgIDU2LCAyNDUsIDIyMCwgNzQsIDI0NiwgOTgsIDIyNSwgMTEsIDk3LCA3NCwgMTE0LCAyMjIsIDE4NCwgOTcsIDc0LCAyMTUsIAotICAgIDIyNCwgOTcsIDc0LCAxMTQsIDIxNSwgMjI0LCA5NywgNzQsIDI0OCwgMTU1LCAyMTUsIDIyNCwgOTcsIDc0LCAxMTQsIDI0OCwgCi0gICAgMTU1LCAyMTUsIDIyNCwgOTcsIDc0LCA4NSwgOTcsIDc0LCAyMTYsIDE0NCwgMjE2LCAxMiwgOTcsIDI1MywgMjQ5LCAyMTYsIAotICAgIDE0NCwgMjUxLCAxNzMsIDk3LCAyNTMsIDI0OSwgODUsIDk3LCAyNTMsIDI0OSwgMTE0LCA4NSwgMjQ5LCA5MSwgMjQ2LCAKLSAgICAxMDQsIDIyLCA5NywgNzQsIDExNCwgODUsIDI0OSwgOTEsIDIxNCwgMTUzLCAyMiwgOTcsIDc0LCAyMTgsIDIzMSwgODUsIAotICAgIDk3LCA3NCwgMTE0LCAyNDksIDIwNiwgODUsIDk3LCA3NCwgMjIyLCAyNDYsIDcxLCA5NywgNzQsIDIzMywgNDEsIDcxLCA5NywgCi0gICAgNzQsIDI1MiwgMTgzLCAyMjAsIDkxLCA3MSwgOTcsIDc0LCAyNDMsIDI0MSwgMjIwLCA5MSwgNzEsIDk3LCA3NCwgMTE0LCAKLSAgICAyMzIsIDEwOCwgMjIyLCAyNDUsIDcxLCA5NywgNzQsIDExNCwgMjE0LCAxNjAsIDIyMiwgMjQ1LCA3MSwgOTcsIDc0LCAyMjgsIAotICAgIDQ5LCAyMzIsIDEwOCwgMjIyLCAyNDUsIDcxLCA5NywgNzQsIDI0OSwgOTksIDIzMiwgMTIzLCAyMjgsIDQ5LCAyMTQsIDE2MCwgCi0gICAgMjIyLCAyNDUsIDcxLCA5NywgNzQsIDM3LCAxMTQsIDcxLCA5NywgNzQsIDIxMSwgMjUyLCA5NywgNzQsIDI1MSwgMjIwLCAKLSAgICAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDI1MSwgMjIwLCA5NywgNzQsIDI1MSwgMjIwLCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIAotICAgIDExNCwgMjUxLCAyMjAsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMTE0LCAyNTEsIDIyMCwgOTcsIDc0LCAxMTQsIDI1MSwgCi0gICAgMjIwLCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIDIxNywgMTcsIDk3LCA3NCwgMTE0LCAyMTcsIDE2LCA5NywgNzQsIDIxMiwgCi0gICAgMTgsIDk3LCA3NCwgMTE0LCAyMTIsIDE4LCA5NywgNzQsIDIyNiwgMTcyLCA5NywgNzQsIDUyLCAyNDksIDk5LCAyMzIsIAotICAgIDEyMywgMTM0LCAyNDcsIDIxNCwgMjU0LCAxMDksIDcxLCAyMTUsIDIyNiwgMjQ5LCAxODcsIDQsIDcxLCAyMTUsIDIyNSwgCi0gICAgMjI1LCAxNzEsIDIwNCwgMjE4LCA2MywgMjA0LCAyMTgsIDIxLCA0MywgMjIyLCA5MCwgMjUyLCAxNzMsIDI0OCwgNjAsIDQ0LCAKLSAgICAyMjIsIDkwLCAyNTIsIDE3MywgMjQ4LCA2MCwgMTc3LCAyLCA1OSwgMjM1LCAyMTUsIDIyMywgNTAsIDIxOSwgNDcsIDIyNCwgCi0gICAgMjAxLCAyMTgsIDYzLCAyMTgsIDIyLCAyMjQsIDIwMSwgMjE5LCA0NiwgNjcsIDI1MiwgMTQxLCAyLCAyMDMsIDkxLCAxMSwgCi0gICAgMjIyLCAyMjgsIDI0NywgMjU0LCAxOTksIDI0NywgMTY4LCAxMSwgMjQ0LCAxNzUsIDI0NywgMjU0LCA5MiwgMjMyLCAxNDYsIAotICAgIDI1NCwgMTE4LCA5MiwgMjMyLCAxNDYsIDIyNiwgMTU4LCA3MSwgMjQ3LCAyNDksIDIsIDI1MCwgMTczLCAyNDcsIDEyMCwgCi0gICAgMjIsIDIsIDI0NywgMTIwLCAyNDUsIDE3MCwgNjQsIDIyNiwgMTcwLCAyMTQsIDE1MiwgMjMyLCAxMDgsIDQ0LCAyNDksIAotICAgIDE2MSwgMiwgMjQ3LCAxMjAsIDIxNCwgMTYwLCA0MywgMjQ5LCAxNjEsIDIsIDI0NywgMTIwLCA0MywgMjI2LCAxMjgsIDIzNSwgCi0gICAgNjYsIDQ0LCAyMjYsIDEyOCwgMjM1LCA2NiwgMjQzLCAyMjksIDIyNiwgMTI4LCAyMzUsIDY2LCAyMzMsIDg1LCAxMjAsIAotICAgIDIxNywgODcsIDIzMywgODUsIDEyNCwgMjE3LCA4NywgNDMsIDIyLCA0NCwgNTIsIDIxNSwgOTMsIDQzLCAyMiwgNDQsIDIxNywgCi0gICAgODcsIDQzLCAyMzAsIDg3LCAxOTksIDQ0LCAyMTcsIDg3LCAxOTksIDQzLCAyMTcsIDg3LCAxMjAsIDIxNywgODgsIDIsIAotICAgIDI1MCwgMzYsIDQ4LCAyMzIsIDEwNSwgMjQ3LCAxNzMsIDI1MSwgNzgsIDIwMywgMjIyLCAxMzMsIDcxLCAyNDksIDIwNSwgCi0gICAgMjQ3LCAyNDgsIDcxLCAyNDksIDIwNSwgMjQ3LCAyNDksIDIsIDE0MCwgMjE2LCAxMTQsIDcxLCAyNDksIDIwNSwgMjQ3LCAKLSAgICAyNDksIDIsIDk3LCAyMTYsIDExNCwgNzEsIDQyLCAyLCAxNDAsIDIxNiwgMTE0LCA3MSwgNDIsIDIsIDk3LCAyMTYsIDExNCwgCi0gICAgMTEsIDQzLCA3MSwgNDIsIDEyNywgMTEsIDQ0LCA3MSwgNDIsIDEyNywgMTEsIDQzLCAyNTQsIDExMCwgMTI3LCAxMSwgNDQsIAotICAgIDI1NCwgMTEwLCAxMjcsIDExLCA0MywgNTIsIDI1NCwgMTEwLCAxMjcsIDExLCA0NCwgNTIsIDI1NCwgMTEwLCAxMjcsIDExLCAKLSAgICA0MywgNzEsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCAxMSwgNDQsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMTEsIDQzLCAKLSAgICAyNDQsIDYzLCAyMjYsIDMsIDExLCA0NCwgMjQ0LCA2MywgMjI2LCAzLCAyMTQsIDE1MywgMjI0LCAyNCwgNzQsIDI0NiwgCi0gICAgMTA0LCAyMjQsIDI0LCA3NCwgMjU0LCA4OCwgMjQzLCA5OCwgMjUwLCAzNiwgNzQsIDI1MCwgMiwgMjQzLCA5OCwgMjUwLCAKLSAgICAzNiwgNzQsIDQ0LCA4MCwgMiwgMzcsIDIyNSwgMjIsIDE5OSwgMTQwLCA3NCwgMTk5LCA5NywgNzQsIDE5OSwgNDMsIDQ0LCAKLSAgICA3NCwgMTk5LCAxNDAsIDUyLCA3NCwgMTk5LCA5NywgNTIsIDc0LCAxOTksIDQzLCA0NCwgNTIsIDc0LCAxOTksIDE0MCwgODAsIAotICAgIDI0MywgMjQzLCAxMzAsIDE5OSwgOTcsIDgwLCAyNDMsIDI0MywgMTMwLCAxOTksIDE0MCwgNTIsIDgwLCAyNDMsIDI0MywgCi0gICAgMTMwLCAxOTksIDk3LCA1MiwgODAsIDI0MywgMjQzLCAxMzAsIDE5OSwgOTcsIDIxOCwgMjMwLCA3NCwgNDYsIDQ3LCAyNTEsIAotICAgIDIxNSwgNDYsIDQ3LCAyNDcsIDExNywgNDYsIDQ3LCAyNDYsIDI0NSwgNDYsIDQ3LCAyNDcsIDExNiwgNDYsIDQ3LCAyNDYsIAotICAgIDE4MSwgNDYsIDQ3LCAyNDcsIDUyLCA0NiwgNDcsIDI0NiwgMjQ0LCA0NiwgNDcsIDI0NywgMTE1LCA0NiwgNDcsIDI0NiwgCi0gICAgMTQ5LCA0NiwgNDcsIDI0NywgMjAsIDQ2LCA0NywgMjQ2LCAyMTIsIDQ2LCA0NywgMjQ3LCA4MywgNDYsIDQ3LCAyNDYsIAotICAgIDE4MCwgNDYsIDQ3LCAyNDcsIDUxLCA0NiwgNDcsIDI0NiwgMjQzLCA0NiwgNDcsIDI0NywgMTE0LCA0NiwgNDcsIDI0NiwgCi0gICAgMTMzLCA0NiwgNDcsIDI0NywgNCwgNDYsIDQ3LCAyNDYsIDE5NiwgNDYsIDQ3LCAyNDcsIDY3LCA0NiwgNDcsIDI0NiwgMTY0LCAKLSAgICA0NiwgNDcsIDI0NywgMzUsIDQ2LCA0NywgMjQ2LCAyMjcsIDQ2LCA0NywgMjQ3LCA5OCwgNDYsIDQ3LCAyNDYsIDE0OCwgNDYsIAotICAgIDQ3LCAyNDcsIDE5LCA0NiwgNDcsIDI0NiwgMjExLCA0NiwgNDcsIDI0NywgODIsIDQ2LCA0NywgMjQ2LCAxNzksIDQ2LCA0NywgCi0gICAgMjQ3LCA1MCwgNDYsIDQ3LCAyNDYsIDI0MiwgNDYsIDQ3LCAyNDcsIDExMywgNDYsIDQ3LCAyNDYsIDEyNSwgNDYsIDQ3LCAKLSAgICAyNDYsIDI1MiwgNDYsIDQ3LCAyNDYsIDE4OCwgNDYsIDQ3LCAyNDcsIDU5LCA0NiwgNDcsIDI0NiwgMTU2LCA0NiwgNDcsIAotICAgIDI0NywgMjcsIDQ2LCA0NywgMjQ2LCAyMTksIDQ2LCA0NywgMjQ3LCA5MCwgNDYsIDQ3LCAyNDYsIDE0MCwgNDYsIDQ3LCAKLSAgICAyNDcsIDExLCA0NiwgNDcsIDI0NiwgMjAzLCA0NiwgNDcsIDI0NywgNzQsIDQ2LCA0NywgMjQ2LCAxNzEsIDQ2LCA0NywgCi0gICAgMjQ3LCA0MiwgNDYsIDQ3LCAyNDYsIDIzNCwgNDYsIDQ3LCAyNDcsIDEwNSwgNDYsIDQ3LCAyNDYsIDEzMiwgNDYsIDQ3LCAKLSAgICAyNDcsIDMsIDQ2LCA0NywgMjQ2LCAxOTUsIDQ2LCA0NywgMjQ3LCA2NiwgNDYsIDQ3LCAyNDYsIDE2MywgNDYsIDQ3LCAyNDcsIAotICAgIDM0LCA0NiwgNDcsIDI0NiwgMjI2LCA0NiwgNDcsIDI0NywgOTcsIDQ2LCA0NywgMjQ2LCAxNDcsIDQ2LCA0NywgMjQ3LCAxOCwgCi0gICAgNDYsIDQ3LCAyNDYsIDIxMCwgNDYsIDQ3LCAyNDcsIDgxLCA0NiwgNDcsIDI0NiwgMTc4LCA0NiwgNDcsIDI0NywgNDksIDQ2LCAKLSAgICA0NywgMjQ2LCAyNDEsIDQ2LCA0NywgMjQ3LCAxMTIsIDQ2LCA0NywgMjQ2LCAxMjEsIDQ2LCA0NywgMjQ2LCAyNDgsIDQ2LCAKLSAgICA0NywgMjQ2LCAxODQsIDQ2LCA0NywgMjQ3LCA1NSwgNDYsIDQ3LCAyNDYsIDE1MiwgNDYsIDQ3LCAyNDcsIDIzLCA0NiwgNDcsIAotICAgIDI0NiwgMjE1LCA0NiwgNDcsIDI0NywgODYsIDQ2LCA0NywgMjQ2LCAxMzYsIDQ2LCA0NywgMjQ3LCA3LCA0NiwgNDcsIDI0NiwgCi0gICAgMTk5LCA0NiwgNDcsIDI0NywgNzAsIDQ2LCA0NywgMjQ2LCAxNjcsIDQ2LCA0NywgMjQ3LCAzOCwgNDYsIDQ3LCAyNDYsIAotICAgIDIzMCwgNDYsIDQ3LCAyNDcsIDEwMSwgNDYsIDQ3LCAyNDYsIDEyOCwgNDYsIDQ3LCAyNDYsIDI1NSwgNDYsIDQ3LCAyNDYsIAotICAgIDE5MSwgNDYsIDQ3LCAyNDcsIDYyLCA0NiwgNDcsIDI0NiwgMTU5LCA0NiwgNDcsIDI0NywgMzAsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMjIsIDQ2LCA0NywgMjQ3LCA5MywgNDYsIDQ3LCAyNDYsIDE0MywgNDYsIDQ3LCAyNDcsIDE0LCA0NiwgNDcsIDI0NiwgCi0gICAgMjA2LCA0NiwgNDcsIDI0NywgNzcsIDQ2LCA0NywgMjQ2LCAxNzQsIDQ2LCA0NywgMjQ3LCA0NSwgNDYsIDQ3LCAyNDYsIAotICAgIDIzNywgNDYsIDQ3LCAyNDcsIDEwOCwgNDYsIDQ3LCAyNDYsIDEyNCwgNDYsIDQ3LCAyNDYsIDI1MSwgNDYsIDQ3LCAyNDYsIAotICAgIDE4NywgNDYsIDQ3LCAyNDcsIDU4LCA0NiwgNDcsIDI0NiwgMTU1LCA0NiwgNDcsIDI0NywgMjYsIDQ2LCA0NywgMjQ2LCAKLSAgICAyMTgsIDQ2LCA0NywgMjQ3LCA4OSwgNDYsIDQ3LCAyNDYsIDEzOSwgNDYsIDQ3LCAyNDcsIDEwLCA0NiwgNDcsIDI0NiwgCi0gICAgMjAyLCA0NiwgNDcsIDI0NywgNzMsIDQ2LCA0NywgMjQ2LCAxNzAsIDQ2LCA0NywgMjQ3LCA0MSwgNDYsIDQ3LCAyNDYsIAotICAgIDIzMywgNDYsIDQ3LCAyNDcsIDEwNCwgNDYsIDQ3LCAyNDYsIDEzMSwgNDYsIDQ3LCAyNDcsIDIsIDQ2LCA0NywgMjQ2LCAKLSAgICAxOTQsIDQ2LCA0NywgMjQ3LCA2NSwgNDYsIDQ3LCAyNDYsIDE2MiwgNDYsIDQ3LCAyNDcsIDMzLCA0NiwgNDcsIDI0NiwgCi0gICAgMjI1LCA0NiwgNDcsIDI0NywgOTYsIDQ2LCA0NywgMjQ2LCAxNDYsIDQ2LCA0NywgMjQ3LCAxNywgNDYsIDQ3LCAyNDYsIAotICAgIDIwOSwgNDYsIDQ3LCAyNDcsIDgwLCA0NiwgNDcsIDI0NiwgMTc3LCA0NiwgNDcsIDI0NywgNDgsIDQ2LCA0NywgMjQ2LCAKLSAgICAyNDAsIDQ2LCA0NywgMjQ3LCAxMTEsIDQ2LCA0NywgMjQ2LCAxMTksIDQ2LCA0NywgMjQ2LCAyNDYsIDQ2LCA0NywgMjQ2LCAKLSAgICAxODIsIDQ2LCA0NywgMjQ3LCA1MywgNDYsIDQ3LCAyNDYsIDE1MCwgNDYsIDQ3LCAyNDcsIDIxLCA0NiwgNDcsIDI0NiwgCi0gICAgMjEzLCA0NiwgNDcsIDI0NywgODQsIDQ2LCA0NywgMjQ2LCAxMzQsIDQ2LCA0NywgMjQ3LCA1LCA0NiwgNDcsIDI0NiwgMTk3LCAKLSAgICA0NiwgNDcsIDI0NywgNjgsIDQ2LCA0NywgMjQ2LCAxNjUsIDQ2LCA0NywgMjQ3LCAzNiwgNDYsIDQ3LCAyNDYsIDIyOCwgNDYsIAotICAgIDQ3LCAyNDcsIDk5LCA0NiwgNDcsIDI0NiwgMTI2LCA0NiwgNDcsIDI0NiwgMjUzLCA0NiwgNDcsIDI0NiwgMTg5LCA0NiwgCi0gICAgNDcsIDI0NywgNjAsIDQ2LCA0NywgMjQ2LCAxNTcsIDQ2LCA0NywgMjQ3LCAyOCwgNDYsIDQ3LCAyNDYsIDIyMCwgNDYsIDQ3LCAKLSAgICAyNDcsIDkxLCA0NiwgNDcsIDI0NiwgMTQxLCA0NiwgNDcsIDI0NywgMTIsIDQ2LCA0NywgMjQ2LCAyMDQsIDQ2LCA0NywgCi0gICAgMjQ3LCA3NSwgNDYsIDQ3LCAyNDYsIDE3MiwgNDYsIDQ3LCAyNDcsIDQzLCA0NiwgNDcsIDI0NiwgMjM1LCA0NiwgNDcsIAotICAgIDI0NywgMTA2LCA0NiwgNDcsIDI0NiwgMTIyLCA0NiwgNDcsIDI0NiwgMjQ5LCA0NiwgNDcsIDI0NiwgMTg1LCA0NiwgNDcsIAotICAgIDI0NywgNTYsIDQ2LCA0NywgMjQ2LCAxNTMsIDQ2LCA0NywgMjQ3LCAyNCwgNDYsIDQ3LCAyNDYsIDIxNiwgNDYsIDQ3LCAKLSAgICAyNDcsIDg3LCA0NiwgNDcsIDI0NiwgMTM3LCA0NiwgNDcsIDI0NywgOCwgNDYsIDQ3LCAyNDYsIDIwMCwgNDYsIDQ3LCAyNDcsIAotICAgIDcxLCA0NiwgNDcsIDI0NiwgMTY4LCA0NiwgNDcsIDI0NywgMzksIDQ2LCA0NywgMjQ2LCAyMzEsIDQ2LCA0NywgMjQ3LCAKLSAgICAxMDIsIDQ2LCA0NywgMjQ2LCAxMjksIDQ2LCA0NywgMjQ3LCAwLCA0NiwgNDcsIDI0NiwgMTkyLCA0NiwgNDcsIDI0NywgNjMsIAotICAgIDQ2LCA0NywgMjQ2LCAxNjAsIDQ2LCA0NywgMjQ3LCAzMSwgNDYsIDQ3LCAyNDYsIDIyMywgNDYsIDQ3LCAyNDcsIDk0LCA0NiwgCi0gICAgNDcsIDI0NiwgMTQ0LCA0NiwgNDcsIDI0NywgMTUsIDQ2LCA0NywgMjQ2LCAyMDcsIDQ2LCA0NywgMjQ3LCA3OCwgNDYsIDQ3LCAKLSAgICAyNDYsIDE3NSwgNDYsIDQ3LCAyNDcsIDQ2LCA0NiwgNDcsIDI0NiwgMjM4LCA0NiwgNDcsIDI0NywgMTA5LCA0NiwgNDcsIAotICAgIDI0NiwgMTIwLCA0NiwgNDcsIDI0NiwgMjQ3LCA0NiwgNDcsIDI0NiwgMTgzLCA0NiwgNDcsIDI0NywgNTQsIDQ2LCA0NywgCi0gICAgMjQ2LCAxNTEsIDQ2LCA0NywgMjQ3LCAyMiwgNDYsIDQ3LCAyNDYsIDIxNCwgNDYsIDQ3LCAyNDcsIDg1LCA0NiwgNDcsIAotICAgIDI0NiwgMTM1LCA0NiwgNDcsIDI0NywgNiwgNDYsIDQ3LCAyNDYsIDE5OCwgNDYsIDQ3LCAyNDcsIDY5LCA0NiwgNDcsIDI0NiwgCi0gICAgMTY2LCA0NiwgNDcsIDI0NywgMzcsIDQ2LCA0NywgMjQ2LCAyMjksIDQ2LCA0NywgMjQ3LCAxMDAsIDQ2LCA0NywgMjQ2LCAKLSAgICAxMjcsIDQ2LCA0NywgMjQ2LCAyNTQsIDQ2LCA0NywgMjQ2LCAxOTAsIDQ2LCA0NywgMjQ3LCA2MSwgNDYsIDQ3LCAyNDYsIAotICAgIDE1OCwgNDYsIDQ3LCAyNDcsIDI5LCA0NiwgNDcsIDI0NiwgMjIxLCA0NiwgNDcsIDI0NywgOTIsIDQ2LCA0NywgMjQ2LCAKLSAgICAxNDIsIDQ2LCA0NywgMjQ3LCAxMywgNDYsIDQ3LCAyNDYsIDIwNSwgNDYsIDQ3LCAyNDcsIDc2LCA0NiwgNDcsIDI0NiwgCi0gICAgMTczLCA0NiwgNDcsIDI0NywgNDQsIDQ2LCA0NywgMjQ2LCAyMzYsIDQ2LCA0NywgMjQ3LCAxMDcsIDQ2LCA0NywgMjQ2LCAKLSAgICAxMjMsIDQ2LCA0NywgMjQ2LCAyNTAsIDQ2LCA0NywgMjQ2LCAxODYsIDQ2LCA0NywgMjQ3LCA1NywgNDYsIDQ3LCAyNDYsIAotICAgIDE1NCwgNDYsIDQ3LCAyNDcsIDI1LCA0NiwgNDcsIDI0NiwgMjE3LCA0NiwgNDcsIDI0NywgODgsIDQ2LCA0NywgMjQ2LCAKLSAgICAxMzgsIDQ2LCA0NywgMjQ3LCA5LCA0NiwgNDcsIDI0NiwgMjAxLCA0NiwgNDcsIDI0NywgNzIsIDQ2LCA0NywgMjQ2LCAxNjksIAotICAgIDQ2LCA0NywgMjQ3LCA0MCwgNDYsIDQ3LCAyNDYsIDIzMiwgNDYsIDQ3LCAyNDcsIDEwMywgNDYsIDQ3LCAyNDYsIDEzMCwgCi0gICAgNDYsIDQ3LCAyNDcsIDEsIDQ2LCA0NywgMjQ2LCAxOTMsIDQ2LCA0NywgMjQ3LCA2NCwgNDYsIDQ3LCAyNDYsIDE2MSwgNDYsIAotICAgIDQ3LCAyNDcsIDMyLCA0NiwgNDcsIDI0NiwgMjI0LCA0NiwgNDcsIDI0NywgOTUsIDQ2LCA0NywgMjQ2LCAxNDUsIDQ2LCA0NywgCi0gICAgMjQ3LCAxNiwgNDYsIDQ3LCAyNDYsIDIwOCwgNDYsIDQ3LCAyNDcsIDc5LCA0NiwgNDcsIDI0NiwgMTc2LCA0NiwgNDcsIAotICAgIDI0NywgNDcsIDQ2LCA0NywgMjQ2LCAyMzksIDQ2LCA0NywgMjQ3LCAxMTAsIDk3LCAyMTUsIDU4LCA4MCwgMiwgNjcsIDkxLCAKLSAgICA5NywgMjE1LCA1OCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgNTIsIDgwLCAyLCA2NywgOTEsIDk3LCA1MiwgODAsIDIsIAotICAgIDY3LCA5MSwgNDMsIDQ0LCA1MiwgODAsIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAyNDMsIDI0MywgMTMwLCAxNDAsIAotICAgIDUyLCA4MCwgMjQzLCAyNDMsIDEzMCwgOTcsIDUyLCA4MCwgMjQzLCAyNDMsIDEzMCwgMjQ2LCAxMDQsIDgwLCAyLCAyMDMsIAotICAgIDkxLCAyMTQsIDE1MywgODAsIDIsIDIwMywgOTEsIDIxNCwgMTUzLCAyMTUsIDIxMSwgNzQsIDI0NiwgMTA0LCAyMTUsIDIxMSwgCi0gICAgNzQsIDE0MCwgNTIsIDI0OCwgMTU3LCA3NCwgOTcsIDUyLCAyNDgsIDE1NywgNzQsIDE0MCwgMjE1LCAyMTEsIDI0OCwgMTU3LCAKLSAgICA3NCwgOTcsIDIxNSwgMjExLCAyNDgsIDE1NywgNzQsIDk3LCAyMTUsIDU4LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDc0LCA5NywgCi0gICAgODAsIDIsIDI0NiwgMTE4LCAyMTgsIDEzOSwgMjE0LCAxNTMsIDgwLCAyMTYsIDQyLCAxMzAsIDI0NiwgMTA0LCA4MCwgMjE2LCAKLSAgICA0MiwgMTMwLCA5NywgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIAotICAgIDkxLCA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzcsIDk3LCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OCwgMiwgNjcsIDkxLCAKLSAgICA5NywgMjE1LCA1OCwgODAsIDIsIDIxNywgNzgsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjUzLCAyNTEsIDk3LCAyNTMsIDI1MSwgCi0gICAgMTQwLCA1MiwgMjUzLCAyNTEsIDk3LCA1MiwgMjUzLCAyNTEsIDE0MCwgODAsIDIxNiwgNDIsIDg1LCAyNDcsIDI0OCwgOTcsIAotICAgIDgwLCAyMTYsIDQyLCA4NSwgMjQ3LCAyNDgsIDE0MCwgODAsIDI0MywgMjQzLCAyNTIsIDE0MSwgMjE2LCA0MiwgODUsIDI0NywgCi0gICAgMjQ4LCA5NywgODAsIDI0MywgMjQzLCAyNTIsIDE0MSwgMjE2LCA0MiwgODUsIDI0NywgMjQ4LCAyMjgsIDU2LCAyMTIsIDksIAotICAgIDIyLCAyMTksIDI4LCAyNDUsIDIyMCwgNzQsIDIyOCwgNTYsIDI0NSwgMjIwLCAyMiwgMjE5LCAyOCwgMjEyLCA5LCA3NCwgCi0gICAgMjI4LCA1NiwgMjEyLCA5LCA4MCwgMiwgMTAzLCAyMjgsIDU2LCAyNDUsIDIyMCwgODAsIDIsIDEwMywgMjE5LCAyOCwgMjQ1LCAKLSAgICAyMjAsIDgwLCAyLCAxMDMsIDIxOSwgMjgsIDIxMiwgOSwgODAsIDIsIDEwMywgMjI4LCA1NiwgMjEyLCA5LCA4MCwgMjIsIAotICAgIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDgwLCAyMiwgMjE5LCAyOCwgMjQ1LCAyMjAsIDc0LCAKLSAgICAyMTksIDI4LCAyNDUsIDIyMCwgODAsIDIyLCAyMTksIDI4LCAyMTIsIDksIDc0LCAyMTksIDI4LCAyMTIsIDksIDgwLCAyMiwgCi0gICAgMjI4LCA1NiwgMjEyLCA5LCA3NCwgMjIyLCAyMjgsIDI0NywgMjU1LCAyNDksIDEyNSwgMjQ0LCAxNzUsIDI0NywgMjU0LCAKLSAgICAyNDQsIDE3NSwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyMjIsIDIyOCwgMjQ3LCAyNTQsIDIxOSwgMjgsIDI0NSwgMjIwLCA4MCwgCi0gICAgMjQ5LCAxMjUsIDIyOCwgNTYsIDI0NSwgMjIwLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIDgwLCAyNDksIDEyNSwgMjE5LCAKLSAgICAyOCwgMjQ1LCAyMjAsIDc0LCAyNDQsIDE3NSwgMjQ3LCAyNTUsIDI0OSwgMTI1LCAyMjgsIDU2LCAyNDUsIDIyMCwgNzQsIAotICAgIDIyMiwgMjI4LCAyNDcsIDI1NSwgMjQ5LCAxMjUsIDIxOSwgMjgsIDI0NSwgMjIwLCA3NCwgMjI4LCA1NiwgMjQ1LCAyMjAsIAotICAgIDgwLCAyNDksIDEyNSwgMjI4LCA1NiwgMjEyLCA5LCA3NCwgMjI4LCA1NiwgMjEyLCA5LCA4MCwgMjQ5LCAxMjUsIDIyOCwgCi0gICAgNTYsIDI0NSwgMjIwLCA3NCwgMjEyLCAzNiwgODAsIDIyNSwgNywgMjQ3LCAxOTUsIDIyMiwgMjUxLCA4MCwgMjI1LCA3LCAKLSAgICA5NywgMjE2LCAxODgsIDI0OSwgOTAsIDIxNCwgMTUyLCA4MCwgMjI1LCA3LCA5NywgMjE2LCAxODgsIDI0OSwgOTAsIDI0NiwgCi0gICAgMTAzLCA4MCwgMjI1LCA3LCAyNDYsIDEwNCwgMjE2LCAxODgsIDI0OSwgOTAsIDIzMywgMzcsIDgwLCAyMjUsIDcsIDI0NiwgCi0gICAgMTA0LCAyMTYsIDE4OCwgMjQ5LCA5MCwgMjIyLCAyNDEsIDIyMiwgMjQ0LCAyNTQsIDI2LCAyNTAsIDIsIDc0LCAyMzMsIDQwLCAKLSAgICAyNTQsIDI2LCAyNTQsIDg4LCA3NCwgMjE2LCAxNCwgMjU0LCAyNiwgMjU0LCA4OCwgNzQsIDI1MSwgMTc1LCAyNTQsIDI2LCAKLSAgICAyNTQsIDg4LCA3NCwgMjE2LCAxNCwgMjU0LCAyNiwgMjUwLCAyLCA4MCwgMiwgMjMwLCAxODEsIDIxNiwgMTQsIDI1NCwgMjYsIAotICAgIDI1NCwgODgsIDgwLCAyLCAyMjUsIDIyLCAyMzIsIDEwOCwgNDQsIDIyMCwgMTUyLCAyNTAsIDIsIDc0LCAyMzIsIDEwOCwgCi0gICAgNDMsIDIyMCwgMTUyLCAyNTQsIDg4LCA3NCwgMjU0LCA4OCwgMjUwLCAwLCAyNTAsIDM2LCA3NCwgMjUwLCAyLCAyNTAsIDAsIAotICAgIDI1MCwgMzYsIDc0LCA5NywgODAsIDc3LCAyMTksIDI1MSwgMTQwLCA3NCwgMTQwLCA4MCwgNzcsIDIxOSwgMjUxLCA5NywgCi0gICAgNzQsIDIxOSwgMjUxLCA5NywgODAsIDc3LCAxNDAsIDc0LCA5NywgODAsIDIsIDk2LCA1MSwgMTQwLCA4MCwgMiwgOTYsIDUxLCAKLSAgICA5NywgODAsIDIxNiwgMTM5LCAyMTEsIDE3OCwgNDMsIDQ0LCA4MCwgMjE2LCAxMzksIDQsIDI1MCwgMzUsIDIxNCwgMTUzLCAKLSAgICAyMTUsIDU4LCA4MCwgMjQzLCAyNDMsIDQsIDI1MCwgMzUsIDQzLCAyNTIsIDEzOSwgMTIwLCA0NCwgMjUyLCAxMzksIDEyNCwgCi0gICAgMjQxLCAyNTQsIDQzLCAyNTIsIDEzOSwgMTI0LCA0NCwgMjUyLCAxMzksIDEyMCwgMjQxLCAyNTQsIDEyMCwgMjUyLCAxMzksIAotICAgIDQ0LCAxMjQsIDI1MiwgMTM5LCA0MywgMjQxLCAyNTQsIDEyMCwgMjUyLCAxMzksIDQzLCAxMjQsIDI1MiwgMTM5LCA0NCwgCi0gICAgMjQxLCAyNTQsIDQzLCAyNTIsIDEzOSwgMTIwLCA0NCwgMjUyLCAxMzksIDEyMCwgMjQxLCAyNTQsIDEyMCwgMjUyLCAxMzksIAotICAgIDQ0LCAxMjQsIDI1MiwgMTM5LCA0NCwgMjQxLCAyNTQsIDQzLCAyNTIsIDEzOSwgMTI0LCA0NCwgMjUyLCAxMzksIDEyNCwgCi0gICAgMjQxLCAyNTQsIDEyMCwgMjUyLCAxMzksIDQzLCAxMjQsIDI1MiwgMTM5LCA0MywgMjQxLCAyNTQsIDE0MCwgMjQxLCAyNTUsIAotICAgIDIsIDI1MiwgMTM5LCAxMjAsIDIxNiwgNDIsIDEzMCwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCAyMTYsIDQyLCAKLSAgICAxMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQ0LCAyMTYsIDQyLCAxMzAsIDI0NiwgMTA0LCAyNDEsIAotICAgIDI1NSwgMiwgMjUyLCAxMzksIDQ0LCAyMTYsIDQyLCAxMzAsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDIxNiwgCi0gICAgNDIsIDEzMCwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyMTYsIDQyLCAxMzAsIDIxNCwgMTUzLCAyNDEsIAotICAgIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyMTYsIDQyLCAxMzAsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAKLSAgICAyMTYsIDQyLCAxMzAsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDI0MywgMjQzLCAxMzAsIDk3LCAyNDEsIAotICAgIDI1NSwgMiwgMjUyLCAxMzksIDEyMCwgMjQzLCAyNDMsIDEzMCwgMjE0LCAxNTMsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgCi0gICAgNDQsIDI0MywgMjQzLCAxMzAsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQ0LCAyNDMsIDI0MywgMTMwLCAKLSAgICAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyNDMsIDI0MywgMTMwLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgCi0gICAgMTM5LCAxMjQsIDI0MywgMjQzLCAxMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNDMsIDI0MywgCi0gICAgMTMwLCAyNDYsIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCA0MywgMjQzLCAyNDMsIDEzMCwgMTQwLCAyNDEsIDI1NSwgCi0gICAgMiwgMjUyLCAxMzksIDEyMCwgNzcsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIDEwNiwgMjE0LCAxNTMsIAotICAgIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI1MiwgMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgCi0gICAgMjUxLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyNDYsIAotICAgIDEwNiwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgNDMsIDI1MiwgMzAsIDI0NiwgMTA0LCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDIyMiwgMjUxLCAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgOTcsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjE0LCAxNjMsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDc3LCA5NywgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAyNDYsIDEwNiwgOTcsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTIwLCA3NywgMTQwLCAyNDEsIDI1NSwgMiwgCi0gICAgMjUyLCAxMzksIDIxNCwgMTYzLCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDc3LCAxNDAsIDI0MSwgMjU1LCAyLCAKLSAgICAyNTIsIDEzOSwgMjQ2LCAxMDYsIDE0MCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjAsIDc3LCAxOTksIDI0OCwgMTU2LCAKLSAgICAxNDAsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgMTI0LCAyNTIsIDQzLCAxOTksIDI0OCwgMTU2LCA5NywgMjQxLCAyNTUsIDIsIAotICAgIDI1MiwgMTM5LCAxMjAsIDc3LCAxOTksIDI0OCwgMTU2LCA5NywgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAxMjQsIDI1MiwgCi0gICAgNDMsIDE5OSwgMjQ4LCAxNTYsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDQzLCAyNTIsIDMwLCAyNDYsIAotICAgIDEwNCwgMjQxLCAyNTUsIDIsIDI1MiwgMTM5LCAyMjIsIDI1MSwgMjQ2LCAxMDQsIDI0MSwgMjU1LCAyLCAyNTIsIDEzOSwgCi0gICAgNDMsIDI1MiwgMzAsIDIxNCwgMTUzLCAyNDEsIDI1NSwgMiwgMjUyLCAxMzksIDIyMiwgMjUxLCA0NCwgNTIsIDgwLCAyLCAKLSAgICAyMjIsIDE4MywgMjQxLCAyMzUsIDI0NSwgOTgsIDUsIDc3LCA5NywgNzQsIDIxNiwgODksIDIyNiwgMTY4LCA3NywgOTcsIAotICAgIDc0LCAxNDAsIDgwLCA3NywgMjE2LCA4OSwgMjI2LCAxNjcsIDk3LCA4MCwgNzcsIDIxNiwgODksIDIyNiwgMTY3LCA5NywgCi0gICAgODAsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDIzMywgMTUsIDc3LCAxNDAsIDc0LCAxNDAsIDgwLCAyMTYsIDEzOSwgMjMzLCAKLSAgICAxNCwgMjQyLCAxMzAsIDc3LCA5NywgNzQsIDIxOCwgNjQsIDc3LCA5NywgNzQsIDE0MCwgODAsIDIxNiwgMTM5LCAyMTgsIAotICAgIDYzLCAyMTgsIDIyLCA3NywgMTQwLCA3NCwgNDMsIDI0NCwgOTEsIDIxNywgNzcsIDQ0LCAyNDQsIDkxLCAyMTcsIDc3LCAKLSAgICAxMjAsIDI0NCwgOTEsIDIxNywgNzcsIDEyNCwgMjQ0LCA5MSwgMjE3LCA3NywgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgCi0gICAgMjQ4LCA2MCwgMjEwLCAxNjAsIDE4NywgMjE4LCAyNDIsIDIxMCwgMTYwLCAxODcsIDIxNSwgNDksIDI0OSwgMjI2LCA0MywgCi0gICAgNzEsIDI0OSwgOTksIDEyNywgNDQsIDcxLCAyNDksIDk5LCAxMjcsIDQzLCA3MSwgMjI2LCAzLCA0NCwgNzEsIDIyNiwgMywgCi0gICAgMjEwLCAxNjAsIDE4NywgNDMsIDIzNiwgMTUsIDEyNywgMjEwLCAxNjAsIDE4NywgNDQsIDIzNiwgMTUsIDEyNywgMjEwLCAKLSAgICAxNjAsIDE4NywgNDMsIDI1MSwgMjQyLCAxMjcsIDIxMCwgMTYwLCAxODcsIDQ0LCAyNTEsIDI0MiwgMTI3LCA0MywgNDIsIAotICAgIDI1MSwgMTU4LCAyLCAyMTQsIDE4MywgNDQsIDQyLCAyNTEsIDE1OCwgMiwgMjE0LCAxODMsIDQzLCA0MiwgMjUxLCAxNTgsIAotICAgIDIsIDIxNiwgMTE1LCAyMzYsIDAsIDIxNiwgMTQsIDI0OSwgMTYwLCA0NCwgNDIsIDI1MSwgMTU4LCAyLCAyMTYsIDExNSwgCi0gICAgMjM2LCAwLCAyNTEsIDE3NSwgMjQ5LCAxNjAsIDQzLCA0MiwgMjUxLCAxNTgsIDIsIDIxNiwgMTE1LCAyMzYsIDAsIDI1MSwgCi0gICAgMTc1LCAyNDksIDE2MCwgNDQsIDQyLCAyNTEsIDE1OCwgMiwgMjE2LCAxMTUsIDIzNiwgMCwgMjE2LCAxNCwgMjQ5LCAxNjAsIAotICAgIDQzLCAyNTQsIDExMCwgMjUxLCAxNTgsIDIsIDI0NywgMTIwLCA0NCwgMjU0LCAxMTAsIDI1MSwgMTU4LCAyLCAyNDcsIDEyMCwgCi0gICAgNDMsIDI1NCwgMjYsIDIzMywgMTUsIDEyNywgNDQsIDI1NCwgMjYsIDI0MiwgMTMwLCAxMjcsIDUyLCA0MywgMjU0LCAyNiwgCi0gICAgMjQyLCAxMzAsIDEyNywgNTIsIDQ0LCAyNTQsIDI2LCAyMzMsIDE1LCAxMjcsIDQzLCA4NSwgMjE2LCA2LCAyMjAsIDUzLCAKLSAgICAxMjcsIDQ0LCA4NSwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDI0NiwgMTE4LCAyNDQsIDEzNSwgNjcsIDIxMCwgMzUsIDIzMiwgCi0gICAgMjEzLCAyMzEsIDg4LCAyNTQsIDExMCwgMjI2LCAxNzAsIDIzMywgNDYsIDQ0LCAyNTQsIDExMCwgMjE0LCAxMiwgMiwgMjE4LCAKLSAgICAyMzQsIDIzMSwgODgsIDQ0LCAyNTQsIDExMCwgMiwgMjQ3LCAxMjAsIDI1NCwgMTEwLCAyLCAyMjIsIDkyLCAyMzUsIDIxNSwgCi0gICAgMjU1LCAzLCAyNTQsIDEwOSwgMjE4LCAyNTUsIDI1NCwgMTEwLCAyMjYsIDE3MCwgMjMzLCA0NiwgMjE4LCAyNTUsIDI1NCwgCi0gICAgMTEwLCAyMjYsIDE3MCwgMjE0LCAxNjMsIDIxNSwgOTQsIDI1NCwgMTA5LCAyMjMsIDQ5LCAyNTQsIDEwOSwgMjU0LCAxMTAsIAotICAgIDIsIDIxNCwgMTgzLCAyMjMsIDQ5LCAyNTQsIDExMCwgMiwgMjE0LCAxODMsIDIyNiwgMjQ4LCAyNTQsIDExMCwgMjI2LCAKLSAgICAxNzAsIDIxNCwgMTYzLCAyMjYsIDI0OCwgMjU0LCAxMTAsIDIyNiwgMTcwLCAyNDYsIDEwNiwgMjMxLCA4OCwgMjU0LCAxMTAsIAotICAgIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCAxMjAsIDIyLCAyMjIsIDI1MSwgMjMxLCA4OCwgCi0gICAgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCAxMjAsIDIyLCAyMzMsIDQ2LCAKLSAgICAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDEyNCwgMjIsIAotICAgIDIyMiwgMjUxLCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIAotICAgIDcsIDEyNCwgMjIsIDIzMywgNDYsIDIzMSwgODgsIDI1NCwgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgCi0gICAgODAsIDIyNSwgNywgNDQsIDIyLCAyMTQsIDE2MywgMjMxLCA4OCwgMjU0LCAxMTAsIDIsIDIwNCwgMjU0LCA1LCAyNDUsIAotICAgIDE0MCwgMjM2LCAwLCA4MCwgMjI1LCA3LCA0MywgMjIsIDIxNCwgMTYzLCAyMzEsIDg4LCAyNTQsIDExMCwgMiwgMjA0LCAKLSAgICAyNTQsIDUsIDI0NSwgMTQwLCAyMzYsIDAsIDgwLCAyMjUsIDcsIDQ0LCAyMiwgMjQ2LCAxMDYsIDIzMSwgODgsIDI1NCwgCi0gICAgMTEwLCAyLCAyMDQsIDI1NCwgNSwgMjQ1LCAxNDAsIDIzNiwgMCwgODAsIDIyNSwgNywgNDMsIDIyLCAyNDYsIDEwNiwgMjIzLCAKLSAgICA0OSwgMjQ1LCAxNTIsIDIyMCwgMTI3LCAyNDUsIDE1MiwgMjIwLCAxMjgsIDIsIDIyNiwgMTIzLCAyNDUsIDE1MiwgMjIwLCAKLSAgICAxMjgsIDIsIDQsIDI1MCwgMzYsIDQ4LCAyNDUsIDE1MiwgMjIwLCAxMjgsIDIsIDQ0LCA4MCwgNDgsIDI0NSwgMTUyLCAyMjAsIAotICAgIDEyOCwgMiwgNDMsIDgwLCA0OCwgMjUwLCAzNiwgMiwgMjAzLCAxMzAsIDM3LCA2NywgMTMwLCAzNywgMjI2LCA3LCAzNywgCi0gICAgMjIzLCA1MCwgMjE5LCA0NiwgMzcsIDIyNSwgMTcxLCAyNTAsIDM2LCAyNDcsIDE3MywgMjUxLCA3OCwgMjAzLCAyNTIsIAotICAgIDE0MSwgMjIsIDIxNiwgMTQsIDE2MywgMjQ3LCAxNzMsIDI1MSwgNzgsIDY3LCAxMzAsIDI1MCwgMzYsIDIsIDIxOCwgMjQsIAotICAgIDIxMSwgMTc4LCAzNywgMjU0LCA4NywgMjQ3LCAxNjksIDUwLCAxMjAsIDgwLCAyMTYsIDEzOSwgMjUwLCAzNSwgMzcsIDcxLCAKLSAgICAyNTEsIDExMywgMzcsIDI1MSwgMTEzLCAzNywgMjMzLCAxNCwgMzcsIDI0MiwgMTI5LCAyNTAsIDM2LCAyLCA0LCAyNTAsIAotICAgIDM2LCAyMTYsIDQyLCAyMTYsIDE5NiwgMjIyLCAyNTEsIDI1MCwgMzYsIDIsIDExMywgMjAzLCAyMTgsIDkxLCAyMTYsIDQyLCAKLSAgICAyMTYsIDE5NiwgMjIyLCAyNTEsIDkyLCAyMjIsIDIyOCwgMjQ3LCAyNTUsIDIxOSwgOTUsIDkyLCAyNDQsIDE3NSwgMjQ3LCAKLSAgICAyNTUsIDIxOSwgOTUsIDkyLCAyNTMsIDIxNiwgOTIsIDQsIDI1MCwgMzUsIDkyLCAyMTgsIDIzNCwgMTEzLCAyMzUsIDY1LCAKLSAgICAyMTgsIDIzMiwgMjE1LCAyMjYsIDIsIDU5LCA0OCwgMjE1LCAyMjYsIDIsIDIxNCwgMTgzLCAyMjIsIDkyLCAyMzYsIDAsIAotICAgIDIxNSwgMjI1LCAyMTUsIDIyNiwgMiwgMjIwLCAxMzQsIDI1MywgMjA3LCAyNTEsIDE3NCwgNDQsIDIxNSwgMjI2LCA3NywgCi0gICAgNDMsIDIxNSwgMjI1LCA0MywgMjE1LCAyMjYsIDI1MiwgMzAsIDY3LCAxMzAsIDY3LCAyNTIsIDE0MSwgMjUyLCAzMCwgNDQsIAotICAgIDIxNSwgMjI1LCAyNTEsIDE2NSwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDI1MSwgMTY1LCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgCi0gICAgODUsIDI1MSwgMTY0LCAzMCwgMiwgNDMsIDE2MywgMjUxLCAyMjEsIDMwLCAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgNzEsIAotICAgIDI0MCwgMjM2LCA4NSwgMjQwLCAyMzYsIDQzLCAyMTEsIDI0NCwgMjQ0LCAxMzUsIDQ0LCAyMTEsIDI0NCwgMjQ0LCAxMzUsIAotICAgIDQzLCA1MiwgMjExLCAyNDQsIDI0NCwgMTM1LCA0NCwgNTIsIDIxMSwgMjQ0LCAyNDQsIDEzNSwgMjM1LCAyNDgsIDIzNSwgCi0gICAgMjM0LCAyMTYsIDExMiwgMTE3LCAyMzUsIDIzNCwgMjM1LCAyMzUsIDIyOSwgMTAyLCAyLCA2NywgMTMwLCAyNDYsIDExMiwgCi0gICAgMjMwLCA4NywgNDIsIDIsIDI0OSwgMTgxLCAyMjYsIDEyNywgMjM1LCAyNDYsIDI1MywgMjM3LCAyMTksIDIxOSwgMjI0LCAKLSAgICAxODAsIDI0NSwgOTgsIDUsIDIyLCAyMTksIDk3LCAyMjYsIDcsIDI0NSwgOTgsIDUsIDIyLCAyMTksIDk3LCAyMjYsIDgsIDIsIAotICAgIDIxNiwgODksIDQ4LCAyNDAsIDEwNCwgMjE2LCA0MiwgMjIsIDIxOSwgOTcsIDIyNiwgNywgMjQyLCAxODMsIDIxOCwgMTU1LCAKLSAgICAyMTYsIDE4NSwgMjQ2LCAxMDUsIDIxNSwgMjI2LCAyLCA0MywgMTYzLCAyNTEsIDIyMSwgMjQ2LCAxMDUsIDIxNSwgMjI2LCAKLSAgICAyLCA0NCwgMTYzLCAyNTEsIDIyMSwgODUsIDI0NywgMjQ5LCAyLCAxMjQsIDc0LCA4NSwgMjMyLCAxMDQsIDcxLCAyNTAsIAotICAgIDM2LCAyLCAxMjQsIDc0LCA4NSwgMjUwLCAzNiwgMiwgMTI0LCA3NCwgMjQ1LCA4NSwgNzEsIDIxOCwgMjM0LCAyNDUsIDg1LCAKLSAgICA4NSwgMjE4LCAyMzQsIDI0NSwgODUsIDcxLCAyNDcsIDI0OCwgMjQ1LCA4NSwgODUsIDI0NywgMjQ4LCAyNDUsIDg1LCA3MSwgCi0gICAgMjUwLCAzNSwgMjQ1LCA4NSwgODUsIDI1MCwgMzUsIDIyMiwgMTMyLCAyMjMsIDUwLCAyMTksIDQ3LCAyMjYsIDE2NywgMjE5LCAKLSAgICA0NywgMiwgMjI2LCAxMjMsIDIyMywgNTAsIDIxOSwgNDcsIDIsIDIwMywgOTEsIDI1MSwgMjQ5LCAyMTksIDQ2LCAyNTEsIAotICAgIDI0OSwgMjIzLCA1MCwgMjE5LCA0NiwgNTIsIDIyNSwgMjIsIDIxNSwgMjExLCAyMjUsIDIyLCAyMzMsIDQyLCAyNDksIDkxLCAKLSAgICAyNTQsIDExMCwgMTI3LCAyMjIsIDI0NywgMjQ5LCA5MSwgMjU0LCAxMTAsIDEyNywgMjE2LCA3OCwgMjMwLCAxNzksIDIzMCwgCi0gICAgMjQsIDM3LCA1OSwgMjI2LCAxNjcsIDIzMCwgMjQsIDM3LCA5NiwgMjI2LCAxNjcsIDIzMCwgMjQsIDM3LCAzMCwgMjI2LCAKLSAgICAxNjcsIDIzMCwgMjQsIDIxNCwgMTc2LCAyMjYsIDE2OCwgMiwgMjQ3LCAxMjAsIDIzMCwgMjQsIDIxNCwgMTc2LCAyMjYsIAotICAgIDE2OCwgMiwgMjI1LCAyMiwgMjMwLCAyNCwgNDIsIDIzNSwgMTk5LCAyMjYsIDE2NywgMjMwLCAyNCwgNDIsIDIxNCwgMTc2LCAKLSAgICAyMjYsIDE2NywgMTEzLCAyMzIsIDE0NiwgMjIsIDIyNiwgMTY3LCAxMTMsIDIzMiwgMTQ2LCAxNzcsIDIyNiwgMTY3LCAyMzAsIAotICAgIDI0LCAzMCwgMjI2LCAxNjcsIDIzMCwgMTU0LCAxMTMsIDIxOCwgNDMsIDIxOCwgNDEsIDIsIDIzNSwgMjExLCAyMjQsIDI0LCAKLSAgICAyMzUsIDIxMiwgMjI2LCAxNjcsIDI0NCwgOTksIDIyNSwgMjU1LCAyMzUsIDIxMSwgMjM1LCAyMTIsIDIsIDUyLCA5MSwgCi0gICAgMjM1LCAyMTIsIDI1MywgMTczLCAyLCAyMTksIDk1LCAyNTAsIDMyLCAyNDMsIDIyNiwgMjU0LCA4OCwgMjM1LCAyMDksIAotICAgIDIzMiwgMjE0LCAyMzUsIDIxMCwgMiwgMjIzLCAxMTUsIDIyNSwgMjM3LCAyNTQsIDIsIDIyNSwgMSwgMjMyLCAyMTQsIDIzNSwgCi0gICAgMjEwLCAyLCAyMjAsIDE1MiwgMjI1LCAyMzcsIDI1NCwgMiwgMjI1LCAxLCAyMzIsIDIxNCwgMjM1LCAyMTAsIDIyOCwgNTIsIAotICAgIDIzNSwgMjUwLCAyMTYsIDE5NiwgMjI1LCAxLCAyMzUsIDIxMiwgMjU0LCAyLCAxMTUsIDIyNSwgMTEsIDIyNiwgMTY3LCAKLSAgICAyMjQsIDE4LCAyMzUsIDIxMiwgMjI2LCAxNjcsIDIzNSwgMjEyLCAyLCAxNDAsIDgwLCAyLCAxMDMsIDIzNSwgMjEyLCAyLCAKLSAgICAzMCwgNTAsIDIzNSwgMjEyLCAyLCAyMzUsIDE5OCwgMjM1LCAyMTIsIDIsIDIxNCwgMTc1LCAyMzUsIDIxMiwgMiwgMjI2LCAKLSAgICAxMjMsIDIzNSwgMjEyLCAyLCAyMTQsIDE4MywgMjM1LCA2NiwgMjMzLCA4NSwgNDMsIDIxNSwgMjI2LCAyMjYsIDE2NywgCi0gICAgMjEwLCAxNjAsIDE4NywgMjIxLCAyMDEsIDI0OSwgMjA5LCAyMTAsIDE2MCwgMTg3LCAyMjEsIDIwMSwgMjI1LCA1NiwgMjEwLCAKLSAgICAxNjAsIDE4NywgMjIxLCAyMDEsIDIyNCwgMTc2LCA5NiwgNSwgMiwgNCwgMjUwLCAzNiwgNDgsIDk2LCA1LCAyLCAyNTAsIAotICAgIDMxLCAyNTUsIDE1LCA0OCwgOTYsIDUsIDIsIDIxNiwgODksIDQ4LCA5NiwgNSwgMiwgNTksIDUxLCA5NiwgNSwgMiwgMjE2LCAKLSAgICA4OSwgNTEsIDk2LCA1LCAyLCAyMTgsIDY1LCAxMDUsIDk2LCA1LCAyLCA4NSwgMjE1LCAyMjUsIDIzMCwgMTgyLCA1LCAyLCAKLSAgICAyNDksIDIyMCwgNDgsIDIzMCwgMTgyLCA1LCAyLCA1OSwgNTEsIDIzMCwgMTgyLCA1LCAyLCAyNDQsIDE3NSwgMjQ3LCAxMTgsIAotICAgIDIzMCwgMTgyLCA1LCAyLCAyMjIsIDIyOCwgMjQ3LCAxMTgsIDk2LCA1LCAyMzYsIDAsIDQzLCAxNjMsIDI1MCwgMzUsIDk2LCAKLSAgICA1LCAyMzYsIDAsIDQ0LCAxNjMsIDI1MCwgMzUsIDIxMywgMjU0LCAxNzcsIDI0OSwgMTMxLCAyMjQsIDE4MCwgMjMwLCA4NCwgCi0gICAgNSwgMiwgNTksIDQ4LCAyMzAsIDg0LCA1LCAyLCAyMTQsIDE4MywgMjIwLCAxNDksIDIyNCwgMTgxLCAyLCAyNTEsIDE3NSwgCi0gICAgMjQ5LCAyNTUsIDIxOSwgNzcsIDIyNCwgMTgwLCAyMzAsIDg0LCA1LCAyMzYsIDAsIDQzLCAxNjMsIDI1MCwgMzUsIDIzMCwgCi0gICAgODQsIDUsIDIzNiwgMCwgNDQsIDE2MywgMjUwLCAzNSwgMzcsIDIzMCwgODQsIDUsIDIsIDI1MCwgMzEsIDI1NSwgMTQsIAotICAgIDIzMCwgODQsIDUsIDIzNiwgMCwgNTIsIDI1MCwgMzUsIDM3LCAyNDcsIDE2OSwgNTAsIDk2LCA1LCAyMzYsIDAsIDIxNSwgCi0gICAgMjI1LCAyMzAsIDE4MiwgNSwgMjM2LCAwLCAyMTUsIDIyNSwgMjMwLCA4NCwgNSwgMjM2LCAwLCAyMTUsIDIyNSwgMjM1LCAKLSAgICAyMDYsIDIyNCwgMTgwLCAyMjIsIDI0MiwgMjM1LCAyMDYsIDIyNCwgMTgwLCAyMTAsIDE2MCwgMTg3LCAyMjMsIDkwLCAyNDksIAotICAgIDIwOSwgMjU0LCAxMzQsIDE3NywgMjQ5LCAxNjUsIDIzNSwgMTk5LCAyLCAyNDcsIDEyMCwgMjE0LCAxNzYsIDIsIDIzMCwgCi0gICAgMTgyLCA1MCwgMjE0LCAxNzYsIDIsIDIyNiwgMTIzLCAyMzUsIDE5OSwgMiwgMjI2LCAxMjMsIDIzNSwgMTk5LCAyLCAyMzIsIAotICAgIDE0NiwgMjU0LCAxMTgsIDIxNCwgMTc2LCAyLCAyMzIsIDE0NiwgMjI2LCAxNTgsIDIxNCwgMTc2LCA3NywgMjM1LCAxOTgsIAotICAgIDIzNSwgMTk5LCA3NywgMjE0LCAxNzUsIDIxNCwgMTc2LCA3NywgMjUyLCAxNDEsIDc3LCAyMzUsIDE5OCwgMjM1LCAxOTksIAotICAgIDc3LCAyNTIsIDE0MSwgNzcsIDIxNCwgMTc1LCAyMTQsIDE3NiwgMjUyLCAzMCwgMjIsIDIzNSwgNjUsIDIsIDIxNCwgMTc1LCAKLSAgICAyMzUsIDE5OSwgMjUyLCAzMCwgMjIsIDIzNSwgNjUsIDIsIDIzNSwgMTk4LCAyNTAsIDAsIDIxNCwgMTc2LCAyLCAyMjAsIAotICAgIDEzMywgMjUwLCAwLCAyMzUsIDE5OSwgMiwgMjIwLCAxMzMsIDUyLCA0MiwgMjM1LCAxOTgsIDUyLCA0MiwgMjE0LCAxNzUsIAotICAgIDI1MCwgMCwgMjE0LCAxNzYsIDIsIDIyMCwgMTM0LCAyMiwgMjE5LCA3NywgMjI0LCAxODAsIDIzMiwgMTQ2LCAyMiwgMiwgCi0gICAgNTksIDQ4LCAyMzIsIDE0NiwgMTc3LCAyLCA1OSwgNDgsIDUyLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDUyLCAyMzIsIDE0NiwgCi0gICAgMjI2LCAxNTgsIDExMywgMjM1LCAyMDAsIDIzMiwgMTQ2LCAyNTQsIDExOCwgMTEzLCAyMzUsIDIwMCwgMjMyLCAxNDYsIAotICAgIDIyNiwgMTU4LCAyMTksIDg1LCAyMzMsIDg1LCAyMjYsIDE1OCwgMjE5LCA4NSwgMjMzLCA4NSwgMjU0LCAxMTgsIDIzMiwgCi0gICAgMTQ2LCAxNzcsIDIyNiwgMTIxLCAyMzIsIDE0NiwgMjU0LCAxMTgsIDIzMiwgMTQ2LCAyMiwgMiwgMjMwLCAyMjQsIDIxOCwgCi0gICAgMTM5LCAyMzIsIDE0NiwgMTc3LCAyLCAyMzAsIDIyNCwgMjE4LCAxMzksIDIzMiwgMTQ2LCAyMiwgMiwgMjAzLCAyNDgsIAotICAgIDE1NiwgMjMyLCAxNDYsIDE3NywgMiwgMjAzLCAyNDgsIDE1NiwgMjMyLCAxNDYsIDIyLCAyLCA1MiwgMjI2LCAxMjMsIDIzMiwgCi0gICAgMTQ2LCAyMiwgMiwgMjE0LCAxODMsIDIzMiwgMTQ2LCAyMiwgMiwgNTIsIDIxNCwgMTgzLCA0LCAyMTMsIDI1MSwgMiwgMjE0LCAKLSAgICAxODMsIDIzMiwgMTQ2LCAxNzcsIDIsIDUyLCAyMjYsIDEyMywgMjMyLCAxNDYsIDE3NywgMiwgNTIsIDIxNCwgMTgzLCAyMTAsIAotICAgIDE2MCwgMTg3LCAyNDcsIDEyOSwgMjU0LCA3OSwgMjEwLCAxNjAsIDE4NywgMjIzLCAxNDgsIDI1NCwgNzksIDI0NSwgOTgsIAotICAgIDUsIDIsIDU5LCA1MSwgMjQwLCAxMDQsIDIsIDU5LCA0OCwgMjE1LCAyMTEsIDIwMywgMjUyLCAxNDEsIDIsIDUyLCA2NywgCi0gICAgOTEsIDIxNSwgMjExLCAyMDMsIDI1MiwgMTQxLCAyLCAyMTUsIDIxMSwgNjcsIDkxLCAyMTYsIDg5LCAyMjYsIDE2OCwgMiwgCi0gICAgNTksIDQ4LCAyMTYsIDg5LCAyMjYsIDE2OCwgMiwgMjIyLCAyMjgsIDI0NywgMTE4LCAyMTksIDE2MiwgMjMwLCAxODIsIAotICAgIDIxOSwgMTYxLCAyNDksIDE5OSwgMiwgNTksIDQ4LCAyNDUsIDk4LCAyLCAyNTMsIDIxNiwgMjU0LCAxNDgsIDEyOCwgMjE2LCAKLSAgICA0MiwgMiwgMjUwLCAzMSwgMjU1LCAxNCwgMjU0LCA0OCwgMTI4LCAxNzcsIDEyOCwgMTExLCAyNDUsIDk4LCA1LCA3NywgOTYsIAotICAgIDUwLCA5NiwgNSwgNzcsIDI0NSwgOTgsIDUwLCAyNDUsIDk4LCA1LCA3NywgMjE2LCA4OSwgMjI2LCAxNjcsIDUyLCAyNDksIAotICAgIDIyNywgMjQ1LCA5OSwgMTEzLCAyNDksIDE5NCwgMjQ1LCA5OCwgMjE5LCAxNzYsIDEzNCwgMjQ5LCAxOTQsIDI0NSwgOTgsIAotICAgIDIxOSwgMTc2LCAyNDUsIDk4LCA1LCAyLCAxMTMsIDE3MCwgNzcsIDIyLCAxMTMsIDE3MCwgNTEsIDI0NSwgOTQsIDIsIDI0NCwgCi0gICAgMTEsIDE3MCwgNDgsIDIzMywgMTUsIDIsIDI1MCwgMzYsIDIzNSwgMjE1LCAyNDIsIDEzMCwgMiwgMjUwLCAzNiwgMjM1LCAKLSAgICAyMTUsIDIzMywgMTUsIDIsIDIyNCwgMTMsIDE2NCwgNDgsIDI0MiwgMTMwLCAyLCAyMjQsIDEzLCAxNjQsIDQ4LCAyMzMsIAotICAgIDE1LCAxNzcsIDIxOSwgOTcsIDEyOCwgMTExLCAyNDIsIDEzMCwgMTc3LCAyMTksIDk3LCAxMjgsIDExMSwgMjMzLCAxNSwgCi0gICAgMTc3LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDIsIDU5LCAyMzUsIDIxNSwgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAKLSAgICAyMTYsIDQyLCAyLCA1OSwgMjM1LCAyMTUsIDIzMywgMTUsIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgNDgsIAotICAgIDI0MiwgMTMwLCAxNzcsIDIxOSwgOTcsIDEyOCwgMjE2LCA0MiwgMiwgNTksIDQ4LCAyMzMsIDE1LCAxNzcsIDIxOSwgOTcsIAotICAgIDEyOCwgMjE2LCA0MiwgMiwgNTksIDc3LCAyMjIsIDI1MSwgMjQyLCAxMzAsIDE3NywgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAKLSAgICAyLCA1OSwgNzcsIDIzMywgNDYsIDIzMywgMTUsIDE3NywgMjU0LCA0OSwgMjQyLCAxMzAsIDE3NywgMjU0LCA0OSwgMjMzLCAKLSAgICAxNSwgMjIsIDIxOSwgMTUzLCAyMjgsIDUyLCAxMjgsIDExMSwgMjQyLCAxMzAsIDIyLCAyMTksIDE1MywgMjI4LCA1MiwgCi0gICAgMTI4LCAxMTEsIDIzMywgMTUsIDIyLCAyMjgsIDUyLCAyNTQsIDQ5LCAyNDIsIDEzMCwgMjIsIDIyOCwgNTIsIDI1NCwgNDksIAotICAgIDIzMywgMTUsIDc3LCAyNDYsIDExMSwgMTI4LCA3NywgMjQyLCAxMjksIDI0MiwgMTMwLCA3NywgMjQ2LCAxMTEsIDEyOCwgCi0gICAgNzcsIDIzMywgMTQsIDIzMywgMTUsIDc3LCAyMTksIDE2MiwgMTc3LCAyNDUsIDk5LCAyNDIsIDEzMCwgNzcsIDIxOSwgMTYyLCAKLSAgICAxNzcsIDI0NSwgOTksIDIzMywgMTUsIDc3LCAyMTksIDE2MiwgNzcsIDI0MiwgMTI5LCAyNDIsIDEzMCwgNzcsIDIxOSwgCi0gICAgMTYyLCA3NywgMjMzLCAxNCwgMjMzLCAxNSwgNzcsIDI0MiwgMTMwLCA3NywgMjQ2LCAxMTEsIDI0NSwgOTksIDI0MiwgMTMwLCAKLSAgICA3NywgMjMzLCAxNSwgNzcsIDI0NiwgMTExLCAyNDUsIDk5LCAyMzMsIDE1LCA3NywgMjE5LCA5NywgMTI4LCA3NywgMjQyLCAKLSAgICAxMzAsIDc3LCAyMTksIDk3LCAyNDUsIDk5LCAyNDIsIDEzMCwgNzcsIDIxOSwgOTcsIDEyOCwgNzcsIDIzMywgMTUsIDc3LCAKLSAgICAyMTksIDk3LCAyNDUsIDk5LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAxNCwgMjE5LCA5NywgMTI4LCAyMTYsIAotICAgIDQyLCAxNzcsIDI0MiwgMTI5LCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDE3NywgMjMzLCAxNSwgMiwgNTksIDIzNSwgMjE1LCAKLSAgICAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIDE3NywgMjQyLCAxMzAsIDIsIDU5LCAyMzUsIDIxNSwgMjQ2LCAxMTEsIDEyOCwgCi0gICAgMjE2LCA0MiwgMTc3LCAyMzMsIDE0LCAyNDYsIDExMSwgMTI4LCAyMTYsIDQyLCAxNzcsIDI0MiwgMTI5LCAyNDYsIDExMSwgCi0gICAgMjE5LCA5NywgMTI4LCAyMTYsIDQyLCAxNzcsIDIzMywgMTQsIDI0NiwgMTExLCAyMTksIDk3LCAxMjgsIDIxNiwgNDIsIAotICAgIDE3NywgMjQyLCAxMjksIDIxOSwgMTYyLCAxNzcsIDIzMywgMTQsIDIxOSwgMTYyLCAxNzcsIDI0MiwgMTI5LCAyMTksIDE2MiwgCi0gICAgNzcsIDIzMywgMTUsIDc3LCAyNDUsIDk4LCA1MCwgMjE5LCAxNjIsIDc3LCAyNDIsIDEzMCwgNzcsIDI0NSwgOTgsIDUwLCAKLSAgICA1MiwgMjI5LCA5MSwgMjMzLCAxNCwgNTIsIDIyOSwgOTEsIDI0MiwgMTI5LCA1MiwgMjI5LCA5MSwgMjMzLCAxNSwgMiwgCi0gICAgMjE0LCAxODMsIDI0MiwgMTMwLCAyMjYsIDEyMSwgMjMzLCAxNCwgMjQyLCAxMzAsIDI1MiwgMzAsIDIzMywgMTQsIDIzMywgCi0gICAgMTUsIDI1MCwgMCwgMjUxLCA3OCwgMjQ5LCA5MiwgMjQyLCAxMzAsIDI1MCwgMCwgMjUxLCA3OCwgMjQ5LCA5MiwgMjMzLCAKLSAgICAxNSwgMjUwLCAwLCAyNTEsIDc4LCAyNDksIDkzLCA3NywgMjE5LCA5NywgMjQ1LCA5OSwgMjQyLCAxMzAsIDI1MCwgMCwgCi0gICAgMjUxLCA3OCwgMjQ5LCA5MywgNzcsIDIxOSwgOTcsIDI0NSwgOTksIDIxOSwgNzgsIDIxNiwgMjAwLCAyMzMsIDgzLCAyMTYsIAotICAgIDIwMCwgMjE5LCA3OCwgMjE2LCAyMDEsIDE3NywgMTI4LCAxMTEsIDIzMywgODMsIDIxNiwgMjAxLCAxNzcsIDEyOCwgMTExLCAKLSAgICAyNDUsIDk4LCA1LCAyLCAyNTEsIDEwOCwgNDgsIDIyNCwgMjAzLCA3NywgMjE5LCAxNTMsIDI0NSwgOTgsIDUwLCAyMTgsIAotICAgIDU2LCA3NywgMjE5LCAxNTMsIDI0NSwgOTgsIDUwLCAyMjQsIDIwMywgNzcsIDIxOSwgMTUzLCAyMjgsIDUyLCAxMjgsIDExMSwgCi0gICAgMjE4LCA1NiwgNzcsIDIxOSwgMTUzLCAyMjgsIDUyLCAxMjgsIDExMSwgMjI0LCAyMDMsIDc3LCAyNDUsIDk4LCA1MCwgMjE4LCAKLSAgICA1NiwgNzcsIDI0NSwgOTgsIDUwLCAyMjQsIDIwMywgNzcsIDIyOCwgNTIsIDEyOCwgMTExLCAyMTgsIDU2LCA3NywgMjI4LCAKLSAgICA1MiwgMTI4LCAxMTEsIDIyNCwgMjAzLCA3NywgMjU0LCAxNDgsIDEyOCwgMTExLCAyMTgsIDU2LCA3NywgMjU0LCAxNDgsIAotICAgIDEyOCwgMTExLCAyMjQsIDIwMywgNzcsIDIyOCwgNTIsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE4LCA1NiwgNzcsIDIyOCwgCi0gICAgNTIsIDI1NCwgMTQ4LCAxMjgsIDExMSwgNTIsIDIyNCwgMjAyLCA1MiwgMjE4LCA1NSwgMjE4LCA2NCwgMiwgMjQ3LCAxMjAsIAotICAgIDIxOCwgMjIsIDIsIDI0NywgMTIwLCAyMTgsIDY0LCAyLCA5NiwgNSwgNTEsIDIxOCwgMjIsIDIsIDk2LCA1LCA1MSwgMjE4LCAKLSAgICA2NCwgMiwgMjMwLCA4NCwgNSwgNTEsIDIxOCwgMjIsIDIsIDIzMCwgODQsIDUsIDUxLCAyMTgsIDY0LCA2NCwgMTc3LCAxMjgsIAotICAgIDIxNiwgNDIsIDIsIDU5LCA0OCwgMjE4LCAyMiwgNjQsIDE3NywgMTI4LCAyMTYsIDQyLCAyLCA1OSwgNDgsIDIxOCwgNjQsIAotICAgIDY0LCA3NywgMjQ1LCA5OCwgNTAsIDIxOCwgMjIsIDY0LCA3NywgMjQ1LCA5OCwgNTAsIDIxOCwgNjQsIDY0LCA3NywgMjE2LCAKLSAgICA4OSwgMjI2LCAxNjcsIDIxOCwgMjIsIDY0LCA3NywgMjE2LCA4OSwgMjI2LCAxNjcsIDIxOCwgNjQsIDY0LCA3NywgMjU0LCAKLSAgICAxNDgsIDEyOCwgMTExLCAyMTgsIDIyLCA2NCwgNzcsIDI1NCwgMTQ4LCAxMjgsIDExMSwgMjE4LCA2NCwgNjQsIDc3LCAyMjgsIAotICAgIDUyLCAxMjgsIDExMSwgMjE4LCAyMiwgNjQsIDc3LCAyMjgsIDUyLCAxMjgsIDExMSwgNDIsIDQzLCAyMDQsIDkzLCAyMjYsIAotICAgIDE2NywgNDIsIDQ0LCAyMDQsIDkzLCAyMjYsIDE2NywgMjUwLCAwLCAyMTgsIDYzLCAyNTAsIDAsIDIxOCwgMjEsIDI1MCwgMCwgCi0gICAgMjE4LCA2NCwgMTc3LCAxMjgsIDExMSwgMjUwLCAwLCAyMTgsIDIyLCAxNzcsIDEyOCwgMTExLCAyMTgsIDY0LCA3NywgMjE4LCAKLSAgICAyMSwgMjE4LCAyMiwgNzcsIDIxOCwgNjMsIDIxOCwgNjQsIDc3LCAyMTgsIDYzLCAyMTgsIDIyLCA3NywgMjE4LCAyMSwgCi0gICAgMjE4LCAyMiwgMjUyLCAzMCwgMjE4LCA2MywgMjE4LCAyMiwgMjUyLCAzMCwgMjIsIDIzNSwgNjUsIDI1MSwgNzgsIDI0OCwgCi0gICAgMTU3LCAyLCAyMTgsIDYzLCAyNDUsIDE3MCwgNjQsIDIyNiwgMTcwLCAyNDYsIDEwMywgMjI1LCA0OCwgMiwgMjE3LCAxMiwgCi0gICAgMjE2LCAxMywgMjE1LCAyNDAsIDIzNSwgMTk4LCAyNDQsIDIxLCAyMjgsIDY1LCAyMTksIDI1MSwgNDMsIDIxNywgODcsIAotICAgIDIxOSwgMjUxLCAxMjQsIDIxNywgODcsIDIxOSwgMjUxLCAxMjAsIDIxNywgODcsIDIyNSwgMTcyLCAyLCAyMjIsIDkxLCA2NywgCi0gICAgMjUyLCAxNDEsIDIxNSwgMjExLCA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0MSwgNDMsIDIxNSwgOTMsIDY3LCAyNTIsIAotICAgIDE0MSwgNTIsIDQzLCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQxLCA1MiwgNDMsIDIxNSwgOTMsIDE5OSwgMjQ4LCAxNTcsIAotICAgIDI0MywgMjQzLCA0MywgMjMxLCA2MywgNjQsIDUyLCAyMTMsIDIzOSwgMjE5LCAyNTEsIDEyNCwgMjE3LCA4OCwgMiwgMjI2LCAKLSAgICAxMjMsIDIxOSwgMjUxLCAxMjAsIDIxNywgODgsIDIsIDIxNCwgMTgzLCAyMTksIDI1MSwgMTIwLCAyMTcsIDg4LCA3NywgCi0gICAgMjE5LCAyNTEsIDEyNCwgMjE3LCA4NywgNTIsIDEyNCwgMjE3LCA4NywgNTIsIDEyMCwgMjE3LCA4NywgNTIsIDIxOCwgMTAzLCAKLSAgICAyMjgsIDUyLCA1MCwgMjIzLCA0OSwgNTIsIDIxOCwgMTAzLCAyMjgsIDUyLCA1MCwgMjQ3LCAxMzgsIDIyOCwgNTIsIDI0NywgCi0gICAgMTc1LCAyLCAyMjMsIDQ5LCAyMjksIDEwMSwgMjE5LCA5NSwgNjcsIDIzMiwgMjE0LCAyLCAyNTAsIDM2LCA0OCwgNjcsIAotICAgIDIzMiwgMjE0LCAyLCAyNTAsIDM2LCA1MSwgMTI0LCAyMTcsIDg4LCAyLCAyNTAsIDM2LCA1MSwgMjI2LCA4LCAyLCAyMDMsIAotICAgIDkxLCAyMjYsIDgsIDIsIDIxNiwgODksIDIyNiwgMTY3LCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCAyNTEsIDI0NCwgMjIzLCAKLSAgICA5MSwgMjE1LCAyMTEsIDY3LCAyNTIsIDE0MSwgMiwgMjAzLCA5MSwgMjE1LCAyMTEsIDI0OSwgMjI3LCAyMjYsIDE2NywgCi0gICAgMjE1LCAyMTEsIDIyOSwgOTEsIDIzMywgMTQsIDIxNSwgMjExLCAyMjksIDkxLCAyNDIsIDEyOSwgMjQ2LCAxMTEsIDIxOSwgCi0gICAgOTcsIDIzMywgMTUsIDE3NywgMTI4LCAxMTEsIDI0NiwgMTExLCAyMTksIDk3LCAyNDIsIDEzMCwgMTc3LCAxMjgsIDExMSwgCi0gICAgMjE1LCAyMTEsIDIxOSwgNDcsIDI1MSwgMjQ0LCAyMjMsIDkxLCAyMzMsIDg1LCAyMTUsIDIxMSwgNjcsIDI1MiwgMTQxLCAKLSAgICAyMjYsIDE2NywgNTIsIDIxOSwgNDcsIDIyNiwgMTY3LCA3MSwgNjcsIDEzMCwgMjMwLCAyNCwgNzEsIDY3LCAxMzAsIDIyOCwgCi0gICAgNTYsIDI0NSwgMjIwLCA3MSwgNzQsIDIyOCwgNTYsIDIxMiwgOSwgNzEsIDc0LCAyMTksIDI4LCAyNDUsIDIyMCwgNzEsIDc0LCAKLSAgICAyMTksIDI4LCAyMTIsIDksIDcxLCA3NCwgNDMsIDQ0LCA3MSwgNzQsIDE0MCwgODUsIDc0LCAyMTQsIDE1MywgODUsIDc0LCAKLSAgICAyNDYsIDEwNCwgODUsIDc0LCAyMjgsIDU2LCAyNDUsIDIyMCwgODUsIDc0LCAyMjgsIDU2LCAyMTIsIDksIDg1LCA3NCwgCi0gICAgMjE5LCAyOCwgMjQ1LCAyMjAsIDg1LCA3NCwgMjE5LCAyOCwgMjEyLCA5LCA4NSwgNzQsIDQzLCA0NCwgODUsIDc0LCAxMjAsIAotICAgIDEyNCwgODUsIDc0LCA5NywgODAsIDIsIDIxNiwgNzcsIDI0NiwgMTAzLCA5NywgODAsIDIsIDIxNiwgNzcsIDIxNCwgMTUyLCAKLSAgICAxNDAsIDgwLCAyLCAyMTYsIDc3LCAyNDYsIDEwMywgMTQwLCA4MCwgMiwgMjE2LCA3NywgMjE0LCAxNTIsIDQyLCAyLCAyMTYsIAotICAgIDE0LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjUxLCAxNzUsIDE2MywgMjUxLCAyMjEsIDQyLCAyLCAyMTQsIDE2MCwgNDQsIAotICAgIDI0NywgMjU1LCAxNjMsIDI1MSwgMjIxLCA0MiwgMiwgMjMyLCAxMDgsIDQzLCAyNDcsIDI1NSwgMTYzLCAyNTEsIDIyMSwgCi0gICAgMjQ3LCAyNDksIDIsIDQzLCAxNjMsIDI1MSwgMjIxLCAyNDcsIDI0OSwgMiwgNDQsIDE2MywgMjUxLCAyMjEsIDI0NywgMjQ5LCAKLSAgICAyLCAyMTYsIDE0LCAxNjMsIDI1MSwgMjIxLCAyNDcsIDI0OSwgMiwgMjUxLCAxNzUsIDE2MywgMjUxLCAyMjEsIDI0NiwgCi0gICAgMTE4LCAyMTgsIDIzNCwgODUsIDIzMywgODUsIDIxOCwgMjM0LCA3MSwgMjMzLCA4NSwgMjE4LCAyMzQsIDg1LCAyMTMsIAotICAgIDE4NywgNCwgMjE4LCAyMzQsIDcxLCAyMTMsIDE4NywgNCwgMjE4LCAyMzQsIDg1LCAyMjUsIDE5MCwgNzEsIDIyNSwgMTkwLCAKLSAgICA3MSwgMjQxLCAxOTMsIDg1LCAyNDEsIDE5MywgMjAzLCA4NSwgMjQxLCAxOTMsIDg1LCAyMzMsIDg1LCAyNTAsIDM1LCA4NSwgCi0gICAgMjMxLCA4MiwgMjQ3LCAyNDgsIDcxLCAyMzEsIDgyLCAyNDcsIDI0OCwgODUsIDIzMSwgODIsIDIzMiwgMTA0LCA3MSwgMjMxLCAKLSAgICA4MiwgMjMyLCAxMDQsIDg1LCA0LCAyNDcsIDI0OCwgODUsIDQsIDIzMiwgMTA0LCA3MSwgNCwgMjMyLCAxMDQsIDg1LCAyMDMsIAotICAgIDI0NSwgMTY0LCA3MSwgMjAzLCAyNDUsIDE2NCwgODUsIDY3LCAyNDUsIDE2NCwgNzEsIDY3LCAyNDUsIDE2NCwgNDMsIDgwLCAKLSAgICAyLCA0LCAyNTAsIDM1LCAxMzQsIDE0MCwgMjUzLCAyNDcsIDQzLCA4MCwgMiwgMzcsIDIyNSwgMjIsIDE5OSwgMTQwLCAyMTgsIAotICAgIDIzMCwgNzQsIDE0MCwgMjE1LCA1OCwgODAsIDIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgNTIsIDY3LCA5MSwgCi0gICAgMTQwLCAyMTUsIDU4LCA4MCwgMjQzLCAyNDMsIDEzMCwgMTQwLCAyMTUsIDU4LCAyMTUsIDIxMSwgMjQ4LCAxNTcsIDc0LCAKLSAgICAxNDAsIDgwLCAyLCAyNDYsIDExOCwgMjE4LCAxMzksIDE0MCwgODAsIDIsIDIxNywgNzgsIDIsIDY3LCA5MSwgMTQwLCA4MCwgCi0gICAgMiwgMjE3LCA3OCwgMiwgNTIsIDY3LCA5MSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3NywgMTQwLCAyMTUsIDU4LCAKLSAgICA4MCwgMiwgMjE3LCA3OCwgMiwgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAyLCA1MiwgNjcsIDkxLCAKLSAgICAxNDAsIDgwLCAyMTYsIDEzOSwgMjExLCAxNzgsIDIxMiwgMzYsIDgwLCAyMjUsIDcsIDI0NywgMTk1LCAyMzMsIDQ2LCAyNDUsIAotICAgIDk4LCA1LCA3NywgMTQwLCA3NCwgMjIzLCA1MCwgMjE2LCA4OSwgMjI2LCAxNjgsIDc3LCAxNDAsIDc0LCAxNDAsIDgwLCA3NywgCi0gICAgMjIzLCA1MCwgMjU0LCAxNDgsIDEyOCwgMTExLCA5NywgODAsIDIxNiwgMTM5LCAyNDIsIDEyOSwgOTcsIDgwLCAyMTYsIAotICAgIDEzOSwgMjE4LCAyMSwgMTQwLCAyMjQsIDI0LCA3NCwgOTcsIDIyNCwgMjQsIDc0LCAyMjMsIDUwLCAyMTYsIDg5LCAyMjYsIAotICAgIDE2OCwgNzcsIDk3LCA3NCwgOTcsIDgwLCA3NywgMjIzLCA1MCwgMjU0LCAxNDgsIDEyOCwgMTExLCAyMTYsIDg5LCAyMjYsIAotICAgIDE2OCwgNzcsIDE0MCwgNzQsIDE0MCwgODAsIDc3LCAyNTQsIDE0OCwgMTI4LCAxMTEsIDE0MCwgODAsIDc3LCAyMjMsIDUwLCAKLSAgICAyMTYsIDg5LCAyMjYsIDE2NywgOTcsIDgwLCA3NywgMjIzLCA1MCwgMjE2LCA4OSwgMjI2LCAxNjcsIDcxLCAyMzEsIDgyLCAKLSAgICAyMTgsIDE1NiwgODUsIDQsIDIxOCwgMTU2LCA3MSwgNCwgMjE4LCAxNTYsIDg1LCAyMjIsIDI0NywgMjI1LCAxOTAsIDcxLCAKLSAgICAyMjIsIDI0NywgMjI1LCAxOTAsIDExNCwgMjMzLCA4NSwgMjUwLCAzNSwgMTE0LCAyMjYsIDEyNCwgMiwgMjI2LCAxMjQsIAotICAgIDIzNSwgMjE1LCAxMTQsIDI1MCwgMzYsIDIsIDI1MCwgMzYsIDIzNSwgMjE1LCAxMTQsIDI1MCwgMzUsIDExNCwgMzcsIDIyMSwgCi0gICAgMjU0LCAxNDUsIDYsIDEsIDI1MywgMTU5LCAxNDUsIDYsIDEsIDI1MSwgMTE3LCAxNDUsIDYsIDEsIDIxMywgMjUzLCAxNDUsIAotICAgIDYsIDEsIDI0MiwgMTg1LCAxNDUsIDYsIDEsIDI0NywgMTQwLCAxNDUsIDYsIDEsIDIxMSwgMjEsIDE0NSwgNiwgMSwgMjEwLCAKLSAgICA2OCwgMTQ1LCA2LCAxLCAyNDYsIDM0LCAxNDUsIDYsIDEsIDIxMCwgOTEsIDE0NSwgNiwgMSwgMjM1LCAxNDgsIDE0NSwgNiwgCi0gICAgMSwgNjUsIDIzNSwgMTQ4LCAxNDUsIDYsIDEsIDczLCAxNDUsIDYsIDEsIDI0NywgMTYwLCAxNDUsIDYsIDEsIDIzNCwgMjQwLCAKLSAgICAxNDUsIDYsIDEsIDIzMiwgMTg2LCAxNDUsIDYsIDEsIDIzMCwgMjksIDE0NSwgNiwgMSwgMjI5LCAxOTEsIDE0NSwgNiwgMSwgCi0gICAgMjI2LCAxODUsIDE0NSwgNiwgMSwgMjI1LCA0LCAxNDUsIDYsIDEsIDIyMiwgMjI3LCAxNDUsIDYsIDEsIDIxOSwgODMsIAotICAgIDE0NSwgNiwgMSwgMjE1LCA4MSwgMTQ1LCA2LCAxLCAyMTQsIDIwMSwgMTQ1LCA2LCAxLCAyNDMsIDI0NiwgMTQ1LCA2LCAxLCAKLSAgICAyNDEsIDE5OSwgMTQ1LCA2LCAxLCAyMjYsIDEzNSwgMTQ1LCA2LCAxLCAyMjUsIDIyMSwgMTQ1LCA2LCAxLCAyMTksIDIyOCwgCi0gICAgMTQ1LCA2LCAxLCAyMTUsIDE2NywgMTQ1LCA2LCAxLCAyNTAsIDc1LCAxNDUsIDYsIDEsIDIyMCwgMTAyLCAxNDUsIDYsIDEsIAotICAgIDIxMSwgMjcsIDE0NSwgNiwgMSwgMjExLCAyOSwgMTQ1LCA2LCAxLCAyMTEsIDU3LCAxNDUsIDYsIDEsIDIxOCwgMjUzLCAKLSAgICAxNjIsIDE0NSwgNiwgMSwgMjEwLCAyMTIsIDE0NSwgNiwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNiwgMSwgNCwgMjEwLCAxODQsIAotICAgIDIsIDIxNywgNzcsIDE0NSwgNiwgMSwgMjEwLCAyNDQsIDE0NSwgNiwgMSwgMjM1LCAxODQsIDQsIDIxMCwgMTgzLCAxNDUsIAotICAgIDYsIDEsIDI1MSwgMjQ5LCAyMTAsIDE4MywgMTQ1LCA2LCAxLCAyMzUsIDE4NCwgMjUxLCAyNDksIDIxMCwgMTgzLCAxNDUsIAotICAgIDYsIDEsIDI0NCwgODIsIDE0NSwgNiwgMSwgMjM1LCAxNDYsIDE0NSwgNiwgMSwgMjE5LCAyMjcsIDE0NSwgNiwgMSwgMjE1LCAKLSAgICAyMDIsIDYxLCAxNDUsIDYsIDEsIDIzMywgNzUsIDIzMCwgMjksIDE0NSwgNCwgMSwgMjUzLCAxNTksIDE0NSwgNCwgMSwgCi0gICAgMjUxLCAxMTcsIDE0NSwgNCwgMSwgMjEzLCAyNTMsIDE0NSwgNCwgMSwgMjQyLCAxODUsIDE0NSwgNCwgMSwgMjQ3LCAxNDAsIAotICAgIDE0NSwgNCwgMSwgMjExLCAyMSwgMTQ1LCA0LCAxLCAyMTAsIDY4LCAxNDUsIDQsIDEsIDI0NiwgMzQsIDE0NSwgNCwgMSwgCi0gICAgMjEwLCA5MSwgMTQ1LCA0LCAxLCAyMzUsIDE0OCwgMTQ1LCA0LCAxLCA2NSwgMjM1LCAxNDgsIDE0NSwgNCwgMSwgNzMsIAotICAgIDE0NSwgNCwgMSwgMjQ3LCAxNjAsIDE0NSwgNCwgMSwgMjM0LCAyNDAsIDE0NSwgNCwgMSwgMjMyLCAxODYsIDE0NSwgNCwgMSwgCi0gICAgMjMwLCAyOSwgMTQ1LCA0LCAxLCAyMjksIDE5MSwgMTQ1LCA0LCAxLCAyMjYsIDE4NSwgMTQ1LCA0LCAxLCAyMjUsIDQsIAotICAgIDE0NSwgNCwgMSwgMjIyLCAyMjcsIDE0NSwgNCwgMSwgMjE5LCA4MywgMTQ1LCA0LCAxLCAyMTUsIDgxLCAxNDUsIDQsIDEsIAotICAgIDIxNCwgMjAxLCAxNDUsIDQsIDEsIDI0MywgMjQ2LCAxNDUsIDQsIDEsIDI0MSwgMTk5LCAxNDUsIDQsIDEsIDIyNiwgMTM1LCAKLSAgICAxNDUsIDQsIDEsIDIyNSwgMjIxLCAxNDUsIDQsIDEsIDIxOSwgMjI4LCAxNDUsIDQsIDEsIDIxNSwgMTY3LCAxNDUsIDQsIDEsIAotICAgIDI1MCwgNzUsIDE0NSwgNCwgMSwgMjIwLCAxMDIsIDE0NSwgNCwgMSwgMjExLCAyNywgMTQ1LCA0LCAxLCAyMTEsIDI5LCAKLSAgICAxNDUsIDQsIDEsIDIxMSwgNTcsIDE0NSwgNCwgMSwgMjE4LCAyNTMsIDE2MiwgMTQ1LCA0LCAxLCAyMTAsIDIxMiwgMTQ1LCAKLSAgICA0LCAxLCA0LCAyMTAsIDE4MywgMTQ1LCA0LCAxLCA0LCAyMTAsIDE4NCwgMiwgMjE3LCA3NywgMTQ1LCA0LCAxLCAyMTAsIAotICAgIDI0NCwgMTQ1LCA0LCAxLCAyMzUsIDE4NCwgNCwgMjEwLCAxODMsIDE0NSwgNCwgMSwgMjUxLCAyNDksIDIxMCwgMTgzLCAKLSAgICAxNDUsIDQsIDEsIDIzNSwgMTg0LCAyNTEsIDI0OSwgMjEwLCAxODMsIDE0NSwgNCwgMSwgMjQ0LCA4MiwgMTQ1LCA0LCAxLCAKLSAgICAyMzUsIDE0NiwgMTQ1LCA0LCAxLCAyMTksIDIyNywgMTQ1LCA0LCAxLCAyMTUsIDIwMiwgNjEsIDE0NSwgNCwgMSwgMjMzLCAKLSAgICA3NSwgMjMwLCAyOSwgNywgNiwgMSwgMjMzLCAxNDksIDIsIDUyLCAxMzAsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCA1MiwgCi0gICAgMTMwLCA3LCA2LCAxLCAyMzMsIDE0OSwgMiwgMjMwLCAyMjQsIDE4MiwgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDkxLCA3LCA2LCAKLSAgICAxLCAyMjMsIDIyNCwgMiwgMjE3LCA3NywgNywgNCwgMSwgMTE1LCAyLCA5MSwgNywgNCwgMSwgMjE3LCAxNTMsIDIsIDI0NywgCi0gICAgMjU1LCA5MSwgNywgNiwgMSwgMjQyLCA2MSwgMiwgMjQ4LCAzOSwgNywgNCwgMSwgMjQyLCA2MSwgMiwgMjQ4LCAzOSwgNywgCi0gICAgNiwgMSwgMjM1LCAyNCwgMiwgMjQ4LCAzOSwgNywgNCwgMSwgMjM1LCAyNCwgMiwgMjQ4LCAzOSwgNywgNiwgMSwgMjEwLCAKLSAgICAxNjAsIDIsIDI0OCwgMzksIDcsIDQsIDEsIDIxMCwgMTYwLCAyLCAyNDgsIDM5LCA3LCA2LCAxLCAyNTQsIDE0MywgNywgNiwgCi0gICAgMSwgMjMyLCA1MCwgMiwgMTAzLCA3LCA2LCAxLCAyMTUsIDk0LCA2MSwgNywgNiwgMSwgMjE1LCA5NCwgMjU0LCAxNDMsIDcsIAotICAgIDQsIDEsIDIxNCwgMTA2LCAyLCA0NCwgMTAzLCA3LCA2LCAxLCAyMTIsIDk5LCAyLCAxMDMsIDcsIDQsIDEsIDIxMiwgOTksIAotICAgIDIsIDEwMywgNywgNCwgMSwgMjE0LCAxMDYsIDIsIDI0OSwgMTAwLCA3LCA2LCAxLCAxNjMsIDI0MiwgNjAsIDcsIDQsIDEsIAotICAgIDE2MywgMjQyLCA2MCwgNywgNCwgMSwgMjE3LCA3NSwgMjI1LCAxMzMsIDcsIDQsIDEsIDE2MCwgMiwgMjI4LCA1MCwgNywgNCwgCi0gICAgMSwgMjE1LCA5NCwgMjIzLCAyMjQsIDIsIDIxNywgNzcsIDcsIDQsIDEsIDE0NCwgMiwgMTIxLCAyMjIsIDIzNCwgMjM1LCAKLSAgICAyMTUsIDcsIDEsIDQsIDYsIDIxNSwgOTQsIDc1LCA3LCAyMTgsIDY1LCA0LCAxLCAyMzUsIDE0NCwgNTgsIDEsIDYsIDIxNCwgCi0gICAgMTA1LCA3LCA2LCAxLCAyMjIsIDkyLCAyLCAyMTcsIDI1MCwgMjE3LCA3NywgNywgNiwgMSwgMjEwLCAxNjAsIDIsIDIxNywgCi0gICAgMjUwLCAyMTcsIDc3LCA4MSwgNiwgMSwgMjU0LCAxNjQsIDgxLCA0LCAxLCAyNTQsIDE2NCwgODEsIDYsIDEsIDIxMywgMTczLCAKLSAgICA4MSwgNCwgMSwgMjEzLCAxNzMsIDgxLCA2LCAxLCAyNDMsIDEwNywgODEsIDQsIDEsIDI0MywgMTA3LCA4MSwgNiwgMSwgCi0gICAgMjQ4LCAxOTEsIDgxLCA0LCAxLCAyNDgsIDE5MSwgODEsIDYsIDEsIDI0NSwgMTk0LCA4MSwgNCwgMSwgMjQ1LCAxOTQsIDgxLCAKLSAgICA2LCAxLCAyMTksIDMzLCA4MSwgNCwgMSwgMjE5LCAzMywgODEsIDYsIDEsIDIxMCwgMTAxLCA4MSwgNCwgMSwgMjEwLCAxMDEsIAotICAgIDgxLCA2LCAxLCAyNDEsIDI0OCwgODEsIDQsIDEsIDI0MSwgMjQ4LCA4MSwgNiwgMSwgMjE2LCAxNzcsIDgxLCA0LCAxLCAKLSAgICAyMTYsIDE3NywgODEsIDYsIDEsIDI0MCwgMTE2LCA4MSwgNCwgMSwgMjQwLCAxMTYsIDgxLCA2LCAxLCAyMzQsIDIyNywgODEsIAotICAgIDQsIDEsIDIzNCwgMjI3LCA4MSwgNiwgMSwgMjMzLCA3MiwgODEsIDQsIDEsIDIzMywgNzIsIDgxLCA2LCAxLCAyMzAsIDIzMCwgCi0gICAgODEsIDQsIDEsIDIzMCwgMjMwLCA4MSwgNiwgMSwgMjI4LCAyMzMsIDgxLCA0LCAxLCAyMjgsIDIzMywgODEsIDYsIDEsIAotICAgIDIzMywgMjMzLCA4MSwgNCwgMSwgMjMzLCAyMzMsIDgxLCA2LCAxLCA3NiwgODEsIDQsIDEsIDc2LCA4MSwgNiwgMSwgMjI1LCAKLSAgICAxMDgsIDgxLCA0LCAxLCAyMjUsIDEwOCwgODEsIDYsIDEsIDIyMiwgMjExLCA4MSwgNCwgMSwgMjIyLCAyMTEsIDgxLCA2LCAKLSAgICAxLCAyMTksIDE2NSwgODEsIDQsIDEsIDIxOSwgMTY1LCA4MSwgNiwgMSwgMjE3LCA0MSwgODEsIDQsIDEsIDIxNywgNDEsIAotICAgIDgxLCA2LCAxLCAyMTQsIDIyOSwgODEsIDQsIDEsIDIxNCwgMjI5LCA4MSwgNiwgMSwgMjQ0LCAxMjEsIDgxLCA0LCAxLCAKLSAgICAyNDQsIDEyMSwgODEsIDYsIDEsIDIzNCwgMTEyLCA4MSwgNCwgMSwgMjM0LCAxMTIsIDgxLCA2LCAxLCAyMjQsIDE2MSwgODEsIAotICAgIDQsIDEsIDIyNCwgMTYxLCA4MSwgNiwgMSwgMjI2LCAxNzgsIDgxLCA0LCAxLCAyMjYsIDE3OCwgODEsIDYsIDEsIDI0NywgCi0gICAgMjUzLCAyNTQsIDE3MCwgODEsIDQsIDEsIDI0NywgMjUzLCAyNTQsIDE3MCwgODEsIDYsIDEsIDU1LCA4MSwgMjU0LCAxOTYsIAotICAgIDgxLCA0LCAxLCA1NSwgODEsIDI1NCwgMTk2LCA4MSwgNiwgMSwgMjQ5LCAxMTUsIDI0NSwgMTk0LCA4MSwgNCwgMSwgMjQ5LCAKLSAgICAxMTUsIDI0NSwgMTk0LCA4MSwgNiwgMSwgMjQ3LCAyNTMsIDIzNCwgMjI3LCA4MSwgNCwgMSwgMjQ3LCAyNTMsIDIzNCwgCi0gICAgMjI3LCA4MSwgNiwgMSwgMjQ3LCAyNTMsIDIyOCwgMjMzLCA4MSwgNCwgMSwgMjQ3LCAyNTMsIDIyOCwgMjMzLCA4MSwgNiwgCi0gICAgMSwgMjQ5LCAxMTUsIDIyOCwgMjMzLCA4MSwgNCwgMSwgMjQ5LCAxMTUsIDIyOCwgMjMzLCA4MSwgNiwgMSwgNTUsIDgxLCAKLSAgICAyMjYsIDE3OCwgODEsIDQsIDEsIDU1LCA4MSwgMjI2LCAxNzgsIDgxLCA2LCAxLCAyMjEsIDI0NiwgODEsIDQsIDEsIDIyMSwgCi0gICAgMjQ2LCA4MSwgNiwgMSwgMjQ5LCAxMjgsIDIyMCwgNTUsIDgxLCA0LCAxLCAyNDksIDEyOCwgMjIwLCA1NSwgODEsIDYsIDEsIAotICAgIDU1LCA4MSwgMjIwLCA1NSwgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCA1NSwgODEsIDYsIDEsIDU1LCA4MSwgMjQ1LCA3NSwgCi0gICAgODEsIDQsIDEsIDU1LCA4MSwgMjQ1LCA3NSwgODEsIDYsIDEsIDI1NCwgMTgyLCAyMzQsIDExNywgODEsIDQsIDEsIDI1NCwgCi0gICAgMTgyLCAyMzQsIDExNywgODEsIDYsIDEsIDI0NywgMjUzLCAyNDEsIDQ1LCA4MSwgNCwgMSwgMjQ3LCAyNTMsIDI0MSwgNDUsIAotICAgIDgxLCA2LCAxLCA1NSwgODEsIDI0MSwgNDUsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgNDUsIDgxLCA2LCAxLCA1NSwgODEsIAotICAgIDE2MiwgODEsIDQsIDEsIDU1LCA4MSwgMTYyLCA4MSwgNiwgMSwgMjMzLCAxNDgsIDE2MiwgODEsIDQsIDEsIDIzMywgMTQ4LCAKLSAgICAxNjIsIDgxLCA2LCAxLCA1NSwgODEsIDI0MSwgMjE3LCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDIxNywgODEsIDYsIDEsIAotICAgIDU1LCA4MSwgMjQxLCAyNTEsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgMjUxLCA4MSwgNiwgMSwgNTUsIDgxLCAyNDMsIDEwMiwgCi0gICAgODEsIDQsIDEsIDU1LCA4MSwgMjQzLCAxMDIsIDgxLCA2LCAxLCA1NSwgODEsIDI0NywgMTYzLCA4MSwgNCwgMSwgNTUsIDgxLCAKLSAgICAyNDcsIDE2MywgODEsIDYsIDEsIDU1LCA4MSwgMjIwLCAyMiwgODEsIDQsIDEsIDU1LCA4MSwgMjIwLCAyMiwgODEsIDYsIDEsIAotICAgIDU1LCAyMjcsIDIwOCwgMjIwLCAyMiwgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjIwLCAyMiwgODEsIDYsIDEsIDU1LCAKLSAgICAyMjcsIDIwOCwgMjI5LCAyNywgODEsIDQsIDEsIDU1LCAyMjcsIDIwOCwgMjI5LCAyNywgODEsIDYsIDEsIDU1LCAyMjcsIAotICAgIDIwOCwgMjI3LCAxNDgsIDgxLCA0LCAxLCA1NSwgMjI3LCAyMDgsIDIyNywgMTQ4LCA4MSwgNiwgMSwgNTUsIDIyNywgMjA4LCAKLSAgICAyMTIsIDM3LCA4MSwgNCwgMSwgNTUsIDIyNywgMjA4LCAyMTIsIDM3LCA4MSwgMTYsIDIzNCwgMjQ2LCA4MSwgMTYsIDIzMCwgCi0gICAgMjMxLCAyMjIsIDIxMSwgODEsIDE2LCAyMjUsIDEwOSwgMjIyLCAyMTEsIDgxLCAxNiwgMjE4LCAxNDcsIDgxLCAxNiwgMjE3LCAKLSAgICA0MiwgMjIyLCAyMTEsIDgxLCAxNiwgMjM0LCAxMTMsIDIyMiwgMjExLCA4MSwgMTYsIDIyMCwgMjMsIDIxOSwgMTY1LCA4MSwgCi0gICAgNiwgMSwgMjQ5LCAxMTUsIDIyMCwgNTUsIDgxLCA0LCAxLCAyNDksIDExNSwgMjIwLCA1NSwgODEsIDYsIDEsIDI0OSwgMTE1LCAKLSAgICAyNDMsIDEwMiwgODEsIDQsIDEsIDI0OSwgMTE1LCAyNDMsIDEwMiwgODEsIDM4LCAyMjgsIDIzNCwgNDgsIDgxLCAzOCwgCi0gICAgMjE4LCAyNDcsIDI1MywgMjI0LCA4MSwgMzgsIDIxOCwgMjQ3LCAyMzMsIDIxLCA4MSwgNiwgMSwgMjUxLCAxOTksIDIzNCwgCi0gICAgMTE3LCA4MSwgNCwgMSwgMjUxLCAxOTksIDIzNCwgMTE3LCA4MSwgNTUsIDIyNywgMjA4LCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDgxLCA1NSwgMjI3LCAyMDgsIDI0NywgMTk3LCAyMjQsIDEzLCA3OCwgODEsIDU1LCAyMjcsIDIwOCwgMjM1LCAyMzcsIDIyNCwgCi0gICAgMTMsIDc4LCA4MSwgNTUsIDIyNywgMjA4LCAyMTMsIDI0MSwgMjQ3LCAxNzIsIDgxLCAyNDQsIDIsIDEyMywgMjQyLCAyNywgCi0gICAgODEsIDI0MywgMjI5LCAyMTgsIDEyOSwgODEsIDIzMCwgMTI0LCAyNDcsIDE3MiwgOTgsIDQsIDEsIDI1NCwgMTIzLCA5OCwgCi0gICAgNCwgMSwgMjUyLCAxNTIsIDk4LCA0LCAxLCAyNDMsIDEwNiwgOTgsIDQsIDEsIDI0NywgMTI4LCA5OCwgNCwgMSwgMjQ1LCAKLSAgICAxNTAsIDk4LCA0LCAxLCAyMTMsIDE2MCwgOTgsIDQsIDEsIDIxMCwgODksIDk4LCA0LCAxLCAyMTcsIDYwLCA5OCwgNCwgMSwgCi0gICAgMjM1LCAyNTUsIDk4LCA0LCAxLCAyMzQsIDIzNCwgOTgsIDQsIDEsIDIzMywgODEsIDk4LCA0LCAxLCAyMzEsIDE4NSwgOTgsIAotICAgIDQsIDEsIDIyOSwgMTk1LCA5OCwgNCwgMSwgMjI2LCAxOTYsIDk4LCA0LCAxLCAyMjYsIDE3LCA5OCwgNCwgMSwgMjEwLCA3OCwgCi0gICAgOTgsIDQsIDEsIDIyMywgMTcxLCA5OCwgNCwgMSwgMjIxLCAyNDMsIDk4LCA0LCAxLCAyMTcsIDUwLCA5OCwgNCwgMSwgMjE0LCAKLSAgICAxOTAsIDk4LCA0LCAxLCAyMjUsIDE0MCwgOTgsIDQsIDEsIDIzNCwgMTIxLCA5OCwgNCwgMSwgMjQyLCAyNDEsIDk4LCA0LCAKLSAgICAxLCAyMjQsIDczLCA5OCwgNCwgMSwgMjIwLCAyMCwgOTgsIDQsIDEsIDI1MCwgOTcsIDk4LCA0LCAxLCAyNTEsIDcsIDk4LCAKLSAgICA0LCAxLCAyMzUsIDEwMCwgOTgsIDQsIDEsIDI1MCwgNDAsIDk4LCA0LCAxLCAyNTAsIDE0MywgOTgsIDQsIDEsIDIxMSwgCi0gICAgMTYzLCA5OCwgNCwgMSwgMjM1LCAxMTEsIDk4LCA0LCAxLCAyNDIsIDQzLCA5OCwgNCwgMSwgMjQxLCAyMzgsIDk4LCA0LCAxLCAKLSAgICAyNDEsIDE3NSwgOTgsIDQsIDEsIDIxMiwgMjIsIDk4LCA0LCAxLCAyNDIsIDQsIDk4LCA0LCAxLCAyNDEsIDY1LCA5OCwgNCwgCi0gICAgMSwgMjEwLCAyNDYsIDk4LCA0LCAxLCAyNTQsIDIzMiwgMjE2LCAxMDgsIDEsIDE5MSwgMjE2LCAxMDgsIDEsIDIxMSwgOTksIAotICAgIDIxNiwgMTA4LCAxLCAyMTEsIDk4LCAyMTYsIDEwOCwgMSwgMjExLCA4OCwgMjE2LCAxMDgsIDEsIDIxMSwgODYsIDIxNiwgCi0gICAgMTA4LCAxLCAyNTIsIDMyLCAyNTUsIDE2LCAyMTEsIDgxLCAyMTYsIDEwOCwgMSwgMjExLCA4MSwgMjE2LCAxMDgsIDEsIAotICAgIDIxMSwgOTYsIDIxNiwgMTA4LCAxLCAyMTEsIDkzLCAyMTYsIDEwOCwgMSwgMjExLCA5NSwgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgOTQsIDIxNiwgMTA4LCAxLCAyMTEsIDEyLCAyMTYsIDEwOCwgMSwgMjExLCA5MCwgMjE2LCAxMDgsIDEsIDIxMSwgNzksIAotICAgIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCA3OSwgMjE2LCAxMDgsIDEsIDIxMSwgNzYsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDg0LCAyMTYsIDEwOCwgMSwgMjUyLCAzMiwgMjU1LCAxNiwgMjExLCA4NCwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIAotICAgIDg0LCAyMTYsIDEwOCwgMSwgMjExLCA4MywgMjE2LCAxMDgsIDEsIDIxMSwgMTAzLCAyMTYsIDEwOCwgMSwgMjExLCA3NywgCi0gICAgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDc3LCAyMTYsIDEwOCwgMSwgMjExLCA2NiwgMjE2LCAxMDgsIDEsIDIxNSwgCi0gICAgMTE1LCAyMTEsIDY2LCAyMTYsIDEwOCwgMSwgMjExLCA4LCAyMTYsIDEwOCwgMSwgMjExLCA0OSwgMjE2LCAxMDgsIDEsIAotICAgIDI1NCwgMjA3LCAyMTEsIDQ5LCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgNDksIDIxNiwgMTA4LCAxLCAyMTEsIDc1LCAKLSAgICAyMTYsIDEwOCwgMSwgMjExLCA3NCwgMjE2LCAxMDgsIDEsIDIxMSwgNzEsIDIxNiwgMTA4LCAxLCAyMTUsIDExNSwgMjExLCAKLSAgICA4NSwgMjE2LCAxMDgsIDEsIDIxNSwgMTE1LCAyMTEsIDY5LCAyMTYsIDEwOCwgMSwgMjExLCA2NywgMjE2LCAxMDgsIDEsIAotICAgIDIxMCwgMjEyLCAyMTYsIDEwOCwgMSwgMjExLCA2NCwgMjE2LCAxMDgsIDEsIDIxMSwgNjMsIDIxNiwgMTA4LCAxLCAyMTEsIAotICAgIDg3LCAyMTYsIDEwOCwgMSwgMjE1LCAxMTUsIDIxMSwgODcsIDIxNiwgMTA4LCAxLCAyNTMsIDE2MywgMjExLCA4NywgMjE2LCAKLSAgICAxMDgsIDEsIDIxMSwgNjIsIDIxNiwgMTA4LCAxLCAyMTEsIDYwLCAyMTYsIDEwOCwgMSwgMjExLCA2MSwgMjE2LCAxMDgsIDEsIAotICAgIDIxMSwgNTksIDIxNiwgMTA4LCAxLCAyMTEsIDU4LCAyMTYsIDEwOCwgMSwgMjExLCA5NywgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgNTYsIDIxNiwgMTA4LCAxLCAyMTEsIDU0LCAyMTYsIDEwOCwgMSwgMjExLCA1MywgMjE2LCAxMDgsIDEsIDIxMSwgNTIsIAotICAgIDIxNiwgMTA4LCAxLCAyMTEsIDUwLCAyMTYsIDEwOCwgMSwgMjE3LCAzNCwgMjExLCA1MCwgMjE2LCAxMDgsIDEsIDIxMSwgCi0gICAgNDgsIDIxNiwgMTA4LCAxLCAyMTEsIDQ3LCAyMTYsIDEwOCwgMSwgMjEwLCAyNDQsIDIxNiwgMTA4LCA1OCwgMSwgMjMzLCAKLSAgICAxMjYsIDc4LCAyMTYsIDEwOCwgMjIwLCAxMzgsIDc4LCAyMTYsIDEwOCwgMTE2LCAyMzUsIDYzLCAyOSwgMywgMjMyLCAxNTUsIAotICAgIDI5LCAzLCAyMzAsIDE2MCwgMjksIDMsIDIyMiwgMjA5LCAyOSwgMywgMjE5LCA1NywgMjksIDMsIDIyMCwgNiwgMjksIDMsIAotICAgIDI1MSwgMjA0LCAyOSwgMywgMjE2LCA0MSwgMjksIDMsIDI0OSwgMjM3LCAyOSwgMywgMjI4LCA3MiwgMjksIDMsIDIyNywgCi0gICAgMTMzLCAyOSwgMywgMjQyLCAxODAsIDIyNywgMCwgMjksIDMsIDIxMCwgMjIsIDI5LCAzLCAyNDcsIDE0MywgMjksIDMsIAotICAgIDI0OCwgMTA0LCAyOSwgMywgMjM1LCA2NywgMjksIDMsIDIxNiwgMTU1LCAyOSwgMywgMjUwLCA4NSwgMjksIDMsIDIyNSwgCi0gICAgMTIwLCAyOSwgMywgMjI1LCAxNSwgMjksIDMsIDI0MiwgMjU1LCAyOSwgMywgMjQyLCAyNTEsIDI5LCAzLCAyNDIsIDI1MiwgCi0gICAgMjksIDMsIDI0MiwgMjUzLCAyOSwgMywgMjE4LCAyMjMsIDI5LCAzLCAyMTgsIDE3OSwgMjksIDMsIDIxOCwgMTkyLCAyOSwgCi0gICAgMywgMjE4LCAyMjIsIDI5LCAzLCAyMTgsIDE5NiwgMjksIDMsIDIxOCwgMTk3LCAyOSwgMywgMjE4LCAxODQsIDI5LCAzLCAKLSAgICAyNTAsIDIxMywgMjksIDMsIDI1MCwgMTkyLCAyOSwgMywgMjUwLCAxOTQsIDI5LCAzLCAyNTAsIDIxMiwgMjksIDMsIDI1MCwgCi0gICAgMjEwLCAyOSwgMywgMjUwLCAyMTEsIDI5LCAzLCAyNTAsIDE5MywgMjksIDMsIDIwOSwgMjQzLCAyOSwgMywgMjA5LCAyMjEsIAotICAgIDI5LCAzLCAyMDksIDIzNCwgMjksIDMsIDIwOSwgMjQyLCAyOSwgMywgMjA5LCAyMzcsIDI5LCAzLCAyMDksIDIzOCwgMjksIAotICAgIDMsIDIwOSwgMjI2LCAyOSwgMywgMjUwLCAyMDgsIDI5LCAzLCAyNTAsIDE5NSwgMjksIDMsIDI1MCwgMTk3LCAyOSwgMywgCi0gICAgMjUwLCAyMDcsIDI5LCAzLCAyNTAsIDIwNSwgMjksIDMsIDI1MCwgMjA2LCAyOSwgMywgMjUwLCAxOTYsIDI5LCAzLCAyMjMsIAotICAgIDIzNiwgMjksIDMsIDIyMywgMjI2LCAyOSwgMywgMjIzLCAyMzIsIDI5LCAzLCAyMjMsIDIzNSwgMjksIDMsIDIyMywgMjMzLCAKLSAgICAyOSwgMywgMjIzLCAyMzQsIDI5LCAzLCAyMjMsIDIzMSwgMjksIDMsIDIzMywgMTU5LCAyOSwgMywgMjMzLCAxNTEsIDI5LCAKLSAgICAzLCAyMzMsIDE1NCwgMjksIDMsIDIzMywgMTU4LCAyOSwgMywgMjMzLCAxNTUsIDI5LCAzLCAyMzMsIDE1NiwgMjksIDMsIAotICAgIDIzMywgMTUyLCAyOSwgMywgMjExLCAxMzAsIDI5LCAzLCAyMTEsIDEyMCwgMjksIDMsIDIxMSwgMTI2LCAyOSwgMywgMjExLCAKLSAgICAxMjksIDI5LCAzLCAyMTEsIDEyNywgMjksIDMsIDIxMSwgMTI4LCAyOSwgMywgMjExLCAxMjUsIDI5LCAzLCAyNDIsIDcxLCAKLSAgICAyOSwgMywgMjQyLCA2MiwgMjksIDMsIDI0MiwgNjUsIDI5LCAzLCAyNDIsIDcwLCAyOSwgMywgMjQyLCA2NywgMjksIDMsIAotICAgIDI0MiwgNjgsIDI5LCAzLCAyNDIsIDY0LCAzOCwgMzMsIDEsIDI1MiwgNzUsIDM4LCAzMywgMSwgMjEzLCAyNTUsIDM4LCAzMywgCi0gICAgMSwgMjQyLCAyMzYsIDM4LCAzMywgMSwgMjQ4LCA5MCwgMzgsIDMzLCAxLCAyMTAsIDc0LCAzOCwgMzMsIDEsIDIxMCwgOTQsIAotICAgIDM4LCAzMywgMSwgMTc2LCAzOCwgMzMsIDEsIDI0NSwgMTc0LCAzOCwgMzMsIDEsIDI0NSwgMTU5LCAzOCwgMzMsIDEsIDI0NSwgCi0gICAgMTUwLCAzOCwgMzMsIDEsIDc2LCAzOCwgMzMsIDEsIDIyNSwgMjIxLCAzOCwgMzMsIDEsIDI0NSwgOTIsIDM4LCAzMywgMSwgCi0gICAgMjQ1LCA4MiwgMzgsIDMzLCAxLCAyMTcsIDIyLCAzOCwgMzMsIDEsIDE2MiwgMzgsIDMzLCAxLCAyMTUsIDE3OCwgMzgsIDMzLCAKLSAgICAxLCAyNTAsIDEzMSwgMzgsIDMzLCAxLCAyMjAsIDEwMiwgMzgsIDMzLCAxLCAyMjAsIDY1LCAzOCwgMzMsIDEsIDI0NCwgODIsIAotICAgIDM4LCAzMywgMSwgMjQ1LCA4MSwgMzgsIDMzLCAxLCA2MSwgMzgsIDMzLCAxLCAyMzYsIDYwLCAzOCwgMzMsIDEsIDI0NywgCi0gICAgMTYxLCAzOCwgMzMsIDEsIDIzMCwgMTQwLCAyMTQsIDIwNSwgMzgsIDMzLCAxLCAyMTEsIDU5LCAzOCwgMzMsIDEsIDIxMCwgCi0gICAgMjEyLCAzOCwgMzMsIDEsIDIzNSwgMTgzLCA2MSwgMzgsIDMzLCAxLCAyMzIsIDE5MiwgMjEwLCAxODMsIDM4LCAzMywgMSwgCi0gICAgMjUxLCAyNDksIDIxMCwgMTgzLCAzOCwgMzMsIDEsIDIzNSwgMTgzLCAyNTEsIDI0OSwgMjEwLCAxODMsIDQ0LCAyNTQsIAotICAgIDExMCwgMjE4LCA2MCwgMjMxLCAxNTQsIDQ0LCAyNTQsIDExMCwgMjQ2LCAxMTgsIDIxOCwgNjAsIDIzMSwgMTU0LCA0MywgCi0gICAgMjE4LCA2MCwgMTI3LCA0NCwgMjE4LCA2MCwgMTI3LCA0MywgMjQ2LCAxMTgsIDIxOCwgNjAsIDEyNywgNDQsIDI0NiwgMTE4LCAKLSAgICAyMTgsIDYwLCAxMjcsIDIyMywgMTU3LCAyMzUsIDIwMiwgMjMxLCAxNTQsIDIyMywgMTU3LCAyNDYsIDExOCwgMjM1LCAyMDIsIAotICAgIDIzMSwgMTU0LCAyNDYsIDExOCwgMjE1LCAyNDEsIDIzMSwgMTU0LCA0MywgMjE1LCAyNDEsIDEyNywgNDQsIDIxNSwgMjQxLCAKLSAgICAxMjcsIDIyMywgMTU3LCAyMTgsIDIzNCwgNDMsIDIyMywgMTU3LCAyMjYsIDE5OCwgMTI3LCA0NCwgMjIzLCAxNTcsIDIyNiwgCi0gICAgMTk4LCAxMjcsIDI0NSwgMjEwLCAyNDksIDE1OCwgMjI2LCAxMywgMjQ0LCAyMiwgMjI2LCAxMywgMjIzLCA0OSwgMjQ0LCAKLSAgICAyMiwgMjI2LCAxMywgMjQwLCAxNjUsIDI0NiwgMTE4LCAyMjYsIDI1MSwgMjQ2LCAxMDQsIDI1NCwgMTE5LCAyMTQsIDE1MywgCi0gICAgMjU0LCAxMTksIDI0NiwgMTE4LCAyMjIsIDI0NywgMjU0LCAxMDksIDUyLCAyMjYsIDI0OCwgMjQwLCAxNjgsIDIzNSwgMTkzLCAKLSAgICAyMzUsIDIwMSwgMjI2LCA1OSwgMjUxLCAxNTQsIDI0MCwgMTY5LCAyLCAyNDgsIDEsIDIxNiwgODksIDIsIDIyMiwgMjM0LCAKLSAgICA0OCwgNDMsIDEyMSwgMjI2LCA1LCAxMjcsIDQ0LCAxMjEsIDIyNiwgNSwgMTI3LCAyMTYsIDg5LCAyLCA1OSwgNDgsIDIxNiwgCi0gICAgODksIDIsIDU5LCA1MSwgNDMsIDY3LCAyNTIsIDE0MSwgMiwgMjI0LCA3LCA0NCwgNjcsIDI1MiwgMTQxLCAyLCAyMjQsIDcsIAotICAgIDIxNiwgMTQsIDQzLCAxNjMsIDEyNywgMjE2LCAxNCwgNDQsIDE2MywgMTI3LCAyNTEsIDE3NSwgNDMsIDE2MywgMTI3LCAKLSAgICAyNTEsIDE3NSwgNDQsIDE2MywgMTI3LCA0MywgMjE5LCAxODcsIDEwNCwgMTI3LCA0NCwgMjE5LCAxODcsIDEwNCwgMTI3LCAKLSAgICA0MywgNTIsIDIyNiwgMywgNDQsIDUyLCAyMjYsIDMsIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgMTQwLCAxMjMsIAotICAgIDU5LCAxMTcsIDExMywgMTcwLCAyMjQsIDE0MCwgOTIsIDI0NCwgMTEsIDU5LCAyMjQsIDE0MCwgMjQ0LCA4MSwgNTksIDc4LCAKLSAgICAyMjMsIDQ5LCAyMjQsIDEzLCA3OCwgNjcsIDE4MiwgMjIyLCAyMzQsIDIyNSwgMTAsIDIxMSwgMjA5LCAyMjAsIDEzOCwgCi0gICAgMjMwLCAyMjQsIDI0NywgMTIwLCAyMTUsIDk0LCAyNDksIDIxOSwgMjIzLCAxNTcsIDI0NywgMTIwLCAyMjMsIDE1NywgMjQ5LCAKLSAgICAyMTksIDIxNSwgOTQsIDIyMCwgMTUwLCAyNDgsIDIwNiwgMiwgNDMsIDI0MiwgMTA4LCAyNDgsIDIwNiwgMiwgNDQsIDI0MiwgCi0gICAgMTA4LCAyMTUsIDk0LCAyNDgsIDIwNSwgMjE2LCAxNCwgMTYzLCAyMjEsIDE3MywgNTAsIDIxNSwgNTksIDI0OCwgMTU2LCAKLSAgICAyMTYsIDE0MywgMjQ4LCAxNTYsIDksIDM0LCAyMjMsIDc2LCA5LCAzNCwgMjUwLCAxMCwgOSwgMzQsIDIyMSwgMTc2LCAxMTAsIAotICAgIDksIDM0LCAyMjEsIDE3NiwgMTA1LCA5LCAzNCwgMjIxLCAxNzYsIDE1OCwgOSwgMzQsIDIyNSwgMTY3LCA5LCAzNCwgMjUxLCAKLSAgICAxNjMsIDksIDM0LCAyMTcsIDkyLCA5LCAzNCwgMjM0LCAzMywgMTEwLCA5LCAzNCwgMjM0LCAzMywgMTA1LCA5LCAzNCwgCi0gICAgMjQ3LCAxNzAsIDksIDM0LCAyMjEsIDE3OSwgOSwgMzQsIDQsIDExMCwgOSwgMzQsIDQsIDEwNSwgOSwgMzQsIDIzMywgOTcsIAotICAgIDExMCwgOSwgMzQsIDIzMywgOTcsIDEwNSwgOSwgMzQsIDIzMywgOTcsIDE1OCwgOSwgMzQsIDIzMywgOTcsIDE2MSwgOSwgCi0gICAgMzQsIDIxOSwgNjgsIDksIDM0LCAyMTYsIDE0NSwgOSwgMzQsIDIxOSwgNjYsIDExMCwgOSwgMzQsIDIxOSwgNjYsIDEwNSwgCi0gICAgOSwgMzQsIDI0MSwgMjI4LCAxMTAsIDksIDM0LCAyNDEsIDIyOCwgMTA1LCA5LCAzNCwgMjQyLCAxNSwgOSwgMzQsIDIyMywgCi0gICAgMTQ3LCA5LCAzNCwgMjUwLCA4MiwgOSwgMzQsIDIxOCwgMzcsIDksIDM0LCAyMzAsIDEyOCwgOSwgMzQsIDI0OCwgODgsIDksIAotICAgIDM0LCAyMzAsIDEyMCwgOSwgMzQsIDI1MCwgMjUsIDksIDM0LCAyMTIsIDQxLCAxMTAsIDksIDM0LCAyMTIsIDQxLCAxMDUsIAotICAgIDksIDM0LCAyNDQsIDk2LCA5LCAzNCwgMjI1LCAyMzIsIDExMCwgOSwgMzQsIDIyNSwgMjMyLCAxMDUsIDksIDM0LCAyMTksIAotICAgIDE2MCwgMTYzLCAyMTUsIDIzNiwgMjE1LCAxODgsIDksIDM0LCAyNDksIDE0NSwgOSwgMzQsIDI0NywgMTM2LCA5LCAzNCwgCi0gICAgMjM1LCAxMzcsIDksIDM0LCAyNTEsIDE5OCwgNjQsIDI0OSwgMjUwLCA5LCAzNCwgMjQ1LCAxNSwgOSwgMzQsIDIxOCwgMjQ5LCAKLSAgICAxMTAsIDksIDM0LCAyMTgsIDI0OSwgMTA1LCA5LCAzNCwgMjUyLCAxNTQsIDksIDM0LCAyMTksIDE2NywgOSwgMzQsIDI1MSwgCi0gICAgNjMsIDIxOSwgMTY3LCA5LCAzNCwgMjI5LCA5MCwgMTEwLCA5LCAzNCwgMjI5LCA5MCwgMTA1LCA5LCAzNCwgMjI5LCA5MCwgCi0gICAgMTU4LCA5LCAzNCwgMjI5LCA5MCwgMTYxLCA5LCAzNCwgMjMxLCA0NiwgOSwgMzQsIDIyMCwgNTcsIDksIDM0LCAyMjMsIAotICAgIDE1MywgOSwgMzQsIDI0NSwgMzcsIDksIDM0LCAyMjYsIDIwOSwgOSwgMzQsIDI1MSwgMTMzLCAxMTAsIDksIDM0LCAyNTEsIAotICAgIDEzMywgMTA1LCA5LCAzNCwgMjMxLCA4NiwgOSwgMzQsIDIzMCwgMTIzLCA5LCAzNCwgMjQyLCAxNDAsIDExMCwgOSwgMzQsIAotICAgIDI0MiwgMTQwLCAxMDUsIDksIDM0LCAyNDIsIDE0MCwgMTU4LCA5LCAzNCwgMjE2LCAxMDYsIDksIDM0LCAyNDksIDI0OSwgOSwgCi0gICAgMzQsIDIxMiwgOSwgMTEwLCA5LCAzNCwgMjEyLCA5LCAxMDUsIDksIDM0LCAyNTEsIDYzLCAyMjEsIDE3MCwgOSwgMzQsIAotICAgIDIxOSwgMTYwLCAyNDAsIDI0OCwgOSwgMzQsIDI0MCwgMjQ4LCA5LCAzNCwgMjUxLCA2MywgMjE5LCAyLCA5LCAzNCwgMjUxLCAKLSAgICA2MywgMjIwLCA1MiwgOSwgMzQsIDI0NCwgMzIsIDksIDM0LCAyNTEsIDYzLCAyNTAsIDIyOCwgOSwgMzQsIDIxOSwgMTYwLCAKLSAgICAyMTIsIDU3LCA5LCAzNCwgMjEyLCA1OCwgMTEwLCA5LCAzNCwgMjEyLCA1OCwgMTA1LCA5LCAzNCwgMjUwLCAyNywgOSwgMzQsIAotICAgIDI1MSwgNjMsIDI0MiwgMTY2LCA5LCAzNCwgMTk5LCAxMTAsIDksIDM0LCAxOTksIDEwNSwgOSwgMzQsIDI1MSwgNjMsIDIzMiwgCi0gICAgMTM3LCA5LCAzNCwgMjUxLCA2MywgMjQzLCA4OCwgOSwgMzQsIDIzMCwgMTE5LCAxMTAsIDksIDM0LCAyMzAsIDExOSwgMTA1LCAKLSAgICA5LCAzNCwgMjIzLCAxNTksIDksIDM0LCAyNTEsIDIwNywgOSwgMzQsIDI1MSwgNjMsIDIxNywgNTYsIDIzMywgNTIsIDksIAotICAgIDM0LCAyNTEsIDYzLCAyMzMsIDUzLCA5LCAzNCwgMjUxLCA2MywgMjExLCAyMzksIDksIDM0LCAyNTEsIDYzLCAyNDQsIDQ2LCAKLSAgICA5LCAzNCwgMjQ1LCAyMTgsIDExMCwgOSwgMzQsIDI0NSwgMjE4LCAxMDUsIDksIDM0LCAyNDUsIDIxOCwgMTU4LCA5LCAzNCwgCi0gICAgMjUxLCA2MywgMjQ1LCAyMTcsIDksIDM0LCAyNDEsIDIzNSwgOSwgMzQsIDI1MSwgNjMsIDI0MCwgMjQ1LCA5LCAzNCwgMjUxLCAKLSAgICAxOTQsIDksIDM0LCAyNDIsIDIyMiwgOSwgMzQsIDI1MSwgNjMsIDI0NCwgOTAsIDksIDM0LCAyNTEsIDYzLCAyNTEsIDIzNywgCi0gICAgOSwgMzQsIDI1MSwgNjMsIDIyMiwgMSwgOSwgMzQsIDIxOSwgMTYwLCAyMTIsIDIsIDksIDM0LCAyMTksIDE2MCwgMjExLCAKLSAgICA0MSwgOSwgMzQsIDI1MSwgNjMsIDI0MywgMjQ0LCA5LCAzNCwgMjM1LCAxNDMsIDI0NSwgNDEsIDksIDM0LCAyNTEsIDYzLCAKLSAgICAyNDUsIDQxLCA5LCAzNCwgMjM1LCAxNDMsIDIxNiwgMTUsIDksIDM0LCAyNTEsIDYzLCAyMTYsIDE1LCA5LCAzNCwgMjM1LCAKLSAgICAxNDMsIDI0NiwgOTYsIDksIDM0LCAyNTEsIDYzLCAyNDYsIDk2LCA5LCAzNCwgMjE1LCA5MSwgOSwgMzQsIDIzNSwgMTQzLCAKLSAgICAyMTUsIDkxLCA5LCAzNCwgMjUxLCA2MywgMjE1LCA5MSwgNjAsIDM0LCAxMTAsIDYwLCAzNCwgMjMyLCAyMTMsIDYwLCAzNCwgCi0gICAgMjQ3LCAxMjAsIDYwLCAzNCwgMjE5LCA5NSwgNjAsIDM0LCAyMjEsIDE3NSwgNjAsIDM0LCAxMDMsIDYwLCAzNCwgMTA1LCAKLSAgICA2MCwgMzQsIDIzMiwgMjM3LCA2MCwgMzQsIDIzMSwgMTg1LCA2MCwgMzQsIDIzMywgMzMsIDYwLCAzNCwgMjQ1LCAxMjksIAotICAgIDYwLCAzNCwgMTk1LCA2MCwgMzQsIDEyNCwgMjUxLCAxNjMsIDYwLCAzNCwgMjQ5LCAxNDcsIDYwLCAzNCwgMjQwLCAxMTEsIAotICAgIDYwLCAzNCwgMjE3LCA5MiwgNjAsIDM0LCAyMDQsIDI1MSwgMTYzLCA2MCwgMzQsIDIzNCwgMzIsIDYwLCAzNCwgMjI0LCAKLSAgICAyMjQsIDYwLCAzNCwgMjExLCAyMDIsIDYwLCAzNCwgMjE4LCAyNDMsIDYwLCAzNCwgNDQsIDIwNCwgMjUxLCAxNjMsIDYwLCAKLSAgICAzNCwgMjQxLCAxNzYsIDI0NSwgMTQ1LCA2MCwgMzQsIDIxNiwgMjQ3LCA2MCwgMzQsIDI0NywgMTcwLCA2MCwgMzQsIDIyMSwgCi0gICAgMTc5LCA2MCwgMzQsIDI1MCwgMTAsIDYwLCAzNCwgMjI0LCAxODIsIDYwLCAzNCwgMjU0LCAyMTUsIDYwLCAzNCwgMjMwLCAKLSAgICAxMTAsIDYwLCAzNCwgMjQ1LCAxNDUsIDYwLCAzNCwgMjQ1LCAyMjMsIDYwLCAzNCwgMjIxLCAyMDAsIDYwLCAzNCwgMjQyLCAKLSAgICAxNzQsIDYwLCAzNCwgMjQyLCAxNzUsIDIxOSwgODEsIDYwLCAzNCwgMjQ1LCA0MCwgNjAsIDM0LCAyNTEsIDI0OCwgNjAsIAotICAgIDM0LCAyMTEsIDIyMSwgNjAsIDM0LCAyNTAsIDEwMSwgNjAsIDM0LCAyMjIsIDE5NiwgNjAsIDM0LCAyMzUsIDI1MSwgNjAsIAotICAgIDM0LCAyMTksIDc5LCA2MCwgMzQsIDIzMywgOTYsIDYwLCAzNCwgMjQ5LCAxNTYsIDYwLCAzNCwgMjE4LCAyMzcsIDYwLCAzNCwgCi0gICAgMjMwLCAxMTUsIDYwLCAzNCwgMjIyLCAyMjQsIDYwLCAzNCwgMjExLCAyMDYsIDYwLCAzNCwgMjI2LCAxOTAsIDYwLCAzNCwgCi0gICAgMjE1LCA5NywgNjAsIDM0LCAyNDYsIDgwLCA2MCwgMzQsIDIxOSwgMjUxLCAyMTYsIDE0NSwgNjAsIDM0LCAyNDYsIDExOCwgCi0gICAgMjUwLCAxMCwgNjAsIDM0LCAxOTksIDIxOCwgMTA4LCA2MCwgMzQsIDExMywgMjQyLCAxMCwgNjAsIDM0LCAyMjAsIDAsIDYwLCAKLSAgICAzNCwgMjUxLCAxNjksIDYwLCAzNCwgMjE5LCA2NSwgNjAsIDM0LCAyNTEsIDEzNywgNjAsIDM0LCAyMTgsIDEzOCwgNjAsIAotICAgIDM0LCAyNDEsIDIyNywgNjAsIDM0LCAyNDIsIDI4LCA2MCwgMzQsIDI0NywgMTIzLCA2MCwgMzQsIDI0MiwgMTUsIDYwLCAzNCwgCi0gICAgMjUxLCAxNTQsIDYwLCAzNCwgMjIzLCAxNDcsIDYwLCAzNCwgMjIxLCAxODcsIDYwLCAzNCwgMjQ3LCAxOTksIDYwLCAzNCwgCi0gICAgMjUzLCAxNjgsIDYwLCAzNCwgMjE4LCAyMzQsIDYwLCAzNCwgMjI4LCA1MSwgNjAsIDM0LCAyMTgsIDM3LCA2MCwgMzQsIAotICAgIDIyMSwgMjExLCA2MCwgMzQsIDIzMCwgMTI4LCA2MCwgMzQsIDIxNSwgMjM1LCA2MCwgMzQsIDIzMywgMTIyLCA2MCwgMzQsIAotICAgIDIxOCwgMTI5LCA2MCwgMzQsIDI0OCwgODgsIDYwLCAzNCwgMjEyLCAyMSwgNjAsIDM0LCAyNDcsIDE0NiwgMjI4LCA1MSwgCi0gICAgNjAsIDM0LCAyNDksIDIxNSwgNjAsIDM0LCAyNDMsIDIyMiwgNjAsIDM0LCAyNTAsIDIxLCA2MCwgMzQsIDIxOCwgMTQyLCAKLSAgICA2MCwgMzQsIDIxMiwgNDAsIDYwLCAzNCwgMjQ0LCA5NiwgNjAsIDM0LCAyNTAsIDE4LCA2MCwgMzQsIDI0NCwgMTYxLCA2MCwgCi0gICAgMzQsIDUyLCAyMTEsIDE3OCwgNjAsIDM0LCAxNjMsIDIxNSwgMjM2LCAyMTUsIDE4OCwgNjAsIDM0LCAyMTksIDg5LCA2MCwgCi0gICAgMzQsIDI0NCwgMTcxLCA2MCwgMzQsIDI0OSwgMTQ1LCA2MCwgMzQsIDI0NywgMTM2LCA2MCwgMzQsIDIyNCwgMTc5LCA2MCwgCi0gICAgMzQsIDIzNSwgMTM3LCA2MCwgMzQsIDIzMSwgNjcsIDYwLCAzNCwgMjE2LCA4OCwgNjAsIDM0LCAyMTcsIDI0NSwgNjAsIDM0LCAKLSAgICAyMzIsIDIzMSwgNjAsIDM0LCAyMTQsIDEzMSwgNjAsIDM0LCAyNDQsIDEyMCwgNjAsIDM0LCAyNTEsIDE5OCwgNjQsIDI0OSwgCi0gICAgMjUwLCA2MCwgMzQsIDIxOSwgMTg4LCA2MCwgMzQsIDI0NiwgMTE4LCAyMTYsIDI0MiwgNjAsIDM0LCAyMTEsIDI1MywgNjAsIAotICAgIDM0LCAyMTksIDEwMywgNjAsIDM0LCAyNDcsIDE4NywgNjAsIDM0LCAyNDUsIDE1LCA2MCwgMzQsIDIxOSwgNSwgNjAsIDM0LCAKLSAgICA3NCwgNjAsIDM0LCAyMTgsIDEzMSwgNjAsIDM0LCAyMTgsIDI0OCwgNjAsIDM0LCAyMTUsIDI1NSwgNjAsIDM0LCAyNDIsIAotICAgIDE0NywgNjAsIDM0LCAyNTAsIDIxOCwgNjAsIDM0LCAyMTgsIDE2MCwgNjAsIDM0LCAyNTIsIDE1NCwgNjAsIDM0LCAyMjMsIAotICAgIDMxLCA2MCwgMzQsIDIxOSwgMTY3LCA2MCwgMzQsIDIzNSwgMTMwLCA2MCwgMzQsIDIyOSwgODksIDYwLCAzNCwgMjIwLCA1NywgCi0gICAgNjAsIDM0LCAyNDQsIDE0OSwgNjAsIDM0LCAyMjYsIDIwOSwgNjAsIDM0LCAyNTQsIDExOCwgNjAsIDM0LCAyMjUsIDI5LCAKLSAgICA2MCwgMzQsIDI0NSwgMjI3LCA2MCwgMzQsIDI1MSwgMTMyLCA2MCwgMzQsIDIzMSwgODYsIDYwLCAzNCwgMjMwLCAxODMsIAotICAgIDYwLCAzNCwgMjIwLCAxNTYsIDYwLCAzNCwgMjUzLCAyNTIsIDYwLCAzNCwgMjMwLCAxMjMsIDYwLCAzNCwgMjE2LCAxOSwgCi0gICAgNjAsIDM0LCAyMjYsIDE2NSwgNjAsIDM0LCAyNTEsIDIwMSwgNjAsIDM0LCAyMTgsIDEyNywgNjAsIDM0LCAyNDksIDIyNSwgCi0gICAgNjAsIDM0LCAyNDIsIDEzOSwgNjAsIDM0LCAyMTYsIDEwNiwgNjAsIDM0LCAyMzUsIDIxNywgNjAsIDM0LCAyNTEsIDIxMSwgCi0gICAgNjAsIDM0LCAyMTIsIDU4LCAyNDUsIDE0NSwgNjAsIDM0LCAyNDksIDI0OSwgNjAsIDM0LCAyMTIsIDgsIDYwLCAzNCwgMjIxLCAKLSAgICAxNzAsIDYwLCAzNCwgMjQwLCAyNDgsIDYwLCAzNCwgMjE5LCAyLCA2MCwgMzQsIDIxNCwgMjIsIDYwLCAzNCwgMjUyLCA3MiwgCi0gICAgNjAsIDM0LCAyMjUsIDczLCA2MCwgMzQsIDI1MiwgMTc0LCA2MCwgMzQsIDIyMCwgNTIsIDYwLCAzNCwgMjIzLCAxMTAsIDYwLCAKLSAgICAzNCwgMjIyLCAxMjYsIDYwLCAzNCwgMjQ0LCAzMiwgNjAsIDM0LCAyNTEsIDIwMCwgNjAsIDM0LCAyNTAsIDIyOCwgNjAsIAotICAgIDM0LCAyNTEsIDIyNiwgNjAsIDM0LCAyMzAsIDEyNSwgNjAsIDM0LCAyMTIsIDU3LCA2MCwgMzQsIDI1MCwgMjcsIDYwLCAzNCwgCi0gICAgMjExLCAyMzYsIDYwLCAzNCwgMjQ3LCAxODAsIDYwLCAzNCwgMjEzLCAxNjEsIDYwLCAzNCwgMjQyLCAxNjYsIDYwLCAzNCwgCi0gICAgMjMyLCAxMzcsIDYwLCAzNCwgMjQzLCA4OCwgNjAsIDM0LCAyMzAsIDExOCwgNjAsIDM0LCAyMTksIDk0LCA2MCwgMzQsIAotICAgIDIxOSwgMjUxLCAyMTcsIDc2LCAyNTEsIDIzNywgNjAsIDM0LCAyMjMsIDE1OSwgNjAsIDM0LCAyNTEsIDIwNywgNjAsIDM0LCAKLSAgICAyMTEsIDE5NywgNjAsIDM0LCAyNDQsIDE5MCwgNjAsIDM0LCAyMzMsIDUyLCA2MCwgMzQsIDIxNywgNTYsIDIzMywgNTIsIAotICAgIDYwLCAzNCwgMjMzLCA0OCwgNjAsIDM0LCAyMTksIDMwLCA2MCwgMzQsIDIzMywgNTMsIDYwLCAzNCwgMjExLCAyMzksIDYwLCAKLSAgICAzNCwgMjQ0LCA0NiwgNjAsIDM0LCAyNDUsIDIxNywgNjAsIDM0LCAyNDEsIDIzNSwgNjAsIDM0LCAyNDQsIDAsIDYwLCAzNCwgCi0gICAgMjQwLCAyNDUsIDYwLCAzNCwgMjUxLCAxOTQsIDYwLCAzNCwgMjE3LCA2MywgNjAsIDM0LCAyNDIsIDM0LCA2MCwgMzQsIAotICAgIDI0NCwgMTEzLCA2MCwgMzQsIDIyMiwgMjgsIDIxMSwgMjM2LCA2MCwgMzQsIDI1MCwgMjIwLCA2MCwgMzQsIDI0MiwgMjIyLCAKLSAgICA2MCwgMzQsIDI0NCwgOTAsIDYwLCAzNCwgMjUxLCAyMzcsIDYwLCAzNCwgMjIyLCAxLCA2MCwgMzQsIDI0OCwgNzQsIDYwLCAKLSAgICAzNCwgMjEyLCAyLCA2MCwgMzQsIDI0MSwgMjEwLCA2MCwgMzQsIDIxMSwgNDEsIDYwLCAzNCwgMjMwLCAxOTIsIDYwLCAzNCwgCi0gICAgMjUxLCAyMjEsIDYwLCAzNCwgMjQ1LCAxNTUsIDYwLCAzNCwgMjQzLCAyNDQsIDYwLCAzNCwgMjE1LCAyMDksIDYwLCAzNCwgCi0gICAgMjQ2LCA4MiwgNjAsIDM0LCAyMjMsIDE0MSwgNjAsIDM0LCAyMjgsIDUzLCA2MCwgMzQsIDI0NSwgNDEsIDYwLCAzNCwgMjE2LCAKLSAgICAxNSwgNjAsIDM0LCAyNDYsIDk2LCA2MCwgMzQsIDIxNSwgOTEsIDYwLCAzNCwgMjQ0LCA0OCwgMTA5LCAyNDgsIDM3LCAxMzUsIAotICAgIDQzLCAyMTYsIDQyLCAyMjIsIDI1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDc3LCAyMTYsIDQyLCA1MSwgMTA5LCAyNDgsIDM3LCAKLSAgICAxMzUsIDQzLCAyMTYsIDQyLCAyMzAsIDIyNCwgMjIsIDIyMiwgMjUxLCAxMDksIDI0OCwgMzcsIDEzNSwgNzcsIDIxNiwgNDIsIAotICAgIDIzMCwgMjI0LCAyMiwgNTEsIDEwOSwgMjQ4LCAzNywgMTM1LCAyNDMsIDIyOSwgMjE4LCAxMCwgMTA5LCAyNDgsIDM3LCAKLSAgICAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCA0OCwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCA1MSwgCi0gICAgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCAyMzMsIDQ2LCAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAKLSAgICAxMSwgMjQzLCAyNDMsIDIxNCwgMTYwLCAyMzMsIDQ2LCAxMDksIDI0OCwgMzcsIDEzNSwgMjE4LCAxMSwgMjQzLCAyNDMsIAotICAgIDIxNCwgMTYwLCAyMjIsIDI1MSwgMTA5LCAyNDgsIDM3LCAxMzUsIDIxOCwgMTEsIDI0MywgMjQzLCAyMzIsIDEwOCwgMjMzLCAKLSAgICA0NiwgMTA5LCAyNDgsIDM3LCAxMzUsIDIyNiwgMTIyLCAxMDksIDIxOSwgMTgsIDEwOSwgMjQ5LCAyMTksIDEwOSwgMjQzLCAKLSAgICAyMjksIDIxOCwgMTI5LCAyNDcsIDE3NywgNzgsIDIzNSwgMTMxLCAyMzUsIDIzNiwgMjE4LCAxNTksIDg3LCAxMDksIDIzNSwgCi0gICAgMTU4LCA3OCwgMTA5LCAyNDksIDI1MiwgNzgsIDEwOSwgNTQsIDIxMCwgODYsIDQzLCAyNTQsIDExMCwgMTI3LCA0NCwgMjU0LCAKLSAgICAxMTAsIDEyNywgNDMsIDUyLCAyNTQsIDExMCwgMTI3LCA0NCwgNTIsIDI1NCwgMTEwLCAxMjcsIDQzLCAyNDksIDE2MSwgCi0gICAgMTI3LCA0NCwgMjQ5LCAxNjEsIDEyNywgNDMsIDcxLCAyNDksIDE2MSwgMTI3LCA0NCwgNzEsIDI0OSwgMTYxLCAxMjcsIDQzLCAKLSAgICA4NSwgMjMzLCAyMCwgMTI3LCA0NCwgODUsIDIzMywgMjAsIDEyNywgMjI0LCAyMzcsIDc4LCAyNDMsIDMyLCA3OCwgNDMsIAotICAgIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAxMjcsIDQzLCA3MSwgMjMzLCAyMCwgMTI3LCA0NCwgCi0gICAgNzEsIDIzMywgMjAsIDEyNywgNDMsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgNDQsIDcxLCAyMTYsIDYsIDIyMCwgNTMsIAotICAgIDEyNywgNDMsIDcxLCA0MiwgMTI3LCA0NCwgNzEsIDQyLCAxMjcsIDIxMiwgMzYsIDI0OCwgMTU2LCAyMjMsIDQ5LCA1MiwgCi0gICAgMjI0LCAxOTEsIDIyMywgMjU0LCA3OCwgNTIsIDIyNCwgMTkxLCAyMjMsIDI1NCwgNzgsIDEyMSwgNTIsIDIyNCwgMTkxLCAKLSAgICAyMjMsIDI1NCwgNzgsIDIyNCwgMjM3LCAxNjQsIDI0NCwgMTkwLCAyNDIsIDgsIDIyNywgMTk4LCAxMTAsIDI0MiwgOCwgCi0gICAgMjI3LCAxOTgsIDEwNSwgMjQyLCA4LCAyMjcsIDE5OCwgMTU4LCAyNDIsIDgsIDIyNywgMTk4LCAxNjEsIDI0MiwgOCwgMjI3LCAKLSAgICAxOTgsIDE4OSwgMjQyLCA4LCAyMjcsIDE5OCwgMTk0LCAyNDIsIDgsIDIyNywgMTk4LCAxOTgsIDI0MiwgOCwgMjI3LCAxOTgsIAotICAgIDE5NSwgMjQyLCA4LCAyMjcsIDE5OCwgMjAwLCAxMDksIDIzMywgMywgMTM4LCA3OCwgMTA5LCAyMjIsIDIyOCwgMTM4LCA3OCwgCi0gICAgMTA5LCAyNDgsIDQ0LCAxMzgsIDc4LCAxMDksIDI0NSwgMTI4LCAxMzgsIDc4LCAyNCwgMjE5LCAxNTUsIDU5LCAxMzgsIDc4LCAKLSAgICAyNCwgNTIsIDU5LCAxMzgsIDc4LCAyMTIsIDMyLCAyNDgsIDE1NiwgNjcsIDIzNCwgMjMzLCAyMjMsIDc3LCA3OCwgNjcsIAotICAgIDIzNCwgMjMzLCAyMjMsIDc3LCAyLCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDY3LCAyMzQsIDIzMywgMjIzLCA3NywgMTY0LCAKLSAgICAyMTQsIDE2MCwgMjQyLCAyNywgNjcsIDIzNCwgMjMzLCAyMjMsIDc3LCAyLCAyMTMsIDEzNSwgMjE5LCAzMSwgMTY0LCAyMTQsIAotICAgIDE2MCwgMjQyLCAyNywgNjcsIDIzNCwgMjMzLCAyMjMsIDc3LCAxNjQsIDIzMiwgMTA4LCAyNDIsIDI3LCAzNywgMjI0LCAKLSAgICAyMzcsIDc4LCAxMDksIDIxNywgMywgMjMyLCAyMTQsIDI0NCwgMTQ2LCAyMjAsIDEzOCwgODcsIDI0MiwgOCwgMjI3LCAxOTgsIAotICAgIDIxNiwgMjQ3LCAyNDIsIDgsIDIyNywgMTk4LCAyMTUsIDczLCAyNDIsIDgsIDIyNywgMTk4LCAyMTYsIDE2MiwgNjcsIDEwOSwgCi0gICAgMjM1LCAxNTgsIDc4LCAyMzEsIDE0MCwgNzgsIDIyNSwgMjU1LCAyNTQsIDE0MCwgNzgsIDEwOSwgNDUsIDIzNSwgMjM4LCAKLSAgICAxMDksIDE2MywgMjQ0LCAxMDYsIDIxOSwgMTgsIDE0MSwgMSwgNCwgNjEsIDE0MSwgMSwgNjEsIDE0MSwgMSwgNCwgNzMsIAotICAgIDE0MSwgMSwgNzMsIDE0MSwgMSwgNCwgNzAsIDE0MSwgMSwgNzAsIDE0MSwgMSwgNCwgNzUsIDE0MSwgMSwgNzUsIDE0MSwgMSwgCi0gICAgNCwgNzYsIDE0MSwgMSwgNzYsIDE0MSwgMSwgMTc2LCAxNDEsIDEsIDI0MywgMTM1LCAxNDEsIDEsIDIzNCwgOTIsIDE0MSwgCi0gICAgMSwgMjQyLCAyMTQsIDE0MSwgMSwgMjMzLCAyMTcsIDE0MSwgMSwgMjQyLCAxMTMsIDE0MSwgMSwgMjM0LCAxODIsIDE0MSwgCi0gICAgMSwgMjQzLCA2MiwgMTQxLCAxLCAyMzQsIDI4LCAxNDEsIDEsIDI0MiwgMTc0LCAxNDEsIDEsIDIwNiwgMTQxLCAxLCAyMTAsIAotICAgIDExNiwgMTQxLCAxLCAyMTksIDE5MSwgMTQxLCAxLCAyMTAsIDQ0LCAxNDEsIDEsIDIxOCwgODMsIDE0MSwgMSwgMjEwLCAxMywgCi0gICAgMTQxLCAxLCAyMjEsIDE4MSwgMTQxLCAxLCAyMTAsIDk0LCAxNDEsIDEsIDIxOSwgNTgsIDE0MSwgMSwgMjEwLCAyMywgMTQxLCAKLSAgICAxLCAyMTcsIDEwNSwgMTQxLCAxLCAyNDgsIDIyMSwgMTQxLCAxLCAyMTYsIDExNywgMTQxLCAxLCAyNDgsIDMsIDE0MSwgMSwgCi0gICAgNCwgMjE1LCAxMTgsIDE0MSwgMSwgMjE1LCAxMTgsIDE0MSwgMSwgMjQ2LCA3OCwgMTQxLCAxLCAyMTcsIDIyLCAxNDEsIDEsIAotICAgIDI0OCwgOTAsIDE0MSwgMSwgMTExLCAxNDEsIDEsIDI0NywgMTQ1LCAxNDEsIDEsIDE5NywgMTQxLCAxLCAyMjgsIDIzMywgCi0gICAgMTQxLCAxLCAyMjcsIDIzNywgMTQxLCAxLCAyMjksIDEwNywgMTQxLCAxLCAyMjgsIDc0LCAxNDEsIDEsIDE2MiwgMTQxLCAxLCAKLSAgICAyNTIsIDE5MSwgMTQxLCAxLCAxOTAsIDE0MSwgMSwgMjQxLCAxODAsIDE0MSwgMSwgMjUyLCA2LCAxNDEsIDEsIDIyNSwgCi0gICAgMTA4LCAxNDEsIDEsIDI0MCwgMjIyLCAxNDEsIDEsIDI1MSwgMTI1LCAxNDEsIDEsIDIyNCwgMTUwLCAxNDEsIDEsIDI0MSwgCi0gICAgMjM4LCAxNDEsIDEsIDI1MiwgNzUsIDE0MSwgMSwgMjI1LCAyMjEsIDE0MSwgMSwgMjQxLCA2OCwgMTQxLCAxLCAyNTEsIAotICAgIDIwNSwgMTQxLCAxLCAyMjUsIDE2LCAxNDEsIDEsIDE4NCwgMTQxLCAxLCAyMzAsIDIzMCwgMTQxLCAxLCAyMzAsIDEwMiwgCi0gICAgMTQxLCAxLCAyMzEsIDkxLCAxNDEsIDEsIDIzMCwgMTYxLCAxNDEsIDEsIDQsIDE5MSwgMTQxLCAxLCAxOTEsIDE0MSwgMSwgCi0gICAgNCwgMjEwLCAyMTIsIDE0MSwgMSwgMjEwLCAyMTIsIDE0MSwgMSwgNCwgMjEwLCAyNDQsIDE0MSwgMSwgMjEwLCAyNDQsIAotICAgIDE0MSwgMSwgMjA1LCAxNDEsIDEsIDIyMywgMzUsIDE0MSwgMSwgMjIyLCAxNDAsIDE0MSwgMSwgMjIzLCAxMjgsIDE0MSwgMSwgCi0gICAgMjIyLCAyMTEsIDE0MSwgMSwgNCwgMjEyLCA2NSwgMTQxLCAxLCAyMTIsIDY1LCAxNDEsIDEsIDIxMSwgMjUwLCAxNDEsIDEsIAotICAgIDIxMiwgMjIsIDE0MSwgMSwgMjExLCAyMjcsIDE0MSwgMSwgMjMwLCAyNSwgMTQxLCAxLCAyMTIsIDExNiwgMTQxLCAxLCA0LCAKLSAgICAxNzYsIDE0MSwgMSwgNCwgMjM0LCAxODIsIDM4LCAyMzQsIDIwMSwgMjEzLCAxMzUsIDIxOSwgMzEsIDc4LCAzOCwgMjM0LCAKLSAgICAyMDEsIDIyMCwgMTU1LCAyMTksIDMxLCA3OCwgMjM0LCAyMDEsIDIxMywgMTM1LCAyMTksIDMxLCA3OCwgMjM0LCAyMDEsIAotICAgIDIyMCwgMTU1LCAyMTksIDMxLCA3OCwgMTQxLCAyMzUsIDE1OCwgNzgsIDE0MSwgMjEzLCAxMzUsIDIzNSwgMTU4LCA3OCwgCi0gICAgMTQxLCAyNDcsIDIyMSwgMjEwLCAyMjUsIDIzNCwgMjAxLCA1MiwgMjQwLCAxNjgsIDU2LCAxLCA0LCA2MSwgNTYsIDEsIDYxLCAKLSAgICA1NiwgMSwgNCwgNzMsIDU2LCAxLCA3MywgNTYsIDEsIDQsIDcwLCA1NiwgMSwgNzAsIDU2LCAxLCA0LCA3NSwgNTYsIDEsIAotICAgIDc1LCA1NiwgMSwgNCwgNzYsIDU2LCAxLCA3NiwgNTYsIDEsIDE3NiwgNTYsIDEsIDI0MywgMTM1LCA1NiwgMSwgMjM0LCA5MiwgCi0gICAgNTYsIDEsIDI0MiwgMjE0LCA1NiwgMSwgMjMzLCAyMTcsIDU2LCAxLCAyNDIsIDExMywgNTYsIDEsIDIzNCwgMTgyLCA1NiwgCi0gICAgMSwgMjQzLCA2MiwgNTYsIDEsIDIzNCwgMjgsIDU2LCAxLCAyNDIsIDE3NCwgNTYsIDEsIDIwNiwgNTYsIDEsIDIxMCwgMTE2LCAKLSAgICA1NiwgMSwgMjE5LCAxOTEsIDU2LCAxLCAyMTAsIDQ0LCA1NiwgMSwgMjE4LCA4MywgNTYsIDEsIDIxMCwgMTMsIDU2LCAxLCAKLSAgICAyMjEsIDE4MSwgNTYsIDEsIDIxMCwgOTQsIDU2LCAxLCAyMTksIDU4LCA1NiwgMSwgMjEwLCAyMywgNTYsIDEsIDIxNywgCi0gICAgMTA1LCA1NiwgMSwgMjQ4LCAyMjEsIDU2LCAxLCAyMTYsIDExNywgNTYsIDEsIDI0OCwgMywgNTYsIDEsIDQsIDIxNSwgMTE4LCAKLSAgICA1NiwgMSwgMjE1LCAxMTgsIDU2LCAxLCAyNDYsIDc4LCA1NiwgMSwgMjE3LCAyMiwgNTYsIDEsIDI0OCwgOTAsIDU2LCAxLCAKLSAgICAxMTEsIDU2LCAxLCAyNDcsIDE0NSwgNTYsIDEsIDE5NywgNTYsIDEsIDIyOCwgMjMzLCA1NiwgMSwgMjI3LCAyMzcsIDU2LCAKLSAgICAxLCAyMjksIDEwNywgNTYsIDEsIDIyOCwgNzQsIDU2LCAxLCAxNjIsIDU2LCAxLCAyNTIsIDE5MSwgNTYsIDEsIDE5MCwgNTYsIAotICAgIDEsIDI0MSwgMTgwLCA1NiwgMSwgMjUyLCA2LCA1NiwgMSwgMjI1LCAxMDgsIDU2LCAxLCAyNDAsIDIyMiwgNTYsIDEsIDI1MSwgCi0gICAgMTI1LCA1NiwgMSwgMjI0LCAxNTAsIDU2LCAxLCAyNDEsIDIzOCwgNTYsIDEsIDI1MiwgNzUsIDU2LCAxLCAyMjUsIDIyMSwgCi0gICAgNTYsIDEsIDI0MSwgNjgsIDU2LCAxLCAyNTEsIDIwNSwgNTYsIDEsIDIyNSwgMTYsIDU2LCAxLCAxODQsIDU2LCAxLCAyMzAsIAotICAgIDIzMCwgNTYsIDEsIDIzMCwgMTAyLCA1NiwgMSwgMjMxLCA5MSwgNTYsIDEsIDIzMCwgMTYxLCA1NiwgMSwgNCwgMTkxLCA1NiwgCi0gICAgMSwgMTkxLCA1NiwgMSwgNCwgMjEwLCAyMTIsIDU2LCAxLCAyMTAsIDIxMiwgNTYsIDEsIDQsIDIxMCwgMjQ0LCA1NiwgMSwgCi0gICAgMjEwLCAyNDQsIDU2LCAxLCAyMDUsIDU2LCAxLCAyMjMsIDM1LCA1NiwgMSwgMjIyLCAxNDAsIDU2LCAxLCAyMjMsIDEyOCwgCi0gICAgNTYsIDEsIDIyMiwgMjExLCA1NiwgMSwgNCwgMjEyLCA2NSwgNTYsIDEsIDIxMiwgNjUsIDU2LCAxLCAyMTEsIDI1MCwgNTYsIAotICAgIDEsIDIxMiwgMjIsIDU2LCAxLCAyMTEsIDIyNywgNTYsIDEsIDIzMCwgMjUsIDU2LCAxLCAyMTIsIDExNiwgNTYsIDEsIDQsIAotICAgIDE3NiwgNTYsIDEsIDQsIDIzNCwgMTgyLCA1NiwgMSwgMjE0LCAyNywgNTYsIDEsIDIxMywgMTc2LCA1NiwgMSwgMjEzLCAKLSAgICAyNTUsIDU2LCAxLCAyMTMsIDEzOCwgNTYsIDIzMCwgMjI0LCAyNDcsIDEyMCwgMjM0LCAyMDEsIDIyNCwgMTczLCAyMTksIAotICAgIDMxLCA3OCwgNTYsIDIzNSwgMTU4LCA3OCwgNTYsIDIxMywgMTM1LCAyMzUsIDE1OCwgNzgsIDU2LCAyNDcsIDIyMSwgMjMzLCAKLSAgICAyNTUsIDI1MSwgMTg0LCAxLCAyNTMsIDE1OCwgMjUxLCAxODQsIDEsIDIyNiwgMTA1LCAyNTEsIDE4NCwgMSwgMTkzLCAyNTEsIAotICAgIDE4NCwgMSwgMjQ1LCA2LCAyNTEsIDE4NCwgMSwgMjQ5LCA2MCwgMjUxLCAxODQsIDEsIDIxNywgMTUyLCAyNTEsIDE4NCwgMSwgCi0gICAgMjMwLCAyNSwgMjUxLCAxODQsIDEsIDE1NiwgMjUxLCAxODQsIDEsIDI0MywgMjAyLCAyNTEsIDE4NCwgMSwgMjM1LCAyMywgCi0gICAgMjUxLCAxODQsIDEsIDI0MiwgNjAsIDI1MSwgMTg0LCAxLCAyMzUsIDE0NCwgMjUxLCAxODQsIDEsIDIyNCwgOTYsIDI1MSwgCi0gICAgMTg0LCAxLCAyMTEsIDE3OCwgMjUxLCAxODQsIDEsIDIxMCwgODMsIDI1MSwgMTg0LCAxLCAyNTAsIDE1OCwgMjUxLCAxODQsIAotICAgIDEsIDIyMCwgMTA0LCAyNTEsIDE4NCwgMSwgMTUzLCAyNTEsIDE4NCwgMSwgMjEwLCAxNTksIDI1MSwgMTg0LCAxLCAyNTEsIAotICAgIDY2LCAyNTEsIDE4NCwgMSwgMjIyLCA5MSwgMjUxLCAxODQsIDEsIDYxLCAyNTEsIDE4NCwgMSwgNzYsIDI1MSwgMTg0LCAxLCAKLSAgICA3NSwgMjUxLCAxODQsIDEsIDI0NSwgMTk3LCAyNTEsIDE4NCwgMSwgMjU0LCAyMDEsIDI1MSwgMTg0LCAxLCAyNDUsIDE5NSwgCi0gICAgMjUxLCAxODQsIDEsIDI1MywgMTkyLCAyNTEsIDE4NCwgMSwgMjI2LCAxMzQsIDI1MSwgMTg0LCAxLCAyNTQsIDEyMywgMjUxLCAKLSAgICAxODQsIDEsIDI0NSwgMTUwLCAyNTEsIDE4NCwgMSwgMjU0LCAxMTUsIDI1MSwgMTg0LCAxLCAyNDUsIDEzOCwgMjUxLCAxODQsIAotICAgIDEsIDI0NSwgOTIsIDI1MSwgMTg0LCAxLCA3MywgMjUxLCAxODQsIDEsIDcwLCAyNTEsIDE4NCwgMSwgMjM1LCAxNTYsIDI1MSwgCi0gICAgMTg0LCAxLCAyMTQsIDEwNSwgMjUxLCAxODQsIDEsIDIyOSwgNzksIDI1MSwgMTg0LCAxLCAyNDIsIDE3OCwgMjUxLCAxODQsIAotICAgIDEsIDIzNiwgMzQsIDI0LCAxLCAyMzQsIDU4LCAyNCwgMSwgMjE4LCAyMTUsIDI0LCAxLCAyMzQsIDUxLCAyNCwgMSwgMjI4LCAKLSAgICAyMjYsIDI0LCAxLCAyMjgsIDIyNCwgMjQsIDEsIDIyOCwgMjIzLCAyNCwgMSwgMjE2LCAxMDEsIDI0LCAxLCAyMTgsIDIwNCwgCi0gICAgMjQsIDEsIDIyMywgMjYsIDI0LCAxLCAyMjMsIDIxLCAyNCwgMSwgMjIzLCAxOCwgMjQsIDEsIDIyMywgMTEsIDI0LCAxLCAKLSAgICAyMjMsIDYsIDI0LCAxLCAyMjMsIDEsIDI0LCAxLCAyMjMsIDEyLCAyNCwgMSwgMjIzLCAyNCwgMjQsIDEsIDIzMCwgMjE3LCAKLSAgICAyNCwgMSwgMjI1LCA5NSwgMjQsIDEsIDIxOCwgMjEyLCAyNCwgMSwgMjI1LCA4NCwgMjQsIDEsIDIxOSwgMTQ4LCAyNCwgMSwgCi0gICAgMjE4LCAyMDksIDI0LCAxLCAyMzYsIDU2LCAyNCwgMSwgMjUwLCA0NiwgMjQsIDEsIDIxOCwgMjE5LCAyNCwgMSwgMjUwLCAKLSAgICAxMDYsIDI0LCAxLCAyMzQsIDExMCwgMjQsIDEsIDIxNiwgMTczLCAyNCwgMSwgMjI1LCAxMzEsIDI0LCAxLCAyNDEsIDE3MiwgCi0gICAgMjQsIDEsIDYxLCAyNCwgMSwgMjU0LCAyNDMsIDI0LCAxLCAxOTEsIDI0LCAxLCAyMTEsIDkyLCAyNCwgMSwgMjQ1LCAxMTcsIAotICAgIDI0LCAxLCA3NSwgMjQsIDEsIDIxMSwgMzYsIDI0LCAxLCAyMTEsIDQ3LCAyNCwgMSwgNzYsIDI0LCAxLCAyMTIsIDY1LCAyNCwgCi0gICAgMSwgMjEyLCA2MiwgMjQsIDEsIDIyNiwgMjM0LCAyNCwgMSwgMjEwLCAyNDQsIDI0LCAxLCA3MCwgMjQsIDEsIDIxMiwgMTEsIAotICAgIDI0LCAxLCAyMTIsIDIyLCAyNCwgMSwgMjExLCAyNTAsIDI0LCAxLCAyMTAsIDIxMiwgMjQsIDEsIDI0NSwgNTUsIDI0LCAxLCAKLSAgICAyMTEsIDgsIDI0LCAxLCA3MywgMjQsIDI0NCwgMTAzLCAyNCwgMSwgMjE4LCAyMTMsIDI0LCAxLCAyMjgsIDIxNiwgMjQsIDEsIAotICAgIDIyOCwgMjE4LCAyNCwgMSwgMjI4LCAyMjEsIDI0LCAxLCAyMjMsIDE5LCAyNCwgMSwgMjIzLCAwLCAyNCwgMSwgMjIzLCA4LCAKLSAgICAyNCwgMSwgMjIzLCAxMywgMjQsIDEsIDIyMiwgMjU0LCAyNCwgMSwgMjMwLCAyMTAsIDI0LCAxLCAyMzAsIDIwNywgMjQsIDEsIAotICAgIDIzMCwgMjExLCAyNCwgMSwgMjM0LCAyMjEsIDI0LCAxLCAyMjUsIDkwLCAyNCwgMSwgMjI1LCA3NiwgMjQsIDEsIDIyNSwgCi0gICAgODIsIDI0LCAxLCAyMjUsIDc5LCAyNCwgMSwgMjI1LCA5MywgMjQsIDEsIDIyNSwgNzcsIDI0LCAxLCAyMzQsIDIxOSwgMjQsIAotICAgIDEsIDIzNCwgMjE3LCAyNCwgMSwgMjE5LCAxNDEsIDI0LCAxLCAyMTksIDEzOSwgMjQsIDEsIDIxOSwgMTMxLCAyNCwgMSwgCi0gICAgMjE5LCAxMzYsIDI0LCAxLCAyMTksIDE0NiwgMjQsIDEsIDIyNiwgMzIsIDI0LCAxLCAyMTgsIDIxNiwgMjQsIDEsIDIxMSwgCi0gICAgMjYsIDI0LCAxLCAyMTEsIDIyLCAyNCwgMSwgMjExLCAyMywgMjQsIDEsIDIzNCwgMjIwLCAyNCwgMSwgMjE4LCAyMTcsIDI0LCAKLSAgICAxLCAyMTEsIDMyLCAyNCwgMSwgMjEwLCAyMzgsIDI0LCAxLCAyMTAsIDIzNywgMjQsIDEsIDIxMCwgMjQwLCAyNCwgMSwgCi0gICAgMjEwLCAyMDMsIDI0LCAxLCAyMTAsIDIwNCwgMjQsIDEsIDIxMCwgMjA3LCAyNCwgMSwgMjU0LCAzNCwgMjQsIDEsIDI1NCwgCi0gICAgMjgsIDEwOSwgMjU0LCA5OSwgMjMyLCAyMDMsIDc4LCAxMDksIDI1NCwgOTksIDIyMywgNTAsIDc4LCAxMDksIDI1NCwgOTksIAotICAgIDEyMywgNzgsIDEwOSwgMjU0LCA5OSwgMTEzLCA3OCwgMTA5LCAyNTQsIDk5LCAxMzQsIDc4LCAxMDksIDI1NCwgOTksIDI0NCwgCi0gICAgMTEsIDc4LCAxMDksIDI1NCwgOTksIDIxNiwgMTQsIDc4LCAxMDksIDI1NCwgOTksIDIzMCwgMjI0LCA3OCwgMTA5LCAyNTQsIAotICAgIDk5LCAyNTEsIDE3NSwgNzgsIDEwOSwgMjU0LCA5OSwgMjQ0LCA5MiwgNzgsIDEwOSwgMjU0LCA5OSwgMjIxLCAxNzYsIDc4LCAKLSAgICAxMDksIDI1NCwgOTksIDIxNiwgMTY5LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDQsIDQsIDc4LCAxMDksIDI1NCwgOTksIDI0MSwgCi0gICAgMjI0LCA3OCwgMTA5LCAyNTQsIDk5LCAyNDUsIDIyNCwgNzgsIDEwOSwgMjU0LCA5OSwgMjMxLCAxODYsIDc4LCAyNTEsIAotICAgIDE4NCwgMSwgMjUxLCAxMjUsIDI1MSwgMTg0LCAxLCAyMTAsIDQ0LCAyNTEsIDE4NCwgMSwgMjM1LCAxMDgsIDI1MSwgMTg0LCAKLSAgICAxLCAyNDIsIDExMywgMjUxLCAxODQsIDEsIDI0NSwgMjA5LCAyNTEsIDE4NCwgMSwgMjQ1LCAxMzUsIDI1MSwgMTg0LCAxLCAKLSAgICAyMjYsIDE4MywgMjUxLCAxODQsIDEsIDIyNiwgMTg3LCAyNTEsIDE4NCwgMSwgMjM1LCAxNzksIDI1MSwgMTg0LCAxLCAyNTQsIAotICAgIDEwMSwgMjUxLCAxODQsIDEsIDIzNSwgMjI0LCAyNTEsIDE4NCwgMSwgMjE0LCAxNjgsIDI1MSwgMTg0LCAxLCAyMzYsIDE2LCAKLSAgICAyNTEsIDE4NCwgMSwgMjI5LCA1NywgMjUxLCAxODQsIDEsIDI1NCwgMTk1LCAyNTEsIDE4NCwgMSwgMjUzLCAxODcsIDI1MSwgCi0gICAgMTg0LCAxLCAyNTQsIDEzNiwgMjUxLCAxODQsIDEsIDIyNiwgMjA0LCAyNTEsIDE4NCwgMSwgMjI2LCAxODksIDI1MSwgMTg0LCAKLSAgICAxLCAyMzUsIDIyMSwgMjUxLCAxODQsIDQwLCAxLCAyMjYsIDEwNSwgMjUxLCAxODQsIDQwLCAxLCAyMTcsIDE1MiwgMjUxLCAKLSAgICAxODQsIDQwLCAxLCAyMzUsIDIzLCAyNTEsIDE4NCwgNDAsIDEsIDI0MiwgNjAsIDI1MSwgMTg0LCAxLCAyNDIsIDI1MCwgCi0gICAgMjUxLCAxODQsIDEsIDIzMiwgMjU1LCAyNTEsIDE4NCwgMSwgMjA5LCAyNTAsIDksIDIxOCwgMTAzLCAyMTcsIDE1MiwgOSwgCi0gICAgMjE4LCAxMDMsIDIxMiwgNCwgOSwgMjE4LCAxMDMsIDIxMSwgMTU4LCA5LCAyMTgsIDEwMywgMjUxLCA3OSwgOSwgMjE4LCAKLSAgICAxMDMsIDIxNywgMjU0LCA5LCAyMTgsIDEwMywgMjQwLCAxNTgsIDksIDIxOCwgMTAzLCAyNDAsIDE2MiwgOSwgMjE4LCAxMDMsIAotICAgIDI0MCwgMjMxLCA5LCAyMTgsIDEwMywgMjQwLCAxNTksIDksIDIxOCwgMTAzLCAyMTcsIDE1NSwgOSwgMjE4LCAxMDMsIDI0MCwgCi0gICAgMTYxLCA5LCAyMTgsIDEwMywgMjQwLCAxNTcsIDksIDIxOCwgMTAzLCAyNDAsIDIyOSwgOSwgMjE4LCAxMDMsIDI0MCwgMTYwLCAKLSAgICA5LCAyMTgsIDEwMywgMjQwLCAxNTYsIDksIDIxOCwgMTAzLCAyMzAsIDI1LCA5LCAyMTgsIDEwMywgMjQyLCA2MCwgOSwgCi0gICAgMjE4LCAxMDMsIDIyMiwgOTEsIDksIDIxOCwgMTAzLCAyMjYsIDEwNSwgOSwgMjE4LCAxMDMsIDIxOSwgMjEsIDksIDIxOCwgCi0gICAgMTAzLCAyNDksIDYwLCA5LCAyMTgsIDEwMywgMjQwLCAxNjMsIDksIDIxOCwgMTAzLCAyNDEsIDE5MCwgOSwgMjE4LCAxMDMsIAotICAgIDIxNywgMTY0LCA5LCAyMTgsIDEwMywgMjE3LCAyMzMsIDksIDIxOCwgMTAzLCAyMTgsIDE2OCwgOSwgMjE4LCAxMDMsIDIyMCwgCi0gICAgMTEwLCA5LCAyMTgsIDEwMywgMjI1LCAyMjQsIDksIDIxOCwgMTAzLCAyMjQsIDk4LCA5LCAyMTgsIDEwMywgMjE2LCA0MywgCi0gICAgOSwgMjE4LCAxMDMsIDIxNywgMTU0LCA5LCAyMTgsIDEwMywgMjE3LCAyNDQsIDksIDIxOCwgMTAzLCAyNDAsIDE3MCwgOSwgCi0gICAgMjE4LCAxMDMsIDI0MCwgMTU1LCA5LCAyMTgsIDEwMywgMjI1LCAxNDksIDksIDIxOCwgMTAzLCAyMjQsIDk2LCA1NiwgMSwgCi0gICAgNCwgMjMzLCAyMTcsIDU2LCAxLCA0LCAyMTksIDE5MSwgNTYsIDEsIDQsIDIxOCwgODMsIDU2LCAxLCA0LCAxMTEsIDU2LCAxLCAKLSAgICA0LCAyMjcsIDIzNywgNTYsIDEsIDQsIDE2MiwgNTYsIDEsIDQsIDI0MSwgMTgwLCA1NiwgMSwgNCwgMjQwLCAyMjIsIDU2LCAKLSAgICAxLCA0LCAyNDEsIDIzOCwgNTYsIDEsIDQsIDI0MSwgNjgsIDU2LCAxLCA0LCAyMzAsIDEwMiwgNTYsIDEsIDQsIDIwNSwgNTYsIAotICAgIDEsIDQsIDIyMywgMzUsIDU2LCAxLCA0LCAyMjIsIDE0MCwgNTYsIDEsIDQsIDIyMywgMTI4LCA1NiwgMSwgNCwgMjIyLCAKLSAgICAyMTEsIDg4LCAyNCwgMjM0LCA1OCwgODgsIDI0LCAyMjgsIDIyNiwgODgsIDI0LCAyMTYsIDEwMSwgODgsIDI0LCAyMjMsIAotICAgIDI2LCA4OCwgMjQsIDIzMCwgMjE3LCA4OCwgMjQsIDIyNSwgOTUsIDg4LCAyNCwgMjE5LCAxNDgsIDg4LCAyNCwgMjM2LCA1NiwgCi0gICAgODgsIDI0LCAyNTAsIDQ2LCA4OCwgMjQsIDI1MCwgMTA2LCA4OCwgMjQsIDIzNCwgMTEwLCA4OCwgMjQsIDIxNiwgMTczLCAKLSAgICA4OCwgMjQsIDIyNSwgMTMxLCA4OCwgMjQsIDI0MSwgMTcyLCA4OCwgMjQsIDIzNCwgNTksIDYxLCA4OCwgMjQsIDIyOCwgCi0gICAgMjI3LCA2MSwgODgsIDI0LCAyMTYsIDEwMiwgNjEsIDg4LCAyNCwgMjIzLCAyNywgNjEsIDg4LCAyNCwgMjMwLCAyMTgsIDYxLCAKLSAgICA4OCwgMjQsIDIyNSwgOTYsIDYxLCA4OCwgMjQsIDIxOSwgMTQ5LCA2MSwgODgsIDI0LCAyMzYsIDU3LCA2MSwgODgsIDI0LCAKLSAgICAyNTAsIDQ3LCA2MSwgODgsIDI0LCAyNTAsIDEwNywgNjEsIDg4LCAyNCwgMjM0LCAxMTEsIDYxLCA4OCwgMjQsIDIxNiwgCi0gICAgMTc0LCA2MSwgODgsIDI0LCAyMjUsIDEzMiwgNjEsIDg4LCAyNCwgMjQxLCAxNzMsIDYxLCA4OCwgMjQsIDI1MCwgNDcsIDcwLCAKLSAgICA4OCwgMjM0LCAzLCAxMzUsIDIyNiwgMjE3LCA4OCwgMjM0LCAzLCAxMzUsIDE0NCwgMjQwLCAyMjIsIDg4LCAxNTQsIDExMCwgCi0gICAgODgsIDE1NCwgMTA1LCA4OCwgMTU0LCAxNTgsIDg4LCAxNTQsIDE2MSwgODgsIDE1NCwgMTg5LCA4OCwgMTU0LCAxOTQsIDg4LCAKLSAgICAxNTQsIDE5OCwgODgsIDE1NCwgMTk1LCA4OCwgMTU0LCAyMDAsIDg4LCAxNTQsIDIxNiwgMjQ3LCA4OCwgMTU0LCAyMzAsIAotICAgIDEyOCwgODgsIDE1NCwgMjQ0LCA5NiwgODgsIDE1NCwgMjEyLCA0MCwgODgsIDE1NCwgMjExLCAyMTQsIDg4LCAxNTQsIDIzMSwgCi0gICAgMzksIDg4LCAxNTQsIDI0NSwgMjIzLCA4OCwgMTU0LCAyMTgsIDM3LCA4OCwgMTU0LCAyMTgsIDEzMiwgODgsIDE1NCwgMjQxLCAKLSAgICAyNDQsIDg4LCAxNTQsIDIxOSwgNTQsIDg4LCAxNTQsIDIyOSwgMjA0LCA4OCwgMTU0LCAyMTksIDQsIDg4LCAxNTQsIDI0NCwgCi0gICAgMTAyLCA4OCwgMTU0LCAyNDksIDIwMCwgODgsIDE1NCwgMjMzLCAxMjUsIDg4LCAxNTQsIDIyMywgNzEsIDg4LCAxNTQsIAotICAgIDI1MSwgMTUsIDg4LCAxNTQsIDIxOCwgODcsIDg4LCAxNTQsIDIxOCwgMjAsIDg4LCAxNTQsIDI0NSwgMTI3LCA4OCwgMTU0LCAKLSAgICAyMjMsIDYzLCA4OCwgMTU0LCAyNTQsIDE1MCwgODgsIDE1NCwgMjQ0LCAxMjgsIDg4LCAxNTQsIDIyMywgNjEsIDg4LCAxNTQsIAotICAgIDIyMCwgMTU2LCA4OCwgMTU0LCAyMjMsIDEyNywgMzcsIDE1NCwgMjI0LCAxMiwgMzcsIDE1NCwgMjM0LCA4MCwgMzcsIDE1NCwgCi0gICAgMjIxLCAxOTgsIDM3LCAxNTQsIDIzMywgMjU1LCAzNywgNTQsIDIxNiwgMjQ4LCAyMjYsIDE5NywgODUsIDIxOCwgMjM0LCAKLSAgICAzNywgNTQsIDIxNSwgNzQsIDIyNiwgMTk3LCA4NSwgMjE4LCAyMzQsIDM3LCA1NCwgMjE2LCAxNjMsIDIyNiwgMTk3LCA4NSwgCi0gICAgMjE4LCAyMzQsIDM3LCA1NCwgMjQ0LCAxNiwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyNDQsIDExNSwgMjI2LCAKLSAgICAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyMTksIDExMiwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyMjAsIAotICAgIDExNywgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgMzcsIDU0LCAyNDUsIDE4NSwgMjI2LCAxOTcsIDg1LCAyMTgsIDIzNCwgCi0gICAgMjI1LCAyNTEsIDUwLCAzNywgNTQsIDIxNSwgNzQsIDExMCwgMzcsIDU0LCAyMTUsIDc0LCAxMDUsIDM3LCA1NCwgMjE1LCAKLSAgICA3NCwgMTU4LCAzNywgNTQsIDIxNSwgNzQsIDE2MSwgMzcsIDU0LCAyMTUsIDc0LCAxODksIDM3LCA1NCwgMjE1LCA3NCwgCi0gICAgMTk0LCAzNywgNTQsIDIxNSwgNzQsIDE5OCwgMzcsIDU0LCAyMTUsIDc0LCAxOTUsIDM3LCA1NCwgMjE1LCA3NCwgMjAwLCAKLSAgICAzNywgNTQsIDIxNiwgMTYyLCAzNywgNTQsIDIxNiwgMTYzLCAxMTAsIDM3LCA1NCwgMjE2LCAxNjMsIDEwNSwgMzcsIDU0LCAKLSAgICAyMTYsIDE2MywgMTU4LCAzNywgNTQsIDIxNiwgMTYzLCAxNjEsIDM3LCA1NCwgMjE2LCAxNjMsIDE4OSwgMzcsIDI0LCAyMzQsIAotICAgIDU4LCAzNywgMjQsIDIyOCwgMjI2LCAzNywgMjQsIDIxNiwgMTAxLCAzNywgMjQsIDIyMywgMjYsIDM3LCAyNCwgMjMwLCAKLSAgICAyMTcsIDM3LCAyNCwgMjI1LCA5NSwgMzcsIDI0LCAyMTksIDE0OCwgMzcsIDI0LCAyMzYsIDU2LCAzNywgMjQsIDI1MCwgNDYsIAotICAgIDM3LCAyNCwgMjUwLCAxMDYsIDM3LCAyNCwgMjM0LCAxMTAsIDM3LCAyNCwgMjE2LCAxNzMsIDM3LCAyNCwgMjI1LCAxMzEsIAotICAgIDM3LCAyNCwgMjQxLCAxNzIsIDM3LCAyNCwgMjM0LCA1OSwgNjEsIDM3LCAyNCwgMjI4LCAyMjcsIDYxLCAzNywgMjQsIDIxNiwgCi0gICAgMTAyLCA2MSwgMzcsIDI0LCAyMjMsIDI3LCA2MSwgMzcsIDI0LCAyMzAsIDIxOCwgNjEsIDM3LCAyNCwgMjI1LCA5NiwgNjEsIAotICAgIDM3LCAyNCwgMjE5LCAxNDksIDYxLCAzNywgMjQsIDIzNiwgNTcsIDYxLCAzNywgMjQsIDI1MCwgNDcsIDYxLCAzNywgMjQsIAotICAgIDI1MCwgMTA3LCA2MSwgMzcsIDI0LCAyMzQsIDExMSwgNjEsIDM3LCAyNCwgMjE2LCAxNzQsIDYxLCAzNywgMjQsIDIyNSwgCi0gICAgMTMyLCA2MSwgMzcsIDI0LCAyNDEsIDE3MywgNjEsIDM3LCAyMzQsIDMsIDEzNSwgMjUwLCAxNDgsIDM3LCAyMzQsIDMsIAotICAgIDEzNSwgMjM1LCA0NywgMzcsIDI0LCAyMzYsIDU3LCA3MCwgMjM0LCAzLCAyMTgsIDE1OSwgODcsIDM3LCAxNTQsIDExMCwgCi0gICAgMzcsIDE1NCwgMTA1LCAzNywgMTU0LCAxNTgsIDM3LCAxNTQsIDE2MSwgMzcsIDE1NCwgMTg5LCAzNywgMTU0LCAxOTQsIDM3LCAKLSAgICAxNTQsIDE5OCwgMzcsIDE1NCwgMTk1LCAzNywgMTU0LCAyMDAsIDM3LCAxNTQsIDIxNiwgMjQ3LCAzNywgMTU0LCAyMzAsIAotICAgIDEyOCwgMzcsIDE1NCwgMjQ0LCA5NiwgMzcsIDE1NCwgMjEyLCA0MCwgMzcsIDE1NCwgMjExLCAyMTQsIDM3LCAxNTQsIDIzMSwgCi0gICAgMzksIDM3LCAxNTQsIDI0NSwgMjIzLCAzNywgMTU0LCAyMTgsIDM3LCAzNywgMTU0LCAyMTgsIDEzMiwgMzcsIDE1NCwgMjQxLCAKLSAgICAyNDQsIDM3LCAxNTQsIDIxOSwgNTQsIDM3LCAxNTQsIDIyOSwgMjA0LCAzNywgMTU0LCAyMTksIDQsIDM3LCAxNTQsIDI0NCwgCi0gICAgMTAyLCAzNywgMTU0LCAyNDksIDIwMCwgMzcsIDE1NCwgMjMzLCAxMjUsIDM3LCAxNTQsIDIyMSwgMTc0LCAzNywgMTU0LCAKLSAgICAyMzEsIDE4OSwgMzcsIDE1NCwgMjQ0LCAxMzcsIDM3LCAxNTQsIDIxOCwgNDksIDM3LCAxNTQsIDI0NSwgMzQsIDM3LCAxNTQsIAotICAgIDIyNCwgMTg3LCAzNywgMTU0LCAyNTMsIDE5NiwgMzcsIDE1NCwgMjM1LCAxNTksIDM3LCAxNTQsIDIyMywgNjEsIDM3LCAKLSAgICAxNTQsIDI0OSwgMTY0LCAzNywgMTU0LCAyNDksIDE1NSwgMzcsIDE1NCwgMjQxLCAxNjUsIDM3LCAxNTQsIDI1MCwgMTc0LCAKLSAgICAzNywgMTU0LCAyMzIsIDExMCwgMzcsIDE1NCwgMjMzLCA0NiwgMzcsIDE1NCwgMjIyLCAyNTEsIDM3LCAxNTQsIDIzMSwgODMsIAotICAgIDM3LCAxNTQsIDIyMywgODcsIDM3LCAxNTQsIDIxOCwgODcsIDM3LCAxNTQsIDIxOCwgMjAsIDM3LCAxNTQsIDI0NSwgMTI3LCAKLSAgICAzNywgMTU0LCAyMjMsIDYzLCAzNywgMTU0LCAyNTQsIDE1MCwgMzcsIDE1NCwgMjI4LCAyMTIsIDM3LCA1NCwgMjE2LCAxNjMsIAotICAgIDE5NCwgMzcsIDU0LCAyMTYsIDE2MywgMTk4LCAzNywgNTQsIDIxNiwgMTYzLCAxOTUsIDM3LCA1NCwgMjE2LCAxNjMsIDIwMCwgCi0gICAgMzcsIDU0LCAyNDQsIDE1LCAzNywgNTQsIDI0NCwgMTYsIDExMCwgMzcsIDU0LCAyNDQsIDE2LCAxMDUsIDM3LCA1NCwgMjQ0LCAKLSAgICAxNiwgMTU4LCAzNywgNTQsIDI0NCwgMTYsIDE2MSwgMzcsIDU0LCAyNDQsIDE2LCAxODksIDM3LCA1NCwgMjQ0LCAxNiwgCi0gICAgMTk0LCAzNywgNTQsIDI0NCwgMTYsIDE5OCwgMzcsIDU0LCAyNDQsIDE2LCAxOTUsIDM3LCA1NCwgMjQ0LCAxNiwgMjAwLCAKLSAgICAzNywgNTQsIDI0NCwgMTE0LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMzUsIDEzMywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgCi0gICAgMjQ0LCAxNDgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIzMSwgMTYwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNTQsIDQ3LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyMzEsIDEzMiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjM1LCA0NSwgMTA5LCAyMTcsIDMsIAotICAgIDE2LCAzMSwgMjM1LCA0NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjUzLCAxODgsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDIyMCwgCi0gICAgMTM2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyMjYsIDIzOSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjI4LCA0MCwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQ4LCA4NSwgNDIsIDI0MSwgMTkwLCA0MiwgMjQ1LCA4OCwgNDIsIDI0NSwgNDMsIDIzMiwgCi0gICAgMjE5LCAyMzIsIDI0MCwgNTAsIDM3LCA1NiwgNjEsIDM3LCA1NiwgNzMsIDM3LCA1NiwgNzAsIDM3LCA1NiwgNzUsIDM3LCAKLSAgICA1NiwgNzYsIDM3LCA1NiwgMTc2LCAzNywgNTYsIDIzNCwgOTIsIDM3LCA1NiwgMjMzLCAyMTcsIDM3LCA1NiwgMjM0LCAxODIsIAotICAgIDM3LCA1NiwgMjM0LCAyOCwgMzcsIDU2LCAyMDYsIDM3LCA1NiwgMjE5LCAxOTEsIDM3LCA1NiwgMjE4LCA4MywgMzcsIDU2LCAKLSAgICAyMjEsIDE4MSwgMzcsIDU2LCAyMTksIDU4LCAzNywgNTYsIDIxNywgMTA1LCAzNywgNTYsIDIxNiwgMTE3LCAzNywgNTYsIAotICAgIDIxNSwgMTE4LCAzNywgNTYsIDIxNywgMjIsIDM3LCA1NiwgMTExLCAzNywgNTYsIDE5NywgMzcsIDU2LCAyMjgsIDIzMywgCi0gICAgMzcsIDU2LCAyMjcsIDIzNywgMzcsIDU2LCAyMjksIDEwNywgMzcsIDU2LCAyMjgsIDc0LCAzNywgNTYsIDE2MiwgMzcsIDU2LCAKLSAgICAyNDEsIDE4MCwgMzcsIDU2LCAyNDAsIDIyMiwgMzcsIDU2LCAyNDEsIDIzOCwgMzcsIDU2LCAyNDEsIDY4LCAzNywgNTYsIAotICAgIDE4NCwgMzcsIDU2LCAyMzAsIDIzMCwgMzcsIDU2LCAyMzAsIDEwMiwgMzcsIDU2LCAyMzEsIDkxLCAzNywgNTYsIDIzMCwgCi0gICAgMTYxLCAzNywgNTYsIDE5MSwgMzcsIDU2LCAyMTAsIDIxMiwgMzcsIDU2LCAyMTAsIDI0NCwgMzcsIDU2LCAyMDUsIDM3LCAKLSAgICA1NiwgMjIzLCAzNSwgMzcsIDU2LCAyMjIsIDE0MCwgMzcsIDU2LCAyMjMsIDEyOCwgMzcsIDU2LCAyMjIsIDIxMSwgMzcsIAotICAgIDU2LCAyMTIsIDY1LCAzNywgNTYsIDIxMSwgMjUwLCAzNywgNTYsIDIxMiwgMjIsIDM3LCA1NiwgMjExLCAyMjcsIDQyLCAKLSAgICAyNTQsIDcxLCA0MiwgMjUzLCAyMzksIDQyLCAyNTQsIDk1LCA0MiwgMjU1LCAzMSwgNDIsIDIzNSwgMjI2LCA0MiwgMjM1LCAKLSAgICAxOTYsIDQyLCAyMTQsIDE2NiwgNDIsIDI0NSwgNjYsIDQyLCAyNDUsIDIwNiwgNDIsIDIyNiwgMTg2LCA0MiwgMjI2LCAxODAsIAotICAgIDQyLCAyMzQsIDI0NSwgNDIsIDIzNCwgMjE0LCA0MiwgMjM0LCAyMTEsIDQyLCAyNDMsIDkyLCA0MiwgMjQzLCAxMDEsIDQyLCAKLSAgICAyNDIsIDIwNCwgNDIsIDI0MiwgMjAwLCA0MiwgMjMzLCAxNTAsIDQyLCAyNDIsIDE5MywgNDIsIDIzNCwgNzIsIDQyLCAyMzQsIAotICAgIDcxLCA0MiwgMjM0LCA3MCwgNDIsIDIzNCwgNjksIDQyLCAyNDIsIDg2LCA0MiwgMjQyLCA4NSwgNDIsIDIzMywgMTkzLCA0MiwgCi0gICAgMjMzLCAxOTUsIDQyLCAyMzQsIDE3OCwgNDIsIDIzNCwgMSwgNDIsIDIzNCwgOCwgNDIsIDIyMiwgMTYsIDQyLCAyMjEsIAotICAgIDIzNywgNDIsIDIxOSwgMTI5LCA0MiwgMjIwLCAxNDEsIDQyLCAyMjAsIDE0MCwgNDIsIDI0OCwgMjE4LCA0MiwgMjQ4LCAzNiwgCi0gICAgNDIsIDI0NywgMTIxLCA0MiwgMjE2LCAzMiwgNDIsIDIyOSwgMjAwLCA0MiwgMjI4LCA0MSwgNDIsIDI0MiwgMzIsIDQyLCAKLSAgICAyMjYsIDg0LCA0MiwgMjI2LCA4MywgNDIsIDI1MiwgMTg4LCA0MiwgMjI1LCAxMDUsIDQyLCAyMjUsIDY5LCA0MiwgMjI1LCAKLSAgICA3MCwgNDIsIDI1MSwgMjM0LCA0MiwgMjQwLCAyMjEsIDQyLCAyNDAsIDIxNywgNDIsIDI1MSwgOTEsIDQyLCAyNDAsIDIwNCwgCi0gICAgNDIsIDI0MSwgMjE1LCA0MiwgMjI1LCAxNTksIDQyLCAyMjUsIDE5NCwgNDIsIDI0MSwgMTk4LCA0MiwgMjI1LCAxOTEsIDQyLCAKLSAgICAyMjUsIDIwNywgNDIsIDI1MiwgNjEsIDQyLCAyMjUsIDYsIDQyLCAyNTEsIDE4MCwgNDIsIDI0MSwgNTYsIDQyLCAyMjQsIAotICAgIDI1MCwgNDIsIDI0MSwgNDgsIDQyLCAyNDEsIDUwLCA0MiwgMjMxLCAyMDEsIDQyLCAyMzEsIDE5NywgNDIsIDIzMSwgMjA2LCAKLSAgICA0MiwgMjMxLCAxNTAsIDQyLCAyMzEsIDE3NSwgNDIsIDIzMCwgMTk3LCA0MiwgMjMwLCAxNzYsIDQyLCAyMzAsIDE3NSwgNDIsIAotICAgIDIzMSwgNzQsIDQyLCAyMzEsIDcxLCA0MiwgMjMxLCA3NSwgNDIsIDIxMSwgMTAyLCA0MiwgMjExLCAxMDAsIDQyLCAyMTAsIAotICAgIDIwMSwgNDIsIDIyMiwgMjI2LCA0MiwgMjIyLCAyMzAsIDQyLCAyMjIsIDExNywgNDIsIDIyMiwgMTExLCA0MiwgMjIzLCA4NSwgCi0gICAgNDIsIDIyMywgODIsIDQyLCAyMTIsIDM4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjEwLCA4NiwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDExMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDEwNSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE1OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE2MSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE4OSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE5NCwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE5OCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDE5NSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIwMCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNiwgMjQ3LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjQ1LCAxNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAKLSAgICAyMTUsIDc2LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE2LCAxNjQsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIAotICAgIDI0MCwgMjM5LCAyNDQsIDUsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyNDQsIDExOCwgMTA5LCAyMTcsIDMsIAotICAgIDE2LCAzMSwgMjQwLCAyMzksIDIxOSwgMTE5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjIwLCAxMTksIDEwOSwgCi0gICAgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyNDUsIDE5MCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIyOCwgCi0gICAgMTk3LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDAsIDIzOSwgMjE1LCA3MywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAKLSAgICAyMzksIDIxNSwgNjcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0MCwgMjM5LCAyMTUsIDYzLCAxMDksIDIxNywgMywgMTYsIAotICAgIDMxLCAyNDAsIDIzOSwgMjE1LCA2NCwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQwLCAyMzksIDIxNSwgNjksIDQyLCAyNDAsIAotICAgIDIzMCwgNDIsIDI0OCwgMjIxLCA0MiwgMjUzLCAxOTIsIDQyLCAxMzAsIDQyLCAyMjYsIDEyNSwgNDIsIDIyNSwgMjI1LCA0MiwgCi0gICAgMjQ3LCAxNDcsIDQyLCAyNDcsIDE0OCwgMjE4LCAyMzMsIDQyLCAyNDcsIDE0OCwgMjQ5LCAxMDgsIDQyLCAyMzUsIDE1NiwgCi0gICAgNDIsIDI0NSwgOTEsIDIyOSwgMjA1LCAyNDEsIDIxNiwgNDIsIDI0NSwgOTEsIDIyOSwgMjA1LCAyMTcsIDE3NCwgNDIsIAotICAgIDI0NSwgOTEsIDIyOSwgMjA1LCAyMTcsIDc0LCA0MiwgMjQ1LCA5MSwgMjI5LCAyMDUsIDIzMSwgNzAsIDQyLCAyNDksIDE1NywgCi0gICAgNDIsIDIyNiwgOTAsIDI1NCwgMTI1LCA0MiwgMTk3LCA0MiwgMjMwLCAxMDMsIDYxLCA0MiwgMTg0LCA0MiwgMTc2LCA0MiwgCi0gICAgMjM0LCAxODUsIDQyLCAyMzEsIDEyOSwgNDIsIDI0MywgODAsIDQyLCAyNTEsIDE4LCA0MiwgMjM0LCAxODQsIDQyLCAyMjUsIAotICAgIDE1MCwgNDIsIDIyOSwgODEsIDQyLCAyMzAsIDEwMywgMjQ1LCA2LCA0MiwgMjMwLCAxMDMsIDI0MywgMjAyLCA0MiwgMjMxLCAKLSAgICAxNSwgNDIsIDIzNCwgMTM0LCA0MiwgMjQwLCAxNjMsIDQyLCAyMzQsIDk0LCA0MiwgMjMwLCAyMzIsIDQyLCAyNDIsIDIxNiwgCi0gICAgNDIsIDIxNiwgMTE5LCA0MiwgMjMwLCAxMDMsIDE1NiwgNDIsIDIzMCwgMTY5LCA0MiwgMjQ3LCAxNTcsIDQyLCAyMzQsIDQwLCAKLSAgICA0MiwgMjQ0LCA0NSwgNDIsIDIyOCwgMTEyLCA0MiwgMjMwLCAxMDMsIDE5MywgNDIsIDIzMCwgMTY2LCA0MiwgMjQ5LCAyMzksIAotICAgIDQyLCAyMzQsIDM0LCA0MiwgMjMwLCAxNjcsIDIxOCwgMjMzLCA0MiwgMjQ5LCAyNDAsIDIxOCwgMjMzLCA0MiwgMjMyLCA1MCwgCi0gICAgMjE4LCAyMzMsIDQyLCAyMzQsIDM1LCAyMTgsIDIzMywgNDIsIDIzMCwgMTY3LCAyNDksIDEwOCwgNDIsIDI0OSwgMjQwLCAKLSAgICAyNDksIDEwOCwgNDIsIDIzMiwgNTAsIDI0OSwgMTA4LCA0MiwgMjM0LCAzNSwgMjQ5LCAxMDgsIDQyLCAyMzIsIDUwLCAxMTcsIAotICAgIDIyMiwgOTEsIDQyLCAyMzIsIDUwLCAxMTcsIDIyMiwgOTIsIDIxOCwgMjMzLCA0MiwgMTkwLCA0MiwgMjMzLCAyNTEsIDQyLCAKLSAgICAyMzAsIDEwNSwgNDIsIDI0MiwgMTUxLCA0MiwgMjIzLCAxNzYsIDQyLCAyMjMsIDE3NywgMTE3LCAyMjIsIDkxLCA0MiwgCi0gICAgMjIzLCAxNzcsIDExNywgMjIyLCA5MiwgMjE4LCAyMzMsIDQyLCAyMjQsIDE2MiwgNDIsIDIyOCwgMTMsIDQyLCAyMzAsIAotICAgIDEwMywgMjIyLCA5MSwgNDIsIDIzMCwgMTA0LCA0MiwgMjI0LCAxMTYsIDQyLCAyMjcsIDE3NiwgNDIsIDIzMCwgMTAzLCAKLSAgICAyMTQsIDEwNSwgNDIsIDIzMCwgNDksIDQyLCAyMzMsIDE4NSwgNDIsIDIzMCwgNTAsIDIzMSwgNzQsIDQyLCAyMjQsIDExNSwgCi0gICAgNDIsIDIyNywgMTc1LCA0MiwgMjMwLCAxMDMsIDIxMiwgOTgsIDQyLCAyMzAsIDQzLCA0MiwgMjMzLCAxODMsIDQyLCAyMzAsIAotICAgIDQ0LCAyMzEsIDc0LCA0MiwgMjM1LCAyNCwgMjI2LCAyMjAsIDQyLCAyMzIsIDUwLCAyMjYsIDIyMCwgNDIsIDI1NCwgMTM2LCAKLSAgICA0MiwgMjUxLCAxNjAsIDQyLCAyNTAsIDIxNCwgNDIsIDI1MCwgMTkxLCA0MiwgMjUxLCA2NywgMTE3LCAyMzQsIDEzNCwgNDIsIAotICAgIDI0OSwgMjM4LCA0MiwgMjQ4LCAxNDIsIDQyLCAyNDIsIDcyLCA0MiwgMTYyLCA0MiwgMjQwLCAyMzEsIDQyLCAyMzUsIDI1NSwgCi0gICAgNDIsIDIzNCwgNDcsIDQyLCAyMzQsIDM1LCAyNTAsIDI1MCwgNDIsIDIzMywgMjE5LCA0MiwgMjMyLCAxNTksIDQyLCAyMzIsIAotICAgIDE1OCwgNDIsIDIzMiwgMTQ3LCA0MiwgMjMyLCA2MywgNDIsIDIzMSwgMTMwLCAyMTksIDc5LCA0MiwgMjMwLCAxOTYsIDQyLCAKLSAgICAyMzAsIDE1MiwgNDIsIDIyNSwgMTQ4LCA0MiwgMjI1LCAxOSwgNDIsIDIyNCwgMjE5LCA0MiwgMjI0LCAyMTcsIDQyLCAyMTgsIAotICAgIDIyNywgNDIsIDIxOCwgMiwgNDIsIDIxMiwgMjQsIDQyLCAyMTQsIDEwNiwgMTE3LCAxOTMsIDQyLCAxMTUsIDExNywgMTkzLCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTEwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTA1LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTU4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTYxLCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTg5LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTk0LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTk4LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMTk1LCAKLSAgICAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjAwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE2LCAKLSAgICAyNDcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyNDUsIDE2NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAKLSAgICAxNDYsIDIxNSwgNzYsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTYsIDE2NCwgMTA5LCAyMTcsIDMsIDE2LCAKLSAgICAzMSwgMjQ4LCAxNDYsIDI0NCwgNSwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDI0NCwgMTE4LCAxMDksIDIxNywgCi0gICAgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE5LCAxMTksIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMjAsIDExOSwgCi0gICAgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDI0NSwgMTkwLCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgCi0gICAgMjI4LCAxOTcsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDczLCAxMDksIDIxNywgMywgMTYsIDMxLCAKLSAgICAyNDgsIDE0NiwgMjE1LCA2NywgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNjMsIDEwOSwgMjE3LCAzLCAKLSAgICAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDY0LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2OSwgMTA5LCAKLSAgICAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAxNDYsIDIxNSwgNzAsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIAotICAgIDY1LCAxMDksIDIxNywgMywgMTYsIDMxLCAyNDgsIDE0NiwgMjE1LCA2NiwgMTA5LCAyMTcsIDMsIDE2LCAzMSwgMjQ4LCAKLSAgICAxNDYsIDIxNSwgNzIsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTUsIDY4LCAxMDksIDIxNywgMywgMTYsIAotICAgIDMxLCAyNDgsIDE0NiwgMjE2LCAxNjIsIDEwOSwgMjE3LCAzLCAxNiwgMzEsIDI0OCwgMTQ2LCAyMTYsIDE2MSwgNDIsIDI0MywgCi0gICAgMTE4LCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNDksIDE0MCwgMjQxLCAyMjMsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIAotICAgIDIyMywgMTIyLCAyNDUsIDIyMywgMjQxLCAxOTIsIDMxLCAyNDcsIDIzMSwgMjUzLCAyMDcsIDIxNiwgMTk2LCAyNTIsIDU2LCAKLSAgICAyNDEsIDE5MiwgMzEsIDIxMCwgMjIzLCAyNDQsIDM4LCAyNDEsIDE5MiwgMzEsIDIxMiwgNTksIDI0MSwgMTkyLCAzMSwgCi0gICAgMjQ5LCAyMDMsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1NCwgMywgMjQxLCAxOTIsIDMxLCAyNDEsIDYwLCAyMTYsIDM4LCAKLSAgICAyNDEsIDE5MiwgMzEsIDQsIDIxNywgNjEsIDI0MSwgMTkyLCAzMSwgMjE1LCAyMzcsIDI0MSwgMTkyLCAzMSwgMjI1LCAyMTksIAotICAgIDI0MSwgMTkyLCAzMSwgMjE4LCAxNTgsIDI0MSwgMTkyLCAzMSwgMjQ0LCAxMzksIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIAotICAgIDIyNCwgMjQwLCAyNDEsIDE5MiwgMzEsIDIzMCwgMTU1LCAyNDEsIDE5MiwgMzEsIDI0NSwgMTI2LCAyNDEsIDE5MiwgMzEsIAotICAgIDI0NCwgMzksIDI0MSwgMTkyLCAzMSwgMjExLCAyMDcsIDIyNiwgMTk3LCAyMTYsIDE5NiwgMjQ4LCA4NiwgMjQxLCAxOTIsIAotICAgIDMxLCAyNTQsIDUxLCAyNDEsIDE5MiwgMzEsIDI0OSwgMTg1LCAyNDEsIDE5MiwgMzEsIDI1MSwgMjI3LCAyMTYsIDEzOCwgCi0gICAgMjQxLCAxOTIsIDMxLCAyNDIsIDE0OSwgMjQxLCAxOTIsIDMxLCAyMTgsIDI0NSwgMjU0LCA3MCwgMjQxLCAxOTIsIDMxLCAKLSAgICAyMjMsIDUzLCAyNDEsIDE5MiwgMzEsIDIzNSwgMjIwLCAyNDEsIDE5MiwgMzEsIDI0MiwgMTMyLCAyMTcsIDYxLCAyNDEsIAotICAgIDE5MiwgMzEsIDIzMCwgMTExLCAyNDksIDE1OSwgMjQxLCAxOTIsIDMxLCAyNDIsIDEzMiwgMjI0LCAxOTcsIDI0MSwgMTkyLCAKLSAgICAzMSwgMjE2LCAxOTYsIDI1NSwgMTgsIDIxMiwgNDAsIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1MCwgOCwgMjQ0LCA5NiwgCi0gICAgMjQxLCAxOTIsIDMxLCAyMzUsIDIzMywgMjQxLCAxOTIsIDMxLCAyNDYsIDU3LCAyNDEsIDE5MiwgMzEsIDIyMywgNTYsIAotICAgIDI0MSwgMTkyLCAzMSwgMjQyLCAxMzIsIDIyNCwgMjI0LCAyNDEsIDE5MiwgMzEsIDIyNCwgMTc3LCAyNDEsIDE5MiwgMzEsIAotICAgIDI0OCwgMTYxLCA2NCwgMjE2LCAxOTYsIDIzMiwgMjMwLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAyNDQsIDE3NCwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMjYsIDE2MywgMjQxLCAxOTIsIDMxLCAyMjYsIDI0NCwgMjQxLCAxOTIsIDMxLCAyNDgsIDU5LCAyNDEsIAotICAgIDE5MiwgMzEsIDI0OCwgNzksIDI0MSwgMTkyLCAzMSwgMjM1LCAyNDcsIDI0MSwgMTkyLCAzMSwgMjUxLCAxNDksIDI0MSwgCi0gICAgMTkyLCAzMSwgMjQ5LCAyMjEsIDIxNiwgNDIsIDIzMSwgNzYsIDI0MSwgMTkyLCAzMSwgMjQzLCA4NywgMjE2LCAzOCwgMjQxLCAKLSAgICAxOTIsIDMxLCAyMjQsIDEyNSwgMjE0LCAxNTQsIDI0MSwgMTkyLCAzMSwgMjI2LCAxNjIsIDI0MSwgMTkyLCAzMSwgMjE2LCAKLSAgICAxOTYsIDIxMiwgMTMsIDI0MSwgMTkyLCAzMSwgMjIzLCA0NSwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjUwLCAyMjAsIAotICAgIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIDI1MywgMjU1LCAyMTYsIDEzMywgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjM0LCAKLSAgICAxNzksIDIxOCwgMTM0LCAyMzAsIDExNSwgMjQxLCAxOTIsIDMxLCAyNDgsIDMyLCAyNDEsIDE5MiwgMzEsIDIxNiwgMTk2LCAKLSAgICAyMzEsIDE1MiwgMjMxLCAyMDIsIDI0MSwgMTkyLCAzMSwgMjU1LCAxOSwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjEyLCAKLSAgICA1NCwgMjQxLCAxOTIsIDMxLCAyMTYsIDE5NiwgMjQzLCA0NywgMjExLCAyMzksIDI0MSwgMTkyLCAzMSwgMjE2LCAxOTYsIAotICAgIDIzNSwgNTIsIDIzMywgMTA3LCAyNDEsIDE5MiwgMzEsIDI0NywgMTg0LCAyNDEsIDE5MiwgMzEsIDIzMiwgMjIwLCAyNDEsIAotICAgIDE5MiwgMzEsIDIzNSwgMjIzLCAyMTUsIDE4NywgMjQxLCAxOTIsIDMxLCA0LCAyMjQsIDE5NywgMjQxLCAxOTIsIDMxLCAKLSAgICAyNTQsIDIxNywgMjQ5LCAyMTIsIDI0MSwgMTkyLCAzMSwgMjUyLCA1OSwgMjQ5LCAyMTIsIDgsIDMsIDIzNSwgMTYwLCA4LCAKLSAgICAzLCAyMzUsIDE1MywgOCwgMywgNzMsIDgsIDMsIDIzNSwgMTgyLCA4LCAzLCAyMzYsIDU4LCA4LCAzLCAyMzYsIDQxLCA4LCAKLSAgICAzLCAyMzYsIDYwLCA4LCAzLCAyMzYsIDU5LCA4LCAzLCAyNTMsIDIwNiwgOCwgMywgMjUzLCAxNjksIDgsIDMsIDYxLCA4LCAKLSAgICAzLCAyNTQsIDcyLCA4LCAzLCAyMTQsIDE2NCwgOCwgMywgMjE0LCAxNjcsIDgsIDMsIDIxNCwgMTY1LCA4LCAzLCAyMjYsIAotICAgIDE0MCwgOCwgMywgMjI2LCAxMTQsIDgsIDMsIDc2LCA4LCAzLCAyMjYsIDE3NSwgOCwgMywgMjQ1LCAzNSwgOCwgMywgNzUsIAotICAgIDgsIDMsIDIxMSwgMTk1LCA4LCAzLCAyNTEsIDIyOCwgOCwgMywgMjUxLCAyMjUsIDgsIDMsIDI1MiwgNiwgOCwgMywgMjUxLCAKLSAgICAyMzgsIDgsIDMsIDI1MSwgMjUxLCA4LCAzLCAyNTEsIDI1MCwgOCwgMywgMjUxLCAyNTMsIDgsIDMsIDI1MSwgMjUyLCA4LCAKLSAgICAzLCAyNTIsIDEyMSwgOCwgMywgMjUyLCAxMTMsIDgsIDMsIDI1MiwgMTkxLCA4LCAzLCAyNTIsIDE0MiwgOCwgMywgMjUxLCAKLSAgICAxMDEsIDgsIDMsIDI1MSwgMTA1LCA4LCAzLCAyNTEsIDEwMiwgOCwgMywgMjUxLCAxNzksIDgsIDMsIDI1MSwgMTYzLCA4LCAKLSAgICAzLCAyNTEsIDIwNSwgOCwgMywgMjUxLCAxODUsIDgsIDMsIDI1MiwgMjEsIDgsIDMsIDI1MiwgNzUsIDgsIDMsIDI1MiwgMzMsIAotICAgIDgsIDMsIDI1MSwgODcsIDgsIDMsIDI1MSwgODQsIDgsIDMsIDI1MSwgMTI1LCA4LCAzLCAyNTEsIDEwMCwgOCwgMywgMjUxLCAKLSAgICA5NCwgOCwgMywgMjUxLCA5OCwgOCwgMywgMjUxLCA3MiwgOCwgMywgMjUxLCA3MCwgOCwgMywgMjUxLCA3NywgOCwgMywgCi0gICAgMjUxLCA3NSwgOCwgMywgMjUxLCA3MywgOCwgMywgMjUxLCA3NCwgOCwgMywgMjI1LCA0OSwgOCwgMywgMjI1LCA0NSwgOCwgCi0gICAgMywgMjI1LCAxMDgsIDgsIDMsIDIyNSwgNTksIDgsIDMsIDIyNSwgNzUsIDgsIDMsIDIyNSwgMTAyLCA4LCAzLCAyMjUsIDk4LCAKLSAgICA4LCAzLCAyMjUsIDI0MCwgOCwgMywgMjI1LCAyMzAsIDgsIDMsIDE5MCwgOCwgMywgMjI2LCAyMSwgOCwgMywgMjI0LCAxMzUsIAotICAgIDgsIDMsIDIyNCwgMTM3LCA4LCAzLCAyMjQsIDEzNiwgOCwgMywgMjI0LCAyMzMsIDgsIDMsIDIyNCwgMjIyLCA4LCAzLCAKLSAgICAyMjUsIDE2LCA4LCAzLCAyMjQsIDI0NSwgOCwgMywgMjI0LCAxMjEsIDgsIDMsIDIyNCwgMTE3LCA4LCAzLCAyMjQsIDE1MCwgCi0gICAgOCwgMywgMjI0LCAxMzQsIDgsIDMsIDIyNCwgMTI2LCA4LCAzLCAyMjQsIDEzMiwgOCwgMywgMjI0LCAxMDAsIDgsIDMsIAotICAgIDIyNCwgOTksIDgsIDMsIDIyNCwgMTA0LCA4LCAzLCAyMjQsIDEwMywgOCwgMywgMjI0LCAxMDEsIDgsIDMsIDIyNCwgMTAyLCAKLSAgICA4LCAzLCAyNTIsIDk2LCA4LCAzLCAyNTIsIDk1LCA4LCAzLCAyNTIsIDEwMiwgOCwgMywgMjUyLCA5NywgOCwgMywgMjUyLCAKLSAgICA5OSwgOCwgMywgMjUyLCA5OCwgOCwgMywgMjUyLCAxMDEsIDgsIDMsIDI1MiwgMTAwLCA4LCAzLCAyNTIsIDEwOCwgOCwgMywgCi0gICAgMjUyLCAxMDcsIDgsIDMsIDI1MiwgMTExLCA4LCAzLCAyNTIsIDEwOSwgOCwgMywgMjUyLCA4NywgOCwgMywgMjUyLCA4OSwgCi0gICAgOCwgMywgMjUyLCA4OCwgOCwgMywgMjUyLCA5MiwgOCwgMywgMjUyLCA5MSwgOCwgMywgMjUyLCA5NCwgOCwgMywgMjUyLCAKLSAgICA5MywgOCwgMywgMjUyLCAxMDMsIDgsIDMsIDI1MiwgMTA2LCA4LCAzLCAyNTIsIDEwNCwgOCwgMywgMjUyLCA4MywgOCwgMywgCi0gICAgMjUyLCA4MiwgOCwgMywgMjUyLCA5MCwgOCwgMywgMjUyLCA4NiwgOCwgMywgMjUyLCA4NCwgOCwgMywgMjUyLCA4NSwgOCwgCi0gICAgMywgMjUyLCA3OSwgOCwgMywgMjUyLCA3OCwgOCwgMywgMjUyLCA4MSwgOCwgMywgMjUyLCA4MCwgOCwgMywgMjI5LCAxNjksIAotICAgIDgsIDMsIDIyOSwgMTY4LCA4LCAzLCAyMjksIDE3NCwgOCwgMywgMjI5LCAxNzAsIDgsIDMsIDIyOSwgMTcxLCA4LCAzLCAKLSAgICAyMjksIDE3MywgOCwgMywgMjI5LCAxNzIsIDgsIDMsIDIyOSwgMTc3LCA4LCAzLCAyMjksIDE3NiwgOCwgMywgMjI5LCAxNzksIAotICAgIDgsIDMsIDIyOSwgMTc4LCA4LCAzLCAyMjksIDE2NSwgOCwgMywgMjI5LCAxNjQsIDgsIDMsIDIyOSwgMTY3LCA4LCAzLCAKLSAgICAyMjksIDE2NiwgOCwgMywgMjI5LCAxNTgsIDgsIDMsIDIyOSwgMTU3LCA4LCAzLCAyMjksIDE2MiwgOCwgMywgMjI5LCAxNjEsIAotICAgIDgsIDMsIDIyOSwgMTU5LCA4LCAzLCAyMjksIDE2MCwgOCwgMywgMjI5LCAxNTIsIDgsIDMsIDIyOSwgMTUxLCA4LCAzLCAKLSAgICAyMjksIDE1NiwgOCwgMywgMjI5LCAxNTUsIDgsIDMsIDIyOSwgMTUzLCA4LCAzLCAyMjksIDE1NCwgOCwgMywgMjQxLCAxMTAsIAotICAgIDgsIDMsIDI0MSwgMTA5LCA4LCAzLCAyNDEsIDExNSwgOCwgMywgMjQxLCAxMTEsIDgsIDMsIDI0MSwgMTEyLCA4LCAzLCAKLSAgICAyNDEsIDExNCwgOCwgMywgMjQxLCAxMTMsIDgsIDMsIDI0MSwgMTE4LCA4LCAzLCAyNDEsIDExNywgOCwgMywgMjQxLCAxMjAsIAotICAgIDgsIDMsIDI0MSwgMTE5LCA4LCAzLCAyNDEsIDEwMSwgOCwgMywgMjQxLCAxMDMsIDgsIDMsIDI0MSwgMTAyLCA4LCAzLCAKLSAgICAyNDEsIDEwNiwgOCwgMywgMjQxLCAxMDUsIDgsIDMsIDI0MSwgMTA4LCA4LCAzLCAyNDEsIDEwNywgOCwgMywgMjQxLCA5NywgCi0gICAgOCwgMywgMjQxLCA5NiwgOCwgMywgMjQxLCAxMDQsIDgsIDMsIDI0MSwgMTAwLCA4LCAzLCAyNDEsIDk4LCA4LCAzLCAyNDEsIAotICAgIDk5LCA4LCAzLCAyNDEsIDkxLCA4LCAzLCAyNDEsIDk1LCA4LCAzLCAyNDEsIDk0LCA4LCAzLCAyNDEsIDkyLCA4LCAzLCAKLSAgICAyNDEsIDkzLCA4LCAzLCAyMzAsIDE3MiwgOCwgMywgMjMwLCAxNzEsIDgsIDMsIDIzMCwgMjMwLCA4LCAzLCAyMzAsIDE3OCwgCi0gICAgOCwgMywgMjMwLCAyMDMsIDgsIDMsIDIzMCwgMjIxLCA4LCAzLCAyMzAsIDIxOSwgOCwgMywgMjMxLCAxMzksIDgsIDMsIAotICAgIDIzMSwgMTM0LCA4LCAzLCAxODQsIDgsIDMsIDIzMSwgMTcyLCA4LCAzLCAyMzAsIDc0LCA4LCAzLCAyMzAsIDczLCA4LCAzLCAKLSAgICAyMzAsIDc3LCA4LCAzLCAyMzAsIDc1LCA4LCAzLCAyMzAsIDEyMSwgOCwgMywgMjMwLCAxMDcsIDgsIDMsIDIzMCwgMTYxLCAKLSAgICA4LCAzLCAyMzAsIDEyNiwgOCwgMywgMjMxLCAyNiwgOCwgMywgMjMxLCA5MSwgOCwgMywgMjMwLCA1NSwgOCwgMywgMjMwLCAKLSAgICA1MSwgOCwgMywgMjMwLCAxMDIsIDgsIDMsIDIzMCwgNzAsIDgsIDMsIDIzMCwgNjMsIDgsIDMsIDIzMCwgNjgsIDgsIDMsIAotICAgIDIzMCwgMjgsIDgsIDMsIDIzMCwgMjcsIDgsIDMsIDIzMCwgMzMsIDgsIDMsIDIzMCwgMzAsIDgsIDMsIDI0NCwgODMsIDgsIAotICAgIDMsIDI0NCwgNzgsIDgsIDMsIDI0NCwgMTIxLCA4LCAzLCAyNDQsIDk4LCA4LCAzLCAyNDQsIDE2NywgOCwgMywgMjQ0LCAKLSAgICAxNTgsIDgsIDMsIDI0NCwgMTk2LCA4LCAzLCAyNDQsIDE3MCwgOCwgMywgMjQ0LCAzLCA4LCAzLCAyNDQsIDQzLCA4LCAzLCAKLSAgICAyNDQsIDI3LCA4LCAzLCAyNDMsIDIxOCwgOCwgMywgMjQzLCAyMTcsIDgsIDMsIDI0MywgMjM0LCA4LCAzLCAyNDMsIDIyMywgCi0gICAgOCwgMywgMjQzLCAyMjEsIDgsIDMsIDI0MywgMjIyLCA4LCAzLCAyNDMsIDIwNSwgOCwgMywgMjQzLCAyMDQsIDgsIDMsIAotICAgIDI0MywgMjA4LCA4LCAzLCAyNDMsIDIwNiwgOCwgMywgMjEzLCAxNDQsIDgsIDMsIDIxMywgMTM5LCA4LCAzLCAyMTMsIDE3NiwgCi0gICAgOCwgMywgMjEzLCAxNTMsIDgsIDMsIDIxMywgMTY2LCA4LCAzLCAyMTMsIDE2MywgOCwgMywgMjEzLCAxNjgsIDgsIDMsIAotICAgIDIxMywgMTY3LCA4LCAzLCAyMTQsIDcsIDgsIDMsIDIxNCwgMiwgOCwgMywgMjE0LCAyNywgOCwgMywgMjE0LCAxOCwgOCwgMywgCi0gICAgMjEzLCAxMjUsIDgsIDMsIDIxMywgMTIxLCA4LCAzLCAyMTMsIDEzOCwgOCwgMywgMjEzLCAxMjYsIDgsIDMsIDIxMywgMTc4LCAKLSAgICA4LCAzLCAyMTMsIDI0NCwgOCwgMywgMjEyLCAxMTAsIDgsIDMsIDIxMiwgMTA4LCA4LCAzLCAyMTIsIDExNiwgOCwgMywgCi0gICAgMjEyLCAxMTMsIDgsIDMsIDIxMiwgMTExLCA4LCAzLCAyMTIsIDExMiwgOCwgMywgMjEyLCAxMDIsIDgsIDMsIDIxMiwgMTAxLCAKLSAgICA4LCAzLCAyMTIsIDEwNiwgOCwgMywgMjEyLCAxMDUsIDgsIDMsIDIxMiwgMTAzLCA4LCAzLCAyMTIsIDEwNCwgOCwgMywgCi0gICAgMjQ3LCAxNzgsIDgsIDMsIDI0NywgMTY2LCA4LCAzLCAyNDgsIDMsIDgsIDMsIDI0NywgMjAzLCA4LCAzLCAyNDcsIDIzNiwgCi0gICAgOCwgMywgMjQ3LCAyNDAsIDgsIDMsIDI0NywgMjM5LCA4LCAzLCAyNDgsIDE1MiwgOCwgMywgMjQ4LCAxNDcsIDgsIDMsIAotICAgIDI0OCwgMjIxLCA4LCAzLCAyNDgsIDE3MiwgOCwgMywgMjQ2LCA2MiwgOCwgMywgMjQ2LCA2MywgOCwgMywgMjQ3LCAxMjAsIAotICAgIDgsIDMsIDI0NiwgMTAyLCA4LCAzLCAyNDcsIDE0NSwgOCwgMywgMjQ3LCAxMjIsIDgsIDMsIDI0OCwgMzAsIDgsIDMsIDI0OCwgCi0gICAgOTAsIDgsIDMsIDI0OCwgNDUsIDgsIDMsIDI0NiwgNTMsIDgsIDMsIDI0NiwgNTEsIDgsIDMsIDI0NiwgNzgsIDgsIDMsIAotICAgIDI0NiwgNjEsIDgsIDMsIDI0NiwgNTYsIDgsIDMsIDI0NiwgNTksIDgsIDMsIDIxNiwgNjcsIDgsIDMsIDIxNiwgNjEsIDgsIAotICAgIDMsIDIxNiwgMTE3LCA4LCAzLCAyMTYsIDc2LCA4LCAzLCAyMTYsIDEwOSwgOCwgMywgMjE2LCAxMTEsIDgsIDMsIDIxNiwgCi0gICAgMTEwLCA4LCAzLCAyMTcsIDQ2LCA4LCAzLCAyMTcsIDMzLCA4LCAzLCAyMTcsIDEwNSwgOCwgMywgMjE3LCA1NCwgOCwgMywgCi0gICAgMjE1LCAxMDIsIDgsIDMsIDIxNSwgMTAxLCA4LCAzLCAyMTUsIDEwNCwgOCwgMywgMjE1LCAxMDMsIDgsIDMsIDIxNiwgNSwgCi0gICAgOCwgMywgMjE2LCAxLCA4LCAzLCAxMTEsIDgsIDMsIDIxNiwgMTMsIDgsIDMsIDIxNiwgMjEzLCA4LCAzLCAyMTcsIDIyLCA4LCAKLSAgICAzLCAyMTYsIDIzNywgOCwgMywgMjE1LCA4OCwgOCwgMywgMjE1LCA4MywgOCwgMywgMjE1LCAxMTgsIDgsIDMsIDIxNSwgCi0gICAgMTAwLCA4LCAzLCAyMTUsIDg5LCA4LCAzLCAyMTUsIDk4LCA4LCAzLCAyNDgsIDEwNywgOCwgMywgMjQ4LCAxMDYsIDgsIDMsIAotICAgIDI0OCwgMTEyLCA4LCAzLCAyNDgsIDEwOCwgOCwgMywgMjQ4LCAxMDksIDgsIDMsIDI0OCwgMTExLCA4LCAzLCAyNDgsIDExMCwgCi0gICAgOCwgMywgMjQ4LCAxMjgsIDgsIDMsIDI0OCwgMTI3LCA4LCAzLCAyNDgsIDEzNSwgOCwgMywgMjQ4LCAxMjksIDgsIDMsIAotICAgIDI0OCwgOTcsIDgsIDMsIDI0OCwgOTksIDgsIDMsIDI0OCwgOTgsIDgsIDMsIDI0OCwgMTAyLCA4LCAzLCAyNDgsIDEwMSwgOCwgCi0gICAgMywgMjQ4LCAxMDUsIDgsIDMsIDI0OCwgMTAzLCA4LCAzLCAyNDgsIDEyMCwgOCwgMywgMjQ4LCAxMjMsIDgsIDMsIDI0OCwgCi0gICAgMTIxLCA4LCAzLCAyNDgsIDkzLCA4LCAzLCAyNDgsIDkyLCA4LCAzLCAyNDgsIDEwMCwgOCwgMywgMjQ4LCA5NiwgOCwgMywgCi0gICAgMjQ4LCA5NCwgOCwgMywgMjQ4LCA5NSwgOCwgMywgMjI5LCAxMjYsIDgsIDMsIDIyOSwgMTI1LCA4LCAzLCAyMjksIDEzMywgCi0gICAgOCwgMywgMjI5LCAxMjgsIDgsIDMsIDIyOSwgMTI5LCA4LCAzLCAyMjksIDEzMCwgOCwgMywgMjI5LCAxNDIsIDgsIDMsIAotICAgIDIyOSwgMTQxLCA4LCAzLCAyMjksIDE0OCwgOCwgMywgMjI5LCAxNDMsIDgsIDMsIDIyOSwgMTE4LCA4LCAzLCAyMjksIDExNywgCi0gICAgOCwgMywgMjI5LCAxMjQsIDgsIDMsIDIyOSwgMTE5LCA4LCAzLCAyMjksIDEzNCwgOCwgMywgMjI5LCAxNDAsIDgsIDMsIAotICAgIDIyOSwgMTM4LCA4LCAzLCAyMjksIDExMCwgOCwgMywgMjI5LCAxMDksIDgsIDMsIDIyOSwgMTE1LCA4LCAzLCAyMjksIDExMywgCi0gICAgOCwgMywgMjI5LCAxMTEsIDgsIDMsIDIyOSwgMTEyLCA4LCAzLCAyNDEsIDc3LCA4LCAzLCAyNDEsIDc2LCA4LCAzLCAyNDEsIAotICAgIDgzLCA4LCAzLCAyNDEsIDc4LCA4LCAzLCAyNDEsIDgwLCA4LCAzLCAyNDEsIDc5LCA4LCAzLCAyNDEsIDgyLCA4LCAzLCAKLSAgICAyNDEsIDgxLCA4LCAzLCAyNDEsIDg4LCA4LCAzLCAyNDEsIDg3LCA4LCAzLCAyNDEsIDkwLCA4LCAzLCAyNDEsIDg5LCA4LCAKLSAgICAzLCAyNDEsIDcxLCA4LCAzLCAyNDEsIDcyLCA4LCAzLCAyNDEsIDc0LCA4LCAzLCAyNDEsIDczLCA4LCAzLCAyNDEsIDc1LCAKLSAgICA4LCAzLCAyNDEsIDg0LCA4LCAzLCAyNDEsIDg2LCA4LCAzLCAyNDEsIDg1LCA4LCAzLCAyNDEsIDcwLCA4LCAzLCAyMjgsIAotICAgIDE4OSwgOCwgMywgMjI4LCAxODcsIDgsIDMsIDIyOCwgMjMzLCA4LCAzLCAyMjgsIDE5MiwgOCwgMywgMjI4LCAyMTUsIDgsIAotICAgIDMsIDIyOCwgMjI5LCA4LCAzLCAyMjgsIDIyOCwgOCwgMywgMjI5LCAxODMsIDgsIDMsIDE5NywgOCwgMywgMjI5LCAxOTcsIAotICAgIDgsIDMsIDIyNywgMTg2LCA4LCAzLCAyMjcsIDE4OCwgOCwgMywgMjI3LCAxODcsIDgsIDMsIDIyOCwgNTEsIDgsIDMsIDIyOCwgCi0gICAgMzgsIDgsIDMsIDIyOCwgNzQsIDgsIDMsIDIyOCwgNjAsIDgsIDMsIDIyOSwgODMsIDgsIDMsIDIyOSwgMTA3LCA4LCAzLCAKLSAgICAyMjksIDk0LCA4LCAzLCAyMjcsIDE4MSwgOCwgMywgMjI3LCAxNzcsIDgsIDMsIDIyNywgMjM3LCA4LCAzLCAyMjcsIDE4NSwgCi0gICAgOCwgMywgMjI3LCAxODMsIDgsIDMsIDIyNywgMTg0LCA4LCAzLCAyNDEsIDE0MSwgOCwgMywgMjQxLCAxNDAsIDgsIDMsIAotICAgIDI0MSwgMTQ2LCA4LCAzLCAyNDEsIDE0MiwgOCwgMywgMjQxLCAxNDMsIDgsIDMsIDI0MSwgMTQ1LCA4LCAzLCAyNDEsIDE0NCwgCi0gICAgOCwgMywgMjQxLCAxNTEsIDgsIDMsIDI0MSwgMTUwLCA4LCAzLCAyNDEsIDE1MywgOCwgMywgMjQxLCAxNTIsIDgsIDMsIAotICAgIDI0MSwgMTMzLCA4LCAzLCAyNDEsIDEzNSwgOCwgMywgMjQxLCAxMzQsIDgsIDMsIDI0MSwgMTM3LCA4LCAzLCAyNDEsIDEzOSwgCi0gICAgOCwgMywgMjQxLCAxMzgsIDgsIDMsIDI0MSwgMTQ3LCA4LCAzLCAyNDEsIDE0OSwgOCwgMywgMjQxLCAxNDgsIDgsIDMsIAotICAgIDI0MSwgMTI5LCA4LCAzLCAyNDEsIDEyOCwgOCwgMywgMjQxLCAxMzYsIDgsIDMsIDI0MSwgMTMyLCA4LCAzLCAyNDEsIDEzMCwgCi0gICAgOCwgMywgMjQxLCAxMzEsIDgsIDMsIDI0MSwgMTIzLCA4LCAzLCAyNDEsIDEyMiwgOCwgMywgMjQxLCAxMjcsIDgsIDMsIAotICAgIDI0MSwgMTI2LCA4LCAzLCAyNDEsIDEyNCwgOCwgMywgMjQxLCAxMjUsIDgsIDMsIDIzMiwgMTk1LCA4LCAzLCAyMzIsIDE4OSwgCi0gICAgOCwgMywgMjMyLCAyNDEsIDgsIDMsIDIzMiwgMjAyLCA4LCAzLCAyMzIsIDIzMywgOCwgMywgMjMyLCAyMzIsIDgsIDMsIAotICAgIDIzMiwgMjM2LCA4LCAzLCAyMzIsIDIzNCwgOCwgMywgMjMzLCA3OSwgOCwgMywgMjMzLCA2OSwgOCwgMywgMjMzLCAxMzUsIAotICAgIDgsIDMsIDIzMywgODgsIDgsIDMsIDIzMiwgNzksIDgsIDMsIDIzMiwgNzgsIDgsIDMsIDIzMiwgODEsIDgsIDMsIDIzMiwgCi0gICAgODAsIDgsIDMsIDIzMiwgMTE2LCA4LCAzLCAyMzIsIDEwNiwgOCwgMywgMjMyLCAxNTYsIDgsIDMsIDIzMiwgMTIwLCA4LCAzLCAKLSAgICAyMzMsIDIsIDgsIDMsIDIzMywgNTgsIDgsIDMsIDIzMywgMTcsIDgsIDMsIDIzMiwgNzQsIDgsIDMsIDIzMiwgNzIsIDgsIDMsIAotICAgIDIzMiwgOTgsIDgsIDMsIDIzMiwgNzcsIDgsIDMsIDIzMiwgNzUsIDgsIDMsIDIzMiwgNzYsIDgsIDMsIDIzMiwgNTQsIDgsIAotICAgIDMsIDIzMiwgNTMsIDgsIDMsIDIzMiwgNjIsIDgsIDMsIDIzMiwgNTcsIDgsIDMsIDIzMiwgNTUsIDgsIDMsIDIzMiwgNTYsIAotICAgIDgsIDMsIDI0MiwgMTg5LCA4LCAzLCAyNDIsIDE4OCwgOCwgMywgMjQyLCAyMTQsIDgsIDMsIDI0MiwgMTk5LCA4LCAzLCAKLSAgICAyNDIsIDIwNiwgOCwgMywgMjQyLCAyMDUsIDgsIDMsIDI0MiwgMjA4LCA4LCAzLCAyNDIsIDIwNywgOCwgMywgMjQzLCA4OSwgCi0gICAgOCwgMywgMjQzLCA4NCwgOCwgMywgMjQzLCAxMzUsIDgsIDMsIDI0MywgOTksIDgsIDMsIDI0MiwgOTEsIDgsIDMsIDI0MiwgCi0gICAgOTAsIDgsIDMsIDI0MiwgOTMsIDgsIDMsIDI0MiwgOTIsIDgsIDMsIDI0MiwgMTU0LCA4LCAzLCAyNDIsIDE1MiwgOCwgMywgCi0gICAgMjQyLCAxNzQsIDgsIDMsIDI0MiwgMTYyLCA4LCAzLCAyNDMsIDMzLCA4LCAzLCAyNDMsIDMxLCA4LCAzLCAyNDMsIDYyLCA4LCAKLSAgICAzLCAyNDMsIDQ0LCA4LCAzLCAyNDIsIDgxLCA4LCAzLCAyNDIsIDgwLCA4LCAzLCAyNDIsIDExMywgOCwgMywgMjQyLCA4OSwgCi0gICAgOCwgMywgMjQyLCA4MiwgOCwgMywgMjQyLCA4OCwgOCwgMywgMjM0LCA2MSwgOCwgMywgMjM0LCA2MCwgOCwgMywgMjM0LCAKLSAgICA5MiwgOCwgMywgMjM0LCA3NSwgOCwgMywgMjM0LCA4NSwgOCwgMywgMjM0LCA4OCwgOCwgMywgMjM0LCA4NiwgOCwgMywgCi0gICAgMjM0LCAyMDIsIDgsIDMsIDIzNCwgMTkwLCA4LCAzLCAxNzYsIDgsIDMsIDIzNCwgMjI4LCA4LCAzLCAyMzMsIDIwMCwgOCwgCi0gICAgMywgMjMzLCAyMDUsIDgsIDMsIDIzMywgMjAyLCA4LCAzLCAyMzQsIDAsIDgsIDMsIDIzMywgMjUyLCA4LCAzLCAyMzQsIDI4LCAKLSAgICA4LCAzLCAyMzQsIDcsIDgsIDMsIDIzNCwgMTU2LCA4LCAzLCAyMzQsIDE0MCwgOCwgMywgMjM0LCAxODIsIDgsIDMsIDIzNCwgCi0gICAgMTU5LCA4LCAzLCAyMzMsIDE4OSwgOCwgMywgMjMzLCAxODYsIDgsIDMsIDIzMywgMjE3LCA4LCAzLCAyMzMsIDE5OSwgOCwgCi0gICAgMywgMjMzLCAxOTIsIDgsIDMsIDIzMywgMTk2LCA4LCAzLCAyNDMsIDE1LCA4LCAzLCAyNDMsIDE0LCA4LCAzLCAyNDMsIDE5LCAKLSAgICA4LCAzLCAyNDMsIDE2LCA4LCAzLCAyNDMsIDE4LCA4LCAzLCAyNDMsIDE3LCA4LCAzLCAyNDMsIDI2LCA4LCAzLCAyNDMsIAotICAgIDI1LCA4LCAzLCAyNDMsIDI5LCA4LCAzLCAyNDMsIDI3LCA4LCAzLCAyNDMsIDYsIDgsIDMsIDI0MywgNSwgOCwgMywgMjQzLCAKLSAgICA4LCA4LCAzLCAyNDMsIDcsIDgsIDMsIDI0MywgMTEsIDgsIDMsIDI0MywgMTAsIDgsIDMsIDI0MywgMTMsIDgsIDMsIDI0MywgCi0gICAgMTIsIDgsIDMsIDI0MywgMjEsIDgsIDMsIDI0MywgMjAsIDgsIDMsIDI0MywgMjQsIDgsIDMsIDI0MywgMjIsIDgsIDMsIAotICAgIDI0MywgMSwgOCwgMywgMjQzLCAwLCA4LCAzLCAyNDMsIDksIDgsIDMsIDI0MywgNCwgOCwgMywgMjQzLCAyLCA4LCAzLCAKLSAgICAyNDMsIDMsIDgsIDMsIDIzMCwgMjQ5LCA4LCAzLCAyMzAsIDI1MCwgOCwgMywgMjMxLCAxMiwgOCwgMywgMjMxLCAxMSwgOCwgCi0gICAgMywgMjMxLCAxNCwgOCwgMywgMjMxLCAxMywgOCwgMywgMjMwLCAyNDAsIDgsIDMsIDIzMCwgMjQyLCA4LCAzLCAyMzAsIAotICAgIDI0MSwgOCwgMywgMjMwLCAyNDUsIDgsIDMsIDIzMCwgMjQ0LCA4LCAzLCAyMzAsIDI0NywgOCwgMywgMjMwLCAyNDYsIDgsIAotICAgIDMsIDIzMCwgMjUxLCA4LCAzLCAyMzAsIDI1MywgOCwgMywgMjMwLCAyNTIsIDgsIDMsIDIzMCwgMjM2LCA4LCAzLCAyMzAsIAotICAgIDIzNSwgOCwgMywgMjMwLCAyNDMsIDgsIDMsIDIzMCwgMjM5LCA4LCAzLCAyMzAsIDIzNywgOCwgMywgMjMwLCAyMzgsIDgsIAotICAgIDMsIDI0MCwgMTgwLCA4LCAzLCAyNDAsIDE3OSwgOCwgMywgMjQwLCAxODYsIDgsIDMsIDI0MCwgMTgxLCA4LCAzLCAyNDAsIAotICAgIDE4MywgOCwgMywgMjQwLCAxODIsIDgsIDMsIDI0MCwgMTg1LCA4LCAzLCAyNDAsIDE4NCwgOCwgMywgMjQwLCAxOTEsIDgsIAotICAgIDMsIDI0MCwgMTkwLCA4LCAzLCAyNDAsIDE5MywgOCwgMywgMjQwLCAxOTIsIDgsIDMsIDI0MCwgMTcyLCA4LCAzLCAyNDAsIAotICAgIDE3MSwgOCwgMywgMjQwLCAxNzQsIDgsIDMsIDI0MCwgMTczLCA4LCAzLCAyNDAsIDE3NiwgOCwgMywgMjQwLCAxNzUsIDgsIAotICAgIDMsIDI0MCwgMTc4LCA4LCAzLCAyNDAsIDE3NywgOCwgMywgMjQwLCAxODcsIDgsIDMsIDI0MCwgMTg5LCA4LCAzLCAyNDAsIAotICAgIDE4OCwgOCwgMywgMjI5LCAyNCwgOCwgMywgMjI5LCAyNiwgOCwgMywgMjI5LCAyNSwgOCwgMywgMjI5LCA2NywgOCwgMywgCi0gICAgMjI5LCA2NSwgOCwgMywgMjI5LCA3NywgOCwgMywgMjI5LCA3MCwgOCwgMywgMjI4LCAyNDMsIDgsIDMsIDIyOCwgMjQyLCA4LCAKLSAgICAzLCAyMjgsIDI0NCwgOCwgMywgMjI4LCAyNTIsIDgsIDMsIDIyOCwgMjQ5LCA4LCAzLCAyMjksIDQsIDgsIDMsIDIyOCwgCi0gICAgMjU0LCA4LCAzLCAyMjksIDU4LCA4LCAzLCAyMjksIDY0LCA4LCAzLCAyMjksIDYwLCA4LCAzLCAyNDEsIDE1NiwgOCwgMywgCi0gICAgMjQxLCAxNjYsIDgsIDMsIDI0MSwgMTc1LCA4LCAzLCAyNDEsIDI1MSwgOCwgMywgMjQxLCAyNDMsIDgsIDMsIDE2MiwgOCwgCi0gICAgMywgMjQyLCA2LCA4LCAzLCAyNDAsIDIwNiwgOCwgMywgMjQwLCAyMDUsIDgsIDMsIDI0MCwgMjA4LCA4LCAzLCAyNDAsIAotICAgIDIwNywgOCwgMywgMjQwLCAyNDIsIDgsIDMsIDI0MCwgMjMzLCA4LCAzLCAyNDEsIDY4LCA4LCAzLCAyNDEsIDQ3LCA4LCAzLCAKLSAgICAyNDEsIDE5NCwgOCwgMywgMjQxLCAyMzgsIDgsIDMsIDI0MSwgMjA2LCA4LCAzLCAyMTIsIDQzLCA4LCAzLCAyMTIsIDI4LCAKLSAgICA4LCAzLCAyMTIsIDY1LCA4LCAzLCAyMTIsIDUxLCA4LCAzLCAyMTEsIDE4NSwgOCwgMywgMjExLCAxODcsIDgsIDMsIDIxMSwgCi0gICAgMTg2LCA4LCAzLCAyMTEsIDIwMywgOCwgMywgMjExLCAyMjcsIDgsIDMsIDIxMSwgMjEwLCA4LCAzLCAyMTIsIDUsIDgsIDMsIAotICAgIDIxMiwgMjIsIDgsIDMsIDIxMiwgMTAsIDgsIDMsIDIxMCwgMzAsIDgsIDMsIDIxMCwgMjksIDgsIDMsIDIxMCwgNDQsIDgsIAotICAgIDMsIDIxMCwgMzIsIDgsIDMsIDIxMCwgMzcsIDgsIDMsIDIxMCwgMzksIDgsIDMsIDIxMCwgMzgsIDgsIDMsIDIxMCwgMTAyLCAKLSAgICA4LCAzLCAyMTAsIDk5LCA4LCAzLCAyMTAsIDExNiwgOCwgMywgMjEwLCAxMDUsIDgsIDMsIDIxMCwgNiwgOCwgMywgMjEwLCAKLSAgICA4LCA4LCAzLCAyMTAsIDcsIDgsIDMsIDIxMCwgMTksIDgsIDMsIDIxMCwgMTgsIDgsIDMsIDIxMCwgMjMsIDgsIDMsIDIxMCwgCi0gICAgMjAsIDgsIDMsIDIxMCwgODQsIDgsIDMsIDIxMCwgOTQsIDgsIDMsIDIxMCwgODgsIDgsIDMsIDIxMCwgMiwgOCwgMywgMjEwLCAKLSAgICAxLCA4LCAzLCAyMTAsIDEzLCA4LCAzLCAyMTAsIDUsIDgsIDMsIDIxMCwgMywgOCwgMywgMjEwLCA0LCA4LCAzLCAyMDksIAotICAgIDI0NSwgOCwgMywgMjA5LCAyNDQsIDgsIDMsIDIwOSwgMjUwLCA4LCAzLCAyMDksIDI0OCwgOCwgMywgMjA5LCAyNDYsIDgsIAotICAgIDMsIDIwOSwgMjQ3LCA4LCAzLCAyNTAsIDI4LCA4LCAzLCAyNTAsIDI0LCA4LCAzLCAyNTAsIDUxLCA4LCAzLCAyNTAsIDM3LCAKLSAgICA4LCAzLCAyNTAsIDQ4LCA4LCAzLCAyNTAsIDQyLCA4LCAzLCAyNTAsIDUwLCA4LCAzLCAyNTAsIDQ5LCA4LCAzLCAyNTAsIAotICAgIDIyNCwgOCwgMywgMjUwLCAyMTcsIDgsIDMsIDI1MSwgMzMsIDgsIDMsIDI1MCwgMjUxLCA4LCAzLCAyNDksIDEwNCwgOCwgMywgCi0gICAgMjQ5LCAxMDYsIDgsIDMsIDI0OSwgMTA1LCA4LCAzLCAyNDksIDE1MywgOCwgMywgMjQ5LCAxNDQsIDgsIDMsIDI0OSwgMjM4LCAKLSAgICA4LCAzLCAyNDksIDE2OSwgOCwgMywgMjUwLCAxNjAsIDgsIDMsIDI1MCwgMTkwLCA4LCAzLCAyNTAsIDE2NSwgOCwgMywgCi0gICAgMjQ5LCA4NCwgOCwgMywgMjQ5LCA4MiwgOCwgMywgMjQ5LCAxMTIsIDgsIDMsIDI0OSwgMTAyLCA4LCAzLCAyNDksIDg5LCA4LCAKLSAgICAzLCAyNDksIDEwMSwgOCwgMywgMjQ5LCA2MywgOCwgMywgMjQ5LCA2MiwgOCwgMywgMjQ5LCA3MywgOCwgMywgMjQ5LCA2OSwgCi0gICAgOCwgMywgMjQ5LCA2NCwgOCwgMywgMjQ5LCA2NiwgOCwgMywgMjA5LCAyMjgsIDgsIDMsIDIwOSwgMjI3LCA4LCAzLCAyMDksIAotICAgIDIzNCwgOCwgMywgMjA5LCAyMjksIDgsIDMsIDIwOSwgMjMxLCA4LCAzLCAyMDksIDIzMCwgOCwgMywgMjA5LCAyMzMsIDgsIAotICAgIDMsIDIwOSwgMjMyLCA4LCAzLCAyMDksIDI0MCwgOCwgMywgMjA5LCAyMzksIDgsIDMsIDIwOSwgMjQzLCA4LCAzLCAyMDksIAotICAgIDI0MSwgOCwgMywgMjA5LCAyMjQsIDgsIDMsIDIwOSwgMjI2LCA4LCAzLCAyMDksIDIyNSwgOCwgMywgMjA5LCAyMzUsIDgsIAotICAgIDMsIDIwOSwgMjM4LCA4LCAzLCAyMDksIDIzNiwgOCwgMywgMjA5LCAyMTcsIDgsIDMsIDIwOSwgMjIxLCA4LCAzLCAyMDksIAotICAgIDIyMCwgOCwgMywgMjA5LCAyMTgsIDgsIDMsIDIwOSwgMjE5LCA4LCAzLCAyMDksIDIxMSwgOCwgMywgMjA5LCAyMTAsIDgsIAotICAgIDMsIDIwOSwgMjE2LCA4LCAzLCAyMDksIDIxNCwgOCwgMywgMjA5LCAyMTIsIDgsIDMsIDIwOSwgMjEzLCA4LCAzLCAyMjcsIAotICAgIDEwNCwgOCwgMywgMjI3LCAxMDMsIDgsIDMsIDIyNywgMTA5LCA4LCAzLCAyMjcsIDEwNSwgOCwgMywgMjI3LCAxMDYsIDgsIAotICAgIDMsIDIyNywgMTA4LCA4LCAzLCAyMjcsIDEwNywgOCwgMywgMjI3LCAxMTQsIDgsIDMsIDIyNywgMTEzLCA4LCAzLCAyMjcsIAotICAgIDExNywgOCwgMywgMjI3LCAxMTYsIDgsIDMsIDIyNywgOTcsIDgsIDMsIDIyNywgOTgsIDgsIDMsIDIyNywgMTAxLCA4LCAzLCAKLSAgICAyMjcsIDEwMiwgOCwgMywgMjI3LCAxMTAsIDgsIDMsIDIyNywgMTEyLCA4LCAzLCAyMjcsIDkyLCA4LCAzLCAyMjcsIDEwMCwgCi0gICAgOCwgMywgMjI3LCA5NiwgOCwgMywgMjI3LCA5MywgOCwgMywgMjI3LCA5NCwgOCwgMywgMjI3LCA4NywgOCwgMywgMjI3LCAKLSAgICA4NiwgOCwgMywgMjI3LCA5MSwgOCwgMywgMjI3LCA5MCwgOCwgMywgMjI3LCA4OCwgOCwgMywgMjI3LCA4OSwgOCwgMywgCi0gICAgMjE5LCAxMjcsIDgsIDMsIDE5NCwgOCwgMywgMjE5LCAxOTEsIDgsIDMsIDIxOSwgMTMwLCA4LCAzLCAyMTksIDE4MywgOCwgCi0gICAgMywgMjE5LCAxODYsIDgsIDMsIDIxOSwgMTg0LCA4LCAzLCAyMjEsIDIyNiwgOCwgMywgMjIxLCAyMTQsIDgsIDMsIDIwNiwgCi0gICAgOCwgMywgMjIxLCAyMzQsIDgsIDMsIDIxOCwgMjgsIDgsIDMsIDIxOCwgMzAsIDgsIDMsIDIxOCwgMjksIDgsIDMsIDIxOSwgCi0gICAgMzQsIDgsIDMsIDIxOSwgMjMsIDgsIDMsIDIxOSwgNTgsIDgsIDMsIDIxOSwgMzgsIDgsIDMsIDIyMCwgMTE0LCA4LCAzLCAKLSAgICAyMjEsIDE4MSwgOCwgMywgMjIwLCAxMzksIDgsIDMsIDIxOCwgNSwgOCwgMywgMjE4LCAzLCA4LCAzLCAyMTgsIDgzLCA4LCAKLSAgICAzLCAyMTgsIDI3LCA4LCAzLCAyMTgsIDksIDgsIDMsIDIxOCwgMTcsIDgsIDMsIDIxNywgMTY2LCA4LCAzLCAyMTcsIDE2NSwgCi0gICAgOCwgMywgMjE3LCAyMzIsIDgsIDMsIDIxNywgMTczLCA4LCAzLCAyMTcsIDE2OCwgOCwgMywgMjE3LCAxNzIsIDgsIDMsIAotICAgIDIxOCwgMTg2LCA4LCAzLCAyMTgsIDE4NSwgOCwgMywgMjE4LCAxOTIsIDgsIDMsIDIxOCwgMTg3LCA4LCAzLCAyMTgsIDE4OSwgCi0gICAgOCwgMywgMjE4LCAxOTEsIDgsIDMsIDIxOCwgMTkwLCA4LCAzLCAyMTgsIDIwMCwgOCwgMywgMjE4LCAxOTgsIDgsIDMsIAotICAgIDIxOCwgMjIzLCA4LCAzLCAyMTgsIDIwMSwgOCwgMywgMjE4LCAxODEsIDgsIDMsIDIxOCwgMTgwLCA4LCAzLCAyMTgsIDE4NCwgCi0gICAgOCwgMywgMjE4LCAxODIsIDgsIDMsIDIxOCwgMTk0LCA4LCAzLCAyMTgsIDE5NywgOCwgMywgMjE4LCAxOTUsIDgsIDMsIAotICAgIDIxOCwgMTc3LCA4LCAzLCAyMTgsIDE3NSwgOCwgMywgMjE4LCAxNzksIDgsIDMsIDIxOCwgMTc4LCA4LCAzLCAyMTgsIDE3MCwgCi0gICAgOCwgMywgMjE4LCAxNjksIDgsIDMsIDIxOCwgMTc0LCA4LCAzLCAyMTgsIDE3MywgOCwgMywgMjE4LCAxNzEsIDgsIDMsIAotICAgIDIxOCwgMTcyLCA4LCAzLCAyMTAsIDc3LCA4LCAzLCAyMTAsIDc2LCA4LCAzLCAyMTAsIDgyLCA4LCAzLCAyMTAsIDc5LCA4LCAKLSAgICAzLCAyMTAsIDU5LCA4LCAzLCAyMTAsIDYxLCA4LCAzLCAyMTAsIDYwLCA4LCAzLCAyMTAsIDY0LCA4LCAzLCAyMTAsIDYzLCAKLSAgICA4LCAzLCAyMTAsIDY3LCA4LCAzLCAyMTAsIDY1LCA4LCAzLCAyMTAsIDcxLCA4LCAzLCAyMTAsIDcwLCA4LCAzLCAyMTAsIAotICAgIDc0LCA4LCAzLCAyMTAsIDcyLCA4LCAzLCAyMTAsIDU1LCA4LCAzLCAyMTAsIDU0LCA4LCAzLCAyMTAsIDYyLCA4LCAzLCAKLSAgICAyMTAsIDU4LCA4LCAzLCAyMTAsIDU2LCA4LCAzLCAyMTAsIDU3LCA4LCAzLCAyMTAsIDQ3LCA4LCAzLCAyMTAsIDQ2LCA4LCAKLSAgICAzLCAyMTAsIDUxLCA4LCAzLCAyMTAsIDUwLCA4LCAzLCAyMTAsIDQ4LCA4LCAzLCAyMTAsIDQ5LCA4LCAzLCAyNTAsIDEzNiwgCi0gICAgOCwgMywgMjUwLCAxMzMsIDgsIDMsIDI1MCwgMTU3LCA4LCAzLCAyNTAsIDE0NCwgOCwgMywgMjUwLCA2NSwgOCwgMywgMjUwLCAKLSAgICA2NCwgOCwgMywgMjUwLCA2NywgOCwgMywgMjUwLCA2NiwgOCwgMywgMjUwLCA3OSwgOCwgMywgMjUwLCA3OCwgOCwgMywgCi0gICAgMjUwLCA4NiwgOCwgMywgMjUwLCA4MSwgOCwgMywgMjUwLCAxMTUsIDgsIDMsIDI1MCwgMTEzLCA4LCAzLCAyNTAsIDEzMSwgCi0gICAgOCwgMywgMjUwLCAxMjEsIDgsIDMsIDI1MCwgNTksIDgsIDMsIDI1MCwgNjksIDgsIDMsIDI1MCwgNjMsIDgsIDMsIDI1MCwgCi0gICAgNjAsIDgsIDMsIDI1MCwgNjIsIDgsIDMsIDI1MCwgNTMsIDgsIDMsIDI1MCwgNTIsIDgsIDMsIDI1MCwgNTcsIDgsIDMsIAotICAgIDI1MCwgNTYsIDgsIDMsIDI1MCwgNTQsIDgsIDMsIDI1MCwgNTUsIDgsIDMsIDIyMiwgMTc1LCA4LCAzLCAyMjIsIDE3OSwgOCwgCi0gICAgMywgMjIyLCAxNTgsIDgsIDMsIDIyMiwgMTU5LCA4LCAzLCAyMjIsIDE2MiwgOCwgMywgMjIyLCAxNjEsIDgsIDMsIDIyMiwgCi0gICAgMTY1LCA4LCAzLCAyMjIsIDE2MywgOCwgMywgMjIyLCAxNjksIDgsIDMsIDIyMiwgMTY4LCA4LCAzLCAyMjIsIDE3NCwgOCwgCi0gICAgMywgMjIyLCAxNzAsIDgsIDMsIDIyMiwgMTU0LCA4LCAzLCAyMjIsIDE1MiwgOCwgMywgMjIyLCAxNjAsIDgsIDMsIDIyMiwgCi0gICAgMTU3LCA4LCAzLCAyMjIsIDE1NSwgOCwgMywgMjIyLCAxNTYsIDgsIDMsIDIyMiwgMTQ3LCA4LCAzLCAyMjIsIDE0NiwgOCwgCi0gICAgMywgMjIyLCAxNTEsIDgsIDMsIDIyMiwgMTUwLCA4LCAzLCAyMjIsIDE0OCwgOCwgMywgMjIyLCAxNDksIDgsIDMsIDIyOCwgCi0gICAgMzQsIDgsIDMsIDIyOCwgMzMsIDgsIDMsIDIyOCwgMzYsIDgsIDMsIDIyOCwgMzUsIDgsIDMsIDIyOCwgMjYsIDgsIDMsIAotICAgIDIyOCwgMjgsIDgsIDMsIDIyOCwgMjcsIDgsIDMsIDIyOCwgMzAsIDgsIDMsIDIyOCwgMjksIDgsIDMsIDIyOCwgMzIsIDgsIAotICAgIDMsIDIyOCwgMzEsIDgsIDMsIDIyOCwgMjEsIDgsIDMsIDIyOCwgMjAsIDgsIDMsIDIyOCwgMjUsIDgsIDMsIDIyOCwgMjQsIAotICAgIDgsIDMsIDIyOCwgMjIsIDgsIDMsIDIyOCwgMjMsIDgsIDMsIDIyOCwgMTUsIDgsIDMsIDIyOCwgMTQsIDgsIDMsIDIyOCwgCi0gICAgMTksIDgsIDMsIDIyOCwgMTgsIDgsIDMsIDIyOCwgMTYsIDgsIDMsIDIyOCwgMTcsIDgsIDMsIDIyMCwgNzIsIDgsIDMsIAotICAgIDIyMCwgNjcsIDgsIDMsIDIyMCwgMTAyLCA4LCAzLCAyMjAsIDgzLCA4LCAzLCAyMTksIDIxNSwgOCwgMywgMjE5LCAyMTcsIAotICAgIDgsIDMsIDIxOSwgMjE2LCA4LCAzLCAyMTksIDIzNiwgOCwgMywgMjE5LCAyMzMsIDgsIDMsIDIyMCwgNywgOCwgMywgMjE5LCAKLSAgICAyNTQsIDgsIDMsIDIyMCwgNDIsIDgsIDMsIDIyMCwgMzUsIDgsIDMsIDIyMCwgNjMsIDgsIDMsIDIyMCwgNTAsIDgsIDMsIAotICAgIDIxOSwgMjExLCA4LCAzLCAyMTksIDIwOSwgOCwgMywgMjE5LCAyMjUsIDgsIDMsIDIxOSwgMjE0LCA4LCAzLCAyMTksIDIxMiwgCi0gICAgOCwgMywgMjE5LCAyMTMsIDgsIDMsIDIxOSwgMTk0LCA4LCAzLCAyMTksIDE5MywgOCwgMywgMjE5LCAyMDAsIDgsIDMsIAotICAgIDIxOSwgMTk3LCA4LCAzLCAyMTksIDE5NSwgOCwgMywgMjE5LCAxOTYsIDgsIDMsIDIyMywgMTQxLCA4LCAzLCAyMjMsIDEzNSwgCi0gICAgOCwgMywgMjA1LCA4LCAzLCAyMjMsIDE0NywgOCwgMywgMjIyLCAxMjAsIDgsIDMsIDIyMiwgMTIyLCA4LCAzLCAyMjIsIAotICAgIDEyMSwgOCwgMywgMjIyLCAxODgsIDgsIDMsIDIyMiwgMTgxLCA4LCAzLCAyMjIsIDIxMSwgOCwgMywgMjIyLCAxOTIsIDgsIAotICAgIDMsIDIyMywgNDMsIDgsIDMsIDIyMywgMTI4LCA4LCAzLCAyMjMsIDgxLCA4LCAzLCAyMjIsIDExMywgOCwgMywgMjIyLCAKLSAgICAxMTAsIDgsIDMsIDIyMiwgMTQwLCA4LCAzLCAyMjIsIDExOSwgOCwgMywgMjIyLCAxMTUsIDgsIDMsIDIyMiwgMTE2LCA4LCAKLSAgICAzLCAyMjIsIDk1LCA4LCAzLCAyMjIsIDk0LCA4LCAzLCAyMjIsIDEwMCwgOCwgMywgMjIyLCA5OCwgOCwgMywgMjIyLCA5NiwgCi0gICAgOCwgMywgMjIyLCA5NywgOCwgMywgMjM1LCA5OCwgOCwgMywgMjM1LCA5NywgOCwgMywgMjM1LCAxMDgsIDgsIDMsIDIzNSwgCi0gICAgOTksIDgsIDMsIDIzNSwgMTA0LCA4LCAzLCAyMzUsIDEwMywgOCwgMywgMjM1LCAxMDYsIDgsIDMsIDIzNSwgMTA1LCA4LCAzLCAKLSAgICAyMzUsIDQxLCA4LCAzLCAyMzUsIDQwLCA4LCAzLCAyMzUsIDQzLCA4LCAzLCAyMzUsIDQyLCA4LCAzLCAyMzUsIDU2LCA4LCAKLSAgICAzLCAyMzUsIDU0LCA4LCAzLCAyMzUsIDY4LCA4LCAzLCAyMzUsIDU4LCA4LCAzLCAyMzUsIDM0LCA4LCAzLCAyMzUsIDMyLCAKLSAgICA4LCAzLCAyMzUsIDUxLCA4LCAzLCAyMzUsIDM5LCA4LCAzLCAyMzUsIDM2LCA4LCAzLCAyMzUsIDM3LCA4LCAzLCAyMzUsIAotICAgIDI2LCA4LCAzLCAyMzUsIDI1LCA4LCAzLCAyMzUsIDMwLCA4LCAzLCAyMzUsIDI5LCA4LCAzLCAyMzUsIDI3LCA4LCAzLCAKLSAgICAyMzUsIDI4LCA4LCAzLCAyMjQsIDQ2LCA4LCAzLCAyMjQsIDQ0LCA4LCAzLCAyMjQsIDUzLCA4LCAzLCAyMjQsIDQ3LCA4LCAKLSAgICAzLCAyMjQsIDUwLCA4LCAzLCAyMjQsIDQ5LCA4LCAzLCAyMjQsIDUyLCA4LCAzLCAyMjQsIDUxLCA4LCAzLCAyMjMsIDI1NSwgCi0gICAgOCwgMywgMjIzLCAyNTIsIDgsIDMsIDIyNCwgMSwgOCwgMywgMjI0LCAwLCA4LCAzLCAyMjQsIDMzLCA4LCAzLCAyMjQsIDMyLCAKLSAgICA4LCAzLCAyMjQsIDQyLCA4LCAzLCAyMjQsIDM2LCA4LCAzLCAyMjMsIDI0NywgOCwgMywgMjIzLCAyNDMsIDgsIDMsIDIyNCwgCi0gICAgMzAsIDgsIDMsIDIyMywgMjUxLCA4LCAzLCAyMjMsIDI0OSwgOCwgMywgMjIzLCAyNTAsIDgsIDMsIDIyMywgMjI3LCA4LCAzLCAKLSAgICAyMjMsIDIyNSwgOCwgMywgMjIzLCAyMzcsIDgsIDMsIDIyMywgMjMwLCA4LCAzLCAyMjMsIDIyOCwgOCwgMywgMjIzLCAyMjksIAotICAgIDgsIDMsIDIzNSwgODcsIDgsIDMsIDIzNSwgODYsIDgsIDMsIDIzNSwgOTMsIDgsIDMsIDIzNSwgODgsIDgsIDMsIDIzNSwgCi0gICAgOTAsIDgsIDMsIDIzNSwgODksIDgsIDMsIDIzNSwgOTIsIDgsIDMsIDIzNSwgOTEsIDgsIDMsIDIzNSwgNzgsIDgsIDMsIAotICAgIDIzNSwgODAsIDgsIDMsIDIzNSwgNzksIDgsIDMsIDIzNSwgODMsIDgsIDMsIDIzNSwgODIsIDgsIDMsIDIzNSwgODUsIDgsIAotICAgIDMsIDIzNSwgODQsIDgsIDMsIDIzNSwgNzQsIDgsIDMsIDIzNSwgNzMsIDgsIDMsIDIzNSwgODEsIDgsIDMsIDIzNSwgNzcsIAotICAgIDgsIDMsIDIzNSwgNzUsIDgsIDMsIDIzNSwgNzYsIDgsIDMsIDIzNSwgNzAsIDgsIDMsIDIzNSwgNjksIDgsIDMsIDIzNSwgCi0gICAgNzIsIDgsIDMsIDIzNSwgNzEsIDgsIDMsIDIyOCwgMTYyLCA4LCAzLCAyMjgsIDE2MSwgOCwgMywgMjI4LCAxNjksIDgsIDMsIAotICAgIDIyOCwgMTYzLCA4LCAzLCAyMjgsIDE2NSwgOCwgMywgMjI4LCAxNjQsIDgsIDMsIDIyOCwgMTY4LCA4LCAzLCAyMjgsIDE2NiwgCi0gICAgOCwgMywgMjI4LCAxNTEsIDgsIDMsIDIyOCwgMTUyLCA4LCAzLCAyMjgsIDE1NywgOCwgMywgMjI4LCAxNTYsIDgsIDMsIAotICAgIDIyOCwgMTYwLCA4LCAzLCAyMjgsIDE1OCwgOCwgMywgMjI4LCAxNDYsIDgsIDMsIDIyOCwgMTU1LCA4LCAzLCAyMjgsIDE1MCwgCi0gICAgOCwgMywgMjI4LCAxNDcsIDgsIDMsIDIyOCwgMTQ4LCA4LCAzLCAyMjgsIDE0MSwgOCwgMywgMjI4LCAxNDAsIDgsIDMsIAotICAgIDIyOCwgMTQ1LCA4LCAzLCAyMjgsIDE0NCwgOCwgMywgMjI4LCAxNDIsIDgsIDMsIDIyOCwgMTQzLCA4LCAzLCAyMjcsIDEzNywgCi0gICAgOCwgMywgMjI3LCAxMzYsIDgsIDMsIDIyNywgMTQ4LCA4LCAzLCAyMjcsIDE0MSwgOCwgMywgMjI3LCAxNDUsIDgsIDMsIAotICAgIDIyNywgMTQ0LCA4LCAzLCAyMjcsIDE0NywgOCwgMywgMjI3LCAxNDYsIDgsIDMsIDIyNywgMTI0LCA4LCAzLCAyMjcsIDEyNiwgCi0gICAgOCwgMywgMjI3LCAxMjUsIDgsIDMsIDIyNywgMTMwLCA4LCAzLCAyMjcsIDEyOSwgOCwgMywgMjI3LCAxMzQsIDgsIDMsIAotICAgIDIyNywgMTMxLCA4LCAzLCAyMjcsIDEyMiwgOCwgMywgMjI3LCAxMjAsIDgsIDMsIDIyNywgMTI4LCA4LCAzLCAyMjcsIDEyMywgCi0gICAgOCwgMywgMjExLCAxNTAsIDgsIDMsIDIxMSwgMTQ5LCA4LCAzLCAyMTEsIDE1NywgOCwgMywgMjExLCAxNTIsIDgsIDMsIAotICAgIDIxMSwgMTU0LCA4LCAzLCAyMTEsIDE1MywgOCwgMywgMjExLCAxNTYsIDgsIDMsIDIxMSwgMTU1LCA4LCAzLCAyMTEsIDEzOSwgCi0gICAgOCwgMywgMjExLCAxNDAsIDgsIDMsIDIxMSwgMTQ0LCA4LCAzLCAyMTEsIDE0MywgOCwgMywgMjExLCAxNDgsIDgsIDMsIAotICAgIDIxMSwgMTQ2LCA4LCAzLCAyMTEsIDEyMSwgOCwgMywgMjExLCAxMTksIDgsIDMsIDIxMSwgMTMxLCA4LCAzLCAyMTEsIDEyNCwgCi0gICAgOCwgMywgMjExLCAxMjIsIDgsIDMsIDIxMSwgMTIzLCA4LCAzLCAyMTAsIDI1MCwgOCwgMywgMjEwLCAyNDgsIDgsIDMsIAotICAgIDIxMSwgOCwgOCwgMywgMjEwLCAyNTEsIDgsIDMsIDIxMSwgMiwgOCwgMywgMjExLCAxLCA4LCAzLCAyMTEsIDUsIDgsIDMsIAotICAgIDIxMSwgMywgOCwgMywgMjEwLCAxOTEsIDgsIDMsIDIxMCwgMTkwLCA4LCAzLCAyMTAsIDE5NCwgOCwgMywgMjEwLCAxOTIsIAotICAgIDgsIDMsIDIxMCwgMjI0LCA4LCAzLCAyMTAsIDIyMSwgOCwgMywgMjEwLCAyNDQsIDgsIDMsIDIxMCwgMjI4LCA4LCAzLCAKLSAgICAyMTAsIDE4MiwgOCwgMywgMjEwLCAxNzgsIDgsIDMsIDIxMCwgMjEyLCA4LCAzLCAyMTAsIDE4OSwgOCwgMywgMjEwLCAxODUsIAotICAgIDgsIDMsIDIxMCwgMTg2LCA4LCAzLCAyMTAsIDE2MiwgOCwgMywgMjEwLCAxNjEsIDgsIDMsIDIxMCwgMTY5LCA4LCAzLCAKLSAgICAyMTAsIDE2NSwgOCwgMywgMjEwLCAxNjMsIDgsIDMsIDIxMCwgMTY0LCA4LCAzNCwgMjI0LCAzMywgOCwgMzQsIDIzMiwgCi0gICAgMjQxLCA4LCAzNCwgMjM0LCA2MSwgOCwgMzQsIDIyNywgMTQxLCA4LCAzNCwgMjQ5LCA2OSwgOCwgMzQsIDIxOCwgMTkyLCA4LCAKLSAgICAzNCwgMjQzLCAxMiwgOCwgMzQsIDI0MywgNDQsIDgsIDM0LCAyMzAsIDIzMCwgOCwgMzQsIDI0MCwgMTgwLCA4LCAzNCwgCi0gICAgMjMyLCA1NiwgOCwgMzQsIDI1MiwgODMsIDgsIDM0LCAyMzAsIDEyNiwgOCwgMzQsIDIxMCwgMjQ0LCA4LCAzNCwgMjI0LCAKLSAgICAxMjEsIDgsIDM0LCAyNDAsIDE3NCwgOCwgMzQsIDIxNywgNDYsIDgsIDM0LCAyNDMsIDEzNSwgOCwgMzQsIDIxMCwgNSwgOCwgCi0gICAgMzQsIDI0OSwgNjMsIDgsIDM0LCAyNDgsIDk1LCA4LCAzNCwgMjUxLCA5OCwgOCwgMzQsIDI0MywgOCwgOCwgMzQsIDIyNywgCi0gICAgMTMxLCA4LCAzNCwgMjE1LCAxMTgsIDgsIDM0LCAyMjYsIDE3NSwgOCwgMzQsIDIzNSwgNzQsIDgsIDM0LCAyMTAsIDE5LCA4LCAKLSAgICAzNCwgMjI0LCAxMDAsIDgsIDM0LCAyNDEsIDEwOCwgOCwgMzQsIDIxMCwgMjUwLCA4LCAzNCwgMjEyLCAxMTIsIDgsIDM0LCAKLSAgICAyMTksIDIwMCwgOCwgMzQsIDIxMywgMjQ0LCA4LCAzNCwgMjEwLCAxMTYsIDgsIDM0LCAyMzUsIDY4LCA4LCAzNCwgMjI3LCAKLSAgICA5NiwgOCwgMzQsIDIzNSwgNzIsIDgsIDM0LCAyNDIsIDE1NCwgOCwgMzQsIDIzNSwgOTIsIDgsIDM0LCAyMTEsIDIyNywgOCwgCi0gICAgMzQsIDI0NiwgNzgsIDgsIDM0LCAyMTksIDIxMywgOCwgMzQsIDIzMiwgMjM2LCA4LCAzNCwgMjQ5LCA3MywgOCwgMzQsIAotICAgIDI0OSwgMTA1LCA4LCAzNCwgMjUwLCAzNywgOCwgMzQsIDI0MCwgMTc3LCA4LCAzNCwgMjIwLCA3MiwgOCwgMzQsIDIxMCwgNCwgCi0gICAgOCwgMzQsIDIxOSwgMjU0LCA4LCAzNCwgMjUwLCAxMzEsIDgsIDM0LCAyMDksIDIzMSwgOCwgMzQsIDIyOSwgMTczLCA4LCAKLSAgICAzNCwgMjM0LCAxODIsIDIzMiwgMTk2LCAxLCAyNTIsIDE5MSwgMjMyLCAxOTYsIDEsIDE5MCwgMjMyLCAxOTYsIDEsIDIyNSwgCi0gICAgMTQ3LCAyMzIsIDE5NiwgMSwgMjQ4LCAyMjEsIDIzMiwgMTk2LCAxLCAyMTcsIDEwNSwgMjMyLCAxOTYsIDEsIDIxNiwgMjA4LCAKLSAgICAyMzIsIDE5NiwgMSwgMjQzLCAxMzUsIDIzMiwgMTk2LCAxLCAxNzYsIDIzMiwgMTk2LCAxLCAyMzQsIDEzMiwgMjMyLCAxOTYsIAotICAgIDEsIDIzNSwgMTQxLCAyMzIsIDE5NiwgMSwgMjUxLCAzMywgMjMyLCAxOTYsIDEsIDI1MCwgMTU3LCAyMzIsIDE5NiwgMSwgCi0gICAgMjQ2LCAzOCwgMjMyLCAxOTYsIDEsIDIxNSwgMTgzLCAyMzIsIDE5NiwgMSwgMjE1LCAxNzUsIDIzMiwgMTk2LCAxLCAxODQsIAotICAgIDIzMiwgMTk2LCAxLCAxOTcsIDIzMiwgMTk2LCAxLCAyMzMsIDEzNSwgMjMyLCAxOTYsIDEsIDIwNiwgMjMyLCAxOTYsIDEsIAotICAgIDIxMCwgODIsIDIzMiwgMTk2LCAxLCAyMTAsIDExNiwgMjMyLCAxOTYsIDEsIDIyOSwgNzcsIDIzMiwgMTk2LCAxLCAxNjIsIAotICAgIDIzMiwgMTk2LCAxLCAyMTEsIDE2NSwgMjMyLCAxOTYsIDEsIDI0MSwgMTg5LCAyMzIsIDE5NiwgMSwgMjQ0LCAxOTYsIDIzMiwgCi0gICAgMTk2LCAxLCAyMTIsIDY1LCAyMzIsIDE5NiwgMSwgMjIwLCAxMDIsIDIzMiwgMTk2LCAxLCAxOTEsIDIzMiwgMTk2LCAxLCAKLSAgICAyNDIsIDI0OSwgMjMyLCAxOTYsIDEsIDYxLCAyMzIsIDE5NiwgMSwgMjU0LCAyNDMsIDIzMiwgMTk2LCAxLCA3NSwgMjMyLCAKLSAgICAxOTYsIDEsIDI0NSwgNTUsIDIzMiwgMTk2LCAxLCA3MywgMjMyLCAxOTYsIDEsIDc2LCAyMzIsIDE5NiwgMSwgNzAsIDIzMiwgCi0gICAgMTk2LCAxLCAyMTQsIDIxNCwgMjMyLCAxOTYsIDEsIDIxNCwgMjA4LCAyMzIsIDE5NiwgMSwgMjI2LCAyMzQsIDIzMiwgMTk2LCAKLSAgICAxLCAxMzgsIDIzMCwgMzIsIDIxNiwgMTE3LCAyMzIsIDE5NiwgMSwgMTM4LCAyMjksIDIyOSwgMjI1LCAxNiwgMjMyLCAxOTYsIAotICAgIDEsIDEzOCwgMjMwLCAzMiwgMjQ5LCA3MiwgMjMyLCAxOTYsIDEsIDEzOCwgMjMwLCAzMiwgMjUxLCAyMDUsIDIzMiwgMTk2LCAKLSAgICAxLCAxMzgsIDIzMCwgMzIsIDE5NywgMjMyLCAxOTYsIDEsIDEzOCwgMjMwLCAzMiwgMjM1LCAxMTUsIDIzMiwgMTk2LCAyMjQsIAotICAgIDE0MSwgMjQ5LCAyMTksIDIzMiwgMTk2LCAyMjQsIDE0MSwgMjQzLCAyMjksIDIxOCwgMTI5LCA0MSwgMywgMjQ1LCAyMDksIAotICAgIDQxLCAzLCAyNDUsIDIwNSwgNDEsIDMsIDI0MSwgMjIwLCA0MSwgMywgMjEyLCAxNywgNDEsIDMsIDIxMiwgMTYsIDQxLCAzLCAKLSAgICAyMjUsIDIxMSwgNDEsIDMsIDI1MiwgMTMsIDQxLCAzLCAyNTIsIDY2LCA0MSwgMywgMjMxLCAxMTYsIDQxLCAzLCAyMzMsIAotICAgIDI0NywgNDEsIDMsIDIzMSwgNiwgNDEsIDMsIDI0MywgNzUsIDQxLCAzLCAyNDQsIDE0NywgNDEsIDMsIDIxMywgMjUwLCA0MSwgCi0gICAgMywgMjE3LCAxMSwgNDEsIDMsIDIxNiwgMTk0LCA0MSwgMywgMjQ4LCAxNiwgNDEsIDMsIDI0OCwgMTMsIDQxLCAzLCAyMzMsIAotICAgIDUwLCA0MSwgMywgMjIzLCAxMDgsIDQxLCAzLCAyNDgsIDc3LCA0MSwgMywgMjI5LCAxMzksIDQxLCAzLCAyMjEsIDE3MCwgCi0gICAgNDEsIDMsIDIyMCwgNjEsIDQxLCAzLCAyMTAsIDkyLCA0MSwgMywgMjEwLCA3MywgNDEsIDMsIDI1MCwgMTgyLCA0MSwgMywgCi0gICAgMjM1LCAxMjQsIDQxLCAzLCAyMjgsIDE3NiwgNDEsIDMsIDIxMSwgNDQsIDQxLCAzLCAyMzQsIDE4MSwgNDEsIDMsIDIyOSwgCi0gICAgNTEsIDQxLCAzLCAyNDMsIDU1LCA0MSwgMywgMjMxLCA4MCwgNDEsIDMsIDIyOSwgMTAzLCA0MSwgMywgMjI3LCAxNTUsIDQxLCAKLSAgICAzLCA3MywgNDEsIDMsIDIzNSwgMjU1LCA0MSwgMywgMjQxLCAxODAsIDQxLCAzLCAyNDEsIDE2MCwgNDEsIDMsIDIxMSwgCi0gICAgMjUwLCA0MSwgMywgMjExLCAyNDEsIDQxLCAzLCAyMjUsIDEwOCwgNDEsIDMsIDI1MiwgMTEsIDQxLCAzLCAyNTIsIDYsIDQxLCAKLSAgICAzLCAyMzEsIDEwOSwgNDEsIDMsIDIzMywgMjQ0LCA0MSwgMywgMjMxLCAzLCA0MSwgMywgMjQzLCA3MSwgNDEsIDMsIDI0NCwgCi0gICAgMTIxLCA0MSwgMywgMjEzLCAxNzYsIDQxLCAzLCAyMTYsIDExNywgNDEsIDMsIDIxNiwgMTc1LCA0MSwgMywgMjQ4LCA4LCAKLSAgICA0MSwgMywgMjQ4LCAxMiwgNDEsIDMsIDIzMiwgMjQxLCA0MSwgMywgMjIzLCAzNSwgNDEsIDMsIDI0OCwgMywgNDEsIDMsIAotICAgIDIyOSwgMTMzLCA0MSwgMywgMjE5LCAxOTEsIDQxLCAzLCAyMjAsIDMyLCA0MSwgMywgMjEwLCA0NCwgNDEsIDMsIDIxMCwgCi0gICAgNjksIDQxLCAzLCAyNTAsIDUxLCA0MSwgMywgMjM1LCAxMDgsIDQxLCAzLCAyMjgsIDE2OSwgNDEsIDMsIDIxMSwgOCwgNDEsIAotICAgIDMsIDIzNCwgOTIsIDQxLCAzLCAyMjksIDQzLCA0MSwgMywgMjQyLCAyMTQsIDQxLCAzLCAyMzAsIDIzMCwgNDEsIDMsIDIyOCwgCi0gICAgMjMzLCA0MSwgMywgMjI3LCAxNDgsIDQxLCAzLCA2MSwgNDEsIDMsIDI1NCwgMTIzLCA0MSwgMywgMjI5LCA3MiwgNDEsIDMsIAotICAgIDE2MiwgNDEsIDMsIDI0MiwgMTgsIDQxLCAzLCAyMTIsIDY1LCA0MSwgMywgMjEyLCA1NSwgNDEsIDMsIDE5MCwgNDEsIDMsIAotICAgIDI1MiwgMTgsIDQxLCAzLCAyNTIsIDE5MSwgNDEsIDMsIDIzMSwgMTI0LCA0MSwgMywgMjMzLCAyNTEsIDQxLCAzLCAyMzMsIAotICAgIDI1MCwgNDEsIDMsIDIzMSwgMTAsIDQxLCAzLCAyNDMsIDc5LCA0MSwgMywgMjQ0LCAxOTYsIDQxLCAzLCAyMTQsIDI3LCA0MSwgCi0gICAgMywgMjE3LCAxMDUsIDQxLCAzLCAyMTYsIDIwOCwgNDEsIDMsIDI0OCwgMjUsIDQxLCAzLCAyNDgsIDE1LCA0MSwgMywgMjMzLCAKLSAgICAxMzUsIDQxLCAzLCAyMDUsIDQxLCAzLCAyNDgsIDIyMSwgNDEsIDMsIDIyOSwgMTQ4LCA0MSwgMywgMjA2LCA0MSwgMywgCi0gICAgMjIwLCAxMDIsIDQxLCAzLCAyMTAsIDExNiwgNDEsIDMsIDIxMCwgODIsIDQxLCAzLCAyNTEsIDMzLCA0MSwgMywgMjM1LCAKLSAgICAxNDEsIDQxLCAzLCAyMjgsIDE4NSwgNDEsIDMsIDE5MSwgNDEsIDMsIDE3NiwgNDEsIDMsIDIzNCwgMjM0LCA0MSwgMywgCi0gICAgMjI5LCA1NiwgNDEsIDMsIDI0MywgMTM1LCA0MSwgMywgMTg0LCA0MSwgMywgMTk3LCA0MSwgMywgMjI3LCAxNjUsIDQxLCAzLCAKLSAgICAyMjYsIDE4MywgNDEsIDMsIDIyNiwgMTc5LCA0MSwgMywgMjQxLCA1MywgNDEsIDMsIDIxMSwgMjE1LCA0MSwgMywgMjExLCAKLSAgICAyMTEsIDQxLCAzLCAyMjQsIDI0OSwgNDEsIDMsIDI1MiwgOSwgNDEsIDMsIDI1MSwgMTkzLCA0MSwgMywgMjMxLCAxMDQsIAotICAgIDQxLCAzLCAyMzMsIDI0MiwgNDEsIDMsIDIzMCwgMjU1LCA0MSwgMywgMjQzLCA2NywgNDEsIDMsIDI0NCwgMzQsIDQxLCAzLCAKLSAgICAyMTMsIDEyNywgNDEsIDMsIDIxNiwgMTcsIDQxLCAzLCAyMTYsIDE1MywgNDEsIDMsIDI0OCwgNiwgNDEsIDMsIDI0OCwgMTAsIAotICAgIDQxLCAzLCAyMzIsIDEyNywgNDEsIDMsIDIyMiwgMTk3LCA0MSwgMywgMjQ3LCAxMjUsIDQxLCAzLCAyMjksIDEyMCwgNDEsIAotICAgIDMsIDIxOSwgNDAsIDQxLCAzLCAyMjAsIDEsIDQxLCAzLCAyMTAsIDIxLCA0MSwgMywgMjEwLCA2NiwgNDEsIDMsIDI0OSwgCi0gICAgMTc0LCA0MSwgMywgMjM1LCA1OSwgNDEsIDMsIDIyOCwgMTU5LCA0MSwgMywgMjEwLCAyMjksIDQxLCAzLCAyMzQsIDEwLCAKLSAgICA0MSwgMywgMjI5LCA0MSwgNDEsIDMsIDI0MiwgMTY0LCA0MSwgMywgMjMwLCAxMzIsIDQxLCAzLCAyMjgsIDY0LCA0MSwgMywgCi0gICAgMjI3LCAxMzIsIDQxLCAzLCA3MCwgNDEsIDMsIDIxNCwgMTkwLCA0MSwgMywgMjQwLCAyMjIsIDQxLCAzLCAyNDAsIDIxMiwgCi0gICAgNDEsIDMsIDIxMSwgMTk1LCA0MSwgMywgMjExLCAxODksIDQxLCAzLCAyMjQsIDE1MCwgNDEsIDMsIDI1MiwgOCwgNDEsIDMsIAotICAgIDI1MSwgMTI1LCA0MSwgMywgMjMxLCAxMDMsIDQxLCAzLCAyMzMsIDI0MCwgNDEsIDMsIDIzMCwgMjU0LCA0MSwgMywgMjQzLCAKLSAgICA2NiwgNDEsIDMsIDI0MywgMjM0LCA0MSwgMywgMjEyLCAxMTYsIDQxLCAzLCAyMTUsIDExOCwgNDEsIDMsIDIxNiwgMTM2LCAKLSAgICA0MSwgMywgMjQ4LCA0LCA0MSwgMywgMjQ4LCA5LCA0MSwgMywgMjMyLCA5OCwgNDEsIDMsIDIyMiwgMTQwLCA0MSwgMywgCi0gICAgMjQ2LCA3OCwgNDEsIDMsIDIyOSwgMTE1LCA0MSwgMywgMjE4LCA4MywgNDEsIDMsIDIxOSwgMjI1LCA0MSwgMywgMjEwLCAKLSAgICAxMywgNDEsIDMsIDIxMCwgNjIsIDQxLCAzLCAyNDksIDExMiwgNDEsIDMsIDIzNSwgNTEsIDQxLCAzLCAyMjgsIDE1NSwgNDEsIAotICAgIDMsIDIxMCwgMjEyLCA0MSwgMywgMjMzLCAyMTcsIDQxLCAzLCAyMjksIDQwLCA0MSwgMywgMjQyLCAxMTMsIDQxLCAzLCAKLSAgICAyMzAsIDEwMiwgNDEsIDMsIDIyNywgMjM3LCA0MSwgMywgMjI3LCAxMjgsIDQxLCAzLCA3NiwgNDEsIDMsIDIyNiwgMTk2LCAKLSAgICA0MSwgMywgMjI5LCAwLCA0MSwgMywgMjQxLCA2OCwgNDEsIDMsIDI0MSwgNTYsIDQxLCAzLCAyMTEsIDIyNywgNDEsIDMsIAotICAgIDIxMSwgMjE2LCA0MSwgMywgMjI1LCAxNiwgNDEsIDMsIDI1MiwgMTAsIDQxLCAzLCAyNTEsIDIwNSwgNDEsIDMsIDIzMSwgCi0gICAgMTA1LCA0MSwgMywgMjMzLCAyNDMsIDQxLCAzLCAyMzEsIDEsIDQxLCAzLCAyNDMsIDY5LCA0MSwgMywgMjQzLCA2OCwgNDEsIAotICAgIDMsIDI0NCwgNDMsIDQxLCAzLCAyMTMsIDEzOCwgNDEsIDMsIDExMSwgNDEsIDMsIDIxNiwgMTU2LCA0MSwgMywgMjQ4LCA3LCAKLSAgICA0MSwgMywgMjQ4LCAxMSwgNDEsIDMsIDIzMiwgMTU2LCA0MSwgMywgMjIyLCAyMTEsIDQxLCAzLCAyNDcsIDE0NSwgNDEsIDMsIAotICAgIDIyOSwgMTI0LCA0MSwgMywgMjE5LCA1OCwgNDEsIDMsIDIyMCwgNywgNDEsIDMsIDIxMCwgMjMsIDQxLCAzLCAyMTAsIDY3LCAKLSAgICA0MSwgMywgMjQ5LCAyMzgsIDQxLCAzLCAyMzUsIDY4LCA0MSwgMywgMjI4LCAxNjAsIDQxLCAzLCAyMTAsIDI0NCwgNDEsIDMsIAotICAgIDIzNCwgMjgsIDQxLCAzLCAyMjksIDQyLCA0MSwgMywgMjQyLCAxNzQsIDQxLCAzLCAyMzAsIDE2MSwgNDEsIDMsIDIyOCwgCi0gICAgNzQsIDQxLCAzLCAyMjcsIDEzNCwgNDEsIDMsIDc1LCA0MSwgMywgMjQ1LCAxNTAsIDQxLCAzLCAyMjksIDYxLCA0MSwgMywgCi0gICAgMjQxLCAyMzgsIDQxLCAzLCAyNDEsIDIwOSwgNDEsIDMsIDIxMiwgMjIsIDQxLCAzLCAyMTIsIDEyLCA0MSwgMywgMjI1LCAKLSAgICAyMjEsIDQxLCAzLCAyNTIsIDE0LCA0MSwgMywgMjUyLCA3NSwgNDEsIDMsIDIzMSwgMTE3LCA0MSwgMywgMjMzLCAyNDgsIAotICAgIDQxLCAzLCAyMzMsIDI0NiwgNDEsIDMsIDIzMSwgNywgNDEsIDMsIDI0MywgNzYsIDQxLCAzLCAyNDMsIDc0LCA0MSwgMywgCi0gICAgMjQ0LCAxNTQsIDQxLCAzLCAyMTMsIDI1NSwgNDEsIDMsIDIxNywgMjIsIDQxLCAzLCAyMTYsIDE5NSwgNDEsIDMsIDI0OCwgCi0gICAgMTcsIDQxLCAzLCAyNDgsIDE0LCA0MSwgMywgMjMzLCA1OCwgNDEsIDMsIDIyMywgMTI4LCA0MSwgMywgMjQ4LCA5MCwgNDEsIAotICAgIDMsIDIyOSwgMTQwLCA0MSwgMywgMjIxLCAxODEsIDQxLCAzLCAyMjAsIDYzLCA0MSwgMywgMjEwLCA5NCwgNDEsIDMsIDIxMCwgCi0gICAgNzQsIDQxLCAzLCAyNTAsIDE5MCwgNDEsIDMsIDIzNSwgMTI2LCA0MSwgMywgMjI4LCAxNzgsIDQxLCAzLCAyMTEsIDQ3LCAKLSAgICA0MSwgMywgMjM0LCAxODIsIDQxLCAzLCAyMjksIDUyLCA0MSwgMywgMjI5LCA0OCwgNDEsIDMsIDI0MywgNjIsIDQxLCAzLCAKLSAgICAyNDMsIDUxLCA0MSwgMywgMjMxLCA5MSwgNDEsIDMsIDIyOSwgMTA3LCA0MSwgMywgMjI3LCAxNTYsIDQxLCAzLCAyMjksIAotICAgIDc5LCA0MSwgMywgMjMzLCAyMiwgNDEsIDI0OSwgMjE5LCA0MSwgMjQzLCAyMjksIDIxOCwgMTI5LCA0MSwgMjI0LCAxMywgCi0gICAgNzgsIDQxLCAzLCAyMjksIDEyMywgMjQ0LCAxOTYsIDQxLCAzLCAyMjksIDEyMywgMTc2LCA0MSwgMywgMjI5LCAxMjMsIAotICAgIDIxOSwgNDAsIDQxLCAxNiwgMjQ0LCAxNDQsIDQxLCAxNiwgMjM0LCAxODAsIDQxLCAxNiwgMjE2LCA4MSwgNDEsIDE2LCAKLSAgICAyMjgsIDIwOCwgNDEsIDE2LCAyNTIsIDE0NywgNDEsIDE2LCAyNDQsIDE5NSwgNDEsIDE2LCAyMTcsIDEwMSwgNDEsIDE2LCAKLSAgICAyNDgsIDE3NiwgNDEsIDE2LCAyNDcsIDEyNCwgNDEsIDE2LCAyMzMsIDIwNiwgNDEsIDE2LCAyMTYsIDIxLCA0MSwgMTYsIAotICAgIDI0NywgMTQ0LCA0MSwgMTYsIDIzNSwgNjAsIDQxLCAyMSwgMjEwLCA4NiwgNDEsIDIxLCAxMTAsIDQxLCAyMSwgMTA1LCA0MSwgCi0gICAgMjEsIDE1OCwgNDEsIDIxLCAxNjEsIDQxLCAyMSwgMTg5LCA0MSwgMjEsIDE5NCwgNDEsIDIxLCAxOTgsIDQxLCAyMSwgMTk1LCAKLSAgICA0MSwgMjEsIDIwMCwgNDEsIDMsIDIyOSwgMTIzLCAxODQsIDQxLCAzLCAyMjksIDEyMywgMjQ3LCAxNDUsIDMzLCA2LCAxLCAKLSAgICAyMTAsIDkwLCAzMywgNCwgMSwgMjEwLCA5MCwgMzMsIDYsIDEsIDI0NiwgMzQsIDMzLCA0LCAxLCAyNDYsIDM0LCAzMywgNiwgCi0gICAgMSwgMjIzLCA0OSwgMjQ2LCAzNiwgMzMsIDQsIDEsIDIyMywgNDksIDI0NiwgMzYsIDMzLCA2LCAxLCAyMzUsIDE4NSwgMzMsIAotICAgIDQsIDEsIDIzNSwgMTg1LCAzMywgNiwgMSwgMjQ3LCAxNjEsIDMzLCA0LCAxLCAyNDcsIDE2MSwgMzMsIDYsIDEsIDIzMCwgCi0gICAgMTQwLCAyMTQsIDIwNSwgMzMsIDQsIDEsIDIzMCwgMTQwLCAyMTQsIDIwNSwgMzMsIDYsIDEsIDI1MSwgMTM2LCAyMjYsIAotICAgIDIwMSwgMzMsIDQsIDEsIDI1MSwgMTM2LCAyMjYsIDIwMSwgMzMsIDYsIDEsIDIyOSwgODcsIDIxMSwgMzEsIDMzLCA0LCAxLCAKLSAgICAyMjksIDg3LCAyMTEsIDMxLCAzMywgNiwgMSwgMjExLCAyOCwgMiwgMjUyLCAxODUsIDIxMSwgMzEsIDMzLCA0LCAxLCAyMTEsIAotICAgIDI4LCAyLCAyNTIsIDE4NSwgMjExLCAzMSwgMzMsIDYsIDEsIDIzNSwgMTgzLCAyMTEsIDU5LCAzMywgNCwgMSwgMjM1LCAKLSAgICAxODMsIDIxMSwgNTksIDMzLCA2LCAxLCAyMjMsIDQ5LCAyMTAsIDIxMiwgMzMsIDQsIDEsIDIyMywgNDksIDIxMCwgMjEyLCAKLSAgICAzMywgNiwgMSwgMjM1LCAxODMsIDYxLCAzMywgNCwgMSwgMjM1LCAxODMsIDYxLCAzMywgNiwgMSwgMjUwLCAwLCAyMzIsIAotICAgIDE5MiwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTAsIDAsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIDI1MSwgMjE0LCAKLSAgICAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MSwgMjE0LCAyMTAsIDE4MywgMzMsIDYsIDEsIDIzNSwgMTgzLCAyNTAsIDAsIDIzMiwgCi0gICAgMTkyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTgzLCAyNTAsIDAsIDIzMiwgMTkyLCAyMTAsIDE4MywgMzMsIDYsIDEsIAotICAgIDIxMCwgMjQ2LCAzMywgNCwgMSwgMjEwLCAyNDYsIDMzLCA2LCAxLCAyMjMsIDQ5LCAyMTUsIDE3OCwgMzMsIDQsIDEsIDIyMywgCi0gICAgNDksIDIxNSwgMTc4LCAzMywgNiwgMSwgMjE5LCA1MiwgMjQ4LCA5MCwgMzMsIDQsIDEsIDIxOSwgNTIsIDI0OCwgOTAsIDMzLCAKLSAgICA2LCAxLCAyMTksIDUyLCAyNDUsIDE3NCwgMzMsIDQsIDEsIDIxOSwgNTIsIDI0NSwgMTc0LCAzMywgNiwgMSwgMjE5LCA1MiwgCi0gICAgMjQ1LCAxNTksIDMzLCA0LCAxLCAyMTksIDUyLCAyNDUsIDE1OSwgMzMsIDYsIDEsIDIzMCwgMTQ0LCA3NiwgMzMsIDQsIDEsIAotICAgIDIzMCwgMTQ0LCA3NiwgMzMsIDYsIDEsIDI1MSwgMjQwLCA3NiwgMzMsIDQsIDEsIDI1MSwgMjQwLCA3NiwgMzMsIDYsIDEsIAotICAgIDUyLCAyMzAsIDE0NCwgNzYsIDMzLCA0LCAxLCA1MiwgMjMwLCAxNDQsIDc2LCAzMywgMSwgMjMwLCA4NiwgNzYsIDM4LCAzMywgCi0gICAgMjEyLCAxMDAsIDM4LCAzMywgMjE2LCAyNDgsIDIzMCwgMTkxLCA1MCwgMzgsIDMzLCAyNDAsIDIxMSwgMjMwLCAxOTEsIDUwLCAKLSAgICAzOCwgMzMsIDIxNiwgMTQ4LCAyMzAsIDE5MSwgNTAsIDIxOSwgOTMsIDI1MywgMjE2LCAzOCwgMzMsIDEsIDIxNCwgMjAyLCAKLSAgICAyMzYsIDYwLCAzOCwgMzMsIDEsIDczLCAzOCwgMzMsIDEsIDIxMSwgOCwgMzgsIDMzLCAxLCA3MCwgMzgsIDMzLCAxLCAyNDIsIAotICAgIDMsIDUwLCAzOCwgMzMsIDEsIDIxMSwgMjcsIDM4LCAzMywgMSwgMjE5LCA1MiwgNTAsIDM4LCAzMywgMSwgMjI2LCAyMDEsIAotICAgIDM4LCAzMywgMjM0LCAxOTIsIDM4LCAzMywgMjI1LCAyMjcsIDMzLCAyMzQsIDE5MiwgMzMsIDIyNSwgMjI3LCAzMywgNiwgMSwgCi0gICAgMjQ2LCA0NiwgMzMsIDQsIDEsIDI0NiwgNDYsIDMzLCA2LCAxLCAyNDYsIDI3LCAzMywgNCwgMSwgMjQ2LCAyNywgMzMsIDYsIAotICAgIDEsIDIxMCwgNTIsIDMzLCA0LCAxLCAyMTAsIDUyLCAzMywgNiwgMSwgMjUwLCAyMDYsIDMzLCA0LCAxLCAyNTAsIDIwNiwgCi0gICAgMzMsIDYsIDEsIDI0NiwgMjUsIDMzLCA0LCAxLCAyNDYsIDI1LCAzMywgNiwgMSwgMjE3LCAyMywgMiwgMjMwLCAyMjQsIAotICAgIDEwMywgMzMsIDQsIDEsIDIxNywgMjMsIDIsIDIzMCwgMjI0LCAxMDMsIDMzLCA2LCAxLCAyMTUsIDc4LCAzMywgNCwgMSwgCi0gICAgMjE1LCA3OCwgMzMsIDYsIDEsIDIxNSwgMTYwLCAzMywgNCwgMSwgMjE1LCAxNjAsIDMzLCA2LCAxLCAyMTUsIDE2NCwgMzMsIAotICAgIDQsIDEsIDIxNSwgMTY0LCAzMywgNiwgMSwgMjE3LCAyOCwgMzMsIDQsIDEsIDIxNywgMjgsIDMzLCA2LCAxLCAyNDAsIDE5OCwgCi0gICAgMzMsIDQsIDEsIDI0MCwgMTk4LCAzMywgNiwgMSwgMjE5LCAyMDYsIDMzLCA0LCAxLCAyMTksIDIwNiwgMzgsIDMzLCAxLCAKLSAgICAyMzUsIDE4MywgNzUsIDIwLCAxLCA2MSwgMjAsIDEsIDE3NiwgMjAsIDEsIDcwLCAyMCwgMSwgMjMzLCAyMTcsIDIwLCAxLCAKLSAgICAyNDUsIDIwOSwgMjAsIDEsIDIyMywgMTA4LCAyMCwgMSwgMjE3LCA4NiwgMjAsIDEsIDc2LCAyMCwgMSwgMjI3LCAxNDgsIAotICAgIDIwLCAxLCA3MywgMjAsIDEsIDIzMywgMTM1LCAyMCwgMSwgMTkwLCAyMCwgMSwgMjIyLCAyMzksIDIwLCAxLCAyMjMsIDI5LCAKLSAgICAyMCwgMSwgMjMzLCA0OSwgMjAsIDEsIDIzMSwgNzksIDIwLCAxLCAyMTcsIDEwMSwgMjAsIDEsIDIyOSwgMTQ2LCAyMCwgMSwgCi0gICAgMjI4LCAxODMsIDIwLCAxLCAxOTMsIDIwLCAxLCAyMTgsIDQsIDIwLCAxLCAyMzAsIDEwMiwgMjAsIDEsIDIyMCwgMjcsIDIwLCAKLSAgICAxLCAyMTksIDE5MSwgMjAsIDEsIDIyMCwgMzcsIDIwLCAxLCAyMjAsIDEyMywgMjAsIDEsIDIzMywgMTU1LCAyMCwgMSwgCi0gICAgMjM0LCAxNTYsIDIwLCAxLCAyMjcsIDIwOSwgMjAsIDEsIDIyNywgMjM3LCAyMCwgMSwgMjI4LCAxNTQsIDIwLCAxLCAyMTAsIAotICAgIDIyNiwgMjAsIDEsIDIxOSwgMjI1LCAyMCwgMSwgMjEwLCAxODcsIDIwLCAxLCAxOTEsIDIwLCAxLCAyMjgsIDksIDIwLCAxLCAKLSAgICAyMzQsIDE0MiwgMjAsIDEsIDIyNSwgMTUxLCAyMCwgMSwgMjI4LCAxNzYsIDIwLCAxLCAyMjcsIDI0NiwgMjAsIDEsIDIyNCwgCi0gICAgMTQ0LCAyMCwgMSwgMjExLCAxOTIsIDIwLCAxLCAyMjUsIDIxMSwgMjAsIDEsIDI0NCwgMTQ3LCAyMCwgMSwgMjIyLCAxNDAsIAotICAgIDIwLCAxLCAyMzIsIDk4LCAyMCwgMSwgMjMwLCAyMzAsIDIwLCAxLCAyMjgsIDIzMywgMjAsIDEsIDIyMywgNTEsIDIwLCAxLCAKLSAgICAyMjMsIDE3MSwgMjAsIDEsIDIzNCwgMTY1LCAyMCwgMSwgMjI5LCA3LCAyMCwgMSwgMjI5LCA1NiwgMjAsIDEsIDIyOSwgNzcsIAotICAgIDIwLCAxLCAyMjAsIDcsIDIwLCAxLCAyMjQsIDE0NywgMjAsIDEsIDI0MywgMjM0LCAyMCwgMSwgMjQ0LCAzNywgMjAsIDEsIAotICAgIDIxMiwgNjUsIDIwLCAxLCAxOTcsIDIwLCAxLCAyMzIsIDI0MSwgMjAsIDEsIDIyNSwgMTA4LCAyMCwgMSwgMjMyLCAxMTksIAotICAgIDIwLCAxLCAyMzQsIDI4LCAyMCwgMSwgMjMxLCAxMTQsIDIwLCAxLCAyMjMsIDgzLCAyMCwgMSwgMjMxLCA1OCwgMjAsIDEsIAotICAgIDE4NCwgMjAsIDEsIDIxNiwgMTE3LCAyMCwgMSwgMjM0LCA5MiwgMjAsIDEsIDIzMCwgMTYxLCAyMCwgMSwgMjMxLCAxMjIsIAotICAgIDIwLCAxLCAyMTYsIDIzMCwgMjAsIDEsIDIzMywgMjUxLCAyMCwgMSwgMjE2LCAyNDcsIDIwLCAxLCAyMjcsIDIzOCwgMjAsIAotICAgIDEsIDIyMSwgMjUxLCAyMCwgMSwgMjQ0LCAxOTIsIDIwLCAxLCAyMzMsIDI1MywgMjAsIDEsIDIzNCwgMjQsIDIwLCAzOCwgCi0gICAgMTY0LCAyMzQsIDUsIDIwLCAzOCwgMTY0LCAyMTUsIDExMCwgMjAsIDIyOCwgMTgyLCAyMCwgMjQzLCAyMjksIDIxOCwgMTI5LCAKLSAgICAyMCwgMjQ5LCAyMjYsIDIwLCAyNDksIDIxOSwgMjAsIDIyMCwgMTUwLCAyMCwgMjI0LCAxMywgNzgsIDU4LCAxLCAyNTAsIAotICAgIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjUsIDYxLCA1OCwgMSwgMjUwLCA5NiwgMTM4LCAyMTEsIDcwLCAyMjUsIDYxLCA1OCwgMSwgCi0gICAgMjUwLCA5NiwgMTM4LCAyMTAsIDI1NCwgMjIwLCA4NCwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjExLCA3MCwgMjIwLCA4NCwgCi0gICAgNTgsIDEsIDI1MCwgOTYsIDEzOCwgMjEwLCAyNTQsIDIyNCwgMzAsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMSwgNzAsIAotICAgIDIyNCwgMzAsIDU4LCAxLCAyNTAsIDk2LCAxMzgsIDIxMCwgMjU0LCAyMjIsIDE0MCwgNTgsIDEsIDI1MCwgOTYsIDEzOCwgCi0gICAgMjExLCA3MCwgMjIyLCAxNDAsIDU4LCAxLCAyNDUsIDIwLCAyNDYsIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgCi0gICAgMTE4LCAxMzgsIDEzMCwgNTgsIDEsIDIzMCwgMjI1LCAyNDYsIDExOCwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTE4LCAKLSAgICAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMTksIDI0NiwgMTE4LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjAsIDI0NiwgMTE4LCAKLSAgICAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDEyNSwgMjQ2LCAxMTgsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAKLSAgICAyMjUsIDI0NiwgMTE4LCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjQ2LCAxMTgsIDIzMywgMzksIDEzOCwgCi0gICAgMTMwLCA1OCwgMSwgMjQ1LCAxOSwgMjQ2LCAxMTgsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyMCwgMjMzLCAKLSAgICAzOSwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDIzMywgMzksIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMjUsIDIzMywgMzksIAotICAgIDEzOCwgMTMwLCA1OCwgMSwgMTIxLCAyMzMsIDM5LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMTksIDIzMywgMzksIDEzOCwgCi0gICAgMTMwLCA1OCwgMSwgNTksIDY3LCAxMzAsIDU4LCAxLCA1OSwgMjE5LCA5NSwgNTgsIDEsIDU5LCAyMDMsIDEzMCwgNTgsIDEsIAotICAgIDIzMiwgMTA4LCA0NCwgMjQ5LCAxNjEsIDI1NCwgMTA5LCA1OCwgMSwgMjIzLCAxNTcsIDEyMCwgNzQsIDU4LCAxLCAyMjMsIAotICAgIDE1NywgMTI0LCA3NCwgNTgsIDEsIDIyMywgMTU3LCAyNDUsIDMxLCA3OCwgNTgsIDEsIDIyMywgMTU3LCAyMzUsIDE5MywgCi0gICAgMjQ1LCAzMSwgNzgsIDU4LCAxLCAxMjEsIDIzNSwgMTkzLCAyNDUsIDMxLCA3OCwgNTgsIDEsIDIxOCwgMTExLCAyMiwgMTI1LCAKLSAgICAyMTYsIDMwLCA1OCwgMSwgMjE4LCAxMTEsIDIyLCAxMjEsIDIxNiwgMzAsIDcsIDYsIDEsIDI0NSwgMTk5LCAyNTQsIDE3MCwgCi0gICAgNywgNCwgMSwgMjQ1LCAxOTksIDI1NCwgMTcwLCA3LCA2LCAxLCAyNDUsIDE5OSwgMjU0LCAxOTYsIDcsIDQsIDEsIDI0NSwgCi0gICAgMTk5LCAyNTQsIDE5NiwgNywgNiwgMSwgMjQxLCAyMDcsIDcsIDQsIDEsIDI0MSwgMjA3LCA3LCA2LCAxLCAyMTUsIDQwLCA3LCAKLSAgICA0LCAxLCAyMTUsIDQwLCA3LCA2LCAxLCAyMTUsIDIyOSwgNywgNCwgMSwgMjE1LCAyMjksIDcsIDYsIDEsIDI0OSwgMTEwLCAKLSAgICA3LCA0LCAxLCAyNDksIDExMCwgNywgNiwgMSwgMjQ5LCAxMTEsIDIsIDI0OSwgMjE5LCA3LCA0LCAxLCAyNDksIDExMSwgMiwgCi0gICAgMjQ5LCAyMTksIDcsIDEsIDQsIDYsIDI0NSwgNiwgNywgMSwgNCwgNiwgMjIyLCA5MSwgNywgNiwgMSwgMjU1LCA3MywgNywgCi0gICAgNCwgMSwgMjU1LCA3MywgNywgNiwgMSwgMjU0LCA3MywgNywgNCwgMSwgMjU0LCA3MywgNywgNiwgMSwgMjUzLCAxOTIsIDcsIAotICAgIDQsIDEsIDI1MywgMTkyLCA3LCA2LCAxLCAyNTMsIDE3NiwgNywgNCwgMSwgMjUzLCAxNzYsIDcsIDYsIDEsIDI1MywgMTc3LCAKLSAgICAyLCAyMDMsIDEzMCwgNywgNCwgMSwgMjUzLCAxNzcsIDIsIDIwMywgMTMwLCA3LCA2LCAxLCAyNTMsIDE2NywgNywgNCwgMSwgCi0gICAgMjUzLCAxNjcsIDcsIDYsIDEsIDIyMywgNDksIDI1MSwgNjcsIDIsIDI0NywgMTIwLCA3LCA0LCAxLCAyMjMsIDQ5LCAyNTEsIAotICAgIDY3LCAyLCAyNDcsIDEyMCwgNywgNiwgMSwgMjM1LCAyNCwgMiwgOTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDkxLCA3LCA2LCAKLSAgICAxLCAyMzUsIDI0LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDI0NywgMjU1LCA5MSwgNywgNiwgMSwgCi0gICAgMjM1LCAyNCwgMiwgMjE4LCAxMDMsIDIyLCAyNDcsIDI1NSwgOTEsIDcsIDQsIDEsIDIzNSwgMjQsIDIsIDIxOCwgMTAzLCAKLSAgICAyMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAxLCAyNTEsIDEzNSwgMTU2LCA3LCA0LCAxLCAyNTEsIDEzNSwgMTU2LCA3LCA2LCAKLSAgICAxLCAyMzMsIDE0OSwgMiwgMTI1LCA5MSwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDEyNSwgOTEsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgMTk5LCAyMTgsIDEwMywgMjI2LCAxMjAsIDcsIDQsIDEsIDE0NCwgMiwgMTk5LCAyMTgsIDEwMywgMjI2LCAxMjAsIDcsIDYsIAotICAgIDEsIDE0NCwgMiwgMjMyLCAxMjMsIDcsIDQsIDEsIDE0NCwgMiwgMjMyLCAxMjMsIDcsIDYsIDEsIDIyNiwgMTgzLCA3LCA0LCAKLSAgICAxLCAyMjYsIDE4MywgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNCwgMSwgCi0gICAgMjI2LCAxMDYsIDIsIDIxOCwgMTAzLCAyMTYsIDEzOSwgMjQ4LCAzOSwgNywgNiwgMSwgMjI2LCAxMDYsIDIsIDI0NCwgNTMsIAotICAgIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAyNDQsIDUzLCA3LCA2LCAxLCAyMjYsIDEwNiwgMiwgMjE4LCAyMjksIDIxNywgNzcsIAotICAgIDcsIDQsIDEsIDIyNiwgMTA2LCAyLCAyMTgsIDIyOSwgMjE3LCA3NywgNywgNiwgMSwgMjI0LCA5NywgMiwgMjE4LCAxMDMsIAotICAgIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCA0LCAxLCAyMjQsIDk3LCAyLCAyMTgsIDEwMywgMjE2LCAxMzksIDI0OCwgMzksIDcsIAotICAgIDYsIDEsIDIyNCwgOTcsIDIsIDI0NywgMjU1LCA5MSwgNywgNCwgMSwgMjI0LCA5NywgMiwgMjQ3LCAyNTUsIDkxLCA3LCA2LCAKLSAgICAxLCAyMjMsIDIyNCwgMjIyLCAxODYsIDcsIDQsIDEsIDIyMywgMjI0LCAyMjIsIDE4NiwgNywgNiwgMSwgMjIyLCAxMzAsIAotICAgIDIyMiwgMTg2LCA3LCA0LCAxLCAyMjIsIDEzMCwgMjIyLCAxODYsIDcsIDYsIDEsIDIxNCwgMTA2LCAyLCAyNDcsIDI1NSwgCi0gICAgOTEsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyNDcsIDI1NSwgOTEsIDcsIDYsIDEsIDIxMiwgMTA2LCA3LCA0LCAxLCAyMTIsIAotICAgIDEwNiwgNywgNiwgMSwgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA0LCAxLCAyMTMsIDE0NSwgMjEwLCAxNTksIDcsIDYsIDEsIAotICAgIDIxNiwgMTUyLCAyLCA5MSwgNywgNCwgMSwgMjE2LCAxNTIsIDIsIDkxLCA3LCA2LCAxLCAyMTYsIDE1MiwgMiwgMjE4LCAKLSAgICAxMDMsIDIxNiwgMTM5LCAyNDgsIDM5LCA3LCA0LCAxLCAyMTYsIDE1MiwgMiwgMjE4LCAxMDMsIDIxNiwgMTM5LCAyNDgsIAotICAgIDM5LCA3LCA2LCAxLCAyMTMsIDI0NSwgNywgNCwgMSwgMjEzLCAyNDUsIDcsIDYsIDEsIDI0NSwgNjUsIDcsIDQsIDEsIDI0NSwgCi0gICAgNjUsIDcsIDYsIDEsIDIzNSwgMTcxLCA3LCA0LCAxLCAyMzUsIDE3MSwgNywgNiwgMSwgMjQ5LCAyMDcsIDcsIDQsIDEsIAotICAgIDI0OSwgMjA3LCA1OCwgMSwgMjE0LCAxMzMsIDcsIDQsIDEsIDI0NiwgNjksIDcsIDQsIDEsIDIzMiwgODQsIDcsIDQsIDEsIAotICAgIDIzMCwgODAsIDcsIDQsIDEsIDIyNywgMjAxLCA3LCA0LCAxLCAyMjIsIDEyOSwgNywgMSwgNCwgNiwgMjIyLCAxMjksIDcsIAotICAgIDQsIDEsIDIxNSwgMTA4LCA3LCA0LCAxLCAyMTQsIDE5NywgNywgNiwgMSwgMjM1LCAyMTMsIDI0OSwgNjAsIDcsIDQsIDEsIAotICAgIDIzNSwgMjEzLCAyNDksIDYwLCA3LCA2LCAxLCAyMzUsIDIxMywgMjQ1LCA2LCA3LCA0LCAxLCAyMzUsIDIxMywgMjQ1LCA2LCAKLSAgICA3LCA2LCAxLCAyMzUsIDIxMywgMjQzLCAyMDIsIDcsIDYsIDEsIDIxNSwgOTQsIDIzNSwgMjEzLCAyNDMsIDIwMiwgNywgNCwgCi0gICAgMSwgMjE1LCA5NCwgMjM1LCAyMTMsIDI0MywgMjAyLCA3LCA2LCAxLCAyMTUsIDk0LCAxNTYsIDcsIDQsIDEsIDIxNSwgOTQsIAotICAgIDE1NiwgNywgNiwgMSwgMjM1LCAyMTMsIDE1MywgNywgNCwgMSwgMjM1LCAyMTMsIDE1MywgNywgNiwgMSwgMjM1LCAyMTMsIAotICAgIDIyMiwgOTEsIDcsIDQsIDEsIDIzNSwgMjEzLCAyMjIsIDkxLCA3LCA2LCAxLCAyMzUsIDIxMywgMjE3LCAxNTIsIDcsIDQsIAotICAgIDEsIDIzNSwgMjEzLCAyMTcsIDE1MiwgNTgsIDEsIDEyMSwgMjUwLCAzMSwgMjU1LCAxNCwgNTgsIDEsIDI0OSwgMjI2LCA1OCwgCi0gICAgMSwgMjE5LCAyNTEsIDI0NSwgOTgsIDUwLCA3LCA2LCAxLCAyMjEsIDI1NSwgNywgNCwgMSwgMjIxLCAyNTUsIDcsIDYsIDEsIAotICAgIDIxNSwgOTQsIDI0MiwgNjAsIDcsIDQsIDEsIDIzMywgMTQ5LCAyLCAyMjMsIDU1LCAyNDEsIDUyLCAyMiwgMjUyLCA0MSwgNywgCi0gICAgNiwgMSwgMjMwLCAyNiwgMiwgMjQ4LCAzOSwgNywgNCwgMSwgMjMwLCAyNiwgMiwgMjQ4LCAzOSwgNywgNiwgMSwgMjUxLCAKLSAgICA2NywgMiwgMTMwLCA3LCA0LCAxLCAyNTEsIDY3LCAyLCAxMzAsIDcsIDYsIDEsIDI0MywgMjAzLCAyLCAyMjYsIDI0OCwgOTEsIAotICAgIDcsIDQsIDEsIDI0MywgMjAzLCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDIzNSwgMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgCi0gICAgNCwgMSwgMjM1LCAyNCwgMiwgMjI2LCAyNDgsIDkxLCA3LCA2LCAxLCAyMzAsIDI2LCAyLCAyMjYsIDI0OCwgOTEsIDcsIDQsIAotICAgIDEsIDIzMCwgMjYsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjIzLCAyMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNCwgMSwgCi0gICAgMjIzLCAyMjQsIDIsIDIyNiwgMjQ4LCA5MSwgNywgNiwgMSwgMjIyLCA5MiwgMiwgMjI2LCAyNDgsIDkxLCA3LCA0LCAxLCAKLSAgICAyMjIsIDkyLCAyLCAyMjYsIDI0OCwgOTEsIDcsIDYsIDEsIDI0MiwgNjEsIDIsIDEwMywgNTgsIDEsIDYsIDI0MiwgNjEsIDIsIAotICAgIDkxLCA1OCwgMSwgNCwgMjcsIDIyNiwgMjM0LCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxOTMsIDcsIDI0NSwgMTAzLCAxLCAKLSAgICAyMjMsIDQ5LCAyNDUsIDYsIDcsIDI0NSwgMTAzLCAxLCAyMjMsIDQ5LCAyMjYsIDEwNSwgNywgMjQ1LCAxMDMsIDEsIDIzNSwgCi0gICAgMTkzLCAxOTMsIDcsIDI0NSwgMTAzLCAxLCAyNDAsIDE1NCwgMjMyLCAxMjksIDcsIDI0NSwgMTAzLCAxLCAyNTQsIDIzLCAKLSAgICAxOTMsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNjEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgNzMsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgNSwgMjQ2LCA0OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA3MCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA3NSwgCi0gICAgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCA3NiwgMjE3LCAyMzAsIDIyOSwgMjE0LCA1LCAyNDEsIDI1MywgMjE3LCAyMzAsIAotICAgIDIyOSwgMjE0LCAxLCAyMzQsIDI4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIzNCwgMTA1LCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDEsIDI0MiwgMTc0LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0MiwgMjI0LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDUsIAotICAgIDI1NCwgNzUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjQ5LCAyMzgsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjUwLCA4NiwgCi0gICAgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMzUsIDY4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIzNSwgMTA5LCAyMTcsIAotICAgIDIzMCwgMjI5LCAyMTQsIDEsIDIxNSwgMTMzLCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIxNSwgMTM5LCAyMTcsIDIzMCwgCi0gICAgMjI5LCAyMTQsIDEsIDI0OCwgMTA1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI0OCwgMTE0LCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDEsIDExMSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyMTYsIDE1NiwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDcsIAotICAgIDE0NSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDgsIDcsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjI4LCA3NCwgMjE3LCAKLSAgICAyMzAsIDIyOSwgMjE0LCAxLCAyMjUsIDE2LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDIyNSwgMTIxLCAyMTcsIDIzMCwgCi0gICAgMjI5LCAyMTQsIDEsIDI1MSwgMjA1LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDEsIDI1MiwgMTAsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMSwgMjMwLCAxNjEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjIyLCAyMTEsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgCi0gICAgMjMyLCAxNTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjIyLCAxNjUsIDIxNywgMjMwLCAyMjksIDIxNCwgMSwgMjE5LCAKLSAgICA1OCwgMjE3LCAyMzAsIDIyOSwgMjE0LCAxLCAyNDEsIDY4LCAyMTcsIDIzMCwgMjI5LCAyMTQsIDI1LCA1LCA2MSwgMjE3LCAKLSAgICAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgNzMsIDIxNywgMjMwLCAyMjksIDIxNCwgMjUsIDUsIDcwLCAyMTcsIDIzMCwgMjI5LCAKLSAgICAyMTQsIDI1LCA1LCA3NSwgMjE3LCAyMzAsIDIyOSwgMjE0LCAyNSwgNSwgMjI2LCAxODMsIDIxNywgMjMwLCAyMjksIDIxNCwgCi0gICAgMjI1LCAxMiwgMjMxLCAxNTgsIDIxNywgMjMwLCAyMjksIDIxNCwgMjI1LCAxMiwgMjMxLCAxNTcsIDIxNywgMjMwLCAyMjksIAotICAgIDIxNCwgMjI1LCAxMiwgMjMxLCAxNTYsIDIxNywgMjMwLCAyMjksIDIxNCwgMjI1LCAxMiwgMjMxLCAxNTUsIDIyOCwgNTYsIAotICAgIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgMjI0LCAyMSwgMjI4LCA1NiwgMjM1LCAyNDAsIDI0NCwgMiwgMTIzLCAyNDIsIDI3LCAKLSAgICAyMjgsIDU2LCAyMzUsIDI0MCwgMjQ0LCAyLCAxMzQsIDIyNCwgMTksIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgCi0gICAgMjE5LCAxMTcsIDIyOCwgNTYsIDIzNSwgMjQwLCAyNDQsIDIsIDEyMywgMjQ1LCAxODgsIDIyOCwgNTYsIDIzNSwgMjQwLCAKLSAgICAyNDQsIDIsIDEzNCwgMjE5LCAxMTYsIDIyOCwgNTYsIDIzNSwgMjQwLCAyMjQsIDIyLCA3OCwgMjI4LCA1NiwgMjM1LCAyNDAsIAotICAgIDIyNSwgNDAsIDc4LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjIyLCAxMTgsIDc4LCAyMjgsIDU2LCAyMzUsIDI0MCwgMjI0LCAyMywgCi0gICAgNzgsIDIyNSwgMTQ0LCAxLCAxNzYsIDIyNSwgMTQ0LCAxLCAyMzQsIDEzMiwgMjI1LCAxNDQsIDEsIDI0MywgMTM1LCAyMjUsIAotICAgIDE0NCwgMSwgMjI5LCA3NywgMjI1LCAxNDQsIDEsIDI1MSwgMzMsIDIyNSwgMTQ0LCAxLCAyNTAsIDE1NywgMjI1LCAxNDQsIAotICAgIDEsIDIzNSwgMTQxLCAyMjUsIDE0NCwgMSwgMjI3LCAxNjUsIDIyNSwgMTQ0LCAxLCAyMTcsIDEwNSwgMjI1LCAxNDQsIDEsIAotICAgIDIxNiwgMjA4LCAyMjUsIDE0NCwgMSwgMjQ4LCAyMjEsIDIyNSwgMTQ0LCAxLCAxOTcsIDIyNSwgMTQ0LCAxLCAxOTAsIDIyNSwgCi0gICAgMTQ0LCAxLCAyMjUsIDE0NywgMjI1LCAxNDQsIDEsIDI1MiwgMTkxLCAyMjUsIDE0NCwgMSwgMTg0LCAyMjUsIDE0NCwgMSwgCi0gICAgMjE1LCAxODMsIDIyNSwgMTQ0LCAxLCAyMTUsIDE3NSwgMjI1LCAxNDQsIDEsIDI0NiwgMzgsIDIyNSwgMTQ0LCAxLCAyMTIsIAotICAgIDY1LCAyMjUsIDE0NCwgMSwgMjEwLCA4MiwgMjI1LCAxNDQsIDEsIDIxMCwgMTE2LCAyMjUsIDE0NCwgMSwgNCwgNjEsIDIyNSwgCi0gICAgMTQ0LCAxLCAxOTEsIDIyNSwgMTQ0LCAxLCAyMDUsIDIyNSwgMTQ0LCAxLCAyMzMsIDEzNSwgMjI1LCAxNDQsIDEsIDIyMCwgCi0gICAgMTAyLCAyMjUsIDE0NCwgMSwgMjA2LCAyMjUsIDE0NCwgMSwgMTYyLCAyMjUsIDE0NCwgMSwgNjEsIDIyNSwgMTQ0LCAxLCAKLSAgICA3MywgMjI1LCAxNDQsIDEsIDcwLCAyMjUsIDE0NCwgMSwgNzUsIDIyNSwgMTQ0LCAxLCA3NiwgMjI1LCAxNDQsIDEsIDIyNCwgCi0gICAgODgsIDIyNSwgMTQ0LCAxLCAyMTEsIDE2NSwgMjI1LCAxNDQsIDEsIDI0NCwgMTk2LCAyMjUsIDE0NCwgMSwgMjQzLCAyOSwgCi0gICAgMjI1LCAxNDQsIDEsIDI0NSwgMjA5LCAyMjUsIDE0NCwgMjE4LCA3MywgMSwgMjEyLCA2NSwgMjI1LCAxNDQsIDIxOCwgNzMsIAotICAgIDEsIDE5MSwgMjI1LCAxNDQsIDEsIDIxNSwgMTU2LCAyMjUsIDE0NCwgMSwgMjE1LCAxNDQsIDIyNSwgMTQ0LCAxLCAyNDgsIAotICAgIDEzNSwgMjI1LCAxNDQsIDEsIDIyOCwgMTEwLCAyMjUsIDE0NCwgMSwgMjU0LCAxNDEsIDE5MSwgMjI1LCAxNDQsIDEsIDIxMywgCi0gICAgMTM0LCAyMjAsIDEwMiwgMjI1LCAxNDQsIDEsIDIxMywgMTM1LCAxNjIsIDIyNSwgMTQ0LCAxLCAyNTMsIDIyMywgMjQ0LCAKLSAgICAxOTYsIDIyNSwgMTQ0LCAyMTgsIDczLCAxLCAyMDUsIDIyNSwgMTQ0LCAyMTgsIDI1LCAxLCAyMDUsIDIyNSwgMTQ0LCAxLCAKLSAgICAyNTAsIDI1NSwgMjI1LCAxNDQsIDIxOSwgMTU1LCAyNDEsIDIzNiwgNzgsIDIyNSwgMTQ0LCA1MiwgMjQxLCAyMzYsIDc4LCAKLSAgICAyMjUsIDE0NCwgMTY0LCAyMjAsIDk1LCAyMjUsIDE0NCwgMTY0LCA1MiwgMjIwLCA5NSwgMTc5LCA1LCAyNTQsIDc1LCAxNzksIAotICAgIDUsIDIxMywgMTQ3LCAxNzksIDEsIDYxLCAxNzksIDEsIDI1NSwgNzMsIDE3OSwgMSwgNzMsIDE3OSwgMSwgMjM2LCAzMywgCi0gICAgMTc5LCAxLCA3MCwgMTc5LCAxLCAyMTQsIDExOCwgMTc5LCAxLCAxNDksIDE1MywgMTc5LCAxLCAxNDksIDIyMiwgMTgwLCAKLSAgICAxNzksIDEsIDE0OSwgMTU2LCAxNzksIDEsIDE0OSwgMjMyLCAxODUsIDE3OSwgMSwgNzUsIDE3OSwgMSwgMjQ1LCAyMDksIAotICAgIDE3OSwgMSwgMjU0LCAyMDEsIDE3OSwgMSwgNzYsIDE3OSwgMSwgMjI2LCAxODMsIDE3OSwgMSwgMjUzLCAxOTIsIDE3OSwgMSwgCi0gICAgMTc2LCAxNzksIDEsIDIzNCwgMTMyLCAxNzksIDEsIDI0MywgMTM1LCAxNzksIDEsIDI0MiwgMjQ5LCAxNzksIDEsIDIyOSwgCi0gICAgNzcsIDE3OSwgMSwgMjUxLCAzMywgMTc5LCAxLCAyNTAsIDE1NywgMTc5LCAxLCAyMzUsIDE0MSwgMTc5LCAxLCAyMzUsIAotICAgIDExNCwgMTc5LCAxLCAyMjcsIDE2NSwgMTc5LCAxLCAyMTUsIDE1NiwgMTc5LCAxLCAyMTUsIDE0NCwgMTc5LCAxLCAyNDgsIAotICAgIDEzNSwgMTc5LCAxLCAyNDgsIDExOSwgMTc5LCAxLCAyMjgsIDExMCwgMTc5LCAxLCAyMTcsIDEwNSwgMTc5LCAxLCAyMTYsIAotICAgIDIwOCwgMTc5LCAxLCAyNDgsIDIyMSwgMTc5LCAxLCAyNDgsIDI1LCAxNzksIDEsIDE5NywgMTc5LCAxLCAxOTAsIDE3OSwgMSwgCi0gICAgMjI1LCAxNDcsIDE3OSwgMSwgMjUyLCAxOTEsIDE3OSwgMSwgMjUyLCAxOCwgMTc5LCAxLCAxODQsIDE3OSwgMSwgMTkxLCAKLSAgICAxNzksIDEsIDIwNSwgMTc5LCAxLCAyMzMsIDEzNSwgMTc5LCAxLCAyMTQsIDI3LCAxNzksIDEsIDIyMCwgMTAyLCAxNzksIDEsIAotICAgIDIxOCwgMjIzLCAxNzksIDEsIDIwNiwgMTc5LCAxLCAxNjIsIDE3OSwgMSwgMjMyLCAxODQsIDE3OSwgMTE2LCA1LCAyNDIsIAotICAgIDQ0LCAxNzksIDI1LCA1LCAyNTUsIDczLCAxNzksIDI1LCA1LCA3MywgMTc5LCAyNSwgNSwgMjM2LCAzMywgMTc5LCAyNSwgNSwgCi0gICAgNzAsIDE3OSwgMjUsIDUsIDIxNCwgMTE4LCAxNzksIDI1LCA1LCAxNDksIDE1MywgMTc5LCAyNSwgNSwgMTQ5LCAyMjIsIAotICAgIDE4MCwgMTc5LCAyNSwgNSwgMTQ5LCAxNTYsIDE3OSwgMjUsIDUsIDE0OSwgMjMyLCAxODUsIDE3OSwgMjUsIDUsIDc1LCAKLSAgICAxNzksIDI1LCA1LCAyNDUsIDIwOSwgMTc5LCAyNSwgNSwgMjU0LCAyMDEsIDE3OSwgMjUsIDUsIDc2LCAxNzksIDI1LCA1LCAKLSAgICAyMjYsIDE4MywgMTc5LCAyNSwgNSwgMjUzLCAxOTIsIDE3OSwgNSwgMjEzLCAxNTIsIDE3OSwgMjQ4LCAxNzgsIDE3OSwgNTIsIAotICAgIDI0OCwgMTc4LCAxNzksIDIxLCAyMTAsIDg2LCAxNzksIDIxLCAxMTAsIDE3OSwgMjEsIDEwNSwgMTc5LCAyMSwgMTU4LCAKLSAgICAxNzksIDIxLCAxNjEsIDE3OSwgMjEsIDE4OSwgMTc5LCAyMSwgMTk0LCAxNzksIDIxLCAxOTgsIDE3OSwgMjEsIDE5NSwgCi0gICAgMTc5LCAyMSwgMjAwLCAzOCwgODQsIDIxLCAyMTAsIDg2LCAzOCwgODQsIDIxLCAxMTAsIDM4LCA4NCwgMjEsIDEwNSwgMzgsIAotICAgIDg0LCAyMSwgMTU4LCAzOCwgODQsIDIxLCAxNjEsIDM4LCA4NCwgMjEsIDE4OSwgMzgsIDg0LCAyMSwgMTk0LCAzOCwgODQsIAotICAgIDIxLCAxOTgsIDM4LCA4NCwgMjEsIDE5NSwgMzgsIDg0LCAyMSwgMjAwLCAzOCwgODQsIDEsIDYxLCAzOCwgODQsIDEsIDcwLCAKLSAgICAzOCwgODQsIDEsIDE3NiwgMzgsIDg0LCAxLCAxOTcsIDM4LCA4NCwgMSwgMTkwLCAzOCwgODQsIDEsIDIwNSwgMzgsIDg0LCAKLSAgICAxLCAyMTMsIDE3NiwgMzgsIDg0LCA1LCAyNTMsIDE3NSwgODQsIDUsIDIxOSwgMTcsIDI1MCwgMjU1LCA4NCwgNSwgMjUxLCAKLSAgICAwLCAyMTMsIDE1MiwgODQsIDUsIDUyLCAyNTEsIDAsIDIxMywgMTUyLCA4NCwgNSwgMjUxLCAwLCAxMDUsIDg0LCA1LCAyNTEsIAotICAgIDAsIDE1OCwgODQsIDUsIDI1MSwgMCwgMjUzLCAxNzUsIDg0LCA1LCAyMjQsIDEyNCwgODQsIDI0MywgMTAwLCAyNDQsIDEwMywgCi0gICAgODQsIDI1MCwgMjM4LCA4NCwgMjQxLCAyMzAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDIxMCwgODYsIDIzNCwgMTg4LCAKLSAgICAyMzIsIDI0MiwgMjEsIDExMCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMTA1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAKLSAgICAxNTgsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDE2MSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgMTg5LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDIxLCAxOTQsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjEsIDE5OCwgMjM0LCAxODgsIDIzMiwgMjQyLCAyMSwgCi0gICAgMTk1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDIxLCAyMDAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTc2LCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDEsIDIzNCwgMTMyLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI0MywgMTM1LCAyMzQsIDE4OCwgMjMyLCAKLSAgICAyNDIsIDEsIDIyOSwgNzcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjA2LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIyMCwgCi0gICAgMTAyLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxMCwgMTE2LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIyNywgMTY1LCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIxNywgMTA1LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI0MCwgMjI2LCAyMzQsIAotICAgIDE4OCwgMjMyLCAyNDIsIDEsIDE5NywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAxOTAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgCi0gICAgMjI1LCAxNDcsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMTg0LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI0OCwgMjIxLCAKLSAgICAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDI1MiwgMTkxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIwNSwgMjM0LCAxODgsIAotICAgIDIzMiwgMjQyLCAxLCAxOTEsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjMzLCAxMzUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgCi0gICAgMjEyLCA2NSwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyMTYsIDIwOCwgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAxNjIsIAotICAgIDIzNCwgMTg4LCAyMzIsIDI0MiwgMSwgMjE0LCAyNywgMjM0LCAxODgsIDIzMiwgMjQyLCAxLCAyNTEsIDMzLCAyMzQsIDE4OCwgCi0gICAgMjMyLCAyNDIsIDEsIDYxLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIyNiwgMjM0LCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIAotICAgIDczLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEsIDIyNiwgMTgzLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDI1LCAyMTQsIDIxNCwgCi0gICAgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgNzUsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMjUsIDcwLCAyMzQsIDE4OCwgMjMyLCAKLSAgICAyNDIsIDI1LCAyNDUsIDIwOSwgMjM0LCAxODgsIDIzMiwgMjQyLCAyNSwgNzYsIDIzNCwgMTg4LCAyMzIsIDI0MiwgMTM4LCAKLSAgICAyMjUsIDMwLCAyMzQsIDE4OCwgMjMyLCAyNDIsIDEzOCwgMjUxLCAxMiwgMjM0LCAxODgsIDIzMiwgMjQyLCAxMzgsIDI1MSwgCi0gICAgMTMsIDIyNSwgMzAsIDIzNCwgMTg4LCAyMzIsIDI0MiwgNSwgMjQ5LCA3NywgMjM0LCAxODgsIDIzMiwgMjQyLCA1LCAyMTksIAotICAgIDE5OSwgMjIzLCA5MywgMSwgMTc2LCAyMjMsIDkzLCAxLCAyNDMsIDEzNSwgMjIzLCA5MywgMSwgMjI5LCA3NywgMjIzLCA5MywgCi0gICAgMSwgMjE3LCAxMDUsIDIyMywgOTMsIDEsIDI0OCwgMjIxLCAyMjMsIDkzLCAxLCAxOTcsIDIyMywgOTMsIDEsIDE5MCwgMjIzLCAKLSAgICA5MywgMSwgMjUyLCAxOTEsIDIyMywgOTMsIDEsIDE4NCwgMjIzLCA5MywgMSwgMjUxLCAzMywgMjIzLCA5MywgMSwgMjM1LCAKLSAgICAxNDEsIDIyMywgOTMsIDEsIDIyNywgMTY1LCAyMjMsIDkzLCAxLCAyMDYsIDIyMywgOTMsIDEsIDIwNSwgMjIzLCA5MywgMSwgCi0gICAgMjMzLCAxMzUsIDIyMywgOTMsIDEsIDE5MSwgMjIzLCA5MywgMSwgMjEyLCA2NSwgMjIzLCA5MywgMSwgMTYyLCAyMjMsIDkzLCAKLSAgICAxLCAyMzEsIDEyNCwgMjIzLCA5MywgMSwgMjI5LCA1NiwgMjIzLCA5MywgMSwgMjI5LCAxNDgsIDIyMywgOTMsIDEsIDIyNywgCi0gICAgMTM1LCAyMjMsIDkzLCAxLCA2MSwgMjIzLCA5MywgMjUsIDUsIDczLCAyMjMsIDkzLCAyNSwgNSwgNzAsIDIyMywgOTMsIDI1LCAKLSAgICA1LCA3NSwgMjIzLCA5MywgMjUsIDUsIDI1NCwgMjAxLCAyMjMsIDkzLCAyNSwgNSwgNzYsIDIyMywgOTMsIDI1LCA1LCAyNTMsIAotICAgIDE5MiwgMjIzLCA5MywgMjUsIDUsIDI0NSwgNTUsIDIyMywgOTMsIDI1LCA1LCAyNDUsIDIzMywgMjIzLCA5MywgMTE2LCA1LCAKLSAgICAyMjksIDc5LCAyMjMsIDkzLCAxMTYsIDUsIDIzMCwgMjUsIDIyMywgOTMsIDExNiwgNSwgMTUzLCAyMjMsIDkzLCAxMTYsIDUsIAotICAgIDI0MiwgNjAsIDIyMywgOTMsIDIxMywgMTUyLCAyMjMsIDkzLCAyMjEsIDE3MywgNzgsIDI0LCAxMDAsIDIxNiwgOTcsIDI0LCAKLSAgICAxMDAsIDIxNiwgOTYsIDI0LCAxMDAsIDIxNiwgOTQsIDI0LCAxMDAsIDIxNiwgOTksIDI0LCAxMDAsIDIyMywgMjEsIDI0LCAKLSAgICAxMDAsIDIyMywgNSwgMjQsIDEwMCwgMjIzLCAwLCAyNCwgMTAwLCAyMjMsIDIsIDI0LCAxMDAsIDIyMywgMTgsIDI0LCAxMDAsIAotICAgIDIyMywgMTEsIDI0LCAxMDAsIDIyMywgNCwgMjQsIDEwMCwgMjIzLCAyMywgMjQsIDEwMCwgMjIzLCA2LCAyNCwgMTAwLCAKLSAgICAyMjMsIDI1LCAyNCwgMTAwLCAyMjMsIDIyLCAyNCwgMTAwLCAyMzAsIDIxMywgMjQsIDEwMCwgMjMwLCAyMDQsIDI0LCAxMDAsIAotICAgIDIzMCwgMjA3LCAyNCwgMTAwLCAyMjUsIDgwLCAyNCwgMTAwLCAyMjUsIDkxLCAyNCwgMTAwLCAyMjUsIDkyLCAyNCwgMTAwLCAKLSAgICAyMTgsIDIwNywgMjQsIDEwMCwgMjM2LCA0NiwgMjQsIDEwMCwgMjM2LCA1MywgMjQsIDEwMCwgMjE4LCAyMTgsIDI0LCAxMDAsIAotICAgIDIxOCwgMjA1LCAyNCwgMTAwLCAyMjUsIDEzMCwgMjQsIDEwMCwgMjQxLCAxNjcsIDI0LCAxMDAsIDIxOCwgMjAyLCAxNTUsIAotICAgIDUsIDIyNiwgMjcsIDE1NSwgNSwgMjUwLCAxODcsIDE1NSwgNSwgMjMzLCA2NiwgMTU1LCA1LCAyMTEsIDI0MywgMTU1LCAxLCAKLSAgICA2MSwgMTU1LCAxLCAyNDAsIDE1NCwgMjM0LCAxOTEsIDE1NSwgMSwgNzMsIDE1NSwgMSwgMjM2LCAzMywgMTU1LCAxLCA3MCwgCi0gICAgMTU1LCAxLCAyMjYsIDkwLCAyNTAsIDE2MywgMTU1LCAxLCAyMjksIDc4LCAyMzMsIDI4LCAxNTUsIDEsIDIyOSwgNzgsIAotICAgIDIzMywgMjksIDIyMywgMTQyLCAxNTUsIDEsIDc1LCAxNTUsIDEsIDI1NCwgMjAxLCAxNTUsIDEsIDc2LCAxNTUsIDEsIDE3NiwgCi0gICAgMTU1LCAxLCAyMzUsIDEzLCAyMjEsIDIyOCwgMTU1LCAxLCAyMzUsIDEzLCAyMzAsIDY2LCAxNTUsIDEsIDI0MywgMTM1LCAKLSAgICAxNTUsIDEsIDI0MywgMTM2LCAyMzAsIDY2LCAxNTUsIDEsIDIyOSwgNzcsIDE1NSwgMSwgMjUxLCAzMywgMTU1LCAxLCAyNTEsIAotICAgIDM0LCAyMzAsIDY2LCAxNTUsIDEsIDIzNSwgMTQxLCAxNTUsIDEsIDIyNywgMTY2LCAyMzAsIDY2LCAxNTUsIDEsIDIzNSwgCi0gICAgMTQyLCAyMzEsIDIwNywgMTU1LCAxLCAyMjcsIDE2NSwgMTU1LCAxLCAyMTUsIDE1NiwgMTU1LCAxLCAyMTUsIDE1NywgMjMxLCAKLSAgICAyMDcsIDE1NSwgMSwgMjQ4LCAxMzUsIDE1NSwgMSwgMjQ4LCAxMzYsIDIzMSwgMjA3LCAxNTUsIDEsIDIyOSwgMjI5LCAyMzAsIAotICAgIDY2LCAxNTUsIDEsIDIxNywgMTA1LCAxNTUsIDEsIDIxNywgMTA2LCAyMzAsIDY2LCAxNTUsIDEsIDI0OCwgMjIxLCAxNTUsIAotICAgIDEsIDI0OCwgMjIyLCAyMzEsIDIwNywgMTU1LCAxLCAxOTcsIDE1NSwgMSwgMTkwLCAxNTUsIDEsIDIyNiwgOTAsIDIzMCwgCi0gICAgNjYsIDE1NSwgMSwgMjUyLCAxOTEsIDE1NSwgMSwgMjUyLCAxOTIsIDIzMCwgNjYsIDE1NSwgMSwgMTg0LCAxNTUsIDEsIAotICAgIDE5MSwgMTU1LCAxLCAyMDUsIDE1NSwgMSwgMjIzLCAxODgsIDI1NCwgMjEwLCAxNTUsIDEsIDIzMywgMTM1LCAxNTUsIDEsIAotICAgIDIxMiwgNjUsIDE1NSwgMSwgMjIyLCAzNCwgMjMwLCA2NiwgMTU1LCAxLCAyMjIsIDM0LCAyMzEsIDIwNywgMTU1LCAxLCAKLSAgICAyMDYsIDE1NSwgMSwgMTYyLCAxNTUsIDUsIDI1MCwgMTg4LCAyMTYsIDI1MCwgMTU1LCAyNSwgNSwgMjE3LCA0NywgMTU1LCAKLSAgICAyNSwgNSwgMjE2LCAzNSwgMTU1LCAyNSwgNSwgMjExLCAxOTAsIDE1NSwgMjUsIDUsIDIxMSwgMTkxLCAyMzEsIDY5LCAxNTUsIAotICAgIDI1LCA1LCAyMTgsIDQ3LCAxNTUsIDI1LCA1LCAyMTgsIDQ4LCAyMzEsIDU3LCAxNTUsIDI1LCA1LCAyMTcsIDY1LCAxNTUsIAotICAgIDI1LCA1LCAyNDcsIDE5NCwgMjMwLCA2NSwgMTU1LCAyNSwgNSwgMjI1LCAxODQsIDE1NSwgMTE2LCA1LCAyMzQsIDE1OCwgCi0gICAgMTU1LCAxMTYsIDUsIDIyNSwgMTk2LCAxNTUsIDExNiwgNSwgMjUxLCAxOSwgMTU1LCAyMjYsIDQwLCAxNTUsIDQzLCAyMjMsIAotICAgIDY5LCAxNTUsIDQ0LCAyMjMsIDY5LCAxNTUsIDIyNiwgNzksIDI1NCwgMTE3LCAxNTUsIDIyNiwgNzksIDIzMSwgMjI0LCAKLSAgICAxNTUsIDIyNiwgNzksIDIzMiwgODgsIDE1NSwgMjI2LCA3OSwgMjExLCAyMzgsIDE1NSwgMjI2LCA3OSwgMjI2LCA0MSwgCi0gICAgMTU1LCAyMjYsIDc5LCAyMzIsIDIwNSwgMTU1LCAyMjYsIDc5LCAyMzIsIDgyLCAxNTUsIDIyNiwgNzksIDI1NCwgMjQ5LCAKLSAgICAxNTUsIDIyNiwgNzksIDI1NCwgMjUwLCAyNTQsIDI0OSwgMTU1LCAyMjYsIDc5LCAyMjUsIDUxLCAxNTUsIDIxNSwgOTQsIAotICAgIDIyNiwgNzksIDIyNSwgNTEsIDE1NSwgMjI2LCAzNiwgMTU1LCAyMSwgMjEwLCA4NiwgMTU1LCAyMSwgMTEwLCAxNTUsIDIxLCAKLSAgICAxMDUsIDE1NSwgMjEsIDE1OCwgMTU1LCAyMSwgMTYxLCAxNTUsIDIxLCAxODksIDE1NSwgMjEsIDE5NCwgMTU1LCAyMSwgCi0gICAgMTk4LCAxNTUsIDIxLCAxOTUsIDE1NSwgMjEsIDIwMCwgMTU1LCAyMjYsIDc5LCAyMTYsIDY5LCAyMTUsIDEwNiwgMTU1LCAKLSAgICAyMjYsIDc5LCAyMzUsIDE2NywgMTcyLCAxLCA2MSwgMTcyLCAxLCA3MywgMTcyLCAxLCA3MCwgMTcyLCAxLCA3NSwgMTcyLCAKLSAgICAxLCAyNTQsIDIwMSwgMTcyLCAxLCA3NiwgMTcyLCAxLCAxNzYsIDE3MiwgMSwgMjM0LCAxMzIsIDE3MiwgMSwgMjQzLCAxMzUsIAotICAgIDE3MiwgMSwgMjQyLCAyNDksIDE3MiwgMSwgMjI4LCAyNDUsIDE3MiwgMSwgMjI5LCA3NywgMTcyLCAxLCAyNTAsIDE1NywgCi0gICAgMTcyLCAxLCAyNTAsIDExMiwgMTcyLCAxLCAyMzUsIDE0MSwgMTcyLCAxLCAyMzUsIDExNCwgMTcyLCAxLCAyMjgsIDIzNSwgCi0gICAgMTcyLCAxLCAyMjgsIDIzNywgMTcyLCAxLCAyMjgsIDIzNiwgMTcyLCAxLCAyMTcsIDEwNSwgMTcyLCAxLCAyMTYsIDIwOCwgCi0gICAgMTcyLCAxLCAyNDgsIDIyMSwgMTcyLCAxLCAyNDgsIDI1LCAxNzIsIDEsIDIyNywgMjA3LCAxNzIsIDEsIDE5NywgMTcyLCAxLCAKLSAgICAyNDgsIDEzNSwgMTcyLCAxLCAxOTAsIDE3MiwgMSwgMjI0LCAyMjAsIDE3MiwgMSwgMjI1LCAxNDcsIDE3MiwgMSwgMjUyLCAKLSAgICAxOTEsIDE3MiwgMSwgMjUyLCAxOCwgMTcyLCAxLCAyMzAsIDk1LCAxNzIsIDEsIDE4NCwgMTcyLCAxLCAyNTIsIDExMSwgCi0gICAgMTcyLCAxLCAxOTEsIDE3MiwgMSwgMjA1LCAxNzIsIDEsIDIzMywgMTM1LCAxNzIsIDEsIDIxNCwgMjcsIDE3MiwgMSwgMjE4LCAKLSAgICAyMjMsIDE3MiwgMSwgMjA2LCAxNzIsIDEsIDE2MiwgMTcyLCAyNSwgNSwgMjU1LCA3MywgMTcyLCAyNSwgNSwgNzMsIDE3MiwgCi0gICAgMjUsIDUsIDIzNiwgMzMsIDE3MiwgMjUsIDUsIDI0NSwgMTk1LCAxNzIsIDI1LCA1LCA3MCwgMTcyLCAyNSwgNSwgMjI2LCAKLSAgICAyMzQsIDE3MiwgMjUsIDUsIDc2LCAxNzIsIDI1LCA1LCAyNTQsIDIwMSwgMTcyLCAyNSwgNSwgMjUzLCAxOTIsIDE3MiwgMjUsIAotICAgIDUsIDIxNCwgMjE0LCAxNzIsIDExNiwgNSwgMTkxLCAxNzIsIDExNiwgNSwgMjA1LCAxNzIsIDExNiwgNSwgMjMzLCAxMzUsIAotICAgIDE3MiwgMTE2LCA1LCAyMTIsIDY1LCAxNzIsIDEsIDQwLCAyMzUsIDIzLCAxNzIsIDEsIDQwLCAyNDMsIDIwMiwgMTcyLCAxLCAKLSAgICA0MCwgMjI5LCA3OSwgMTcyLCAxMTYsIDUsIDQwLCAyMjksIDc5LCAxNzIsIDEsIDQwLCAyNTAsIDE1OCwgMTcyLCAxLCA0MCwgCi0gICAgMjE3LCAxNTIsIDE3MiwgMSwgNDAsIDIzMCwgMjUsIDE3MiwgMSwgNDAsIDIyNiwgMTA1LCAxNzIsIDEsIDQwLCAyMTEsIAotICAgIDExNywgMTcyLCAxLCA0MCwgMTUzLCAxNzIsIDEsIDQwLCAxNTYsIDE3MiwgMSwgNDAsIDIxOCwgMjI2LCAxNzIsIDExNiwgNSwgCi0gICAgNDAsIDE5MywgMTcyLCAxMTYsIDUsIDQwLCAyNDIsIDYwLCAxNzIsIDIxLCAyMTAsIDg2LCAxNzIsIDIxLCAxMTAsIDE3MiwgCi0gICAgMjEsIDEwNSwgMTcyLCAyMSwgMTU4LCAxNzIsIDIxLCAxNjEsIDE3MiwgMjEsIDE4OSwgMTcyLCAyMSwgMTk0LCAxNzIsIDIxLCAKLSAgICAxOTgsIDE3MiwgMjEsIDE5NSwgMTcyLCAyMSwgMjAwLCAxNzIsIDIyNCwgMTQxLCAyMTgsIDI1MSwgMTcyLCAyMjQsIDE0MSwgCi0gICAgMjQ4LCAxNzgsIDE3MiwgMjI0LCAxNDEsIDUyLCAyNDgsIDE3OCwgMTcyLCAyMjQsIDE0MSwgMjE1LCAyMTEsIDI0OCwgMTc4LCAKLSAgICA2OCwgMSwgMjM0LCAxMjYsIDI0MywgMTM1LCA2OCwgMSwgMjM0LCAxMjYsIDI1MSwgMzMsIDY4LCAxLCAyMzQsIDEyNiwgCi0gICAgMjUwLCAxNTcsIDY4LCAxLCAyMzQsIDEyNiwgMjM1LCAxNDEsIDY4LCAxLCAyMzQsIDEyNiwgMjM1LCAxMTQsIDY4LCAxLCAKLSAgICAyMzQsIDEyNiwgMjI3LCAxNjUsIDY4LCAxLCAyMzQsIDEyNiwgMjE1LCAxNTYsIDY4LCAxLCAyMzQsIDEyNiwgMjE1LCAxNDQsIAotICAgIDY4LCAxLCAyMzQsIDEyNiwgMjQ4LCAxMzUsIDY4LCAxLCAyMzQsIDEyNiwgMjQ4LCAxMTksIDY4LCAxLCAyMzQsIDEyNiwgCi0gICAgMjQ4LCAyNSwgNjgsIDEsIDIzNCwgMTI2LCAxOTcsIDY4LCAxLCAyMzQsIDEyNiwgMjA2LCA2OCwgMSwgMjM0LCAxMjYsIAotICAgIDE2MiwgNjgsIDEsIDIzNCwgMTI2LCAyNDEsIDE4OSwgNjgsIDEsIDIzNCwgMTI2LCAyNDQsIDE5NiwgNjgsIDU4LCAxLCAKLSAgICAyMzQsIDEyNiwgMjIzLCAxMDksIDY4LCAxLCAyMzQsIDEyNiwgMjExLCAxNjUsIDY4LCAxLCAyMzQsIDEyNiwgMjEwLCAxMTYsIAotICAgIDY4LCAxLCAyMzQsIDEyNiwgMjA1LCA2OCwgMjMyLCAxNDUsIDIzNCwgMTI2LCAyMjYsIDI1MywgNjgsIDIzMiwgMTQ1LCAKLSAgICAyMzQsIDEyNiwgMjI0LCA0MywgNjgsIDIzMiwgMTQ1LCAyMzQsIDEyNiwgMjQxLCAxMjEsIDY4LCAxNiwgMjU0LCAxOTAsIAotICAgIDI0NSwgMzAsIDY4LCAxNiwgMjU0LCAxOTAsIDExMCwgNjgsIDE2LCAyNTQsIDE5MCwgMTA1LCA2OCwgMSwgMjU0LCAxOTAsIAotICAgIDIwNSwgNjgsIDUsIDIyNiwgMjMsIDIzNCwgMjEzLCAyMTYsIDMwLCAzOSwgMjA4LCAxLCAxMjEsIDIzNCwgMjgsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjM0LCAyOCwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDEwNSwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIAotICAgIDEwNSwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDExNCwgMzksIDIwOCwgMSwgMTI1LCAyMzQsIDExNCwgMzksIDIwOCwgMSwgCi0gICAgMTIxLCAyNDIsIDE3NCwgMzksIDIwOCwgMSwgMTI1LCAyNDIsIDE3NCwgMzksIDIwOCwgMSwgMTIxLCAyMjksIDQsIDM5LCAKLSAgICAyMDgsIDEsIDEyNSwgMjI5LCA0LCAzOSwgMjA4LCAxLCAxMjEsIDI0OSwgMjM4LCAzOSwgMjA4LCAxLCAxMjUsIDI0OSwgCi0gICAgMjM4LCAzOSwgMjA4LCAxLCAxMjEsIDI1MCwgODYsIDM5LCAyMDgsIDEsIDEyNSwgMjUwLCA4NiwgMzksIDIwOCwgMSwgMTIxLCAKLSAgICAyMTksIDU4LCAzOSwgMjA4LCAxLCAxMjUsIDIxOSwgNTgsIDM5LCAyMDgsIDEsIDEyMSwgMjI3LCAxMzQsIDM5LCAyMDgsIDEsIAotICAgIDEyNSwgMjI3LCAxMzQsIDM5LCAyMDgsIDEsIDEyMSwgMjQ3LCAxNDUsIDM5LCAyMDgsIDEsIDEyNSwgMjQ3LCAxNDUsIDM5LCAKLSAgICAyMDgsIDEsIDEyMSwgMTExLCAzOSwgMjA4LCAxLCAxMjUsIDExMSwgMzksIDIwOCwgMSwgMTIxLCAyMTYsIDE1NiwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMTYsIDE1NiwgMzksIDIwOCwgMSwgMTIxLCAyMjgsIDc0LCAzOSwgMjA4LCAxLCAxMjUsIDIyOCwgCi0gICAgNzQsIDM5LCAyMDgsIDEsIDEyMSwgMjUxLCAyMDUsIDM5LCAyMDgsIDEsIDEyNSwgMjUxLCAyMDUsIDM5LCAyMDgsIDEsIAotICAgIDEyMSwgMjI1LCAxNiwgMzksIDIwOCwgMSwgMTI1LCAyMjUsIDE2LCAzOSwgMjA4LCAxLCAxMjEsIDIyNSwgMTIxLCAzOSwgCi0gICAgMjA4LCAxLCAxMjUsIDIyNSwgMTIxLCAzOSwgMjA4LCAxLCAxMjEsIDI0NCwgNDMsIDM5LCAyMDgsIDEsIDEyNSwgMjQ0LCAKLSAgICA0MywgMzksIDIwOCwgMSwgMTIxLCAyMzAsIDE2MSwgMzksIDIwOCwgMSwgMTI1LCAyMzAsIDE2MSwgMzksIDIwOCwgMSwgCi0gICAgMTIxLCAyMTAsIDI0NCwgMzksIDIwOCwgMSwgMTI1LCAyMTAsIDI0NCwgMzksIDIwOCwgMSwgMTIxLCAyMjIsIDIxMSwgMzksIAotICAgIDIwOCwgMSwgMTI1LCAyMjIsIDIxMSwgMzksIDIwOCwgMSwgMTIxLCAyMzIsIDE1NiwgMzksIDIwOCwgMSwgMTI1LCAyMzIsIAotICAgIDE1NiwgMzksIDIwOCwgMSwgMTIxLCAyMTMsIDEzOCwgMzksIDIwOCwgMSwgMTI1LCAyMTMsIDEzOCwgMzksIDIwOCwgMSwgCi0gICAgMTIxLCAyNDEsIDY4LCAzOSwgMjA4LCAxLCAxMjUsIDI0MSwgNjgsIDM5LCAyMDgsIDEsIDEyMSwgNzYsIDM5LCAyMDgsIDEsIAotICAgIDEyNSwgNzYsIDM5LCAyMDgsIDIzMSwgMjA0LCAyMzQsIDIzMCwgMzksIDIwOCwgMjUsIDI1NSwgNzMsIDM5LCAyMDgsIDI1LCAKLSAgICA3MywgMzksIDIwOCwgMjUsIDIxNCwgMjE0LCAzOSwgMjA4LCAyNSwgNzAsIDM5LCAyMDgsIDI1LCA3NSwgMzksIDIwOCwgMjUsIAotICAgIDc2LCAzOSwgMjA4LCAyMzEsIDIwNCwgMjM0LCAxMDgsIDM5LCAyMDgsIDI1LCAyNDAsIDExOSwgMzksIDIwOCwgMjUsIDIxNCwgCi0gICAgMjEzLCAzOSwgMjA4LCAyNSwgMjE0LCAyMjksIDM5LCAyMDgsIDI1LCAyNTMsIDE5MCwgMzksIDIwOCwgMjUsIDI1MywgMTY3LCAKLSAgICAzOSwgMjA4LCAyNSwgMjU0LCAxMjMsIDM5LCAyMDgsIDI1LCAyNTQsIDEzNiwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgCi0gICAgMjQ1LCAxODAsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDQsIDIyNywgMjA2LCAzOSwgMjA4LCAxMzgsIDIzMSwgMjA0LCAyMTYsIAotICAgIDE1NiwgMzksIDIwOCwgMTM4LCAyMzEsIDIwNCwgMjE5LCA0MiwgMzksIDIwOCwgMTYsIDIzNCwgMTMsIDM5LCAyMDgsIDE2LCAKLSAgICAyMjcsIDIwNiwgMzksIDIwOCwgMTYsIDIyMSwgMjUzLCAzOSwgMjA4LCAxNiwgMjQxLCA2OSwgMjQxLCA2NCwgMzksIDIwOCwgCi0gICAgMTYsIDIzNCwgMjIsIDIzNCwgMjEsIDE4NiwgMTg1LCAxLCA3NSwgMTg2LCAxODUsIDEsIDc2LCAxODYsIDE4NSwgMSwgMjUwLCAKLSAgICAxNTcsIDE4NiwgMTg1LCAxLCAyMjcsIDE2NSwgMTg2LCAxODUsIDEsIDIxNSwgMTU2LCAxODYsIDE4NSwgMSwgMjE1LCAxNDQsIAotICAgIDE4NiwgMTg1LCAxLCAyNDgsIDEzNSwgMTg2LCAxODUsIDEsIDI0OCwgMTE5LCAxODYsIDE4NSwgMSwgMjI4LCAxMTAsIDE4NiwgCi0gICAgMTg1LCAxLCAyMjAsIDEwMiwgMTg2LCAxODUsIDEsIDIxOCwgMjIzLCAxODYsIDE4NSwgMjUsIDUsIDIzNiwgMzMsIDE4NiwgCi0gICAgMTg1LCAyNSwgNSwgMjE0LCAxMTgsIDE4NiwgMTg1LCAyNSwgNSwgMjU1LCAzNywgMTg2LCAxODUsIDI1LCA1LCAyNTMsIAotICAgIDE5MiwgMTg2LCAxODUsIDI1LCA1LCAyNTUsIDMwLCAxODYsIDE4NSwgMjUwLCAxMjUsIDE4NiwgMTg1LCAyNTQsIDIwNiwgCi0gICAgMjM0LCA5OCwgMTg2LCAxODUsIDI1NCwgMTAzLCAxODYsIDE4NSwgMywgMjIzLCA3NCwgNzgsIDE4NiwgMTg1LCAyMTEsIAotICAgIDIwOSwgMjIzLCA3NCwgNzgsIDE4NiwgMTg1LCAyNSwgNSwgMjEzLCAxNDcsIDE4NiwgMTg1LCAyMTMsIDE1MiwgMjksIDMsIAotICAgIDIxNSwgMTM3LCAyOSwgMywgMjE1LCAxNDAsIDI5LCAzLCAyMTUsIDE0MywgMjksIDMsIDIxNSwgMTQxLCAyOSwgMywgMjE1LCAKLSAgICAxNDIsIDI5LCAzLCAyMTUsIDEzOSwgMjksIDMsIDI0OCwgMTEzLCAyOSwgMywgMjQ4LCAxMTUsIDI5LCAzLCAyNDgsIDExOCwgCi0gICAgMjksIDMsIDI0OCwgMTE2LCAyOSwgMywgMjQ4LCAxMTcsIDI5LCAzLCAyNDgsIDExNCwgMjksIDMsIDI0NiwgMjgsIDI5LCAzLCAKLSAgICAyNDYsIDMxLCAyOSwgMywgMjQ2LCAzNywgMjksIDMsIDI0NiwgMzUsIDI5LCAzLCAyNDYsIDM2LCAyOSwgMywgMjQ2LCAyOSwgCi0gICAgMjksIDMsIDI1MCwgMjA0LCAyOSwgMywgMjUwLCAxOTgsIDI5LCAzLCAyNTAsIDIwMCwgMjksIDMsIDI1MCwgMjAzLCAyOSwgCi0gICAgMywgMjUwLCAyMDEsIDI5LCAzLCAyNTAsIDIwMiwgMjksIDMsIDI1MCwgMTk5LCAyOSwgMywgMjUyLCAxMTEsIDI5LCAzLCAKLSAgICAyNTIsIDkwLCAyOSwgMywgMjUyLCAxMDIsIDI5LCAzLCAyNTIsIDExMCwgMjksIDMsIDI1MiwgMTA1LCAyOSwgMywgMjUyLCAKLSAgICAxMDYsIDI5LCAzLCAyNTIsIDk0LCAxODYsIDE4NSwgMSwgMjM0LCAxOSwgMTg2LCAxODUsIDEsIDIyMSwgMjUzLCAxODYsIAotICAgIDE4NSwgMSwgMjMzLCAxMDksIDE4NiwgMTg1LCAxLCAyMzAsIDE3MiwgMTg2LCAxODUsIDEsIDE5MCwgMTg2LCAxODUsIDEsIAotICAgIDE5NywgMTg2LCAxODUsIDEsIDI1MCwgMTAyLCAxODYsIDE4NSwgMSwgMjE2LCA5MCwgMTg2LCAxODUsIDEsIDIzNCwgMTAxLCAKLSAgICAxODYsIDE4NSwgMSwgMjI4LCAyNTAsIDE4NiwgMTg1LCAxLCAyMTYsIDE1MCwgMTg2LCAxODUsIDEsIDIxMiwgNjAsIDE4NiwgCi0gICAgMTg1LCAxLCAyMTEsIDY5LCAxODYsIDE4NSwgMSwgMjQwLCAyMTYsIDE4NiwgMTg1LCAxLCAyMTQsIDE5MCwgMTg2LCAxODUsIAotICAgIDEsIDczLCAxODYsIDE4NSwgMSwgMjI1LCAxNDIsIDE4NiwgMTg1LCAxLCAyNTMsIDIwMiwgMTg2LCAxODUsIDEsIDI0MiwgCi0gICAgMTY3LCAxODYsIDE4NSwgMSwgMjM1LCAxMTIsIDE4NiwgMTg1LCAxLCAyMjMsIDE2NiwgMTg2LCAxODUsIDEsIDI1MiwgMTkxLCAKLSAgICAxODYsIDE4NSwgMSwgMjM1LCAxMDAsIDE4NiwgMTg1LCAxLCAyNDcsIDIxOSwgMTg2LCAxODUsIDEsIDI0MiwgMjIxLCAxODYsIAotICAgIDE4NSwgMSwgMjQ4LCA1LCAxODYsIDE4NSwgMSwgMjUyLCAxNiwgMTg2LCAxODUsIDEsIDIzNCwgMjAsIDIzMiwgMTI4LCAKLSAgICAxODYsIDE4NSwgMSwgMjMzLCAxMTAsIDIzMiwgMTI4LCAxODYsIDE4NSwgMSwgMjMwLCAxNzMsIDIzMiwgMTI4LCAxODYsIAotICAgIDE4NSwgMSwgMjI2LCA5MCwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAyMjksIDIyOSwgMjMyLCAxMjgsIDE4NiwgMTg1LCAxLCAKLSAgICAyMTYsIDkxLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDIyOCwgMjUxLCAyMzIsIDEyOCwgMTg2LCAxODUsIDEsIDI0MCwgCi0gICAgMTU0LCAyMzIsIDEyOCwgMTg2LCAxODUsIDI1LCA1LCAyMjYsIDE5NSwgMTg2LCAxODUsIDI1LCA1LCAyMzUsIDI1MywgMTg2LCAKLSAgICAxODUsIDI1LCA1LCAyNTQsIDEyMiwgMTg2LCAxODUsIDI1LCA1LCAyMTEsIDM4LCAxODYsIDE4NSwgMjUsIDUsIDIxOSwgMzIsIAotICAgIDE4NiwgMTg1LCAyNSwgNSwgMjE0LCAxODcsIDE4NiwgMTg1LCAyNSwgNSwgMjUwLCAxMjMsIDE4NiwgMTg1LCAyNSwgNSwgCi0gICAgMjI3LCAxOTEsIDE4NiwgMTg1LCAyNTAsIDEyNCwgMTg2LCAxODUsIDIzMiwgODUsIDIzNSwgMTUwLCAxODYsIDE4NSwgMjU0LCAKLSAgICA0NiwgMjM1LCAxNTAsIDE4NiwgMTg1LCAyMSwgMjEwLCA4NiwgMTg2LCAxODUsIDIxLCAxMTAsIDE4NiwgMTg1LCAyMSwgCi0gICAgMTA1LCAxODYsIDE4NSwgMjEsIDE1OCwgMTg2LCAxODUsIDIxLCAxNjEsIDE4NiwgMTg1LCAyMSwgMTg5LCAxODYsIDE4NSwgCi0gICAgMjEsIDE5NCwgMTg2LCAxODUsIDIxLCAxOTgsIDE4NiwgMTg1LCAyMSwgMTk1LCAxODYsIDE4NSwgMjEsIDIwMCwgMjQsIAotICAgIDE0MywgMjI3LCA3NywgMjQsIDE0MywgMjI3LCA4MiwgMjQsIDE0MywgMjEwLCAyNDMsIDI0LCAxNDMsIDIxMCwgMjQyLCAyNCwgCi0gICAgMTQzLCAyMTAsIDI0MSwgMjQsIDE0MywgMjE1LCAyMywgMjQsIDE0MywgMjE1LCAyNiwgMjQsIDE0MywgMjEwLCAyMTAsIDI0LCAKLSAgICAxNDMsIDIxMCwgMjA2LCAyNCwgMTQzLCAyNDUsIDU0LCAyNCwgMTQzLCAyNDUsIDUyLCAyNCwgMTQzLCAyNDUsIDUzLCAyNCwgCi0gICAgMTQzLCAyNDUsIDUwLCAyNCwgMTQzLCAyNDAsIDE0NCwgMjQsIDE0MywgMjQwLCAxNDMsIDI0LCAxNDMsIDI0MCwgMTQxLCAKLSAgICAyNCwgMTQzLCAyNDAsIDE0MiwgMjQsIDE0MywgMjQwLCAxNDcsIDI0LCAxNDMsIDI0MCwgMTQwLCAyNCwgMTQzLCAyNDAsIAotICAgIDEzOSwgMjQsIDE0MywgMjQwLCAxNDksIDI0LCAxNDMsIDI1NCwgMzMsIDI0LCAxNDMsIDI1NCwgMzIsIDI0LCA5MCwgMjI4LCAKLSAgICAyMTksIDI0LCA5MCwgMjI4LCAyMjUsIDI0LCA5MCwgMjE4LCAyMDQsIDI0LCA5MCwgMjE4LCAyMDMsIDI0LCA5MCwgMjE2LCAKLSAgICA5NiwgMjQsIDkwLCAyMTYsIDk0LCAyNCwgOTAsIDIxNiwgOTMsIDI0LCA5MCwgMjE2LCA5OSwgMjQsIDkwLCAyMTYsIDEwMCwgCi0gICAgMjQsIDkwLCAyMTYsIDkyLCAyNCwgOTAsIDIyMywgNSwgMjQsIDkwLCAyMjMsIDIwLCAyNCwgOTAsIDIxOCwgMjEwLCAyNCwgCi0gICAgOTAsIDIyMywgMTcsIDI0LCA5MCwgMjIzLCA3LCAyNCwgOTAsIDIyMywgOSwgMjQsIDkwLCAyMjIsIDI1MiwgMjQsIDkwLCAKLSAgICAyMjIsIDI1MywgMjQsIDkwLCAyMzQsIDIxOCwgMjQsIDkwLCAyMzAsIDIxMiwgMjQsIDkwLCAyMzAsIDIwNiwgMjQsIDkwLCAKLSAgICAyMTgsIDIxNCwgMjQsIDkwLCAyMzAsIDIwOSwgMjQsIDkwLCAyMzAsIDIxNSwgMjQsIDkwLCAyMjUsIDc2LCAyNCwgOTAsIAotICAgIDIyNSwgODUsIDI0LCA5MCwgMjI1LCA4OSwgMjQsIDkwLCAyMTgsIDIxMiwgMjQsIDkwLCAyMjUsIDc5LCAyNCwgOTAsIDIyNSwgCi0gICAgOTMsIDI0LCA5MCwgMjI1LCA5NCwgMjQsIDkwLCAyMTksIDE0MCwgMjQsIDkwLCAyMTksIDE0MywgMjQsIDkwLCAyMTgsIAotICAgIDIwOCwgMjQsIDkwLCAyMTgsIDIwNiwgMjQsIDkwLCAyMTksIDEzOCwgMjQsIDkwLCAyMTksIDE0NiwgMjQsIDkwLCAyMTksIAotICAgIDE0NywgMjQsIDkwLCAyMTksIDEzMiwgMjQsIDkwLCAyMTksIDE0NSwgMjQsIDkwLCAyMjYsIDMwLCAyNCwgOTAsIDIyNiwgCi0gICAgMzEsIDI0LCA5MCwgMjExLCAyNCwgMjQsIDkwLCAyMTEsIDI1LCAyNCwgOTAsIDI1MCwgNDQsIDI0LCA5MCwgMjUwLCA0MywgCi0gICAgMjQsIDkwLCAyMTgsIDIxOSwgMjQsIDkwLCAyMjUsIDEyOCwgMjQsIDkwLCAyMjUsIDEyNywgOSwgMTQsIDIzOCwgMjQsIDksIAotICAgIDE0LCAyMzgsIDIzLCA5LCAxNCwgMjM4LCAyMiwgOSwgMTQsIDIzOCwgMjEsIDksIDE0LCAyMzgsIDIwLCA5LCAxNCwgMjM4LCAKLSAgICAxOSwgOSwgMTQsIDIzOCwgMTgsIDksIDE0LCAyMzgsIDE3LCA5LCAxNCwgMjM4LCAxNiwgOSwgMTQsIDIzOCwgMTUsIDksIAotICAgIDE0LCAyMzgsIDE0LCA5LCAxNCwgMjM4LCAxMywgOSwgMTQsIDIzOCwgMTIsIDksIDE0LCAyMzgsIDExLCA5LCAxNCwgMjM4LCAKLSAgICAxMCwgOSwgMTQsIDIzOCwgOSwgOSwgMTQsIDIzOCwgOCwgOSwgMTQsIDIzOCwgNywgOSwgMTQsIDIzOCwgNiwgOSwgMTQsIAotICAgIDIzOCwgNSwgOSwgMTQsIDIzOCwgNCwgOSwgMTQsIDIzOCwgMywgOSwgMTQsIDIzOCwgMiwgOSwgMTQsIDIzOCwgMSwgOSwgCi0gICAgMTQsIDIzOCwgMCwgOSwgMTQsIDIzNywgMjU1LCA5LCAxNCwgMjM3LCAyNTQsIDksIDE0LCAyMzcsIDI1MywgOSwgMTQsIAotICAgIDIzNywgMjUyLCA5LCAxNCwgMjM3LCAyNTEsIDksIDE0LCAyMzcsIDI1MCwgOSwgMTQsIDIzNywgMjQ5LCA5LCAxNCwgMjM3LCAKLSAgICAyNDgsIDksIDE0LCAyMzcsIDI0NywgOSwgMTQsIDIzNywgMjQ2LCA5LCAxNCwgMjM3LCAyNDUsIDksIDE0LCAyMzcsIDI0NCwgCi0gICAgOSwgMTQsIDIzNywgMjQzLCA5LCAxNCwgMjM3LCAyNDIsIDksIDE0LCAyMzcsIDI0MSwgOSwgMTQsIDIzNywgMjQwLCA5LCAKLSAgICAxNCwgMjM3LCAyMzksIDksIDE0LCAyMzcsIDIzOCwgOSwgMTQsIDIzNywgMjM3LCA5LCAxNCwgMjM3LCAyMzYsIDksIDE0LCAKLSAgICAyMzcsIDIzNSwgOSwgMTQsIDIzNywgMjM0LCA5LCAxNCwgMjM3LCAyMzMsIDksIDE0LCAyMzcsIDIzMiwgOSwgMTQsIDIzNywgCi0gICAgMjMxLCA5LCAxNCwgMjM3LCAyMzAsIDksIDE0LCAyMzcsIDIyOSwgOSwgMTQsIDIzNywgMjI4LCA5LCAxNCwgMjM3LCAyMjcsIAotICAgIDksIDE0LCAyMzcsIDIyNiwgOSwgMTQsIDIzNywgMjI1LCA5LCAxNCwgMjM3LCAyMjQsIDksIDE0LCAyMzcsIDIyMywgOSwgCi0gICAgMTQsIDIzNywgMjIyLCA5LCAxNCwgMjM3LCAyMjEsIDksIDE0LCAyMzcsIDIyMCwgOSwgMTQsIDIzNywgMjE5LCA5LCAxNCwgCi0gICAgMjM3LCAyMTgsIDksIDE0LCAyMzcsIDIxNywgOSwgMTQsIDIzNywgMjE2LCA5LCAxNCwgMjM3LCAyMTUsIDksIDE0LCAyMzcsIAotICAgIDIxNCwgOSwgMTQsIDIzNywgMjEzLCA5LCAxNCwgMjM3LCAyMTIsIDksIDE0LCAyMzcsIDIxMSwgOSwgMTQsIDIzNywgMjEwLCAKLSAgICA5LCAxNCwgMjM3LCAyMDksIDksIDE0LCAyMzcsIDIwOCwgOSwgMTQsIDIzNywgMjA3LCA5LCAxNCwgMjM3LCAyMDYsIDksIAotICAgIDE0LCAyMzcsIDIwNSwgOSwgMTQsIDIzNywgMjA0LCA5LCAxNCwgMjM3LCAyMDMsIDksIDE0LCAyMzcsIDIwMiwgOSwgMTQsIAotICAgIDIzNywgMjAxLCA5LCAxNCwgMjM3LCAyMDAsIDksIDE0LCAyMzcsIDE5OSwgOSwgMTQsIDIzNywgMTk4LCA5LCAxNCwgMjM3LCAKLSAgICAxOTcsIDksIDE0LCAyMzcsIDE5NiwgOSwgMTQsIDIzNywgMTk1LCA5LCAxNCwgMjM3LCAxOTQsIDksIDE0LCAyMzcsIDE5MywgCi0gICAgOSwgMTQsIDIzNywgMTkyLCA5LCAxNCwgMjM3LCAxOTEsIDksIDE0LCAyMzcsIDE5MCwgOSwgMTQsIDIzNywgMTg5LCA5LCAKLSAgICAxNCwgMjM3LCAxODgsIDksIDE0LCAyMzcsIDE4NywgOSwgMTQsIDIzNywgMTg2LCA5LCAxNCwgMjM3LCAxODUsIDksIDE0LCAKLSAgICAyMzcsIDE4NCwgOSwgMTQsIDIzNywgMTgzLCA5LCAxNCwgMjM3LCAxODIsIDksIDE0LCAyMzcsIDE4MSwgOSwgMTQsIDIzNywgCi0gICAgMTgwLCA5LCAxNCwgMjM3LCAxNzksIDksIDE0LCAyMzcsIDE3OCwgOSwgMTQsIDIzNywgMTc3LCA5LCAxNCwgMjM3LCAxNzYsIAotICAgIDksIDE0LCAyMzcsIDE3NSwgOSwgMTQsIDIzNywgMTc0LCA5LCAxNCwgMjM3LCAxNzMsIDksIDE0LCAyMzcsIDE3MiwgOSwgCi0gICAgMTQsIDIzNywgMTcxLCA5LCAxNCwgMjM3LCAxNzAsIDksIDE0LCAyMzcsIDE2OSwgOSwgMTQsIDIzNywgMTY4LCA5LCAxNCwgCi0gICAgMjM3LCAxNjcsIDksIDE0LCAyMzcsIDE2NiwgOSwgMTQsIDIzNywgMTY1LCA5LCAxNCwgMjM3LCAxNjQsIDksIDE0LCAyMzcsIAotICAgIDE2MywgOSwgMTQsIDIzNywgMTYyLCA5LCAxNCwgMjM3LCAxNjEsIDksIDE0LCAyMzcsIDE2MCwgOSwgMTQsIDIzNywgMTU5LCAKLSAgICA5LCAxNCwgMjM3LCAxNTgsIDksIDE0LCAyMzcsIDE1NywgOSwgMTQsIDIzNywgMTU2LCA5LCAxNCwgMjM3LCAxNTUsIDksIAotICAgIDE0LCAyMzcsIDE1NCwgOSwgMTQsIDIzNywgMTUzLCA5LCAxNCwgMjM3LCAxNTIsIDksIDE0LCAyMzcsIDE1MSwgOSwgMTQsIAotICAgIDIzNywgMTUwLCA5LCAxNCwgMjM3LCAxNDksIDksIDE0LCAyMzcsIDE0OCwgOSwgMTQsIDIzNywgMTQ3LCA5LCAxNCwgMjM3LCAKLSAgICAxNDYsIDksIDE0LCAyMzcsIDE0NSwgOSwgMTQsIDIzNywgMTQ0LCA5LCAxNCwgMjM3LCAxNDMsIDksIDE0LCAyMzcsIDE0MiwgCi0gICAgOSwgMTQsIDIzNywgMTQxLCA5LCAxNCwgMjM3LCAxNDAsIDksIDE0LCAyMzcsIDEzOSwgOSwgMTQsIDIzNywgMTM4LCA5LCAKLSAgICAxNCwgMjM3LCAxMzcsIDksIDE0LCAyMzcsIDEzNiwgOSwgMTQsIDIzNywgMTM1LCA5LCAxNCwgMjM3LCAxMzQsIDksIDE0LCAKLSAgICAyMzcsIDEzMywgOSwgMTQsIDIzNywgMTMyLCA5LCAxNCwgMjM3LCAxMzEsIDksIDE0LCAyMzcsIDEzMCwgOSwgMTQsIDIzNywgCi0gICAgMTI5LCA5LCAxNCwgMjM3LCAxMjgsIDksIDE0LCAyMzcsIDEyNywgOSwgMTQsIDIzNywgMTI2LCA5LCAxNCwgMjM3LCAxMjUsIAotICAgIDksIDE0LCAyMzcsIDEyNCwgOSwgMTQsIDIzNywgMTIzLCA5LCAxNCwgMjM3LCAxMjIsIDksIDE0LCAyMzcsIDEyMSwgOSwgCi0gICAgMTQsIDIzNywgMTIwLCA5LCAxNCwgMjM3LCAxMTksIDksIDE0LCAyMzcsIDExOCwgOSwgMTQsIDIzNywgMTE3LCA5LCAxNCwgCi0gICAgMjM3LCAxMTYsIDksIDE0LCAyMzcsIDExNSwgOSwgMTQsIDIzNywgMTE0LCA5LCAxNCwgMjM3LCAxMTMsIDksIDE0LCAyMzcsIAotICAgIDExMiwgOSwgMTQsIDIzNywgMTExLCA5LCAxNCwgMjM3LCAxMTAsIDksIDE0LCAyMzcsIDEwOSwgOSwgMTQsIDIzNywgMTA4LCAKLSAgICA5LCAxNCwgMjM3LCAxMDcsIDksIDE0LCAyMzcsIDEwNiwgOSwgMTQsIDIzNywgMTA1LCA5LCAxNCwgMjM3LCAxMDQsIDksIAotICAgIDE0LCAyMzcsIDEwMywgOSwgMTQsIDIzNywgMTAyLCA5LCAxNCwgMjM3LCAxMDEsIDksIDE0LCAyMzcsIDEwMCwgOSwgMTQsIAotICAgIDIzNywgOTksIDksIDE0LCAyMzcsIDk4LCA5LCAxNCwgMjM3LCA5NywgOSwgMTQsIDIzNywgOTYsIDksIDE0LCAyMzcsIDk1LCAKLSAgICA5LCAxNCwgMjM3LCA5NCwgOSwgMTQsIDIzNywgOTMsIDksIDE0LCAyMzcsIDkyLCA5LCAxNCwgMjM3LCA5MSwgOSwgMTQsIAotICAgIDIzNywgOTAsIDksIDE0LCAyMzcsIDg5LCA5LCAxNCwgMjM3LCA4OCwgOSwgMTQsIDIzNywgODcsIDksIDE0LCAyMzcsIDg2LCAKLSAgICA5LCAxNCwgMjM3LCA4NSwgOSwgMTQsIDIzNywgODQsIDksIDE0LCAyMzcsIDgzLCA5LCAxNCwgMjM3LCA4MiwgOSwgMTQsIAotICAgIDIzNywgODEsIDksIDE0LCAyMzcsIDgwLCA5LCAxNCwgMjM3LCA3OSwgOSwgMTQsIDIzNywgNzgsIDksIDE0LCAyMzcsIDc3LCAKLSAgICA5LCAxNCwgMjM3LCA3NiwgOSwgMTQsIDIzNywgNzUsIDksIDE0LCAyMzcsIDc0LCA5LCAxNCwgMjM3LCA3MywgOSwgMTQsIAotICAgIDIzNywgNzIsIDksIDE0LCAyMzcsIDcxLCA5LCAxNCwgMjM3LCA3MCwgOSwgMTQsIDIzNywgNjksIDksIDE0LCAyMzcsIDY4LCAKLSAgICA5LCAxNCwgMjM3LCA2NywgOSwgMTQsIDIzNywgNjYsIDksIDE0LCAyMzcsIDY1LCA5LCAxNCwgMjM3LCA2NCwgOSwgMTQsIAotICAgIDIzNywgNjMsIDksIDE0LCAyMzcsIDYyLCA5LCAxNCwgMjM3LCA2MSwgOSwgMTQsIDIzNywgNjAsIDksIDE0LCAyMzcsIDU5LCAKLSAgICA5LCAxNCwgMjM3LCA1OCwgOSwgMTQsIDIzNywgNTcsIDksIDE0LCAyMzcsIDU2LCA5LCAxNCwgMjM3LCA1NSwgOSwgMTQsIAotICAgIDIzNywgNTQsIDksIDE0LCAyMzcsIDUzLCA5LCAxNCwgMjM3LCA1MiwgOSwgMTQsIDIzNywgNTEsIDksIDE0LCAyMzcsIDUwLCAKLSAgICA5LCAxNCwgMjM3LCA0OSwgOSwgMTQsIDIzNywgNDgsIDksIDE0LCAyMzcsIDQ3LCA5LCAxNCwgMjM3LCA0NiwgOSwgMTQsIAotICAgIDIzNywgNDUsIDksIDE0LCAyMzcsIDQ0LCA5LCAxNCwgMjM3LCA0MywgOSwgMTQsIDIzNywgNDIsIDksIDE0LCAyMzcsIDQxLCAKLSAgICA5LCAxNCwgMjM3LCA0MCwgOSwgMTQsIDIzNywgMzksIDksIDE0LCAyMzcsIDM4LCA5LCAxNCwgMjM3LCAzNywgOSwgMTQsIAotICAgIDIzNywgMzYsIDksIDE0LCAyMzcsIDM1LCA5LCAxNCwgMjM3LCAzNCwgOSwgMTQsIDIzNywgMzMsIDksIDE0LCAyMzcsIDMyLCAKLSAgICA5LCAxNCwgMjM3LCAzMSwgOSwgMTQsIDIzNywgMzAsIDksIDE0LCAyMzcsIDI5LCA5LCAxNCwgMjM3LCAyOCwgOSwgMTQsIAotICAgIDIzNywgMjcsIDksIDE0LCAyMzcsIDI2LCA5LCAxNCwgMjM3LCAyNSwgOSwgMTQsIDIzNywgMjQsIDksIDE0LCAyMzcsIDIzLCAKLSAgICA5LCAxNCwgMjM3LCAyMiwgOSwgMTQsIDIzNywgMjEsIDksIDE0LCAyMzcsIDIwLCA5LCAxNCwgMjM3LCAxOSwgOSwgMTQsIAotICAgIDIzNywgMTgsIDksIDE0LCAyMzcsIDE3LCA5LCAxNCwgMjM3LCAxNiwgOSwgMTQsIDIzNywgMTUsIDksIDE0LCAyMzcsIDE0LCAKLSAgICA5LCAxNCwgMjM3LCAxMywgOSwgMTQsIDIzNywgMTIsIDksIDE0LCAyMzcsIDExLCA5LCAxNCwgMjM3LCAxMCwgOSwgMTQsIAotICAgIDIzNywgOSwgOSwgMTQsIDIzNywgOCwgOSwgMTQsIDIzNywgNywgOSwgMTQsIDIzNywgNiwgOSwgMTQsIDIzNywgNSwgOSwgCi0gICAgMTQsIDIzNywgNCwgOSwgMTQsIDIzNywgMywgOSwgMTQsIDIzNywgMiwgOSwgMTQsIDIzNywgMSwgOSwgMTQsIDIzNywgMCwgCi0gICAgOSwgMTQsIDIzNiwgMjU1LCA5LCAxNCwgMjM2LCAyNTQsIDksIDE0LCAyMzYsIDI1MywgOSwgMTQsIDIzNiwgMjUyLCA5LCAKLSAgICAxNCwgMjM2LCAyNTEsIDksIDE0LCAyMzYsIDI1MCwgOSwgMTQsIDIzNiwgMjQ5LCA5LCAxNCwgMjM2LCAyNDgsIDksIDE0LCAKLSAgICAyMzYsIDI0NywgOSwgMTQsIDIzNiwgMjQ2LCA5LCAxNCwgMjM2LCAyNDUsIDksIDE0LCAyMzYsIDI0NCwgOSwgMTQsIDIzNiwgCi0gICAgMjQzLCA5LCAxNCwgMjM2LCAyNDIsIDksIDE0LCAyMzYsIDI0MSwgOSwgMTQsIDIzNiwgMjQwLCA5LCAxNCwgMjM2LCAyMzksIAotICAgIDksIDE0LCAyMzYsIDIzOCwgOSwgMTQsIDIzNiwgMjM3LCA5LCAxNCwgMjM2LCAyMzYsIDksIDE0LCAyMzYsIDIzNSwgOSwgCi0gICAgMTQsIDIzNiwgMjM0LCA5LCAxNCwgMjM2LCAyMzMsIDksIDE0LCAyMzYsIDIzMiwgOSwgMTQsIDIzNiwgMjMxLCA5LCAxNCwgCi0gICAgMjM2LCAyMzAsIDksIDE0LCAyMzYsIDIyOSwgOSwgMTQsIDIzNiwgMjI4LCA5LCAxNCwgMjM2LCAyMjcsIDksIDE0LCAyMzYsIAotICAgIDIyNiwgOSwgMTQsIDIzNiwgMjI1LCA5LCAxNCwgMjM2LCAyMjQsIDksIDE0LCAyMzYsIDIyMywgOSwgMTQsIDIzNiwgMjIyLCAKLSAgICA5LCAxNCwgMjM2LCAyMjEsIDksIDE0LCAyMzYsIDIyMCwgOSwgMTQsIDIzNiwgMjE5LCA5LCAxNCwgMjM2LCAyMTgsIDksIAotICAgIDE0LCAyMzYsIDIxNywgOSwgMTQsIDIzNiwgMjE2LCA5LCAxNCwgMjM2LCAyMTUsIDksIDE0LCAyMzYsIDIxNCwgOSwgMTQsIAotICAgIDIzNiwgMjEzLCA5LCAxNCwgMjM2LCAyMTIsIDksIDE0LCAyMzYsIDIxMSwgOSwgMTQsIDIzNiwgMjEwLCA5LCAxNCwgMjM2LCAKLSAgICAyMDksIDksIDE0LCAyMzYsIDIwOCwgOSwgMTQsIDIzNiwgMjA3LCA5LCAxNCwgMjM2LCAyMDYsIDksIDE0LCAyMzYsIDIwNSwgCi0gICAgOSwgMTQsIDIzNiwgMjA0LCA5LCAxNCwgMjM2LCAyMDMsIDksIDE0LCAyMzYsIDIwMiwgOSwgMTQsIDIzNiwgMjAxLCA5LCAKLSAgICAxNCwgMjM2LCAyMDAsIDksIDE0LCAyMzYsIDE5OSwgOSwgMTQsIDIzNiwgMTk4LCA5LCAxNCwgMjM2LCAxOTcsIDksIDE0LCAKLSAgICAyMzYsIDE5NiwgOSwgMTQsIDIzNiwgMTk1LCA5LCAxNCwgMjM2LCAxOTQsIDksIDE0LCAyMzYsIDE5MywgOSwgMTQsIDIzNiwgCi0gICAgMTkyLCA5LCAxNCwgMjM2LCAxOTEsIDksIDE0LCAyMzYsIDE5MCwgOSwgMTQsIDIzNiwgMTg5LCA5LCAxNCwgMjM2LCAxODgsIAotICAgIDksIDE0LCAyMzYsIDE4NywgOSwgMTQsIDIzNiwgMTg2LCA5LCAxNCwgMjM2LCAxODUsIDksIDE0LCAyMzYsIDE4NCwgOSwgCi0gICAgMTQsIDIzNiwgMTgzLCA5LCAxNCwgMjM2LCAxODIsIDksIDE0LCAyMzYsIDE4MSwgOSwgMTQsIDIzNiwgMTgwLCA5LCAxNCwgCi0gICAgMjM2LCAxNzksIDksIDE0LCAyMzYsIDE3OCwgOSwgMTQsIDIzNiwgMTc3LCA5LCAxNCwgMjM2LCAxNzYsIDksIDE0LCAyMzYsIAotICAgIDE3NSwgOSwgMTQsIDIzNiwgMTc0LCA5LCAxNCwgMjM2LCAxNzMsIDksIDE0LCAyMzYsIDE3MiwgOSwgMTQsIDIzNiwgMTcxLCAKLSAgICA5LCAxNCwgMjM2LCAxNzAsIDksIDE0LCAyMzYsIDE2OSwgOSwgMTQsIDIzNiwgMTY4LCA5LCAxNCwgMjM2LCAxNjcsIDksIAotICAgIDE0LCAyMzYsIDE2NiwgOSwgMTQsIDIzNiwgMTY1LCA5LCAxNCwgMjM2LCAxNjQsIDksIDE0LCAyMzYsIDE2MywgOSwgMTQsIAotICAgIDIzNiwgMTYyLCA5LCAxNCwgMjM2LCAxNjEsIDksIDE0LCAyMzYsIDE2MCwgOSwgMTQsIDIzNiwgMTU5LCA5LCAxNCwgMjM2LCAKLSAgICAxNTgsIDksIDE0LCAyMzYsIDE1NywgOSwgMTQsIDIzNiwgMTU2LCA5LCAxNCwgMjM2LCAxNTUsIDksIDE0LCAyMzYsIDE1NCwgCi0gICAgOSwgMTQsIDIzNiwgMTUzLCA5LCAxNCwgMjM2LCAxNTIsIDksIDE0LCAyMzYsIDE1MSwgOSwgMTQsIDIzNiwgMTUwLCA5LCAKLSAgICAxNCwgMjM2LCAxNDksIDksIDE0LCAyMzYsIDE0OCwgOSwgMTQsIDIzNiwgMTQ3LCA5LCAxNCwgMjM2LCAxNDYsIDksIDE0LCAKLSAgICAyMzYsIDE0NSwgOSwgMTQsIDIzNiwgMTQ0LCA5LCAxNCwgMjM2LCAxNDMsIDksIDE0LCAyMzYsIDE0MiwgOSwgMTQsIDIzNiwgCi0gICAgMTQxLCA5LCAxNCwgMjM2LCAxNDAsIDksIDE0LCAyMzYsIDEzOSwgOSwgMTQsIDIzNiwgMTM4LCA5LCAxNCwgMjM2LCAxMzcsIAotICAgIDksIDE0LCAyMzYsIDEzNiwgOSwgMTQsIDIzNiwgMTM1LCA5LCAxNCwgMjM2LCAxMzQsIDksIDE0LCAyMzYsIDEzMywgOSwgCi0gICAgMTQsIDIzNiwgMTMyLCA5LCAxNCwgMjM2LCAxMzEsIDksIDE0LCAyMzYsIDEzMCwgOSwgMTQsIDIzNiwgMTI5LCA5LCAxNCwgCi0gICAgMjM2LCAxMjgsIDksIDE0LCAyMzYsIDEyNywgOSwgMTQsIDIzNiwgMTI2LCA5LCAxNCwgMjM2LCAxMjUsIDksIDE0LCAyMzYsIAotICAgIDEyNCwgOSwgMTQsIDIzNiwgMTIzLCA5LCAxNCwgMjM2LCAxMjIsIDksIDE0LCAyMzYsIDEyMSwgOSwgMTQsIDIzNiwgMTIwLCAKLSAgICA5LCAxNCwgMjM2LCAxMTksIDksIDE0LCAyMzYsIDExOCwgOSwgMTQsIDIzNiwgMTE3LCA5LCAxNCwgMjM2LCAxMTYsIDksIAotICAgIDE0LCAyMzYsIDExNSwgOSwgMTQsIDIzNiwgMTE0LCA5LCAxNCwgMjM2LCAxMTMsIDksIDE0LCAyMzYsIDExMiwgOSwgMTQsIAotICAgIDIzNiwgMTExLCA5LCAxNCwgMjM2LCAxMTAsIDksIDE0LCAyMzYsIDEwOSwgOSwgMTQsIDIzNiwgMTA4LCA5LCAxNCwgMjM2LCAKLSAgICAxMDcsIDksIDE0LCAyMzYsIDEwNiwgOSwgMTQsIDIzNiwgMTA1LCA5LCAxNCwgMjM2LCAxMDQsIDksIDE0LCAyMzYsIDEwMywgCi0gICAgOSwgMTQsIDIzNiwgMTAyLCA5LCAxNCwgMjM2LCAxMDEsIDksIDE0LCAyMzYsIDEwMCwgOSwgMTQsIDIzNiwgOTksIDksIDE0LCAKLSAgICAyMzYsIDk4LCA5LCAxNCwgMjM2LCA5NywgOSwgMTQsIDIzNiwgOTYsIDksIDE0LCAyMzYsIDk1LCA5LCAxNCwgMjM2LCA5NCwgCi0gICAgOSwgMTQsIDIzNiwgOTMsIDksIDE0LCAyMzYsIDkyLCA5LCAxNCwgMjM2LCA5MSwgOSwgMTQsIDIzNiwgOTAsIDksIDE0LCAKLSAgICAyMzYsIDg5LCA5LCAxNCwgMjM2LCA4OCwgOSwgMTQsIDIzNiwgODcsIDksIDE0LCAyMzYsIDg2LCA5LCAxNCwgMjM2LCA4NSwgCi0gICAgOSwgMTQsIDIzNiwgODQsIDksIDE0LCAyMzYsIDgzLCA5LCAxNCwgMjM2LCA4MiwgOSwgMTQsIDIzNiwgODEsIDksIDE0LCAKLSAgICAyMzYsIDgwLCA5LCAxNCwgMjM2LCA3OSwgOSwgMTQsIDIzNiwgNzgsIDksIDE0LCAyMzYsIDc3LCA5LCAxNCwgMjM2LCA3NiwgCi0gICAgOSwgMTQsIDIzNiwgNzUsIDksIDE0LCAyMzYsIDc0LCA5LCAxNCwgMjM2LCA3MywgOSwgMTQsIDIzNiwgNzIsIDksIDE0LCAKLSAgICAyMzYsIDcxLCA5LCAxNCwgMjM2LCA3MCwgOSwgMTQsIDIzNiwgNjksIDksIDE0LCAyMzYsIDY4LCA5LCAxNCwgMjM2LCA2NywgCi0gICAgOSwgMTQsIDIzNiwgNjYsIDksIDE0LCAyMzYsIDY1LCA3LCA0LCAyNywgMjQ0LCAxMjUsIDcsIDQsIDI3LCAyNDQsIDEyMSwgCi0gICAgNywgNCwgMjcsIDI0NCwgNzYsIDcsIDQsIDI3LCAyNDQsIDEyNCwgNywgNCwgMjcsIDI0NCwgMTIzLCA3LCA0LCAyNywgMTk5LCAKLSAgICAyMjIsIDkyLCAyMTcsIDE1MiwgNywgNCwgMjcsIDIxOCwgMTY4LCAxNTAsIDQsIDI3LCAyMzEsIDU5LCAyMjgsIDM5LCAxNTAsIAotICAgIDQsIDI3LCAyMzEsIDU5LCAyNDUsIDIxMywgMTUwLCA0LCAyNywgMjMxLCA1OSwgMjM1LCAyMjcsIDE1MCwgNCwgMjcsIDIxMywgCi0gICAgMTgwLCAyMjgsIDM5LCAxNTAsIDQsIDI3LCAyMzEsIDU5LCAyMTEsIDE2MCwgOTQsIDEsIDIxMCwgMjM0LCAyLCAyNDEsIAotICAgIDE1OCwgOTQsIDIyNSwgMTEsIDIzNSwgNTAsIDIxNCwgMTEsIDk0LCAyNywgMjExLCA2LCAyMTAsIDIzNCwgMjEwLCAyMzQsIAotICAgIDIyNSwgMjM5LCA5NCwgMSwgMjU0LCAxMzksIDI1MywgMTYyLCA5NCwgMSwgMjExLCAyNDcsIDI1NCwgMTcwLCA5NCwgMSwgCi0gICAgMjExLCAyNDcsIDI0OCwgMTg5LCA5NCwgMSwgMjExLCAyNDcsIDI0MSwgMjM4LCA5NCwgMSwgMjExLCAyNDcsIDIzNCwgMjUwLCAKLSAgICA5NCwgMSwgMjExLCAyNDcsIDIzMywgOTQsIDk0LCAxLCAyMTEsIDI0NywgNDAsIDIzMSwgNjUsIDk0LCAxLCAyMTEsIDI0NywgCi0gICAgMjIzLCA2NywgOTQsIDEsIDIxMSwgMjQ3LCAyMTcsIDM4LCA5NCwgMSwgMjU0LCAxMzksIDk2LCA1MCwgOTQsIDEsIDIyMCwgCi0gICAgMjEsIDIsIDIyMCwgMjEsIDI0NywgMTIwLCA5NCwgMSwgMjIwLCAyMSwgMiwgMjE5LCAxNTksIDI0NywgMTIwLCA5NCwgMSwgCi0gICAgMjIwLCAyMSwgMiwgMjQ4LCAyMDgsIDIyLCAyMjAsIDIxLCAyNDcsIDEyMCwgOTQsIDEsIDIyMCwgMjEsIDIsIDI0OCwgMjA4LCAKLSAgICAyMiwgMjE5LCAxNTksIDI0NywgMTIwLCA5NCwgMSwgMTEyLCAyLCAyMjUsIDIzOSwgOTQsIDEsIDExMiwgMiwgMjI0LCA3NiwgCi0gICAgOTQsIDEsIDExMiwgMiwgMjMxLCAxNzEsIDk0LCAxLCAyNTIsIDI5LCAyLCAyNDgsIDIwNywgOTQsIDEsIDI0MiwgMjAyLCAyLCAKLSAgICAyNDgsIDIwNywgOTQsIDEsIDI0OCwgMTkwLCAyLCAyNDgsIDIwNywgOTQsIDEsIDI0MSwgMjM5LCAyLCAyMzEsIDE3MSwgOTQsIAotICAgIDEsIDIxNCwgNCwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMTAsIDk4LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIxNiwgMjMxLCAyLCAKLSAgICAyNDgsIDIwNywgOTQsIDEsIDIxMCwgMjM0LCAyLCAyNDgsIDIwNywgOTQsIDEsIDQwLCAyMzQsIDI1MSwgMiwgMjQ4LCAyMDcsIAotICAgIDk0LCAxLCAyMzQsIDI1MSwgMiwgMjQ4LCAyMDcsIDk0LCAxLCAyMzMsIDk1LCAyLCAyNDgsIDIwNywgOTQsIDEsIDIzMSwgCi0gICAgNjYsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjI3LCAxOTUsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjIxLCAyNTAsIDIsIDI0OCwgCi0gICAgMjA3LCA5NCwgMSwgNDAsIDIyNSwgMjIyLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyNSwgMjIyLCAyLCAyNDgsIDIwNywgOTQsIAotICAgIDEsIDIxNSwgMTgwLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIyNCwgNDAsIDIsIDI0OCwgMjA3LCA5NCwgMSwgMjIzLCA2OCwgMiwgCi0gICAgMjQ4LCAyMDcsIDk0LCAxLCAyMjAsIDIxLCAyLCAyNDgsIDIwNywgOTQsIDEsIDIxNywgMzksIDIsIDI0OCwgMjA3LCA5NCwgCi0gICAgMSwgMjE0LCA0LCAyLCAyNDEsIDYxLCA5NCwgMSwgMjUyLCAyOSwgMiwgMjIzLCAxNjksIDk0LCAxLCAyMzQsIDI1MSwgMiwgCi0gICAgMjIzLCAxNjksIDk0LCAxLCAyMjUsIDIyMiwgMiwgMjIzLCAxNjksIDk0LCAyNywgMTEyLCAyMzMsIDk0LCAxMCwgMSwgMTEyLCAKLSAgICAyMTIsIDQ3LCA1MywgMTcsIDEwLCAxLCAxMTIsIDIxMiwgNDcsIDQwLCAxNywgMTAsIDEsIDI1MiwgNjUsIDUzLCAxNywgMTAsIAotICAgIDEsIDI1MiwgNjUsIDQwLCAxNywgMTAsIDEsIDI1MiwgNjUsIDY1LCAxNywgMTAsIDEsIDI1MiwgNjUsIDE0NywgMTcsIDEwLCAKLSAgICAxLCAyMjUsIDIwNiwgNTMsIDE3LCAxMCwgMSwgMjI1LCAyMDYsIDQwLCAxNywgMTAsIDEsIDIyNSwgMjA2LCA2NSwgMTcsIAotICAgIDEwLCAxLCAyMjUsIDIwNiwgMTQ3LCAxNywgMTAsIDEsIDI1MiwgNTMsIDUzLCAxNywgMTAsIDEsIDI1MiwgNTMsIDQwLCAxNywgCi0gICAgMTAsIDEsIDI1MiwgNTMsIDY1LCAxNywgMTAsIDEsIDI1MiwgNTMsIDE0NywgMTcsIDEwLCAxLCAyMTUsIDE0NywgNTMsIDE3LCAKLSAgICAxMCwgMSwgMjE1LCAxNDcsIDQwLCAxNywgMTAsIDEsIDIxNSwgMTQ3LCA2NSwgMTcsIDEwLCAxLCAyMTUsIDE0NywgMTQ3LCAKLSAgICAxNywgMTAsIDEsIDIxNywgNiwgNTMsIDE3LCAxMCwgMSwgMjE3LCA2LCA0MCwgMTcsIDEwLCAxLCAyMTcsIDYsIDY1LCAxNywgCi0gICAgMTAsIDEsIDIxNywgNiwgMTQ3LCAxNywgMTAsIDEsIDIxNSwgMTQ5LCA1MywgMTcsIDEwLCAxLCAyMTUsIDE0OSwgNDAsIDE3LCAKLSAgICAxMCwgMSwgMjE1LCAxNDksIDY1LCAxNywgMTAsIDEsIDIxNSwgMTQ5LCAxNDcsIDE3LCAxMCwgMSwgMjEzLCAyNDksIDUzLCAKLSAgICAxNywgMTAsIDEsIDIxMywgMjQ5LCA0MCwgMTcsIDEwLCAxLCAyMTMsIDI0OSwgNjUsIDE3LCAxMCwgMSwgMjEzLCAyNDksIAotICAgIDE0NywgMTcsIDEwLCAxLCAyMjUsIDIwNCwgNTMsIDE3LCAxMCwgMSwgMjI1LCAyMDQsIDQwLCAxNywgMTAsIDEsIDIyNSwgCi0gICAgMjA0LCA2NSwgMTcsIDEwLCAxLCAyMjUsIDIwNCwgMTQ3LCAxNywgMTAsIDEsIDI0NiwgNDQsIDUzLCAxNywgMTAsIDEsIAotICAgIDI0NiwgNDQsIDQwLCAxNywgMTAsIDEsIDI0NiwgNDQsIDY1LCAxNywgMTAsIDEsIDI0NiwgNDQsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAyMjcsIDE1NCwgNTMsIDE3LCAxMCwgMSwgMjI3LCAxNTQsIDQwLCAxNywgMTAsIDEsIDIyNywgMTU0LCA2NSwgMTcsIDEwLCAKLSAgICAxLCAyMjcsIDE1NCwgMTQ3LCAxNywgMTAsIDEsIDIxNywgMjcsIDUzLCAxNywgMTAsIDEsIDIxNywgMjcsIDQwLCAxNywgMTAsIAotICAgIDEsIDIxNywgMjcsIDY1LCAxNywgMTAsIDEsIDIxNywgMjcsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDI1LCA1MywgMTcsIDEwLCAKLSAgICAxLCAyMTcsIDI1LCA0MCwgMTcsIDEwLCAxLCAyMTcsIDI1LCA2NSwgMTcsIDEwLCAxLCAyMTcsIDI1LCAxNDcsIDE3LCAxMCwgCi0gICAgMSwgMjQ4LCAxMzMsIDUzLCAxNywgMTAsIDEsIDI0OCwgMTMzLCA0MCwgMTcsIDEwLCAxLCAyNDgsIDIwMiwgNTMsIDE3LCAKLSAgICAxMCwgMSwgMjQ4LCAyMDIsIDQwLCAxNywgMTAsIDEsIDI0NiwgNzEsIDUzLCAxNywgMTAsIDEsIDI0NiwgNzEsIDQwLCAxNywgCi0gICAgMTAsIDEsIDI0OCwgMTMxLCA1MywgMTcsIDEwLCAxLCAyNDgsIDEzMSwgNDAsIDE3LCAxMCwgMSwgMjM1LCAxMjEsIDUzLCAKLSAgICAxNywgMTAsIDEsIDIzNSwgMTIxLCA0MCwgMTcsIDEwLCAxLCAyMjIsIDE3MiwgNTMsIDE3LCAxMCwgMSwgMjIyLCAxNzIsIAotICAgIDQwLCAxNywgMTAsIDEsIDIzNCwgMTc1LCA1MywgMTcsIDEwLCAxLCAyMzQsIDE3NSwgNDAsIDE3LCAxMCwgMSwgMjM0LCAKLSAgICAxNzUsIDY1LCAxNywgMTAsIDEsIDIzNCwgMTc1LCAxNDcsIDE3LCAxMCwgMSwgMjQzLCAxMjMsIDUzLCAxNywgMTAsIDEsIAotICAgIDI0MywgMTIzLCA0MCwgMTcsIDEwLCAxLCAyNDMsIDEyMywgNjUsIDE3LCAxMCwgMSwgMjQzLCAxMjMsIDE0NywgMTcsIDEwLCAKLSAgICAxLCAyNDIsIDEwMiwgNTMsIDE3LCAxMCwgMSwgMjQyLCAxMDIsIDQwLCAxNywgMTAsIDEsIDI0MiwgMTAyLCA2NSwgMTcsIAotICAgIDEwLCAxLCAyNDIsIDEwMiwgMTQ3LCAxNywgMTAsIDEsIDIyOSwgMywgNTMsIDE3LCAxMCwgMSwgMjI5LCAzLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyMjksIDMsIDY1LCAxNywgMTAsIDEsIDIyOSwgMywgMTQ3LCAxNywgMTAsIDEsIDIyOCwgNjMsIDI0MiwgMjE5LCAKLSAgICA1MywgMTcsIDEwLCAxLCAyMjgsIDYzLCAyNDIsIDIxOSwgNDAsIDE3LCAxMCwgMSwgMjIyLCAyMTUsIDUzLCAxNywgMTAsIDEsIAotICAgIDIyMiwgMjE1LCA0MCwgMTcsIDEwLCAxLCAyMjIsIDIxNSwgNjUsIDE3LCAxMCwgMSwgMjIyLCAyMTUsIDE0NywgMTcsIDEwLCAKLSAgICAxLCAyNDEsIDIxOSwgMiwgNzksIDc3LCA1MywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMiwgNzksIDc3LCA0MCwgMTcsIDEwLCAKLSAgICAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyNDIsIDE3MiwgNDAsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0MiwgMTcyLCA2NSwgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQyLCAxNzIsIDE0NywgMTcsIDEwLCAxLCAKLSAgICAyNDEsIDIxOSwgMjQ3LCAxNDIsIDUzLCAxNywgMTAsIDEsIDI0MSwgMjE5LCAyNDcsIDE0MiwgNDAsIDE3LCAxMCwgMSwgCi0gICAgMjQxLCAyMTksIDI0NywgMTQyLCA2NSwgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMjQ3LCAxNDIsIDE0NywgMTcsIDEwLCAxLCAKLSAgICA3OSwgMjUyLCAxMzMsIDUzLCAxNywgMTAsIDEsIDc5LCAyNTIsIDEzMywgNDAsIDE3LCAxMCwgMSwgNzksIDI1MiwgMTMzLCAKLSAgICAyLCAyMDIsIDc3LCA1MywgMTcsIDEwLCAxLCA3OSwgMjUyLCAxMzMsIDIsIDIwMiwgNzcsIDQwLCAxNywgMTAsIDE2LCA1OSwgCi0gICAgNDgsIDEwLCAxNiwgNTksIDUxLCAxMCwgMTYsIDExMywgMTcwLCA0OCwgMTAsIDE2LCAxMTMsIDE3MCwgNTEsIDEwLCAxNiwgCi0gICAgMTM0LCAxNzAsIDQ4LCAxMCwgMTYsIDEzNCwgMTcwLCA1MSwgMTAsIDE2LCAxMzQsIDE3MCwgMjI1LCA3LCAyNDYsIDEwNCwgCi0gICAgNDgsIDEwLCAxNiwgMTM0LCAxNzAsIDIyNSwgNywgMjQ2LCAxMDQsIDUxLCAxMCwgMTYsIDI0NCwgMTEsIDE3MCwgNDgsIDEwLCAKLSAgICAxNiwgMjQ0LCAxMSwgMTcwLCA1MSwgMTAsIDE2LCA1MiwgNjcsIDI1MiwgMTQxLCA1MSwgMTAsIDE2LCAxMTMsIDE3MCwgCi0gICAgMjEzLCAxODksIDQ4LCAxMCwgMTYsIDExMywgMTcwLCAyMTMsIDE4OSwgNTEsIDEwLCAxNiwgMjIyLCAyMzMsIDEwLCAxNiwgCi0gICAgNCwgMjE3LCA4MSwgNDgsIDEwLCAxNiwgNCwgMjE3LCA4MSwgNTEsIDEwLCAxLCAyMjksIDgwLCA1MywgMTcsIDEwLCAxLCAKLSAgICAyMjksIDgwLCA0MCwgMTcsIDEwLCAxLCAyMjksIDgwLCA2NSwgMTcsIDEwLCAxLCAyMjksIDgwLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMTA0LCA1MywgMTcsIDEwLCAxLCAxMDQsIDQwLCAxNywgMTAsIDEsIDIyNiwgMjM1LCA1MywgMTcsIDEwLCAxLCAyMjYsIAotICAgIDIzNSwgNDAsIDE3LCAxMCwgMSwgMjEwLCAyMTMsIDUzLCAxNywgMTAsIDEsIDIxMCwgMjEzLCA0MCwgMTcsIDEwLCAxLCAKLSAgICAxMDQsIDIsIDIwMiwgNzcsIDUzLCAxNywgMTAsIDEsIDIxNCwgMCwgNTMsIDE3LCAxMCwgMSwgMjE0LCAwLCA0MCwgMTcsIAotICAgIDEwLCAxLCAyMzQsIDczLCAyMjYsIDIzNSwgNTMsIDE3LCAxMCwgMSwgMjM0LCA3MywgMjI2LCAyMzUsIDQwLCAxNywgMTAsIAotICAgIDEsIDIzNCwgNzMsIDIxMCwgMjEzLCA1MywgMTcsIDEwLCAxLCAyMzQsIDczLCAyMTAsIDIxMywgNDAsIDE3LCAxMCwgMSwgCi0gICAgMTYwLCA1MywgMTcsIDEwLCAxLCAxNjAsIDQwLCAxNywgMTAsIDEsIDE2MCwgNjUsIDE3LCAxMCwgMSwgMTYwLCAxNDcsIDE3LCAKLSAgICAxMCwgMSwgMjE0LCAyMDcsIDIzNCwgMTg2LCAyMzQsIDczLCAxMTIsIDIzMSwgMTkzLCA2NSwgMTcsIDEwLCAxLCAyMTQsIAotICAgIDIwNywgMjM0LCAxODYsIDIzNCwgNzMsIDExMiwgMjMxLCAxOTMsIDE0NywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIAotICAgIDIsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxMTIsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgCi0gICAgMjAyLCA3NywgMiwgMjU0LCAyNDQsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjU0LCAyNDQsIDQwLCAKLSAgICAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjEyLCAzMSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAKLSAgICAyLCAyMTIsIDMxLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDEwNCwgNTMsIDE3LCAxMCwgMjcsIDc5LCAKLSAgICAyLCAyMDIsIDc3LCAyLCAxMDQsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjI2LCAyMzUsIDUzLCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjI2LCAyMzUsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgCi0gICAgMjEwLCAyMTMsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjEwLCAyMTMsIDQwLCAxNywgMTAsIDI3LCAKLSAgICA3OSwgMiwgMjAyLCA3NywgMiwgMTYwLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE2MCwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAxNjAsIDY1LCAxNywgMTAsIDI3LCAyMTQsIDIwNywgMjM0LCA3MywgNzksIDIsIAotICAgIDIwMiwgNzcsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMTQsIDIwNywgMjM0LCA3MywgNzksIDIsIDIwMiwgCi0gICAgNzcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMTQsIDIwNywgMjM0LCA3MywgNzksIDIsIDIwMiwgNzcsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDY1LCAxNywgMTAsIDEsIDI0NCwgMTY4LCA3OSwgNTMsIDE3LCAxMCwgMSwgMjQ0LCAxNjgsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAxLCAyNDQsIDE2OCwgNzksIDY1LCAxNywgMTAsIDEsIDI0NCwgMTY4LCA3OSwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDEyMiwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjUyLCA1NSwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjUyLCAKLSAgICA1NSwgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgCi0gICAgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDIzNCwgCi0gICAgMTMwLCA1MywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTEyLCAyMzEsIAotICAgIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgMTUxLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDExMiwgMjMxLCAxOTMsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyMTYsIDE5MywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAxNTEsIDIsIDEyMiwgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDE1MSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAxMjIsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNjYsIAotICAgIDUzLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDEyMiwgNTMsIAotICAgIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAxNTEsIDUzLCAxNywgCi0gICAgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgMTMwLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjIyLCAyNywgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjQ4LCAKLSAgICAyMTcsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDI0OCwgCi0gICAgMjE3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIAotICAgIDY2LCA1MywgMTcsIDEwLCAyNywgMjEwLCAxMTIsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDE1MSwgCi0gICAgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0MiwgMjQ1LCAyLCAxNTEsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMTUxLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDI0NCwgMTQzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgMTIyLCA1MywgMTcsIDEwLCAKLSAgICAyNywgMjI0LCA4MiwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjQsIDgyLCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIAotICAgIDEwLCAyNywgMjI0LCA4MiwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjM0LCAyNTEsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMjIsIDUzLCAxNywgMTAsIDI3LCAyMzQsIAotICAgIDI1MSwgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAxMDMsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzQsIDI1MSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgCi0gICAgMjcsIDIzNCwgMjUxLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMzMsIDEwMywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIAotICAgIDI3LCAyMzMsIDEwMywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIAotICAgIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgNTMsIDE3LCAxMCwgMjcsIDY2LCAyLCA2NiwgNTMsIDE3LCAKLSAgICAxMCwgMjcsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgNjYsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjI4LCA2MywgMiwgMTUxLCA1MywgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgMjI4LCAKLSAgICA2MywgMiwgMjM0LCAxMzAsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA2NiwgNTMsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIAotICAgIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI0MSwgCi0gICAgMjE5LCAyLCAxNTEsIDUzLCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAKLSAgICAxNTEsIDUzLCAxNywgMTAsIDI3LCA3OSwgMiwgMTIyLCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDIzNCwgMTMwLCA1MywgMTcsIAotICAgIDEwLCAyNywgNzksIDIsIDY2LCA1MywgMTcsIDEwLCAyNywgNzksIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAKLSAgICA3OSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMTYsIDIwMywgMiwgMjE4LCAyMywgMTEyLCA1MywgMTcsIDEwLCAyNywgCi0gICAgMjIzLCA5NiwgMiwgMjE4LCAyMywgMTEyLCA1MywgMTcsIDEwLCAyNywgMTEyLCAyMzEsIDE5MywgMiwgMjE4LCAyMywgMTEyLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgMjQ4LCAxODMsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyMzQsIAotICAgIDIwNCwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDI0NCwgMTY2LCA1MywgMTcsIDEwLCAyNywgMjIwLCA5NCwgMiwgCi0gICAgMjQ4LCAxODUsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDk0LCAyLCAyMzQsIDIwNiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIAotICAgIDIsIDIxOCwgMjMsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDY2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDIyOCwgNjMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCAKLSAgICA3NywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA3OSwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDIyMywgOTYsIDQwLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDI1MiwgNTUsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIxNywgOCwgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjEwLCAxMDksIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjE3LCA4LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA3OSwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDIxNiwgMTkzLCAyLCAyMjMsIDk2LCA0MCwgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjE2LCAxOTMsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjE2LCAxOTMsIDIsIDIyOCwgNjMsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMTYsIDE5MywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIAotICAgIDc5LCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDExMiwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAyMzMsIAotICAgIDEwMywgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIAotICAgIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgMTEyLCA0MCwgMTcsIDEwLCAyNywgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjI4LCA2MywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDIxMCwgMTA5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyMjgsIDYzLCA0MCwgMTcsIDEwLCAKLSAgICAyNywgMjI4LCA2MywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMTEyLCAyMzEsIDE5MywgMiwgMjE4LCAyMywgMTEyLCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIyMywgOTYsIAotICAgIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMjEwLCAxMDksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDQwLCAxNywgMTAsIAotICAgIDI3LCA3OSwgMiwgMjI4LCA2MywgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgNzksIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDIwMiwgNzcsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAKLSAgICAyMDIsIDc3LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIAotICAgIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMjAyLCA3NywgMiwgMjQxLCAyMTksIAotICAgIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNTIsIDU1LCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyNTIsIDU1LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjUyLCA1NSwgMiwgMjQxLCAyMTksIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIAotICAgIDIxNywgOCwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIxNywgCi0gICAgOCwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjE2LCAxOTMsIAotICAgIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMTUxLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAxNTEsIDIsIDY2LCA2NSwgMTcsIAotICAgIDEwLCAyNywgMTIyLCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAxMjIsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjM0LCAKLSAgICAxMzAsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAKLSAgICAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIAotICAgIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgCi0gICAgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAKLSAgICA2NiwgNjUsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMTIyLCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDY2LCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjEwLCAxMTIsIDIsIDY2LCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjU0LCAxOTcsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDI0MiwgMjQ1LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAKLSAgICAyNDQsIDE0MywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDI0NCwgCi0gICAgMTQzLCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDI0NCwgMTQzLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyNCwgCi0gICAgODIsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIAotICAgIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIzNCwgMjUxLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjM0LCAKLSAgICAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAxMDMsIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgCi0gICAgNjYsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDEyMiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCA2NiwgCi0gICAgNjUsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAxNTEsIDY1LCAKLSAgICAxNywgMTAsIDI3LCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgCi0gICAgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgCi0gICAgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAKLSAgICA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIAotICAgIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI0MSwgMjE5LCAyLCAyMTgsIAotICAgIDIzLCAxMTIsIDY1LCAxNywgMTAsIDI3LCA3OSwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgNzksIDIsIDEyMiwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDc5LCAyLCAyMzQsIDEzMCwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDc5LCAKLSAgICAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDc5LCAyLCAyMDIsIDc3LCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCA3OSwgCi0gICAgMiwgMjAyLCA3NywgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjUyLCA1NSwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjUyLCA1NSwgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMTcsIDgsIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIDIxNiwgMTkzLCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMTYsIDE5MywgMiwgMjQxLCAyMTksIDE0NywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMSwgMTY3LCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI3LCAyMjAsIDYwLCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgMjMzLCAxMDMsIDE0NywgCi0gICAgMTcsIDEwLCAyNywgMjM0LCAyNTEsIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCA2NiwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCAyMjgsIDYzLCAyLCA2NiwgMTQ3LCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAyNDEsIDIxOSwgMTQ3LCAxNywgCi0gICAgMTAsIDI3LCA3OSwgMiwgNjYsIDE0NywgMTcsIDEwLCAyNywgNzksIDIsIDI0MSwgMjE5LCAxNDcsIDE3LCAxMCwgMjcsIAotICAgIDIyMCwgOTQsIDIsIDI0NCwgMTY2LCAxNDcsIDE3LCAxMCwgMjcsIDIyMCwgOTQsIDIsIDI0OCwgMTg1LCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMCwgOTQsIDIsIDIzNCwgMjA2LCAxNDcsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDExMiwgMjMxLCAxOTMsIDUzLCAKLSAgICAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCAxMTIsIDIzMSwgMTkzLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDExMiwgMjMxLCAKLSAgICAxOTMsIDUzLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTEyLCAKLSAgICAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIAotICAgIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDEyMiwgMiwgCi0gICAgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDEyMiwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAxNTEsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAxNTEsIDIsIDc5LCA1MywgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDExMiwgCi0gICAgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDI3LCAyMzQsIDEzMCwgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA1MywgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNzksIDUzLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgCi0gICAgMiwgMTEyLCAyMzEsIDE5MywgNTMsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCA3OSwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgCi0gICAgNjAsIDIsIDE1MSwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgNTMsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIAotICAgIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDUzLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAKLSAgICAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIyMywgOTYsIDUzLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAKLSAgICAyLCAyMjMsIDk2LCA1MywgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDIyMywgOTYsIDUzLCAxNywgMTAsIDI3LCAyMTcsIAotICAgIDgxLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyNTQsIDE5NywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA3OSwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDI0MiwgMjQ1LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjIxLCAxNjcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNzksIAotICAgIDQwLCAxNywgMTAsIDI3LCAxMjIsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAxMjIsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMTUxLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMTUxLCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDIzNCwgMTMwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjM0LCAxMzAsIDIsIDc5LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyMiwgMjcsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjQ4LCAyMTcsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgCi0gICAgNzksIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDQwLCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAyMzQsIDEzMCwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDY2LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCAyMjMsIDk2LCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgMjIzLCA5NiwgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMjMsIDk2LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCA2NiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDIyMSwgMTY3LCAyLCAyNDEsIDIxOSwgNjUsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDI0MSwgMjE5LCA2NSwgMTcsIAotICAgIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTUxLCAxNDcsIDE3LCAxMCwgCi0gICAgMjcsIDIyMSwgMTY3LCAyLCAxMjIsIDE0NywgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDIzNCwgMTMwLCAxNDcsIDE3LCAKLSAgICAxMCwgMjcsIDIyMCwgNjAsIDIsIDE1MSwgMTQ3LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxMjIsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjIwLCA2MCwgMiwgMjM0LCAxMzAsIDE0NywgMTcsIDEwLCAyNywgMjE3LCA4MSwgMiwgNjYsIDE0NywgMTcsIDEwLCAKLSAgICAyNywgMjEwLCAxMTIsIDIsIDY2LCAxNDcsIDE3LCAxMCwgMjcsIDExMiwgMiwgMjQ0LCAxNjQsIDQwLCAxNywgMTAsIDI3LCAKLSAgICAxMTIsIDIsIDI0NCwgMTY0LCA1MywgMTcsIDIyNiwgMTQ2LCA0MywgMjI2LCAzLCAyMjYsIDE0NiwgNDQsIDIyNiwgMywgMTAsIAotICAgIDI3LCAyMTcsIDgsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDEyMiwgMiwgMTUxLCA0MCwgCi0gICAgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTIyLCAyLCAKLSAgICA2NiwgNjUsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAKLSAgICAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjE3LCA4LCAyLCA2NiwgMiwgMjM0LCAxMzAsIDY1LCAxNywgMTAsIDI3LCAxNTEsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAxNTEsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAxMjIsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDEyMiwgMiwgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTIyLCAKLSAgICAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMTUxLCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMjEsIAotICAgIDE2NywgMiwgMTUxLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAyLCAxMjIsIAotICAgIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAyLCA2NiwgCi0gICAgMiwgMTUxLCA2NSwgMTcsIDEwLCAyNywgMjIxLCAxNjcsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyMSwgMTY3LCAKLSAgICAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAxMjIsIDIsIDEyMiwgNDAsIDE3LCAxMCwgMjcsIAotICAgIDIyMiwgMjcsIDIsIDEyMiwgMiwgMTIyLCA2NSwgMTcsIDEwLCAyNywgMjIyLCAyNywgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDIyMCwgNjAsIDIsIDEyMiwgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMjAsIDYwLCAyLCAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIAotICAgIDIsIDIzNCwgMTMwLCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDIsIDIzNCwgMTMwLCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjIwLCA2MCwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjIwLCA2MCwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjQ4LCAyMTcsIDIsIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAyMzQsIAotICAgIDEzMCwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyNDgsIDIxNywgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgCi0gICAgMjE3LCA4MSwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCAxMCwgMjcsIDIxNywgODEsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMTcsIDgxLCAyLCA2NiwgMiwgNzksIDQwLCAKLSAgICAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgMTUxLCAyLCA2NiwgNDAsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgMiwgCi0gICAgNjYsIDQwLCAxNywgMTAsIDI3LCAyNTQsIDE5NywgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjU0LCAxOTcsIDIsIAotICAgIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjQyLCAyNDUsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCAxMCwgCi0gICAgMjcsIDI0MiwgMjQ1LCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyNDIsIDI0NSwgMiwgNjYsIDIsIDExMiwgMjMxLCAKLSAgICAxOTMsIDQwLCAxNywgMTAsIDI3LCAyNDQsIDE0MywgMiwgMjM0LCAxMzAsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAKLSAgICAxNDMsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjQsIDgyLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTIyLCAyLCA2NiwgCi0gICAgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIAotICAgIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDE1MSwgNjUsIDE3LCAKLSAgICAxMCwgMjcsIDIzMywgMTAzLCAyLCAxNTEsIDIsIDE1MSwgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAyMzQsIDEzMCwgCi0gICAgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMjM0LCAxMzAsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjMzLCAKLSAgICAxMDMsIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIDIsIDEyMiwgNjUsIDE3LCAxMCwgCi0gICAgMjcsIDY2LCAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgNjYsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgMTUxLCAyLCAxMjIsIDY1LCAxNywgMTAsIAotICAgIDI3LCA2NiwgMiwgMTUxLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAyMzQsIDEzMCwgMiwgMTUxLCA2NSwgMTcsIAotICAgIDEwLCAyNywgNjYsIDIsIDIzNCwgMTMwLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDY2LCAyLCAxNTEsIDIsIDIzNCwgMTMwLCAKLSAgICA2NSwgMTcsIDEwLCAyNywgMjQxLCAyMTksIDIsIDY2LCAyLCAxNTEsIDY1LCAxNywgMTAsIDI3LCAyNDEsIDIxOSwgMiwgNjYsIAotICAgIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIAotICAgIDIsIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAxMCwgMjcsIDIyOCwgNjMsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgCi0gICAgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDY2LCA2NSwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCAxMTIsIAotICAgIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgCi0gICAgMiwgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAKLSAgICAyNywgNzksIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI1MiwgNTUsIDIsIDIzNCwgMTMwLCAyLCA3OSwgNDAsIAotICAgIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIxNywgOCwgMiwgMTUxLCAyLCAKLSAgICAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCAyMzQsIDEzMCwgMiwgNzksIDQwLCAxNywgMTAsIAotICAgIDI3LCAyMTcsIDgsIDIsIDIzNCwgMTMwLCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgMjE3LCA4LCAyLCA2NiwgCi0gICAgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMTcsIDgsIDIsIDY2LCAyLCAxMTIsIDIzMSwgMTkzLCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMTUxLCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAxNTEsIDIsIDEyMiwgMiwgMTEyLCAyMzEsIDE5MywgNDAsIDE3LCAKLSAgICAxMCwgMjcsIDE1MSwgMiwgNjYsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjM0LCAKLSAgICAxMzAsIDIsIDExMiwgMjMxLCAxOTMsIDQwLCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCAxMjIsIDIsIDc5LCA0MCwgMTcsIAotICAgIDEwLCAyNywgMjIwLCA2MCwgMiwgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI0OCwgMjE3LCAyLCAxMjIsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgNjYsIAotICAgIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgNzksIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA3OSwgMiwgMTUxLCAyLCAKLSAgICA3OSwgNDAsIDE3LCAxMCwgMjcsIDc5LCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCA2NiwgMiwgNjYsIDIsIDc5LCAKLSAgICA0MCwgMTcsIDEwLCAyNywgMjI0LCA4MiwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTIyLCAKLSAgICAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyNCwgODIsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgMTAsIDI3LCAyMzMsIDEwMywgCi0gICAgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCAxMCwgMjcsIDI1NCwgMTk3LCAyLCA2NiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAKLSAgICAyMzQsIDI1MSwgMiwgNjYsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgMTUxLCAyLCAxMjIsIDY1LCAxNywgCi0gICAgMTAsIDI3LCA2NiwgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgMiwgNjYsIAotICAgIDY1LCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDE1MSwgCi0gICAgMiwgNjYsIDQwLCAxNywgMTAsIDI3LCAyMjgsIDYzLCAyLCAxNTEsIDIsIDEyMiwgNDAsIDE3LCAxMCwgMjcsIDE1MSwgMiwgCi0gICAgMTIyLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDEyMiwgMiwgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDY2LCAyLCAKLSAgICAxNTEsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjQ0LCAxNDMsIDIsIDY2LCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDI1MiwgCi0gICAgNTUsIDIsIDEyMiwgMiwgNzksIDQwLCAxNywgMTAsIDI3LCAyMzQsIDI1MSwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDEwLCAKLSAgICAyNywgMjU0LCAxOTcsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgMTAsIDI3LCAyMjIsIDI3LCAyLCA2NiwgMiwgNjYsIDY1LCAKLSAgICAxNywgMTAsIDI3LCAyMjEsIDE2NywgMiwgMjM0LCAxMzAsIDIsIDc5LCA0MCwgMTcsIDEwLCAyNywgMjI4LCA2MywgMiwgCi0gICAgMTUxLCAyLCA3OSwgNDAsIDE3LCAxMCwgMjcsIDIyMiwgNCwgMjE0LCAxMjgsIDI1MywgMjM4LCAyMzQsIDQsIDIxOCwgMTMwLCAKLSAgICA1LCA1MywgMTcsIDEwLCAyNywgMjI0LCA3OCwgMjE0LCAxMjgsIDI1MywgMjM4LCAyMzQsIDQsIDIxOCwgMTMwLCA1LCA1MywgCi0gICAgMTcsIDEwLCAyNywgMjU0LCAxNTMsIDUzLCAxNywgMTAsIDI3LCAyNTQsIDE4MywgNTMsIDE3LCAxMCwgMjcsIDIzMCwgMTUzLCAKLSAgICA1MywgMTcsIDEwLCAyNywgMjIyLCA1LCA1MywgMTcsIDEwLCAyNywgMjIzLCAxNDMsIDUzLCAxNywgMTAsIDI3LCAyNTQsIAotICAgIDE3MiwgNTMsIDE3LCAxMCwgMjcsIDIxMiwgNDksIDUzLCAxNywgMTAsIDI3LCAyMjIsIDQsIDUzLCAxNywgMTAsIDI3LCAKLSAgICAyMjIsIDMsIDI1NCwgMTcyLCAyMTIsIDQ4LCAxMCwgMjcsIDIzNSwgMTM0LCAyMjMsIDM0LCA1MCwgMTAsIDI3LCAyNTEsIAotICAgIDIzMCwgMjU0LCAzOSwgMjU0LCA0MCwgNDUsIDIyMSwgMTU2LCA0NSwgMjIxLCA0NSwgNDUsIDIyMCwgMjMzLCA0NSwgMjIwLCAKLSAgICAyMjIsIDQ1LCAyMjAsIDIxMSwgNDUsIDIyMCwgMjAwLCA0NSwgMjIwLCAxODksIDQ1LCAyMjAsIDE3OCwgNDUsIDIyMCwgCi0gICAgMTY3LCA0NSwgMjIxLCAxNTUsIDQ1LCAyMjEsIDE0NCwgNDUsIDIyMSwgMTMzLCA0NSwgMjIxLCAxMjIsIDQ1LCAyMjEsIAotICAgIDExMSwgNDUsIDIyMSwgMTAwLCA0NSwgMjIxLCA4OSwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ5LCAyMTksIDIyNCwgCi0gICAgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDEwOSwgMjQ5LCAyMTksIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDEwOSwgMjQzLCAKLSAgICAyMjksIDIxOCwgMTI5LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyNDksIDIyNiwgMjI0LCAxOTQsIDI0NCwgMjAsIAotICAgIDMxLCA2NywgMjIwLCAxNTAsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0NSwgMzEsIDc4LCAyMjQsIDE5NCwgMjQ0LCAKLSAgICAyMCwgMzEsIDY3LCAyMjQsIDEzLCA3OCwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIDcxLCAyMzMsIDIwLCAxMjcsIAotICAgIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA3MSwgMjMzLCAyMCwgMjUxLCAxNTYsIDIyNCwgMTk0LCAyNDQsIDIwLCAKLSAgICAzMSwgNjcsIDIwMywgMjQ1LCAxNjMsIDM4LCAyNywgNDMsIDI0MiwgMjcsIDM4LCAyNywgNDQsIDI0MiwgMjcsIDM4LCA1MiwgCi0gICAgMjE2LCA4OSwgNDMsIDI0MiwgMjcsIDM4LCA1MiwgMjE2LCA4OSwgNDQsIDI0MiwgMjcsIDM4LCAyMzEsIDIzMywgNDMsIAotICAgIDI0MiwgMjcsIDM4LCAyMzEsIDIzMywgNDQsIDI0MiwgMjcsIDM4LCAyNDksIDE5NywgMjMxLCAyMzIsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDExMywgNTksIDIzMywgNTYsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDI0NSwgMTYwLCAKLSAgICAyNDgsIDE1NiwgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgMjQ1LCAxNTEsIDI0OCwgMTU2LCAyMjQsIDE5NCwgMjQ0LCAKLSAgICAyMCwgMzEsIDY3LCAxMjEsIDIzMiwgMjEzLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAyMTIsIDMyLCAxMjEsIDIzMiwgCi0gICAgMjEzLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgMjI2LCAzLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCAKLSAgICA0NCwgMjI2LCAzLCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgMjQ5LCA5OSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAKLSAgICAyMCwgMzEsIDY3LCA0NCwgMjQ5LCA5OSwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgMjE2LCA2LCAyMjAsIAotICAgIDUzLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCAyMTYsIDYsIDIyMCwgNTMsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDMsIDg1LCAyMzMsIDIwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA4NSwgCi0gICAgMjMzLCAyMCwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0MywgNTIsIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAKLSAgICAyNDQsIDIwLCAzMSwgNjcsIDQ0LCA1MiwgMjU0LCAxMTAsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDMsIAotICAgIDI1NCwgMTEwLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQ0LCAyNTQsIDExMCwgMTI3LCAyMjQsIDE5NCwgCi0gICAgMjQ0LCAyMCwgMzEsIDY3LCA0MywgMjQ5LCAxNjEsIDEyNywgMjI0LCAxOTQsIDI0NCwgMjAsIDMxLCA2NywgNDQsIDI0OSwgCi0gICAgMTYxLCAxMjcsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA3MSwgMjQ5LCAxNjEsIDEyNywgMjI0LCAxOTQsIAotICAgIDI0NCwgMjAsIDMxLCA2NywgNDQsIDcxLCAyNDksIDE2MSwgMTI3LCAyMjAsIDEzMSwgMjQ3LCAxMjAsIDcxLCAyMjAsIDEzMSwgCi0gICAgMjQ3LCAxMjAsIDIyNCwgMTk0LCAyNDQsIDIwLCAzMSwgNjcsIDQzLCA0MiwgMTI3LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIAotICAgIDY3LCA0NCwgNDIsIDEyNywgMjQ4LCAxNTUsIDIyNiwgMTE5LCAyNTAsIDE3MiwgMjI2LCAxMTksIDIxMiwgMzIsIDIyNiwgCi0gICAgMTE5LCA1MiwgMjEyLCAzMiwgMjI2LCAxMTksIDI0OCwgMTU1LCAxMjEsIDIzMiwgMjEzLCAyNTAsIDE3MiwgMTIxLCAyMzIsIAotICAgIDIxMywgMjEyLCAzMiwgMTIxLCAyMzIsIDIxMywgNCwgMjQ5LCAyMTksIDQsIDEwOSwgMjQ5LCAyMTksIDQsIDI0MywgMjI5LCAKLSAgICAyMTgsIDEyOSwgNCwgMjIwLCAxNTAsIDQsIDI0OSwgMjI2LCA0LCAyMjQsIDEzLCA3OCwgNCwgMjQ1LCAzMSwgNzgsIDQsIAotICAgIDI0NSwgMTYwLCAyNDgsIDE1NiwgNCwgNDMsIDIyNiwgMywgNCwgNDQsIDIyNiwgMywgNCwgNDMsIDI0OSwgOTksIDEyNywgNCwgCi0gICAgNDQsIDI0OSwgOTksIDEyNywgNCwgNDMsIDIxNiwgNiwgMjIwLCA1MywgMTI3LCA0LCA0NCwgMjE2LCA2LCAyMjAsIDUzLCAKLSAgICAxMjcsIDQsIDU0LCA1MCwgNCwgMjU0LCAxMjYsIDQsIDI1MywgMjE2LCA0LCA5NiwgNTAsIDQsIDI0MCwgMTY3LCA0LCAyMzMsIAotICAgIDE1LCA1MCwgNCwgMjQyLCAxMzAsIDUwLCA0LCAyNDUsIDk4LCA1MCwgNCwgMjIzLCA1MCwgMjE5LCA0NiwgNCwgMjQ3LCAKLSAgICAxMzIsIDUwLCA0LCAyMjUsIDE4MiwgNTAsIDQsIDI0OSwgMjE3LCAyNTMsIDIwNiwgMTAsIDI0NCwgMTY0LCA1MywgMTcsIAotICAgIDEwLCAyMTcsIDQ0LCAyLCAyNDQsIDE2NCwgNDgsIDEwLCAyNDgsIDE4MywgNTMsIDE3LCAxMCwgMjE3LCA3OCwgMjQ0LCAxLCAKLSAgICAxMCwgMjM0LCAyMDQsIDUzLCAxNywgMTAsIDI0NCwgMTY2LCA1MywgMTcsIDEwLCAyNDQsIDE2NiwgMTQ3LCAxNywgMTAsIAotICAgIDI0OCwgMTg1LCA1MywgMTcsIDEwLCAyNDgsIDE4NSwgMTQ3LCAxNywgMTAsIDIzNCwgMjA2LCA1MywgMTcsIDEwLCAyMzQsIAotICAgIDIwNiwgMTQ3LCAxNywgMTAsIDIyMCwgOTQsIDUzLCAxNywgMTAsIDIyMCwgOTQsIDE0NywgMTcsIDEwLCAyMTgsIDQ2LCA1MywgCi0gICAgMTcsIDEwLCAyMTgsIDQ2LCAxNDcsIDE3LCAxMCwgMSwgMjAyLCA1MywgMTcsIDEwLCAxLCAxMTIsIDIsIDIzMSwgMjI4LCAKLSAgICA3NywgNTMsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMzEsIDIyOCwgNzcsIDQwLCAxNywgMTAsIDEsIDExMiwgMiwgMjAyLCA3NywgCi0gICAgNTMsIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxLCAyMTIsIDMxLCAyLCAyMDIsIDc3LCA1MywgCi0gICAgMTcsIDEwLCAxLCAyMTIsIDMxLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAxLCAxMTIsIDIsIDIwMiwgMjUyLCA0MywgNTMsIAotICAgIDE3LCAxMCwgMSwgMTEyLCAyLCAyMDIsIDI1MiwgNDMsIDQwLCAxNywgMTAsIDEsIDc5LCAyLCAyMDIsIDc3LCA1MywgMTcsIAotICAgIDEwLCAxLCA3OSwgMiwgMjAyLCA3NywgNDAsIDE3LCAxMCwgMSwgNzksIDIsIDIwMiwgNzcsIDY1LCAxNywgMTAsIDEsIDc5LCAKLSAgICAyLCAyMDIsIDc3LCAxNDcsIDE3LCAxMCwgMSwgMTEyLCA1MywgMTcsIDEwLCAxLCAxMTIsIDQwLCAxNywgMTAsIDEsIDI1MiwgCi0gICAgNTUsIDUzLCAxNywgMTAsIDEsIDI1MiwgNTUsIDQwLCAxNywgMTAsIDEsIDI1MiwgNTUsIDY1LCAxNywgMTAsIDEsIDI1MiwgCi0gICAgNTUsIDE0NywgMTcsIDEwLCAxLCAyMTcsIDgsIDIzMSwgMTY1LCA1MywgMTcsIDEwLCAxLCAyMTcsIDgsIDIzMSwgMTY1LCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMTcsIDgsIDUzLCAxNywgMTAsIDEsIDIxNywgOCwgNDAsIDE3LCAxMCwgMSwgMjE3LCA4LCA2NSwgCi0gICAgMTcsIDEwLCAxLCAyMTcsIDgsIDE0NywgMTcsIDEwLCAxLCAyMTYsIDE5MywgNTMsIDE3LCAxMCwgMSwgMjE2LCAxOTMsIDQwLCAKLSAgICAxNywgMTAsIDEsIDIxNiwgMTkzLCA2NSwgMTcsIDEwLCAxLCAyMTYsIDE5MywgMTQ3LCAxNywgMTAsIDEsIDE1MSwgNTMsIAotICAgIDE3LCAxMCwgMSwgMTUxLCA0MCwgMTcsIDEwLCAxLCAxNTEsIDY1LCAxNywgMTAsIDEsIDE1MSwgMTQ3LCAxNywgMTAsIDEsIAotICAgIDEyMiwgNTMsIDE3LCAxMCwgMSwgMTIyLCA0MCwgMTcsIDEwLCAxLCAxMjIsIDY1LCAxNywgMTAsIDEsIDEyMiwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIzNCwgMTMwLCA1MywgMTcsIDEwLCAxLCAyMzQsIDEzMCwgNDAsIDE3LCAxMCwgMSwgMjM0LCAxMzAsIDY1LCAKLSAgICAxNywgMTAsIDEsIDIzNCwgMTMwLCAxNDcsIDE3LCAxMCwgMSwgMjQ4LCAxOTYsIDUzLCAxNywgMTAsIDEsIDI0OCwgMTk2LCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMTYsIDIwMywgNTMsIDE3LCAxMCwgMSwgMjE2LCAyMDMsIDQwLCAxNywgMTAsIDEsIDIyMywgOTYsIAotICAgIDUzLCAxNywgMTAsIDEsIDIyMywgOTYsIDQwLCAxNywgMTAsIDEsIDIxMCwgMTA5LCA1MywgMTcsIDEwLCAxLCAyMTAsIDEwOSwgCi0gICAgNDAsIDE3LCAxMCwgMSwgMjIxLCAxNjcsIDUzLCAxNywgMTAsIDEsIDIyMSwgMTY3LCA0MCwgMTcsIDEwLCAxLCAyMjEsIAotICAgIDE2NywgNjUsIDE3LCAxMCwgMSwgMjIxLCAxNjcsIDE0NywgMTcsIDEwLCAxLCAyMjAsIDYwLCA1MywgMTcsIDEwLCAxLCAKLSAgICAyMjAsIDYwLCA0MCwgMTcsIDEwLCAxLCAyMjAsIDYwLCA2NSwgMTcsIDEwLCAxLCAyMjAsIDYwLCAxNDcsIDE3LCAxMCwgMSwgCi0gICAgMjIyLCAyNywgNTMsIDE3LCAxMCwgMSwgMjIyLCAyNywgNDAsIDE3LCAxMCwgMSwgMjIyLCAyNywgNjUsIDE3LCAxMCwgMSwgCi0gICAgMjIyLCAyNywgMTQ3LCAxNywgMTAsIDEsIDI0OCwgMjE3LCA1MywgMTcsIDEwLCAxLCAyNDgsIDIxNywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjQ4LCAyMTcsIDY1LCAxNywgMTAsIDEsIDI0OCwgMjE3LCAxNDcsIDE3LCAxMCwgMSwgMjE3LCA4MSwgNTMsIDE3LCAKLSAgICAxMCwgMSwgMjE3LCA4MSwgNDAsIDE3LCAxMCwgMSwgMjE3LCA4MSwgNjUsIDE3LCAxMCwgMSwgMjE3LCA4MSwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIxMCwgMTEyLCA1MywgMTcsIDEwLCAxLCAyMTAsIDExMiwgNDAsIDE3LCAxMCwgMSwgMjEwLCAxMTIsIDY1LCAKLSAgICAxNywgMTAsIDEsIDIxMCwgMTEyLCAxNDcsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIDUzLCAxNywgMTAsIDEsIDI1NCwgMTk3LCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyNTQsIDE5NywgNjUsIDE3LCAxMCwgMSwgMjU0LCAxOTcsIDE0NywgMTcsIDEwLCAxLCAyNDIsIAotICAgIDI0NSwgNTMsIDE3LCAxMCwgMSwgMjQyLCAyNDUsIDQwLCAxNywgMTAsIDEsIDI0MiwgMjQ1LCA2NSwgMTcsIDEwLCAxLCAKLSAgICAyNDIsIDI0NSwgMTQ3LCAxNywgMTAsIDEsIDI0NCwgMTQzLCA1MywgMTcsIDEwLCAxLCAyNDQsIDE0MywgNDAsIDE3LCAxMCwgCi0gICAgMSwgMjQ0LCAxNDMsIDY1LCAxNywgMTAsIDEsIDI0NCwgMTQzLCAxNDcsIDE3LCAxMCwgMSwgMjI0LCA4MiwgNTMsIDE3LCAKLSAgICAxMCwgMSwgMjI0LCA4MiwgNDAsIDE3LCAxMCwgMSwgMjI0LCA4MiwgNjUsIDE3LCAxMCwgMSwgMjI0LCA4MiwgMTQ3LCAxNywgCi0gICAgMTAsIDEsIDIzNCwgMjUxLCA1MywgMTcsIDEwLCAxLCAyMzQsIDI1MSwgNDAsIDE3LCAxMCwgMSwgMjM0LCAyNTEsIDY1LCAKLSAgICAxNywgMTAsIDEsIDIzNCwgMjUxLCAxNDcsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIDUzLCAxNywgMTAsIDEsIDIzMywgMTAzLCAKLSAgICA0MCwgMTcsIDEwLCAxLCAyMzMsIDEwMywgNjUsIDE3LCAxMCwgMSwgMjMzLCAxMDMsIDE0NywgMTcsIDEwLCAxLCA2NiwgNTMsIAotICAgIDE3LCAxMCwgMSwgNjYsIDQwLCAxNywgMTAsIDEsIDY2LCA2NSwgMTcsIDEwLCAxLCA2NiwgMTQ3LCAxNywgMTAsIDEsIDIyOCwgCi0gICAgNjMsIDUzLCAxNywgMTAsIDEsIDIyOCwgNjMsIDQwLCAxNywgMTAsIDEsIDIyOCwgNjMsIDY1LCAxNywgMTAsIDEsIDIyOCwgCi0gICAgNjMsIDE0NywgMTcsIDEwLCAxLCAyNDEsIDIxOSwgNTMsIDE3LCAxMCwgMSwgMjQxLCAyMTksIDQwLCAxNywgMTAsIDEsIAotICAgIDI0MSwgMjE5LCA2NSwgMTcsIDEwLCAxLCAyNDEsIDIxOSwgMTQ3LCAxNywgMTAsIDEsIDIxMiwgMzEsIDUzLCAxNywgMTAsIAotICAgIDEsIDIxMiwgMzEsIDQwLCAxNywgMTAsIDEsIDExMiwgMjMxLCAxOTMsIDUzLCAxNywgMTAsIDEsIDExMiwgMjMxLCAxOTMsIAotICAgIDQwLCAxNywgMTAsIDEsIDc5LCA1MywgMTcsIDEwLCAxLCA3OSwgNDAsIDE3LCAxMCwgMSwgNzksIDY1LCAxNywgMTAsIDEsIAotICAgIDc5LCAxNDcsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIzMSwgMjI4LCA3NywgNTMsIDE3LCAxMCwgMjcsIAotICAgIDIzMywgMTAzLCAyLCAxMTIsIDIsIDIzMSwgMjI4LCA3NywgNDAsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAyLCAxMTIsIDIsIAotICAgIDIwMiwgNzcsIDUzLCAxNywgMTAsIDI3LCAyMzMsIDEwMywgMiwgMTEyLCAyLCAyMDIsIDc3LCA0MCwgMTcsIDEwLCAyNywgCi0gICAgMjMzLCAxMDMsIDIsIDExMiwgMiwgMjAyLCAyNTIsIDQzLCA1MywgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgMiwgCi0gICAgMjAyLCAyNTIsIDQzLCA0MCwgMTcsIDEwLCAyNywgMjMzLCAxMDMsIDIsIDExMiwgNTMsIDE3LCAxMCwgMjcsIDIzMywgMTAzLCAKLSAgICAyLCAxMTIsIDQwLCAxNywgMjEwLCA4NywgMjExLCAyNDUsIDIyOCwgNzMsIDIxOSwgMTgsIDEyNiwgMjQ1LCAzMSwgNzgsIAotICAgIDEyNiwgMjIzLCAyNTQsIDc4LCAxMjYsIDU0LCA1MCwgMTI2LCAyNDcsIDEzMiwgNTAsIDEyNiwgMjI1LCAxODIsIDUwLCAKLSAgICAxMjYsIDI1NCwgMTI2LCAxMjYsIDI1NCwgNTcsIDEyNiwgNDMsIDIyNiwgMywgMTI2LCA0NCwgMjI2LCAzLCAxMjYsIDI1MywgCi0gICAgMjE2LCAxMjYsIDk2LCA1MCwgMTI2LCAyNDksIDIxOSwgMTI2LCAyNDAsIDE2NywgMTI2LCAyNDMsIDIyOSwgMjE4LCAxMjksIAotICAgIDEyNiwgMjE5LCA0NiwgMTI2LCAyMSwgMjEwLCA4NiwgMTI2LCAyMSwgMTEwLCAxMjYsIDIxLCAxMDUsIDEyNiwgMjEsIDE1OCwgCi0gICAgMTI2LCAyMSwgMTYxLCAxMjYsIDIxLCAxODksIDEyNiwgMjEsIDE5NCwgMTI2LCAyMSwgMTk4LCAxMjYsIDIxLCAxOTUsIAotICAgIDEyNiwgMjEsIDIwMCwgMTI2LCAyNDksIDIyNiwgMTI2LCAyMjAsIDE1MCwgMTI2LCAyMzMsIDE1LCA1MCwgMTI2LCAyNDUsIAotICAgIDk4LCA1MCwgMTI2LCAyNDIsIDEzMCwgNTAsIDEyNiwgMjI0LCAxMywgNzgsIDEyNiwgMjQ5LCAyMTcsIDI1MywgMjA2LCAKLSAgICAxMjYsIDcsIDYsIDEsIDYxLCAxMjYsIDcsIDYsIDEsIDI1MywgMTU4LCAxMjYsIDcsIDYsIDEsIDI1MSwgNjYsIDEyNiwgNywgCi0gICAgNiwgMSwgMjQ5LCA2MCwgMTI2LCA3LCA2LCAxLCA3NSwgMTI2LCA3LCA2LCAxLCAyNDUsIDYsIDEyNiwgNywgNiwgMSwgMjQzLCAKLSAgICAyMDIsIDEyNiwgNywgNiwgMSwgMjQyLCA2MCwgMTI2LCA3LCA2LCAxLCA3MywgMTI2LCA3LCA2LCAxLCAyMzUsIDE0NCwgCi0gICAgMTI2LCA3LCA2LCAxLCAyMzUsIDIzLCAxMjYsIDcsIDYsIDEsIDE1NiwgMTI2LCA3LCA2LCAxLCAxOTMsIDEyNiwgNywgNiwgCi0gICAgMSwgMjMwLCAyNSwgMTI2LCA3LCA2LCAxLCA3NiwgMTI2LCA3LCA2LCAxLCAyMjYsIDEwNSwgMTI2LCA3LCA2LCAxLCAyMjQsIAotICAgIDk2LCAxMjYsIDcsIDYsIDEsIDE1MywgMTI2LCA3LCA2LCAxLCAyMjIsIDkxLCAxMjYsIDcsIDYsIDEsIDIxNywgMTUyLCAKLSAgICAxMjYsIDcsIDYsIDEsIDcwLCAxMjYsIDcsIDYsIDEsIDIxNCwgMTA1LCAxMjYsIDcsIDYsIDEsIDIxMiwgOTgsIDEyNiwgNywgCi0gICAgNiwgMSwgMjExLCAxNzgsIDEyNiwgNywgNiwgMSwgMjExLCAxMTcsIDEyNiwgNywgNiwgMSwgMjEwLCAxNTksIDEyNiwgNDMsIAotICAgIDQyLCAxMjcsIDEyNiwgMjIzLCA1MCwgMjE5LCA0NiwgMTI2LCA0NCwgNDIsIDEyNywgMTI2LCAyNTAsIDMxLCAyNTUsIDE0LCAKLSAgICAxMjYsIDEyMSwgMjMyLCAyMTMsIDEyNiwgMjQyLCAxMzcsIDI1NSwgMTQsIDEyNiwgNywgNCwgMSwgNjEsIDEyNiwgNywgNCwgCi0gICAgMSwgMjUzLCAxNTgsIDEyNiwgNywgNCwgMSwgMjUxLCA2NiwgMTI2LCA3LCA0LCAxLCAyNDksIDYwLCAxMjYsIDcsIDQsIDEsIAotICAgIDc1LCAxMjYsIDcsIDQsIDEsIDI0NSwgNiwgMTI2LCA3LCA0LCAxLCAyNDMsIDIwMiwgMTI2LCA3LCA0LCAxLCAyNDIsIDYwLCAKLSAgICAxMjYsIDcsIDQsIDEsIDczLCAxMjYsIDcsIDQsIDEsIDIzNSwgMTQ0LCAxMjYsIDcsIDQsIDEsIDIzNSwgMjMsIDEyNiwgNywgCi0gICAgNCwgMSwgMTU2LCAxMjYsIDcsIDQsIDEsIDE5MywgMTI2LCA3LCA0LCAxLCAyMzAsIDI1LCAxMjYsIDcsIDQsIDEsIDc2LCAKLSAgICAxMjYsIDcsIDQsIDEsIDIyNiwgMTA1LCAxMjYsIDcsIDQsIDEsIDIyNCwgOTYsIDEyNiwgNywgNCwgMSwgMTUzLCAxMjYsIDcsIAotICAgIDQsIDEsIDIyMiwgOTEsIDEyNiwgNywgNCwgMSwgMjE3LCAxNTIsIDEyNiwgNywgNCwgMSwgNzAsIDEyNiwgNywgNCwgMSwgCi0gICAgMjE0LCAxMDUsIDEyNiwgNywgNCwgMSwgMjEyLCA5OCwgMTI2LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA0LCAxLCAKLSAgICAyMTEsIDExNywgMTI2LCA3LCA0LCAxLCAyMTAsIDE1OSwgMTI2LCA0MywgMjQ5LCA5OSwgMTI3LCAxMjYsIDY3LCAyMzIsIAotICAgIDIxMywgMTI2LCA0NCwgMjQ5LCA5OSwgMTI3LCAxMjYsIDE4MiwgMTI2LCA0MywgNzEsIDIyNiwgMywgMTI2LCA0NCwgNzEsIAotICAgIDIyNiwgMywgMTAxLCAxMDksIDI0MywgMjI5LCAyMTgsIDEyOSwgMTAxLCA0MywgMjQ5LCAxNjEsIDEyNywgMTAxLCA0NCwgCi0gICAgMjQ5LCAxNjEsIDEyNywgMTAxLCAxMDksIDI0OSwgMjE5LCAxMDEsIDU2LCAyMzAsIDIyNCwgMjQ3LCAxMjAsIDEwMSwgNTYsIAotICAgIDEsIDIxMSwgMjI3LCAxMDEsIDU2LCAxLCA0LCA2MSwgMTAxLCA1NiwgMSwgNCwgNzMsIDEwMSwgNTYsIDEsIDQsIDcwLCAKLSAgICAxMDEsIDU2LCAxLCA0LCA3NSwgMTAxLCA1NiwgMSwgNCwgNzYsIDEwMSwgNTYsIDEsIDQsIDE5MSwgMTAxLCA1NiwgMSwgNCwgCi0gICAgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDQsIDIxMCwgMjQ0LCAxMDEsIDU2LCAxLCA0LCAyMTUsIDExOCwgMTAxLCAyMzQsIAotICAgIDIwMSwgMjI0LCAxNzMsIDIxOSwgMzEsIDc4LCAxMDEsIDU2LCAxLCA2MSwgMTAxLCA1NiwgMSwgNzMsIDEwMSwgNTYsIDEsIAotICAgIDcwLCAxMDEsIDU2LCAxLCA3NSwgMTAxLCA1NiwgMSwgNzYsIDEwMSwgNTYsIDEsIDE3NiwgMTAxLCA1NiwgMSwgMjM0LCA5MiwgCi0gICAgMTAxLCA1NiwgMSwgMjMzLCAyMTcsIDEwMSwgNTYsIDEsIDIzNCwgMTgyLCAxMDEsIDU2LCAxLCAyMzQsIDI4LCAxMDEsIDU2LCAKLSAgICAxLCAyMDYsIDEwMSwgNTYsIDEsIDIxOSwgMTkxLCAxMDEsIDU2LCAxLCAyMTgsIDgzLCAxMDEsIDU2LCAxLCAyMjEsIDE4MSwgCi0gICAgMTAxLCA1NiwgMSwgMjE5LCA1OCwgMTAxLCA1NiwgMSwgMjE3LCAxMDUsIDEwMSwgNTYsIDEsIDIxNiwgMTE3LCAxMDEsIDU2LCAKLSAgICAxLCAyMTUsIDExOCwgMTAxLCA1NiwgMSwgMjE3LCAyMiwgMTAxLCA1NiwgMSwgMTExLCAxMDEsIDU2LCAxLCAxOTcsIDEwMSwgCi0gICAgNTYsIDEsIDIyOCwgMjMzLCAxMDEsIDU2LCAxLCAyMjcsIDIzNywgMTAxLCA1NiwgMSwgMjI5LCAxMDcsIDEwMSwgNTYsIDEsIAotICAgIDIyOCwgNzQsIDEwMSwgNTYsIDEsIDE2MiwgMTAxLCA1NiwgMSwgMjQxLCAxODAsIDEwMSwgNTYsIDEsIDI0MCwgMjIyLCAKLSAgICAxMDEsIDU2LCAxLCAyNDEsIDIzOCwgMTAxLCA1NiwgMSwgMjQxLCA2OCwgMTAxLCA1NiwgMSwgMTg0LCAxMDEsIDU2LCAxLCAKLSAgICAyMzAsIDIzMCwgMTAxLCA1NiwgMSwgMjMwLCAxMDIsIDEwMSwgNTYsIDEsIDIzMSwgOTEsIDEwMSwgNTYsIDEsIDIzMCwgCi0gICAgMTYxLCAxMDEsIDU2LCAxLCAxOTEsIDEwMSwgNTYsIDEsIDIxMCwgMjEyLCAxMDEsIDU2LCAxLCAyMTAsIDI0NCwgMTAxLCAKLSAgICA1NiwgMSwgMjA1LCAxMDEsIDU2LCAxLCAyMjMsIDM1LCAxMDEsIDU2LCAxLCAyMjIsIDE0MCwgMTAxLCA1NiwgMSwgMjIzLCAKLSAgICAxMjgsIDEwMSwgNTYsIDEsIDIyMiwgMjExLCAxMDEsIDU2LCAxLCAyMTIsIDY1LCAxMDEsIDU2LCAxLCAyMzAsIDI1LCAxMDEsIAotICAgIDU2LCAyMTMsIDEzNSwgMjE5LCAzMSwgNzgsIDEwMSwgNTYsIDIyMCwgMTU1LCAyMTksIDMxLCA3OCwgMTAxLCAyNCwgMjQ0LCAKLSAgICAxMDMsIDEwMSwgMjQsIDEsIDIzNCwgNTgsIDEwMSwgMjQsIDEsIDIxOCwgMjE1LCAxMDEsIDI0LCAxLCAyMzQsIDUxLCAxMDEsIAotICAgIDI0LCAxLCAyMjgsIDIyNiwgMTAxLCAyNCwgMSwgMjI4LCAyMjQsIDEwMSwgMjQsIDEsIDIyOCwgMjIzLCAxMDEsIDI0LCAxLCAKLSAgICAyMTYsIDEwMSwgMTAxLCAyNCwgMSwgMjE4LCAyMDQsIDEwMSwgMjQsIDEsIDIyMywgMjYsIDEwMSwgMjQsIDEsIDIyMywgMjEsIAotICAgIDEwMSwgMjQsIDEsIDIyMywgMTgsIDEwMSwgMjQsIDEsIDIyMywgMTEsIDEwMSwgMjQsIDEsIDIyMywgNiwgMTAxLCAyNCwgMSwgCi0gICAgMjIzLCAxLCAxMDEsIDI0LCAxLCAyMjMsIDEyLCAxMDEsIDI0LCAxLCAyMjMsIDI0LCAxMDEsIDI0LCAxLCAyMzAsIDIxNywgCi0gICAgMTAxLCAyNCwgMSwgMjI1LCA5NSwgMTAxLCAyNCwgMSwgMjE4LCAyMTIsIDEwMSwgMjQsIDEsIDIyNSwgODQsIDEwMSwgMjQsIAotICAgIDEsIDIxOSwgMTQ4LCAxMDEsIDI0LCAxLCAyMTgsIDIwOSwgMTAxLCAyNCwgMSwgMjM2LCA1NiwgMTAxLCAyNCwgMSwgMjUwLCAKLSAgICA0NiwgMTAxLCAyNCwgMSwgMjE4LCAyMTksIDEwMSwgMjQsIDEsIDI1MCwgMTA2LCAxMDEsIDI0LCAxLCAyMzQsIDExMCwgCi0gICAgMTAxLCAyNCwgMSwgMjE2LCAxNzMsIDEwMSwgMjQsIDEsIDIyNSwgMTMxLCAxMDEsIDI0LCAxLCAyNDEsIDE3MiwgMTAxLCAKLSAgICAyNCwgMSwgNjEsIDEwMSwgMjQsIDEsIDI1NCwgMjQzLCAxMDEsIDI0LCAxLCAxOTEsIDEwMSwgMjQsIDEsIDIxMSwgOTIsIAotICAgIDEwMSwgMjQsIDEsIDI0NSwgMTE3LCAxMDEsIDI0LCAxLCA3NSwgMTAxLCAyNCwgMSwgMjExLCAzNiwgMTAxLCAyNCwgMSwgCi0gICAgMjExLCA0NywgMTAxLCAyNCwgMSwgNzYsIDEwMSwgMjQsIDEsIDIxMiwgNjUsIDEwMSwgMjQsIDEsIDIxMiwgNjIsIDEwMSwgCi0gICAgMjQsIDEsIDIyNiwgMjM0LCAxMDEsIDI0LCAxLCAyMTAsIDI0NCwgMTAxLCAyNCwgMSwgNzAsIDEwMSwgMjQsIDEsIDIxMiwgCi0gICAgMTEsIDEwMSwgMjQsIDEsIDIxMiwgMjIsIDEwMSwgMjQsIDEsIDIxMSwgMjUwLCAxMDEsIDI0LCAxLCAyMTAsIDIxMiwgMTAxLCAKLSAgICAyNCwgMSwgMjQ1LCA1NSwgMTAxLCAyNCwgMSwgMjExLCA4LCAxMDEsIDI0LCAxLCA3MywgMTI2LCAyNTAsIDE3NiwgNTAsIAotICAgIDEyNiwgMjI0LCAyMjgsIDUwLCAxMjYsIDIyOCwgNTIsIDUwLCAxMjYsIDIzMSwgMjMyLCAxMjYsIDI1MSwgMTM1LCAxMzAsIAotICAgIDEyNiwgMjExLCA0MCwgNTAsIDEyNiwgMjExLCAyMTcsIDUwLCAxMDEsIDI0NCwgMTgsIDE5MiwgMjEzLCAyMzksIDEwMSwgCi0gICAgMTQwLCA3NCwgMTAxLCAyMTQsIDE1MywgNzQsIDEwMSwgOTcsIDc0LCAxMDEsIDI0NiwgMTA0LCA3NCwgMTAxLCA4NSwgMjE4LCAKLSAgICAyMzQsIDEwMSwgNzEsIDI1MCwgMzUsIDIzNSwgMjA0LCAyNTQsIDk5LCAyNTQsIDEyMCwgMjM1LCAyMDQsIDI1NCwgOTksIAotICAgIDIyMCwgMTM3LCAyMzUsIDIwNCwgMjU0LCA5OSwgMjE2LCAyMzYsIDIyNiwgMjQ5LCAyMjMsIDcyLCAyNTAsIDE0MiwgMjIzLCAKLSAgICA3MiwgMjUwLCAxNDIsIDYyLCA1NywgMywgMjUzLCAxNDIsIDYxLCA2MiwgNTcsIDMsIDI1MywgMTExLCA3NSwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDEyMCwgNzMsIDYyLCA1NywgMywgMjUzLCA4OCwgNzYsIDYyLCA1NywgMywgMjUzLCAxMzgsIDcwLCA2MiwgNTcsIAotICAgIDMsIDI1MywgMTU3LCAyNDgsIDIyMSwgNjIsIDU3LCAzLCAyNTMsIDEwNCwgMjQ4LCA5MCwgNjIsIDU3LCAzLCAyNTMsIDE0NCwgCi0gICAgMjQ4LCAzLCA2MiwgNTcsIDMsIDI1MywgMTM0LCAyNDcsIDE0NSwgNjIsIDU3LCAzLCAyNTMsIDk4LCAyNDYsIDc4LCA2MiwgCi0gICAgNTcsIDMsIDI1MywgOTIsIDIzNSwgMTQxLCA2MiwgNTcsIDMsIDI1MywgMTAzLCAyMzUsIDEyNiwgNjIsIDU3LCAzLCAyNTMsIAotICAgIDExMywgMjM1LCA2OCwgNjIsIDU3LCAzLCAyNTMsIDg0LCAyMzUsIDUxLCA2MiwgNTcsIDMsIDI1MywgNzIsIDE3NiwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDEwNSwgMjM0LCAxODIsIDYyLCA1NywgMywgMjUzLCA4MiwgMjM0LCA5MiwgNjIsIDU3LCAzLCAyNTMsIAotICAgIDc5LCAyMzQsIDI4LCA2MiwgNTcsIDMsIDI1MywgNjgsIDIzMywgMjE3LCA2MiwgNTcsIDMsIDI1MywgNjksIDE4NCwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDEzNSwgMjMxLCA5MSwgNjIsIDU3LCAzLCAyNTMsIDc2LCAyMzAsIDIzMCwgNjIsIDU3LCAzLCAyNTMsIAotICAgIDEzMywgMjMwLCAxNjEsIDYyLCA1NywgMywgMjUzLCAxMjUsIDIzMCwgMTAyLCA2MiwgNTcsIDMsIDI1MywgMTQ2LCAxOTcsIAotICAgIDYyLCA1NywgMywgMjUzLCAxMjQsIDIyOSwgMTA3LCA2MiwgNTcsIDMsIDI1MywgMTE4LCAyMjgsIDIzMywgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDk3LCAyMjgsIDc0LCA2MiwgNTcsIDMsIDI1MywgOTQsIDIyNywgMjM3LCA2MiwgNTcsIDMsIDI1MywgMTUzLCAxOTAsIAotICAgIDYyLCA1NywgMywgMjUzLCA3NywgMjI1LCAyMjEsIDYyLCA1NywgMywgMjUzLCAxMTAsIDIyNSwgMTA4LCA2MiwgNTcsIDMsIAotICAgIDI1MywgMTM3LCAyMjUsIDE2LCA2MiwgNTcsIDMsIDI1MywgOTksIDIyNCwgMTUwLCA2MiwgNTcsIDMsIDI1MywgMTMyLCAKLSAgICAyMjQsIDg4LCA2MiwgNTcsIDMsIDI1MywgNzEsIDIyNCwgNjksIDYyLCA1NywgMywgMjUzLCAxMjcsIDIyNCwgNTMsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMTYsIDIyNCwgNDIsIDYyLCA1NywgMywgMjUzLCA4OSwgMjA1LCA2MiwgNTcsIDMsIDI1MywgMTIxLCAKLSAgICAyMjMsIDEyOCwgNjIsIDU3LCAzLCAyNTMsIDk2LCAyMjMsIDM1LCA2MiwgNTcsIDMsIDI1MywgMTU1LCAyMjIsIDIxMSwgNjIsIAotICAgIDU3LCAzLCAyNTMsIDEyMiwgMjIyLCAxNDAsIDYyLCA1NywgMywgMjUzLCAxMTcsIDIwNiwgNjIsIDU3LCAzLCAyNTMsIDE0MCwgCi0gICAgMjIxLCAxODEsIDYyLCA1NywgMywgMjUzLCAxMDgsIDIxOSwgMTkxLCA2MiwgNTcsIDMsIDI1MywgMTM2LCAyMTksIDU4LCAKLSAgICA2MiwgNTcsIDMsIDI1MywgOTEsIDIxOCwgODMsIDYyLCA1NywgMywgMjUzLCA5MCwgMjE3LCAxMDUsIDYyLCA1NywgMywgCi0gICAgMjUzLCAxNTEsIDIxNywgMjIsIDYyLCA1NywgMywgMjUzLCAxMTIsIDIxNiwgMTE3LCA2MiwgNTcsIDMsIDI1MywgMTQ5LCAKLSAgICAxMTEsIDYyLCA1NywgMywgMjUzLCA4MCwgMjE1LCAxMTgsIDYyLCA1NywgMywgMjUzLCA5NSwgMjEyLCA2NSwgNjIsIDU3LCAKLSAgICAzLCAyNTMsIDc0LCAyMTIsIDIyLCA2MiwgNTcsIDMsIDI1MywgMTA5LCAyMTEsIDI1MCwgNjIsIDU3LCAzLCAyNTMsIDEwNywgCi0gICAgMjExLCAyMjcsIDYyLCA1NywgMywgMjUzLCAxMzEsIDIxMCwgMTE2LCA2MiwgNTcsIDMsIDI1MywgNzUsIDIxMCwgOTQsIDYyLCAKLSAgICA1NywgMywgMjUzLCAxMjgsIDIxMCwgMjMsIDYyLCA1NywgMywgMjUzLCAxMjMsIDI1NSwgNzUsIDYyLCA1NywgMywgMjUzLCAKLSAgICAxMDYsIDI1NSwgNzQsIDYyLCA1NywgMywgMjUzLCA2NSwgMjUzLCAxOTIsIDYyLCA1NywgMywgMjUzLCA3OCwgMjQ2LCA0NiwgCi0gICAgNjIsIDU3LCAzLCAyNTMsIDYxLCAyNDYsIDQ1LCA2MiwgNTcsIDMsIDI1MywgMTAxLCAyMjcsIDE3NCwgNjIsIDU3LCAzLCAKLSAgICAyNTMsIDExOSwgMjI0LCAxNDgsIDYyLCA1NywgMywgMjUzLCA4NywgMjI0LCAxNTIsIDYyLCA1NywgMywgMjUzLCA3MywgCi0gICAgMjIzLCAxODYsIDYyLCA1NywgMywgMjUzLCAxMTUsIDIyMywgMTg1LCA2MiwgNTcsIDMsIDI1MywgODEsIDIyMiwgMjEwLCAKLSAgICA2MiwgNTcsIDMsIDI1MywgODMsIDIxNywgMTAyLCA2MiwgNTcsIDMsIDI1MywgNjMsIDIxNSwgNzgsIDYyLCA1NywgMywgCi0gICAgMjUzLCA2MCwgMTA1LCA2MiwgNTcsIDE2LCAyNTMsIDEzMCwgNjIsIDU3LCAxNiwgMjUzLCAxMjksIDYyLCA1NywgMTYsIAotICAgIDI1MywgMTI2LCA2MiwgNTcsIDE2LCAyNTMsIDExNCwgNjIsIDU3LCAxNiwgMjUzLCAxMDIsIDYyLCA1NywgMTYsIDI1MywgCi0gICAgMTAwLCA2MiwgNTcsIDE2LCAyNTMsIDkzLCA2MiwgNTcsIDE2LCAyNTMsIDg2LCA2MiwgNTcsIDE2LCAyNTMsIDg1LCA2MiwgCi0gICAgNTcsIDE2LCAyNTMsIDcwLCA2MiwgNTcsIDE2LCAyNTMsIDY3LCA2MiwgNTcsIDE2LCAyNTMsIDY2LCA2MiwgNTcsIDE2LCAKLSAgICAyNTMsIDY0LCA2MiwgNTcsIDE2LCAyNTMsIDYyLCA2MiwgNTcsIDEwNiwgMjUzLCA1OSwgMjMxLCAxODUsIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDU4LCAyMTEsIDIyMSwgNjIsIDU3LCAxMDYsIDI1MywgNTcsIDI0OCwgNzQsIDYyLCA1NywgMTA2LCAyNTMsIAotICAgIDU2LCAyNDUsIDk1LCA2MiwgNTcsIDEwNiwgMjUzLCA1NSwgMjMxLCAxNTksIDYyLCA1NywgMTA2LCAyNTMsIDU0LCAyMTgsIAotICAgIDE2MiwgNjIsIDU3LCAxMDYsIDI1MywgNTMsIDI0NSwgMzcsIDYyLCA1NywgMTA2LCAyNTMsIDUyLCAyMjMsIDE1MywgNjIsIAotICAgIDU3LCAxMDYsIDI1MywgNTEsIDIyMCwgNjIsIDYyLCA1NywgMTA2LCAyNTMsIDUwLCAyNDEsIDIzNywgNjIsIDU3LCAxMDYsIAotICAgIDI1MywgNDksIDIxOSwgMjUsIDYyLCA1NywgMTA2LCAyNTMsIDQ4LCAyNTEsIDIwMywgNjIsIDU3LCAxMDYsIDI1MywgNDcsIAotICAgIDI0OSwgMTQ1LCA2MiwgNTcsIDEwNiwgMjUzLCA0NiwgMjUxLCAxMTUsIDYyLCA1NywgMTA2LCAyNTMsIDQ1LCAyMTIsIDIsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDQ0LCAyNTIsIDEzNiwgNjIsIDU3LCAxMDYsIDI1MywgNDMsIDIyNiwgMjA1LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCA0MiwgMjE4LCAyNTQsIDYyLCA1NywgMTA2LCAyNTMsIDQxLCAyNDksIDY4LCA2MiwgNTcsIDIzMCwgMTQyLCAKLSAgICAyNTMsIDQwLCAyMzQsIDIyNCwgNjIsIDU3LCAyMzAsIDE0MiwgMjUzLCAzOSwgMjM0LCAyMzIsIDYyLCA1NywgMTA2LCAyNTMsIAotICAgIDM4LCAyMjYsIDIxOCwgNjIsIDU3LCAxMDYsIDI1MywgMzcsIDIxMSwgMjM2LCA2MiwgNTcsIDEwNiwgMjUzLCAzNiwgNjIsIAotICAgIDU3LCAyMzAsIDE0MiwgMjUzLCAzNSwgMjU0LCAxNywgNjIsIDU3LCAyMzAsIDE0MiwgMjUzLCAzNCwgMjMxLCA1MiwgNjIsIAotICAgIDU3LCAxMDYsIDI1MywgMzMsIDI1MSwgMTM0LCA2MiwgNTcsIDEwNiwgMjUzLCAzMiwgMjQyLCAxNjYsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDMxLCA2MiwgNTcsIDEwNiwgMjUzLCAzMCwgMjExLCAyMTIsIDYyLCA1NywgMTA2LCAyNTMsIDI5LCA2MiwgNTcsIAotICAgIDEwNiwgMjUzLCAyOCwgNjIsIDU3LCAxMDYsIDI1MywgMjcsIDI0MCwgMjQ4LCA2MiwgNTcsIDEwNiwgMjUzLCAyNiwgNjIsIAotICAgIDU3LCAxMDYsIDI1MywgMjUsIDYyLCA1NywgMTA2LCAyNTMsIDI0LCA2MiwgNTcsIDIzMCwgMTQyLCAyNTMsIDIyLCAyMTUsIAotICAgIDkyLCA2MiwgNTcsIDEwNiwgMjUzLCAyMSwgNjIsIDU3LCAxMDYsIDI1MywgMjAsIDYyLCA1NywgMTA2LCAyNTMsIDE5LCAKLSAgICAyNDksIDI1MCwgNjIsIDU3LCAxMDYsIDI1MywgMTgsIDYyLCA1NywgMTA2LCAyNTMsIDE3LCA2MiwgNTcsIDEwNiwgMjUzLCAKLSAgICAxNiwgMjQzLCA5MywgNjIsIDU3LCAxMDYsIDI1MywgMTUsIDI1NCwgNCwgNjIsIDU3LCAxMDYsIDI1MywgMTQsIDYyLCA1NywgCi0gICAgMTA2LCAyNTMsIDEzLCA2MiwgNTcsIDEwNiwgMjUzLCAxMiwgNjIsIDU3LCAxMDYsIDI1MywgMTEsIDYyLCA1NywgMTA2LCAKLSAgICAyNTMsIDEwLCA2MiwgNTcsIDEwNiwgMjUzLCA5LCA2MiwgNTcsIDEwNiwgMjUzLCA4LCA2MiwgNTcsIDEwNiwgMjUzLCA3LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUzLCA2LCA2MiwgNTcsIDEwNiwgMjUzLCA1LCAyMzAsIDEzNCwgNjIsIDU3LCAxMDYsIDI1MywgNCwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MywgMywgMjE1LCAyMzUsIDYyLCA1NywgMTA2LCAyNTMsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDEsIAotICAgIDYyLCA1NywgMTA2LCAyNTMsIDAsIDYyLCA1NywgMTA2LCAyNTIsIDI1NSwgNjIsIDU3LCAxMDYsIDI1MiwgMjU0LCA2MiwgCi0gICAgNTcsIDEwNiwgMjUyLCAyNTMsIDYyLCA1NywgMTA2LCAyNTIsIDI1MiwgNjIsIDU3LCAxMDYsIDI1MiwgMjUxLCA2MiwgNTcsIAotICAgIDEwNiwgMjUyLCAyNTAsIDYyLCA1NywgMTA2LCAyNTIsIDI0OSwgNjIsIDU3LCAxMDYsIDI1MiwgMjQ4LCA2MiwgNTcsIDEwNiwgCi0gICAgMjUyLCAyNDcsIDI0MSwgMjExLCA2MiwgNTcsIDEwNiwgMjUyLCAyMjYsIDI0NCwgMjgsIDYyLCA1NywgMTA2LCAyNTIsIAotICAgIDIyMywgMjUyLCAxMTYsIDYyLCA1NywgMTA2LCAyNTIsIDIxOCwgMjE5LCA1LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTcsIDc0LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAyMTYsIDYyLCA1NywgMTA2LCAyNTIsIDIxNSwgMjE3LCAyMzYsIDYyLCA1NywgMTA2LCAyNTIsIAotICAgIDIxNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjEzLCA2MiwgNTcsIDEwNiwgMjUyLCAyMTIsIDIxMSwgMjU0LCAyNTAsIDEzOSwgCi0gICAgNjIsIDU3LCAxMDYsIDI1MiwgMjExLCAyNTAsIDEzOSwgNjIsIDU3LCAxMDYsIDI1MiwgMjEwLCAyNTAsIDE0MCwgMjQzLCAKLSAgICAyNTUsIDYyLCA1NywgMTA2LCAyNTIsIDIwOSwgMjEyLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAyMDgsIDYyLCA1NywgMTA2LCAKLSAgICAyNTIsIDIwNywgNjIsIDU3LCAyMzAsIDE0MiwgMjUyLCAyMDYsIDI0NywgMTk4LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDUsIAotICAgIDYyLCA1NywgMTA2LCAyNTIsIDIwNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjAyLCA2MiwgNTcsIDEwNiwgMjUyLCAyMDEsIDYyLCAKLSAgICA1NywgMTA2LCAyNTIsIDIwMCwgNjIsIDU3LCAxMDYsIDI1MiwgMTk5LCAyNDgsIDE1OSwgNjIsIDU3LCAxMDYsIDI1MiwgCi0gICAgMTk4LCA2MiwgNTcsIDEwNiwgMjUyLCAxOTcsIDYyLCA1NywgMTA2LCAyNTIsIDE5NiwgNjIsIDU3LCAxMDYsIDI1MiwgMTk1LCAKLSAgICA2MiwgNTcsIDEwNiwgMjUyLCAxOTQsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUzLCAyMywgNjIsIDU3LCAxMDYsIDIxMywgCi0gICAgMTg2LCAyNTIsIDI0NiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKLSAgICAyNTIsIDI0NCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAotICAgIDI0MiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MCwgCi0gICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzOSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzOCwgNjIsIDU3LCAKLSAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDIzNywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzNiwgNjIsIDU3LCAxMDYsIAotICAgIDIxMywgMTg2LCAyNTIsIDIzNSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzNCwgNjIsIDU3LCAxMDYsIDIxMywgCi0gICAgMTg2LCAyNTIsIDIzMywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKLSAgICAyNTIsIDIzMSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAotICAgIDIyOSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyOCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyNywgCi0gICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyNSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyNCwgNjIsIDU3LCAKLSAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDIyMiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyMSwgNjIsIDU3LCAxMDYsIAotICAgIDIxMywgMTg2LCAyNTIsIDIyMCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIxOSwgNjIsIDU3LCAxMDYsIDIxMywgCi0gICAgMTg2LCAyNTIsIDIwMywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDE5MywgMjU0LCAyMzYsIDIxMSwgMjA5LCAyMjAsIAotICAgIDEzOCwgMjMyLCAyMTMsIDI1NCwgMjM2LCAyMTEsIDIwOSwgMjIwLCAxMzgsIDI0NywgMTIwLCAyNTQsIDIzNiwgMjUwLCAKLSAgICAxMzAsIDc4LCAyNTQsIDIzNiwgNTQsIDExMCwgMjU0LCAyMzYsIDU0LCAxMDUsIDI1NCwgMjM2LCA1NCwgMTU4LCAyNTQsIAotICAgIDIzNiwgNTQsIDE2MSwgMjU0LCAyMzYsIDU0LCAxODksIDI1NCwgMjM2LCA1NCwgMTk0LCAyNTQsIDIzNiwgNTQsIDE5OCwgCi0gICAgMjU0LCAyMzYsIDU0LCAxOTUsIDI1NCwgMjM2LCA1NCwgMjAwLCAyNTQsIDIzNiwgNTQsIDIxNiwgMjQ3LCAyNTQsIDIzNiwgCi0gICAgNTQsIDIxNSwgNzMsIDI1NCwgMjM2LCA1NCwgMjE2LCAxNjIsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxNSwgMjU0LCAyMzYsIDU0LCAKLSAgICAyNDQsIDExNCwgMjU0LCAyMzYsIDU0LCAyMTksIDExMSwgMjU0LCAyMzYsIDU0LCAyMjAsIDExNiwgMjU0LCAyMzYsIDU0LCAKLSAgICAyNDUsIDE4NCwgMjU0LCAyMzYsIDU0LCAyMjgsIDE5NSwgMjU0LCAyMzYsIDU0LCAxMjMsIDI0MCwgMjEwLCAyNTQsIDIzNiwgCi0gICAgNTQsIDExMywgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMTM0LCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyNDQsIDExLCAKLSAgICAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyNDQsIDgxLCAyNDAsIDIxMCwgMjU0LCAyMzYsIDU0LCAyMTksIDEyNSwgMjQwLCAKLSAgICAyMTAsIDI1NCwgMjM2LCA1NCwgMjIwLCAxMjIsIDI0MCwgMjEwLCAyNTQsIDIzNiwgNTQsIDI0NSwgMTkzLCAyNDAsIDIxMCwgCi0gICAgMjU0LCAyMzYsIDU0LCAyMjgsIDIwMCwgMjQwLCAyMTAsIDI1NCwgMjM2LCA1NCwgMTIzLCAyMTYsIDE0NywgMjU0LCAyMzYsIAotICAgIDU0LCAxMTMsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDEzNCwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxMSwgCi0gICAgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ0LCA4MSwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjE5LCAxMjUsIDIxNiwgCi0gICAgMTQ3LCAyNTQsIDIzNiwgNTQsIDIyMCwgMTIyLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyNDUsIDE5MywgMjE2LCAxNDcsIAotICAgIDI1NCwgMjM2LCA1NCwgMjI4LCAyMDAsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIxNiwgMjQ4LCAyMTYsIDE0NywgMjU0LCAKLSAgICAyMzYsIDU0LCAyMTUsIDc0LCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMTYsIDE2MywgMjE2LCAxNDcsIDI1NCwgMjM2LCAKLSAgICA1NCwgMjQ0LCAxNiwgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ0LCAxMTUsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIAotICAgIDIxOSwgMTEyLCAyMTYsIDE0NywgMjU0LCAyMzYsIDU0LCAyMjAsIDExNywgMjE2LCAxNDcsIDI1NCwgMjM2LCA1NCwgMjQ1LCAKLSAgICAxODUsIDIxNiwgMTQ3LCAyNTQsIDIzNiwgNTQsIDIyOCwgMTk2LCAyMTYsIDE0NywgMjU0LCAyMzYsIDIxMiwgMTQsIDI1MiwgCi0gICAgMTI4LCAyMTQsIDE3MywgMjU0LCAyMzYsIDIxMiwgMTQsIDI0NCwgOTIsIDIxOCwgNTksIDI1NCwgMjM2LCAyMTIsIDE0LCAKLSAgICAyMjEsIDE3NiwgMjE4LCA1OSwgMjU0LCAyMzYsIDIxMiwgMTQsIDIxNiwgMTY5LCAyMTgsIDU5LCAyNTQsIDIzNiwgMjEyLCAKLSAgICAxNCwgMjQ0LCA0LCAyMTgsIDU5LCAyNTQsIDIzNiwgMjQ2LCA4MSwgMjMxLCA5MCwgMjQ0LCA5MiwgMjE4LCA1OSwgMjU0LCAKLSAgICAyMzYsIDIzMiwgMTk5LCAyMzEsIDkwLCAyNDQsIDkyLCAyMTgsIDU5LCAyNTQsIDIzNiwgMjMxLCA5MCwgMjIxLCAxNzYsIAotICAgIDIxOCwgNTksIDI1NCwgMjM2LCAyMzEsIDkwLCAyMTYsIDE2OSwgMjE4LCA1OSwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjI0LCAyMSwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgMjQyLCAyNywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjQ2LCAxMDAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxODksIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDExNCwgMjYsIAotICAgIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCA4MSwgMjE2LCAKLSAgICAxNDcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDExNSwgMjE2LCAxNDcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIAotICAgIDgxLCAyMTcsIDY3LCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjE2LCAyNDgsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgCi0gICAgMTk0LCAyNDQsIDExNSwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgMjQwLCAyMTEsIDIxNywgNjcsIDI2LCAKLSAgICAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyNDAsIDIxMSwgMjE3LCA2NywgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDEyMywgCi0gICAgMjE2LCAxNDgsIDIxNywgNjcsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyMTYsIDE0OCwgMjE3LCA2NywgMjYsIAotICAgIDI1NSwgNiwgMjUzLCAxOTQsIDI0NCwgODEsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjE2LCAyNDgsIDIxOCwgCi0gICAgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjQ0LCAxMTUsIDIxOCwgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMTIzLCAKLSAgICAyNDAsIDIxMSwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDgxLCAyNDAsIDIxMSwgMjE4LCAxNTAsIAotICAgIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAxMjMsIDIxNiwgMTQ4LCAyMTgsIDE1MCwgMjYsIDI1NSwgNiwgMjUzLCAxOTQsIDIxNiwgCi0gICAgMjQ4LCAyMTYsIDE0OCwgMjE4LCAxNTAsIDI2LCAyNTUsIDYsIDI1MywgMTk0LCAyNDQsIDExNSwgMjE2LCAxNDgsIDIxOCwgCi0gICAgMTUwLCAyNiwgMjU1LCA2LCAyNTMsIDE5NCwgMjE2LCAyNDgsIDIzMCwgMTY0LCAyNiwgMjU1LCA2LCAyNDEsIDIwNSwgMTIzLCAKLSAgICAyMjUsIDMxLCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTEwLCAyNiwgMjU1LCA2LCAyNDEsIDIwMSwgMTEwLCAyNiwgMjU1LCAKLSAgICA2LCAyNDUsIDEwNCwgMTA1LCAyNiwgMjU1LCA2LCAyMTYsIDE4MSwgMTA1LCAyNiwgMjU1LCA2LCAyNDksIDY1LCAxMTMsIAotICAgIDI0NiwgOTksIDI2LCAyNTUsIDYsIDI0NSwgMTA0LCAxMTMsIDI0NiwgOTksIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAxODksIAotICAgIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyMTYsIDI0NywgMjYsIDI1NSwgNiwgMjE1LCAyMDMsIDIxNiwgMjQ4LCAyNTQsIDE0MSwgCi0gICAgMTcsIDI2LCAyNTUsIDYsIDI0MSwgMjAxLCAyMTYsIDI0NywgMjYsIDI1NSwgNiwgMjMxLCA0MSwgMjE2LCAyNDcsIDI2LCAKLSAgICAyNTUsIDYsIDIxNiwgMTgxLCAyMTYsIDI0NywgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDIxNiwgMTYyLCAyNiwgMjU1LCA2LCAKLSAgICAyMTUsIDIwMywgMjQ0LCAxMTQsIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyNDQsIDExNSwgMjU0LCAxNDEsIDE3LCAyNiwgCi0gICAgMjU1LCA2LCAyNDEsIDIwMSwgMjQ0LCAxMTQsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAyNDQsIDExNCwgMjYsIDI1NSwgNiwgCi0gICAgMjE2LCAxODEsIDEyMywgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAxMzQsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAKLSAgICAyNDUsIDEwNCwgMjQ0LCA4MSwgMjQwLCAyMTAsIDI2LCAyNTUsIDYsIDIxNSwgMjAzLCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIAotICAgIDI1NSwgNiwgMjE2LCAxODEsIDI0NCwgODEsIDI0MCwgMjEwLCAyNiwgMjU1LCA2LCAyNTAsIDIyNywgMjQ0LCA4MSwgMjQwLCAKLSAgICAyMTAsIDI2LCAyNTUsIDYsIDIyOSwgMTgyLCAyNDQsIDgxLCAyNDAsIDIxMCwgMjYsIDI1NSwgNiwgMjE2LCAxODEsIDEyMywgCi0gICAgMjE2LCAxNDcsIDI2LCAyNTUsIDYsIDIxNiwgMTgxLCAyNDQsIDgxLCAyMTYsIDE0NywgMjYsIDI1NSwgNiwgMjQ4LCA1NywgCi0gICAgMjQ0LCA4MSwgMjMwLCAxNjQsIDI2LCAyNTUsIDYsIDIxOCwgMTE4LCAyNDQsIDExNSwgMjMwLCAxNjQsIDI2LCAxMjMsIAotICAgIDE2MywgNTAsIDI2LCAxMjMsIDE2MywgNSwgMjU0LCAxNDEsIDE3LCAyNiwgMTEzLCAyMTYsIDE2NywgNTAsIDI2LCAxMzQsIAotICAgIDIyNCwgMjAsIDUwLCAyNiwgMjExLCA0NSwgNTAsIDI2LCAyMTcsIDY4LCA1MCwgMjYsIDI0NiwgMTAxLCA1MCwgMjYsIDIyNiwgCi0gICAgMjQ2LCA1MCwgMjYsIDExMywgMjI2LCAyNDUsIDUwLCAyNiwgMTM0LCAyMjYsIDI0NSwgNTAsIDI2LCAyNDQsIDExLCAyMjYsIAotICAgIDI0NSwgNTAsIDI2LCAyNDQsIDgxLCAyMjYsIDI0NSwgNTAsIDI2LCAyMzEsIDM1LCA1MCwgMjYsIDIzMywgMTU3LCAyNTIsIAotICAgIDEyOCwgNTAsIDI2LCAyMzIsIDE5NCwgNTAsIDI2LCAyMjYsIDEzMSwgNTAsIDI2LCAyMTEsIDE1OSwgNTAsIDI2LCAyNTMsIAotICAgIDI0MywgNTAsIDI2LCAyNTQsIDAsIDUwLCAyNiwgMjQyLCAxNDQsIDUwLCAyNiwgMjE1LCAxODYsIDI1MiwgMTI4LCA1MCwgCi0gICAgMjYsIDIxMCwgODcsIDUwLCAyMjIsIDE5OCwgMjIwLCAxMTMsIDUwLCAyMjIsIDE5OCwgMjE0LCAxODUsIDUwLCAyMjIsIAotICAgIDE5OCwgMjIwLCAxNDIsIDUwLCAyMjIsIDE5OCwgMjIwLCAxMTEsIDUwLCAyMjIsIDE5OCwgMjQ3LCAyMTMsIDIyMCwgMTExLCAKLSAgICA1MCwgMjIyLCAxOTgsIDIxOSwgMTY4LCA1MCwgMjIyLCAxOTgsIDI0OCwgNTMsIDUwLCAyMjIsIDE5OCwgMjI0LCA2LCA1MCwgCi0gICAgMjIyLCAxOTgsIDIyMCwgMTI5LCA1MCwgMjIyLCAxOTgsIDI0NiwgNjAsIDUwLCAyMjIsIDE5OCwgMjUzLCAyMzgsIDUwLCAKLSAgICAyMjIsIDE5OCwgMjUwLCAxNzEsIDUwLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNSwgMjEzLCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDIyNSwgMjQsIDI0MSwgMjM1LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIxNywgNDUsIDI0MSwgMjM1LCAyMjUsIAotICAgIDE0MywgMjQ3LCAxOTEsIDUsIDI1MCwgMjQ3LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MCwgMTAxLCAyMjUsIDE0MywgCi0gICAgMjQ3LCAxOTEsIDUsIDIxMSwgMjIxLCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0MSwgMjExLCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDI0MywgODUsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE2LCAxMTYsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgNzQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjUxLCAxNjksIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjIwLCAyOSwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyNDksIDI0NCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMzEsIDE4NCwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyMzEsIDEzNiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMjEsIDIxNiwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyMzIsIDIzNywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTEsIDE4OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAKLSAgICAyNTAsIDIzMSwgMjI1LCAzNSwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDcsIDEzMywgMjI1LCAxNDMsIDI0NywgMTkxLCAKLSAgICA1LCAyNDksIDIyMywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTksIDg3LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0OSwgCi0gICAgMjI0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI1MiwgNjMsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjIwLCAxNiwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyNDAsIDI0OCwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDEsIDE3OCwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyNTEsIDExMiwgMjMzLCAzNiwgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNTAsIDIyNCwgMjI1LCAKLSAgICAxNDMsIDI0NywgMTkxLCA1LCAyMjMsIDE1MywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyNDUsIDIzMCwgMjI1LCAxNDMsIAotICAgIDI0NywgMTkxLCA1LCAyNDYsIDEwNywgMjI1LCAxNDMsIDI0NywgMTkxLCA1LCAyMTUsIDEwNSwgMjI1LCAxNDMsIDI0NywgCi0gICAgMTkxLCA1LCAyNTIsIDY2LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNSwgMzYsIDIxNSwgMjM1LCAyMjUsIDE0MywgMjQ3LCAKLSAgICAxOTEsIDUsIDIxMywgMTU5LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDIyNiwgMTgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgMjIyLCAxOTAsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjMyLCAyMjQsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjI2LCAKLSAgICAxMTUsIDI1MiwgMTg0LCAyMjUsIDE0MywgMjQ3LCAxOTEsIDUsIDI0NCwgNDgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgCi0gICAgMjQyLCAxMzgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjE4LCAxMTksIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgNCwgMjUzLCAKLSAgICAxNjgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMjEyLCAzMiwgMjUyLCAxNDgsIDIyNSwgMTQzLCAyNDcsIDE5MSwgNSwgMzgsIAotICAgIDIyNiwgMjQ4LCA5MSwgMjMyLCA2MCwgMSwgNjEsIDIzMiwgNjAsIDEsIDc1LCAyMzIsIDYwLCAxLCAyNTMsIDE1OCwgMjMyLCAKLSAgICA2MCwgMSwgMjUyLCAxOSwgMjMyLCA2MCwgMSwgMjQzLCAyMDIsIDIzMiwgNjAsIDEsIDI0OSwgNjAsIDIzMiwgNjAsIDEsIAotICAgIDczLCAyMzIsIDYwLCAxLCAyMTIsIDk4LCAyMzIsIDYwLCAxLCAyMTAsIDE1OSwgMjMyLCA2MCwgMSwgMjE2LCAyMTAsIDIzMiwgCi0gICAgNjAsIDEsIDIzNSwgMTQ0LCAyMzIsIDYwLCAxLCAyMzUsIDIzLCAyMzIsIDYwLCAxLCAyMjQsIDk2LCAyMzIsIDYwLCAxLCAKLSAgICAxNTYsIDIzMiwgNjAsIDEsIDE5MywgMjMyLCA2MCwgMSwgMjMwLCAyNSwgMjMyLCA2MCwgMSwgMjMwLCAxNjYsIDIzMiwgNjAsIAotICAgIDEsIDIyOCwgMTExLCAyMzIsIDYwLCAxLCA3MCwgMjMyLCA2MCwgMSwgMjI2LCAxMDUsIDIzMiwgNjAsIDEsIDIzNCwgNDcsIAotICAgIDIzMiwgNjAsIDEsIDE1MywgMjMyLCA2MCwgMSwgMjIyLCA5MSwgMjMyLCA2MCwgMSwgMjE3LCAxNTIsIDIzMiwgNjAsIDEsIAotICAgIDIxNSwgMTU5LCAyMzIsIDYwLCAxLCAyNTQsIDEyMywgMjMyLCA2MCwgMSwgMjQ1LCAxNTAsIDIzMiwgNjAsIDEsIDI0MiwgCi0gICAgNjAsIDIzMiwgNjAsIDEsIDIxMSwgMTc4LCAyNTAsIDIzNywgMSwgNjEsIDI1MCwgMjM3LCAxLCAyMjYsIDkxLCAyNTAsIAotICAgIDIzNywgMSwgMjQ5LCA2MCwgMjUwLCAyMzcsIDEsIDE1NiwgMjUwLCAyMzcsIDEsIDIxNCwgMTE2LCAyNTAsIDIzNywgMSwgCi0gICAgMTUzLCAyNTAsIDIzNywgMSwgMjMzLCA2MiwgMjUwLCAyMzcsIDEsIDI1NSwgNzUsIDI1MCwgMjM3LCAxLCAyMjQsIDk2LCAKLSAgICAyNTAsIDIzNywgMSwgMjUzLCAxNTgsIDI1MCwgMjM3LCAxLCAxOTMsIDI1MCwgMjM3LCAxLCA3NiwgMjUwLCAyMzcsIDEsIAotICAgIDI0OCwgMjIzLCAyNTAsIDIzNywgMSwgMjE3LCAxNTIsIDI1MCwgMjM3LCAxLCAyMjAsIDEwNCwgMjUwLCAyMzcsIDEsIDIyMCwgCi0gICAgMTAzLCAyNTAsIDIzNywgMSwgMjIyLCA5MSwgMjUwLCAyMzcsIDEsIDI1MSwgNjUsIDI1MCwgMjM3LCAxLCA3MCwgMjUwLCAKLSAgICAyMzcsIDEsIDIyOCwgMTExLCAyNTAsIDIzNywgMSwgMjExLCAxNzgsIDI1MCwgMjM3LCAxLCAyMzAsIDI1LCAyNTAsIDIzNywgCi0gICAgMSwgMjE1LCAxNTgsIDI1MCwgMjM3LCAxLCAyMjYsIDEwNSwgMjUwLCAyMzcsIDEsIDIxOCwgMjI2LCAyNTAsIDIzNywgMSwgCi0gICAgNzMsIDI1MCwgMjM3LCAxLCA3NSwgMjUwLCAyMzcsIDEsIDIxNCwgMTEzLCAyNTAsIDIzNywgMSwgMjM1LCAyMywgMjUwLCAKLSAgICAyMzcsIDEsIDIzNSwgMTQsIDI1MCwgMjM3LCAxLCAyMjksIDE1MCwgMjUwLCAyMzcsIDEsIDIxNCwgMTE4LCAyNTAsIDIzNywgCi0gICAgMSwgMjQzLCAyMDIsIDI1MCwgMjM3LCAxLCAyNDMsIDEzNywgMjUwLCAyMzcsIDEsIDIxOCwgMTY4LCAyNTAsIDIzNywgMSwgCi0gICAgMjE4LCAxNjcsIDI1MCwgMjM3LCAxLCAyMjksIDc5LCAyNTAsIDIzNywgMSwgMjM2LCAzMywgMjUwLCAyMzcsIDEsIDI1MSwgCi0gICAgNjQsIDI1MCwgMjM3LCAxLCAyMTUsIDE1OSwgMjUwLCAyMzcsIDEsIDIxNCwgMTE1LCAyNTAsIDIzNywgMSwgMjIyLCAxODAsIAotICAgIDI1MCwgMjM3LCAxLCAyMzEsIDEyOSwgMjUwLCAyMzcsIDEsIDIzMSwgMTI4LCAyNTAsIDIzNywgMSwgMjMxLCAxMjcsIDI1MCwgCi0gICAgMjM3LCAxLCAyMzEsIDEyNiwgMjUwLCAyMzcsIDEsIDIzMywgNjEsIDI1MCwgMjM3LCAxLCAyNDUsIDIzNCwgMjUwLCAyMzcsIAotICAgIDEsIDIxNCwgMTE0LCA1NSwgMzIsIDEsIDYxLCA1NSwgMzIsIDEsIDI1MiwgNzUsIDU1LCAzMiwgMSwgMjM0LCAxODIsIDU1LCAKLSAgICAzMiwgMSwgMjQ4LCA5MCwgNTUsIDMyLCAxLCA3NSwgNTUsIDMyLCAxLCAyMTMsIDI1NSwgNTUsIDMyLCAxLCAyMTAsIDk0LCAKLSAgICA1NSwgMzIsIDEsIDI0MSwgMjM4LCA1NSwgMzIsIDEsIDIxNiwgMTk1LCA1NSwgMzIsIDEsIDczLCA1NSwgMzIsIDEsIDE3NiwgCi0gICAgNTUsIDMyLCAxLCAyNDUsIDE3NCwgNTUsIDMyLCAxLCAyNDUsIDE1OSwgNTUsIDMyLCAxLCAyNDUsIDE1MCwgNTUsIDMyLCAxLCAKLSAgICAyNDUsIDc1LCA1NSwgMzIsIDEsIDc2LCA1NSwgMzIsIDEsIDIyNSwgMjIxLCA1NSwgMzIsIDEsIDIyMCwgNjMsIDU1LCAzMiwgCi0gICAgMSwgMjMzLCAyMTcsIDU1LCAzMiwgMSwgMjQ1LCA5MiwgNTUsIDMyLCAxLCAyNDUsIDgyLCA1NSwgMzIsIDEsIDIxNywgMjIsIAotICAgIDU1LCAzMiwgMSwgNzAsIDU1LCAzMiwgMSwgMjQ1LCAxNzcsIDU1LCAzMiwgMSwgMjI1LCAxMzYsIDU1LCAzMiwgMSwgMjM0LCAKLSAgICAxMTksIDU1LCAzMiwgMSwgMjQ1LCAyMDIsIDU1LCAzMiwgMSwgMjQ1LCA4NCwgNTUsIDMyLCAxLCAyNTAsIDEzMSwgNTUsIAotICAgIDMyLCAxLCAyMzYsIDMzLCA1NSwgMzIsIDEsIDIxNCwgMTE4LCA1NSwgMzIsIDIyNywgMTk4LCAxMTAsIDU1LCAzMiwgMjI3LCAKLSAgICAxOTgsIDE4OSwgNTUsIDMyLCAyMjcsIDE5OCwgMjE2LCAyNDcsIDU1LCAzMiwgMjI3LCAxOTgsIDI0NCwgMTE0LCAyNDIsIAotICAgIDE1MywgMSwgMjU0LCAyMDQsIDI0MiwgMTUzLCAxLCAyNTIsIDE2MywgMjQyLCAxNTMsIDEsIDI0MiwgMjExLCAyNDIsIDE1MywgCi0gICAgMSwgMjQ4LCAyMDQsIDI0MiwgMTUzLCAxLCAyNTQsIDIwMCwgMjQyLCAxNTMsIDEsIDIyNCwgNzksIDI0MiwgMTUzLCAxLCAKLSAgICAyMzUsIDE1NSwgMjQyLCAxNTMsIDEsIDI0MiwgMzksIDI0MiwgMTUzLCAxLCAyMTYsIDE1OCwgMjQyLCAxNTMsIDEsIDI0NSwgCi0gICAgMTgzLCAyNDIsIDE1MywgMSwgMjMzLCAxOTAsIDI0MiwgMTUzLCAxLCAyMzMsIDExMywgMjQyLCAxNTMsIDEsIDIzMSwgMTc5LCAKLSAgICAyNDIsIDE1MywgMSwgMjI5LCAxODQsIDI0MiwgMTUzLCAxLCAyMzUsIDExOSwgMjQyLCAxNTMsIDEsIDIxNCwgMTM2LCAyNDIsIAotICAgIDE1MywgMSwgMjI2LCA2OSwgMjQyLCAxNTMsIDEsIDIyOCwgMTk1LCAyNDIsIDE1MywgMSwgMjIzLCAxNjUsIDI0MiwgMTUzLCAKLSAgICAxLCAyMjEsIDIxOCwgMjQyLCAxNTMsIDEsIDIxNywgNCwgMjQyLCAxNTMsIDEsIDIxMSwgMjM0LCAyNDIsIDE1MywgMSwgCi0gICAgMjQ0LCAxNzgsIDI0MiwgMTUzLCAxLCAyMzYsIDM3LCAyNDIsIDE1MywgMSwgMjQwLCAxOTksIDI0MiwgMTUzLCAxLCAyMjYsIAotICAgIDEzOSwgMjQyLCAxNTMsIDEsIDIyOCwgMjAwLCAyNDAsIDIxMCwgMjE0LCAyMDksIDEsIDI1NCwgMTQ3LCAyMTQsIDIwOSwgMSwgCi0gICAgMjUyLCAyNiwgMjE0LCAyMDksIDEsIDI0MywgMTA4LCAyMTQsIDIwOSwgMSwgMjM0LCAxMzIsIDIxNCwgMjA5LCAxLCAyNDgsIAotICAgIDU0LCAyMTQsIDIwOSwgMSwgMjQxLCA2OCwgMjE0LCAyMDksIDEsIDIxMSwgMjI3LCAyMTQsIDIwOSwgMSwgMjEwLCA4NSwgCi0gICAgMjE0LCAyMDksIDEsIDI0MCwgMjQxLCAyMTQsIDIwOSwgMSwgMjE2LCAyMzAsIDIxNCwgMjA5LCAxLCAyMTAsIDIzMywgMjE0LCAKLSAgICAyMDksIDEsIDIzNCwgMjUwLCAyMTQsIDIwOSwgMSwgMjIwLCAyMCwgMjE0LCAyMDksIDEsIDIzMywgOTgsIDIxNCwgMjA5LCAKLSAgICAxLCAyMzEsIDY1LCAyMTQsIDIwOSwgMSwgMjQ4LCAyMSwgMjE0LCAyMDksIDEsIDIyNywgMTk0LCAyMTQsIDIwOSwgMSwgCi0gICAgMjEwLCAxMywgMjE0LCAyMDksIDEsIDIyMSwgMjQ4LCAyMTQsIDIwOSwgMSwgMjU0LCAxOTYsIDIxNCwgMjA5LCAxLCAyMjQsIAotICAgIDE1MCwgMjE0LCAyMDksIDEsIDIyMiwgMjUsIDIxNCwgMjA5LCAxLCAyMjQsIDM1LCAyMTQsIDIwOSwgMSwgMjIzLCAxNDQsIAotICAgIDIxNCwgMjA5LCAxLCAyMTYsIDE5OSwgMjE0LCAyMDksIDEsIDI0MiwgMjQ0LCAyMTQsIDIwOSwgMSwgMTExLCAyMTQsIDIwOSwgCi0gICAgMSwgNzMsIDIxNCwgMjA5LCAxLCA3MCwgMjE0LCAyMDksIDEsIDIxOCwgMTc5LCAyMTQsIDIwOSwgMjExLCAyMDksIDI0NywgCi0gICAgMTcyLCA1NSwgMjI1LCAxNjksIDUsIDYxLCA1NSwgMjI1LCAxNjksIDUsIDczLCA1NSwgMjI1LCAxNjksIDUsIDcwLCA1NSwgCi0gICAgMjI1LCAxNjksIDUsIDE3NiwgNTUsIDIyNSwgMTY5LCA1LCAyMzMsIDIxNywgNTUsIDIyNSwgMTY5LCA1LCAyNDMsIDEzNSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyNDIsIDExMywgNTUsIDIyNSwgMTY5LCA1LCAyMTEsIDE2NSwgNTUsIDIyNSwgMTY5LCA1LCAKLSAgICAyNTEsIDMzLCA1NSwgMjI1LCAxNjksIDUsIDIzNSwgMTQxLCA1NSwgMjI1LCAxNjksIDUsIDIzNSwgMTA4LCA1NSwgMjI1LCAKLSAgICAxNjksIDUsIDIxNywgMTA1LCA1NSwgMjI1LCAxNjksIDUsIDIxNSwgMTE4LCA1NSwgMjI1LCAxNjksIDUsIDI0OCwgMjIxLCAKLSAgICA1NSwgMjI1LCAxNjksIDUsIDI0OCwgMywgNTUsIDIyNSwgMTY5LCA1LCAyNDYsIDc4LCA1NSwgMjI1LCAxNjksIDUsIDIxNiwgCi0gICAgMjA4LCA1NSwgMjI1LCAxNjksIDUsIDE5MCwgNTUsIDIyNSwgMTY5LCA1LCAyNTIsIDE5MSwgNTUsIDIyNSwgMTY5LCA1LCAKLSAgICAyNDQsIDE5NiwgNTUsIDIyNSwgMTY5LCA1LCAxOTcsIDU1LCAyMjUsIDE2OSwgNSwgMjI3LCAyMzcsIDU1LCAyMjUsIDE2OSwgCi0gICAgNSwgMTg0LCA1NSwgMjI1LCAxNjksIDUsIDIzMCwgMjMwLCA1NSwgMjI1LCAxNjksIDUsIDIzMCwgMTAyLCA1NSwgMjI1LCAKLSAgICAxNjksIDUsIDE5MSwgNTUsIDIyNSwgMTY5LCA1LCAyMTQsIDI3LCA1NSwgMjI1LCAxNjksIDUsIDIxMywgMTc2LCA1NSwgCi0gICAgMjI1LCAxNjksIDUsIDIwNSwgNTUsIDIyNSwgMTY5LCA1LCAyMjIsIDE0MCwgNTUsIDIyNSwgMTY5LCA1LCAyMzMsIDEzNSwgCi0gICAgNTUsIDIyNSwgMTY5LCA1LCAyMDYsIDU1LCAyMjUsIDE2OSwgNSwgMjEwLCAxMTYsIDU1LCAyMjUsIDE2OSwgNSwgMjIwLCAKLSAgICAxMDIsIDU1LCAyMjUsIDE2OSwgNSwgMjE4LCAyMjMsIDU1LCAyMjUsIDE2OSwgNSwgMTYyLCA1NSwgMjI1LCAxNjksIDUsIAotICAgIDI1MywgMTg2LCA1NSwgMjI1LCAxNjksIDUsIDI1MywgMTg1LCA1NSwgMjI1LCAxNjksIDUsIDI1MywgMTg0LCA1NSwgMjI1LCAKLSAgICAxNjksIDUsIDIxMSwgMTQyLCA1NSwgMjI1LCAxNjksIDUsIDI0OCwgMjAwLCA1NSwgMjI1LCAxNjksIDUsIDI0OCwgMTk5LCAKLSAgICA1NSwgMjI1LCAxNjksIDUsIDI1MiwgMTcwLCA1NSwgMjI1LCAxNjksIDUsIDI1MSwgODUsIDU1LCAyMjUsIDE2OSwgMjExLCAKLSAgICAyMDksIDI0NywgMTcyLCA1NSwgMjI1LCAxNjksIDU0LCAxMTAsIDU1LCAyMjUsIDE2OSwgNTQsIDEwNSwgNTUsIDIyNSwgCi0gICAgMTY5LCA1NCwgMjE2LCAyNDcsIDU1LCAyMjUsIDE2OSwgNTQsIDIxNSwgNzMsIDU1LCAyMjUsIDE2OSwgNTQsIDI0MCwgMjEwLCAKLSAgICAxODEsIDYsIDEsIDE5OSwgNzMsIDE4MSwgNiwgMSwgMTk5LCA3NSwgMTgxLCA2LCAxLCAxOTksIDYxLCAxODEsIDYsIDEsIAotICAgIDE5OSwgMjU0LCAyMDksIDE4MSwgNiwgMSwgMTk5LCA3NiwgMTgxLCA2LCAxLCAxOTksIDIyNiwgMTgzLCAxODEsIDYsIDEsIAotICAgIDIxOSwgMjUxLCA3MywgMTgxLCA2LCAxLCAyMTksIDI1MSwgNzUsIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDYxLCAxODEsIDYsIAotICAgIDEsIDIxOSwgMjUxLCAyNTQsIDIwOSwgMTgxLCA2LCAxLCAyMTksIDI1MSwgNzYsIDE4MSwgNiwgMSwgMjE5LCAyNTEsIDIyNiwgCi0gICAgMTgzLCAxODEsIDYsIDEsIDI1MywgMTY3LCAxODEsIDYsIDEsIDIyNiwgMTE2LCAxODEsIDYsIDEsIDIxMSwgMTk1LCAxODEsIAotICAgIDYsIDEsIDIxMSwgNDQsIDE4MSwgNiwgMSwgMjQyLCA2MCwgMTgxLCA2LCAxLCAyMjUsIDIxMSwgMTgxLCA2LCAxLCAyNTIsIAotICAgIDY2LCAxODEsIDYsIDEsIDIxNywgMTEsIDE4MSwgNiwgMSwgMjQ4LCA3NywgMTgxLCA2LCAxLCAyNTAsIDEyOCwgMTgxLCA2LCAKLSAgICAxLCAyMzUsIDEyNCwgMTgxLCA2LCAxLCAyMzQsIDE4OSwgMTgxLCA2LCAxLCAyNDMsIDgzLCAxODEsIDYsIDEsIDI0NSwgCi0gICAgMjAyLCAxODEsIDYsIDEsIDIxMywgMjUwLCAxODEsIDYsIDEsIDI0NSwgNTksIDE4MSwgNiwgMSwgMjE2LCAxOTQsIDE4MSwgCi0gICAgNiwgMSwgMjQ1LCA4MiwgMTgxLCA2LCAxLCAyMTAsIDkyLCAxODEsIDYsIDEsIDI0NSwgNzUsIDE4MSwgNiwgMSwgMjEwLCAKLSAgICA3MywgMTgxLCA2LCAxLCAyNDUsIDkyLCAxODEsIDYsIDEsIDI0NSwgMTc0LCAxODEsIDYsIDEsIDI0NSwgMTU5LCAxODEsIDYsIAotICAgIDEsIDI0NSwgMTUwLCAxODEsIDYsIDEsIDI0NSwgMTM4LCAxODEsIDYsIDEsIDIyNiwgMjE5LCAxODEsIDYsIDEsIDI0NSwgCi0gICAgMzgsIDE4MSwgNCwgMSwgMTk5LCA3MywgMTgxLCA0LCAxLCAxOTksIDc1LCAxODEsIDQsIDEsIDE5OSwgNjEsIDE4MSwgNCwgCi0gICAgMSwgMTk5LCAyNTQsIDIwOSwgMTgxLCA0LCAxLCAxOTksIDc2LCAxODEsIDQsIDEsIDE5OSwgMjI2LCAxODMsIDE4MSwgNCwgCi0gICAgMSwgMjE5LCAyNTEsIDczLCAxODEsIDQsIDEsIDIxOSwgMjUxLCA3NSwgMTgxLCA0LCAxLCAyMTksIDI1MSwgNjEsIDE4MSwgCi0gICAgNCwgMSwgMjE5LCAyNTEsIDI1NCwgMjA5LCAxODEsIDQsIDEsIDIxOSwgMjUxLCA3NiwgMTgxLCA0LCAxLCAyMTksIDI1MSwgCi0gICAgMjI2LCAxODMsIDE4MSwgNCwgMSwgMjUzLCAxNjcsIDE4MSwgNCwgMSwgMjI2LCAxMTYsIDE4MSwgNCwgMSwgMjExLCAxOTUsIAotICAgIDE4MSwgNCwgMSwgMjExLCA0NCwgMTgxLCA0LCAxLCAyNDIsIDYwLCAxODEsIDQsIDEsIDIyNSwgMjExLCAxODEsIDQsIDEsIAotICAgIDI1MiwgNjYsIDE4MSwgNCwgMSwgMjE3LCAxMSwgMTgxLCA0LCAxLCAyNDgsIDc3LCAxODEsIDQsIDEsIDI1MCwgMTI4LCAKLSAgICAxODEsIDQsIDEsIDIzNSwgMTI0LCAxODEsIDQsIDEsIDIzNCwgMTg5LCAxODEsIDQsIDEsIDI0MywgODMsIDE4MSwgNCwgMSwgCi0gICAgMjQ1LCAyMDIsIDE4MSwgNCwgMSwgMjEzLCAyNTAsIDE4MSwgNCwgMSwgMjQ1LCA1OSwgMTgxLCA0LCAxLCAyMTYsIDE5NCwgCi0gICAgMTgxLCA0LCAxLCAyNDUsIDgyLCAxODEsIDQsIDEsIDIxMCwgOTIsIDE4MSwgNCwgMSwgMjQ1LCA3NSwgMTgxLCA0LCAxLCAKLSAgICAyMTAsIDczLCAxODEsIDQsIDEsIDI0NSwgOTIsIDE4MSwgNCwgMSwgMjQ1LCAxNzQsIDE4MSwgNCwgMSwgMjQ1LCAxNTksIAotICAgIDE4MSwgNCwgMSwgMjQ1LCAxNTAsIDE4MSwgNCwgMSwgMjQ1LCAxMzgsIDE4MSwgNCwgMSwgMjI2LCAyMTksIDE4MSwgNCwgMSwgCi0gICAgMjQ1LCAzOCwgMjIwLCA2OSwgMSwgMjI1LCAyMDksIDIyMCwgNjksIDEsIDIxNiwgNSwgMjIwLCA2OSwgMSwgMjM0LCA5MSwgCi0gICAgMjIwLCA2OSwgMSwgMjQ0LCAxNDcsIDIyMCwgNjksIDEsIDIxNiwgMTcyLCAyMjAsIDY5LCAxLCAyMTksIDU4LCAyMjAsIDY5LCAKLSAgICAxLCAyMTgsIDE0LCAyMjAsIDY5LCAxLCAyNTAsIDYxLCAyMjAsIDY5LCAxLCAyMTEsIDQ2LCAyMjAsIDY5LCAxLCAyNDAsIAotICAgIDIwOSwgMjIwLCA2OSwgMSwgMjUyLCA1LCAyMjAsIDY5LCAxLCAyNDgsIDg5LCAyMjAsIDY5LCAxLCAyNDMsIDEyMSwgMjIwLCAKLSAgICA2OSwgMSwgMjEzLCAxMjMsIDIyMCwgNjksIDEsIDIxNiwgMTc2LCAyMjAsIDY5LCAxLCAyMTAsIDIxLCAyMjAsIDY5LCAxLCAKLSAgICAyMzEsIDg5LCAyMjAsIDY5LCAxLCAyMzUsIDQ5LCAyMjAsIDY5LCAxLCAyMTEsIDIyNSwgMjIwLCA2OSwgMSwgMjQyLCA0OCwgCi0gICAgMjIwLCA2OSwgMSwgMjMyLCAxNDIsIDIyMCwgNjksIDEsIDIzMCwgMTg5LCAyMjAsIDY5LCAxLCAyMzYsIDQwLCAyMjAsIDY5LCAKLSAgICAxLCAyNDUsIDIwMSwgMjIwLCA2OSwgMSwgMjUzLCAyMzEsIDIyMCwgNjksIDEsIDI1NCwgMjQ3LCAyMjAsIDY5LCAxLCAyMjYsIAotICAgIDE5NiwgMjIwLCA2OSwgMSwgMjExLCAyMTIsIDIyMCwgNjksIDEsIDIyNiwgMTMwLCAyMjAsIDY5LCAxLCAyNTQsIDIwOSwgCi0gICAgMjIwLCA2OSwgMSwgMjIyLCAyMDgsIDIyMCwgNjksIDEsIDIyNywgMTk0LCAyMjAsIDY5LCAxLCAyNDUsIDIxNywgMjIwLCAKLSAgICA2OSwgMSwgMjU0LCAyMTQsIDIyMCwgNjksIDEsIDI0MCwgMTExLCAyMjAsIDY5LCAxLCAyMTQsIDE2MywgMjIwLCA2OSwgMSwgCi0gICAgMjI2LCAyNTQsIDIyMCwgNjksIDEsIDIyNiwgMTc2LCAyMjAsIDY5LCAxLCAyMjYsIDIxOCwgMjIwLCA2OSwgMSwgMjUzLCAKLSAgICAxNzAsIDIyMCwgNjksIDEsIDI1NCwgMTksIDIyMCwgNjksIDEsIDIyNiwgMTU4LCAyMjAsIDY5LCAxLCAyNTQsIDE5MiwgCi0gICAgMjIwLCA2OSwgMSwgMjQ1LCA4NiwgMjIwLCA2OSwgMSwgMjUzLCAyNTMsIDIyMCwgNjksIDEsIDI0NSwgMjI3LCAyMjAsIDY5LCAKLSAgICAxLCAyNDAsIDExOCwgMjIwLCA2OSwgMSwgMjExLCAxMywgMjI2LCAxNDEsIDEsIDI1NCwgMTcwLCAyMjYsIDE0MSwgMSwgCi0gICAgMjUyLCAxOTEsIDIyNiwgMTQxLCAxLCAyMTcsIDEwNSwgMjI2LCAxNDEsIDEsIDIzNSwgMTQxLCAyMjYsIDE0MSwgMSwgMjExLCAKLSAgICAxNjUsIDIyNiwgMTQxLCAxLCAyMzQsIDEzMiwgMjI2LCAxNDEsIDEsIDI0OCwgNzYsIDIyNiwgMTQxLCAxLCAyMDUsIDIyNiwgCi0gICAgMTQxLCAxLCAyMDYsIDIyNiwgMTQxLCAxLCAyMjAsIDI2LCAyMjYsIDE0MSwgMSwgMjQ4LCAyNSwgMjI2LCAxNDEsIDEsIAotICAgIDI1MCwgMjE1LCAyMjYsIDE0MSwgMSwgMjQzLCAxMzUsIDIyNiwgMTQxLCAxLCAyNDQsIDE5NiwgMjI2LCAxNDEsIDEsIDIyNCwgCi0gICAgODYsIDIyNiwgMTQxLCAxLCAyMzUsIDksIDIyNiwgMTQxLCAxLCAyMzMsIDEzMCwgMjI2LCAxNDEsIDEsIDIzMCwgMjAwLCAKLSAgICAyMjYsIDE0MSwgMSwgMjI3LCAxNzgsIDIyNiwgMTQxLCAxLCAyMTIsIDMwLCAyMjYsIDE0MSwgMSwgMTYyLCAyMjYsIDE0MSwgCi0gICAgMSwgMTkxLCAyMjYsIDE0MSwgMSwgNjEsIDIyNiwgMTQxLCAxLCA3NSwgMjI2LCAxNDEsIDEsIDczLCAyMjYsIDE0MSwgMSwgCi0gICAgNzYsIDIyNiwgMTQxLCAxLCA3MCwgMjI2LCAxNDEsIDEsIDI1NSwgNzMsIDIyNiwgMTQxLCAxLCAyNDUsIDIwOSwgMjI2LCAKLSAgICAxNDEsIDEsIDIyNiwgMTgzLCAyMjYsIDE0MSwgMjEsIDIxMCwgODYsIDIyNiwgMTQxLCAyMSwgMTEwLCAyMjYsIDE0MSwgMjEsIAotICAgIDEwNSwgMjI2LCAxNDEsIDIxLCAxNTgsIDIyNiwgMTQxLCAyMSwgMTYxLCAyMjYsIDE0MSwgMjEsIDE4OSwgMjI2LCAxNDEsIAotICAgIDIxLCAxOTQsIDIyNiwgMTQxLCAyMSwgMTk4LCAyMjYsIDE0MSwgMjEsIDE5NSwgMjI2LCAxNDEsIDIxLCAyMDAsIDI0OSwgCi0gICAgNjcsIDMsIDYxLCAyNDksIDY3LCAzLCA3NSwgMjQ5LCA2NywgMywgNzMsIDI0OSwgNjcsIDMsIDc2LCAyNDksIDY3LCAzLCAKLSAgICA3MCwgMjQ5LCA2NywgMywgMjM1LCAxNDEsIDI0OSwgNjcsIDMsIDIzNSwgNjgsIDI0OSwgNjcsIDMsIDE3NiwgMjQ5LCA2NywgCi0gICAgMywgMjM0LCAxODIsIDI0OSwgNjcsIDMsIDIzNCwgOTIsIDI0OSwgNjcsIDMsIDIzNCwgMjgsIDI0OSwgNjcsIDMsIDIzMywgCi0gICAgMjE3LCAyNDksIDY3LCAzLCAyMzMsIDEzNSwgMjQ5LCA2NywgMywgMjMzLCA1OCwgMjQ5LCA2NywgMywgMjMyLCAyNDEsIAotICAgIDI0OSwgNjcsIDMsIDIzMiwgMTU2LCAyNDksIDY3LCAzLCAyMzIsIDk4LCAyNDksIDY3LCAzLCAxODQsIDI0OSwgNjcsIDMsIAotICAgIDIzMSwgOTEsIDI0OSwgNjcsIDMsIDIzMCwgMjMwLCAyNDksIDY3LCAzLCAyMzAsIDE2MSwgMjQ5LCA2NywgMywgMjMwLCAKLSAgICAxMDIsIDI0OSwgNjcsIDMsIDE5NywgMjQ5LCA2NywgMywgMjI5LCAxMDcsIDI0OSwgNjcsIDMsIDIyOCwgMjMzLCAyNDksIAotICAgIDY3LCAzLCAyMjgsIDc0LCAyNDksIDY3LCAzLCAyMjcsIDIzNywgMjQ5LCA2NywgMywgMTkwLCAyNDksIDY3LCAzLCAyMjUsIAotICAgIDIyMSwgMjQ5LCA2NywgMywgMjI1LCAxMDgsIDI0OSwgNjcsIDMsIDIyNSwgMTYsIDI0OSwgNjcsIDMsIDIyNCwgMTUwLCAKLSAgICAyNDksIDY3LCAzLCAyMDUsIDI0OSwgNjcsIDMsIDIyMywgMTI4LCAyNDksIDY3LCAzLCAyMjMsIDM1LCAyNDksIDY3LCAzLCAKLSAgICAyMjIsIDIxMSwgMjQ5LCA2NywgMywgMjIyLCAxNDAsIDI0OSwgNjcsIDMsIDIwNiwgMjQ5LCA2NywgMywgMjIxLCAxODEsIAotICAgIDI0OSwgNjcsIDMsIDIxOSwgMTkxLCAyNDksIDY3LCAzLCAyMTksIDU4LCAyNDksIDY3LCAzLCAyMTgsIDgzLCAyNDksIDY3LCAKLSAgICAzLCAyMTcsIDEwNSwgMjQ5LCA2NywgMywgMjE3LCAyMiwgMjQ5LCA2NywgMywgMjE2LCAxMTcsIDI0OSwgNjcsIDMsIDExMSwgCi0gICAgMjQ5LCA2NywgMywgMjE1LCAxMTgsIDI0OSwgNjcsIDMsIDIxMiwgNjUsIDI0OSwgNjcsIDMsIDIxMiwgMjIsIDI0OSwgNjcsIAotICAgIDMsIDIxMSwgMjUwLCAyNDksIDY3LCAzLCAyMTEsIDIyNywgMjQ5LCA2NywgMywgMjExLCAxNjUsIDI0OSwgNjcsIDMsIDIxMSwgCi0gICAgMTYyLCAyNDksIDY3LCAzLCAyMTAsIDExNiwgMjQ5LCA2NywgMywgMjEwLCAyMywgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNTQsIAotICAgIDE2OCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNTIsIDI1LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI0MiwgMjAxLCAyMzYsIDEsIAotICAgIDI1NCwgMjcsIDEsIDI0OCwgMTg4LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDI0MSwgMjM4LCAyMzYsIDEsIDI1NCwgMjcsIDEsIAotICAgIDIxMiwgMzAsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjEwLCA5NywgMjM2LCAxLCAyNTQsIDI3LCAxLCAyNDEsIDE5NSwgMjM2LCAKLSAgICAxLCAyNTQsIDI3LCAxLCAyMTYsIDIyNiwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMTAsIDIzMiwgMjM2LCAxLCAyNTQsIDI3LCAKLSAgICAxLCAyMzQsIDIyNSwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMzMsIDkzLCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIzMSwgNjUsIAotICAgIDIzNiwgMSwgMjU0LCAyNywgMSwgMjI3LCAxOTQsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjIxLCAyNDksIDIzNiwgMSwgMjU0LCAKLSAgICAyNywgMSwgMjUzLCAxNjIsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjI1LCAyMjEsIDIzNiwgMSwgMjU0LCAyNywgMSwgMjIyLCAKLSAgICAyNCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMjQsIDM0LCAyMzYsIDEsIDI1NCwgMjcsIDEsIDIyMywgNjcsIDIzNiwgMSwgCi0gICAgMjU0LCAyNywgMSwgMjIwLCAyMCwgMjM2LCAxLCAyNTQsIDI3LCAxLCAyMTcsIDM2LCAyMzYsIDEsIDI1NCwgMjcsIDIyMSwgCi0gICAgMTczLCA1MCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMTEwLCAyMzYsIDEsIDI1NCwgMjcsIDU0LCAxMDUsIDIzNiwgMSwgMjU0LCAKLSAgICAyNywgNTQsIDE1OCwgMjM2LCAxLCAyNTQsIDI3LCA1NCwgMjE2LCAyNDcsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDIxNSwgNzMsIAotICAgIDIzNiwgMSwgMjU0LCAyNywgNTQsIDEyMywgMjQwLCAyMTAsIDIzNiwgMSwgMjU0LCAyNywgNTQsIDEyMywgMjE2LCAxNDcsIAotICAgIDIzNiwgMSwgMjU0LCAyNywgNTQsIDIxNiwgMjQ4LCAyMTYsIDE0NywgMjI1LCAxMTksIDEsIDI1NCwgMTY1LCAyMjUsIDExOSwgCi0gICAgMSwgMjUyLCAyOCwgMjI1LCAxMTksIDEsIDI0MywgMTA5LCAyMjUsIDExOSwgMSwgMjQ4LCA1NiwgMjI1LCAxMTksIDEsIAotICAgIDI0MSwgMjM4LCAyMjUsIDExOSwgMSwgMjEyLCAzNywgMjI1LCAxMTksIDEsIDIxMCwgMTEwLCAyMjUsIDExOSwgMSwgMjQxLCAKLSAgICAxOTcsIDIyNSwgMTE5LCAxLCAyMTYsIDIzMCwgMjI1LCAxMTksIDEsIDIxMCwgMjMzLCAyMjUsIDExOSwgMSwgMjM0LCAyNTAsIAotICAgIDIyNSwgMTE5LCAxLCAyMzMsIDk5LCAyMjUsIDExOSwgMSwgMjMxLCA2NSwgMjI1LCAxMTksIDEsIDIyNywgMTk0LCAyMjUsIAotICAgIDExOSwgMSwgMjIwLCAxNDQsIDIyNSwgMTE5LCAxLCAyNTQsIDE5NiwgMjI1LCAxMTksIDEsIDIyNSwgMjIxLCAyMjUsIDExOSwgCi0gICAgMSwgMjIyLCAyNSwgMjI1LCAxMTksIDEsIDIyNCwgMzksIDIyNSwgMTE5LCAxLCAyMjIsIDE4OSwgMjI1LCAxMTksIDEsIAotICAgIDIyMCwgMjAsIDIyNSwgMTE5LCAxLCAyMTcsIDQxLCAyMjUsIDExOSwgNTQsIDExMCwgMjI1LCAxMTksIDU0LCAyMTYsIDI0NywgCi0gICAgMjI1LCAxMTksIDU0LCAyMTUsIDczLCAyMjUsIDExOSwgNTQsIDEyMywgMjQwLCAyMTAsIDIyNSwgMTE5LCA1NCwgMTA1LCAKLSAgICAyMjUsIDExOSwgNTQsIDE1OCwgMjI1LCAxMTksIDIxMSwgMjA5LCAyMjAsIDEzNywgMjMyLCA1OSwgMSwgNjEsIDIzMiwgNTksIAotICAgIDEsIDI1MywgMTU4LCAyMzIsIDU5LCAxLCAyNDMsIDIwMiwgMjMyLCA1OSwgMSwgMjQ5LCA2MCwgMjMyLCA1OSwgMSwgNzUsIAotICAgIDIzMiwgNTksIDEsIDIxNCwgMTA1LCAyMzIsIDU5LCAxLCA3MywgMjMyLCA1OSwgMSwgMjExLCAxMTcsIDIzMiwgNTksIDEsIAotICAgIDIzNSwgMjMsIDIzMiwgNTksIDEsIDE1NiwgMjMyLCA1OSwgMSwgMTkzLCAyMzIsIDU5LCAxLCAyMzAsIDI1LCAyMzIsIDU5LCAKLSAgICAxLCA3NiwgMjMyLCA1OSwgMSwgMTUzLCAyMzIsIDU5LCAxLCAyMTgsIDIyNiwgMjMyLCA1OSwgMSwgMjE3LCAxNTIsIDIzMiwgCi0gICAgNTksIDEsIDcwLCAyMzIsIDU5LCAxLCAyNDUsIDYsIDIzMiwgNTksIDEsIDIyNCwgOTYsIDIzMiwgNTksIDEsIDIyMiwgOTEsIAotICAgIDIzMiwgNTksIDEsIDIxNSwgMTU5LCAyMzIsIDU5LCAxLCAyNTQsIDEyMywgMjMyLCA1OSwgMSwgMjQ1LCAxNTAsIDIzMiwgCi0gICAgNTksIDEsIDIzMiwgNjIsIDIzMiwgNTksIDEsIDIyOCwgMTExLCAyMzIsIDU5LCAxLCAyNTEsIDY2LCAyMzIsIDU5LCAyMTUsIAotICAgIDIyMiwgNzgsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCA2MSwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDc1LCAyMzEsIDQ4LCAKLSAgICAyNDEsIDE3NCwgMSwgNzMsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCA3NiwgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDE5MSwgCi0gICAgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIxMiwgNjUsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyNTIsIDE5MSwgMjMxLCA0OCwgCi0gICAgMjQxLCAxNzQsIDEsIDI1MiwgMTkwLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTkwLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgCi0gICAgMTg0LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMTk3LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjI5LCAyMjgsIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCAyMjksIDEwNywgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIyOSwgMTA2LCAyMzEsIDQ4LCAyNDEsIDE3NCwgCi0gICAgMSwgMjA1LCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjIzLCAxODcsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMzMsIDEzNSwgCi0gICAgMjMxLCA0OCwgMjQxLCAxNzQsIDEsIDIzNCwgMTMyLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjQxLCAxODksIDIzMSwgNDgsIAotICAgIDI0MSwgMTc0LCAxLCAyMDYsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjIsIDMzLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgCi0gICAgMjIxLCAxODEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAxNzYsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMjQsIDg4LCAyMzEsIAotICAgIDQ4LCAyNDEsIDE3NCwgMSwgMjE3LCAxMDUsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMTcsIDEwNCwgMjMxLCA0OCwgMjQxLCAKLSAgICAxNzQsIDEsIDIxNywgMjIsIDIzMSwgNDgsIDI0MSwgMTc0LCAxLCAyMTcsIDIxLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgCi0gICAgMTExLCAyMzEsIDQ4LCAyNDEsIDE3NCwgMSwgMjQ4LCAyMjEsIDIzMSwgNDgsIDI0MSwgMTc0LCAxNiwgMjEzLCAxNzAsIAotICAgIDIzMSwgNDgsIDI0MSwgMTc0LCAxNiwgMjEzLCAxNjksIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDYxLCAyMzEsIDQ4LCAyNDksIAotICAgIDk0LCAxLCA3NSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgNzMsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDc2LCAyMzEsIDQ4LCAKLSAgICAyNDksIDk0LCAxLCAxOTEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDIxMiwgNjUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDI1MiwgCi0gICAgMTkxLCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAxOTAsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDE4NCwgMjMxLCA0OCwgMjQ5LCAKLSAgICA5NCwgMSwgMTk3LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMjksIDEwNywgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjA1LCAyMzEsIAotICAgIDQ4LCAyNDksIDk0LCAxLCAyMzMsIDEzNSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjM0LCAxMzIsIDIzMSwgNDgsIDI0OSwgCi0gICAgOTQsIDEsIDI0MSwgMTg5LCAyMzEsIDQ4LCAyNDksIDk0LCAxLCAyMDYsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDI1NCwgMjMsIAotICAgIDIwNiwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjIxLCAxODEsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDE3NiwgMjMxLCA0OCwgCi0gICAgMjQ5LCA5NCwgMSwgMjI0LCA4OCwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjE3LCAxMDUsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIAotICAgIDIxNywgMjIsIDIzMSwgNDgsIDI0OSwgOTQsIDEsIDExMSwgMjMxLCA0OCwgMjQ5LCA5NCwgMSwgMjQ4LCAyMjEsIDIzMSwgCi0gICAgNDgsIDI0OSwgOTQsIDIzMiwgMTQ1LCAyMjIsIDIxNywgMjMxLCA0OCwgMjQ5LCA5NCwgMjMyLCAxNDUsIDIzNiwgNiwgMjM0LCAKLSAgICAxMjAsIDEsIDYxLCAyMzQsIDEyMCwgMjUsIDUsIDczLCAyMzQsIDEyMCwgMjUsIDUsIDcwLCAyMzQsIDEyMCwgMjUsIDUsIAotICAgIDE0OSwgMTUzLCAyMzQsIDEyMCwgMjUsIDUsIDc1LCAyMzQsIDEyMCwgMjUsIDUsIDc2LCAyMzQsIDEyMCwgMjUsIDIzMywgCi0gICAgMjMsIDc4LCAyMzQsIDEyMCwgNSwgNTIsIDIyMiwgMjM0LCA1MSwgMjM0LCAxMjAsIDUsIDI1NCwgNzUsIDIzNCwgMTIwLCA1LCAKLSAgICAyMTMsIDE0NywgMjM0LCAxMjAsIDEsIDE3NiwgMjM0LCAxMjAsIDEsIDIzNCwgMTMyLCAyMzQsIDEyMCwgMSwgMjQzLCAxMzUsIAotICAgIDIzNCwgMTIwLCAxLCAyNDIsIDI0OSwgMjM0LCAxMjAsIDEsIDI1MSwgMzMsIDIzNCwgMTIwLCAxLCAyNTAsIDE1NywgMjM0LCAKLSAgICAxMjAsIDEsIDIzNSwgMTQxLCAyMzQsIDEyMCwgMSwgMjI3LCAxNjUsIDIzNCwgMTIwLCAxLCAyMTUsIDE1NiwgMjM0LCAxMjAsIAotICAgIDEsIDIxNSwgMTQ0LCAyMzQsIDEyMCwgMSwgMjQ4LCAxMzUsIDIzNCwgMTIwLCAxLCAyNDgsIDExOSwgMjM0LCAxMjAsIDEsIAotICAgIDIyOCwgMTEwLCAyMzQsIDEyMCwgMSwgMjE3LCAxMDUsIDIzNCwgMTIwLCAxLCAyMTYsIDIwOCwgMjM0LCAxMjAsIDEsIDI0OCwgCi0gICAgMjIxLCAyMzQsIDEyMCwgMSwgMjQ4LCAyNSwgMjM0LCAxMjAsIDEsIDE5NywgMjM0LCAxMjAsIDEsIDE5MCwgMjM0LCAxMjAsIAotICAgIDEsIDIyNSwgMTQ3LCAyMzQsIDEyMCwgMSwgMjUyLCAxOTEsIDIzNCwgMTIwLCAxLCAyNTIsIDE4LCAyMzQsIDEyMCwgMSwgCi0gICAgMTg0LCAyMzQsIDEyMCwgMSwgMTkxLCAyMzQsIDEyMCwgMSwgMjA1LCAyMzQsIDEyMCwgMSwgMjMzLCAxMzUsIDIzNCwgMTIwLCAKLSAgICAxLCAyMTQsIDI3LCAyMzQsIDEyMCwgMSwgMjIwLCAxMDIsIDIzNCwgMTIwLCAxLCAyMTgsIDIyMywgMjM0LCAxMjAsIDEsIAotICAgIDIwNiwgMjM0LCAxMjAsIDEsIDIxMCwgMTE2LCAyMzQsIDEyMCwgMSwgMTYyLCAyMzQsIDEyMCwgMSwgMjM0LCA0NiwgMjM0LCAKLSAgICAxMjAsIDEsIDIxNSwgMTI0LCAyMzQsIDEyMCwgNSwgMjUyLCAxNDEsIDQ4LCAyMzQsIDEyMCwgNSwgMjUwLCAyMjEsIDIzNCwgCi0gICAgMTIwLCA1LCA1OSwgNTEsIDIzNCwgMTIwLCAyMTMsIDE1MiwgMjM0LCAxMjAsIDIxLCAxMTAsIDIzNCwgMTIwLCAyMSwgMTA1LCAKLSAgICAyMzQsIDEyMCwgMjEsIDE1OCwgMjM0LCAxMjAsIDIxLCAxNjEsIDIzNCwgMTIwLCA1NCwgMjE2LCAyNDcsIDIzNCwgMTIwLCAKLSAgICA1NCwgMjE1LCA3MywgMjM0LCAxMjAsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzQsIDEyMCwgNTQsIDEyMywgMjE2LCAxNDcsIAotICAgIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjQ3LCAxMjAsIDIzNCwgMTIwLCAyMjQsIDE0MSwgNCwgMjUwLCAzNSwgMjM0LCAxMjAsIAotICAgIDIyNCwgMTQxLCAyNTAsIDM1LCAyMzQsIDEyMCwgMjI0LCAxNDEsIDI0OSwgMTM3LCAxMzAsIDIzNCwgMTIwLCAyMjQsIDE0MSwgCi0gICAgMjMxLCAxODAsIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjMyLCAxMTUsIDIzNCwgMTIwLCAyMjQsIDE0MSwgMjQ4LCAxNzgsIAotICAgIDIzNCwgMTIwLCAyMjQsIDE0MSwgNTIsIDI0OCwgMTc4LCAyMzQsIDEyMCwgMjI0LCAxNDEsIDIzMiwgMjA3LCA1NSwgMjE5LCAKLSAgICAyOCwgMjU0LCAzOCwgMSwgMjQxLCAyMzgsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMzMsIDkzLCA1NSwgMjE5LCAyOCwgCi0gICAgMjU0LCAzOCwgMSwgMjQxLCAxOTUsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMzEsIDY1LCA1NSwgMjE5LCAyOCwgMjU0LCAKLSAgICAzOCwgMSwgMjI0LCAzNCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxMiwgMzAsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAKLSAgICAxLCAyMjAsIDIwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIzLCA2NywgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIAotICAgIDI1MiwgMjUsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTcsIDM2LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIxLCAKLSAgICAyMjYsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMzQsIDIyNSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIyNywgCi0gICAgMTk0LCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjM0LCAxMTYsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMjIsIDI0LCAKLSAgICA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjIxLCAyNDksIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDQsIDE1NCwgNTUsIAotICAgIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI1NCwgMTcwLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjUzLCAxNjEsIDU1LCAKLSAgICAyMTksIDI4LCAyNTQsIDM4LCAxLCAyNDgsIDIyLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgMSwgMjQyLCAyMDEsIDU1LCAyMTksIAotICAgIDI4LCAyNTQsIDM4LCAxLCAyNDgsIDE4OCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDI0MiwgMjM4LCA1NSwgMjE5LCAyOCwgCi0gICAgMjU0LCAzOCwgMSwgMjE2LCAyMjYsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTAsIDk2LCA1NSwgMjE5LCAyOCwgMjU0LCAKLSAgICAzOCwgMSwgMjQ4LCAxOSwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDEsIDIxMCwgMjMyLCA1NSwgMjE5LCAyOCwgMjU0LCAzOCwgCi0gICAgMSwgMjE2LCAxOTcsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxLCAyMTYsIDE3OCwgNTUsIDIxOSwgMjgsIDI1NCwgMzgsIDU0LCAKLSAgICAxMTAsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCA1NCwgMjQ0LCAxMTQsIDU1LCAyMTksIDI4LCAyNTQsIDM4LCAxMzIsIDIzNSwgCi0gICAgMjM4LCAyNTMsIDE3MiwgMSwgNjEsIDI1MywgMTcyLCAxLCAyNTUsIDczLCAyNTMsIDE3MiwgMSwgMjU0LCA3MywgMjUzLCAKLSAgICAxNzIsIDEsIDI1NSwgMzIsIDI1MywgMTcyLCAxLCAyNTQsIDEyMywgMjUzLCAxNzIsIDEsIDI1NSwgMzMsIDI1MywgMTcyLCAKLSAgICAxLCAyNTQsIDI0MywgMjUzLCAxNzIsIDEsIDI1NCwgMjM5LCAyNTMsIDE3MiwgMSwgNzUsIDI1MywgMTcyLCAxLCAyNDUsIAotICAgIDIwOSwgMjUzLCAxNzIsIDEsIDc2LCAyNTMsIDE3MiwgMSwgMjI2LCAxODMsIDI1MywgMTcyLCAxLCA3MywgMjUzLCAxNzIsIAotICAgIDEsIDIzNiwgMzMsIDI1MywgMTcyLCAxLCA3MCwgMjUzLCAxNzIsIDEsIDIxNCwgMTE4LCAyNTMsIDE3MiwgMSwgMjM0LCAKLSAgICAxODIsIDI1MywgMTcyLCAxLCAyMTEsIDE2MiwgMjUzLCAxNzIsIDEsIDIxMSwgMTI4LCAyNTMsIDE3MiwgMSwgMjExLCAxMzcsIAotICAgIDI1MywgMTcyLCAxLCAyNDMsIDYyLCAyNTMsIDE3MiwgMSwgMjQzLCAyNCwgMjUzLCAxNzIsIDEsIDI0MiwgMjM2LCAyNTMsIAotICAgIDE3MiwgMSwgMjUwLCAxOTAsIDI1MywgMTcyLCAxLCAyMzUsIDEyNiwgMjUzLCAxNzIsIDEsIDIxNywgMjIsIDI1MywgMTcyLCAKLSAgICAxLCAyMTYsIDE5NSwgMjUzLCAxNzIsIDEsIDI0OCwgOTAsIDI1MywgMTcyLCAxLCAyNDgsIDE3LCAyNTMsIDE3MiwgMSwgCi0gICAgMjE1LCAxNTEsIDI1MywgMTcyLCAxLCAyMjUsIDIyMSwgMjUzLCAxNzIsIDEsIDI0NCwgMTU0LCAyNTMsIDE3MiwgMSwgMjUyLCAKLSAgICA3NSwgMjUzLCAxNzIsIDEsIDI1MiwgMTQsIDI1MywgMTcyLCAxLCAyMjksIDY0LCAyNTMsIDE3MiwgMSwgMjI4LCAyMzksIAotICAgIDI1MywgMTcyLCAxLCAyMjgsIDI0MCwgMjUzLCAxNzIsIDEsIDIyOSwgMTA3LCAyNTMsIDE3MiwgMSwgMjI3LCAxNTYsIDI1MywgCi0gICAgMTcyLCAxLCAyMjgsIDEwNSwgMjUzLCAxNzIsIDEsIDIzMSwgOTEsIDI1MywgMTcyLCAxLCAyNDEsIDExNiwgMjUzLCAxNzIsIAotICAgIDEsIDIxMCwgMTY2LCAyNTMsIDE3MiwgMSwgMjExLCA0NywgMjUzLCAxNzIsIDEsIDIxMywgMjU1LCAyNTMsIDE3MiwgMSwgCi0gICAgMjIzLCAxMjgsIDI1MywgMTcyLCAxLCAyMzMsIDU4LCAyNTMsIDE3MiwgMSwgMjIxLCAxODEsIDI1MywgMTcyLCAxLCAyMTAsIAotICAgIDk0LCAyNTMsIDE3MiwgMSwgMjIwLCA2MywgMjUzLCAxNzIsIDEsIDIxMCwgNzQsIDI1MywgMTcyLCAxLCAyMTksIDE5OCwgCi0gICAgMjUzLCAxNzIsIDEsIDIxOCwgMTkzLCAyNTMsIDE3MiwgMSwgMjQxLCAyMzgsIDI1MywgMTcyLCAyNTUsIDIxLCA3OCwgMjE2LCAKLSAgICA3OSwgMTEzLCAxNzAsIDExNywgMTIzLCA1OSwgMjI0LCAxNDAsIDQsIDExMywgMTcwLCAxMTcsIDEyMywgNTksIDIyNCwgCi0gICAgMTQwLCAyMzMsIDg1LCAxMTMsIDE3MCwgMTE3LCAxMjMsIDU5LCAyMjQsIDE0MCwgMjMzLCA4NSwgMTIzLCA1OSwgMTE3LCAKLSAgICAxMTMsIDE3MCwgMjI0LCAxNDAsIDIzMywgODUsIDExMywgMjIyLCAyMzIsIDExNywgMTIzLCAyMjIsIDIzNCwgMjI0LCAxNDAsIAotICAgIDIzMywgODUsIDEyMywgMjIyLCAyMzQsIDExNywgMTEzLCAyMjIsIDIzMiwgMjI0LCAxNDAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgCi0gICAgMSwgMjU0LCAxNjgsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjUyLCAyNSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNDIsIAotICAgIDIwMSwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNDgsIDE4OCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyNDEsIDIzOCwgCi0gICAgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMTIsIDMwLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIxMCwgOTcsIDIzNSwgMjE4LCAKLSAgICAyMjUsIDI1NCwgMSwgMjQxLCAxOTUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjE2LCAyMjYsIDIzNSwgMjE4LCAyMjUsIAotICAgIDI1NCwgMSwgMjEwLCAyMzIsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjM0LCAyMjUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgCi0gICAgMjMzLCA5MywgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMzEsIDY1LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIyNywgMTk0LCAKLSAgICAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIyMSwgMjQ5LCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDI1MywgMTYyLCAyMzUsIAotICAgIDIxOCwgMjI1LCAyNTQsIDEsIDIyNSwgMjIxLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDEsIDIyMiwgMjQsIDIzNSwgMjE4LCAKLSAgICAyMjUsIDI1NCwgMSwgMjI0LCAzNCwgMjM1LCAyMTgsIDIyNSwgMjU0LCAxLCAyMjMsIDY3LCAyMzUsIDIxOCwgMjI1LCAyNTQsIAotICAgIDEsIDIyMCwgMjAsIDIzNSwgMjE4LCAyMjUsIDI1NCwgMSwgMjE3LCAzNiwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTEwLCAKLSAgICAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAxMDUsIDIzNSwgMjE4LCAyMjUsIDI1NCwgNTQsIDE1OCwgMjM1LCAyMTgsIDIyNSwgCi0gICAgMjU0LCA1NCwgMTYxLCAyMzUsIDIxOCwgMjI1LCAyNTQsIDU0LCAyMTYsIDI0NywgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgCi0gICAgMjE1LCA3MywgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgMTIzLCAyNDAsIDIxMCwgMjM1LCAyMTgsIDIyNSwgMjU0LCA1NCwgCi0gICAgMTIzLCAyMTYsIDE0NywgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI1NCwgMTY4LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjUyLCAKLSAgICAyNSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDI0MiwgMjAxLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjQ4LCAxODgsIDIzNSwgCi0gICAgMjE4LCAyMjYsIDcyLCAxLCAyNDEsIDIzOCwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIxMiwgMjksIDIzNSwgMjE4LCAyMjYsIAotICAgIDcyLCAxLCAyMTAsIDk3LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjQxLCAxOTUsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAKLSAgICAyMTYsIDIyNiwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIxMCwgMjMyLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjM0LCAyMjUsIAotICAgIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMzMsIDkzLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjMxLCA2NCwgMjM1LCAyMTgsIAotICAgIDIyNiwgNzIsIDEsIDIyNywgMTk0LCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjIxLCAyNDksIDIzNSwgMjE4LCAyMjYsIDcyLCAKLSAgICAxLCAyMjUsIDIyMSwgMjM1LCAyMTgsIDIyNiwgNzIsIDEsIDIyMiwgMjQsIDIzNSwgMjE4LCAyMjYsIDcyLCAxLCAyMjAsIAotICAgIDIwLCAyMzUsIDIxOCwgMjI2LCA3MiwgMSwgMjE3LCAzNiwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxMTAsIDIzNSwgMjE4LCAKLSAgICAyMjYsIDcyLCA1NCwgMTA1LCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDE1OCwgMjM1LCAyMTgsIDIyNiwgNzIsIDU0LCAxNjEsIAotICAgIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMjE2LCAyNDcsIDIzNSwgMjE4LCAyMjYsIDcyLCA1NCwgMjE1LCA3MywgMjM1LCAKLSAgICAyMTgsIDIyNiwgNzIsIDU0LCAxMjMsIDI0MCwgMjEwLCAyMzUsIDIxOCwgMjI2LCA3MiwgNTQsIDEyMywgMjE2LCAxNDcsIAotICAgIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCA2MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgNjEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIAotICAgIDI1NCwgMjQzLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgNzMsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDczLCA1NSwgMjAxLCAxLCAKLSAgICAyMTEsIDM3LCA3NSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDc2LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAyMzQsIAotICAgIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDIyNiwgMjM0LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU1LCAyNSwgNTUsIDIwMSwgMSwgCi0gICAgMjExLCAzNywgMjU1LCAyNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjQyLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAKLSAgICAyNTQsIDI0MiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjE2LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIxNiwgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjM3LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIzNywgNTUsIDIwMSwgCi0gICAgMSwgMjI2LCAxNDksIDI1NCwgMjU1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDI1NSwgNTUsIDIwMSwgMSwgMjI2LCAKLSAgICAxNDksIDI1NCwgMjQxLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxMiwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCAKLSAgICAxMiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1MywgMTY3LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTMsIDE2NywgNTUsIAotICAgIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjI0LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIyNCwgNTUsIDIwMSwgMSwgCi0gICAgMjI2LCAxNDksIDI1NCwgMjM1LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIzNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIAotICAgIDIyNiwgMjMzLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyMjYsIDIzMywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMTc4LCAKLSAgICA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDE3OCwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjM0LCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjQ1LCAxNjEsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNDUsIDE1OSwgNTUsIDIwMSwgMSwgMjI2LCAKLSAgICAxNDksIDI1NCwgMTIzLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjU0LCAyMzIsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgCi0gICAgMjMyLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxMzEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgMTMxLCA1NSwgCi0gICAgMjAxLCAxLCAyMjYsIDE0OSwgMjQ1LCAxNDcsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgMTQ3LCA1NSwgMjAxLCAxLCAKLSAgICAyMjYsIDE0OSwgMjQ1LCAxMTgsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI0NSwgMTE4LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAKLSAgICAyNTQsIDExNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTM4LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIzMSwgCi0gICAgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMTA4LCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjI2LCAxNzUsIDU1LCAyMDEsIAotICAgIDEsIDIyNiwgMTQ5LCAyNDAsIDExMywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI0NSwgMjE1LCA1NSwgMjAxLCAxLCAyMTEsIAotICAgIDM3LCAyNDUsIDIxNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgNDUsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1NCwgCi0gICAgNDUsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyMzUsIDE4MSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjM1LCAxODEsIDU1LCAKLSAgICAyMDEsIDEsIDIyNiwgMTQ5LCAyMjYsIDE1OSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjI2LCAxNTksIDU1LCAyMDEsIDEsIAotICAgIDIyNiwgMTQ5LCAyNTQsIDQxLCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDQxLCA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgCi0gICAgMjU0LCAyMzAsIDU1LCAyMDEsIDEsIDIyNiwgMTQ5LCAyNTMsIDIzNywgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjI4LCAKLSAgICA1NSwgMjAxLCAxLCAyMjYsIDE0OSwgMjUzLCAyMzEsIDU1LCAyMDEsIDEsIDIxMSwgMzcsIDI1MywgMjMxLCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjQ1LCA3NSwgNTUsIDIwMSwgMSwgMjExLCAzNywgMjQ1LCA3NSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIAotICAgIDI1MywgMjA2LCA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTMsIDIwNiwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDI1NCwgMjI1LCAKLSAgICA1NSwgMjAxLCAxLCAyMTEsIDM3LCAyNTQsIDIyNSwgNTUsIDIwMSwgMSwgMjI2LCAxNDksIDIyNiwgMTQwLCA1NSwgMjAxLCAKLSAgICAxLCAyMjYsIDE0OSwgMjUyLCAxMjUsIDIyMiwgMTI3LCAyMSwgMTEwLCAyMjIsIDEyNywgMjEsIDEwNSwgMjIyLCAxMjcsIAotICAgIDIxLCAxNTgsIDIyMiwgMTI3LCAyMSwgMTYxLCAyMjIsIDEyNywgMjEsIDE4OSwgMjIyLCAxMjcsIDIxLCAxOTQsIDIyMiwgCi0gICAgMTI3LCAyMSwgMTk4LCAyMjIsIDEyNywgMjEsIDE5NSwgMjIyLCAxMjcsIDIxLCAyMDAsIDIyMiwgMTI3LCA1NCwgMjE2LCAKLSAgICAyNDcsIDIyMiwgMTI3LCA1NCwgMjE1LCA3MywgMjIyLCAxMjcsIDU0LCAyMTYsIDE2MiwgMjIyLCAxMjcsIDU0LCAyNDQsIAotICAgIDE1LCAyMjIsIDEyNywgNTQsIDI0NCwgMTE0LCAyMjIsIDEyNywgNTQsIDIxOSwgMTExLCAyMjIsIDEyNywgNTQsIDIyMCwgCi0gICAgMTE2LCAyMjIsIDEyNywgNTQsIDI0NSwgMTg0LCAyMjIsIDEyNywgNTQsIDIyOCwgMTk1LCAyMjIsIDEyNywgNTQsIDEyMywgCi0gICAgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgMTEzLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAxMzQsIDI0MCwgMjEwLCAyMjIsIAotICAgIDEyNywgNTQsIDI0NCwgMTEsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDI0NCwgODEsIDI0MCwgMjEwLCAyMjIsIDEyNywgCi0gICAgNTQsIDIxOSwgMTI1LCAyNDAsIDIxMCwgMjIyLCAxMjcsIDU0LCAyMjAsIDEyMiwgMjQwLCAyMTAsIDIyMiwgMTI3LCA1NCwgCi0gICAgMjQ1LCAxOTMsIDI0MCwgMjEwLCAyMjIsIDEyNywgNTQsIDIyOCwgMjAwLCAyNDAsIDIxMCwgMjIyLCAxMjcsIDI0NCwgMiwgCi0gICAgMTIzLCAyNDIsIDI3LCAyMjIsIDEyNywgMjQ0LCAyLCAxMjMsIDIyNCwgMjEsIDIyMiwgMTI3LCAyNDQsIDIsIDEyMywgMjE2LCAKLSAgICAxNjgsIDIyMiwgMTI3LCAyNDQsIDIsIDExMywgMjE2LCAxNjYsIDExOCwgNSwgMjUwLCAyNTUsIDExOCwgNSwgMjU0LCA3NSwgCi0gICAgMTE4LCA1LCAyMTMsIDE0NywgMTE4LCA1LCAyMzUsIDEwMiwgMTE4LCA1LCAyMTQsIDE2MSwgMTE4LCAxLCA2MSwgMTE4LCAxLCAKLSAgICAyNTUsIDczLCAxMTgsIDEsIDczLCAxMTgsIDEsIDIzNiwgMzMsIDExOCwgMSwgNzAsIDExOCwgMSwgMjE0LCAxMTgsIDExOCwgCi0gICAgMSwgMTQ5LCAxNTMsIDExOCwgMSwgMTQ5LCAyMjIsIDE4MCwgMTE4LCAxLCAxNDksIDE1NiwgMTE4LCAxLCAxNDksIDIzMiwgCi0gICAgMTg1LCAxMTgsIDEsIDc1LCAxMTgsIDEsIDI1NCwgMjAxLCAxMTgsIDEsIDc2LCAxMTgsIDEsIDI1MywgMTkyLCAxMTgsIDEsIAotICAgIDE3NiwgMTE4LCAxLCAyMzQsIDEzMiwgMTE4LCAxLCAyNDMsIDEzNSwgMTE4LCAxLCAyNDIsIDI0OSwgMTE4LCAxLCAyMjksIAotICAgIDc3LCAxMTgsIDEsIDI1MSwgMzMsIDExOCwgMSwgMjUwLCAxNTcsIDExOCwgMSwgMjM1LCAxNDEsIDExOCwgMSwgMjM1LCAKLSAgICAxMTQsIDExOCwgMSwgMjI3LCAxNjUsIDExOCwgMSwgMjE1LCAxNTYsIDExOCwgMSwgMjE1LCAxNDQsIDExOCwgMSwgMjQ4LCAKLSAgICAxMzUsIDExOCwgMSwgMjQ4LCAxMTksIDExOCwgMSwgMjI4LCAxMTAsIDExOCwgMSwgMjE3LCAxMDUsIDExOCwgMSwgMjE2LCAKLSAgICAyMDgsIDExOCwgMSwgMjQ4LCAyMjEsIDExOCwgMSwgMjQ4LCAyNSwgMTE4LCAxLCAxOTcsIDExOCwgMSwgMTkwLCAxMTgsIDEsIAotICAgIDIyNSwgMTQ3LCAxMTgsIDEsIDI1MiwgMTkxLCAxMTgsIDEsIDI1MiwgMTgsIDExOCwgMSwgMTg0LCAxMTgsIDEsIDE5MSwgCi0gICAgMTE4LCAxLCAyMDUsIDExOCwgMSwgMjMzLCAxMzUsIDExOCwgMSwgMjE0LCAyNywgMTE4LCAxLCAyMjAsIDEwMiwgMTE4LCAxLCAKLSAgICAyMTgsIDIyMywgMTE4LCAxLCAyMDYsIDExOCwgMSwgMTYyLCAxMTgsIDEsIDIzMiwgMTg0LCAxMTgsIDEsIDU1LCAzNiwgCi0gICAgMjMyLCAxNzUsIDExOCwgMSwgNTUsIDM2LCAyMjIsIDE3OSwgMTE4LCAxLCA1NSwgMzYsIDIyOCwgOTIsIDExOCwgMjUsIDUsIAotICAgIDI1NSwgNzMsIDExOCwgMjUsIDUsIDI1MiwgMTUsIDI1NSwgNzMsIDExOCwgMjUsIDUsIDczLCAxMTgsIDI1LCA1LCAyMzYsIAotICAgIDMzLCAxMTgsIDI1LCA1LCA3MCwgMTE4LCAyNSwgNSwgMjE0LCAxMTgsIDExOCwgMjUsIDUsIDE0OSwgMTUzLCAxMTgsIDI1LCAKLSAgICA1LCAxNDksIDIyMiwgMTgwLCAxMTgsIDI1LCA1LCAxNDksIDE1NiwgMTE4LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTE4LCAKLSAgICAyNSwgNSwgNzUsIDExOCwgMjUsIDUsIDI1NCwgMjAxLCAxMTgsIDI1LCA1LCA3NiwgMTE4LCAyNSwgNSwgMjUzLCAxOTIsIAotICAgIDExOCwgMjEzLCAxNTIsIDExOCwgMjQ4LCAxNzgsIDExOCwgNTIsIDI0OCwgMTc4LCAxMTgsIDIyNCwgMTQxLCAyNDcsIDEyMCwgCi0gICAgMTE4LCAyMjQsIDE0MSwgNTIsIDI0NywgMTIwLCAxMTgsIDIyNCwgMTQxLCAyMzIsIDIxMywgMTE4LCAyMjQsIDE0MSwgMjQ5LCAKLSAgICAxMzcsIDEzMCwgMTE4LCAyMjQsIDE0MSwgMjMyLCAxMTUsIDExOCwgNTQsIDExMCwgMTE4LCA1NCwgMTA1LCAxMTgsIDU0LCAKLSAgICAxNTgsIDExOCwgNTQsIDE2MSwgMTE4LCA1NCwgMTg5LCAxMTgsIDU0LCAxOTQsIDExOCwgNTQsIDE5OCwgMTE4LCA1NCwgCi0gICAgMTk1LCAxMTgsIDU0LCAyMDAsIDExOCwgNTQsIDIxNiwgMjQ3LCAxMTgsIDU0LCAyMTUsIDczLCAxMTgsIDU0LCAyMTYsIAotICAgIDE2MiwgMTE4LCA1NCwgMjQ0LCAxNSwgMTE4LCA1NCwgMjQ0LCAxMTQsIDExOCwgNTQsIDIxOSwgMTExLCAxMTgsIDU0LCAKLSAgICAyMjAsIDExNiwgMTE4LCA1NCwgMjQ1LCAxODQsIDExOCwgNTQsIDIyOCwgMTk1LCAxMTgsIDU0LCAxMjMsIDI0MCwgMjEwLCAKLSAgICAxMTgsIDU0LCAxMjMsIDIxNiwgMTQ3LCAxMTgsIDIxLCAyMTAsIDg2LCAxMTgsIDIxLCAxMTAsIDExOCwgMjEsIDEwNSwgCi0gICAgMTE4LCAyMSwgMTU4LCAxMTgsIDIxLCAxNjEsIDExOCwgMjEsIDE4OSwgMTE4LCAyMSwgMTk0LCAxMTgsIDIxLCAxOTgsIAotICAgIDExOCwgMjEsIDE5NSwgMTE4LCAyMSwgMjAwLCAyMzQsIDI0NCwgNSwgMjUwLCAyNTUsIDIzNCwgMjQ0LCA1LCAyNTQsIDc1LCAKLSAgICAyMzQsIDI0NCwgNSwgMjEzLCAxNDcsIDIzNCwgMjQ0LCAxLCA2MSwgMjM0LCAyNDQsIDEsIDI1NSwgNzMsIDIzNCwgMjQ0LCAKLSAgICAxLCA3MywgMjM0LCAyNDQsIDEsIDIzNiwgMzMsIDIzNCwgMjQ0LCAxLCA3MCwgMjM0LCAyNDQsIDEsIDIxNCwgMTE4LCAyMzQsIAotICAgIDI0NCwgMSwgNzUsIDIzNCwgMjQ0LCAxLCAyNTQsIDIwMSwgMjM0LCAyNDQsIDEsIDc2LCAyMzQsIDI0NCwgMSwgMjUzLCAKLSAgICAxOTIsIDIzNCwgMjQ0LCAxLCAxNzYsIDIzNCwgMjQ0LCAxLCAyMzQsIDEzMiwgMjM0LCAyNDQsIDEsIDI0MywgMTM1LCAyMzQsIAotICAgIDI0NCwgMSwgMjQyLCAyNDksIDIzNCwgMjQ0LCAxLCAyMjksIDc3LCAyMzQsIDI0NCwgMSwgMjUxLCAzMywgMjM0LCAyNDQsIAotICAgIDEsIDI1MCwgMTU3LCAyMzQsIDI0NCwgMSwgMjM1LCAxNDEsIDIzNCwgMjQ0LCAxLCAyMzUsIDExNCwgMjM0LCAyNDQsIDEsIAotICAgIDIyNywgMTY1LCAyMzQsIDI0NCwgMSwgMjE1LCAxNTYsIDIzNCwgMjQ0LCAxLCAyMTUsIDE0NCwgMjM0LCAyNDQsIDEsIDI0OCwgCi0gICAgMTM1LCAyMzQsIDI0NCwgMSwgMjQ4LCAxMjQsIDIzNCwgMjQ0LCAxLCAyNDgsIDExOSwgMjM0LCAyNDQsIDEsIDIyMywgMzksIAotICAgIDIzNCwgMjQ0LCAxLCAyMjgsIDExMCwgMjM0LCAyNDQsIDEsIDIxNywgMTA1LCAyMzQsIDI0NCwgMSwgMjE2LCAyMDgsIDIzNCwgCi0gICAgMjQ0LCAxLCAyNDgsIDIyMSwgMjM0LCAyNDQsIDEsIDI0OCwgMjUsIDIzNCwgMjQ0LCAxLCAxOTcsIDIzNCwgMjQ0LCAxLCAKLSAgICAxOTAsIDIzNCwgMjQ0LCAxLCAyMjUsIDE0NywgMjM0LCAyNDQsIDEsIDI1MiwgMTkxLCAyMzQsIDI0NCwgMSwgMjUyLCAxOCwgCi0gICAgMjM0LCAyNDQsIDEsIDE4NCwgMjM0LCAyNDQsIDEsIDE5MSwgMjM0LCAyNDQsIDEsIDIwNSwgMjM0LCAyNDQsIDEsIDIzMywgCi0gICAgMTM1LCAyMzQsIDI0NCwgMSwgMjE0LCAyNywgMjM0LCAyNDQsIDEsIDIyMCwgMTAyLCAyMzQsIDI0NCwgMSwgMjE4LCAyMjMsIAotICAgIDIzNCwgMjQ0LCAxLCAyMDYsIDIzNCwgMjQ0LCAxLCAxNjIsIDIzNCwgMjQ0LCAyNSwgNSwgMjU1LCA3MywgMjM0LCAyNDQsIAotICAgIDI1LCA1LCA3MywgMjM0LCAyNDQsIDI1LCA1LCAyMzYsIDMzLCAyMzQsIDI0NCwgMjUsIDUsIDcwLCAyMzQsIDI0NCwgMjUsIAotICAgIDUsIDIxNCwgMTE4LCAyMzQsIDI0NCwgMjUsIDUsIDc1LCAyMzQsIDI0NCwgMjUsIDUsIDI1NCwgMjAxLCAyMzQsIDI0NCwgCi0gICAgMjUsIDUsIDc2LCAyMzQsIDI0NCwgMjUsIDUsIDI1MywgMTkyLCAyMzQsIDI0NCwgNSwgMjEzLCAxNTIsIDIzNCwgMjQ0LCA1LCAKLSAgICAyMjcsIDIwNSwgMjM0LCAyNDQsIDI1NSwgMjEsIDUwLCAyMzQsIDI0NCwgMjQ1LCAxMjEsIDUwLCAyMzQsIDI0NCwgNTQsIAotICAgIDUwLCAyMzQsIDI0NCwgMjIxLCAxNzMsIDc4LCAyMzQsIDI0NCwgNTIsIDIyMSwgMTczLCA3OCwgMjM0LCAyNDQsIDI0OCwgCi0gICAgMTc4LCAyMzQsIDI0NCwgNTIsIDI0OCwgMTc4LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjIsIDE4LCAyMTksIDM2LCAyMTksIAotICAgIDQ0LCAxLCAyMTcsIDgwLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyNTIsIDE2OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjUxLCAKLSAgICAyMywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQ4LCAyMDMsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0MywgMTIwLCAyMTksIAotICAgIDM2LCAyMTksIDQ0LCAxLCAyMzEsIDIxMCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI5LCA3NCwgMjE5LCAzNiwgMjE5LCA0NCwgCi0gICAgMSwgMjMzLCAxMTIsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIyOSwgMjEzLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMTQsIDI0LCAKLSAgICAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjYsIDczLCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMTEsIDg0LCAyMTksIDM2LCAyMTksIAotICAgIDQ0LCAxLCAyMjMsIDE2OCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjQyLCAzNywgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjM0LCAKLSAgICAyNDgsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDIzNSwgMTM2LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMjcsIDE2MiwgMjE5LCAKLSAgICAzNiwgMjE5LCA0NCwgMSwgMjU0LCAyMDksIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0NSwgMjA3LCAyMTksIDM2LCAyMTksIAotICAgIDQ0LCAxLCAyMzYsIDM0LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMTQsIDIwOCwgMjE5LCAzNiwgMjE5LCA0NCwgMSwgMjI2LCAKLSAgICAyMjIsIDIxOSwgMzYsIDIxOSwgNDQsIDEsIDI0NSwgMTk3LCAyMTksIDM2LCAyMTksIDQ0LCAxLCAyMzEsIDIyMywgMjE5LCAKLSAgICAzNiwgMjE5LCA0NCwgMjEsIDIxMCwgODYsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxMTAsIDIxOSwgMzYsIDIxOSwgNDQsIAotICAgIDIxLCAxMDUsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxNTgsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxNjEsIDIxOSwgMzYsIAotICAgIDIxOSwgNDQsIDIxLCAxODksIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxOTQsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxOTgsIAotICAgIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAxOTUsIDIxOSwgMzYsIDIxOSwgNDQsIDIxLCAyMDAsIDI1MCwgMTUxLCA1LCAyNTAsIAotICAgIDI1NSwgMjUwLCAxNTEsIDUsIDI1NCwgNzUsIDI1MCwgMTUxLCA1LCAyMTMsIDE0NywgMjUwLCAxNTEsIDEsIDI1NSwgNzMsIAotICAgIDI1MCwgMTUxLCAxLCA3MywgMjUwLCAxNTEsIDEsIDcwLCAyNTAsIDE1MSwgMSwgNzUsIDI1MCwgMTUxLCAxLCAyMzUsIDEwLCAKLSAgICAyNTAsIDE1MSwgMSwgMjM0LCAxMzEsIDI1MCwgMTUxLCAxLCAyNDMsIDEzMiwgMjUwLCAxNTEsIDEsIDI0MiwgMjQ4LCAyNTAsIAotICAgIDE1MSwgMSwgMjI5LCA3NiwgMjUwLCAxNTEsIDEsIDI1MSwgMzIsIDI1MCwgMTUxLCAxLCAyNTAsIDE1NiwgMjUwLCAxNTEsIAotICAgIDEsIDIzNSwgMTQwLCAyNTAsIDE1MSwgMSwgMjM1LCAxMTMsIDI1MCwgMTUxLCAxLCAyMjcsIDE2NCwgMjUwLCAxNTEsIDEsIAotICAgIDIxNSwgMTU1LCAyNTAsIDE1MSwgMSwgMjE1LCAxNDMsIDI1MCwgMTUxLCAxLCAyNDgsIDEzNCwgMjUwLCAxNTEsIDEsIDI0OCwgCi0gICAgMTE4LCAyNTAsIDE1MSwgMSwgMjI4LCAxMDksIDI1MCwgMTUxLCAxLCAyMTcsIDEwMSwgMjUwLCAxNTEsIDEsIDIxNiwgMjA3LCAKLSAgICAyNTAsIDE1MSwgMSwgMjQ4LCAyMjAsIDI1MCwgMTUxLCAxLCAyNDgsIDI0LCAyNTAsIDE1MSwgMSwgMjI5LCAyMjUsIDI1MCwgCi0gICAgMTUxLCAxLCAyMjYsIDg5LCAyNTAsIDE1MSwgMSwgMjI1LCAxNDYsIDI1MCwgMTUxLCAxLCAyNTIsIDE4OSwgMjUwLCAxNTEsIAotICAgIDEsIDI1MiwgMTcsIDI1MCwgMTUxLCAxLCAyMzEsIDIzNywgMjUwLCAxNTEsIDEsIDIxMCwgMTY3LCAyNTAsIDE1MSwgMSwgCi0gICAgMjExLCAxMDMsIDI1MCwgMTUxLCAxLCAyMjMsIDE4NCwgMjUwLCAxNTEsIDEsIDIzMywgMTM0LCAyNTAsIDE1MSwgMSwgMjEyLCAKLSAgICA2NCwgMjUwLCAxNTEsIDEsIDIyMiwgMzEsIDI1MCwgMTUxLCAxLCAyNDIsIDQ2LCAyNTAsIDE1MSwgMjUsIDUsIDYxLCAyNTAsIAotICAgIDE1MSwgMjUsIDUsIDczLCAyNTAsIDE1MSwgMjUsIDUsIDIzNiwgMzMsIDI1MCwgMTUxLCAyNSwgNSwgNzAsIDI1MCwgMTUxLCAKLSAgICAyNSwgNSwgMjE0LCAxMTgsIDI1MCwgMTUxLCAyNSwgNSwgNzUsIDI1MCwgMTUxLCAyNSwgNSwgMjU0LCAyMDEsIDI1MCwgCi0gICAgMTUxLCAyNSwgNSwgNzYsIDI1MCwgMTUxLCAyNSwgNSwgMjUzLCAxOTIsIDI1MCwgMTUxLCAyNSwgNSwgMjI2LCAyMTksIAotICAgIDI1MCwgMTUxLCAxNDQsIDc4LCAyNTAsIDE1MSwgMjUzLCAxOTMsIDc4LCAyNTAsIDE1MSwgMjEzLCAxNTIsIDI1MCwgMTUxLCAKLSAgICAyMzEsIDIzNSwgMjUwLCAxNTEsIDIxLCAyMTAsIDg2LCAyNTAsIDE1MSwgMjEsIDExMCwgMjUwLCAxNTEsIDIxLCAxMDUsIAotICAgIDI1MCwgMTUxLCAyMSwgMTU4LCAyNTAsIDE1MSwgMjEsIDE2MSwgMjUwLCAxNTEsIDIxLCAxODksIDI1MCwgMTUxLCAyMSwgCi0gICAgMTk0LCAyNTAsIDE1MSwgMjEsIDE5OCwgMjUwLCAxNTEsIDIxLCAxOTUsIDI1MCwgMTUxLCAyMSwgMjAwLCAyNTAsIDE1MSwgCi0gICAgMjIxLCAxNzMsIDc4LCAyNTAsIDE1MSwgMjQ4LCAxNzgsIDI1MCwgMTUxLCA1MiwgMjQ4LCAxNzgsIDI1MCwgMTUxLCAyMjQsIAotICAgIDEzLCA3OCwgMTc0LCA1LCAyNTAsIDI1NSwgMTc0LCA1LCAyNTQsIDc1LCAxNzQsIDUsIDIxMywgMTQ3LCAxNzQsIDEsIDYxLCAKLSAgICAxNzQsIDEsIDI1NSwgNzMsIDE3NCwgMSwgNzMsIDE3NCwgMSwgMjM2LCAzMywgMTc0LCAxLCA3MCwgMTc0LCAxLCAyMTQsIAotICAgIDExOCwgMTc0LCAxLCAxNDksIDE1MywgMTc0LCAxLCAxNDksIDIyMiwgMTgwLCAxNzQsIDEsIDE0OSwgMTU2LCAxNzQsIDEsIAotICAgIDE0OSwgMjMyLCAxODUsIDE3NCwgMSwgNzUsIDE3NCwgMSwgMjU0LCAyMDEsIDE3NCwgMSwgNzYsIDE3NCwgMSwgMjUzLCAKLSAgICAxOTIsIDE3NCwgMSwgMTc2LCAxNzQsIDEsIDIzNCwgMTMyLCAxNzQsIDEsIDI0MywgMTM1LCAxNzQsIDEsIDI0MiwgMjQ5LCAKLSAgICAxNzQsIDEsIDIyOSwgNzcsIDE3NCwgMSwgMjUxLCAzMywgMTc0LCAxLCAyNTAsIDE1NywgMTc0LCAxLCAyMzUsIDE0MSwgCi0gICAgMTc0LCAxLCAyMzUsIDExNCwgMTc0LCAxLCAyMjcsIDE2NSwgMTc0LCAxLCAyMTUsIDE1NiwgMTc0LCAxLCAyMTUsIDE0NCwgCi0gICAgMTc0LCAxLCAyNDgsIDEzNSwgMTc0LCAxLCAyNDgsIDExOSwgMTc0LCAxLCAyMjgsIDExMCwgMTc0LCAxLCAyMTcsIDEwNSwgCi0gICAgMTc0LCAxLCAyMTYsIDIwOCwgMTc0LCAxLCAyNDgsIDIyMSwgMTc0LCAxLCAyNDgsIDI1LCAxNzQsIDEsIDE5NywgMTc0LCAxLCAKLSAgICAxOTAsIDE3NCwgMSwgMjI1LCAxNDcsIDE3NCwgMSwgMjUyLCAxOTEsIDE3NCwgMSwgMjUyLCAxOCwgMTc0LCAxLCAxODQsIAotICAgIDE3NCwgMSwgMTkxLCAxNzQsIDEsIDIwNSwgMTc0LCAxLCAyMzMsIDEzNSwgMTc0LCAxLCAyMzIsIDE4NCwgMTc0LCAxLCAKLSAgICAyMTQsIDI3LCAxNzQsIDEsIDIyMCwgMTAyLCAxNzQsIDEsIDIxOCwgMjIzLCAxNzQsIDEsIDIwNiwgMTc0LCAxLCAxNjIsIAotICAgIDE3NCwgMjUsIDUsIDI1NSwgNzMsIDE3NCwgMjUsIDUsIDczLCAxNzQsIDI1LCA1LCAyMzYsIDMzLCAxNzQsIDI1LCA1LCA3MCwgCi0gICAgMTc0LCAyNSwgNSwgMjE0LCAxMTgsIDE3NCwgMjUsIDUsIDE0OSwgMTUzLCAxNzQsIDI1LCA1LCAxNDksIDIyMiwgMTgwLCAKLSAgICAxNzQsIDI1LCA1LCAxNDksIDE1NiwgMTc0LCAyNSwgNSwgMTQ5LCAyMzIsIDE4NSwgMTc0LCAyNSwgNSwgNzUsIDE3NCwgMjUsIAotICAgIDUsIDI1NCwgMjAxLCAxNzQsIDI1LCA1LCA3NiwgMTc0LCAyNSwgNSwgMjUzLCAxOTIsIDE3NCwgNSwgMjEzLCAxNTIsIDE3NCwgCi0gICAgNSwgMjUzLCAxNzUsIDE3NCwgNSwgMjM1LCAxMDIsIDE3NCwgNSwgMjE0LCAxNjEsIDE3NCwgMjI2LCAyMDQsIDE3NCwgMjQ4LCAKLSAgICAxNzgsIDE3NCwgNTIsIDI0OCwgMTc4LCAxNzQsIDI1NSwgMjEsIDUwLCAxNzQsIDIyMCwgMTM3LCAxNzQsIDIxLCAyMTAsIAotICAgIDg2LCAxNzQsIDIxLCAxMTAsIDE3NCwgMjEsIDEwNSwgMTc0LCAyMSwgMTU4LCAxNzQsIDIxLCAxNjEsIDE3NCwgMjEsIDE4OSwgCi0gICAgMTc0LCAyMSwgMTk0LCAxNzQsIDIxLCAxOTgsIDE3NCwgMjEsIDE5NSwgMTc0LCAyMSwgMjAwLCAyMTcsIDY5LCAxLCA2MSwgCi0gICAgMjE3LCA2OSwgMSwgMjU1LCA3MywgMjE3LCA2OSwgMSwgNzMsIDIxNywgNjksIDEsIDIzNiwgMzMsIDIxNywgNjksIDEsIDcwLCAKLSAgICAyMTcsIDY5LCAxLCAyMTQsIDExOCwgMjE3LCA2OSwgMSwgNzUsIDIxNywgNjksIDEsIDI1NCwgMjAxLCAyMTcsIDY5LCAxLCAKLSAgICA3NiwgMjE3LCA2OSwgMSwgMjUzLCAxOTIsIDIxNywgNjksIDEsIDE3NiwgMjE3LCA2OSwgMSwgMjM0LCAxMzIsIDIxNywgNjksIAotICAgIDEsIDI0MywgMTM1LCAyMTcsIDY5LCAxLCAyNDIsIDI0OSwgMjE3LCA2OSwgMSwgMjI5LCA3NywgMjE3LCA2OSwgMSwgMjUxLCAKLSAgICAzMywgMjE3LCA2OSwgMSwgMjUwLCAxNTcsIDIxNywgNjksIDEsIDIzNSwgMTQxLCAyMTcsIDY5LCAxLCAyMzUsIDExNCwgCi0gICAgMjE3LCA2OSwgMSwgMjI3LCAxNjUsIDIxNywgNjksIDEsIDIxNSwgMTU2LCAyMTcsIDY5LCAxLCAyMTUsIDE0NCwgMjE3LCAKLSAgICA2OSwgMSwgMjQ4LCAxMzUsIDIxNywgNjksIDEsIDI0OCwgMTE5LCAyMTcsIDY5LCAxLCAyMjgsIDExMCwgMjE3LCA2OSwgMSwgCi0gICAgMjE3LCAxMDUsIDIxNywgNjksIDEsIDIxNiwgMjA4LCAyMTcsIDY5LCAxLCAyNDgsIDIyMSwgMjE3LCA2OSwgMSwgMjQ4LCAKLSAgICAyNSwgMjE3LCA2OSwgMSwgMTk3LCAyMTcsIDY5LCAxLCAxOTAsIDIxNywgNjksIDEsIDIyNSwgMTQ3LCAyMTcsIDY5LCAxLCAKLSAgICAyNTIsIDE5MSwgMjE3LCA2OSwgMSwgMjUyLCAxOCwgMjE3LCA2OSwgMSwgMTg0LCAyMTcsIDY5LCAxLCAxOTEsIDIxNywgNjksIAotICAgIDEsIDIwNSwgMjE3LCA2OSwgMSwgMjMzLCAxMzUsIDIxNywgNjksIDEsIDIxNCwgMjcsIDIxNywgNjksIDEsIDIyMCwgMTAyLCAKLSAgICAyMTcsIDY5LCAxLCAyMDYsIDIxNywgNjksIDEsIDE2MiwgMjE3LCA2OSwgMSwgMjIyLCAxNzksIDIxNywgNjksIDUsIDI1NCwgCi0gICAgNzUsIDIxNywgNjksIDUsIDIxMywgMTQ3LCAyMTcsIDY5LCAyNSwgNSwgMjU1LCA3MywgMjE3LCA2OSwgMjUsIDUsIDczLCAKLSAgICAyMTcsIDY5LCAyNSwgNSwgMjM2LCAzMywgMjE3LCA2OSwgMjUsIDUsIDcwLCAyMTcsIDY5LCAyNSwgNSwgMjE0LCAxMTgsIAotICAgIDIxNywgNjksIDI1LCA1LCA3NSwgMjE3LCA2OSwgMjUsIDUsIDI1NCwgMjAxLCAyMTcsIDY5LCAyNSwgNSwgNzYsIDIxNywgCi0gICAgNjksIDI1LCA1LCAyNTMsIDE5MiwgMjE3LCA2OSwgNSwgMjEzLCAxNTIsIDIxNywgNjksIDUsIDIyNywgMjA1LCAyMTcsIDY5LCAKLSAgICAyMSwgMjEwLCA4NiwgMjE3LCA2OSwgMjEsIDExMCwgMjE3LCA2OSwgMjEsIDEwNSwgMjE3LCA2OSwgMjEsIDE1OCwgMjE3LCAKLSAgICA2OSwgMjEsIDE2MSwgMjE3LCA2OSwgMjEsIDE4OSwgMjE3LCA2OSwgMjEsIDE5NCwgMjE3LCA2OSwgMjEsIDE5OCwgMjE3LCAKLSAgICA2OSwgMjEsIDE5NSwgMjE3LCA2OSwgMjEsIDIwMCwgMTUsIDUsIDYxLCAxNSwgNSwgMTE1LCAzMCwgNjEsIDE1LCA1LCAxMTUsIAotICAgIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDExNSwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDExNSwgMzAsIDE2MiwgCi0gICAgMTUsIDUsIDExNSwgMzAsIDIzNiwgMzUsIDE1LCA1LCAxMTUsIDMwLCAyMzMsIDExNiwgMjQyLCA5NCwgMTUsIDUsIDExNSwgCi0gICAgMzAsIDIzMCwgNjEsIDE1LCA1LCAxMTUsIDMwLCAyMjIsIDIxLCAxNSwgNSwgMjU1LCA3NSwgMTUsIDUsIDI1NSwgMjUsIDE1LCAKLSAgICA1LCAyNTUsIDI2LCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyNTUsIDI2LCAzMCwgMjQ2LCA2NywgMjQyLCA5NCwgMTUsIDUsIAotICAgIDI1NSwgMjYsIDMwLCAyNDMsIDExOCwgMTUsIDUsIDI1NSwgMjYsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAKLSAgICAyNTUsIDI2LCAzMCwgMTYyLCAxNSwgNSwgMjU1LCAyNiwgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyNTUsIDI2LCAKLSAgICAzMCwgMjM2LCA5LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDIzMywgMTE3LCAxNSwgNSwgMjU1LCAyNiwgMzAsIDIyMCwgNDgsIAotICAgIDE1LCA1LCAyNTUsIDI2LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNzAsIDE1LCA1LCAyNTUsIDI2LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjU1LCAyMywgMTUsIDUsIDI1NSwgMjQsIDMwLCAyNTIsIDE2MCwgMTUsIDUsIDI1NSwgMjQsIDMwLCAyNDMsIDEwNSwgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyNTUsIDI0LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgNSwgMjU1LCAyNCwgMzAsIDIyMCwgCi0gICAgMTAwLCAxNSwgNSwgMjU1LCAyNCwgMzAsIDIxNywgNzIsIDE1LCA1LCAyNTQsIDI1NSwgMTUsIDUsIDI1NCwgMTg2LCAxNSwgCi0gICAgNSwgMjU0LCAxODcsIDMwLCAyNDUsIDg3LCAxNSwgNSwgMjU0LCAxODcsIDMwLCAyMjAsIDEwLCA5NiwgMjQyLCAxOTAsIDE1LCAKLSAgICA1LCAyNTQsIDE3OCwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjU0LCAxNzgsIDE1LCA1LCAyNTQsIDE3OSwgMzAsIDI0NywgCi0gICAgMjE2LCAxNSwgNSwgMjU0LCAxNzksIDMwLCAyNDIsIDE5MCwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMTYyLCAxNSwgNSwgMjU0LCAKLSAgICAxNzksIDMwLCAyMzQsIDI1NSwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjM0LCA5MiwgMTUsIDUsIDI1NCwgMTc5LCAzMCwgCi0gICAgMjIwLCA2MywgMTUsIDUsIDI1NCwgMTc5LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyNTQsIDE3NSwgMTUsIDUsIDI1NCwgMTY4LCAKLSAgICAxNSwgNSwgMjU0LCAxMzIsIDE1LCA1LCAyNTQsIDEzMywgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNTQsIDEyMywgMTUsIDUsIAotICAgIDI1NCwgMTI0LCAxMTcsIDI1NCwgMTIzLCAxNSwgNSwgMjU0LCAxMjQsIDEzNCwgMjE2LCA4NSwgMTUsIDUsIDI1NCwgMTI0LCAKLSAgICA5NiwgMjI5LCAyMTcsIDIyNiwgMTY0LCAyNTQsIDEyNCwgOTYsIDIyOSwgMjE2LCAxNSwgNSwgMjU0LCAxMjQsIDk2LCAyMjksIAotICAgIDIxNywgMjE4LCAyMzMsIDE1LCA1LCAyNTQsIDk0LCAxNSwgNSwgMjU0LCA2NywgMTUsIDUsIDI1NCwgMzUsIDE1LCA1LCAKLSAgICAyNTQsIDM2LCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyNTQsIDgsIDE1LCA1LCAyNTMsIDIzNiwgMTUsIDUsIDI1MywgMjMxLCAKLSAgICAxNSwgNSwgMjUzLCAyMzIsIDIxMCwgNDAsIDIxNiwgMjM5LCAxNSwgNSwgMjUzLCAyMzIsIDIzNSwgMywgMjE2LCAyMzksIAotICAgIDE1LCA1LCAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMiwgMjE1LCAxMTQsIDExNywgMjE1LCAxMTQsIDIxNSwgMTE0LCAxMTcsIAotICAgIDIxNSwgMTE0LCAyMjYsIDIxLCAxNSwgNSwgMjUzLCAyMzIsIDExNywgMjUzLCAyMzIsIDExNywgMjUzLCAyMzEsIDE1LCA1LCAKLSAgICAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMiwgMTE3LCAyNTMsIDIzMiwgMjQ5LCAxMjUsIDI1MywgMjMyLCAxMTcsIDI1MywgCi0gICAgMjMyLCAxMTcsIDI1MywgMjMxLCAxNSwgNSwgMjUzLCAyMjksIDE1LCA1LCAyNTMsIDIyNiwgMTUsIDUsIDI1MiwgMTkxLCAKLSAgICAxNSwgNSwgMjUyLCAxNzYsIDE1LCA1LCAyNTIsIDE3MSwgMTUsIDUsIDI1MiwgMTY3LCAxNSwgNSwgMjUyLCAxNjEsIDE1LCAKLSAgICA1LCAyNTIsIDE2MiwgMTE3LCAyNTIsIDE2MSwgMTUsIDUsIDI1MiwgMTYwLCAxNSwgNSwgMTMwLCAxNSwgNSwgMjUyLCAxNDAsIAotICAgIDE1LCA1LCAyNTIsIDYsIDE1LCA1LCAyNTIsIDcsIDMwLCA2MSwgMTUsIDUsIDI1MiwgNywgMzAsIDI0MywgOTYsIDE1LCA1LCAKLSAgICAyNTIsIDcsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjUxLCAxMjUsIDE1LCA1LCAyNTEsIDEyNiwgMTE3LCAyNTEsIAotICAgIDEyNiwgMjU1LCAyNSwgMTUsIDUsIDI1MSwgMTI2LCAxMTcsIDI1MSwgMTI2LCAyMTQsIDE5MCwgMTUsIDUsIDI1MSwgMTI2LCAKLSAgICAyNDksIDEyNSwgMjUxLCAxMjUsIDE1LCA1LCAyNTEsIDEwOSwgMTUsIDUsIDI1MSwgMTEwLCAxMTcsIDI1MSwgMTA5LCAxNSwgCi0gICAgNSwgMjUxLCA5OCwgMTUsIDUsIDI1MSwgOTcsIDE1LCA1LCAyNDgsIDIyMSwgMTUsIDUsIDI0OCwgMjEyLCAxNSwgNSwgMjQ4LCAKLSAgICAyMTMsIDIzNCwgNjYsIDMwLCAxMTUsIDk2LCAyMzEsIDE0NywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjU0LCAKLSAgICAxMzIsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI1MiwgMTYwLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIAotICAgIDMwLCAyNTIsIDYsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDI0MywgMTM1LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgCi0gICAgNjYsIDMwLCAyNDMsIDEzNiwgOTYsIDIzMSwgMTQ3LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyNDIsIDIxNCwgCi0gICAgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjQyLCAxOTcsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIAotICAgIDI0MiwgMTAzLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAxNjIsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgCi0gICAgMzAsIDIzNSwgMTc5LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzUsIDE4MCwgOTYsIDIzMiwgOTgsIDE1LCA1LCAKLSAgICAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIzNCwgMjQyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzMsIDEzNSwgCi0gICAgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMyLCA5OCwgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjMyLCAKLSAgICA5OSwgOTYsIDIzMSwgMTQ2LCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMzIsIDg0LCAxNSwgNSwgMjQ4LCAyMTMsIAotICAgIDIzNCwgNjYsIDMwLCAyMjksIDEwNywgMTUsIDUsIDI0OCwgMjEzLCAyMzQsIDY2LCAzMCwgMjI2LCAyMiwgOTYsIDIyNiwgCi0gICAgMjEsIDE1LCA1LCAyNDgsIDIxMywgMjM0LCA2NiwgMzAsIDIxOSwgMTkxLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAKLSAgICAyMTcsIDcyLCAxNSwgNSwgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMTQsIDIzMSwgOTYsIDI0MiwgMTk3LCAxNSwgNSwgCi0gICAgMjQ4LCAyMTMsIDIzNCwgNjYsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDI0OCwgMTg3LCAxNSwgNSwgMjQ4LCAxNjYsIDE1LCA1LCAKLSAgICAyNDgsIDE2NSwgMTUsIDUsIDI0OCwgMTY0LCAxNSwgNSwgMjQ4LCAzLCAxNSwgNSwgMjQ3LCAyNDIsIDE1LCA1LCAyNDcsIAotICAgIDIxNywgMTUsIDUsIDI0NywgMjE4LCAzMCwgMjIwLCA2MywgMTUsIDUsIDI0NywgMjE2LCAxNSwgNSwgMjQ3LCAyMDYsIDE1LCAKLSAgICA1LCAyNDcsIDIwNywgMjM0LCAyMDgsIDEwNCwgMjQyLCA5NSwgMjQ3LCAxODcsIDE1LCA1LCAyNDcsIDE4NywgMTUsIDUsIAotICAgIDI0NiwgNzgsIDE1LCA1LCAyNDYsIDc5LCAxMTcsIDI0NiwgNzgsIDE1LCA1LCAyNDYsIDc5LCAyNDIsIDk0LCAxNSwgNSwgCi0gICAgMjQ2LCA3OSwgMjIwLCA0NSwgMTUsIDUsIDI0NiwgNzYsIDE1LCA1LCAyNDYsIDc3LCAzMCwgMjQ1LCA3MiwgMTUsIDUsIAotICAgIDI0NiwgNzUsIDE1LCA1LCAyNDYsIDc0LCAxNSwgNSwgMjQ2LCA3MywgMTUsIDUsIDI0NiwgNzIsIDE1LCA1LCAyNDYsIDY4LCAKLSAgICAxNSwgNSwgMjQ2LCA2NiwgMTUsIDUsIDI0NiwgNjcsIDI0MiwgOTQsIDE1LCA1LCAyNDYsIDY3LCAyNDIsIDk1LCAyNDIsIAotICAgIDk0LCAxNSwgNSwgMjQ2LCA2NSwgMTUsIDUsIDI0NiwgNTgsIDE1LCA1LCA3NSwgMTUsIDUsIDE2MCwgMzAsIDIyNiwgMjEsIAotICAgIDE1LCA1LCAxNjAsIDExNywgMTYwLCAyMjcsIDE5NSwgMTE3LCAyMjcsIDE5NCwgMTUsIDUsIDI0NSwgMjM0LCAxNSwgNSwgCi0gICAgMjQ1LCAyMzUsIDMwLCAxMTUsIDk2LCAyNDIsIDQ5LCA5NiwgMjQ4LCAyMjEsIDE1LCA1LCAyNDUsIDIzNSwgMzAsIDI0MywgCi0gICAgOTYsIDE1LCA1LCAyNDUsIDIzNSwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjQ1LCAyMzUsIDMwLCAyMjIsIDgsIDE1LCA1LCAKLSAgICAyNDUsIDIzNSwgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDUsIDIzNSwgMzAsIDcwLCAxNSwgNSwgMjQ1LCAyMTEsIDE1LCA1LCAKLSAgICAyNDUsIDIwMCwgMTUsIDUsIDI0NSwgMTc0LCAxNSwgNSwgMjQ1LCAxNTAsIDE1LCA1LCAyNDUsIDE1MSwgMzAsIDI0MywgCi0gICAgMTA0LCAxNSwgNSwgMjQ1LCAxNTEsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyNDUsIDE1MSwgMzAsIDIzMSwgCi0gICAgOTEsIDE1LCA1LCAyNDUsIDE1MSwgMjQ5LCAxMjUsIDI0NSwgMTUwLCAxNSwgNSwgMjQ1LCAxNTEsIDIyNiwgMTY0LCAyNDUsIAotICAgIDE1MCwgMTUsIDUsIDI0NSwgMTUxLCAyMTgsIDIzMywgMTUsIDUsIDI0NSwgODksIDE1LCA1LCAyNDUsIDg3LCAxNSwgNSwgCi0gICAgMjQ1LCA3MiwgMTUsIDUsIDI0NSwgMTAsIDE1LCA1LCAyNDUsIDExLCAzMCwgNjEsIDE1LCA1LCAyNDUsIDExLCAzMCwgMTE1LCAKLSAgICA5NiwgMjMzLCAxMDQsIDE1LCA1LCAyNDUsIDExLCAzMCwgMTE1LCA5NiwgMjMzLCAxMDUsIDMwLCAyMzMsIDEwNCwgMTUsIDUsIAotICAgIDI0NSwgMTEsIDMwLCAyNTQsIDEyMywgMTUsIDUsIDI0NSwgMTEsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDI0NSwgMTEsIDMwLCAKLSAgICAyNDYsIDY3LCAyNDIsIDk0LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDI0NiwgNjcsIDI0MiwgOTUsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyNDUsIDExLCAzMCwgMTYyLCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDI0MiwgNDksIDI0MiwgOTQsIDE1LCA1LCAyNDUsIDExLCAKLSAgICAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMzQsIDIwNywgMTUsIDUsIDI0NSwgMTEsIDMwLCAKLSAgICAyMzQsIDIwOCwgMjE4LCAyMzMsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjMzLCAyMTUsIDE1LCA1LCAyNDUsIDExLCAzMCwgCi0gICAgMjMzLCAxMzUsIDE1LCA1LCAyNDUsIDExLCAzMCwgMjMzLCAxMDUsIDMwLCAyMzMsIDEwNCwgMTUsIDUsIDI0NSwgMTEsIDMwLCAKLSAgICAyMzIsIDI0MSwgMTUsIDUsIDI0NSwgMTEsIDMwLCAyMzIsIDk4LCAxNSwgNSwgMjQ1LCAxMSwgMzAsIDIxNCwgMjMwLCAxNSwgCi0gICAgNSwgMjQ1LCAxMSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjQzLCAxMzUsIDE1LCA1LCAyNDMsIDEzNiwgMjQyLCA5NCwgMTUsIAotICAgIDUsIDI0MywgMTMzLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAxMTUsIDk2LCAyNDgsIDIyMiwgOTYsIDE2MiwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMTE1LCA5NiwgMTYyLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAxMTUsIDk2LCAyMzYsIDM1LCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNTUsIDI0LCAyMTYsIDI0MCwgOTYsIDIxNywgOTMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1NCwgMTIzLCAKLSAgICAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTMsIDIzMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUzLCAyMzAsIDk2LCAyNDMsIAotICAgIDExOCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI1MiwgMTQxLCA5NiwgCi0gICAgMjA1LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTEsIDk4LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNTEsIDk5LCA5NiwgMjA1LCAKLSAgICAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDgsIDIyMSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ4LCAzLCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDcsIDIxOCwgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0NiwgNzYsIDE1LCA1LCAyNDMsIAotICAgIDEzNCwgMzAsIDI0NSwgMTc0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDUsIDE3NSwgOTYsIDIzMywgMTM1LCAxNSwgNSwgCi0gICAgMjQzLCAxMzQsIDMwLCAyNDUsIDE1MCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQ1LCAxNTEsIDMwLCAyNDMsIDEwNSwgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQzLCAKLSAgICA5NiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAyMTQsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgMjEyLCAxNSwgNSwgCi0gICAgMjQzLCAxMzQsIDMwLCAyNDIsIDIxMywgOTYsIDYxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDIsIDE5OCwgOTYsIDIxOCwgCi0gICAgODMsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDI0MiwgNDksIDk2LCAyMzIsIDk5LCA5NiwgMjQ1LCA3MiwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjQyLCAzMCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjQyLCAzMSwgOTYsIDIzMywgMTM1LCAxNSwgNSwgMjQzLCAKLSAgICAxMzQsIDMwLCAyNDEsIDE4MSwgOTYsIDIzMiwgMjQxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyNDAsIDIxOCwgMTUsIDUsIAotICAgIDI0MywgMTM0LCAzMCwgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjM1LCAxNjYsIDk2LCAyNDAsIAotICAgIDIyMywgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDI0MywgMTM0LCAzMCwgCi0gICAgMjM0LCAyMDcsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNCwgODksIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzNCwgOTAsIDk2LCAKLSAgICAyMzMsIDEwNCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjMzLCAyMTYsIDk2LCAyNTQsIDEyMywgMTUsIDUsIDI0MywgMTM0LCAKLSAgICAzMCwgMjMzLCAxMzUsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIzMSwgOTIsIDk2LCAyNDUsIDE1MCwgMTUsIDUsIDI0MywgCi0gICAgMTM0LCAzMCwgMjMwLCAyMzAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAKLSAgICAyMjcsIDE5NSwgMTE3LCAyMjcsIDE5NCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMTkwLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAKLSAgICAyMjIsIDgsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIyMSwgMjMxLCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMjAsIDYzLCAxNSwgCi0gICAgNSwgMjQzLCAxMzQsIDMwLCAyMjAsIDY0LCA5NiwgMjE1LCA5OCwgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjIwLCAzMCwgMTUsIAotICAgIDUsIDI0MywgMTM0LCAzMCwgMjE4LCA0MywgMTUsIDUsIDI0MywgMTM0LCAzMCwgMjE3LCA3MiwgMTUsIDUsIDI0MywgMTM0LCAKLSAgICAzMCwgNzAsIDE1LCA1LCAyNDMsIDEzNCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjQzLCAxMzQsIDMwLCAyMTQsIDIyMCwgOTYsIAotICAgIDI0NiwgNzgsIDE1LCA1LCAyNDMsIDEzNCwgMTE3LCAyNDMsIDEzMywgMTUsIDUsIDI0MywgMTI4LCAxNSwgNSwgMjQzLCAKLSAgICAxMjksIDI0OSwgMTI1LCAyNDMsIDEyOCwgMTUsIDUsIDI0MywgMTI2LCAxNSwgNSwgMjQzLCAxMjcsIDExNywgMjQzLCAxMjcsIAotICAgIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDI0MywgMTE4LCAxNSwgNSwgMjQzLCAxMTksIDI0MywgMTI3LCAxMTcsIAotICAgIDI0MywgMTI3LCAyNDMsIDk3LCAxMTcsIDI0MywgOTYsIDE1LCA1LCAyNDMsIDExNywgMTUsIDUsIDI0MywgMTE1LCAxNSwgNSwgCi0gICAgMjQzLCAxMDYsIDE1LCA1LCAyNDMsIDEwNCwgMTUsIDUsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDI0MywgMTA1LCAKLSAgICAxMTcsIDI0MywgMTA0LCAxNSwgNSwgMjQzLCAxMDUsIDI0OSwgMTI1LCAyNDMsIDEwNCwgMTUsIDUsIDI0MywgOTYsIDE1LCAKLSAgICA1LCAyNDMsIDk1LCAxNSwgNSwgMjQzLCA5MCwgMTUsIDUsIDI0MywgMzYsIDE1LCA1LCAyNDMsIDM3LCAzMCwgMjMzLCAxOTYsIAotICAgIDE1LCA1LCAyNDIsIDIxNCwgMTUsIDUsIDI0MiwgMjE1LCAzMCwgNzUsIDE1LCA1LCAyNDIsIDIxNSwgMzAsIDcwLCAxNSwgNSwgCi0gICAgMjQyLCAyMTUsIDI0OSwgMTI1LCAyNDIsIDIxNCwgMTUsIDUsIDI0MiwgMjEyLCAxNSwgNSwgMjQyLCAyMTMsIDExNywgMjQyLCAKLSAgICAyMTIsIDE1LCA1LCAyNDIsIDIxMywgMjQ5LCAxMjUsIDI0MiwgMjEyLCAxNSwgNSwgMjQyLCAyMDksIDE1LCA1LCAyNDIsIAotICAgIDE5NywgMTUsIDUsIDI0MiwgMTk4LCAyNDIsIDk0LCAxNSwgNSwgMjQyLCAxOTUsIDE1LCA1LCAyNDIsIDE5NiwgMzAsIDExNSwgCi0gICAgOTYsIDIzNiwgMzUsIDE1LCA1LCAyNDIsIDE5NiwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDI0MiwgMTk2LCAKLSAgICAzMCwgMjM2LCAzNSwgMTUsIDUsIDI0MiwgMTk2LCAzMCwgMjMyLCA5OSwgOTYsIDIzNiwgMzUsIDE1LCA1LCAyNDIsIDE5NiwgCi0gICAgMzAsIDE5MCwgMTUsIDUsIDI0MiwgMTkyLCAxNSwgNSwgMjQyLCAxOTAsIDE1LCA1LCAyNDIsIDE5MSwgMjQ5LCAxMjUsIAotICAgIDI0MiwgMTkwLCAxNSwgNSwgMjQyLCAxOTEsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDI0MiwgMTkxLCAzMCwgMjE3LCA3MiwgCi0gICAgMTUsIDUsIDI0MiwgMTkxLCAyMTYsIDIzOSwgMTUsIDUsIDI0MiwgMTEzLCAxNSwgNSwgMjQyLCAxMTQsIDI0OSwgMTI1LCAKLSAgICAyNDIsIDExMywgMTUsIDUsIDI0MiwgMTExLCAxNSwgNSwgMjQyLCAxMTIsIDMwLCAyMzQsIDI0MiwgMTUsIDUsIDI0MiwgCi0gICAgMTEyLCAzMCwgMjM0LCAyNDMsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjQyLCAxMTIsIDMwLCAyMjcsIDE5NCwgCi0gICAgMTUsIDUsIDI0MiwgMTEyLCAzMCwgMjIyLCA5LCA5NiwgMjE1LCAxMTMsIDE1LCA1LCAyNDIsIDExMiwgMjQyLCA5NCwgMTUsIAotICAgIDUsIDI0MiwgMTAzLCAxNSwgNSwgMjQyLCAxMDQsIDMwLCAxMTUsIDk2LCAyMzMsIDE5NiwgMTUsIDUsIDI0MiwgMTA0LCAzMCwgCi0gICAgMjMzLCAxOTYsIDE1LCA1LCAyNDIsIDEwNCwgMTE3LCAyNDIsIDEwNCwgMjMyLCA5MSwgMTUsIDUsIDI0MiwgOTgsIDE1LCA1LCAKLSAgICAyNDIsIDk2LCAxNSwgNSwgMjQyLCA5NywgMzAsIDIyMCwgNjMsIDE1LCA1LCAyNDIsIDg4LCAxNSwgNSwgMjQyLCA4NywgMTUsIAotICAgIDUsIDI0MiwgODQsIDE1LCA1LCAyNDIsIDgzLCAxNSwgNSwgMTYyLCAxNSwgNSwgMjQyLCA0OSwgMjE2LCAyMzksIDE1LCA1LCAKLSAgICAyNDIsIDQ5LCAyNDIsIDk0LCAxNSwgNSwgMjQyLCAzMCwgMTUsIDUsIDI0MSwgMTgwLCAxNSwgNSwgMjQxLCAxODEsIDMwLCAKLSAgICAyNTMsIDIzMSwgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDI1MiwgMTc2LCAKLSAgICAxNSwgNSwgMjQxLCAxODEsIDMwLCAyNDcsIDE4NywgMTUsIDUsIDI0MSwgMTgxLCAzMCwgMjQzLCAxMjYsIDE1LCA1LCAyNDEsIAotICAgIDE4MSwgMzAsIDIzNCwgODEsIDE1LCA1LCAyNDEsIDE4MSwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjQxLCAxODEsIDMwLCAKLSAgICAyMjAsIDYzLCAxNSwgNSwgMjQxLCAxODEsIDMwLCA3MCwgMTUsIDUsIDI0MCwgMjIyLCAxNSwgNSwgMjQwLCAyMTgsIDE1LCAKLSAgICA1LCAyNDAsIDIxOSwgMzAsIDI1NCwgMTIzLCAxNSwgNSwgMjQwLCAyMTksIDMwLCAyNDIsIDMwLCAxNSwgNSwgMjQwLCAyMTksIAotICAgIDMwLCAyMzQsIDIwNywgMTUsIDUsIDI0MCwgMjE5LCAzMCwgMjMyLCAxOTcsIDE1LCA1LCAyNDAsIDIxOSwgMzAsIDIxNCwgCi0gICAgMjE5LCAxNSwgNSwgMjQwLCAyMTUsIDE1LCA1LCA3MywgMTUsIDUsIDI0MCwgMTU0LCA2MSwgMTUsIDUsIDI0MCwgMTE1LCAKLSAgICAxNSwgNSwgMjM2LCA2MywgMTUsIDUsIDIzNiwgNjQsIDExNywgMjM2LCA2NCwgMjUxLCA5OCwgMTUsIDUsIDIzNiwgNjQsIAotICAgIDExNywgMjM2LCA2NCwgMjE4LCAyMzMsIDE1LCA1LCAyMzYsIDM4LCAxNSwgNSwgMjM2LCAzNSwgMTUsIDUsIDIzNiwgMzYsIAotICAgIDI0NywgMjQyLCAxNSwgNSwgMjM2LCAzNiwgMjIzLCAzNSwgMTUsIDUsIDIzNiwgMzYsIDExNywgMjM2LCAzNiwgMjIwLCAxNCwgCi0gICAgMTE3LCAyMjAsIDE0LCAyMTQsIDIyMCwgMTE3LCAyMTQsIDIxOSwgMTUsIDUsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAKLSAgICAyMzYsIDI3LCAxNSwgNSwgMjM2LCAyOCwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIzNiwgMjYsIDE1LCA1LCAKLSAgICAyMzYsIDE2LCAxNSwgNSwgMjM2LCAxNywgMzAsIDIxNywgNzIsIDE1LCA1LCAyMzYsIDE3LCAyNDksIDEyNSwgMjM2LCAxNiwgCi0gICAgMTUsIDUsIDIzNiwgMTcsIDIyNiwgMTY0LCAyMzYsIDE2LCAxNSwgNSwgMjM2LCAxNywgMjE4LCAyMzMsIDE1LCA1LCAyMzYsIAotICAgIDksIDE1LCA1LCAyMzUsIDI1NSwgMTUsIDUsIDIzNSwgMTc5LCAxNSwgNSwgMjM1LCAxNjUsIDE1LCA1LCAxNzYsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgNjEsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjU0LCAyNTUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjU1LCAKLSAgICAwLCA5NiwgMjMzLCAyMTUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjUzLCAyMjksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjUyLCAKLSAgICAxNzYsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjUyLCAxNjAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMTMwLCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDI1MiwgNiwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyNDUsIDg3LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0NSwgNzIsIAotICAgIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQzLCAxMzUsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQzLCAxMTgsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjQzLCAxMDUsIDIxNiwgMjM5LCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MywgOTYsIDE1LCA1LCAyMzUsIDEzLCAKLSAgICAzMCwgMjQzLCA5NywgOTYsIDIyMCwgMTAxLCA5NiwgNjEsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQyLCAyMTQsIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjQyLCAxOTcsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjQyLCAxOTEsIDk2LCAyMjEsIDIzMSwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCAyNDIsIDE5MSwgMjQ5LCAxMjUsIDI0MiwgMTkwLCAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgMTEzLCAKLSAgICAxNSwgNSwgMjM1LCAxMywgMzAsIDI0MiwgODcsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjM2LCAzNSwgMTUsIDUsIDIzNSwgMTMsIAotICAgIDMwLCAyMzYsIDE2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNCwgMjQyLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzNCwgOTIsIAotICAgIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjM0LCA4OSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMzIsIDI0MSwgMTUsIDUsIDIzNSwgCi0gICAgMTMsIDMwLCAyMzIsIDk4LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMSwgOTEsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMxLCAKLSAgICA5MiwgOTYsIDI0NiwgNzgsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjMxLCA5MiwgOTYsIDI0MiwgMjE0LCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIzMSwgOTIsIDk2LCAyMTcsIDIyLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIzMCwgMjMxLCA5NiwgMjI3LCAxODksIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjI3LCAxOTQsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjI1LCAxMDgsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjIyLCAKLSAgICAxNDAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjA2LCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMSwgMjMxLCAxNSwgNSwgMjM1LCAKLSAgICAxMywgMzAsIDIyMCwgMTAyLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIyMCwgNjMsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjIwLCAKLSAgICAzMCwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTksIDIyNSwgMTUsIDUsIDIzNSwgMTMsIDMwLCAyMTksIDE4MiwgMTUsIDUsIAotICAgIDIzNSwgMTMsIDMwLCAyMTgsIDUxLCAxNSwgNSwgMjM1LCAxMywgMzAsIDIxNywgNTAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgCi0gICAgNzAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE0LCAyMTksIDE1LCA1LCAKLSAgICAyMzUsIDEzLCAzMCwgMjE0LCAxOTMsIDMwLCAxOTAsIDE1LCA1LCAyMzUsIDEzLCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMzUsIAotICAgIDEzLCAzMCwgMjEwLCA0NCwgMTUsIDUsIDIzNSwgMTEsIDE1LCA1LCAyMzUsIDEyLCAyNDksIDEyNSwgMjM1LCAxMSwgMTUsIAotICAgIDUsIDIzNSwgNCwgMTUsIDUsIDIzNSwgMSwgMTUsIDUsIDIzNCwgMjU1LCAxNSwgNSwgMjM0LCAyNTQsIDE1LCA1LCAyMzQsIAotICAgIDI1MiwgMTUsIDUsIDIzNCwgMjUzLCAxMTcsIDIzNCwgMjUyLCAxNSwgNSwgMjM0LCAyNDIsIDE1LCA1LCAyMzQsIDI0MywgCi0gICAgMzAsIDIzNiwgMzYsIDI0MiwgOTQsIDE1LCA1LCAyMzQsIDIzOCwgMTUsIDUsIDIzNCwgMjM5LCAzMCwgMjUyLCAxNzYsIDE1LCAKLSAgICA1LCAyMzQsIDIzOSwgMjQ5LCAxMjUsIDIzNCwgMjM4LCAxNSwgNSwgMjM0LCAyMzYsIDE1LCA1LCAyMzQsIDIzNSwgMTUsIDUsIAotICAgIDIzNCwgMjA3LCAxNSwgNSwgMjM0LCAyMDgsIDIzMywgMTE4LCAzMCwgMTA0LCAxMTcsIDIzMywgMTE4LCAzMCwgNzAsIDE1LCAKLSAgICA1LCAyMzQsIDIwOCwgMTE3LCAyMzQsIDIwOCwgMjMzLCAxMTgsIDMwLCAxMDQsIDExNywgMjMzLCAxMTgsIDMwLCA3MCwgMTUsIAotICAgIDUsIDIzNCwgMTU3LCAxNSwgNSwgMjM0LCA5MiwgMTUsIDUsIDIzNCwgOTMsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzNCwgCi0gICAgOTMsIDMwLCA3MCwgMTUsIDUsIDIzNCwgOTMsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIzNCwgODksIDE1LCA1LCAyMzQsIDgxLCAKLSAgICAxNSwgNSwgMjM0LCA2OCwgMTUsIDUsIDIzNCwgNjcsIDE1LCA1LCAyMzQsIDY1LCAxNSwgNSwgMjM0LCA2NiwgMTE3LCAyMzQsIAotICAgIDY1LCAxNSwgNSwgMjMzLCAyMTcsIDE1LCA1LCAyMzMsIDIxOCwgMTE3LCAyNDEsIDE4MSwgMzAsIDI1MywgMjMwLCAyMzMsIAotICAgIDIxOCwgMTE3LCAyNDEsIDE4MSwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjMzLCAyMTUsIDE1LCA1LCAyMzMsIDIxMywgMTUsIAotICAgIDUsIDIzMywgMjE0LCAyMTQsIDEyLCAxNywgMTUsIDUsIDIzMywgMjEyLCAxNSwgNSwgMjMzLCAyMDksIDE1LCA1LCAyMzMsIAotICAgIDIxMCwgMjQyLCA5NCwgMTUsIDUsIDIzMywgMjA4LCAxNSwgNSwgMjMzLCAxOTYsIDE1LCA1LCAyMzMsIDE5NywgMjI2LCAKLSAgICAxNjQsIDIzMywgMTk2LCAxNSwgNSwgMjMzLCAxOTEsIDE1LCA1LCAyMzMsIDE3MiwgMTUsIDUsIDIzMywgMTM1LCAxNSwgNSwgCi0gICAgMjMzLCAxMTcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDYxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAxMTUsIDk2LCAyNDgsIAotICAgIDIyMiwgOTYsIDE2MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTE1LCA5NiwgMjQzLCA5NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMTE1LCA5NiwgMjMzLCAxMDQsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI1NCwgMTc4LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAKLSAgICAyNTQsIDEyMywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjUzLCAyMzIsIDIxMCwgNDAsIDIxNiwgMjM5LCAxNSwgNSwgMjMzLCAKLSAgICAxMTgsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjUyLCA2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDgsIAotICAgIDE2NiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjQ1LCAxNTAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDI0MywgMTM1LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDIsIDEwMywgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjQyLCAxMDQsIDk2LCAyNDIsIDEwMywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMTYyLCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyNDIsIDMwLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyNDEsIDE4MSwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjMzLCAKLSAgICAxMTgsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzYsIDE2LCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyMzYsIDE3LCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzYsIDE3LCA5NiwgMjMyLCA5OCwgMTUsIDUsIAotICAgIDIzMywgMTE4LCAzMCwgMjM0LCA5MiwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjM0LCA4MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgCi0gICAgMjMzLCAyMTUsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMywgMjA5LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMzMsIDIxMCwgCi0gICAgOTYsIDI0MSwgMTgxLCA5NiwgNjEsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIzMywgMTE3LCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAKLSAgICAyMzIsIDE5NywgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMyLCA5OCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMyLCA4NiwgMTUsIAotICAgIDUsIDIzMywgMTE4LCAzMCwgMjMxLCA5MSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjMxLCA5MiwgOTYsIDI0NSwgMTUwLCAxNSwgCi0gICAgNSwgMjMzLCAxMTgsIDMwLCAyMzAsIDYxLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMjksIDEwNywgMTUsIDUsIDIzMywgMTE4LCAKLSAgICAzMCwgMjIwLCA2NCwgOTYsIDIxOCwgNDMsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIyMCwgMTAsIDk2LCAyNDIsIDE5MSwgOTYsIAotICAgIDI0NSwgODcsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIyMCwgMTAsIDk2LCAyNDIsIDE5MSwgMjE2LCAyMzksIDE1LCA1LCAKLSAgICAyMzMsIDExOCwgMzAsIDIxOSwgMjIzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTksIDIyNCwgOTYsIDIxOSwgMjIzLCAxNSwgCi0gICAgNSwgMjMzLCAxMTgsIDMwLCAyMTgsIDQzLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTcsIDg0LCAxNSwgNSwgMjMzLCAxMTgsIAotICAgIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjMzLCAxMTgsIDMwLCAyMTcsIDIzLCA5NiwgMTE1LCA5NiwgMjE4LCA4NCwgOTYsIDE5NywgCi0gICAgMTUsIDUsIDIzMywgMTE4LCAzMCwgNzAsIDE1LCA1LCAyMzMsIDExOCwgMzAsIDEwNCwgOTYsIDYxLCAxNSwgNSwgMjMzLCAKLSAgICAxMTgsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA3MCwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIAotICAgIDIzMSwgMTUsIDUsIDIzMywgMTE4LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMzMsIDExOCwgMzAsIDIxNCwgMTI2LCAxNSwgNSwgCi0gICAgMjMzLCAxMTgsIDIxOCwgMjMzLCAxNSwgNSwgMjMzLCAxMTUsIDE1LCA1LCAyMzMsIDExNiwgMzAsIDIyMCwgNjMsIDE1LCA1LCAKLSAgICAyMzMsIDExNiwgMzAsIDIyMCwgNjQsIDk2LCAyMTgsIDQzLCAxNSwgNSwgMjMzLCAxMTYsIDI0MiwgOTQsIDE1LCA1LCAyMzMsIAotICAgIDExNiwgMjQyLCA5NSwgMTE3LCAyMzMsIDExNiwgMjQyLCA5NSwgMjIwLCA2MywgMTUsIDUsIDIzMywgMTExLCAxNSwgNSwgCi0gICAgMjMzLCAxMDQsIDE1LCA1LCAyMzMsIDEwNSwgMzAsIDIzMywgMTA0LCAxNSwgNSwgMjMzLCAxMDIsIDE1LCA1LCAyMzMsIAotICAgIDEwMywgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjMzLCAxMDMsIDMwLCAyMzMsIDE5NywgOTYsIDIyMiwgMTQwLCAxNSwgNSwgCi0gICAgMjMyLCAyNDEsIDE1LCA1LCAyMzIsIDIyNiwgMTUsIDUsIDIzMiwgMjE2LCAxNSwgNSwgMjMyLCAxOTcsIDE1LCA1LCAyMzIsIAotICAgIDk4LCAxNSwgNSwgMjMyLCA5OSwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAKLSAgICAyNTQsIDE3OCwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNDUsIDcyLCAxNSwgCi0gICAgNSwgMjMyLCA5NywgMzAsIDI0NSwgNzMsIDIxNiwgMjM5LCAxNSwgNSwgMjMyLCA5NywgMzAsIDI0MywgMTA1LCAyMTYsIAotICAgIDIzOSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyNDEsIDE4MSwgMzAsIDI1MiwgMTc2LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNiwgCi0gICAgMTYsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjM1LCAxLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNCwgMjU1LCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMzAsIDIzNSwgMCwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjMyLCA5NywgMzAsIDIzNCwgOTIsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjMzLCAxMzYsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIzMiwgOTcsIDMwLCAyMzMsIDExNywgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMzEsIDkyLCA5NiwgMjQ1LCAxNTAsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjI5LCAxMDcsIDE1LCA1LCAyMzIsIAotICAgIDk3LCAzMCwgMjI3LCAyMzcsIDE1LCA1LCAyMzIsIDk3LCAzMCwgMjE5LCAxOTIsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIzMiwgCi0gICAgOTcsIDMwLCAyMTksIDE3NCwgOTYsIDI1MSwgMTI1LCAxNSwgNSwgMjMyLCA5NywgMzAsIDIxNSwgMTEzLCAxNSwgNSwgMjMyLCAKLSAgICA5NywgMjE2LCAyMzksIDE1LCA1LCAyMzIsIDk3LCAyNDksIDEyNSwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDIyNiwgCi0gICAgMTY0LCAyMzIsIDk2LCAxNSwgNSwgMjMyLCA5NywgMjE4LCAyMzMsIDE1LCA1LCAyMzIsIDk3LCAyMjAsIDQ1LCAxNSwgNSwgCi0gICAgMjMyLCA5NSwgMTUsIDUsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDkyLCAxMTcsIDIzMiwgOTEsIDE1LCA1LCAyMzIsIDkyLCAKLSAgICAyMjYsIDE2NCwgMjMyLCA5MSwgMTUsIDUsIDIzMiwgOTIsIDIyMCwgNDUsIDE1LCA1LCAyMzIsIDg5LCAxNSwgNSwgMjMyLCAKLSAgICA4NiwgMTUsIDUsIDIzMiwgODQsIDE1LCA1LCAyMzIsIDg1LCAxMTcsIDIzMiwgODQsIDE1LCA1LCAyMzIsIDg1LCAxMTcsIAotICAgIDIzMiwgODUsIDI0MywgOTcsIDExNywgMjQzLCA5NiwgMTUsIDUsIDE4NCwgMTUsIDUsIDIzMSwgMjM5LCAzMCwgMjE3LCA3MiwgCi0gICAgMTUsIDUsIDIzMSwgMjM5LCAyNDIsIDk0LCAxNSwgNSwgMjMxLCAyMzgsIDE1LCA1LCAyMzEsIDIxMCwgMTUsIDUsIDIzMSwgCi0gICAgMTY2LCAxNSwgNSwgMjMxLCAxNDcsIDE1LCA1LCAyMzEsIDE0NiwgMTUsIDUsIDIzMSwgOTEsIDE1LCA1LCAyMzEsIDQ3LCAKLSAgICAxNSwgNSwgMjMwLCAyMzAsIDE1LCA1LCAyMzAsIDE4OCwgMTUsIDUsIDIzMCwgMTAyLCAxNSwgNSwgMjMwLCAxMDMsIDExNywgCi0gICAgMjMwLCAxMDIsIDE1LCA1LCAyMzAsIDkzLCAxNSwgNSwgMjMwLCA5NCwgMjQyLCA5NCwgMTUsIDUsIDIzMCwgNzgsIDE1LCA1LCAKLSAgICAyMzAsIDY0LCAxNSwgNSwgMjMwLCA2MSwgMTUsIDUsIDIzMCwgNjIsIDMwLCA2MSwgMTUsIDUsIDIzMCwgNjIsIDMwLCAyMzMsIAotICAgIDE5NiwgMTUsIDUsIDIzMCwgNjIsIDMwLCAyMTAsIDExNiwgMTUsIDUsIDIzMCwgNjIsIDExNywgMjMwLCA2MSwgMTUsIDUsIAotICAgIDIzMCwgNjIsIDExNywgMjMwLCA2MiwgMzAsIDExNSwgOTYsIDE5NywgMTUsIDUsIDIzMCwgNjIsIDI0OSwgMTI1LCAyMzAsIAotICAgIDYxLCAxNSwgNSwgMjMwLCA1OSwgMTUsIDUsIDIzMCwgNjAsIDMwLCA2MSwgMTUsIDUsIDIzMCwgNjAsIDMwLCAxMTUsIDk2LCAKLSAgICAyNDgsIDMsIDE1LCA1LCAyMzAsIDYwLCAzMCwgMjQ4LCAzLCAxNSwgNSwgMjMwLCA2MCwgMjQyLCA5NCwgMTUsIDUsIDE5NywgCi0gICAgMTUsIDUsIDIyOSwgMjI3LCAxNSwgNSwgMjI5LCAyMTYsIDE1LCA1LCAyMjksIDIxNywgMjM1LCAxOTIsIDE1LCA1LCAyMjksIAotICAgIDIxNywgMzAsIDIxOSwgMjI2LCAyMTYsIDIzOSwgMTUsIDUsIDIyOSwgMjE3LCAyMjYsIDE2NCwgMjI5LCAyMTYsIDE1LCA1LCAKLSAgICAyMjksIDIxNSwgMTUsIDUsIDIyOSwgMjA4LCAyMjcsIDE4MCwgMTUsIDUsIDIyOSwgMjA3LCAxNSwgNSwgMjI5LCAyMDYsIAotICAgIDE1LCA1LCAyMjksIDEwNywgMTUsIDUsIDIyOSwgMTA4LCAzMCwgNjEsIDE1LCA1LCAyMjksIDEwOCwgMzAsIDIxNCwgMjE5LCAKLSAgICAxNSwgNSwgMjI5LCAxMDgsIDIyMCwgNDUsIDE1LCA1LCAyMjgsIDIzMywgMTUsIDUsIDIyOCwgMjM0LCAzMCwgNzUsIDE1LCAKLSAgICA1LCAyMjgsIDIzMiwgMTUsIDUsIDIyOCwgMjAzLCAxNSwgNSwgMjI4LCAyMDQsIDMwLCAyNDMsIDEwNSwgMjE2LCAyMzksIAotICAgIDE1LCA1LCAyMjgsIDIwNCwgMzAsIDI0MywgOTcsIDk2LCAyNDMsIDEwNSwgMjE2LCAyMzksIDE1LCA1LCAyMjgsIDIwMSwgCi0gICAgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjU0LCAxMjMsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDI1MywgMjMxLCAxNSwgNSwgMjI4LCAKLSAgICAyMDIsIDMwLCAyNTMsIDIzMiwgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyNDIsIDEwMywgMTUsIDUsIAotICAgIDIyOCwgMjAyLCAzMCwgMjMxLCA5MiwgOTYsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjI5LCAKLSAgICAxMDcsIDE1LCA1LCAyMjgsIDIwMiwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjAsIDYzLCAxNSwgNSwgCi0gICAgMjI4LCAyMDIsIDMwLCAyMjAsIDY0LCA5NiwgMTE1LCAyNTQsIDEyMywgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjIwLCA2NCwgCi0gICAgOTYsIDI1MywgMjMxLCAxNSwgNSwgMjI4LCAyMDIsIDMwLCAyMjAsIDY0LCA5NiwgMjUzLCAyMzIsIDk2LCAyNTMsIDIzMSwgCi0gICAgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjE0LCAyMzEsIDk2LCAyNTMsIDIzMSwgMTUsIDUsIDIyOCwgMjAyLCAzMCwgMjE0LCAKLSAgICAxMjYsIDE1LCA1LCAyMjgsIDE5MCwgMTUsIDUsIDIyNywgMjM3LCAxNSwgNSwgMjI3LCAyMTAsIDE1LCA1LCAyMjcsIDE5NCwgCi0gICAgMTUsIDUsIDIyNywgMTk1LCAyMzMsIDExNiwgMzAsIDI0MywgOTYsIDE1LCA1LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAKLSAgICAyMzEsIDE0NywgMTUsIDUsIDIyNywgMTk1LCAyMzMsIDExNiwgMzAsIDIyMiwgOCwgMTUsIDUsIDIyNywgMTk1LCAyMzMsIAotICAgIDExNiwgMzAsIDIyMiwgOSwgMTE3LCAyMjcsIDE5NSwgMjMzLCAxMTYsIDMwLCAyMjIsIDgsIDE1LCA1LCAyMjcsIDE5NSwgCi0gICAgMjMzLCAxMTYsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyNywgMTk1LCAyMTYsIDIzOSwgMTUsIDUsIDIyNywgMTk1LCAxMTcsIAotICAgIDIyNywgMTk0LCAxNSwgNSwgMjI3LCAxOTUsIDI0OSwgMTI1LCAyMjcsIDE5NCwgMTUsIDUsIDIyNywgMTk1LCAyNDksIDEyNSwgCi0gICAgMjI3LCAxOTUsIDIzMywgMTE2LCAxMTcsIDIzMywgMTE1LCAxNSwgNSwgMjI3LCAxODksIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAKLSAgICAyNCwgMzAsIDI1MywgMjI2LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyNTIsIDYsIDE1LCA1LCAyMjcsIDE5MCwgCi0gICAgMjU1LCAyNCwgMzAsIDI0NiwgNzQsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgMzAsIDI0MiwgMTAzLCAxNSwgNSwgMjI3LCAKLSAgICAxOTAsIDI1NSwgMjQsIDMwLCAyMzYsIDM2LCAyNDIsIDk0LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyMzQsIAotICAgIDI1NSwgMTUsIDUsIDIyNywgMTkwLCAyNTUsIDI0LCAzMCwgMjMzLCAxMzUsIDE1LCA1LCAyMjcsIDE5MCwgMjU1LCAyNCwgCi0gICAgMzAsIDIyOSwgMTA3LCAxNSwgNSwgMjI3LCAxOTAsIDI1NSwgMjQsIDMwLCAyMTksIDE3MSwgMTUsIDUsIDIyNywgMTkwLCAKLSAgICAyNTUsIDI0LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjcsIDE5MCwgMjM0LCA2NiwgMzAsIDI1MiwgNiwgMTUsIDUsIDIyNywgCi0gICAgMTkwLCAyMzQsIDY2LCAzMCwgMjUyLCA3LCA3MCwgMTUsIDUsIDE5MCwgMTUsIDUsIDIyNiwgODAsIDE1LCA1LCAyMjYsIDQ3LCAKLSAgICAxNSwgNSwgMjI2LCAyMSwgMTUsIDUsIDIyNSwgMTYxLCAxNSwgNSwgMjI1LCAxMDgsIDE1LCA1LCAyMjUsIDEwOSwgMzAsIAotICAgIDYxLCAxNSwgNSwgMjI1LCAxMDksIDMwLCAyNTUsIDI1LCAxNSwgNSwgMjI1LCAxMDksIDMwLCAyNTIsIDYsIDE1LCA1LCAKLSAgICAyMjUsIDEwOSwgMzAsIDI1MSwgMTI1LCAxNSwgNSwgMjI1LCAxMDksIDMwLCA3NSwgMTUsIDUsIDIyNSwgMTA5LCAzMCwgNzMsIAotICAgIDE1LCA1LCAyMjUsIDEwOSwgMzAsIDI0MCwgMTE1LCAxNSwgNSwgMjI1LCAxMDksIDMwLCA3MCwgMTUsIDUsIDIyNSwgMTA5LCAKLSAgICAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjUsIDEwOSwgMjQ5LCAxMjUsIDIyNSwgMTA4LCAxNSwgNSwgMjI1LCA1MywgMTUsIDUsIAotICAgIDIyNSwgNTQsIDMwLCAyMzQsIDIzOCwgMTUsIDUsIDIyNSwgNTQsIDMwLCAyMTQsIDIxOSwgMTUsIDUsIDIyNSwgNTQsIDMwLCAKLSAgICAyMTAsIDExNiwgMTUsIDUsIDIyNSwgNTQsIDIyNiwgMTY0LCAyMjUsIDUzLCAxNSwgNSwgMjA1LCAxNSwgNSwgMjIzLCAxODIsIAotICAgIDE1LCA1LCAyMjMsIDM1LCAxNSwgNSwgMjIyLCAxNDAsIDE1LCA1LCAyMDYsIDE1LCA1LCAyMjIsIDIyLCAyMjcsIDE4MCwgCi0gICAgMTUsIDUsIDIyMiwgMjEsIDE1LCA1LCAyMjIsIDIyLCAzMCwgNjEsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjQ2LCA3OCwgMTUsIAotICAgIDUsIDIyMiwgMjIsIDMwLCAyNDYsIDc2LCAxNSwgNSwgMjIyLCAyMiwgMzAsIDE2MiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAKLSAgICAyMzQsIDI0MiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMzMsIDE5NiwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMzIsIDg0LCAxNSwgCi0gICAgNSwgMjIyLCAyMiwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIyNywgMTk0LCAxNSwgNSwgMjIyLCAyMiwgCi0gICAgMzAsIDIyMiwgOCwgMTUsIDUsIDIyMiwgMjIsIDMwLCAyMjAsIDMwLCAxNSwgNSwgMjIyLCAyMiwgMzAsIDIxNywgOTMsIDE1LCAKLSAgICA1LCAyMjIsIDIyLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjE0LCAyMjUsIDE1LCA1LCAyMjIsIDIyLCAKLSAgICAzMCwgMjE0LCAxOTcsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjE0LCAxNTAsIDE1LCA1LCAyMjIsIDIyLCAzMCwgMjE0LCAxMjYsIAotICAgIDE1LCA1LCAyMjIsIDIyLCAxMTcsIDIyMiwgMjEsIDE1LCA1LCAyMjIsIDIyLCAyNDIsIDk0LCAxNSwgNSwgMjIyLCA4LCAxNSwgCi0gICAgNSwgMjIyLCA5LCAyMzMsIDExOCwgMzAsIDI1MywgMjI5LCAxNSwgNSwgMjIxLCAyMzksIDE1LCA1LCAyMjEsIDIzMSwgMTUsIAotICAgIDUsIDIyMCwgMTAyLCAxNSwgNSwgMjIwLCAxMDAsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDYxLCAxNSwgNSwgMjIwLCAxMDEsIAotICAgIDMwLCAyNTIsIDE3NiwgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjQyLCAxOTAsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDIyOSwgCi0gICAgMTA3LCAxNSwgNSwgMjIwLCAxMDEsIDMwLCAyMTksIDIyMywgMTUsIDUsIDIyMCwgMTAxLCAzMCwgMjE1LCA5OCwgMTUsIDUsIAotICAgIDIyMCwgMTAxLCAzMCwgNzAsIDE1LCA1LCAyMjAsIDEwMSwgMzAsIDEwNCwgOTYsIDYxLCAxNSwgNSwgMjIwLCA5OSwgMTUsIAotICAgIDUsIDIyMCwgOTcsIDE1LCA1LCAyMjAsIDc4LCAxNSwgNSwgMjIwLCA2MywgMTUsIDUsIDIyMCwgNjQsIDI0MCwgMjIyLCAxNSwgCi0gICAgNSwgMjIwLCA2NCwgMTE3LCAyMjAsIDY0LCAyNDMsIDEyNywgMTE3LCAyNDMsIDEyNywgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAKLSAgICAxNSwgNSwgMjIwLCA2NCwgMTE3LCAyMjAsIDY0LCAyMTcsIDk0LCAxMTcsIDIxNywgOTQsIDI0MywgOTcsIDExNywgMjQzLCAKLSAgICA5NiwgMTUsIDUsIDIyMCwgNTYsIDE1LCA1LCAyMjAsIDUxLCAxNSwgNSwgMjIwLCA0OCwgMTUsIDUsIDIyMCwgNDcsIDE1LCAKLSAgICA1LCAyMjAsIDQ0LCAxNSwgNSwgMjIwLCAzMCwgMTUsIDUsIDIyMCwgMzEsIDMwLCA2MSwgMTUsIDUsIDIyMCwgMzEsIDMwLCAKLSAgICAyMzYsIDE2LCAxNSwgNSwgMjIwLCAyNCwgMTUsIDUsIDIyMCwgMjUsIDMwLCA2MSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyNTIsIAotICAgIDE2MSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyNTEsIDEwOSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyNDcsIDIwNiwgMTUsIDUsIAotICAgIDIyMCwgMjUsIDMwLCAyNDMsIDk2LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIzNiwgMzUsIDE1LCA1LCAyMjAsIDI1LCAzMCwgCi0gICAgMjM2LCAzNiwgMjQyLCA5NCwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzMsIDE5MSwgMTUsIDUsIDIyMCwgMjUsIDMwLCAyMzIsIAotICAgIDg2LCAxNSwgNSwgMjIwLCAyNSwgMzAsIDIzMCwgOTMsIDE1LCA1LCAyMjAsIDI1LCAzMCwgMjIyLCA4LCAxNSwgNSwgMjIwLCAKLSAgICAxOCwgMTUsIDUsIDIyMCwgMTMsIDE1LCA1LCAyMjAsIDE0LCAyMTYsIDIzOSwgMTUsIDUsIDIyMCwgMTQsIDExNywgMjIwLCAKLSAgICAxNCwgMjUxLCA5OSwgMTE3LCAyNTEsIDk4LCAxNSwgNSwgMjIwLCA5LCAxNSwgNSwgMjE5LCAyMjUsIDE1LCA1LCAyMTksIAotICAgIDIyNiwgMTE3LCAyMzUsIDE5MywgMjE5LCAyMjUsIDE1LCA1LCAyMTksIDIyMywgMTUsIDUsIDIxOSwgMjIyLCAxNSwgNSwgCi0gICAgMjE5LCAxOTEsIDE1LCA1LCAyMTksIDE5MiwgMjQyLCA5NCwgMTUsIDUsIDIxOSwgMTgyLCAxNSwgNSwgMjE5LCAxODAsIDE1LCAKLSAgICA1LCAyMTksIDE4MSwgMTE3LCAyMTksIDE4MSwgMjE5LCAyMjMsIDE1LCA1LCAyMTksIDE3MywgMTUsIDUsIDIxOSwgMTcxLCAKLSAgICAxNSwgNSwgMjE4LCA4MywgMTUsIDUsIDIxOCwgODQsIDExNywgMjE4LCA4MywgMTUsIDUsIDIxOCwgNTQsIDE1LCA1LCAyMTgsIAotICAgIDUzLCAxNSwgNSwgMjE4LCA1MSwgMTUsIDUsIDIxOCwgNDMsIDE1LCA1LCAyMTgsIDQyLCAxNSwgNSwgMjE4LCAxNywgMTUsIAotICAgIDUsIDIxOCwgMTYsIDE1LCA1LCAyMTcsIDEwNSwgMTUsIDUsIDIxNywgMTA2LCAyNTMsIDIxNiwgMTUsIDUsIDIxNywgMTA2LCAKLSAgICAzMCwgMjQxLCAxODAsIDE1LCA1LCAyMTcsIDEwNiwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjE3LCAxMDYsIDI0MiwgOTQsIAotICAgIDE1LCA1LCAyMTcsIDkzLCAxNSwgNSwgMjE3LCA5NCwgMTE3LCAyMTcsIDk0LCAyMjgsIDIzNCwgMTE3LCAyMjgsIDIzNCwgCi0gICAgMjQ3LCAxODgsIDExNywgMjQ3LCAxODcsIDE1LCA1LCAyMTcsIDk0LCAyMTgsIDIzMywgMTUsIDUsIDIxNywgODQsIDE1LCA1LCAKLSAgICAxMjksIDMwLCAyNTIsIDYsIDE1LCA1LCAxMjksIDMwLCAyNDIsIDEwMywgMTUsIDUsIDEyOSwgMzAsIDIyMCwgNjMsIDE1LCAKLSAgICA1LCAxMjksIDMwLCAyMTksIDIyNSwgMTUsIDUsIDEyOSwgMzAsIDIxNSwgMTEzLCAxNSwgNSwgMTI5LCAzMCwgMjE0LCAyMTksIAotICAgIDE1LCA1LCAyMTcsIDcyLCAxNSwgNSwgMjE3LCA1MCwgMTUsIDUsIDIxNywgMjIsIDE1LCA1LCAyMTcsIDIzLCAyNDIsIDk0LCAKLSAgICAxNSwgNSwgMjE2LCAxMTcsIDE1LCA1LCAyMTYsIDExOCwgMjE2LCAyMzksIDE1LCA1LCAyMTYsIDkwLCAxNSwgNSwgMjE2LCAKLSAgICA3MiwgMTUsIDUsIDIxNiwgNzMsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjE2LCA3MywgMTE3LCAyMTYsIDcyLCAxNSwgNSwgCi0gICAgMjE2LCA3MywgMTE3LCAyMTYsIDczLCAyNDMsIDEyNywgMTE3LCAyNDMsIDEyNywgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAKLSAgICAxNSwgNSwgMjE1LCAxMTgsIDE1LCA1LCAyMTUsIDExMywgMTUsIDUsIDIxNSwgMTExLCAxNSwgNSwgMjE1LCAxMDgsIDE1LCAKLSAgICA1LCAyMTUsIDk4LCAxNSwgNSwgMjE1LCA5OSwgMTE3LCAyMTUsIDk5LCAyMTAsIDExNywgMTE3LCAyMTAsIDExNiwgMTUsIDUsIAotICAgIDcwLCAxNSwgNSwgMTA0LCAyNDIsIDEwMywgMTUsIDUsIDEwNCwgMTA0LCA3MCwgMTUsIDUsIDEwNCwgMTE3LCAxMDQsIDIyNiwgCi0gICAgOTAsIDExNywgMjI2LCA5MCwgMjQzLCA5NywgMTE3LCAyNDMsIDk2LCAxNSwgNSwgMTA0LCAxMTcsIDEwNCwgMjE4LCAxOCwgCi0gICAgMTE3LCAyMTgsIDE3LCAxNSwgNSwgMTA0LCAxMTcsIDEwNCwgMTA0LCAyMjMsIDQ5LCAxMTcsIDEwNCwgMjIzLCA0OCwgMTUsIAotICAgIDUsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAyMjUsIDE1LCA1LCAyMTQsIDIxOSwgMTUsIDUsIDIxNCwgMjIwLCAyMzMsIDE5MSwgCi0gICAgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDIzMCwgMjMwLCAxNSwgNSwgMjE0LCAKLSAgICAyMjAsIDMwLCAxMDQsIDk2LCAxMDQsIDk2LCA3MCwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgCi0gICAgMTA0LCAyNDIsIDk0LCAxNSwgNSwgMjE0LCAyMjAsIDI0MiwgOTQsIDE1LCA1LCAyMTQsIDIyMCwgMjIwLCA0NSwgMTUsIDUsIAotICAgIDIxNCwgMjIwLCAyMjAsIDQ2LCAzMCwgMjUyLCAxNzYsIDE1LCA1LCAyMTQsIDIxNSwgMTUsIDUsIDIxNCwgMTk3LCAxNSwgNSwgCi0gICAgMjE0LCAxOTgsIDMwLCAyMzMsIDExNywgMTUsIDUsIDIxNCwgMTk4LCAzMCwgMjMxLCA5MiwgOTYsIDI0OCwgMjIxLCAxNSwgCi0gICAgNSwgMjE0LCAxOTgsIDMwLCAyMjAsIDEwMCwgMTUsIDUsIDIxNCwgMTk4LCAzMCwgNzAsIDE1LCA1LCAyMTQsIDE5NiwgMTUsIAotICAgIDUsIDIxNCwgMTkyLCAxNSwgNSwgMjE0LCAxOTMsIDMwLCAyMzQsIDIwNywgMTUsIDUsIDIxNCwgMTkzLCAzMCwgMTkwLCAxNSwgCi0gICAgNSwgMjE0LCAxOTAsIDE1LCA1LCAyMTQsIDE5MSwgMjQyLCA5NCwgMTUsIDUsIDIxNCwgMTUwLCAxNSwgNSwgMjE0LCAxNTEsIAotICAgIDI0OSwgMTI1LCAyMTQsIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAyMjAsIDQ1LCAxNSwgNSwgMjE0LCAxNDgsIDE1LCA1LCAKLSAgICAyMTQsIDE0OSwgMzAsIDExNSwgOTYsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTE1LCA5NiwgMTk3LCAxNSwgNSwgCi0gICAgMjE0LCAxNDksIDMwLCAyNTQsIDE3OCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMTYyLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAKLSAgICAyMjcsIDE5NCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMxLCAKLSAgICA5NiwgMjUzLCAyMzEsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDIxNCwgMjMxLCA5NiwgMjUyLCA2LCAxNSwgNSwgMjE0LCAxNDcsIAotICAgIDE1LCA1LCAyMTQsIDE0NCwgMTUsIDUsIDIxNCwgMTQzLCAxNSwgNSwgMjE0LCAxMzksIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDYxLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNTMsIDIyNiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTMwLCAxNSwgNSwgMjE0LCAKLSAgICAxNDAsIDMwLCAyNDYsIDY4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEzNSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgMjQzLCAxMTgsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTA1LCAyMTYsIDIzOSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgMjQzLCA5NiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjQyLCAxMTMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDE2MiwgMTUsIDUsIAotICAgIDIxNCwgMTQwLCAzMCwgMjM2LCAzNSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM2LCAxNiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCi0gICAgMjM1LCAxNjUsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzNCwgOTIsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzMiwgODQsIDE1LCAKLSAgICA1LCAyMTQsIDE0MCwgMzAsIDIzMCwgMTg4LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxOTAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIAotICAgIDIyMCwgNjMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxOSwgMTgwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTUsIDExOCwgCi0gICAgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMTA0LCA5NiwgMjQyLCAxMDMsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNCwgMjE5LCAKLSAgICAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM3LCAxNSwgNSwgMjE0LCAxMzgsIDMwLCA3MCwgCi0gICAgMTUsIDUsIDIxNCwgMTI2LCAxNSwgNSwgMjE0LCAxMjcsIDMwLCA2MSwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjMzLCAyMTcsIAotICAgIDE1LCA1LCAyMTQsIDEyNywgMzAsIDIzMywgMTk2LCAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMTcsIDcyLCAxNSwgNSwgMjE0LCAKLSAgICAxMjIsIDE1LCA1LCAyMTQsIDEyNSwgMTUsIDUsIDIxNCwgMTIzLCAxNSwgNSwgMjE0LCAxMTksIDE1LCA1LCAyMTQsIDEwOCwgCi0gICAgMTUsIDUsIDIxNCwgMTA5LCAzMCwgMjM0LCAyMDcsIDE1LCA1LCAyMTQsIDEwNywgMTUsIDUsIDIxMCwgMTE2LCAxNSwgNSwgCi0gICAgMjEwLCAxMTcsIDIxNiwgMjM5LCAxNSwgNSwgMjEwLCAxMTcsIDkyLCAzMCwgMjMzLCAxOTYsIDE1LCA1LCAyMTAsIDExMywgCi0gICAgMTUsIDUsIDIxMCwgMTA2LCAxNSwgNSwgMjEwLCA5MywgMTUsIDUsIDIxMCwgNDQsIDE1LCA1LCAyMTAsIDQ1LCAxMTcsIAotICAgIDIxMCwgNDQsIDE1LCA1LCAyMTAsIDQzLCAxNSwgNSwgMjEwLCA0MSwgMTUsIDUsIDIxMCwgNDIsIDIzNSwgMywgMjE2LCAKLSAgICAyMzksIDE1LCA1LCAyMTAsIDM2LCAxNSwgNSwgMjEwLCAyOCwgMTUsIDUsIDIxMCwgMTMsIDE1LCA1LCAyMTAsIDExLCAxNSwgCi0gICAgNSwgMjEwLCAxMiwgMzAsIDYxLCAxNSwgNSwgMjEwLCAxMCwgMTUsIDUsIDIxMCwgOSwgMTUsIDEzMiwgNSwgMTEzLCAyNTMsIAotICAgIDIzMSwgMTUsIDEzMiwgNSwgMTM0LCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjUzLCAyMzEsIDE1LCAxMzIsIAotICAgIDUsIDI0NCwgODEsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyMTksIDEyNSwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDIyMCwgCi0gICAgMTIyLCAyNTMsIDIzMSwgMTUsIDEzMiwgNSwgMjQ1LCAxOTMsIDI1MywgMjMxLCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjUzLCAKLSAgICAyMzEsIDE1LCAxMzIsIDUsIDEzNCwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI0NywgMTg3LCAxNSwgMTMyLCAKLSAgICA1LCAyNDQsIDgxLCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyMjAsIAotICAgIDEyMiwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAyNDcsIDE4NywgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDI0NywgCi0gICAgMTg3LCAxNSwgMTMyLCA1LCAyNDQsIDExLCA3MCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgNzAsIDE1LCAxMzIsIDUsIDIxOSwgCi0gICAgMTI1LCA3MCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDcwLCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgNzAsIDE1LCAxMzIsIDUsIAotICAgIDIyOCwgMjAwLCA3MCwgMTUsIDEzMiwgNSwgMTIzLCAyNDMsIDM4LCAxNSwgMTMyLCA1LCAxMTMsIDI0MywgMzgsIDE1LCAKLSAgICAxMzIsIDUsIDEzNCwgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgCi0gICAgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI0MywgMzgsIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyNDMsIDM4LCAKLSAgICAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjQzLCAzOCwgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDI0MywgMzgsIDE1LCAxMzIsIDUsIAotICAgIDEyMywgMjQzLCAzNSwgMTUsIDEzMiwgNSwgMTEzLCAyNDMsIDM1LCAxNSwgMTMyLCA1LCAxMzQsIDI0MywgMzUsIDE1LCAKLSAgICAxMzIsIDUsIDI0NCwgMTEsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDI0MywgMzUsIDE1LCAxMzIsIDUsIDExMywgCi0gICAgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgNzksIDIxNCwgMTIsIDE3LCAKLSAgICAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyMjAsIDc4LCAxNSwgMTMyLCA1LCAKLSAgICAyMTksIDEyNSwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMjIwLCAxMjIsIDIyMCwgNzgsIDE1LCAxMzIsIDUsIDI0NSwgMTkzLCAKLSAgICAyMjAsIDc4LCAxNSwgMTMyLCA1LCAyMjgsIDIwMCwgMjIwLCA3OCwgMTUsIDEzMiwgNSwgMTIzLCAyMjAsIDczLCAxNSwgCi0gICAgMTMyLCA1LCAxMTMsIDIyMCwgNzMsIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3MywgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc0LCAKLSAgICAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjIwLCA3MywgMTUsIDEzMiwgNSwgMjQ0LCA4MSwgMjIwLCA3MywgCi0gICAgMTUsIDEzMiwgNSwgMjIwLCA3OSwgMzAsIDI0MywgMTE5LCA5NiwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIDIyMCwgNzksIDMwLCAKLSAgICAyNDMsIDExOSwgOTYsIDIzMCwgMTg4LCAxNSwgMTMyLCA1LCAxMjMsIDI1MSwgOTUsIDE1LCAxMzIsIDUsIDExMywgMjUxLCAKLSAgICA5NSwgMTUsIDEzMiwgNSwgMTM0LCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAxMzQsIDI1MSwgOTYsIDIxNCwgMTIsIDE3LCAxNSwgCi0gICAgMTMyLCA1LCAyNDQsIDExLCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyNTEsIDk1LCAxNSwgMTMyLCA1LCAxMzQsIAotICAgIDIxNCwgMTIsIDI0NCwgMjAsIDI0NSwgNzQsIDE1LCAxMzIsIDUsIDEzNCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjQ1LCA3MSwgCi0gICAgMTUsIDEzMiwgNSwgMjQ0LCAxMSwgMjE0LCAxMiwgMjQ0LCAyMCwgMjMyLCAyMTcsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIAotICAgIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgMjE1LCAxNSwgMTMyLCA1LCAyNDQsIDExLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzIsIAotICAgIDIxOCwgNjEsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDIxNCwgMTIsIDI0NCwgMjAsIDIzMiwgMjE4LCAyNTMsIDE1OCwgMTUsIAotICAgIDEzMiwgNSwgMjE5LCAxMjUsIDIxNCwgMTIsIDI0NCwgMjAsIDI1MywgMjI4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjE0LCAKLSAgICAxMiwgMjQ0LCAyMCwgMjM2LCA4LCAxNSwgMTMyLCA1LCAyMjAsIDEyMiwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAxMCwgNjEsIAotICAgIDE1LCAxMzIsIDUsIDIyMCwgMTIyLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDEwLCAyNTMsIDE1OCwgMTUsIDEzMiwgNSwgCi0gICAgMjQ1LCAxOTMsIDIxNCwgMTIsIDI0NCwgMjAsIDIxNCwgMTIxLCAxNSwgMTMyLCA1LCAyNDUsIDE5MywgMjE0LCAxMiwgMjQ0LCAKLSAgICAyMCwgMjE0LCAxMjAsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDI0LCAxNSwgMTMyLCAKLSAgICA1LCAyMjgsIDIwMCwgMjE0LCAxMiwgMjQ0LCAyMCwgMjM2LCAyMywgMTUsIDEzMiwgNSwgMjI4LCAyMDAsIDIxNCwgMTIsIAotICAgIDI0NCwgMjAsIDIzNiwgMjIsIDE1LCAxMzIsIDUsIDIyOCwgMjAwLCAyMTQsIDEyLCAyNDQsIDIwLCAyMzYsIDI1LCA2MSwgCi0gICAgMTUsIDEzMiwgNSwgMTEzLCAyNTMsIDIzMiwgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDEzNCwgMjUzLCAyMzIsIDIxNiwgMjM5LCAKLSAgICAxNSwgMTMyLCA1LCAyNDQsIDExLCAyNTMsIDIzMiwgMjE2LCAyMzksIDE1LCAxMzIsIDUsIDI0NCwgODEsIDI1MywgMjMyLCAKLSAgICAyMTYsIDIzOSwgMTUsIDEzMiwgNSwgMjE5LCAxMjUsIDI1MywgMjMyLCAyMTYsIDIzOSwgMTUsIDEzMiwgNSwgMTIzLCAyNTIsIAotICAgIDE1MCwgMTUsIDEzMiwgNSwgMTEzLCAyNTIsIDE1MCwgMTUsIDEzMiwgNSwgMTM0LCAyNTIsIDE1MCwgMTUsIDEzMiwgNSwgCi0gICAgMjQ0LCAxMSwgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIDI0NCwgMTEsIDI1MiwgMTUxLCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgCi0gICAgNSwgMjQ0LCA4MSwgMjUyLCAxNTAsIDE1LCAxMzIsIDUsIDI0NCwgODEsIDI1MiwgMTUxLCAyMTQsIDEyLCAxNywgMTUsIAotICAgIDEzMiwgNSwgMjI4LCAyMTAsIDE1LCAxMzIsIDUsIDIyOCwgMjExLCAxNSwgMTMyLCA1LCAxMjMsIDI0NSwgNzAsIDE1LCAKLSAgICAxMzIsIDUsIDExMywgMjQ1LCA3MCwgMTUsIDEzMiwgNSwgMTIzLCAyMTYsIDE2OSwgMjQ3LCAxODcsIDE1LCAxMzIsIDUsIAotICAgIDExMywgMjE2LCAxNjcsIDI0NywgMTg3LCAxNSwgMTMyLCA1LCAyNDQsIDgxLCAyMTksIDExNCwgMjQ3LCAxODcsIDE1LCAKLSAgICAxMzIsIDUsIDEyMywgMjE2LCAxNjksIDIxNCwgMTIsIDI0NCwgMjAsIDYxLCAxNSwgMTMyLCA1LCAxMTMsIDIxNiwgMTY3LCAKLSAgICAyMTQsIDEyLCAyNDQsIDIwLCA2MSwgMTUsIDEzMiwgNSwgMTIzLCAyNDUsIDE4OSwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIAotICAgIDEyMywgMjI0LCAyMiwgMjUzLCAyMzEsIDE1LCAxMzIsIDUsIDU1LCAyNTMsIDIxOSwgMTIzLCAyMTksIDExNSwgMTUsIDEzMiwgCi0gICAgNSwgNTUsIDI1MywgMjE5LCAxMjMsIDIyNCwgMjEsIDE1LCAyMjQsIDE0MSwgNSwgNTUsIDI1MywgMjE5LCAyMTEsIDIwOSwgCi0gICAgMjQ3LCAxNzIsIDE1LCAyMjQsIDE0MSwgNSwgNjcsIDI0OSwgMjI2LCAxNSwgMjI0LCAxNDEsIDUsIDI0NywgMjU1LCAyNDksIAotICAgIDIyNiwgMTUsIDIyNCwgMTQxLCA1LCAyNDcsIDI1NSwgMjE1LCAyMjEsIDEyLCAxMywgMjU1LCAxNTUsIDEyLCAxMywgMjU1LCAKLSAgICAxNTQsIDEyLCAxMywgMjU1LCAxNTMsIDEyLCAxMywgMjU1LCAxNTIsIDEyLCAxMywgMjU1LCAxNTEsIDEyLCAxMywgMjU1LCAKLSAgICAxNTAsIDEyLCAxMywgMjU1LCAxNDksIDEyLCAxMywgMjU1LCAxNDgsIDEyLCAxMywgMjU1LCAxNDcsIDEyLCAxMywgMjU1LCAKLSAgICAxNDYsIDEyLCAxMywgMjU1LCAxNDUsIDEyLCAxMywgMjU1LCAxNDQsIDEyLCAxMywgMjU1LCAxNDMsIDEyLCAxMywgMjU1LCAKLSAgICAxNDIsIDEyLCAxMywgMjU1LCAxNDEsIDEyLCAxMywgMjU1LCAxNDAsIDEyLCAxMywgMjU1LCAxMzksIDEyLCAxMywgMjU1LCAKLSAgICAxMzgsIDEyLCAxMywgMjU1LCAxMzcsIDEyLCAxMywgMjU1LCAxMzYsIDEyLCAxMywgMjU1LCAxMzUsIDEyLCAxMywgMjU1LCAKLSAgICAxMzQsIDEyLCAxMywgMjU1LCAxMzMsIDEyLCAxMywgMjU1LCAxMzIsIDEyLCAxMywgMjU1LCAxMzEsIDEyLCAxMywgMjU1LCAKLSAgICAxMzAsIDEyLCAxMywgMjU1LCAxMjksIDEyLCAxMywgMjU1LCAxMjgsIDEyLCAxMywgMjU1LCAxMjcsIDEyLCAxMywgMjU1LCAKLSAgICAxMjYsIDEyLCAxMywgMjU1LCAxMjUsIDEyLCAxMywgMjU1LCAxMjQsIDEyLCAxMywgMjU1LCAxMjMsIDEyLCAxMywgMjU1LCAKLSAgICAxMjIsIDEyLCAxMywgMjU1LCAxMjEsIDEyLCAxMywgMjU1LCAxMjAsIDEyLCAxMywgMjU1LCAxMTksIDEyLCAxMywgMjU1LCAKLSAgICAxMTgsIDEyLCAxMywgMjU1LCAxMTcsIDEyLCAxMywgMjU1LCAxMTYsIDEyLCAxMywgMjU1LCAxMTUsIDEyLCAxMywgMjU1LCAKLSAgICAxMTQsIDEyLCAxMywgMjU1LCAxMTMsIDEyLCAxMywgMjU1LCAxMTIsIDEyLCAxMywgMjU1LCAxMTEsIDEyLCAxMywgMjU1LCAKLSAgICAxMTAsIDEyLCAxMywgMjU1LCAxMDksIDEyLCAxMywgMjU1LCAxMDgsIDEyLCAxMywgMjU1LCAxMDcsIDEyLCAxMywgMjU1LCAKLSAgICAxMDYsIDEyLCAxMywgMjU1LCAxMDUsIDEyLCAxMywgMjU1LCAxMDQsIDEyLCAxMywgMjU1LCAxMDMsIDEyLCAxMywgMjU1LCAKLSAgICAxMDIsIDEyLCAxMywgMjU1LCAxMDEsIDEyLCAxMywgMjU1LCAxMDAsIDEyLCAxMywgMjU1LCA5OSwgMTIsIDEzLCAyNTUsIAotICAgIDk4LCAxMiwgMTMsIDI1NSwgOTcsIDEyLCAxMywgMjU1LCA5NiwgMTIsIDEzLCAyNTUsIDk1LCAxMiwgMTMsIDI1NSwgOTQsIAotICAgIDEyLCAxMywgMjU1LCA5MywgMTIsIDEzLCAyNTUsIDkyLCAxMiwgMTMsIDI1NSwgOTEsIDEyLCAxMywgMjU1LCA5MCwgMTIsIAotICAgIDEzLCAyNTUsIDg5LCAxMiwgMTMsIDI1NSwgODgsIDEyLCAxMywgMjU1LCA4NywgMTIsIDEzLCAyNTUsIDg2LCAxMiwgMTMsIAotICAgIDI1NSwgODUsIDEyLCAxMywgMjU1LCA4NCwgMTIsIDEzLCAyNTUsIDgzLCAxMiwgMTMsIDI1NSwgODIsIDEyLCAxMywgMjU1LCAKLSAgICA4MSwgMTIsIDEzLCAyNTUsIDgwLCAxMiwgMTMsIDI1NSwgNzksIDEyLCAxMywgMjU1LCA3OCwgMTIsIDEzLCAyNTUsIDc3LCAKLSAgICAxMiwgMTMsIDI1NSwgNzYsIDEyLCAxMywgMjUzLCAxNTYsIDEyLCAxMywgMjUzLCAxNTQsIDEyLCAxMywgMjUzLCAxNTIsIAotICAgIDEyLCAxMywgMjUzLCAxNTAsIDEyLCAxMywgMjUzLCAxNDgsIDEyLCAxMywgMjUzLCAxNDcsIDEyLCAxMywgMjUzLCAxNDUsIAotICAgIDEyLCAxMywgMjUzLCAxNDMsIDEyLCAxMywgMjUzLCAxNDEsIDEyLCAxMywgMjUzLCAxMzksIDEyLCAxMywgMjUxLCA2MiwgCi0gICAgMTIsIDEzLCAyNTEsIDYxLCAxMiwgMTMsIDI1MSwgNjAsIDEyLCAxMywgMjUxLCA1OSwgMTIsIDEzLCAyNTEsIDU4LCAxMiwgCi0gICAgMTMsIDI1MSwgNTcsIDEyLCAxMywgMjUxLCA1NiwgMTIsIDEzLCAyNTEsIDU1LCAxMiwgMTMsIDI1MSwgNTQsIDEyLCAxMywgCi0gICAgMjUxLCA1MywgMTIsIDEzLCAyNTEsIDUyLCAxMiwgMTMsIDI1MSwgNTEsIDEyLCAxMywgMjUxLCA1MCwgMTIsIDEzLCAyNTEsIAotICAgIDQ5LCAxMiwgMTMsIDI1MSwgNDgsIDEyLCAxMywgMjUxLCA0NywgMTIsIDEzLCAyNTEsIDQ2LCAxMiwgMTMsIDI1MSwgNDUsIAotICAgIDEyLCAxMywgMjUxLCA0NCwgMTIsIDEzLCAyNTEsIDQzLCAxMiwgMTMsIDI1MSwgNDIsIDEyLCAxMywgMjUxLCA0MSwgMTIsIAotICAgIDEzLCAyNTEsIDQwLCAxMiwgMTMsIDI1MSwgMzksIDEyLCAxMywgMjUxLCAzOCwgMTIsIDEzLCAyNTEsIDM3LCAxMiwgMTMsIAotICAgIDI1MSwgMzYsIDEyLCAxMywgMjUxLCAzNSwgMTIsIDEzLCAyNDksIDU5LCAxMiwgMTMsIDI0OSwgNTgsIDEyLCAxMywgMjQ5LCAKLSAgICA1NywgMTIsIDEzLCAyNDksIDU2LCAxMiwgMTMsIDI0OSwgNTUsIDEyLCAxMywgMjQ5LCA1NCwgMTIsIDEzLCAyNDksIDUzLCAKLSAgICAxMiwgMTMsIDI0OSwgNTIsIDEyLCAxMywgMjQ5LCA1MSwgMTIsIDEzLCAyNDksIDUwLCAxMiwgMTMsIDI0OSwgNDksIDEyLCAKLSAgICAxMywgMjQ5LCA0OCwgMTIsIDEzLCAyNDksIDQ3LCAxMiwgMTMsIDI0OSwgNDYsIDEyLCAxMywgMjQ5LCA0NSwgMTIsIDEzLCAKLSAgICAyNDksIDQ0LCAxMiwgMTMsIDI0OSwgNDMsIDEyLCAxMywgMjQ5LCA0MiwgMTIsIDEzLCAyNDksIDQxLCAxMiwgMTMsIDI0OSwgCi0gICAgNDAsIDEyLCAxMywgMjQ5LCAzOSwgMTIsIDEzLCAyNDksIDM4LCAxMiwgMTMsIDI0OSwgMzcsIDEyLCAxMywgMjQ5LCAzNiwgCi0gICAgMTIsIDEzLCAyNDksIDM1LCAxMiwgMTMsIDI0OSwgMzQsIDEyLCAxMywgMjQ5LCAzMywgMTIsIDEzLCAyNDksIDMyLCAxMiwgCi0gICAgMTMsIDI0OSwgMzEsIDEyLCAxMywgMjQ5LCAzMCwgMTIsIDEzLCAyNDksIDI5LCAxMiwgMTMsIDI0OSwgMjgsIDEyLCAxMywgCi0gICAgMjQ5LCAyNywgMTIsIDEzLCAyNDksIDI2LCAxMiwgMTMsIDI0OSwgMjUsIDEyLCAxMywgMjQ5LCAyNCwgMTIsIDEzLCAyNDksIAotICAgIDIzLCAxMiwgMTMsIDI0OSwgMjIsIDEyLCAxMywgMjQ5LCAyMSwgMTIsIDEzLCAyNDksIDIwLCAxMiwgMTMsIDI0OSwgMTksIAotICAgIDEyLCAxMywgMjQ5LCAxOCwgMTIsIDEzLCAyNDksIDE3LCAxMiwgMTMsIDI0OSwgMTYsIDEyLCAxMywgMjQ5LCAxNSwgMTIsIAotICAgIDEzLCAyNDksIDE0LCAxMiwgMTMsIDI0OSwgMTMsIDEyLCAxMywgMjQ5LCAxMiwgMTIsIDEzLCAyNDksIDExLCAxMiwgMTMsIAotICAgIDI0OSwgMTAsIDEyLCAxMywgMjQ5LCA5LCAxMiwgMTMsIDI0OSwgOCwgMTIsIDEzLCAyNDksIDcsIDEyLCAxMywgMjQ5LCA2LCAKLSAgICAxMiwgMTMsIDI0OSwgNSwgMTIsIDEzLCAyNDksIDQsIDEyLCAxMywgMjQ5LCAzLCAxMiwgMTMsIDI0OSwgMiwgMTIsIDEzLCAKLSAgICAyNDksIDEsIDEyLCAxMywgMjQ5LCAwLCAxMiwgMTMsIDI0OCwgMjU1LCAxMiwgMTMsIDI0OCwgMjU0LCAxMiwgMTMsIDI0OCwgCi0gICAgMjUzLCAxMiwgMTMsIDI0OCwgMjUyLCAxMiwgMTMsIDI0OCwgMjUxLCAxMiwgMTMsIDI0OCwgMjUwLCAxMiwgMTMsIDI0OCwgCi0gICAgMjQ5LCAxMiwgMTMsIDI0OCwgMjQ4LCAxMiwgMTMsIDI0OCwgMjQ3LCAxMiwgMTMsIDI0OCwgMjQ2LCAxMiwgMTMsIDI0OCwgCi0gICAgMjQ1LCAxMiwgMTMsIDI0OCwgMjQ0LCAxMiwgMTMsIDI0OCwgMjQzLCAxMiwgMTMsIDI0OCwgMjQyLCAxMiwgMTMsIDI0OCwgCi0gICAgMjQxLCAxMiwgMTMsIDI0OCwgMjQwLCAxMiwgMTMsIDI0OCwgMjM5LCAxMiwgMTMsIDI0OCwgMjM4LCAxMiwgMTMsIDI0OCwgCi0gICAgMjM3LCAxMiwgMTMsIDI0OCwgMjM2LCAxMiwgMTMsIDI0OCwgMjM1LCAxMiwgMTMsIDI0OCwgMjM0LCAxMiwgMTMsIDI0OCwgCi0gICAgMjMzLCAxMiwgMTMsIDI0OCwgMjMyLCAxMiwgMTMsIDI0OCwgMjMxLCAxMiwgMTMsIDI0OCwgMjMwLCAxMiwgMTMsIDI0OCwgCi0gICAgMjI5LCAxMiwgMTMsIDI0OCwgMjI4LCAxMiwgMTMsIDI0OCwgMjI3LCAxMiwgMTMsIDI0OCwgMjI2LCAxMiwgMTMsIDI0OCwgCi0gICAgMjI1LCAxMiwgMTMsIDI0OCwgMjI0LCAxMiwgMTMsIDI0NiwgMjMsIDEyLCAxMywgMjQ2LCAyMiwgMTIsIDEzLCAyNDYsIDIxLCAKLSAgICAxMiwgMTMsIDI0NiwgMjAsIDEyLCAxMywgMjQ2LCAxOSwgMTIsIDEzLCAyNDYsIDE4LCAxMiwgMTMsIDI0NiwgMTcsIDEyLCAKLSAgICAxMywgMjQ2LCAxNiwgMTIsIDEzLCAyNDYsIDE1LCAxMiwgMTMsIDI0NiwgMTQsIDEyLCAxMywgMjQ2LCAxMywgMTIsIDEzLCAKLSAgICAyNDYsIDEyLCAxMiwgMTMsIDI0NiwgMTEsIDEyLCAxMywgMjQ2LCAxMCwgMTIsIDEzLCAyNDYsIDksIDEyLCAxMywgMjQ2LCAKLSAgICA4LCAxMiwgMTMsIDI0NiwgNywgMTIsIDEzLCAyNDYsIDYsIDEyLCAxMywgMjQ2LCA1LCAxMiwgMTMsIDI0NiwgNCwgMTIsIAotICAgIDEzLCAyNDYsIDMsIDEyLCAxMywgMjQ2LCAyLCAxMiwgMTMsIDI0NiwgMSwgMTIsIDEzLCAyNDYsIDAsIDEyLCAxMywgMjQ1LCAKLSAgICAyNTUsIDEyLCAxMywgMjQ1LCAyNTQsIDEyLCAxMywgMjQ1LCAyNTMsIDEyLCAxMywgMjQ1LCAyNTIsIDEyLCAxMywgMjQ1LCAKLSAgICAyNTEsIDEyLCAxMywgMjQ1LCAyNTAsIDEyLCAxMywgMjQ1LCAyNDksIDEyLCAxMywgMjQ1LCAyNDgsIDEyLCAxMywgMjQ1LCAKLSAgICAyNDcsIDEyLCAxMywgMjQ1LCAyNDYsIDEyLCAxMywgMjQ1LCAyNDUsIDEyLCAxMywgMjQ1LCAyNDQsIDEyLCAxMywgMjQ1LCAKLSAgICAyNDMsIDEyLCAxMywgMjQ1LCAyNDIsIDEyLCAxMywgMjQ1LCAyNDEsIDEyLCAxMywgMjQ1LCAyNDAsIDEyLCAxMywgMjQ1LCAKLSAgICAyMzksIDEyLCAxMywgMjQ1LCAyMzgsIDEyLCAxMywgMjQ1LCAyMzcsIDEyLCAxMywgMjQ1LCAyMzYsIDEyLCAxMywgMjQ1LCAKLSAgICA1LCAxMiwgMTMsIDI0NSwgNCwgMTIsIDEzLCAyNDUsIDMsIDEyLCAxMywgMjQ1LCAyLCAxMiwgMTMsIDI0NSwgMSwgMTIsIAotICAgIDEzLCAyNDUsIDAsIDEyLCAxMywgMjQ0LCAyNTUsIDEyLCAxMywgMjQ0LCAyNTQsIDEyLCAxMywgMjQ0LCAyNTMsIDEyLCAxMywgCi0gICAgMjQ0LCAyNTIsIDEyLCAxMywgMjQ0LCAyNTEsIDEyLCAxMywgMjQ0LCAyNTAsIDEyLCAxMywgMjQ0LCAyNDksIDEyLCAxMywgCi0gICAgMjQ0LCAyNDgsIDEyLCAxMywgMjQ0LCAyNDcsIDEyLCAxMywgMjQ0LCAyNDYsIDEyLCAxMywgMjQ0LCAyNDUsIDEyLCAxMywgCi0gICAgMjQ0LCAyNDQsIDEyLCAxMywgMjQ0LCAyNDMsIDEyLCAxMywgMjQ0LCAyNDIsIDEyLCAxMywgMjQ0LCAyNDEsIDEyLCAxMywgCi0gICAgMjQ0LCAyNDAsIDEyLCAxMywgMjQ0LCAyMzksIDEyLCAxMywgMjQ0LCAyMzgsIDEyLCAxMywgMjQ0LCAyMzcsIDEyLCAxMywgCi0gICAgMjQ0LCAyMzYsIDEyLCAxMywgMjQ0LCAyMzUsIDEyLCAxMywgMjQ0LCAyMzQsIDEyLCAxMywgMjQ0LCAyMzMsIDEyLCAxMywgCi0gICAgMjQ0LCAyMzIsIDEyLCAxMywgMjQ0LCAyMzEsIDEyLCAxMywgMjQ0LCAyMzAsIDEyLCAxMywgMjQ0LCAyMjksIDEyLCAxMywgCi0gICAgMjQ0LCAyMjgsIDEyLCAxMywgMjQ0LCAyMjcsIDEyLCAxMywgMjQ0LCAyMjYsIDEyLCAxMywgMjQ0LCAyMjUsIDEyLCAxMywgCi0gICAgMjQ0LCAyMjQsIDEyLCAxMywgMjQ0LCAyMjMsIDEyLCAxMywgMjQ0LCAyMjIsIDEyLCAxMywgMjQ0LCAyMjEsIDEyLCAxMywgCi0gICAgMjQ0LCAyMjAsIDEyLCAxMywgMjQ0LCAyMTksIDEyLCAxMywgMjQ0LCAyMTgsIDEyLCAxMywgMjQ0LCAyMTcsIDEyLCAxMywgCi0gICAgMjQ0LCAyMTYsIDEyLCAxMywgMjQ0LCAyMTUsIDEyLCAxMywgMjQ0LCAyMTQsIDEyLCAxMywgMjQ0LCAyMTMsIDEyLCAxMywgCi0gICAgMjQ0LCAyMTIsIDEyLCAxMywgMjQ0LCAyMTEsIDEyLCAxMywgMjQ0LCAyMTAsIDEyLCAxMywgMjQ0LCAyMDksIDEyLCAxMywgCi0gICAgMjQ0LCAyMDgsIDEyLCAxMywgMjQ0LCAyMDcsIDEyLCAxMywgMjQ0LCAyMDYsIDEyLCAxMywgMjQ0LCAyMDUsIDEyLCAxMywgCi0gICAgMjQ0LCAyMDQsIDEyLCAxMywgMjQ0LCAyMDMsIDEyLCAxMywgMjQ0LCAyMDIsIDEyLCAxMywgMjQ0LCAyMDEsIDEyLCAxMywgCi0gICAgMjQ0LCAyMDAsIDEyLCAxMywgMjQ0LCAxOTksIDEyLCAxMywgMjQ0LCAxOTgsIDEyLCAxMywgMjQ0LCAxOTcsIDEyLCAxMywgCisgICAgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE2MCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE2MCwgMiwgMTg0LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIAorICAgIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgCisgICAgMzksIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIAorICAgIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAxODQsIDcsIAorICAgIDQsIDEsIDE2MCwgMiwgMjUwLCAzOSwgMjIsIDE4NCwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgNTksIDUxLCA3LCAKKyAgICA0LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCA1OSwgNTEsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyNDEsIDU5LCA0OCwgNywgCisgICAgNCwgMSwgMjQwLCAxNjEsIDIsIDI0MSwgNTksIDQ4LCA3LCA2LCAxLCAyNDAsIDE2MSwgMiwgNTksIDUxLCA3LCA0LCAxLCAKKyAgICAyNDAsIDE2MSwgMiwgNTksIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCA1OSwgNTEsIDcsIAorICAgIDYsIDEsIDE0NCwgMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgCisgICAgMjUwLCAzOSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTQyLCA3LCA2LCAxLCAxNDQsIDIsIAorICAgIDI1MCwgMzksIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIAorICAgIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDI0MSwgNTksIDQ4LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAyNDEsIDU5LCAKKyAgICA0OCwgNywgNiwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI1MCwgMzksIDIyLCAxODQsIAorICAgIDcsIDYsIDEsIDE0NCwgMiwgMjUwLCAzOSwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTQ0LCAyLCAyNTAsIDM5LCAyMiwgNTksIAorICAgIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDI0MSwgMCwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCAxNDIsIAorICAgIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMjQyLCAKKyAgICAxNDMsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAKKyAgICAyMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA0LCAxLCAxNDQsIDIsIDI0MSwgCisgICAgMCwgMjIsIDE4NCwgNywgNiwgMSwgMTQ0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDQsIDEsIDE0NCwgMiwgMjQxLCAwLCAKKyAgICAyMiwgNTksIDUxLCA3LCA2LCAxLCAxMDQsIDIsIDU5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCA1OSwgNTEsIDcsIDYsIDEsIAorICAgIDEwNCwgMiwgMjQxLCA1OSwgNDgsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCA1OSwgNDgsIDcsIDYsIDEsIDEwNCwgMiwgMjQxLCAKKyAgICAwLCAyMiwgMTQyLCA3LCA0LCAxLCAxMDQsIDIsIDI0MSwgMCwgMjIsIDE0MiwgNywgNiwgMSwgMTA0LCAyLCAyNDEsIDAsIAorICAgIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTA0LCAyLCAKKyAgICAyNDEsIDAsIDIyLCAyNDEsIDU5LCA0OCwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAyNDEsIDU5LCA0OCwgNywgNiwgCisgICAgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCAxODQsIDcsIDQsIDEsIDEwNCwgMiwgMjQxLCAwLCAyMiwgMTg0LCA3LCA2LCAxLCAKKyAgICAxMDQsIDIsIDI0MSwgMCwgMjIsIDU5LCA1MSwgNywgNCwgMSwgMTA0LCAyLCAyNDEsIDAsIDIyLCA1OSwgNTEsIDcsIDYsIDEsIAorICAgIDIxMSwgMTE4LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjExLCAxMTgsIDIsIDI0MiwgMTQzLCA3LCA2LCAxLCAyMTEsIDExOCwgCisgICAgMiwgNTksIDUxLCA3LCA0LCAxLCAyMTEsIDExOCwgMiwgNTksIDUxLCA3LCA2LCAxLCAyMTEsIDExOCwgMiwgMjQxLCA1OSwgCisgICAgNDgsIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyNDEsIDU5LCA0OCwgNywgNiwgMSwgMjExLCAxMTgsIDIsIDE4NCwgNywgNCwgCisgICAgMSwgMjExLCAxMTgsIDIsIDE4NCwgNywgNiwgMSwgMjMwLCAyMjgsIDIzMiwgMTkxLCA3LCA0LCAxLCAyMzAsIDIyOCwgMjMyLCAKKyAgICAxOTEsIDcsIDYsIDEsIDIzMCwgMjI4LCAyMTQsIDEwNSwgNywgNCwgMSwgMjMwLCAyMjgsIDIxNCwgMTA1LCA3LCA2LCAxLCAKKyAgICAyMTEsIDExOCwgMiwgMjMyLCAxMjksIDcsIDQsIDEsIDIxMSwgMTE4LCAyLCAyMzIsIDEyOSwgMjYsIDQsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyMjQsIDE1NywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAKKyAgICAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgCisgICAgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTcsIAorICAgIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMTQsIDEzLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAKKyAgICAxMTQsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAKKyAgICAyLCAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgCisgICAgMjQ1LCAxMDksIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIAorICAgIDQsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjQ1LCAxMDksIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjQ1LCAKKyAgICAxMDksIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgCisgICAgMTMsIDI2LCA2LCAxLCAyNDUsIDEwOSwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAKKyAgICAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyNDUsIAorICAgIDcyLCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAorICAgIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNCwgMTU4LCAyMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAKKyAgICAxNzgsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYxLCAyNiwgCisgICAgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDI0NSwgCisgICAgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAKKyAgICAyMjQsIDE1NywgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MSwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgCisgICAgMjM1LCAxOTMsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjIsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjM1LCAKKyAgICAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTcsIDI2LCA2LCAKKyAgICAxLCAyMzUsIDE5MywgMiwgMjQ4LCAxNjEsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDEzLCAKKyAgICAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyMjQsIAorICAgIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAKKyAgICAxLCAyMzUsIDE5MywgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIDEsIDIzNSwgMTkzLCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIAorICAgIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIyNiwgCisgICAgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIAorICAgIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjI2LCAyMDQsIAorICAgIDIsIDIyNCwgMTU3LCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDI0OCwgMTYxLCAyNiwgNiwgMSwgMjI2LCAyMDQsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAKKyAgICAyMjYsIDIwNCwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyNDgsIDE2MiwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgCisgICAgMTYxLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAKKyAgICAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNCwgMjYsIAorICAgIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDIyNCwgCisgICAgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgMjYsIDYsIAorICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MSwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIAorICAgIDI2LCA2LCAxLCAyMTQsIDE1OCwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAKKyAgICAyNDgsIDE2MiwgMjIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU3LCAyNiwgNCwgMSwgMjI2LCAKKyAgICAyMDYsIDIsIDI0OCwgMTYxLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxMywgMjYsIDQsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAKKyAgICAyMjYsIDExNCwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAKKyAgICAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1NywgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MSwgCisgICAgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTQsIDI2LCA2LCAKKyAgICAxLCAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgCisgICAgMjIsIDIyNSwgMTc4LCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzgsIDI2LCA0LCAxLCAKKyAgICAyNTQsIDE1MiwgMiwgMjE0LCAxMywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDI0NSwgCisgICAgMTA5LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjQ1LCAxMDksIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgCisgICAgMjE0LCAxMywgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIxNCwgMTMsIAorICAgIDI2LCA0LCAxLCAyMzUsIDE5MywgMiwgMjI2LCAxMTQsIDI2LCA0LCAxLCAyMjYsIDIwNCwgMiwgMjE0LCAxMywgMjYsIDQsIAorICAgIDEsIDIyNiwgMjA0LCAyLCAyMjYsIDExNCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAKKyAgICAxNTgsIDIsIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNCwgMTMsIDI2LCA0LCAxLCAyMjYsIDIwNiwgMiwgCisgICAgMjI2LCAxMTQsIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAKKyAgICAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgCisgICAgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIAorICAgIDEsIDI1NCwgMTUyLCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgCisgICAgMiwgMjI0LCAxNTgsIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIAorICAgIDIyLCAyMTQsIDE0LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgCisgICAgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDI0OCwgMTYyLCAyMiwgMjI2LCAxMTUsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDI1NCwgMTUyLCAyLCAyMjQsIDE1OCwgMjIsIDIyNSwgMTc5LCAyMiwgMjI0LCAxNzAsIDI2LCA2LCAKKyAgICAxLCAyNTQsIDE1MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNCwgMSwgMjQ1LCA3MiwgCisgICAgMiwgMjI0LCAxNTgsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjEwLCAyMTksIAorICAgIDI2LCA0LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAKKyAgICAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIAorICAgIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgCisgICAgMjE5LCAyNiwgNCwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgCisgICAgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjI0LCAxNzAsIDI2LCA2LCAxLCAyNDUsIDcyLCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIDIyLCAyMjQsIDE3MCwgCisgICAgMjYsIDYsIDEsIDI0NSwgNzIsIDIsIDI0OCwgMTYyLCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCAKKyAgICA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAKKyAgICAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIAorICAgIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgCisgICAgMTcwLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyMjYsIDIwNiwgCisgICAgMiwgMjQ4LCAxNjIsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIxNCwgMTQsIAorICAgIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgCisgICAgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE1LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAKKyAgICAyMjYsIDIwNiwgMiwgMjQ4LCAxNjIsIDIyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIAorICAgIDIyNCwgMTU4LCAyMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgCisgICAgMjIsIDIyNSwgMTc5LCAyMiwgMjEwLCAyMTksIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjQsIAorICAgIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIAorICAgIDIsIDIyNCwgMTU4LCAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAKKyAgICAyMiwgMjE0LCAxNCwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNCwgMTU4LCAyMiwgMjI2LCAxMTUsIAorICAgIDIyLCAyMjQsIDE3MCwgMjYsIDYsIDEsIDIyNiwgMjA2LCAyLCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE1LCAyMiwgMjI0LCAKKyAgICAxNzAsIDI2LCA2LCAxLCAyMjYsIDIwNiwgMiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OSwgMjIsIDIyNCwgMTcwLCAyNiwgNiwgCisgICAgMSwgMjI2LCAyMDYsIDIsIDI0OCwgMTYyLCAyMiwgMjI1LCAxNzksIDIyLCAyMjQsIDE3MCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAKKyAgICAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMzEsIDIzNywgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMTQsIAorICAgIDE0LCAyMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgMjEwLCAyMTksIDI2LCA0LCAxLCAyNTQsIDE1MiwgMiwgCisgICAgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI1NCwgMTUyLCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI1NCwgCisgICAgMTUyLCAyLCAyMjUsIDE3OSwgMjIsIDIxMCwgMjE5LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIxMywgMTIwLCAyNiwgNiwgCisgICAgMSwgMjU0LCAxNTIsIDIsIDIzMSwgMjM3LCAyNiwgNiwgMSwgMjU0LCAxNTIsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyNTQsIAorICAgIDE1MiwgMiwgMjI2LCAxMTQsIDI2LCA2LCAxLCAyNTQsIDE1MiwgMiwgMjI0LCAxNzAsIDI2LCAyMzQsIDgsIDI2LCAyMjQsIAorICAgIDE3MCwgMjYsIDIyNCwgMTU3LCAyNiwgMjI1LCAxNzgsIDI2LCAyNDgsIDQsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDI0NSwgCisgICAgNzIsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIxMCwgMjE5LCAyNiwgNCwgMSwgCisgICAgMjQ1LCA3MiwgMiwgMjI2LCAxMTUsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDI0NSwgNzIsIDIsIDIyNSwgMTc4LCAyNiwgCisgICAgNCwgMSwgMjQ1LCA3MiwgMiwgMjI1LCAxNzksIDIyLCAyMTAsIDIxOSwgMjYsIDYsIDEsIDI0NSwgMTA5LCAyLCAyMTQsIDEzLCAKKyAgICAyNiwgNiwgMSwgMjQ1LCAxMDksIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIAorICAgIDI0NSwgNzIsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgMjQ1LCA3MiwgMiwgMjI0LCAxNzAsIDI2LCAyMjQsIDE1OCwgMjIsIAorICAgIDIxNCwgMTMsIDI2LCAyMjQsIDE1OCwgMjIsIDIyNiwgMTE0LCAyNiwgMjI0LCAxNTgsIDIyLCAyMjUsIDE3OCwgMjYsIDQsIAorICAgIDEsIDIzNSwgMTkzLCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIzNSwgMTkzLCAyLCAyMzEsIDIzNywgMjYsIDQsIDEsIDIzNSwgCisgICAgMTkzLCAyLCAyNDgsIDQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgNCwgMjIsIDIyNiwgMTE0LCAKKyAgICAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjM1LCAxOTMsIDIsIDI0OCwgNCwgMjIsIDIyNSwgCisgICAgMTc4LCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxMywgMTIwLCAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIzMSwgMjM3LCAKKyAgICAyNiwgNiwgMSwgMjM1LCAxOTMsIDIsIDIxNCwgMTMsIDI2LCA2LCAxLCAyMzUsIDE5MywgMiwgMjI2LCAxMTQsIDI2LCAyNDgsIAorICAgIDE2MiwgMjIsIDIxNCwgMTMsIDI2LCAyNDgsIDE2MiwgMjIsIDIyNiwgMTE0LCAyNiwgMjQ4LCAxNjIsIDIyLCAyMjUsIDE3OCwgCisgICAgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMzEsIDIzNywgMjYsIDQsIAorICAgIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMTQsIDEzLCAyNiwgNCwgMSwgMjE0LCAxNTgsIDIsIDI0OCwgNCwgMjIsIAorICAgIDIyNiwgMTE0LCAyNiwgNCwgMSwgMjIzLCA0MSwgMiwgMjI0LCAxNTcsIDI2LCA0LCAxLCAyMjMsIDQxLCAyLCAyNDgsIDE2MSwgCisgICAgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyMjUsIDE3OCwgMjYsIDQsIDEsIDIxNCwgMTU4LCAyLCAyNDgsIDQsIDIyLCAyMjUsIAorICAgIDE3OCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTMsIDEyMCwgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMzEsIDIzNywgCisgICAgMjYsIDYsIDEsIDIxNCwgMTU4LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjE0LCAxNTgsIDIsIDIyNiwgMTE0LCAyNiwgNiwgCisgICAgMSwgMjIzLCA0MSwgMiwgMjQ4LCAxNjEsIDI2LCAyNDgsIDQsIDIyLCAyMTQsIDEzLCAyNiwgMjQ4LCA0LCAyMiwgMjI2LCAKKyAgICAxMTQsIDI2LCAyMTQsIDEzLCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIxNCwgMTQsIDIyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIAorICAgIDIyNiwgMjA2LCAyLCAyMTAsIDIxOSwgMjYsIDQsIDEsIDIyNiwgMjA2LCAyLCAyMjYsIDExNSwgMjIsIDIxMCwgMjE5LCAyNiwgCisgICAgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNSwgMTc4LCAyNiwgNCwgMSwgMjI2LCAyMDYsIDIsIDIyNSwgMTc5LCAyMiwgMjEwLCAKKyAgICAyMTksIDI2LCA2LCAxLCAyMjYsIDIwNCwgMiwgMjE0LCAxMywgMjYsIDYsIDEsIDIyNiwgMjA0LCAyLCAyMjYsIDExNCwgMjYsIAorICAgIDYsIDEsIDIyNiwgMjA2LCAyLCAyMTQsIDEzLCAyNiwgNiwgMSwgMjI2LCAyMDYsIDIsIDIyNiwgMTE0LCAyNiwgNiwgMSwgCisgICAgMjI2LCAyMDYsIDIsIDIyNCwgMTcwLCAyNiwgMjI2LCAxMTQsIDI2LCAyNDgsIDE2MSwgMjQ1LCAxNTksIDIyNCwgMzAsIAorICAgIDI0NSwgMTY4LCAyMjQsIDMwLCAyNDUsIDE1OSwgMjE5LCAyMCwgMjQ1LCAxNjgsIDIxOSwgMjAsIDIxNiwgMTQyLCAyMTksIAorICAgIDIwLCAyNDQsIDE3LCAyMTksIDIwLCAyMTksIDEyNSwgMjE5LCAyMCwgMjQ0LCAxMjAsIDIxOSwgMjAsIDIyNCwgMTQ0LCAKKyAgICAyMTksIDIwLCAyMTYsIDE3MSwgMjE5LCAyMCwgMjQyLCA0MiwgMjE5LCAyMCwgMjEwLCA4NywgMjExLCAyNDUsIDIxOSwgMjAsIAorICAgIDIxMCwgODcsIDIxMSwgMjQ1LCAyMjgsIDcyLCAyMTAsIDg3LCAyMTEsIDI0NSwgMjM1LCA2OSwgMjMzLCA0NCwgNzksIDIyMiwgCisgICAgMjQ2LCA3OSwgMjQwLCAxNzUsIDIyOCwgNzMsIDI0MCwgMTc1LCAyNDQsIDEyMCwgMjQ4LCAxNjQsIDI0NSwgMTU5LCAyNDgsIAorICAgIDE2NCwgMjQ1LCAxNjgsIDI0OCwgMTY0LCAyMDMsIDEzMCwgNTIsIDY3LCAyMzIsIDIxOSwgNTIsIDEyMSwgMjMyLCAyMTksIAorICAgIDQzLCAyMTksIDE1NywgMjI0LCAxLCA3OSwgNDQsIDIxOSwgMTU3LCAyMjQsIDEsIDc5LCAyMTksIDE1NywgMjMyLCAxMTUsIAorICAgIDIyNCwgMSwgNzksIDIxOSwgMTU3LCAyNDEsIDE3MCwgMjI0LCAxLCA3OSwgNDMsIDUyLCAyMjQsIDEsIDc5LCA0NCwgNTIsIAorICAgIDIyNCwgMSwgNzksIDUyLCAyMzIsIDExNSwgMjI0LCAxLCA3OSwgNTIsIDI0MSwgMTcwLCAyMjQsIDEsIDc5LCAyNDgsIDIxMywgCisgICAgNTIsIDI0OCwgMjEzLCAyNTEsIDEyMSwgMjE1LCAyMjMsIDI1MSwgMTIxLCAxMjMsIDU5LCAyMzMsIDYyLCAxMTMsIDU5LCAKKyAgICAyMzMsIDYyLCAyMDMsIDI0NSwgMTcxLCAyNDAsIDE3MywgMjI1LCAxMywgMjMyLCAyMjAsIDIyMCwgMTM5LCAyMjYsIDE5LCAKKyAgICAyMjAsIDEzOSwgMjMzLCA0NCwgMjQ1LCAxNjYsIDIyMiwgMjQ2LCAyNDUsIDE2NiwgMjI0LCAyNDksIDI0NywgMjA0LCAyNDQsIAorICAgIDI3LCAyMzMsIDQ0LCAyMjYsIDEyMSwgMjIyLCAyNDYsIDIyNiwgMTIxLCAyMjksIDE5OSwgMjI4LCA3OCwgMjE5LCAyMCwgCisgICAgMjI1LCAxODYsIDIzMCwgMTk4LCA1MCwgMjI1LCAxODYsIDIxNiwgMjQ5LCAyMTYsIDE0OSwgNTAsIDIyNCwgMTkzLCA1MiwgCisgICAgMjI0LCAxOTMsIDIxNSwgMjEyLCAyMjQsIDE5MywgMjIzLCA1MiwgMjI0LCAxOTMsIDIyMywgNTIsIDUyLCAyMjQsIDE5MywgCisgICAgMjIzLCA1MiwgMjE1LCAyMTIsIDIyNCwgMTkzLCAyNTAsIDI0NiwgMjE5LCAxNTcsIDIzMywgNDgsIDI1NCwgMTE4LCAyMjQsIAorICAgIDEsIDc5LCAyMTksIDE1NywgMjIyLCAyNTAsIDI1NCwgMTE4LCAyMjQsIDEsIDc5LCAyMjMsIDExMCwgNzksIDUyLCAyNDUsIAorICAgIDM5LCA3OSwgMjM1LCAyMDgsIDIyNiwgMTIzLCAyMTQsIDE4MCwgMTM1LCAyMTYsIDExMiwgMjUwLCAyNDcsIDIzNSwgMjIzLCAKKyAgICAyMjUsIDEzLCAyNTMsIDIyMiwgMjQwLCAxNzYsIDI1MSwgMTIxLCAyNDQsIDEwLCAyMTksIDk3LCA0MywgNDIsIDI1MSwgCisgICAgMTY2LCAyLCAyMjQsIDEwLCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAyMjQsIDEwLCA1MiwgMjI0LCAxNiwgNzksIDIyNCwgMTYsIAorICAgIDI0NSwgMzksIDc5LCAyNDUsIDM5LCAyMjQsIDE2LCA3OSwgMjE2LCA3MSwgNSwgMjQ1LCA3MywgMjIzLCA1MiwgMjI1LCA3MSwgCisgICAgNTAsIDg1LCAxNDAsIDI1MSwgMTIxLCA4NSwgOTcsIDI1MSwgMTIxLCAxMjEsIDI1MywgMjI0LCAyMjMsIDUyLCAyMjAsIAorICAgIDE1MiwgMjUwLCA5LCAyMTQsIDE2MywgMTEzLCAyNTMsIDIyMywgMjU0LCAxNjcsIDIxMywgMTg4LCAyNDksIDIyNSwgMjMwLCAKKyAgICAxODcsIDUwLCAyMTcsIDIzNSwgMjQ4LCAxNjQsIDIzNSwgMjAwLCAyMTQsIDE4MCwgMjQ0LCA2MCwgMjI0LCAxNDQsIDc5LCAKKyAgICAxMzQsIDU5LCAyMjQsIDE0MywgMjI0LCAyNywgMjI0LCAxOTMsIDI0NCwgMTksIDU5LCAyMjQsIDE0MywgMjQ0LCA4OSwgNTksIAorICAgIDIyNCwgMTQzLCAxMTMsIDU5LCAyMjQsIDE0MywgMjQ0LCAxOSwgNTksIDc5LCAyNDYsIDEyNiwgMjQ5LCAxMzgsIDIxNSwgCisgICAgMjIyLCA2NywgMjQ0LCAxOSwgMjQ3LCAxMjYsIDIzMSwgODcsIDExLCAyMTksIDIwLCAyMTEsIDIwOSwgMjM1LCA2OSwgMjQzLCAKKyAgICAyMzQsIDI1NCwgNjAsIDIzNSwgMTk4LCAyMTYsIDg2LCAyMzUsIDE5OCwgMjIwLCAxMzksIDIzNSwgMTk4LCAyMjUsIDI1LCAKKyAgICAyMzMsIDQ0LCAyMzUsIDE3MSwgMjIyLCAyNDYsIDIzNSwgMTcxLCAyNDQsIDEwMCwgMjE4LCA5MSwgMjM1LCAxNzEsIDIyNCwgCisgICAgMjQ5LCAyNDcsIDIwNCwgMjM1LCAxNzEsIDIzNSwgMjM1LCAyMTcsIDE4MywgMjE3LCAyNTIsIDI1NSwgMTQsIDIxNywgMTgzLCAKKyAgICAyMTcsIDI1MiwgMjM1LCAyMzUsIDksIDI0NCwgMjgsIDIyMCwgODIsIDI1NSwgMTQsIDksIDI0NCwgMjgsIDIyMCwgODIsIAorICAgIDIyOSwgMTk0LCAyMSwgMjIwLCA4MywgMjI4LCA3NCwgMjEsIDIyMCwgODMsIDIxOCwgMjQsIDIxMCwgODYsIDIxOCwgMjQsIAorICAgIDcsIDQsIDEsIDc0LCAyMTgsIDI0LCAxNjEsIDIxOCwgMjQsIDE5MCwgMjE4LCAyNCwgMTk1LCAyMTgsIDI0LCAxOTksIDIxOCwgCisgICAgMjQsIDE5NiwgMjE4LCAyNCwgMjAxLCAyMTgsIDI0LCA5NiwgNTAsIDIxOCwgMjQsIDIzMCwgMTg2LCAyMTgsIDI0LCAyNDUsIAorICAgIDEwNiwgNTAsIDIxOCwgMjQsIDQzLCAyMjYsIDcsIDIxOCwgMjQsIDQ0LCAyMjYsIDcsIDIxOCwgMjQsIDcsIDQsIDEsIDIzMCwgCisgICAgMzAsIDIxOCwgNjYsIDIxMCwgODYsIDIxOCwgNjYsIDExMSwgMjE4LCA2NiwgMTA1LCAyMTgsIDY2LCAxNTgsIDIxOCwgNjYsIAorICAgIDE2MSwgMjE4LCA2NiwgMTkwLCAyMTgsIDY2LCAxOTUsIDIxOCwgNjYsIDE5OSwgMjE4LCA2NiwgMTk2LCAyMTgsIDY2LCAKKyAgICAyMDEsIDIxOCwgNjYsIDk2LCA1MCwgMjE4LCA2NiwgMjMwLCAxODYsIDIxOCwgNjYsIDI0NSwgMTA2LCA1MCwgMjE4LCA2NiwgCisgICAgNDMsIDIyNiwgNywgMjE4LCA2NiwgNDQsIDIyNiwgNywgNywgMjE4LCA2NiwgNCwgMSwgNjEsIDcsIDIxOCwgNjYsIDQsIDEsIAorICAgIDc2LCA3LCAyMTgsIDY2LCA0LCAxLCA3OCwgNywgMjE4LCA2NiwgNCwgMSwgMjExLCAxNzgsIDcsIDIxOCwgNjYsIDQsIDEsIAorICAgIDIyMSwgMTk3LCA3LCAyMTgsIDY2LCA0LCAxLCAyNDIsIDY3LCA3LCAyMTgsIDY2LCA0LCAxLCAyMzUsIDI5LCA3LCAyMTgsIAorICAgIDY2LCA0LCAxLCAxNTYsIDcsIDIxOCwgNjYsIDQsIDEsIDE5NCwgNywgMjE4LCA2NiwgNCwgMSwgMjMwLCAzMCwgNywgMjE4LCAKKyAgICA2NiwgNCwgMSwgMjI2LCAxMDksIDcsIDIxOCwgNjYsIDQsIDEsIDIyMiwgOTMsIDcsIDIxOCwgNjYsIDQsIDEsIDIxNywgCisgICAgMTUzLCAyNDUsIDU0LCA1MCwgMjQ5LCAyMzUsIDUwLCAyNDksIDEyNSwgNTAsIDI0NCwgMywgMjQ0LCA2LCA1MCwgMjMyLCAKKyAgICAyMDQsIDUwLCAyMzAsIDE5OSwgNTAsIDIyOSwgMjE1LCA1MCwgMjI1LCAxNjUsIDUwLCAyMjIsIDEyMCwgNTAsIDIxMSwgCisgICAgMjE3LCA1MCwgMTY2LCAyMjAsIDUxLCA1MCwgMjQ3LCAxMzUsIDUwLCAyNDUsIDU1LCA1MCwgMjM0LCA4MiwgNTAsIDIxNSwgCisgICAgMTEzLCA1MCwgMjQ2LCAxMDksIDUwLCAyNDMsIDQ3LCAyMjUsIDE5NiwgNTAsIDIyNSwgMTYzLCA1MCwgMjQyLCAxMTYsIDUwLCAKKyAgICAyNTMsIDE5MCwgNTAsIDI0MCwgMjM1LCA1MCwgMjUwLCAxOTMsIDUwLCAyMzIsIDE5NywgMjE2LCA0LCA1MCwgMjE5LCAyLCAKKyAgICA1MCwgMjE2LCAyNDYsIDUwLCAyMzUsIDI0OCwgMjIyLCAxMjAsIDUwLCAyMTUsIDk3LCAyMzIsIDIwNCwgNTAsIDM4LCA0MywgCisgICAgMjQyLCA2LCA0OCwgMzgsIDQ0LCAyNDIsIDYsIDQ4LCAzOCwgMjAwLCA2NywgMjMyLCAyMjAsIDIyNiwgMTI0LCAzOCwgMjE5LCAKKyAgICAyNTMsIDY3LCAyMzIsIDIyMCwgMjI2LCAxMjQsIDM4LCAyNTQsIDk2LCA4MCwgNDgsIDM4LCAyNTAsIDEwLCA4MCwgNDgsIAorICAgIDM4LCA0MywgODAsIDQ4LCAzOCwgNDQsIDgwLCA0OCwgMzgsIDIyMiwgMjM3LCAyMjYsIDEyNCwgMzgsIDI1MCwgMTAsIDIyMiwgCisgICAgMjM3LCAyMjYsIDEyNCwgMzgsIDI1NCwgOTYsIDIyMiwgMjM3LCAyMjYsIDEyNCwgMzgsIDEzNCwgMTcwLCA0OCwgMzgsIAorICAgIDI0NCwgMTksIDE3MCwgNDgsIDM4LCAyNDUsIDE1NCwgMjUwLCA0MywgMzgsIDI0NSwgMTU0LCAyMTgsIDIzNiwgMzgsIDI0NSwgCisgICAgMTU0LCAyNDgsIDAsIDM4LCAyNDUsIDE1NCwgMjUwLCA0NCwgMjUyLCAxODgsIDM4LCA0MywgNDQsIDgwLCA0OCwgMzgsIAorICAgIDI0NSwgMTU0LCAyMjEsIDE5MCwgMzgsIDI0NSwgMTU0LCAyMzQsIDE0MSwgMzgsIDI0NSwgMTU0LCAyMTQsIDE1NSwgMjI1LCAKKyAgICAxMCwgMjE1LCAyMjYsIDM4LCAyMjMsIDUzLCAyMTksIDQ5LCAyMjYsIDEyNCwgMzgsIDUyLCA2NywgMjE4LCAxMDUsIDIyNiwgCisgICAgMTI0LCAzOCwgMjU0LCAxMDYsIDg3LCAzOCwgMjE1LCAyMTIsIDIxNCwgMTgyLCAzOCwgMjExLCAyNDcsIDI1MSwgMTQ4LCAKKyAgICA0OCwgMzgsIDE0MCwgODAsIDIyNiwgMTI0LCAzOCwgMjAwLCA1MiwgMjE5LCA0OSwgMjI2LCAxMjQsIDM4LCA5NywgMjQyLCAKKyAgICA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIDM4LCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTExLCAzOCwgNDMsIAorICAgIDgwLCA1MSwgMzgsIDQ0LCA4MCwgNTEsIDM4LCAyNTMsIDIyNSwgNDgsIDI1NSwgMjAsIDIyNiwgMjM1LCAyNTUsIDQsIDIxNiwgCisgICAgNDMsIDIxNiwgMTk3LCAyMTgsIDc1LCAxMzksIDYsIDI1MSwgNzQsIDI0OCwgNzksIDI1MCwgMTg2LCAyNTAsIDE4MywgMjMyLCAKKyAgICAyMjAsIDg3LCAyNTAsIDI0OCwgMjI2LCAyMzUsIDI1MSwgMzQsIDIxNCwgMTg5LCAyNDUsIDU2LCAyNDksIDE5OSwgMjIxLCAKKyAgICAxODcsIDI0OCwgNzksIDI0NCwgMTg3LCAxMTksIDQsIDI0MywgMjA5LCAxMTksIDYsIDI0MiwgNjcsIDI1MSwgMjI3LCA2LCAKKyAgICAyNDIsIDY3LCAxMzksIDYsIDI0MiwgNjcsIDIyNSwgNDAsIDI0OSwgMTk5LCAyMjUsIDQwLCAyNDksIDIwMCwgMTE1LCAxMTMsIAorICAgIDIyNSwgMTExLCAxMTksIDYsIDc0LCAyNTEsIDIyNywgNiwgNzQsIDExOSwgNiwgMTU2LCAxMTksIDQsIDE1NiwgMjMzLCAKKyAgICAxNTUsIDU3LCAyNTIsIDE0OSwgODcsIDEzOSwgNiwgMjMwLCAzMCwgMjI3LCAyMDAsIDUwLCAyMTksIDMzLCAyMjMsIDEyMiwgCisgICAgMjQ5LCAxNzAsIDExOSwgNiwgMjI2LCAxMDksIDEzOSwgNiwgMjI2LCAxMDksIDEzOSwgNiwgMjI0LCA5OSwgMTE5LCA2LCAKKyAgICAxNTMsIDI1MSwgMjI3LCA2LCAxNTMsIDEzOSwgNiwgMTUzLCAyMjQsIDE5OSwgMjE3LCA3MiwgMjIzLCA2NSwgMjIwLCAxMzQsIAorICAgIDc5LCAyMTcsIDIsIDUwLCAyMTUsIDI1NCwgMTY0LCA1MCwgMjEzLCAyNDAsIDEzOSwgNiwgMjEwLCAxNTksIDIyNiwgMTM3LCAKKyAgICA1MCwgMjI2LCAyMjUsIDUwLCAyMzUsIDIwMCwgMjI2LCAyMjUsIDUwLCAyNTEsIDIyNywgNiwgMjEwLCAxNTksIDIxNSwgOTQsIAorICAgIDI2LCA0LCAxLCAyMzUsIDE5MiwgMjM0LCAxNzksIDUwLCAyNTQsIDExNSwgNTAsIDExOSwgNiwgMjUzLCAxNjYsIDI1MSwgCisgICAgMjI3LCA2LCAyNTEsIDc0LCAyNDUsIDc2LCA4NywgMTE5LCA0LCA3NiwgMTE5LCA2LCA3NiwgMTE5LCA2LCAyNDUsIDE0LCAKKyAgICAyMTUsIDk0LCA2LCAyNDUsIDE0LCAxMTksIDYsIDE5NCwgMTE5LCA0LCA3OCwgMTA5LCA4NywgMjUyLCAzNywgODcsIDI0MiwgCisgICAgMjA5LCA4NywgMjQ4LCAxOTgsIDg3LCAyMzUsIDIzOSwgMjE5LCAzMSwgMjIyLCAxODksIDYsIDIyNCwgOTksIDI0NCwgMTkwLCAKKyAgICA1MCwgMTM5LCA0LCAyMjUsIDExMSwgMTM5LCA0LCAyNDMsIDExNCwgMTM5LCA2LCAyNDMsIDExNCwgMTM5LCA2LCAyMjUsIAorICAgIDExMSwgMTM5LCAyMzAsIDI5LCAyMTgsIDQxLCAyMTUsIDk0LCAzNSwgNiwgMjQzLCAyMDksIDIxNSwgOTQsIDM1LCA2LCAKKyAgICAxNTYsIDIyMywgNTIsIDM1LCA2LCAxNTYsIDIxNSwgOTQsIDM1LCA2LCAyMTEsIDExNywgMTM5LCAzMiwgNiwgMjQ5LCA2OCwgCisgICAgMTM5LCAzMiwgNCwgMjQ5LCA2OCwgMTM5LCAzMiwgNCwgNzYsIDEzOSwgMzIsIDQsIDc0LCAxMzksIDMyLCA0LCAyMzUsIAorICAgIDE1MCwgMjI0LCAxNzMsIDIzMiwgMjE5LCAyMTUsIDk0LCAyNTQsIDEzNCwgMjI1LCAxODYsIDUwLCAyNTQsIDE4OSwgMjE1LCAKKyAgICA5NCwgNCwgMjQ1LCAxNCwgMTYsIDMxLCAyMjEsIDI1NCwgMjE5LCAzMSwgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjIwLCAKKyAgICAxMjAsIDIxMiwgMTE0LCAyNDQsIDEwLCAxMjMsIDIyOCwgMTk5LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTIzLCAyMTYsIDI0MiwgCisgICAgMjEyLCAxMTQsIDI0NCwgMTAsIDEyMywgMjE2LCAxNjksIDIxMiwgMTE0LCAyNDQsIDEwLCAxMTMsIDIxNiwgMTY3LCAyMTIsIAorICAgIDExNCwgMjQ0LCAxMCwgMTIzLCAyNDQsIDEyNSwgMjEyLCAxMTQsIDI0NCwgMTAsIDExMywgMjQ0LCAxMjQsIDIxMiwgMTE0LCAKKyAgICAyNDQsIDEwLCAxMzQsIDI0NCwgMTI0LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjQ0LCAxOSwgMjQ0LCAxMjQsIDIxMiwgMTE0LCAKKyAgICAyNDQsIDEwLCAxMjMsIDIxOSwgMTE3LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjQ0LCA4OSwgMjE5LCAxMTUsIDIxMiwgMTE0LCAKKyAgICAyNDQsIDEwLCAxMjMsIDI0NSwgMTk2LCAyMTIsIDExNCwgMjQ0LCAxMCwgMTM0LCAyNDUsIDE5NCwgMjEyLCAxMTQsIDI0NCwgCisgICAgMTAsIDI0NCwgODksIDI0NSwgMTk0LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjIwLCAxMjQsIDI0NSwgMTk0LCAyNDQsIDEwLCAKKyAgICAyMjcsIDIwMSwgMTExLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDExMSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMDUsIDIyMiwgCisgICAgMjAwLCAyMjcsIDIwMiwgMTU4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE2MSwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTAsIAorICAgIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk1LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDE5OSwgMjIyLCAyMDAsIDIyNywgMjAyLCAKKyAgICAxOTYsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjAxLCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNiwgMjQ4LCAyMjIsIDIwMCwgCisgICAgMjI3LCAyMDIsIDI0NSwgMTc1LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNSwgNzYsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCAKKyAgICAxMjIsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTIzLCAyNDAsIDIxNywgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDg5LCAyNDAsIAorICAgIDIxNywgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ4LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDExMSwgNCwgCisgICAgMjIyLCAyMDAsIDIyNywgMjAyLCAxMDUsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTU4LCA0LCAyMjIsIDIwMCwgMjI3LCAKKyAgICAyMDIsIDE2MSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTAsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMTk1LCA0LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDE5OSwgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxOTYsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgCisgICAgMjAxLCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNiwgMjQ4LCA0LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDI0NSwgMTc1LCA0LCAKKyAgICAyMjIsIDIwMCwgMjI3LCAyMDIsIDIxNSwgNzYsIDQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCAxMjIsIDQsIDIyMiwgCisgICAgMjAwLCAyMjcsIDIwMiwgMTIzLCAyNDAsIDIxNywgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAyNDQsIDg5LCAyNDAsIDIxNywgCisgICAgNCwgMjIyLCAyMDAsIDIyNywgMjAyLCAxMjMsIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjE2LCAxNDksIAorICAgIDI1MSwgNzUsIDI0OSwgNjgsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDgsIDIyMiwgMjAwLCAyMjcsIAorICAgIDIwMiwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDIyMywgNTIsIDEyMywgMjQwLCAyMTcsIDcsIAorICAgIDQsIDEsIDIyMywgNTIsIDI1MSwgNzQsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjE5LCAxMjcsIDIzMywgODQsIDE3LCAyMjIsIAorICAgIDIwMCwgMjI3LCAyMDIsIDI0NCwgMTIzLCAyNDUsIDIzNCwgMTcsIDIyMiwgMjAwLCAyMjcsIDIwMiwgMjQ0LCAxMjMsIDIxNiwgCisgICAgMTQ4LCAyMjIsIDIwMCwgMjI3LCAyMDIsIDEyMywgMjQwLCAyMTgsIDIxNiwgMTQ4LCAyMTIsIDExNCwgMjQ0LCAxMCwgMjEwLCAKKyAgICA4NywgMjE2LCAxNjcsIDE0MCwgNzUsIDIxNCwgMTUzLCA3NSwgOTcsIDc1LCAyNDYsIDExMiwgNzUsIDQzLCA0NCwgNzUsIAorICAgIDEyMCwgMTI0LCA3NSwgMjI4LCA2MSwgMjEyLCA5LCA3NSwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMTksIDMwLCAyNDUsIAorICAgIDIyOCwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgNzUsIDE0MCwgODAsIDIsIDkxLCA5NywgODAsIDIsIDkxLCAxNDAsIDIxMiwgCisgICAgMzYsIDc1LCA5NywgMjEyLCAzNiwgNzUsIDE0MCwgMTEzLCAyNDEsIDI0MSwgNzUsIDIxNCwgMTUzLCAxMTMsIDI0MSwgMjQxLCAKKyAgICA3NSwgOTcsIDExMywgMjQxLCAyNDEsIDc1LCAyNDYsIDExMiwgMTEzLCAyNDEsIDI0MSwgNzUsIDE0MCwgODAsIDIsIDIxNywgCisgICAgNzgsIDk3LCA4MCwgMiwgMjE3LCA3OCwgMTQwLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjE0LCAxNTMsIDgwLCAyNDMsIDI1MSwgCisgICAgMTMwLCA5NywgODAsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCA4MCwgMjQzLCAyNTEsIDEzMCwgMTIwLCAxMjQsIDgwLCAyLCAKKyAgICAyNTIsIDEzNSwgMTQwLCA4MCwgMiwgMTAzLCA5NywgODAsIDIsIDEwMywgMTQwLCA4MCwgMiwgMjMyLCAxMjksIDk3LCA4MCwgCisgICAgMiwgMjMyLCAxMjksIDQzLCA0NCwgMjEyLCAzNiwgNzUsIDQzLCA0NCwgODAsIDIsIDkxLCAyNDYsIDExMiwgMjEwLCAzNSwgCisgICAgNzUsIDIxNCwgMTUzLCA4MCwgMiwgMjE2LCA3OCwgMjMzLCA0MywgMjE0LCAxNTMsIDgwLCAyLCAyMTYsIDc4LCAyMjIsIAorICAgIDI0NCwgMjQ2LCAxMTIsIDgwLCAyLCAyMTYsIDc4LCAyMzMsIDQzLCAyNDYsIDExMiwgODAsIDIsIDIxNiwgNzgsIDIyMiwgCisgICAgMjQ0LCA5NywgODAsIDIsIDI0OSwgMTY5LCAyNDYsIDExMSwgMjQ2LCAxMTIsIDgwLCAyLCAyNDksIDE2OSwgMjMzLCA0MywgCisgICAgMjU0LCA5NiwgMjE2LCAxNSwgMjIwLCAxNTUsIDc1LCAyNTAsIDEwLCAyMTYsIDE1LCAyMjAsIDE1NSwgNzUsIDIyOCwgNjEsIAorICAgIDIxMiwgOSwgODAsIDIxNiwgNDMsIDIwMCwgMTMwLCAxNDAsIDgwLCAyMTYsIDQzLCAyNTIsIDE0OSwgMTE1LCA5NywgODAsIAorICAgIDIxNiwgNDMsIDEzMCwgMjU0LCA5NiwgMjA0LCAyNTAsIDQ0LCA3NSwgMjUwLCAxMCwgMjA0LCAyNTAsIDQ0LCA3NSwgMTQwLCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE1MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyNDYsIDExMSwgMjE0LCAKKyAgICAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjQ0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjMzLCAKKyAgICA0MywgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIxNCwgMTUyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTEsIAorICAgIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI0NCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAorICAgIDIzMywgNDMsIDk3LCA4MCwgMTE1LCAxNDAsIDc1LCAyMTQsIDE1MywgODAsIDE0MCwgNjQsIDI0NiwgMTEyLCA3NSwgMTQwLCAKKyAgICA4MCwgMTE1LCA5NywgNzUsIDE0MCwgMjI2LCA3NCwgMjUzLCAyNTUsIDIxNCwgMTUzLCAyMjYsIDc0LCAyNTMsIDI1NSwgOTcsIAorICAgIDIyNiwgNzQsIDI1MywgMjU1LCAyNDYsIDExMiwgMjI2LCA3NCwgMjUzLCAyNTUsIDE0MCwgMjQyLCA2LCAxMTUsIDk3LCAKKyAgICAyNDIsIDUsIDk3LCAyNDIsIDYsIDExNSwgMTQwLCAyNDIsIDUsIDE0MCwgNTIsIDgwLCAyLCA5MSwgNDMsIDQ0LCA1MiwgODAsIAorICAgIDIsIDkxLCA5NywgNTIsIDgwLCAyLCA5MSwgMTQwLCA1MiwgNzUsIDIxNCwgMTUzLCA1MiwgNzUsIDk3LCA1MiwgNzUsIDI0NiwgCisgICAgMTEyLCA1MiwgNzUsIDQzLCA0NCwgNTIsIDc1LCAxMjAsIDEyNCwgNTIsIDc1LCAyMjgsIDYxLCAyMTIsIDksIDUyLCA3NSwgCisgICAgMjI4LCA2MSwgMjQ1LCAyMjgsIDUyLCA3NSwgMjE5LCAzMCwgMjQ1LCAyMjgsIDUyLCA3NSwgMjE5LCAzMCwgMjEyLCA5LCAKKyAgICA1MiwgNzUsIDE0MCwgMjE1LCAyMTIsIDc1LCA5NywgMjE1LCAyMTIsIDc1LCAxNDAsIDIxOCwgMjMyLCA3NSwgOTcsIDIxOCwgCisgICAgMjMyLCA3NSwgMjE0LCAxNTMsIDgwLCAyLCA1MiwgOTEsIDI0NiwgMTEyLCA4MCwgMiwgNTIsIDkxLCAxNDAsIDI0OCwgMTYzLCAKKyAgICA3NSwgMjE0LCAxNTMsIDI0OCwgMTYzLCA3NSwgOTcsIDI0OCwgMTYzLCA3NSwgMjQ2LCAxMTIsIDI0OCwgMTYzLCA3NSwgCisgICAgMTQwLCA4MCwgMjE2LCA0MywgMTMwLCA5NywgODAsIDIxNiwgNDMsIDEzMCwgMTQwLCA3MSwgNzUsIDIxNCwgMTUzLCA3MSwgCisgICAgNzUsIDk3LCA3MSwgNzUsIDI0NiwgMTEyLCA3MSwgNzUsIDIxNCwgMTUzLCA3MSwgODAsIDI0MywgMjUxLCAxMzAsIDIxNCwgCisgICAgMTUzLCA3MSwgODAsIDIyNiwgMjAxLCAyMjUsIDIxNywgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE4LCAyLCAKKyAgICAyMDMsIDEzMCwgMjE0LCAxNTMsIDcxLCA4MCwgMjI2LCAyMDEsIDIyNSwgMjE4LCAyLCA2NywgMTMwLCAyMTQsIDE1MywgNzEsIAorICAgIDUyLCA3NSwgMjE0LCAxNTMsIDcxLCA1MiwgODAsIDIyNiwgMjAxLCAyMjUsIDIxNywgOTcsIDcxLCA4MCwgMjQzLCAyNTEsIAorICAgIDIxMiwgNTYsIDIyOCwgNjEsIDIxMiwgOSwgODAsIDIxNiwgNDMsIDI0OSwgMTY4LCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIAorICAgIDIxNiwgNDMsIDI0OSwgMTY4LCAxMjAsIDEyNCwgNzEsIDc1LCA0NCwgODAsIDIsIDQsIDI1MCwgNDMsIDI0NiwgMTEyLCA4MCwgCisgICAgMTQwLCA2NCwgMjE0LCAxNTMsIDc1LCAxMzQsIDk3LCAyNTMsIDI1NSwgMTQwLCA4MCwgMiwgNjcsIDkxLCA5NywgODAsIDIsIAorICAgIDY3LCA5MSwgNDMsIDQ0LCA4MCwgMiwgNjcsIDkxLCAxNDAsIDgwLCAyLCA1MiwgNjcsIDkxLCA5NywgODAsIDIsIDUyLCA2NywgCisgICAgOTEsIDQzLCA0NCwgODAsIDIsIDUyLCA2NywgOTEsIDE0MCwgMjI2LCAxNzcsIDc1LCA5NywgMjI2LCAxNzcsIDc1LCA0MywgCisgICAgNDQsIDIyNiwgMTc3LCA3NSwgMzEsIDI1NCwgMTYzLCAyNDksIDIyMiwgMjI2LCAxLCAyNDcsIDI0MSwgMjE2LCAxODgsIAorICAgIDI0NSwgMzUsIDIxNiwgMTg4LCAyNDcsIDE0NiwgMjI4LCA1NywgMjQ1LCAzNiwgMjQ1LCAxNjAsIDIyMCwgMTI5LCAyMzUsIAorICAgIDI1MiwgMjI5LCAyMjYsIDI0NSwgMTc4LCAyMjYsIDIzNSwgMjI4LCA1NywgMjU0LCAxMzIsIDI0NSwgMTc4LCAyMjYsIDIzNSwgCisgICAgNCwgMjQ1LCAxNzgsIDIyNiwgMjM1LCAyNDksIDE5NCwgMjUzLCAyNDYsIDIzMSwgNjcsIDI0NywgMTQ2LCAyMjgsIDU3LCAKKyAgICAyNDksIDE5NiwgMjUzLCAyNDYsIDIzMSwgNjcsIDQsIDI0OSwgMTk0LCAyNTMsIDI0NiwgMjMxLCA2NywgMjQ1LCAxNTEsIAorICAgIDY0LCAyMjQsIDE3NSwgMjMwLCAyOSwgMjI0LCAxODMsIDIzMCwgMjksIDI0OSwgMTczLCAyMzAsIDI5LCAyMTgsIDQxLCAKKyAgICAyMzAsIDE4NywgNTAsIDIzMCwgMTg1LCA1MCwgNTksIDIyNSwgMjUsIDI0NywgMTc3LCAyMTksIDk3LCAyMjAsIDEzMCwgCisgICAgMjMwLCAxODYsIDI1MywgMjI1LCAyMjYsIDE3MSwgMjIyLCAyMzcsIDIyNiwgMTcxLCAyNTEsIDEyMiwgMjI2LCAxNzEsIDQyLCAKKyAgICAyMjIsIDE5NSwgMjQ5LCAxMTcsIDIyMiwgMTk1LCAyNDQsIDEyLCAyMjIsIDE5NSwgMjI0LCAxNzEsIDExMiwgMjM1LCAyNDEsIAorICAgIDQ0LCAyNTQsIDExNywgMjU0LCAxMTcsIDIzMSwgOTMsIDI1NCwgMTE3LCAyMTksIDEsIDI1NCwgMTE3LCAyNDcsIDE3OSwgCisgICAgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NywgMTgyLCAyMjYsIDEyLCAxMTIsIDIyOCwgNTcsIDIyNiwgMTIsIDExMiwgMjMyLCAKKyAgICAxNTIsIDI1NCwgMTI2LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIzNSwgMjA1LCAyMTQsIDE3NSwgMjM1LCAyMTgsIDUyLCAyMzUsIAorICAgIDIxOCwgMjE1LCAyMTIsIDIzNSwgMjE4LCAyNDksIDE5MCwgMjM1LCAyMTgsIDIxOCwgMTQsIDIzNSwgMjE4LCAyMTMsIDEyOSwgCisgICAgMjM1LCAyMTgsIDI1MCwgMTAsIDIzNSwgMjE4LCAyNTAsIDEwLCAyNDksIDE5MCwgMjM1LCAyMTgsIDI1NCwgOTYsIDI0OSwgCisgICAgMTkwLCAyMzUsIDIxOCwgMjE2LCAxODcsIDI1MiwgNzUsIDIyMywgMTQwLCAyMjQsIDE3MiwgNTksIDIzMCwgMTg2LCAyNDUsIAorICAgIDQxLCAyNDMsIDUzLCAyMjQsIDE3MiwgMjQxLCA2NCwgMjE2LCA5MCwgMjI2LCAxNzEsIDIyMywgNTIsIDE4NCwgMjM1LCAKKyAgICAyMDAsIDIzMywgNzEsIDIyMiwgOTMsIDIxOSwgMTU5LCAyMTIsIDM1LCAyMTEsIDIwMCwgMjI0LCAxODMsIDIyOCwgNTcsIAorICAgIDE4NCwgMjMwLCAxODcsIDE4NCwgMjUzLCAyMTgsIDEyOCwgMTEyLCAyMjgsIDU3LCAyNTMsIDIxOCwgMTI4LCAxMTIsIDI1NCwgCisgICAgNTYsIDEyOCwgMTEyLCAyNTQsIDU2LCAyNTEsIDk2LCAyMjgsIDU3LCAyNTUsIDEzLCAxMjgsIDExMiwgMjI5LCAxMDUsIAorICAgIDI1NCwgNTYsIDIyOCwgNjQsIDI1NSwgMTMsIDEyOCwgMTEyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIyOCwgNTcsIDI1NCwgCisgICAgMTU2LCAxMjgsIDExMiwgMjU0LCAxNTYsIDEyOCwgMTc3LCAxMjgsIDExMiwgMjE1LCAyMTIsIDE4NCwgMjU0LCAxNjQsIAorICAgIDEyOCwgMTEyLCAyNDUsIDEwMiwgMTEyLCAyNDMsIDUyLCAyNDUsIDEwMiwgMTEyLCAyNDcsIDI0MiwgMjUyLCAzMSwgMjU0LCAKKyAgICA1OCwgMjE2LCAxOTcsIDIzMiwgMjI3LCAyNDMsIDUyLCAxMjgsIDExMiwgMjU0LCA1NiwgMTI4LCAyMTYsIDQzLCAxNzcsIAorICAgIDIxNiwgMTk3LCAyMzYsIDIyLCAyMjYsIDIzNSwgMjM2LCAyMiwgNjQsIDE3NywgMjU0LCA1NiwgMTI4LCAxMTIsIDI0OSwgCisgICAgMjM1LCAyNDUsIDEwNSwgMjQ1LCAxMDYsIDI0OSwgMjM0LCAyMjIsIDIzNywgMjM2LCA3LCAxMjgsIDExMiwgMjIyLCAyMzcsIAorICAgIDEyOCwgMTEyLCAyNDksIDE2MiwgMTEyLCAyNDUsIDc1LCAyNDUsIDEwNCwgMTEyLCAyMTgsIDE1OSwgMjQ1LCAxMDUsIDI0OCwgCisgICAgNjMsIDEyOCwgMTEyLCAxMjgsIDIxNiwgNDMsIDI1MSwgODYsIDI0OCwgODAsIDIzMSwgOTMsIDI1MSwgODUsIDIyNCwgMTQsIAorICAgIDEyOCwgMTEyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjQwLCAxMTEsIDExMiwgMjI4LCA1NywgMjQwLCAxMTEsIDExMiwgMjE4LCAKKyAgICAxMTEsIDI0NSwgMTAyLCAxMTIsIDIzMywgMjEsIDE3NywgMTI4LCAxMTIsIDI0MiwgMTM3LCAxNzcsIDEyOCwgMTEyLCAyMzMsIAorICAgIDIxLCAxMTUsIDEyOCwgMTEyLCAyNDIsIDEzNywgMTE1LCAxMjgsIDExMiwgMjMzLCAyMSwgMjUxLCA5NiwgMjI4LCA1NywgCisgICAgMTI4LCAxMTIsIDI0MiwgMTM3LCAyNTEsIDk2LCAyMjgsIDU3LCAxMjgsIDExMiwgMjMwLCAxMDIsIDIzMywgMjAsIDIzMCwgCisgICAgMTAyLCAyNDIsIDEzNiwgMjUyLCAzMSwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjI4LCA1NywgMjMzLCAyMCwgMjI4LCAKKyAgICA1NywgMjQyLCAxMzYsIDIyOSwgMTA1LCAyMzMsIDIxLCAyMjgsIDY0LCAxMjgsIDExMiwgMjI5LCAxMDUsIDI0MiwgMTM3LCAKKyAgICAyMjgsIDY0LCAxMjgsIDExMiwgMjMzLCAyMSwgMTc3LCAyNDUsIDEwMiwgMTEyLCAyNDIsIDEzNywgMTc3LCAyNDUsIDEwMiwgCisgICAgMTEyLCAyMjksIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMjQ1LCAxMDIsIDExMiwgMjI5LCAxMDUsIDI0MiwgMTM3LCAyMjgsIAorICAgIDY0LCAyNDUsIDEwMiwgMTEyLCAyMzMsIDIxLCAxNzcsIDI0MiwgMTM2LCAyNDIsIDEzNywgMTc3LCAyMzMsIDIwLCAyMjksIAorICAgIDEwNSwgMjMzLCAyMSwgMjI4LCA2NCwgMjQyLCAxMzYsIDIyOSwgMTA1LCAyNDIsIDEzNywgMjI4LCA2NCwgMjMzLCAyMCwgCisgICAgMjI0LCAyMDUsIDIxOCwgNTYsIDIyNCwgMjA2LCAxNzcsIDEyOCwgMTEyLCAyMTgsIDU3LCAxNzcsIDEyOCwgMTEyLCAyMjQsIAorICAgIDIwNiwgMTc3LCAyNDUsIDEwMiwgMTEyLCAyMTgsIDU3LCAxNzcsIDI0NSwgMTAyLCAxMTIsIDI0NywgMTQ2LCAyMjgsIDU3LCAKKyAgICAyMjQsIDIwOCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDIxOCwgNTgsIDIxOCwgNjUsIDIyNiwgMjM1LCAyMTgsIDIzLCAyMjYsIAorICAgIDIzNSwgMjI4LCA1NywgMTE2LCAyMTgsIDY1LCAyMjYsIDIzNSwgMjI4LCA1NywgMTE2LCAyMTgsIDIzLCAyMjYsIDIzNSwgCisgICAgMjE4LCA2NSwgNjQsIDE3NywgMTI4LCAxMTIsIDIxOCwgMjMsIDY0LCAxNzcsIDEyOCwgMTEyLCAyMjksIDEwNSwgMTE2LCAKKyAgICAyMTgsIDY1LCA2NCwgMjI4LCA2NCwgMTI4LCAxMTIsIDIyOSwgMTA1LCAxMTYsIDIxOCwgMjMsIDY0LCAyMjgsIDY0LCAxMjgsIAorICAgIDExMiwgMjE4LCA2NSwgNjQsIDIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDIzLCA2NCwgMiwgMjI4LCA1NywgMTI4LCAKKyAgICAxMTIsIDIzMCwgODYsIDIzMCwgODcsIDIzMCwgODgsIDIzMCwgODcsIDIxNCwgMTc1LCA0MiwgMjM2LCAyMiwgMjI2LCAyMzUsIAorICAgIDQyLCAyMjYsIDE1NCwgMjI2LCAyMzUsIDQyLCAyMzYsIDIyLCA2NCwgMTc3LCAxMjgsIDExMiwgNDIsIDIyNiwgMTU0LCA2NCwgCisgICAgMTc3LCAxMjgsIDExMiwgNDIsIDI1MSwgMywgNDIsIDI0OSwgMTEwLCAzNywgMjI1LCAyNSwgMzcsIDIzMCwgMTg2LCAzNywgCisgICAgMjE2LCA4NiwgMzcsIDI0NywgMTc3LCAyMTksIDk3LCAzNywgNTksIDIyNiwgMTcxLCAzNywgMjIyLCAyMzcsIDIyNiwgMTcxLCAKKyAgICAzNywgMjUzLCAyMjUsIDIyNiwgMTcxLCAzNywgMjQ1LCAxMDUsIDM3LCAyNDgsIDE2NCwgOTIsIDIyNSwgMjUsIDkyLCAyMzAsIAorICAgIDE4NiwgOTIsIDIxNiwgODYsIDkyLCA1OSwgMjI2LCAxNzEsIDQ0LCAyMTcsIDg4LCA0MywgMjE3LCA4OCwgMTI0LCAyMTcsIAorICAgIDg4LCAxMjAsIDIxNywgODgsIDI1MywgMjI4LCAyMzAsIDE2MSwgMjE1LCAxOTIsIDI0NCwgMzMsIDIxNSwgMjEyLCA2NywgCisgICAgMjUyLCAxNDksIDQ0LCAyMTUsIDkzLCA1MiwgNjcsIDI1MiwgMTQ5LCA1MiwgNDQsIDIxNSwgOTMsIDI0NywgMTQ2LCAyMjgsIAorICAgIDU3LCAyMjQsIDE2NiwgMjI4LCA1NywgMjE1LCAxOTIsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDQsIDM0LCAyMjksIDEwNywgCisgICAgNTIsIDY3LCAyNTIsIDE0OSwgNTIsIDQ0LCAyMTUsIDkzLCAyMjQsIDIwNiwgMjE0LCAxODQsIDIyMywgOTQsIDIxOCwgNTcsIAorICAgIDIxNCwgMTg0LCAyMjMsIDk0LCAyMjgsIDYyLCAyMTgsIDc4LCAyMjYsIDIzNSwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAyMjgsIAorICAgIDYyLCAyMTgsIDc3LCAyMjgsIDYyLCAyMTgsIDc4LCA2NCwgMTc3LCAxMjgsIDExMiwgMjQ5LCAxOTQsIDI1MywgMjQ2LCAKKyAgICAyMjgsIDYyLCAyMTgsIDc4LCAxNzcsIDEyOCwgMTEyLCAyMjYsIDE1NCwgMjI2LCAyMzUsIDIzNiwgMjIsIDIyNiwgMjM1LCAKKyAgICAyMzAsIDkyLCAyNDEsIDIwNywgMjQ5LCAyMDQsIDIzMSwgMTQyLCAyMzUsIDIxNSwgMjExLCAxNDUsIDIyOSwgMjA3LCAyMjgsIAorICAgIDYzLCA0NCwgMjU0LCAxMTgsIDIsIDI1NCwgMzMsIDQ0LCAyMTUsIDIyNiwgMjMwLCAyOSwgMjMyLCAxNTIsIDI1NCwgMTI2LCAKKyAgICAyMzAsIDI5LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIzMCwgMjksIDIzNSwgMjA1LCAyMzAsIDI5LCAyMTQsIDE3NSwgMjQ4LCAKKyAgICAxLCAyMjYsIDE3MSwgNTksIDIyNiwgMTcxLCAyMTgsIDE1OSwgMjI2LCAxNzEsIDI0NywgMTc3LCAyMTYsIDg2LCAyNTEsIAorICAgIDE3MiwgNDMsIDIyOCwgNjIsIDI0NCwgMTg5LCAyMjAsIDE1MSwgMjI0LCAxODMsIDQ0LCAyMjgsIDYyLCAyNDQsIDE4OSwgCisgICAgMjIwLCAxNTEsIDIyNCwgMTgzLCA0MywgMjIwLCAxNTEsIDIyNCwgMTgzLCA0NCwgMjIwLCAxNTEsIDIyNCwgMTgzLCAyMjMsIAorICAgIDUyLCAyMTYsIDkwLCAyNDUsIDEwNSwgMjQ5LCAxMDcsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjQ5LCAxMDcsIDIzMiwgMTUyLCAKKyAgICAyNTQsIDEyNiwgNTIsIDIxOCwgNjQsIDUyLCAyMTgsIDIyLCA1MiwgMjM1LCAyMDUsIDUyLCAyMTQsIDE3NSwgMjI1LCA1MCwgCisgICAgMTI4LCAyMiwgMjI2LCAxMiwgMTEyLCAyMzMsIDIxLCAyLCAyNDcsIDEyOCwgMjQyLCAxMzcsIDIsIDI0NywgMTI4LCAyMTMsIAorICAgIDE4NywgMjMwLCAxMDIsIDIzMywgMjAsIDIxMywgMTg3LCAyMzAsIDEwMiwgMjQyLCAxMzYsIDIzMywgMjEsIDEyOCwgMjE2LCAKKyAgICA0MywgMTc3LCAyNDIsIDEzNiwgMjQyLCAxMzcsIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAxMjgsIDIxNiwgNDMsIAorICAgIDE3NywgMjMzLCAyMCwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAxMjgsIDIxNiwgNDMsIDE3NywgMjI0LCAyMDUsIAorICAgIDEyOCwgMjE2LCA0MywgMTc3LCAyMTgsIDU2LCAyNDcsIDE0NiwgMjI4LCA1NywgMjI0LCAyMDksIDE3NywgMjQ1LCAxMDcsIAorICAgIDI0NywgMTQ2LCAyMjgsIDU3LCAyMTgsIDU5LCAxNzcsIDI0NSwgMTA3LCAyMjgsIDU3LCA0MiwgMjM2LCAyMiwgNjQsIDE3NywgCisgICAgMTI4LCAxMTIsIDIyOCwgNTcsIDQyLCAyMjYsIDE1NCwgNjQsIDE3NywgMTI4LCAxMTIsIDQyLCAyMzYsIDIyLCA2NCwgMTc3LCAKKyAgICAyMjgsIDU3LCAxMjgsIDExMiwgNDIsIDIyNiwgMTU0LCA2NCwgMTc3LCAyMjgsIDU3LCAxMjgsIDExMiwgMjMzLCAyMSwgCisgICAgMjUxLCA5NiwgMjI4LCA1NywgMjQ1LCAxMDIsIDExMiwgMjQyLCAxMzcsIDI1MSwgOTYsIDIyOCwgNTcsIDI0NSwgMTAyLCAKKyAgICAxMTIsIDIyNCwgMjA2LCAyNTEsIDk2LCAyMjgsIDU3LCAyNDUsIDEwMiwgMTEyLCAyMTgsIDU3LCAyNTEsIDk2LCAyMjgsIAorICAgIDU3LCAyNDUsIDEwMiwgMTEyLCAyMjgsIDU3LCAyMjgsIDYyLCAyMTgsIDc4LCAyMjYsIDIzNSwgMjQ3LCAxNDYsIDIyOCwgCisgICAgNTcsIDI0OSwgMTk2LCAyNTMsIDI0NiwgMjI4LCA2MiwgMjE4LCA3NywgMjI4LCA1NywgMjI4LCA2MiwgMjE4LCA3OCwgNjQsIAorICAgIDE3NywgMTI4LCAxMTIsIDI0NywgMTQ2LCAyMjgsIDU3LCAyNDksIDE5NiwgMjUzLCAyNDYsIDIyOCwgNjIsIDIxOCwgNzgsIAorICAgIDE3NywgMjQ1LCAxMDcsIDY3LCAyNDUsIDE3MSwgMjMwLCAyMjcsIDIwMywgMjQ1LCAxNzEsIDEyMCwgNDQsIDI0OCwgNywgCisgICAgMjQ1LCAxNzEsIDEyNCwgNDQsIDI0OCwgNywgMjQ1LCAxNzEsIDI0NSwgMTc4LCA2NCwgMiwgMjAwLCAyMDMsIDkxLCAyNDUsIAorICAgIDE3OCwgNjQsIDIsIDY3LCAyNTIsIDE0OSwgMjUzLCAyMTUsIDI0NSwgMTUxLCA2NCwgMjAzLCA5MSwgNCwgMjQ1LCAxNzgsIAorICAgIDY0LCAyLCA2NywgMjUyLCAxNDksIDI1MywgMjE1LCAyNDUsIDE1MSwgNjQsIDIwMywgOTEsIDI0NSwgMTc4LCA2NCwgMiwgCisgICAgNTksIDQ4LCAyNDUsIDE3OCwgNjQsIDIsIDIyNiwgMTI3LCA0LCAyNDUsIDE3OCwgNjQsIDIsIDIyNiwgMTI3LCAyNDUsIAorICAgIDE3OCwgNjQsIDIsIDIxNCwgMTgzLCAyNDUsIDE3OCwgNjQsIDIsIDExMywgMjAzLCAyMTgsIDkyLCAyNDksIDE5NCwgMiwgCisgICAgMjAwLCAyMDMsIDkxLCAyNDksIDE5NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAKKyAgICA0LCAyNDksIDE5NCwgMiwgNjcsIDI1MiwgMTQ5LCAyNTMsIDIxNSwgMjQ1LCAxNTEsIDY0LCAyMDMsIDkxLCAyNDksIDE5NCwgCisgICAgMiwgMjI2LCAxMjcsIDQsIDI0OSwgMTk0LCAyLCAyMjYsIDEyNywgMjEwLCAxNjAsIDE4OSwgMjUyLCAxODEsIDIzMSwgNjYsIAorICAgIDI0OCwgMiwgNTAsIDI0NSwgMTgwLCA3NSwgMjQwLCAyNDEsIDEyMCwgMjU0LCAxLCAxMjQsIDI1NCwgMSwgMjI0LCAxNzgsIAorICAgIDIyNSwgMTY4LCAyMTIsIDMyLCAyMzIsIDIxOSwgNDMsIDI1MCwgMTg5LCA0NCwgMjUwLCAxODksIDQzLCAyNDQsIDY1LCA0NCwgCisgICAgMjQ0LCA2NSwgMjUxLCAxODMsIDQ0LCAyNDksIDE0MCwgMjUxLCAxODMsIDQzLCAyNDksIDE0MCwgMjE2LCAxNSwgNDQsIAorICAgIDI0OSwgMTQwLCAyMTYsIDE1LCA0MywgMjQ5LCAxNDAsIDIyMywgNTIsIDIyOCwgNTcsIDUwLCA0MiwgMjMyLCAxMTAsIDI1NCwgCisgICAgMzMsIDIyMSwgMTY2LCAyMjEsIDE3MywgMjE3LCAyLCAyMjMsIDEyMywgMjI0LCAyNDQsIDIzNSwgMjQ1LCAyMTMsIDE2NSwgCisgICAgMjE4LCAyMzYsIDIyNSwgNDQsIDY0LCAyMzUsIDIxNCwgNTAsIDIxNSwgOTQsIDIyOCwgNTcsIDUwLCAyMTIsIDQyLCAyNDAsIAorICAgIDI0MywgMjE2LCAxNSwgNDMsIDI0OSwgMTY4LCAyMTYsIDE1LCA0NCwgMjQ5LCAxNjgsIDI1MSwgMTgzLCA0MywgMjQ5LCAKKyAgICAxNjgsIDI1MSwgMTgzLCA0NCwgMjQ5LCAxNjgsIDIxNiwgMTUsIDE2MywgMjM1LCAyMTgsIDI1MSwgMTgzLCAxNjMsIDIzNSwgCisgICAgMjE4LCAyNDMsIDI0OCwgMjE5LCA3NywgMTIwLCAyNTQsIDIsIDI1MiwgMzIsIDExMywgMjAzLCAyNTIsIDEzNywgMjI2LCAKKyAgICAxNjQsIDIzNCwgMTQ0LCAyNDUsIDk4LCAyMTYsIDQzLCAyMTYsIDE5NywgMjIyLCAyNTQsIDIxMSwgMTc5LCAyMzYsIDcsIAorICAgIDExNiwgMjIzLCAxMjAsIDI1MSwgMTcxLCAyMzQsIDE0MywgMjMzLCA0OCwgMjU0LCAxMTgsIDEyNywgMjIyLCAyNTAsIDI1NCwgCisgICAgMTE4LCAxMjcsIDI0NSwgOTgsIDIxNiwgNDMsIDIxNiwgMTk3LCAyMzMsIDUyLCAyNTIsIDQzLCAyMjIsIDIzNiwgMjQ5LCAKKyAgICA3OCwgMjU0LCAxNjQsIDI1NCwgOSwgMjE3LCAxODIsIDIxNiwgNSwgMjIyLCAxMjUsIDI0NywgMjIzLCAyMjYsIDE1NSwgCisgICAgMjQ5LCAyMDYsIDIxNywgNTMsIDIxOSwgODgsIDI0OSwgMTU5LCAyNDksIDE1OCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyNDAsIDE1OCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTgsIDIzMCwgMjI0LCAzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyMjQsIDMxLCAyNDUsIDEwNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDcsIDE4MiwgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNDgsIDAsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjM1LCA2MiwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNTAsIDQzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIAorICAgIDIxOCwgMTM3LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDIzNSwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjE5LCA5OCwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MiwgMTg5LCAxMzAsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjI0LCAzMSwgMjE5LCA5NywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyNTIsIDE4OCwgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAyMzMsIDIwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDI0MiwgMTM2LCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDE0MCwgMjE0LCAxOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCA5NywgMjE0LCAxOSwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAxNDAsIDc1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIAorICAgIDk3LCA3NSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyNTIsIDE4OCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAxMjQsIDIxNywgODksIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNjMsIDIxOCwgMTM3LCAyNTQsIAorICAgIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDEyNCwgMjUwLCAyNDYsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgCisgICAgMjQ4LCA2MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjQsIDIxNywgODksIDIzNSwgNjIsIDI1NCwgNzQsIDI0MywgMjMyLCAKKyAgICAxNiwgMjE0LCAxNTMsIDIxNCwgMTksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMjE0LCAxNTMsIDc1LCAyNTQsIAorICAgIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjE3LCA4OSwgMjI2LCAxMjcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQ4LCA3NCwgCisgICAgMjE4LCAxMzcsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAzMSwgMTIwLCAyNTAsIDI0NiwgMjU0LCA3NCwgMjQzLCAKKyAgICAyMzIsIDE2LCAyMjQsIDMxLCAyNDgsIDczLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjE3LCA4OSwgMjM1LCA2MiwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDYsIDExMiwgMjE0LCAxOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjQsIDMxLCAKKyAgICAyNDYsIDExMiwgNzUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjI0LCAwLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyNDgsIDYzLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDEsIDIxNCwgMTgzLCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDIzNSwgNjMsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1MCwgNDQsIDIxNCwgCisgICAgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjIwLCA3LCAyMzUsIDYyLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIAorICAgIDIyNCwgMCwgMjI0LCAzMCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTAsIDQ0LCAyMTgsIDE1OCwgMjU0LCA3NCwgMjQzLCAKKyAgICAyMzIsIDE2LCAyMjQsIDMxLCAyNDksIDIzNCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAxMjAsIDIxNywgODksIDI0OCwgOSwgCisgICAgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDgsIDc0LCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjE4LCAxNTksIAorICAgIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMzUsIDYzLCAyNDgsIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjUwLCA0NCwgMjQ4LCA5LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyNCwgMjIwLCA3LCAyMTgsIDEzNywgMjU0LCA3NCwgCisgICAgMjQzLCAyMzIsIDE2LCA0MywgMjIwLCA3LCAyMTgsIDEzNywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMTYsIDkwLCAyNDgsIAorICAgIDksIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjQyLCAxMzcsIDI0OCwgOSwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNDksIAorICAgIDIyOCwgMTMwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI0OCwgNzQsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyMTAsIDM0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIxOCwgMTM4LCAxODQsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgCisgICAgMjIwLCAxNTMsIDIxNCwgMTgzLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIyOCwgNTcsIDI0NSwgMTA3LCAKKyAgICAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNCwgMzEsIDIyNCwgMTUsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMTI0LCAyNTAsIAorICAgIDI0NywgMTg0LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDEyMCwgMjUwLCAyNDcsIDE4NCwgMjU0LCA3NCwgMjQzLCAyMzIsIAorICAgIDE2LCAyMzUsIDE5MiwgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyMjMsIDQwLCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDIyNiwgCisgICAgMjA1LCAyNTQsIDc0LCAyNDMsIDIzMiwgMTYsIDI1NCwgMTUyLCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAKKyAgICAyNDUsIDEwOSwgMjE0LCAxODMsIDI1NCwgNzQsIDI0MywgMjMyLCAxNiwgMjM1LCAxOTMsIDIxNCwgMTgzLCAyNTQsIDc0LCAKKyAgICAyNDMsIDIzMiwgMTYsIDIyNiwgMjA2LCAyMTQsIDE4MywgMjU0LCA3NCwgMjQzLCAyMzIsIDE2LCAyNTQsIDE1MSwgMjI4LCAKKyAgICA1NywgMjUwLCAxMzgsIDc5LCA0NCwgMjU0LCAxMTgsIDIsIDI0NiwgMTEyLCAyMTAsIDM1LCA3NSwgMjE5LCAyMzcsIDIwNCwgCisgICAgMjUxLCAxNzEsIDI1MiwgNTMsIDg3LCA2NywgMjMyLCAyMjAsIDIsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjM1LCAyMjMsIDg3LCAKKyAgICAyNDksIDE5MSwgMjE0LCAxODEsIDg3LCAyNDcsIDE5NywgMjE0LCAxODEsIDg3LCAyNDUsIDE2MiwgODcsIDI0OSwgMjE4LCAKKyAgICA4NywgNzEsIDQyLCAyLCAyNTAsIDE4MywgNjcsIDIzMiwgMjE5LCAyNDUsIDEzOCwgODcsIDI1NCwgMTQ3LCAyMzQsIDE0NSwgCisgICAgODcsIDI0MSwgMjIwLCA4NywgMzcsIDIwMywgMjUyLCAxNDksIDIsIDIyOCwgNTUsIDM3LCAyMTUsIDIyNywgMjQ2LCAxMTQsIAorICAgIDI1MSwgMTQzLCAyNTAsIDQ0LCAyLCAyMjgsIDU5LCA3NSwgMjE0LCAxNzksIDg3LCAyMzAsIDE0MiwgODcsIDI0MCwgMTcxLCAKKyAgICA4NywgMjI2LCAxNzgsIDI0MiwgNjYsIDg3LCAyMjYsIDE3OCwgMjMzLCAxNTMsIDg3LCAyMjUsIDI0OCwgODcsIDIyNSwgCisgICAgMjQ3LCA4NywgMjQ3LCAyMDUsIDI0OSwgMTA1LCAxNiwgMjQ0LCAyOCwgMTA1LCAyMTksIDUyLCA4NywgMjU0LCA3NCwgMjQzLCAKKyAgICAyMzIsIDE2LCAyMjQsIDMwLCAyNDgsIDkxLCAyMjAsIDE0MCwgMjM0LCAxNDUsIDg3LCAyMjQsIDE5NSwgMjI2LCA3OSwgCisgICAgMjI5LCA4NywgMjI2LCA3OSwgMjI0LCAxOTEsIDIyMSwgMTkxLCA4NywgMjUwLCAyNSwgMjIxLCAxOTEsIDg3LCA0MywgMjI2LCAKKyAgICA4LCAyMTQsIDE2MCwgMTAzLCA0MywgMjI2LCA4LCAyNDUsIDI5LCA0MywgMjI2LCA4LCAyMzIsIDExNCwgMTAzLCA0NCwgCisgICAgMjI2LCA4LCAyMTQsIDE2MCwgMTAzLCA0NCwgMjI2LCA4LCAyNDUsIDI5LCA0NCwgMjI2LCA4LCAyMzIsIDExNCwgMTAzLCAKKyAgICA0MywgNDIsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMjQ5LCAxNjgsIDQzLCA0MiwgMjUxLCAxNjYsIDI0NSwgMjksIDQzLCA0MiwgCisgICAgMjUxLCAxNjYsIDIzMiwgMTE0LCAyNDksIDE2OCwgNDQsIDQyLCAyNTEsIDE2NiwgMjE0LCAxNjAsIDI0OSwgMTY4LCA0NCwgCisgICAgNDIsIDI1MSwgMTY2LCAyNDUsIDI5LCA0NCwgNDIsIDI1MSwgMTY2LCAyMzIsIDExNCwgMjQ5LCAxNjgsIDQzLCAyNDksIAorICAgIDEwNywgMjUxLCAxNjYsIDIxNCwgMTYwLCAxMDMsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMCwgMjI5LCAyMjUsIDEwNCwgCisgICAgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjMyLCAxMTQsIDEwMywgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyNDUsIDI5LCA0NCwgCisgICAgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMTQsIDE2MCwgMTAzLCA0NCwgMjQ5LCAxMDcsIDI1MSwgMTY2LCAyMzAsIDIyOSwgMjI1LCAKKyAgICAxMDQsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIzMiwgMTE0LCAxMDMsIDIzNSwgMjE5LCAyNDUsIDI5LCAyMDMsIDIzMiwgCisgICAgMjIwLCAyNDUsIDI5LCAyMTQsIDE2MCwgNDMsIDE3NywgMjMyLCAxMTQsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIyMSwgCisgICAgMTc0LCAyMTQsIDE2MCwgNDQsIDE3NywgMjMyLCAxMTQsIDQzLCAyNDksIDEwNywgMjUxLCAxNjYsIDIyMSwgMTc0LCAyMTgsIAorICAgIDQyLCAyMTYsIDE0LCAyMTgsIDQyLCAyNTEsIDE4MiwgMjE2LCAxNSwgNDIsIDEyNywgMjUxLCAxODMsIDQyLCAxMjcsIDI1MSwgCisgICAgMTgzLCA0MiwgMjUxLCAxNjYsIDExNSwgMjE2LCAxNSwgNDIsIDEyNywgMzQsIDE2LCAyNTEsIDE4MiwgNDMsIDY3LCA5MywgCisgICAgMjMyLCAyMTksIDQ0LCA2NywgOTMsIDIzMiwgMjE5LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxOCwgMjAzLCAyMjEsIDIwNywgCisgICAgMjMyLCAyMTcsIDIwMywgMjIxLCAyMDcsIDIzMiwgMjE2LCAyMDMsIDIyMSwgMjA3LCAyMzIsIDIxNSwgMjQ4LCA1NCwgMTYsIAorICAgIDE5MywgNjcsIDIyLCAyMTYsIDE1LCAyMjIsIDI1NCwgMjQ4LCA1NCwgMTYsIDE5MywgNjcsIDIyLCAyNTEsIDE4MywgMjIyLCAKKyAgICAyNTQsIDI0OCwgNTQsIDE2LCAxOTMsIDY3LCAyLCAyNTAsIDQzLCAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIAorICAgIDI1MCwgNDMsIDI0OCwgNTQsIDE2LCAxOTMsIDEyMCwgMjIsIDIwMywgMiwgMjUwLCA0MywgMjQ4LCA1NCwgMTYsIDE5MywgCisgICAgNjcsIDIsIDIxNSwgMjI2LCAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyMDMsIDIsIDIxNSwgMjI2LCAyNDgsIDU0LCAKKyAgICAxNiwgMTkzLCAxMjAsIDIyLCAyMDMsIDIsIDIxNSwgMjI2LCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMjIsIDIxMiwgMzUsIAorICAgIDI0OCwgNTQsIDE2LCAxOTMsIDEyNCwgMjIsIDIwMywgMiwgMjEyLCAzNSwgMjQ4LCA1NCwgMTYsIDE5MywgMTIwLCAyMiwgCisgICAgMjAzLCAyLCAyMTIsIDM1LCAyNDgsIDU0LCAxNiwgMTkzLCAxMjQsIDIyLCAyNDEsIDUxLCAyNDgsIDU0LCAxNiwgMTkzLCAKKyAgICAxMjAsIDIyLCAyNDEsIDUxLCAyNDgsIDU0LCAxNiwgMTkzLCA2NywgMjIsIDIxNiwgMTUsIDIzMywgNTIsIDI0OCwgNTQsIAorICAgIDE2LCAxOTMsIDY3LCAyMiwgMjUxLCAxODMsIDIzMywgNTIsIDQyLCAyNDQsIDQwLCAyMjMsIDU3LCA4NywgMjQ1LCAxOTAsIAorICAgIDg3LCA2NywgMjMyLCAyMjAsIDI0NSwgMjksIDIzMSwgMzgsIDI1MSwgMTU0LCAyMzEsIDM4LCAyMDAsIDExNSwgMjE5LCAKKyAgICAyNTIsIDIzMSwgMzgsIDIxOSwgMjUzLCAxMTUsIDIzMiwgMTQzLCAyMzEsIDM4LCAyMDAsIDExNSwgMTEzLCAyMTksIDIzOSwgCisgICAgMjMxLCAzOCwgMTEzLCAyMTksIDI0MCwgMTE1LCAyMzIsIDE0MywgMjMxLCAzOCwgMTEzLCAyMTksIDI0MCwgMjM1LCA3MCwgCisgICAgMjMxLCAzOCwgMjE1LCAyMDksIDIzMSwgMzgsIDIxNiwgMjI0LCAyMzEsIDM4LCAyMjUsIDE5MSwgMjQ1LCAyMzIsIDI0MiwgCisgICAgMTI5LCAyNDMsIDIyNiwgMjE2LCAxNSwgMjI2LCA3LCAyNTEsIDE4MywgMjI2LCA3LCAyMTYsIDE1LCAyNDksIDEwNywgMTI3LCAKKyAgICAyNTEsIDE4MywgMjQ5LCAxMDcsIDEyNywgMjE2LCAxNSwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDI1MSwgMTgzLCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDEyNywgNzEsIDIxNSwgMjQwLCAyNTIsIDQzLCAyMjIsIDIzNywgMiwgMjUwLCA0MywgMjE4LCAxMjIsIDI0NCwgCisgICAgNzIsIDI1NSwgMjYsIDI0OSwgMTA0LCAyNDUsIDE3OSwgMjM1LCAyMDUsIDI0OCwgOTEsIDI0NSwgMzIsIDg3LCA4NSwgMjIyLCAKKyAgICAyNTAsIDUyLCAyMTUsIDIyNiwgODUsIDIzMywgNDgsIDUyLCAyMTUsIDIyNiwgODUsIDIxNCwgMTYyLCA1MiwgMjE1LCAyMjYsIAorICAgIDg1LCAyNDYsIDExMywgNTIsIDIxNSwgMjI2LCA4NSwgMjIyLCAyNTAsIDUyLCAyMTUsIDIyNywgMiwgNjcsIDEzMCwgODUsIAorICAgIDIzMywgNDgsIDUyLCAyMTUsIDIyNywgMiwgNjcsIDEzMCwgODUsIDIyMiwgMjUwLCAyMTUsIDIyNywgMiwgNTIsIDY3LCAKKyAgICAxMzAsIDI1NCwgMTgyLCAyNTAsIDExLCAyMTgsIDEyOCwgMjE2LCA4NywgMjUwLCAxMSwgMjQwLCAyNDQsIDIsIDI0NCwgNTgsIAorICAgIDIyMSwgMjQzLCAxNiwgMzEsIDIyNywgMjA2LCAxNiwgMzEsIDIxOCwgMTU0LCA2NCwgMjQxLCAyNDAsIDE2LCAzMSwgMjE4LCAKKyAgICAxNTQsIDY0LCAyMTYsIDIxMywgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIxNiwgMjEzLCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgCisgICAgMjE1LCAyNDQsIDE2LCAzMSwgMjQ1LCAxNDAsIDE2LCAzMSwgMjU1LCAxNiwgMTYsIDMxLCAyNTIsIDUyLCAxNiwgMzEsIAorICAgIDI1MiwgMTg3LCAxNiwgMzEsIDIwMywgMjE3LCA5MCwgMTYsIDMxLCAyMzIsIDIyMCwgMjQ0LCAxNTMsIDE2LCAzMSwgNjcsIAorICAgIDIxNywgOTAsIDE2LCAzMSwgMjQ0LCAyOCwgMjQ0LCAxNTMsIDE2LCAzMSwgMjUwLCAyMzgsIDIyMywgNTYsIDE2LCAzMSwgCisgICAgMjIwLCAzMCwgMjI2LCAxMzQsIDE2LCAzMSwgMjIwLCAzMCwgMjM2LCA2LCAxNiwgMzEsIDI0OCwgMTU5LCAyMzIsIDIxMCwgCisgICAgMjQ1LCA4NSwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTExLCAxNiwgMzEsIDI0OCwgMzksIDI0OSwgMTg2LCAxMDUsIAorICAgIDE2LCAzMSwgMjQ4LCAzOSwgMjQ5LCAxODYsIDE1OCwgMTYsIDMxLCAyNDgsIDM5LCAyNDksIDE4NiwgMTYxLCAxNiwgMzEsIAorICAgIDE1MiwgMjU1LCAxNiwgMTYsIDMxLCAyMTcsIDE3OCwgMjM2LCA2OSwgMTYsIDMxLCAyNDUsIDE1MSwgNjQsIDIxNSwgMjQ1LCAKKyAgICAyNTEsIDIyMSwgMTYsIDMxLCAyNTEsIDEzLCAxNiwgMzEsIDI0NSwgMTUxLCA2NCwgMjMxLCA4NiwgMTYsIDMxLCAyMTgsIAorICAgIDYyLCAxNiwgMzEsIDI0NSwgODUsIDE2LCAzMSwgMjQ0LCAxMTUsIDIyMCwgMTM5LCAxNiwgMzEsIDI0MiwgMTI4LCAyMjAsIAorICAgIDEzOSwgMTYsIDMxLCAyMjMsIDEyNCwgMjIwLCAxMzksIDE2LCAzMSwgMjE0LCAxNzQsIDIyMCwgMTM5LCAxNiwgMzEsIDIxOSwgCisgICAgMjAsIDE2LCAzMSwgMjQ4LCA3MSwgMjUxLCAyMjQsIDg3LCAyMDQsIDI1MSwgMTcxLCAxNiwgMzEsIDIyOSwgOTAsIDE2LCAKKyAgICAzMSwgMjQ4LCA3MiwgMjQ0LCAyOCwgMTA1LCAxNiwgMzEsIDIxOCwgNjMsIDI0NCwgMjgsIDEwNSwgMjI2LCAyNDUsIDEwMywgCisgICAgMjI2LCAyNDUsIDI1MCwgMTYwLCAyMjYsIDI0NSwgMjQ0LCAzMSwgMjI2LCAyNDUsIDIzNSwgMjAwLCAyNDQsIDMxLCAyMjYsIAorICAgIDI0NSwgMjUyLCA1MCwgMjUxLCAxMzIsIDIyNiwgMjQ1LCAyNTEsIDE3OCwgMjE2LCAxMTIsIDIyNiwgMjQ1LCAyNTEsIDE2MywgCisgICAgMjUyLCAxNTQsIDI0MCwgMTEwLCAyMjYsIDI0NSwgMjU0LCAxMzUsIDY0LCAyNTAsIDEzNywgMjI2LCAyNDUsIDI0OCwgMTY0LCAKKyAgICAyMjYsIDI0NSwgMjQ5LCA5NSwgMjU1LCAyMCwgMjI3LCAyMDQsIDIyNiwgMjQ1LCA1MiwgMjUyLCAxODgsIDM3LCAyMSwgCisgICAgMTExLCAzNywgMjEsIDEwNSwgMzcsIDIxLCAxNTgsIDM3LCAyMSwgMTYxLCAzNywgMjEsIDE5MCwgMzcsIDIxLCAxOTUsIDM3LCAKKyAgICAyMSwgMTk5LCAzNywgMjEsIDE5NiwgMzcsIDIxLCAyMDEsIDM3LCA1NCwgMjE2LCAyNDgsIDM3LCA1NCwgMjQ1LCAxNzUsIAorICAgIDM3LCA1NCwgMjE1LCA3NiwgMzcsIDU0LCAyMTYsIDE2NSwgMzcsIDU0LCAyNDQsIDEzLCAzNywgNTQsIDI0NCwgMTI2LCAzNywgCisgICAgNTQsIDIxOSwgMTIxLCAzNywgNTQsIDIyMCwgMTIxLCAzNywgNTQsIDI0NSwgMTk4LCAzNywgNTQsIDIyOCwgMjAyLCAzNywgCisgICAgNTQsIDIxNSwgNzMsIDg4LCAyMSwgMTExLCA4OCwgMjEsIDEwNSwgODgsIDIxLCAxNTgsIDg4LCAyMSwgMTYxLCA4OCwgMjEsIAorICAgIDE5MCwgODgsIDIxLCAxOTUsIDg4LCAyMSwgMTk5LCA4OCwgMjEsIDE5NiwgODgsIDIxLCAyMDEsIDg4LCA1NCwgMjE2LCAKKyAgICAyNDgsIDg4LCA1NCwgMjQ1LCAxNzUsIDg4LCA1NCwgMjE1LCA3NiwgODgsIDU0LCAyMTYsIDE2NSwgODgsIDU0LCAyNDQsIAorICAgIDEzLCA4OCwgNTQsIDI0NCwgMTI2LCA4OCwgNTQsIDIxOSwgMTIxLCA4OCwgNTQsIDIyMCwgMTIxLCA4OCwgNTQsIDI0NSwgCisgICAgMTk4LCA4OCwgNTQsIDIyOCwgMjAyLCA4OCwgNTQsIDIxNSwgNzMsIDIxLCAxMjMsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIAorICAgIDExMywgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMTM0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDQsIDE5LCAyNDMsIAorICAgIDIzNiwgMjE4LCAxMzEsIDIxLCAyNDQsIDg5LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDIxLCAyMTksIDEyNywgMjQzLCAyMzYsIAorICAgIDIxOCwgMTMxLCAyMSwgMjIwLCAxMjQsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjEsIDI0NSwgMjAxLCAyNDMsIDIzNiwgMjE4LCAKKyAgICAxMzEsIDIxLCAyMjgsIDIwNSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjE2LCAyNDksIDI0MywgMjM2LCAyMTgsIDEzMSwgCisgICAgNTQsIDI0NSwgMTc2LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTUsIDc3LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAKKyAgICAyMTYsIDE2NiwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjQ0LCAxNCwgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjQ0LCAKKyAgICAxMjcsIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIxOSwgMTIyLCAyNDMsIDIzNiwgMjE4LCAxMzEsIDU0LCAyMjAsIDEyMiwgCisgICAgMjQzLCAyMzYsIDIxOCwgMTMxLCA1NCwgMjQ1LCAxOTksIDI0MywgMjM2LCAyMTgsIDEzMSwgNTQsIDIyOCwgMjAzLCAyNDMsIAorICAgIDIzNiwgMjE4LCAxMzEsIDU0LCAyMTUsIDc0LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDg4LCA3LCA0LCAxLCA2MSwgODgsIDcsIAorICAgIDQsIDEsIDI1MywgMTY2LCA4OCwgNywgNCwgMSwgMjUxLCA3NCwgODgsIDcsIDQsIDEsIDI0OSwgNjgsIDg4LCA3LCA0LCAxLCAKKyAgICA3NiwgODgsIDcsIDQsIDEsIDI0NSwgMTQsIDg4LCA3LCA0LCAxLCAyNDMsIDIwOSwgODgsIDcsIDQsIDEsIDI0MiwgNjcsIAorICAgIDg4LCA3LCA0LCAxLCA3NCwgODgsIDcsIDQsIDEsIDIzNSwgMTUwLCA4OCwgNywgNCwgMSwgMjM1LCAyOSwgODgsIDcsIDQsIAorICAgIDEsIDE1NiwgODgsIDcsIDQsIDEsIDE5NCwgODgsIDcsIDQsIDEsIDIzMCwgMzAsIDg4LCA3LCA0LCAxLCA3OCwgODgsIDcsIAorICAgIDQsIDEsIDIyNiwgMTA5LCA4OCwgNywgNCwgMSwgMjI0LCA5OSwgODgsIDcsIDQsIDEsIDE1MywgODgsIDcsIDQsIDEsIDIyMiwgCisgICAgOTMsIDg4LCA3LCA0LCAxLCAyMTcsIDE1MywgODgsIDcsIDQsIDEsIDY5LCA4OCwgNywgNCwgMSwgMjE0LCAxMDUsIDg4LCA3LCAKKyAgICA0LCAxLCAyMTIsIDk4LCA4OCwgNywgNCwgMSwgMjExLCAxNzgsIDg4LCA3LCA0LCAxLCAyMTEsIDExNywgODgsIDcsIDQsIDEsIAorICAgIDIxMCwgMTU5LCAzNywgNywgNiwgMSwgNjEsIDM3LCA3LCA2LCAxLCAyNTMsIDE2NiwgMzcsIDcsIDYsIDEsIDI1MSwgNzQsIAorICAgIDM3LCA3LCA2LCAxLCAyNDksIDY4LCAzNywgNywgNiwgMSwgNzYsIDM3LCA3LCA2LCAxLCAyNDUsIDE0LCAzNywgNywgNiwgMSwgCisgICAgMjQzLCAyMDksIDM3LCA3LCA2LCAxLCAyNDIsIDY3LCAzNywgNywgNiwgMSwgNzQsIDM3LCA3LCA2LCAxLCAyMzUsIDE1MCwgCisgICAgMzcsIDcsIDYsIDEsIDIzNSwgMjksIDM3LCA3LCA2LCAxLCAxNTYsIDM3LCA3LCA2LCAxLCAxOTQsIDM3LCA3LCA2LCAxLCAKKyAgICAyMzAsIDMwLCAzNywgNywgNiwgMSwgNzgsIDM3LCA3LCA2LCAxLCAyMjYsIDEwOSwgMzcsIDcsIDYsIDEsIDIyNCwgOTksIAorICAgIDM3LCA3LCA2LCAxLCAxNTMsIDM3LCA3LCA2LCAxLCAyMjIsIDkzLCAzNywgNywgNiwgMSwgMjE3LCAxNTMsIDM3LCA3LCA2LCAKKyAgICAxLCA2OSwgMzcsIDcsIDYsIDEsIDIxNCwgMTA1LCAzNywgNywgNiwgMSwgMjEyLCA5OCwgMzcsIDcsIDYsIDEsIDIxMSwgCisgICAgMTc4LCAzNywgNywgNiwgMSwgMjExLCAxMTcsIDM3LCA3LCA2LCAxLCAyMTAsIDE1OSwgMzcsIDcsIDQsIDEsIDYxLCAzNywgCisgICAgNywgNCwgMSwgMjUzLCAxNjYsIDM3LCA3LCA0LCAxLCAyNTEsIDc0LCAzNywgNywgNCwgMSwgMjQ5LCA2OCwgMzcsIDcsIDQsIAorICAgIDEsIDc2LCAzNywgNywgNCwgMSwgMjQ1LCAxNCwgMzcsIDcsIDQsIDEsIDI0MywgMjA5LCAzNywgNywgNCwgMSwgMjQyLCA2NywgCisgICAgMzcsIDcsIDQsIDEsIDc0LCAzNywgNywgNCwgMSwgMjM1LCAxNTAsIDM3LCA3LCA0LCAxLCAyMzUsIDI5LCAzNywgNywgNCwgCisgICAgMSwgMTU2LCAzNywgNywgNCwgMSwgMTk0LCAzNywgNywgNCwgMSwgMjMwLCAzMCwgMzcsIDcsIDQsIDEsIDc4LCAzNywgNywgCisgICAgNCwgMSwgMjI2LCAxMDksIDM3LCA3LCA0LCAxLCAyMjQsIDk5LCAzNywgNywgNCwgMSwgMTUzLCAzNywgNywgNCwgMSwgMjIyLCAKKyAgICA5MywgMzcsIDcsIDQsIDEsIDIxNywgMTUzLCAzNywgNywgNCwgMSwgNjksIDM3LCA3LCA0LCAxLCAyMTQsIDEwNSwgMzcsIDcsIAorICAgIDQsIDEsIDIxMiwgOTgsIDM3LCA3LCA0LCAxLCAyMTEsIDE3OCwgMzcsIDcsIDQsIDEsIDIxMSwgMTE3LCAzNywgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDM3LCAyMSwgMjEwLCA4NiwgMTUyLCAzNywgNTQsIDI0NSwgMTc1LCAxNTIsIDM3LCA1NCwgMjE1LCA3NiwgCisgICAgMTUyLCAzNywgNTQsIDIxNiwgMTY1LCAxNTIsIDM3LCA1NCwgMjQ0LCAxMywgMTUyLCAzNywgNTQsIDI0NCwgMTI2LCAxNTIsIAorICAgIDM3LCA1NCwgMjE5LCAxMjEsIDE1MiwgMzcsIDU0LCAyMjAsIDEyMSwgMTUyLCAzNywgNTQsIDI0NSwgMTk4LCAxNTIsIDM3LCAKKyAgICA1NCwgMjI4LCAyMDIsIDE1MiwgMzcsIDU0LCAyMTUsIDczLCA1MiwgMzcsIDIxLCAxMTEsIDUyLCAzNywgMjEsIDEwNSwgNTIsIAorICAgIDM3LCAyMSwgMTU4LCA1MiwgMzcsIDIxLCAxNjEsIDUyLCAzNywgMjEsIDE5MCwgNTIsIDM3LCAyMSwgMTk1LCA1MiwgMzcsIAorICAgIDIxLCAxOTksIDUyLCAzNywgMjEsIDE5NiwgNTIsIDM3LCAyMSwgMjAxLCA1MiwgMzcsIDU0LCAyMTYsIDI0OCwgMTUyLCAzNywgCisgICAgMjEsIDIxMCwgODYsIDkzLCA5OSwgMTkzLCAyNDEsIDUxLCA5MywgOTksIDExNCwgMjQxLCA1MSwgOTMsIDk5LCAxOTMsIAorICAgIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDI0MSwgCisgICAgNTEsIDkzLCA5OSwgMTE0LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAyMTUsIDIxMiwgMjQ4LCAKKyAgICAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgMjE1LCAyMTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAxOTMsIAorICAgIDIyNCwgMjcsIDI0OCwgMTY1LCAyNDEsIDUxLCA5MywgOTksIDExNCwgMjI0LCAyNywgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCAKKyAgICA5OSwgMTkzLCAyMjQsIDI3LCAyNDgsIDE2NSwgMjEzLCAyMzksIDkzLCA5OSwgMTE0LCAyMjQsIDI3LCAyNDgsIDE2NSwgCisgICAgMjEzLCAyMzksIDkzLCA5OSwgMTkzLCAxMjQsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQ0LCAyNDEsIAorICAgIDIyOCwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDQ0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIyMiwgMjU0LCAKKyAgICA5MywgOTksIDE5MywgMTI0LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIAorICAgIDk5LCAxMjQsIDExNCwgMjIsIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgCisgICAgMTkzLCAxMjAsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDQ0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIAorICAgIDExNCwgMjIsIDQ0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMTIwLCAKKyAgICAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxMjAsIDE5MywgMjIsIDQzLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDExNCwgMjIsIAorICAgIDQzLCAyMzIsIDIzNiwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCA2NywgMjIsIDIyMiwgCisgICAgMjU0LCA5MywgOTksIDY3LCAxOTMsIDIyLCA0NCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCA0NCwgMTI0LCAKKyAgICAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDExNCwgMjIsIDQ0LCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDY3LCAxMTQsIDIyLCAKKyAgICA0NCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCA0NCwgMTIwLCAyNDEsIDIyOCwgOTMsIDk5LCAxMjAsIDE5MywgCisgICAgMjIsIDQ0LCAxMjQsIDI0MSwgMjI4LCA5MywgOTksIDExNCwgNjcsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDY3LCAKKyAgICAyMiwgMjMzLCA1MiwgOTMsIDk5LCA2NywgMTkzLCAyMiwgNDMsIDI0MSwgMjI4LCA5MywgOTksIDEyMCwgMTE0LCAyMiwgNDMsIAorICAgIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCA0MywgMTIwLCAyMzIsIDIzNiwgOTMsIDk5LCA2NywgMTE0LCAKKyAgICAyMiwgNDMsIDIzMiwgMjM2LCA5MywgOTksIDEyNCwgMTkzLCAyMiwgNDMsIDEyMCwgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKKyAgICAxOTMsIDIyLCA0MywgMTI0LCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDY3LCAyMiwgMjMzLCA1MiwgOTMsIDk5LCAxOTMsIAorICAgIDEyNCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCAxMjQsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAKKyAgICAxMTQsIDIyLCA0MywgMTI0LCAyMzIsIDIzNiwgOTMsIDk5LCAxMjQsIDE5MywgMjIsIDIwMywgMjQxLCAyMjgsIDkzLCA5OSwgCisgICAgMTI0LCAxMTQsIDIyLCAyMDMsIDIzMiwgMjM2LCA5MywgOTksIDQ0LCAxOTMsIDIyLCA0MywgMTI0LCAyNDEsIDIyOCwgOTMsIAorICAgIDk5LCA0MywgMTkzLCAyMiwgNDQsIDEyNCwgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCAxMjQsIDIyLCAyNDEsIDUxLCA5MywgCisgICAgOTksIDE5MywgMTIwLCAyMiwgMjQxLCA1MSwgOTMsIDk5LCA0MywgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzYsIDkzLCAKKyAgICA5OSwgNDQsIDExNCwgMjIsIDQzLCAxMjAsIDIzMiwgMjM2LCA5MywgOTksIDEyMCwgMTkzLCAyMiwgMjAzLCAyNDEsIDIyOCwgCisgICAgOTMsIDk5LCAxMjAsIDExNCwgMjIsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDE5MywgMjIsIDQzLCAxMjAsIDI0MSwgCisgICAgMjI4LCA5MywgOTksIDQzLCAxOTMsIDIyLCA0NCwgMTIwLCAyNDEsIDIyOCwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDI0MSwgCisgICAgNTEsIDkzLCA5OSwgMTkzLCA2NywgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNDMsIDExNCwgMjIsIDQ0LCA2NywgMjMyLCAyMzYsIAorICAgIDkzLCA5OSwgNDQsIDExNCwgMjIsIDQzLCA2NywgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDE5MywgMjIsIDIwMywgMjQxLCAKKyAgICAyMjgsIDkzLCA5OSwgMTIwLCAxMTQsIDIyLCAxMjQsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxMTQsIDIyLCAxMjAsIAorICAgIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNjcsIDExNCwgMjIsIDIwMywgMjMyLCAyMzYsIDkzLCA5OSwgNDMsIDEyMCwgMTE0LCAKKyAgICAyMiwgNDQsIDEyNCwgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDEyMCwgMTE0LCAyMiwgNDMsIDEyNCwgMjMyLCAyMzYsIDkzLCAKKyAgICA5OSwgNDMsIDEyNCwgMTE0LCAyMiwgNDQsIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgNDQsIDEyNCwgMTE0LCAyMiwgNDMsIAorICAgIDEyMCwgMjMyLCAyMzYsIDkzLCA5OSwgMTI0LCAxOTMsIDIyLCAxMjAsIDIwMywgMjQxLCAyMjgsIDkzLCA5OSwgMTIwLCAKKyAgICAxOTMsIDIyLCAxMjQsIDIwMywgMjQxLCAyMjgsIDkzLCA5OSwgNDQsIDE5MywgMjIsIDQzLCA2NywgMjQxLCAyMjgsIDkzLCAKKyAgICA5OSwgNDMsIDE5MywgMjIsIDQ0LCA2NywgMjQxLCAyMjgsIDkzLCA5OSwgMTE0LCA2NywgMjIsIDI0MSwgNTEsIDkzLCA5OSwgCisgICAgMTkzLCA1MiwgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgMTE0LCA1MiwgMjQ4LCAxNjUsIDI0MSwgNTEsIDkzLCA5OSwgCisgICAgMTkzLCA1MiwgMjQ4LCAxNjUsIDIxMywgMjM5LCA5MywgOTksIDExNCwgNTIsIDI0OCwgMTY1LCAyMTMsIDIzOSwgOTMsIDk5LCAKKyAgICA1MiwgMjQxLCA1MSwgOTMsIDk5LCA1MiwgMjEzLCAyMzksIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAorICAgIDEyMSwgOTMsIDk5LCAxMjQsIDUyLCAyMiwgNDQsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjQsIDIyLCAyMjIsIDI1NCwgCisgICAgOTMsIDk5LCAxMjQsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDEyNCwgNTIsIDIyLCA0MywgMjE5LCAKKyAgICAxNTYsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTIwLCAyMTksIDE1NywgMjIsIDQ0LCAyNDYsIAorICAgIDEyMSwgOTMsIDk5LCAxMjAsIDUyLCAyMiwgNDQsIDIxOSwgMTU2LCA5MywgOTksIDUyLCAxMjAsIDIyLCAyMjIsIDI1NCwgCisgICAgOTMsIDk5LCAxMjAsIDIxOSwgMTU3LCAyMiwgNDMsIDI0NiwgMTIxLCA5MywgOTksIDEyMCwgNTIsIDIyLCA0MywgMjE5LCAKKyAgICAxNTYsIDkzLCA5OSwgNTIsIDEyMCwgMjIsIDIzMywgNTIsIDkzLCA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgNDQsIDI0NiwgCisgICAgMTIxLCA5MywgOTksIDY3LCA1MiwgMjIsIDQ0LCAyMTksIDE1NiwgOTMsIDk5LCA1MiwgNjcsIDIyLCAyMjIsIDI1NCwgOTMsIAorICAgIDk5LCA2NywgMjE5LCAxNTcsIDIyLCA0MywgMjQ2LCAxMjEsIDkzLCA5OSwgNjcsIDUyLCAyMiwgNDMsIDIxOSwgMTU2LCA5MywgCisgICAgOTksIDUyLCA2NywgMjIsIDIzMywgNTIsIDkzLCA5OSwgMTI0LCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCAKKyAgICA5OSwgMTI0LCA1MiwgMjIsIDIwMywgMjE5LCAxNTYsIDkzLCA5OSwgNTIsIDEyNCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgCisgICAgMTIwLCAyMTksIDE1NywgMjIsIDIwMywgMjQ2LCAxMjEsIDkzLCA5OSwgMTIwLCA1MiwgMjIsIDIwMywgMjE5LCAxNTYsIDkzLCAKKyAgICA5OSwgNTIsIDEyMCwgMjIsIDI0MSwgNTEsIDkzLCA5OSwgNjcsIDIxOSwgMTU3LCAyMiwgMjAzLCAyNDYsIDEyMSwgOTMsIAorICAgIDk5LCA2NywgNTIsIDIyLCAyMDMsIDIxOSwgMTU2LCA5MywgOTksIDUyLCA2NywgMjIsIDI0MSwgNTEsIDkzLCA5OSwgMTkzLCAKKyAgICAyNTQsIDM0LCAxMjQsIDIyLCAyMjIsIDI1NCwgOTMsIDk5LCAxOTMsIDI1NCwgMzQsIDEyNCwgMjIsIDIzMywgNTIsIDkzLCAKKyAgICA5OSwgMTkzLCAyNTQsIDM0LCAxMjAsIDIyLCAyMzMsIDUyLCA5MywgOTksIDE5MywgMjU0LCAzNCwgMTIwLCAyMiwgMjIyLCAKKyAgICAyNTQsIDkzLCA5OSwgMTkzLCAyNDgsIDcsIDIxNCwgMTYwLCA0NCwgMjE2LCA0MywgMjMyLCAxMTQsIDIzMywgNTIsIDkzLCAKKyAgICA5OSwgMTkzLCAyNDgsIDcsIDIxNCwgMTYwLCA0MywgMjE2LCA0MywgMjMyLCAxMTQsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgCisgICAgMjQ4LCA3LCAyNDksIDEzOCwgOTMsIDk5LCAxOTMsIDIzMywgNTIsIDkzLCA5OSwgMTkzLCAyMTQsIDE2MywgOTMsIDk5LCAKKyAgICAxOTMsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMjQ2LCAxMTQsIDkzLCA5OSwgMTE0LCAyMzMsIDUyLCA5MywgOTksIDExNCwgCisgICAgMjE0LCAxNjMsIDkzLCA5OSwgMTE0LCAyMjIsIDI1NCwgOTMsIDk5LCAxMTQsIDI0NiwgMTE0LCA5MywgOTksIDE5MywgNDMsIAorICAgIDIyLCAxMTQsIDIyMiwgMjU0LCA5MywgOTksIDE5MywgMTIwLCAyMiwgMTE0LCAyNDYsIDExNCwgOTMsIDk5LCAxMTQsIDQzLCAKKyAgICAyMiwgMTkzLCAyMjIsIDI1NCwgOTMsIDk5LCAxMTQsIDEyMCwgMjIsIDE5MywgMjQ2LCAxMTQsIDIxNCwgMTYwLCAxNjMsIAorICAgIDI1MSwgMjIxLCAyMzIsIDExNCwgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIDIzMiwgMTE0LCAxMjMsIDIyNCwgMjUsIDI1MSwgCisgICAgMjIxLCAyMzIsIDExNCwgMTM0LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDIzMiwgMTE0LCAxNjMsIDI1MSwgMjIxLCAyMzIsIAorICAgIDExNCwgMjQ0LCA4OSwgMjQ1LCAxOTUsIDI1MSwgMjIxLCAyMzIsIDExNCwgMTM0LCAyMjQsIDIzLCAyNTEsIDIyMSwgMjMyLCAKKyAgICAxMTQsIDIyMCwgMTI0LCAyNDUsIDE5NSwgMjUxLCAyMjEsIDI0MywgMjM2LCAyNTEsIDIyMSwgNDMsIDIyMCwgMTI0LCAyNDUsIAorICAgIDE5NSwgMjUxLCAyMjEsIDQzLCAxMzQsIDIyNCwgMjMsIDI1MSwgMjIxLCA0MywgMjQ0LCA4OSwgMjQ1LCAxOTUsIDI1MSwgCisgICAgMjIxLCA0MywgMTYzLCAyNTEsIDIyMSwgNDMsIDEzNCwgMjQ1LCAxOTUsIDI1MSwgMjIxLCA0MywgMTIzLCAyMjQsIDI1LCAKKyAgICAyNTEsIDIyMSwgNDMsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCA0NCwgMTYzLCAyNTEsIDIyMSwgMTkzLCAyMjAsIDk0LCAKKyAgICAyMzEsIDg3LCAyMjAsIDk0LCAyNDgsIDE3MCwgMjIwLCA5NCwgMjE0LCAxNjAsIDEyMywgMjQ1LCAxOTcsIDI1MSwgMjIxLCAKKyAgICA0NCwgMTIzLCAyNDUsIDE5NywgMjUxLCAyMjEsIDIyNCwgMjksIDIzMiwgMTE0LCAyMzMsIDUyLCAyMjQsIDI5LCAyMzIsIAorICAgIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCAyMzMsIDUyLCAyMjQsIDI5LCAyMTQsIDE2MCwgNDMsIDIyLCAKKyAgICAyMzIsIDExNCwgNDMsIDIyLCAyMzIsIDExNCwgMjIyLCAyNTQsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIzMiwgCisgICAgMTE0LCAyMjIsIDI1NCwgMjI0LCAyOSwgMjE0LCAxNjAsIDQzLCAyMiwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIAorICAgIDIzMywgNTIsIDIyNCwgMjksIDIxNCwgMTYwLCA0MywgMjIsIDIxNCwgMTYwLCA0NCwgMjIsIDIzMiwgMTE0LCAyMjIsIDI1NCwgCisgICAgMjI0LCAyOSwgMjE0LCAxNjAsIDIyMiwgMjU0LCAyMjQsIDI5LCAyMTQsIDE2MCwgNDQsIDIyLCAyMzIsIDExNCwgMjMzLCAKKyAgICA1MiwgMjI0LCAyOSwgMjE0LCAxNjAsIDQ0LCAyMiwgMjMyLCAxMTQsIDQzLCAyMiwgMjMyLCAxMTQsIDIyMiwgMjU0LCA4NSwgCisgICAgMjE4LCAyMzYsIDcxLCAyMTgsIDIzNiwgNzEsIDQyLCAyLCAyMjIsIDE4NSwgMjQ5LCAxNjcsIDcxLCA0MiwgMjQ5LCAxOTUsIAorICAgIDg1LCA0LCAyMTgsIDIzNiwgNDIsIDIsIDIwMywgMjQ0LCAxMTMsIDQyLCAyLCA2NywgMjQ0LCAxMTMsIDQyLCAyLCAyMjYsIAorICAgIDE0OCwgMjQ5LCAxMzQsIDI0NCwgMTEzLCA0MiwgMiwgMjE0LCAxNjAsIDQzLCAyMTYsIDQzLCAyMzIsIDExNCwgNDQsIDI0NCwgCisgICAgMTEzLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAyMTYsIDQzLCAyMzIsIDExNCwgNDMsIDI0NCwgMTEzLCA0MiwgMiwgMjQ4LCA3LCAKKyAgICAyNDksIDEzNCwgMjQ0LCAxMTMsIDg1LCA0LCAyMTgsIDIzNiwgNzEsIDQsIDIxOCwgMjM2LCA4NSwgMjIzLCAxMTksIDcxLCAKKyAgICAyMjMsIDExOSwgODUsIDY3LCAyMjMsIDExOSwgNzEsIDY3LCAyMjMsIDExOSwgODUsIDIyNiwgMTAsIDcxLCAyMjYsIDEwLCAKKyAgICA4NSwgMjE0LCAxNjIsIDIxNSwgMjI2LCA3MSwgMjE0LCAxNjIsIDIxNSwgMjI2LCA4NSwgMjE0LCAxNjIsIDQsIDIxNSwgCisgICAgMjI2LCA3MSwgMjE0LCAxNjIsIDQsIDIxNSwgMjI2LCA4NSwgMjIyLCAyNTAsIDIxNSwgMjI2LCA3MSwgMjIyLCAyNTAsIAorICAgIDIxNSwgMjI2LCA4NSwgMjIyLCAyNTAsIDQsIDIxNSwgMjI2LCA3MSwgMjIyLCAyNTAsIDQsIDIxNSwgMjI2LCA4NSwgMjIyLCAKKyAgICAyNTAsIDIyNSwgMTEsIDcxLCAyMjIsIDI1MCwgMjI1LCAxMSwgODUsIDI0NiwgMTEzLCAyMTUsIDIyNiwgNzEsIDI0NiwgCisgICAgMTEzLCAyMTUsIDIyNiwgODUsIDI0NiwgMTEzLCA0LCAyMTUsIDIyNiwgNzEsIDI0NiwgMTEzLCA0LCAyMTUsIDIyNiwgODUsIAorICAgIDIzMywgNDgsIDIxNSwgMjI2LCA3MSwgMjMzLCA0OCwgMjE1LCAyMjYsIDg1LCAyMzMsIDQ4LCA0LCAyMTUsIDIyNiwgNzEsIAorICAgIDIzMywgNDgsIDQsIDIxNSwgMjI2LCA4NSwgMjMzLCA0OCwgMjI1LCAxMSwgNzEsIDIzMywgNDgsIDIyNSwgMTEsIDg1LCAKKyAgICAyNDgsIDAsIDcxLCAyNDgsIDAsIDcxLCAyNDgsIDEsIDI0OSwgMTk1LCA4NSwgNCwgMjQ4LCAwLCAyNDQsIDk3LCAyMzIsIAorICAgIDExMCwgNzEsIDI1MCwgNDMsIDI0NiwgMTI2LCAyNTAsIDQzLCAyNTAsIDQ0LCAyLCA2NywgMjQ0LCAxMTMsIDI1MSwgMTE5LCAKKyAgICA4NSwgMjUwLCA0MywgMjUwLCA0NCwgMiwgNDMsIDE2MywgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDQ0LCAxNjMsIDI1MSwgCisgICAgMjI5LCAyNTAsIDQ0LCAyLCAyMzIsIDExNCwgMTYzLCAyNTEsIDIyOSwgMjUwLCA0NCwgMiwgMjE0LCAxNjAsIDE2MywgMjUxLCAKKyAgICAyMjksIDI1MCwgNDQsIDIsIDIxNCwgMTYwLCA0NCwgMjI0LCAyOSwgMjUxLCAyMjksIDI1MCwgNDQsIDIsIDI1NCwgMTY0LCAKKyAgICAyNTEsIDk2LCAyMTQsIDE2MCwgNDMsIDIyNCwgMjksIDI1MSwgMjI5LCA0MywgMTYzLCA4NSwgMjUwLCA0MywgNDQsIDE2MywgCisgICAgODUsIDI1MCwgNDMsIDIzNSwgMjAxLCAyNTEsIDEyMSwgMjM1LCAyMDEsIDcxLCAyNTAsIDQzLCAyMTQsIDE2MCwgMTYzLCAKKyAgICAyMzUsIDIwMSwgNzEsIDI1MCwgNDMsIDIzMiwgMTE0LCAxNjMsIDIzNSwgMjAxLCA3MSwgMjUwLCA0MywgMjE0LCAxNjAsIAorICAgIDQzLCAyMjQsIDI5LCAyNTAsIDQxLCAyNTQsIDMzLCAyMTQsIDE2MCwgNDQsIDIyNCwgMjksIDI1MCwgNDEsIDI1NCwgMzMsIAorICAgIDIzMiwgMTE0LCA0NCwgMjI0LCAyOSwgMjUwLCA0MSwgMjU0LCAzMywgMjMyLCAxMTQsIDQzLCAyMjQsIDI5LCAyNTAsIDQxLCAKKyAgICAyNTQsIDMzLCAyMTQsIDE2MCwgMTYzLCAyNTAsIDQzLCAyMzIsIDExNCwgMTYzLCAyNTAsIDQzLCA4NSwgMjMyLCAxMTQsIAorICAgIDQ0LCAyMTUsIDIyNiwgODUsIDIzMiwgMTE0LCA0MywgMjE1LCAyMjYsIDg1LCAyMTQsIDE2MCwgNDMsIDIxNSwgMjI2LCA4NSwgCisgICAgMjE0LCAxNjAsIDQ0LCAyMTUsIDIyNiwgNzEsIDI1MSwgMTIxLCA0MiwgMiwgNDMsIDE2MywgMjUxLCAyMjksIDQyLCAyLCAKKyAgICA0NCwgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIDIxNCwgMTYwLCA0MywgMjQ4LCA3LCAxNjMsIDI1MSwgMjI5LCA0MiwgMiwgCisgICAgMjMyLCAxMTQsIDQ0LCAyNDgsIDcsIDE2MywgMjUxLCAyMjksIDcxLCA0MiwgMiwgNjcsIDI1MSwgMjQwLCAyMzIsIDIxOSwgCisgICAgNzEsIDIxNCwgMTYyLCAyMTUsIDIyNywgMiwgMjQ3LCAxMjgsIDIxNCwgMTYyLCAyMTUsIDIyNywgMiwgNDMsIDE2MywgMjUxLCAKKyAgICAyMjksIDIxNCwgMTYyLCAyMTUsIDIyNywgMiwgNDQsIDE2MywgMjUxLCAyMjksIDIzMywgOTEsIDI1MCwgNDMsIDcxLCA0MiwgCisgICAgMiwgMjE0LCAxNjAsIDQzLCAyMjQsIDI4LCA3MSwgNDIsIDIsIDIzMiwgMTE0LCA0MywgMjI0LCAyOCwgNzEsIDQyLCAyLCAKKyAgICAyMzIsIDExNCwgNDQsIDIyNCwgMjgsIDcxLCA0MiwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI4LCA3MSwgMjUwLCA0NCwgMiwgCisgICAgMjE0LCAxNjAsIDQzLCAyMjQsIDI4LCA3MSwgMjUwLCA0NCwgMiwgMjMyLCAxMTQsIDQzLCAyMjQsIDI4LCA3MSwgMjUwLCAKKyAgICA0NCwgMiwgMjMyLCAxMTQsIDQ0LCAyMjQsIDI4LCA3MSwgMjUwLCA0NCwgMiwgMjE0LCAxNjAsIDQ0LCAyMjQsIDI4LCAyMTQsIAorICAgIDE2MCwgNDMsIDIxNSwgMjI2LCAyMTQsIDE2MCwgNDQsIDIxNSwgMjI2LCAyMzIsIDExNCwgNDMsIDIxNSwgMjI2LCA3MSwgCisgICAgMjMxLCA4NywgMjE4LCAyMzYsIDg1LCAyMzEsIDg3LCAyMTgsIDIzNiwgNzEsIDIzMSwgODcsIDQsIDIxOCwgMjM2LCA4NSwgCisgICAgMjMxLCA4NywgNCwgMjE4LCAyMzYsIDIzMiwgMTE0LCA0NCwgMjE1LCAyMjYsIDg1LCAyMTgsIDM5LCAyLCAyMjMsIDEzNSwgCisgICAgMjQ5LCAyNTUsIDIxNCwgMTk0LCAyMTksIDYyLCAyNDksIDIzMCwgODUsIDIxOCwgMTU4LCA3MSwgMjE4LCAxNTgsIDIzMiwgCisgICAgMjM0LCAyMTYsIDEzMywgMjE4LCAzOCwgMjUzLCAyNDIsIDIyOCwgNzYsIDI0OCwgNDYsIDIyOCwgNzYsIDI0OSwgMjAzLCAKKyAgICAyMjYsIDE2NywgODUsIDIxNywgMSwgNzEsIDIxNywgMSwgMjUyLCAxNjQsIDI1MSwgMTcxLCAyNTIsIDE2NCwgOTMsIDIsIAorICAgIDI1MCwgMTM3LCAyNTIsIDE2NCwgOTMsIDIsIDIxMSwgMTc4LCAyMjIsIDAsIDIxNCwgMTk1LCAyLCAyMjMsIDE2MywgMjQ2LCAKKyAgICA5MiwgMjQwLCAyNTAsIDI1MiwgMzAsIDcxLCAyMjAsIDQsIDIyNSwgMTA0LCA4NSwgMjIwLCA0LCAyMjUsIDEwNCwgMjIwLCAKKyAgICA4OSwgMjIzLCA1MiwgMjIyLCAxODksIDI0NCwgNjMsIDI0MSwgMjM1LCAyNTEsIDEyMSwgODUsIDQzLCAyMjUsIDEwLCAyMzUsIAorICAgIDI0OSwgODUsIDQ0LCAyMjUsIDEwLCAyMzUsIDI0OSwgNzEsIDQzLCAyMjUsIDEwLCAyMzUsIDI0OSwgNzEsIDEyMCwgMjI1LCAKKyAgICAxMCwgMjM1LCAyNDksIDcxLCA0NCwgMjI1LCAxMCwgMjM1LCAyNDksIDcxLCAxMjQsIDIyNSwgMTAsIDIzNSwgMjQ5LCAyMTksIAorICAgIDEwMywgMjIsIDI0OSwgMTM3LCAyNTAsIDIyNywgNTAsIDIyMywgMTc1LCA1MCwgMjUxLCAyNDcsIDUwLCAyNTEsIDMzLCAKKyAgICAyNTQsIDExMCwgMjI2LCAxNDksIDI0OSwgMTM4LCAyNTAsIDExOSwgMjIzLCA0MCwgMjQ5LCAxMzksIDY0LCAyMzIsIDEyNCwgCisgICAgMjQ5LCAxMzksIDY0LCAyMzUsIDEyMiwgMjE4LCAxNTksIDIyLCAyNDksIDE0NCwgMjQ0LCAxNzYsIDg3LCAyNTUsIDEsIAorICAgIDIyMCwgOTEsIDI0MiwgMjksIDIyLCAyMTksIDE5MSwgMjI1LCAyMjMsIDg3LCAyMTAsIDI1NCwgMjExLCA2OSwgMjE1LCAKKyAgICAyMTYsIDMxLCAyNDEsIDIzMCwgMjE1LCAyMTYsIDMxLCAyMzMsIDExMywgMjE1LCAyMTYsIDMxLCAyNDQsIDEwNCwgMjE1LCAKKyAgICAyMTYsIDMxLCAyMTYsIDEzNCwgMjE1LCAyMTYsIDMxLCAyMTEsIDIzOSwgMjE1LCAyMTYsIDMxLCAyMTIsIDQwLCAyMTUsIAorICAgIDIxNiwgMzEsIDIzMCwgMTIwLCAyMTUsIDIxNiwgMzEsIDI0NSwgMjMxLCAyMTIsIDEsIDY0LCAyNDgsIDI2LCA3MSwgMjQzLCAKKyAgICAyNDcsIDI0NCwgMTk4LCA3MSwgMjE5LCA3NiwgMjQ0LCAxOTgsIDg1LCAyMTksIDc2LCAyNDQsIDE5OCwgNzEsIDIxOCwgMzksIAorICAgIDIsIDIyMywgMTM1LCAyNDQsIDEwMCwgMjI0LCAyNSwgMjMwLCAxMzMsIDIzMywgODYsIDIyNCwgMjUsIDIzMCwgMTMzLCAKKyAgICAyMzEsIDU5LCAyNDQsIDE0NiwgNTAsIDI0NSwgMjMxLCAyMzEsIDE5NSwgNTAsIDIzNSwgNDQsIDIyMSwgMjIyLCAyMTQsIAorICAgIDE0NSwgMjI5LCA5OCwgMjI1LCAyMywgMjU0LCAyMCwgMjE3LCA0MSwgMjQzLCA1OSwgMjUxLCAxMSwgMjMzLCAyNSwgMjEzLCAKKyAgICAxNTAsIDIzMiwgMjQ0LCAyMjEsIDE5MywgMjIyLCAyMSwgMjUxLCAwLCAyNTQsIDUwLCAyMjUsIDU1LCA3MSwgMjUwLCAxMjUsIAorICAgIDIzNCwgODQsIDcxLCAyNTAsIDEyNSwgMjI0LCAxNywgNzEsIDI1MCwgMTI1LCAyMjIsIDE5NywgNzEsIDI1MCwgMTI1LCAKKyAgICAyNTEsIDIzOSwgNzEsIDI1MCwgMTI1LCAyMzQsIDM2LCA3MSwgMjUwLCAxMjUsIDIyNSwgMjM1LCA4NSwgMjUwLCAxMjUsIAorICAgIDIzNCwgODQsIDg1LCAyNTAsIDEyNSwgMjI0LCAxNywgODUsIDI1MCwgMTI1LCAyMjIsIDE5NywgODUsIDI1MCwgMTI1LCAKKyAgICAyNTEsIDIzOSwgODUsIDI1MCwgMTI1LCAyMzQsIDM2LCA4NSwgMjUwLCAxMjUsIDIyNSwgMjM1LCA4NSwgMjE5LCAxOCwgCisgICAgMjE4LCA1MSwgNzEsIDI0MSwgMjM1LCAyMTgsIDUxLCA3MSwgMjQ4LCAxLCAyMTgsIDUxLCA4NSwgMjQ5LCAyNTMsIDIxOCwgCisgICAgNTEsIDcxLCAyMTksIDE4LCAyMTgsIDUxLCA4NSwgMjQxLCAyMzUsIDIxOCwgNTEsIDg1LCAyNDgsIDEsIDIxOCwgNTEsIDcxLCAKKyAgICAyNDksIDI1MywgMjE4LCA1MSwgMjQwLCAyNTAsIDIxOCwgMjQwLCAyMjQsIDI1LCAyMjgsIDUyLCAyNDUsIDE5NywgMjI4LCAKKyAgICA1MiwgMjUyLCA4MSwgMjQ1LCAxOTcsIDIyOCwgNDcsIDI1MiwgODEsIDIxOSwgMTIwLCAyMjgsIDQ3LCAyMzAsIDYyLCAyNDQsIAorICAgIDc0LCA1MCwgMjMwLCA2MiwgMjI5LCAxOTMsIDUwLCAyMzAsIDYyLCAyMjAsIDc4LCA1MCwgMjEyLCA5LCAxODMsIDI0OSwgCisgICAgMTM4LCAyNDUsIDIyOCwgMTgzLCAyNDksIDEzOCwgMjE0LCAxNzEsIDIyMywgMTE1LCA4NywgMjIzLCAxMTUsIDE2LCAzMSwgCisgICAgMjE1LCA0OCwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjE1LCA0NywgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgCisgICAgMjE1LCA0NiwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjE1LCA0NSwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgCisgICAgMjE1LCA0NCwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjE1LCA0MywgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgCisgICAgMjE1LCA0MiwgMjI1LCAzNywgMjIzLCAxMTUsIDE2LCAzMSwgMjQzLCA1NywgMjMxLCAxNDMsIDg1LCAyMTQsIDE3MSwgMjIzLCAKKyAgICAxMTUsIDg3LCAyMjMsIDExNiwgMjI2LCAyNCwgODcsIDIyNiwgMCwgMjI2LCAyNCwgODcsIDIyNSwgMTc3LCAyMjYsIDI0LCAKKyAgICA1MCwgMjExLCAyNTUsIDg3LCAyNDcsIDI0OSwgMjQ0LCAxOTcsIDI0NywgMjQ5LCAyNDQsIDE5NiwgMjQ3LCAyNDksIDI0NCwgCisgICAgMTk1LCAyNDcsIDI0OSwgMjQ0LCAxOTQsIDI0NywgMjQ5LCAyNDQsIDE5MywgMjQ3LCAyNDksIDI0NCwgMTkyLCA3MSwgMjUwLCAKKyAgICA0NCwgMiwgNTksIDIyMiwgMjU0LCA3MSwgMjUwLCA0NCwgMiwgMTEzLCAyNDcsIDEyNiwgODUsIDI1MCwgNDQsIDIsIDcxLCAKKyAgICA1OSwgMjIyLCAyNTQsIDg1LCAyNTAsIDQ0LCAyLCAxMTMsIDcxLCAyNDcsIDEyNiwgMjMwLCAxNDcsIDMxLCAyMTEsIDY5LCAKKyAgICAyMzAsIDE0NywgMzEsIDIxMCwgMjUzLCAyNDcsIDIzMiwgMzEsIDI0MiwgMTM4LCAyMTEsIDY5LCAyNDcsIDIzMiwgMzEsIAorICAgIDIzMywgMTksIDIxMCwgMjUzLCAyNDcsIDIzMiwgMzEsIDIzMywgMTksIDIxMSwgNjksIDI0NywgMjMyLCAzMSwgMjQyLCAKKyAgICAxMzgsIDIxMCwgMjUzLCA3MSwgMjQ0LCA4MSwgODUsIDI0NCwgODEsIDI0MiwgMjksIDIyLCAyMjUsIDEwNywgMjU0LCAxMjgsIAorICAgIDI0OSwgMTM2LCAyMTcsIDIzNiwgMjE4LCAxNjYsIDY0LCAyNTQsIDIzNSwgMjIxLCAyMDgsIDI1NCwgMTc4LCAyNDQsIDU5LCAKKyAgICAyNDMsIDY3LCAyMTgsIDE2NiwgNjQsIDI0MSwgMjA5LCAyNTMsIDIwNywgODcsIDI0NCwgNzAsIDIyNiwgMTMwLCA3MSwgCisgICAgMjE4LCAxNTgsIDEzNCwgMjMyLCAyMTQsIDI0OSwgMTgzLCAyMjIsIDI1NCwgMTM0LCAyMzIsIDIxNCwgMjQ5LCAxODMsIAorICAgIDIzMywgNTIsIDIxMiwgNTAsIDUwLCAxMjUsIDIxMywgMTMwLCA1MCwgMjQ2LCAxMTgsIDI0NCwgMTQ2LCA1MCwgMjQ2LCAKKyAgICAxMTgsIDIzMSwgMTk1LCA1MCwgMjM1LCAyMTAsIDI0NCwgMTQ2LCAyMiwgMjMxLCAxOTUsIDUwLCAyMzEsIDE5NSwgMjIsIAorICAgIDI0NCwgMTQ2LCA1MCwgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCA1MCwgMjMxLCAxOTUsIDIsIDIxOCwgMTA1LCAyMiwgMjMxLCAKKyAgICAxOTUsIDIyLCAyNDQsIDE0NiwgNTAsIDY3LCAyMzEsIDE5NSwgMiwgMjE4LCAxMDUsIDUwLCAyMDMsIDIzMSwgMTk1LCAyLCAKKyAgICAyMTgsIDEwNSwgNTAsIDIzMSwgODcsIDcxLCAyNTAsIDQzLCAyMzEsIDg3LCA4NSwgMjUwLCA0MywgMjMxLCA4NywgNCwgNzEsIAorICAgIDI1MCwgNDMsIDIzMSwgMTU4LCA4NywgMjQ3LCAxNzUsIDg3LCAyMTQsIDE2OSwgMjI1LCAyNTUsIDg3LCAyNDksIDIzOSwgCisgICAgMjQzLCAyMzEsIDIxNCwgMTQxLCAyMjksIDkzLCAyNTAsIDE2OSwgMjI2LCA2NSwgMjM1LCA1MCwgMjEzLCAxODUsIDI1MCwgCisgICAgMTAxLCA4NSwgMjMwLCAxMzQsIDIzMiwgMjMxLCAyMjAsIDExNCwgMjIwLCAxNDksIDIyNCwgOCwgMjIwLCAxMzIsIDIxOSwgCisgICAgNTcsIDI1MiwgMTY3LCAyNTIsIDEzNCwgOTIsIDIzNCwgMTQ0LCA3MSwgMjQ2LCAxMDEsIDIzMSwgMTkwLCA3MSwgMjQ2LCAKKyAgICAxMDEsIDIzNCwgODQsIDg1LCAyNDYsIDEwMSwgMjMxLCAxOTAsIDg1LCAyNDYsIDEwMSwgMjM0LCA4NCwgMjE5LCA2MywgCisgICAgMjExLCAyMzAsIDIxOSwgNjYsIDIxOCwgMzksIDI1MiwgNTksIDI0OSwgMjU1LCAyMjMsIDE2MiwgODUsIDIxOSwgNjIsIAorICAgIDIxNiwgMTM1LCAyNTAsIDAsIDIyLCAyMjMsIDE2MiwgMjE1LCA5NCwgNzEsIDIyMCwgNCwgMjI1LCAxMDQsIDIxNSwgOTQsIAorICAgIDg1LCAyMjAsIDQsIDIyNSwgMTA0LCA3MSwgMjQ4LCAxLCAyMzYsIDcsIDIxOCwgMjM2LCAyNDksIDEzMywgMjMzLCA5NywgCisgICAgMjQ3LCAyMDEsIDI1MCwgMjUyLCAyMjYsIDE3MCwgMjI1LCAxMDcsIDI1MCwgMjUzLCAyMTksIDkwLCAyNDEsIDIxOSwgMiwgCisgICAgNzEsIDI0OSwgMTM4LCAzNywgMjQ5LCAxMzMsIDIzMywgOTcsIDI1MCwgMTYxLCAyMjgsIDgwLCAyNDUsIDEzMiwgMjU0LCAKKyAgICAxNDksIDIyNiwgMTk1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTIsIDg1LCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTIsIAorICAgIDcxLCAyMTUsIDU1LCA0MywgMjEyLCAyNiwgMjE1LCAyNTIsIDg1LCA0MywgMjMzLCA5OCwgMjMxLCA1OCwgNzEsIDQzLCAKKyAgICAyMzMsIDk4LCAyMzEsIDU4LCAyNDYsIDk3LCAyMTksIDg0LCA1MCwgMTE0LCA3MSwgMjQ2LCAxMTMsIDIxNSwgMjI2LCA0MywgCisgICAgMjUwLCA4LCAyNDUsIDEzMiwgOTIsIDIyMiwgMCwgMjQ0LCAxODMsIDI0OCwgNywgMjM2LCA3LCA3MSwgMjUwLCA0NCwgMjM2LCAKKyAgICA3LCA4NSwgMjE4LCAyMzYsIDg1LCAyMTUsIDE5MywgMjIzLCA2MywgNDMsIDI0NSwgMTMxLCAyMjMsIDYzLCA0MywgMjQ1LCAKKyAgICAxMzAsIDI1MywgMjE5LCAxNiwgMzEsIDIxNCwgMTQ1LCAxMTQsIDI1MCwgNDQsIDIsIDIxOCwgMTA1LCAyMiwgMTEzLCAxNzAsIAorICAgIDQ4LCAyMjUsIDE5MiwgMjIyLCAyNTEsIDIzNSwgMjEyLCAyMjUsIDE5MiwgMjMzLCA0OSwgMjM1LCAyMTIsIDIyNSwgMTkyLCAKKyAgICAyMzUsIDIwMCwgMjI1LCAxOTIsIDg1LCAyNDksIDEzOSwgMjI2LCAyMDEsIDIyMCwgMzEsIDIyMCwgMTksIDIxOSwgMjMxLCAKKyAgICAyNTAsIDY5LCAyNTAsIDIzNCwgMjQxLCAxNjQsIDIxOSwgMTI4LCAyNDMsIDY4LCAyMTEsIDIzMCwgMjQwLCAyMjcsIDI0MywgCisgICAgNjgsIDIsIDI0MiwgMTksIDIzMSwgMTc4LCAxNiwgMzEsIDIzMiwgMjM1LCAyMzAsIDEyMCwgMjE0LCAxOTUsIDIyNiwgMjAxLCAKKyAgICAyNDIsIDEyOSwgMjQ0LCAyMCwgMjQ0LCA4MiwgMjM2LCA3LCAyNDEsIDY2LCAyNDQsIDEzNywgMjIyLCAxNiwgNDIsIDI0NCwgCisgICAgMTksIDI0OSwgMTY3LCAyMTksIDEwNiwgMjQwLCAxMTksIDIxOSwgMTA5LCAyMjUsIDE3MSwgMiwgMjUyLCAxNjcsIDIxNiwgCisgICAgMjQzLCAyMzUsIDEzNywgMjUyLCAxNTQsIDg3LCAyNDEsIDIzOCwgMjQyLCAxNDAsIDg3LCAyNDMsIDIzOSwgMjI0LCAxNDUsIAorICAgIDI0OSwgMTExLCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCA3MSwgMjQ0LCA4MiwgMiwgMjAzLCAyMzAsIDIyOSwgODUsIDIxOCwgCisgICAgMTA2LCAyMTQsIDE2MCwgMjUxLCAyMjUsIDIyMSwgMTk1LCA4NSwgMjIxLCAxOTUsIDIzMiwgMTE0LCAyNTEsIDIyNSwgMjIxLCAKKyAgICAxOTUsIDcxLCAyMjEsIDE5NSwgNzEsIDExNCwgMjUwLCAxMzgsIDc5LCAyMTcsIDIsIDIzMiwgMTYwLCA1MCwgMjE3LCA1NCwgCisgICAgMjQ2LCA5NiwgMjU0LCAyMDAsIDI0NSwgMTI3LCAyMjMsIDE2MCwgMjQ0LCA5MywgMjIzLCAxNjAsIDI0MiwgMjIsIDIxMywgCisgICAgMTc0LCAyNDIsIDIyLCAyMTEsIDE5OCwgMjQyLCAyMiwgMjMyLCAxMTQsIDQ0LCAyMjUsIDIwMSwgMjI1LCAyMDEsIDIxNCwgCisgICAgMTYwLCA0NCwgMjI1LCAyMDEsIDcxLCAyMjgsIDIzNSwgODUsIDIyOCwgMjM1LCAyNTAsIDEzOCwgNzksIDExNCwgMjUwLCAKKyAgICAxMzgsIDc5LCAyMzAsIDg5LCAyMTEsIDE3OCwgMTE0LCAyMzAsIDg5LCAyMTEsIDE3OCwgMjUyLCAxNjQsIDIxMSwgMTc4LCAKKyAgICAxMTQsIDI1MiwgMTY0LCAyMTEsIDE3OCwgMjI2LCAxMzAsIDI2LCAyNDksIDEzOCwgMTE0LCAyNiwgMjQ5LCAxMzgsIDIwNCwgCisgICAgMjUwLCAxODMsIDI0OSwgMTM4LCAxMTQsIDIwNCwgMjUwLCAxODMsIDI0OSwgMTM4LCA3LCAyNDksIDEzOCwgMjIwLCA5MywgCisgICAgNzEsIDcsIDI0OSwgMTM4LCAyMjYsIDEzMCwgNywgMjQ5LCAxMzgsIDIzMSwgMTkyLCAyNDksIDEzOCwgMjE4LCAxNTksIDY0LCAKKyAgICAyNDgsIDE1NywgMjQ0LCAxOSwgMjE3LCAxNiwgMjUzLCAyMjQsIDI0NCwgMTksIDI1MiwgMTY1LCAyNTMsIDIyNCwgMTE0LCAKKyAgICAyNDQsIDE5LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDI0NCwgMTksIDI0OSwgMjUxLCAyNTMsIDIyNCwgODUsIDI0NCwgMTksIAorICAgIDIyNSwgMTIsIDIxOCwgMTU4LCA3MSwgMjQ0LCAxOSwgMjI1LCAxMiwgMjE4LCAxNTgsIDIxOSwgMTMsIDIxOCwgMTEzLCAKKyAgICAyMjYsIDEzMCwgNzEsIDIxOCwgMTU4LCAzNywgNzEsIDIxOCwgMTU4LCAyMDQsIDI1MCwgMTgzLCA4NSwgMjE4LCAxNTgsIAorICAgIDg1LCAyNTAsIDE4MywgNzEsIDIxOCwgMTU4LCAyMjYsIDEzMCwgODUsIDIxOCwgMTU4LCAxMTQsIDIyNiwgMTMwLCA4NSwgCisgICAgMjE4LCAxNTgsIDIyNSwgNjMsIDIxOCwgMTU4LCAyMjAsIDkzLCA3MSwgMjE4LCAxNTgsIDExNCwgMjUzLCAyMjQsIDIwNCwgCisgICAgMjUwLCAxODMsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjE4LCAyNDYsIDI1MywgMjI0LCAyNDUsIDIwMSwgMjI1LCAxMiwgODUsIAorICAgIDIxOCwgMTU4LCAyNDUsIDIwMSwgMjI1LCAxMiwgMjI1LCA2MywgMjE4LCAxNTgsIDIxOSwgMTI3LCAyMjUsIDEyLCA4NSwgCisgICAgMjE4LCAxNTgsIDI0NSwgMjAxLCAyMjUsIDEyLCAyMjMsIDExNywgODUsIDIxOCwgMTU4LCAxMTQsIDI0NSwgMjAxLCAyMjUsIAorICAgIDEyLCAyMjMsIDExNywgODUsIDIxOCwgMTU4LCAyMTUsIDc3LCAyMjUsIDEyLCA4NSwgMjE4LCAxNTgsIDIxOSwgMTIyLCAKKyAgICAyMjUsIDEyLCAyNTMsIDIyNCwgMjE3LCAxNiwgMjUzLCAyMjQsIDIwNCwgMjUwLCAxODMsIDIxNywgMTYsIDI1MywgMjI0LCAKKyAgICAxMTQsIDIxNywgMTYsIDI1MywgMjI0LCAyMTksIDEyNywgMjI1LCAxNjAsIDg1LCAyMiwgNzEsIDI0NCwgNjIsIDg1LCAyNDQsIAorICAgIDYyLCA3MSwgMjQ0LCA2MiwgMjQ1LCAyMDEsIDIyNSwgMTYwLCAyMjYsIDEzMCwgODUsIDI0NCwgNjIsIDM3LCAyMDQsIDI1MCwgCisgICAgMTgzLCAyNDUsIDIwMSwgMjI1LCAxMiwgMjE4LCAxNTgsIDExNCwgMjE3LCAxNiwgMjI1LCA2MywgMjUzLCAyMjQsIDIxOSwgCisgICAgNjQsIDIxNiwgMTA2LCAyMTUsIDIxOSwgMjE5LCA2NCwgMTE0LCAyNTAsIDEyMiwgMjE5LCA2NCwgMjE5LCAxNSwgMTE0LCAKKyAgICAyMTksIDE1LCAyNTIsIDE2NSwgMjUzLCAyMjQsIDI0NSwgMjAxLCAyMTcsIDE2LCAyMjQsIDE3NCwgMjUzLCAyMjQsIDExNCwgCisgICAgMjQ1LCAyMDEsIDIxNywgMTYsIDIyNCwgMTc0LCAyNTMsIDIyNCwgMjQ5LCAxMzksIDc5LCAyMjAsIDkzLCA3MSwgMjUwLCAKKyAgICA0MywgMTUyLCA5MiwgMjQ5LCAxMzksIDc5LCAyMzIsIDExNCwgNDQsIDI0NiwgOTQsIDcxLCAyMTgsIDIzNiwgMjE0LCAxNjAsIAorICAgIDQ0LCAyNDYsIDk0LCA3MSwgMjE4LCAyMzYsIDIzMiwgMTE0LCA0NCwgMjIwLCA5MywgNzEsIDIxOCwgMjM2LCAyMTQsIDE2MCwgCisgICAgNDQsIDIyMCwgOTMsIDcxLCAyMTgsIDIzNiwgODUsIDIyNCwgMTYsIDE2NCwgMjI2LCAxNTEsIDcxLCAyMjQsIDE2LCAxNjQsIAorICAgIDIyNiwgMTUxLCA3MSwgMjQ1LCAzOSwgMTY0LCAyMjYsIDE1MSwgODUsIDI0OCwgMSwgMjMwLCAxODcsIDcxLCAyMTEsIDE3OCwgCisgICAgMTE0LCAyNDUsIDM5LCAxNjQsIDg3LCAxOTMsIDY3LCAxMzAsIDIzMSwgODcsIDY3LCAxMzAsIDExNCwgNjcsIDEzMCwgMTE0LCAKKyAgICAyMTksIDE1NywgMjE1LCA5NCwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAyMTksIDE1NywgMjQ5LCAKKyAgICAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCA1MiwgMjE1LCA5NCwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIAorICAgIDE1MSwgMTE0LCA1MiwgMjQ5LCAyMjgsIDIyNCwgMSwgMTY0LCAyMjYsIDE1MSwgMTE0LCAxMjEsIDIxOSwgMTU3LCAyNDksIAorICAgIDIyOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDEyMSwgNTIsIDI0OSwgMjI4LCAyMjQsIDEsIDE2NCwgMjI2LCAKKyAgICAxNTEsIDI0OSwgOTksIDIxOCwgMTQyLCAyMjYsIDE5LCA1LCAyMjYsIDE1MSwgMTE0LCAyNDUsIDM5LCAxNjQsIDIyNiwgCisgICAgMTUxLCAxMTQsIDI0MSwgMjM1LCAyNDUsIDM5LCAxNjQsIDIyNiwgMTUxLCAxMTQsIDg1LCAyNDEsIDIzNCwgMjIyLCAxODksIAorICAgIDExNCwgODUsIDI0MSwgMjM1LCAyNTEsIDEyMSwgMjQ0LCA2MywgMjQxLCAyMzQsIDIyMiwgMTg5LCAyNDQsIDYzLCAyNDEsIAorICAgIDIzNSwgMjUxLCAxMjEsIDIzMSwgODcsIDQzLCAyMjYsIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCA0NCwgMjI2LCA4LCAyMjYsIAorICAgIDE1MSwgMjMxLCA4NywgMjQ0LCA3MSwgNDMsIDIyNiwgOCwgMjI2LCAxNTEsIDIzMSwgODcsIDI0NCwgNzEsIDQ0LCAyMjYsIAorICAgIDgsIDIyNiwgMTUxLCAyMzEsIDg3LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIyNiwgMTUxLCAyMzEsIDg3LCAKKyAgICAyMjIsIDI1MCwgMjU0LCAxMTgsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMTE0LCAyMzMsIDQ4LCAyNTQsIDExOCwgMjI0LCAxLCAKKyAgICAxNjQsIDIyNiwgMTUxLCAxMTQsIDIyMiwgMjUwLCAyNTQsIDExOCwgMjI0LCAxLCAxNjQsIDIyNiwgMTUxLCAxMTQsIDIzMywgCisgICAgNDgsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDExNCwgMjIyLCAyNTAsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMjI2LCAKKyAgICAxNTEsIDE5MywgNDMsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjYsIDIyNiwgMTUxLCAxOTMsIDQ0LCAyMTYsIDcsIDIyMCwgCisgICAgNTUsIDI1MSwgMTY2LCAyMjYsIDE1MSwgMjMxLCA4NywgNDMsIDI0OSwgMTA3LCAyNTEsIDE2NiwgMjI2LCAxNTEsIDIzMSwgCisgICAgODcsIDQ0LCAyNDksIDEwNywgMjUxLCAxNjYsIDIyNiwgMTUxLCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIDExMSwgMjQ3LCAKKyAgICAyMTIsIDE1MiwgMzcsIDIxLCAxMDUsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTU4LCAyNDcsIDIxMiwgMTUyLCAzNywgMjEsIAorICAgIDE2MSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxOTAsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMTk1LCAyNDcsIDIxMiwgCisgICAgMTUyLCAzNywgMjEsIDE5OSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDIxLCAxOTYsIDI0NywgMjEyLCAxNTIsIDM3LCAyMSwgMjAxLCAKKyAgICAyNDcsIDIxMiwgMTUyLCAzNywgNTQsIDIxNiwgMjQ4LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTExLCAyNDcsIDIxMiwgMzcsIAorICAgIDM1LCAyMSwgMTA1LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTU4LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTYxLCAyNDcsIAorICAgIDIxMiwgMzcsIDM1LCAyMSwgMTkwLCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTk1LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgCisgICAgMTk5LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMTk2LCAyNDcsIDIxMiwgMzcsIDM1LCAyMSwgMjAxLCAyNDcsIDIxMiwgMzcsIAorICAgIDM1LCA1NCwgMjE2LCAyNDgsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDExMSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAKKyAgICAyMSwgMTA1LCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxNTgsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgMjEsIDE2MSwgCisgICAgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTkwLCAyNDcsIDIxMiwgMTUyLCAzNywgMzUsIDIxLCAxOTUsIDI0NywgMjEyLCAKKyAgICAxNTIsIDM3LCAzNSwgMjEsIDE5OSwgMjQ3LCAyMTIsIDE1MiwgMzcsIDM1LCAyMSwgMTk2LCAyNDcsIDIxMiwgMTUyLCAzNywgCisgICAgMzUsIDIxLCAyMDEsIDI0NywgMjEyLCAxNTIsIDM3LCAzNSwgNTQsIDIxNiwgMjQ4LCAxMTQsIDIxMSwgMjQ2LCA5NywgNzUsIAorICAgIDExNCwgOTYsIDUwLCAxMTQsIDIzMCwgMTg3LCA1MCwgMTE0LCAyNDcsIDE3NywgNTAsIDExNCwgMjE5LCAzMCwgMjQ1LCAKKyAgICAyMjgsIDc1LCAxMTQsIDk3LCA3NSwgMTE0LCAyMjgsIDYxLCAyNDUsIDIyOCwgNzUsIDI0NiwgMTA2LCAyMjUsIDE0LCA5NywgCisgICAgNzUsIDExNCwgMjIyLCAxODYsIDk3LCA3NSwgMjE1LCAyMjUsIDk3LCA3NSwgMTE0LCAyMTUsIDIyNSwgOTcsIDc1LCAyNDgsIAorICAgIDE2MywgMjE1LCAyMjUsIDk3LCA3NSwgMTE0LCAyNDgsIDE2MywgMjE1LCAyMjUsIDk3LCA3NSwgODUsIDk3LCA3NSwgMjE2LCAKKyAgICAxNDUsIDIxNiwgMTMsIDk3LCAyNTQsIDEsIDIxNiwgMTQ1LCAyNTEsIDE4MSwgOTcsIDI1NCwgMSwgODUsIDk3LCAyNTQsIDEsIAorICAgIDExNCwgODUsIDI0OSwgOTksIDI0NiwgMTEyLCAyMiwgOTcsIDc1LCAxMTQsIDg1LCAyNDksIDk5LCAyMTQsIDE1MywgMjIsIAorICAgIDk3LCA3NSwgMjE4LCAyMzMsIDg1LCA5NywgNzUsIDExNCwgMjQ5LCAyMTQsIDg1LCA5NywgNzUsIDIyMiwgMjQ5LCA3MSwgCisgICAgOTcsIDc1LCAyMzMsIDQ3LCA3MSwgOTcsIDc1LCAyNTIsIDE5MSwgMjIwLCA5MywgNzEsIDk3LCA3NSwgMjQzLCAyNDksIAorICAgIDIyMCwgOTMsIDcxLCA5NywgNzUsIDExNCwgMjMyLCAxMTQsIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAxMTQsIDIxNCwgMTYwLCAKKyAgICAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMjI4LCA1NCwgMjMyLCAxMTQsIDIyMiwgMjQ4LCA3MSwgOTcsIDc1LCAyNDksIDEwNywgCisgICAgMjMyLCAxMjksIDIyOCwgNTQsIDIxNCwgMTYwLCAyMjIsIDI0OCwgNzEsIDk3LCA3NSwgMzcsIDExNCwgNzEsIDk3LCA3NSwgCisgICAgMjExLCAyNTIsIDk3LCA3NSwgMjUxLCAyMjgsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgMjUxLCAyMjgsIDk3LCA3NSwgMjUxLCAKKyAgICAyMjgsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMTE0LCAyNTEsIDIyOCwgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAxMTQsIAorICAgIDI1MSwgMjI4LCA5NywgNzUsIDExNCwgMjUxLCAyMjgsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjE3LCAxOCwgOTcsIDc1LCAKKyAgICAxMTQsIDIxNywgMTcsIDk3LCA3NSwgMjEyLCAxOCwgOTcsIDc1LCAxMTQsIDIxMiwgMTgsIDk3LCA3NSwgMjI2LCAxNzYsIAorICAgIDk3LCA3NSwgNTIsIDI0OSwgMTA3LCAyMzIsIDEyOSwgMTM0LCAyNDcsIDIyMiwgMjU0LCAxMTcsIDcxLCAyMTUsIDIyNywgCisgICAgMjQ5LCAxOTUsIDQsIDcxLCAyMTUsIDIyNiwgMjI1LCAxNzQsIDIwNCwgMjE4LCA2NCwgMjA0LCAyMTgsIDIyLCA0MywgMjIyLCAKKyAgICA5MiwgMjUyLCAxODEsIDI0OCwgNjgsIDQ0LCAyMjIsIDkyLCAyNTIsIDE4MSwgMjQ4LCA2OCwgMTc3LCAyLCA1OSwgMjM1LCAKKyAgICAyMjIsIDIyMywgNTMsIDIxOSwgNDksIDIyNCwgMjA0LCAyMTgsIDY0LCAyMTgsIDIzLCAyMjQsIDIwNCwgMjE5LCA0OCwgNjcsIAorICAgIDI1MiwgMTQ5LCAyLCAyMDMsIDkxLCAxMSwgMjIyLCAyMzEsIDI0OCwgNiwgMjAwLCAyNDcsIDE3NiwgMTEsIDI0NCwgMTgzLCAKKyAgICAyNDgsIDYsIDkyLCAyMzIsIDE1MiwgMjU0LCAxMjYsIDkyLCAyMzIsIDE1MiwgMjI2LCAxNjIsIDcxLCAyNDgsIDEsIDIsIAorICAgIDI1MCwgMTgxLCAyNDcsIDEyOCwgMjIsIDIsIDI0NywgMTI4LCAyNDUsIDE3OCwgNjQsIDIyNiwgMTc0LCAyMTQsIDE1MiwgCisgICAgMjMyLCAxMTQsIDQ0LCAyNDksIDE2OSwgMiwgMjQ3LCAxMjgsIDIxNCwgMTYwLCA0MywgMjQ5LCAxNjksIDIsIDI0NywgMTI4LCAKKyAgICA0MywgMjI2LCAxMzIsIDIzNSwgNzIsIDQ0LCAyMjYsIDEzMiwgMjM1LCA3MiwgMjQzLCAyMzYsIDIyNiwgMTMyLCAyMzUsIAorICAgIDcyLCAyMzMsIDkxLCAxMjAsIDIxNywgODgsIDIzMywgOTEsIDEyNCwgMjE3LCA4OCwgNDMsIDIyLCA0NCwgNTIsIDIxNSwgCisgICAgOTMsIDQzLCAyMiwgNDQsIDIxNywgODgsIDQzLCAyMzAsIDkyLCAyMDAsIDQ0LCAyMTcsIDg4LCAyMDAsIDQzLCAyMTcsIDg4LCAKKyAgICAxMjAsIDIxNywgODksIDIsIDI1MCwgNDQsIDQ4LCAyMzIsIDExMSwgMjQ3LCAxODEsIDI1MSwgODYsIDIwMywgMjIyLCAxMzUsIAorICAgIDcxLCAyNDksIDIxMywgMjQ4LCAwLCA3MSwgMjQ5LCAyMTMsIDI0OCwgMSwgMiwgMTQwLCAyMTYsIDExNSwgNzEsIDI0OSwgCisgICAgMjEzLCAyNDgsIDEsIDIsIDk3LCAyMTYsIDExNSwgNzEsIDQyLCAyLCAxNDAsIDIxNiwgMTE1LCA3MSwgNDIsIDIsIDk3LCAKKyAgICAyMTYsIDExNSwgMTEsIDQzLCA3MSwgNDIsIDEyNywgMTEsIDQ0LCA3MSwgNDIsIDEyNywgMTEsIDQzLCAyNTQsIDExOCwgCisgICAgMTI3LCAxMSwgNDQsIDI1NCwgMTE4LCAxMjcsIDExLCA0MywgNTIsIDI1NCwgMTE4LCAxMjcsIDExLCA0NCwgNTIsIDI1NCwgCisgICAgMTE4LCAxMjcsIDExLCA0MywgNzEsIDIxNiwgNywgMjIwLCA1NSwgMTI3LCAxMSwgNDQsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIAorICAgIDEyNywgMTEsIDQzLCAyNDQsIDcxLCAyMjYsIDcsIDExLCA0NCwgMjQ0LCA3MSwgMjI2LCA3LCAyMTQsIDE1MywgMjI0LCAyNywgCisgICAgNzUsIDI0NiwgMTEyLCAyMjQsIDI3LCA3NSwgMjU0LCA5NiwgMjQzLCAxMDUsIDI1MCwgNDQsIDc1LCAyNTAsIDEwLCAyNDMsIAorICAgIDEwNSwgMjUwLCA0NCwgNzUsIDQ0LCA4MCwgMiwgMzcsIDIyNSwgMjUsIDIwMCwgMTQwLCA3NSwgMjAwLCA5NywgNzUsIDIwMCwgCisgICAgNDMsIDQ0LCA3NSwgMjAwLCAxNDAsIDUyLCA3NSwgMjAwLCA5NywgNTIsIDc1LCAyMDAsIDQzLCA0NCwgNTIsIDc1LCAyMDAsIAorICAgIDE0MCwgODAsIDI0MywgMjUxLCAxMzAsIDIwMCwgOTcsIDgwLCAyNDMsIDI1MSwgMTMwLCAyMDAsIDE0MCwgNTIsIDgwLCAKKyAgICAyNDMsIDI1MSwgMTMwLCAyMDAsIDk3LCA1MiwgODAsIDI0MywgMjUxLCAxMzAsIDIwMCwgOTcsIDIxOCwgMjMyLCA3NSwgNDYsIAorICAgIDQ3LCAyNTEsIDIyMywgNDYsIDQ3LCAyNDcsIDEyNSwgNDYsIDQ3LCAyNDYsIDI1MywgNDYsIDQ3LCAyNDcsIDEyNCwgNDYsIAorICAgIDQ3LCAyNDYsIDE4OSwgNDYsIDQ3LCAyNDcsIDYwLCA0NiwgNDcsIDI0NiwgMjUyLCA0NiwgNDcsIDI0NywgMTIzLCA0NiwgCisgICAgNDcsIDI0NiwgMTU3LCA0NiwgNDcsIDI0NywgMjgsIDQ2LCA0NywgMjQ2LCAyMjAsIDQ2LCA0NywgMjQ3LCA5MSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE4OCwgNDYsIDQ3LCAyNDcsIDU5LCA0NiwgNDcsIDI0NiwgMjUxLCA0NiwgNDcsIDI0NywgMTIyLCA0NiwgNDcsIAorICAgIDI0NiwgMTQxLCA0NiwgNDcsIDI0NywgMTIsIDQ2LCA0NywgMjQ2LCAyMDQsIDQ2LCA0NywgMjQ3LCA3NSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE3MiwgNDYsIDQ3LCAyNDcsIDQzLCA0NiwgNDcsIDI0NiwgMjM1LCA0NiwgNDcsIDI0NywgMTA2LCA0NiwgNDcsIAorICAgIDI0NiwgMTU2LCA0NiwgNDcsIDI0NywgMjcsIDQ2LCA0NywgMjQ2LCAyMTksIDQ2LCA0NywgMjQ3LCA5MCwgNDYsIDQ3LCAKKyAgICAyNDYsIDE4NywgNDYsIDQ3LCAyNDcsIDU4LCA0NiwgNDcsIDI0NiwgMjUwLCA0NiwgNDcsIDI0NywgMTIxLCA0NiwgNDcsIAorICAgIDI0NiwgMTMzLCA0NiwgNDcsIDI0NywgNCwgNDYsIDQ3LCAyNDYsIDE5NiwgNDYsIDQ3LCAyNDcsIDY3LCA0NiwgNDcsIDI0NiwgCisgICAgMTY0LCA0NiwgNDcsIDI0NywgMzUsIDQ2LCA0NywgMjQ2LCAyMjcsIDQ2LCA0NywgMjQ3LCA5OCwgNDYsIDQ3LCAyNDYsIAorICAgIDE0OCwgNDYsIDQ3LCAyNDcsIDE5LCA0NiwgNDcsIDI0NiwgMjExLCA0NiwgNDcsIDI0NywgODIsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNzksIDQ2LCA0NywgMjQ3LCA1MCwgNDYsIDQ3LCAyNDYsIDI0MiwgNDYsIDQ3LCAyNDcsIDExMywgNDYsIDQ3LCAyNDYsIAorICAgIDE0MCwgNDYsIDQ3LCAyNDcsIDExLCA0NiwgNDcsIDI0NiwgMjAzLCA0NiwgNDcsIDI0NywgNzQsIDQ2LCA0NywgMjQ2LCAKKyAgICAxNzEsIDQ2LCA0NywgMjQ3LCA0MiwgNDYsIDQ3LCAyNDYsIDIzNCwgNDYsIDQ3LCAyNDcsIDEwNSwgNDYsIDQ3LCAyNDYsIAorICAgIDE1NSwgNDYsIDQ3LCAyNDcsIDI2LCA0NiwgNDcsIDI0NiwgMjE4LCA0NiwgNDcsIDI0NywgODksIDQ2LCA0NywgMjQ2LCAKKyAgICAxODYsIDQ2LCA0NywgMjQ3LCA1NywgNDYsIDQ3LCAyNDYsIDI0OSwgNDYsIDQ3LCAyNDcsIDEyMCwgNDYsIDQ3LCAyNDYsIAorICAgIDEyOSwgNDYsIDQ3LCAyNDcsIDAsIDQ2LCA0NywgMjQ2LCAxOTIsIDQ2LCA0NywgMjQ3LCA2MywgNDYsIDQ3LCAyNDYsIDE2MCwgCisgICAgNDYsIDQ3LCAyNDcsIDMxLCA0NiwgNDcsIDI0NiwgMjIzLCA0NiwgNDcsIDI0NywgOTQsIDQ2LCA0NywgMjQ2LCAxNDQsIDQ2LCAKKyAgICA0NywgMjQ3LCAxNSwgNDYsIDQ3LCAyNDYsIDIwNywgNDYsIDQ3LCAyNDcsIDc4LCA0NiwgNDcsIDI0NiwgMTc1LCA0NiwgNDcsIAorICAgIDI0NywgNDYsIDQ2LCA0NywgMjQ2LCAyMzgsIDQ2LCA0NywgMjQ3LCAxMDksIDQ2LCA0NywgMjQ2LCAxMzYsIDQ2LCA0NywgCisgICAgMjQ3LCA3LCA0NiwgNDcsIDI0NiwgMTk5LCA0NiwgNDcsIDI0NywgNzAsIDQ2LCA0NywgMjQ2LCAxNjcsIDQ2LCA0NywgMjQ3LCAKKyAgICAzOCwgNDYsIDQ3LCAyNDYsIDIzMCwgNDYsIDQ3LCAyNDcsIDEwMSwgNDYsIDQ3LCAyNDYsIDE1MSwgNDYsIDQ3LCAyNDcsIAorICAgIDIyLCA0NiwgNDcsIDI0NiwgMjE0LCA0NiwgNDcsIDI0NywgODUsIDQ2LCA0NywgMjQ2LCAxODIsIDQ2LCA0NywgMjQ3LCA1MywgCisgICAgNDYsIDQ3LCAyNDYsIDI0NSwgNDYsIDQ3LCAyNDcsIDExNiwgNDYsIDQ3LCAyNDYsIDEzMiwgNDYsIDQ3LCAyNDcsIDMsIDQ2LCAKKyAgICA0NywgMjQ2LCAxOTUsIDQ2LCA0NywgMjQ3LCA2NiwgNDYsIDQ3LCAyNDYsIDE2MywgNDYsIDQ3LCAyNDcsIDM0LCA0NiwgNDcsIAorICAgIDI0NiwgMjI2LCA0NiwgNDcsIDI0NywgOTcsIDQ2LCA0NywgMjQ2LCAxNDcsIDQ2LCA0NywgMjQ3LCAxOCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxMCwgNDYsIDQ3LCAyNDcsIDgxLCA0NiwgNDcsIDI0NiwgMTc4LCA0NiwgNDcsIDI0NywgNDksIDQ2LCA0NywgCisgICAgMjQ2LCAyNDEsIDQ2LCA0NywgMjQ3LCAxMTIsIDQ2LCA0NywgMjQ2LCAxMzksIDQ2LCA0NywgMjQ3LCAxMCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwMiwgNDYsIDQ3LCAyNDcsIDczLCA0NiwgNDcsIDI0NiwgMTcwLCA0NiwgNDcsIDI0NywgNDEsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzMsIDQ2LCA0NywgMjQ3LCAxMDQsIDQ2LCA0NywgMjQ2LCAxNTQsIDQ2LCA0NywgMjQ3LCAyNSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxNywgNDYsIDQ3LCAyNDcsIDg4LCA0NiwgNDcsIDI0NiwgMTg1LCA0NiwgNDcsIDI0NywgNTYsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDgsIDQ2LCA0NywgMjQ3LCAxMTksIDQ2LCA0NywgMjQ2LCAxMjcsIDQ2LCA0NywgMjQ2LCAyNTQsIDQ2LCA0NywgCisgICAgMjQ2LCAxOTAsIDQ2LCA0NywgMjQ3LCA2MSwgNDYsIDQ3LCAyNDYsIDE1OCwgNDYsIDQ3LCAyNDcsIDI5LCA0NiwgNDcsIAorICAgIDI0NiwgMjIxLCA0NiwgNDcsIDI0NywgOTIsIDQ2LCA0NywgMjQ2LCAxNDIsIDQ2LCA0NywgMjQ3LCAxMywgNDYsIDQ3LCAKKyAgICAyNDYsIDIwNSwgNDYsIDQ3LCAyNDcsIDc2LCA0NiwgNDcsIDI0NiwgMTczLCA0NiwgNDcsIDI0NywgNDQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzYsIDQ2LCA0NywgMjQ3LCAxMDcsIDQ2LCA0NywgMjQ2LCAxMzQsIDQ2LCA0NywgMjQ3LCA1LCA0NiwgNDcsIAorICAgIDI0NiwgMTk3LCA0NiwgNDcsIDI0NywgNjgsIDQ2LCA0NywgMjQ2LCAxNjUsIDQ2LCA0NywgMjQ3LCAzNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyOCwgNDYsIDQ3LCAyNDcsIDk5LCA0NiwgNDcsIDI0NiwgMTQ5LCA0NiwgNDcsIDI0NywgMjAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTIsIDQ2LCA0NywgMjQ3LCA4MywgNDYsIDQ3LCAyNDYsIDE4MCwgNDYsIDQ3LCAyNDcsIDUxLCA0NiwgNDcsIAorICAgIDI0NiwgMjQzLCA0NiwgNDcsIDI0NywgMTE0LCA0NiwgNDcsIDI0NiwgMTMwLCA0NiwgNDcsIDI0NywgMSwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5MywgNDYsIDQ3LCAyNDcsIDY0LCA0NiwgNDcsIDI0NiwgMTYxLCA0NiwgNDcsIDI0NywgMzIsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjQsIDQ2LCA0NywgMjQ3LCA5NSwgNDYsIDQ3LCAyNDYsIDE0NSwgNDYsIDQ3LCAyNDcsIDE2LCA0NiwgNDcsIAorICAgIDI0NiwgMjA4LCA0NiwgNDcsIDI0NywgNzksIDQ2LCA0NywgMjQ2LCAxNzYsIDQ2LCA0NywgMjQ3LCA0NywgNDYsIDQ3LCAKKyAgICAyNDYsIDIzOSwgNDYsIDQ3LCAyNDcsIDExMCwgNDYsIDQ3LCAyNDYsIDEzNywgNDYsIDQ3LCAyNDcsIDgsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDAsIDQ2LCA0NywgMjQ3LCA3MSwgNDYsIDQ3LCAyNDYsIDE2OCwgNDYsIDQ3LCAyNDcsIDM5LCA0NiwgNDcsIAorICAgIDI0NiwgMjMxLCA0NiwgNDcsIDI0NywgMTAyLCA0NiwgNDcsIDI0NiwgMTUyLCA0NiwgNDcsIDI0NywgMjMsIDQ2LCA0NywgCisgICAgMjQ2LCAyMTUsIDQ2LCA0NywgMjQ3LCA4NiwgNDYsIDQ3LCAyNDYsIDE4MywgNDYsIDQ3LCAyNDcsIDU0LCA0NiwgNDcsIAorICAgIDI0NiwgMjQ2LCA0NiwgNDcsIDI0NywgMTE3LCA0NiwgNDcsIDI0NiwgMTI4LCA0NiwgNDcsIDI0NiwgMjU1LCA0NiwgNDcsIAorICAgIDI0NiwgMTkxLCA0NiwgNDcsIDI0NywgNjIsIDQ2LCA0NywgMjQ2LCAxNTksIDQ2LCA0NywgMjQ3LCAzMCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIyMiwgNDYsIDQ3LCAyNDcsIDkzLCA0NiwgNDcsIDI0NiwgMTQzLCA0NiwgNDcsIDI0NywgMTQsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDYsIDQ2LCA0NywgMjQ3LCA3NywgNDYsIDQ3LCAyNDYsIDE3NCwgNDYsIDQ3LCAyNDcsIDQ1LCA0NiwgNDcsIAorICAgIDI0NiwgMjM3LCA0NiwgNDcsIDI0NywgMTA4LCA0NiwgNDcsIDI0NiwgMTM1LCA0NiwgNDcsIDI0NywgNiwgNDYsIDQ3LCAKKyAgICAyNDYsIDE5OCwgNDYsIDQ3LCAyNDcsIDY5LCA0NiwgNDcsIDI0NiwgMTY2LCA0NiwgNDcsIDI0NywgMzcsIDQ2LCA0NywgCisgICAgMjQ2LCAyMjksIDQ2LCA0NywgMjQ3LCAxMDAsIDQ2LCA0NywgMjQ2LCAxNTAsIDQ2LCA0NywgMjQ3LCAyMSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxMywgNDYsIDQ3LCAyNDcsIDg0LCA0NiwgNDcsIDI0NiwgMTgxLCA0NiwgNDcsIDI0NywgNTIsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDQsIDQ2LCA0NywgMjQ3LCAxMTUsIDQ2LCA0NywgMjQ2LCAxMzEsIDQ2LCA0NywgMjQ3LCAyLCA0NiwgNDcsIAorICAgIDI0NiwgMTk0LCA0NiwgNDcsIDI0NywgNjUsIDQ2LCA0NywgMjQ2LCAxNjIsIDQ2LCA0NywgMjQ3LCAzMywgNDYsIDQ3LCAKKyAgICAyNDYsIDIyNSwgNDYsIDQ3LCAyNDcsIDk2LCA0NiwgNDcsIDI0NiwgMTQ2LCA0NiwgNDcsIDI0NywgMTcsIDQ2LCA0NywgCisgICAgMjQ2LCAyMDksIDQ2LCA0NywgMjQ3LCA4MCwgNDYsIDQ3LCAyNDYsIDE3NywgNDYsIDQ3LCAyNDcsIDQ4LCA0NiwgNDcsIAorICAgIDI0NiwgMjQwLCA0NiwgNDcsIDI0NywgMTExLCA0NiwgNDcsIDI0NiwgMTM4LCA0NiwgNDcsIDI0NywgOSwgNDYsIDQ3LCAKKyAgICAyNDYsIDIwMSwgNDYsIDQ3LCAyNDcsIDcyLCA0NiwgNDcsIDI0NiwgMTY5LCA0NiwgNDcsIDI0NywgNDAsIDQ2LCA0NywgCisgICAgMjQ2LCAyMzIsIDQ2LCA0NywgMjQ3LCAxMDMsIDQ2LCA0NywgMjQ2LCAxNTMsIDQ2LCA0NywgMjQ3LCAyNCwgNDYsIDQ3LCAKKyAgICAyNDYsIDIxNiwgNDYsIDQ3LCAyNDcsIDg3LCA0NiwgNDcsIDI0NiwgMTg0LCA0NiwgNDcsIDI0NywgNTUsIDQ2LCA0NywgCisgICAgMjQ2LCAyNDcsIDQ2LCA0NywgMjQ3LCAxMTgsIDk3LCAyMTUsIDU4LCA4MCwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIAorICAgIDIsIDUyLCA2NywgOTEsIDE0MCwgNTIsIDgwLCAyLCA2NywgOTEsIDk3LCA1MiwgODAsIDIsIDY3LCA5MSwgNDMsIDQ0LCA1MiwgCisgICAgODAsIDIsIDY3LCA5MSwgOTcsIDIxNSwgNTgsIDgwLCAyNDMsIDI1MSwgMTMwLCAxNDAsIDUyLCA4MCwgMjQzLCAyNTEsIAorICAgIDEzMCwgOTcsIDUyLCA4MCwgMjQzLCAyNTEsIDEzMCwgMjQ2LCAxMTIsIDgwLCAyLCAyMDMsIDkxLCAyMTQsIDE1MywgODAsIAorICAgIDIsIDIwMywgOTEsIDIxNCwgMTUzLCAyMTUsIDIxMiwgNzUsIDI0NiwgMTEyLCAyMTUsIDIxMiwgNzUsIDE0MCwgNTIsIDI0OCwgCisgICAgMTY1LCA3NSwgOTcsIDUyLCAyNDgsIDE2NSwgNzUsIDE0MCwgMjE1LCAyMTIsIDI0OCwgMTY1LCA3NSwgOTcsIDIxNSwgMjEyLCAKKyAgICAyNDgsIDE2NSwgNzUsIDk3LCAyMTUsIDU4LCAyMTUsIDIxMiwgMjQ4LCAxNjUsIDc1LCA5NywgODAsIDIsIDI0NiwgMTI2LCAKKyAgICAyMTgsIDE0MSwgMjE0LCAxNTMsIDgwLCAyMTYsIDQzLCAxMzAsIDI0NiwgMTEyLCA4MCwgMjE2LCA0MywgMTMwLCA5NywgODAsIAorICAgIDIsIDIxNywgNzksIDIsIDY3LCA5MSwgOTcsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgCisgICAgODAsIDIsIDIxNywgNzgsIDk3LCAyMTUsIDU4LCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCA5NywgMjE1LCA1OCwgODAsIAorICAgIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDE0MCwgMjU0LCAzLCA5NywgMjU0LCAzLCAxNDAsIDUyLCAyNTQsIDMsIDk3LCAKKyAgICA1MiwgMjU0LCAzLCAxNDAsIDgwLCAyMTYsIDQzLCA4NSwgMjQ4LCAwLCA5NywgODAsIDIxNiwgNDMsIDg1LCAyNDgsIDAsIAorICAgIDE0MCwgODAsIDI0MywgMjUxLCAyNTIsIDE0OSwgMjE2LCA0MywgODUsIDI0OCwgMCwgOTcsIDgwLCAyNDMsIDI1MSwgMjUyLCAKKyAgICAxNDksIDIxNiwgNDMsIDg1LCAyNDgsIDAsIDIyOCwgNjEsIDIxMiwgOSwgMjIsIDIxOSwgMzAsIDI0NSwgMjI4LCA3NSwgCisgICAgMjI4LCA2MSwgMjQ1LCAyMjgsIDIyLCAyMTksIDMwLCAyMTIsIDksIDc1LCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyLCAxMDMsIAorICAgIDIyOCwgNjEsIDI0NSwgMjI4LCA4MCwgMiwgMTAzLCAyMTksIDMwLCAyNDUsIDIyOCwgODAsIDIsIDEwMywgMjE5LCAzMCwgCisgICAgMjEyLCA5LCA4MCwgMiwgMTAzLCAyMjgsIDYxLCAyMTIsIDksIDgwLCAyMiwgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMjgsIAorICAgIDYxLCAyNDUsIDIyOCwgODAsIDIyLCAyMTksIDMwLCAyNDUsIDIyOCwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgMjIsIAorICAgIDIxOSwgMzAsIDIxMiwgOSwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgODAsIDIyLCAyMjgsIDYxLCAyMTIsIDksIDc1LCAyMjIsIAorICAgIDIzMSwgMjQ4LCA3LCAyNDksIDEzMywgMjQ0LCAxODMsIDI0OCwgNiwgMjQ0LCAxODMsIDI0OCwgNywgMjQ5LCAxMzMsIDIyMiwgCisgICAgMjMxLCAyNDgsIDYsIDIxOSwgMzAsIDI0NSwgMjI4LCA4MCwgMjQ5LCAxMzMsIDIyOCwgNjEsIDI0NSwgMjI4LCA3NSwgMjI4LCAKKyAgICA2MSwgMjQ1LCAyMjgsIDgwLCAyNDksIDEzMywgMjE5LCAzMCwgMjQ1LCAyMjgsIDc1LCAyNDQsIDE4MywgMjQ4LCA3LCAyNDksIAorICAgIDEzMywgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMjIsIDIzMSwgMjQ4LCA3LCAyNDksIDEzMywgMjE5LCAzMCwgMjQ1LCAKKyAgICAyMjgsIDc1LCAyMjgsIDYxLCAyNDUsIDIyOCwgODAsIDI0OSwgMTMzLCAyMjgsIDYxLCAyMTIsIDksIDc1LCAyMjgsIDYxLCAKKyAgICAyMTIsIDksIDgwLCAyNDksIDEzMywgMjI4LCA2MSwgMjQ1LCAyMjgsIDc1LCAyMTIsIDM2LCA4MCwgMjI1LCAxMCwgMjQ3LCAKKyAgICAyMDMsIDIyMiwgMjU0LCA4MCwgMjI1LCAxMCwgOTcsIDIxNiwgMTg5LCAyNDksIDk4LCAyMTQsIDE1MiwgODAsIDIyNSwgMTAsIAorICAgIDk3LCAyMTYsIDE4OSwgMjQ5LCA5OCwgMjQ2LCAxMTEsIDgwLCAyMjUsIDEwLCAyNDYsIDExMiwgMjE2LCAxODksIDI0OSwgCisgICAgOTgsIDIzMywgNDMsIDgwLCAyMjUsIDEwLCAyNDYsIDExMiwgMjE2LCAxODksIDI0OSwgOTgsIDIyMiwgMjQ0LCAyMjIsIAorICAgIDI0NywgMjU0LCAzNCwgMjUwLCAxMCwgNzUsIDIzMywgNDYsIDI1NCwgMzQsIDI1NCwgOTYsIDc1LCAyMTYsIDE1LCAyNTQsIAorICAgIDM0LCAyNTQsIDk2LCA3NSwgMjUxLCAxODMsIDI1NCwgMzQsIDI1NCwgOTYsIDc1LCAyMTYsIDE1LCAyNTQsIDM0LCAyNTAsIAorICAgIDEwLCA4MCwgMiwgMjMwLCAxODYsIDIxNiwgMTUsIDI1NCwgMzQsIDI1NCwgOTYsIDgwLCAyLCAyMjUsIDI1LCAyMzIsIDExNCwgCisgICAgNDQsIDIyMCwgMTU0LCAyNTAsIDEwLCA3NSwgMjMyLCAxMTQsIDQzLCAyMjAsIDE1NCwgMjU0LCA5NiwgNzUsIDI1NCwgOTYsIAorICAgIDI1MCwgOCwgMjUwLCA0NCwgNzUsIDI1MCwgMTAsIDI1MCwgOCwgMjUwLCA0NCwgNzUsIDk3LCA4MCwgNzIsIDIxOSwgMjUzLCAKKyAgICAxNDAsIDc1LCAxNDAsIDgwLCA3MiwgMjE5LCAyNTMsIDk3LCA3NSwgMjE5LCAyNTMsIDk3LCA4MCwgNzIsIDE0MCwgNzUsIAorICAgIDk3LCA4MCwgMiwgOTYsIDUxLCAxNDAsIDgwLCAyLCA5NiwgNTEsIDk3LCA4MCwgMjE2LCAxNDAsIDIxMSwgMTc4LCA0MywgCisgICAgNDQsIDgwLCAyMTYsIDE0MCwgNCwgMjUwLCA0MywgMjE0LCAxNTMsIDIxNSwgNTgsIDgwLCAyNDMsIDI1MSwgNCwgMjUwLCAKKyAgICA0MywgNDMsIDI1MiwgMTQ3LCAxMjAsIDQ0LCAyNTIsIDE0NywgMTI0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgMTI0LCA0NCwgCisgICAgMjUyLCAxNDcsIDEyMCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0NCwgMTI0LCAyNTIsIDE0NywgNDMsIDI0MiwgNSwgMTIwLCAKKyAgICAyNTIsIDE0NywgNDMsIDEyNCwgMjUyLCAxNDcsIDQ0LCAyNDIsIDUsIDQzLCAyNTIsIDE0NywgMTIwLCA0NCwgMjUyLCAxNDcsIAorICAgIDEyMCwgMjQyLCA1LCAxMjAsIDI1MiwgMTQ3LCA0NCwgMTI0LCAyNTIsIDE0NywgNDQsIDI0MiwgNSwgNDMsIDI1MiwgMTQ3LCAKKyAgICAxMjQsIDQ0LCAyNTIsIDE0NywgMTI0LCAyNDIsIDUsIDEyMCwgMjUyLCAxNDcsIDQzLCAxMjQsIDI1MiwgMTQ3LCA0MywgCisgICAgMjQyLCA1LCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyMCwgMjE2LCA0MywgMTMwLCA5NywgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgMTIwLCAyMTYsIDQzLCAxMzAsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0NCwgMjE2LCA0MywgMTMwLCAKKyAgICAyNDYsIDExMiwgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDQsIDIxNiwgNDMsIDEzMCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCAxMjQsIDIxNiwgNDMsIDEzMCwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDEyNCwgMjE2LCA0MywgMTMwLCAyMTQsIAorICAgIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgNDMsIDIxNiwgNDMsIDEzMCwgMjQ2LCAxMTIsIDI0MiwgNiwgMiwgMjUyLCAKKyAgICAxNDcsIDQzLCAyMTYsIDQzLCAxMzAsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCAyNDMsIDI1MSwgMTMwLCA5NywgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTIwLCAyNDMsIDI1MSwgMTMwLCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgCisgICAgNDQsIDI0MywgMjUxLCAxMzAsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0NCwgMjQzLCAyNTEsIDEzMCwgMTQwLCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDI0MywgMjUxLCAxMzAsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIAorICAgIDI0MywgMjUxLCAxMzAsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCA0MywgMjQzLCAyNTEsIDEzMCwgMjQ2LCAKKyAgICAxMTIsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDQzLCAyNDMsIDI1MSwgMTMwLCAxNDAsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIAorICAgIDEyMCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDIxNCwgMTUzLCAyNDIsIDYsIDIsIDI1MiwgCisgICAgMTQ3LCA0MywgMjUyLCAzOCwgMjE0LCAxNTMsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDIyMiwgMjU0LCA5NywgMjQyLCA2LCAyLCAKKyAgICAyNTIsIDE0NywgMTIwLCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCAyNDYsIDExMiwgMjQyLCA2LCAKKyAgICAyLCAyNTIsIDE0NywgNDMsIDI1MiwgMzgsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgMTQwLCAKKyAgICAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDcyLCA5NywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjE0LCAxNjMsIDE0MCwgCisgICAgMjQyLCA2LCAyLCAyNTIsIDE0NywgMTI0LCA3MiwgOTcsIDI0MiwgNiwgMiwgMjUyLCAxNDcsIDI0NiwgMTE0LCA5NywgMjQyLCAKKyAgICA2LCAyLCAyNTIsIDE0NywgMTIwLCA3MiwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMTQsIDE2MywgOTcsIDI0MiwgNiwgCisgICAgMiwgMjUyLCAxNDcsIDEyNCwgNzIsIDE0MCwgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjQ2LCAxMTQsIDE0MCwgMjQyLCA2LCAyLCAKKyAgICAyNTIsIDE0NywgMTIwLCA3MiwgMjAwLCAyNDgsIDE2NCwgMTQwLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjQsIDI1MiwgNTEsIAorICAgIDIwMCwgMjQ4LCAxNjQsIDk3LCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAxMjAsIDcyLCAyMDAsIDI0OCwgMTY0LCA5NywgMjQyLCAKKyAgICA2LCAyLCAyNTIsIDE0NywgMTI0LCAyNTIsIDUxLCAyMDAsIDI0OCwgMTY0LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIAorICAgIDE0NywgNDMsIDI1MiwgMzgsIDI0NiwgMTEyLCAyNDIsIDYsIDIsIDI1MiwgMTQ3LCAyMjIsIDI1NCwgMjQ2LCAxMTIsIDI0MiwgCisgICAgNiwgMiwgMjUyLCAxNDcsIDQzLCAyNTIsIDM4LCAyMTQsIDE1MywgMjQyLCA2LCAyLCAyNTIsIDE0NywgMjIyLCAyNTQsIDQ0LCAKKyAgICA1MiwgODAsIDIsIDIyMiwgMTg1LCAyNDEsIDI0MiwgMjQ1LCAxMDYsIDUsIDcyLCA5NywgNzUsIDIxNiwgOTAsIDIyNiwgCisgICAgMTcyLCA3MiwgOTcsIDc1LCAxNDAsIDgwLCA3MiwgMjE2LCA5MCwgMjI2LCAxNzEsIDk3LCA4MCwgNzIsIDIxNiwgOTAsIAorICAgIDIyNiwgMTcxLCA5NywgODAsIDcyLCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIzMywgMjEsIDcyLCAxNDAsIDc1LCAxNDAsIDgwLCAKKyAgICAyMTYsIDE0MCwgMjMzLCAyMCwgMjQyLCAxMzcsIDcyLCA5NywgNzUsIDIxOCwgNjUsIDcyLCA5NywgNzUsIDE0MCwgODAsIAorICAgIDIxNiwgMTQwLCAyMTgsIDY0LCAyMTgsIDIzLCA3MiwgMTQwLCA3NSwgNDMsIDI0NCwgOTksIDIxNywgNzgsIDQ0LCAyNDQsIAorICAgIDk5LCAyMTcsIDc4LCAxMjAsIDI0NCwgOTksIDIxNywgNzgsIDEyNCwgMjQ0LCA5OSwgMjE3LCA3OCwgMjE1LCAyMTIsIDY3LCAKKyAgICAyNTIsIDE0OSwgMjQ4LCA2OCwgMjEwLCAxNjAsIDE4OSwgMjE4LCAyNDQsIDIxMCwgMTYwLCAxODksIDIxNSwgNDksIDI0OSwgCisgICAgMjM0LCA0MywgNzEsIDI0OSwgMTA3LCAxMjcsIDQ0LCA3MSwgMjQ5LCAxMDcsIDEyNywgNDMsIDcxLCAyMjYsIDcsIDQ0LCAKKyAgICA3MSwgMjI2LCA3LCAyMTAsIDE2MCwgMTg5LCA0MywgMjM2LCAyMiwgMTI3LCAyMTAsIDE2MCwgMTg5LCA0NCwgMjM2LCAyMiwgCisgICAgMTI3LCAyMTAsIDE2MCwgMTg5LCA0MywgMjUxLCAyNTAsIDEyNywgMjEwLCAxNjAsIDE4OSwgNDQsIDI1MSwgMjUwLCAxMjcsIAorICAgIDQzLCA0MiwgMjUxLCAxNjYsIDIsIDIxNCwgMTgzLCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAyMTQsIDE4MywgNDMsIDQyLCAKKyAgICAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgNywgMjE2LCAxNSwgMjQ5LCAxNjgsIDQ0LCA0MiwgMjUxLCAxNjYsIDIsIAorICAgIDIxNiwgMTE2LCAyMzYsIDcsIDI1MSwgMTgzLCAyNDksIDE2OCwgNDMsIDQyLCAyNTEsIDE2NiwgMiwgMjE2LCAxMTYsIDIzNiwgCisgICAgNywgMjUxLCAxODMsIDI0OSwgMTY4LCA0NCwgNDIsIDI1MSwgMTY2LCAyLCAyMTYsIDExNiwgMjM2LCA3LCAyMTYsIDE1LCAKKyAgICAyNDksIDE2OCwgNDMsIDI1NCwgMTE4LCAyNTEsIDE2NiwgMiwgMjQ3LCAxMjgsIDQ0LCAyNTQsIDExOCwgMjUxLCAxNjYsIDIsIAorICAgIDI0NywgMTI4LCA0MywgMjU0LCAzNCwgMjMzLCAyMSwgMTI3LCA0NCwgMjU0LCAzNCwgMjQyLCAxMzcsIDEyNywgNTIsIDQzLCAKKyAgICAyNTQsIDM0LCAyNDIsIDEzNywgMTI3LCA1MiwgNDQsIDI1NCwgMzQsIDIzMywgMjEsIDEyNywgNDMsIDg1LCAyMTYsIDcsIAorICAgIDIyMCwgNTUsIDEyNywgNDQsIDg1LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjQ2LCAxMjYsIDI0NCwgMTQzLCA2NywgMjEwLCAKKyAgICAzNSwgMjMyLCAyMTksIDIzMSwgOTMsIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjMzLCA1MiwgNDQsIDI1NCwgMTE4LCAyMTQsIAorICAgIDEyLCAyLCAyMTgsIDIzNiwgMjMxLCA5MywgNDQsIDI1NCwgMTE4LCAyLCAyNDcsIDEyOCwgMjU0LCAxMTgsIDIsIDIyMiwgCisgICAgOTQsIDIzNSwgMjIyLCAyNTUsIDEyLCAyNTQsIDExNywgMjE5LCAxLCAyNTQsIDExOCwgMjI2LCAxNzQsIDIzMywgNTIsIAorICAgIDIxOSwgMSwgMjU0LCAxMTgsIDIyNiwgMTc0LCAyMTQsIDE2MywgMjE1LCA5NCwgMjU0LCAxMTcsIDIyMywgNTIsIDI1NCwgCisgICAgMTE3LCAyNTQsIDExOCwgMiwgMjE0LCAxODMsIDIyMywgNTIsIDI1NCwgMTE4LCAyLCAyMTQsIDE4MywgMjI2LCAyNTIsIAorICAgIDI1NCwgMTE4LCAyMjYsIDE3NCwgMjE0LCAxNjMsIDIyNiwgMjUyLCAyNTQsIDExOCwgMjI2LCAxNzQsIDI0NiwgMTE0LCAKKyAgICAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTIwLCAKKyAgICAyMiwgMjIyLCAyNTQsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAKKyAgICAyMjUsIDEwLCAxMjAsIDIyLCAyMzMsIDUyLCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgCisgICAgMjM2LCA3LCA4MCwgMjI1LCAxMCwgMTI0LCAyMiwgMjIyLCAyNTQsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgCisgICAgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIDEwLCAxMjQsIDIyLCAyMzMsIDUyLCAyMzEsIDkzLCAyNTQsIDExOCwgCisgICAgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCA3LCA4MCwgMjI1LCAxMCwgNDQsIDIyLCAyMTQsIDE2MywgMjMxLCAKKyAgICA5MywgMjU0LCAxMTgsIDIsIDIwNCwgMjU0LCAxMywgMjQ1LCAxNDgsIDIzNiwgNywgODAsIDIyNSwgMTAsIDQzLCAyMiwgCisgICAgMjE0LCAxNjMsIDIzMSwgOTMsIDI1NCwgMTE4LCAyLCAyMDQsIDI1NCwgMTMsIDI0NSwgMTQ4LCAyMzYsIDcsIDgwLCAyMjUsIAorICAgIDEwLCA0NCwgMjIsIDI0NiwgMTE0LCAyMzEsIDkzLCAyNTQsIDExOCwgMiwgMjA0LCAyNTQsIDEzLCAyNDUsIDE0OCwgMjM2LCAKKyAgICA3LCA4MCwgMjI1LCAxMCwgNDMsIDIyLCAyNDYsIDExNCwgMjIzLCA1MiwgMjQ1LCAxNjAsIDIyMCwgMTI5LCAyNDUsIDE2MCwgCisgICAgMjIwLCAxMzAsIDIsIDIyNiwgMTI3LCAyNDUsIDE2MCwgMjIwLCAxMzAsIDIsIDQsIDI1MCwgNDQsIDQ4LCAyNDUsIDE2MCwgCisgICAgMjIwLCAxMzAsIDIsIDQ0LCA4MCwgNDgsIDI0NSwgMTYwLCAyMjAsIDEzMCwgMiwgNDMsIDgwLCA0OCwgMjUwLCA0NCwgMiwgCisgICAgMjAzLCAxMzAsIDM3LCA2NywgMTMwLCAzNywgMjI2LCAxMSwgMzcsIDIyMywgNTMsIDIxOSwgNDgsIDM3LCAyMjUsIDE3NCwgCisgICAgMjUwLCA0NCwgMjQ3LCAxODEsIDI1MSwgODYsIDIwMywgMjUyLCAxNDksIDIyLCAyMTYsIDE1LCAxNjMsIDI0NywgMTgxLCAKKyAgICAyNTEsIDg2LCA2NywgMTMwLCAyNTAsIDQ0LCAyLCAyMTgsIDI1LCAyMTEsIDE3OCwgMzcsIDI1NCwgOTUsIDI0NywgMTc3LCAKKyAgICA1MCwgMTIwLCA4MCwgMjE2LCAxNDAsIDI1MCwgNDMsIDM3LCA3MSwgMjUxLCAxMjEsIDM3LCAyNTEsIDEyMSwgMzcsIDIzMywgCisgICAgMjAsIDM3LCAyNDIsIDEzNiwgMjUwLCA0NCwgMiwgNCwgMjUwLCA0NCwgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCAKKyAgICAyNTAsIDQ0LCAyLCAxMTMsIDIwMywgMjE4LCA5MywgMjE2LCA0MywgMjE2LCAxOTcsIDIyMiwgMjU0LCA5MiwgMjIyLCAyMzEsIAorICAgIDI0OCwgNywgMjE5LCA5NywgOTIsIDI0NCwgMTgzLCAyNDgsIDcsIDIxOSwgOTcsIDkyLCAyNTMsIDIyNCwgOTIsIDQsIDI1MCwgCisgICAgNDMsIDkyLCAyMTgsIDIzNiwgMTEzLCAyMzUsIDcxLCAyMTgsIDIzNCwgMjE1LCAyMjcsIDIsIDU5LCA0OCwgMjE1LCAyMjcsIAorICAgIDIsIDIxNCwgMTgzLCAyMjIsIDk0LCAyMzYsIDcsIDIxNSwgMjI2LCAyMTUsIDIyNywgMiwgMjIwLCAxMzYsIDI1MywgMjE1LCAKKyAgICAyNTEsIDE4MiwgNDQsIDIxNSwgMjI3LCA3MiwgNDMsIDIxNSwgMjI2LCA0MywgMjE1LCAyMjcsIDI1MiwgMzgsIDY3LCAxMzAsIAorICAgIDY3LCAyNTIsIDE0OSwgMjUyLCAzOCwgNDQsIDIxNSwgMjI2LCAyNTEsIDE3MywgMiwgNDMsIDE2MywgMjUxLCAyMjksIDI1MSwgCisgICAgMTczLCAyLCA0NCwgMTYzLCAyNTEsIDIyOSwgODUsIDI1MSwgMTcyLCAzMCwgMiwgNDMsIDE2MywgMjUxLCAyMjksIDMwLCAyLCAKKyAgICA0NCwgMTYzLCAyNTEsIDIyOSwgNzEsIDI0MCwgMjQzLCA4NSwgMjQwLCAyNDMsIDQzLCAyMTEsIDI0NCwgMjQ0LCAxNDMsIAorICAgIDQ0LCAyMTEsIDI0NCwgMjQ0LCAxNDMsIDQzLCA1MiwgMjExLCAyNDQsIDI0NCwgMTQzLCA0NCwgNTIsIDIxMSwgMjQ0LCAKKyAgICAyNDQsIDE0MywgMjM1LCAyNTUsIDIzNSwgMjQxLCAyMTYsIDExMywgMTE1LCAyMzUsIDI0MSwgMjM1LCAyNDIsIDIyOSwgCisgICAgMTA3LCAyLCA2NywgMTMwLCAyNDYsIDEyMCwgMjMwLCA5MiwgNDIsIDIsIDI0OSwgMTg5LCAyMjYsIDEzMSwgMjM1LCAyNTMsIAorICAgIDI1MywgMjQ1LCAyMTksIDIyMSwgMjI0LCAxODMsIDI0NSwgMTA2LCA1LCAyMiwgMjE5LCA5OSwgMjI2LCAxMSwgMjQ1LCAKKyAgICAxMDYsIDUsIDIyLCAyMTksIDk5LCAyMjYsIDEyLCAyLCAyMTYsIDkwLCA0OCwgMjQwLCAxMTEsIDIxNiwgNDMsIDIyLCAyMTksIAorICAgIDk5LCAyMjYsIDExLCAyNDIsIDE5MCwgMjE4LCAxNTcsIDIxNiwgMTg2LCAyNDYsIDExMywgMjE1LCAyMjcsIDIsIDQzLCAKKyAgICAxNjMsIDI1MSwgMjI5LCAyNDYsIDExMywgMjE1LCAyMjcsIDIsIDQ0LCAxNjMsIDI1MSwgMjI5LCA4NSwgMjQ4LCAxLCAyLCAKKyAgICAxMjQsIDc1LCA4NSwgMjMyLCAxMTAsIDcxLCAyNTAsIDQ0LCAyLCAxMjQsIDc1LCA4NSwgMjUwLCA0NCwgMiwgMTI0LCA3NSwgCisgICAgMjQ1LCA5MywgNzEsIDIxOCwgMjM2LCAyNDUsIDkzLCA4NSwgMjE4LCAyMzYsIDI0NSwgOTMsIDcxLCAyNDgsIDAsIDI0NSwgCisgICAgOTMsIDg1LCAyNDgsIDAsIDI0NSwgOTMsIDcxLCAyNTAsIDQzLCAyNDUsIDkzLCA4NSwgMjUwLCA0MywgMjIyLCAxMzQsIAorICAgIDIyMywgNTMsIDIxOSwgNDksIDIyNiwgMTcxLCAyMTksIDQ5LCAyLCAyMjYsIDEyNywgMjIzLCA1MywgMjE5LCA0OSwgMiwgCisgICAgMjAzLCA5MSwgMjUyLCAxLCAyMTksIDQ4LCAyNTIsIDEsIDIyMywgNTMsIDIxOSwgNDgsIDUyLCAyMjUsIDI1LCAyMTUsIAorICAgIDIxMiwgMjI1LCAyNSwgMjMzLCA0OCwgMjQ5LCA5OSwgMjU0LCAxMTgsIDEyNywgMjIyLCAyNTAsIDI0OSwgOTksIDI1NCwgCisgICAgMTE4LCAxMjcsIDIxNiwgNzksIDIzMCwgMTg0LCAyMzAsIDI5LCAzNywgNTksIDIyNiwgMTcxLCAyMzAsIDI5LCAzNywgOTYsIAorICAgIDIyNiwgMTcxLCAyMzAsIDI5LCAzNywgMzAsIDIyNiwgMTcxLCAyMzAsIDI5LCAyMTQsIDE3NiwgMjI2LCAxNzIsIDIsIDI0NywgCisgICAgMTI4LCAyMzAsIDI5LCAyMTQsIDE3NiwgMjI2LCAxNzIsIDIsIDIyNSwgMjUsIDIzMCwgMjksIDQyLCAyMzUsIDIwNiwgMjI2LCAKKyAgICAxNzEsIDIzMCwgMjksIDQyLCAyMTQsIDE3NiwgMjI2LCAxNzEsIDExMywgMjMyLCAxNTIsIDIyLCAyMjYsIDE3MSwgMTEzLCAKKyAgICAyMzIsIDE1MiwgMTc3LCAyMjYsIDE3MSwgMjMwLCAyOSwgMzAsIDIyNiwgMTcxLCAyMzAsIDE1OSwgMTEzLCAyMTgsIDQ0LCAKKyAgICAyMTgsIDQyLCAyLCAyMzUsIDIxOCwgMjI0LCAyNywgMjM1LCAyMTksIDIyNiwgMTcxLCAyNDQsIDEwNywgMjI2LCAzLCAyMzUsIAorICAgIDIxOCwgMjM1LCAyMTksIDIsIDUyLCA5MSwgMjM1LCAyMTksIDI1MywgMTgxLCAyLCAyMTksIDk3LCAyNTAsIDQwLCAyNDMsIAorICAgIDIzMywgMjU0LCA5NiwgMjM1LCAyMTYsIDIzMiwgMjIwLCAyMzUsIDIxNywgMiwgMjIzLCAxMTgsIDIyNSwgMjQxLCAyNTQsIAorICAgIDEwLCAyMjUsIDQsIDIzMiwgMjIwLCAyMzUsIDIxNywgMiwgMjIwLCAxNTQsIDIyNSwgMjQxLCAyNTQsIDEwLCAyMjUsIDQsIAorICAgIDIzMiwgMjIwLCAyMzUsIDIxNywgMjI4LCA1NywgMjM2LCAxLCAyMTYsIDE5NywgMjI1LCA0LCAyMzUsIDIxOSwgMjU0LCAxMCwgCisgICAgMTE2LCAyMjUsIDE0LCAyMjYsIDE3MSwgMjI0LCAyMSwgMjM1LCAyMTksIDIyNiwgMTcxLCAyMzUsIDIxOSwgMiwgMTQwLCAKKyAgICA4MCwgMiwgMTAzLCAyMzUsIDIxOSwgMiwgMzAsIDUwLCAyMzUsIDIxOSwgMiwgMjM1LCAyMDUsIDIzNSwgMjE5LCAyLCAyMTQsIAorICAgIDE3NSwgMjM1LCAyMTksIDIsIDIyNiwgMTI3LCAyMzUsIDIxOSwgMiwgMjE0LCAxODMsIDIzNSwgNzIsIDIzMywgOTEsIDQzLCAKKyAgICAyMTUsIDIyNywgMjI2LCAxNzEsIDIxMCwgMTYwLCAxODksIDIyMSwgMjAzLCAyNDksIDIxNywgMjEwLCAxNjAsIDE4OSwgCisgICAgMjIxLCAyMDMsIDIyNSwgNTksIDIxMCwgMTYwLCAxODksIDIyMSwgMjAzLCAyMjQsIDE3OSwgOTYsIDUsIDIsIDQsIDI1MCwgCisgICAgNDQsIDQ4LCA5NiwgNSwgMiwgMjUwLCAzOSwgMjU1LCAyNCwgNDgsIDk2LCA1LCAyLCAyMTYsIDkwLCA0OCwgOTYsIDUsIDIsIAorICAgIDU5LCA1MSwgOTYsIDUsIDIsIDIxNiwgOTAsIDUxLCA5NiwgNSwgMiwgMjE4LCA2NiwgMTA1LCA5NiwgNSwgMiwgODUsIDIxNSwgCisgICAgMjI2LCAyMzAsIDE4NywgNSwgMiwgMjQ5LCAyMjgsIDQ4LCAyMzAsIDE4NywgNSwgMiwgNTksIDUxLCAyMzAsIDE4NywgNSwgCisgICAgMiwgMjQ0LCAxODMsIDI0NywgMTI2LCAyMzAsIDE4NywgNSwgMiwgMjIyLCAyMzEsIDI0NywgMTI2LCA5NiwgNSwgMjM2LCA3LCAKKyAgICA0MywgMTYzLCAyNTAsIDQzLCA5NiwgNSwgMjM2LCA3LCA0NCwgMTYzLCAyNTAsIDQzLCAyMTMsIDI1NCwgMTc3LCAyNDksIAorICAgIDEzOSwgMjI0LCAxODMsIDIzMCwgODksIDUsIDIsIDU5LCA0OCwgMjMwLCA4OSwgNSwgMiwgMjE0LCAxODMsIDIyMCwgMTUxLCAKKyAgICAyMjQsIDE4NCwgMiwgMjUxLCAxODMsIDI1MCwgNywgMjE5LCA3OSwgMjI0LCAxODMsIDIzMCwgODksIDUsIDIzNiwgNywgNDMsIAorICAgIDE2MywgMjUwLCA0MywgMjMwLCA4OSwgNSwgMjM2LCA3LCA0NCwgMTYzLCAyNTAsIDQzLCAzNywgMjMwLCA4OSwgNSwgMiwgCisgICAgMjUwLCAzOSwgMjU1LCAyMywgMjMwLCA4OSwgNSwgMjM2LCA3LCA1MiwgMjUwLCA0MywgMzcsIDI0NywgMTc3LCA1MCwgOTYsIAorICAgIDUsIDIzNiwgNywgMjE1LCAyMjYsIDIzMCwgMTg3LCA1LCAyMzYsIDcsIDIxNSwgMjI2LCAyMzAsIDg5LCA1LCAyMzYsIDcsIAorICAgIDIxNSwgMjI2LCAyMzUsIDIxMywgMjI0LCAxODMsIDIyMiwgMjQ1LCAyMzUsIDIxMywgMjI0LCAxODMsIDIxMCwgMTYwLCAKKyAgICAxODksIDIyMywgOTMsIDI0OSwgMjE3LCAyNTQsIDE0MiwgMTc3LCAyNDksIDE3MywgMjM1LCAyMDYsIDIsIDI0NywgMTI4LCAKKyAgICAyMTQsIDE3NiwgMiwgMjMwLCAxODcsIDUwLCAyMTQsIDE3NiwgMiwgMjI2LCAxMjcsIDIzNSwgMjA2LCAyLCAyMjYsIDEyNywgCisgICAgMjM1LCAyMDYsIDIsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMjE0LCAxNzYsIDIsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMjE0LCAKKyAgICAxNzYsIDcyLCAyMzUsIDIwNSwgMjM1LCAyMDYsIDcyLCAyMTQsIDE3NSwgMjE0LCAxNzYsIDcyLCAyNTIsIDE0OSwgNzIsIAorICAgIDIzNSwgMjA1LCAyMzUsIDIwNiwgNzIsIDI1MiwgMTQ5LCA3MiwgMjE0LCAxNzUsIDIxNCwgMTc2LCAyNTIsIDM4LCAyMiwgCisgICAgMjM1LCA3MSwgMiwgMjE0LCAxNzUsIDIzNSwgMjA2LCAyNTIsIDM4LCAyMiwgMjM1LCA3MSwgMiwgMjM1LCAyMDUsIDI1MCwgCisgICAgOCwgMjE0LCAxNzYsIDIsIDIyMCwgMTM1LCAyNTAsIDgsIDIzNSwgMjA2LCAyLCAyMjAsIDEzNSwgNTIsIDQyLCAyMzUsIAorICAgIDIwNSwgNTIsIDQyLCAyMTQsIDE3NSwgMjUwLCA4LCAyMTQsIDE3NiwgMiwgMjIwLCAxMzYsIDIyLCAyMTksIDc5LCAyMjQsIAorICAgIDE4MywgMjMyLCAxNTIsIDIyLCAyLCA1OSwgNDgsIDIzMiwgMTUyLCAxNzcsIDIsIDU5LCA0OCwgNTIsIDIzMiwgMTUyLCAKKyAgICAyNTQsIDEyNiwgNTIsIDIzMiwgMTUyLCAyMjYsIDE2MiwgMTEzLCAyMzUsIDIwNywgMjMyLCAxNTIsIDI1NCwgMTI2LCAxMTMsIAorICAgIDIzNSwgMjA3LCAyMzIsIDE1MiwgMjI2LCAxNjIsIDIxOSwgODcsIDIzMywgOTEsIDIyNiwgMTYyLCAyMTksIDg3LCAyMzMsIAorICAgIDkxLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDE3NywgMjI2LCAxMjUsIDIzMiwgMTUyLCAyNTQsIDEyNiwgMjMyLCAxNTIsIDIyLCAKKyAgICAyLCAyMzAsIDIyOSwgMjE4LCAxNDEsIDIzMiwgMTUyLCAxNzcsIDIsIDIzMCwgMjI5LCAyMTgsIDE0MSwgMjMyLCAxNTIsIAorICAgIDIyLCAyLCAyMDMsIDI0OCwgMTY0LCAyMzIsIDE1MiwgMTc3LCAyLCAyMDMsIDI0OCwgMTY0LCAyMzIsIDE1MiwgMjIsIDIsIAorICAgIDUyLCAyMjYsIDEyNywgMjMyLCAxNTIsIDIyLCAyLCAyMTQsIDE4MywgMjMyLCAxNTIsIDIyLCAyLCA1MiwgMjE0LCAxODMsIAorICAgIDQsIDIxMywgMjUxLCAyLCAyMTQsIDE4MywgMjMyLCAxNTIsIDE3NywgMiwgNTIsIDIyNiwgMTI3LCAyMzIsIDE1MiwgMTc3LCAKKyAgICAyLCA1MiwgMjE0LCAxODMsIDIxMCwgMTYwLCAxODksIDI0NywgMTM3LCAyNTQsIDg3LCAyMTAsIDE2MCwgMTg5LCAyMjMsIAorICAgIDE1MSwgMjU0LCA4NywgMjQ1LCAxMDYsIDUsIDIsIDU5LCA1MSwgMjQwLCAxMTEsIDIsIDU5LCA0OCwgMjE1LCAyMTIsIDIwMywgCisgICAgMjUyLCAxNDksIDIsIDUyLCA2NywgOTEsIDIxNSwgMjEyLCAyMDMsIDI1MiwgMTQ5LCAyLCAyMTUsIDIxMiwgNjcsIDkxLCAKKyAgICAyMTYsIDkwLCAyMjYsIDE3MiwgMiwgNTksIDQ4LCAyMTYsIDkwLCAyMjYsIDE3MiwgMiwgMjIyLCAyMzEsIDI0NywgMTI2LCAKKyAgICAyMTksIDE2NCwgMjMwLCAxODcsIDIxOSwgMTYzLCAyNDksIDIwNywgMiwgNTksIDQ4LCAyNDUsIDEwNiwgMiwgMjUzLCAyMjQsIAorICAgIDI1NCwgMTU2LCAxMjgsIDIxNiwgNDMsIDIsIDI1MCwgMzksIDI1NSwgMjMsIDI1NCwgNTYsIDEyOCwgMTc3LCAxMjgsIDExMiwgCisgICAgMjQ1LCAxMDYsIDUsIDcyLCA5NiwgNTAsIDk2LCA1LCA3MiwgMjQ1LCAxMDYsIDUwLCAyNDUsIDEwNiwgNSwgNzIsIDIxNiwgCisgICAgOTAsIDIyNiwgMTcxLCA1MiwgMjQ5LCAyMzUsIDI0NSwgMTA3LCAxMTMsIDI0OSwgMjAyLCAyNDUsIDEwNiwgMjE5LCAxNzgsIAorICAgIDEzNCwgMjQ5LCAyMDIsIDI0NSwgMTA2LCAyMTksIDE3OCwgMjQ1LCAxMDYsIDUsIDIsIDExMywgMTcwLCA3MiwgMjIsIDExMywgCisgICAgMTcwLCA1MSwgMjQ1LCAxMDIsIDIsIDI0NCwgMTksIDE3MCwgNDgsIDIzMywgMjEsIDIsIDI1MCwgNDQsIDIzNSwgMjIyLCAKKyAgICAyNDIsIDEzNywgMiwgMjUwLCA0NCwgMjM1LCAyMjIsIDIzMywgMjEsIDIsIDIyNCwgMTYsIDE2NCwgNDgsIDI0MiwgMTM3LCAKKyAgICAyLCAyMjQsIDE2LCAxNjQsIDQ4LCAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIDEyOCwgMTEyLCAyNDIsIDEzNywgMTc3LCAyMTksIAorICAgIDk5LCAxMjgsIDExMiwgMjMzLCAyMSwgMTc3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDIsIDU5LCAyMzUsIDIyMiwgMjQyLCAKKyAgICAxMzcsIDE3NywgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgMjM1LCAyMjIsIDIzMywgMjEsIDE3NywgMjE5LCA5OSwgCisgICAgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIDI0MiwgMTM3LCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAKKyAgICAyMzMsIDIxLCAxNzcsIDIxOSwgOTksIDEyOCwgMjE2LCA0MywgMiwgNTksIDcyLCAyMjIsIDI1NCwgMjQyLCAxMzcsIDE3NywgCisgICAgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNzIsIDIzMywgNTIsIDIzMywgMjEsIDE3NywgMjU0LCA1NywgMjQyLCAKKyAgICAxMzcsIDE3NywgMjU0LCA1NywgMjMzLCAyMSwgMjIsIDIxOSwgMTU1LCAyMjgsIDU3LCAxMjgsIDExMiwgMjQyLCAxMzcsIAorICAgIDIyLCAyMTksIDE1NSwgMjI4LCA1NywgMTI4LCAxMTIsIDIzMywgMjEsIDIyLCAyMjgsIDU3LCAyNTQsIDU3LCAyNDIsIDEzNywgCisgICAgMjIsIDIyOCwgNTcsIDI1NCwgNTcsIDIzMywgMjEsIDcyLCAyNDYsIDExOSwgMTI4LCA3MiwgMjQyLCAxMzYsIDI0MiwgMTM3LCAKKyAgICA3MiwgMjQ2LCAxMTksIDEyOCwgNzIsIDIzMywgMjAsIDIzMywgMjEsIDcyLCAyMTksIDE2NCwgMTc3LCAyNDUsIDEwNywgCisgICAgMjQyLCAxMzcsIDcyLCAyMTksIDE2NCwgMTc3LCAyNDUsIDEwNywgMjMzLCAyMSwgNzIsIDIxOSwgMTY0LCA3MiwgMjQyLCAKKyAgICAxMzYsIDI0MiwgMTM3LCA3MiwgMjE5LCAxNjQsIDcyLCAyMzMsIDIwLCAyMzMsIDIxLCA3MiwgMjQyLCAxMzcsIDcyLCAyNDYsIAorICAgIDExOSwgMjQ1LCAxMDcsIDI0MiwgMTM3LCA3MiwgMjMzLCAyMSwgNzIsIDI0NiwgMTE5LCAyNDUsIDEwNywgMjMzLCAyMSwgCisgICAgNzIsIDIxOSwgOTksIDEyOCwgNzIsIDI0MiwgMTM3LCA3MiwgMjE5LCA5OSwgMjQ1LCAxMDcsIDI0MiwgMTM3LCA3MiwgMjE5LCAKKyAgICA5OSwgMTI4LCA3MiwgMjMzLCAyMSwgNzIsIDIxOSwgOTksIDI0NSwgMTA3LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgCisgICAgMjMzLCAyMCwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDI0MiwgMTM2LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIAorICAgIDE3NywgMjMzLCAyMSwgMiwgNTksIDIzNSwgMjIyLCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzcsIDIsIAorICAgIDU5LCAyMzUsIDIyMiwgMjQ2LCAxMTksIDEyOCwgMjE2LCA0MywgMTc3LCAyMzMsIDIwLCAyNDYsIDExOSwgMTI4LCAyMTYsIAorICAgIDQzLCAxNzcsIDI0MiwgMTM2LCAyNDYsIDExOSwgMjE5LCA5OSwgMTI4LCAyMTYsIDQzLCAxNzcsIDIzMywgMjAsIDI0NiwgCisgICAgMTE5LCAyMTksIDk5LCAxMjgsIDIxNiwgNDMsIDE3NywgMjQyLCAxMzYsIDIxOSwgMTY0LCAxNzcsIDIzMywgMjAsIDIxOSwgCisgICAgMTY0LCAxNzcsIDI0MiwgMTM2LCAyMTksIDE2NCwgNzIsIDIzMywgMjEsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOSwgMTY0LCAKKyAgICA3MiwgMjQyLCAxMzcsIDcyLCAyNDUsIDEwNiwgNTAsIDUyLCAyMjksIDk2LCAyMzMsIDIwLCA1MiwgMjI5LCA5NiwgMjQyLCAKKyAgICAxMzYsIDUyLCAyMjksIDk2LCAyMzMsIDIxLCAyLCAyMTQsIDE4MywgMjQyLCAxMzcsIDIyNiwgMTI1LCAyMzMsIDIwLCAyNDIsIAorICAgIDEzNywgMjUyLCAzOCwgMjMzLCAyMCwgMjMzLCAyMSwgMjUwLCA4LCAyNTEsIDg2LCAyNDksIDEwMCwgMjQyLCAxMzcsIDI1MCwgCisgICAgOCwgMjUxLCA4NiwgMjQ5LCAxMDAsIDIzMywgMjEsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDEsIDcyLCAyMTksIDk5LCAKKyAgICAyNDUsIDEwNywgMjQyLCAxMzcsIDI1MCwgOCwgMjUxLCA4NiwgMjQ5LCAxMDEsIDcyLCAyMTksIDk5LCAyNDUsIDEwNywgCisgICAgMjE5LCA4MCwgMjE2LCAyMDEsIDIzMywgODksIDIxNiwgMjAxLCAyMTksIDgwLCAyMTYsIDIwMiwgMTc3LCAxMjgsIDExMiwgCisgICAgMjMzLCA4OSwgMjE2LCAyMDIsIDE3NywgMTI4LCAxMTIsIDI0NSwgMTA2LCA1LCAyLCAyNTEsIDExNiwgNDgsIDIyNCwgMjA2LCAKKyAgICA3MiwgMjE5LCAxNTUsIDI0NSwgMTA2LCA1MCwgMjE4LCA1NywgNzIsIDIxOSwgMTU1LCAyNDUsIDEwNiwgNTAsIDIyNCwgCisgICAgMjA2LCA3MiwgMjE5LCAxNTUsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMTgsIDU3LCA3MiwgMjE5LCAxNTUsIDIyOCwgNTcsIAorICAgIDEyOCwgMTEyLCAyMjQsIDIwNiwgNzIsIDI0NSwgMTA2LCA1MCwgMjE4LCA1NywgNzIsIDI0NSwgMTA2LCA1MCwgMjI0LCAKKyAgICAyMDYsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDIyOCwgNTcsIDEyOCwgMTEyLCAyMjQsIDIwNiwgNzIsIAorICAgIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCA1NywgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjI0LCAyMDYsIDcyLCAyMjgsIAorICAgIDU3LCAyNTQsIDE1NiwgMTI4LCAxMTIsIDIxOCwgNTcsIDcyLCAyMjgsIDU3LCAyNTQsIDE1NiwgMTI4LCAxMTIsIDUyLCAKKyAgICAyMjQsIDIwNSwgNTIsIDIxOCwgNTYsIDIxOCwgNjUsIDIsIDI0NywgMTI4LCAyMTgsIDIzLCAyLCAyNDcsIDEyOCwgMjE4LCAKKyAgICA2NSwgMiwgOTYsIDUsIDUxLCAyMTgsIDIzLCAyLCA5NiwgNSwgNTEsIDIxOCwgNjUsIDIsIDIzMCwgODksIDUsIDUxLCAyMTgsIAorICAgIDIzLCAyLCAyMzAsIDg5LCA1LCA1MSwgMjE4LCA2NSwgNjQsIDE3NywgMTI4LCAyMTYsIDQzLCAyLCA1OSwgNDgsIDIxOCwgCisgICAgMjMsIDY0LCAxNzcsIDEyOCwgMjE2LCA0MywgMiwgNTksIDQ4LCAyMTgsIDY1LCA2NCwgNzIsIDI0NSwgMTA2LCA1MCwgMjE4LCAKKyAgICAyMywgNjQsIDcyLCAyNDUsIDEwNiwgNTAsIDIxOCwgNjUsIDY0LCA3MiwgMjE2LCA5MCwgMjI2LCAxNzEsIDIxOCwgMjMsIAorICAgIDY0LCA3MiwgMjE2LCA5MCwgMjI2LCAxNzEsIDIxOCwgNjUsIDY0LCA3MiwgMjU0LCAxNTYsIDEyOCwgMTEyLCAyMTgsIDIzLCAKKyAgICA2NCwgNzIsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE4LCA2NSwgNjQsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgMjE4LCAyMywgCisgICAgNjQsIDcyLCAyMjgsIDU3LCAxMjgsIDExMiwgNDIsIDQzLCAyMDQsIDkzLCAyMjYsIDE3MSwgNDIsIDQ0LCAyMDQsIDkzLCAKKyAgICAyMjYsIDE3MSwgMjUwLCA4LCAyMTgsIDY0LCAyNTAsIDgsIDIxOCwgMjIsIDI1MCwgOCwgMjE4LCA2NSwgMTc3LCAxMjgsIAorICAgIDExMiwgMjUwLCA4LCAyMTgsIDIzLCAxNzcsIDEyOCwgMTEyLCAyMTgsIDY1LCA3MiwgMjE4LCAyMiwgMjE4LCAyMywgNzIsIAorICAgIDIxOCwgNjQsIDIxOCwgNjUsIDcyLCAyMTgsIDY0LCAyMTgsIDIzLCA3MiwgMjE4LCAyMiwgMjE4LCAyMywgMjUyLCAzOCwgCisgICAgMjE4LCA2NCwgMjE4LCAyMywgMjUyLCAzOCwgMjIsIDIzNSwgNzEsIDI1MSwgODYsIDI0OCwgMTY1LCAyLCAyMTgsIDY0LCAKKyAgICAyNDUsIDE3OCwgNjQsIDIyNiwgMTc0LCAyNDYsIDExMSwgMjI1LCA1MSwgMiwgMjE3LCAxMywgMjE2LCAxNCwgMjE1LCAyNDEsIAorICAgIDIzNSwgMjA1LCAyNDQsIDI5LCAyMjgsIDcwLCAyMTksIDI1MywgNDMsIDIxNywgODgsIDIxOSwgMjUzLCAxMjQsIDIxNywgCisgICAgODgsIDIxOSwgMjUzLCAxMjAsIDIxNywgODgsIDIyNSwgMTc1LCAyLCAyMjIsIDkzLCA2NywgMjUyLCAxNDksIDIxNSwgMjEyLCAKKyAgICA0NCwgMjE1LCA5MywgNTIsIDY3LCAyNTIsIDE0OSwgNDMsIDIxNSwgOTMsIDY3LCAyNTIsIDE0OSwgNTIsIDQzLCAyMTUsIAorICAgIDkzLCA1MiwgNjcsIDI1MiwgMTQ5LCA1MiwgNDMsIDIxNSwgOTMsIDIwMCwgMjQ4LCAxNjUsIDI0MywgMjUxLCA0MywgMjMxLCAKKyAgICA2OCwgNjQsIDUyLCAyMTMsIDIzOSwgMjE5LCAyNTMsIDEyNCwgMjE3LCA4OSwgMiwgMjI2LCAxMjcsIDIxOSwgMjUzLCAxMjAsIAorICAgIDIxNywgODksIDIsIDIxNCwgMTgzLCAyMTksIDI1MywgMTIwLCAyMTcsIDg5LCA3MiwgMjE5LCAyNTMsIDEyNCwgMjE3LCA4OCwgCisgICAgNTIsIDEyNCwgMjE3LCA4OCwgNTIsIDEyMCwgMjE3LCA4OCwgNTIsIDIxOCwgMTA1LCAyMjgsIDU3LCA1MCwgMjIzLCA1MiwgCisgICAgNTIsIDIxOCwgMTA1LCAyMjgsIDU3LCA1MCwgMjQ3LCAxNDYsIDIyOCwgNTcsIDI0NywgMTgzLCAyLCAyMjMsIDUyLCAyMjksIAorICAgIDEwNiwgMjE5LCA5NywgNjcsIDIzMiwgMjIwLCAyLCAyNTAsIDQ0LCA0OCwgNjcsIDIzMiwgMjIwLCAyLCAyNTAsIDQ0LCA1MSwgCisgICAgMTI0LCAyMTcsIDg5LCAyLCAyNTAsIDQ0LCA1MSwgMjI2LCAxMiwgMiwgMjAzLCA5MSwgMjI2LCAxMiwgMiwgMjE2LCA5MCwgCisgICAgMjI2LCAxNzEsIDIxNSwgMjEyLCA2NywgMjUyLCAxNDksIDI1MSwgMjUyLCAyMjMsIDk0LCAyMTUsIDIxMiwgNjcsIDI1MiwgCisgICAgMTQ5LCAyLCAyMDMsIDkxLCAyMTUsIDIxMiwgMjQ5LCAyMzUsIDIyNiwgMTcxLCAyMTUsIDIxMiwgMjI5LCA5NiwgMjMzLCAKKyAgICAyMCwgMjE1LCAyMTIsIDIyOSwgOTYsIDI0MiwgMTM2LCAyNDYsIDExOSwgMjE5LCA5OSwgMjMzLCAyMSwgMTc3LCAxMjgsIAorICAgIDExMiwgMjQ2LCAxMTksIDIxOSwgOTksIDI0MiwgMTM3LCAxNzcsIDEyOCwgMTEyLCAyMTUsIDIxMiwgMjE5LCA0OSwgMjUxLCAKKyAgICAyNTIsIDIyMywgOTQsIDIzMywgOTEsIDIxNSwgMjEyLCA2NywgMjUyLCAxNDksIDIyNiwgMTcxLCA1MiwgMjE5LCA0OSwgCisgICAgMjI2LCAxNzEsIDcxLCA2NywgMTMwLCAyMzAsIDI5LCA3MSwgNjcsIDEzMCwgMjI4LCA2MSwgMjQ1LCAyMjgsIDcxLCA3NSwgCisgICAgMjI4LCA2MSwgMjEyLCA5LCA3MSwgNzUsIDIxOSwgMzAsIDI0NSwgMjI4LCA3MSwgNzUsIDIxOSwgMzAsIDIxMiwgOSwgNzEsIAorICAgIDc1LCA0MywgNDQsIDcxLCA3NSwgMTQwLCA4NSwgNzUsIDIxNCwgMTUzLCA4NSwgNzUsIDI0NiwgMTEyLCA4NSwgNzUsIDIyOCwgCisgICAgNjEsIDI0NSwgMjI4LCA4NSwgNzUsIDIyOCwgNjEsIDIxMiwgOSwgODUsIDc1LCAyMTksIDMwLCAyNDUsIDIyOCwgODUsIDc1LCAKKyAgICAyMTksIDMwLCAyMTIsIDksIDg1LCA3NSwgNDMsIDQ0LCA4NSwgNzUsIDEyMCwgMTI0LCA4NSwgNzUsIDk3LCA4MCwgMiwgCisgICAgMjE2LCA3OCwgMjQ2LCAxMTEsIDk3LCA4MCwgMiwgMjE2LCA3OCwgMjE0LCAxNTIsIDE0MCwgODAsIDIsIDIxNiwgNzgsIAorICAgIDI0NiwgMTExLCAxNDAsIDgwLCAyLCAyMTYsIDc4LCAyMTQsIDE1MiwgNDIsIDIsIDIxNiwgMTUsIDE2MywgMjUxLCAyMjksIAorICAgIDQyLCAyLCAyNTEsIDE4MywgMTYzLCAyNTEsIDIyOSwgNDIsIDIsIDIxNCwgMTYwLCA0NCwgMjQ4LCA3LCAxNjMsIDI1MSwgCisgICAgMjI5LCA0MiwgMiwgMjMyLCAxMTQsIDQzLCAyNDgsIDcsIDE2MywgMjUxLCAyMjksIDI0OCwgMSwgMiwgNDMsIDE2MywgMjUxLCAKKyAgICAyMjksIDI0OCwgMSwgMiwgNDQsIDE2MywgMjUxLCAyMjksIDI0OCwgMSwgMiwgMjE2LCAxNSwgMTYzLCAyNTEsIDIyOSwgCisgICAgMjQ4LCAxLCAyLCAyNTEsIDE4MywgMTYzLCAyNTEsIDIyOSwgMjQ2LCAxMjYsIDIxOCwgMjM2LCA4NSwgMjMzLCA5MSwgMjE4LCAKKyAgICAyMzYsIDcxLCAyMzMsIDkxLCAyMTgsIDIzNiwgODUsIDIxMywgMTg3LCA0LCAyMTgsIDIzNiwgNzEsIDIxMywgMTg3LCA0LCAKKyAgICAyMTgsIDIzNiwgODUsIDIyNSwgMTkzLCA3MSwgMjI1LCAxOTMsIDcxLCAyNDEsIDIwMCwgODUsIDI0MSwgMjAwLCAyMDMsIAorICAgIDg1LCAyNDEsIDIwMCwgODUsIDIzMywgOTEsIDI1MCwgNDMsIDg1LCAyMzEsIDg3LCAyNDgsIDAsIDcxLCAyMzEsIDg3LCAKKyAgICAyNDgsIDAsIDg1LCAyMzEsIDg3LCAyMzIsIDExMCwgNzEsIDIzMSwgODcsIDIzMiwgMTEwLCA4NSwgNCwgMjQ4LCAwLCA4NSwgCisgICAgNCwgMjMyLCAxMTAsIDcxLCA0LCAyMzIsIDExMCwgODUsIDIwMywgMjQ1LCAxNzIsIDcxLCAyMDMsIDI0NSwgMTcyLCA4NSwgCisgICAgNjcsIDI0NSwgMTcyLCA3MSwgNjcsIDI0NSwgMTcyLCA0MywgODAsIDIsIDQsIDI1MCwgNDMsIDEzNCwgMTQwLCAyNTMsIAorICAgIDI1NSwgNDMsIDgwLCAyLCAzNywgMjI1LCAyNSwgMjAwLCAxNDAsIDIxOCwgMjMyLCA3NSwgMTQwLCAyMTUsIDU4LCA4MCwgMiwgCisgICAgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyLCA1MiwgNjcsIDkxLCAxNDAsIDIxNSwgNTgsIDgwLCAyNDMsIDI1MSwgMTMwLCAKKyAgICAxNDAsIDIxNSwgNTgsIDIxNSwgMjEyLCAyNDgsIDE2NSwgNzUsIDE0MCwgODAsIDIsIDI0NiwgMTI2LCAyMTgsIDE0MSwgCisgICAgMTQwLCA4MCwgMiwgMjE3LCA3OSwgMiwgNjcsIDkxLCAxNDAsIDgwLCAyLCAyMTcsIDc5LCAyLCA1MiwgNjcsIDkxLCAxNDAsIAorICAgIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc4LCAxNDAsIDIxNSwgNTgsIDgwLCAyLCAyMTcsIDc5LCAyLCA2NywgOTEsIDE0MCwgCisgICAgMjE1LCA1OCwgODAsIDIsIDIxNywgNzksIDIsIDUyLCA2NywgOTEsIDE0MCwgODAsIDIxNiwgMTQwLCAyMTEsIDE3OCwgMjEyLCAKKyAgICAzNiwgODAsIDIyNSwgMTAsIDI0NywgMjAzLCAyMzMsIDUyLCAyNDUsIDEwNiwgNSwgNzIsIDE0MCwgNzUsIDIyMywgNTMsIAorICAgIDIxNiwgOTAsIDIyNiwgMTcyLCA3MiwgMTQwLCA3NSwgMTQwLCA4MCwgNzIsIDIyMywgNTMsIDI1NCwgMTU2LCAxMjgsIDExMiwgCisgICAgOTcsIDgwLCAyMTYsIDE0MCwgMjQyLCAxMzYsIDk3LCA4MCwgMjE2LCAxNDAsIDIxOCwgMjIsIDE0MCwgMjI0LCAyNywgNzUsIAorICAgIDk3LCAyMjQsIDI3LCA3NSwgMjIzLCA1MywgMjE2LCA5MCwgMjI2LCAxNzIsIDcyLCA5NywgNzUsIDk3LCA4MCwgNzIsIDIyMywgCisgICAgNTMsIDI1NCwgMTU2LCAxMjgsIDExMiwgMjE2LCA5MCwgMjI2LCAxNzIsIDcyLCAxNDAsIDc1LCAxNDAsIDgwLCA3MiwgMjU0LCAKKyAgICAxNTYsIDEyOCwgMTEyLCAxNDAsIDgwLCA3MiwgMjIzLCA1MywgMjE2LCA5MCwgMjI2LCAxNzEsIDk3LCA4MCwgNzIsIDIyMywgCisgICAgNTMsIDIxNiwgOTAsIDIyNiwgMTcxLCA3MSwgMjMxLCA4NywgMjE4LCAxNTgsIDg1LCA0LCAyMTgsIDE1OCwgNzEsIDQsIAorICAgIDIxOCwgMTU4LCA4NSwgMjIyLCAyNTAsIDIyNSwgMTkzLCA3MSwgMjIyLCAyNTAsIDIyNSwgMTkzLCAxMTQsIDIzMywgOTEsIAorICAgIDI1MCwgNDMsIDExNCwgMjI2LCAxMjgsIDIsIDIyNiwgMTI4LCAyMzUsIDIyMiwgMTE0LCAyNTAsIDQ0LCAyLCAyNTAsIDQ0LCAKKyAgICAyMzUsIDIyMiwgMTE0LCAyNTAsIDQzLCAxMTQsIDM3LCAyMjIsIDAsIDE0NSwgNiwgMSwgMjUzLCAxNjcsIDE0NSwgNiwgMSwgCisgICAgMjUxLCAxMjUsIDE0NSwgNiwgMSwgMjEzLCAyNTMsIDE0NSwgNiwgMSwgMjQyLCAxOTIsIDE0NSwgNiwgMSwgMjQ3LCAxNDgsIAorICAgIDE0NSwgNiwgMSwgMjExLCAyMSwgMTQ1LCA2LCAxLCAyMTAsIDY4LCAxNDUsIDYsIDEsIDI0NiwgNDIsIDE0NSwgNiwgMSwgCisgICAgMjEwLCA5MSwgMTQ1LCA2LCAxLCAyMzUsIDE1NCwgMTQ1LCA2LCAxLCA2NSwgMjM1LCAxNTQsIDE0NSwgNiwgMSwgNzQsIAorICAgIDE0NSwgNiwgMSwgMjQ3LCAxNjgsIDE0NSwgNiwgMSwgMjM0LCAyNDYsIDE0NSwgNiwgMSwgMjMyLCAxOTIsIDE0NSwgNiwgMSwgCisgICAgMjMwLCAzNCwgMTQ1LCA2LCAxLCAyMjksIDE5NiwgMTQ1LCA2LCAxLCAyMjYsIDE4OSwgMTQ1LCA2LCAxLCAyMjUsIDcsIAorICAgIDE0NSwgNiwgMSwgMjIyLCAyMzAsIDE0NSwgNiwgMSwgMjE5LCA4NSwgMTQ1LCA2LCAxLCAyMTUsIDgxLCAxNDUsIDYsIDEsIAorICAgIDIxNCwgMjAxLCAxNDUsIDYsIDEsIDI0MywgMjU0LCAxNDUsIDYsIDEsIDI0MSwgMjA2LCAxNDUsIDYsIDEsIDIyNiwgMTM5LCAKKyAgICAxNDUsIDYsIDEsIDIyNSwgMjI0LCAxNDUsIDYsIDEsIDIxOSwgMjMwLCAxNDUsIDYsIDEsIDIxNSwgMTY4LCAxNDUsIDYsIDEsIAorICAgIDI1MCwgODMsIDE0NSwgNiwgMSwgMjIwLCAxMDQsIDE0NSwgNiwgMSwgMjExLCAyNywgMTQ1LCA2LCAxLCAyMTEsIDI5LCAKKyAgICAxNDUsIDYsIDEsIDIxMSwgNTcsIDE0NSwgNiwgMSwgMjE4LCAyNTUsIDE2MiwgMTQ1LCA2LCAxLCAyMTAsIDIxMiwgMTQ1LCAKKyAgICA2LCAxLCA0LCAyMTAsIDE4MywgMTQ1LCA2LCAxLCA0LCAyMTAsIDE4NCwgMiwgMjE3LCA3OCwgMTQ1LCA2LCAxLCAyMTAsIAorICAgIDI0NCwgMTQ1LCA2LCAxLCAyMzUsIDE5MSwgNCwgMjEwLCAxODMsIDE0NSwgNiwgMSwgMjUyLCAxLCAyMTAsIDE4MywgMTQ1LCAKKyAgICA2LCAxLCAyMzUsIDE5MSwgMjUyLCAxLCAyMTAsIDE4MywgMTQ1LCA2LCAxLCAyNDQsIDkwLCAxNDUsIDYsIDEsIDIzNSwgCisgICAgMTUyLCAxNDUsIDYsIDEsIDIxOSwgMjI5LCAxNDUsIDYsIDEsIDIxNSwgMjAzLCA2MSwgMTQ1LCA2LCAxLCAyMzMsIDgxLCAKKyAgICAyMzAsIDM0LCAxNDUsIDQsIDEsIDI1MywgMTY3LCAxNDUsIDQsIDEsIDI1MSwgMTI1LCAxNDUsIDQsIDEsIDIxMywgMjUzLCAKKyAgICAxNDUsIDQsIDEsIDI0MiwgMTkyLCAxNDUsIDQsIDEsIDI0NywgMTQ4LCAxNDUsIDQsIDEsIDIxMSwgMjEsIDE0NSwgNCwgMSwgCisgICAgMjEwLCA2OCwgMTQ1LCA0LCAxLCAyNDYsIDQyLCAxNDUsIDQsIDEsIDIxMCwgOTEsIDE0NSwgNCwgMSwgMjM1LCAxNTQsIAorICAgIDE0NSwgNCwgMSwgNjUsIDIzNSwgMTU0LCAxNDUsIDQsIDEsIDc0LCAxNDUsIDQsIDEsIDI0NywgMTY4LCAxNDUsIDQsIDEsIAorICAgIDIzNCwgMjQ2LCAxNDUsIDQsIDEsIDIzMiwgMTkyLCAxNDUsIDQsIDEsIDIzMCwgMzQsIDE0NSwgNCwgMSwgMjI5LCAxOTYsIAorICAgIDE0NSwgNCwgMSwgMjI2LCAxODksIDE0NSwgNCwgMSwgMjI1LCA3LCAxNDUsIDQsIDEsIDIyMiwgMjMwLCAxNDUsIDQsIDEsIAorICAgIDIxOSwgODUsIDE0NSwgNCwgMSwgMjE1LCA4MSwgMTQ1LCA0LCAxLCAyMTQsIDIwMSwgMTQ1LCA0LCAxLCAyNDMsIDI1NCwgCisgICAgMTQ1LCA0LCAxLCAyNDEsIDIwNiwgMTQ1LCA0LCAxLCAyMjYsIDEzOSwgMTQ1LCA0LCAxLCAyMjUsIDIyNCwgMTQ1LCA0LCAxLCAKKyAgICAyMTksIDIzMCwgMTQ1LCA0LCAxLCAyMTUsIDE2OCwgMTQ1LCA0LCAxLCAyNTAsIDgzLCAxNDUsIDQsIDEsIDIyMCwgMTA0LCAKKyAgICAxNDUsIDQsIDEsIDIxMSwgMjcsIDE0NSwgNCwgMSwgMjExLCAyOSwgMTQ1LCA0LCAxLCAyMTEsIDU3LCAxNDUsIDQsIDEsIAorICAgIDIxOCwgMjU1LCAxNjIsIDE0NSwgNCwgMSwgMjEwLCAyMTIsIDE0NSwgNCwgMSwgNCwgMjEwLCAxODMsIDE0NSwgNCwgMSwgNCwgCisgICAgMjEwLCAxODQsIDIsIDIxNywgNzgsIDE0NSwgNCwgMSwgMjEwLCAyNDQsIDE0NSwgNCwgMSwgMjM1LCAxOTEsIDQsIDIxMCwgCisgICAgMTgzLCAxNDUsIDQsIDEsIDI1MiwgMSwgMjEwLCAxODMsIDE0NSwgNCwgMSwgMjM1LCAxOTEsIDI1MiwgMSwgMjEwLCAxODMsIAorICAgIDE0NSwgNCwgMSwgMjQ0LCA5MCwgMTQ1LCA0LCAxLCAyMzUsIDE1MiwgMTQ1LCA0LCAxLCAyMTksIDIyOSwgMTQ1LCA0LCAxLCAKKyAgICAyMTUsIDIwMywgNjEsIDE0NSwgNCwgMSwgMjMzLCA4MSwgMjMwLCAzNCwgNywgNiwgMSwgMjMzLCAxNTUsIDIsIDUyLCAxMzAsIAorICAgIDcsIDQsIDEsIDIzMywgMTU1LCAyLCA1MiwgMTMwLCA3LCA2LCAxLCAyMzMsIDE1NSwgMiwgMjMwLCAyMjksIDE4NCwgNywgNiwgCisgICAgMSwgMjI2LCAxMTAsIDIsIDkxLCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgMjE3LCA3OCwgNywgNCwgMSwgMTE2LCAyLCA5MSwgCisgICAgNywgNCwgMSwgMjE3LCAxNTQsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDI0OCwgNDcsIDcsIDQsIDEsIAorICAgIDI0MiwgNjgsIDIsIDI0OCwgNDcsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDI0OCwgNDcsIDcsIDQsIDEsIDIzNSwgMzAsIDIsIAorICAgIDI0OCwgNDcsIDcsIDYsIDEsIDIxMCwgMTYwLCAyLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMTAsIDE2MCwgMiwgMjQ4LCA0NywgNywgCisgICAgNiwgMSwgMjU0LCAxNTEsIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDEwMywgNywgNiwgMSwgMjE1LCA5NCwgNjEsIDcsIDYsIDEsIAorICAgIDIxNSwgOTQsIDI1NCwgMTUxLCA3LCA0LCAxLCAyMTQsIDEwNiwgMiwgNDQsIDEwMywgNywgNiwgMSwgMjEyLCA5OSwgMiwgCisgICAgMTAzLCA3LCA0LCAxLCAyMTIsIDk5LCAyLCAxMDMsIDcsIDQsIDEsIDIxNCwgMTA2LCAyLCAyNDksIDEwOCwgNywgNiwgMSwgCisgICAgMTYzLCAyNDIsIDY3LCA3LCA0LCAxLCAxNjMsIDI0MiwgNjcsIDcsIDQsIDEsIDIxNywgNzYsIDIyNSwgMTM2LCA3LCA0LCAxLCAKKyAgICAxNjAsIDIsIDIyOCwgNTUsIDcsIDQsIDEsIDIxNSwgOTQsIDIyMywgMjI3LCAyLCAyMTcsIDc4LCA3LCA0LCAxLCAxNDQsIDIsIAorICAgIDEyMSwgMjIyLCAyMzcsIDIzNSwgMjIyLCA3LCAxLCA0LCA2LCAyMTUsIDk0LCA3NiwgNywgMjE4LCA2NiwgNCwgMSwgMjM1LCAKKyAgICAxNTAsIDU4LCAxLCA2LCAyMTQsIDEwNSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjE3LCAyNTEsIDIxNywgNzgsIDcsIDYsIDEsIAorICAgIDIxMCwgMTYwLCAyLCAyMTcsIDI1MSwgMjE3LCA3OCwgODEsIDYsIDEsIDI1NCwgMTczLCA4MSwgNCwgMSwgMjU0LCAxNzMsIAorICAgIDgxLCA2LCAxLCAyMTMsIDE3MywgODEsIDQsIDEsIDIxMywgMTczLCA4MSwgNiwgMSwgMjQzLCAxMTQsIDgxLCA0LCAxLCAKKyAgICAyNDMsIDExNCwgODEsIDYsIDEsIDI0OCwgMTk5LCA4MSwgNCwgMSwgMjQ4LCAxOTksIDgxLCA2LCAxLCAyNDUsIDIwMiwgODEsIAorICAgIDQsIDEsIDI0NSwgMjAyLCA4MSwgNiwgMSwgMjE5LCAzNSwgODEsIDQsIDEsIDIxOSwgMzUsIDgxLCA2LCAxLCAyMTAsIDEwMSwgCisgICAgODEsIDQsIDEsIDIxMCwgMTAxLCA4MSwgNiwgMSwgMjQxLCAyNTUsIDgxLCA0LCAxLCAyNDEsIDI1NSwgODEsIDYsIDEsIAorICAgIDIxNiwgMTc4LCA4MSwgNCwgMSwgMjE2LCAxNzgsIDgxLCA2LCAxLCAyNDAsIDEyMywgODEsIDQsIDEsIDI0MCwgMTIzLCA4MSwgCisgICAgNiwgMSwgMjM0LCAyMzMsIDgxLCA0LCAxLCAyMzQsIDIzMywgODEsIDYsIDEsIDIzMywgNzgsIDgxLCA0LCAxLCAyMzMsIDc4LCAKKyAgICA4MSwgNiwgMSwgMjMwLCAyMzUsIDgxLCA0LCAxLCAyMzAsIDIzNSwgODEsIDYsIDEsIDIyOCwgMjM4LCA4MSwgNCwgMSwgCisgICAgMjI4LCAyMzgsIDgxLCA2LCAxLCAyMzMsIDIzOSwgODEsIDQsIDEsIDIzMywgMjM5LCA4MSwgNiwgMSwgNzgsIDgxLCA0LCAxLCAKKyAgICA3OCwgODEsIDYsIDEsIDIyNSwgMTExLCA4MSwgNCwgMSwgMjI1LCAxMTEsIDgxLCA2LCAxLCAyMjIsIDIxMywgODEsIDQsIDEsIAorICAgIDIyMiwgMjEzLCA4MSwgNiwgMSwgMjE5LCAxNjcsIDgxLCA0LCAxLCAyMTksIDE2NywgODEsIDYsIDEsIDIxNywgNDIsIDgxLCAKKyAgICA0LCAxLCAyMTcsIDQyLCA4MSwgNiwgMSwgMjE0LCAyMjksIDgxLCA0LCAxLCAyMTQsIDIyOSwgODEsIDYsIDEsIDI0NCwgCisgICAgMTI5LCA4MSwgNCwgMSwgMjQ0LCAxMjksIDgxLCA2LCAxLCAyMzQsIDExOCwgODEsIDQsIDEsIDIzNCwgMTE4LCA4MSwgNiwgCisgICAgMSwgMjI0LCAxNjQsIDgxLCA0LCAxLCAyMjQsIDE2NCwgODEsIDYsIDEsIDIyNiwgMTgyLCA4MSwgNCwgMSwgMjI2LCAxODIsIAorICAgIDgxLCA2LCAxLCAyNDgsIDUsIDI1NCwgMTc5LCA4MSwgNCwgMSwgMjQ4LCA1LCAyNTQsIDE3OSwgODEsIDYsIDEsIDU1LCA4MSwgCisgICAgMjU0LCAyMDUsIDgxLCA0LCAxLCA1NSwgODEsIDI1NCwgMjA1LCA4MSwgNiwgMSwgMjQ5LCAxMjMsIDI0NSwgMjAyLCA4MSwgCisgICAgNCwgMSwgMjQ5LCAxMjMsIDI0NSwgMjAyLCA4MSwgNiwgMSwgMjQ4LCA1LCAyMzQsIDIzMywgODEsIDQsIDEsIDI0OCwgNSwgCisgICAgMjM0LCAyMzMsIDgxLCA2LCAxLCAyNDgsIDUsIDIyOCwgMjM4LCA4MSwgNCwgMSwgMjQ4LCA1LCAyMjgsIDIzOCwgODEsIDYsIAorICAgIDEsIDI0OSwgMTIzLCAyMjgsIDIzOCwgODEsIDQsIDEsIDI0OSwgMTIzLCAyMjgsIDIzOCwgODEsIDYsIDEsIDU1LCA4MSwgCisgICAgMjI2LCAxODIsIDgxLCA0LCAxLCA1NSwgODEsIDIyNiwgMTgyLCA4MSwgNiwgMSwgMjIxLCAyNDgsIDgxLCA0LCAxLCAyMjEsIAorICAgIDI0OCwgODEsIDYsIDEsIDI0OSwgMTM2LCAyMjAsIDU3LCA4MSwgNCwgMSwgMjQ5LCAxMzYsIDIyMCwgNTcsIDgxLCA2LCAxLCAKKyAgICA1NSwgODEsIDIyMCwgNTcsIDgxLCA0LCAxLCA1NSwgODEsIDIyMCwgNTcsIDgxLCA2LCAxLCA1NSwgODEsIDI0NSwgODMsIAorICAgIDgxLCA0LCAxLCA1NSwgODEsIDI0NSwgODMsIDgxLCA2LCAxLCAyNTQsIDE5MSwgMjM0LCAxMjMsIDgxLCA0LCAxLCAyNTQsIAorICAgIDE5MSwgMjM0LCAxMjMsIDgxLCA2LCAxLCAyNDgsIDUsIDI0MSwgNTIsIDgxLCA0LCAxLCAyNDgsIDUsIDI0MSwgNTIsIDgxLCAKKyAgICA2LCAxLCA1NSwgODEsIDI0MSwgNTIsIDgxLCA0LCAxLCA1NSwgODEsIDI0MSwgNTIsIDgxLCA2LCAxLCA1NSwgODEsIDE2MiwgCisgICAgODEsIDQsIDEsIDU1LCA4MSwgMTYyLCA4MSwgNiwgMSwgMjMzLCAxNTQsIDE2MiwgODEsIDQsIDEsIDIzMywgMTU0LCAxNjIsIAorICAgIDgxLCA2LCAxLCA1NSwgODEsIDI0MSwgMjI0LCA4MSwgNCwgMSwgNTUsIDgxLCAyNDEsIDIyNCwgODEsIDYsIDEsIDU1LCA4MSwgCisgICAgMjQyLCAyLCA4MSwgNCwgMSwgNTUsIDgxLCAyNDIsIDIsIDgxLCA2LCAxLCA1NSwgODEsIDI0MywgMTA5LCA4MSwgNCwgMSwgCisgICAgNTUsIDgxLCAyNDMsIDEwOSwgODEsIDYsIDEsIDU1LCA4MSwgMjQ3LCAxNzEsIDgxLCA0LCAxLCA1NSwgODEsIDI0NywgMTcxLCAKKyAgICA4MSwgNiwgMSwgNTUsIDgxLCAyMjAsIDI0LCA4MSwgNCwgMSwgNTUsIDgxLCAyMjAsIDI0LCA4MSwgNiwgMSwgNTUsIDIyNywgCisgICAgMjEyLCAyMjAsIDI0LCA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMjAsIDI0LCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAKKyAgICAyMjksIDMyLCA4MSwgNCwgMSwgNTUsIDIyNywgMjEyLCAyMjksIDMyLCA4MSwgNiwgMSwgNTUsIDIyNywgMjEyLCAyMjcsIAorICAgIDE1MiwgODEsIDQsIDEsIDU1LCAyMjcsIDIxMiwgMjI3LCAxNTIsIDgxLCA2LCAxLCA1NSwgMjI3LCAyMTIsIDIxMiwgMzcsIAorICAgIDgxLCA0LCAxLCA1NSwgMjI3LCAyMTIsIDIxMiwgMzcsIDgxLCAxNiwgMjM0LCAyNTIsIDgxLCAxNiwgMjMwLCAyMzYsIDIyMiwgCisgICAgMjEzLCA4MSwgMTYsIDIyNSwgMTEyLCAyMjIsIDIxMywgODEsIDE2LCAyMTgsIDE0OSwgODEsIDE2LCAyMTcsIDQzLCAyMjIsIAorICAgIDIxMywgODEsIDE2LCAyMzQsIDExOSwgMjIyLCAyMTMsIDgxLCAxNiwgMjIwLCAyNSwgMjE5LCAxNjcsIDgxLCA2LCAxLCAKKyAgICAyNDksIDEyMywgMjIwLCA1NywgODEsIDQsIDEsIDI0OSwgMTIzLCAyMjAsIDU3LCA4MSwgNiwgMSwgMjQ5LCAxMjMsIDI0MywgCisgICAgMTA5LCA4MSwgNCwgMSwgMjQ5LCAxMjMsIDI0MywgMTA5LCA4MSwgMzgsIDIyOCwgMjM5LCA0OCwgODEsIDM4LCAyMTgsIAorICAgIDI0OSwgMjUzLCAyMzIsIDgxLCAzOCwgMjE4LCAyNDksIDIzMywgMjcsIDgxLCA2LCAxLCAyNTEsIDIwNywgMjM0LCAxMjMsIAorICAgIDgxLCA0LCAxLCAyNTEsIDIwNywgMjM0LCAxMjMsIDgxLCA1NSwgMjI3LCAyMTIsIDI0MywgMjM2LCAyMTgsIDEzMSwgODEsIAorICAgIDU1LCAyMjcsIDIxMiwgMjQ3LCAyMDUsIDIyNCwgMTYsIDc5LCA4MSwgNTUsIDIyNywgMjEyLCAyMzUsIDI0NCwgMjI0LCAxNiwgCisgICAgNzksIDgxLCA1NSwgMjI3LCAyMTIsIDIxMywgMjQxLCAyNDcsIDE4MCwgODEsIDI0NCwgMTAsIDEyMywgMjQyLCAzNCwgODEsIAorICAgIDI0MywgMjM2LCAyMTgsIDEzMSwgODEsIDIzMCwgMTI5LCAyNDcsIDE4MCwgOTgsIDQsIDEsIDI1NCwgMTMxLCA5OCwgNCwgMSwgCisgICAgMjUyLCAxNjAsIDk4LCA0LCAxLCAyNDMsIDExMywgOTgsIDQsIDEsIDI0NywgMTM2LCA5OCwgNCwgMSwgMjQ1LCAxNTgsIDk4LCAKKyAgICA0LCAxLCAyMTMsIDE2MCwgOTgsIDQsIDEsIDIxMCwgODksIDk4LCA0LCAxLCAyMTcsIDYxLCA5OCwgNCwgMSwgMjM2LCA2LCAKKyAgICA5OCwgNCwgMSwgMjM0LCAyNDAsIDk4LCA0LCAxLCAyMzMsIDg3LCA5OCwgNCwgMSwgMjMxLCAxOTAsIDk4LCA0LCAxLCAyMjksIAorICAgIDIwMCwgOTgsIDQsIDEsIDIyNiwgMjAwLCA5OCwgNCwgMSwgMjI2LCAyMSwgOTgsIDQsIDEsIDIxMCwgNzgsIDk4LCA0LCAxLCAKKyAgICAyMjMsIDE3NCwgOTgsIDQsIDEsIDIyMSwgMjQ1LCA5OCwgNCwgMSwgMjE3LCA1MSwgOTgsIDQsIDEsIDIxNCwgMTkwLCA5OCwgCisgICAgNCwgMSwgMjI1LCAxNDMsIDk4LCA0LCAxLCAyMzQsIDEyNywgOTgsIDQsIDEsIDI0MiwgMjQ4LCA5OCwgNCwgMSwgMjI0LCAKKyAgICA3NiwgOTgsIDQsIDEsIDIyMCwgMjIsIDk4LCA0LCAxLCAyNTAsIDEwNSwgOTgsIDQsIDEsIDI1MSwgMTUsIDk4LCA0LCAxLCAKKyAgICAyMzUsIDEwNiwgOTgsIDQsIDEsIDI1MCwgNDgsIDk4LCA0LCAxLCAyNTAsIDE1MSwgOTgsIDQsIDEsIDIxMSwgMTYzLCA5OCwgCisgICAgNCwgMSwgMjM1LCAxMTcsIDk4LCA0LCAxLCAyNDIsIDUwLCA5OCwgNCwgMSwgMjQxLCAyNDUsIDk4LCA0LCAxLCAyNDEsIAorICAgIDE4MiwgOTgsIDQsIDEsIDIxMiwgMjIsIDk4LCA0LCAxLCAyNDIsIDExLCA5OCwgNCwgMSwgMjQxLCA3MiwgOTgsIDQsIDEsIAorICAgIDIxMCwgMjQ2LCA5OCwgNCwgMSwgMjU0LCAyNDEsIDIxNiwgMTA5LCAxLCAxOTIsIDIxNiwgMTA5LCAxLCAyMTEsIDk5LCAKKyAgICAyMTYsIDEwOSwgMSwgMjExLCA5OCwgMjE2LCAxMDksIDEsIDIxMSwgODgsIDIxNiwgMTA5LCAxLCAyMTEsIDg2LCAyMTYsIAorICAgIDEwOSwgMSwgMjUyLCA0MCwgMjU1LCAyNSwgMjExLCA4MSwgMjE2LCAxMDksIDEsIDIxMSwgODEsIDIxNiwgMTA5LCAxLCAKKyAgICAyMTEsIDk2LCAyMTYsIDEwOSwgMSwgMjExLCA5MywgMjE2LCAxMDksIDEsIDIxMSwgOTUsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDk0LCAyMTYsIDEwOSwgMSwgMjExLCAxMiwgMjE2LCAxMDksIDEsIDIxMSwgOTAsIDIxNiwgMTA5LCAxLCAyMTEsIDc5LCAKKyAgICAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgNzksIDIxNiwgMTA5LCAxLCAyMTEsIDc2LCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA4NCwgMjE2LCAxMDksIDEsIDI1MiwgNDAsIDI1NSwgMjUsIDIxMSwgODQsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCAKKyAgICA4NCwgMjE2LCAxMDksIDEsIDIxMSwgODMsIDIxNiwgMTA5LCAxLCAyMTEsIDEwMywgMjE2LCAxMDksIDEsIDIxMSwgNzcsIAorICAgIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA3NywgMjE2LCAxMDksIDEsIDIxMSwgNjYsIDIxNiwgMTA5LCAxLCAyMTUsIAorICAgIDExNiwgMjExLCA2NiwgMjE2LCAxMDksIDEsIDIxMSwgOCwgMjE2LCAxMDksIDEsIDIxMSwgNDksIDIxNiwgMTA5LCAxLCAKKyAgICAyNTQsIDIxNiwgMjExLCA0OSwgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDQ5LCAyMTYsIDEwOSwgMSwgMjExLCA3NSwgCisgICAgMjE2LCAxMDksIDEsIDIxMSwgNzQsIDIxNiwgMTA5LCAxLCAyMTEsIDcxLCAyMTYsIDEwOSwgMSwgMjE1LCAxMTYsIDIxMSwgCisgICAgODUsIDIxNiwgMTA5LCAxLCAyMTUsIDExNiwgMjExLCA2OSwgMjE2LCAxMDksIDEsIDIxMSwgNjcsIDIxNiwgMTA5LCAxLCAKKyAgICAyMTAsIDIxMiwgMjE2LCAxMDksIDEsIDIxMSwgNjQsIDIxNiwgMTA5LCAxLCAyMTEsIDYzLCAyMTYsIDEwOSwgMSwgMjExLCAKKyAgICA4NywgMjE2LCAxMDksIDEsIDIxNSwgMTE2LCAyMTEsIDg3LCAyMTYsIDEwOSwgMSwgMjUzLCAxNzEsIDIxMSwgODcsIDIxNiwgCisgICAgMTA5LCAxLCAyMTEsIDYyLCAyMTYsIDEwOSwgMSwgMjExLCA2MCwgMjE2LCAxMDksIDEsIDIxMSwgNjEsIDIxNiwgMTA5LCAxLCAKKyAgICAyMTEsIDU5LCAyMTYsIDEwOSwgMSwgMjExLCA1OCwgMjE2LCAxMDksIDEsIDIxMSwgOTcsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDU2LCAyMTYsIDEwOSwgMSwgMjExLCA1NCwgMjE2LCAxMDksIDEsIDIxMSwgNTMsIDIxNiwgMTA5LCAxLCAyMTEsIDUyLCAKKyAgICAyMTYsIDEwOSwgMSwgMjExLCA1MCwgMjE2LCAxMDksIDEsIDIxNywgMzUsIDIxMSwgNTAsIDIxNiwgMTA5LCAxLCAyMTEsIAorICAgIDQ4LCAyMTYsIDEwOSwgMSwgMjExLCA0NywgMjE2LCAxMDksIDEsIDIxMCwgMjQ0LCAyMTYsIDEwOSwgNTgsIDEsIDIzMywgCisgICAgMTMyLCA3OSwgMjE2LCAxMDksIDIyMCwgMTQwLCA3OSwgMjE2LCAxMDksIDExNywgMjM1LCA2OSwgMjksIDMsIDIzMiwgMTYxLCAKKyAgICAyOSwgMywgMjMwLCAxNjUsIDI5LCAzLCAyMjIsIDIxMSwgMjksIDMsIDIxOSwgNTksIDI5LCAzLCAyMjAsIDgsIDI5LCAzLCAKKyAgICAyNTEsIDIxMiwgMjksIDMsIDIxNiwgNDIsIDI5LCAzLCAyNDksIDI0NSwgMjksIDMsIDIyOCwgNzcsIDI5LCAzLCAyMjcsIAorICAgIDEzNywgMjksIDMsIDI0MiwgMTg3LCAyMjcsIDQsIDI5LCAzLCAyMTAsIDIyLCAyOSwgMywgMjQ3LCAxNTEsIDI5LCAzLCAKKyAgICAyNDgsIDExMiwgMjksIDMsIDIzNSwgNzMsIDI5LCAzLCAyMTYsIDE1NiwgMjksIDMsIDI1MCwgOTMsIDI5LCAzLCAyMjUsIAorICAgIDEyMywgMjksIDMsIDIyNSwgMTgsIDI5LCAzLCAyNDMsIDYsIDI5LCAzLCAyNDMsIDIsIDI5LCAzLCAyNDMsIDMsIDI5LCAzLCAKKyAgICAyNDMsIDQsIDI5LCAzLCAyMTgsIDIyNSwgMjksIDMsIDIxOCwgMTgxLCAyOSwgMywgMjE4LCAxOTQsIDI5LCAzLCAyMTgsIAorICAgIDIyNCwgMjksIDMsIDIxOCwgMTk4LCAyOSwgMywgMjE4LCAxOTksIDI5LCAzLCAyMTgsIDE4NiwgMjksIDMsIDI1MCwgMjIxLCAKKyAgICAyOSwgMywgMjUwLCAyMDAsIDI5LCAzLCAyNTAsIDIwMiwgMjksIDMsIDI1MCwgMjIwLCAyOSwgMywgMjUwLCAyMTgsIDI5LCAKKyAgICAzLCAyNTAsIDIxOSwgMjksIDMsIDI1MCwgMjAxLCAyOSwgMywgMjA5LCAyNDMsIDI5LCAzLCAyMDksIDIyMSwgMjksIDMsIAorICAgIDIwOSwgMjM0LCAyOSwgMywgMjA5LCAyNDIsIDI5LCAzLCAyMDksIDIzNywgMjksIDMsIDIwOSwgMjM4LCAyOSwgMywgMjA5LCAKKyAgICAyMjYsIDI5LCAzLCAyNTAsIDIxNiwgMjksIDMsIDI1MCwgMjAzLCAyOSwgMywgMjUwLCAyMDUsIDI5LCAzLCAyNTAsIDIxNSwgCisgICAgMjksIDMsIDI1MCwgMjEzLCAyOSwgMywgMjUwLCAyMTQsIDI5LCAzLCAyNTAsIDIwNCwgMjksIDMsIDIyMywgMjM5LCAyOSwgCisgICAgMywgMjIzLCAyMjksIDI5LCAzLCAyMjMsIDIzNSwgMjksIDMsIDIyMywgMjM4LCAyOSwgMywgMjIzLCAyMzYsIDI5LCAzLCAKKyAgICAyMjMsIDIzNywgMjksIDMsIDIyMywgMjM0LCAyOSwgMywgMjMzLCAxNjUsIDI5LCAzLCAyMzMsIDE1NywgMjksIDMsIDIzMywgCisgICAgMTYwLCAyOSwgMywgMjMzLCAxNjQsIDI5LCAzLCAyMzMsIDE2MSwgMjksIDMsIDIzMywgMTYyLCAyOSwgMywgMjMzLCAxNTgsIAorICAgIDI5LCAzLCAyMTEsIDEzMCwgMjksIDMsIDIxMSwgMTIwLCAyOSwgMywgMjExLCAxMjYsIDI5LCAzLCAyMTEsIDEyOSwgMjksIAorICAgIDMsIDIxMSwgMTI3LCAyOSwgMywgMjExLCAxMjgsIDI5LCAzLCAyMTEsIDEyNSwgMjksIDMsIDI0MiwgNzgsIDI5LCAzLCAKKyAgICAyNDIsIDY5LCAyOSwgMywgMjQyLCA3MiwgMjksIDMsIDI0MiwgNzcsIDI5LCAzLCAyNDIsIDc0LCAyOSwgMywgMjQyLCA3NSwgCisgICAgMjksIDMsIDI0MiwgNzEsIDM4LCAzMywgMSwgMjUyLCA4MywgMzgsIDMzLCAxLCAyMTMsIDI1NSwgMzgsIDMzLCAxLCAyNDIsIAorICAgIDI0MywgMzgsIDMzLCAxLCAyNDgsIDk4LCAzOCwgMzMsIDEsIDIxMCwgNzQsIDM4LCAzMywgMSwgMjEwLCA5NCwgMzgsIDMzLCAKKyAgICAxLCAxNzYsIDM4LCAzMywgMSwgMjQ1LCAxODIsIDM4LCAzMywgMSwgMjQ1LCAxNjcsIDM4LCAzMywgMSwgMjQ1LCAxNTgsIAorICAgIDM4LCAzMywgMSwgNzgsIDM4LCAzMywgMSwgMjI1LCAyMjQsIDM4LCAzMywgMSwgMjQ1LCAxMDAsIDM4LCAzMywgMSwgMjQ1LCAKKyAgICA5MCwgMzgsIDMzLCAxLCAyMTcsIDIzLCAzOCwgMzMsIDEsIDE2MiwgMzgsIDMzLCAxLCAyMTUsIDE3OSwgMzgsIDMzLCAxLCAKKyAgICAyNTAsIDEzOSwgMzgsIDMzLCAxLCAyMjAsIDEwNCwgMzgsIDMzLCAxLCAyMjAsIDY3LCAzOCwgMzMsIDEsIDI0NCwgOTAsIAorICAgIDM4LCAzMywgMSwgMjQ1LCA4OSwgMzgsIDMzLCAxLCA2MSwgMzgsIDMzLCAxLCAyMzYsIDY3LCAzOCwgMzMsIDEsIDI0NywgCisgICAgMTY5LCAzOCwgMzMsIDEsIDIzMCwgMTQ1LCAyMTQsIDIwNSwgMzgsIDMzLCAxLCAyMTEsIDU5LCAzOCwgMzMsIDEsIDIxMCwgCisgICAgMjEyLCAzOCwgMzMsIDEsIDIzNSwgMTkwLCA2MSwgMzgsIDMzLCAxLCAyMzIsIDE5OCwgMjEwLCAxODMsIDM4LCAzMywgMSwgCisgICAgMjUyLCAxLCAyMTAsIDE4MywgMzgsIDMzLCAxLCAyMzUsIDE5MCwgMjUyLCAxLCAyMTAsIDE4MywgNDQsIDI1NCwgMTE4LCAKKyAgICAyMTgsIDYxLCAyMzEsIDE1OSwgNDQsIDI1NCwgMTE4LCAyNDYsIDEyNiwgMjE4LCA2MSwgMjMxLCAxNTksIDQzLCAyMTgsIAorICAgIDYxLCAxMjcsIDQ0LCAyMTgsIDYxLCAxMjcsIDQzLCAyNDYsIDEyNiwgMjE4LCA2MSwgMTI3LCA0NCwgMjQ2LCAxMjYsIDIxOCwgCisgICAgNjEsIDEyNywgMjIzLCAxNjAsIDIzNSwgMjA5LCAyMzEsIDE1OSwgMjIzLCAxNjAsIDI0NiwgMTI2LCAyMzUsIDIwOSwgMjMxLCAKKyAgICAxNTksIDI0NiwgMTI2LCAyMTUsIDI0MiwgMjMxLCAxNTksIDQzLCAyMTUsIDI0MiwgMTI3LCA0NCwgMjE1LCAyNDIsIDEyNywgCisgICAgMjIzLCAxNjAsIDIxOCwgMjM2LCA0MywgMjIzLCAxNjAsIDIyNiwgMjAyLCAxMjcsIDQ0LCAyMjMsIDE2MCwgMjI2LCAyMDIsIAorICAgIDEyNywgMjQ1LCAyMTgsIDI0OSwgMTY2LCAyMjYsIDE3LCAyNDQsIDMwLCAyMjYsIDE3LCAyMjMsIDUyLCAyNDQsIDMwLCAKKyAgICAyMjYsIDE3LCAyNDAsIDE3MiwgMjQ2LCAxMjYsIDIyNiwgMjU1LCAyNDYsIDExMiwgMjU0LCAxMjcsIDIxNCwgMTUzLCAyNTQsIAorICAgIDEyNywgMjQ2LCAxMjYsIDIyMiwgMjUwLCAyNTQsIDExNywgNTIsIDIyNiwgMjUyLCAyNDAsIDE3NSwgMjM1LCAyMDAsIDIzNSwgCisgICAgMjA4LCAyMjYsIDYzLCAyNTEsIDE2MiwgMjQwLCAxNzYsIDIsIDI0OCwgOSwgMjE2LCA5MCwgMiwgMjIyLCAyMzcsIDQ4LCAKKyAgICA0MywgMTIxLCAyMjYsIDksIDEyNywgNDQsIDEyMSwgMjI2LCA5LCAxMjcsIDIxNiwgOTAsIDIsIDU5LCA0OCwgMjE2LCA5MCwgCisgICAgMiwgNTksIDUxLCA0MywgNjcsIDI1MiwgMTQ5LCAyLCAyMjQsIDEwLCA0NCwgNjcsIDI1MiwgMTQ5LCAyLCAyMjQsIDEwLCAKKyAgICAyMTYsIDE1LCA0MywgMTYzLCAxMjcsIDIxNiwgMTUsIDQ0LCAxNjMsIDEyNywgMjUxLCAxODMsIDQzLCAxNjMsIDEyNywgCisgICAgMjUxLCAxODMsIDQ0LCAxNjMsIDEyNywgNDMsIDIxOSwgMTg5LCAxMDQsIDEyNywgNDQsIDIxOSwgMTg5LCAxMDQsIDEyNywgCisgICAgNDMsIDUyLCAyMjYsIDcsIDQ0LCA1MiwgMjI2LCA3LCAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMTIzLCAKKyAgICA1OSwgMTE1LCAxMTMsIDE3MCwgMjI0LCAxNDMsIDkyLCAyNDQsIDE5LCA1OSwgMjI0LCAxNDMsIDI0NCwgODksIDU5LCA3OSwgCisgICAgMjIzLCA1MiwgMjI0LCAxNiwgNzksIDY3LCAxODQsIDIyMiwgMjM3LCAyMjUsIDEzLCAyMTEsIDIwOSwgMjIwLCAxNDAsIAorICAgIDIzMCwgMjI5LCAyNDcsIDEyOCwgMjE1LCA5NCwgMjQ5LCAyMjcsIDIyMywgMTYwLCAyNDcsIDEyOCwgMjIzLCAxNjAsIDI0OSwgCisgICAgMjI3LCAyMTUsIDk0LCAyMjAsIDE1MiwgMjQ4LCAyMTQsIDIsIDQzLCAyNDIsIDExNSwgMjQ4LCAyMTQsIDIsIDQ0LCAyNDIsIAorICAgIDExNSwgMjE1LCA5NCwgMjQ4LCAyMTMsIDIxNiwgMTUsIDE2MywgMjIxLCAxNzUsIDUwLCAyMTUsIDU5LCAyNDgsIDE2NCwgCisgICAgMjE2LCAxNDQsIDI0OCwgMTY0LCAxMCwgMzQsIDIyMywgNzksIDEwLCAzNCwgMjUwLCAxOCwgMTAsIDM0LCAyMjEsIDE3OCwgCisgICAgMTExLCAxMCwgMzQsIDIyMSwgMTc4LCAxMDUsIDEwLCAzNCwgMjIxLCAxNzgsIDE1OCwgMTAsIDM0LCAyMjUsIDE3MCwgMTAsIAorICAgIDM0LCAyNTEsIDE3MSwgMTAsIDM0LCAyMTcsIDkzLCAxMCwgMzQsIDIzNCwgMzksIDExMSwgMTAsIDM0LCAyMzQsIDM5LCAKKyAgICAxMDUsIDEwLCAzNCwgMjQ3LCAxNzgsIDEwLCAzNCwgMjIxLCAxODEsIDEwLCAzNCwgNCwgMTExLCAxMCwgMzQsIDQsIDEwNSwgCisgICAgMTAsIDM0LCAyMzMsIDEwMywgMTExLCAxMCwgMzQsIDIzMywgMTAzLCAxMDUsIDEwLCAzNCwgMjMzLCAxMDMsIDE1OCwgMTAsIAorICAgIDM0LCAyMzMsIDEwMywgMTYxLCAxMCwgMzQsIDIxOSwgNzAsIDEwLCAzNCwgMjE2LCAxNDYsIDEwLCAzNCwgMjE5LCA2OCwgCisgICAgMTExLCAxMCwgMzQsIDIxOSwgNjgsIDEwNSwgMTAsIDM0LCAyNDEsIDIzNSwgMTExLCAxMCwgMzQsIDI0MSwgMjM1LCAxMDUsIAorICAgIDEwLCAzNCwgMjQyLCAyMiwgMTAsIDM0LCAyMjMsIDE1MCwgMTAsIDM0LCAyNTAsIDkwLCAxMCwgMzQsIDIxOCwgMzgsIDEwLCAKKyAgICAzNCwgMjMwLCAxMzMsIDEwLCAzNCwgMjQ4LCA5NiwgMTAsIDM0LCAyMzAsIDEyNSwgMTAsIDM0LCAyNTAsIDMzLCAxMCwgMzQsIAorICAgIDIxMiwgNDEsIDExMSwgMTAsIDM0LCAyMTIsIDQxLCAxMDUsIDEwLCAzNCwgMjQ0LCAxMDQsIDEwLCAzNCwgMjI1LCAyMzYsIAorICAgIDExMSwgMTAsIDM0LCAyMjUsIDIzNiwgMTA1LCAxMCwgMzQsIDIxOSwgMTYyLCAxNjMsIDIxNSwgMjM3LCAyMTUsIDE4OSwgCisgICAgMTAsIDM0LCAyNDksIDE1MywgMTAsIDM0LCAyNDcsIDE0NCwgMTAsIDM0LCAyMzUsIDE0MywgMTAsIDM0LCAyNTEsIDIwNiwgCisgICAgNjQsIDI1MCwgMiwgMTAsIDM0LCAyNDUsIDIzLCAxMCwgMzQsIDIxOCwgMjUxLCAxMTEsIDEwLCAzNCwgMjE4LCAyNTEsIAorICAgIDEwNSwgMTAsIDM0LCAyNTIsIDE2MiwgMTAsIDM0LCAyMTksIDE2OSwgMTAsIDM0LCAyNTEsIDcxLCAyMTksIDE2OSwgMTAsIAorICAgIDM0LCAyMjksIDk1LCAxMTEsIDEwLCAzNCwgMjI5LCA5NSwgMTA1LCAxMCwgMzQsIDIyOSwgOTUsIDE1OCwgMTAsIDM0LCAKKyAgICAyMjksIDk1LCAxNjEsIDEwLCAzNCwgMjMxLCA1MSwgMTAsIDM0LCAyMjAsIDU5LCAxMCwgMzQsIDIyMywgMTU2LCAxMCwgMzQsIAorICAgIDI0NSwgNDUsIDEwLCAzNCwgMjI2LCAyMTMsIDEwLCAzNCwgMjUxLCAxNDEsIDExMSwgMTAsIDM0LCAyNTEsIDE0MSwgMTA1LCAKKyAgICAxMCwgMzQsIDIzMSwgOTEsIDEwLCAzNCwgMjMwLCAxMjgsIDEwLCAzNCwgMjQyLCAxNDcsIDExMSwgMTAsIDM0LCAyNDIsIAorICAgIDE0NywgMTA1LCAxMCwgMzQsIDI0MiwgMTQ3LCAxNTgsIDEwLCAzNCwgMjE2LCAxMDcsIDEwLCAzNCwgMjUwLCAxLCAxMCwgCisgICAgMzQsIDIxMiwgOSwgMTExLCAxMCwgMzQsIDIxMiwgOSwgMTA1LCAxMCwgMzQsIDI1MSwgNzEsIDIyMSwgMTcyLCAxMCwgMzQsIAorICAgIDIxOSwgMTYyLCAyNDAsIDI1NSwgMTAsIDM0LCAyNDAsIDI1NSwgMTAsIDM0LCAyNTEsIDcxLCAyMTksIDQsIDEwLCAzNCwgCisgICAgMjUxLCA3MSwgMjIwLCA1NCwgMTAsIDM0LCAyNDQsIDQwLCAxMCwgMzQsIDI1MSwgNzEsIDI1MCwgMjM2LCAxMCwgMzQsIAorICAgIDIxOSwgMTYyLCAyMTIsIDU3LCAxMCwgMzQsIDIxMiwgNTgsIDExMSwgMTAsIDM0LCAyMTIsIDU4LCAxMDUsIDEwLCAzNCwgCisgICAgMjUwLCAzNSwgMTAsIDM0LCAyNTEsIDcxLCAyNDIsIDE3MywgMTAsIDM0LCAyMDAsIDExMSwgMTAsIDM0LCAyMDAsIDEwNSwgCisgICAgMTAsIDM0LCAyNTEsIDcxLCAyMzIsIDE0MywgMTAsIDM0LCAyNTEsIDcxLCAyNDMsIDk1LCAxMCwgMzQsIDIzMCwgMTI0LCAKKyAgICAxMTEsIDEwLCAzNCwgMjMwLCAxMjQsIDEwNSwgMTAsIDM0LCAyMjMsIDE2MiwgMTAsIDM0LCAyNTEsIDIxNSwgMTAsIDM0LCAKKyAgICAyNTEsIDcxLCAyMTcsIDU3LCAyMzMsIDU4LCAxMCwgMzQsIDI1MSwgNzEsIDIzMywgNTksIDEwLCAzNCwgMjUxLCA3MSwgCisgICAgMjExLCAyMzksIDEwLCAzNCwgMjUxLCA3MSwgMjQ0LCA1NCwgMTAsIDM0LCAyNDUsIDIyNiwgMTExLCAxMCwgMzQsIDI0NSwgCisgICAgMjI2LCAxMDUsIDEwLCAzNCwgMjQ1LCAyMjYsIDE1OCwgMTAsIDM0LCAyNTEsIDcxLCAyNDUsIDIyNSwgMTAsIDM0LCAyNDEsIAorICAgIDI0MiwgMTAsIDM0LCAyNTEsIDcxLCAyNDAsIDI1MiwgMTAsIDM0LCAyNTEsIDIwMiwgMTAsIDM0LCAyNDIsIDIyOSwgMTAsIAorICAgIDM0LCAyNTEsIDcxLCAyNDQsIDk4LCAxMCwgMzQsIDI1MSwgNzEsIDI1MSwgMjQ1LCAxMCwgMzQsIDI1MSwgNzEsIDIyMiwgMywgCisgICAgMTAsIDM0LCAyMTksIDE2MiwgMjEyLCAyLCAxMCwgMzQsIDIxOSwgMTYyLCAyMTEsIDQxLCAxMCwgMzQsIDI1MSwgNzEsIAorICAgIDI0MywgMjUyLCAxMCwgMzQsIDIzNSwgMTQ5LCAyNDUsIDQ5LCAxMCwgMzQsIDI1MSwgNzEsIDI0NSwgNDksIDEwLCAzNCwgCisgICAgMjM1LCAxNDksIDIxNiwgMTYsIDEwLCAzNCwgMjUxLCA3MSwgMjE2LCAxNiwgMTAsIDM0LCAyMzUsIDE0OSwgMjQ2LCAxMDQsIAorICAgIDEwLCAzNCwgMjUxLCA3MSwgMjQ2LCAxMDQsIDEwLCAzNCwgMjE1LCA5MSwgMTAsIDM0LCAyMzUsIDE0OSwgMjE1LCA5MSwgCisgICAgMTAsIDM0LCAyNTEsIDcxLCAyMTUsIDkxLCA2MCwgMzQsIDExMSwgNjAsIDM0LCAyMzIsIDIxOSwgNjAsIDM0LCAyNDcsIAorICAgIDEyOCwgNjAsIDM0LCAyMTksIDk3LCA2MCwgMzQsIDIyMSwgMTc3LCA2MCwgMzQsIDEwMywgNjAsIDM0LCAxMDUsIDYwLCAzNCwgCisgICAgMjMyLCAyNDMsIDYwLCAzNCwgMjMxLCAxOTAsIDYwLCAzNCwgMjMzLCAzOSwgNjAsIDM0LCAyNDUsIDEzNywgNjAsIDM0LCAKKyAgICAxOTYsIDYwLCAzNCwgMTI0LCAyNTEsIDE3MSwgNjAsIDM0LCAyNDksIDE1NSwgNjAsIDM0LCAyNDAsIDExOCwgNjAsIDM0LCAKKyAgICAyMTcsIDkzLCA2MCwgMzQsIDIwNCwgMjUxLCAxNzEsIDYwLCAzNCwgMjM0LCAzOCwgNjAsIDM0LCAyMjQsIDIyNywgNjAsIAorICAgIDM0LCAyMTEsIDIwMiwgNjAsIDM0LCAyMTgsIDI0NSwgNjAsIDM0LCA0NCwgMjA0LCAyNTEsIDE3MSwgNjAsIDM0LCAyNDEsIAorICAgIDE4MywgMjQ1LCAxNTMsIDYwLCAzNCwgMjE2LCAyNDgsIDYwLCAzNCwgMjQ3LCAxNzgsIDYwLCAzNCwgMjIxLCAxODEsIDYwLCAKKyAgICAzNCwgMjUwLCAxOCwgNjAsIDM0LCAyMjQsIDE4NSwgNjAsIDM0LCAyNTQsIDIyNCwgNjAsIDM0LCAyMzAsIDExNSwgNjAsIAorICAgIDM0LCAyNDUsIDE1MywgNjAsIDM0LCAyNDUsIDIzMSwgNjAsIDM0LCAyMjEsIDIwMiwgNjAsIDM0LCAyNDIsIDE4MSwgNjAsIAorICAgIDM0LCAyNDIsIDE4MiwgMjE5LCA4MywgNjAsIDM0LCAyNDUsIDQ4LCA2MCwgMzQsIDI1MiwgMCwgNjAsIDM0LCAyMTEsIDIyMSwgCisgICAgNjAsIDM0LCAyNTAsIDEwOSwgNjAsIDM0LCAyMjIsIDE5OCwgNjAsIDM0LCAyMzYsIDIsIDYwLCAzNCwgMjE5LCA4MSwgNjAsIAorICAgIDM0LCAyMzMsIDEwMiwgNjAsIDM0LCAyNDksIDE2NCwgNjAsIDM0LCAyMTgsIDIzOSwgNjAsIDM0LCAyMzAsIDEyMCwgNjAsIAorICAgIDM0LCAyMjIsIDIyNywgNjAsIDM0LCAyMTEsIDIwNiwgNjAsIDM0LCAyMjYsIDE5NCwgNjAsIDM0LCAyMTUsIDk4LCA2MCwgCisgICAgMzQsIDI0NiwgODgsIDYwLCAzNCwgMjE5LCAyNTMsIDIxNiwgMTQ2LCA2MCwgMzQsIDI0NiwgMTI2LCAyNTAsIDE4LCA2MCwgCisgICAgMzQsIDIwMCwgMjE4LCAxMTAsIDYwLCAzNCwgMTEzLCAyNDIsIDE3LCA2MCwgMzQsIDIyMCwgMiwgNjAsIDM0LCAyNTEsIAorICAgIDE3NywgNjAsIDM0LCAyMTksIDY3LCA2MCwgMzQsIDI1MSwgMTQ1LCA2MCwgMzQsIDIxOCwgMTQwLCA2MCwgMzQsIDI0MSwgCisgICAgMjM0LCA2MCwgMzQsIDI0MiwgMzUsIDYwLCAzNCwgMjQ3LCAxMzEsIDYwLCAzNCwgMjQyLCAyMiwgNjAsIDM0LCAyNTEsIAorICAgIDE2MiwgNjAsIDM0LCAyMjMsIDE1MCwgNjAsIDM0LCAyMjEsIDE4OSwgNjAsIDM0LCAyNDcsIDIwNywgNjAsIDM0LCAyNTMsIAorICAgIDE3NiwgNjAsIDM0LCAyMTgsIDIzNiwgNjAsIDM0LCAyMjgsIDU2LCA2MCwgMzQsIDIxOCwgMzgsIDYwLCAzNCwgMjIxLCAKKyAgICAyMTMsIDYwLCAzNCwgMjMwLCAxMzMsIDYwLCAzNCwgMjE1LCAyMzYsIDYwLCAzNCwgMjMzLCAxMjgsIDYwLCAzNCwgMjE4LCAKKyAgICAxMzEsIDYwLCAzNCwgMjQ4LCA5NiwgNjAsIDM0LCAyMTIsIDIxLCA2MCwgMzQsIDI0NywgMTU0LCAyMjgsIDU2LCA2MCwgMzQsIAorICAgIDI0OSwgMjIzLCA2MCwgMzQsIDI0MywgMjI5LCA2MCwgMzQsIDI1MCwgMjksIDYwLCAzNCwgMjE4LCAxNDQsIDYwLCAzNCwgCisgICAgMjEyLCA0MCwgNjAsIDM0LCAyNDQsIDEwNCwgNjAsIDM0LCAyNTAsIDI2LCA2MCwgMzQsIDI0NCwgMTY5LCA2MCwgMzQsIDUyLCAKKyAgICAyMTEsIDE3OCwgNjAsIDM0LCAxNjMsIDIxNSwgMjM3LCAyMTUsIDE4OSwgNjAsIDM0LCAyMTksIDkxLCA2MCwgMzQsIDI0NCwgCisgICAgMTc5LCA2MCwgMzQsIDI0OSwgMTUzLCA2MCwgMzQsIDI0NywgMTQ0LCA2MCwgMzQsIDIyNCwgMTgyLCA2MCwgMzQsIDIzNSwgCisgICAgMTQzLCA2MCwgMzQsIDIzMSwgNzIsIDYwLCAzNCwgMjE2LCA4OSwgNjAsIDM0LCAyMTcsIDI0NiwgNjAsIDM0LCAyMzIsIAorICAgIDIzNywgNjAsIDM0LCAyMTQsIDEzMSwgNjAsIDM0LCAyNDQsIDEyOCwgNjAsIDM0LCAyNTEsIDIwNiwgNjQsIDI1MCwgMiwgCisgICAgNjAsIDM0LCAyMTksIDE5MCwgNjAsIDM0LCAyNDYsIDEyNiwgMjE2LCAyNDMsIDYwLCAzNCwgMjExLCAyNTMsIDYwLCAzNCwgCisgICAgMjE5LCAxMDUsIDYwLCAzNCwgMjQ3LCAxOTUsIDYwLCAzNCwgMjQ1LCAyMywgNjAsIDM0LCAyMTksIDcsIDYwLCAzNCwgNzUsIAorICAgIDYwLCAzNCwgMjE4LCAxMzMsIDYwLCAzNCwgMjE4LCAyNTAsIDYwLCAzNCwgMjE2LCAwLCA2MCwgMzQsIDI0MiwgMTU0LCA2MCwgCisgICAgMzQsIDI1MCwgMjI2LCA2MCwgMzQsIDIxOCwgMTYyLCA2MCwgMzQsIDI1MiwgMTYyLCA2MCwgMzQsIDIyMywgMzQsIDYwLCAKKyAgICAzNCwgMjE5LCAxNjksIDYwLCAzNCwgMjM1LCAxMzYsIDYwLCAzNCwgMjI5LCA5NCwgNjAsIDM0LCAyMjAsIDU5LCA2MCwgMzQsIAorICAgIDI0NCwgMTU3LCA2MCwgMzQsIDIyNiwgMjEzLCA2MCwgMzQsIDI1NCwgMTI2LCA2MCwgMzQsIDIyNSwgMzIsIDYwLCAzNCwgCisgICAgMjQ1LCAyMzUsIDYwLCAzNCwgMjUxLCAxNDAsIDYwLCAzNCwgMjMxLCA5MSwgNjAsIDM0LCAyMzAsIDE4OCwgNjAsIDM0LCAKKyAgICAyMjAsIDE1OCwgNjAsIDM0LCAyNTQsIDQsIDYwLCAzNCwgMjMwLCAxMjgsIDYwLCAzNCwgMjE2LCAyMCwgNjAsIDM0LCAyMjYsIAorICAgIDE2OSwgNjAsIDM0LCAyNTEsIDIwOSwgNjAsIDM0LCAyMTgsIDEyOSwgNjAsIDM0LCAyNDksIDIzMywgNjAsIDM0LCAyNDIsIAorICAgIDE0NiwgNjAsIDM0LCAyMTYsIDEwNywgNjAsIDM0LCAyMzUsIDIyNCwgNjAsIDM0LCAyNTEsIDIxOSwgNjAsIDM0LCAyMTIsIAorICAgIDU4LCAyNDUsIDE1MywgNjAsIDM0LCAyNTAsIDEsIDYwLCAzNCwgMjEyLCA4LCA2MCwgMzQsIDIyMSwgMTcyLCA2MCwgMzQsIAorICAgIDI0MCwgMjU1LCA2MCwgMzQsIDIxOSwgNCwgNjAsIDM0LCAyMTQsIDIyLCA2MCwgMzQsIDI1MiwgODAsIDYwLCAzNCwgMjI1LCAKKyAgICA3NiwgNjAsIDM0LCAyNTIsIDE4MiwgNjAsIDM0LCAyMjAsIDU0LCA2MCwgMzQsIDIyMywgMTEzLCA2MCwgMzQsIDIyMiwgCisgICAgMTI4LCA2MCwgMzQsIDI0NCwgNDAsIDYwLCAzNCwgMjUxLCAyMDgsIDYwLCAzNCwgMjUwLCAyMzYsIDYwLCAzNCwgMjUxLCAKKyAgICAyMzQsIDYwLCAzNCwgMjMwLCAxMzAsIDYwLCAzNCwgMjEyLCA1NywgNjAsIDM0LCAyNTAsIDM1LCA2MCwgMzQsIDIxMSwgCisgICAgMjM2LCA2MCwgMzQsIDI0NywgMTg4LCA2MCwgMzQsIDIxMywgMTYxLCA2MCwgMzQsIDI0MiwgMTczLCA2MCwgMzQsIDIzMiwgCisgICAgMTQzLCA2MCwgMzQsIDI0MywgOTUsIDYwLCAzNCwgMjMwLCAxMjMsIDYwLCAzNCwgMjE5LCA5NiwgNjAsIDM0LCAyMTksIAorICAgIDI1MywgMjE3LCA3NywgMjUxLCAyNDUsIDYwLCAzNCwgMjIzLCAxNjIsIDYwLCAzNCwgMjUxLCAyMTUsIDYwLCAzNCwgMjExLCAKKyAgICAxOTcsIDYwLCAzNCwgMjQ0LCAxOTgsIDYwLCAzNCwgMjMzLCA1OCwgNjAsIDM0LCAyMTcsIDU3LCAyMzMsIDU4LCA2MCwgMzQsIAorICAgIDIzMywgNTQsIDYwLCAzNCwgMjE5LCAzMiwgNjAsIDM0LCAyMzMsIDU5LCA2MCwgMzQsIDIxMSwgMjM5LCA2MCwgMzQsIDI0NCwgCisgICAgNTQsIDYwLCAzNCwgMjQ1LCAyMjUsIDYwLCAzNCwgMjQxLCAyNDIsIDYwLCAzNCwgMjQ0LCA4LCA2MCwgMzQsIDI0MCwgMjUyLCAKKyAgICA2MCwgMzQsIDI1MSwgMjAyLCA2MCwgMzQsIDIxNywgNjQsIDYwLCAzNCwgMjQyLCA0MSwgNjAsIDM0LCAyNDQsIDEyMSwgNjAsIAorICAgIDM0LCAyMjIsIDMwLCAyMTEsIDIzNiwgNjAsIDM0LCAyNTAsIDIyOCwgNjAsIDM0LCAyNDIsIDIyOSwgNjAsIDM0LCAyNDQsIAorICAgIDk4LCA2MCwgMzQsIDI1MSwgMjQ1LCA2MCwgMzQsIDIyMiwgMywgNjAsIDM0LCAyNDgsIDgyLCA2MCwgMzQsIDIxMiwgMiwgCisgICAgNjAsIDM0LCAyNDEsIDIxNywgNjAsIDM0LCAyMTEsIDQxLCA2MCwgMzQsIDIzMCwgMTk3LCA2MCwgMzQsIDI1MSwgMjI5LCAKKyAgICA2MCwgMzQsIDI0NSwgMTYzLCA2MCwgMzQsIDI0MywgMjUyLCA2MCwgMzQsIDIxNSwgMjEwLCA2MCwgMzQsIDI0NiwgOTAsIAorICAgIDYwLCAzNCwgMjIzLCAxNDQsIDYwLCAzNCwgMjI4LCA1OCwgNjAsIDM0LCAyNDUsIDQ5LCA2MCwgMzQsIDIxNiwgMTYsIDYwLCAKKyAgICAzNCwgMjQ2LCAxMDQsIDYwLCAzNCwgMjE1LCA5MSwgNjAsIDM0LCAyNDQsIDU2LCAxMTAsIDI0OCwgNDUsIDEzNSwgNDMsIAorICAgIDIxNiwgNDMsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgNzIsIDIxNiwgNDMsIDUxLCAxMTAsIDI0OCwgNDUsIDEzNSwgCisgICAgNDMsIDIxNiwgNDMsIDIzMCwgMjI5LCAyMiwgMjIyLCAyNTQsIDExMCwgMjQ4LCA0NSwgMTM1LCA3MiwgMjE2LCA0MywgMjMwLCAKKyAgICAyMjksIDIyLCA1MSwgMTEwLCAyNDgsIDQ1LCAxMzUsIDI0MywgMjM2LCAyMTgsIDExLCAxMTAsIDI0OCwgNDUsIDEzNSwgCisgICAgMjE4LCAxMiwgMjQzLCAyNTEsIDQ4LCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDUxLCAxMTAsIAorICAgIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIzMywgNTIsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAKKyAgICAyNDMsIDI1MSwgMjE0LCAxNjAsIDIzMywgNTIsIDExMCwgMjQ4LCA0NSwgMTM1LCAyMTgsIDEyLCAyNDMsIDI1MSwgMjE0LCAKKyAgICAxNjAsIDIyMiwgMjU0LCAxMTAsIDI0OCwgNDUsIDEzNSwgMjE4LCAxMiwgMjQzLCAyNTEsIDIzMiwgMTE0LCAyMzMsIDUyLCAKKyAgICAxMTAsIDI0OCwgNDUsIDEzNSwgMjI2LCAxMjYsIDExMCwgMjE5LCAyMCwgMTEwLCAyNDksIDIyNywgMTEwLCAyNDMsIDIzNiwgCisgICAgMjE4LCAxMzEsIDI0NywgMTg1LCA3OSwgMjM1LCAxMzcsIDIzNSwgMjQzLCAyMTgsIDE2MSwgODcsIDExMCwgMjM1LCAxNjQsIAorICAgIDc5LCAxMTAsIDI1MCwgNCwgNzksIDExMCwgNTQsIDIxMCwgODYsIDQzLCAyNTQsIDExOCwgMTI3LCA0NCwgMjU0LCAxMTgsIAorICAgIDEyNywgNDMsIDUyLCAyNTQsIDExOCwgMTI3LCA0NCwgNTIsIDI1NCwgMTE4LCAxMjcsIDQzLCAyNDksIDE2OSwgMTI3LCA0NCwgCisgICAgMjQ5LCAxNjksIDEyNywgNDMsIDcxLCAyNDksIDE2OSwgMTI3LCA0NCwgNzEsIDI0OSwgMTY5LCAxMjcsIDQzLCA4NSwgMjMzLCAKKyAgICAyNiwgMTI3LCA0NCwgODUsIDIzMywgMjYsIDEyNywgMjI0LCAyNDAsIDc5LCAyNDMsIDM5LCA3OSwgNDMsIDIxNiwgNywgCisgICAgMjIwLCA1NSwgMTI3LCA0NCwgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDQzLCA3MSwgMjMzLCAyNiwgMTI3LCA0NCwgNzEsIAorICAgIDIzMywgMjYsIDEyNywgNDMsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgNDQsIDcxLCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgCisgICAgNDMsIDcxLCA0MiwgMTI3LCA0NCwgNzEsIDQyLCAxMjcsIDIxMiwgMzYsIDI0OCwgMTY0LCAyMjMsIDUyLCA1MiwgMjI0LCAKKyAgICAxOTQsIDIyNCwgMSwgNzksIDUyLCAyMjQsIDE5NCwgMjI0LCAxLCA3OSwgMTIxLCA1MiwgMjI0LCAxOTQsIDIyNCwgMSwgNzksIAorICAgIDIyNCwgMjQwLCAxNjQsIDI0NCwgMTk4LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTExLCAyNDIsIDE1LCAyMjcsIDIwMiwgMTA1LCAKKyAgICAyNDIsIDE1LCAyMjcsIDIwMiwgMTU4LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTYxLCAyNDIsIDE1LCAyMjcsIDIwMiwgMTkwLCAKKyAgICAyNDIsIDE1LCAyMjcsIDIwMiwgMTk1LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTk5LCAyNDIsIDE1LCAyMjcsIDIwMiwgMTk2LCAKKyAgICAyNDIsIDE1LCAyMjcsIDIwMiwgMjAxLCAxMTAsIDIzMywgOSwgMTM4LCA3OSwgMTEwLCAyMjIsIDIzMSwgMTM4LCA3OSwgCisgICAgMTEwLCAyNDgsIDUyLCAxMzgsIDc5LCAxMTAsIDI0NSwgMTM2LCAxMzgsIDc5LCAyNCwgMjE5LCAxNTcsIDU5LCAxMzgsIDc5LCAKKyAgICAyNCwgNTIsIDU5LCAxMzgsIDc5LCAyMTIsIDMyLCAyNDgsIDE2NCwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCA3OSwgNjcsIAorICAgIDIzNCwgMjM5LCAyMjMsIDgwLCAyLCAyMTMsIDEzNSwgMjE5LCAzMywgNzksIDY3LCAyMzQsIDIzOSwgMjIzLCA4MCwgMTY0LCAKKyAgICAyMTQsIDE2MCwgMjQyLCAzNCwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCAyLCAyMTMsIDEzNSwgMjE5LCAzMywgMTY0LCAyMTQsIAorICAgIDE2MCwgMjQyLCAzNCwgNjcsIDIzNCwgMjM5LCAyMjMsIDgwLCAxNjQsIDIzMiwgMTE0LCAyNDIsIDM0LCAzNywgMjI0LCAKKyAgICAyNDAsIDc5LCAxMTAsIDIxNywgNCwgMjMyLCAyMjAsIDI0NCwgMTU0LCAyMjAsIDE0MCwgODcsIDI0MiwgMTUsIDIyNywgCisgICAgMjAyLCAyMTYsIDI0OCwgMjQyLCAxNSwgMjI3LCAyMDIsIDIxNSwgNzMsIDI0MiwgMTUsIDIyNywgMjAyLCAyMTYsIDE2MywgCisgICAgNjcsIDExMCwgMjM1LCAxNjQsIDc5LCAyMzEsIDE0NSwgNzksIDIyNiwgMywgMjU0LCAxNDgsIDc5LCAxMTAsIDQ1LCAyMzUsIAorICAgIDI0NSwgMTEwLCAxNjMsIDI0NCwgMTE0LCAyMTksIDIwLCAxNDEsIDEsIDQsIDYxLCAxNDEsIDEsIDYxLCAxNDEsIDEsIDQsIAorICAgIDc0LCAxNDEsIDEsIDc0LCAxNDEsIDEsIDQsIDY5LCAxNDEsIDEsIDY5LCAxNDEsIDEsIDQsIDc2LCAxNDEsIDEsIDc2LCAKKyAgICAxNDEsIDEsIDQsIDc4LCAxNDEsIDEsIDc4LCAxNDEsIDEsIDE3NiwgMTQxLCAxLCAyNDMsIDE0MiwgMTQxLCAxLCAyMzQsIAorICAgIDk4LCAxNDEsIDEsIDI0MiwgMjIxLCAxNDEsIDEsIDIzMywgMjIzLCAxNDEsIDEsIDI0MiwgMTIwLCAxNDEsIDEsIDIzNCwgCisgICAgMTg4LCAxNDEsIDEsIDI0MywgNjksIDE0MSwgMSwgMjM0LCAzNCwgMTQxLCAxLCAyNDIsIDE4MSwgMTQxLCAxLCAyMDYsIAorICAgIDE0MSwgMSwgMjEwLCAxMTYsIDE0MSwgMSwgMjE5LCAxOTMsIDE0MSwgMSwgMjEwLCA0NCwgMTQxLCAxLCAyMTgsIDg0LCAKKyAgICAxNDEsIDEsIDIxMCwgMTMsIDE0MSwgMSwgMjIxLCAxODMsIDE0MSwgMSwgMjEwLCA5NCwgMTQxLCAxLCAyMTksIDYwLCAxNDEsIAorICAgIDEsIDIxMCwgMjMsIDE0MSwgMSwgMjE3LCAxMDYsIDE0MSwgMSwgMjQ4LCAyMjksIDE0MSwgMSwgMjE2LCAxMTgsIDE0MSwgMSwgCisgICAgMjQ4LCAxMSwgMTQxLCAxLCA0LCAyMTUsIDExOSwgMTQxLCAxLCAyMTUsIDExOSwgMTQxLCAxLCAyNDYsIDg2LCAxNDEsIDEsIAorICAgIDIxNywgMjMsIDE0MSwgMSwgMjQ4LCA5OCwgMTQxLCAxLCAxMTIsIDE0MSwgMSwgMjQ3LCAxNTMsIDE0MSwgMSwgMTk4LCAKKyAgICAxNDEsIDEsIDIyOCwgMjM4LCAxNDEsIDEsIDIyNywgMjQyLCAxNDEsIDEsIDIyOSwgMTEyLCAxNDEsIDEsIDIyOCwgNzksIAorICAgIDE0MSwgMSwgMTYyLCAxNDEsIDEsIDI1MiwgMTk5LCAxNDEsIDEsIDE5MSwgMTQxLCAxLCAyNDEsIDE4NywgMTQxLCAxLCAKKyAgICAyNTIsIDE0LCAxNDEsIDEsIDIyNSwgMTExLCAxNDEsIDEsIDI0MCwgMjI5LCAxNDEsIDEsIDI1MSwgMTMzLCAxNDEsIDEsIAorICAgIDIyNCwgMTUzLCAxNDEsIDEsIDI0MSwgMjQ1LCAxNDEsIDEsIDI1MiwgODMsIDE0MSwgMSwgMjI1LCAyMjQsIDE0MSwgMSwgCisgICAgMjQxLCA3NSwgMTQxLCAxLCAyNTEsIDIxMywgMTQxLCAxLCAyMjUsIDE5LCAxNDEsIDEsIDE4NiwgMTQxLCAxLCAyMzAsIAorICAgIDIzNSwgMTQxLCAxLCAyMzAsIDEwNywgMTQxLCAxLCAyMzEsIDk2LCAxNDEsIDEsIDIzMCwgMTY2LCAxNDEsIDEsIDQsIDE5MiwgCisgICAgMTQxLCAxLCAxOTIsIDE0MSwgMSwgNCwgMjEwLCAyMTIsIDE0MSwgMSwgMjEwLCAyMTIsIDE0MSwgMSwgNCwgMjEwLCAyNDQsIAorICAgIDE0MSwgMSwgMjEwLCAyNDQsIDE0MSwgMSwgMjA1LCAxNDEsIDEsIDIyMywgMzgsIDE0MSwgMSwgMjIyLCAxNDIsIDE0MSwgMSwgCisgICAgMjIzLCAxMzEsIDE0MSwgMSwgMjIyLCAyMTMsIDE0MSwgMSwgNCwgMjEyLCA2NSwgMTQxLCAxLCAyMTIsIDY1LCAxNDEsIDEsIAorICAgIDIxMSwgMjUwLCAxNDEsIDEsIDIxMiwgMjIsIDE0MSwgMSwgMjExLCAyMjcsIDE0MSwgMSwgMjMwLCAzMCwgMTQxLCAxLCAKKyAgICAyMTIsIDExNiwgMTQxLCAxLCA0LCAxNzYsIDE0MSwgMSwgNCwgMjM0LCAxODgsIDM4LCAyMzQsIDIwNywgMjEzLCAxMzUsIAorICAgIDIxOSwgMzMsIDc5LCAzOCwgMjM0LCAyMDcsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMjM0LCAyMDcsIDIxMywgMTM1LCAKKyAgICAyMTksIDMzLCA3OSwgMjM0LCAyMDcsIDIyMCwgMTU3LCAyMTksIDMzLCA3OSwgMTQxLCAyMzUsIDE2NCwgNzksIDE0MSwgCisgICAgMjEzLCAxMzUsIDIzNSwgMTY0LCA3OSwgMTQxLCAyNDcsIDIyOSwgMjEwLCAyMjUsIDIzNCwgMjA3LCA1MiwgMjQwLCAxNzUsIAorICAgIDU2LCAxLCA0LCA2MSwgNTYsIDEsIDYxLCA1NiwgMSwgNCwgNzQsIDU2LCAxLCA3NCwgNTYsIDEsIDQsIDY5LCA1NiwgMSwgCisgICAgNjksIDU2LCAxLCA0LCA3NiwgNTYsIDEsIDc2LCA1NiwgMSwgNCwgNzgsIDU2LCAxLCA3OCwgNTYsIDEsIDE3NiwgNTYsIDEsIAorICAgIDI0MywgMTQyLCA1NiwgMSwgMjM0LCA5OCwgNTYsIDEsIDI0MiwgMjIxLCA1NiwgMSwgMjMzLCAyMjMsIDU2LCAxLCAyNDIsIAorICAgIDEyMCwgNTYsIDEsIDIzNCwgMTg4LCA1NiwgMSwgMjQzLCA2OSwgNTYsIDEsIDIzNCwgMzQsIDU2LCAxLCAyNDIsIDE4MSwgCisgICAgNTYsIDEsIDIwNiwgNTYsIDEsIDIxMCwgMTE2LCA1NiwgMSwgMjE5LCAxOTMsIDU2LCAxLCAyMTAsIDQ0LCA1NiwgMSwgMjE4LCAKKyAgICA4NCwgNTYsIDEsIDIxMCwgMTMsIDU2LCAxLCAyMjEsIDE4MywgNTYsIDEsIDIxMCwgOTQsIDU2LCAxLCAyMTksIDYwLCA1NiwgCisgICAgMSwgMjEwLCAyMywgNTYsIDEsIDIxNywgMTA2LCA1NiwgMSwgMjQ4LCAyMjksIDU2LCAxLCAyMTYsIDExOCwgNTYsIDEsIAorICAgIDI0OCwgMTEsIDU2LCAxLCA0LCAyMTUsIDExOSwgNTYsIDEsIDIxNSwgMTE5LCA1NiwgMSwgMjQ2LCA4NiwgNTYsIDEsIDIxNywgCisgICAgMjMsIDU2LCAxLCAyNDgsIDk4LCA1NiwgMSwgMTEyLCA1NiwgMSwgMjQ3LCAxNTMsIDU2LCAxLCAxOTgsIDU2LCAxLCAyMjgsIAorICAgIDIzOCwgNTYsIDEsIDIyNywgMjQyLCA1NiwgMSwgMjI5LCAxMTIsIDU2LCAxLCAyMjgsIDc5LCA1NiwgMSwgMTYyLCA1NiwgMSwgCisgICAgMjUyLCAxOTksIDU2LCAxLCAxOTEsIDU2LCAxLCAyNDEsIDE4NywgNTYsIDEsIDI1MiwgMTQsIDU2LCAxLCAyMjUsIDExMSwgCisgICAgNTYsIDEsIDI0MCwgMjI5LCA1NiwgMSwgMjUxLCAxMzMsIDU2LCAxLCAyMjQsIDE1MywgNTYsIDEsIDI0MSwgMjQ1LCA1NiwgCisgICAgMSwgMjUyLCA4MywgNTYsIDEsIDIyNSwgMjI0LCA1NiwgMSwgMjQxLCA3NSwgNTYsIDEsIDI1MSwgMjEzLCA1NiwgMSwgMjI1LCAKKyAgICAxOSwgNTYsIDEsIDE4NiwgNTYsIDEsIDIzMCwgMjM1LCA1NiwgMSwgMjMwLCAxMDcsIDU2LCAxLCAyMzEsIDk2LCA1NiwgMSwgCisgICAgMjMwLCAxNjYsIDU2LCAxLCA0LCAxOTIsIDU2LCAxLCAxOTIsIDU2LCAxLCA0LCAyMTAsIDIxMiwgNTYsIDEsIDIxMCwgMjEyLCAKKyAgICA1NiwgMSwgNCwgMjEwLCAyNDQsIDU2LCAxLCAyMTAsIDI0NCwgNTYsIDEsIDIwNSwgNTYsIDEsIDIyMywgMzgsIDU2LCAxLCAKKyAgICAyMjIsIDE0MiwgNTYsIDEsIDIyMywgMTMxLCA1NiwgMSwgMjIyLCAyMTMsIDU2LCAxLCA0LCAyMTIsIDY1LCA1NiwgMSwgCisgICAgMjEyLCA2NSwgNTYsIDEsIDIxMSwgMjUwLCA1NiwgMSwgMjEyLCAyMiwgNTYsIDEsIDIxMSwgMjI3LCA1NiwgMSwgMjMwLCAKKyAgICAzMCwgNTYsIDEsIDIxMiwgMTE2LCA1NiwgMSwgNCwgMTc2LCA1NiwgMSwgNCwgMjM0LCAxODgsIDU2LCAxLCAyMTQsIDI3LCAKKyAgICA1NiwgMSwgMjEzLCAxNzYsIDU2LCAxLCAyMTMsIDI1NSwgNTYsIDEsIDIxMywgMTM4LCA1NiwgMjMwLCAyMjksIDI0NywgCisgICAgMTI4LCAyMzQsIDIwNywgMjI0LCAxNzYsIDIxOSwgMzMsIDc5LCA1NiwgMjM1LCAxNjQsIDc5LCA1NiwgMjEzLCAxMzUsIAorICAgIDIzNSwgMTY0LCA3OSwgNTYsIDI0NywgMjI5LCAyMzQsIDUsIDI1MSwgMTkyLCAxLCAyNTMsIDE2NiwgMjUxLCAxOTIsIDEsIAorICAgIDIyNiwgMTA5LCAyNTEsIDE5MiwgMSwgMTk0LCAyNTEsIDE5MiwgMSwgMjQ1LCAxNCwgMjUxLCAxOTIsIDEsIDI0OSwgNjgsIAorICAgIDI1MSwgMTkyLCAxLCAyMTcsIDE1MywgMjUxLCAxOTIsIDEsIDIzMCwgMzAsIDI1MSwgMTkyLCAxLCAxNTYsIDI1MSwgMTkyLCAKKyAgICAxLCAyNDMsIDIwOSwgMjUxLCAxOTIsIDEsIDIzNSwgMjksIDI1MSwgMTkyLCAxLCAyNDIsIDY3LCAyNTEsIDE5MiwgMSwgCisgICAgMjM1LCAxNTAsIDI1MSwgMTkyLCAxLCAyMjQsIDk5LCAyNTEsIDE5MiwgMSwgMjExLCAxNzgsIDI1MSwgMTkyLCAxLCAyMTAsIAorICAgIDgzLCAyNTEsIDE5MiwgMSwgMjUwLCAxNjYsIDI1MSwgMTkyLCAxLCAyMjAsIDEwNiwgMjUxLCAxOTIsIDEsIDE1MywgMjUxLCAKKyAgICAxOTIsIDEsIDIxMCwgMTU5LCAyNTEsIDE5MiwgMSwgMjUxLCA3NCwgMjUxLCAxOTIsIDEsIDIyMiwgOTMsIDI1MSwgMTkyLCAKKyAgICAxLCA2MSwgMjUxLCAxOTIsIDEsIDc4LCAyNTEsIDE5MiwgMSwgNzYsIDI1MSwgMTkyLCAxLCAyNDUsIDIwNSwgMjUxLCAxOTIsIAorICAgIDEsIDI1NCwgMjEwLCAyNTEsIDE5MiwgMSwgMjQ1LCAyMDMsIDI1MSwgMTkyLCAxLCAyNTMsIDIwMCwgMjUxLCAxOTIsIDEsIAorICAgIDIyNiwgMTM4LCAyNTEsIDE5MiwgMSwgMjU0LCAxMzEsIDI1MSwgMTkyLCAxLCAyNDUsIDE1OCwgMjUxLCAxOTIsIDEsIDI1NCwgCisgICAgMTIzLCAyNTEsIDE5MiwgMSwgMjQ1LCAxNDYsIDI1MSwgMTkyLCAxLCAyNDUsIDEwMCwgMjUxLCAxOTIsIDEsIDc0LCAyNTEsIAorICAgIDE5MiwgMSwgNjksIDI1MSwgMTkyLCAxLCAyMzUsIDE2MiwgMjUxLCAxOTIsIDEsIDIxNCwgMTA1LCAyNTEsIDE5MiwgMSwgCisgICAgMjI5LCA4NCwgMjUxLCAxOTIsIDEsIDI0MiwgMTg1LCAyNTEsIDE5MiwgMSwgMjM2LCA0MSwgMjQsIDEsIDIzNCwgNjQsIDI0LCAKKyAgICAxLCAyMTgsIDIxNywgMjQsIDEsIDIzNCwgNTcsIDI0LCAxLCAyMjgsIDIzMSwgMjQsIDEsIDIyOCwgMjI5LCAyNCwgMSwgCisgICAgMjI4LCAyMjgsIDI0LCAxLCAyMTYsIDEwMiwgMjQsIDEsIDIxOCwgMjA2LCAyNCwgMSwgMjIzLCAyOSwgMjQsIDEsIDIyMywgCisgICAgMjQsIDI0LCAxLCAyMjMsIDIxLCAyNCwgMSwgMjIzLCAxNCwgMjQsIDEsIDIyMywgOSwgMjQsIDEsIDIyMywgNCwgMjQsIDEsIAorICAgIDIyMywgMTUsIDI0LCAxLCAyMjMsIDI3LCAyNCwgMSwgMjMwLCAyMjIsIDI0LCAxLCAyMjUsIDk4LCAyNCwgMSwgMjE4LCAKKyAgICAyMTQsIDI0LCAxLCAyMjUsIDg3LCAyNCwgMSwgMjE5LCAxNTAsIDI0LCAxLCAyMTgsIDIxMSwgMjQsIDEsIDIzNiwgNjMsIAorICAgIDI0LCAxLCAyNTAsIDU0LCAyNCwgMSwgMjE4LCAyMjEsIDI0LCAxLCAyNTAsIDExNCwgMjQsIDEsIDIzNCwgMTE2LCAyNCwgMSwgCisgICAgMjE2LCAxNzQsIDI0LCAxLCAyMjUsIDEzNCwgMjQsIDEsIDI0MSwgMTc5LCAyNCwgMSwgNjEsIDI0LCAxLCAyNTQsIDI1MiwgCisgICAgMjQsIDEsIDE5MiwgMjQsIDEsIDIxMSwgOTIsIDI0LCAxLCAyNDUsIDEyNSwgMjQsIDEsIDc2LCAyNCwgMSwgMjExLCAzNiwgCisgICAgMjQsIDEsIDIxMSwgNDcsIDI0LCAxLCA3OCwgMjQsIDEsIDIxMiwgNjUsIDI0LCAxLCAyMTIsIDYyLCAyNCwgMSwgMjI2LCAKKyAgICAyMzgsIDI0LCAxLCAyMTAsIDI0NCwgMjQsIDEsIDY5LCAyNCwgMSwgMjEyLCAxMSwgMjQsIDEsIDIxMiwgMjIsIDI0LCAxLCAKKyAgICAyMTEsIDI1MCwgMjQsIDEsIDIxMCwgMjEyLCAyNCwgMSwgMjQ1LCA2MywgMjQsIDEsIDIxMSwgOCwgMjQsIDEsIDc0LCAyNCwgCisgICAgMjQ0LCAxMTEsIDI0LCAxLCAyMTgsIDIxNSwgMjQsIDEsIDIyOCwgMjIxLCAyNCwgMSwgMjI4LCAyMjMsIDI0LCAxLCAyMjgsIAorICAgIDIyNiwgMjQsIDEsIDIyMywgMjIsIDI0LCAxLCAyMjMsIDMsIDI0LCAxLCAyMjMsIDExLCAyNCwgMSwgMjIzLCAxNiwgMjQsIAorICAgIDEsIDIyMywgMSwgMjQsIDEsIDIzMCwgMjE1LCAyNCwgMSwgMjMwLCAyMTIsIDI0LCAxLCAyMzAsIDIxNiwgMjQsIDEsIDIzNCwgCisgICAgMjI3LCAyNCwgMSwgMjI1LCA5MywgMjQsIDEsIDIyNSwgNzksIDI0LCAxLCAyMjUsIDg1LCAyNCwgMSwgMjI1LCA4MiwgMjQsIAorICAgIDEsIDIyNSwgOTYsIDI0LCAxLCAyMjUsIDgwLCAyNCwgMSwgMjM0LCAyMjUsIDI0LCAxLCAyMzQsIDIyMywgMjQsIDEsIDIxOSwgCisgICAgMTQzLCAyNCwgMSwgMjE5LCAxNDEsIDI0LCAxLCAyMTksIDEzMywgMjQsIDEsIDIxOSwgMTM4LCAyNCwgMSwgMjE5LCAxNDgsIAorICAgIDI0LCAxLCAyMjYsIDM2LCAyNCwgMSwgMjE4LCAyMTgsIDI0LCAxLCAyMTEsIDI2LCAyNCwgMSwgMjExLCAyMiwgMjQsIDEsIAorICAgIDIxMSwgMjMsIDI0LCAxLCAyMzQsIDIyNiwgMjQsIDEsIDIxOCwgMjE5LCAyNCwgMSwgMjExLCAzMiwgMjQsIDEsIDIxMCwgCisgICAgMjM4LCAyNCwgMSwgMjEwLCAyMzcsIDI0LCAxLCAyMTAsIDI0MCwgMjQsIDEsIDIxMCwgMjAzLCAyNCwgMSwgMjEwLCAyMDQsIAorICAgIDI0LCAxLCAyMTAsIDIwNywgMjQsIDEsIDI1NCwgNDIsIDI0LCAxLCAyNTQsIDM2LCAxMTAsIDI1NCwgMTA3LCAyMzIsIDIwOSwgCisgICAgNzksIDExMCwgMjU0LCAxMDcsIDIyMywgNTMsIDc5LCAxMTAsIDI1NCwgMTA3LCAxMjMsIDc5LCAxMTAsIDI1NCwgMTA3LCAKKyAgICAxMTMsIDc5LCAxMTAsIDI1NCwgMTA3LCAxMzQsIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDQsIDE5LCA3OSwgMTEwLCAyNTQsIAorICAgIDEwNywgMjE2LCAxNSwgNzksIDExMCwgMjU0LCAxMDcsIDIzMCwgMjI5LCA3OSwgMTEwLCAyNTQsIDEwNywgMjUxLCAxODMsIAorICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDQsIDEwMCwgNzksIDExMCwgMjU0LCAxMDcsIDIyMSwgMTc4LCA3OSwgMTEwLCAyNTQsIAorICAgIDEwNywgMjE2LCAxNzAsIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDQsIDEyLCA3OSwgMTEwLCAyNTQsIDEwNywgMjQxLCAyMzEsIAorICAgIDc5LCAxMTAsIDI1NCwgMTA3LCAyNDUsIDIzMiwgNzksIDExMCwgMjU0LCAxMDcsIDIzMSwgMTkxLCA3OSwgMjUxLCAxOTIsIAorICAgIDEsIDI1MSwgMTMzLCAyNTEsIDE5MiwgMSwgMjEwLCA0NCwgMjUxLCAxOTIsIDEsIDIzNSwgMTE0LCAyNTEsIDE5MiwgMSwgCisgICAgMjQyLCAxMjAsIDI1MSwgMTkyLCAxLCAyNDUsIDIxNywgMjUxLCAxOTIsIDEsIDI0NSwgMTQzLCAyNTEsIDE5MiwgMSwgMjI2LCAKKyAgICAxODcsIDI1MSwgMTkyLCAxLCAyMjYsIDE5MSwgMjUxLCAxOTIsIDEsIDIzNSwgMTg2LCAyNTEsIDE5MiwgMSwgMjU0LCAxMDksIAorICAgIDI1MSwgMTkyLCAxLCAyMzUsIDIzMSwgMjUxLCAxOTIsIDEsIDIxNCwgMTY4LCAyNTEsIDE5MiwgMSwgMjM2LCAyMywgMjUxLCAKKyAgICAxOTIsIDEsIDIyOSwgNjIsIDI1MSwgMTkyLCAxLCAyNTQsIDIwNCwgMjUxLCAxOTIsIDEsIDI1MywgMTk1LCAyNTEsIDE5MiwgCisgICAgMSwgMjU0LCAxNDQsIDI1MSwgMTkyLCAxLCAyMjYsIDIwOCwgMjUxLCAxOTIsIDEsIDIyNiwgMTkzLCAyNTEsIDE5MiwgMSwgCisgICAgMjM1LCAyMjgsIDI1MSwgMTkyLCA0MCwgMSwgMjI2LCAxMDksIDI1MSwgMTkyLCA0MCwgMSwgMjE3LCAxNTMsIDI1MSwgMTkyLCAKKyAgICA0MCwgMSwgMjM1LCAyOSwgMjUxLCAxOTIsIDQwLCAxLCAyNDIsIDY3LCAyNTEsIDE5MiwgMSwgMjQzLCAxLCAyNTEsIDE5MiwgCisgICAgMSwgMjMzLCA1LCAyNTEsIDE5MiwgMSwgMjA5LCAyNTAsIDEwLCAyMTgsIDEwNSwgMjE3LCAxNTMsIDEwLCAyMTgsIDEwNSwgCisgICAgMjEyLCA0LCAxMCwgMjE4LCAxMDUsIDIxMSwgMTU4LCAxMCwgMjE4LCAxMDUsIDI1MSwgODcsIDEwLCAyMTgsIDEwNSwgMjE3LCAKKyAgICAyNTUsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjUsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjksIDEwLCAyMTgsIDEwNSwgMjQwLCAKKyAgICAyMzgsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjYsIDEwLCAyMTgsIDEwNSwgMjE3LCAxNTYsIDEwLCAyMTgsIDEwNSwgMjQwLCAKKyAgICAxNjgsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjQsIDEwLCAyMTgsIDEwNSwgMjQwLCAyMzYsIDEwLCAyMTgsIDEwNSwgMjQwLCAKKyAgICAxNjcsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjMsIDEwLCAyMTgsIDEwNSwgMjMwLCAzMCwgMTAsIDIxOCwgMTA1LCAyNDIsIAorICAgIDY3LCAxMCwgMjE4LCAxMDUsIDIyMiwgOTMsIDEwLCAyMTgsIDEwNSwgMjI2LCAxMDksIDEwLCAyMTgsIDEwNSwgMjE5LCAyMywgCisgICAgMTAsIDIxOCwgMTA1LCAyNDksIDY4LCAxMCwgMjE4LCAxMDUsIDI0MCwgMTcwLCAxMCwgMjE4LCAxMDUsIDI0MSwgMTk3LCAKKyAgICAxMCwgMjE4LCAxMDUsIDIxNywgMTY1LCAxMCwgMjE4LCAxMDUsIDIxNywgMjM0LCAxMCwgMjE4LCAxMDUsIDIxOCwgMTcwLCAKKyAgICAxMCwgMjE4LCAxMDUsIDIyMCwgMTEyLCAxMCwgMjE4LCAxMDUsIDIyNSwgMjI4LCAxMCwgMjE4LCAxMDUsIDIyNCwgMTAxLCAKKyAgICAxMCwgMjE4LCAxMDUsIDIxNiwgNDQsIDEwLCAyMTgsIDEwNSwgMjE3LCAxNTUsIDEwLCAyMTgsIDEwNSwgMjE3LCAyNDUsIAorICAgIDEwLCAyMTgsIDEwNSwgMjQwLCAxNzcsIDEwLCAyMTgsIDEwNSwgMjQwLCAxNjIsIDEwLCAyMTgsIDEwNSwgMjI1LCAxNTIsIAorICAgIDEwLCAyMTgsIDEwNSwgMjI0LCA5OSwgNTYsIDEsIDQsIDIzMywgMjIzLCA1NiwgMSwgNCwgMjE5LCAxOTMsIDU2LCAxLCA0LCAKKyAgICAyMTgsIDg0LCA1NiwgMSwgNCwgMTEyLCA1NiwgMSwgNCwgMjI3LCAyNDIsIDU2LCAxLCA0LCAxNjIsIDU2LCAxLCA0LCAyNDEsIAorICAgIDE4NywgNTYsIDEsIDQsIDI0MCwgMjI5LCA1NiwgMSwgNCwgMjQxLCAyNDUsIDU2LCAxLCA0LCAyNDEsIDc1LCA1NiwgMSwgNCwgCisgICAgMjMwLCAxMDcsIDU2LCAxLCA0LCAyMDUsIDU2LCAxLCA0LCAyMjMsIDM4LCA1NiwgMSwgNCwgMjIyLCAxNDIsIDU2LCAxLCA0LCAKKyAgICAyMjMsIDEzMSwgNTYsIDEsIDQsIDIyMiwgMjEzLCA4OCwgMjQsIDIzNCwgNjQsIDg4LCAyNCwgMjI4LCAyMzEsIDg4LCAyNCwgCisgICAgMjE2LCAxMDIsIDg4LCAyNCwgMjIzLCAyOSwgODgsIDI0LCAyMzAsIDIyMiwgODgsIDI0LCAyMjUsIDk4LCA4OCwgMjQsIAorICAgIDIxOSwgMTUwLCA4OCwgMjQsIDIzNiwgNjMsIDg4LCAyNCwgMjUwLCA1NCwgODgsIDI0LCAyNTAsIDExNCwgODgsIDI0LCAKKyAgICAyMzQsIDExNiwgODgsIDI0LCAyMTYsIDE3NCwgODgsIDI0LCAyMjUsIDEzNCwgODgsIDI0LCAyNDEsIDE3OSwgODgsIDI0LCAKKyAgICAyMzQsIDY1LCA2MSwgODgsIDI0LCAyMjgsIDIzMiwgNjEsIDg4LCAyNCwgMjE2LCAxMDMsIDYxLCA4OCwgMjQsIDIyMywgMzAsIAorICAgIDYxLCA4OCwgMjQsIDIzMCwgMjIzLCA2MSwgODgsIDI0LCAyMjUsIDk5LCA2MSwgODgsIDI0LCAyMTksIDE1MSwgNjEsIDg4LCAKKyAgICAyNCwgMjM2LCA2NCwgNjEsIDg4LCAyNCwgMjUwLCA1NSwgNjEsIDg4LCAyNCwgMjUwLCAxMTUsIDYxLCA4OCwgMjQsIDIzNCwgCisgICAgMTE3LCA2MSwgODgsIDI0LCAyMTYsIDE3NSwgNjEsIDg4LCAyNCwgMjI1LCAxMzUsIDYxLCA4OCwgMjQsIDI0MSwgMTgwLCAKKyAgICA2MSwgODgsIDI0LCAyNTAsIDU1LCA2OSwgODgsIDIzNCwgOSwgMTM1LCAyMjYsIDIyMSwgODgsIDIzNCwgOSwgMTM1LCAxNDQsIAorICAgIDI0MCwgMjI5LCA4OCwgMTU0LCAxMTEsIDg4LCAxNTQsIDEwNSwgODgsIDE1NCwgMTU4LCA4OCwgMTU0LCAxNjEsIDg4LCAKKyAgICAxNTQsIDE5MCwgODgsIDE1NCwgMTk1LCA4OCwgMTU0LCAxOTksIDg4LCAxNTQsIDE5NiwgODgsIDE1NCwgMjAxLCA4OCwgCisgICAgMTU0LCAyMTYsIDI0OCwgODgsIDE1NCwgMjMwLCAxMzMsIDg4LCAxNTQsIDI0NCwgMTA0LCA4OCwgMTU0LCAyMTIsIDQwLCAKKyAgICA4OCwgMTU0LCAyMTEsIDIxNCwgODgsIDE1NCwgMjMxLCA0NCwgODgsIDE1NCwgMjQ1LCAyMzEsIDg4LCAxNTQsIDIxOCwgMzgsIAorICAgIDg4LCAxNTQsIDIxOCwgMTM0LCA4OCwgMTU0LCAyNDEsIDI1MSwgODgsIDE1NCwgMjE5LCA1NiwgODgsIDE1NCwgMjI5LCAKKyAgICAyMDksIDg4LCAxNTQsIDIxOSwgNiwgODgsIDE1NCwgMjQ0LCAxMTAsIDg4LCAxNTQsIDI0OSwgMjA4LCA4OCwgMTU0LCAyMzMsIAorICAgIDEzMSwgODgsIDE1NCwgMjIzLCA3NCwgODgsIDE1NCwgMjUxLCAyMywgODgsIDE1NCwgMjE4LCA4OCwgODgsIDE1NCwgMjE4LCAKKyAgICAyMSwgODgsIDE1NCwgMjQ1LCAxMzUsIDg4LCAxNTQsIDIyMywgNjYsIDg4LCAxNTQsIDI1NCwgMTU5LCA4OCwgMTU0LCAyNDQsIAorICAgIDEzNiwgODgsIDE1NCwgMjIzLCA2NCwgODgsIDE1NCwgMjIwLCAxNTgsIDg4LCAxNTQsIDIyMywgMTMwLCAzNywgMTU0LCAKKyAgICAyMjQsIDE1LCAzNywgMTU0LCAyMzQsIDg2LCAzNywgMTU0LCAyMjEsIDIwMCwgMzcsIDE1NCwgMjM0LCA1LCAzNywgNTQsIAorICAgIDIxNiwgMjQ5LCAyMjYsIDIwMSwgODUsIDIxOCwgMjM2LCAzNywgNTQsIDIxNSwgNzQsIDIyNiwgMjAxLCA4NSwgMjE4LCAKKyAgICAyMzYsIDM3LCA1NCwgMjE2LCAxNjQsIDIyNiwgMjAxLCA4NSwgMjE4LCAyMzYsIDM3LCA1NCwgMjQ0LCAyNCwgMjI2LCAyMDEsIAorICAgIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyNDQsIDEyMywgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMTksIDExNCwgCisgICAgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAyMjAsIDExOSwgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMzcsIDU0LCAKKyAgICAyNDUsIDE5MywgMjI2LCAyMDEsIDg1LCAyMTgsIDIzNiwgMjI1LCAyNTUsIDUwLCAzNywgNTQsIDIxNSwgNzQsIDExMSwgMzcsIAorICAgIDU0LCAyMTUsIDc0LCAxMDUsIDM3LCA1NCwgMjE1LCA3NCwgMTU4LCAzNywgNTQsIDIxNSwgNzQsIDE2MSwgMzcsIDU0LCAKKyAgICAyMTUsIDc0LCAxOTAsIDM3LCA1NCwgMjE1LCA3NCwgMTk1LCAzNywgNTQsIDIxNSwgNzQsIDE5OSwgMzcsIDU0LCAyMTUsIAorICAgIDc0LCAxOTYsIDM3LCA1NCwgMjE1LCA3NCwgMjAxLCAzNywgNTQsIDIxNiwgMTYzLCAzNywgNTQsIDIxNiwgMTY0LCAxMTEsIAorICAgIDM3LCA1NCwgMjE2LCAxNjQsIDEwNSwgMzcsIDU0LCAyMTYsIDE2NCwgMTU4LCAzNywgNTQsIDIxNiwgMTY0LCAxNjEsIDM3LCAKKyAgICA1NCwgMjE2LCAxNjQsIDE5MCwgMzcsIDI0LCAyMzQsIDY0LCAzNywgMjQsIDIyOCwgMjMxLCAzNywgMjQsIDIxNiwgMTAyLCAKKyAgICAzNywgMjQsIDIyMywgMjksIDM3LCAyNCwgMjMwLCAyMjIsIDM3LCAyNCwgMjI1LCA5OCwgMzcsIDI0LCAyMTksIDE1MCwgMzcsIAorICAgIDI0LCAyMzYsIDYzLCAzNywgMjQsIDI1MCwgNTQsIDM3LCAyNCwgMjUwLCAxMTQsIDM3LCAyNCwgMjM0LCAxMTYsIDM3LCAyNCwgCisgICAgMjE2LCAxNzQsIDM3LCAyNCwgMjI1LCAxMzQsIDM3LCAyNCwgMjQxLCAxNzksIDM3LCAyNCwgMjM0LCA2NSwgNjEsIDM3LCAKKyAgICAyNCwgMjI4LCAyMzIsIDYxLCAzNywgMjQsIDIxNiwgMTAzLCA2MSwgMzcsIDI0LCAyMjMsIDMwLCA2MSwgMzcsIDI0LCAyMzAsIAorICAgIDIyMywgNjEsIDM3LCAyNCwgMjI1LCA5OSwgNjEsIDM3LCAyNCwgMjE5LCAxNTEsIDYxLCAzNywgMjQsIDIzNiwgNjQsIDYxLCAKKyAgICAzNywgMjQsIDI1MCwgNTUsIDYxLCAzNywgMjQsIDI1MCwgMTE1LCA2MSwgMzcsIDI0LCAyMzQsIDExNywgNjEsIDM3LCAyNCwgCisgICAgMjE2LCAxNzUsIDYxLCAzNywgMjQsIDIyNSwgMTM1LCA2MSwgMzcsIDI0LCAyNDEsIDE4MCwgNjEsIDM3LCAyMzQsIDksIAorICAgIDEzNSwgMjUwLCAxNTYsIDM3LCAyMzQsIDksIDEzNSwgMjM1LCA1MywgMzcsIDI0LCAyMzYsIDY0LCA2OSwgMjM0LCA5LCAKKyAgICAyMTgsIDE2MSwgODcsIDM3LCAxNTQsIDExMSwgMzcsIDE1NCwgMTA1LCAzNywgMTU0LCAxNTgsIDM3LCAxNTQsIDE2MSwgMzcsIAorICAgIDE1NCwgMTkwLCAzNywgMTU0LCAxOTUsIDM3LCAxNTQsIDE5OSwgMzcsIDE1NCwgMTk2LCAzNywgMTU0LCAyMDEsIDM3LCAKKyAgICAxNTQsIDIxNiwgMjQ4LCAzNywgMTU0LCAyMzAsIDEzMywgMzcsIDE1NCwgMjQ0LCAxMDQsIDM3LCAxNTQsIDIxMiwgNDAsIAorICAgIDM3LCAxNTQsIDIxMSwgMjE0LCAzNywgMTU0LCAyMzEsIDQ0LCAzNywgMTU0LCAyNDUsIDIzMSwgMzcsIDE1NCwgMjE4LCAzOCwgCisgICAgMzcsIDE1NCwgMjE4LCAxMzQsIDM3LCAxNTQsIDI0MSwgMjUxLCAzNywgMTU0LCAyMTksIDU2LCAzNywgMTU0LCAyMjksIAorICAgIDIwOSwgMzcsIDE1NCwgMjE5LCA2LCAzNywgMTU0LCAyNDQsIDExMCwgMzcsIDE1NCwgMjQ5LCAyMDgsIDM3LCAxNTQsIDIzMywgCisgICAgMTMxLCAzNywgMTU0LCAyMjEsIDE3NiwgMzcsIDE1NCwgMjMxLCAxOTQsIDM3LCAxNTQsIDI0NCwgMTQ1LCAzNywgMTU0LCAKKyAgICAyMTgsIDUwLCAzNywgMTU0LCAyNDUsIDQyLCAzNywgMTU0LCAyMjQsIDE5MCwgMzcsIDE1NCwgMjUzLCAyMDQsIDM3LCAxNTQsIAorICAgIDIzNSwgMTY1LCAzNywgMTU0LCAyMjMsIDY0LCAzNywgMTU0LCAyNDksIDE3MiwgMzcsIDE1NCwgMjQ5LCAxNjMsIDM3LCAKKyAgICAxNTQsIDI0MSwgMTcyLCAzNywgMTU0LCAyNTAsIDE4MiwgMzcsIDE1NCwgMjMyLCAxMTYsIDM3LCAxNTQsIDIzMywgNTIsIAorICAgIDM3LCAxNTQsIDIyMiwgMjU0LCAzNywgMTU0LCAyMzEsIDg4LCAzNywgMTU0LCAyMjMsIDkwLCAzNywgMTU0LCAyMTgsIDg4LCAKKyAgICAzNywgMTU0LCAyMTgsIDIxLCAzNywgMTU0LCAyNDUsIDEzNSwgMzcsIDE1NCwgMjIzLCA2NiwgMzcsIDE1NCwgMjU0LCAxNTksIAorICAgIDM3LCAxNTQsIDIyOCwgMjE3LCAzNywgNTQsIDIxNiwgMTY0LCAxOTUsIDM3LCA1NCwgMjE2LCAxNjQsIDE5OSwgMzcsIDU0LCAKKyAgICAyMTYsIDE2NCwgMTk2LCAzNywgNTQsIDIxNiwgMTY0LCAyMDEsIDM3LCA1NCwgMjQ0LCAyMywgMzcsIDU0LCAyNDQsIDI0LCAKKyAgICAxMTEsIDM3LCA1NCwgMjQ0LCAyNCwgMTA1LCAzNywgNTQsIDI0NCwgMjQsIDE1OCwgMzcsIDU0LCAyNDQsIDI0LCAxNjEsIAorICAgIDM3LCA1NCwgMjQ0LCAyNCwgMTkwLCAzNywgNTQsIDI0NCwgMjQsIDE5NSwgMzcsIDU0LCAyNDQsIDI0LCAxOTksIDM3LCA1NCwgCisgICAgMjQ0LCAyNCwgMTk2LCAzNywgNTQsIDI0NCwgMjQsIDIwMSwgMzcsIDU0LCAyNDQsIDEyMiwgMTEwLCAyMTcsIDQsIDE2LCAKKyAgICAzMSwgMjM1LCAxMzksIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0NCwgMTU2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMzEsIAorICAgIDE2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjU0LCA1NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjMxLCAxMzcsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDIzNSwgNTEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIzNSwgNTIsIDExMCwgMjE3LCA0LCAxNiwgCisgICAgMzEsIDI1MywgMTk2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyMjAsIDEzOCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjI2LCAKKyAgICAyNDMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDIyOCwgNDUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgOTMsIDQyLCAyNDEsIAorICAgIDE5NywgNDIsIDI0NSwgOTYsIDQyLCAyNDUsIDUxLCAyMzIsIDIyNSwgMjMyLCAyNDYsIDUwLCAzNywgNTYsIDYxLCAzNywgCisgICAgNTYsIDc0LCAzNywgNTYsIDY5LCAzNywgNTYsIDc2LCAzNywgNTYsIDc4LCAzNywgNTYsIDE3NiwgMzcsIDU2LCAyMzQsIDk4LCAKKyAgICAzNywgNTYsIDIzMywgMjIzLCAzNywgNTYsIDIzNCwgMTg4LCAzNywgNTYsIDIzNCwgMzQsIDM3LCA1NiwgMjA2LCAzNywgNTYsIAorICAgIDIxOSwgMTkzLCAzNywgNTYsIDIxOCwgODQsIDM3LCA1NiwgMjIxLCAxODMsIDM3LCA1NiwgMjE5LCA2MCwgMzcsIDU2LCAKKyAgICAyMTcsIDEwNiwgMzcsIDU2LCAyMTYsIDExOCwgMzcsIDU2LCAyMTUsIDExOSwgMzcsIDU2LCAyMTcsIDIzLCAzNywgNTYsIAorICAgIDExMiwgMzcsIDU2LCAxOTgsIDM3LCA1NiwgMjI4LCAyMzgsIDM3LCA1NiwgMjI3LCAyNDIsIDM3LCA1NiwgMjI5LCAxMTIsIAorICAgIDM3LCA1NiwgMjI4LCA3OSwgMzcsIDU2LCAxNjIsIDM3LCA1NiwgMjQxLCAxODcsIDM3LCA1NiwgMjQwLCAyMjksIDM3LCA1NiwgCisgICAgMjQxLCAyNDUsIDM3LCA1NiwgMjQxLCA3NSwgMzcsIDU2LCAxODYsIDM3LCA1NiwgMjMwLCAyMzUsIDM3LCA1NiwgMjMwLCAKKyAgICAxMDcsIDM3LCA1NiwgMjMxLCA5NiwgMzcsIDU2LCAyMzAsIDE2NiwgMzcsIDU2LCAxOTIsIDM3LCA1NiwgMjEwLCAyMTIsIAorICAgIDM3LCA1NiwgMjEwLCAyNDQsIDM3LCA1NiwgMjA1LCAzNywgNTYsIDIyMywgMzgsIDM3LCA1NiwgMjIyLCAxNDIsIDM3LCA1NiwgCisgICAgMjIzLCAxMzEsIDM3LCA1NiwgMjIyLCAyMTMsIDM3LCA1NiwgMjEyLCA2NSwgMzcsIDU2LCAyMTEsIDI1MCwgMzcsIDU2LCAKKyAgICAyMTIsIDIyLCAzNywgNTYsIDIxMSwgMjI3LCA0MiwgMjU0LCA3OSwgNDIsIDI1MywgMjQ3LCA0MiwgMjU0LCAxMDMsIDQyLCAKKyAgICAyNTUsIDQwLCA0MiwgMjM1LCAyMzMsIDQyLCAyMzUsIDIwMywgNDIsIDIxNCwgMTY2LCA0MiwgMjQ1LCA3NCwgNDIsIDI0NSwgCisgICAgMjE0LCA0MiwgMjI2LCAxOTAsIDQyLCAyMjYsIDE4NCwgNDIsIDIzNCwgMjUxLCA0MiwgMjM0LCAyMjAsIDQyLCAyMzQsIAorICAgIDIxNywgNDIsIDI0MywgOTksIDQyLCAyNDMsIDEwOCwgNDIsIDI0MiwgMjExLCA0MiwgMjQyLCAyMDcsIDQyLCAyMzMsIDE1NiwgCisgICAgNDIsIDI0MiwgMjAwLCA0MiwgMjM0LCA3OCwgNDIsIDIzNCwgNzcsIDQyLCAyMzQsIDc2LCA0MiwgMjM0LCA3NSwgNDIsIAorICAgIDI0MiwgOTMsIDQyLCAyNDIsIDkyLCA0MiwgMjMzLCAxOTksIDQyLCAyMzMsIDIwMSwgNDIsIDIzNCwgMTg0LCA0MiwgMjM0LCAKKyAgICA3LCA0MiwgMjM0LCAxNCwgNDIsIDIyMiwgMTgsIDQyLCAyMjEsIDIzOSwgNDIsIDIxOSwgMTMxLCA0MiwgMjIwLCAxNDMsIAorICAgIDQyLCAyMjAsIDE0MiwgNDIsIDI0OCwgMjI2LCA0MiwgMjQ4LCA0NCwgNDIsIDI0NywgMTI5LCA0MiwgMjE2LCAzMywgNDIsIAorICAgIDIyOSwgMjA1LCA0MiwgMjI4LCA0NiwgNDIsIDI0MiwgMzksIDQyLCAyMjYsIDg4LCA0MiwgMjI2LCA4NywgNDIsIDI1MiwgCisgICAgMTk2LCA0MiwgMjI1LCAxMDgsIDQyLCAyMjUsIDcyLCA0MiwgMjI1LCA3MywgNDIsIDI1MSwgMjQyLCA0MiwgMjQwLCAyMjgsIAorICAgIDQyLCAyNDAsIDIyNCwgNDIsIDI1MSwgOTksIDQyLCAyNDAsIDIxMSwgNDIsIDI0MSwgMjIyLCA0MiwgMjI1LCAxNjIsIDQyLCAKKyAgICAyMjUsIDE5NywgNDIsIDI0MSwgMjA1LCA0MiwgMjI1LCAxOTQsIDQyLCAyMjUsIDIxMCwgNDIsIDI1MiwgNjksIDQyLCAyMjUsIAorICAgIDksIDQyLCAyNTEsIDE4OCwgNDIsIDI0MSwgNjMsIDQyLCAyMjQsIDI1MywgNDIsIDI0MSwgNTUsIDQyLCAyNDEsIDU3LCA0MiwgCisgICAgMjMxLCAyMDYsIDQyLCAyMzEsIDIwMiwgNDIsIDIzMSwgMjExLCA0MiwgMjMxLCAxNTUsIDQyLCAyMzEsIDE4MCwgNDIsIAorICAgIDIzMCwgMjAyLCA0MiwgMjMwLCAxODEsIDQyLCAyMzAsIDE4MCwgNDIsIDIzMSwgNzksIDQyLCAyMzEsIDc2LCA0MiwgMjMxLCAKKyAgICA4MCwgNDIsIDIxMSwgMTAyLCA0MiwgMjExLCAxMDAsIDQyLCAyMTAsIDIwMSwgNDIsIDIyMiwgMjI5LCA0MiwgMjIyLCAyMzMsIAorICAgIDQyLCAyMjIsIDExOSwgNDIsIDIyMiwgMTEzLCA0MiwgMjIzLCA4OCwgNDIsIDIyMywgODUsIDQyLCAyMTIsIDM4LCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjEwLCA4NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDExMSwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDEwNSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE1OCwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE2MSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5MCwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5OSwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDE5NiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIwMSwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNiwgMjQ4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgCisgICAgMjQ1LCAxNzUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDc2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAKKyAgICAyNDAsIDI0NiwgMjE2LCAxNjUsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyNDQsIDEzLCAxMTAsIDIxNywgNCwgCisgICAgMTYsIDMxLCAyNDAsIDI0NiwgMjQ0LCAxMjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTksIDEyMSwgMTEwLCAKKyAgICAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIyMCwgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDAsIDI0NiwgMjQ1LCAKKyAgICAxOTgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMjgsIDIwMiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAKKyAgICAyNDYsIDIxNSwgNzMsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY3LCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyNDAsIDI0NiwgMjE1LCA2MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQwLCAyNDYsIDIxNSwgNjQsIDExMCwgMjE3LCAKKyAgICA0LCAxNiwgMzEsIDI0MCwgMjQ2LCAyMTUsIDY5LCA0MiwgMjQwLCAyMzcsIDQyLCAyNDgsIDIyOSwgNDIsIDI1MywgMjAwLCAKKyAgICA0MiwgMTMwLCA0MiwgMjI2LCAxMjksIDQyLCAyMjUsIDIyOSwgNDIsIDI0NywgMTU1LCA0MiwgMjQ3LCAxNTYsIDIxOCwgCisgICAgMjM1LCA0MiwgMjQ3LCAxNTYsIDI0OSwgMTE2LCA0MiwgMjM1LCAxNjIsIDQyLCAyNDUsIDk5LCAyMjksIDIxMCwgMjQxLCAKKyAgICAyMjMsIDQyLCAyNDUsIDk5LCAyMjksIDIxMCwgMjE3LCAxNzUsIDQyLCAyNDUsIDk5LCAyMjksIDIxMCwgMjE3LCA3NSwgNDIsIAorICAgIDI0NSwgOTksIDIyOSwgMjEwLCAyMzEsIDc1LCA0MiwgMjQ5LCAxNjUsIDQyLCAyMjYsIDk0LCAyNTQsIDEzMywgNDIsIDE5OCwgCisgICAgNDIsIDIzMCwgMTA4LCA2MSwgNDIsIDE4NiwgNDIsIDE3NiwgNDIsIDIzNCwgMTkxLCA0MiwgMjMxLCAxMzQsIDQyLCAyNDMsIAorICAgIDg3LCA0MiwgMjUxLCAyNiwgNDIsIDIzNCwgMTkwLCA0MiwgMjI1LCAxNTMsIDQyLCAyMjksIDg2LCA0MiwgMjMwLCAxMDgsIAorICAgIDI0NSwgMTQsIDQyLCAyMzAsIDEwOCwgMjQzLCAyMDksIDQyLCAyMzEsIDIwLCA0MiwgMjM0LCAxNDAsIDQyLCAyNDAsIDE3MCwgCisgICAgNDIsIDIzNCwgMTAwLCA0MiwgMjMwLCAyMzcsIDQyLCAyNDIsIDIyMywgNDIsIDIxNiwgMTIwLCA0MiwgMjMwLCAxMDgsIAorICAgIDE1NiwgNDIsIDIzMCwgMTc0LCA0MiwgMjQ3LCAxNjUsIDQyLCAyMzQsIDQ2LCA0MiwgMjQ0LCA1MywgNDIsIDIyOCwgMTE3LCAKKyAgICA0MiwgMjMwLCAxMDgsIDE5NCwgNDIsIDIzMCwgMTcxLCA0MiwgMjQ5LCAyNDcsIDQyLCAyMzQsIDQwLCA0MiwgMjMwLCAxNzIsIAorICAgIDIxOCwgMjM1LCA0MiwgMjQ5LCAyNDgsIDIxOCwgMjM1LCA0MiwgMjMyLCA1NSwgMjE4LCAyMzUsIDQyLCAyMzQsIDQxLCAKKyAgICAyMTgsIDIzNSwgNDIsIDIzMCwgMTcyLCAyNDksIDExNiwgNDIsIDI0OSwgMjQ4LCAyNDksIDExNiwgNDIsIDIzMiwgNTUsIAorICAgIDI0OSwgMTE2LCA0MiwgMjM0LCA0MSwgMjQ5LCAxMTYsIDQyLCAyMzIsIDU1LCAxMTUsIDIyMiwgOTMsIDQyLCAyMzIsIDU1LCAKKyAgICAxMTUsIDIyMiwgOTQsIDIxOCwgMjM1LCA0MiwgMTkxLCA0MiwgMjM0LCAxLCA0MiwgMjMwLCAxMTAsIDQyLCAyNDIsIDE1OCwgCisgICAgNDIsIDIyMywgMTc5LCA0MiwgMjIzLCAxODAsIDExNSwgMjIyLCA5MywgNDIsIDIyMywgMTgwLCAxMTUsIDIyMiwgOTQsIAorICAgIDIxOCwgMjM1LCA0MiwgMjI0LCAxNjUsIDQyLCAyMjgsIDE4LCA0MiwgMjMwLCAxMDgsIDIyMiwgOTMsIDQyLCAyMzAsIDEwOSwgCisgICAgNDIsIDIyNCwgMTE5LCA0MiwgMjI3LCAxODAsIDQyLCAyMzAsIDEwOCwgMjE0LCAxMDUsIDQyLCAyMzAsIDU0LCA0MiwgMjMzLCAKKyAgICAxOTEsIDQyLCAyMzAsIDU1LCAyMzEsIDc5LCA0MiwgMjI0LCAxMTgsIDQyLCAyMjcsIDE3OSwgNDIsIDIzMCwgMTA4LCAyMTIsIAorICAgIDk4LCA0MiwgMjMwLCA0OCwgNDIsIDIzMywgMTg5LCA0MiwgMjMwLCA0OSwgMjMxLCA3OSwgNDIsIDIzNSwgMzAsIDIyNiwgCisgICAgMjI0LCA0MiwgMjMyLCA1NSwgMjI2LCAyMjQsIDQyLCAyNTQsIDE0NCwgNDIsIDI1MSwgMTY4LCA0MiwgMjUwLCAyMjIsIDQyLCAKKyAgICAyNTAsIDE5OSwgNDIsIDI1MSwgNzUsIDExNSwgMjM0LCAxNDAsIDQyLCAyNDksIDI0NiwgNDIsIDI0OCwgMTUwLCA0MiwgCisgICAgMjQyLCA3OSwgNDIsIDE2MiwgNDIsIDI0MCwgMjM4LCA0MiwgMjM2LCA2LCA0MiwgMjM0LCA1MywgNDIsIDIzNCwgNDEsIAorICAgIDI1MSwgMiwgNDIsIDIzMywgMjI1LCA0MiwgMjMyLCAxNjUsIDQyLCAyMzIsIDE2NCwgNDIsIDIzMiwgMTUzLCA0MiwgMjMyLCAKKyAgICA2OCwgNDIsIDIzMSwgMTM1LCAyMTksIDgxLCA0MiwgMjMwLCAyMDEsIDQyLCAyMzAsIDE1NywgNDIsIDIyNSwgMTUxLCA0MiwgCisgICAgMjI1LCAyMiwgNDIsIDIyNCwgMjIyLCA0MiwgMjI0LCAyMjAsIDQyLCAyMTgsIDIyOSwgNDIsIDIxOCwgMywgNDIsIDIxMiwgCisgICAgMjQsIDQyLCAyMTQsIDEwNiwgMTE1LCAxOTQsIDQyLCAxMTYsIDExNSwgMTk0LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMTExLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTA1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMTU4LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTYxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMTkwLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTk1LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMTk5LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMTk2LCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIAorICAgIDE1NCwgMjAxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAyNDgsIDExMCwgMjE3LCA0LCAxNiwgMzEsIAorICAgIDI0OCwgMTU0LCAyNDUsIDE3NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNzYsIDExMCwgMjE3LCA0LCAKKyAgICAxNiwgMzEsIDI0OCwgMTU0LCAyMTYsIDE2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDI0NCwgMTMsIDExMCwgCisgICAgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyNDQsIDEyNiwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxOSwgCisgICAgMTIxLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjIwLCAxMjEsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgCisgICAgMTU0LCAyNDUsIDE5OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIyOCwgMjAyLCAxMTAsIDIxNywgNCwgMTYsIAorICAgIDMxLCAyNDgsIDE1NCwgMjE1LCA3MywgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjcsIDExMCwgMjE3LCAKKyAgICA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDYzLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2NCwgCisgICAgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNSwgNjksIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAKKyAgICAyMTUsIDcwLCAxMTAsIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2NSwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgCisgICAgMjQ4LCAxNTQsIDIxNSwgNjYsIDExMCwgMjE3LCA0LCAxNiwgMzEsIDI0OCwgMTU0LCAyMTUsIDcyLCAxMTAsIDIxNywgNCwgCisgICAgMTYsIDMxLCAyNDgsIDE1NCwgMjE1LCA2OCwgMTEwLCAyMTcsIDQsIDE2LCAzMSwgMjQ4LCAxNTQsIDIxNiwgMTYzLCAxMTAsIAorICAgIDIxNywgNCwgMTYsIDMxLCAyNDgsIDE1NCwgMjE2LCAxNjIsIDQyLCAyNDMsIDEyNSwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgCisgICAgMjQ5LCAxNDgsIDI0MSwgMjMwLCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMjMsIDEyNSwgMjQ1LCAyMzEsIDI0MSwgMTk5LCAKKyAgICAzMSwgMjQ3LCAyMzksIDI1MywgMjE1LCAyMTYsIDE5NywgMjUyLCA2NCwgMjQxLCAxOTksIDMxLCAyMTAsIDIyMywgMjQ0LCAKKyAgICA0NiwgMjQxLCAxOTksIDMxLCAyMTIsIDU5LCAyNDEsIDE5OSwgMzEsIDI0OSwgMjExLCAyNDEsIDE5OSwgMzEsIDIxNiwgCisgICAgMTk3LCAyNTQsIDExLCAyNDEsIDE5OSwgMzEsIDI0MSwgNjcsIDIxNiwgMzksIDI0MSwgMTk5LCAzMSwgNCwgMjE3LCA2MiwgCisgICAgMjQxLCAxOTksIDMxLCAyMTUsIDIzOCwgMjQxLCAxOTksIDMxLCAyMjUsIDIyMiwgMjQxLCAxOTksIDMxLCAyMTgsIDE2MCwgCisgICAgMjQxLCAxOTksIDMxLCAyNDQsIDE0NywgMjQxLCAxOTksIDMxLCAyNDIsIDEzOSwgMjI0LCAyNDMsIDI0MSwgMTk5LCAzMSwgCisgICAgMjMwLCAxNjAsIDI0MSwgMTk5LCAzMSwgMjQ1LCAxMzQsIDI0MSwgMTk5LCAzMSwgMjQ0LCA0NywgMjQxLCAxOTksIDMxLCAKKyAgICAyMTEsIDIwNywgMjI2LCAyMDEsIDIxNiwgMTk3LCAyNDgsIDk0LCAyNDEsIDE5OSwgMzEsIDI1NCwgNTksIDI0MSwgMTk5LCAKKyAgICAzMSwgMjQ5LCAxOTMsIDI0MSwgMTk5LCAzMSwgMjUxLCAyMzUsIDIxNiwgMTM5LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTU2LCAKKyAgICAyNDEsIDE5OSwgMzEsIDIxOCwgMjQ3LCAyNTQsIDc4LCAyNDEsIDE5OSwgMzEsIDIyMywgNTYsIDI0MSwgMTk5LCAzMSwgCisgICAgMjM1LCAyMjcsIDI0MSwgMTk5LCAzMSwgMjQyLCAxMzksIDIxNywgNjIsIDI0MSwgMTk5LCAzMSwgMjMwLCAxMTYsIDI0OSwgCisgICAgMTY3LCAyNDEsIDE5OSwgMzEsIDI0MiwgMTM5LCAyMjQsIDIwMCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjU1LCAyNywgCisgICAgMjEyLCA0MCwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjUwLCAxNiwgMjQ0LCAxMDQsIDI0MSwgMTk5LCAzMSwgMjM1LCAKKyAgICAyNDAsIDI0MSwgMTk5LCAzMSwgMjQ2LCA2NSwgMjQxLCAxOTksIDMxLCAyMjMsIDU5LCAyNDEsIDE5OSwgMzEsIDI0MiwgCisgICAgMTM5LCAyMjQsIDIyNywgMjQxLCAxOTksIDMxLCAyMjQsIDE4MCwgMjQxLCAxOTksIDMxLCAyNDgsIDE2OSwgNjQsIDIxNiwgCisgICAgMTk3LCAyMzIsIDIzNiwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjQ0LCAxODIsIDI0MSwgMTk5LCAzMSwgMjI2LCAxNjcsIAorICAgIDI0MSwgMTk5LCAzMSwgMjI2LCAyNDgsIDI0MSwgMTk5LCAzMSwgMjQ4LCA2NywgMjQxLCAxOTksIDMxLCAyNDgsIDg3LCAKKyAgICAyNDEsIDE5OSwgMzEsIDIzNSwgMjU0LCAyNDEsIDE5OSwgMzEsIDI1MSwgMTU3LCAyNDEsIDE5OSwgMzEsIDI0OSwgMjI5LCAKKyAgICAyMTYsIDQzLCAyMzEsIDgxLCAyNDEsIDE5OSwgMzEsIDI0MywgOTQsIDIxNiwgMzksIDI0MSwgMTk5LCAzMSwgMjI0LCAxMjgsIAorICAgIDIxNCwgMTU0LCAyNDEsIDE5OSwgMzEsIDIyNiwgMTY2LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMTIsIDEzLCAyNDEsIAorICAgIDE5OSwgMzEsIDIyMywgNDgsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDI1MCwgMjI4LCAyNDEsIDE5OSwgMzEsIDIxNiwgCisgICAgMTk3LCAyNTQsIDcsIDIxNiwgMTM0LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMzQsIDE4NSwgMjE4LCAxMzYsIDIzMCwgCisgICAgMTIwLCAyNDEsIDE5OSwgMzEsIDI0OCwgNDAsIDI0MSwgMTk5LCAzMSwgMjE2LCAxOTcsIDIzMSwgMTU3LCAyMzEsIDIwNywgCisgICAgMjQxLCAxOTksIDMxLCAyNTUsIDI4LCAyNDEsIDE5OSwgMzEsIDIxNiwgMTk3LCAyMTIsIDU0LCAyNDEsIDE5OSwgMzEsIAorICAgIDIxNiwgMTk3LCAyNDMsIDU0LCAyMTEsIDIzOSwgMjQxLCAxOTksIDMxLCAyMTYsIDE5NywgMjM1LCA1OCwgMjMzLCAxMTMsIAorICAgIDI0MSwgMTk5LCAzMSwgMjQ3LCAxOTIsIDI0MSwgMTk5LCAzMSwgMjMyLCAyMjYsIDI0MSwgMTk5LCAzMSwgMjM1LCAyMzAsIAorICAgIDIxNSwgMTg4LCAyNDEsIDE5OSwgMzEsIDQsIDIyNCwgMjAwLCAyNDEsIDE5OSwgMzEsIDI1NCwgMjI2LCAyNDksIDIyMCwgCisgICAgMjQxLCAxOTksIDMxLCAyNTIsIDY3LCAyNDksIDIyMCwgOCwgMywgMjM1LCAxNjYsIDgsIDMsIDIzNSwgMTU5LCA4LCAzLCAKKyAgICA3NCwgOCwgMywgMjM1LCAxODksIDgsIDMsIDIzNiwgNjUsIDgsIDMsIDIzNiwgNDgsIDgsIDMsIDIzNiwgNjcsIDgsIDMsIAorICAgIDIzNiwgNjYsIDgsIDMsIDI1MywgMjE0LCA4LCAzLCAyNTMsIDE3NywgOCwgMywgNjEsIDgsIDMsIDI1NCwgODAsIDgsIDMsIAorICAgIDIxNCwgMTY0LCA4LCAzLCAyMTQsIDE2NywgOCwgMywgMjE0LCAxNjUsIDgsIDMsIDIyNiwgMTQ0LCA4LCAzLCAyMjYsIDExOCwgCisgICAgOCwgMywgNzgsIDgsIDMsIDIyNiwgMTc5LCA4LCAzLCAyNDUsIDQzLCA4LCAzLCA3NiwgOCwgMywgMjExLCAxOTUsIDgsIDMsIAorICAgIDI1MSwgMjM2LCA4LCAzLCAyNTEsIDIzMywgOCwgMywgMjUyLCAxNCwgOCwgMywgMjUxLCAyNDYsIDgsIDMsIDI1MiwgMywgOCwgCisgICAgMywgMjUyLCAyLCA4LCAzLCAyNTIsIDUsIDgsIDMsIDI1MiwgNCwgOCwgMywgMjUyLCAxMjksIDgsIDMsIDI1MiwgMTIxLCA4LCAKKyAgICAzLCAyNTIsIDE5OSwgOCwgMywgMjUyLCAxNTAsIDgsIDMsIDI1MSwgMTA5LCA4LCAzLCAyNTEsIDExMywgOCwgMywgMjUxLCAKKyAgICAxMTAsIDgsIDMsIDI1MSwgMTg3LCA4LCAzLCAyNTEsIDE3MSwgOCwgMywgMjUxLCAyMTMsIDgsIDMsIDI1MSwgMTkzLCA4LCAKKyAgICAzLCAyNTIsIDI5LCA4LCAzLCAyNTIsIDgzLCA4LCAzLCAyNTIsIDQxLCA4LCAzLCAyNTEsIDk1LCA4LCAzLCAyNTEsIDkyLCAKKyAgICA4LCAzLCAyNTEsIDEzMywgOCwgMywgMjUxLCAxMDgsIDgsIDMsIDI1MSwgMTAyLCA4LCAzLCAyNTEsIDEwNiwgOCwgMywgCisgICAgMjUxLCA4MCwgOCwgMywgMjUxLCA3OCwgOCwgMywgMjUxLCA4NSwgOCwgMywgMjUxLCA4MywgOCwgMywgMjUxLCA4MSwgOCwgCisgICAgMywgMjUxLCA4MiwgOCwgMywgMjI1LCA1MiwgOCwgMywgMjI1LCA0OCwgOCwgMywgMjI1LCAxMTEsIDgsIDMsIDIyNSwgNjIsIAorICAgIDgsIDMsIDIyNSwgNzgsIDgsIDMsIDIyNSwgMTA1LCA4LCAzLCAyMjUsIDEwMSwgOCwgMywgMjI1LCAyNDQsIDgsIDMsIDIyNSwgCisgICAgMjM0LCA4LCAzLCAxOTEsIDgsIDMsIDIyNiwgMjUsIDgsIDMsIDIyNCwgMTM4LCA4LCAzLCAyMjQsIDE0MCwgOCwgMywgMjI0LCAKKyAgICAxMzksIDgsIDMsIDIyNCwgMjM2LCA4LCAzLCAyMjQsIDIyNSwgOCwgMywgMjI1LCAxOSwgOCwgMywgMjI0LCAyNDgsIDgsIDMsIAorICAgIDIyNCwgMTI0LCA4LCAzLCAyMjQsIDEyMCwgOCwgMywgMjI0LCAxNTMsIDgsIDMsIDIyNCwgMTM3LCA4LCAzLCAyMjQsIDEyOSwgCisgICAgOCwgMywgMjI0LCAxMzUsIDgsIDMsIDIyNCwgMTAzLCA4LCAzLCAyMjQsIDEwMiwgOCwgMywgMjI0LCAxMDcsIDgsIDMsIAorICAgIDIyNCwgMTA2LCA4LCAzLCAyMjQsIDEwNCwgOCwgMywgMjI0LCAxMDUsIDgsIDMsIDI1MiwgMTA0LCA4LCAzLCAyNTIsIDEwMywgCisgICAgOCwgMywgMjUyLCAxMTAsIDgsIDMsIDI1MiwgMTA1LCA4LCAzLCAyNTIsIDEwNywgOCwgMywgMjUyLCAxMDYsIDgsIDMsIAorICAgIDI1MiwgMTA5LCA4LCAzLCAyNTIsIDEwOCwgOCwgMywgMjUyLCAxMTYsIDgsIDMsIDI1MiwgMTE1LCA4LCAzLCAyNTIsIDExOSwgCisgICAgOCwgMywgMjUyLCAxMTcsIDgsIDMsIDI1MiwgOTUsIDgsIDMsIDI1MiwgOTcsIDgsIDMsIDI1MiwgOTYsIDgsIDMsIDI1MiwgCisgICAgMTAwLCA4LCAzLCAyNTIsIDk5LCA4LCAzLCAyNTIsIDEwMiwgOCwgMywgMjUyLCAxMDEsIDgsIDMsIDI1MiwgMTExLCA4LCAzLCAKKyAgICAyNTIsIDExNCwgOCwgMywgMjUyLCAxMTIsIDgsIDMsIDI1MiwgOTEsIDgsIDMsIDI1MiwgOTAsIDgsIDMsIDI1MiwgOTgsIDgsIAorICAgIDMsIDI1MiwgOTQsIDgsIDMsIDI1MiwgOTIsIDgsIDMsIDI1MiwgOTMsIDgsIDMsIDI1MiwgODcsIDgsIDMsIDI1MiwgODYsIAorICAgIDgsIDMsIDI1MiwgODksIDgsIDMsIDI1MiwgODgsIDgsIDMsIDIyOSwgMTc0LCA4LCAzLCAyMjksIDE3MywgOCwgMywgMjI5LCAKKyAgICAxNzksIDgsIDMsIDIyOSwgMTc1LCA4LCAzLCAyMjksIDE3NiwgOCwgMywgMjI5LCAxNzgsIDgsIDMsIDIyOSwgMTc3LCA4LCAKKyAgICAzLCAyMjksIDE4MiwgOCwgMywgMjI5LCAxODEsIDgsIDMsIDIyOSwgMTg0LCA4LCAzLCAyMjksIDE4MywgOCwgMywgMjI5LCAKKyAgICAxNzAsIDgsIDMsIDIyOSwgMTY5LCA4LCAzLCAyMjksIDE3MiwgOCwgMywgMjI5LCAxNzEsIDgsIDMsIDIyOSwgMTYzLCA4LCAKKyAgICAzLCAyMjksIDE2MiwgOCwgMywgMjI5LCAxNjcsIDgsIDMsIDIyOSwgMTY2LCA4LCAzLCAyMjksIDE2NCwgOCwgMywgMjI5LCAKKyAgICAxNjUsIDgsIDMsIDIyOSwgMTU3LCA4LCAzLCAyMjksIDE1NiwgOCwgMywgMjI5LCAxNjEsIDgsIDMsIDIyOSwgMTYwLCA4LCAKKyAgICAzLCAyMjksIDE1OCwgOCwgMywgMjI5LCAxNTksIDgsIDMsIDI0MSwgMTE3LCA4LCAzLCAyNDEsIDExNiwgOCwgMywgMjQxLCAKKyAgICAxMjIsIDgsIDMsIDI0MSwgMTE4LCA4LCAzLCAyNDEsIDExOSwgOCwgMywgMjQxLCAxMjEsIDgsIDMsIDI0MSwgMTIwLCA4LCAKKyAgICAzLCAyNDEsIDEyNSwgOCwgMywgMjQxLCAxMjQsIDgsIDMsIDI0MSwgMTI3LCA4LCAzLCAyNDEsIDEyNiwgOCwgMywgMjQxLCAKKyAgICAxMDgsIDgsIDMsIDI0MSwgMTEwLCA4LCAzLCAyNDEsIDEwOSwgOCwgMywgMjQxLCAxMTMsIDgsIDMsIDI0MSwgMTEyLCA4LCAKKyAgICAzLCAyNDEsIDExNSwgOCwgMywgMjQxLCAxMTQsIDgsIDMsIDI0MSwgMTA0LCA4LCAzLCAyNDEsIDEwMywgOCwgMywgMjQxLCAKKyAgICAxMTEsIDgsIDMsIDI0MSwgMTA3LCA4LCAzLCAyNDEsIDEwNSwgOCwgMywgMjQxLCAxMDYsIDgsIDMsIDI0MSwgOTgsIDgsIDMsIAorICAgIDI0MSwgMTAyLCA4LCAzLCAyNDEsIDEwMSwgOCwgMywgMjQxLCA5OSwgOCwgMywgMjQxLCAxMDAsIDgsIDMsIDIzMCwgMTc3LCAKKyAgICA4LCAzLCAyMzAsIDE3NiwgOCwgMywgMjMwLCAyMzUsIDgsIDMsIDIzMCwgMTgzLCA4LCAzLCAyMzAsIDIwOCwgOCwgMywgCisgICAgMjMwLCAyMjYsIDgsIDMsIDIzMCwgMjI0LCA4LCAzLCAyMzEsIDE0NCwgOCwgMywgMjMxLCAxMzksIDgsIDMsIDE4NiwgOCwgCisgICAgMywgMjMxLCAxNzcsIDgsIDMsIDIzMCwgNzksIDgsIDMsIDIzMCwgNzgsIDgsIDMsIDIzMCwgODIsIDgsIDMsIDIzMCwgODAsIAorICAgIDgsIDMsIDIzMCwgMTI2LCA4LCAzLCAyMzAsIDExMiwgOCwgMywgMjMwLCAxNjYsIDgsIDMsIDIzMCwgMTMxLCA4LCAzLCAKKyAgICAyMzEsIDMxLCA4LCAzLCAyMzEsIDk2LCA4LCAzLCAyMzAsIDYwLCA4LCAzLCAyMzAsIDU2LCA4LCAzLCAyMzAsIDEwNywgOCwgCisgICAgMywgMjMwLCA3NSwgOCwgMywgMjMwLCA2OCwgOCwgMywgMjMwLCA3MywgOCwgMywgMjMwLCAzMywgOCwgMywgMjMwLCAzMiwgCisgICAgOCwgMywgMjMwLCAzOCwgOCwgMywgMjMwLCAzNSwgOCwgMywgMjQ0LCA5MSwgOCwgMywgMjQ0LCA4NiwgOCwgMywgMjQ0LCAKKyAgICAxMjksIDgsIDMsIDI0NCwgMTA2LCA4LCAzLCAyNDQsIDE3NSwgOCwgMywgMjQ0LCAxNjYsIDgsIDMsIDI0NCwgMjA0LCA4LCAKKyAgICAzLCAyNDQsIDE3OCwgOCwgMywgMjQ0LCAxMSwgOCwgMywgMjQ0LCA1MSwgOCwgMywgMjQ0LCAzNSwgOCwgMywgMjQzLCAyMjUsIAorICAgIDgsIDMsIDI0MywgMjI0LCA4LCAzLCAyNDMsIDI0MSwgOCwgMywgMjQzLCAyMzAsIDgsIDMsIDI0MywgMjI4LCA4LCAzLCAKKyAgICAyNDMsIDIyOSwgOCwgMywgMjQzLCAyMTIsIDgsIDMsIDI0MywgMjExLCA4LCAzLCAyNDMsIDIxNSwgOCwgMywgMjQzLCAyMTMsIAorICAgIDgsIDMsIDIxMywgMTQ0LCA4LCAzLCAyMTMsIDEzOSwgOCwgMywgMjEzLCAxNzYsIDgsIDMsIDIxMywgMTUzLCA4LCAzLCAKKyAgICAyMTMsIDE2NiwgOCwgMywgMjEzLCAxNjMsIDgsIDMsIDIxMywgMTY4LCA4LCAzLCAyMTMsIDE2NywgOCwgMywgMjE0LCA3LCAKKyAgICA4LCAzLCAyMTQsIDIsIDgsIDMsIDIxNCwgMjcsIDgsIDMsIDIxNCwgMTgsIDgsIDMsIDIxMywgMTI1LCA4LCAzLCAyMTMsIAorICAgIDEyMSwgOCwgMywgMjEzLCAxMzgsIDgsIDMsIDIxMywgMTI2LCA4LCAzLCAyMTMsIDE3OCwgOCwgMywgMjEzLCAyNDQsIDgsIAorICAgIDMsIDIxMiwgMTEwLCA4LCAzLCAyMTIsIDEwOCwgOCwgMywgMjEyLCAxMTYsIDgsIDMsIDIxMiwgMTEzLCA4LCAzLCAyMTIsIAorICAgIDExMSwgOCwgMywgMjEyLCAxMTIsIDgsIDMsIDIxMiwgMTAyLCA4LCAzLCAyMTIsIDEwMSwgOCwgMywgMjEyLCAxMDYsIDgsIAorICAgIDMsIDIxMiwgMTA1LCA4LCAzLCAyMTIsIDEwMywgOCwgMywgMjEyLCAxMDQsIDgsIDMsIDI0NywgMTg2LCA4LCAzLCAyNDcsIAorICAgIDE3NCwgOCwgMywgMjQ4LCAxMSwgOCwgMywgMjQ3LCAyMTEsIDgsIDMsIDI0NywgMjQ0LCA4LCAzLCAyNDcsIDI0OCwgOCwgMywgCisgICAgMjQ3LCAyNDcsIDgsIDMsIDI0OCwgMTYwLCA4LCAzLCAyNDgsIDE1NSwgOCwgMywgMjQ4LCAyMjksIDgsIDMsIDI0OCwgMTgwLCAKKyAgICA4LCAzLCAyNDYsIDcwLCA4LCAzLCAyNDYsIDcxLCA4LCAzLCAyNDcsIDEyOCwgOCwgMywgMjQ2LCAxMTAsIDgsIDMsIDI0NywgCisgICAgMTUzLCA4LCAzLCAyNDcsIDEzMCwgOCwgMywgMjQ4LCAzOCwgOCwgMywgMjQ4LCA5OCwgOCwgMywgMjQ4LCA1MywgOCwgMywgCisgICAgMjQ2LCA2MSwgOCwgMywgMjQ2LCA1OSwgOCwgMywgMjQ2LCA4NiwgOCwgMywgMjQ2LCA2OSwgOCwgMywgMjQ2LCA2NCwgOCwgCisgICAgMywgMjQ2LCA2NywgOCwgMywgMjE2LCA2OCwgOCwgMywgMjE2LCA2MiwgOCwgMywgMjE2LCAxMTgsIDgsIDMsIDIxNiwgNzcsIAorICAgIDgsIDMsIDIxNiwgMTEwLCA4LCAzLCAyMTYsIDExMiwgOCwgMywgMjE2LCAxMTEsIDgsIDMsIDIxNywgNDcsIDgsIDMsIDIxNywgCisgICAgMzQsIDgsIDMsIDIxNywgMTA2LCA4LCAzLCAyMTcsIDU1LCA4LCAzLCAyMTUsIDEwMywgOCwgMywgMjE1LCAxMDIsIDgsIDMsIAorICAgIDIxNSwgMTA1LCA4LCAzLCAyMTUsIDEwNCwgOCwgMywgMjE2LCA2LCA4LCAzLCAyMTYsIDIsIDgsIDMsIDExMiwgOCwgMywgCisgICAgMjE2LCAxNCwgOCwgMywgMjE2LCAyMTQsIDgsIDMsIDIxNywgMjMsIDgsIDMsIDIxNiwgMjM4LCA4LCAzLCAyMTUsIDg4LCA4LCAKKyAgICAzLCAyMTUsIDgzLCA4LCAzLCAyMTUsIDExOSwgOCwgMywgMjE1LCAxMDEsIDgsIDMsIDIxNSwgODksIDgsIDMsIDIxNSwgOTksIAorICAgIDgsIDMsIDI0OCwgMTE1LCA4LCAzLCAyNDgsIDExNCwgOCwgMywgMjQ4LCAxMjAsIDgsIDMsIDI0OCwgMTE2LCA4LCAzLCAKKyAgICAyNDgsIDExNywgOCwgMywgMjQ4LCAxMTksIDgsIDMsIDI0OCwgMTE4LCA4LCAzLCAyNDgsIDEzNiwgOCwgMywgMjQ4LCAxMzUsIAorICAgIDgsIDMsIDI0OCwgMTQzLCA4LCAzLCAyNDgsIDEzNywgOCwgMywgMjQ4LCAxMDUsIDgsIDMsIDI0OCwgMTA3LCA4LCAzLCAKKyAgICAyNDgsIDEwNiwgOCwgMywgMjQ4LCAxMTAsIDgsIDMsIDI0OCwgMTA5LCA4LCAzLCAyNDgsIDExMywgOCwgMywgMjQ4LCAxMTEsIAorICAgIDgsIDMsIDI0OCwgMTI4LCA4LCAzLCAyNDgsIDEzMSwgOCwgMywgMjQ4LCAxMjksIDgsIDMsIDI0OCwgMTAxLCA4LCAzLCAKKyAgICAyNDgsIDEwMCwgOCwgMywgMjQ4LCAxMDgsIDgsIDMsIDI0OCwgMTA0LCA4LCAzLCAyNDgsIDEwMiwgOCwgMywgMjQ4LCAxMDMsIAorICAgIDgsIDMsIDIyOSwgMTMxLCA4LCAzLCAyMjksIDEzMCwgOCwgMywgMjI5LCAxMzgsIDgsIDMsIDIyOSwgMTMzLCA4LCAzLCAKKyAgICAyMjksIDEzNCwgOCwgMywgMjI5LCAxMzUsIDgsIDMsIDIyOSwgMTQ3LCA4LCAzLCAyMjksIDE0NiwgOCwgMywgMjI5LCAxNTMsIAorICAgIDgsIDMsIDIyOSwgMTQ4LCA4LCAzLCAyMjksIDEyMywgOCwgMywgMjI5LCAxMjIsIDgsIDMsIDIyOSwgMTI5LCA4LCAzLCAKKyAgICAyMjksIDEyNCwgOCwgMywgMjI5LCAxMzksIDgsIDMsIDIyOSwgMTQ1LCA4LCAzLCAyMjksIDE0MywgOCwgMywgMjI5LCAxMTUsIAorICAgIDgsIDMsIDIyOSwgMTE0LCA4LCAzLCAyMjksIDEyMCwgOCwgMywgMjI5LCAxMTgsIDgsIDMsIDIyOSwgMTE2LCA4LCAzLCAKKyAgICAyMjksIDExNywgOCwgMywgMjQxLCA4NCwgOCwgMywgMjQxLCA4MywgOCwgMywgMjQxLCA5MCwgOCwgMywgMjQxLCA4NSwgOCwgCisgICAgMywgMjQxLCA4NywgOCwgMywgMjQxLCA4NiwgOCwgMywgMjQxLCA4OSwgOCwgMywgMjQxLCA4OCwgOCwgMywgMjQxLCA5NSwgCisgICAgOCwgMywgMjQxLCA5NCwgOCwgMywgMjQxLCA5NywgOCwgMywgMjQxLCA5NiwgOCwgMywgMjQxLCA3OCwgOCwgMywgMjQxLCAKKyAgICA3OSwgOCwgMywgMjQxLCA4MSwgOCwgMywgMjQxLCA4MCwgOCwgMywgMjQxLCA4MiwgOCwgMywgMjQxLCA5MSwgOCwgMywgCisgICAgMjQxLCA5MywgOCwgMywgMjQxLCA5MiwgOCwgMywgMjQxLCA3NywgOCwgMywgMjI4LCAxOTQsIDgsIDMsIDIyOCwgMTkyLCA4LCAKKyAgICAzLCAyMjgsIDIzOCwgOCwgMywgMjI4LCAxOTcsIDgsIDMsIDIyOCwgMjIwLCA4LCAzLCAyMjgsIDIzNCwgOCwgMywgMjI4LCAKKyAgICAyMzMsIDgsIDMsIDIyOSwgMTg4LCA4LCAzLCAxOTgsIDgsIDMsIDIyOSwgMjAyLCA4LCAzLCAyMjcsIDE5MCwgOCwgMywgCisgICAgMjI3LCAxOTIsIDgsIDMsIDIyNywgMTkxLCA4LCAzLCAyMjgsIDU2LCA4LCAzLCAyMjgsIDQzLCA4LCAzLCAyMjgsIDc5LCA4LCAKKyAgICAzLCAyMjgsIDY1LCA4LCAzLCAyMjksIDg4LCA4LCAzLCAyMjksIDExMiwgOCwgMywgMjI5LCA5OSwgOCwgMywgMjI3LCAxODUsIAorICAgIDgsIDMsIDIyNywgMTgxLCA4LCAzLCAyMjcsIDI0MiwgOCwgMywgMjI3LCAxODksIDgsIDMsIDIyNywgMTg3LCA4LCAzLCAKKyAgICAyMjcsIDE4OCwgOCwgMywgMjQxLCAxNDgsIDgsIDMsIDI0MSwgMTQ3LCA4LCAzLCAyNDEsIDE1MywgOCwgMywgMjQxLCAxNDksIAorICAgIDgsIDMsIDI0MSwgMTUwLCA4LCAzLCAyNDEsIDE1MiwgOCwgMywgMjQxLCAxNTEsIDgsIDMsIDI0MSwgMTU4LCA4LCAzLCAKKyAgICAyNDEsIDE1NywgOCwgMywgMjQxLCAxNjAsIDgsIDMsIDI0MSwgMTU5LCA4LCAzLCAyNDEsIDE0MCwgOCwgMywgMjQxLCAxNDIsIAorICAgIDgsIDMsIDI0MSwgMTQxLCA4LCAzLCAyNDEsIDE0NCwgOCwgMywgMjQxLCAxNDYsIDgsIDMsIDI0MSwgMTQ1LCA4LCAzLCAKKyAgICAyNDEsIDE1NCwgOCwgMywgMjQxLCAxNTYsIDgsIDMsIDI0MSwgMTU1LCA4LCAzLCAyNDEsIDEzNiwgOCwgMywgMjQxLCAxMzUsIAorICAgIDgsIDMsIDI0MSwgMTQzLCA4LCAzLCAyNDEsIDEzOSwgOCwgMywgMjQxLCAxMzcsIDgsIDMsIDI0MSwgMTM4LCA4LCAzLCAKKyAgICAyNDEsIDEzMCwgOCwgMywgMjQxLCAxMjksIDgsIDMsIDI0MSwgMTM0LCA4LCAzLCAyNDEsIDEzMywgOCwgMywgMjQxLCAxMzEsIAorICAgIDgsIDMsIDI0MSwgMTMyLCA4LCAzLCAyMzIsIDIwMSwgOCwgMywgMjMyLCAxOTUsIDgsIDMsIDIzMiwgMjQ3LCA4LCAzLCAKKyAgICAyMzIsIDIwOCwgOCwgMywgMjMyLCAyMzksIDgsIDMsIDIzMiwgMjM4LCA4LCAzLCAyMzIsIDI0MiwgOCwgMywgMjMyLCAyNDAsIAorICAgIDgsIDMsIDIzMywgODUsIDgsIDMsIDIzMywgNzUsIDgsIDMsIDIzMywgMTQxLCA4LCAzLCAyMzMsIDk0LCA4LCAzLCAyMzIsIAorICAgIDg0LCA4LCAzLCAyMzIsIDgzLCA4LCAzLCAyMzIsIDg2LCA4LCAzLCAyMzIsIDg1LCA4LCAzLCAyMzIsIDEyMiwgOCwgMywgCisgICAgMjMyLCAxMTIsIDgsIDMsIDIzMiwgMTYyLCA4LCAzLCAyMzIsIDEyNiwgOCwgMywgMjMzLCA4LCA4LCAzLCAyMzMsIDY0LCA4LCAKKyAgICAzLCAyMzMsIDIzLCA4LCAzLCAyMzIsIDc5LCA4LCAzLCAyMzIsIDc3LCA4LCAzLCAyMzIsIDEwMywgOCwgMywgMjMyLCA4MiwgCisgICAgOCwgMywgMjMyLCA4MCwgOCwgMywgMjMyLCA4MSwgOCwgMywgMjMyLCA1OSwgOCwgMywgMjMyLCA1OCwgOCwgMywgMjMyLCAKKyAgICA2NywgOCwgMywgMjMyLCA2MiwgOCwgMywgMjMyLCA2MCwgOCwgMywgMjMyLCA2MSwgOCwgMywgMjQyLCAxOTYsIDgsIDMsIAorICAgIDI0MiwgMTk1LCA4LCAzLCAyNDIsIDIyMSwgOCwgMywgMjQyLCAyMDYsIDgsIDMsIDI0MiwgMjEzLCA4LCAzLCAyNDIsIDIxMiwgCisgICAgOCwgMywgMjQyLCAyMTUsIDgsIDMsIDI0MiwgMjE0LCA4LCAzLCAyNDMsIDk2LCA4LCAzLCAyNDMsIDkxLCA4LCAzLCAyNDMsIAorICAgIDE0MiwgOCwgMywgMjQzLCAxMDYsIDgsIDMsIDI0MiwgOTgsIDgsIDMsIDI0MiwgOTcsIDgsIDMsIDI0MiwgMTAwLCA4LCAzLCAKKyAgICAyNDIsIDk5LCA4LCAzLCAyNDIsIDE2MSwgOCwgMywgMjQyLCAxNTksIDgsIDMsIDI0MiwgMTgxLCA4LCAzLCAyNDIsIDE2OSwgCisgICAgOCwgMywgMjQzLCA0MCwgOCwgMywgMjQzLCAzOCwgOCwgMywgMjQzLCA2OSwgOCwgMywgMjQzLCA1MSwgOCwgMywgMjQyLCAKKyAgICA4OCwgOCwgMywgMjQyLCA4NywgOCwgMywgMjQyLCAxMjAsIDgsIDMsIDI0MiwgOTYsIDgsIDMsIDI0MiwgODksIDgsIDMsIAorICAgIDI0MiwgOTUsIDgsIDMsIDIzNCwgNjcsIDgsIDMsIDIzNCwgNjYsIDgsIDMsIDIzNCwgOTgsIDgsIDMsIDIzNCwgODEsIDgsIAorICAgIDMsIDIzNCwgOTEsIDgsIDMsIDIzNCwgOTQsIDgsIDMsIDIzNCwgOTIsIDgsIDMsIDIzNCwgMjA4LCA4LCAzLCAyMzQsIDE5NiwgCisgICAgOCwgMywgMTc2LCA4LCAzLCAyMzQsIDIzNCwgOCwgMywgMjMzLCAyMDYsIDgsIDMsIDIzMywgMjExLCA4LCAzLCAyMzMsIAorICAgIDIwOCwgOCwgMywgMjM0LCA2LCA4LCAzLCAyMzQsIDIsIDgsIDMsIDIzNCwgMzQsIDgsIDMsIDIzNCwgMTMsIDgsIDMsIDIzNCwgCisgICAgMTYyLCA4LCAzLCAyMzQsIDE0NiwgOCwgMywgMjM0LCAxODgsIDgsIDMsIDIzNCwgMTY1LCA4LCAzLCAyMzMsIDE5NSwgOCwgCisgICAgMywgMjMzLCAxOTIsIDgsIDMsIDIzMywgMjIzLCA4LCAzLCAyMzMsIDIwNSwgOCwgMywgMjMzLCAxOTgsIDgsIDMsIDIzMywgCisgICAgMjAyLCA4LCAzLCAyNDMsIDIyLCA4LCAzLCAyNDMsIDIxLCA4LCAzLCAyNDMsIDI2LCA4LCAzLCAyNDMsIDIzLCA4LCAzLCAKKyAgICAyNDMsIDI1LCA4LCAzLCAyNDMsIDI0LCA4LCAzLCAyNDMsIDMzLCA4LCAzLCAyNDMsIDMyLCA4LCAzLCAyNDMsIDM2LCA4LCAKKyAgICAzLCAyNDMsIDM0LCA4LCAzLCAyNDMsIDEzLCA4LCAzLCAyNDMsIDEyLCA4LCAzLCAyNDMsIDE1LCA4LCAzLCAyNDMsIDE0LCAKKyAgICA4LCAzLCAyNDMsIDE4LCA4LCAzLCAyNDMsIDE3LCA4LCAzLCAyNDMsIDIwLCA4LCAzLCAyNDMsIDE5LCA4LCAzLCAyNDMsIAorICAgIDI4LCA4LCAzLCAyNDMsIDI3LCA4LCAzLCAyNDMsIDMxLCA4LCAzLCAyNDMsIDI5LCA4LCAzLCAyNDMsIDgsIDgsIDMsIDI0MywgCisgICAgNywgOCwgMywgMjQzLCAxNiwgOCwgMywgMjQzLCAxMSwgOCwgMywgMjQzLCA5LCA4LCAzLCAyNDMsIDEwLCA4LCAzLCAyMzAsIAorICAgIDI1NCwgOCwgMywgMjMwLCAyNTUsIDgsIDMsIDIzMSwgMTcsIDgsIDMsIDIzMSwgMTYsIDgsIDMsIDIzMSwgMTksIDgsIDMsIAorICAgIDIzMSwgMTgsIDgsIDMsIDIzMCwgMjQ1LCA4LCAzLCAyMzAsIDI0NywgOCwgMywgMjMwLCAyNDYsIDgsIDMsIDIzMCwgMjUwLCAKKyAgICA4LCAzLCAyMzAsIDI0OSwgOCwgMywgMjMwLCAyNTIsIDgsIDMsIDIzMCwgMjUxLCA4LCAzLCAyMzEsIDAsIDgsIDMsIDIzMSwgCisgICAgMiwgOCwgMywgMjMxLCAxLCA4LCAzLCAyMzAsIDI0MSwgOCwgMywgMjMwLCAyNDAsIDgsIDMsIDIzMCwgMjQ4LCA4LCAzLCAKKyAgICAyMzAsIDI0NCwgOCwgMywgMjMwLCAyNDIsIDgsIDMsIDIzMCwgMjQzLCA4LCAzLCAyNDAsIDE4NywgOCwgMywgMjQwLCAxODYsIAorICAgIDgsIDMsIDI0MCwgMTkzLCA4LCAzLCAyNDAsIDE4OCwgOCwgMywgMjQwLCAxOTAsIDgsIDMsIDI0MCwgMTg5LCA4LCAzLCAKKyAgICAyNDAsIDE5MiwgOCwgMywgMjQwLCAxOTEsIDgsIDMsIDI0MCwgMTk4LCA4LCAzLCAyNDAsIDE5NywgOCwgMywgMjQwLCAyMDAsIAorICAgIDgsIDMsIDI0MCwgMTk5LCA4LCAzLCAyNDAsIDE3OSwgOCwgMywgMjQwLCAxNzgsIDgsIDMsIDI0MCwgMTgxLCA4LCAzLCAKKyAgICAyNDAsIDE4MCwgOCwgMywgMjQwLCAxODMsIDgsIDMsIDI0MCwgMTgyLCA4LCAzLCAyNDAsIDE4NSwgOCwgMywgMjQwLCAxODQsIAorICAgIDgsIDMsIDI0MCwgMTk0LCA4LCAzLCAyNDAsIDE5NiwgOCwgMywgMjQwLCAxOTUsIDgsIDMsIDIyOSwgMjksIDgsIDMsIDIyOSwgCisgICAgMzEsIDgsIDMsIDIyOSwgMzAsIDgsIDMsIDIyOSwgNzIsIDgsIDMsIDIyOSwgNzAsIDgsIDMsIDIyOSwgODIsIDgsIDMsIAorICAgIDIyOSwgNzUsIDgsIDMsIDIyOCwgMjQ4LCA4LCAzLCAyMjgsIDI0NywgOCwgMywgMjI4LCAyNDksIDgsIDMsIDIyOSwgMSwgOCwgCisgICAgMywgMjI4LCAyNTQsIDgsIDMsIDIyOSwgOSwgOCwgMywgMjI5LCAzLCA4LCAzLCAyMjksIDYzLCA4LCAzLCAyMjksIDY5LCA4LCAKKyAgICAzLCAyMjksIDY1LCA4LCAzLCAyNDEsIDE2MywgOCwgMywgMjQxLCAxNzMsIDgsIDMsIDI0MSwgMTgyLCA4LCAzLCAyNDIsIDIsIAorICAgIDgsIDMsIDI0MSwgMjUwLCA4LCAzLCAxNjIsIDgsIDMsIDI0MiwgMTMsIDgsIDMsIDI0MCwgMjEzLCA4LCAzLCAyNDAsIDIxMiwgCisgICAgOCwgMywgMjQwLCAyMTUsIDgsIDMsIDI0MCwgMjE0LCA4LCAzLCAyNDAsIDI0OSwgOCwgMywgMjQwLCAyNDAsIDgsIDMsIAorICAgIDI0MSwgNzUsIDgsIDMsIDI0MSwgNTQsIDgsIDMsIDI0MSwgMjAxLCA4LCAzLCAyNDEsIDI0NSwgOCwgMywgMjQxLCAyMTMsIAorICAgIDgsIDMsIDIxMiwgNDMsIDgsIDMsIDIxMiwgMjgsIDgsIDMsIDIxMiwgNjUsIDgsIDMsIDIxMiwgNTEsIDgsIDMsIDIxMSwgCisgICAgMTg1LCA4LCAzLCAyMTEsIDE4NywgOCwgMywgMjExLCAxODYsIDgsIDMsIDIxMSwgMjAzLCA4LCAzLCAyMTEsIDIyNywgOCwgCisgICAgMywgMjExLCAyMTAsIDgsIDMsIDIxMiwgNSwgOCwgMywgMjEyLCAyMiwgOCwgMywgMjEyLCAxMCwgOCwgMywgMjEwLCAzMCwgCisgICAgOCwgMywgMjEwLCAyOSwgOCwgMywgMjEwLCA0NCwgOCwgMywgMjEwLCAzMiwgOCwgMywgMjEwLCAzNywgOCwgMywgMjEwLCAKKyAgICAzOSwgOCwgMywgMjEwLCAzOCwgOCwgMywgMjEwLCAxMDIsIDgsIDMsIDIxMCwgOTksIDgsIDMsIDIxMCwgMTE2LCA4LCAzLCAKKyAgICAyMTAsIDEwNSwgOCwgMywgMjEwLCA2LCA4LCAzLCAyMTAsIDgsIDgsIDMsIDIxMCwgNywgOCwgMywgMjEwLCAxOSwgOCwgMywgCisgICAgMjEwLCAxOCwgOCwgMywgMjEwLCAyMywgOCwgMywgMjEwLCAyMCwgOCwgMywgMjEwLCA4NCwgOCwgMywgMjEwLCA5NCwgOCwgCisgICAgMywgMjEwLCA4OCwgOCwgMywgMjEwLCAyLCA4LCAzLCAyMTAsIDEsIDgsIDMsIDIxMCwgMTMsIDgsIDMsIDIxMCwgNSwgOCwgCisgICAgMywgMjEwLCAzLCA4LCAzLCAyMTAsIDQsIDgsIDMsIDIwOSwgMjQ1LCA4LCAzLCAyMDksIDI0NCwgOCwgMywgMjA5LCAyNTAsIAorICAgIDgsIDMsIDIwOSwgMjQ4LCA4LCAzLCAyMDksIDI0NiwgOCwgMywgMjA5LCAyNDcsIDgsIDMsIDI1MCwgMzYsIDgsIDMsIDI1MCwgCisgICAgMzIsIDgsIDMsIDI1MCwgNTksIDgsIDMsIDI1MCwgNDUsIDgsIDMsIDI1MCwgNTYsIDgsIDMsIDI1MCwgNTAsIDgsIDMsIAorICAgIDI1MCwgNTgsIDgsIDMsIDI1MCwgNTcsIDgsIDMsIDI1MCwgMjMyLCA4LCAzLCAyNTAsIDIyNSwgOCwgMywgMjUxLCA0MSwgOCwgCisgICAgMywgMjUxLCAzLCA4LCAzLCAyNDksIDExMiwgOCwgMywgMjQ5LCAxMTQsIDgsIDMsIDI0OSwgMTEzLCA4LCAzLCAyNDksIAorICAgIDE2MSwgOCwgMywgMjQ5LCAxNTIsIDgsIDMsIDI0OSwgMjQ2LCA4LCAzLCAyNDksIDE3NywgOCwgMywgMjUwLCAxNjgsIDgsIAorICAgIDMsIDI1MCwgMTk4LCA4LCAzLCAyNTAsIDE3MywgOCwgMywgMjQ5LCA5MiwgOCwgMywgMjQ5LCA5MCwgOCwgMywgMjQ5LCAKKyAgICAxMjAsIDgsIDMsIDI0OSwgMTEwLCA4LCAzLCAyNDksIDk3LCA4LCAzLCAyNDksIDEwOSwgOCwgMywgMjQ5LCA3MSwgOCwgMywgCisgICAgMjQ5LCA3MCwgOCwgMywgMjQ5LCA4MSwgOCwgMywgMjQ5LCA3NywgOCwgMywgMjQ5LCA3MiwgOCwgMywgMjQ5LCA3NCwgOCwgCisgICAgMywgMjA5LCAyMjgsIDgsIDMsIDIwOSwgMjI3LCA4LCAzLCAyMDksIDIzNCwgOCwgMywgMjA5LCAyMjksIDgsIDMsIDIwOSwgCisgICAgMjMxLCA4LCAzLCAyMDksIDIzMCwgOCwgMywgMjA5LCAyMzMsIDgsIDMsIDIwOSwgMjMyLCA4LCAzLCAyMDksIDI0MCwgOCwgCisgICAgMywgMjA5LCAyMzksIDgsIDMsIDIwOSwgMjQzLCA4LCAzLCAyMDksIDI0MSwgOCwgMywgMjA5LCAyMjQsIDgsIDMsIDIwOSwgCisgICAgMjI2LCA4LCAzLCAyMDksIDIyNSwgOCwgMywgMjA5LCAyMzUsIDgsIDMsIDIwOSwgMjM4LCA4LCAzLCAyMDksIDIzNiwgOCwgCisgICAgMywgMjA5LCAyMTcsIDgsIDMsIDIwOSwgMjIxLCA4LCAzLCAyMDksIDIyMCwgOCwgMywgMjA5LCAyMTgsIDgsIDMsIDIwOSwgCisgICAgMjE5LCA4LCAzLCAyMDksIDIxMSwgOCwgMywgMjA5LCAyMTAsIDgsIDMsIDIwOSwgMjE2LCA4LCAzLCAyMDksIDIxNCwgOCwgCisgICAgMywgMjA5LCAyMTIsIDgsIDMsIDIwOSwgMjEzLCA4LCAzLCAyMjcsIDEwOCwgOCwgMywgMjI3LCAxMDcsIDgsIDMsIDIyNywgCisgICAgMTEzLCA4LCAzLCAyMjcsIDEwOSwgOCwgMywgMjI3LCAxMTAsIDgsIDMsIDIyNywgMTEyLCA4LCAzLCAyMjcsIDExMSwgOCwgCisgICAgMywgMjI3LCAxMTgsIDgsIDMsIDIyNywgMTE3LCA4LCAzLCAyMjcsIDEyMSwgOCwgMywgMjI3LCAxMjAsIDgsIDMsIDIyNywgCisgICAgMTAxLCA4LCAzLCAyMjcsIDEwMiwgOCwgMywgMjI3LCAxMDUsIDgsIDMsIDIyNywgMTA2LCA4LCAzLCAyMjcsIDExNCwgOCwgCisgICAgMywgMjI3LCAxMTYsIDgsIDMsIDIyNywgOTYsIDgsIDMsIDIyNywgMTA0LCA4LCAzLCAyMjcsIDEwMCwgOCwgMywgMjI3LCAKKyAgICA5NywgOCwgMywgMjI3LCA5OCwgOCwgMywgMjI3LCA5MSwgOCwgMywgMjI3LCA5MCwgOCwgMywgMjI3LCA5NSwgOCwgMywgCisgICAgMjI3LCA5NCwgOCwgMywgMjI3LCA5MiwgOCwgMywgMjI3LCA5MywgOCwgMywgMjE5LCAxMjksIDgsIDMsIDE5NSwgOCwgMywgCisgICAgMjE5LCAxOTMsIDgsIDMsIDIxOSwgMTMyLCA4LCAzLCAyMTksIDE4NSwgOCwgMywgMjE5LCAxODgsIDgsIDMsIDIxOSwgMTg2LCAKKyAgICA4LCAzLCAyMjEsIDIyOCwgOCwgMywgMjIxLCAyMTYsIDgsIDMsIDIwNiwgOCwgMywgMjIxLCAyMzYsIDgsIDMsIDIxOCwgMjksIAorICAgIDgsIDMsIDIxOCwgMzEsIDgsIDMsIDIxOCwgMzAsIDgsIDMsIDIxOSwgMzYsIDgsIDMsIDIxOSwgMjUsIDgsIDMsIDIxOSwgCisgICAgNjAsIDgsIDMsIDIxOSwgNDAsIDgsIDMsIDIyMCwgMTE2LCA4LCAzLCAyMjEsIDE4MywgOCwgMywgMjIwLCAxNDEsIDgsIDMsIAorICAgIDIxOCwgNiwgOCwgMywgMjE4LCA0LCA4LCAzLCAyMTgsIDg0LCA4LCAzLCAyMTgsIDI4LCA4LCAzLCAyMTgsIDEwLCA4LCAzLCAKKyAgICAyMTgsIDE4LCA4LCAzLCAyMTcsIDE2NywgOCwgMywgMjE3LCAxNjYsIDgsIDMsIDIxNywgMjMzLCA4LCAzLCAyMTcsIDE3NCwgCisgICAgOCwgMywgMjE3LCAxNjksIDgsIDMsIDIxNywgMTczLCA4LCAzLCAyMTgsIDE4OCwgOCwgMywgMjE4LCAxODcsIDgsIDMsIAorICAgIDIxOCwgMTk0LCA4LCAzLCAyMTgsIDE4OSwgOCwgMywgMjE4LCAxOTEsIDgsIDMsIDIxOCwgMTkzLCA4LCAzLCAyMTgsIDE5MiwgCisgICAgOCwgMywgMjE4LCAyMDIsIDgsIDMsIDIxOCwgMjAwLCA4LCAzLCAyMTgsIDIyNSwgOCwgMywgMjE4LCAyMDMsIDgsIDMsIAorICAgIDIxOCwgMTgzLCA4LCAzLCAyMTgsIDE4MiwgOCwgMywgMjE4LCAxODYsIDgsIDMsIDIxOCwgMTg0LCA4LCAzLCAyMTgsIDE5NiwgCisgICAgOCwgMywgMjE4LCAxOTksIDgsIDMsIDIxOCwgMTk3LCA4LCAzLCAyMTgsIDE3OSwgOCwgMywgMjE4LCAxNzcsIDgsIDMsIAorICAgIDIxOCwgMTgxLCA4LCAzLCAyMTgsIDE4MCwgOCwgMywgMjE4LCAxNzIsIDgsIDMsIDIxOCwgMTcxLCA4LCAzLCAyMTgsIDE3NiwgCisgICAgOCwgMywgMjE4LCAxNzUsIDgsIDMsIDIxOCwgMTczLCA4LCAzLCAyMTgsIDE3NCwgOCwgMywgMjEwLCA3NywgOCwgMywgMjEwLCAKKyAgICA3NiwgOCwgMywgMjEwLCA4MiwgOCwgMywgMjEwLCA3OSwgOCwgMywgMjEwLCA1OSwgOCwgMywgMjEwLCA2MSwgOCwgMywgCisgICAgMjEwLCA2MCwgOCwgMywgMjEwLCA2NCwgOCwgMywgMjEwLCA2MywgOCwgMywgMjEwLCA2NywgOCwgMywgMjEwLCA2NSwgOCwgCisgICAgMywgMjEwLCA3MSwgOCwgMywgMjEwLCA3MCwgOCwgMywgMjEwLCA3NCwgOCwgMywgMjEwLCA3MiwgOCwgMywgMjEwLCA1NSwgCisgICAgOCwgMywgMjEwLCA1NCwgOCwgMywgMjEwLCA2MiwgOCwgMywgMjEwLCA1OCwgOCwgMywgMjEwLCA1NiwgOCwgMywgMjEwLCAKKyAgICA1NywgOCwgMywgMjEwLCA0NywgOCwgMywgMjEwLCA0NiwgOCwgMywgMjEwLCA1MSwgOCwgMywgMjEwLCA1MCwgOCwgMywgCisgICAgMjEwLCA0OCwgOCwgMywgMjEwLCA0OSwgOCwgMywgMjUwLCAxNDQsIDgsIDMsIDI1MCwgMTQxLCA4LCAzLCAyNTAsIDE2NSwgCisgICAgOCwgMywgMjUwLCAxNTIsIDgsIDMsIDI1MCwgNzMsIDgsIDMsIDI1MCwgNzIsIDgsIDMsIDI1MCwgNzUsIDgsIDMsIDI1MCwgCisgICAgNzQsIDgsIDMsIDI1MCwgODcsIDgsIDMsIDI1MCwgODYsIDgsIDMsIDI1MCwgOTQsIDgsIDMsIDI1MCwgODksIDgsIDMsIAorICAgIDI1MCwgMTIzLCA4LCAzLCAyNTAsIDEyMSwgOCwgMywgMjUwLCAxMzksIDgsIDMsIDI1MCwgMTI5LCA4LCAzLCAyNTAsIDY3LCAKKyAgICA4LCAzLCAyNTAsIDc3LCA4LCAzLCAyNTAsIDcxLCA4LCAzLCAyNTAsIDY4LCA4LCAzLCAyNTAsIDcwLCA4LCAzLCAyNTAsIAorICAgIDYxLCA4LCAzLCAyNTAsIDYwLCA4LCAzLCAyNTAsIDY1LCA4LCAzLCAyNTAsIDY0LCA4LCAzLCAyNTAsIDYyLCA4LCAzLCAKKyAgICAyNTAsIDYzLCA4LCAzLCAyMjIsIDE3NywgOCwgMywgMjIyLCAxODEsIDgsIDMsIDIyMiwgMTYwLCA4LCAzLCAyMjIsIDE2MSwgCisgICAgOCwgMywgMjIyLCAxNjQsIDgsIDMsIDIyMiwgMTYzLCA4LCAzLCAyMjIsIDE2NywgOCwgMywgMjIyLCAxNjUsIDgsIDMsIAorICAgIDIyMiwgMTcxLCA4LCAzLCAyMjIsIDE3MCwgOCwgMywgMjIyLCAxNzYsIDgsIDMsIDIyMiwgMTcyLCA4LCAzLCAyMjIsIDE1NiwgCisgICAgOCwgMywgMjIyLCAxNTQsIDgsIDMsIDIyMiwgMTYyLCA4LCAzLCAyMjIsIDE1OSwgOCwgMywgMjIyLCAxNTcsIDgsIDMsIAorICAgIDIyMiwgMTU4LCA4LCAzLCAyMjIsIDE0OSwgOCwgMywgMjIyLCAxNDgsIDgsIDMsIDIyMiwgMTUzLCA4LCAzLCAyMjIsIDE1MiwgCisgICAgOCwgMywgMjIyLCAxNTAsIDgsIDMsIDIyMiwgMTUxLCA4LCAzLCAyMjgsIDM5LCA4LCAzLCAyMjgsIDM4LCA4LCAzLCAyMjgsIAorICAgIDQxLCA4LCAzLCAyMjgsIDQwLCA4LCAzLCAyMjgsIDMxLCA4LCAzLCAyMjgsIDMzLCA4LCAzLCAyMjgsIDMyLCA4LCAzLCAKKyAgICAyMjgsIDM1LCA4LCAzLCAyMjgsIDM0LCA4LCAzLCAyMjgsIDM3LCA4LCAzLCAyMjgsIDM2LCA4LCAzLCAyMjgsIDI2LCA4LCAKKyAgICAzLCAyMjgsIDI1LCA4LCAzLCAyMjgsIDMwLCA4LCAzLCAyMjgsIDI5LCA4LCAzLCAyMjgsIDI3LCA4LCAzLCAyMjgsIDI4LCAKKyAgICA4LCAzLCAyMjgsIDIwLCA4LCAzLCAyMjgsIDE5LCA4LCAzLCAyMjgsIDI0LCA4LCAzLCAyMjgsIDIzLCA4LCAzLCAyMjgsIAorICAgIDIxLCA4LCAzLCAyMjgsIDIyLCA4LCAzLCAyMjAsIDc0LCA4LCAzLCAyMjAsIDY5LCA4LCAzLCAyMjAsIDEwNCwgOCwgMywgCisgICAgMjIwLCA4NSwgOCwgMywgMjE5LCAyMTcsIDgsIDMsIDIxOSwgMjE5LCA4LCAzLCAyMTksIDIxOCwgOCwgMywgMjE5LCAyMzgsIAorICAgIDgsIDMsIDIxOSwgMjM1LCA4LCAzLCAyMjAsIDksIDgsIDMsIDIyMCwgMCwgOCwgMywgMjIwLCA0NCwgOCwgMywgMjIwLCAzNywgCisgICAgOCwgMywgMjIwLCA2NSwgOCwgMywgMjIwLCA1MiwgOCwgMywgMjE5LCAyMTMsIDgsIDMsIDIxOSwgMjExLCA4LCAzLCAyMTksIAorICAgIDIyNywgOCwgMywgMjE5LCAyMTYsIDgsIDMsIDIxOSwgMjE0LCA4LCAzLCAyMTksIDIxNSwgOCwgMywgMjE5LCAxOTYsIDgsIAorICAgIDMsIDIxOSwgMTk1LCA4LCAzLCAyMTksIDIwMiwgOCwgMywgMjE5LCAxOTksIDgsIDMsIDIxOSwgMTk3LCA4LCAzLCAyMTksIAorICAgIDE5OCwgOCwgMywgMjIzLCAxNDQsIDgsIDMsIDIyMywgMTM4LCA4LCAzLCAyMDUsIDgsIDMsIDIyMywgMTUwLCA4LCAzLCAKKyAgICAyMjIsIDEyMiwgOCwgMywgMjIyLCAxMjQsIDgsIDMsIDIyMiwgMTIzLCA4LCAzLCAyMjIsIDE5MCwgOCwgMywgMjIyLCAxODMsIAorICAgIDgsIDMsIDIyMiwgMjEzLCA4LCAzLCAyMjIsIDE5NCwgOCwgMywgMjIzLCA0NiwgOCwgMywgMjIzLCAxMzEsIDgsIDMsIDIyMywgCisgICAgODQsIDgsIDMsIDIyMiwgMTE1LCA4LCAzLCAyMjIsIDExMiwgOCwgMywgMjIyLCAxNDIsIDgsIDMsIDIyMiwgMTIxLCA4LCAzLCAKKyAgICAyMjIsIDExNywgOCwgMywgMjIyLCAxMTgsIDgsIDMsIDIyMiwgOTcsIDgsIDMsIDIyMiwgOTYsIDgsIDMsIDIyMiwgMTAyLCAKKyAgICA4LCAzLCAyMjIsIDEwMCwgOCwgMywgMjIyLCA5OCwgOCwgMywgMjIyLCA5OSwgOCwgMywgMjM1LCAxMDQsIDgsIDMsIDIzNSwgCisgICAgMTAzLCA4LCAzLCAyMzUsIDExNCwgOCwgMywgMjM1LCAxMDUsIDgsIDMsIDIzNSwgMTEwLCA4LCAzLCAyMzUsIDEwOSwgOCwgCisgICAgMywgMjM1LCAxMTIsIDgsIDMsIDIzNSwgMTExLCA4LCAzLCAyMzUsIDQ3LCA4LCAzLCAyMzUsIDQ2LCA4LCAzLCAyMzUsIDQ5LCAKKyAgICA4LCAzLCAyMzUsIDQ4LCA4LCAzLCAyMzUsIDYyLCA4LCAzLCAyMzUsIDYwLCA4LCAzLCAyMzUsIDc0LCA4LCAzLCAyMzUsIAorICAgIDY0LCA4LCAzLCAyMzUsIDQwLCA4LCAzLCAyMzUsIDM4LCA4LCAzLCAyMzUsIDU3LCA4LCAzLCAyMzUsIDQ1LCA4LCAzLCAKKyAgICAyMzUsIDQyLCA4LCAzLCAyMzUsIDQzLCA4LCAzLCAyMzUsIDMyLCA4LCAzLCAyMzUsIDMxLCA4LCAzLCAyMzUsIDM2LCA4LCAKKyAgICAzLCAyMzUsIDM1LCA4LCAzLCAyMzUsIDMzLCA4LCAzLCAyMzUsIDM0LCA4LCAzLCAyMjQsIDQ5LCA4LCAzLCAyMjQsIDQ3LCAKKyAgICA4LCAzLCAyMjQsIDU2LCA4LCAzLCAyMjQsIDUwLCA4LCAzLCAyMjQsIDUzLCA4LCAzLCAyMjQsIDUyLCA4LCAzLCAyMjQsIAorICAgIDU1LCA4LCAzLCAyMjQsIDU0LCA4LCAzLCAyMjQsIDIsIDgsIDMsIDIyMywgMjU1LCA4LCAzLCAyMjQsIDQsIDgsIDMsIDIyNCwgCisgICAgMywgOCwgMywgMjI0LCAzNiwgOCwgMywgMjI0LCAzNSwgOCwgMywgMjI0LCA0NSwgOCwgMywgMjI0LCAzOSwgOCwgMywgMjIzLCAKKyAgICAyNTAsIDgsIDMsIDIyMywgMjQ2LCA4LCAzLCAyMjQsIDMzLCA4LCAzLCAyMjMsIDI1NCwgOCwgMywgMjIzLCAyNTIsIDgsIDMsIAorICAgIDIyMywgMjUzLCA4LCAzLCAyMjMsIDIzMCwgOCwgMywgMjIzLCAyMjgsIDgsIDMsIDIyMywgMjQwLCA4LCAzLCAyMjMsIDIzMywgCisgICAgOCwgMywgMjIzLCAyMzEsIDgsIDMsIDIyMywgMjMyLCA4LCAzLCAyMzUsIDkzLCA4LCAzLCAyMzUsIDkyLCA4LCAzLCAyMzUsIAorICAgIDk5LCA4LCAzLCAyMzUsIDk0LCA4LCAzLCAyMzUsIDk2LCA4LCAzLCAyMzUsIDk1LCA4LCAzLCAyMzUsIDk4LCA4LCAzLCAKKyAgICAyMzUsIDk3LCA4LCAzLCAyMzUsIDg0LCA4LCAzLCAyMzUsIDg2LCA4LCAzLCAyMzUsIDg1LCA4LCAzLCAyMzUsIDg5LCA4LCAKKyAgICAzLCAyMzUsIDg4LCA4LCAzLCAyMzUsIDkxLCA4LCAzLCAyMzUsIDkwLCA4LCAzLCAyMzUsIDgwLCA4LCAzLCAyMzUsIDc5LCAKKyAgICA4LCAzLCAyMzUsIDg3LCA4LCAzLCAyMzUsIDgzLCA4LCAzLCAyMzUsIDgxLCA4LCAzLCAyMzUsIDgyLCA4LCAzLCAyMzUsIAorICAgIDc2LCA4LCAzLCAyMzUsIDc1LCA4LCAzLCAyMzUsIDc4LCA4LCAzLCAyMzUsIDc3LCA4LCAzLCAyMjgsIDE2NywgOCwgMywgCisgICAgMjI4LCAxNjYsIDgsIDMsIDIyOCwgMTc0LCA4LCAzLCAyMjgsIDE2OCwgOCwgMywgMjI4LCAxNzAsIDgsIDMsIDIyOCwgMTY5LCAKKyAgICA4LCAzLCAyMjgsIDE3MywgOCwgMywgMjI4LCAxNzEsIDgsIDMsIDIyOCwgMTU2LCA4LCAzLCAyMjgsIDE1NywgOCwgMywgCisgICAgMjI4LCAxNjIsIDgsIDMsIDIyOCwgMTYxLCA4LCAzLCAyMjgsIDE2NSwgOCwgMywgMjI4LCAxNjMsIDgsIDMsIDIyOCwgMTUxLCAKKyAgICA4LCAzLCAyMjgsIDE2MCwgOCwgMywgMjI4LCAxNTUsIDgsIDMsIDIyOCwgMTUyLCA4LCAzLCAyMjgsIDE1MywgOCwgMywgCisgICAgMjI4LCAxNDYsIDgsIDMsIDIyOCwgMTQ1LCA4LCAzLCAyMjgsIDE1MCwgOCwgMywgMjI4LCAxNDksIDgsIDMsIDIyOCwgMTQ3LCAKKyAgICA4LCAzLCAyMjgsIDE0OCwgOCwgMywgMjI3LCAxNDEsIDgsIDMsIDIyNywgMTQwLCA4LCAzLCAyMjcsIDE1MiwgOCwgMywgCisgICAgMjI3LCAxNDUsIDgsIDMsIDIyNywgMTQ5LCA4LCAzLCAyMjcsIDE0OCwgOCwgMywgMjI3LCAxNTEsIDgsIDMsIDIyNywgMTUwLCAKKyAgICA4LCAzLCAyMjcsIDEyOCwgOCwgMywgMjI3LCAxMzAsIDgsIDMsIDIyNywgMTI5LCA4LCAzLCAyMjcsIDEzNCwgOCwgMywgCisgICAgMjI3LCAxMzMsIDgsIDMsIDIyNywgMTM4LCA4LCAzLCAyMjcsIDEzNSwgOCwgMywgMjI3LCAxMjYsIDgsIDMsIDIyNywgMTI0LCAKKyAgICA4LCAzLCAyMjcsIDEzMiwgOCwgMywgMjI3LCAxMjcsIDgsIDMsIDIxMSwgMTUwLCA4LCAzLCAyMTEsIDE0OSwgOCwgMywgCisgICAgMjExLCAxNTcsIDgsIDMsIDIxMSwgMTUyLCA4LCAzLCAyMTEsIDE1NCwgOCwgMywgMjExLCAxNTMsIDgsIDMsIDIxMSwgMTU2LCAKKyAgICA4LCAzLCAyMTEsIDE1NSwgOCwgMywgMjExLCAxMzksIDgsIDMsIDIxMSwgMTQwLCA4LCAzLCAyMTEsIDE0NCwgOCwgMywgCisgICAgMjExLCAxNDMsIDgsIDMsIDIxMSwgMTQ4LCA4LCAzLCAyMTEsIDE0NiwgOCwgMywgMjExLCAxMjEsIDgsIDMsIDIxMSwgMTE5LCAKKyAgICA4LCAzLCAyMTEsIDEzMSwgOCwgMywgMjExLCAxMjQsIDgsIDMsIDIxMSwgMTIyLCA4LCAzLCAyMTEsIDEyMywgOCwgMywgCisgICAgMjEwLCAyNTAsIDgsIDMsIDIxMCwgMjQ4LCA4LCAzLCAyMTEsIDgsIDgsIDMsIDIxMCwgMjUxLCA4LCAzLCAyMTEsIDIsIDgsIAorICAgIDMsIDIxMSwgMSwgOCwgMywgMjExLCA1LCA4LCAzLCAyMTEsIDMsIDgsIDMsIDIxMCwgMTkxLCA4LCAzLCAyMTAsIDE5MCwgOCwgCisgICAgMywgMjEwLCAxOTQsIDgsIDMsIDIxMCwgMTkyLCA4LCAzLCAyMTAsIDIyNCwgOCwgMywgMjEwLCAyMjEsIDgsIDMsIDIxMCwgCisgICAgMjQ0LCA4LCAzLCAyMTAsIDIyOCwgOCwgMywgMjEwLCAxODIsIDgsIDMsIDIxMCwgMTc4LCA4LCAzLCAyMTAsIDIxMiwgOCwgCisgICAgMywgMjEwLCAxODksIDgsIDMsIDIxMCwgMTg1LCA4LCAzLCAyMTAsIDE4NiwgOCwgMywgMjEwLCAxNjIsIDgsIDMsIDIxMCwgCisgICAgMTYxLCA4LCAzLCAyMTAsIDE2OSwgOCwgMywgMjEwLCAxNjUsIDgsIDMsIDIxMCwgMTYzLCA4LCAzLCAyMTAsIDE2NCwgOCwgCisgICAgMzQsIDIyNCwgMzYsIDgsIDM0LCAyMzIsIDI0NywgOCwgMzQsIDIzNCwgNjcsIDgsIDM0LCAyMjcsIDE0NSwgOCwgMzQsIAorICAgIDI0OSwgNzcsIDgsIDM0LCAyMTgsIDE5NCwgOCwgMzQsIDI0MywgMTksIDgsIDM0LCAyNDMsIDUxLCA4LCAzNCwgMjMwLCAKKyAgICAyMzUsIDgsIDM0LCAyNDAsIDE4NywgOCwgMzQsIDIzMiwgNjEsIDgsIDM0LCAyNTIsIDkxLCA4LCAzNCwgMjMwLCAxMzEsIDgsIAorICAgIDM0LCAyMTAsIDI0NCwgOCwgMzQsIDIyNCwgMTI0LCA4LCAzNCwgMjQwLCAxODEsIDgsIDM0LCAyMTcsIDQ3LCA4LCAzNCwgCisgICAgMjQzLCAxNDIsIDgsIDM0LCAyMTAsIDUsIDgsIDM0LCAyNDksIDcxLCA4LCAzNCwgMjQ4LCAxMDMsIDgsIDM0LCAyNTEsIAorICAgIDEwNiwgOCwgMzQsIDI0MywgMTUsIDgsIDM0LCAyMjcsIDEzNSwgOCwgMzQsIDIxNSwgMTE5LCA4LCAzNCwgMjI2LCAxNzksIAorICAgIDgsIDM0LCAyMzUsIDgwLCA4LCAzNCwgMjEwLCAxOSwgOCwgMzQsIDIyNCwgMTAzLCA4LCAzNCwgMjQxLCAxMTUsIDgsIDM0LCAKKyAgICAyMTAsIDI1MCwgOCwgMzQsIDIxMiwgMTEyLCA4LCAzNCwgMjE5LCAyMDIsIDgsIDM0LCAyMTMsIDI0NCwgOCwgMzQsIDIxMCwgCisgICAgMTE2LCA4LCAzNCwgMjM1LCA3NCwgOCwgMzQsIDIyNywgMTAwLCA4LCAzNCwgMjM1LCA3OCwgOCwgMzQsIDI0MiwgMTYxLCA4LCAKKyAgICAzNCwgMjM1LCA5OCwgOCwgMzQsIDIxMSwgMjI3LCA4LCAzNCwgMjQ2LCA4NiwgOCwgMzQsIDIxOSwgMjE1LCA4LCAzNCwgCisgICAgMjMyLCAyNDIsIDgsIDM0LCAyNDksIDgxLCA4LCAzNCwgMjQ5LCAxMTMsIDgsIDM0LCAyNTAsIDQ1LCA4LCAzNCwgMjQwLCAKKyAgICAxODQsIDgsIDM0LCAyMjAsIDc0LCA4LCAzNCwgMjEwLCA0LCA4LCAzNCwgMjIwLCAwLCA4LCAzNCwgMjUwLCAxMzksIDgsIAorICAgIDM0LCAyMDksIDIzMSwgOCwgMzQsIDIyOSwgMTc4LCA4LCAzNCwgMjM0LCAxODgsIDIzMiwgMjAyLCAxLCAyNTIsIDE5OSwgCisgICAgMjMyLCAyMDIsIDEsIDE5MSwgMjMyLCAyMDIsIDEsIDIyNSwgMTUwLCAyMzIsIDIwMiwgMSwgMjQ4LCAyMjksIDIzMiwgMjAyLCAKKyAgICAxLCAyMTcsIDEwNiwgMjMyLCAyMDIsIDEsIDIxNiwgMjA5LCAyMzIsIDIwMiwgMSwgMjQzLCAxNDIsIDIzMiwgMjAyLCAxLCAKKyAgICAxNzYsIDIzMiwgMjAyLCAxLCAyMzQsIDEzOCwgMjMyLCAyMDIsIDEsIDIzNSwgMTQ3LCAyMzIsIDIwMiwgMSwgMjUxLCA0MSwgCisgICAgMjMyLCAyMDIsIDEsIDI1MCwgMTY1LCAyMzIsIDIwMiwgMSwgMjQ2LCA0NiwgMjMyLCAyMDIsIDEsIDIxNSwgMTg0LCAyMzIsIAorICAgIDIwMiwgMSwgMjE1LCAxNzYsIDIzMiwgMjAyLCAxLCAxODYsIDIzMiwgMjAyLCAxLCAxOTgsIDIzMiwgMjAyLCAxLCAyMzMsIAorICAgIDE0MSwgMjMyLCAyMDIsIDEsIDIwNiwgMjMyLCAyMDIsIDEsIDIxMCwgODIsIDIzMiwgMjAyLCAxLCAyMTAsIDExNiwgMjMyLCAKKyAgICAyMDIsIDEsIDIyOSwgODIsIDIzMiwgMjAyLCAxLCAxNjIsIDIzMiwgMjAyLCAxLCAyMTEsIDE2NSwgMjMyLCAyMDIsIDEsIAorICAgIDI0MSwgMTk2LCAyMzIsIDIwMiwgMSwgMjQ0LCAyMDQsIDIzMiwgMjAyLCAxLCAyMTIsIDY1LCAyMzIsIDIwMiwgMSwgMjIwLCAKKyAgICAxMDQsIDIzMiwgMjAyLCAxLCAxOTIsIDIzMiwgMjAyLCAxLCAyNDMsIDAsIDIzMiwgMjAyLCAxLCA2MSwgMjMyLCAyMDIsIDEsIAorICAgIDI1NCwgMjUyLCAyMzIsIDIwMiwgMSwgNzYsIDIzMiwgMjAyLCAxLCAyNDUsIDYzLCAyMzIsIDIwMiwgMSwgNzQsIDIzMiwgCisgICAgMjAyLCAxLCA3OCwgMjMyLCAyMDIsIDEsIDY5LCAyMzIsIDIwMiwgMSwgMjE0LCAyMTQsIDIzMiwgMjAyLCAxLCAyMTQsIAorICAgIDIwOCwgMjMyLCAyMDIsIDEsIDIyNiwgMjM4LCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAyMTYsIDExOCwgMjMyLCAKKyAgICAyMDIsIDEsIDEzOCwgMjI5LCAyMzQsIDIyNSwgMTksIDIzMiwgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDI0OSwgODAsIDIzMiwgCisgICAgMjAyLCAxLCAxMzgsIDIzMCwgMzcsIDI1MSwgMjEzLCAyMzIsIDIwMiwgMSwgMTM4LCAyMzAsIDM3LCAxOTgsIDIzMiwgMjAyLCAKKyAgICAxLCAxMzgsIDIzMCwgMzcsIDIzNSwgMTIxLCAyMzIsIDIwMiwgMjI0LCAxNDQsIDI0OSwgMjI3LCAyMzIsIDIwMiwgMjI0LCAKKyAgICAxNDQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNDEsIDMsIDI0NSwgMjE3LCA0MSwgMywgMjQ1LCAyMTMsIDQxLCAzLCAyNDEsIAorICAgIDIyNywgNDEsIDMsIDIxMiwgMTcsIDQxLCAzLCAyMTIsIDE2LCA0MSwgMywgMjI1LCAyMTQsIDQxLCAzLCAyNTIsIDIxLCA0MSwgCisgICAgMywgMjUyLCA3NCwgNDEsIDMsIDIzMSwgMTIxLCA0MSwgMywgMjMzLCAyNTMsIDQxLCAzLCAyMzEsIDExLCA0MSwgMywgMjQzLCAKKyAgICA4MiwgNDEsIDMsIDI0NCwgMTU1LCA0MSwgMywgMjEzLCAyNTAsIDQxLCAzLCAyMTcsIDEyLCA0MSwgMywgMjE2LCAxOTUsIAorICAgIDQxLCAzLCAyNDgsIDI0LCA0MSwgMywgMjQ4LCAyMSwgNDEsIDMsIDIzMywgNTYsIDQxLCAzLCAyMjMsIDExMSwgNDEsIDMsIAorICAgIDI0OCwgODUsIDQxLCAzLCAyMjksIDE0NCwgNDEsIDMsIDIyMSwgMTcyLCA0MSwgMywgMjIwLCA2MywgNDEsIDMsIDIxMCwgCisgICAgOTIsIDQxLCAzLCAyMTAsIDczLCA0MSwgMywgMjUwLCAxOTAsIDQxLCAzLCAyMzUsIDEzMCwgNDEsIDMsIDIyOCwgMTgxLCAKKyAgICA0MSwgMywgMjExLCA0NCwgNDEsIDMsIDIzNCwgMTg3LCA0MSwgMywgMjI5LCA1NiwgNDEsIDMsIDI0MywgNjIsIDQxLCAzLCAKKyAgICAyMzEsIDg1LCA0MSwgMywgMjI5LCAxMDgsIDQxLCAzLCAyMjcsIDE1OSwgNDEsIDMsIDc0LCA0MSwgMywgMjM2LCA2LCA0MSwgCisgICAgMywgMjQxLCAxODcsIDQxLCAzLCAyNDEsIDE2NywgNDEsIDMsIDIxMSwgMjUwLCA0MSwgMywgMjExLCAyNDEsIDQxLCAzLCAKKyAgICAyMjUsIDExMSwgNDEsIDMsIDI1MiwgMTksIDQxLCAzLCAyNTIsIDE0LCA0MSwgMywgMjMxLCAxMTQsIDQxLCAzLCAyMzMsIAorICAgIDI1MCwgNDEsIDMsIDIzMSwgOCwgNDEsIDMsIDI0MywgNzgsIDQxLCAzLCAyNDQsIDEyOSwgNDEsIDMsIDIxMywgMTc2LCA0MSwgCisgICAgMywgMjE2LCAxMTgsIDQxLCAzLCAyMTYsIDE3NiwgNDEsIDMsIDI0OCwgMTYsIDQxLCAzLCAyNDgsIDIwLCA0MSwgMywgMjMyLCAKKyAgICAyNDcsIDQxLCAzLCAyMjMsIDM4LCA0MSwgMywgMjQ4LCAxMSwgNDEsIDMsIDIyOSwgMTM4LCA0MSwgMywgMjE5LCAxOTMsIAorICAgIDQxLCAzLCAyMjAsIDM0LCA0MSwgMywgMjEwLCA0NCwgNDEsIDMsIDIxMCwgNjksIDQxLCAzLCAyNTAsIDU5LCA0MSwgMywgCisgICAgMjM1LCAxMTQsIDQxLCAzLCAyMjgsIDE3NCwgNDEsIDMsIDIxMSwgOCwgNDEsIDMsIDIzNCwgOTgsIDQxLCAzLCAyMjksIDQ4LCAKKyAgICA0MSwgMywgMjQyLCAyMjEsIDQxLCAzLCAyMzAsIDIzNSwgNDEsIDMsIDIyOCwgMjM4LCA0MSwgMywgMjI3LCAxNTIsIDQxLCAKKyAgICAzLCA2MSwgNDEsIDMsIDI1NCwgMTMxLCA0MSwgMywgMjI5LCA3NywgNDEsIDMsIDE2MiwgNDEsIDMsIDI0MiwgMjUsIDQxLCAKKyAgICAzLCAyMTIsIDY1LCA0MSwgMywgMjEyLCA1NSwgNDEsIDMsIDE5MSwgNDEsIDMsIDI1MiwgMjYsIDQxLCAzLCAyNTIsIDE5OSwgCisgICAgNDEsIDMsIDIzMSwgMTI5LCA0MSwgMywgMjM0LCAxLCA0MSwgMywgMjM0LCAwLCA0MSwgMywgMjMxLCAxNSwgNDEsIDMsIAorICAgIDI0MywgODYsIDQxLCAzLCAyNDQsIDIwNCwgNDEsIDMsIDIxNCwgMjcsIDQxLCAzLCAyMTcsIDEwNiwgNDEsIDMsIDIxNiwgCisgICAgMjA5LCA0MSwgMywgMjQ4LCAzMywgNDEsIDMsIDI0OCwgMjMsIDQxLCAzLCAyMzMsIDE0MSwgNDEsIDMsIDIwNSwgNDEsIDMsIAorICAgIDI0OCwgMjI5LCA0MSwgMywgMjI5LCAxNTMsIDQxLCAzLCAyMDYsIDQxLCAzLCAyMjAsIDEwNCwgNDEsIDMsIDIxMCwgMTE2LCAKKyAgICA0MSwgMywgMjEwLCA4MiwgNDEsIDMsIDI1MSwgNDEsIDQxLCAzLCAyMzUsIDE0NywgNDEsIDMsIDIyOCwgMTkwLCA0MSwgMywgCisgICAgMTkyLCA0MSwgMywgMTc2LCA0MSwgMywgMjM0LCAyNDAsIDQxLCAzLCAyMjksIDYxLCA0MSwgMywgMjQzLCAxNDIsIDQxLCAzLCAKKyAgICAxODYsIDQxLCAzLCAxOTgsIDQxLCAzLCAyMjcsIDE2OSwgNDEsIDMsIDIyNiwgMTg3LCA0MSwgMywgMjI2LCAxODMsIDQxLCAKKyAgICAzLCAyNDEsIDYwLCA0MSwgMywgMjExLCAyMTUsIDQxLCAzLCAyMTEsIDIxMSwgNDEsIDMsIDIyNCwgMjUyLCA0MSwgMywgCisgICAgMjUyLCAxNywgNDEsIDMsIDI1MSwgMjAxLCA0MSwgMywgMjMxLCAxMDksIDQxLCAzLCAyMzMsIDI0OCwgNDEsIDMsIDIzMSwgCisgICAgNCwgNDEsIDMsIDI0MywgNzQsIDQxLCAzLCAyNDQsIDQyLCA0MSwgMywgMjEzLCAxMjcsIDQxLCAzLCAyMTYsIDE4LCA0MSwgCisgICAgMywgMjE2LCAxNTQsIDQxLCAzLCAyNDgsIDE0LCA0MSwgMywgMjQ4LCAxOCwgNDEsIDMsIDIzMiwgMTMzLCA0MSwgMywgMjIyLCAKKyAgICAxOTksIDQxLCAzLCAyNDcsIDEzMywgNDEsIDMsIDIyOSwgMTI1LCA0MSwgMywgMjE5LCA0MiwgNDEsIDMsIDIyMCwgMywgNDEsIAorICAgIDMsIDIxMCwgMjEsIDQxLCAzLCAyMTAsIDY2LCA0MSwgMywgMjQ5LCAxODIsIDQxLCAzLCAyMzUsIDY1LCA0MSwgMywgMjI4LCAKKyAgICAxNjQsIDQxLCAzLCAyMTAsIDIyOSwgNDEsIDMsIDIzNCwgMTYsIDQxLCAzLCAyMjksIDQ2LCA0MSwgMywgMjQyLCAxNzEsIAorICAgIDQxLCAzLCAyMzAsIDEzNywgNDEsIDMsIDIyOCwgNjksIDQxLCAzLCAyMjcsIDEzNiwgNDEsIDMsIDY5LCA0MSwgMywgMjE0LCAKKyAgICAxOTAsIDQxLCAzLCAyNDAsIDIyOSwgNDEsIDMsIDI0MCwgMjE5LCA0MSwgMywgMjExLCAxOTUsIDQxLCAzLCAyMTEsIDE4OSwgCisgICAgNDEsIDMsIDIyNCwgMTUzLCA0MSwgMywgMjUyLCAxNiwgNDEsIDMsIDI1MSwgMTMzLCA0MSwgMywgMjMxLCAxMDgsIDQxLCAzLCAKKyAgICAyMzMsIDI0NiwgNDEsIDMsIDIzMSwgMywgNDEsIDMsIDI0MywgNzMsIDQxLCAzLCAyNDMsIDI0MSwgNDEsIDMsIDIxMiwgCisgICAgMTE2LCA0MSwgMywgMjE1LCAxMTksIDQxLCAzLCAyMTYsIDEzNywgNDEsIDMsIDI0OCwgMTIsIDQxLCAzLCAyNDgsIDE3LCAKKyAgICA0MSwgMywgMjMyLCAxMDMsIDQxLCAzLCAyMjIsIDE0MiwgNDEsIDMsIDI0NiwgODYsIDQxLCAzLCAyMjksIDEyMCwgNDEsIDMsIAorICAgIDIxOCwgODQsIDQxLCAzLCAyMTksIDIyNywgNDEsIDMsIDIxMCwgMTMsIDQxLCAzLCAyMTAsIDYyLCA0MSwgMywgMjQ5LCAKKyAgICAxMjAsIDQxLCAzLCAyMzUsIDU3LCA0MSwgMywgMjI4LCAxNjAsIDQxLCAzLCAyMTAsIDIxMiwgNDEsIDMsIDIzMywgMjIzLCAKKyAgICA0MSwgMywgMjI5LCA0NSwgNDEsIDMsIDI0MiwgMTIwLCA0MSwgMywgMjMwLCAxMDcsIDQxLCAzLCAyMjcsIDI0MiwgNDEsIDMsIAorICAgIDIyNywgMTMyLCA0MSwgMywgNzgsIDQxLCAzLCAyMjYsIDIwMCwgNDEsIDMsIDIyOSwgNSwgNDEsIDMsIDI0MSwgNzUsIDQxLCAKKyAgICAzLCAyNDEsIDYzLCA0MSwgMywgMjExLCAyMjcsIDQxLCAzLCAyMTEsIDIxNiwgNDEsIDMsIDIyNSwgMTksIDQxLCAzLCAyNTIsIAorICAgIDE4LCA0MSwgMywgMjUxLCAyMTMsIDQxLCAzLCAyMzEsIDExMCwgNDEsIDMsIDIzMywgMjQ5LCA0MSwgMywgMjMxLCA2LCA0MSwgCisgICAgMywgMjQzLCA3NiwgNDEsIDMsIDI0MywgNzUsIDQxLCAzLCAyNDQsIDUxLCA0MSwgMywgMjEzLCAxMzgsIDQxLCAzLCAxMTIsIAorICAgIDQxLCAzLCAyMTYsIDE1NywgNDEsIDMsIDI0OCwgMTUsIDQxLCAzLCAyNDgsIDE5LCA0MSwgMywgMjMyLCAxNjIsIDQxLCAzLCAKKyAgICAyMjIsIDIxMywgNDEsIDMsIDI0NywgMTUzLCA0MSwgMywgMjI5LCAxMjksIDQxLCAzLCAyMTksIDYwLCA0MSwgMywgMjIwLCAKKyAgICA5LCA0MSwgMywgMjEwLCAyMywgNDEsIDMsIDIxMCwgNjcsIDQxLCAzLCAyNDksIDI0NiwgNDEsIDMsIDIzNSwgNzQsIDQxLCAKKyAgICAzLCAyMjgsIDE2NSwgNDEsIDMsIDIxMCwgMjQ0LCA0MSwgMywgMjM0LCAzNCwgNDEsIDMsIDIyOSwgNDcsIDQxLCAzLCAyNDIsIAorICAgIDE4MSwgNDEsIDMsIDIzMCwgMTY2LCA0MSwgMywgMjI4LCA3OSwgNDEsIDMsIDIyNywgMTM4LCA0MSwgMywgNzYsIDQxLCAzLCAKKyAgICAyNDUsIDE1OCwgNDEsIDMsIDIyOSwgNjYsIDQxLCAzLCAyNDEsIDI0NSwgNDEsIDMsIDI0MSwgMjE2LCA0MSwgMywgMjEyLCAKKyAgICAyMiwgNDEsIDMsIDIxMiwgMTIsIDQxLCAzLCAyMjUsIDIyNCwgNDEsIDMsIDI1MiwgMjIsIDQxLCAzLCAyNTIsIDgzLCA0MSwgCisgICAgMywgMjMxLCAxMjIsIDQxLCAzLCAyMzMsIDI1NCwgNDEsIDMsIDIzMywgMjUyLCA0MSwgMywgMjMxLCAxMiwgNDEsIDMsIAorICAgIDI0MywgODMsIDQxLCAzLCAyNDMsIDgxLCA0MSwgMywgMjQ0LCAxNjIsIDQxLCAzLCAyMTMsIDI1NSwgNDEsIDMsIDIxNywgCisgICAgMjMsIDQxLCAzLCAyMTYsIDE5NiwgNDEsIDMsIDI0OCwgMjUsIDQxLCAzLCAyNDgsIDIyLCA0MSwgMywgMjMzLCA2NCwgNDEsIAorICAgIDMsIDIyMywgMTMxLCA0MSwgMywgMjQ4LCA5OCwgNDEsIDMsIDIyOSwgMTQ1LCA0MSwgMywgMjIxLCAxODMsIDQxLCAzLCAKKyAgICAyMjAsIDY1LCA0MSwgMywgMjEwLCA5NCwgNDEsIDMsIDIxMCwgNzQsIDQxLCAzLCAyNTAsIDE5OCwgNDEsIDMsIDIzNSwgCisgICAgMTMyLCA0MSwgMywgMjI4LCAxODMsIDQxLCAzLCAyMTEsIDQ3LCA0MSwgMywgMjM0LCAxODgsIDQxLCAzLCAyMjksIDU3LCAKKyAgICA0MSwgMywgMjI5LCA1MywgNDEsIDMsIDI0MywgNjksIDQxLCAzLCAyNDMsIDU4LCA0MSwgMywgMjMxLCA5NiwgNDEsIDMsIAorICAgIDIyOSwgMTEyLCA0MSwgMywgMjI3LCAxNjAsIDQxLCAzLCAyMjksIDg0LCA0MSwgMywgMjMzLCAyOCwgNDEsIDI0OSwgMjI3LCAKKyAgICA0MSwgMjQzLCAyMzYsIDIxOCwgMTMxLCA0MSwgMjI0LCAxNiwgNzksIDQxLCAzLCAyMjksIDEyOCwgMjQ0LCAyMDQsIDQxLCAKKyAgICAzLCAyMjksIDEyOCwgMTc2LCA0MSwgMywgMjI5LCAxMjgsIDIxOSwgNDIsIDQxLCAxNiwgMjQ0LCAxNTIsIDQxLCAxNiwgCisgICAgMjM0LCAxODYsIDQxLCAxNiwgMjE2LCA4MiwgNDEsIDE2LCAyMjgsIDIxMywgNDEsIDE2LCAyNTIsIDE1NSwgNDEsIDE2LCAKKyAgICAyNDQsIDIwMywgNDEsIDE2LCAyMTcsIDEwMiwgNDEsIDE2LCAyNDgsIDE4NCwgNDEsIDE2LCAyNDcsIDEzMiwgNDEsIDE2LCAKKyAgICAyMzMsIDIxMiwgNDEsIDE2LCAyMTYsIDIyLCA0MSwgMTYsIDI0NywgMTUyLCA0MSwgMTYsIDIzNSwgNjYsIDQxLCAyMSwgCisgICAgMjEwLCA4NiwgNDEsIDIxLCAxMTEsIDQxLCAyMSwgMTA1LCA0MSwgMjEsIDE1OCwgNDEsIDIxLCAxNjEsIDQxLCAyMSwgMTkwLCAKKyAgICA0MSwgMjEsIDE5NSwgNDEsIDIxLCAxOTksIDQxLCAyMSwgMTk2LCA0MSwgMjEsIDIwMSwgNDEsIDMsIDIyOSwgMTI4LCAxODYsIAorICAgIDQxLCAzLCAyMjksIDEyOCwgMjQ3LCAxNTMsIDMzLCA2LCAxLCAyMTAsIDkwLCAzMywgNCwgMSwgMjEwLCA5MCwgMzMsIDYsIAorICAgIDEsIDI0NiwgNDIsIDMzLCA0LCAxLCAyNDYsIDQyLCAzMywgNiwgMSwgMjIzLCA1MiwgMjQ2LCA0NCwgMzMsIDQsIDEsIDIyMywgCisgICAgNTIsIDI0NiwgNDQsIDMzLCA2LCAxLCAyMzUsIDE5MiwgMzMsIDQsIDEsIDIzNSwgMTkyLCAzMywgNiwgMSwgMjQ3LCAxNjksIAorICAgIDMzLCA0LCAxLCAyNDcsIDE2OSwgMzMsIDYsIDEsIDIzMCwgMTQ1LCAyMTQsIDIwNSwgMzMsIDQsIDEsIDIzMCwgMTQ1LCAKKyAgICAyMTQsIDIwNSwgMzMsIDYsIDEsIDI1MSwgMTQ0LCAyMjYsIDIwNSwgMzMsIDQsIDEsIDI1MSwgMTQ0LCAyMjYsIDIwNSwgMzMsIAorICAgIDYsIDEsIDIyOSwgOTIsIDIxMSwgMzEsIDMzLCA0LCAxLCAyMjksIDkyLCAyMTEsIDMxLCAzMywgNiwgMSwgMjExLCAyOCwgMiwgCisgICAgMjUyLCAxOTMsIDIxMSwgMzEsIDMzLCA0LCAxLCAyMTEsIDI4LCAyLCAyNTIsIDE5MywgMjExLCAzMSwgMzMsIDYsIDEsIAorICAgIDIzNSwgMTkwLCAyMTEsIDU5LCAzMywgNCwgMSwgMjM1LCAxOTAsIDIxMSwgNTksIDMzLCA2LCAxLCAyMjMsIDUyLCAyMTAsIAorICAgIDIxMiwgMzMsIDQsIDEsIDIyMywgNTIsIDIxMCwgMjEyLCAzMywgNiwgMSwgMjM1LCAxOTAsIDYxLCAzMywgNCwgMSwgMjM1LCAKKyAgICAxOTAsIDYxLCAzMywgNiwgMSwgMjUwLCA4LCAyMzIsIDE5OCwgMjEwLCAxODMsIDMzLCA0LCAxLCAyNTAsIDgsIDIzMiwgCisgICAgMTk4LCAyMTAsIDE4MywgMzMsIDYsIDEsIDI1MSwgMjIyLCAyMTAsIDE4MywgMzMsIDQsIDEsIDI1MSwgMjIyLCAyMTAsIAorICAgIDE4MywgMzMsIDYsIDEsIDIzNSwgMTkwLCAyNTAsIDgsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDQsIDEsIDIzNSwgMTkwLCAKKyAgICAyNTAsIDgsIDIzMiwgMTk4LCAyMTAsIDE4MywgMzMsIDYsIDEsIDIxMCwgMjQ2LCAzMywgNCwgMSwgMjEwLCAyNDYsIDMzLCAKKyAgICA2LCAxLCAyMjMsIDUyLCAyMTUsIDE3OSwgMzMsIDQsIDEsIDIyMywgNTIsIDIxNSwgMTc5LCAzMywgNiwgMSwgMjE5LCA1NCwgCisgICAgMjQ4LCA5OCwgMzMsIDQsIDEsIDIxOSwgNTQsIDI0OCwgOTgsIDMzLCA2LCAxLCAyMTksIDU0LCAyNDUsIDE4MiwgMzMsIDQsIAorICAgIDEsIDIxOSwgNTQsIDI0NSwgMTgyLCAzMywgNiwgMSwgMjE5LCA1NCwgMjQ1LCAxNjcsIDMzLCA0LCAxLCAyMTksIDU0LCAKKyAgICAyNDUsIDE2NywgMzMsIDYsIDEsIDIzMCwgMTQ5LCA3OCwgMzMsIDQsIDEsIDIzMCwgMTQ5LCA3OCwgMzMsIDYsIDEsIDI1MSwgCisgICAgMjQ4LCA3OCwgMzMsIDQsIDEsIDI1MSwgMjQ4LCA3OCwgMzMsIDYsIDEsIDUyLCAyMzAsIDE0OSwgNzgsIDMzLCA0LCAxLCAKKyAgICA1MiwgMjMwLCAxNDksIDc4LCAzMywgMSwgMjMwLCA5MSwgNzgsIDM4LCAzMywgMjEyLCAxMDAsIDM4LCAzMywgMjE2LCAyNDksIAorICAgIDIzMCwgMTk2LCA1MCwgMzgsIDMzLCAyNDAsIDIxOCwgMjMwLCAxOTYsIDUwLCAzOCwgMzMsIDIxNiwgMTQ5LCAyMzAsIDE5NiwgCisgICAgNTAsIDIxOSwgOTUsIDI1MywgMjI0LCAzOCwgMzMsIDEsIDIxNCwgMjAyLCAyMzYsIDY3LCAzOCwgMzMsIDEsIDc0LCAzOCwgCisgICAgMzMsIDEsIDIxMSwgOCwgMzgsIDMzLCAxLCA2OSwgMzgsIDMzLCAxLCAyNDIsIDEwLCA1MCwgMzgsIDMzLCAxLCAyMTEsIDI3LCAKKyAgICAzOCwgMzMsIDEsIDIxOSwgNTQsIDUwLCAzOCwgMzMsIDEsIDIyNiwgMjA1LCAzOCwgMzMsIDIzNCwgMTk4LCAzOCwgMzMsIAorICAgIDIyNSwgMjMxLCAzMywgMjM0LCAxOTgsIDMzLCAyMjUsIDIzMSwgMzMsIDYsIDEsIDI0NiwgNTQsIDMzLCA0LCAxLCAyNDYsIAorICAgIDU0LCAzMywgNiwgMSwgMjQ2LCAzNSwgMzMsIDQsIDEsIDI0NiwgMzUsIDMzLCA2LCAxLCAyMTAsIDUyLCAzMywgNCwgMSwgCisgICAgMjEwLCA1MiwgMzMsIDYsIDEsIDI1MCwgMjE0LCAzMywgNCwgMSwgMjUwLCAyMTQsIDMzLCA2LCAxLCAyNDYsIDMzLCAzMywgCisgICAgNCwgMSwgMjQ2LCAzMywgMzMsIDYsIDEsIDIxNywgMjQsIDIsIDIzMCwgMjI5LCAxMDMsIDMzLCA0LCAxLCAyMTcsIDI0LCAyLCAKKyAgICAyMzAsIDIyOSwgMTAzLCAzMywgNiwgMSwgMjE1LCA3OCwgMzMsIDQsIDEsIDIxNSwgNzgsIDMzLCA2LCAxLCAyMTUsIDE2MSwgCisgICAgMzMsIDQsIDEsIDIxNSwgMTYxLCAzMywgNiwgMSwgMjE1LCAxNjUsIDMzLCA0LCAxLCAyMTUsIDE2NSwgMzMsIDYsIDEsIAorICAgIDIxNywgMjksIDMzLCA0LCAxLCAyMTcsIDI5LCAzMywgNiwgMSwgMjQwLCAyMDUsIDMzLCA0LCAxLCAyNDAsIDIwNSwgMzMsIAorICAgIDYsIDEsIDIxOSwgMjA4LCAzMywgNCwgMSwgMjE5LCAyMDgsIDM4LCAzMywgMSwgMjM1LCAxOTAsIDc2LCAyMCwgMSwgNjEsIAorICAgIDIwLCAxLCAxNzYsIDIwLCAxLCA2OSwgMjAsIDEsIDIzMywgMjIzLCAyMCwgMSwgMjQ1LCAyMTcsIDIwLCAxLCAyMjMsIDExMSwgCisgICAgMjAsIDEsIDIxNywgODcsIDIwLCAxLCA3OCwgMjAsIDEsIDIyNywgMTUyLCAyMCwgMSwgNzQsIDIwLCAxLCAyMzMsIDE0MSwgCisgICAgMjAsIDEsIDE5MSwgMjAsIDEsIDIyMiwgMjQyLCAyMCwgMSwgMjIzLCAzMiwgMjAsIDEsIDIzMywgNTUsIDIwLCAxLCAyMzEsIAorICAgIDg0LCAyMCwgMSwgMjE3LCAxMDIsIDIwLCAxLCAyMjksIDE1MSwgMjAsIDEsIDIyOCwgMTg4LCAyMCwgMSwgMTk0LCAyMCwgMSwgCisgICAgMjE4LCA1LCAyMCwgMSwgMjMwLCAxMDcsIDIwLCAxLCAyMjAsIDI5LCAyMCwgMSwgMjE5LCAxOTMsIDIwLCAxLCAyMjAsIDM5LCAKKyAgICAyMCwgMSwgMjIwLCAxMjUsIDIwLCAxLCAyMzMsIDE2MSwgMjAsIDEsIDIzNCwgMTYyLCAyMCwgMSwgMjI3LCAyMTMsIDIwLCAKKyAgICAxLCAyMjcsIDI0MiwgMjAsIDEsIDIyOCwgMTU5LCAyMCwgMSwgMjEwLCAyMjYsIDIwLCAxLCAyMTksIDIyNywgMjAsIDEsIAorICAgIDIxMCwgMTg3LCAyMCwgMSwgMTkyLCAyMCwgMSwgMjI4LCAxNCwgMjAsIDEsIDIzNCwgMTQ4LCAyMCwgMSwgMjI1LCAxNTQsIAorICAgIDIwLCAxLCAyMjgsIDE4MSwgMjAsIDEsIDIyNywgMjUxLCAyMCwgMSwgMjI0LCAxNDcsIDIwLCAxLCAyMTEsIDE5MiwgMjAsIAorICAgIDEsIDIyNSwgMjE0LCAyMCwgMSwgMjQ0LCAxNTUsIDIwLCAxLCAyMjIsIDE0MiwgMjAsIDEsIDIzMiwgMTAzLCAyMCwgMSwgCisgICAgMjMwLCAyMzUsIDIwLCAxLCAyMjgsIDIzOCwgMjAsIDEsIDIyMywgNTQsIDIwLCAxLCAyMjMsIDE3NCwgMjAsIDEsIDIzNCwgCisgICAgMTcxLCAyMCwgMSwgMjI5LCAxMiwgMjAsIDEsIDIyOSwgNjEsIDIwLCAxLCAyMjksIDgyLCAyMCwgMSwgMjIwLCA5LCAyMCwgCisgICAgMSwgMjI0LCAxNTAsIDIwLCAxLCAyNDMsIDI0MSwgMjAsIDEsIDI0NCwgNDUsIDIwLCAxLCAyMTIsIDY1LCAyMCwgMSwgMTk4LCAKKyAgICAyMCwgMSwgMjMyLCAyNDcsIDIwLCAxLCAyMjUsIDExMSwgMjAsIDEsIDIzMiwgMTI1LCAyMCwgMSwgMjM0LCAzNCwgMjAsIDEsIAorICAgIDIzMSwgMTE5LCAyMCwgMSwgMjIzLCA4NiwgMjAsIDEsIDIzMSwgNjMsIDIwLCAxLCAxODYsIDIwLCAxLCAyMTYsIDExOCwgCisgICAgMjAsIDEsIDIzNCwgOTgsIDIwLCAxLCAyMzAsIDE2NiwgMjAsIDEsIDIzMSwgMTI3LCAyMCwgMSwgMjE2LCAyMzEsIDIwLCAxLCAKKyAgICAyMzQsIDEsIDIwLCAxLCAyMTYsIDI0OCwgMjAsIDEsIDIyNywgMjQzLCAyMCwgMSwgMjIxLCAyNTMsIDIwLCAxLCAyNDQsIAorICAgIDIwMCwgMjAsIDEsIDIzNCwgMywgMjAsIDEsIDIzNCwgMzAsIDIwLCAzOCwgMTY0LCAyMzQsIDExLCAyMCwgMzgsIDE2NCwgCisgICAgMjE1LCAxMTEsIDIwLCAyMjgsIDE4NywgMjAsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjAsIDI0OSwgMjM0LCAyMCwgMjQ5LCAKKyAgICAyMjcsIDIwLCAyMjAsIDE1MiwgMjAsIDIyNCwgMTYsIDc5LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjEwLCAyNTQsIDIyNSwgCisgICAgNjQsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjUsIDY0LCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjEwLCAKKyAgICAyNTQsIDIyMCwgODYsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjAsIDg2LCA1OCwgMSwgMjUwLCAxMDQsIAorICAgIDEzOCwgMjEwLCAyNTQsIDIyNCwgMzMsIDU4LCAxLCAyNTAsIDEwNCwgMTM4LCAyMTEsIDcwLCAyMjQsIDMzLCA1OCwgMSwgCisgICAgMjUwLCAxMDQsIDEzOCwgMjEwLCAyNTQsIDIyMiwgMTQyLCA1OCwgMSwgMjUwLCAxMDQsIDEzOCwgMjExLCA3MCwgMjIyLCAKKyAgICAxNDIsIDU4LCAxLCAyNDUsIDI4LCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAxMjUsIDI0NiwgMTI2LCAxMzgsIDEzMCwgCisgICAgNTgsIDEsIDIzMCwgMjMwLCAyNDYsIDEyNiwgMTM4LCAxMzAsIDU4LCAxLCAxMjEsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIAorICAgIDEsIDI0NSwgMjcsIDI0NiwgMTI2LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjgsIDI0NiwgMTI2LCAyMzMsIDQ1LCAxMzgsIAorICAgIDEzMCwgNTgsIDEsIDEyNSwgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMzAsIDI0NiwgMTI2LCAKKyAgICAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDEyMSwgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAKKyAgICAyNywgMjQ2LCAxMjYsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyOCwgMjMzLCA0NSwgMTM4LCAxMzAsIDU4LCAKKyAgICAxLCAxMjUsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgMjMwLCAyMzAsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgCisgICAgMTIxLCAyMzMsIDQ1LCAxMzgsIDEzMCwgNTgsIDEsIDI0NSwgMjcsIDIzMywgNDUsIDEzOCwgMTMwLCA1OCwgMSwgNTksIDY3LCAKKyAgICAxMzAsIDU4LCAxLCA1OSwgMjE5LCA5NywgNTgsIDEsIDU5LCAyMDMsIDEzMCwgNTgsIDEsIDIzMiwgMTE0LCA0NCwgMjQ5LCAKKyAgICAxNjksIDI1NCwgMTE3LCA1OCwgMSwgMjIzLCAxNjAsIDEyMCwgNzUsIDU4LCAxLCAyMjMsIDE2MCwgMTI0LCA3NSwgNTgsIDEsIAorICAgIDIyMywgMTYwLCAyNDUsIDM5LCA3OSwgNTgsIDEsIDIyMywgMTYwLCAyMzUsIDIwMCwgMjQ1LCAzOSwgNzksIDU4LCAxLCAKKyAgICAxMjEsIDIzNSwgMjAwLCAyNDUsIDM5LCA3OSwgNTgsIDEsIDIxOCwgMTEzLCAyMiwgMTI1LCAyMTYsIDMxLCA1OCwgMSwgCisgICAgMjE4LCAxMTMsIDIyLCAxMjEsIDIxNiwgMzEsIDcsIDYsIDEsIDI0NSwgMjA3LCAyNTQsIDE3OSwgNywgNCwgMSwgMjQ1LCAKKyAgICAyMDcsIDI1NCwgMTc5LCA3LCA2LCAxLCAyNDUsIDIwNywgMjU0LCAyMDUsIDcsIDQsIDEsIDI0NSwgMjA3LCAyNTQsIDIwNSwgCisgICAgNywgNiwgMSwgMjQxLCAyMTQsIDcsIDQsIDEsIDI0MSwgMjE0LCA3LCA2LCAxLCAyMTUsIDQwLCA3LCA0LCAxLCAyMTUsIDQwLCAKKyAgICA3LCA2LCAxLCAyMTUsIDIzMCwgNywgNCwgMSwgMjE1LCAyMzAsIDcsIDYsIDEsIDI0OSwgMTE4LCA3LCA0LCAxLCAyNDksIAorICAgIDExOCwgNywgNiwgMSwgMjQ5LCAxMTksIDIsIDI0OSwgMjI3LCA3LCA0LCAxLCAyNDksIDExOSwgMiwgMjQ5LCAyMjcsIDcsIAorICAgIDEsIDQsIDYsIDI0NSwgMTQsIDcsIDEsIDQsIDYsIDIyMiwgOTMsIDcsIDYsIDEsIDI1NSwgODIsIDcsIDQsIDEsIDI1NSwgCisgICAgODIsIDcsIDYsIDEsIDI1NCwgODEsIDcsIDQsIDEsIDI1NCwgODEsIDcsIDYsIDEsIDI1MywgMjAwLCA3LCA0LCAxLCAyNTMsIAorICAgIDIwMCwgNywgNiwgMSwgMjUzLCAxODQsIDcsIDQsIDEsIDI1MywgMTg0LCA3LCA2LCAxLCAyNTMsIDE4NSwgMiwgMjAzLCAKKyAgICAxMzAsIDcsIDQsIDEsIDI1MywgMTg1LCAyLCAyMDMsIDEzMCwgNywgNiwgMSwgMjUzLCAxNzUsIDcsIDQsIDEsIDI1MywgCisgICAgMTc1LCA3LCA2LCAxLCAyMjMsIDUyLCAyNTEsIDc1LCAyLCAyNDcsIDEyOCwgNywgNCwgMSwgMjIzLCA1MiwgMjUxLCA3NSwgCisgICAgMiwgMjQ3LCAxMjgsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCA5MSwgNywgNiwgMSwgCisgICAgMjM1LCAzMCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgMjQ4LCA3LCA5MSwgNywgNiwgMSwgMjM1LCAKKyAgICAzMCwgMiwgMjE4LCAxMDUsIDIyLCAyNDgsIDcsIDkxLCA3LCA0LCAxLCAyMzUsIDMwLCAyLCAyMTgsIDEwNSwgMjIsIDI0OCwgCisgICAgNywgOTEsIDcsIDYsIDEsIDI1MSwgMTQzLCAxNTYsIDcsIDQsIDEsIDI1MSwgMTQzLCAxNTYsIDcsIDYsIDEsIDIzMywgMTU1LCAKKyAgICAyLCAxMjUsIDkxLCA3LCA0LCAxLCAyMzMsIDE1NSwgMiwgMTI1LCA5MSwgNywgNiwgMSwgMTQ0LCAyLCAyMDAsIDIxOCwgCisgICAgMTA1LCAyMjYsIDEyNCwgNywgNCwgMSwgMTQ0LCAyLCAyMDAsIDIxOCwgMTA1LCAyMjYsIDEyNCwgNywgNiwgMSwgMTQ0LCAyLCAKKyAgICAyMzIsIDEyOSwgNywgNCwgMSwgMTQ0LCAyLCAyMzIsIDEyOSwgNywgNiwgMSwgMjI2LCAxODcsIDcsIDQsIDEsIDIyNiwgCisgICAgMTg3LCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMjYsIAorICAgIDExMCwgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA2LCAxLCAyMjYsIDExMCwgMiwgMjQ0LCA2MSwgNywgNCwgCisgICAgMSwgMjI2LCAxMTAsIDIsIDI0NCwgNjEsIDcsIDYsIDEsIDIyNiwgMTEwLCAyLCAyMTgsIDIzMSwgMjE3LCA3OCwgNywgNCwgCisgICAgMSwgMjI2LCAxMTAsIDIsIDIxOCwgMjMxLCAyMTcsIDc4LCA3LCA2LCAxLCAyMjQsIDEwMCwgMiwgMjE4LCAxMDUsIDIxNiwgCisgICAgMTQwLCAyNDgsIDQ3LCA3LCA0LCAxLCAyMjQsIDEwMCwgMiwgMjE4LCAxMDUsIDIxNiwgMTQwLCAyNDgsIDQ3LCA3LCA2LCAxLCAKKyAgICAyMjQsIDEwMCwgMiwgMjQ4LCA3LCA5MSwgNywgNCwgMSwgMjI0LCAxMDAsIDIsIDI0OCwgNywgOTEsIDcsIDYsIDEsIDIyMywgCisgICAgMjI3LCAyMjIsIDE4OCwgNywgNCwgMSwgMjIzLCAyMjcsIDIyMiwgMTg4LCA3LCA2LCAxLCAyMjIsIDEzMiwgMjIyLCAxODgsIAorICAgIDcsIDQsIDEsIDIyMiwgMTMyLCAyMjIsIDE4OCwgNywgNiwgMSwgMjE0LCAxMDYsIDIsIDI0OCwgNywgOTEsIDcsIDQsIDEsIAorICAgIDIxNCwgMTA2LCAyLCAyNDgsIDcsIDkxLCA3LCA2LCAxLCAyMTIsIDEwNiwgNywgNCwgMSwgMjEyLCAxMDYsIDcsIDYsIDEsIAorICAgIDIxMywgMTQ1LCAyMTAsIDE1OSwgNywgNCwgMSwgMjEzLCAxNDUsIDIxMCwgMTU5LCA3LCA2LCAxLCAyMTYsIDE1MywgMiwgCisgICAgOTEsIDcsIDQsIDEsIDIxNiwgMTUzLCAyLCA5MSwgNywgNiwgMSwgMjE2LCAxNTMsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgCisgICAgMjQ4LCA0NywgNywgNCwgMSwgMjE2LCAxNTMsIDIsIDIxOCwgMTA1LCAyMTYsIDE0MCwgMjQ4LCA0NywgNywgNiwgMSwgMjEzLCAKKyAgICAyNDUsIDcsIDQsIDEsIDIxMywgMjQ1LCA3LCA2LCAxLCAyNDUsIDczLCA3LCA0LCAxLCAyNDUsIDczLCA3LCA2LCAxLCAyMzUsIAorICAgIDE3OCwgNywgNCwgMSwgMjM1LCAxNzgsIDcsIDYsIDEsIDI0OSwgMjE1LCA3LCA0LCAxLCAyNDksIDIxNSwgNTgsIDEsIDIxNCwgCisgICAgMTMzLCA3LCA0LCAxLCAyNDYsIDc3LCA3LCA0LCAxLCAyMzIsIDg5LCA3LCA0LCAxLCAyMzAsIDg1LCA3LCA0LCAxLCAyMjcsIAorICAgIDIwNSwgNywgNCwgMSwgMjIyLCAxMzEsIDcsIDEsIDQsIDYsIDIyMiwgMTMxLCA3LCA0LCAxLCAyMTUsIDEwOSwgNywgNCwgMSwgCisgICAgMjE0LCAxOTcsIDcsIDYsIDEsIDIzNSwgMjIwLCAyNDksIDY4LCA3LCA0LCAxLCAyMzUsIDIyMCwgMjQ5LCA2OCwgNywgNiwgCisgICAgMSwgMjM1LCAyMjAsIDI0NSwgMTQsIDcsIDQsIDEsIDIzNSwgMjIwLCAyNDUsIDE0LCA3LCA2LCAxLCAyMzUsIDIyMCwgMjQzLCAKKyAgICAyMDksIDcsIDYsIDEsIDIxNSwgOTQsIDIzNSwgMjIwLCAyNDMsIDIwOSwgNywgNCwgMSwgMjE1LCA5NCwgMjM1LCAyMjAsIAorICAgIDI0MywgMjA5LCA3LCA2LCAxLCAyMTUsIDk0LCAxNTYsIDcsIDQsIDEsIDIxNSwgOTQsIDE1NiwgNywgNiwgMSwgMjM1LCAKKyAgICAyMjAsIDE1MywgNywgNCwgMSwgMjM1LCAyMjAsIDE1MywgNywgNiwgMSwgMjM1LCAyMjAsIDIyMiwgOTMsIDcsIDQsIDEsIAorICAgIDIzNSwgMjIwLCAyMjIsIDkzLCA3LCA2LCAxLCAyMzUsIDIyMCwgMjE3LCAxNTMsIDcsIDQsIDEsIDIzNSwgMjIwLCAyMTcsIAorICAgIDE1MywgNTgsIDEsIDEyMSwgMjUwLCAzOSwgMjU1LCAyMywgNTgsIDEsIDI0OSwgMjM0LCA1OCwgMSwgMjE5LCAyNTMsIDI0NSwgCisgICAgMTA2LCA1MCwgNywgNiwgMSwgMjIyLCAxLCA3LCA0LCAxLCAyMjIsIDEsIDcsIDYsIDEsIDIxNSwgOTQsIDI0MiwgNjcsIDcsIAorICAgIDQsIDEsIDIzMywgMTU1LCAyLCAyMjMsIDU4LCAyNDEsIDU5LCAyMiwgMjUyLCA0OSwgNywgNiwgMSwgMjMwLCAzMSwgMiwgCisgICAgMjQ4LCA0NywgNywgNCwgMSwgMjMwLCAzMSwgMiwgMjQ4LCA0NywgNywgNiwgMSwgMjUxLCA3NSwgMiwgMTMwLCA3LCA0LCAxLCAKKyAgICAyNTEsIDc1LCAyLCAxMzAsIDcsIDYsIDEsIDI0MywgMjEwLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDI0MywgMjEwLCAKKyAgICAyLCAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDIzNSwgMzAsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjM1LCAzMCwgMiwgCisgICAgMjI2LCAyNTIsIDkxLCA3LCA2LCAxLCAyMzAsIDMxLCAyLCAyMjYsIDI1MiwgOTEsIDcsIDQsIDEsIDIzMCwgMzEsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjIzLCAyMjcsIDIsIDIyNiwgMjUyLCA5MSwgNywgNCwgMSwgMjIzLCAyMjcsIDIsIAorICAgIDIyNiwgMjUyLCA5MSwgNywgNiwgMSwgMjIyLCA5NCwgMiwgMjI2LCAyNTIsIDkxLCA3LCA0LCAxLCAyMjIsIDk0LCAyLCAKKyAgICAyMjYsIDI1MiwgOTEsIDcsIDYsIDEsIDI0MiwgNjgsIDIsIDEwMywgNTgsIDEsIDYsIDI0MiwgNjgsIDIsIDkxLCA1OCwgMSwgCisgICAgNCwgMjcsIDIyNiwgMjM4LCA3LCAxLCA0LCA2LCAyMTUsIDk0LCAxOTQsIDcsIDI0NSwgMTExLCAxLCAyMjMsIDUyLCAyNDUsIAorICAgIDE0LCA3LCAyNDUsIDExMSwgMSwgMjIzLCA1MiwgMjI2LCAxMDksIDcsIDI0NSwgMTExLCAxLCAyMzUsIDIwMCwgMTk0LCA3LCAKKyAgICAyNDUsIDExMSwgMSwgMjQwLCAxNjEsIDIzMiwgMTM1LCA3LCAyNDUsIDExMSwgMSwgMjU0LCAzMSwgMTk0LCAyMTcsIDIzMSwgCisgICAgMjI5LCAyMTksIDEsIDYxLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDc0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDUsIDI0NiwgCisgICAgNTYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgNjksIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgNzYsIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMSwgNzgsIDIxNywgMjMxLCAyMjksIDIxOSwgNSwgMjQyLCA0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIzNCwgCisgICAgMzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjM0LCAxMTEsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQyLCAxODEsIAorICAgIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQyLCAyMzEsIDIxNywgMjMxLCAyMjksIDIxOSwgNSwgMjU0LCA4MywgMjE3LCAKKyAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDksIDI0NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAxLCAyNTAsIDk0LCAyMTcsIDIzMSwgCisgICAgMjI5LCAyMTksIDEsIDIzNSwgNzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjM1LCAxMTUsIDIxNywgMjMxLCAyMjksIAorICAgIDIxOSwgMSwgMjE1LCAxMzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjE1LCAxNDAsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgCisgICAgMjQ4LCAxMTMsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjQ4LCAxMjIsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMTEyLCAKKyAgICAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIxNiwgMTU3LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI0NywgMTUzLCAyMTcsIAorICAgIDIzMSwgMjI5LCAyMTksIDEsIDI0OCwgMTUsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjI4LCA3OSwgMjE3LCAyMzEsIDIyOSwgCisgICAgMjE5LCAxLCAyMjUsIDE5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDIyNSwgMTI0LCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIAorICAgIDI1MSwgMjEzLCAyMTcsIDIzMSwgMjI5LCAyMTksIDEsIDI1MiwgMTgsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjMwLCAKKyAgICAxNjYsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjIyLCAyMTMsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjMyLCAxNjIsIAorICAgIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjIyLCAxNjcsIDIxNywgMjMxLCAyMjksIDIxOSwgMSwgMjE5LCA2MCwgMjE3LCAKKyAgICAyMzEsIDIyOSwgMjE5LCAxLCAyNDEsIDc1LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCA2MSwgMjE3LCAyMzEsIDIyOSwgCisgICAgMjE5LCAyNSwgNSwgNzQsIDIxNywgMjMxLCAyMjksIDIxOSwgMjUsIDUsIDY5LCAyMTcsIDIzMSwgMjI5LCAyMTksIDI1LCA1LCAKKyAgICA3NiwgMjE3LCAyMzEsIDIyOSwgMjE5LCAyNSwgNSwgMjI2LCAxODcsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAxNSwgCisgICAgMjMxLCAxNjMsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAxNSwgMjMxLCAxNjIsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAKKyAgICAxNSwgMjMxLCAxNjEsIDIxNywgMjMxLCAyMjksIDIxOSwgMjI1LCAxNSwgMjMxLCAxNjAsIDIyOCwgNjEsIDIzNSwgMjQ3LCAKKyAgICAyNDQsIDEwLCAxMjMsIDIyNCwgMjQsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMjMsIDI0MiwgMzQsIDIyOCwgNjEsIAorICAgIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMzQsIDIyNCwgMjIsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyNDQsIDEwLCAxMjMsIDIxOSwgCisgICAgMTE5LCAyMjgsIDYxLCAyMzUsIDI0NywgMjQ0LCAxMCwgMTIzLCAyNDUsIDE5NiwgMjI4LCA2MSwgMjM1LCAyNDcsIDI0NCwgCisgICAgMTAsIDEzNCwgMjE5LCAxMTgsIDIyOCwgNjEsIDIzNSwgMjQ3LCAyMjQsIDI1LCA3OSwgMjI4LCA2MSwgMjM1LCAyNDcsIAorICAgIDIyNSwgNDMsIDc5LCAyMjgsIDYxLCAyMzUsIDI0NywgMjIyLCAxMjAsIDc5LCAyMjgsIDYxLCAyMzUsIDI0NywgMjI0LCAyNiwgCisgICAgNzksIDIyNSwgMTQ3LCAxLCAxNzYsIDIyNSwgMTQ3LCAxLCAyMzQsIDEzOCwgMjI1LCAxNDcsIDEsIDI0MywgMTQyLCAyMjUsIAorICAgIDE0NywgMSwgMjI5LCA4MiwgMjI1LCAxNDcsIDEsIDI1MSwgNDEsIDIyNSwgMTQ3LCAxLCAyNTAsIDE2NSwgMjI1LCAxNDcsIAorICAgIDEsIDIzNSwgMTQ3LCAyMjUsIDE0NywgMSwgMjI3LCAxNjksIDIyNSwgMTQ3LCAxLCAyMTcsIDEwNiwgMjI1LCAxNDcsIDEsIAorICAgIDIxNiwgMjA5LCAyMjUsIDE0NywgMSwgMjQ4LCAyMjksIDIyNSwgMTQ3LCAxLCAxOTgsIDIyNSwgMTQ3LCAxLCAxOTEsIDIyNSwgCisgICAgMTQ3LCAxLCAyMjUsIDE1MCwgMjI1LCAxNDcsIDEsIDI1MiwgMTk5LCAyMjUsIDE0NywgMSwgMTg2LCAyMjUsIDE0NywgMSwgCisgICAgMjE1LCAxODQsIDIyNSwgMTQ3LCAxLCAyMTUsIDE3NiwgMjI1LCAxNDcsIDEsIDI0NiwgNDYsIDIyNSwgMTQ3LCAxLCAyMTIsIAorICAgIDY1LCAyMjUsIDE0NywgMSwgMjEwLCA4MiwgMjI1LCAxNDcsIDEsIDIxMCwgMTE2LCAyMjUsIDE0NywgMSwgNCwgNjEsIDIyNSwgCisgICAgMTQ3LCAxLCAxOTIsIDIyNSwgMTQ3LCAxLCAyMDUsIDIyNSwgMTQ3LCAxLCAyMzMsIDE0MSwgMjI1LCAxNDcsIDEsIDIyMCwgCisgICAgMTA0LCAyMjUsIDE0NywgMSwgMjA2LCAyMjUsIDE0NywgMSwgMTYyLCAyMjUsIDE0NywgMSwgNjEsIDIyNSwgMTQ3LCAxLCAKKyAgICA3NCwgMjI1LCAxNDcsIDEsIDY5LCAyMjUsIDE0NywgMSwgNzYsIDIyNSwgMTQ3LCAxLCA3OCwgMjI1LCAxNDcsIDEsIDIyNCwgCisgICAgOTEsIDIyNSwgMTQ3LCAxLCAyMTEsIDE2NSwgMjI1LCAxNDcsIDEsIDI0NCwgMjA0LCAyMjUsIDE0NywgMSwgMjQzLCAzNiwgCisgICAgMjI1LCAxNDcsIDEsIDI0NSwgMjE3LCAyMjUsIDE0NywgMjE4LCA3NCwgMSwgMjEyLCA2NSwgMjI1LCAxNDcsIDIxOCwgNzQsIAorICAgIDEsIDE5MiwgMjI1LCAxNDcsIDEsIDIxNSwgMTU3LCAyMjUsIDE0NywgMSwgMjE1LCAxNDUsIDIyNSwgMTQ3LCAxLCAyNDgsIAorICAgIDE0MywgMjI1LCAxNDcsIDEsIDIyOCwgMTE1LCAyMjUsIDE0NywgMSwgMjU0LCAxNDksIDE5MiwgMjI1LCAxNDcsIDEsIDIxMywgCisgICAgMTM0LCAyMjAsIDEwNCwgMjI1LCAxNDcsIDEsIDIxMywgMTM1LCAxNjIsIDIyNSwgMTQ3LCAxLCAyNTMsIDIzMSwgMjQ0LCAKKyAgICAyMDQsIDIyNSwgMTQ3LCAyMTgsIDc0LCAxLCAyMDUsIDIyNSwgMTQ3LCAyMTgsIDI2LCAxLCAyMDUsIDIyNSwgMTQ3LCAxLCAKKyAgICAyNTEsIDcsIDIyNSwgMTQ3LCAyMTksIDE1NywgMjQxLCAyNDMsIDc5LCAyMjUsIDE0NywgNTIsIDI0MSwgMjQzLCA3OSwgCisgICAgMjI1LCAxNDcsIDE2NCwgMjIwLCA5NywgMjI1LCAxNDcsIDE2NCwgNTIsIDIyMCwgOTcsIDE3OSwgNSwgMjU0LCA4MywgMTc5LCAKKyAgICA1LCAyMTMsIDE0NywgMTc5LCAxLCA2MSwgMTc5LCAxLCAyNTUsIDgyLCAxNzksIDEsIDc0LCAxNzksIDEsIDIzNiwgNDAsIAorICAgIDE3OSwgMSwgNjksIDE3OSwgMSwgMjE0LCAxMTgsIDE3OSwgMSwgMTQ5LCAxNTMsIDE3OSwgMSwgMTQ5LCAyMjIsIDE4MiwgCisgICAgMTc5LCAxLCAxNDksIDE1NiwgMTc5LCAxLCAxNDksIDIzMiwgMTkxLCAxNzksIDEsIDc2LCAxNzksIDEsIDI0NSwgMjE3LCAKKyAgICAxNzksIDEsIDI1NCwgMjEwLCAxNzksIDEsIDc4LCAxNzksIDEsIDIyNiwgMTg3LCAxNzksIDEsIDI1MywgMjAwLCAxNzksIDEsIAorICAgIDE3NiwgMTc5LCAxLCAyMzQsIDEzOCwgMTc5LCAxLCAyNDMsIDE0MiwgMTc5LCAxLCAyNDMsIDAsIDE3OSwgMSwgMjI5LCA4MiwgCisgICAgMTc5LCAxLCAyNTEsIDQxLCAxNzksIDEsIDI1MCwgMTY1LCAxNzksIDEsIDIzNSwgMTQ3LCAxNzksIDEsIDIzNSwgMTIwLCAKKyAgICAxNzksIDEsIDIyNywgMTY5LCAxNzksIDEsIDIxNSwgMTU3LCAxNzksIDEsIDIxNSwgMTQ1LCAxNzksIDEsIDI0OCwgMTQzLCAKKyAgICAxNzksIDEsIDI0OCwgMTI3LCAxNzksIDEsIDIyOCwgMTE1LCAxNzksIDEsIDIxNywgMTA2LCAxNzksIDEsIDIxNiwgMjA5LCAKKyAgICAxNzksIDEsIDI0OCwgMjI5LCAxNzksIDEsIDI0OCwgMzMsIDE3OSwgMSwgMTk4LCAxNzksIDEsIDE5MSwgMTc5LCAxLCAyMjUsIAorICAgIDE1MCwgMTc5LCAxLCAyNTIsIDE5OSwgMTc5LCAxLCAyNTIsIDI2LCAxNzksIDEsIDE4NiwgMTc5LCAxLCAxOTIsIDE3OSwgMSwgCisgICAgMjA1LCAxNzksIDEsIDIzMywgMTQxLCAxNzksIDEsIDIxNCwgMjcsIDE3OSwgMSwgMjIwLCAxMDQsIDE3OSwgMSwgMjE4LCAKKyAgICAyMjUsIDE3OSwgMSwgMjA2LCAxNzksIDEsIDE2MiwgMTc5LCAxLCAyMzIsIDE5MCwgMTc5LCAxMTcsIDUsIDI0MiwgNTEsIAorICAgIDE3OSwgMjUsIDUsIDI1NSwgODIsIDE3OSwgMjUsIDUsIDc0LCAxNzksIDI1LCA1LCAyMzYsIDQwLCAxNzksIDI1LCA1LCA2OSwgCisgICAgMTc5LCAyNSwgNSwgMjE0LCAxMTgsIDE3OSwgMjUsIDUsIDE0OSwgMTUzLCAxNzksIDI1LCA1LCAxNDksIDIyMiwgMTgyLCAKKyAgICAxNzksIDI1LCA1LCAxNDksIDE1NiwgMTc5LCAyNSwgNSwgMTQ5LCAyMzIsIDE5MSwgMTc5LCAyNSwgNSwgNzYsIDE3OSwgMjUsIAorICAgIDUsIDI0NSwgMjE3LCAxNzksIDI1LCA1LCAyNTQsIDIxMCwgMTc5LCAyNSwgNSwgNzgsIDE3OSwgMjUsIDUsIDIyNiwgMTg3LCAKKyAgICAxNzksIDI1LCA1LCAyNTMsIDIwMCwgMTc5LCA1LCAyMTMsIDE1MiwgMTc5LCAyNDgsIDE4NiwgMTc5LCA1MiwgMjQ4LCAxODYsIAorICAgIDE3OSwgMjEsIDIxMCwgODYsIDE3OSwgMjEsIDExMSwgMTc5LCAyMSwgMTA1LCAxNzksIDIxLCAxNTgsIDE3OSwgMjEsIDE2MSwgCisgICAgMTc5LCAyMSwgMTkwLCAxNzksIDIxLCAxOTUsIDE3OSwgMjEsIDE5OSwgMTc5LCAyMSwgMTk2LCAxNzksIDIxLCAyMDEsIDM4LCAKKyAgICA4NCwgMjEsIDIxMCwgODYsIDM4LCA4NCwgMjEsIDExMSwgMzgsIDg0LCAyMSwgMTA1LCAzOCwgODQsIDIxLCAxNTgsIDM4LCAKKyAgICA4NCwgMjEsIDE2MSwgMzgsIDg0LCAyMSwgMTkwLCAzOCwgODQsIDIxLCAxOTUsIDM4LCA4NCwgMjEsIDE5OSwgMzgsIDg0LCAKKyAgICAyMSwgMTk2LCAzOCwgODQsIDIxLCAyMDEsIDM4LCA4NCwgMSwgNjEsIDM4LCA4NCwgMSwgNjksIDM4LCA4NCwgMSwgMTc2LCAKKyAgICAzOCwgODQsIDEsIDE5OCwgMzgsIDg0LCAxLCAxOTEsIDM4LCA4NCwgMSwgMjA1LCAzOCwgODQsIDEsIDIxMywgMTc2LCAzOCwgCisgICAgODQsIDUsIDI1MywgMTgzLCA4NCwgNSwgMjE5LCAxOSwgMjUxLCA3LCA4NCwgNSwgMjUxLCA4LCAyMTMsIDE1MiwgODQsIDUsIAorICAgIDUyLCAyNTEsIDgsIDIxMywgMTUyLCA4NCwgNSwgMjUxLCA4LCAxMDUsIDg0LCA1LCAyNTEsIDgsIDE1OCwgODQsIDUsIDI1MSwgCisgICAgOCwgMjUzLCAxODMsIDg0LCA1LCAyMjQsIDEyNywgODQsIDI0MywgMTA3LCAyNDQsIDExMSwgODQsIDI1MCwgMjQ2LCA4NCwgCisgICAgMjQxLCAyMzcsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDIxMCwgODYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDExMSwgCisgICAgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTA1LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxNTgsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMjEsIDE2MSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTkwLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDIxLCAxOTUsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjEsIDE5OSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyMSwgMTk2LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDIxLCAyMDEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMTc2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIzNCwgCisgICAgMTM4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI0MywgMTQyLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyOSwgODIsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjA2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyMCwgMTA0LCAyMzQsIDE5NCwgCisgICAgMjMyLCAyNDgsIDEsIDIxMCwgMTE2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNywgMTY5LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDEsIDIxNywgMTA2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI0MCwgMjMzLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIAorICAgIDE5OCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxOTEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjI1LCAxNTAsIDIzNCwgCisgICAgMTk0LCAyMzIsIDI0OCwgMSwgMTg2LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDI0OCwgMjI5LCAyMzQsIDE5NCwgMjMyLCAKKyAgICAyNDgsIDEsIDI1MiwgMTk5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIwNSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxOTIsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjMzLCAxNDEsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMSwgMjEyLCA2NSwgMjM0LCAKKyAgICAxOTQsIDIzMiwgMjQ4LCAxLCAyMTYsIDIwOSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAxNjIsIDIzNCwgMTk0LCAyMzIsIAorICAgIDI0OCwgMSwgMjE0LCAyNywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxLCAyNTEsIDQxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIAorICAgIDYxLCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDIyNiwgMjM4LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDEsIDc0LCAyMzQsIDE5NCwgCisgICAgMjMyLCAyNDgsIDEsIDIyNiwgMTg3LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCAyMTQsIDIxNCwgMjM0LCAxOTQsIDIzMiwgCisgICAgMjQ4LCAyNSwgNzYsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMjUsIDY5LCAyMzQsIDE5NCwgMjMyLCAyNDgsIDI1LCAyNDUsIAorICAgIDIxNywgMjM0LCAxOTQsIDIzMiwgMjQ4LCAyNSwgNzgsIDIzNCwgMTk0LCAyMzIsIDI0OCwgMTM4LCAyMjUsIDMzLCAyMzQsIAorICAgIDE5NCwgMjMyLCAyNDgsIDEzOCwgMjUxLCAyMCwgMjM0LCAxOTQsIDIzMiwgMjQ4LCAxMzgsIDI1MSwgMjEsIDIyNSwgMzMsIAorICAgIDIzNCwgMTk0LCAyMzIsIDI0OCwgNSwgMjQ5LCA4NSwgMjM0LCAxOTQsIDIzMiwgMjQ4LCA1LCAyMTksIDIwMSwgMjIzLCA5NiwgCisgICAgMSwgMTc2LCAyMjMsIDk2LCAxLCAyNDMsIDE0MiwgMjIzLCA5NiwgMSwgMjI5LCA4MiwgMjIzLCA5NiwgMSwgMjE3LCAxMDYsIAorICAgIDIyMywgOTYsIDEsIDI0OCwgMjI5LCAyMjMsIDk2LCAxLCAxOTgsIDIyMywgOTYsIDEsIDE5MSwgMjIzLCA5NiwgMSwgMjUyLCAKKyAgICAxOTksIDIyMywgOTYsIDEsIDE4NiwgMjIzLCA5NiwgMSwgMjUxLCA0MSwgMjIzLCA5NiwgMSwgMjM1LCAxNDcsIDIyMywgOTYsIAorICAgIDEsIDIyNywgMTY5LCAyMjMsIDk2LCAxLCAyMDYsIDIyMywgOTYsIDEsIDIwNSwgMjIzLCA5NiwgMSwgMjMzLCAxNDEsIDIyMywgCisgICAgOTYsIDEsIDE5MiwgMjIzLCA5NiwgMSwgMjEyLCA2NSwgMjIzLCA5NiwgMSwgMTYyLCAyMjMsIDk2LCAxLCAyMzEsIDEyOSwgCisgICAgMjIzLCA5NiwgMSwgMjI5LCA2MSwgMjIzLCA5NiwgMSwgMjI5LCAxNTMsIDIyMywgOTYsIDEsIDIyNywgMTM5LCAyMjMsIDk2LCAKKyAgICAxLCA2MSwgMjIzLCA5NiwgMjUsIDUsIDc0LCAyMjMsIDk2LCAyNSwgNSwgNjksIDIyMywgOTYsIDI1LCA1LCA3NiwgMjIzLCAKKyAgICA5NiwgMjUsIDUsIDI1NCwgMjEwLCAyMjMsIDk2LCAyNSwgNSwgNzgsIDIyMywgOTYsIDI1LCA1LCAyNTMsIDIwMCwgMjIzLCAKKyAgICA5NiwgMjUsIDUsIDI0NSwgNjMsIDIyMywgOTYsIDI1LCA1LCAyNDUsIDI0MSwgMjIzLCA5NiwgMTE3LCA1LCAyMjksIDg0LCAKKyAgICAyMjMsIDk2LCAxMTcsIDUsIDIzMCwgMzAsIDIyMywgOTYsIDExNywgNSwgMTUzLCAyMjMsIDk2LCAxMTcsIDUsIDI0MiwgNjcsIAorICAgIDIyMywgOTYsIDIxMywgMTUyLCAyMjMsIDk2LCAyMjEsIDE3NSwgNzksIDI0LCAxMDAsIDIxNiwgOTgsIDI0LCAxMDAsIDIxNiwgCisgICAgOTcsIDI0LCAxMDAsIDIxNiwgOTUsIDI0LCAxMDAsIDIxNiwgMTAwLCAyNCwgMTAwLCAyMjMsIDI0LCAyNCwgMTAwLCAyMjMsIAorICAgIDgsIDI0LCAxMDAsIDIyMywgMywgMjQsIDEwMCwgMjIzLCA1LCAyNCwgMTAwLCAyMjMsIDIxLCAyNCwgMTAwLCAyMjMsIDE0LCAKKyAgICAyNCwgMTAwLCAyMjMsIDcsIDI0LCAxMDAsIDIyMywgMjYsIDI0LCAxMDAsIDIyMywgOSwgMjQsIDEwMCwgMjIzLCAyOCwgMjQsIAorICAgIDEwMCwgMjIzLCAyNSwgMjQsIDEwMCwgMjMwLCAyMTgsIDI0LCAxMDAsIDIzMCwgMjA5LCAyNCwgMTAwLCAyMzAsIDIxMiwgCisgICAgMjQsIDEwMCwgMjI1LCA4MywgMjQsIDEwMCwgMjI1LCA5NCwgMjQsIDEwMCwgMjI1LCA5NSwgMjQsIDEwMCwgMjE4LCAyMDksIAorICAgIDI0LCAxMDAsIDIzNiwgNTMsIDI0LCAxMDAsIDIzNiwgNjAsIDI0LCAxMDAsIDIxOCwgMjIwLCAyNCwgMTAwLCAyMTgsIDIwNywgCisgICAgMjQsIDEwMCwgMjI1LCAxMzMsIDI0LCAxMDAsIDI0MSwgMTc0LCAyNCwgMTAwLCAyMTgsIDIwNCwgMTU1LCA1LCAyMjYsIDMxLCAKKyAgICAxNTUsIDUsIDI1MCwgMTk1LCAxNTUsIDUsIDIzMywgNzIsIDE1NSwgNSwgMjExLCAyNDMsIDE1NSwgMSwgNjEsIDE1NSwgMSwgCisgICAgMjQwLCAxNjEsIDIzNCwgMTk3LCAxNTUsIDEsIDc0LCAxNTUsIDEsIDIzNiwgNDAsIDE1NSwgMSwgNjksIDE1NSwgMSwgMjI2LCAKKyAgICA5NCwgMjUwLCAxNzEsIDE1NSwgMSwgMjI5LCA4MywgMjMzLCAzNCwgMTU1LCAxLCAyMjksIDgzLCAyMzMsIDM1LCAyMjMsIAorICAgIDE0NSwgMTU1LCAxLCA3NiwgMTU1LCAxLCAyNTQsIDIxMCwgMTU1LCAxLCA3OCwgMTU1LCAxLCAxNzYsIDE1NSwgMSwgMjM1LCAKKyAgICAxOSwgMjIxLCAyMzAsIDE1NSwgMSwgMjM1LCAxOSwgMjMwLCA3MSwgMTU1LCAxLCAyNDMsIDE0MiwgMTU1LCAxLCAyNDMsIAorICAgIDE0MywgMjMwLCA3MSwgMTU1LCAxLCAyMjksIDgyLCAxNTUsIDEsIDI1MSwgNDEsIDE1NSwgMSwgMjUxLCA0MiwgMjMwLCA3MSwgCisgICAgMTU1LCAxLCAyMzUsIDE0NywgMTU1LCAxLCAyMjcsIDE3MCwgMjMwLCA3MSwgMTU1LCAxLCAyMzUsIDE0OCwgMjMxLCAyMTIsIAorICAgIDE1NSwgMSwgMjI3LCAxNjksIDE1NSwgMSwgMjE1LCAxNTcsIDE1NSwgMSwgMjE1LCAxNTgsIDIzMSwgMjEyLCAxNTUsIDEsIAorICAgIDI0OCwgMTQzLCAxNTUsIDEsIDI0OCwgMTQ0LCAyMzEsIDIxMiwgMTU1LCAxLCAyMjksIDIzNCwgMjMwLCA3MSwgMTU1LCAxLCAKKyAgICAyMTcsIDEwNiwgMTU1LCAxLCAyMTcsIDEwNywgMjMwLCA3MSwgMTU1LCAxLCAyNDgsIDIyOSwgMTU1LCAxLCAyNDgsIDIzMCwgCisgICAgMjMxLCAyMTIsIDE1NSwgMSwgMTk4LCAxNTUsIDEsIDE5MSwgMTU1LCAxLCAyMjYsIDk0LCAyMzAsIDcxLCAxNTUsIDEsIAorICAgIDI1MiwgMTk5LCAxNTUsIDEsIDI1MiwgMjAwLCAyMzAsIDcxLCAxNTUsIDEsIDE4NiwgMTU1LCAxLCAxOTIsIDE1NSwgMSwgCisgICAgMjA1LCAxNTUsIDEsIDIyMywgMTkxLCAyNTQsIDIxOSwgMTU1LCAxLCAyMzMsIDE0MSwgMTU1LCAxLCAyMTIsIDY1LCAxNTUsIAorICAgIDEsIDIyMiwgMzYsIDIzMCwgNzEsIDE1NSwgMSwgMjIyLCAzNiwgMjMxLCAyMTIsIDE1NSwgMSwgMjA2LCAxNTUsIDEsIDE2MiwgCisgICAgMTU1LCA1LCAyNTAsIDE5NiwgMjE2LCAyNTEsIDE1NSwgMjUsIDUsIDIxNywgNDgsIDE1NSwgMjUsIDUsIDIxNiwgMzYsIAorICAgIDE1NSwgMjUsIDUsIDIxMSwgMTkwLCAxNTUsIDI1LCA1LCAyMTEsIDE5MSwgMjMxLCA3NCwgMTU1LCAyNSwgNSwgMjE4LCA0OCwgCisgICAgMTU1LCAyNSwgNSwgMjE4LCA0OSwgMjMxLCA2MiwgMTU1LCAyNSwgNSwgMjE3LCA2NiwgMTU1LCAyNSwgNSwgMjQ3LCAyMDIsIAorICAgIDIzMCwgNzAsIDE1NSwgMjUsIDUsIDIyNSwgMTg3LCAxNTUsIDExNywgNSwgMjM0LCAxNjQsIDE1NSwgMTE3LCA1LCAyMjUsIAorICAgIDE5OSwgMTU1LCAxMTcsIDUsIDI1MSwgMjcsIDE1NSwgMjI2LCA0NCwgMTU1LCA0MywgMjIzLCA3MiwgMTU1LCA0NCwgMjIzLCAKKyAgICA3MiwgMTU1LCAyMjYsIDgzLCAyNTQsIDEyNSwgMTU1LCAyMjYsIDgzLCAyMzEsIDIyOSwgMTU1LCAyMjYsIDgzLCAyMzIsIAorICAgIDkzLCAxNTUsIDIyNiwgODMsIDIxMSwgMjM4LCAxNTUsIDIyNiwgODMsIDIyNiwgNDUsIDE1NSwgMjI2LCA4MywgMjMyLCAKKyAgICAyMTEsIDE1NSwgMjI2LCA4MywgMjMyLCA4NywgMTU1LCAyMjYsIDgzLCAyNTUsIDIsIDE1NSwgMjI2LCA4MywgMjU1LCAzLCAKKyAgICAyNTUsIDIsIDE1NSwgMjI2LCA4MywgMjI1LCA1NCwgMTU1LCAyMTUsIDk0LCAyMjYsIDgzLCAyMjUsIDU0LCAxNTUsIDIyNiwgCisgICAgNDAsIDE1NSwgMjEsIDIxMCwgODYsIDE1NSwgMjEsIDExMSwgMTU1LCAyMSwgMTA1LCAxNTUsIDIxLCAxNTgsIDE1NSwgMjEsIAorICAgIDE2MSwgMTU1LCAyMSwgMTkwLCAxNTUsIDIxLCAxOTUsIDE1NSwgMjEsIDE5OSwgMTU1LCAyMSwgMTk2LCAxNTUsIDIxLCAKKyAgICAyMDEsIDE1NSwgMjI2LCA4MywgMjE2LCA3MCwgMjE1LCAxMDcsIDE1NSwgMjI2LCA4MywgMjM1LCAxNzQsIDE3MiwgMSwgNjEsIAorICAgIDE3MiwgMSwgNzQsIDE3MiwgMSwgNjksIDE3MiwgMSwgNzYsIDE3MiwgMSwgMjU0LCAyMTAsIDE3MiwgMSwgNzgsIDE3MiwgMSwgCisgICAgMTc2LCAxNzIsIDEsIDIzNCwgMTM4LCAxNzIsIDEsIDI0MywgMTQyLCAxNzIsIDEsIDI0MywgMCwgMTcyLCAxLCAyMjgsIAorICAgIDI1MCwgMTcyLCAxLCAyMjksIDgyLCAxNzIsIDEsIDI1MCwgMTY1LCAxNzIsIDEsIDI1MCwgMTIwLCAxNzIsIDEsIDIzNSwgCisgICAgMTQ3LCAxNzIsIDEsIDIzNSwgMTIwLCAxNzIsIDEsIDIyOCwgMjQwLCAxNzIsIDEsIDIyOCwgMjQyLCAxNzIsIDEsIDIyOCwgCisgICAgMjQxLCAxNzIsIDEsIDIxNywgMTA2LCAxNzIsIDEsIDIxNiwgMjA5LCAxNzIsIDEsIDI0OCwgMjI5LCAxNzIsIDEsIDI0OCwgCisgICAgMzMsIDE3MiwgMSwgMjI3LCAyMTEsIDE3MiwgMSwgMTk4LCAxNzIsIDEsIDI0OCwgMTQzLCAxNzIsIDEsIDE5MSwgMTcyLCAxLCAKKyAgICAyMjQsIDIyMywgMTcyLCAxLCAyMjUsIDE1MCwgMTcyLCAxLCAyNTIsIDE5OSwgMTcyLCAxLCAyNTIsIDI2LCAxNzIsIDEsIAorICAgIDIzMCwgMTAwLCAxNzIsIDEsIDE4NiwgMTcyLCAxLCAyNTIsIDExOSwgMTcyLCAxLCAxOTIsIDE3MiwgMSwgMjA1LCAxNzIsIAorICAgIDEsIDIzMywgMTQxLCAxNzIsIDEsIDIxNCwgMjcsIDE3MiwgMSwgMjE4LCAyMjUsIDE3MiwgMSwgMjA2LCAxNzIsIDEsIDE2MiwgCisgICAgMTcyLCAyNSwgNSwgMjU1LCA4MiwgMTcyLCAyNSwgNSwgNzQsIDE3MiwgMjUsIDUsIDIzNiwgNDAsIDE3MiwgMjUsIDUsIAorICAgIDI0NSwgMjAzLCAxNzIsIDI1LCA1LCA2OSwgMTcyLCAyNSwgNSwgMjI2LCAyMzgsIDE3MiwgMjUsIDUsIDc4LCAxNzIsIDI1LCAKKyAgICA1LCAyNTQsIDIxMCwgMTcyLCAyNSwgNSwgMjUzLCAyMDAsIDE3MiwgMjUsIDUsIDIxNCwgMjE0LCAxNzIsIDExNywgNSwgCisgICAgMTkyLCAxNzIsIDExNywgNSwgMjA1LCAxNzIsIDExNywgNSwgMjMzLCAxNDEsIDE3MiwgMTE3LCA1LCAyMTIsIDY1LCAxNzIsIAorICAgIDEsIDQwLCAyMzUsIDI5LCAxNzIsIDEsIDQwLCAyNDMsIDIwOSwgMTcyLCAxLCA0MCwgMjI5LCA4NCwgMTcyLCAxMTcsIDUsIAorICAgIDQwLCAyMjksIDg0LCAxNzIsIDEsIDQwLCAyNTAsIDE2NiwgMTcyLCAxLCA0MCwgMjE3LCAxNTMsIDE3MiwgMSwgNDAsIDIzMCwgCisgICAgMzAsIDE3MiwgMSwgNDAsIDIyNiwgMTA5LCAxNzIsIDEsIDQwLCAyMTEsIDExNywgMTcyLCAxLCA0MCwgMTUzLCAxNzIsIDEsIAorICAgIDQwLCAxNTYsIDE3MiwgMSwgNDAsIDIxOCwgMjI4LCAxNzIsIDExNywgNSwgNDAsIDE5NCwgMTcyLCAxMTcsIDUsIDQwLCAKKyAgICAyNDIsIDY3LCAxNzIsIDIxLCAyMTAsIDg2LCAxNzIsIDIxLCAxMTEsIDE3MiwgMjEsIDEwNSwgMTcyLCAyMSwgMTU4LCAxNzIsIAorICAgIDIxLCAxNjEsIDE3MiwgMjEsIDE5MCwgMTcyLCAyMSwgMTk1LCAxNzIsIDIxLCAxOTksIDE3MiwgMjEsIDE5NiwgMTcyLCAyMSwgCisgICAgMjAxLCAxNzIsIDIyNCwgMTQ0LCAyMTgsIDI1MywgMTcyLCAyMjQsIDE0NCwgMjQ4LCAxODYsIDE3MiwgMjI0LCAxNDQsIDUyLCAKKyAgICAyNDgsIDE4NiwgMTcyLCAyMjQsIDE0NCwgMjE1LCAyMTIsIDI0OCwgMTg2LCA2OCwgMSwgMjM0LCAxMzIsIDI0MywgMTQyLCAKKyAgICA2OCwgMSwgMjM0LCAxMzIsIDI1MSwgNDEsIDY4LCAxLCAyMzQsIDEzMiwgMjUwLCAxNjUsIDY4LCAxLCAyMzQsIDEzMiwgCisgICAgMjM1LCAxNDcsIDY4LCAxLCAyMzQsIDEzMiwgMjM1LCAxMjAsIDY4LCAxLCAyMzQsIDEzMiwgMjI3LCAxNjksIDY4LCAxLCAKKyAgICAyMzQsIDEzMiwgMjE1LCAxNTcsIDY4LCAxLCAyMzQsIDEzMiwgMjE1LCAxNDUsIDY4LCAxLCAyMzQsIDEzMiwgMjQ4LCAxNDMsIAorICAgIDY4LCAxLCAyMzQsIDEzMiwgMjQ4LCAxMjcsIDY4LCAxLCAyMzQsIDEzMiwgMjQ4LCAzMywgNjgsIDEsIDIzNCwgMTMyLCAKKyAgICAxOTgsIDY4LCAxLCAyMzQsIDEzMiwgMjA2LCA2OCwgMSwgMjM0LCAxMzIsIDE2MiwgNjgsIDEsIDIzNCwgMTMyLCAyNDEsIAorICAgIDE5NiwgNjgsIDEsIDIzNCwgMTMyLCAyNDQsIDIwNCwgNjgsIDU4LCAxLCAyMzQsIDEzMiwgMjIzLCAxMTIsIDY4LCAxLCAKKyAgICAyMzQsIDEzMiwgMjExLCAxNjUsIDY4LCAxLCAyMzQsIDEzMiwgMjEwLCAxMTYsIDY4LCAxLCAyMzQsIDEzMiwgMjA1LCA2OCwgCisgICAgMjMyLCAxNTEsIDIzNCwgMTMyLCAyMjcsIDEsIDY4LCAyMzIsIDE1MSwgMjM0LCAxMzIsIDIyNCwgNDYsIDY4LCAyMzIsIAorICAgIDE1MSwgMjM0LCAxMzIsIDI0MSwgMTI4LCA2OCwgMTYsIDI1NCwgMTk5LCAyNDUsIDM4LCA2OCwgMTYsIDI1NCwgMTk5LCAKKyAgICAxMTEsIDY4LCAxNiwgMjU0LCAxOTksIDEwNSwgNjgsIDEsIDI1NCwgMTk5LCAyMDUsIDY4LCA1LCAyMjYsIDI3LCAyMzQsIAorICAgIDIxOSwgMjE2LCAzMSwgMzksIDIwOCwgMSwgMTIxLCAyMzQsIDM0LCAzOSwgMjA4LCAxLCAxMjUsIDIzNCwgMzQsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjM0LCAxMTEsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMTEsIDM5LCAyMDgsIDEsIDEyMSwgMjM0LCAKKyAgICAxMjAsIDM5LCAyMDgsIDEsIDEyNSwgMjM0LCAxMjAsIDM5LCAyMDgsIDEsIDEyMSwgMjQyLCAxODEsIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjQyLCAxODEsIDM5LCAyMDgsIDEsIDEyMSwgMjI5LCA5LCAzOSwgMjA4LCAxLCAxMjUsIDIyOSwgOSwgMzksIDIwOCwgCisgICAgMSwgMTIxLCAyNDksIDI0NiwgMzksIDIwOCwgMSwgMTI1LCAyNDksIDI0NiwgMzksIDIwOCwgMSwgMTIxLCAyNTAsIDk0LCAKKyAgICAzOSwgMjA4LCAxLCAxMjUsIDI1MCwgOTQsIDM5LCAyMDgsIDEsIDEyMSwgMjE5LCA2MCwgMzksIDIwOCwgMSwgMTI1LCAyMTksIAorICAgIDYwLCAzOSwgMjA4LCAxLCAxMjEsIDIyNywgMTM4LCAzOSwgMjA4LCAxLCAxMjUsIDIyNywgMTM4LCAzOSwgMjA4LCAxLCAKKyAgICAxMjEsIDI0NywgMTUzLCAzOSwgMjA4LCAxLCAxMjUsIDI0NywgMTUzLCAzOSwgMjA4LCAxLCAxMjEsIDExMiwgMzksIDIwOCwgCisgICAgMSwgMTI1LCAxMTIsIDM5LCAyMDgsIDEsIDEyMSwgMjE2LCAxNTcsIDM5LCAyMDgsIDEsIDEyNSwgMjE2LCAxNTcsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjI4LCA3OSwgMzksIDIwOCwgMSwgMTI1LCAyMjgsIDc5LCAzOSwgMjA4LCAxLCAxMjEsIDI1MSwgCisgICAgMjEzLCAzOSwgMjA4LCAxLCAxMjUsIDI1MSwgMjEzLCAzOSwgMjA4LCAxLCAxMjEsIDIyNSwgMTksIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjI1LCAxOSwgMzksIDIwOCwgMSwgMTIxLCAyMjUsIDEyNCwgMzksIDIwOCwgMSwgMTI1LCAyMjUsIDEyNCwgMzksIAorICAgIDIwOCwgMSwgMTIxLCAyNDQsIDUxLCAzOSwgMjA4LCAxLCAxMjUsIDI0NCwgNTEsIDM5LCAyMDgsIDEsIDEyMSwgMjMwLCAKKyAgICAxNjYsIDM5LCAyMDgsIDEsIDEyNSwgMjMwLCAxNjYsIDM5LCAyMDgsIDEsIDEyMSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIAorICAgIDEyNSwgMjEwLCAyNDQsIDM5LCAyMDgsIDEsIDEyMSwgMjIyLCAyMTMsIDM5LCAyMDgsIDEsIDEyNSwgMjIyLCAyMTMsIDM5LCAKKyAgICAyMDgsIDEsIDEyMSwgMjMyLCAxNjIsIDM5LCAyMDgsIDEsIDEyNSwgMjMyLCAxNjIsIDM5LCAyMDgsIDEsIDEyMSwgMjEzLCAKKyAgICAxMzgsIDM5LCAyMDgsIDEsIDEyNSwgMjEzLCAxMzgsIDM5LCAyMDgsIDEsIDEyMSwgMjQxLCA3NSwgMzksIDIwOCwgMSwgCisgICAgMTI1LCAyNDEsIDc1LCAzOSwgMjA4LCAxLCAxMjEsIDc4LCAzOSwgMjA4LCAxLCAxMjUsIDc4LCAzOSwgMjA4LCAyMzEsIAorICAgIDIwOSwgMjM0LCAyMzYsIDM5LCAyMDgsIDI1LCAyNTUsIDgyLCAzOSwgMjA4LCAyNSwgNzQsIDM5LCAyMDgsIDI1LCAyMTQsIAorICAgIDIxNCwgMzksIDIwOCwgMjUsIDY5LCAzOSwgMjA4LCAyNSwgNzYsIDM5LCAyMDgsIDI1LCA3OCwgMzksIDIwOCwgMjMxLCAKKyAgICAyMDksIDIzNCwgMTE0LCAzOSwgMjA4LCAyNSwgMjQwLCAxMjYsIDM5LCAyMDgsIDI1LCAyMTQsIDIxMywgMzksIDIwOCwgMjUsIAorICAgIDIxNCwgMjI5LCAzOSwgMjA4LCAyNSwgMjUzLCAxOTgsIDM5LCAyMDgsIDI1LCAyNTMsIDE3NSwgMzksIDIwOCwgMjUsIDI1NCwgCisgICAgMTMxLCAzOSwgMjA4LCAyNSwgMjU0LCAxNDQsIDM5LCAyMDgsIDEzOCwgMjMxLCAyMDksIDI0NSwgMTg4LCAzOSwgMjA4LCAKKyAgICAxMzgsIDIzMSwgMjA5LCAyMjcsIDIxMCwgMzksIDIwOCwgMTM4LCAyMzEsIDIwOSwgMjE2LCAxNTcsIDM5LCAyMDgsIDEzOCwgCisgICAgMjMxLCAyMDksIDIxOSwgNDQsIDM5LCAyMDgsIDE2LCAyMzQsIDE5LCAzOSwgMjA4LCAxNiwgMjI3LCAyMTAsIDM5LCAyMDgsIAorICAgIDE2LCAyMjEsIDI1NSwgMzksIDIwOCwgMTYsIDI0MSwgNzYsIDI0MSwgNzEsIDM5LCAyMDgsIDE2LCAyMzQsIDI4LCAyMzQsIAorICAgIDI3LCAxODgsIDE4NywgMSwgNzYsIDE4OCwgMTg3LCAxLCA3OCwgMTg4LCAxODcsIDEsIDI1MCwgMTY1LCAxODgsIDE4NywgMSwgCisgICAgMjI3LCAxNjksIDE4OCwgMTg3LCAxLCAyMTUsIDE1NywgMTg4LCAxODcsIDEsIDIxNSwgMTQ1LCAxODgsIDE4NywgMSwgMjQ4LCAKKyAgICAxNDMsIDE4OCwgMTg3LCAxLCAyNDgsIDEyNywgMTg4LCAxODcsIDEsIDIyOCwgMTE1LCAxODgsIDE4NywgMSwgMjIwLCAxMDQsIAorICAgIDE4OCwgMTg3LCAxLCAyMTgsIDIyNSwgMTg4LCAxODcsIDI1LCA1LCAyMzYsIDQwLCAxODgsIDE4NywgMjUsIDUsIDIxNCwgCisgICAgMTE4LCAxODgsIDE4NywgMjUsIDUsIDI1NSwgNDYsIDE4OCwgMTg3LCAyNSwgNSwgMjUzLCAyMDAsIDE4OCwgMTg3LCAyNSwgCisgICAgNSwgMjU1LCAzOSwgMTg4LCAxODcsIDI1MCwgMTMzLCAxODgsIDE4NywgMjU0LCAyMTUsIDIzNCwgMTA0LCAxODgsIDE4NywgCisgICAgMjU0LCAxMTEsIDE4OCwgMTg3LCAzLCAyMjMsIDc3LCA3OSwgMTg4LCAxODcsIDIxMSwgMjA5LCAyMjMsIDc3LCA3OSwgMTg4LCAKKyAgICAxODcsIDI1LCA1LCAyMTMsIDE0NywgMTg4LCAxODcsIDIxMywgMTUyLCAyOSwgMywgMjE1LCAxMzgsIDI5LCAzLCAyMTUsIAorICAgIDE0MSwgMjksIDMsIDIxNSwgMTQ0LCAyOSwgMywgMjE1LCAxNDIsIDI5LCAzLCAyMTUsIDE0MywgMjksIDMsIDIxNSwgMTQwLCAKKyAgICAyOSwgMywgMjQ4LCAxMjEsIDI5LCAzLCAyNDgsIDEyMywgMjksIDMsIDI0OCwgMTI2LCAyOSwgMywgMjQ4LCAxMjQsIDI5LCAKKyAgICAzLCAyNDgsIDEyNSwgMjksIDMsIDI0OCwgMTIyLCAyOSwgMywgMjQ2LCAzNiwgMjksIDMsIDI0NiwgMzksIDI5LCAzLCAyNDYsIAorICAgIDQ1LCAyOSwgMywgMjQ2LCA0MywgMjksIDMsIDI0NiwgNDQsIDI5LCAzLCAyNDYsIDM3LCAyOSwgMywgMjUwLCAyMTIsIDI5LCAKKyAgICAzLCAyNTAsIDIwNiwgMjksIDMsIDI1MCwgMjA4LCAyOSwgMywgMjUwLCAyMTEsIDI5LCAzLCAyNTAsIDIwOSwgMjksIDMsIAorICAgIDI1MCwgMjEwLCAyOSwgMywgMjUwLCAyMDcsIDI5LCAzLCAyNTIsIDExOSwgMjksIDMsIDI1MiwgOTgsIDI5LCAzLCAyNTIsIAorICAgIDExMCwgMjksIDMsIDI1MiwgMTE4LCAyOSwgMywgMjUyLCAxMTMsIDI5LCAzLCAyNTIsIDExNCwgMjksIDMsIDI1MiwgMTAyLCAKKyAgICAxODgsIDE4NywgMSwgMjM0LCAyNSwgMTg4LCAxODcsIDEsIDIyMSwgMjU1LCAxODgsIDE4NywgMSwgMjMzLCAxMTUsIDE4OCwgCisgICAgMTg3LCAxLCAyMzAsIDE3NywgMTg4LCAxODcsIDEsIDE5MSwgMTg4LCAxODcsIDEsIDE5OCwgMTg4LCAxODcsIDEsIDI1MCwgCisgICAgMTEwLCAxODgsIDE4NywgMSwgMjE2LCA5MSwgMTg4LCAxODcsIDEsIDIzNCwgMTA3LCAxODgsIDE4NywgMSwgMjI4LCAyNTUsIAorICAgIDE4OCwgMTg3LCAxLCAyMTYsIDE1MSwgMTg4LCAxODcsIDEsIDIxMiwgNjAsIDE4OCwgMTg3LCAxLCAyMTEsIDY5LCAxODgsIAorICAgIDE4NywgMSwgMjQwLCAyMjMsIDE4OCwgMTg3LCAxLCAyMTQsIDE5MCwgMTg4LCAxODcsIDEsIDc0LCAxODgsIDE4NywgMSwgCisgICAgMjI1LCAxNDUsIDE4OCwgMTg3LCAxLCAyNTMsIDIxMCwgMTg4LCAxODcsIDEsIDI0MiwgMTc0LCAxODgsIDE4NywgMSwgMjM1LCAKKyAgICAxMTgsIDE4OCwgMTg3LCAxLCAyMjMsIDE2OSwgMTg4LCAxODcsIDEsIDI1MiwgMTk5LCAxODgsIDE4NywgMSwgMjM1LCAxMDYsIAorICAgIDE4OCwgMTg3LCAxLCAyNDcsIDIyNywgMTg4LCAxODcsIDEsIDI0MiwgMjI4LCAxODgsIDE4NywgMSwgMjQ4LCAxMywgMTg4LCAKKyAgICAxODcsIDEsIDI1MiwgMjQsIDE4OCwgMTg3LCAxLCAyMzQsIDI2LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIzMywgMTE2LCAKKyAgICAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIzMCwgMTc4LCAyMzIsIDEzNCwgMTg4LCAxODcsIDEsIDIyNiwgOTQsIDIzMiwgCisgICAgMTM0LCAxODgsIDE4NywgMSwgMjI5LCAyMzQsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjE2LCA5MiwgMjMyLCAxMzQsIAorICAgIDE4OCwgMTg3LCAxLCAyMjksIDAsIDIzMiwgMTM0LCAxODgsIDE4NywgMSwgMjQwLCAxNjEsIDIzMiwgMTM0LCAxODgsIDE4NywgCisgICAgMjUsIDUsIDIyNiwgMTk5LCAxODgsIDE4NywgMjUsIDUsIDIzNiwgNCwgMTg4LCAxODcsIDI1LCA1LCAyNTQsIDEzMCwgMTg4LCAKKyAgICAxODcsIDI1LCA1LCAyMTEsIDM4LCAxODgsIDE4NywgMjUsIDUsIDIxOSwgMzQsIDE4OCwgMTg3LCAyNSwgNSwgMjE0LCAxODcsIAorICAgIDE4OCwgMTg3LCAyNSwgNSwgMjUwLCAxMzEsIDE4OCwgMTg3LCAyNSwgNSwgMjI3LCAxOTUsIDE4OCwgMTg3LCAyNTAsIDEzMiwgCisgICAgMTg4LCAxODcsIDIzMiwgOTAsIDIzNSwgMTU2LCAxODgsIDE4NywgMjU0LCA1NCwgMjM1LCAxNTYsIDE4OCwgMTg3LCAyMSwgCisgICAgMjEwLCA4NiwgMTg4LCAxODcsIDIxLCAxMTEsIDE4OCwgMTg3LCAyMSwgMTA1LCAxODgsIDE4NywgMjEsIDE1OCwgMTg4LCAKKyAgICAxODcsIDIxLCAxNjEsIDE4OCwgMTg3LCAyMSwgMTkwLCAxODgsIDE4NywgMjEsIDE5NSwgMTg4LCAxODcsIDIxLCAxOTksIAorICAgIDE4OCwgMTg3LCAyMSwgMTk2LCAxODgsIDE4NywgMjEsIDIwMSwgMjQsIDE0MywgMjI3LCA4MSwgMjQsIDE0MywgMjI3LCA4NiwgCisgICAgMjQsIDE0MywgMjEwLCAyNDMsIDI0LCAxNDMsIDIxMCwgMjQyLCAyNCwgMTQzLCAyMTAsIDI0MSwgMjQsIDE0MywgMjE1LCAKKyAgICAyMywgMjQsIDE0MywgMjE1LCAyNiwgMjQsIDE0MywgMjEwLCAyMTAsIDI0LCAxNDMsIDIxMCwgMjA2LCAyNCwgMTQzLCAyNDUsIAorICAgIDYyLCAyNCwgMTQzLCAyNDUsIDYwLCAyNCwgMTQzLCAyNDUsIDYxLCAyNCwgMTQzLCAyNDUsIDU4LCAyNCwgMTQzLCAyNDAsIAorICAgIDE1MSwgMjQsIDE0MywgMjQwLCAxNTAsIDI0LCAxNDMsIDI0MCwgMTQ4LCAyNCwgMTQzLCAyNDAsIDE0OSwgMjQsIDE0MywgCisgICAgMjQwLCAxNTQsIDI0LCAxNDMsIDI0MCwgMTQ3LCAyNCwgMTQzLCAyNDAsIDE0NiwgMjQsIDE0MywgMjQwLCAxNTYsIDI0LCAKKyAgICAxNDMsIDI1NCwgNDEsIDI0LCAxNDMsIDI1NCwgNDAsIDI0LCA5MCwgMjI4LCAyMjQsIDI0LCA5MCwgMjI4LCAyMzAsIDI0LCAKKyAgICA5MCwgMjE4LCAyMDYsIDI0LCA5MCwgMjE4LCAyMDUsIDI0LCA5MCwgMjE2LCA5NywgMjQsIDkwLCAyMTYsIDk1LCAyNCwgOTAsIAorICAgIDIxNiwgOTQsIDI0LCA5MCwgMjE2LCAxMDAsIDI0LCA5MCwgMjE2LCAxMDEsIDI0LCA5MCwgMjE2LCA5MywgMjQsIDkwLCAKKyAgICAyMjMsIDgsIDI0LCA5MCwgMjIzLCAyMywgMjQsIDkwLCAyMTgsIDIxMiwgMjQsIDkwLCAyMjMsIDIwLCAyNCwgOTAsIDIyMywgCisgICAgMTAsIDI0LCA5MCwgMjIzLCAxMiwgMjQsIDkwLCAyMjIsIDI1NSwgMjQsIDkwLCAyMjMsIDAsIDI0LCA5MCwgMjM0LCAyMjQsIAorICAgIDI0LCA5MCwgMjMwLCAyMTcsIDI0LCA5MCwgMjMwLCAyMTEsIDI0LCA5MCwgMjE4LCAyMTYsIDI0LCA5MCwgMjMwLCAyMTQsIAorICAgIDI0LCA5MCwgMjMwLCAyMjAsIDI0LCA5MCwgMjI1LCA3OSwgMjQsIDkwLCAyMjUsIDg4LCAyNCwgOTAsIDIyNSwgOTIsIDI0LCAKKyAgICA5MCwgMjE4LCAyMTQsIDI0LCA5MCwgMjI1LCA4MiwgMjQsIDkwLCAyMjUsIDk2LCAyNCwgOTAsIDIyNSwgOTcsIDI0LCA5MCwgCisgICAgMjE5LCAxNDIsIDI0LCA5MCwgMjE5LCAxNDUsIDI0LCA5MCwgMjE4LCAyMTAsIDI0LCA5MCwgMjE4LCAyMDgsIDI0LCA5MCwgCisgICAgMjE5LCAxNDAsIDI0LCA5MCwgMjE5LCAxNDgsIDI0LCA5MCwgMjE5LCAxNDksIDI0LCA5MCwgMjE5LCAxMzQsIDI0LCA5MCwgCisgICAgMjE5LCAxNDcsIDI0LCA5MCwgMjI2LCAzNCwgMjQsIDkwLCAyMjYsIDM1LCAyNCwgOTAsIDIxMSwgMjQsIDI0LCA5MCwgMjExLCAKKyAgICAyNSwgMjQsIDkwLCAyNTAsIDUyLCAyNCwgOTAsIDI1MCwgNTEsIDI0LCA5MCwgMjE4LCAyMjEsIDI0LCA5MCwgMjI1LCAxMzEsIAorICAgIDI0LCA5MCwgMjI1LCAxMzAsIDEwLCAxNCwgMjM4LCAzMSwgMTAsIDE0LCAyMzgsIDMwLCAxMCwgMTQsIDIzOCwgMjksIDEwLCAKKyAgICAxNCwgMjM4LCAyOCwgMTAsIDE0LCAyMzgsIDI3LCAxMCwgMTQsIDIzOCwgMjYsIDEwLCAxNCwgMjM4LCAyNSwgMTAsIDE0LCAKKyAgICAyMzgsIDI0LCAxMCwgMTQsIDIzOCwgMjMsIDEwLCAxNCwgMjM4LCAyMiwgMTAsIDE0LCAyMzgsIDIxLCAxMCwgMTQsIDIzOCwgCisgICAgMjAsIDEwLCAxNCwgMjM4LCAxOSwgMTAsIDE0LCAyMzgsIDE4LCAxMCwgMTQsIDIzOCwgMTcsIDEwLCAxNCwgMjM4LCAxNiwgCisgICAgMTAsIDE0LCAyMzgsIDE1LCAxMCwgMTQsIDIzOCwgMTQsIDEwLCAxNCwgMjM4LCAxMywgMTAsIDE0LCAyMzgsIDEyLCAxMCwgCisgICAgMTQsIDIzOCwgMTEsIDEwLCAxNCwgMjM4LCAxMCwgMTAsIDE0LCAyMzgsIDksIDEwLCAxNCwgMjM4LCA4LCAxMCwgMTQsIAorICAgIDIzOCwgNywgMTAsIDE0LCAyMzgsIDYsIDEwLCAxNCwgMjM4LCA1LCAxMCwgMTQsIDIzOCwgNCwgMTAsIDE0LCAyMzgsIDMsIAorICAgIDEwLCAxNCwgMjM4LCAyLCAxMCwgMTQsIDIzOCwgMSwgMTAsIDE0LCAyMzgsIDAsIDEwLCAxNCwgMjM3LCAyNTUsIDEwLCAxNCwgCisgICAgMjM3LCAyNTQsIDEwLCAxNCwgMjM3LCAyNTMsIDEwLCAxNCwgMjM3LCAyNTIsIDEwLCAxNCwgMjM3LCAyNTEsIDEwLCAxNCwgCisgICAgMjM3LCAyNTAsIDEwLCAxNCwgMjM3LCAyNDksIDEwLCAxNCwgMjM3LCAyNDgsIDEwLCAxNCwgMjM3LCAyNDcsIDEwLCAxNCwgCisgICAgMjM3LCAyNDYsIDEwLCAxNCwgMjM3LCAyNDUsIDEwLCAxNCwgMjM3LCAyNDQsIDEwLCAxNCwgMjM3LCAyNDMsIDEwLCAxNCwgCisgICAgMjM3LCAyNDIsIDEwLCAxNCwgMjM3LCAyNDEsIDEwLCAxNCwgMjM3LCAyNDAsIDEwLCAxNCwgMjM3LCAyMzksIDEwLCAxNCwgCisgICAgMjM3LCAyMzgsIDEwLCAxNCwgMjM3LCAyMzcsIDEwLCAxNCwgMjM3LCAyMzYsIDEwLCAxNCwgMjM3LCAyMzUsIDEwLCAxNCwgCisgICAgMjM3LCAyMzQsIDEwLCAxNCwgMjM3LCAyMzMsIDEwLCAxNCwgMjM3LCAyMzIsIDEwLCAxNCwgMjM3LCAyMzEsIDEwLCAxNCwgCisgICAgMjM3LCAyMzAsIDEwLCAxNCwgMjM3LCAyMjksIDEwLCAxNCwgMjM3LCAyMjgsIDEwLCAxNCwgMjM3LCAyMjcsIDEwLCAxNCwgCisgICAgMjM3LCAyMjYsIDEwLCAxNCwgMjM3LCAyMjUsIDEwLCAxNCwgMjM3LCAyMjQsIDEwLCAxNCwgMjM3LCAyMjMsIDEwLCAxNCwgCisgICAgMjM3LCAyMjIsIDEwLCAxNCwgMjM3LCAyMjEsIDEwLCAxNCwgMjM3LCAyMjAsIDEwLCAxNCwgMjM3LCAyMTksIDEwLCAxNCwgCisgICAgMjM3LCAyMTgsIDEwLCAxNCwgMjM3LCAyMTcsIDEwLCAxNCwgMjM3LCAyMTYsIDEwLCAxNCwgMjM3LCAyMTUsIDEwLCAxNCwgCisgICAgMjM3LCAyMTQsIDEwLCAxNCwgMjM3LCAyMTMsIDEwLCAxNCwgMjM3LCAyMTIsIDEwLCAxNCwgMjM3LCAyMTEsIDEwLCAxNCwgCisgICAgMjM3LCAyMTAsIDEwLCAxNCwgMjM3LCAyMDksIDEwLCAxNCwgMjM3LCAyMDgsIDEwLCAxNCwgMjM3LCAyMDcsIDEwLCAxNCwgCisgICAgMjM3LCAyMDYsIDEwLCAxNCwgMjM3LCAyMDUsIDEwLCAxNCwgMjM3LCAyMDQsIDEwLCAxNCwgMjM3LCAyMDMsIDEwLCAxNCwgCisgICAgMjM3LCAyMDIsIDEwLCAxNCwgMjM3LCAyMDEsIDEwLCAxNCwgMjM3LCAyMDAsIDEwLCAxNCwgMjM3LCAxOTksIDEwLCAxNCwgCisgICAgMjM3LCAxOTgsIDEwLCAxNCwgMjM3LCAxOTcsIDEwLCAxNCwgMjM3LCAxOTYsIDEwLCAxNCwgMjM3LCAxOTUsIDEwLCAxNCwgCisgICAgMjM3LCAxOTQsIDEwLCAxNCwgMjM3LCAxOTMsIDEwLCAxNCwgMjM3LCAxOTIsIDEwLCAxNCwgMjM3LCAxOTEsIDEwLCAxNCwgCisgICAgMjM3LCAxOTAsIDEwLCAxNCwgMjM3LCAxODksIDEwLCAxNCwgMjM3LCAxODgsIDEwLCAxNCwgMjM3LCAxODcsIDEwLCAxNCwgCisgICAgMjM3LCAxODYsIDEwLCAxNCwgMjM3LCAxODUsIDEwLCAxNCwgMjM3LCAxODQsIDEwLCAxNCwgMjM3LCAxODMsIDEwLCAxNCwgCisgICAgMjM3LCAxODIsIDEwLCAxNCwgMjM3LCAxODEsIDEwLCAxNCwgMjM3LCAxODAsIDEwLCAxNCwgMjM3LCAxNzksIDEwLCAxNCwgCisgICAgMjM3LCAxNzgsIDEwLCAxNCwgMjM3LCAxNzcsIDEwLCAxNCwgMjM3LCAxNzYsIDEwLCAxNCwgMjM3LCAxNzUsIDEwLCAxNCwgCisgICAgMjM3LCAxNzQsIDEwLCAxNCwgMjM3LCAxNzMsIDEwLCAxNCwgMjM3LCAxNzIsIDEwLCAxNCwgMjM3LCAxNzEsIDEwLCAxNCwgCisgICAgMjM3LCAxNzAsIDEwLCAxNCwgMjM3LCAxNjksIDEwLCAxNCwgMjM3LCAxNjgsIDEwLCAxNCwgMjM3LCAxNjcsIDEwLCAxNCwgCisgICAgMjM3LCAxNjYsIDEwLCAxNCwgMjM3LCAxNjUsIDEwLCAxNCwgMjM3LCAxNjQsIDEwLCAxNCwgMjM3LCAxNjMsIDEwLCAxNCwgCisgICAgMjM3LCAxNjIsIDEwLCAxNCwgMjM3LCAxNjEsIDEwLCAxNCwgMjM3LCAxNjAsIDEwLCAxNCwgMjM3LCAxNTksIDEwLCAxNCwgCisgICAgMjM3LCAxNTgsIDEwLCAxNCwgMjM3LCAxNTcsIDEwLCAxNCwgMjM3LCAxNTYsIDEwLCAxNCwgMjM3LCAxNTUsIDEwLCAxNCwgCisgICAgMjM3LCAxNTQsIDEwLCAxNCwgMjM3LCAxNTMsIDEwLCAxNCwgMjM3LCAxNTIsIDEwLCAxNCwgMjM3LCAxNTEsIDEwLCAxNCwgCisgICAgMjM3LCAxNTAsIDEwLCAxNCwgMjM3LCAxNDksIDEwLCAxNCwgMjM3LCAxNDgsIDEwLCAxNCwgMjM3LCAxNDcsIDEwLCAxNCwgCisgICAgMjM3LCAxNDYsIDEwLCAxNCwgMjM3LCAxNDUsIDEwLCAxNCwgMjM3LCAxNDQsIDEwLCAxNCwgMjM3LCAxNDMsIDEwLCAxNCwgCisgICAgMjM3LCAxNDIsIDEwLCAxNCwgMjM3LCAxNDEsIDEwLCAxNCwgMjM3LCAxNDAsIDEwLCAxNCwgMjM3LCAxMzksIDEwLCAxNCwgCisgICAgMjM3LCAxMzgsIDEwLCAxNCwgMjM3LCAxMzcsIDEwLCAxNCwgMjM3LCAxMzYsIDEwLCAxNCwgMjM3LCAxMzUsIDEwLCAxNCwgCisgICAgMjM3LCAxMzQsIDEwLCAxNCwgMjM3LCAxMzMsIDEwLCAxNCwgMjM3LCAxMzIsIDEwLCAxNCwgMjM3LCAxMzEsIDEwLCAxNCwgCisgICAgMjM3LCAxMzAsIDEwLCAxNCwgMjM3LCAxMjksIDEwLCAxNCwgMjM3LCAxMjgsIDEwLCAxNCwgMjM3LCAxMjcsIDEwLCAxNCwgCisgICAgMjM3LCAxMjYsIDEwLCAxNCwgMjM3LCAxMjUsIDEwLCAxNCwgMjM3LCAxMjQsIDEwLCAxNCwgMjM3LCAxMjMsIDEwLCAxNCwgCisgICAgMjM3LCAxMjIsIDEwLCAxNCwgMjM3LCAxMjEsIDEwLCAxNCwgMjM3LCAxMjAsIDEwLCAxNCwgMjM3LCAxMTksIDEwLCAxNCwgCisgICAgMjM3LCAxMTgsIDEwLCAxNCwgMjM3LCAxMTcsIDEwLCAxNCwgMjM3LCAxMTYsIDEwLCAxNCwgMjM3LCAxMTUsIDEwLCAxNCwgCisgICAgMjM3LCAxMTQsIDEwLCAxNCwgMjM3LCAxMTMsIDEwLCAxNCwgMjM3LCAxMTIsIDEwLCAxNCwgMjM3LCAxMTEsIDEwLCAxNCwgCisgICAgMjM3LCAxMTAsIDEwLCAxNCwgMjM3LCAxMDksIDEwLCAxNCwgMjM3LCAxMDgsIDEwLCAxNCwgMjM3LCAxMDcsIDEwLCAxNCwgCisgICAgMjM3LCAxMDYsIDEwLCAxNCwgMjM3LCAxMDUsIDEwLCAxNCwgMjM3LCAxMDQsIDEwLCAxNCwgMjM3LCAxMDMsIDEwLCAxNCwgCisgICAgMjM3LCAxMDIsIDEwLCAxNCwgMjM3LCAxMDEsIDEwLCAxNCwgMjM3LCAxMDAsIDEwLCAxNCwgMjM3LCA5OSwgMTAsIDE0LCAKKyAgICAyMzcsIDk4LCAxMCwgMTQsIDIzNywgOTcsIDEwLCAxNCwgMjM3LCA5NiwgMTAsIDE0LCAyMzcsIDk1LCAxMCwgMTQsIDIzNywgCisgICAgOTQsIDEwLCAxNCwgMjM3LCA5MywgMTAsIDE0LCAyMzcsIDkyLCAxMCwgMTQsIDIzNywgOTEsIDEwLCAxNCwgMjM3LCA5MCwgCisgICAgMTAsIDE0LCAyMzcsIDg5LCAxMCwgMTQsIDIzNywgODgsIDEwLCAxNCwgMjM3LCA4NywgMTAsIDE0LCAyMzcsIDg2LCAxMCwgCisgICAgMTQsIDIzNywgODUsIDEwLCAxNCwgMjM3LCA4NCwgMTAsIDE0LCAyMzcsIDgzLCAxMCwgMTQsIDIzNywgODIsIDEwLCAxNCwgCisgICAgMjM3LCA4MSwgMTAsIDE0LCAyMzcsIDgwLCAxMCwgMTQsIDIzNywgNzksIDEwLCAxNCwgMjM3LCA3OCwgMTAsIDE0LCAyMzcsIAorICAgIDc3LCAxMCwgMTQsIDIzNywgNzYsIDEwLCAxNCwgMjM3LCA3NSwgMTAsIDE0LCAyMzcsIDc0LCAxMCwgMTQsIDIzNywgNzMsIAorICAgIDEwLCAxNCwgMjM3LCA3MiwgMTAsIDE0LCAyMzcsIDcxLCAxMCwgMTQsIDIzNywgNzAsIDEwLCAxNCwgMjM3LCA2OSwgMTAsIAorICAgIDE0LCAyMzcsIDY4LCAxMCwgMTQsIDIzNywgNjcsIDEwLCAxNCwgMjM3LCA2NiwgMTAsIDE0LCAyMzcsIDY1LCAxMCwgMTQsIAorICAgIDIzNywgNjQsIDEwLCAxNCwgMjM3LCA2MywgMTAsIDE0LCAyMzcsIDYyLCAxMCwgMTQsIDIzNywgNjEsIDEwLCAxNCwgMjM3LCAKKyAgICA2MCwgMTAsIDE0LCAyMzcsIDU5LCAxMCwgMTQsIDIzNywgNTgsIDEwLCAxNCwgMjM3LCA1NywgMTAsIDE0LCAyMzcsIDU2LCAKKyAgICAxMCwgMTQsIDIzNywgNTUsIDEwLCAxNCwgMjM3LCA1NCwgMTAsIDE0LCAyMzcsIDUzLCAxMCwgMTQsIDIzNywgNTIsIDEwLCAKKyAgICAxNCwgMjM3LCA1MSwgMTAsIDE0LCAyMzcsIDUwLCAxMCwgMTQsIDIzNywgNDksIDEwLCAxNCwgMjM3LCA0OCwgMTAsIDE0LCAKKyAgICAyMzcsIDQ3LCAxMCwgMTQsIDIzNywgNDYsIDEwLCAxNCwgMjM3LCA0NSwgMTAsIDE0LCAyMzcsIDQ0LCAxMCwgMTQsIDIzNywgCisgICAgNDMsIDEwLCAxNCwgMjM3LCA0MiwgMTAsIDE0LCAyMzcsIDQxLCAxMCwgMTQsIDIzNywgNDAsIDEwLCAxNCwgMjM3LCAzOSwgCisgICAgMTAsIDE0LCAyMzcsIDM4LCAxMCwgMTQsIDIzNywgMzcsIDEwLCAxNCwgMjM3LCAzNiwgMTAsIDE0LCAyMzcsIDM1LCAxMCwgCisgICAgMTQsIDIzNywgMzQsIDEwLCAxNCwgMjM3LCAzMywgMTAsIDE0LCAyMzcsIDMyLCAxMCwgMTQsIDIzNywgMzEsIDEwLCAxNCwgCisgICAgMjM3LCAzMCwgMTAsIDE0LCAyMzcsIDI5LCAxMCwgMTQsIDIzNywgMjgsIDEwLCAxNCwgMjM3LCAyNywgMTAsIDE0LCAyMzcsIAorICAgIDI2LCAxMCwgMTQsIDIzNywgMjUsIDEwLCAxNCwgMjM3LCAyNCwgMTAsIDE0LCAyMzcsIDIzLCAxMCwgMTQsIDIzNywgMjIsIAorICAgIDEwLCAxNCwgMjM3LCAyMSwgMTAsIDE0LCAyMzcsIDIwLCAxMCwgMTQsIDIzNywgMTksIDEwLCAxNCwgMjM3LCAxOCwgMTAsIAorICAgIDE0LCAyMzcsIDE3LCAxMCwgMTQsIDIzNywgMTYsIDEwLCAxNCwgMjM3LCAxNSwgMTAsIDE0LCAyMzcsIDE0LCAxMCwgMTQsIAorICAgIDIzNywgMTMsIDEwLCAxNCwgMjM3LCAxMiwgMTAsIDE0LCAyMzcsIDExLCAxMCwgMTQsIDIzNywgMTAsIDEwLCAxNCwgMjM3LCAKKyAgICA5LCAxMCwgMTQsIDIzNywgOCwgMTAsIDE0LCAyMzcsIDcsIDEwLCAxNCwgMjM3LCA2LCAxMCwgMTQsIDIzNywgNSwgMTAsIAorICAgIDE0LCAyMzcsIDQsIDEwLCAxNCwgMjM3LCAzLCAxMCwgMTQsIDIzNywgMiwgMTAsIDE0LCAyMzcsIDEsIDEwLCAxNCwgMjM3LCAKKyAgICAwLCAxMCwgMTQsIDIzNiwgMjU1LCAxMCwgMTQsIDIzNiwgMjU0LCAxMCwgMTQsIDIzNiwgMjUzLCAxMCwgMTQsIDIzNiwgCisgICAgMjUyLCAxMCwgMTQsIDIzNiwgMjUxLCAxMCwgMTQsIDIzNiwgMjUwLCAxMCwgMTQsIDIzNiwgMjQ5LCAxMCwgMTQsIDIzNiwgCisgICAgMjQ4LCAxMCwgMTQsIDIzNiwgMjQ3LCAxMCwgMTQsIDIzNiwgMjQ2LCAxMCwgMTQsIDIzNiwgMjQ1LCAxMCwgMTQsIDIzNiwgCisgICAgMjQ0LCAxMCwgMTQsIDIzNiwgMjQzLCAxMCwgMTQsIDIzNiwgMjQyLCAxMCwgMTQsIDIzNiwgMjQxLCAxMCwgMTQsIDIzNiwgCisgICAgMjQwLCAxMCwgMTQsIDIzNiwgMjM5LCAxMCwgMTQsIDIzNiwgMjM4LCAxMCwgMTQsIDIzNiwgMjM3LCAxMCwgMTQsIDIzNiwgCisgICAgMjM2LCAxMCwgMTQsIDIzNiwgMjM1LCAxMCwgMTQsIDIzNiwgMjM0LCAxMCwgMTQsIDIzNiwgMjMzLCAxMCwgMTQsIDIzNiwgCisgICAgMjMyLCAxMCwgMTQsIDIzNiwgMjMxLCAxMCwgMTQsIDIzNiwgMjMwLCAxMCwgMTQsIDIzNiwgMjI5LCAxMCwgMTQsIDIzNiwgCisgICAgMjI4LCAxMCwgMTQsIDIzNiwgMjI3LCAxMCwgMTQsIDIzNiwgMjI2LCAxMCwgMTQsIDIzNiwgMjI1LCAxMCwgMTQsIDIzNiwgCisgICAgMjI0LCAxMCwgMTQsIDIzNiwgMjIzLCAxMCwgMTQsIDIzNiwgMjIyLCAxMCwgMTQsIDIzNiwgMjIxLCAxMCwgMTQsIDIzNiwgCisgICAgMjIwLCAxMCwgMTQsIDIzNiwgMjE5LCAxMCwgMTQsIDIzNiwgMjE4LCAxMCwgMTQsIDIzNiwgMjE3LCAxMCwgMTQsIDIzNiwgCisgICAgMjE2LCAxMCwgMTQsIDIzNiwgMjE1LCAxMCwgMTQsIDIzNiwgMjE0LCAxMCwgMTQsIDIzNiwgMjEzLCAxMCwgMTQsIDIzNiwgCisgICAgMjEyLCAxMCwgMTQsIDIzNiwgMjExLCAxMCwgMTQsIDIzNiwgMjEwLCAxMCwgMTQsIDIzNiwgMjA5LCAxMCwgMTQsIDIzNiwgCisgICAgMjA4LCAxMCwgMTQsIDIzNiwgMjA3LCAxMCwgMTQsIDIzNiwgMjA2LCAxMCwgMTQsIDIzNiwgMjA1LCAxMCwgMTQsIDIzNiwgCisgICAgMjA0LCAxMCwgMTQsIDIzNiwgMjAzLCAxMCwgMTQsIDIzNiwgMjAyLCAxMCwgMTQsIDIzNiwgMjAxLCAxMCwgMTQsIDIzNiwgCisgICAgMjAwLCAxMCwgMTQsIDIzNiwgMTk5LCAxMCwgMTQsIDIzNiwgMTk4LCAxMCwgMTQsIDIzNiwgMTk3LCAxMCwgMTQsIDIzNiwgCisgICAgMTk2LCAxMCwgMTQsIDIzNiwgMTk1LCAxMCwgMTQsIDIzNiwgMTk0LCAxMCwgMTQsIDIzNiwgMTkzLCAxMCwgMTQsIDIzNiwgCisgICAgMTkyLCAxMCwgMTQsIDIzNiwgMTkxLCAxMCwgMTQsIDIzNiwgMTkwLCAxMCwgMTQsIDIzNiwgMTg5LCAxMCwgMTQsIDIzNiwgCisgICAgMTg4LCAxMCwgMTQsIDIzNiwgMTg3LCAxMCwgMTQsIDIzNiwgMTg2LCAxMCwgMTQsIDIzNiwgMTg1LCAxMCwgMTQsIDIzNiwgCisgICAgMTg0LCAxMCwgMTQsIDIzNiwgMTgzLCAxMCwgMTQsIDIzNiwgMTgyLCAxMCwgMTQsIDIzNiwgMTgxLCAxMCwgMTQsIDIzNiwgCisgICAgMTgwLCAxMCwgMTQsIDIzNiwgMTc5LCAxMCwgMTQsIDIzNiwgMTc4LCAxMCwgMTQsIDIzNiwgMTc3LCAxMCwgMTQsIDIzNiwgCisgICAgMTc2LCAxMCwgMTQsIDIzNiwgMTc1LCAxMCwgMTQsIDIzNiwgMTc0LCAxMCwgMTQsIDIzNiwgMTczLCAxMCwgMTQsIDIzNiwgCisgICAgMTcyLCAxMCwgMTQsIDIzNiwgMTcxLCAxMCwgMTQsIDIzNiwgMTcwLCAxMCwgMTQsIDIzNiwgMTY5LCAxMCwgMTQsIDIzNiwgCisgICAgMTY4LCAxMCwgMTQsIDIzNiwgMTY3LCAxMCwgMTQsIDIzNiwgMTY2LCAxMCwgMTQsIDIzNiwgMTY1LCAxMCwgMTQsIDIzNiwgCisgICAgMTY0LCAxMCwgMTQsIDIzNiwgMTYzLCAxMCwgMTQsIDIzNiwgMTYyLCAxMCwgMTQsIDIzNiwgMTYxLCAxMCwgMTQsIDIzNiwgCisgICAgMTYwLCAxMCwgMTQsIDIzNiwgMTU5LCAxMCwgMTQsIDIzNiwgMTU4LCAxMCwgMTQsIDIzNiwgMTU3LCAxMCwgMTQsIDIzNiwgCisgICAgMTU2LCAxMCwgMTQsIDIzNiwgMTU1LCAxMCwgMTQsIDIzNiwgMTU0LCAxMCwgMTQsIDIzNiwgMTUzLCAxMCwgMTQsIDIzNiwgCisgICAgMTUyLCAxMCwgMTQsIDIzNiwgMTUxLCAxMCwgMTQsIDIzNiwgMTUwLCAxMCwgMTQsIDIzNiwgMTQ5LCAxMCwgMTQsIDIzNiwgCisgICAgMTQ4LCAxMCwgMTQsIDIzNiwgMTQ3LCAxMCwgMTQsIDIzNiwgMTQ2LCAxMCwgMTQsIDIzNiwgMTQ1LCAxMCwgMTQsIDIzNiwgCisgICAgMTQ0LCAxMCwgMTQsIDIzNiwgMTQzLCAxMCwgMTQsIDIzNiwgMTQyLCAxMCwgMTQsIDIzNiwgMTQxLCAxMCwgMTQsIDIzNiwgCisgICAgMTQwLCAxMCwgMTQsIDIzNiwgMTM5LCAxMCwgMTQsIDIzNiwgMTM4LCAxMCwgMTQsIDIzNiwgMTM3LCAxMCwgMTQsIDIzNiwgCisgICAgMTM2LCAxMCwgMTQsIDIzNiwgMTM1LCAxMCwgMTQsIDIzNiwgMTM0LCAxMCwgMTQsIDIzNiwgMTMzLCAxMCwgMTQsIDIzNiwgCisgICAgMTMyLCAxMCwgMTQsIDIzNiwgMTMxLCAxMCwgMTQsIDIzNiwgMTMwLCAxMCwgMTQsIDIzNiwgMTI5LCAxMCwgMTQsIDIzNiwgCisgICAgMTI4LCAxMCwgMTQsIDIzNiwgMTI3LCAxMCwgMTQsIDIzNiwgMTI2LCAxMCwgMTQsIDIzNiwgMTI1LCAxMCwgMTQsIDIzNiwgCisgICAgMTI0LCAxMCwgMTQsIDIzNiwgMTIzLCAxMCwgMTQsIDIzNiwgMTIyLCAxMCwgMTQsIDIzNiwgMTIxLCAxMCwgMTQsIDIzNiwgCisgICAgMTIwLCAxMCwgMTQsIDIzNiwgMTE5LCAxMCwgMTQsIDIzNiwgMTE4LCAxMCwgMTQsIDIzNiwgMTE3LCAxMCwgMTQsIDIzNiwgCisgICAgMTE2LCAxMCwgMTQsIDIzNiwgMTE1LCAxMCwgMTQsIDIzNiwgMTE0LCAxMCwgMTQsIDIzNiwgMTEzLCAxMCwgMTQsIDIzNiwgCisgICAgMTEyLCAxMCwgMTQsIDIzNiwgMTExLCAxMCwgMTQsIDIzNiwgMTEwLCAxMCwgMTQsIDIzNiwgMTA5LCAxMCwgMTQsIDIzNiwgCisgICAgMTA4LCAxMCwgMTQsIDIzNiwgMTA3LCAxMCwgMTQsIDIzNiwgMTA2LCAxMCwgMTQsIDIzNiwgMTA1LCAxMCwgMTQsIDIzNiwgCisgICAgMTA0LCAxMCwgMTQsIDIzNiwgMTAzLCAxMCwgMTQsIDIzNiwgMTAyLCAxMCwgMTQsIDIzNiwgMTAxLCAxMCwgMTQsIDIzNiwgCisgICAgMTAwLCAxMCwgMTQsIDIzNiwgOTksIDEwLCAxNCwgMjM2LCA5OCwgMTAsIDE0LCAyMzYsIDk3LCAxMCwgMTQsIDIzNiwgOTYsIAorICAgIDEwLCAxNCwgMjM2LCA5NSwgMTAsIDE0LCAyMzYsIDk0LCAxMCwgMTQsIDIzNiwgOTMsIDEwLCAxNCwgMjM2LCA5MiwgMTAsIAorICAgIDE0LCAyMzYsIDkxLCAxMCwgMTQsIDIzNiwgOTAsIDEwLCAxNCwgMjM2LCA4OSwgMTAsIDE0LCAyMzYsIDg4LCAxMCwgMTQsIAorICAgIDIzNiwgODcsIDEwLCAxNCwgMjM2LCA4NiwgMTAsIDE0LCAyMzYsIDg1LCAxMCwgMTQsIDIzNiwgODQsIDEwLCAxNCwgMjM2LCAKKyAgICA4MywgMTAsIDE0LCAyMzYsIDgyLCAxMCwgMTQsIDIzNiwgODEsIDEwLCAxNCwgMjM2LCA4MCwgMTAsIDE0LCAyMzYsIDc5LCAKKyAgICAxMCwgMTQsIDIzNiwgNzgsIDEwLCAxNCwgMjM2LCA3NywgMTAsIDE0LCAyMzYsIDc2LCAxMCwgMTQsIDIzNiwgNzUsIDEwLCAKKyAgICAxNCwgMjM2LCA3NCwgMTAsIDE0LCAyMzYsIDczLCAxMCwgMTQsIDIzNiwgNzIsIDcsIDQsIDI3LCAyNDQsIDEzMywgNywgNCwgCisgICAgMjcsIDI0NCwgMTI5LCA3LCA0LCAyNywgMjQ0LCA4NCwgNywgNCwgMjcsIDI0NCwgMTMyLCA3LCA0LCAyNywgMjQ0LCAxMzEsIAorICAgIDcsIDQsIDI3LCAyMDAsIDIyMiwgOTQsIDIxNywgMTUzLCA3LCA0LCAyNywgMjE4LCAxNzAsIDE1MCwgNCwgMjcsIDIzMSwgCisgICAgNjQsIDIyOCwgNDQsIDE1MCwgNCwgMjcsIDIzMSwgNjQsIDI0NSwgMjIxLCAxNTAsIDQsIDI3LCAyMzEsIDY0LCAyMzUsIAorICAgIDIzNCwgMTUwLCA0LCAyNywgMjEzLCAxODAsIDIyOCwgNDQsIDE1MCwgNCwgMjcsIDIzMSwgNjQsIDIxMSwgMTYwLCA5NCwgMSwgCisgICAgMjEwLCAyMzQsIDIsIDI0MSwgMTY1LCA5NCwgMjI1LCAxNCwgMjM1LCA1NiwgMjE0LCAxMSwgOTQsIDI3LCAyMTEsIDYsIAorICAgIDIxMCwgMjM0LCAyMTAsIDIzNCwgMjI1LCAyNDMsIDk0LCAxLCAyNTQsIDE0NywgMjUzLCAxNzAsIDk0LCAxLCAyMTEsIDI0NywgCisgICAgMjU0LCAxNzksIDk0LCAxLCAyMTEsIDI0NywgMjQ4LCAxOTcsIDk0LCAxLCAyMTEsIDI0NywgMjQxLCAyNDUsIDk0LCAxLCAKKyAgICAyMTEsIDI0NywgMjM1LCAwLCA5NCwgMSwgMjExLCAyNDcsIDIzMywgMTAwLCA5NCwgMSwgMjExLCAyNDcsIDQwLCAyMzEsIAorICAgIDcwLCA5NCwgMSwgMjExLCAyNDcsIDIyMywgNzAsIDk0LCAxLCAyMTEsIDI0NywgMjE3LCAzOSwgOTQsIDEsIDI1NCwgMTQ3LCAKKyAgICA5NiwgNTAsIDk0LCAxLCAyMjAsIDIzLCAyLCAyMjAsIDIzLCAyNDcsIDEyOCwgOTQsIDEsIDIyMCwgMjMsIDIsIDIxOSwgCisgICAgMTYxLCAyNDcsIDEyOCwgOTQsIDEsIDIyMCwgMjMsIDIsIDI0OCwgMjE2LCAyMiwgMjIwLCAyMywgMjQ3LCAxMjgsIDk0LCAxLCAKKyAgICAyMjAsIDIzLCAyLCAyNDgsIDIxNiwgMjIsIDIxOSwgMTYxLCAyNDcsIDEyOCwgOTQsIDEsIDEwOSwgMiwgMjI1LCAyNDMsIAorICAgIDk0LCAxLCAxMDksIDIsIDIyNCwgNzksIDk0LCAxLCAxMDksIDIsIDIzMSwgMTc2LCA5NCwgMSwgMjUyLCAzNywgMiwgMjQ4LCAKKyAgICAyMTUsIDk0LCAxLCAyNDIsIDIwOSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyNDgsIDE5OCwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAKKyAgICAyNDEsIDI0NiwgMiwgMjMxLCAxNzYsIDk0LCAxLCAyMTQsIDQsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjEwLCA5OCwgMiwgCisgICAgMjQ4LCAyMTUsIDk0LCAxLCAyMTYsIDIzMiwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTAsIDIzNCwgMiwgMjQ4LCAyMTUsIDk0LCAKKyAgICAxLCA0MCwgMjM1LCAxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIzNSwgMSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzMsIDEwMSwgCisgICAgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMzEsIDcxLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIyNywgMTk5LCAyLCAyNDgsIDIxNSwgCisgICAgOTQsIDEsIDIyMSwgMjUyLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDQwLCAyMjUsIDIyNSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAKKyAgICAyMjUsIDIyNSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMTUsIDE4MSwgMiwgMjQ4LCAyMTUsIDk0LCAxLCAyMjQsIDQzLCAyLCAKKyAgICAyNDgsIDIxNSwgOTQsIDEsIDIyMywgNzEsIDIsIDI0OCwgMjE1LCA5NCwgMSwgMjIwLCAyMywgMiwgMjQ4LCAyMTUsIDk0LCAKKyAgICAxLCAyMTcsIDQwLCAyLCAyNDgsIDIxNSwgOTQsIDEsIDIxNCwgNCwgMiwgMjQxLCA2OCwgOTQsIDEsIDI1MiwgMzcsIDIsIAorICAgIDIyMywgMTcyLCA5NCwgMSwgMjM1LCAxLCAyLCAyMjMsIDE3MiwgOTQsIDEsIDIyNSwgMjI1LCAyLCAyMjMsIDE3MiwgOTQsIAorICAgIDI3LCAxMDksIDIzMywgMTAwLCA5LCAxLCAxMDksIDIxMiwgNDcsIDUzLCAxNywgOSwgMSwgMTA5LCAyMTIsIDQ3LCA0MCwgCisgICAgMTcsIDksIDEsIDI1MiwgNzMsIDUzLCAxNywgOSwgMSwgMjUyLCA3MywgNDAsIDE3LCA5LCAxLCAyNTIsIDczLCA2NSwgMTcsIAorICAgIDksIDEsIDI1MiwgNzMsIDE0NywgMTcsIDksIDEsIDIyNSwgMjA5LCA1MywgMTcsIDksIDEsIDIyNSwgMjA5LCA0MCwgMTcsIAorICAgIDksIDEsIDIyNSwgMjA5LCA2NSwgMTcsIDksIDEsIDIyNSwgMjA5LCAxNDcsIDE3LCA5LCAxLCAyNTIsIDYxLCA1MywgMTcsIAorICAgIDksIDEsIDI1MiwgNjEsIDQwLCAxNywgOSwgMSwgMjUyLCA2MSwgNjUsIDE3LCA5LCAxLCAyNTIsIDYxLCAxNDcsIDE3LCA5LCAKKyAgICAxLCAyMTUsIDE0OCwgNTMsIDE3LCA5LCAxLCAyMTUsIDE0OCwgNDAsIDE3LCA5LCAxLCAyMTUsIDE0OCwgNjUsIDE3LCA5LCAKKyAgICAxLCAyMTUsIDE0OCwgMTQ3LCAxNywgOSwgMSwgMjE3LCA3LCA1MywgMTcsIDksIDEsIDIxNywgNywgNDAsIDE3LCA5LCAxLCAKKyAgICAyMTcsIDcsIDY1LCAxNywgOSwgMSwgMjE3LCA3LCAxNDcsIDE3LCA5LCAxLCAyMTUsIDE1MCwgNTMsIDE3LCA5LCAxLCAyMTUsIAorICAgIDE1MCwgNDAsIDE3LCA5LCAxLCAyMTUsIDE1MCwgNjUsIDE3LCA5LCAxLCAyMTUsIDE1MCwgMTQ3LCAxNywgOSwgMSwgMjEzLCAKKyAgICAyNDksIDUzLCAxNywgOSwgMSwgMjEzLCAyNDksIDQwLCAxNywgOSwgMSwgMjEzLCAyNDksIDY1LCAxNywgOSwgMSwgMjEzLCAKKyAgICAyNDksIDE0NywgMTcsIDksIDEsIDIyNSwgMjA3LCA1MywgMTcsIDksIDEsIDIyNSwgMjA3LCA0MCwgMTcsIDksIDEsIDIyNSwgCisgICAgMjA3LCA2NSwgMTcsIDksIDEsIDIyNSwgMjA3LCAxNDcsIDE3LCA5LCAxLCAyNDYsIDUyLCA1MywgMTcsIDksIDEsIDI0NiwgCisgICAgNTIsIDQwLCAxNywgOSwgMSwgMjQ2LCA1MiwgNjUsIDE3LCA5LCAxLCAyNDYsIDUyLCAxNDcsIDE3LCA5LCAxLCAyMjcsIAorICAgIDE1OCwgNTMsIDE3LCA5LCAxLCAyMjcsIDE1OCwgNDAsIDE3LCA5LCAxLCAyMjcsIDE1OCwgNjUsIDE3LCA5LCAxLCAyMjcsIAorICAgIDE1OCwgMTQ3LCAxNywgOSwgMSwgMjE3LCAyOCwgNTMsIDE3LCA5LCAxLCAyMTcsIDI4LCA0MCwgMTcsIDksIDEsIDIxNywgCisgICAgMjgsIDY1LCAxNywgOSwgMSwgMjE3LCAyOCwgMTQ3LCAxNywgOSwgMSwgMjE3LCAyNiwgNTMsIDE3LCA5LCAxLCAyMTcsIDI2LCAKKyAgICA0MCwgMTcsIDksIDEsIDIxNywgMjYsIDY1LCAxNywgOSwgMSwgMjE3LCAyNiwgMTQ3LCAxNywgOSwgMSwgMjQ4LCAxNDEsIAorICAgIDUzLCAxNywgOSwgMSwgMjQ4LCAxNDEsIDQwLCAxNywgOSwgMSwgMjQ4LCAyMTAsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMTAsIAorICAgIDQwLCAxNywgOSwgMSwgMjQ2LCA3OSwgNTMsIDE3LCA5LCAxLCAyNDYsIDc5LCA0MCwgMTcsIDksIDEsIDI0OCwgMTM5LCA1MywgCisgICAgMTcsIDksIDEsIDI0OCwgMTM5LCA0MCwgMTcsIDksIDEsIDIzNSwgMTI3LCA1MywgMTcsIDksIDEsIDIzNSwgMTI3LCA0MCwgCisgICAgMTcsIDksIDEsIDIyMiwgMTc0LCA1MywgMTcsIDksIDEsIDIyMiwgMTc0LCA0MCwgMTcsIDksIDEsIDIzNCwgMTgxLCA1MywgCisgICAgMTcsIDksIDEsIDIzNCwgMTgxLCA0MCwgMTcsIDksIDEsIDIzNCwgMTgxLCA2NSwgMTcsIDksIDEsIDIzNCwgMTgxLCAxNDcsIAorICAgIDE3LCA5LCAxLCAyNDMsIDEzMCwgNTMsIDE3LCA5LCAxLCAyNDMsIDEzMCwgNDAsIDE3LCA5LCAxLCAyNDMsIDEzMCwgNjUsIAorICAgIDE3LCA5LCAxLCAyNDMsIDEzMCwgMTQ3LCAxNywgOSwgMSwgMjQyLCAxMDksIDUzLCAxNywgOSwgMSwgMjQyLCAxMDksIDQwLCAKKyAgICAxNywgOSwgMSwgMjQyLCAxMDksIDY1LCAxNywgOSwgMSwgMjQyLCAxMDksIDE0NywgMTcsIDksIDEsIDIyOSwgOCwgNTMsIAorICAgIDE3LCA5LCAxLCAyMjksIDgsIDQwLCAxNywgOSwgMSwgMjI5LCA4LCA2NSwgMTcsIDksIDEsIDIyOSwgOCwgMTQ3LCAxNywgOSwgCisgICAgMSwgMjI4LCA2OCwgMjQyLCAyMjYsIDUzLCAxNywgOSwgMSwgMjI4LCA2OCwgMjQyLCAyMjYsIDQwLCAxNywgOSwgMSwgMjIyLCAKKyAgICAyMTcsIDUzLCAxNywgOSwgMSwgMjIyLCAyMTcsIDQwLCAxNywgOSwgMSwgMjIyLCAyMTcsIDY1LCAxNywgOSwgMSwgMjIyLCAKKyAgICAyMTcsIDE0NywgMTcsIDksIDEsIDI0MSwgMjI2LCAyLCA3NywgNzIsIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDIsIDc3LCAKKyAgICA3MiwgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDUzLCAxNywgOSwgMSwgMjQxLCAyMjYsIDI0MiwgMTc5LCAKKyAgICA0MCwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDIsIDE3OSwgNjUsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQyLCAxNzksIDE0NywgCisgICAgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgMjQ3LCAxNTAsIDQwLCAxNywgCisgICAgOSwgMSwgMjQxLCAyMjYsIDI0NywgMTUwLCA2NSwgMTcsIDksIDEsIDI0MSwgMjI2LCAyNDcsIDE1MCwgMTQ3LCAxNywgOSwgCisgICAgMSwgNzcsIDI1MiwgMTQxLCA1MywgMTcsIDksIDEsIDc3LCAyNTIsIDE0MSwgNDAsIDE3LCA5LCAxLCA3NywgMjUyLCAxNDEsIAorICAgIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgNzcsIDI1MiwgMTQxLCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDE2LCA1OSwgCisgICAgNDgsIDksIDE2LCA1OSwgNTEsIDksIDE2LCAxMTMsIDE3MCwgNDgsIDksIDE2LCAxMTMsIDE3MCwgNTEsIDksIDE2LCAxMzQsIAorICAgIDE3MCwgNDgsIDksIDE2LCAxMzQsIDE3MCwgNTEsIDksIDE2LCAxMzQsIDE3MCwgMjI1LCAxMCwgMjQ2LCAxMTIsIDQ4LCA5LCAKKyAgICAxNiwgMTM0LCAxNzAsIDIyNSwgMTAsIDI0NiwgMTEyLCA1MSwgOSwgMTYsIDI0NCwgMTksIDE3MCwgNDgsIDksIDE2LCAyNDQsIAorICAgIDE5LCAxNzAsIDUxLCA5LCAxNiwgNTIsIDY3LCAyNTIsIDE0OSwgNTEsIDksIDE2LCAxMTMsIDE3MCwgMjEzLCAxODksIDQ4LCAKKyAgICA5LCAxNiwgMTEzLCAxNzAsIDIxMywgMTg5LCA1MSwgOSwgMTYsIDIyMiwgMjM2LCA5LCAxNiwgNCwgMjE3LCA4MiwgNDgsIDksIAorICAgIDE2LCA0LCAyMTcsIDgyLCA1MSwgOSwgMSwgMjI5LCA4NSwgNTMsIDE3LCA5LCAxLCAyMjksIDg1LCA0MCwgMTcsIDksIDEsIAorICAgIDIyOSwgODUsIDY1LCAxNywgOSwgMSwgMjI5LCA4NSwgMTQ3LCAxNywgOSwgMSwgMTA0LCA1MywgMTcsIDksIDEsIDEwNCwgCisgICAgNDAsIDE3LCA5LCAxLCAyMjYsIDIzOSwgNTMsIDE3LCA5LCAxLCAyMjYsIDIzOSwgNDAsIDE3LCA5LCAxLCAyMTAsIDIxMywgCisgICAgNTMsIDE3LCA5LCAxLCAyMTAsIDIxMywgNDAsIDE3LCA5LCAxLCAxMDQsIDIsIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgMjE0LCAKKyAgICAwLCA1MywgMTcsIDksIDEsIDIxNCwgMCwgNDAsIDE3LCA5LCAxLCAyMzQsIDc5LCAyMjYsIDIzOSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMzQsIDc5LCAyMjYsIDIzOSwgNDAsIDE3LCA5LCAxLCAyMzQsIDc5LCAyMTAsIDIxMywgNTMsIDE3LCA5LCAxLCAyMzQsIAorICAgIDc5LCAyMTAsIDIxMywgNDAsIDE3LCA5LCAxLCAxNjAsIDUzLCAxNywgOSwgMSwgMTYwLCA0MCwgMTcsIDksIDEsIDE2MCwgCisgICAgNjUsIDE3LCA5LCAxLCAxNjAsIDE0NywgMTcsIDksIDEsIDIxNCwgMjA3LCAyMzQsIDE5MiwgMjM0LCA3OSwgMTA5LCAyMzEsIAorICAgIDE5OCwgNjUsIDE3LCA5LCAxLCAyMTQsIDIwNywgMjM0LCAxOTIsIDIzNCwgNzksIDEwOSwgMjMxLCAxOTgsIDE0NywgMTcsIAorICAgIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCA0MCwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjU0LCAyNTMsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAKKyAgICAyNTQsIDI1MywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDIxMiwgMzEsIDUzLCAxNywgOSwgMjcsIDc3LCAKKyAgICAyLCAxODIsIDcyLCAyLCAyMTIsIDMxLCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA0LCA1MywgMTcsIDksIAorICAgIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA0LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjI2LCAyMzksIAorICAgIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMjYsIDIzOSwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDIxMCwgMjEzLCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjEwLCAyMTMsIDQwLCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNjAsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNjAsIDQwLCAKKyAgICAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxNjAsIDY1LCAxNywgOSwgMjcsIDIxNCwgMjA3LCAyMzQsIDc5LCA3NywgCisgICAgMiwgMTgyLCA3MiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjE0LCAyMDcsIDIzNCwgNzksIDc3LCAyLCAKKyAgICAxODIsIDcyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTQsIDIwNywgMjM0LCA3OSwgNzcsIDIsIDE4MiwgCisgICAgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDY1LCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCA1MywgMTcsIDksIDEsIDI0NCwgMTc2LCAKKyAgICA3NywgNDAsIDE3LCA5LCAxLCAyNDQsIDE3NiwgNzcsIDY1LCAxNywgOSwgMSwgMjQ0LCAxNzYsIDc3LCAxNDcsIDE3LCA5LCAKKyAgICAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEyMiwgNTMsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMTA5LCAKKyAgICAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAKKyAgICAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjM0LCAKKyAgICAxMzYsIDUzLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMDksIDIzMSwgCisgICAgMTk4LCA1MywgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxNTEsIDUzLCAKKyAgICAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIAorICAgIDI3LCAyMTcsIDksIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgCisgICAgMjcsIDIxNywgOSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIxNiwgCisgICAgMTk0LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDIxNiwgMTk0LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMTUxLCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIAorICAgIDUzLCAxNywgOSwgMjcsIDEyMiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAxMjIsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMzQsIDEzNiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMzQsIAorICAgIDEzNiwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAKKyAgICAxMjIsIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIAorICAgIDY2LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDY2LCA1MywgCisgICAgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgMTIyLCA1MywgMTcsIDksIAorICAgIDI3LCAyNDgsIDIyNSwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjE3LCA4MiwgMiwgMTIyLCA1MywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjEwLCAxMTIsIAorICAgIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIAorICAgIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjQ0LCAxNTEsIDIsIDE1MSwgNTMsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgCisgICAgMjQ0LCAxNTEsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIAorICAgIDI0NCwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNzcsIDUzLCAxNywgOSwgCisgICAgMjcsIDIyNCwgODUsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDUzLCAxNywgOSwgMjcsIDIyNCwgCisgICAgODUsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzUsIAorICAgIDEsIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAxNTEsIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTIyLCAKKyAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzMywgMTA5LCAKKyAgICA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDUzLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDUzLCAxNywgOSwgCisgICAgMjcsIDIzMywgMTA5LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAyMzQsIDEzNiwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDY2LCA1MywgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCAKKyAgICA5LCAyNywgMjMzLCAxMDksIDIsIDc3LCA1MywgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCA2NiwgMiwgCisgICAgMTIyLCA1MywgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCA2NiwgNTMsIDE3LCA5LCAKKyAgICAyNywgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIDY2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjI4LCAKKyAgICA2OCwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIAorICAgIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTA5LCAKKyAgICAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCAxNTEsIAorICAgIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA2NiwgNTMsIDE3LCA5LCAyNywgMjQxLCAyMjYsIDIsIDEwOSwgMjMxLCAKKyAgICAxOTgsIDUzLCAxNywgOSwgMjcsIDI0MSwgMjI2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDE1MSwgNTMsIDE3LCAKKyAgICA5LCAyNywgNzcsIDIsIDEyMiwgNTMsIDE3LCA5LCAyNywgNzcsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCA3NywgMiwgCisgICAgNjYsIDUzLCAxNywgOSwgMjcsIDc3LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCA3NywgMiwgNzcsIDUzLCAKKyAgICAxNywgOSwgMjcsIDIxNiwgMjA0LCAyLCAyMTgsIDI0LCAxMDksIDUzLCAxNywgOSwgMjcsIDIyMywgOTksIDIsIDIxOCwgMjQsIAorICAgIDEwOSwgNTMsIDE3LCA5LCAyNywgMTA5LCAyMzEsIDE5OCwgMiwgMjE4LCAyNCwgMTA5LCA1MywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyNDgsIDE5MSwgNTMsIDE3LCA5LCAyNywgMjIwLCA5NiwgMiwgMjM0LCAyMTAsIDUzLCAxNywgOSwgMjcsIDIyMCwgCisgICAgOTYsIDIsIDI0NCwgMTc0LCA1MywgMTcsIDksIDI3LCAyMjAsIDk2LCAyLCAyNDgsIDE5MywgNTMsIDE3LCA5LCAyNywgMjIwLCAKKyAgICA5NiwgMiwgMjM0LCAyMTIsIDUzLCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDIxOCwgMjQsIDEwOSwgNTMsIDE3LCA5LCAyNywgCisgICAgNzcsIDIsIDE4MiwgNzIsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTAsIDEwOSwgCisgICAgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgCisgICAgMjI4LCA2OCwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgCisgICAgMjUyLCA2MywgMiwgMjEwLCAxMDksIDQwLCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNTIsIAorICAgIDYzLCAyLCAyMjgsIDY4LCA0MCwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyNTIsIDYzLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAorICAgIDIsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDIyOCwgCisgICAgNjgsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyMTAsIAorICAgIDEwOSwgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMTYsIDE5NCwgMiwgMjI4LCA2OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjE2LCAxOTQsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0NCwgMTUxLCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgCisgICAgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTA5LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzMywgMTA5LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgNDAsIDE3LCA5LCAKKyAgICAyNywgMjMzLCAxMDksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA3NywgNDAsIDE3LCAKKyAgICA5LCAyNywgNjYsIDIsIDEwOSwgNDAsIDE3LCA5LCAyNywgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAKKyAgICAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMTAsIDEwOSwgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgCisgICAgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDIyOCwgNjgsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDEwOSwgCisgICAgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMDksIDIzMSwgMTk4LCAyLCAKKyAgICAyMTgsIDI0LCAxMDksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAyMjMsIDk5LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgMjEwLCAKKyAgICAxMDksIDQwLCAxNywgOSwgMjcsIDc3LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDIyOCwgNjgsIDQwLCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCA3NywgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAKKyAgICAxODIsIDcyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIAorICAgIDc3LCAyLCAxODIsIDcyLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDE4MiwgNzIsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDE1MSwgCisgICAgNjUsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyNTIsIDYzLCAyLCAyMzQsIDEzNiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIAorICAgIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIxNywgCisgICAgOSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgCisgICAgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMTUxLCAyLCAxMjIsIDY1LCAKKyAgICAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDEyMiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAxMjIsIDIsIAorICAgIDY2LCA2NSwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAKKyAgICAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxMjIsIDY1LCAxNywgOSwgCisgICAgMjcsIDIyMSwgMTY5LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyMjIsIDI5LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMjIsIAorICAgIDI5LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIAorICAgIDEyMiwgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDgsIDIyNSwgMiwgCisgICAgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjEwLCAxMTIsIDIsIDY2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIDY1LCAxNywgOSwgCisgICAgMjcsIDI0MiwgMjUyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAKKyAgICAxNTEsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIAorICAgIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyNCwgODUsIDIsIDEyMiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzNSwgMSwgMiwgMTUxLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMzUsIDEsIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjM1LCAxLCAyLCAyMzMsIDEwOSwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjMzLCAKKyAgICAxMDksIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIAorICAgIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAyNDEsIDIyNiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDEyMiwgNjUsIDE3LCAKKyAgICA5LCAyNywgNjYsIDIsIDIzNCwgMTM2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIAorICAgIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAyMzQsIAorICAgIDEzNiwgNjUsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDI0MSwgMjI2LCAKKyAgICA2NSwgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDY1LCAxNywgCisgICAgOSwgMjcsIDI0MSwgMjI2LCAyLCAyMTgsIDI0LCAxMDksIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxNTEsIDY1LCAxNywgOSwgCisgICAgMjcsIDc3LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAKKyAgICA2NSwgMTcsIDksIDI3LCA3NywgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDc3LCAyLCAxODIsIDcyLCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDI1MiwgNjMsIDIsIAorICAgIDY2LCAxNDcsIDE3LCA5LCAyNywgMjUyLCA2MywgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIxNiwgMTk0LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgCisgICAgMTQ3LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAKKyAgICAxNDcsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDIzMywgCisgICAgMTA5LCAxNDcsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMTQ3LCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMTQ3LCAKKyAgICAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMjQxLCAyMjYsIDE0NywgMTcsIAorICAgIDksIDI3LCA3NywgMiwgNjYsIDE0NywgMTcsIDksIDI3LCA3NywgMiwgMjQxLCAyMjYsIDE0NywgMTcsIDksIDI3LCAyMjAsIAorICAgIDk2LCAyLCAyNDQsIDE3NCwgMTQ3LCAxNywgOSwgMjcsIDIyMCwgOTYsIDIsIDI0OCwgMTkzLCAxNDcsIDE3LCA5LCAyNywgCisgICAgMjIwLCA5NiwgMiwgMjM0LCAyMTIsIDE0NywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIAorICAgIDksIDI3LCAyMTcsIDgyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgCisgICAgOSwgMjcsIDI1NCwgMjA2LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAKKyAgICAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDUzLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNzcsIDUzLCAxNywgOSwgMjcsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIAorICAgIDE3LCA5LCAyNywgMTIyLCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIAorICAgIDI3LCAxNTEsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNTMsIDE3LCA5LCAyNywgCisgICAgMjM0LCAxMzYsIDIsIDc3LCA1MywgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMDksIDIzMSwgMTk4LCA1MywgMTcsIDksIDI3LCAKKyAgICAyMjIsIDI5LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMjcsIAorICAgIDI0OCwgMjI1LCAyLCA3NywgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAKKyAgICAyLCAxMjIsIDUzLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA1MywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAKKyAgICA2NiwgNTMsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjIzLCA5OSwgNTMsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIyMywgCisgICAgOTksIDUzLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDIyMywgOTksIDUzLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMjMsIAorICAgIDk5LCA1MywgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjQyLCAyNTIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0MiwgCisgICAgMjUyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIAorICAgIDIyMSwgMTY5LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjIwLCA2MiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTIyLCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDc3LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjM0LCAxMzYsIDIsIAorICAgIDc3LCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAKKyAgICA3NywgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAKKyAgICAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDIzNCwgMTM2LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgMjIzLCA5OSwgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIyMywgOTksIDQwLCAKKyAgICAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDIyMywgOTksIDQwLCAxNywgOSwgMjcsIDI0OCwgMjI1LCAyLCAyMjMsIDk5LCA0MCwgCisgICAgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjIwLCA2MiwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyMjEsIDE2OSwgMiwgMjQxLCAyMjYsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDI0MSwgMjI2LCA2NSwgMTcsIDksIAorICAgIDI3LCAyMTcsIDgyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgMTQ3LCAxNywgOSwgMjcsIDIyMSwgCisgICAgMTY5LCAyLCAxMjIsIDE0NywgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMjM0LCAxMzYsIDE0NywgMTcsIDksIDI3LCAyMjAsIAorICAgIDYyLCAyLCAxNTEsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDE0NywgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAKKyAgICAyMzQsIDEzNiwgMTQ3LCAxNywgOSwgMjcsIDIxNywgODIsIDIsIDY2LCAxNDcsIDE3LCA5LCAyNywgMjEwLCAxMTIsIDIsIAorICAgIDY2LCAxNDcsIDE3LCA5LCAyNywgMTA5LCAyLCAyNDQsIDE3MiwgNDAsIDE3LCA5LCAyNywgMTA5LCAyLCAyNDQsIDE3MiwgCisgICAgNTMsIDE3LCAyMjYsIDE1MCwgNDMsIDIyNiwgNywgMjI2LCAxNTAsIDQ0LCAyMjYsIDcsIDksIDI3LCAyMTcsIDksIDIsIAorICAgIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCAyLCAxNTEsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgCisgICAgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjE3LCAKKyAgICA5LCAyLCAyMzQsIDEzNiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjE3LCA5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDY2LCAyLCAyMzQsIDEzNiwgNjUsIAorICAgIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTIyLCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgCisgICAgOSwgMjcsIDEyMiwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDY2LCAyLCAxMDksIDIzMSwgMTk4LCAKKyAgICA0MCwgMTcsIDksIDI3LCAyMjEsIDE2OSwgMiwgMTIyLCAyLCAxNTEsIDY1LCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCAxNTEsIAorICAgIDIsIDEyMiwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgCisgICAgMjIxLCAxNjksIDIsIDY2LCAyLCAxMjIsIDQwLCAxNywgOSwgMjcsIDIyMSwgMTY5LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIAorICAgIDksIDI3LCAyMjEsIDE2OSwgMiwgNjYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCA2NiwgCisgICAgNDAsIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjIyLCAyOSwgMiwgMTIyLCAyLCAKKyAgICAxMjIsIDQwLCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDEyMiwgMiwgMTIyLCA2NSwgMTcsIDksIDI3LCAyMjIsIDI5LCAyLCAKKyAgICA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDEyMiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIAorICAgIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyMCwgCisgICAgNjIsIDIsIDY2LCAyLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAyNywgMjIwLCA2MiwgMiwgNjYsIDIsIDIzNCwgMTM2LCA2NSwgCisgICAgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyMCwgNjIsIDIsIDY2LCAyLCA2NiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ4LCAKKyAgICAyMjUsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgMjQ4LCAyMjUsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIAorICAgIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIDEyMiwgCisgICAgNjUsIDE3LCA5LCAyNywgMjE3LCA4MiwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMTcsIDgyLCAyLCA2NiwgMiwgCisgICAgNzcsIDQwLCAxNywgOSwgMjcsIDI1NCwgMjA2LCAyLCAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgCisgICAgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyNTQsIDIwNiwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyNTQsIAorICAgIDIwNiwgMiwgNjYsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgMiwgNjYsIDQwLCAKKyAgICAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDI0MiwgMjUyLCAyLCA2NiwgMiwgCisgICAgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjQ0LCAxNTEsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNDAsIDE3LCA5LCAKKyAgICAyNywgMjQ0LCAxNTEsIDIsIDIzNCwgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDEyMiwgCisgICAgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCAyLCAKKyAgICA2NiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEyMiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxNTEsIDIsIDE1MSwgNjUsIDE3LCAKKyAgICA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgMiwgMTUxLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDIsIAorICAgIDY2LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMjM0LCAxMzYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMzMsIDEwOSwgCisgICAgMiwgNjYsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDY2LCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDY2LCAKKyAgICAyLCAxMjIsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDEyMiwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAKKyAgICAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCA2NiwgMiwgMTUxLCAyLCAxMjIsIDY1LCAxNywgOSwgMjcsIDY2LCAyLCAxNTEsIAorICAgIDIsIDY2LCA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDIsIDE1MSwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDIzNCwgCisgICAgMTM2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgNjYsIDIsIDE1MSwgMiwgMjM0LCAxMzYsIDY1LCAxNywgOSwgMjcsIDI0MSwgCisgICAgMjI2LCAyLCA2NiwgMiwgMTUxLCA2NSwgMTcsIDksIDI3LCAyNDEsIDIyNiwgMiwgNjYsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAKKyAgICAyMjgsIDY4LCAyLCAxMjIsIDIsIDY2LCA2NSwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxMjIsIDIsIDEwOSwgMjMxLCAxOTgsIAorICAgIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgCisgICAgNjYsIDY1LCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMjI4LCAKKyAgICA2OCwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIAorICAgIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAyLCA2NiwgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjUyLCA2MywgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIDIsIDE1MSwgMiwgNzcsIAorICAgIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgMTUxLCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMTcsIDksIAorICAgIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCAyMzQsIDEzNiwgMiwgMTA5LCAyMzEsIDE5OCwgCisgICAgNDAsIDE3LCA5LCAyNywgMjE3LCA5LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIxNywgOSwgMiwgNjYsIDIsIAorICAgIDEwOSwgMjMxLCAxOTgsIDQwLCAxNywgOSwgMjcsIDE1MSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxNTEsIDIsIAorICAgIDEyMiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAyNywgMTUxLCAyLCA2NiwgMiwgMTA5LCAyMzEsIDE5OCwgNDAsIAorICAgIDE3LCA5LCAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAyLCAxMDksIDIzMSwgMTk4LCA0MCwgMTcsIDksIDI3LCAyMjIsIAorICAgIDI5LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjAsIDYyLCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyNDgsIDIyNSwgMiwgMTIyLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgCisgICAgOSwgMjcsIDIzMywgMTA5LCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDc3LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIAorICAgIDksIDI3LCA3NywgMiwgMTUxLCAyLCA3NywgNDAsIDE3LCA5LCAyNywgNzcsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgCisgICAgNjYsIDIsIDY2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI0LCA4NSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAKKyAgICAyMjgsIDY4LCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMjQsIDg1LCAyLCA2NiwgMiwgMTIyLCA2NSwgMTcsIDksIAorICAgIDI3LCAyMzMsIDEwOSwgMiwgMTIyLCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjU0LCAyMDYsIDIsIDY2LCAyLCA3NywgNDAsIAorICAgIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDIyOCwgNjgsIDIsIDE1MSwgMiwgMTIyLCAKKyAgICA2NSwgMTcsIDksIDI3LCA2NiwgMiwgMjM0LCAxMzYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTUxLCAKKyAgICAyLCA2NiwgNjUsIDE3LCA5LCAyNywgMjM1LCAxLCAyLCA2NiwgMiwgNjYsIDQwLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAKKyAgICAxNTEsIDIsIDY2LCA0MCwgMTcsIDksIDI3LCAyMjgsIDY4LCAyLCAxNTEsIDIsIDEyMiwgNDAsIDE3LCA5LCAyNywgMTUxLCAKKyAgICAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAxMjIsIDIsIDE1MSwgMiwgNzcsIDQwLCAxNywgOSwgMjcsIDY2LCAyLCAKKyAgICAxNTEsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNDQsIDE1MSwgMiwgNjYsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyNTIsIAorICAgIDYzLCAyLCAxMjIsIDIsIDc3LCA0MCwgMTcsIDksIDI3LCAyMzUsIDEsIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAyNywgCisgICAgMjU0LCAyMDYsIDIsIDE1MSwgMiwgNjYsIDY1LCAxNywgOSwgMjcsIDIyMiwgMjksIDIsIDY2LCAyLCA2NiwgNjUsIDE3LCA5LCAKKyAgICAyNywgMjIxLCAxNjksIDIsIDIzNCwgMTM2LCAyLCA3NywgNDAsIDE3LCA5LCAyNywgMjI4LCA2OCwgMiwgMTUxLCAyLCA3NywgCisgICAgNDAsIDE3LCA5LCAyNywgMjIyLCA2LCAyMTQsIDEyOCwgMjUzLCAyNDYsIDIzNCwgMTAsIDIxOCwgMTMyLCA1LCA1MywgMTcsIAorICAgIDksIDI3LCAyMjQsIDgxLCAyMTQsIDEyOCwgMjUzLCAyNDYsIDIzNCwgMTAsIDIxOCwgMTMyLCA1LCA1MywgMTcsIDksIDI3LCAKKyAgICAyNTQsIDE2MiwgNTMsIDE3LCA5LCAyNywgMjU0LCAxOTIsIDUzLCAxNywgOSwgMjcsIDIzMCwgMTU4LCA1MywgMTcsIDksIAorICAgIDI3LCAyMjIsIDcsIDUzLCAxNywgOSwgMjcsIDIyMywgMTQ2LCA1MywgMTcsIDksIDI3LCAyNTQsIDE4MSwgNTMsIDE3LCA5LCAKKyAgICAyNywgMjEyLCA0OSwgNTMsIDE3LCA5LCAyNywgMjIyLCA2LCA1MywgMTcsIDksIDI3LCAyMjIsIDUsIDI1NCwgMTgxLCAyMTIsIAorICAgIDQ4LCA5LCAyNywgMjM1LCAxNDAsIDIyMywgMzcsIDUwLCA5LCAyNywgMjUxLCAyMzgsIDI1NCwgNDcsIDI1NCwgNDgsIDQ1LCAKKyAgICAyMjEsIDE1OCwgNDUsIDIyMSwgNDcsIDQ1LCAyMjAsIDIzNSwgNDUsIDIyMCwgMjI0LCA0NSwgMjIwLCAyMTMsIDQ1LCAyMjAsIAorICAgIDIwMiwgNDUsIDIyMCwgMTkxLCA0NSwgMjIwLCAxODAsIDQ1LCAyMjAsIDE2OSwgNDUsIDIyMSwgMTU3LCA0NSwgMjIxLCAKKyAgICAxNDYsIDQ1LCAyMjEsIDEzNSwgNDUsIDIyMSwgMTI0LCA0NSwgMjIxLCAxMTMsIDQ1LCAyMjEsIDEwMiwgNDUsIDIyMSwgOTEsIAorICAgIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDI0OSwgMjI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMTAsIDI0OSwgCisgICAgMjI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMTAsIDI0MywgMjM2LCAyMTgsIDEzMSwgMjI0LCAxOTcsIDI0NCwgCisgICAgMjgsIDMxLCA2NywgMjQ5LCAyMzQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDIyMCwgMTUyLCAyMjQsIDE5NywgMjQ0LCAKKyAgICAyOCwgMzEsIDY3LCAyNDUsIDM5LCA3OSwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjI0LCAxNiwgNzksIDIyNCwgCisgICAgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQzLCA3MSwgMjMzLCAyNiwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAKKyAgICA0NCwgNzEsIDIzMywgMjYsIDI1MSwgMTY0LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyMDMsIDI0NSwgMTcxLCAzOCwgCisgICAgMjcsIDQzLCAyNDIsIDM0LCAzOCwgMjcsIDQ0LCAyNDIsIDM0LCAzOCwgNTIsIDIxNiwgOTAsIDQzLCAyNDIsIDM0LCAzOCwgCisgICAgNTIsIDIxNiwgOTAsIDQ0LCAyNDIsIDM0LCAzOCwgMjMxLCAyMzgsIDQzLCAyNDIsIDM0LCAzOCwgMjMxLCAyMzgsIDQ0LCAKKyAgICAyNDIsIDM0LCAzOCwgMjQ5LCAyMDUsIDIzMSwgMjM3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAxMTMsIDU5LCAyMzMsIAorICAgIDYyLCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCAyNDUsIDE2OCwgMjQ4LCAxNjQsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDI0NSwgMTU5LCAyNDgsIDE2NCwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMTIxLCAyMzIsIDIxOSwgMjI0LCAKKyAgICAxOTcsIDI0NCwgMjgsIDMxLCA2NywgMjEyLCAzMiwgMTIxLCAyMzIsIDIxOSwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgCisgICAgNDMsIDIyNiwgNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDIyNiwgNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCAKKyAgICA2NywgNDMsIDI0OSwgMTA3LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCAyNDksIDEwNywgMTI3LCAyMjQsIAorICAgIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgMjE2LCA3LCAyMjAsIDU1LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQ0LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDg1LCAyMzMsIDI2LCAKKyAgICAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA4NSwgMjMzLCAyNiwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgCisgICAgMzEsIDY3LCA0MywgNTIsIDI1NCwgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgNjcsIDQ0LCA1MiwgMjU0LCAKKyAgICAxMTgsIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDMsIDI1NCwgMTE4LCAxMjcsIDIyNCwgMTk3LCAyNDQsIAorICAgIDI4LCAzMSwgNjcsIDQ0LCAyNTQsIDExOCwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0MywgMjQ5LCAxNjksIAorICAgIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDI0OSwgMTY5LCAxMjcsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQzLCA3MSwgMjQ5LCAxNjksIDEyNywgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDcxLCAyNDksIDE2OSwgCisgICAgMTI3LCAyMjAsIDEzMywgMjQ3LCAxMjgsIDcxLCAyMjAsIDEzMywgMjQ3LCAxMjgsIDIyNCwgMTk3LCAyNDQsIDI4LCAzMSwgCisgICAgNjcsIDQzLCA0MiwgMTI3LCAyMjQsIDE5NywgMjQ0LCAyOCwgMzEsIDY3LCA0NCwgNDIsIDEyNywgMjQ4LCAxNjMsIDIyNiwgCisgICAgMTIzLCAyNTAsIDE4MCwgMjI2LCAxMjMsIDIxMiwgMzIsIDIyNiwgMTIzLCA1MiwgMjEyLCAzMiwgMjI2LCAxMjMsIDI0OCwgCisgICAgMTYzLCAxMjEsIDIzMiwgMjE5LCAyNTAsIDE4MCwgMTIxLCAyMzIsIDIxOSwgMjEyLCAzMiwgMTIxLCAyMzIsIDIxOSwgNCwgCisgICAgMjQ5LCAyMjcsIDQsIDExMCwgMjQ5LCAyMjcsIDQsIDI0MywgMjM2LCAyMTgsIDEzMSwgNCwgMjIwLCAxNTIsIDQsIDI0OSwgCisgICAgMjM0LCA0LCAyMjQsIDE2LCA3OSwgNCwgMjQ1LCAzOSwgNzksIDQsIDI0NSwgMTY4LCAyNDgsIDE2NCwgNCwgNDMsIDIyNiwgCisgICAgNywgNCwgNDQsIDIyNiwgNywgNCwgNDMsIDI0OSwgMTA3LCAxMjcsIDQsIDQ0LCAyNDksIDEwNywgMTI3LCA0LCA0MywgMjE2LCAKKyAgICA3LCAyMjAsIDU1LCAxMjcsIDQsIDQ0LCAyMTYsIDcsIDIyMCwgNTUsIDEyNywgNCwgNTQsIDUwLCA0LCAyNTQsIDEzNCwgNCwgCisgICAgMjUzLCAyMjQsIDQsIDk2LCA1MCwgNCwgMjQwLCAxNzQsIDQsIDIzMywgMjEsIDUwLCA0LCAyNDIsIDEzNywgNTAsIDQsIAorICAgIDI0NSwgMTA2LCA1MCwgNCwgMjIzLCA1MywgMjE5LCA0OCwgNCwgMjQ3LCAxNDAsIDUwLCA0LCAyMjUsIDE4NSwgNTAsIDQsIAorICAgIDI0OSwgMjI1LCAyNTMsIDIxNCwgOSwgMjQ0LCAxNzIsIDUzLCAxNywgOSwgMjE3LCA0NSwgMiwgMjQ0LCAxNzIsIDQ4LCA5LCAKKyAgICAyNDgsIDE5MSwgNTMsIDE3LCA5LCAyMTcsIDc5LCAyNDQsIDksIDksIDIzNCwgMjEwLCA1MywgMTcsIDksIDI0NCwgMTc0LCAKKyAgICA1MywgMTcsIDksIDI0NCwgMTc0LCAxNDcsIDE3LCA5LCAyNDgsIDE5MywgNTMsIDE3LCA5LCAyNDgsIDE5MywgMTQ3LCAxNywgCisgICAgOSwgMjM0LCAyMTIsIDUzLCAxNywgOSwgMjM0LCAyMTIsIDE0NywgMTcsIDksIDIyMCwgOTYsIDUzLCAxNywgOSwgMjIwLCAKKyAgICA5NiwgMTQ3LCAxNywgOSwgMjE4LCA0NywgNTMsIDE3LCA5LCAyMTgsIDQ3LCAxNDcsIDE3LCA5LCAxLCAxODIsIDUzLCAxNywgCisgICAgOSwgMSwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDUzLCAxNywgOSwgMSwgMTA5LCAyLCAyMzEsIDIzMywgNzIsIDQwLCAxNywgCisgICAgOSwgMSwgMTA5LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDEwOSwgMiwgMTgyLCA3MiwgNDAsIDE3LCA5LCAxLCAyMTIsIAorICAgIDMxLCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDEsIDIxMiwgMzEsIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgMTA5LCAyLCAKKyAgICAxODIsIDI1MiwgNTEsIDUzLCAxNywgOSwgMSwgMTA5LCAyLCAxODIsIDI1MiwgNTEsIDQwLCAxNywgOSwgMSwgNzcsIDIsIAorICAgIDE4MiwgNzIsIDUzLCAxNywgOSwgMSwgNzcsIDIsIDE4MiwgNzIsIDQwLCAxNywgOSwgMSwgNzcsIDIsIDE4MiwgNzIsIDY1LCAKKyAgICAxNywgOSwgMSwgNzcsIDIsIDE4MiwgNzIsIDE0NywgMTcsIDksIDEsIDEwOSwgNTMsIDE3LCA5LCAxLCAxMDksIDQwLCAxNywgCisgICAgOSwgMSwgMjUyLCA2MywgNTMsIDE3LCA5LCAxLCAyNTIsIDYzLCA0MCwgMTcsIDksIDEsIDI1MiwgNjMsIDY1LCAxNywgOSwgCisgICAgMSwgMjUyLCA2MywgMTQ3LCAxNywgOSwgMSwgMjE3LCA5LCAyMzEsIDE3MCwgNTMsIDE3LCA5LCAxLCAyMTcsIDksIDIzMSwgCisgICAgMTcwLCA0MCwgMTcsIDksIDEsIDIxNywgOSwgNTMsIDE3LCA5LCAxLCAyMTcsIDksIDQwLCAxNywgOSwgMSwgMjE3LCA5LCAKKyAgICA2NSwgMTcsIDksIDEsIDIxNywgOSwgMTQ3LCAxNywgOSwgMSwgMjE2LCAxOTQsIDUzLCAxNywgOSwgMSwgMjE2LCAxOTQsIAorICAgIDQwLCAxNywgOSwgMSwgMjE2LCAxOTQsIDY1LCAxNywgOSwgMSwgMjE2LCAxOTQsIDE0NywgMTcsIDksIDEsIDE1MSwgNTMsIAorICAgIDE3LCA5LCAxLCAxNTEsIDQwLCAxNywgOSwgMSwgMTUxLCA2NSwgMTcsIDksIDEsIDE1MSwgMTQ3LCAxNywgOSwgMSwgMTIyLCAKKyAgICA1MywgMTcsIDksIDEsIDEyMiwgNDAsIDE3LCA5LCAxLCAxMjIsIDY1LCAxNywgOSwgMSwgMTIyLCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyMzQsIDEzNiwgNTMsIDE3LCA5LCAxLCAyMzQsIDEzNiwgNDAsIDE3LCA5LCAxLCAyMzQsIDEzNiwgNjUsIDE3LCA5LCAxLCAKKyAgICAyMzQsIDEzNiwgMTQ3LCAxNywgOSwgMSwgMjQ4LCAyMDQsIDUzLCAxNywgOSwgMSwgMjQ4LCAyMDQsIDQwLCAxNywgOSwgMSwgCisgICAgMjE2LCAyMDQsIDUzLCAxNywgOSwgMSwgMjE2LCAyMDQsIDQwLCAxNywgOSwgMSwgMjIzLCA5OSwgNTMsIDE3LCA5LCAxLCAKKyAgICAyMjMsIDk5LCA0MCwgMTcsIDksIDEsIDIxMCwgMTA5LCA1MywgMTcsIDksIDEsIDIxMCwgMTA5LCA0MCwgMTcsIDksIDEsIAorICAgIDIyMSwgMTY5LCA1MywgMTcsIDksIDEsIDIyMSwgMTY5LCA0MCwgMTcsIDksIDEsIDIyMSwgMTY5LCA2NSwgMTcsIDksIDEsIAorICAgIDIyMSwgMTY5LCAxNDcsIDE3LCA5LCAxLCAyMjAsIDYyLCA1MywgMTcsIDksIDEsIDIyMCwgNjIsIDQwLCAxNywgOSwgMSwgCisgICAgMjIwLCA2MiwgNjUsIDE3LCA5LCAxLCAyMjAsIDYyLCAxNDcsIDE3LCA5LCAxLCAyMjIsIDI5LCA1MywgMTcsIDksIDEsIAorICAgIDIyMiwgMjksIDQwLCAxNywgOSwgMSwgMjIyLCAyOSwgNjUsIDE3LCA5LCAxLCAyMjIsIDI5LCAxNDcsIDE3LCA5LCAxLCAKKyAgICAyNDgsIDIyNSwgNTMsIDE3LCA5LCAxLCAyNDgsIDIyNSwgNDAsIDE3LCA5LCAxLCAyNDgsIDIyNSwgNjUsIDE3LCA5LCAxLCAKKyAgICAyNDgsIDIyNSwgMTQ3LCAxNywgOSwgMSwgMjE3LCA4MiwgNTMsIDE3LCA5LCAxLCAyMTcsIDgyLCA0MCwgMTcsIDksIDEsIAorICAgIDIxNywgODIsIDY1LCAxNywgOSwgMSwgMjE3LCA4MiwgMTQ3LCAxNywgOSwgMSwgMjEwLCAxMTIsIDUzLCAxNywgOSwgMSwgCisgICAgMjEwLCAxMTIsIDQwLCAxNywgOSwgMSwgMjEwLCAxMTIsIDY1LCAxNywgOSwgMSwgMjEwLCAxMTIsIDE0NywgMTcsIDksIDEsIAorICAgIDI1NCwgMjA2LCA1MywgMTcsIDksIDEsIDI1NCwgMjA2LCA0MCwgMTcsIDksIDEsIDI1NCwgMjA2LCA2NSwgMTcsIDksIDEsIAorICAgIDI1NCwgMjA2LCAxNDcsIDE3LCA5LCAxLCAyNDIsIDI1MiwgNTMsIDE3LCA5LCAxLCAyNDIsIDI1MiwgNDAsIDE3LCA5LCAxLCAKKyAgICAyNDIsIDI1MiwgNjUsIDE3LCA5LCAxLCAyNDIsIDI1MiwgMTQ3LCAxNywgOSwgMSwgMjQ0LCAxNTEsIDUzLCAxNywgOSwgMSwgCisgICAgMjQ0LCAxNTEsIDQwLCAxNywgOSwgMSwgMjQ0LCAxNTEsIDY1LCAxNywgOSwgMSwgMjQ0LCAxNTEsIDE0NywgMTcsIDksIDEsIAorICAgIDIyNCwgODUsIDUzLCAxNywgOSwgMSwgMjI0LCA4NSwgNDAsIDE3LCA5LCAxLCAyMjQsIDg1LCA2NSwgMTcsIDksIDEsIDIyNCwgCisgICAgODUsIDE0NywgMTcsIDksIDEsIDIzNSwgMSwgNTMsIDE3LCA5LCAxLCAyMzUsIDEsIDQwLCAxNywgOSwgMSwgMjM1LCAxLCAKKyAgICA2NSwgMTcsIDksIDEsIDIzNSwgMSwgMTQ3LCAxNywgOSwgMSwgMjMzLCAxMDksIDUzLCAxNywgOSwgMSwgMjMzLCAxMDksIAorICAgIDQwLCAxNywgOSwgMSwgMjMzLCAxMDksIDY1LCAxNywgOSwgMSwgMjMzLCAxMDksIDE0NywgMTcsIDksIDEsIDY2LCA1MywgCisgICAgMTcsIDksIDEsIDY2LCA0MCwgMTcsIDksIDEsIDY2LCA2NSwgMTcsIDksIDEsIDY2LCAxNDcsIDE3LCA5LCAxLCAyMjgsIDY4LCAKKyAgICA1MywgMTcsIDksIDEsIDIyOCwgNjgsIDQwLCAxNywgOSwgMSwgMjI4LCA2OCwgNjUsIDE3LCA5LCAxLCAyMjgsIDY4LCAxNDcsIAorICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgNTMsIDE3LCA5LCAxLCAyNDEsIDIyNiwgNDAsIDE3LCA5LCAxLCAyNDEsIDIyNiwgNjUsIAorICAgIDE3LCA5LCAxLCAyNDEsIDIyNiwgMTQ3LCAxNywgOSwgMSwgMjEyLCAzMSwgNTMsIDE3LCA5LCAxLCAyMTIsIDMxLCA0MCwgCisgICAgMTcsIDksIDEsIDEwOSwgMjMxLCAxOTgsIDUzLCAxNywgOSwgMSwgMTA5LCAyMzEsIDE5OCwgNDAsIDE3LCA5LCAxLCA3NywgCisgICAgNTMsIDE3LCA5LCAxLCA3NywgNDAsIDE3LCA5LCAxLCA3NywgNjUsIDE3LCA5LCAxLCA3NywgMTQ3LCAxNywgOSwgMjcsIAorICAgIDIzMywgMTA5LCAyLCAxMDksIDIsIDIzMSwgMjMzLCA3MiwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgMiwgCisgICAgMjMxLCAyMzMsIDcyLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDcyLCA1MywgMTcsIDksIDI3LCAKKyAgICAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIDcyLCA0MCwgMTcsIDksIDI3LCAyMzMsIDEwOSwgMiwgMTA5LCAyLCAxODIsIAorICAgIDI1MiwgNTEsIDUzLCAxNywgOSwgMjcsIDIzMywgMTA5LCAyLCAxMDksIDIsIDE4MiwgMjUyLCA1MSwgNDAsIDE3LCA5LCAyNywgCisgICAgMjMzLCAxMDksIDIsIDEwOSwgNTMsIDE3LCA5LCAyNywgMjMzLCAxMDksIDIsIDEwOSwgNDAsIDE3LCAyMTAsIDg3LCAyMTEsIAorICAgIDI0NSwgMjI4LCA3OCwgMjE5LCAyMCwgMTI2LCAyNDUsIDM5LCA3OSwgMTI2LCAyMjQsIDEsIDc5LCAxMjYsIDU0LCA1MCwgCisgICAgMTI2LCAyNDcsIDE0MCwgNTAsIDEyNiwgMjI1LCAxODUsIDUwLCAxMjYsIDI1NCwgMTM0LCAxMjYsIDI1NCwgNjUsIDEyNiwgCisgICAgNDMsIDIyNiwgNywgMTI2LCA0NCwgMjI2LCA3LCAxMjYsIDI1MywgMjI0LCAxMjYsIDk2LCA1MCwgMTI2LCAyNDksIDIyNywgCisgICAgMTI2LCAyNDAsIDE3NCwgMTI2LCAyNDMsIDIzNiwgMjE4LCAxMzEsIDEyNiwgMjE5LCA0OCwgMTI2LCAyMSwgMjEwLCA4NiwgCisgICAgMTI2LCAyMSwgMTExLCAxMjYsIDIxLCAxMDUsIDEyNiwgMjEsIDE1OCwgMTI2LCAyMSwgMTYxLCAxMjYsIDIxLCAxOTAsIAorICAgIDEyNiwgMjEsIDE5NSwgMTI2LCAyMSwgMTk5LCAxMjYsIDIxLCAxOTYsIDEyNiwgMjEsIDIwMSwgMTI2LCAyNDksIDIzNCwgCisgICAgMTI2LCAyMjAsIDE1MiwgMTI2LCAyMzMsIDIxLCA1MCwgMTI2LCAyNDUsIDEwNiwgNTAsIDEyNiwgMjQyLCAxMzcsIDUwLCAKKyAgICAxMjYsIDIyNCwgMTYsIDc5LCAxMjYsIDI0OSwgMjI1LCAyNTMsIDIxNCwgMTI2LCA3LCA2LCAxLCA2MSwgMTI2LCA3LCA2LCAKKyAgICAxLCAyNTMsIDE2NiwgMTI2LCA3LCA2LCAxLCAyNTEsIDc0LCAxMjYsIDcsIDYsIDEsIDI0OSwgNjgsIDEyNiwgNywgNiwgMSwgCisgICAgNzYsIDEyNiwgNywgNiwgMSwgMjQ1LCAxNCwgMTI2LCA3LCA2LCAxLCAyNDMsIDIwOSwgMTI2LCA3LCA2LCAxLCAyNDIsIDY3LCAKKyAgICAxMjYsIDcsIDYsIDEsIDc0LCAxMjYsIDcsIDYsIDEsIDIzNSwgMTUwLCAxMjYsIDcsIDYsIDEsIDIzNSwgMjksIDEyNiwgNywgCisgICAgNiwgMSwgMTU2LCAxMjYsIDcsIDYsIDEsIDE5NCwgMTI2LCA3LCA2LCAxLCAyMzAsIDMwLCAxMjYsIDcsIDYsIDEsIDc4LCAKKyAgICAxMjYsIDcsIDYsIDEsIDIyNiwgMTA5LCAxMjYsIDcsIDYsIDEsIDIyNCwgOTksIDEyNiwgNywgNiwgMSwgMTUzLCAxMjYsIDcsIAorICAgIDYsIDEsIDIyMiwgOTMsIDEyNiwgNywgNiwgMSwgMjE3LCAxNTMsIDEyNiwgNywgNiwgMSwgNjksIDEyNiwgNywgNiwgMSwgCisgICAgMjE0LCAxMDUsIDEyNiwgNywgNiwgMSwgMjEyLCA5OCwgMTI2LCA3LCA2LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA2LCAxLCAKKyAgICAyMTEsIDExNywgMTI2LCA3LCA2LCAxLCAyMTAsIDE1OSwgMTI2LCA0MywgNDIsIDEyNywgMTI2LCAyMjMsIDUzLCAyMTksIAorICAgIDQ4LCAxMjYsIDQ0LCA0MiwgMTI3LCAxMjYsIDI1MCwgMzksIDI1NSwgMjMsIDEyNiwgMTIxLCAyMzIsIDIxOSwgMTI2LCAKKyAgICAyNDIsIDE0NCwgMjU1LCAyMywgMTI2LCA3LCA0LCAxLCA2MSwgMTI2LCA3LCA0LCAxLCAyNTMsIDE2NiwgMTI2LCA3LCA0LCAKKyAgICAxLCAyNTEsIDc0LCAxMjYsIDcsIDQsIDEsIDI0OSwgNjgsIDEyNiwgNywgNCwgMSwgNzYsIDEyNiwgNywgNCwgMSwgMjQ1LCAKKyAgICAxNCwgMTI2LCA3LCA0LCAxLCAyNDMsIDIwOSwgMTI2LCA3LCA0LCAxLCAyNDIsIDY3LCAxMjYsIDcsIDQsIDEsIDc0LCAxMjYsIAorICAgIDcsIDQsIDEsIDIzNSwgMTUwLCAxMjYsIDcsIDQsIDEsIDIzNSwgMjksIDEyNiwgNywgNCwgMSwgMTU2LCAxMjYsIDcsIDQsIAorICAgIDEsIDE5NCwgMTI2LCA3LCA0LCAxLCAyMzAsIDMwLCAxMjYsIDcsIDQsIDEsIDc4LCAxMjYsIDcsIDQsIDEsIDIyNiwgMTA5LCAKKyAgICAxMjYsIDcsIDQsIDEsIDIyNCwgOTksIDEyNiwgNywgNCwgMSwgMTUzLCAxMjYsIDcsIDQsIDEsIDIyMiwgOTMsIDEyNiwgNywgCisgICAgNCwgMSwgMjE3LCAxNTMsIDEyNiwgNywgNCwgMSwgNjksIDEyNiwgNywgNCwgMSwgMjE0LCAxMDUsIDEyNiwgNywgNCwgMSwgCisgICAgMjEyLCA5OCwgMTI2LCA3LCA0LCAxLCAyMTEsIDE3OCwgMTI2LCA3LCA0LCAxLCAyMTEsIDExNywgMTI2LCA3LCA0LCAxLCAKKyAgICAyMTAsIDE1OSwgMTI2LCA0MywgMjQ5LCAxMDcsIDEyNywgMTI2LCA2NywgMjMyLCAyMTksIDEyNiwgNDQsIDI0OSwgMTA3LCAKKyAgICAxMjcsIDEyNiwgMTg0LCAxMjYsIDQzLCA3MSwgMjI2LCA3LCAxMjYsIDQ0LCA3MSwgMjI2LCA3LCAxMDEsIDExMCwgMjQzLCAKKyAgICAyMzYsIDIxOCwgMTMxLCAxMDEsIDQzLCAyNDksIDE2OSwgMTI3LCAxMDEsIDQ0LCAyNDksIDE2OSwgMTI3LCAxMDEsIDExMCwgCisgICAgMjQ5LCAyMjcsIDEwMSwgNTYsIDIzMCwgMjI5LCAyNDcsIDEyOCwgMTAxLCA1NiwgMSwgMjExLCAyMjcsIDEwMSwgNTYsIDEsIAorICAgIDQsIDYxLCAxMDEsIDU2LCAxLCA0LCA3NCwgMTAxLCA1NiwgMSwgNCwgNjksIDEwMSwgNTYsIDEsIDQsIDc2LCAxMDEsIDU2LCAKKyAgICAxLCA0LCA3OCwgMTAxLCA1NiwgMSwgNCwgMTkyLCAxMDEsIDU2LCAxLCA0LCAyMTAsIDIxMiwgMTAxLCA1NiwgMSwgNCwgCisgICAgMjEwLCAyNDQsIDEwMSwgNTYsIDEsIDQsIDIxNSwgMTE5LCAxMDEsIDIzNCwgMjA3LCAyMjQsIDE3NiwgMjE5LCAzMywgNzksIAorICAgIDEwMSwgNTYsIDEsIDYxLCAxMDEsIDU2LCAxLCA3NCwgMTAxLCA1NiwgMSwgNjksIDEwMSwgNTYsIDEsIDc2LCAxMDEsIDU2LCAKKyAgICAxLCA3OCwgMTAxLCA1NiwgMSwgMTc2LCAxMDEsIDU2LCAxLCAyMzQsIDk4LCAxMDEsIDU2LCAxLCAyMzMsIDIyMywgMTAxLCAKKyAgICA1NiwgMSwgMjM0LCAxODgsIDEwMSwgNTYsIDEsIDIzNCwgMzQsIDEwMSwgNTYsIDEsIDIwNiwgMTAxLCA1NiwgMSwgMjE5LCAKKyAgICAxOTMsIDEwMSwgNTYsIDEsIDIxOCwgODQsIDEwMSwgNTYsIDEsIDIyMSwgMTgzLCAxMDEsIDU2LCAxLCAyMTksIDYwLCAxMDEsIAorICAgIDU2LCAxLCAyMTcsIDEwNiwgMTAxLCA1NiwgMSwgMjE2LCAxMTgsIDEwMSwgNTYsIDEsIDIxNSwgMTE5LCAxMDEsIDU2LCAxLCAKKyAgICAyMTcsIDIzLCAxMDEsIDU2LCAxLCAxMTIsIDEwMSwgNTYsIDEsIDE5OCwgMTAxLCA1NiwgMSwgMjI4LCAyMzgsIDEwMSwgNTYsIAorICAgIDEsIDIyNywgMjQyLCAxMDEsIDU2LCAxLCAyMjksIDExMiwgMTAxLCA1NiwgMSwgMjI4LCA3OSwgMTAxLCA1NiwgMSwgMTYyLCAKKyAgICAxMDEsIDU2LCAxLCAyNDEsIDE4NywgMTAxLCA1NiwgMSwgMjQwLCAyMjksIDEwMSwgNTYsIDEsIDI0MSwgMjQ1LCAxMDEsIAorICAgIDU2LCAxLCAyNDEsIDc1LCAxMDEsIDU2LCAxLCAxODYsIDEwMSwgNTYsIDEsIDIzMCwgMjM1LCAxMDEsIDU2LCAxLCAyMzAsIAorICAgIDEwNywgMTAxLCA1NiwgMSwgMjMxLCA5NiwgMTAxLCA1NiwgMSwgMjMwLCAxNjYsIDEwMSwgNTYsIDEsIDE5MiwgMTAxLCA1NiwgCisgICAgMSwgMjEwLCAyMTIsIDEwMSwgNTYsIDEsIDIxMCwgMjQ0LCAxMDEsIDU2LCAxLCAyMDUsIDEwMSwgNTYsIDEsIDIyMywgMzgsIAorICAgIDEwMSwgNTYsIDEsIDIyMiwgMTQyLCAxMDEsIDU2LCAxLCAyMjMsIDEzMSwgMTAxLCA1NiwgMSwgMjIyLCAyMTMsIDEwMSwgCisgICAgNTYsIDEsIDIxMiwgNjUsIDEwMSwgNTYsIDEsIDIzMCwgMzAsIDEwMSwgNTYsIDIxMywgMTM1LCAyMTksIDMzLCA3OSwgMTAxLCAKKyAgICA1NiwgMjIwLCAxNTcsIDIxOSwgMzMsIDc5LCAxMDEsIDI0LCAyNDQsIDExMSwgMTAxLCAyNCwgMSwgMjM0LCA2NCwgMTAxLCAKKyAgICAyNCwgMSwgMjE4LCAyMTcsIDEwMSwgMjQsIDEsIDIzNCwgNTcsIDEwMSwgMjQsIDEsIDIyOCwgMjMxLCAxMDEsIDI0LCAxLCAKKyAgICAyMjgsIDIyOSwgMTAxLCAyNCwgMSwgMjI4LCAyMjgsIDEwMSwgMjQsIDEsIDIxNiwgMTAyLCAxMDEsIDI0LCAxLCAyMTgsIAorICAgIDIwNiwgMTAxLCAyNCwgMSwgMjIzLCAyOSwgMTAxLCAyNCwgMSwgMjIzLCAyNCwgMTAxLCAyNCwgMSwgMjIzLCAyMSwgMTAxLCAKKyAgICAyNCwgMSwgMjIzLCAxNCwgMTAxLCAyNCwgMSwgMjIzLCA5LCAxMDEsIDI0LCAxLCAyMjMsIDQsIDEwMSwgMjQsIDEsIDIyMywgCisgICAgMTUsIDEwMSwgMjQsIDEsIDIyMywgMjcsIDEwMSwgMjQsIDEsIDIzMCwgMjIyLCAxMDEsIDI0LCAxLCAyMjUsIDk4LCAxMDEsIAorICAgIDI0LCAxLCAyMTgsIDIxNCwgMTAxLCAyNCwgMSwgMjI1LCA4NywgMTAxLCAyNCwgMSwgMjE5LCAxNTAsIDEwMSwgMjQsIDEsIAorICAgIDIxOCwgMjExLCAxMDEsIDI0LCAxLCAyMzYsIDYzLCAxMDEsIDI0LCAxLCAyNTAsIDU0LCAxMDEsIDI0LCAxLCAyMTgsIDIyMSwgCisgICAgMTAxLCAyNCwgMSwgMjUwLCAxMTQsIDEwMSwgMjQsIDEsIDIzNCwgMTE2LCAxMDEsIDI0LCAxLCAyMTYsIDE3NCwgMTAxLCAKKyAgICAyNCwgMSwgMjI1LCAxMzQsIDEwMSwgMjQsIDEsIDI0MSwgMTc5LCAxMDEsIDI0LCAxLCA2MSwgMTAxLCAyNCwgMSwgMjU0LCAKKyAgICAyNTIsIDEwMSwgMjQsIDEsIDE5MiwgMTAxLCAyNCwgMSwgMjExLCA5MiwgMTAxLCAyNCwgMSwgMjQ1LCAxMjUsIDEwMSwgMjQsIAorICAgIDEsIDc2LCAxMDEsIDI0LCAxLCAyMTEsIDM2LCAxMDEsIDI0LCAxLCAyMTEsIDQ3LCAxMDEsIDI0LCAxLCA3OCwgMTAxLCAyNCwgCisgICAgMSwgMjEyLCA2NSwgMTAxLCAyNCwgMSwgMjEyLCA2MiwgMTAxLCAyNCwgMSwgMjI2LCAyMzgsIDEwMSwgMjQsIDEsIDIxMCwgCisgICAgMjQ0LCAxMDEsIDI0LCAxLCA2OSwgMTAxLCAyNCwgMSwgMjEyLCAxMSwgMTAxLCAyNCwgMSwgMjEyLCAyMiwgMTAxLCAyNCwgCisgICAgMSwgMjExLCAyNTAsIDEwMSwgMjQsIDEsIDIxMCwgMjEyLCAxMDEsIDI0LCAxLCAyNDUsIDYzLCAxMDEsIDI0LCAxLCAyMTEsIAorICAgIDgsIDEwMSwgMjQsIDEsIDc0LCAxMjYsIDI1MCwgMTg0LCA1MCwgMTI2LCAyMjQsIDIzMSwgNTAsIDEyNiwgMjI4LCA1NywgCisgICAgNTAsIDEyNiwgMjMxLCAyMzcsIDEyNiwgMjUxLCAxNDMsIDEzMCwgMTI2LCAyMTEsIDQwLCA1MCwgMTI2LCAyMTEsIDIxNywgCisgICAgNTAsIDEwMSwgMjQ0LCAyNiwgMTkzLCAyMTMsIDIzOSwgMTAxLCAxNDAsIDc1LCAxMDEsIDIxNCwgMTUzLCA3NSwgMTAxLCAKKyAgICA5NywgNzUsIDEwMSwgMjQ2LCAxMTIsIDc1LCAxMDEsIDg1LCAyMTgsIDIzNiwgMTAxLCA3MSwgMjUwLCA0MywgMjM1LCAyMTEsIAorICAgIDI1NCwgMTA3LCAyNTQsIDEyOCwgMjM1LCAyMTEsIDI1NCwgMTA3LCAyMjAsIDEzOSwgMjM1LCAyMTEsIDI1NCwgMTA3LCAKKyAgICAyMTYsIDIzNywgMjI2LCAyNTMsIDIyMywgNzUsIDI1MCwgMTUwLCAyMjMsIDc1LCAyNTAsIDE1MCwgNjIsIDU3LCAzLCAyNTMsIAorICAgIDE1MCwgNjEsIDYyLCA1NywgMywgMjUzLCAxMTksIDc2LCA2MiwgNTcsIDMsIDI1MywgMTI4LCA3NCwgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDk2LCA3OCwgNjIsIDU3LCAzLCAyNTMsIDE0NiwgNjksIDYyLCA1NywgMywgMjUzLCAxNjUsIDI0OCwgMjI5LCA2MiwgCisgICAgNTcsIDMsIDI1MywgMTEyLCAyNDgsIDk4LCA2MiwgNTcsIDMsIDI1MywgMTUyLCAyNDgsIDExLCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTQyLCAyNDcsIDE1MywgNjIsIDU3LCAzLCAyNTMsIDEwNiwgMjQ2LCA4NiwgNjIsIDU3LCAzLCAyNTMsIDEwMCwgMjM1LCAKKyAgICAxNDcsIDYyLCA1NywgMywgMjUzLCAxMTEsIDIzNSwgMTMyLCA2MiwgNTcsIDMsIDI1MywgMTIxLCAyMzUsIDc0LCA2MiwgNTcsIAorICAgIDMsIDI1MywgOTIsIDIzNSwgNTcsIDYyLCA1NywgMywgMjUzLCA4MCwgMTc2LCA2MiwgNTcsIDMsIDI1MywgMTEzLCAyMzQsIAorICAgIDE4OCwgNjIsIDU3LCAzLCAyNTMsIDkwLCAyMzQsIDk4LCA2MiwgNTcsIDMsIDI1MywgODcsIDIzNCwgMzQsIDYyLCA1NywgMywgCisgICAgMjUzLCA3NiwgMjMzLCAyMjMsIDYyLCA1NywgMywgMjUzLCA3NywgMTg2LCA2MiwgNTcsIDMsIDI1MywgMTQzLCAyMzEsIDk2LCAKKyAgICA2MiwgNTcsIDMsIDI1MywgODQsIDIzMCwgMjM1LCA2MiwgNTcsIDMsIDI1MywgMTQxLCAyMzAsIDE2NiwgNjIsIDU3LCAzLCAKKyAgICAyNTMsIDEzMywgMjMwLCAxMDcsIDYyLCA1NywgMywgMjUzLCAxNTQsIDE5OCwgNjIsIDU3LCAzLCAyNTMsIDEzMiwgMjI5LCAKKyAgICAxMTIsIDYyLCA1NywgMywgMjUzLCAxMjYsIDIyOCwgMjM4LCA2MiwgNTcsIDMsIDI1MywgMTA1LCAyMjgsIDc5LCA2MiwgNTcsIAorICAgIDMsIDI1MywgMTAyLCAyMjcsIDI0MiwgNjIsIDU3LCAzLCAyNTMsIDE2MSwgMTkxLCA2MiwgNTcsIDMsIDI1MywgODUsIDIyNSwgCisgICAgMjI0LCA2MiwgNTcsIDMsIDI1MywgMTE4LCAyMjUsIDExMSwgNjIsIDU3LCAzLCAyNTMsIDE0NSwgMjI1LCAxOSwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDEwNywgMjI0LCAxNTMsIDYyLCA1NywgMywgMjUzLCAxNDAsIDIyNCwgOTEsIDYyLCA1NywgMywgMjUzLCA3OSwgCisgICAgMjI0LCA3MiwgNjIsIDU3LCAzLCAyNTMsIDEzNSwgMjI0LCA1NiwgNjIsIDU3LCAzLCAyNTMsIDEyNCwgMjI0LCA0NSwgNjIsIAorICAgIDU3LCAzLCAyNTMsIDk3LCAyMDUsIDYyLCA1NywgMywgMjUzLCAxMjksIDIyMywgMTMxLCA2MiwgNTcsIDMsIDI1MywgMTA0LCAKKyAgICAyMjMsIDM4LCA2MiwgNTcsIDMsIDI1MywgMTYzLCAyMjIsIDIxMywgNjIsIDU3LCAzLCAyNTMsIDEzMCwgMjIyLCAxNDIsIAorICAgIDYyLCA1NywgMywgMjUzLCAxMjUsIDIwNiwgNjIsIDU3LCAzLCAyNTMsIDE0OCwgMjIxLCAxODMsIDYyLCA1NywgMywgMjUzLCAKKyAgICAxMTYsIDIxOSwgMTkzLCA2MiwgNTcsIDMsIDI1MywgMTQ0LCAyMTksIDYwLCA2MiwgNTcsIDMsIDI1MywgOTksIDIxOCwgODQsIAorICAgIDYyLCA1NywgMywgMjUzLCA5OCwgMjE3LCAxMDYsIDYyLCA1NywgMywgMjUzLCAxNTksIDIxNywgMjMsIDYyLCA1NywgMywgCisgICAgMjUzLCAxMjAsIDIxNiwgMTE4LCA2MiwgNTcsIDMsIDI1MywgMTU3LCAxMTIsIDYyLCA1NywgMywgMjUzLCA4OCwgMjE1LCAKKyAgICAxMTksIDYyLCA1NywgMywgMjUzLCAxMDMsIDIxMiwgNjUsIDYyLCA1NywgMywgMjUzLCA4MiwgMjEyLCAyMiwgNjIsIDU3LCAKKyAgICAzLCAyNTMsIDExNywgMjExLCAyNTAsIDYyLCA1NywgMywgMjUzLCAxMTUsIDIxMSwgMjI3LCA2MiwgNTcsIDMsIDI1MywgCisgICAgMTM5LCAyMTAsIDExNiwgNjIsIDU3LCAzLCAyNTMsIDgzLCAyMTAsIDk0LCA2MiwgNTcsIDMsIDI1MywgMTM2LCAyMTAsIDIzLCAKKyAgICA2MiwgNTcsIDMsIDI1MywgMTMxLCAyNTUsIDg0LCA2MiwgNTcsIDMsIDI1MywgMTE0LCAyNTUsIDgzLCA2MiwgNTcsIDMsIAorICAgIDI1MywgNzMsIDI1MywgMjAwLCA2MiwgNTcsIDMsIDI1MywgODYsIDI0NiwgNTQsIDYyLCA1NywgMywgMjUzLCA2OSwgMjQ2LCAKKyAgICA1MywgNjIsIDU3LCAzLCAyNTMsIDEwOSwgMjI3LCAxNzgsIDYyLCA1NywgMywgMjUzLCAxMjcsIDIyNCwgMTUxLCA2MiwgNTcsIAorICAgIDMsIDI1MywgOTUsIDIyNCwgMTU1LCA2MiwgNTcsIDMsIDI1MywgODEsIDIyMywgMTg5LCA2MiwgNTcsIDMsIDI1MywgMTIzLCAKKyAgICAyMjMsIDE4OCwgNjIsIDU3LCAzLCAyNTMsIDg5LCAyMjIsIDIxMiwgNjIsIDU3LCAzLCAyNTMsIDkxLCAyMTcsIDEwMywgNjIsIAorICAgIDU3LCAzLCAyNTMsIDcxLCAyMTUsIDc4LCA2MiwgNTcsIDMsIDI1MywgNjgsIDEwNSwgNjIsIDU3LCAxNiwgMjUzLCAxMzgsIAorICAgIDYyLCA1NywgMTYsIDI1MywgMTM3LCA2MiwgNTcsIDE2LCAyNTMsIDEzNCwgNjIsIDU3LCAxNiwgMjUzLCAxMjIsIDYyLCA1NywgCisgICAgMTYsIDI1MywgMTEwLCA2MiwgNTcsIDE2LCAyNTMsIDEwOCwgNjIsIDU3LCAxNiwgMjUzLCAxMDEsIDYyLCA1NywgMTYsIAorICAgIDI1MywgOTQsIDYyLCA1NywgMTYsIDI1MywgOTMsIDYyLCA1NywgMTYsIDI1MywgNzgsIDYyLCA1NywgMTYsIDI1MywgNzUsIAorICAgIDYyLCA1NywgMTYsIDI1MywgNzQsIDYyLCA1NywgMTYsIDI1MywgNzIsIDYyLCA1NywgMTYsIDI1MywgNzAsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDY3LCAyMzEsIDE5MCwgNjIsIDU3LCAxMDYsIDI1MywgNjYsIDIxMSwgMjIxLCA2MiwgNTcsIDEwNiwgMjUzLCAKKyAgICA2NSwgMjQ4LCA4MiwgNjIsIDU3LCAxMDYsIDI1MywgNjQsIDI0NSwgMTAzLCA2MiwgNTcsIDEwNiwgMjUzLCA2MywgMjMxLCAKKyAgICAxNjQsIDYyLCA1NywgMTA2LCAyNTMsIDYyLCAyMTgsIDE2NCwgNjIsIDU3LCAxMDYsIDI1MywgNjEsIDI0NSwgNDUsIDYyLCAKKyAgICA1NywgMTA2LCAyNTMsIDYwLCAyMjMsIDE1NiwgNjIsIDU3LCAxMDYsIDI1MywgNTksIDIyMCwgNjQsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDU4LCAyNDEsIDI0NCwgNjIsIDU3LCAxMDYsIDI1MywgNTcsIDIxOSwgMjcsIDYyLCA1NywgMTA2LCAyNTMsIDU2LCAKKyAgICAyNTEsIDIxMSwgNjIsIDU3LCAxMDYsIDI1MywgNTUsIDI0OSwgMTUzLCA2MiwgNTcsIDEwNiwgMjUzLCA1NCwgMjUxLCAxMjMsIAorICAgIDYyLCA1NywgMTA2LCAyNTMsIDUzLCAyMTIsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDUyLCAyNTIsIDE0NCwgNjIsIDU3LCAKKyAgICAxMDYsIDI1MywgNTEsIDIyNiwgMjA5LCA2MiwgNTcsIDEwNiwgMjUzLCA1MCwgMjE5LCAwLCA2MiwgNTcsIDEwNiwgMjUzLCAKKyAgICA0OSwgMjQ5LCA3NiwgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCA0OCwgMjM0LCAyMzAsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgCisgICAgNDcsIDIzNCwgMjM4LCA2MiwgNTcsIDEwNiwgMjUzLCA0NiwgMjI2LCAyMjIsIDYyLCA1NywgMTA2LCAyNTMsIDQ1LCAyMTEsIAorICAgIDIzNiwgNjIsIDU3LCAxMDYsIDI1MywgNDQsIDYyLCA1NywgMjMwLCAxNDcsIDI1MywgNDMsIDI1NCwgMjUsIDYyLCA1NywgCisgICAgMjMwLCAxNDcsIDI1MywgNDIsIDIzMSwgNTcsIDYyLCA1NywgMTA2LCAyNTMsIDQxLCAyNTEsIDE0MiwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgNDAsIDI0MiwgMTczLCA2MiwgNTcsIDEwNiwgMjUzLCAzOSwgNjIsIDU3LCAxMDYsIDI1MywgMzgsIDIxMSwgMjEyLCAKKyAgICA2MiwgNTcsIDEwNiwgMjUzLCAzNywgNjIsIDU3LCAxMDYsIDI1MywgMzYsIDYyLCA1NywgMTA2LCAyNTMsIDM1LCAyNDAsIAorICAgIDI1NSwgNjIsIDU3LCAxMDYsIDI1MywgMzQsIDYyLCA1NywgMTA2LCAyNTMsIDMzLCA2MiwgNTcsIDEwNiwgMjUzLCAzMiwgCisgICAgNjIsIDU3LCAyMzAsIDE0NywgMjUzLCAzMCwgMjE1LCA5MiwgNjIsIDU3LCAxMDYsIDI1MywgMjksIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDI4LCA2MiwgNTcsIDEwNiwgMjUzLCAyNywgMjUwLCAyLCA2MiwgNTcsIDEwNiwgMjUzLCAyNiwgNjIsIDU3LCAxMDYsIAorICAgIDI1MywgMjUsIDYyLCA1NywgMTA2LCAyNTMsIDI0LCAyNDMsIDEwMCwgNjIsIDU3LCAxMDYsIDI1MywgMjMsIDI1NCwgMTIsIAorICAgIDYyLCA1NywgMTA2LCAyNTMsIDIyLCA2MiwgNTcsIDEwNiwgMjUzLCAyMSwgNjIsIDU3LCAxMDYsIDI1MywgMjAsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDE5LCA2MiwgNTcsIDEwNiwgMjUzLCAxOCwgNjIsIDU3LCAxMDYsIDI1MywgMTcsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDE2LCA2MiwgNTcsIDEwNiwgMjUzLCAxNSwgNjIsIDU3LCAxMDYsIDI1MywgMTQsIDYyLCA1NywgMTA2LCAyNTMsIAorICAgIDEzLCAyMzAsIDEzOSwgNjIsIDU3LCAxMDYsIDI1MywgMTIsIDYyLCA1NywgMTA2LCAyNTMsIDExLCAyMTUsIDIzNiwgNjIsIAorICAgIDU3LCAxMDYsIDI1MywgMTAsIDYyLCA1NywgMTA2LCAyNTMsIDksIDYyLCA1NywgMTA2LCAyNTMsIDgsIDYyLCA1NywgMTA2LCAKKyAgICAyNTMsIDcsIDYyLCA1NywgMTA2LCAyNTMsIDYsIDYyLCA1NywgMTA2LCAyNTMsIDUsIDYyLCA1NywgMTA2LCAyNTMsIDQsIAorICAgIDYyLCA1NywgMTA2LCAyNTMsIDMsIDYyLCA1NywgMTA2LCAyNTMsIDIsIDYyLCA1NywgMTA2LCAyNTMsIDEsIDYyLCA1NywgCisgICAgMTA2LCAyNTMsIDAsIDYyLCA1NywgMTA2LCAyNTIsIDI1NSwgMjQxLCAyMTgsIDYyLCA1NywgMTA2LCAyNTIsIDIzNCwgMjQ0LCAKKyAgICAzNiwgNjIsIDU3LCAxMDYsIDI1MiwgMjMxLCAyNTIsIDEyNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjI2LCAyMTksIDcsIDYyLCAKKyAgICA1NywgMTA2LCAyNTIsIDIyNSwgNzUsIDYyLCA1NywgMTA2LCAyNTIsIDIyNCwgNjIsIDU3LCAxMDYsIDI1MiwgMjIzLCAyMTcsIAorICAgIDIzNywgNjIsIDU3LCAxMDYsIDI1MiwgMjIyLCA2MiwgNTcsIDEwNiwgMjUyLCAyMjEsIDYyLCA1NywgMTA2LCAyNTIsIDIyMCwgCisgICAgMjExLCAyNTQsIDI1MCwgMTQ3LCA2MiwgNTcsIDEwNiwgMjUyLCAyMTksIDI1MCwgMTQ3LCA2MiwgNTcsIDEwNiwgMjUyLCAKKyAgICAyMTgsIDI1MCwgMTQ4LCAyNDQsIDcsIDYyLCA1NywgMTA2LCAyNTIsIDIxNywgMjEyLCAwLCA2MiwgNTcsIDEwNiwgMjUyLCAKKyAgICAyMTYsIDYyLCA1NywgMTA2LCAyNTIsIDIxNSwgNjIsIDU3LCAyMzAsIDE0NywgMjUyLCAyMTQsIDI0NywgMjA2LCA2MiwgNTcsIAorICAgIDEwNiwgMjUyLCAyMTMsIDYyLCA1NywgMTA2LCAyNTIsIDIxMiwgNjIsIDU3LCAxMDYsIDI1MiwgMjEwLCA2MiwgNTcsIDEwNiwgCisgICAgMjUyLCAyMDksIDYyLCA1NywgMTA2LCAyNTIsIDIwOCwgNjIsIDU3LCAxMDYsIDI1MiwgMjA3LCAyNDgsIDE2NywgNjIsIDU3LCAKKyAgICAxMDYsIDI1MiwgMjA2LCA2MiwgNTcsIDEwNiwgMjUyLCAyMDUsIDYyLCA1NywgMTA2LCAyNTIsIDIwNCwgNjIsIDU3LCAxMDYsIAorICAgIDI1MiwgMjAzLCA2MiwgNTcsIDEwNiwgMjUyLCAyMDIsIDYyLCA1NywgMTA2LCAyMTMsIDE4NiwgMjUzLCAzMSwgNjIsIDU3LCAKKyAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDI1NCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI1MywgNjIsIDU3LCAxMDYsIAorICAgIDIxMywgMTg2LCAyNTIsIDI1MiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI1MSwgNjIsIDU3LCAxMDYsIDIxMywgCisgICAgMTg2LCAyNTIsIDI1MCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0OSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKKyAgICAyNTIsIDI0OCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAorICAgIDI0NiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0NCwgCisgICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MiwgNjIsIDU3LCAKKyAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDI0MCwgNjIsIDU3LCAxMDYsIAorICAgIDIxMywgMTg2LCAyNTIsIDIzOSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzOCwgNjIsIDU3LCAxMDYsIDIxMywgCisgICAgMTg2LCAyNTIsIDIzNywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzNiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAKKyAgICAyNTIsIDIzNSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMywgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIAorICAgIDIzMiwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIzMCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyOSwgCisgICAgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyOCwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIyNywgNjIsIDU3LCAKKyAgICAxMDYsIDIxMywgMTg2LCAyNTIsIDIxMSwgNjIsIDU3LCAxMDYsIDIxMywgMTg2LCAyNTIsIDIwMSwgMjU0LCAyNDUsIDIxMSwgCisgICAgMjA5LCAyMjAsIDE0MCwgMjMyLCAyMTksIDI1NCwgMjQ1LCAyMTEsIDIwOSwgMjIwLCAxNDAsIDI0NywgMTI4LCAyNTQsIAorICAgIDI0NSwgMjUwLCAxMzgsIDc5LCAyNTQsIDI0NSwgNTQsIDExMSwgMjU0LCAyNDUsIDU0LCAxMDUsIDI1NCwgMjQ1LCA1NCwgCisgICAgMTU4LCAyNTQsIDI0NSwgNTQsIDE2MSwgMjU0LCAyNDUsIDU0LCAxOTAsIDI1NCwgMjQ1LCA1NCwgMTk1LCAyNTQsIDI0NSwgCisgICAgNTQsIDE5OSwgMjU0LCAyNDUsIDU0LCAxOTYsIDI1NCwgMjQ1LCA1NCwgMjAxLCAyNTQsIDI0NSwgNTQsIDIxNiwgMjQ4LCAKKyAgICAyNTQsIDI0NSwgNTQsIDIxNSwgNzMsIDI1NCwgMjQ1LCA1NCwgMjE2LCAxNjMsIDI1NCwgMjQ1LCA1NCwgMjQ0LCAyMywgCisgICAgMjU0LCAyNDUsIDU0LCAyNDQsIDEyMiwgMjU0LCAyNDUsIDU0LCAyMTksIDExMywgMjU0LCAyNDUsIDU0LCAyMjAsIDExOCwgCisgICAgMjU0LCAyNDUsIDU0LCAyNDUsIDE5MiwgMjU0LCAyNDUsIDU0LCAyMjgsIDIwMCwgMjU0LCAyNDUsIDU0LCAxMjMsIDI0MCwgCisgICAgMjE3LCAyNTQsIDI0NSwgNTQsIDExMywgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMTM0LCAyNDAsIDIxNywgMjU0LCAyNDUsIAorICAgIDU0LCAyNDQsIDE5LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyNDQsIDg5LCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAKKyAgICAyMTksIDEyNywgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMjIwLCAxMjQsIDI0MCwgMjE3LCAyNTQsIDI0NSwgNTQsIDI0NSwgCisgICAgMjAxLCAyNDAsIDIxNywgMjU0LCAyNDUsIDU0LCAyMjgsIDIwNSwgMjQwLCAyMTcsIDI1NCwgMjQ1LCA1NCwgMTIzLCAyMTYsIAorICAgIDE0OCwgMjU0LCAyNDUsIDU0LCAxMTMsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDEzNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCAKKyAgICA1NCwgMjQ0LCAxOSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ0LCA4OSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgCisgICAgMjE5LCAxMjcsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyMCwgMTI0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyNDUsIAorICAgIDIwMSwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjI4LCAyMDUsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIxNiwgMjQ5LCAKKyAgICAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTUsIDc0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMTYsIDE2NCwgMjE2LCAKKyAgICAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ0LCAyNCwgMjE2LCAxNDgsIDI1NCwgMjQ1LCA1NCwgMjQ0LCAxMjMsIDIxNiwgMTQ4LCAKKyAgICAyNTQsIDI0NSwgNTQsIDIxOSwgMTE0LCAyMTYsIDE0OCwgMjU0LCAyNDUsIDU0LCAyMjAsIDExOSwgMjE2LCAxNDgsIDI1NCwgCisgICAgMjQ1LCA1NCwgMjQ1LCAxOTMsIDIxNiwgMTQ4LCAyNTQsIDI0NSwgNTQsIDIyOCwgMjAxLCAyMTYsIDE0OCwgMjU0LCAyNDUsIAorICAgIDIxMiwgMTQsIDI1MiwgMTM2LCAyMTQsIDE3MywgMjU0LCAyNDUsIDIxMiwgMTQsIDI0NCwgMTAwLCAyMTgsIDYwLCAyNTQsIAorICAgIDI0NSwgMjEyLCAxNCwgMjIxLCAxNzgsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyMTIsIDE0LCAyMTYsIDE3MCwgMjE4LCA2MCwgCisgICAgMjU0LCAyNDUsIDIxMiwgMTQsIDI0NCwgMTIsIDIxOCwgNjAsIDI1NCwgMjQ1LCAyNDYsIDg5LCAyMzEsIDk1LCAyNDQsIAorICAgIDEwMCwgMjE4LCA2MCwgMjU0LCAyNDUsIDIzMiwgMjA1LCAyMzEsIDk1LCAyNDQsIDEwMCwgMjE4LCA2MCwgMjU0LCAyNDUsIAorICAgIDIzMSwgOTUsIDIyMSwgMTc4LCAyMTgsIDYwLCAyNTQsIDI0NSwgMjMxLCA5NSwgMjE2LCAxNzAsIDIxOCwgNjAsIDI2LCAKKyAgICAyNTUsIDE1LCAyNTMsIDIwMiwgMTIzLCAyMjQsIDI0LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjQyLCAzNCwgMjYsIAorICAgIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0NiwgMTA4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDE5MCwgMjYsIDI1NSwgCisgICAgMTUsIDI1MywgMjAyLCAyNDQsIDEyMiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIDIxNywgMjYsIAorICAgIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyMTYsIDE0OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDEyMywgCisgICAgMjE2LCAxNDgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAKKyAgICAyMTYsIDI0OSwgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDEyMywgMjE3LCA2OCwgMjYsIDI1NSwgMTUsIAorICAgIDI1MywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDI0NCwgODksIDI0MCwgCisgICAgMjE4LCAyMTcsIDY4LCAyNiwgMjU1LCAxNSwgMjUzLCAyMDIsIDEyMywgMjE2LCAxNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAKKyAgICAyNTMsIDIwMiwgMjQ0LCA4OSwgMjE2LCAxNDksIDIxNywgNjgsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjQ0LCA4OSwgCisgICAgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjE2LCAyNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAxNSwgMjUzLCAKKyAgICAyMDIsIDI0NCwgMTIzLCAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAxMjMsIDI0MCwgMjE4LCAyMTgsIDE1MiwgCisgICAgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDg5LCAyNDAsIDIxOCwgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIAorICAgIDIwMiwgMTIzLCAyMTYsIDE0OSwgMjE4LCAxNTIsIDI2LCAyNTUsIDE1LCAyNTMsIDIwMiwgMjE2LCAyNDksIDIxNiwgMTQ5LCAKKyAgICAyMTgsIDE1MiwgMjYsIDI1NSwgMTUsIDI1MywgMjAyLCAyNDQsIDEyMywgMjE2LCAxNDksIDIxOCwgMTUyLCAyNiwgMjU1LCAKKyAgICAxNSwgMjUzLCAyMDIsIDIxNiwgMjQ5LCAyMzAsIDE2OSwgMjYsIDI1NSwgMTUsIDI0MSwgMjEyLCAxMjMsIDIyNSwgMzQsIAorICAgIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMTExLCAyNiwgMjU1LCAxNSwgMjQxLCAyMDgsIDExMSwgMjYsIDI1NSwgMTUsIDI0NSwgCisgICAgMTEyLCAxMDUsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMTA1LCAyNiwgMjU1LCAxNSwgMjQ5LCA3MywgMTEzLCAyNDYsIAorICAgIDEwNywgMjYsIDI1NSwgMTUsIDI0NSwgMTEyLCAxMTMsIDI0NiwgMTA3LCAyNiwgMjU1LCAxNSwgMjE1LCAyMDQsIDE5MCwgCisgICAgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyMTYsIDI0OCwgMjYsIDI1NSwgMTUsIDIxNSwgMjA0LCAyMTYsIDI0OSwgMjU0LCAKKyAgICAxNDksIDE3LCAyNiwgMjU1LCAxNSwgMjQxLCAyMDgsIDIxNiwgMjQ4LCAyNiwgMjU1LCAxNSwgMjMxLCA0NiwgMjE2LCAyNDgsIAorICAgIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjE2LCAyNDgsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjE2LCAxNjMsIDI2LCAKKyAgICAyNTUsIDE1LCAyMTUsIDIwNCwgMjQ0LCAxMjIsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjQ0LCAxMjMsIDI1NCwgMTQ5LCAKKyAgICAxNywgMjYsIDI1NSwgMTUsIDI0MSwgMjA4LCAyNDQsIDEyMiwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyNDQsIDEyMiwgMjYsIAorICAgIDI1NSwgMTUsIDIxNiwgMTgyLCAxMjMsIDI0MCwgMjE3LCAyNiwgMjU1LCAxNSwgMjE2LCAxODIsIDEzNCwgMjQwLCAyMTcsIAorICAgIDI2LCAyNTUsIDE1LCAyNDUsIDExMiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMTUsIDIwNCwgMjQ0LCA4OSwgCisgICAgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMTYsIDE4MiwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyNTAsIAorICAgIDIzNSwgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAyNTUsIDE1LCAyMjksIDE4NywgMjQ0LCA4OSwgMjQwLCAyMTcsIDI2LCAKKyAgICAyNTUsIDE1LCAyMTYsIDE4MiwgMTIzLCAyMTYsIDE0OCwgMjYsIDI1NSwgMTUsIDIxNiwgMTgyLCAyNDQsIDg5LCAyMTYsIAorICAgIDE0OCwgMjYsIDI1NSwgMTUsIDI0OCwgNjUsIDI0NCwgODksIDIzMCwgMTY5LCAyNiwgMjU1LCAxNSwgMjE4LCAxMjAsIDI0NCwgCisgICAgMTIzLCAyMzAsIDE2OSwgMjYsIDEyMywgMTYzLCA1MCwgMjYsIDEyMywgMTYzLCA1LCAyNTQsIDE0OSwgMTcsIDI2LCAxMTMsIAorICAgIDIxNiwgMTY4LCA1MCwgMjYsIDEzNCwgMjI0LCAyMywgNTAsIDI2LCAyMTEsIDQ1LCA1MCwgMjYsIDIxNywgNjksIDUwLCAyNiwgCisgICAgMjQ2LCAxMDksIDUwLCAyNiwgMjI2LCAyNTAsIDUwLCAyNiwgMTEzLCAyMjYsIDI0OSwgNTAsIDI2LCAxMzQsIDIyNiwgMjQ5LCAKKyAgICA1MCwgMjYsIDI0NCwgMTksIDIyNiwgMjQ5LCA1MCwgMjYsIDI0NCwgODksIDIyNiwgMjQ5LCA1MCwgMjYsIDIzMSwgNDAsIAorICAgIDUwLCAyNiwgMjMzLCAxNjMsIDI1MiwgMTM2LCA1MCwgMjYsIDIzMiwgMjAwLCA1MCwgMjYsIDIyNiwgMTM1LCA1MCwgMjYsIAorICAgIDIxMSwgMTU5LCA1MCwgMjYsIDI1MywgMjUxLCA1MCwgMjYsIDI1NCwgOCwgNTAsIDI2LCAyNDIsIDE1MSwgNTAsIDI2LCAKKyAgICAyMTUsIDE4NywgMjUyLCAxMzYsIDUwLCAyNiwgMjEwLCA4NywgNTAsIDIyMiwgMjAwLCAyMjAsIDExNSwgNTAsIDIyMiwgCisgICAgMjAwLCAyMTQsIDE4NSwgNTAsIDIyMiwgMjAwLCAyMjAsIDE0NCwgNTAsIDIyMiwgMjAwLCAyMjAsIDExMywgNTAsIDIyMiwgCisgICAgMjAwLCAyNDcsIDIyMSwgMjIwLCAxMTMsIDUwLCAyMjIsIDIwMCwgMjE5LCAxNzAsIDUwLCAyMjIsIDIwMCwgMjQ4LCA2MSwgCisgICAgNTAsIDIyMiwgMjAwLCAyMjQsIDksIDUwLCAyMjIsIDIwMCwgMjIwLCAxMzEsIDUwLCAyMjIsIDIwMCwgMjQ2LCA2OCwgNTAsIAorICAgIDIyMiwgMjAwLCAyNTMsIDI0NiwgNTAsIDIyMiwgMjAwLCAyNTAsIDE3OSwgNTAsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjI1LCAyMTYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjI1LCAyNywgMjQxLCAyNDIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgCisgICAgNSwgMjE3LCA0NiwgMjQxLCAyNDIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUwLCAyNTUsIDIyNSwgMTQ2LCAyNDcsIAorICAgIDE5OSwgNSwgMjUwLCAxMDksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjExLCAyMjEsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjQxLCAyMTgsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQzLCA5MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTYsIAorICAgIDExNywgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCA3NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNTEsIDE3NywgMjI1LCAKKyAgICAxNDYsIDI0NywgMTk5LCA1LCAyMjAsIDMxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjUyLCAyMjUsIDE0NiwgCisgICAgMjQ3LCAxOTksIDUsIDIzMSwgMTg5LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIzMSwgMTQxLCAyMjUsIDE0NiwgMjQ3LCAKKyAgICAxOTksIDUsIDIyMSwgMjE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIzMiwgMjQzLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIAorICAgIDI1MSwgMTk2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjM5LCAyMjUsIDM4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIAorICAgIDUsIDI0NywgMTQxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0OSwgMjMxLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIxOSwgCisgICAgODksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjQ5LCAyMzIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjUyLCA3MSwgMjI1LCAKKyAgICAxNDYsIDI0NywgMTk5LCA1LCAyMjAsIDE4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0MCwgMjU1LCAyMjUsIDE0NiwgCisgICAgMjQ3LCAxOTksIDUsIDI0MSwgMTg1LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MSwgMTIwLCAyMzMsIDQyLCAyMjUsIAorICAgIDE0NiwgMjQ3LCAxOTksIDUsIDI1MCwgMjMyLCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDIyMywgMTU2LCAyMjUsIDE0NiwgCisgICAgMjQ3LCAxOTksIDUsIDI0NSwgMjM4LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI0NiwgMTE1LCAyMjUsIDE0NiwgMjQ3LCAKKyAgICAxOTksIDUsIDIxNSwgMTA2LCAyMjUsIDE0NiwgMjQ3LCAxOTksIDUsIDI1MiwgNzQsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjI1LCAzOSwgMjE1LCAyMzYsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgMjEzLCAxNTksIDIyNSwgMTQ2LCAyNDcsIDE5OSwgCisgICAgNSwgMjI2LCAyMiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjIsIDE5MiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMzIsIAorICAgIDIzMCwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMjYsIDExOSwgMjUyLCAxOTIsIDIyNSwgMTQ2LCAyNDcsIDE5OSwgNSwgCisgICAgMjQ0LCA1NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyNDIsIDE0NSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTgsIAorICAgIDEyMSwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCA0LCAyNTMsIDE3NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAyMTIsIDMyLCAKKyAgICAyNTIsIDE1NiwgMjI1LCAxNDYsIDI0NywgMTk5LCA1LCAzOCwgMjI2LCAyNTIsIDkxLCAyMzIsIDY1LCAxLCA2MSwgMjMyLCAKKyAgICA2NSwgMSwgNzYsIDIzMiwgNjUsIDEsIDI1MywgMTY2LCAyMzIsIDY1LCAxLCAyNTIsIDI3LCAyMzIsIDY1LCAxLCAyNDMsIAorICAgIDIwOSwgMjMyLCA2NSwgMSwgMjQ5LCA2OCwgMjMyLCA2NSwgMSwgNzQsIDIzMiwgNjUsIDEsIDIxMiwgOTgsIDIzMiwgNjUsIAorICAgIDEsIDIxMCwgMTU5LCAyMzIsIDY1LCAxLCAyMTYsIDIxMSwgMjMyLCA2NSwgMSwgMjM1LCAxNTAsIDIzMiwgNjUsIDEsIDIzNSwgCisgICAgMjksIDIzMiwgNjUsIDEsIDIyNCwgOTksIDIzMiwgNjUsIDEsIDE1NiwgMjMyLCA2NSwgMSwgMTk0LCAyMzIsIDY1LCAxLCAKKyAgICAyMzAsIDMwLCAyMzIsIDY1LCAxLCAyMzAsIDE3MSwgMjMyLCA2NSwgMSwgMjI4LCAxMTYsIDIzMiwgNjUsIDEsIDY5LCAyMzIsIAorICAgIDY1LCAxLCAyMjYsIDEwOSwgMjMyLCA2NSwgMSwgMjM0LCA1MywgMjMyLCA2NSwgMSwgMTUzLCAyMzIsIDY1LCAxLCAyMjIsIAorICAgIDkzLCAyMzIsIDY1LCAxLCAyMTcsIDE1MywgMjMyLCA2NSwgMSwgMjE1LCAxNjAsIDIzMiwgNjUsIDEsIDI1NCwgMTMxLCAKKyAgICAyMzIsIDY1LCAxLCAyNDUsIDE1OCwgMjMyLCA2NSwgMSwgMjQyLCA2NywgMjMyLCA2NSwgMSwgMjExLCAxNzgsIDI1MCwgCisgICAgMjQ1LCAxLCA2MSwgMjUwLCAyNDUsIDEsIDIyNiwgOTUsIDI1MCwgMjQ1LCAxLCAyNDksIDY4LCAyNTAsIDI0NSwgMSwgMTU2LCAKKyAgICAyNTAsIDI0NSwgMSwgMjE0LCAxMTYsIDI1MCwgMjQ1LCAxLCAxNTMsIDI1MCwgMjQ1LCAxLCAyMzMsIDY4LCAyNTAsIDI0NSwgCisgICAgMSwgMjU1LCA4NCwgMjUwLCAyNDUsIDEsIDIyNCwgOTksIDI1MCwgMjQ1LCAxLCAyNTMsIDE2NiwgMjUwLCAyNDUsIDEsIAorICAgIDE5NCwgMjUwLCAyNDUsIDEsIDc4LCAyNTAsIDI0NSwgMSwgMjQ4LCAyMzEsIDI1MCwgMjQ1LCAxLCAyMTcsIDE1MywgMjUwLCAKKyAgICAyNDUsIDEsIDIyMCwgMTA2LCAyNTAsIDI0NSwgMSwgMjIwLCAxMDUsIDI1MCwgMjQ1LCAxLCAyMjIsIDkzLCAyNTAsIDI0NSwgCisgICAgMSwgMjUxLCA3MywgMjUwLCAyNDUsIDEsIDY5LCAyNTAsIDI0NSwgMSwgMjI4LCAxMTYsIDI1MCwgMjQ1LCAxLCAyMTEsIAorICAgIDE3OCwgMjUwLCAyNDUsIDEsIDIzMCwgMzAsIDI1MCwgMjQ1LCAxLCAyMTUsIDE1OSwgMjUwLCAyNDUsIDEsIDIyNiwgMTA5LCAKKyAgICAyNTAsIDI0NSwgMSwgMjE4LCAyMjgsIDI1MCwgMjQ1LCAxLCA3NCwgMjUwLCAyNDUsIDEsIDc2LCAyNTAsIDI0NSwgMSwgCisgICAgMjE0LCAxMTMsIDI1MCwgMjQ1LCAxLCAyMzUsIDI5LCAyNTAsIDI0NSwgMSwgMjM1LCAyMCwgMjUwLCAyNDUsIDEsIDIyOSwgCisgICAgMTU1LCAyNTAsIDI0NSwgMSwgMjE0LCAxMTgsIDI1MCwgMjQ1LCAxLCAyNDMsIDIwOSwgMjUwLCAyNDUsIDEsIDI0MywgMTQ0LCAKKyAgICAyNTAsIDI0NSwgMSwgMjE4LCAxNzAsIDI1MCwgMjQ1LCAxLCAyMTgsIDE2OSwgMjUwLCAyNDUsIDEsIDIyOSwgODQsIDI1MCwgCisgICAgMjQ1LCAxLCAyMzYsIDQwLCAyNTAsIDI0NSwgMSwgMjUxLCA3MiwgMjUwLCAyNDUsIDEsIDIxNSwgMTYwLCAyNTAsIDI0NSwgCisgICAgMSwgMjE0LCAxMTUsIDI1MCwgMjQ1LCAxLCAyMjIsIDE4MiwgMjUwLCAyNDUsIDEsIDIzMSwgMTM0LCAyNTAsIDI0NSwgMSwgCisgICAgMjMxLCAxMzMsIDI1MCwgMjQ1LCAxLCAyMzEsIDEzMiwgMjUwLCAyNDUsIDEsIDIzMSwgMTMxLCAyNTAsIDI0NSwgMSwgMjMzLCAKKyAgICA2NywgMjUwLCAyNDUsIDEsIDI0NSwgMjQyLCAyNTAsIDI0NSwgMSwgMjE0LCAxMTQsIDU1LCAzMiwgMSwgNjEsIDU1LCAzMiwgCisgICAgMSwgMjUyLCA4MywgNTUsIDMyLCAxLCAyMzQsIDE4OCwgNTUsIDMyLCAxLCAyNDgsIDk4LCA1NSwgMzIsIDEsIDc2LCA1NSwgCisgICAgMzIsIDEsIDIxMywgMjU1LCA1NSwgMzIsIDEsIDIxMCwgOTQsIDU1LCAzMiwgMSwgMjQxLCAyNDUsIDU1LCAzMiwgMSwgMjE2LCAKKyAgICAxOTYsIDU1LCAzMiwgMSwgNzQsIDU1LCAzMiwgMSwgMTc2LCA1NSwgMzIsIDEsIDI0NSwgMTgyLCA1NSwgMzIsIDEsIDI0NSwgCisgICAgMTY3LCA1NSwgMzIsIDEsIDI0NSwgMTU4LCA1NSwgMzIsIDEsIDI0NSwgODMsIDU1LCAzMiwgMSwgNzgsIDU1LCAzMiwgMSwgCisgICAgMjI1LCAyMjQsIDU1LCAzMiwgMSwgMjIwLCA2NSwgNTUsIDMyLCAxLCAyMzMsIDIyMywgNTUsIDMyLCAxLCAyNDUsIDEwMCwgCisgICAgNTUsIDMyLCAxLCAyNDUsIDkwLCA1NSwgMzIsIDEsIDIxNywgMjMsIDU1LCAzMiwgMSwgNjksIDU1LCAzMiwgMSwgMjQ1LCAKKyAgICAxODUsIDU1LCAzMiwgMSwgMjI1LCAxMzksIDU1LCAzMiwgMSwgMjM0LCAxMjUsIDU1LCAzMiwgMSwgMjQ1LCAyMTAsIDU1LCAKKyAgICAzMiwgMSwgMjQ1LCA5MiwgNTUsIDMyLCAxLCAyNTAsIDEzOSwgNTUsIDMyLCAxLCAyMzYsIDQwLCA1NSwgMzIsIDEsIDIxNCwgCisgICAgMTE4LCA1NSwgMzIsIDIyNywgMjAyLCAxMTEsIDU1LCAzMiwgMjI3LCAyMDIsIDE5MCwgNTUsIDMyLCAyMjcsIDIwMiwgMjE2LCAKKyAgICAyNDgsIDU1LCAzMiwgMjI3LCAyMDIsIDI0NCwgMTIyLCAyNDIsIDE2MCwgMSwgMjU0LCAyMTMsIDI0MiwgMTYwLCAxLCAyNTIsIAorICAgIDE3MSwgMjQyLCAxNjAsIDEsIDI0MiwgMjE4LCAyNDIsIDE2MCwgMSwgMjQ4LCAyMTIsIDI0MiwgMTYwLCAxLCAyNTQsIDIwOSwgCisgICAgMjQyLCAxNjAsIDEsIDIyNCwgODIsIDI0MiwgMTYwLCAxLCAyMzUsIDE2MSwgMjQyLCAxNjAsIDEsIDI0MiwgNDYsIDI0MiwgCisgICAgMTYwLCAxLCAyMTYsIDE1OSwgMjQyLCAxNjAsIDEsIDI0NSwgMTkxLCAyNDIsIDE2MCwgMSwgMjMzLCAxOTYsIDI0MiwgMTYwLCAKKyAgICAxLCAyMzMsIDExOSwgMjQyLCAxNjAsIDEsIDIzMSwgMTg0LCAyNDIsIDE2MCwgMSwgMjI5LCAxODksIDI0MiwgMTYwLCAxLCAKKyAgICAyMzUsIDEyNSwgMjQyLCAxNjAsIDEsIDIxNCwgMTM2LCAyNDIsIDE2MCwgMSwgMjI2LCA3MywgMjQyLCAxNjAsIDEsIDIyOCwgCisgICAgMjAwLCAyNDIsIDE2MCwgMSwgMjIzLCAxNjgsIDI0MiwgMTYwLCAxLCAyMjEsIDIyMCwgMjQyLCAxNjAsIDEsIDIxNywgNSwgCisgICAgMjQyLCAxNjAsIDEsIDIxMSwgMjM0LCAyNDIsIDE2MCwgMSwgMjQ0LCAxODYsIDI0MiwgMTYwLCAxLCAyMzYsIDQ0LCAyNDIsIAorICAgIDE2MCwgMSwgMjQwLCAyMDYsIDI0MiwgMTYwLCAxLCAyMjYsIDE0MywgMjQyLCAxNjAsIDEsIDIyOCwgMjA1LCAyNDAsIDIxNywgCisgICAgMjE0LCAyMDksIDEsIDI1NCwgMTU1LCAyMTQsIDIwOSwgMSwgMjUyLCAzNCwgMjE0LCAyMDksIDEsIDI0MywgMTE1LCAyMTQsIAorICAgIDIwOSwgMSwgMjM0LCAxMzgsIDIxNCwgMjA5LCAxLCAyNDgsIDYyLCAyMTQsIDIwOSwgMSwgMjQxLCA3NSwgMjE0LCAyMDksIAorICAgIDEsIDIxMSwgMjI3LCAyMTQsIDIwOSwgMSwgMjEwLCA4NSwgMjE0LCAyMDksIDEsIDI0MCwgMjQ4LCAyMTQsIDIwOSwgMSwgCisgICAgMjE2LCAyMzEsIDIxNCwgMjA5LCAxLCAyMTAsIDIzMywgMjE0LCAyMDksIDEsIDIzNSwgMCwgMjE0LCAyMDksIDEsIDIyMCwgCisgICAgMjIsIDIxNCwgMjA5LCAxLCAyMzMsIDEwNCwgMjE0LCAyMDksIDEsIDIzMSwgNzAsIDIxNCwgMjA5LCAxLCAyNDgsIDI5LCAKKyAgICAyMTQsIDIwOSwgMSwgMjI3LCAxOTgsIDIxNCwgMjA5LCAxLCAyMTAsIDEzLCAyMTQsIDIwOSwgMSwgMjIxLCAyNTAsIDIxNCwgCisgICAgMjA5LCAxLCAyNTQsIDIwNSwgMjE0LCAyMDksIDEsIDIyNCwgMTUzLCAyMTQsIDIwOSwgMSwgMjIyLCAyNywgMjE0LCAyMDksIAorICAgIDEsIDIyNCwgMzgsIDIxNCwgMjA5LCAxLCAyMjMsIDE0NywgMjE0LCAyMDksIDEsIDIxNiwgMjAwLCAyMTQsIDIwOSwgMSwgCisgICAgMjQyLCAyNTEsIDIxNCwgMjA5LCAxLCAxMTIsIDIxNCwgMjA5LCAxLCA3NCwgMjE0LCAyMDksIDEsIDY5LCAyMTQsIDIwOSwgCisgICAgMSwgMjE4LCAxODEsIDIxNCwgMjA5LCAyMTEsIDIwOSwgMjQ3LCAxODAsIDU1LCAyMjUsIDE3MiwgNSwgNjEsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgNzQsIDU1LCAyMjUsIDE3MiwgNSwgNjksIDU1LCAyMjUsIDE3MiwgNSwgMTc2LCA1NSwgMjI1LCAxNzIsIDUsIAorICAgIDIzMywgMjIzLCA1NSwgMjI1LCAxNzIsIDUsIDI0MywgMTQyLCA1NSwgMjI1LCAxNzIsIDUsIDI0MiwgMTIwLCA1NSwgMjI1LCAKKyAgICAxNzIsIDUsIDIxMSwgMTY1LCA1NSwgMjI1LCAxNzIsIDUsIDI1MSwgNDEsIDU1LCAyMjUsIDE3MiwgNSwgMjM1LCAxNDcsIAorICAgIDU1LCAyMjUsIDE3MiwgNSwgMjM1LCAxMTQsIDU1LCAyMjUsIDE3MiwgNSwgMjE3LCAxMDYsIDU1LCAyMjUsIDE3MiwgNSwgCisgICAgMjE1LCAxMTksIDU1LCAyMjUsIDE3MiwgNSwgMjQ4LCAyMjksIDU1LCAyMjUsIDE3MiwgNSwgMjQ4LCAxMSwgNTUsIDIyNSwgCisgICAgMTcyLCA1LCAyNDYsIDg2LCA1NSwgMjI1LCAxNzIsIDUsIDIxNiwgMjA5LCA1NSwgMjI1LCAxNzIsIDUsIDE5MSwgNTUsIAorICAgIDIyNSwgMTcyLCA1LCAyNTIsIDE5OSwgNTUsIDIyNSwgMTcyLCA1LCAyNDQsIDIwNCwgNTUsIDIyNSwgMTcyLCA1LCAxOTgsIAorICAgIDU1LCAyMjUsIDE3MiwgNSwgMjI3LCAyNDIsIDU1LCAyMjUsIDE3MiwgNSwgMTg2LCA1NSwgMjI1LCAxNzIsIDUsIDIzMCwgCisgICAgMjM1LCA1NSwgMjI1LCAxNzIsIDUsIDIzMCwgMTA3LCA1NSwgMjI1LCAxNzIsIDUsIDE5MiwgNTUsIDIyNSwgMTcyLCA1LCAKKyAgICAyMTQsIDI3LCA1NSwgMjI1LCAxNzIsIDUsIDIxMywgMTc2LCA1NSwgMjI1LCAxNzIsIDUsIDIwNSwgNTUsIDIyNSwgMTcyLCAKKyAgICA1LCAyMjIsIDE0MiwgNTUsIDIyNSwgMTcyLCA1LCAyMzMsIDE0MSwgNTUsIDIyNSwgMTcyLCA1LCAyMDYsIDU1LCAyMjUsIAorICAgIDE3MiwgNSwgMjEwLCAxMTYsIDU1LCAyMjUsIDE3MiwgNSwgMjIwLCAxMDQsIDU1LCAyMjUsIDE3MiwgNSwgMjE4LCAyMjUsIAorICAgIDU1LCAyMjUsIDE3MiwgNSwgMTYyLCA1NSwgMjI1LCAxNzIsIDUsIDI1MywgMTk0LCA1NSwgMjI1LCAxNzIsIDUsIDI1MywgCisgICAgMTkzLCA1NSwgMjI1LCAxNzIsIDUsIDI1MywgMTkyLCA1NSwgMjI1LCAxNzIsIDUsIDIxMSwgMTQyLCA1NSwgMjI1LCAxNzIsIAorICAgIDUsIDI0OCwgMjA4LCA1NSwgMjI1LCAxNzIsIDUsIDI0OCwgMjA3LCA1NSwgMjI1LCAxNzIsIDUsIDI1MiwgMTc4LCA1NSwgCisgICAgMjI1LCAxNzIsIDUsIDI1MSwgOTMsIDU1LCAyMjUsIDE3MiwgMjExLCAyMDksIDI0NywgMTgwLCA1NSwgMjI1LCAxNzIsIDU0LCAKKyAgICAxMTEsIDU1LCAyMjUsIDE3MiwgNTQsIDEwNSwgNTUsIDIyNSwgMTcyLCA1NCwgMjE2LCAyNDgsIDU1LCAyMjUsIDE3MiwgNTQsIAorICAgIDIxNSwgNzMsIDU1LCAyMjUsIDE3MiwgNTQsIDI0MCwgMjE3LCAxODEsIDYsIDEsIDIwMCwgNzQsIDE4MSwgNiwgMSwgMjAwLCAKKyAgICA3NiwgMTgxLCA2LCAxLCAyMDAsIDYxLCAxODEsIDYsIDEsIDIwMCwgMjU0LCAyMTgsIDE4MSwgNiwgMSwgMjAwLCA3OCwgCisgICAgMTgxLCA2LCAxLCAyMDAsIDIyNiwgMTg3LCAxODEsIDYsIDEsIDIxOSwgMjUzLCA3NCwgMTgxLCA2LCAxLCAyMTksIDI1MywgCisgICAgNzYsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDYxLCAxODEsIDYsIDEsIDIxOSwgMjUzLCAyNTQsIDIxOCwgMTgxLCA2LCAxLCAKKyAgICAyMTksIDI1MywgNzgsIDE4MSwgNiwgMSwgMjE5LCAyNTMsIDIyNiwgMTg3LCAxODEsIDYsIDEsIDI1MywgMTc1LCAxODEsIDYsIAorICAgIDEsIDIyNiwgMTIwLCAxODEsIDYsIDEsIDIxMSwgMTk1LCAxODEsIDYsIDEsIDIxMSwgNDQsIDE4MSwgNiwgMSwgMjQyLCA2NywgCisgICAgMTgxLCA2LCAxLCAyMjUsIDIxNCwgMTgxLCA2LCAxLCAyNTIsIDc0LCAxODEsIDYsIDEsIDIxNywgMTIsIDE4MSwgNiwgMSwgCisgICAgMjQ4LCA4NSwgMTgxLCA2LCAxLCAyNTAsIDEzNiwgMTgxLCA2LCAxLCAyMzUsIDEzMCwgMTgxLCA2LCAxLCAyMzQsIDE5NSwgCisgICAgMTgxLCA2LCAxLCAyNDMsIDkwLCAxODEsIDYsIDEsIDI0NSwgMjEwLCAxODEsIDYsIDEsIDIxMywgMjUwLCAxODEsIDYsIDEsIAorICAgIDI0NSwgNjcsIDE4MSwgNiwgMSwgMjE2LCAxOTUsIDE4MSwgNiwgMSwgMjQ1LCA5MCwgMTgxLCA2LCAxLCAyMTAsIDkyLCAKKyAgICAxODEsIDYsIDEsIDI0NSwgODMsIDE4MSwgNiwgMSwgMjEwLCA3MywgMTgxLCA2LCAxLCAyNDUsIDEwMCwgMTgxLCA2LCAxLCAKKyAgICAyNDUsIDE4MiwgMTgxLCA2LCAxLCAyNDUsIDE2NywgMTgxLCA2LCAxLCAyNDUsIDE1OCwgMTgxLCA2LCAxLCAyNDUsIDE0NiwgCisgICAgMTgxLCA2LCAxLCAyMjYsIDIyMywgMTgxLCA2LCAxLCAyNDUsIDQ2LCAxODEsIDQsIDEsIDIwMCwgNzQsIDE4MSwgNCwgMSwgCisgICAgMjAwLCA3NiwgMTgxLCA0LCAxLCAyMDAsIDYxLCAxODEsIDQsIDEsIDIwMCwgMjU0LCAyMTgsIDE4MSwgNCwgMSwgMjAwLCAKKyAgICA3OCwgMTgxLCA0LCAxLCAyMDAsIDIyNiwgMTg3LCAxODEsIDQsIDEsIDIxOSwgMjUzLCA3NCwgMTgxLCA0LCAxLCAyMTksIAorICAgIDI1MywgNzYsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDYxLCAxODEsIDQsIDEsIDIxOSwgMjUzLCAyNTQsIDIxOCwgMTgxLCA0LCAKKyAgICAxLCAyMTksIDI1MywgNzgsIDE4MSwgNCwgMSwgMjE5LCAyNTMsIDIyNiwgMTg3LCAxODEsIDQsIDEsIDI1MywgMTc1LCAxODEsIAorICAgIDQsIDEsIDIyNiwgMTIwLCAxODEsIDQsIDEsIDIxMSwgMTk1LCAxODEsIDQsIDEsIDIxMSwgNDQsIDE4MSwgNCwgMSwgMjQyLCAKKyAgICA2NywgMTgxLCA0LCAxLCAyMjUsIDIxNCwgMTgxLCA0LCAxLCAyNTIsIDc0LCAxODEsIDQsIDEsIDIxNywgMTIsIDE4MSwgNCwgCisgICAgMSwgMjQ4LCA4NSwgMTgxLCA0LCAxLCAyNTAsIDEzNiwgMTgxLCA0LCAxLCAyMzUsIDEzMCwgMTgxLCA0LCAxLCAyMzQsIAorICAgIDE5NSwgMTgxLCA0LCAxLCAyNDMsIDkwLCAxODEsIDQsIDEsIDI0NSwgMjEwLCAxODEsIDQsIDEsIDIxMywgMjUwLCAxODEsIAorICAgIDQsIDEsIDI0NSwgNjcsIDE4MSwgNCwgMSwgMjE2LCAxOTUsIDE4MSwgNCwgMSwgMjQ1LCA5MCwgMTgxLCA0LCAxLCAyMTAsIAorICAgIDkyLCAxODEsIDQsIDEsIDI0NSwgODMsIDE4MSwgNCwgMSwgMjEwLCA3MywgMTgxLCA0LCAxLCAyNDUsIDEwMCwgMTgxLCA0LCAKKyAgICAxLCAyNDUsIDE4MiwgMTgxLCA0LCAxLCAyNDUsIDE2NywgMTgxLCA0LCAxLCAyNDUsIDE1OCwgMTgxLCA0LCAxLCAyNDUsIAorICAgIDE0NiwgMTgxLCA0LCAxLCAyMjYsIDIyMywgMTgxLCA0LCAxLCAyNDUsIDQ2LCAyMjAsIDcxLCAxLCAyMjUsIDIxMiwgMjIwLCAKKyAgICA3MSwgMSwgMjE2LCA2LCAyMjAsIDcxLCAxLCAyMzQsIDk3LCAyMjAsIDcxLCAxLCAyNDQsIDE1NSwgMjIwLCA3MSwgMSwgCisgICAgMjE2LCAxNzMsIDIyMCwgNzEsIDEsIDIxOSwgNjAsIDIyMCwgNzEsIDEsIDIxOCwgMTUsIDIyMCwgNzEsIDEsIDI1MCwgNjksIAorICAgIDIyMCwgNzEsIDEsIDIxMSwgNDYsIDIyMCwgNzEsIDEsIDI0MCwgMjE2LCAyMjAsIDcxLCAxLCAyNTIsIDEzLCAyMjAsIDcxLCAKKyAgICAxLCAyNDgsIDk3LCAyMjAsIDcxLCAxLCAyNDMsIDEyOCwgMjIwLCA3MSwgMSwgMjEzLCAxMjMsIDIyMCwgNzEsIDEsIDIxNiwgCisgICAgMTc3LCAyMjAsIDcxLCAxLCAyMTAsIDIxLCAyMjAsIDcxLCAxLCAyMzEsIDk0LCAyMjAsIDcxLCAxLCAyMzUsIDU1LCAyMjAsIAorICAgIDcxLCAxLCAyMTEsIDIyNSwgMjIwLCA3MSwgMSwgMjQyLCA1NSwgMjIwLCA3MSwgMSwgMjMyLCAxNDgsIDIyMCwgNzEsIDEsIAorICAgIDIzMCwgMTk0LCAyMjAsIDcxLCAxLCAyMzYsIDQ3LCAyMjAsIDcxLCAxLCAyNDUsIDIwOSwgMjIwLCA3MSwgMSwgMjUzLCAKKyAgICAyMzksIDIyMCwgNzEsIDEsIDI1NSwgMCwgMjIwLCA3MSwgMSwgMjI2LCAyMDAsIDIyMCwgNzEsIDEsIDIxMSwgMjEyLCAyMjAsIAorICAgIDcxLCAxLCAyMjYsIDEzNCwgMjIwLCA3MSwgMSwgMjU0LCAyMTgsIDIyMCwgNzEsIDEsIDIyMiwgMjEwLCAyMjAsIDcxLCAxLCAKKyAgICAyMjcsIDE5OCwgMjIwLCA3MSwgMSwgMjQ1LCAyMjUsIDIyMCwgNzEsIDEsIDI1NCwgMjIzLCAyMjAsIDcxLCAxLCAyNDAsIAorICAgIDExOCwgMjIwLCA3MSwgMSwgMjE0LCAxNjMsIDIyMCwgNzEsIDEsIDIyNywgMiwgMjIwLCA3MSwgMSwgMjI2LCAxODAsIDIyMCwgCisgICAgNzEsIDEsIDIyNiwgMjIyLCAyMjAsIDcxLCAxLCAyNTMsIDE3OCwgMjIwLCA3MSwgMSwgMjU0LCAyNywgMjIwLCA3MSwgMSwgCisgICAgMjI2LCAxNjIsIDIyMCwgNzEsIDEsIDI1NCwgMjAxLCAyMjAsIDcxLCAxLCAyNDUsIDk0LCAyMjAsIDcxLCAxLCAyNTQsIDUsIAorICAgIDIyMCwgNzEsIDEsIDI0NSwgMjM1LCAyMjAsIDcxLCAxLCAyNDAsIDEyNSwgMjIwLCA3MSwgMSwgMjExLCAxMywgMjI2LCAKKyAgICAxNDUsIDEsIDI1NCwgMTc5LCAyMjYsIDE0NSwgMSwgMjUyLCAxOTksIDIyNiwgMTQ1LCAxLCAyMTcsIDEwNiwgMjI2LCAxNDUsIAorICAgIDEsIDIzNSwgMTQ3LCAyMjYsIDE0NSwgMSwgMjExLCAxNjUsIDIyNiwgMTQ1LCAxLCAyMzQsIDEzOCwgMjI2LCAxNDUsIDEsIAorICAgIDI0OCwgODQsIDIyNiwgMTQ1LCAxLCAyMDUsIDIyNiwgMTQ1LCAxLCAyMDYsIDIyNiwgMTQ1LCAxLCAyMjAsIDI4LCAyMjYsIAorICAgIDE0NSwgMSwgMjQ4LCAzMywgMjI2LCAxNDUsIDEsIDI1MCwgMjIzLCAyMjYsIDE0NSwgMSwgMjQzLCAxNDIsIDIyNiwgMTQ1LCAKKyAgICAxLCAyNDQsIDIwNCwgMjI2LCAxNDUsIDEsIDIyNCwgODksIDIyNiwgMTQ1LCAxLCAyMzUsIDE1LCAyMjYsIDE0NSwgMSwgCisgICAgMjMzLCAxMzYsIDIyNiwgMTQ1LCAxLCAyMzAsIDIwNSwgMjI2LCAxNDUsIDEsIDIyNywgMTgyLCAyMjYsIDE0NSwgMSwgMjEyLCAKKyAgICAzMCwgMjI2LCAxNDUsIDEsIDE2MiwgMjI2LCAxNDUsIDEsIDE5MiwgMjI2LCAxNDUsIDEsIDYxLCAyMjYsIDE0NSwgMSwgNzYsIAorICAgIDIyNiwgMTQ1LCAxLCA3NCwgMjI2LCAxNDUsIDEsIDc4LCAyMjYsIDE0NSwgMSwgNjksIDIyNiwgMTQ1LCAxLCAyNTUsIDgyLCAKKyAgICAyMjYsIDE0NSwgMSwgMjQ1LCAyMTcsIDIyNiwgMTQ1LCAxLCAyMjYsIDE4NywgMjI2LCAxNDUsIDIxLCAyMTAsIDg2LCAyMjYsIAorICAgIDE0NSwgMjEsIDExMSwgMjI2LCAxNDUsIDIxLCAxMDUsIDIyNiwgMTQ1LCAyMSwgMTU4LCAyMjYsIDE0NSwgMjEsIDE2MSwgCisgICAgMjI2LCAxNDUsIDIxLCAxOTAsIDIyNiwgMTQ1LCAyMSwgMTk1LCAyMjYsIDE0NSwgMjEsIDE5OSwgMjI2LCAxNDUsIDIxLCAKKyAgICAxOTYsIDIyNiwgMTQ1LCAyMSwgMjAxLCAyNDksIDc1LCAzLCA2MSwgMjQ5LCA3NSwgMywgNzYsIDI0OSwgNzUsIDMsIDc0LCAKKyAgICAyNDksIDc1LCAzLCA3OCwgMjQ5LCA3NSwgMywgNjksIDI0OSwgNzUsIDMsIDIzNSwgMTQ3LCAyNDksIDc1LCAzLCAyMzUsIAorICAgIDc0LCAyNDksIDc1LCAzLCAxNzYsIDI0OSwgNzUsIDMsIDIzNCwgMTg4LCAyNDksIDc1LCAzLCAyMzQsIDk4LCAyNDksIDc1LCAKKyAgICAzLCAyMzQsIDM0LCAyNDksIDc1LCAzLCAyMzMsIDIyMywgMjQ5LCA3NSwgMywgMjMzLCAxNDEsIDI0OSwgNzUsIDMsIDIzMywgCisgICAgNjQsIDI0OSwgNzUsIDMsIDIzMiwgMjQ3LCAyNDksIDc1LCAzLCAyMzIsIDE2MiwgMjQ5LCA3NSwgMywgMjMyLCAxMDMsIAorICAgIDI0OSwgNzUsIDMsIDE4NiwgMjQ5LCA3NSwgMywgMjMxLCA5NiwgMjQ5LCA3NSwgMywgMjMwLCAyMzUsIDI0OSwgNzUsIDMsIAorICAgIDIzMCwgMTY2LCAyNDksIDc1LCAzLCAyMzAsIDEwNywgMjQ5LCA3NSwgMywgMTk4LCAyNDksIDc1LCAzLCAyMjksIDExMiwgCisgICAgMjQ5LCA3NSwgMywgMjI4LCAyMzgsIDI0OSwgNzUsIDMsIDIyOCwgNzksIDI0OSwgNzUsIDMsIDIyNywgMjQyLCAyNDksIDc1LCAKKyAgICAzLCAxOTEsIDI0OSwgNzUsIDMsIDIyNSwgMjI0LCAyNDksIDc1LCAzLCAyMjUsIDExMSwgMjQ5LCA3NSwgMywgMjI1LCAxOSwgCisgICAgMjQ5LCA3NSwgMywgMjI0LCAxNTMsIDI0OSwgNzUsIDMsIDIwNSwgMjQ5LCA3NSwgMywgMjIzLCAxMzEsIDI0OSwgNzUsIDMsIAorICAgIDIyMywgMzgsIDI0OSwgNzUsIDMsIDIyMiwgMjEzLCAyNDksIDc1LCAzLCAyMjIsIDE0MiwgMjQ5LCA3NSwgMywgMjA2LCAKKyAgICAyNDksIDc1LCAzLCAyMjEsIDE4MywgMjQ5LCA3NSwgMywgMjE5LCAxOTMsIDI0OSwgNzUsIDMsIDIxOSwgNjAsIDI0OSwgNzUsIAorICAgIDMsIDIxOCwgODQsIDI0OSwgNzUsIDMsIDIxNywgMTA2LCAyNDksIDc1LCAzLCAyMTcsIDIzLCAyNDksIDc1LCAzLCAyMTYsIAorICAgIDExOCwgMjQ5LCA3NSwgMywgMTEyLCAyNDksIDc1LCAzLCAyMTUsIDExOSwgMjQ5LCA3NSwgMywgMjEyLCA2NSwgMjQ5LCA3NSwgCisgICAgMywgMjEyLCAyMiwgMjQ5LCA3NSwgMywgMjExLCAyNTAsIDI0OSwgNzUsIDMsIDIxMSwgMjI3LCAyNDksIDc1LCAzLCAyMTEsIAorICAgIDE2NSwgMjQ5LCA3NSwgMywgMjExLCAxNjIsIDI0OSwgNzUsIDMsIDIxMCwgMTE2LCAyNDksIDc1LCAzLCAyMTAsIDIzLCAKKyAgICAyMzYsIDgsIDI1NCwgMzUsIDEsIDI1NCwgMTc3LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDI1MiwgMzMsIDIzNiwgOCwgMjU0LCAKKyAgICAzNSwgMSwgMjQyLCAyMDgsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjQ4LCAxOTYsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjQxLCAKKyAgICAyNDUsIDIzNiwgOCwgMjU0LCAzNSwgMSwgMjEyLCAzMCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMTAsIDk3LCAyMzYsIDgsIAorICAgIDI1NCwgMzUsIDEsIDI0MSwgMjAyLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxNiwgMjI3LCAyMzYsIDgsIDI1NCwgMzUsIDEsIAorICAgIDIxMCwgMjMyLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIzNCwgMjMxLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIzMywgOTksIDIzNiwgCisgICAgOCwgMjU0LCAzNSwgMSwgMjMxLCA3MCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjcsIDE5OCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAKKyAgICAyMjEsIDI1MSwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyNTMsIDE3MCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjUsIDIyNCwgCisgICAgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjIsIDI2LCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIyNCwgMzcsIDIzNiwgOCwgMjU0LCAKKyAgICAzNSwgMSwgMjIzLCA3MCwgMjM2LCA4LCAyNTQsIDM1LCAxLCAyMjAsIDIyLCAyMzYsIDgsIDI1NCwgMzUsIDEsIDIxNywgMzcsIAorICAgIDIzNiwgOCwgMjU0LCAzNSwgMjIxLCAxNzUsIDUwLCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAxMTEsIDIzNiwgOCwgMjU0LCAzNSwgCisgICAgNTQsIDEwNSwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTU4LCAyMzYsIDgsIDI1NCwgMzUsIDU0LCAyMTYsIDI0OCwgMjM2LCA4LCAKKyAgICAyNTQsIDM1LCA1NCwgMjE1LCA3MywgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMTIzLCAyNDAsIDIxNywgMjM2LCA4LCAyNTQsIAorICAgIDM1LCA1NCwgMTIzLCAyMTYsIDE0OCwgMjM2LCA4LCAyNTQsIDM1LCA1NCwgMjE2LCAyNDksIDIxNiwgMTQ4LCAyMjUsIDEyMiwgCisgICAgMSwgMjU0LCAxNzQsIDIyNSwgMTIyLCAxLCAyNTIsIDM2LCAyMjUsIDEyMiwgMSwgMjQzLCAxMTYsIDIyNSwgMTIyLCAxLCAKKyAgICAyNDgsIDY0LCAyMjUsIDEyMiwgMSwgMjQxLCAyNDUsIDIyNSwgMTIyLCAxLCAyMTIsIDM3LCAyMjUsIDEyMiwgMSwgMjEwLCAKKyAgICAxMTAsIDIyNSwgMTIyLCAxLCAyNDEsIDIwNCwgMjI1LCAxMjIsIDEsIDIxNiwgMjMxLCAyMjUsIDEyMiwgMSwgMjEwLCAyMzMsIAorICAgIDIyNSwgMTIyLCAxLCAyMzUsIDAsIDIyNSwgMTIyLCAxLCAyMzMsIDEwNSwgMjI1LCAxMjIsIDEsIDIzMSwgNzAsIDIyNSwgCisgICAgMTIyLCAxLCAyMjcsIDE5OCwgMjI1LCAxMjIsIDEsIDIyMCwgMTQ2LCAyMjUsIDEyMiwgMSwgMjU0LCAyMDUsIDIyNSwgMTIyLCAKKyAgICAxLCAyMjUsIDIyNCwgMjI1LCAxMjIsIDEsIDIyMiwgMjcsIDIyNSwgMTIyLCAxLCAyMjQsIDQyLCAyMjUsIDEyMiwgMSwgCisgICAgMjIyLCAxOTEsIDIyNSwgMTIyLCAxLCAyMjAsIDIyLCAyMjUsIDEyMiwgMSwgMjE3LCA0MiwgMjI1LCAxMjIsIDU0LCAxMTEsIAorICAgIDIyNSwgMTIyLCA1NCwgMjE2LCAyNDgsIDIyNSwgMTIyLCA1NCwgMjE1LCA3MywgMjI1LCAxMjIsIDU0LCAxMjMsIDI0MCwgCisgICAgMjE3LCAyMjUsIDEyMiwgNTQsIDEwNSwgMjI1LCAxMjIsIDU0LCAxNTgsIDIyNSwgMTIyLCAyMTEsIDIwOSwgMjIwLCAxMzksIAorICAgIDIzMiwgNjQsIDEsIDYxLCAyMzIsIDY0LCAxLCAyNTMsIDE2NiwgMjMyLCA2NCwgMSwgMjQzLCAyMDksIDIzMiwgNjQsIDEsIAorICAgIDI0OSwgNjgsIDIzMiwgNjQsIDEsIDc2LCAyMzIsIDY0LCAxLCAyMTQsIDEwNSwgMjMyLCA2NCwgMSwgNzQsIDIzMiwgNjQsIAorICAgIDEsIDIxMSwgMTE3LCAyMzIsIDY0LCAxLCAyMzUsIDI5LCAyMzIsIDY0LCAxLCAxNTYsIDIzMiwgNjQsIDEsIDE5NCwgMjMyLCAKKyAgICA2NCwgMSwgMjMwLCAzMCwgMjMyLCA2NCwgMSwgNzgsIDIzMiwgNjQsIDEsIDE1MywgMjMyLCA2NCwgMSwgMjE4LCAyMjgsIAorICAgIDIzMiwgNjQsIDEsIDIxNywgMTUzLCAyMzIsIDY0LCAxLCA2OSwgMjMyLCA2NCwgMSwgMjQ1LCAxNCwgMjMyLCA2NCwgMSwgCisgICAgMjI0LCA5OSwgMjMyLCA2NCwgMSwgMjIyLCA5MywgMjMyLCA2NCwgMSwgMjE1LCAxNjAsIDIzMiwgNjQsIDEsIDI1NCwgMTMxLCAKKyAgICAyMzIsIDY0LCAxLCAyNDUsIDE1OCwgMjMyLCA2NCwgMSwgMjMyLCA2NywgMjMyLCA2NCwgMSwgMjI4LCAxMTYsIDIzMiwgNjQsIAorICAgIDEsIDI1MSwgNzQsIDIzMiwgNjQsIDIxNSwgMjIzLCA3OSwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDYxLCAyMzEsIDUzLCAKKyAgICAyNDEsIDE4MSwgMSwgNzYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCA3NCwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDc4LCAyMzEsIAorICAgIDUzLCAyNDEsIDE4MSwgMSwgMTkyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjEyLCA2NSwgMjMxLCA1MywgMjQxLCAxODEsIAorICAgIDEsIDI1MiwgMTk5LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjUyLCAxOTgsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxOTEsIAorICAgIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxODYsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxOTgsIDIzMSwgNTMsIDI0MSwgMTgxLCAKKyAgICAxLCAyMjksIDIzMywgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyOSwgMTEyLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjI5LCAKKyAgICAxMTEsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMDUsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjMsIDE5MCwgMjMxLCA1MywgCisgICAgMjQxLCAxODEsIDEsIDIzMywgMTQxLCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjM0LCAxMzgsIDIzMSwgNTMsIDI0MSwgMTgxLCAKKyAgICAxLCAyNDEsIDE5NiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIwNiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIyMiwgMzUsIAorICAgIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMjEsIDE4MywgMjMxLCA1MywgMjQxLCAxODEsIDEsIDE3NiwgMjMxLCA1MywgMjQxLCAKKyAgICAxODEsIDEsIDIyNCwgOTEsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyMTcsIDEwNiwgMjMxLCA1MywgMjQxLCAxODEsIDEsIAorICAgIDIxNywgMTA1LCAyMzEsIDUzLCAyNDEsIDE4MSwgMSwgMjE3LCAyMywgMjMxLCA1MywgMjQxLCAxODEsIDEsIDIxNywgMjIsIAorICAgIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAxMTIsIDIzMSwgNTMsIDI0MSwgMTgxLCAxLCAyNDgsIDIyOSwgMjMxLCA1MywgMjQxLCAKKyAgICAxODEsIDE2LCAyMTMsIDE3MCwgMjMxLCA1MywgMjQxLCAxODEsIDE2LCAyMTMsIDE2OSwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIAorICAgIDYxLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgNzYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCA3NCwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDc4LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTkyLCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjEyLCA2NSwgCisgICAgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDI1MiwgMTk5LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTkxLCAyMzEsIDUzLCAyNDksIAorICAgIDEwMiwgMSwgMTg2LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMTk4LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjI5LCAxMTIsIAorICAgIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMDUsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMzMsIDE0MSwgMjMxLCA1MywgMjQ5LCAKKyAgICAxMDIsIDEsIDIzNCwgMTM4LCAyMzEsIDUzLCAyNDksIDEwMiwgMSwgMjQxLCAxOTYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKKyAgICAyMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNTQsIDMxLCAyMDYsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyMjEsIDE4MywgCisgICAgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDE3NiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIyNCwgOTEsIDIzMSwgNTMsIDI0OSwgCisgICAgMTAyLCAxLCAyMTcsIDEwNiwgMjMxLCA1MywgMjQ5LCAxMDIsIDEsIDIxNywgMjMsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAKKyAgICAxMTIsIDIzMSwgNTMsIDI0OSwgMTAyLCAxLCAyNDgsIDIyOSwgMjMxLCA1MywgMjQ5LCAxMDIsIDIzMiwgMTUxLCAyMjIsIAorICAgIDIxOSwgMjMxLCA1MywgMjQ5LCAxMDIsIDIzMiwgMTUxLCAyMzYsIDEzLCAyMzQsIDEyNiwgMSwgNjEsIDIzNCwgMTI2LCAyNSwgCisgICAgNSwgNzQsIDIzNCwgMTI2LCAyNSwgNSwgNjksIDIzNCwgMTI2LCAyNSwgNSwgMTQ5LCAxNTMsIDIzNCwgMTI2LCAyNSwgNSwgCisgICAgNzYsIDIzNCwgMTI2LCAyNSwgNSwgNzgsIDIzNCwgMTI2LCAyNSwgMjMzLCAyOSwgNzksIDIzNCwgMTI2LCA1LCA1MiwgMjIyLCAKKyAgICAyMzcsIDUxLCAyMzQsIDEyNiwgNSwgMjU0LCA4MywgMjM0LCAxMjYsIDUsIDIxMywgMTQ3LCAyMzQsIDEyNiwgMSwgMTc2LCAKKyAgICAyMzQsIDEyNiwgMSwgMjM0LCAxMzgsIDIzNCwgMTI2LCAxLCAyNDMsIDE0MiwgMjM0LCAxMjYsIDEsIDI0MywgMCwgMjM0LCAKKyAgICAxMjYsIDEsIDI1MSwgNDEsIDIzNCwgMTI2LCAxLCAyNTAsIDE2NSwgMjM0LCAxMjYsIDEsIDIzNSwgMTQ3LCAyMzQsIDEyNiwgCisgICAgMSwgMjI3LCAxNjksIDIzNCwgMTI2LCAxLCAyMTUsIDE1NywgMjM0LCAxMjYsIDEsIDIxNSwgMTQ1LCAyMzQsIDEyNiwgMSwgCisgICAgMjQ4LCAxNDMsIDIzNCwgMTI2LCAxLCAyNDgsIDEyNywgMjM0LCAxMjYsIDEsIDIyOCwgMTE1LCAyMzQsIDEyNiwgMSwgMjE3LCAKKyAgICAxMDYsIDIzNCwgMTI2LCAxLCAyMTYsIDIwOSwgMjM0LCAxMjYsIDEsIDI0OCwgMjI5LCAyMzQsIDEyNiwgMSwgMjQ4LCAzMywgCisgICAgMjM0LCAxMjYsIDEsIDE5OCwgMjM0LCAxMjYsIDEsIDE5MSwgMjM0LCAxMjYsIDEsIDIyNSwgMTUwLCAyMzQsIDEyNiwgMSwgCisgICAgMjUyLCAxOTksIDIzNCwgMTI2LCAxLCAyNTIsIDI2LCAyMzQsIDEyNiwgMSwgMTg2LCAyMzQsIDEyNiwgMSwgMTkyLCAyMzQsIAorICAgIDEyNiwgMSwgMjA1LCAyMzQsIDEyNiwgMSwgMjMzLCAxNDEsIDIzNCwgMTI2LCAxLCAyMTQsIDI3LCAyMzQsIDEyNiwgMSwgCisgICAgMjIwLCAxMDQsIDIzNCwgMTI2LCAxLCAyMTgsIDIyNSwgMjM0LCAxMjYsIDEsIDIwNiwgMjM0LCAxMjYsIDEsIDIxMCwgMTE2LCAKKyAgICAyMzQsIDEyNiwgMSwgMTYyLCAyMzQsIDEyNiwgMSwgMjM0LCA1MiwgMjM0LCAxMjYsIDEsIDIxNSwgMTI1LCAyMzQsIDEyNiwgCisgICAgNSwgMjUyLCAxNDksIDQ4LCAyMzQsIDEyNiwgNSwgMjUwLCAyMjksIDIzNCwgMTI2LCA1LCA1OSwgNTEsIDIzNCwgMTI2LCAKKyAgICAyMTMsIDE1MiwgMjM0LCAxMjYsIDIxLCAxMTEsIDIzNCwgMTI2LCAyMSwgMTA1LCAyMzQsIDEyNiwgMjEsIDE1OCwgMjM0LCAKKyAgICAxMjYsIDIxLCAxNjEsIDIzNCwgMTI2LCA1NCwgMjE2LCAyNDgsIDIzNCwgMTI2LCA1NCwgMjE1LCA3MywgMjM0LCAxMjYsIAorICAgIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzQsIDEyNiwgNTQsIDEyMywgMjE2LCAxNDgsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjQ3LCAKKyAgICAxMjgsIDIzNCwgMTI2LCAyMjQsIDE0NCwgNCwgMjUwLCA0MywgMjM0LCAxMjYsIDIyNCwgMTQ0LCAyNTAsIDQzLCAyMzQsIAorICAgIDEyNiwgMjI0LCAxNDQsIDI0OSwgMTQ1LCAxMzAsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjMxLCAxODUsIDIzNCwgMTI2LCAKKyAgICAyMjQsIDE0NCwgMjMyLCAxMjEsIDIzNCwgMTI2LCAyMjQsIDE0NCwgMjQ4LCAxODYsIDIzNCwgMTI2LCAyMjQsIDE0NCwgNTIsIAorICAgIDI0OCwgMTg2LCAyMzQsIDEyNiwgMjI0LCAxNDQsIDIzMiwgMjEzLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQxLCAKKyAgICAyNDUsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMzMsIDk5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQxLCAyMDIsIAorICAgIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMzEsIDcwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjI0LCAzNywgNTUsIAorICAgIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxMiwgMzAsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjAsIDIyLCA1NSwgMjE5LCAKKyAgICAzMCwgMjU0LCA0NiwgMSwgMjIzLCA3MCwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI1MiwgMzMsIDU1LCAyMTksIDMwLCAKKyAgICAyNTQsIDQ2LCAxLCAyMTcsIDM3LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjIxLCAyMjgsIDU1LCAyMTksIDMwLCAyNTQsIAorICAgIDQ2LCAxLCAyMzQsIDIzMSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIyNywgMTk4LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgCisgICAgMSwgMjM0LCAxMjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMjIsIDI2LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgCisgICAgMjIxLCAyNTEsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDQsIDE2MiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIAorICAgIDI1NCwgMTc5LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjUzLCAxNjksIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAKKyAgICAyNDgsIDMwLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQyLCAyMDgsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyNDgsIAorICAgIDE5NiwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDI0MiwgMjQ1LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAKKyAgICAyMjcsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTAsIDk2LCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjQ4LCAyNywgCisgICAgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDEsIDIxMCwgMjMyLCA1NSwgMjE5LCAzMCwgMjU0LCA0NiwgMSwgMjE2LCAxOTgsIDU1LCAKKyAgICAyMTksIDMwLCAyNTQsIDQ2LCAxLCAyMTYsIDE3OSwgNTUsIDIxOSwgMzAsIDI1NCwgNDYsIDU0LCAxMTEsIDU1LCAyMTksIAorICAgIDMwLCAyNTQsIDQ2LCA1NCwgMjQ0LCAxMjIsIDU1LCAyMTksIDMwLCAyNTQsIDQ2LCAxMzIsIDIzNSwgMjQ1LCAyNTMsIDE4MCwgCisgICAgMSwgNjEsIDI1MywgMTgwLCAxLCAyNTUsIDgyLCAyNTMsIDE4MCwgMSwgMjU0LCA4MSwgMjUzLCAxODAsIDEsIDI1NSwgNDEsIAorICAgIDI1MywgMTgwLCAxLCAyNTQsIDEzMSwgMjUzLCAxODAsIDEsIDI1NSwgNDIsIDI1MywgMTgwLCAxLCAyNTQsIDI1MiwgMjUzLCAKKyAgICAxODAsIDEsIDI1NCwgMjQ4LCAyNTMsIDE4MCwgMSwgNzYsIDI1MywgMTgwLCAxLCAyNDUsIDIxNywgMjUzLCAxODAsIDEsIAorICAgIDc4LCAyNTMsIDE4MCwgMSwgMjI2LCAxODcsIDI1MywgMTgwLCAxLCA3NCwgMjUzLCAxODAsIDEsIDIzNiwgNDAsIDI1MywgCisgICAgMTgwLCAxLCA2OSwgMjUzLCAxODAsIDEsIDIxNCwgMTE4LCAyNTMsIDE4MCwgMSwgMjM0LCAxODgsIDI1MywgMTgwLCAxLCAKKyAgICAyMTEsIDE2MiwgMjUzLCAxODAsIDEsIDIxMSwgMTI4LCAyNTMsIDE4MCwgMSwgMjExLCAxMzcsIDI1MywgMTgwLCAxLCAyNDMsIAorICAgIDY5LCAyNTMsIDE4MCwgMSwgMjQzLCAzMSwgMjUzLCAxODAsIDEsIDI0MiwgMjQzLCAyNTMsIDE4MCwgMSwgMjUwLCAxOTgsIAorICAgIDI1MywgMTgwLCAxLCAyMzUsIDEzMiwgMjUzLCAxODAsIDEsIDIxNywgMjMsIDI1MywgMTgwLCAxLCAyMTYsIDE5NiwgMjUzLCAKKyAgICAxODAsIDEsIDI0OCwgOTgsIDI1MywgMTgwLCAxLCAyNDgsIDI1LCAyNTMsIDE4MCwgMSwgMjE1LCAxNTIsIDI1MywgMTgwLCAKKyAgICAxLCAyMjUsIDIyNCwgMjUzLCAxODAsIDEsIDI0NCwgMTYyLCAyNTMsIDE4MCwgMSwgMjUyLCA4MywgMjUzLCAxODAsIDEsIAorICAgIDI1MiwgMjIsIDI1MywgMTgwLCAxLCAyMjksIDY5LCAyNTMsIDE4MCwgMSwgMjI4LCAyNDQsIDI1MywgMTgwLCAxLCAyMjgsIAorICAgIDI0NSwgMjUzLCAxODAsIDEsIDIyOSwgMTEyLCAyNTMsIDE4MCwgMSwgMjI3LCAxNjAsIDI1MywgMTgwLCAxLCAyMjgsIDExMCwgCisgICAgMjUzLCAxODAsIDEsIDIzMSwgOTYsIDI1MywgMTgwLCAxLCAyNDEsIDEyMywgMjUzLCAxODAsIDEsIDIxMCwgMTY2LCAyNTMsIAorICAgIDE4MCwgMSwgMjExLCA0NywgMjUzLCAxODAsIDEsIDIxMywgMjU1LCAyNTMsIDE4MCwgMSwgMjIzLCAxMzEsIDI1MywgMTgwLCAKKyAgICAxLCAyMzMsIDY0LCAyNTMsIDE4MCwgMSwgMjIxLCAxODMsIDI1MywgMTgwLCAxLCAyMTAsIDk0LCAyNTMsIDE4MCwgMSwgCisgICAgMjIwLCA2NSwgMjUzLCAxODAsIDEsIDIxMCwgNzQsIDI1MywgMTgwLCAxLCAyMTksIDIwMCwgMjUzLCAxODAsIDEsIDIxOCwgCisgICAgMTk1LCAyNTMsIDE4MCwgMSwgMjQxLCAyNDUsIDI1MywgMTgwLCAyNTUsIDMwLCA3OSwgMjE2LCA4MCwgMTEzLCAxNzAsIAorICAgIDExNSwgMTIzLCA1OSwgMjI0LCAxNDMsIDQsIDExMywgMTcwLCAxMTUsIDEyMywgNTksIDIyNCwgMTQzLCAyMzMsIDkxLCAKKyAgICAxMTMsIDE3MCwgMTE1LCAxMjMsIDU5LCAyMjQsIDE0MywgMjMzLCA5MSwgMTIzLCA1OSwgMTE1LCAxMTMsIDE3MCwgMjI0LCAKKyAgICAxNDMsIDIzMywgOTEsIDExMywgMjIyLCAyMzUsIDExNSwgMTIzLCAyMjIsIDIzNywgMjI0LCAxNDMsIDIzMywgOTEsIDEyMywgCisgICAgMjIyLCAyMzcsIDExNSwgMTEzLCAyMjIsIDIzNSwgMjI0LCAxNDMsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI1NCwgMTc3LCAKKyAgICAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTIsIDMzLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDIsIDIwOCwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgMSwgMjQ4LCAxOTYsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDI0MSwgMjQ1LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAKKyAgICAyMTIsIDMwLCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyMTAsIDk3LCAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNDEsIDIwMiwgCisgICAgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjE2LCAyMjcsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxMCwgMjMyLCAyMzUsIDIyNSwgCisgICAgMjI2LCAyLCAxLCAyMzQsIDIzMSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjMzLCA5OSwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgCisgICAgMjMxLCA3MCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjI3LCAxOTgsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyMSwgMjUxLCAKKyAgICAyMzUsIDIyNSwgMjI2LCAyLCAxLCAyNTMsIDE3MCwgMjM1LCAyMjUsIDIyNiwgMiwgMSwgMjI1LCAyMjQsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDIsIDEsIDIyMiwgMjYsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyNCwgMzcsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIAorICAgIDIyMywgNzAsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIyMCwgMjIsIDIzNSwgMjI1LCAyMjYsIDIsIDEsIDIxNywgMzcsIDIzNSwgCisgICAgMjI1LCAyMjYsIDIsIDU0LCAxMTEsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAxMDUsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAKKyAgICAxNTgsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAxNjEsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAyMTYsIDI0OCwgMjM1LCAyMjUsIAorICAgIDIyNiwgMiwgNTQsIDIxNSwgNzMsIDIzNSwgMjI1LCAyMjYsIDIsIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzUsIDIyNSwgMjI2LCAKKyAgICAyLCA1NCwgMTIzLCAyMTYsIDE0OCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI1NCwgMTc3LCAyMzUsIDIyNSwgMjI2LCA3NiwgCisgICAgMSwgMjUyLCAzMywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDI0MiwgMjA4LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQ4LCAKKyAgICAxOTYsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyNDEsIDI0NSwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxMiwgMjksIDIzNSwgCisgICAgMjI1LCAyMjYsIDc2LCAxLCAyMTAsIDk3LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjQxLCAyMDIsIDIzNSwgMjI1LCAyMjYsIAorICAgIDc2LCAxLCAyMTYsIDIyNywgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIxMCwgMjMyLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgCisgICAgMjM0LCAyMzEsIDIzNSwgMjI1LCAyMjYsIDc2LCAxLCAyMzMsIDk5LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjMxLCA2OSwgCisgICAgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyNywgMTk4LCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjIxLCAyNTEsIDIzNSwgMjI1LCAKKyAgICAyMjYsIDc2LCAxLCAyMjUsIDIyNCwgMjM1LCAyMjUsIDIyNiwgNzYsIDEsIDIyMiwgMjYsIDIzNSwgMjI1LCAyMjYsIDc2LCAKKyAgICAxLCAyMjAsIDIyLCAyMzUsIDIyNSwgMjI2LCA3NiwgMSwgMjE3LCAzNywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMTEsIAorICAgIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMTA1LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDE1OCwgMjM1LCAyMjUsIDIyNiwgCisgICAgNzYsIDU0LCAxNjEsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMjE2LCAyNDgsIDIzNSwgMjI1LCAyMjYsIDc2LCA1NCwgMjE1LCAKKyAgICA3MywgMjM1LCAyMjUsIDIyNiwgNzYsIDU0LCAxMjMsIDI0MCwgMjE3LCAyMzUsIDIyNSwgMjI2LCA3NiwgNTQsIDEyMywgCisgICAgMjE2LCAxNDgsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCA2MSwgNTUsIDIwMiwgMSwgMjExLCAzNywgNjEsIDU1LCAyMDIsIDEsIAorICAgIDIxMSwgMzcsIDI1NCwgMjUyLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgNzQsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDc0LCA1NSwgCisgICAgMjAyLCAxLCAyMTEsIDM3LCA3NiwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDc4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAKKyAgICAyMzgsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIyNiwgMjM4LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU1LCAzNCwgNTUsIAorICAgIDIwMiwgMSwgMjExLCAzNywgMjU1LCAzNCwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjUxLCA1NSwgMjAyLCAxLCAKKyAgICAyMTEsIDM3LCAyNTQsIDI1MSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjI1LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKKyAgICAyNTQsIDIyNSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NCwgMjQ2LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNTQsIDI0NiwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1NSwgOCwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjU1LCA4LCA1NSwgMjAyLCAxLCAKKyAgICAyMjYsIDE1MywgMjU0LCAyNTAsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDIwLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAKKyAgICAyNDUsIDIwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjUzLCAxNzUsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMTc1LCAKKyAgICA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMzMsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjMzLCA1NSwgMjAyLCAKKyAgICAxLCAyMjYsIDE1MywgMjU0LCAyNDQsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjQ0LCA1NSwgMjAyLCAxLCAyMjYsIAorICAgIDE1MywgMjI2LCAyMzcsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDIyNiwgMjM3LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAKKyAgICAxODcsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMTg3LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyNDMsIDU1LCAKKyAgICAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE2OSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI0NSwgMTY3LCA1NSwgMjAyLCAxLCAKKyAgICAyMjYsIDE1MywgMjU0LCAxMzEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTQsIDI0MSwgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjU0LCAyNDEsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDEzOSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCAxMzksIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNDUsIDE1NSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCAxNTUsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNDUsIDEyNiwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjQ1LCAxMjYsIDU1LCAyMDIsIDEsIDIxMSwgCisgICAgMzcsIDI1NCwgMTIzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxNDYsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgCisgICAgMjQwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAxMTYsIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyMjYsIDE3OSwgNTUsIAorICAgIDIwMiwgMSwgMjI2LCAxNTMsIDI0MCwgMTIwLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjQ1LCAyMjMsIDU1LCAyMDIsIDEsIAorICAgIDIxMSwgMzcsIDI0NSwgMjIzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCA1MywgNTUsIDIwMiwgMSwgMjExLCAzNywgCisgICAgMjU0LCA1MywgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIzNSwgMTg4LCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMzUsIDE4OCwgCisgICAgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDIyNiwgMTYzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyMjYsIDE2MywgNTUsIDIwMiwgCisgICAgMSwgMjI2LCAxNTMsIDI1NCwgNDksIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgNDksIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAKKyAgICAyNTQsIDIzOSwgNTUsIDIwMiwgMSwgMjI2LCAxNTMsIDI1MywgMjQ1LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMzcsIAorICAgIDU1LCAyMDIsIDEsIDIyNiwgMTUzLCAyNTMsIDIzOSwgNTUsIDIwMiwgMSwgMjExLCAzNywgMjUzLCAyMzksIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNDUsIDgzLCA1NSwgMjAyLCAxLCAyMTEsIDM3LCAyNDUsIDgzLCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgCisgICAgMjUzLCAyMTQsIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1MywgMjE0LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjU0LCAyMzQsIAorICAgIDU1LCAyMDIsIDEsIDIxMSwgMzcsIDI1NCwgMjM0LCA1NSwgMjAyLCAxLCAyMjYsIDE1MywgMjI2LCAxNDQsIDU1LCAyMDIsIAorICAgIDEsIDIyNiwgMTUzLCAyNTIsIDEzMywgMjIyLCAxMjksIDIxLCAxMTEsIDIyMiwgMTI5LCAyMSwgMTA1LCAyMjIsIDEyOSwgCisgICAgMjEsIDE1OCwgMjIyLCAxMjksIDIxLCAxNjEsIDIyMiwgMTI5LCAyMSwgMTkwLCAyMjIsIDEyOSwgMjEsIDE5NSwgMjIyLCAKKyAgICAxMjksIDIxLCAxOTksIDIyMiwgMTI5LCAyMSwgMTk2LCAyMjIsIDEyOSwgMjEsIDIwMSwgMjIyLCAxMjksIDU0LCAyMTYsIAorICAgIDI0OCwgMjIyLCAxMjksIDU0LCAyMTUsIDczLCAyMjIsIDEyOSwgNTQsIDIxNiwgMTYzLCAyMjIsIDEyOSwgNTQsIDI0NCwgCisgICAgMjMsIDIyMiwgMTI5LCA1NCwgMjQ0LCAxMjIsIDIyMiwgMTI5LCA1NCwgMjE5LCAxMTMsIDIyMiwgMTI5LCA1NCwgMjIwLCAKKyAgICAxMTgsIDIyMiwgMTI5LCA1NCwgMjQ1LCAxOTIsIDIyMiwgMTI5LCA1NCwgMjI4LCAyMDAsIDIyMiwgMTI5LCA1NCwgMTIzLCAKKyAgICAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAxMTMsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDEzNCwgMjQwLCAyMTcsIDIyMiwgCisgICAgMTI5LCA1NCwgMjQ0LCAxOSwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMjQ0LCA4OSwgMjQwLCAyMTcsIDIyMiwgMTI5LCAKKyAgICA1NCwgMjE5LCAxMjcsIDI0MCwgMjE3LCAyMjIsIDEyOSwgNTQsIDIyMCwgMTI0LCAyNDAsIDIxNywgMjIyLCAxMjksIDU0LCAKKyAgICAyNDUsIDIwMSwgMjQwLCAyMTcsIDIyMiwgMTI5LCA1NCwgMjI4LCAyMDUsIDI0MCwgMjE3LCAyMjIsIDEyOSwgMjQ0LCAxMCwgCisgICAgMTIzLCAyNDIsIDM0LCAyMjIsIDEyOSwgMjQ0LCAxMCwgMTIzLCAyMjQsIDI0LCAyMjIsIDEyOSwgMjQ0LCAxMCwgMTIzLCAKKyAgICAyMTYsIDE2OSwgMjIyLCAxMjksIDI0NCwgMTAsIDExMywgMjE2LCAxNjcsIDExOCwgNSwgMjUxLCA3LCAxMTgsIDUsIDI1NCwgCisgICAgODMsIDExOCwgNSwgMjEzLCAxNDcsIDExOCwgNSwgMjM1LCAxMDgsIDExOCwgNSwgMjE0LCAxNjEsIDExOCwgMSwgNjEsIAorICAgIDExOCwgMSwgMjU1LCA4MiwgMTE4LCAxLCA3NCwgMTE4LCAxLCAyMzYsIDQwLCAxMTgsIDEsIDY5LCAxMTgsIDEsIDIxNCwgCisgICAgMTE4LCAxMTgsIDEsIDE0OSwgMTUzLCAxMTgsIDEsIDE0OSwgMjIyLCAxODIsIDExOCwgMSwgMTQ5LCAxNTYsIDExOCwgMSwgCisgICAgMTQ5LCAyMzIsIDE5MSwgMTE4LCAxLCA3NiwgMTE4LCAxLCAyNTQsIDIxMCwgMTE4LCAxLCA3OCwgMTE4LCAxLCAyNTMsIAorICAgIDIwMCwgMTE4LCAxLCAxNzYsIDExOCwgMSwgMjM0LCAxMzgsIDExOCwgMSwgMjQzLCAxNDIsIDExOCwgMSwgMjQzLCAwLCAKKyAgICAxMTgsIDEsIDIyOSwgODIsIDExOCwgMSwgMjUxLCA0MSwgMTE4LCAxLCAyNTAsIDE2NSwgMTE4LCAxLCAyMzUsIDE0NywgCisgICAgMTE4LCAxLCAyMzUsIDEyMCwgMTE4LCAxLCAyMjcsIDE2OSwgMTE4LCAxLCAyMTUsIDE1NywgMTE4LCAxLCAyMTUsIDE0NSwgCisgICAgMTE4LCAxLCAyNDgsIDE0MywgMTE4LCAxLCAyNDgsIDEyNywgMTE4LCAxLCAyMjgsIDExNSwgMTE4LCAxLCAyMTcsIDEwNiwgCisgICAgMTE4LCAxLCAyMTYsIDIwOSwgMTE4LCAxLCAyNDgsIDIyOSwgMTE4LCAxLCAyNDgsIDMzLCAxMTgsIDEsIDE5OCwgMTE4LCAxLCAKKyAgICAxOTEsIDExOCwgMSwgMjI1LCAxNTAsIDExOCwgMSwgMjUyLCAxOTksIDExOCwgMSwgMjUyLCAyNiwgMTE4LCAxLCAxODYsIAorICAgIDExOCwgMSwgMTkyLCAxMTgsIDEsIDIwNSwgMTE4LCAxLCAyMzMsIDE0MSwgMTE4LCAxLCAyMTQsIDI3LCAxMTgsIDEsIDIyMCwgCisgICAgMTA0LCAxMTgsIDEsIDIxOCwgMjI1LCAxMTgsIDEsIDIwNiwgMTE4LCAxLCAxNjIsIDExOCwgMSwgMjMyLCAxOTAsIDExOCwgCisgICAgMSwgNTUsIDM2LCAyMzIsIDE4MSwgMTE4LCAxLCA1NSwgMzYsIDIyMiwgMTgxLCAxMTgsIDEsIDU1LCAzNiwgMjI4LCA5NywgCisgICAgMTE4LCAyNSwgNSwgMjU1LCA4MiwgMTE4LCAyNSwgNSwgMjUyLCAyMywgMjU1LCA4MiwgMTE4LCAyNSwgNSwgNzQsIDExOCwgCisgICAgMjUsIDUsIDIzNiwgNDAsIDExOCwgMjUsIDUsIDY5LCAxMTgsIDI1LCA1LCAyMTQsIDExOCwgMTE4LCAyNSwgNSwgMTQ5LCAKKyAgICAxNTMsIDExOCwgMjUsIDUsIDE0OSwgMjIyLCAxODIsIDExOCwgMjUsIDUsIDE0OSwgMTU2LCAxMTgsIDI1LCA1LCAxNDksIAorICAgIDIzMiwgMTkxLCAxMTgsIDI1LCA1LCA3NiwgMTE4LCAyNSwgNSwgMjU0LCAyMTAsIDExOCwgMjUsIDUsIDc4LCAxMTgsIDI1LCAKKyAgICA1LCAyNTMsIDIwMCwgMTE4LCAyMTMsIDE1MiwgMTE4LCAyNDgsIDE4NiwgMTE4LCA1MiwgMjQ4LCAxODYsIDExOCwgMjI0LCAKKyAgICAxNDQsIDI0NywgMTI4LCAxMTgsIDIyNCwgMTQ0LCA1MiwgMjQ3LCAxMjgsIDExOCwgMjI0LCAxNDQsIDIzMiwgMjE5LCAxMTgsIAorICAgIDIyNCwgMTQ0LCAyNDksIDE0NSwgMTMwLCAxMTgsIDIyNCwgMTQ0LCAyMzIsIDEyMSwgMTE4LCA1NCwgMTExLCAxMTgsIDU0LCAKKyAgICAxMDUsIDExOCwgNTQsIDE1OCwgMTE4LCA1NCwgMTYxLCAxMTgsIDU0LCAxOTAsIDExOCwgNTQsIDE5NSwgMTE4LCA1NCwgCisgICAgMTk5LCAxMTgsIDU0LCAxOTYsIDExOCwgNTQsIDIwMSwgMTE4LCA1NCwgMjE2LCAyNDgsIDExOCwgNTQsIDIxNSwgNzMsIAorICAgIDExOCwgNTQsIDIxNiwgMTYzLCAxMTgsIDU0LCAyNDQsIDIzLCAxMTgsIDU0LCAyNDQsIDEyMiwgMTE4LCA1NCwgMjE5LCAKKyAgICAxMTMsIDExOCwgNTQsIDIyMCwgMTE4LCAxMTgsIDU0LCAyNDUsIDE5MiwgMTE4LCA1NCwgMjI4LCAyMDAsIDExOCwgNTQsIAorICAgIDEyMywgMjQwLCAyMTcsIDExOCwgNTQsIDEyMywgMjE2LCAxNDgsIDExOCwgMjEsIDIxMCwgODYsIDExOCwgMjEsIDExMSwgCisgICAgMTE4LCAyMSwgMTA1LCAxMTgsIDIxLCAxNTgsIDExOCwgMjEsIDE2MSwgMTE4LCAyMSwgMTkwLCAxMTgsIDIxLCAxOTUsIAorICAgIDExOCwgMjEsIDE5OSwgMTE4LCAyMSwgMTk2LCAxMTgsIDIxLCAyMDEsIDIzNCwgMjUwLCA1LCAyNTEsIDcsIDIzNCwgMjUwLCAKKyAgICA1LCAyNTQsIDgzLCAyMzQsIDI1MCwgNSwgMjEzLCAxNDcsIDIzNCwgMjUwLCAxLCA2MSwgMjM0LCAyNTAsIDEsIDI1NSwgODIsIAorICAgIDIzNCwgMjUwLCAxLCA3NCwgMjM0LCAyNTAsIDEsIDIzNiwgNDAsIDIzNCwgMjUwLCAxLCA2OSwgMjM0LCAyNTAsIDEsIDIxNCwgCisgICAgMTE4LCAyMzQsIDI1MCwgMSwgNzYsIDIzNCwgMjUwLCAxLCAyNTQsIDIxMCwgMjM0LCAyNTAsIDEsIDc4LCAyMzQsIDI1MCwgCisgICAgMSwgMjUzLCAyMDAsIDIzNCwgMjUwLCAxLCAxNzYsIDIzNCwgMjUwLCAxLCAyMzQsIDEzOCwgMjM0LCAyNTAsIDEsIDI0MywgCisgICAgMTQyLCAyMzQsIDI1MCwgMSwgMjQzLCAwLCAyMzQsIDI1MCwgMSwgMjI5LCA4MiwgMjM0LCAyNTAsIDEsIDI1MSwgNDEsIAorICAgIDIzNCwgMjUwLCAxLCAyNTAsIDE2NSwgMjM0LCAyNTAsIDEsIDIzNSwgMTQ3LCAyMzQsIDI1MCwgMSwgMjM1LCAxMjAsIDIzNCwgCisgICAgMjUwLCAxLCAyMjcsIDE2OSwgMjM0LCAyNTAsIDEsIDIxNSwgMTU3LCAyMzQsIDI1MCwgMSwgMjE1LCAxNDUsIDIzNCwgMjUwLCAKKyAgICAxLCAyNDgsIDE0MywgMjM0LCAyNTAsIDEsIDI0OCwgMTMyLCAyMzQsIDI1MCwgMSwgMjQ4LCAxMjcsIDIzNCwgMjUwLCAxLCAKKyAgICAyMjMsIDQyLCAyMzQsIDI1MCwgMSwgMjI4LCAxMTUsIDIzNCwgMjUwLCAxLCAyMTcsIDEwNiwgMjM0LCAyNTAsIDEsIDIxNiwgCisgICAgMjA5LCAyMzQsIDI1MCwgMSwgMjQ4LCAyMjksIDIzNCwgMjUwLCAxLCAyNDgsIDMzLCAyMzQsIDI1MCwgMSwgMTk4LCAyMzQsIAorICAgIDI1MCwgMSwgMTkxLCAyMzQsIDI1MCwgMSwgMjI1LCAxNTAsIDIzNCwgMjUwLCAxLCAyNTIsIDE5OSwgMjM0LCAyNTAsIDEsIAorICAgIDI1MiwgMjYsIDIzNCwgMjUwLCAxLCAxODYsIDIzNCwgMjUwLCAxLCAxOTIsIDIzNCwgMjUwLCAxLCAyMDUsIDIzNCwgMjUwLCAKKyAgICAxLCAyMzMsIDE0MSwgMjM0LCAyNTAsIDEsIDIxNCwgMjcsIDIzNCwgMjUwLCAxLCAyMjAsIDEwNCwgMjM0LCAyNTAsIDEsIAorICAgIDIxOCwgMjI1LCAyMzQsIDI1MCwgMSwgMjA2LCAyMzQsIDI1MCwgMSwgMTYyLCAyMzQsIDI1MCwgMjUsIDUsIDI1NSwgODIsIAorICAgIDIzNCwgMjUwLCAyNSwgNSwgNzQsIDIzNCwgMjUwLCAyNSwgNSwgMjM2LCA0MCwgMjM0LCAyNTAsIDI1LCA1LCA2OSwgMjM0LCAKKyAgICAyNTAsIDI1LCA1LCAyMTQsIDExOCwgMjM0LCAyNTAsIDI1LCA1LCA3NiwgMjM0LCAyNTAsIDI1LCA1LCAyNTQsIDIxMCwgCisgICAgMjM0LCAyNTAsIDI1LCA1LCA3OCwgMjM0LCAyNTAsIDI1LCA1LCAyNTMsIDIwMCwgMjM0LCAyNTAsIDUsIDIxMywgMTUyLCAKKyAgICAyMzQsIDI1MCwgNSwgMjI3LCAyMDksIDIzNCwgMjUwLCAyNTUsIDMwLCA1MCwgMjM0LCAyNTAsIDI0NSwgMTI5LCA1MCwgCisgICAgMjM0LCAyNTAsIDU0LCA1MCwgMjM0LCAyNTAsIDIyMSwgMTc1LCA3OSwgMjM0LCAyNTAsIDUyLCAyMjEsIDE3NSwgNzksIAorICAgIDIzNCwgMjUwLCAyNDgsIDE4NiwgMjM0LCAyNTAsIDUyLCAyNDgsIDE4NiwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjIyLCAyMCwgCisgICAgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjE3LCA4MSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjUyLCAxNzYsIDIxOSwgMzgsIAorICAgIDIxOSwgNDYsIDEsIDI1MSwgMzEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI0OCwgMjExLCAyMTksIDM4LCAyMTksIDQ2LCAxLCAKKyAgICAyNDMsIDEyNywgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjMxLCAyMTUsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyOSwgNzksIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzMywgMTE4LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMjksIDIxOCwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMSwgMjE0LCAyNCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjI2LCA3NywgMjE5LCAzOCwgMjE5LCA0NiwgMSwgCisgICAgMjExLCA4NCwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjIzLCAxNzEsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI0MiwgNDQsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIzNCwgMjU0LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyMzUsIDE0MiwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMSwgMjI3LCAxNjYsIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDI1NCwgMjE4LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAKKyAgICAyNDUsIDIxNSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjM2LCA0MSwgMjE5LCAzOCwgMjE5LCA0NiwgMSwgMjE0LCAyMDgsIAorICAgIDIxOSwgMzgsIDIxOSwgNDYsIDEsIDIyNiwgMjI2LCAyMTksIDM4LCAyMTksIDQ2LCAxLCAyNDUsIDIwNSwgMjE5LCAzOCwgCisgICAgMjE5LCA0NiwgMSwgMjMxLCAyMjgsIDIxOSwgMzgsIDIxOSwgNDYsIDIxLCAyMTAsIDg2LCAyMTksIDM4LCAyMTksIDQ2LCAKKyAgICAyMSwgMTExLCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTA1LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTU4LCAyMTksIDM4LCAKKyAgICAyMTksIDQ2LCAyMSwgMTYxLCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTkwLCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTk1LCAKKyAgICAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTk5LCAyMTksIDM4LCAyMTksIDQ2LCAyMSwgMTk2LCAyMTksIDM4LCAyMTksIDQ2LCAKKyAgICAyMSwgMjAxLCAyNTAsIDE1OSwgNSwgMjUxLCA3LCAyNTAsIDE1OSwgNSwgMjU0LCA4MywgMjUwLCAxNTksIDUsIDIxMywgCisgICAgMTQ3LCAyNTAsIDE1OSwgMSwgMjU1LCA4MiwgMjUwLCAxNTksIDEsIDc0LCAyNTAsIDE1OSwgMSwgNjksIDI1MCwgMTU5LCAxLCAKKyAgICA3NiwgMjUwLCAxNTksIDEsIDIzNSwgMTYsIDI1MCwgMTU5LCAxLCAyMzQsIDEzNywgMjUwLCAxNTksIDEsIDI0MywgMTM5LCAKKyAgICAyNTAsIDE1OSwgMSwgMjQyLCAyNTUsIDI1MCwgMTU5LCAxLCAyMjksIDgxLCAyNTAsIDE1OSwgMSwgMjUxLCA0MCwgMjUwLCAKKyAgICAxNTksIDEsIDI1MCwgMTY0LCAyNTAsIDE1OSwgMSwgMjM1LCAxNDYsIDI1MCwgMTU5LCAxLCAyMzUsIDExOSwgMjUwLCAxNTksIAorICAgIDEsIDIyNywgMTY4LCAyNTAsIDE1OSwgMSwgMjE1LCAxNTYsIDI1MCwgMTU5LCAxLCAyMTUsIDE0NCwgMjUwLCAxNTksIDEsIAorICAgIDI0OCwgMTQyLCAyNTAsIDE1OSwgMSwgMjQ4LCAxMjYsIDI1MCwgMTU5LCAxLCAyMjgsIDExNCwgMjUwLCAxNTksIDEsIDIxNywgCisgICAgMTAyLCAyNTAsIDE1OSwgMSwgMjE2LCAyMDgsIDI1MCwgMTU5LCAxLCAyNDgsIDIyOCwgMjUwLCAxNTksIDEsIDI0OCwgMzIsIAorICAgIDI1MCwgMTU5LCAxLCAyMjksIDIzMCwgMjUwLCAxNTksIDEsIDIyNiwgOTMsIDI1MCwgMTU5LCAxLCAyMjUsIDE0OSwgMjUwLCAKKyAgICAxNTksIDEsIDI1MiwgMTk3LCAyNTAsIDE1OSwgMSwgMjUyLCAyNSwgMjUwLCAxNTksIDEsIDIzMSwgMjQyLCAyNTAsIDE1OSwgCisgICAgMSwgMjEwLCAxNjcsIDI1MCwgMTU5LCAxLCAyMTEsIDEwMywgMjUwLCAxNTksIDEsIDIyMywgMTg3LCAyNTAsIDE1OSwgMSwgCisgICAgMjMzLCAxNDAsIDI1MCwgMTU5LCAxLCAyMTIsIDY0LCAyNTAsIDE1OSwgMSwgMjIyLCAzMywgMjUwLCAxNTksIDEsIDI0MiwgCisgICAgNTMsIDI1MCwgMTU5LCAyNSwgNSwgNjEsIDI1MCwgMTU5LCAyNSwgNSwgNzQsIDI1MCwgMTU5LCAyNSwgNSwgMjM2LCA0MCwgCisgICAgMjUwLCAxNTksIDI1LCA1LCA2OSwgMjUwLCAxNTksIDI1LCA1LCAyMTQsIDExOCwgMjUwLCAxNTksIDI1LCA1LCA3NiwgMjUwLCAKKyAgICAxNTksIDI1LCA1LCAyNTQsIDIxMCwgMjUwLCAxNTksIDI1LCA1LCA3OCwgMjUwLCAxNTksIDI1LCA1LCAyNTMsIDIwMCwgCisgICAgMjUwLCAxNTksIDI1LCA1LCAyMjYsIDIyMywgMjUwLCAxNTksIDE0NCwgNzksIDI1MCwgMTU5LCAyNTMsIDIwMSwgNzksIAorICAgIDI1MCwgMTU5LCAyMTMsIDE1MiwgMjUwLCAxNTksIDIzMSwgMjQwLCAyNTAsIDE1OSwgMjEsIDIxMCwgODYsIDI1MCwgMTU5LCAKKyAgICAyMSwgMTExLCAyNTAsIDE1OSwgMjEsIDEwNSwgMjUwLCAxNTksIDIxLCAxNTgsIDI1MCwgMTU5LCAyMSwgMTYxLCAyNTAsIAorICAgIDE1OSwgMjEsIDE5MCwgMjUwLCAxNTksIDIxLCAxOTUsIDI1MCwgMTU5LCAyMSwgMTk5LCAyNTAsIDE1OSwgMjEsIDE5NiwgCisgICAgMjUwLCAxNTksIDIxLCAyMDEsIDI1MCwgMTU5LCAyMjEsIDE3NSwgNzksIDI1MCwgMTU5LCAyNDgsIDE4NiwgMjUwLCAxNTksIAorICAgIDUyLCAyNDgsIDE4NiwgMjUwLCAxNTksIDIyNCwgMTYsIDc5LCAxNzQsIDUsIDI1MSwgNywgMTc0LCA1LCAyNTQsIDgzLCAKKyAgICAxNzQsIDUsIDIxMywgMTQ3LCAxNzQsIDEsIDYxLCAxNzQsIDEsIDI1NSwgODIsIDE3NCwgMSwgNzQsIDE3NCwgMSwgMjM2LCAKKyAgICA0MCwgMTc0LCAxLCA2OSwgMTc0LCAxLCAyMTQsIDExOCwgMTc0LCAxLCAxNDksIDE1MywgMTc0LCAxLCAxNDksIDIyMiwgCisgICAgMTgyLCAxNzQsIDEsIDE0OSwgMTU2LCAxNzQsIDEsIDE0OSwgMjMyLCAxOTEsIDE3NCwgMSwgNzYsIDE3NCwgMSwgMjU0LCAKKyAgICAyMTAsIDE3NCwgMSwgNzgsIDE3NCwgMSwgMjUzLCAyMDAsIDE3NCwgMSwgMTc2LCAxNzQsIDEsIDIzNCwgMTM4LCAxNzQsIDEsIAorICAgIDI0MywgMTQyLCAxNzQsIDEsIDI0MywgMCwgMTc0LCAxLCAyMjksIDgyLCAxNzQsIDEsIDI1MSwgNDEsIDE3NCwgMSwgMjUwLCAKKyAgICAxNjUsIDE3NCwgMSwgMjM1LCAxNDcsIDE3NCwgMSwgMjM1LCAxMjAsIDE3NCwgMSwgMjI3LCAxNjksIDE3NCwgMSwgMjE1LCAKKyAgICAxNTcsIDE3NCwgMSwgMjE1LCAxNDUsIDE3NCwgMSwgMjQ4LCAxNDMsIDE3NCwgMSwgMjQ4LCAxMjcsIDE3NCwgMSwgMjI4LCAKKyAgICAxMTUsIDE3NCwgMSwgMjE3LCAxMDYsIDE3NCwgMSwgMjE2LCAyMDksIDE3NCwgMSwgMjQ4LCAyMjksIDE3NCwgMSwgMjQ4LCAKKyAgICAzMywgMTc0LCAxLCAxOTgsIDE3NCwgMSwgMTkxLCAxNzQsIDEsIDIyNSwgMTUwLCAxNzQsIDEsIDI1MiwgMTk5LCAxNzQsIDEsIAorICAgIDI1MiwgMjYsIDE3NCwgMSwgMTg2LCAxNzQsIDEsIDE5MiwgMTc0LCAxLCAyMDUsIDE3NCwgMSwgMjMzLCAxNDEsIDE3NCwgMSwgCisgICAgMjMyLCAxOTAsIDE3NCwgMSwgMjE0LCAyNywgMTc0LCAxLCAyMjAsIDEwNCwgMTc0LCAxLCAyMTgsIDIyNSwgMTc0LCAxLCAKKyAgICAyMDYsIDE3NCwgMSwgMTYyLCAxNzQsIDI1LCA1LCAyNTUsIDgyLCAxNzQsIDI1LCA1LCA3NCwgMTc0LCAyNSwgNSwgMjM2LCAKKyAgICA0MCwgMTc0LCAyNSwgNSwgNjksIDE3NCwgMjUsIDUsIDIxNCwgMTE4LCAxNzQsIDI1LCA1LCAxNDksIDE1MywgMTc0LCAyNSwgCisgICAgNSwgMTQ5LCAyMjIsIDE4MiwgMTc0LCAyNSwgNSwgMTQ5LCAxNTYsIDE3NCwgMjUsIDUsIDE0OSwgMjMyLCAxOTEsIDE3NCwgCisgICAgMjUsIDUsIDc2LCAxNzQsIDI1LCA1LCAyNTQsIDIxMCwgMTc0LCAyNSwgNSwgNzgsIDE3NCwgMjUsIDUsIDI1MywgMjAwLCAKKyAgICAxNzQsIDUsIDIxMywgMTUyLCAxNzQsIDUsIDI1MywgMTgzLCAxNzQsIDUsIDIzNSwgMTA4LCAxNzQsIDUsIDIxNCwgMTYxLCAKKyAgICAxNzQsIDIyNiwgMjA4LCAxNzQsIDI0OCwgMTg2LCAxNzQsIDUyLCAyNDgsIDE4NiwgMTc0LCAyNTUsIDMwLCA1MCwgMTc0LCAKKyAgICAyMjAsIDEzOSwgMTc0LCAyMSwgMjEwLCA4NiwgMTc0LCAyMSwgMTExLCAxNzQsIDIxLCAxMDUsIDE3NCwgMjEsIDE1OCwgCisgICAgMTc0LCAyMSwgMTYxLCAxNzQsIDIxLCAxOTAsIDE3NCwgMjEsIDE5NSwgMTc0LCAyMSwgMTk5LCAxNzQsIDIxLCAxOTYsIAorICAgIDE3NCwgMjEsIDIwMSwgMjE3LCA3MCwgMSwgNjEsIDIxNywgNzAsIDEsIDI1NSwgODIsIDIxNywgNzAsIDEsIDc0LCAyMTcsIAorICAgIDcwLCAxLCAyMzYsIDQwLCAyMTcsIDcwLCAxLCA2OSwgMjE3LCA3MCwgMSwgMjE0LCAxMTgsIDIxNywgNzAsIDEsIDc2LCAKKyAgICAyMTcsIDcwLCAxLCAyNTQsIDIxMCwgMjE3LCA3MCwgMSwgNzgsIDIxNywgNzAsIDEsIDI1MywgMjAwLCAyMTcsIDcwLCAxLCAKKyAgICAxNzYsIDIxNywgNzAsIDEsIDIzNCwgMTM4LCAyMTcsIDcwLCAxLCAyNDMsIDE0MiwgMjE3LCA3MCwgMSwgMjQzLCAwLCAyMTcsIAorICAgIDcwLCAxLCAyMjksIDgyLCAyMTcsIDcwLCAxLCAyNTEsIDQxLCAyMTcsIDcwLCAxLCAyNTAsIDE2NSwgMjE3LCA3MCwgMSwgCisgICAgMjM1LCAxNDcsIDIxNywgNzAsIDEsIDIzNSwgMTIwLCAyMTcsIDcwLCAxLCAyMjcsIDE2OSwgMjE3LCA3MCwgMSwgMjE1LCAKKyAgICAxNTcsIDIxNywgNzAsIDEsIDIxNSwgMTQ1LCAyMTcsIDcwLCAxLCAyNDgsIDE0MywgMjE3LCA3MCwgMSwgMjQ4LCAxMjcsIAorICAgIDIxNywgNzAsIDEsIDIyOCwgMTE1LCAyMTcsIDcwLCAxLCAyMTcsIDEwNiwgMjE3LCA3MCwgMSwgMjE2LCAyMDksIDIxNywgCisgICAgNzAsIDEsIDI0OCwgMjI5LCAyMTcsIDcwLCAxLCAyNDgsIDMzLCAyMTcsIDcwLCAxLCAxOTgsIDIxNywgNzAsIDEsIDE5MSwgCisgICAgMjE3LCA3MCwgMSwgMjI1LCAxNTAsIDIxNywgNzAsIDEsIDI1MiwgMTk5LCAyMTcsIDcwLCAxLCAyNTIsIDI2LCAyMTcsIDcwLCAKKyAgICAxLCAxODYsIDIxNywgNzAsIDEsIDE5MiwgMjE3LCA3MCwgMSwgMjA1LCAyMTcsIDcwLCAxLCAyMzMsIDE0MSwgMjE3LCA3MCwgCisgICAgMSwgMjE0LCAyNywgMjE3LCA3MCwgMSwgMjIwLCAxMDQsIDIxNywgNzAsIDEsIDIwNiwgMjE3LCA3MCwgMSwgMTYyLCAyMTcsIAorICAgIDcwLCAxLCAyMjIsIDE4MSwgMjE3LCA3MCwgNSwgMjU0LCA4MywgMjE3LCA3MCwgNSwgMjEzLCAxNDcsIDIxNywgNzAsIDI1LCAKKyAgICA1LCAyNTUsIDgyLCAyMTcsIDcwLCAyNSwgNSwgNzQsIDIxNywgNzAsIDI1LCA1LCAyMzYsIDQwLCAyMTcsIDcwLCAyNSwgNSwgCisgICAgNjksIDIxNywgNzAsIDI1LCA1LCAyMTQsIDExOCwgMjE3LCA3MCwgMjUsIDUsIDc2LCAyMTcsIDcwLCAyNSwgNSwgMjU0LCAKKyAgICAyMTAsIDIxNywgNzAsIDI1LCA1LCA3OCwgMjE3LCA3MCwgMjUsIDUsIDI1MywgMjAwLCAyMTcsIDcwLCA1LCAyMTMsIDE1MiwgCisgICAgMjE3LCA3MCwgNSwgMjI3LCAyMDksIDIxNywgNzAsIDIxLCAyMTAsIDg2LCAyMTcsIDcwLCAyMSwgMTExLCAyMTcsIDcwLCAKKyAgICAyMSwgMTA1LCAyMTcsIDcwLCAyMSwgMTU4LCAyMTcsIDcwLCAyMSwgMTYxLCAyMTcsIDcwLCAyMSwgMTkwLCAyMTcsIDcwLCAKKyAgICAyMSwgMTk1LCAyMTcsIDcwLCAyMSwgMTk5LCAyMTcsIDcwLCAyMSwgMTk2LCAyMTcsIDcwLCAyMSwgMjAxLCAxNSwgNSwgNjEsIAorICAgIDE1LCA1LCAxMTYsIDMwLCA2MSwgMTUsIDUsIDExNiwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMTE2LCAzMCwgMjQzLCAxMTIsIAorICAgIDIxNiwgMjQwLCAxNSwgNSwgMTE2LCAzMCwgMTYyLCAxNSwgNSwgMTE2LCAzMCwgMjM2LCA0MiwgMTUsIDUsIDExNiwgMzAsIAorICAgIDIzMywgMTIyLCAyNDIsIDEwMSwgMTUsIDUsIDExNiwgMzAsIDIzMCwgNjYsIDE1LCA1LCAxMTYsIDMwLCAyMjIsIDIzLCAxNSwgCisgICAgNSwgMjU1LCA4NCwgMTUsIDUsIDI1NSwgMzQsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyNTUsIDM1LCAKKyAgICAzMCwgMjQ2LCA3NSwgMjQyLCAxMDEsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAyNTUsIDM1LCAzMCwgCisgICAgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjU1LCAzNSwgMzAsIDE2MiwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzYsIDQzLCAKKyAgICAyNDIsIDEwMSwgMTUsIDUsIDI1NSwgMzUsIDMwLCAyMzYsIDE2LCAxNSwgNSwgMjU1LCAzNSwgMzAsIDIzMywgMTIzLCAxNSwgCisgICAgNSwgMjU1LCAzNSwgMzAsIDIyMCwgNTAsIDE1LCA1LCAyNTUsIDM1LCAzMCwgMTA0LCA5NiwgMTA0LCA5NiwgNjksIDE1LCA1LCAKKyAgICAyNTUsIDM1LCAyNDIsIDEwMSwgMTUsIDUsIDI1NSwgMzIsIDE1LCA1LCAyNTUsIDMzLCAzMCwgMjUyLCAxNjgsIDE1LCA1LCAKKyAgICAyNTUsIDMzLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjU1LCAzMywgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIAorICAgIDE1OCwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMjAsIDEwMiwgMTUsIDUsIDI1NSwgMzMsIDMwLCAyMTcsIDczLCAxNSwgNSwgCisgICAgMjU1LCA4LCAxNSwgNSwgMjU0LCAxOTUsIDE1LCA1LCAyNTQsIDE5NiwgMzAsIDI0NSwgOTUsIDE1LCA1LCAyNTQsIDE5NiwgCisgICAgMzAsIDIyMCwgMTIsIDk2LCAyNDIsIDE5NywgMTUsIDUsIDI1NCwgMTg3LCAxNSwgNSwgMjU0LCAxODgsIDMwLCAyNTQsIAorICAgIDE4NywgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjQ3LCAyMjQsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDI0MiwgMTk3LCAxNSwgNSwgCisgICAgMjU0LCAxODgsIDMwLCAxNjIsIDE1LCA1LCAyNTQsIDE4OCwgMzAsIDIzNSwgNSwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjM0LCAKKyAgICA5OCwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI1NCwgMTg4LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAKKyAgICAyNTQsIDE4NCwgMTUsIDUsIDI1NCwgMTc3LCAxNSwgNSwgMjU0LCAxNDAsIDE1LCA1LCAyNTQsIDE0MSwgMzAsIDIyMCwgNjUsIAorICAgIDE1LCA1LCAyNTQsIDEzMSwgMTUsIDUsIDI1NCwgMTMyLCAxMTUsIDI1NCwgMTMxLCAxNSwgNSwgMjU0LCAxMzIsIDEzNCwgCisgICAgMjE2LCA4NiwgMTUsIDUsIDI1NCwgMTMyLCA5NiwgMjI5LCAyMjIsIDIyNiwgMTY4LCAyNTQsIDEzMiwgOTYsIDIyOSwgMjIxLCAKKyAgICAxNSwgNSwgMjU0LCAxMzIsIDk2LCAyMjksIDIyMiwgMjE4LCAyMzUsIDE1LCA1LCAyNTQsIDEwMiwgMTUsIDUsIDI1NCwgNzUsIAorICAgIDE1LCA1LCAyNTQsIDQzLCAxNSwgNSwgMjU0LCA0NCwgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjU0LCAxNiwgMTUsIDUsIDI1MywgCisgICAgMjQ0LCAxNSwgNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDI0MCwgMjEwLCA0MCwgMjE2LCAyNDAsIDE1LCA1LCAyNTMsIAorICAgIDI0MCwgMjM1LCA5LCAyMTYsIDI0MCwgMTUsIDUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAyMTUsIDExNSwgMTE1LCAKKyAgICAyMTUsIDExNSwgMjE1LCAxMTUsIDExNSwgMjE1LCAxMTUsIDIyNiwgMjUsIDE1LCA1LCAyNTMsIDI0MCwgMTE1LCAyNTMsIAorICAgIDI0MCwgMTE1LCAyNTMsIDIzOSwgMTUsIDUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAxMTUsIDI1MywgMjQwLCAyNDksIAorICAgIDEzMywgMjUzLCAyNDAsIDExNSwgMjUzLCAyNDAsIDExNSwgMjUzLCAyMzksIDE1LCA1LCAyNTMsIDIzNywgMTUsIDUsIDI1MywgCisgICAgMjM0LCAxNSwgNSwgMjUyLCAxOTksIDE1LCA1LCAyNTIsIDE4NCwgMTUsIDUsIDI1MiwgMTc5LCAxNSwgNSwgMjUyLCAxNzUsIAorICAgIDE1LCA1LCAyNTIsIDE2OSwgMTUsIDUsIDI1MiwgMTcwLCAxMTUsIDI1MiwgMTY5LCAxNSwgNSwgMjUyLCAxNjgsIDE1LCA1LCAKKyAgICAxMzAsIDE1LCA1LCAyNTIsIDE0OCwgMTUsIDUsIDI1MiwgMTQsIDE1LCA1LCAyNTIsIDE1LCAzMCwgNjEsIDE1LCA1LCAyNTIsIAorICAgIDE1LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNTIsIDE1LCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyNTEsIDEzMywgCisgICAgMTUsIDUsIDI1MSwgMTM0LCAxMTUsIDI1MSwgMTM0LCAyNTUsIDM0LCAxNSwgNSwgMjUxLCAxMzQsIDExNSwgMjUxLCAxMzQsIAorICAgIDIxNCwgMTkwLCAxNSwgNSwgMjUxLCAxMzQsIDI0OSwgMTMzLCAyNTEsIDEzMywgMTUsIDUsIDI1MSwgMTE3LCAxNSwgNSwgCisgICAgMjUxLCAxMTgsIDExNSwgMjUxLCAxMTcsIDE1LCA1LCAyNTEsIDEwNiwgMTUsIDUsIDI1MSwgMTA1LCAxNSwgNSwgMjQ4LCAKKyAgICAyMjksIDE1LCA1LCAyNDgsIDIyMCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMTE2LCA5NiwgMjMxLCAxNTIsIAorICAgIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI1NCwgMTQwLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKKyAgICAyNTIsIDE2OCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjUyLCAxNCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIAorICAgIDcyLCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MywgMTQzLCA5NiwgMjMxLCAxNTIsIAorICAgIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDI0MiwgMjIxLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAKKyAgICAyNDIsIDIwNCwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjQyLCAxMTAsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCAKKyAgICA3MiwgMzAsIDE2MiwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAzMCwgMjM1LCAxODYsIDE1LCA1LCAyNDgsIDIyMSwgCisgICAgMjM0LCA3MiwgMzAsIDIzNSwgMTg3LCA5NiwgMjMyLCAxMDMsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzNCwgCisgICAgMjQ4LCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMzMsIDE0MSwgMTUsIDUsIDI0OCwgMjIxLCAyMzQsIDcyLCAKKyAgICAzMCwgMjMyLCAxMDMsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzMiwgMTA0LCA5NiwgMjMxLCAxNTEsIDE1LCAKKyAgICA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIzMiwgODksIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIyOSwgCisgICAgMTEyLCAxNSwgNSwgMjQ4LCAyMjEsIDIzNCwgNzIsIDMwLCAyMjYsIDI2LCA5NiwgMjI2LCAyNSwgMTUsIDUsIDI0OCwgMjIxLCAKKyAgICAyMzQsIDcyLCAzMCwgMjE5LCAxOTMsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIDIxNywgNzMsIDE1LCA1LCAyNDgsIAorICAgIDIyMSwgMjM0LCA3MiwgMzAsIDIxNCwgMjMxLCA5NiwgMjQyLCAyMDQsIDE1LCA1LCAyNDgsIDIyMSwgMjM0LCA3MiwgMzAsIAorICAgIDIxNCwgMTI2LCAxNSwgNSwgMjQ4LCAxOTUsIDE1LCA1LCAyNDgsIDE3NCwgMTUsIDUsIDI0OCwgMTczLCAxNSwgNSwgMjQ4LCAKKyAgICAxNzIsIDE1LCA1LCAyNDgsIDExLCAxNSwgNSwgMjQ3LCAyNTAsIDE1LCA1LCAyNDcsIDIyNSwgMTUsIDUsIDI0NywgMjI2LCAKKyAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0NywgMjI0LCAxNSwgNSwgMjQ3LCAyMTQsIDE1LCA1LCAyNDcsIDIxNSwgMjM0LCAyMTQsIAorICAgIDEwNCwgMjQyLCAxMDIsIDI0NywgMTk1LCAxNSwgNSwgMjQ3LCAxOTUsIDE1LCA1LCAyNDYsIDg2LCAxNSwgNSwgMjQ2LCA4NywgCisgICAgMTE1LCAyNDYsIDg2LCAxNSwgNSwgMjQ2LCA4NywgMjQyLCAxMDEsIDE1LCA1LCAyNDYsIDg3LCAyMjAsIDQ3LCAxNSwgNSwgCisgICAgMjQ2LCA4NCwgMTUsIDUsIDI0NiwgODUsIDMwLCAyNDUsIDgwLCAxNSwgNSwgMjQ2LCA4MywgMTUsIDUsIDI0NiwgODIsIDE1LCAKKyAgICA1LCAyNDYsIDgxLCAxNSwgNSwgMjQ2LCA4MCwgMTUsIDUsIDI0NiwgNzYsIDE1LCA1LCAyNDYsIDc0LCAxNSwgNSwgMjQ2LCAKKyAgICA3NSwgMjQyLCAxMDEsIDE1LCA1LCAyNDYsIDc1LCAyNDIsIDEwMiwgMjQyLCAxMDEsIDE1LCA1LCAyNDYsIDczLCAxNSwgNSwgCisgICAgMjQ2LCA2NiwgMTUsIDUsIDc2LCAxNSwgNSwgMTYwLCAzMCwgMjI2LCAyNSwgMTUsIDUsIDE2MCwgMTE1LCAxNjAsIDIyNywgCisgICAgMTk5LCAxMTUsIDIyNywgMTk4LCAxNSwgNSwgMjQ1LCAyNDIsIDE1LCA1LCAyNDUsIDI0MywgMzAsIDExNiwgOTYsIDI0MiwgCisgICAgNTYsIDk2LCAyNDgsIDIyOSwgMTUsIDUsIDI0NSwgMjQzLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyNDUsIDI0MywgMzAsIAorICAgIDIzMCwgMjM1LCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAyMjIsIDEwLCAxNSwgNSwgMjQ1LCAyNDMsIDMwLCAyMjAsIDY1LCAxNSwgCisgICAgNSwgMjQ1LCAyNDMsIDMwLCA2OSwgMTUsIDUsIDI0NSwgMjE5LCAxNSwgNSwgMjQ1LCAyMDgsIDE1LCA1LCAyNDUsIDE4MiwgCisgICAgMTUsIDUsIDI0NSwgMTU4LCAxNSwgNSwgMjQ1LCAxNTksIDMwLCAyNDMsIDExMSwgMTUsIDUsIDI0NSwgMTU5LCAzMCwgMjQzLCAKKyAgICAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQ1LCAxNTksIDMwLCAyMzEsIDk2LCAxNSwgNSwgMjQ1LCAxNTksIDI0OSwgMTMzLCAKKyAgICAyNDUsIDE1OCwgMTUsIDUsIDI0NSwgMTU5LCAyMjYsIDE2OCwgMjQ1LCAxNTgsIDE1LCA1LCAyNDUsIDE1OSwgMjE4LCAyMzUsIAorICAgIDE1LCA1LCAyNDUsIDk3LCAxNSwgNSwgMjQ1LCA5NSwgMTUsIDUsIDI0NSwgODAsIDE1LCA1LCAyNDUsIDE4LCAxNSwgNSwgCisgICAgMjQ1LCAxOSwgMzAsIDYxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDExNiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgMjQ1LCAxOSwgCisgICAgMzAsIDExNiwgOTYsIDIzMywgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjQ2LCA3NSwgMjQyLCAxMDEsIDE1LCA1LCAyNDUsIAorICAgIDE5LCAzMCwgMjQ2LCA3NSwgMjQyLCAxMDIsIDI0MiwgMTAxLCAxNSwgNSwgMjQ1LCAxOSwgMzAsIDE2MiwgMTUsIDUsIDI0NSwgCisgICAgMTksIDMwLCAyNDIsIDU2LCAyNDIsIDEwMSwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIDUsIAorICAgIDI0NSwgMTksIDMwLCAyMzQsIDIxMywgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzQsIDIxNCwgMjE4LCAyMzUsIDE1LCA1LCAKKyAgICAyNDUsIDE5LCAzMCwgMjMzLCAyMjEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyNDUsIDE5LCAzMCwgCisgICAgMjMzLCAxMTEsIDMwLCAyMzMsIDExMCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMzIsIDI0NywgMTUsIDUsIDI0NSwgMTksIDMwLCAKKyAgICAyMzIsIDEwMywgMTUsIDUsIDI0NSwgMTksIDMwLCAyMTQsIDIzMCwgMTUsIDUsIDI0NSwgMTksIDMwLCAyMTQsIDIxOSwgMTUsIAorICAgIDUsIDI0MywgMTQyLCAxNSwgNSwgMjQzLCAxNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjQzLCAxNDAsIDE1LCA1LCAyNDMsIDE0MSwgCisgICAgMzAsIDExNiwgOTYsIDI0OCwgMjMwLCA5NiwgMTYyLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAxMTYsIDk2LCAxNjIsIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDExNiwgOTYsIDIzNiwgNDIsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1NSwgMzMsIDIxNiwgMjQxLCAKKyAgICA5NiwgMjE3LCA5NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjU0LCAxMzEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI1MywgCisgICAgMjM5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTMsIDIzOCwgOTYsIDI0MywgMTI1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjUyLCAxNDksIDk2LCAyMDUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDI1MSwgMTA2LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNTEsIDEwNywgOTYsIDIwNSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjQ4LCAyMjksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0OCwgMTEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NywgMjI2LCAKKyAgICAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ2LCA4NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQ1LCAxODIsIAorICAgIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgMTgzLCA5NiwgMjMzLCAxNDEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0NSwgCisgICAgMTU4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDUsIDE1OSwgMzAsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDI0MywgCisgICAgMTQxLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDI0MywgCisgICAgMTQxLCAzMCwgMjQyLCAyMjEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgMjE5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyNDIsIDIyMCwgOTYsIDYxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyNDIsIDIwNSwgOTYsIDIxOCwgODQsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDI0MiwgNTYsIDk2LCAyMzIsIDEwNCwgOTYsIDI0NSwgODAsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgCisgICAgMzcsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDI0MiwgMzgsIDk2LCAyMzMsIDE0MSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQxLCAKKyAgICAxODgsIDk2LCAyMzIsIDI0NywgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjQwLCAyMjUsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIAorICAgIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzUsIDE3MywgOTYsIDI0MCwgMjMwLCA5NiwgMjUzLCAKKyAgICAyMzksIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzQsIDIxMywgMTUsIDUsIAorICAgIDI0MywgMTQxLCAzMCwgMjM0LCA5NSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjM0LCA5NiwgOTYsIDIzMywgMTEwLCAxNSwgNSwgCisgICAgMjQzLCAxNDEsIDMwLCAyMzMsIDIyMiwgOTYsIDI1NCwgMTMxLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzMsIDE0MSwgMTUsIAorICAgIDUsIDI0MywgMTQxLCAzMCwgMjMxLCA5NywgOTYsIDI0NSwgMTU4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMzAsIDIzNSwgCisgICAgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyNywgMTk5LCAxMTUsIDIyNywgCisgICAgMTk4LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAxOTEsIDE1LCA1LCAyNDMsIDE0MSwgMzAsIDIyMiwgMTAsIDE1LCA1LCAyNDMsIAorICAgIDE0MSwgMzAsIDIyMSwgMjMzLCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAKKyAgICAyMjAsIDY2LCA5NiwgMjE1LCA5OSwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjIwLCAzMiwgMTUsIDUsIDI0MywgMTQxLCAzMCwgCisgICAgMjE4LCA0NCwgMTUsIDUsIDI0MywgMTQxLCAzMCwgMjE3LCA3MywgMTUsIDUsIDI0MywgMTQxLCAzMCwgNjksIDE1LCA1LCAKKyAgICAyNDMsIDE0MSwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjQzLCAxNDEsIDMwLCAyMTQsIDIyMCwgOTYsIDI0NiwgODYsIDE1LCAKKyAgICA1LCAyNDMsIDE0MSwgMTE1LCAyNDMsIDE0MCwgMTUsIDUsIDI0MywgMTM1LCAxNSwgNSwgMjQzLCAxMzYsIDI0OSwgMTMzLCAKKyAgICAyNDMsIDEzNSwgMTUsIDUsIDI0MywgMTMzLCAxNSwgNSwgMjQzLCAxMzQsIDExNSwgMjQzLCAxMzQsIDI0MywgMTA0LCAxMTUsIAorICAgIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAxMjUsIDE1LCA1LCAyNDMsIDEyNiwgMjQzLCAxMzQsIDExNSwgMjQzLCAxMzQsIDI0MywgCisgICAgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjQzLCAxMjQsIDE1LCA1LCAyNDMsIDEyMiwgMTUsIDUsIDI0MywgMTEzLCAKKyAgICAxNSwgNSwgMjQzLCAxMTEsIDE1LCA1LCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDMsIDExMiwgMTE1LCAyNDMsIAorICAgIDExMSwgMTUsIDUsIDI0MywgMTEyLCAyNDksIDEzMywgMjQzLCAxMTEsIDE1LCA1LCAyNDMsIDEwMywgMTUsIDUsIDI0MywgCisgICAgMTAyLCAxNSwgNSwgMjQzLCA5NywgMTUsIDUsIDI0MywgNDMsIDE1LCA1LCAyNDMsIDQ0LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAKKyAgICAyNDIsIDIyMSwgMTUsIDUsIDI0MiwgMjIyLCAzMCwgNzYsIDE1LCA1LCAyNDIsIDIyMiwgMzAsIDY5LCAxNSwgNSwgMjQyLCAKKyAgICAyMjIsIDI0OSwgMTMzLCAyNDIsIDIyMSwgMTUsIDUsIDI0MiwgMjE5LCAxNSwgNSwgMjQyLCAyMjAsIDExNSwgMjQyLCAyMTksIAorICAgIDE1LCA1LCAyNDIsIDIyMCwgMjQ5LCAxMzMsIDI0MiwgMjE5LCAxNSwgNSwgMjQyLCAyMTYsIDE1LCA1LCAyNDIsIDIwNCwgCisgICAgMTUsIDUsIDI0MiwgMjA1LCAyNDIsIDEwMSwgMTUsIDUsIDI0MiwgMjAyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAxMTYsIDk2LCAKKyAgICAyMzYsIDQyLCAxNSwgNSwgMjQyLCAyMDMsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyNDIsIDIwMywgMzAsIAorICAgIDIzNiwgNDIsIDE1LCA1LCAyNDIsIDIwMywgMzAsIDIzMiwgMTA0LCA5NiwgMjM2LCA0MiwgMTUsIDUsIDI0MiwgMjAzLCAzMCwgCisgICAgMTkxLCAxNSwgNSwgMjQyLCAxOTksIDE1LCA1LCAyNDIsIDE5NywgMTUsIDUsIDI0MiwgMTk4LCAyNDksIDEzMywgMjQyLCAKKyAgICAxOTcsIDE1LCA1LCAyNDIsIDE5OCwgMzAsIDI1MiwgMTg0LCAxNSwgNSwgMjQyLCAxOTgsIDMwLCAyMTcsIDczLCAxNSwgNSwgCisgICAgMjQyLCAxOTgsIDIxNiwgMjQwLCAxNSwgNSwgMjQyLCAxMjAsIDE1LCA1LCAyNDIsIDEyMSwgMjQ5LCAxMzMsIDI0MiwgMTIwLCAKKyAgICAxNSwgNSwgMjQyLCAxMTgsIDE1LCA1LCAyNDIsIDExOSwgMzAsIDIzNCwgMjQ4LCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMzQsIAorICAgIDI0OSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAxMTksIDMwLCAyMjcsIDE5OCwgMTUsIDUsIDI0MiwgCisgICAgMTE5LCAzMCwgMjIyLCAxMSwgOTYsIDIxNSwgMTE0LCAxNSwgNSwgMjQyLCAxMTksIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAKKyAgICAxMTAsIDE1LCA1LCAyNDIsIDExMSwgMzAsIDExNiwgOTYsIDIzMywgMjAyLCAxNSwgNSwgMjQyLCAxMTEsIDMwLCAyMzMsIAorICAgIDIwMiwgMTUsIDUsIDI0MiwgMTExLCAxMTUsIDI0MiwgMTExLCAyMzIsIDk2LCAxNSwgNSwgMjQyLCAxMDUsIDE1LCA1LCAKKyAgICAyNDIsIDEwMywgMTUsIDUsIDI0MiwgMTA0LCAzMCwgMjIwLCA2NSwgMTUsIDUsIDI0MiwgOTUsIDE1LCA1LCAyNDIsIDk0LCAKKyAgICAxNSwgNSwgMjQyLCA5MSwgMTUsIDUsIDI0MiwgOTAsIDE1LCA1LCAxNjIsIDE1LCA1LCAyNDIsIDU2LCAyMTYsIDI0MCwgMTUsIAorICAgIDUsIDI0MiwgNTYsIDI0MiwgMTAxLCAxNSwgNSwgMjQyLCAzNywgMTUsIDUsIDI0MSwgMTg3LCAxNSwgNSwgMjQxLCAxODgsIAorICAgIDMwLCAyNTMsIDIzOSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjUzLCAyMzcsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjQxLCAxODgsIDMwLCAyNDcsIDE5NSwgMTUsIDUsIDI0MSwgMTg4LCAzMCwgMjQzLCAxMzMsIDE1LCA1LCAKKyAgICAyNDEsIDE4OCwgMzAsIDIzNCwgODcsIDE1LCA1LCAyNDEsIDE4OCwgMzAsIDIyNywgMTk4LCAxNSwgNSwgMjQxLCAxODgsIAorICAgIDMwLCAyMjAsIDY1LCAxNSwgNSwgMjQxLCAxODgsIDMwLCA2OSwgMTUsIDUsIDI0MCwgMjI5LCAxNSwgNSwgMjQwLCAyMjUsIAorICAgIDE1LCA1LCAyNDAsIDIyNiwgMzAsIDI1NCwgMTMxLCAxNSwgNSwgMjQwLCAyMjYsIDMwLCAyNDIsIDM3LCAxNSwgNSwgMjQwLCAKKyAgICAyMjYsIDMwLCAyMzQsIDIxMywgMTUsIDUsIDI0MCwgMjI2LCAzMCwgMjMyLCAyMDMsIDE1LCA1LCAyNDAsIDIyNiwgMzAsIAorICAgIDIxNCwgMjE5LCAxNSwgNSwgMjQwLCAyMjIsIDE1LCA1LCA3NCwgMTUsIDUsIDI0MCwgMTYxLCA2MSwgMTUsIDUsIDI0MCwgCisgICAgMTIyLCAxNSwgNSwgMjM2LCA3MCwgMTUsIDUsIDIzNiwgNzEsIDExNSwgMjM2LCA3MSwgMjUxLCAxMDYsIDE1LCA1LCAyMzYsIAorICAgIDcxLCAxMTUsIDIzNiwgNzEsIDIxOCwgMjM1LCAxNSwgNSwgMjM2LCA0NSwgMTUsIDUsIDIzNiwgNDIsIDE1LCA1LCAyMzYsIAorICAgIDQzLCAyNDcsIDI1MCwgMTUsIDUsIDIzNiwgNDMsIDIyMywgMzgsIDE1LCA1LCAyMzYsIDQzLCAxMTUsIDIzNiwgNDMsIDIyMCwgCisgICAgMTYsIDExNSwgMjIwLCAxNiwgMjE0LCAyMjAsIDExNSwgMjE0LCAyMTksIDE1LCA1LCAyMzYsIDQzLCAyNDIsIDEwMSwgMTUsIAorICAgIDUsIDIzNiwgMzQsIDE1LCA1LCAyMzYsIDM1LCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjM2LCAzMywgMTUsIAorICAgIDUsIDIzNiwgMjMsIDE1LCA1LCAyMzYsIDI0LCAzMCwgMjE3LCA3MywgMTUsIDUsIDIzNiwgMjQsIDI0OSwgMTMzLCAyMzYsIAorICAgIDIzLCAxNSwgNSwgMjM2LCAyNCwgMjI2LCAxNjgsIDIzNiwgMjMsIDE1LCA1LCAyMzYsIDI0LCAyMTgsIDIzNSwgMTUsIDUsIAorICAgIDIzNiwgMTYsIDE1LCA1LCAyMzYsIDYsIDE1LCA1LCAyMzUsIDE4NiwgMTUsIDUsIDIzNSwgMTcyLCAxNSwgNSwgMTc2LCAxNSwgCisgICAgNSwgMjM1LCAxOSwgMzAsIDYxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI1NSwgOCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTUsIAorICAgIDksIDk2LCAyMzMsIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTMsIDIzNywgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTIsIAorICAgIDE4NCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNTIsIDE2OCwgMTUsIDUsIDIzNSwgMTksIDMwLCAxMzAsIDE1LCA1LCAyMzUsIAorICAgIDE5LCAzMCwgMjUyLCAxNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDUsIDk1LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0NSwgCisgICAgODAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQzLCAxNDIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQzLCAxMjUsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MywgMTAzLCAxNSwgNSwgCisgICAgMjM1LCAxOSwgMzAsIDI0MywgMTA0LCA5NiwgMjIwLCAxMDMsIDk2LCA2MSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIAorICAgIDIyMSwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDIwNCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyNDIsIDE5OCwgOTYsIDIyMSwgCisgICAgMjMzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDI0MiwgMTk4LCAyNDksIDEzMywgMjQyLCAxOTcsIDE1LCA1LCAyMzUsIDE5LCAKKyAgICAzMCwgMjQyLCAxMjAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjQyLCA5NCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzYsIDQyLCAKKyAgICAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzNiwgMjMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjM0LCAyNDgsIDE1LCA1LCAyMzUsIAorICAgIDE5LCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMzQsIDk1LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMiwgCisgICAgMjQ3LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMiwgMTAzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTYsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjMxLCA5NywgOTYsIDI0NiwgODYsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjMxLCA5NywgOTYsIDI0MiwgCisgICAgMjIxLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMSwgOTcsIDk2LCAyMTcsIDIzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMCwgCisgICAgMjM1LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIzMCwgMjM2LCA5NiwgMjI3LCAxOTMsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjI5LCAKKyAgICAxMTIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjI1LCAxMTEsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjIyLCAxNDIsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjA2LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyMSwgCisgICAgMjMzLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyMCwgMTA0LCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIyMCwgNjUsIDE1LCA1LCAKKyAgICAyMzUsIDE5LCAzMCwgMjIwLCAzMiwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTksIDIyNywgMTUsIDUsIDIzNSwgMTksIDMwLCAKKyAgICAyMTksIDE4NCwgMTUsIDUsIDIzNSwgMTksIDMwLCAyMTgsIDUyLCAxNSwgNSwgMjM1LCAxOSwgMzAsIDIxNywgNTEsIDE1LCAKKyAgICA1LCAyMzUsIDE5LCAzMCwgNjksIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMzUsIDE5LCAzMCwgCisgICAgMjE0LCAyMTksIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE0LCAxOTMsIDMwLCAxOTEsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjE0LCAKKyAgICAxMjYsIDE1LCA1LCAyMzUsIDE5LCAzMCwgMjEwLCA0NCwgMTUsIDUsIDIzNSwgMTcsIDE1LCA1LCAyMzUsIDE4LCAyNDksIAorICAgIDEzMywgMjM1LCAxNywgMTUsIDUsIDIzNSwgMTAsIDE1LCA1LCAyMzUsIDcsIDE1LCA1LCAyMzUsIDUsIDE1LCA1LCAyMzUsIAorICAgIDQsIDE1LCA1LCAyMzUsIDIsIDE1LCA1LCAyMzUsIDMsIDExNSwgMjM1LCAyLCAxNSwgNSwgMjM0LCAyNDgsIDE1LCA1LCAKKyAgICAyMzQsIDI0OSwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjM0LCAyNDQsIDE1LCA1LCAyMzQsIDI0NSwgMzAsIAorICAgIDI1MiwgMTg0LCAxNSwgNSwgMjM0LCAyNDUsIDI0OSwgMTMzLCAyMzQsIDI0NCwgMTUsIDUsIDIzNCwgMjQyLCAxNSwgNSwgCisgICAgMjM0LCAyNDEsIDE1LCA1LCAyMzQsIDIxMywgMTUsIDUsIDIzNCwgMjE0LCAyMzMsIDEyNCwgMzAsIDEwNCwgMTE1LCAyMzMsIAorICAgIDEyNCwgMzAsIDY5LCAxNSwgNSwgMjM0LCAyMTQsIDExNSwgMjM0LCAyMTQsIDIzMywgMTI0LCAzMCwgMTA0LCAxMTUsIDIzMywgCisgICAgMTI0LCAzMCwgNjksIDE1LCA1LCAyMzQsIDE2MywgMTUsIDUsIDIzNCwgOTgsIDE1LCA1LCAyMzQsIDk5LCAzMCwgMjUyLCAKKyAgICAxODQsIDE1LCA1LCAyMzQsIDk5LCAzMCwgNjksIDE1LCA1LCAyMzQsIDk5LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMzQsIAorICAgIDk1LCAxNSwgNSwgMjM0LCA4NywgMTUsIDUsIDIzNCwgNzQsIDE1LCA1LCAyMzQsIDczLCAxNSwgNSwgMjM0LCA3MSwgMTUsIAorICAgIDUsIDIzNCwgNzIsIDExNSwgMjM0LCA3MSwgMTUsIDUsIDIzMywgMjIzLCAxNSwgNSwgMjMzLCAyMjQsIDExNSwgMjQxLCAKKyAgICAxODgsIDMwLCAyNTMsIDIzOCwgMjMzLCAyMjQsIDExNSwgMjQxLCAxODgsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDIzMywgCisgICAgMjIxLCAxNSwgNSwgMjMzLCAyMTksIDE1LCA1LCAyMzMsIDIyMCwgMjE0LCAxMiwgMTcsIDE1LCA1LCAyMzMsIDIxOCwgMTUsIAorICAgIDUsIDIzMywgMjE1LCAxNSwgNSwgMjMzLCAyMTYsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAyMTQsIDE1LCA1LCAyMzMsIDIwMiwgCisgICAgMTUsIDUsIDIzMywgMjAzLCAyMjYsIDE2OCwgMjMzLCAyMDIsIDE1LCA1LCAyMzMsIDE5NywgMTUsIDUsIDIzMywgMTc4LCAKKyAgICAxNSwgNSwgMjMzLCAxNDEsIDE1LCA1LCAyMzMsIDEyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgNjEsIDE1LCA1LCAyMzMsIAorICAgIDEyNCwgMzAsIDExNiwgOTYsIDI0OCwgMjMwLCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAxMTYsIDk2LCAyNDMsIAorICAgIDEwMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMTE2LCA5NiwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI1NCwgCisgICAgMTg3LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUzLCAyNDAsIDIxMCwgCisgICAgNDAsIDIxNiwgMjQwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNTIsIDE4NCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjUyLCAKKyAgICAxNCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQ4LCAxNzQsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0NSwgMTU4LCAxNSwgNSwgCisgICAgMjMzLCAxMjQsIDMwLCAyNDMsIDE0MiwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgCisgICAgMzAsIDI0MiwgMTEwLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyNDIsIDExMSwgOTYsIDI0MiwgMTEwLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAxNjIsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MiwgMzcsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDI0MSwgCisgICAgMTg4LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzYsIDI0LCA5NiwgMTYyLCAxNSwgNSwgMjMzLCAxMjQsIAorICAgIDMwLCAyMzYsIDI0LCA5NiwgMjMyLCAxMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMzMsIDEyNCwgCisgICAgMzAsIDIzNCwgODcsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMywgMjIxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzMsIAorICAgIDIxNSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMzLCAyMTYsIDk2LCAyNDEsIDE4OCwgOTYsIDYxLCAxNSwgNSwgMjMzLCAKKyAgICAxMjQsIDMwLCAyMzMsIDEyMywgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjMyLCAyMDMsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIAorICAgIDIzMiwgMTAzLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzIsIDkxLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMzEsIDk2LCAxNSwgCisgICAgNSwgMjMzLCAxMjQsIDMwLCAyMzEsIDk3LCA5NiwgMjQ1LCAxNTgsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIzMCwgNjYsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMjAsIDY2LCA5NiwgMjE4LCA0NCwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMjIwLCAxMiwgOTYsIDI0MiwgMTk4LCA5NiwgMjQ1LCA5NSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgCisgICAgMjIwLCAxMiwgOTYsIDI0MiwgMTk4LCAyMTYsIDI0MCwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAKKyAgICAyMzMsIDEyNCwgMzAsIDIxOSwgMjI2LCA5NiwgMjE5LCAyMjUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxOCwgNDQsIDE1LCAKKyAgICA1LCAyMzMsIDEyNCwgMzAsIDIxNywgODUsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDIxNywgNzMsIDE1LCA1LCAyMzMsIDEyNCwgCisgICAgMzAsIDIxNywgMjQsIDk2LCAxMTYsIDk2LCAyMTgsIDg1LCA5NiwgMTk4LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCA2OSwgMTUsIAorICAgIDUsIDIzMywgMTI0LCAzMCwgMTA0LCA5NiwgNjEsIDE1LCA1LCAyMzMsIDEyNCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDY5LCAKKyAgICAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjMzLCAxMjQsIDMwLCAyMTQsIAorICAgIDIxOSwgMTUsIDUsIDIzMywgMTI0LCAzMCwgMjE0LCAxMjYsIDE1LCA1LCAyMzMsIDEyNCwgMjE4LCAyMzUsIDE1LCA1LCAKKyAgICAyMzMsIDEyMSwgMTUsIDUsIDIzMywgMTIyLCAzMCwgMjIwLCA2NSwgMTUsIDUsIDIzMywgMTIyLCAzMCwgMjIwLCA2NiwgOTYsIAorICAgIDIxOCwgNDQsIDE1LCA1LCAyMzMsIDEyMiwgMjQyLCAxMDEsIDE1LCA1LCAyMzMsIDEyMiwgMjQyLCAxMDIsIDExNSwgMjMzLCAKKyAgICAxMjIsIDI0MiwgMTAyLCAyMjAsIDY1LCAxNSwgNSwgMjMzLCAxMTcsIDE1LCA1LCAyMzMsIDExMCwgMTUsIDUsIDIzMywgCisgICAgMTExLCAzMCwgMjMzLCAxMTAsIDE1LCA1LCAyMzMsIDEwOCwgMTUsIDUsIDIzMywgMTA5LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAKKyAgICAyMzMsIDEwOSwgMzAsIDIzMywgMjAzLCA5NiwgMjIyLCAxNDIsIDE1LCA1LCAyMzIsIDI0NywgMTUsIDUsIDIzMiwgMjMyLCAKKyAgICAxNSwgNSwgMjMyLCAyMjIsIDE1LCA1LCAyMzIsIDIwMywgMTUsIDUsIDIzMiwgMTAzLCAxNSwgNSwgMjMyLCAxMDQsIDMwLCAKKyAgICAyNTIsIDE4NCwgMTUsIDUsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNTQsIDE4NywgMTUsIDUsIDIzMiwgCisgICAgMTAyLCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDI0NSwgODAsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIAorICAgIDI0NSwgODEsIDIxNiwgMjQwLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyNDMsIDExMiwgMjE2LCAyNDAsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMzAsIDI0MSwgMTg4LCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMzIsIDEwMiwgMzAsIDIzNiwgMjMsIDE1LCA1LCAKKyAgICAyMzIsIDEwMiwgMzAsIDIzNSwgNywgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjM1LCA1LCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAKKyAgICAyMzUsIDYsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjM0LCA5OCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgCisgICAgMjMzLCAxNDIsIDk2LCAyNTMsIDIzOSwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjMzLCAxMjMsIDE1LCA1LCAyMzIsIDEwMiwgCisgICAgMzAsIDIzMSwgOTcsIDk2LCAyNDUsIDE1OCwgMTUsIDUsIDIzMiwgMTAyLCAzMCwgMjI5LCAxMTIsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMzAsIDIyNywgMjQyLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMTksIDE5NCwgOTYsIDI1MywgMjM5LCAxNSwgNSwgCisgICAgMjMyLCAxMDIsIDMwLCAyMTksIDE3NiwgOTYsIDI1MSwgMTMzLCAxNSwgNSwgMjMyLCAxMDIsIDMwLCAyMTUsIDExNCwgMTUsIAorICAgIDUsIDIzMiwgMTAyLCAyMTYsIDI0MCwgMTUsIDUsIDIzMiwgMTAyLCAyNDksIDEzMywgMjMyLCAxMDEsIDE1LCA1LCAyMzIsIAorICAgIDEwMiwgMjI2LCAxNjgsIDIzMiwgMTAxLCAxNSwgNSwgMjMyLCAxMDIsIDIxOCwgMjM1LCAxNSwgNSwgMjMyLCAxMDIsIDIyMCwgCisgICAgNDcsIDE1LCA1LCAyMzIsIDEwMCwgMTUsIDUsIDIzMiwgOTYsIDE1LCA1LCAyMzIsIDk3LCAxMTUsIDIzMiwgOTYsIDE1LCA1LCAKKyAgICAyMzIsIDk3LCAyMjYsIDE2OCwgMjMyLCA5NiwgMTUsIDUsIDIzMiwgOTcsIDIyMCwgNDcsIDE1LCA1LCAyMzIsIDk0LCAxNSwgCisgICAgNSwgMjMyLCA5MSwgMTUsIDUsIDIzMiwgODksIDE1LCA1LCAyMzIsIDkwLCAxMTUsIDIzMiwgODksIDE1LCA1LCAyMzIsIDkwLCAKKyAgICAxMTUsIDIzMiwgOTAsIDI0MywgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMTg2LCAxNSwgNSwgMjMxLCAyNDQsIDMwLCAKKyAgICAyMTcsIDczLCAxNSwgNSwgMjMxLCAyNDQsIDI0MiwgMTAxLCAxNSwgNSwgMjMxLCAyNDMsIDE1LCA1LCAyMzEsIDIxNSwgMTUsIAorICAgIDUsIDIzMSwgMTcxLCAxNSwgNSwgMjMxLCAxNTIsIDE1LCA1LCAyMzEsIDE1MSwgMTUsIDUsIDIzMSwgOTYsIDE1LCA1LCAKKyAgICAyMzEsIDUyLCAxNSwgNSwgMjMwLCAyMzUsIDE1LCA1LCAyMzAsIDE5MywgMTUsIDUsIDIzMCwgMTA3LCAxNSwgNSwgMjMwLCAKKyAgICAxMDgsIDExNSwgMjMwLCAxMDcsIDE1LCA1LCAyMzAsIDk4LCAxNSwgNSwgMjMwLCA5OSwgMjQyLCAxMDEsIDE1LCA1LCAyMzAsIAorICAgIDgzLCAxNSwgNSwgMjMwLCA2OSwgMTUsIDUsIDIzMCwgNjYsIDE1LCA1LCAyMzAsIDY3LCAzMCwgNjEsIDE1LCA1LCAyMzAsIAorICAgIDY3LCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMzAsIDY3LCAzMCwgMjEwLCAxMTYsIDE1LCA1LCAyMzAsIDY3LCAxMTUsIDIzMCwgCisgICAgNjYsIDE1LCA1LCAyMzAsIDY3LCAxMTUsIDIzMCwgNjcsIDMwLCAxMTYsIDk2LCAxOTgsIDE1LCA1LCAyMzAsIDY3LCAyNDksIAorICAgIDEzMywgMjMwLCA2NiwgMTUsIDUsIDIzMCwgNjQsIDE1LCA1LCAyMzAsIDY1LCAzMCwgNjEsIDE1LCA1LCAyMzAsIDY1LCAzMCwgCisgICAgMTE2LCA5NiwgMjQ4LCAxMSwgMTUsIDUsIDIzMCwgNjUsIDMwLCAyNDgsIDExLCAxNSwgNSwgMjMwLCA2NSwgMjQyLCAxMDEsIAorICAgIDE1LCA1LCAxOTgsIDE1LCA1LCAyMjksIDIzMiwgMTUsIDUsIDIyOSwgMjIxLCAxNSwgNSwgMjI5LCAyMjIsIDIzNSwgMTk5LCAKKyAgICAxNSwgNSwgMjI5LCAyMjIsIDMwLCAyMTksIDIyOCwgMjE2LCAyNDAsIDE1LCA1LCAyMjksIDIyMiwgMjI2LCAxNjgsIDIyOSwgCisgICAgMjIxLCAxNSwgNSwgMjI5LCAyMjAsIDE1LCA1LCAyMjksIDIxMywgMjI3LCAxODQsIDE1LCA1LCAyMjksIDIxMiwgMTUsIDUsIAorICAgIDIyOSwgMjExLCAxNSwgNSwgMjI5LCAxMTIsIDE1LCA1LCAyMjksIDExMywgMzAsIDYxLCAxNSwgNSwgMjI5LCAxMTMsIDMwLCAKKyAgICAyMTQsIDIxOSwgMTUsIDUsIDIyOSwgMTEzLCAyMjAsIDQ3LCAxNSwgNSwgMjI4LCAyMzgsIDE1LCA1LCAyMjgsIDIzOSwgMzAsIAorICAgIDc2LCAxNSwgNSwgMjI4LCAyMzcsIDE1LCA1LCAyMjgsIDIwOCwgMTUsIDUsIDIyOCwgMjA5LCAzMCwgMjQzLCAxMTIsIDIxNiwgCisgICAgMjQwLCAxNSwgNSwgMjI4LCAyMDksIDMwLCAyNDMsIDEwNCwgOTYsIDI0MywgMTEyLCAyMTYsIDI0MCwgMTUsIDUsIDIyOCwgCisgICAgMjA2LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyNTQsIDEzMSwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjUzLCAyMzksIDE1LCA1LCAKKyAgICAyMjgsIDIwNywgMzAsIDI1MywgMjQwLCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgMzAsIDI0MiwgMTEwLCAxNSwgCisgICAgNSwgMjI4LCAyMDcsIDMwLCAyMzEsIDk3LCA5NiwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAKKyAgICAyMjksIDExMiwgMTUsIDUsIDIyOCwgMjA3LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyMCwgNjUsIAorICAgIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyMCwgNjYsIDk2LCAxMTYsIDI1NCwgMTMxLCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAKKyAgICAyMjAsIDY2LCA5NiwgMjUzLCAyMzksIDE1LCA1LCAyMjgsIDIwNywgMzAsIDIyMCwgNjYsIDk2LCAyNTMsIDI0MCwgOTYsIAorICAgIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjM5LCAxNSwgNSwgMjI4LCAyMDcsIAorICAgIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyOCwgMTk1LCAxNSwgNSwgMjI3LCAyNDIsIDE1LCA1LCAyMjcsIDIxNCwgMTUsIDUsIAorICAgIDIyNywgMTk4LCAxNSwgNSwgMjI3LCAxOTksIDIzMywgMTIyLCAzMCwgMjQzLCAxMDMsIDE1LCA1LCAyMjcsIDE5OSwgMjMzLCAKKyAgICAxMjIsIDMwLCAyMzEsIDE1MiwgMTUsIDUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDIyMiwgMTAsIDE1LCA1LCAyMjcsIAorICAgIDE5OSwgMjMzLCAxMjIsIDMwLCAyMjIsIDExLCAxMTUsIDIyNywgMTk5LCAyMzMsIDEyMiwgMzAsIDIyMiwgMTAsIDE1LCA1LCAKKyAgICAyMjcsIDE5OSwgMjMzLCAxMjIsIDMwLCAyMTQsIDEyNiwgMTUsIDUsIDIyNywgMTk5LCAyMTYsIDI0MCwgMTUsIDUsIDIyNywgCisgICAgMTk5LCAxMTUsIDIyNywgMTk4LCAxNSwgNSwgMjI3LCAxOTksIDI0OSwgMTMzLCAyMjcsIDE5OCwgMTUsIDUsIDIyNywgMTk5LCAKKyAgICAyNDksIDEzMywgMjI3LCAxOTksIDIzMywgMTIyLCAxMTUsIDIzMywgMTIxLCAxNSwgNSwgMjI3LCAxOTMsIDE1LCA1LCAyMjcsIAorICAgIDE5NCwgMjU1LCAzMywgMzAsIDI1MywgMjM0LCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyNTIsIDE0LCAxNSwgNSwgCisgICAgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyNDYsIDgyLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyNDIsIDExMCwgCisgICAgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjM2LCA0MywgMjQyLCAxMDEsIDE1LCA1LCAyMjcsIDE5NCwgMjU1LCAKKyAgICAzMywgMzAsIDIzNSwgNSwgMTUsIDUsIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjMzLCAxNDEsIDE1LCA1LCAyMjcsIDE5NCwgCisgICAgMjU1LCAzMywgMzAsIDIyOSwgMTEyLCAxNSwgNSwgMjI3LCAxOTQsIDI1NSwgMzMsIDMwLCAyMTksIDE3MywgMTUsIDUsIAorICAgIDIyNywgMTk0LCAyNTUsIDMzLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjcsIDE5NCwgMjM0LCA3MiwgMzAsIDI1MiwgMTQsIAorICAgIDE1LCA1LCAyMjcsIDE5NCwgMjM0LCA3MiwgMzAsIDI1MiwgMTUsIDY5LCAxNSwgNSwgMTkxLCAxNSwgNSwgMjI2LCA4NCwgCisgICAgMTUsIDUsIDIyNiwgNTEsIDE1LCA1LCAyMjYsIDI1LCAxNSwgNSwgMjI1LCAxNjQsIDE1LCA1LCAyMjUsIDExMSwgMTUsIDUsIAorICAgIDIyNSwgMTEyLCAzMCwgNjEsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI1NSwgMzQsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI1MiwgCisgICAgMTQsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI1MSwgMTMzLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCA3NiwgMTUsIDUsIDIyNSwgCisgICAgMTEyLCAzMCwgNzQsIDE1LCA1LCAyMjUsIDExMiwgMzAsIDI0MCwgMTIyLCAxNSwgNSwgMjI1LCAxMTIsIDMwLCA2OSwgMTUsIAorICAgIDUsIDIyNSwgMTEyLCAzMCwgMjE0LCAyMzAsIDE1LCA1LCAyMjUsIDExMiwgMjQ5LCAxMzMsIDIyNSwgMTExLCAxNSwgNSwgCisgICAgMjI1LCA1NiwgMTUsIDUsIDIyNSwgNTcsIDMwLCAyMzQsIDI0NCwgMTUsIDUsIDIyNSwgNTcsIDMwLCAyMTQsIDIxOSwgMTUsIAorICAgIDUsIDIyNSwgNTcsIDMwLCAyMTAsIDExNiwgMTUsIDUsIDIyNSwgNTcsIDIyNiwgMTY4LCAyMjUsIDU2LCAxNSwgNSwgMjA1LCAKKyAgICAxNSwgNSwgMjIzLCAxODUsIDE1LCA1LCAyMjMsIDM4LCAxNSwgNSwgMjIyLCAxNDIsIDE1LCA1LCAyMDYsIDE1LCA1LCAyMjIsIAorICAgIDI0LCAyMjcsIDE4NCwgMTUsIDUsIDIyMiwgMjMsIDE1LCA1LCAyMjIsIDI0LCAzMCwgNjEsIDE1LCA1LCAyMjIsIDI0LCAzMCwgCisgICAgMjQ2LCA4NiwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyNDYsIDg0LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDE2MiwgMTUsIDUsIAorICAgIDIyMiwgMjQsIDMwLCAyMzQsIDI0OCwgMTUsIDUsIDIyMiwgMjQsIDMwLCAyMzMsIDIwMiwgMTUsIDUsIDIyMiwgMjQsIDMwLCAKKyAgICAyMzIsIDg5LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIzMCwgMjM1LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIyNywgMTk4LCAxNSwgCisgICAgNSwgMjIyLCAyNCwgMzAsIDIyMiwgMTAsIDE1LCA1LCAyMjIsIDI0LCAzMCwgMjIwLCAzMiwgMTUsIDUsIDIyMiwgMjQsIDMwLCAKKyAgICAyMTcsIDk0LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMjI1LCAxNSwgCisgICAgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMTk3LCAxNSwgNSwgMjIyLCAyNCwgMzAsIDIxNCwgMTUwLCAxNSwgNSwgMjIyLCAyNCwgCisgICAgMzAsIDIxNCwgMTI2LCAxNSwgNSwgMjIyLCAyNCwgMTE1LCAyMjIsIDIzLCAxNSwgNSwgMjIyLCAyNCwgMjQyLCAxMDEsIDE1LCAKKyAgICA1LCAyMjIsIDEwLCAxNSwgNSwgMjIyLCAxMSwgMjMzLCAxMjQsIDMwLCAyNTMsIDIzNywgMTUsIDUsIDIyMSwgMjQxLCAxNSwgCisgICAgNSwgMjIxLCAyMzMsIDE1LCA1LCAyMjAsIDEwNCwgMTUsIDUsIDIyMCwgMTAyLCAxNSwgNSwgMjIwLCAxMDMsIDMwLCA2MSwgCisgICAgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMjUyLCAxODQsIDE1LCA1LCAyMjAsIDEwMywgMzAsIDI0MiwgMTk3LCAxNSwgNSwgMjIwLCAKKyAgICAxMDMsIDMwLCAyMjksIDExMiwgMTUsIDUsIDIyMCwgMTAzLCAzMCwgMjE5LCAyMjUsIDE1LCA1LCAyMjAsIDEwMywgMzAsIAorICAgIDIxNSwgOTksIDE1LCA1LCAyMjAsIDEwMywgMzAsIDY5LCAxNSwgNSwgMjIwLCAxMDMsIDMwLCAxMDQsIDk2LCA2MSwgMTUsIAorICAgIDUsIDIyMCwgMTAxLCAxNSwgNSwgMjIwLCA5OSwgMTUsIDUsIDIyMCwgODAsIDE1LCA1LCAyMjAsIDY1LCAxNSwgNSwgMjIwLCAKKyAgICA2NiwgMjQwLCAyMjksIDE1LCA1LCAyMjAsIDY2LCAxMTUsIDIyMCwgNjYsIDI0MywgMTM0LCAxMTUsIDI0MywgMTM0LCAyNDMsIAorICAgIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIyMCwgNjYsIDExNSwgMjIwLCA2NiwgMjE3LCA5NSwgMTE1LCAyMTcsIDk1LCAKKyAgICAyNDMsIDEwNCwgMTE1LCAyNDMsIDEwMywgMTUsIDUsIDIyMCwgNTgsIDE1LCA1LCAyMjAsIDUzLCAxNSwgNSwgMjIwLCA1MCwgCisgICAgMTUsIDUsIDIyMCwgNDksIDE1LCA1LCAyMjAsIDQ2LCAxNSwgNSwgMjIwLCAzMiwgMTUsIDUsIDIyMCwgMzMsIDMwLCA2MSwgCisgICAgMTUsIDUsIDIyMCwgMzMsIDMwLCAyMzYsIDIzLCAxNSwgNSwgMjIwLCAyNiwgMTUsIDUsIDIyMCwgMjcsIDMwLCA2MSwgMTUsIAorICAgIDUsIDIyMCwgMjcsIDMwLCAyNTIsIDE2OSwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyNTEsIDExNywgMTUsIDUsIDIyMCwgMjcsIAorICAgIDMwLCAyNDcsIDIxNCwgMTUsIDUsIDIyMCwgMjcsIDMwLCAyNDMsIDEwMywgMTUsIDUsIDIyMCwgMjcsIDMwLCAyMzYsIDQyLCAKKyAgICAxNSwgNSwgMjIwLCAyNywgMzAsIDIzNiwgNDMsIDI0MiwgMTAxLCAxNSwgNSwgMjIwLCAyNywgMzAsIDIzMywgMTk3LCAxNSwgCisgICAgNSwgMjIwLCAyNywgMzAsIDIzMiwgOTEsIDE1LCA1LCAyMjAsIDI3LCAzMCwgMjMwLCA5OCwgMTUsIDUsIDIyMCwgMjcsIDMwLCAKKyAgICAyMjIsIDEwLCAxNSwgNSwgMjIwLCAyMCwgMTUsIDUsIDIyMCwgMTUsIDE1LCA1LCAyMjAsIDE2LCAyMTYsIDI0MCwgMTUsIDUsIAorICAgIDIyMCwgMTYsIDExNSwgMjIwLCAxNiwgMjUxLCAxMDcsIDExNSwgMjUxLCAxMDYsIDE1LCA1LCAyMjAsIDExLCAxNSwgNSwgCisgICAgMjE5LCAyMjcsIDE1LCA1LCAyMTksIDIyOCwgMTE1LCAyMzUsIDIwMCwgMjE5LCAyMjcsIDE1LCA1LCAyMTksIDIyNSwgMTUsIAorICAgIDUsIDIxOSwgMjI0LCAxNSwgNSwgMjE5LCAxOTMsIDE1LCA1LCAyMTksIDE5NCwgMjQyLCAxMDEsIDE1LCA1LCAyMTksIDE4NCwgCisgICAgMTUsIDUsIDIxOSwgMTgyLCAxNSwgNSwgMjE5LCAxODMsIDExNSwgMjE5LCAxODMsIDIxOSwgMjI1LCAxNSwgNSwgMjE5LCAKKyAgICAxNzUsIDE1LCA1LCAyMTksIDE3MywgMTUsIDUsIDIxOCwgODQsIDE1LCA1LCAyMTgsIDg1LCAxMTUsIDIxOCwgODQsIDE1LCAKKyAgICA1LCAyMTgsIDU1LCAxNSwgNSwgMjE4LCA1NCwgMTUsIDUsIDIxOCwgNTIsIDE1LCA1LCAyMTgsIDQ0LCAxNSwgNSwgMjE4LCAKKyAgICA0MywgMTUsIDUsIDIxOCwgMTgsIDE1LCA1LCAyMTgsIDE3LCAxNSwgNSwgMjE3LCAxMDYsIDE1LCA1LCAyMTcsIDEwNywgCisgICAgMjUzLCAyMjQsIDE1LCA1LCAyMTcsIDEwNywgMzAsIDI0MSwgMTg3LCAxNSwgNSwgMjE3LCAxMDcsIDMwLCAyMzAsIDIzNSwgCisgICAgMTUsIDUsIDIxNywgMTA3LCAyNDIsIDEwMSwgMTUsIDUsIDIxNywgOTQsIDE1LCA1LCAyMTcsIDk1LCAxMTUsIDIxNywgOTUsIAorICAgIDIyOCwgMjM5LCAxMTUsIDIyOCwgMjM5LCAyNDcsIDE5NiwgMTE1LCAyNDcsIDE5NSwgMTUsIDUsIDIxNywgOTUsIDIxOCwgCisgICAgMjM1LCAxNSwgNSwgMjE3LCA4NSwgMTUsIDUsIDEyOSwgMzAsIDI1MiwgMTQsIDE1LCA1LCAxMjksIDMwLCAyNDIsIDExMCwgCisgICAgMTUsIDUsIDEyOSwgMzAsIDIyMCwgNjUsIDE1LCA1LCAxMjksIDMwLCAyMTksIDIyNywgMTUsIDUsIDEyOSwgMzAsIDIxNSwgCisgICAgMTE0LCAxNSwgNSwgMTI5LCAzMCwgMjE0LCAyMTksIDE1LCA1LCAyMTcsIDczLCAxNSwgNSwgMjE3LCA1MSwgMTUsIDUsIAorICAgIDIxNywgMjMsIDE1LCA1LCAyMTcsIDI0LCAyNDIsIDEwMSwgMTUsIDUsIDIxNiwgMTE4LCAxNSwgNSwgMjE2LCAxMTksIDIxNiwgCisgICAgMjQwLCAxNSwgNSwgMjE2LCA5MSwgMTUsIDUsIDIxNiwgNzMsIDE1LCA1LCAyMTYsIDc0LCAzMCwgMjE3LCA3MywgMTUsIDUsIAorICAgIDIxNiwgNzQsIDExNSwgMjE2LCA3MywgMTUsIDUsIDIxNiwgNzQsIDExNSwgMjE2LCA3NCwgMjQzLCAxMzQsIDExNSwgMjQzLCAKKyAgICAxMzQsIDI0MywgMTA0LCAxMTUsIDI0MywgMTAzLCAxNSwgNSwgMjE1LCAxMTksIDE1LCA1LCAyMTUsIDExNCwgMTUsIDUsIAorICAgIDIxNSwgMTEyLCAxNSwgNSwgMjE1LCAxMDksIDE1LCA1LCAyMTUsIDk5LCAxNSwgNSwgMjE1LCAxMDAsIDExNSwgMjE1LCAKKyAgICAxMDAsIDIxMCwgMTE3LCAxMTUsIDIxMCwgMTE2LCAxNSwgNSwgNjksIDE1LCA1LCAxMDQsIDI0MiwgMTEwLCAxNSwgNSwgCisgICAgMTA0LCAxMDQsIDY5LCAxNSwgNSwgMTA0LCAxMTUsIDEwNCwgMjI2LCA5NCwgMTE1LCAyMjYsIDk0LCAyNDMsIDEwNCwgMTE1LCAKKyAgICAyNDMsIDEwMywgMTUsIDUsIDEwNCwgMTE1LCAxMDQsIDIxOCwgMTksIDExNSwgMjE4LCAxOCwgMTUsIDUsIDEwNCwgMTE1LCAKKyAgICAxMDQsIDEwNCwgMjIzLCA1MiwgMTE1LCAxMDQsIDIyMywgNTEsIDE1LCA1LCAyMTQsIDIzMCwgMTUsIDUsIDIxNCwgMjI1LCAKKyAgICAxNSwgNSwgMjE0LCAyMTksIDE1LCA1LCAyMTQsIDIyMCwgMjMzLCAxOTcsIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDI1MiwgCisgICAgMTg0LCAxNSwgNSwgMjE0LCAyMjAsIDMwLCAyMzAsIDIzNSwgMTUsIDUsIDIxNCwgMjIwLCAzMCwgMTA0LCA5NiwgMTA0LCAKKyAgICA5NiwgNjksIDE1LCA1LCAyMTQsIDIyMCwgMzAsIDEwNCwgOTYsIDEwNCwgOTYsIDEwNCwgMjQyLCAxMDEsIDE1LCA1LCAyMTQsIAorICAgIDIyMCwgMjQyLCAxMDEsIDE1LCA1LCAyMTQsIDIyMCwgMjIwLCA0NywgMTUsIDUsIDIxNCwgMjIwLCAyMjAsIDQ4LCAzMCwgCisgICAgMjUyLCAxODQsIDE1LCA1LCAyMTQsIDIxNSwgMTUsIDUsIDIxNCwgMTk3LCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAyMzMsIAorICAgIDEyMywgMTUsIDUsIDIxNCwgMTk4LCAzMCwgMjMxLCA5NywgOTYsIDI0OCwgMjI5LCAxNSwgNSwgMjE0LCAxOTgsIDMwLCAKKyAgICAyMjAsIDEwMiwgMTUsIDUsIDIxNCwgMTk4LCAzMCwgNjksIDE1LCA1LCAyMTQsIDE5NiwgMTUsIDUsIDIxNCwgMTkyLCAxNSwgCisgICAgNSwgMjE0LCAxOTMsIDMwLCAyMzQsIDIxMywgMTUsIDUsIDIxNCwgMTkzLCAzMCwgMTkxLCAxNSwgNSwgMjE0LCAxOTAsIDE1LCAKKyAgICA1LCAyMTQsIDE5MSwgMjQyLCAxMDEsIDE1LCA1LCAyMTQsIDE1MCwgMTUsIDUsIDIxNCwgMTUxLCAyNDksIDEzMywgMjE0LCAKKyAgICAxNTAsIDE1LCA1LCAyMTQsIDE1MSwgMjIwLCA0NywgMTUsIDUsIDIxNCwgMTQ4LCAxNSwgNSwgMjE0LCAxNDksIDMwLCAxMTYsIAorICAgIDk2LCAxNjIsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDExNiwgOTYsIDE5OCwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjU0LCAKKyAgICAxODcsIDE1LCA1LCAyMTQsIDE0OSwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQ5LCAzMCwgMjI3LCAxOTgsIDE1LCA1LCAyMTQsIAorICAgIDE0OSwgMzAsIDIxNCwgMjMwLCAxNSwgNSwgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MywgMjM5LCAxNSwgNSwgCisgICAgMjE0LCAxNDksIDMwLCAyMTQsIDIzMSwgOTYsIDI1MiwgMTQsIDE1LCA1LCAyMTQsIDE0NywgMTUsIDUsIDIxNCwgMTQ0LCAKKyAgICAxNSwgNSwgMjE0LCAxNDMsIDE1LCA1LCAyMTQsIDEzOSwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgNjEsIDE1LCA1LCAyMTQsIAorICAgIDE0MCwgMzAsIDI1MywgMjM0LCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxMzAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0NiwgCisgICAgNzYsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDI0MywgMTQyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEyNSwgMTUsIDUsIAorICAgIDIxNCwgMTQwLCAzMCwgMjQzLCAxMTIsIDIxNiwgMjQwLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyNDMsIDEwMywgMTUsIDUsIAorICAgIDIxNCwgMTQwLCAzMCwgMjQyLCAxMjAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDE2MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgCisgICAgMjM2LCA0MiwgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM2LCAyMywgMTUsIDUsIDIxNCwgMTQwLCAzMCwgMjM1LCAxNzIsIDE1LCAKKyAgICA1LCAyMTQsIDE0MCwgMzAsIDIzNCwgOTgsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIzMiwgODksIDE1LCA1LCAyMTQsIDE0MCwgCisgICAgMzAsIDIzMCwgMTkzLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAxOTEsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIyMCwgNjUsIDE1LCAKKyAgICA1LCAyMTQsIDE0MCwgMzAsIDIxOSwgMTgyLCAxNSwgNSwgMjE0LCAxNDAsIDMwLCAyMTUsIDExOSwgMTUsIDUsIDIxNCwgCisgICAgMTQwLCAzMCwgMTA0LCA5NiwgMjQyLCAxMTAsIDE1LCA1LCAyMTQsIDE0MCwgMzAsIDIxNCwgMjE5LCAxNSwgNSwgMjE0LCAKKyAgICAxNDAsIDMwLCAyMTQsIDEzNywgMTUsIDUsIDIxNCwgMTM3LCAxNSwgNSwgMjE0LCAxMzgsIDMwLCA2OSwgMTUsIDUsIDIxNCwgCisgICAgMTI2LCAxNSwgNSwgMjE0LCAxMjcsIDMwLCA2MSwgMTUsIDUsIDIxNCwgMTI3LCAzMCwgMjMzLCAyMjMsIDE1LCA1LCAyMTQsIAorICAgIDEyNywgMzAsIDIzMywgMjAyLCAxNSwgNSwgMjE0LCAxMjcsIDMwLCAyMTcsIDczLCAxNSwgNSwgMjE0LCAxMjIsIDE1LCA1LCAKKyAgICAyMTQsIDEyNSwgMTUsIDUsIDIxNCwgMTIzLCAxNSwgNSwgMjE0LCAxMTksIDE1LCA1LCAyMTQsIDEwOCwgMTUsIDUsIDIxNCwgCisgICAgMTA5LCAzMCwgMjM0LCAyMTMsIDE1LCA1LCAyMTQsIDEwNywgMTUsIDUsIDIxMCwgMTE2LCAxNSwgNSwgMjEwLCAxMTcsIAorICAgIDIxNiwgMjQwLCAxNSwgNSwgMjEwLCAxMTcsIDkyLCAzMCwgMjMzLCAyMDIsIDE1LCA1LCAyMTAsIDExMywgMTUsIDUsIDIxMCwgCisgICAgMTA2LCAxNSwgNSwgMjEwLCA5MywgMTUsIDUsIDIxMCwgNDQsIDE1LCA1LCAyMTAsIDQ1LCAxMTUsIDIxMCwgNDQsIDE1LCA1LCAKKyAgICAyMTAsIDQzLCAxNSwgNSwgMjEwLCA0MSwgMTUsIDUsIDIxMCwgNDIsIDIzNSwgOSwgMjE2LCAyNDAsIDE1LCA1LCAyMTAsIAorICAgIDM2LCAxNSwgNSwgMjEwLCAyOCwgMTUsIDUsIDIxMCwgMTMsIDE1LCA1LCAyMTAsIDExLCAxNSwgNSwgMjEwLCAxMiwgMzAsIAorICAgIDYxLCAxNSwgNSwgMjEwLCAxMCwgMTUsIDUsIDIxMCwgOSwgMTUsIDEzMiwgNSwgMTEzLCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyNTMsIDIzOSwgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MywgCisgICAgMjM5LCAxNSwgMTMyLCA1LCAyMTksIDEyNywgMjUzLCAyMzksIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyNTMsIDIzOSwgMTUsIAorICAgIDEzMiwgNSwgMjQ1LCAyMDEsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjUzLCAyMzksIDE1LCAxMzIsIDUsIAorICAgIDEzNCwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNDcsIAorICAgIDE5NSwgMTUsIDEzMiwgNSwgMjE5LCAxMjcsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjQ3LCAxOTUsIDE1LCAKKyAgICAxMzIsIDUsIDI0NSwgMjAxLCAyNDcsIDE5NSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAKKyAgICAyNDQsIDE5LCA2OSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgNjksIDE1LCAxMzIsIDUsIDIxOSwgMTI3LCA2OSwgMTUsIDEzMiwgCisgICAgNSwgMjIwLCAxMjQsIDY5LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgNjksIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCA2OSwgMTUsIAorICAgIDEzMiwgNSwgMTIzLCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAxMTMsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDEzNCwgMjQzLCA0NSwgCisgICAgMTUsIDEzMiwgNSwgMjQ0LCAxOSwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjQzLCA0NSwgMTUsIDEzMiwgNSwgCisgICAgMjE5LCAxMjcsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDIyMCwgMTI0LCAyNDMsIDQ1LCAxNSwgMTMyLCA1LCAyNDUsIDIwMSwgCisgICAgMjQzLCA0NSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIDI0MywgNDUsIDE1LCAxMzIsIDUsIDEyMywgMjQzLCA0MiwgMTUsIAorICAgIDEzMiwgNSwgMTEzLCAyNDMsIDQyLCAxNSwgMTMyLCA1LCAxMzQsIDI0MywgNDIsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI0MywgCisgICAgNDIsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI0MywgNDIsIDE1LCAxMzIsIDUsIDExMywgMjIwLCA4MCwgMTUsIDEzMiwgNSwgCisgICAgMTM0LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAxMzQsIDIyMCwgODEsIDIxNCwgMTIsIDE3LCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAKKyAgICAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAyMTksIDEyNywgMjIwLCA4MCwgMTUsIAorICAgIDEzMiwgNSwgMjIwLCAxMjQsIDIyMCwgODAsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMjAsIDgwLCAxNSwgMTMyLCA1LCAKKyAgICAyMjgsIDIwNSwgMjIwLCA4MCwgMTUsIDEzMiwgNSwgMTIzLCAyMjAsIDc1LCAxNSwgMTMyLCA1LCAxMTMsIDIyMCwgNzUsIAorICAgIDE1LCAxMzIsIDUsIDEzNCwgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMTM0LCAyMjAsIDc2LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgCisgICAgNSwgMjQ0LCAxOSwgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjIwLCA3NSwgMTUsIDEzMiwgNSwgMjIwLCA4MSwgCisgICAgMzAsIDI0MywgMTI2LCA5NiwgMjQ3LCAxOTUsIDE1LCAxMzIsIDUsIDIyMCwgODEsIDMwLCAyNDMsIDEyNiwgOTYsIDIzMCwgCisgICAgMTkzLCAxNSwgMTMyLCA1LCAxMjMsIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAxMTMsIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAKKyAgICAxMzQsIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAxMzQsIDI1MSwgMTA0LCAyMTQsIDEyLCAxNywgMTUsIDEzMiwgNSwgMjQ0LCAKKyAgICAxOSwgMjUxLCAxMDMsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MSwgMTAzLCAxNSwgMTMyLCA1LCAxMzQsIDIxNCwgMTIsIAorICAgIDI0NCwgMjgsIDI0NSwgODIsIDE1LCAxMzIsIDUsIDEzNCwgMjE0LCAxMiwgMjQ0LCAyOCwgMjQ1LCA3OSwgMTUsIDEzMiwgNSwgCisgICAgMjQ0LCAxOSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjMyLCAyMjMsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgCisgICAgMjgsIDIzMiwgMjIxLCAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzIsIDIyNCwgNjEsIDE1LCAKKyAgICAxMzIsIDUsIDI0NCwgMTksIDIxNCwgMTIsIDI0NCwgMjgsIDIzMiwgMjI0LCAyNTMsIDE2NiwgMTUsIDEzMiwgNSwgMjE5LCAKKyAgICAxMjcsIDIxNCwgMTIsIDI0NCwgMjgsIDI1MywgMjM2LCAxNSwgMTMyLCA1LCAyMjAsIDEyNCwgMjE0LCAxMiwgMjQ0LCAyOCwgCisgICAgMjM2LCAxNSwgMTUsIDEzMiwgNSwgMjIwLCAxMjQsIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMTcsIDYxLCAxNSwgMTMyLCA1LCAKKyAgICAyMjAsIDEyNCwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAxNywgMjUzLCAxNjYsIDE1LCAxMzIsIDUsIDI0NSwgMjAxLCAyMTQsIAorICAgIDEyLCAyNDQsIDI4LCAyMTQsIDEyMSwgMTUsIDEzMiwgNSwgMjQ1LCAyMDEsIDIxNCwgMTIsIDI0NCwgMjgsIDIxNCwgMTIwLCAKKyAgICAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAzMSwgMTUsIDEzMiwgNSwgMjI4LCAyMDUsIAorICAgIDIxNCwgMTIsIDI0NCwgMjgsIDIzNiwgMzAsIDE1LCAxMzIsIDUsIDIyOCwgMjA1LCAyMTQsIDEyLCAyNDQsIDI4LCAyMzYsIAorICAgIDI5LCAxNSwgMTMyLCA1LCAyMjgsIDIwNSwgMjE0LCAxMiwgMjQ0LCAyOCwgMjM2LCAzMiwgNjEsIDE1LCAxMzIsIDUsIDExMywgCisgICAgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAxMzQsIDI1MywgMjQwLCAyMTYsIDI0MCwgMTUsIDEzMiwgNSwgMjQ0LCAKKyAgICAxOSwgMjUzLCAyNDAsIDIxNiwgMjQwLCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIAorICAgIDUsIDIxOSwgMTI3LCAyNTMsIDI0MCwgMjE2LCAyNDAsIDE1LCAxMzIsIDUsIDEyMywgMjUyLCAxNTgsIDE1LCAxMzIsIDUsIAorICAgIDExMywgMjUyLCAxNTgsIDE1LCAxMzIsIDUsIDEzNCwgMjUyLCAxNTgsIDE1LCAxMzIsIDUsIDI0NCwgMTksIDI1MiwgMTU4LCAKKyAgICAxNSwgMTMyLCA1LCAyNDQsIDE5LCAyNTIsIDE1OSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDI0NCwgODksIDI1MiwgCisgICAgMTU4LCAxNSwgMTMyLCA1LCAyNDQsIDg5LCAyNTIsIDE1OSwgMjE0LCAxMiwgMTcsIDE1LCAxMzIsIDUsIDIyOCwgMjE1LCAKKyAgICAxNSwgMTMyLCA1LCAyMjgsIDIxNiwgMTUsIDEzMiwgNSwgMTIzLCAyNDUsIDc4LCAxNSwgMTMyLCA1LCAxMTMsIDI0NSwgNzgsIAorICAgIDE1LCAxMzIsIDUsIDEyMywgMjE2LCAxNzAsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAxMTMsIDIxNiwgMTY4LCAyNDcsIDE5NSwgCisgICAgMTUsIDEzMiwgNSwgMjQ0LCA4OSwgMjE5LCAxMTYsIDI0NywgMTk1LCAxNSwgMTMyLCA1LCAxMjMsIDIxNiwgMTcwLCAyMTQsIAorICAgIDEyLCAyNDQsIDI4LCA2MSwgMTUsIDEzMiwgNSwgMTEzLCAyMTYsIDE2OCwgMjE0LCAxMiwgMjQ0LCAyOCwgNjEsIDE1LCAKKyAgICAxMzIsIDUsIDEyMywgMjQ1LCAxOTcsIDI1MywgMjM5LCAxNSwgMTMyLCA1LCAxMjMsIDIyNCwgMjUsIDI1MywgMjM5LCAxNSwgCisgICAgMTMyLCA1LCA1NSwgMjUzLCAyMjcsIDEyMywgMjE5LCAxMTcsIDE1LCAxMzIsIDUsIDU1LCAyNTMsIDIyNywgMTIzLCAyMjQsIAorICAgIDI0LCAxNSwgMjI0LCAxNDQsIDUsIDU1LCAyNTMsIDIyNywgMjExLCAyMDksIDI0NywgMTgwLCAxNSwgMjI0LCAxNDQsIDUsIAorICAgIDY3LCAyNDksIDIzNCwgMTUsIDIyNCwgMTQ0LCA1LCAyNDgsIDcsIDI0OSwgMjM0LCAxNSwgMjI0LCAxNDQsIDUsIDI0OCwgNywgCisgICAgMjE1LCAyMjIsIDEyLCAxMywgMjU1LCAxNjQsIDEyLCAxMywgMjU1LCAxNjMsIDEyLCAxMywgMjU1LCAxNjIsIDEyLCAxMywgCisgICAgMjU1LCAxNjEsIDEyLCAxMywgMjU1LCAxNjAsIDEyLCAxMywgMjU1LCAxNTksIDEyLCAxMywgMjU1LCAxNTgsIDEyLCAxMywgCisgICAgMjU1LCAxNTcsIDEyLCAxMywgMjU1LCAxNTYsIDEyLCAxMywgMjU1LCAxNTUsIDEyLCAxMywgMjU1LCAxNTQsIDEyLCAxMywgCisgICAgMjU1LCAxNTMsIDEyLCAxMywgMjU1LCAxNTIsIDEyLCAxMywgMjU1LCAxNTEsIDEyLCAxMywgMjU1LCAxNTAsIDEyLCAxMywgCisgICAgMjU1LCAxNDksIDEyLCAxMywgMjU1LCAxNDgsIDEyLCAxMywgMjU1LCAxNDcsIDEyLCAxMywgMjU1LCAxNDYsIDEyLCAxMywgCisgICAgMjU1LCAxNDUsIDEyLCAxMywgMjU1LCAxNDQsIDEyLCAxMywgMjU1LCAxNDMsIDEyLCAxMywgMjU1LCAxNDIsIDEyLCAxMywgCisgICAgMjU1LCAxNDEsIDEyLCAxMywgMjU1LCAxNDAsIDEyLCAxMywgMjU1LCAxMzksIDEyLCAxMywgMjU1LCAxMzgsIDEyLCAxMywgCisgICAgMjU1LCAxMzcsIDEyLCAxMywgMjU1LCAxMzYsIDEyLCAxMywgMjU1LCAxMzUsIDEyLCAxMywgMjU1LCAxMzQsIDEyLCAxMywgCisgICAgMjU1LCAxMzMsIDEyLCAxMywgMjU1LCAxMzIsIDEyLCAxMywgMjU1LCAxMzEsIDEyLCAxMywgMjU1LCAxMzAsIDEyLCAxMywgCisgICAgMjU1LCAxMjksIDEyLCAxMywgMjU1LCAxMjgsIDEyLCAxMywgMjU1LCAxMjcsIDEyLCAxMywgMjU1LCAxMjYsIDEyLCAxMywgCisgICAgMjU1LCAxMjUsIDEyLCAxMywgMjU1LCAxMjQsIDEyLCAxMywgMjU1LCAxMjMsIDEyLCAxMywgMjU1LCAxMjIsIDEyLCAxMywgCisgICAgMjU1LCAxMjEsIDEyLCAxMywgMjU1LCAxMjAsIDEyLCAxMywgMjU1LCAxMTksIDEyLCAxMywgMjU1LCAxMTgsIDEyLCAxMywgCisgICAgMjU1LCAxMTcsIDEyLCAxMywgMjU1LCAxMTYsIDEyLCAxMywgMjU1LCAxMTUsIDEyLCAxMywgMjU1LCAxMTQsIDEyLCAxMywgCisgICAgMjU1LCAxMTMsIDEyLCAxMywgMjU1LCAxMTIsIDEyLCAxMywgMjU1LCAxMTEsIDEyLCAxMywgMjU1LCAxMTAsIDEyLCAxMywgCisgICAgMjU1LCAxMDksIDEyLCAxMywgMjU1LCAxMDgsIDEyLCAxMywgMjU1LCAxMDcsIDEyLCAxMywgMjU1LCAxMDYsIDEyLCAxMywgCisgICAgMjU1LCAxMDUsIDEyLCAxMywgMjU1LCAxMDQsIDEyLCAxMywgMjU1LCAxMDMsIDEyLCAxMywgMjU1LCAxMDIsIDEyLCAxMywgCisgICAgMjU1LCAxMDEsIDEyLCAxMywgMjU1LCAxMDAsIDEyLCAxMywgMjU1LCA5OSwgMTIsIDEzLCAyNTUsIDk4LCAxMiwgMTMsIAorICAgIDI1NSwgOTcsIDEyLCAxMywgMjU1LCA5NiwgMTIsIDEzLCAyNTUsIDk1LCAxMiwgMTMsIDI1NSwgOTQsIDEyLCAxMywgMjU1LCAKKyAgICA5MywgMTIsIDEzLCAyNTUsIDkyLCAxMiwgMTMsIDI1NSwgOTEsIDEyLCAxMywgMjU1LCA5MCwgMTIsIDEzLCAyNTUsIDg5LCAKKyAgICAxMiwgMTMsIDI1NSwgODgsIDEyLCAxMywgMjU1LCA4NywgMTIsIDEzLCAyNTUsIDg2LCAxMiwgMTMsIDI1NSwgODUsIDEyLCAKKyAgICAxMywgMjUzLCAxNjQsIDEyLCAxMywgMjUzLCAxNjIsIDEyLCAxMywgMjUzLCAxNjAsIDEyLCAxMywgMjUzLCAxNTgsIDEyLCAKKyAgICAxMywgMjUzLCAxNTYsIDEyLCAxMywgMjUzLCAxNTUsIDEyLCAxMywgMjUzLCAxNTMsIDEyLCAxMywgMjUzLCAxNTEsIDEyLCAKKyAgICAxMywgMjUzLCAxNDksIDEyLCAxMywgMjUzLCAxNDcsIDEyLCAxMywgMjUxLCA3MCwgMTIsIDEzLCAyNTEsIDY5LCAxMiwgMTMsIAorICAgIDI1MSwgNjgsIDEyLCAxMywgMjUxLCA2NywgMTIsIDEzLCAyNTEsIDY2LCAxMiwgMTMsIDI1MSwgNjUsIDEyLCAxMywgMjUxLCAKKyAgICA2NCwgMTIsIDEzLCAyNTEsIDYzLCAxMiwgMTMsIDI1MSwgNjIsIDEyLCAxMywgMjUxLCA2MSwgMTIsIDEzLCAyNTEsIDYwLCAKKyAgICAxMiwgMTMsIDI1MSwgNTksIDEyLCAxMywgMjUxLCA1OCwgMTIsIDEzLCAyNTEsIDU3LCAxMiwgMTMsIDI1MSwgNTYsIDEyLCAKKyAgICAxMywgMjUxLCA1NSwgMTIsIDEzLCAyNTEsIDU0LCAxMiwgMTMsIDI1MSwgNTMsIDEyLCAxMywgMjUxLCA1MiwgMTIsIDEzLCAKKyAgICAyNTEsIDUxLCAxMiwgMTMsIDI1MSwgNTAsIDEyLCAxMywgMjUxLCA0OSwgMTIsIDEzLCAyNTEsIDQ4LCAxMiwgMTMsIDI1MSwgCisgICAgNDcsIDEyLCAxMywgMjUxLCA0NiwgMTIsIDEzLCAyNTEsIDQ1LCAxMiwgMTMsIDI1MSwgNDQsIDEyLCAxMywgMjUxLCA0MywgCisgICAgMTIsIDEzLCAyNDksIDY3LCAxMiwgMTMsIDI0OSwgNjYsIDEyLCAxMywgMjQ5LCA2NSwgMTIsIDEzLCAyNDksIDY0LCAxMiwgCisgICAgMTMsIDI0OSwgNjMsIDEyLCAxMywgMjQ5LCA2MiwgMTIsIDEzLCAyNDksIDYxLCAxMiwgMTMsIDI0OSwgNjAsIDEyLCAxMywgCisgICAgMjQ5LCA1OSwgMTIsIDEzLCAyNDksIDU4LCAxMiwgMTMsIDI0OSwgNTcsIDEyLCAxMywgMjQ5LCA1NiwgMTIsIDEzLCAyNDksIAorICAgIDU1LCAxMiwgMTMsIDI0OSwgNTQsIDEyLCAxMywgMjQ5LCA1MywgMTIsIDEzLCAyNDksIDUyLCAxMiwgMTMsIDI0OSwgNTEsIAorICAgIDEyLCAxMywgMjQ5LCA1MCwgMTIsIDEzLCAyNDksIDQ5LCAxMiwgMTMsIDI0OSwgNDgsIDEyLCAxMywgMjQ5LCA0NywgMTIsIAorICAgIDEzLCAyNDksIDQ2LCAxMiwgMTMsIDI0OSwgNDUsIDEyLCAxMywgMjQ5LCA0NCwgMTIsIDEzLCAyNDksIDQzLCAxMiwgMTMsIAorICAgIDI0OSwgNDIsIDEyLCAxMywgMjQ5LCA0MSwgMTIsIDEzLCAyNDksIDQwLCAxMiwgMTMsIDI0OSwgMzksIDEyLCAxMywgMjQ5LCAKKyAgICAzOCwgMTIsIDEzLCAyNDksIDM3LCAxMiwgMTMsIDI0OSwgMzYsIDEyLCAxMywgMjQ5LCAzNSwgMTIsIDEzLCAyNDksIDM0LCAKKyAgICAxMiwgMTMsIDI0OSwgMzMsIDEyLCAxMywgMjQ5LCAzMiwgMTIsIDEzLCAyNDksIDMxLCAxMiwgMTMsIDI0OSwgMzAsIDEyLCAKKyAgICAxMywgMjQ5LCAyOSwgMTIsIDEzLCAyNDksIDI4LCAxMiwgMTMsIDI0OSwgMjcsIDEyLCAxMywgMjQ5LCAyNiwgMTIsIDEzLCAKKyAgICAyNDksIDI1LCAxMiwgMTMsIDI0OSwgMjQsIDEyLCAxMywgMjQ5LCAyMywgMTIsIDEzLCAyNDksIDIyLCAxMiwgMTMsIDI0OSwgCisgICAgMjEsIDEyLCAxMywgMjQ5LCAyMCwgMTIsIDEzLCAyNDksIDE5LCAxMiwgMTMsIDI0OSwgMTgsIDEyLCAxMywgMjQ5LCAxNywgCisgICAgMTIsIDEzLCAyNDksIDE2LCAxMiwgMTMsIDI0OSwgMTUsIDEyLCAxMywgMjQ5LCAxNCwgMTIsIDEzLCAyNDksIDEzLCAxMiwgCisgICAgMTMsIDI0OSwgMTIsIDEyLCAxMywgMjQ5LCAxMSwgMTIsIDEzLCAyNDksIDEwLCAxMiwgMTMsIDI0OSwgOSwgMTIsIDEzLCAKKyAgICAyNDksIDgsIDEyLCAxMywgMjQ5LCA3LCAxMiwgMTMsIDI0OSwgNiwgMTIsIDEzLCAyNDksIDUsIDEyLCAxMywgMjQ5LCA0LCAKKyAgICAxMiwgMTMsIDI0OSwgMywgMTIsIDEzLCAyNDksIDIsIDEyLCAxMywgMjQ5LCAxLCAxMiwgMTMsIDI0OSwgMCwgMTIsIDEzLCAKKyAgICAyNDgsIDI1NSwgMTIsIDEzLCAyNDgsIDI1NCwgMTIsIDEzLCAyNDgsIDI1MywgMTIsIDEzLCAyNDgsIDI1MiwgMTIsIDEzLCAKKyAgICAyNDgsIDI1MSwgMTIsIDEzLCAyNDgsIDI1MCwgMTIsIDEzLCAyNDgsIDI0OSwgMTIsIDEzLCAyNDgsIDI0OCwgMTIsIDEzLCAKKyAgICAyNDgsIDI0NywgMTIsIDEzLCAyNDgsIDI0NiwgMTIsIDEzLCAyNDgsIDI0NSwgMTIsIDEzLCAyNDgsIDI0NCwgMTIsIDEzLCAKKyAgICAyNDgsIDI0MywgMTIsIDEzLCAyNDgsIDI0MiwgMTIsIDEzLCAyNDgsIDI0MSwgMTIsIDEzLCAyNDgsIDI0MCwgMTIsIDEzLCAKKyAgICAyNDgsIDIzOSwgMTIsIDEzLCAyNDgsIDIzOCwgMTIsIDEzLCAyNDgsIDIzNywgMTIsIDEzLCAyNDgsIDIzNiwgMTIsIDEzLCAKKyAgICAyNDgsIDIzNSwgMTIsIDEzLCAyNDgsIDIzNCwgMTIsIDEzLCAyNDgsIDIzMywgMTIsIDEzLCAyNDgsIDIzMiwgMTIsIDEzLCAKKyAgICAyNDYsIDMxLCAxMiwgMTMsIDI0NiwgMzAsIDEyLCAxMywgMjQ2LCAyOSwgMTIsIDEzLCAyNDYsIDI4LCAxMiwgMTMsIDI0NiwgCisgICAgMjcsIDEyLCAxMywgMjQ2LCAyNiwgMTIsIDEzLCAyNDYsIDI1LCAxMiwgMTMsIDI0NiwgMjQsIDEyLCAxMywgMjQ2LCAyMywgCisgICAgMTIsIDEzLCAyNDYsIDIyLCAxMiwgMTMsIDI0NiwgMjEsIDEyLCAxMywgMjQ2LCAyMCwgMTIsIDEzLCAyNDYsIDE5LCAxMiwgCisgICAgMTMsIDI0NiwgMTgsIDEyLCAxMywgMjQ2LCAxNywgMTIsIDEzLCAyNDYsIDE2LCAxMiwgMTMsIDI0NiwgMTUsIDEyLCAxMywgCisgICAgMjQ2LCAxNCwgMTIsIDEzLCAyNDYsIDEzLCAxMiwgMTMsIDI0NiwgMTIsIDEyLCAxMywgMjQ2LCAxMSwgMTIsIDEzLCAyNDYsIAorICAgIDEwLCAxMiwgMTMsIDI0NiwgOSwgMTIsIDEzLCAyNDYsIDgsIDEyLCAxMywgMjQ2LCA3LCAxMiwgMTMsIDI0NiwgNiwgMTIsIAorICAgIDEzLCAyNDYsIDUsIDEyLCAxMywgMjQ2LCA0LCAxMiwgMTMsIDI0NiwgMywgMTIsIDEzLCAyNDYsIDIsIDEyLCAxMywgMjQ2LCAKKyAgICAxLCAxMiwgMTMsIDI0NiwgMCwgMTIsIDEzLCAyNDUsIDI1NSwgMTIsIDEzLCAyNDUsIDI1NCwgMTIsIDEzLCAyNDUsIDI1MywgCisgICAgMTIsIDEzLCAyNDUsIDI1MiwgMTIsIDEzLCAyNDUsIDI1MSwgMTIsIDEzLCAyNDUsIDI1MCwgMTIsIDEzLCAyNDUsIDI0OSwgCisgICAgMTIsIDEzLCAyNDUsIDI0OCwgMTIsIDEzLCAyNDUsIDI0NywgMTIsIDEzLCAyNDUsIDI0NiwgMTIsIDEzLCAyNDUsIDI0NSwgCisgICAgMTIsIDEzLCAyNDUsIDI0NCwgMTIsIDEzLCAyNDUsIDEzLCAxMiwgMTMsIDI0NSwgMTIsIDEyLCAxMywgMjQ1LCAxMSwgMTIsIAorICAgIDEzLCAyNDUsIDEwLCAxMiwgMTMsIDI0NSwgOSwgMTIsIDEzLCAyNDUsIDgsIDEyLCAxMywgMjQ1LCA3LCAxMiwgMTMsIDI0NSwgCisgICAgNiwgMTIsIDEzLCAyNDUsIDUsIDEyLCAxMywgMjQ1LCA0LCAxMiwgMTMsIDI0NSwgMywgMTIsIDEzLCAyNDUsIDIsIDEyLCAKKyAgICAxMywgMjQ1LCAxLCAxMiwgMTMsIDI0NSwgMCwgMTIsIDEzLCAyNDQsIDI1NSwgMTIsIDEzLCAyNDQsIDI1NCwgMTIsIDEzLCAKKyAgICAyNDQsIDI1MywgMTIsIDEzLCAyNDQsIDI1MiwgMTIsIDEzLCAyNDQsIDI1MSwgMTIsIDEzLCAyNDQsIDI1MCwgMTIsIDEzLCAKKyAgICAyNDQsIDI0OSwgMTIsIDEzLCAyNDQsIDI0OCwgMTIsIDEzLCAyNDQsIDI0NywgMTIsIDEzLCAyNDQsIDI0NiwgMTIsIDEzLCAKKyAgICAyNDQsIDI0NSwgMTIsIDEzLCAyNDQsIDI0NCwgMTIsIDEzLCAyNDQsIDI0MywgMTIsIDEzLCAyNDQsIDI0MiwgMTIsIDEzLCAKKyAgICAyNDQsIDI0MSwgMTIsIDEzLCAyNDQsIDI0MCwgMTIsIDEzLCAyNDQsIDIzOSwgMTIsIDEzLCAyNDQsIDIzOCwgMTIsIDEzLCAKKyAgICAyNDQsIDIzNywgMTIsIDEzLCAyNDQsIDIzNiwgMTIsIDEzLCAyNDQsIDIzNSwgMTIsIDEzLCAyNDQsIDIzNCwgMTIsIDEzLCAKKyAgICAyNDQsIDIzMywgMTIsIDEzLCAyNDQsIDIzMiwgMTIsIDEzLCAyNDQsIDIzMSwgMTIsIDEzLCAyNDQsIDIzMCwgMTIsIDEzLCAKKyAgICAyNDQsIDIyOSwgMTIsIDEzLCAyNDQsIDIyOCwgMTIsIDEzLCAyNDQsIDIyNywgMTIsIDEzLCAyNDQsIDIyNiwgMTIsIDEzLCAKKyAgICAyNDQsIDIyNSwgMTIsIDEzLCAyNDQsIDIyNCwgMTIsIDEzLCAyNDQsIDIyMywgMTIsIDEzLCAyNDQsIDIyMiwgMTIsIDEzLCAKKyAgICAyNDQsIDIyMSwgMTIsIDEzLCAyNDQsIDIyMCwgMTIsIDEzLCAyNDQsIDIxOSwgMTIsIDEzLCAyNDQsIDIxOCwgMTIsIDEzLCAKKyAgICAyNDQsIDIxNywgMTIsIDEzLCAyNDQsIDIxNiwgMTIsIDEzLCAyNDQsIDIxNSwgMTIsIDEzLCAyNDQsIDIxNCwgMTIsIDEzLCAKKyAgICAyNDQsIDIxMywgMTIsIDEzLCAyNDQsIDIxMiwgMTIsIDEzLCAyNDQsIDIxMSwgMTIsIDEzLCAyNDQsIDIxMCwgMTIsIDEzLCAKKyAgICAyNDQsIDIwOSwgMTIsIDEzLCAyNDQsIDIwOCwgMTIsIDEzLCAyNDQsIDIwNywgMTIsIDEzLCAyNDQsIDIwNiwgMTIsIDEzLCAKKyAgICAyNDQsIDIwNSwgMTIsIDEzLCAyNDMsIDIwOCwgMTIsIDEzLCAyNDMsIDIwNywgMTIsIDEzLCAyNDMsIDIwNiwgMTIsIDEzLCAKKyAgICAyNDMsIDIwNSwgMTIsIDEzLCAyNDMsIDIwNCwgMTIsIDEzLCAyNDMsIDIwMywgMTIsIDEzLCAyNDMsIDIwMiwgMTIsIDEzLCAKICAgICAyNDMsIDIwMSwgMTIsIDEzLCAyNDMsIDIwMCwgMTIsIDEzLCAyNDMsIDE5OSwgMTIsIDEzLCAyNDMsIDE5OCwgMTIsIDEzLCAKICAgICAyNDMsIDE5NywgMTIsIDEzLCAyNDMsIDE5NiwgMTIsIDEzLCAyNDMsIDE5NSwgMTIsIDEzLCAyNDMsIDE5NCwgMTIsIDEzLCAKICAgICAyNDMsIDE5MywgMTIsIDEzLCAyNDMsIDE5MiwgMTIsIDEzLCAyNDMsIDE5MSwgMTIsIDEzLCAyNDMsIDE5MCwgMTIsIDEzLCAKQEAgLTEyMDE1LDgxICsxMjAxNiw4MCBAQAogICAgIDI0MywgMTU3LCAxMiwgMTMsIDI0MywgMTU2LCAxMiwgMTMsIDI0MywgMTU1LCAxMiwgMTMsIDI0MywgMTU0LCAxMiwgMTMsIAogICAgIDI0MywgMTUzLCAxMiwgMTMsIDI0MywgMTUyLCAxMiwgMTMsIDI0MywgMTUxLCAxMiwgMTMsIDI0MywgMTUwLCAxMiwgMTMsIAogICAgIDI0MywgMTQ5LCAxMiwgMTMsIDI0MywgMTQ4LCAxMiwgMTMsIDI0MywgMTQ3LCAxMiwgMTMsIDI0MywgMTQ2LCAxMiwgMTMsIAotICAgIDI0MywgMTQ1LCAxMiwgMTMsIDI0MywgMTQ0LCAxMiwgMTMsIDI0MywgMTQzLCAxMiwgMTMsIDI0MywgMTQyLCAxMiwgMTMsIAotICAgIDI0MywgMTQxLCAxMiwgMTMsIDI0MywgMTQwLCAxMiwgMTMsIDI0MywgMTM5LCAxMiwgMTMsIDI0MywgMTM4LCAxMiwgMTMsIAotICAgIDI0MiwgNTgsIDEyLCAxMywgMjQyLCA1NywgMTIsIDEzLCAyNDIsIDU2LCAxMiwgMTMsIDI0MiwgNTUsIDEyLCAxMywgMjQyLCAKLSAgICA1NCwgMTIsIDEzLCAyNDIsIDUzLCAxMiwgMTMsIDI0MiwgNTIsIDEyLCAxMywgMjQyLCA1MSwgMTIsIDEzLCAyNDIsIDUwLCAKKyAgICAyNDMsIDE0NSwgMTIsIDEzLCAyNDIsIDY1LCAxMiwgMTMsIDI0MiwgNjQsIDEyLCAxMywgMjQyLCA2MywgMTIsIDEzLCAyNDIsIAorICAgIDYyLCAxMiwgMTMsIDI0MiwgNjEsIDEyLCAxMywgMjQyLCA2MCwgMTIsIDEzLCAyNDIsIDU5LCAxMiwgMTMsIDI0MiwgNTgsIAorICAgIDEyLCAxMywgMjQyLCA1NywgMTIsIDEzLCAyNDAsIDE0NSwgMTIsIDEzLCAyNDAsIDE0NCwgMTIsIDEzLCAyNDAsIDE0MywgCisgICAgMTIsIDEzLCAyNDAsIDE0MiwgMTIsIDEzLCAyNDAsIDE0MSwgMTIsIDEzLCAyNDAsIDE0MCwgMTIsIDEzLCAyNDAsIDEzOSwgCiAgICAgMTIsIDEzLCAyNDAsIDEzOCwgMTIsIDEzLCAyNDAsIDEzNywgMTIsIDEzLCAyNDAsIDEzNiwgMTIsIDEzLCAyNDAsIDEzNSwgCiAgICAgMTIsIDEzLCAyNDAsIDEzNCwgMTIsIDEzLCAyNDAsIDEzMywgMTIsIDEzLCAyNDAsIDEzMiwgMTIsIDEzLCAyNDAsIDEzMSwgCiAgICAgMTIsIDEzLCAyNDAsIDEzMCwgMTIsIDEzLCAyNDAsIDEyOSwgMTIsIDEzLCAyNDAsIDEyOCwgMTIsIDEzLCAyNDAsIDEyNywgCi0gICAgMTIsIDEzLCAyNDAsIDEyNiwgMTIsIDEzLCAyNDAsIDEyNSwgMTIsIDEzLCAyNDAsIDEyNCwgMTIsIDEzLCAyNDAsIDEyMywgCi0gICAgMTIsIDEzLCAyNDAsIDEyMiwgMTIsIDEzLCAyNDAsIDEyMSwgMTIsIDEzLCAyNDAsIDEyMCwgMTIsIDEzLCAyMzUsIDIyLCAKLSAgICAxMiwgMTMsIDIzNSwgMjEsIDEyLCAxMywgMjM1LCAyMCwgMTIsIDEzLCAyMzUsIDE5LCAxMiwgMTMsIDIzNSwgMTgsIDEyLCAKLSAgICAxMywgMjM1LCAxNywgMTIsIDEzLCAyMzUsIDE2LCAxMiwgMTMsIDIzNSwgMTUsIDEyLCAxMywgMjMzLCAxNDYsIDEyLCAxMywgCi0gICAgMjMzLCAxNDUsIDEyLCAxMywgMjMzLCAxNDQsIDEyLCAxMywgMjMzLCAxNDMsIDEyLCAxMywgMjMzLCAxNDIsIDEyLCAxMywgCi0gICAgMjMzLCAxNDEsIDEyLCAxMywgMjMzLCAxNDAsIDEyLCAxMywgMjMzLCAxMzksIDEyLCAxMywgMjMzLCAxMzgsIDEyLCAxMywgCi0gICAgMjMzLCAxMzcsIDEyLCAxMywgMjMyLCA0OSwgMTIsIDEzLCAyMzIsIDQ4LCAxMiwgMTMsIDIzMiwgNDcsIDEyLCAxMywgMjMyLCAKLSAgICA0NiwgMTIsIDEzLCAyMzIsIDQ1LCAxMiwgMTMsIDIzMiwgNDQsIDEyLCAxMywgMjMyLCA0MywgMTIsIDEzLCAyMzIsIDQyLCAKLSAgICAxMiwgMTMsIDIzMiwgNDEsIDEyLCAxMywgMjMyLCA0MCwgMTIsIDEzLCAyMzIsIDM5LCAxMiwgMTMsIDIzMiwgMzgsIDEyLCAKLSAgICAxMywgMjMyLCAzNywgMTIsIDEzLCAyMzIsIDM2LCAxMiwgMTMsIDIzMiwgMzUsIDEyLCAxMywgMjMyLCAzNCwgMTIsIDEzLCAKLSAgICAyMzIsIDMzLCAxMiwgMTMsIDIzMiwgMzIsIDEyLCAxMywgMjMyLCAzMSwgMTIsIDEzLCAyMzIsIDMwLCAxMiwgMTMsIDIzMiwgCi0gICAgMjksIDEyLCAxMywgMjMyLCAyOCwgMTIsIDEzLCAyMzIsIDI3LCAxMiwgMTMsIDIzMiwgMjYsIDEyLCAxMywgMjMyLCAyNSwgCi0gICAgMTIsIDEzLCAyMzIsIDI0LCAxMiwgMTMsIDIzMiwgMjMsIDEyLCAxMywgMjMyLCAyMiwgMTIsIDEzLCAyMzIsIDIxLCAxMiwgCi0gICAgMTMsIDIzMiwgMjAsIDEyLCAxMywgMjMyLCAxOSwgMTIsIDEzLCAyMzIsIDE4LCAxMiwgMTMsIDIzMiwgMTcsIDEyLCAxMywgCi0gICAgMjMyLCAxNiwgMTIsIDEzLCAyMzIsIDE1LCAxMiwgMTMsIDIzMiwgMTQsIDEyLCAxMywgMjMyLCAxMywgMTIsIDEzLCAyMzIsIAotICAgIDEyLCAxMiwgMTMsIDIzMiwgMTEsIDEyLCAxMywgMjMyLCAxMCwgMTIsIDEzLCAyMzIsIDksIDEyLCAxMywgMjMyLCA4LCAxMiwgCi0gICAgMTMsIDIzMiwgNywgMTIsIDEzLCAyMzIsIDYsIDEyLCAxMywgMjMyLCA1LCAxMiwgMTMsIDIzMiwgNCwgMTIsIDEzLCAyMzIsIAotICAgIDMsIDEyLCAxMywgMjMyLCAyLCAxMiwgMTMsIDIzMiwgMSwgMTIsIDEzLCAyMzIsIDAsIDEyLCAxMywgMjMxLCAyNTUsIDEyLCAKLSAgICAxMywgMjMxLCAyNTQsIDEyLCAxMywgMjMxLCAyNTMsIDEyLCAxMywgMjMxLCAyNTIsIDEyLCAxMywgMjMxLCAyNTEsIDEyLCAKLSAgICAxMywgMjMxLCAyNTAsIDEyLCAxMywgMjMxLCAyNDksIDEyLCAxMywgMjMxLCAyNDgsIDEyLCAxMywgMjMxLCAyNDcsIDEyLCAKLSAgICAxMywgMjMxLCAyNDYsIDEyLCAxMywgMjMxLCAyNDUsIDEyLCAxMywgMjMxLCAyNDQsIDEyLCAxMywgMjMxLCAyNDMsIDEyLCAKLSAgICAxMywgMjMxLCAyNDIsIDEyLCAxMywgMjMxLCAyNDEsIDEyLCAxMywgMjMxLCAyNDAsIDEyLCAxMywgMjMwLCAyMiwgMTIsIAotICAgIDEzLCAyMzAsIDIxLCAxMiwgMTMsIDIzMCwgMjAsIDEyLCAxMywgMjMwLCAxOSwgMTIsIDEzLCAyMzAsIDE4LCAxMiwgMTMsIAotICAgIDIzMCwgMTcsIDEyLCAxMywgMjMwLCAxNiwgMTIsIDEzLCAyMzAsIDE1LCAxMiwgMTMsIDIzMCwgMTQsIDEyLCAxMywgMjMwLCAKLSAgICAxMywgMTIsIDEzLCAyMzAsIDEyLCAxMiwgMTMsIDIzMCwgMTEsIDEyLCAxMywgMjMwLCAxMCwgMTIsIDEzLCAyMzAsIDksIAotICAgIDEyLCAxMywgMjMwLCA4LCAxMiwgMTMsIDIzMCwgNywgMTIsIDEzLCAyMzAsIDYsIDEyLCAxMywgMjMwLCA1LCAxMiwgMTMsIAotICAgIDIzMCwgNCwgMTIsIDEzLCAyMzAsIDMsIDEyLCAxMywgMjMwLCAyLCAxMiwgMTMsIDIzMCwgMSwgMTIsIDEzLCAyMzAsIDAsIAotICAgIDEyLCAxMywgMjI5LCAyNTUsIDEyLCAxMywgMjI5LCAyNTQsIDEyLCAxMywgMjI5LCAyNTMsIDEyLCAxMywgMjI5LCAyNTIsIAotICAgIDEyLCAxMywgMjI5LCAyNTEsIDEyLCAxMywgMjI5LCAyNTAsIDEyLCAxMywgMjI5LCAyNDksIDEyLCAxMywgMjI5LCAyNDgsIAotICAgIDEyLCAxMywgMjI5LCAyNDcsIDEyLCAxMywgMjI5LCAyNDYsIDEyLCAxMywgMjI5LCAyNDUsIDEyLCAxMywgMjI5LCAyNDQsIAotICAgIDEyLCAxMywgMjI5LCAyNDMsIDEyLCAxMywgMjI5LCAyNDIsIDEyLCAxMywgMjI5LCAyNDEsIDEyLCAxMywgMjI5LCAyNDAsIAotICAgIDEyLCAxMywgMjI5LCAyMzksIDEyLCAxMywgMjI5LCAyMzgsIDEyLCAxMywgMjI5LCAyMzcsIDEyLCAxMywgMjI5LCAyMzYsIAotICAgIDEyLCAxMywgMjI5LCAyMzUsIDEyLCAxMywgMjI5LCAyMzQsIDEyLCAxMywgMjI5LCAyMzMsIDEyLCAxMywgMjI5LCAyMzIsIAotICAgIDEyLCAxMywgMjI5LCAyMzEsIDEyLCAxMywgMjI5LCAyMzAsIDEyLCAxMywgMjI4LCAxMzQsIDEyLCAxMywgMjI4LCAxMzMsIAotICAgIDEyLCAxMywgMjI4LCAxMzIsIDEyLCAxMywgMjI4LCAxMzEsIDEyLCAxMywgMjI4LCAxMzAsIDEyLCAxMywgMjI4LCAxMjksIAotICAgIDEyLCAxMywgMjI4LCAxMjgsIDEyLCAxMywgMjI4LCAxMjcsIDEyLCAxMywgMjI4LCAxMjYsIDEyLCAxMywgMjI4LCAxMjUsIAotICAgIDEyLCAxMywgMjI4LCAxMjQsIDEyLCAxMywgMjI4LCAxMjMsIDEyLCAxMywgMjI4LCAxMjIsIDEyLCAxMywgMjI4LCAxMjEsIAotICAgIDEyLCAxMywgMjI4LCAxMjAsIDEyLCAxMywgMjI4LCAxMTksIDEyLCAxMywgMjI4LCAxMTgsIDEyLCAxMywgMjI4LCAxMTcsIAotICAgIDEyLCAxMywgMjI4LCAxMTYsIDEyLCAxMywgMjI4LCAxMTUsIDEyLCAxMywgMjI4LCAxMTQsIDEyLCAxMywgMjI4LCAxMTMsIAotICAgIDEyLCAxMywgMjI3LCAyMzYsIDEyLCAxMywgMjI3LCAyMzUsIDEyLCAxMywgMjI3LCAyMzQsIDEyLCAxMywgMjI3LCAyMzMsIAotICAgIDEyLCAxMywgMjI3LCAyMzIsIDEyLCAxMywgMjI3LCAyMzEsIDEyLCAxMywgMjI3LCAyMzAsIDEyLCAxMywgMjI3LCAyMjksIAotICAgIDEyLCAxMywgMjI3LCAyMjgsIDEyLCAxMywgMjI3LCAyMjcsIDEyLCAxMywgMjI3LCAyMjYsIDEyLCAxMywgMjI3LCAyMjUsIAotICAgIDEyLCAxMywgMjI3LCAyMjQsIDEyLCAxMywgMjI3LCAyMjMsIDEyLCAxMywgMjI3LCAyMjIsIDEyLCAxMywgMjI3LCAyMjEsIAotICAgIDEyLCAxMywgMjI3LCAyMjAsIDEyLCAxMywgMjI3LCAyMTksIDEyLCAxMywgMjI3LCAyMTgsIDEyLCAxMywgMjI3LCAyMTcsIAotICAgIDEyLCAxMywgMjI3LCAyMTYsIDEyLCAxMywgMjI3LCAyMTUsIDEyLCAxMywgMjI3LCAyMTQsIDEyLCAxMywgMjI3LCAyMTMsIAotICAgIDEyLCAxMywgMjI3LCAyMTIsIDEyLCAxMywgMjI3LCAyMTEsIDEyLCAxMywgMjI3LCA3NiwgMTIsIDEzLCAyMjcsIDc1LCAxMiwgCi0gICAgMTMsIDIyNywgNzQsIDEyLCAxMywgMjI3LCA3MywgMTIsIDEzLCAyMjcsIDcyLCAxMiwgMTMsIDIyNywgNzEsIDEyLCAxMywgCi0gICAgMjI3LCA3MCwgMTIsIDEzLCAyMjcsIDY5LCAxMiwgMTMsIDIyNywgNjgsIDEyLCAxMywgMjI3LCA2NywgMTIsIDEzLCAyMjcsIAotICAgIDY2LCAxMiwgMTMsIDIyNywgNjUsIDEyLCAxMywgMjI3LCA2NCwgMTIsIDEzLCAyMjcsIDYzLCAxMiwgMTMsIDIyNywgNjIsIAotICAgIDEyLCAxMywgMjI3LCA2MSwgMTIsIDEzLCAyMjcsIDYwLCAxMiwgMTMsIDIyNywgNTksIDEyLCAxMywgMjI3LCA1OCwgMTIsIAotICAgIDEzLCAyMjcsIDU3LCAxMiwgMTMsIDIyNywgNTYsIDEyLCAxMywgMjI3LCA1NSwgMTIsIDEzLCAyMjcsIDU0LCAxMiwgMTMsIAotICAgIDIyNywgNTMsIDEyLCAxMywgMjI3LCA1MiwgMTIsIDEzLCAyMjcsIDUxLCAxMiwgMTMsIDIyNywgNTAsIDEyLCAxMywgMjI3LCAKLSAgICA0OSwgMTIsIDEzLCAyMjcsIDQ4LCAxMiwgMTMsIDIyNywgNDcsIDEyLCAxMywgMjI3LCA0NiwgMTIsIDEzLCAyMjcsIDQ1LCAKLSAgICAxMiwgMTMsIDIyNywgNDQsIDEyLCAxMywgMjI3LCA0MywgMTIsIDEzLCAyMjcsIDQyLCAxMiwgMTMsIDIyNywgNDEsIDEyLCAKLSAgICAxMywgMjI3LCA0MCwgMTIsIDEzLCAyMjcsIDM5LCAxMiwgMTMsIDIyNywgMzgsIDEyLCAxMywgMjI3LCAzNywgMTIsIDEzLCAKLSAgICAyMjcsIDM2LCAxMiwgMTMsIDIyNywgMzUsIDEyLCAxMywgMjI3LCAzNCwgMTIsIDEzLCAyMjcsIDMzLCAxMiwgMTMsIDIyNywgCi0gICAgMzIsIDEyLCAxMywgMjI3LCAzMSwgMTIsIDEzLCAyMjcsIDMwLCAxMiwgMTMsIDIyNywgMjksIDEyLCAxMywgMjI3LCAyOCwgCi0gICAgMTIsIDEzLCAyMjcsIDI3LCAxMiwgMTMsIDIyNywgMjYsIDEyLCAxMywgMjI3LCAyNSwgMTIsIDEzLCAyMjcsIDI0LCAxMiwgCi0gICAgMTMsIDIyNywgMjMsIDEyLCAxMywgMjI3LCAyMiwgMTIsIDEzLCAyMjcsIDIxLCAxMiwgMTMsIDIyNywgMjAsIDEyLCAxMywgCi0gICAgMjI3LCAxOSwgMTIsIDEzLCAyMjcsIDE4LCAxMiwgMTMsIDIyNywgMTcsIDEyLCAxMywgMjI3LCAxNiwgMTIsIDEzLCAyMjcsIAotICAgIDE1LCAxMiwgMTMsIDIyNywgMTQsIDEyLCAxMywgMjI3LCAxMywgMTIsIDEzLCAyMjcsIDEyLCAxMiwgMTMsIDIyNywgMTEsIAotICAgIDEyLCAxMywgMjI3LCAxMCwgMTIsIDEzLCAyMjcsIDksIDEyLCAxMywgMjI3LCA4LCAxMiwgMTMsIDIyNywgNywgMTIsIDEzLCAKLSAgICAyMjcsIDYsIDEyLCAxMywgMjI3LCA1LCAxMiwgMTMsIDIyNywgNCwgMTIsIDEzLCAyMjcsIDMsIDEyLCAxMywgMjI3LCAyLCAKLSAgICAxMiwgMTMsIDIyNiwgMTA0LCAxMiwgMTMsIDIyNiwgMTAzLCAxMiwgMTMsIDIyNiwgMTAyLCAxMiwgMTMsIDIyNiwgMTAxLCAKLSAgICAxMiwgMTMsIDIyNiwgMTAwLCAxMiwgMTMsIDIyNiwgOTksIDEyLCAxMywgMjI2LCA5OCwgMTIsIDEzLCAyMjYsIDk3LCAxMiwgCi0gICAgMTMsIDIyNiwgOTYsIDEyLCAxMywgMjI2LCA5NSwgMTIsIDEzLCAyMjYsIDk0LCAxMiwgMTMsIDIyNiwgOTMsIDEyLCAxMywgCi0gICAgMjI2LCA5MiwgMTIsIDEzLCAyMjQsIDk1LCAxMiwgMTMsIDIyNCwgOTQsIDEyLCAxMywgMjI0LCA5MywgMTIsIDEzLCAyMjQsIAotICAgIDkyLCAxMiwgMTMsIDIyNCwgOTEsIDEyLCAxMywgMjI0LCA5MCwgMTIsIDEzLCAyMjQsIDg5LCAxMiwgMTMsIDIyMywgMjIyLCAKKyAgICAxMiwgMTMsIDIzNSwgMjgsIDEyLCAxMywgMjM1LCAyNywgMTIsIDEzLCAyMzUsIDI2LCAxMiwgMTMsIDIzNSwgMjUsIDEyLCAKKyAgICAxMywgMjM1LCAyNCwgMTIsIDEzLCAyMzUsIDIzLCAxMiwgMTMsIDIzNSwgMjIsIDEyLCAxMywgMjM1LCAyMSwgMTIsIDEzLCAKKyAgICAyMzMsIDE1MiwgMTIsIDEzLCAyMzMsIDE1MSwgMTIsIDEzLCAyMzMsIDE1MCwgMTIsIDEzLCAyMzMsIDE0OSwgMTIsIDEzLCAKKyAgICAyMzMsIDE0OCwgMTIsIDEzLCAyMzMsIDE0NywgMTIsIDEzLCAyMzMsIDE0NiwgMTIsIDEzLCAyMzMsIDE0NSwgMTIsIDEzLCAKKyAgICAyMzMsIDE0NCwgMTIsIDEzLCAyMzMsIDE0MywgMTIsIDEzLCAyMzIsIDU0LCAxMiwgMTMsIDIzMiwgNTMsIDEyLCAxMywgCisgICAgMjMyLCA1MiwgMTIsIDEzLCAyMzIsIDUxLCAxMiwgMTMsIDIzMiwgNTAsIDEyLCAxMywgMjMyLCA0OSwgMTIsIDEzLCAyMzIsIAorICAgIDQ4LCAxMiwgMTMsIDIzMiwgNDcsIDEyLCAxMywgMjMyLCA0NiwgMTIsIDEzLCAyMzIsIDQ1LCAxMiwgMTMsIDIzMiwgNDQsIAorICAgIDEyLCAxMywgMjMyLCA0MywgMTIsIDEzLCAyMzIsIDQyLCAxMiwgMTMsIDIzMiwgNDEsIDEyLCAxMywgMjMyLCA0MCwgMTIsIAorICAgIDEzLCAyMzIsIDM5LCAxMiwgMTMsIDIzMiwgMzgsIDEyLCAxMywgMjMyLCAzNywgMTIsIDEzLCAyMzIsIDM2LCAxMiwgMTMsIAorICAgIDIzMiwgMzUsIDEyLCAxMywgMjMyLCAzNCwgMTIsIDEzLCAyMzIsIDMzLCAxMiwgMTMsIDIzMiwgMzIsIDEyLCAxMywgMjMyLCAKKyAgICAzMSwgMTIsIDEzLCAyMzIsIDMwLCAxMiwgMTMsIDIzMiwgMjksIDEyLCAxMywgMjMyLCAyOCwgMTIsIDEzLCAyMzIsIDI3LCAKKyAgICAxMiwgMTMsIDIzMiwgMjYsIDEyLCAxMywgMjMyLCAyNSwgMTIsIDEzLCAyMzIsIDI0LCAxMiwgMTMsIDIzMiwgMjMsIDEyLCAKKyAgICAxMywgMjMyLCAyMiwgMTIsIDEzLCAyMzIsIDIxLCAxMiwgMTMsIDIzMiwgMjAsIDEyLCAxMywgMjMyLCAxOSwgMTIsIDEzLCAKKyAgICAyMzIsIDE4LCAxMiwgMTMsIDIzMiwgMTcsIDEyLCAxMywgMjMyLCAxNiwgMTIsIDEzLCAyMzIsIDE1LCAxMiwgMTMsIDIzMiwgCisgICAgMTQsIDEyLCAxMywgMjMyLCAxMywgMTIsIDEzLCAyMzIsIDEyLCAxMiwgMTMsIDIzMiwgMTEsIDEyLCAxMywgMjMyLCAxMCwgCisgICAgMTIsIDEzLCAyMzIsIDksIDEyLCAxMywgMjMyLCA4LCAxMiwgMTMsIDIzMiwgNywgMTIsIDEzLCAyMzIsIDYsIDEyLCAxMywgCisgICAgMjMyLCA1LCAxMiwgMTMsIDIzMiwgNCwgMTIsIDEzLCAyMzIsIDMsIDEyLCAxMywgMjMyLCAyLCAxMiwgMTMsIDIzMiwgMSwgCisgICAgMTIsIDEzLCAyMzIsIDAsIDEyLCAxMywgMjMxLCAyNTUsIDEyLCAxMywgMjMxLCAyNTQsIDEyLCAxMywgMjMxLCAyNTMsIDEyLCAKKyAgICAxMywgMjMxLCAyNTIsIDEyLCAxMywgMjMxLCAyNTEsIDEyLCAxMywgMjMxLCAyNTAsIDEyLCAxMywgMjMxLCAyNDksIDEyLCAKKyAgICAxMywgMjMxLCAyNDgsIDEyLCAxMywgMjMxLCAyNDcsIDEyLCAxMywgMjMxLCAyNDYsIDEyLCAxMywgMjMxLCAyNDUsIDEyLCAKKyAgICAxMywgMjMwLCAyNywgMTIsIDEzLCAyMzAsIDI2LCAxMiwgMTMsIDIzMCwgMjUsIDEyLCAxMywgMjMwLCAyNCwgMTIsIDEzLCAKKyAgICAyMzAsIDIzLCAxMiwgMTMsIDIzMCwgMjIsIDEyLCAxMywgMjMwLCAyMSwgMTIsIDEzLCAyMzAsIDIwLCAxMiwgMTMsIDIzMCwgCisgICAgMTksIDEyLCAxMywgMjMwLCAxOCwgMTIsIDEzLCAyMzAsIDE3LCAxMiwgMTMsIDIzMCwgMTYsIDEyLCAxMywgMjMwLCAxNSwgCisgICAgMTIsIDEzLCAyMzAsIDE0LCAxMiwgMTMsIDIzMCwgMTMsIDEyLCAxMywgMjMwLCAxMiwgMTIsIDEzLCAyMzAsIDExLCAxMiwgCisgICAgMTMsIDIzMCwgMTAsIDEyLCAxMywgMjMwLCA5LCAxMiwgMTMsIDIzMCwgOCwgMTIsIDEzLCAyMzAsIDcsIDEyLCAxMywgMjMwLCAKKyAgICA2LCAxMiwgMTMsIDIzMCwgNSwgMTIsIDEzLCAyMzAsIDQsIDEyLCAxMywgMjMwLCAzLCAxMiwgMTMsIDIzMCwgMiwgMTIsIAorICAgIDEzLCAyMzAsIDEsIDEyLCAxMywgMjMwLCAwLCAxMiwgMTMsIDIyOSwgMjU1LCAxMiwgMTMsIDIyOSwgMjU0LCAxMiwgMTMsIAorICAgIDIyOSwgMjUzLCAxMiwgMTMsIDIyOSwgMjUyLCAxMiwgMTMsIDIyOSwgMjUxLCAxMiwgMTMsIDIyOSwgMjUwLCAxMiwgMTMsIAorICAgIDIyOSwgMjQ5LCAxMiwgMTMsIDIyOSwgMjQ4LCAxMiwgMTMsIDIyOSwgMjQ3LCAxMiwgMTMsIDIyOSwgMjQ2LCAxMiwgMTMsIAorICAgIDIyOSwgMjQ1LCAxMiwgMTMsIDIyOSwgMjQ0LCAxMiwgMTMsIDIyOSwgMjQzLCAxMiwgMTMsIDIyOSwgMjQyLCAxMiwgMTMsIAorICAgIDIyOSwgMjQxLCAxMiwgMTMsIDIyOSwgMjQwLCAxMiwgMTMsIDIyOSwgMjM5LCAxMiwgMTMsIDIyOSwgMjM4LCAxMiwgMTMsIAorICAgIDIyOSwgMjM3LCAxMiwgMTMsIDIyOSwgMjM2LCAxMiwgMTMsIDIyOSwgMjM1LCAxMiwgMTMsIDIyOCwgMTM5LCAxMiwgMTMsIAorICAgIDIyOCwgMTM4LCAxMiwgMTMsIDIyOCwgMTM3LCAxMiwgMTMsIDIyOCwgMTM2LCAxMiwgMTMsIDIyOCwgMTM1LCAxMiwgMTMsIAorICAgIDIyOCwgMTM0LCAxMiwgMTMsIDIyOCwgMTMzLCAxMiwgMTMsIDIyOCwgMTMyLCAxMiwgMTMsIDIyOCwgMTMxLCAxMiwgMTMsIAorICAgIDIyOCwgMTMwLCAxMiwgMTMsIDIyOCwgMTI5LCAxMiwgMTMsIDIyOCwgMTI4LCAxMiwgMTMsIDIyOCwgMTI3LCAxMiwgMTMsIAorICAgIDIyOCwgMTI2LCAxMiwgMTMsIDIyOCwgMTI1LCAxMiwgMTMsIDIyOCwgMTI0LCAxMiwgMTMsIDIyOCwgMTIzLCAxMiwgMTMsIAorICAgIDIyOCwgMTIyLCAxMiwgMTMsIDIyOCwgMTIxLCAxMiwgMTMsIDIyOCwgMTIwLCAxMiwgMTMsIDIyOCwgMTE5LCAxMiwgMTMsIAorICAgIDIyOCwgMTE4LCAxMiwgMTMsIDIyNywgMjQxLCAxMiwgMTMsIDIyNywgMjQwLCAxMiwgMTMsIDIyNywgMjM5LCAxMiwgMTMsIAorICAgIDIyNywgMjM4LCAxMiwgMTMsIDIyNywgMjM3LCAxMiwgMTMsIDIyNywgMjM2LCAxMiwgMTMsIDIyNywgMjM1LCAxMiwgMTMsIAorICAgIDIyNywgMjM0LCAxMiwgMTMsIDIyNywgMjMzLCAxMiwgMTMsIDIyNywgMjMyLCAxMiwgMTMsIDIyNywgMjMxLCAxMiwgMTMsIAorICAgIDIyNywgMjMwLCAxMiwgMTMsIDIyNywgMjI5LCAxMiwgMTMsIDIyNywgMjI4LCAxMiwgMTMsIDIyNywgMjI3LCAxMiwgMTMsIAorICAgIDIyNywgMjI2LCAxMiwgMTMsIDIyNywgMjI1LCAxMiwgMTMsIDIyNywgMjI0LCAxMiwgMTMsIDIyNywgMjIzLCAxMiwgMTMsIAorICAgIDIyNywgMjIyLCAxMiwgMTMsIDIyNywgMjIxLCAxMiwgMTMsIDIyNywgMjIwLCAxMiwgMTMsIDIyNywgMjE5LCAxMiwgMTMsIAorICAgIDIyNywgMjE4LCAxMiwgMTMsIDIyNywgMjE3LCAxMiwgMTMsIDIyNywgMjE2LCAxMiwgMTMsIDIyNywgODAsIDEyLCAxMywgCisgICAgMjI3LCA3OSwgMTIsIDEzLCAyMjcsIDc4LCAxMiwgMTMsIDIyNywgNzcsIDEyLCAxMywgMjI3LCA3NiwgMTIsIDEzLCAyMjcsIAorICAgIDc1LCAxMiwgMTMsIDIyNywgNzQsIDEyLCAxMywgMjI3LCA3MywgMTIsIDEzLCAyMjcsIDcyLCAxMiwgMTMsIDIyNywgNzEsIAorICAgIDEyLCAxMywgMjI3LCA3MCwgMTIsIDEzLCAyMjcsIDY5LCAxMiwgMTMsIDIyNywgNjgsIDEyLCAxMywgMjI3LCA2NywgMTIsIAorICAgIDEzLCAyMjcsIDY2LCAxMiwgMTMsIDIyNywgNjUsIDEyLCAxMywgMjI3LCA2NCwgMTIsIDEzLCAyMjcsIDYzLCAxMiwgMTMsIAorICAgIDIyNywgNjIsIDEyLCAxMywgMjI3LCA2MSwgMTIsIDEzLCAyMjcsIDYwLCAxMiwgMTMsIDIyNywgNTksIDEyLCAxMywgMjI3LCAKKyAgICA1OCwgMTIsIDEzLCAyMjcsIDU3LCAxMiwgMTMsIDIyNywgNTYsIDEyLCAxMywgMjI3LCA1NSwgMTIsIDEzLCAyMjcsIDU0LCAKKyAgICAxMiwgMTMsIDIyNywgNTMsIDEyLCAxMywgMjI3LCA1MiwgMTIsIDEzLCAyMjcsIDUxLCAxMiwgMTMsIDIyNywgNTAsIDEyLCAKKyAgICAxMywgMjI3LCA0OSwgMTIsIDEzLCAyMjcsIDQ4LCAxMiwgMTMsIDIyNywgNDcsIDEyLCAxMywgMjI3LCA0NiwgMTIsIDEzLCAKKyAgICAyMjcsIDQ1LCAxMiwgMTMsIDIyNywgNDQsIDEyLCAxMywgMjI3LCA0MywgMTIsIDEzLCAyMjcsIDQyLCAxMiwgMTMsIDIyNywgCisgICAgNDEsIDEyLCAxMywgMjI3LCA0MCwgMTIsIDEzLCAyMjcsIDM5LCAxMiwgMTMsIDIyNywgMzgsIDEyLCAxMywgMjI3LCAzNywgCisgICAgMTIsIDEzLCAyMjcsIDM2LCAxMiwgMTMsIDIyNywgMzUsIDEyLCAxMywgMjI3LCAzNCwgMTIsIDEzLCAyMjcsIDMzLCAxMiwgCisgICAgMTMsIDIyNywgMzIsIDEyLCAxMywgMjI3LCAzMSwgMTIsIDEzLCAyMjcsIDMwLCAxMiwgMTMsIDIyNywgMjksIDEyLCAxMywgCisgICAgMjI3LCAyOCwgMTIsIDEzLCAyMjcsIDI3LCAxMiwgMTMsIDIyNywgMjYsIDEyLCAxMywgMjI3LCAyNSwgMTIsIDEzLCAyMjcsIAorICAgIDI0LCAxMiwgMTMsIDIyNywgMjMsIDEyLCAxMywgMjI3LCAyMiwgMTIsIDEzLCAyMjcsIDIxLCAxMiwgMTMsIDIyNywgMjAsIAorICAgIDEyLCAxMywgMjI3LCAxOSwgMTIsIDEzLCAyMjcsIDE4LCAxMiwgMTMsIDIyNywgMTcsIDEyLCAxMywgMjI3LCAxNiwgMTIsIAorICAgIDEzLCAyMjcsIDE1LCAxMiwgMTMsIDIyNywgMTQsIDEyLCAxMywgMjI3LCAxMywgMTIsIDEzLCAyMjcsIDEyLCAxMiwgMTMsIAorICAgIDIyNywgMTEsIDEyLCAxMywgMjI3LCAxMCwgMTIsIDEzLCAyMjcsIDksIDEyLCAxMywgMjI3LCA4LCAxMiwgMTMsIDIyNywgNywgCisgICAgMTIsIDEzLCAyMjcsIDYsIDEyLCAxMywgMjI2LCAxMDgsIDEyLCAxMywgMjI2LCAxMDcsIDEyLCAxMywgMjI2LCAxMDYsIDEyLCAKKyAgICAxMywgMjI2LCAxMDUsIDEyLCAxMywgMjI2LCAxMDQsIDEyLCAxMywgMjI2LCAxMDMsIDEyLCAxMywgMjI2LCAxMDIsIDEyLCAKKyAgICAxMywgMjI2LCAxMDEsIDEyLCAxMywgMjI2LCAxMDAsIDEyLCAxMywgMjI2LCA5OSwgMTIsIDEzLCAyMjYsIDk4LCAxMiwgMTMsIAorICAgIDIyNiwgOTcsIDEyLCAxMywgMjI2LCA5NiwgMTIsIDEzLCAyMjQsIDk4LCAxMiwgMTMsIDIyNCwgOTcsIDEyLCAxMywgMjI0LCAKKyAgICA5NiwgMTIsIDEzLCAyMjQsIDk1LCAxMiwgMTMsIDIyNCwgOTQsIDEyLCAxMywgMjI0LCA5MywgMTIsIDEzLCAyMjQsIDkyLCAKKyAgICAxMiwgMTMsIDIyMywgMjI1LCAxMiwgMTMsIDIyMywgMjI0LCAxMiwgMTMsIDIyMywgMjIzLCAxMiwgMTMsIDIyMywgMjIyLCAKICAgICAxMiwgMTMsIDIyMywgMjIxLCAxMiwgMTMsIDIyMywgMjIwLCAxMiwgMTMsIDIyMywgMjE5LCAxMiwgMTMsIDIyMywgMjE4LCAKICAgICAxMiwgMTMsIDIyMywgMjE3LCAxMiwgMTMsIDIyMywgMjE2LCAxMiwgMTMsIDIyMywgMjE1LCAxMiwgMTMsIDIyMywgMjE0LCAKICAgICAxMiwgMTMsIDIyMywgMjEzLCAxMiwgMTMsIDIyMywgMjEyLCAxMiwgMTMsIDIyMywgMjExLCAxMiwgMTMsIDIyMywgMjEwLCAKQEAgLTEyMDk3LDE3MjYgKzEyMDk3LDE3NDMgQEAKICAgICAxMiwgMTMsIDIyMywgMjA1LCAxMiwgMTMsIDIyMywgMjA0LCAxMiwgMTMsIDIyMywgMjAzLCAxMiwgMTMsIDIyMywgMjAyLCAKICAgICAxMiwgMTMsIDIyMywgMjAxLCAxMiwgMTMsIDIyMywgMjAwLCAxMiwgMTMsIDIyMywgMTk5LCAxMiwgMTMsIDIyMywgMTk4LCAKICAgICAxMiwgMTMsIDIyMywgMTk3LCAxMiwgMTMsIDIyMywgMTk2LCAxMiwgMTMsIDIyMywgMTk1LCAxMiwgMTMsIDIyMywgMTk0LCAKLSAgICAxMiwgMTMsIDIyMywgMTkzLCAxMiwgMTMsIDIyMywgMTkyLCAxMiwgMTMsIDIyMywgMTkxLCAxMiwgMTMsIDIyMywgMTkwLCAKLSAgICAxMiwgMTMsIDIyMywgMTg5LCAxMiwgMTMsIDIyMiwgODgsIDEyLCAxMywgMjIyLCA4NywgMTIsIDEzLCAyMjIsIDg2LCAxMiwgCi0gICAgMTMsIDIyMiwgODUsIDEyLCAxMywgMjIyLCA4NCwgMTIsIDEzLCAyMjIsIDgzLCAxMiwgMTMsIDIyMiwgODIsIDEyLCAxMywgCi0gICAgMjIyLCA4MSwgMTIsIDEzLCAyMjIsIDgwLCAxMiwgMTMsIDIyMiwgNzksIDEyLCAxMywgMjIyLCA3OCwgMTIsIDEzLCAyMjIsIAotICAgIDc3LCAxMiwgMTMsIDIyMiwgNzYsIDEyLCAxMywgMjIyLCA3NSwgMTIsIDEzLCAyMjIsIDc0LCAxMiwgMTMsIDIyMiwgNzMsIAotICAgIDEyLCAxMywgMjIyLCA3MiwgMTIsIDEzLCAyMjIsIDcxLCAxMiwgMTMsIDIyMiwgNzAsIDEyLCAxMywgMjIyLCA2OSwgMTIsIAotICAgIDEzLCAyMjIsIDY4LCAxMiwgMTMsIDIyMiwgNjcsIDEyLCAxMywgMjIyLCA2NiwgMTIsIDEzLCAyMjIsIDY1LCAxMiwgMTMsIAotICAgIDIyMiwgNjQsIDEyLCAxMywgMjIyLCA2MywgMTIsIDEzLCAyMjIsIDYyLCAxMiwgMTMsIDIyMiwgNjEsIDEyLCAxMywgMjIyLCAKLSAgICA2MCwgMTIsIDEzLCAyMjIsIDU5LCAxMiwgMTMsIDIyMiwgNTgsIDEyLCAxMywgMjIyLCA1NywgMTIsIDEzLCAyMjIsIDU2LCAKLSAgICAxMiwgMTMsIDIyMiwgNTUsIDEyLCAxMywgMjIyLCA1NCwgMTIsIDEzLCAyMjIsIDUzLCAxMiwgMTMsIDIyMiwgNTIsIDEyLCAKLSAgICAxMywgMjIyLCA1MSwgMTIsIDEzLCAyMjIsIDUwLCAxMiwgMTMsIDIyMiwgNDksIDEyLCAxMywgMjIyLCA0OCwgMTIsIDEzLCAKLSAgICAyMjIsIDQ3LCAxMiwgMTMsIDIyMiwgNDYsIDEyLCAxMywgMjIyLCA0NSwgMTIsIDEzLCAyMjIsIDQ0LCAxMiwgMTMsIDIyMiwgCi0gICAgNDMsIDEyLCAxMywgMjIyLCA0MiwgMTIsIDEzLCAyMjIsIDQxLCAxMiwgMTMsIDIyMiwgNDAsIDEyLCAxMywgMjIyLCAzOSwgCi0gICAgMTIsIDEzLCAyMjIsIDM4LCAxMiwgMTMsIDIyMiwgMzcsIDEyLCAxMywgMjIyLCAzNiwgMTIsIDEzLCAyMjIsIDM1LCAxMiwgCi0gICAgMTMsIDIxNywgMTUwLCAxMiwgMTMsIDIxNywgMTQ5LCAxMiwgMTMsIDIxNywgMTQ4LCAxMiwgMTMsIDIxNywgMTQ3LCAxMiwgCi0gICAgMTMsIDIxNywgMTQ2LCAxMiwgMTMsIDIxNywgMTQ1LCAxMiwgMTMsIDIxNywgMTQ0LCAxMiwgMTMsIDIxNywgMTQzLCAxMiwgCi0gICAgMTMsIDIxNywgMTQyLCAxMiwgMTMsIDIxNywgMTQxLCAxMiwgMTMsIDIxNywgMTQwLCAxMiwgMTMsIDIxNywgMTM5LCAxMiwgCi0gICAgMTMsIDIxNywgMTM4LCAxMiwgMTMsIDIxNywgMTM3LCAxMiwgMTMsIDIxNywgMTM2LCAxMiwgMTMsIDIxNywgMTM1LCAxMiwgCi0gICAgMTMsIDIxNywgMTM0LCAxMiwgMTMsIDIxNywgMTMzLCAxMiwgMTMsIDIxNywgMTMyLCAxMiwgMTMsIDIxNywgMTMxLCAxMiwgCi0gICAgMTMsIDIxNywgMTMwLCAxMiwgMTMsIDIxNywgMTI5LCAxMiwgMTMsIDIxNywgMTI4LCAxMiwgMTMsIDIxNywgMTI3LCAxMiwgCi0gICAgMTMsIDIxNywgMTI2LCAxMiwgMTMsIDIxNywgMTI1LCAxMiwgMTMsIDIxNywgMTI0LCAxMiwgMTMsIDIxNywgMTIzLCAxMiwgCi0gICAgMTMsIDIxNywgMTIyLCAxMiwgMTMsIDIxNywgMTIxLCAxMiwgMTMsIDIxNywgMTIwLCAxMiwgMTMsIDIxNywgMTE5LCAxMiwgCi0gICAgMTMsIDIxNywgMTE4LCAxMiwgMTMsIDIxNywgMTE3LCAxMiwgMTMsIDIxNywgMTE2LCAxMiwgMTMsIDIxNywgMTE1LCAxMiwgCi0gICAgMTMsIDIxNywgMTE0LCAxMiwgMTMsIDIxNywgMTEzLCAxMiwgMTMsIDIxNywgMTEyLCAxMiwgMTMsIDIxNywgMTExLCAxMiwgCi0gICAgMTMsIDIxNywgMTEwLCAxMiwgMTMsIDIxNywgMTA5LCAxMiwgMTMsIDIxNywgMTA4LCAxMiwgMTMsIDIxNywgMTA3LCAxMiwgCi0gICAgMTMsIDIxNSwgMjIsIDEyLCAxMywgMjE1LCAyMSwgMTIsIDEzLCAyMTUsIDIwLCAxMiwgMTMsIDIxNSwgMTksIDEyLCAxMywgCi0gICAgMjE1LCAxOCwgMTIsIDEzLCAyMTUsIDE3LCAxMiwgMTMsIDIxNSwgMTYsIDEyLCAxMywgMjE1LCAxNSwgMTIsIDEzLCAyMTUsIAotICAgIDE0LCAxMiwgMTMsIDIxNSwgMTMsIDEyLCAxMywgMjE1LCAxMiwgMTIsIDEzLCAyMTUsIDExLCAxMiwgMTMsIDIxNSwgMTAsIAotICAgIDEyLCAxMywgMjE1LCA5LCAxMiwgMTMsIDIxNSwgOCwgMTIsIDEzLCAyMTUsIDcsIDEyLCAxMywgMjE1LCA2LCAxMiwgMTMsIAotICAgIDIxNSwgNSwgMTIsIDEzLCAyMTUsIDQsIDEyLCAxMywgMjE1LCAzLCAxMiwgMTMsIDIxNSwgMiwgMTIsIDEzLCAyMTUsIDEsIAotICAgIDEyLCAxMywgMjE1LCAwLCAxMiwgMTMsIDIxNCwgMjU1LCAxMiwgMTMsIDIxNCwgMjU0LCAxMiwgMTMsIDIxNCwgMjUzLCAxMiwgCi0gICAgMTMsIDIxNCwgMjUyLCAxMiwgMTMsIDIxNCwgMjUxLCAxMiwgMTMsIDIxNCwgMjUwLCAxMiwgMTMsIDIxNCwgMjQ5LCAxMiwgCi0gICAgMTMsIDIxNCwgMjQ4LCAxMiwgMTMsIDIxNCwgMjQ3LCAxMiwgMTMsIDIxNCwgMjQ2LCAxMiwgMTMsIDIxNCwgMjQ1LCAxMiwgCi0gICAgMTMsIDIxNCwgMjQ0LCAxMiwgMTMsIDIxNCwgMjQzLCAxMiwgMTMsIDIxNCwgMjQyLCAxMiwgMTMsIDIxNCwgMjQxLCAxMiwgCi0gICAgMTMsIDIxNCwgMjQwLCAxMiwgMTMsIDIxNCwgMjM5LCAxMiwgMTMsIDIxNCwgMjM4LCAxMiwgMTMsIDIxNCwgMjM3LCAxMiwgCi0gICAgMTMsIDIxNCwgMjM2LCAxMiwgMTMsIDIxNCwgMjM1LCAxMiwgMTMsIDIxNCwgMjM0LCAxMiwgMTMsIDIxNCwgMjMzLCAxMiwgCi0gICAgMTMsIDIxNCwgMjMyLCAxMiwgMTMsIDIxNCwgMTA0LCAxMiwgMTMsIDIxNCwgMTAzLCAxMiwgMTMsIDIxNCwgMTAyLCAxMiwgCi0gICAgMTMsIDIxNCwgMTAxLCAxMiwgMTMsIDIxNCwgMTAwLCAxMiwgMTMsIDIxNCwgOTksIDEyLCAxMywgMjE0LCA5OCwgMTIsIDEzLCAKLSAgICAyMTQsIDk3LCAxMiwgMTMsIDIxNCwgOTYsIDEyLCAxMywgMjE0LCA5NSwgMTIsIDEzLCAyMTQsIDk0LCAxMiwgMTMsIDIxNCwgCi0gICAgOTMsIDEyLCAxMywgMjE0LCA5MiwgMTIsIDEzLCAyMTQsIDkxLCAxMiwgMTMsIDIxNCwgOTAsIDEyLCAxMywgMjE0LCA4OSwgCi0gICAgMTIsIDEzLCAyMTQsIDg4LCAxMiwgMTMsIDIxNCwgODcsIDEyLCAxMywgMjE0LCA4NiwgMTIsIDEzLCAyMTQsIDg1LCAxMiwgCi0gICAgMTMsIDIxNCwgODQsIDEyLCAxMywgMjE0LCA4MywgMTIsIDEzLCAyMTQsIDgyLCAxMiwgMTMsIDIxNCwgODEsIDEyLCAxMywgCi0gICAgMjE0LCA4MCwgMTIsIDEzLCAyMTQsIDc5LCAxMiwgMTMsIDIxNCwgNzgsIDEyLCAxMywgMjE0LCA3NywgMTIsIDEzLCAyMTQsIAotICAgIDc2LCAxMiwgMTMsIDIxNCwgNzUsIDEyLCAxMywgMjE0LCA3NCwgMTIsIDEzLCAyMTQsIDczLCAxMiwgMTMsIDIxNCwgNzIsIAotICAgIDEyLCAxMywgMjE0LCA3MSwgMTIsIDEzLCAyMTQsIDcwLCAxMiwgMTMsIDIxNCwgNjksIDEyLCAxMywgMjE0LCA2OCwgMTIsIAotICAgIDEzLCAyMTQsIDY3LCAxMiwgMTMsIDIxNCwgNjYsIDEyLCAxMywgMjE0LCA2NSwgMTIsIDEzLCAyMTQsIDY0LCAxMiwgMTMsIAotICAgIDIxNCwgNjMsIDEyLCAxMywgMjE0LCA2MiwgMTIsIDEzLCAyMTQsIDYxLCAxMiwgMTMsIDIxNCwgNjAsIDEyLCAxMywgMjE0LCAKLSAgICA1OSwgMTIsIDEzLCAyMTQsIDU4LCAxMiwgMTMsIDIxNCwgNTcsIDEyLCAxMywgMjE0LCA1NiwgMTIsIDEzLCAyMTQsIDU1LCAKLSAgICAxMiwgMTMsIDIxNCwgNTQsIDEyLCAxMywgMjE0LCA1MywgMTIsIDEzLCAyMTQsIDUyLCAxMiwgMTMsIDIxNCwgNTEsIDEyLCAKLSAgICAxMywgMjE0LCA1MCwgMTIsIDEzLCAyMTQsIDQ5LCAxMiwgMTMsIDIxNCwgNDgsIDEyLCAxMywgMjE0LCA0NywgMTIsIDEzLCAKLSAgICAyMTQsIDQ2LCAxMiwgMTMsIDIxNCwgNDUsIDEyLCAxMywgMjE0LCA0NCwgMTIsIDEzLCAyMTQsIDQzLCAxMiwgMTMsIDIxNCwgCi0gICAgNDIsIDEyLCAxMywgMjE0LCA0MSwgMTIsIDEzLCAyMTQsIDQwLCAxMiwgMTMsIDIxNCwgMzksIDEyLCAxMywgMjE0LCAzOCwgCi0gICAgMTIsIDEzLCAyMTQsIDM3LCAxMiwgMTMsIDIxNCwgMzYsIDEyLCAxMywgMjE0LCAzNSwgMTIsIDEzLCAyMTQsIDM0LCAxMiwgCi0gICAgMTMsIDIxNCwgMzMsIDEyLCAxMywgMjE0LCAzMiwgMTIsIDEzLCAyMTQsIDMxLCAxMiwgMTMsIDIxNCwgMzAsIDEyLCAxMywgCi0gICAgMjE0LCAyOSwgMTIsIDEzLCAyMTQsIDI4LCAxMiwgMTMsIDIxMiwgOTcsIDEyLCAxMywgMjEyLCA5NiwgMTIsIDEzLCAyMTIsIAotICAgIDk1LCAxMiwgMTMsIDIxMiwgOTQsIDEyLCAxMywgMjEyLCA5MywgMTIsIDEzLCAyMTIsIDkyLCAxMiwgMTMsIDIxMiwgOTEsIAotICAgIDEyLCAxMywgMjEyLCA5MCwgMTIsIDEzLCAyMTIsIDg5LCAxMiwgMTMsIDIxMiwgODgsIDEyLCAxMywgMjEyLCA4NywgMTIsIAotICAgIDEzLCAyMTIsIDg2LCAxMiwgMTMsIDIxMiwgODUsIDEyLCAxMywgMjEyLCA4NCwgMTIsIDEzLCAyMTIsIDgzLCAxMiwgMTMsIAotICAgIDIxMiwgODIsIDEyLCAxMywgMjEyLCA4MSwgMTIsIDEzLCAyMTIsIDgwLCAxMiwgMTMsIDIxMiwgNzksIDEyLCAxMywgMjEyLCAKLSAgICA3OCwgMTIsIDEzLCAyMTIsIDc3LCAxMiwgMTMsIDIxMiwgNzYsIDEyLCAxMywgMjEyLCA3NSwgMTIsIDEzLCAyMTIsIDc0LCAKLSAgICAxMiwgMTMsIDIxMiwgNzMsIDEyLCAxMywgMjEyLCA3MiwgMTIsIDEzLCAyMTIsIDcxLCAxMiwgMTMsIDIxMiwgNzAsIDEyLCAKLSAgICAxMywgMjEyLCA2OSwgMTIsIDEzLCAyMTIsIDY4LCAxMiwgMTMsIDIxMiwgNjcsIDEyLCAxMywgMjEyLCA2NiwgMTIsIDEzLCAKLSAgICAyMTEsIDE3NywgMTIsIDEzLCAyMTEsIDE3NiwgMTIsIDEzLCAyMTEsIDE3NSwgMTIsIDEzLCAyMTEsIDE3NCwgMTIsIDEzLCAKLSAgICAyMTEsIDE3MywgMTIsIDEzLCAyMTEsIDE3MiwgMTIsIDEzLCAyMTEsIDE3MSwgMTIsIDEzLCAyMTEsIDE3MCwgMTIsIDEzLCAKLSAgICAyMTEsIDE2OSwgMTIsIDEzLCAyMTEsIDE2OCwgMTIsIDEzLCAyMTEsIDE2NywgMTIsIDEzLCAyMTEsIDE2NiwgMTIsIDEzLCAKLSAgICAyMTEsIDExNSwgMTIsIDEzLCAyMTEsIDExNCwgMTIsIDEzLCAyMTEsIDExMywgMTIsIDEzLCAyMTEsIDExMiwgMTIsIDEzLCAKLSAgICAyMTEsIDExMSwgMTIsIDEzLCAyMTEsIDExMCwgMTIsIDEzLCAyMTEsIDEwOSwgMTIsIDEzLCAyMTEsIDEwOCwgMTIsIDEzLCAKLSAgICAyMTEsIDEwNywgMTIsIDEzLCAyMTAsIDE1OCwgMTIsIDEzLCAyMTAsIDE1NywgMTIsIDEzLCAyMTAsIDE1NiwgMTIsIDEzLCAKLSAgICAyMTAsIDE1NSwgMTIsIDEzLCAyMTAsIDE1NCwgMTIsIDEzLCAyMTAsIDE1MywgMTIsIDEzLCAyMTAsIDE1MiwgMTIsIDEzLCAKLSAgICAyMTAsIDE1MSwgMTIsIDEzLCAyMTAsIDE1MCwgMTIsIDEzLCAyMTAsIDE0OSwgMTIsIDEzLCAyMTAsIDE0OCwgMTIsIDEzLCAKLSAgICAyMTAsIDE0NywgMTIsIDEzLCAyMTAsIDE0NiwgMTIsIDEzLCAyMTAsIDE0NSwgMTIsIDEzLCAyMTAsIDE0NCwgMTIsIDEzLCAKLSAgICAyMTAsIDE0MywgMTIsIDEzLCAyMTAsIDE0MiwgMTIsIDEzLCAyMTAsIDE0MSwgMTIsIDEzLCAyMTAsIDE0MCwgMTIsIDEzLCAKLSAgICAyMTAsIDEzOSwgMTIsIDEzLCAyMTAsIDEzOCwgMTIsIDEzLCAyMTAsIDEzNywgMTIsIDEzLCAyMTAsIDEzNiwgMTIsIDEzLCAKLSAgICAyMTAsIDEzNSwgMTIsIDEzLCAyMTAsIDEzNCwgMTIsIDEzLCAyMTAsIDEzMywgMTIsIDEzLCAyMTAsIDEzMiwgMTIsIDEzLCAKLSAgICAyMTAsIDEzMSwgMTIsIDEzLCAyMTAsIDEzMCwgMTIsIDEzLCAyMTAsIDEyOSwgMTIsIDEzLCAyMTAsIDEyOCwgMTIsIDEzLCAKLSAgICAyMTAsIDEyNywgMTIsIDEzLCAyMTAsIDEyNiwgMTIsIDEzLCAyMTAsIDEyNSwgMTIsIDEzLCAyMTAsIDEyNCwgMTIsIDEzLCAKLSAgICAyMTAsIDEyMywgMTIsIDEzLCAyMTAsIDEyMiwgMTIsIDEzLCAyMTAsIDEyMSwgMTIsIDEzLCAyMTAsIDEyMCwgMTIsIDEzLCAKLSAgICAyMTAsIDExOSwgMTIsIDEzLCAyMTAsIDExOCwgMTIsIDEzLCAyNTUsIDcyLCAxMiwgMTMsIDI1NSwgNzEsIDEyLCAxMywgCi0gICAgMjU1LCA3MCwgMTIsIDEzLCAyNTUsIDY5LCAxMiwgMTMsIDI1NSwgNjgsIDEyLCAxMywgMjU1LCA2NywgMTIsIDEzLCAyNTUsIAotICAgIDY2LCAxMiwgMTMsIDI1NSwgNjUsIDEyLCAxMywgMjU1LCA2NCwgMTIsIDEzLCAyNTUsIDYzLCAxMiwgMTMsIDI1NSwgNjIsIAotICAgIDEyLCAxMywgMjU1LCA2MSwgMTIsIDEzLCAyNTUsIDYwLCAxMiwgMTMsIDI1NSwgNTksIDEyLCAxMywgMjU1LCA1OCwgMTIsIAotICAgIDEzLCAyNTUsIDU3LCAxMiwgMTMsIDI1NSwgNTYsIDEyLCAxMywgMjU1LCA1NSwgMTIsIDEzLCAyNTUsIDU0LCAxMiwgMTMsIAotICAgIDI1NSwgNTMsIDEyLCAxMywgMjU1LCA1MiwgMTIsIDEzLCAyNTUsIDUxLCAxMiwgMTMsIDI1NSwgNTAsIDEyLCAxMywgMjU1LCAKLSAgICA0OSwgMTIsIDEzLCAyNTUsIDQ4LCAxMiwgMTMsIDI1NSwgNDcsIDEyLCAxMywgMjU1LCA0NiwgMTIsIDEzLCAyNTUsIDQ1LCAKLSAgICAxMiwgMTMsIDI1NSwgNDQsIDEyLCAxMywgMjU1LCA0MywgMTIsIDEzLCAyNTUsIDQyLCAxMiwgMTMsIDI1NSwgNDEsIDEyLCAKLSAgICAxMywgMjU1LCA0MCwgMTIsIDEzLCAyNTUsIDM5LCAyMCwgMSwgMTY3LCAyMjksIDEyLCAyMzEsIDE2LCAyMCwgMSwgMTY3LCAKLSAgICAyNDMsIDcwLCAyNDQsIDM2LCAyMCwgMSwgMTY3LCAyMjQsIDI1MSwgMjMxLCAxNywgMjI1LCA1NywgMjAsIDEsIDE2NywgCi0gICAgMjI0LCAyNTEsIDIzMSwgMTcsIDIyNSwgNTgsIDIwLCAxLCAxNjcsIDIyOSwgMjI2LCAyMzEsIDE2LCAyMCwgMSwgMTY3LCAKLSAgICAyMTksIDIyMSwgMjAsIDEsIDE2NywgMjE2LCA2NiwgMjMxLCAxNiwgMjAsIDEsIDE2NywgMjI3LCAxMTgsIDIzMSwgMTYsIAotICAgIDIwLCAxLCAxNjcsIDIyMCwgMTksIDIyNiwgOTAsIDIyOCwgMTY5LCAyMCwgMSwgMTY3LCAyMjQsIDI1MSwgMjI2LCA5MCwgCi0gICAgMjI4LCAxNzAsIDIyNSwgNTcsIDIwLCAxLCAxNjcsIDIyNCwgMjUxLCAyMjYsIDkwLCAyMjgsIDE3MCwgMjI1LCA1OCwgMjAsIAotICAgIDEsIDE2NywgMjMxLCAyMTgsIDIwLCAxLCAxNjcsIDIxNSwgMTE5LCAyMzEsIDIxOSwgMjAsIDEsIDE2NywgMjI5LCA3MSwgCi0gICAgMjAsIDEsIDE2NywgMjMxLCAyMTUsIDIwLCAxLCAxNjcsIDIzMSwgMTc2LCAyMCwgMSwgMTY3LCAyMzAsIDQ4LCAyMCwgMSwgCi0gICAgMTY3LCAyMjAsIDEyNCwgMjAsIDEsIDE2NywgMjI3LCAyNDEsIDIwLCAxLCAxNjcsIDIzNCwgMTQ5LCAyMCwgMSwgMTY3LCAKLSAgICAyMjgsIDEzOCwgMjAsIDEsIDE2NywgMjE4LCA0LCAyMCwgMSwgMTY3LCAyMjksIDExLCAyMCwgMSwgMTY3LCAyMzMsIDg3LCAKLSAgICAyMCwgMSwgMTY3LCAyMzMsIDEyLCAyMzMsIDE4OSwgMjAsIDEsIDE2NywgMjI3LCAyNDgsIDIzMSwgMjQsIDIwLCAxLCAxNjcsIAotICAgIDIzMSwgMjIyLCAyMCwgMSwgMTY3LCAyMjUsIDI0NiwgMjAsIDEsIDE2NywgMjQyLCAyMzEsIDIwLCAxLCAxNjcsIDIyNiwgCi0gICAgNTAsIDIwLCAxLCAxNjcsIDIzMCwgMTUxLCAyMjksIDQ1LCAyMCwgMSwgMTY3LCAyMjcsIDk5LCAyMzEsIDI3LCAyMCwgMSwgCi0gICAgMTY3LCAxMDQsIDIxMCwgMTg4LCAyMjksIDIyMCwgMjAsIDEsIDE2NywgMjQyLCAyMzIsIDIwLCAxLCAxNjcsIDIyNywgMjQ4LCAKLSAgICAyMjcsIDI0OSwgMjAsIDEsIDE2NywgMjE5LCAxMjgsIDIwLCAxLCAxNjcsIDIzMSwgOSwgMjAsIDEsIDE2NywgMjMxLCAzMCwgCi0gICAgMjAsIDEsIDE2NywgMjMwLCAxMzAsIDIwLCAxLCAxNjcsIDIzNCwgMjQ5LCAyMCwgMSwgMTY3LCAyMjYsIDkwLCAyMzMsIDQ3LCAKLSAgICAyMCwgMSwgMTY3LCAyMjksIDE0OSwgMjMzLCA0NywgMjAsIDEsIDE2NywgMjI1LCAxNTgsIDIwLCAxLCAxNjcsIDIzMSwgCi0gICAgMjE2LCAyMCwgMSwgMTY3LCAyMjgsIDIwNywgMjAsIDEsIDE2NywgMjI0LCAxMzQsIDIwLCAxLCAxNjcsIDIxNSwgMTE2LCAKLSAgICAyMCwgMSwgMTY3LCAyMzIsIDk0LCAyMCwgMSwgMTY3LCAyMTksIDQxLCAyMCwgMSwgMTY3LCAyMTYsIDIxNiwgMjAsIDEsIAotICAgIDE2NywgMjMxLCAyMTMsIDIwLCAxLCAxNjcsIDIzNCwgMTU2LCAyMCwgMSwgMTY3LCAyMjksIDE0NSwgMjAsIDEsIDE2NywgCi0gICAgMjMzLCAyMDEsIDIwLCAxLCAxNjcsIDIzMCwgMTMxLCAyMCwgMSwgMTY3LCAyMTksIDIxOCwgMjAsIDEsIDE2NywgMjMyLCAKLSAgICAxMzgsIDIwLCAxLCAxNjcsIDI0NCwgOTMsIDIwLCAxLCAxNjcsIDIyMiwgMTk5LCAyMCwgMSwgMTY3LCAyMzMsIDI0MSwgMjAsIAotICAgIDEsIDE2NywgMjE5LCAzNywgMjAsIDEsIDE2NywgMjMxLCAxNzMsIDIyNSwgOTksIDIwLCAxLCAxNjcsIDIyMCwgMTIsIDIwLCAKLSAgICAxLCAxNjcsIDIyNywgMjQ3LCAyMCwgMSwgMTY3LCAyMTksIDI1MywgMjI4LCAyLCAyMTAsIDE5NiwgMjAsIDEsIDE2NywgCi0gICAgMjI3LCAxMzgsIDIzMCwgMTQ4LCAyMCwgMSwgMTY3LCAyMjYsIDg1LCAyMCwgMSwgMTY3LCAyMjgsIDEzOSwgMjAsIDEsIAotICAgIDE2NywgMjE0LCAxNzAsIDIwLCAxLCAxNjcsIDIyOSwgNDgsIDIwLCAxLCAxNjcsIDIzMSwgMjEyLCAyMCwgMSwgMTY3LCAKLSAgICAyMjgsIDE4MSwgMjAsIDEsIDE2NywgMjMxLCAxMTksIDIwLCAxLCAxNjcsIDIyNywgMTUxLCAyMCwgMSwgMTY3LCAyMTYsIAotICAgIDIyMCwgMjAsIDEsIDE2NywgMjE5LCAzNCwgMjAsIDEsIDE2NywgMjI2LCA4NiwgMjAsIDEsIDE2NywgMjI4LCA2LCAyMCwgMSwgCi0gICAgMTY3LCAyMzEsIDIyMCwgMjAsIDEsIDE2NywgMjI3LCAxNDgsIDIwLCAxLCAxNjcsIDIzNCwgMjE2LCAyMCwgMSwgMTY3LCAKLSAgICAyMjgsIDksIDIwLCAxLCAxNjcsIDIxMywgMjUwLCAyMCwgMSwgMTY3LCAyMzIsIDk4LCAyMCwgMSwgMTY3LCAyMjksIDk4LCAKLSAgICAyMCwgMSwgMTY3LCAyMjksIDE5NiwgMjAsIDEsIDE2NywgMjMxLCAxMTgsIDIwLCAxLCAyMjUsIDEzOCwgMjI4LCA0LCAyMCwgCi0gICAgMSwgMjI1LCAxMzgsIDIxNSwgMTE5LCAyMzEsIDIxNywgMjAsIDEsIDIyNSwgMTM4LCAyMTksIDE4NSwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMjAsIDEyOCwgMjE1LCAxMTgsIDIwLCAxLCAyMjUsIDEzOCwgMjMyLCAxNDAsIDIyNywgMjQ0LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIzMSwgMTI1LCAyMzEsIDIyMSwgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDg3LCAyMCwgMSwgMjI1LCAxMzgsIDIxMSwgCi0gICAgMTUsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxMjAsIDIwLCAxLCAyMjUsIDEzOCwgMjM0LCAyMzcsIDIwLCAxLCAyMjUsIAotICAgIDEzOCwgMjI1LCAyMDgsIDIwLCAxLCAyMjUsIDEzOCwgMjExLCA4OSwgMjMzLCA0NywgMjAsIDEsIDIyNSwgMTM4LCAyMzMsIAotICAgIDEwMywgMjI4LCAyLCAyMjcsIDE2MCwgMjAsIDEsIDIyNSwgMTM4LCAyMjcsIDI0MiwgMjIwLCAzOCwgMjAsIDEsIDIyNSwgCi0gICAgMTM4LCAyMjksIDExNiwgMjI4LCAxODQsIDIwLCAxLCAyMjUsIDEzOCwgMjQyLCAyMjksIDIwLCAxLCAyMjUsIDEzOCwgMjI1LCAKLSAgICA0OSwgMjAsIDEsIDIyNSwgMTM4LCAyMTUsIDExOSwgMjI4LCAwLCAyMCwgMSwgMjI1LCAxMzgsIDIyMCwgNDMsIDIyOCwgCi0gICAgMTc5LCAyMCwgMSwgMjI1LCAxMzgsIDIyMCwgMzksIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxNywgMjE2LCAyMTksIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjMxLCAxMDcsIDIzMSwgMTIxLCAyMCwgMSwgMjI1LCAxMzgsIDIyNywgMTQ5LCAyMjcsIDI0NCwgMjAsIDEsIAotICAgIDIyNSwgMTM4LCAyMzQsIDE0NSwgMjAsIDEsIDIyNSwgMTM4LCAyNDIsIDIzMCwgMjAsIDEsIDIyNSwgMTM4LCAyMzQsIDE0MSwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMzMsIDEyOSwgMjAsIDEsIDIyNSwgMTM4LCAyMjUsIDI0OSwgMjAsIDEsIDIyNSwgMTM4LCAKLSAgICAyMTMsIDE4MiwgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDEzLCAyMzAsIDQ2LCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgNDcsIAotICAgIDIzMSwgMTAzLCAyMCwgMSwgMjI1LCAxMzgsIDIxMSwgMTkzLCAyMCwgMSwgMjI1LCAxMzgsIDIyMiwgMTEsIDIwLCAxLCAKLSAgICAyMjUsIDEzOCwgMjE3LCA5NywgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDI5LCAyMCwgMSwgMjI1LCAxMzgsIDIyOSwgMzIsIAotICAgIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAzMywgMjMzLCA4NCwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDE5LCAyMCwgMSwgMjI1LCAKLSAgICAxMzgsIDIxOCwgNTIsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAxMTEsIDIwLCAxLCAyMjUsIDEzOCwgMjMwLCAxMzMsIDIwLCAKLSAgICAxLCAyMjUsIDEzOCwgMjI3LCAxNjMsIDIwLCAxLCAyMjUsIDEzOCwgMjI0LCAxMzgsIDIwLCAxLCAyMjUsIDEzOCwgMjMxLCAKLSAgICAyOCwgMjI5LCA0OSwgMjAsIDEsIDIyNSwgMTM4LCAyNDQsIDEyNiwgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDk4LCAyMCwgMSwgCi0gICAgMjI1LCAxMzgsIDI0NCwgMTQ3LCAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgMTUzLCAyMCwgMSwgMjI1LCAxMzgsIDIzMSwgMjM5LCAKLSAgICAyMjgsIDE3MywgMjAsIDEsIDIyNSwgMTM4LCAyMzEsIDIzOSwgMjI4LCAxNDksIDIwLCAxLCAyMjUsIDEzOCwgMjMzLCAxMSwgCi0gICAgMjAsIDEsIDIyNSwgMTM4LCAyMjksIDU1LCAyMCwgMSwgMjI1LCAxMzgsIDIyOCwgMTEsIDIwLCAxLCAyMjUsIDEzOCwgMTg0LCAKLSAgICAyMCwgMSwgMjI1LCAxMzgsIDIzNCwgNzQsIDIwLCAxLCAyMjUsIDEzOCwgMjI5LCAxLCAyMCwgMSwgMTM3LCAyMjksIDEyLCAKLSAgICAyMzEsIDIxOSwgMjAsIDEsIDEzNywgMjI3LCAxMTcsIDIwLCAxLCAxMzcsIDIxMCwgMTk2LCAyMCwgMSwgMTM3LCAyMTIsIAotICAgIDUzLCAyMCwgMSwgMTM3LCAyMjksIDQ4LCAyMCwgMSwgMTM3LCAyMjksIDEzNywgMjAsIDEsIDEzNywgMjI5LCAxOSwgMjAsIAotICAgIDEsIDEzNywgMjQyLCAyMzksIDIwLCAxLCAxMzcsIDIzMSwgMTE1LCAyMCwgMSwgMTM3LCAyNDMsIDc3LCAyMCwgMSwgMTM3LCAKLSAgICAyMjcsIDE0MCwgMjMwLCAxNzAsIDIzMSwgMzEsIDIwLCAxLCAxMzcsIDIyNywgMjQwLCAyMzEsIDEwNiwgMjAsIDEsIDEzNywgCi0gICAgMjMxLCAxMTIsIDIwLCAxLCAxMzcsIDIyNSwgNTUsIDIwLCAxLCAxMzcsIDIyOSwgMTIyLCAyMCwgMSwgMTM3LCAyMzEsIAotICAgIDEyMywgMjUxLCAyOSwgMjAsIDEsIDEzNywgMjM0LCAxNDMsIDIwLCAxLCAxMzcsIDI0MiwgMjQwLCAyMCwgMSwgMTM3LCAKLSAgICAyMzQsIDE1MCwgMjAsIDEsIDEzNywgMjEwLCAyMTMsIDIzMCwgNzYsIDIwLCAxLCAxMzcsIDIyNywgMTExLCAyMCwgMSwgCi0gICAgMTM3LCAyMzEsIDEwMCwgMjAsIDEsIDEzNywgMjI4LCAxMCwgMjAsIDEsIDEzNywgMjMxLCAxMDYsIDIwLCAxLCAxMzcsIAotICAgIDIxMSwgMTYsIDIwLCAxLCAxMzcsIDIzMywgMjQ5LCAyMCwgMSwgMTM3LCAyMzUsIDEwLCAyMCwgMSwgMTM3LCAyMjAsIDEyMywgCi0gICAgMjAsIDEsIDEzNywgMjI5LCAxMzEsIDIwLCAxLCAxMzcsIDIxNywgOTUsIDIwLCAxLCAxMzcsIDIyOCwgMTUzLCAyMCwgMSwgCi0gICAgMTM3LCAyMTYsIDY2LCAyMTAsIDE5OCwgMjAsIDEsIDEzNywgMjE4LCA3OSwgMjAsIDEsIDEzNywgMjI5LCAzOSwgMjI3LCAKLSAgICAxNjAsIDIwLCAxLCAxMzcsIDIxMywgMTgxLCAyMCwgMSwgMTM3LCAyMjksIDE5OSwgMjAsIDEsIDEzNywgMjMxLCAyMzksIAotICAgIDIzNCwgMTUyLCAyMCwgMSwgMTM3LCAyMjcsIDI0OSwgMjAsIDEsIDEzNywgMjI5LCAzNCwgMjAsIDEsIDEzNywgMjMzLCA4OCwgCi0gICAgMjAsIDEsIDEzNywgMjMxLCAxMDgsIDIwLCAxLCAxMzcsIDIzMSwgOCwgMjAsIDEsIDEzNywgMjI3LCAyNDMsIDIwLCAxLCAKLSAgICAxMzcsIDIxNiwgMjE1LCAyMCwgMSwgMTM3LCAyMjksIDM2LCAyMCwgMSwgMTM3LCAyNDMsIDIzMywgMjAsIDEsIDEzNywgCi0gICAgMjI5LCAxMzYsIDIwLCAxLCAxMzcsIDIyOCwgMTIsIDIwLCAxLCAxMzcsIDIyOCwgOCwgMjAsIDEsIDEzNywgMjUxLCAxMDcsIAotICAgIDIwLCAxLCAxMzcsIDIxMywgMTgzLCAyMCwgMSwgMTM3LCAyMzEsIDExMywgMjAsIDEsIDEzNywgMjIyLCAxNDAsIDIwLCAxLCAKLSAgICAxMzcsIDIyOCwgMTgzLCAyMCwgMSwgMTM3LCAyMzMsIDEwMiwgMjAsIDEsIDEzNywgMjE2LCA2NCwgMjAsIDEsIDEzNywgCi0gICAgMjI3LCAyNTAsIDIyOSwgMSwgMjAsIDEsIDEzNywgMjI4LCAxNzUsIDIwLCAxLCAxMzcsIDIzNCwgMTU2LCAyMCwgMSwgMTM3LCAKLSAgICAyMjksIDQwLCAyMCwgMSwgMTM3LCAyMzEsIDIxMiwgMjAsIDEsIDEzNywgMjMxLCAxMDEsIDIwLCAxLCAxMzcsIDIzMiwgOTgsIAotICAgIDIwLCAxLCAxMzcsIDIzMywgMTg5LCAyMCwgMSwgMTM3LCAyMjgsIDE4MSwgMjAsIDEsIDEzNywgMjI5LCAxLCAyMCwgMSwgCi0gICAgMTM3LCAyMTEsIDE4NCwgMjAsIDEsIDEzNywgMjI5LCAzNywgMjAsIDEsIDEzNywgMjI3LCAyNTMsIDIwLCAxLCAxMzcsIAotICAgIDIyNywgMjQ1LCAyMCwgMSwgMTM3LCAyMzMsIDIwMywgMjI4LCAxMzksIDIwLCAxLCAxMzcsIDIyNywgMjUxLCAyMCwgMSwgCi0gICAgMTM3LCAyMjksIDE0NCwgMjAsIDEsIDEzNywgMjMxLCAyMzksIDIyOCwgMCwgMjAsIDEsIDEzNywgMjExLCAxMDMsIDIwLCAxLCAKLSAgICAxMzcsIDIyOSwgMTQzLCAyMCwgMSwgMTM3LCAyMTksIDIyMCwgMjAsIDEsIDEzNywgMjIwLCAxMjYsIDIwLCAxLCAxMzcsIAotICAgIDIzMSwgMTA5LCAyMCwgMSwgMTM3LCAyMzEsIDIxOSwgMjAsIDEsIDEzNywgMjMxLCAxMTksIDIwLCAxLCAxMzcsIDIzNCwgCi0gICAgMTQ0LCAyMCwgMSwgMTM3LCAyMzEsIDExMCwgMjAsIDEsIDEzNywgMjM0LCAxNDgsIDIwLCAxLCAxMzcsIDIzMSwgMTIzLCAKLSAgICAyMjUsIDEwMywgMjAsIDEsIDEzNywgMjEwLCAxNzksIDIwLCAxLCAxMzcsIDIyOCwgMTcxLCAyMCwgMSwgMTM3LCAyMzAsIAotICAgIDIyMCwgMjAsIDEsIDEzNywgMjMwLCAxMDAsIDIwLCAxLCAxMzcsIDIyMCwgMTUsIDIwLCAxLCAxMzcsIDIzNCwgMTY2LCAKLSAgICAyMzMsIDcwLCAyMCwgMSwgMTM3LCAyMzQsIDE2NiwgMjQ0LCAxNjAsIDIwLCAxLCAxMzcsIDIyOSwgNjksIDIwLCAxLCAxMzcsIAotICAgIDIyOSwgMTk2LCAyMCwgMSwgMTM3LCAyMzIsIDIwMCwgMjAsIDEsIDEzNywgMjI1LCA2NSwgMjAsIDEsIDEzNywgMjI1LCAKLSAgICAxOTksIDIwLCAxLCAxMzcsIDIxNiwgMjMwLCAyMCwgMSwgMTA3LCAyMzEsIDk5LCAyMCwgMSwgMTA3LCAyMTIsIDUxLCAyMCwgCi0gICAgMSwgMTA3LCAyMjgsIDE2OSwgMjAsIDEsIDEwNywgMjMxLCAxNiwgMjAsIDEsIDEwNywgMjI4LCAxNjcsIDIwLCAxLCAxMDcsIAotICAgIDIzMiwgMjM1LCAyMCwgMSwgMTA3LCAyMjgsIDE3MiwgMjAsIDEsIDEwNywgMjI4LCA3LCAyMCwgMSwgMTA3LCAyMjksIDU0LCAKLSAgICAyMCwgMSwgMTA3LCAyMjcsIDE2MCwgMjAsIDEsIDEwNywgMjExLCAxOTQsIDIwLCAxLCAxMDcsIDIyOSwgOSwgMjAsIDEsIAotICAgIDEwNywgMjIwLCA2MSwgMjAsIDEsIDEwNywgMjI5LCAyMCwgMjAsIDEsIDEwNywgMjM0LCAxNTEsIDIwLCAxLCAxMDcsIDIxNiwgCi0gICAgMjE3LCAyMCwgMSwgMTA3LCAyMjAsIDQxLCAyMCwgMSwgMTA3LCAyMjgsIDE4MCwgMjAsIDEsIDEwNywgMjE4LCA1MiwgMjAsIAotICAgIDEsIDEwNywgMjM0LCAxNTYsIDIwLCAxLCAxMDcsIDIxMSwgOTEsIDIwLCAxLCAxMDcsIDIzMywgMjA0LCAyMCwgMSwgMTA3LCAKLSAgICAyMjEsIDIzNCwgMjAsIDEsIDEwNywgMjMxLCAyMSwgMjAsIDEsIDEwNywgMjI5LCAxMzUsIDIwLCAxLCAxMDcsIDIzMSwgCi0gICAgMTg4LCAyMCwgMSwgMTA3LCAyMzEsIDI3LCAyMCwgMSwgMTA3LCAyMjAsIDEyNSwgMjAsIDEsIDEwNywgMjExLCAzOSwgMjAsIAotICAgIDEsIDEwNywgMjI4LCAxNzQsIDIwLCAxLCAxMDcsIDIzNCwgMTQ3LCAyMzEsIDEwMiwgMjAsIDEsIDEwNywgMjI5LCAxNiwgCi0gICAgMjAsIDEsIDEwNywgMjE1LCAxMTgsIDIwLCAxLCAxMDcsIDI0MiwgMjQ4LCAyMCwgMSwgMTA3LCAyMjksIDYsIDIwLCAxLCAKLSAgICAxMDcsIDI0NCwgMTI3LCAyMCwgMSwgMTA3LCAyMjksIDEzOSwgMjAsIDEsIDEwNywgMjMxLCAwLCAyMCwgMSwgMTA3LCAyMzMsIAotICAgIDUsIDIwLCAxLCAxMDcsIDIyOSwgMTIxLCAyMCwgMSwgMTA3LCAyMzAsIDE0NywgMjAsIDEsIDEwNywgMjMxLCA0LCAyMCwgMSwgCi0gICAgMTA3LCAyMjQsIDExOCwgMjAsIDEsIDEwNywgMjMxLCAyLCAyMCwgMSwgMTA3LCAyMzEsIDE4LCAyMCwgMSwgMTA3LCAyMzIsIAotICAgIDg0LCAyMCwgMSwgMTA3LCAyMjcsIDI1NSwgMjAsIDEsIDEwNywgMjMxLCAxMjIsIDIwLCAxLCAxMDcsIDIzMywgMTgwLCAyMCwgCi0gICAgMSwgMTA3LCAyMjcsIDE1MSwgMjAsIDEsIDEwNywgMjE2LCAyMjAsIDIwLCAxLCAxMDcsIDIxOSwgMzQsIDIwLCAxLCAxMDcsIAotICAgIDIxMCwgMTc5LCAyMCwgMSwgMTA3LCAyMzQsIDE0OCwgMjAsIDEsIDEwNywgMjIzLCAxNzAsIDIwLCAxLCAxMDcsIDIxNywgCi0gICAgMTAsIDIwLCAxLCAxMDcsIDIyOSwgMTcsIDIwLCAxLCAxMDcsIDIzMSwgMjMsIDIwLCAxLCAxMDcsIDIyNywgMjU0LCAyMCwgCi0gICAgMSwgMTA3LCAyMzQsIDE0NiwgMjAsIDEsIDEwNywgMjI1LCA1OSwgMjAsIDEsIDEwNywgMjI1LCAxNTIsIDIwLCAxLCAxMDcsIAotICAgIDIyNywgMTI3LCAyMCwgMSwgMTA3LCAyMzMsIDExLCAyMCwgMSwgMTA3LCAyMjksIDU1LCAyMCwgMSwgMTA3LCAyMzEsIDIwLCAKLSAgICAyMCwgMSwgMTA3LCAyMjksIDI5LCAyMCwgMSwgMTA3LCAyMTAsIDE5MywgMjAsIDEsIDEwNywgMjI2LCAyMSwgMjAsIDEsIAotICAgIDEwNywgMjEwLCAxOTIsIDIwLCAxLCAxMDcsIDIyOSwgMTQ0LCAyMCwgMSwgMTA3LCAyMjcsIDI0NCwgMjAsIDEsIDEwNywgCi0gICAgMjE4LCA4MSwgMjAsIDEsIDEwNywgMjMzLCAyMDgsIDIwLCAxLCAxMDcsIDIyOSwgNDQsIDIwLCAxLCAxMDcsIDIyOSwgMTQsIAotICAgIDIwLCAxLCAxMDcsIDIxNSwgMTAyLCAyMCwgMSwgMTA3LCAyMzEsIDMxLCAyMCwgMSwgMTA3LCAyMzMsIDE5OCwgMjAsIDEsIAotICAgIDEwNywgMjI3LCAyNTIsIDIwLCAxLCAxMDcsIDIxNiwgMjE4LCAyMCwgMSwgMTA3LCAyMzEsIDIxNCwgMjAsIDEsIDEwNywgCi0gICAgMjI5LCA1MywgMjAsIDEsIDEwNywgMjMzLCA0LCAyMCwgMSwgMTA3LCAyMjksIDM1LCAyMCwgMSwgMTA3LCAyMjgsIDEsIDIwLCAKLSAgICAxLCAxMDcsIDIyOCwgMTUzLCAyMCwgMSwgMTA3LCAyNDIsIDIzMywgMjAsIDEsIDEwNywgMjMzLCAyMTcsIDIwLCAxLCAxMDcsIAotICAgIDIyMywgODQsIDIyNiwgMjA5LCAyMCwgMSwgMTA3LCAyMTcsIDg2LCAyMCwgMSwgMTA3LCAyMTYsIDEwLCAyMCwgMSwgMTA3LCAKLSAgICAyMjcsIDE0OCwgMjAsIDEsIDEwNywgMjIyLCAyMzksIDIwLCAxLCAxMDcsIDIzMywgNDksIDIwLCAxLCAxMDcsIDIzMSwgNzksIAotICAgIDIwLCAxLCAxMDcsIDE5MywgMjAsIDEsIDEwNywgMjE4LCA0LCAyMCwgMSwgMTA3LCAyMzAsIDEwMiwgMjAsIDEsIDEwNywgCi0gICAgMjIwLCAyNywgMjAsIDEsIDEwNywgMjIwLCAzNywgMjAsIDEsIDEwNywgMjMzLCAxNTUsIDIwLCAxLCAxMDcsIDIyNywgMjM3LCAKLSAgICAyMCwgMSwgMTA3LCAyMTksIDIyNSwgMjAsIDEsIDEwNywgMjI3LCAyNDYsIDIwLCAxLCAxMDcsIDIyNSwgMjExLCAyMCwgMSwgCi0gICAgMTA3LCAyMjgsIDIzMywgMjAsIDEsIDEwNywgMjE5LCAyNTIsIDIwLCAxLCAxMDcsIDIyNCwgMTMzLCAyMCwgMSwgMTA3LCAKLSAgICAyMzAsIDQ2LCAyMCwgMSwgMTA3LCAyMzIsIDExOSwgMjAsIDEsIDEwNywgMjIzLCA4NCwgMjMwLCA5NiwgMjAsIDEsIDEwNywgCi0gICAgMjE2LCAxMTcsIDIwLCAxLCAxMDcsIDIyNywgMjM4LCAyMCwgMSwgMTA3LCAyMzEsIDEyMywgMTk4LCAyMCwgMSwgMTA3LCAKLSAgICAyMjEsIDIzMiwgMjAsIDEsIDEwNywgMjQ0LCAxOTUsIDIwLCAxLCA4MiwgMjI5LCAxNDMsIDIwLCAxLCA4MiwgMjE2LCAxNiwgCi0gICAgMjAsIDEsIDgyLCAyMzEsIDExMiwgMjAsIDEsIDgyLCAyMzMsIDg4LCAyMCwgMSwgODIsIDIxMywgMTI4LCAyMCwgMSwgODIsIAotICAgIDIzMiwgMTI1LCAyMCwgMSwgODIsIDIyNiwgODksIDIwLCAxLCA4MiwgMjE5LCA0NSwgMjAsIDEsIDgyLCAyMjMsIDE0NSwgCi0gICAgMjAsIDEsIDgyLCAyMjgsIDMsIDIwLCAxLCA4MiwgMjI5LCAxMTQsIDIwLCAxLCA4MiwgMjI0LCAxNDcsIDIwLCAxLCA4MiwgCi0gICAgMjE3LCA2MiwgMjAsIDEsIDgyLCAyMjksIDIyLCAyMCwgMSwgODIsIDIzMywgMjQ1LCAyMCwgMSwgODIsIDIxMSwgMTg3LCAKLSAgICAyMCwgMSwgODIsIDIyMSwgMTcwLCAyMCwgMSwgODIsIDIyOSwgNDUsIDIwLCAxLCA4MiwgMjI2LCA4NiwgMjAsIDEsIDgyLCAKLSAgICAyMTYsIDE3LCAyMCwgMSwgODIsIDIzMywgMjAyLCAyMCwgMSwgODIsIDIzMiwgMTM5LCAyMCwgMSwgODIsIDIyOCwgNiwgMjAsIAotICAgIDEsIDgyLCAyMjgsIDI1NCwgMjAsIDEsIDgyLCAyMzEsIDIyMCwgMjAsIDEsIDgyLCAyMjksIDE1LCAyMCwgMSwgODIsIDIyOCwgCi0gICAgMjUzLCAyMCwgMSwgODIsIDIyOCwgNSwgMjAsIDEsIDgyLCAyMjIsIDIzNywgMjAsIDEsIDgyLCAyMjgsIDE3MSwgMjAsIDEsIAotICAgIDgyLCAyMjUsIDIxMCwgMjAsIDEsIDgyLCAyMjIsIDMxLCAyMCwgMSwgODIsIDIyOSwgMzAsIDIwLCAxLCA4MiwgMjMxLCAxMCwgCi0gICAgMjAsIDEsIDgyLCAyNDIsIDIyNywgMjAsIDEsIDgyLCAyMjksIDE4LCAyMCwgMSwgODIsIDIyOCwgMTgyLCAyMCwgMSwgODIsIAotICAgIDIzMSwgMTcyLCAyMCwgMSwgODIsIDIzMiwgMTIxLCAyMCwgMSwgODIsIDIyOSwgNTAsIDIwLCAxLCA4MiwgMjI5LCAxMjcsIAotICAgIDIwLCAxLCA4MiwgMjE3LCA4NSwgMjI3LCAyNDQsIDIwLCAxLCA4MiwgMjIwLCAxMjcsIDIwLCAxLCA4MiwgMjI0LCAxNDMsIAotICAgIDIwLCAxLCA4MiwgMjI5LCAxNDcsIDIxOSwgNTEsIDIwLCAxLCA4MiwgMjI5LCAzOCwgMjI3LCAxNjAsIDIwLCAxLCA4MiwgCi0gICAgMjExLCA0LCAyMCwgMSwgODIsIDI0MiwgMjI4LCAyMCwgMSwgODIsIDIxNSwgMTE3LCAyMCwgMSwgODIsIDIxMSwgMTksIDIwLCAKLSAgICAxLCA4MiwgMjI1LCAxNiwgMjAsIDEsIDgyLCAyMTUsIDEwNywgMjAsIDEsIDgyLCAyMzQsIDE1NCwgMjAsIDEsIDgyLCAyMTgsIAotICAgIDgwLCAyMCwgMSwgODIsIDIxNiwgMjE5LCAyMCwgMSwgODIsIDIxMywgMTg0LCAyMCwgMSwgODIsIDIxMiwgNiwgMjAsIDEsIAotICAgIDgyLCAyMzMsIDEzMiwgMjAsIDEsIDgyLCAyMjQsIDE1MCwgMjAsIDEsIDgyLCAyMTcsIDk2LCAyMCwgMSwgODIsIDI0MiwgCi0gICAgMjQ3LCAyMCwgMSwgODIsIDIyOSwgNTksIDIwLCAxLCA4MiwgMjIwLCA0MCwgMjAsIDEsIDgyLCAyMzEsIDUsIDIwLCAxLCAKLSAgICA4MiwgMjMxLCAxMTYsIDIwLCAxLCA4MiwgMjI3LCAxMTUsIDIwLCAxLCA4MiwgMjI4LCAxMzYsIDIwLCAxLCA4MiwgMjQzLCAKLSAgICA3MywgMjAsIDEsIDgyLCAyMTUsIDEwOCwgMjAsIDEsIDgyLCAyMzMsIDIxMSwgMjAsIDEsIDgyLCAyMTEsIDY3LCAyMCwgMSwgCi0gICAgODIsIDIyNywgMTQ5LCAyNTAsIDE2LCAyMCwgMSwgODIsIDIxMCwgMjUwLCAyMCwgMSwgODIsIDIzMSwgMjIsIDIwLCAxLCAKLSAgICA4MiwgMjI5LCAxMzIsIDIwLCAxLCA4MiwgMjI1LCAxMDAsIDIwLCAxLCA4MiwgMjEwLCAxOTcsIDIwLCAxLCA4MiwgMjMzLCAKLSAgICA2LCAyMCwgMSwgODIsIDI0MywgMjMzLCAyMCwgMSwgODIsIDI0MywgNzIsIDIwLCAxLCA4MiwgMjI5LCA4LCAyMCwgMSwgODIsIAotICAgIDIzNCwgMTU2LCAyMCwgMSwgODIsIDIzMSwgMjIzLCAyMCwgMSwgODIsIDIyOSwgMjEsIDIwLCAxLCA4MiwgMjQyLCAyMzQsIAotICAgIDIwLCAxLCA4MiwgMjQ0LCAxOTYsIDIwLCAxLCA4MiwgMjI3LCAyMzksIDIwLCAxLCA4MiwgMjI1LCAxNTMsIDIwLCAxLCA4MiwgCi0gICAgMjExLCAxNywgMjAsIDEsIDgyLCAyMjksIDQ2LCAyMCwgMSwgODIsIDIyNywgMTQ5LCAyNTIsIDIzLCAyMCwgMSwgODIsIAotICAgIDIyNywgOTUsIDIwLCAxLCA4MiwgMjI0LCAyNDcsIDIwLCAxLCA4MiwgMjMwLCAyMjAsIDIwLCAxLCA4MiwgMjQzLCAyMzEsIAotICAgIDIwLCAxLCA4MiwgMjI5LCAyMjAsIDIwLCAxLCA4MiwgMjMwLCAxMDAsIDIwLCAxLCA4MiwgMjQyLCAyMzMsIDIwLCAxLCA4MiwgCi0gICAgMjQzLCAyMzUsIDczLCAyMCwgMSwgODIsIDIzMCwgNDcsIDIwLCAxLCA4MiwgMjI0LCAxNDYsIDIwLCAxLCA4MiwgMjI5LCAKLSAgICAxMCwgMjAsIDEsIDgyLCAyMzMsIDE4OSwgMjAsIDEsIDgyLCAyMjUsIDk3LCAyMCwgMSwgODIsIDIyNywgMjQ3LCAyMCwgMSwgCi0gICAgODIsIDIxMSwgMTgsIDIwLCAxLCA4MiwgMjI5LCAzMSwgMjAsIDEsIDgyLCAyMjYsIDkwLCAyMjUsIDE4NywgMjAsIDEsIDgyLCAKLSAgICAyNDMsIDIzNSwgMjUxLCAxNSwgMjAsIDEsIDgyLCAyNDQsIDM3LCAyMCwgMSwgODIsIDIyOCwgMTc2LCAyMCwgMSwgODIsIAotICAgIDYxLCAyMCwgMSwgODIsIDIxNiwgMTAsIDIwLCAxLCA4MiwgNzYsIDIwLCAxLCA4MiwgNzMsIDIwLCAxLCA4MiwgMjMzLCA4NiwgCi0gICAgMjAsIDEsIDgyLCAyMjYsIDkwLCAyMjUsIDIzLCAyMCwgMSwgODIsIDIxNywgMTAxLCAyMCwgMSwgODIsIDIxNywgNTEsIDIwLCAKLSAgICAxLCA4MiwgMjI5LCAxNDcsIDIzMCwgMzQsIDI0MCwgMjM0LCAyMCwgMSwgODIsIDIyMCwgMTUsIDIwLCAxLCA4MiwgMjExLCAKLSAgICAxNCwgMjAsIDEsIDgyLCAyMjgsIDI0NywgMjAsIDEsIDgyLCAyMTAsIDIwMiwgMjAsIDEsIDgyLCAyMTAsIDIyNywgMjE3LCAKLSAgICAyNDAsIDIwLCAxLCA4MiwgMjEwLCAyMjcsIDI0OSwgMTQ3LCAyMCwgMSwgODIsIDIxMCwgMTg3LCAyMCwgMSwgODIsIDIxMCwgCi0gICAgMTk1LCAyMCwgMSwgODIsIDIzNCwgMTQyLCAyMCwgMSwgODIsIDIyNSwgMTUxLCAyMCwgMSwgODIsIDIyOCwgMTc3LCAyNDUsIAotICAgIDEwMiwgMjAsIDEsIDgyLCAyMjQsIDE0NCwgMjAsIDEsIDgyLCAyMTEsIDE5MiwgMjAsIDEsIDgyLCAyNDQsIDE0NywgMjAsIAotICAgIDEsIDgyLCAyMTMsIDI1MCwgMjAsIDEsIDgyLCAyMzIsIDk4LCAyMCwgMSwgODIsIDIzMCwgMjMwLCAyMCwgMSwgODIsIDIyMywgCi0gICAgNTEsIDIwLCAxLCA4MiwgMjIzLCAxNzEsIDIwLCAxLCA4MiwgMjI4LCAyNDYsIDIwLCAxLCA4MiwgMjI5LCA3NywgMjAsIDEsIAotICAgIDgyLCAyMjAsIDcsIDIwLCAxLCA4MiwgMjE5LCAyNTIsIDIwLCAxLCA4MiwgMjQzLCAyMzUsIDIyMywgODYsIDIwLCAxLCA4MiwgCi0gICAgMTk3LCAyMCwgMSwgODIsIDIyNSwgMTA4LCAyMCwgMSwgODIsIDIzMiwgMTE5LCAyMCwgMSwgODIsIDIzNCwgMjgsIDIwLCAxLCAKLSAgICA4MiwgMjMxLCA1OCwgMjAsIDEsIDgyLCAxODQsIDIwLCAxLCA4MiwgMjMxLCAxNjksIDIwLCAxLCA4MiwgMjE2LCAyMjEsIAotICAgIDIwLCAxLCA4MiwgMjM0LCA5MiwgMjAsIDEsIDgyLCAyMzAsIDE1MCwgMjAsIDEsIDgyLCAyMTYsIDI0NywgMjAsIDEsIDgyLCAKLSAgICAyNDQsIDE2OSwgMjAsIDEsIDgyLCAyNDIsIDIyMywgMjAsIDEsIDIyNSwgMTM3LCAxNzYsIDIwLCAxLCAyMjUsIDEzNywgNzAsIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjMzLCAyMTcsIDIwLCAxLCAyMjUsIDEzNywgMjQ1LCAyMDksIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjIzLCAxMDgsIDIwLCAxLCAyMjUsIDEzNywgMjE3LCA4NiwgMjAsIDEsIDIyNSwgMTM3LCAyMjcsIDE0OCwgMjAsIDEsIAotICAgIDIyNSwgMTM3LCAyMzMsIDEzNSwgMjAsIDEsIDIyNSwgMTM3LCAyMjIsIDIzOSwgMjAsIDEsIDIyNSwgMTM3LCAyMjMsIDI5LCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIzMSwgNzksIDIwLCAxLCAyMjUsIDEzNywgMjE3LCAxMDEsIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjI5LCAxNDYsIDIwLCAxLCAyMjUsIDEzNywgMjI4LCAxODMsIDIwLCAxLCAyMjUsIDEzNywgMTkzLCAyMCwgMSwgMjI1LCAKLSAgICAxMzcsIDIxOCwgNCwgMjAsIDEsIDIyNSwgMTM3LCAyMjAsIDI3LCAyMCwgMSwgMjI1LCAxMzcsIDIxOSwgMTkxLCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDIyMCwgMTIzLCAyMCwgMSwgMjI1LCAxMzcsIDIzMywgMTU1LCAyMCwgMSwgMjI1LCAxMzcsIDIzNCwgMTU2LCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIyNywgMjA5LCAyMCwgMSwgMjI1LCAxMzcsIDIyNywgMjM3LCAyMCwgMSwgMjI1LCAxMzcsIAotICAgIDIyOCwgMTU0LCAyMCwgMSwgMjI1LCAxMzcsIDIxMCwgMjI2LCAyMCwgMSwgMjI1LCAxMzcsIDIxOSwgMjI1LCAyMCwgMSwgCi0gICAgMjI1LCAxMzcsIDE5MSwgMjAsIDEsIDIyNSwgMTM3LCAyMjgsIDksIDIwLCAxLCAyMjUsIDEzNywgMjI1LCAxNTEsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjI3LCAyNDYsIDIwLCAxLCAyMjUsIDEzNywgMjExLCAxOTIsIDIwLCAxLCAyMjUsIDEzNywgMjI1LCAyMTEsIAotICAgIDIwLCAxLCAyMjUsIDEzNywgMjIyLCAxNDAsIDIwLCAxLCAyMjUsIDEzNywgMjI4LCAyMzMsIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjIzLCA1MSwgMjAsIDEsIDIyNSwgMTM3LCAyMzQsIDE2NSwgMjAsIDEsIDIyNSwgMTM3LCAyMjksIDcsIDIwLCAxLCAyMjUsIAotICAgIDEzNywgMjI5LCA1NiwgMjAsIDEsIDIyNSwgMTM3LCAyMjAsIDcsIDIwLCAxLCAyMjUsIDEzNywgMjI0LCAxNDcsIDIwLCAxLCAKLSAgICAyMjUsIDEzNywgMjQ0LCAzNywgMjAsIDEsIDIyNSwgMTM3LCAyMTIsIDY1LCAyMCwgMSwgMjI1LCAxMzcsIDIzMiwgMjQxLCAKLSAgICAyMCwgMSwgMjI1LCAxMzcsIDIzMiwgMTE5LCAyMCwgMSwgMjI1LCAxMzcsIDIzNCwgMjgsIDIwLCAxLCAyMjUsIDEzNywgCi0gICAgMjMxLCAxMTQsIDIwLCAxLCAyMjUsIDEzNywgMjIzLCA4MywgMjAsIDEsIDIyNSwgMTM3LCAxODQsIDIwLCAxLCAyMjUsIAotICAgIDEzNywgMjMwLCAxNjEsIDIwLCAxLCAyMjUsIDEzNywgMjMxLCAxMjIsIDIwLCAxLCAyMjUsIDEzNywgMjE2LCAyMzAsIDIwLCAKLSAgICAxLCAyMjUsIDEzNywgMjMzLCAyNTEsIDIwLCAxLCAyMjUsIDEzNywgMjIxLCAyNTEsIDIwLCAxLCAyMjUsIDEzNywgMjEyLCAKLSAgICAxMTUsIDk1LCAxLCAxOTAsIDk1LCAxLCAyNTIsIDE5MSwgOTUsIDEsIDgsIDE5MCwgOTUsIDEsIDIyNSwgNDIsIDk1LCAxLCAKLSAgICAxODQsIDk1LCAxLCAyMzAsIDIzMywgOTUsIDEsIDI1NCwgMjMsIDE4NCwgOTUsIDEsIDI0NCwgMTk2LCA5NSwgMSwgMjE0LCAKLSAgICAyNywgOTUsIDEsIDIxMywgMTc3LCA5NSwgMSwgMjE3LCAxMDUsIDk1LCAxLCAyNDgsIDIyMSwgOTUsIDEsIDgsIDIxNSwgCi0gICAgMTU2LCA5NSwgMSwgOCwgMjE3LCAxMDUsIDk1LCAxLCAyMTUsIDE1NiwgOTUsIDEsIDI0OCwgMTM1LCA5NSwgMSwgMTk3LCAKLSAgICA5NSwgMSwgMjI4LCAyMzcsIDk1LCAxLCA4LCAyMjgsIDExMCwgOTUsIDEsIDI1NCwgMjMsIDE5NywgOTUsIDEsIDIyOCwgCi0gICAgMTEwLCA5NSwgMSwgMjI4LCA5NiwgOTUsIDEsIDIzMywgMTM1LCA5NSwgMSwgMjMyLCA2MSwgOTUsIDEsIDIzMiwgMjU0LCAKLSAgICA5NSwgMSwgMjMyLCAyNDMsIDk1LCAxLCAyMTYsIDU2LCA5NSwgMSwgMjQ3LCAxNTMsIDk1LCAxLCAyMTYsIDQ4LCA5NSwgMSwgCi0gICAgMjQ3LCAxNTIsIDk1LCAxLCAxNzYsIDk1LCAxLCAyNDMsIDEzNSwgOTUsIDEsIDgsIDE3NiwgOTUsIDEsIDIyNCwgODgsIDk1LCAKLSAgICAxLCAyMjQsIDY2LCA5NSwgMSwgMjI5LCA3NywgOTUsIDEsIDIyOSwgMjgsIDk1LCAxLCAyNTQsIDIzLCAyMjksIDc3LCA5NSwgCi0gICAgMSwgMTYyLCA5NSwgMSwgMjExLCAxNjUsIDk1LCAxLCAyNDIsIDI0OSwgOTUsIDEsIDI0MiwgMjI2LCA5NSwgMSwgMjE1LCAKLSAgICAxNjUsIDk1LCAxLCAyNDYsIDI2LCA5NSwgMSwgMjI3LCAxNjUsIDk1LCAxLCAyMjcsIDE1MCwgOTUsIDEsIDIxNSwgMTc1LCAKLSAgICA5NSwgMSwgMjQ2LCAzMywgOTUsIDEsIDgsIDIxNSwgMTc1LCA5NSwgMSwgOCwgMjQ2LCAzMywgOTUsIDEsIDIyMywgMTA2LCAKLSAgICAyMTUsIDE3NSwgOTUsIDEsIDIyMCwgMTAyLCA5NSwgMSwgMjE4LCAyMjMsIDk1LCAxLCAyMTAsIDgyLCA5NSwgMSwgMjEwLCAKLSAgICAxNCwgOTUsIDEsIDIxNSwgMTgzLCA5NSwgMSwgMjQ2LCAzOCwgOTUsIDEsIDgsIDIxNSwgMTgzLCA5NSwgMSwgMjA2LCA5NSwgCi0gICAgMSwgMjEwLCAxMTYsIDk1LCAxLCAyMTAsIDE1LCA5NSwgMSwgMjA5LCAyNDMsIDk1LCAxLCAyMDksIDIyMywgOTUsIDEsIAotICAgIDI1NCwgMjMsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAyMTUsIDk1LCAxLCAyMDksIDIyMiwgOTUsIDEsIDIxMiwgNjUsIDk1LCAKLSAgICAxLCAyNTQsIDIwOSwgOTUsIDEsIDI0MSwgMTg5LCA5NSwgMSwgMjI5LCAxOTIsIDk1LCA1LCAyNTMsIDIyMiwgOTUsIDUsIAotICAgIDIyMywgMTA2LCAyMTMsIDEzMywgOTUsIDUsIDIyMywgMTA2LCAyNTMsIDIyMiwgOTUsIDI1LCA1LCA2MSwgOTUsIDI1LCA1LCAKLSAgICAyNTUsIDczLCA5NSwgMjUsIDUsIDI1NCwgMjA1LCA5NSwgMjUsIDUsIDI1NCwgMTIzLCA5NSwgMjUsIDUsIDI1NCwgMTE1LCAKLSAgICA5NSwgMjUsIDUsIDc2LCA5NSwgMjUsIDUsIDIyNiwgMTgzLCA5NSwgMjUsIDUsIDIxMSwgMjI3LCA5NSwgMjUsIDUsIDIxMiwgCi0gICAgOTgsIDk1LCAyNSwgNSwgNzUsIDk1LCAyNSwgNSwgMjQ1LCAxNTAsIDk1LCAyNSwgNSwgMjQ1LCAxMzgsIDk1LCAyNSwgNSwgCi0gICAgMjI2LCAyMzIsIDk1LCAyNSwgNSwgNzMsIDk1LCAyNSwgNSwgMjQwLCAxMTksIDk1LCAyNSwgNSwgMjQwLCAxMTgsIDk1LCAKLSAgICAyNSwgNSwgMjQwLCAxMTcsIDk1LCAyNSwgNSwgMjM1LCAxODksIDk1LCAyNSwgNSwgMjM2LCA2MCwgOTUsIDI1LCA1LCAyMzYsIAotICAgIDMzLCA5NSwgMjUsIDUsIDIzNSwgMTU2LCA5NSwgMjUsIDUsIDIzNSwgMjMxLCA5NSwgMjUsIDUsIDcwLCA5NSwgMjUsIDUsIAotICAgIDIxNCwgMjI5LCA5NSwgMjUsIDUsIDIxNCwgMjI4LCA5NSwgMjUsIDUsIDIxNCwgMjI3LCA5NSwgMjUsIDUsIDIxNCwgMTE4LCAKLSAgICA5NSwgMjUsIDUsIDIxNCwgMjExLCA5NSwgMjUsIDUsIDIxNCwgMTc4LCA5NSwgMjUsIDUsIDIxMSwgMTE3LCA5NSwgMjUsIDUsIAotICAgIDIxMSwgOCwgOTUsIDI1LCA1LCAyNTQsIDI0MywgOTUsIDI1LCA1LCAyNTQsIDIzOSwgOTUsIDI1LCA1LCAyNDUsIDg2LCA5NSwgCi0gICAgMjUsIDUsIDIyMiwgMTgzLCAyNDUsIDg2LCA5NSwgMjUsIDUsIDI0NSwgOTIsIDk1LCAyNSwgNSwgMjIyLCAxODMsIDI0NSwgCi0gICAgOTIsIDk1LCAyNSwgNSwgMjU0LCAyMDEsIDk1LCAyNSwgNSwgMjQ1LCAxOTUsIDk1LCAyNSwgNSwgMjUzLCAxOTIsIDk1LCAKLSAgICAyNSwgNSwgMjI2LCAxMzQsIDk1LCAyNSwgNSwgMjMwLCAyNSwgOTUsIDI1LCA1LCAyMjksIDc5LCA5NSwgMTM4LCAyMjIsIAotICAgIDI1MSwgOTUsIDEzOCwgMjE2LCAxNCwgMjIyLCAyNTEsIDk1LCAxMzgsIDQ4LCA5NSwgMTM4LCA1MSwgOTUsIDEsIDIxNiwgCi0gICAgMjgsIDk1LCAxLCAyMTYsIDI3LCA5NSwgMSwgMjE2LCAyNiwgOTUsIDEsIDIxNiwgMjUsIDk1LCAxLCAyMTYsIDI0LCA5NSwgCi0gICAgMSwgMjE2LCAyMywgOTUsIDEsIDIxNiwgMjIsIDk1LCAxLCAyMjMsIDEwNiwgMjE2LCAyOSwgOTUsIDEsIDIyMywgMTA2LCAKLSAgICAyMTYsIDI4LCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjYsIDk1LCAxLCAyMjMsIDEwNiwgMjE2LCAyNSwgOTUsIDEsIDIyMywgCi0gICAgMTA2LCAyMTYsIDI0LCA5NSwgMSwgMjIzLCAxMDYsIDIxNiwgMjIsIDU2LCAxLCAyNTQsIDIzLCA3NSwgMTQxLCAxLCAyNTQsIAotICAgIDIzLCAyMTEsIDQ3LCA0OSwgMjgsIDE2LCAyMjQsIDE1NCwgNDksIDI4LCAxNiwgMjQ4LCAxNTgsIDQ5LCAyOCwgMTYsIDIyNSwgCi0gICAgMTc1LCA0OSwgMjgsIDE2LCAyMjYsIDExMywgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDIyNiwgMTEzLCAyNDcsIDIwMSwgNDksIAotICAgIDI4LCAxNiwgMjE0LCAxNiwgMjQ1LCAxNzgsIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDI0NywgMjAxLCA0OSwgMjgsIDE2LCAKLSAgICAyMzQsIDE5NywgNDksIDI4LCAxNiwgMjE3LCAxNjksIDQ5LCAyOCwgMTYsIDIyNiwgOSwgNDksIDI4LCAxNiwgMjEwLCAyMTcsIAotICAgIDQ5LCAyOCwgMTYsIDIxMCwgMjE4LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgMjMzLCAyMzQsIDQ5LCAyOCwgMTYsIDI1NCwgCi0gICAgNjgsIDI0NSwgMTc4LCA0OSwgMjgsIDE2LCAyNDUsIDI2LCAyNDUsIDE3OCwgNDksIDI4LCAxNiwgMjE3LCAyLCA0OSwgMjgsIAotICAgIDE2LCAyMzQsIDE2MSwgNDksIDI4LCAxNiwgMjU0LCA1OCwgNDksIDI4LCAxNiwgMjU0LCA1OSwgMjQ3LCAyMDEsIDQ5LCAyOCwgCi0gICAgMTYsIDIxNywgMTc1LCA0OSwgMjgsIDE2LCAyMTYsIDE1OSwgNDksIDI4LCAxNiwgMjI2LCAyMDYsIDI1NCwgMjEsIDQ5LCAKLSAgICAyOCwgMTYsIDI0MiwgMTU5LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjQsIDE1MywgNDksIDI4LCAxNiwgMjUwLCAxNDksIAotICAgIDQ5LCAyOCwgMTYsIDIxNCwgNiwgNDksIDI4LCAxNiwgMjM1LCAxNjQsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzNCwgMTYzLCAKLSAgICAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzQsIDE2MiwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjIxLCAyMTMsIDQ5LCAyOCwgMTYsIAotICAgIDIyNiwgMCwgNDksIDI4LCAxNiwgMjE4LCAxNDYsIDI1NCwgNjEsIDQ5LCAyOCwgMTYsIDIyNiwgMTEyLCAyNTQsIDIxLCA0OSwgCi0gICAgMjgsIDE2LCAyMTQsIDE1LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNTQsIDYyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDU2LCA0OSwgMjgsIDE2LCAyMzQsIDM3LCA0OSwgMjgsIDE2LCAyMjMsIDQ2LCA0OSwgMjgsIDE2LCAyMjUsIDEwNiwgMjU0LCAKLSAgICAyMSwgNDksIDI4LCAxNiwgMjE2LCA4MywgNDksIDI4LCAxNiwgMjU0LCAxMjEsIDQ5LCAyOCwgMTYsIDIyMSwgMTU5LCA0OSwgCi0gICAgMjgsIDE2LCAyMTcsIDE3OCwgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjE3LCAxNzgsIDIzMSwgNDAsIDIxOCwgMTQ0LCA0OSwgCi0gICAgMjgsIDE2LCAyMjYsIDEwNywgMjU0LCAyMSwgNDksIDI4LCAxNiwgMjE2LCAxOTAsIDQ5LCAyOCwgMTYsIDIzMywgMjcsIDQ5LCAKLSAgICAyOCwgMTYsIDI0NiwgNDEsIDQ5LCAyOCwgMTYsIDIxNSwgMjI3LCA0OSwgMjgsIDE2LCAyMTYsIDIzMiwgNDksIDI4LCAxNiwgCi0gICAgMjMzLCAyMzcsIDQ5LCAyOCwgMTYsIDI1NCwgNjgsIDI0NSwgMjYsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAKLSAgICAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzYsIDEyLCA0OSwgMjgsIDE2LCAyMTUsIDE5OSwgMjU0LCAyMSwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAyMDAsIDIxNSwgMTk4LCA0OSwgMjgsIDE2LCAyMjUsIDIwMCwgNDksIDI4LCAxNiwgMjI0LCAxNTgsIDQ5LCAyOCwgCi0gICAgMTYsIDIzNCwgMTEsIDQ5LCAyOCwgMTYsIDI1MCwgODAsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIyMywgMTQ2LCA0OSwgMjgsIAotICAgIDE2LCAyMjYsIDEyLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMjYsIDEwLCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyNDAsIDEwOSwgCi0gICAgNDksIDI4LCAxNiwgMjI5LCAyMDMsIDQ5LCAyOCwgMTYsIDIyNSwgMTU2LCA0OSwgMjgsIDE2LCAyMzQsIDEyLCAyNTQsIAotICAgIDE0OSwgNDksIDI4LCAxNiwgMjE1LCAxOTksIDI1NCwgMTQ5LCA0OSwgMjgsIDE2LCAyMTgsIDEyMywgNDksIDI4LCAxNiwgCi0gICAgMjQyLCAxMjMsIDQ5LCAyOCwgMTYsIDIzNSwgMTY0LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMjYsIDIwNiwgMjI5LCA5NSwgCi0gICAgNDksIDI4LCAxNiwgMjI2LCAxMTMsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNSwgMTU1LCA0OSwgMjgsIDE2LCAyMzMsIAotICAgIDI1NCwgNDksIDI4LCAxNiwgMjI1LCAxNTQsIDQ5LCAyOCwgMTYsIDIzMywgMjM2LCA0OSwgMjgsIDE2LCAyMjUsIDIwMSwgCi0gICAgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjM0LCAxNjIsIDIyOSwgOTYsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDIzNCwgMTYzLCAKLSAgICAyMjksIDk2LCAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyMTAsIDIxNSwgNDksIDI4LCAxNiwgMjU0LCA1OSwgMjI5LCA5NSwgNDksIAotICAgIDI4LCAxNiwgMjU0LCA2MCwgMjE3LCAxNzYsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIxMCwgMjE2LCA0OSwgMjgsIDE2LCAKLSAgICAyMzMsIDIzNSwgNDksIDI4LCAxNiwgMjQ1LCAxNzMsIDQ5LCAyOCwgMTYsIDI1MCwgMTUwLCA0OSwgMjgsIDE2LCAyMzAsIAotICAgIDE5OCwgMjM1LCAxNjMsIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNSwgMTA2LCAyMjksIAotICAgIDk1LCA0OSwgMjgsIDE2LCAyMjQsIDE1OSwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjI2LCAyMDMsIDQ5LCAyOCwgMTYsIDI1NCwgCi0gICAgODQsIDQ5LCAyOCwgMTYsIDIzMiwgNTgsIDQ5LCAyOCwgMTYsIDIyNiwgMTAsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDIyNiwgCi0gICAgMTIsIDIyOSwgOTUsIDQ5LCAyOCwgMTYsIDI0NSwgNjAsIDIyNiwgMTEsIDQ5LCAyOCwgMTYsIDIzMywgMTUzLCA0OSwgMjgsIAotICAgIDE2LCAyNTQsIDg1LCA0OSwgMjgsIDE2LCAyMTUsIDE5OSwgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjQ1LCAxNzYsIDQ5LCAyOCwgCi0gICAgMTYsIDIxNywgMTc4LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTcsIDE3MCwgNDksIDI4LCAxNiwgMjUwLCA4MCwgMjI5LCAKLSAgICA5NSwgNDksIDI4LCAxNiwgMjQ1LCAxMDYsIDQ5LCAyOCwgMTYsIDIyMSwgMTYwLCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyMTEsIAotICAgIDE1MSwgMjM0LCAzNywgNDksIDI4LCAxNiwgMjE1LCAxOTYsIDQ5LCAyOCwgMTYsIDIyNCwgMTYwLCA0OSwgMjgsIDE2LCAKLSAgICAyMTUsIDIwMCwgNDksIDI4LCAxNiwgMjE1LCAxOTcsIDQ5LCAyOCwgMTYsIDIyNCwgMTU3LCA0OSwgMjgsIDE2LCAyMTUsIAotICAgIDE5NSwgNDksIDI4LCAxNiwgMjI0LCAxNTYsIDQ5LCAyOCwgMTYsIDI0MiwgMTU4LCA0OSwgMjgsIDE2LCAyNTQsIDE0LCA0OSwgCi0gICAgMjgsIDE2LCAyNDUsIDYwLCAyNTQsIDE0LCA0OSwgMjgsIDE2LCAyMjYsIDEwNywgMjI5LCA5NSwgNDksIDI4LCAxNiwgMjE2LCAKLSAgICAxODksIDI0NSwgNjksIDQ5LCAyOCwgMTYsIDIxNiwgMTg5LCAyNDUsIDI1LCA0OSwgMjgsIDE2LCAyMTYsIDE5MSwgMjU0LCAKLSAgICA2MywgNDksIDI4LCAxNiwgMjE2LCAxODQsIDIzNCwgMjQ3LCAyNTQsIDU1LCA0OSwgMjgsIDE2LCAyMzQsIDE5OSwgNDksIAotICAgIDI4LCAxNiwgMjQ1LCAxMzksIDQ5LCAyOCwgMTYsIDIxMSwgMTEsIDIzNCwgMTk2LCA0OSwgMjgsIDE2LCAyMTEsIDExLCAKLSAgICAyNTQsIDk2LCA0OSwgMjgsIDE2LCAyMTgsIDE0NSwgNDksIDI4LCAxNiwgMjM0LCAzOCwgMjU0LCA5NiwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyMDIsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDIzMywgMjM4LCAyNTQsIDIxLCA0OSwgMjgsIDE2LCAyMzMsIDIzOCwgCi0gICAgMjU0LCAxNDksIDQ5LCAyOCwgMTYsIDIzMywgMjM4LCAyMjksIDk1LCA0OSwgMjgsIDE2LCAyNTQsIDYyLCAyMjksIDk1LCAKLSAgICA0OSwgMjgsIDE2LCAyNTQsIDY0LCA0OSwgMjgsIDE2LCAyNDcsIDIwMSwgNDksIDI4LCAxNiwgMjE1LCAyMTAsIDQ5LCAyOCwgCi0gICAgMTYsIDIxNiwgMjI0LCA0OSwgMjgsIDE2LCAyMzQsIDIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIDI0NSwgMTM0LCAyNTAsIDcxLCAKLSAgICA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyNDYsIDQyLCAyNTAsIDcyLCA0OSwgMjgsIDE2LCAyMzMsIDMyLCAyMTUsIDIxMiwgCi0gICAgMjUwLCA3MiwgNDksIDI4LCAxNiwgMjMzLCAzMiwgMjE2LCAyMzQsIDI1MCwgNzIsIDQ5LCAyOCwgMTYsIDIzMywgMzIsIAotICAgIDIzNiwgNywgMjUwLCA3MSwgNDksIDI4LCAxNiwgMjQyLCAxNTksIDIyOSwgOTYsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIDI0MiwgCi0gICAgMTU5LCAyMjYsIDEsIDI1NCwgMTAsIDQ5LCAyOCwgMTYsIDI0MiwgMTU5LCAyMjYsIDEsIDI0OCwgMjksIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjI1LCA0OSwgMjgsIDE2LCAyNDcsIDIyNiwgMjI2LCAxLCAyNTQsIDExLCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgCi0gICAgMjQ3LCAyMjYsIDIyNiwgMSwgMjU0LCAxMSwgMjU0LCA5NiwgNDksIDI4LCAxNiwgMjQ3LCAyMjYsIDIyNiwgMSwgMjQ4LCAKLSAgICAyOSwgNDksIDI4LCAxNiwgMjE1LCAyMTYsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDQ5LCAyOCwgMTYsIDIzNiwgMTQsIDQ5LCAKLSAgICAyOCwgMTYsIDI0NywgMjQ2LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjI1LCAwLCAyNTQsIDE2LCA0OSwgMjgsIDE2LCAyNTQsIAotICAgIDIxMSwgMjU0LCAxMywgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDI1NCwgMTYsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyMzEsIAotICAgIDM0LCA0OSwgMjgsIDE2LCAyNTQsIDIxMSwgMjMxLCA0NSwgNDksIDI4LCAxNiwgMjU0LCAyMTEsIDI0MiwgMTYwLCA0OSwgCi0gICAgMjgsIDE2LCAyNTQsIDIxMSwgMjQyLCAxNTcsIDQ5LCAyOCwgMTYsIDI1NCwgMjExLCAyMjUsIDAsIDI0MiwgMTYwLCA0OSwgCi0gICAgMjgsIDE2LCAyMzEsIDE1MSwgMjI0LCAxNjUsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjU0LCAxNTEsIAotICAgIDIyNCwgMTY1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDI0OCwgMjgsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAKLSAgICAyMzEsIDE1MSwgMjU0LCAxNTEsIDI0OCwgMjgsIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE1LCAyMDUsIAotICAgIDI0MCwgMTA3LCA0OSwgMjgsIDE2LCAyMzEsIDE1MSwgMjE1LCAyMTcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTYsIDIyOCwgCi0gICAgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTYsIDIyOCwgMjMzLCAzNSwgMjQwLCAxMDcsIDQ5LCAyOCwgMTYsIAotICAgIDIzMSwgMTUxLCAyMzMsIDM1LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIyNSwgMzksIDI0MCwgMTA3LCA0OSwgCi0gICAgMjgsIDE2LCAyMzUsIDE2OSwgMjE2LCAyNTEsIDI0MCwgMTA4LCA0OSwgMjgsIDE2LCAyNTQsIDYwLCAyMTYsIDI1MSwgMjQwLCAKLSAgICAxMDgsIDQ5LCAyOCwgMTYsIDI0NCwgMTcyLCAyMTYsIDIyNSwgNDksIDI4LCAxNiwgMjQ0LCAxNzIsIDIzMCwgMTQzLCA0OSwgCi0gICAgMjgsIDE2LCAyNDQsIDE3MiwgMjQ3LCAyMzAsIDQ5LCAyOCwgMTYsIDIzMSwgMTUxLCAyMTQsIDEwLCAyNDAsIDEwNywgNDksIAotICAgIDI4LCAxNiwgMjMxLCAxNTEsIDIyNCwgMTY0LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjMxLCAxNTEsIDIyNSwgMzksIDIxNiwgCi0gICAgMjI4LCAyNDAsIDEwNywgNDksIDI4LCAxNiwgMjQyLCAxNTUsIDIzMCwgMjYsIDI1NCwgNjMsIDQ5LCAyOCwgMTYsIDI0MiwgCi0gICAgMTU1LCAyMzAsIDI2LCAyNDcsIDIwMCwgNDksIDI4LCAxNiwgMjQ1LCAxNDgsIDIzNCwgMjQ3LCAyNDMsIDIzNiwgMjEzLCAKLSAgICAxMjQsIDQ5LCAyOCwgMTYsIDIzNiwgMTMsIDQ5LCAyOCwgMTYsIDIzNiwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNTQsIAotICAgIDIyLCAyNDgsIDI3LCAyNDAsIDEwNiwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAxOTAsIDQ5LCAyOCwgMTYsIAotICAgIDI0MywgMjM2LCAyNDcsIDI0NCwgMjI5LCAyMDMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyMjksIDE5OCwgMjQwLCAxMDcsIAotICAgIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjQ4LCAzLCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjE5LCAxMDIsIAotICAgIDI0NywgMjQzLCAyNDgsIDMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjM0LCAxODIsIDQ5LCAyOCwgMTYsIAotICAgIDI0MywgMjM2LCAyNDcsIDI0NCwgMjEwLCAyMywgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NywgMjQ0LCAyMjgsIDIzNCwgCi0gICAgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyNDcsIDI0NCwgMjI4LCAyMzQsIDI1NCwgOTYsIDQ5LCAyOCwgMTYsIAotICAgIDI0MywgMjM2LCAyMzEsIDE5MSwgMjUwLCA3MywgMjQ3LCAyMzAsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAyMzEsIDE5MSwgCi0gICAgMjUwLCA3MywgMjMwLCAxNDMsIDQ5LCAyOCwgMTYsIDI0NCwgMTIyLCAyMTksIDEwMiwgMjUwLCA3MywgMjE0LCA5LCA0OSwgCi0gICAgMjgsIDE2LCAyNDMsIDIzNiwgMjE5LCAxMDIsIDI1MCwgNzMsIDIxNywgMTc5LCA0OSwgMjgsIDE2LCAyNDMsIDIzNiwgMjI5LCAKLSAgICA5NywgNDksIDI4LCAxNiwgMjUwLCA3NCwgMjA5LCAyNDksIDQ5LCAyOCwgMTYsIDI1MCwgNzQsIDIzNCwgMzYsIDQ5LCAyOCwgCi0gICAgMTYsIDI1MCwgNzQsIDIxOSwgOSwgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0MCwgMTU0LCAyMTEsIDEwLCAyMTYsIDIyOSwgCi0gICAgNDksIDI4LCAxNiwgMjQzLCAyMzYsIDI0NSwgMTQ5LCAyNTQsIDg2LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyMTUsIDIwNiwgCi0gICAgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIxNSwgMjA2LCA0OSwgMjgsIDE2LCAyNDcsIDIzOCwgMjE2LCAyMjksIDQ5LCAyOCwgCi0gICAgMTYsIDI0NywgMjM4LCAyNTQsIDY1LCAyNDYsIDQyLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjQ3LCAyMzgsIDIzMCwgMTQxLCAKLSAgICAyMTYsIDIzMywgMjQ3LCAxMzksIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyNDcsIDIyMiwgMjQ1LCAzNiwgMjQ3LCAxMzksIAotICAgIDQ5LCAyOCwgMTYsIDI0NywgMjM4LCAyMTUsIDIxNCwgMjI2LCAyMTEsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAKLSAgICAyNTQsIDY1LCAyNDYsIDQyLCAyNDcsIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMCwgMjMwLCAxNDEsIDIxNiwgMjMzLCAyNDcsIAotICAgIDEzOSwgNDksIDI4LCAxNiwgMjExLCAxMCwgMjQ3LCAyMjIsIDI0NSwgMzYsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyMTEsIAotICAgIDEwLCAyMTUsIDIxNCwgMjI2LCAyMTEsIDI0NywgMTM5LCA0OSwgMjgsIDE2LCAyNDMsIDQ5LCAyNDcsIDIzNywgNDksIDI4LCAKLSAgICAxNiwgMjQzLCA0OSwgMjExLCA5LCA0OSwgMjgsIDE2LCAyNDcsIDI0NSwgMjU0LCA2NSwgMjMwLCAxOTksIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjQ1LCAyNTQsIDY1LCAyMzEsIDczLCA0OSwgMjgsIDE2LCAyNDcsIDI0NSwgMjQ3LCAyMDEsIDQ5LCAyOCwgMTYsIAotICAgIDI0NywgMjQ1LCAyMTYsIDE4MiwgNDksIDI4LCAxNiwgMjE5LCAxNjMsIDIxNiwgMTgyLCA0OSwgMjgsIDE2LCAyMTksIDE2MywgCi0gICAgMjE2LCAxODMsIDI0NywgMTg2LCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjE2LCAxODMsIDIxNSwgMjA3LCA0OSwgMjgsIDE2LCAKLSAgICAyMTksIDE2MywgMjE2LCAxODMsIDIxNiwgMjIyLCA0OSwgMjgsIDE2LCAyMTksIDE2MywgMjUzLCAyNDQsIDQ5LCAyOCwgMTYsIAotICAgIDIxOSwgMTYzLCAyNTMsIDI0NSwgMjQ3LCAxODYsIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyNTMsIDI0NSwgMjE1LCAyMDcsIAotICAgIDQ5LCAyOCwgMTYsIDIxOSwgMTYzLCAyNTMsIDI0NSwgMjE2LCAyMjIsIDQ5LCAyOCwgMTYsIDI0NywgMjIzLCAyNDMsIDMwLCAKLSAgICA0OSwgMjgsIDE2LCAyNDcsIDIyOSwgMjI2LCAxMzQsIDQ5LCAyOCwgMTYsIDIxOCwgMTM3LCA0OSwgMjgsIDE2LCAyNTQsIDcsIAotICAgIDE5MCwgNDksIDI4LCAxNiwgMjU0LCA3LCAyMTMsIDEyNCwgNDksIDI4LCAxNiwgMjU0LCA3LCAyNDMsIDEzNSwgNDksIDI4LCAKLSAgICAxNiwgMjU0LCA3LCAyNDgsIDMsIDQ5LCAyOCwgMTYsIDI1NCwgNywgMjM0LCAxODIsIDQ5LCAyOCwgMTYsIDI1NCwgNywgCi0gICAgMjEwLCAyMywgNDksIDI4LCAxNiwgMjU0LCA3LCAyMjgsIDIzMywgNDksIDI4LCAxNiwgMjM0LCAxNjIsIDIyOSwgOTYsIAotICAgIDIzMSwgNDQsIDQ5LCAyOCwgMTYsIDIzNCwgMTYzLCAyMjksIDk2LCAyMzEsIDQ0LCA0OSwgMjgsIDE2LCAyMzQsIDE2MiwgCi0gICAgMjI5LCA5NiwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIDIzNCwgMTYzLCAyMjksIDk2LCAyMzQsIDE5NiwgNDksIDI4LCAxNiwgCi0gICAgMjM0LCAzOCwgMjM0LCAxOTYsIDQ5LCAyOCwgMTYsIDI0MiwgMTU5LCAyMjksIDk2LCAyMzQsIDE5NiwgMjgsIDE2LCAyMTksIAotICAgIDE1NSwgMjUyLCAxMzUsIDI4LCAxNiwgNTIsIDI1MiwgMTM1LCAyOCwgMTYsIDQwLCAyNTIsIDEzNSwgMjgsIDE2LCAyMjMsIAotICAgIDUwLCA0MCwgMjUyLCAxMzUsIDI4LCAxNiwgMjQ4LCAxNTUsIDI1MiwgMTM1LCAyOCwgMTYsIDIxOSwgMjUxLCAyNTIsIDEzNSwgCi0gICAgMjgsIDE2LCA0MywgMjIzLCA3NywgNTAsIDI4LCAxNiwgNDQsIDIyMywgNzcsIDUwLCAyOCwgMTYsIDIyMywgNzcsIDI0NywgCi0gICAgMTE4LCAyOCwgMTYsIDI0OCwgMTk2LCAyMjEsIDE2MywgMjgsIDE2LCAyNDgsIDIyMiwgMjUwLCAyNDksIDI4LCAxNiwgMjIxLCAKLSAgICAxNjMsIDI4LCAxNiwgMjQ5LCAyMzQsIDI4LCAxNiwgMjIzLCA3NSwgMjQ0LCAxMTEsIDI4LCAxNiwgMjIzLCA3NSwgMjQ0LCAKLSAgICAxMTAsIDI4LCAxNiwgMjIzLCA3NSwgMjQ0LCAxMDksIDI4LCAxNiwgMjQ0LCAxMzEsIDI4LCAxNiwgMjQ0LCAxMzIsIDUxLCAKLSAgICAyOCwgMTYsIDI1MSwgMTQ4LCA3OCwgMjgsIDE2LCAyNTEsIDI0LCAyOCwgMTYsIDI1MSwgMTU5LCAyOCwgMTYsIDEyNywgMjgsIAotICAgIDE2LCAyMjYsIDE5MywgMjE4LCAxNjMsIDI4LCAxNiwgMjE1LCA1NywgMjE4LCAxNjMsIDI4LCAxNiwgMjE2LCAxNDIsIDIxOCwgCi0gICAgMTYzLCAyOCwgMTYsIDI0NCwgMTAsIDIxOCwgMTYzLCAyOCwgMTYsIDI0NCwgODAsIDIxOCwgMTYzLCAyOCwgMTYsIDIxOSwgCi0gICAgMTI0LCAyMTgsIDE2MywgMjgsIDE2LCAyMTksIDEyMiwgMjQzLCAyNTAsIDI4LCAxNiwgMjQ0LCA4LCAyNDMsIDI1MCwgMjgsIAotICAgIDE2LCAyNDMsIDIwMywgMjUwLCAxNCwgMjgsIDE2LCAyNDMsIDIwMywgMjUwLCAxNSwgMjI2LCAxMzYsIDI1NCwgMTQyLCAyOCwgCi0gICAgMTYsIDI0MywgMjAzLCAyNTAsIDE1LCAyMjYsIDEzNiwgMjUyLCAxMjIsIDI4LCAxNiwgMjUxLCA2NywgMjUwLCAxNCwgMjgsIAotICAgIDE2LCAyNDUsIDcsIDI1MCwgMTQsIDI4LCAxNiwgMjQ1LCA3LCAyNTAsIDE1LCAyMjYsIDEzNiwgMjU0LCAxNDIsIDI4LCAxNiwgCi0gICAgMjQ1LCA3LCAyNTAsIDE1LCAyMjYsIDEzNiwgMjUyLCAxMjIsIDI4LCAxNiwgMjQ2LCA4MywgMjUwLCAxMywgMjgsIDE2LCAKLSAgICAyNDYsIDgzLCAyNTAsIDEyLCAyOCwgMTYsIDIzMCwgODUsIDIzMSwgOTAsIDIyMywgNjEsIDI4LCAxNiwgNTIsIDIyMCwgNzUsIAotICAgIDI4LCAxNiwgNTIsIDI0NCwgNjUsIDI4LCAxNiwgMjQ0LCA2NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjQ0LCA2NiwgMjQ2LCAKLSAgICAxMDYsIDI4LCAxNiwgMjI5LCAxODgsIDIxNCwgMTYzLCAyOCwgMTYsIDIyOSwgMTg4LCAyNDYsIDEwNiwgMjgsIDE2LCAyMjAsIAotICAgIDc2LCAyMTQsIDE2MywgMjgsIDE2LCAyMjAsIDc2LCAyNDYsIDEwNiwgMjgsIDE2LCAyMjQsIDIyLCAxMzgsIDIyMCwgNzUsIAotICAgIDI4LCAxNiwgMjI0LCAyMiwgMTM4LCAyNDQsIDY1LCAyOCwgMTYsIDI0OSwgMjE2LCAyMTYsIDg3LCAyOCwgMTYsIDI0OSwgCi0gICAgODUsIDIxNiwgODcsIDI4LCAxNiwgMjI2LCAxMzYsIDI1NCwgMTQyLCAyOCwgMTYsIDIyNiwgMTM2LCAyNTIsIDEyMiwgMjgsIAotICAgIDE2LCAyMjQsIDQsIDI1NCwgMTQyLCAyOCwgMTYsIDIyNCwgNCwgMjUyLCAxMjIsIDI4LCAxNiwgMjMwLCA4OCwgMjIzLCA2MSwgCi0gICAgMjgsIDE2LCAyMTEsIDI1MSwgMjIzLCA2MSwgMjgsIDE2LCAxNjMsIDIyMywgNjEsIDI4LCAxNiwgMjI0LCAyMiwgMjIzLCAKLSAgICA2MSwgMjgsIDE2LCAyNDUsIDE4OSwgMjIzLCA2MSwgMjgsIDE2LCAyMTksIDExOCwgMjIzLCA2MSwgMjgsIDE2LCAyMTYsIAotICAgIDE2MCwgMjIzLCA2MSwgMjgsIDE2LCAyMTksIDExMCwgMjIzLCA2MSwgMjgsIDE2LCAxMjMsIDI0MCwgMjExLCAyMTUsIDcxLCAKLSAgICAyMjMsIDYxLCAyOCwgMTYsIDIxMSwgMTc5LCAyMjgsIDQzLCAyOCwgMTYsIDk2LCAyMjgsIDQzLCAyOCwgMTYsIDI1MCwgMzYsIAotICAgIDIxMSwgMTc5LCAyMjgsIDQzLCAyOCwgMTYsIDQyLCAyMjgsIDQ0LCAyMTEsIDI1MywgMjgsIDE2LCA0MiwgMjI4LCA0NCwgCi0gICAgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyMCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjYsIAotICAgIDIyOCwgNDQsIDEyMCwgMjUxLCAyMjEsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDQzLCAyMTEsIDI1MywgMjgsIDE2LCAKLSAgICAyMTUsIDIyNiwgMjI4LCA0NCwgNDMsIDI1MSwgMjIxLCAyOCwgMTYsIDIxNSwgMjI2LCAyMjgsIDQ0LCA0NCwgMjExLCAyNTMsIAotICAgIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDQ0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgMTI0LCAKLSAgICAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNiwgMjI4LCA0NCwgMTI0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMTUsIDIyNiwgCi0gICAgMjI4LCA0NCwgMTIwLCA0NCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjYsIDIyOCwgNDQsIDEyMCwgNDQsIDI1MSwgMjIxLCAKLSAgICAyOCwgMTYsIDIzMCwgMTI5LCAyMjgsIDQ0LCAyMTEsIDI1MywgMjgsIDE2LCAyMzAsIDEyOSwgMjI4LCA0NCwgMjUxLCAyMjEsIAotICAgIDI4LCAxNiwgMjE1LCAyMjMsIDIyOCwgNDQsIDEyNCwgMjExLCAyNTMsIDI4LCAxNiwgMjE1LCAyMjMsIDIyOCwgNDQsIDEyNCwgCi0gICAgMjUxLCAyMjEsIDI4LCAxNiwgMjI2LCA0LCAyMjgsIDQzLCAyOCwgMTYsIDIxMywgMTMyLCAyMjgsIDQzLCAyOCwgMTYsIAotICAgIDIyOCwgNDQsIDI1MSwgMjIxLCAyOCwgMTYsIDIyNywgMjAzLCAyMjgsIDQzLCAyOCwgMTYsIDI0OSwgMjQxLCAyMjgsIDQ0LCAKLSAgICAyMTEsIDI1MywgMjgsIDE2LCAyNDksIDI0MSwgMjI4LCA0NCwgMjUxLCAyMjEsIDI4LCAxNiwgMjUxLCAxNDYsIDI4LCAxNiwgCi0gICAgMjExLCAyNTEsIDIyOCwgNDcsIDI4LCAxNiwgMTYzLCAyMjgsIDQ3LCAyOCwgMTYsIDIyNCwgMjIsIDIyOCwgNDcsIDI4LCAKLSAgICAxNiwgMjQ1LCAxODksIDIyOCwgNDcsIDI4LCAxNiwgMjE5LCAxMTgsIDIyOCwgNDcsIDI4LCAxNiwgMjE2LCAxNjAsIDIyOCwgCi0gICAgNDcsIDI4LCAxNiwgMjE5LCAxMTAsIDIyOCwgNDcsIDI4LCAxNiwgMTIzLCAyNDAsIDIxMSwgMjE1LCA3MSwgMjI4LCA0NywgCi0gICAgMjgsIDE2LCAzOCwgMjE4LCAxMzksIDI4LCAxNiwgMzgsIDIxOCwgMjQwLCAyMTgsIDEzOSwgMjgsIDE2LCAzOCwgMjE1LCAKLSAgICAyMzQsIDI4LCAxNiwgMzgsIDIxNSwgMjMzLCAyOCwgMTYsIDM4LCAyMTUsIDIzMiwgMjgsIDE2LCAyNDQsIDEwMSwgMjE1LCAKLSAgICAyMzQsIDI4LCAxNiwgMjQ0LCAxMDEsIDIxNSwgMjMzLCAyOCwgMTYsIDI0NCwgMTAxLCAyMTUsIDIzMiwgMjgsIDE2LCAzOCwgCi0gICAgMjUzLCAxODksIDI0NywgMTIwLCAyOCwgMTYsIDM4LCAyNDQsIDcyLCAyOCwgMTYsIDM4LCAyNDQsIDcxLCAyOCwgMTYsIDM4LCAKLSAgICAyNDQsIDcwLCAyOCwgMTYsIDM4LCAyNDQsIDY5LCAyOCwgMTYsIDM4LCAyNDQsIDY4LCAyOCwgMTYsIDI1MiwgNTgsIDI1MiwgCi0gICAgNzQsIDI4LCAxNiwgMjQ1LCAxNDMsIDI1MiwgNzQsIDI4LCAxNiwgMjUyLCA1OCwgMjE2LCAxMTEsIDI4LCAxNiwgMjQ1LCAKLSAgICAxNDMsIDIxNiwgMTExLCAyOCwgMTYsIDI1MiwgNTgsIDIxOSwgODAsIDI4LCAxNiwgMjQ1LCAxNDMsIDIxOSwgODAsIDI4LCAKLSAgICAxNiwgMjUyLCA1OCwgMjI1LCAxMTUsIDI4LCAxNiwgMjQ1LCAxNDMsIDIyNSwgMTE1LCAyOCwgMTYsIDM4LCAyNTUsIDE0LCAKLSAgICAyOCwgMTYsIDM4LCAyMTgsIDE2NSwgMjgsIDE2LCAzOCwgMjE2LCAyMzgsIDI4LCAxNiwgMzgsIDIxOCwgMTY2LCAyOCwgMTYsIAotICAgIDM4LCAyMzEsIDE2MiwgMjgsIDE2LCAzOCwgMjMxLCAxNjEsIDI4LCAxNiwgMzgsIDI1NSwgMTMsIDI4LCAxNiwgMzgsIDIzMiwgCi0gICAgMTEyLCAyOCwgMTYsIDI1MywgMjU0LCAyMTQsIDE2MywgMjgsIDE2LCAyNTMsIDI1NCwgMjQ2LCAxMDYsIDI4LCAxNiwgMzgsIAotICAgIDI0NywgMTM1LCAyOCwgMTYsIDM4LCAyMjIsIDIzMSwgMjgsIDE2LCAzOCwgMjQ0LCA1OCwgMjgsIDE2LCAzOCwgMjE5LCA3NiwgCi0gICAgMjgsIDE2LCAzOCwgMjUyLCAzOCwgMjgsIDE2LCAzOCwgNTIsIDIxNiwgMTksIDI4LCAxNiwgMzgsIDIxNSwgMjExLCAyMTYsIAotICAgIDE5LCAyOCwgMTYsIDIyMiwgMjM1LCAyOCwgMTYsIDIxOCwgNzUsIDI4LCAxNiwgMjEwLCAxNTksIDI4LCAxNiwgMjI1LCAKLSAgICAxMDcsIDI4LCAxNiwgMjMxLCAyNSwgMjgsIDE2LCAyNDQsIDE3LCAyOCwgMTYsIDI0OSwgMTM4LCAyOCwgMTYsIDI0OCwgNzgsIAotICAgIDI4LCAxNiwgMjQyLCAxNTAsIDIyOCwgNDgsIDIxOSwgOTUsIDI4LCAxNiwgMjQyLCAxNTAsIDIyOCwgNDgsIDIyOCwgNzUsIAotICAgIDIxOSwgOTUsIDI4LCAxNiwgMjE2LCAwLCAyOCwgMTYsIDIxNSwgOTUsIDI4LCAxNiwgMjM1LCAxOTMsIDIxNSwgOTUsIDI4LCAKLSAgICAxNiwgMjE1LCA5NiwgMjE5LCA5NSwgMjgsIDE2LCAyMTUsIDk2LCAyMTQsIDE2MywgMjgsIDE2LCAyMjYsIDE0OCwgMjE4LCAKLSAgICAxMDIsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTksIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTgsIDI4LCAxNiwgMjI2LCAKLSAgICAxNDgsIDIxOCwgOTcsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTYsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTUsIDI4LCAKLSAgICAxNiwgMjI2LCAxNDgsIDIxOCwgOTQsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgOTMsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgCi0gICAgOTIsIDI4LCAxNiwgMjI2LCAxNDgsIDIxOCwgMTAxLCAyOCwgMTYsIDIyNiwgMTQ4LCAyMTgsIDEwMCwgMjgsIDE2LCAyNDEsIAotICAgIDI0NSwgMjgsIDE2LCAyMjksIDEwNSwgMjgsIDE2LCAyNDUsIDE0MywgNjQsIDIxOCwgMTMzLCAyOCwgMTYsIDI0OCwgNzEsIAotICAgIDIxOSwgOTUsIDI4LCAxNiwgMzgsIDEyNCwgMjUxLCAxNjksIDI4LCAxNiwgMzgsIDEyMCwgMjUxLCAxNjksIDI4LCAxNiwgCi0gICAgMzgsIDI0MiwgMCwgMjgsIDE2LCAzOCwgMjE5LCA2NywgMjI1LCA0MywgMjgsIDE2LCAyMjUsIDIxNiwgNzgsIDI4LCAxNiwgCi0gICAgMjI1LCAyMTYsIDEyMCwgNzgsIDI4LCAxNiwgMTYzLCAyMjUsIDIxNiwgNzgsIDI4LCAxNiwgMjQyLCAxODIsIDIxNCwgMTYzLCAKLSAgICAyOCwgMTYsIDI0MiwgMTgyLCAyNDYsIDEwNiwgMjgsIDE2LCAyLCAyNDQsIDEwMCwgMjgsIDE2LCAyNDgsIDE4MCwgMjgsIAotICAgIDE2LCAyNDgsIDE4MSwgMjU0LCAxNTQsIDI4LCAxNiwgMjMxLCAxMzMsIDI4LCAxNiwgMjMyLCAxMjksIDI4LCAxNiwgMjUxLCAKLSAgICAxNDMsIDI4LCAxNiwgMjIwLCAxNTQsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgMTU0LCAyNTEsIDIyMSwgMjgsIDE2LCAyMzAsIAotICAgIDE4NCwgMjgsIDE2LCAyMzAsIDE4NSwgMjUxLCAyMjEsIDI4LCAxNiwgMjIwLCAxNDgsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgCi0gICAgMTQ4LCAyNTEsIDIyMSwgMjgsIDE2LCAyNDMsIDIyMCwgMjExLCAyNTMsIDI4LCAxNiwgMjQzLCAyMjAsIDI1MSwgMjIxLCAKLSAgICAyOCwgMTYsIDIzMiwgMTMwLCAyMjUsIDE4MCwgMjIzLCA2MSwgMjgsIDE2LCAyMzIsIDEzMCwgMjM2LCA0LCAyMjMsIDYxLCAKLSAgICAyOCwgMTYsIDI1MSwgMTQ0LCAyMjMsIDYxLCAyOCwgMTYsIDIyMCwgMTU0LCAyMjMsIDYxLCAyOCwgMTYsIDIzMCwgMTg1LCAKLSAgICAyMjMsIDYxLCAyOCwgMTYsIDIyMCwgMTQ4LCAyMjMsIDYxLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMjUsIDE3OCwgMjQ5LCAxMDcsIAotICAgIDIyNCwgMTc0LCAyMjUsIDE3OSwgMjgsIDE2LCAyMTYsIDI0OSwgMjI1LCAxNzgsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjM2LCAKLSAgICAzLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMjUsIDE3OCwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMjUsIDE4MCwgMjQ3LCAyMTEsIAotICAgIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAyMjUsIDE3OSwgMjgsIDE2LCAyMTYsIDI0OSwgCi0gICAgMjM2LCAyLCAyNDksIDEwNywgMjI0LCAxNzQsIDIzNiwgMywgMjgsIDE2LCAyMTYsIDI0OSwgMjM2LCAyLCAyNDksIDEwNywgCi0gICAgMjI0LCAxNzQsIDIzNiwgNCwgMjQ3LCAyMTEsIDI4LCAxNiwgMjE2LCAyNDksIDIzNiwgMiwgMjQ5LCAxMDcsIDIyNCwgMTc0LCAKLSAgICAyMzYsIDQsIDI0NywgMjEwLCAyOCwgMTYsIDIxNiwgMjQ5LCAyMzYsIDIsIDI0OSwgMTA3LCAyMjQsIDE3NCwgMjM2LCA0LCAKLSAgICAyNDcsIDIwOSwgMjgsIDE2LCAyNDksIDEzMywgMjgsIDE2LCAyNDIsIDEyNiwgMjUxLCA2NywgMjUwLCAxNCwgMjgsIDE2LCAKLSAgICAyNDIsIDEyNiwgMjQ1LCA3LCAyNTAsIDE0LCAyOCwgMTYsIDQyLCAyNTMsIDE1OCwgMjgsIDE2LCAyMTMsIDE1MSwgMjgsIAotICAgIDE2LCAyMjUsIDE0LCAyOCwgMTYsIDI1MCwgNSwgMjgsIDE2LCAyMjEsIDIwMywgMjgsIDE2LCAyNTAsIDksIDI4LCAxNiwgCi0gICAgMjE2LCA3LCAyOCwgMTYsIDIyNCwgMjQyLCAyOCwgMTYsIDIyNCwgMjQzLCAyNDQsIDYwLCAyOCwgMTYsIDIyMSwgMjA0LCAKLSAgICAyNDQsIDYwLCAyOCwgMTYsIDIxNiwgOCwgMjIzLCA1OCwgMjgsIDE2LCAyMjUsIDE2MywgMjE4LCA2NiwgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjI5LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTgsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIwOCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjAxLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxOTMsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDE4NywgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTg2LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAxODUsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE4NCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjI4LCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAyMjcsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyNiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMjI1LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjQsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIyMywgMjYsIDIxMywgCi0gICAgMTM3LCAxODcsIDIxNywgMjIyLCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMjEsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIAotICAgIDIyMCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE5LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAyMTcsIDI2LCAyMTMsIAotICAgIDEzNywgMTg3LCAyMTcsIDIxNiwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMjE1LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAKLSAgICAyMTQsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDIxMywgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgMTkyLCAyNiwgMjEzLCAKLSAgICAxMzcsIDE4NywgMjE3LCAxOTEsIDI2LCAyMTMsIDEzNywgMTg3LCAyMTcsIDE5MCwgMjYsIDIxMywgMTM3LCAxODcsIDIxNywgCi0gICAgMTg5LCAyNiwgMjEzLCAxMzcsIDE4NywgMjE3LCAxODgsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyOSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjE4LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDEsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDE5MywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTg2LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxODUsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIyNywgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjI2LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMjUsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIyNCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjIxLCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAyMjAsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIxOSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMjE0LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTMsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIxMiwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMjExLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMTAsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDIwOSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjA3LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAyMDYsIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDIwNSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjA0LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAKLSAgICAyMDMsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDIwMiwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMjAwLCAyNiwgMjM1LCAKLSAgICAyMTQsIDE4NywgMjE3LCAxOTksIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5OCwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgCi0gICAgMTk3LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTYsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIDE5NSwgMjYsIDIzNSwgCi0gICAgMjE0LCAxODcsIDIxNywgMTk0LCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxOTIsIDI2LCAyMzUsIDIxNCwgMTg3LCAyMTcsIAotICAgIDE5MSwgMjYsIDIzNSwgMjE0LCAxODcsIDIxNywgMTkwLCAyNiwgMjM1LCAyMTQsIDE4NywgMjE3LCAxODksIDI2LCAyMzUsIAotICAgIDIxNCwgMTg3LCAyMTcsIDE4OCwgMzgsIDI2LCAyOCwgMjE1LCAyMDgsIDM4LCAyNiwgMjgsIDIxNiwgMjIzLCAzOCwgMjYsIAotICAgIDI4LCAyMjUsIDE4OCwgMjYsIDI4LCAyMzMsIDMxLCAyMzAsIDE0MiwgMzEsIDI0NSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0MSwgCi0gICAgMjIyLCAyNDUsIDIyMywgMjQ3LCAyMjQsIDMxLCAyNDAsIDIxNCwgMjQ1LCAyMjMsIDI0NywgMjI0LCAzMSwgMjQ1LCAyMjIsIAotICAgIDI0MSwgMjIzLCAyNDcsIDIyNCwgMzEsIDI0NSwgMjIyLCAyNDAsIDIxMywgMjQ3LCAyMjQsIDMxLCAyNDUsIDIyMywgMTgwLCAKLSAgICAzMSwgMjUwLCAxNzQsIDE4MCwgMzEsIDI0MywgMjI5LCAyNTAsIDM1LCAxODAsIDMxLCAyMzAsIDE3NywgMTgwLCAzMSwgCi0gICAgMjUyLCAxMzAsIDE4MCwgMzEsIDIzNCwgMTc5LCAyMTksIDc5LCAxODAsIDMxLCAyNDksIDE3OSwgMTgwLCAzMSwgMjUzLCAKLSAgICAyMzMsIDE4MCwgMzEsIDIyNiwgMTYzLCAxODAsIDMxLCAyNTEsIDE1MywgMjI2LCAxMzAsIDE4MCwgMzEsIDI0OCwgNzMsIAotICAgIDE3NywgMjQ3LCAxNzksIDE4MCwgMzEsIDI0NywgMTc2LCAxODAsIDMxLCAyMTAsIDIyMiwgMTgwLCAzMSwgMjM1LCAyNDcsIAotICAgIDE4MCwgMzEsIDIyNSwgMTk3LCAxODAsIDMxLCAyMjMsIDEyNywgMTgwLCAzMSwgMjQ5LCAxODksIDE4MCwgMzEsIDI0MSwgCi0gICAgNjAsIDI1MiwgMTg0LCAxODAsIDMxLCAyMTIsIDU5LCAxODAsIDMxLCAyNDQsIDM5LCAxODAsIDMxLCAyNTQsIDI0NiwgMTgwLCAKLSAgICAzMSwgMjIzLCA4OSwgMTgwLCAzMSwgMjIzLCA2NSwgMTgwLCAzMSwgMjQ1LCAyMjEsIDE4MCwgMzEsIDIzNSwgNTMsIDE4MCwgCi0gICAgMzEsIDI0OSwgMTg0LCAxODAsIDMxLCAyNDUsIDE0MiwgMTgwLCAzMSwgMjQ2LCA1MiwgMTgwLCAzMSwgMjUwLCAxNDUsIAotICAgIDE4MCwgMzEsIDI0OCwgODIsIDE4MCwgMzEsIDIzLCAyMjMsIDY0LCAxODAsIDMxLCAyMjYsIDgxLCAxODAsIDMxLCAyMzMsIAotICAgIDM0LCAxODAsIDMxLCAyNDksIDI1NCwgMTgwLCAzMSwgMjM0LCA3NywgMTgwLCAzMSwgMjQzLCA4NiwgMTgwLCAzMSwgMjE4LCAKLSAgICAxMTIsIDE4MCwgMzEsIDIyNCwgMTMwLCAxODAsIDMxLCAyNDMsIDIyOCwgMTgwLCAzMSwgMjIzLCA2NiwgMTgwLCAzMSwgCi0gICAgMjMzLCA3MSwgMTc3LCAyMzAsIDE1NywgMTgwLCAzMSwgMjIzLCA2MiwgMTgwLCAzMSwgMjQyLCAxNjgsIDIxNiwgNDIsIAotICAgIDIzMSwgNzYsIDE4MCwgMzEsIDI0NSwgMTQ0LCAxODAsIDMxLCAyMTgsIDEyNCwgMTgwLCAzMSwgMjQyLCAxMjgsIDE4MCwgCi0gICAgMzEsIDI0NSwgMTM2LCAxODAsIDMxLCAyMjUsIDIzNSwgMTgwLCAzMSwgMjIyLCAyMjUsIDE4MCwgMzEsIDI0NCwgNTksIAotICAgIDE4MCwgMzEsIDIxNCwgOCwgMTc3LCAyMTIsIDQ0LCAxODAsIDMxLCAyNDksIDE5MywgMTgwLCAzMSwgMjMxLCA4OSwgMTgwLCAKLSAgICAzMSwgMjQ1LCA2MSwgMTgwLCAzMSwgMjE0LCAxNzIsIDE4MCwgMzEsIDI0NywgMjEyLCAxODAsIDMxLCAyNTAsIDAsIDIzMCwgCi0gICAgMTEwLCAxODAsIDMxLCAyNDIsIDEwNiwgMTgwLCAzMSwgMjQzLCA4NywgMjM1LCAyNTUsIDE4MCwgMzEsIDIzMSwgMTQxLCAKLSAgICAxODAsIDMxLCAyNTUsIDEwLCAxODAsIDMxLCAyNDUsIDE1NywgMTgwLCAzMSwgMjQ2LCAxMDksIDE4MCwgMzEsIDIxMiwgNDIsIAotICAgIDE4MCwgMzEsIDIxOSwgMTUwLCAxODAsIDMxLCAyMzUsIDIyMiwgMTgwLCAzMSwgMjQ4LCA0MiwgMTgwLCAzMSwgMjQ4LCAKLSAgICAxNjAsIDE4MCwgMzEsIDI0NywgMjA4LCAxODAsIDMxLCAyNDUsIDI5LCAxODAsIDMxLCAyMjAsIDExNSwgMTgwLCAzMSwgCi0gICAgMjE4LCAxMjgsIDE4MCwgMzEsIDI0MiwgMiwgMTgwLCAzMSwgMjQ5LCAyMTIsIDE4MCwgMzEsIDI0OSwgMjUxLCAxODAsIDMxLCAKLSAgICAyNDQsIDE3NywgMTgwLCAzMSwgMjU0LCAyMTIsIDE4MCwgMzEsIDI0OSwgMjExLCAxODAsIDMxLCAyMjYsIDE5NywgMjE2LCAKLSAgICAxOTYsIDIxMywgMjQyLCAxODAsIDMxLCAyNDcsIDIzMiwgMTgwLCAzMSwgMjMzLCAxMjQsIDE4MCwgMzEsIDI0NCwgMTMsIAotICAgIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAxMTAsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAKLSAgICAxMDUsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAxNTgsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIAotICAgIDIxLCAxNjEsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAxODksIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAKLSAgICAxNzQsIDIxLCAxOTQsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAxOTgsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgCi0gICAgMjE0LCAxNzQsIDIxLCAxOTUsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE0LCAxNzQsIDIxLCAyMDAsIDI0OSwgMTQ5LCAyMjIsIAotICAgIDIwMiwgMjE2LCAyNDMsIDIxLCAxMTAsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxMDUsIDI0OSwgMTQ5LCAKLSAgICAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxNTgsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxNjEsIDI0OSwgCi0gICAgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxODksIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxOTQsIAotICAgIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAxOTgsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAKLSAgICAxOTUsIDI0OSwgMTQ5LCAyMjIsIDIwMiwgMjE2LCAyNDMsIDIxLCAyMDAsIDExLCAyMywgNiwgNjEsIDExLCAyMywgNiwgCi0gICAgMjUzLCAxNTgsIDExLCAyMywgNiwgMjUxLCA2NiwgMTEsIDIzLCA2LCAyNDksIDYwLCAxMSwgMjMsIDYsIDc1LCAxMSwgMjMsIAotICAgIDYsIDI0NSwgNiwgMTEsIDIzLCA2LCAyNDMsIDIwMiwgMTEsIDIzLCA2LCAyNDIsIDYwLCAxMSwgMjMsIDYsIDczLCAxMSwgCi0gICAgMjMsIDYsIDIzNSwgMTQ0LCAxMSwgMjMsIDYsIDIzNSwgMjMsIDExLCAyMywgNiwgMTU2LCAxMSwgMjMsIDYsIDE5MywgMTEsIAotICAgIDIzLCA2LCAyMzAsIDI1LCAxMSwgMjMsIDYsIDc2LCAxMSwgMjMsIDYsIDIyNiwgMTA1LCAxMSwgMjMsIDYsIDIyNCwgOTYsIAotICAgIDExLCAyMywgNiwgMTUzLCAxMSwgMjMsIDYsIDIyMiwgOTEsIDExLCAyMywgNiwgMjE3LCAxNTIsIDExLCAyMywgNiwgNzAsIAotICAgIDExLCAyMywgNiwgMjE0LCAxMDUsIDExLCAyMywgNiwgMjEyLCA5OCwgMTEsIDIzLCA2LCAyMTEsIDE3OCwgMTEsIDIzLCA2LCAKLSAgICAyMTEsIDExNywgMTEsIDIzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCA0LCA2MSwgMTEsIDIzLCA0LCAyNTMsIDE1OCwgMTEsIAotICAgIDIzLCA0LCAyNTEsIDY2LCAxMSwgMjMsIDQsIDI0OSwgNjAsIDExLCAyMywgNCwgNzUsIDExLCAyMywgNCwgMjQ1LCA2LCAxMSwgCi0gICAgMjMsIDQsIDI0MywgMjAyLCAxMSwgMjMsIDQsIDI0MiwgNjAsIDExLCAyMywgNCwgNzMsIDExLCAyMywgNCwgMjM1LCAxNDQsIAotICAgIDExLCAyMywgNCwgMjM1LCAyMywgMTEsIDIzLCA0LCAxNTYsIDExLCAyMywgNCwgMTkzLCAxMSwgMjMsIDQsIDIzMCwgMjUsIAotICAgIDExLCAyMywgNCwgNzYsIDExLCAyMywgNCwgMjI2LCAxMDUsIDExLCAyMywgNCwgMjI0LCA5NiwgMTEsIDIzLCA0LCAxNTMsIAotICAgIDExLCAyMywgNCwgMjIyLCA5MSwgMTEsIDIzLCA0LCAyMTcsIDE1MiwgMTEsIDIzLCA0LCA3MCwgMTEsIDIzLCA0LCAyMTQsIAotICAgIDEwNSwgMTEsIDIzLCA0LCAyMTIsIDk4LCAxMSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDQsIDIxMSwgMTE3LCAxMSwgCi0gICAgMjMsIDQsIDIxMCwgMTU5LCAxMSwgMzIsIDYsIDYxLCAxMSwgMzIsIDYsIDI1MywgMTU4LCAxMSwgMzIsIDYsIDI1MSwgNjYsIAotICAgIDExLCAzMiwgNiwgMjQ5LCA2MCwgMTEsIDMyLCA2LCA3NSwgMTEsIDMyLCA2LCAyNDUsIDYsIDExLCAzMiwgNiwgMjQzLCAKLSAgICAyMDIsIDExLCAzMiwgNiwgMjQyLCA2MCwgMTEsIDMyLCA2LCA3MywgMTEsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDMyLCA2LCAKLSAgICAyMzUsIDIzLCAxMSwgMzIsIDYsIDE1NiwgMTEsIDMyLCA2LCAxOTMsIDExLCAzMiwgNiwgMjMwLCAyNSwgMTEsIDMyLCA2LCAKLSAgICA3NiwgMTEsIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDMyLCA2LCAyMjQsIDk2LCAxMSwgMzIsIDYsIDE1MywgMTEsIDMyLCA2LCAKLSAgICAyMjIsIDkxLCAxMSwgMzIsIDYsIDIxNywgMTUyLCAxMSwgMzIsIDYsIDcwLCAxMSwgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzIsIAotICAgIDYsIDIxMiwgOTgsIDExLCAzMiwgNiwgMjExLCAxNzgsIDExLCAzMiwgNiwgMjExLCAxMTcsIDExLCAzMiwgNiwgMjEwLCAKLSAgICAxNTksIDExLCAzMiwgNCwgNjEsIDExLCAzMiwgNCwgMjUzLCAxNTgsIDExLCAzMiwgNCwgMjUxLCA2NiwgMTEsIDMyLCA0LCAKLSAgICAyNDksIDYwLCAxMSwgMzIsIDQsIDc1LCAxMSwgMzIsIDQsIDI0NSwgNiwgMTEsIDMyLCA0LCAyNDMsIDIwMiwgMTEsIDMyLCAKLSAgICA0LCA3MywgMTEsIDMyLCA0LCAyMzUsIDE0NCwgMTEsIDMyLCA0LCAyMzUsIDIzLCAxMSwgMzIsIDQsIDE1NiwgMTEsIDMyLCAKLSAgICA0LCAxOTMsIDExLCAzMiwgNCwgMjMwLCAyNSwgMTEsIDMyLCA0LCA3NiwgMTEsIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDMyLCAKLSAgICA0LCAyMjQsIDk2LCAxMSwgMzIsIDQsIDE1MywgMTEsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMzIsIDQsIDIxNywgMTUyLCAxMSwgCi0gICAgMzIsIDQsIDcwLCAxMSwgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzIsIDQsIDIxMiwgOTgsIDExLCAzMiwgNCwgMjExLCAxNzgsIAotICAgIDExLCAzMiwgNCwgMjExLCAxMTcsIDExLCAzMiwgNCwgMjEwLCAxNTksIDExLCAyMywgMzIsIDYsIDYxLCAxMSwgMjMsIDMyLCAKLSAgICA2LCAyNTMsIDE1OCwgMTEsIDIzLCAzMiwgNiwgMjUxLCA2NiwgMTEsIDIzLCAzMiwgNiwgMjQ5LCA2MCwgMTEsIDIzLCAzMiwgCi0gICAgNiwgNzUsIDExLCAyMywgMzIsIDYsIDI0NSwgNiwgMTEsIDIzLCAzMiwgNiwgMjQzLCAyMDIsIDExLCAyMywgMzIsIDYsIAotICAgIDI0MiwgNjAsIDExLCAyMywgMzIsIDYsIDczLCAxMSwgMjMsIDMyLCA2LCAyMzUsIDE0NCwgMTEsIDIzLCAzMiwgNiwgMjM1LCAKLSAgICAyMywgMTEsIDIzLCAzMiwgNiwgMTU2LCAxMSwgMjMsIDMyLCA2LCAxOTMsIDExLCAyMywgMzIsIDYsIDIzMCwgMjUsIDExLCAKLSAgICAyMywgMzIsIDYsIDc2LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDEwNSwgMTEsIDIzLCAzMiwgNiwgMjI0LCA5NiwgMTEsIDIzLCAKLSAgICAzMiwgNiwgMTUzLCAxMSwgMjMsIDMyLCA2LCAyMjIsIDkxLCAxMSwgMjMsIDMyLCA2LCAyMTcsIDE1MiwgMTEsIDIzLCAzMiwgCi0gICAgNiwgNzAsIDExLCAyMywgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDMyLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDMyLCA2LCAKLSAgICAyMTEsIDE3OCwgMTEsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCAKLSAgICA0LCA2MSwgMTEsIDIzLCAzMiwgNCwgMjUzLCAxNTgsIDExLCAyMywgMzIsIDQsIDI1MSwgNjYsIDExLCAyMywgMzIsIDQsIAotICAgIDI0OSwgNjAsIDExLCAyMywgMzIsIDQsIDc1LCAxMSwgMjMsIDMyLCA0LCAyNDUsIDYsIDExLCAyMywgMzIsIDQsIDI0MywgCi0gICAgMjAyLCAxMSwgMjMsIDMyLCA0LCAyNDIsIDYwLCAxMSwgMjMsIDMyLCA0LCA3MywgMTEsIDIzLCAzMiwgNCwgMjM1LCAxNDQsIAotICAgIDExLCAyMywgMzIsIDQsIDIzNSwgMjMsIDExLCAyMywgMzIsIDQsIDE1NiwgMTEsIDIzLCAzMiwgNCwgMTkzLCAxMSwgMjMsIAotICAgIDMyLCA0LCAyMzAsIDI1LCAxMSwgMjMsIDMyLCA0LCA3NiwgMTEsIDIzLCAzMiwgNCwgMjI2LCAxMDUsIDExLCAyMywgMzIsIAotICAgIDQsIDIyNCwgOTYsIDExLCAyMywgMzIsIDQsIDE1MywgMTEsIDIzLCAzMiwgNCwgMjIyLCA5MSwgMTEsIDIzLCAzMiwgNCwgCi0gICAgMjE3LCAxNTIsIDExLCAyMywgMzIsIDQsIDcwLCAxMSwgMjMsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNCwgMjEyLCAKLSAgICA5OCwgMTEsIDIzLCAzMiwgNCwgMjExLCAxNzgsIDExLCAyMywgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDExOSwgNiwgNjEsIDExLCAxMTksIDYsIDI1MSwgNjYsIDExLCAxMTksIDYsIDI0OSwgNjAsIDExLCAxMTksIAotICAgIDYsIDI0MywgMjAyLCAxMSwgMTE5LCA2LCAyMzUsIDE0NCwgMTEsIDExOSwgNiwgMjM1LCAyMywgMTEsIDExOSwgNiwgMjMwLCAKLSAgICAyNSwgMTEsIDExOSwgNiwgNzYsIDExLCAxMTksIDYsIDIyNiwgMTA1LCAxMSwgMTE5LCA2LCAyMjQsIDk2LCAxMSwgMTE5LCAKLSAgICA2LCAyMjIsIDkxLCAxMSwgMTE5LCA2LCAyMTcsIDE1MiwgMTEsIDExOSwgNiwgNzAsIDExLCAxMTksIDYsIDIxNCwgMTA1LCAKLSAgICAxMSwgMTE5LCA2LCAyMTIsIDk4LCAxMSwgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDExOSwgNiwgMjExLCAxMTcsIDExLCAxMTksIAotICAgIDYsIDIxMCwgMTU5LCAxMSwgMTE5LCA0LCA2MSwgMTEsIDExOSwgNCwgMjUzLCAxNTgsIDExLCAxMTksIDQsIDI1MSwgNjYsIAotICAgIDExLCAxMTksIDQsIDI0OSwgNjAsIDExLCAxMTksIDQsIDI0NSwgNiwgMTEsIDExOSwgNCwgMjQyLCA2MCwgMTEsIDExOSwgNCwgCi0gICAgNzMsIDExLCAxMTksIDQsIDIzNSwgMTQ0LCAxMSwgMTE5LCA0LCAyMzUsIDIzLCAxMSwgMTE5LCA0LCAxNTYsIDExLCAxMTksIAotICAgIDQsIDE5MywgMTEsIDExOSwgNCwgMjMwLCAyNSwgMTEsIDExOSwgNCwgMjI2LCAxMDUsIDExLCAxMTksIDQsIDIyNCwgOTYsIAotICAgIDExLCAxMTksIDQsIDE1MywgMTEsIDExOSwgNCwgMjIyLCA5MSwgMTEsIDExOSwgNCwgMjE3LCAxNTIsIDExLCAxMTksIDQsIAotICAgIDcwLCAxMSwgMTE5LCA0LCAyMTQsIDEwNSwgMTEsIDExOSwgNCwgMjEyLCA5OCwgMTEsIDExOSwgNCwgMjExLCAxNzgsIDExLCAKLSAgICAxMTksIDQsIDIxMSwgMTE3LCAxMSwgMTE5LCA0LCAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDYsIDYxLCAxMSwgMjMsIDExOSwgCi0gICAgNiwgMjUzLCAxNTgsIDExLCAyMywgMTE5LCA2LCAyNTEsIDY2LCAxMSwgMjMsIDExOSwgNiwgMjQ5LCA2MCwgMTEsIDIzLCAKLSAgICAxMTksIDYsIDc1LCAxMSwgMjMsIDExOSwgNiwgMjQ1LCA2LCAxMSwgMjMsIDExOSwgNiwgMjQzLCAyMDIsIDExLCAyMywgCi0gICAgMTE5LCA2LCAyNDIsIDYwLCAxMSwgMjMsIDExOSwgNiwgNzMsIDExLCAyMywgMTE5LCA2LCAyMzUsIDE0NCwgMTEsIDIzLCAKLSAgICAxMTksIDYsIDIzNSwgMjMsIDExLCAyMywgMTE5LCA2LCAxNTYsIDExLCAyMywgMTE5LCA2LCAxOTMsIDExLCAyMywgMTE5LCAKLSAgICA2LCAyMzAsIDI1LCAxMSwgMjMsIDExOSwgNiwgNzYsIDExLCAyMywgMTE5LCA2LCAyMjYsIDEwNSwgMTEsIDIzLCAxMTksIDYsIAotICAgIDIyNCwgOTYsIDExLCAyMywgMTE5LCA2LCAxNTMsIDExLCAyMywgMTE5LCA2LCAyMjIsIDkxLCAxMSwgMjMsIDExOSwgNiwgCi0gICAgMjE3LCAxNTIsIDExLCAyMywgMTE5LCA2LCA3MCwgMTEsIDIzLCAxMTksIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDExOSwgNiwgCi0gICAgMjEyLCA5OCwgMTEsIDIzLCAxMTksIDYsIDIxMSwgMTc4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxMTcsIDExLCAyMywgMTE5LCAKLSAgICA2LCAyMTAsIDE1OSwgMTEsIDIzLCAxMTksIDQsIDYxLCAxMSwgMjMsIDExOSwgNCwgMjUzLCAxNTgsIDExLCAyMywgMTE5LCAKLSAgICA0LCAyNTEsIDY2LCAxMSwgMjMsIDExOSwgNCwgMjQ5LCA2MCwgMTEsIDIzLCAxMTksIDQsIDc1LCAxMSwgMjMsIDExOSwgNCwgCi0gICAgMjQ1LCA2LCAxMSwgMjMsIDExOSwgNCwgMjQzLCAyMDIsIDExLCAyMywgMTE5LCA0LCAyNDIsIDYwLCAxMSwgMjMsIDExOSwgCi0gICAgNCwgNzMsIDExLCAyMywgMTE5LCA0LCAyMzUsIDE0NCwgMTEsIDIzLCAxMTksIDQsIDIzNSwgMjMsIDExLCAyMywgMTE5LCA0LCAKLSAgICAxNTYsIDExLCAyMywgMTE5LCA0LCAxOTMsIDExLCAyMywgMTE5LCA0LCAyMzAsIDI1LCAxMSwgMjMsIDExOSwgNCwgNzYsIAotICAgIDExLCAyMywgMTE5LCA0LCAyMjYsIDEwNSwgMTEsIDIzLCAxMTksIDQsIDIyNCwgOTYsIDExLCAyMywgMTE5LCA0LCAxNTMsIAotICAgIDExLCAyMywgMTE5LCA0LCAyMjIsIDkxLCAxMSwgMjMsIDExOSwgNCwgMjE3LCAxNTIsIDExLCAyMywgMTE5LCA0LCA3MCwgCisgICAgMTIsIDEzLCAyMjMsIDE5MywgMTIsIDEzLCAyMjMsIDE5MiwgMTIsIDEzLCAyMjIsIDkwLCAxMiwgMTMsIDIyMiwgODksIDEyLCAKKyAgICAxMywgMjIyLCA4OCwgMTIsIDEzLCAyMjIsIDg3LCAxMiwgMTMsIDIyMiwgODYsIDEyLCAxMywgMjIyLCA4NSwgMTIsIDEzLCAKKyAgICAyMjIsIDg0LCAxMiwgMTMsIDIyMiwgODMsIDEyLCAxMywgMjIyLCA4MiwgMTIsIDEzLCAyMjIsIDgxLCAxMiwgMTMsIDIyMiwgCisgICAgODAsIDEyLCAxMywgMjIyLCA3OSwgMTIsIDEzLCAyMjIsIDc4LCAxMiwgMTMsIDIyMiwgNzcsIDEyLCAxMywgMjIyLCA3NiwgCisgICAgMTIsIDEzLCAyMjIsIDc1LCAxMiwgMTMsIDIyMiwgNzQsIDEyLCAxMywgMjIyLCA3MywgMTIsIDEzLCAyMjIsIDcyLCAxMiwgCisgICAgMTMsIDIyMiwgNzEsIDEyLCAxMywgMjIyLCA3MCwgMTIsIDEzLCAyMjIsIDY5LCAxMiwgMTMsIDIyMiwgNjgsIDEyLCAxMywgCisgICAgMjIyLCA2NywgMTIsIDEzLCAyMjIsIDY2LCAxMiwgMTMsIDIyMiwgNjUsIDEyLCAxMywgMjIyLCA2NCwgMTIsIDEzLCAyMjIsIAorICAgIDYzLCAxMiwgMTMsIDIyMiwgNjIsIDEyLCAxMywgMjIyLCA2MSwgMTIsIDEzLCAyMjIsIDYwLCAxMiwgMTMsIDIyMiwgNTksIAorICAgIDEyLCAxMywgMjIyLCA1OCwgMTIsIDEzLCAyMjIsIDU3LCAxMiwgMTMsIDIyMiwgNTYsIDEyLCAxMywgMjIyLCA1NSwgMTIsIAorICAgIDEzLCAyMjIsIDU0LCAxMiwgMTMsIDIyMiwgNTMsIDEyLCAxMywgMjIyLCA1MiwgMTIsIDEzLCAyMjIsIDUxLCAxMiwgMTMsIAorICAgIDIyMiwgNTAsIDEyLCAxMywgMjIyLCA0OSwgMTIsIDEzLCAyMjIsIDQ4LCAxMiwgMTMsIDIyMiwgNDcsIDEyLCAxMywgMjIyLCAKKyAgICA0NiwgMTIsIDEzLCAyMjIsIDQ1LCAxMiwgMTMsIDIyMiwgNDQsIDEyLCAxMywgMjIyLCA0MywgMTIsIDEzLCAyMjIsIDQyLCAKKyAgICAxMiwgMTMsIDIyMiwgNDEsIDEyLCAxMywgMjIyLCA0MCwgMTIsIDEzLCAyMjIsIDM5LCAxMiwgMTMsIDIyMiwgMzgsIDEyLCAKKyAgICAxMywgMjIyLCAzNywgMTIsIDEzLCAyMTcsIDE1MSwgMTIsIDEzLCAyMTcsIDE1MCwgMTIsIDEzLCAyMTcsIDE0OSwgMTIsIAorICAgIDEzLCAyMTcsIDE0OCwgMTIsIDEzLCAyMTcsIDE0NywgMTIsIDEzLCAyMTcsIDE0NiwgMTIsIDEzLCAyMTcsIDE0NSwgMTIsIAorICAgIDEzLCAyMTcsIDE0NCwgMTIsIDEzLCAyMTcsIDE0MywgMTIsIDEzLCAyMTcsIDE0MiwgMTIsIDEzLCAyMTcsIDE0MSwgMTIsIAorICAgIDEzLCAyMTcsIDE0MCwgMTIsIDEzLCAyMTcsIDEzOSwgMTIsIDEzLCAyMTcsIDEzOCwgMTIsIDEzLCAyMTcsIDEzNywgMTIsIAorICAgIDEzLCAyMTcsIDEzNiwgMTIsIDEzLCAyMTcsIDEzNSwgMTIsIDEzLCAyMTcsIDEzNCwgMTIsIDEzLCAyMTcsIDEzMywgMTIsIAorICAgIDEzLCAyMTcsIDEzMiwgMTIsIDEzLCAyMTcsIDEzMSwgMTIsIDEzLCAyMTcsIDEzMCwgMTIsIDEzLCAyMTcsIDEyOSwgMTIsIAorICAgIDEzLCAyMTcsIDEyOCwgMTIsIDEzLCAyMTcsIDEyNywgMTIsIDEzLCAyMTcsIDEyNiwgMTIsIDEzLCAyMTcsIDEyNSwgMTIsIAorICAgIDEzLCAyMTcsIDEyNCwgMTIsIDEzLCAyMTcsIDEyMywgMTIsIDEzLCAyMTcsIDEyMiwgMTIsIDEzLCAyMTcsIDEyMSwgMTIsIAorICAgIDEzLCAyMTcsIDEyMCwgMTIsIDEzLCAyMTcsIDExOSwgMTIsIDEzLCAyMTcsIDExOCwgMTIsIDEzLCAyMTcsIDExNywgMTIsIAorICAgIDEzLCAyMTcsIDExNiwgMTIsIDEzLCAyMTcsIDExNSwgMTIsIDEzLCAyMTcsIDExNCwgMTIsIDEzLCAyMTcsIDExMywgMTIsIAorICAgIDEzLCAyMTcsIDExMiwgMTIsIDEzLCAyMTcsIDExMSwgMTIsIDEzLCAyMTcsIDExMCwgMTIsIDEzLCAyMTcsIDEwOSwgMTIsIAorICAgIDEzLCAyMTcsIDEwOCwgMTIsIDEzLCAyMTUsIDIyLCAxMiwgMTMsIDIxNSwgMjEsIDEyLCAxMywgMjE1LCAyMCwgMTIsIDEzLCAKKyAgICAyMTUsIDE5LCAxMiwgMTMsIDIxNSwgMTgsIDEyLCAxMywgMjE1LCAxNywgMTIsIDEzLCAyMTUsIDE2LCAxMiwgMTMsIDIxNSwgCisgICAgMTUsIDEyLCAxMywgMjE1LCAxNCwgMTIsIDEzLCAyMTUsIDEzLCAxMiwgMTMsIDIxNSwgMTIsIDEyLCAxMywgMjE1LCAxMSwgCisgICAgMTIsIDEzLCAyMTUsIDEwLCAxMiwgMTMsIDIxNSwgOSwgMTIsIDEzLCAyMTUsIDgsIDEyLCAxMywgMjE1LCA3LCAxMiwgMTMsIAorICAgIDIxNSwgNiwgMTIsIDEzLCAyMTUsIDUsIDEyLCAxMywgMjE1LCA0LCAxMiwgMTMsIDIxNSwgMywgMTIsIDEzLCAyMTUsIDIsIAorICAgIDEyLCAxMywgMjE1LCAxLCAxMiwgMTMsIDIxNSwgMCwgMTIsIDEzLCAyMTQsIDI1NSwgMTIsIDEzLCAyMTQsIDI1NCwgMTIsIAorICAgIDEzLCAyMTQsIDI1MywgMTIsIDEzLCAyMTQsIDI1MiwgMTIsIDEzLCAyMTQsIDI1MSwgMTIsIDEzLCAyMTQsIDI1MCwgMTIsIAorICAgIDEzLCAyMTQsIDI0OSwgMTIsIDEzLCAyMTQsIDI0OCwgMTIsIDEzLCAyMTQsIDI0NywgMTIsIDEzLCAyMTQsIDI0NiwgMTIsIAorICAgIDEzLCAyMTQsIDI0NSwgMTIsIDEzLCAyMTQsIDI0NCwgMTIsIDEzLCAyMTQsIDI0MywgMTIsIDEzLCAyMTQsIDI0MiwgMTIsIAorICAgIDEzLCAyMTQsIDI0MSwgMTIsIDEzLCAyMTQsIDI0MCwgMTIsIDEzLCAyMTQsIDIzOSwgMTIsIDEzLCAyMTQsIDIzOCwgMTIsIAorICAgIDEzLCAyMTQsIDIzNywgMTIsIDEzLCAyMTQsIDIzNiwgMTIsIDEzLCAyMTQsIDIzNSwgMTIsIDEzLCAyMTQsIDIzNCwgMTIsIAorICAgIDEzLCAyMTQsIDIzMywgMTIsIDEzLCAyMTQsIDIzMiwgMTIsIDEzLCAyMTQsIDEwNCwgMTIsIDEzLCAyMTQsIDEwMywgMTIsIAorICAgIDEzLCAyMTQsIDEwMiwgMTIsIDEzLCAyMTQsIDEwMSwgMTIsIDEzLCAyMTQsIDEwMCwgMTIsIDEzLCAyMTQsIDk5LCAxMiwgCisgICAgMTMsIDIxNCwgOTgsIDEyLCAxMywgMjE0LCA5NywgMTIsIDEzLCAyMTQsIDk2LCAxMiwgMTMsIDIxNCwgOTUsIDEyLCAxMywgCisgICAgMjE0LCA5NCwgMTIsIDEzLCAyMTQsIDkzLCAxMiwgMTMsIDIxNCwgOTIsIDEyLCAxMywgMjE0LCA5MSwgMTIsIDEzLCAyMTQsIAorICAgIDkwLCAxMiwgMTMsIDIxNCwgODksIDEyLCAxMywgMjE0LCA4OCwgMTIsIDEzLCAyMTQsIDg3LCAxMiwgMTMsIDIxNCwgODYsIAorICAgIDEyLCAxMywgMjE0LCA4NSwgMTIsIDEzLCAyMTQsIDg0LCAxMiwgMTMsIDIxNCwgODMsIDEyLCAxMywgMjE0LCA4MiwgMTIsIAorICAgIDEzLCAyMTQsIDgxLCAxMiwgMTMsIDIxNCwgODAsIDEyLCAxMywgMjE0LCA3OSwgMTIsIDEzLCAyMTQsIDc4LCAxMiwgMTMsIAorICAgIDIxNCwgNzcsIDEyLCAxMywgMjE0LCA3NiwgMTIsIDEzLCAyMTQsIDc1LCAxMiwgMTMsIDIxNCwgNzQsIDEyLCAxMywgMjE0LCAKKyAgICA3MywgMTIsIDEzLCAyMTQsIDcyLCAxMiwgMTMsIDIxNCwgNzEsIDEyLCAxMywgMjE0LCA3MCwgMTIsIDEzLCAyMTQsIDY5LCAKKyAgICAxMiwgMTMsIDIxNCwgNjgsIDEyLCAxMywgMjE0LCA2NywgMTIsIDEzLCAyMTQsIDY2LCAxMiwgMTMsIDIxNCwgNjUsIDEyLCAKKyAgICAxMywgMjE0LCA2NCwgMTIsIDEzLCAyMTQsIDYzLCAxMiwgMTMsIDIxNCwgNjIsIDEyLCAxMywgMjE0LCA2MSwgMTIsIDEzLCAKKyAgICAyMTQsIDYwLCAxMiwgMTMsIDIxNCwgNTksIDEyLCAxMywgMjE0LCA1OCwgMTIsIDEzLCAyMTQsIDU3LCAxMiwgMTMsIDIxNCwgCisgICAgNTYsIDEyLCAxMywgMjE0LCA1NSwgMTIsIDEzLCAyMTQsIDU0LCAxMiwgMTMsIDIxNCwgNTMsIDEyLCAxMywgMjE0LCA1MiwgCisgICAgMTIsIDEzLCAyMTQsIDUxLCAxMiwgMTMsIDIxNCwgNTAsIDEyLCAxMywgMjE0LCA0OSwgMTIsIDEzLCAyMTQsIDQ4LCAxMiwgCisgICAgMTMsIDIxNCwgNDcsIDEyLCAxMywgMjE0LCA0NiwgMTIsIDEzLCAyMTQsIDQ1LCAxMiwgMTMsIDIxNCwgNDQsIDEyLCAxMywgCisgICAgMjE0LCA0MywgMTIsIDEzLCAyMTQsIDQyLCAxMiwgMTMsIDIxNCwgNDEsIDEyLCAxMywgMjE0LCA0MCwgMTIsIDEzLCAyMTQsIAorICAgIDM5LCAxMiwgMTMsIDIxNCwgMzgsIDEyLCAxMywgMjE0LCAzNywgMTIsIDEzLCAyMTQsIDM2LCAxMiwgMTMsIDIxNCwgMzUsIAorICAgIDEyLCAxMywgMjE0LCAzNCwgMTIsIDEzLCAyMTQsIDMzLCAxMiwgMTMsIDIxNCwgMzIsIDEyLCAxMywgMjE0LCAzMSwgMTIsIAorICAgIDEzLCAyMTQsIDMwLCAxMiwgMTMsIDIxNCwgMjksIDEyLCAxMywgMjE0LCAyOCwgMTIsIDEzLCAyMTIsIDk3LCAxMiwgMTMsIAorICAgIDIxMiwgOTYsIDEyLCAxMywgMjEyLCA5NSwgMTIsIDEzLCAyMTIsIDk0LCAxMiwgMTMsIDIxMiwgOTMsIDEyLCAxMywgMjEyLCAKKyAgICA5MiwgMTIsIDEzLCAyMTIsIDkxLCAxMiwgMTMsIDIxMiwgOTAsIDEyLCAxMywgMjEyLCA4OSwgMTIsIDEzLCAyMTIsIDg4LCAKKyAgICAxMiwgMTMsIDIxMiwgODcsIDEyLCAxMywgMjEyLCA4NiwgMTIsIDEzLCAyMTIsIDg1LCAxMiwgMTMsIDIxMiwgODQsIDEyLCAKKyAgICAxMywgMjEyLCA4MywgMTIsIDEzLCAyMTIsIDgyLCAxMiwgMTMsIDIxMiwgODEsIDEyLCAxMywgMjEyLCA4MCwgMTIsIDEzLCAKKyAgICAyMTIsIDc5LCAxMiwgMTMsIDIxMiwgNzgsIDEyLCAxMywgMjEyLCA3NywgMTIsIDEzLCAyMTIsIDc2LCAxMiwgMTMsIDIxMiwgCisgICAgNzUsIDEyLCAxMywgMjEyLCA3NCwgMTIsIDEzLCAyMTIsIDczLCAxMiwgMTMsIDIxMiwgNzIsIDEyLCAxMywgMjEyLCA3MSwgCisgICAgMTIsIDEzLCAyMTIsIDcwLCAxMiwgMTMsIDIxMiwgNjksIDEyLCAxMywgMjEyLCA2OCwgMTIsIDEzLCAyMTIsIDY3LCAxMiwgCisgICAgMTMsIDIxMiwgNjYsIDEyLCAxMywgMjExLCAxNzcsIDEyLCAxMywgMjExLCAxNzYsIDEyLCAxMywgMjExLCAxNzUsIDEyLCAKKyAgICAxMywgMjExLCAxNzQsIDEyLCAxMywgMjExLCAxNzMsIDEyLCAxMywgMjExLCAxNzIsIDEyLCAxMywgMjExLCAxNzEsIDEyLCAKKyAgICAxMywgMjExLCAxNzAsIDEyLCAxMywgMjExLCAxNjksIDEyLCAxMywgMjExLCAxNjgsIDEyLCAxMywgMjExLCAxNjcsIDEyLCAKKyAgICAxMywgMjExLCAxNjYsIDEyLCAxMywgMjExLCAxMTUsIDEyLCAxMywgMjExLCAxMTQsIDEyLCAxMywgMjExLCAxMTMsIDEyLCAKKyAgICAxMywgMjExLCAxMTIsIDEyLCAxMywgMjExLCAxMTEsIDEyLCAxMywgMjExLCAxMTAsIDEyLCAxMywgMjExLCAxMDksIDEyLCAKKyAgICAxMywgMjExLCAxMDgsIDEyLCAxMywgMjExLCAxMDcsIDEyLCAxMywgMjEwLCAxNTgsIDEyLCAxMywgMjEwLCAxNTcsIDEyLCAKKyAgICAxMywgMjEwLCAxNTYsIDEyLCAxMywgMjEwLCAxNTUsIDEyLCAxMywgMjEwLCAxNTQsIDEyLCAxMywgMjEwLCAxNTMsIDEyLCAKKyAgICAxMywgMjEwLCAxNTIsIDEyLCAxMywgMjEwLCAxNTEsIDEyLCAxMywgMjEwLCAxNTAsIDEyLCAxMywgMjEwLCAxNDksIDEyLCAKKyAgICAxMywgMjEwLCAxNDgsIDEyLCAxMywgMjEwLCAxNDcsIDEyLCAxMywgMjEwLCAxNDYsIDEyLCAxMywgMjEwLCAxNDUsIDEyLCAKKyAgICAxMywgMjEwLCAxNDQsIDEyLCAxMywgMjEwLCAxNDMsIDEyLCAxMywgMjEwLCAxNDIsIDEyLCAxMywgMjEwLCAxNDEsIDEyLCAKKyAgICAxMywgMjEwLCAxNDAsIDEyLCAxMywgMjEwLCAxMzksIDEyLCAxMywgMjEwLCAxMzgsIDEyLCAxMywgMjEwLCAxMzcsIDEyLCAKKyAgICAxMywgMjEwLCAxMzYsIDEyLCAxMywgMjEwLCAxMzUsIDEyLCAxMywgMjEwLCAxMzQsIDEyLCAxMywgMjEwLCAxMzMsIDEyLCAKKyAgICAxMywgMjEwLCAxMzIsIDEyLCAxMywgMjEwLCAxMzEsIDEyLCAxMywgMjEwLCAxMzAsIDEyLCAxMywgMjEwLCAxMjksIDEyLCAKKyAgICAxMywgMjEwLCAxMjgsIDEyLCAxMywgMjEwLCAxMjcsIDEyLCAxMywgMjEwLCAxMjYsIDEyLCAxMywgMjEwLCAxMjUsIDEyLCAKKyAgICAxMywgMjEwLCAxMjQsIDEyLCAxMywgMjEwLCAxMjMsIDEyLCAxMywgMjEwLCAxMjIsIDEyLCAxMywgMjEwLCAxMjEsIDEyLCAKKyAgICAxMywgMjEwLCAxMjAsIDEyLCAxMywgMjEwLCAxMTksIDEyLCAxMywgMjEwLCAxMTgsIDEyLCAxMywgMjU1LCA4MSwgMTIsIAorICAgIDEzLCAyNTUsIDgwLCAxMiwgMTMsIDI1NSwgNzksIDEyLCAxMywgMjU1LCA3OCwgMTIsIDEzLCAyNTUsIDc3LCAxMiwgMTMsIAorICAgIDI1NSwgNzYsIDEyLCAxMywgMjU1LCA3NSwgMTIsIDEzLCAyNTUsIDc0LCAxMiwgMTMsIDI1NSwgNzMsIDEyLCAxMywgMjU1LCAKKyAgICA3MiwgMTIsIDEzLCAyNTUsIDcxLCAxMiwgMTMsIDI1NSwgNzAsIDEyLCAxMywgMjU1LCA2OSwgMTIsIDEzLCAyNTUsIDY4LCAKKyAgICAxMiwgMTMsIDI1NSwgNjcsIDEyLCAxMywgMjU1LCA2NiwgMTIsIDEzLCAyNTUsIDY1LCAxMiwgMTMsIDI1NSwgNjQsIDEyLCAKKyAgICAxMywgMjU1LCA2MywgMTIsIDEzLCAyNTUsIDYyLCAxMiwgMTMsIDI1NSwgNjEsIDEyLCAxMywgMjU1LCA2MCwgMTIsIDEzLCAKKyAgICAyNTUsIDU5LCAxMiwgMTMsIDI1NSwgNTgsIDEyLCAxMywgMjU1LCA1NywgMTIsIDEzLCAyNTUsIDU2LCAxMiwgMTMsIDI1NSwgCisgICAgNTUsIDEyLCAxMywgMjU1LCA1NCwgMTIsIDEzLCAyNTUsIDUzLCAxMiwgMTMsIDI1NSwgNTIsIDEyLCAxMywgMjU1LCA1MSwgCisgICAgMTIsIDEzLCAyNTUsIDUwLCAxMiwgMTMsIDI1NSwgNDksIDEyLCAxMywgMjU1LCA0OCwgMjAsIDEsIDE2NywgMjI5LCAxNywgCisgICAgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjQzLCA3NywgMjQ0LCA0NCwgMjAsIDEsIDE2NywgMjI0LCAyNTQsIDIzMSwgMjIsIAorICAgIDIyNSwgNjAsIDIwLCAxLCAxNjcsIDIyNCwgMjU0LCAyMzEsIDIyLCAyMjUsIDYxLCAyMCwgMSwgMTY3LCAyMjksIDIzMSwgCisgICAgMjMxLCAyMSwgMjAsIDEsIDE2NywgMjE5LCAyMjMsIDIwLCAxLCAxNjcsIDIxNiwgNjcsIDIzMSwgMjEsIDIwLCAxLCAxNjcsIAorICAgIDIyNywgMTIyLCAyMzEsIDIxLCAyMCwgMSwgMTY3LCAyMjAsIDIxLCAyMjYsIDk0LCAyMjgsIDE3NCwgMjAsIDEsIDE2NywgCisgICAgMjI0LCAyNTQsIDIyNiwgOTQsIDIyOCwgMTc1LCAyMjUsIDYwLCAyMCwgMSwgMTY3LCAyMjQsIDI1NCwgMjI2LCA5NCwgMjI4LCAKKyAgICAxNzUsIDIyNSwgNjEsIDIwLCAxLCAxNjcsIDIzMSwgMjIzLCAyMCwgMSwgMTY3LCAyMTUsIDEyMCwgMjMxLCAyMjQsIDIwLCAKKyAgICAxLCAxNjcsIDIyOSwgNzYsIDIwLCAxLCAxNjcsIDIzMSwgMjIwLCAyMCwgMSwgMTY3LCAyMzEsIDE4MSwgMjAsIDEsIDE2NywgCisgICAgMjMwLCA1MywgMjAsIDEsIDE2NywgMjIwLCAxMjYsIDIwLCAxLCAxNjcsIDIyNywgMjQ2LCAyMCwgMSwgMTY3LCAyMzQsIAorICAgIDE1NSwgMjAsIDEsIDE2NywgMjI4LCAxNDMsIDIwLCAxLCAxNjcsIDIxOCwgNSwgMjAsIDEsIDE2NywgMjI5LCAxNiwgMjAsIAorICAgIDEsIDE2NywgMjMzLCA5MywgMjAsIDEsIDE2NywgMjMzLCAxOCwgMjMzLCAxOTUsIDIwLCAxLCAxNjcsIDIyNywgMjUzLCAKKyAgICAyMzEsIDI5LCAyMCwgMSwgMTY3LCAyMzEsIDIyNywgMjAsIDEsIDE2NywgMjI1LCAyNTAsIDIwLCAxLCAxNjcsIDI0MiwgCisgICAgMjM4LCAyMCwgMSwgMTY3LCAyMjYsIDU0LCAyMCwgMSwgMTY3LCAyMzAsIDE1NiwgMjI5LCA1MCwgMjAsIDEsIDE2NywgMjI3LCAKKyAgICAxMDMsIDIzMSwgMzIsIDIwLCAxLCAxNjcsIDEwNCwgMjEwLCAxODgsIDIyOSwgMjI1LCAyMCwgMSwgMTY3LCAyNDIsIDIzOSwgCisgICAgMjAsIDEsIDE2NywgMjI3LCAyNTMsIDIyNywgMjU0LCAyMCwgMSwgMTY3LCAyMTksIDEzMCwgMjAsIDEsIDE2NywgMjMxLCAKKyAgICAxNCwgMjAsIDEsIDE2NywgMjMxLCAzNSwgMjAsIDEsIDE2NywgMjMwLCAxMzUsIDIwLCAxLCAxNjcsIDIzNCwgMjU1LCAyMCwgCisgICAgMSwgMTY3LCAyMjYsIDk0LCAyMzMsIDUzLCAyMCwgMSwgMTY3LCAyMjksIDE1NCwgMjMzLCA1MywgMjAsIDEsIDE2NywgMjI1LCAKKyAgICAxNjEsIDIwLCAxLCAxNjcsIDIzMSwgMjIxLCAyMCwgMSwgMTY3LCAyMjgsIDIxMiwgMjAsIDEsIDE2NywgMjI0LCAxMzcsIAorICAgIDIwLCAxLCAxNjcsIDIxNSwgMTE3LCAyMCwgMSwgMTY3LCAyMzIsIDk5LCAyMCwgMSwgMTY3LCAyMTksIDQzLCAyMCwgMSwgCisgICAgMTY3LCAyMTYsIDIxNywgMjAsIDEsIDE2NywgMjMxLCAyMTgsIDIwLCAxLCAxNjcsIDIzNCwgMTYyLCAyMCwgMSwgMTY3LCAKKyAgICAyMjksIDE1MCwgMjAsIDEsIDE2NywgMjMzLCAyMDcsIDIwLCAxLCAxNjcsIDIzMCwgMTM2LCAyMCwgMSwgMTY3LCAyMTksIAorICAgIDIyMCwgMjAsIDEsIDE2NywgMjMyLCAxNDQsIDIwLCAxLCAxNjcsIDI0NCwgMTAxLCAyMCwgMSwgMTY3LCAyMjIsIDIwMSwgCisgICAgMjAsIDEsIDE2NywgMjMzLCAyNDcsIDIwLCAxLCAxNjcsIDIxOSwgMzksIDIwLCAxLCAxNjcsIDIzMSwgMTc4LCAyMjUsIAorICAgIDEwMiwgMjAsIDEsIDE2NywgMjIwLCAxNCwgMjAsIDEsIDE2NywgMjI3LCAyNTIsIDIwLCAxLCAxNjcsIDIxOSwgMjU1LCAKKyAgICAyMjgsIDcsIDIxMCwgMTk2LCAyMCwgMSwgMTY3LCAyMjcsIDE0MiwgMjMwLCAxNTMsIDIwLCAxLCAxNjcsIDIyNiwgODksIAorICAgIDIwLCAxLCAxNjcsIDIyOCwgMTQ0LCAyMCwgMSwgMTY3LCAyMTQsIDE3MCwgMjAsIDEsIDE2NywgMjI5LCA1MywgMjAsIDEsIAorICAgIDE2NywgMjMxLCAyMTcsIDIwLCAxLCAxNjcsIDIyOCwgMTg2LCAyMCwgMSwgMTY3LCAyMzEsIDEyNCwgMjAsIDEsIDE2NywgCisgICAgMjI3LCAxNTUsIDIwLCAxLCAxNjcsIDIxNiwgMjIxLCAyMCwgMSwgMTY3LCAyMTksIDM2LCAyMCwgMSwgMTY3LCAyMjYsIDkwLCAKKyAgICAyMCwgMSwgMTY3LCAyMjgsIDExLCAyMCwgMSwgMTY3LCAyMzEsIDIyNSwgMjAsIDEsIDE2NywgMjI3LCAxNTIsIDIwLCAxLCAKKyAgICAxNjcsIDIzNCwgMjIyLCAyMCwgMSwgMTY3LCAyMjgsIDE0LCAyMCwgMSwgMTY3LCAyMTMsIDI1MCwgMjAsIDEsIDE2NywgCisgICAgMjMyLCAxMDMsIDIwLCAxLCAxNjcsIDIyOSwgMTAzLCAyMCwgMSwgMTY3LCAyMjksIDIwMSwgMjAsIDEsIDE2NywgMjMxLCAKKyAgICAxMjMsIDIwLCAxLCAyMjUsIDE0MSwgMjI4LCA5LCAyMCwgMSwgMjI1LCAxNDEsIDIxNSwgMTIwLCAyMzEsIDIyMiwgMjAsIDEsIAorICAgIDIyNSwgMTQxLCAyMTksIDE4NywgMjAsIDEsIDIyNSwgMTQxLCAyMjAsIDEzMCwgMjE1LCAxMTksIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjMyLCAxNDYsIDIyNywgMjQ5LCAyMCwgMSwgMjI1LCAxNDEsIDIzMSwgMTMwLCAyMzEsIDIyNiwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMzQsIDkzLCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgMTUsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMjUsIDIwLCAxLCAyMjUsIAorICAgIDE0MSwgMjM0LCAyNDMsIDIwLCAxLCAyMjUsIDE0MSwgMjI1LCAyMTEsIDIwLCAxLCAyMjUsIDE0MSwgMjExLCA4OSwgMjMzLCAKKyAgICA1MywgMjAsIDEsIDIyNSwgMTQxLCAyMzMsIDEwOSwgMjI4LCA3LCAyMjcsIDE2NCwgMjAsIDEsIDIyNSwgMTQxLCAyMjcsIAorICAgIDI0NywgMjIwLCA0MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDEyMSwgMjI4LCAxODksIDIwLCAxLCAyMjUsIDE0MSwgMjQyLCAKKyAgICAyMzYsIDIwLCAxLCAyMjUsIDE0MSwgMjI1LCA1MiwgMjAsIDEsIDIyNSwgMTQxLCAyMTUsIDEyMCwgMjI4LCA1LCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIyMCwgNDUsIDIyOCwgMTg0LCAyMCwgMSwgMjI1LCAxNDEsIDIyMCwgNDEsIDIwLCAxLCAyMjUsIDE0MSwgCisgICAgMjMxLCAyMiwgMjE2LCAyMjAsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMTIsIDIzMSwgMTI2LCAyMCwgMSwgMjI1LCAxNDEsIAorICAgIDIyNywgMTUzLCAyMjcsIDI0OSwgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDE1MSwgMjAsIDEsIDIyNSwgMTQxLCAyNDIsIDIzNywgCisgICAgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDE0NywgMjAsIDEsIDIyNSwgMTQxLCAyMzMsIDEzNSwgMjAsIDEsIDIyNSwgMTQxLCAKKyAgICAyMjUsIDI1MywgMjAsIDEsIDIyNSwgMTQxLCAyMTMsIDE4MiwgMjAsIDEsIDIyNSwgMTQxLCAyMjksIDE4LCAyMzAsIDUxLCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNTIsIDIzMSwgMTA4LCAyMCwgMSwgMjI1LCAxNDEsIDIxMSwgMTkzLCAyMCwgMSwgCisgICAgMjI1LCAxNDEsIDIyMiwgMTMsIDIwLCAxLCAyMjUsIDE0MSwgMjE3LCA5OCwgMjAsIDEsIDIyNSwgMTQxLCAyMzEsIDM0LCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgMzcsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCAzOCwgMjMzLCA5MCwgMjAsIDEsIDIyNSwgCisgICAgMTQxLCAyMzEsIDI0LCAyMCwgMSwgMjI1LCAxNDEsIDIxOCwgNTMsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAxMTYsIDIwLCAxLCAKKyAgICAyMjUsIDE0MSwgMjMwLCAxMzgsIDIwLCAxLCAyMjUsIDE0MSwgMjI3LCAxNjcsIDIwLCAxLCAyMjUsIDE0MSwgMjI0LCAxNDEsIAorICAgIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAzMywgMjI5LCA1NCwgMjAsIDEsIDIyNSwgMTQxLCAyNDQsIDEzNCwgMjAsIDEsIDIyNSwgCisgICAgMTQxLCAyMzEsIDEwMywgMjAsIDEsIDIyNSwgMTQxLCAyNDQsIDE1NSwgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDE1OSwgMjAsIAorICAgIDEsIDIyNSwgMTQxLCAyMzEsIDI0NCwgMjI4LCAxNzgsIDIwLCAxLCAyMjUsIDE0MSwgMjMxLCAyNDQsIDIyOCwgMTU0LCAyMCwgCisgICAgMSwgMjI1LCAxNDEsIDIzMywgMTcsIDIwLCAxLCAyMjUsIDE0MSwgMjI5LCA2MCwgMjAsIDEsIDIyNSwgMTQxLCAyMjgsIDE2LCAKKyAgICAyMCwgMSwgMjI1LCAxNDEsIDE4NiwgMjAsIDEsIDIyNSwgMTQxLCAyMzQsIDgwLCAyMCwgMSwgMjI1LCAxNDEsIDIyOSwgNiwgCisgICAgMjAsIDEsIDEzNywgMjI5LCAxNywgMjMxLCAyMjQsIDIwLCAxLCAxMzcsIDIyNywgMTIxLCAyMCwgMSwgMTM3LCAyMTAsIAorICAgIDE5NiwgMjAsIDEsIDEzNywgMjEyLCA1MywgMjAsIDEsIDEzNywgMjI5LCA1MywgMjAsIDEsIDEzNywgMjI5LCAxNDIsIDIwLCAKKyAgICAxLCAxMzcsIDIyOSwgMjQsIDIwLCAxLCAxMzcsIDI0MiwgMjQ2LCAyMCwgMSwgMTM3LCAyMzEsIDEyMCwgMjAsIDEsIDEzNywgCisgICAgMjQzLCA4NCwgMjAsIDEsIDEzNywgMjI3LCAxNDQsIDIzMCwgMTc1LCAyMzEsIDM2LCAyMCwgMSwgMTM3LCAyMjcsIDI0NSwgCisgICAgMjMxLCAxMTEsIDIwLCAxLCAxMzcsIDIzMSwgMTE3LCAyMCwgMSwgMTM3LCAyMjUsIDU4LCAyMCwgMSwgMTM3LCAyMjksIAorICAgIDEyNywgMjAsIDEsIDEzNywgMjMxLCAxMjgsIDI1MSwgMzcsIDIwLCAxLCAxMzcsIDIzNCwgMTQ5LCAyMCwgMSwgMTM3LCAKKyAgICAyNDIsIDI0NywgMjAsIDEsIDEzNywgMjM0LCAxNTYsIDIwLCAxLCAxMzcsIDIxMCwgMjEzLCAyMzAsIDgxLCAyMCwgMSwgCisgICAgMTM3LCAyMjcsIDExNSwgMjAsIDEsIDEzNywgMjMxLCAxMDUsIDIwLCAxLCAxMzcsIDIyOCwgMTUsIDIwLCAxLCAxMzcsIAorICAgIDIzMSwgMTExLCAyMCwgMSwgMTM3LCAyMTEsIDE2LCAyMCwgMSwgMTM3LCAyMzMsIDI1NSwgMjAsIDEsIDEzNywgMjM1LCAxNiwgCisgICAgMjAsIDEsIDEzNywgMjIwLCAxMjUsIDIwLCAxLCAxMzcsIDIyOSwgMTM2LCAyMCwgMSwgMTM3LCAyMTcsIDk2LCAyMCwgMSwgCisgICAgMTM3LCAyMjgsIDE1OCwgMjAsIDEsIDEzNywgMjE2LCA2NywgMjEwLCAxOTgsIDIwLCAxLCAxMzcsIDIxOCwgODAsIDIwLCAxLCAKKyAgICAxMzcsIDIyOSwgNDQsIDIyNywgMTY0LCAyMCwgMSwgMTM3LCAyMTMsIDE4MSwgMjAsIDEsIDEzNywgMjI5LCAyMDQsIDIwLCAKKyAgICAxLCAxMzcsIDIzMSwgMjQ0LCAyMzQsIDE1OCwgMjAsIDEsIDEzNywgMjI3LCAyNTQsIDIwLCAxLCAxMzcsIDIyOSwgMzksIAorICAgIDIwLCAxLCAxMzcsIDIzMywgOTQsIDIwLCAxLCAxMzcsIDIzMSwgMTEzLCAyMCwgMSwgMTM3LCAyMzEsIDEzLCAyMCwgMSwgCisgICAgMTM3LCAyMjcsIDI0OCwgMjAsIDEsIDEzNywgMjE2LCAyMTYsIDIwLCAxLCAxMzcsIDIyOSwgNDEsIDIwLCAxLCAxMzcsIAorICAgIDI0MywgMjQwLCAyMCwgMSwgMTM3LCAyMjksIDE0MSwgMjAsIDEsIDEzNywgMjI4LCAxNywgMjAsIDEsIDEzNywgMjI4LCAxMywgCisgICAgMjAsIDEsIDEzNywgMjUxLCAxMTUsIDIwLCAxLCAxMzcsIDIxMywgMTgzLCAyMCwgMSwgMTM3LCAyMzEsIDExOCwgMjAsIDEsIAorICAgIDEzNywgMjIyLCAxNDIsIDIwLCAxLCAxMzcsIDIyOCwgMTg4LCAyMCwgMSwgMTM3LCAyMzMsIDEwOCwgMjAsIDEsIDEzNywgCisgICAgMjE2LCA2NSwgMjAsIDEsIDEzNywgMjI3LCAyNTUsIDIyOSwgNiwgMjAsIDEsIDEzNywgMjI4LCAxODAsIDIwLCAxLCAxMzcsIAorICAgIDIzNCwgMTYyLCAyMCwgMSwgMTM3LCAyMjksIDQ1LCAyMCwgMSwgMTM3LCAyMzEsIDIxNywgMjAsIDEsIDEzNywgMjMxLCAKKyAgICAxMDYsIDIwLCAxLCAxMzcsIDIzMiwgMTAzLCAyMCwgMSwgMTM3LCAyMzMsIDE5NSwgMjAsIDEsIDEzNywgMjI4LCAxODYsIAorICAgIDIwLCAxLCAxMzcsIDIyOSwgNiwgMjAsIDEsIDEzNywgMjExLCAxODQsIDIwLCAxLCAxMzcsIDIyOSwgNDIsIDIwLCAxLCAKKyAgICAxMzcsIDIyOCwgMiwgMjAsIDEsIDEzNywgMjI3LCAyNTAsIDIwLCAxLCAxMzcsIDIzMywgMjA5LCAyMjgsIDE0NCwgMjAsIDEsIAorICAgIDEzNywgMjI4LCAwLCAyMCwgMSwgMTM3LCAyMjksIDE0OSwgMjAsIDEsIDEzNywgMjMxLCAyNDQsIDIyOCwgNSwgMjAsIDEsIAorICAgIDEzNywgMjExLCAxMDMsIDIwLCAxLCAxMzcsIDIyOSwgMTQ4LCAyMCwgMSwgMTM3LCAyMTksIDIyMiwgMjAsIDEsIDEzNywgCisgICAgMjIwLCAxMjgsIDIwLCAxLCAxMzcsIDIzMSwgMTE0LCAyMCwgMSwgMTM3LCAyMzEsIDIyNCwgMjAsIDEsIDEzNywgMjMxLCAKKyAgICAxMjQsIDIwLCAxLCAxMzcsIDIzNCwgMTUwLCAyMCwgMSwgMTM3LCAyMzEsIDExNSwgMjAsIDEsIDEzNywgMjM0LCAxNTQsIAorICAgIDIwLCAxLCAxMzcsIDIzMSwgMTI4LCAyMjUsIDEwNiwgMjAsIDEsIDEzNywgMjEwLCAxNzksIDIwLCAxLCAxMzcsIDIyOCwgCisgICAgMTc2LCAyMCwgMSwgMTM3LCAyMzAsIDIyNSwgMjAsIDEsIDEzNywgMjMwLCAxMDUsIDIwLCAxLCAxMzcsIDIyMCwgMTcsIDIwLCAKKyAgICAxLCAxMzcsIDIzNCwgMTcyLCAyMzMsIDc2LCAyMCwgMSwgMTM3LCAyMzQsIDE3MiwgMjQ0LCAxNjgsIDIwLCAxLCAxMzcsIAorICAgIDIyOSwgNzQsIDIwLCAxLCAxMzcsIDIyOSwgMjAxLCAyMCwgMSwgMTM3LCAyMzIsIDIwNiwgMjAsIDEsIDEzNywgMjI1LCA2OCwgCisgICAgMjAsIDEsIDEzNywgMjI1LCAyMDIsIDIwLCAxLCAxMzcsIDIxNiwgMjMxLCAyMCwgMSwgMTA3LCAyMzEsIDEwNCwgMjAsIDEsIAorICAgIDEwNywgMjEyLCA1MSwgMjAsIDEsIDEwNywgMjI4LCAxNzQsIDIwLCAxLCAxMDcsIDIzMSwgMjEsIDIwLCAxLCAxMDcsIDIyOCwgCisgICAgMTcyLCAyMCwgMSwgMTA3LCAyMzIsIDI0MSwgMjAsIDEsIDEwNywgMjI4LCAxNzcsIDIwLCAxLCAxMDcsIDIyOCwgMTIsIDIwLCAKKyAgICAxLCAxMDcsIDIyOSwgNTksIDIwLCAxLCAxMDcsIDIyNywgMTY0LCAyMCwgMSwgMTA3LCAyMTEsIDE5NCwgMjAsIDEsIDEwNywgCisgICAgMjI5LCAxNCwgMjAsIDEsIDEwNywgMjIwLCA2MywgMjAsIDEsIDEwNywgMjI5LCAyNSwgMjAsIDEsIDEwNywgMjM0LCAxNTcsIAorICAgIDIwLCAxLCAxMDcsIDIxNiwgMjE4LCAyMCwgMSwgMTA3LCAyMjAsIDQzLCAyMCwgMSwgMTA3LCAyMjgsIDE4NSwgMjAsIDEsIAorICAgIDEwNywgMjE4LCA1MywgMjAsIDEsIDEwNywgMjM0LCAxNjIsIDIwLCAxLCAxMDcsIDIxMSwgOTEsIDIwLCAxLCAxMDcsIDIzMywgCisgICAgMjEwLCAyMCwgMSwgMTA3LCAyMjEsIDIzNiwgMjAsIDEsIDEwNywgMjMxLCAyNiwgMjAsIDEsIDEwNywgMjI5LCAxNDAsIDIwLCAKKyAgICAxLCAxMDcsIDIzMSwgMTkzLCAyMCwgMSwgMTA3LCAyMzEsIDMyLCAyMCwgMSwgMTA3LCAyMjAsIDEyNywgMjAsIDEsIDEwNywgCisgICAgMjExLCAzOSwgMjAsIDEsIDEwNywgMjI4LCAxNzksIDIwLCAxLCAxMDcsIDIzNCwgMTUzLCAyMzEsIDEwNywgMjAsIDEsIAorICAgIDEwNywgMjI5LCAyMSwgMjAsIDEsIDEwNywgMjE1LCAxMTksIDIwLCAxLCAxMDcsIDI0MiwgMjU1LCAyMCwgMSwgMTA3LCAKKyAgICAyMjksIDExLCAyMCwgMSwgMTA3LCAyNDQsIDEzNSwgMjAsIDEsIDEwNywgMjI5LCAxNDQsIDIwLCAxLCAxMDcsIDIzMSwgNSwgCisgICAgMjAsIDEsIDEwNywgMjMzLCAxMSwgMjAsIDEsIDEwNywgMjI5LCAxMjYsIDIwLCAxLCAxMDcsIDIzMCwgMTUyLCAyMCwgMSwgCisgICAgMTA3LCAyMzEsIDksIDIwLCAxLCAxMDcsIDIyNCwgMTIxLCAyMCwgMSwgMTA3LCAyMzEsIDcsIDIwLCAxLCAxMDcsIDIzMSwgCisgICAgMjMsIDIwLCAxLCAxMDcsIDIzMiwgODksIDIwLCAxLCAxMDcsIDIyOCwgNCwgMjAsIDEsIDEwNywgMjMxLCAxMjcsIDIwLCAxLCAKKyAgICAxMDcsIDIzMywgMTg2LCAyMCwgMSwgMTA3LCAyMjcsIDE1NSwgMjAsIDEsIDEwNywgMjE2LCAyMjEsIDIwLCAxLCAxMDcsIAorICAgIDIxOSwgMzYsIDIwLCAxLCAxMDcsIDIxMCwgMTc5LCAyMCwgMSwgMTA3LCAyMzQsIDE1NCwgMjAsIDEsIDEwNywgMjIzLCAKKyAgICAxNzMsIDIwLCAxLCAxMDcsIDIxNywgMTEsIDIwLCAxLCAxMDcsIDIyOSwgMjIsIDIwLCAxLCAxMDcsIDIzMSwgMjgsIDIwLCAKKyAgICAxLCAxMDcsIDIyOCwgMywgMjAsIDEsIDEwNywgMjM0LCAxNTIsIDIwLCAxLCAxMDcsIDIyNSwgNjIsIDIwLCAxLCAxMDcsIAorICAgIDIyNSwgMTU1LCAyMCwgMSwgMTA3LCAyMjcsIDEzMSwgMjAsIDEsIDEwNywgMjMzLCAxNywgMjAsIDEsIDEwNywgMjI5LCA2MCwgCisgICAgMjAsIDEsIDEwNywgMjMxLCAyNSwgMjAsIDEsIDEwNywgMjI5LCAzNCwgMjAsIDEsIDEwNywgMjEwLCAxOTMsIDIwLCAxLCAKKyAgICAxMDcsIDIyNiwgMjUsIDIwLCAxLCAxMDcsIDIxMCwgMTkyLCAyMCwgMSwgMTA3LCAyMjksIDE0OSwgMjAsIDEsIDEwNywgCisgICAgMjI3LCAyNDksIDIwLCAxLCAxMDcsIDIxOCwgODIsIDIwLCAxLCAxMDcsIDIzMywgMjE0LCAyMCwgMSwgMTA3LCAyMjksIDQ5LCAKKyAgICAyMCwgMSwgMTA3LCAyMjksIDE5LCAyMCwgMSwgMTA3LCAyMTUsIDEwMywgMjAsIDEsIDEwNywgMjMxLCAzNiwgMjAsIDEsIAorICAgIDEwNywgMjMzLCAyMDQsIDIwLCAxLCAxMDcsIDIyOCwgMSwgMjAsIDEsIDEwNywgMjE2LCAyMTksIDIwLCAxLCAxMDcsIDIzMSwgCisgICAgMjE5LCAyMCwgMSwgMTA3LCAyMjksIDU4LCAyMCwgMSwgMTA3LCAyMzMsIDEwLCAyMCwgMSwgMTA3LCAyMjksIDQwLCAyMCwgCisgICAgMSwgMTA3LCAyMjgsIDYsIDIwLCAxLCAxMDcsIDIyOCwgMTU4LCAyMCwgMSwgMTA3LCAyNDIsIDI0MCwgMjAsIDEsIDEwNywgCisgICAgMjMzLCAyMjMsIDIwLCAxLCAxMDcsIDIyMywgODcsIDIyNiwgMjEzLCAyMCwgMSwgMTA3LCAyMTcsIDg3LCAyMCwgMSwgMTA3LCAKKyAgICAyMTYsIDExLCAyMCwgMSwgMTA3LCAyMjcsIDE1MiwgMjAsIDEsIDEwNywgMjIyLCAyNDIsIDIwLCAxLCAxMDcsIDIzMywgNTUsIAorICAgIDIwLCAxLCAxMDcsIDIzMSwgODQsIDIwLCAxLCAxMDcsIDE5NCwgMjAsIDEsIDEwNywgMjE4LCA1LCAyMCwgMSwgMTA3LCAKKyAgICAyMzAsIDEwNywgMjAsIDEsIDEwNywgMjIwLCAyOSwgMjAsIDEsIDEwNywgMjIwLCAzOSwgMjAsIDEsIDEwNywgMjMzLCAxNjEsIAorICAgIDIwLCAxLCAxMDcsIDIyNywgMjQyLCAyMCwgMSwgMTA3LCAyMTksIDIyNywgMjAsIDEsIDEwNywgMjI3LCAyNTEsIDIwLCAxLCAKKyAgICAxMDcsIDIyNSwgMjE0LCAyMCwgMSwgMTA3LCAyMjgsIDIzOCwgMjAsIDEsIDEwNywgMjE5LCAyNTQsIDIwLCAxLCAxMDcsIAorICAgIDIyNCwgMTM2LCAyMCwgMSwgMTA3LCAyMzAsIDUxLCAyMCwgMSwgMTA3LCAyMzIsIDEyNSwgMjAsIDEsIDEwNywgMjIzLCA4NywgCisgICAgMjMwLCAxMDEsIDIwLCAxLCAxMDcsIDIxNiwgMTE4LCAyMCwgMSwgMTA3LCAyMjcsIDI0MywgMjAsIDEsIDEwNywgMjMxLCAKKyAgICAxMjgsIDE5OSwgMjAsIDEsIDEwNywgMjIxLCAyMzQsIDIwLCAxLCAxMDcsIDI0NCwgMjAzLCAyMCwgMSwgODIsIDIyOSwgCisgICAgMTQ4LCAyMCwgMSwgODIsIDIxNiwgMTcsIDIwLCAxLCA4MiwgMjMxLCAxMTcsIDIwLCAxLCA4MiwgMjMzLCA5NCwgMjAsIDEsIAorICAgIDgyLCAyMTMsIDEyOCwgMjAsIDEsIDgyLCAyMzIsIDEzMSwgMjAsIDEsIDgyLCAyMjYsIDkzLCAyMCwgMSwgODIsIDIxOSwgCisgICAgNDcsIDIwLCAxLCA4MiwgMjIzLCAxNDgsIDIwLCAxLCA4MiwgMjI4LCA4LCAyMCwgMSwgODIsIDIyOSwgMTE5LCAyMCwgMSwgCisgICAgODIsIDIyNCwgMTUwLCAyMCwgMSwgODIsIDIxNywgNjMsIDIwLCAxLCA4MiwgMjI5LCAyNywgMjAsIDEsIDgyLCAyMzMsIAorICAgIDI1MSwgMjAsIDEsIDgyLCAyMTEsIDE4NywgMjAsIDEsIDgyLCAyMjEsIDE3MiwgMjAsIDEsIDgyLCAyMjksIDUwLCAyMCwgMSwgCisgICAgODIsIDIyNiwgOTAsIDIwLCAxLCA4MiwgMjE2LCAxOCwgMjAsIDEsIDgyLCAyMzMsIDIwOCwgMjAsIDEsIDgyLCAyMzIsIAorICAgIDE0NSwgMjAsIDEsIDgyLCAyMjgsIDExLCAyMCwgMSwgODIsIDIyOSwgMywgMjAsIDEsIDgyLCAyMzEsIDIyNSwgMjAsIDEsIAorICAgIDgyLCAyMjksIDIwLCAyMCwgMSwgODIsIDIyOSwgMiwgMjAsIDEsIDgyLCAyMjgsIDEwLCAyMCwgMSwgODIsIDIyMiwgMjQwLCAKKyAgICAyMCwgMSwgODIsIDIyOCwgMTc2LCAyMCwgMSwgODIsIDIyNSwgMjEzLCAyMCwgMSwgODIsIDIyMiwgMzMsIDIwLCAxLCA4MiwgCisgICAgMjI5LCAzNSwgMjAsIDEsIDgyLCAyMzEsIDE1LCAyMCwgMSwgODIsIDI0MiwgMjM0LCAyMCwgMSwgODIsIDIyOSwgMjMsIDIwLCAKKyAgICAxLCA4MiwgMjI4LCAxODcsIDIwLCAxLCA4MiwgMjMxLCAxNzcsIDIwLCAxLCA4MiwgMjMyLCAxMjcsIDIwLCAxLCA4MiwgCisgICAgMjI5LCA1NSwgMjAsIDEsIDgyLCAyMjksIDEzMiwgMjAsIDEsIDgyLCAyMTcsIDg2LCAyMjcsIDI0OSwgMjAsIDEsIDgyLCAKKyAgICAyMjAsIDEyOSwgMjAsIDEsIDgyLCAyMjQsIDE0NiwgMjAsIDEsIDgyLCAyMjksIDE1MiwgMjE5LCA1MywgMjAsIDEsIDgyLCAKKyAgICAyMjksIDQzLCAyMjcsIDE2NCwgMjAsIDEsIDgyLCAyMTEsIDQsIDIwLCAxLCA4MiwgMjQyLCAyMzUsIDIwLCAxLCA4MiwgCisgICAgMjE1LCAxMTgsIDIwLCAxLCA4MiwgMjExLCAxOSwgMjAsIDEsIDgyLCAyMjUsIDE5LCAyMCwgMSwgODIsIDIxNSwgMTA4LCAKKyAgICAyMCwgMSwgODIsIDIzNCwgMTYwLCAyMCwgMSwgODIsIDIxOCwgODEsIDIwLCAxLCA4MiwgMjE2LCAyMjAsIDIwLCAxLCA4MiwgCisgICAgMjEzLCAxODQsIDIwLCAxLCA4MiwgMjEyLCA2LCAyMCwgMSwgODIsIDIzMywgMTM4LCAyMCwgMSwgODIsIDIyNCwgMTUzLCAKKyAgICAyMCwgMSwgODIsIDIxNywgOTcsIDIwLCAxLCA4MiwgMjQyLCAyNTQsIDIwLCAxLCA4MiwgMjI5LCA2NCwgMjAsIDEsIDgyLCAKKyAgICAyMjAsIDQyLCAyMCwgMSwgODIsIDIzMSwgMTAsIDIwLCAxLCA4MiwgMjMxLCAxMjEsIDIwLCAxLCA4MiwgMjI3LCAxMTksIAorICAgIDIwLCAxLCA4MiwgMjI4LCAxNDEsIDIwLCAxLCA4MiwgMjQzLCA4MCwgMjAsIDEsIDgyLCAyMTUsIDEwOSwgMjAsIDEsIDgyLCAKKyAgICAyMzMsIDIxNywgMjAsIDEsIDgyLCAyMTEsIDY3LCAyMCwgMSwgODIsIDIyNywgMTUzLCAyNTAsIDI0LCAyMCwgMSwgODIsIAorICAgIDIxMCwgMjUwLCAyMCwgMSwgODIsIDIzMSwgMjcsIDIwLCAxLCA4MiwgMjI5LCAxMzcsIDIwLCAxLCA4MiwgMjI1LCAxMDMsIAorICAgIDIwLCAxLCA4MiwgMjEwLCAxOTcsIDIwLCAxLCA4MiwgMjMzLCAxMiwgMjAsIDEsIDgyLCAyNDMsIDI0MCwgMjAsIDEsIDgyLCAKKyAgICAyNDMsIDc5LCAyMCwgMSwgODIsIDIyOSwgMTMsIDIwLCAxLCA4MiwgMjM0LCAxNjIsIDIwLCAxLCA4MiwgMjMxLCAyMjgsIAorICAgIDIwLCAxLCA4MiwgMjI5LCAyNiwgMjAsIDEsIDgyLCAyNDIsIDI0MSwgMjAsIDEsIDgyLCAyNDQsIDIwNCwgMjAsIDEsIDgyLCAKKyAgICAyMjcsIDI0NCwgMjAsIDEsIDgyLCAyMjUsIDE1NiwgMjAsIDEsIDgyLCAyMTEsIDE3LCAyMCwgMSwgODIsIDIyOSwgNTEsIAorICAgIDIwLCAxLCA4MiwgMjI3LCAxNTMsIDI1MiwgMzEsIDIwLCAxLCA4MiwgMjI3LCA5OSwgMjAsIDEsIDgyLCAyMjQsIDI1MCwgCisgICAgMjAsIDEsIDgyLCAyMzAsIDIyNSwgMjAsIDEsIDgyLCAyNDMsIDIzOCwgMjAsIDEsIDgyLCAyMjksIDIyNSwgMjAsIDEsIDgyLCAKKyAgICAyMzAsIDEwNSwgMjAsIDEsIDgyLCAyNDIsIDI0MCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgNzQsIDIwLCAxLCA4MiwgMjMwLCAKKyAgICA1MiwgMjAsIDEsIDgyLCAyMjQsIDE0OSwgMjAsIDEsIDgyLCAyMjksIDE1LCAyMCwgMSwgODIsIDIzMywgMTk1LCAyMCwgMSwgCisgICAgODIsIDIyNSwgMTAwLCAyMCwgMSwgODIsIDIyNywgMjUyLCAyMCwgMSwgODIsIDIxMSwgMTgsIDIwLCAxLCA4MiwgMjI5LCAKKyAgICAzNiwgMjAsIDEsIDgyLCAyMjYsIDk0LCAyMjUsIDE5MCwgMjAsIDEsIDgyLCAyNDMsIDI0MiwgMjUxLCAyMywgMjAsIDEsIAorICAgIDgyLCAyNDQsIDQ1LCAyMCwgMSwgODIsIDIyOCwgMTgxLCAyMCwgMSwgODIsIDYxLCAyMCwgMSwgODIsIDIxNiwgMTEsIDIwLCAKKyAgICAxLCA4MiwgNzgsIDIwLCAxLCA4MiwgNzQsIDIwLCAxLCA4MiwgMjMzLCA5MiwgMjAsIDEsIDgyLCAyMjYsIDk0LCAyMjUsIAorICAgIDI2LCAyMCwgMSwgODIsIDIxNywgMTAyLCAyMCwgMSwgODIsIDIxNywgNTIsIDIwLCAxLCA4MiwgMjI5LCAxNTIsIDIzMCwgCisgICAgMzksIDI0MCwgMjQxLCAyMCwgMSwgODIsIDIyMCwgMTcsIDIwLCAxLCA4MiwgMjExLCAxNCwgMjAsIDEsIDgyLCAyMjgsIAorICAgIDI1MiwgMjAsIDEsIDgyLCAyMTAsIDIwMiwgMjAsIDEsIDgyLCAyMTAsIDIyNywgMjE3LCAyNDEsIDIwLCAxLCA4MiwgMjEwLCAKKyAgICAyMjcsIDI0OSwgMTU1LCAyMCwgMSwgODIsIDIxMCwgMTg3LCAyMCwgMSwgODIsIDIxMCwgMTk1LCAyMCwgMSwgODIsIDIzNCwgCisgICAgMTQ4LCAyMCwgMSwgODIsIDIyNSwgMTU0LCAyMCwgMSwgODIsIDIyOCwgMTgyLCAyNDUsIDExMCwgMjAsIDEsIDgyLCAyMjQsIAorICAgIDE0NywgMjAsIDEsIDgyLCAyMTEsIDE5MiwgMjAsIDEsIDgyLCAyNDQsIDE1NSwgMjAsIDEsIDgyLCAyMTMsIDI1MCwgMjAsIAorICAgIDEsIDgyLCAyMzIsIDEwMywgMjAsIDEsIDgyLCAyMzAsIDIzNSwgMjAsIDEsIDgyLCAyMjMsIDU0LCAyMCwgMSwgODIsIDIyMywgCisgICAgMTc0LCAyMCwgMSwgODIsIDIyOCwgMjUxLCAyMCwgMSwgODIsIDIyOSwgODIsIDIwLCAxLCA4MiwgMjIwLCA5LCAyMCwgMSwgCisgICAgODIsIDIxOSwgMjU0LCAyMCwgMSwgODIsIDI0MywgMjQyLCAyMjMsIDg5LCAyMCwgMSwgODIsIDE5OCwgMjAsIDEsIDgyLCAKKyAgICAyMjUsIDExMSwgMjAsIDEsIDgyLCAyMzIsIDEyNSwgMjAsIDEsIDgyLCAyMzQsIDM0LCAyMCwgMSwgODIsIDIzMSwgNjMsIAorICAgIDIwLCAxLCA4MiwgMTg2LCAyMCwgMSwgODIsIDIzMSwgMTc0LCAyMCwgMSwgODIsIDIxNiwgMjIyLCAyMCwgMSwgODIsIDIzNCwgCisgICAgOTgsIDIwLCAxLCA4MiwgMjMwLCAxNTUsIDIwLCAxLCA4MiwgMjE2LCAyNDgsIDIwLCAxLCA4MiwgMjQ0LCAxNzcsIDIwLCAxLCAKKyAgICA4MiwgMjQyLCAyMzAsIDIwLCAxLCAyMjUsIDE0MCwgMTc2LCAyMCwgMSwgMjI1LCAxNDAsIDY5LCAyMCwgMSwgMjI1LCAxNDAsIAorICAgIDIzMywgMjIzLCAyMCwgMSwgMjI1LCAxNDAsIDI0NSwgMjE3LCAyMCwgMSwgMjI1LCAxNDAsIDIyMywgMTExLCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIxNywgODcsIDIwLCAxLCAyMjUsIDE0MCwgMjI3LCAxNTIsIDIwLCAxLCAyMjUsIDE0MCwgMjMzLCAxNDEsIAorICAgIDIwLCAxLCAyMjUsIDE0MCwgMjIyLCAyNDIsIDIwLCAxLCAyMjUsIDE0MCwgMjIzLCAzMiwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMzEsIDg0LCAyMCwgMSwgMjI1LCAxNDAsIDIxNywgMTAyLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgMTUxLCAyMCwgMSwgCisgICAgMjI1LCAxNDAsIDIyOCwgMTg4LCAyMCwgMSwgMjI1LCAxNDAsIDE5NCwgMjAsIDEsIDIyNSwgMTQwLCAyMTgsIDUsIDIwLCAxLCAKKyAgICAyMjUsIDE0MCwgMjIwLCAyOSwgMjAsIDEsIDIyNSwgMTQwLCAyMTksIDE5MywgMjAsIDEsIDIyNSwgMTQwLCAyMjAsIDEyNSwgCisgICAgMjAsIDEsIDIyNSwgMTQwLCAyMzMsIDE2MSwgMjAsIDEsIDIyNSwgMTQwLCAyMzQsIDE2MiwgMjAsIDEsIDIyNSwgMTQwLCAKKyAgICAyMjcsIDIxMywgMjAsIDEsIDIyNSwgMTQwLCAyMjcsIDI0MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjgsIDE1OSwgMjAsIDEsIAorICAgIDIyNSwgMTQwLCAyMTAsIDIyNiwgMjAsIDEsIDIyNSwgMTQwLCAyMTksIDIyNywgMjAsIDEsIDIyNSwgMTQwLCAxOTIsIDIwLCAKKyAgICAxLCAyMjUsIDE0MCwgMjI4LCAxNCwgMjAsIDEsIDIyNSwgMTQwLCAyMjUsIDE1NCwgMjAsIDEsIDIyNSwgMTQwLCAyMjcsIAorICAgIDI1MSwgMjAsIDEsIDIyNSwgMTQwLCAyMTEsIDE5MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjUsIDIxNCwgMjAsIDEsIDIyNSwgCisgICAgMTQwLCAyMjIsIDE0MiwgMjAsIDEsIDIyNSwgMTQwLCAyMjgsIDIzOCwgMjAsIDEsIDIyNSwgMTQwLCAyMjMsIDU0LCAyMCwgCisgICAgMSwgMjI1LCAxNDAsIDIzNCwgMTcxLCAyMCwgMSwgMjI1LCAxNDAsIDIyOSwgMTIsIDIwLCAxLCAyMjUsIDE0MCwgMjI5LCAKKyAgICA2MSwgMjAsIDEsIDIyNSwgMTQwLCAyMjAsIDksIDIwLCAxLCAyMjUsIDE0MCwgMjI0LCAxNTAsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjQ0LCA0NSwgMjAsIDEsIDIyNSwgMTQwLCAyMTIsIDY1LCAyMCwgMSwgMjI1LCAxNDAsIDIzMiwgMjQ3LCAyMCwgMSwgMjI1LCAKKyAgICAxNDAsIDIzMiwgMTI1LCAyMCwgMSwgMjI1LCAxNDAsIDIzNCwgMzQsIDIwLCAxLCAyMjUsIDE0MCwgMjMxLCAxMTksIDIwLCAKKyAgICAxLCAyMjUsIDE0MCwgMjIzLCA4NiwgMjAsIDEsIDIyNSwgMTQwLCAxODYsIDIwLCAxLCAyMjUsIDE0MCwgMjMwLCAxNjYsIAorICAgIDIwLCAxLCAyMjUsIDE0MCwgMjMxLCAxMjcsIDIwLCAxLCAyMjUsIDE0MCwgMjE2LCAyMzEsIDIwLCAxLCAyMjUsIDE0MCwgCisgICAgMjM0LCAxLCAyMCwgMSwgMjI1LCAxNDAsIDIyMSwgMjUzLCAyMCwgMSwgMjI1LCAxNDAsIDIxMiwgMTE1LCA5NSwgMSwgMTkxLCAKKyAgICA5NSwgMSwgMjUyLCAxOTksIDk1LCAxLCA4LCAxOTEsIDk1LCAxLCAyMjUsIDQ1LCA5NSwgMSwgMTg2LCA5NSwgMSwgMjMwLCAKKyAgICAyMzgsIDk1LCAxLCAyNTQsIDMxLCAxODYsIDk1LCAxLCAyNDQsIDIwNCwgOTUsIDEsIDIxNCwgMjcsIDk1LCAxLCAyMTMsIAorICAgIDE3NywgOTUsIDEsIDIxNywgMTA2LCA5NSwgMSwgMjQ4LCAyMjksIDk1LCAxLCA4LCAyMTUsIDE1NywgOTUsIDEsIDgsIDIxNywgCisgICAgMTA2LCA5NSwgMSwgMjE1LCAxNTcsIDk1LCAxLCAyNDgsIDE0MywgOTUsIDEsIDE5OCwgOTUsIDEsIDIyOCwgMjQyLCA5NSwgCisgICAgMSwgOCwgMjI4LCAxMTUsIDk1LCAxLCAyNTQsIDMxLCAxOTgsIDk1LCAxLCAyMjgsIDExNSwgOTUsIDEsIDIyOCwgMTAxLCAKKyAgICA5NSwgMSwgMjMzLCAxNDEsIDk1LCAxLCAyMzIsIDY2LCA5NSwgMSwgMjMzLCA0LCA5NSwgMSwgMjMyLCAyNDksIDk1LCAxLCAKKyAgICAyMTYsIDU3LCA5NSwgMSwgMjQ3LCAxNjEsIDk1LCAxLCAyMTYsIDQ5LCA5NSwgMSwgMjQ3LCAxNjAsIDk1LCAxLCAxNzYsIAorICAgIDk1LCAxLCAyNDMsIDE0MiwgOTUsIDEsIDgsIDE3NiwgOTUsIDEsIDIyNCwgOTEsIDk1LCAxLCAyMjQsIDY5LCA5NSwgMSwgCisgICAgMjI5LCA4MiwgOTUsIDEsIDIyOSwgMzMsIDk1LCAxLCAyNTQsIDMxLCAyMjksIDgyLCA5NSwgMSwgMTYyLCA5NSwgMSwgMjExLCAKKyAgICAxNjUsIDk1LCAxLCAyNDMsIDAsIDk1LCAxLCAyNDIsIDIzMywgOTUsIDEsIDIxNSwgMTY2LCA5NSwgMSwgMjQ2LCAzNCwgOTUsIAorICAgIDEsIDIyNywgMTY5LCA5NSwgMSwgMjI3LCAxNTQsIDk1LCAxLCAyMTUsIDE3NiwgOTUsIDEsIDI0NiwgNDEsIDk1LCAxLCA4LCAKKyAgICAyMTUsIDE3NiwgOTUsIDEsIDgsIDI0NiwgNDEsIDk1LCAxLCAyMjMsIDEwOSwgMjE1LCAxNzYsIDk1LCAxLCAyMjAsIDEwNCwgCisgICAgOTUsIDEsIDIxOCwgMjI1LCA5NSwgMSwgMjEwLCA4MiwgOTUsIDEsIDIxMCwgMTQsIDk1LCAxLCAyMTUsIDE4NCwgOTUsIDEsIAorICAgIDI0NiwgNDYsIDk1LCAxLCA4LCAyMTUsIDE4NCwgOTUsIDEsIDIwNiwgOTUsIDEsIDIxMCwgMTE2LCA5NSwgMSwgMjEwLCAxNSwgCisgICAgOTUsIDEsIDIwOSwgMjQzLCA5NSwgMSwgMjA5LCAyMjMsIDk1LCAxLCAyNTQsIDMxLCAyMDksIDI0MywgOTUsIDEsIDIwOSwgCisgICAgMjE1LCA5NSwgMSwgMjA5LCAyMjIsIDk1LCAxLCAyMTIsIDY1LCA5NSwgMSwgMjU0LCAyMTgsIDk1LCAxLCAyNDEsIDE5NiwgCisgICAgOTUsIDEsIDIyOSwgMTk3LCA5NSwgNSwgMjUzLCAyMzAsIDk1LCA1LCAyMjMsIDEwOSwgMjEzLCAxMzMsIDk1LCA1LCAyMjMsIAorICAgIDEwOSwgMjUzLCAyMzAsIDk1LCAyNSwgNSwgNjEsIDk1LCAyNSwgNSwgMjU1LCA4MiwgOTUsIDI1LCA1LCAyNTQsIDIxNCwgCisgICAgOTUsIDI1LCA1LCAyNTQsIDEzMSwgOTUsIDI1LCA1LCAyNTQsIDEyMywgOTUsIDI1LCA1LCA3OCwgOTUsIDI1LCA1LCAyMjYsIAorICAgIDE4NywgOTUsIDI1LCA1LCAyMTEsIDIyNywgOTUsIDI1LCA1LCAyMTIsIDk4LCA5NSwgMjUsIDUsIDc2LCA5NSwgMjUsIDUsIAorICAgIDI0NSwgMTU4LCA5NSwgMjUsIDUsIDI0NSwgMTQ2LCA5NSwgMjUsIDUsIDIyNiwgMjM2LCA5NSwgMjUsIDUsIDc0LCA5NSwgCisgICAgMjUsIDUsIDI0MCwgMTI2LCA5NSwgMjUsIDUsIDI0MCwgMTI1LCA5NSwgMjUsIDUsIDI0MCwgMTI0LCA5NSwgMjUsIDUsIAorICAgIDIzNSwgMTk2LCA5NSwgMjUsIDUsIDIzNiwgNjcsIDk1LCAyNSwgNSwgMjM2LCA0MCwgOTUsIDI1LCA1LCAyMzUsIDE2MiwgCisgICAgOTUsIDI1LCA1LCAyMzUsIDIzOCwgOTUsIDI1LCA1LCA2OSwgOTUsIDI1LCA1LCAyMTQsIDIyOSwgOTUsIDI1LCA1LCAyMTQsIAorICAgIDIyOCwgOTUsIDI1LCA1LCAyMTQsIDIyNywgOTUsIDI1LCA1LCAyMTQsIDExOCwgOTUsIDI1LCA1LCAyMTQsIDIxMSwgOTUsIAorICAgIDI1LCA1LCAyMTQsIDE3OCwgOTUsIDI1LCA1LCAyMTEsIDExNywgOTUsIDI1LCA1LCAyMTEsIDgsIDk1LCAyNSwgNSwgMjU0LCAKKyAgICAyNTIsIDk1LCAyNSwgNSwgMjU0LCAyNDgsIDk1LCAyNSwgNSwgMjQ1LCA5NCwgOTUsIDI1LCA1LCAyMjIsIDE4NSwgMjQ1LCAKKyAgICA5NCwgOTUsIDI1LCA1LCAyNDUsIDEwMCwgOTUsIDI1LCA1LCAyMjIsIDE4NSwgMjQ1LCAxMDAsIDk1LCAyNSwgNSwgMjU0LCAKKyAgICAyMTAsIDk1LCAyNSwgNSwgMjQ1LCAyMDMsIDk1LCAyNSwgNSwgMjUzLCAyMDAsIDk1LCAyNSwgNSwgMjI2LCAxMzgsIDk1LCAKKyAgICAyNSwgNSwgMjMwLCAzMCwgOTUsIDI1LCA1LCAyMjksIDg0LCA5NSwgMTM4LCAyMjIsIDI1NCwgOTUsIDEzOCwgMjE2LCAxNSwgCisgICAgMjIyLCAyNTQsIDk1LCAxMzgsIDQ4LCA5NSwgMTM4LCA1MSwgOTUsIDEsIDIxNiwgMjksIDk1LCAxLCAyMTYsIDI4LCA5NSwgCisgICAgMSwgMjE2LCAyNywgOTUsIDEsIDIxNiwgMjYsIDk1LCAxLCAyMTYsIDI1LCA5NSwgMSwgMjE2LCAyNCwgOTUsIDEsIDIxNiwgCisgICAgMjMsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAzMCwgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDI5LCA5NSwgMSwgMjIzLCAxMDksIAorICAgIDIxNiwgMjcsIDk1LCAxLCAyMjMsIDEwOSwgMjE2LCAyNiwgOTUsIDEsIDIyMywgMTA5LCAyMTYsIDI1LCA5NSwgMSwgMjIzLCAKKyAgICAxMDksIDIxNiwgMjMsIDU2LCAxLCAyNTQsIDMxLCA3NiwgMTQxLCAxLCAyNTQsIDMxLCAyMTEsIDQ3LCA0OSwgMjgsIDE2LCAKKyAgICAyMjQsIDE1NywgNDksIDI4LCAxNiwgMjQ4LCAxNjYsIDQ5LCAyOCwgMTYsIDIyNSwgMTc4LCA0OSwgMjgsIDE2LCAyMjYsIAorICAgIDExNywgMjQ1LCAxODYsIDQ5LCAyOCwgMTYsIDIyNiwgMTE3LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE0LCAxNiwgMjQ1LCAKKyAgICAxODYsIDQ5LCAyOCwgMTYsIDIxNCwgMTYsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMzQsIDIwMywgNDksIDI4LCAxNiwgCisgICAgMjE3LCAxNzAsIDQ5LCAyOCwgMTYsIDIyNiwgMTMsIDQ5LCAyOCwgMTYsIDIxMCwgMjE3LCA0OSwgMjgsIDE2LCAyMTAsIAorICAgIDIxOCwgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDIzMywgMjQwLCA0OSwgMjgsIDE2LCAyNTQsIDc2LCAyNDUsIDE4NiwgNDksIAorICAgIDI4LCAxNiwgMjQ1LCAzNCwgMjQ1LCAxODYsIDQ5LCAyOCwgMTYsIDIxNywgMywgNDksIDI4LCAxNiwgMjM0LCAxNjcsIDQ5LCAKKyAgICAyOCwgMTYsIDI1NCwgNjYsIDQ5LCAyOCwgMTYsIDI1NCwgNjcsIDI0NywgMjA5LCA0OSwgMjgsIDE2LCAyMTcsIDE3NiwgNDksIAorICAgIDI4LCAxNiwgMjE2LCAxNjAsIDQ5LCAyOCwgMTYsIDIyNiwgMjEwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NiwgCisgICAgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjI0LCAxNTYsIDQ5LCAyOCwgMTYsIDI1MCwgMTU3LCA0OSwgMjgsIDE2LCAyMTQsIDYsIAorICAgIDQ5LCAyOCwgMTYsIDIzNSwgMTcwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMzQsIDE2OSwgMjU0LCAyOSwgNDksIDI4LCAxNiwgCisgICAgMjM0LCAxNjgsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyMSwgMjE1LCA0OSwgMjgsIDE2LCAyMjYsIDQsIDQ5LCAyOCwgMTYsIAorICAgIDIxOCwgMTQ4LCAyNTQsIDY5LCA0OSwgMjgsIDE2LCAyMjYsIDExNiwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjE0LCAxNSwgCisgICAgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjU0LCA3MCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjU0LCA2NCwgNDksIDI4LCAxNiwgCisgICAgMjM0LCA0MywgNDksIDI4LCAxNiwgMjIzLCA0OSwgNDksIDI4LCAxNiwgMjI1LCAxMDksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIAorICAgIDIxNiwgODQsIDQ5LCAyOCwgMTYsIDI1NCwgMTI5LCA0OSwgMjgsIDE2LCAyMjEsIDE2MSwgNDksIDI4LCAxNiwgMjE3LCAKKyAgICAxNzksIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNywgMTc5LCAyMzEsIDQ1LCAyMTgsIDE0NiwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxMTEsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIxNiwgMTkxLCA0OSwgMjgsIDE2LCAyMzMsIDMzLCA0OSwgMjgsIDE2LCAyNDYsIAorICAgIDQ5LCA0OSwgMjgsIDE2LCAyMTUsIDIyOCwgNDksIDI4LCAxNiwgMjE2LCAyMzMsIDQ5LCAyOCwgMTYsIDIzMywgMjQzLCA0OSwgCisgICAgMjgsIDE2LCAyNTQsIDc2LCAyNDUsIDM0LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI1NCwgMjksIDQ5LCAKKyAgICAyOCwgMTYsIDIzNiwgMTksIDQ5LCAyOCwgMTYsIDIxNSwgMjAwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMzQsIDIwNiwgCisgICAgMjE1LCAxOTksIDQ5LCAyOCwgMTYsIDIyNSwgMjAzLCA0OSwgMjgsIDE2LCAyMjQsIDE2MSwgNDksIDI4LCAxNiwgMjM0LCAKKyAgICAxNywgNDksIDI4LCAxNiwgMjUwLCA4OCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgMjIzLCAxNDksIDQ5LCAyOCwgMTYsIDIyNiwgCisgICAgMTYsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDIyNiwgMTQsIDI1NCwgMjksIDQ5LCAyOCwgMTYsIDI0MCwgMTE2LCA0OSwgMjgsIAorICAgIDE2LCAyMjksIDIwOCwgNDksIDI4LCAxNiwgMjI1LCAxNTksIDQ5LCAyOCwgMTYsIDIzNCwgMTgsIDI1NCwgMTU4LCA0OSwgCisgICAgMjgsIDE2LCAyMTUsIDIwMCwgMjU0LCAxNTgsIDQ5LCAyOCwgMTYsIDIxOCwgMTI1LCA0OSwgMjgsIDE2LCAyNDIsIDEzMCwgCisgICAgNDksIDI4LCAxNiwgMjM1LCAxNzAsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMjYsIDIxMCwgMjI5LCAxMDAsIDQ5LCAyOCwgCisgICAgMTYsIDIyNiwgMTE3LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI1LCAxNTgsIDQ5LCAyOCwgMTYsIDIzNCwgNCwgNDksIDI4LCAKKyAgICAxNiwgMjI1LCAxNTcsIDQ5LCAyOCwgMTYsIDIzMywgMjQyLCA0OSwgMjgsIDE2LCAyMjUsIDIwNCwgMjI5LCAxMDAsIDQ5LCAKKyAgICAyOCwgMTYsIDIzNCwgMTY4LCAyMjksIDEwMSwgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDIzNCwgMTY5LCAyMjksIDEwMSwgCisgICAgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDIxMCwgMjE1LCA0OSwgMjgsIDE2LCAyNTQsIDY3LCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjU0LCA2OCwgMjE3LCAxNzcsIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyMTAsIDIxNiwgNDksIDI4LCAxNiwgMjMzLCAKKyAgICAyNDEsIDQ5LCAyOCwgMTYsIDI0NSwgMTgxLCA0OSwgMjgsIDE2LCAyNTAsIDE1OCwgNDksIDI4LCAxNiwgMjMwLCAyMDMsIAorICAgIDIzNSwgMTY5LCA0OSwgMjgsIDE2LCAyMTQsIDE2LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI1LCAxMDksIDIyOSwgMTAwLCAKKyAgICA0OSwgMjgsIDE2LCAyMjQsIDE2MiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIyNiwgMjA3LCA0OSwgMjgsIDE2LCAyNTQsIAorICAgIDkyLCA0OSwgMjgsIDE2LCAyMzIsIDYzLCA0OSwgMjgsIDE2LCAyMjYsIDE0LCAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjI2LCAKKyAgICAxNiwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgNjgsIDIyNiwgMTUsIDQ5LCAyOCwgMTYsIDIzMywgMTU5LCA0OSwgMjgsIAorICAgIDE2LCAyNTQsIDkzLCA0OSwgMjgsIDE2LCAyMTUsIDIwMCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI0NSwgMTg0LCA0OSwgCisgICAgMjgsIDE2LCAyMTcsIDE3OSwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDIxNywgMTcxLCA0OSwgMjgsIDE2LCAyNTAsIDg4LCAKKyAgICAyMjksIDEwMCwgNDksIDI4LCAxNiwgMjQ1LCAxMTQsIDQ5LCAyOCwgMTYsIDIyMSwgMTYyLCAyMjksIDEwMCwgNDksIDI4LCAKKyAgICAxNiwgMjExLCAxNTEsIDIzNCwgNDMsIDQ5LCAyOCwgMTYsIDIxNSwgMTk3LCA0OSwgMjgsIDE2LCAyMjQsIDE2MywgNDksIAorICAgIDI4LCAxNiwgMjE1LCAyMDEsIDQ5LCAyOCwgMTYsIDIxNSwgMTk4LCA0OSwgMjgsIDE2LCAyMjQsIDE2MCwgNDksIDI4LCAxNiwgCisgICAgMjE1LCAxOTYsIDQ5LCAyOCwgMTYsIDIyNCwgMTU5LCA0OSwgMjgsIDE2LCAyNDIsIDE2NSwgNDksIDI4LCAxNiwgMjU0LCAKKyAgICAyMiwgNDksIDI4LCAxNiwgMjQ1LCA2OCwgMjU0LCAyMiwgNDksIDI4LCAxNiwgMjI2LCAxMTEsIDIyOSwgMTAwLCA0OSwgMjgsIAorICAgIDE2LCAyMTYsIDE5MCwgMjQ1LCA3NywgNDksIDI4LCAxNiwgMjE2LCAxOTAsIDI0NSwgMzMsIDQ5LCAyOCwgMTYsIDIxNiwgCisgICAgMTkyLCAyNTQsIDcxLCA0OSwgMjgsIDE2LCAyMTYsIDE4NSwgMjM0LCAyNTMsIDI1NCwgNjMsIDQ5LCAyOCwgMTYsIDIzNCwgCisgICAgMjA1LCA0OSwgMjgsIDE2LCAyNDUsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAorICAgIDIxMSwgMTEsIDI1NCwgMTA0LCA0OSwgMjgsIDE2LCAyMTgsIDE0NywgNDksIDI4LCAxNiwgMjM0LCA0NCwgMjU0LCAxMDQsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjEwLCAyNTQsIDI5LCA0OSwgMjgsIDE2LCAyMzMsIDI0NCwgMjU0LCAyOSwgNDksIDI4LCAxNiwgCisgICAgMjMzLCAyNDQsIDI1NCwgMTU4LCA0OSwgMjgsIDE2LCAyMzMsIDI0NCwgMjI5LCAxMDAsIDQ5LCAyOCwgMTYsIDI1NCwgNzAsIAorICAgIDIyOSwgMTAwLCA0OSwgMjgsIDE2LCAyNTQsIDcyLCA0OSwgMjgsIDE2LCAyNDcsIDIwOSwgNDksIDI4LCAxNiwgMjE1LCAKKyAgICAyMTEsIDQ5LCAyOCwgMTYsIDIxNiwgMjI1LCA0OSwgMjgsIDE2LCAyMzQsIDgsIDQ5LCAyOCwgMTYsIDIzMywgMzgsIDI0NSwgCisgICAgMTQyLCAyNTAsIDc5LCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAyNDYsIDUwLCAyNTAsIDgwLCA0OSwgMjgsIDE2LCAyMzMsIDM4LCAKKyAgICAyMTUsIDIxMywgMjUwLCA4MCwgNDksIDI4LCAxNiwgMjMzLCAzOCwgMjE2LCAyMzUsIDI1MCwgODAsIDQ5LCAyOCwgMTYsIAorICAgIDIzMywgMzgsIDIzNiwgMTQsIDI1MCwgNzksIDQ5LCAyOCwgMTYsIDI0MiwgMTY2LCAyMjksIDEwMSwgMjU0LCAxMDQsIDQ5LCAKKyAgICAyOCwgMTYsIDI0MiwgMTY2LCAyMjYsIDUsIDI1NCwgMTgsIDQ5LCAyOCwgMTYsIDI0MiwgMTY2LCAyMjYsIDUsIDI0OCwgMzcsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjMzLCA0OSwgMjgsIDE2LCAyNDcsIDIzNCwgMjI2LCA1LCAyNTQsIDE5LCAyMzQsIDIwMiwgCisgICAgNDksIDI4LCAxNiwgMjQ3LCAyMzQsIDIyNiwgNSwgMjU0LCAxOSwgMjU0LCAxMDQsIDQ5LCAyOCwgMTYsIDI0NywgMjM0LCAKKyAgICAyMjYsIDUsIDI0OCwgMzcsIDQ5LCAyOCwgMTYsIDIxNSwgMjE3LCA0OSwgMjgsIDE2LCAyNTQsIDIzLCA0OSwgMjgsIDE2LCAKKyAgICAyMzYsIDIxLCA0OSwgMjgsIDE2LCAyNDcsIDI1NCwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIyNSwgMywgMjU0LCAyNCwgNDksIAorICAgIDI4LCAxNiwgMjU0LCAyMjAsIDI1NCwgMjEsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAyNTQsIDI0LCA0OSwgMjgsIDE2LCAKKyAgICAyNTQsIDIyMCwgMjMxLCAzOSwgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDIzMSwgNTAsIDQ5LCAyOCwgMTYsIDI1NCwgMjIwLCAKKyAgICAyNDIsIDE2NywgNDksIDI4LCAxNiwgMjU0LCAyMjAsIDI0MiwgMTY0LCA0OSwgMjgsIDE2LCAyNTQsIDIyMCwgMjI1LCAzLCAKKyAgICAyNDIsIDE2NywgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIyNCwgMTY4LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDI1NCwgMTYwLCAyMjQsIDE2OCwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyNDgsIDM2LCAyNDAsIDExNCwgCisgICAgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDI1NCwgMTYwLCAyNDgsIDM2LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIAorICAgIDIxNSwgMjA2LCAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjMxLCAxNTYsIDIxNSwgMjE4LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgCisgICAgMjE2LCAyMjksIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjE2LCAyMjksIDIzMywgNDEsIDI0MCwgMTE0LCAKKyAgICA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjMzLCA0MSwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjUsIDQyLCAKKyAgICAyNDAsIDExNCwgNDksIDI4LCAxNiwgMjM1LCAxNzYsIDIxNiwgMjUyLCAyNDAsIDExNSwgNDksIDI4LCAxNiwgMjU0LCA2OCwgCisgICAgMjE2LCAyNTIsIDI0MCwgMTE1LCA0OSwgMjgsIDE2LCAyNDQsIDE4MCwgMjE2LCAyMjYsIDQ5LCAyOCwgMTYsIDI0NCwgMTgwLCAKKyAgICAyMzAsIDE0OCwgNDksIDI4LCAxNiwgMjQ0LCAxODAsIDI0NywgMjM4LCA0OSwgMjgsIDE2LCAyMzEsIDE1NiwgMjE0LCAxMCwgCisgICAgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAyMjQsIDE2NywgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDIzMSwgMTU2LCAKKyAgICAyMjUsIDQyLCAyMTYsIDIyOSwgMjQwLCAxMTQsIDQ5LCAyOCwgMTYsIDI0MiwgMTYyLCAyMzAsIDMxLCAyNTQsIDcxLCA0OSwgCisgICAgMjgsIDE2LCAyNDIsIDE2MiwgMjMwLCAzMSwgMjQ3LCAyMDgsIDQ5LCAyOCwgMTYsIDI0NSwgMTU2LCAyMzQsIDI1MywgMjQzLCAKKyAgICAyNDMsIDIxMywgMTI0LCA0OSwgMjgsIDE2LCAyMzYsIDIwLCA0OSwgMjgsIDE2LCAyMzYsIDE4LCA0OSwgMjgsIDE2LCAyNDMsIAorICAgIDI0MywgMjU0LCAzMCwgMjQ4LCAzNSwgMjQwLCAxMTMsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMTkxLCA0OSwgCisgICAgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDIyOSwgMjA4LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjI5LCAyMDMsIAorICAgIDI0MCwgMTE0LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjQ3LCAyNTIsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAKKyAgICAyMTksIDEwNCwgMjQ3LCAyNTEsIDI0OCwgMTEsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjM0LCAxODgsIAorICAgIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjEwLCAyMywgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NywgMjUyLCAKKyAgICAyMjgsIDIzOSwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIDI0MywgMjQzLCAyNDcsIDI1MiwgMjI4LCAyMzksIDI1NCwgMTA0LCAKKyAgICA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjMxLCAxOTYsIDI1MCwgODEsIDI0NywgMjM4LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgCisgICAgMjMxLCAxOTYsIDI1MCwgODEsIDIzMCwgMTQ4LCA0OSwgMjgsIDE2LCAyNDQsIDEzMCwgMjE5LCAxMDQsIDI1MCwgODEsIAorICAgIDIxNCwgOSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDIxOSwgMTA0LCAyNTAsIDgxLCAyMTcsIDE4MCwgNDksIDI4LCAxNiwgCisgICAgMjQzLCAyNDMsIDIyOSwgMTAyLCA0OSwgMjgsIDE2LCAyNTAsIDgyLCAyMDksIDI0OSwgNDksIDI4LCAxNiwgMjUwLCA4MiwgCisgICAgMjM0LCA0MiwgNDksIDI4LCAxNiwgMjUwLCA4MiwgMjE5LCAxMSwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0MCwgMTYxLCAKKyAgICAyMTEsIDEwLCAyMTYsIDIzMCwgNDksIDI4LCAxNiwgMjQzLCAyNDMsIDI0NSwgMTU3LCAyNTQsIDk0LCA0OSwgMjgsIDE2LCAKKyAgICAyMTEsIDEwLCAyMTUsIDIwNywgNDksIDI4LCAxNiwgMjQ3LCAyNDYsIDIxNSwgMjA3LCA0OSwgMjgsIDE2LCAyNDcsIDI0NiwgCisgICAgMjE2LCAyMzAsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyNTQsIDczLCAyNDYsIDUwLCAyNDcsIDE0NywgNDksIDI4LCAxNiwgCisgICAgMjQ3LCAyNDYsIDIzMCwgMTQ2LCAyMTYsIDIzNCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyNDcsIDIzMCwgCisgICAgMjQ1LCA0NCwgMjQ3LCAxNDcsIDQ5LCAyOCwgMTYsIDI0NywgMjQ2LCAyMTUsIDIxNSwgMjI2LCAyMTUsIDI0NywgMTQ3LCAKKyAgICA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyNTQsIDczLCAyNDYsIDUwLCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgCisgICAgMjMwLCAxNDYsIDIxNiwgMjM0LCAyNDcsIDE0NywgNDksIDI4LCAxNiwgMjExLCAxMCwgMjQ3LCAyMzAsIDI0NSwgNDQsIAorICAgIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAyMTEsIDEwLCAyMTUsIDIxNSwgMjI2LCAyMTUsIDI0NywgMTQ3LCA0OSwgMjgsIDE2LCAKKyAgICAyNDMsIDU2LCAyNDcsIDI0NSwgNDksIDI4LCAxNiwgMjQzLCA1NiwgMjExLCA5LCA0OSwgMjgsIDE2LCAyNDcsIDI1MywgCisgICAgMjU0LCA3MywgMjMwLCAyMDQsIDQ5LCAyOCwgMTYsIDI0NywgMjUzLCAyNTQsIDczLCAyMzEsIDc4LCA0OSwgMjgsIDE2LCAKKyAgICAyNDcsIDI1MywgMjQ3LCAyMDksIDQ5LCAyOCwgMTYsIDI0NywgMjUzLCAyMTYsIDE4MywgNDksIDI4LCAxNiwgMjE5LCAxNjUsIAorICAgIDIxNiwgMTgzLCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjE2LCAxODQsIDI0NywgMTk0LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgCisgICAgMjE2LCAxODQsIDIxNSwgMjA4LCA0OSwgMjgsIDE2LCAyMTksIDE2NSwgMjE2LCAxODQsIDIxNiwgMjIzLCA0OSwgMjgsIDE2LCAKKyAgICAyMTksIDE2NSwgMjUzLCAyNTIsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyNTMsIDI1MywgMjQ3LCAxOTQsIDQ5LCAyOCwgMTYsIAorICAgIDIxOSwgMTY1LCAyNTMsIDI1MywgMjE1LCAyMDgsIDQ5LCAyOCwgMTYsIDIxOSwgMTY1LCAyNTMsIDI1MywgMjE2LCAyMjMsIAorICAgIDQ5LCAyOCwgMTYsIDI0NywgMjMxLCAyNDMsIDM3LCA0OSwgMjgsIDE2LCAyNDcsIDIzNywgMjI2LCAxMzgsIDQ5LCAyOCwgCisgICAgMTYsIDIxOCwgMTM5LCA0OSwgMjgsIDE2LCAyNTQsIDE1LCAxOTEsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDIxMywgMTI0LCAKKyAgICA0OSwgMjgsIDE2LCAyNTQsIDE1LCAyNDMsIDE0MiwgNDksIDI4LCAxNiwgMjU0LCAxNSwgMjQ4LCAxMSwgNDksIDI4LCAxNiwgCisgICAgMjU0LCAxNSwgMjM0LCAxODgsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIDIxMCwgMjMsIDQ5LCAyOCwgMTYsIDI1NCwgMTUsIAorICAgIDIyOCwgMjM4LCA0OSwgMjgsIDE2LCAyMzQsIDE2OCwgMjI5LCAxMDEsIDIzMSwgNDksIDQ5LCAyOCwgMTYsIDIzNCwgMTY5LCAKKyAgICAyMjksIDEwMSwgMjMxLCA0OSwgNDksIDI4LCAxNiwgMjM0LCAxNjgsIDIyOSwgMTAxLCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgCisgICAgMjM0LCAxNjksIDIyOSwgMTAxLCAyMzQsIDIwMiwgNDksIDI4LCAxNiwgMjM0LCA0NCwgMjM0LCAyMDIsIDQ5LCAyOCwgMTYsIAorICAgIDI0MiwgMTY2LCAyMjksIDEwMSwgMjM0LCAyMDIsIDI4LCAxNiwgMjE5LCAxNTcsIDI1MiwgMTQzLCAyOCwgMTYsIDUyLCAKKyAgICAyNTIsIDE0MywgMjgsIDE2LCA0MCwgMjUyLCAxNDMsIDI4LCAxNiwgMjIzLCA1MywgNDAsIDI1MiwgMTQzLCAyOCwgMTYsIAorICAgIDI0OCwgMTYzLCAyNTIsIDE0MywgMjgsIDE2LCAyMTksIDI1MywgMjUyLCAxNDMsIDI4LCAxNiwgNDMsIDIyMywgODAsIDUwLCAKKyAgICAyOCwgMTYsIDQ0LCAyMjMsIDgwLCA1MCwgMjgsIDE2LCAyMjMsIDgwLCAyNDcsIDEyNiwgMjgsIDE2LCAyNDgsIDIwNCwgCisgICAgMjIxLCAxNjUsIDI4LCAxNiwgMjQ4LCAyMzAsIDI1MSwgMSwgMjgsIDE2LCAyMjEsIDE2NSwgMjgsIDE2LCAyNDksIDI0MiwgCisgICAgMjgsIDE2LCAyMjMsIDc4LCAyNDQsIDExOSwgMjgsIDE2LCAyMjMsIDc4LCAyNDQsIDExOCwgMjgsIDE2LCAyMjMsIDc4LCAKKyAgICAyNDQsIDExNywgMjgsIDE2LCAyNDQsIDEzOSwgMjgsIDE2LCAyNDQsIDE0MCwgNTEsIDI4LCAxNiwgMjUxLCAxNTYsIDc5LCAKKyAgICAyOCwgMTYsIDI1MSwgMzIsIDI4LCAxNiwgMjUxLCAxNjcsIDI4LCAxNiwgMTI3LCAyOCwgMTYsIDIyNiwgMTk3LCAyMTgsIAorICAgIDE2NSwgMjgsIDE2LCAyMTUsIDU3LCAyMTgsIDE2NSwgMjgsIDE2LCAyMTYsIDE0MywgMjE4LCAxNjUsIDI4LCAxNiwgMjQ0LCAKKyAgICAxOCwgMjE4LCAxNjUsIDI4LCAxNiwgMjQ0LCA4OCwgMjE4LCAxNjUsIDI4LCAxNiwgMjE5LCAxMjYsIDIxOCwgMTY1LCAyOCwgCisgICAgMTYsIDIxOSwgMTI0LCAyNDQsIDIsIDI4LCAxNiwgMjQ0LCAxNiwgMjQ0LCAyLCAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIyLCAKKyAgICAyOCwgMTYsIDI0MywgMjEwLCAyNTAsIDIzLCAyMjYsIDE0MCwgMjU0LCAxNTAsIDI4LCAxNiwgMjQzLCAyMTAsIDI1MCwgMjMsIAorICAgIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyNTEsIDc1LCAyNTAsIDIyLCAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjIsIAorICAgIDI4LCAxNiwgMjQ1LCAxNSwgMjUwLCAyMywgMjI2LCAxNDAsIDI1NCwgMTUwLCAyOCwgMTYsIDI0NSwgMTUsIDI1MCwgMjMsIAorICAgIDIyNiwgMTQwLCAyNTIsIDEzMCwgMjgsIDE2LCAyNDYsIDkxLCAyNTAsIDIxLCAyOCwgMTYsIDI0NiwgOTEsIDI1MCwgMjAsIAorICAgIDI4LCAxNiwgMjMwLCA5MCwgMjMxLCA5NSwgMjIzLCA2NCwgMjgsIDE2LCA1MiwgMjIwLCA3NywgMjgsIDE2LCA1MiwgMjQ0LCAKKyAgICA3MywgMjgsIDE2LCAyNDQsIDc0LCAyMTQsIDE2MywgMjgsIDE2LCAyNDQsIDc0LCAyNDYsIDExNCwgMjgsIDE2LCAyMjksIAorICAgIDE5MywgMjE0LCAxNjMsIDI4LCAxNiwgMjI5LCAxOTMsIDI0NiwgMTE0LCAyOCwgMTYsIDIyMCwgNzgsIDIxNCwgMTYzLCAyOCwgCisgICAgMTYsIDIyMCwgNzgsIDI0NiwgMTE0LCAyOCwgMTYsIDIyNCwgMjUsIDEzOCwgMjIwLCA3NywgMjgsIDE2LCAyMjQsIDI1LCAKKyAgICAxMzgsIDI0NCwgNzMsIDI4LCAxNiwgMjQ5LCAyMjQsIDIxNiwgODgsIDI4LCAxNiwgMjQ5LCA5MywgMjE2LCA4OCwgMjgsIAorICAgIDE2LCAyMjYsIDE0MCwgMjU0LCAxNTAsIDI4LCAxNiwgMjI2LCAxNDAsIDI1MiwgMTMwLCAyOCwgMTYsIDIyNCwgNywgMjU0LCAKKyAgICAxNTAsIDI4LCAxNiwgMjI0LCA3LCAyNTIsIDEzMCwgMjgsIDE2LCAyMzAsIDkzLCAyMjMsIDY0LCAyOCwgMTYsIDIxMSwgCisgICAgMjUxLCAyMjMsIDY0LCAyOCwgMTYsIDE2MywgMjIzLCA2NCwgMjgsIDE2LCAyMjQsIDI1LCAyMjMsIDY0LCAyOCwgMTYsIAorICAgIDI0NSwgMTk3LCAyMjMsIDY0LCAyOCwgMTYsIDIxOSwgMTIwLCAyMjMsIDY0LCAyOCwgMTYsIDIxNiwgMTYxLCAyMjMsIDY0LCAKKyAgICAyOCwgMTYsIDIxOSwgMTEyLCAyMjMsIDY0LCAyOCwgMTYsIDEyMywgMjQwLCAyMTgsIDIxNSwgNzEsIDIyMywgNjQsIDI4LCAKKyAgICAxNiwgMjExLCAxNzksIDIyOCwgNDgsIDI4LCAxNiwgOTYsIDIyOCwgNDgsIDI4LCAxNiwgMjUwLCA0NCwgMjExLCAxNzksIAorICAgIDIyOCwgNDgsIDI4LCAxNiwgNDIsIDIyOCwgNDksIDIxMSwgMjUzLCAyOCwgMTYsIDQyLCAyMjgsIDQ5LCAyNTEsIDIyOSwgCisgICAgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCAKKyAgICAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgNDMsIDIxMSwgMjUzLCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIAorICAgIDQ5LCA0MywgMjUxLCAyMjksIDI4LCAxNiwgMjE1LCAyMjcsIDIyOCwgNDksIDQ0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIAorICAgIDIyNywgMjI4LCA0OSwgNDQsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjQsIDIxMSwgMjUzLCAyOCwgCisgICAgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjQsIDI1MSwgMjI5LCAyOCwgMTYsIDIxNSwgMjI3LCAyMjgsIDQ5LCAxMjAsIDQ0LCAKKyAgICAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNywgMjI4LCA0OSwgMTIwLCA0NCwgMjUxLCAyMjksIDI4LCAxNiwgMjMwLCAxMzQsIAorICAgIDIyOCwgNDksIDIxMSwgMjUzLCAyOCwgMTYsIDIzMCwgMTM0LCAyMjgsIDQ5LCAyNTEsIDIyOSwgMjgsIDE2LCAyMTUsIDIyNCwgCisgICAgMjI4LCA0OSwgMTI0LCAyMTEsIDI1MywgMjgsIDE2LCAyMTUsIDIyNCwgMjI4LCA0OSwgMTI0LCAyNTEsIDIyOSwgMjgsIDE2LCAKKyAgICAyMjYsIDgsIDIyOCwgNDgsIDI4LCAxNiwgMjEzLCAxMzIsIDIyOCwgNDgsIDI4LCAxNiwgMjI4LCA0OSwgMjUxLCAyMjksIAorICAgIDI4LCAxNiwgMjI3LCAyMDcsIDIyOCwgNDgsIDI4LCAxNiwgMjQ5LCAyNDksIDIyOCwgNDksIDIxMSwgMjUzLCAyOCwgMTYsIAorICAgIDI0OSwgMjQ5LCAyMjgsIDQ5LCAyNTEsIDIyOSwgMjgsIDE2LCAyNTEsIDE1NCwgMjgsIDE2LCAyMTEsIDI1MSwgMjI4LCA1MiwgCisgICAgMjgsIDE2LCAxNjMsIDIyOCwgNTIsIDI4LCAxNiwgMjI0LCAyNSwgMjI4LCA1MiwgMjgsIDE2LCAyNDUsIDE5NywgMjI4LCAKKyAgICA1MiwgMjgsIDE2LCAyMTksIDEyMCwgMjI4LCA1MiwgMjgsIDE2LCAyMTYsIDE2MSwgMjI4LCA1MiwgMjgsIDE2LCAyMTksIAorICAgIDExMiwgMjI4LCA1MiwgMjgsIDE2LCAxMjMsIDI0MCwgMjE4LCAyMTUsIDcxLCAyMjgsIDUyLCAyOCwgMTYsIDM4LCAyMTgsIAorICAgIDE0MSwgMjgsIDE2LCAzOCwgMjE4LCAyNDIsIDIxOCwgMTQxLCAyOCwgMTYsIDM4LCAyMTUsIDIzNSwgMjgsIDE2LCAzOCwgCisgICAgMjE1LCAyMzQsIDI4LCAxNiwgMzgsIDIxNSwgMjMzLCAyOCwgMTYsIDI0NCwgMTA5LCAyMTUsIDIzNSwgMjgsIDE2LCAyNDQsIAorICAgIDEwOSwgMjE1LCAyMzQsIDI4LCAxNiwgMjQ0LCAxMDksIDIxNSwgMjMzLCAyOCwgMTYsIDM4LCAyNTMsIDE5NywgMjQ3LCAKKyAgICAxMjgsIDI4LCAxNiwgMzgsIDI0NCwgODAsIDI4LCAxNiwgMzgsIDI0NCwgNzksIDI4LCAxNiwgMzgsIDI0NCwgNzgsIDI4LCAKKyAgICAxNiwgMzgsIDI0NCwgNzcsIDI4LCAxNiwgMzgsIDI0NCwgNzYsIDI4LCAxNiwgMjUyLCA2NiwgMjUyLCA4MiwgMjgsIDE2LCAKKyAgICAyNDUsIDE1MSwgMjUyLCA4MiwgMjgsIDE2LCAyNTIsIDY2LCAyMTYsIDExMiwgMjgsIDE2LCAyNDUsIDE1MSwgMjE2LCAxMTIsIAorICAgIDI4LCAxNiwgMjUyLCA2NiwgMjE5LCA4MiwgMjgsIDE2LCAyNDUsIDE1MSwgMjE5LCA4MiwgMjgsIDE2LCAyNTIsIDY2LCAKKyAgICAyMjUsIDExOCwgMjgsIDE2LCAyNDUsIDE1MSwgMjI1LCAxMTgsIDI4LCAxNiwgMzgsIDI1NSwgMjMsIDI4LCAxNiwgMzgsIAorICAgIDIxOCwgMTY3LCAyOCwgMTYsIDM4LCAyMTYsIDIzOSwgMjgsIDE2LCAzOCwgMjE4LCAxNjgsIDI4LCAxNiwgMzgsIDIzMSwgCisgICAgMTY3LCAyOCwgMTYsIDM4LCAyMzEsIDE2NiwgMjgsIDE2LCAzOCwgMjU1LCAyMiwgMjgsIDE2LCAzOCwgMjMyLCAxMTgsIDI4LCAKKyAgICAxNiwgMjU0LCA2LCAyMTQsIDE2MywgMjgsIDE2LCAyNTQsIDYsIDI0NiwgMTE0LCAyOCwgMTYsIDM4LCAyNDcsIDE0MywgMjgsIAorICAgIDE2LCAzOCwgMjIyLCAyMzQsIDI4LCAxNiwgMzgsIDI0NCwgNjYsIDI4LCAxNiwgMzgsIDIxOSwgNzgsIDI4LCAxNiwgMzgsIAorICAgIDI1MiwgNDYsIDI4LCAxNiwgMzgsIDUyLCAyMTYsIDIwLCAyOCwgMTYsIDM4LCAyMTUsIDIxMiwgMjE2LCAyMCwgMjgsIDE2LCAKKyAgICAyMjIsIDIzOCwgMjgsIDE2LCAyMTgsIDc2LCAyOCwgMTYsIDIxMCwgMTU5LCAyOCwgMTYsIDIyNSwgMTEwLCAyOCwgMTYsIAorICAgIDIzMSwgMzAsIDI4LCAxNiwgMjQ0LCAyNSwgMjgsIDE2LCAyNDksIDE0NiwgMjgsIDE2LCAyNDgsIDg2LCAyOCwgMTYsIDI0MiwgCisgICAgMTU3LCAyMjgsIDUzLCAyMTksIDk3LCAyOCwgMTYsIDI0MiwgMTU3LCAyMjgsIDUzLCAyMjgsIDgwLCAyMTksIDk3LCAyOCwgCisgICAgMTYsIDIxNiwgMSwgMjgsIDE2LCAyMTUsIDk1LCAyOCwgMTYsIDIzNSwgMjAwLCAyMTUsIDk1LCAyOCwgMTYsIDIxNSwgOTYsIAorICAgIDIxOSwgOTcsIDI4LCAxNiwgMjE1LCA5NiwgMjE0LCAxNjMsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgMTA0LCAyOCwgMTYsIAorICAgIDIyNiwgMTUyLCAyMTgsIDEwMSwgMjgsIDE2LCAyMjYsIDE1MiwgMjE4LCAxMDAsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgCisgICAgOTksIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTgsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTcsIDI4LCAxNiwgMjI2LCAKKyAgICAxNTIsIDIxOCwgOTYsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTUsIDI4LCAxNiwgMjI2LCAxNTIsIDIxOCwgOTQsIDI4LCAKKyAgICAxNiwgMjI2LCAxNTIsIDIxOCwgMTAzLCAyOCwgMTYsIDIyNiwgMTUyLCAyMTgsIDEwMiwgMjgsIDE2LCAyNDEsIDI1MiwgMjgsIAorICAgIDE2LCAyMjksIDExMCwgMjgsIDE2LCAyNDUsIDE1MSwgNjQsIDIxOCwgMTM1LCAyOCwgMTYsIDI0OCwgNzksIDIxOSwgOTcsIAorICAgIDI4LCAxNiwgMzgsIDEyNCwgMjUxLCAxNzcsIDI4LCAxNiwgMzgsIDEyMCwgMjUxLCAxNzcsIDI4LCAxNiwgMzgsIDI0MiwgNywgCisgICAgMjgsIDE2LCAzOCwgMjE5LCA2OSwgMjI1LCA0NiwgMjgsIDE2LCAyMjUsIDIxOSwgNzksIDI4LCAxNiwgMjI1LCAyMTksIAorICAgIDEyMCwgNzksIDI4LCAxNiwgMTYzLCAyMjUsIDIxOSwgNzksIDI4LCAxNiwgMjQyLCAxODksIDIxNCwgMTYzLCAyOCwgMTYsIAorICAgIDI0MiwgMTg5LCAyNDYsIDExNCwgMjgsIDE2LCAyLCAyNDQsIDEwOCwgMjgsIDE2LCAyNDgsIDE4OCwgMjgsIDE2LCAyNDgsIAorICAgIDE4OSwgMjU0LCAxNjMsIDI4LCAxNiwgMjMxLCAxMzgsIDI4LCAxNiwgMjMyLCAxMzUsIDI4LCAxNiwgMjUxLCAxNTEsIDI4LCAKKyAgICAxNiwgMjIwLCAxNTYsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgMTU2LCAyNTEsIDIyOSwgMjgsIDE2LCAyMzAsIDE4OSwgMjgsIAorICAgIDE2LCAyMzAsIDE5MCwgMjUxLCAyMjksIDI4LCAxNiwgMjIwLCAxNTAsIDIxMSwgMjUzLCAyOCwgMTYsIDIyMCwgMTUwLCAKKyAgICAyNTEsIDIyOSwgMjgsIDE2LCAyNDMsIDIyNywgMjExLCAyNTMsIDI4LCAxNiwgMjQzLCAyMjcsIDI1MSwgMjI5LCAyOCwgMTYsIAorICAgIDIzMiwgMTM2LCAyMjUsIDE4MywgMjIzLCA2NCwgMjgsIDE2LCAyMzIsIDEzNiwgMjM2LCAxMSwgMjIzLCA2NCwgMjgsIDE2LCAKKyAgICAyNTEsIDE1MiwgMjIzLCA2NCwgMjgsIDE2LCAyMjAsIDE1NiwgMjIzLCA2NCwgMjgsIDE2LCAyMzAsIDE5MCwgMjIzLCA2NCwgCisgICAgMjgsIDE2LCAyMjAsIDE1MCwgMjIzLCA2NCwgMjgsIDE2LCAyMTYsIDI1MCwgMjI1LCAxODEsIDI0OSwgMTE1LCAyMjQsIAorICAgIDE3NywgMjI1LCAxODIsIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAxNzcsIDIzNiwgMTAsIAorICAgIDI4LCAxNiwgMjE2LCAyNTAsIDIyNSwgMTgxLCAyNDksIDExNSwgMjI0LCAxNzcsIDIyNSwgMTgzLCAyNDcsIDIxOSwgMjgsIAorICAgIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgMjI0LCAxNzcsIDIyNSwgMTgyLCAyOCwgMTYsIDIxNiwgMjUwLCAKKyAgICAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIDE3NywgMjM2LCAxMCwgMjgsIDE2LCAyMTYsIDI1MCwgMjM2LCA5LCAyNDksIDExNSwgCisgICAgMjI0LCAxNzcsIDIzNiwgMTEsIDI0NywgMjE5LCAyOCwgMTYsIDIxNiwgMjUwLCAyMzYsIDksIDI0OSwgMTE1LCAyMjQsIAorICAgIDE3NywgMjM2LCAxMSwgMjQ3LCAyMTgsIDI4LCAxNiwgMjE2LCAyNTAsIDIzNiwgOSwgMjQ5LCAxMTUsIDIyNCwgMTc3LCAKKyAgICAyMzYsIDExLCAyNDcsIDIxNywgMjgsIDE2LCAyNDksIDE0MSwgMjgsIDE2LCAyNDIsIDEzMywgMjUxLCA3NSwgMjUwLCAyMiwgCisgICAgMjgsIDE2LCAyNDIsIDEzMywgMjQ1LCAxNSwgMjUwLCAyMiwgMjgsIDE2LCA0MiwgMjUzLCAxNjYsIDI4LCAxNiwgMjEzLCAKKyAgICAxNTEsIDI4LCAxNiwgMjI1LCAxNywgMjgsIDE2LCAyNTAsIDEzLCAyOCwgMTYsIDIyMSwgMjA1LCAyOCwgMTYsIDI1MCwgMTcsIAorICAgIDI4LCAxNiwgMjE2LCA4LCAyOCwgMTYsIDIyNCwgMjQ1LCAyOCwgMTYsIDIyNCwgMjQ2LCAyNDQsIDY4LCAyOCwgMTYsIDIyMSwgCisgICAgMjA2LCAyNDQsIDY4LCAyOCwgMTYsIDIxNiwgOSwgMjIzLCA2MSwgMjgsIDE2LCAyMjUsIDE2NiwgMjE4LCA2NywgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjMwLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTksIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIwOSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjAyLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTQsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDE4OCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTg3LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAxODYsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE4NSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjI5LCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjgsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyNywgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMjI2LCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIyNCwgMjYsIAorICAgIDIxMywgMTM3LCAxODksIDIxNywgMjIzLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMjIsIDI2LCAyMTMsIDEzNywgMTg5LCAKKyAgICAyMTcsIDIyMSwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjIwLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAyMTgsIDI2LCAKKyAgICAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNywgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMjE2LCAyNiwgMjEzLCAxMzcsIDE4OSwgCisgICAgMjE3LCAyMTUsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDIxNCwgMjYsIDIxMywgMTM3LCAxODksIDIxNywgMTkzLCAyNiwgCisgICAgMjEzLCAxMzcsIDE4OSwgMjE3LCAxOTIsIDI2LCAyMTMsIDEzNywgMTg5LCAyMTcsIDE5MSwgMjYsIDIxMywgMTM3LCAxODksIAorICAgIDIxNywgMTkwLCAyNiwgMjEzLCAxMzcsIDE4OSwgMjE3LCAxODksIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIzMCwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjE5LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDIsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDE5NCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTg3LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxODYsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyOCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjI3LCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMjYsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyNSwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjIyLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMjEsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIyMCwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMjE1LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIxMywgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMjEyLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMTEsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDIxMCwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA4LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDcsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwNiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjA1LCAyNiwgMjM1LCAyMjEsIDE4OSwgCisgICAgMjE3LCAyMDQsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDIwMywgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMjAxLCAyNiwgCisgICAgMjM1LCAyMjEsIDE4OSwgMjE3LCAyMDAsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5OSwgMjYsIDIzNSwgMjIxLCAxODksIAorICAgIDIxNywgMTk4LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTcsIDI2LCAyMzUsIDIyMSwgMTg5LCAyMTcsIDE5NiwgMjYsIAorICAgIDIzNSwgMjIxLCAxODksIDIxNywgMTk1LCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTMsIDI2LCAyMzUsIDIyMSwgMTg5LCAKKyAgICAyMTcsIDE5MiwgMjYsIDIzNSwgMjIxLCAxODksIDIxNywgMTkxLCAyNiwgMjM1LCAyMjEsIDE4OSwgMjE3LCAxOTAsIDI2LCAKKyAgICAyMzUsIDIyMSwgMTg5LCAyMTcsIDE4OSwgMzgsIDI2LCAyOCwgMjE1LCAyMDksIDM4LCAyNiwgMjgsIDIxNiwgMjI0LCAzOCwgCisgICAgMjYsIDI4LCAyMjUsIDE5MSwgMjYsIDI4LCAyMzMsIDM3LCAyMzAsIDE0NywgMzEsIDI0NSwgMjMxLCAyNDcsIDIzMiwgMzEsIAorICAgIDI0MSwgMjI5LCAyNDUsIDIzMSwgMjQ3LCAyMzIsIDMxLCAyNDAsIDIyMSwgMjQ1LCAyMzEsIDI0NywgMjMyLCAzMSwgMjQ1LCAKKyAgICAyMzAsIDI0MSwgMjMwLCAyNDcsIDIzMiwgMzEsIDI0NSwgMjMwLCAyNDAsIDIyMCwgMjQ3LCAyMzIsIDMxLCAyNDUsIDIzMSwgCisgICAgMTgwLCAzMSwgMjUwLCAxODIsIDE4MCwgMzEsIDI0MywgMjM2LCAyNTAsIDQzLCAxODAsIDMxLCAyMzAsIDE4MiwgMTgwLCAKKyAgICAzMSwgMjUyLCAxMzgsIDE4MCwgMzEsIDIzNCwgMTg1LCAyMTksIDgxLCAxODAsIDMxLCAyNDksIDE4NywgMTgwLCAzMSwgCisgICAgMjUzLCAyNDEsIDE4MCwgMzEsIDIyNiwgMTY3LCAxODAsIDMxLCAyNTEsIDE2MSwgMjI2LCAxMzQsIDE4MCwgMzEsIDI0OCwgCisgICAgODEsIDE3NywgMjQ3LCAxODcsIDE4MCwgMzEsIDI0NywgMTg0LCAxODAsIDMxLCAyMTAsIDIyMiwgMTgwLCAzMSwgMjM1LCAKKyAgICAyNTQsIDE4MCwgMzEsIDIyNSwgMjAwLCAxODAsIDMxLCAyMjMsIDEzMCwgMTgwLCAzMSwgMjQ5LCAxOTcsIDE4MCwgMzEsIAorICAgIDI0MSwgNjcsIDI1MiwgMTkyLCAxODAsIDMxLCAyMTIsIDU5LCAxODAsIDMxLCAyNDQsIDQ3LCAxODAsIDMxLCAyNTQsIDI1NSwgCisgICAgMTgwLCAzMSwgMjIzLCA5MiwgMTgwLCAzMSwgMjIzLCA2OCwgMTgwLCAzMSwgMjQ1LCAyMjksIDE4MCwgMzEsIDIzNSwgNTksIAorICAgIDE4MCwgMzEsIDI0OSwgMTkyLCAxODAsIDMxLCAyNDUsIDE1MCwgMTgwLCAzMSwgMjQ2LCA2MCwgMTgwLCAzMSwgMjUwLCAKKyAgICAxNTMsIDE4MCwgMzEsIDI0OCwgOTAsIDE4MCwgMzEsIDIzLCAyMjMsIDY3LCAxODAsIDMxLCAyMjYsIDg1LCAxODAsIDMxLCAKKyAgICAyMzMsIDQwLCAxODAsIDMxLCAyNTAsIDYsIDE4MCwgMzEsIDIzNCwgODMsIDE4MCwgMzEsIDI0MywgOTMsIDE4MCwgMzEsIAorICAgIDIxOCwgMTE0LCAxODAsIDMxLCAyMjQsIDEzMywgMTgwLCAzMSwgMjQzLCAyMzUsIDE4MCwgMzEsIDIyMywgNjksIDE4MCwgCisgICAgMzEsIDIzMywgNzcsIDE3NywgMjMwLCAxNjIsIDE4MCwgMzEsIDIyMywgNjUsIDE4MCwgMzEsIDI0MiwgMTc1LCAyMTYsIDQzLCAKKyAgICAyMzEsIDgxLCAxODAsIDMxLCAyNDUsIDE1MiwgMTgwLCAzMSwgMjE4LCAxMjYsIDE4MCwgMzEsIDI0MiwgMTM1LCAxODAsIAorICAgIDMxLCAyNDUsIDE0NCwgMTgwLCAzMSwgMjI1LCAyMzksIDE4MCwgMzEsIDIyMiwgMjI4LCAxODAsIDMxLCAyNDQsIDY3LCAKKyAgICAxODAsIDMxLCAyMTQsIDgsIDE3NywgMjEyLCA0NCwgMTgwLCAzMSwgMjQ5LCAyMDEsIDE4MCwgMzEsIDIzMSwgOTQsIDE4MCwgCisgICAgMzEsIDI0NSwgNjksIDE4MCwgMzEsIDIxNCwgMTcyLCAxODAsIDMxLCAyNDcsIDIyMCwgMTgwLCAzMSwgMjUwLCA4LCAyMzAsIAorICAgIDExNSwgMTgwLCAzMSwgMjQyLCAxMTMsIDE4MCwgMzEsIDI0MywgOTQsIDIzNiwgNiwgMTgwLCAzMSwgMjMxLCAxNDYsIDE4MCwgCisgICAgMzEsIDI1NSwgMTksIDE4MCwgMzEsIDI0NSwgMTY1LCAxODAsIDMxLCAyNDYsIDExNywgMTgwLCAzMSwgMjEyLCA0MiwgMTgwLCAKKyAgICAzMSwgMjE5LCAxNTIsIDE4MCwgMzEsIDIzNSwgMjI5LCAxODAsIDMxLCAyNDgsIDUwLCAxODAsIDMxLCAyNDgsIDE2OCwgCisgICAgMTgwLCAzMSwgMjQ3LCAyMTYsIDE4MCwgMzEsIDI0NSwgMzcsIDE4MCwgMzEsIDIyMCwgMTE3LCAxODAsIDMxLCAyMTgsIAorICAgIDEzMCwgMTgwLCAzMSwgMjQyLCA5LCAxODAsIDMxLCAyNDksIDIyMCwgMTgwLCAzMSwgMjUwLCAzLCAxODAsIDMxLCAyNDQsIAorICAgIDE4NSwgMTgwLCAzMSwgMjU0LCAyMjEsIDE4MCwgMzEsIDI0OSwgMjE5LCAxODAsIDMxLCAyMjYsIDIwMSwgMjE2LCAxOTcsIAorICAgIDIxMywgMjQyLCAxODAsIDMxLCAyNDcsIDI0MCwgMTgwLCAzMSwgMjMzLCAxMzAsIDE4MCwgMzEsIDI0NCwgMjEsIDI0OSwgCisgICAgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxMTEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxMDUsIAorICAgIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxNTgsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAKKyAgICAxNjEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxOTAsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIAorICAgIDIxLCAxOTUsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAxOTksIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAKKyAgICAxNzQsIDIxLCAxOTYsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE0LCAxNzQsIDIxLCAyMDEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgCisgICAgMjE2LCAyNDQsIDIxLCAxMTEsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxMDUsIDI0OSwgMTU3LCAyMjIsIAorICAgIDIwNCwgMjE2LCAyNDQsIDIxLCAxNTgsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxNjEsIDI0OSwgMTU3LCAKKyAgICAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTAsIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTUsIDI0OSwgCisgICAgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTksIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAxOTYsIAorICAgIDI0OSwgMTU3LCAyMjIsIDIwNCwgMjE2LCAyNDQsIDIxLCAyMDEsIDExLCAyMywgNiwgNjEsIDExLCAyMywgNiwgMjUzLCAKKyAgICAxNjYsIDExLCAyMywgNiwgMjUxLCA3NCwgMTEsIDIzLCA2LCAyNDksIDY4LCAxMSwgMjMsIDYsIDc2LCAxMSwgMjMsIDYsIAorICAgIDI0NSwgMTQsIDExLCAyMywgNiwgMjQzLCAyMDksIDExLCAyMywgNiwgMjQyLCA2NywgMTEsIDIzLCA2LCA3NCwgMTEsIDIzLCAKKyAgICA2LCAyMzUsIDE1MCwgMTEsIDIzLCA2LCAyMzUsIDI5LCAxMSwgMjMsIDYsIDE1NiwgMTEsIDIzLCA2LCAxOTQsIDExLCAyMywgCisgICAgNiwgMjMwLCAzMCwgMTEsIDIzLCA2LCA3OCwgMTEsIDIzLCA2LCAyMjYsIDEwOSwgMTEsIDIzLCA2LCAyMjQsIDk5LCAxMSwgCisgICAgMjMsIDYsIDE1MywgMTEsIDIzLCA2LCAyMjIsIDkzLCAxMSwgMjMsIDYsIDIxNywgMTUzLCAxMSwgMjMsIDYsIDY5LCAxMSwgCisgICAgMjMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDYsIDIxMiwgOTgsIDExLCAyMywgNiwgMjExLCAxNzgsIDExLCAyMywgNiwgMjExLCAKKyAgICAxMTcsIDExLCAyMywgNiwgMjEwLCAxNTksIDExLCAyMywgNCwgNjEsIDExLCAyMywgNCwgMjUzLCAxNjYsIDExLCAyMywgNCwgCisgICAgMjUxLCA3NCwgMTEsIDIzLCA0LCAyNDksIDY4LCAxMSwgMjMsIDQsIDc2LCAxMSwgMjMsIDQsIDI0NSwgMTQsIDExLCAyMywgCisgICAgNCwgMjQzLCAyMDksIDExLCAyMywgNCwgMjQyLCA2NywgMTEsIDIzLCA0LCA3NCwgMTEsIDIzLCA0LCAyMzUsIDE1MCwgMTEsIAorICAgIDIzLCA0LCAyMzUsIDI5LCAxMSwgMjMsIDQsIDE1NiwgMTEsIDIzLCA0LCAxOTQsIDExLCAyMywgNCwgMjMwLCAzMCwgMTEsIAorICAgIDIzLCA0LCA3OCwgMTEsIDIzLCA0LCAyMjYsIDEwOSwgMTEsIDIzLCA0LCAyMjQsIDk5LCAxMSwgMjMsIDQsIDE1MywgMTEsIAorICAgIDIzLCA0LCAyMjIsIDkzLCAxMSwgMjMsIDQsIDIxNywgMTUzLCAxMSwgMjMsIDQsIDY5LCAxMSwgMjMsIDQsIDIxNCwgMTA1LCAKKyAgICAxMSwgMjMsIDQsIDIxMiwgOTgsIDExLCAyMywgNCwgMjExLCAxNzgsIDExLCAyMywgNCwgMjExLCAxMTcsIDExLCAyMywgNCwgCisgICAgMjEwLCAxNTksIDExLCAzMiwgNiwgNjEsIDExLCAzMiwgNiwgMjUzLCAxNjYsIDExLCAzMiwgNiwgMjUxLCA3NCwgMTEsIDMyLCAKKyAgICA2LCAyNDksIDY4LCAxMSwgMzIsIDYsIDc2LCAxMSwgMzIsIDYsIDI0NSwgMTQsIDExLCAzMiwgNiwgMjQzLCAyMDksIDExLCAKKyAgICAzMiwgNiwgMjQyLCA2NywgMTEsIDMyLCA2LCA3NCwgMTEsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDMyLCA2LCAyMzUsIDI5LCAKKyAgICAxMSwgMzIsIDYsIDE1NiwgMTEsIDMyLCA2LCAxOTQsIDExLCAzMiwgNiwgMjMwLCAzMCwgMTEsIDMyLCA2LCA3OCwgMTEsIAorICAgIDMyLCA2LCAyMjYsIDEwOSwgMTEsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMzIsIDYsIDE1MywgMTEsIDMyLCA2LCAyMjIsIDkzLCAKKyAgICAxMSwgMzIsIDYsIDIxNywgMTUzLCAxMSwgMzIsIDYsIDY5LCAxMSwgMzIsIDYsIDIxNCwgMTA1LCAxMSwgMzIsIDYsIDIxMiwgCisgICAgOTgsIDExLCAzMiwgNiwgMjExLCAxNzgsIDExLCAzMiwgNiwgMjExLCAxMTcsIDExLCAzMiwgNiwgMjEwLCAxNTksIDExLCAKKyAgICAzMiwgNCwgNjEsIDExLCAzMiwgNCwgMjUzLCAxNjYsIDExLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDMyLCA0LCAyNDksIDY4LCAKKyAgICAxMSwgMzIsIDQsIDc2LCAxMSwgMzIsIDQsIDI0NSwgMTQsIDExLCAzMiwgNCwgMjQzLCAyMDksIDExLCAzMiwgNCwgNzQsIAorICAgIDExLCAzMiwgNCwgMjM1LCAxNTAsIDExLCAzMiwgNCwgMjM1LCAyOSwgMTEsIDMyLCA0LCAxNTYsIDExLCAzMiwgNCwgMTk0LCAKKyAgICAxMSwgMzIsIDQsIDIzMCwgMzAsIDExLCAzMiwgNCwgNzgsIDExLCAzMiwgNCwgMjI2LCAxMDksIDExLCAzMiwgNCwgMjI0LCAKKyAgICA5OSwgMTEsIDMyLCA0LCAxNTMsIDExLCAzMiwgNCwgMjIyLCA5MywgMTEsIDMyLCA0LCAyMTcsIDE1MywgMTEsIDMyLCA0LCAKKyAgICA2OSwgMTEsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzIsIDQsIDIxMSwgMTc4LCAxMSwgMzIsIAorICAgIDQsIDIxMSwgMTE3LCAxMSwgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMjMsIDMyLCA2LCA2MSwgMTEsIDIzLCAzMiwgNiwgMjUzLCAKKyAgICAxNjYsIDExLCAyMywgMzIsIDYsIDI1MSwgNzQsIDExLCAyMywgMzIsIDYsIDI0OSwgNjgsIDExLCAyMywgMzIsIDYsIDc2LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMjMsIDMyLCA2LCAyNDMsIDIwOSwgMTEsIDIzLCAzMiwgNiwgMjQyLCA2NywgCisgICAgMTEsIDIzLCAzMiwgNiwgNzQsIDExLCAyMywgMzIsIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDMyLCA2LCAyMzUsIDI5LCAxMSwgCisgICAgMjMsIDMyLCA2LCAxNTYsIDExLCAyMywgMzIsIDYsIDE5NCwgMTEsIDIzLCAzMiwgNiwgMjMwLCAzMCwgMTEsIDIzLCAzMiwgCisgICAgNiwgNzgsIDExLCAyMywgMzIsIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDMyLCA2LCAyMjQsIDk5LCAxMSwgMjMsIDMyLCA2LCAKKyAgICAxNTMsIDExLCAyMywgMzIsIDYsIDIyMiwgOTMsIDExLCAyMywgMzIsIDYsIDIxNywgMTUzLCAxMSwgMjMsIDMyLCA2LCA2OSwgCisgICAgMTEsIDIzLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAyMywgMzIsIDYsIDIxMiwgOTgsIDExLCAyMywgMzIsIDYsIDIxMSwgMTc4LCAKKyAgICAxMSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIDIzLCAzMiwgNiwgMjEwLCAxNTksIDExLCAyMywgMzIsIDQsIDYxLCAxMSwgCisgICAgMjMsIDMyLCA0LCAyNTMsIDE2NiwgMTEsIDIzLCAzMiwgNCwgMjUxLCA3NCwgMTEsIDIzLCAzMiwgNCwgMjQ5LCA2OCwgMTEsIAorICAgIDIzLCAzMiwgNCwgNzYsIDExLCAyMywgMzIsIDQsIDI0NSwgMTQsIDExLCAyMywgMzIsIDQsIDI0MywgMjA5LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyNDIsIDY3LCAxMSwgMjMsIDMyLCA0LCA3NCwgMTEsIDIzLCAzMiwgNCwgMjM1LCAxNTAsIDExLCAyMywgMzIsIAorICAgIDQsIDIzNSwgMjksIDExLCAyMywgMzIsIDQsIDE1NiwgMTEsIDIzLCAzMiwgNCwgMTk0LCAxMSwgMjMsIDMyLCA0LCAyMzAsIAorICAgIDMwLCAxMSwgMjMsIDMyLCA0LCA3OCwgMTEsIDIzLCAzMiwgNCwgMjI2LCAxMDksIDExLCAyMywgMzIsIDQsIDIyNCwgOTksIAorICAgIDExLCAyMywgMzIsIDQsIDE1MywgMTEsIDIzLCAzMiwgNCwgMjIyLCA5MywgMTEsIDIzLCAzMiwgNCwgMjE3LCAxNTMsIDExLCAKKyAgICAyMywgMzIsIDQsIDY5LCAxMSwgMjMsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDIzLCAzMiwgNCwgMjEyLCA5OCwgMTEsIDIzLCAKKyAgICAzMiwgNCwgMjExLCAxNzgsIDExLCAyMywgMzIsIDQsIDIxMSwgMTE3LCAxMSwgMjMsIDMyLCA0LCAyMTAsIDE1OSwgMTEsIAorICAgIDExOSwgNiwgNjEsIDExLCAxMTksIDYsIDI1MSwgNzQsIDExLCAxMTksIDYsIDI0OSwgNjgsIDExLCAxMTksIDYsIDI0MywgCisgICAgMjA5LCAxMSwgMTE5LCA2LCAyMzUsIDE1MCwgMTEsIDExOSwgNiwgMjM1LCAyOSwgMTEsIDExOSwgNiwgMjMwLCAzMCwgMTEsIAorICAgIDExOSwgNiwgNzgsIDExLCAxMTksIDYsIDIyNiwgMTA5LCAxMSwgMTE5LCA2LCAyMjQsIDk5LCAxMSwgMTE5LCA2LCAyMjIsIAorICAgIDkzLCAxMSwgMTE5LCA2LCAyMTcsIDE1MywgMTEsIDExOSwgNiwgNjksIDExLCAxMTksIDYsIDIxNCwgMTA1LCAxMSwgMTE5LCAKKyAgICA2LCAyMTIsIDk4LCAxMSwgMTE5LCA2LCAyMTEsIDE3OCwgMTEsIDExOSwgNiwgMjExLCAxMTcsIDExLCAxMTksIDYsIDIxMCwgCisgICAgMTU5LCAxMSwgMTE5LCA0LCA2MSwgMTEsIDExOSwgNCwgMjUzLCAxNjYsIDExLCAxMTksIDQsIDI1MSwgNzQsIDExLCAxMTksIAorICAgIDQsIDI0OSwgNjgsIDExLCAxMTksIDQsIDI0NSwgMTQsIDExLCAxMTksIDQsIDI0MiwgNjcsIDExLCAxMTksIDQsIDc0LCAxMSwgCisgICAgMTE5LCA0LCAyMzUsIDE1MCwgMTEsIDExOSwgNCwgMjM1LCAyOSwgMTEsIDExOSwgNCwgMTU2LCAxMSwgMTE5LCA0LCAxOTQsIAorICAgIDExLCAxMTksIDQsIDIzMCwgMzAsIDExLCAxMTksIDQsIDIyNiwgMTA5LCAxMSwgMTE5LCA0LCAyMjQsIDk5LCAxMSwgMTE5LCAKKyAgICA0LCAxNTMsIDExLCAxMTksIDQsIDIyMiwgOTMsIDExLCAxMTksIDQsIDIxNywgMTUzLCAxMSwgMTE5LCA0LCA2OSwgMTEsIAorICAgIDExOSwgNCwgMjE0LCAxMDUsIDExLCAxMTksIDQsIDIxMiwgOTgsIDExLCAxMTksIDQsIDIxMSwgMTc4LCAxMSwgMTE5LCA0LCAKKyAgICAyMTEsIDExNywgMTEsIDExOSwgNCwgMjEwLCAxNTksIDExLCAyMywgMTE5LCA2LCA2MSwgMTEsIDIzLCAxMTksIDYsIDI1MywgCisgICAgMTY2LCAxMSwgMjMsIDExOSwgNiwgMjUxLCA3NCwgMTEsIDIzLCAxMTksIDYsIDI0OSwgNjgsIDExLCAyMywgMTE5LCA2LCAKKyAgICA3NiwgMTEsIDIzLCAxMTksIDYsIDI0NSwgMTQsIDExLCAyMywgMTE5LCA2LCAyNDMsIDIwOSwgMTEsIDIzLCAxMTksIDYsIAorICAgIDI0MiwgNjcsIDExLCAyMywgMTE5LCA2LCA3NCwgMTEsIDIzLCAxMTksIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDExOSwgNiwgCisgICAgMjM1LCAyOSwgMTEsIDIzLCAxMTksIDYsIDE1NiwgMTEsIDIzLCAxMTksIDYsIDE5NCwgMTEsIDIzLCAxMTksIDYsIDIzMCwgCisgICAgMzAsIDExLCAyMywgMTE5LCA2LCA3OCwgMTEsIDIzLCAxMTksIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDExOSwgNiwgMjI0LCAKKyAgICA5OSwgMTEsIDIzLCAxMTksIDYsIDE1MywgMTEsIDIzLCAxMTksIDYsIDIyMiwgOTMsIDExLCAyMywgMTE5LCA2LCAyMTcsIAorICAgIDE1MywgMTEsIDIzLCAxMTksIDYsIDY5LCAxMSwgMjMsIDExOSwgNiwgMjE0LCAxMDUsIDExLCAyMywgMTE5LCA2LCAyMTIsIAorICAgIDk4LCAxMSwgMjMsIDExOSwgNiwgMjExLCAxNzgsIDExLCAyMywgMTE5LCA2LCAyMTEsIDExNywgMTEsIDIzLCAxMTksIDYsIAorICAgIDIxMCwgMTU5LCAxMSwgMjMsIDExOSwgNCwgNjEsIDExLCAyMywgMTE5LCA0LCAyNTMsIDE2NiwgMTEsIDIzLCAxMTksIDQsIAorICAgIDI1MSwgNzQsIDExLCAyMywgMTE5LCA0LCAyNDksIDY4LCAxMSwgMjMsIDExOSwgNCwgNzYsIDExLCAyMywgMTE5LCA0LCAKKyAgICAyNDUsIDE0LCAxMSwgMjMsIDExOSwgNCwgMjQzLCAyMDksIDExLCAyMywgMTE5LCA0LCAyNDIsIDY3LCAxMSwgMjMsIDExOSwgCisgICAgNCwgNzQsIDExLCAyMywgMTE5LCA0LCAyMzUsIDE1MCwgMTEsIDIzLCAxMTksIDQsIDIzNSwgMjksIDExLCAyMywgMTE5LCA0LCAKKyAgICAxNTYsIDExLCAyMywgMTE5LCA0LCAxOTQsIDExLCAyMywgMTE5LCA0LCAyMzAsIDMwLCAxMSwgMjMsIDExOSwgNCwgNzgsIAorICAgIDExLCAyMywgMTE5LCA0LCAyMjYsIDEwOSwgMTEsIDIzLCAxMTksIDQsIDIyNCwgOTksIDExLCAyMywgMTE5LCA0LCAxNTMsIAorICAgIDExLCAyMywgMTE5LCA0LCAyMjIsIDkzLCAxMSwgMjMsIDExOSwgNCwgMjE3LCAxNTMsIDExLCAyMywgMTE5LCA0LCA2OSwgCiAgICAgMTEsIDIzLCAxMTksIDQsIDIxNCwgMTA1LCAxMSwgMjMsIDExOSwgNCwgMjEyLCA5OCwgMTEsIDIzLCAxMTksIDQsIDIxMSwgCiAgICAgMTc4LCAxMSwgMjMsIDExOSwgNCwgMjExLCAxMTcsIDExLCAyMywgMTE5LCA0LCAyMTAsIDE1OSwgMTEsIDEzMywgNiwgNjEsIAotICAgIDExLCAxMzMsIDYsIDI1MywgMTU4LCAxMSwgMTMzLCA2LCAyNDksIDYwLCAxMSwgMTMzLCA2LCA3NSwgMTEsIDEzMywgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMTMzLCA2LCAyNDMsIDIwMiwgMTEsIDEzMywgNiwgMjM1LCAxNDQsIDExLCAxMzMsIDYsIDIzNSwgMjMsIAotICAgIDExLCAxMzMsIDYsIDE1NiwgMTEsIDEzMywgNiwgMTkzLCAxMSwgMTMzLCA2LCAyMzAsIDI1LCAxMSwgMTMzLCA2LCA3NiwgCi0gICAgMTEsIDEzMywgNiwgMjI2LCAxMDUsIDExLCAxMzMsIDYsIDIyNCwgOTYsIDExLCAxMzMsIDYsIDIyMiwgOTEsIDExLCAxMzMsIAotICAgIDYsIDIxNywgMTUyLCAxMSwgMTMzLCA2LCA3MCwgMTEsIDEzMywgNiwgMjE0LCAxMDUsIDExLCAxMzMsIDYsIDIxMiwgOTgsIAorICAgIDExLCAxMzMsIDYsIDI1MywgMTY2LCAxMSwgMTMzLCA2LCAyNDksIDY4LCAxMSwgMTMzLCA2LCA3NiwgMTEsIDEzMywgNiwgCisgICAgMjQ1LCAxNCwgMTEsIDEzMywgNiwgMjQzLCAyMDksIDExLCAxMzMsIDYsIDIzNSwgMTUwLCAxMSwgMTMzLCA2LCAyMzUsIDI5LCAKKyAgICAxMSwgMTMzLCA2LCAxNTYsIDExLCAxMzMsIDYsIDE5NCwgMTEsIDEzMywgNiwgMjMwLCAzMCwgMTEsIDEzMywgNiwgNzgsIAorICAgIDExLCAxMzMsIDYsIDIyNiwgMTA5LCAxMSwgMTMzLCA2LCAyMjQsIDk5LCAxMSwgMTMzLCA2LCAyMjIsIDkzLCAxMSwgMTMzLCAKKyAgICA2LCAyMTcsIDE1MywgMTEsIDEzMywgNiwgNjksIDExLCAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMTMzLCA2LCAyMTIsIDk4LCAKICAgICAxMSwgMTMzLCA2LCAyMTEsIDE3OCwgMTEsIDEzMywgNiwgMjExLCAxMTcsIDExLCAxMzMsIDQsIDYxLCAxMSwgMTMzLCA0LCAKLSAgICAyNTMsIDE1OCwgMTEsIDEzMywgNCwgMjUxLCA2NiwgMTEsIDEzMywgNCwgMjQ5LCA2MCwgMTEsIDEzMywgNCwgNzUsIDExLCAKLSAgICAxMzMsIDQsIDI0NSwgNiwgMTEsIDEzMywgNCwgMjQzLCAyMDIsIDExLCAxMzMsIDQsIDI0MiwgNjAsIDExLCAxMzMsIDQsIAotICAgIDczLCAxMSwgMTMzLCA0LCAyMzUsIDE0NCwgMTEsIDEzMywgNCwgMjM1LCAyMywgMTEsIDEzMywgNCwgMTU2LCAxMSwgMTMzLCAKLSAgICA0LCAxOTMsIDExLCAxMzMsIDQsIDIzMCwgMjUsIDExLCAxMzMsIDQsIDc2LCAxMSwgMTMzLCA0LCAyMjYsIDEwNSwgMTEsIAotICAgIDEzMywgNCwgMjI0LCA5NiwgMTEsIDEzMywgNCwgMTUzLCAxMSwgMTMzLCA0LCAyMjIsIDkxLCAxMSwgMTMzLCA0LCAyMTcsIAotICAgIDE1MiwgMTEsIDEzMywgNCwgNzAsIDExLCAxMzMsIDQsIDIxNCwgMTA1LCAxMSwgMTMzLCA0LCAyMTIsIDk4LCAxMSwgMTMzLCAKKyAgICAyNTMsIDE2NiwgMTEsIDEzMywgNCwgMjUxLCA3NCwgMTEsIDEzMywgNCwgMjQ5LCA2OCwgMTEsIDEzMywgNCwgNzYsIDExLCAKKyAgICAxMzMsIDQsIDI0NSwgMTQsIDExLCAxMzMsIDQsIDI0MywgMjA5LCAxMSwgMTMzLCA0LCAyNDIsIDY3LCAxMSwgMTMzLCA0LCAKKyAgICA3NCwgMTEsIDEzMywgNCwgMjM1LCAxNTAsIDExLCAxMzMsIDQsIDIzNSwgMjksIDExLCAxMzMsIDQsIDE1NiwgMTEsIDEzMywgCisgICAgNCwgMTk0LCAxMSwgMTMzLCA0LCAyMzAsIDMwLCAxMSwgMTMzLCA0LCA3OCwgMTEsIDEzMywgNCwgMjI2LCAxMDksIDExLCAKKyAgICAxMzMsIDQsIDIyNCwgOTksIDExLCAxMzMsIDQsIDE1MywgMTEsIDEzMywgNCwgMjIyLCA5MywgMTEsIDEzMywgNCwgMjE3LCAKKyAgICAxNTMsIDExLCAxMzMsIDQsIDY5LCAxMSwgMTMzLCA0LCAyMTQsIDEwNSwgMTEsIDEzMywgNCwgMjEyLCA5OCwgMTEsIDEzMywgCiAgICAgNCwgMjExLCAxNzgsIDExLCAxMzMsIDQsIDIxMSwgMTE3LCAxMSwgMTMzLCA0LCAyMTAsIDE1OSwgMTEsIDEzOSwgNiwgNjEsIAotICAgIDExLCAxMzksIDYsIDI1MywgMTU4LCAxMSwgMTM5LCA2LCAyNDksIDYwLCAxMSwgMTM5LCA2LCA3NSwgMTEsIDEzOSwgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMTM5LCA2LCAyNDMsIDIwMiwgMTEsIDEzOSwgNiwgNzMsIDExLCAxMzksIDYsIDIzNSwgMTQ0LCAxMSwgCi0gICAgMTM5LCA2LCAyMzUsIDIzLCAxMSwgMTM5LCA2LCAxNTYsIDExLCAxMzksIDYsIDE5MywgMTEsIDEzOSwgNiwgNzYsIDExLCAKLSAgICAxMzksIDYsIDIyMiwgOTEsIDExLCAxMzksIDYsIDIxNywgMTUyLCAxMSwgMTM5LCA2LCA3MCwgMTEsIDEzOSwgNiwgMjE0LCAKKyAgICAxMSwgMTM5LCA2LCAyNTMsIDE2NiwgMTEsIDEzOSwgNiwgMjQ5LCA2OCwgMTEsIDEzOSwgNiwgNzYsIDExLCAxMzksIDYsIAorICAgIDI0NSwgMTQsIDExLCAxMzksIDYsIDI0MywgMjA5LCAxMSwgMTM5LCA2LCA3NCwgMTEsIDEzOSwgNiwgMjM1LCAxNTAsIDExLCAKKyAgICAxMzksIDYsIDIzNSwgMjksIDExLCAxMzksIDYsIDE1NiwgMTEsIDEzOSwgNiwgMTk0LCAxMSwgMTM5LCA2LCA3OCwgMTEsIAorICAgIDEzOSwgNiwgMjIyLCA5MywgMTEsIDEzOSwgNiwgMjE3LCAxNTMsIDExLCAxMzksIDYsIDY5LCAxMSwgMTM5LCA2LCAyMTQsIAogICAgIDEwNSwgMTEsIDEzOSwgNiwgMjEyLCA5OCwgMTEsIDEzOSwgNiwgMjExLCAxNzgsIDExLCAxMzksIDYsIDIxMSwgMTE3LCAxMSwgCi0gICAgMTM5LCA0LCA2MSwgMTEsIDEzOSwgNCwgMjUzLCAxNTgsIDExLCAxMzksIDQsIDI1MSwgNjYsIDExLCAxMzksIDQsIDI0OSwgCi0gICAgNjAsIDExLCAxMzksIDQsIDc1LCAxMSwgMTM5LCA0LCAyNDUsIDYsIDExLCAxMzksIDQsIDI0MywgMjAyLCAxMSwgMTM5LCA0LCAKLSAgICAyNDIsIDYwLCAxMSwgMTM5LCA0LCA3MywgMTEsIDEzOSwgNCwgMjM1LCAxNDQsIDExLCAxMzksIDQsIDIzNSwgMjMsIDExLCAKLSAgICAxMzksIDQsIDE1NiwgMTEsIDEzOSwgNCwgMTkzLCAxMSwgMTM5LCA0LCAyMzAsIDI1LCAxMSwgMTM5LCA0LCA3NiwgMTEsIAotICAgIDEzOSwgNCwgMjI2LCAxMDUsIDExLCAxMzksIDQsIDIyNCwgOTYsIDExLCAxMzksIDQsIDE1MywgMTEsIDEzOSwgNCwgMjIyLCAKLSAgICA5MSwgMTEsIDEzOSwgNCwgMjE3LCAxNTIsIDExLCAxMzksIDQsIDcwLCAxMSwgMTM5LCA0LCAyMTQsIDEwNSwgMTEsIDEzOSwgCi0gICAgNCwgMjEyLCA5OCwgMTEsIDEzOSwgNCwgMjExLCAxNzgsIDExLCAxMzksIDQsIDIxMSwgMTE3LCAxMSwgMTM5LCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDIzLCAxMzMsIDYsIDYxLCAxMSwgMjMsIDEzMywgNiwgMjUzLCAxNTgsIDExLCAyMywgMTMzLCA2LCAyNTEsIAotICAgIDY2LCAxMSwgMjMsIDEzMywgNiwgMjQ5LCA2MCwgMTEsIDIzLCAxMzMsIDYsIDc1LCAxMSwgMjMsIDEzMywgNiwgMjQ1LCA2LCAKLSAgICAxMSwgMjMsIDEzMywgNiwgMjQzLCAyMDIsIDExLCAyMywgMTMzLCA2LCAyNDIsIDYwLCAxMSwgMjMsIDEzMywgNiwgNzMsIAotICAgIDExLCAyMywgMTMzLCA2LCAyMzUsIDE0NCwgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMjMsIDExLCAyMywgMTMzLCA2LCAxNTYsIAotICAgIDExLCAyMywgMTMzLCA2LCAxOTMsIDExLCAyMywgMTMzLCA2LCAyMzAsIDI1LCAxMSwgMjMsIDEzMywgNiwgNzYsIDExLCAyMywgCi0gICAgMTMzLCA2LCAyMjYsIDEwNSwgMTEsIDIzLCAxMzMsIDYsIDIyNCwgOTYsIDExLCAyMywgMTMzLCA2LCAxNTMsIDExLCAyMywgCi0gICAgMTMzLCA2LCAyMjIsIDkxLCAxMSwgMjMsIDEzMywgNiwgMjE3LCAxNTIsIDExLCAyMywgMTMzLCA2LCA3MCwgMTEsIDIzLCAKLSAgICAxMzMsIDYsIDIxNCwgMTA1LCAxMSwgMjMsIDEzMywgNiwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDYsIDIxMSwgMTc4LCAxMSwgCi0gICAgMjMsIDEzMywgNiwgMjExLCAxMTcsIDExLCAyMywgMTMzLCA2LCAyMTAsIDE1OSwgMTEsIDIzLCAxMzMsIDQsIDYxLCAxMSwgCi0gICAgMjMsIDEzMywgNCwgMjUzLCAxNTgsIDExLCAyMywgMTMzLCA0LCAyNTEsIDY2LCAxMSwgMjMsIDEzMywgNCwgMjQ5LCA2MCwgCi0gICAgMTEsIDIzLCAxMzMsIDQsIDc1LCAxMSwgMjMsIDEzMywgNCwgMjQ1LCA2LCAxMSwgMjMsIDEzMywgNCwgMjQzLCAyMDIsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyNDIsIDYwLCAxMSwgMjMsIDEzMywgNCwgNzMsIDExLCAyMywgMTMzLCA0LCAyMzUsIDE0NCwgMTEsIAotICAgIDIzLCAxMzMsIDQsIDIzNSwgMjMsIDExLCAyMywgMTMzLCA0LCAxNTYsIDExLCAyMywgMTMzLCA0LCAxOTMsIDExLCAyMywgCi0gICAgMTMzLCA0LCAyMzAsIDI1LCAxMSwgMjMsIDEzMywgNCwgNzYsIDExLCAyMywgMTMzLCA0LCAyMjYsIDEwNSwgMTEsIDIzLCAKLSAgICAxMzMsIDQsIDIyNCwgOTYsIDExLCAyMywgMTMzLCA0LCAxNTMsIDExLCAyMywgMTMzLCA0LCAyMjIsIDkxLCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjE3LCAxNTIsIDExLCAyMywgMTMzLCA0LCA3MCwgMTEsIDIzLCAxMzMsIDQsIDIxNCwgMTA1LCAxMSwgMjMsIAotICAgIDEzMywgNCwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDEzMywgNCwgMjExLCAxMTcsIDExLCAKLSAgICAyMywgMTMzLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCA2LCA2MSwgMTEsIDM1LCA2LCAyNTMsIDE1OCwgMTEsIDM1LCA2LCAyNTEsIAotICAgIDY2LCAxMSwgMzUsIDYsIDI0OSwgNjAsIDExLCAzNSwgNiwgNzUsIDExLCAzNSwgNiwgMjQ1LCA2LCAxMSwgMzUsIDYsIDI0MywgCi0gICAgMjAyLCAxMSwgMzUsIDYsIDI0MiwgNjAsIDExLCAzNSwgNiwgNzMsIDExLCAzNSwgNiwgMjM1LCAxNDQsIDExLCAzNSwgNiwgCi0gICAgMjM1LCAyMywgMTEsIDM1LCA2LCAxNTYsIDExLCAzNSwgNiwgMTkzLCAxMSwgMzUsIDYsIDIzMCwgMjUsIDExLCAzNSwgNiwgCi0gICAgNzYsIDExLCAzNSwgNiwgMjI2LCAxMDUsIDExLCAzNSwgNiwgMjI0LCA5NiwgMTEsIDM1LCA2LCAxNTMsIDExLCAzNSwgNiwgCi0gICAgMjIyLCA5MSwgMTEsIDM1LCA2LCAyMTcsIDE1MiwgMTEsIDM1LCA2LCA3MCwgMTEsIDM1LCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAKLSAgICA2LCAyMTIsIDk4LCAxMSwgMzUsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzUsIDQsIDYxLCAxMSwgMzUsIDQsIDI1MywgMTU4LCAxMSwgMzUsIDQsIDI1MSwgNjYsIDExLCAzNSwgNCwgCi0gICAgMjQ5LCA2MCwgMTEsIDM1LCA0LCA3NSwgMTEsIDM1LCA0LCAyNDUsIDYsIDExLCAzNSwgNCwgMjQzLCAyMDIsIDExLCAzNSwgCi0gICAgNCwgMjQyLCA2MCwgMTEsIDM1LCA0LCA3MywgMTEsIDM1LCA0LCAyMzUsIDE0NCwgMTEsIDM1LCA0LCAyMzUsIDIzLCAxMSwgCi0gICAgMzUsIDQsIDE1NiwgMTEsIDM1LCA0LCAxOTMsIDExLCAzNSwgNCwgMjMwLCAyNSwgMTEsIDM1LCA0LCA3NiwgMTEsIDM1LCA0LCAKLSAgICAyMjYsIDEwNSwgMTEsIDM1LCA0LCAyMjQsIDk2LCAxMSwgMzUsIDQsIDE1MywgMTEsIDM1LCA0LCAyMjIsIDkxLCAxMSwgMzUsIAotICAgIDQsIDIxNywgMTUyLCAxMSwgMzUsIDQsIDcwLCAxMSwgMzUsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDQsIDIxMiwgOTgsIDExLCAKLSAgICAzNSwgNCwgMjExLCAxNzgsIDExLCAzNSwgNCwgMjExLCAxMTcsIDExLCAzNSwgNCwgMjEwLCAxNTksIDExLCAzNSwgMjMsIDYsIAotICAgIDYxLCAxMSwgMzUsIDIzLCA2LCAyNTMsIDE1OCwgMTEsIDM1LCAyMywgNiwgMjUxLCA2NiwgMTEsIDM1LCAyMywgNiwgMjQ5LCAKLSAgICA2MCwgMTEsIDM1LCAyMywgNiwgNzUsIDExLCAzNSwgMjMsIDYsIDI0NSwgNiwgMTEsIDM1LCAyMywgNiwgMjQzLCAyMDIsIAotICAgIDExLCAzNSwgMjMsIDYsIDI0MiwgNjAsIDExLCAzNSwgMjMsIDYsIDczLCAxMSwgMzUsIDIzLCA2LCAyMzUsIDE0NCwgMTEsIAotICAgIDM1LCAyMywgNiwgMjM1LCAyMywgMTEsIDM1LCAyMywgNiwgMTU2LCAxMSwgMzUsIDIzLCA2LCAxOTMsIDExLCAzNSwgMjMsIAotICAgIDYsIDIzMCwgMjUsIDExLCAzNSwgMjMsIDYsIDc2LCAxMSwgMzUsIDIzLCA2LCAyMjYsIDEwNSwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjI0LCA5NiwgMTEsIDM1LCAyMywgNiwgMTUzLCAxMSwgMzUsIDIzLCA2LCAyMjIsIDkxLCAxMSwgMzUsIDIzLCA2LCAyMTcsIAotICAgIDE1MiwgMTEsIDM1LCAyMywgNiwgNzAsIDExLCAzNSwgMjMsIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCA2LCAyMTIsIDk4LCAKLSAgICAxMSwgMzUsIDIzLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgNiwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDYsIDIxMCwgCi0gICAgMTU5LCAxMSwgMzUsIDIzLCA0LCA2MSwgMTEsIDM1LCAyMywgNCwgMjUzLCAxNTgsIDExLCAzNSwgMjMsIDQsIDI1MSwgNjYsIAotICAgIDExLCAzNSwgMjMsIDQsIDI0OSwgNjAsIDExLCAzNSwgMjMsIDQsIDc1LCAxMSwgMzUsIDIzLCA0LCAyNDUsIDYsIDExLCAzNSwgCi0gICAgMjMsIDQsIDI0MywgMjAyLCAxMSwgMzUsIDIzLCA0LCAyNDIsIDYwLCAxMSwgMzUsIDIzLCA0LCA3MywgMTEsIDM1LCAyMywgCi0gICAgNCwgMjM1LCAxNDQsIDExLCAzNSwgMjMsIDQsIDIzNSwgMjMsIDExLCAzNSwgMjMsIDQsIDE1NiwgMTEsIDM1LCAyMywgNCwgCi0gICAgMTkzLCAxMSwgMzUsIDIzLCA0LCAyMzAsIDI1LCAxMSwgMzUsIDIzLCA0LCA3NiwgMTEsIDM1LCAyMywgNCwgMjI2LCAxMDUsIAotICAgIDExLCAzNSwgMjMsIDQsIDIyNCwgOTYsIDExLCAzNSwgMjMsIDQsIDE1MywgMTEsIDM1LCAyMywgNCwgMjIyLCA5MSwgMTEsIAotICAgIDM1LCAyMywgNCwgMjE3LCAxNTIsIDExLCAzNSwgMjMsIDQsIDcwLCAxMSwgMzUsIDIzLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAKLSAgICAyMywgNCwgMjEyLCA5OCwgMTEsIDM1LCAyMywgNCwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTE3LCAxMSwgMzUsIAotICAgIDIzLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCAzMiwgNiwgNjEsIDExLCAzNSwgMzIsIDYsIDI1MywgMTU4LCAxMSwgMzUsIDMyLCAKLSAgICA2LCAyNTEsIDY2LCAxMSwgMzUsIDMyLCA2LCAyNDksIDYwLCAxMSwgMzUsIDMyLCA2LCA3NSwgMTEsIDM1LCAzMiwgNiwgCi0gICAgMjQ1LCA2LCAxMSwgMzUsIDMyLCA2LCAyNDMsIDIwMiwgMTEsIDM1LCAzMiwgNiwgMjQyLCA2MCwgMTEsIDM1LCAzMiwgNiwgCi0gICAgNzMsIDExLCAzNSwgMzIsIDYsIDIzNSwgMTQ0LCAxMSwgMzUsIDMyLCA2LCAyMzUsIDIzLCAxMSwgMzUsIDMyLCA2LCAxNTYsIAotICAgIDExLCAzNSwgMzIsIDYsIDE5MywgMTEsIDM1LCAzMiwgNiwgMjMwLCAyNSwgMTEsIDM1LCAzMiwgNiwgNzYsIDExLCAzNSwgCi0gICAgMzIsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDMyLCA2LCAyMjQsIDk2LCAxMSwgMzUsIDMyLCA2LCAxNTMsIDExLCAzNSwgMzIsIAotICAgIDYsIDIyMiwgOTEsIDExLCAzNSwgMzIsIDYsIDIxNywgMTUyLCAxMSwgMzUsIDMyLCA2LCA3MCwgMTEsIDM1LCAzMiwgNiwgCi0gICAgMjE0LCAxMDUsIDExLCAzNSwgMzIsIDYsIDIxMiwgOTgsIDExLCAzNSwgMzIsIDYsIDIxMSwgMTc4LCAxMSwgMzUsIDMyLCA2LCAKLSAgICAyMTEsIDExNywgMTEsIDM1LCAzMiwgNiwgMjEwLCAxNTksIDExLCAzNSwgMzIsIDQsIDYxLCAxMSwgMzUsIDMyLCA0LCAyNTMsIAotICAgIDE1OCwgMTEsIDM1LCAzMiwgNCwgMjUxLCA2NiwgMTEsIDM1LCAzMiwgNCwgMjQ5LCA2MCwgMTEsIDM1LCAzMiwgNCwgNzUsIAotICAgIDExLCAzNSwgMzIsIDQsIDI0NSwgNiwgMTEsIDM1LCAzMiwgNCwgMjQzLCAyMDIsIDExLCAzNSwgMzIsIDQsIDI0MiwgNjAsIAotICAgIDExLCAzNSwgMzIsIDQsIDczLCAxMSwgMzUsIDMyLCA0LCAyMzUsIDE0NCwgMTEsIDM1LCAzMiwgNCwgMjM1LCAyMywgMTEsIAotICAgIDM1LCAzMiwgNCwgMTU2LCAxMSwgMzUsIDMyLCA0LCAxOTMsIDExLCAzNSwgMzIsIDQsIDIzMCwgMjUsIDExLCAzNSwgMzIsIAotICAgIDQsIDc2LCAxMSwgMzUsIDMyLCA0LCAyMjYsIDEwNSwgMTEsIDM1LCAzMiwgNCwgMjI0LCA5NiwgMTEsIDM1LCAzMiwgNCwgCi0gICAgMTUzLCAxMSwgMzUsIDMyLCA0LCAyMjIsIDkxLCAxMSwgMzUsIDMyLCA0LCAyMTcsIDE1MiwgMTEsIDM1LCAzMiwgNCwgNzAsIAotICAgIDExLCAzNSwgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDMyLCA0LCAyMTEsIDE3OCwgCi0gICAgMTEsIDM1LCAzMiwgNCwgMjExLCAxMTcsIDExLCAzNSwgMzIsIDQsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCAzMiwgNiwgNjEsIAotICAgIDExLCAzNSwgMjMsIDMyLCA2LCAyNTMsIDE1OCwgMTEsIDM1LCAyMywgMzIsIDYsIDI1MSwgNjYsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA2LCAyNDksIDYwLCAxMSwgMzUsIDIzLCAzMiwgNiwgNzUsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDYsIDExLCAzNSwgMjMsIAotICAgIDMyLCA2LCAyNDMsIDIwMiwgMTEsIDM1LCAyMywgMzIsIDYsIDI0MiwgNjAsIDExLCAzNSwgMjMsIDMyLCA2LCA3MywgMTEsIAotICAgIDM1LCAyMywgMzIsIDYsIDIzNSwgMTQ0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjM1LCAyMywgMTEsIDM1LCAyMywgMzIsIDYsIAotICAgIDE1NiwgMTEsIDM1LCAyMywgMzIsIDYsIDE5MywgMTEsIDM1LCAyMywgMzIsIDYsIDIzMCwgMjUsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA2LCA3NiwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI0LCA5NiwgMTEsIDM1LCAKLSAgICAyMywgMzIsIDYsIDE1MywgMTEsIDM1LCAyMywgMzIsIDYsIDIyMiwgOTEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDE1MiwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDYsIDcwLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAyMTIsIDk4LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTEsIDExNywgMTEsIAotICAgIDM1LCAyMywgMzIsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCAzMiwgNCwgNjEsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTMsIAotICAgIDE1OCwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MSwgNjYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDksIDYwLCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgNzUsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDMsIDIwMiwgMTEsIAotICAgIDM1LCAyMywgMzIsIDQsIDI0MiwgNjAsIDExLCAzNSwgMjMsIDMyLCA0LCA3MywgMTEsIDM1LCAyMywgMzIsIDQsIDIzNSwgCi0gICAgMTQ0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAyMywgMTEsIDM1LCAyMywgMzIsIDQsIDE1NiwgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDE5MywgMTEsIDM1LCAyMywgMzIsIDQsIDIzMCwgMjUsIDExLCAzNSwgMjMsIDMyLCA0LCA3NiwgMTEsIDM1LCAyMywgCi0gICAgMzIsIDQsIDIyNiwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI0LCA5NiwgMTEsIDM1LCAyMywgMzIsIDQsIDE1MywgMTEsIAotICAgIDM1LCAyMywgMzIsIDQsIDIyMiwgOTEsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTcsIDE1MiwgMTEsIDM1LCAyMywgMzIsIDQsIAotICAgIDcwLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgMjExLCAxNzgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDExNywgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgCi0gICAgMTU5LCAxMSwgMjMwLCAxMzgsIDYsIDYxLCAxMSwgMjMwLCAxMzgsIDYsIDI1MywgMTU4LCAxMSwgMjMwLCAxMzgsIDYsIAotICAgIDI1MSwgNjYsIDExLCAyMzAsIDEzOCwgNiwgMjQ5LCA2MCwgMTEsIDIzMCwgMTM4LCA2LCA3NSwgMTEsIDIzMCwgMTM4LCA2LCAKLSAgICAyNDUsIDYsIDExLCAyMzAsIDEzOCwgNiwgMjQzLCAyMDIsIDExLCAyMzAsIDEzOCwgNiwgMjQyLCA2MCwgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCA3MywgMTEsIDIzMCwgMTM4LCA2LCAyMzUsIDE0NCwgMTEsIDIzMCwgMTM4LCA2LCAyMzUsIDIzLCAxMSwgMjMwLCAKLSAgICAxMzgsIDYsIDE1NiwgMTEsIDIzMCwgMTM4LCA2LCAxOTMsIDExLCAyMzAsIDEzOCwgNiwgMjMwLCAyNSwgMTEsIDIzMCwgCi0gICAgMTM4LCA2LCA3NiwgMTEsIDIzMCwgMTM4LCA2LCAyMjYsIDEwNSwgMTEsIDIzMCwgMTM4LCA2LCAyMjQsIDk2LCAxMSwgMjMwLCAKLSAgICAxMzgsIDYsIDE1MywgMTEsIDIzMCwgMTM4LCA2LCAyMjIsIDkxLCAxMSwgMjMwLCAxMzgsIDYsIDIxNywgMTUyLCAxMSwgCi0gICAgMjMwLCAxMzgsIDYsIDcwLCAxMSwgMjMwLCAxMzgsIDYsIDIxNCwgMTA1LCAxMSwgMjMwLCAxMzgsIDYsIDIxMiwgOTgsIDExLCAKLSAgICAyMzAsIDEzOCwgNiwgMjExLCAxNzgsIDExLCAyMzAsIDEzOCwgNiwgMjExLCAxMTcsIDExLCAyMzAsIDEzOCwgNiwgMjEwLCAKLSAgICAxNTksIDExLCAyMzAsIDEzOCwgNCwgNjEsIDExLCAyMzAsIDEzOCwgNCwgMjUzLCAxNTgsIDExLCAyMzAsIDEzOCwgNCwgCi0gICAgMjUxLCA2NiwgMTEsIDIzMCwgMTM4LCA0LCAyNDksIDYwLCAxMSwgMjMwLCAxMzgsIDQsIDc1LCAxMSwgMjMwLCAxMzgsIDQsIAotICAgIDI0NSwgNiwgMTEsIDIzMCwgMTM4LCA0LCAyNDMsIDIwMiwgMTEsIDIzMCwgMTM4LCA0LCAyNDIsIDYwLCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDczLCAxMSwgMjMwLCAxMzgsIDQsIDIzNSwgMTQ0LCAxMSwgMjMwLCAxMzgsIDQsIDIzNSwgMjMsIDExLCAyMzAsIAotICAgIDEzOCwgNCwgMTU2LCAxMSwgMjMwLCAxMzgsIDQsIDE5MywgMTEsIDIzMCwgMTM4LCA0LCAyMzAsIDI1LCAxMSwgMjMwLCAKLSAgICAxMzgsIDQsIDc2LCAxMSwgMjMwLCAxMzgsIDQsIDIyNiwgMTA1LCAxMSwgMjMwLCAxMzgsIDQsIDIyNCwgOTYsIDExLCAyMzAsIAotICAgIDEzOCwgNCwgMTUzLCAxMSwgMjMwLCAxMzgsIDQsIDIyMiwgOTEsIDExLCAyMzAsIDEzOCwgNCwgMjE3LCAxNTIsIDExLCAKLSAgICAyMzAsIDEzOCwgNCwgNzAsIDExLCAyMzAsIDEzOCwgNCwgMjE0LCAxMDUsIDExLCAyMzAsIDEzOCwgNCwgMjEyLCA5OCwgMTEsIAotICAgIDIzMCwgMTM4LCA0LCAyMTEsIDE3OCwgMTEsIDIzMCwgMTM4LCA0LCAyMTEsIDExNywgMTEsIDIzMCwgMTM4LCA0LCAyMTAsIAotICAgIDE1OSwgMTEsIDMyLCA0LCAyNDcsIDExOSwgNzMsIDExLCAzMiwgNCwgMjQ3LCAxMTksIDIzNSwgMTQ0LCAxMSwgMjMsIDYsIAotICAgIDI1NCwgMTQzLCAxMSwgMjMsIDYsIDI1MiwgMjYsIDExLCAyMywgNiwgMjQzLCAxMDcsIDExLCAyMywgNiwgMjQ4LCA1NCwgCi0gICAgMTEsIDIzLCA2LCAyNDUsIDEwMCwgMTEsIDIzLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDYsIDI0NSwgNjMsIDExLCAyMywgNiwgCi0gICAgMjE2LCAxNzksIDExLCAyMywgNiwgMjM1LCAxODUsIDExLCAyMywgNiwgMjM0LCAyMjIsIDExLCAyMywgNiwgMjMzLCA5OCwgCi0gICAgMTEsIDIzLCA2LCAyMzAsIDEwMiwgMTEsIDIzLCA2LCAyMjcsIDIzNywgMTEsIDIzLCA2LCAyMTEsIDE1NywgMTEsIDIzLCA2LCAKLSAgICAyMjYsIDE5OSwgMTEsIDIzLCA2LCAyMjUsIDEwOCwgMTEsIDIzLCA2LCAyMjMsIDM3LCAxMSwgMjMsIDYsIDIxNiwgMTgwLCAKLSAgICA4NywgMTEsIDIzLCA2LCAyMTksIDE3NywgMTEsIDIzLCA2LCAyMTcsIDQxLCAxMSwgMjMsIDYsIDIxNCwgMTU3LCAxMSwgMjMsIAotICAgIDYsIDIyNSwgMTMzLCAxMSwgMjMsIDYsIDI1MCwgMTEwLCAxMSwgMjMsIDYsIDIyNCwgMTYxLCAxMSwgMjMsIDYsIDIyNiwgCi0gICAgMjAxLCAxMSwgMjMsIDIyOSwgMjIxLCAxMSwgMjMsIDQsIDI1NCwgMTQzLCAxMSwgMjMsIDQsIDI1MiwgMjYsIDExLCAyMywgCi0gICAgNCwgMjQzLCAxMDcsIDExLCAyMywgNCwgMjQ4LCA1NCwgMTEsIDIzLCA0LCAyNDUsIDEwMCwgMTEsIDIzLCA0LCAyMTAsIDg1LCAKLSAgICAxMSwgMjMsIDQsIDI0NSwgNjMsIDExLCAyMywgNCwgMjE2LCAxNzksIDExLCAyMywgNCwgMjM1LCAxODUsIDExLCAyMywgNCwgCi0gICAgMjM0LCAyMjIsIDExLCAyMywgNCwgMjMzLCA5OCwgMTEsIDIzLCA0LCAyMzAsIDEwMiwgMTEsIDIzLCA0LCAyMjcsIDIzNywgCi0gICAgMTEsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDIzLCA0LCAyMjYsIDE5OSwgMTEsIDIzLCA0LCAyMjUsIDEwOCwgMTEsIDIzLCA0LCAKLSAgICAyMjMsIDM3LCAxMSwgMjMsIDQsIDQwLCAyMTksIDE3NywgMTEsIDIzLCA0LCAyMTksIDE3NywgMTEsIDIzLCA0LCAyMTcsIAotICAgIDQxLCAxMSwgMjMsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIDQsIDIyNSwgMTMzLCAxMSwgMjMsIDQsIDI1MCwgMTEwLCAxMSwgCi0gICAgMjMsIDQsIDIyNCwgMTYxLCAxMSwgMjMsIDQsIDIyNiwgMjAxLCAxMSwgMjMsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDIzLCAKLSAgICAyNDUsIDEwMSwgODcsIDExLCAyMywgMjE2LCAxODAsIDg3LCAxMSwgMjMsIDIzNCwgMjIzLCA4NywgMTEsIDIzLCAyMjUsIAotICAgIDEzNCwgODcsIDExLCAyMywgMjIzLCAzOCwgODcsIDExLCAyMywgMjI1LCAxMDksIDg3LCAxMSwgMzIsIDYsIDI1NCwgMTQzLCAKLSAgICAxMSwgMzIsIDYsIDI1MiwgMjYsIDExLCAzMiwgNiwgMjQzLCAxMDcsIDExLCAzMiwgNiwgMjQ4LCA1NCwgMTEsIDMyLCA2LCAKLSAgICAyNDUsIDEwMCwgMTEsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMzIsIDYsIDI0NSwgNjMsIDExLCAzMiwgNiwgMjE2LCAxNzksIAotICAgIDExLCAzMiwgNiwgMjM1LCAxODUsIDExLCAzMiwgNiwgMjM0LCAyMjIsIDExLCAzMiwgNiwgMjMzLCA5OCwgMTEsIDMyLCA2LCAKLSAgICAyMzAsIDEwMiwgMTEsIDMyLCA2LCAyMjcsIDIzNywgMTEsIDMyLCA2LCAyMTEsIDE1NywgMTEsIDMyLCA2LCAyMjYsIDE5OSwgCi0gICAgMTEsIDMyLCA2LCAyMjUsIDEwOCwgMTEsIDMyLCA2LCAyMjMsIDM3LCAxMSwgMzIsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDMyLCAKLSAgICA2LCAyMTksIDE3NywgMTEsIDMyLCA2LCAyMTcsIDQxLCAxMSwgMzIsIDYsIDIxNCwgMTU3LCAxMSwgMzIsIDYsIDIyNSwgCi0gICAgMTMzLCAxMSwgMzIsIDYsIDI1MCwgMTEwLCAxMSwgMzIsIDYsIDIyNCwgMTYxLCAxMSwgMzIsIDYsIDIyNiwgMjAxLCAxMSwgCi0gICAgMzIsIDIyOSwgMjIxLCAxMSwgMzIsIDQsIDI1NCwgMTQzLCAxMSwgMzIsIDQsIDI1MiwgMjYsIDExLCAzMiwgNCwgMjQzLCAKLSAgICAxMDcsIDExLCAzMiwgNCwgMjQ4LCA1NCwgMTEsIDMyLCA0LCAyNDUsIDEwMCwgMTEsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMzIsIAotICAgIDQsIDI0NSwgNjMsIDExLCAzMiwgNCwgMjE2LCAxNzksIDExLCAzMiwgNCwgMjM1LCAxODUsIDExLCAzMiwgNCwgMjM0LCAKLSAgICAyMjIsIDExLCAzMiwgNCwgMjMzLCA5OCwgMTEsIDMyLCA0LCAyMzAsIDEwMiwgMTEsIDMyLCA0LCAyMjcsIDIzNywgMTEsIAotICAgIDMyLCA0LCAyMTEsIDE1NywgMTEsIDMyLCA0LCAyMjYsIDE5OSwgMTEsIDMyLCA0LCAyMjUsIDEwOCwgMTEsIDMyLCA0LCAKLSAgICAyMjMsIDM3LCAxMSwgMzIsIDQsIDQwLCAyMTksIDE3NywgMTEsIDMyLCA0LCAyMTksIDE3NywgMTEsIDMyLCA0LCAyMTcsIAotICAgIDQxLCAxMSwgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMzIsIDQsIDIyNSwgMTMzLCAxMSwgMzIsIDQsIDI1MCwgMTEwLCAxMSwgCi0gICAgMzIsIDQsIDIyNCwgMTYxLCAxMSwgMzIsIDQsIDIyNiwgMjAxLCAxMSwgMzIsIDIyNSwgMjUzLCAyNDcsIDIzMywgMTEsIDMyLCAKLSAgICAyNDUsIDEwMSwgODcsIDExLCAzMiwgMjE2LCAxODAsIDg3LCAxMSwgMzIsIDIzNCwgMjIzLCA4NywgMTEsIDMyLCAyMjUsIAotICAgIDEzNCwgODcsIDExLCAzMiwgMjIzLCAzOCwgODcsIDExLCAzMiwgMjI1LCAxMDksIDg3LCAxMSwgMjMsIDMyLCA2LCAyNTQsIAotICAgIDE0MywgMTEsIDIzLCAzMiwgNiwgMjUyLCAyNiwgMTEsIDIzLCAzMiwgNiwgMjQzLCAxMDcsIDExLCAyMywgMzIsIDYsIDI0OCwgCi0gICAgNTQsIDExLCAyMywgMzIsIDYsIDI0NSwgMTAwLCAxMSwgMjMsIDMyLCA2LCAyMTAsIDg1LCAxMSwgMjMsIDMyLCA2LCAyNDUsIAotICAgIDYzLCAxMSwgMjMsIDMyLCA2LCAyMTYsIDE3OSwgMTEsIDIzLCAzMiwgNiwgMjM1LCAxODUsIDExLCAyMywgMzIsIDYsIDIzNCwgCi0gICAgMjIyLCAxMSwgMjMsIDMyLCA2LCAyMzMsIDk4LCAxMSwgMjMsIDMyLCA2LCAyMzAsIDEwMiwgMTEsIDIzLCAzMiwgNiwgMjI3LCAKLSAgICAyMzcsIDExLCAyMywgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMjMsIDMyLCA2LCAyMjYsIDE5OSwgMTEsIDIzLCAzMiwgNiwgCi0gICAgMjI1LCAxMDgsIDExLCAyMywgMzIsIDYsIDIyMywgMzcsIDExLCAyMywgMzIsIDYsIDIxNiwgMTgwLCA4NywgMTEsIDIzLCAKLSAgICAzMiwgNiwgMjE5LCAxNzcsIDExLCAyMywgMzIsIDYsIDIxNywgNDEsIDExLCAyMywgMzIsIDYsIDIxNCwgMTU3LCAxMSwgMjMsIAotICAgIDMyLCA2LCAyMjUsIDEzMywgMTEsIDIzLCAzMiwgNiwgMjUwLCAxMTAsIDExLCAyMywgMzIsIDYsIDIyNCwgMTYxLCAxMSwgCi0gICAgMjMsIDMyLCA2LCAyMjYsIDIwMSwgMTEsIDIzLCAzMiwgMjI5LCAyMjEsIDExLCAyMywgMzIsIDQsIDI1NCwgMTQzLCAxMSwgCi0gICAgMjMsIDMyLCA0LCAyNTIsIDI2LCAxMSwgMjMsIDMyLCA0LCAyNDMsIDEwNywgMTEsIDIzLCAzMiwgNCwgMjQ4LCA1NCwgMTEsIAotICAgIDIzLCAzMiwgNCwgMjQ1LCAxMDAsIDExLCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAyMywgMzIsIDQsIDI0NSwgNjMsIDExLCAKLSAgICAyMywgMzIsIDQsIDIxNiwgMTc5LCAxMSwgMjMsIDMyLCA0LCAyMzUsIDE4NSwgMTEsIDIzLCAzMiwgNCwgMjM0LCAyMjIsIAotICAgIDExLCAyMywgMzIsIDQsIDIzMywgOTgsIDExLCAyMywgMzIsIDQsIDIzMCwgMTAyLCAxMSwgMjMsIDMyLCA0LCAyMjcsIDIzNywgCi0gICAgMTEsIDIzLCAzMiwgNCwgMjExLCAxNTcsIDExLCAyMywgMzIsIDQsIDIyNiwgMTk5LCAxMSwgMjMsIDMyLCA0LCAyMjUsIAotICAgIDEwOCwgMTEsIDIzLCAzMiwgNCwgMjIzLCAzNywgMTEsIDIzLCAzMiwgNCwgNDAsIDIxOSwgMTc3LCAxMSwgMjMsIDMyLCA0LCAKLSAgICAyMTksIDE3NywgMTEsIDIzLCAzMiwgNCwgMjE3LCA0MSwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAyMywgMzIsIDQsIAotICAgIDIyNSwgMTMzLCAxMSwgMjMsIDMyLCA0LCAyNTAsIDExMCwgMTEsIDIzLCAzMiwgNCwgMjI0LCAxNjEsIDExLCAyMywgMzIsIAotICAgIDQsIDIyNiwgMjAxLCAxMSwgMjMsIDMyLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAyMywgMzIsIDI0NSwgMTAxLCA4NywgCi0gICAgMTEsIDIzLCAzMiwgMjE2LCAxODAsIDg3LCAxMSwgMjMsIDMyLCAyMzQsIDIyMywgODcsIDExLCAyMywgMzIsIDIyNSwgMTM0LCAKLSAgICA4NywgMTEsIDIzLCAzMiwgMjIzLCAzOCwgODcsIDExLCAyMywgMzIsIDIyNSwgMTA5LCA4NywgMTEsIDM1LCAyMywgNiwgCi0gICAgMjU0LCAxNDMsIDExLCAzNSwgMjMsIDYsIDI1MiwgMjYsIDExLCAzNSwgMjMsIDYsIDI0MywgMTA3LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyNDgsIDU0LCAxMSwgMzUsIDIzLCA2LCAyNDUsIDEwMCwgMTEsIDM1LCAyMywgNiwgMjEwLCA4NSwgMTEsIDM1LCAyMywgNiwgCi0gICAgMjQ1LCA2MywgMTEsIDM1LCAyMywgNiwgMjE2LCAxNzksIDExLCAzNSwgMjMsIDYsIDIzNSwgMTg1LCAxMSwgMzUsIDIzLCA2LCAKLSAgICAyMzQsIDIyMiwgMTEsIDM1LCAyMywgNiwgMjMzLCA5OCwgMTEsIDM1LCAyMywgNiwgMjMwLCAxMDIsIDExLCAzNSwgMjMsIDYsIAotICAgIDIyNywgMjM3LCAxMSwgMzUsIDIzLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgNiwgMjI2LCAxOTksIDExLCAzNSwgMjMsIAotICAgIDYsIDIyNSwgMTA4LCAxMSwgMzUsIDIzLCA2LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCA2LCAyMTYsIDE4MCwgODcsIDExLCAzNSwgCi0gICAgMjMsIDYsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCA2LCAyMTcsIDQxLCAxMSwgMzUsIDIzLCA2LCAyMTQsIDE1NywgMTEsIDM1LCAKLSAgICAyMywgNiwgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDYsIDI1MCwgMTEwLCAxMSwgMzUsIDIzLCA2LCAyMjQsIDE2MSwgMTEsIAotICAgIDM1LCAyMywgNiwgMjI2LCAyMDEsIDExLCAzNSwgMjMsIDIyOSwgMjIxLCAxMSwgMzUsIDIzLCA0LCAyNTQsIDE0MywgMTEsIAotICAgIDM1LCAyMywgNCwgMjUyLCAyNiwgMTEsIDM1LCAyMywgNCwgMjQzLCAxMDcsIDExLCAzNSwgMjMsIDQsIDI0OCwgNTQsIDExLCAKLSAgICAzNSwgMjMsIDQsIDI0NSwgMTAwLCAxMSwgMzUsIDIzLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCA0LCAyNDUsIDYzLCAxMSwgCi0gICAgMzUsIDIzLCA0LCAyMTYsIDE3OSwgMTEsIDM1LCAyMywgNCwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDQsIDIzNCwgMjIyLCAKLSAgICAxMSwgMzUsIDIzLCA0LCAyMzMsIDk4LCAxMSwgMzUsIDIzLCA0LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgNCwgMjI3LCAyMzcsIAotICAgIDExLCAzNSwgMjMsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCA0LCAyMjYsIDE5OSwgMTEsIDM1LCAyMywgNCwgMjI1LCAKLSAgICAxMDgsIDExLCAzNSwgMjMsIDQsIDIyMywgMzcsIDExLCAzNSwgMjMsIDQsIDQwLCAyMTksIDE3NywgMTEsIDM1LCAyMywgNCwgCi0gICAgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDQsIDIxNywgNDEsIDExLCAzNSwgMjMsIDQsIDIxNCwgMTU3LCAxMSwgMzUsIDIzLCA0LCAKLSAgICAyMjUsIDEzMywgMTEsIDM1LCAyMywgNCwgMjUwLCAxMTAsIDExLCAzNSwgMjMsIDQsIDIyNCwgMTYxLCAxMSwgMzUsIDIzLCAKLSAgICA0LCAyMjYsIDIwMSwgMTEsIDM1LCAyMywgMjI1LCAyNTMsIDI0NywgMjMzLCAxMSwgMzUsIDIzLCAyNDUsIDEwMSwgODcsIAotICAgIDExLCAzNSwgMjMsIDIxNiwgMTgwLCA4NywgMTEsIDM1LCAyMywgMjM0LCAyMjMsIDg3LCAxMSwgMzUsIDIzLCAyMjUsIDEzNCwgCi0gICAgODcsIDExLCAzNSwgMjMsIDIyMywgMzgsIDg3LCAxMSwgMzUsIDIzLCAyMjUsIDEwOSwgODcsIDExLCAzNSwgMjMsIDMyLCA2LCAKLSAgICAyNTQsIDE0MywgMTEsIDM1LCAyMywgMzIsIDYsIDI1MiwgMjYsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDMsIDEwNywgMTEsIAotICAgIDM1LCAyMywgMzIsIDYsIDI0OCwgNTQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDEwMCwgMTEsIDM1LCAyMywgMzIsIDYsIAotICAgIDIxMCwgODUsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDUsIDYzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxNzksIDExLCAzNSwgCi0gICAgMjMsIDMyLCA2LCAyMzUsIDE4NSwgMTEsIDM1LCAyMywgMzIsIDYsIDIzNCwgMjIyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjMzLCAKLSAgICA5OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIzMCwgMTAyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI3LCAyMzcsIDExLCAzNSwgMjMsIAotICAgIDMyLCA2LCAyMTEsIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMTk5LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI1LCAKLSAgICAxMDgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjMsIDM3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE2LCAxODAsIDg3LCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMjE5LCAxNzcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTcsIDQxLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE0LCAKLSAgICAxNTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjUsIDEzMywgMTEsIDM1LCAyMywgMzIsIDYsIDI1MCwgMTEwLCAxMSwgMzUsIAotICAgIDIzLCAzMiwgNiwgMjI0LCAxNjEsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDIwMSwgMTEsIDM1LCAyMywgMzIsIDIyOSwgCi0gICAgMjIxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjU0LCAxNDMsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTIsIDI2LCAxMSwgMzUsIDIzLCAKLSAgICAzMiwgNCwgMjQzLCAxMDcsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDgsIDU0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCAxMDAsIAotICAgIDExLCAzNSwgMjMsIDMyLCA0LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCA2MywgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDIxNiwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAxODUsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzQsIDIyMiwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDQsIDIzMywgOTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDEwMiwgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDIyNywgMjM3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIDE5OSwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTA4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjIzLCAzNywgMTEsIDM1LCAyMywgMzIsIAotICAgIDQsIDQwLCAyMTksIDE3NywgMTEsIDM1LCAyMywgMzIsIDQsIDIxOSwgMTc3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE3LCA0MSwgCi0gICAgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI1LCAxMzMsIDExLCAzNSwgMjMsIDMyLCAKLSAgICA0LCAyNTAsIDExMCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgMTYxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAyMDEsIAotICAgIDExLCAzNSwgMjMsIDMyLCAyMjUsIDI1MywgMjQ3LCAyMzMsIDExLCAzNSwgMjMsIDMyLCAyNDUsIDEwMSwgODcsIDExLCAzNSwgCi0gICAgMjMsIDMyLCAyMTYsIDE4MCwgODcsIDExLCAzNSwgMjMsIDMyLCAyMzQsIDIyMywgODcsIDExLCAzNSwgMjMsIDMyLCAyMjUsIAotICAgIDEzNCwgODcsIDExLCAzNSwgMjMsIDMyLCAyMjMsIDM4LCA4NywgMTEsIDM1LCAyMywgMzIsIDIyNSwgMTA5LCA4NywgMTEsIAotICAgIDIzLCA2LCAyNDcsIDIyNywgMTEsIDIzLCA0LCAyNDcsIDIyNywgMTEsIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDIzLCAyMSwgCi0gICAgMTEwLCAxMSwgMjMsIDIxLCAxMDUsIDExLCAyMywgMjEsIDE1OCwgMTEsIDIzLCAyMSwgMTYxLCAxMSwgMjMsIDIxLCAxODksIAotICAgIDExLCAyMywgMjEsIDE5NCwgMTEsIDIzLCAyMSwgMTk4LCAxMSwgMjMsIDIxLCAxOTUsIDExLCAyMywgMjEsIDIwMCwgMTEsIAotICAgIDEzOSwgMjEsIDIxMCwgODYsIDExLCAxMzksIDIxLCAxMTAsIDExLCAxMzksIDIxLCAxMDUsIDExLCAxMzksIDIxLCAxNTgsIAotICAgIDExLCAxMzksIDIxLCAxNjEsIDExLCAxMzksIDIxLCAxODksIDExLCAxMzksIDIxLCAxOTQsIDExLCAxMzksIDIxLCAxOTgsIAotICAgIDExLCAxMzksIDIxLCAxOTUsIDExLCAxMzksIDIxLCAyMDAsIDExLCAzNSwgMjEsIDIxMCwgODYsIDExLCAzNSwgMjEsIDExMCwgCi0gICAgMTEsIDM1LCAyMSwgMTA1LCAxMSwgMzUsIDIxLCAxNTgsIDExLCAzNSwgMjEsIDE2MSwgMTEsIDM1LCAyMSwgMTg5LCAxMSwgCi0gICAgMzUsIDIxLCAxOTQsIDExLCAzNSwgMjEsIDE5OCwgMTEsIDM1LCAyMSwgMTk1LCAxMSwgMzUsIDIxLCAyMDAsIDExLCAzNSwgCi0gICAgMjMsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIzLCAyMSwgMTEwLCAxMSwgMzUsIDIzLCAyMSwgMTA1LCAxMSwgMzUsIDIzLCAKLSAgICAyMSwgMTU4LCAxMSwgMzUsIDIzLCAyMSwgMTYxLCAxMSwgMzUsIDIzLCAyMSwgMTg5LCAxMSwgMzUsIDIzLCAyMSwgMTk0LCAKLSAgICAxMSwgMzUsIDIzLCAyMSwgMTk4LCAxMSwgMzUsIDIzLCAyMSwgMTk1LCAxMSwgMzUsIDIzLCAyMSwgMjAwLCAxMSwgMjMwLCAKLSAgICAxMzgsIDIxLCAyMTAsIDg2LCAxMSwgMjMwLCAxMzgsIDIxLCAxMTAsIDExLCAyMzAsIDEzOCwgMjEsIDEwNSwgMTEsIDIzMCwgCi0gICAgMTM4LCAyMSwgMTU4LCAxMSwgMjMwLCAxMzgsIDIxLCAxNjEsIDExLCAyMzAsIDEzOCwgMjEsIDE4OSwgMTEsIDIzMCwgMTM4LCAKLSAgICAyMSwgMTk0LCAxMSwgMjMwLCAxMzgsIDIxLCAxOTgsIDExLCAyMzAsIDEzOCwgMjEsIDE5NSwgMTEsIDIzMCwgMTM4LCAyMSwgCi0gICAgMjAwLCAxMCwgMTEsIDI1NCwgMTcwLCAxMCwgMTEsIDI1MiwgNTQsIDEwLCAxMSwgMjM1LCAxMjMsIDEwLCAxMSwgMjQ4LCAKLSAgICAxOTUsIDEwLCAxMSwgMjEyLCAzMCwgMTAsIDExLCAyMTAsIDEwOCwgMTAsIDExLCAyNDIsIDM3LCAxMCwgMTEsIDIxNywgODAsIAotICAgIDEwLCAxMSwgMjExLCA0MywgMTAsIDExLCAyMzQsIDI1MCwgMTAsIDExLCAyMzMsIDEwMiwgMTAsIDExLCAyMzEsIDc4LCAxMCwgCi0gICAgMTEsIDIyOCwgNjIsIDEwLCAxMSwgMjIxLCAxNjYsIDEwLCAxMSwgMjU0LCAxOTYsIDEwLCAxMSwgMjQ0LCAxNDIsIDEwLCAKLSAgICAxMSwgMjIyLCAyNiwgMTAsIDExLCAyMjQsIDgxLCAxMCwgMTEsIDIyMywgOTUsIDEwLCAxMSwgMjIwLCA1OSwgMTAsIDExLCAKLSAgICAyMTcsIDcsIDEwLCAxMSwgMjE2LCAxOTIsIDEwLCAxMSwgMjM0LCAxMjksIDEwLCAxMSwgMjE2LCAyMDIsIDEwLCAxMSwgCi0gICAgMjQ4LCAyMTYsIDEwLCAxMSwgMjEwLCAxMTEsIDEwLCAxMSwgMjQyLCAyNDQsIDEwLCAxMSwgMjQ3LCAxMTksIDI1MiwgNTQsIAotICAgIDEwLCAxMSwgMjQ3LCAxMTksIDIyOCwgNjIsIDEwLCAxMSwgMjQ3LCAxMTksIDI0NCwgMTQyLCAxMCwgMTEsIDI0NywgMTE5LCAKLSAgICAyMjQsIDgxLCAxMCwgMTEsIDY1LCAyNTIsIDU0LCAxMCwgMTEsIDY1LCAyMzUsIDEyMywgMTAsIDExLCA2NSwgMjQxLCAyMTgsIAotICAgIDEwLCAxMSwgNjUsIDI0MiwgMzcsIDEwLCAxMSwgNjUsIDIxMSwgNDMsIDEwLCAxMSwgNjUsIDIzNCwgMjUwLCAxMCwgMTEsIAotICAgIDY1LCAyMzMsIDEwMiwgMTAsIDExLCA2NSwgMjMxLCA3OCwgMTAsIDExLCA2NSwgMjI4LCA2MiwgMTAsIDExLCA2NSwgMjIxLCAKLSAgICAxNjYsIDEwLCAxMSwgNjUsIDI1NCwgMTk2LCAxMCwgMTEsIDY1LCAyNDQsIDE0MiwgMTAsIDExLCA2NSwgMjIyLCAyNiwgMTAsIAotICAgIDExLCA2NSwgMjI0LCA4MSwgMTAsIDExLCA2NSwgMjIwLCA1OSwgMTAsIDExLCA2NSwgMjE3LCA3LCAxMCwgMTEsIDY1LCAKLSAgICAyMTYsIDE5MiwgMTAsIDExLCA2NSwgMjM0LCAxMjksIDEwLCAxMSwgNjUsIDI0OCwgMjE2LCAxMCwgMTEsIDY1LCAyNDIsIAotICAgIDI0NCwgMTAsIDExLCAyMTcsIDc2LCAyMzUsIDEyMywgMTAsIDExLCAyMTcsIDc2LCAyNDIsIDM3LCAxMCwgMTEsIDIxNywgCi0gICAgNzYsIDIxMSwgNDMsIDEwLCAxMSwgMjE3LCA3NiwgMjMzLCAxMDIsIDEwLCAxMSwgMjE3LCA3NiwgMjI4LCA2MiwgMTAsIDExLCAKLSAgICAyMTcsIDc2LCAyMjEsIDE2NiwgMTAsIDExLCAyMTcsIDc2LCAyNTQsIDE5NiwgMTAsIDExLCAyMTcsIDc2LCAyMjIsIDI2LCAKLSAgICAxMCwgMTEsIDIxNywgNzYsIDIyNCwgODEsIDEwLCAxMSwgMjE3LCA3NiwgMjIwLCA1OSwgMTAsIDExLCAyMTcsIDc2LCAyMzQsIAotICAgIDEyOSwgMTAsIDExLCAyMTcsIDc2LCAyNDgsIDIxNiwgMTAsIDExLCAyMTcsIDc2LCAyNDIsIDI0NCwgMTAsIDExLCAyMTcsIAotICAgIDc2LCAyNDcsIDExOSwgMjI4LCA2MiwgMTAsIDExLCAyMTcsIDc2LCAyNDcsIDExOSwgMjI0LCA4MSwgMTAsIDExLCAyMTgsIAotICAgIDExMCwgMjUyLCA1NCwgMTAsIDExLCAyMTgsIDExMCwgMjM1LCAxMjMsIDEwLCAxMSwgMjE4LCAxMTAsIDI0MSwgMjE4LCAxMCwgCi0gICAgMTEsIDIxOCwgMTEwLCAyNDIsIDM3LCAxMCwgMTEsIDIxOCwgMTEwLCAyMTcsIDgwLCAxMCwgMTEsIDIxOCwgMTEwLCAyMTEsIAotICAgIDQzLCAxMCwgMTEsIDIxOCwgMTEwLCAyMzQsIDI1MCwgMTAsIDExLCAyMTgsIDExMCwgMjMxLCA3OCwgMTAsIDExLCAyMTgsIAotICAgIDExMCwgMjI4LCA2MiwgMTAsIDExLCAyMTgsIDExMCwgMjIxLCAxNjYsIDEwLCAxMSwgMjE4LCAxMTAsIDI1NCwgMTk2LCAxMCwgCi0gICAgMTEsIDIxOCwgMTEwLCAyNDQsIDE0MiwgMTAsIDExLCAyMTgsIDExMCwgMjIyLCAyNiwgMTAsIDExLCAyMTgsIDExMCwgMjI0LCAKLSAgICA4MSwgMTAsIDExLCAyMTgsIDExMCwgMjIwLCA1OSwgMTAsIDExLCAyMTgsIDExMCwgMjE3LCA3LCAxMCwgMTEsIDIxOCwgCi0gICAgMTEwLCAyMTYsIDE5MiwgMTAsIDExLCAyMTgsIDExMCwgMjM0LCAxMjksIDEwLCAxMSwgMjE4LCAxMTAsIDI0OCwgMjE2LCAKLSAgICAxMCwgMTEsIDIxOCwgMTEwLCAyMTAsIDExMSwgMTAsIDExLCAyMTgsIDExMCwgMjQyLCAyNDQsIDEwLCAxMSwgMjE4LCAxMTAsIAotICAgIDI0NywgMTE5LCAyNTIsIDU0LCAxMCwgMTEsIDIxOCwgMTEwLCAyNDcsIDExOSwgMjQ0LCAxNDIsIDEwLCAxMSwgMjMyLCAKLSAgICAxMjIsIDI1NCwgMTcwLCAxMCwgMTEsIDIzMiwgMTIyLCAyNTIsIDU0LCAxMCwgMTEsIDIzMiwgMTIyLCAyMzUsIDEyMywgMTAsIAotICAgIDExLCAyMzIsIDEyMiwgMjQ4LCAxOTUsIDEwLCAxMSwgMjMyLCAxMjIsIDI0MSwgMjE4LCAxMCwgMTEsIDIzMiwgMTIyLCAKLSAgICAyMTIsIDMwLCAxMCwgMTEsIDIzMiwgMTIyLCAyMTAsIDEwOCwgMTAsIDExLCAyMzIsIDEyMiwgMjQyLCAzNywgMTAsIDExLCAKLSAgICAyMzIsIDEyMiwgMjE3LCA4MCwgMTAsIDExLCAyMzIsIDEyMiwgMjExLCA0MywgMTAsIDExLCAyMzIsIDEyMiwgMjMzLCAxMDIsIAotICAgIDEwLCAxMSwgMjMyLCAxMjIsIDIzMSwgNzgsIDEwLCAxMSwgMjMyLCAxMjIsIDIyOCwgNjIsIDEwLCAxMSwgMjMyLCAxMjIsIAotICAgIDIyMSwgMTY2LCAxMCwgMTEsIDIzMiwgMTIyLCAyNTQsIDE5NiwgMTAsIDExLCAyMzIsIDEyMiwgMjQ0LCAxNDIsIDEwLCAxMSwgCi0gICAgMjMyLCAxMjIsIDIyMiwgMjYsIDEwLCAxMSwgMjMyLCAxMjIsIDIyNCwgODEsIDEwLCAxMSwgMjMyLCAxMjIsIDIyMywgOTUsIAotICAgIDEwLCAxMSwgMjMyLCAxMjIsIDIyMCwgNTksIDEwLCAxMSwgMjMyLCAxMjIsIDIxNywgNywgMTAsIDExLCAyMzIsIDEyMiwgCi0gICAgMjE2LCAxOTIsIDEwLCAxMSwgMjMyLCAxMjIsIDIzNCwgMTI5LCAxMCwgMTEsIDIzMiwgMTIyLCAyMTYsIDIwMiwgMTAsIDExLCAKLSAgICAyMzIsIDEyMiwgMjQ4LCAyMTYsIDEwLCAxMSwgMjMyLCAxMjIsIDIxMCwgMTExLCAxMCwgMTEsIDIzMiwgMTIyLCAyNDIsIAotICAgIDI0NCwgMTAsIDExLCAxMzksIDI1MiwgNTQsIDEwLCAxMSwgMTM5LCAyMzUsIDEyMywgMTAsIDExLCAxMzksIDI0OCwgMTk1LCAKLSAgICAxMCwgMTEsIDEzOSwgMjEyLCAzMCwgMTAsIDExLCAxMzksIDIxMCwgMTA4LCAxMCwgMTEsIDEzOSwgMjQyLCAzNywgMTAsIAotICAgIDExLCAxMzksIDIxNywgODAsIDEwLCAxMSwgMTM5LCAyMTEsIDQzLCAxMCwgMTEsIDEzOSwgMjMzLCAxMDIsIDEwLCAxMSwgCi0gICAgMTM5LCAyMzEsIDc4LCAxMCwgMTEsIDEzOSwgMjI4LCA2MiwgMTAsIDExLCAxMzksIDIyMSwgMTY2LCAxMCwgMTEsIDEzOSwgCi0gICAgMjU0LCAxOTYsIDEwLCAxMSwgMTM5LCAyNDQsIDE0MiwgMTAsIDExLCAxMzksIDIyMiwgMjYsIDEwLCAxMSwgMTM5LCAyMjQsIAotICAgIDgxLCAxMCwgMTEsIDEzOSwgMjIzLCA5NSwgMTAsIDExLCAxMzksIDIyMCwgNTksIDEwLCAxMSwgMTM5LCAyMTcsIDcsIDEwLCAKLSAgICAxMSwgMTM5LCAyMTYsIDE5MiwgMTAsIDExLCAxMzksIDIzNCwgMTI5LCAxMCwgMTEsIDEzOSwgMjE2LCAyMDIsIDEwLCAxMSwgCi0gICAgMTM5LCAyNDgsIDIxNiwgMTAsIDExLCAxMzksIDIxMCwgMTExLCAxMCwgMTEsIDEzOSwgMjQyLCAyNDQsIDEwLCAxMSwgMjI2LCAKLSAgICAxNjgsIDY2LCAyLCAxMjIsIDIsIDIxNywgNDMsIDEwLCAxMSwgMjI2LCAxNjgsIDEyMiwgMiwgMjQ4LCAxOTUsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjQ1LCAyMjAsIDIxMSwgMjM5LCAyMzEsIDIwNSwgODYsIDIxOSwgMjgsIDIxMSwgMjM5LCAyMzEsIDIwNSwgCi0gICAgODYsIDIxMiwgOSwgMjExLCAyMzksIDIzMSwgMjA1LCA4NiwgMjI4LCA1NiwgMjExLCAyMzksIDIzMSwgMjA1LCA4NiwgMjIzLCAKLSAgICAxMTEsIDI0NiwgOTYsIDIzMSwgMjA1LCA4NiwgMjQyLCAxMjcsIDI0NiwgOTYsIDIzMSwgMjA1LCA4NiwgNzEsIDI0NiwgOTYsIAotICAgIDIzMSwgMjA1LCA4NiwgMTIzLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMTEzLCA2NCwgMjUwLCAxNDEsIDIzMSwgCi0gICAgMjA1LCA4NiwgMTM0LCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMjQ0LCAxMSwgNjQsIDI1MCwgMTQxLCAyMzEsIAotICAgIDIwNSwgODYsIDI0NCwgODEsIDY0LCAyNTAsIDE0MSwgMjMxLCAyMDUsIDg2LCAyMTksIDEyNSwgNjQsIDI1MCwgMTQxLCAKLSAgICAyMzEsIDIwNSwgODYsIDIyMCwgMTIyLCA2NCwgMjUwLCAxNDEsIDIzMSwgMjA1LCA4NiwgMjQ1LCAxOTMsIDY0LCAyNTAsIAotICAgIDE0MSwgMjMxLCAyMDUsIDg2LCAyMjgsIDIwMCwgNjQsIDI1MCwgMTQxLCAyMzEsIDIwNSwgODYsIDEyMywgNjQsIDI1MiwgCi0gICAgMTUzLCAyMzEsIDIwNSwgODYsIDExMywgNjQsIDI1MiwgMTUzLCAyMzEsIDIwNSwgODYsIDEzNCwgNjQsIDI1MiwgMTUzLCAKLSAgICAyMzEsIDIwNSwgODYsIDI0NCwgMTEsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAyNDQsIDgxLCA2NCwgMjUyLCAxNTMsIAotICAgIDIzMSwgMjA1LCA4NiwgMjE5LCAxMjUsIDY0LCAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAyMjAsIDEyMiwgNjQsIDI1MiwgCi0gICAgMTUzLCAyMzEsIDIwNSwgODYsIDI0NSwgMTkzLCA2NCwgMjUyLCAxNTMsIDIzMSwgMjA1LCA4NiwgMjI4LCAyMDAsIDY0LCAKLSAgICAyNTIsIDE1MywgMjMxLCAyMDUsIDg2LCAxMjMsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDExMywgNjQsIDI1MCwgMzQsIAotICAgIDIzMSwgMjA1LCA4NiwgMTM0LCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyNDQsIDExLCA2NCwgMjUwLCAzNCwgMjMxLCAKLSAgICAyMDUsIDg2LCAyNDQsIDgxLCA2NCwgMjUwLCAzNCwgMjMxLCAyMDUsIDg2LCAyMTksIDEyNSwgNjQsIDI1MCwgMzQsIDIzMSwgCi0gICAgMjA1LCA4NiwgMjIwLCAxMjIsIDY0LCAyNTAsIDM0LCAyMzEsIDIwNSwgODYsIDI0NSwgMTkzLCA2NCwgMjUwLCAzNCwgMjMxLCAKLSAgICAyMDUsIDg2LCAyMjgsIDIwMCwgNjQsIDI1MCwgMzQsIDIzMSwgMjA1LCA4NiwgMjI1LCAyNSwgMjMxLCAyMDUsIDg2LCAyMjYsIAotICAgIDE1NiwgMjMxLCAyMDUsIDg2LCAyNTIsIDE1NCwgMjMxLCAyMDUsIDg2LCAyNTAsIDcwLCAyMzEsIDIwNSwgODYsIDIxOCwgCi0gICAgMjM5LCAyMzEsIDIwNSwgODYsIDIxOCwgMzksIDIzMSwgMjA1LCA4NiwgMjUzLCAxNzksIDIzMSwgMjA1LCA4NiwgMjExLCAKLSAgICAyMzIsIDIzMSwgMjA1LCA4NiwgMjM1LCA2MiwgMjMxLCAyMDUsIDg2LCAyNTIsIDE4NCwgMTMxLCA4NiwgMjAzLCAyNTIsIAotICAgIDE4NCwgMTMxLCA4NiwgMjQxLCA0MywgMTMxLCA4NiwgMjQxLCA0MiwgMTMxLCA4NiwgMjQxLCA0MSwgMTMxLCA4NiwgMjQxLCAKLSAgICA0MCwgMTMxLCA4NiwgMjQxLCAzOSwgMTMxLCA4NiwgMjQxLCAzOCwgMTMxLCA4NiwgMjQxLCAzNywgMTMxLCA4NiwgMjQxLCAKLSAgICAzNiwgMTMxLCA4NiwgMjQxLCAzNSwgMTMxLCA4NiwgMjQxLCAzNCwgMTMxLCA4NiwgMjQxLCAzMywgMTMxLCA4NiwgMjQxLCAKLSAgICAzMiwgMTMxLCA4NiwgMjQxLCAzMSwgMTMxLCA4NiwgMjQxLCAzMCwgMTMxLCA4NiwgMjQxLCAyOSwgMTMxLCA4NiwgMjQxLCAKLSAgICAyOCwgMTMxLCA4NiwgMjQxLCAyNywgMTMxLCA4NiwgMjQxLCAyNiwgMTMxLCA4NiwgMjQxLCAyNSwgMTMxLCA4NiwgMjQxLCAKLSAgICAyNCwgMTMxLCA4NiwgMjQxLCAyMywgMTMxLCA4NiwgMjQxLCAyMiwgMTMxLCA4NiwgMjQxLCAyMSwgMTMxLCA4NiwgMjQxLCAKLSAgICAyMCwgMTMxLCA4NiwgMjQxLCAxOSwgMTMxLCA4NiwgMjQxLCAxOCwgMTMxLCA4NiwgMjQxLCAxNywgMTMxLCA4NiwgMjQxLCAKLSAgICAxNiwgMTMxLCA4NiwgMjQxLCAxNSwgMTMxLCA4NiwgMjQxLCAxNCwgMTMxLCA4NiwgMjQxLCAxMywgMTMxLCA4NiwgMjQxLCAKLSAgICAxMiwgMTMxLCA4NiwgMjQxLCAxMSwgMTMxLCA4NiwgMjQxLCAxMCwgMTMxLCA4NiwgMjQxLCA5LCAxMzEsIDg2LCAyNDEsIDgsIAotICAgIDEzMSwgODYsIDI0MSwgNywgMTMxLCA4NiwgMjQxLCA2LCAxMzEsIDg2LCAyNDEsIDUsIDEzMSwgODYsIDI0MSwgNCwgMTMxLCAKLSAgICA4NiwgMjQxLCAzLCAxMzEsIDg2LCAyNDEsIDIsIDEzMSwgODYsIDI0MSwgMSwgMTMxLCA4NiwgMjQxLCAwLCAxMzEsIDg2LCAKLSAgICAyNDAsIDI1NSwgMTMxLCA4NiwgMjQwLCAyNTQsIDEzMSwgODYsIDI0MCwgMjUzLCAxMzEsIDg2LCAyNDAsIDI1MiwgMTMxLCAKLSAgICA4NiwgMjQwLCAyNTEsIDEzMSwgODYsIDY3LCAyNTIsIDE4NCwgMTMxLCA4NiwgMjEzLCAyMzgsIDEzMSwgODYsIDIxMywgCi0gICAgMjM3LCAxMzEsIDg2LCAyMTMsIDIzNiwgMTMxLCA4NiwgMjEzLCAyMzUsIDEzMSwgODYsIDIxMywgMjM0LCAxMzEsIDg2LCAKLSAgICAyMTMsIDIzMywgMTMxLCA4NiwgMjEzLCAyMzIsIDEzMSwgODYsIDIxMywgMjMxLCAxMzEsIDg2LCAyMTMsIDIzMCwgMTMxLCAKLSAgICA4NiwgMjEzLCAyMjksIDEzMSwgODYsIDIxMywgMjI4LCAxMzEsIDg2LCAyMTMsIDIyNywgMTMxLCA4NiwgMjEzLCAyMjYsIAotICAgIDEzMSwgODYsIDIxMywgMjI1LCAxMzEsIDg2LCAyMTMsIDIyNCwgMTMxLCA4NiwgMjEzLCAyMjMsIDEzMSwgODYsIDIxMywgCi0gICAgMjIyLCAxMzEsIDg2LCAyMTMsIDIyMSwgMTMxLCA4NiwgMjEzLCAyMjAsIDEzMSwgODYsIDIxMywgMjE5LCAxMzEsIDg2LCAKLSAgICAyMTMsIDIxOCwgMTMxLCA4NiwgMjEzLCAyMTcsIDEzMSwgODYsIDIxMywgMjE2LCAxMzEsIDg2LCAyMTMsIDIxNSwgMTMxLCAKLSAgICA4NiwgMjEzLCAyMTQsIDEzMSwgODYsIDIxMywgMjEzLCAxMzEsIDg2LCAyMTMsIDIxMiwgMTMxLCA4NiwgMjEzLCAyMTEsIAotICAgIDEzMSwgODYsIDIxMywgMjEwLCAxMzEsIDg2LCAyMTMsIDIwOSwgMTMxLCA4NiwgMjEzLCAyMDgsIDEzMSwgODYsIDIxMywgCi0gICAgMjA3LCAxMzEsIDg2LCAyMTMsIDIwNiwgMTMxLCA4NiwgMjEzLCAyMDUsIDEzMSwgODYsIDIxMywgMjA0LCAxMzEsIDg2LCAKLSAgICAyMTMsIDIwMywgMTMxLCA4NiwgMjEzLCAyMDIsIDEzMSwgODYsIDIxMywgMjAxLCAxMzEsIDg2LCAyMTMsIDIwMCwgMTMxLCAKLSAgICA4NiwgMjEzLCAxOTksIDEzMSwgODYsIDIxMywgMTk4LCAxMzEsIDg2LCAyMTMsIDE5NywgMTMxLCA4NiwgMjEzLCAxOTYsIAotICAgIDEzMSwgODYsIDIxMywgMTk1LCAxMzEsIDg2LCAyMTMsIDE5NCwgMTMxLCA4NiwgMjEzLCAxOTMsIDEzMSwgODYsIDIxMywgCi0gICAgMTkyLCAxMzEsIDg2LCAyMTMsIDE5MSwgMTMxLCA4NiwgMjEzLCAxOTAsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTIsIDE4NCwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDI1NSwgOSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMTMsIDY0LCAyMTksIAotICAgIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgMTEsIDY0LCAKLSAgICAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ0LCA4MSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTksIAotICAgIDEyNSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjAsIDEyMiwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyNDUsIDE5MywgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgNjQsIDIxOSwgMTUsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMTYsIDI0OCwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzUsIDEzOSwgCi0gICAgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjE5LCAxNSwgMjI1LCAzMywgMjUwLCAyNDMsIAotICAgIDIyNCwgMTUsIDY0LCAyMTksIDE1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjM0LCA3OSwgNjQsIDIxOSwgMTUsIDIyNSwgMzMsIAotICAgIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIDI0MSwgMjI1LCAKLSAgICAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDExLCA2NCwgCi0gICAgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDgxLCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAKLSAgICAyMTksIDEyNSwgNjQsIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyNDEsIDIyNSwgMjI1LCAKLSAgICAzMywgMjUwLCAyNDMsIDI0NSwgMTkzLCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgNjQsIAotICAgIDI0MSwgMjI1LCAyMjUsIDMzLCAyNTAsIDI0MywgMjE2LCAyNDgsIDY0LCAyNDEsIDIyNSwgMjI1LCAzMywgMjUwLCAyNDMsIAotICAgIDIzNSwgMTM5LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjQxLCAyMjUsIDIyNSwgCi0gICAgMzMsIDI1MCwgMjQzLCAyMjQsIDE1LCA2NCwgMjQxLCAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgMjQxLCAKLSAgICAyMjUsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNTUsIDksIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAyNDMsIDExMywgNjQsIAotICAgIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMTM0LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIAotICAgIDExLCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyNDQsIDgxLCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyMTksIDEyNSwgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjIwLCAxMjIsIDY0LCAyNDcsIDI0NywgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDI0NSwgMTkzLCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjgsIDIwMCwgCi0gICAgNjQsIDI0NywgMjQ3LCAyMjUsIDMzLCAyNTAsIDI0MywgMjE2LCAyNDgsIDY0LCAyNDcsIDI0NywgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDIzNSwgMTM5LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDMxLCA2NCwgMjQ3LCAyNDcsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjQsIDE1LCA2NCwgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCAyMzQsIDc5LCA2NCwgCi0gICAgMjQ3LCAyNDcsIDIyNSwgMzMsIDI1MCwgMjQzLCA4NSwgMjM1LCA2MiwgMjI1LCAzMywgMjUwLCAyNDMsIDI1NSwgOSwgNjQsIAotICAgIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMTEzLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgMjQzLCAxMzQsIAotICAgIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDI0NCwgMTEsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAKLSAgICAyNDMsIDI0NCwgODEsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIxOSwgMTI1LCA2NCwgMjQ5LCAyNDIsIAotICAgIDIyNSwgMzMsIDI1MCwgMjQzLCAyMjAsIDEyMiwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjQ1LCAxOTMsIAotICAgIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIyOCwgMjAwLCA2NCwgMjQ5LCAyNDIsIDIyNSwgMzMsIDI1MCwgCi0gICAgMjQzLCAyMTYsIDI0OCwgNjQsIDI0OSwgMjQyLCAyMjUsIDMzLCAyNTAsIDI0MywgMjM1LCAxMzksIDY0LCAyNDksIDI0MiwgCi0gICAgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgMzEsIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIyNCwgMTUsIDY0LCAKLSAgICAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIDIzNCwgNzksIDY0LCAyNDksIDI0MiwgMjI1LCAzMywgMjUwLCAyNDMsIAotICAgIDcxLCAyMzUsIDYyLCAyMSwgMjEwLCA4NywgMjQzLCAyMjksIDIxOCwgMTI5LCAyMSwgMjEwLCA4NywgMjQ5LCAyMTksIDIxLCAKLSAgICAxMjMsIDI0OSwgMjE5LCAyMSwgMTEzLCAyNDksIDIxOSwgMjEsIDEzNCwgMjQ5LCAyMTksIDIxLCAyNDQsIDExLCAyNDksIAotICAgIDIxOSwgMjEsIDI0NCwgODEsIDI0OSwgMjE5LCAyMSwgMjE5LCAxMjUsIDI0OSwgMjE5LCAyMSwgMjIwLCAxMjIsIDI0OSwgCi0gICAgMjE5LCAyMSwgMjQ1LCAxOTMsIDI0OSwgMjE5LCAyMSwgMjI4LCAyMDAsIDI0OSwgMjE5LCA4OCwgNywgNiwgMSwgNjEsIDg4LCAKLSAgICA3LCA2LCAxLCAyNTMsIDE1OCwgODgsIDcsIDYsIDEsIDI1MSwgNjYsIDg4LCA3LCA2LCAxLCAyNDksIDYwLCA4OCwgNywgNiwgCi0gICAgMSwgNzUsIDg4LCA3LCA2LCAxLCAyNDUsIDYsIDg4LCA3LCA2LCAxLCAyNDMsIDIwMiwgODgsIDcsIDYsIDEsIDI0MiwgNjAsIAotICAgIDg4LCA3LCA2LCAxLCA3MywgODgsIDcsIDYsIDEsIDIzNSwgMTQ0LCA4OCwgNywgNiwgMSwgMjM1LCAyMywgODgsIDcsIDYsIAotICAgIDEsIDE1NiwgODgsIDcsIDYsIDEsIDE5MywgODgsIDcsIDYsIDEsIDIzMCwgMjUsIDg4LCA3LCA2LCAxLCA3NiwgODgsIDcsIAotICAgIDYsIDEsIDIyNiwgMTA1LCA4OCwgNywgNiwgMSwgMjI0LCA5NiwgODgsIDcsIDYsIDEsIDE1MywgODgsIDcsIDYsIDEsIDIyMiwgCi0gICAgOTEsIDg4LCA3LCA2LCAxLCAyMTcsIDE1MiwgODgsIDcsIDYsIDEsIDcwLCA4OCwgNywgNiwgMSwgMjE0LCAxMDUsIDg4LCA3LCAKLSAgICA2LCAxLCAyMTIsIDk4LCA4OCwgNywgNiwgMSwgMjExLCAxNzgsIDg4LCA3LCA2LCAxLCAyMTEsIDExNywgODgsIDcsIDYsIDEsIAotICAgIDIxMCwgMTU5LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA3LCA2LCAxLCAyMjIsIDkxLCAzNywgMzIsIDcsIDYsIDEsIAotICAgIDI1MSwgNjYsIDM3LCAzMiwgNywgNiwgMSwgMTUzLCAzNywgMjUwLCAxOTEsIDM3LCAyMTEsIDE4MCwgOTIsIDcsIDYsIDEsIAotICAgIDYxLCA5MiwgNywgNiwgMSwgMjUzLCAxNTgsIDkyLCA3LCA2LCAxLCAyNTEsIDY2LCA5MiwgNywgNiwgMSwgMjQ5LCA2MCwgCi0gICAgOTIsIDcsIDYsIDEsIDc1LCA5MiwgNywgNiwgMSwgMjQ1LCA2LCA5MiwgNywgNiwgMSwgMjQzLCAyMDIsIDkyLCA3LCA2LCAxLCAKLSAgICAyNDIsIDYwLCA5MiwgNywgNiwgMSwgNzMsIDkyLCA3LCA2LCAxLCAyMzUsIDE0NCwgOTIsIDcsIDYsIDEsIDIzNSwgMjMsIAotICAgIDkyLCA3LCA2LCAxLCAxNTYsIDkyLCA3LCA2LCAxLCAxOTMsIDkyLCA3LCA2LCAxLCAyMzAsIDI1LCA5MiwgNywgNiwgMSwgCi0gICAgNzYsIDkyLCA3LCA2LCAxLCAyMjYsIDEwNSwgOTIsIDcsIDYsIDEsIDIyNCwgOTYsIDkyLCA3LCA2LCAxLCAxNTMsIDkyLCA3LCAKLSAgICA2LCAxLCAyMjIsIDkxLCA5MiwgNywgNiwgMSwgMjE3LCAxNTIsIDkyLCA3LCA2LCAxLCA3MCwgOTIsIDcsIDYsIDEsIDIxNCwgCi0gICAgMTA1LCA5MiwgNywgNiwgMSwgMjEyLCA5OCwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCA5MiwgNywgNiwgMSwgMjExLCAxMTcsIAotICAgIDkyLCA3LCA2LCAxLCAyMTAsIDE1OSwgOTIsIDI0MCwgMjAxLCA5MiwgMjMwLCA0OSwgOTIsIDIyMSwgMTgzLCA5MiwgMjE4LCAKLSAgICAyMjYsIDkyLCAyMjQsIDIxOCwgOTIsIDIxMiwgMjMsIDE1MiwgMzcsIDcsIDYsIDEsIDYxLCAxNTIsIDM3LCA3LCA2LCAxLCAKLSAgICAyNTMsIDE1OCwgMTUyLCAzNywgNywgNiwgMSwgMjUxLCA2NiwgMTUyLCAzNywgNywgNiwgMSwgMjQ5LCA2MCwgMTUyLCAzNywgCi0gICAgNywgNiwgMSwgNzUsIDE1MiwgMzcsIDcsIDYsIDEsIDI0NSwgNiwgMTUyLCAzNywgNywgNiwgMSwgMjQzLCAyMDIsIDE1MiwgCi0gICAgMzcsIDcsIDYsIDEsIDI0MiwgNjAsIDE1MiwgMzcsIDcsIDYsIDEsIDczLCAxNTIsIDM3LCA3LCA2LCAxLCAyMzUsIDE0NCwgCi0gICAgMTUyLCAzNywgNywgNiwgMSwgMjM1LCAyMywgMTUyLCAzNywgNywgNiwgMSwgMTU2LCAxNTIsIDM3LCA3LCA2LCAxLCAxOTMsIAotICAgIDE1MiwgMzcsIDcsIDYsIDEsIDIzMCwgMjUsIDE1MiwgMzcsIDcsIDYsIDEsIDc2LCAxNTIsIDM3LCA3LCA2LCAxLCAyMjYsIAotICAgIDEwNSwgMTUyLCAzNywgNywgNiwgMSwgMjI0LCA5NiwgMTUyLCAzNywgNywgNiwgMSwgMTUzLCAxNTIsIDM3LCA3LCA2LCAxLCAKLSAgICAyMjIsIDkxLCAxNTIsIDM3LCA3LCA2LCAxLCAyMTcsIDE1MiwgMTUyLCAzNywgNywgNiwgMSwgNzAsIDE1MiwgMzcsIDcsIDYsIAotICAgIDEsIDIxNCwgMTA1LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCAKLSAgICAzNywgNywgNiwgMSwgMjExLCAxMTcsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMCwgMTU5LCAyMjMsIDE1NywgMjMxLCA5NywgNTAsIAotICAgIDIyMywgMTU3LCAyMzEsIDk0LCA1MCwgMTUyLCA5MiwgNywgNiwgMSwgNjEsIDE1MiwgOTIsIDcsIDYsIDEsIDI1MywgMTU4LCAKLSAgICAxNTIsIDkyLCA3LCA2LCAxLCAyNTEsIDY2LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDksIDYwLCAxNTIsIDkyLCA3LCA2LCAxLCAKLSAgICA3NSwgMTUyLCA5MiwgNywgNiwgMSwgMjQ1LCA2LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDMsIDIwMiwgMTUyLCA5MiwgNywgNiwgCi0gICAgMSwgMjQyLCA2MCwgMTUyLCA5MiwgNywgNiwgMSwgNzMsIDE1MiwgOTIsIDcsIDYsIDEsIDIzNSwgMTQ0LCAxNTIsIDkyLCA3LCAKLSAgICA2LCAxLCAyMzUsIDIzLCAxNTIsIDkyLCA3LCA2LCAxLCAxNTYsIDE1MiwgOTIsIDcsIDYsIDEsIDE5MywgMTUyLCA5MiwgNywgCi0gICAgNiwgMSwgMjMwLCAyNSwgMTUyLCA5MiwgNywgNiwgMSwgNzYsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA1LCAxNTIsIDkyLCAKLSAgICA3LCA2LCAxLCAyMjQsIDk2LCAxNTIsIDkyLCA3LCA2LCAxLCAxNTMsIDE1MiwgOTIsIDcsIDYsIDEsIDIyMiwgOTEsIDE1MiwgCi0gICAgOTIsIDcsIDYsIDEsIDIxNywgMTUyLCAxNTIsIDkyLCA3LCA2LCAxLCA3MCwgMTUyLCA5MiwgNywgNiwgMSwgMjE0LCAxMDUsIAotICAgIDE1MiwgOTIsIDcsIDYsIDEsIDIxMiwgOTgsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMSwgMTc4LCAxNTIsIDkyLCA3LCA2LCAxLCAKLSAgICAyMTEsIDExNywgMTUyLCA5MiwgNywgNiwgMSwgMjEwLCAxNTksIDI0OSwgMTI4LCAxNTIsIDkyLCA3LCA2LCAxLCAyMjYsIAotICAgIDEwNSwgMTUyLCA5MiwgMjQwLCAxMTMsIDE1MiwgOTIsIDE5MCwgMTUyLCA5MiwgMjA2LCAxNTIsIDkyLCAyNTUsIDI1LCAKLSAgICAxNTIsIDkyLCAyMTIsIDIzLCA0MiwgMjQ3LCAxNjQsIDkyLCAyNTAsIDIzLCA5MiwgMjQ5LCAxNzAsIDkyLCAyNDMsIDI1MiwgCi0gICAgOTIsIDI0MCwgMTA1LCA5MiwgMjI5LCA4NiwgOTIsIDIyOSwgNzksIDkyLCAyMjYsIDIxNCwgOTIsIDIxOSwgMzUsIDkyLCAKLSAgICAxMjAsIDIsIDI0NSwgMzEsIDc4LCA5MiwgMjEzLCAxMTksIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDYxLCAyMjMsIAotICAgIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyNTMsIDE1OCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjUxLCA2NiwgMjIzLCAKLSAgICAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjQ5LCA2MCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNzUsIDIyMywgMTAzLCAKLSAgICAyMzUsIDIzOSwgMTYsIDEsIDI0NSwgNiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjQzLCAyMDIsIDIyMywgMTAzLCAKLSAgICAyMzUsIDIzOSwgMTYsIDEsIDI0MiwgNjAsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDczLCAyMjMsIDEwMywgMjM1LCAKLSAgICAyMzksIDE2LCAxLCAyMzUsIDE0NCwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjM1LCAyMywgMjIzLCAxMDMsIDIzNSwgCi0gICAgMjM5LCAxNiwgMSwgMTU2LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAxOTMsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIAotICAgIDEsIDIzMCwgMjUsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDc2LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAKLSAgICAyMjYsIDEwNSwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjI0LCA5NiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgCi0gICAgMTUzLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMjIsIDkxLCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTcsIAotICAgIDE1MiwgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgNzAsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxNCwgMTA1LCAKLSAgICAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTIsIDk4LCAyMjMsIDEwMywgMjM1LCAyMzksIDE2LCAxLCAyMTEsIDE3OCwgCi0gICAgMjIzLCAxMDMsIDIzNSwgMjM5LCAxNiwgMSwgMjExLCAxMTcsIDIyMywgMTAzLCAyMzUsIDIzOSwgMTYsIDEsIDIxMCwgMTU5LCAKLSAgICA0MiwgMTQxLCAyNDEsIDYzLCA5MiwgNTYsIDIzNCwgMTgsIDkyLCA1NiwgMjA2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTAsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDYyLCA5MiwgNTYsIDI0OCwgOTAsIDkyLCAKLSAgICA5LCAyMTQsIDE3NywgMjM4LCA2OSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjgsIAotICAgIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1NSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDY4LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgCi0gICAgNDIsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzNSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQ0LCA5MiwgOSwgMjE0LCAxNzcsIAotICAgIDIzOCwgNjUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1MSwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDY3LCA5MiwgOSwgMjE0LCAKLSAgICAxNzcsIDIzOCwgNDMsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA2NiwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDI5LCA5MiwgOSwgCi0gICAgMjE0LCAxNzcsIDIzOCwgMzQsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAyNywgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDU3LCAKLSAgICA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTksIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzNywgOTIsIDksIDIxNCwgMTc3LCAyMzgsIAotICAgIDQ4LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDYsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA3MiwgOTIsIDksIDIxNCwgMTc3LCAKLSAgICAyMzgsIDcxLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgMjUsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA1MiwgOTIsIDksIDIxNCwgCi0gICAgMTc3LCAyMzgsIDcwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjEsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCA0NywgOTIsIDksIAotICAgIDIxNCwgMTc3LCAyMzgsIDI2LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDksIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAzMSwgCi0gICAgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDMwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNjAsIDkyLCA5LCAyMTQsIDE3NywgMjM4LCAKLSAgICAzOCwgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDQwLCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNDEsIDkyLCA5LCAyMTQsIDE3NywgCi0gICAgMjM4LCAzMywgOTIsIDksIDIxNCwgMTc3LCAyMzgsIDY0LCA5MiwgOSwgMjE0LCAxNzcsIDIzOCwgNTgsIDIxNiwgNiwgMjIwLCAKLSAgICA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDM5LCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAyMTQsIAotICAgIDE3NywgMjM4LCA3MSwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgNjksIDIxNiwgNiwgCi0gICAgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDUzLCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCAzNiwgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgNDksIDIxNiwgCi0gICAgNiwgMjIwLCA1MywgMjUxLCAxNTcsIDksIDIxNCwgMTc3LCAyMzgsIDMyLCAyMTYsIDYsIDIyMCwgNTMsIDI1MSwgMTU3LCA5LCAKLSAgICAyMTQsIDE3NywgMjM4LCA2MywgMjE2LCA2LCAyMjAsIDUzLCAyNTEsIDE1NywgOSwgMjE0LCAxNzcsIDIzOCwgNDUsIDM3LCAKLSAgICAxNTQsIDI1NCwgMjQ1LCAzNywgMTU0LCAyNTUsIDEyLCAyNDksIDcxLCAyNDQsIDQyLCAyNTAsIDAsIDIxNCwgMTk0LCAyMjgsIAotICAgIDIxMywgMiwgMjE4LCAxNTMsIDIxOCwgMzMsIDExNywgMjMwLCAxMTQsIDIxOCwgMzIsIDI1MCwgMjYsIDI1MywgMjA3LCAKLSAgICAyNDYsIDU0LCAyMTgsIDMxLCAxMTcsIDI1MSwgMTE4LCAyMjMsIDE1OCwgMjUxLCAxNDAsIDI1MywgMjA3LCAyMjgsIDIxMiwgCi0gICAgMjEyLCA0MSwgMjEyLCAzNSwgMjEzLCAxMzEsIDIzMCwgMTk1LCAyMTIsIDI1LCAyNDUsIDIyNCwgMjQyLCAxODEsIDI0NSwgCi0gICAgNDUsIDI0NSwgMjI0LCAyNDIsIDE4MSwgMjU0LCAxMjgsIDI0NSwgMjI0LCAyNDIsIDE4MSwgMjUzLCAyMjUsIDI0MiwgMTgxLCAKLSAgICAyLCAyMzEsIDUxLCAxNjYsIDIzMCwgMTI5LCA4NywgMjEyLCAyNywgMjQ5LCAxMzcsIDIzMCwgMTI5LCA4NywgMjQ0LCA5MiwgCi0gICAgMjI0LCAyMiwgMjMwLCAxMjksIDg3LCAyMTIsIDI3LCAyNDIsIDIxMCwgMjMwLCAxMjksIDg3LCAyNDMsIDIyOSwgMjMwLCAKLSAgICAxMjksIDg3LCAyMTIsIDUyLCAyNDIsIDIxMCwgMjMwLCAxMjksIDg3LCAyMzMsIDgwLCAyMjQsIDIyLCAyMzAsIDEyOSwgODcsIAotICAgIDIxMiwgNTIsIDI0OSwgMTM3LCAyMzAsIDEyOSwgODcsIDI0OSwgMTM3LCAyMzAsIDEyOCwgMTY2LCAyMzAsIDEyOSwgMiwgCi0gICAgMjQ0LCAxOTAsIDI0NCwgOTIsIDIyNCwgMjIsIDIzMCwgMTI5LCAyLCAyNDQsIDE5MCwgMjMzLCA4MCwgMjI0LCAyMiwgMjMwLCAKLSAgICAxMjksIDIsIDI0NCwgMTkwLCAyNDMsIDIyOSwgMjMwLCAxMjksIDIsIDI0NCwgMTkwLCAyMTgsIDM4LCAyLCAyNDQsIDE5MCwgCi0gICAgMjQyLCAxNzksIDIxOCwgMTU2LCAyMTksIDI1NSwgMjE4LCAxNTYsIDI1MCwgMTE2LCAyMjEsIDE2OCwgMjQ1LCAzOSwgMjE1LCAKLSAgICAyMzUsIDI0OCwgODQsIDIxNSwgMjM1LCAyMjYsIDU5LCAyMTUsIDIzNSwgMjUxLCAyNywgMjE1LCAxMDksIDI1MCwgMTE4LCAKLSAgICAyNTEsIDIxMCwgMjIyLCAxOTEsIDI0MSwgMTc5LCAyMTgsIDM2LCAyNTEsIDIxMCwgMjQ1LCAyMjgsIDY0LCAyMzEsIDE5NCwgCi0gICAgMjQ1LCAyMjgsIDY0LCAyMjMsIDMxLCAyNDEsIDIwNCwgMjQ0LCAxMSwgMjMzLCA1NCwgMjQ5LCAyNDYsIDIzMSwgMTcwLCAKLSAgICAyMzMsIDUzLCAyNDQsIDE3NiwgMjMzLCA1MywgMjMzLCA1NCwgMjQ0LCA0NywgMjM2LCAwLCAyMTEsIDIzOSwgMjMwLCA1OCwgCi0gICAgMjE2LCAzNCwgMjUzLCAxOTEsIDI0MiwgMTQzLCAyMzEsIDY3LCAyMTIsIDM5LCAyMTcsIDU3LCAyMzMsIDI2LCAyNTIsIAotICAgIDE0OSwgMjI1LCA2MiwgMjIzLCAxMTEsIDI1NCwgNTQsIDI0MiwgMTI3LCAyNTQsIDU0LCAyMjUsIDIxNywgMjI1LCAyMTgsIAotICAgIDI1MCwgMTE5LCAyMTgsIDExNCwgMjQyLCAyMywgMjE5LCA5MCwgNjQsIDIyNSwgNDQsIDIzMSwgODcsIDIyNiwgMTk3LCAKLSAgICAyNTEsIDE5NCwgMjI0LCAyMjksIDIzMywgMzYsIDIyMywgMzIsIDI0OSwgMTQyLCAyMjMsIDMyLCAyNTIsIDE1OSwgMjQ5LCAKLSAgICAxNzMsIDIyMywgMzEsIDI0OSwgOTUsIDIyLCAyMjMsIDMxLCAyMTgsIDE0MSwgMjUxLCAxNjcsIDIxOSwgMTQsIDI1MSwgCi0gICAgMTUxLCAyNDMsIDI1MSwgMjQzLCAyNDcsIDIyMiwgMjA3LCAyMTcsIDI0NiwgMjI0LCAyMzEsIDI0OCwgMTc1LCAyMjYsIAotICAgIDIzNiwgMjE4LCA3LCAyNDMsIDI0OCwgMjE5LCAyMzAsIDI0NCwgOTEsIDI1MSwgMjEsIDIsIDIxNywgMjM5LCAyNDgsIDM1LCAKLSAgICAyMTksIDUyLCAyNDAsIDExMiwgMjQ5LCAxNDEsIDIyMCwgNzAsIDI0MCwgMTExLCAyNDAsIDExMiwgMjQ5LCAxNDEsIDI0NiwgCi0gICAgMTA4LCAyNDksIDE3MiwgMjUwLCA4NCwgMTMwLCAyNTAsIDI1NCwgMjMyLCAxNDEsIDI0OSwgODgsIDI0MSwgNTUsIDIyNCwgCi0gICAgMjMzLCAyMTksIDI0MCwgMjUyLCAzNiwgMjUxLCAxNjMsIDIyNCwgMjM0LCA2NCwgMjQ0LCAzMywgMjQ5LCAxNzEsIDI0NCwgCi0gICAgMjQsIDIyLCAyMzQsIDMyLCAyMTcsIDE5LCAyMTEsIDIzMCwgMjQyLCAxMywgMjIyLCAxMiwgMjUxLCAxNzcsIDIyLCAyNDksIAotICAgIDEwMiwgMjExLCAyMzcsIDI0MiwgMTg0LCAyNDksIDIzNSwgMjQyLCAxODQsIDIxNSwgMTkzLCAyNDYsIDkwLCAyNTIsIDYyLCAKLSAgICAyMzAsIDkzLCAyNTAsIDcsIDI1MiwgNjIsIDIzMCwgOTIsIDI1MiwgMTg3LCAyNTEsIDE3NiwgMjIzLCAzMywgMjExLCAyMDEsIAotICAgIDIyNCwgMTk1LCAyNTEsIDIzNSwgMjUxLCAyMCwgMjM1LCAxMzgsIDI1MCwgNzcsIDIxNSwgMjM1LCAyNDQsIDE2MiwgMjUwLCAKLSAgICA3NiwgMjQ0LCA5NCwgMjQ0LCA5NSwgMjE5LCAxMiwgMjUyLCAxNTgsIDIyNSwgMjUwLCAyMjQsIDI0NCwgMjQ5LCAyMDQsIAotICAgIDI1MiwgMTU5LCAyMTcsIDU5LCAyMTUsIDIzNSwgMjQ5LCAxMjgsIDI0NCwgNjcsIDIyNSwgNjMsIDI0OCwgODEsIDIzNSwgCi0gICAgMTMxLCAyNDcsIDEzMSwgMjUwLCAyMzIsIDIxOCwgMTEzLCAyMTEsIDI0MCwgMjUwLCA5OCwgMjMwLCAxMjksIDIxMywgMTY0LCAKLSAgICAyNTAsIDE2MiwgMjIxLCAxOTksIDIyMSwgMjI0LCAyNDIsIDE0OCwgMjUwLCAyNTEsIDI1MCwgMjMzLCAyNDAsIDI0NSwgCi0gICAgMjQ0LCAxMzAsIDIxMiwgMCwgMjIyLCAyMDAsIDI0OSwgMjM2LCAyNDQsIDg2LCAyMjUsIDIsIDIyLCAyNDQsIDkwLCAyMzAsIAotICAgIDIyNywgMjMwLCAxMDgsIDI1MSwgMTAsIDI1MCwgMzksIDI0MSwgMjMyLCAyNTMsIDI0MSwgMjI2LCA2MiwgMjE2LCAxNCwgCi0gICAgMjQxLCAyNTEsIDI1MCwgMjksIDIxNiwgMjQyLCAyMTYsIDExMywgMjUwLCAyMCwgMjUxLCAyMDIsIDIyNSwgMTc3LCAyNTMsIAotICAgIDI0MCwgMjEzLCAxNzIsIDI0MywgMTEwLCAyNDcsIDE5NywgMjQxLCAxNTYsIDIxOSwgODQsIDIzMSwgMjM0LCAyNTEsIDI0NSwgCi0gICAgMjQzLCAxMTEsIDI0NywgMjQwLCAyNTEsIDE2NiwgMjQ0LCA1MiwgMjI1LCAzMywgMjUwLCAyNDEsIDI4LCAyMjgsIDQ3LCAKLSAgICAyMzAsIDg1LCAyOCwgMjI4LCA0MiwgMjIxLCAyMTIsIDI0MiwgOTksIDI4LCAyMzQsIDEzNywgMjE1LCAxOTAsIDIxMywgCi0gICAgMTU0LCAyOCwgMjIxLCAxOTIsIDIyMiwgMTI0LCAyMjAsIDExLCAyLCAyMjEsIDIyNywgMjE2LCAyNDQsIDIyMywgMTc4LCAKLSAgICAyMiwgMjUyLCAxNTksIDIxOSwgMTA1LCAyMiwgMjE5LCAxMDUsIDI1MSwgMTg3LCAyNTIsIDEyMywgMjIsIDI0MSwgNDksIAotICAgIDI1MCwgMTIwLCAyNDQsIDczLCAyMTksIDYzLCAyMjIsIDEyNSwgMjE4LCAxMiwgMjE1LCAxOTQsIDI0MCwgMjQ2LCAyMjMsIAotICAgIDE3OSwgMjU0LCAxMjksIDI0NCwgMzEsIDIyMiwgMTM2LCAyNDQsIDMxLCAyMTcsIDI0MSwgMjQwLCAyMzUsIDI1MSwgMTE5LCAKLSAgICAyNDAsIDIzNSwgMiwgMjQzLCA5NCwgMjI2LCAyMjksIDI1MSwgMTE5LCAyMzUsIDEzMSwgMjI0LCAyMzksIDIyNiwgMjI4LCAKLSAgICAyNDUsIDQ0LCAyMjQsIDIzOSwgMjI2LCAyMjgsIDI0MCwgMjQ0LCAyNTIsIDE0NSwgMjUzLCAxODEsIDIxNiwgMjUyLCAyMzEsIAotICAgIDIzNCwgMjQwLCAyNDAsIDIzMiwgMTExLCAyNDAsIDI0MCwgMjQ5LCAxNzYsIDIxOCwgMTI1LCAyMjEsIDE5OCwgMjQ4LCA0MywgCi0gICAgMjE4LCAxMjUsIDI0NCwgMTgwLCAyMzUsIDE0OSwgMjMzLCA4OSwgMjM1LCAxMzEsIDI1MCwgMjI2LCAyNDUsIDQ0LCAyNTAsIAotICAgIDIyNiwgMjIzLCAxNDEsIDIzMCwgMTEyLCAyMjYsIDExNCwgMjEyLCA0MSwgMjUxLCAxMjMsIDI0OSwgMTQ1LCAyMTYsIDEwNiwgCi0gICAgMjMzLCAxOCwgMjIzLCAxODAsIDI1MCwgMjI0LCAyNDYsIDk2LCAyNDksIDEzNSwgMjEyLCAzLCAyMTksIDcwLCAyMTksIDY4LCAKLSAgICAyNDAsIDI0NSwgMjIzLCAxNTMsIDI0MiwgMTcwLCAyMjAsIDU3LCAyMzAsIDE0NSwgMjIyLCAxOTQsIDI1MCwgMTA4LCAyNDcsIAotICAgIDEzNiwgMjI1LCA3MywgMjUxLCAyMDMsIDI0NSwgMTY5LCAyMjYsIDIzOCwgMjE4LCAyNTIsIDIyMCwgNTIsIDI1MSwgMTIyLCAKLSAgICAyNTQsIDkyLCAyNDEsIDU0LCAyMzMsIDEyMSwgMjUyLCA2MCwgMjQ0LCA5MCwgMjE1LCAxOTMsIDI0NCwgOTAsIDI1MSwgCi0gICAgMjA5LCAyMTUsIDkxLCAyNDEsIDI0OSwgMjUwLCAxMDksIDI1MiwgMTg3LCAyNTAsIDEwOSwgMjQzLCAyNDIsIDI1MiwgMTg3LCAKLSAgICAyNTAsIDEwOSwgMjUxLCAyMzcsIDIyNSwgMTk1LCAyMzQsIDI2LCAyMjQsIDI0OCwgMjQ2LCA4NywgMjUxLCAxMSwgMjUyLCAKLSAgICAxNzcsIDI1MSwgMTEsIDI0NywgMTMwLCAyMzAsIDExMywgMjQ0LCAxOTAsIDI0OSwgMTQ2LCAyNDQsIDE5MCwgMjE2LCAxMDcsIAotICAgIDI0NCwgMTkwLCAyMjMsIDE4MSwgMjQ0LCAxOTAsIDI1MCwgMjI1LCAyNDQsIDE5MCwgMjQ2LCA5NywgMjQ0LCAxOTAsIDIxOCwgCi0gICAgMjQxLCAyMTIsIDMsIDI0MCwgMjQ2LCAyNDQsIDE5MCwgMjMwLCAxNDYsIDI0NCwgMTkwLCAyNDcsIDEzNywgMjQ0LCAxOTAsIAotICAgIDIyNSwgNzQsIDI0NCwgMTkwLCAyNDMsIDI0NSwgMjQ0LCAxOTAsIDI0MiwgMjAsIDI0NCwgMTkwLCAyMTEsIDIyNCwgMjQ0LCAKLSAgICAxOTAsIDI1MiwgNzEsIDI0NCwgMTkwLCAyMjYsIDQ1LCAyNDQsIDE5MCwgMjI1LCA3NCwgMjI4LCA1MywgMjI1LCAyMzIsIAotICAgIDIyNCwgMTg2LCAyNDUsIDEzLCAyNDUsIDIyNywgMjI4LCA1MywgMjMwLCAxMTAsIDIxNiwgMTksIDcxLCAxMjAsIDIyNSwgNywgCi0gICAgMjUyLCAxODIsIDIzNSwgMjQyLCA3MSwgMTI0LCAyMjUsIDcsIDI1MiwgMTgyLCAyMzUsIDI0MiwgNzEsIDQzLCAyMjUsIDcsIAotICAgIDI1MiwgMTgyLCAyMzUsIDI0MiwgNzEsIDQ0LCAyMjUsIDcsIDI1MiwgMTgyLCAyMzUsIDI0MiwgMjQ0LCA4NCwgMjQyLCAxNiwgCi0gICAgNTAsIDIxMiwgMzMsIDI0MiwgMTYsIDUwLCAyMjYsIDIxNSwgMjQyLCAxNiwgNTAsIDIxNiwgMTM1LCAxMjAsIDUwLCAyMTYsIAotICAgIDEzNSwgMTI0LCA1MCwgMjUwLCAxOSwgMjQyLCAxMSwgNTAsIDIwNCwgMjQyLCAxMSwgNTAsIDI0OSwgMTIzLCAyMTEsIDIyMCwgCi0gICAgMjQxLCAyNTEsIDI0NSwgMTQsIDIyOSwgMTA0LCAyMTcsIDE1MSwgMjM1LCAxMjUsIDI0NiwgOTIsIDIzNCwgODIsIDI1MSwgCi0gICAgMjQ3LCAyMTEsIDIyMCwgMjQ5LCAyNDksIDIyNCwgMTI3LCAyNDIsIDE0LCAyMjQsIDIzMCwgMjMxLCAxNzcsIDIyMCwgNCwgCi0gICAgMjUzLCAyMDMsIDIyMCwgNCwgMjQxLCAxNjQsIDIyMCwgNCwgMjExLCAyMjAsIDIyMSwgMjQwLCAyMTEsIDIyMCwgMjUxLCAKLSAgICAxODYsIDI0NCwgMjksIDI1MSwgOTAsIDIzNiwgMCwgMjE5LCAxNjksIDI1MSwgODksIDIzNiwgMCwgMjE5LCAxNjksIDI1MSwgCi0gICAgMTYyLCAyNDIsIDE5NCwgMjMxLCAxODUsIDIxMSwgMjIxLCAyNDQsIDE3NCwgMjMxLCAxODYsIDIyLCAyMTEsIDIyMiwgMjQxLCAKLSAgICA2MCwgMjQyLCAxMCwgMTEzLCAyMzEsIDU5LCAyNDEsIDYwLCAyNDIsIDEwLCAxMTMsIDIxMSwgMjE5LCAyNDEsIDYwLCAyNDIsIAotICAgIDEwLCAyMjQsIDI1NSwgMjI2LCAyMjcsIDIxMSwgMjIyLCAyLCAyNTEsIDEwNiwgMjQ1LCAyMjUsIDI1MSwgMTQxLCAyLCAKLSAgICAyMTMsIDI0NiwgMjI1LCAxNjgsIDIsIDI1MSwgMjEyLCAyNDIsIDM0LCAyMzEsIDE4NiwgMiwgMjQyLCAxMTAsIDIyNSwgCi0gICAgMTA5LCAyMzEsIDE3NCwgMjMxLCAxODYsIDIsIDIxNSwgOTcsIDIyNiwgMjA4LCAyMzEsIDE4NSwgMjI2LCAyMDgsIDIxMSwgCi0gICAgMjIxLCAyNTIsIDE4NiwgMjQ5LCAxOTAsIDIxMSwgMjA1LCAyMjQsIDE4OSwgMjM1LCAxMzEsIDIyNiwgMjIzLCAyMzUsIAotICAgIDEzMSwgMjQyLCAxNjksIDI0MiwgMjIyLCAyNTIsIDE4NywgMjU0LCAxMTMsIDI0NSwgMTgsIDI1NCwgMTYwLCAyNTQsIDE2MSwgCi0gICAgMjMwLCAxMzYsIDIzNiwgNSwgMjE5LCAxMDAsIDIzNSwgMjMyLCAyNDgsIDM0LCAyMjUsIDE2NywgMjQyLCAxMDUsIDI0OCwgCi0gICAgMTc5LCAyMzIsIDIwMSwgMjI5LCAyMTEsIDIyNCwgMjU0LCAyNDQsIDE5MSwgMjMxLCAxNDIsIDI0MiwgMzMsIDI1MiwgMTM4LCAKLSAgICAyMjUsIDEsIDIxNywgMTcxLCAyMjUsIDY2LCAyMzQsIDY0LCA3OCwgMjMyLCAxMTEsIDIzMywgMTAsIDIyMiwgMjMzLCAyNDMsIAotICAgIDU0LCAyMTgsIDEzMSwgMjM0LCA2MywgMjUxLCAxNzEsIDI0OSwgMTQ4LCAyLCAyNDEsIDIyNywgMjEyLCAxOSwgMjUyLCA2OSwgCi0gICAgMjQxLCAyMjcsIDI1MSwgMTM1LCAyNDEsIDIyNywgMTEzLCAyNDEsIDIyNSwgMjE5LCAxMCwgMjQxLCAyMjcsIDI0MiwgMTIwLCAKLSAgICAyNDEsIDIyNywgMjQxLCAyMjgsIDIsIDc0LCAyNTEsIDIwOCwgMjQxLCAyMjcsIDI0MiwgMTI3LCAyNDEsIDIyNywgMjExLCAKLSAgICA0MiwgMjQxLCAyMjcsIDIyNCwgMTI4LCAyNDEsIDIyNywgMjQxLCAyMjgsIDIsIDIyMywgMzMsIDIyMywgNDQsIDI0MSwgCi0gICAgMjI1LCAyNDEsIDIyOCwgMjQ4LCA4MSwgMjQ3LCAyNDksIDIyMCwgODIsIDIsIDExNSwgNTksIDIzNSwgMjE1LCAyNDUsIAotICAgIDE3MiwgMTkyLCAyNTEsIDExNiwgMjU0LCAxMTIsIDg3LCAyNTEsIDE5NSwgMjE5LCA5MiwgODcsIDI0OSwgMjI4LCA4NywgCi0gICAgMjE4LCAyNDYsIDIxNywgMjQ4LCA4NywgMjQ2LCA4NSwgMjQ4LCAxNTcsIDg3LCAyMjUsIDY3LCA2NCwgMjI0LCAyNDksIAotICAgIDI0NCwgNjEsIDI1MiwgMywgMjQ3LCAxNjUsIDg3LCAyMTksIDMsIDI1MiwgMTU4LCAyMTYsIDE0OSwgMjUyLCAxNTgsIDcxLCAKLSAgICAyNDQsIDUxLCAyNDAsIDIxMSwgMjI1LCA1LCA4NywgMjMwLCAxNDksIDI1MiwgMTcyLCAyNDksIDk4LCAyNDUsIDMyLCAxMTQsIAotICAgIDI0NywgMTMyLCA1MCwgMjQ5LCAxMzksIDI1MCwgMjQyLCAyNTIsIDE0NCwgMiwgMjExLCA0MCwgNTAsIDI1MiwgMTQ0LCAyLCAKLSAgICAyNDcsIDEzMiwgNTAsIDI1MiwgMTQ0LCAyLCAyNDUsIDQ3LCA1MCwgMjUyLCAxNDQsIDIsIDIyNCwgMjI4LCA1MCwgMjMwLCAKLSAgICAxNDksIDIsIDIxMSwgMjM1LCAyNTAsIDEzOCwgMiwgMjE0LCAxNTMsIDIxNSwgMjMxLCAyMiwgMjExLCA0MCwgNTAsIDIyMSwgCi0gICAgMTc4LCAyMjUsIDE2NiwgMjQ5LCAyMDgsIDI1MSwgMTM5LCAyMzAsIDE4NiwgMjQ0LCA1NiwgMjQ3LCAxODUsIDIyNiwgMTYxLCAKLSAgICAyNDcsIDE5MCwgMjQ2LCA0OSwgMjQ0LCAxMDcsIDI0NCwgNDAsIDIwNCwgMjQ0LCAxMDcsIDI0NCwgNDAsIDIyNiwgNzYsIDIsIAotICAgIDI0OSwgMTAwLCAyMjYsIDc2LCAyNDQsIDE4MywgMjE0LCAxNjMsIDI1MSwgMTYsIDIxNywgMTgsIDI1MSwgMTYsIDI1MCwgCi0gICAgMjQzLCAyMzUsIDI0MiwgMjUwLCAxMzgsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMCwgMjUwLCAxMzgsIDIsIDI0NiwgMTA0LCAKLSAgICAyMTUsIDIzMCwgMjUyLCAxNDEsIDI1MCwgMTM3LCAyNTAsIDYsIDIyNCwgMTIzLCAyMjIsIDE4NSwgMjI0LCAxMjMsIDIyNiwgCi0gICAgMTksIDIxOCwgMTIxLCAyMjIsIDEzMSwgMjE1LCAyMjIsIDIyMiwgMTMxLCAyNTEsIDE5MSwgMjE3LCA5MSwgMjMzLCA1MSwgCi0gICAgMjI4LCA0NSwgMjI4LCA0NiwgMiwgMjQ4LCA4MCwgMjQ5LCAxNDcsIDI1MCwgMCwgMjUxLCAxOTIsIDIwNCwgMjUxLCAxOTIsIAotICAgIDI0MiwgMTI3LCAyNTEsIDE5MiwgMjUxLCAyMDgsIDI1MSwgMTkyLCAyMjYsIDE1NywgMjUxLCAxOTIsIDI1MSwgMTg5LCAKLSAgICAyMjksIDIwNSwgMjUyLCAxNzUsIDIyMSwgMTg2LCAyMzEsIDYwLCAyMTcsIDEsIDIyMywgMTIzLCAyMjYsIDc0LCAyNDQsIAotICAgIDE1OSwgMjMxLCAyMzQsIDIyMSwgMjIzLCAyNTQsIDg5LCAyMjQsIDE0NSwgMjU0LCAyNTIsIDIzMiwgMTEzLCAyNTAsIDEyNywgCi0gICAgMjMxLCA3MiwgMjI2LCAxMjksIDIxNSwgMjM4LCAyMzUsIDI1MiwgMjE1LCAyMzgsIDIyNiwgODIsIDI0NiwgMjQsIDg3LCAKLSAgICAyMzUsIDI0OSwgMjQ1LCAxMTksIDI0NSwgMTIwLCAyLCAyNDYsIDEwNCwgODAsIDQ4LCAyNTAsIDAsIDIzMSwgMjAwLCAyLCAKLSAgICAyMzIsIDEwNywgMjQ0LCA3MywgMjUwLCAwLCAyMzEsIDIwMCwgMiwgMjIzLCAxNTcsIDI0NCwgNzMsIDIwNCwgMjMxLCAyMDAsIAotICAgIDIsIDIyMywgMTU3LCAyNDQsIDczLCAyMDQsIDIzMSwgMjAwLCAyLCAyMzIsIDEwNywgMjQ0LCA3MywgMjI0LCAyMzYsIDIyNCwgCi0gICAgMjM3LCAyNDAsIDI0OCwgMjI5LCA4NCwgMjMwLCAxNTksIDIyNSwgMTE3LCAyMzAsIDE1OSwgMjI1LCAxMTgsIDIsIDk3LCAKLSAgICA4MCwgMjUzLCAyMDcsIDIzMywgNDYsIDIxMywgMTc1LCAyMzAsIDE1OCwgMjMwLCAxNTksIDIyNSwgMTE4LCAyMjYsIDIzMCwgCi0gICAgMjI4LCA3NSwgMjMwLCAxNTksIDIyNSwgMTE2LCAyNTQsIDkwLCAyLCAyNTIsIDEyOSwgMjUxLCAxMCwgMjEzLCAxNzIsIAotICAgIDI1MSwgMTAsIDIxNiwgMjU0LCAyMjMsIDE3MywgMjEzLCAxNzEsIDIxNSwgNjAsIDk3LCAyNTMsIDI0NywgMjUwLCAyLCA5NywgCi0gICAgMjIsIDE0MCwgMjA0LCAyNTAsIDM2LCAyNTMsIDI0NywgMjUwLCAyLCA5NywgMjIsIDE0MCwgMjA0LCAyNTAsIDM2LCAyNTMsIAotICAgIDI0OCwgMiwgMzcsIDEyMywgMjI2LCAxMjAsIDI1MCwgMiwgMjQ2LCAxMDQsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDM2LCAKLSAgICAyNTMsIDI0NywgMjU0LCA4OCwgMjQ2LCAxMDQsIDIyLCAyMTQsIDE1MywgMjA0LCAyNTAsIDM2LCAyNTMsIDI0NywgMTIxLCAKLSAgICAyNTEsIDEzOCwgODcsIDEyNSwgMjUxLCAxMzgsIDg3LCAyMTksIDcsIDIsIDI1MSwgNCwgOTEsIDIxOSwgNiwgMjE5LCA3LCAKLSAgICAyLCAxMjMsIDIxOSwgMzEsIDIxMiwgMzUsIDIxOSwgNywgMiwgMTM0LCAyMTksIDMxLCAyMTIsIDM0LCAyNTIsIDExNSwgCi0gICAgMjQ1LCAxNzIsIDIyNSwgMjcsIDIzMywgNDIsIDIzMSwgMjExLCAyNDIsIDE4NCwgMjIyLCAyNDcsIDIzMSwgMjExLCAyNDIsIAotICAgIDE4NCwgMjMyLCAxNTIsIDIsIDIzNSwgMjI1LCAyMjUsIDE5OSwgMjUwLCAwLCAyMzIsIDE1MiwgMiwgMjM0LCAxMzgsIDIzNCwgCi0gICAgMTM4LCAyMzIsIDE1MSwgMjA0LCAyMzIsIDE1MSwgMjUyLCA0NCwgMjUyLCA0NSwgMiwgMjUxLCA0LCA5MSwgMjUxLCAxOTAsIAotICAgIDIzMiwgMjA0LCA4NywgMjIzLCAxNzQsIDI1MSwgODYsIDI1MiwgMTg1LCAyLCAxNDAsIDgwLCA0OCwgMjQ1LCAxNDMsIDIsIAotICAgIDE0MCwgODAsIDQ4LCAyMjYsIDE5NywgMiwgMjQ1LCAzMSwgMTY0LCAyLCA0MywgNDQsIDgwLCA0OCwgMjE5LCAzOSwgMiwgCi0gICAgOTcsIDgwLCA0OCwgMjE2LCAxNCwgMiwgMjE0LCAxNTMsIDgwLCA0OCwgMjI4LCA3NSwgMTIzLCAyMTQsIDE4NCwgMjQ1LCAKLSAgICAxOTEsIDg3LCAyMzQsIDEzNiwgMjE2LCAyNDcsIDIzNSwgMjE5LCAxNiwgMzEsIDcsIDYsIDIzMywgOSwgMjM1LCAyMTksIAotICAgIDE2LCAzMSwgNywgNCwgMjMzLCA5LCAyMzUsIDIxOSwgMTYsIDMxLCAyMjcsIDE5OSwgMjM1LCAyMTksIDE2LCAzMSwgMjE3LCAKLSAgICAxODMsIDIzNSwgMjE5LCAxNiwgMzEsIDcsIDIzMywgOSwgMjQ0LCA5NiwgMjQ1LCAxNzIsIDIxNiwgOSwgMjExLCAxOTksIAotICAgIDI0MiwgMjEsIDIyNywgMTgyLCAyMiwgMjUxLCAxOTcsIDI0MSwgNjYsIDIyNSwgNTAsIDIzMCwgMjI2LCAyMTYsIDI1NSwgCi0gICAgMjQ5LCAxMTQsIDI1MiwgMTU5LCAyMTksIDEyNSwgMjI1LCA5LCAyMTgsIDE1NywgMiwgMjMwLCAyMjQsIDI0NywgMTIwLCAKLSAgICAyMzUsIDEzMSwgMTYsIDMxLCAyNTIsIDU3LCAyMTUsIDIyMCwgMjQ1LCAxNTYsIDg1LCA0MiwgMjUxLCA4NiwgNzEsIDQyLCAKLSAgICAyNTEsIDg2LCAyMzMsIDg1LCAyMjMsIDExMSwgMjUwLCAzNSwgMjMzLCA4NSwgMjUxLCAyMDgsIDI1MCwgMzUsIDIzMywgODUsIAotICAgIDIyNiwgMTU3LCAyNDcsIDI0OCwgMjMzLCA4NSwgMjUxLCAyMDgsIDI0NywgMjQ4LCA0LCAyMjYsIDE1NywgMjQ3LCAyNDgsIAotICAgIDQsIDI1MSwgMjA4LCAyNDcsIDI0OCwgMjE0LCAxNjIsIDIyMywgMTExLCAyMTUsIDIyNSwgMjQ2LCAxMDUsIDIyMywgMTExLCAKLSAgICAyMTUsIDIyNSwgMjE0LCAxNjIsIDQsIDIyMywgMTExLCAyMTUsIDIyNSwgMjQ2LCAxMDUsIDQsIDIyMywgMTExLCAyMTUsIAotICAgIDIyNSwgMzcsIDI0OSwgMTMxLCAyMjQsIDI1MiwgMjQ5LCAxMzEsIDIyNCwgMjUzLCAyLCAyNDIsIDI2LCA1MSwgMjQ5LCAKLSAgICAxMzEsIDIyNCwgMjUyLCAyMjgsIDQ5LCA0MywgMjIwLCAxNTMsIDIsIDEzNCwgMjQ3LCAxMTgsIDI1MCwgNCwgMjQ0LCAxOTEsIAotICAgIDEyMywgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDExMywgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDEzNCwgCi0gICAgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NCwgMTEsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDgxLCAKLSAgICAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE5LCAxMjUsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMjAsIAotICAgIDEyMiwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NSwgMTkzLCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgCi0gICAgMjI4LCAyMDAsIDIyNiwgMjQyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMTYsIDI0OCwgMjI2LCAyNDIsIDI1MCwgNCwgMjQ0LCAKLSAgICAxOTEsIDI0NSwgMTY4LCAyMjYsIDI0MiwgMjUwLCA0LCAyNDQsIDE5MSwgMjE1LCA3NywgMjI2LCAyNDIsIDI1MCwgNCwgCi0gICAgMjQ0LCAxOTEsIDIyNiwgMTkyLCAyNTAsIDQsIDI0NCwgMTkxLCAyMTUsIDU2LCAyNTAsIDQsIDI0NCwgMTkxLCAyMTYsIAotICAgIDE0MCwgMjUwLCA0LCAyNDQsIDE5MSwgMjQ0LCA3LCAyNTAsIDQsIDI0NCwgMTkxLCAyNDQsIDc5LCAyNTAsIDQsIDI0NCwgCi0gICAgMTkxLCAyMTksIDEyMSwgMjUwLCA0LCAyNDQsIDE5MSwgMjIwLCAxMjEsIDI1MCwgNCwgMjQ0LCAxOTEsIDI0NSwgMTkyLCAKLSAgICAyNTAsIDQsIDI0NCwgMTkxLCAyMjgsIDE5OSwgMjUwLCA0LCAyNDQsIDE5MSwgMjE2LCAyNDYsIDI1MCwgNCwgMjQ0LCAxOTEsIAotICAgIDI0NSwgMTY2LCAyNTAsIDQsIDI0NCwgMTkxLCAyMTUsIDc1LCAyMzAsIDExNywgMjQzLCAyMzAsIDIxNiwgMzYsIDIxNiwgMiwgCi0gICAgMjE4LCAxNDgsIDY0LCAyMzIsIDIzOSwgMjE5LCAxNzAsIDY0LCAyMzUsIDEzMiwgMjMwLCAxMDYsIDI0MiwgMTI0LCAyNDQsIAotICAgIDE5MCwgMjQyLCAxMjQsIDI0NCwgMTkxLCAyLCAyMTksIDc0LCAyNDUsIDEzLCAyNDQsIDE5MSwgMiwgMjE3LCAxNCwgNjQsIAotICAgIDIzNSwgNTMsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAKLSAgICAyMzAsIDExMSwgMjIsIDIxOSwgNzQsIDI0NSwgMTMsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTExLCAyMiwgCi0gICAgMjQ5LCAyMzAsIDIxNywgMjQ3LCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjA0LCAyMzAsIDExMSwgMjIsIDIxNiwgMTA0LCAKLSAgICAyNDUsIDEzLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjQyLCAyNSwgMjE5LCA3NCwgMjQ0LCAxOTEsIDIsIDI0MCwgMjQ3LCAKLSAgICAyMTEsIDIzMywgMjQ0LCAxOTAsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMTksIDc0LCAyNDUsIDEzLCAyNDQsIDE5MSwgCi0gICAgMjIxLCAyMTcsIDI0OCwgNjIsIDI0NCwgMzMsIDIyMywgODgsIDI0NCwgMTkwLCAyMTksIDc0LCAyNDQsIDE5MSwgMiwgMjQxLCAKLSAgICAyMjYsIDI0NSwgMTMsIDIxOSwgNzQsIDI0NCwgMTkxLCAyLCAyMTgsIDM0LCAyMTksIDczLCAyNDQsIDE5MCwgMjI5LCA4NywgCi0gICAgMjQ0LCAxOTAsIDI0NSwgMjMsIDI0NCwgMTkwLCAyMTQsIDE4OCwgMjQ0LCAxOTAsIDI0NCwgMTkxLCAyLCAyNDksIDIzMCwgCi0gICAgMjE3LCAyNDcsIDIyNSwgMTkyLCAyNDQsIDE5MCwgMjQ5LCAyMDEsIDI0NCwgMTkwLCAyNDksIDIwMiwgMjQ0LCAxOTAsIAotICAgIDIzNCwgNjIsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMjE2LCAxMzcsIDExNSwgMjM0LCA2MywgMjM0LCA2MiwgMjQ0LCAxOTEsIAotICAgIDIsIDIxOSwgNzQsIDI0NSwgMTMsIDIzNCwgNjIsIDI0NCwgMTkxLCAyLCAyNTAsIDAsIDI0NSwgMTMsIDI0NCwgMTkxLCAyLCAKLSAgICAyMTgsIDg4LCAyMTYsIDE5LCAyNDQsIDE5MSwgMiwgMjE4LCA4OCwgMjE2LCAyMCwgMjIsIDIxMSwgMjMzLCAyNDUsIDE1LCAKLSAgICAyNDQsIDE5MSwgMiwgMjE4LCA4OCwgMjE2LCAyMCwgMjIsIDIxNiwgMTA0LCAyNDUsIDEzLCAyNDcsIDE5MiwgMjQ0LCAxOTAsIAotICAgIDIxMSwgMjA0LCAyNDQsIDE5MCwgMjU0LCAxMDgsIDI0NCwgMTkwLCAyMjQsIDIyNywgMjQ0LCAxOTAsIDI0OSwgMTE2LCAKLSAgICAyNDQsIDE5MCwgMjI1LCAxNzAsIDI0NCwgMTkwLCAyNDQsIDE5MSwgMiwgMjMyLCAxMjYsIDY0LCAyMTUsIDIwNCwgMjQ3LCAKLSAgICAxOTIsIDI1MSwgODgsIDIyMywgODgsIDI0NCwgMTkwLCAyNDMsIDIzOSwgMjQ0LCAxOTEsIDIsIDIwNCwgMjMwLCAxMTAsIAotICAgIDI1NCwgMTA2LCAyNDQsIDE5MCwgMjQ0LCAxNTIsIDI0NCwgMTkwLCAyMTIsIDIwLCAyNDQsIDE5MCwgMjE5LCA5MSwgMjQ0LCAKLSAgICAxOTAsIDIxNiwgNzEsIDI0NCwgMTkwLCAyNDIsIDEyNSwgMjQ0LCAxOTAsIDIzMiwgMTE0LCAyNDksIDExNiwgMjQ0LCAxOTAsIAotICAgIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAyNDAsIDIwMywgMjQ0LCAxOTAsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgCi0gICAgMTExLCAyMiwgMjQ5LCAyMzAsIDIxNywgMjQ3LCAyNDQsIDE5MSwgMjIxLCAxOTAsIDIzNiwgMCwgMjQ0LCAxNTMsIDI1MywgCi0gICAgMjEzLCAyNDQsIDE5MCwgMjQ0LCA0OSwgMjQ0LCAxOTAsIDIxOSwgOTIsIDI0NCwgMTkwLCAyNDcsIDE2NSwgMjQ0LCAxOTAsIAotICAgIDI0NCwgMTkxLCAyMTEsIDIzMCwgMjMwLCAxMTAsIDI0NCwgMTkxLCAyLCAyMzEsIDg0LCAyMzEsIDE0NCwgMjQyLCAxMjQsIAotICAgIDI1MCwgMjI1LCAyNDQsIDE5MSwgMiwgMjE5LCA3NCwgMjQ1LCAxMywgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMTcsIDE0LCAKLSAgICA2NCwgMjM1LCA1MywgMjE5LCA3NCwgMjUwLCAyMjUsIDI0NCwgMTkxLCAyLCAyMDQsIDIzMCwgMTEwLCAyMTksIDc0LCAyNTAsIAotICAgIDIyNSwgMjQ0LCAxOTEsIDIsIDI0MSwgMjI2LCAyNDUsIDEzLCAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDIxMSwgMTk2LCAKLSAgICAyMTksIDc1LCAyMzQsIDYyLCAyNTAsIDIyNSwgMjQ0LCAxOTEsIDIsIDI1MCwgMCwgMjQ1LCAxMywgMjI0LCAyMjcsIDI1MCwgCi0gICAgMjI1LCAyNDQsIDE5MCwgMjQ5LCAxMTYsIDI1MCwgMjI1LCAyNDQsIDE5MCwgMjEyLCAyMCwgMjUwLCAyMjUsIDI0NCwgMTkwLCAKLSAgICAyNDQsIDE5MSwgMiwgMjI4LCA3NSwgMjQyLCAxNjMsIDI0MywgMzQsIDI0NCwgMTkxLCAyLCAyMjYsIDIxNSwgMjQzLCAzNCwgCi0gICAgMjI1LCAxNjgsIDI1MSwgMTY4LCAyNDgsIDc1LCAyMjEsIDE2OSwgMjMwLCAxNDUsIDI0MSwgMjI5LCAyMzAsIDE0NSwgMjE5LCAKLSAgICA4LCAyMzAsIDE0NSwgMjQyLCA1LCAyMjUsIDE2OCwgMjIzLCAxNTYsIDEyMywgMjQyLCAxNSwgMjI1LCAxNjgsIDIyMywgCi0gICAgMTU2LCAyNTEsIDE3OCwgMjQyLCAxMSwgMjM2LCAwLCAyNTAsIDE3OSwgMjI1LCAxNjgsIDI0MywgMjM4LCAyMjUsIDE2OCwgCi0gICAgMiwgMjI0LCAyMjcsIDI0NCwgMTkwLCAyMjUsIDE2OCwgMiwgMjQ0LCA0MSwgMjQyLCAxMCwgMjIyLCAyMDMsIDI0MSwgMjE0LCAKLSAgICAyMTgsIDE0MywgMjMyLCAxNDksIDIyMywgMTYyLCAyNTAsIDI0NCwgMjQxLCAxNjIsIDIxNSwgMjQ4LCAyNDEsIDE2MiwgCi0gICAgMjE1LCAyNDksIDIsIDI1MSwgMTE0LCAyMjgsIDUzLCAyMTUsIDI0OCwgMjMxLCAzMiwgMTkyLCAyMjMsIDE2MywgMjE4LCAKLSAgICAxNDksIDIxNSwgMjQ2LCAyMTUsIDI0NywgMjUwLCAyNDQsIDI1MSwgOTIsIDIyNiwgMTk0LCAyNTEsIDkyLCAyMTUsIDIwMSwgCi0gICAgMjUxLCA5MywgMjE4LCAxMjksIDIzMCwgMTg3LCAyNTQsIDEzMCwgMjQ0LCA5NywgMjQ1LCAxMzcsIDIyNCwgMjU1LCAyNTAsIAotICAgIDI0NCwgMjI2LCAxOTQsIDIyNCwgMjU1LCAyNTAsIDI0NCwgMjE3LCAzMiwgMjI2LCAxOTQsIDIxNywgMzIsIDI1MywgMTgwLCAKLSAgICAyMjYsIDE5NCwgMjUzLCAxODAsIDIyMywgMTE4LCAyMTMsIDI0NywgMjQ4LCA1OCwgMjE1LCAxOTIsIDI1MywgMjQyLCAyMzIsIAotICAgIDExNywgMjE1LCAyNTQsIDIzMCwgMTM5LCAyMzAsIDExNiwgMjIzLCAxNjEsIDIxOCwgNiwgMjIzLCAxNjEsIDIzMCwgMTE2LCAKLSAgICAyNTEsIDI4LCAyNTQsIDIyOSwgMjE1LCAyNDUsIDIyMCwgMTYsIDIyMiwgMTgyLCAyMTksIDEsIDIwMywgMjE1LCAyNTIsIAotICAgIDIzMiwgMjMwLCA2NywgMjE1LCAyNTIsIDIzMiwgMjMwLCAyNDksIDE5MCwgNTAsIDIyNCwgMjU1LCAyNTAsIDIyOSwgMjIzLCAKLSAgICA0NCwgMjMyLCAyMzAsIDIxNSwgMjIyLCAyNDQsIDc0LCAyMjYsIDE5NywgMjI0LCAyMzgsIDI0NywgMTIzLCAyMjgsIDc1LCAKLSAgICAyNDUsIDEyNSwgNTAsIDIxOSwgNzIsIDg3LCAyMjgsIDc1LCAyMTksIDcyLCA4NywgMjI0LCAxMjIsIDIzMiwgMTkzLCAyMzYsIAotICAgIDAsIDIzNSwgMTU3LCAyMjUsIDQxLCA4NywgMjQ3LCAxNDYsIDIyOCwgNTIsIDIzMiwgMTkzLCA4NywgMjI0LCAyMzIsIDIxMiwgCi0gICAgNDEsIDg3LCAyMjgsIDY2LCAyMTIsIDQxLCA4NywgMjUyLCAyLCAyMjgsIDc1LCAyNTIsIDEsIDI1MiwgMCwgMjMwLCAxMTYsIAotICAgIDI1MiwgMCwgMjI1LCAyMTMsIDIyOCwgNzUsIDIyNSwgMjEyLCAyNTAsIDEwMCwgMjQ5LCAxMjQsIDIzMSwgNTYsIDg3LCAKLSAgICAyMTEsIDIxOCwgODcsIDIyMywgNTksIDI1MiwgMTg3LCA4NywgMjE2LCAzNywgMjEyLCA0MSwgMjQ5LCAyNTMsIDIxOSwgCi0gICAgMjM0LCAyNTIsIDExOCwgMjUyLCAxMTYsIDIyNSwgMjQyLCAyNDksIDE3NywgMjQ5LCA4NiwgMjUyLCAxNjksIDI1MCwgMjIsIAotICAgIDQzLCAyMzIsIDkwLCAxMDgsIDE2LCAzMSwgMjI0LCAzLCAxMDgsIDE2LCAzMSwgMjU0LCAxOTIsIDEwOCwgMTYsIDMxLCAKLSAgICAyNDQsIDk2LCAxMDgsIDE2LCAzMSwgMjQ1LCAyMjMsIDEwOCwgMTYsIDMxLCAyMTIsIDQwLCAxMDgsIDE2LCAzMSwgMjU0LCAKLSAgICA0MywgMTA4LCAxNiwgMzEsIDI1NCwgNDQsIDIyMywgMTA1LCAxMDgsIDE2LCAzMSwgMjU0LCA0NCwgMjIzLCAxMDQsIDEwOCwgCi0gICAgMTYsIDMxLCAyNTQsIDQ0LCAyMTMsIDE0MywgMTA4LCAxNiwgMzEsIDI1NCwgNDQsIDIxMywgMTQyLCAxMDgsIDE2LCAzMSwgCisgICAgMTM5LCA0LCA2MSwgMTEsIDEzOSwgNCwgMjUzLCAxNjYsIDExLCAxMzksIDQsIDI1MSwgNzQsIDExLCAxMzksIDQsIDI0OSwgCisgICAgNjgsIDExLCAxMzksIDQsIDc2LCAxMSwgMTM5LCA0LCAyNDUsIDE0LCAxMSwgMTM5LCA0LCAyNDMsIDIwOSwgMTEsIDEzOSwgCisgICAgNCwgMjQyLCA2NywgMTEsIDEzOSwgNCwgNzQsIDExLCAxMzksIDQsIDIzNSwgMTUwLCAxMSwgMTM5LCA0LCAyMzUsIDI5LCAKKyAgICAxMSwgMTM5LCA0LCAxNTYsIDExLCAxMzksIDQsIDE5NCwgMTEsIDEzOSwgNCwgMjMwLCAzMCwgMTEsIDEzOSwgNCwgNzgsIAorICAgIDExLCAxMzksIDQsIDIyNiwgMTA5LCAxMSwgMTM5LCA0LCAyMjQsIDk5LCAxMSwgMTM5LCA0LCAxNTMsIDExLCAxMzksIDQsIAorICAgIDIyMiwgOTMsIDExLCAxMzksIDQsIDIxNywgMTUzLCAxMSwgMTM5LCA0LCA2OSwgMTEsIDEzOSwgNCwgMjE0LCAxMDUsIDExLCAKKyAgICAxMzksIDQsIDIxMiwgOTgsIDExLCAxMzksIDQsIDIxMSwgMTc4LCAxMSwgMTM5LCA0LCAyMTEsIDExNywgMTEsIDEzOSwgNCwgCisgICAgMjEwLCAxNTksIDExLCAyMywgMTMzLCA2LCA2MSwgMTEsIDIzLCAxMzMsIDYsIDI1MywgMTY2LCAxMSwgMjMsIDEzMywgNiwgCisgICAgMjUxLCA3NCwgMTEsIDIzLCAxMzMsIDYsIDI0OSwgNjgsIDExLCAyMywgMTMzLCA2LCA3NiwgMTEsIDIzLCAxMzMsIDYsIAorICAgIDI0NSwgMTQsIDExLCAyMywgMTMzLCA2LCAyNDMsIDIwOSwgMTEsIDIzLCAxMzMsIDYsIDI0MiwgNjcsIDExLCAyMywgMTMzLCAKKyAgICA2LCA3NCwgMTEsIDIzLCAxMzMsIDYsIDIzNSwgMTUwLCAxMSwgMjMsIDEzMywgNiwgMjM1LCAyOSwgMTEsIDIzLCAxMzMsIDYsIAorICAgIDE1NiwgMTEsIDIzLCAxMzMsIDYsIDE5NCwgMTEsIDIzLCAxMzMsIDYsIDIzMCwgMzAsIDExLCAyMywgMTMzLCA2LCA3OCwgCisgICAgMTEsIDIzLCAxMzMsIDYsIDIyNiwgMTA5LCAxMSwgMjMsIDEzMywgNiwgMjI0LCA5OSwgMTEsIDIzLCAxMzMsIDYsIDE1MywgCisgICAgMTEsIDIzLCAxMzMsIDYsIDIyMiwgOTMsIDExLCAyMywgMTMzLCA2LCAyMTcsIDE1MywgMTEsIDIzLCAxMzMsIDYsIDY5LCAKKyAgICAxMSwgMjMsIDEzMywgNiwgMjE0LCAxMDUsIDExLCAyMywgMTMzLCA2LCAyMTIsIDk4LCAxMSwgMjMsIDEzMywgNiwgMjExLCAKKyAgICAxNzgsIDExLCAyMywgMTMzLCA2LCAyMTEsIDExNywgMTEsIDIzLCAxMzMsIDYsIDIxMCwgMTU5LCAxMSwgMjMsIDEzMywgNCwgCisgICAgNjEsIDExLCAyMywgMTMzLCA0LCAyNTMsIDE2NiwgMTEsIDIzLCAxMzMsIDQsIDI1MSwgNzQsIDExLCAyMywgMTMzLCA0LCAKKyAgICAyNDksIDY4LCAxMSwgMjMsIDEzMywgNCwgNzYsIDExLCAyMywgMTMzLCA0LCAyNDUsIDE0LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjQzLCAyMDksIDExLCAyMywgMTMzLCA0LCAyNDIsIDY3LCAxMSwgMjMsIDEzMywgNCwgNzQsIDExLCAyMywgMTMzLCA0LCAKKyAgICAyMzUsIDE1MCwgMTEsIDIzLCAxMzMsIDQsIDIzNSwgMjksIDExLCAyMywgMTMzLCA0LCAxNTYsIDExLCAyMywgMTMzLCA0LCAKKyAgICAxOTQsIDExLCAyMywgMTMzLCA0LCAyMzAsIDMwLCAxMSwgMjMsIDEzMywgNCwgNzgsIDExLCAyMywgMTMzLCA0LCAyMjYsIAorICAgIDEwOSwgMTEsIDIzLCAxMzMsIDQsIDIyNCwgOTksIDExLCAyMywgMTMzLCA0LCAxNTMsIDExLCAyMywgMTMzLCA0LCAyMjIsIAorICAgIDkzLCAxMSwgMjMsIDEzMywgNCwgMjE3LCAxNTMsIDExLCAyMywgMTMzLCA0LCA2OSwgMTEsIDIzLCAxMzMsIDQsIDIxNCwgCisgICAgMTA1LCAxMSwgMjMsIDEzMywgNCwgMjEyLCA5OCwgMTEsIDIzLCAxMzMsIDQsIDIxMSwgMTc4LCAxMSwgMjMsIDEzMywgNCwgCisgICAgMjExLCAxMTcsIDExLCAyMywgMTMzLCA0LCAyMTAsIDE1OSwgMTEsIDM1LCA2LCA2MSwgMTEsIDM1LCA2LCAyNTMsIDE2NiwgCisgICAgMTEsIDM1LCA2LCAyNTEsIDc0LCAxMSwgMzUsIDYsIDI0OSwgNjgsIDExLCAzNSwgNiwgNzYsIDExLCAzNSwgNiwgMjQ1LCAKKyAgICAxNCwgMTEsIDM1LCA2LCAyNDMsIDIwOSwgMTEsIDM1LCA2LCAyNDIsIDY3LCAxMSwgMzUsIDYsIDc0LCAxMSwgMzUsIDYsIAorICAgIDIzNSwgMTUwLCAxMSwgMzUsIDYsIDIzNSwgMjksIDExLCAzNSwgNiwgMTU2LCAxMSwgMzUsIDYsIDE5NCwgMTEsIDM1LCA2LCAKKyAgICAyMzAsIDMwLCAxMSwgMzUsIDYsIDc4LCAxMSwgMzUsIDYsIDIyNiwgMTA5LCAxMSwgMzUsIDYsIDIyNCwgOTksIDExLCAzNSwgCisgICAgNiwgMTUzLCAxMSwgMzUsIDYsIDIyMiwgOTMsIDExLCAzNSwgNiwgMjE3LCAxNTMsIDExLCAzNSwgNiwgNjksIDExLCAzNSwgCisgICAgNiwgMjE0LCAxMDUsIDExLCAzNSwgNiwgMjEyLCA5OCwgMTEsIDM1LCA2LCAyMTEsIDE3OCwgMTEsIDM1LCA2LCAyMTEsIAorICAgIDExNywgMTEsIDM1LCA2LCAyMTAsIDE1OSwgMTEsIDM1LCA0LCA2MSwgMTEsIDM1LCA0LCAyNTMsIDE2NiwgMTEsIDM1LCA0LCAKKyAgICAyNTEsIDc0LCAxMSwgMzUsIDQsIDI0OSwgNjgsIDExLCAzNSwgNCwgNzYsIDExLCAzNSwgNCwgMjQ1LCAxNCwgMTEsIDM1LCAKKyAgICA0LCAyNDMsIDIwOSwgMTEsIDM1LCA0LCAyNDIsIDY3LCAxMSwgMzUsIDQsIDc0LCAxMSwgMzUsIDQsIDIzNSwgMTUwLCAxMSwgCisgICAgMzUsIDQsIDIzNSwgMjksIDExLCAzNSwgNCwgMTU2LCAxMSwgMzUsIDQsIDE5NCwgMTEsIDM1LCA0LCAyMzAsIDMwLCAxMSwgCisgICAgMzUsIDQsIDc4LCAxMSwgMzUsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDQsIDIyNCwgOTksIDExLCAzNSwgNCwgMTUzLCAxMSwgCisgICAgMzUsIDQsIDIyMiwgOTMsIDExLCAzNSwgNCwgMjE3LCAxNTMsIDExLCAzNSwgNCwgNjksIDExLCAzNSwgNCwgMjE0LCAxMDUsIAorICAgIDExLCAzNSwgNCwgMjEyLCA5OCwgMTEsIDM1LCA0LCAyMTEsIDE3OCwgMTEsIDM1LCA0LCAyMTEsIDExNywgMTEsIDM1LCA0LCAKKyAgICAyMTAsIDE1OSwgMTEsIDM1LCAyMywgNiwgNjEsIDExLCAzNSwgMjMsIDYsIDI1MywgMTY2LCAxMSwgMzUsIDIzLCA2LCAyNTEsIAorICAgIDc0LCAxMSwgMzUsIDIzLCA2LCAyNDksIDY4LCAxMSwgMzUsIDIzLCA2LCA3NiwgMTEsIDM1LCAyMywgNiwgMjQ1LCAxNCwgCisgICAgMTEsIDM1LCAyMywgNiwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDYsIDI0MiwgNjcsIDExLCAzNSwgMjMsIDYsIDc0LCAxMSwgCisgICAgMzUsIDIzLCA2LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgNiwgMjM1LCAyOSwgMTEsIDM1LCAyMywgNiwgMTU2LCAxMSwgMzUsIAorICAgIDIzLCA2LCAxOTQsIDExLCAzNSwgMjMsIDYsIDIzMCwgMzAsIDExLCAzNSwgMjMsIDYsIDc4LCAxMSwgMzUsIDIzLCA2LCAKKyAgICAyMjYsIDEwOSwgMTEsIDM1LCAyMywgNiwgMjI0LCA5OSwgMTEsIDM1LCAyMywgNiwgMTUzLCAxMSwgMzUsIDIzLCA2LCAyMjIsIAorICAgIDkzLCAxMSwgMzUsIDIzLCA2LCAyMTcsIDE1MywgMTEsIDM1LCAyMywgNiwgNjksIDExLCAzNSwgMjMsIDYsIDIxNCwgMTA1LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMTIsIDk4LCAxMSwgMzUsIDIzLCA2LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgNiwgMjExLCAxMTcsIAorICAgIDExLCAzNSwgMjMsIDYsIDIxMCwgMTU5LCAxMSwgMzUsIDIzLCA0LCA2MSwgMTEsIDM1LCAyMywgNCwgMjUzLCAxNjYsIDExLCAKKyAgICAzNSwgMjMsIDQsIDI1MSwgNzQsIDExLCAzNSwgMjMsIDQsIDI0OSwgNjgsIDExLCAzNSwgMjMsIDQsIDc2LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyNDUsIDE0LCAxMSwgMzUsIDIzLCA0LCAyNDMsIDIwOSwgMTEsIDM1LCAyMywgNCwgMjQyLCA2NywgMTEsIDM1LCAKKyAgICAyMywgNCwgNzQsIDExLCAzNSwgMjMsIDQsIDIzNSwgMTUwLCAxMSwgMzUsIDIzLCA0LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCAKKyAgICA0LCAxNTYsIDExLCAzNSwgMjMsIDQsIDE5NCwgMTEsIDM1LCAyMywgNCwgMjMwLCAzMCwgMTEsIDM1LCAyMywgNCwgNzgsIAorICAgIDExLCAzNSwgMjMsIDQsIDIyNiwgMTA5LCAxMSwgMzUsIDIzLCA0LCAyMjQsIDk5LCAxMSwgMzUsIDIzLCA0LCAxNTMsIDExLCAKKyAgICAzNSwgMjMsIDQsIDIyMiwgOTMsIDExLCAzNSwgMjMsIDQsIDIxNywgMTUzLCAxMSwgMzUsIDIzLCA0LCA2OSwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjE0LCAxMDUsIDExLCAzNSwgMjMsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTc4LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyMTEsIDExNywgMTEsIDM1LCAyMywgNCwgMjEwLCAxNTksIDExLCAzNSwgMzIsIDYsIDYxLCAxMSwgMzUsIDMyLCAKKyAgICA2LCAyNTMsIDE2NiwgMTEsIDM1LCAzMiwgNiwgMjUxLCA3NCwgMTEsIDM1LCAzMiwgNiwgMjQ5LCA2OCwgMTEsIDM1LCAzMiwgCisgICAgNiwgNzYsIDExLCAzNSwgMzIsIDYsIDI0NSwgMTQsIDExLCAzNSwgMzIsIDYsIDI0MywgMjA5LCAxMSwgMzUsIDMyLCA2LCAKKyAgICAyNDIsIDY3LCAxMSwgMzUsIDMyLCA2LCA3NCwgMTEsIDM1LCAzMiwgNiwgMjM1LCAxNTAsIDExLCAzNSwgMzIsIDYsIDIzNSwgCisgICAgMjksIDExLCAzNSwgMzIsIDYsIDE1NiwgMTEsIDM1LCAzMiwgNiwgMTk0LCAxMSwgMzUsIDMyLCA2LCAyMzAsIDMwLCAxMSwgCisgICAgMzUsIDMyLCA2LCA3OCwgMTEsIDM1LCAzMiwgNiwgMjI2LCAxMDksIDExLCAzNSwgMzIsIDYsIDIyNCwgOTksIDExLCAzNSwgCisgICAgMzIsIDYsIDE1MywgMTEsIDM1LCAzMiwgNiwgMjIyLCA5MywgMTEsIDM1LCAzMiwgNiwgMjE3LCAxNTMsIDExLCAzNSwgMzIsIAorICAgIDYsIDY5LCAxMSwgMzUsIDMyLCA2LCAyMTQsIDEwNSwgMTEsIDM1LCAzMiwgNiwgMjEyLCA5OCwgMTEsIDM1LCAzMiwgNiwgCisgICAgMjExLCAxNzgsIDExLCAzNSwgMzIsIDYsIDIxMSwgMTE3LCAxMSwgMzUsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAzMiwgCisgICAgNCwgNjEsIDExLCAzNSwgMzIsIDQsIDI1MywgMTY2LCAxMSwgMzUsIDMyLCA0LCAyNTEsIDc0LCAxMSwgMzUsIDMyLCA0LCAKKyAgICAyNDksIDY4LCAxMSwgMzUsIDMyLCA0LCA3NiwgMTEsIDM1LCAzMiwgNCwgMjQ1LCAxNCwgMTEsIDM1LCAzMiwgNCwgMjQzLCAKKyAgICAyMDksIDExLCAzNSwgMzIsIDQsIDI0MiwgNjcsIDExLCAzNSwgMzIsIDQsIDc0LCAxMSwgMzUsIDMyLCA0LCAyMzUsIDE1MCwgCisgICAgMTEsIDM1LCAzMiwgNCwgMjM1LCAyOSwgMTEsIDM1LCAzMiwgNCwgMTU2LCAxMSwgMzUsIDMyLCA0LCAxOTQsIDExLCAzNSwgCisgICAgMzIsIDQsIDIzMCwgMzAsIDExLCAzNSwgMzIsIDQsIDc4LCAxMSwgMzUsIDMyLCA0LCAyMjYsIDEwOSwgMTEsIDM1LCAzMiwgCisgICAgNCwgMjI0LCA5OSwgMTEsIDM1LCAzMiwgNCwgMTUzLCAxMSwgMzUsIDMyLCA0LCAyMjIsIDkzLCAxMSwgMzUsIDMyLCA0LCAKKyAgICAyMTcsIDE1MywgMTEsIDM1LCAzMiwgNCwgNjksIDExLCAzNSwgMzIsIDQsIDIxNCwgMTA1LCAxMSwgMzUsIDMyLCA0LCAyMTIsIAorICAgIDk4LCAxMSwgMzUsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAzMiwgNCwgMjExLCAxMTcsIDExLCAzNSwgMzIsIDQsIDIxMCwgCisgICAgMTU5LCAxMSwgMzUsIDIzLCAzMiwgNiwgNjEsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTMsIDE2NiwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDI1MSwgNzQsIDExLCAzNSwgMjMsIDMyLCA2LCAyNDksIDY4LCAxMSwgMzUsIDIzLCAzMiwgNiwgNzYsIDExLCAzNSwgCisgICAgMjMsIDMyLCA2LCAyNDUsIDE0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQzLCAyMDksIDExLCAzNSwgMjMsIDMyLCA2LCAyNDIsIAorICAgIDY3LCAxMSwgMzUsIDIzLCAzMiwgNiwgNzQsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzUsIDE1MCwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDIzNSwgMjksIDExLCAzNSwgMjMsIDMyLCA2LCAxNTYsIDExLCAzNSwgMjMsIDMyLCA2LCAxOTQsIDExLCAzNSwgMjMsIAorICAgIDMyLCA2LCAyMzAsIDMwLCAxMSwgMzUsIDIzLCAzMiwgNiwgNzgsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjYsIDEwOSwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIyNCwgOTksIDExLCAzNSwgMjMsIDMyLCA2LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjIsIAorICAgIDkzLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjE3LCAxNTMsIDExLCAzNSwgMjMsIDMyLCA2LCA2OSwgMTEsIDM1LCAyMywgMzIsIAorICAgIDYsIDIxNCwgMTA1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjEyLCA5OCwgMTEsIDM1LCAyMywgMzIsIDYsIDIxMSwgMTc4LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNiwgMjExLCAxMTcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTAsIDE1OSwgMTEsIDM1LCAyMywgMzIsIDQsIAorICAgIDYxLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjUzLCAxNjYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTEsIDc0LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMjQ5LCA2OCwgMTEsIDM1LCAyMywgMzIsIDQsIDc2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQ1LCAxNCwgMTEsIAorICAgIDM1LCAyMywgMzIsIDQsIDI0MywgMjA5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjQyLCA2NywgMTEsIDM1LCAyMywgMzIsIDQsIAorICAgIDc0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjM1LCAxNTAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDI5LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNCwgMTU2LCAxMSwgMzUsIDIzLCAzMiwgNCwgMTk0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMwLCAzMCwgMTEsIDM1LCAKKyAgICAyMywgMzIsIDQsIDc4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAxMDksIDExLCAzNSwgMjMsIDMyLCA0LCAyMjQsIDk5LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjIyLCA5MywgMTEsIDM1LCAyMywgMzIsIDQsIAorICAgIDIxNywgMTUzLCAxMSwgMzUsIDIzLCAzMiwgNCwgNjksIDExLCAzNSwgMjMsIDMyLCA0LCAyMTQsIDEwNSwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDIxMiwgOTgsIDExLCAzNSwgMjMsIDMyLCA0LCAyMTEsIDE3OCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMSwgMTE3LCAKKyAgICAxMSwgMzUsIDIzLCAzMiwgNCwgMjEwLCAxNTksIDExLCAyMzAsIDE0MywgNiwgNjEsIDExLCAyMzAsIDE0MywgNiwgMjUzLCAKKyAgICAxNjYsIDExLCAyMzAsIDE0MywgNiwgMjUxLCA3NCwgMTEsIDIzMCwgMTQzLCA2LCAyNDksIDY4LCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDc2LCAxMSwgMjMwLCAxNDMsIDYsIDI0NSwgMTQsIDExLCAyMzAsIDE0MywgNiwgMjQzLCAyMDksIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjQyLCA2NywgMTEsIDIzMCwgMTQzLCA2LCA3NCwgMTEsIDIzMCwgMTQzLCA2LCAyMzUsIDE1MCwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMzUsIDI5LCAxMSwgMjMwLCAxNDMsIDYsIDE1NiwgMTEsIDIzMCwgMTQzLCA2LCAxOTQsIDExLCAyMzAsIDE0MywgNiwgCisgICAgMjMwLCAzMCwgMTEsIDIzMCwgMTQzLCA2LCA3OCwgMTEsIDIzMCwgMTQzLCA2LCAyMjYsIDEwOSwgMTEsIDIzMCwgMTQzLCA2LCAKKyAgICAyMjQsIDk5LCAxMSwgMjMwLCAxNDMsIDYsIDE1MywgMTEsIDIzMCwgMTQzLCA2LCAyMjIsIDkzLCAxMSwgMjMwLCAxNDMsIDYsIAorICAgIDIxNywgMTUzLCAxMSwgMjMwLCAxNDMsIDYsIDY5LCAxMSwgMjMwLCAxNDMsIDYsIDIxNCwgMTA1LCAxMSwgMjMwLCAxNDMsIAorICAgIDYsIDIxMiwgOTgsIDExLCAyMzAsIDE0MywgNiwgMjExLCAxNzgsIDExLCAyMzAsIDE0MywgNiwgMjExLCAxMTcsIDExLCAKKyAgICAyMzAsIDE0MywgNiwgMjEwLCAxNTksIDExLCAyMzAsIDE0MywgNCwgNjEsIDExLCAyMzAsIDE0MywgNCwgMjUzLCAxNjYsIAorICAgIDExLCAyMzAsIDE0MywgNCwgMjUxLCA3NCwgMTEsIDIzMCwgMTQzLCA0LCAyNDksIDY4LCAxMSwgMjMwLCAxNDMsIDQsIDc2LCAKKyAgICAxMSwgMjMwLCAxNDMsIDQsIDI0NSwgMTQsIDExLCAyMzAsIDE0MywgNCwgMjQzLCAyMDksIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjQyLCA2NywgMTEsIDIzMCwgMTQzLCA0LCA3NCwgMTEsIDIzMCwgMTQzLCA0LCAyMzUsIDE1MCwgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMzUsIDI5LCAxMSwgMjMwLCAxNDMsIDQsIDE1NiwgMTEsIDIzMCwgMTQzLCA0LCAxOTQsIDExLCAyMzAsIDE0MywgNCwgCisgICAgMjMwLCAzMCwgMTEsIDIzMCwgMTQzLCA0LCA3OCwgMTEsIDIzMCwgMTQzLCA0LCAyMjYsIDEwOSwgMTEsIDIzMCwgMTQzLCA0LCAKKyAgICAyMjQsIDk5LCAxMSwgMjMwLCAxNDMsIDQsIDE1MywgMTEsIDIzMCwgMTQzLCA0LCAyMjIsIDkzLCAxMSwgMjMwLCAxNDMsIDQsIAorICAgIDIxNywgMTUzLCAxMSwgMjMwLCAxNDMsIDQsIDY5LCAxMSwgMjMwLCAxNDMsIDQsIDIxNCwgMTA1LCAxMSwgMjMwLCAxNDMsIAorICAgIDQsIDIxMiwgOTgsIDExLCAyMzAsIDE0MywgNCwgMjExLCAxNzgsIDExLCAyMzAsIDE0MywgNCwgMjExLCAxMTcsIDExLCAKKyAgICAyMzAsIDE0MywgNCwgMjEwLCAxNTksIDExLCAzMiwgNCwgMjQ3LCAxMjcsIDc0LCAxMSwgMzIsIDQsIDI0NywgMTI3LCAyMzUsIAorICAgIDE1MCwgMTEsIDIzLCA2LCAyNTQsIDE1MSwgMTEsIDIzLCA2LCAyNTIsIDM0LCAxMSwgMjMsIDYsIDI0MywgMTE0LCAxMSwgCisgICAgMjMsIDYsIDI0OCwgNjIsIDExLCAyMywgNiwgMjQ1LCAxMDgsIDExLCAyMywgNiwgMjEwLCA4NSwgMTEsIDIzLCA2LCAyNDUsIAorICAgIDcxLCAxMSwgMjMsIDYsIDIxNiwgMTgwLCAxMSwgMjMsIDYsIDIzNSwgMTkyLCAxMSwgMjMsIDYsIDIzNCwgMjI4LCAxMSwgCisgICAgMjMsIDYsIDIzMywgMTA0LCAxMSwgMjMsIDYsIDIzMCwgMTA3LCAxMSwgMjMsIDYsIDIyNywgMjQyLCAxMSwgMjMsIDYsIAorICAgIDIxMSwgMTU3LCAxMSwgMjMsIDYsIDIyNiwgMjAzLCAxMSwgMjMsIDYsIDIyNSwgMTExLCAxMSwgMjMsIDYsIDIyMywgNDAsIAorICAgIDExLCAyMywgNiwgMjE2LCAxODEsIDg3LCAxMSwgMjMsIDYsIDIxOSwgMTc5LCAxMSwgMjMsIDYsIDIxNywgNDIsIDExLCAyMywgCisgICAgNiwgMjE0LCAxNTcsIDExLCAyMywgNiwgMjI1LCAxMzYsIDExLCAyMywgNiwgMjUwLCAxMTgsIDExLCAyMywgNiwgMjI0LCAKKyAgICAxNjQsIDExLCAyMywgNiwgMjI2LCAyMDUsIDExLCAyMywgMjI5LCAyMjYsIDExLCAyMywgNCwgMjU0LCAxNTEsIDExLCAyMywgCisgICAgNCwgMjUyLCAzNCwgMTEsIDIzLCA0LCAyNDMsIDExNCwgMTEsIDIzLCA0LCAyNDgsIDYyLCAxMSwgMjMsIDQsIDI0NSwgMTA4LCAKKyAgICAxMSwgMjMsIDQsIDIxMCwgODUsIDExLCAyMywgNCwgMjQ1LCA3MSwgMTEsIDIzLCA0LCAyMTYsIDE4MCwgMTEsIDIzLCA0LCAKKyAgICAyMzUsIDE5MiwgMTEsIDIzLCA0LCAyMzQsIDIyOCwgMTEsIDIzLCA0LCAyMzMsIDEwNCwgMTEsIDIzLCA0LCAyMzAsIDEwNywgCisgICAgMTEsIDIzLCA0LCAyMjcsIDI0MiwgMTEsIDIzLCA0LCAyMTEsIDE1NywgMTEsIDIzLCA0LCAyMjYsIDIwMywgMTEsIDIzLCA0LCAKKyAgICAyMjUsIDExMSwgMTEsIDIzLCA0LCAyMjMsIDQwLCAxMSwgMjMsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDIzLCA0LCAyMTksIAorICAgIDE3OSwgMTEsIDIzLCA0LCAyMTcsIDQyLCAxMSwgMjMsIDQsIDIxNCwgMTU3LCAxMSwgMjMsIDQsIDIyNSwgMTM2LCAxMSwgCisgICAgMjMsIDQsIDI1MCwgMTE4LCAxMSwgMjMsIDQsIDIyNCwgMTY0LCAxMSwgMjMsIDQsIDIyNiwgMjA1LCAxMSwgMjMsIDIyNiwgCisgICAgMSwgMjQ3LCAyNDEsIDExLCAyMywgMjQ1LCAxMDksIDg3LCAxMSwgMjMsIDIxNiwgMTgxLCA4NywgMTEsIDIzLCAyMzQsIAorICAgIDIyOSwgODcsIDExLCAyMywgMjI1LCAxMzcsIDg3LCAxMSwgMjMsIDIyMywgNDEsIDg3LCAxMSwgMjMsIDIyNSwgMTEyLCA4NywgCisgICAgMTEsIDMyLCA2LCAyNTQsIDE1MSwgMTEsIDMyLCA2LCAyNTIsIDM0LCAxMSwgMzIsIDYsIDI0MywgMTE0LCAxMSwgMzIsIDYsIAorICAgIDI0OCwgNjIsIDExLCAzMiwgNiwgMjQ1LCAxMDgsIDExLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDMyLCA2LCAyNDUsIDcxLCAxMSwgCisgICAgMzIsIDYsIDIxNiwgMTgwLCAxMSwgMzIsIDYsIDIzNSwgMTkyLCAxMSwgMzIsIDYsIDIzNCwgMjI4LCAxMSwgMzIsIDYsIAorICAgIDIzMywgMTA0LCAxMSwgMzIsIDYsIDIzMCwgMTA3LCAxMSwgMzIsIDYsIDIyNywgMjQyLCAxMSwgMzIsIDYsIDIxMSwgMTU3LCAKKyAgICAxMSwgMzIsIDYsIDIyNiwgMjAzLCAxMSwgMzIsIDYsIDIyNSwgMTExLCAxMSwgMzIsIDYsIDIyMywgNDAsIDExLCAzMiwgNiwgCisgICAgMjE2LCAxODEsIDg3LCAxMSwgMzIsIDYsIDIxOSwgMTc5LCAxMSwgMzIsIDYsIDIxNywgNDIsIDExLCAzMiwgNiwgMjE0LCAKKyAgICAxNTcsIDExLCAzMiwgNiwgMjI1LCAxMzYsIDExLCAzMiwgNiwgMjUwLCAxMTgsIDExLCAzMiwgNiwgMjI0LCAxNjQsIDExLCAKKyAgICAzMiwgNiwgMjI2LCAyMDUsIDExLCAzMiwgMjI5LCAyMjYsIDExLCAzMiwgNCwgMjU0LCAxNTEsIDExLCAzMiwgNCwgMjUyLCAKKyAgICAzNCwgMTEsIDMyLCA0LCAyNDMsIDExNCwgMTEsIDMyLCA0LCAyNDgsIDYyLCAxMSwgMzIsIDQsIDI0NSwgMTA4LCAxMSwgMzIsIAorICAgIDQsIDIxMCwgODUsIDExLCAzMiwgNCwgMjQ1LCA3MSwgMTEsIDMyLCA0LCAyMTYsIDE4MCwgMTEsIDMyLCA0LCAyMzUsIDE5MiwgCisgICAgMTEsIDMyLCA0LCAyMzQsIDIyOCwgMTEsIDMyLCA0LCAyMzMsIDEwNCwgMTEsIDMyLCA0LCAyMzAsIDEwNywgMTEsIDMyLCA0LCAKKyAgICAyMjcsIDI0MiwgMTEsIDMyLCA0LCAyMTEsIDE1NywgMTEsIDMyLCA0LCAyMjYsIDIwMywgMTEsIDMyLCA0LCAyMjUsIDExMSwgCisgICAgMTEsIDMyLCA0LCAyMjMsIDQwLCAxMSwgMzIsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDMyLCA0LCAyMTksIDE3OSwgMTEsIDMyLCAKKyAgICA0LCAyMTcsIDQyLCAxMSwgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMzIsIDQsIDIyNSwgMTM2LCAxMSwgMzIsIDQsIDI1MCwgCisgICAgMTE4LCAxMSwgMzIsIDQsIDIyNCwgMTY0LCAxMSwgMzIsIDQsIDIyNiwgMjA1LCAxMSwgMzIsIDIyNiwgMSwgMjQ3LCAyNDEsIAorICAgIDExLCAzMiwgMjQ1LCAxMDksIDg3LCAxMSwgMzIsIDIxNiwgMTgxLCA4NywgMTEsIDMyLCAyMzQsIDIyOSwgODcsIDExLCAzMiwgCisgICAgMjI1LCAxMzcsIDg3LCAxMSwgMzIsIDIyMywgNDEsIDg3LCAxMSwgMzIsIDIyNSwgMTEyLCA4NywgMTEsIDIzLCAzMiwgNiwgCisgICAgMjU0LCAxNTEsIDExLCAyMywgMzIsIDYsIDI1MiwgMzQsIDExLCAyMywgMzIsIDYsIDI0MywgMTE0LCAxMSwgMjMsIDMyLCA2LCAKKyAgICAyNDgsIDYyLCAxMSwgMjMsIDMyLCA2LCAyNDUsIDEwOCwgMTEsIDIzLCAzMiwgNiwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNiwgCisgICAgMjQ1LCA3MSwgMTEsIDIzLCAzMiwgNiwgMjE2LCAxODAsIDExLCAyMywgMzIsIDYsIDIzNSwgMTkyLCAxMSwgMjMsIDMyLCA2LCAKKyAgICAyMzQsIDIyOCwgMTEsIDIzLCAzMiwgNiwgMjMzLCAxMDQsIDExLCAyMywgMzIsIDYsIDIzMCwgMTA3LCAxMSwgMjMsIDMyLCAKKyAgICA2LCAyMjcsIDI0MiwgMTEsIDIzLCAzMiwgNiwgMjExLCAxNTcsIDExLCAyMywgMzIsIDYsIDIyNiwgMjAzLCAxMSwgMjMsIAorICAgIDMyLCA2LCAyMjUsIDExMSwgMTEsIDIzLCAzMiwgNiwgMjIzLCA0MCwgMTEsIDIzLCAzMiwgNiwgMjE2LCAxODEsIDg3LCAxMSwgCisgICAgMjMsIDMyLCA2LCAyMTksIDE3OSwgMTEsIDIzLCAzMiwgNiwgMjE3LCA0MiwgMTEsIDIzLCAzMiwgNiwgMjE0LCAxNTcsIDExLCAKKyAgICAyMywgMzIsIDYsIDIyNSwgMTM2LCAxMSwgMjMsIDMyLCA2LCAyNTAsIDExOCwgMTEsIDIzLCAzMiwgNiwgMjI0LCAxNjQsIAorICAgIDExLCAyMywgMzIsIDYsIDIyNiwgMjA1LCAxMSwgMjMsIDMyLCAyMjksIDIyNiwgMTEsIDIzLCAzMiwgNCwgMjU0LCAxNTEsIAorICAgIDExLCAyMywgMzIsIDQsIDI1MiwgMzQsIDExLCAyMywgMzIsIDQsIDI0MywgMTE0LCAxMSwgMjMsIDMyLCA0LCAyNDgsIDYyLCAKKyAgICAxMSwgMjMsIDMyLCA0LCAyNDUsIDEwOCwgMTEsIDIzLCAzMiwgNCwgMjEwLCA4NSwgMTEsIDIzLCAzMiwgNCwgMjQ1LCA3MSwgCisgICAgMTEsIDIzLCAzMiwgNCwgMjE2LCAxODAsIDExLCAyMywgMzIsIDQsIDIzNSwgMTkyLCAxMSwgMjMsIDMyLCA0LCAyMzQsIAorICAgIDIyOCwgMTEsIDIzLCAzMiwgNCwgMjMzLCAxMDQsIDExLCAyMywgMzIsIDQsIDIzMCwgMTA3LCAxMSwgMjMsIDMyLCA0LCAKKyAgICAyMjcsIDI0MiwgMTEsIDIzLCAzMiwgNCwgMjExLCAxNTcsIDExLCAyMywgMzIsIDQsIDIyNiwgMjAzLCAxMSwgMjMsIDMyLCAKKyAgICA0LCAyMjUsIDExMSwgMTEsIDIzLCAzMiwgNCwgMjIzLCA0MCwgMTEsIDIzLCAzMiwgNCwgNDAsIDIxOSwgMTc5LCAxMSwgMjMsIAorICAgIDMyLCA0LCAyMTksIDE3OSwgMTEsIDIzLCAzMiwgNCwgMjE3LCA0MiwgMTEsIDIzLCAzMiwgNCwgMjE0LCAxNTcsIDExLCAyMywgCisgICAgMzIsIDQsIDIyNSwgMTM2LCAxMSwgMjMsIDMyLCA0LCAyNTAsIDExOCwgMTEsIDIzLCAzMiwgNCwgMjI0LCAxNjQsIDExLCAKKyAgICAyMywgMzIsIDQsIDIyNiwgMjA1LCAxMSwgMjMsIDMyLCAyMjYsIDEsIDI0NywgMjQxLCAxMSwgMjMsIDMyLCAyNDUsIDEwOSwgCisgICAgODcsIDExLCAyMywgMzIsIDIxNiwgMTgxLCA4NywgMTEsIDIzLCAzMiwgMjM0LCAyMjksIDg3LCAxMSwgMjMsIDMyLCAyMjUsIAorICAgIDEzNywgODcsIDExLCAyMywgMzIsIDIyMywgNDEsIDg3LCAxMSwgMjMsIDMyLCAyMjUsIDExMiwgODcsIDExLCAzNSwgMjMsIAorICAgIDYsIDI1NCwgMTUxLCAxMSwgMzUsIDIzLCA2LCAyNTIsIDM0LCAxMSwgMzUsIDIzLCA2LCAyNDMsIDExNCwgMTEsIDM1LCAyMywgCisgICAgNiwgMjQ4LCA2MiwgMTEsIDM1LCAyMywgNiwgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDYsIDIxMCwgODUsIDExLCAzNSwgMjMsIAorICAgIDYsIDI0NSwgNzEsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTgwLCAxMSwgMzUsIDIzLCA2LCAyMzUsIDE5MiwgMTEsIDM1LCAyMywgCisgICAgNiwgMjM0LCAyMjgsIDExLCAzNSwgMjMsIDYsIDIzMywgMTA0LCAxMSwgMzUsIDIzLCA2LCAyMzAsIDEwNywgMTEsIDM1LCAKKyAgICAyMywgNiwgMjI3LCAyNDIsIDExLCAzNSwgMjMsIDYsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCA2LCAyMjYsIDIwMywgMTEsIAorICAgIDM1LCAyMywgNiwgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDYsIDIyMywgNDAsIDExLCAzNSwgMjMsIDYsIDIxNiwgMTgxLCA4NywgCisgICAgMTEsIDM1LCAyMywgNiwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDYsIDIxNywgNDIsIDExLCAzNSwgMjMsIDYsIDIxNCwgMTU3LCAKKyAgICAxMSwgMzUsIDIzLCA2LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgNiwgMjUwLCAxMTgsIDExLCAzNSwgMjMsIDYsIDIyNCwgCisgICAgMTY0LCAxMSwgMzUsIDIzLCA2LCAyMjYsIDIwNSwgMTEsIDM1LCAyMywgMjI5LCAyMjYsIDExLCAzNSwgMjMsIDQsIDI1NCwgCisgICAgMTUxLCAxMSwgMzUsIDIzLCA0LCAyNTIsIDM0LCAxMSwgMzUsIDIzLCA0LCAyNDMsIDExNCwgMTEsIDM1LCAyMywgNCwgMjQ4LCAKKyAgICA2MiwgMTEsIDM1LCAyMywgNCwgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDQsIDIxMCwgODUsIDExLCAzNSwgMjMsIDQsIDI0NSwgCisgICAgNzEsIDExLCAzNSwgMjMsIDQsIDIxNiwgMTgwLCAxMSwgMzUsIDIzLCA0LCAyMzUsIDE5MiwgMTEsIDM1LCAyMywgNCwgMjM0LCAKKyAgICAyMjgsIDExLCAzNSwgMjMsIDQsIDIzMywgMTA0LCAxMSwgMzUsIDIzLCA0LCAyMzAsIDEwNywgMTEsIDM1LCAyMywgNCwgCisgICAgMjI3LCAyNDIsIDExLCAzNSwgMjMsIDQsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCA0LCAyMjYsIDIwMywgMTEsIDM1LCAyMywgCisgICAgNCwgMjI1LCAxMTEsIDExLCAzNSwgMjMsIDQsIDIyMywgNDAsIDExLCAzNSwgMjMsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDM1LCAKKyAgICAyMywgNCwgMjE5LCAxNzksIDExLCAzNSwgMjMsIDQsIDIxNywgNDIsIDExLCAzNSwgMjMsIDQsIDIxNCwgMTU3LCAxMSwgMzUsIAorICAgIDIzLCA0LCAyMjUsIDEzNiwgMTEsIDM1LCAyMywgNCwgMjUwLCAxMTgsIDExLCAzNSwgMjMsIDQsIDIyNCwgMTY0LCAxMSwgCisgICAgMzUsIDIzLCA0LCAyMjYsIDIwNSwgMTEsIDM1LCAyMywgMjI2LCAxLCAyNDcsIDI0MSwgMTEsIDM1LCAyMywgMjQ1LCAxMDksIAorICAgIDg3LCAxMSwgMzUsIDIzLCAyMTYsIDE4MSwgODcsIDExLCAzNSwgMjMsIDIzNCwgMjI5LCA4NywgMTEsIDM1LCAyMywgMjI1LCAKKyAgICAxMzcsIDg3LCAxMSwgMzUsIDIzLCAyMjMsIDQxLCA4NywgMTEsIDM1LCAyMywgMjI1LCAxMTIsIDg3LCAxMSwgMzUsIDIzLCAKKyAgICAzMiwgNiwgMjU0LCAxNTEsIDExLCAzNSwgMjMsIDMyLCA2LCAyNTIsIDM0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQzLCAxMTQsIAorICAgIDExLCAzNSwgMjMsIDMyLCA2LCAyNDgsIDYyLCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCAxMDgsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMTAsIDg1LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjQ1LCA3MSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNiwgMTgwLCAxMSwgCisgICAgMzUsIDIzLCAzMiwgNiwgMjM1LCAxOTIsIDExLCAzNSwgMjMsIDMyLCA2LCAyMzQsIDIyOCwgMTEsIDM1LCAyMywgMzIsIDYsIAorICAgIDIzMywgMTA0LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjMwLCAxMDcsIDExLCAzNSwgMjMsIDMyLCA2LCAyMjcsIDI0MiwgMTEsIAorICAgIDM1LCAyMywgMzIsIDYsIDIxMSwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjI2LCAyMDMsIDExLCAzNSwgMjMsIDMyLCA2LCAKKyAgICAyMjUsIDExMSwgMTEsIDM1LCAyMywgMzIsIDYsIDIyMywgNDAsIDExLCAzNSwgMjMsIDMyLCA2LCAyMTYsIDE4MSwgODcsIAorICAgIDExLCAzNSwgMjMsIDMyLCA2LCAyMTksIDE3OSwgMTEsIDM1LCAyMywgMzIsIDYsIDIxNywgNDIsIDExLCAzNSwgMjMsIDMyLCAKKyAgICA2LCAyMTQsIDE1NywgMTEsIDM1LCAyMywgMzIsIDYsIDIyNSwgMTM2LCAxMSwgMzUsIDIzLCAzMiwgNiwgMjUwLCAxMTgsIAorICAgIDExLCAzNSwgMjMsIDMyLCA2LCAyMjQsIDE2NCwgMTEsIDM1LCAyMywgMzIsIDYsIDIyNiwgMjA1LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgMjI5LCAyMjYsIDExLCAzNSwgMjMsIDMyLCA0LCAyNTQsIDE1MSwgMTEsIDM1LCAyMywgMzIsIDQsIDI1MiwgMzQsIDExLCAKKyAgICAzNSwgMjMsIDMyLCA0LCAyNDMsIDExNCwgMTEsIDM1LCAyMywgMzIsIDQsIDI0OCwgNjIsIDExLCAzNSwgMjMsIDMyLCA0LCAKKyAgICAyNDUsIDEwOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIxMCwgODUsIDExLCAzNSwgMjMsIDMyLCA0LCAyNDUsIDcxLCAxMSwgMzUsIAorICAgIDIzLCAzMiwgNCwgMjE2LCAxODAsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzUsIDE5MiwgMTEsIDM1LCAyMywgMzIsIDQsIDIzNCwgCisgICAgMjI4LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjMzLCAxMDQsIDExLCAzNSwgMjMsIDMyLCA0LCAyMzAsIDEwNywgMTEsIDM1LCAKKyAgICAyMywgMzIsIDQsIDIyNywgMjQyLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjExLCAxNTcsIDExLCAzNSwgMjMsIDMyLCA0LCAyMjYsIAorICAgIDIwMywgMTEsIDM1LCAyMywgMzIsIDQsIDIyNSwgMTExLCAxMSwgMzUsIDIzLCAzMiwgNCwgMjIzLCA0MCwgMTEsIDM1LCAyMywgCisgICAgMzIsIDQsIDQwLCAyMTksIDE3OSwgMTEsIDM1LCAyMywgMzIsIDQsIDIxOSwgMTc5LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjE3LCAKKyAgICA0MiwgMTEsIDM1LCAyMywgMzIsIDQsIDIxNCwgMTU3LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI1LCAxMzYsIDExLCAzNSwgMjMsIAorICAgIDMyLCA0LCAyNTAsIDExOCwgMTEsIDM1LCAyMywgMzIsIDQsIDIyNCwgMTY0LCAxMSwgMzUsIDIzLCAzMiwgNCwgMjI2LCAKKyAgICAyMDUsIDExLCAzNSwgMjMsIDMyLCAyMjYsIDEsIDI0NywgMjQxLCAxMSwgMzUsIDIzLCAzMiwgMjQ1LCAxMDksIDg3LCAxMSwgCisgICAgMzUsIDIzLCAzMiwgMjE2LCAxODEsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjM0LCAyMjksIDg3LCAxMSwgMzUsIDIzLCAzMiwgCisgICAgMjI1LCAxMzcsIDg3LCAxMSwgMzUsIDIzLCAzMiwgMjIzLCA0MSwgODcsIDExLCAzNSwgMjMsIDMyLCAyMjUsIDExMiwgODcsIAorICAgIDExLCAyMywgNiwgMjQ3LCAyMzUsIDExLCAyMywgNCwgMjQ3LCAyMzUsIDExLCAyMywgMjEsIDIxMCwgODYsIDExLCAyMywgCisgICAgMjEsIDExMSwgMTEsIDIzLCAyMSwgMTA1LCAxMSwgMjMsIDIxLCAxNTgsIDExLCAyMywgMjEsIDE2MSwgMTEsIDIzLCAyMSwgCisgICAgMTkwLCAxMSwgMjMsIDIxLCAxOTUsIDExLCAyMywgMjEsIDE5OSwgMTEsIDIzLCAyMSwgMTk2LCAxMSwgMjMsIDIxLCAyMDEsIAorICAgIDExLCAxMzksIDIxLCAyMTAsIDg2LCAxMSwgMTM5LCAyMSwgMTExLCAxMSwgMTM5LCAyMSwgMTA1LCAxMSwgMTM5LCAyMSwgCisgICAgMTU4LCAxMSwgMTM5LCAyMSwgMTYxLCAxMSwgMTM5LCAyMSwgMTkwLCAxMSwgMTM5LCAyMSwgMTk1LCAxMSwgMTM5LCAyMSwgCisgICAgMTk5LCAxMSwgMTM5LCAyMSwgMTk2LCAxMSwgMTM5LCAyMSwgMjAxLCAxMSwgMzUsIDIxLCAyMTAsIDg2LCAxMSwgMzUsIDIxLCAKKyAgICAxMTEsIDExLCAzNSwgMjEsIDEwNSwgMTEsIDM1LCAyMSwgMTU4LCAxMSwgMzUsIDIxLCAxNjEsIDExLCAzNSwgMjEsIDE5MCwgCisgICAgMTEsIDM1LCAyMSwgMTk1LCAxMSwgMzUsIDIxLCAxOTksIDExLCAzNSwgMjEsIDE5NiwgMTEsIDM1LCAyMSwgMjAxLCAxMSwgCisgICAgMzUsIDIzLCAyMSwgMjEwLCA4NiwgMTEsIDM1LCAyMywgMjEsIDExMSwgMTEsIDM1LCAyMywgMjEsIDEwNSwgMTEsIDM1LCAKKyAgICAyMywgMjEsIDE1OCwgMTEsIDM1LCAyMywgMjEsIDE2MSwgMTEsIDM1LCAyMywgMjEsIDE5MCwgMTEsIDM1LCAyMywgMjEsIAorICAgIDE5NSwgMTEsIDM1LCAyMywgMjEsIDE5OSwgMTEsIDM1LCAyMywgMjEsIDE5NiwgMTEsIDM1LCAyMywgMjEsIDIwMSwgMTEsIAorICAgIDIzMCwgMTQzLCAyMSwgMjEwLCA4NiwgMTEsIDIzMCwgMTQzLCAyMSwgMTExLCAxMSwgMjMwLCAxNDMsIDIxLCAxMDUsIDExLCAKKyAgICAyMzAsIDE0MywgMjEsIDE1OCwgMTEsIDIzMCwgMTQzLCAyMSwgMTYxLCAxMSwgMjMwLCAxNDMsIDIxLCAxOTAsIDExLCAyMzAsIAorICAgIDE0MywgMjEsIDE5NSwgMTEsIDIzMCwgMTQzLCAyMSwgMTk5LCAxMSwgMjMwLCAxNDMsIDIxLCAxOTYsIDExLCAyMzAsIDE0MywgCisgICAgMjEsIDIwMSwgOSwgMTEsIDI1NCwgMTc5LCA5LCAxMSwgMjUyLCA2MiwgOSwgMTEsIDIzNSwgMTI5LCA5LCAxMSwgMjQ4LCAKKyAgICAyMDMsIDksIDExLCAyMTIsIDMwLCA5LCAxMSwgMjEwLCAxMDgsIDksIDExLCAyNDIsIDQ0LCA5LCAxMSwgMjE3LCA4MSwgOSwgCisgICAgMTEsIDIxMSwgNDMsIDksIDExLCAyMzUsIDAsIDksIDExLCAyMzMsIDEwOCwgOSwgMTEsIDIzMSwgODMsIDksIDExLCAyMjgsIAorICAgIDY3LCA5LCAxMSwgMjIxLCAxNjgsIDksIDExLCAyNTQsIDIwNSwgOSwgMTEsIDI0NCwgMTUwLCA5LCAxMSwgMjIyLCAyOCwgOSwgCisgICAgMTEsIDIyNCwgODQsIDksIDExLCAyMjMsIDk4LCA5LCAxMSwgMjIwLCA2MSwgOSwgMTEsIDIxNywgOCwgOSwgMTEsIDIxNiwgCisgICAgMTkzLCA5LCAxMSwgMjM0LCAxMzUsIDksIDExLCAyMTYsIDIwMywgOSwgMTEsIDI0OCwgMjI0LCA5LCAxMSwgMjEwLCAxMTEsIAorICAgIDksIDExLCAyNDIsIDI1MSwgOSwgMTEsIDI0NywgMTI3LCAyNTIsIDYyLCA5LCAxMSwgMjQ3LCAxMjcsIDIyOCwgNjcsIDksIAorICAgIDExLCAyNDcsIDEyNywgMjQ0LCAxNTAsIDksIDExLCAyNDcsIDEyNywgMjI0LCA4NCwgOSwgMTEsIDY1LCAyNTIsIDYyLCA5LCAKKyAgICAxMSwgNjUsIDIzNSwgMTI5LCA5LCAxMSwgNjUsIDI0MSwgMjI1LCA5LCAxMSwgNjUsIDI0MiwgNDQsIDksIDExLCA2NSwgCisgICAgMjExLCA0MywgOSwgMTEsIDY1LCAyMzUsIDAsIDksIDExLCA2NSwgMjMzLCAxMDgsIDksIDExLCA2NSwgMjMxLCA4MywgOSwgCisgICAgMTEsIDY1LCAyMjgsIDY3LCA5LCAxMSwgNjUsIDIyMSwgMTY4LCA5LCAxMSwgNjUsIDI1NCwgMjA1LCA5LCAxMSwgNjUsIAorICAgIDI0NCwgMTUwLCA5LCAxMSwgNjUsIDIyMiwgMjgsIDksIDExLCA2NSwgMjI0LCA4NCwgOSwgMTEsIDY1LCAyMjAsIDYxLCA5LCAKKyAgICAxMSwgNjUsIDIxNywgOCwgOSwgMTEsIDY1LCAyMTYsIDE5MywgOSwgMTEsIDY1LCAyMzQsIDEzNSwgOSwgMTEsIDY1LCAyNDgsIAorICAgIDIyNCwgOSwgMTEsIDY1LCAyNDIsIDI1MSwgOSwgMTEsIDIxNywgNzcsIDIzNSwgMTI5LCA5LCAxMSwgMjE3LCA3NywgMjQyLCAKKyAgICA0NCwgOSwgMTEsIDIxNywgNzcsIDIxMSwgNDMsIDksIDExLCAyMTcsIDc3LCAyMzMsIDEwOCwgOSwgMTEsIDIxNywgNzcsIAorICAgIDIyOCwgNjcsIDksIDExLCAyMTcsIDc3LCAyMjEsIDE2OCwgOSwgMTEsIDIxNywgNzcsIDI1NCwgMjA1LCA5LCAxMSwgMjE3LCAKKyAgICA3NywgMjIyLCAyOCwgOSwgMTEsIDIxNywgNzcsIDIyNCwgODQsIDksIDExLCAyMTcsIDc3LCAyMjAsIDYxLCA5LCAxMSwgCisgICAgMjE3LCA3NywgMjM0LCAxMzUsIDksIDExLCAyMTcsIDc3LCAyNDgsIDIyNCwgOSwgMTEsIDIxNywgNzcsIDI0MiwgMjUxLCA5LCAKKyAgICAxMSwgMjE3LCA3NywgMjQ3LCAxMjcsIDIyOCwgNjcsIDksIDExLCAyMTcsIDc3LCAyNDcsIDEyNywgMjI0LCA4NCwgOSwgMTEsIAorICAgIDIxOCwgMTEyLCAyNTIsIDYyLCA5LCAxMSwgMjE4LCAxMTIsIDIzNSwgMTI5LCA5LCAxMSwgMjE4LCAxMTIsIDI0MSwgMjI1LCAKKyAgICA5LCAxMSwgMjE4LCAxMTIsIDI0MiwgNDQsIDksIDExLCAyMTgsIDExMiwgMjE3LCA4MSwgOSwgMTEsIDIxOCwgMTEyLCAyMTEsIAorICAgIDQzLCA5LCAxMSwgMjE4LCAxMTIsIDIzNSwgMCwgOSwgMTEsIDIxOCwgMTEyLCAyMzEsIDgzLCA5LCAxMSwgMjE4LCAxMTIsIAorICAgIDIyOCwgNjcsIDksIDExLCAyMTgsIDExMiwgMjIxLCAxNjgsIDksIDExLCAyMTgsIDExMiwgMjU0LCAyMDUsIDksIDExLCAKKyAgICAyMTgsIDExMiwgMjQ0LCAxNTAsIDksIDExLCAyMTgsIDExMiwgMjIyLCAyOCwgOSwgMTEsIDIxOCwgMTEyLCAyMjQsIDg0LCAKKyAgICA5LCAxMSwgMjE4LCAxMTIsIDIyMCwgNjEsIDksIDExLCAyMTgsIDExMiwgMjE3LCA4LCA5LCAxMSwgMjE4LCAxMTIsIDIxNiwgCisgICAgMTkzLCA5LCAxMSwgMjE4LCAxMTIsIDIzNCwgMTM1LCA5LCAxMSwgMjE4LCAxMTIsIDI0OCwgMjI0LCA5LCAxMSwgMjE4LCAKKyAgICAxMTIsIDIxMCwgMTExLCA5LCAxMSwgMjE4LCAxMTIsIDI0MiwgMjUxLCA5LCAxMSwgMjE4LCAxMTIsIDI0NywgMTI3LCAyNTIsIAorICAgIDYyLCA5LCAxMSwgMjE4LCAxMTIsIDI0NywgMTI3LCAyNDQsIDE1MCwgOSwgMTEsIDIzMiwgMTI4LCAyNTQsIDE3OSwgOSwgCisgICAgMTEsIDIzMiwgMTI4LCAyNTIsIDYyLCA5LCAxMSwgMjMyLCAxMjgsIDIzNSwgMTI5LCA5LCAxMSwgMjMyLCAxMjgsIDI0OCwgCisgICAgMjAzLCA5LCAxMSwgMjMyLCAxMjgsIDI0MSwgMjI1LCA5LCAxMSwgMjMyLCAxMjgsIDIxMiwgMzAsIDksIDExLCAyMzIsIAorICAgIDEyOCwgMjEwLCAxMDgsIDksIDExLCAyMzIsIDEyOCwgMjQyLCA0NCwgOSwgMTEsIDIzMiwgMTI4LCAyMTcsIDgxLCA5LCAxMSwgCisgICAgMjMyLCAxMjgsIDIxMSwgNDMsIDksIDExLCAyMzIsIDEyOCwgMjMzLCAxMDgsIDksIDExLCAyMzIsIDEyOCwgMjMxLCA4MywgCisgICAgOSwgMTEsIDIzMiwgMTI4LCAyMjgsIDY3LCA5LCAxMSwgMjMyLCAxMjgsIDIyMSwgMTY4LCA5LCAxMSwgMjMyLCAxMjgsIAorICAgIDI1NCwgMjA1LCA5LCAxMSwgMjMyLCAxMjgsIDI0NCwgMTUwLCA5LCAxMSwgMjMyLCAxMjgsIDIyMiwgMjgsIDksIDExLCAKKyAgICAyMzIsIDEyOCwgMjI0LCA4NCwgOSwgMTEsIDIzMiwgMTI4LCAyMjMsIDk4LCA5LCAxMSwgMjMyLCAxMjgsIDIyMCwgNjEsIDksIAorICAgIDExLCAyMzIsIDEyOCwgMjE3LCA4LCA5LCAxMSwgMjMyLCAxMjgsIDIxNiwgMTkzLCA5LCAxMSwgMjMyLCAxMjgsIDIzNCwgCisgICAgMTM1LCA5LCAxMSwgMjMyLCAxMjgsIDIxNiwgMjAzLCA5LCAxMSwgMjMyLCAxMjgsIDI0OCwgMjI0LCA5LCAxMSwgMjMyLCAKKyAgICAxMjgsIDIxMCwgMTExLCA5LCAxMSwgMjMyLCAxMjgsIDI0MiwgMjUxLCA5LCAxMSwgMTM5LCAyNTIsIDYyLCA5LCAxMSwgCisgICAgMTM5LCAyMzUsIDEyOSwgOSwgMTEsIDEzOSwgMjQ4LCAyMDMsIDksIDExLCAxMzksIDIxMiwgMzAsIDksIDExLCAxMzksIAorICAgIDIxMCwgMTA4LCA5LCAxMSwgMTM5LCAyNDIsIDQ0LCA5LCAxMSwgMTM5LCAyMTcsIDgxLCA5LCAxMSwgMTM5LCAyMTEsIDQzLCAKKyAgICA5LCAxMSwgMTM5LCAyMzMsIDEwOCwgOSwgMTEsIDEzOSwgMjMxLCA4MywgOSwgMTEsIDEzOSwgMjI4LCA2NywgOSwgMTEsIAorICAgIDEzOSwgMjIxLCAxNjgsIDksIDExLCAxMzksIDI1NCwgMjA1LCA5LCAxMSwgMTM5LCAyNDQsIDE1MCwgOSwgMTEsIDEzOSwgCisgICAgMjIyLCAyOCwgOSwgMTEsIDEzOSwgMjI0LCA4NCwgOSwgMTEsIDEzOSwgMjIzLCA5OCwgOSwgMTEsIDEzOSwgMjIwLCA2MSwgCisgICAgOSwgMTEsIDEzOSwgMjE3LCA4LCA5LCAxMSwgMTM5LCAyMTYsIDE5MywgOSwgMTEsIDEzOSwgMjM0LCAxMzUsIDksIDExLCAKKyAgICAxMzksIDIxNiwgMjAzLCA5LCAxMSwgMTM5LCAyNDgsIDIyNCwgOSwgMTEsIDEzOSwgMjEwLCAxMTEsIDksIDExLCAxMzksIAorICAgIDI0MiwgMjUxLCA5LCAxMSwgMjI2LCAxNzIsIDY2LCAyLCAxMjIsIDIsIDIxNywgNDQsIDksIDExLCAyMjYsIDE3MiwgMTIyLCAKKyAgICAyLCAyNDgsIDIwMywgMjMxLCAyMTAsIDg2LCAyNDUsIDIyOCwgMjExLCAyMzksIDIzMSwgMjEwLCA4NiwgMjE5LCAzMCwgCisgICAgMjExLCAyMzksIDIzMSwgMjEwLCA4NiwgMjEyLCA5LCAyMTEsIDIzOSwgMjMxLCAyMTAsIDg2LCAyMjgsIDYxLCAyMTEsIAorICAgIDIzOSwgMjMxLCAyMTAsIDg2LCAyMjMsIDExNCwgMjQ2LCAxMDQsIDIzMSwgMjEwLCA4NiwgMjQyLCAxMzQsIDI0NiwgMTA0LCAKKyAgICAyMzEsIDIxMCwgODYsIDcxLCAyNDYsIDEwNCwgMjMxLCAyMTAsIDg2LCAxMjMsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIAorICAgIDg2LCAxMTMsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAxMzQsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNDQsIDE5LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMjQ0LCA4OSwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIAorICAgIDIxOSwgMTI3LCA2NCwgMjUwLCAxNDksIDIzMSwgMjEwLCA4NiwgMjIwLCAxMjQsIDY0LCAyNTAsIDE0OSwgMjMxLCAyMTAsIAorICAgIDg2LCAyNDUsIDIwMSwgNjQsIDI1MCwgMTQ5LCAyMzEsIDIxMCwgODYsIDIyOCwgMjA1LCA2NCwgMjUwLCAxNDksIDIzMSwgCisgICAgMjEwLCA4NiwgMTIzLCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMTEzLCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCAKKyAgICA4NiwgMTM0LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMjQ0LCAxOSwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIAorICAgIDI0NCwgODksIDY0LCAyNTIsIDE2MSwgMjMxLCAyMTAsIDg2LCAyMTksIDEyNywgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgCisgICAgODYsIDIyMCwgMTI0LCA2NCwgMjUyLCAxNjEsIDIzMSwgMjEwLCA4NiwgMjQ1LCAyMDEsIDY0LCAyNTIsIDE2MSwgMjMxLCAKKyAgICAyMTAsIDg2LCAyMjgsIDIwNSwgNjQsIDI1MiwgMTYxLCAyMzEsIDIxMCwgODYsIDEyMywgNjQsIDI1MCwgNDIsIDIzMSwgCisgICAgMjEwLCA4NiwgMTEzLCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAxMzQsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDI0NCwgMTksIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDI0NCwgODksIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIAorICAgIDIxOSwgMTI3LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAyMjAsIDEyNCwgNjQsIDI1MCwgNDIsIDIzMSwgMjEwLCA4NiwgCisgICAgMjQ1LCAyMDEsIDY0LCAyNTAsIDQyLCAyMzEsIDIxMCwgODYsIDIyOCwgMjA1LCA2NCwgMjUwLCA0MiwgMjMxLCAyMTAsIDg2LCAKKyAgICAyMjUsIDI4LCAyMzEsIDIxMCwgODYsIDIyNiwgMTYwLCAyMzEsIDIxMCwgODYsIDI1MiwgMTYyLCAyMzEsIDIxMCwgODYsIAorICAgIDI1MCwgNzgsIDIzMSwgMjEwLCA4NiwgMjE4LCAyNDEsIDIzMSwgMjEwLCA4NiwgMjE4LCA0MCwgMjMxLCAyMTAsIDg2LCAKKyAgICAyNTMsIDE4NywgMjMxLCAyMTAsIDg2LCAyMTEsIDIzMiwgMjMxLCAyMTAsIDg2LCAyMzUsIDY4LCAyMzEsIDIxMCwgODYsIAorICAgIDI1MiwgMTkyLCAxMzEsIDg2LCAyMDMsIDI1MiwgMTkyLCAxMzEsIDg2LCAyNDEsIDUwLCAxMzEsIDg2LCAyNDEsIDQ5LCAKKyAgICAxMzEsIDg2LCAyNDEsIDQ4LCAxMzEsIDg2LCAyNDEsIDQ3LCAxMzEsIDg2LCAyNDEsIDQ2LCAxMzEsIDg2LCAyNDEsIDQ1LCAKKyAgICAxMzEsIDg2LCAyNDEsIDQ0LCAxMzEsIDg2LCAyNDEsIDQzLCAxMzEsIDg2LCAyNDEsIDQyLCAxMzEsIDg2LCAyNDEsIDQxLCAKKyAgICAxMzEsIDg2LCAyNDEsIDQwLCAxMzEsIDg2LCAyNDEsIDM5LCAxMzEsIDg2LCAyNDEsIDM4LCAxMzEsIDg2LCAyNDEsIDM3LCAKKyAgICAxMzEsIDg2LCAyNDEsIDM2LCAxMzEsIDg2LCAyNDEsIDM1LCAxMzEsIDg2LCAyNDEsIDM0LCAxMzEsIDg2LCAyNDEsIDMzLCAKKyAgICAxMzEsIDg2LCAyNDEsIDMyLCAxMzEsIDg2LCAyNDEsIDMxLCAxMzEsIDg2LCAyNDEsIDMwLCAxMzEsIDg2LCAyNDEsIDI5LCAKKyAgICAxMzEsIDg2LCAyNDEsIDI4LCAxMzEsIDg2LCAyNDEsIDI3LCAxMzEsIDg2LCAyNDEsIDI2LCAxMzEsIDg2LCAyNDEsIDI1LCAKKyAgICAxMzEsIDg2LCAyNDEsIDI0LCAxMzEsIDg2LCAyNDEsIDIzLCAxMzEsIDg2LCAyNDEsIDIyLCAxMzEsIDg2LCAyNDEsIDIxLCAKKyAgICAxMzEsIDg2LCAyNDEsIDIwLCAxMzEsIDg2LCAyNDEsIDE5LCAxMzEsIDg2LCAyNDEsIDE4LCAxMzEsIDg2LCAyNDEsIDE3LCAKKyAgICAxMzEsIDg2LCAyNDEsIDE2LCAxMzEsIDg2LCAyNDEsIDE1LCAxMzEsIDg2LCAyNDEsIDE0LCAxMzEsIDg2LCAyNDEsIDEzLCAKKyAgICAxMzEsIDg2LCAyNDEsIDEyLCAxMzEsIDg2LCAyNDEsIDExLCAxMzEsIDg2LCAyNDEsIDEwLCAxMzEsIDg2LCAyNDEsIDksIAorICAgIDEzMSwgODYsIDI0MSwgOCwgMTMxLCA4NiwgMjQxLCA3LCAxMzEsIDg2LCAyNDEsIDYsIDEzMSwgODYsIDI0MSwgNSwgMTMxLCAKKyAgICA4NiwgMjQxLCA0LCAxMzEsIDg2LCAyNDEsIDMsIDEzMSwgODYsIDI0MSwgMiwgMTMxLCA4NiwgNjcsIDI1MiwgMTkyLCAxMzEsIAorICAgIDg2LCAyMTMsIDIzOCwgMTMxLCA4NiwgMjEzLCAyMzcsIDEzMSwgODYsIDIxMywgMjM2LCAxMzEsIDg2LCAyMTMsIDIzNSwgCisgICAgMTMxLCA4NiwgMjEzLCAyMzQsIDEzMSwgODYsIDIxMywgMjMzLCAxMzEsIDg2LCAyMTMsIDIzMiwgMTMxLCA4NiwgMjEzLCAKKyAgICAyMzEsIDEzMSwgODYsIDIxMywgMjMwLCAxMzEsIDg2LCAyMTMsIDIyOSwgMTMxLCA4NiwgMjEzLCAyMjgsIDEzMSwgODYsIAorICAgIDIxMywgMjI3LCAxMzEsIDg2LCAyMTMsIDIyNiwgMTMxLCA4NiwgMjEzLCAyMjUsIDEzMSwgODYsIDIxMywgMjI0LCAxMzEsIAorICAgIDg2LCAyMTMsIDIyMywgMTMxLCA4NiwgMjEzLCAyMjIsIDEzMSwgODYsIDIxMywgMjIxLCAxMzEsIDg2LCAyMTMsIDIyMCwgCisgICAgMTMxLCA4NiwgMjEzLCAyMTksIDEzMSwgODYsIDIxMywgMjE4LCAxMzEsIDg2LCAyMTMsIDIxNywgMTMxLCA4NiwgMjEzLCAKKyAgICAyMTYsIDEzMSwgODYsIDIxMywgMjE1LCAxMzEsIDg2LCAyMTMsIDIxNCwgMTMxLCA4NiwgMjEzLCAyMTMsIDEzMSwgODYsIAorICAgIDIxMywgMjEyLCAxMzEsIDg2LCAyMTMsIDIxMSwgMTMxLCA4NiwgMjEzLCAyMTAsIDEzMSwgODYsIDIxMywgMjA5LCAxMzEsIAorICAgIDg2LCAyMTMsIDIwOCwgMTMxLCA4NiwgMjEzLCAyMDcsIDEzMSwgODYsIDIxMywgMjA2LCAxMzEsIDg2LCAyMTMsIDIwNSwgCisgICAgMTMxLCA4NiwgMjEzLCAyMDQsIDEzMSwgODYsIDIxMywgMjAzLCAxMzEsIDg2LCAyMTMsIDIwMiwgMTMxLCA4NiwgMjEzLCAKKyAgICAyMDEsIDEzMSwgODYsIDIxMywgMjAwLCAxMzEsIDg2LCAyMTMsIDE5OSwgMTMxLCA4NiwgMjEzLCAxOTgsIDEzMSwgODYsIAorICAgIDIxMywgMTk3LCAxMzEsIDg2LCAyMTMsIDE5NiwgMTMxLCA4NiwgMjEzLCAxOTUsIDEzMSwgODYsIDIxMywgMTk0LCAxMzEsIAorICAgIDg2LCAyMTMsIDE5MywgMTMxLCA4NiwgMjEzLCAxOTIsIDEzMSwgODYsIDIxMywgMTkxLCAxMzEsIDg2LCAyMTMsIDE5MCwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDI1MiwgMTkyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDIxOSwgMTcsIAorICAgIDIyNSwgMzYsIDI1MCwgMjUxLCAxMTMsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMTM0LCA2NCwgMjE5LCAxNywgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgMTksIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCA4OSwgNjQsIAorICAgIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTksIDEyNywgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAKKyAgICAyMjAsIDEyNCwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMjgsIDIwNSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIDI0OSwgNjQsIDIxOSwgCisgICAgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzQsIDM3LCAKKyAgICA2NCwgMjE5LCAxNywgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyMTksIDE3LCAyMjUsIDM2LCAyNTAsIDI1MSwgCisgICAgMjM0LCA4NSwgNjQsIDIxOSwgMTcsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNTUsIDE4LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAxMTMsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDEzNCwgNjQsIDI0MSwgMjMyLCAyMjUsIAorICAgIDM2LCAyNTAsIDI1MSwgMjQ0LCAxOSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ0LCA4OSwgNjQsIDI0MSwgCisgICAgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjE5LCAxMjcsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyMCwgCisgICAgMTI0LCA2NCwgMjQxLCAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyNDUsIDIwMSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAKKyAgICAyNTAsIDI1MSwgMjI4LCAyMDUsIDY0LCAyNDEsIDIzMiwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxNiwgMjQ5LCA2NCwgMjQxLCAKKyAgICAyMzIsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMzUsIDE0NSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM0LCAKKyAgICAzNywgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjI0LCAxOCwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIAorICAgIDI1MSwgMjM0LCA4NSwgNjQsIDI0MSwgMjMyLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDI0NywgMjU1LCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMTEzLCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyNDcsIAorICAgIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgMTksIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgCisgICAgODksIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIAorICAgIDI1MCwgMjUxLCAyMjAsIDEyNCwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyNDcsIAorICAgIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyOCwgMjA1LCA2NCwgMjQ3LCAyNTUsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIAorICAgIDI0OSwgNjQsIDI0NywgMjU1LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgCisgICAgMjUwLCAyNTEsIDIzNCwgMzcsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyNDcsIAorICAgIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgODUsIDY0LCAyNDcsIDI1NSwgMjI1LCAzNiwgMjUwLCAyNTEsIDg1LCAKKyAgICAyMzUsIDY4LCAyMjUsIDM2LCAyNTAsIDI1MSwgMjU1LCAxOCwgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgCisgICAgMTEzLCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAxMzQsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDI0NCwgMTksIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDI0NCwgODksIDY0LCAyNDksIDI1MCwgCisgICAgMjI1LCAzNiwgMjUwLCAyNTEsIDIxOSwgMTI3LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMjAsIDEyNCwgCisgICAgNjQsIDI0OSwgMjUwLCAyMjUsIDM2LCAyNTAsIDI1MSwgMjQ1LCAyMDEsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDIyOCwgMjA1LCA2NCwgMjQ5LCAyNTAsIDIyNSwgMzYsIDI1MCwgMjUxLCAyMTYsIDI0OSwgNjQsIDI0OSwgMjUwLCAKKyAgICAyMjUsIDM2LCAyNTAsIDI1MSwgMjM1LCAxNDUsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIzNCwgMzcsIAorICAgIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDIyNCwgMTgsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAKKyAgICAyNTEsIDIzNCwgODUsIDY0LCAyNDksIDI1MCwgMjI1LCAzNiwgMjUwLCAyNTEsIDcxLCAyMzUsIDY4LCAyMSwgMjEwLCA4NywgCisgICAgMjQzLCAyMzYsIDIxOCwgMTMxLCAyMSwgMjEwLCA4NywgMjQ5LCAyMjcsIDIxLCAxMjMsIDI0OSwgMjI3LCAyMSwgMTEzLCAKKyAgICAyNDksIDIyNywgMjEsIDEzNCwgMjQ5LCAyMjcsIDIxLCAyNDQsIDE5LCAyNDksIDIyNywgMjEsIDI0NCwgODksIDI0OSwgCisgICAgMjI3LCAyMSwgMjE5LCAxMjcsIDI0OSwgMjI3LCAyMSwgMjIwLCAxMjQsIDI0OSwgMjI3LCAyMSwgMjQ1LCAyMDEsIDI0OSwgCisgICAgMjI3LCAyMSwgMjI4LCAyMDUsIDI0OSwgMjI3LCA4OCwgNywgNiwgMSwgNjEsIDg4LCA3LCA2LCAxLCAyNTMsIDE2NiwgODgsIAorICAgIDcsIDYsIDEsIDI1MSwgNzQsIDg4LCA3LCA2LCAxLCAyNDksIDY4LCA4OCwgNywgNiwgMSwgNzYsIDg4LCA3LCA2LCAxLCAKKyAgICAyNDUsIDE0LCA4OCwgNywgNiwgMSwgMjQzLCAyMDksIDg4LCA3LCA2LCAxLCAyNDIsIDY3LCA4OCwgNywgNiwgMSwgNzQsIAorICAgIDg4LCA3LCA2LCAxLCAyMzUsIDE1MCwgODgsIDcsIDYsIDEsIDIzNSwgMjksIDg4LCA3LCA2LCAxLCAxNTYsIDg4LCA3LCA2LCAKKyAgICAxLCAxOTQsIDg4LCA3LCA2LCAxLCAyMzAsIDMwLCA4OCwgNywgNiwgMSwgNzgsIDg4LCA3LCA2LCAxLCAyMjYsIDEwOSwgODgsIAorICAgIDcsIDYsIDEsIDIyNCwgOTksIDg4LCA3LCA2LCAxLCAxNTMsIDg4LCA3LCA2LCAxLCAyMjIsIDkzLCA4OCwgNywgNiwgMSwgCisgICAgMjE3LCAxNTMsIDg4LCA3LCA2LCAxLCA2OSwgODgsIDcsIDYsIDEsIDIxNCwgMTA1LCA4OCwgNywgNiwgMSwgMjEyLCA5OCwgCisgICAgODgsIDcsIDYsIDEsIDIxMSwgMTc4LCA4OCwgNywgNiwgMSwgMjExLCAxMTcsIDg4LCA3LCA2LCAxLCAyMTAsIDE1OSwgMjE2LCAKKyAgICA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgNywgNiwgMSwgMjIyLCA5MywgMzcsIDMyLCA3LCA2LCAxLCAyNTEsIDc0LCAzNywgMzIsIAorICAgIDcsIDYsIDEsIDE1MywgMzcsIDI1MCwgMTk5LCAzNywgMjExLCAxODAsIDkyLCA3LCA2LCAxLCA2MSwgOTIsIDcsIDYsIDEsIAorICAgIDI1MywgMTY2LCA5MiwgNywgNiwgMSwgMjUxLCA3NCwgOTIsIDcsIDYsIDEsIDI0OSwgNjgsIDkyLCA3LCA2LCAxLCA3NiwgCisgICAgOTIsIDcsIDYsIDEsIDI0NSwgMTQsIDkyLCA3LCA2LCAxLCAyNDMsIDIwOSwgOTIsIDcsIDYsIDEsIDI0MiwgNjcsIDkyLCA3LCAKKyAgICA2LCAxLCA3NCwgOTIsIDcsIDYsIDEsIDIzNSwgMTUwLCA5MiwgNywgNiwgMSwgMjM1LCAyOSwgOTIsIDcsIDYsIDEsIDE1NiwgCisgICAgOTIsIDcsIDYsIDEsIDE5NCwgOTIsIDcsIDYsIDEsIDIzMCwgMzAsIDkyLCA3LCA2LCAxLCA3OCwgOTIsIDcsIDYsIDEsIAorICAgIDIyNiwgMTA5LCA5MiwgNywgNiwgMSwgMjI0LCA5OSwgOTIsIDcsIDYsIDEsIDE1MywgOTIsIDcsIDYsIDEsIDIyMiwgOTMsIAorICAgIDkyLCA3LCA2LCAxLCAyMTcsIDE1MywgOTIsIDcsIDYsIDEsIDY5LCA5MiwgNywgNiwgMSwgMjE0LCAxMDUsIDkyLCA3LCA2LCAKKyAgICAxLCAyMTIsIDk4LCA5MiwgNywgNiwgMSwgMjExLCAxNzgsIDkyLCA3LCA2LCAxLCAyMTEsIDExNywgOTIsIDcsIDYsIDEsIAorICAgIDIxMCwgMTU5LCA5MiwgMjQwLCAyMDgsIDkyLCAyMzAsIDU0LCA5MiwgMjIxLCAxODUsIDkyLCAyMTgsIDIyOCwgOTIsIDIyNCwgCisgICAgMjIxLCA5MiwgMjEyLCAyMywgMTUyLCAzNywgNywgNiwgMSwgNjEsIDE1MiwgMzcsIDcsIDYsIDEsIDI1MywgMTY2LCAxNTIsIAorICAgIDM3LCA3LCA2LCAxLCAyNTEsIDc0LCAxNTIsIDM3LCA3LCA2LCAxLCAyNDksIDY4LCAxNTIsIDM3LCA3LCA2LCAxLCA3NiwgCisgICAgMTUyLCAzNywgNywgNiwgMSwgMjQ1LCAxNCwgMTUyLCAzNywgNywgNiwgMSwgMjQzLCAyMDksIDE1MiwgMzcsIDcsIDYsIDEsIAorICAgIDI0MiwgNjcsIDE1MiwgMzcsIDcsIDYsIDEsIDc0LCAxNTIsIDM3LCA3LCA2LCAxLCAyMzUsIDE1MCwgMTUyLCAzNywgNywgNiwgCisgICAgMSwgMjM1LCAyOSwgMTUyLCAzNywgNywgNiwgMSwgMTU2LCAxNTIsIDM3LCA3LCA2LCAxLCAxOTQsIDE1MiwgMzcsIDcsIDYsIAorICAgIDEsIDIzMCwgMzAsIDE1MiwgMzcsIDcsIDYsIDEsIDc4LCAxNTIsIDM3LCA3LCA2LCAxLCAyMjYsIDEwOSwgMTUyLCAzNywgNywgCisgICAgNiwgMSwgMjI0LCA5OSwgMTUyLCAzNywgNywgNiwgMSwgMTUzLCAxNTIsIDM3LCA3LCA2LCAxLCAyMjIsIDkzLCAxNTIsIDM3LCAKKyAgICA3LCA2LCAxLCAyMTcsIDE1MywgMTUyLCAzNywgNywgNiwgMSwgNjksIDE1MiwgMzcsIDcsIDYsIDEsIDIxNCwgMTA1LCAxNTIsIAorICAgIDM3LCA3LCA2LCAxLCAyMTIsIDk4LCAxNTIsIDM3LCA3LCA2LCAxLCAyMTEsIDE3OCwgMTUyLCAzNywgNywgNiwgMSwgMjExLCAKKyAgICAxMTcsIDE1MiwgMzcsIDcsIDYsIDEsIDIxMCwgMTU5LCAyMjMsIDE2MCwgMjMxLCAxMDIsIDUwLCAyMjMsIDE2MCwgMjMxLCAKKyAgICA5OSwgNTAsIDE1MiwgOTIsIDcsIDYsIDEsIDYxLCAxNTIsIDkyLCA3LCA2LCAxLCAyNTMsIDE2NiwgMTUyLCA5MiwgNywgNiwgCisgICAgMSwgMjUxLCA3NCwgMTUyLCA5MiwgNywgNiwgMSwgMjQ5LCA2OCwgMTUyLCA5MiwgNywgNiwgMSwgNzYsIDE1MiwgOTIsIDcsIAorICAgIDYsIDEsIDI0NSwgMTQsIDE1MiwgOTIsIDcsIDYsIDEsIDI0MywgMjA5LCAxNTIsIDkyLCA3LCA2LCAxLCAyNDIsIDY3LCAKKyAgICAxNTIsIDkyLCA3LCA2LCAxLCA3NCwgMTUyLCA5MiwgNywgNiwgMSwgMjM1LCAxNTAsIDE1MiwgOTIsIDcsIDYsIDEsIDIzNSwgCisgICAgMjksIDE1MiwgOTIsIDcsIDYsIDEsIDE1NiwgMTUyLCA5MiwgNywgNiwgMSwgMTk0LCAxNTIsIDkyLCA3LCA2LCAxLCAyMzAsIAorICAgIDMwLCAxNTIsIDkyLCA3LCA2LCAxLCA3OCwgMTUyLCA5MiwgNywgNiwgMSwgMjI2LCAxMDksIDE1MiwgOTIsIDcsIDYsIDEsIAorICAgIDIyNCwgOTksIDE1MiwgOTIsIDcsIDYsIDEsIDE1MywgMTUyLCA5MiwgNywgNiwgMSwgMjIyLCA5MywgMTUyLCA5MiwgNywgNiwgCisgICAgMSwgMjE3LCAxNTMsIDE1MiwgOTIsIDcsIDYsIDEsIDY5LCAxNTIsIDkyLCA3LCA2LCAxLCAyMTQsIDEwNSwgMTUyLCA5MiwgCisgICAgNywgNiwgMSwgMjEyLCA5OCwgMTUyLCA5MiwgNywgNiwgMSwgMjExLCAxNzgsIDE1MiwgOTIsIDcsIDYsIDEsIDIxMSwgMTE3LCAKKyAgICAxNTIsIDkyLCA3LCA2LCAxLCAyMTAsIDE1OSwgMjQ5LCAxMzYsIDE1MiwgOTIsIDcsIDYsIDEsIDIyNiwgMTA5LCAxNTIsIAorICAgIDkyLCAyNDAsIDEyMCwgMTUyLCA5MiwgMTkxLCAxNTIsIDkyLCAyMDYsIDE1MiwgOTIsIDI1NSwgMzQsIDE1MiwgOTIsIDIxMiwgCisgICAgMjMsIDQyLCAyNDcsIDE3MiwgOTIsIDI1MCwgMzEsIDkyLCAyNDksIDE3OCwgOTIsIDI0NCwgNCwgOTIsIDI0MCwgMTEyLCAKKyAgICA5MiwgMjI5LCA5MSwgOTIsIDIyOSwgODQsIDkyLCAyMjYsIDIxOCwgOTIsIDIxOSwgMzcsIDkyLCAxMjAsIDIsIDI0NSwgMzksIAorICAgIDc5LCA5MiwgMjEzLCAxMTksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDYxLCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAKKyAgICAxLCAyNTMsIDE2NiwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjUxLCA3NCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgCisgICAgMSwgMjQ5LCA2OCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgNzYsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIAorICAgIDI0NSwgMTQsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDI0MywgMjA5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAKKyAgICAyNDIsIDY3LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA3NCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjM1LCAKKyAgICAxNTAsIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDIzNSwgMjksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDE1NiwgCisgICAgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMTk0LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMzAsIDMwLCAyMjMsIAorICAgIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCA3OCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjI2LCAxMDksIDIyMywgMTA2LCAKKyAgICAyMzUsIDI0NiwgMTYsIDEsIDIyNCwgOTksIDIyMywgMTA2LCAyMzUsIDI0NiwgMTYsIDEsIDE1MywgMjIzLCAxMDYsIDIzNSwgCisgICAgMjQ2LCAxNiwgMSwgMjIyLCA5MywgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjE3LCAxNTMsIDIyMywgMTA2LCAyMzUsIAorICAgIDI0NiwgMTYsIDEsIDY5LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTQsIDEwNSwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAKKyAgICAxNiwgMSwgMjEyLCA5OCwgMjIzLCAxMDYsIDIzNSwgMjQ2LCAxNiwgMSwgMjExLCAxNzgsIDIyMywgMTA2LCAyMzUsIDI0NiwgCisgICAgMTYsIDEsIDIxMSwgMTE3LCAyMjMsIDEwNiwgMjM1LCAyNDYsIDE2LCAxLCAyMTAsIDE1OSwgNDIsIDE0MSwgMjQxLCA3MCwgCisgICAgOTIsIDU2LCAyMzQsIDI0LCA5MiwgNTYsIDIwNiwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA1NywgOTIsIDEwLCAyMTQsIAorICAgIDE3NywgMjM4LCA2MSwgOTIsIDEwLCAyMTQsIDE3NywgMjM4LCA2OSwgOTIsIDU2LCAyNDgsIDk4LCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDc2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDYzLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDM1LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDYyLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDc1LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDQ5LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQyLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDUxLCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDcyLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDU4LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDc0LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDUwLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDczLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDM2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQxLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDM0LCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDY0LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDY2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQ0LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDU1LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDUzLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDc5LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDc4LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDMyLCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDU5LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDc3LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDY4LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDU0LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDMzLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDU2LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDM4LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDM3LCA5MiwgMTAsIDIxNCwgCisgICAgMTc3LCAyMzgsIDY3LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQ1LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQ3LCA5MiwgCisgICAgMTAsIDIxNCwgMTc3LCAyMzgsIDQ4LCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDQwLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIAorICAgIDcxLCA5MiwgMTAsIDIxNCwgMTc3LCAyMzgsIDY1LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAxNzcsIAorICAgIDIzOCwgNDYsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA3OCwgMjE2LCA3LCAyMjAsIAorICAgIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDc2LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgMjE0LCAKKyAgICAxNzcsIDIzOCwgNjAsIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA0MywgMjE2LCA3LCAKKyAgICAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDU2LCAyMTYsIDcsIDIyMCwgNTUsIDI1MSwgMTY1LCAxMCwgCisgICAgMjE0LCAxNzcsIDIzOCwgMzksIDIxNiwgNywgMjIwLCA1NSwgMjUxLCAxNjUsIDEwLCAyMTQsIDE3NywgMjM4LCA3MCwgMjE2LCAKKyAgICA3LCAyMjAsIDU1LCAyNTEsIDE2NSwgMTAsIDIxNCwgMTc3LCAyMzgsIDUyLCAzNywgMTU0LCAyNTQsIDI1NCwgMzcsIDE1NCwgCisgICAgMjU1LCAyMSwgMjQ5LCA3OSwgMjQ0LCA1MCwgMjUwLCA4LCAyMTQsIDE5NCwgMjI4LCAyMTgsIDIsIDIxOCwgMTU1LCAyMTgsIAorICAgIDM0LCAxMTUsIDIzMCwgMTE5LCAyMTgsIDMzLCAyNTAsIDM0LCAyNTMsIDIxNSwgMjQ2LCA2MiwgMjE4LCAzMiwgMTE1LCAKKyAgICAyNTEsIDEyNiwgMjIzLCAxNjEsIDI1MSwgMTQ4LCAyNTMsIDIxNSwgMjI4LCAyMTcsIDIxMiwgNDEsIDIxMiwgMzUsIDIxMywgCisgICAgMTMxLCAyMzAsIDIwMCwgMjEyLCAyNSwgMjQ1LCAyMzIsIDI0MiwgMTg4LCAyNDUsIDUzLCAyNDUsIDIzMiwgMjQyLCAxODgsIAorICAgIDI1NCwgMTM2LCAyNDUsIDIzMiwgMjQyLCAxODgsIDI1MywgMjMzLCAyNDIsIDE4OCwgMiwgMjMxLCA1NiwgMTY2LCAyMzAsIAorICAgIDEzNCwgODcsIDIxMiwgMjcsIDI0OSwgMTQ1LCAyMzAsIDEzNCwgODcsIDI0NCwgMTAwLCAyMjQsIDI1LCAyMzAsIDEzNCwgCisgICAgODcsIDIxMiwgMjcsIDI0MiwgMjE3LCAyMzAsIDEzNCwgODcsIDI0MywgMjM2LCAyMzAsIDEzNCwgODcsIDIxMiwgNTIsIAorICAgIDI0MiwgMjE3LCAyMzAsIDEzNCwgODcsIDIzMywgODYsIDIyNCwgMjUsIDIzMCwgMTM0LCA4NywgMjEyLCA1MiwgMjQ5LCAKKyAgICAxNDUsIDIzMCwgMTM0LCA4NywgMjQ5LCAxNDUsIDIzMCwgMTMzLCAxNjYsIDIzMCwgMTM0LCAyLCAyNDQsIDE5OCwgMjQ0LCAKKyAgICAxMDAsIDIyNCwgMjUsIDIzMCwgMTM0LCAyLCAyNDQsIDE5OCwgMjMzLCA4NiwgMjI0LCAyNSwgMjMwLCAxMzQsIDIsIDI0NCwgCisgICAgMTk4LCAyNDMsIDIzNiwgMjMwLCAxMzQsIDIsIDI0NCwgMTk4LCAyMTgsIDM5LCAyLCAyNDQsIDE5OCwgMjQyLCAxODYsIAorICAgIDIxOCwgMTU4LCAyMjAsIDEsIDIxOCwgMTU4LCAyNTAsIDEyNCwgMjIxLCAxNzAsIDI0NSwgNDcsIDIxNSwgMjM2LCAyNDgsIAorICAgIDkyLCAyMTUsIDIzNiwgMjI2LCA2MywgMjE1LCAyMzYsIDI1MSwgMzUsIDIxNSwgMTEwLCAyNTAsIDEyNiwgMjUxLCAyMTgsIAorICAgIDIyMiwgMTkzLCAyNDEsIDE4NiwgMjE4LCAzNywgMjUxLCAyMTgsIDI0NSwgMjM2LCA2NCwgMjMxLCAxOTksIDI0NSwgMjM2LCAKKyAgICA2NCwgMjIzLCAzNCwgMjQxLCAyMTEsIDI0NCwgMTksIDIzMywgNjAsIDI0OSwgMjU0LCAyMzEsIDE3NSwgMjMzLCA1OSwgCisgICAgMjQ0LCAxODQsIDIzMywgNTksIDIzMywgNjAsIDI0NCwgNTUsIDIzNiwgNywgMjExLCAyMzksIDIzMCwgNjMsIDIxNiwgMzUsIAorICAgIDI1MywgMTk5LCAyNDIsIDE1MCwgMjMxLCA3MiwgMjEyLCAzOSwgMjE3LCA1OCwgMjMzLCAzMiwgMjUyLCAxNTcsIDIyNSwgCisgICAgNjUsIDIyMywgMTE0LCAyNTQsIDYyLCAyNDIsIDEzNCwgMjU0LCA2MiwgMjI1LCAyMjAsIDIyNSwgMjIxLCAyNTAsIDEyNywgCisgICAgMjE4LCAxMTYsIDI0MiwgMzAsIDIxOSwgOTIsIDY0LCAyMjUsIDQ3LCAyMzEsIDkyLCAyMjYsIDIwMSwgMjUxLCAyMDIsIAorICAgIDIyNCwgMjMyLCAyMzMsIDQyLCAyMjMsIDM1LCAyNDksIDE1MCwgMjIzLCAzNSwgMjUyLCAxNjcsIDI0OSwgMTgxLCAyMjMsIAorICAgIDM0LCAyNDksIDEwMywgMjIsIDIyMywgMzQsIDIxOCwgMTQzLCAyNTEsIDE3NSwgMjE5LCAxNiwgMjUxLCAxNTksIDI0NCwgMywgCisgICAgMjQzLCAyNTUsIDIyMiwgMjA5LCAyMTcsIDI0NywgMjI0LCAyMzQsIDI0OCwgMTgzLCAyMjYsIDI0MCwgMjE4LCA4LCAyNDQsIAorICAgIDAsIDIxOSwgMjMyLCAyNDQsIDk5LCAyNTEsIDI5LCAyLCAyMTcsIDI0MCwgMjQ4LCA0MywgMjE5LCA1NCwgMjQwLCAxMTksIAorICAgIDI0OSwgMTQ5LCAyMjAsIDcyLCAyNDAsIDExOCwgMjQwLCAxMTksIDI0OSwgMTQ5LCAyNDYsIDExNiwgMjQ5LCAxODAsIDI1MCwgCisgICAgOTIsIDEzMCwgMjUxLCA2LCAyMzIsIDE0NywgMjQ5LCA5NiwgMjQxLCA2MiwgMjI0LCAyMzYsIDIxOSwgMjQyLCAyNTIsIDQ0LCAKKyAgICAyNTEsIDE3MSwgMjI0LCAyMzcsIDY0LCAyNDQsIDQxLCAyNDksIDE3OSwgMjQ0LCAzMiwgMjIsIDIzNCwgMzgsIDIxNywgMjAsIAorICAgIDIxMSwgMjMwLCAyNDIsIDIwLCAyMjIsIDE0LCAyNTEsIDE4NSwgMjIsIDI0OSwgMTEwLCAyMTEsIDIzNywgMjQyLCAxOTEsIAorICAgIDI0OSwgMjQzLCAyNDIsIDE5MSwgMjE1LCAxOTQsIDI0NiwgOTgsIDI1MiwgNzAsIDIzMCwgOTgsIDI1MCwgMTUsIDI1MiwgCisgICAgNzAsIDIzMCwgOTcsIDI1MiwgMTk1LCAyNTEsIDE4NCwgMjIzLCAzNiwgMjExLCAyMDEsIDIyNCwgMTk4LCAyNTEsIDI0MywgCisgICAgMjUxLCAyOCwgMjM1LCAxNDQsIDI1MCwgODUsIDIxNSwgMjM2LCAyNDQsIDE3MCwgMjUwLCA4NCwgMjQ0LCAxMDIsIDI0NCwgCisgICAgMTAzLCAyMTksIDE0LCAyNTIsIDE2NiwgMjI1LCAyNTQsIDIyNCwgMjQ3LCAyNDksIDIxMiwgMjUyLCAxNjcsIDIxNywgNjAsIAorICAgIDIxNSwgMjM2LCAyNDksIDEzNiwgMjQ0LCA3NSwgMjI1LCA2NiwgMjQ4LCA4OSwgMjM1LCAxMzcsIDI0NywgMTM5LCAyNTAsIAorICAgIDI0MCwgMjE4LCAxMTUsIDIxMSwgMjQwLCAyNTAsIDEwNiwgMjMwLCAxMzQsIDIxMywgMTY0LCAyNTAsIDE3MCwgMjIxLCAKKyAgICAyMDEsIDIyMSwgMjI2LCAyNDIsIDE1NSwgMjUxLCAzLCAyNTAsIDI0MSwgMjQwLCAyNTIsIDI0NCwgMTM4LCAyMTIsIDAsIAorICAgIDIyMiwgMjAyLCAyNDksIDI0NCwgMjQ0LCA5NCwgMjI1LCA1LCAyMiwgMjQ0LCA5OCwgMjMwLCAyMzIsIDIzMCwgMTEzLCAKKyAgICAyNTEsIDE4LCAyNTAsIDQ3LCAyNDEsIDIzOSwgMjUzLCAyNDksIDIyNiwgNjYsIDIxNiwgMTUsIDI0MiwgMiwgMjUwLCAzNywgCisgICAgMjE2LCAyNDMsIDIxNiwgMTE0LCAyNTAsIDI4LCAyNTEsIDIxMCwgMjI1LCAxODAsIDI1MywgMjQ4LCAyMTMsIDE3MiwgMjQzLCAKKyAgICAxMTcsIDI0NywgMjA1LCAyNDEsIDE2MywgMjE5LCA4NiwgMjMxLCAyMzksIDI1MSwgMjUzLCAyNDMsIDExOCwgMjQ3LCAyNDgsIAorICAgIDI1MSwgMTc0LCAyNDQsIDYwLCAyMjUsIDM2LCAyNTAsIDI0OSwgMjgsIDIyOCwgNTIsIDIzMCwgOTAsIDI4LCAyMjgsIDQ3LCAKKyAgICAyMjEsIDIxNCwgMjQyLCAxMDYsIDI4LCAyMzQsIDE0MywgMjE1LCAxOTEsIDIxMywgMTU0LCAyOCwgMjIxLCAxOTQsIDIyMiwgCisgICAgMTI2LCAyMjAsIDEzLCAyLCAyMjEsIDIyOSwgMjE2LCAyNDUsIDIyMywgMTgxLCAyMiwgMjUyLCAxNjcsIDIxOSwgMTA3LCAKKyAgICAyMiwgMjE5LCAxMDcsIDI1MSwgMTk1LCAyNTIsIDEzMSwgMjIsIDI0MSwgNTYsIDI1MCwgMTI4LCAyNDQsIDgxLCAyMTksIAorICAgIDY1LCAyMjIsIDEyNywgMjE4LCAxMywgMjE1LCAxOTUsIDI0MCwgMjUzLCAyMjMsIDE4MiwgMjU0LCAxMzcsIDI0NCwgMzksIAorICAgIDIyMiwgMTM4LCAyNDQsIDM5LCAyMTcsIDI0MiwgMjQwLCAyNDIsIDI1MSwgMTI3LCAyNDAsIDI0MiwgMiwgMjQzLCAxMDEsIAorICAgIDIyNiwgMjMzLCAyNTEsIDEyNywgMjM1LCAxMzcsIDIyNCwgMjQyLCAyMjYsIDIzMiwgMjQ1LCA1MiwgMjI0LCAyNDIsIDIyNiwgCisgICAgMjMyLCAyNDAsIDI1MSwgMjUyLCAxNTMsIDI1MywgMTg5LCAyMTYsIDI1MywgMjMxLCAyMzksIDI0MCwgMjQ3LCAyMzIsIAorICAgIDExNywgMjQwLCAyNDcsIDI0OSwgMTg0LCAyMTgsIDEyNywgMjIxLCAyMDAsIDI0OCwgNTEsIDIxOCwgMTI3LCAyNDQsIDE4OCwgCisgICAgMjM1LCAxNTUsIDIzMywgOTUsIDIzNSwgMTM3LCAyNTAsIDIzNCwgMjQ1LCA1MiwgMjUwLCAyMzQsIDIyMywgMTQ0LCAyMzAsIAorICAgIDExNywgMjI2LCAxMTgsIDIxMiwgNDEsIDI1MSwgMTMxLCAyNDksIDE1MywgMjE2LCAxMDcsIDIzMywgMjQsIDIyMywgMTgzLCAKKyAgICAyNTAsIDIzMiwgMjQ2LCAxMDQsIDI0OSwgMTQzLCAyMTIsIDMsIDIxOSwgNzIsIDIxOSwgNzAsIDI0MCwgMjUyLCAyMjMsIAorICAgIDE1NiwgMjQyLCAxNzcsIDIyMCwgNTksIDIzMCwgMTUwLCAyMjIsIDE5NiwgMjUwLCAxMTYsIDI0NywgMTQ0LCAyMjUsIDc2LCAKKyAgICAyNTEsIDIxMSwgMjQ1LCAxNzcsIDIyNiwgMjQyLCAyMTgsIDI1NCwgMjIwLCA1NCwgMjUxLCAxMzAsIDI1NCwgMTAwLCAyNDEsIAorICAgIDYxLCAyMzMsIDEyNywgMjUyLCA2OCwgMjQ0LCA5OCwgMjE1LCAxOTQsIDI0NCwgOTgsIDI1MSwgMjE3LCAyMTUsIDkxLCAKKyAgICAyNDIsIDAsIDI1MCwgMTE3LCAyNTIsIDE5NSwgMjUwLCAxMTcsIDI0MywgMjUwLCAyNTIsIDE5NSwgMjUwLCAxMTcsIDI1MSwgCisgICAgMjQ1LCAyMjUsIDE5OCwgMjM0LCAzMiwgMjI0LCAyNTEsIDI0NiwgOTUsIDI1MSwgMTksIDI1MiwgMTg1LCAyNTEsIDE5LCAKKyAgICAyNDcsIDEzOCwgMjMwLCAxMTgsIDI0NCwgMTk4LCAyNDksIDE1NCwgMjQ0LCAxOTgsIDIxNiwgMTA4LCAyNDQsIDE5OCwgCisgICAgMjIzLCAxODQsIDI0NCwgMTk4LCAyNTAsIDIzMywgMjQ0LCAxOTgsIDI0NiwgMTA1LCAyNDQsIDE5OCwgMjE4LCAyNDMsIAorICAgIDIxMiwgMywgMjQwLCAyNTMsIDI0NCwgMTk4LCAyMzAsIDE1MSwgMjQ0LCAxOTgsIDI0NywgMTQ1LCAyNDQsIDE5OCwgMjI1LCAKKyAgICA3NywgMjQ0LCAxOTgsIDI0MywgMjUzLCAyNDQsIDE5OCwgMjQyLCAyNywgMjQ0LCAxOTgsIDIxMSwgMjI0LCAyNDQsIDE5OCwgCisgICAgMjUyLCA3OSwgMjQ0LCAxOTgsIDIyNiwgNDksIDI0NCwgMTk4LCAyMjUsIDc3LCAyMjgsIDU4LCAyMjUsIDIzNiwgMjI0LCAKKyAgICAxODksIDI0NSwgMjEsIDI0NSwgMjM1LCAyMjgsIDU4LCAyMzAsIDExNSwgMjE2LCAyMCwgNzEsIDEyMCwgMjI1LCAxMCwgCisgICAgMjUyLCAxOTAsIDIzNSwgMjQ5LCA3MSwgMTI0LCAyMjUsIDEwLCAyNTIsIDE5MCwgMjM1LCAyNDksIDcxLCA0MywgMjI1LCAKKyAgICAxMCwgMjUyLCAxOTAsIDIzNSwgMjQ5LCA3MSwgNDQsIDIyNSwgMTAsIDI1MiwgMTkwLCAyMzUsIDI0OSwgMjQ0LCA5MiwgCisgICAgMjQyLCAyMywgNTAsIDIxMiwgMzMsIDI0MiwgMjMsIDUwLCAyMjYsIDIxOSwgMjQyLCAyMywgNTAsIDIxNiwgMTM2LCAxMjAsIAorICAgIDUwLCAyMTYsIDEzNiwgMTI0LCA1MCwgMjUwLCAyNywgMjQyLCAxOCwgNTAsIDIwNCwgMjQyLCAxOCwgNTAsIDI0OSwgMTMxLCAKKyAgICAyMTEsIDIyMCwgMjQyLCAyLCAyNDUsIDIyLCAyMjksIDEwOSwgMjE3LCAxNTIsIDIzNSwgMTMxLCAyNDYsIDEwMCwgMjM0LCAKKyAgICA4OCwgMjUxLCAyNTUsIDIxMSwgMjIwLCAyNTAsIDEsIDIyNCwgMTMwLCAyNDIsIDIxLCAyMjQsIDIzMywgMjMxLCAxODIsIAorICAgIDIyMCwgNiwgMjUzLCAyMTEsIDIyMCwgNiwgMjQxLCAxNzEsIDIyMCwgNiwgMjExLCAyMjAsIDIyMSwgMjQyLCAyMTEsIDIyMCwgCisgICAgMjUxLCAxOTQsIDI0NCwgMzcsIDI1MSwgOTgsIDIzNiwgNywgMjE5LCAxNzEsIDI1MSwgOTcsIDIzNiwgNywgMjE5LCAxNzEsIAorICAgIDI1MSwgMTcwLCAyNDIsIDIwMSwgMjMxLCAxOTAsIDIxMSwgMjIxLCAyNDQsIDE4MiwgMjMxLCAxOTEsIDIyLCAyMTEsIDIyMiwgCisgICAgMjQxLCA2NywgMjQyLCAxNywgMTEzLCAyMzEsIDY0LCAyNDEsIDY3LCAyNDIsIDE3LCAxMTMsIDIxMSwgMjE5LCAyNDEsIDY3LCAKKyAgICAyNDIsIDE3LCAyMjUsIDIsIDIyNiwgMjMxLCAyMTEsIDIyMiwgMiwgMjUxLCAxMTQsIDI0NSwgMjMzLCAyNTEsIDE0OSwgMiwgCisgICAgMjEzLCAyNDYsIDIyNSwgMTcxLCAyLCAyNTEsIDIyMCwgMjQyLCA0MSwgMjMxLCAxOTEsIDIsIDI0MiwgMTE3LCAyMjUsIAorICAgIDExMiwgMjMxLCAxNzksIDIzMSwgMTkxLCAyLCAyMTUsIDk4LCAyMjYsIDIxMiwgMjMxLCAxOTAsIDIyNiwgMjEyLCAyMTEsIAorICAgIDIyMSwgMjUyLCAxOTQsIDI0OSwgMTk4LCAyMTEsIDIwNSwgMjI0LCAxOTIsIDIzNSwgMTM3LCAyMjYsIDIyNywgMjM1LCAKKyAgICAxMzcsIDI0MiwgMTc2LCAyNDIsIDIyOSwgMjUyLCAxOTUsIDI1NCwgMTIxLCAyNDUsIDI2LCAyNTQsIDE2OSwgMjU0LCAxNzAsIAorICAgIDIzMCwgMTQxLCAyMzYsIDEyLCAyMTksIDEwMiwgMjM1LCAyMzksIDI0OCwgNDIsIDIyNSwgMTcwLCAyNDIsIDExMiwgMjQ4LCAKKyAgICAxODcsIDIzMiwgMjA3LCAyMjksIDIxNiwgMjI1LCAxLCAyNDQsIDE5OSwgMjMxLCAxNDcsIDI0MiwgNDAsIDI1MiwgMTQ2LCAKKyAgICAyMjUsIDQsIDIxNywgMTcyLCAyMjUsIDY5LCAyMzQsIDcwLCA3OSwgMjMyLCAxMTcsIDIzMywgMTYsIDIyMiwgMjM2LCAyNDMsIAorICAgIDYxLCAyMTgsIDEzMywgMjM0LCA2OSwgMjUxLCAxNzksIDI0OSwgMTU2LCAyLCAyNDEsIDIzNCwgMjEyLCAxOSwgMjUyLCA3NywgCisgICAgMjQxLCAyMzQsIDI1MSwgMTQzLCAyNDEsIDIzNCwgMTEzLCAyNDEsIDIzMiwgMjE5LCAxMiwgMjQxLCAyMzQsIDI0MiwgMTI3LCAKKyAgICAyNDEsIDIzNCwgMjQxLCAyMzUsIDIsIDc1LCAyNTEsIDIxNiwgMjQxLCAyMzQsIDI0MiwgMTM0LCAyNDEsIDIzNCwgMjExLCAKKyAgICA0MiwgMjQxLCAyMzQsIDIyNCwgMTMxLCAyNDEsIDIzNCwgMjQxLCAyMzUsIDIsIDIyMywgMzYsIDIyMywgNDcsIDI0MSwgCisgICAgMjMyLCAyNDEsIDIzNSwgMjQ4LCA4OSwgMjQ4LCAxLCAyMjAsIDg0LCAyLCAxMTYsIDU5LCAyMzUsIDIyMiwgMjQ1LCAxODAsIAorICAgIDE5MywgMjUxLCAxMjQsIDI1NCwgMTIwLCA4NywgMjUxLCAyMDMsIDIxOSwgOTQsIDg3LCAyNDksIDIzNiwgODcsIDIxOCwgCisgICAgMjQ4LCAyMTcsIDI0OSwgODcsIDI0NiwgOTMsIDI0OCwgMTY1LCA4NywgMjI1LCA3MCwgNjQsIDIyNCwgMjUyLCAyNDQsIDY5LCAKKyAgICAyNTIsIDExLCAyNDcsIDE3MywgODcsIDIxOSwgNSwgMjUyLCAxNjYsIDIxNiwgMTUwLCAyNTIsIDE2NiwgNzEsIDI0NCwgNTksIAorICAgIDI0MCwgMjE4LCAyMjUsIDgsIDg3LCAyMzAsIDE1NCwgMjUyLCAxODAsIDI0OSwgMTA2LCAyNDUsIDQwLCAxMTQsIDI0NywgCisgICAgMTQwLCA1MCwgMjQ5LCAxNDcsIDI1MCwgMjUwLCAyNTIsIDE1MiwgMiwgMjExLCA0MCwgNTAsIDI1MiwgMTUyLCAyLCAyNDcsIAorICAgIDE0MCwgNTAsIDI1MiwgMTUyLCAyLCAyNDUsIDU1LCA1MCwgMjUyLCAxNTIsIDIsIDIyNCwgMjMxLCA1MCwgMjMwLCAxNTQsIAorICAgIDIsIDIxMSwgMjM1LCAyNTAsIDE0NiwgMiwgMjE0LCAxNTMsIDIxNSwgMjMyLCAyMiwgMjExLCA0MCwgNTAsIDIyMSwgMTgwLCAKKyAgICAyMjUsIDE2OSwgMjQ5LCAyMTYsIDI1MSwgMTQ3LCAyMzAsIDE5MSwgMjQ0LCA2NCwgMjQ3LCAxOTMsIDIyNiwgMTY1LCAyNDcsIAorICAgIDE5OCwgMjQ2LCA1NywgMjQ0LCAxMTUsIDI0NCwgNDgsIDIwNCwgMjQ0LCAxMTUsIDI0NCwgNDgsIDIyNiwgODAsIDIsIDI0OSwgCisgICAgMTA4LCAyMjYsIDgwLCAyNDQsIDE5MSwgMjE0LCAxNjMsIDI1MSwgMjQsIDIxNywgMTksIDI1MSwgMjQsIDI1MCwgMjUxLCAKKyAgICAyMzUsIDI0OSwgMjUwLCAxNDYsIDIsIDIxNCwgMTUzLCAyMTUsIDIzMSwgMjUwLCAxNDYsIDIsIDI0NiwgMTEyLCAyMTUsIAorICAgIDIzMSwgMjUyLCAxNDksIDI1MCwgMTQ1LCAyNTAsIDE0LCAyMjQsIDEyNiwgMjIyLCAxODcsIDIyNCwgMTI2LCAyMjYsIDIzLCAKKyAgICAyMTgsIDEyMywgMjIyLCAxMzMsIDIxNSwgMjIzLCAyMjIsIDEzMywgMjUxLCAxOTksIDIxNywgOTIsIDIzMywgNTcsIDIyOCwgCisgICAgNTAsIDIyOCwgNTEsIDIsIDI0OCwgODgsIDI0OSwgMTU1LCAyNTAsIDgsIDI1MSwgMjAwLCAyMDQsIDI1MSwgMjAwLCAyNDIsIAorICAgIDEzNCwgMjUxLCAyMDAsIDI1MSwgMjE2LCAyNTEsIDIwMCwgMjI2LCAxNjEsIDI1MSwgMjAwLCAyNTEsIDE5NywgMjI5LCAKKyAgICAyMTAsIDI1MiwgMTgzLCAyMjEsIDE4OCwgMjMxLCA2NSwgMjE3LCAyLCAyMjMsIDEyNiwgMjI2LCA3OCwgMjQ0LCAxNjcsIAorICAgIDIzMSwgMjM5LCAyMjEsIDIyNSwgMjU0LCA5NywgMjI0LCAxNDgsIDI1NSwgNSwgMjMyLCAxMTksIDI1MCwgMTM1LCAyMzEsIAorICAgIDc3LCAyMjYsIDEzMywgMjE1LCAyMzksIDIzNiwgMywgMjE1LCAyMzksIDIyNiwgODYsIDI0NiwgMzIsIDg3LCAyMzYsIDAsIAorICAgIDI0NSwgMTI3LCAyNDUsIDEyOCwgMiwgMjQ2LCAxMTIsIDgwLCA0OCwgMjUwLCA4LCAyMzEsIDIwNSwgMiwgMjMyLCAxMTMsIAorICAgIDI0NCwgODEsIDI1MCwgOCwgMjMxLCAyMDUsIDIsIDIyMywgMTYwLCAyNDQsIDgxLCAyMDQsIDIzMSwgMjA1LCAyLCAyMjMsIAorICAgIDE2MCwgMjQ0LCA4MSwgMjA0LCAyMzEsIDIwNSwgMiwgMjMyLCAxMTMsIDI0NCwgODEsIDIyNCwgMjM5LCAyMjQsIDI0MCwgCisgICAgMjQwLCAyNTUsIDIyOSwgODksIDIzMCwgMTY0LCAyMjUsIDEyMCwgMjMwLCAxNjQsIDIyNSwgMTIxLCAyLCA5NywgODAsIAorICAgIDI1MywgMjE1LCAyMzMsIDUyLCAyMTMsIDE3NSwgMjMwLCAxNjMsIDIzMCwgMTY0LCAyMjUsIDEyMSwgMjI2LCAyMzQsIDIyOCwgCisgICAgODAsIDIzMCwgMTY0LCAyMjUsIDExOSwgMjU0LCA5OCwgMiwgMjUyLCAxMzcsIDI1MSwgMTgsIDIxMywgMTcyLCAyNTEsIDE4LCAKKyAgICAyMTYsIDI1NSwgMjIzLCAxNzYsIDIxMywgMTcxLCAyMTUsIDYwLCA5NywgMjUzLCAyNTUsIDI1MCwgMTAsIDk3LCAyMiwgCisgICAgMTQwLCAyMDQsIDI1MCwgNDQsIDI1MywgMjU1LCAyNTAsIDEwLCA5NywgMjIsIDE0MCwgMjA0LCAyNTAsIDQ0LCAyNTQsIDAsIAorICAgIDIsIDM3LCAxMjMsIDIyNiwgMTI0LCAyNTAsIDEwLCAyNDYsIDExMiwgMjIsIDIxNCwgMTUzLCAyMDQsIDI1MCwgNDQsIDI1MywgCisgICAgMjU1LCAyNTQsIDk2LCAyNDYsIDExMiwgMjIsIDIxNCwgMTUzLCAyMDQsIDI1MCwgNDQsIDI1MywgMjU1LCAxMjEsIDI1MSwgCisgICAgMTQ2LCA4NywgMTI1LCAyNTEsIDE0NiwgODcsIDIxOSwgOSwgMiwgMjUxLCAxMiwgOTEsIDIxOSwgOCwgMjE5LCA5LCAyLCAKKyAgICAxMjMsIDIxOSwgMzMsIDIxMiwgMzUsIDIxOSwgOSwgMiwgMTM0LCAyMTksIDMzLCAyMTIsIDM0LCAyNTIsIDEyMywgMjQ1LCAKKyAgICAxODAsIDIyNSwgMzAsIDIzMywgNDgsIDIzMSwgMjE2LCAyNDIsIDE5MSwgMjIyLCAyNTAsIDIzMSwgMjE2LCAyNDIsIDE5MSwgCisgICAgMjMyLCAxNTgsIDIsIDIzNSwgMjMyLCAyMjUsIDIwMiwgMjUwLCA4LCAyMzIsIDE1OCwgMiwgMjM0LCAxNDQsIDIzNCwgMTQ0LCAKKyAgICAyMzIsIDE1NywgMjA0LCAyMzIsIDE1NywgMjUyLCA1MiwgMjUyLCA1MywgMiwgMjUxLCAxMiwgOTEsIDI1MSwgMTk4LCAyMzIsIAorICAgIDIxMCwgODcsIDIyMywgMTc3LCAyNTEsIDk0LCAyNTIsIDE5MywgMiwgMTQwLCA4MCwgNDgsIDI0NSwgMTUxLCAyLCAxNDAsIAorICAgIDgwLCA0OCwgMjI2LCAyMDEsIDIsIDI0NSwgMzksIDE2NCwgMiwgNDMsIDQ0LCA4MCwgNDgsIDIxOSwgNDEsIDIsIDk3LCA4MCwgCisgICAgNDgsIDIxNiwgMTUsIDIsIDIxNCwgMTUzLCA4MCwgNDgsIDIyOCwgODAsIDEyMywgMjE0LCAxODQsIDI0NSwgMTk5LCA4NywgCisgICAgMjM0LCAxNDIsIDIxNiwgMjQ4LCAyMzUsIDIyNiwgMTYsIDMxLCA3LCA2LCAyMzMsIDE1LCAyMzUsIDIyNiwgMTYsIDMxLCA3LCAKKyAgICA0LCAyMzMsIDE1LCAyMzUsIDIyNiwgMTYsIDMxLCAyMjcsIDIwMywgMjM1LCAyMjYsIDE2LCAzMSwgMjE3LCAxODQsIDIzNSwgCisgICAgMjI2LCAxNiwgMzEsIDcsIDIzMywgMTUsIDI0NCwgMTA0LCAyNDUsIDE4MCwgMjE2LCAxMCwgMjExLCAxOTksIDI0MiwgMjgsIAorICAgIDIyNywgMTg2LCAyMiwgMjUxLCAyMDUsIDI0MSwgNzMsIDIyNSwgNTMsIDIzMCwgMjMxLCAyMTcsIDAsIDI0OSwgMTIyLCAKKyAgICAyNTIsIDE2NywgMjE5LCAxMjcsIDIyNSwgMTIsIDIxOCwgMTU5LCAyLCAyMzAsIDIyOSwgMjQ3LCAxMjgsIDIzNSwgMTM3LCAKKyAgICAxNiwgMzEsIDI1MiwgNjUsIDIxNSwgMjIxLCAyNDUsIDE2NCwgODUsIDQyLCAyNTEsIDk0LCA3MSwgNDIsIDI1MSwgOTQsIAorICAgIDIzMywgOTEsIDIyMywgMTE0LCAyNTAsIDQzLCAyMzMsIDkxLCAyNTEsIDIxNiwgMjUwLCA0MywgMjMzLCA5MSwgMjI2LCAKKyAgICAxNjEsIDI0OCwgMCwgMjMzLCA5MSwgMjUxLCAyMTYsIDI0OCwgMCwgNCwgMjI2LCAxNjEsIDI0OCwgMCwgNCwgMjUxLCAyMTYsIAorICAgIDI0OCwgMCwgMjE0LCAxNjIsIDIyMywgMTE0LCAyMTUsIDIyNiwgMjQ2LCAxMTMsIDIyMywgMTE0LCAyMTUsIDIyNiwgMjE0LCAKKyAgICAxNjIsIDQsIDIyMywgMTE0LCAyMTUsIDIyNiwgMjQ2LCAxMTMsIDQsIDIyMywgMTE0LCAyMTUsIDIyNiwgMzcsIDI0OSwgCisgICAgMTM5LCAyMjQsIDI1NSwgMjQ5LCAxMzksIDIyNSwgMCwgMiwgMjQyLCAzMywgNTEsIDI0OSwgMTM5LCAyMjQsIDI1NSwgMjI4LCAKKyAgICA1NCwgNDMsIDIyMCwgMTU1LCAyLCAxMzQsIDI0NywgMTI2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMTIzLCAyMjYsIDI0NiwgCisgICAgMjUwLCAxMiwgMjQ0LCAxOTksIDExMywgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAxMzQsIDIyNiwgMjQ2LCAyNTAsIAorICAgIDEyLCAyNDQsIDE5OSwgMjQ0LCAxOSwgMjI2LCAyNDYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDQsIDg5LCAyMjYsIDI0NiwgCisgICAgMjUwLCAxMiwgMjQ0LCAxOTksIDIxOSwgMTI3LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIyMCwgMTI0LCAyMjYsIAorICAgIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NSwgMjAxLCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIyOCwgMjA1LCAKKyAgICAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNiwgMjQ5LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDI0NSwgCisgICAgMTc2LCAyMjYsIDI0NiwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNSwgNzcsIDIyNiwgMjQ2LCAyNTAsIDEyLCAyNDQsIDE5OSwgCisgICAgMjI2LCAxOTYsIDI1MCwgMTIsIDI0NCwgMTk5LCAyMTUsIDU2LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE2LCAxNDEsIDI1MCwgCisgICAgMTIsIDI0NCwgMTk5LCAyNDQsIDE1LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjQ0LCA4NywgMjUwLCAxMiwgMjQ0LCAxOTksIAorICAgIDIxOSwgMTIzLCAyNTAsIDEyLCAyNDQsIDE5OSwgMjIwLCAxMjMsIDI1MCwgMTIsIDI0NCwgMTk5LCAyNDUsIDIwMCwgMjUwLCAKKyAgICAxMiwgMjQ0LCAxOTksIDIyOCwgMjA0LCAyNTAsIDEyLCAyNDQsIDE5OSwgMjE2LCAyNDcsIDI1MCwgMTIsIDI0NCwgMTk5LCAKKyAgICAyNDUsIDE3NCwgMjUwLCAxMiwgMjQ0LCAxOTksIDIxNSwgNzUsIDIzMCwgMTIyLCAyNDMsIDIzNywgMjE2LCAzNywgMjE2LCAKKyAgICAzLCAyMTgsIDE1MCwgNjQsIDIzMiwgMjQ1LCAyMTksIDE3MiwgNjQsIDIzNSwgMTM4LCAyMzAsIDExMSwgMjQyLCAxMzEsIAorICAgIDI0NCwgMTk4LCAyNDIsIDEzMSwgMjQ0LCAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDI0NCwgMTk5LCAyLCAyMTcsIDE1LCAKKyAgICA2NCwgMjM1LCA1OSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTUsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAKKyAgICAyMDQsIDIzMCwgMTE2LCAyMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTYsIAorICAgIDIyLCAyNDksIDIzOCwgMjE3LCAyNDgsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyMDQsIDIzMCwgMTE2LCAyMiwgMjE2LCAKKyAgICAxMDUsIDI0NSwgMjEsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAyNDIsIDMyLCAyMTksIDc2LCAyNDQsIDE5OSwgMiwgMjQwLCAKKyAgICAyNTQsIDIxMSwgMjMzLCAyNDQsIDE5OCwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIxOSwgNzYsIDI0NSwgMjEsIDI0NCwgCisgICAgMTk5LCAyMjEsIDIxOSwgMjQ4LCA3MCwgMjQ0LCA0MSwgMjIzLCA5MSwgMjQ0LCAxOTgsIDIxOSwgNzYsIDI0NCwgMTk5LCAyLCAKKyAgICAyNDEsIDIzMywgMjQ1LCAyMSwgMjE5LCA3NiwgMjQ0LCAxOTksIDIsIDIxOCwgMzUsIDIxOSwgNzUsIDI0NCwgMTk4LCAyMjksIAorICAgIDkyLCAyNDQsIDE5OCwgMjQ1LCAzMSwgMjQ0LCAxOTgsIDIxNCwgMTg4LCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIsIDI0OSwgCisgICAgMjM4LCAyMTcsIDI0OCwgMjI1LCAxOTUsIDI0NCwgMTk4LCAyNDksIDIwOSwgMjQ0LCAxOTgsIDI0OSwgMjEwLCAyNDQsIAorICAgIDE5OCwgMjM0LCA2OCwgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyMTYsIDEzOCwgMTE2LCAyMzQsIDY5LCAyMzQsIDY4LCAyNDQsIAorICAgIDE5OSwgMiwgMjE5LCA3NiwgMjQ1LCAyMSwgMjM0LCA2OCwgMjQ0LCAxOTksIDIsIDI1MCwgOCwgMjQ1LCAyMSwgMjQ0LCAKKyAgICAxOTksIDIsIDIxOCwgODksIDIxNiwgMjAsIDI0NCwgMTk5LCAyLCAyMTgsIDg5LCAyMTYsIDIxLCAyMiwgMjExLCAyMzMsIAorICAgIDI0NSwgMjMsIDI0NCwgMTk5LCAyLCAyMTgsIDg5LCAyMTYsIDIxLCAyMiwgMjE2LCAxMDUsIDI0NSwgMjEsIDI0NywgMjAwLCAKKyAgICAyNDQsIDE5OCwgMjExLCAyMDQsIDI0NCwgMTk4LCAyNTQsIDExNiwgMjQ0LCAxOTgsIDIyNCwgMjMwLCAyNDQsIDE5OCwgCisgICAgMjQ5LCAxMjQsIDI0NCwgMTk4LCAyMjUsIDE3MywgMjQ0LCAxOTgsIDI0NCwgMTk5LCAyLCAyMzIsIDEzMiwgNjQsIDIxNSwgCisgICAgMjA1LCAyNDcsIDIwMCwgMjUxLCA5NiwgMjIzLCA5MSwgMjQ0LCAxOTgsIDI0MywgMjQ3LCAyNDQsIDE5OSwgMiwgMjA0LCAKKyAgICAyMzAsIDExNSwgMjU0LCAxMTQsIDI0NCwgMTk4LCAyNDQsIDE2MCwgMjQ0LCAxOTgsIDIxMiwgMjAsIDI0NCwgMTk4LCAyMTksIAorICAgIDkzLCAyNDQsIDE5OCwgMjE2LCA3MiwgMjQ0LCAxOTgsIDI0MiwgMTMyLCAyNDQsIDE5OCwgMjMyLCAxMjAsIDI0OSwgMTI0LCAKKyAgICAyNDQsIDE5OCwgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTUsIDI0MCwgMjEwLCAyNDQsIDE5OCwgMjQ0LCAxOTksIDIsIAorICAgIDIwNCwgMjMwLCAxMTYsIDIyLCAyNDksIDIzOCwgMjE3LCAyNDgsIDI0NCwgMTk5LCAyMjEsIDE5MiwgMjM2LCA3LCAyNDQsIAorICAgIDE2MSwgMjUzLCAyMjEsIDI0NCwgMTk4LCAyNDQsIDU3LCAyNDQsIDE5OCwgMjE5LCA5NCwgMjQ0LCAxOTgsIDI0NywgMTczLCAKKyAgICAyNDQsIDE5OCwgMjQ0LCAxOTksIDIxMSwgMjMwLCAyMzAsIDExNSwgMjQ0LCAxOTksIDIsIDIzMSwgODksIDIzMSwgMTQ5LCAKKyAgICAyNDIsIDEzMSwgMjUwLCAyMzMsIDI0NCwgMTk5LCAyLCAyMTksIDc2LCAyNDUsIDIxLCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIAorICAgIDIxNywgMTUsIDY0LCAyMzUsIDU5LCAyMTksIDc2LCAyNTAsIDIzMywgMjQ0LCAxOTksIDIsIDIwNCwgMjMwLCAxMTUsIDIxOSwgCisgICAgNzYsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjQxLCAyMzMsIDI0NSwgMjEsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjExLCAKKyAgICAxOTYsIDIxOSwgNzcsIDIzNCwgNjgsIDI1MCwgMjMzLCAyNDQsIDE5OSwgMiwgMjUwLCA4LCAyNDUsIDIxLCAyMjQsIDIzMCwgCisgICAgMjUwLCAyMzMsIDI0NCwgMTk4LCAyNDksIDEyNCwgMjUwLCAyMzMsIDI0NCwgMTk4LCAyMTIsIDIwLCAyNTAsIDIzMywgMjQ0LCAKKyAgICAxOTgsIDI0NCwgMTk5LCAyLCAyMjgsIDgwLCAyNDIsIDE3MCwgMjQzLCA0MSwgMjQ0LCAxOTksIDIsIDIyNiwgMjE5LCAyNDMsIAorICAgIDQxLCAyMjUsIDE3MSwgMjUxLCAxNzYsIDI0OCwgODMsIDIyMSwgMTcxLCAyMzAsIDE1MCwgMjQxLCAyMzYsIDIzMCwgMTUwLCAKKyAgICAyMTksIDEwLCAyMzAsIDE1MCwgMjQyLCAxMiwgMjI1LCAxNzEsIDIyMywgMTU5LCAxMjMsIDI0MiwgMjIsIDIyNSwgMTcxLCAKKyAgICAyMjMsIDE1OSwgMjUxLCAxODYsIDI0MiwgMTgsIDIzNiwgNywgMjUwLCAxODcsIDIyNSwgMTcxLCAyNDMsIDI0NiwgMjI1LCAKKyAgICAxNzEsIDIsIDIyNCwgMjMwLCAyNDQsIDE5OCwgMjI1LCAxNzEsIDIsIDI0NCwgNDksIDI0MiwgMTcsIDIyMiwgMjA1LCAyNDEsIAorICAgIDIyMSwgMjE4LCAxNDUsIDIzMiwgMTU1LCAyMjMsIDE2NSwgMjUwLCAyNTIsIDI0MSwgMTY5LCAyMTUsIDI0OSwgMjQxLCAKKyAgICAxNjksIDIxNSwgMjUwLCAyLCAyNTEsIDEyMiwgMjI4LCA1OCwgMjE1LCAyNDksIDIzMSwgMzcsIDE5MywgMjIzLCAxNjYsIAorICAgIDIxOCwgMTUxLCAyMTUsIDI0NywgMjE1LCAyNDgsIDI1MCwgMjUyLCAyNTEsIDEwMCwgMjI2LCAxOTgsIDI1MSwgMTAwLCAKKyAgICAyMTUsIDIwMiwgMjUxLCAxMDEsIDIxOCwgMTMxLCAyMzAsIDE5MiwgMjU0LCAxMzgsIDI0NCwgMTA1LCAyNDUsIDE0NSwgCisgICAgMjI1LCAyLCAyNTAsIDI1MiwgMjI2LCAxOTgsIDIyNSwgMiwgMjUwLCAyNTIsIDIxNywgMzMsIDIyNiwgMTk4LCAyMTcsIDMzLCAKKyAgICAyNTMsIDE4OCwgMjI2LCAxOTgsIDI1MywgMTg4LCAyMjMsIDEyMSwgMjEzLCAyNDcsIDI0OCwgNjYsIDIxNSwgMTkzLCAyNTMsIAorICAgIDI1MCwgMjMyLCAxMjMsIDIxNSwgMjU1LCAyMzAsIDE0NCwgMjMwLCAxMjEsIDIyMywgMTY0LCAyMTgsIDcsIDIyMywgMTY0LCAKKyAgICAyMzAsIDEyMSwgMjUxLCAzNiwgMjU0LCAyMzgsIDIxNSwgMjQ2LCAyMjAsIDE4LCAyMjIsIDE4NCwgMjE5LCAzLCAyMDMsIAorICAgIDIxNSwgMjUzLCAyMzIsIDIzNiwgNjcsIDIxNSwgMjUzLCAyMzIsIDIzNiwgMjQ5LCAxOTgsIDUwLCAyMjUsIDIsIDI1MCwgCisgICAgMjM3LCAyMjMsIDQ3LCAyMzIsIDIzNiwgMjE1LCAyMjMsIDI0NCwgODIsIDIyNiwgMjAxLCAyMjQsIDI0MSwgMjQ3LCAxMzEsIAorICAgIDIyOCwgODAsIDI0NSwgMTMzLCA1MCwgMjE5LCA3NCwgODcsIDIyOCwgODAsIDIxOSwgNzQsIDg3LCAyMjQsIDEyNSwgMjMyLCAKKyAgICAxOTksIDIzNiwgNywgMjM1LCAxNjMsIDIyNSwgNDQsIDg3LCAyNDcsIDE1NCwgMjI4LCA1NywgMjMyLCAxOTksIDg3LCAyMjQsIAorICAgIDIzNSwgMjEyLCA0MSwgODcsIDIyOCwgNzEsIDIxMiwgNDEsIDg3LCAyNTIsIDEwLCAyMjgsIDgwLCAyNTIsIDksIDI1MiwgOCwgCisgICAgMjMwLCAxMjEsIDI1MiwgOCwgMjI1LCAyMTYsIDIyOCwgODAsIDIyNSwgMjE1LCAyNTAsIDEwOCwgMjQ5LCAxMzIsIDIzMSwgCisgICAgNjEsIDg3LCAyMTEsIDIxOCwgODcsIDIyMywgNjIsIDI1MiwgMTk1LCA4NywgMjE2LCAzOCwgMjEyLCA0MSwgMjUwLCA1LCAKKyAgICAyMTksIDIzNiwgMjUyLCAxMjYsIDI1MiwgMTI0LCAyMjUsIDI0NiwgMjQ5LCAxODUsIDI0OSwgOTQsIDI1MiwgMTc3LCAyNTAsIAorICAgIDMwLCA0MywgMjMyLCA5NSwgMTA4LCAxNiwgMzEsIDIyNCwgNiwgMTA4LCAxNiwgMzEsIDI1NCwgMjAxLCAxMDgsIDE2LCAzMSwgCisgICAgMjQ0LCAxMDQsIDEwOCwgMTYsIDMxLCAyNDUsIDIzMSwgMTA4LCAxNiwgMzEsIDIxMiwgNDAsIDEwOCwgMTYsIDMxLCAyNTQsIAorICAgIDUxLCAxMDgsIDE2LCAzMSwgMjU0LCA1MiwgMjIzLCAxMDgsIDEwOCwgMTYsIDMxLCAyNTQsIDUyLCAyMjMsIDEwNywgMTA4LCAKKyAgICAxNiwgMzEsIDI1NCwgNTIsIDIxMywgMTQzLCAxMDgsIDE2LCAzMSwgMjU0LCA1MiwgMjEzLCAxNDIsIDEwOCwgMTYsIDMxLCAKICAgICAyMTMsIDE1NywgMTA4LCAxNiwgMzEsIDIxMywgMTU2LCAxMDgsIDE2LCAzMSwgMjEzLCAxNTUsIDEwOCwgMTYsIDMxLCAyMTgsIAotICAgIDQ0LCAxMDgsIDE2LCAzMSwgMjI1LCAxMjUsIDIxOCwgNDQsIDEwOCwgMTYsIDMxLCA4NSwgMjE4LCA0NCwgMTA4LCAxNiwgCi0gICAgMzEsIDIzMSwgNTUsIDIxOCwgNzEsIDEwOCwgMTYsIDMxLCAyMzEsIDU1LCAyMTgsIDcwLCAxMDgsIDE2LCAzMSwgMjMxLCAKLSAgICA1NSwgMjE4LCA2OSwgMTA4LCAxNiwgMzEsIDI1MCwgMzgsIDEwOCwgMTYsIDMxLCAyMjIsIDEsIDEwOCwgMTYsIDMxLCAyMjgsIAotICAgIDE4OCwgMTA4LCAxNiwgMzEsIDIxMywgMTQxLCAxMDgsIDE2LCAzMSwgMjEzLCAxNDAsIDEwOCwgMTYsIDMxLCAyMjIsIDIwNCwgCi0gICAgMjIyLCAxLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDQsIDIyMiwgMCwgMTA4LCAxNiwgMzEsIDI0MiwgMTY2LCAxMDgsIDE2LCAKLSAgICAzMSwgMjE5LCAxNjYsIDEwOCwgMTYsIDMxLCAyMzUsIDE3NywgMjI2LCAxNTMsIDEwOCwgMTYsIDMxLCAyMzUsIDE3NywgCi0gICAgMjI2LCAxNTIsIDEwOCwgMTYsIDMxLCAyNDksIDEzNCwgNjQsIDIzNSwgMTc2LCAxMDgsIDE2LCAzMSwgMjIzLCAxMDEsIDY0LCAKLSAgICAyMzUsIDE3NiwgMTA4LCAxNiwgMzEsIDI0OSwgMTY4LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDIzNSwgMTc1LCAyMjYsIAotICAgIDE1MywgMTA4LCAxNiwgMzEsIDIxOCwgNzIsIDY0LCAyNDksIDE2NywgMTA4LCAxNiwgMzEsIDI0OSwgMTM0LCA2NCwgMjQ5LCAKLSAgICAxNjcsIDEwOCwgMTYsIDMxLCAyNDksIDEzNCwgNjQsIDI0OSwgMTY2LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNjgsIDI1NCwgODMsIAotICAgIDEwOCwgMTYsIDMxLCAyMjIsIDIsIDY0LCAyNDksIDE2OCwgMjU0LCA4MywgMTA4LCAxNiwgMzEsIDIxOCwgNzIsIDY0LCAKLSAgICAyMjIsIDIsIDY0LCAyNDksIDE2NywgMTA4LCAxNiwgMzEsIDIxMywgMjQzLCAxMDgsIDE2LCAzMSwgMjE2LCA4NCwgMjI2LCAKLSAgICAxNTMsIDEwOCwgMTYsIDMxLCAyMzMsIDU3LCAyMjYsIDE1MywgMTA4LCAxNiwgMzEsIDI1NCwgODIsIDIyNiwgMTUzLCAxMDgsIAotICAgIDE2LCAzMSwgMjE4LCA3MiwgNjQsIDI1NCwgODEsIDEwOCwgMTYsIDMxLCAyMjIsIDIsIDY0LCAyNTQsIDgxLCAxMDgsIDE2LCAKLSAgICAzMSwgMjE4LCA3MiwgNjQsIDIyMiwgMiwgNjQsIDI1NCwgODEsIDEwOCwgMTYsIDMxLCAyMTMsIDE1OCwgNjQsIDI1NCwgODEsIAotICAgIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgNjQsIDI1NCwgODEsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMSwgNjQsIDI1NCwgODAsIAotICAgIDEwOCwgMTYsIDMxLCAyMjMsIDEwMCwgMTA4LCAxNiwgMzEsIDIyMywgOTksIDEwOCwgMTYsIDMxLCAyMjMsIDk4LCAxMDgsIAotICAgIDE2LCAzMSwgMjIzLCA5NywgMTA4LCAxNiwgMzEsIDI1NCwgMTU3LCAxMDgsIDE2LCAzMSwgMjU0LCAxNTYsIDEwOCwgMTYsIAotICAgIDMxLCAyMzEsIDE2MywgMTA4LCAxNiwgMzEsIDIyMiwgNywgMTA4LCAxNiwgMzEsIDI1MywgMjQ2LCAxMDgsIDE2LCAzMSwgCi0gICAgMjIzLCAxMjUsIDEwOCwgMTYsIDMxLCAyMjMsIDEyNCwgMTA4LCAxNiwgMzEsIDI1MywgMTgzLCAxMDgsIDE2LCAzMSwgMjUxLCAKLSAgICAyMjksIDIyNiwgMTUzLCAxMDgsIDE2LCAzMSwgMjE3LCA0OSwgMTA4LCAxNiwgMzEsIDIxNywgNDgsIDEwOCwgMTYsIDMxLCAKLSAgICAyMjQsIDgsIDIzMiwgMjIyLCAxMDgsIDE2LCAzMSwgMjUxLCAxODMsIDEwOCwgMTYsIDMxLCAyNTEsIDE4MiwgMTA4LCAxNiwgCi0gICAgMzEsIDI1MSwgMTgxLCAxMDgsIDE2LCAzMSwgMjU0LCAxMzgsIDEwOCwgMTYsIDMxLCAyMjYsIDIxOCwgMTA4LCAxNiwgMzEsIAotICAgIDIxOCwgMjQ4LCAxMDgsIDE2LCAzMSwgMjE2LCA4MiwgMTA4LCAxNiwgMzEsIDI0MiwgOTYsIDEwOCwgMTYsIDMxLCAyMTIsIAotICAgIDI4LCAxMDgsIDE2LCAzMSwgMjI0LCAyMjYsIDEwOCwgMTYsIDMxLCAyNTEsIDE0LCAxMDgsIDE2LCAzMSwgMjE1LCA4NiwgCi0gICAgMTA4LCAxNiwgMzEsIDI1MCwgMjQ2LCAyMzAsIDEyMiwgMTA4LCAxNiwgMzEsIDIyMSwgMjAyLCA2NCwgMjM1LCA1NSwgMTA4LCAKLSAgICAxNiwgMzEsIDI1MSwgMjUsIDEwOCwgMTYsIDMxLCAyMTUsIDIxOSwgMTA4LCAxNiwgMzEsIDIxOCwgMTU0LCAyMTUsIDIxOSwgCi0gICAgMTA4LCAxNiwgMzEsIDIzMiwgMTQ4LCAxMDgsIDE2LCAzMSwgMjE5LCA1NiwgMTA4LCAxNiwgMzEsIDIxNCwgMTQyLCAxMDgsIAotICAgIDE2LCAzMSwgMjQwLCAyNDYsIDI0NiwgNjQsIDEwOCwgMTYsIDMxLCAyNTMsIDIyNywgMTA4LCAxNiwgMzEsIDIyNCwgMjM0LCAKLSAgICAyNTMsIDIyNywgMTA4LCAxNiwgMzEsIDI1MSwgMTQyLCAxMDgsIDE2LCAzMSwgMjI0LCAyMjUsIDI1MSwgMTQyLCAxMDgsIAotICAgIDE2LCAzMSwgMjU0LCAxMzUsIDEwOCwgMTYsIDMxLCAyMTgsIDExNywgMjE4LCAyNiwgMjE4LCAxMTYsIDEwOCwgMTYsIDMxLCAKLSAgICAyMTgsIDExNywgMjE4LCAyNiwgMjE4LCAxMTUsIDEwOCwgMTYsIDMxLCAyMTgsIDY4LCAxMDgsIDE2LCAzMSwgMjI0LCAyMDAsIAotICAgIDEwOCwgMTYsIDMxLCAyNDcsIDE4MSwgMTA4LCAxNiwgMzEsIDI0NywgMTgzLCAxMDgsIDE2LCAzMSwgMjQ3LCAxODIsIDEwOCwgCi0gICAgMTYsIDMxLCAyMjQsIDEzMSwgMTA4LCAxNiwgMzEsIDIyNCwgMTIwLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMjIsIDEwOCwgMTYsIAotICAgIDMxLCAyNDksIDEyMSwgMTA4LCAxNiwgMzEsIDI0OSwgMTIwLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMTksIDEwOCwgMTYsIDMxLCAKLSAgICAyNDksIDExOCwgMTA4LCAxNiwgMzEsIDI1NCwgMTY5LCAxMDgsIDE2LCAzMSwgMjUyLCAxMTksIDY0LCAyMzEsIDE0OSwgCi0gICAgMTA4LCAxNiwgMzEsIDI1MiwgMTE5LCA2NCwgMjE0LCAxNywgMTA4LCAxNiwgMzEsIDIyMywgNTcsIDEwOCwgMTYsIDMxLCAKLSAgICAyNDAsIDIzOCwgMTA4LCAxNiwgMzEsIDIyOCwgMjEyLCAxMDgsIDE2LCAzMSwgMjQ4LCAxNDUsIDEwOCwgMTYsIDMxLCAyMzAsIAotICAgIDEzNCwgMTA4LCAxNiwgMzEsIDE2MywgMjQ2LCA5NCwgMTA4LCAxNiwgMzEsIDE2MywgMjI2LCAxMzIsIDksIDE0LCAyNDAsIAotICAgIDEwMiwgOSwgMTQsIDI0MCwgMTAxLCA5LCAxNCwgMjQwLCAxMDAsIDksIDE0LCAyNDAsIDk5LCA5LCAxNCwgMjQwLCA5OCwgOSwgCi0gICAgMTQsIDI0MCwgOTcsIDksIDE0LCAyNDAsIDk2LCA5LCAxNCwgMjQwLCA5NSwgOSwgMTQsIDI0MCwgOTQsIDksIDE0LCAyNDAsIAotICAgIDkzLCA5LCAxNCwgMjQwLCA5MiwgOSwgMTQsIDI0MCwgOTEsIDksIDE0LCAyNDAsIDkwLCA5LCAxNCwgMjQwLCA4OSwgOSwgCi0gICAgMTQsIDI0MCwgODgsIDksIDE0LCAyNDAsIDg3LCA5LCAxNCwgMjQwLCA4NiwgOSwgMTQsIDI0MCwgODUsIDksIDE0LCAyNDAsIAotICAgIDg0LCA5LCAxNCwgMjQwLCA4MywgOSwgMTQsIDI0MCwgODIsIDksIDE0LCAyNDAsIDgxLCA5LCAxNCwgMjQwLCA4MCwgOSwgCi0gICAgMTQsIDI0MCwgNzksIDksIDE0LCAyNDAsIDc4LCA5LCAxNCwgMjQwLCA3NywgOSwgMTQsIDI0MCwgNzYsIDksIDE0LCAyNDAsIAotICAgIDc1LCA5LCAxNCwgMjQwLCA3NCwgOSwgMTQsIDI0MCwgNzMsIDksIDE0LCAyNDAsIDcyLCA5LCAxNCwgMjQwLCA3MSwgOSwgCi0gICAgMTQsIDI0MCwgNzAsIDksIDE0LCAyNDAsIDY5LCA5LCAxNCwgMjQwLCA2OCwgOSwgMTQsIDI0MCwgNjcsIDksIDE0LCAyNDAsIAotICAgIDY2LCA5LCAxNCwgMjQwLCA2NSwgOSwgMTQsIDI0MCwgNjQsIDksIDE0LCAyNDAsIDYzLCA5LCAxNCwgMjQwLCA2MiwgOSwgCi0gICAgMTQsIDI0MCwgNjEsIDksIDE0LCAyNDAsIDYwLCA5LCAxNCwgMjQwLCA1OSwgOSwgMTQsIDI0MCwgNTgsIDksIDE0LCAyNDAsIAotICAgIDU3LCA5LCAxNCwgMjQwLCA1NiwgOSwgMTQsIDI0MCwgNTUsIDksIDE0LCAyNDAsIDU0LCA5LCAxNCwgMjQwLCA1MywgOSwgCi0gICAgMTQsIDI0MCwgNTIsIDksIDE0LCAyNDAsIDUxLCA5LCAxNCwgMjQwLCA1MCwgOSwgMTQsIDI0MCwgNDksIDksIDE0LCAyNDAsIAotICAgIDQ4LCA5LCAxNCwgMjQwLCA0NywgOSwgMTQsIDI0MCwgNDYsIDksIDE0LCAyNDAsIDQ1LCA5LCAxNCwgMjQwLCA0NCwgOSwgCi0gICAgMTQsIDI0MCwgNDMsIDksIDE0LCAyNDAsIDQyLCA5LCAxNCwgMjQwLCA0MSwgOSwgMTQsIDI0MCwgNDAsIDksIDE0LCAyNDAsIAotICAgIDM5LCA5LCAxNCwgMjQwLCAzOCwgOSwgMTQsIDI0MCwgMzcsIDksIDE0LCAyNDAsIDM2LCA5LCAxNCwgMjQwLCAzNSwgOSwgCi0gICAgMTQsIDI0MCwgMzQsIDksIDE0LCAyNDAsIDMzLCA5LCAxNCwgMjQwLCAzMiwgOSwgMTQsIDI0MCwgMzEsIDksIDE0LCAyNDAsIAotICAgIDMwLCA5LCAxNCwgMjQwLCAyOSwgOSwgMTQsIDI0MCwgMjgsIDksIDE0LCAyNDAsIDI3LCA5LCAxNCwgMjQwLCAyNiwgOSwgCi0gICAgMTQsIDI0MCwgMjUsIDksIDE0LCAyNDAsIDI0LCA5LCAxNCwgMjQwLCAyMywgOSwgMTQsIDI0MCwgMjIsIDksIDE0LCAyNDAsIAotICAgIDIxLCA5LCAxNCwgMjQwLCAyMCwgOSwgMTQsIDI0MCwgMTksIDksIDE0LCAyNDAsIDE4LCA5LCAxNCwgMjQwLCAxNywgOSwgCi0gICAgMTQsIDI0MCwgMTYsIDksIDE0LCAyNDAsIDE1LCA5LCAxNCwgMjQwLCAxNCwgOSwgMTQsIDI0MCwgMTMsIDksIDE0LCAyNDAsIAotICAgIDEyLCA5LCAxNCwgMjQwLCAxMSwgOSwgMTQsIDI0MCwgMTAsIDksIDE0LCAyNDAsIDksIDksIDE0LCAyNDAsIDgsIDksIDE0LCAKLSAgICAyNDAsIDcsIDksIDE0LCAyNDAsIDYsIDksIDE0LCAyNDAsIDUsIDksIDE0LCAyNDAsIDQsIDksIDE0LCAyNDAsIDMsIDksIAotICAgIDE0LCAyNDAsIDIsIDksIDE0LCAyNDAsIDEsIDksIDE0LCAyNDAsIDAsIDksIDE0LCAyMzksIDI1NSwgOSwgMTQsIDIzOSwgCi0gICAgMjU0LCA5LCAxNCwgMjM5LCAyNTMsIDksIDE0LCAyMzksIDI1MiwgOSwgMTQsIDIzOSwgMjUxLCA5LCAxNCwgMjM5LCAyNTAsIAotICAgIDksIDE0LCAyMzksIDI0OSwgOSwgMTQsIDIzOSwgMjQ4LCA5LCAxNCwgMjM5LCAyNDcsIDksIDE0LCAyMzksIDI0NiwgOSwgCi0gICAgMTQsIDIzOSwgMjQ1LCA5LCAxNCwgMjM5LCAyNDQsIDksIDE0LCAyMzksIDI0MywgOSwgMTQsIDIzOSwgMjQyLCA5LCAxNCwgCi0gICAgMjM5LCAyNDEsIDksIDE0LCAyMzksIDI0MCwgOSwgMTQsIDIzOSwgMjM5LCA5LCAxNCwgMjM5LCAyMzgsIDksIDE0LCAyMzksIAotICAgIDIzNywgOSwgMTQsIDIzOSwgMjM2LCA5LCAxNCwgMjM5LCAyMzUsIDksIDE0LCAyMzksIDIzNCwgOSwgMTQsIDIzOSwgMjMzLCAKLSAgICA5LCAxNCwgMjM5LCAyMzIsIDksIDE0LCAyMzksIDIzMSwgOSwgMTQsIDIzOSwgMjMwLCA5LCAxNCwgMjM5LCAyMjksIDksIAotICAgIDE0LCAyMzksIDIyOCwgOSwgMTQsIDIzOSwgMjI3LCA5LCAxNCwgMjM5LCAyMjYsIDksIDE0LCAyMzksIDIyNSwgOSwgMTQsIAotICAgIDIzOSwgMjI0LCA5LCAxNCwgMjM5LCAyMjMsIDksIDE0LCAyMzksIDIyMiwgOSwgMTQsIDIzOSwgMjIxLCA5LCAxNCwgMjM5LCAKLSAgICAyMjAsIDksIDE0LCAyMzksIDIxOSwgOSwgMTQsIDIzOSwgMjE4LCA5LCAxNCwgMjM5LCAyMTcsIDksIDE0LCAyMzksIDIxNiwgCi0gICAgOSwgMTQsIDIzOSwgMjE1LCA5LCAxNCwgMjM5LCAyMTQsIDksIDE0LCAyMzksIDIxMywgOSwgMTQsIDIzOSwgMjEyLCA5LCAKLSAgICAxNCwgMjM5LCAyMTEsIDksIDE0LCAyMzksIDIxMCwgOSwgMTQsIDIzOSwgMjA5LCA5LCAxNCwgMjM5LCAyMDgsIDksIDE0LCAKLSAgICAyMzksIDIwNywgOSwgMTQsIDIzOSwgMjA2LCA5LCAxNCwgMjM5LCAyMDUsIDksIDE0LCAyMzksIDIwNCwgOSwgMTQsIDIzOSwgCi0gICAgMjAzLCA5LCAxNCwgMjM5LCAyMDIsIDksIDE0LCAyMzksIDIwMSwgOSwgMTQsIDIzOSwgMjAwLCA5LCAxNCwgMjM5LCAxOTksIAotICAgIDksIDE0LCAyMzksIDE5OCwgOSwgMTQsIDIzOSwgMTk3LCA5LCAxNCwgMjM5LCAxOTYsIDksIDE0LCAyMzksIDE5NSwgOSwgCi0gICAgMTQsIDIzOSwgMTk0LCA5LCAxNCwgMjM5LCAxOTMsIDksIDE0LCAyMzksIDE5MiwgOSwgMTQsIDIzOSwgMTkxLCA5LCAxNCwgCi0gICAgMjM5LCAxOTAsIDksIDE0LCAyMzksIDE4OSwgOSwgMTQsIDIzOSwgMTg4LCA5LCAxNCwgMjM5LCAxODcsIDksIDE0LCAyMzksIAotICAgIDE4NiwgOSwgMTQsIDIzOSwgMTg1LCA5LCAxNCwgMjM5LCAxODQsIDksIDE0LCAyMzksIDE4MywgOSwgMTQsIDIzOSwgMTgyLCAKLSAgICA5LCAxNCwgMjM5LCAxODEsIDksIDE0LCAyMzksIDE4MCwgOSwgMTQsIDIzOSwgMTc5LCA5LCAxNCwgMjM5LCAxNzgsIDksIAotICAgIDE0LCAyMzksIDE3NywgOSwgMTQsIDIzOSwgMTc2LCA5LCAxNCwgMjM5LCAxNzUsIDksIDE0LCAyMzksIDE3NCwgOSwgMTQsIAotICAgIDIzOSwgMTczLCA5LCAxNCwgMjM5LCAxNzIsIDksIDE0LCAyMzksIDE3MSwgOSwgMTQsIDIzOSwgMTcwLCA5LCAxNCwgMjM5LCAKLSAgICAxNjksIDksIDE0LCAyMzksIDE2OCwgOSwgMTQsIDIzOSwgMTY3LCA5LCAxNCwgMjM5LCAxNjYsIDksIDE0LCAyMzksIDE2NSwgCi0gICAgOSwgMTQsIDIzOSwgMTY0LCA5LCAxNCwgMjM5LCAxNjMsIDksIDE0LCAyMzksIDE2MiwgOSwgMTQsIDIzOSwgMTYxLCA5LCAKLSAgICAxNCwgMjM5LCAxNjAsIDksIDE0LCAyMzksIDE1OSwgOSwgMTQsIDIzOSwgMTU4LCA5LCAxNCwgMjM5LCAxNTcsIDksIDE0LCAKLSAgICAyMzksIDE1NiwgOSwgMTQsIDIzOSwgMTU1LCA5LCAxNCwgMjM5LCAxNTQsIDksIDE0LCAyMzksIDE1MywgOSwgMTQsIDIzOSwgCi0gICAgMTUyLCA5LCAxNCwgMjM5LCAxNTEsIDksIDE0LCAyMzksIDE1MCwgOSwgMTQsIDIzOSwgMTQ5LCA5LCAxNCwgMjM5LCAxNDgsIAotICAgIDksIDE0LCAyMzksIDE0NywgOSwgMTQsIDIzOSwgMTQ2LCA5LCAxNCwgMjM5LCAxNDUsIDksIDE0LCAyMzksIDE0NCwgOSwgCi0gICAgMTQsIDIzOSwgMTQzLCA5LCAxNCwgMjM5LCAxNDIsIDksIDE0LCAyMzksIDE0MSwgOSwgMTQsIDIzOSwgMTQwLCA5LCAxNCwgCi0gICAgMjM5LCAxMzksIDksIDE0LCAyMzksIDEzOCwgOSwgMTQsIDIzOSwgMTM3LCA5LCAxNCwgMjM5LCAxMzYsIDksIDE0LCAyMzksIAotICAgIDEzNSwgOSwgMTQsIDIzOSwgMTM0LCA5LCAxNCwgMjM5LCAxMzMsIDksIDE0LCAyMzksIDEzMiwgOSwgMTQsIDIzOSwgMTMxLCAKLSAgICA5LCAxNCwgMjM5LCAxMzAsIDksIDE0LCAyMzksIDEyOSwgOSwgMTQsIDIzOSwgMTI4LCA5LCAxNCwgMjM5LCAxMjcsIDksIAotICAgIDE0LCAyMzksIDEyNiwgOSwgMTQsIDIzOSwgMTI1LCA5LCAxNCwgMjM5LCAxMjQsIDksIDE0LCAyMzksIDEyMywgOSwgMTQsIAotICAgIDIzOSwgMTIyLCA5LCAxNCwgMjM5LCAxMjEsIDksIDE0LCAyMzksIDEyMCwgOSwgMTQsIDIzOSwgMTE5LCA5LCAxNCwgMjM5LCAKLSAgICAxMTgsIDksIDE0LCAyMzksIDExNywgOSwgMTQsIDIzOSwgMTE2LCA5LCAxNCwgMjM5LCAxMTUsIDksIDE0LCAyMzksIDExNCwgCi0gICAgOSwgMTQsIDIzOSwgMTEzLCA5LCAxNCwgMjM5LCAxMTIsIDksIDE0LCAyMzksIDExMSwgOSwgMTQsIDIzOSwgMTEwLCA5LCAKLSAgICAxNCwgMjM5LCAxMDksIDksIDE0LCAyMzksIDEwOCwgOSwgMTQsIDIzOSwgMTA3LCA5LCAxNCwgMjM5LCAxMDYsIDksIDE0LCAKLSAgICAyMzksIDEwNSwgOSwgMTQsIDIzOSwgMTA0LCA5LCAxNCwgMjM5LCAxMDMsIDksIDE0LCAyMzksIDEwMiwgOSwgMTQsIDIzOSwgCi0gICAgMTAxLCA5LCAxNCwgMjM5LCAxMDAsIDksIDE0LCAyMzksIDk5LCA5LCAxNCwgMjM5LCA5OCwgOSwgMTQsIDIzOSwgOTcsIDksIAotICAgIDE0LCAyMzksIDk2LCA5LCAxNCwgMjM5LCA5NSwgOSwgMTQsIDIzOSwgOTQsIDksIDE0LCAyMzksIDkzLCA5LCAxNCwgMjM5LCAKLSAgICA5MiwgOSwgMTQsIDIzOSwgOTEsIDksIDE0LCAyMzksIDkwLCA5LCAxNCwgMjM5LCA4OSwgOSwgMTQsIDIzOSwgODgsIDksIAotICAgIDE0LCAyMzksIDg3LCA5LCAxNCwgMjM5LCA4NiwgOSwgMTQsIDIzOSwgODUsIDksIDE0LCAyMzksIDg0LCA5LCAxNCwgMjM5LCAKLSAgICA4MywgOSwgMTQsIDIzOSwgODIsIDksIDE0LCAyMzksIDgxLCA5LCAxNCwgMjM5LCA4MCwgOSwgMTQsIDIzOSwgNzksIDksIAotICAgIDE0LCAyMzksIDc4LCA5LCAxNCwgMjM5LCA3NywgOSwgMTQsIDIzOSwgNzYsIDksIDE0LCAyMzksIDc1LCA5LCAxNCwgMjM5LCAKLSAgICA3NCwgOSwgMTQsIDIzOSwgNzMsIDksIDE0LCAyMzksIDcyLCA5LCAxNCwgMjM5LCA3MSwgOSwgMTQsIDIzOSwgNzAsIDksIAotICAgIDE0LCAyMzksIDY5LCA5LCAxNCwgMjM5LCA2OCwgOSwgMTQsIDIzOSwgNjcsIDksIDE0LCAyMzksIDY2LCA5LCAxNCwgMjM5LCAKLSAgICA2NSwgOSwgMTQsIDIzOSwgNjQsIDksIDE0LCAyMzksIDYzLCA5LCAxNCwgMjM5LCA2MiwgOSwgMTQsIDIzOSwgNjEsIDksIAotICAgIDE0LCAyMzksIDYwLCA5LCAxNCwgMjM5LCA1OSwgOSwgMTQsIDIzOSwgNTgsIDksIDE0LCAyMzksIDU3LCA5LCAxNCwgMjM5LCAKLSAgICA1NiwgOSwgMTQsIDIzOSwgNTUsIDksIDE0LCAyMzksIDU0LCA5LCAxNCwgMjM5LCA1MywgOSwgMTQsIDIzOSwgNTIsIDksIAotICAgIDE0LCAyMzksIDUxLCA5LCAxNCwgMjM5LCA1MCwgOSwgMTQsIDIzOSwgNDksIDksIDE0LCAyMzksIDQ4LCA5LCAxNCwgMjM5LCAKLSAgICA0NywgOSwgMTQsIDIzOSwgNDYsIDksIDE0LCAyMzksIDQ1LCA5LCAxNCwgMjM5LCA0NCwgOSwgMTQsIDIzOSwgNDMsIDksIAotICAgIDE0LCAyMzksIDQyLCA5LCAxNCwgMjM5LCA0MSwgOSwgMTQsIDIzOSwgNDAsIDksIDE0LCAyMzksIDM5LCA5LCAxNCwgMjM5LCAKLSAgICAzOCwgOSwgMTQsIDIzOSwgMzcsIDksIDE0LCAyMzksIDM2LCA5LCAxNCwgMjM5LCAzNSwgOSwgMTQsIDIzOSwgMzQsIDksIAotICAgIDE0LCAyMzksIDMzLCA5LCAxNCwgMjM5LCAzMiwgOSwgMTQsIDIzOSwgMzEsIDksIDE0LCAyMzksIDMwLCA5LCAxNCwgMjM5LCAKLSAgICAyOSwgOSwgMTQsIDIzOSwgMjgsIDksIDE0LCAyMzksIDI3LCA5LCAxNCwgMjM5LCAyNiwgOSwgMTQsIDIzOSwgMjUsIDksIAotICAgIDE0LCAyMzksIDI0LCA5LCAxNCwgMjM5LCAyMywgOSwgMTQsIDIzOSwgMjIsIDksIDE0LCAyMzksIDIxLCA5LCAxNCwgMjM5LCAKLSAgICAyMCwgOSwgMTQsIDIzOSwgMTksIDksIDE0LCAyMzksIDE4LCA5LCAxNCwgMjM5LCAxNywgOSwgMTQsIDIzOSwgMTYsIDksIAotICAgIDE0LCAyMzksIDE1LCA5LCAxNCwgMjM5LCAxNCwgOSwgMTQsIDIzOSwgMTMsIDksIDE0LCAyMzksIDEyLCA5LCAxNCwgMjM5LCAKLSAgICAxMSwgOSwgMTQsIDIzOSwgMTAsIDksIDE0LCAyMzksIDksIDksIDE0LCAyMzksIDgsIDksIDE0LCAyMzksIDcsIDksIDE0LCAKLSAgICAyMzksIDYsIDksIDE0LCAyMzksIDUsIDksIDE0LCAyMzksIDQsIDksIDE0LCAyMzksIDMsIDksIDE0LCAyMzksIDIsIDksIAotICAgIDE0LCAyMzksIDEsIDksIDE0LCAyMzksIDAsIDksIDE0LCAyMzgsIDI1NSwgOSwgMTQsIDIzOCwgMjU0LCA5LCAxNCwgMjM4LCAKLSAgICAyNTMsIDksIDE0LCAyMzgsIDI1MiwgOSwgMTQsIDIzOCwgMjUxLCA5LCAxNCwgMjM4LCAyNTAsIDksIDE0LCAyMzgsIDI0OSwgCi0gICAgOSwgMTQsIDIzOCwgMjQ4LCA5LCAxNCwgMjM4LCAyNDcsIDksIDE0LCAyMzgsIDI0NiwgOSwgMTQsIDIzOCwgMjQ1LCA5LCAKLSAgICAxNCwgMjM4LCAyNDQsIDksIDE0LCAyMzgsIDI0MywgOSwgMTQsIDIzOCwgMjQyLCA5LCAxNCwgMjM4LCAyNDEsIDksIDE0LCAKLSAgICAyMzgsIDI0MCwgOSwgMTQsIDIzOCwgMjM5LCA5LCAxNCwgMjM4LCAyMzgsIDksIDE0LCAyMzgsIDIzNywgOSwgMTQsIDIzOCwgCi0gICAgMjM2LCA5LCAxNCwgMjM4LCAyMzUsIDksIDE0LCAyMzgsIDIzNCwgOSwgMTQsIDIzOCwgMjMzLCA5LCAxNCwgMjM4LCAyMzIsIAotICAgIDksIDE0LCAyMzgsIDIzMSwgOSwgMTQsIDIzOCwgMjMwLCA5LCAxNCwgMjM4LCAyMjksIDksIDE0LCAyMzgsIDIyOCwgOSwgCi0gICAgMTQsIDIzOCwgMjI3LCA5LCAxNCwgMjM4LCAyMjYsIDksIDE0LCAyMzgsIDIyNSwgOSwgMTQsIDIzOCwgMjI0LCA5LCAxNCwgCi0gICAgMjM4LCAyMjMsIDksIDE0LCAyMzgsIDIyMiwgOSwgMTQsIDIzOCwgMjIxLCA5LCAxNCwgMjM4LCAyMjAsIDksIDE0LCAyMzgsIAotICAgIDIxOSwgOSwgMTQsIDIzOCwgMjE4LCA5LCAxNCwgMjM4LCAyMTcsIDksIDE0LCAyMzgsIDIxNiwgOSwgMTQsIDIzOCwgMjE1LCAKLSAgICA5LCAxNCwgMjM4LCAyMTQsIDksIDE0LCAyMzgsIDIxMywgOSwgMTQsIDIzOCwgMjEyLCA5LCAxNCwgMjM4LCAyMTEsIDksIAotICAgIDE0LCAyMzgsIDIxMCwgOSwgMTQsIDIzOCwgMjA5LCA5LCAxNCwgMjM4LCAyMDgsIDksIDE0LCAyMzgsIDIwNywgOSwgMTQsIAotICAgIDIzOCwgMjA2LCA5LCAxNCwgMjM4LCAyMDUsIDksIDE0LCAyMzgsIDIwNCwgOSwgMTQsIDIzOCwgMjAzLCA5LCAxNCwgMjM4LCAKLSAgICAyMDIsIDksIDE0LCAyMzgsIDIwMSwgOSwgMTQsIDIzOCwgMjAwLCA5LCAxNCwgMjM4LCAxOTksIDksIDE0LCAyMzgsIDE5OCwgCi0gICAgOSwgMTQsIDIzOCwgMTk3LCA5LCAxNCwgMjM4LCAxOTYsIDksIDE0LCAyMzgsIDE5NSwgOSwgMTQsIDIzOCwgMTk0LCA5LCAKLSAgICAxNCwgMjM4LCAxOTMsIDksIDE0LCAyMzgsIDE5MiwgOSwgMTQsIDIzOCwgMTkxLCA5LCAxNCwgMjM4LCAxOTAsIDksIDE0LCAKLSAgICAyMzgsIDE4OSwgOSwgMTQsIDIzOCwgMTg4LCA5LCAxNCwgMjM4LCAxODcsIDksIDE0LCAyMzgsIDE4NiwgOSwgMTQsIDIzOCwgCi0gICAgMTg1LCA5LCAxNCwgMjM4LCAxODQsIDksIDE0LCAyMzgsIDE4MywgOSwgMTQsIDIzOCwgMTgyLCA5LCAxNCwgMjM4LCAxODEsIAotICAgIDksIDE0LCAyMzgsIDE4MCwgOSwgMTQsIDIzOCwgMTc5LCA5LCAxNCwgMjM4LCAxNzgsIDksIDE0LCAyMzgsIDE3NywgOSwgCi0gICAgMTQsIDIzOCwgMTc2LCA5LCAxNCwgMjM4LCAxNzUsIDksIDE0LCAyMzgsIDE3NCwgOSwgMTQsIDIzOCwgMTczLCA5LCAxNCwgCi0gICAgMjM4LCAxNzIsIDksIDE0LCAyMzgsIDE3MSwgOSwgMTQsIDIzOCwgMTcwLCA5LCAxNCwgMjM4LCAxNjksIDksIDE0LCAyMzgsIAotICAgIDE2OCwgOSwgMTQsIDIzOCwgMTY3LCA5LCAxNCwgMjM4LCAxNjYsIDksIDE0LCAyMzgsIDE2NSwgOSwgMTQsIDIzOCwgMTY0LCAKLSAgICA5LCAxNCwgMjM4LCAxNjMsIDksIDE0LCAyMzgsIDE2MiwgOSwgMTQsIDIzOCwgMTYxLCA5LCAxNCwgMjM4LCAxNjAsIDksIAotICAgIDE0LCAyMzgsIDE1OSwgOSwgMTQsIDIzOCwgMTU4LCA5LCAxNCwgMjM4LCAxNTcsIDksIDE0LCAyMzgsIDE1NiwgOSwgMTQsIAotICAgIDIzOCwgMTU1LCA5LCAxNCwgMjM4LCAxNTQsIDksIDE0LCAyMzgsIDE1MywgOSwgMTQsIDIzOCwgMTUyLCA5LCAxNCwgMjM4LCAKLSAgICAxNTEsIDksIDE0LCAyMzgsIDE1MCwgOSwgMTQsIDIzOCwgMTQ5LCA5LCAxNCwgMjM4LCAxNDgsIDksIDE0LCAyMzgsIDE0NywgCi0gICAgOSwgMTQsIDIzOCwgMTQ2LCA5LCAxNCwgMjM4LCAxNDUsIDksIDE0LCAyMzgsIDE0NCwgOSwgMTQsIDIzOCwgMTQzLCA5LCAKLSAgICAxNCwgMjM4LCAxNDIsIDksIDE0LCAyMzgsIDE0MSwgOSwgMTQsIDIzOCwgMTQwLCA5LCAxNCwgMjM4LCAxMzksIDksIDE0LCAKLSAgICAyMzgsIDEzOCwgOSwgMTQsIDIzOCwgMTM3LCA5LCAxNCwgMjM4LCAxMzYsIDksIDE0LCAyMzgsIDEzNSwgOSwgMTQsIDIzOCwgCi0gICAgMTM0LCA5LCAxNCwgMjM4LCAxMzMsIDksIDE0LCAyMzgsIDEzMiwgOSwgMTQsIDIzOCwgMTMxLCA5LCAxNCwgMjM4LCAxMzAsIAotICAgIDksIDE0LCAyMzgsIDEyOSwgOSwgMTQsIDIzOCwgMTI4LCA5LCAxNCwgMjM4LCAxMjcsIDksIDE0LCAyMzgsIDEyNiwgOSwgCi0gICAgMTQsIDIzOCwgMTI1LCA5LCAxNCwgMjM4LCAxMjQsIDksIDE0LCAyMzgsIDEyMywgOSwgMTQsIDIzOCwgMTIyLCA5LCAxNCwgCi0gICAgMjM4LCAxMjEsIDksIDE0LCAyMzgsIDEyMCwgOSwgMTQsIDIzOCwgMTE5LCA5LCAxNCwgMjM4LCAxMTgsIDksIDE0LCAyMzgsIAotICAgIDExNywgOSwgMTQsIDIzOCwgMTE2LCA5LCAxNCwgMjM4LCAxMTUsIDksIDE0LCAyMzgsIDExNCwgOSwgMTQsIDIzOCwgMTEzLCAKLSAgICA5LCAxNCwgMjM4LCAxMTIsIDksIDE0LCAyMzgsIDExMSwgOSwgMTQsIDIzOCwgMTEwLCA5LCAxNCwgMjM4LCAxMDksIDksIAotICAgIDE0LCAyMzgsIDEwOCwgOSwgMTQsIDIzOCwgMTA3LCA5LCAxNCwgMjM4LCAxMDYsIDksIDE0LCAyMzgsIDEwNSwgOSwgMTQsIAotICAgIDIzOCwgMTA0LCA5LCAxNCwgMjM4LCAxMDMsIDksIDE0LCAyMzgsIDEwMiwgOSwgMTQsIDIzOCwgMTAxLCA5LCAxNCwgMjM4LCAKLSAgICAxMDAsIDksIDE0LCAyMzgsIDk5LCA5LCAxNCwgMjM4LCA5OCwgOSwgMTQsIDIzOCwgOTcsIDksIDE0LCAyMzgsIDk2LCA5LCAKLSAgICAxNCwgMjM4LCA5NSwgOSwgMTQsIDIzOCwgOTQsIDksIDE0LCAyMzgsIDkzLCA5LCAxNCwgMjM4LCA5MiwgOSwgMTQsIDIzOCwgCi0gICAgOTEsIDksIDE0LCAyMzgsIDkwLCA5LCAxNCwgMjM4LCA4OSwgOSwgMTQsIDIzOCwgODgsIDksIDE0LCAyMzgsIDg3LCA5LCAKLSAgICAxNCwgMjM4LCA4NiwgOSwgMTQsIDIzOCwgODUsIDksIDE0LCAyMzgsIDg0LCA5LCAxNCwgMjM4LCA4MywgOSwgMTQsIDIzOCwgCi0gICAgODIsIDksIDE0LCAyMzgsIDgxLCA5LCAxNCwgMjM4LCA4MCwgOSwgMTQsIDIzOCwgNzksIDksIDE0LCAyMzgsIDc4LCA5LCAKLSAgICAxNCwgMjM4LCA3NywgOSwgMTQsIDIzOCwgNzYsIDksIDE0LCAyMzgsIDc1LCA5LCAxNCwgMjM4LCA3NCwgOSwgMTQsIDIzOCwgCi0gICAgNzMsIDIzMywgOTAsIDIxNywgODQsIDEyOSwgMjE5LCAxOCwgMTI5LCAyNDUsIDMxLCA3OCwgMTI5LCAyMjMsIDI1NCwgNzgsIAotICAgIDEyOSwgNTQsIDUwLCAxMjksIDI0NywgMTMyLCA1MCwgMTI5LCAyMjUsIDE4MiwgNTAsIDEyOSwgMjU0LCAxMjYsIDEyOSwgCi0gICAgMjU0LCA1NywgMTI5LCA0MywgMjI2LCAzLCAxMjksIDQ0LCAyMjYsIDMsIDEyOSwgMjUzLCAyMTYsIDEyOSwgOTYsIDUwLCAKLSAgICAxMjksIDI0OSwgMjE5LCAxMjksIDI0MCwgMTY3LCAxMjksIDI0MywgMjI5LCAyMTgsIDEyOSwgMTI5LCAyMTksIDQ2LCAxMjksIAotICAgIDIxLCAyMTAsIDg2LCAxMjksIDIxLCAxMTAsIDEyOSwgMjEsIDEwNSwgMTI5LCAyMSwgMTU4LCAxMjksIDIxLCAxNjEsIDEyOSwgCi0gICAgMjEsIDE4OSwgMTI5LCAyMSwgMTk0LCAxMjksIDIxLCAxOTgsIDEyOSwgMjEsIDE5NSwgMTI5LCAyMSwgMjAwLCAxMjksIAotICAgIDI0OSwgMjI2LCAxMjksIDIyMCwgMTUwLCAxMjksIDIzMywgMTUsIDUwLCAxMjksIDI0NSwgOTgsIDUwLCAxMjksIDI0MiwgCi0gICAgMTMwLCA1MCwgMTI5LCAyMjQsIDEzLCA3OCwgMTI5LCAyNDksIDIxNywgMjUzLCAyMDYsIDEyOSwgNywgNiwgMSwgNjEsIAotICAgIDEyOSwgNywgNiwgMSwgMjUzLCAxNTgsIDEyOSwgNywgNiwgMSwgMjUxLCA2NiwgMTI5LCA3LCA2LCAxLCAyNDksIDYwLCAKLSAgICAxMjksIDcsIDYsIDEsIDc1LCAxMjksIDcsIDYsIDEsIDI0NSwgNiwgMTI5LCA3LCA2LCAxLCAyNDMsIDIwMiwgMTI5LCA3LCAKLSAgICA2LCAxLCAyNDIsIDYwLCAxMjksIDcsIDYsIDEsIDczLCAxMjksIDcsIDYsIDEsIDIzNSwgMTQ0LCAxMjksIDcsIDYsIDEsIAotICAgIDIzNSwgMjMsIDEyOSwgNywgNiwgMSwgMTU2LCAxMjksIDcsIDYsIDEsIDE5MywgMTI5LCA3LCA2LCAxLCAyMzAsIDI1LCAKLSAgICAxMjksIDcsIDYsIDEsIDc2LCAxMjksIDcsIDYsIDEsIDIyNiwgMTA1LCAxMjksIDcsIDYsIDEsIDIyNCwgOTYsIDEyOSwgNywgCi0gICAgNiwgMSwgMTUzLCAxMjksIDcsIDYsIDEsIDIyMiwgOTEsIDEyOSwgNywgNiwgMSwgMjE3LCAxNTIsIDEyOSwgNywgNiwgMSwgCi0gICAgNzAsIDEyOSwgNywgNiwgMSwgMjE0LCAxMDUsIDEyOSwgNywgNiwgMSwgMjEyLCA5OCwgMTI5LCA3LCA2LCAxLCAyMTEsIAotICAgIDE3OCwgMTI5LCA3LCA2LCAxLCAyMTEsIDExNywgMTI5LCA3LCA2LCAxLCAyMTAsIDE1OSwgMTI5LCA0MywgNDIsIDEyNywgCi0gICAgMTI5LCAyMjMsIDUwLCAyMTksIDQ2LCAxMjksIDQ0LCA0MiwgMTI3LCAxMjksIDI1MCwgMzEsIDI1NSwgMTQsIDEyOSwgMTIxLCAKLSAgICAyMzIsIDIxMywgMTI5LCAyNDIsIDEzNywgMjU1LCAxNCwgMTI5LCA3LCA0LCAxLCA2MSwgMTI5LCA3LCA0LCAxLCAyNTMsIAotICAgIDE1OCwgMTI5LCA3LCA0LCAxLCAyNTEsIDY2LCAxMjksIDcsIDQsIDEsIDI0OSwgNjAsIDEyOSwgNywgNCwgMSwgNzUsIDEyOSwgCi0gICAgNywgNCwgMSwgMjQ1LCA2LCAxMjksIDcsIDQsIDEsIDI0MywgMjAyLCAxMjksIDcsIDQsIDEsIDI0MiwgNjAsIDEyOSwgNywgCi0gICAgNCwgMSwgNzMsIDEyOSwgNywgNCwgMSwgMjM1LCAxNDQsIDEyOSwgNywgNCwgMSwgMjM1LCAyMywgMTI5LCA3LCA0LCAxLCAKLSAgICAxNTYsIDEyOSwgNywgNCwgMSwgMTkzLCAxMjksIDcsIDQsIDEsIDIzMCwgMjUsIDEyOSwgNywgNCwgMSwgNzYsIDEyOSwgNywgCi0gICAgNCwgMSwgMjI2LCAxMDUsIDEyOSwgNywgNCwgMSwgMjI0LCA5NiwgMTI5LCA3LCA0LCAxLCAxNTMsIDEyOSwgNywgNCwgMSwgCi0gICAgMjIyLCA5MSwgMTI5LCA3LCA0LCAxLCAyMTcsIDE1MiwgMTI5LCA3LCA0LCAxLCA3MCwgMTI5LCA3LCA0LCAxLCAyMTQsIAotICAgIDEwNSwgMTI5LCA3LCA0LCAxLCAyMTIsIDk4LCAxMjksIDcsIDQsIDEsIDIxMSwgMTc4LCAxMjksIDcsIDQsIDEsIDIxMSwgCi0gICAgMTE3LCAxMjksIDcsIDQsIDEsIDIxMCwgMTU5LCAxMjksIDQzLCAyNDksIDk5LCAxMjcsIDEyOSwgNjcsIDIzMiwgMjEzLCAKLSAgICAxMjksIDQ0LCAyNDksIDk5LCAxMjcsIDEyOSwgMTgyLCAyNTEsIDYsIDIxNywgODQsIDQ1LCAyMjEsIDc4LCA0NSwgMjIxLCAKLSAgICA2NywgNDUsIDIyMSwgNTYsIDQ1LCAyMjEsIDQ0LCA0NSwgMjIxLCAzMywgNDUsIDIyMSwgMjIsIDQ1LCAyMjEsIDExLCA0NSwgCi0gICAgMjIxLCAwLCA0NSwgMjIwLCAyNDUsIDQ1LCAyMjAsIDIzNywgNDUsIDIyMCwgMjM2LCA0NSwgMjIwLCAyMzUsIDQ1LCAyMjAsIAotICAgIDIzNCwgNDUsIDIyMCwgMjMyLCA0NSwgMjIwLCAyMzEsIDQ1LCAyMjAsIDIzMCwgNDUsIDIyMCwgMjI5LCA0NSwgMjIwLCAKLSAgICAyMjgsIDQ1LCAyMjAsIDIyNywgNDUsIDIyMCwgMjI2LCA0NSwgMjIwLCAyMjUsIDQ1LCAyMjAsIDIyNCwgNDUsIDIyMCwgCi0gICAgMjIzLCA0NSwgMjIwLCAyMjEsIDQ1LCAyMjAsIDIyMCwgNDUsIDIyMCwgMjE5LCA0NSwgMjIwLCAyMTgsIDQ1LCAyMjAsIAotICAgIDIxNywgNDUsIDIyMCwgMjE2LCA0NSwgMjIwLCAyMTUsIDQ1LCAyMjAsIDIxNCwgNDUsIDIyMCwgMjEzLCA0NSwgMjIwLCAKLSAgICAyMTIsIDQ1LCAyMjAsIDIxMCwgNDUsIDIyMCwgMjA5LCA0NSwgMjIwLCAyMDgsIDQ1LCAyMjAsIDIwNywgNDUsIDIyMCwgCi0gICAgMjA2LCA0NSwgMjIwLCAyMDUsIDQ1LCAyMjAsIDIwNCwgNDUsIDIyMCwgMjAzLCA0NSwgMjIwLCAyMDIsIDQ1LCAyMjAsIAotICAgIDIwMSwgNDUsIDIyMCwgMTk5LCA0NSwgMjIwLCAxOTgsIDQ1LCAyMjAsIDE5NywgNDUsIDIyMCwgMTk2LCA0NSwgMjIwLCAKLSAgICAxOTUsIDQ1LCAyMjAsIDE5NCwgNDUsIDIyMCwgMTkzLCA0NSwgMjIwLCAxOTIsIDQ1LCAyMjAsIDE5MSwgNDUsIDIyMCwgCi0gICAgMTkwLCA0NSwgMjIwLCAxODgsIDQ1LCAyMjAsIDE4NywgNDUsIDIyMCwgMTg2LCA0NSwgMjIwLCAxODUsIDQ1LCAyMjAsIAotICAgIDE4NCwgNDUsIDIyMCwgMTgzLCA0NSwgMjIwLCAxODIsIDQ1LCAyMjAsIDE4MSwgNDUsIDIyMCwgMTgwLCA0NSwgMjIwLCAKLSAgICAxNzksIDQ1LCAyMjAsIDE3NywgNDUsIDIyMCwgMTc2LCA0NSwgMjIwLCAxNzUsIDQ1LCAyMjAsIDE3NCwgNDUsIDIyMCwgCi0gICAgMTczLCA0NSwgMjIwLCAxNzIsIDQ1LCAyMjAsIDE3MSwgNDUsIDIyMCwgMTcwLCA0NSwgMjIwLCAxNjksIDQ1LCAyMjAsIAotICAgIDE2OCwgNDUsIDIyMCwgMTY2LCA0NSwgMjIwLCAxNjUsIDQ1LCAyMjAsIDE2NCwgNDUsIDIyMCwgMTYzLCA0NSwgMjIwLCAKLSAgICAxNjIsIDQ1LCAyMjAsIDE2MSwgNDUsIDIyMCwgMTYwLCA0NSwgMjIwLCAxNTksIDQ1LCAyMjAsIDE1OCwgNDUsIDIyMCwgCi0gICAgMTU3LCA0NSwgMjIxLCAxNTQsIDQ1LCAyMjEsIDE1MywgNDUsIDIyMSwgMTUyLCA0NSwgMjIxLCAxNTEsIDQ1LCAyMjEsIAotICAgIDE1MCwgNDUsIDIyMSwgMTQ5LCA0NSwgMjIxLCAxNDgsIDQ1LCAyMjEsIDE0NywgNDUsIDIyMSwgMTQ2LCA0NSwgMjIxLCAKLSAgICAxNDUsIDQ1LCAyMjEsIDE0MywgNDUsIDIyMSwgMTQyLCA0NSwgMjIxLCAxNDEsIDQ1LCAyMjEsIDE0MCwgNDUsIDIyMSwgCi0gICAgMTM5LCA0NSwgMjIxLCAxMzgsIDQ1LCAyMjEsIDEzNywgNDUsIDIyMSwgMTM2LCA0NSwgMjIxLCAxMzUsIDQ1LCAyMjEsIAotICAgIDEzNCwgNDUsIDIyMSwgMTMyLCA0NSwgMjIxLCAxMzEsIDQ1LCAyMjEsIDEzMCwgNDUsIDIyMSwgMTI5LCA0NSwgMjIxLCAKLSAgICAxMjgsIDQ1LCAyMjEsIDEyNywgNDUsIDIyMSwgMTI2LCA0NSwgMjIxLCAxMjUsIDQ1LCAyMjEsIDEyNCwgNDUsIDIyMSwgCi0gICAgMTIzLCA0NSwgMjIxLCAxMjEsIDQ1LCAyMjEsIDEyMCwgNDUsIDIyMSwgMTE5LCA0NSwgMjIxLCAxMTgsIDQ1LCAyMjEsIAotICAgIDExNywgNDUsIDIyMSwgMTE2LCA0NSwgMjIxLCAxMTUsIDQ1LCAyMjEsIDExNCwgNDUsIDIyMSwgMTEzLCA0NSwgMjIxLCAKLSAgICAxMTIsIDQ1LCAyMjEsIDExMCwgNDUsIDIyMSwgMTA5LCA0NSwgMjIxLCAxMDgsIDQ1LCAyMjEsIDEwNywgNDUsIDIyMSwgCi0gICAgMTA2LCA0NSwgMjIxLCAxMDUsIDQ1LCAyMjEsIDEwNCwgNDUsIDIyMSwgMTAzLCA0NSwgMjIxLCAxMDIsIDQ1LCAyMjEsIAotICAgIDEwMSwgNDUsIDIyMSwgOTksIDQ1LCAyMjEsIDk4LCA0NSwgMjIxLCA5NywgNDUsIDIyMSwgOTYsIDQ1LCAyMjEsIDk1LCA0NSwgCi0gICAgMjIxLCA5NCwgNDUsIDIyMSwgOTMsIDQ1LCAyMjEsIDkyLCA0NSwgMjIxLCA5MSwgNDUsIDIyMSwgOTAsIDQ1LCAyMjEsIDg4LCAKLSAgICA0NSwgMjIxLCA4NywgNDUsIDIyMSwgODYsIDQ1LCAyMjEsIDg1LCA0NSwgMjIxLCA4NCwgNDUsIDIyMSwgODMsIDQ1LCAyMjEsIAotICAgIDgyLCA0NSwgMjIxLCA4MSwgNDUsIDIyMSwgODAsIDQ1LCAyMjEsIDc5LCA0NSwgMjIxLCA3NywgNDUsIDIyMSwgNzYsIDQ1LCAKLSAgICAyMjEsIDc1LCA0NSwgMjIxLCA3NCwgNDUsIDIyMSwgNzMsIDQ1LCAyMjEsIDcyLCA0NSwgMjIxLCA3MSwgNDUsIDIyMSwgNzAsIAotICAgIDQ1LCAyMjEsIDY5LCA0NSwgMjIxLCA2OCwgNDUsIDIyMSwgNjYsIDQ1LCAyMjEsIDY1LCA0NSwgMjIxLCA2NCwgNDUsIDIyMSwgCi0gICAgNjMsIDQ1LCAyMjEsIDYyLCA0NSwgMjIxLCA2MSwgNDUsIDIyMSwgNjAsIDQ1LCAyMjEsIDU5LCA0NSwgMjIxLCA1OCwgNDUsIAotICAgIDIyMSwgNTcsIDQ1LCAyMjEsIDU1LCA0NSwgMjIxLCA1NCwgNDUsIDIyMSwgNTMsIDQ1LCAyMjEsIDUyLCA0NSwgMjIxLCA1MSwgCi0gICAgNDUsIDIyMSwgNTAsIDQ1LCAyMjEsIDQ5LCA0NSwgMjIxLCA0OCwgNDUsIDIyMSwgNDcsIDQ1LCAyMjEsIDQ2LCA0NSwgMjIxLCAKLSAgICA0MywgNDUsIDIyMSwgNDIsIDQ1LCAyMjEsIDQxLCA0NSwgMjIxLCA0MCwgNDUsIDIyMSwgMzksIDQ1LCAyMjEsIDM4LCA0NSwgCi0gICAgMjIxLCAzNywgNDUsIDIyMSwgMzYsIDQ1LCAyMjEsIDM1LCA0NSwgMjIxLCAzNCwgNDUsIDIyMSwgMzIsIDQ1LCAyMjEsIDMxLCAKLSAgICA0NSwgMjIxLCAzMCwgNDUsIDIyMSwgMjksIDQ1LCAyMjEsIDI4LCA0NSwgMjIxLCAyNywgNDUsIDIyMSwgMjYsIDQ1LCAyMjEsIAotICAgIDI1LCA0NSwgMjIxLCAyNCwgNDUsIDIyMSwgMjMsIDQ1LCAyMjEsIDIxLCA0NSwgMjIxLCAyMCwgNDUsIDIyMSwgMTksIDQ1LCAKLSAgICAyMjEsIDE4LCA0NSwgMjIxLCAxNywgNDUsIDIyMSwgMTYsIDQ1LCAyMjEsIDE1LCA0NSwgMjIxLCAxNCwgNDUsIDIyMSwgMTMsIAotICAgIDQ1LCAyMjEsIDEyLCA0NSwgMjIxLCAxMCwgNDUsIDIyMSwgOSwgNDUsIDIyMSwgOCwgNDUsIDIyMSwgNywgNDUsIDIyMSwgNiwgCi0gICAgNDUsIDIyMSwgNSwgNDUsIDIyMSwgNCwgNDUsIDIyMSwgMywgNDUsIDIyMSwgMiwgNDUsIDIyMSwgMSwgNDUsIDIyMCwgMjU1LCAKLSAgICA0NSwgMjIwLCAyNTQsIDQ1LCAyMjAsIDI1MywgNDUsIDIyMCwgMjUyLCA0NSwgMjIwLCAyNTEsIDQ1LCAyMjAsIDI1MCwgNDUsIAotICAgIDIyMCwgMjQ5LCA0NSwgMjIwLCAyNDgsIDQ1LCAyMjAsIDI0NywgNDUsIDIyMCwgMjQ2LCA0NSwgMjIwLCAyNDQsIDQ1LCAKLSAgICAyMjAsIDI0MywgNDUsIDIyMCwgMjQyLCA0NSwgMjIwLCAyNDEsIDQ1LCAyMjAsIDI0MCwgNDUsIDIyMCwgMjM5LCA0NSwgCi0gICAgMjIwLCAyMzgsIDIyNywgMjAyLCAyMjcsIDIwNCwgMjE4LCAxNTIsIDY0LCAyNDEsIDIzMywgMjE5LCA0OCwgMjE4LCAxNTIsIAotICAgIDY0LCAyMTYsIDIxMiwgMjE4LCA4NSwgMjQ1LCAxNDMsIDY0LCAyMTYsIDIxMiwgMjQ1LCA1NiwgMjQ1LCAxNDMsIDY0LCAKLSAgICAyMTUsIDI0MywgMjQ1LCAxMDksIDI0NSwgMTMyLCAyNDUsIDEzMywgMjU1LCA3LCAyNTUsIDgsIDI1NCwgMTY3LCAyNTIsIAotICAgIDQ3LCAyNTIsIDE3OSwgMjUxLCAxMzEsIDEzNSwgMjE3LCA4OSwgMjAzLCAyMTcsIDg5LCAyNDAsIDIyNywgMjE3LCA5MywgCi0gICAgMjMyLCAyMTQsIDI0NCwgMTQ1LCAxNjYsIDIzMiwgMjEzLCAyNDUsIDE0MywgNjQsIDIzMiwgMjEzLCAyMzMsIDAsIDIyOCwgCi0gICAgMTM1LCAyNDUsIDExMiwgMjMyLCAyMTQsIDIxNywgODksIDY3LCAyMTcsIDg5LCAyMTIsIDExOCwgMjQ0LCAyMCwgMjQ0LCAKLSAgICAxNDUsIDI0NCwgMTI1LCAyNTAsIDIzMCwgMjIzLCA1MywgMjQ5LCAxNDMsIDIyMCwgMjgsIDIyNiwgMTMwLCAyMzIsIDE1MCwgCi0gICAgMTEwLCAyMTksIDU4LCAyMjAsIDI4LCAyMzUsIDI1NSwgMjMyLCAxNTAsIDIxMCwgODYsIDIxOSwgMTkxLCAyNDgsIDE1MSwgCi0gICAgMjMyLCAyMDQsIDI0NSwgNzcsIDI0NywgMTU1LCAyNDgsIDMxLCAyNDksIDE3OCwgMTEwLCAyNDgsIDE0MSwgMjQ4LCAzMSwgCi0gICAgMjQ5LCAxNzgsIDEwNSwgMjQ4LCAxNDAsIDI0OCwgMzEsIDI0OSwgMTc4LCAxNTgsIDI0OCwgMTM5LCAyNDgsIDMxLCAyNDksIAotICAgIDE3OCwgMTYxLCAyNDgsIDEzOCwgMTUyLCAyNTUsIDcsIDIyOSwgMjA5LCAyMTcsIDE3NywgMjM2LCA2MiwgMjE3LCAxODAsIAotICAgIDI0NSwgMTQzLCA2NCwgMjE1LCAyNDQsIDI1MSwgMjEzLCAyNDUsIDYyLCAyNTEsIDUsIDI1MSwgNywgMjQ1LCAxNDMsIDY0LCAKLSAgICAyMzEsIDgxLCAyNDUsIDExMCwgMjE4LCA2MSwgMjE4LCA3OCwgMjQ1LCA3NywgMjQ1LCA3OCwgMjM1LCAyMzIsIDIyMCwgCi0gICAgMTM4LCAxNjEsIDI0NCwgMTA3LCAyMjAsIDEzNywgMjQzLCAyMzcsIDIzNSwgMjMyLCAyMjAsIDEzOCwgMTU4LCAyNDIsIAotICAgIDEyMSwgMjIwLCAxMzcsIDI0MiwgMTE4LCAyMzUsIDIzMiwgMjIwLCAxMzgsIDEwNSwgMjIzLCAxMjEsIDIyMCwgMTM3LCAKLSAgICAyMjIsIDE0NSwgMjM1LCAyMzIsIDIyMCwgMTM4LCAxMTAsIDIxNCwgMTc0LCAyMjAsIDEzNywgMjE0LCAxMzMsIDIxOSwgMjEsIAotICAgIDI0OCwgNjMsIDI0OCwgNjUsIDIyNiwgNzgsIDI1MCwgMTQyLCAyMjYsIDgwLCAxMjUsIDIyNiwgMjQwLCAyMjQsIDE5MywgCi0gICAgMjQxLCA0NywgMjUxLCAxNTAsIDIyNSwgMTczLCAyNDEsIDIwMywgMjUxLCAxNjEsIDIyOCwgNzUsIDI1MSwgMTUwLCAyNDEsIAotICAgIDIwMywgMjI5LCAxNzUsIDIzNSwgMjQyLCAyMzUsIDI0NCwgMjI5LCA4MiwgMjMyLCAyMTMsIDIyOSwgOTksIDIxOCwgMTUyLCAKLSAgICA2NCwgMjIxLCAxNTgsIDI1NCwgMTgsIDIxOCwgMjIzLCAyNDUsIDE0MywgNjQsIDIyMSwgMTU4LCAyNTQsIDE4LCAyNDUsIAotICAgIDgwLCAxMzUsIDIxNywgOTAsIDIyMCwgMTI3LCAyMDMsIDIxNywgOTAsIDIyMCwgMTI3LCAyNDAsIDIyNCwgMTM1LCAyMTcsIAotICAgIDkwLCAyLCAyMzUsIDM1LCAyMDMsIDIxNywgOTAsIDIsIDIzNSwgMzUsIDI0MCwgMjI1LCAyMzIsIDIxNCwgMjE3LCA5MCwgCi0gICAgMjIwLCAxMjcsIDY3LCAyMTcsIDkwLCAyMjAsIDEyNywgMjEyLCAxMTcsIDIyNSwgMjUzLCAyMzIsIDIxNCwgMjQ0LCAxNCwgCi0gICAgMjI1LCAyNTMsIDIzMiwgMjE0LCAyNDYsIDEwNiwgMjI1LCAzMiwgMjI1LCAyNTMsIDIzMiwgMjE0LCAyNTIsIDE3OCwgMjI1LCAKLSAgICAyNTMsIDIzMiwgMjE0LCAyMTQsIDE2MywgMjI1LCAyOCwgMjIzLCA1MCwgMjMyLCAyMTQsIDI0NCwgMTQ1LCAyMjMsIDUwLCAKLSAgICAyMzUsIDI0MiwgMjIzLCAzNSwgMjE5LCAxNTUsIDIyMCwgMjgsIDEwNSwgMjE5LCAxNTIsIDIxOCwgMjI1LCAyMTksIDE1NSwgCi0gICAgMjIwLCAyOCwgMTU4LCAyMTksIDE1MSwgMjE4LCAyMjQsIDI0OCwgMzEsIDI0OSwgMTc4LCAyMTgsIDEwNSwgMjQ4LCAxMzcsIAotICAgIDIyNCwgMTgzLCAyMTQsIDEzMiwgMTEwLCAyMjQsIDE4MywgMjE0LCAxMzAsIDIyNCwgMTQ5LCAyMjQsIDE4MywgMjE0LCAKLSAgICAxMzIsIDEwNSwgMjI0LCAxODMsIDIxNCwgMTI5LCAyMjQsIDE0OCwgMjIwLCAxMjgsIDIxNSwgMjQyLCAyMTgsIDE1MSwgCi0gICAgMjE4LCA4OSwgMjUxLCA2LCAyNTAsIDE0MiwgMjUwLCAyMDksIDIzMSwgNDMsIDIxMiwgNTksIDIzMCwgNDMsIDIxOCwgMTUyLCAKLSAgICA2NCwgMjQyLCAxMDcsIDI1NCwgMTgsIDIxOCwgMTUyLCA2NCwgMjI0LCAxNjYsIDI1NCwgMTgsIDIxOSwgMjAsIDI0NSwgCi0gICAgMTQzLCA2NCwgMjQyLCAxMDcsIDI1NCwgMTgsIDI0NSwgMTQzLCA2NCwgMjI0LCAxNjYsIDI1NCwgMTgsIDI0NSwgMTA3LCAKLSAgICAyMTgsIDE1MiwgNjQsIDIxOCwgMTA1LCAyMTksIDM1LCAyMTksIDE1NSwgMjQyLCAxNDEsIDEzNSwgMjM1LCAxOTUsIDIyMCwgCi0gICAgMTA3LCAyMTksIDE1NSwgMTM1LCAyMzUsIDE5NSwgMjIxLCAxOTQsIDI0OSwgMTc4LCAyMjAsIDEzNSwgMjM1LCAxOTUsIAotICAgIDI0OSwgMTEzLCAyMTgsIDEwNiwgMjE2LCAyMzYsIDIxOCwgMTY4LCAyMjYsIDE2OSwgMjE3LCAxNjcsIDI0OSwgMjE4LCAKLSAgICAyMjYsIDE0MiwgMjI0LCAxODQsIDIzMSwgNDIsIDIyNSwgMTksIDI1NCwgNTMsIDIyNCwgMTc4LCAyNDksIDIxOCwgMjU0LCAKLSAgICA2OSwgMjI5LCAxNjMsIDIxOSwgMjAwLCA3LCA2LCAxLCAyNDIsIDI0OSwgNywgNCwgMSwgMjQyLCAyNDksIDI1MCwgMTU5LCAKLSAgICAxNjUsIDEsIDIzMiwgMTc1LCAyMDksIDIwOSwgMSwgMjQ0LCA0NCwgMjQ0LCAzNiwgMjA5LCAyMDksIDEsIDI0NCwgNDQsIAotICAgIDI0NCwgMTU3LCAyMDksIDIwOSwgMSwgMjIyLCAyMTEsIDIwOSwgMjA5LCAxLCAyMzIsIDE1NiwgNjMsIDE2NCwgMjUxLCAKLSAgICAyMjMsIDIyMCwgMywgMjQyLCAyMTUsIDIzMCwgMjQ4LCAyMjMsIDQxLCAyNDMsIDIxNiwgMjQzLCAyMTUsIDI0MywgMjE0LCAKLSAgICAyMzAsIDQ1LCAyMDksIDI1MSwgMjA5LCAyNTIsIDIwOSwgMjU0LCAyMzIsIDEwMiwgMjIyLCAyMTksIDIzMiwgMTAzLCAyMjIsIAotICAgIDIyMCwgMjI1LCAyMjMsIDIzMiwgMTAxLCAyMjIsIDIxOCwgMjI4LCAxMDYsIDIzMCwgMTY1LCAyMTEsIDIyOSwgMjEyLCAxNSwgCi0gICAgMjQ1LCAxNjIsIDI0MywgMjI2LCAyMzAsIDIyOSwgMjI2LCAxOTcsIDIxNCwgMTM0LCA4NywgMjMwLCAyMjksIDI0OCwgMTU3LCAKLSAgICA4NywgOCwgMywgMjM1LCAxNTgsIDc4LCAyMjQsIDE5NCwgMjQ0LCAyMCwgMzEsIDY3LCA0NCwgNzEsIDIzMywgMjAsIDEyNywgCi0gICAgMjEzLCAxMTgsIDIxMywgNywgMjEyLCAxOTUsIDIxMiwgMTg0LCAyMTIsIDE3MywgMjEyLCAxNjIsIDIxMiwgMTUxLCAyMTIsIAotICAgIDE0MCwgMjEyLCAxMjksIDIxMywgMTE3LCAyMTMsIDEwNiwgMjEzLCA5NSwgMjEzLCA4NCwgMjEzLCA3MywgMjEzLCA2MiwgCi0gICAgMjEzLCA1MSwgMjUxLCA3MSwgMjI2LCAxNTUsIDc4LCAyNTEsIDE5NiwgMjA5LCAyNTMsIDQ5LCAyOCwgMTYsIDI0MywgMjM2LCAKLSAgICAyMTksIDEwMiwgMjUwLCA3MywgMjE0LCA5LCAyMTMsIDQwLCAyMTMsIDI5LCAyMTMsIDE4LCAyMTMsIDYsIDIxMiwgMjUxLCAKLSAgICAyMTIsIDI0MCwgMjEyLCAyMjksIDIxMiwgMjE4LCAyMTIsIDIwNywgMjEyLCAxOTksIDIxMiwgMTk4LCAyMTIsIDE5NywgCi0gICAgMjEyLCAxOTYsIDIxMiwgMTk0LCAyMTIsIDE5MywgMjEyLCAxOTIsIDIxMiwgMTkxLCAyMTIsIDE5MCwgMjEyLCAxODksIAotICAgIDIxMiwgMTg4LCAyMTIsIDE4NywgMjEyLCAxODYsIDIxMiwgMTg1LCAyMTIsIDE4MywgMjEyLCAxODIsIDIxMiwgMTgxLCAKLSAgICAyMTIsIDE4MCwgMjEyLCAxNzksIDIxMiwgMTc4LCAyMTIsIDE3NywgMjEyLCAxNzYsIDIxMiwgMTc1LCAyMTIsIDE3NCwgCi0gICAgMjEyLCAxNzIsIDIxMiwgMTcxLCAyMTIsIDE3MCwgMjEyLCAxNjksIDIxMiwgMTY4LCAyMTIsIDE2NywgMjEyLCAxNjYsIAotICAgIDIxMiwgMTY1LCAyMTIsIDE2NCwgMjEyLCAxNjMsIDIxMiwgMTYxLCAyMTIsIDE2MCwgMjEyLCAxNTksIDIxMiwgMTU4LCAKLSAgICAyMTIsIDE1NywgMjEyLCAxNTYsIDIxMiwgMTU1LCAyMTIsIDE1NCwgMjEyLCAxNTMsIDIxMiwgMTUyLCAyMTIsIDE1MCwgCi0gICAgMjEyLCAxNDksIDIxMiwgMTQ4LCAyMTIsIDE0NywgMjEyLCAxNDYsIDIxMiwgMTQ1LCAyMTIsIDE0NCwgMjEyLCAxNDMsIAotICAgIDIxMiwgMTQyLCAyMTIsIDE0MSwgMjEyLCAxMzksIDIxMiwgMTM4LCAyMTIsIDEzNywgMjEyLCAxMzYsIDIxMiwgMTM1LCAKLSAgICAyMTIsIDEzNCwgMjEyLCAxMzMsIDIxMiwgMTMyLCAyMTIsIDEzMSwgMjEyLCAxMzAsIDIxMiwgMTI4LCAyMTIsIDEyNywgCi0gICAgMjEyLCAxMjYsIDIxMiwgMTI1LCAyMTIsIDEyNCwgMjEyLCAxMjMsIDIxMiwgMTIyLCAyMTIsIDEyMSwgMjEyLCAxMjAsIAotICAgIDIxMiwgMTE5LCAyMTMsIDExNiwgMjEzLCAxMTUsIDIxMywgMTE0LCAyMTMsIDExMywgMjEzLCAxMTIsIDIxMywgMTExLCAKLSAgICAyMTMsIDExMCwgMjEzLCAxMDksIDIxMywgMTA4LCAyMTMsIDEwNywgMjEzLCAxMDUsIDIxMywgMTA0LCAyMTMsIDEwMywgCi0gICAgMjEzLCAxMDIsIDIxMywgMTAxLCAyMTMsIDEwMCwgMjEzLCA5OSwgMjEzLCA5OCwgMjEzLCA5NywgMjEzLCA5NiwgMjEzLCAKLSAgICA5NCwgMjEzLCA5MywgMjEzLCA5MiwgMjEzLCA5MSwgMjEzLCA5MCwgMjEzLCA4OSwgMjEzLCA4OCwgMjEzLCA4NywgMjEzLCAKLSAgICA4NiwgMjEzLCA4NSwgMjEzLCA4MywgMjEzLCA4MiwgMjEzLCA4MSwgMjEzLCA4MCwgMjEzLCA3OSwgMjEzLCA3OCwgMjEzLCAKLSAgICA3NywgMjEzLCA3NiwgMjEzLCA3NSwgMjEzLCA3NCwgMjEzLCA3MiwgMjEzLCA3MSwgMjEzLCA3MCwgMjEzLCA2OSwgMjEzLCAKLSAgICA2OCwgMjEzLCA2NywgMjEzLCA2NiwgMjEzLCA2NSwgMjEzLCA2NCwgMjEzLCA2MywgMjEzLCA2MSwgMjEzLCA2MCwgMjEzLCAKLSAgICA1OSwgMjEzLCA1OCwgMjEzLCA1NywgMjEzLCA1NiwgMjEzLCA1NSwgMjEzLCA1NCwgMjEzLCA1MywgMjEzLCA1MiwgMjEzLCAKLSAgICA1MCwgMjEzLCA0OSwgMjEzLCA0OCwgMjEzLCA0NywgMjEzLCA0NiwgMjEzLCA0NSwgMjEzLCA0NCwgMjEzLCA0MywgMjEzLCAKLSAgICA0MiwgMjEzLCA0MSwgMjEzLCAzOSwgMjEzLCAzOCwgMjEzLCAzNywgMjEzLCAzNiwgMjEzLCAzNSwgMjEzLCAzNCwgMjEzLCAKLSAgICAzMywgMjEzLCAzMiwgMjEzLCAzMSwgMjEzLCAzMCwgMjEzLCAyOCwgMjEzLCAyNywgMjEzLCAyNiwgMjEzLCAyNSwgMjEzLCAKLSAgICAyNCwgMjEzLCAyMywgMjEzLCAyMiwgMjEzLCAyMSwgMjEzLCAyMCwgMjEzLCAxOSwgMjEzLCAxNywgMjEzLCAxNiwgMjEzLCAKLSAgICAxNSwgMjEzLCAxNCwgMjEzLCAxMywgMjEzLCAxMiwgMjEzLCAxMSwgMjEzLCAxMCwgMjEzLCA5LCAyMTMsIDgsIDIxMywgNSwgCi0gICAgMjEzLCA0LCAyMTMsIDMsIDIxMywgMiwgMjEzLCAxLCAyMTMsIDAsIDIxMiwgMjU1LCAyMTIsIDI1NCwgMjEyLCAyNTMsIAotICAgIDIxMiwgMjUyLCAyMTIsIDI1MCwgMjEyLCAyNDksIDIxMiwgMjQ4LCAyMTIsIDI0NywgMjEyLCAyNDYsIDIxMiwgMjQ1LCAKLSAgICAyMTIsIDI0NCwgMjEyLCAyNDMsIDIxMiwgMjQyLCAyMTIsIDI0MSwgMjEyLCAyMzksIDIxMiwgMjM4LCAyMTIsIDIzNywgCi0gICAgMjEyLCAyMzYsIDIxMiwgMjM1LCAyMTIsIDIzNCwgMjEyLCAyMzMsIDIxMiwgMjMyLCAyMTIsIDIzMSwgMjEyLCAyMzAsIAotICAgIDIxMiwgMjI4LCAyMTIsIDIyNywgMjEyLCAyMjYsIDIxMiwgMjI1LCAyMTIsIDIyNCwgMjEyLCAyMjMsIDIxMiwgMjIyLCAKLSAgICAyMTIsIDIyMSwgMjEyLCAyMjAsIDIxMiwgMjE5LCAyMTIsIDIxNywgMjEyLCAyMTYsIDIxMiwgMjE1LCAyMTIsIDIxNCwgCi0gICAgMjEyLCAyMTMsIDIxMiwgMjEyLCAyMTIsIDIxMSwgMjEyLCAyMTAsIDIxMiwgMjA5LCAyMTIsIDIwOCwgMjEyLCAyMDYsIAotICAgIDIxMiwgMjA1LCAyMTIsIDIwNCwgMjEyLCAyMDMsIDIxMiwgMjAyLCAyMTIsIDIwMSwgMjEyLCAyMDAsIDcsIDYsIDEsIDExNSwgCi0gICAgMiwgMjMxLCAyMzMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTE1LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA2LCAKLSAgICAxLCAxNjAsIDIsIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgCi0gICAgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAyNDIsIDEzNiwgNywgNCwgMSwgMTYwLCAyLCA2NywgMjMyLCAKLSAgICAyMTQsIDI1MiwgNDMsIDIyLCAyNDIsIDEzNiwgNywgNiwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMTQsIDI1MiwgNDMsIDIyLCAKLSAgICAxNDIsIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIAotICAgIDI1MCwgMzEsIDIyLCAyMzEsIDIzMiwgNywgNCwgMSwgMTYwLCAyLCAyNTAsIDMxLCAyMiwgMjMxLCAyMzIsIDcsIDYsIDEsIAotICAgIDE2MCwgMiwgMjUwLCAzMSwgMjIsIDI1MCwgMjM0LCA3LCA0LCAxLCAxNjAsIDIsIDI1MCwgMzEsIDIyLCAyNTAsIDIzNCwgNywgCi0gICAgNiwgMSwgMjQwLCAxNTQsIDIsIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMzEsIAotICAgIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgNTksIDc3LCAyMiwgMTQyLCA3LCA0LCAxLCAyMjksIAotICAgIDgwLCAyLCAyMTYsIDg5LCA0OCwgNywgNiwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMTQsIDUxLCA3LCA0LCAxLCAxNDQsIDIsIAotICAgIDY3LCAyMzIsIDIxNCwgNTEsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIAotICAgIDcsIDQsIDEsIDE0NCwgMiwgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDE0NCwgMiwgCi0gICAgNjcsIDIzMiwgMjE0LCAyNTIsIDQzLCAyMiwgMTQyLCA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIxNCwgMjUyLCA0MywgCi0gICAgMjIsIDE0MiwgNywgNiwgMSwgMjIyLCA5MiwgMiwgNjcsIDIzMiwgMjE0LCA1MSwgNywgNCwgMSwgMjIyLCA5MiwgMiwgNjcsIAotICAgIDIzMiwgMjE0LCA1MSwgNywgNiwgMSwgMTA0LCAyLCAyMzEsIDIzMywgMjIsIDI0MiwgMTM2LCA3LCA0LCAxLCAxMDQsIDIsIAotICAgIDIzMSwgMjMzLCAyMiwgMjQyLCAxMzYsIDcsIDYsIDEsIDExNSwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIDEsIDExNSwgCi0gICAgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDYsIDEsIDExNSwgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDQsIDEsIDExNSwgCi0gICAgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIDEsIDE2MCwgCi0gICAgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDQsIDEsIDE2MCwgCi0gICAgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDc3LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIAotICAgIDU5LCA3NywgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDQsIDEsIDE2MCwgMiwgNTksIAotICAgIDc3LCAyMiwgMTgyLCA3LCA0LCAxLCAyNDAsIDE1NCwgMiwgNTksIDc3LCAyMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDI0MCwgCi0gICAgMTU0LCAyLCA1OSwgNzcsIDIyLCAxODIsIDcsIDYsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNSwgMjIsIDE0MiwgNywgNCwgCi0gICAgMSwgMjQwLCAxNTQsIDIsIDIyNiwgMjI1LCAyMiwgNTksIDc3LCAyMiwgMTQyLCA3LCA2LCAxLCAyNDAsIDE1NCwgMiwgMjI2LCAKLSAgICAyMjUsIDIyLCAxODIsIDcsIDQsIDEsIDI0MCwgMTU0LCAyLCAyMjYsIDIyNSwgMjIsIDU5LCA3NywgMjIsIDE4MiwgNywgNiwgCi0gICAgMSwgMjM1LCAxNDUsIDIsIDE4MiwgNywgNCwgMSwgMjM1LCAxNDUsIDIsIDU5LCA3NywgMjIsIDE4MiwgNywgNiwgMSwgMjMzLCAKLSAgICAxNDksIDIsIDE4MiwgNywgNCwgMSwgMjMzLCAxNDksIDIsIDE4MiwgNywgNiwgMSwgMjMyLCA1MCwgMiwgMTgyLCA3LCA0LCAKLSAgICAxLCAyMzIsIDUwLCAyLCAxODIsIDcsIDYsIDEsIDIyMywgMjI0LCAyLCAxODIsIDcsIDQsIDEsIDIyMywgMjI0LCAyLCAxODIsIAotICAgIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjI2LCAyMjUsIDIyLCAxNDIsIAotICAgIDcsIDYsIDEsIDEwNCwgMiwgMjI2LCAyMjUsIDIyLCAxODIsIDcsIDQsIDEsIDEwNCwgMiwgMjI2LCAyMjUsIDIyLCAxODIsIAotICAgIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAxNDIsIAotICAgIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAxODIsIDcsIDQsIDEsIDEwNCwgMiwgMjMxLCAyMzMsIDIyLCAxODIsIAotICAgIDcsIDQsIDEsIDI1NCwgMjQ0LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjA0LCAxNDQsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAKLSAgICAyMDQsIDE0NCwgMiwgMTQyLCA3LCA0LCAxLCAyMTUsIDk0LCAyMTQsIDEwNiwgMiwgMjQyLCAxMzYsIDcsIDQsIDEsIDIxNSwgCi0gICAgOTQsIDIxNCwgMTA2LCAyLCAxNDIsIDcsIDQsIDEsIDIyMSwgMTk2LCAyLCAyNDIsIDEzNiwgNywgNCwgMSwgMjIxLCAxOTYsIAotICAgIDIsIDE0MiwgNywgNCwgMSwgMjQxLCA1MSwgMjIxLCAxOTYsIDIsIDI0MiwgMTM2LCA3LCA0LCAxLCAyNDEsIDUxLCAyMjEsIAotICAgIDE5NiwgMiwgMTQyLCAxNDYsIDEsIDIzNCwgMTA5LCAzNiwgMTE2LCAyMzUsIDIzLCAzNiwgMTE2LCAyMjksIDc5LCAzNiwgCi0gICAgMTE2LCAyNTEsIDY2LCAzNiwgMTE2LCAyMjcsIDE2NywgMzYsIDExNiwgMjE1LCAxNTksIDM2LCAxMTYsIDIyOCwgMTExLCAKLSAgICAzNiwgMTE2LCAyMTcsIDE1MiwgMzYsIDExNiwgMjMwLCAyNSwgMzYsIDExNiwgMjI2LCAxMDUsIDM2LCAxMTYsIDE5MywgMzYsIAotICAgIDExNiwgMjExLCAxMTcsIDM2LCAxMTYsIDE1MywgMzYsIDExNiwgMTU2LCAzNiwgMTE2LCAyMTQsIDEwNSwgMzYsIDExNiwgCi0gICAgMjMyLCAxNzYsIDM2LCAxMTYsIDIzMiwgMTg1LCAzNiwgMTE2LCAyMjIsIDE4MCwgMzYsIDExNiwgMjI4LCA5MywgMzYsIAotICAgIDExNiwgMjM1LCAxNDQsIDM2LCAxMTYsIDIyMCwgMTA0LCAzNiwgMTE2LCAyMTgsIDIyNiwgMzYsIDExNiwgMjIyLCA5MSwgCi0gICAgMzYsIDExNiwgMjQyLCA2MCwgMzYsIDExNiwgMjMzLCAyMzIsIDM2LCAzLCAyMzUsIDEwLCAzNiwgMywgMjM0LCA5MiwgMzYsIAotICAgIDMsIDIzNCwgODMsIDM2LCAzLCAyMzMsIDIxNywgMzYsIDMsIDIzMywgMTg4LCAzNiwgMywgMjM0LCAxODIsIDM2LCAzLCAKLSAgICAyMzQsIDE4MSwgMzYsIDMsIDIzNCwgMjQ2LCAzNiwgMywgMjM0LCAyOCwgMzYsIDMsIDIzNCwgMTAsIDM2LCAzLCAyMzQsIAotICAgIDE5NSwgMzYsIDMsIDIyOSwgNzYsIDM2LCAzLCAyMjksIDI3LCAzNiwgMywgMjI5LCAyMywgMzYsIDMsIDIyOCwgMjQ4LCAzNiwgCi0gICAgMywgMjI4LCAyNDEsIDM2LCAzLCAyMjksIDY0LCAzNiwgMywgMjI5LCA2MiwgMzYsIDMsIDIyOSwgNzMsIDM2LCAzLCAyMjksIAotICAgIDQsIDM2LCAzLCAyMjgsIDI1NSwgMzYsIDMsIDIyOSwgNjYsIDM2LCAzLCAyNTEsIDMyLCAzNiwgMywgMjUwLCA1MSwgMzYsIAotICAgIDMsIDI1MCwgNDEsIDM2LCAzLCAyNDksIDExMiwgMzYsIDMsIDI0OSwgODMsIDM2LCAzLCAyNTAsIDE5MCwgMzYsIDMsIDI1MCwgCi0gICAgMTgyLCAzNiwgMywgMjUxLCAyMiwgMzYsIDMsIDI0OSwgMjM4LCAzNiwgMywgMjQ5LCAxNzQsIDM2LCAzLCAyNTAsIDIyMiwgCi0gICAgMzYsIDMsIDIyNywgMTY0LCAzNiwgMywgMjI3LCAxNDgsIDM2LCAzLCAyMjcsIDE0MywgMzYsIDMsIDIyNywgMTI4LCAzNiwgCi0gICAgMywgMjI3LCAxMjEsIDM2LCAzLCAyMjcsIDE1NiwgMzYsIDMsIDIyNywgMTU1LCAzNiwgMywgMjI3LCAxNjEsIDM2LCAzLCAKLSAgICAyMjcsIDEzNCwgMzYsIDMsIDIyNywgMTMyLCAzNiwgMywgMjI3LCAxNTksIDM2LCAzLCAyMTUsIDE1NSwgMzYsIDMsIDIxNSwgCi0gICAgMTM1LCAzNiwgMywgMjE1LCAxMzQsIDM2LCAzLCAyMTUsIDEyMywgMzYsIDMsIDIxNSwgMTIwLCAzNiwgMywgMjE1LCAxNTEsIAotICAgIDM2LCAzLCAyMTUsIDE1MCwgMzYsIDMsIDIxNSwgMTU0LCAzNiwgMywgMjE1LCAxMzMsIDM2LCAzLCAyMTUsIDEzMiwgMzYsIAotICAgIDMsIDIxNSwgMTUzLCAzNiwgMywgMjI4LCAxMDksIDM2LCAzLCAyMjgsIDk1LCAzNiwgMywgMjI4LCA5NCwgMzYsIDMsIDIyOCwgCi0gICAgNzgsIDM2LCAzLCAyMjgsIDc3LCAzNiwgMywgMjI4LCAxMDUsIDM2LCAzLCAyMjgsIDEwNCwgMzYsIDMsIDIyOCwgMTA4LCAKLSAgICAzNiwgMywgMjI4LCA4MCwgMzYsIDMsIDIyOCwgNzksIDM2LCAzLCAyMjgsIDEwNywgMzYsIDMsIDIxNywgMTAxLCAzNiwgMywgCi0gICAgMjE2LCAxMTcsIDM2LCAzLCAyMTYsIDEwMywgMzYsIDMsIDIxNSwgMTE4LCAzNiwgMywgMjE1LCA4NSwgMzYsIDMsIDIxNywgCi0gICAgMjIsIDM2LCAzLCAyMTcsIDExLCAzNiwgMywgMjE3LCA3OSwgMzYsIDMsIDExMSwgMzYsIDMsIDIxNiwgMTcsIDM2LCAzLCAKLSAgICAyMTcsIDQxLCAzNiwgMywgMjI5LCAyMjUsIDM2LCAzLCAyMjgsIDIzMywgMzYsIDMsIDIyOCwgMjA4LCAzNiwgMywgMjI3LCAKLSAgICAyMzcsIDM2LCAzLCAyMjcsIDE3OSwgMzYsIDMsIDIyOSwgMTA3LCAzNiwgMywgMjI5LCAxMDMsIDM2LCAzLCAyMjksIDIxMiwgCi0gICAgMzYsIDMsIDIyOCwgNzQsIDM2LCAzLCAyMjgsIDY0LCAzNiwgMywgMjI5LCAxODcsIDM2LCAzLCAyMjYsIDg5LCAzNiwgMywgCi0gICAgMjI1LCAxMDgsIDM2LCAzLCAyMjUsIDcxLCAzNiwgMywgMjI0LCAxNTAsIDM2LCAzLCAyMjQsIDExOSwgMzYsIDMsIDIyNSwgCi0gICAgMjIxLCAzNiwgMywgMjI1LCAyMTEsIDM2LCAzLCAyMjYsIDcxLCAzNiwgMywgMjI1LCAxNiwgMzYsIDMsIDIyNCwgMjQ5LCAKLSAgICAzNiwgMywgMjI1LCAyMzQsIDM2LCAzLCAyMzEsIDIzNywgMzYsIDMsIDIzMCwgMjMwLCAzNiwgMywgMjMwLCAyMDEsIDM2LCAKLSAgICAzLCAyMzAsIDEwMiwgMzYsIDMsIDIzMCwgNTQsIDM2LCAzLCAyMzEsIDkxLCAzNiwgMywgMjMxLCA4MCwgMzYsIDMsIDIzMSwgCi0gICAgMjAzLCAzNiwgMywgMjMwLCAxNjEsIDM2LCAzLCAyMzAsIDEzMiwgMzYsIDMsIDIzMSwgMTM1LCAzNiwgMywgMjExLCAxMDMsIAotICAgIDM2LCAzLCAyMTEsIDgsIDM2LCAzLCAyMTAsIDI1NSwgMzYsIDMsIDIxMCwgMjEyLCAzNiwgMywgMjEwLCAxODEsIDM2LCAzLCAKLSAgICAyMTEsIDQ3LCAzNiwgMywgMjExLCA0NCwgMzYsIDMsIDIxMSwgODIsIDM2LCAzLCAyMTAsIDI0NCwgMzYsIDMsIDIxMCwgCi0gICAgMjI5LCAzNiwgMywgMjExLCA1NSwgMzYsIDMsIDIyMywgMTg0LCAzNiwgMywgMjIzLCAzNSwgMzYsIDMsIDIyMiwgMjM5LCAKLSAgICAzNiwgMywgMjIyLCAxNDAsIDM2LCAzLCAyMjIsIDExMiwgMzYsIDMsIDIyMywgMTI4LCAzNiwgMywgMjIzLCAxMDgsIDM2LCAKLSAgICAzLCAyMjMsIDE2NiwgMzYsIDMsIDIyMiwgMjExLCAzNiwgMywgMjIyLCAxOTcsIDM2LCAzLCAyMjMsIDEzNiwgMzYsIDMsIAotICAgIDIzMywgMTM0LCAzNiwgMywgMjMyLCAyNDEsIDM2LCAzLCAyMzIsIDIyNywgMzYsIDMsIDIzMiwgOTgsIDM2LCAzLCAyMzIsIAotICAgIDczLCAzNiwgMywgMjMzLCA1OCwgMzYsIDMsIDIzMywgNTAsIDM2LCAzLCAyMzMsIDEwOSwgMzYsIDMsIDIzMiwgMTU2LCAzNiwgCi0gICAgMywgMjMyLCAxMjcsIDM2LCAzLCAyMzMsIDc0LCAzNiwgMywgMjE0LCAyNiwgMzYsIDMsIDIxMywgMTc2LCAzNiwgMywgMjEzLCAKLSAgICAxNjIsIDM2LCAzLCAyMTIsIDExNiwgMzYsIDMsIDIxMiwgMTA5LCAzNiwgMywgMjEzLCAyNTUsIDM2LCAzLCAyMTMsIDI1MCwgCi0gICAgMzYsIDMsIDIxNCwgMjMsIDM2LCAzLCAyMTMsIDEzOCwgMzYsIDMsIDIxMywgMTI3LCAzNiwgMywgMjE0LCA1LCAzNiwgMywgCi0gICAgMjMyLCAxNzQsIDM2LCAzLCAyMzIsIDE2OSwgMzYsIDMsIDIzMiwgMTY4LCAzNiwgMywgMjMyLCAxNjUsIDM2LCAzLCAyMzIsIAotICAgIDE2NCwgMzYsIDMsIDIzMiwgMTcxLCAzNiwgMywgMjMyLCAxNzAsIDM2LCAzLCAyMzIsIDE3MywgMzYsIDMsIDIzMiwgMTY3LCAKLSAgICAzNiwgMywgMjMyLCAxNjYsIDM2LCAzLCAyMzIsIDE3MiwgMzYsIDMsIDIzMiwgMTgzLCAzNiwgMywgMjMyLCAxNzgsIDM2LCAKLSAgICAzLCAyMzIsIDE3NywgMzYsIDMsIDIzMiwgMTYxLCAzNiwgMywgMjMyLCAxNjAsIDM2LCAzLCAyMzIsIDE4MCwgMzYsIDMsIAotICAgIDIzMiwgMTc5LCAzNiwgMywgMjMyLCAxODIsIDM2LCAzLCAyMzIsIDE2MywgMzYsIDMsIDIzMiwgMTYyLCAzNiwgMywgMjMyLCAKLSAgICAxODEsIDM2LCAzLCAyMjIsIDE3OCwgMzYsIDMsIDIyMiwgMTY3LCAzNiwgMywgMjIyLCAxNjYsIDM2LCAzLCAyMjIsIDE2MCwgCi0gICAgMzYsIDMsIDIyMiwgMTUzLCAzNiwgMywgMjIyLCAxNzQsIDM2LCAzLCAyMjIsIDE3MywgMzYsIDMsIDIyMiwgMTc3LCAzNiwgCi0gICAgMywgMjIyLCAxNjUsIDM2LCAzLCAyMjIsIDE2NCwgMzYsIDMsIDIyMiwgMTc2LCAzNiwgMywgMjI4LCA5MSwgMzYsIDMsIAotICAgIDIyOCwgODYsIDM2LCAzLCAyMjgsIDg1LCAzNiwgMywgMjI4LCA4MiwgMzYsIDMsIDIyOCwgODEsIDM2LCAzLCAyMjgsIDg4LCAKLSAgICAzNiwgMywgMjI4LCA4NywgMzYsIDMsIDIyOCwgOTAsIDM2LCAzLCAyMjgsIDg0LCAzNiwgMywgMjI4LCA4MywgMzYsIDMsIAotICAgIDIyOCwgODksIDM2LCAzLCAyMzUsIDE0MCwgMzYsIDMsIDIzNSwgMTA4LCAzNiwgMywgMjM1LCAxMDEsIDM2LCAzLCAyMzUsIAotICAgIDUxLCAzNiwgMywgMjM1LCAzMywgMzYsIDMsIDIzNSwgMTI2LCAzNiwgMywgMjM1LCAxMjQsIDM2LCAzLCAyMzUsIDEzNSwgCi0gICAgMzYsIDMsIDIzNSwgNjgsIDM2LCAzLCAyMzUsIDU5LCAzNiwgMywgMjM1LCAxMjksIDM2LCAzLCAyMjAsIDk4LCAzNiwgMywgCi0gICAgMjIwLCAzMiwgMzYsIDMsIDIyMCwgMjcsIDM2LCAzLCAyMTksIDIyNSwgMzYsIDMsIDIxOSwgMjEwLCAzNiwgMywgMjIwLCAKLSAgICA2MywgMzYsIDMsIDIyMCwgNjEsIDM2LCAzLCAyMjAsIDkwLCAzNiwgMywgMjIwLCA3LCAzNiwgMywgMjIwLCAxLCAzNiwgMywgCi0gICAgMjIwLCA3MSwgMzYsIDMsIDIxOCwgMjIyLCAzNiwgMywgMjE4LCAxOTIsIDM2LCAzLCAyMTgsIDE4OCwgMzYsIDMsIDIxOCwgCi0gICAgMTc5LCAzNiwgMywgMjE4LCAxNzYsIDM2LCAzLCAyMTgsIDE5NywgMzYsIDMsIDIxOCwgMTk2LCAzNiwgMywgMjE4LCAyMjEsIAotICAgIDM2LCAzLCAyMTgsIDE4NCwgMzYsIDMsIDIxOCwgMTgzLCAzNiwgMywgMjE4LCAxOTksIDM2LCAzLCAyMjIsIDMxLCAzNiwgMywgCi0gICAgMjE5LCAxOTEsIDM2LCAzLCAyMTksIDE3NSwgMzYsIDMsIDIxOCwgODMsIDM2LCAzLCAyMTgsIDQsIDM2LCAzLCAyMjEsIAotICAgIDE4MSwgMzYsIDMsIDIyMSwgMTcwLCAzNiwgMywgMjIyLCAxNywgMzYsIDMsIDIxOSwgNTgsIDM2LCAzLCAyMTksIDQwLCAzNiwgCi0gICAgMywgMjIxLCAyMTksIDM2LCAzLCAyNDIsIDQ2LCAzNiwgMywgMjQxLCAxODAsIDM2LCAzLCAyNDEsIDE2MSwgMzYsIDMsIAotICAgIDI0MCwgMjIyLCAzNiwgMywgMjQwLCAyMDIsIDM2LCAzLCAyNDEsIDIzOCwgMzYsIDMsIDI0MSwgMjIwLCAzNiwgMywgMjQyLCAKLSAgICAzNiwgMzYsIDMsIDI0MSwgNjgsIDM2LCAzLCAyNDEsIDUzLCAzNiwgMywgMjQxLCAyNDYsIDM2LCAzLCAyMzMsIDIzMSwgMzYsIAotICAgIDMsIDIzMywgMjMwLCAzNiwgMywgMjMzLCAyMjUsIDM2LCAzLCAyMzMsIDIyNCwgMzYsIDMsIDIzMywgMjIxLCAzNiwgMywgCi0gICAgMjMzLCAyMjAsIDM2LCAzLCAyMzMsIDIyNywgMzYsIDMsIDIzMywgMjI2LCAzNiwgMywgMjMzLCAyMjksIDM2LCAzLCAyMzMsIAotICAgIDIyMywgMzYsIDMsIDIzMywgMjIyLCAzNiwgMywgMjMzLCAyMjgsIDM2LCAzLCAyMTksIDIzMSwgMTc1LCAxMTYsIDUsIDIxMSwgCi0gICAgNjgsIDE3NSwgMTE2LCA1LCAyMjMsIDE1NSwgMTc1LCAxMTYsIDUsIDIyMywgNzgsIDk4LCAxLCAyMTUsIDI4LCA2OSwgMTE2LCAKLSAgICA1LCAyNDksIDIzMywgMTc2LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjM0LCAxMzIsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAKLSAgICAyMzQsIDI4LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjM0LCAxMDUsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjksIDQsIAotICAgIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNTEsIDMzLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjUwLCAxNTcsIDY5LCAxMTYsIAotICAgIDUsIDI0OSwgMjMzLCAyNDksIDIzOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MCwgODYsIDY5LCAxMTYsIDUsIDI0OSwgCi0gICAgMjMzLCAyMjcsIDEzNCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI0OCwgMjIxLCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjE1LCAKLSAgICAxNDQsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyNDcsIDE0NSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNSwgMTM5LCA2OSwgCi0gICAgMTE2LCA1LCAyNDksIDIzMywgMTk3LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjE3LCAxMDUsIDY5LCAxMTYsIDUsIDI0OSwgCi0gICAgMjMzLCAyMTYsIDIwOCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDExMSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxNiwgMTU2LCAKLSAgICA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjI4LCA3NCwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDI1MiwgMTkxLCA2OSwgMTE2LCAKLSAgICA1LCAyNDksIDIzMywgMjI1LCAxNDcsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMjUsIDE2LCA2OSwgMTE2LCA1LCAyNDksIAotICAgIDIzMywgMjI1LCAxMjEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzAsIDE2MSwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIxMCwgCi0gICAgMjQ0LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjIyLCAyMTEsIDY5LCAxMTYsIDUsIDI0OSwgMjMzLCAyMzIsIDE1NiwgNjksIAotICAgIDExNiwgNSwgMjQ5LCAyMzMsIDIxMywgMTM4LCA2OSwgMTE2LCA1LCAyNDksIDIzMywgMjIwLCAxMDIsIDY5LCAxMTYsIDUsIAotICAgIDI0OSwgMjMzLCAyMTgsIDIyMywgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIwNiwgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDE2MiwgCi0gICAgNjksIDExNiwgNSwgMjQ5LCAyMzMsIDIzMywgMTM1LCA2OSwgMjUsIDUsIDI0OSwgMjMzLCAyMjQsIDg4LCA2OSwgMjM1LCAKLSAgICAyNDMsIDI1LCA1LCAyNDksIDIzMywgMjI0LCAzMCwgNjksIDIzNSwgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIDIyMiwgMTAwLCAKLSAgICA2OSwgMjM1LCAyNDMsIDI1LCA1LCAyNDksIDIzMywgMjIyLCA5MywgNjksIDIzNSwgMjQzLCAyNSwgNSwgMjQ5LCAyMzMsIAotICAgIDIyNCwgNjksIDY5LCAyNSwgNSwgMjI2LCAyMDQsIDY5LCAyNSwgNSwgMjU1LCAzNCwgMTQxLCAxLCAyNTEsIDI1NSwgMjI5LCAKLSAgICA3NywgMTQxLCAxLCAyNTEsIDI1NSwgMjI5LCAyNywgMTQxLCAxLCAyNTEsIDI1NSwgMjI4LCAyNDgsIDE0MSwgMSwgMjUxLCAKLSAgICAyNTUsIDIyOSwgNjQsIDE0MSwgMSwgMjUxLCAyNTUsIDIyOSwgNCwgNTYsIDEsIDI1MSwgMjU1LCAyMjksIDc3LCA1NiwgMSwgCi0gICAgMjUxLCAyNTUsIDIyOSwgMjcsIDU2LCAxLCAyNTEsIDI1NSwgMjI4LCAyNDgsIDU2LCAxLCAyNTEsIDI1NSwgMjI5LCA2NCwgCi0gICAgNTYsIDEsIDI1MSwgMjU1LCAyMjksIDQsIDU2LCAxLCAyNTQsIDE5NCwgMjUwLCAxOTAsIDU2LCAxLCAyNTQsIDE5NCwgMjE1LCAKLSAgICAxMTgsIDU2LCAxLCAyNTQsIDE5NCwgMTExLCA1NiwgMSwgMjU0LCAxOTQsIDIyNiwgMTA1LCA1OCwgMSwgMjQ1LCAyMCwgCi0gICAgMjQ1LCAxOSwgMjQ5LCAxODIsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAxOSwgMjQ1LCAyMCwgMjQ5LCAxODIsIDEzOCwgMTMwLCAKKyAgICA0NSwgMTA4LCAxNiwgMzEsIDIyNSwgMTI4LCAyMTgsIDQ1LCAxMDgsIDE2LCAzMSwgODUsIDIxOCwgNDUsIDEwOCwgMTYsIAorICAgIDMxLCAyMzEsIDYwLCAyMTgsIDcyLCAxMDgsIDE2LCAzMSwgMjMxLCA2MCwgMjE4LCA3MSwgMTA4LCAxNiwgMzEsIDIzMSwgCisgICAgNjAsIDIxOCwgNzAsIDEwOCwgMTYsIDMxLCAyNTAsIDQ2LCAxMDgsIDE2LCAzMSwgMjIyLCAzLCAxMDgsIDE2LCAzMSwgMjI4LCAKKyAgICAxOTMsIDEwOCwgMTYsIDMxLCAyMTMsIDE0MSwgMTA4LCAxNiwgMzEsIDIxMywgMTQwLCAxMDgsIDE2LCAzMSwgMjIyLCAyMDYsIAorICAgIDIyMiwgMywgMTA4LCAxNiwgMzEsIDIyMiwgMjA2LCAyMjIsIDIsIDEwOCwgMTYsIDMxLCAyNDIsIDE3MywgMTA4LCAxNiwgCisgICAgMzEsIDIxOSwgMTY4LCAxMDgsIDE2LCAzMSwgMjM1LCAxODQsIDIyNiwgMTU3LCAxMDgsIDE2LCAzMSwgMjM1LCAxODQsIAorICAgIDIyNiwgMTU2LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNDIsIDY0LCAyMzUsIDE4MywgMTA4LCAxNiwgMzEsIDIyMywgMTA0LCA2NCwgCisgICAgMjM1LCAxODMsIDEwOCwgMTYsIDMxLCAyNDksIDE3NiwgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyMzUsIDE4MiwgMjI2LCAKKyAgICAxNTcsIDEwOCwgMTYsIDMxLCAyMTgsIDczLCA2NCwgMjQ5LCAxNzUsIDEwOCwgMTYsIDMxLCAyNDksIDE0MiwgNjQsIDI0OSwgCisgICAgMTc1LCAxMDgsIDE2LCAzMSwgMjQ5LCAxNDIsIDY0LCAyNDksIDE3NCwgMTA4LCAxNiwgMzEsIDI0OSwgMTc2LCAyNTQsIDkxLCAKKyAgICAxMDgsIDE2LCAzMSwgMjIyLCA0LCA2NCwgMjQ5LCAxNzYsIDI1NCwgOTEsIDEwOCwgMTYsIDMxLCAyMTgsIDczLCA2NCwgCisgICAgMjIyLCA0LCA2NCwgMjQ5LCAxNzUsIDEwOCwgMTYsIDMxLCAyMTMsIDI0MywgMTA4LCAxNiwgMzEsIDIxNiwgODUsIDIyNiwgCisgICAgMTU3LCAxMDgsIDE2LCAzMSwgMjMzLCA2MywgMjI2LCAxNTcsIDEwOCwgMTYsIDMxLCAyNTQsIDkwLCAyMjYsIDE1NywgMTA4LCAKKyAgICAxNiwgMzEsIDIxOCwgNzMsIDY0LCAyNTQsIDg5LCAxMDgsIDE2LCAzMSwgMjIyLCA0LCA2NCwgMjU0LCA4OSwgMTA4LCAxNiwgCisgICAgMzEsIDIxOCwgNzMsIDY0LCAyMjIsIDQsIDY0LCAyNTQsIDg5LCAxMDgsIDE2LCAzMSwgMjEzLCAxNTgsIDY0LCAyNTQsIDg5LCAKKyAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDQsIDY0LCAyNTQsIDg5LCAxMDgsIDE2LCAzMSwgMjIzLCAxMDQsIDY0LCAyNTQsIDg4LCAKKyAgICAxMDgsIDE2LCAzMSwgMjIzLCAxMDMsIDEwOCwgMTYsIDMxLCAyMjMsIDEwMiwgMTA4LCAxNiwgMzEsIDIyMywgMTAxLCAxMDgsIAorICAgIDE2LCAzMSwgMjIzLCAxMDAsIDEwOCwgMTYsIDMxLCAyNTQsIDE2NiwgMTA4LCAxNiwgMzEsIDI1NCwgMTY1LCAxMDgsIDE2LCAKKyAgICAzMSwgMjMxLCAxNjgsIDEwOCwgMTYsIDMxLCAyMjIsIDksIDEwOCwgMTYsIDMxLCAyNTMsIDI1NCwgMTA4LCAxNiwgMzEsIAorICAgIDIyMywgMTI4LCAxMDgsIDE2LCAzMSwgMjIzLCAxMjcsIDEwOCwgMTYsIDMxLCAyNTMsIDE5MSwgMTA4LCAxNiwgMzEsIDI1MSwgCisgICAgMjM3LCAyMjYsIDE1NywgMTA4LCAxNiwgMzEsIDIxNywgNTAsIDEwOCwgMTYsIDMxLCAyMTcsIDQ5LCAxMDgsIDE2LCAzMSwgCisgICAgMjI0LCAxMSwgMjMyLCAyMjgsIDEwOCwgMTYsIDMxLCAyNTEsIDE5MSwgMTA4LCAxNiwgMzEsIDI1MSwgMTkwLCAxMDgsIDE2LCAKKyAgICAzMSwgMjUxLCAxODksIDEwOCwgMTYsIDMxLCAyNTQsIDE0NiwgMTA4LCAxNiwgMzEsIDIyNiwgMjIyLCAxMDgsIDE2LCAzMSwgCisgICAgMjE4LCAyNTAsIDEwOCwgMTYsIDMxLCAyMTYsIDgzLCAxMDgsIDE2LCAzMSwgMjQyLCAxMDMsIDEwOCwgMTYsIDMxLCAyMTIsIAorICAgIDI4LCAxMDgsIDE2LCAzMSwgMjI0LCAyMjksIDEwOCwgMTYsIDMxLCAyNTEsIDIyLCAxMDgsIDE2LCAzMSwgMjE1LCA4NiwgCisgICAgMTA4LCAxNiwgMzEsIDI1MCwgMjU0LCAyMzAsIDEyNywgMTA4LCAxNiwgMzEsIDIyMSwgMjA0LCA2NCwgMjM1LCA2MSwgMTA4LCAKKyAgICAxNiwgMzEsIDI1MSwgMzMsIDEwOCwgMTYsIDMxLCAyMTUsIDIyMCwgMTA4LCAxNiwgMzEsIDIxOCwgMTU2LCAyMTUsIDIyMCwgCisgICAgMTA4LCAxNiwgMzEsIDIzMiwgMTU0LCAxMDgsIDE2LCAzMSwgMjE5LCA1OCwgMTA4LCAxNiwgMzEsIDIxNCwgMTQyLCAxMDgsIAorICAgIDE2LCAzMSwgMjQwLCAyNTMsIDI0NiwgNzIsIDEwOCwgMTYsIDMxLCAyNTMsIDIzNSwgMTA4LCAxNiwgMzEsIDIyNCwgMjM3LCAKKyAgICAyNTMsIDIzNSwgMTA4LCAxNiwgMzEsIDI1MSwgMTUwLCAxMDgsIDE2LCAzMSwgMjI0LCAyMjgsIDI1MSwgMTUwLCAxMDgsIAorICAgIDE2LCAzMSwgMjU0LCAxNDMsIDEwOCwgMTYsIDMxLCAyMTgsIDExOSwgMjE4LCAyNywgMjE4LCAxMTgsIDEwOCwgMTYsIDMxLCAKKyAgICAyMTgsIDExOSwgMjE4LCAyNywgMjE4LCAxMTcsIDEwOCwgMTYsIDMxLCAyMTgsIDY5LCAxMDgsIDE2LCAzMSwgMjI0LCAyMDMsIAorICAgIDEwOCwgMTYsIDMxLCAyNDcsIDE4OSwgMTA4LCAxNiwgMzEsIDI0NywgMTkxLCAxMDgsIDE2LCAzMSwgMjQ3LCAxOTAsIDEwOCwgCisgICAgMTYsIDMxLCAyMjQsIDEzNCwgMTA4LCAxNiwgMzEsIDIyNCwgMTIzLCAxMDgsIDE2LCAzMSwgMjQ5LCAxMzAsIDEwOCwgMTYsIAorICAgIDMxLCAyNDksIDEyOSwgMTA4LCAxNiwgMzEsIDI0OSwgMTI4LCAxMDgsIDE2LCAzMSwgMjQ5LCAxMjcsIDEwOCwgMTYsIDMxLCAKKyAgICAyNDksIDEyNiwgMTA4LCAxNiwgMzEsIDI1NCwgMTc4LCAxMDgsIDE2LCAzMSwgMjUyLCAxMjcsIDY0LCAyMzEsIDE1NCwgCisgICAgMTA4LCAxNiwgMzEsIDI1MiwgMTI3LCA2NCwgMjE0LCAxNywgMTA4LCAxNiwgMzEsIDIyMywgNjAsIDEwOCwgMTYsIDMxLCAKKyAgICAyNDAsIDI0NSwgMTA4LCAxNiwgMzEsIDIyOCwgMjE3LCAxMDgsIDE2LCAzMSwgMjQ4LCAxNTMsIDEwOCwgMTYsIDMxLCAyMzAsIAorICAgIDEzOSwgMTA4LCAxNiwgMzEsIDE2MywgMjQ2LCAxMDIsIDEwOCwgMTYsIDMxLCAxNjMsIDIyNiwgMTM2LCAxMCwgMTQsIDI0MCwgCisgICAgMTA5LCAxMCwgMTQsIDI0MCwgMTA4LCAxMCwgMTQsIDI0MCwgMTA3LCAxMCwgMTQsIDI0MCwgMTA2LCAxMCwgMTQsIDI0MCwgCisgICAgMTA1LCAxMCwgMTQsIDI0MCwgMTA0LCAxMCwgMTQsIDI0MCwgMTAzLCAxMCwgMTQsIDI0MCwgMTAyLCAxMCwgMTQsIDI0MCwgCisgICAgMTAxLCAxMCwgMTQsIDI0MCwgMTAwLCAxMCwgMTQsIDI0MCwgOTksIDEwLCAxNCwgMjQwLCA5OCwgMTAsIDE0LCAyNDAsIDk3LCAKKyAgICAxMCwgMTQsIDI0MCwgOTYsIDEwLCAxNCwgMjQwLCA5NSwgMTAsIDE0LCAyNDAsIDk0LCAxMCwgMTQsIDI0MCwgOTMsIDEwLCAKKyAgICAxNCwgMjQwLCA5MiwgMTAsIDE0LCAyNDAsIDkxLCAxMCwgMTQsIDI0MCwgOTAsIDEwLCAxNCwgMjQwLCA4OSwgMTAsIDE0LCAKKyAgICAyNDAsIDg4LCAxMCwgMTQsIDI0MCwgODcsIDEwLCAxNCwgMjQwLCA4NiwgMTAsIDE0LCAyNDAsIDg1LCAxMCwgMTQsIDI0MCwgCisgICAgODQsIDEwLCAxNCwgMjQwLCA4MywgMTAsIDE0LCAyNDAsIDgyLCAxMCwgMTQsIDI0MCwgODEsIDEwLCAxNCwgMjQwLCA4MCwgCisgICAgMTAsIDE0LCAyNDAsIDc5LCAxMCwgMTQsIDI0MCwgNzgsIDEwLCAxNCwgMjQwLCA3NywgMTAsIDE0LCAyNDAsIDc2LCAxMCwgCisgICAgMTQsIDI0MCwgNzUsIDEwLCAxNCwgMjQwLCA3NCwgMTAsIDE0LCAyNDAsIDczLCAxMCwgMTQsIDI0MCwgNzIsIDEwLCAxNCwgCisgICAgMjQwLCA3MSwgMTAsIDE0LCAyNDAsIDcwLCAxMCwgMTQsIDI0MCwgNjksIDEwLCAxNCwgMjQwLCA2OCwgMTAsIDE0LCAyNDAsIAorICAgIDY3LCAxMCwgMTQsIDI0MCwgNjYsIDEwLCAxNCwgMjQwLCA2NSwgMTAsIDE0LCAyNDAsIDY0LCAxMCwgMTQsIDI0MCwgNjMsIAorICAgIDEwLCAxNCwgMjQwLCA2MiwgMTAsIDE0LCAyNDAsIDYxLCAxMCwgMTQsIDI0MCwgNjAsIDEwLCAxNCwgMjQwLCA1OSwgMTAsIAorICAgIDE0LCAyNDAsIDU4LCAxMCwgMTQsIDI0MCwgNTcsIDEwLCAxNCwgMjQwLCA1NiwgMTAsIDE0LCAyNDAsIDU1LCAxMCwgMTQsIAorICAgIDI0MCwgNTQsIDEwLCAxNCwgMjQwLCA1MywgMTAsIDE0LCAyNDAsIDUyLCAxMCwgMTQsIDI0MCwgNTEsIDEwLCAxNCwgMjQwLCAKKyAgICA1MCwgMTAsIDE0LCAyNDAsIDQ5LCAxMCwgMTQsIDI0MCwgNDgsIDEwLCAxNCwgMjQwLCA0NywgMTAsIDE0LCAyNDAsIDQ2LCAKKyAgICAxMCwgMTQsIDI0MCwgNDUsIDEwLCAxNCwgMjQwLCA0NCwgMTAsIDE0LCAyNDAsIDQzLCAxMCwgMTQsIDI0MCwgNDIsIDEwLCAKKyAgICAxNCwgMjQwLCA0MSwgMTAsIDE0LCAyNDAsIDQwLCAxMCwgMTQsIDI0MCwgMzksIDEwLCAxNCwgMjQwLCAzOCwgMTAsIDE0LCAKKyAgICAyNDAsIDM3LCAxMCwgMTQsIDI0MCwgMzYsIDEwLCAxNCwgMjQwLCAzNSwgMTAsIDE0LCAyNDAsIDM0LCAxMCwgMTQsIDI0MCwgCisgICAgMzMsIDEwLCAxNCwgMjQwLCAzMiwgMTAsIDE0LCAyNDAsIDMxLCAxMCwgMTQsIDI0MCwgMzAsIDEwLCAxNCwgMjQwLCAyOSwgCisgICAgMTAsIDE0LCAyNDAsIDI4LCAxMCwgMTQsIDI0MCwgMjcsIDEwLCAxNCwgMjQwLCAyNiwgMTAsIDE0LCAyNDAsIDI1LCAxMCwgCisgICAgMTQsIDI0MCwgMjQsIDEwLCAxNCwgMjQwLCAyMywgMTAsIDE0LCAyNDAsIDIyLCAxMCwgMTQsIDI0MCwgMjEsIDEwLCAxNCwgCisgICAgMjQwLCAyMCwgMTAsIDE0LCAyNDAsIDE5LCAxMCwgMTQsIDI0MCwgMTgsIDEwLCAxNCwgMjQwLCAxNywgMTAsIDE0LCAyNDAsIAorICAgIDE2LCAxMCwgMTQsIDI0MCwgMTUsIDEwLCAxNCwgMjQwLCAxNCwgMTAsIDE0LCAyNDAsIDEzLCAxMCwgMTQsIDI0MCwgMTIsIAorICAgIDEwLCAxNCwgMjQwLCAxMSwgMTAsIDE0LCAyNDAsIDEwLCAxMCwgMTQsIDI0MCwgOSwgMTAsIDE0LCAyNDAsIDgsIDEwLCAxNCwgCisgICAgMjQwLCA3LCAxMCwgMTQsIDI0MCwgNiwgMTAsIDE0LCAyNDAsIDUsIDEwLCAxNCwgMjQwLCA0LCAxMCwgMTQsIDI0MCwgMywgCisgICAgMTAsIDE0LCAyNDAsIDIsIDEwLCAxNCwgMjQwLCAxLCAxMCwgMTQsIDI0MCwgMCwgMTAsIDE0LCAyMzksIDI1NSwgMTAsIDE0LCAKKyAgICAyMzksIDI1NCwgMTAsIDE0LCAyMzksIDI1MywgMTAsIDE0LCAyMzksIDI1MiwgMTAsIDE0LCAyMzksIDI1MSwgMTAsIDE0LCAKKyAgICAyMzksIDI1MCwgMTAsIDE0LCAyMzksIDI0OSwgMTAsIDE0LCAyMzksIDI0OCwgMTAsIDE0LCAyMzksIDI0NywgMTAsIDE0LCAKKyAgICAyMzksIDI0NiwgMTAsIDE0LCAyMzksIDI0NSwgMTAsIDE0LCAyMzksIDI0NCwgMTAsIDE0LCAyMzksIDI0MywgMTAsIDE0LCAKKyAgICAyMzksIDI0MiwgMTAsIDE0LCAyMzksIDI0MSwgMTAsIDE0LCAyMzksIDI0MCwgMTAsIDE0LCAyMzksIDIzOSwgMTAsIDE0LCAKKyAgICAyMzksIDIzOCwgMTAsIDE0LCAyMzksIDIzNywgMTAsIDE0LCAyMzksIDIzNiwgMTAsIDE0LCAyMzksIDIzNSwgMTAsIDE0LCAKKyAgICAyMzksIDIzNCwgMTAsIDE0LCAyMzksIDIzMywgMTAsIDE0LCAyMzksIDIzMiwgMTAsIDE0LCAyMzksIDIzMSwgMTAsIDE0LCAKKyAgICAyMzksIDIzMCwgMTAsIDE0LCAyMzksIDIyOSwgMTAsIDE0LCAyMzksIDIyOCwgMTAsIDE0LCAyMzksIDIyNywgMTAsIDE0LCAKKyAgICAyMzksIDIyNiwgMTAsIDE0LCAyMzksIDIyNSwgMTAsIDE0LCAyMzksIDIyNCwgMTAsIDE0LCAyMzksIDIyMywgMTAsIDE0LCAKKyAgICAyMzksIDIyMiwgMTAsIDE0LCAyMzksIDIyMSwgMTAsIDE0LCAyMzksIDIyMCwgMTAsIDE0LCAyMzksIDIxOSwgMTAsIDE0LCAKKyAgICAyMzksIDIxOCwgMTAsIDE0LCAyMzksIDIxNywgMTAsIDE0LCAyMzksIDIxNiwgMTAsIDE0LCAyMzksIDIxNSwgMTAsIDE0LCAKKyAgICAyMzksIDIxNCwgMTAsIDE0LCAyMzksIDIxMywgMTAsIDE0LCAyMzksIDIxMiwgMTAsIDE0LCAyMzksIDIxMSwgMTAsIDE0LCAKKyAgICAyMzksIDIxMCwgMTAsIDE0LCAyMzksIDIwOSwgMTAsIDE0LCAyMzksIDIwOCwgMTAsIDE0LCAyMzksIDIwNywgMTAsIDE0LCAKKyAgICAyMzksIDIwNiwgMTAsIDE0LCAyMzksIDIwNSwgMTAsIDE0LCAyMzksIDIwNCwgMTAsIDE0LCAyMzksIDIwMywgMTAsIDE0LCAKKyAgICAyMzksIDIwMiwgMTAsIDE0LCAyMzksIDIwMSwgMTAsIDE0LCAyMzksIDIwMCwgMTAsIDE0LCAyMzksIDE5OSwgMTAsIDE0LCAKKyAgICAyMzksIDE5OCwgMTAsIDE0LCAyMzksIDE5NywgMTAsIDE0LCAyMzksIDE5NiwgMTAsIDE0LCAyMzksIDE5NSwgMTAsIDE0LCAKKyAgICAyMzksIDE5NCwgMTAsIDE0LCAyMzksIDE5MywgMTAsIDE0LCAyMzksIDE5MiwgMTAsIDE0LCAyMzksIDE5MSwgMTAsIDE0LCAKKyAgICAyMzksIDE5MCwgMTAsIDE0LCAyMzksIDE4OSwgMTAsIDE0LCAyMzksIDE4OCwgMTAsIDE0LCAyMzksIDE4NywgMTAsIDE0LCAKKyAgICAyMzksIDE4NiwgMTAsIDE0LCAyMzksIDE4NSwgMTAsIDE0LCAyMzksIDE4NCwgMTAsIDE0LCAyMzksIDE4MywgMTAsIDE0LCAKKyAgICAyMzksIDE4MiwgMTAsIDE0LCAyMzksIDE4MSwgMTAsIDE0LCAyMzksIDE4MCwgMTAsIDE0LCAyMzksIDE3OSwgMTAsIDE0LCAKKyAgICAyMzksIDE3OCwgMTAsIDE0LCAyMzksIDE3NywgMTAsIDE0LCAyMzksIDE3NiwgMTAsIDE0LCAyMzksIDE3NSwgMTAsIDE0LCAKKyAgICAyMzksIDE3NCwgMTAsIDE0LCAyMzksIDE3MywgMTAsIDE0LCAyMzksIDE3MiwgMTAsIDE0LCAyMzksIDE3MSwgMTAsIDE0LCAKKyAgICAyMzksIDE3MCwgMTAsIDE0LCAyMzksIDE2OSwgMTAsIDE0LCAyMzksIDE2OCwgMTAsIDE0LCAyMzksIDE2NywgMTAsIDE0LCAKKyAgICAyMzksIDE2NiwgMTAsIDE0LCAyMzksIDE2NSwgMTAsIDE0LCAyMzksIDE2NCwgMTAsIDE0LCAyMzksIDE2MywgMTAsIDE0LCAKKyAgICAyMzksIDE2MiwgMTAsIDE0LCAyMzksIDE2MSwgMTAsIDE0LCAyMzksIDE2MCwgMTAsIDE0LCAyMzksIDE1OSwgMTAsIDE0LCAKKyAgICAyMzksIDE1OCwgMTAsIDE0LCAyMzksIDE1NywgMTAsIDE0LCAyMzksIDE1NiwgMTAsIDE0LCAyMzksIDE1NSwgMTAsIDE0LCAKKyAgICAyMzksIDE1NCwgMTAsIDE0LCAyMzksIDE1MywgMTAsIDE0LCAyMzksIDE1MiwgMTAsIDE0LCAyMzksIDE1MSwgMTAsIDE0LCAKKyAgICAyMzksIDE1MCwgMTAsIDE0LCAyMzksIDE0OSwgMTAsIDE0LCAyMzksIDE0OCwgMTAsIDE0LCAyMzksIDE0NywgMTAsIDE0LCAKKyAgICAyMzksIDE0NiwgMTAsIDE0LCAyMzksIDE0NSwgMTAsIDE0LCAyMzksIDE0NCwgMTAsIDE0LCAyMzksIDE0MywgMTAsIDE0LCAKKyAgICAyMzksIDE0MiwgMTAsIDE0LCAyMzksIDE0MSwgMTAsIDE0LCAyMzksIDE0MCwgMTAsIDE0LCAyMzksIDEzOSwgMTAsIDE0LCAKKyAgICAyMzksIDEzOCwgMTAsIDE0LCAyMzksIDEzNywgMTAsIDE0LCAyMzksIDEzNiwgMTAsIDE0LCAyMzksIDEzNSwgMTAsIDE0LCAKKyAgICAyMzksIDEzNCwgMTAsIDE0LCAyMzksIDEzMywgMTAsIDE0LCAyMzksIDEzMiwgMTAsIDE0LCAyMzksIDEzMSwgMTAsIDE0LCAKKyAgICAyMzksIDEzMCwgMTAsIDE0LCAyMzksIDEyOSwgMTAsIDE0LCAyMzksIDEyOCwgMTAsIDE0LCAyMzksIDEyNywgMTAsIDE0LCAKKyAgICAyMzksIDEyNiwgMTAsIDE0LCAyMzksIDEyNSwgMTAsIDE0LCAyMzksIDEyNCwgMTAsIDE0LCAyMzksIDEyMywgMTAsIDE0LCAKKyAgICAyMzksIDEyMiwgMTAsIDE0LCAyMzksIDEyMSwgMTAsIDE0LCAyMzksIDEyMCwgMTAsIDE0LCAyMzksIDExOSwgMTAsIDE0LCAKKyAgICAyMzksIDExOCwgMTAsIDE0LCAyMzksIDExNywgMTAsIDE0LCAyMzksIDExNiwgMTAsIDE0LCAyMzksIDExNSwgMTAsIDE0LCAKKyAgICAyMzksIDExNCwgMTAsIDE0LCAyMzksIDExMywgMTAsIDE0LCAyMzksIDExMiwgMTAsIDE0LCAyMzksIDExMSwgMTAsIDE0LCAKKyAgICAyMzksIDExMCwgMTAsIDE0LCAyMzksIDEwOSwgMTAsIDE0LCAyMzksIDEwOCwgMTAsIDE0LCAyMzksIDEwNywgMTAsIDE0LCAKKyAgICAyMzksIDEwNiwgMTAsIDE0LCAyMzksIDEwNSwgMTAsIDE0LCAyMzksIDEwNCwgMTAsIDE0LCAyMzksIDEwMywgMTAsIDE0LCAKKyAgICAyMzksIDEwMiwgMTAsIDE0LCAyMzksIDEwMSwgMTAsIDE0LCAyMzksIDEwMCwgMTAsIDE0LCAyMzksIDk5LCAxMCwgMTQsIAorICAgIDIzOSwgOTgsIDEwLCAxNCwgMjM5LCA5NywgMTAsIDE0LCAyMzksIDk2LCAxMCwgMTQsIDIzOSwgOTUsIDEwLCAxNCwgMjM5LCAKKyAgICA5NCwgMTAsIDE0LCAyMzksIDkzLCAxMCwgMTQsIDIzOSwgOTIsIDEwLCAxNCwgMjM5LCA5MSwgMTAsIDE0LCAyMzksIDkwLCAKKyAgICAxMCwgMTQsIDIzOSwgODksIDEwLCAxNCwgMjM5LCA4OCwgMTAsIDE0LCAyMzksIDg3LCAxMCwgMTQsIDIzOSwgODYsIDEwLCAKKyAgICAxNCwgMjM5LCA4NSwgMTAsIDE0LCAyMzksIDg0LCAxMCwgMTQsIDIzOSwgODMsIDEwLCAxNCwgMjM5LCA4MiwgMTAsIDE0LCAKKyAgICAyMzksIDgxLCAxMCwgMTQsIDIzOSwgODAsIDEwLCAxNCwgMjM5LCA3OSwgMTAsIDE0LCAyMzksIDc4LCAxMCwgMTQsIDIzOSwgCisgICAgNzcsIDEwLCAxNCwgMjM5LCA3NiwgMTAsIDE0LCAyMzksIDc1LCAxMCwgMTQsIDIzOSwgNzQsIDEwLCAxNCwgMjM5LCA3MywgCisgICAgMTAsIDE0LCAyMzksIDcyLCAxMCwgMTQsIDIzOSwgNzEsIDEwLCAxNCwgMjM5LCA3MCwgMTAsIDE0LCAyMzksIDY5LCAxMCwgCisgICAgMTQsIDIzOSwgNjgsIDEwLCAxNCwgMjM5LCA2NywgMTAsIDE0LCAyMzksIDY2LCAxMCwgMTQsIDIzOSwgNjUsIDEwLCAxNCwgCisgICAgMjM5LCA2NCwgMTAsIDE0LCAyMzksIDYzLCAxMCwgMTQsIDIzOSwgNjIsIDEwLCAxNCwgMjM5LCA2MSwgMTAsIDE0LCAyMzksIAorICAgIDYwLCAxMCwgMTQsIDIzOSwgNTksIDEwLCAxNCwgMjM5LCA1OCwgMTAsIDE0LCAyMzksIDU3LCAxMCwgMTQsIDIzOSwgNTYsIAorICAgIDEwLCAxNCwgMjM5LCA1NSwgMTAsIDE0LCAyMzksIDU0LCAxMCwgMTQsIDIzOSwgNTMsIDEwLCAxNCwgMjM5LCA1MiwgMTAsIAorICAgIDE0LCAyMzksIDUxLCAxMCwgMTQsIDIzOSwgNTAsIDEwLCAxNCwgMjM5LCA0OSwgMTAsIDE0LCAyMzksIDQ4LCAxMCwgMTQsIAorICAgIDIzOSwgNDcsIDEwLCAxNCwgMjM5LCA0NiwgMTAsIDE0LCAyMzksIDQ1LCAxMCwgMTQsIDIzOSwgNDQsIDEwLCAxNCwgMjM5LCAKKyAgICA0MywgMTAsIDE0LCAyMzksIDQyLCAxMCwgMTQsIDIzOSwgNDEsIDEwLCAxNCwgMjM5LCA0MCwgMTAsIDE0LCAyMzksIDM5LCAKKyAgICAxMCwgMTQsIDIzOSwgMzgsIDEwLCAxNCwgMjM5LCAzNywgMTAsIDE0LCAyMzksIDM2LCAxMCwgMTQsIDIzOSwgMzUsIDEwLCAKKyAgICAxNCwgMjM5LCAzNCwgMTAsIDE0LCAyMzksIDMzLCAxMCwgMTQsIDIzOSwgMzIsIDEwLCAxNCwgMjM5LCAzMSwgMTAsIDE0LCAKKyAgICAyMzksIDMwLCAxMCwgMTQsIDIzOSwgMjksIDEwLCAxNCwgMjM5LCAyOCwgMTAsIDE0LCAyMzksIDI3LCAxMCwgMTQsIDIzOSwgCisgICAgMjYsIDEwLCAxNCwgMjM5LCAyNSwgMTAsIDE0LCAyMzksIDI0LCAxMCwgMTQsIDIzOSwgMjMsIDEwLCAxNCwgMjM5LCAyMiwgCisgICAgMTAsIDE0LCAyMzksIDIxLCAxMCwgMTQsIDIzOSwgMjAsIDEwLCAxNCwgMjM5LCAxOSwgMTAsIDE0LCAyMzksIDE4LCAxMCwgCisgICAgMTQsIDIzOSwgMTcsIDEwLCAxNCwgMjM5LCAxNiwgMTAsIDE0LCAyMzksIDE1LCAxMCwgMTQsIDIzOSwgMTQsIDEwLCAxNCwgCisgICAgMjM5LCAxMywgMTAsIDE0LCAyMzksIDEyLCAxMCwgMTQsIDIzOSwgMTEsIDEwLCAxNCwgMjM5LCAxMCwgMTAsIDE0LCAyMzksIAorICAgIDksIDEwLCAxNCwgMjM5LCA4LCAxMCwgMTQsIDIzOSwgNywgMTAsIDE0LCAyMzksIDYsIDEwLCAxNCwgMjM5LCA1LCAxMCwgCisgICAgMTQsIDIzOSwgNCwgMTAsIDE0LCAyMzksIDMsIDEwLCAxNCwgMjM5LCAyLCAxMCwgMTQsIDIzOSwgMSwgMTAsIDE0LCAyMzksIAorICAgIDAsIDEwLCAxNCwgMjM4LCAyNTUsIDEwLCAxNCwgMjM4LCAyNTQsIDEwLCAxNCwgMjM4LCAyNTMsIDEwLCAxNCwgMjM4LCAKKyAgICAyNTIsIDEwLCAxNCwgMjM4LCAyNTEsIDEwLCAxNCwgMjM4LCAyNTAsIDEwLCAxNCwgMjM4LCAyNDksIDEwLCAxNCwgMjM4LCAKKyAgICAyNDgsIDEwLCAxNCwgMjM4LCAyNDcsIDEwLCAxNCwgMjM4LCAyNDYsIDEwLCAxNCwgMjM4LCAyNDUsIDEwLCAxNCwgMjM4LCAKKyAgICAyNDQsIDEwLCAxNCwgMjM4LCAyNDMsIDEwLCAxNCwgMjM4LCAyNDIsIDEwLCAxNCwgMjM4LCAyNDEsIDEwLCAxNCwgMjM4LCAKKyAgICAyNDAsIDEwLCAxNCwgMjM4LCAyMzksIDEwLCAxNCwgMjM4LCAyMzgsIDEwLCAxNCwgMjM4LCAyMzcsIDEwLCAxNCwgMjM4LCAKKyAgICAyMzYsIDEwLCAxNCwgMjM4LCAyMzUsIDEwLCAxNCwgMjM4LCAyMzQsIDEwLCAxNCwgMjM4LCAyMzMsIDEwLCAxNCwgMjM4LCAKKyAgICAyMzIsIDEwLCAxNCwgMjM4LCAyMzEsIDEwLCAxNCwgMjM4LCAyMzAsIDEwLCAxNCwgMjM4LCAyMjksIDEwLCAxNCwgMjM4LCAKKyAgICAyMjgsIDEwLCAxNCwgMjM4LCAyMjcsIDEwLCAxNCwgMjM4LCAyMjYsIDEwLCAxNCwgMjM4LCAyMjUsIDEwLCAxNCwgMjM4LCAKKyAgICAyMjQsIDEwLCAxNCwgMjM4LCAyMjMsIDEwLCAxNCwgMjM4LCAyMjIsIDEwLCAxNCwgMjM4LCAyMjEsIDEwLCAxNCwgMjM4LCAKKyAgICAyMjAsIDEwLCAxNCwgMjM4LCAyMTksIDEwLCAxNCwgMjM4LCAyMTgsIDEwLCAxNCwgMjM4LCAyMTcsIDEwLCAxNCwgMjM4LCAKKyAgICAyMTYsIDEwLCAxNCwgMjM4LCAyMTUsIDEwLCAxNCwgMjM4LCAyMTQsIDEwLCAxNCwgMjM4LCAyMTMsIDEwLCAxNCwgMjM4LCAKKyAgICAyMTIsIDEwLCAxNCwgMjM4LCAyMTEsIDEwLCAxNCwgMjM4LCAyMTAsIDEwLCAxNCwgMjM4LCAyMDksIDEwLCAxNCwgMjM4LCAKKyAgICAyMDgsIDEwLCAxNCwgMjM4LCAyMDcsIDEwLCAxNCwgMjM4LCAyMDYsIDEwLCAxNCwgMjM4LCAyMDUsIDEwLCAxNCwgMjM4LCAKKyAgICAyMDQsIDEwLCAxNCwgMjM4LCAyMDMsIDEwLCAxNCwgMjM4LCAyMDIsIDEwLCAxNCwgMjM4LCAyMDEsIDEwLCAxNCwgMjM4LCAKKyAgICAyMDAsIDEwLCAxNCwgMjM4LCAxOTksIDEwLCAxNCwgMjM4LCAxOTgsIDEwLCAxNCwgMjM4LCAxOTcsIDEwLCAxNCwgMjM4LCAKKyAgICAxOTYsIDEwLCAxNCwgMjM4LCAxOTUsIDEwLCAxNCwgMjM4LCAxOTQsIDEwLCAxNCwgMjM4LCAxOTMsIDEwLCAxNCwgMjM4LCAKKyAgICAxOTIsIDEwLCAxNCwgMjM4LCAxOTEsIDEwLCAxNCwgMjM4LCAxOTAsIDEwLCAxNCwgMjM4LCAxODksIDEwLCAxNCwgMjM4LCAKKyAgICAxODgsIDEwLCAxNCwgMjM4LCAxODcsIDEwLCAxNCwgMjM4LCAxODYsIDEwLCAxNCwgMjM4LCAxODUsIDEwLCAxNCwgMjM4LCAKKyAgICAxODQsIDEwLCAxNCwgMjM4LCAxODMsIDEwLCAxNCwgMjM4LCAxODIsIDEwLCAxNCwgMjM4LCAxODEsIDEwLCAxNCwgMjM4LCAKKyAgICAxODAsIDEwLCAxNCwgMjM4LCAxNzksIDEwLCAxNCwgMjM4LCAxNzgsIDEwLCAxNCwgMjM4LCAxNzcsIDEwLCAxNCwgMjM4LCAKKyAgICAxNzYsIDEwLCAxNCwgMjM4LCAxNzUsIDEwLCAxNCwgMjM4LCAxNzQsIDEwLCAxNCwgMjM4LCAxNzMsIDEwLCAxNCwgMjM4LCAKKyAgICAxNzIsIDEwLCAxNCwgMjM4LCAxNzEsIDEwLCAxNCwgMjM4LCAxNzAsIDEwLCAxNCwgMjM4LCAxNjksIDEwLCAxNCwgMjM4LCAKKyAgICAxNjgsIDEwLCAxNCwgMjM4LCAxNjcsIDEwLCAxNCwgMjM4LCAxNjYsIDEwLCAxNCwgMjM4LCAxNjUsIDEwLCAxNCwgMjM4LCAKKyAgICAxNjQsIDEwLCAxNCwgMjM4LCAxNjMsIDEwLCAxNCwgMjM4LCAxNjIsIDEwLCAxNCwgMjM4LCAxNjEsIDEwLCAxNCwgMjM4LCAKKyAgICAxNjAsIDEwLCAxNCwgMjM4LCAxNTksIDEwLCAxNCwgMjM4LCAxNTgsIDEwLCAxNCwgMjM4LCAxNTcsIDEwLCAxNCwgMjM4LCAKKyAgICAxNTYsIDEwLCAxNCwgMjM4LCAxNTUsIDEwLCAxNCwgMjM4LCAxNTQsIDEwLCAxNCwgMjM4LCAxNTMsIDEwLCAxNCwgMjM4LCAKKyAgICAxNTIsIDEwLCAxNCwgMjM4LCAxNTEsIDEwLCAxNCwgMjM4LCAxNTAsIDEwLCAxNCwgMjM4LCAxNDksIDEwLCAxNCwgMjM4LCAKKyAgICAxNDgsIDEwLCAxNCwgMjM4LCAxNDcsIDEwLCAxNCwgMjM4LCAxNDYsIDEwLCAxNCwgMjM4LCAxNDUsIDEwLCAxNCwgMjM4LCAKKyAgICAxNDQsIDEwLCAxNCwgMjM4LCAxNDMsIDEwLCAxNCwgMjM4LCAxNDIsIDEwLCAxNCwgMjM4LCAxNDEsIDEwLCAxNCwgMjM4LCAKKyAgICAxNDAsIDEwLCAxNCwgMjM4LCAxMzksIDEwLCAxNCwgMjM4LCAxMzgsIDEwLCAxNCwgMjM4LCAxMzcsIDEwLCAxNCwgMjM4LCAKKyAgICAxMzYsIDEwLCAxNCwgMjM4LCAxMzUsIDEwLCAxNCwgMjM4LCAxMzQsIDEwLCAxNCwgMjM4LCAxMzMsIDEwLCAxNCwgMjM4LCAKKyAgICAxMzIsIDEwLCAxNCwgMjM4LCAxMzEsIDEwLCAxNCwgMjM4LCAxMzAsIDEwLCAxNCwgMjM4LCAxMjksIDEwLCAxNCwgMjM4LCAKKyAgICAxMjgsIDEwLCAxNCwgMjM4LCAxMjcsIDEwLCAxNCwgMjM4LCAxMjYsIDEwLCAxNCwgMjM4LCAxMjUsIDEwLCAxNCwgMjM4LCAKKyAgICAxMjQsIDEwLCAxNCwgMjM4LCAxMjMsIDEwLCAxNCwgMjM4LCAxMjIsIDEwLCAxNCwgMjM4LCAxMjEsIDEwLCAxNCwgMjM4LCAKKyAgICAxMjAsIDEwLCAxNCwgMjM4LCAxMTksIDEwLCAxNCwgMjM4LCAxMTgsIDEwLCAxNCwgMjM4LCAxMTcsIDEwLCAxNCwgMjM4LCAKKyAgICAxMTYsIDEwLCAxNCwgMjM4LCAxMTUsIDEwLCAxNCwgMjM4LCAxMTQsIDEwLCAxNCwgMjM4LCAxMTMsIDEwLCAxNCwgMjM4LCAKKyAgICAxMTIsIDEwLCAxNCwgMjM4LCAxMTEsIDEwLCAxNCwgMjM4LCAxMTAsIDEwLCAxNCwgMjM4LCAxMDksIDEwLCAxNCwgMjM4LCAKKyAgICAxMDgsIDEwLCAxNCwgMjM4LCAxMDcsIDEwLCAxNCwgMjM4LCAxMDYsIDEwLCAxNCwgMjM4LCAxMDUsIDEwLCAxNCwgMjM4LCAKKyAgICAxMDQsIDEwLCAxNCwgMjM4LCAxMDMsIDEwLCAxNCwgMjM4LCAxMDIsIDEwLCAxNCwgMjM4LCAxMDEsIDEwLCAxNCwgMjM4LCAKKyAgICAxMDAsIDEwLCAxNCwgMjM4LCA5OSwgMTAsIDE0LCAyMzgsIDk4LCAxMCwgMTQsIDIzOCwgOTcsIDEwLCAxNCwgMjM4LCA5NiwgCisgICAgMTAsIDE0LCAyMzgsIDk1LCAxMCwgMTQsIDIzOCwgOTQsIDEwLCAxNCwgMjM4LCA5MywgMTAsIDE0LCAyMzgsIDkyLCAxMCwgCisgICAgMTQsIDIzOCwgOTEsIDEwLCAxNCwgMjM4LCA5MCwgMTAsIDE0LCAyMzgsIDg5LCAxMCwgMTQsIDIzOCwgODgsIDEwLCAxNCwgCisgICAgMjM4LCA4NywgMTAsIDE0LCAyMzgsIDg2LCAxMCwgMTQsIDIzOCwgODUsIDEwLCAxNCwgMjM4LCA4NCwgMTAsIDE0LCAyMzgsIAorICAgIDgzLCAxMCwgMTQsIDIzOCwgODIsIDEwLCAxNCwgMjM4LCA4MSwgMTAsIDE0LCAyMzgsIDgwLCAyMzMsIDk2LCAyMTcsIDg1LCAKKyAgICAxMjksIDIxOSwgMjAsIDEyOSwgMjQ1LCAzOSwgNzksIDEyOSwgMjI0LCAxLCA3OSwgMTI5LCA1NCwgNTAsIDEyOSwgMjQ3LCAKKyAgICAxNDAsIDUwLCAxMjksIDIyNSwgMTg1LCA1MCwgMTI5LCAyNTQsIDEzNCwgMTI5LCAyNTQsIDY1LCAxMjksIDQzLCAyMjYsIDcsIAorICAgIDEyOSwgNDQsIDIyNiwgNywgMTI5LCAyNTMsIDIyNCwgMTI5LCA5NiwgNTAsIDEyOSwgMjQ5LCAyMjcsIDEyOSwgMjQwLCAKKyAgICAxNzQsIDEyOSwgMjQzLCAyMzYsIDIxOCwgMTMxLCAxMjksIDIxOSwgNDgsIDEyOSwgMjEsIDIxMCwgODYsIDEyOSwgMjEsIAorICAgIDExMSwgMTI5LCAyMSwgMTA1LCAxMjksIDIxLCAxNTgsIDEyOSwgMjEsIDE2MSwgMTI5LCAyMSwgMTkwLCAxMjksIDIxLCAKKyAgICAxOTUsIDEyOSwgMjEsIDE5OSwgMTI5LCAyMSwgMTk2LCAxMjksIDIxLCAyMDEsIDEyOSwgMjQ5LCAyMzQsIDEyOSwgMjIwLCAKKyAgICAxNTIsIDEyOSwgMjMzLCAyMSwgNTAsIDEyOSwgMjQ1LCAxMDYsIDUwLCAxMjksIDI0MiwgMTM3LCA1MCwgMTI5LCAyMjQsIAorICAgIDE2LCA3OSwgMTI5LCAyNDksIDIyNSwgMjUzLCAyMTQsIDEyOSwgNywgNiwgMSwgNjEsIDEyOSwgNywgNiwgMSwgMjUzLCAKKyAgICAxNjYsIDEyOSwgNywgNiwgMSwgMjUxLCA3NCwgMTI5LCA3LCA2LCAxLCAyNDksIDY4LCAxMjksIDcsIDYsIDEsIDc2LCAxMjksIAorICAgIDcsIDYsIDEsIDI0NSwgMTQsIDEyOSwgNywgNiwgMSwgMjQzLCAyMDksIDEyOSwgNywgNiwgMSwgMjQyLCA2NywgMTI5LCA3LCAKKyAgICA2LCAxLCA3NCwgMTI5LCA3LCA2LCAxLCAyMzUsIDE1MCwgMTI5LCA3LCA2LCAxLCAyMzUsIDI5LCAxMjksIDcsIDYsIDEsIAorICAgIDE1NiwgMTI5LCA3LCA2LCAxLCAxOTQsIDEyOSwgNywgNiwgMSwgMjMwLCAzMCwgMTI5LCA3LCA2LCAxLCA3OCwgMTI5LCA3LCAKKyAgICA2LCAxLCAyMjYsIDEwOSwgMTI5LCA3LCA2LCAxLCAyMjQsIDk5LCAxMjksIDcsIDYsIDEsIDE1MywgMTI5LCA3LCA2LCAxLCAKKyAgICAyMjIsIDkzLCAxMjksIDcsIDYsIDEsIDIxNywgMTUzLCAxMjksIDcsIDYsIDEsIDY5LCAxMjksIDcsIDYsIDEsIDIxNCwgCisgICAgMTA1LCAxMjksIDcsIDYsIDEsIDIxMiwgOTgsIDEyOSwgNywgNiwgMSwgMjExLCAxNzgsIDEyOSwgNywgNiwgMSwgMjExLCAKKyAgICAxMTcsIDEyOSwgNywgNiwgMSwgMjEwLCAxNTksIDEyOSwgNDMsIDQyLCAxMjcsIDEyOSwgMjIzLCA1MywgMjE5LCA0OCwgCisgICAgMTI5LCA0NCwgNDIsIDEyNywgMTI5LCAyNTAsIDM5LCAyNTUsIDIzLCAxMjksIDEyMSwgMjMyLCAyMTksIDEyOSwgMjQyLCAKKyAgICAxNDQsIDI1NSwgMjMsIDEyOSwgNywgNCwgMSwgNjEsIDEyOSwgNywgNCwgMSwgMjUzLCAxNjYsIDEyOSwgNywgNCwgMSwgCisgICAgMjUxLCA3NCwgMTI5LCA3LCA0LCAxLCAyNDksIDY4LCAxMjksIDcsIDQsIDEsIDc2LCAxMjksIDcsIDQsIDEsIDI0NSwgMTQsIAorICAgIDEyOSwgNywgNCwgMSwgMjQzLCAyMDksIDEyOSwgNywgNCwgMSwgMjQyLCA2NywgMTI5LCA3LCA0LCAxLCA3NCwgMTI5LCA3LCAKKyAgICA0LCAxLCAyMzUsIDE1MCwgMTI5LCA3LCA0LCAxLCAyMzUsIDI5LCAxMjksIDcsIDQsIDEsIDE1NiwgMTI5LCA3LCA0LCAxLCAKKyAgICAxOTQsIDEyOSwgNywgNCwgMSwgMjMwLCAzMCwgMTI5LCA3LCA0LCAxLCA3OCwgMTI5LCA3LCA0LCAxLCAyMjYsIDEwOSwgCisgICAgMTI5LCA3LCA0LCAxLCAyMjQsIDk5LCAxMjksIDcsIDQsIDEsIDE1MywgMTI5LCA3LCA0LCAxLCAyMjIsIDkzLCAxMjksIDcsIAorICAgIDQsIDEsIDIxNywgMTUzLCAxMjksIDcsIDQsIDEsIDY5LCAxMjksIDcsIDQsIDEsIDIxNCwgMTA1LCAxMjksIDcsIDQsIDEsIAorICAgIDIxMiwgOTgsIDEyOSwgNywgNCwgMSwgMjExLCAxNzgsIDEyOSwgNywgNCwgMSwgMjExLCAxMTcsIDEyOSwgNywgNCwgMSwgCisgICAgMjEwLCAxNTksIDEyOSwgNDMsIDI0OSwgMTA3LCAxMjcsIDEyOSwgNjcsIDIzMiwgMjE5LCAxMjksIDQ0LCAyNDksIDEwNywgCisgICAgMTI3LCAxMjksIDE4NCwgMjUxLCAxNCwgMjE3LCA4NSwgNDUsIDIyMSwgODAsIDQ1LCAyMjEsIDY5LCA0NSwgMjIxLCA1OCwgCisgICAgNDUsIDIyMSwgNDYsIDQ1LCAyMjEsIDM1LCA0NSwgMjIxLCAyNCwgNDUsIDIyMSwgMTMsIDQ1LCAyMjEsIDIsIDQ1LCAyMjAsIAorICAgIDI0NywgNDUsIDIyMCwgMjM5LCA0NSwgMjIwLCAyMzgsIDQ1LCAyMjAsIDIzNywgNDUsIDIyMCwgMjM2LCA0NSwgMjIwLCAKKyAgICAyMzQsIDQ1LCAyMjAsIDIzMywgNDUsIDIyMCwgMjMyLCA0NSwgMjIwLCAyMzEsIDQ1LCAyMjAsIDIzMCwgNDUsIDIyMCwgCisgICAgMjI5LCA0NSwgMjIwLCAyMjgsIDQ1LCAyMjAsIDIyNywgNDUsIDIyMCwgMjI2LCA0NSwgMjIwLCAyMjUsIDQ1LCAyMjAsIAorICAgIDIyMywgNDUsIDIyMCwgMjIyLCA0NSwgMjIwLCAyMjEsIDQ1LCAyMjAsIDIyMCwgNDUsIDIyMCwgMjE5LCA0NSwgMjIwLCAKKyAgICAyMTgsIDQ1LCAyMjAsIDIxNywgNDUsIDIyMCwgMjE2LCA0NSwgMjIwLCAyMTUsIDQ1LCAyMjAsIDIxNCwgNDUsIDIyMCwgCisgICAgMjEyLCA0NSwgMjIwLCAyMTEsIDQ1LCAyMjAsIDIxMCwgNDUsIDIyMCwgMjA5LCA0NSwgMjIwLCAyMDgsIDQ1LCAyMjAsIAorICAgIDIwNywgNDUsIDIyMCwgMjA2LCA0NSwgMjIwLCAyMDUsIDQ1LCAyMjAsIDIwNCwgNDUsIDIyMCwgMjAzLCA0NSwgMjIwLCAKKyAgICAyMDEsIDQ1LCAyMjAsIDIwMCwgNDUsIDIyMCwgMTk5LCA0NSwgMjIwLCAxOTgsIDQ1LCAyMjAsIDE5NywgNDUsIDIyMCwgCisgICAgMTk2LCA0NSwgMjIwLCAxOTUsIDQ1LCAyMjAsIDE5NCwgNDUsIDIyMCwgMTkzLCA0NSwgMjIwLCAxOTIsIDQ1LCAyMjAsIAorICAgIDE5MCwgNDUsIDIyMCwgMTg5LCA0NSwgMjIwLCAxODgsIDQ1LCAyMjAsIDE4NywgNDUsIDIyMCwgMTg2LCA0NSwgMjIwLCAKKyAgICAxODUsIDQ1LCAyMjAsIDE4NCwgNDUsIDIyMCwgMTgzLCA0NSwgMjIwLCAxODIsIDQ1LCAyMjAsIDE4MSwgNDUsIDIyMCwgCisgICAgMTc5LCA0NSwgMjIwLCAxNzgsIDQ1LCAyMjAsIDE3NywgNDUsIDIyMCwgMTc2LCA0NSwgMjIwLCAxNzUsIDQ1LCAyMjAsIAorICAgIDE3NCwgNDUsIDIyMCwgMTczLCA0NSwgMjIwLCAxNzIsIDQ1LCAyMjAsIDE3MSwgNDUsIDIyMCwgMTcwLCA0NSwgMjIwLCAKKyAgICAxNjgsIDQ1LCAyMjAsIDE2NywgNDUsIDIyMCwgMTY2LCA0NSwgMjIwLCAxNjUsIDQ1LCAyMjAsIDE2NCwgNDUsIDIyMCwgCisgICAgMTYzLCA0NSwgMjIwLCAxNjIsIDQ1LCAyMjAsIDE2MSwgNDUsIDIyMCwgMTYwLCA0NSwgMjIwLCAxNTksIDQ1LCAyMjEsIAorICAgIDE1NiwgNDUsIDIyMSwgMTU1LCA0NSwgMjIxLCAxNTQsIDQ1LCAyMjEsIDE1MywgNDUsIDIyMSwgMTUyLCA0NSwgMjIxLCAKKyAgICAxNTEsIDQ1LCAyMjEsIDE1MCwgNDUsIDIyMSwgMTQ5LCA0NSwgMjIxLCAxNDgsIDQ1LCAyMjEsIDE0NywgNDUsIDIyMSwgCisgICAgMTQ1LCA0NSwgMjIxLCAxNDQsIDQ1LCAyMjEsIDE0MywgNDUsIDIyMSwgMTQyLCA0NSwgMjIxLCAxNDEsIDQ1LCAyMjEsIAorICAgIDE0MCwgNDUsIDIyMSwgMTM5LCA0NSwgMjIxLCAxMzgsIDQ1LCAyMjEsIDEzNywgNDUsIDIyMSwgMTM2LCA0NSwgMjIxLCAKKyAgICAxMzQsIDQ1LCAyMjEsIDEzMywgNDUsIDIyMSwgMTMyLCA0NSwgMjIxLCAxMzEsIDQ1LCAyMjEsIDEzMCwgNDUsIDIyMSwgCisgICAgMTI5LCA0NSwgMjIxLCAxMjgsIDQ1LCAyMjEsIDEyNywgNDUsIDIyMSwgMTI2LCA0NSwgMjIxLCAxMjUsIDQ1LCAyMjEsIAorICAgIDEyMywgNDUsIDIyMSwgMTIyLCA0NSwgMjIxLCAxMjEsIDQ1LCAyMjEsIDEyMCwgNDUsIDIyMSwgMTE5LCA0NSwgMjIxLCAKKyAgICAxMTgsIDQ1LCAyMjEsIDExNywgNDUsIDIyMSwgMTE2LCA0NSwgMjIxLCAxMTUsIDQ1LCAyMjEsIDExNCwgNDUsIDIyMSwgCisgICAgMTEyLCA0NSwgMjIxLCAxMTEsIDQ1LCAyMjEsIDExMCwgNDUsIDIyMSwgMTA5LCA0NSwgMjIxLCAxMDgsIDQ1LCAyMjEsIAorICAgIDEwNywgNDUsIDIyMSwgMTA2LCA0NSwgMjIxLCAxMDUsIDQ1LCAyMjEsIDEwNCwgNDUsIDIyMSwgMTAzLCA0NSwgMjIxLCAKKyAgICAxMDEsIDQ1LCAyMjEsIDEwMCwgNDUsIDIyMSwgOTksIDQ1LCAyMjEsIDk4LCA0NSwgMjIxLCA5NywgNDUsIDIyMSwgOTYsIAorICAgIDQ1LCAyMjEsIDk1LCA0NSwgMjIxLCA5NCwgNDUsIDIyMSwgOTMsIDQ1LCAyMjEsIDkyLCA0NSwgMjIxLCA5MCwgNDUsIDIyMSwgCisgICAgODksIDQ1LCAyMjEsIDg4LCA0NSwgMjIxLCA4NywgNDUsIDIyMSwgODYsIDQ1LCAyMjEsIDg1LCA0NSwgMjIxLCA4NCwgNDUsIAorICAgIDIyMSwgODMsIDQ1LCAyMjEsIDgyLCA0NSwgMjIxLCA4MSwgNDUsIDIyMSwgNzksIDQ1LCAyMjEsIDc4LCA0NSwgMjIxLCA3NywgCisgICAgNDUsIDIyMSwgNzYsIDQ1LCAyMjEsIDc1LCA0NSwgMjIxLCA3NCwgNDUsIDIyMSwgNzMsIDQ1LCAyMjEsIDcyLCA0NSwgMjIxLCAKKyAgICA3MSwgNDUsIDIyMSwgNzAsIDQ1LCAyMjEsIDY4LCA0NSwgMjIxLCA2NywgNDUsIDIyMSwgNjYsIDQ1LCAyMjEsIDY1LCA0NSwgCisgICAgMjIxLCA2NCwgNDUsIDIyMSwgNjMsIDQ1LCAyMjEsIDYyLCA0NSwgMjIxLCA2MSwgNDUsIDIyMSwgNjAsIDQ1LCAyMjEsIDU5LCAKKyAgICA0NSwgMjIxLCA1NywgNDUsIDIyMSwgNTYsIDQ1LCAyMjEsIDU1LCA0NSwgMjIxLCA1NCwgNDUsIDIyMSwgNTMsIDQ1LCAyMjEsIAorICAgIDUyLCA0NSwgMjIxLCA1MSwgNDUsIDIyMSwgNTAsIDQ1LCAyMjEsIDQ5LCA0NSwgMjIxLCA0OCwgNDUsIDIyMSwgNDUsIDQ1LCAKKyAgICAyMjEsIDQ0LCA0NSwgMjIxLCA0MywgNDUsIDIyMSwgNDIsIDQ1LCAyMjEsIDQxLCA0NSwgMjIxLCA0MCwgNDUsIDIyMSwgMzksIAorICAgIDQ1LCAyMjEsIDM4LCA0NSwgMjIxLCAzNywgNDUsIDIyMSwgMzYsIDQ1LCAyMjEsIDM0LCA0NSwgMjIxLCAzMywgNDUsIDIyMSwgCisgICAgMzIsIDQ1LCAyMjEsIDMxLCA0NSwgMjIxLCAzMCwgNDUsIDIyMSwgMjksIDQ1LCAyMjEsIDI4LCA0NSwgMjIxLCAyNywgNDUsIAorICAgIDIyMSwgMjYsIDQ1LCAyMjEsIDI1LCA0NSwgMjIxLCAyMywgNDUsIDIyMSwgMjIsIDQ1LCAyMjEsIDIxLCA0NSwgMjIxLCAyMCwgCisgICAgNDUsIDIyMSwgMTksIDQ1LCAyMjEsIDE4LCA0NSwgMjIxLCAxNywgNDUsIDIyMSwgMTYsIDQ1LCAyMjEsIDE1LCA0NSwgMjIxLCAKKyAgICAxNCwgNDUsIDIyMSwgMTIsIDQ1LCAyMjEsIDExLCA0NSwgMjIxLCAxMCwgNDUsIDIyMSwgOSwgNDUsIDIyMSwgOCwgNDUsIAorICAgIDIyMSwgNywgNDUsIDIyMSwgNiwgNDUsIDIyMSwgNSwgNDUsIDIyMSwgNCwgNDUsIDIyMSwgMywgNDUsIDIyMSwgMSwgNDUsIAorICAgIDIyMSwgMCwgNDUsIDIyMCwgMjU1LCA0NSwgMjIwLCAyNTQsIDQ1LCAyMjAsIDI1MywgNDUsIDIyMCwgMjUyLCA0NSwgMjIwLCAKKyAgICAyNTEsIDQ1LCAyMjAsIDI1MCwgNDUsIDIyMCwgMjQ5LCA0NSwgMjIwLCAyNDgsIDQ1LCAyMjAsIDI0NiwgNDUsIDIyMCwgCisgICAgMjQ1LCA0NSwgMjIwLCAyNDQsIDQ1LCAyMjAsIDI0MywgNDUsIDIyMCwgMjQyLCA0NSwgMjIwLCAyNDEsIDQ1LCAyMjAsIAorICAgIDI0MCwgMjI3LCAyMDYsIDIyNywgMjA4LCAyMTgsIDE1NCwgNjQsIDI0MSwgMjQwLCAyMTksIDUwLCAyMTgsIDE1NCwgNjQsIAorICAgIDIxNiwgMjEzLCAyMTgsIDg2LCAyNDUsIDE1MSwgNjQsIDIxNiwgMjEzLCAyNDUsIDY0LCAyNDUsIDE1MSwgNjQsIDIxNSwgCisgICAgMjQ0LCAyNDUsIDExNywgMjQ1LCAxNDAsIDI0NSwgMTQxLCAyNTUsIDE2LCAyNTUsIDE3LCAyNTQsIDE3NiwgMjUyLCA1NSwgCisgICAgMjUyLCAxODcsIDI1MSwgMTM5LCAxMzUsIDIxNywgOTAsIDIwMywgMjE3LCA5MCwgMjQwLCAyMzQsIDIxNywgOTQsIDIzMiwgCisgICAgMjIwLCAyNDQsIDE1MywgMTY2LCAyMzIsIDIxOSwgMjQ1LCAxNTEsIDY0LCAyMzIsIDIxOSwgMjMzLCA2LCAyMjgsIDE0MCwgCisgICAgMjQ1LCAxMjAsIDIzMiwgMjIwLCAyMTcsIDkwLCA2NywgMjE3LCA5MCwgMjEyLCAxMTgsIDI0NCwgMjgsIDI0NCwgMTUzLCAKKyAgICAyNDQsIDEzMywgMjUwLCAyMzgsIDIyMywgNTYsIDI0OSwgMTUxLCAyMjAsIDMwLCAyMjYsIDEzNCwgMjMyLCAxNTYsIDExMSwgCisgICAgMjE5LCA2MCwgMjIwLCAzMCwgMjM2LCA2LCAyMzIsIDE1NiwgMjEwLCA4NiwgMjE5LCAxOTMsIDI0OCwgMTU5LCAyMzIsIAorICAgIDIxMCwgMjQ1LCA4NSwgMjQ3LCAxNjMsIDI0OCwgMzksIDI0OSwgMTg2LCAxMTEsIDI0OCwgMTQ5LCAyNDgsIDM5LCAyNDksIAorICAgIDE4NiwgMTA1LCAyNDgsIDE0OCwgMjQ4LCAzOSwgMjQ5LCAxODYsIDE1OCwgMjQ4LCAxNDcsIDI0OCwgMzksIDI0OSwgMTg2LCAKKyAgICAxNjEsIDI0OCwgMTQ2LCAxNTIsIDI1NSwgMTYsIDIyOSwgMjE0LCAyMTcsIDE3OCwgMjM2LCA2OSwgMjE3LCAxODEsIDI0NSwgCisgICAgMTUxLCA2NCwgMjE1LCAyNDUsIDI1MSwgMjIxLCAyNDUsIDcwLCAyNTEsIDEzLCAyNTEsIDE1LCAyNDUsIDE1MSwgNjQsIAorICAgIDIzMSwgODYsIDI0NSwgMTE4LCAyMTgsIDYyLCAyMTgsIDc5LCAyNDUsIDg1LCAyNDUsIDg2LCAyMzUsIDIzOSwgMjIwLCAKKyAgICAxNDAsIDE2MSwgMjQ0LCAxMTUsIDIyMCwgMTM5LCAyNDMsIDI0NSwgMjM1LCAyMzksIDIyMCwgMTQwLCAxNTgsIDI0MiwgCisgICAgMTI4LCAyMjAsIDEzOSwgMjQyLCAxMjUsIDIzNSwgMjM5LCAyMjAsIDE0MCwgMTA1LCAyMjMsIDEyNCwgMjIwLCAxMzksIAorICAgIDIyMiwgMTQ3LCAyMzUsIDIzOSwgMjIwLCAxNDAsIDExMSwgMjE0LCAxNzQsIDIyMCwgMTM5LCAyMTQsIDEzMywgMjE5LCAyMywgCisgICAgMjQ4LCA3MSwgMjQ4LCA3MywgMjI2LCA4MiwgMjUwLCAxNTAsIDIyNiwgODQsIDEyNSwgMjI2LCAyNDQsIDIyNCwgMTk2LCAKKyAgICAyNDEsIDU0LCAyNTEsIDE1OCwgMjI1LCAxNzYsIDI0MSwgMjEwLCAyNTEsIDE2OSwgMjI4LCA4MCwgMjUxLCAxNTgsIDI0MSwgCisgICAgMjEwLCAyMjksIDE4MCwgMjM1LCAyNDksIDIzNSwgMjUxLCAyMjksIDg3LCAyMzIsIDIxOSwgMjI5LCAxMDQsIDIxOCwgMTU0LCAKKyAgICA2NCwgMjIxLCAxNjAsIDI1NCwgMjYsIDIxOCwgMjI1LCAyNDUsIDE1MSwgNjQsIDIyMSwgMTYwLCAyNTQsIDI2LCAyNDUsIAorICAgIDg4LCAxMzUsIDIxNywgOTEsIDIyMCwgMTI5LCAyMDMsIDIxNywgOTEsIDIyMCwgMTI5LCAyNDAsIDIzMSwgMTM1LCAyMTcsIAorICAgIDkxLCAyLCAyMzUsIDQxLCAyMDMsIDIxNywgOTEsIDIsIDIzNSwgNDEsIDI0MCwgMjMyLCAyMzIsIDIyMCwgMjE3LCA5MSwgCisgICAgMjIwLCAxMjksIDY3LCAyMTcsIDkxLCAyMjAsIDEyOSwgMjEyLCAxMTcsIDIyNiwgMSwgMjMyLCAyMjAsIDI0NCwgMjIsIAorICAgIDIyNiwgMSwgMjMyLCAyMjAsIDI0NiwgMTE0LCAyMjUsIDM1LCAyMjYsIDEsIDIzMiwgMjIwLCAyNTIsIDE4NiwgMjI2LCAxLCAKKyAgICAyMzIsIDIyMCwgMjE0LCAxNjMsIDIyNSwgMzEsIDIyMywgNTMsIDIzMiwgMjIwLCAyNDQsIDE1MywgMjIzLCA1MywgMjM1LCAKKyAgICAyNDksIDIyMywgMzgsIDIxOSwgMTU3LCAyMjAsIDMwLCAxMDUsIDIxOSwgMTU0LCAyMTgsIDIyNywgMjE5LCAxNTcsIDIyMCwgCisgICAgMzAsIDE1OCwgMjE5LCAxNTMsIDIxOCwgMjI2LCAyNDgsIDM5LCAyNDksIDE4NiwgMjE4LCAxMDcsIDI0OCwgMTQ1LCAyMjQsIAorICAgIDE4NiwgMjE0LCAxMzIsIDExMSwgMjI0LCAxODYsIDIxNCwgMTMwLCAyMjQsIDE1MiwgMjI0LCAxODYsIDIxNCwgMTMyLCAKKyAgICAxMDUsIDIyNCwgMTg2LCAyMTQsIDEyOSwgMjI0LCAxNTEsIDIyMCwgMTMwLCAyMTUsIDI0MywgMjE4LCAxNTMsIDIxOCwgOTAsIAorICAgIDI1MSwgMTQsIDI1MCwgMTUwLCAyNTAsIDIxNywgMjMxLCA0OCwgMjEyLCA1OSwgMjMwLCA0OCwgMjE4LCAxNTQsIDY0LCAKKyAgICAyNDIsIDExNCwgMjU0LCAyNiwgMjE4LCAxNTQsIDY0LCAyMjQsIDE2OSwgMjU0LCAyNiwgMjE5LCAyMiwgMjQ1LCAxNTEsIAorICAgIDY0LCAyNDIsIDExNCwgMjU0LCAyNiwgMjQ1LCAxNTEsIDY0LCAyMjQsIDE2OSwgMjU0LCAyNiwgMjQ1LCAxMTUsIDIxOCwgCisgICAgMTU0LCA2NCwgMjE4LCAxMDcsIDIxOSwgMzcsIDIxOSwgMTU3LCAyNDIsIDE0OCwgMTM1LCAyMzUsIDIwMiwgMjIwLCAxMDksIAorICAgIDIxOSwgMTU3LCAxMzUsIDIzNSwgMjAyLCAyMjEsIDE5NiwgMjQ5LCAxODYsIDIyMCwgMTM3LCAyMzUsIDIwMiwgMjQ5LCAKKyAgICAxMjEsIDIxOCwgMTA4LCAyMTYsIDIzNywgMjE4LCAxNzAsIDIyNiwgMTczLCAyMTcsIDE2OCwgMjQ5LCAyMjYsIDIyNiwgCisgICAgMTQ2LCAyMjQsIDE4NywgMjMxLCA0NywgMjI1LCAyMiwgMjU0LCA2MSwgMjI0LCAxODEsIDI0OSwgMjI2LCAyNTQsIDc3LCAKKyAgICAyMjksIDE2OCwgMjE5LCAyMDIsIDcsIDYsIDEsIDI0MywgMCwgNywgNCwgMSwgMjQzLCAwLCAyNTAsIDE2NywgMjU0LCAxNTcsIAorICAgIDE4MywgMjE4LCA2OCwgMjQ5LCAyMzUsIDIxOSwgMTA4LCAyMzMsIDUyLCAxNjUsIDEsIDIzMiwgMTgxLCAyMDksIDIwOSwgMSwgCisgICAgMjQ0LCA1MiwgMjQ0LCA0NCwgMjA5LCAyMDksIDEsIDI0NCwgNTIsIDI0NCwgMTY1LCAyMDksIDIwOSwgMSwgMjIyLCAyMTMsIAorICAgIDIwOSwgMjA5LCAxLCAyMzIsIDE2MiwgNjMsIDE2NCwgMjUxLCAyMzEsIDIyMCwgNSwgMjQyLCAyMjIsIDIzMCwgMjUzLCAKKyAgICAyMjMsIDQ0LCAyNDMsIDIyMywgMjQzLCAyMjIsIDI0MywgMjIxLCAyMzAsIDUwLCAyMDksIDI1MSwgMjA5LCAyNTIsIDIwOSwgCisgICAgMjU0LCAyMzIsIDEwNywgMjIyLCAyMjEsIDIzMiwgMTA5LCAyMjIsIDIyMywgMjI1LCAyMjcsIDIzMiwgMTA2LCAyMjIsIAorICAgIDIyMCwgMjI4LCAxMTEsIDIzMCwgMTcwLCAyMTEsIDIyOSwgMjMyLCAxMDgsIDIyMiwgMjIyLCAyNDMsIDI0NCwgMjI1LCAKKyAgICAyMjYsIDIxMiwgMTUsIDI0NSwgMTcwLCAyNDMsIDIzMywgMjMwLCAyMzQsIDIyNiwgMjAxLCAyMTQsIDEzNCwgODcsIDIzMCwgCisgICAgMjM0LCAyNDgsIDE2NSwgODcsIDgsIDMsIDIzNSwgMTY0LCA3OSwgMjI0LCAxOTcsIDI0NCwgMjgsIDMxLCA2NywgNDQsIDcxLCAKKyAgICAyMzMsIDI2LCAxMjcsIDIxMywgMTE4LCAyMTMsIDcsIDIxMiwgMTk1LCAyMTIsIDE4NCwgMjEyLCAxNzMsIDIxMiwgMTYyLCAKKyAgICAyMTIsIDE1MSwgMjEyLCAxNDAsIDIxMiwgMTI5LCAyMTMsIDExNywgMjEzLCAxMDYsIDIxMywgOTUsIDIxMywgODQsIDIxMywgCisgICAgNzMsIDIxMywgNjIsIDIxMywgNTEsIDI1MSwgNzksIDIyNiwgMTU5LCA3OSwgMjUxLCAyMDQsIDIwOSwgMjUzLCAxNSwgNSwgCisgICAgMjI3LCAyMTUsIDIxNiwgMjQwLCAxNSwgNSwgMjI3LCAyMTUsIDExNSwgMjI3LCAyMTUsIDI1MSwgMTA3LCAxMTUsIDI1MSwgCisgICAgMTA2LCA0OSwgMjgsIDE2LCAyNDMsIDI0MywgMjE5LCAxMDQsIDI1MCwgODEsIDIxNCwgOSwgMjEzLCA0MCwgMjEzLCAyOSwgCisgICAgMjEzLCAxOCwgMjEzLCA2LCAyMTIsIDI1MSwgMjEyLCAyNDAsIDIxMiwgMjI5LCAyMTIsIDIxOCwgMjEyLCAyMDcsIDIxMiwgCisgICAgMTk5LCAyMTIsIDE5OCwgMjEyLCAxOTcsIDIxMiwgMTk2LCAyMTIsIDE5NCwgMjEyLCAxOTMsIDIxMiwgMTkyLCAyMTIsIAorICAgIDE5MSwgMjEyLCAxOTAsIDIxMiwgMTg5LCAyMTIsIDE4OCwgMjEyLCAxODcsIDIxMiwgMTg2LCAyMTIsIDE4NSwgMjEyLCAKKyAgICAxODMsIDIxMiwgMTgyLCAyMTIsIDE4MSwgMjEyLCAxODAsIDIxMiwgMTc5LCAyMTIsIDE3OCwgMjEyLCAxNzcsIDIxMiwgCisgICAgMTc2LCAyMTIsIDE3NSwgMjEyLCAxNzQsIDIxMiwgMTcyLCAyMTIsIDE3MSwgMjEyLCAxNzAsIDIxMiwgMTY5LCAyMTIsIAorICAgIDE2OCwgMjEyLCAxNjcsIDIxMiwgMTY2LCAyMTIsIDE2NSwgMjEyLCAxNjQsIDIxMiwgMTYzLCAyMTIsIDE2MSwgMjEyLCAKKyAgICAxNjAsIDIxMiwgMTU5LCAyMTIsIDE1OCwgMjEyLCAxNTcsIDIxMiwgMTU2LCAyMTIsIDE1NSwgMjEyLCAxNTQsIDIxMiwgCisgICAgMTUzLCAyMTIsIDE1MiwgMjEyLCAxNTAsIDIxMiwgMTQ5LCAyMTIsIDE0OCwgMjEyLCAxNDcsIDIxMiwgMTQ2LCAyMTIsIAorICAgIDE0NSwgMjEyLCAxNDQsIDIxMiwgMTQzLCAyMTIsIDE0MiwgMjEyLCAxNDEsIDIxMiwgMTM5LCAyMTIsIDEzOCwgMjEyLCAKKyAgICAxMzcsIDIxMiwgMTM2LCAyMTIsIDEzNSwgMjEyLCAxMzQsIDIxMiwgMTMzLCAyMTIsIDEzMiwgMjEyLCAxMzEsIDIxMiwgCisgICAgMTMwLCAyMTIsIDEyOCwgMjEyLCAxMjcsIDIxMiwgMTI2LCAyMTIsIDEyNSwgMjEyLCAxMjQsIDIxMiwgMTIzLCAyMTIsIAorICAgIDEyMiwgMjEyLCAxMjEsIDIxMiwgMTIwLCAyMTIsIDExOSwgMjEzLCAxMTYsIDIxMywgMTE1LCAyMTMsIDExNCwgMjEzLCAKKyAgICAxMTMsIDIxMywgMTEyLCAyMTMsIDExMSwgMjEzLCAxMTAsIDIxMywgMTA5LCAyMTMsIDEwOCwgMjEzLCAxMDcsIDIxMywgCisgICAgMTA1LCAyMTMsIDEwNCwgMjEzLCAxMDMsIDIxMywgMTAyLCAyMTMsIDEwMSwgMjEzLCAxMDAsIDIxMywgOTksIDIxMywgOTgsIAorICAgIDIxMywgOTcsIDIxMywgOTYsIDIxMywgOTQsIDIxMywgOTMsIDIxMywgOTIsIDIxMywgOTEsIDIxMywgOTAsIDIxMywgODksIAorICAgIDIxMywgODgsIDIxMywgODcsIDIxMywgODYsIDIxMywgODUsIDIxMywgODMsIDIxMywgODIsIDIxMywgODEsIDIxMywgODAsIAorICAgIDIxMywgNzksIDIxMywgNzgsIDIxMywgNzcsIDIxMywgNzYsIDIxMywgNzUsIDIxMywgNzQsIDIxMywgNzIsIDIxMywgNzEsIAorICAgIDIxMywgNzAsIDIxMywgNjksIDIxMywgNjgsIDIxMywgNjcsIDIxMywgNjYsIDIxMywgNjUsIDIxMywgNjQsIDIxMywgNjMsIAorICAgIDIxMywgNjEsIDIxMywgNjAsIDIxMywgNTksIDIxMywgNTgsIDIxMywgNTcsIDIxMywgNTYsIDIxMywgNTUsIDIxMywgNTQsIAorICAgIDIxMywgNTMsIDIxMywgNTIsIDIxMywgNTAsIDIxMywgNDksIDIxMywgNDgsIDIxMywgNDcsIDIxMywgNDYsIDIxMywgNDUsIAorICAgIDIxMywgNDQsIDIxMywgNDMsIDIxMywgNDIsIDIxMywgNDEsIDIxMywgMzksIDIxMywgMzgsIDIxMywgMzcsIDIxMywgMzYsIAorICAgIDIxMywgMzUsIDIxMywgMzQsIDIxMywgMzMsIDIxMywgMzIsIDIxMywgMzEsIDIxMywgMzAsIDIxMywgMjgsIDIxMywgMjcsIAorICAgIDIxMywgMjYsIDIxMywgMjUsIDIxMywgMjQsIDIxMywgMjMsIDIxMywgMjIsIDIxMywgMjEsIDIxMywgMjAsIDIxMywgMTksIAorICAgIDIxMywgMTcsIDIxMywgMTYsIDIxMywgMTUsIDIxMywgMTQsIDIxMywgMTMsIDIxMywgMTIsIDIxMywgMTEsIDIxMywgMTAsIAorICAgIDIxMywgOSwgMjEzLCA4LCAyMTMsIDUsIDIxMywgNCwgMjEzLCAzLCAyMTMsIDIsIDIxMywgMSwgMjEzLCAwLCAyMTIsIDI1NSwgCisgICAgMjEyLCAyNTQsIDIxMiwgMjUzLCAyMTIsIDI1MiwgMjEyLCAyNTAsIDIxMiwgMjQ5LCAyMTIsIDI0OCwgMjEyLCAyNDcsIAorICAgIDIxMiwgMjQ2LCAyMTIsIDI0NSwgMjEyLCAyNDQsIDIxMiwgMjQzLCAyMTIsIDI0MiwgMjEyLCAyNDEsIDIxMiwgMjM5LCAKKyAgICAyMTIsIDIzOCwgMjEyLCAyMzcsIDIxMiwgMjM2LCAyMTIsIDIzNSwgMjEyLCAyMzQsIDIxMiwgMjMzLCAyMTIsIDIzMiwgCisgICAgMjEyLCAyMzEsIDIxMiwgMjMwLCAyMTIsIDIyOCwgMjEyLCAyMjcsIDIxMiwgMjI2LCAyMTIsIDIyNSwgMjEyLCAyMjQsIAorICAgIDIxMiwgMjIzLCAyMTIsIDIyMiwgMjEyLCAyMjEsIDIxMiwgMjIwLCAyMTIsIDIxOSwgMjEyLCAyMTcsIDIxMiwgMjE2LCAKKyAgICAyMTIsIDIxNSwgMjEyLCAyMTQsIDIxMiwgMjEzLCAyMTIsIDIxMiwgMjEyLCAyMTEsIDIxMiwgMjEwLCAyMTIsIDIwOSwgCisgICAgMjEyLCAyMDgsIDIxMiwgMjA2LCAyMTIsIDIwNSwgMjEyLCAyMDQsIDIxMiwgMjAzLCAyMTIsIDIwMiwgMjEyLCAyMDEsIAorICAgIDIxMiwgMjAwLCA3LCA2LCAxLCAxMTYsIDIsIDIzMSwgMjM4LCAyMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDExNiwgMiwgMjMxLCAKKyAgICAyMzgsIDIyLCAyNDIsIDE0MywgNywgNiwgMSwgMTYwLCAyLCA2NywgMjMyLCAyMjAsIDUxLCA3LCA0LCAxLCAxNjAsIDIsIAorICAgIDY3LCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMjQyLCAxNDMsIAorICAgIDcsIDQsIDEsIDE2MCwgMiwgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMjQyLCAxNDMsIDcsIDYsIDEsIDE2MCwgMiwgCisgICAgNjcsIDIzMiwgMjIwLCAyNTIsIDUxLCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgCisgICAgMjIsIDE0MiwgNywgNiwgMSwgMTYwLCAyLCAyNTAsIDM5LCAyMiwgMjMxLCAyMzcsIDcsIDQsIDEsIDE2MCwgMiwgMjUwLCAKKyAgICAzOSwgMjIsIDIzMSwgMjM3LCA3LCA2LCAxLCAxNjAsIDIsIDI1MCwgMzksIDIyLCAyNTAsIDI0MiwgNywgNCwgMSwgMTYwLCAKKyAgICAyLCAyNTAsIDM5LCAyMiwgMjUwLCAyNDIsIDcsIDYsIDEsIDI0MCwgMTYxLCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCAKKyAgICA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjMxLCAyMzgsIDIyLCAyNDIsIDE0MywgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDU5LCAKKyAgICA3MiwgMjIsIDE0MiwgNywgNCwgMSwgMjI5LCA4NSwgMiwgMjE2LCA5MCwgNDgsIDcsIDYsIDEsIDE0NCwgMiwgNjcsIDIzMiwgCisgICAgMjIwLCA1MSwgNywgNCwgMSwgMTQ0LCAyLCA2NywgMjMyLCAyMjAsIDUxLCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIAorICAgIDIyMCwgMjUyLCA1MSwgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIAorICAgIDI0MiwgMTQzLCA3LCA2LCAxLCAxNDQsIDIsIDY3LCAyMzIsIDIyMCwgMjUyLCA1MSwgMjIsIDE0MiwgNywgNCwgMSwgMTQ0LCAKKyAgICAyLCA2NywgMjMyLCAyMjAsIDI1MiwgNTEsIDIyLCAxNDIsIDcsIDYsIDEsIDIyMiwgOTQsIDIsIDY3LCAyMzIsIDIyMCwgNTEsIAorICAgIDcsIDQsIDEsIDIyMiwgOTQsIDIsIDY3LCAyMzIsIDIyMCwgNTEsIDcsIDYsIDEsIDEwNCwgMiwgMjMxLCAyMzgsIDIyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMTA0LCAyLCAyMzEsIDIzOCwgMjIsIDI0MiwgMTQzLCA3LCA2LCAxLCAxMTYsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgMTQyLCA3LCA0LCAxLCAxMTYsIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMTYsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgMTg0LCA3LCA0LCAxLCAxMTYsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgMTQyLCA3LCA0LCAxLCAxNjAsIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA2LCAxLCAxNjAsIDIsIDIyNiwgCisgICAgMjI5LCAyMiwgMTg0LCA3LCA0LCAxLCAxNjAsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA2LCAxLCAxNjAsIDIsIDU5LCAKKyAgICA3MiwgMjIsIDE0MiwgNywgNCwgMSwgMTYwLCAyLCA1OSwgNzIsIDIyLCAxNDIsIDcsIDYsIDEsIDE2MCwgMiwgNTksIDcyLCAKKyAgICAyMiwgMTg0LCA3LCA0LCAxLCAxNjAsIDIsIDU5LCA3MiwgMjIsIDE4NCwgNywgNCwgMSwgMjQwLCAxNjEsIDIsIDU5LCA3MiwgCisgICAgMjIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgNTksIDcyLCAyMiwgMTg0LCA3LCA2LCAxLCAyNDAsIDE2MSwgCisgICAgMiwgMjI2LCAyMjksIDIyLCAxNDIsIDcsIDQsIDEsIDI0MCwgMTYxLCAyLCAyMjYsIDIyOSwgMjIsIDU5LCA3MiwgMjIsIAorICAgIDE0MiwgNywgNiwgMSwgMjQwLCAxNjEsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA0LCAxLCAyNDAsIDE2MSwgMiwgMjI2LCAKKyAgICAyMjksIDIyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDYsIDEsIDIzNSwgMTUxLCAyLCAxODQsIDcsIDQsIDEsIDIzNSwgMTUxLCAKKyAgICAyLCA1OSwgNzIsIDIyLCAxODQsIDcsIDYsIDEsIDIzMywgMTU1LCAyLCAxODQsIDcsIDQsIDEsIDIzMywgMTU1LCAyLCAxODQsIAorICAgIDcsIDYsIDEsIDIzMiwgNTUsIDIsIDE4NCwgNywgNCwgMSwgMjMyLCA1NSwgMiwgMTg0LCA3LCA2LCAxLCAyMjMsIDIyNywgMiwgCisgICAgMTg0LCA3LCA0LCAxLCAyMjMsIDIyNywgMiwgMTg0LCA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIyNiwgMjI5LCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIyNiwgMjI5LCAyMiwgMTg0LCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMTQyLCA3LCA2LCAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMTg0LCA3LCA0LCAKKyAgICAxLCAxMDQsIDIsIDIzMSwgMjM4LCAyMiwgMTg0LCA3LCA0LCAxLCAyNTQsIDI1MywgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIAorICAgIDIwNCwgMTQ0LCAyLCAyNDIsIDE0MywgNywgNCwgMSwgMjA0LCAxNDQsIDIsIDE0MiwgNywgNCwgMSwgMjE1LCA5NCwgMjE0LCAKKyAgICAxMDYsIDIsIDI0MiwgMTQzLCA3LCA0LCAxLCAyMTUsIDk0LCAyMTQsIDEwNiwgMiwgMTQyLCA3LCA0LCAxLCAyMjEsIDE5OCwgCisgICAgMiwgMjQyLCAxNDMsIDcsIDQsIDEsIDIyMSwgMTk4LCAyLCAxNDIsIDcsIDQsIDEsIDI0MSwgNTgsIDIyMSwgMTk4LCAyLCAKKyAgICAyNDIsIDE0MywgNywgNCwgMSwgMjQxLCA1OCwgMjIxLCAxOTgsIDIsIDE0MiwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIAorICAgIDcyLCAyLCAyNTQsIDE3OSwgOSwgMjIwLCAxMzcsIDc3LCAyLCAxODIsIDcyLCAyLCAyMTIsIDMwLCA5LCAyMjAsIDEzNywgCisgICAgNzcsIDIsIDE4MiwgNzIsIDIsIDEwOSwgMjMxLCAxOTcsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgMjI2LCAKKyAgICAyMzgsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgNjksIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgCisgICAgMjEwLCAyMTIsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCA3MiwgMiwgNzYsIDksIDIyMCwgMTM3LCA3NywgMiwgMTgyLCAKKyAgICA3MiwgMiwgMjU0LCAyNTIsIDksIDIyMCwgMTM3LCAyMjgsIDY4LCAyLCAyMzQsIDE4MCwgMTQ2LCAxLCAyMzQsIDExNSwgMzYsIAorICAgIDExNywgMjM1LCAyOSwgMzYsIDExNywgMjI5LCA4NCwgMzYsIDExNywgMjUxLCA3NCwgMzYsIDExNywgMjI3LCAxNzEsIDM2LCAKKyAgICAxMTcsIDIxNSwgMTYwLCAzNiwgMTE3LCAyMjgsIDExNiwgMzYsIDExNywgMjE3LCAxNTMsIDM2LCAxMTcsIDIzMCwgMzAsIAorICAgIDM2LCAxMTcsIDIyNiwgMTA5LCAzNiwgMTE3LCAxOTQsIDM2LCAxMTcsIDIxMSwgMTE3LCAzNiwgMTE3LCAxNTMsIDM2LCAKKyAgICAxMTcsIDE1NiwgMzYsIDExNywgMjE0LCAxMDUsIDM2LCAxMTcsIDIzMiwgMTgyLCAzNiwgMTE3LCAyMzIsIDE5MSwgMzYsIAorICAgIDExNywgMjIyLCAxODIsIDM2LCAxMTcsIDIyOCwgOTgsIDM2LCAxMTcsIDIzNSwgMTUwLCAzNiwgMTE3LCAyMjAsIDEwNiwgCisgICAgMzYsIDExNywgMjE4LCAyMjgsIDM2LCAxMTcsIDIyMiwgOTMsIDM2LCAxMTcsIDI0MiwgNjcsIDM2LCAxMTcsIDIzMywgMjM4LCAKKyAgICAzNiwgMywgMjM1LCAxNiwgMzYsIDMsIDIzNCwgOTgsIDM2LCAzLCAyMzQsIDg5LCAzNiwgMywgMjMzLCAyMjMsIDM2LCAzLCAKKyAgICAyMzMsIDE5NCwgMzYsIDMsIDIzNCwgMTg4LCAzNiwgMywgMjM0LCAxODcsIDM2LCAzLCAyMzQsIDI1MiwgMzYsIDMsIDIzNCwgCisgICAgMzQsIDM2LCAzLCAyMzQsIDE2LCAzNiwgMywgMjM0LCAyMDEsIDM2LCAzLCAyMjksIDgxLCAzNiwgMywgMjI5LCAzMiwgMzYsIAorICAgIDMsIDIyOSwgMjgsIDM2LCAzLCAyMjgsIDI1MywgMzYsIDMsIDIyOCwgMjQ2LCAzNiwgMywgMjI5LCA2OSwgMzYsIDMsIDIyOSwgCisgICAgNjcsIDM2LCAzLCAyMjksIDc4LCAzNiwgMywgMjI5LCA5LCAzNiwgMywgMjI5LCA0LCAzNiwgMywgMjI5LCA3MSwgMzYsIDMsIAorICAgIDI1MSwgNDAsIDM2LCAzLCAyNTAsIDU5LCAzNiwgMywgMjUwLCA0OSwgMzYsIDMsIDI0OSwgMTIwLCAzNiwgMywgMjQ5LCA5MSwgCisgICAgMzYsIDMsIDI1MCwgMTk4LCAzNiwgMywgMjUwLCAxOTAsIDM2LCAzLCAyNTEsIDMwLCAzNiwgMywgMjQ5LCAyNDYsIDM2LCAzLCAKKyAgICAyNDksIDE4MiwgMzYsIDMsIDI1MCwgMjMwLCAzNiwgMywgMjI3LCAxNjgsIDM2LCAzLCAyMjcsIDE1MiwgMzYsIDMsIDIyNywgCisgICAgMTQ3LCAzNiwgMywgMjI3LCAxMzIsIDM2LCAzLCAyMjcsIDEyNSwgMzYsIDMsIDIyNywgMTYwLCAzNiwgMywgMjI3LCAxNTksIAorICAgIDM2LCAzLCAyMjcsIDE2NSwgMzYsIDMsIDIyNywgMTM4LCAzNiwgMywgMjI3LCAxMzYsIDM2LCAzLCAyMjcsIDE2MywgMzYsIAorICAgIDMsIDIxNSwgMTU2LCAzNiwgMywgMjE1LCAxMzYsIDM2LCAzLCAyMTUsIDEzNSwgMzYsIDMsIDIxNSwgMTI0LCAzNiwgMywgCisgICAgMjE1LCAxMjEsIDM2LCAzLCAyMTUsIDE1MiwgMzYsIDMsIDIxNSwgMTUxLCAzNiwgMywgMjE1LCAxNTUsIDM2LCAzLCAyMTUsIAorICAgIDEzNCwgMzYsIDMsIDIxNSwgMTMzLCAzNiwgMywgMjE1LCAxNTQsIDM2LCAzLCAyMjgsIDExNCwgMzYsIDMsIDIyOCwgMTAwLCAKKyAgICAzNiwgMywgMjI4LCA5OSwgMzYsIDMsIDIyOCwgODMsIDM2LCAzLCAyMjgsIDgyLCAzNiwgMywgMjI4LCAxMTAsIDM2LCAzLCAKKyAgICAyMjgsIDEwOSwgMzYsIDMsIDIyOCwgMTEzLCAzNiwgMywgMjI4LCA4NSwgMzYsIDMsIDIyOCwgODQsIDM2LCAzLCAyMjgsIAorICAgIDExMiwgMzYsIDMsIDIxNywgMTAyLCAzNiwgMywgMjE2LCAxMTgsIDM2LCAzLCAyMTYsIDEwNCwgMzYsIDMsIDIxNSwgMTE5LCAKKyAgICAzNiwgMywgMjE1LCA4NSwgMzYsIDMsIDIxNywgMjMsIDM2LCAzLCAyMTcsIDEyLCAzNiwgMywgMjE3LCA4MCwgMzYsIDMsIAorICAgIDExMiwgMzYsIDMsIDIxNiwgMTgsIDM2LCAzLCAyMTcsIDQyLCAzNiwgMywgMjI5LCAyMzAsIDM2LCAzLCAyMjgsIDIzOCwgCisgICAgMzYsIDMsIDIyOCwgMjEzLCAzNiwgMywgMjI3LCAyNDIsIDM2LCAzLCAyMjcsIDE4MywgMzYsIDMsIDIyOSwgMTEyLCAzNiwgCisgICAgMywgMjI5LCAxMDgsIDM2LCAzLCAyMjksIDIxNywgMzYsIDMsIDIyOCwgNzksIDM2LCAzLCAyMjgsIDY5LCAzNiwgMywgMjI5LCAKKyAgICAxOTIsIDM2LCAzLCAyMjYsIDkzLCAzNiwgMywgMjI1LCAxMTEsIDM2LCAzLCAyMjUsIDc0LCAzNiwgMywgMjI0LCAxNTMsIAorICAgIDM2LCAzLCAyMjQsIDEyMiwgMzYsIDMsIDIyNSwgMjI0LCAzNiwgMywgMjI1LCAyMTQsIDM2LCAzLCAyMjYsIDc1LCAzNiwgMywgCisgICAgMjI1LCAxOSwgMzYsIDMsIDIyNCwgMjUyLCAzNiwgMywgMjI1LCAyMzgsIDM2LCAzLCAyMzEsIDI0MiwgMzYsIDMsIDIzMCwgCisgICAgMjM1LCAzNiwgMywgMjMwLCAyMDYsIDM2LCAzLCAyMzAsIDEwNywgMzYsIDMsIDIzMCwgNTksIDM2LCAzLCAyMzEsIDk2LCAKKyAgICAzNiwgMywgMjMxLCA4NSwgMzYsIDMsIDIzMSwgMjA4LCAzNiwgMywgMjMwLCAxNjYsIDM2LCAzLCAyMzAsIDEzNywgMzYsIDMsIAorICAgIDIzMSwgMTQwLCAzNiwgMywgMjExLCAxMDMsIDM2LCAzLCAyMTEsIDgsIDM2LCAzLCAyMTAsIDI1NSwgMzYsIDMsIDIxMCwgCisgICAgMjEyLCAzNiwgMywgMjEwLCAxODEsIDM2LCAzLCAyMTEsIDQ3LCAzNiwgMywgMjExLCA0NCwgMzYsIDMsIDIxMSwgODIsIDM2LCAKKyAgICAzLCAyMTAsIDI0NCwgMzYsIDMsIDIxMCwgMjI5LCAzNiwgMywgMjExLCA1NSwgMzYsIDMsIDIyMywgMTg3LCAzNiwgMywgCisgICAgMjIzLCAzOCwgMzYsIDMsIDIyMiwgMjQyLCAzNiwgMywgMjIyLCAxNDIsIDM2LCAzLCAyMjIsIDExNCwgMzYsIDMsIDIyMywgCisgICAgMTMxLCAzNiwgMywgMjIzLCAxMTEsIDM2LCAzLCAyMjMsIDE2OSwgMzYsIDMsIDIyMiwgMjEzLCAzNiwgMywgMjIyLCAxOTksIAorICAgIDM2LCAzLCAyMjMsIDEzOSwgMzYsIDMsIDIzMywgMTQwLCAzNiwgMywgMjMyLCAyNDcsIDM2LCAzLCAyMzIsIDIzMywgMzYsIAorICAgIDMsIDIzMiwgMTAzLCAzNiwgMywgMjMyLCA3OCwgMzYsIDMsIDIzMywgNjQsIDM2LCAzLCAyMzMsIDU2LCAzNiwgMywgMjMzLCAKKyAgICAxMTUsIDM2LCAzLCAyMzIsIDE2MiwgMzYsIDMsIDIzMiwgMTMzLCAzNiwgMywgMjMzLCA4MCwgMzYsIDMsIDIxNCwgMjYsIAorICAgIDM2LCAzLCAyMTMsIDE3NiwgMzYsIDMsIDIxMywgMTYyLCAzNiwgMywgMjEyLCAxMTYsIDM2LCAzLCAyMTIsIDEwOSwgMzYsIAorICAgIDMsIDIxMywgMjU1LCAzNiwgMywgMjEzLCAyNTAsIDM2LCAzLCAyMTQsIDIzLCAzNiwgMywgMjEzLCAxMzgsIDM2LCAzLCAKKyAgICAyMTMsIDEyNywgMzYsIDMsIDIxNCwgNSwgMzYsIDMsIDIzMiwgMTgwLCAzNiwgMywgMjMyLCAxNzUsIDM2LCAzLCAyMzIsIAorICAgIDE3NCwgMzYsIDMsIDIzMiwgMTcxLCAzNiwgMywgMjMyLCAxNzAsIDM2LCAzLCAyMzIsIDE3NywgMzYsIDMsIDIzMiwgMTc2LCAKKyAgICAzNiwgMywgMjMyLCAxNzksIDM2LCAzLCAyMzIsIDE3MywgMzYsIDMsIDIzMiwgMTcyLCAzNiwgMywgMjMyLCAxNzgsIDM2LCAKKyAgICAzLCAyMzIsIDE4OSwgMzYsIDMsIDIzMiwgMTg0LCAzNiwgMywgMjMyLCAxODMsIDM2LCAzLCAyMzIsIDE2NywgMzYsIDMsIAorICAgIDIzMiwgMTY2LCAzNiwgMywgMjMyLCAxODYsIDM2LCAzLCAyMzIsIDE4NSwgMzYsIDMsIDIzMiwgMTg4LCAzNiwgMywgMjMyLCAKKyAgICAxNjksIDM2LCAzLCAyMzIsIDE2OCwgMzYsIDMsIDIzMiwgMTg3LCAzNiwgMywgMjIyLCAxODAsIDM2LCAzLCAyMjIsIDE2OSwgCisgICAgMzYsIDMsIDIyMiwgMTY4LCAzNiwgMywgMjIyLCAxNjIsIDM2LCAzLCAyMjIsIDE1NSwgMzYsIDMsIDIyMiwgMTc2LCAzNiwgCisgICAgMywgMjIyLCAxNzUsIDM2LCAzLCAyMjIsIDE3OSwgMzYsIDMsIDIyMiwgMTY3LCAzNiwgMywgMjIyLCAxNjYsIDM2LCAzLCAKKyAgICAyMjIsIDE3OCwgMzYsIDMsIDIyOCwgOTYsIDM2LCAzLCAyMjgsIDkxLCAzNiwgMywgMjI4LCA5MCwgMzYsIDMsIDIyOCwgODcsIAorICAgIDM2LCAzLCAyMjgsIDg2LCAzNiwgMywgMjI4LCA5MywgMzYsIDMsIDIyOCwgOTIsIDM2LCAzLCAyMjgsIDk1LCAzNiwgMywgCisgICAgMjI4LCA4OSwgMzYsIDMsIDIyOCwgODgsIDM2LCAzLCAyMjgsIDk0LCAzNiwgMywgMjM1LCAxNDYsIDM2LCAzLCAyMzUsIAorICAgIDExNCwgMzYsIDMsIDIzNSwgMTA3LCAzNiwgMywgMjM1LCA1NywgMzYsIDMsIDIzNSwgMzksIDM2LCAzLCAyMzUsIDEzMiwgCisgICAgMzYsIDMsIDIzNSwgMTMwLCAzNiwgMywgMjM1LCAxNDEsIDM2LCAzLCAyMzUsIDc0LCAzNiwgMywgMjM1LCA2NSwgMzYsIDMsIAorICAgIDIzNSwgMTM1LCAzNiwgMywgMjIwLCAxMDAsIDM2LCAzLCAyMjAsIDM0LCAzNiwgMywgMjIwLCAyOSwgMzYsIDMsIDIxOSwgCisgICAgMjI3LCAzNiwgMywgMjE5LCAyMTIsIDM2LCAzLCAyMjAsIDY1LCAzNiwgMywgMjIwLCA2MywgMzYsIDMsIDIyMCwgOTIsIDM2LCAKKyAgICAzLCAyMjAsIDksIDM2LCAzLCAyMjAsIDMsIDM2LCAzLCAyMjAsIDczLCAzNiwgMywgMjE4LCAyMjQsIDM2LCAzLCAyMTgsIAorICAgIDE5NCwgMzYsIDMsIDIxOCwgMTkwLCAzNiwgMywgMjE4LCAxODEsIDM2LCAzLCAyMTgsIDE3OCwgMzYsIDMsIDIxOCwgMTk5LCAKKyAgICAzNiwgMywgMjE4LCAxOTgsIDM2LCAzLCAyMTgsIDIyMywgMzYsIDMsIDIxOCwgMTg2LCAzNiwgMywgMjE4LCAxODUsIDM2LCAKKyAgICAzLCAyMTgsIDIwMSwgMzYsIDMsIDIyMiwgMzMsIDM2LCAzLCAyMTksIDE5MywgMzYsIDMsIDIxOSwgMTc3LCAzNiwgMywgCisgICAgMjE4LCA4NCwgMzYsIDMsIDIxOCwgNSwgMzYsIDMsIDIyMSwgMTgzLCAzNiwgMywgMjIxLCAxNzIsIDM2LCAzLCAyMjIsIDE5LCAKKyAgICAzNiwgMywgMjE5LCA2MCwgMzYsIDMsIDIxOSwgNDIsIDM2LCAzLCAyMjEsIDIyMSwgMzYsIDMsIDI0MiwgNTMsIDM2LCAzLCAKKyAgICAyNDEsIDE4NywgMzYsIDMsIDI0MSwgMTY4LCAzNiwgMywgMjQwLCAyMjksIDM2LCAzLCAyNDAsIDIwOSwgMzYsIDMsIDI0MSwgCisgICAgMjQ1LCAzNiwgMywgMjQxLCAyMjcsIDM2LCAzLCAyNDIsIDQzLCAzNiwgMywgMjQxLCA3NSwgMzYsIDMsIDI0MSwgNjAsIDM2LCAKKyAgICAzLCAyNDEsIDI1MywgMzYsIDMsIDIzMywgMjM3LCAzNiwgMywgMjMzLCAyMzYsIDM2LCAzLCAyMzMsIDIzMSwgMzYsIDMsIAorICAgIDIzMywgMjMwLCAzNiwgMywgMjMzLCAyMjcsIDM2LCAzLCAyMzMsIDIyNiwgMzYsIDMsIDIzMywgMjMzLCAzNiwgMywgMjMzLCAKKyAgICAyMzIsIDM2LCAzLCAyMzMsIDIzNSwgMzYsIDMsIDIzMywgMjI5LCAzNiwgMywgMjMzLCAyMjgsIDM2LCAzLCAyMzMsIDIzNCwgCisgICAgMzYsIDMsIDIxOSwgMjMzLCAxNzUsIDExNywgNSwgMjExLCA2OCwgMTc1LCAxMTcsIDUsIDIyMywgMTU4LCAxNzUsIDExNywgCisgICAgNSwgMjIzLCA4MSwgOTgsIDEsIDIxNSwgMjgsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAxNzYsIDcwLCAxMTcsIDUsIDI0OSwgCisgICAgMjQxLCAyMzQsIDEzOCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzNCwgMzQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMzQsIAorICAgIDExMSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyOSwgOSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDI1MSwgNDEsIDcwLCAKKyAgICAxMTcsIDUsIDI0OSwgMjQxLCAyNTAsIDE2NSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDI0OSwgMjQ2LCA3MCwgMTE3LCA1LCAKKyAgICAyNDksIDI0MSwgMjUwLCA5NCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIyNywgMTM4LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgCisgICAgMjQ4LCAyMjksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMTUsIDE0NSwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDI0NywgMTUzLCAKKyAgICA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE1LCAxNDAsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAxOTgsIDcwLCAxMTcsIDUsIAorICAgIDI0OSwgMjQxLCAyMTcsIDEwNiwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxNiwgMjA5LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgCisgICAgMTEyLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjE2LCAxNTcsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjgsIDc5LCA3MCwgCisgICAgMTE3LCA1LCAyNDksIDI0MSwgMjUyLCAxOTksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjUsIDE1MCwgNzAsIDExNywgNSwgCisgICAgMjQ5LCAyNDEsIDIyNSwgMTksIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjUsIDEyNCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIAorICAgIDIzMCwgMTY2LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjEwLCAyNDQsIDcwLCAxMTcsIDUsIDI0OSwgMjQxLCAyMjIsIDIxMywgCisgICAgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIzMiwgMTYyLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjEzLCAxMzgsIDcwLCAxMTcsIAorICAgIDUsIDI0OSwgMjQxLCAyMjAsIDEwNCwgNzAsIDExNywgNSwgMjQ5LCAyNDEsIDIxOCwgMjI1LCA3MCwgMTE3LCA1LCAyNDksIAorICAgIDI0MSwgMjA2LCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMTYyLCA3MCwgMTE3LCA1LCAyNDksIDI0MSwgMjMzLCAxNDEsIDcwLCAKKyAgICAyNSwgNSwgMjQ5LCAyNDEsIDIyNCwgOTEsIDcwLCAyMzUsIDI1MCwgMjUsIDUsIDI0OSwgMjQxLCAyMjQsIDMzLCA3MCwgCisgICAgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjIyLCAxMDIsIDcwLCAyMzUsIDI1MCwgMjUsIDUsIDI0OSwgMjQxLCAyMjIsIAorICAgIDk1LCA3MCwgMjM1LCAyNTAsIDI1LCA1LCAyNDksIDI0MSwgMjI0LCA3MiwgNzAsIDI1LCA1LCAyMjYsIDIwOCwgNzAsIDI1LCAKKyAgICA1LCAyNTUsIDQzLCAxNDEsIDEsIDI1MiwgNywgMjI5LCA4MiwgMTQxLCAxLCAyNTIsIDcsIDIyOSwgMzIsIDE0MSwgMSwgCisgICAgMjUyLCA3LCAyMjgsIDI1MywgMTQxLCAxLCAyNTIsIDcsIDIyOSwgNjksIDE0MSwgMSwgMjUyLCA3LCAyMjksIDksIDU2LCAxLCAKKyAgICAyNTIsIDcsIDIyOSwgODIsIDU2LCAxLCAyNTIsIDcsIDIyOSwgMzIsIDU2LCAxLCAyNTIsIDcsIDIyOCwgMjUzLCA1NiwgMSwgCisgICAgMjUyLCA3LCAyMjksIDY5LCA1NiwgMSwgMjUyLCA3LCAyMjksIDksIDU2LCAxLCAyNTQsIDIwMywgMjUwLCAxOTgsIDU2LCAxLCAKKyAgICAyNTQsIDIwMywgMjE1LCAxMTksIDU2LCAxLCAyNTQsIDIwMywgMTEyLCA1NiwgMSwgMjU0LCAyMDMsIDIyNiwgMTA5LCA1OCwgCisgICAgMSwgMjQ1LCAyOCwgMjQ1LCAyNywgMjQ5LCAxOTAsIDEzOCwgMTMwLCA1OCwgMSwgMjQ1LCAyNywgMjQ1LCAyOCwgMjQ5LCAKKyAgICAxOTAsIDEzOCwgMTMwLCAKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHBocmFzZWJvb2tfb2Zmc2V0MVtdID0gewpAQCAtMTQ0MzEsMjQ1MSArMTQ0NDgsMjQ1MSBAQAogICAgIDg2NDcsIDAsIDAsIDAsIDAsIDAsIDg2NTEsIDg2NTgsIDg2NjYsIDg2NzMsIDg2NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDg2ODMsIDg2ODYsIDg2OTAsIDg2OTUsIDg2OTksIDAsIDg3MDMsIDg3MDksIDg3MTUsIDg3MTgsIAogICAgIDg3MjUsIDg3MzQsIDg3MzcsIDg3NDAsIDg3NDUsIDg3NTEsIDg3NTUsIDg3NjMsIDg3NjksIDg3NzUsIDg3ODMsIDg3ODcsIAotICAgIDg3OTIsIDg4MDMsIDg4MDgsIDg4MTIsIDg4MTYsIDg4MjAsIDAsIDAsIDg4MjMsIDg4MzAsIDg4MzQsIDg4NDAsIDg4NDQsIAotICAgIDg4NTEsIDg4NTcsIDg4NjQsIDg4NzAsIDg4NzYsIDg4ODAsIDg4ODQsIDg4OTAsIDg4OTQsIDg4OTgsIDg5MDIsIDg5MDYsIAotICAgIDg5MTAsIDg5MTQsIDg5MTgsIDg5MjIsIDg5MjYsIDg5MzAsIDg5MzQsIDg5MzgsIDg5NDIsIDg5NDYsIDg5NTAsIDg5NTQsIAotICAgIDg5NTgsIDg5NjYsIDg5NzQsIDg5ODQsIDg5OTMsIDkwMDIsIDkwMDUsIDkwMDksIDkwMTMsIDkwMTcsIDkwMjEsIDkwMjUsIAotICAgIDkwMjksIDkwMzMsIDkwMzcsIDkwNDIsIDkwNDYsIDkwNDksIDkwNTIsIDkwNTUsIDkwNTgsIDkwNjEsIDkwNjQsIDkwNjcsIAotICAgIDkwNzAsIDkwNzQsIDkwNzcsIDkwODAsIDkwODUsIDkwOTAsIDkwOTYsIDkwOTksIDkxMDYsIDkxMTUsIDkxMjAsIDkxMjUsIAotICAgIDkxMzIsIDkxMzcsIDkxNDIsIDkxNDYsIDkxNTAsIDkxNTQsIDkxNTgsIDkxNjIsIDkxNjYsIDkxNzAsIDkxNzQsIDkxNzgsIAotICAgIDkxODIsIDkxODcsIDkxOTIsIDkxOTksIDkyMDUsIDkyMTEsIDkyMTcsIDkyMjIsIDkyMzAsIDkyMzgsIDkyNDMsIDkyNDksIAotICAgIDkyNTUsIDkyNjEsIDkyNjcsIDkyNzEsIDkyNzUsIDkyNzksIDkyODYsIDkyOTYsIDkzMDAsIDkzMDQsIDkzMDgsIDkzMTQsIAotICAgIDkzMjIsIDkzMjYsIDkzMzAsIDkzMzcsIDkzNDEsIDkzNDUsIDkzNDksIDkzNTYsIDkzNjMsIDkzNzUsIDkzNzksIDkzODMsIAotICAgIDkzODcsIDkzOTcsIDk0MDYsIDk0MTAsIDk0MTgsIDk0MjUsIDk0MzIsIDk0NDEsIDk0NTIsIDk0NjAsIDk0NjQsIDk0NzMsIAotICAgIDk0ODQsIDk0OTIsIDk1MDUsIDk1MTMsIDk1MjEsIDk1MjksIDk1MzcsIDk1NDMsIDk1NTIsIDk1NTksIDk1NjMsIDk1NzEsIAotICAgIDk1NzUsIDk1ODIsIDk1OTAsIDk1OTQsIDk2MDAsIDk2MDcsIDk2MTQsIDk2MTgsIDk2MjYsIDk2MzAsIDk2MzcsIDk2NDEsIAotICAgIDk2NDksIDk2NTMsIDk2NjEsIDk2NjksIDk2NzYsIDk2ODQsIDk2OTIsIDk2OTksIDk3MDUsIDk3MDksIDk3MTYsIDk3MjQsIAotICAgIDk3MzAsIDk3MzcsIDk3NDQsIDk3NTAsIDk3NTksIDk3NjcsIDk3NzQsIDk3ODAsIDk3ODQsIDk3ODcsIDk3OTEsIDk3OTcsIAotICAgIDk4MDUsIDk4MDksIDk4MTUsIDk4MjEsIDk4MjgsIDk4MzUsIDk4MzgsIDk4NDUsIDk4NTAsIDk4NTgsIDk4NjMsIDk4NjcsIAotICAgIDk4ODAsIDk4OTMsIDk4OTksIDk5MDYsIDk5MTEsIDk5MTcsIDk5MjIsIDk5MjgsIDk5MzgsIDk5NDUsIDk5NTQsIDk5NjQsIAotICAgIDk5NzAsIDk5NzUsIDk5ODAsIDk5ODQsIDk5ODgsIDk5OTMsIDk5OTgsIDEwMDA0LCAxMDAxMiwgMTAwMjAsIDEwMDMxLCAKLSAgICAxMDAzNiwgMTAwNDUsIDEwMDU0LCAxMDA2MSwgMTAwNjcsIDEwMDczLCAxMDA3OSwgMTAwODUsIDEwMDkxLCAxMDA5NywgCi0gICAgMTAxMDMsIDEwMTA5LCAxMDExNSwgMTAxMjIsIDEwMTI5LCAxMDEzNiwgMTAxNDIsIDEwMTUwLCAxMDE1OSwgMTAxNjUsIAotICAgIDEwMTcyLCAxMDE3OSwgMTAxODQsIDEwMTg5LCAxMDE5MywgMTAyMDAsIDEwMjA3LCAxMDIxNiwgMTAyMjUsIDEwMjI4LCAKLSAgICAxMDIzMywgMTAyMzgsIDAsIDEwMjQzLCAxMDI0NywgMTAyNTEsIDEwMjU3LCAxMDI2MSwgMTAyNjUsIDEwMjcxLCAxMDI3NSwgCi0gICAgMTAyODMsIDEwMjg3LCAxMDI5MSwgMTAyOTUsIDEwMjk5LCAxMDMwMywgMTAzMDksIDEwMzEzLCAxMDMxOSwgMTAzMjMsIAotICAgIDEwMzI3LCAxMDMzMSwgMTAzMzUsIDEwMzM5LCAxMDM0NCwgMTAzNDcsIDEwMzUxLCAxMDM1NywgMTAzNjEsIDEwMzY1LCAKLSAgICAxMDM2OSwgMTAzNzMsIDEwMzc3LCAxMDM4MywgMTAzODksIDEwMzk1LCAxMDM5OSwgMTA0MDMsIDEwNDA4LCAxMDQxMiwgCi0gICAgMTA0MTYsIDEwNDIxLCAxMDQyNSwgMTA0MjksIDEwNDM2LCAxMDQ0MywgMTA0NDcsIDEwNDUxLCAxMDQ1NiwgMTA0NjAsIAotICAgIDEwNDY0LCAxMDQ2NywgMTA0NzIsIDEwNDc1LCAxMDQ3OCwgMTA0ODMsIDEwNDg4LCAxMDQ5MiwgMTA0OTYsIDEwNTAyLCAKLSAgICAxMDUwOCwgMTA1MTEsIDAsIDAsIDEwNTE0LCAxMDUyMCwgMTA1MjYsIDEwNTMyLCAxMDU0MiwgMTA1NTQsIDEwNTY2LCAKLSAgICAxMDU4MywgMTA1OTUsIDEwNjA2LCAxMDYxNCwgMTA2MjEsIDEwNjMyLCAxMDY0NywgMTA2NTgsIDEwNjY0LCAxMDY3MywgCi0gICAgMTA2ODEsIDEwNjkzLCAxMDcwMywgMTA3MTEsIDEwNzIzLCAxMDczMCwgMTA3MzgsIDEwNzUwLCAxMDc1NiwgMTA3NjIsIAotICAgIDEwNzcwLCAxMDc3OCwgMTA3ODYsIDEwNzkyLCAxMDgwMiwgMTA4MDksIDEwODE5LCAxMDgyOSwgMTA4NDIsIDEwODU2LCAKLSAgICAxMDg3MCwgMTA4ODAsIDEwODkxLCAxMDkwMiwgMTA5MTUsIDEwOTI4LCAxMDk0MiwgMTA5NTQsIDEwOTY2LCAxMDk3OSwgCi0gICAgMTA5OTIsIDExMDA0LCAxMTAxNywgMTEwMjYsIDExMDM0LCAxMTAzOSwgMTEwNDQsIDExMDQ5LCAxMTA1NCwgMTEwNTksIAotICAgIDExMDY0LCAxMTA2OSwgMTEwNzQsIDExMDc5LCAxMTA4NCwgMTEwODksIDExMDk0LCAxMTA5OSwgMTExMDQsIDExMTA5LCAKLSAgICAxMTExNCwgMTExMTksIDExMTI0LCAxMTEyOSwgMTExMzQsIDExMTM5LCAxMTE0NCwgMTExNDksIDExMTU0LCAxMTE1OSwgCi0gICAgMTExNjQsIDExMTY5LCAxMTE3NCwgMTExNzksIDExMTg0LCAxMTE4OSwgMTExOTQsIDExMTk4LCAxMTIwMywgMTEyMDgsIAotICAgIDExMjEzLCAxMTIxOCwgMTEyMjMsIDExMjI3LCAxMTIzMSwgMTEyMzUsIDExMjM5LCAxMTI0MywgMTEyNDcsIDExMjUxLCAKLSAgICAxMTI1NSwgMTEyNTksIDExMjYzLCAxMTI2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTEyNzIsIDExMjc3LCAxMTI4MSwgMTEyODUsIDExMjg5LCAxMTI5MywgMTEyOTcsIDExMzAxLCAxMTMwNSwgMTEzMDksIAotICAgIDExMzEzLCAxMTMxNywgMTEzMjIsIDExMzI2LCAxMTMzMCwgMTEzMzQsIDExMzM5LCAxMTM0MywgMTEzNDgsIDExMzUzLCAKLSAgICAxMTM1OCwgMTEzNjIsIDExMzY3LCAxMTM3MiwgMTEzNzcsIDExMzgyLCAxMTM4NiwgMTEzOTEsIDExMzk1LCAxMTQwMCwgCi0gICAgMTE0MDUsIDExNDA5LCAxMTQxNCwgMTE0MjEsIDExNDI1LCAxMTQzMCwgMTE0MzQsIDExNDM4LCAxMTQ0MywgMTE0NDcsIAotICAgIDExNDU0LCAxMTQ2MSwgMTE0NjgsIDExNDc0LCAxMTQ4MiwgMTE0OTAsIDExNDk5LCAxMTUwNywgMTE1MTQsIDExNTIxLCAKLSAgICAxMTUyOSwgMTE1MzUsIDExNTQxLCAxMTU0NywgMTE1NTMsIDExNTYwLCAxMTU2NSwgMTE1NjksIDExNTc0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMTU3OCwgMTE1ODMsIDExNTg4LCAxMTU5MywgMTE1OTgsIDExNjAzLCAxMTYwOCwgMTE2MTMsIDExNjE4LCAKLSAgICAxMTYyMywgMTE2MjgsIDExNjMzLCAxMTYzOCwgMTE2NDMsIDExNjQ4LCAxMTY1MywgMTE2NTgsIDExNjYzLCAxMTY2OCwgCi0gICAgMTE2NzMsIDExNjc4LCAxMTY4MywgMTE2ODgsIDExNjkzLCAxMTY5OCwgMTE3MDMsIDExNzA4LCAxMTcxNiwgMTE3MjMsIAotICAgIDExNzI5LCAxMTczNCwgMTE3NDIsIDExNzQ5LCAxMTc1NSwgMTE3NjIsIDExNzY4LCAxMTc3MywgMTE3ODAsIDExNzg3LCAKLSAgICAxMTc5MywgMTE3OTgsIDExODAzLCAxMTgwOSwgMTE4MTQsIDExODE5LCAxMTgyNSwgMCwgMCwgMTE4MzAsIDExODM2LCAKLSAgICAxMTg0MiwgMTE4NDgsIDExODU0LCAxMTg2MCwgMTE4NjYsIDExODcxLCAxMTg3OSwgMTE4ODUsIDExODkxLCAxMTg5NywgCi0gICAgMTE5MDMsIDExOTA5LCAxMTkxNywgMCwgMTE5MjMsIDExOTI4LCAxMTkzMywgMTE5MzgsIDExOTQzLCAxMTk0OCwgMTE5NTMsIAotICAgIDExOTU4LCAxMTk2MywgMTE5NjgsIDExOTczLCAxMTk3OCwgMTE5ODMsIDExOTg4LCAxMTk5MywgMTE5OTgsIDEyMDAzLCAKLSAgICAxMjAwOCwgMTIwMTMsIDEyMDE4LCAxMjAyMywgMTIwMjgsIDEyMDMzLCAxMjAzOCwgMTIwNDMsIDEyMDQ4LCAxMjA1MywgCi0gICAgMTIwNTgsIDAsIDAsIDEyMDYzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA4NzkyLCA4ODAzLCA4ODA4LCA4ODEyLCA4ODE2LCA4ODIwLCA4ODIzLCAwLCA4ODI2LCA4ODMzLCA4ODM3LCA4ODQzLCAKKyAgICA4ODQ3LCA4ODU0LCA4ODYwLCA4ODY3LCA4ODczLCA4ODc5LCA4ODgzLCA4ODg3LCA4ODkzLCA4ODk3LCA4OTAxLCA4OTA1LCAKKyAgICA4OTA5LCA4OTEzLCA4OTE3LCA4OTIxLCA4OTI1LCA4OTI5LCA4OTMzLCA4OTM3LCA4OTQxLCA4OTQ1LCA4OTQ5LCA4OTUzLCAKKyAgICA4OTU3LCA4OTYxLCA4OTY5LCA4OTc3LCA4OTg3LCA4OTk2LCA5MDA1LCA5MDA4LCA5MDEyLCA5MDE2LCA5MDIwLCA5MDI0LCAKKyAgICA5MDI4LCA5MDMyLCA5MDM2LCA5MDQwLCA5MDQ1LCA5MDQ5LCA5MDUyLCA5MDU1LCA5MDU4LCA5MDYxLCA5MDY0LCA5MDY3LCAKKyAgICA5MDcwLCA5MDczLCA5MDc3LCA5MDgwLCA5MDgzLCA5MDg4LCA5MDkzLCA5MDk5LCA5MTAyLCA5MTA5LCA5MTE4LCA5MTIzLCAKKyAgICA5MTI4LCA5MTM1LCA5MTQwLCA5MTQ1LCA5MTQ5LCA5MTUzLCA5MTU3LCA5MTYxLCA5MTY1LCA5MTY5LCA5MTczLCA5MTc3LCAKKyAgICA5MTgxLCA5MTg1LCA5MTkwLCA5MTk1LCA5MjAyLCA5MjA4LCA5MjE0LCA5MjIwLCA5MjI1LCA5MjMzLCA5MjQxLCA5MjQ2LCAKKyAgICA5MjUyLCA5MjU4LCA5MjY0LCA5MjcwLCA5Mjc0LCA5Mjc4LCA5MjgyLCA5Mjg5LCA5Mjk5LCA5MzAzLCA5MzA3LCA5MzExLCAKKyAgICA5MzE3LCA5MzI1LCA5MzI5LCA5MzMzLCA5MzQwLCA5MzQ0LCA5MzQ4LCA5MzUyLCA5MzU5LCA5MzY2LCA5Mzc4LCA5MzgyLCAKKyAgICA5Mzg2LCA5MzkwLCA5NDAwLCA5NDA5LCA5NDEzLCA5NDIxLCA5NDI4LCA5NDM1LCA5NDQ0LCA5NDU1LCA5NDYzLCA5NDY3LCAKKyAgICA5NDc2LCA5NDg3LCA5NDk1LCA5NTA4LCA5NTE2LCA5NTI0LCA5NTMyLCA5NTQwLCA5NTQ2LCA5NTU1LCA5NTYyLCA5NTY2LCAKKyAgICA5NTc0LCA5NTc4LCA5NTg1LCA5NTkzLCA5NTk3LCA5NjAzLCA5NjEwLCA5NjE3LCA5NjIxLCA5NjI5LCA5NjMzLCA5NjQwLCAKKyAgICA5NjQ0LCA5NjUyLCA5NjU2LCA5NjY0LCA5NjcyLCA5Njc5LCA5Njg3LCA5Njk1LCA5NzAyLCA5NzA4LCA5NzEyLCA5NzE5LCAKKyAgICA5NzI3LCA5NzMzLCA5NzQwLCA5NzQ3LCA5NzUzLCA5NzYyLCA5NzcwLCA5Nzc3LCA5NzgzLCA5Nzg3LCA5NzkwLCA5Nzk0LCAKKyAgICA5ODAwLCA5ODA4LCA5ODEyLCA5ODE4LCA5ODI0LCA5ODMxLCA5ODM4LCA5ODQxLCA5ODQ4LCA5ODUzLCA5ODYxLCA5ODY2LCAKKyAgICA5ODcwLCA5ODgzLCA5ODk2LCA5OTAyLCA5OTA5LCA5OTE0LCA5OTIwLCA5OTI1LCA5OTMxLCA5OTQxLCA5OTQ4LCA5OTU3LCAKKyAgICA5OTY3LCA5OTczLCA5OTc4LCA5OTgzLCA5OTg3LCA5OTkxLCA5OTk2LCAxMDAwMSwgMTAwMDcsIDEwMDE1LCAxMDAyMywgCisgICAgMTAwMzQsIDEwMDM5LCAxMDA0OCwgMTAwNTcsIDEwMDY0LCAxMDA3MCwgMTAwNzYsIDEwMDgyLCAxMDA4OCwgMTAwOTQsIAorICAgIDEwMTAwLCAxMDEwNiwgMTAxMTIsIDEwMTE4LCAxMDEyNSwgMTAxMzIsIDEwMTM5LCAxMDE0NSwgMTAxNTMsIDEwMTYyLCAKKyAgICAxMDE2OCwgMTAxNzUsIDEwMTgyLCAxMDE4NywgMTAxOTIsIDEwMTk2LCAxMDIwMywgMTAyMTAsIDEwMjE5LCAxMDIyOCwgCisgICAgMTAyMzEsIDEwMjM2LCAxMDI0MSwgMCwgMTAyNDYsIDEwMjUwLCAxMDI1NCwgMTAyNjAsIDEwMjY0LCAxMDI2OCwgMTAyNzQsIAorICAgIDEwMjc4LCAxMDI4NiwgMTAyOTAsIDEwMjk0LCAxMDI5OCwgMTAzMDIsIDEwMzA2LCAxMDMxMiwgMTAzMTYsIDEwMzIyLCAKKyAgICAxMDMyNiwgMTAzMzAsIDEwMzM0LCAxMDMzOCwgMTAzNDIsIDEwMzQ3LCAxMDM1MCwgMTAzNTQsIDEwMzYwLCAxMDM2NCwgCisgICAgMTAzNjgsIDEwMzcyLCAxMDM3NiwgMTAzODAsIDEwMzg2LCAxMDM5MiwgMTAzOTgsIDEwNDAyLCAxMDQwNiwgMTA0MTEsIAorICAgIDEwNDE1LCAxMDQxOSwgMTA0MjQsIDEwNDI4LCAxMDQzMiwgMTA0MzksIDEwNDQ2LCAxMDQ1MCwgMTA0NTQsIDEwNDU5LCAKKyAgICAxMDQ2MywgMTA0NjcsIDEwNDcwLCAxMDQ3NSwgMTA0NzgsIDEwNDgxLCAxMDQ4NiwgMTA0OTEsIDEwNDk1LCAxMDQ5OSwgCisgICAgMTA1MDUsIDEwNTExLCAxMDUxNCwgMCwgMCwgMTA1MTcsIDEwNTIzLCAxMDUyOSwgMTA1MzUsIDEwNTQ1LCAxMDU1NywgCisgICAgMTA1NjksIDEwNTg2LCAxMDU5OCwgMTA2MDksIDEwNjE3LCAxMDYyNCwgMTA2MzUsIDEwNjUwLCAxMDY2MSwgMTA2NjcsIAorICAgIDEwNjc2LCAxMDY4NCwgMTA2OTYsIDEwNzA2LCAxMDcxNCwgMTA3MjYsIDEwNzMzLCAxMDc0MSwgMTA3NTMsIDEwNzU5LCAKKyAgICAxMDc2NSwgMTA3NzMsIDEwNzgxLCAxMDc4OSwgMTA3OTUsIDEwODA1LCAxMDgxMiwgMTA4MjIsIDEwODMyLCAxMDg0NSwgCisgICAgMTA4NTksIDEwODczLCAxMDg4MywgMTA4OTQsIDEwOTA1LCAxMDkxOCwgMTA5MzEsIDEwOTQ1LCAxMDk1NywgMTA5NjksIAorICAgIDEwOTgyLCAxMDk5NSwgMTEwMDcsIDExMDIwLCAxMTAyOSwgMTEwMzcsIDExMDQyLCAxMTA0NywgMTEwNTIsIDExMDU3LCAKKyAgICAxMTA2MiwgMTEwNjcsIDExMDcyLCAxMTA3NywgMTEwODIsIDExMDg3LCAxMTA5MiwgMTEwOTcsIDExMTAyLCAxMTEwNywgCisgICAgMTExMTIsIDExMTE3LCAxMTEyMiwgMTExMjcsIDExMTMyLCAxMTEzNywgMTExNDIsIDExMTQ3LCAxMTE1MiwgMTExNTcsIAorICAgIDExMTYyLCAxMTE2NywgMTExNzIsIDExMTc3LCAxMTE4MiwgMTExODcsIDExMTkyLCAxMTE5NywgMTEyMDEsIDExMjA2LCAKKyAgICAxMTIxMSwgMTEyMTYsIDExMjIxLCAxMTIyNiwgMTEyMzAsIDExMjM0LCAxMTIzOCwgMTEyNDIsIDExMjQ2LCAxMTI1MCwgCisgICAgMTEyNTQsIDExMjU4LCAxMTI2MiwgMTEyNjYsIDExMjcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMTI3NSwgMTEyODAsIDExMjg0LCAxMTI4OCwgMTEyOTIsIDExMjk2LCAxMTMwMCwgMTEzMDQsIDExMzA4LCAxMTMxMiwgCisgICAgMTEzMTYsIDExMzIwLCAxMTMyNSwgMTEzMjksIDExMzMzLCAxMTMzNywgMTEzNDIsIDExMzQ2LCAxMTM1MSwgMTEzNTYsIAorICAgIDExMzYxLCAxMTM2NSwgMTEzNzAsIDExMzc1LCAxMTM4MCwgMTEzODUsIDExMzg5LCAxMTM5NCwgMTEzOTgsIDExNDAzLCAKKyAgICAxMTQwOCwgMTE0MTIsIDExNDE3LCAxMTQyNCwgMTE0MjgsIDExNDMzLCAxMTQzNywgMTE0NDEsIDExNDQ2LCAxMTQ1MCwgCisgICAgMTE0NTcsIDExNDY0LCAxMTQ3MSwgMTE0NzcsIDExNDg1LCAxMTQ5MywgMTE1MDIsIDExNTEwLCAxMTUxNywgMTE1MjQsIAorICAgIDExNTMyLCAxMTUzOCwgMTE1NDQsIDExNTUwLCAxMTU1NiwgMTE1NjMsIDExNTY4LCAxMTU3MiwgMTE1NzcsIDAsIDAsIDAsIAorICAgIDAsIDAsIDExNTgxLCAxMTU4NiwgMTE1OTEsIDExNTk2LCAxMTYwMSwgMTE2MDYsIDExNjExLCAxMTYxNiwgMTE2MjEsIAorICAgIDExNjI2LCAxMTYzMSwgMTE2MzYsIDExNjQxLCAxMTY0NiwgMTE2NTEsIDExNjU2LCAxMTY2MSwgMTE2NjYsIDExNjcxLCAKKyAgICAxMTY3NiwgMTE2ODEsIDExNjg2LCAxMTY5MSwgMTE2OTYsIDExNzAxLCAxMTcwNiwgMTE3MTEsIDExNzE5LCAxMTcyNiwgCisgICAgMTE3MzIsIDExNzM3LCAxMTc0NSwgMTE3NTIsIDExNzU4LCAxMTc2NSwgMTE3NzEsIDExNzc2LCAxMTc4MywgMTE3OTAsIAorICAgIDExNzk2LCAxMTgwMSwgMTE4MDYsIDExODEyLCAxMTgxNywgMTE4MjIsIDExODI4LCAwLCAwLCAxMTgzMywgMTE4MzksIAorICAgIDExODQ1LCAxMTg1MSwgMTE4NTcsIDExODYzLCAxMTg2OSwgMTE4NzQsIDExODgyLCAxMTg4OCwgMTE4OTQsIDExOTAwLCAKKyAgICAxMTkwNiwgMTE5MTIsIDExOTIwLCAwLCAxMTkyNiwgMTE5MzEsIDExOTM2LCAxMTk0MSwgMTE5NDYsIDExOTUxLCAxMTk1NiwgCisgICAgMTE5NjEsIDExOTY2LCAxMTk3MSwgMTE5NzYsIDExOTgxLCAxMTk4NiwgMTE5OTEsIDExOTk2LCAxMjAwMSwgMTIwMDYsIAorICAgIDEyMDExLCAxMjAxNiwgMTIwMjEsIDEyMDI2LCAxMjAzMSwgMTIwMzYsIDEyMDQxLCAxMjA0NiwgMTIwNTEsIDEyMDU2LCAKKyAgICAxMjA2MSwgMCwgMCwgMTIwNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMDY3LCAwLCAxMjA3NiwgMTIwODMsIDEyMDkxLCAxMjEwMywgMTIxMTAsIDEyMTE3LCAxMjEyNCwgMTIxMzUsIDEyMTQ2LCAKLSAgICAxMjE1MywgMTIxNjEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyMDcwLCAwLCAxMjA3OSwgMTIwODYsIDEyMDk0LCAxMjEwNiwgMTIxMTMsIDEyMTIwLCAxMjEyNywgMTIxMzgsIDEyMTQ5LCAKKyAgICAxMjE1NiwgMTIxNjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTY3LCAxMjE3MiwgMTIxNzcsIDEyMTgyLCAxMjE4NywgCi0gICAgMTIxOTIsIDEyMTk3LCAxMjIwMiwgMTIyMDcsIDEyMjEyLCAxMjIxNywgMTIyMjIsIDEyMjI3LCAxMjIzMSwgMTIyMzUsIAotICAgIDEyMjM5LCAxMjI0NCwgMTIyNTAsIDEyMjU2LCAxMjI2MiwgMTIyNjcsIDEyMjcyLCAxMjI3NywgMTIyODIsIDEyMjg4LCAKLSAgICAxMjI5NywgMTIzMDUsIDAsIDEyMzExLCAxMjMxNywgMTIzMjEsIDEyMzI1LCAxMjMyOSwgMTIzMzQsIDEyMzM3LCAxMjM0MSwgCi0gICAgMTIzNDQsIDEyMzQ4LCAxMjM1MSwgMTIzNTUsIDEyMzU5LCAxMjM2MywgMTIzNjgsIDEyMzczLCAxMjM3NiwgMTIzODAsIAotICAgIDEyMzg1LCAxMjM5MCwgMTIzOTMsIDEyMzk3LCAxMjQwMCwgMTI0MDQsIDEyNDA4LCAxMjQxMiwgMTI0MTYsIDEyNDIwLCAKLSAgICAxMjQyNCwgMTI0MjgsIDEyNDMyLCAxMjQzNiwgMTI0NDAsIDEyNDQ0LCAxMjQ0OCwgMTI0NTIsIDEyNDU2LCAxMjQ2MCwgCi0gICAgMTI0NjQsIDEyNDY4LCAxMjQ3MiwgMTI0NzUsIDEyNDc5LCAxMjQ4MiwgMTI0ODYsIDEyNDkwLCAxMjQ5NCwgMTI0OTcsIAotICAgIDEyNTAwLCAxMjUwMywgMTI1MDcsIDEyNTExLCAxMjUxNSwgMTI1MTksIDEyNTIzLCAxMjUyNywgMTI1MzEsIDEyNTM0LCAKLSAgICAxMjUzNywgMTI1NDIsIDEyNTQ3LCAxMjU1MSwgMTI1NTUsIDEyNTYwLCAxMjU2NCwgMTI1NjksIDEyNTczLCAxMjU3OCwgCi0gICAgMTI1ODMsIDEyNTg5LCAxMjU5NSwgMTI2MDEsIDEyNjA1LCAxMjYxMCwgMTI2MTYsIDEyNjIyLCAxMjYyNiwgMTI2MzEsIAotICAgIDEyNjM1LCAxMjY0MSwgMTI2NDYsIDEyNjQ5LCAxMjY1NSwgMTI2NjEsIDEyNjY2LCAxMjY3MSwgMTI2NzgsIDEyNjgzLCAKLSAgICAxMjY4OCwgMTI2OTIsIDEyNjk2LCAxMjcwMCwgMTI3MDQsIDEyNzA4LCAxMjcxMiwgMTI3MTYsIDEyNzIwLCAxMjcyNSwgCi0gICAgMTI3MzAsIDEyNzM1LCAxMjc0MSwgMTI3NDQsIDEyNzQ4LCAxMjc1MiwgMTI3NTUsIDEyNzU4LCAxMjc2MSwgMTI3NjQsIAotICAgIDEyNzY3LCAxMjc3MCwgMTI3NzMsIDEyNzc2LCAxMjc3OSwgMTI3ODMsIDEyNzkwLCAxMjc5NSwgMTI3OTksIDEyODAzLCAKLSAgICAxMjgwNywgMTI4MTEsIDAsIDEyODE1LCAxMjgxOSwgMTI4MjMsIDEyODI3LCAxMjgzMSwgMTI4MzcsIDEyODQxLCAwLCAKLSAgICAxMjg0NSwgMTI4NDksIDEyODUzLCAwLCAxMjg1NywgMTI4NjAsIDEyODY0LCAxMjg2NywgMTI4NzEsIDEyODc0LCAxMjg3OCwgCi0gICAgMTI4ODIsIDAsIDAsIDEyODg2LCAxMjg4OSwgMCwgMCwgMTI4OTMsIDEyODk2LCAxMjkwMCwgMTI5MDMsIDEyOTA3LCAKLSAgICAxMjkxMSwgMTI5MTUsIDEyOTE5LCAxMjkyMywgMTI5MjcsIDEyOTMxLCAxMjkzNSwgMTI5MzksIDEyOTQzLCAxMjk0NywgCi0gICAgMTI5NTEsIDEyOTU1LCAxMjk1OSwgMTI5NjMsIDEyOTY3LCAxMjk3MSwgMTI5NzUsIDAsIDEyOTc4LCAxMjk4MSwgMTI5ODUsIAotICAgIDEyOTg5LCAxMjk5MywgMTI5OTYsIDEyOTk5LCAwLCAxMzAwMiwgMCwgMCwgMCwgMTMwMDYsIDEzMDEwLCAxMzAxNCwgCi0gICAgMTMwMTcsIDAsIDAsIDEzMDIwLCAxMzAyNCwgMTMwMjgsIDEzMDMzLCAxMzAzNywgMTMwNDIsIDEzMDQ2LCAxMzA1MSwgCi0gICAgMTMwNTYsIDAsIDAsIDEzMDYyLCAxMzA2NiwgMCwgMCwgMTMwNzEsIDEzMDc1LCAxMzA4MCwgMTMwODQsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDEzMDkwLCAwLCAwLCAwLCAwLCAxMzA5NiwgMTMxMDAsIDAsIDEzMTA0LCAxMzEwOCwgMTMxMTMsIAotICAgIDEzMTE4LCAxMzEyMywgMCwgMCwgMTMxMjksIDEzMTMzLCAxMzEzNiwgMTMxMzksIDEzMTQyLCAxMzE0NSwgMTMxNDgsIAotICAgIDEzMTUxLCAxMzE1NCwgMTMxNTcsIDEzMTYwLCAxMzE2OSwgMTMxNzgsIDEzMTgyLCAxMzE4NiwgMTMxOTIsIDEzMTk4LCAKLSAgICAxMzIwNCwgMTMyMTAsIDEzMjI0LCAxMzIzMSwgMTMyMzQsIDAsIDAsIDAsIDAsIDAsIDEzMjM4LCAxMzI0NCwgMTMyNDgsIDAsIAotICAgIDEzMjUyLCAxMzI1NSwgMTMyNTksIDEzMjYyLCAxMzI2NiwgMTMyNjksIDAsIDAsIDAsIDAsIDEzMjczLCAxMzI3NywgMCwgMCwgCi0gICAgMTMyODEsIDEzMjg1LCAxMzI4OSwgMTMyOTIsIDEzMjk2LCAxMzMwMCwgMTMzMDQsIDEzMzA4LCAxMzMxMiwgMTMzMTYsIAotICAgIDEzMzIwLCAxMzMyNCwgMTMzMjgsIDEzMzMyLCAxMzMzNiwgMTMzNDAsIDEzMzQ0LCAxMzM0OCwgMTMzNTIsIDEzMzU2LCAKLSAgICAxMzM2MCwgMTMzNjQsIDAsIDEzMzY3LCAxMzM3MCwgMTMzNzQsIDEzMzc4LCAxMzM4MiwgMTMzODUsIDEzMzg4LCAwLCAKLSAgICAxMzM5MSwgMTMzOTUsIDAsIDEzMzk5LCAxMzQwMywgMCwgMTM0MDcsIDEzNDEwLCAwLCAwLCAxMzQxMywgMCwgMTM0MTcsIAotICAgIDEzNDIyLCAxMzQyNiwgMTM0MzEsIDEzNDM1LCAwLCAwLCAwLCAwLCAxMzQ0MCwgMTM0NDUsIDAsIDAsIDEzNDUwLCAxMzQ1NSwgCi0gICAgMTM0NjAsIDAsIDAsIDAsIDEzNDY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ2OCwgMTM0NzIsIDEzNDc2LCAxMzQ4MCwgCi0gICAgMCwgMTM0ODQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzNDg4LCAxMzQ5MiwgMTM0OTUsIDEzNDk4LCAxMzUwMSwgMTM1MDQsIAotICAgIDEzNTA3LCAxMzUxMCwgMTM1MTMsIDEzNTE2LCAxMzUxOSwgMTM1MjIsIDEzNTI1LCAxMzUyOCwgMTM1MzEsIDEzNTM2LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzU0MCwgMTM1NDQsIDEzNTQ4LCAwLCAxMzU1MiwgMTM1NTUsIAotICAgIDEzNTU5LCAxMzU2MiwgMTM1NjYsIDEzNTY5LCAxMzU3MywgMTM1NzcsIDEzNTgxLCAwLCAxMzU4NiwgMTM1ODksIDEzNTkzLCAKLSAgICAwLCAxMzU5OCwgMTM2MDEsIDEzNjA1LCAxMzYwOCwgMTM2MTIsIDEzNjE2LCAxMzYyMCwgMTM2MjQsIDEzNjI4LCAxMzYzMiwgCi0gICAgMTM2MzYsIDEzNjQwLCAxMzY0NCwgMTM2NDgsIDEzNjUyLCAxMzY1NiwgMTM2NjAsIDEzNjY0LCAxMzY2OCwgMTM2NzIsIAotICAgIDEzNjc2LCAxMzY4MCwgMCwgMTM2ODMsIDEzNjg2LCAxMzY5MCwgMTM2OTQsIDEzNjk4LCAxMzcwMSwgMTM3MDQsIDAsIAotICAgIDEzNzA3LCAxMzcxMSwgMCwgMTM3MTUsIDEzNzE5LCAxMzcyMywgMTM3MjcsIDEzNzMwLCAwLCAwLCAxMzczMywgMTM3MzcsIAotICAgIDEzNzQxLCAxMzc0NiwgMTM3NTAsIDEzNzU1LCAxMzc1OSwgMTM3NjQsIDEzNzY5LCAxMzc3NSwgMCwgMTM3ODEsIDEzNzg1LCAKLSAgICAxMzc5MCwgMCwgMTM3OTYsIDEzODAwLCAxMzgwNSwgMCwgMCwgMTM4MDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEzODEyLCAxMzgxNywgMTM4MjIsIDEzODI3LCAwLCAwLCAxMzgzMywgMTM4MzcsIDEzODQwLCAKLSAgICAxMzg0MywgMTM4NDYsIDEzODQ5LCAxMzg1MiwgMTM4NTUsIDEzODU4LCAxMzg2MSwgMTM4NjQsIDEzODY4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzg3MiwgMTM4NzYsIDEzODgwLCAwLCAxMzg4NCwgMTM4ODcsIAotICAgIDEzODkxLCAxMzg5NCwgMTM4OTgsIDEzOTAxLCAxMzkwNSwgMTM5MDksIDAsIDAsIDEzOTEzLCAxMzkxNiwgMCwgMCwgCi0gICAgMTM5MjAsIDEzOTIzLCAxMzkyNywgMTM5MzAsIDEzOTM0LCAxMzkzOCwgMTM5NDIsIDEzOTQ2LCAxMzk1MCwgMTM5NTQsIAotICAgIDEzOTU4LCAxMzk2MiwgMTM5NjYsIDEzOTcwLCAxMzk3NCwgMTM5NzgsIDEzOTgyLCAxMzk4NiwgMTM5OTAsIDEzOTk0LCAKLSAgICAxMzk5OCwgMTQwMDIsIDAsIDE0MDA1LCAxNDAwOCwgMTQwMTIsIDE0MDE2LCAxNDAyMCwgMTQwMjMsIDE0MDI2LCAwLCAKLSAgICAxNDAyOSwgMTQwMzMsIDAsIDE0MDM3LCAxNDA0MSwgMTQwNDUsIDE0MDQ5LCAxNDA1MiwgMCwgMCwgMTQwNTUsIDE0MDU5LCAKLSAgICAxNDA2MywgMTQwNjgsIDE0MDcyLCAxNDA3NywgMTQwODEsIDE0MDg2LCAxNDA5MSwgMCwgMCwgMTQwOTcsIDE0MTAxLCAwLCAKLSAgICAwLCAxNDEwNiwgMTQxMTAsIDE0MTE1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDExOSwgMTQxMjUsIDAsIDAsIDAsIDAsIAotICAgIDE0MTMxLCAxNDEzNSwgMCwgMTQxMzksIDE0MTQzLCAxNDE0OCwgMTQxNTMsIDE0MTU4LCAwLCAwLCAxNDE2NCwgMTQxNjgsIAotICAgIDE0MTcxLCAxNDE3NCwgMTQxNzcsIDE0MTgwLCAxNDE4MywgMTQxODYsIDE0MTg5LCAxNDE5MiwgMTQxOTUsIDE0MTk4LCAKLSAgICAxNDIwMiwgMTQyMDgsIDE0MjE0LCAxNDIyMCwgMTQyMjYsIDE0MjMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxNDIzOCwgMTQyNDIsIDAsIDE0MjQ2LCAxNDI0OSwgMTQyNTMsIDE0MjU2LCAxNDI2MCwgMTQyNjMsIDAsIDAsIDAsIAotICAgIDE0MjY3LCAxNDI3MCwgMTQyNzQsIDAsIDE0Mjc4LCAxNDI4MSwgMTQyODUsIDE0Mjg5LCAwLCAwLCAwLCAxNDI5MiwgCi0gICAgMTQyOTYsIDAsIDE0MzAwLCAwLCAxNDMwNCwgMTQzMDgsIDAsIDAsIDAsIDE0MzEyLCAxNDMxNiwgMCwgMCwgMCwgMTQzMjAsIAotICAgIDE0MzIzLCAxNDMyNywgMCwgMCwgMCwgMTQzMzAsIDE0MzMzLCAxNDMzNiwgMTQzMzksIDE0MzQzLCAxNDM0NywgMTQzNTEsIAotICAgIDE0MzU1LCAxNDM1OSwgMTQzNjMsIDE0MzY3LCAxNDM3MCwgMCwgMCwgMCwgMCwgMTQzNzMsIDE0Mzc4LCAxNDM4MiwgCi0gICAgMTQzODcsIDE0MzkxLCAwLCAwLCAwLCAxNDM5NiwgMTQ0MDAsIDE0NDA1LCAwLCAxNDQxMCwgMTQ0MTQsIDE0NDE5LCAKLSAgICAxNDQyNCwgMCwgMCwgMTQ0MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxNDQzNywgMTQ0NDEsIDE0NDQ0LCAxNDQ0NywgMTQ0NTAsIDE0NDUzLCAxNDQ1NiwgMTQ0NTksIAotICAgIDE0NDYyLCAxNDQ2NSwgMTQ0NjgsIDE0NDcyLCAxNDQ3NywgMTQ0ODIsIDE0NDg2LCAxNDQ5MCwgMTQ0OTQsIDE0NDk4LCAKLSAgICAxNDUwMiwgMTQ1MDcsIDE0NTExLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDUxNCwgMTQ1MTgsIDE0NTIyLCAwLCAxNDUyNiwgCi0gICAgMTQ1MjksIDE0NTMzLCAxNDUzNiwgMTQ1NDAsIDE0NTQzLCAxNDU0NywgMTQ1NTEsIDAsIDE0NTU1LCAxNDU1OCwgMTQ1NjIsIAotICAgIDAsIDE0NTY2LCAxNDU2OSwgMTQ1NzMsIDE0NTc3LCAxNDU4MCwgMTQ1ODQsIDE0NTg4LCAxNDU5MiwgMTQ1OTYsIDE0NjAwLCAKLSAgICAxNDYwNCwgMTQ2MDgsIDE0NjEyLCAxNDYxNiwgMTQ2MjAsIDE0NjI0LCAxNDYyOCwgMTQ2MzIsIDE0NjM2LCAxNDY0MCwgCi0gICAgMTQ2NDQsIDE0NjQ4LCAxNDY1MiwgMCwgMTQ2NTUsIDE0NjU4LCAxNDY2MiwgMTQ2NjYsIDE0NjcwLCAxNDY3MywgMTQ2NzYsIAotICAgIDE0Njc5LCAxNDY4MywgMTQ2ODcsIDAsIDE0NjkxLCAxNDY5NSwgMTQ2OTksIDE0NzAzLCAxNDcwNiwgMCwgMCwgMCwgCi0gICAgMTQ3MDksIDE0NzEzLCAxNDcxOCwgMTQ3MjIsIDE0NzI3LCAxNDczMSwgMTQ3MzYsIDE0NzQxLCAwLCAxNDc0NywgMTQ3NTEsIAotICAgIDE0NzU2LCAwLCAxNDc2MSwgMTQ3NjUsIDE0NzcwLCAxNDc3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ3NzksIDE0NzgzLCAKLSAgICAwLCAxNDc4OSwgMTQ3OTMsIDAsIDAsIDAsIDAsIDAsIDAsIDE0Nzk3LCAxNDgwMiwgMTQ4MDcsIDE0ODEyLCAwLCAwLCAKLSAgICAxNDgxOCwgMTQ4MjIsIDE0ODI1LCAxNDgyOCwgMTQ4MzEsIDE0ODM0LCAxNDgzNywgMTQ4NDAsIDE0ODQzLCAxNDg0NiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ4NDksIDE0ODYyLCAxNDg3NCwgMTQ4ODYsIDE0ODk4LCAxNDkxMCwgMTQ5MjIsIAotICAgIDE0OTM0LCAwLCAwLCAxNDkzOCwgMTQ5NDIsIDAsIDE0OTQ2LCAxNDk0OSwgMTQ5NTMsIDE0OTU2LCAxNDk2MCwgMTQ5NjMsIAotICAgIDE0OTY3LCAxNDk3MSwgMCwgMTQ5NzUsIDE0OTc4LCAxNDk4MiwgMCwgMTQ5ODYsIDE0OTg5LCAxNDk5MywgMTQ5OTcsIAotICAgIDE1MDAwLCAxNTAwNCwgMTUwMDgsIDE1MDEyLCAxNTAxNiwgMTUwMjAsIDE1MDI0LCAxNTAyOCwgMTUwMzIsIDE1MDM2LCAKLSAgICAxNTA0MCwgMTUwNDQsIDE1MDQ4LCAxNTA1MiwgMTUwNTYsIDE1MDYwLCAxNTA2NCwgMTUwNjgsIDE1MDcyLCAwLCAxNTA3NSwgCi0gICAgMTUwNzgsIDE1MDgyLCAxNTA4NiwgMTUwOTAsIDE1MDkzLCAxNTA5NiwgMTUwOTksIDE1MTAzLCAxNTEwNywgMCwgMTUxMTEsIAotICAgIDE1MTE1LCAxNTExOSwgMTUxMjMsIDE1MTI2LCAwLCAwLCAxNTEyOSwgMTUxMzMsIDE1MTM3LCAxNTE0MiwgMTUxNDYsIAotICAgIDE1MTUxLCAxNTE1NSwgMTUxNjAsIDE1MTY1LCAwLCAxNTE3MSwgMTUxNzUsIDE1MTgwLCAwLCAxNTE4NSwgMTUxODksIAotICAgIDE1MTk0LCAxNTE5OSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTUyMDMsIDE1MjA3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxNTIxMywgMCwgMTUyMTcsIDE1MjIyLCAxNTIyNywgMTUyMzIsIDAsIDAsIDE1MjM4LCAxNTI0MiwgMTUyNDUsIDE1MjQ4LCAKLSAgICAxNTI1MSwgMTUyNTQsIDE1MjU3LCAxNTI2MCwgMTUyNjMsIDE1MjY2LCAwLCAxNTI2OSwgMTUyNzMsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1Mjc3LCAxNTI4MSwgMCwgMTUyODUsIDE1Mjg4LCAxNTI5MiwgCi0gICAgMTUyOTUsIDE1Mjk5LCAxNTMwMiwgMTUzMDYsIDE1MzEwLCAwLCAxNTMxNCwgMTUzMTcsIDE1MzIxLCAwLCAxNTMyNSwgCi0gICAgMTUzMjgsIDE1MzMyLCAxNTMzNiwgMTUzMzksIDE1MzQzLCAxNTM0NywgMTUzNTEsIDE1MzU1LCAxNTM1OSwgMTUzNjMsIAotICAgIDE1MzY3LCAxNTM3MSwgMTUzNzUsIDE1Mzc5LCAxNTM4MywgMTUzODcsIDE1MzkxLCAxNTM5NSwgMTUzOTksIDE1NDAzLCAKLSAgICAxNTQwNywgMTU0MTEsIDE1NDE0LCAxNTQxOCwgMTU0MjEsIDE1NDI1LCAxNTQyOSwgMTU0MzMsIDE1NDM2LCAxNTQzOSwgCi0gICAgMTU0NDIsIDE1NDQ2LCAxNTQ1MCwgMTU0NTQsIDE1NDU4LCAxNTQ2MiwgMTU0NjYsIDE1NDcwLCAxNTQ3MywgMTU0NzYsIDAsIAotICAgIDAsIDE1NDgwLCAxNTQ4NCwgMTU0ODksIDE1NDkzLCAxNTQ5OCwgMTU1MDIsIDE1NTA3LCAxNTUxMiwgMCwgMTU1MTgsIAotICAgIDE1NTIyLCAxNTUyNywgMCwgMTU1MzIsIDE1NTM2LCAxNTU0MSwgMTU1NDYsIDE1NTUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAxNTU1NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTU1NjEsIDE1NTY2LCAxNTU3MSwgMTU1NzYsIDAsIDAsIAotICAgIDE1NTgyLCAxNTU4NiwgMTU1ODksIDE1NTkyLCAxNTU5NSwgMTU1OTgsIDE1NjAxLCAxNTYwNCwgMTU2MDcsIDE1NjEwLCAKLSAgICAxNTYxMywgMTU2MTcsIDE1NjIyLCAxNTYyNywgMTU2MzMsIDE1NjM5LCAwLCAwLCAwLCAxNTY0NSwgMTU2NDksIDE1NjU1LCAKLSAgICAxNTY2MSwgMTU2NjcsIDE1NjcyLCAxNTY3OCwgMCwgMCwgMTU2ODQsIDE1Njg4LCAwLCAxNTY5MiwgMTU2OTYsIDE1NzAwLCAKLSAgICAxNTcwNCwgMTU3MDgsIDE1NzEyLCAxNTcxNiwgMTU3MjAsIDE1NzI0LCAxNTcyOCwgMTU3MzIsIDE1NzM2LCAxNTc0MCwgCi0gICAgMTU3NDQsIDE1NzQ4LCAxNTc1MiwgMTU3NTYsIDE1NzYwLCAwLCAwLCAwLCAxNTc2NCwgMTU3NzAsIDE1Nzc2LCAxNTc4MiwgCi0gICAgMTU3ODgsIDE1Nzk0LCAxNTgwMCwgMTU4MDYsIDE1ODEyLCAxNTgxOCwgMTU4MjQsIDE1ODMwLCAxNTgzOCwgMTU4NDQsIAotICAgIDE1ODUwLCAxNTg1NiwgMTU4NjIsIDE1ODY4LCAxNTg3NCwgMTU4ODAsIDE1ODg2LCAxNTg5MiwgMTU4OTgsIDE1OTA0LCAwLCAKLSAgICAxNTkxMCwgMTU5MTYsIDE1OTIyLCAxNTkyOCwgMTU5MzQsIDE1OTQwLCAxNTk0NCwgMTU5NTAsIDE1OTU0LCAwLCAxNTk1OCwgCi0gICAgMCwgMCwgMTU5NjQsIDE1OTY4LCAxNTk3NCwgMTU5ODAsIDE1OTg2LCAxNTk5MCwgMTU5OTYsIDAsIDAsIDAsIDE2MDAwLCAwLCAKLSAgICAwLCAwLCAwLCAxNjAwNCwgMTYwMDksIDE2MDE2LCAxNjAyMywgMTYwMzAsIDE2MDM3LCAwLCAxNjA0NCwgMCwgMTYwNTEsIAotICAgIDE2MDU2LCAxNjA2MSwgMTYwNjgsIDE2MDc1LCAxNjA4NCwgMTYwOTUsIDE2MTA0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjEwOSwgMTYxMTYsIDE2MTIzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAxNjEyOCwgMTYxMzQsIDE2MTQwLCAxNjE0NiwgMTYxNTIsIDE2MTU4LCAxNjE2NCwgMTYxNzAsIAotICAgIDE2MTc2LCAxNjE4MiwgMTYxODgsIDE2MTk0LCAxNjIwMCwgMTYyMDYsIDE2MjEyLCAxNjIxOCwgMTYyMjQsIDE2MjMwLCAKLSAgICAxNjIzNiwgMTYyNDIsIDE2MjQ4LCAxNjI1NCwgMTYyNjAsIDE2MjY2LCAxNjI3MiwgMTYyNzgsIDE2Mjg0LCAxNjI5MCwgCi0gICAgMTYyOTYsIDE2MzAyLCAxNjMwOCwgMTYzMTQsIDE2MzIwLCAxNjMyNSwgMTYzMzEsIDE2MzM3LCAxNjM0MSwgMTYzNDcsIAotICAgIDE2MzUxLCAxNjM1NywgMTYzNjMsIDE2MzY5LCAxNjM3NSwgMTYzODEsIDE2Mzg3LCAxNjM5MiwgMTYzOTgsIDE2NDAyLCAKLSAgICAxNjQwNywgMTY0MTMsIDE2NDE5LCAxNjQyNSwgMTY0MzAsIDE2NDM2LCAxNjQ0MiwgMTY0NDgsIDE2NDUzLCAxNjQ1OSwgMCwgCi0gICAgMCwgMCwgMCwgMTY0NjMsIDE2NDY5LCAxNjQ3NCwgMTY0ODAsIDE2NDg1LCAxNjQ5MywgMTY1MDEsIDE2NTA1LCAxNjUwOSwgCi0gICAgMTY1MTMsIDE2NTE5LCAxNjUyNSwgMTY1MzEsIDE2NTM3LCAxNjU0MSwgMTY1NDUsIDE2NTQ5LCAxNjU1MywgMTY1NTcsIAotICAgIDE2NTYwLCAxNjU2MywgMTY1NjYsIDE2NTY5LCAxNjU3MiwgMTY1NzUsIDE2NTc4LCAxNjU4MSwgMTY1ODQsIDE2NTg4LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjE3MCwgMTIxNzUsIDEyMTgwLCAxMjE4NSwgMTIxOTAsIAorICAgIDEyMTk1LCAxMjIwMCwgMTIyMDUsIDEyMjEwLCAxMjIxNSwgMTIyMjAsIDEyMjI1LCAxMjIzMCwgMTIyMzQsIDEyMjM4LCAKKyAgICAxMjI0MiwgMTIyNDcsIDEyMjUzLCAxMjI1OSwgMTIyNjUsIDEyMjcwLCAxMjI3NSwgMTIyODAsIDEyMjg1LCAxMjI5MSwgCisgICAgMTIzMDAsIDEyMzA4LCAwLCAxMjMxNCwgMTIzMjAsIDEyMzI0LCAxMjMyOCwgMTIzMzIsIDEyMzM3LCAxMjM0MCwgMTIzNDQsIAorICAgIDEyMzQ3LCAxMjM1MSwgMTIzNTQsIDEyMzU4LCAxMjM2MiwgMTIzNjYsIDEyMzcxLCAxMjM3NiwgMTIzNzksIDEyMzgzLCAKKyAgICAxMjM4OCwgMTIzOTMsIDEyMzk2LCAxMjQwMCwgMTI0MDMsIDEyNDA3LCAxMjQxMSwgMTI0MTUsIDEyNDE5LCAxMjQyMywgCisgICAgMTI0MjcsIDEyNDMxLCAxMjQzNSwgMTI0MzksIDEyNDQzLCAxMjQ0NywgMTI0NTEsIDEyNDU1LCAxMjQ1OSwgMTI0NjMsIAorICAgIDEyNDY3LCAxMjQ3MSwgMTI0NzUsIDEyNDc4LCAxMjQ4MiwgMTI0ODUsIDEyNDg5LCAxMjQ5MywgMTI0OTcsIDEyNTAwLCAKKyAgICAxMjUwMywgMTI1MDYsIDEyNTEwLCAxMjUxNCwgMTI1MTgsIDEyNTIyLCAxMjUyNiwgMTI1MzAsIDEyNTM0LCAxMjUzNywgCisgICAgMTI1NDAsIDEyNTQ1LCAxMjU1MCwgMTI1NTQsIDEyNTU4LCAxMjU2MywgMTI1NjcsIDEyNTcyLCAxMjU3NiwgMTI1ODEsIAorICAgIDEyNTg2LCAxMjU5MiwgMTI1OTgsIDEyNjA0LCAxMjYwOCwgMTI2MTMsIDEyNjE5LCAxMjYyNSwgMTI2MjksIDEyNjM0LCAKKyAgICAxMjYzOCwgMTI2NDQsIDEyNjQ5LCAxMjY1MiwgMTI2NTgsIDEyNjY0LCAxMjY2OSwgMTI2NzQsIDEyNjgxLCAxMjY4NiwgCisgICAgMTI2OTEsIDEyNjk1LCAxMjY5OSwgMTI3MDMsIDEyNzA3LCAxMjcxMSwgMTI3MTUsIDEyNzE5LCAxMjcyMywgMTI3MjgsIAorICAgIDEyNzMzLCAxMjczOCwgMTI3NDQsIDEyNzQ3LCAxMjc1MSwgMTI3NTUsIDEyNzU4LCAxMjc2MSwgMTI3NjQsIDEyNzY3LCAKKyAgICAxMjc3MCwgMTI3NzMsIDEyNzc2LCAxMjc3OSwgMTI3ODIsIDEyNzg2LCAxMjc5MywgMTI3OTgsIDEyODAyLCAxMjgwNiwgCisgICAgMTI4MTAsIDEyODE0LCAwLCAxMjgxOCwgMTI4MjIsIDEyODI2LCAxMjgzMCwgMTI4MzQsIDEyODQwLCAxMjg0NCwgMCwgCisgICAgMTI4NDgsIDEyODUyLCAxMjg1NiwgMCwgMTI4NjAsIDEyODYzLCAxMjg2NywgMTI4NzAsIDEyODc0LCAxMjg3NywgMTI4ODEsIAorICAgIDEyODg1LCAwLCAwLCAxMjg4OSwgMTI4OTIsIDAsIDAsIDEyODk2LCAxMjg5OSwgMTI5MDMsIDEyOTA2LCAxMjkxMCwgCisgICAgMTI5MTQsIDEyOTE4LCAxMjkyMiwgMTI5MjYsIDEyOTMwLCAxMjkzNCwgMTI5MzgsIDEyOTQyLCAxMjk0NiwgMTI5NTAsIAorICAgIDEyOTU0LCAxMjk1OCwgMTI5NjIsIDEyOTY2LCAxMjk3MCwgMTI5NzQsIDEyOTc4LCAwLCAxMjk4MSwgMTI5ODQsIDEyOTg4LCAKKyAgICAxMjk5MiwgMTI5OTYsIDEyOTk5LCAxMzAwMiwgMCwgMTMwMDUsIDAsIDAsIDAsIDEzMDA5LCAxMzAxMywgMTMwMTcsIAorICAgIDEzMDIwLCAwLCAwLCAxMzAyMywgMTMwMjcsIDEzMDMxLCAxMzAzNiwgMTMwNDAsIDEzMDQ1LCAxMzA0OSwgMTMwNTQsIAorICAgIDEzMDU5LCAwLCAwLCAxMzA2NSwgMTMwNjksIDAsIDAsIDEzMDc0LCAxMzA3OCwgMTMwODMsIDEzMDg3LCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAxMzA5MywgMCwgMCwgMCwgMCwgMTMwOTksIDEzMTAzLCAwLCAxMzEwNywgMTMxMTEsIDEzMTE2LCAKKyAgICAxMzEyMSwgMTMxMjYsIDAsIDAsIDEzMTMyLCAxMzEzNiwgMTMxMzksIDEzMTQyLCAxMzE0NSwgMTMxNDgsIDEzMTUxLCAKKyAgICAxMzE1NCwgMTMxNTcsIDEzMTYwLCAxMzE2MywgMTMxNzIsIDEzMTgxLCAxMzE4NSwgMTMxODksIDEzMTk1LCAxMzIwMSwgCisgICAgMTMyMDcsIDEzMjEzLCAxMzIyNywgMTMyMzQsIDEzMjM3LCAwLCAwLCAwLCAwLCAwLCAxMzI0MSwgMTMyNDcsIDEzMjUxLCAwLCAKKyAgICAxMzI1NSwgMTMyNTgsIDEzMjYyLCAxMzI2NSwgMTMyNjksIDEzMjcyLCAwLCAwLCAwLCAwLCAxMzI3NiwgMTMyODAsIDAsIDAsIAorICAgIDEzMjg0LCAxMzI4OCwgMTMyOTIsIDEzMjk1LCAxMzI5OSwgMTMzMDMsIDEzMzA3LCAxMzMxMSwgMTMzMTUsIDEzMzE5LCAKKyAgICAxMzMyMywgMTMzMjcsIDEzMzMxLCAxMzMzNSwgMTMzMzksIDEzMzQzLCAxMzM0NywgMTMzNTEsIDEzMzU1LCAxMzM1OSwgCisgICAgMTMzNjMsIDEzMzY3LCAwLCAxMzM3MCwgMTMzNzMsIDEzMzc3LCAxMzM4MSwgMTMzODUsIDEzMzg4LCAxMzM5MSwgMCwgCisgICAgMTMzOTQsIDEzMzk4LCAwLCAxMzQwMiwgMTM0MDYsIDAsIDEzNDEwLCAxMzQxMywgMCwgMCwgMTM0MTYsIDAsIDEzNDIwLCAKKyAgICAxMzQyNSwgMTM0MjksIDEzNDM0LCAxMzQzOCwgMCwgMCwgMCwgMCwgMTM0NDMsIDEzNDQ4LCAwLCAwLCAxMzQ1MywgMTM0NTgsIAorICAgIDEzNDYzLCAwLCAwLCAwLCAxMzQ2NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM0NzEsIDEzNDc1LCAxMzQ3OSwgMTM0ODMsIAorICAgIDAsIDEzNDg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMzQ5MSwgMTM0OTUsIDEzNDk4LCAxMzUwMSwgMTM1MDQsIDEzNTA3LCAKKyAgICAxMzUxMCwgMTM1MTMsIDEzNTE2LCAxMzUxOSwgMTM1MjIsIDEzNTI1LCAxMzUyOCwgMTM1MzEsIDEzNTM0LCAxMzUzOSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM1NDMsIDEzNTQ3LCAxMzU1MSwgMCwgMTM1NTUsIDEzNTU4LCAKKyAgICAxMzU2MiwgMTM1NjUsIDEzNTY5LCAxMzU3MiwgMTM1NzYsIDEzNTgwLCAxMzU4NCwgMCwgMTM1ODksIDEzNTkyLCAxMzU5NiwgCisgICAgMCwgMTM2MDEsIDEzNjA0LCAxMzYwOCwgMTM2MTEsIDEzNjE1LCAxMzYxOSwgMTM2MjMsIDEzNjI3LCAxMzYzMSwgMTM2MzUsIAorICAgIDEzNjM5LCAxMzY0MywgMTM2NDcsIDEzNjUxLCAxMzY1NSwgMTM2NTksIDEzNjYzLCAxMzY2NywgMTM2NzEsIDEzNjc1LCAKKyAgICAxMzY3OSwgMTM2ODMsIDAsIDEzNjg2LCAxMzY4OSwgMTM2OTMsIDEzNjk3LCAxMzcwMSwgMTM3MDQsIDEzNzA3LCAwLCAKKyAgICAxMzcxMCwgMTM3MTQsIDAsIDEzNzE4LCAxMzcyMiwgMTM3MjYsIDEzNzMwLCAxMzczMywgMCwgMCwgMTM3MzYsIDEzNzQwLCAKKyAgICAxMzc0NCwgMTM3NDksIDEzNzUzLCAxMzc1OCwgMTM3NjIsIDEzNzY3LCAxMzc3MiwgMTM3NzgsIDAsIDEzNzg0LCAxMzc4OCwgCisgICAgMTM3OTMsIDAsIDEzNzk5LCAxMzgwMywgMTM4MDgsIDAsIDAsIDEzODEyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMzgxNSwgMTM4MjAsIDEzODI1LCAxMzgzMCwgMCwgMCwgMTM4MzYsIDEzODQwLCAxMzg0MywgCisgICAgMTM4NDYsIDEzODQ5LCAxMzg1MiwgMTM4NTUsIDEzODU4LCAxMzg2MSwgMTM4NjQsIDEzODY3LCAxMzg3MSwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTM4NzUsIDEzODc5LCAxMzg4MywgMCwgMTM4ODcsIDEzODkwLCAKKyAgICAxMzg5NCwgMTM4OTcsIDEzOTAxLCAxMzkwNCwgMTM5MDgsIDEzOTEyLCAwLCAwLCAxMzkxNiwgMTM5MTksIDAsIDAsIAorICAgIDEzOTIzLCAxMzkyNiwgMTM5MzAsIDEzOTMzLCAxMzkzNywgMTM5NDEsIDEzOTQ1LCAxMzk0OSwgMTM5NTMsIDEzOTU3LCAKKyAgICAxMzk2MSwgMTM5NjUsIDEzOTY5LCAxMzk3MywgMTM5NzcsIDEzOTgxLCAxMzk4NSwgMTM5ODksIDEzOTkzLCAxMzk5NywgCisgICAgMTQwMDEsIDE0MDA1LCAwLCAxNDAwOCwgMTQwMTEsIDE0MDE1LCAxNDAxOSwgMTQwMjMsIDE0MDI2LCAxNDAyOSwgMCwgCisgICAgMTQwMzIsIDE0MDM2LCAwLCAxNDA0MCwgMTQwNDQsIDE0MDQ4LCAxNDA1MiwgMTQwNTUsIDAsIDAsIDE0MDU4LCAxNDA2MiwgCisgICAgMTQwNjYsIDE0MDcxLCAxNDA3NSwgMTQwODAsIDE0MDg0LCAxNDA4OSwgMTQwOTQsIDAsIDAsIDE0MTAwLCAxNDEwNCwgMCwgCisgICAgMCwgMTQxMDksIDE0MTEzLCAxNDExOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQxMjIsIDE0MTI4LCAwLCAwLCAwLCAwLCAKKyAgICAxNDEzNCwgMTQxMzgsIDAsIDE0MTQyLCAxNDE0NiwgMTQxNTEsIDE0MTU2LCAxNDE2MSwgMCwgMCwgMTQxNjcsIDE0MTcxLCAKKyAgICAxNDE3NCwgMTQxNzcsIDE0MTgwLCAxNDE4MywgMTQxODYsIDE0MTg5LCAxNDE5MiwgMTQxOTUsIDE0MTk4LCAxNDIwMSwgCisgICAgMTQyMDUsIDE0MjExLCAxNDIxNywgMTQyMjMsIDE0MjI5LCAxNDIzNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTQyNDEsIDE0MjQ1LCAwLCAxNDI0OSwgMTQyNTIsIDE0MjU2LCAxNDI1OSwgMTQyNjMsIDE0MjY2LCAwLCAwLCAwLCAKKyAgICAxNDI3MCwgMTQyNzMsIDE0Mjc3LCAwLCAxNDI4MSwgMTQyODQsIDE0Mjg4LCAxNDI5MiwgMCwgMCwgMCwgMTQyOTUsIAorICAgIDE0Mjk5LCAwLCAxNDMwMywgMCwgMTQzMDcsIDE0MzExLCAwLCAwLCAwLCAxNDMxNSwgMTQzMTksIDAsIDAsIDAsIDE0MzIzLCAKKyAgICAxNDMyNiwgMTQzMzAsIDAsIDAsIDAsIDE0MzMzLCAxNDMzNiwgMTQzMzksIDE0MzQyLCAxNDM0NiwgMTQzNTAsIDE0MzU0LCAKKyAgICAxNDM1OCwgMTQzNjIsIDE0MzY2LCAxNDM3MCwgMTQzNzMsIDAsIDAsIDAsIDAsIDE0Mzc2LCAxNDM4MSwgMTQzODUsIAorICAgIDE0MzkwLCAxNDM5NCwgMCwgMCwgMCwgMTQzOTksIDE0NDAzLCAxNDQwOCwgMCwgMTQ0MTMsIDE0NDE3LCAxNDQyMiwgCisgICAgMTQ0MjcsIDAsIDAsIDE0NDMxLCAwLCAwLCAwLCAwLCAwLCAwLCAxNDQzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTQ0NDAsIDE0NDQ0LCAxNDQ0NywgMTQ0NTAsIDE0NDUzLCAxNDQ1NiwgMTQ0NTksIDE0NDYyLCAKKyAgICAxNDQ2NSwgMTQ0NjgsIDE0NDcxLCAxNDQ3NSwgMTQ0ODAsIDE0NDg1LCAxNDQ4OSwgMTQ0OTMsIDE0NDk3LCAxNDUwMSwgCisgICAgMTQ1MDUsIDE0NTEwLCAxNDUxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMTQ1MTcsIDE0NTIxLCAxNDUyNSwgMCwgMTQ1MjksIAorICAgIDE0NTMyLCAxNDUzNiwgMTQ1MzksIDE0NTQzLCAxNDU0NiwgMTQ1NTAsIDE0NTU0LCAwLCAxNDU1OCwgMTQ1NjEsIDE0NTY1LCAKKyAgICAwLCAxNDU2OSwgMTQ1NzIsIDE0NTc2LCAxNDU4MCwgMTQ1ODMsIDE0NTg3LCAxNDU5MSwgMTQ1OTUsIDE0NTk5LCAxNDYwMywgCisgICAgMTQ2MDcsIDE0NjExLCAxNDYxNSwgMTQ2MTksIDE0NjIzLCAxNDYyNywgMTQ2MzEsIDE0NjM1LCAxNDYzOSwgMTQ2NDMsIAorICAgIDE0NjQ3LCAxNDY1MSwgMTQ2NTUsIDAsIDE0NjU4LCAxNDY2MSwgMTQ2NjUsIDE0NjY5LCAxNDY3MywgMTQ2NzYsIDE0Njc5LCAKKyAgICAxNDY4MiwgMTQ2ODYsIDE0NjkwLCAwLCAxNDY5NCwgMTQ2OTgsIDE0NzAyLCAxNDcwNiwgMTQ3MDksIDAsIDAsIDAsIAorICAgIDE0NzEyLCAxNDcxNiwgMTQ3MjEsIDE0NzI1LCAxNDczMCwgMTQ3MzQsIDE0NzM5LCAxNDc0NCwgMCwgMTQ3NTAsIDE0NzU0LCAKKyAgICAxNDc1OSwgMCwgMTQ3NjQsIDE0NzY4LCAxNDc3MywgMTQ3NzgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0NzgyLCAxNDc4NiwgCisgICAgMCwgMTQ3OTIsIDE0Nzk2LCAwLCAwLCAwLCAwLCAwLCAwLCAxNDgwMCwgMTQ4MDUsIDE0ODEwLCAxNDgxNSwgMCwgMCwgCisgICAgMTQ4MjEsIDE0ODI1LCAxNDgyOCwgMTQ4MzEsIDE0ODM0LCAxNDgzNywgMTQ4NDAsIDE0ODQzLCAxNDg0NiwgMTQ4NDksIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE0ODUyLCAxNDg2NSwgMTQ4NzcsIDE0ODg5LCAxNDkwMSwgMTQ5MTMsIDE0OTI1LCAKKyAgICAxNDkzNywgMCwgMCwgMTQ5NDEsIDE0OTQ1LCAwLCAxNDk0OSwgMTQ5NTIsIDE0OTU2LCAxNDk1OSwgMTQ5NjMsIDE0OTY2LCAKKyAgICAxNDk3MCwgMTQ5NzQsIDAsIDE0OTc4LCAxNDk4MSwgMTQ5ODUsIDAsIDE0OTg5LCAxNDk5MiwgMTQ5OTYsIDE1MDAwLCAKKyAgICAxNTAwMywgMTUwMDcsIDE1MDExLCAxNTAxNSwgMTUwMTksIDE1MDIzLCAxNTAyNywgMTUwMzEsIDE1MDM1LCAxNTAzOSwgCisgICAgMTUwNDMsIDE1MDQ3LCAxNTA1MSwgMTUwNTUsIDE1MDU5LCAxNTA2MywgMTUwNjcsIDE1MDcxLCAxNTA3NSwgMCwgMTUwNzgsIAorICAgIDE1MDgxLCAxNTA4NSwgMTUwODksIDE1MDkzLCAxNTA5NiwgMTUwOTksIDE1MTAyLCAxNTEwNiwgMTUxMTAsIDAsIDE1MTE0LCAKKyAgICAxNTExOCwgMTUxMjIsIDE1MTI2LCAxNTEyOSwgMCwgMCwgMTUxMzIsIDE1MTM2LCAxNTE0MCwgMTUxNDUsIDE1MTQ5LCAKKyAgICAxNTE1NCwgMTUxNTgsIDE1MTYzLCAxNTE2OCwgMCwgMTUxNzQsIDE1MTc4LCAxNTE4MywgMCwgMTUxODgsIDE1MTkyLCAKKyAgICAxNTE5NywgMTUyMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1MjA2LCAxNTIxMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMTUyMTYsIDAsIDE1MjIwLCAxNTIyNSwgMTUyMzAsIDE1MjM1LCAwLCAwLCAxNTI0MSwgMTUyNDUsIDE1MjQ4LCAxNTI1MSwgCisgICAgMTUyNTQsIDE1MjU3LCAxNTI2MCwgMTUyNjMsIDE1MjY2LCAxNTI2OSwgMCwgMTUyNzIsIDE1Mjc2LCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNTI4MCwgMTUyODQsIDAsIDE1Mjg4LCAxNTI5MSwgMTUyOTUsIAorICAgIDE1Mjk4LCAxNTMwMiwgMTUzMDUsIDE1MzA5LCAxNTMxMywgMCwgMTUzMTcsIDE1MzIwLCAxNTMyNCwgMCwgMTUzMjgsIAorICAgIDE1MzMxLCAxNTMzNSwgMTUzMzksIDE1MzQyLCAxNTM0NiwgMTUzNTAsIDE1MzU0LCAxNTM1OCwgMTUzNjIsIDE1MzY2LCAKKyAgICAxNTM3MCwgMTUzNzQsIDE1Mzc4LCAxNTM4MiwgMTUzODYsIDE1MzkwLCAxNTM5NCwgMTUzOTgsIDE1NDAyLCAxNTQwNiwgCisgICAgMTU0MTAsIDE1NDE0LCAxNTQxNywgMTU0MjEsIDE1NDI0LCAxNTQyOCwgMTU0MzIsIDE1NDM2LCAxNTQzOSwgMTU0NDIsIAorICAgIDE1NDQ1LCAxNTQ0OSwgMTU0NTMsIDE1NDU3LCAxNTQ2MSwgMTU0NjUsIDE1NDY5LCAxNTQ3MywgMTU0NzYsIDE1NDc5LCAwLCAKKyAgICAwLCAxNTQ4MywgMTU0ODcsIDE1NDkyLCAxNTQ5NiwgMTU1MDEsIDE1NTA1LCAxNTUxMCwgMTU1MTUsIDAsIDE1NTIxLCAKKyAgICAxNTUyNSwgMTU1MzAsIDAsIDE1NTM1LCAxNTUzOSwgMTU1NDQsIDE1NTQ5LCAxNTU1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTU1NTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE1NTY0LCAxNTU2OSwgMTU1NzQsIDE1NTc5LCAwLCAwLCAKKyAgICAxNTU4NSwgMTU1ODksIDE1NTkyLCAxNTU5NSwgMTU1OTgsIDE1NjAxLCAxNTYwNCwgMTU2MDcsIDE1NjEwLCAxNTYxMywgCisgICAgMTU2MTYsIDE1NjIwLCAxNTYyNSwgMTU2MzAsIDE1NjM2LCAxNTY0MiwgMCwgMCwgMCwgMTU2NDgsIDE1NjUyLCAxNTY1OCwgCisgICAgMTU2NjQsIDE1NjcwLCAxNTY3NSwgMTU2ODEsIDAsIDAsIDE1Njg3LCAxNTY5MSwgMCwgMTU2OTUsIDE1Njk5LCAxNTcwMywgCisgICAgMTU3MDcsIDE1NzExLCAxNTcxNSwgMTU3MTksIDE1NzIzLCAxNTcyNywgMTU3MzEsIDE1NzM1LCAxNTczOSwgMTU3NDMsIAorICAgIDE1NzQ3LCAxNTc1MSwgMTU3NTUsIDE1NzU5LCAxNTc2MywgMCwgMCwgMCwgMTU3NjcsIDE1NzczLCAxNTc3OSwgMTU3ODUsIAorICAgIDE1NzkxLCAxNTc5NywgMTU4MDMsIDE1ODA5LCAxNTgxNSwgMTU4MjEsIDE1ODI3LCAxNTgzMywgMTU4NDEsIDE1ODQ3LCAKKyAgICAxNTg1MywgMTU4NTksIDE1ODY1LCAxNTg3MSwgMTU4NzcsIDE1ODgzLCAxNTg4OSwgMTU4OTUsIDE1OTAxLCAxNTkwNywgMCwgCisgICAgMTU5MTMsIDE1OTE5LCAxNTkyNSwgMTU5MzEsIDE1OTM3LCAxNTk0MywgMTU5NDcsIDE1OTUzLCAxNTk1NywgMCwgMTU5NjEsIAorICAgIDAsIDAsIDE1OTY3LCAxNTk3MSwgMTU5NzcsIDE1OTgzLCAxNTk4OSwgMTU5OTMsIDE1OTk5LCAwLCAwLCAwLCAxNjAwMywgMCwgCisgICAgMCwgMCwgMCwgMTYwMDcsIDE2MDEyLCAxNjAxOSwgMTYwMjYsIDE2MDMzLCAxNjA0MCwgMCwgMTYwNDcsIDAsIDE2MDU0LCAKKyAgICAxNjA1OSwgMTYwNjQsIDE2MDcxLCAxNjA3OCwgMTYwODcsIDE2MDk4LCAxNjEwNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTYxMTIsIDE2MTE5LCAxNjEyNiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTYxMzEsIDE2MTM3LCAxNjE0MywgMTYxNDksIDE2MTU1LCAxNjE2MSwgMTYxNjcsIDE2MTczLCAKKyAgICAxNjE3OSwgMTYxODUsIDE2MTkxLCAxNjE5NywgMTYyMDMsIDE2MjA5LCAxNjIxNSwgMTYyMjEsIDE2MjI3LCAxNjIzMywgCisgICAgMTYyMzksIDE2MjQ1LCAxNjI1MSwgMTYyNTcsIDE2MjYzLCAxNjI2OSwgMTYyNzUsIDE2MjgxLCAxNjI4NywgMTYyOTMsIAorICAgIDE2Mjk5LCAxNjMwNSwgMTYzMTEsIDE2MzE3LCAxNjMyMywgMTYzMjgsIDE2MzM0LCAxNjM0MCwgMTYzNDQsIDE2MzUwLCAKKyAgICAxNjM1NCwgMTYzNjAsIDE2MzY2LCAxNjM3MiwgMTYzNzgsIDE2Mzg0LCAxNjM5MCwgMTYzOTUsIDE2NDAxLCAxNjQwNSwgCisgICAgMTY0MTAsIDE2NDE2LCAxNjQyMiwgMTY0MjgsIDE2NDMzLCAxNjQzOSwgMTY0NDUsIDE2NDUxLCAxNjQ1NiwgMTY0NjIsIDAsIAorICAgIDAsIDAsIDAsIDE2NDY2LCAxNjQ3MiwgMTY0NzcsIDE2NDgzLCAxNjQ4OCwgMTY0OTYsIDE2NTA0LCAxNjUwOCwgMTY1MTIsIAorICAgIDE2NTE2LCAxNjUyMiwgMTY1MjgsIDE2NTM0LCAxNjU0MCwgMTY1NDQsIDE2NTQ4LCAxNjU1MiwgMTY1NTYsIDE2NTYwLCAKKyAgICAxNjU2MywgMTY1NjYsIDE2NTY5LCAxNjU3MiwgMTY1NzUsIDE2NTc4LCAxNjU4MSwgMTY1ODQsIDE2NTg3LCAxNjU5MSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY1OTIsIDE2NTk3LCAwLCAxNjYwNCwgMCwgMCwgMTY2MTEsIAotICAgIDE2NjE2LCAwLCAxNjYyMSwgMCwgMCwgMTY2MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDE2NjMzLCAxNjYzOCwgMTY2NDIsIAotICAgIDE2NjQ5LCAwLCAxNjY1NiwgMTY2NjEsIDE2NjY2LCAxNjY3MSwgMTY2NzgsIDE2Njg1LCAxNjY5MiwgMCwgMTY2OTksIAotICAgIDE2NzA0LCAxNjcwOSwgMCwgMTY3MTYsIDAsIDE2NzIzLCAwLCAwLCAxNjcyOCwgMTY3MzUsIDAsIDE2NzQyLCAxNjc0NiwgCi0gICAgMTY3NTMsIDE2NzU3LCAxNjc2MiwgMTY3NzAsIDE2Nzc2LCAxNjc4MiwgMTY3ODcsIDE2NzkzLCAxNjc5OSwgMTY4MDUsIAotICAgIDE2ODEwLCAwLCAxNjgxNiwgMTY4MjQsIDE2ODMxLCAwLCAwLCAxNjgzOCwgMTY4NDMsIDE2ODQ5LCAxNjg1NCwgMTY4NjAsIAotICAgIDAsIDE2ODY2LCAwLCAxNjg3MiwgMTY4NzksIDE2ODg2LCAxNjg5MywgMTY5MDAsIDE2OTA1LCAwLCAwLCAxNjkwOSwgCi0gICAgMTY5MTQsIDE2OTE4LCAxNjkyMiwgMTY5MjYsIDE2OTMwLCAxNjkzNCwgMTY5MzgsIDE2OTQyLCAxNjk0NiwgMCwgMCwgCi0gICAgMTY5NTAsIDE2OTU2LCAxNjk2MiwgMTY5NjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE2OTc2LCAxNjk4MCwgMTY5OTEsIAotICAgIDE3MDA2LCAxNzAyMSwgMTcwMzEsIDE3MDQyLCAxNzA1NSwgMTcwNjYsIDE3MDcyLCAxNzA4MCwgMTcwOTAsIDE3MDk2LCAKLSAgICAxNzEwNCwgMTcxMDgsIDE3MTE0LCAxNzEyMCwgMTcxMjgsIDE3MTM4LCAxNzE0NiwgMTcxNTksIDE3MTY1LCAxNzE3MywgCi0gICAgMTcxODEsIDE3MTkzLCAxNzIwMCwgMTcyMDgsIDE3MjE2LCAxNzIyNCwgMTcyMzIsIDE3MjQwLCAxNzI0OCwgMTcyNTgsIAotICAgIDE3MjYyLCAxNzI2NSwgMTcyNjgsIDE3MjcxLCAxNzI3NCwgMTcyNzcsIDE3MjgwLCAxNzI4MywgMTcyODYsIDE3Mjg5LCAKLSAgICAxNzI5MywgMTcyOTcsIDE3MzAxLCAxNzMwNSwgMTczMDksIDE3MzEzLCAxNzMxNywgMTczMjEsIDE3MzI1LCAxNzMzMCwgCi0gICAgMTczMzYsIDE3MzQ2LCAxNzM2MCwgMTczNzAsIDE3Mzc2LCAxNzM4MiwgMTczOTAsIDE3Mzk4LCAxNzQwNiwgMTc0MTQsIAotICAgIDE3NDIwLCAxNzQyNiwgMTc0MjksIDE3NDMzLCAxNzQzNywgMTc0NDEsIDE3NDQ1LCAxNzQ0OSwgMTc0NTMsIDAsIDE3NDU3LCAKLSAgICAxNzQ2MSwgMTc0NjUsIDE3NDY5LCAxNzQ3MywgMTc0NzcsIDE3NDgxLCAxNzQ4NSwgMTc0ODksIDE3NDkzLCAxNzQ5NywgCi0gICAgMTc1MDAsIDE3NTAzLCAxNzUwNywgMTc1MTEsIDE3NTE1LCAxNzUxOCwgMTc1MjIsIDE3NTI2LCAxNzUzMCwgMTc1MzQsIAotICAgIDE3NTM4LCAxNzU0MiwgMTc1NDYsIDE3NTUwLCAxNzU1MywgMTc1NTYsIDE3NTYwLCAxNzU2NCwgMTc1NjgsIDE3NTcxLCAKLSAgICAxNzU3NCwgMTc1NzcsIDE3NTgxLCAxNzU4NiwgMTc1OTAsIDAsIDAsIDAsIDAsIDE3NTk0LCAxNzU5OSwgMTc2MDMsIAotICAgIDE3NjA4LCAxNzYxMiwgMTc2MTcsIDE3NjIyLCAxNzYyOCwgMTc2MzMsIDE3NjM5LCAxNzY0MywgMTc2NDgsIDE3NjUyLCAKLSAgICAxNzY1NywgMTc2NjcsIDE3NjczLCAxNzY3OSwgMTc2ODYsIDE3Njk2LCAxNzcwMiwgMTc3MDYsIDE3NzEwLCAxNzcxNiwgCi0gICAgMTc3MjIsIDE3NzMwLCAxNzczNiwgMTc3NDQsIDE3NzUyLCAxNzc2MCwgMTc3NzAsIDE3Nzc4LCAxNzc4OCwgMTc3OTMsIAotICAgIDE3Nzk5LCAxNzgwNSwgMTc4MTEsIDE3ODE3LCAxNzgyMywgMTc4MjksIDAsIDE3ODM1LCAxNzg0MSwgMTc4NDcsIDE3ODUzLCAKLSAgICAxNzg1OSwgMTc4NjUsIDE3ODcxLCAxNzg3NywgMTc4ODMsIDE3ODg5LCAxNzg5NSwgMTc5MDAsIDE3OTA1LCAxNzkxMSwgCi0gICAgMTc5MTcsIDE3OTIzLCAxNzkyOCwgMTc5MzQsIDE3OTQwLCAxNzk0NiwgMTc5NTIsIDE3OTU4LCAxNzk2NCwgMTc5NzAsIAotICAgIDE3OTc2LCAxNzk4MSwgMTc5ODYsIDE3OTkyLCAxNzk5OCwgMTgwMDQsIDE4MDA5LCAxODAxNCwgMTgwMTksIDE4MDI1LCAKLSAgICAxODAzMywgMTgwNDAsIDAsIDE4MDQ3LCAxODA1NCwgMTgwNjcsIDE4MDc0LCAxODA4MSwgMTgwODksIDE4MDk3LCAxODEwMywgCi0gICAgMTgxMDksIDE4MTE1LCAxODEyNSwgMTgxMzAsIDE4MTM2LCAxODE0NiwgMTgxNTYsIDAsIDE4MTY2LCAxODE3NiwgMTgxODQsIAotICAgIDE4MTk2LCAxODIwOCwgMTgyMTQsIDE4MjI4LCAxODI0MywgMTgyNDgsIDE4MjUzLCAxODI2MSwgMTgyNjksIDE4Mjc3LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxNjU5NSwgMTY2MDAsIDAsIDE2NjA3LCAwLCAwLCAxNjYxNCwgCisgICAgMTY2MTksIDAsIDE2NjI0LCAwLCAwLCAxNjYzMSwgMCwgMCwgMCwgMCwgMCwgMCwgMTY2MzYsIDE2NjQxLCAxNjY0NSwgCisgICAgMTY2NTIsIDAsIDE2NjU5LCAxNjY2NCwgMTY2NjksIDE2Njc0LCAxNjY4MSwgMTY2ODgsIDE2Njk1LCAwLCAxNjcwMiwgCisgICAgMTY3MDcsIDE2NzEyLCAwLCAxNjcxOSwgMCwgMTY3MjYsIDAsIDAsIDE2NzMxLCAxNjczOCwgMCwgMTY3NDUsIDE2NzQ5LCAKKyAgICAxNjc1NiwgMTY3NjAsIDE2NzY1LCAxNjc3MywgMTY3NzksIDE2Nzg1LCAxNjc5MCwgMTY3OTYsIDE2ODAyLCAxNjgwOCwgCisgICAgMTY4MTMsIDAsIDE2ODE5LCAxNjgyNywgMTY4MzQsIDAsIDAsIDE2ODQxLCAxNjg0NiwgMTY4NTIsIDE2ODU3LCAxNjg2MywgCisgICAgMCwgMTY4NjksIDAsIDE2ODc1LCAxNjg4MiwgMTY4ODksIDE2ODk2LCAxNjkwMywgMTY5MDgsIDAsIDAsIDE2OTEyLCAKKyAgICAxNjkxNywgMTY5MjEsIDE2OTI1LCAxNjkyOSwgMTY5MzMsIDE2OTM3LCAxNjk0MSwgMTY5NDUsIDE2OTQ5LCAwLCAwLCAKKyAgICAxNjk1MywgMTY5NTksIDE2OTY1LCAxNjk3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTY5NzksIDE2OTgzLCAxNjk5NCwgCisgICAgMTcwMDksIDE3MDI0LCAxNzAzNCwgMTcwNDUsIDE3MDU4LCAxNzA2OSwgMTcwNzUsIDE3MDgzLCAxNzA5MywgMTcwOTksIAorICAgIDE3MTA3LCAxNzExMSwgMTcxMTcsIDE3MTIzLCAxNzEzMSwgMTcxNDEsIDE3MTQ5LCAxNzE2MiwgMTcxNjgsIDE3MTc2LCAKKyAgICAxNzE4NCwgMTcxOTYsIDE3MjAzLCAxNzIxMSwgMTcyMTksIDE3MjI3LCAxNzIzNSwgMTcyNDMsIDE3MjUxLCAxNzI2MSwgCisgICAgMTcyNjUsIDE3MjY4LCAxNzI3MSwgMTcyNzQsIDE3Mjc3LCAxNzI4MCwgMTcyODMsIDE3Mjg2LCAxNzI4OSwgMTcyOTIsIAorICAgIDE3Mjk2LCAxNzMwMCwgMTczMDQsIDE3MzA4LCAxNzMxMiwgMTczMTYsIDE3MzIwLCAxNzMyNCwgMTczMjgsIDE3MzMzLCAKKyAgICAxNzMzOSwgMTczNDksIDE3MzYzLCAxNzM3MywgMTczNzksIDE3Mzg1LCAxNzM5MywgMTc0MDEsIDE3NDA5LCAxNzQxNywgCisgICAgMTc0MjMsIDE3NDI5LCAxNzQzMiwgMTc0MzYsIDE3NDQwLCAxNzQ0NCwgMTc0NDgsIDE3NDUyLCAxNzQ1NiwgMCwgMTc0NjAsIAorICAgIDE3NDY0LCAxNzQ2OCwgMTc0NzIsIDE3NDc2LCAxNzQ4MCwgMTc0ODQsIDE3NDg4LCAxNzQ5MiwgMTc0OTYsIDE3NTAwLCAKKyAgICAxNzUwMywgMTc1MDYsIDE3NTEwLCAxNzUxNCwgMTc1MTgsIDE3NTIxLCAxNzUyNSwgMTc1MjksIDE3NTMzLCAxNzUzNywgCisgICAgMTc1NDEsIDE3NTQ1LCAxNzU0OSwgMTc1NTMsIDE3NTU2LCAxNzU1OSwgMTc1NjMsIDE3NTY3LCAxNzU3MSwgMTc1NzQsIAorICAgIDE3NTc3LCAxNzU4MCwgMTc1ODQsIDE3NTg5LCAxNzU5MywgMCwgMCwgMCwgMCwgMTc1OTcsIDE3NjAyLCAxNzYwNiwgCisgICAgMTc2MTEsIDE3NjE1LCAxNzYyMCwgMTc2MjUsIDE3NjMxLCAxNzYzNiwgMTc2NDIsIDE3NjQ2LCAxNzY1MSwgMTc2NTUsIAorICAgIDE3NjYwLCAxNzY3MCwgMTc2NzYsIDE3NjgyLCAxNzY4OSwgMTc2OTksIDE3NzA1LCAxNzcwOSwgMTc3MTMsIDE3NzE5LCAKKyAgICAxNzcyNSwgMTc3MzMsIDE3NzM5LCAxNzc0NywgMTc3NTUsIDE3NzYzLCAxNzc3MywgMTc3ODEsIDE3NzkxLCAxNzc5NiwgCisgICAgMTc4MDIsIDE3ODA4LCAxNzgxNCwgMTc4MjAsIDE3ODI2LCAxNzgzMiwgMCwgMTc4MzgsIDE3ODQ0LCAxNzg1MCwgMTc4NTYsIAorICAgIDE3ODYyLCAxNzg2OCwgMTc4NzQsIDE3ODgwLCAxNzg4NiwgMTc4OTIsIDE3ODk4LCAxNzkwMywgMTc5MDgsIDE3OTE0LCAKKyAgICAxNzkyMCwgMTc5MjYsIDE3OTMxLCAxNzkzNywgMTc5NDMsIDE3OTQ5LCAxNzk1NSwgMTc5NjEsIDE3OTY3LCAxNzk3MywgCisgICAgMTc5NzksIDE3OTg0LCAxNzk4OSwgMTc5OTUsIDE4MDAxLCAxODAwNywgMTgwMTIsIDE4MDE3LCAxODAyMiwgMTgwMjgsIAorICAgIDE4MDM2LCAxODA0MywgMCwgMTgwNTAsIDE4MDU3LCAxODA3MCwgMTgwNzcsIDE4MDg0LCAxODA5MiwgMTgxMDAsIDE4MTA2LCAKKyAgICAxODExMiwgMTgxMTgsIDE4MTI4LCAxODEzMywgMTgxMzksIDE4MTQ5LCAxODE1OSwgMCwgMTgxNjksIDE4MTc5LCAxODE4NywgCisgICAgMTgxOTksIDE4MjExLCAxODIxNywgMTgyMzEsIDE4MjQ2LCAxODI1MSwgMTgyNTYsIDE4MjY0LCAxODI3MiwgMTgyODAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4Mjg1LCAxODI4OCwgMTgyOTIsIDE4Mjk2LCAxODMwMCwgCi0gICAgMTgzMDQsIDE4MzA4LCAxODMxMiwgMTgzMTYsIDE4MzIwLCAxODMyNCwgMTgzMjgsIDE4MzMyLCAxODMzNiwgMTgzNDAsIAotICAgIDE4MzQ0LCAxODM0OCwgMTgzNTIsIDE4MzU2LCAxODM2MCwgMTgzNjQsIDE4MzY3LCAxODM3MCwgMTgzNzQsIDE4Mzc4LCAKLSAgICAxODM4MiwgMTgzODUsIDE4Mzg4LCAxODM5MSwgMTgzOTUsIDE4Mzk5LCAxODQwMiwgMTg0MDUsIDE4NDA5LCAxODQxMiwgCi0gICAgMTg0MTcsIDE4NDIwLCAxODQyNCwgMTg0MjcsIDE4NDMxLCAxODQzNCwgMTg0MzksIDE4NDQyLCAxODQ0NiwgMTg0NTMsIAotICAgIDE4NDU4LCAxODQ2MiwgMTg0NjcsIDE4NDcxLCAxODQ3NiwgMTg0ODAsIDE4NDg1LCAxODQ5MiwgMTg0OTgsIDE4NTAzLCAKLSAgICAxODUwNywgMTg1MTEsIDE4NTE1LCAxODUxOSwgMTg1MjMsIDE4NTI4LCAxODUzMywgMTg1MzksIDE4NTQ0LCAxODU0OSwgCi0gICAgMTg1NTMsIDE4NTU2LCAxODU1OSwgMTg1NjIsIDE4NTY1LCAxODU2OCwgMTg1NzEsIDE4NTc0LCAxODU3NywgMTg1ODAsIAotICAgIDE4NTg2LCAxODU5MCwgMTg1OTQsIDE4NTk4LCAxODYwMiwgMTg2MDYsIDE4NjEwLCAxODYxNCwgMTg2MTgsIDE4NjIzLCAKLSAgICAxODYyNywgMTg2MzIsIDE4NjM3LCAxODY0MywgMTg2NDgsIDE4NjU0LCAxODY2MCwgMTg2NjYsIDE4NjcyLCAxODY3OCwgCi0gICAgMTg2ODUsIDE4NjkyLCAxODcwMCwgMTg3MDgsIDE4NzE3LCAxODcyNiwgMTg3MzcsIDE4NzQ3LCAxODc1NywgMTg3NjgsIAotICAgIDE4Nzc5LCAxODc4OSwgMTg3OTksIDE4ODA5LCAxODgxOSwgMTg4MjksIDE4ODM5LCAxODg0OSwgMTg4NTksIDE4ODY3LCAKLSAgICAxODg3NCwgMTg4ODAsIDE4ODg3LCAxODg5MiwgMTg4OTgsIDE4OTA0LCAxODkxMCwgMTg5MTYsIDE4OTIyLCAxODkyOCwgCi0gICAgMTg5MzMsIDE4OTM5LCAxODk0NSwgMTg5NTEsIDE4OTU3LCAxODk2MiwgMTg5NzAsIDE4OTc3LCAxODk4MywgMTg5OTAsIAotICAgIDE4OTk4LCAxOTAwNCwgMTkwMTAsIDE5MDE2LCAxOTAyMiwgMTkwMzAsIDE5MDM4LCAxOTA0OCwgMTkwNTYsIDE5MDY0LCAKLSAgICAxOTA3MCwgMTkwNzUsIDE5MDgwLCAxOTA4NSwgMTkwOTAsIDE5MDk1LCAxOTEwMCwgMTkxMDUsIDE5MTEwLCAxOTExNSwgCi0gICAgMTkxMjEsIDE5MTI3LCAxOTEzMywgMTkxNDAsIDE5MTQ1LCAxOTE1MSwgMTkxNTYsIDE5MTYxLCAxOTE2NiwgMTkxNzEsIAotICAgIDE5MTc2LCAxOTE4MSwgMTkxODYsIDE5MTkxLCAxOTE5NiwgMTkyMDEsIDE5MjA2LCAxOTIxMSwgMTkyMTYsIDE5MjIxLCAKLSAgICAxOTIyNiwgMTkyMzEsIDE5MjM2LCAxOTI0MSwgMTkyNDYsIDE5MjUxLCAxOTI1NiwgMTkyNjEsIDE5MjY2LCAxOTI3MSwgCi0gICAgMTkyNzYsIDE5MjgxLCAxOTI4NiwgMTkyOTEsIDE5Mjk2LCAxOTMwMSwgMTkzMDYsIDE5MzExLCAxOTMxNiwgMTkzMjEsIAotICAgIDE5MzI2LCAxOTMzMSwgMTkzMzYsIDAsIDE5MzQxLCAwLCAwLCAwLCAwLCAwLCAxOTM0NiwgMCwgMCwgMTkzNTEsIDE5MzU1LCAKLSAgICAxOTM1OSwgMTkzNjMsIDE5MzY3LCAxOTM3MSwgMTkzNzUsIDE5Mzc5LCAxOTM4MywgMTkzODcsIDE5MzkxLCAxOTM5NSwgCi0gICAgMTkzOTksIDE5NDAzLCAxOTQwNywgMTk0MTEsIDE5NDE1LCAxOTQxOSwgMTk0MjMsIDE5NDI3LCAxOTQzMSwgMTk0MzUsIAotICAgIDE5NDM5LCAxOTQ0MywgMTk0NDcsIDE5NDUxLCAxOTQ1NSwgMTk0NTksIDE5NDYzLCAxOTQ2NywgMTk0NzEsIDE5NDc1LCAKLSAgICAxOTQ3OSwgMTk0ODMsIDE5NDg3LCAxOTQ5MSwgMTk0OTUsIDE5NDk5LCAxOTUwMywgMTk1MDcsIDE5NTExLCAxOTUxNSwgCi0gICAgMTk1MjEsIDE5NTI1LCAxOTUzMCwgMTk1MzUsIDE5NTM5LCAxOTU0NCwgMTk1NDksIDE5NTUzLCAxOTU1NywgMTk1NjEsIAotICAgIDE5NTY1LCAxOTU2OSwgMTk1NzMsIDE5NTc3LCAxOTU4MSwgMTk1ODUsIDE5NTg5LCAxOTU5MywgMTk1OTcsIDE5NjAxLCAKLSAgICAxOTYwNSwgMTk2MDksIDE5NjEzLCAxOTYxNywgMTk2MjEsIDE5NjI1LCAxOTYyOSwgMTk2MzMsIDE5NjM3LCAxOTY0MSwgCi0gICAgMTk2NDUsIDE5NjQ5LCAxOTY1MywgMTk2NTcsIDE5NjYxLCAxOTY2NSwgMTk2NjksIDE5NjczLCAxOTY3NywgMTk2ODEsIAotICAgIDE5Njg1LCAxOTY4OSwgMTk2OTMsIDE5Njk3LCAxOTcwMSwgMTk3MDUsIDE5NzA5LCAxOTcxMywgMTk3MTcsIDE5NzIxLCAKLSAgICAxOTcyNSwgMTk3MjksIDE5NzMzLCAxOTczNywgMTk3NDEsIDE5NzQ1LCAxOTc0OSwgMTk3NTMsIDE5NzU3LCAxOTc2MSwgCi0gICAgMTk3NjUsIDE5NzY5LCAxOTc3MywgMTk3NzcsIDE5NzgxLCAxOTc4NSwgMTk3ODksIDE5NzkzLCAxOTc5NywgMTk4MDEsIAotICAgIDE5ODA1LCAxOTgwOSwgMTk4MTMsIDE5ODE3LCAxOTgyMSwgMTk4MjUsIDE5ODI5LCAxOTgzMywgMTk4MzcsIDE5ODQxLCAKLSAgICAxOTg0NSwgMTk4NDksIDE5ODUzLCAxOTg1NywgMTk4NjEsIDE5ODY1LCAxOTg2OSwgMTk4NzMsIDE5ODc3LCAxOTg4MSwgCi0gICAgMTk4ODUsIDE5ODg5LCAxOTg5MywgMTk4OTcsIDE5OTAxLCAxOTkwNSwgMTk5MDksIDE5OTEzLCAxOTkxNywgMTk5MjEsIAotICAgIDE5OTI1LCAxOTkyOSwgMTk5MzMsIDE5OTM3LCAxOTk0MCwgMTk5NDQsIDE5OTQ3LCAxOTk1MSwgMTk5NTUsIDE5OTU4LCAKLSAgICAxOTk2MiwgMTk5NjYsIDE5OTY5LCAxOTk3MywgMTk5NzcsIDE5OTgxLCAxOTk4NSwgMTk5ODgsIDE5OTkyLCAxOTk5NiwgCi0gICAgMjAwMDAsIDIwMDA0LCAyMDAwOCwgMjAwMTIsIDIwMDE1LCAyMDAxOSwgMjAwMjMsIDIwMDI3LCAyMDAzMSwgMjAwMzUsIAotICAgIDIwMDM5LCAyMDA0MywgMjAwNDcsIDIwMDUxLCAyMDA1NSwgMjAwNTksIDIwMDYzLCAyMDA2NywgMjAwNzEsIDIwMDc1LCAKLSAgICAyMDA3OSwgMjAwODMsIDIwMDg3LCAyMDA5MSwgMjAwOTUsIDIwMDk5LCAyMDEwMywgMjAxMDcsIDIwMTExLCAyMDExNSwgCi0gICAgMjAxMTksIDIwMTIzLCAyMDEyNywgMjAxMzEsIDIwMTM1LCAyMDEzOSwgMjAxNDMsIDIwMTQ3LCAyMDE1MSwgMjAxNTUsIAotICAgIDIwMTU5LCAyMDE2MywgMjAxNjcsIDIwMTcxLCAyMDE3NSwgMjAxNzksIDIwMTgzLCAyMDE4NywgMjAxOTEsIDIwMTk1LCAKLSAgICAyMDE5OSwgMjAyMDMsIDIwMjA3LCAyMDIxMSwgMjAyMTUsIDIwMjE5LCAyMDIyMywgMjAyMjcsIDIwMjMxLCAyMDIzNSwgCi0gICAgMjAyMzksIDIwMjQzLCAyMDI0NywgMjAyNTEsIDIwMjU1LCAyMDI1OSwgMjAyNjMsIDIwMjY3LCAyMDI3MSwgMjAyNzUsIAotICAgIDIwMjc5LCAyMDI4MywgMjAyODcsIDIwMjkxLCAyMDI5NSwgMjAyOTksIDIwMzAzLCAyMDMwNywgMjAzMTEsIDIwMzE1LCAKLSAgICAyMDMxOSwgMjAzMjMsIDIwMzI3LCAyMDMzMSwgMjAzMzUsIDIwMzM5LCAyMDM0MywgMjAzNDcsIDIwMzUxLCAyMDM1NSwgCi0gICAgMjAzNTksIDIwMzYzLCAyMDM2NywgMjAzNzEsIDIwMzc1LCAyMDM3OSwgMjAzODMsIDIwMzg3LCAyMDM5MSwgMjAzOTUsIAotICAgIDIwMzk5LCAyMDQwMywgMjA0MDcsIDIwNDExLCAyMDQxNSwgMjA0MTksIDIwNDIzLCAyMDQyNywgMjA0MzEsIDIwNDM1LCAKLSAgICAyMDQzOSwgMjA0NDMsIDIwNDQ3LCAyMDQ1MSwgMjA0NTUsIDIwNDU5LCAyMDQ2MywgMjA0NjcsIDIwNDcxLCAyMDQ3NSwgCi0gICAgMjA0NzksIDIwNDgzLCAyMDQ4NywgMjA0OTEsIDIwNDk1LCAyMDQ5OSwgMjA1MDMsIDIwNTA3LCAyMDUxMSwgMjA1MTUsIAotICAgIDIwNTE5LCAyMDUyMywgMjA1MjcsIDIwNTMxLCAyMDUzNSwgMjA1MzksIDIwNTQzLCAyMDU0NywgMjA1NTEsIDIwNTU1LCAKLSAgICAyMDU1OSwgMjA1NjMsIDIwNTY3LCAyMDU3MCwgMjA1NzQsIDIwNTc4LCAyMDU4MiwgMjA1ODYsIDIwNTkwLCAyMDU5NCwgCi0gICAgMjA1OTgsIDIwNjAyLCAyMDYwNiwgMjA2MTAsIDIwNjE0LCAyMDYxOCwgMjA2MjIsIDIwNjI2LCAyMDYzMCwgMjA2MzQsIAotICAgIDIwNjM4LCAyMDY0MiwgMjA2NDYsIDIwNjUwLCAyMDY1NCwgMjA2NTgsIDIwNjYyLCAyMDY2NSwgMjA2NjksIDIwNjczLCAKLSAgICAyMDY3NywgMjA2ODEsIDIwNjg1LCAyMDY4OSwgMjA2OTMsIDIwNjk3LCAyMDcwMSwgMjA3MDUsIDIwNzA5LCAyMDcxMywgCi0gICAgMjA3MTcsIDIwNzIxLCAyMDcyNSwgMjA3MjgsIDIwNzMyLCAyMDczNiwgMjA3NDAsIDIwNzQ0LCAyMDc0OCwgMjA3NTIsIAotICAgIDIwNzU2LCAyMDc1OSwgMjA3NjMsIDIwNzY3LCAyMDc3MSwgMjA3NzUsIDIwNzc5LCAyMDc4MywgMjA3ODcsIDIwNzkxLCAKLSAgICAyMDc5NSwgMjA3OTksIDIwODAzLCAyMDgwNywgMjA4MTEsIDIwODE1LCAyMDgxOSwgMjA4MjMsIDIwODI3LCAyMDgzMSwgCi0gICAgMjA4MzUsIDIwODM5LCAyMDg0MywgMjA4NDcsIDIwODUxLCAwLCAyMDg1NSwgMjA4NTksIDIwODYzLCAyMDg2NywgMCwgMCwgCi0gICAgMjA4NzEsIDIwODc1LCAyMDg3OSwgMjA4ODMsIDIwODg3LCAyMDg5MSwgMjA4OTUsIDAsIDIwODk5LCAwLCAyMDkwMywgCi0gICAgMjA5MDcsIDIwOTExLCAyMDkxNSwgMCwgMCwgMjA5MTksIDIwOTIzLCAyMDkyNywgMjA5MzEsIDIwOTM1LCAyMDkzOSwgCi0gICAgMjA5NDMsIDIwOTQ3LCAyMDk1MSwgMjA5NTUsIDIwOTU5LCAyMDk2MywgMjA5NjcsIDIwOTcxLCAyMDk3NSwgMjA5NzksIAotICAgIDIwOTgzLCAyMDk4NywgMjA5OTEsIDIwOTk1LCAyMDk5OSwgMjEwMDMsIDIxMDA3LCAyMTAxMCwgMjEwMTQsIDIxMDE4LCAKLSAgICAyMTAyMiwgMjEwMjYsIDIxMDMwLCAyMTAzNCwgMjEwMzgsIDIxMDQyLCAyMTA0NiwgMjEwNTAsIDIxMDU0LCAyMTA1OCwgCi0gICAgMjEwNjIsIDIxMDY2LCAyMTA3MCwgMjEwNzQsIDIxMDc4LCAwLCAyMTA4MiwgMjEwODYsIDIxMDkwLCAyMTA5NCwgMCwgMCwgCi0gICAgMjEwOTgsIDIxMTAxLCAyMTEwNSwgMjExMDksIDIxMTEzLCAyMTExNywgMjExMjEsIDIxMTI1LCAyMTEyOSwgMjExMzMsIAotICAgIDIxMTM3LCAyMTE0MSwgMjExNDUsIDIxMTQ5LCAyMTE1MywgMjExNTcsIDIxMTYxLCAyMTE2NiwgMjExNzEsIDIxMTc2LCAKLSAgICAyMTE4MiwgMjExODgsIDIxMTkzLCAyMTE5OCwgMjEyMDQsIDIxMjA3LCAyMTIxMSwgMjEyMTUsIDIxMjE5LCAyMTIyMywgCi0gICAgMjEyMjcsIDIxMjMxLCAyMTIzNSwgMCwgMjEyMzksIDIxMjQzLCAyMTI0NywgMjEyNTEsIDAsIDAsIDIxMjU1LCAyMTI1OSwgCi0gICAgMjEyNjMsIDIxMjY3LCAyMTI3MSwgMjEyNzUsIDIxMjc5LCAwLCAyMTI4MywgMCwgMjEyODcsIDIxMjkxLCAyMTI5NSwgCi0gICAgMjEyOTksIDAsIDAsIDIxMzAzLCAyMTMwNywgMjEzMTEsIDIxMzE1LCAyMTMxOSwgMjEzMjMsIDIxMzI3LCAyMTMzMSwgCi0gICAgMjEzMzUsIDIxMzQwLCAyMTM0NSwgMjEzNTAsIDIxMzU2LCAyMTM2MiwgMjEzNjcsIDAsIDIxMzcyLCAyMTM3NiwgMjEzODAsIAotICAgIDIxMzg0LCAyMTM4OCwgMjEzOTIsIDIxMzk2LCAyMTQwMCwgMjE0MDQsIDIxNDA4LCAyMTQxMiwgMjE0MTYsIDIxNDIwLCAKLSAgICAyMTQyNCwgMjE0MjgsIDIxNDMyLCAyMTQzNiwgMjE0MzksIDIxNDQzLCAyMTQ0NywgMjE0NTEsIDIxNDU1LCAyMTQ1OSwgCi0gICAgMjE0NjMsIDIxNDY3LCAyMTQ3MSwgMjE0NzUsIDIxNDc5LCAyMTQ4MywgMjE0ODcsIDIxNDkxLCAyMTQ5NSwgMjE0OTksIAotICAgIDIxNTAzLCAyMTUwNywgMjE1MTEsIDIxNTE1LCAyMTUxOSwgMjE1MjMsIDIxNTI3LCAyMTUzMSwgMjE1MzUsIDIxNTM5LCAKLSAgICAyMTU0MywgMjE1NDcsIDIxNTUxLCAyMTU1NSwgMjE1NTksIDIxNTYzLCAyMTU2NywgMjE1NzEsIDIxNTc1LCAyMTU3OSwgCi0gICAgMjE1ODMsIDIxNTg3LCAyMTU5MSwgMjE1OTUsIDAsIDIxNTk5LCAyMTYwMywgMjE2MDcsIDIxNjExLCAwLCAwLCAyMTYxNSwgCi0gICAgMjE2MTksIDIxNjIzLCAyMTYyNywgMjE2MzEsIDIxNjM1LCAyMTYzOSwgMjE2NDMsIDIxNjQ3LCAyMTY1MSwgMjE2NTUsIAotICAgIDIxNjU5LCAyMTY2MywgMjE2NjcsIDIxNjcxLCAyMTY3NSwgMjE2NzksIDIxNjgzLCAyMTY4NywgMjE2OTEsIDIxNjk1LCAKLSAgICAyMTY5OSwgMjE3MDMsIDIxNzA3LCAyMTcxMSwgMjE3MTUsIDIxNzE5LCAyMTcyMywgMjE3MjcsIDIxNzMxLCAyMTczNSwgCi0gICAgMjE3MzksIDIxNzQzLCAyMTc0NywgMjE3NTEsIDIxNzU1LCAyMTc1OSwgMjE3NjMsIDIxNzY3LCAyMTc3MSwgMjE3NzUsIAotICAgIDIxNzc5LCAyMTc4MywgMjE3ODcsIDIxNzkxLCAyMTc5NSwgMjE3OTksIDIxODAzLCAyMTgwNywgMjE4MTEsIDIxODE1LCAKLSAgICAyMTgxOSwgMjE4MjMsIDIxODI3LCAyMTgzMSwgMjE4MzUsIDIxODM5LCAyMTg0MiwgMjE4NDYsIDIxODUwLCAyMTg1NCwgCi0gICAgMjE4NTgsIDIxODYyLCAyMTg2NiwgMjE4NzAsIDIxODc0LCAyMTg3OCwgMCwgMCwgMjE4ODIsIDIxODkxLCAyMTg5NywgCi0gICAgMjE5MDIsIDIxOTA2LCAyMTkwOSwgMjE5MTQsIDIxOTE3LCAyMTkyMCwgMjE5MjMsIDIxOTI4LCAyMTkzMiwgMjE5MzcsIAotICAgIDIxOTQwLCAyMTk0MywgMjE5NDYsIDIxOTQ5LCAyMTk1MiwgMjE5NTUsIDIxOTU4LCAyMTk2MSwgMjE5NjQsIDIxOTY4LCAKLSAgICAyMTk3MiwgMjE5NzYsIDIxOTgwLCAyMTk4NCwgMjE5ODgsIDIxOTkyLCAyMTk5NiwgMjIwMDAsIDIyMDA0LCAwLCAwLCAwLCAKLSAgICAyMjAxMCwgMjIwMTYsIDIyMDIwLCAyMjAyNCwgMjIwMjgsIDIyMDM0LCAyMjAzOCwgMjIwNDIsIDIyMDQ2LCAyMjA1MiwgCi0gICAgMjIwNTYsIDIyMDYwLCAyMjA2NCwgMjIwNzAsIDIyMDc0LCAyMjA3OCwgMjIwODIsIDIyMDg4LCAyMjA5NCwgMjIxMDAsIAotICAgIDIyMTA4LCAyMjExNCwgMjIxMjAsIDIyMTI2LCAyMjEzMiwgMjIxMzgsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTQ0LCAyMjE0NywgCi0gICAgMjIxNTAsIDIyMTUzLCAyMjE1NiwgMjIxNTksIDIyMTYzLCAyMjE2NywgMjIxNzAsIDIyMTc0LCAyMjE3OCwgMjIxODIsIAotICAgIDIyMTg2LCAyMjE5MCwgMjIxOTMsIDIyMTk3LCAyMjIwMSwgMjIyMDUsIDIyMjA5LCAyMjIxMywgMjIyMTcsIDIyMjIxLCAKLSAgICAyMjIyNSwgMjIyMjksIDIyMjMzLCAyMjIzNywgMjIyNDAsIDIyMjQ0LCAyMjI0OCwgMjIyNTIsIDIyMjU2LCAyMjI1OSwgCi0gICAgMjIyNjMsIDIyMjY3LCAyMjI3MSwgMjIyNzUsIDIyMjc5LCAyMjI4MywgMjIyODcsIDIyMjkxLCAyMjI5NSwgMjIyOTksIAotICAgIDIyMzAzLCAyMjMwNywgMjIzMTEsIDIyMzE0LCAyMjMxOCwgMjIzMjIsIDIyMzI2LCAyMjMzMCwgMjIzMzQsIDIyMzM4LCAKLSAgICAyMjM0MiwgMjIzNDYsIDIyMzUwLCAyMjM1NCwgMjIzNTgsIDIyMzYyLCAyMjM2NiwgMjIzNzAsIDIyMzc0LCAyMjM3OCwgCi0gICAgMjIzODIsIDIyMzg2LCAyMjM5MCwgMjIzOTQsIDIyMzk4LCAyMjQwMiwgMjI0MDYsIDIyNDEwLCAyMjQxNCwgMjI0MTgsIAotICAgIDIyNDIyLCAyMjQyNiwgMjI0MzAsIDIyNDM0LCAyMjQzOCwgMjI0NDIsIDIyNDQ2LCAyMjQ1MCwgMjI0NTMsIDIyNDU3LCAKLSAgICAyMjQ2MSwgMjI0NjUsIDIyNDY5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjQ3MywgMjI0NzcsIAotICAgIDIyNDgwLCAyMjQ4NCwgMjI0ODcsIDIyNDkxLCAyMjQ5NCwgMjI0OTgsIDIyNTA0LCAyMjUwOSwgMjI1MTMsIDIyNTE2LCAKLSAgICAyMjUyMCwgMjI1MjQsIDIyNTI5LCAyMjUzMywgMjI1MzgsIDIyNTQyLCAyMjU0NywgMjI1NTEsIDIyNTU2LCAyMjU2MCwgCi0gICAgMjI1NjUsIDIyNTcxLCAyMjU3NSwgMjI1ODAsIDIyNTg0LCAyMjU4OSwgMjI1OTUsIDIyNTk5LCAyMjYwNSwgMjI2MTEsIAotICAgIDIyNjE1LCAyMjYyMCwgMjI2MjgsIDIyNjM2LCAyMjY0MywgMjI2NDgsIDIyNjUzLCAyMjY2MiwgMjI2NjksIDIyNjc2LCAKLSAgICAyMjY4MSwgMjI2ODcsIDIyNjkxLCAyMjY5NSwgMjI2OTksIDIyNzAzLCAyMjcwNywgMjI3MTEsIDIyNzE1LCAyMjcxOSwgCi0gICAgMjI3MjMsIDIyNzI3LCAyMjczMywgMjI3MzgsIDIyNzQzLCAyMjc0NiwgMjI3NTAsIDIyNzU0LCAyMjc1OSwgMjI3NjMsIAotICAgIDIyNzY4LCAyMjc3MiwgMjI3NzcsIDIyNzgxLCAyMjc4NiwgMjI3OTAsIDIyNzk1LCAyMjc5OSwgMjI4MDQsIDIyODA4LCAKLSAgICAyMjgxMywgMjI4MTksIDIyODIzLCAyMjgyOCwgMjI4MzMsIDIyODM3LCAyMjg0MSwgMjI4NDUsIDIyODQ5LCAyMjg1MiwgCi0gICAgMjI4NTYsIDIyODYyLCAyMjg2NywgMjI4NzIsIDIyODc2LCAyMjg4MCwgMjI4ODQsIDIyODg5LCAyMjg5MywgMjI4OTgsIAotICAgIDIyOTAyLCAyMjkwNywgMjI5MTAsIDIyOTE0LCAyMjkxOCwgMjI5MjMsIDIyOTI3LCAyMjkzMiwgMjI5MzYsIDIyOTQxLCAKLSAgICAyMjk0NywgMjI5NTEsIDIyOTU1LCAyMjk1OSwgMjI5NjMsIDIyOTY3LCAyMjk3MSwgMjI5NzUsIDIyOTc5LCAyMjk4MywgCi0gICAgMjI5ODcsIDIyOTkxLCAyMjk5NywgMjMwMDAsIDIzMDA0LCAyMzAwOCwgMjMwMTMsIDIzMDE3LCAyMzAyMiwgMjMwMjYsIAotICAgIDIzMDMxLCAyMzAzNSwgMjMwNDAsIDIzMDQ0LCAyMzA0OSwgMjMwNTMsIDIzMDU4LCAyMzA2MiwgMjMwNjcsIDIzMDczLCAKLSAgICAyMzA3NywgMjMwODEsIDIzMDg3LCAyMzA5MywgMjMwOTksIDIzMTA1LCAyMzEwOSwgMjMxMTMsIDIzMTE3LCAyMzEyMSwgCi0gICAgMjMxMjUsIDIzMTI5LCAyMzEzNSwgMjMxMzksIDIzMTQzLCAyMzE0NywgMjMxNTIsIDIzMTU2LCAyMzE2MSwgMjMxNjUsIAotICAgIDIzMTcwLCAyMzE3NCwgMjMxNzksIDIzMTgzLCAyMzE4OCwgMjMxOTIsIDIzMTk3LCAyMzIwMSwgMjMyMDYsIDIzMjEyLCAKLSAgICAyMzIxNiwgMjMyMjIsIDIzMjI2LCAyMzIzMCwgMjMyMzQsIDIzMjM4LCAyMzI0MiwgMjMyNDYsIDIzMjUyLCAyMzI1NSwgCi0gICAgMjMyNTksIDIzMjYzLCAyMzI2OCwgMjMyNzIsIDIzMjc3LCAyMzI4MSwgMjMyODYsIDIzMjkwLCAyMzI5NSwgMjMyOTksIAotICAgIDIzMzA0LCAyMzMwOCwgMjMzMTMsIDIzMzE3LCAyMzMyMiwgMjMzMjgsIDIzMzMxLCAyMzMzNSwgMjMzMzksIDIzMzQ0LCAKLSAgICAyMzM0OSwgMjMzNTMsIDIzMzU3LCAyMzM2MSwgMjMzNjUsIDIzMzY5LCAyMzM3MywgMjMzNzksIDIzMzgyLCAyMzM4NiwgCi0gICAgMjMzOTAsIDIzMzk1LCAyMzM5OSwgMjM0MDQsIDIzNDA4LCAyMzQxMywgMjM0MTksIDIzNDIzLCAyMzQyOCwgMjM0MzIsIAotICAgIDIzNDM2LCAyMzQ0MCwgMjM0NDQsIDIzNDQ4LCAyMzQ1MiwgMjM0NTYsIDIzNDYyLCAyMzQ2NiwgMjM0NzAsIDIzNDc0LCAKLSAgICAyMzQ3OSwgMjM0ODMsIDIzNDg4LCAyMzQ5MiwgMjM0OTcsIDIzNTAxLCAyMzUwNiwgMjM1MTAsIDIzNTE1LCAyMzUxOSwgCi0gICAgMjM1MjQsIDIzNTI4LCAyMzUzMywgMjM1MzYsIDIzNTQwLCAyMzU0NCwgMjM1NDgsIDIzNTUyLCAyMzU1NiwgMjM1NjAsIAotICAgIDIzNTY0LCAyMzU2OCwgMjM1NzQsIDIzNTc3LCAyMzU4MSwgMjM1ODUsIDIzNTkwLCAyMzU5NCwgMjM1OTksIDIzNjAzLCAKLSAgICAyMzYwOCwgMjM2MTIsIDIzNjE3LCAyMzYyMSwgMjM2MjYsIDIzNjMwLCAyMzYzNSwgMjM2MzksIDIzNjQ0LCAyMzY1MCwgCi0gICAgMjM2NTQsIDIzNjYwLCAyMzY2NCwgMjM2NzAsIDIzNjc2LCAyMzY4MiwgMjM2ODgsIDIzNjk0LCAyMzcwMCwgMjM3MDYsIAotICAgIDIzNzEyLCAyMzcxNiwgMjM3MjAsIDIzNzI0LCAyMzcyOCwgMjM3MzIsIDIzNzM2LCAyMzc0MCwgMjM3NDQsIDIzNzQ5LCAKLSAgICAyMzc1MywgMjM3NTgsIDIzNzYyLCAyMzc2NywgMjM3NzEsIDIzNzc2LCAyMzc4MCwgMjM3ODUsIDIzNzg5LCAyMzc5NCwgCi0gICAgMjM3OTgsIDIzODAzLCAyMzgwNywgMjM4MTEsIDIzODE1LCAyMzgxOSwgMjM4MjMsIDIzODI3LCAyMzgzMSwgMjM4MzcsIAotICAgIDIzODQwLCAyMzg0NCwgMjM4NDgsIDIzODUzLCAyMzg1NywgMjM4NjIsIDIzODY2LCAyMzg3MSwgMjM4NzUsIDIzODgwLCAKLSAgICAyMzg4NCwgMjM4ODksIDIzODkzLCAyMzg5OCwgMjM5MDIsIDIzOTA3LCAyMzkxMywgMjM5MTcsIDIzOTIzLCAyMzkyOCwgCi0gICAgMjM5MzQsIDIzOTM4LCAyMzk0NCwgMjM5NDksIDIzOTUzLCAyMzk1NywgMjM5NjEsIDIzOTY1LCAyMzk2OSwgMjM5NzQsIAotICAgIDIzOTc3LCAyMzk4MSwgMjM5ODYsIDIzOTkwLCAyMzk5NSwgMjM5OTgsIDI0MDAyLCAyNDAwNiwgMjQwMTAsIDI0MDE0LCAKLSAgICAyNDAxOCwgMjQwMjIsIDI0MDI2LCAyNDAzMCwgMjQwMzQsIDI0MDM4LCAyNDA0MiwgMjQwNDcsIDI0MDUxLCAyNDA1NSwgCi0gICAgMjQwNjEsIDI0MDY1LCAyNDA3MSwgMjQwNzUsIDI0MDgxLCAyNDA4NSwgMjQwODksIDI0MDkzLCAyNDA5NywgMjQxMDEsIAotICAgIDI0MTA2LCAyNDExMCwgMjQxMTQsIDI0MTE4LCAyNDEyMiwgMjQxMjYsIDI0MTMwLCAyNDEzNCwgMjQxMzgsIDI0MTQyLCAKLSAgICAyNDE0NiwgMjQxNTIsIDI0MTU4LCAyNDE2NCwgMjQxNzAsIDI0MTc2LCAyNDE4MSwgMjQxODcsIDI0MTkzLCAyNDE5OSwgCi0gICAgMjQyMDMsIDI0MjA3LCAyNDIxMSwgMjQyMTUsIDI0MjE5LCAyNDIyMywgMjQyMjcsIDI0MjMxLCAyNDIzNSwgMjQyMzksIAotICAgIDI0MjQzLCAyNDI0NywgMjQyNTEsIDI0MjU2LCAyNDI2MSwgMjQyNjYsIDI0MjcwLCAyNDI3NCwgMjQyNzgsIDI0MjgyLCAKLSAgICAyNDI4NiwgMjQyOTAsIDI0Mjk0LCAyNDI5OCwgMjQzMDIsIDI0MzA2LCAyNDMxMiwgMjQzMTgsIDI0MzI0LCAyNDMzMCwgCi0gICAgMjQzMzYsIDI0MzQyLCAyNDM0OCwgMjQzNTQsIDI0MzYwLCAyNDM2NCwgMjQzNjgsIDI0MzcyLCAyNDM3NiwgMjQzODAsIAotICAgIDI0Mzg0LCAyNDM4OCwgMjQzOTQsIDI0NDAwLCAyNDQwNiwgMjQ0MTIsIDI0NDE4LCAyNDQyNCwgMjQ0MzAsIDI0NDM2LCAKLSAgICAyNDQ0MiwgMjQ0NDcsIDI0NDUyLCAyNDQ1NywgMjQ0NjIsIDI0NDY4LCAyNDQ3NCwgMjQ0ODAsIDI0NDg2LCAyNDQ5MiwgCi0gICAgMjQ0OTgsIDI0NTA0LCAyNDUwOSwgMjQ1MTUsIDI0NTIxLCAyNDUyNywgMjQ1MzIsIDI0NTM4LCAyNDU0NCwgMjQ1NTAsIAotICAgIDI0NTU1LCAyNDU2MCwgMjQ1NjUsIDI0NTcwLCAyNDU3NSwgMjQ1ODAsIDI0NTg1LCAyNDU5MCwgMjQ1OTUsIDI0NjAwLCAKLSAgICAyNDYwNSwgMjQ2MTAsIDI0NjE0LCAyNDYxOSwgMjQ2MjQsIDI0NjI5LCAyNDYzNCwgMjQ2MzksIDI0NjQ0LCAyNDY0OSwgCi0gICAgMjQ2NTQsIDI0NjU5LCAyNDY2NCwgMjQ2NjksIDI0Njc0LCAyNDY3OSwgMjQ2ODQsIDI0Njg5LCAyNDY5NCwgMjQ2OTksIAotICAgIDI0NzA0LCAyNDcwOSwgMjQ3MTQsIDI0NzE5LCAyNDcyNCwgMjQ3MjksIDI0NzM0LCAyNDczOSwgMjQ3NDQsIDI0NzQ5LCAKLSAgICAyNDc1NCwgMjQ3NTksIDI0NzYzLCAyNDc2OCwgMjQ3NzMsIDI0Nzc4LCAyNDc4MywgMjQ3ODgsIDI0NzkzLCAyNDc5OCwgCi0gICAgMjQ4MDMsIDI0ODA4LCAyNDgxMywgMjQ4MTgsIDI0ODIzLCAyNDgyOCwgMjQ4MzMsIDI0ODM4LCAyNDg0MywgMjQ4NDgsIAotICAgIDI0ODUzLCAyNDg1OCwgMjQ4NjMsIDI0ODY4LCAyNDg3MywgMjQ4NzgsIDI0ODgzLCAyNDg4OCwgMjQ4OTIsIDI0ODk3LCAKLSAgICAyNDkwMiwgMjQ5MDcsIDI0OTEyLCAyNDkxNywgMjQ5MjEsIDI0OTI2LCAyNDkzMSwgMjQ5MzYsIDI0OTQxLCAyNDk0NiwgCi0gICAgMjQ5NTAsIDI0OTU1LCAyNDk2MSwgMjQ5NjYsIDI0OTcxLCAyNDk3NiwgMjQ5ODEsIDI0OTg3LCAyNDk5MiwgMjQ5OTcsIAotICAgIDI1MDAyLCAyNTAwNywgMjUwMTIsIDI1MDE3LCAyNTAyMiwgMjUwMjcsIDI1MDMyLCAyNTAzNywgMjUwNDIsIDI1MDQ3LCAKLSAgICAyNTA1MiwgMjUwNTcsIDI1MDYyLCAyNTA2NywgMjUwNzIsIDI1MDc3LCAyNTA4MiwgMjUwODcsIDI1MDkyLCAyNTA5NywgCi0gICAgMjUxMDIsIDI1MTA3LCAyNTExMiwgMjUxMTcsIDI1MTIyLCAyNTEyNywgMjUxMzIsIDI1MTM3LCAyNTE0MiwgMjUxNDcsIAotICAgIDI1MTUyLCAyNTE1NywgMjUxNjIsIDI1MTY3LCAyNTE3MiwgMjUxNzcsIDI1MTgyLCAyNTE4NywgMjUxOTIsIDI1MTk3LCAKLSAgICAyNTIwMiwgMjUyMDcsIDI1MjEzLCAyNTIxOCwgMjUyMjMsIDI1MjI4LCAyNTIzMywgMjUyMzgsIDI1MjQzLCAyNTI0OCwgCi0gICAgMjUyNTMsIDI1MjU4LCAyNTI2MywgMjUyNjgsIDI1MjcyLCAyNTI3NywgMjUyODIsIDI1Mjg3LCAyNTI5MiwgMjUyOTcsIAotICAgIDI1MzAyLCAyNTMwNywgMjUzMTIsIDI1MzE3LCAyNTMyMiwgMjUzMjcsIDI1MzMyLCAyNTMzNywgMjUzNDIsIDI1MzQ3LCAKLSAgICAyNTM1MiwgMjUzNTcsIDI1MzYyLCAyNTM2NywgMjUzNzIsIDI1Mzc3LCAyNTM4MiwgMjUzODcsIDI1MzkyLCAyNTM5NywgCi0gICAgMjU0MDIsIDI1NDA4LCAyNTQxMiwgMjU0MTYsIDI1NDIwLCAyNTQyNCwgMjU0MjgsIDI1NDMyLCAyNTQzNiwgMjU0NDAsIAotICAgIDI1NDQ2LCAyNTQ1MiwgMjU0NTgsIDI1NDY0LCAyNTQ3MCwgMjU0NzYsIDI1NDgyLCAyNTQ4OSwgMjU0OTUsIDI1NTAwLCAKLSAgICAyNTUwNSwgMjU1MTAsIDI1NTE1LCAyNTUyMCwgMjU1MjUsIDI1NTMwLCAyNTUzNSwgMjU1NDAsIDI1NTQ1LCAyNTU1MCwgCi0gICAgMjU1NTUsIDI1NTYwLCAyNTU2NSwgMjU1NzAsIDI1NTc1LCAyNTU4MCwgMjU1ODUsIDI1NTkwLCAyNTU5NSwgMjU2MDAsIAotICAgIDI1NjA1LCAyNTYxMCwgMjU2MTUsIDI1NjIwLCAyNTYyNSwgMjU2MzAsIDI1NjM1LCAwLCAwLCAwLCAyNTY0MiwgMjU2NTIsIAotICAgIDI1NjU2LCAyNTY2MywgMjU2NjcsIDI1NjcxLCAyNTY3NSwgMjU2ODMsIDI1Njg3LCAyNTY5MiwgMjU2OTcsIDI1NzAyLCAKLSAgICAyNTcwNiwgMjU3MTEsIDI1NzE2LCAyNTcxOSwgMjU3MjMsIDI1NzI3LCAyNTczNiwgMjU3NDAsIDI1NzQ0LCAyNTc1MCwgCi0gICAgMjU3NTQsIDI1NzU4LCAyNTc2NiwgMjU3NzAsIDI1Nzc4LCAyNTc4NCwgMjU3OTAsIDI1Nzk2LCAyNTgwMiwgMjU4MTIsIAotICAgIDI1ODE4LCAyNTgyMiwgMjU4MzEsIDI1ODM0LCAyNTg0MCwgMjU4NDQsIDI1ODUwLCAyNTg1NSwgMjU4NjEsIDI1ODY5LCAKLSAgICAyNTg3NSwgMjU4ODEsIDI1ODg5LCAyNTg5NSwgMjU4OTksIDI1OTAzLCAyNTkxMywgMjU5MTksIDI1OTIzLCAyNTkzMywgCi0gICAgMjU5MzksIDI1OTQzLCAyNTk0NywgMjU5NTQsIDI1OTYxLCAyNTk2NiwgMjU5NzEsIDI1OTgwLCAyNTk4NCwgMjU5ODgsIAotICAgIDI1OTkyLCAyNjAwMCwgMjYwMDcsIDI2MDExLCAyNjAxNSwgMjYwMTksIDI2MDIzLCAyNjAyNywgMjYwMzEsIDI2MDM1LCAKLSAgICAyNjAzOSwgMjYwNDMsIDI2MDQ3LCAyNjA1MSwgMjYwNTYsIDI2MDYxLCAyNjA2NiwgMjYwNzAsIDI2MDc0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjA3OCwgMjYwODIsIDI2MDg2LCAyNjA5MCwgMjYwOTQsIAotICAgIDI2MDk5LCAyNjEwNCwgMjYxMDksIDI2MTE0LCAyNjExOCwgMjYxMjIsIDI2MTI3LCAyNjEzMSwgMCwgMjYxMzUsIDI2MTQwLCAKLSAgICAyNjE0NSwgMjYxNDksIDI2MTUzLCAyNjE1OCwgMjYxNjMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDI2MTY4LCAyNjE3MiwgMjYxNzYsIDI2MTgwLCAyNjE4NCwgMjYxODksIDI2MTk0LCAyNjE5OSwgMjYyMDQsIDI2MjA4LCAKLSAgICAyNjIxMiwgMjYyMTcsIDI2MjIxLCAyNjIyNSwgMjYyMjksIDI2MjM0LCAyNjIzOSwgMjYyNDMsIDI2MjQ3LCAyNjI1MiwgCi0gICAgMjYyNTcsIDI2MjYyLCAyNjI2OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYyNzMsIDI2Mjc3LCAyNjI4MSwgCi0gICAgMjYyODUsIDI2Mjg5LCAyNjI5NCwgMjYyOTksIDI2MzA0LCAyNjMwOSwgMjYzMTMsIDI2MzE3LCAyNjMyMiwgMjYzMjYsIAotICAgIDI2MzMwLCAyNjMzNCwgMjYzMzksIDI2MzQ0LCAyNjM0OCwgMjYzNTIsIDI2MzU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAyNjM2MiwgMjYzNjYsIDI2MzcwLCAyNjM3NCwgMjYzNzgsIDI2MzgzLCAyNjM4OCwgMjYzOTMsIAotICAgIDI2Mzk4LCAyNjQwMiwgMjY0MDYsIDI2NDExLCAyNjQxNSwgMCwgMjY0MTksIDI2NDI0LCAyNjQyOSwgMCwgMjY0MzMsIAotICAgIDI2NDM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjQ0MywgMjY0NDYsIDI2NDUwLCAyNjQ1NCwgCi0gICAgMjY0NTgsIDI2NDYyLCAyNjQ2NiwgMjY0NzAsIDI2NDc0LCAyNjQ3OCwgMjY0ODIsIDI2NDg2LCAyNjQ5MCwgMjY0OTQsIAotICAgIDI2NDk4LCAyNjUwMiwgMjY1MDYsIDI2NTEwLCAyNjUxMywgMjY1MTcsIDI2NTIxLCAyNjUyNSwgMjY1MjksIDI2NTMzLCAKLSAgICAyNjUzNywgMjY1NDEsIDI2NTQ1LCAyNjU0OSwgMjY1NTMsIDI2NTU3LCAyNjU2MSwgMjY1NjUsIDI2NTY4LCAyNjU3MSwgCi0gICAgMjY1NzUsIDI2NTc5LCAyNjU4NSwgMjY1OTEsIDI2NTk3LCAyNjYwMywgMjY2MDksIDI2NjE1LCAyNjYyMSwgMjY2MjcsIAotICAgIDI2NjMzLCAyNjYzOSwgMjY2NDUsIDI2NjUxLCAyNjY1NywgMjY2NjMsIDI2NjcyLCAyNjY4MSwgMjY2ODcsIDI2NjkzLCAKLSAgICAyNjY5OSwgMjY3MDQsIDI2NzA4LCAyNjcxMywgMjY3MTgsIDI2NzIzLCAyNjcyNywgMjY3MzIsIDI2NzM3LCAyNjc0MiwgCi0gICAgMjY3NDYsIDI2NzUxLCAyNjc1NSwgMjY3NjAsIDI2NzY1LCAyNjc3MCwgMjY3NzUsIDI2Nzc5LCAyNjc4MywgMjY3ODcsIAotICAgIDI2NzkxLCAyNjc5NSwgMjY3OTksIDI2ODAzLCAyNjgwNywgMjY4MTEsIDI2ODE1LCAyNjgyMSwgMjY4MjUsIDI2ODI5LCAKLSAgICAyNjgzMywgMjY4MzcsIDI2ODQxLCAyNjg0OSwgMjY4NTUsIDI2ODU5LCAyNjg2NSwgMjY4NjksIDI2ODc1LCAyNjg3OSwgMCwgCi0gICAgMCwgMjY4ODMsIDI2ODg3LCAyNjg5MCwgMjY4OTMsIDI2ODk2LCAyNjg5OSwgMjY5MDIsIDI2OTA1LCAyNjkwOCwgMjY5MTEsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI2OTE0LCAyNjkyMiwgMjY5MzAsIDI2OTM4LCAyNjk0NiwgMjY5NTQsIDI2OTYyLCAyNjk3MCwgCi0gICAgMjY5NzgsIDI2OTg2LCAwLCAwLCAwLCAwLCAwLCAwLCAyNjk5NCwgMjY5OTcsIDI3MDAwLCAyNzAwMywgMjcwMDgsIDI3MDExLCAKLSAgICAyNzAxNiwgMjcwMjMsIDI3MDMxLCAyNzAzNiwgMjcwNDMsIDI3MDQ2LCAyNzA1MywgMjcwNjAsIDI3MDY3LCAwLCAyNzA3MSwgCi0gICAgMjcwNzUsIDI3MDc4LCAyNzA4MSwgMjcwODQsIDI3MDg3LCAyNzA5MCwgMjcwOTMsIDI3MDk2LCAyNzA5OSwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMjcxMDIsIDI3MTA1LCAyNzEwOCwgMjcxMTEsIDI3MTE0LCAyNzExNywgMjcxMjEsIDI3MTI1LCAyNzEyOSwgCi0gICAgMjcxMzIsIDI3MTM2LCAyNzE0MCwgMjcxNDMsIDI3MTQ3LCAyNzE1MSwgMjcxNTQsIDI3MTU4LCAyNzE2MSwgMjcxNjUsIAotICAgIDI3MTY5LCAyNzE3MywgMjcxNzcsIDI3MTgxLCAyNzE4NCwgMjcxODcsIDI3MTkxLCAyNzE5NSwgMjcxOTgsIDI3MjAyLCAKLSAgICAyNzIwNiwgMjcyMTAsIDI3MjE0LCAyNzIxOCwgMjcyMjIsIDI3MjI2LCAyNzIzMCwgMjcyMzcsIDI3MjQyLCAyNzI0NywgCi0gICAgMjcyNTIsIDI3MjU3LCAyNzI2MywgMjcyNjksIDI3Mjc1LCAyNzI4MSwgMjcyODYsIDI3MjkyLCAyNzI5OCwgMjczMDMsIAotICAgIDI3MzA5LCAyNzMxNSwgMjczMjEsIDI3MzI3LCAyNzMzMywgMjczMzgsIDI3MzQ0LCAyNzM0OSwgMjczNTUsIDI3MzYxLCAKLSAgICAyNzM2NywgMjczNzMsIDI3Mzc5LCAyNzM4NCwgMjczODksIDI3Mzk1LCAyNzQwMSwgMjc0MDYsIDI3NDEyLCAyNzQxNywgCi0gICAgMjc0MjMsIDI3NDI4LCAyNzQzMywgMjc0MzksIDI3NDQ1LCAyNzQ1MSwgMjc0NTcsIDI3NDYzLCAyNzQ2OSwgMjc0NzUsIAotICAgIDI3NDgxLCAyNzQ4NywgMjc0OTMsIDI3NDk5LCAyNzUwNSwgMjc1MTAsIDI3NTE1LCAyNzUyMCwgMjc1MjYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDI3NTMyLCAyNzU0MSwgMjc1NTAsIDI3NTU4LCAyNzU2NiwgMjc1NzYsIDI3NTg0LCAyNzU5MywgCi0gICAgMjc2MDAsIDI3NjA3LCAyNzYxNCwgMjc2MjIsIDI3NjMwLCAyNzYzOCwgMjc2NDYsIDI3NjU0LCAyNzY2MiwgMjc2NzAsIAotICAgIDI3Njc4LCAyNzY4NSwgMjc2OTMsIDI3NzAxLCAyNzcwOSwgMjc3MTcsIDI3NzI1LCAyNzczNSwgMjc3NDUsIDI3NzU1LCAKLSAgICAyNzc2NSwgMjc3NzUsIDI3Nzg1LCAyNzc5NSwgMjc4MDUsIDI3ODE1LCAyNzgyNSwgMjc4MzUsIDI3ODQ1LCAyNzg1NSwgCi0gICAgMjc4NjUsIDI3ODczLCAyNzg4MSwgMjc4OTEsIDI3ODk5LCAwLCAwLCAwLCAwLCAwLCAyNzkwOSwgMjc5MTMsIDI3OTE3LCAKLSAgICAyNzkyMSwgMjc5MjUsIDI3OTI5LCAyNzkzMywgMjc5MzcsIDI3OTQxLCAyNzk0NSwgMjc5NDksIDI3OTUzLCAyNzk1NywgCi0gICAgMjc5NjEsIDI3OTY1LCAyNzk2OSwgMjc5NzMsIDI3OTc3LCAyNzk4MSwgMjc5ODUsIDI3OTg5LCAyNzk5MywgMjc5OTcsIAotICAgIDI4MDAxLCAyODAwNywgMjgwMTEsIDI4MDE3LCAyODAyMSwgMjgwMjcsIDI4MDMxLCAyODAzNywgMjgwNDEsIDI4MDQ1LCAKLSAgICAyODA0OSwgMjgwNTMsIDI4MDU3LCAyODA2MSwgMjgwNjcsIDI4MDczLCAyODA3OSwgMjgwODUsIDI4MDkwLCAyODA5NiwgCi0gICAgMjgxMDIsIDI4MTA4LCAyODExNCwgMjgxMjAsIDI4MTI2LCAyODEzMywgMjgxMzksIDI4MTQ0LCAyODE0OSwgMjgxNTMsIAotICAgIDI4MTU3LCAyODE2MSwgMjgxNjUsIDI4MTY5LCAyODE3MywgMjgxNzcsIDI4MTgzLCAyODE4OSwgMjgxOTUsIDI4MjAwLCAKLSAgICAyODIwNywgMjgyMTIsIDI4MjE3LCAyODIyMywgMjgyMjgsIDI4MjM1LCAyODI0MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMjgyNDksIDI4MjU1LCAyODI1OSwgMjgyNjQsIDI4MjY5LCAyODI3NCwgMjgyNzksIDI4Mjg0LCAyODI4OSwgCi0gICAgMjgyOTQsIDI4Mjk5LCAyODMwNCwgMjgzMDksIDI4MzE0LCAyODMxOSwgMjgzMjQsIDI4MzI4LCAyODMzMiwgMjgzMzcsIAotICAgIDI4MzQyLCAyODM0NywgMjgzNTEsIDI4MzU1LCAyODM1OSwgMjgzNjQsIDI4MzY5LCAyODM3NCwgMjgzNzksIDI4MzgzLCAwLCAKLSAgICAwLCAwLCAyODM4NywgMjgzOTIsIDI4Mzk3LCAyODQwMiwgMjg0MDgsIDI4NDE0LCAyODQyMCwgMjg0MjYsIDI4NDMxLCAKLSAgICAyODQzNiwgMjg0NDIsIDI4NDQ4LCAwLCAwLCAwLCAwLCAyODQ1NSwgMjg0NjAsIDI4NDY2LCAyODQ3MiwgMjg0NzgsIAotICAgIDI4NDgzLCAyODQ4OCwgMjg0OTMsIDI4NDk4LCAyODUwNCwgMjg1MDksIDI4NTE0LCAwLCAwLCAwLCAwLCAyODUxOSwgMCwgMCwgCi0gICAgMCwgMjg1MjQsIDI4NTI5LCAyODUzNCwgMjg1MzksIDI4NTQzLCAyODU0NywgMjg1NTEsIDI4NTU1LCAyODU1OSwgMjg1NjMsIAotICAgIDI4NTY3LCAyODU3MSwgMjg1NzUsIDI4NTgwLCAyODU4NiwgMjg1OTIsIDI4NTk4LCAyODYwMywgMjg2MDgsIDI4NjE0LCAKLSAgICAyODYyMCwgMjg2MjYsIDI4NjMxLCAyODYzNywgMjg2NDIsIDI4NjQ4LCAyODY1NCwgMjg2NTksIDI4NjY1LCAyODY3MSwgCi0gICAgMjg2NzcsIDI4NjgyLCAyODY4NywgMjg2OTIsIDI4Njk4LCAyODcwNCwgMjg3MDksIDI4NzE1LCAyODcyMCwgMjg3MjYsIAotICAgIDI4NzMxLCAyODczNywgMCwgMCwgMjg3NDMsIDI4NzQ5LCAyODc1NSwgMjg3NjEsIDI4NzY3LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAyODc3MywgMjg3ODAsIDI4Nzg3LCAyODc5MywgMjg4MDAsIDI4ODA3LCAyODgxMywgMjg4MjAsIAotICAgIDI4ODI3LCAyODgzNCwgMjg4NDAsIDI4ODQ2LCAyODg1MywgMjg4NTksIDI4ODY1LCAyODg3MiwgMjg4NzksIDI4ODg1LCAKLSAgICAyODg5MiwgMjg4OTksIDI4OTA1LCAyODkxMSwgMjg5MTgsIDI4OTI0LCAyODkzMCwgMjg5MzcsIDI4OTQzLCAyODk1MCwgCi0gICAgMjg5NTcsIDI4OTY0LCAyODk3MSwgMjg5NzgsIDI4OTg1LCAyODk5MSwgMjg5OTgsIDI5MDA1LCAyOTAxMSwgMjkwMTgsIAotICAgIDI5MDI1LCAyOTAzMiwgMjkwMzksIDI5MDQ2LCAyOTA1MywgMjkwNjAsIDAsIDAsIDAsIDAsIDI5MDY3LCAyOTA3NSwgCi0gICAgMjkwODIsIDI5MDg5LCAyOTA5NSwgMjkxMDIsIDI5MTA4LCAyOTExNSwgMjkxMjEsIDI5MTI4LCAyOTEzNSwgMjkxNDIsIAotICAgIDI5MTQ5LCAyOTE1NiwgMjkxNjMsIDI5MTcwLCAyOTE3NywgMjkxODQsIDI5MTkxLCAyOTE5OCwgMjkyMDUsIDI5MjExLCAKLSAgICAyOTIxOCwgMjkyMjUsIDI5MjMyLCAyOTIzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMjkyNDQsIDI5MjUwLCAyOTI1NSwgMjkyNjAsIAotICAgIDI5MjY1LCAyOTI3MCwgMjkyNzUsIDI5MjgwLCAyOTI4NSwgMjkyOTAsIDI5Mjk1LCAwLCAwLCAwLCAyOTMwMSwgMjkzMDcsIAotICAgIDI5MzEzLCAyOTMxNywgMjkzMjMsIDI5MzI5LCAyOTMzNSwgMjkzNDEsIDI5MzQ3LCAyOTM1MywgMjkzNTksIDI5MzY1LCAKLSAgICAyOTM3MSwgMjkzNzcsIDI5MzgzLCAyOTM4OSwgMjkzOTUsIDI5NDAxLCAyOTQwNywgMjk0MTEsIDI5NDE3LCAyOTQyMywgCi0gICAgMjk0MjksIDI5NDM1LCAyOTQ0MSwgMjk0NDcsIDI5NDUzLCAyOTQ1OSwgMjk0NjUsIDI5NDcxLCAyOTQ3NywgMjk0ODMsIAotICAgIDI5NDg5LCAyOTQ5NSwgMjk1MDEsIDI5NTA1LCAyOTUxMCwgMjk1MTUsIDI5NTIwLCAyOTUyNCwgMjk1MjksIDI5NTMzLCAKLSAgICAyOTUzOCwgMjk1NDMsIDI5NTQ4LCAyOTU1MiwgMjk1NTcsIDI5NTYyLCAyOTU2NywgMjk1NzIsIDI5NTc3LCAyOTU4MSwgCi0gICAgMjk1ODUsIDI5NTkwLCAyOTU5NSwgMjk1OTksIDI5NjAzLCAyOTYwNywgMjk2MTIsIDI5NjE3LCAyOTYyMiwgMjk2MjcsIDAsIAotICAgIDAsIDI5NjMzLCAyOTYzNywgMjk2NDQsIDI5NjQ5LCAyOTY1NSwgMjk2NjEsIDI5NjY2LCAyOTY3MiwgMjk2NzgsIDI5NjgzLCAKLSAgICAyOTY4OSwgMjk2OTUsIDI5NzAxLCAyOTcwNiwgMjk3MTIsIDI5NzE3LCAyOTcyMiwgMjk3MjgsIDI5NzMzLCAyOTczOSwgCi0gICAgMjk3NDQsIDI5NzUwLCAyOTc1NiwgMjk3NjIsIDI5NzY4LCAyOTc3MiwgMjk3NzcsIDI5NzgyLCAyOTc4OCwgMjk3OTQsIAotICAgIDI5Nzk5LCAyOTgwNSwgMjk4MTEsIDI5ODE1LCAyOTgyMCwgMjk4MjUsIDI5ODI5LCAyOTgzNCwgMjk4MzksIDI5ODQ0LCAKLSAgICAyOTg0OSwgMjk4NTUsIDI5ODYxLCAyOTg2NiwgMjk4NzEsIDI5ODc2LCAyOTg4MCwgMjk4ODUsIDI5ODg5LCAyOTg5NCwgCi0gICAgMjk4OTgsIDI5OTAzLCAyOTkwOCwgMjk5MTMsIDI5OTE4LCAyOTkyNCwgMjk5MzAsIDI5OTM3LCAyOTk0NywgMjk5NTYsIAotICAgIDI5OTYzLCAyOTk2OSwgMjk5NzksIDI5OTg0LCAyOTk5MCwgMCwgMjk5OTUsIDMwMDAwLCAzMDAwNSwgMzAwMTMsIDMwMDE5LCAKLSAgICAzMDAyNywgMzAwMzIsIDMwMDM4LCAzMDA0NCwgMzAwNTAsIDMwMDU1LCAzMDA2MSwgMzAwNjYsIDMwMDczLCAzMDA3OSwgCi0gICAgMzAwODQsIDMwMDkwLCAzMDA5NiwgMzAxMDIsIDMwMTA5LCAzMDExNiwgMzAxMjMsIDMwMTI4LCAzMDEzMywgMzAxNDAsIAotICAgIDMwMTQ3LCAzMDE1NCwgMzAxNjEsIDMwMTY4LCAwLCAwLCAzMDE3NSwgMzAxODIsIDMwMTg5LCAzMDE5NSwgMzAyMDEsIAotICAgIDMwMjA3LCAzMDIxMywgMzAyMTksIDMwMjI1LCAzMDIzMSwgMzAyMzcsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMjQzLCAzMDI0OSwgCi0gICAgMzAyNTQsIDMwMjU5LCAzMDI2NCwgMzAyNjksIDMwMjc0LCAzMDI3OSwgMzAyODQsIDMwMjg5LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAzMDI5NCwgMzAyOTksIDMwMzA0LCAzMDMwOSwgMzAzMTQsIDMwMzE5LCAzMDMyNCwgMzAzMzMsIDMwMzQwLCAzMDM0NSwgCi0gICAgMzAzNTAsIDMwMzU1LCAzMDM2MCwgMzAzNjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDE4Mjg4LCAxODI5MSwgMTgyOTUsIDE4Mjk5LCAxODMwMywgCisgICAgMTgzMDcsIDE4MzExLCAxODMxNSwgMTgzMTksIDE4MzIzLCAxODMyNywgMTgzMzEsIDE4MzM1LCAxODMzOSwgMTgzNDMsIAorICAgIDE4MzQ3LCAxODM1MSwgMTgzNTUsIDE4MzU5LCAxODM2MywgMTgzNjcsIDE4MzcwLCAxODM3MywgMTgzNzcsIDE4MzgxLCAKKyAgICAxODM4NSwgMTgzODgsIDE4MzkxLCAxODM5NCwgMTgzOTgsIDE4NDAyLCAxODQwNSwgMTg0MDgsIDE4NDEyLCAxODQxNSwgCisgICAgMTg0MjAsIDE4NDIzLCAxODQyNywgMTg0MzAsIDE4NDM0LCAxODQzNywgMTg0NDIsIDE4NDQ1LCAxODQ0OSwgMTg0NTYsIAorICAgIDE4NDYxLCAxODQ2NSwgMTg0NzAsIDE4NDc0LCAxODQ3OSwgMTg0ODMsIDE4NDg4LCAxODQ5NSwgMTg1MDEsIDE4NTA2LCAKKyAgICAxODUxMCwgMTg1MTQsIDE4NTE4LCAxODUyMiwgMTg1MjYsIDE4NTMxLCAxODUzNiwgMTg1NDIsIDE4NTQ3LCAxODU1MiwgCisgICAgMTg1NTYsIDE4NTU5LCAxODU2MiwgMTg1NjUsIDE4NTY4LCAxODU3MSwgMTg1NzQsIDE4NTc3LCAxODU4MCwgMTg1ODMsIAorICAgIDE4NTg5LCAxODU5MywgMTg1OTcsIDE4NjAxLCAxODYwNSwgMTg2MDksIDE4NjEzLCAxODYxNywgMTg2MjEsIDE4NjI2LCAKKyAgICAxODYzMCwgMTg2MzUsIDE4NjQwLCAxODY0NiwgMTg2NTEsIDE4NjU3LCAxODY2MywgMTg2NjksIDE4Njc1LCAxODY4MSwgCisgICAgMTg2ODgsIDE4Njk1LCAxODcwMywgMTg3MTEsIDE4NzIwLCAxODcyOSwgMTg3NDAsIDE4NzUwLCAxODc2MCwgMTg3NzEsIAorICAgIDE4NzgyLCAxODc5MiwgMTg4MDIsIDE4ODEyLCAxODgyMiwgMTg4MzIsIDE4ODQyLCAxODg1MiwgMTg4NjIsIDE4ODcwLCAKKyAgICAxODg3NywgMTg4ODMsIDE4ODkwLCAxODg5NSwgMTg5MDEsIDE4OTA3LCAxODkxMywgMTg5MTksIDE4OTI1LCAxODkzMSwgCisgICAgMTg5MzYsIDE4OTQyLCAxODk0OCwgMTg5NTQsIDE4OTYwLCAxODk2NSwgMTg5NzMsIDE4OTgwLCAxODk4NiwgMTg5OTMsIAorICAgIDE5MDAxLCAxOTAwNywgMTkwMTMsIDE5MDE5LCAxOTAyNSwgMTkwMzMsIDE5MDQxLCAxOTA1MSwgMTkwNTksIDE5MDY3LCAKKyAgICAxOTA3MywgMTkwNzgsIDE5MDgzLCAxOTA4OCwgMTkwOTMsIDE5MDk4LCAxOTEwMywgMTkxMDgsIDE5MTEzLCAxOTExOCwgCisgICAgMTkxMjQsIDE5MTMwLCAxOTEzNiwgMTkxNDMsIDE5MTQ4LCAxOTE1NCwgMTkxNTksIDE5MTY0LCAxOTE2OSwgMTkxNzQsIAorICAgIDE5MTc5LCAxOTE4NCwgMTkxODksIDE5MTk0LCAxOTE5OSwgMTkyMDQsIDE5MjA5LCAxOTIxNCwgMTkyMTksIDE5MjI0LCAKKyAgICAxOTIyOSwgMTkyMzQsIDE5MjM5LCAxOTI0NCwgMTkyNDksIDE5MjU0LCAxOTI1OSwgMTkyNjQsIDE5MjY5LCAxOTI3NCwgCisgICAgMTkyNzksIDE5Mjg0LCAxOTI4OSwgMTkyOTQsIDE5Mjk5LCAxOTMwNCwgMTkzMDksIDE5MzE0LCAxOTMxOSwgMTkzMjQsIAorICAgIDE5MzI5LCAxOTMzNCwgMTkzMzksIDAsIDE5MzQ0LCAwLCAwLCAwLCAwLCAwLCAxOTM0OSwgMCwgMCwgMTkzNTQsIDE5MzU4LCAKKyAgICAxOTM2MiwgMTkzNjYsIDE5MzcwLCAxOTM3NCwgMTkzNzgsIDE5MzgyLCAxOTM4NiwgMTkzOTAsIDE5Mzk0LCAxOTM5OCwgCisgICAgMTk0MDIsIDE5NDA2LCAxOTQxMCwgMTk0MTQsIDE5NDE4LCAxOTQyMiwgMTk0MjYsIDE5NDMwLCAxOTQzNCwgMTk0MzgsIAorICAgIDE5NDQyLCAxOTQ0NiwgMTk0NTAsIDE5NDU0LCAxOTQ1OCwgMTk0NjIsIDE5NDY2LCAxOTQ3MCwgMTk0NzQsIDE5NDc4LCAKKyAgICAxOTQ4MiwgMTk0ODYsIDE5NDkwLCAxOTQ5NCwgMTk0OTgsIDE5NTAyLCAxOTUwNiwgMTk1MTAsIDE5NTE0LCAxOTUxOCwgCisgICAgMTk1MjQsIDE5NTI4LCAxOTUzMywgMTk1MzgsIDE5NTQyLCAxOTU0NywgMTk1NTIsIDE5NTU2LCAxOTU2MCwgMTk1NjQsIAorICAgIDE5NTY4LCAxOTU3MiwgMTk1NzYsIDE5NTgwLCAxOTU4NCwgMTk1ODgsIDE5NTkyLCAxOTU5NiwgMTk2MDAsIDE5NjA0LCAKKyAgICAxOTYwOCwgMTk2MTIsIDE5NjE2LCAxOTYyMCwgMTk2MjQsIDE5NjI4LCAxOTYzMiwgMTk2MzYsIDE5NjQwLCAxOTY0NCwgCisgICAgMTk2NDgsIDE5NjUyLCAxOTY1NiwgMTk2NjAsIDE5NjY0LCAxOTY2OCwgMTk2NzIsIDE5Njc2LCAxOTY4MCwgMTk2ODQsIAorICAgIDE5Njg4LCAxOTY5MiwgMTk2OTYsIDE5NzAwLCAxOTcwNCwgMTk3MDgsIDE5NzEyLCAxOTcxNiwgMTk3MjAsIDE5NzI0LCAKKyAgICAxOTcyOCwgMTk3MzIsIDE5NzM2LCAxOTc0MCwgMTk3NDQsIDE5NzQ4LCAxOTc1MiwgMTk3NTYsIDE5NzYwLCAxOTc2NCwgCisgICAgMTk3NjgsIDE5NzcyLCAxOTc3NiwgMTk3ODAsIDE5Nzg0LCAxOTc4OCwgMTk3OTIsIDE5Nzk2LCAxOTgwMCwgMTk4MDQsIAorICAgIDE5ODA4LCAxOTgxMiwgMTk4MTYsIDE5ODIwLCAxOTgyNCwgMTk4MjgsIDE5ODMyLCAxOTgzNiwgMTk4NDAsIDE5ODQ0LCAKKyAgICAxOTg0OCwgMTk4NTIsIDE5ODU2LCAxOTg2MCwgMTk4NjQsIDE5ODY4LCAxOTg3MiwgMTk4NzYsIDE5ODgwLCAxOTg4NCwgCisgICAgMTk4ODgsIDE5ODkyLCAxOTg5NiwgMTk5MDAsIDE5OTA0LCAxOTkwOCwgMTk5MTIsIDE5OTE2LCAxOTkyMCwgMTk5MjQsIAorICAgIDE5OTI4LCAxOTkzMiwgMTk5MzYsIDE5OTQwLCAxOTk0MywgMTk5NDcsIDE5OTUwLCAxOTk1NCwgMTk5NTgsIDE5OTYxLCAKKyAgICAxOTk2NSwgMTk5NjksIDE5OTcyLCAxOTk3NiwgMTk5ODAsIDE5OTg0LCAxOTk4OCwgMTk5OTEsIDE5OTk1LCAxOTk5OSwgCisgICAgMjAwMDMsIDIwMDA3LCAyMDAxMSwgMjAwMTUsIDIwMDE4LCAyMDAyMiwgMjAwMjYsIDIwMDMwLCAyMDAzNCwgMjAwMzgsIAorICAgIDIwMDQyLCAyMDA0NiwgMjAwNTAsIDIwMDU0LCAyMDA1OCwgMjAwNjIsIDIwMDY2LCAyMDA3MCwgMjAwNzQsIDIwMDc4LCAKKyAgICAyMDA4MiwgMjAwODYsIDIwMDkwLCAyMDA5NCwgMjAwOTgsIDIwMTAyLCAyMDEwNiwgMjAxMTAsIDIwMTE0LCAyMDExOCwgCisgICAgMjAxMjIsIDIwMTI2LCAyMDEzMCwgMjAxMzQsIDIwMTM4LCAyMDE0MiwgMjAxNDYsIDIwMTUwLCAyMDE1NCwgMjAxNTgsIAorICAgIDIwMTYyLCAyMDE2NiwgMjAxNzAsIDIwMTc0LCAyMDE3OCwgMjAxODIsIDIwMTg2LCAyMDE5MCwgMjAxOTQsIDIwMTk4LCAKKyAgICAyMDIwMiwgMjAyMDYsIDIwMjEwLCAyMDIxNCwgMjAyMTgsIDIwMjIyLCAyMDIyNiwgMjAyMzAsIDIwMjM0LCAyMDIzOCwgCisgICAgMjAyNDIsIDIwMjQ2LCAyMDI1MCwgMjAyNTQsIDIwMjU4LCAyMDI2MiwgMjAyNjYsIDIwMjcwLCAyMDI3NCwgMjAyNzgsIAorICAgIDIwMjgyLCAyMDI4NiwgMjAyOTAsIDIwMjk0LCAyMDI5OCwgMjAzMDIsIDIwMzA2LCAyMDMxMCwgMjAzMTQsIDIwMzE4LCAKKyAgICAyMDMyMiwgMjAzMjYsIDIwMzMwLCAyMDMzNCwgMjAzMzgsIDIwMzQyLCAyMDM0NiwgMjAzNTAsIDIwMzU0LCAyMDM1OCwgCisgICAgMjAzNjIsIDIwMzY2LCAyMDM3MCwgMjAzNzQsIDIwMzc4LCAyMDM4MiwgMjAzODYsIDIwMzkwLCAyMDM5NCwgMjAzOTgsIAorICAgIDIwNDAyLCAyMDQwNiwgMjA0MTAsIDIwNDE0LCAyMDQxOCwgMjA0MjIsIDIwNDI2LCAyMDQzMCwgMjA0MzQsIDIwNDM4LCAKKyAgICAyMDQ0MiwgMjA0NDYsIDIwNDUwLCAyMDQ1NCwgMjA0NTgsIDIwNDYyLCAyMDQ2NiwgMjA0NzAsIDIwNDc0LCAyMDQ3OCwgCisgICAgMjA0ODIsIDIwNDg2LCAyMDQ5MCwgMjA0OTQsIDIwNDk4LCAyMDUwMiwgMjA1MDYsIDIwNTEwLCAyMDUxNCwgMjA1MTgsIAorICAgIDIwNTIyLCAyMDUyNiwgMjA1MzAsIDIwNTM0LCAyMDUzOCwgMjA1NDIsIDIwNTQ2LCAyMDU1MCwgMjA1NTQsIDIwNTU4LCAKKyAgICAyMDU2MiwgMjA1NjYsIDIwNTcwLCAyMDU3MywgMjA1NzcsIDIwNTgxLCAyMDU4NSwgMjA1ODksIDIwNTkzLCAyMDU5NywgCisgICAgMjA2MDEsIDIwNjA1LCAyMDYwOSwgMjA2MTMsIDIwNjE3LCAyMDYyMSwgMjA2MjUsIDIwNjI5LCAyMDYzMywgMjA2MzcsIAorICAgIDIwNjQxLCAyMDY0NSwgMjA2NDksIDIwNjUzLCAyMDY1NywgMjA2NjEsIDIwNjY1LCAyMDY2OCwgMjA2NzIsIDIwNjc2LCAKKyAgICAyMDY4MCwgMjA2ODQsIDIwNjg4LCAyMDY5MiwgMjA2OTYsIDIwNzAwLCAyMDcwNCwgMjA3MDgsIDIwNzEyLCAyMDcxNiwgCisgICAgMjA3MjAsIDIwNzI0LCAyMDcyOCwgMjA3MzEsIDIwNzM1LCAyMDczOSwgMjA3NDMsIDIwNzQ3LCAyMDc1MSwgMjA3NTUsIAorICAgIDIwNzU5LCAyMDc2MiwgMjA3NjYsIDIwNzcwLCAyMDc3NCwgMjA3NzgsIDIwNzgyLCAyMDc4NiwgMjA3OTAsIDIwNzk0LCAKKyAgICAyMDc5OCwgMjA4MDIsIDIwODA2LCAyMDgxMCwgMjA4MTQsIDIwODE4LCAyMDgyMiwgMjA4MjYsIDIwODMwLCAyMDgzNCwgCisgICAgMjA4MzgsIDIwODQyLCAyMDg0NiwgMjA4NTAsIDIwODU0LCAwLCAyMDg1OCwgMjA4NjIsIDIwODY2LCAyMDg3MCwgMCwgMCwgCisgICAgMjA4NzQsIDIwODc4LCAyMDg4MiwgMjA4ODYsIDIwODkwLCAyMDg5NCwgMjA4OTgsIDAsIDIwOTAyLCAwLCAyMDkwNiwgCisgICAgMjA5MTAsIDIwOTE0LCAyMDkxOCwgMCwgMCwgMjA5MjIsIDIwOTI2LCAyMDkzMCwgMjA5MzQsIDIwOTM4LCAyMDk0MiwgCisgICAgMjA5NDYsIDIwOTUwLCAyMDk1NCwgMjA5NTgsIDIwOTYyLCAyMDk2NiwgMjA5NzAsIDIwOTc0LCAyMDk3OCwgMjA5ODIsIAorICAgIDIwOTg2LCAyMDk5MCwgMjA5OTQsIDIwOTk4LCAyMTAwMiwgMjEwMDYsIDIxMDEwLCAyMTAxMywgMjEwMTcsIDIxMDIxLCAKKyAgICAyMTAyNSwgMjEwMjksIDIxMDMzLCAyMTAzNywgMjEwNDEsIDIxMDQ1LCAyMTA0OSwgMjEwNTMsIDIxMDU3LCAyMTA2MSwgCisgICAgMjEwNjUsIDIxMDY5LCAyMTA3MywgMjEwNzcsIDIxMDgxLCAwLCAyMTA4NSwgMjEwODksIDIxMDkzLCAyMTA5NywgMCwgMCwgCisgICAgMjExMDEsIDIxMTA0LCAyMTEwOCwgMjExMTIsIDIxMTE2LCAyMTEyMCwgMjExMjQsIDIxMTI4LCAyMTEzMiwgMjExMzYsIAorICAgIDIxMTQwLCAyMTE0NCwgMjExNDgsIDIxMTUyLCAyMTE1NiwgMjExNjAsIDIxMTY0LCAyMTE2OSwgMjExNzQsIDIxMTc5LCAKKyAgICAyMTE4NSwgMjExOTEsIDIxMTk2LCAyMTIwMSwgMjEyMDcsIDIxMjEwLCAyMTIxNCwgMjEyMTgsIDIxMjIyLCAyMTIyNiwgCisgICAgMjEyMzAsIDIxMjM0LCAyMTIzOCwgMCwgMjEyNDIsIDIxMjQ2LCAyMTI1MCwgMjEyNTQsIDAsIDAsIDIxMjU4LCAyMTI2MiwgCisgICAgMjEyNjYsIDIxMjcwLCAyMTI3NCwgMjEyNzgsIDIxMjgyLCAwLCAyMTI4NiwgMCwgMjEyOTAsIDIxMjk0LCAyMTI5OCwgCisgICAgMjEzMDIsIDAsIDAsIDIxMzA2LCAyMTMxMCwgMjEzMTQsIDIxMzE4LCAyMTMyMiwgMjEzMjYsIDIxMzMwLCAyMTMzNCwgCisgICAgMjEzMzgsIDIxMzQzLCAyMTM0OCwgMjEzNTMsIDIxMzU5LCAyMTM2NSwgMjEzNzAsIDAsIDIxMzc1LCAyMTM3OSwgMjEzODMsIAorICAgIDIxMzg3LCAyMTM5MSwgMjEzOTUsIDIxMzk5LCAyMTQwMywgMjE0MDcsIDIxNDExLCAyMTQxNSwgMjE0MTksIDIxNDIzLCAKKyAgICAyMTQyNywgMjE0MzEsIDIxNDM1LCAyMTQzOSwgMjE0NDIsIDIxNDQ2LCAyMTQ1MCwgMjE0NTQsIDIxNDU4LCAyMTQ2MiwgCisgICAgMjE0NjYsIDIxNDcwLCAyMTQ3NCwgMjE0NzgsIDIxNDgyLCAyMTQ4NiwgMjE0OTAsIDIxNDk0LCAyMTQ5OCwgMjE1MDIsIAorICAgIDIxNTA2LCAyMTUxMCwgMjE1MTQsIDIxNTE4LCAyMTUyMiwgMjE1MjYsIDIxNTMwLCAyMTUzNCwgMjE1MzgsIDIxNTQyLCAKKyAgICAyMTU0NiwgMjE1NTAsIDIxNTU0LCAyMTU1OCwgMjE1NjIsIDIxNTY2LCAyMTU3MCwgMjE1NzQsIDIxNTc4LCAyMTU4MiwgCisgICAgMjE1ODYsIDIxNTkwLCAyMTU5NCwgMjE1OTgsIDAsIDIxNjAyLCAyMTYwNiwgMjE2MTAsIDIxNjE0LCAwLCAwLCAyMTYxOCwgCisgICAgMjE2MjIsIDIxNjI2LCAyMTYzMCwgMjE2MzQsIDIxNjM4LCAyMTY0MiwgMjE2NDYsIDIxNjUwLCAyMTY1NCwgMjE2NTgsIAorICAgIDIxNjYyLCAyMTY2NiwgMjE2NzAsIDIxNjc0LCAyMTY3OCwgMjE2ODIsIDIxNjg2LCAyMTY5MCwgMjE2OTQsIDIxNjk4LCAKKyAgICAyMTcwMiwgMjE3MDYsIDIxNzEwLCAyMTcxNCwgMjE3MTgsIDIxNzIyLCAyMTcyNiwgMjE3MzAsIDIxNzM0LCAyMTczOCwgCisgICAgMjE3NDIsIDIxNzQ2LCAyMTc1MCwgMjE3NTQsIDIxNzU4LCAyMTc2MiwgMjE3NjYsIDIxNzcwLCAyMTc3NCwgMjE3NzgsIAorICAgIDIxNzgyLCAyMTc4NiwgMjE3OTAsIDIxNzk0LCAyMTc5OCwgMjE4MDIsIDIxODA2LCAyMTgxMCwgMjE4MTQsIDIxODE4LCAKKyAgICAyMTgyMiwgMjE4MjYsIDIxODMwLCAyMTgzNCwgMjE4MzgsIDIxODQyLCAyMTg0NSwgMjE4NDksIDIxODUzLCAyMTg1NywgCisgICAgMjE4NjEsIDIxODY1LCAyMTg2OSwgMjE4NzMsIDIxODc3LCAyMTg4MSwgMCwgMCwgMjE4ODUsIDIxODk0LCAyMTkwMCwgCisgICAgMjE5MDUsIDIxOTA5LCAyMTkxMiwgMjE5MTcsIDIxOTIwLCAyMTkyMywgMjE5MjYsIDIxOTMxLCAyMTkzNSwgMjE5NDAsIAorICAgIDIxOTQzLCAyMTk0NiwgMjE5NDksIDIxOTUyLCAyMTk1NSwgMjE5NTgsIDIxOTYxLCAyMTk2NCwgMjE5NjcsIDIxOTcxLCAKKyAgICAyMTk3NSwgMjE5NzksIDIxOTgzLCAyMTk4NywgMjE5OTEsIDIxOTk1LCAyMTk5OSwgMjIwMDMsIDIyMDA3LCAwLCAwLCAwLCAKKyAgICAyMjAxMywgMjIwMTksIDIyMDIzLCAyMjAyNywgMjIwMzEsIDIyMDM3LCAyMjA0MSwgMjIwNDUsIDIyMDQ5LCAyMjA1NSwgCisgICAgMjIwNTksIDIyMDYzLCAyMjA2NywgMjIwNzMsIDIyMDc3LCAyMjA4MSwgMjIwODUsIDIyMDkxLCAyMjA5NywgMjIxMDMsIAorICAgIDIyMTExLCAyMjExNywgMjIxMjMsIDIyMTI5LCAyMjEzNSwgMjIxNDEsIDAsIDAsIDAsIDAsIDAsIDAsIDIyMTQ3LCAyMjE1MCwgCisgICAgMjIxNTMsIDIyMTU2LCAyMjE1OSwgMjIxNjIsIDIyMTY2LCAyMjE3MCwgMjIxNzMsIDIyMTc3LCAyMjE4MSwgMjIxODUsIAorICAgIDIyMTg5LCAyMjE5MywgMjIxOTYsIDIyMjAwLCAyMjIwNCwgMjIyMDgsIDIyMjEyLCAyMjIxNiwgMjIyMjAsIDIyMjI0LCAKKyAgICAyMjIyOCwgMjIyMzIsIDIyMjM2LCAyMjI0MCwgMjIyNDMsIDIyMjQ3LCAyMjI1MSwgMjIyNTUsIDIyMjU5LCAyMjI2MiwgCisgICAgMjIyNjYsIDIyMjcwLCAyMjI3NCwgMjIyNzgsIDIyMjgyLCAyMjI4NiwgMjIyOTAsIDIyMjk0LCAyMjI5OCwgMjIzMDIsIAorICAgIDIyMzA2LCAyMjMxMCwgMjIzMTQsIDIyMzE3LCAyMjMyMSwgMjIzMjUsIDIyMzI5LCAyMjMzMywgMjIzMzcsIDIyMzQxLCAKKyAgICAyMjM0NSwgMjIzNDksIDIyMzUzLCAyMjM1NywgMjIzNjEsIDIyMzY1LCAyMjM2OSwgMjIzNzMsIDIyMzc3LCAyMjM4MSwgCisgICAgMjIzODUsIDIyMzg5LCAyMjM5MywgMjIzOTcsIDIyNDAxLCAyMjQwNSwgMjI0MDksIDIyNDEzLCAyMjQxNywgMjI0MjEsIAorICAgIDIyNDI1LCAyMjQyOSwgMjI0MzMsIDIyNDM3LCAyMjQ0MSwgMjI0NDUsIDIyNDQ5LCAyMjQ1MywgMjI0NTYsIDIyNDYwLCAKKyAgICAyMjQ2NCwgMjI0NjgsIDIyNDcyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyMjQ3NiwgMjI0ODAsIAorICAgIDIyNDgzLCAyMjQ4NywgMjI0OTAsIDIyNDk0LCAyMjQ5NywgMjI1MDEsIDIyNTA3LCAyMjUxMiwgMjI1MTYsIDIyNTE5LCAKKyAgICAyMjUyMywgMjI1MjcsIDIyNTMyLCAyMjUzNiwgMjI1NDEsIDIyNTQ1LCAyMjU1MCwgMjI1NTQsIDIyNTU5LCAyMjU2MywgCisgICAgMjI1NjgsIDIyNTc0LCAyMjU3OCwgMjI1ODMsIDIyNTg3LCAyMjU5MiwgMjI1OTgsIDIyNjAyLCAyMjYwOCwgMjI2MTQsIAorICAgIDIyNjE4LCAyMjYyMywgMjI2MzEsIDIyNjM5LCAyMjY0NiwgMjI2NTEsIDIyNjU2LCAyMjY2NSwgMjI2NzIsIDIyNjc5LCAKKyAgICAyMjY4NCwgMjI2OTAsIDIyNjk0LCAyMjY5OCwgMjI3MDIsIDIyNzA2LCAyMjcxMCwgMjI3MTQsIDIyNzE4LCAyMjcyMiwgCisgICAgMjI3MjYsIDIyNzMwLCAyMjczNiwgMjI3NDEsIDIyNzQ2LCAyMjc0OSwgMjI3NTMsIDIyNzU3LCAyMjc2MiwgMjI3NjYsIAorICAgIDIyNzcxLCAyMjc3NSwgMjI3ODAsIDIyNzg0LCAyMjc4OSwgMjI3OTMsIDIyNzk4LCAyMjgwMiwgMjI4MDcsIDIyODExLCAKKyAgICAyMjgxNiwgMjI4MjIsIDIyODI2LCAyMjgzMSwgMjI4MzYsIDIyODQwLCAyMjg0NCwgMjI4NDgsIDIyODUyLCAyMjg1NSwgCisgICAgMjI4NTksIDIyODY1LCAyMjg3MCwgMjI4NzUsIDIyODc5LCAyMjg4MywgMjI4ODcsIDIyODkyLCAyMjg5NiwgMjI5MDEsIAorICAgIDIyOTA1LCAyMjkxMCwgMjI5MTMsIDIyOTE3LCAyMjkyMSwgMjI5MjYsIDIyOTMwLCAyMjkzNSwgMjI5MzksIDIyOTQ0LCAKKyAgICAyMjk1MCwgMjI5NTQsIDIyOTU4LCAyMjk2MiwgMjI5NjYsIDIyOTcwLCAyMjk3NCwgMjI5NzgsIDIyOTgyLCAyMjk4NiwgCisgICAgMjI5OTAsIDIyOTk0LCAyMzAwMCwgMjMwMDMsIDIzMDA3LCAyMzAxMSwgMjMwMTYsIDIzMDIwLCAyMzAyNSwgMjMwMjksIAorICAgIDIzMDM0LCAyMzAzOCwgMjMwNDMsIDIzMDQ3LCAyMzA1MiwgMjMwNTYsIDIzMDYxLCAyMzA2NSwgMjMwNzAsIDIzMDc2LCAKKyAgICAyMzA4MCwgMjMwODQsIDIzMDkwLCAyMzA5NiwgMjMxMDIsIDIzMTA4LCAyMzExMiwgMjMxMTYsIDIzMTIwLCAyMzEyNCwgCisgICAgMjMxMjgsIDIzMTMyLCAyMzEzOCwgMjMxNDIsIDIzMTQ2LCAyMzE1MCwgMjMxNTUsIDIzMTU5LCAyMzE2NCwgMjMxNjgsIAorICAgIDIzMTczLCAyMzE3NywgMjMxODIsIDIzMTg2LCAyMzE5MSwgMjMxOTUsIDIzMjAwLCAyMzIwNCwgMjMyMDksIDIzMjE1LCAKKyAgICAyMzIxOSwgMjMyMjUsIDIzMjI5LCAyMzIzMywgMjMyMzcsIDIzMjQxLCAyMzI0NSwgMjMyNDksIDIzMjU1LCAyMzI1OCwgCisgICAgMjMyNjIsIDIzMjY2LCAyMzI3MSwgMjMyNzUsIDIzMjgwLCAyMzI4NCwgMjMyODksIDIzMjkzLCAyMzI5OCwgMjMzMDIsIAorICAgIDIzMzA3LCAyMzMxMSwgMjMzMTYsIDIzMzIwLCAyMzMyNSwgMjMzMzEsIDIzMzM0LCAyMzMzOCwgMjMzNDIsIDIzMzQ3LCAKKyAgICAyMzM1MiwgMjMzNTYsIDIzMzYwLCAyMzM2NCwgMjMzNjgsIDIzMzcyLCAyMzM3NiwgMjMzODIsIDIzMzg1LCAyMzM4OSwgCisgICAgMjMzOTMsIDIzMzk4LCAyMzQwMiwgMjM0MDcsIDIzNDExLCAyMzQxNiwgMjM0MjIsIDIzNDI2LCAyMzQzMSwgMjM0MzUsIAorICAgIDIzNDM5LCAyMzQ0MywgMjM0NDcsIDIzNDUxLCAyMzQ1NSwgMjM0NTksIDIzNDY1LCAyMzQ2OSwgMjM0NzMsIDIzNDc3LCAKKyAgICAyMzQ4MiwgMjM0ODYsIDIzNDkxLCAyMzQ5NSwgMjM1MDAsIDIzNTA0LCAyMzUwOSwgMjM1MTMsIDIzNTE4LCAyMzUyMiwgCisgICAgMjM1MjcsIDIzNTMxLCAyMzUzNiwgMjM1MzksIDIzNTQzLCAyMzU0NywgMjM1NTEsIDIzNTU1LCAyMzU1OSwgMjM1NjMsIAorICAgIDIzNTY3LCAyMzU3MSwgMjM1NzcsIDIzNTgwLCAyMzU4NCwgMjM1ODgsIDIzNTkzLCAyMzU5NywgMjM2MDIsIDIzNjA2LCAKKyAgICAyMzYxMSwgMjM2MTUsIDIzNjIwLCAyMzYyNCwgMjM2MjksIDIzNjMzLCAyMzYzOCwgMjM2NDIsIDIzNjQ3LCAyMzY1MywgCisgICAgMjM2NTcsIDIzNjYzLCAyMzY2NywgMjM2NzMsIDIzNjc5LCAyMzY4NSwgMjM2OTEsIDIzNjk3LCAyMzcwMywgMjM3MDksIAorICAgIDIzNzE1LCAyMzcxOSwgMjM3MjMsIDIzNzI3LCAyMzczMSwgMjM3MzUsIDIzNzM5LCAyMzc0MywgMjM3NDcsIDIzNzUyLCAKKyAgICAyMzc1NiwgMjM3NjEsIDIzNzY1LCAyMzc3MCwgMjM3NzQsIDIzNzc5LCAyMzc4MywgMjM3ODgsIDIzNzkyLCAyMzc5NywgCisgICAgMjM4MDEsIDIzODA2LCAyMzgxMCwgMjM4MTQsIDIzODE4LCAyMzgyMiwgMjM4MjYsIDIzODMwLCAyMzgzNCwgMjM4NDAsIAorICAgIDIzODQzLCAyMzg0NywgMjM4NTEsIDIzODU2LCAyMzg2MCwgMjM4NjUsIDIzODY5LCAyMzg3NCwgMjM4NzgsIDIzODgzLCAKKyAgICAyMzg4NywgMjM4OTIsIDIzODk2LCAyMzkwMSwgMjM5MDUsIDIzOTEwLCAyMzkxNiwgMjM5MjAsIDIzOTI2LCAyMzkzMSwgCisgICAgMjM5MzcsIDIzOTQxLCAyMzk0NywgMjM5NTIsIDIzOTU2LCAyMzk2MCwgMjM5NjQsIDIzOTY4LCAyMzk3MiwgMjM5NzcsIAorICAgIDIzOTgwLCAyMzk4NCwgMjM5ODksIDIzOTkzLCAyMzk5OCwgMjQwMDEsIDI0MDA1LCAyNDAwOSwgMjQwMTMsIDI0MDE3LCAKKyAgICAyNDAyMSwgMjQwMjUsIDI0MDI5LCAyNDAzMywgMjQwMzcsIDI0MDQxLCAyNDA0NSwgMjQwNTAsIDI0MDU0LCAyNDA1OCwgCisgICAgMjQwNjQsIDI0MDY4LCAyNDA3NCwgMjQwNzgsIDI0MDg0LCAyNDA4OCwgMjQwOTIsIDI0MDk2LCAyNDEwMCwgMjQxMDQsIAorICAgIDI0MTA5LCAyNDExMywgMjQxMTcsIDI0MTIxLCAyNDEyNSwgMjQxMjksIDI0MTMzLCAyNDEzNywgMjQxNDEsIDI0MTQ1LCAKKyAgICAyNDE0OSwgMjQxNTUsIDI0MTYxLCAyNDE2NywgMjQxNzMsIDI0MTc5LCAyNDE4NCwgMjQxOTAsIDI0MTk2LCAyNDIwMiwgCisgICAgMjQyMDYsIDI0MjEwLCAyNDIxNCwgMjQyMTgsIDI0MjIyLCAyNDIyNiwgMjQyMzAsIDI0MjM0LCAyNDIzOCwgMjQyNDIsIAorICAgIDI0MjQ2LCAyNDI1MCwgMjQyNTQsIDI0MjU5LCAyNDI2NCwgMjQyNjksIDI0MjczLCAyNDI3NywgMjQyODEsIDI0Mjg1LCAKKyAgICAyNDI4OSwgMjQyOTMsIDI0Mjk3LCAyNDMwMSwgMjQzMDUsIDI0MzA5LCAyNDMxNSwgMjQzMjEsIDI0MzI3LCAyNDMzMywgCisgICAgMjQzMzksIDI0MzQ1LCAyNDM1MSwgMjQzNTcsIDI0MzYzLCAyNDM2NywgMjQzNzEsIDI0Mzc1LCAyNDM3OSwgMjQzODMsIAorICAgIDI0Mzg3LCAyNDM5MSwgMjQzOTcsIDI0NDAzLCAyNDQwOSwgMjQ0MTUsIDI0NDIxLCAyNDQyNywgMjQ0MzMsIDI0NDM5LCAKKyAgICAyNDQ0NSwgMjQ0NTAsIDI0NDU1LCAyNDQ2MCwgMjQ0NjUsIDI0NDcxLCAyNDQ3NywgMjQ0ODMsIDI0NDg5LCAyNDQ5NSwgCisgICAgMjQ1MDEsIDI0NTA3LCAyNDUxMiwgMjQ1MTgsIDI0NTI0LCAyNDUzMCwgMjQ1MzUsIDI0NTQxLCAyNDU0NywgMjQ1NTMsIAorICAgIDI0NTU4LCAyNDU2MywgMjQ1NjgsIDI0NTczLCAyNDU3OCwgMjQ1ODMsIDI0NTg4LCAyNDU5MywgMjQ1OTgsIDI0NjAzLCAKKyAgICAyNDYwOCwgMjQ2MTMsIDI0NjE3LCAyNDYyMiwgMjQ2MjcsIDI0NjMyLCAyNDYzNywgMjQ2NDIsIDI0NjQ3LCAyNDY1MiwgCisgICAgMjQ2NTcsIDI0NjYyLCAyNDY2NywgMjQ2NzIsIDI0Njc3LCAyNDY4MiwgMjQ2ODcsIDI0NjkyLCAyNDY5NywgMjQ3MDIsIAorICAgIDI0NzA3LCAyNDcxMiwgMjQ3MTcsIDI0NzIyLCAyNDcyNywgMjQ3MzIsIDI0NzM3LCAyNDc0MiwgMjQ3NDcsIDI0NzUyLCAKKyAgICAyNDc1NywgMjQ3NjIsIDI0NzY2LCAyNDc3MSwgMjQ3NzYsIDI0NzgxLCAyNDc4NiwgMjQ3OTEsIDI0Nzk2LCAyNDgwMSwgCisgICAgMjQ4MDYsIDI0ODExLCAyNDgxNiwgMjQ4MjEsIDI0ODI2LCAyNDgzMSwgMjQ4MzYsIDI0ODQxLCAyNDg0NiwgMjQ4NTEsIAorICAgIDI0ODU2LCAyNDg2MSwgMjQ4NjYsIDI0ODcxLCAyNDg3NiwgMjQ4ODEsIDI0ODg2LCAyNDg5MSwgMjQ4OTUsIDI0OTAwLCAKKyAgICAyNDkwNSwgMjQ5MTAsIDI0OTE1LCAyNDkyMCwgMjQ5MjQsIDI0OTI5LCAyNDkzNCwgMjQ5MzksIDI0OTQ0LCAyNDk0OSwgCisgICAgMjQ5NTMsIDI0OTU4LCAyNDk2NCwgMjQ5NjksIDI0OTc0LCAyNDk3OSwgMjQ5ODQsIDI0OTkwLCAyNDk5NSwgMjUwMDAsIAorICAgIDI1MDA1LCAyNTAxMCwgMjUwMTUsIDI1MDIwLCAyNTAyNSwgMjUwMzAsIDI1MDM1LCAyNTA0MCwgMjUwNDUsIDI1MDUwLCAKKyAgICAyNTA1NSwgMjUwNjAsIDI1MDY1LCAyNTA3MCwgMjUwNzUsIDI1MDgwLCAyNTA4NSwgMjUwOTAsIDI1MDk1LCAyNTEwMCwgCisgICAgMjUxMDUsIDI1MTEwLCAyNTExNSwgMjUxMjAsIDI1MTI1LCAyNTEzMCwgMjUxMzUsIDI1MTQwLCAyNTE0NSwgMjUxNTAsIAorICAgIDI1MTU1LCAyNTE2MCwgMjUxNjUsIDI1MTcwLCAyNTE3NSwgMjUxODAsIDI1MTg1LCAyNTE5MCwgMjUxOTUsIDI1MjAwLCAKKyAgICAyNTIwNSwgMjUyMTAsIDI1MjE2LCAyNTIyMSwgMjUyMjYsIDI1MjMxLCAyNTIzNiwgMjUyNDEsIDI1MjQ2LCAyNTI1MSwgCisgICAgMjUyNTYsIDI1MjYxLCAyNTI2NiwgMjUyNzEsIDI1Mjc1LCAyNTI4MCwgMjUyODUsIDI1MjkwLCAyNTI5NSwgMjUzMDAsIAorICAgIDI1MzA1LCAyNTMxMCwgMjUzMTUsIDI1MzIwLCAyNTMyNSwgMjUzMzAsIDI1MzM1LCAyNTM0MCwgMjUzNDUsIDI1MzUwLCAKKyAgICAyNTM1NSwgMjUzNjAsIDI1MzY1LCAyNTM3MCwgMjUzNzUsIDI1MzgwLCAyNTM4NSwgMjUzOTAsIDI1Mzk1LCAyNTQwMCwgCisgICAgMjU0MDUsIDI1NDExLCAyNTQxNSwgMjU0MTksIDI1NDIzLCAyNTQyNywgMjU0MzEsIDI1NDM1LCAyNTQzOSwgMjU0NDMsIAorICAgIDI1NDQ5LCAyNTQ1NSwgMjU0NjEsIDI1NDY3LCAyNTQ3MywgMjU0NzksIDI1NDg1LCAyNTQ5MiwgMjU0OTgsIDI1NTAzLCAKKyAgICAyNTUwOCwgMjU1MTMsIDI1NTE4LCAyNTUyMywgMjU1MjgsIDI1NTMzLCAyNTUzOCwgMjU1NDMsIDI1NTQ4LCAyNTU1MywgCisgICAgMjU1NTgsIDI1NTYzLCAyNTU2OCwgMjU1NzMsIDI1NTc4LCAyNTU4MywgMjU1ODgsIDI1NTkzLCAyNTU5OCwgMjU2MDMsIAorICAgIDI1NjA4LCAyNTYxMywgMjU2MTgsIDI1NjIzLCAyNTYyOCwgMjU2MzMsIDI1NjM4LCAwLCAwLCAwLCAyNTY0NSwgMjU2NTUsIAorICAgIDI1NjU5LCAyNTY2NiwgMjU2NzAsIDI1Njc0LCAyNTY3OCwgMjU2ODYsIDI1NjkwLCAyNTY5NSwgMjU3MDAsIDI1NzA1LCAKKyAgICAyNTcwOSwgMjU3MTQsIDI1NzE5LCAyNTcyMiwgMjU3MjYsIDI1NzMwLCAyNTczOSwgMjU3NDMsIDI1NzQ3LCAyNTc1MywgCisgICAgMjU3NTcsIDI1NzYxLCAyNTc2OSwgMjU3NzMsIDI1NzgxLCAyNTc4NywgMjU3OTMsIDI1Nzk5LCAyNTgwNSwgMjU4MTUsIAorICAgIDI1ODIxLCAyNTgyNSwgMjU4MzQsIDI1ODM3LCAyNTg0MywgMjU4NDcsIDI1ODUzLCAyNTg1OCwgMjU4NjQsIDI1ODcyLCAKKyAgICAyNTg3OCwgMjU4ODQsIDI1ODkyLCAyNTg5OCwgMjU5MDIsIDI1OTA2LCAyNTkxNiwgMjU5MjIsIDI1OTI2LCAyNTkzNiwgCisgICAgMjU5NDIsIDI1OTQ2LCAyNTk1MCwgMjU5NTcsIDI1OTY0LCAyNTk2OSwgMjU5NzQsIDI1OTgzLCAyNTk4NywgMjU5OTEsIAorICAgIDI1OTk1LCAyNjAwMywgMjYwMTAsIDI2MDE0LCAyNjAxOCwgMjYwMjIsIDI2MDI2LCAyNjAzMCwgMjYwMzQsIDI2MDM4LCAKKyAgICAyNjA0MiwgMjYwNDYsIDI2MDUwLCAyNjA1NCwgMjYwNTksIDI2MDY0LCAyNjA2OSwgMjYwNzMsIDI2MDc3LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjA4MSwgMjYwODUsIDI2MDg5LCAyNjA5MywgMjYwOTcsIAorICAgIDI2MTAyLCAyNjEwNywgMjYxMTIsIDI2MTE3LCAyNjEyMSwgMjYxMjUsIDI2MTMwLCAyNjEzNCwgMCwgMjYxMzgsIDI2MTQzLCAKKyAgICAyNjE0OCwgMjYxNTIsIDI2MTU2LCAyNjE2MSwgMjYxNjYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDI2MTcxLCAyNjE3NSwgMjYxNzksIDI2MTgzLCAyNjE4NywgMjYxOTIsIDI2MTk3LCAyNjIwMiwgMjYyMDcsIDI2MjExLCAKKyAgICAyNjIxNSwgMjYyMjAsIDI2MjI0LCAyNjIyOCwgMjYyMzIsIDI2MjM3LCAyNjI0MiwgMjYyNDYsIDI2MjUwLCAyNjI1NSwgCisgICAgMjYyNjAsIDI2MjY1LCAyNjI3MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMjYyNzYsIDI2MjgwLCAyNjI4NCwgCisgICAgMjYyODgsIDI2MjkyLCAyNjI5NywgMjYzMDIsIDI2MzA3LCAyNjMxMiwgMjYzMTYsIDI2MzIwLCAyNjMyNSwgMjYzMjksIAorICAgIDI2MzMzLCAyNjMzNywgMjYzNDIsIDI2MzQ3LCAyNjM1MSwgMjYzNTUsIDI2MzYwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAyNjM2NSwgMjYzNjksIDI2MzczLCAyNjM3NywgMjYzODEsIDI2Mzg2LCAyNjM5MSwgMjYzOTYsIAorICAgIDI2NDAxLCAyNjQwNSwgMjY0MDksIDI2NDE0LCAyNjQxOCwgMCwgMjY0MjIsIDI2NDI3LCAyNjQzMiwgMCwgMjY0MzYsIAorICAgIDI2NDQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNjQ0NiwgMjY0NDksIDI2NDUzLCAyNjQ1NywgCisgICAgMjY0NjEsIDI2NDY1LCAyNjQ2OSwgMjY0NzMsIDI2NDc3LCAyNjQ4MSwgMjY0ODUsIDI2NDg5LCAyNjQ5MywgMjY0OTcsIAorICAgIDI2NTAxLCAyNjUwNSwgMjY1MDksIDI2NTEzLCAyNjUxNiwgMjY1MjAsIDI2NTI0LCAyNjUyOCwgMjY1MzIsIDI2NTM2LCAKKyAgICAyNjU0MCwgMjY1NDQsIDI2NTQ4LCAyNjU1MiwgMjY1NTYsIDI2NTYwLCAyNjU2NCwgMjY1NjgsIDI2NTcxLCAyNjU3NCwgCisgICAgMjY1NzgsIDI2NTgyLCAyNjU4OCwgMjY1OTQsIDI2NjAwLCAyNjYwNiwgMjY2MTIsIDI2NjE4LCAyNjYyNCwgMjY2MzAsIAorICAgIDI2NjM2LCAyNjY0MiwgMjY2NDgsIDI2NjU0LCAyNjY2MCwgMjY2NjYsIDI2Njc1LCAyNjY4NCwgMjY2OTAsIDI2Njk2LCAKKyAgICAyNjcwMiwgMjY3MDcsIDI2NzExLCAyNjcxNiwgMjY3MjEsIDI2NzI2LCAyNjczMCwgMjY3MzUsIDI2NzQwLCAyNjc0NSwgCisgICAgMjY3NDksIDI2NzU0LCAyNjc1OCwgMjY3NjMsIDI2NzY4LCAyNjc3MywgMjY3NzgsIDI2NzgyLCAyNjc4NiwgMjY3OTAsIAorICAgIDI2Nzk0LCAyNjc5OCwgMjY4MDIsIDI2ODA2LCAyNjgxMCwgMjY4MTQsIDI2ODE4LCAyNjgyNCwgMjY4MjgsIDI2ODMyLCAKKyAgICAyNjgzNiwgMjY4NDAsIDI2ODQ0LCAyNjg1MiwgMjY4NTgsIDI2ODYyLCAyNjg2OCwgMjY4NzIsIDI2ODc4LCAyNjg4MiwgMCwgCisgICAgMCwgMjY4ODYsIDI2ODkwLCAyNjg5MywgMjY4OTYsIDI2ODk5LCAyNjkwMiwgMjY5MDUsIDI2OTA4LCAyNjkxMSwgMjY5MTQsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDI2OTE3LCAyNjkyNSwgMjY5MzMsIDI2OTQxLCAyNjk0OSwgMjY5NTcsIDI2OTY1LCAyNjk3MywgCisgICAgMjY5ODEsIDI2OTg5LCAwLCAwLCAwLCAwLCAwLCAwLCAyNjk5NywgMjcwMDAsIDI3MDAzLCAyNzAwNiwgMjcwMTEsIDI3MDE0LCAKKyAgICAyNzAxOSwgMjcwMjYsIDI3MDM0LCAyNzAzOSwgMjcwNDYsIDI3MDQ5LCAyNzA1NiwgMjcwNjMsIDI3MDcwLCAwLCAyNzA3NCwgCisgICAgMjcwNzgsIDI3MDgxLCAyNzA4NCwgMjcwODcsIDI3MDkwLCAyNzA5MywgMjcwOTYsIDI3MDk5LCAyNzEwMiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMjcxMDUsIDI3MTA4LCAyNzExMSwgMjcxMTQsIDI3MTE3LCAyNzEyMCwgMjcxMjQsIDI3MTI4LCAyNzEzMiwgCisgICAgMjcxMzUsIDI3MTM5LCAyNzE0MywgMjcxNDYsIDI3MTUwLCAyNzE1NCwgMjcxNTcsIDI3MTYxLCAyNzE2NCwgMjcxNjgsIAorICAgIDI3MTcyLCAyNzE3NiwgMjcxODAsIDI3MTg0LCAyNzE4NywgMjcxOTAsIDI3MTk0LCAyNzE5OCwgMjcyMDEsIDI3MjA1LCAKKyAgICAyNzIwOSwgMjcyMTMsIDI3MjE3LCAyNzIyMSwgMjcyMjUsIDI3MjI5LCAyNzIzMywgMjcyNDAsIDI3MjQ1LCAyNzI1MCwgCisgICAgMjcyNTUsIDI3MjYwLCAyNzI2NiwgMjcyNzIsIDI3Mjc4LCAyNzI4NCwgMjcyODksIDI3Mjk1LCAyNzMwMSwgMjczMDYsIAorICAgIDI3MzEyLCAyNzMxOCwgMjczMjQsIDI3MzMwLCAyNzMzNiwgMjczNDEsIDI3MzQ3LCAyNzM1MiwgMjczNTgsIDI3MzY0LCAKKyAgICAyNzM3MCwgMjczNzYsIDI3MzgyLCAyNzM4NywgMjczOTIsIDI3Mzk4LCAyNzQwNCwgMjc0MDksIDI3NDE1LCAyNzQyMCwgCisgICAgMjc0MjYsIDI3NDMxLCAyNzQzNiwgMjc0NDIsIDI3NDQ4LCAyNzQ1NCwgMjc0NjAsIDI3NDY2LCAyNzQ3MiwgMjc0NzgsIAorICAgIDI3NDg0LCAyNzQ5MCwgMjc0OTYsIDI3NTAyLCAyNzUwOCwgMjc1MTMsIDI3NTE4LCAyNzUyMywgMjc1MjksIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDI3NTM1LCAyNzU0NCwgMjc1NTMsIDI3NTYxLCAyNzU2OSwgMjc1NzksIDI3NTg3LCAyNzU5NiwgCisgICAgMjc2MDMsIDI3NjEwLCAyNzYxNywgMjc2MjUsIDI3NjMzLCAyNzY0MSwgMjc2NDksIDI3NjU3LCAyNzY2NSwgMjc2NzMsIAorICAgIDI3NjgxLCAyNzY4OCwgMjc2OTYsIDI3NzA0LCAyNzcxMiwgMjc3MjAsIDI3NzI4LCAyNzczOCwgMjc3NDgsIDI3NzU4LCAKKyAgICAyNzc2OCwgMjc3NzgsIDI3Nzg4LCAyNzc5OCwgMjc4MDgsIDI3ODE4LCAyNzgyOCwgMjc4MzgsIDI3ODQ4LCAyNzg1OCwgCisgICAgMjc4NjgsIDI3ODc2LCAyNzg4NCwgMjc4OTQsIDI3OTAyLCAwLCAwLCAwLCAwLCAwLCAyNzkxMiwgMjc5MTYsIDI3OTIwLCAKKyAgICAyNzkyNCwgMjc5MjgsIDI3OTMyLCAyNzkzNiwgMjc5NDAsIDI3OTQ0LCAyNzk0OCwgMjc5NTIsIDI3OTU2LCAyNzk2MCwgCisgICAgMjc5NjQsIDI3OTY4LCAyNzk3MiwgMjc5NzYsIDI3OTgwLCAyNzk4NCwgMjc5ODgsIDI3OTkyLCAyNzk5NiwgMjgwMDAsIAorICAgIDI4MDA0LCAyODAxMCwgMjgwMTQsIDI4MDIwLCAyODAyNCwgMjgwMzAsIDI4MDM0LCAyODA0MCwgMjgwNDQsIDI4MDQ4LCAKKyAgICAyODA1MiwgMjgwNTYsIDI4MDYwLCAyODA2NCwgMjgwNzAsIDI4MDc2LCAyODA4MiwgMjgwODgsIDI4MDkzLCAyODA5OSwgCisgICAgMjgxMDUsIDI4MTExLCAyODExNywgMjgxMjMsIDI4MTI5LCAyODEzNiwgMjgxNDIsIDI4MTQ3LCAyODE1MiwgMjgxNTYsIAorICAgIDI4MTYwLCAyODE2NCwgMjgxNjgsIDI4MTcyLCAyODE3NiwgMjgxODAsIDI4MTg2LCAyODE5MiwgMjgxOTgsIDI4MjAzLCAKKyAgICAyODIxMCwgMjgyMTUsIDI4MjIwLCAyODIyNiwgMjgyMzEsIDI4MjM4LCAyODI0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMjgyNTIsIDI4MjU4LCAyODI2MiwgMjgyNjcsIDI4MjcyLCAyODI3NywgMjgyODIsIDI4Mjg3LCAyODI5MiwgCisgICAgMjgyOTcsIDI4MzAyLCAyODMwNywgMjgzMTIsIDI4MzE3LCAyODMyMiwgMjgzMjcsIDI4MzMxLCAyODMzNSwgMjgzNDAsIAorICAgIDI4MzQ1LCAyODM1MCwgMjgzNTQsIDI4MzU4LCAyODM2MiwgMjgzNjcsIDI4MzcyLCAyODM3NywgMjgzODIsIDI4Mzg2LCAwLCAKKyAgICAwLCAwLCAyODM5MCwgMjgzOTUsIDI4NDAwLCAyODQwNSwgMjg0MTEsIDI4NDE3LCAyODQyMywgMjg0MjksIDI4NDM0LCAKKyAgICAyODQzOSwgMjg0NDUsIDI4NDUxLCAwLCAwLCAwLCAwLCAyODQ1OCwgMjg0NjMsIDI4NDY5LCAyODQ3NSwgMjg0ODEsIAorICAgIDI4NDg2LCAyODQ5MSwgMjg0OTYsIDI4NTAxLCAyODUwNywgMjg1MTIsIDI4NTE3LCAwLCAwLCAwLCAwLCAyODUyMiwgMCwgMCwgCisgICAgMCwgMjg1MjcsIDI4NTMyLCAyODUzNywgMjg1NDIsIDI4NTQ2LCAyODU1MCwgMjg1NTQsIDI4NTU4LCAyODU2MiwgMjg1NjYsIAorICAgIDI4NTcwLCAyODU3NCwgMjg1NzgsIDI4NTgzLCAyODU4OSwgMjg1OTUsIDI4NjAxLCAyODYwNiwgMjg2MTEsIDI4NjE3LCAKKyAgICAyODYyMywgMjg2MjksIDI4NjM0LCAyODY0MCwgMjg2NDUsIDI4NjUxLCAyODY1NywgMjg2NjIsIDI4NjY4LCAyODY3NCwgCisgICAgMjg2ODAsIDI4Njg1LCAyODY5MCwgMjg2OTUsIDI4NzAxLCAyODcwNywgMjg3MTIsIDI4NzE4LCAyODcyMywgMjg3MjksIAorICAgIDI4NzM0LCAyODc0MCwgMCwgMCwgMjg3NDYsIDI4NzUyLCAyODc1OCwgMjg3NjQsIDI4NzcwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAyODc3NiwgMjg3ODMsIDI4NzkwLCAyODc5NiwgMjg4MDMsIDI4ODEwLCAyODgxNiwgMjg4MjMsIAorICAgIDI4ODMwLCAyODgzNywgMjg4NDMsIDI4ODQ5LCAyODg1NiwgMjg4NjIsIDI4ODY4LCAyODg3NSwgMjg4ODIsIDI4ODg4LCAKKyAgICAyODg5NSwgMjg5MDIsIDI4OTA4LCAyODkxNCwgMjg5MjEsIDI4OTI3LCAyODkzMywgMjg5NDAsIDI4OTQ2LCAyODk1MywgCisgICAgMjg5NjAsIDI4OTY3LCAyODk3NCwgMjg5ODEsIDI4OTg4LCAyODk5NCwgMjkwMDEsIDI5MDA4LCAyOTAxNCwgMjkwMjEsIAorICAgIDI5MDI4LCAyOTAzNSwgMjkwNDIsIDI5MDQ5LCAyOTA1NiwgMjkwNjMsIDAsIDAsIDAsIDAsIDI5MDcwLCAyOTA3OCwgCisgICAgMjkwODUsIDI5MDkyLCAyOTA5OCwgMjkxMDUsIDI5MTExLCAyOTExOCwgMjkxMjQsIDI5MTMxLCAyOTEzOCwgMjkxNDUsIAorICAgIDI5MTUyLCAyOTE1OSwgMjkxNjYsIDI5MTczLCAyOTE4MCwgMjkxODcsIDI5MTk0LCAyOTIwMSwgMjkyMDgsIDI5MjE0LCAKKyAgICAyOTIyMSwgMjkyMjgsIDI5MjM1LCAyOTI0MSwgMCwgMCwgMCwgMCwgMCwgMCwgMjkyNDcsIDI5MjUzLCAyOTI1OCwgMjkyNjMsIAorICAgIDI5MjY4LCAyOTI3MywgMjkyNzgsIDI5MjgzLCAyOTI4OCwgMjkyOTMsIDI5Mjk4LCAwLCAwLCAwLCAyOTMwNCwgMjkzMTAsIAorICAgIDI5MzE2LCAyOTMyMCwgMjkzMjYsIDI5MzMyLCAyOTMzOCwgMjkzNDQsIDI5MzUwLCAyOTM1NiwgMjkzNjIsIDI5MzY4LCAKKyAgICAyOTM3NCwgMjkzODAsIDI5Mzg2LCAyOTM5MiwgMjkzOTgsIDI5NDA0LCAyOTQxMCwgMjk0MTQsIDI5NDIwLCAyOTQyNiwgCisgICAgMjk0MzIsIDI5NDM4LCAyOTQ0NCwgMjk0NTAsIDI5NDU2LCAyOTQ2MiwgMjk0NjgsIDI5NDc0LCAyOTQ4MCwgMjk0ODYsIAorICAgIDI5NDkyLCAyOTQ5OCwgMjk1MDQsIDI5NTA4LCAyOTUxMywgMjk1MTgsIDI5NTIzLCAyOTUyNywgMjk1MzIsIDI5NTM2LCAKKyAgICAyOTU0MSwgMjk1NDYsIDI5NTUxLCAyOTU1NSwgMjk1NjAsIDI5NTY1LCAyOTU3MCwgMjk1NzUsIDI5NTgwLCAyOTU4NCwgCisgICAgMjk1ODgsIDI5NTkzLCAyOTU5OCwgMjk2MDIsIDI5NjA2LCAyOTYxMCwgMjk2MTUsIDI5NjIwLCAyOTYyNSwgMjk2MzAsIDAsIAorICAgIDAsIDI5NjM2LCAyOTY0MCwgMjk2NDcsIDI5NjUyLCAyOTY1OCwgMjk2NjQsIDI5NjY5LCAyOTY3NSwgMjk2ODEsIDI5Njg2LCAKKyAgICAyOTY5MiwgMjk2OTgsIDI5NzA0LCAyOTcwOSwgMjk3MTUsIDI5NzIwLCAyOTcyNSwgMjk3MzEsIDI5NzM2LCAyOTc0MiwgCisgICAgMjk3NDcsIDI5NzUzLCAyOTc1OSwgMjk3NjUsIDI5NzcxLCAyOTc3NSwgMjk3ODAsIDI5Nzg1LCAyOTc5MSwgMjk3OTcsIAorICAgIDI5ODAyLCAyOTgwOCwgMjk4MTQsIDI5ODE4LCAyOTgyMywgMjk4MjgsIDI5ODMyLCAyOTgzNywgMjk4NDIsIDI5ODQ3LCAKKyAgICAyOTg1MiwgMjk4NTgsIDI5ODY0LCAyOTg2OSwgMjk4NzQsIDI5ODc5LCAyOTg4MywgMjk4ODgsIDI5ODkyLCAyOTg5NywgCisgICAgMjk5MDEsIDI5OTA2LCAyOTkxMSwgMjk5MTYsIDI5OTIxLCAyOTkyNywgMjk5MzMsIDI5OTQwLCAyOTk1MCwgMjk5NTksIAorICAgIDI5OTY2LCAyOTk3MiwgMjk5ODIsIDI5OTg3LCAyOTk5MywgMCwgMjk5OTgsIDMwMDAzLCAzMDAwOCwgMzAwMTYsIDMwMDIyLCAKKyAgICAzMDAzMCwgMzAwMzUsIDMwMDQxLCAzMDA0NywgMzAwNTMsIDMwMDU4LCAzMDA2NCwgMzAwNjksIDMwMDc2LCAzMDA4MiwgCisgICAgMzAwODcsIDMwMDkzLCAzMDA5OSwgMzAxMDUsIDMwMTEyLCAzMDExOSwgMzAxMjYsIDMwMTMxLCAzMDEzNiwgMzAxNDMsIAorICAgIDMwMTUwLCAzMDE1NywgMzAxNjQsIDMwMTcxLCAwLCAwLCAzMDE3OCwgMzAxODUsIDMwMTkyLCAzMDE5OCwgMzAyMDQsIAorICAgIDMwMjEwLCAzMDIxNiwgMzAyMjIsIDMwMjI4LCAzMDIzNCwgMzAyNDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMjQ2LCAzMDI1MiwgCisgICAgMzAyNTcsIDMwMjYyLCAzMDI2NywgMzAyNzIsIDMwMjc3LCAzMDI4MiwgMzAyODcsIDMwMjkyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAzMDI5NywgMzAzMDIsIDMwMzA3LCAzMDMxMiwgMzAzMTcsIDMwMzIyLCAzMDMyNywgMzAzMzYsIDMwMzQzLCAzMDM0OCwgCisgICAgMzAzNTMsIDMwMzU4LCAzMDM2MywgMzAzNjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMzcwLCAzMDM3NiwgCi0gICAgMzAzODIsIDMwMzg2LCAzMDM5MCwgMzAzOTQsIDMwMzk4LCAzMDQwNCwgMzA0MDgsIDMwNDE0LCAzMDQxOCwgMzA0MjQsIAotICAgIDMwNDMwLCAzMDQzOCwgMzA0NDQsIDMwNDUyLCAzMDQ1NiwgMzA0NjAsIDMwNDY0LCAzMDQ3MCwgMzA0NzMsIDMwNDc5LCAKLSAgICAzMDQ4MywgMzA0ODksIDMwNDkzLCAzMDQ5NywgMzA1MDMsIDMwNTA3LCAzMDUxMywgMzA1MTcsIDMwNTIzLCAzMDUzMSwgCi0gICAgMzA1MzksIDMwNTQ3LCAzMDU1MywgMzA1NTcsIDMwNTYzLCAzMDU2NywgMzA1NzMsIDMwNTc2LCAzMDU3OSwgMzA1ODUsIAotICAgIDMwNTg5LCAzMDU5NSwgMzA1OTgsIDMwNjAxLCAzMDYwNCwgMzA2MDgsIDMwNjEyLCAzMDYxOCwgMzA2MjQsIDMwNjI3LCAKLSAgICAzMDYzMCwgMzA2MzQsIDMwNjM5LCAzMDY0NCwgMzA2NTEsIDMwNjU2LCAzMDY2MywgMzA2NzAsIDMwNjc5LCAzMDY4NiwgCi0gICAgMzA2OTUsIDMwNzAwLCAzMDcwNywgMzA3MTQsIDMwNzIzLCAzMDcyOCwgMzA3MzUsIDMwNzQwLCAzMDc0NiwgMzA3NTIsIAotICAgIDMwNzU4LCAzMDc2NCwgMzA3NzAsIDMwNzc2LCAwLCAwLCAwLCAwLCAzMDc4MiwgMzA3ODYsIDMwNzg5LCAzMDc5MiwgCi0gICAgMzA3OTUsIDMwNzk4LCAzMDgwMSwgMzA4MDQsIDMwODA3LCAzMDgxMCwgMzA4MTMsIDMwODE2LCAzMDgxOSwgMzA4MjIsIAotICAgIDMwODI3LCAzMDgzMiwgMzA4MzcsIDMwODQwLCAzMDg0NSwgMzA4NTAsIDMwODU1LCAzMDg2MCwgMzA4NjcsIDMwODcyLCAKLSAgICAzMDg3NywgMzA4ODIsIDMwODg3LCAzMDg5NCwgMzA5MDAsIDMwOTA2LCAzMDkxMiwgMzA5MTgsIDMwOTI0LCAzMDkzMywgCi0gICAgMzA5NDIsIDMwOTQ4LCAzMDk1NCwgMzA5NjIsIDMwOTcwLCAzMDk3OSwgMzA5ODgsIDMwOTk2LCAzMTAwNCwgMzEwMTMsIAotICAgIDMxMDIyLCAwLCAwLCAwLCAzMTAzMCwgMzEwMzQsIDMxMDM4LCAzMTA0MiwgMzEwNDUsIDMxMDQ4LCAzMTA1MSwgMzEwNTUsIAotICAgIDMxMDU4LCAzMTA2MSwgMzEwNjUsIDMxMDY4LCAzMTA3MiwgMzEwNzYsIDMxMDgwLCAzMTA4NCwgMzEwODgsIDMxMDkyLCAKLSAgICAzMTA5NiwgMzExMDAsIDMxMTA0LCAzMTEwNywgMzExMTAsIDMxMTE0LCAzMTExOCwgMzExMjIsIDMxMTI1LCAzMTEyOCwgCi0gICAgMzExMzEsIDMxMTM1LCAzMTEzOSwgMzExNDIsIDMxMTQ2LCAzMTE0OSwgMzExNTQsIDMxMTU5LCAzMTE2NCwgMzExNjksIAotICAgIDMxMTc0LCAzMTE3OSwgMzExODQsIDMxMTg5LCAzMTE5NCwgMzExOTgsIDMxMjAyLCAzMTIwOCwgMzEyMTUsIDMxMjE5LCAKLSAgICAzMTIyMywgMzEyMjcsIDMxMjMwLCAzMTIzMywgMzEyMzYsIDMxMjM5LCAzMTI0MiwgMzEyNDUsIDMxMjQ4LCAzMTI1MSwgCi0gICAgMzEyNTQsIDMxMjU3LCAzMTI2MSwgMzEyNjUsIDMxMjY5LCAzMTI3NCwgMzEyNzgsIDMxMjgyLCAzMTI4OCwgMzEyOTIsIAotICAgIDMxMjk4LCAzMTMwNCwgMzEzMDksIDMxMzE2LCAzMTMyMCwgMzEzMjYsIDMxMzMwLCAzMTMzNiwgMzEzNDEsIDMxMzQ4LCAKLSAgICAzMTM1NSwgMzEzNjAsIDMxMzY3LCAzMTM3MiwgMzEzNzcsIDMxMzgxLCAzMTM4NywgMzEzOTEsIDMxMzk3LCAzMTQwNCwgCi0gICAgMzE0MTEsIDMxNDE1LCAzMTQyMSwgMzE0MjcsIDMxNDMxLCAzMTQzNywgMzE0NDIsIDMxNDQ3LCAzMTQ1NCwgMzE0NTksIAotICAgIDMxNDY0LCAzMTQ2OSwgMzE0NzQsIDMxNDc4LCAzMTQ4MiwgMzE0ODcsIDMxNDkyLCAzMTQ5OSwgMzE1MDUsIDMxNTEwLCAKLSAgICAzMTUxNywgMzE1MjIsIDMxNTI5LCAzMTUzNCwgMzE1NDMsIDMxNTQ5LCAzMTU1NSwgMzE1NTksIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDMxNTYzLCAzMTU3MiwgMzE1NzksIDMxNTg2LCAzMTU5MywgMzE1OTYsIDMxNjAwLCAzMTYwNCwgMzE2MDgsIAotICAgIDMxNjEyLCAzMTYxNiwgMzE2MjAsIDMxNjI0LCAzMTYyOCwgMzE2MzIsIDMxNjM2LCAzMTY0MCwgMzE2NDQsIDMxNjQ3LCAKLSAgICAzMTY1MCwgMzE2NTQsIDMxNjU4LCAzMTY2MiwgMzE2NjYsIDMxNjcwLCAzMTY3NCwgMzE2NzcsIDMxNjgxLCAzMTY4NSwgCi0gICAgMzE2ODksIDMxNjkzLCAzMTY5NiwgMzE2OTksIDMxNzAzLCAzMTcwNiwgMzE3MTAsIDMxNzE0LCAzMTcxNywgMzE3MjEsIAotICAgIDMxNzI1LCAzMTcyOCwgMzE3MzMsIDMxNzM4LCAzMTc0MywgMzE3NDcsIDMxNzUxLCAzMTc1NiwgMzE3NjAsIDMxNzY1LCAKLSAgICAzMTc2OSwgMzE3NzQsIDMxNzc4LCAzMTc4MiwgMzE3ODcsIDMxNzkyLCAzMTc5NiwgMzE4MDEsIDMxODA2LCAzMTgxMSwgCi0gICAgMzE4MTUsIDAsIDAsIDAsIDMxODE5LCAzMTgyNCwgMzE4MzMsIDMxODM4LCAzMTg0NSwgMzE4NTAsIDMxODU0LCAzMTg1NywgCi0gICAgMzE4NjAsIDMxODYzLCAzMTg2NiwgMzE4NjksIDMxODcyLCAzMTg3NSwgMzE4NzgsIDAsIDAsIDAsIDMxODgxLCAzMTg4NSwgCi0gICAgMzE4ODksIDMxODkzLCAzMTkwMCwgMzE5MDYsIDMxOTEyLCAzMTkxOCwgMzE5MjQsIDMxOTMwLCAzMTkzNiwgMzE5NDIsIAotICAgIDMxOTQ4LCAzMTk1NCwgMzE5NjEsIDMxOTY4LCAzMTk3NSwgMzE5ODIsIDMxOTg5LCAzMTk5NiwgMzIwMDMsIDMyMDEwLCAKLSAgICAzMjAxNywgMzIwMjQsIDMyMDMxLCAzMjAzOCwgMzIwNDUsIDMyMDUyLCAzMjA1OSwgMzIwNjYsIDMyMDczLCAzMjA4MCwgCi0gICAgMzIwODcsIDMyMDk0LCAzMjEwMSwgMzIxMDgsIDMyMTE1LCAzMjEyMiwgMzIxMjksIDMyMTM2LCAzMjE0MywgMzIxNTAsIAotICAgIDMyMTU3LCAzMjE2NCwgMzIxNzIsIDMyMTgwLCAzMjE4OCwgMzIxOTQsIDMyMjAwLCAzMjIwNiwgMzIyMTQsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMwMzczLCAzMDM3OSwgCisgICAgMzAzODUsIDMwMzg5LCAzMDM5MywgMzAzOTcsIDMwNDAxLCAzMDQwNywgMzA0MTEsIDMwNDE3LCAzMDQyMSwgMzA0MjcsIAorICAgIDMwNDMzLCAzMDQ0MSwgMzA0NDcsIDMwNDU1LCAzMDQ1OSwgMzA0NjMsIDMwNDY3LCAzMDQ3MywgMzA0NzYsIDMwNDgyLCAKKyAgICAzMDQ4NiwgMzA0OTIsIDMwNDk2LCAzMDUwMCwgMzA1MDYsIDMwNTEwLCAzMDUxNiwgMzA1MjAsIDMwNTI2LCAzMDUzNCwgCisgICAgMzA1NDIsIDMwNTUwLCAzMDU1NiwgMzA1NjAsIDMwNTY2LCAzMDU3MCwgMzA1NzYsIDMwNTc5LCAzMDU4MiwgMzA1ODgsIAorICAgIDMwNTkyLCAzMDU5OCwgMzA2MDEsIDMwNjA0LCAzMDYwNywgMzA2MTEsIDMwNjE1LCAzMDYyMSwgMzA2MjcsIDMwNjMwLCAKKyAgICAzMDYzMywgMzA2MzcsIDMwNjQyLCAzMDY0NywgMzA2NTQsIDMwNjU5LCAzMDY2NiwgMzA2NzMsIDMwNjgyLCAzMDY4OSwgCisgICAgMzA2OTgsIDMwNzAzLCAzMDcxMCwgMzA3MTcsIDMwNzI2LCAzMDczMSwgMzA3MzgsIDMwNzQzLCAzMDc0OSwgMzA3NTUsIAorICAgIDMwNzYxLCAzMDc2NywgMzA3NzMsIDMwNzc5LCAwLCAwLCAwLCAwLCAzMDc4NSwgMzA3ODksIDMwNzkyLCAzMDc5NSwgCisgICAgMzA3OTgsIDMwODAxLCAzMDgwNCwgMzA4MDcsIDMwODEwLCAzMDgxMywgMzA4MTYsIDMwODE5LCAzMDgyMiwgMzA4MjUsIAorICAgIDMwODMwLCAzMDgzNSwgMzA4NDAsIDMwODQzLCAzMDg0OCwgMzA4NTMsIDMwODU4LCAzMDg2MywgMzA4NzAsIDMwODc1LCAKKyAgICAzMDg4MCwgMzA4ODUsIDMwODkwLCAzMDg5NywgMzA5MDMsIDMwOTA5LCAzMDkxNSwgMzA5MjEsIDMwOTI3LCAzMDkzNiwgCisgICAgMzA5NDUsIDMwOTUxLCAzMDk1NywgMzA5NjUsIDMwOTczLCAzMDk4MiwgMzA5OTEsIDMwOTk5LCAzMTAwNywgMzEwMTYsIAorICAgIDMxMDI1LCAwLCAwLCAwLCAzMTAzMywgMzEwMzcsIDMxMDQxLCAzMTA0NSwgMzEwNDgsIDMxMDUxLCAzMTA1NCwgMzEwNTgsIAorICAgIDMxMDYxLCAzMTA2NCwgMzEwNjgsIDMxMDcxLCAzMTA3NSwgMzEwNzksIDMxMDgzLCAzMTA4NywgMzEwOTEsIDMxMDk1LCAKKyAgICAzMTA5OSwgMzExMDMsIDMxMTA3LCAzMTExMCwgMzExMTMsIDMxMTE3LCAzMTEyMSwgMzExMjUsIDMxMTI4LCAzMTEzMSwgCisgICAgMzExMzQsIDMxMTM4LCAzMTE0MiwgMzExNDUsIDMxMTQ5LCAzMTE1MiwgMzExNTcsIDMxMTYyLCAzMTE2NywgMzExNzIsIAorICAgIDMxMTc3LCAzMTE4MiwgMzExODcsIDMxMTkyLCAzMTE5NywgMzEyMDEsIDMxMjA1LCAzMTIxMSwgMzEyMTgsIDMxMjIyLCAKKyAgICAzMTIyNiwgMzEyMzAsIDMxMjMzLCAzMTIzNiwgMzEyMzksIDMxMjQyLCAzMTI0NSwgMzEyNDgsIDMxMjUxLCAzMTI1NCwgCisgICAgMzEyNTcsIDMxMjYwLCAzMTI2NCwgMzEyNjgsIDMxMjcyLCAzMTI3NywgMzEyODEsIDMxMjg1LCAzMTI5MSwgMzEyOTUsIAorICAgIDMxMzAxLCAzMTMwNywgMzEzMTIsIDMxMzE5LCAzMTMyMywgMzEzMjksIDMxMzMzLCAzMTMzOSwgMzEzNDQsIDMxMzUxLCAKKyAgICAzMTM1OCwgMzEzNjMsIDMxMzcwLCAzMTM3NSwgMzEzODAsIDMxMzg0LCAzMTM5MCwgMzEzOTQsIDMxNDAwLCAzMTQwNywgCisgICAgMzE0MTQsIDMxNDE4LCAzMTQyNCwgMzE0MzAsIDMxNDM0LCAzMTQ0MCwgMzE0NDUsIDMxNDUwLCAzMTQ1NywgMzE0NjIsIAorICAgIDMxNDY3LCAzMTQ3MiwgMzE0NzcsIDMxNDgxLCAzMTQ4NSwgMzE0OTAsIDMxNDk1LCAzMTUwMiwgMzE1MDgsIDMxNTEzLCAKKyAgICAzMTUyMCwgMzE1MjUsIDMxNTMyLCAzMTUzNywgMzE1NDYsIDMxNTUyLCAzMTU1OCwgMzE1NjIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDMxNTY2LCAzMTU3NSwgMzE1ODIsIDMxNTg5LCAzMTU5NiwgMzE1OTksIDMxNjAzLCAzMTYwNywgMzE2MTEsIAorICAgIDMxNjE1LCAzMTYxOSwgMzE2MjMsIDMxNjI3LCAzMTYzMSwgMzE2MzUsIDMxNjM5LCAzMTY0MywgMzE2NDcsIDMxNjUwLCAKKyAgICAzMTY1MywgMzE2NTcsIDMxNjYxLCAzMTY2NSwgMzE2NjksIDMxNjczLCAzMTY3NywgMzE2ODAsIDMxNjg0LCAzMTY4OCwgCisgICAgMzE2OTIsIDMxNjk2LCAzMTY5OSwgMzE3MDIsIDMxNzA2LCAzMTcwOSwgMzE3MTMsIDMxNzE3LCAzMTcyMCwgMzE3MjQsIAorICAgIDMxNzI4LCAzMTczMSwgMzE3MzYsIDMxNzQxLCAzMTc0NiwgMzE3NTAsIDMxNzU0LCAzMTc1OSwgMzE3NjMsIDMxNzY4LCAKKyAgICAzMTc3MiwgMzE3NzcsIDMxNzgxLCAzMTc4NSwgMzE3OTAsIDMxNzk1LCAzMTc5OSwgMzE4MDQsIDMxODA5LCAzMTgxNCwgCisgICAgMzE4MTgsIDAsIDAsIDAsIDMxODIyLCAzMTgyNywgMzE4MzYsIDMxODQxLCAzMTg0OCwgMzE4NTMsIDMxODU3LCAzMTg2MCwgCisgICAgMzE4NjMsIDMxODY2LCAzMTg2OSwgMzE4NzIsIDMxODc1LCAzMTg3OCwgMzE4ODEsIDAsIDAsIDAsIDMxODg0LCAzMTg4OCwgCisgICAgMzE4OTIsIDMxODk2LCAzMTkwMywgMzE5MDksIDMxOTE1LCAzMTkyMSwgMzE5MjcsIDMxOTMzLCAzMTkzOSwgMzE5NDUsIAorICAgIDMxOTUxLCAzMTk1NywgMzE5NjQsIDMxOTcxLCAzMTk3OCwgMzE5ODUsIDMxOTkyLCAzMTk5OSwgMzIwMDYsIDMyMDEzLCAKKyAgICAzMjAyMCwgMzIwMjcsIDMyMDM0LCAzMjA0MSwgMzIwNDgsIDMyMDU1LCAzMjA2MiwgMzIwNjksIDMyMDc2LCAzMjA4MywgCisgICAgMzIwOTAsIDMyMDk3LCAzMjEwNCwgMzIxMTEsIDMyMTE4LCAzMjEyNSwgMzIxMzIsIDMyMTM5LCAzMjE0NiwgMzIxNTMsIAorICAgIDMyMTYwLCAzMjE2NywgMzIxNzUsIDMyMTgzLCAzMjE5MSwgMzIxOTcsIDMyMjAzLCAzMjIwOSwgMzIyMTcsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjIzLCAzMjIzMCwgMzIyMzcsIDMyMjQ0LCAzMjI1MSwgCi0gICAgMzIyNjAsIDMyMjY5LCAzMjI3OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIyODcsIDMyMjkyLCAzMjI5NywgMzIzMDIsIAotICAgIDMyMzA3LCAzMjMxNiwgMzIzMjcsIDMyMzM2LCAzMjM0NywgMzIzNTMsIDMyMzY2LCAzMjM3MiwgMzIzNzksIDMyMzg2LCAKLSAgICAzMjM5MSwgMzIzOTcsIDMyNDAzLCAzMjQxNCwgMzI0MjMsIDMyNDMwLCAzMjQzNywgMzI0NDYsIDMyNDUzLCAzMjQ2MiwgCi0gICAgMzI0NzIsIDMyNDgyLCAzMjQ4OSwgMzI0OTYsIDMyNTAzLCAzMjUxMywgMzI1MTgsIDMyNTI2LCAzMjUzMiwgMzI1NDAsIAotICAgIDMyNTQ5LCAzMjU1NCwgMzI1NjEsIDMyNTY3LCAzMjU3MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI1NzcsIAotICAgIDMyNTgyLCAzMjU4OCwgMzI1OTUsIDMyNjAzLCAzMjYwOSwgMzI2MTUsIDMyNjIxLCAzMjYyNiwgMzI2MzMsIDMyNjM5LCAKLSAgICAzMjY0NSwgMzI2NTEsIDMyNjU5LCAzMjY2NCwgMzI2NzIsIDMyNjc3LCAzMjY4MywgMzI2ODksIDMyNjk2LCAzMjcwNCwgCi0gICAgMzI3MTEsIDMyNzE3LCAzMjcyNCwgMzI3MzEsIDMyNzM3LCAzMjc0NCwgMzI3NTEsIDMyNzU3LCAzMjc2MiwgMzI3NjgsIAotICAgIDMyNzc2LCAzMjc4NCwgMzI3OTAsIDMyNzk2LCAzMjgwMiwgMzI4MDgsIDMyODE2LCAzMjgyMCwgMzI4MjYsIDMyODMyLCAKLSAgICAzMjgzOCwgMzI4NDQsIDMyODUwLCAzMjg1NiwgMzI4NjAsIDMyODY1LCAzMjg3MCwgMzI4NzcsIDMyODgyLCAzMjg4NiwgCi0gICAgMzI4OTIsIDMyODk3LCAzMjkwMiwgMzI5MDYsIDMyOTExLCAzMjkxNiwgMzI5MjAsIDMyOTI0LCAzMjkyOSwgMzI5MzYsIAotICAgIDMyOTQwLCAzMjk0NSwgMzI5NTAsIDMyOTU0LCAzMjk1OSwgMzI5NjMsIDMyOTY4LCAzMjk3MiwgMzI5NzgsIDMyOTgzLCAKLSAgICAzMjk5MCwgMzI5OTUsIDMzMDAwLCAzMzAwNCwgMzMwMDksIDMzMDE0LCAzMzAyMSwgMzMwMjYsIDMzMDMyLCAzMzAzNywgCi0gICAgMzMwNDEsIDMzMDQ2LCAzMzA1MCwgMzMwNTUsIDMzMDYyLCAzMzA2OSwgMzMwNzQsIDMzMDc5LCAzMzA4MywgMzMwODksIAotICAgIDMzMDk1LCAzMzEwMCwgMzMxMDUsIDMzMTEwLCAzMzExNiwgMzMxMjEsIDMzMTI3LCAzMzEzMiwgMzMxMzgsIDMzMTQ0LCAKLSAgICAzMzE1MCwgMzMxNTcsIDMzMTY0LCAzMzE3MSwgMzMxNzgsIDMzMTg1LCAzMzE5MiwgMzMxOTcsIDMzMjA1LCAzMzIxNCwgCi0gICAgMzMyMjMsIDMzMjMyLCAzMzI0MSwgMzMyNTAsIDMzMjU5LCAzMzI3MSwgMzMyODAsIDMzMjg5LCAzMzI5OCwgMzMzMDUsIAotICAgIDMzMzEwLCAzMzMxNywgMzMzMjUsIDMzMzMzLCAzMzM0MCwgMzMzNDcsIDMzMzU0LCAzMzM2MSwgMzMzNjksIDMzMzc4LCAKLSAgICAzMzM4NywgMzMzOTYsIDMzNDA1LCAzMzQxNCwgMzM0MjMsIDMzNDMyLCAzMzQ0MSwgMzM0NTAsIDMzNDU5LCAzMzQ2OCwgCi0gICAgMzM0NzcsIDMzNDg2LCAzMzQ5NSwgMzM1MDMsIDMzNTEyLCAzMzUyMywgMzM1MzEsIDMzNTQwLCAzMzU1MSwgMzM1NjAsIAotICAgIDMzNTY5LCAzMzU3OCwgMzM1ODcsIDMzNTk1LCAzMzYwNCwgMzM2MTEsIDMzNjE2LCAzMzYyNCwgMzM2MjksIDMzNjM2LCAKLSAgICAzMzY0MSwgMzM2NTAsIDMzNjU2LCAzMzY2MywgMzM2NzAsIDMzNjc1LCAzMzY4MCwgMzM2ODgsIDMzNjk2LCAzMzcwNSwgCi0gICAgMzM3MTQsIDMzNzE5LCAzMzcyNiwgMzM3MzcsIDMzNzQ1LCAzMzc1NCwgMzM3NjAsIDMzNzY2LCAzMzc3MSwgMzM3NzgsIAotICAgIDMzNzgzLCAzMzc5MiwgMzM3OTcsIDMzODAyLCAzMzgwNywgMzM4MTQsIDMzODIxLCAzMzgyNiwgMzM4MzUsIDMzODQzLCAKLSAgICAzMzg0OCwgMzM4NTMsIDMzODYwLCAzMzg2NywgMzM4NzEsIDMzODc1LCAzMzg3OCwgMzM4ODEsIDMzODg0LCAzMzg4NywgCi0gICAgMzM4OTAsIDMzODkzLCAzMzkwMCwgMzM5MDMsIDMzOTA2LCAzMzkxMSwgMzM5MTUsIDMzOTE5LCAzMzkyMywgMzM5MjcsIAotICAgIDMzOTMxLCAzMzk0MCwgMzM5NDYsIDMzOTUyLCAzMzk1OCwgMzM5NjYsIDMzOTc0LCAzMzk4MCwgMzM5ODYsIDMzOTkzLCAKLSAgICAzMzk5OSwgMzQwMDQsIDM0MDEwLCAzNDAxNiwgMzQwMjIsIDM0MDI5LCAzNDAzNSwgMzQwNDMsIDM0MDQ5LCAzNDA1NiwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQwNjIsIDM0MDY5LCAKLSAgICAzNDA3NiwgMzQwODEsIDM0MDkwLCAzNDA5OCwgMzQxMDYsIDM0MTEzLCAzNDEyMCwgMzQxMjcsIDM0MTM0LCAzNDE0MiwgCi0gICAgMzQxNTAsIDM0MTYwLCAzNDE3MCwgMzQxNzgsIDM0MTg2LCAzNDE5NCwgMzQyMDIsIDM0MjExLCAzNDIyMCwgMzQyMjgsIAotICAgIDM0MjM2LCAzNDI0NSwgMzQyNTQsIDM0MjY0LCAzNDI3NCwgMzQyODMsIDM0MjkyLCAzNDMwMCwgMzQzMDgsIDM0MzE2LCAKLSAgICAzNDMyNCwgMzQzMzQsIDM0MzQ0LCAzNDM1MiwgMzQzNjAsIDM0MzY4LCAzNDM3NiwgMzQzODQsIDM0MzkyLCAzNDQwMCwgCi0gICAgMzQ0MDgsIDM0NDE2LCAzNDQyNCwgMzQ0MzIsIDM0NDQwLCAzNDQ0OSwgMzQ0NTgsIDM0NDY3LCAzNDQ3NiwgMzQ0ODYsIAotICAgIDM0NDk2LCAzNDUwMywgMzQ1MTAsIDM0NTE4LCAzNDUyNiwgMzQ1MzUsIDM0NTQ0LCAzNDU1MiwgMzQ1NjAsIDM0NTcyLCAKLSAgICAzNDU4NCwgMzQ1OTMsIDM0NjAyLCAzNDYxMSwgMzQ2MjAsIDM0NjI3LCAzNDYzNCwgMzQ2NDIsIDM0NjUwLCAzNDY1OCwgCi0gICAgMzQ2NjYsIDM0Njc0LCAzNDY4MiwgMzQ2OTAsIDM0Njk4LCAzNDcwNywgMzQ3MTYsIDM0NzI1LCAzNDczNCwgMzQ3NDMsIAotICAgIDM0NzUyLCAzNDc2MiwgMzQ3NzIsIDM0NzgyLCAzNDc5MiwgMzQ4MDEsIDM0ODEwLCAzNDgxNywgMzQ4MjQsIDM0ODMyLCAKLSAgICAzNDg0MCwgMzQ4NDgsIDM0ODU2LCAzNDg2NCwgMzQ4NzIsIDM0ODg0LCAzNDg5NiwgMzQ5MDUsIDM0OTE0LCAzNDkyMiwgCi0gICAgMzQ5MzAsIDM0OTM4LCAzNDk0NiwgMzQ5NTcsIDM0OTY4LCAzNDk3OSwgMzQ5OTAsIDM1MDAyLCAzNTAxNCwgMzUwMjIsIAotICAgIDM1MDMwLCAzNTAzOCwgMzUwNDYsIDM1MDU1LCAzNTA2NCwgMzUwNzMsIDM1MDgyLCAzNTA5MCwgMzUwOTgsIDM1MTA2LCAKLSAgICAzNTExNCwgMzUxMjIsIDM1MTMwLCAzNTEzOSwgMzUxNDgsIDM1MTU4LCAzNTE2OCwgMzUxNzUsIDM1MTgyLCAzNTE5MCwgCi0gICAgMzUxOTgsIDM1MjA2LCAzNTIxNCwgMzUyMjEsIDM1MjI4LCAzNTIzNiwgMzUyNDQsIDM1MjUyLCAzNTI2MCwgMzUyNjgsIAotICAgIDM1Mjc2LCAzNTI4NCwgMzUyOTIsIDM1MzAwLCAzNTMwOCwgMzUzMTYsIDM1MzI0LCAzNTMzMiwgMzUzNDAsIDM1MzQ4LCAKLSAgICAzNTM1NiwgMzUzNjUsIDM1Mzc0LCAzNTM4MywgMzUzOTEsIDM1NDAwLCAzNTQwOSwgMzU0MTgsIDM1NDI3LCAzNTQzNywgCi0gICAgMzU0NDYsIDM1NDUzLCAzNTQ1OCwgMzU0NjUsIDM1NDcyLCAzNTQ4MCwgMzU0ODgsIDM1NDk3LCAzNTUwNiwgMzU1MTYsIAotICAgIDM1NTI2LCAzNTUzNywgMzU1NDgsIDM1NTU3LCAzNTU2NiwgMzU1NzYsIDM1NTg2LCAzNTU5NSwgMzU2MDQsIDM1NjE0LCAKLSAgICAzNTYyNCwgMzU2MzUsIDM1NjQ2LCAzNTY1NSwgMzU2NjQsIDM1Njc0LCAzNTY4NCwgMzU2OTEsIDM1Njk4LCAzNTcwNiwgCi0gICAgMzU3MTQsIDM1NzIwLCAzNTcyNiwgMzU3MzUsIDM1NzQ0LCAzNTc1NCwgMzU3NjQsIDM1Nzc1LCAzNTc4NiwgMzU3OTUsIAotICAgIDM1ODA0LCAzNTgxNCwgMzU4MjQsIDM1ODMzLCAzNTg0MiwgMzU4NTAsIDM1ODU4LCAzNTg2NSwgMzU4NzIsIDM1ODgwLCAKLSAgICAzNTg4OCwgMzU4OTcsIDM1OTA2LCAzNTkxNiwgMzU5MjYsIDM1OTM3LCAzNTk0OCwgMzU5NTcsIDM1OTY2LCAzNTk3NiwgCi0gICAgMzU5ODYsIDM1OTk1LCAzNjAwNCwgMzYwMTQsIDM2MDI0LCAzNjAzNSwgMzYwNDYsIDM2MDU1LCAzNjA2NCwgMzYwNzQsIAotICAgIDM2MDg0LCAzNjA5MSwgMzYwOTgsIDM2MTA2LCAzNjExNCwgMzYxMjMsIDM2MTMyLCAzNjE0MiwgMzYxNTIsIDM2MTYzLCAKLSAgICAzNjE3NCwgMzYxODMsIDM2MTkyLCAzNjIwMiwgMzYyMTIsIDM2MjIwLCAzNjIyOCwgMzYyMzYsIDM2MjQ0LCAzNjI1MywgCi0gICAgMzYyNjIsIDM2MjY5LCAzNjI3NiwgMzYyODMsIDM2MjkwLCAzNjI5NywgMzYzMDQsIDM2MzEyLCAzNjMyMCwgMzYzMjgsIAotICAgIDM2MzM2LCAzNjM0NywgMzYzNTgsIDM2MzY5LCAzNjM4MCwgMzYzOTEsIDM2NDAyLCAzNjQxMCwgMzY0MTgsIDM2NDI5LCAKLSAgICAzNjQ0MCwgMzY0NTEsIDM2NDYyLCAzNjQ3MywgMzY0ODQsIDM2NDkyLCAzNjUwMCwgMzY1MTEsIDM2NTIyLCAzNjUzMywgMCwgCi0gICAgMCwgMzY1NDQsIDM2NTUyLCAzNjU2MCwgMzY1NzEsIDM2NTgyLCAzNjU5MywgMCwgMCwgMzY2MDQsIDM2NjEyLCAzNjYyMCwgCi0gICAgMzY2MzEsIDM2NjQyLCAzNjY1MywgMzY2NjQsIDM2Njc1LCAzNjY4NiwgMzY2OTQsIDM2NzAyLCAzNjcxMywgMzY3MjQsIAotICAgIDM2NzM1LCAzNjc0NiwgMzY3NTcsIDM2NzY4LCAzNjc3NiwgMzY3ODQsIDM2Nzk1LCAzNjgwNiwgMzY4MTcsIDM2ODI4LCAKLSAgICAzNjgzOSwgMzY4NTAsIDM2ODU4LCAzNjg2NiwgMzY4NzcsIDM2ODg4LCAzNjg5OSwgMzY5MTAsIDM2OTIxLCAzNjkzMiwgCi0gICAgMzY5NDAsIDM2OTQ4LCAzNjk1OSwgMzY5NzAsIDM2OTgxLCAwLCAwLCAzNjk5MiwgMzcwMDAsIDM3MDA4LCAzNzAxOSwgCi0gICAgMzcwMzAsIDM3MDQxLCAwLCAwLCAzNzA1MiwgMzcwNjAsIDM3MDY4LCAzNzA3OSwgMzcwOTAsIDM3MTAxLCAzNzExMiwgCi0gICAgMzcxMjMsIDAsIDM3MTM0LCAwLCAzNzE0MiwgMCwgMzcxNTMsIDAsIDM3MTY0LCAzNzE3NSwgMzcxODMsIDM3MTkxLCAKLSAgICAzNzIwMiwgMzcyMTMsIDM3MjI0LCAzNzIzNSwgMzcyNDYsIDM3MjU3LCAzNzI2NSwgMzcyNzMsIDM3Mjg0LCAzNzI5NSwgCi0gICAgMzczMDYsIDM3MzE3LCAzNzMyOCwgMzczMzksIDM3MzQ3LCAzNzM1NSwgMzczNjMsIDM3MzcxLCAzNzM3OSwgMzczODcsIAotICAgIDM3Mzk1LCAzNzQwMywgMzc0MTEsIDM3NDE5LCAzNzQyNywgMzc0MzUsIDM3NDQzLCAwLCAwLCAzNzQ1MSwgMzc0NjIsIAotICAgIDM3NDczLCAzNzQ4NywgMzc1MDEsIDM3NTE1LCAzNzUyOSwgMzc1NDMsIDM3NTU3LCAzNzU2OCwgMzc1NzksIDM3NTkzLCAKLSAgICAzNzYwNywgMzc2MjEsIDM3NjM1LCAzNzY0OSwgMzc2NjMsIDM3Njc0LCAzNzY4NSwgMzc2OTksIDM3NzEzLCAzNzcyNywgCi0gICAgMzc3NDEsIDM3NzU1LCAzNzc2OSwgMzc3ODAsIDM3NzkxLCAzNzgwNSwgMzc4MTksIDM3ODMzLCAzNzg0NywgMzc4NjEsIAotICAgIDM3ODc1LCAzNzg4NiwgMzc4OTcsIDM3OTExLCAzNzkyNSwgMzc5MzksIDM3OTUzLCAzNzk2NywgMzc5ODEsIDM3OTkyLCAKLSAgICAzODAwMywgMzgwMTcsIDM4MDMxLCAzODA0NSwgMzgwNTksIDM4MDczLCAzODA4NywgMzgwOTUsIDM4MTAzLCAzODExNCwgCi0gICAgMzgxMjIsIDAsIDM4MTMzLCAzODE0MSwgMzgxNTIsIDM4MTYwLCAzODE2OCwgMzgxNzYsIDM4MTg0LCAzODE5MiwgMzgxOTUsIAotICAgIDM4MTk4LCAzODIwMSwgMzgyMDQsIDM4MjEwLCAzODIyMSwgMzgyMjksIDAsIDM4MjQwLCAzODI0OCwgMzgyNTksIDM4MjY3LCAKLSAgICAzODI3NSwgMzgyODMsIDM4MjkxLCAzODI5OSwgMzgzMDUsIDM4MzExLCAzODMxNywgMzgzMjUsIDM4MzMzLCAzODM0NCwgMCwgCi0gICAgMCwgMzgzNTUsIDM4MzYzLCAzODM3NCwgMzgzODIsIDM4MzkwLCAzODM5OCwgMCwgMzg0MDYsIDM4NDEyLCAzODQxOCwgCi0gICAgMzg0MjQsIDM4NDMyLCAzODQ0MCwgMzg0NTEsIDM4NDYyLCAzODQ3MCwgMzg0NzgsIDM4NDg2LCAzODQ5NywgMzg1MDUsIAotICAgIDM4NTEzLCAzODUyMSwgMzg1MjksIDM4NTM3LCAzODU0MywgMzg1NDksIDAsIDAsIDM4NTUyLCAzODU2MywgMzg1NzEsIDAsIAotICAgIDM4NTgyLCAzODU5MCwgMzg2MDEsIDM4NjA5LCAzODYxNywgMzg2MjUsIDM4NjMzLCAzODY0MSwgMzg2NDQsIDAsIDM4NjQ3LCAKLSAgICAzODY1MSwgMzg2NTUsIDM4NjU5LCAzODY2MywgMzg2NjcsIDM4NjcxLCAzODY3NSwgMzg2NzksIDM4NjgzLCAzODY4NywgCi0gICAgMzg2OTEsIDM4Njk3LCAzODcwMywgMzg3MDksIDM4NzEyLCAzODcxNSwgMzg3MTcsIDM4NzIxLCAzODcyNSwgMzg3MjksIAotICAgIDM4NzMzLCAzODczNSwgMzg3MzksIDM4NzQzLCAzODc0OSwgMzg3NTUsIDM4NzYyLCAzODc2OSwgMzg3NzQsIDM4Nzc5LCAKLSAgICAzODc4NSwgMzg3OTEsIDM4NzkzLCAzODc5NiwgMzg3OTgsIDM4ODAyLCAzODgwNiwgMzg4MTAsIDM4ODEzLCAzODgxNywgCi0gICAgMzg4MjEsIDM4ODI1LCAzODgyOSwgMzg4MzMsIDM4ODM5LCAzODg0MywgMzg4NDcsIDM4ODUzLCAzODg1OCwgMzg4NjUsIAotICAgIDM4ODY3LCAzODg3MCwgMzg4NzQsIDM4ODc4LCAzODg4MywgMzg4ODksIDM4ODkxLCAzODkwMCwgMzg5MDksIDM4OTEyLCAKLSAgICAzODkxNiwgMzg5MTgsIDM4OTIwLCAzODkyMiwgMzg5MjUsIDM4OTMxLCAzODkzMywgMzg5MzcsIDM4OTQxLCAzODk0OCwgCi0gICAgMzg5NTUsIDM4OTU5LCAzODk2NCwgMzg5NjksIDM4OTc0LCAzODk3OSwgMzg5ODMsIDM4OTg3LCAzODk5MCwgMzg5OTQsIAotICAgIDM4OTk4LCAzOTAwNSwgMzkwMTAsIDM5MDE0LCAzOTAxOCwgMzkwMjMsIDM5MDI3LCAzOTAzMSwgMzkwMzYsIDM5MDQxLCAKLSAgICAzOTA0NSwgMzkwNDksIDM5MDUzLCAzOTA1NSwgMzkwNjAsIDM5MDY1LCAzOTA2OSwgMzkwNzMsIDM5MDc3LCAzOTA4MSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMzkwODUsIDM5MDkxLCAzOTA5NywgMzkxMDQsIDM5MTExLCAzOTExNiwgMzkxMjEsIDM5MTI1LCAwLCAwLCAKLSAgICAzOTEzMSwgMzkxMzQsIDM5MTM3LCAzOTE0MCwgMzkxNDMsIDM5MTQ2LCAzOTE0OSwgMzkxNTMsIDM5MTU3LCAzOTE2MiwgCi0gICAgMzkxNjcsIDM5MTcyLCAzOTE3OSwgMzkxODMsIDM5MTg2LCAzOTE4OSwgMzkxOTIsIDM5MTk1LCAzOTE5OCwgMzkyMDEsIAotICAgIDM5MjA0LCAzOTIwNywgMzkyMTAsIDM5MjE0LCAzOTIxOCwgMzkyMjMsIDM5MjI4LCAwLCAzOTIzMywgMzkyMzksIDM5MjQ1LCAKLSAgICAzOTI1MSwgMzkyNTgsIDM5MjY1LCAzOTI3MiwgMzkyNzksIDM5Mjg1LCAzOTI5MSwgMzkyOTgsIDM5MzA1LCAzOTMxMiwgMCwgCi0gICAgMCwgMCwgMzkzMTksIDM5MzIyLCAzOTMyNSwgMzkzMjgsIDM5MzMzLCAzOTMzNiwgMzkzMzksIDM5MzQyLCAzOTM0NSwgCi0gICAgMzkzNDgsIDM5MzUxLCAzOTM1NSwgMzkzNTgsIDM5MzYxLCAzOTM2NCwgMzkzNjcsIDM5MzcwLCAzOTM3NSwgMzkzNzgsIAotICAgIDM5MzgxLCAzOTM4NCwgMzkzODcsIDM5MzkwLCAzOTM5NSwgMzkzOTgsIDM5NDAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTQwNiwgMzk0MTEsIDM5NDE2LCAzOTQyMywgCi0gICAgMzk0MzEsIDM5NDM2LCAzOTQ0MSwgMzk0NDUsIDM5NDQ5LCAzOTQ1NCwgMzk0NjEsIDM5NDY4LCAzOTQ3MiwgMzk0NzcsIAotICAgIDM5NDgyLCAzOTQ4NywgMzk0OTIsIDM5NDk5LCAzOTUwNCwgMzk1MDksIDM5NTE0LCAzOTUyMywgMzk1MzAsIDM5NTM3LCAKLSAgICAzOTU0MSwgMzk1NDYsIDM5NTUyLCAzOTU1NywgMzk1NjQsIDM5NTczLCAzOTU4MiwgMzk1ODYsIDM5NTkwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzOTU5NCwgMzk1OTgsIDM5NjA2LCAzOTYxMCwgMzk2MTQsIAotICAgIDM5NjE5LCAzOTYyMywgMzk2MjcsIDM5NjMxLCAzOTYzMywgMzk2MzcsIDM5NjQxLCAzOTY0NSwgMzk2NTAsIDM5NjU0LCAKLSAgICAzOTY1OCwgMzk2NjYsIDM5NjY5LCAzOTY3MywgMzk2NzYsIDM5Njc5LCAzOTY4NSwgMzk2ODksIDM5NjkyLCAzOTY5OCwgCi0gICAgMzk3MDIsIDM5NzA2LCAzOTcxMCwgMzk3MTMsIDM5NzE3LCAzOTcyMCwgMzk3MjQsIDM5NzI2LCAzOTcyOSwgMzk3MzIsIAotICAgIDM5NzM2LCAzOTczOCwgMzk3NDIsIDM5NzQ1LCAzOTc0OCwgMzk3NTMsIDM5NzU4LCAzOTc2NSwgMzk3NjgsIDM5NzcxLCAKLSAgICAzOTc3NSwgMzk3ODAsIDM5NzgzLCAzOTc4NiwgMzk3ODksIDM5NzkzLCAzOTc5OCwgMzk4MDEsIDM5ODA0LCAzOTgwNiwgCi0gICAgMzk4MDksIDM5ODEyLCAzOTgxNSwgMzk4MTksIDM5ODI0LCAzOTgyNywgMzk4MzEsIDM5ODM1LCAzOTgzOSwgMzk4NDMsIAotICAgIDM5ODQ4LCAzOTg1NCwgMzk4NTksIDM5ODY0LCAzOTg3MCwgMzk4NzUsIDM5ODgwLCAzOTg4NCwgMzk4ODgsIDM5ODkzLCAKLSAgICAzOTg5NywgMzk5MDEsIDM5OTA0LCAzOTkwNiwgMzk5MTEsIDM5OTE3LCAzOTkyNCwgMzk5MzEsIDM5OTM4LCAzOTk0NSwgCi0gICAgMzk5NTIsIDM5OTU5LCAzOTk2NiwgMzk5NzMsIDM5OTgxLCAzOTk4OCwgMzk5OTYsIDQwMDAzLCA0MDAxMCwgNDAwMTgsIAotICAgIDQwMDI2LCA0MDAzMSwgNDAwMzYsIDQwMDQxLCA0MDA0NiwgNDAwNTEsIDQwMDU2LCA0MDA2MSwgNDAwNjYsIDQwMDcxLCAKLSAgICA0MDA3NiwgNDAwODIsIDQwMDg4LCA0MDA5NCwgNDAxMDAsIDQwMTA3LCA0MDExNSwgNDAxMjIsIDQwMTI4LCA0MDEzNCwgCi0gICAgNDAxNDAsIDQwMTQ2LCA0MDE1MiwgNDAxNTgsIDQwMTY0LCA0MDE3MCwgNDAxNzYsIDQwMTgzLCA0MDE5MCwgNDAxOTcsIAotICAgIDQwMjA0LCA0MDIxMiwgNDAyMjEsIDQwMjI5LCA0MDI0MCwgNDAyNDgsIDQwMjU2LCA0MDI2NSwgNDAyNzIsIDQwMjgxLCAKLSAgICA0MDI5MCwgNDAyOTgsIDQwMzA3LCAwLCAwLCAwLCAwLCAwLCAwLCA0MDMxNSwgNDAzMTcsIDQwMzIwLCA0MDMyMiwgNDAzMjUsIAotICAgIDQwMzI4LCA0MDMzMSwgNDAzMzYsIDQwMzQxLCA0MDM0NiwgNDAzNTEsIDQwMzU1LCA0MDM1OSwgNDAzNjMsIDQwMzY3LCAKLSAgICA0MDM3MiwgNDAzNzgsIDQwMzgzLCA0MDM4OSwgNDAzOTQsIDQwMzk5LCA0MDQwNCwgNDA0MTAsIDQwNDE1LCA0MDQyMSwgCi0gICAgNDA0MjcsIDQwNDMxLCA0MDQzNSwgNDA0NDAsIDQwNDQ1LCA0MDQ1MCwgNDA0NTUsIDQwNDYwLCA0MDQ2OCwgNDA0NzYsIAotICAgIDQwNDg0LCA0MDQ5MiwgNDA0OTksIDQwNTA3LCA0MDUxNCwgNDA1MjEsIDQwNTMwLCA0MDU0MiwgNDA1NDgsIDQwNTU0LCAKLSAgICA0MDU2MiwgNDA1NzAsIDQwNTc5LCA0MDU4OCwgNDA1OTYsIDQwNjA0LCA0MDYxMywgNDA2MjIsIDQwNjI3LCA0MDYzNSwgCi0gICAgNDA2NDAsIDQwNjQ1LCA0MDY1MSwgNDA2NTYsIDQwNjYyLCA0MDY2OSwgNDA2NzYsIDQwNjgxLCA0MDY4NywgNDA2OTIsIAotICAgIDQwNjk1LCA0MDY5OSwgNDA3MDIsIDQwNzA2LCA0MDcxMCwgNDA3MTQsIDQwNzIwLCA0MDcyNiwgNDA3MzIsIDQwNzM4LCAKLSAgICA0MDc0MiwgNDA3NDYsIDQwNzUwLCA0MDc1NCwgNDA3NjAsIDQwNzY2LCA0MDc3MCwgNDA3NzUsIDQwNzc5LCA0MDc4NCwgCi0gICAgNDA3ODksIDQwNzk0LCA0MDc5NywgNDA4MDEsIDQwODA0LCA0MDgwOCwgNDA4MTUsIDQwODIzLCA0MDgzNCwgNDA4NDUsIAotICAgIDQwODUwLCA0MDg1OSwgNDA4NjYsIDQwODc1LCA0MDg4NCwgNDA4ODgsIDQwODk0LCA0MDkwMiwgNDA5MDYsIDQwOTExLCAKLSAgICA0MDkxNiwgNDA5MjIsIDQwOTI4LCA0MDkzNCwgNDA5NDEsIDQwOTQ1LCA0MDk0OSwgNDA5NTQsIDQwOTU3LCA0MDk1OSwgCi0gICAgNDA5NjMsIDQwOTY3LCA0MDk3NSwgNDA5NzksIDQwOTgxLCA0MDk4MywgNDA5ODcsIDQwOTk1LCA0MTAwMCwgNDEwMDYsIAotICAgIDQxMDE2LCA0MTAyMywgNDEwMjgsIDQxMDMyLCA0MTAzNiwgNDEwNDAsIDQxMDQzLCA0MTA0NiwgNDEwNDksIDQxMDUzLCAKLSAgICA0MTA1NywgNDEwNjEsIDQxMDY1LCA0MTA2OSwgNDEwNzIsIDQxMDc2LCA0MTA4MCwgNDEwODMsIDQxMDg1LCA0MTA4OCwgCi0gICAgNDEwOTAsIDQxMDk0LCA0MTA5OCwgNDExMDAsIDQxMTA2LCA0MTEwOSwgNDExMTQsIDQxMTE4LCA0MTEyMiwgNDExMjQsIAotICAgIDQxMTI2LCA0MTEyOCwgNDExMzEsIDQxMTM1LCA0MTEzOSwgNDExNDMsIDQxMTQ3LCA0MTE1MSwgNDExNTcsIDQxMTYzLCAKLSAgICA0MTE2NSwgNDExNjcsIDQxMTY5LCA0MTE3MSwgNDExNzQsIDQxMTc2LCA0MTE4MCwgNDExODIsIDQxMTg2LCA0MTE4OSwgCi0gICAgNDExOTUsIDQxMTk5LCA0MTIwMywgNDEyMDYsIDQxMjA5LCA0MTIxMywgNDEyMTksIDQxMjIzLCA0MTIzMywgNDEyNDMsIAotICAgIDQxMjQ3LCA0MTI1MywgNDEyNTksIDQxMjYyLCA0MTI2NiwgNDEyNjksIDQxMjc0LCA0MTI3OCwgNDEyODQsIDQxMjg4LCAKLSAgICA0MTMwMCwgNDEzMDgsIDQxMzEyLCA0MTMxNiwgNDEzMjIsIDQxMzI2LCA0MTMyOSwgNDEzMzEsIDQxMzM0LCA0MTMzOCwgCi0gICAgNDEzNDIsIDQxMzQ5LCA0MTM1MywgNDEzNTcsIDQxMzYxLCA0MTM2NCwgNDEzNjksIDQxMzc0LCA0MTM3OSwgNDEzODQsIAotICAgIDQxMzg5LCA0MTM5NCwgNDE0MDIsIDQxNDEwLCA0MTQxNCwgNDE0MTgsIDQxNDIwLCA0MTQyNSwgNDE0MjksIDQxNDMzLCAKLSAgICA0MTQ0MSwgNDE0NDksIDQxNDU1LCA0MTQ2MSwgNDE0NzAsIDQxNDc5LCA0MTQ4NCwgNDE0ODksIDQxNDk3LCA0MTUwNSwgCi0gICAgNDE1MDcsIDQxNTA5LCA0MTUxNCwgNDE1MTksIDQxNTI1LCA0MTUzMSwgNDE1MzcsIDQxNTQzLCA0MTU0NywgNDE1NTEsIAotICAgIDQxNTU4LCA0MTU2NSwgNDE1NzEsIDQxNTc3LCA0MTU4NywgNDE1OTcsIDQxNjA1LCA0MTYxMywgNDE2MTUsIDQxNjE5LCAKLSAgICA0MTYyMywgNDE2MjgsIDQxNjMzLCA0MTY0MCwgNDE2NDcsIDQxNjUwLCA0MTY1MywgNDE2NTYsIDQxNjU5LCA0MTY2MiwgCi0gICAgNDE2NjcsIDQxNjcxLCA0MTY3NiwgNDE2ODEsIDQxNjg0LCA0MTY4NywgNDE2OTAsIDQxNjkzLCA0MTY5NiwgNDE3MDAsIAotICAgIDQxNzAzLCA0MTcwNiwgNDE3MDksIDQxNzEyLCA0MTcxNCwgNDE3MTYsIDQxNzE4LCA0MTcyMCwgNDE3MjgsIDQxNzM2LCAKLSAgICA0MTc0MiwgNDE3NDYsIDQxNzUyLCA0MTc2MiwgNDE3NjgsIDQxNzc0LCA0MTc4MCwgNDE3ODgsIDQxNzk2LCA0MTgwNywgCi0gICAgNDE4MTEsIDQxODE1LCA0MTgxNywgNDE4MjMsIDQxODI1LCA0MTgyNywgNDE4MjksIDQxODMxLCA0MTgzNywgNDE4NDAsIAotICAgIDQxODQ2LCA0MTg1MiwgNDE4NTYsIDQxODYwLCA0MTg2NCwgNDE4NjcsIDQxODcxLCA0MTg3NSwgNDE4NzcsIDQxODg2LCAKLSAgICA0MTg5NSwgNDE5MDAsIDQxOTA1LCA0MTkxMSwgNDE5MTcsIDQxOTIzLCA0MTkyNiwgNDE5MjksIDQxOTMyLCA0MTkzNSwgCi0gICAgNDE5MzcsIDQxOTQyLCA0MTk0NywgNDE5NTIsIDQxOTU4LCA0MTk2NCwgNDE5NzIsIDQxOTgwLCA0MTk4NiwgNDE5OTIsIAotICAgIDQxOTk4LCA0MjAwNCwgNDIwMTMsIDQyMDIyLCA0MjAzMSwgNDIwNDAsIDQyMDQ5LCA0MjA1OCwgNDIwNjcsIDQyMDc2LCAKLSAgICA0MjA4NSwgNDIwOTQsIDQyMTAyLCA0MjExNCwgNDIxMjQsIDQyMTM5LCA0MjE0MiwgNDIxNDcsIDQyMTUzLCA0MjE1OSwgCi0gICAgNDIxNjYsIDQyMTgwLCA0MjE5NSwgNDIyMDEsIDQyMjA3LCA0MjIxNCwgNDIyMjAsIDQyMjI4LCA0MjIzNCwgNDIyNDcsIAotICAgIDQyMjYxLCA0MjI2NiwgNDIyNzIsIDQyMjc5LCA0MjI4MiwgNDIyODUsIDQyMjg3LCA0MjI5MCwgNDIyOTMsIDQyMjk1LCAKLSAgICA0MjI5NywgNDIzMDEsIDQyMzA0LCA0MjMwNywgNDIzMTAsIDQyMzEzLCA0MjMxOCwgNDIzMjMsIDQyMzI4LCA0MjMzMywgCi0gICAgNDIzMzgsIDQyMzQxLCA0MjM0MywgNDIzNDUsIDQyMzQ3LCA0MjM1MSwgNDIzNTUsIDQyMzU5LCA0MjM2NSwgNDIzNzAsIAotICAgIDQyMzcyLCA0MjM3NCwgNDIzNzksIDQyMzg0LCA0MjM4OSwgNDIzOTQsIDQyMzk5LCA0MjQwNCwgNDI0MDYsIDQyNDA4LCAKLSAgICA0MjQxNywgNDI0MjEsIDQyNDI5LCA0MjQzOCwgNDI0NDAsIDQyNDQ1LCA0MjQ1MCwgNDI0NTgsIDQyNDYyLCA0MjQ2NCwgCi0gICAgNDI0NjgsIDQyNDcwLCA0MjQ3NCwgNDI0NzgsIDQyNDgyLCA0MjQ4NCwgNDI0ODYsIDQyNDg4LCA0MjQ5NSwgNDI1MDQsIAotICAgIDQyNTEzLCA0MjUyMiwgNDI1MzEsIDQyNTQwLCA0MjU0OSwgNDI1NTgsIDQyNTY3LCA0MjU3NSwgNDI1ODMsIDQyNTkyLCAKLSAgICA0MjYwMSwgNDI2MTAsIDQyNjE5LCA0MjYyNywgNDI2MzUsIDQyNjQ0LCA0MjY1MywgNDI2NjIsIDQyNjcyLCA0MjY4MSwgCi0gICAgNDI2OTEsIDQyNzAwLCA0MjcxMCwgNDI3MTksIDQyNzI5LCA0MjczOSwgNDI3NDgsIDQyNzU4LCA0Mjc2NywgNDI3NzcsIAotICAgIDQyNzg2LCA0Mjc5NiwgNDI4MDUsIDQyODE0LCA0MjgyMywgNDI4MzIsIDQyODQxLCA0Mjg1MSwgNDI4NjAsIDQyODY5LCAKLSAgICA0Mjg3OCwgNDI4ODgsIDQyODk3LCA0MjkwNiwgNDI5MTUsIDQyOTI0LCA0MjkzNCwgNDI5NDQsIDQyOTUzLCA0Mjk2MiwgCi0gICAgNDI5NzAsIDQyOTc4LCA0Mjk4NSwgNDI5OTMsIDQzMDAyLCA0MzAxMywgNDMwMjIsIDQzMDMxLCA0MzA0MCwgNDMwNDcsIAotICAgIDQzMDU0LCA0MzA2MSwgNDMwNzAsIDQzMDc5LCA0MzA4OCwgNDMwOTcsIDQzMTA0LCA0MzEwOSwgNDMxMTgsIDQzMTIzLCAKLSAgICA0MzEyNiwgNDMxMzQsIDQzMTM3LCA0MzE0MiwgNDMxNDcsIDQzMTUwLCA0MzE1MywgNDMxNjEsIDQzMTY0LCA0MzE2OSwgCi0gICAgNDMxNzIsIDQzMTc5LCA0MzE4NCwgNDMxOTIsIDQzMTk1LCA0MzE5OCwgNDMyMDEsIDQzMjA2LCA0MzIxMSwgNDMyMTQsIAotICAgIDQzMjE3LCA0MzIyNSwgNDMyMjgsIDQzMjM1LCA0MzI0MiwgNDMyNDYsIDQzMjUwLCA0MzI1NSwgNDMyNjAsIDQzMjY2LCAKLSAgICA0MzI3MSwgNDMyNzcsIDQzMjgzLCA0MzI4OCwgNDMyOTQsIDQzMzAyLCA0MzMwOCwgNDMzMTYsIDQzMzI0LCA0MzMzMCwgCi0gICAgNDMzMzgsIDQzMzQ2LCA0MzM1NSwgNDMzNjMsIDQzMzY5LCA0MzM3NywgNDMzODYsIDQzMzk0LCA0MzM5OCwgNDM0MDMsIAotICAgIDQzNDE2LCA0MzQyOSwgNDM0MzMsIDQzNDM3LCA0MzQ0MSwgNDM0NDUsIDQzNDU1LCA0MzQ1OSwgNDM0NjQsIDQzNDY5LCAKLSAgICA0MzQ3NCwgNDM0NzksIDQzNDg0LCA0MzQ4OSwgNDM0OTksIDQzNTA5LCA0MzUxNywgNDM1MjcsIDQzNTM3LCA0MzU0NSwgCi0gICAgNDM1NTUsIDQzNTY1LCA0MzU3MywgNDM1ODMsIDQzNTkzLCA0MzYwMSwgNDM2MDksIDQzNjE5LCA0MzYyOSwgNDM2MzIsIAotICAgIDQzNjM1LCA0MzYzOCwgNDM2NDMsIDQzNjQ3LCA0MzY1MywgNDM2NjAsIDQzNjY3LCA0MzY3NSwgNDM2ODIsIDQzNjg2LCAKLSAgICA0MzY5MCwgNDM2OTQsIDQzNjk4LCA0MzcwMCwgNDM3MDQsIDQzNzA4LCA0MzcxMywgNDM3MTgsIDQzNzI1LCA0MzczMiwgCi0gICAgNDM3MzUsIDQzNzQyLCA0Mzc0NCwgNDM3NDYsIDQzNzUwLCA0Mzc1NCwgNDM3NTksIDQzNzY1LCA0Mzc3MSwgNDM3NzcsIAotICAgIDQzNzgzLCA0Mzc5MiwgNDM4MDEsIDQzODEwLCA0MzgxNCwgNDM4MTYsIDQzODIwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA0MzgyNywgNDM4MzEsIDQzODM4LCA0Mzg0NSwgNDM4NTIsIDQzODU5LCA0Mzg2MywgNDM4NjcsIAotICAgIDQzODcxLCA0Mzg3NSwgNDM4ODAsIDQzODg2LCA0Mzg5MSwgNDM4OTcsIDQzOTAzLCA0MzkwOSwgNDM5MTUsIDQzOTIzLCAKLSAgICA0MzkzMCwgNDM5MzcsIDQzOTQ0LCA0Mzk1MSwgNDM5NTYsIDQzOTYyLCA0Mzk3MSwgNDM5NzUsIDQzOTgyLCA0Mzk4NiwgCi0gICAgNDM5OTAsIDQzOTk2LCA0NDAwMiwgNDQwMDgsIDQ0MDE0LCA0NDAxOCwgNDQwMjIsIDQ0MDI1LCA0NDAyOCwgNDQwMzIsIAotICAgIDQ0MDM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCA0NDA0NiwgNDQwNDksIDQ0MDUzLCA0NDA1NywgNDQwNjMsIDQ0MDY5LCA0NDA3NSwgNDQwODMsIDQ0MDkwLCAKLSAgICA0NDA5NCwgNDQxMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDQ0MTA3LCA0NDExMCwgNDQxMTMsIDQ0MTE2LCA0NDExOSwgNDQxMjIsIDQ0MTI1LCA0NDEyOCwgNDQxMzEsIDQ0MTM0LCAKLSAgICA0NDEzOCwgNDQxNDIsIDQ0MTQ2LCA0NDE1MCwgNDQxNTQsIDQ0MTU4LCA0NDE2MiwgNDQxNjYsIDQ0MTcwLCA0NDE3NCwgCi0gICAgNDQxNzgsIDQ0MTgxLCA0NDE4NCwgNDQxODcsIDQ0MTkwLCA0NDE5MywgNDQxOTYsIDQ0MTk5LCA0NDIwMiwgNDQyMDUsIAotICAgIDQ0MjA5LCA0NDIxMywgNDQyMTcsIDQ0MjIxLCA0NDIyNSwgNDQyMjksIDQ0MjMzLCA0NDIzNywgNDQyNDEsIDQ0MjQ1LCAKLSAgICA0NDI0OSwgNDQyNTUsIDQ0MjYxLCA0NDI2NywgNDQyNzQsIDQ0MjgxLCA0NDI4OCwgNDQyOTUsIDQ0MzAyLCA0NDMwOSwgCi0gICAgNDQzMTYsIDQ0MzIzLCA0NDMzMCwgNDQzMzcsIDQ0MzQ0LCA0NDM1MSwgNDQzNTgsIDQ0MzY1LCA0NDM3MiwgNDQzNzksIAotICAgIDQ0Mzg2LCA0NDM5MSwgNDQzOTcsIDQ0NDAzLCA0NDQwOSwgNDQ0MTQsIDQ0NDIwLCA0NDQyNiwgNDQ0MzIsIDQ0NDM3LCAKLSAgICA0NDQ0MywgNDQ0NDksIDQ0NDU0LCA0NDQ1OSwgNDQ0NjUsIDQ0NDcwLCA0NDQ3NiwgNDQ0ODIsIDQ0NDg3LCA0NDQ5MywgCi0gICAgNDQ0OTksIDQ0NTA0LCA0NDUxMCwgNDQ1MTYsIDQ0NTIyLCA0NDUyOCwgNDQ1MzQsIDQ0NTM5LCA0NDU0NSwgNDQ1NTEsIAotICAgIDQ0NTU3LCA0NDU2MiwgNDQ1NjgsIDQ0NTc0LCA0NDU4MCwgNDQ1ODUsIDQ0NTkxLCA0NDU5NywgNDQ2MDIsIDQ0NjA3LCAKLSAgICA0NDYxMywgNDQ2MTgsIDQ0NjI0LCA0NDYzMCwgNDQ2MzUsIDQ0NjQxLCA0NDY0NywgNDQ2NTIsIDQ0NjU4LCA0NDY2NCwgCi0gICAgNDQ2NzAsIDQ0Njc2LCA0NDY4MiwgNDQ2ODcsIDQ0NjkzLCA0NDY5OSwgNDQ3MDUsIDQ0NzEwLCA0NDcxNiwgNDQ3MjIsIAotICAgIDQ0NzI4LCA0NDczMywgNDQ3MzksIDQ0NzQ1LCA0NDc1MCwgNDQ3NTUsIDQ0NzYxLCA0NDc2NiwgNDQ3NzIsIDQ0Nzc4LCAKLSAgICA0NDc4MywgNDQ3ODksIDQ0Nzk1LCA0NDgwMCwgNDQ4MDYsIDQ0ODEyLCA0NDgxOCwgNDQ4MjQsIDQ0ODMwLCA0NDgzNCwgCi0gICAgNDQ4MzksIDQ0ODQ0LCA0NDg0OSwgNDQ4NTQsIDQ0ODU5LCA0NDg2NCwgNDQ4NjksIDQ0ODc0LCA0NDg3OSwgNDQ4ODQsIAotICAgIDQ0ODg4LCA0NDg5MiwgNDQ4OTYsIDQ0OTAwLCA0NDkwNCwgNDQ5MDgsIDQ0OTEyLCA0NDkxNiwgNDQ5MjAsIDQ0OTI1LCAKLSAgICA0NDkzMCwgNDQ5MzUsIDQ0OTQwLCA0NDk0NSwgNDQ5NTAsIDQ0OTU5LCA0NDk2OCwgNDQ5NzcsIDQ0OTg2LCA0NDk5NSwgCi0gICAgNDUwMDQsIDQ1MDEzLCA0NTAyMiwgNDUwMjksIDQ1MDM3LCA0NTA0NSwgNDUwNTIsIDQ1MDU5LCA0NTA2NywgNDUwNzUsIAotICAgIDQ1MDgyLCA0NTA4OSwgNDUwOTcsIDQ1MTA1LCA0NTExMiwgNDUxMTksIDQ1MTI3LCA0NTEzNSwgNDUxNDIsIDQ1MTQ5LCAKLSAgICA0NTE1NywgNDUxNjYsIDQ1MTc1LCA0NTE4MywgNDUxOTIsIDQ1MjAxLCA0NTIwOCwgNDUyMTUsIDQ1MjIzLCA0NTIzMiwgCi0gICAgNDUyNDEsIDQ1MjQ5LCA0NTI1OCwgNDUyNjcsIDQ1Mjc0LCA0NTI4MSwgNDUyOTAsIDQ1Mjk5LCA0NTMwNywgNDUzMTUsIAotICAgIDQ1MzI0LCA0NTMzMywgNDUzNDAsIDQ1MzQ3LCA0NTM1NiwgNDUzNjUsIDQ1MzczLCA0NTM4MSwgNDUzOTAsIDQ1Mzk5LCAKLSAgICA0NTQwNiwgNDU0MTMsIDQ1NDIyLCA0NTQzMSwgNDU0MzksIDQ1NDQ4LCA0NTQ1NywgNDU0NjUsIDQ1NDc1LCA0NTQ4NSwgCi0gICAgNDU0OTUsIDQ1NTA1LCA0NTUxNCwgNDU1MjMsIDQ1NTMyLCA0NTU0MSwgNDU1NDgsIDQ1NTU2LCA0NTU2NCwgNDU1NzIsIAotICAgIDQ1NTgwLCA0NTU4NSwgNDU1OTAsIDQ1NTk5LCA0NTYwNywgNDU2MTQsIDQ1NjIzLCA0NTYzMSwgNDU2MzgsIDQ1NjQ3LCAKLSAgICA0NTY1NSwgNDU2NjIsIDQ1NjcxLCA0NTY3OSwgNDU2ODYsIDQ1Njk1LCA0NTcwMywgNDU3MTAsIDQ1NzE5LCA0NTcyNywgCi0gICAgNDU3MzQsIDQ1NzQzLCA0NTc1MSwgNDU3NTgsIDQ1NzY3LCA0NTc3NSwgNDU3ODIsIDQ1NzkxLCA0NTc5OSwgNDU4MDYsIAotICAgIDQ1ODE1LCA0NTgyNCwgNDU4MzMsIDQ1ODQyLCA0NTg1NiwgNDU4NzAsIDQ1ODc3LCA0NTg4MiwgNDU4ODcsIDQ1ODkyLCAKLSAgICA0NTg5NywgNDU5MDIsIDQ1OTA3LCA0NTkxMiwgNDU5MTcsIDQ1OTI1LCA0NTkzMywgNDU5NDEsIDQ1OTQ5LCA0NTk1NCwgCi0gICAgNDU5NjEsIDQ1OTY4LCA0NTk3NSwgNDU5ODAsIDQ1OTg4LCA0NTk5NSwgNDYwMDMsIDQ2MDA3LCA0NjAxNCwgNDYwMjAsIAotICAgIDQ2MDI3LCA0NjAzMSwgNDYwMzcsIDQ2MDQzLCA0NjA0OSwgNDYwNTMsIDQ2MDU2LCA0NjA2MCwgNDYwNjQsIDQ2MDcxLCAKLSAgICA0NjA3NywgNDYwODMsIDQ2MDg5LCA0NjA5NSwgNDYxMDksIDQ2MTE5LCA0NjEzMywgNDYxNDcsIDQ2MTUzLCA0NjE2MywgCi0gICAgNDYxNzcsIDQ2MTgwLCA0NjE4MywgNDYxOTAsIDQ2MTk4LCA0NjIwMywgNDYyMDgsIDQ2MjE2LCA0NjIyOCwgNDYyNDAsIAotICAgIDQ2MjQ4LCA0NjI1MiwgNDYyNTYsIDQ2MjU5LCA0NjI2MiwgNDYyNjYsIDQ2MjcwLCA0NjI3MywgNDYyNzYsIDQ2MjgxLCAKLSAgICA0NjI4NiwgNDYyOTIsIDQ2Mjk4LCA0NjMwMywgNDYzMDgsIDQ2MzE0LCA0NjMyMCwgNDYzMjUsIDQ2MzMwLCA0NjMzNSwgCi0gICAgNDYzNDAsIDQ2MzQ2LCA0NjM1MiwgNDYzNTcsIDQ2MzYyLCA0NjM2OCwgNDYzNzQsIDQ2Mzc5LCA0NjM4NCwgNDYzODcsIAotICAgIDQ2MzkwLCA0NjM5OSwgNDY0MDEsIDQ2NDAzLCA0NjQwNiwgNDY0MTAsIDQ2NDE2LCA0NjQxOCwgNDY0MjEsIDQ2NDI4LCAKLSAgICA0NjQzNSwgNDY0NDMsIDQ2NDUxLCA0NjQ2MSwgNDY0NzUsIDQ2NDgwLCA0NjQ4NSwgNDY0ODksIDQ2NDk0LCA0NjUwMiwgCi0gICAgNDY1MTAsIDQ2NTE5LCA0NjUyOCwgNDY1MzcsIDQ2NTQ2LCA0NjU1MSwgNDY1NTYsIDQ2NTYyLCA0NjU2OCwgNDY1NzQsIAotICAgIDQ2NTgwLCA0NjU4MywgNDY1ODksIDQ2NTk1LCA0NjYwNSwgNDY2MTUsIDQ2NjIzLCA0NjYzMSwgNDY2NDAsIDQ2NjQ5LCAKLSAgICA0NjY1MywgNDY2NjEsIDQ2NjY5LCA0NjY3NywgNDY2ODUsIDQ2Njk0LCA0NjcwMywgNDY3MTIsIDQ2NzIxLCA0NjcyNiwgCi0gICAgNDY3MzEsIDQ2NzM2LCA0Njc0MSwgNDY3NDYsIDQ2NzUyLCA0Njc1OCwgNDY3NjMsIDQ2NzY5LCA0Njc3MSwgNDY3NzMsIAotICAgIDQ2Nzc1LCA0Njc3NywgNDY3ODAsIDQ2NzgzLCA0Njc4NSwgNDY3ODcsIDQ2Nzg5LCA0Njc5MywgNDY3OTcsIDQ2Nzk5LCAKLSAgICA0NjgwMSwgNDY4MDQsIDQ2ODA3LCA0NjgxMSwgNDY4MTcsIDQ2ODIzLCA0NjgyNSwgNDY4MzIsIDQ2ODM2LCA0Njg0MSwgCi0gICAgNDY4NDYsIDQ2ODQ4LCA0Njg1OCwgNDY4NjQsIDQ2ODcwLCA0Njg3NiwgNDY4ODIsIDQ2ODg4LCA0Njg5NCwgNDY4OTksIAotICAgIDQ2OTAyLCA0NjkwNSwgNDY5MDgsIDQ2OTEwLCA0NjkxMiwgNDY5MTYsIDQ2OTIwLCA0NjkyNSwgNDY5MzAsIDQ2OTM1LCAKLSAgICA0NjkzOCwgNDY5NDIsIDQ2OTQ3LCA0Njk1MCwgNDY5NTQsIDQ2OTU5LCA0Njk2NCwgNDY5NjksIDQ2OTc0LCA0Njk3OSwgCi0gICAgNDY5ODQsIDQ2OTg5LCA0Njk5NCwgNDY5OTksIDQ3MDA0LCA0NzAwOSwgNDcwMTQsIDQ3MDIwLCA0NzAyNiwgNDcwMzIsIAotICAgIDQ3MDM0LCA0NzAzNywgNDcwMzksIDQ3MDQyLCA0NzA0NCwgNDcwNDYsIDQ3MDQ4LCA0NzA1MCwgNDcwNTIsIDQ3MDU0LCAKLSAgICA0NzA1NiwgNDcwNTgsIDQ3MDYwLCA0NzA2MiwgNDcwNjQsIDQ3MDY2LCA0NzA2OCwgNDcwNzAsIDQ3MDcyLCA0NzA3NCwgCi0gICAgNDcwNzYsIDQ3MDgxLCA0NzA4NiwgNDcwOTEsIDQ3MDk2LCA0NzEwMSwgNDcxMDYsIDQ3MTExLCA0NzExNiwgNDcxMjEsIAotICAgIDQ3MTI2LCA0NzEzMSwgNDcxMzYsIDQ3MTQxLCA0NzE0NiwgNDcxNTEsIDQ3MTU2LCA0NzE2MSwgNDcxNjYsIDQ3MTcxLCAKLSAgICA0NzE3NiwgNDcxODAsIDQ3MTg0LCA0NzE4OCwgNDcxOTQsIDQ3MjAwLCA0NzIwNSwgNDcyMTAsIDQ3MjE1LCA0NzIyMCwgCi0gICAgNDcyMjUsIDQ3MjMwLCA0NzIzOCwgNDcyNDYsIDQ3MjU0LCA0NzI2MiwgNDcyNzAsIDQ3Mjc4LCA0NzI4NiwgNDcyOTQsIAotICAgIDQ3MzAwLCA0NzMwNSwgNDczMTAsIDQ3MzE1LCA0NzMxOCwgNDczMjIsIDQ3MzI2LCA0NzMzMCwgNDczMzQsIDQ3MzM4LCAKLSAgICA0NzM0MiwgNDczNDksIDQ3MzU2LCA0NzM2NCwgNDczNzIsIDQ3Mzc3LCA0NzM4MiwgNDczODksIDQ3Mzk2LCA0NzQwMywgCi0gICAgNDc0MTAsIDQ3NDEzLCA0NzQxNiwgNDc0MjEsIDQ3NDIzLCA0NzQyNywgNDc0MzIsIDQ3NDM0LCA0NzQzNiwgNDc0MzgsIAotICAgIDQ3NDQwLCA0NzQ0NSwgNDc0NDgsIDQ3NDUwLCA0NzQ1NSwgNDc0NjIsIDQ3NDY5LCA0NzQ3MiwgNDc0NzYsIDQ3NDgxLCAKLSAgICA0NzQ4NiwgNDc0OTQsIDQ3NTAwLCA0NzUwNiwgNDc1MTgsIDQ3NTI1LCA0NzUzMiwgNDc1MzcsIDQ3NTQyLCA0NzU0OCwgCi0gICAgNDc1NTEsIDQ3NTU0LCA0NzU1OSwgNDc1NjEsIDQ3NTY1LCA0NzU2NywgNDc1NjksIDQ3NTcxLCA0NzU3MywgNDc1NzUsIAotICAgIDQ3NTc3LCA0NzU4MiwgNDc1ODQsIDQ3NTg2LCA0NzU4OCwgNDc1OTAsIDQ3NTk0LCA0NzU5NiwgNDc1OTksIDQ3NjA0LCAKLSAgICA0NzYwOSwgNDc2MTQsIDQ3NjE5LCA0NzYyNSwgNDc2MzEsIDQ3NjMzLCA0NzYzNiwgNDc2NDMsIDQ3NjUwLCA0NzY1NywgCi0gICAgNDc2NjQsIDQ3NjY4LCA0NzY3MiwgNDc2NzQsIDQ3Njc2LCA0NzY4MCwgNDc2ODYsIDQ3NjkxLCA0NzY5MywgNDc2OTcsIAotICAgIDQ3NzA2LCA0NzcxNCwgNDc3MjIsIDQ3NzI4LCA0NzczNCwgNDc3MzksIDQ3NzQ1LCA0Nzc1MCwgNDc3NTMsIDQ3NzY3LCAKLSAgICA0Nzc3MCwgNDc3NzUsIDQ3NzgwLCA0Nzc4NiwgNDc3OTYsIDQ3Nzk4LCA0NzgwNCwgNDc4MTAsIDQ3ODE0LCA0NzgyMSwgCi0gICAgNDc4MjUsIDQ3ODI3LCA0NzgyOSwgNDc4MzMsIDQ3ODM5LCA0Nzg0NCwgNDc4NTAsIDQ3ODUyLCA0Nzg1OCwgNDc4NjAsIAotICAgIDQ3ODY2LCA0Nzg2OCwgNDc4NzAsIDQ3ODc1LCA0Nzg3NywgNDc4ODEsIDQ3ODg2LCA0Nzg4OCwgNDc4OTMsIDQ3ODk4LCAKLSAgICA0NzkwMiwgNDc5MDksIDAsIDQ3OTE5LCA0NzkyNSwgNDc5MjgsIDQ3OTM0LCA0NzkzNywgNDc5NDIsIDQ3OTQ3LCA0Nzk1MSwgCi0gICAgNDc5NTMsIDQ3OTU1LCA0Nzk1OSwgNDc5NjMsIDQ3OTY3LCA0Nzk3MSwgNDc5NzYsIDQ3OTc4LCA0Nzk4MywgNDc5ODYsIAotICAgIDQ3OTg5LCA0Nzk5MiwgNDc5OTYsIDQ4MDAwLCA0ODAwNSwgNDgwMDksIDQ4MDE0LCA0ODAxOSwgNDgwMjMsIDQ4MDI4LCAKLSAgICA0ODAzNCwgNDgwMzcsIDQ4MDQzLCA0ODA0OCwgNDgwNTIsIDQ4MDU3LCA0ODA2MywgNDgwNjksIDQ4MDc2LCA0ODA4MiwgCi0gICAgNDgwODksIDQ4MDk2LCA0ODA5OCwgNDgxMDUsIDQ4MTA5LCA0ODExNSwgNDgxMjEsIDQ4MTI2LCA0ODEzMiwgNDgxMzYsIAotICAgIDQ4MTQxLCA0ODE0NCwgNDgxNDksIDQ4MTU1LCA0ODE2MiwgNDgxNzAsIDQ4MTc3LCA0ODE4NiwgNDgxOTYsIDQ4MjAzLCAKLSAgICA0ODIwOSwgNDgyMTMsIDQ4MjIwLCA0ODIyNSwgNDgyMzQsIDQ4MjM3LCA0ODI0MCwgNDgyNDksIDQ4MjU5LCA0ODI2NiwgCi0gICAgNDgyNjgsIDQ4Mjc0LCA0ODI3OSwgNDgyODEsIDQ4Mjg0LCA0ODI4OCwgNDgyOTYsIDQ4MzA1LCA0ODMwOCwgNDgzMTMsIAotICAgIDQ4MzE4LCA0ODMyNiwgNDgzMzQsIDQ4MzQyLCA0ODM1MCwgNDgzNTYsIDQ4MzYyLCA0ODM2OCwgNDgzNzYsIDQ4MzgxLCAKLSAgICA0ODM4NCwgNDgzODgsIDQ4MzkxLCA0ODQwMywgNDg0MTMsIDQ4NDI0LCA0ODQzMywgNDg0NDQsIDQ4NDU0LCA0ODQ2MywgCi0gICAgNDg0NjksIDQ4NDc3LCA0ODQ4MSwgNDg0ODksIDQ4NDkzLCA0ODUwMSwgNDg1MDgsIDQ4NTE1LCA0ODUyNCwgNDg1MzMsIAotICAgIDQ4NTQzLCA0ODU1MywgNDg1NjMsIDQ4NTczLCA0ODU4MiwgNDg1OTEsIDQ4NjAxLCA0ODYxMSwgNDg2MjAsIDQ4NjI5LCAKLSAgICA0ODYzNSwgNDg2NDEsIDQ4NjQ3LCA0ODY1MywgNDg2NTksIDQ4NjY1LCA0ODY3MSwgNDg2NzcsIDQ4NjgzLCA0ODY5MCwgCi0gICAgNDg2OTYsIDQ4NzAyLCA0ODcwOCwgNDg3MTQsIDQ4NzIwLCA0ODcyNiwgNDg3MzIsIDQ4NzM4LCA0ODc0NCwgNDg3NTEsIAotICAgIDQ4NzU4LCA0ODc2NSwgNDg3NzIsIDQ4Nzc5LCA0ODc4NiwgNDg3OTMsIDQ4ODAwLCA0ODgwNywgNDg4MTQsIDQ4ODIyLCAKLSAgICA0ODgyNywgNDg4MzAsIDQ4ODM0LCA0ODgzOCwgNDg4NDQsIDQ4ODQ3LCA0ODg1MywgNDg4NTksIDQ4ODY0LCA0ODg2OCwgCi0gICAgNDg4NzMsIDQ4ODc5LCA0ODg4NiwgNDg4ODksIDQ4ODk2LCA0ODkwMywgNDg5MDcsIDQ4OTE2LCA0ODkyNSwgNDg5MzAsIAotICAgIDQ4OTM2LCA0ODk0MSwgNDg5NDYsIDQ4OTUzLCA0ODk2MCwgNDg5NjgsIDQ4OTc2LCA0ODk4NSwgNDg5ODksIDQ4OTk4LCAKLSAgICA0OTAwMywgNDkwMDcsIDQ5MDE0LCA0OTAxOCwgNDkwMjUsIDQ5MDMzLCA0OTAzOCwgNDkwNDYsIDQ5MDUwLCA0OTA1NSwgCi0gICAgNDkwNTksIDQ5MDY0LCA0OTA2OCwgNDkwNzMsIDQ5MDc4LCA0OTA4NywgNDkwODksIDQ5MDkyLCA0OTA5NSwgNDkxMDIsIAotICAgIDQ5MTA5LCA0OTExNCwgNDkxMjIsIDQ5MTI4LCA0OTEzNCwgNDkxMzksIDQ5MTQyLCA0OTE0NywgNDkxNTIsIDQ5MTU3LCAKLSAgICA0OTE2NSwgNDkxNjksIDQ5MTc2LCA0OTE4NCwgNDkxOTIsIDQ5MTk3LCA0OTIwMiwgNDkyMDgsIDQ5MjEzLCA0OTIxOCwgCi0gICAgNDkyMjQsIDQ5MjI5LCA0OTIzMiwgNDkyMzYsIDQ5MjQwLCA0OTI0NywgNDkyNTYsIDQ5MjYxLCA0OTI3MCwgNDkyNzksIAotICAgIDQ5Mjg1LCA0OTI5MSwgNDkyOTYsIDQ5MzAxLCA0OTMwNiwgNDkzMTEsIDQ5MzE3LCA0OTMyMywgNDkzMzEsIDQ5MzM5LCAKLSAgICA0OTM0NSwgNDkzNTEsIDQ5MzU2LCA0OTM2MSwgNDkzNjgsIDQ5Mzc1LCA0OTM4MSwgNDkzODQsIDQ5Mzg3LCA0OTM5MSwgCi0gICAgNDkzOTUsIDQ5Mzk5LCA0OTQwNCwgNDk0MTAsIDQ5NDE2LCA0OTQyMywgNDk0MzAsIDQ5NDM1LCA0OTQzOSwgNDk0NDMsIAotICAgIDQ5NDQ3LCA0OTQ1MSwgNDk0NTUsIDQ5NDU5LCA0OTQ2MywgNDk0NjcsIDQ5NDcxLCA0OTQ3NSwgNDk0NzksIDQ5NDgzLCAKLSAgICA0OTQ4NywgNDk0OTEsIDQ5NDk1LCA0OTQ5OSwgNDk1MDMsIDQ5NTA3LCA0OTUxMSwgNDk1MTUsIDQ5NTE5LCA0OTUyMywgCi0gICAgNDk1MjcsIDQ5NTMxLCA0OTUzNSwgNDk1MzksIDQ5NTQzLCA0OTU0NywgNDk1NTEsIDQ5NTU1LCA0OTU1OSwgNDk1NjMsIAotICAgIDQ5NTY3LCA0OTU3MSwgNDk1NzUsIDQ5NTc5LCA0OTU4MywgNDk1ODcsIDQ5NTkxLCA0OTU5NSwgNDk1OTksIDQ5NjAzLCAKLSAgICA0OTYwNywgNDk2MTEsIDQ5NjE1LCA0OTYxOSwgNDk2MjMsIDQ5NjI3LCA0OTYzMSwgNDk2MzUsIDQ5NjM5LCA0OTY0MywgCi0gICAgNDk2NDcsIDQ5NjUxLCA0OTY1NSwgNDk2NTksIDQ5NjYzLCA0OTY2NywgNDk2NzEsIDQ5Njc1LCA0OTY3OSwgNDk2ODMsIAotICAgIDQ5Njg3LCA0OTY5MSwgNDk2OTUsIDQ5Njk5LCA0OTcwMywgNDk3MDcsIDQ5NzExLCA0OTcxNSwgNDk3MTksIDQ5NzIzLCAKLSAgICA0OTcyNywgNDk3MzEsIDQ5NzM1LCA0OTczOSwgNDk3NDMsIDQ5NzQ3LCA0OTc1MSwgNDk3NTUsIDQ5NzU5LCA0OTc2MywgCi0gICAgNDk3NjcsIDQ5NzcxLCA0OTc3NSwgNDk3NzksIDQ5NzgzLCA0OTc4NywgNDk3OTEsIDQ5Nzk1LCA0OTc5OSwgNDk4MDMsIAotICAgIDQ5ODA3LCA0OTgxMSwgNDk4MTUsIDQ5ODE5LCA0OTgyMywgNDk4MjcsIDQ5ODMxLCA0OTgzNSwgNDk4MzksIDQ5ODQzLCAKLSAgICA0OTg0NywgNDk4NTEsIDQ5ODU1LCA0OTg1OSwgNDk4NjMsIDQ5ODY3LCA0OTg3MSwgNDk4NzUsIDQ5ODc5LCA0OTg4MywgCi0gICAgNDk4ODcsIDQ5ODkxLCA0OTg5NSwgNDk4OTksIDQ5OTAzLCA0OTkwNywgNDk5MTEsIDQ5OTE1LCA0OTkxOSwgNDk5MjMsIAotICAgIDQ5OTI3LCA0OTkzMSwgNDk5MzUsIDQ5OTM5LCA0OTk0MywgNDk5NDcsIDQ5OTUxLCA0OTk1NSwgNDk5NTksIDQ5OTYzLCAKLSAgICA0OTk2NywgNDk5NzEsIDQ5OTc1LCA0OTk3OSwgNDk5ODMsIDQ5OTg3LCA0OTk5MSwgNDk5OTUsIDQ5OTk5LCA1MDAwMywgCi0gICAgNTAwMDcsIDUwMDExLCA1MDAxNSwgNTAwMTksIDUwMDIzLCA1MDAyNywgNTAwMzEsIDUwMDM1LCA1MDAzOSwgNTAwNDMsIAotICAgIDUwMDQ3LCA1MDA1MSwgNTAwNTUsIDUwMDU5LCA1MDA2MywgNTAwNjcsIDUwMDcxLCA1MDA3NSwgNTAwNzksIDUwMDgzLCAKLSAgICA1MDA4NywgNTAwOTEsIDUwMDk1LCA1MDA5OSwgNTAxMDMsIDUwMTA3LCA1MDExMSwgNTAxMTUsIDUwMTE5LCA1MDEyMywgCi0gICAgNTAxMjcsIDUwMTMxLCA1MDEzNSwgNTAxMzksIDUwMTQzLCA1MDE0NywgNTAxNTEsIDUwMTU1LCA1MDE1OSwgNTAxNjMsIAotICAgIDUwMTY3LCA1MDE3MSwgNTAxNzUsIDUwMTc5LCA1MDE4MywgNTAxODcsIDUwMTkxLCA1MDE5NSwgNTAxOTksIDUwMjAzLCAKLSAgICA1MDIwNywgNTAyMTEsIDUwMjE1LCA1MDIxOSwgNTAyMjMsIDUwMjI3LCA1MDIzMSwgNTAyMzUsIDUwMjM5LCA1MDI0MywgCi0gICAgNTAyNDcsIDUwMjUxLCA1MDI1NSwgNTAyNTksIDUwMjYzLCA1MDI2NywgNTAyNzEsIDUwMjc1LCA1MDI3OSwgNTAyODMsIAotICAgIDUwMjg3LCA1MDI5MSwgNTAyOTUsIDUwMjk5LCA1MDMwMywgNTAzMDcsIDUwMzExLCA1MDMxNSwgNTAzMTksIDUwMzIzLCAKLSAgICA1MDMyNywgNTAzMzEsIDUwMzM1LCA1MDMzOSwgNTAzNDMsIDUwMzQ3LCA1MDM1MSwgNTAzNTUsIDUwMzU5LCA1MDM2MywgCi0gICAgNTAzNjcsIDUwMzcxLCA1MDM3NSwgNTAzNzksIDUwMzgzLCA1MDM4NywgNTAzOTEsIDUwMzk1LCA1MDM5OSwgNTA0MDMsIAotICAgIDUwNDA3LCA1MDQxMSwgNTA0MTUsIDUwNDE5LCA1MDQyMywgNTA0MjcsIDUwNDMxLCA1MDQzNSwgNTA0MzksIDUwNDQzLCAKLSAgICA1MDQ0NywgNTA0NTEsIDUwNDU1LCA1MDQ1OSwgNTA0NjYsIDUwNDc0LCA1MDQ4MCwgNTA0ODYsIDUwNDkzLCA1MDUwMCwgCi0gICAgNTA1MDYsIDUwNTEyLCA1MDUxOCwgNTA1MjQsIDUwNTI5LCA1MDUzNCwgNTA1MzksIDUwNTQ0LCA1MDU1MCwgNTA1NTYsIAotICAgIDUwNTY0LCA1MDU3MSwgNTA1NzcsIDUwNTgzLCA1MDU5MSwgNTA2MDAsIDUwNjA3LCA1MDYxNywgNTA2MjgsIDUwNjMxLCAKLSAgICA1MDYzNCwgNTA2MzgsIDUwNjQyLCA1MDY0OSwgNTA2NTYsIDUwNjY3LCA1MDY3OCwgNTA2ODgsIDUwNjk4LCA1MDcwNSwgCi0gICAgNTA3MTIsIDUwNzE5LCA1MDcyNiwgNTA3MzcsIDUwNzQ4LCA1MDc1OSwgNTA3NzAsIDUwNzgwLCA1MDc5MCwgNTA4MDIsIAotICAgIDUwODE0LCA1MDgyNSwgNTA4MzYsIDUwODQ4LCA1MDg2MCwgNTA4NjksIDUwODc5LCA1MDg4OSwgNTA5MDAsIDUwOTExLCAKLSAgICA1MDkxOCwgNTA5MjUsIDUwOTMyLCA1MDkzOSwgNTA5NDksIDUwOTU5LCA1MDk2NywgNTA5NzUsIDUwOTgyLCA1MDk4OSwgCi0gICAgNTA5OTYsIDUxMDAzLCA1MTAxMCwgNTEwMTUsIDUxMDIwLCA1MTAyNiwgNTEwMzQsIDUxMDQ0LCA1MTA1NCwgNTEwNjQsIAotICAgIDUxMDc0LCA1MTA4NCwgNTEwOTQsIDUxMTA0LCA1MTExNCwgNTExMjQsIDUxMTM0LCA1MTE0NCwgNTExNTUsIDUxMTY2LCAKLSAgICA1MTE3NiwgNTExODYsIDUxMTk3LCA1MTIwOCwgNTEyMTgsIDUxMjI4LCA1MTIzOSwgNTEyNTAsIDUxMjYwLCA1MTI3MCwgCi0gICAgNTEyODEsIDUxMjkyLCA1MTMwOCwgNTEzMjcsIDUxMzQzLCA1MTM2MiwgNTEzNzgsIDUxMzk0LCA1MTQxMCwgNTE0MjYsIAotICAgIDUxNDM3LCA1MTQ0OSwgNTE0NjAsIDUxNDcyLCA1MTQ5MSwgNTE1MTAsIDUxNTE4LCA1MTUyNCwgNTE1MzEsIDUxNTM4LCAKLSAgICA1MTU0NSwgNTE1NTIsIDUxNTU3LCA1MTU2MywgNTE1NjgsIDUxNTczLCA1MTU3OSwgNTE1ODQsIDUxNTg5LCA1MTU5NCwgCi0gICAgNTE1OTksIDUxNjA0LCA1MTYxMSwgNTE2MTYsIDUxNjIzLCA1MTYyOCwgNTE2MzMsIDUxNjM3LCA1MTY0MSwgNTE2NDgsIAotICAgIDUxNjU1LCA1MTY2MiwgNTE2NjksIDUxNjc2LCA1MTY4MywgNTE2OTYsIDUxNzA5LCA1MTcyMiwgNTE3MzUsIDUxNzQzLCAKLSAgICA1MTc1MSwgNTE3NTcsIDUxNzYzLCA1MTc3MCwgNTE3NzcsIDUxNzg0LCA1MTc5MSwgNTE3OTUsIDUxODAwLCA1MTgwOCwgCi0gICAgNTE4MTYsIDUxODI0LCA1MTgzMSwgNTE4MzUsIDUxODQzLCA1MTg1MSwgNTE4NTUsIDUxODU5LCA1MTg2NCwgNTE4NzEsIAotICAgIDUxODc5LCA1MTg4NywgNTE5MDYsIDUxOTI1LCA1MTk0NCwgNTE5NjMsIDUxOTgyLCA1MjAwMSwgNTIwMjAsIDUyMDM5LCAKLSAgICA1MjA0NSwgNTIwNTIsIDUyMDYxLCA1MjA2OSwgNTIwNzcsIDUyMDgyLCA1MjA4NSwgNTIwODgsIDUyMDkzLCA1MjA5NiwgCi0gICAgNTIxMTUsIDUyMTIyLCA1MjEyOCwgNTIxMzQsIDUyMTM4LCA1MjE0MSwgNTIxNDQsIDUyMTQ3LCA1MjE1OSwgNTIxNzIsIAotICAgIDUyMTc5LCA1MjE4NiwgNTIxODksIDUyMTkzLCA1MjE5NiwgNTIyMDEsIDUyMjA2LCA1MjIxMSwgNTIyMTcsIDUyMjI2LCAKLSAgICA1MjIzMywgNTIyNDAsIDUyMjQ4LCA1MjI1NSwgNTIyNjIsIDUyMjY1LCA1MjI3MSwgNTIyNzcsIDUyMjgwLCA1MjI4MywgCi0gICAgNTIyODgsIDUyMjkzLCA1MjI5OSwgNTIzMDUsIDUyMzA5LCA1MjMxNCwgNTIzMjEsIDUyMzI1LCA1MjMzMSwgNTIzMzUsIAotICAgIDUyMzM5LCA1MjM0NywgNTIzNTksIDUyMzY4LCA1MjM3MiwgNTIzNzQsIDUyMzgzLCA1MjM5MiwgNTIzOTgsIDUyNDAxLCAKLSAgICA1MjQwNywgNTI0MTMsIDUyNDE4LCA1MjQyMywgNTI0MjgsIDUyNDMzLCA1MjQzOCwgNTI0NDMsIDUyNDQ1LCA1MjQ1MSwgCi0gICAgNTI0NTYsIDUyNDYzLCA1MjQ2NywgNTI0NzMsIDUyNDc2LCA1MjQ4MCwgNTI0ODcsIDUyNDk0LCA1MjQ5NiwgNTI0OTgsIAotICAgIDUyNTA0LCA1MjUxMCwgNTI1MTYsIDUyNTI1LCA1MjUzNCwgNTI1NDEsIDUyNTQ4LCA1MjU1NCwgNTI1NjAsIDUyNTY1LCAKLSAgICA1MjU3MCwgNTI1NzUsIDUyNTgxLCA1MjU4NywgNTI1OTIsIDUyNTk5LCA1MjYwMywgNTI2MDcsIDUyNjIwLCA1MjYzMywgCi0gICAgNTI2NDUsIDUyNjU0LCA1MjY2MCwgNTI2NjcsIDUyNjcyLCA1MjY3NywgNTI2ODIsIDUyNjg3LCA1MjY5MiwgNTI2OTQsIAotICAgIDUyNzAxLCA1MjcwOCwgNTI3MTUsIDUyNzIyLCA1MjcyOSwgNTI3MzcsIDUyNzQzLCA1Mjc0OCwgNTI3NTQsIDUyNzYwLCAKLSAgICA1Mjc2NiwgNTI3NzMsIDUyNzc5LCA1Mjc4NywgNTI3OTUsIDUyODAzLCA1MjgxMSwgNTI4MTgsIDUyODI0LCA1MjgzMCwgCi0gICAgNTI4MzksIDUyODQzLCA1Mjg1MiwgNTI4NjEsIDUyODcwLCA1Mjg3OCwgNTI4ODIsIDUyODg4LCA1Mjg5NSwgNTI5MDIsIAotICAgIDUyOTA2LCA1MjkxMiwgNTI5MTksIDUyOTI0LCA1MjkyOSwgNTI5MzUsIDUyOTQwLCA1Mjk0NSwgNTI5NTIsIDUyOTU5LCAKLSAgICA1Mjk2NCwgNTI5NjksIDUyOTc3LCA1Mjk4NSwgNTI5OTUsIDUzMDA1LCA1MzAxMiwgNTMwMTksIDUzMDIzLCA1MzAyNywgCi0gICAgNTMwMzksIDUzMDQ1LCA1MzA1MSwgNTMwNTYsIDUzMDYxLCA1MzA2OCwgNTMwNzUsIDUzMDgxLCA1MzA4NywgNTMwOTYsIAotICAgIDUzMTA0LCA1MzExMiwgNTMxMTksIDUzMTI2LCA1MzEzMywgNTMxMzksIDUzMTQ2LCA1MzE1MiwgNTMxNTksIDUzMTY2LCAKLSAgICA1MzE3MywgNTMxODAsIDUzMTg2LCA1MzE5MSwgNTMyMDAsIDUzMjEwLCA1MzIxNywgNTMyMjYsIDUzMjMyLCA1MzIzNywgCi0gICAgNTMyNDIsIDUzMjUyLCA1MzI1OCwgNTMyNjQsIDUzMjcwLCA1MzI3OCwgNTMyODMsIDUzMjkwLCA1MzI5NywgNTMzMDgsIAotICAgIDUzMzE1LCA1MzMyMiwgNTMzMjksIDUzMzM2LCA1MzM0MywgNTMzNTAsIDUzMzU3LCA1MzM2OSwgNTMzODEsIDUzMzkyLCAKLSAgICA1MzQwMywgNTM0MTYsIDUzNDI5LCA1MzQzNCwgNTM0MzksIDUzNDQ4LCA1MzQ1NywgNTM0NjQsIDUzNDcxLCA1MzQ4MCwgCi0gICAgNTM0ODksIDUzNDk3LCA1MzUwNSwgNTM1MTMsIDUzNTIxLCA1MzUzMSwgNTM1NDEsIDUzNTU1LCA1MzU2OSwgNTM1NzcsIAotICAgIDUzNTg1LCA1MzU5NywgNTM2MDksIDUzNjE3LCA1MzYyNSwgNTM2MzUsIDUzNjQ1LCA1MzY1MCwgNTM2NTUsIDUzNjY0LCAKLSAgICA1MzY3MywgNTM2NzgsIDUzNjgzLCA1MzY5MSwgNTM2OTcsIDUzNzAzLCA1MzcxMSwgNTM3MTksIDUzNzMyLCA1Mzc0NSwgCi0gICAgNTM3NDksIDUzNzUzLCA1Mzc2MCwgNTM3NjcsIDUzNzc0LCA1Mzc4MiwgNTM3OTAsIDUzNzk5LCA1MzgwOCwgNTM4MTQsIAotICAgIDUzODIwLCA1MzgyNywgNTM4MzQsIDUzODQxLCA1Mzg0OCwgNTM4NTcsIDUzODY2LCA1Mzg2OSwgNTM4NzIsIDUzODc3LCAKLSAgICA1Mzg4MiwgNTM4ODgsIDUzODk0LCA1MzkwMSwgNTM5MDgsIDUzOTE4LCA1MzkyOCwgNTM5MzUsIDUzOTQyLCA1Mzk1MCwgCi0gICAgNTM5NTgsIDUzOTY2LCA1Mzk3NCwgNTM5ODIsIDUzOTkwLCA1Mzk5NiwgNTQwMDIsIDU0MDA2LCA1NDAxMCwgNTQwMTcsIAotICAgIDU0MDI0LCA1NDAyOSwgNTQwMzQsIDU0MDM5LCA1NDA0NCwgNTQwNTAsIDU0MDY0LCA1NDA3MSwgNTQwNzgsIDU0MDgyLCAKLSAgICA1NDA4NCwgNTQwODYsIDU0MDkxLCA1NDA5NiwgNTQxMDEsIDU0MTA2LCA1NDExNCwgNTQxMjEsIDU0MTI4LCA1NDEzNiwgCi0gICAgNTQxNDgsIDU0MTU2LCA1NDE2NCwgNTQxNzUsIDU0MTc5LCA1NDE4MywgNTQxODksIDU0MTk3LCA1NDIxMCwgNTQyMTcsIAotICAgIDU0MjI0LCA1NDIzMSwgNTQyMzYsIDU0MjQzLCA1NDI1MiwgNTQyNjAsIDU0MjY2LCA1NDI3MiwgNTQyNzgsIDU0Mjg3LCAKLSAgICA1NDI5NiwgNTQzMDQsIDU0MzEzLCA1NDMxOCwgNTQzMjEsIDU0MzI2LCA1NDMzMiwgNTQzMzgsIDU0MzQ0LCA1NDM1MCwgCi0gICAgNTQzNTQsIDU0MzU3LCA1NDM2MSwgNTQzNjUsIDU0MzcxLCA1NDM3NywgNTQzODMsIDU0Mzg5LCA1NDM5MywgNTQzOTcsIAotICAgIDU0NDA0LCA1NDQxMSwgNTQ0MTgsIDU0NDI1LCA1NDQzMiwgNTQ0MzksIDU0NDQ5LCA1NDQ1OSwgNTQ0NjYsIDU0NDczLCAKLSAgICA1NDQ4MSwgNTQ0ODksIDU0NDkzLCA1NDQ5OCwgNTQ1MDMsIDU0NTA5LCA1NDUxNSwgNTQ1MTgsIDU0NTIxLCA1NDUyNCwgCi0gICAgNTQ1MjcsIDU0NTMxLCA1NDUzNiwgNTQ1NDEsIDU0NTQ2LCA1NDU1MSwgNTQ1NTYsIDU0NTYwLCA1NDU2NCwgNTQ1NjgsIAotICAgIDU0NTcyLCA1NDU3NiwgNTQ1ODAsIDU0NTg0LCA1NDU5MCwgNTQ1OTQsIDU0NjAwLCA1NDYwNSwgNTQ2MTIsIDU0NjIwLCAKLSAgICA1NDYyNywgNTQ2MzUsIDU0NjQyLCA1NDY1MCwgNTQ2NTksIDU0NjY2LCA1NDY3NiwgNTQ2ODcsIDU0NjkzLCA1NDcwMiwgCi0gICAgNTQ3MDgsIDU0NzE3LCA1NDcyNiwgNTQ3MzIsIDU0NzM4LCA1NDc0MiwgNTQ3NDYsIDU0NzU1LCA1NDc2NCwgNTQ3NzEsIAotICAgIDU0Nzc4LCA1NDc4NywgMCwgMCwgMCwgNTQ3OTYsIDU0ODAxLCA1NDgwNSwgNTQ4MDksIDU0ODE0LCA1NDgxOSwgNTQ4MjQsIAotICAgIDU0ODMyLCA1NDg0MCwgNTQ4NDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDMyMjI2LCAzMjIzMywgMzIyNDAsIDMyMjQ3LCAzMjI1NCwgCisgICAgMzIyNjMsIDMyMjcyLCAzMjI4MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzIyOTAsIDMyMjk1LCAzMjMwMCwgMzIzMDUsIAorICAgIDMyMzEwLCAzMjMxOSwgMzIzMzAsIDMyMzM5LCAzMjM1MCwgMzIzNTYsIDMyMzY5LCAzMjM3NSwgMzIzODIsIDMyMzg5LCAKKyAgICAzMjM5NCwgMzI0MDAsIDMyNDA2LCAzMjQxNywgMzI0MjYsIDMyNDMzLCAzMjQ0MCwgMzI0NDksIDMyNDU2LCAzMjQ2NSwgCisgICAgMzI0NzUsIDMyNDg1LCAzMjQ5MiwgMzI0OTksIDMyNTA2LCAzMjUxNiwgMzI1MjEsIDMyNTI5LCAzMjUzNSwgMzI1NDMsIAorICAgIDMyNTUyLCAzMjU1NywgMzI1NjQsIDMyNTcwLCAzMjU3NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzI1ODAsIAorICAgIDMyNTg1LCAzMjU5MSwgMzI1OTgsIDMyNjA2LCAzMjYxMiwgMzI2MTgsIDMyNjI0LCAzMjYyOSwgMzI2MzYsIDMyNjQyLCAKKyAgICAzMjY0OCwgMzI2NTQsIDMyNjYyLCAzMjY2NywgMzI2NzUsIDMyNjgwLCAzMjY4NiwgMzI2OTIsIDMyNjk5LCAzMjcwNywgCisgICAgMzI3MTQsIDMyNzIwLCAzMjcyNywgMzI3MzQsIDMyNzQwLCAzMjc0NywgMzI3NTQsIDMyNzYwLCAzMjc2NSwgMzI3NzEsIAorICAgIDMyNzc5LCAzMjc4NywgMzI3OTMsIDMyNzk5LCAzMjgwNSwgMzI4MTEsIDMyODE5LCAzMjgyMywgMzI4MjksIDMyODM1LCAKKyAgICAzMjg0MSwgMzI4NDcsIDMyODUzLCAzMjg1OSwgMzI4NjMsIDMyODY4LCAzMjg3MywgMzI4ODAsIDMyODg1LCAzMjg4OSwgCisgICAgMzI4OTUsIDMyOTAwLCAzMjkwNSwgMzI5MDksIDMyOTE0LCAzMjkxOSwgMzI5MjMsIDMyOTI3LCAzMjkzMiwgMzI5MzksIAorICAgIDMyOTQzLCAzMjk0OCwgMzI5NTMsIDMyOTU3LCAzMjk2MiwgMzI5NjYsIDMyOTcxLCAzMjk3NSwgMzI5ODEsIDMyOTg2LCAKKyAgICAzMjk5MywgMzI5OTgsIDMzMDAzLCAzMzAwNywgMzMwMTIsIDMzMDE3LCAzMzAyNCwgMzMwMjksIDMzMDM1LCAzMzA0MCwgCisgICAgMzMwNDQsIDMzMDQ5LCAzMzA1MywgMzMwNTgsIDMzMDY1LCAzMzA3MiwgMzMwNzcsIDMzMDgyLCAzMzA4NiwgMzMwOTIsIAorICAgIDMzMDk4LCAzMzEwMywgMzMxMDgsIDMzMTEzLCAzMzExOSwgMzMxMjQsIDMzMTMwLCAzMzEzNSwgMzMxNDEsIDMzMTQ3LCAKKyAgICAzMzE1MywgMzMxNjAsIDMzMTY3LCAzMzE3NCwgMzMxODEsIDMzMTg4LCAzMzE5NSwgMzMyMDAsIDMzMjA4LCAzMzIxNywgCisgICAgMzMyMjYsIDMzMjM1LCAzMzI0NCwgMzMyNTMsIDMzMjYyLCAzMzI3NCwgMzMyODMsIDMzMjkyLCAzMzMwMSwgMzMzMDgsIAorICAgIDMzMzEzLCAzMzMyMCwgMzMzMjgsIDMzMzM2LCAzMzM0MywgMzMzNTAsIDMzMzU3LCAzMzM2NCwgMzMzNzIsIDMzMzgxLCAKKyAgICAzMzM5MCwgMzMzOTksIDMzNDA4LCAzMzQxNywgMzM0MjYsIDMzNDM1LCAzMzQ0NCwgMzM0NTMsIDMzNDYyLCAzMzQ3MSwgCisgICAgMzM0ODAsIDMzNDg5LCAzMzQ5OCwgMzM1MDYsIDMzNTE1LCAzMzUyNiwgMzM1MzQsIDMzNTQzLCAzMzU1NCwgMzM1NjMsIAorICAgIDMzNTcyLCAzMzU4MSwgMzM1OTAsIDMzNTk4LCAzMzYwNywgMzM2MTQsIDMzNjE5LCAzMzYyNywgMzM2MzIsIDMzNjM5LCAKKyAgICAzMzY0NCwgMzM2NTMsIDMzNjU5LCAzMzY2NiwgMzM2NzMsIDMzNjc4LCAzMzY4MywgMzM2OTEsIDMzNjk5LCAzMzcwOCwgCisgICAgMzM3MTcsIDMzNzIyLCAzMzcyOSwgMzM3NDAsIDMzNzQ4LCAzMzc1NywgMzM3NjMsIDMzNzY5LCAzMzc3NCwgMzM3ODEsIAorICAgIDMzNzg2LCAzMzc5NSwgMzM4MDAsIDMzODA1LCAzMzgxMCwgMzM4MTcsIDMzODI0LCAzMzgyOSwgMzM4MzgsIDMzODQ2LCAKKyAgICAzMzg1MSwgMzM4NTYsIDMzODYzLCAzMzg3MCwgMzM4NzQsIDMzODc4LCAzMzg4MSwgMzM4ODQsIDMzODg3LCAzMzg5MCwgCisgICAgMzM4OTMsIDMzODk2LCAzMzkwMywgMzM5MDYsIDMzOTA5LCAzMzkxNCwgMzM5MTgsIDMzOTIyLCAzMzkyNiwgMzM5MzAsIAorICAgIDMzOTM0LCAzMzk0MywgMzM5NDksIDMzOTU1LCAzMzk2MSwgMzM5NjksIDMzOTc3LCAzMzk4MywgMzM5ODksIDMzOTk2LCAKKyAgICAzNDAwMiwgMzQwMDcsIDM0MDEzLCAzNDAxOSwgMzQwMjUsIDM0MDMyLCAzNDAzOCwgMzQwNDYsIDM0MDUyLCAzNDA1OSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMzQwNjUsIDM0MDcyLCAKKyAgICAzNDA3OSwgMzQwODQsIDM0MDkzLCAzNDEwMSwgMzQxMDksIDM0MTE2LCAzNDEyMywgMzQxMzAsIDM0MTM3LCAzNDE0NSwgCisgICAgMzQxNTMsIDM0MTYzLCAzNDE3MywgMzQxODEsIDM0MTg5LCAzNDE5NywgMzQyMDUsIDM0MjE0LCAzNDIyMywgMzQyMzEsIAorICAgIDM0MjM5LCAzNDI0OCwgMzQyNTcsIDM0MjY3LCAzNDI3NywgMzQyODYsIDM0Mjk1LCAzNDMwMywgMzQzMTEsIDM0MzE5LCAKKyAgICAzNDMyNywgMzQzMzcsIDM0MzQ3LCAzNDM1NSwgMzQzNjMsIDM0MzcxLCAzNDM3OSwgMzQzODcsIDM0Mzk1LCAzNDQwMywgCisgICAgMzQ0MTEsIDM0NDE5LCAzNDQyNywgMzQ0MzUsIDM0NDQzLCAzNDQ1MiwgMzQ0NjEsIDM0NDcwLCAzNDQ3OSwgMzQ0ODksIAorICAgIDM0NDk5LCAzNDUwNiwgMzQ1MTMsIDM0NTIxLCAzNDUyOSwgMzQ1MzgsIDM0NTQ3LCAzNDU1NSwgMzQ1NjMsIDM0NTc1LCAKKyAgICAzNDU4NywgMzQ1OTYsIDM0NjA1LCAzNDYxNCwgMzQ2MjMsIDM0NjMwLCAzNDYzNywgMzQ2NDUsIDM0NjUzLCAzNDY2MSwgCisgICAgMzQ2NjksIDM0Njc3LCAzNDY4NSwgMzQ2OTMsIDM0NzAxLCAzNDcxMCwgMzQ3MTksIDM0NzI4LCAzNDczNywgMzQ3NDYsIAorICAgIDM0NzU1LCAzNDc2NSwgMzQ3NzUsIDM0Nzg1LCAzNDc5NSwgMzQ4MDQsIDM0ODEzLCAzNDgyMCwgMzQ4MjcsIDM0ODM1LCAKKyAgICAzNDg0MywgMzQ4NTEsIDM0ODU5LCAzNDg2NywgMzQ4NzUsIDM0ODg3LCAzNDg5OSwgMzQ5MDgsIDM0OTE3LCAzNDkyNSwgCisgICAgMzQ5MzMsIDM0OTQxLCAzNDk0OSwgMzQ5NjAsIDM0OTcxLCAzNDk4MiwgMzQ5OTMsIDM1MDA1LCAzNTAxNywgMzUwMjUsIAorICAgIDM1MDMzLCAzNTA0MSwgMzUwNDksIDM1MDU4LCAzNTA2NywgMzUwNzYsIDM1MDg1LCAzNTA5MywgMzUxMDEsIDM1MTA5LCAKKyAgICAzNTExNywgMzUxMjUsIDM1MTMzLCAzNTE0MiwgMzUxNTEsIDM1MTYxLCAzNTE3MSwgMzUxNzgsIDM1MTg1LCAzNTE5MywgCisgICAgMzUyMDEsIDM1MjA5LCAzNTIxNywgMzUyMjQsIDM1MjMxLCAzNTIzOSwgMzUyNDcsIDM1MjU1LCAzNTI2MywgMzUyNzEsIAorICAgIDM1Mjc5LCAzNTI4NywgMzUyOTUsIDM1MzAzLCAzNTMxMSwgMzUzMTksIDM1MzI3LCAzNTMzNSwgMzUzNDMsIDM1MzUxLCAKKyAgICAzNTM1OSwgMzUzNjgsIDM1Mzc3LCAzNTM4NiwgMzUzOTQsIDM1NDAzLCAzNTQxMiwgMzU0MjEsIDM1NDMwLCAzNTQ0MCwgCisgICAgMzU0NDksIDM1NDU2LCAzNTQ2MSwgMzU0NjgsIDM1NDc1LCAzNTQ4MywgMzU0OTEsIDM1NTAwLCAzNTUwOSwgMzU1MTksIAorICAgIDM1NTI5LCAzNTU0MCwgMzU1NTEsIDM1NTYwLCAzNTU2OSwgMzU1NzksIDM1NTg5LCAzNTU5OCwgMzU2MDcsIDM1NjE3LCAKKyAgICAzNTYyNywgMzU2MzgsIDM1NjQ5LCAzNTY1OCwgMzU2NjcsIDM1Njc3LCAzNTY4NywgMzU2OTQsIDM1NzAxLCAzNTcwOSwgCisgICAgMzU3MTcsIDM1NzIzLCAzNTcyOSwgMzU3MzgsIDM1NzQ3LCAzNTc1NywgMzU3NjcsIDM1Nzc4LCAzNTc4OSwgMzU3OTgsIAorICAgIDM1ODA3LCAzNTgxNywgMzU4MjcsIDM1ODM2LCAzNTg0NSwgMzU4NTMsIDM1ODYxLCAzNTg2OCwgMzU4NzUsIDM1ODgzLCAKKyAgICAzNTg5MSwgMzU5MDAsIDM1OTA5LCAzNTkxOSwgMzU5MjksIDM1OTQwLCAzNTk1MSwgMzU5NjAsIDM1OTY5LCAzNTk3OSwgCisgICAgMzU5ODksIDM1OTk4LCAzNjAwNywgMzYwMTcsIDM2MDI3LCAzNjAzOCwgMzYwNDksIDM2MDU4LCAzNjA2NywgMzYwNzcsIAorICAgIDM2MDg3LCAzNjA5NCwgMzYxMDEsIDM2MTA5LCAzNjExNywgMzYxMjYsIDM2MTM1LCAzNjE0NSwgMzYxNTUsIDM2MTY2LCAKKyAgICAzNjE3NywgMzYxODYsIDM2MTk1LCAzNjIwNSwgMzYyMTUsIDM2MjIzLCAzNjIzMSwgMzYyMzksIDM2MjQ3LCAzNjI1NiwgCisgICAgMzYyNjUsIDM2MjcyLCAzNjI3OSwgMzYyODYsIDM2MjkzLCAzNjMwMCwgMzYzMDcsIDM2MzE1LCAzNjMyMywgMzYzMzEsIAorICAgIDM2MzM5LCAzNjM1MCwgMzYzNjEsIDM2MzcyLCAzNjM4MywgMzYzOTQsIDM2NDA1LCAzNjQxMywgMzY0MjEsIDM2NDMyLCAKKyAgICAzNjQ0MywgMzY0NTQsIDM2NDY1LCAzNjQ3NiwgMzY0ODcsIDM2NDk1LCAzNjUwMywgMzY1MTQsIDM2NTI1LCAzNjUzNiwgMCwgCisgICAgMCwgMzY1NDcsIDM2NTU1LCAzNjU2MywgMzY1NzQsIDM2NTg1LCAzNjU5NiwgMCwgMCwgMzY2MDcsIDM2NjE1LCAzNjYyMywgCisgICAgMzY2MzQsIDM2NjQ1LCAzNjY1NiwgMzY2NjcsIDM2Njc4LCAzNjY4OSwgMzY2OTcsIDM2NzA1LCAzNjcxNiwgMzY3MjcsIAorICAgIDM2NzM4LCAzNjc0OSwgMzY3NjAsIDM2NzcxLCAzNjc3OSwgMzY3ODcsIDM2Nzk4LCAzNjgwOSwgMzY4MjAsIDM2ODMxLCAKKyAgICAzNjg0MiwgMzY4NTMsIDM2ODYxLCAzNjg2OSwgMzY4ODAsIDM2ODkxLCAzNjkwMiwgMzY5MTMsIDM2OTI0LCAzNjkzNSwgCisgICAgMzY5NDMsIDM2OTUxLCAzNjk2MiwgMzY5NzMsIDM2OTg0LCAwLCAwLCAzNjk5NSwgMzcwMDMsIDM3MDExLCAzNzAyMiwgCisgICAgMzcwMzMsIDM3MDQ0LCAwLCAwLCAzNzA1NSwgMzcwNjMsIDM3MDcxLCAzNzA4MiwgMzcwOTMsIDM3MTA0LCAzNzExNSwgCisgICAgMzcxMjYsIDAsIDM3MTM3LCAwLCAzNzE0NSwgMCwgMzcxNTYsIDAsIDM3MTY3LCAzNzE3OCwgMzcxODYsIDM3MTk0LCAKKyAgICAzNzIwNSwgMzcyMTYsIDM3MjI3LCAzNzIzOCwgMzcyNDksIDM3MjYwLCAzNzI2OCwgMzcyNzYsIDM3Mjg3LCAzNzI5OCwgCisgICAgMzczMDksIDM3MzIwLCAzNzMzMSwgMzczNDIsIDM3MzUwLCAzNzM1OCwgMzczNjYsIDM3Mzc0LCAzNzM4MiwgMzczOTAsIAorICAgIDM3Mzk4LCAzNzQwNiwgMzc0MTQsIDM3NDIyLCAzNzQzMCwgMzc0MzgsIDM3NDQ2LCAwLCAwLCAzNzQ1NCwgMzc0NjUsIAorICAgIDM3NDc2LCAzNzQ5MCwgMzc1MDQsIDM3NTE4LCAzNzUzMiwgMzc1NDYsIDM3NTYwLCAzNzU3MSwgMzc1ODIsIDM3NTk2LCAKKyAgICAzNzYxMCwgMzc2MjQsIDM3NjM4LCAzNzY1MiwgMzc2NjYsIDM3Njc3LCAzNzY4OCwgMzc3MDIsIDM3NzE2LCAzNzczMCwgCisgICAgMzc3NDQsIDM3NzU4LCAzNzc3MiwgMzc3ODMsIDM3Nzk0LCAzNzgwOCwgMzc4MjIsIDM3ODM2LCAzNzg1MCwgMzc4NjQsIAorICAgIDM3ODc4LCAzNzg4OSwgMzc5MDAsIDM3OTE0LCAzNzkyOCwgMzc5NDIsIDM3OTU2LCAzNzk3MCwgMzc5ODQsIDM3OTk1LCAKKyAgICAzODAwNiwgMzgwMjAsIDM4MDM0LCAzODA0OCwgMzgwNjIsIDM4MDc2LCAzODA5MCwgMzgwOTgsIDM4MTA2LCAzODExNywgCisgICAgMzgxMjUsIDAsIDM4MTM2LCAzODE0NCwgMzgxNTUsIDM4MTYzLCAzODE3MSwgMzgxNzksIDM4MTg3LCAzODE5NSwgMzgxOTgsIAorICAgIDM4MjAxLCAzODIwNCwgMzgyMDcsIDM4MjEzLCAzODIyNCwgMzgyMzIsIDAsIDM4MjQzLCAzODI1MSwgMzgyNjIsIDM4MjcwLCAKKyAgICAzODI3OCwgMzgyODYsIDM4Mjk0LCAzODMwMiwgMzgzMDgsIDM4MzE0LCAzODMyMCwgMzgzMjgsIDM4MzM2LCAzODM0NywgMCwgCisgICAgMCwgMzgzNTgsIDM4MzY2LCAzODM3NywgMzgzODUsIDM4MzkzLCAzODQwMSwgMCwgMzg0MDksIDM4NDE1LCAzODQyMSwgCisgICAgMzg0MjcsIDM4NDM1LCAzODQ0MywgMzg0NTQsIDM4NDY1LCAzODQ3MywgMzg0ODEsIDM4NDg5LCAzODUwMCwgMzg1MDgsIAorICAgIDM4NTE2LCAzODUyNCwgMzg1MzIsIDM4NTQwLCAzODU0NiwgMzg1NTIsIDAsIDAsIDM4NTU1LCAzODU2NiwgMzg1NzQsIDAsIAorICAgIDM4NTg1LCAzODU5MywgMzg2MDQsIDM4NjEyLCAzODYyMCwgMzg2MjgsIDM4NjM2LCAzODY0NCwgMzg2NDcsIDAsIDM4NjUwLCAKKyAgICAzODY1NCwgMzg2NTgsIDM4NjYyLCAzODY2NiwgMzg2NzAsIDM4Njc0LCAzODY3OCwgMzg2ODIsIDM4Njg2LCAzODY5MCwgCisgICAgMzg2OTQsIDM4NzAwLCAzODcwNiwgMzg3MTIsIDM4NzE1LCAzODcxOCwgMzg3MjAsIDM4NzI0LCAzODcyOCwgMzg3MzIsIAorICAgIDM4NzM2LCAzODczOCwgMzg3NDIsIDM4NzQ2LCAzODc1MiwgMzg3NTgsIDM4NzY1LCAzODc3MiwgMzg3NzcsIDM4NzgyLCAKKyAgICAzODc4OCwgMzg3OTQsIDM4Nzk2LCAzODc5OSwgMzg4MDEsIDM4ODA1LCAzODgwOSwgMzg4MTMsIDM4ODE2LCAzODgyMCwgCisgICAgMzg4MjQsIDM4ODI4LCAzODgzMiwgMzg4MzYsIDM4ODQyLCAzODg0NiwgMzg4NTAsIDM4ODU2LCAzODg2MSwgMzg4NjgsIAorICAgIDM4ODcwLCAzODg3MywgMzg4NzcsIDM4ODgxLCAzODg4NiwgMzg4OTIsIDM4ODk0LCAzODkwMywgMzg5MTIsIDM4OTE1LCAKKyAgICAzODkxOSwgMzg5MjEsIDM4OTIzLCAzODkyNSwgMzg5MjgsIDM4OTM0LCAzODkzNiwgMzg5NDAsIDM4OTQ0LCAzODk1MSwgCisgICAgMzg5NTgsIDM4OTYyLCAzODk2NywgMzg5NzIsIDM4OTc3LCAzODk4MiwgMzg5ODYsIDM4OTkwLCAzODk5MywgMzg5OTcsIAorICAgIDM5MDAxLCAzOTAwOCwgMzkwMTMsIDM5MDE3LCAzOTAyMSwgMzkwMjYsIDM5MDMwLCAzOTAzNCwgMzkwMzksIDM5MDQ0LCAKKyAgICAzOTA0OCwgMzkwNTIsIDM5MDU2LCAzOTA1OCwgMzkwNjMsIDM5MDY4LCAzOTA3MiwgMzkwNzYsIDM5MDgwLCAzOTA4NCwgMCwgCisgICAgMzkwODgsIDM5MDkyLCAzOTA5NiwgMzkxMDIsIDM5MTA4LCAzOTExNCwgMzkxMjAsIDM5MTI3LCAzOTEzNCwgMzkxMzksIAorICAgIDM5MTQ0LCAzOTE0OCwgMCwgMCwgMzkxNTQsIDM5MTU3LCAzOTE2MCwgMzkxNjMsIDM5MTY2LCAzOTE2OSwgMzkxNzIsIAorICAgIDM5MTc2LCAzOTE4MCwgMzkxODUsIDM5MTkwLCAzOTE5NSwgMzkyMDIsIDM5MjA2LCAzOTIwOSwgMzkyMTIsIDM5MjE1LCAKKyAgICAzOTIxOCwgMzkyMjEsIDM5MjI0LCAzOTIyNywgMzkyMzAsIDM5MjMzLCAzOTIzNywgMzkyNDEsIDM5MjQ2LCAzOTI1MSwgMCwgCisgICAgMzkyNTYsIDM5MjYyLCAzOTI2OCwgMzkyNzQsIDM5MjgxLCAzOTI4OCwgMzkyOTUsIDM5MzAyLCAzOTMwOCwgMzkzMTQsIAorICAgIDM5MzIxLCAzOTMyOCwgMzkzMzUsIDAsIDAsIDAsIDM5MzQyLCAzOTM0NSwgMzkzNDgsIDM5MzUxLCAzOTM1NiwgMzkzNTksIAorICAgIDM5MzYyLCAzOTM2NSwgMzkzNjgsIDM5MzcxLCAzOTM3NCwgMzkzNzgsIDM5MzgxLCAzOTM4NCwgMzkzODcsIDM5MzkwLCAKKyAgICAzOTM5MywgMzkzOTgsIDM5NDAxLCAzOTQwNCwgMzk0MDcsIDM5NDEwLCAzOTQxMywgMzk0MTgsIDM5NDIxLCAzOTQyNCwgCisgICAgMzk0MjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDM5NDM0LCAzOTQzOSwgMzk0NDQsIDM5NDUxLCAzOTQ1OSwgMzk0NjQsIDM5NDY5LCAzOTQ3MywgMzk0NzcsIDM5NDgyLCAKKyAgICAzOTQ4OSwgMzk0OTYsIDM5NTAwLCAzOTUwNSwgMzk1MTAsIDM5NTE1LCAzOTUyMCwgMzk1MjcsIDM5NTMyLCAzOTUzNywgCisgICAgMzk1NDIsIDM5NTUxLCAzOTU1OCwgMzk1NjUsIDM5NTY5LCAzOTU3NCwgMzk1ODAsIDM5NTg1LCAzOTU5MiwgMzk2MDEsIAorICAgIDM5NjEwLCAzOTYxNCwgMzk2MTgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDM5NjIyLCAKKyAgICAzOTYyNiwgMzk2MzQsIDM5NjM4LCAzOTY0MiwgMzk2NDcsIDM5NjUxLCAzOTY1NSwgMzk2NTksIDM5NjYxLCAzOTY2NSwgCisgICAgMzk2NjksIDM5NjczLCAzOTY3OCwgMzk2ODIsIDM5Njg2LCAzOTY5NCwgMzk2OTcsIDM5NzAxLCAzOTcwNCwgMzk3MDcsIAorICAgIDM5NzEzLCAzOTcxNywgMzk3MjAsIDM5NzI2LCAzOTczMCwgMzk3MzQsIDM5NzM4LCAzOTc0MSwgMzk3NDUsIDM5NzQ4LCAKKyAgICAzOTc1MiwgMzk3NTQsIDM5NzU3LCAzOTc2MCwgMzk3NjQsIDM5NzY2LCAzOTc3MCwgMzk3NzMsIDM5Nzc2LCAzOTc4MSwgCisgICAgMzk3ODYsIDM5NzkzLCAzOTc5NiwgMzk3OTksIDM5ODAzLCAzOTgwOCwgMzk4MTEsIDM5ODE0LCAzOTgxNywgMzk4MjEsIAorICAgIDM5ODI2LCAzOTgyOSwgMzk4MzIsIDM5ODM0LCAzOTgzNywgMzk4NDAsIDM5ODQzLCAzOTg0NywgMzk4NTIsIDM5ODU1LCAKKyAgICAzOTg1OSwgMzk4NjMsIDM5ODY3LCAzOTg3MSwgMzk4NzYsIDM5ODgyLCAzOTg4NywgMzk4OTIsIDM5ODk4LCAzOTkwMywgCisgICAgMzk5MDgsIDM5OTEyLCAzOTkxNiwgMzk5MjEsIDM5OTI1LCAzOTkyOSwgMzk5MzIsIDM5OTM0LCAzOTkzOSwgMzk5NDUsIAorICAgIDM5OTUyLCAzOTk1OSwgMzk5NjYsIDM5OTczLCAzOTk4MCwgMzk5ODcsIDM5OTk0LCA0MDAwMSwgNDAwMDksIDQwMDE2LCAKKyAgICA0MDAyNCwgNDAwMzEsIDQwMDM4LCA0MDA0NiwgNDAwNTQsIDQwMDU5LCA0MDA2NCwgNDAwNjksIDQwMDc0LCA0MDA3OSwgCisgICAgNDAwODQsIDQwMDg5LCA0MDA5NCwgNDAwOTksIDQwMTA0LCA0MDExMCwgNDAxMTYsIDQwMTIyLCA0MDEyOCwgNDAxMzUsIAorICAgIDQwMTQzLCA0MDE1MCwgNDAxNTYsIDQwMTYyLCA0MDE2OCwgNDAxNzQsIDQwMTgwLCA0MDE4NiwgNDAxOTIsIDQwMTk4LCAKKyAgICA0MDIwNCwgNDAyMTEsIDQwMjE4LCA0MDIyNSwgNDAyMzIsIDQwMjQwLCA0MDI0OSwgNDAyNTcsIDQwMjY4LCA0MDI3NiwgCisgICAgNDAyODQsIDQwMjkzLCA0MDMwMCwgNDAzMDksIDQwMzE4LCA0MDMyNiwgNDAzMzUsIDAsIDAsIDAsIDAsIDAsIDAsIDQwMzQzLCAKKyAgICA0MDM0NSwgNDAzNDgsIDQwMzUwLCA0MDM1MywgNDAzNTYsIDQwMzU5LCA0MDM2NCwgNDAzNjksIDQwMzc0LCA0MDM3OSwgCisgICAgNDAzODMsIDQwMzg3LCA0MDM5MSwgNDAzOTUsIDQwNDAwLCA0MDQwNiwgNDA0MTEsIDQwNDE3LCA0MDQyMiwgNDA0MjcsIAorICAgIDQwNDMyLCA0MDQzOCwgNDA0NDMsIDQwNDQ5LCA0MDQ1NSwgNDA0NTksIDQwNDYzLCA0MDQ2OCwgNDA0NzMsIDQwNDc4LCAKKyAgICA0MDQ4MywgNDA0ODgsIDQwNDk2LCA0MDUwNCwgNDA1MTIsIDQwNTIwLCA0MDUyNywgNDA1MzUsIDQwNTQyLCA0MDU0OSwgCisgICAgNDA1NTgsIDQwNTcwLCA0MDU3NiwgNDA1ODIsIDQwNTkwLCA0MDU5OCwgNDA2MDcsIDQwNjE2LCA0MDYyNCwgNDA2MzIsIAorICAgIDQwNjQxLCA0MDY1MCwgNDA2NTUsIDQwNjYzLCA0MDY2OCwgNDA2NzMsIDQwNjc5LCA0MDY4NCwgNDA2OTAsIDQwNjk3LCAKKyAgICA0MDcwNCwgNDA3MDksIDQwNzE1LCA0MDcyMCwgNDA3MjMsIDQwNzI3LCA0MDczMCwgNDA3MzQsIDQwNzM4LCA0MDc0MiwgCisgICAgNDA3NDgsIDQwNzU0LCA0MDc2MCwgNDA3NjYsIDQwNzcwLCA0MDc3NCwgNDA3NzgsIDQwNzgyLCA0MDc4OCwgNDA3OTQsIAorICAgIDQwNzk4LCA0MDgwMywgNDA4MDcsIDQwODEyLCA0MDgxNywgNDA4MjIsIDQwODI1LCA0MDgyOSwgNDA4MzIsIDQwODM2LCAKKyAgICA0MDg0MywgNDA4NTEsIDQwODYyLCA0MDg3MywgNDA4NzgsIDQwODg3LCA0MDg5NCwgNDA5MDMsIDQwOTEyLCA0MDkxNiwgCisgICAgNDA5MjIsIDQwOTMwLCA0MDkzNCwgNDA5MzksIDQwOTQ0LCA0MDk1MCwgNDA5NTYsIDQwOTYyLCA0MDk2OSwgNDA5NzMsIAorICAgIDQwOTc3LCA0MDk4MiwgNDA5ODUsIDQwOTg3LCA0MDk5MSwgNDA5OTUsIDQxMDAzLCA0MTAwNywgNDEwMDksIDQxMDExLCAKKyAgICA0MTAxNSwgNDEwMjMsIDQxMDI4LCA0MTAzNCwgNDEwNDQsIDQxMDUxLCA0MTA1NiwgNDEwNjAsIDQxMDY0LCA0MTA2OCwgCisgICAgNDEwNzEsIDQxMDc0LCA0MTA3NywgNDEwODEsIDQxMDg1LCA0MTA4OSwgNDEwOTMsIDQxMDk3LCA0MTEwMCwgNDExMDQsIAorICAgIDQxMTA4LCA0MTExMSwgNDExMTMsIDQxMTE2LCA0MTExOCwgNDExMjIsIDQxMTI2LCA0MTEyOCwgNDExMzQsIDQxMTM3LCAKKyAgICA0MTE0MiwgNDExNDYsIDQxMTUwLCA0MTE1MiwgNDExNTQsIDQxMTU2LCA0MTE1OSwgNDExNjMsIDQxMTY3LCA0MTE3MSwgCisgICAgNDExNzUsIDQxMTc5LCA0MTE4NSwgNDExOTEsIDQxMTkzLCA0MTE5NSwgNDExOTcsIDQxMTk5LCA0MTIwMiwgNDEyMDQsIAorICAgIDQxMjA4LCA0MTIxMCwgNDEyMTQsIDQxMjE3LCA0MTIyMywgNDEyMjcsIDQxMjMxLCA0MTIzNCwgNDEyMzcsIDQxMjQxLCAKKyAgICA0MTI0NywgNDEyNTEsIDQxMjYxLCA0MTI3MSwgNDEyNzUsIDQxMjgxLCA0MTI4NywgNDEyOTAsIDQxMjk0LCA0MTI5NywgCisgICAgNDEzMDIsIDQxMzA2LCA0MTMxMiwgNDEzMTYsIDQxMzI4LCA0MTMzNiwgNDEzNDAsIDQxMzQ0LCA0MTM1MCwgNDEzNTQsIAorICAgIDQxMzU3LCA0MTM1OSwgNDEzNjIsIDQxMzY2LCA0MTM3MCwgNDEzNzcsIDQxMzgxLCA0MTM4NSwgNDEzODksIDQxMzkyLCAKKyAgICA0MTM5NywgNDE0MDIsIDQxNDA3LCA0MTQxMiwgNDE0MTcsIDQxNDIyLCA0MTQzMCwgNDE0MzgsIDQxNDQyLCA0MTQ0NiwgCisgICAgNDE0NDgsIDQxNDUzLCA0MTQ1NywgNDE0NjEsIDQxNDY5LCA0MTQ3NywgNDE0ODMsIDQxNDg5LCA0MTQ5OCwgNDE1MDcsIAorICAgIDQxNTEyLCA0MTUxNywgNDE1MjUsIDQxNTMzLCA0MTUzNSwgNDE1MzcsIDQxNTQyLCA0MTU0NywgNDE1NTMsIDQxNTU5LCAKKyAgICA0MTU2NSwgNDE1NzEsIDQxNTc1LCA0MTU3OSwgNDE1ODYsIDQxNTkzLCA0MTU5OSwgNDE2MDUsIDQxNjE1LCA0MTYyNSwgCisgICAgNDE2MzMsIDQxNjQxLCA0MTY0MywgNDE2NDcsIDQxNjUxLCA0MTY1NiwgNDE2NjEsIDQxNjY4LCA0MTY3NSwgNDE2NzgsIAorICAgIDQxNjgxLCA0MTY4NCwgNDE2ODcsIDQxNjkwLCA0MTY5NSwgNDE2OTksIDQxNzA0LCA0MTcwOSwgNDE3MTIsIDQxNzE1LCAKKyAgICA0MTcxOCwgNDE3MjEsIDQxNzI0LCA0MTcyOCwgNDE3MzEsIDQxNzM0LCA0MTczNywgNDE3NDAsIDQxNzQyLCA0MTc0NCwgCisgICAgNDE3NDYsIDQxNzQ4LCA0MTc1NiwgNDE3NjQsIDQxNzcwLCA0MTc3NCwgNDE3ODAsIDQxNzkwLCA0MTc5NiwgNDE4MDIsIAorICAgIDQxODA4LCA0MTgxNiwgNDE4MjQsIDQxODM1LCA0MTgzOSwgNDE4NDMsIDQxODQ1LCA0MTg1MSwgNDE4NTMsIDQxODU1LCAKKyAgICA0MTg1NywgNDE4NTksIDQxODY1LCA0MTg2OCwgNDE4NzQsIDQxODgwLCA0MTg4NCwgNDE4ODgsIDQxODkyLCA0MTg5NSwgCisgICAgNDE4OTksIDQxOTAzLCA0MTkwNSwgNDE5MTQsIDQxOTIzLCA0MTkyOCwgNDE5MzMsIDQxOTM5LCA0MTk0NSwgNDE5NTEsIAorICAgIDQxOTU0LCA0MTk1NywgNDE5NjAsIDQxOTYzLCA0MTk2NSwgNDE5NzAsIDQxOTc1LCA0MTk4MCwgNDE5ODYsIDQxOTkyLCAKKyAgICA0MjAwMCwgNDIwMDgsIDQyMDE0LCA0MjAyMCwgNDIwMjYsIDQyMDMyLCA0MjA0MSwgNDIwNTAsIDQyMDU5LCA0MjA2OCwgCisgICAgNDIwNzcsIDQyMDg2LCA0MjA5NSwgNDIxMDQsIDQyMTEzLCA0MjEyMiwgNDIxMzAsIDQyMTQyLCA0MjE1MiwgNDIxNjcsIAorICAgIDQyMTcwLCA0MjE3NSwgNDIxODEsIDQyMTg3LCA0MjE5NCwgNDIyMDgsIDQyMjIzLCA0MjIyOSwgNDIyMzUsIDQyMjQyLCAKKyAgICA0MjI0OCwgNDIyNTYsIDQyMjYyLCA0MjI3NSwgNDIyODksIDQyMjk0LCA0MjMwMCwgNDIzMDcsIDQyMzEwLCA0MjMxMywgCisgICAgNDIzMTUsIDQyMzE4LCA0MjMyMSwgNDIzMjMsIDQyMzI1LCA0MjMyOSwgNDIzMzIsIDQyMzM1LCA0MjMzOCwgNDIzNDEsIAorICAgIDQyMzQ2LCA0MjM1MSwgNDIzNTYsIDQyMzYxLCA0MjM2NiwgNDIzNjksIDQyMzcxLCA0MjM3MywgNDIzNzUsIDQyMzc5LCAKKyAgICA0MjM4MywgNDIzODcsIDQyMzkzLCA0MjM5OCwgNDI0MDAsIDQyNDAyLCA0MjQwNywgNDI0MTIsIDQyNDE3LCA0MjQyMiwgCisgICAgNDI0MjcsIDQyNDMyLCA0MjQzNCwgNDI0MzYsIDQyNDQ1LCA0MjQ0OSwgNDI0NTcsIDQyNDY2LCA0MjQ2OCwgNDI0NzMsIAorICAgIDQyNDc4LCA0MjQ4NiwgNDI0OTAsIDQyNDkyLCA0MjQ5NiwgNDI0OTgsIDQyNTAyLCA0MjUwNiwgNDI1MTAsIDQyNTEyLCAKKyAgICA0MjUxNCwgNDI1MTYsIDQyNTIzLCA0MjUzMiwgNDI1NDEsIDQyNTUwLCA0MjU1OSwgNDI1NjgsIDQyNTc3LCA0MjU4NiwgCisgICAgNDI1OTUsIDQyNjAzLCA0MjYxMSwgNDI2MjAsIDQyNjI5LCA0MjYzOCwgNDI2NDcsIDQyNjU1LCA0MjY2MywgNDI2NzIsIAorICAgIDQyNjgxLCA0MjY5MCwgNDI3MDAsIDQyNzA5LCA0MjcxOSwgNDI3MjgsIDQyNzM4LCA0Mjc0NywgNDI3NTcsIDQyNzY3LCAKKyAgICA0Mjc3NiwgNDI3ODYsIDQyNzk1LCA0MjgwNSwgNDI4MTQsIDQyODI0LCA0MjgzMywgNDI4NDIsIDQyODUxLCA0Mjg2MCwgCisgICAgNDI4NjksIDQyODc5LCA0Mjg4OCwgNDI4OTcsIDQyOTA2LCA0MjkxNiwgNDI5MjUsIDQyOTM0LCA0Mjk0MywgNDI5NTIsIAorICAgIDQyOTYyLCA0Mjk3MiwgNDI5ODEsIDQyOTkwLCA0Mjk5OCwgNDMwMDYsIDQzMDEzLCA0MzAyMSwgNDMwMzAsIDQzMDQxLCAKKyAgICA0MzA1MCwgNDMwNTksIDQzMDY4LCA0MzA3NSwgNDMwODIsIDQzMDg5LCA0MzA5OCwgNDMxMDcsIDQzMTE2LCA0MzEyNSwgCisgICAgNDMxMzIsIDQzMTM3LCA0MzE0NiwgNDMxNTEsIDQzMTU0LCA0MzE2MiwgNDMxNjUsIDQzMTcwLCA0MzE3NSwgNDMxNzgsIAorICAgIDQzMTgxLCA0MzE4OSwgNDMxOTIsIDQzMTk3LCA0MzIwMCwgNDMyMDcsIDQzMjEyLCA0MzIyMCwgNDMyMjMsIDQzMjI2LCAKKyAgICA0MzIyOSwgNDMyMzQsIDQzMjM5LCA0MzI0MiwgNDMyNDUsIDQzMjUzLCA0MzI1NiwgNDMyNjMsIDQzMjcwLCA0MzI3NCwgCisgICAgNDMyNzgsIDQzMjgzLCA0MzI4OCwgNDMyOTQsIDQzMjk5LCA0MzMwNSwgNDMzMTEsIDQzMzE2LCA0MzMyMiwgNDMzMzAsIAorICAgIDQzMzM2LCA0MzM0NCwgNDMzNTIsIDQzMzU4LCA0MzM2NiwgNDMzNzQsIDQzMzgzLCA0MzM5MSwgNDMzOTcsIDQzNDA1LCAKKyAgICA0MzQxNCwgNDM0MjIsIDQzNDI2LCA0MzQzMSwgNDM0NDQsIDQzNDU3LCA0MzQ2MSwgNDM0NjUsIDQzNDY5LCA0MzQ3MywgCisgICAgNDM0ODMsIDQzNDg3LCA0MzQ5MiwgNDM0OTcsIDQzNTAyLCA0MzUwNywgNDM1MTIsIDQzNTE3LCA0MzUyNywgNDM1MzcsIAorICAgIDQzNTQ1LCA0MzU1NSwgNDM1NjUsIDQzNTczLCA0MzU4MywgNDM1OTMsIDQzNjAxLCA0MzYxMSwgNDM2MjEsIDQzNjI5LCAKKyAgICA0MzYzNywgNDM2NDcsIDQzNjU3LCA0MzY2MCwgNDM2NjMsIDQzNjY2LCA0MzY3MSwgNDM2NzUsIDQzNjgxLCA0MzY4OCwgCisgICAgNDM2OTUsIDQzNzAzLCA0MzcxMCwgNDM3MTQsIDQzNzE4LCA0MzcyMiwgNDM3MjYsIDQzNzI4LCA0MzczMiwgNDM3MzYsIAorICAgIDQzNzQxLCA0Mzc0NiwgNDM3NTMsIDQzNzYwLCA0Mzc2MywgNDM3NzAsIDQzNzcyLCA0Mzc3NCwgNDM3NzgsIDQzNzgyLCAKKyAgICA0Mzc4NywgNDM3OTMsIDQzNzk5LCA0MzgwNSwgNDM4MTEsIDQzODIwLCA0MzgyOSwgNDM4MzgsIDQzODQyLCA0Mzg0NCwgCisgICAgNDM4NDgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQzODU1LCA0Mzg1OSwgNDM4NjYsIDQzODczLCAKKyAgICA0Mzg4MCwgNDM4ODcsIDQzODkxLCA0Mzg5NSwgNDM4OTksIDQzOTAzLCA0MzkwOCwgNDM5MTQsIDQzOTE5LCA0MzkyNSwgCisgICAgNDM5MzEsIDQzOTM3LCA0Mzk0MywgNDM5NTEsIDQzOTU4LCA0Mzk2NSwgNDM5NzIsIDQzOTc5LCA0Mzk4NCwgNDM5OTAsIAorICAgIDQzOTk5LCA0NDAwMywgNDQwMTAsIDQ0MDE0LCA0NDAxOCwgNDQwMjQsIDQ0MDMwLCA0NDAzNiwgNDQwNDIsIDQ0MDQ2LCAKKyAgICA0NDA1MCwgNDQwNTMsIDQ0MDU2LCA0NDA2MCwgNDQwNjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDQ0MDc0LCA0NDA3NywgNDQwODEsIDQ0MDg1LCA0NDA5MSwgCisgICAgNDQwOTcsIDQ0MTAzLCA0NDExMSwgNDQxMTgsIDQ0MTIyLCA0NDEzMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNDQxMzUsIDQ0MTM4LCA0NDE0MSwgNDQxNDQsIDQ0MTQ3LCAKKyAgICA0NDE1MCwgNDQxNTMsIDQ0MTU2LCA0NDE1OSwgNDQxNjIsIDQ0MTY2LCA0NDE3MCwgNDQxNzQsIDQ0MTc4LCA0NDE4MiwgCisgICAgNDQxODYsIDQ0MTkwLCA0NDE5NCwgNDQxOTgsIDQ0MjAyLCA0NDIwNiwgNDQyMDksIDQ0MjEyLCA0NDIxNSwgNDQyMTgsIAorICAgIDQ0MjIxLCA0NDIyNCwgNDQyMjcsIDQ0MjMwLCA0NDIzMywgNDQyMzcsIDQ0MjQxLCA0NDI0NSwgNDQyNDksIDQ0MjUzLCAKKyAgICA0NDI1NywgNDQyNjEsIDQ0MjY1LCA0NDI2OSwgNDQyNzMsIDQ0Mjc3LCA0NDI4MywgNDQyODksIDQ0Mjk1LCA0NDMwMiwgCisgICAgNDQzMDksIDQ0MzE2LCA0NDMyMywgNDQzMzAsIDQ0MzM3LCA0NDM0NCwgNDQzNTEsIDQ0MzU4LCA0NDM2NSwgNDQzNzIsIAorICAgIDQ0Mzc5LCA0NDM4NiwgNDQzOTMsIDQ0NDAwLCA0NDQwNywgNDQ0MTQsIDQ0NDE5LCA0NDQyNSwgNDQ0MzEsIDQ0NDM3LCAKKyAgICA0NDQ0MiwgNDQ0NDgsIDQ0NDU0LCA0NDQ2MCwgNDQ0NjUsIDQ0NDcxLCA0NDQ3NywgNDQ0ODIsIDQ0NDg3LCA0NDQ5MywgCisgICAgNDQ0OTgsIDQ0NTA0LCA0NDUxMCwgNDQ1MTUsIDQ0NTIxLCA0NDUyNywgNDQ1MzIsIDQ0NTM4LCA0NDU0NCwgNDQ1NTAsIAorICAgIDQ0NTU2LCA0NDU2MiwgNDQ1NjcsIDQ0NTczLCA0NDU3OSwgNDQ1ODUsIDQ0NTkwLCA0NDU5NiwgNDQ2MDIsIDQ0NjA4LCAKKyAgICA0NDYxMywgNDQ2MTksIDQ0NjI1LCA0NDYzMCwgNDQ2MzUsIDQ0NjQxLCA0NDY0NiwgNDQ2NTIsIDQ0NjU4LCA0NDY2MywgCisgICAgNDQ2NjksIDQ0Njc1LCA0NDY4MCwgNDQ2ODYsIDQ0NjkyLCA0NDY5OCwgNDQ3MDQsIDQ0NzEwLCA0NDcxNSwgNDQ3MjEsIAorICAgIDQ0NzI3LCA0NDczMywgNDQ3MzgsIDQ0NzQ0LCA0NDc1MCwgNDQ3NTYsIDQ0NzYxLCA0NDc2NywgNDQ3NzMsIDQ0Nzc4LCAKKyAgICA0NDc4MywgNDQ3ODksIDQ0Nzk0LCA0NDgwMCwgNDQ4MDYsIDQ0ODExLCA0NDgxNywgNDQ4MjMsIDQ0ODI4LCA0NDgzNCwgCisgICAgNDQ4NDAsIDQ0ODQ2LCA0NDg1MiwgNDQ4NTgsIDQ0ODYyLCA0NDg2NywgNDQ4NzIsIDQ0ODc3LCA0NDg4MiwgNDQ4ODcsIAorICAgIDQ0ODkyLCA0NDg5NywgNDQ5MDIsIDQ0OTA3LCA0NDkxMiwgNDQ5MTYsIDQ0OTIwLCA0NDkyNCwgNDQ5MjgsIDQ0OTMyLCAKKyAgICA0NDkzNiwgNDQ5NDAsIDQ0OTQ0LCA0NDk0OCwgNDQ5NTMsIDQ0OTU4LCA0NDk2MywgNDQ5NjgsIDQ0OTczLCA0NDk3OCwgCisgICAgNDQ5ODcsIDQ0OTk2LCA0NTAwNSwgNDUwMTQsIDQ1MDIzLCA0NTAzMiwgNDUwNDEsIDQ1MDUwLCA0NTA1NywgNDUwNjUsIAorICAgIDQ1MDczLCA0NTA4MCwgNDUwODcsIDQ1MDk1LCA0NTEwMywgNDUxMTAsIDQ1MTE3LCA0NTEyNSwgNDUxMzMsIDQ1MTQwLCAKKyAgICA0NTE0NywgNDUxNTUsIDQ1MTYzLCA0NTE3MCwgNDUxNzcsIDQ1MTg1LCA0NTE5NCwgNDUyMDMsIDQ1MjExLCA0NTIyMCwgCisgICAgNDUyMjksIDQ1MjM2LCA0NTI0MywgNDUyNTEsIDQ1MjYwLCA0NTI2OSwgNDUyNzcsIDQ1Mjg2LCA0NTI5NSwgNDUzMDIsIAorICAgIDQ1MzA5LCA0NTMxOCwgNDUzMjcsIDQ1MzM1LCA0NTM0MywgNDUzNTIsIDQ1MzYxLCA0NTM2OCwgNDUzNzUsIDQ1Mzg0LCAKKyAgICA0NTM5MywgNDU0MDEsIDQ1NDA5LCA0NTQxOCwgNDU0MjcsIDQ1NDM0LCA0NTQ0MSwgNDU0NTAsIDQ1NDU5LCA0NTQ2NywgCisgICAgNDU0NzYsIDQ1NDg1LCA0NTQ5MywgNDU1MDMsIDQ1NTEzLCA0NTUyMywgNDU1MzMsIDQ1NTQyLCA0NTU1MSwgNDU1NjAsIAorICAgIDQ1NTY5LCA0NTU3NiwgNDU1ODQsIDQ1NTkyLCA0NTYwMCwgNDU2MDgsIDQ1NjEzLCA0NTYxOCwgNDU2MjcsIDQ1NjM1LCAKKyAgICA0NTY0MiwgNDU2NTEsIDQ1NjU5LCA0NTY2NiwgNDU2NzUsIDQ1NjgzLCA0NTY5MCwgNDU2OTksIDQ1NzA3LCA0NTcxNCwgCisgICAgNDU3MjMsIDQ1NzMxLCA0NTczOCwgNDU3NDcsIDQ1NzU1LCA0NTc2MiwgNDU3NzEsIDQ1Nzc5LCA0NTc4NiwgNDU3OTUsIAorICAgIDQ1ODAzLCA0NTgxMCwgNDU4MTksIDQ1ODI3LCA0NTgzNCwgNDU4NDMsIDQ1ODUyLCA0NTg2MSwgNDU4NzAsIDQ1ODg0LCAKKyAgICA0NTg5OCwgNDU5MDUsIDQ1OTEwLCA0NTkxNSwgNDU5MjAsIDQ1OTI1LCA0NTkzMCwgNDU5MzUsIDQ1OTQwLCA0NTk0NSwgCisgICAgNDU5NTMsIDQ1OTYxLCA0NTk2OSwgNDU5NzcsIDQ1OTgyLCA0NTk4OSwgNDU5OTYsIDQ2MDAzLCA0NjAwOCwgNDYwMTYsIAorICAgIDQ2MDIzLCA0NjAzMSwgNDYwMzUsIDQ2MDQyLCA0NjA0OCwgNDYwNTUsIDQ2MDU5LCA0NjA2NSwgNDYwNzEsIDQ2MDc3LCAKKyAgICA0NjA4MSwgNDYwODQsIDQ2MDg4LCA0NjA5MiwgNDYwOTksIDQ2MTA1LCA0NjExMSwgNDYxMTcsIDQ2MTIzLCA0NjEzNywgCisgICAgNDYxNDcsIDQ2MTYxLCA0NjE3NSwgNDYxODEsIDQ2MTkxLCA0NjIwNSwgNDYyMDgsIDQ2MjExLCA0NjIxOCwgNDYyMjYsIAorICAgIDQ2MjMxLCA0NjIzNiwgNDYyNDQsIDQ2MjU2LCA0NjI2OCwgNDYyNzYsIDQ2MjgwLCA0NjI4NCwgNDYyODcsIDQ2MjkwLCAKKyAgICA0NjI5NCwgNDYyOTgsIDQ2MzAxLCA0NjMwNCwgNDYzMDksIDQ2MzE0LCA0NjMyMCwgNDYzMjYsIDQ2MzMxLCA0NjMzNiwgCisgICAgNDYzNDIsIDQ2MzQ4LCA0NjM1MywgNDYzNTgsIDQ2MzYzLCA0NjM2OCwgNDYzNzQsIDQ2MzgwLCA0NjM4NSwgNDYzOTAsIAorICAgIDQ2Mzk2LCA0NjQwMiwgNDY0MDcsIDQ2NDEyLCA0NjQxNSwgNDY0MTgsIDQ2NDI3LCA0NjQyOSwgNDY0MzEsIDQ2NDM0LCAKKyAgICA0NjQzOCwgNDY0NDQsIDQ2NDQ2LCA0NjQ0OSwgNDY0NTYsIDQ2NDYzLCA0NjQ3MSwgNDY0NzksIDQ2NDg5LCA0NjUwMywgCisgICAgNDY1MDgsIDQ2NTEzLCA0NjUxNywgNDY1MjIsIDQ2NTMwLCA0NjUzOCwgNDY1NDcsIDQ2NTU2LCA0NjU2NSwgNDY1NzQsIAorICAgIDQ2NTc5LCA0NjU4NCwgNDY1OTAsIDQ2NTk2LCA0NjYwMiwgNDY2MDgsIDQ2NjExLCA0NjYxNywgNDY2MjMsIDQ2NjMzLCAKKyAgICA0NjY0MywgNDY2NTEsIDQ2NjU5LCA0NjY2OCwgNDY2NzcsIDQ2NjgxLCA0NjY4OSwgNDY2OTcsIDQ2NzA1LCA0NjcxMywgCisgICAgNDY3MjIsIDQ2NzMxLCA0Njc0MCwgNDY3NDksIDQ2NzU0LCA0Njc1OSwgNDY3NjQsIDQ2NzY5LCA0Njc3NCwgNDY3ODAsIAorICAgIDQ2Nzg2LCA0Njc5MSwgNDY3OTcsIDQ2Nzk5LCA0NjgwMSwgNDY4MDMsIDQ2ODA1LCA0NjgwOCwgNDY4MTEsIDQ2ODEzLCAKKyAgICA0NjgxNSwgNDY4MTcsIDQ2ODIxLCA0NjgyNSwgNDY4MjcsIDQ2ODI5LCA0NjgzMiwgNDY4MzUsIDQ2ODM5LCA0Njg0NSwgCisgICAgNDY4NTEsIDQ2ODUzLCA0Njg2MCwgNDY4NjQsIDQ2ODY5LCA0Njg3NCwgNDY4NzYsIDQ2ODg2LCA0Njg5MiwgNDY4OTgsIAorICAgIDQ2OTA0LCA0NjkxMCwgNDY5MTYsIDQ2OTIyLCA0NjkyNywgNDY5MzAsIDQ2OTMzLCA0NjkzNiwgNDY5MzgsIDQ2OTQwLCAKKyAgICA0Njk0NCwgNDY5NDgsIDQ2OTUzLCA0Njk1OCwgNDY5NjMsIDQ2OTY2LCA0Njk3MCwgNDY5NzUsIDQ2OTc4LCA0Njk4MiwgCisgICAgNDY5ODcsIDQ2OTkyLCA0Njk5NywgNDcwMDIsIDQ3MDA3LCA0NzAxMiwgNDcwMTcsIDQ3MDIyLCA0NzAyNywgNDcwMzIsIAorICAgIDQ3MDM3LCA0NzA0MiwgNDcwNDgsIDQ3MDU0LCA0NzA2MCwgNDcwNjIsIDQ3MDY1LCA0NzA2NywgNDcwNzAsIDQ3MDcyLCAKKyAgICA0NzA3NCwgNDcwNzYsIDQ3MDc4LCA0NzA4MCwgNDcwODIsIDQ3MDg0LCA0NzA4NiwgNDcwODgsIDQ3MDkwLCA0NzA5MiwgCisgICAgNDcwOTQsIDQ3MDk2LCA0NzA5OCwgNDcxMDAsIDQ3MTAyLCA0NzEwNCwgNDcxMDksIDQ3MTE0LCA0NzExOSwgNDcxMjQsIAorICAgIDQ3MTI5LCA0NzEzNCwgNDcxMzksIDQ3MTQ0LCA0NzE0OSwgNDcxNTQsIDQ3MTU5LCA0NzE2NCwgNDcxNjksIDQ3MTc0LCAKKyAgICA0NzE3OSwgNDcxODQsIDQ3MTg5LCA0NzE5NCwgNDcxOTksIDQ3MjA0LCA0NzIwOCwgNDcyMTIsIDQ3MjE2LCA0NzIyMiwgCisgICAgNDcyMjgsIDQ3MjMzLCA0NzIzOCwgNDcyNDMsIDQ3MjQ4LCA0NzI1MywgNDcyNTgsIDQ3MjY2LCA0NzI3NCwgNDcyODIsIAorICAgIDQ3MjkwLCA0NzI5OCwgNDczMDYsIDQ3MzE0LCA0NzMyMiwgNDczMjgsIDQ3MzMzLCA0NzMzOCwgNDczNDMsIDQ3MzQ2LCAKKyAgICA0NzM1MCwgNDczNTQsIDQ3MzU4LCA0NzM2MiwgNDczNjYsIDQ3MzcwLCA0NzM3NywgNDczODQsIDQ3MzkyLCA0NzQwMCwgCisgICAgNDc0MDUsIDQ3NDEwLCA0NzQxNywgNDc0MjQsIDQ3NDMxLCA0NzQzOCwgNDc0NDEsIDQ3NDQ0LCA0NzQ0OSwgNDc0NTEsIAorICAgIDQ3NDU1LCA0NzQ2MCwgNDc0NjIsIDQ3NDY0LCA0NzQ2NiwgNDc0NjgsIDQ3NDczLCA0NzQ3NiwgNDc0NzgsIDQ3NDgzLCAKKyAgICA0NzQ5MCwgNDc0OTcsIDQ3NTAwLCA0NzUwNCwgNDc1MDksIDQ3NTE0LCA0NzUyMiwgNDc1MjgsIDQ3NTM0LCA0NzU0NiwgCisgICAgNDc1NTMsIDQ3NTYwLCA0NzU2NSwgNDc1NzAsIDQ3NTc2LCA0NzU3OSwgNDc1ODIsIDQ3NTg3LCA0NzU4OSwgNDc1OTMsIAorICAgIDQ3NTk1LCA0NzU5NywgNDc1OTksIDQ3NjAxLCA0NzYwMywgNDc2MDUsIDQ3NjEwLCA0NzYxMiwgNDc2MTQsIDQ3NjE2LCAKKyAgICA0NzYxOCwgNDc2MjIsIDQ3NjI0LCA0NzYyNywgNDc2MzIsIDQ3NjM3LCA0NzY0MiwgNDc2NDcsIDQ3NjUzLCA0NzY1OSwgCisgICAgNDc2NjEsIDQ3NjY0LCA0NzY3MSwgNDc2NzgsIDQ3Njg1LCA0NzY5MiwgNDc2OTYsIDQ3NzAwLCA0NzcwMiwgNDc3MDQsIAorICAgIDQ3NzA4LCA0NzcxNCwgNDc3MTksIDQ3NzIxLCA0NzcyNSwgNDc3MzQsIDQ3NzQyLCA0Nzc1MCwgNDc3NTYsIDQ3NzYyLCAKKyAgICA0Nzc2NywgNDc3NzMsIDQ3Nzc4LCA0Nzc4MSwgNDc3OTUsIDQ3Nzk4LCA0NzgwMywgNDc4MDgsIDQ3ODE0LCA0NzgyNCwgCisgICAgNDc4MjYsIDQ3ODMyLCA0NzgzOCwgNDc4NDIsIDQ3ODQ5LCA0Nzg1MywgNDc4NTUsIDQ3ODU3LCA0Nzg2MSwgNDc4NjcsIAorICAgIDQ3ODcyLCA0Nzg3OCwgNDc4ODAsIDQ3ODg2LCA0Nzg4OCwgNDc4OTQsIDQ3ODk2LCA0Nzg5OCwgNDc5MDMsIDQ3OTA1LCAKKyAgICA0NzkwOSwgNDc5MTQsIDQ3OTE2LCA0NzkyMSwgNDc5MjYsIDQ3OTMwLCA0NzkzNywgMCwgNDc5NDcsIDQ3OTUzLCA0Nzk1NiwgCisgICAgNDc5NjIsIDQ3OTY1LCA0Nzk3MCwgNDc5NzUsIDQ3OTc5LCA0Nzk4MSwgNDc5ODMsIDQ3OTg3LCA0Nzk5MSwgNDc5OTUsIAorICAgIDQ3OTk5LCA0ODAwNCwgNDgwMDYsIDQ4MDExLCA0ODAxNCwgNDgwMTcsIDQ4MDIwLCA0ODAyNCwgNDgwMjgsIDQ4MDMzLCAKKyAgICA0ODAzNywgNDgwNDIsIDQ4MDQ3LCA0ODA1MSwgNDgwNTYsIDQ4MDYyLCA0ODA2NSwgNDgwNzEsIDQ4MDc2LCA0ODA4MCwgCisgICAgNDgwODUsIDQ4MDkxLCA0ODA5NywgNDgxMDQsIDQ4MTEwLCA0ODExNywgNDgxMjQsIDQ4MTI2LCA0ODEzMywgNDgxMzcsIAorICAgIDQ4MTQzLCA0ODE0OSwgNDgxNTQsIDQ4MTYwLCA0ODE2NCwgNDgxNjksIDQ4MTcyLCA0ODE3NywgNDgxODMsIDQ4MTkwLCAKKyAgICA0ODE5OCwgNDgyMDUsIDQ4MjE0LCA0ODIyNCwgNDgyMzEsIDQ4MjM3LCA0ODI0MSwgNDgyNDgsIDQ4MjUzLCA0ODI2MiwgCisgICAgNDgyNjUsIDQ4MjY4LCA0ODI3NywgNDgyODcsIDQ4Mjk0LCA0ODI5NiwgNDgzMDIsIDQ4MzA3LCA0ODMwOSwgNDgzMTIsIAorICAgIDQ4MzE2LCA0ODMyNCwgNDgzMzMsIDQ4MzM2LCA0ODM0MSwgNDgzNDYsIDQ4MzU0LCA0ODM2MiwgNDgzNzAsIDQ4Mzc4LCAKKyAgICA0ODM4NCwgNDgzOTAsIDQ4Mzk2LCA0ODQwNCwgNDg0MDksIDQ4NDEyLCA0ODQxNiwgNDg0MTksIDQ4NDMxLCA0ODQ0MSwgCisgICAgNDg0NTIsIDQ4NDYxLCA0ODQ3MiwgNDg0ODIsIDQ4NDkxLCA0ODQ5NywgNDg1MDUsIDQ4NTA5LCA0ODUxNywgNDg1MjEsIAorICAgIDQ4NTI5LCA0ODUzNiwgNDg1NDMsIDQ4NTUyLCA0ODU2MSwgNDg1NzEsIDQ4NTgxLCA0ODU5MSwgNDg2MDEsIDQ4NjEwLCAKKyAgICA0ODYxOSwgNDg2MjksIDQ4NjM5LCA0ODY0OCwgNDg2NTcsIDQ4NjYzLCA0ODY2OSwgNDg2NzUsIDQ4NjgxLCA0ODY4NywgCisgICAgNDg2OTMsIDQ4Njk5LCA0ODcwNSwgNDg3MTEsIDQ4NzE4LCA0ODcyNCwgNDg3MzAsIDQ4NzM2LCA0ODc0MiwgNDg3NDgsIAorICAgIDQ4NzU0LCA0ODc2MCwgNDg3NjYsIDQ4NzcyLCA0ODc3OSwgNDg3ODYsIDQ4NzkzLCA0ODgwMCwgNDg4MDcsIDQ4ODE0LCAKKyAgICA0ODgyMSwgNDg4MjgsIDQ4ODM1LCA0ODg0MiwgNDg4NTAsIDQ4ODU1LCA0ODg1OCwgNDg4NjIsIDQ4ODY2LCA0ODg3MiwgCisgICAgNDg4NzUsIDQ4ODgxLCA0ODg4NywgNDg4OTIsIDQ4ODk2LCA0ODkwMSwgNDg5MDcsIDQ4OTE0LCA0ODkxNywgNDg5MjQsIAorICAgIDQ4OTMxLCA0ODkzNSwgNDg5NDQsIDQ4OTUzLCA0ODk1OCwgNDg5NjQsIDQ4OTY5LCA0ODk3NCwgNDg5ODEsIDQ4OTg4LCAKKyAgICA0ODk5NiwgNDkwMDQsIDQ5MDEzLCA0OTAxNywgNDkwMjYsIDQ5MDMxLCA0OTAzNSwgNDkwNDIsIDQ5MDQ2LCA0OTA1MywgCisgICAgNDkwNjEsIDQ5MDY2LCA0OTA3NCwgNDkwNzgsIDQ5MDgzLCA0OTA4NywgNDkwOTIsIDQ5MDk2LCA0OTEwMSwgNDkxMDYsIAorICAgIDQ5MTE1LCA0OTExNywgNDkxMjAsIDQ5MTIzLCA0OTEzMCwgNDkxMzcsIDQ5MTQyLCA0OTE1MCwgNDkxNTYsIDQ5MTYyLCAKKyAgICA0OTE2NywgNDkxNzAsIDQ5MTc1LCA0OTE4MCwgNDkxODUsIDQ5MTkzLCA0OTE5NywgNDkyMDQsIDQ5MjEyLCA0OTIyMCwgCisgICAgNDkyMjUsIDQ5MjMwLCA0OTIzNiwgNDkyNDEsIDQ5MjQ2LCA0OTI1MiwgNDkyNTcsIDQ5MjYwLCA0OTI2NCwgNDkyNjgsIAorICAgIDQ5Mjc1LCA0OTI4NCwgNDkyODksIDQ5Mjk4LCA0OTMwNywgNDkzMTMsIDQ5MzE5LCA0OTMyNCwgNDkzMjksIDQ5MzM0LCAKKyAgICA0OTMzOSwgNDkzNDUsIDQ5MzUxLCA0OTM1OSwgNDkzNjcsIDQ5MzczLCA0OTM3OSwgNDkzODQsIDQ5Mzg5LCA0OTM5NiwgCisgICAgNDk0MDMsIDQ5NDA5LCA0OTQxMiwgNDk0MTUsIDQ5NDE5LCA0OTQyMywgNDk0MjcsIDQ5NDMyLCA0OTQzOCwgNDk0NDQsIAorICAgIDQ5NDUxLCA0OTQ1OCwgNDk0NjMsIDQ5NDY3LCA0OTQ3MSwgNDk0NzUsIDQ5NDc5LCA0OTQ4MywgNDk0ODcsIDQ5NDkxLCAKKyAgICA0OTQ5NSwgNDk0OTksIDQ5NTAzLCA0OTUwNywgNDk1MTEsIDQ5NTE1LCA0OTUxOSwgNDk1MjMsIDQ5NTI3LCA0OTUzMSwgCisgICAgNDk1MzUsIDQ5NTM5LCA0OTU0MywgNDk1NDcsIDQ5NTUxLCA0OTU1NSwgNDk1NTksIDQ5NTYzLCA0OTU2NywgNDk1NzEsIAorICAgIDQ5NTc1LCA0OTU3OSwgNDk1ODMsIDQ5NTg3LCA0OTU5MSwgNDk1OTUsIDQ5NTk5LCA0OTYwMywgNDk2MDcsIDQ5NjExLCAKKyAgICA0OTYxNSwgNDk2MTksIDQ5NjIzLCA0OTYyNywgNDk2MzEsIDQ5NjM1LCA0OTYzOSwgNDk2NDMsIDQ5NjQ3LCA0OTY1MSwgCisgICAgNDk2NTUsIDQ5NjU5LCA0OTY2MywgNDk2NjcsIDQ5NjcxLCA0OTY3NSwgNDk2NzksIDQ5NjgzLCA0OTY4NywgNDk2OTEsIAorICAgIDQ5Njk1LCA0OTY5OSwgNDk3MDMsIDQ5NzA3LCA0OTcxMSwgNDk3MTUsIDQ5NzE5LCA0OTcyMywgNDk3MjcsIDQ5NzMxLCAKKyAgICA0OTczNSwgNDk3MzksIDQ5NzQzLCA0OTc0NywgNDk3NTEsIDQ5NzU1LCA0OTc1OSwgNDk3NjMsIDQ5NzY3LCA0OTc3MSwgCisgICAgNDk3NzUsIDQ5Nzc5LCA0OTc4MywgNDk3ODcsIDQ5NzkxLCA0OTc5NSwgNDk3OTksIDQ5ODAzLCA0OTgwNywgNDk4MTEsIAorICAgIDQ5ODE1LCA0OTgxOSwgNDk4MjMsIDQ5ODI3LCA0OTgzMSwgNDk4MzUsIDQ5ODM5LCA0OTg0MywgNDk4NDcsIDQ5ODUxLCAKKyAgICA0OTg1NSwgNDk4NTksIDQ5ODYzLCA0OTg2NywgNDk4NzEsIDQ5ODc1LCA0OTg3OSwgNDk4ODMsIDQ5ODg3LCA0OTg5MSwgCisgICAgNDk4OTUsIDQ5ODk5LCA0OTkwMywgNDk5MDcsIDQ5OTExLCA0OTkxNSwgNDk5MTksIDQ5OTIzLCA0OTkyNywgNDk5MzEsIAorICAgIDQ5OTM1LCA0OTkzOSwgNDk5NDMsIDQ5OTQ3LCA0OTk1MSwgNDk5NTUsIDQ5OTU5LCA0OTk2MywgNDk5NjcsIDQ5OTcxLCAKKyAgICA0OTk3NSwgNDk5NzksIDQ5OTgzLCA0OTk4NywgNDk5OTEsIDQ5OTk1LCA0OTk5OSwgNTAwMDMsIDUwMDA3LCA1MDAxMSwgCisgICAgNTAwMTUsIDUwMDE5LCA1MDAyMywgNTAwMjcsIDUwMDMxLCA1MDAzNSwgNTAwMzksIDUwMDQzLCA1MDA0NywgNTAwNTEsIAorICAgIDUwMDU1LCA1MDA1OSwgNTAwNjMsIDUwMDY3LCA1MDA3MSwgNTAwNzUsIDUwMDc5LCA1MDA4MywgNTAwODcsIDUwMDkxLCAKKyAgICA1MDA5NSwgNTAwOTksIDUwMTAzLCA1MDEwNywgNTAxMTEsIDUwMTE1LCA1MDExOSwgNTAxMjMsIDUwMTI3LCA1MDEzMSwgCisgICAgNTAxMzUsIDUwMTM5LCA1MDE0MywgNTAxNDcsIDUwMTUxLCA1MDE1NSwgNTAxNTksIDUwMTYzLCA1MDE2NywgNTAxNzEsIAorICAgIDUwMTc1LCA1MDE3OSwgNTAxODMsIDUwMTg3LCA1MDE5MSwgNTAxOTUsIDUwMTk5LCA1MDIwMywgNTAyMDcsIDUwMjExLCAKKyAgICA1MDIxNSwgNTAyMTksIDUwMjIzLCA1MDIyNywgNTAyMzEsIDUwMjM1LCA1MDIzOSwgNTAyNDMsIDUwMjQ3LCA1MDI1MSwgCisgICAgNTAyNTUsIDUwMjU5LCA1MDI2MywgNTAyNjcsIDUwMjcxLCA1MDI3NSwgNTAyNzksIDUwMjgzLCA1MDI4NywgNTAyOTEsIAorICAgIDUwMjk1LCA1MDI5OSwgNTAzMDMsIDUwMzA3LCA1MDMxMSwgNTAzMTUsIDUwMzE5LCA1MDMyMywgNTAzMjcsIDUwMzMxLCAKKyAgICA1MDMzNSwgNTAzMzksIDUwMzQzLCA1MDM0NywgNTAzNTEsIDUwMzU1LCA1MDM1OSwgNTAzNjMsIDUwMzY3LCA1MDM3MSwgCisgICAgNTAzNzUsIDUwMzc5LCA1MDM4MywgNTAzODcsIDUwMzkxLCA1MDM5NSwgNTAzOTksIDUwNDAzLCA1MDQwNywgNTA0MTEsIAorICAgIDUwNDE1LCA1MDQxOSwgNTA0MjMsIDUwNDI3LCA1MDQzMSwgNTA0MzUsIDUwNDM5LCA1MDQ0MywgNTA0NDcsIDUwNDUxLCAKKyAgICA1MDQ1NSwgNTA0NTksIDUwNDYzLCA1MDQ2NywgNTA0NzEsIDUwNDc1LCA1MDQ3OSwgNTA0ODMsIDUwNDg3LCA1MDQ5NCwgCisgICAgNTA1MDIsIDUwNTA4LCA1MDUxNCwgNTA1MjEsIDUwNTI4LCA1MDUzNCwgNTA1NDAsIDUwNTQ2LCA1MDU1MiwgNTA1NTcsIAorICAgIDUwNTYyLCA1MDU2NywgNTA1NzIsIDUwNTc4LCA1MDU4NCwgNTA1OTIsIDUwNTk5LCA1MDYwNSwgNTA2MTEsIDUwNjE5LCAKKyAgICA1MDYyOCwgNTA2MzUsIDUwNjQ1LCA1MDY1NiwgNTA2NTksIDUwNjYyLCA1MDY2NiwgNTA2NzAsIDUwNjc3LCA1MDY4NCwgCisgICAgNTA2OTUsIDUwNzA2LCA1MDcxNiwgNTA3MjYsIDUwNzMzLCA1MDc0MCwgNTA3NDcsIDUwNzU0LCA1MDc2NSwgNTA3NzYsIAorICAgIDUwNzg3LCA1MDc5OCwgNTA4MDgsIDUwODE4LCA1MDgzMCwgNTA4NDIsIDUwODUzLCA1MDg2NCwgNTA4NzYsIDUwODg4LCAKKyAgICA1MDg5NywgNTA5MDcsIDUwOTE3LCA1MDkyOCwgNTA5MzksIDUwOTQ2LCA1MDk1MywgNTA5NjAsIDUwOTY3LCA1MDk3NywgCisgICAgNTA5ODcsIDUwOTk1LCA1MTAwMywgNTEwMTAsIDUxMDE3LCA1MTAyNCwgNTEwMzEsIDUxMDM4LCA1MTA0MywgNTEwNDgsIAorICAgIDUxMDU0LCA1MTA2MiwgNTEwNzIsIDUxMDgyLCA1MTA5MiwgNTExMDIsIDUxMTEyLCA1MTEyMiwgNTExMzIsIDUxMTQyLCAKKyAgICA1MTE1MiwgNTExNjIsIDUxMTcyLCA1MTE4MywgNTExOTQsIDUxMjA0LCA1MTIxNCwgNTEyMjUsIDUxMjM2LCA1MTI0NiwgCisgICAgNTEyNTYsIDUxMjY3LCA1MTI3OCwgNTEyODgsIDUxMjk4LCA1MTMwOSwgNTEzMjAsIDUxMzM2LCA1MTM1NSwgNTEzNzEsIAorICAgIDUxMzkwLCA1MTQwNiwgNTE0MjIsIDUxNDM4LCA1MTQ1NCwgNTE0NjUsIDUxNDc3LCA1MTQ4OCwgNTE1MDAsIDUxNTE5LCAKKyAgICA1MTUzOCwgNTE1NDYsIDUxNTUyLCA1MTU1OSwgNTE1NjYsIDUxNTczLCA1MTU4MCwgNTE1ODUsIDUxNTkxLCA1MTU5NiwgCisgICAgNTE2MDEsIDUxNjA3LCA1MTYxMiwgNTE2MTcsIDUxNjIyLCA1MTYyNywgNTE2MzIsIDUxNjM5LCA1MTY0NCwgNTE2NTEsIAorICAgIDUxNjU2LCA1MTY2MSwgNTE2NjUsIDUxNjY5LCA1MTY3NiwgNTE2ODMsIDUxNjkwLCA1MTY5NywgNTE3MDQsIDUxNzExLCAKKyAgICA1MTcyNCwgNTE3MzcsIDUxNzUwLCA1MTc2MywgNTE3NzEsIDUxNzc5LCA1MTc4NSwgNTE3OTEsIDUxNzk4LCA1MTgwNSwgCisgICAgNTE4MTIsIDUxODE5LCA1MTgyMywgNTE4MjgsIDUxODM2LCA1MTg0NCwgNTE4NTIsIDUxODU5LCA1MTg2MywgNTE4NzEsIAorICAgIDUxODc5LCA1MTg4MywgNTE4ODcsIDUxODkyLCA1MTg5OSwgNTE5MDcsIDUxOTE1LCA1MTkzNCwgNTE5NTMsIDUxOTcyLCAKKyAgICA1MTk5MSwgNTIwMTAsIDUyMDI5LCA1MjA0OCwgNTIwNjcsIDUyMDczLCA1MjA4MCwgNTIwODksIDUyMDk3LCA1MjEwNSwgCisgICAgNTIxMTAsIDUyMTEzLCA1MjExNiwgNTIxMjEsIDUyMTI0LCA1MjE0MywgNTIxNTAsIDUyMTU2LCA1MjE2MiwgNTIxNjYsIAorICAgIDUyMTY5LCA1MjE3MiwgNTIxNzUsIDUyMTg3LCA1MjIwMCwgNTIyMDcsIDUyMjE0LCA1MjIxNywgNTIyMjEsIDUyMjI0LCAKKyAgICA1MjIyOSwgNTIyMzQsIDUyMjM5LCA1MjI0NSwgNTIyNTQsIDUyMjYxLCA1MjI2OCwgNTIyNzYsIDUyMjgzLCA1MjI5MCwgCisgICAgNTIyOTMsIDUyMjk5LCA1MjMwNSwgNTIzMDgsIDUyMzExLCA1MjMxNiwgNTIzMjEsIDUyMzI3LCA1MjMzMywgNTIzMzcsIAorICAgIDUyMzQyLCA1MjM0OSwgNTIzNTMsIDUyMzU5LCA1MjM2MywgNTIzNjcsIDUyMzc1LCA1MjM4NywgNTIzOTYsIDUyNDAwLCAKKyAgICA1MjQwMiwgNTI0MTEsIDUyNDIwLCA1MjQyNiwgNTI0MjksIDUyNDM1LCA1MjQ0MSwgNTI0NDYsIDUyNDUxLCA1MjQ1NiwgCisgICAgNTI0NjEsIDUyNDY2LCA1MjQ3MSwgNTI0NzMsIDUyNDc5LCA1MjQ4NCwgNTI0OTEsIDUyNDk1LCA1MjUwMSwgNTI1MDQsIAorICAgIDUyNTA4LCA1MjUxNSwgNTI1MjIsIDUyNTI0LCA1MjUyNiwgNTI1MzIsIDUyNTM4LCA1MjU0NCwgNTI1NTMsIDUyNTYyLCAKKyAgICA1MjU2OSwgNTI1NzYsIDUyNTgyLCA1MjU4OCwgNTI1OTMsIDUyNTk4LCA1MjYwMywgNTI2MDksIDUyNjE1LCA1MjYyMCwgCisgICAgNTI2MjcsIDUyNjMxLCA1MjYzNSwgNTI2NDgsIDUyNjYxLCA1MjY3MywgNTI2ODIsIDUyNjg4LCA1MjY5NSwgNTI3MDAsIAorICAgIDUyNzA1LCA1MjcxMCwgNTI3MTUsIDUyNzIwLCA1MjcyMiwgNTI3MjksIDUyNzM2LCA1Mjc0MywgNTI3NTAsIDUyNzU3LCAKKyAgICA1Mjc2NSwgNTI3NzEsIDUyNzc2LCA1Mjc4MiwgNTI3ODgsIDUyNzk0LCA1MjgwMSwgNTI4MDcsIDUyODE1LCA1MjgyMywgCisgICAgNTI4MzEsIDUyODM5LCA1Mjg0NiwgNTI4NTIsIDUyODU4LCA1Mjg2NywgNTI4NzEsIDUyODgwLCA1Mjg4OSwgNTI4OTgsIAorICAgIDUyOTA2LCA1MjkxMCwgNTI5MTYsIDUyOTIzLCA1MjkzMCwgNTI5MzQsIDUyOTQwLCA1Mjk0NywgNTI5NTIsIDUyOTU3LCAKKyAgICA1Mjk2MywgNTI5NjgsIDUyOTczLCA1Mjk4MCwgNTI5ODcsIDUyOTkyLCA1Mjk5NywgNTMwMDUsIDUzMDEzLCA1MzAyMywgCisgICAgNTMwMzMsIDUzMDQwLCA1MzA0NywgNTMwNTEsIDUzMDU1LCA1MzA2NywgNTMwNzMsIDUzMDc5LCA1MzA4NCwgNTMwODksIAorICAgIDUzMDk2LCA1MzEwMywgNTMxMDksIDUzMTE1LCA1MzEyNCwgNTMxMzIsIDUzMTQwLCA1MzE0NywgNTMxNTQsIDUzMTYxLCAKKyAgICA1MzE2NywgNTMxNzQsIDUzMTgwLCA1MzE4NywgNTMxOTQsIDUzMjAxLCA1MzIwOCwgNTMyMTQsIDUzMjE5LCA1MzIyOCwgCisgICAgNTMyMzgsIDUzMjQ1LCA1MzI1NCwgNTMyNjAsIDUzMjY1LCA1MzI3MCwgNTMyODAsIDUzMjg2LCA1MzI5MiwgNTMyOTgsIAorICAgIDUzMzA2LCA1MzMxMSwgNTMzMTgsIDUzMzI1LCA1MzMzNiwgNTMzNDMsIDUzMzUwLCA1MzM1NywgNTMzNjQsIDUzMzcxLCAKKyAgICA1MzM3OCwgNTMzODUsIDUzMzk3LCA1MzQwOSwgNTM0MjAsIDUzNDMxLCA1MzQ0NCwgNTM0NTcsIDUzNDYyLCA1MzQ2NywgCisgICAgNTM0NzYsIDUzNDg1LCA1MzQ5MiwgNTM0OTksIDUzNTA4LCA1MzUxNywgNTM1MjUsIDUzNTMzLCA1MzU0MSwgNTM1NDksIAorICAgIDUzNTU5LCA1MzU2OSwgNTM1ODMsIDUzNTk3LCA1MzYwNSwgNTM2MTMsIDUzNjI1LCA1MzYzNywgNTM2NDUsIDUzNjUzLCAKKyAgICA1MzY2MywgNTM2NzMsIDUzNjc4LCA1MzY4MywgNTM2OTIsIDUzNzAxLCA1MzcwNiwgNTM3MTEsIDUzNzE5LCA1MzcyNSwgCisgICAgNTM3MzEsIDUzNzM5LCA1Mzc0NywgNTM3NjAsIDUzNzczLCA1Mzc3NywgNTM3ODEsIDUzNzg4LCA1Mzc5NSwgNTM4MDIsIAorICAgIDUzODEwLCA1MzgxOCwgNTM4MjcsIDUzODM2LCA1Mzg0MiwgNTM4NDgsIDUzODU1LCA1Mzg2MiwgNTM4NjksIDUzODc2LCAKKyAgICA1Mzg4NSwgNTM4OTQsIDUzODk3LCA1MzkwMCwgNTM5MDUsIDUzOTEwLCA1MzkxNiwgNTM5MjIsIDUzOTI5LCA1MzkzNiwgCisgICAgNTM5NDYsIDUzOTU2LCA1Mzk2MywgNTM5NzAsIDUzOTc4LCA1Mzk4NiwgNTM5OTQsIDU0MDAyLCA1NDAxMCwgNTQwMTgsIAorICAgIDU0MDI0LCA1NDAzMCwgNTQwMzQsIDU0MDM4LCA1NDA0NSwgNTQwNTIsIDU0MDU3LCA1NDA2MiwgNTQwNjcsIDU0MDcyLCAKKyAgICA1NDA3OCwgNTQwOTIsIDU0MDk5LCA1NDEwNiwgNTQxMTAsIDU0MTEyLCA1NDExNCwgNTQxMTksIDU0MTI0LCA1NDEyOSwgCisgICAgNTQxMzQsIDU0MTQyLCA1NDE0OSwgNTQxNTYsIDU0MTY0LCA1NDE3NiwgNTQxODQsIDU0MTkyLCA1NDIwMywgNTQyMDcsIAorICAgIDU0MjExLCA1NDIxNywgNTQyMjUsIDU0MjM4LCA1NDI0NSwgNTQyNTIsIDU0MjU5LCA1NDI2NCwgNTQyNzEsIDU0MjgwLCAKKyAgICA1NDI4OCwgNTQyOTQsIDU0MzAwLCA1NDMwNiwgNTQzMTUsIDU0MzI0LCA1NDMzMiwgNTQzNDEsIDU0MzQ2LCA1NDM0OSwgCisgICAgNTQzNTQsIDU0MzYwLCA1NDM2NiwgNTQzNzIsIDU0Mzc4LCA1NDM4MiwgNTQzODUsIDU0Mzg5LCA1NDM5MywgNTQzOTksIAorICAgIDU0NDA1LCA1NDQxMSwgNTQ0MTcsIDU0NDIxLCA1NDQyNSwgNTQ0MzIsIDU0NDM5LCA1NDQ0NiwgNTQ0NTMsIDU0NDYwLCAKKyAgICA1NDQ2NywgNTQ0NzcsIDU0NDg3LCA1NDQ5NCwgNTQ1MDEsIDU0NTA5LCA1NDUxNywgNTQ1MjEsIDU0NTI2LCA1NDUzMSwgCisgICAgNTQ1MzcsIDU0NTQzLCA1NDU0NiwgNTQ1NDksIDU0NTUyLCA1NDU1NSwgNTQ1NTksIDU0NTY0LCA1NDU2OSwgNTQ1NzQsIAorICAgIDU0NTc5LCA1NDU4NCwgNTQ1ODgsIDU0NTkyLCA1NDU5NiwgNTQ2MDAsIDU0NjA0LCA1NDYwOCwgNTQ2MTIsIDU0NjE4LCAKKyAgICA1NDYyMiwgNTQ2MjgsIDU0NjMzLCA1NDY0MCwgNTQ2NDgsIDU0NjU1LCA1NDY2MywgNTQ2NzAsIDU0Njc4LCA1NDY4NywgCisgICAgNTQ2OTQsIDU0NzA0LCA1NDcxNSwgNTQ3MjEsIDU0NzMwLCA1NDczNiwgNTQ3NDUsIDU0NzU0LCA1NDc2MCwgNTQ3NjYsIAorICAgIDU0NzcwLCA1NDc3NCwgNTQ3ODMsIDU0NzkyLCA1NDc5OSwgNTQ4MDYsIDU0ODE1LCAwLCAwLCAwLCA1NDgyNCwgNTQ4MjksIAorICAgIDU0ODMzLCA1NDgzNywgNTQ4NDIsIDU0ODQ3LCA1NDg1MiwgNTQ4NjAsIDU0ODY4LCA1NDg3MSwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgNTQ4NDcsIDU0ODUyLCA1NDg1NywgNTQ4NjIsIDU0ODY3LCA1NDg3MiwgNTQ4NzcsIDU0ODgyLCAKLSAgICA1NDg4NywgNTQ4OTIsIDU0ODk3LCA1NDkwMywgNTQ5MDcsIDU0OTEyLCA1NDkxNywgNTQ5MjIsIDU0OTI3LCA1NDkzMiwgCi0gICAgNTQ5MzcsIDU0OTQyLCA1NDk0NywgNTQ5NTIsIDU0OTU3LCA1NDk2MiwgNTQ5NjcsIDU0OTcyLCA1NDk3NywgNTQ5ODIsIAotICAgIDU0OTg3LCA1NDk5MiwgNTQ5OTcsIDU1MDAyLCA1NTAwNywgNTUwMTIsIDU1MDE3LCA1NTAyMywgNTUwMjgsIDU1MDM0LCAKLSAgICA1NTA0MywgNTUwNDgsIDU1MDU2LCA1NTA2MywgNTUwNzIsIDU1MDc3LCA1NTA4MiwgNTUwODcsIDU1MDkzLCAwLCA1NTEwMCwgCi0gICAgNTUxMDUsIDU1MTEwLCA1NTExNSwgNTUxMjAsIDU1MTI1LCA1NTEzMCwgNTUxMzUsIDU1MTQwLCA1NTE0NSwgNTUxNTAsIAotICAgIDU1MTU2LCA1NTE2MCwgNTUxNjUsIDU1MTcwLCA1NTE3NSwgNTUxODAsIDU1MTg1LCA1NTE5MCwgNTUxOTUsIDU1MjAwLCAKLSAgICA1NTIwNSwgNTUyMTAsIDU1MjE1LCA1NTIyMCwgNTUyMjUsIDU1MjMwLCA1NTIzNSwgNTUyNDAsIDU1MjQ1LCA1NTI1MCwgCi0gICAgNTUyNTUsIDU1MjYwLCA1NTI2NSwgNTUyNzAsIDU1Mjc2LCA1NTI4MSwgNTUyODcsIDU1Mjk2LCA1NTMwMSwgNTUzMDksIAotICAgIDU1MzE2LCA1NTMyNSwgNTUzMzAsIDU1MzM1LCA1NTM0MCwgNTUzNDYsIDAsIDU1MzUzLCA1NTM2MSwgNTUzNjksIDU1Mzc4LCAKLSAgICA1NTM4NSwgNTUzOTMsIDU1Mzk5LCA1NTQwOCwgNTU0MTYsIDU1NDI0LCA1NTQzMiwgNTU0NDAsIDU1NDQ4LCA1NTQ1NiwgCi0gICAgNTU0NjEsIDU1NDY4LCA1NTQ3NCwgNTU0ODEsIDU1NDg5LCA1NTQ5NiwgNTU1MDMsIDU1NTExLCA1NTUxNywgNTU1MjMsIAotICAgIDU1NTMwLCA1NTUzNywgNTU1NDcsIDU1NTU3LCA1NTU2NCwgNTU1NzEsIDU1NTc2LCA1NTU4NiwgNTU1OTYsIDU1NjAxLCAKLSAgICA1NTYwNiwgNTU2MTEsIDU1NjE2LCA1NTYyMSwgNTU2MjYsIDU1NjMxLCA1NTYzNiwgNTU2NDEsIDU1NjQ2LCA1NTY1MSwgCi0gICAgNTU2NTYsIDU1NjYxLCA1NTY2NiwgNTU2NzEsIDU1Njc2LCA1NTY4MSwgNTU2ODYsIDU1NjkxLCA1NTY5NiwgNTU3MDEsIAotICAgIDU1NzA2LCA1NTcxMSwgNTU3MTYsIDU1NzIxLCA1NTcyNiwgNTU3MzEsIDU1NzM2LCA1NTc0MSwgNTU3NDYsIDU1NzUwLCAKLSAgICA1NTc1NCwgNTU3NTksIDU1NzY0LCA1NTc2OSwgNTU3NzQsIDU1Nzc5LCA1NTc4NCwgNTU3ODksIDU1Nzk0LCA1NTc5OSwgCi0gICAgNTU4MDQsIDU1ODA5LCA1NTgxNCwgNTU4MTksIDU1ODI0LCA1NTgyOSwgNTU4MzQsIDU1ODM5LCA1NTg0NCwgNTU4NTEsIAotICAgIDU1ODU4LCA1NTg2NSwgNTU4NzIsIDU1ODc5LCA1NTg4NiwgNTU4OTMsIDU1OTAwLCA1NTkwNywgNTU5MTQsIDU1OTIxLCAKLSAgICA1NTkyOCwgNTU5MzUsIDU1OTQyLCA1NTk0NywgNTU5NTIsIDU1OTU5LCA1NTk2NiwgNTU5NzMsIDU1OTgwLCA1NTk4NywgCi0gICAgNTU5OTQsIDU2MDAxLCA1NjAwOCwgNTYwMTUsIDU2MDIyLCA1NjAyOSwgNTYwMzYsIDU2MDQyLCA1NjA0OCwgNTYwNTQsIAotICAgIDU2MDYwLCA1NjA2NywgNTYwNzQsIDU2MDgxLCA1NjA4OCwgNTYwOTUsIDU2MTAyLCA1NjEwOSwgNTYxMTYsIDU2MTIzLCAKLSAgICA1NjEzMCwgNTYxMzgsIDU2MTQ2LCA1NjE1NCwgNTYxNjIsIDU2MTcwLCA1NjE3OCwgNTYxODYsIDU2MTk0LCA1NjE5OCwgCi0gICAgNTYyMDQsIDU2MjEwLCA1NjIxNCwgNTYyMjAsIDU2MjI2LCA1NjIzMiwgNTYyMzksIDU2MjQ2LCA1NjI1MywgNTYyNjAsIAotICAgIDU2MjY1LCA1NjI3MSwgNTYyNzcsIDU2Mjg0LCAwLCAwLCAwLCAwLCAwLCA1NjI5MSwgNTYyOTksIDU2MzA4LCA1NjMxNywgCi0gICAgNTYzMjUsIDU2MzMxLCA1NjMzNiwgNTYzNDEsIDU2MzQ2LCA1NjM1MSwgNTYzNTYsIDU2MzYxLCA1NjM2NiwgNTYzNzEsIAotICAgIDU2Mzc2LCA1NjM4MSwgNTYzODYsIDU2MzkxLCA1NjM5NiwgNTY0MDEsIDU2NDA2LCA1NjQxMSwgNTY0MTYsIDU2NDIxLCAKLSAgICA1NjQyNiwgNTY0MzEsIDU2NDM2LCA1NjQ0MSwgNTY0NDYsIDU2NDUxLCA1NjQ1NiwgNTY0NjEsIDU2NDY2LCA1NjQ3MSwgCi0gICAgNTY0NzYsIDU2NDgxLCA1NjQ4NiwgNTY0OTEsIDU2NDk2LCA1NjUwMSwgNTY1MDYsIDU2NTExLCA1NjUxNiwgNTY1MjEsIAotICAgIDU2NTI2LCAwLCA1NjUzMSwgMCwgMCwgMCwgMCwgMCwgNTY1MzYsIDAsIDAsIDU2NTQxLCA1NjU0NSwgNTY1NTAsIDU2NTU1LCAKLSAgICA1NjU2MCwgNTY1NjUsIDU2NTc0LCA1NjU3OSwgNTY1ODQsIDU2NTg5LCA1NjU5NCwgNTY1OTksIDU2NjA0LCA1NjYwOSwgCi0gICAgNTY2MTQsIDU2NjIxLCA1NjYyNiwgNTY2MzEsIDU2NjQwLCA1NjY0NywgNTY2NTIsIDU2NjU3LCA1NjY2MiwgNTY2NjksIAotICAgIDU2Njc0LCA1NjY4MSwgNTY2ODYsIDU2NjkxLCA1NjY5OCwgNTY3MDUsIDU2NzEwLCA1NjcxNSwgNTY3MjAsIDU2NzI3LCAKLSAgICA1NjczNCwgNTY3MzksIDU2NzQ0LCA1Njc0OSwgNTY3NTQsIDU2NzU5LCA1Njc2NiwgNTY3NzMsIDU2Nzc4LCA1Njc4MywgCi0gICAgNTY3ODgsIDU2NzkzLCA1Njc5OCwgNTY4MDMsIDU2ODA4LCA1NjgxMywgNTY4MTgsIDU2ODIzLCA1NjgyOCwgNTY4MzUsIAotICAgIDU2ODQwLCA1Njg0NSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTY4NTAsIDU2ODU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1Njg2MiwgNTY4NjcsIDU2ODcxLCA1Njg3NSwgNTY4NzksIDU2ODgzLCA1Njg4NywgNTY4OTEsIAotICAgIDU2ODk1LCA1Njg5OSwgNTY5MDMsIDU2OTA3LCA1NjkxMywgNTY5MTcsIDU2OTIxLCA1NjkyNSwgNTY5MjksIDU2OTMzLCAKLSAgICA1NjkzNywgNTY5NDEsIDU2OTQ1LCA1Njk0OSwgNTY5NTMsIDU2OTU3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA1Njk2MSwgNTY5NjUsIDU2OTY5LCA1Njk3MywgNTY5NzcsIDU2OTgxLCA1Njk4NSwgMCwgNTY5ODksIDU2OTkzLCA1Njk5NywgCi0gICAgNTcwMDEsIDU3MDA1LCA1NzAwOSwgNTcwMTMsIDAsIDU3MDE3LCA1NzAyMSwgNTcwMjUsIDU3MDI5LCA1NzAzMywgNTcwMzcsIAotICAgIDU3MDQxLCAwLCA1NzA0NSwgNTcwNDksIDU3MDUzLCA1NzA1NywgNTcwNjEsIDU3MDY1LCA1NzA2OSwgMCwgNTcwNzMsIAotICAgIDU3MDc3LCA1NzA4MSwgNTcwODUsIDU3MDg5LCA1NzA5MywgNTcwOTcsIDAsIDU3MTAxLCA1NzEwNSwgNTcxMDksIDU3MTEzLCAKLSAgICA1NzExNywgNTcxMjEsIDU3MTI1LCAwLCA1NzEyOSwgNTcxMzMsIDU3MTM3LCA1NzE0MSwgNTcxNDUsIDU3MTQ5LCA1NzE1MywgCi0gICAgMCwgNTcxNTcsIDU3MTYxLCA1NzE2NSwgNTcxNjksIDU3MTczLCA1NzE3NywgNTcxODEsIDAsIDU3MTg1LCA1NzE5MCwgCi0gICAgNTcxOTUsIDU3MjAwLCA1NzIwNSwgNTcyMTAsIDU3MjE1LCA1NzIxOSwgNTcyMjQsIDU3MjI5LCA1NzIzNCwgNTcyMzgsIAotICAgIDU3MjQzLCA1NzI0OCwgNTcyNTMsIDU3MjU4LCA1NzI2MiwgNTcyNjcsIDU3MjcyLCA1NzI3NywgNTcyODIsIDU3Mjg3LCAKLSAgICA1NzI5MiwgNTcyOTYsIDU3MzAxLCA1NzMwNiwgNTczMTMsIDU3MzE4LCA1NzMyMywgNTczMjksIDU3MzM2LCA1NzM0MywgCi0gICAgNTczNTIsIDU3MzU5LCA1NzM2OCwgNTczNzIsIDU3Mzc2LCA1NzM4MiwgNTczODgsIDU3Mzk0LCA1NzQwMiwgNTc0MDgsIAotICAgIDU3NDEyLCA1NzQxNiwgNTc0MjAsIDU3NDI2LCA1NzQzMiwgNTc0MzYsIDU3NDM4LCA1NzQ0MiwgNTc0NDgsIDU3NDUwLCAKLSAgICA1NzQ1NCwgNTc0NTgsIDU3NDYyLCA1NzQ2OCwgNTc0NzMsIDU3NDc3LCA1NzQ4MSwgNTc0ODYsIDU3NDkyLCA1NzQ5NywgCi0gICAgNTc1MDIsIDU3NTA3LCA1NzUxMiwgNTc1MTksIDU3NTI2LCA1NzUzMSwgNTc1MzYsIDU3NTQxLCA1NzU0NiwgNTc1NTEsIAotICAgIDU3NTU2LCA1NzU2MCwgNTc1NjQsIDU3NTcxLCA1NzU3OCwgNTc1ODQsIDU3NTg4LCA1NzU5MywgNTc1OTUsIDU3NTk5LCAKLSAgICA1NzYwNywgNTc2MTEsIDU3NjE1LCA1NzYxOSwgNTc2MjMsIDU3NjI5LCA1NzYzNSwgNTc2MzksIDU3NjQ1LCA1NzY0OSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTQ4NzUsIDU0ODgwLCA1NDg4NSwgCisgICAgNTQ4OTAsIDU0ODk1LCA1NDkwMCwgNTQ5MDUsIDU0OTEwLCA1NDkxNSwgNTQ5MjAsIDU0OTI1LCA1NDkzMSwgNTQ5MzUsIAorICAgIDU0OTQwLCA1NDk0NSwgNTQ5NTAsIDU0OTU1LCA1NDk2MCwgNTQ5NjUsIDU0OTcwLCA1NDk3NSwgNTQ5ODAsIDU0OTg1LCAKKyAgICA1NDk5MCwgNTQ5OTUsIDU1MDAwLCA1NTAwNSwgNTUwMTAsIDU1MDE1LCA1NTAyMCwgNTUwMjUsIDU1MDMwLCA1NTAzNSwgCisgICAgNTUwNDAsIDU1MDQ1LCA1NTA1MSwgNTUwNTYsIDU1MDYyLCA1NTA3MSwgNTUwNzYsIDU1MDg0LCA1NTA5MSwgNTUxMDAsIAorICAgIDU1MTA1LCA1NTExMCwgNTUxMTUsIDU1MTIxLCAwLCA1NTEyOCwgNTUxMzMsIDU1MTM4LCA1NTE0MywgNTUxNDgsIDU1MTUzLCAKKyAgICA1NTE1OCwgNTUxNjMsIDU1MTY4LCA1NTE3MywgNTUxNzgsIDU1MTg0LCA1NTE4OCwgNTUxOTMsIDU1MTk4LCA1NTIwMywgCisgICAgNTUyMDgsIDU1MjEzLCA1NTIxOCwgNTUyMjMsIDU1MjI4LCA1NTIzMywgNTUyMzgsIDU1MjQzLCA1NTI0OCwgNTUyNTMsIAorICAgIDU1MjU4LCA1NTI2MywgNTUyNjgsIDU1MjczLCA1NTI3OCwgNTUyODMsIDU1Mjg4LCA1NTI5MywgNTUyOTgsIDU1MzA0LCAKKyAgICA1NTMwOSwgNTUzMTUsIDU1MzI0LCA1NTMyOSwgNTUzMzcsIDU1MzQ0LCA1NTM1MywgNTUzNTgsIDU1MzYzLCA1NTM2OCwgCisgICAgNTUzNzQsIDAsIDU1MzgxLCA1NTM4OSwgNTUzOTcsIDU1NDA2LCA1NTQxMywgNTU0MjEsIDU1NDI3LCA1NTQzNiwgNTU0NDQsIAorICAgIDU1NDUyLCA1NTQ2MCwgNTU0NjgsIDU1NDc2LCA1NTQ4NCwgNTU0ODksIDU1NDk2LCA1NTUwMiwgNTU1MDksIDU1NTE3LCAKKyAgICA1NTUyNCwgNTU1MzEsIDU1NTM5LCA1NTU0NSwgNTU1NTEsIDU1NTU4LCA1NTU2NSwgNTU1NzUsIDU1NTg1LCA1NTU5MiwgCisgICAgNTU1OTksIDU1NjA0LCA1NTYxNCwgNTU2MjQsIDU1NjI5LCA1NTYzNCwgNTU2MzksIDU1NjQ0LCA1NTY0OSwgNTU2NTQsIAorICAgIDU1NjU5LCA1NTY2NCwgNTU2NjksIDU1Njc0LCA1NTY3OSwgNTU2ODQsIDU1Njg5LCA1NTY5NCwgNTU2OTksIDU1NzA0LCAKKyAgICA1NTcwOSwgNTU3MTQsIDU1NzE5LCA1NTcyNCwgNTU3MjksIDU1NzM0LCA1NTczOSwgNTU3NDQsIDU1NzQ5LCA1NTc1NCwgCisgICAgNTU3NTksIDU1NzY0LCA1NTc2OSwgNTU3NzQsIDU1Nzc4LCA1NTc4MiwgNTU3ODcsIDU1NzkyLCA1NTc5NywgNTU4MDIsIAorICAgIDU1ODA3LCA1NTgxMiwgNTU4MTcsIDU1ODIyLCA1NTgyNywgNTU4MzIsIDU1ODM3LCA1NTg0MiwgNTU4NDcsIDU1ODUyLCAKKyAgICA1NTg1NywgNTU4NjIsIDU1ODY3LCA1NTg3MiwgNTU4NzksIDU1ODg2LCA1NTg5MywgNTU5MDAsIDU1OTA3LCA1NTkxNCwgCisgICAgNTU5MjEsIDU1OTI4LCA1NTkzNSwgNTU5NDIsIDU1OTQ5LCA1NTk1NiwgNTU5NjMsIDU1OTcwLCA1NTk3NSwgNTU5ODAsIAorICAgIDU1OTg3LCA1NTk5NCwgNTYwMDEsIDU2MDA4LCA1NjAxNSwgNTYwMjIsIDU2MDI5LCA1NjAzNiwgNTYwNDMsIDU2MDUwLCAKKyAgICA1NjA1NywgNTYwNjQsIDU2MDcwLCA1NjA3NiwgNTYwODIsIDU2MDg4LCA1NjA5NSwgNTYxMDIsIDU2MTA5LCA1NjExNiwgCisgICAgNTYxMjMsIDU2MTMwLCA1NjEzNywgNTYxNDQsIDU2MTUxLCA1NjE1OCwgNTYxNjYsIDU2MTc0LCA1NjE4MiwgNTYxOTAsIAorICAgIDU2MTk4LCA1NjIwNiwgNTYyMTQsIDU2MjIyLCA1NjIyNiwgNTYyMzIsIDU2MjM4LCA1NjI0MiwgNTYyNDgsIDU2MjU0LCAKKyAgICA1NjI2MCwgNTYyNjcsIDU2Mjc0LCA1NjI4MSwgNTYyODgsIDU2MjkzLCA1NjI5OSwgNTYzMDUsIDU2MzEyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA1NjMxOSwgNTYzMjcsIDU2MzM2LCA1NjM0NSwgNTYzNTMsIDU2MzU5LCA1NjM2NCwgNTYzNjksIDU2Mzc0LCAKKyAgICA1NjM3OSwgNTYzODQsIDU2Mzg5LCA1NjM5NCwgNTYzOTksIDU2NDA0LCA1NjQwOSwgNTY0MTQsIDU2NDE5LCA1NjQyNCwgCisgICAgNTY0MjksIDU2NDM0LCA1NjQzOSwgNTY0NDQsIDU2NDQ5LCA1NjQ1NCwgNTY0NTksIDU2NDY0LCA1NjQ2OSwgNTY0NzQsIAorICAgIDU2NDc5LCA1NjQ4NCwgNTY0ODksIDU2NDk0LCA1NjQ5OSwgNTY1MDQsIDU2NTA5LCA1NjUxNCwgNTY1MTksIDU2NTI0LCAKKyAgICA1NjUyOSwgNTY1MzQsIDU2NTM5LCA1NjU0NCwgNTY1NDksIDU2NTU0LCAwLCA1NjU1OSwgMCwgMCwgMCwgMCwgMCwgNTY1NjQsIAorICAgIDAsIDAsIDU2NTY5LCA1NjU3MywgNTY1NzgsIDU2NTgzLCA1NjU4OCwgNTY1OTMsIDU2NjAyLCA1NjYwNywgNTY2MTIsIAorICAgIDU2NjE3LCA1NjYyMiwgNTY2MjcsIDU2NjMyLCA1NjYzNywgNTY2NDIsIDU2NjQ5LCA1NjY1NCwgNTY2NTksIDU2NjY4LCAKKyAgICA1NjY3NSwgNTY2ODAsIDU2Njg1LCA1NjY5MCwgNTY2OTcsIDU2NzAyLCA1NjcwOSwgNTY3MTQsIDU2NzE5LCA1NjcyNiwgCisgICAgNTY3MzMsIDU2NzM4LCA1Njc0MywgNTY3NDgsIDU2NzU1LCA1Njc2MiwgNTY3NjcsIDU2NzcyLCA1Njc3NywgNTY3ODIsIAorICAgIDU2Nzg3LCA1Njc5NCwgNTY4MDEsIDU2ODA2LCA1NjgxMSwgNTY4MTYsIDU2ODIxLCA1NjgyNiwgNTY4MzEsIDU2ODM2LCAKKyAgICA1Njg0MSwgNTY4NDYsIDU2ODUxLCA1Njg1NiwgNTY4NjMsIDU2ODY4LCA1Njg3MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNTY4NzgsIDU2ODg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Njg5MCwgNTY4OTUsIAorICAgIDU2ODk5LCA1NjkwMywgNTY5MDcsIDU2OTExLCA1NjkxNSwgNTY5MTksIDU2OTIzLCA1NjkyNywgNTY5MzEsIDU2OTM1LCAKKyAgICA1Njk0MSwgNTY5NDUsIDU2OTQ5LCA1Njk1MywgNTY5NTcsIDU2OTYxLCA1Njk2NSwgNTY5NjksIDU2OTczLCA1Njk3NywgCisgICAgNTY5ODEsIDU2OTg1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1Njk4OSwgNTY5OTMsIDU2OTk3LCA1NzAwMSwgCisgICAgNTcwMDUsIDU3MDA5LCA1NzAxMywgMCwgNTcwMTcsIDU3MDIxLCA1NzAyNSwgNTcwMjksIDU3MDMzLCA1NzAzNywgNTcwNDEsIAorICAgIDAsIDU3MDQ1LCA1NzA0OSwgNTcwNTMsIDU3MDU3LCA1NzA2MSwgNTcwNjUsIDU3MDY5LCAwLCA1NzA3MywgNTcwNzcsIAorICAgIDU3MDgxLCA1NzA4NSwgNTcwODksIDU3MDkzLCA1NzA5NywgMCwgNTcxMDEsIDU3MTA1LCA1NzEwOSwgNTcxMTMsIDU3MTE3LCAKKyAgICA1NzEyMSwgNTcxMjUsIDAsIDU3MTI5LCA1NzEzMywgNTcxMzcsIDU3MTQxLCA1NzE0NSwgNTcxNDksIDU3MTUzLCAwLCAKKyAgICA1NzE1NywgNTcxNjEsIDU3MTY1LCA1NzE2OSwgNTcxNzMsIDU3MTc3LCA1NzE4MSwgMCwgNTcxODUsIDU3MTg5LCA1NzE5MywgCisgICAgNTcxOTcsIDU3MjAxLCA1NzIwNSwgNTcyMDksIDAsIDU3MjEzLCA1NzIxOCwgNTcyMjMsIDU3MjI4LCA1NzIzMywgNTcyMzgsIAorICAgIDU3MjQzLCA1NzI0NywgNTcyNTIsIDU3MjU3LCA1NzI2MiwgNTcyNjYsIDU3MjcxLCA1NzI3NiwgNTcyODEsIDU3Mjg2LCAKKyAgICA1NzI5MCwgNTcyOTUsIDU3MzAwLCA1NzMwNSwgNTczMTAsIDU3MzE1LCA1NzMyMCwgNTczMjQsIDU3MzI5LCA1NzMzNCwgCisgICAgNTczNDEsIDU3MzQ2LCA1NzM1MSwgNTczNTcsIDU3MzY0LCA1NzM3MSwgNTczODAsIDU3Mzg3LCA1NzM5NiwgNTc0MDAsIAorICAgIDU3NDA0LCA1NzQxMCwgNTc0MTYsIDU3NDIyLCA1NzQzMCwgNTc0MzYsIDU3NDQwLCA1NzQ0NCwgNTc0NDgsIDU3NDU0LCAKKyAgICA1NzQ2MCwgNTc0NjQsIDU3NDY2LCA1NzQ3MCwgNTc0NzYsIDU3NDc4LCA1NzQ4MiwgNTc0ODYsIDU3NDkwLCA1NzQ5NiwgCisgICAgNTc1MDEsIDU3NTA1LCA1NzUwOSwgNTc1MTQsIDU3NTIwLCA1NzUyNSwgNTc1MzAsIDU3NTM1LCA1NzU0MCwgNTc1NDcsIAorICAgIDU3NTU0LCA1NzU1OSwgNTc1NjQsIDU3NTY5LCA1NzU3NCwgNTc1NzksIDU3NTg0LCA1NzU4OCwgNTc1OTIsIDU3NTk5LCAKKyAgICA1NzYwNiwgNTc2MTIsIDU3NjE2LCA1NzYyMSwgNTc2MjMsIDU3NjI3LCA1NzYzNSwgNTc2MzksIDU3NjQzLCA1NzY0NywgCisgICAgNTc2NTEsIDU3NjU3LCA1NzY2MywgNTc2NjcsIDU3NjczLCA1NzY3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTc2NTMsIDU3NjU3LCAKLSAgICA1NzY2MSwgNTc2NjYsIDU3NjcxLCA1NzY3NiwgNTc2ODAsIDU3Njg0LCA1NzY4OCwgNTc2OTMsIDU3Njk4LCA1NzcwMiwgCi0gICAgNTc3MDYsIDU3NzEwLCA1NzcxNCwgNTc3MTksIDU3NzI0LCA1NzcyOSwgNTc3MzQsIDU3NzM4LCA1Nzc0MiwgNTc3NDcsIAotICAgIDU3NzUyLCA1Nzc1NywgNTc3NjIsIDU3NzY2LCAwLCA1Nzc3MCwgNTc3NzQsIDU3Nzc4LCA1Nzc4MiwgNTc3ODYsIDU3NzkwLCAKLSAgICA1Nzc5NCwgNTc3OTksIDU3ODA0LCA1NzgwOCwgNTc4MTMsIDU3ODE4LCA1NzgyNywgNTc4MzEsIDU3ODM1LCA1NzgzOSwgCi0gICAgNTc4NDYsIDU3ODUwLCA1Nzg1NSwgNTc4NjAsIDU3ODY0LCA1Nzg2OCwgNTc4NzQsIDU3ODc5LCA1Nzg4NCwgNTc4ODksIAotICAgIDU3ODk0LCA1Nzg5OCwgNTc5MDIsIDU3OTA2LCA1NzkxMCwgNTc5MTQsIDU3OTE5LCA1NzkyNCwgNTc5MjgsIDU3OTMyLCAKLSAgICA1NzkzNywgNTc5NDIsIDU3OTQ3LCA1Nzk1MSwgNTc5NTUsIDU3OTYwLCA1Nzk2NSwgNTc5NzEsIDU3OTc3LCA1Nzk4MSwgCi0gICAgNTc5ODcsIDU3OTkzLCA1Nzk5NywgNTgwMDMsIDU4MDA5LCA1ODAxNCwgNTgwMTksIDU4MDIzLCA1ODAyOSwgNTgwMzMsIAotICAgIDU4MDM3LCA1ODA0MywgNTgwNDksIDU4MDU0LCA1ODA1OSwgNTgwNjMsIDU4MDY3LCA1ODA3NSwgNTgwODEsIDU4MDg3LCAKLSAgICA1ODA5MywgNTgwOTgsIDU4MTAzLCA1ODEwOCwgNTgxMTQsIDU4MTE4LCA1ODEyNCwgNTgxMjgsIDU4MTMyLCA1ODEzOCwgCi0gICAgNTgxNDQsIDU4MTUwLCA1ODE1NiwgNTgxNjIsIDU4MTY4LCA1ODE3NCwgNTgxODAsIDU4MTg2LCA1ODE5MiwgNTgxOTgsIAotICAgIDU4MjA0LCA1ODIwOCwgNTgyMTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU4MjIwLCA1ODIyMywgCi0gICAgNTgyMjcsIDU4MjMxLCA1ODIzNSwgNTgyMzksIDU4MjQyLCA1ODI0NSwgNTgyNDksIDU4MjUzLCA1ODI1NywgNTgyNjEsIAotICAgIDU4MjY0LCA1ODI2OSwgNTgyNzMsIDU4Mjc3LCA1ODI4MSwgNTgyODYsIDU4MjkwLCA1ODI5NCwgNTgyOTgsIDU4MzAyLCAKLSAgICA1ODMwOCwgNTgzMTQsIDU4MzE4LCA1ODMyMiwgNTgzMjYsIDU4MzMwLCA1ODMzNCwgNTgzMzgsIDU4MzQyLCA1ODM0NiwgCi0gICAgNTgzNTAsIDU4MzU0LCA1ODM1OCwgNTgzNjQsIDU4MzY4LCA1ODM3MiwgNTgzNzYsIDU4MzgwLCA1ODM4NCwgNTgzODgsIAotICAgIDU4MzkyLCA1ODM5NiwgNTg0MDAsIDU4NDA0LCA1ODQwOCwgNTg0MTIsIDU4NDE2LCA1ODQyMCwgNTg0MjQsIDU4NDI4LCAKLSAgICA1ODQzNCwgNTg0NDAsIDU4NDQ1LCA1ODQ1MCwgNTg0NTQsIDU4NDU4LCA1ODQ2MiwgNTg0NjYsIDU4NDcwLCA1ODQ3NCwgCi0gICAgNTg0NzgsIDU4NDgyLCA1ODQ4NiwgNTg0OTAsIDU4NDk0LCA1ODQ5OCwgNTg1MDIsIDU4NTA2LCA1ODUxMCwgNTg1MTQsIAotICAgIDU4NTE4LCA1ODUyMiwgNTg1MjYsIDU4NTMwLCA1ODUzNCwgNTg1MzgsIDU4NTQyLCA1ODU0NiwgNTg1NTIsIDU4NTU2LCAKLSAgICA1ODU2MCwgNTg1NjQsIDU4NTY4LCA1ODU3MiwgNTg1NzYsIDU4NTgwLCA1ODU4NCwgNTg1ODksIDU4NTk2LCA1ODYwMCwgCi0gICAgNTg2MDQsIDU4NjA4LCA1ODYxMiwgNTg2MTYsIDU4NjIwLCA1ODYyNCwgNTg2MjgsIDU4NjMyLCA1ODYzNiwgNTg2NDAsIAotICAgIDU4NjQ0LCA1ODY1MSwgNTg2NTUsIDU4NjYxLCA1ODY2NSwgNTg2NjksIDU4NjczLCA1ODY3NywgNTg2ODEsIDU4Njg0LCAKLSAgICA1ODY4OCwgNTg2OTIsIDU4Njk2LCA1ODcwMCwgNTg3MDQsIDU4NzA4LCA1ODcxMiwgNTg3MTYsIDU4NzIwLCA1ODcyNCwgCi0gICAgNTg3MjgsIDU4NzMyLCA1ODczNiwgNTg3NDAsIDU4NzQ0LCA1ODc0OCwgNTg3NTIsIDU4NzU2LCA1ODc2MCwgNTg3NjQsIAotICAgIDU4NzY4LCA1ODc3MiwgNTg3NzYsIDU4NzgwLCA1ODc4NCwgNTg3ODgsIDU4NzkyLCA1ODc5NiwgNTg4MDAsIDU4ODA0LCAKLSAgICA1ODgwOCwgNTg4MTIsIDU4ODE4LCA1ODgyMiwgNTg4MjYsIDU4ODMwLCA1ODgzNCwgNTg4MzgsIDU4ODQyLCA1ODg0NiwgCi0gICAgNTg4NTAsIDU4ODU0LCA1ODg1OCwgNTg4NjIsIDU4ODY2LCA1ODg3MCwgNTg4NzQsIDU4ODc4LCA1ODg4MiwgNTg4ODYsIAotICAgIDU4ODkwLCA1ODg5NCwgNTg4OTgsIDU4OTAyLCA1ODkwNiwgNTg5MTAsIDU4OTE0LCA1ODkxOCwgNTg5MjIsIDU4OTI2LCAKLSAgICA1ODkzNCwgNTg5MzgsIDU4OTQyLCA1ODk0NiwgNTg5NTAsIDU4OTU0LCA1ODk2MCwgNTg5NjQsIDU4OTY4LCA1ODk3MiwgCi0gICAgNTg5NzYsIDU4OTgwLCA1ODk4NCwgNTg5ODgsIDU4OTkyLCA1ODk5NiwgNTkwMDAsIDU5MDA0LCA1OTAwOCwgNTkwMTIsIAotICAgIDU5MDE4LCA1OTAyMiwgNTkwMjYsIDU5MDMwLCA1OTAzNCwgNTkwMzgsIDU5MDQyLCA1OTA0NiwgNTkwNTAsIDU5MDU0LCAKLSAgICA1OTA1OCwgNTkwNjIsIDU5MDY2LCA1OTA3MCwgNTkwNzQsIDU5MDc4LCA1OTA4MiwgNTkwODYsIDU5MDkwLCA1OTA5NCwgCi0gICAgNTkwOTgsIDU5MTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA1OTEwNiwgNTkxMTUsIDU5MTIzLCA1OTEzNSwgNTkxNDYsIDU5MTU0LCA1OTE2MywgNTkxNzIsIAotICAgIDU5MTgyLCA1OTE5NCwgNTkyMDYsIDU5MjE4LCAwLCAwLCAwLCAwLCA1OTIyNCwgNTkyMjcsIDU5MjMwLCA1OTIzNSwgCi0gICAgNTkyMzgsIDU5MjQ1LCA1OTI0OSwgNTkyNTMsIDU5MjU3LCA1OTI2MSwgNTkyNjUsIDU5MjcwLCA1OTI3NSwgNTkyNzksIAotICAgIDU5MjgzLCA1OTI4OCwgNTkyOTMsIDU5Mjk4LCA1OTMwMywgNTkzMDYsIDU5MzA5LCA1OTMxNSwgNTkzMjEsIDU5MzI2LCAKLSAgICA1OTMzMSwgNTkzMzgsIDU5MzQ1LCA1OTM0OSwgNTkzNTMsIDU5MzU3LCA1OTM2NSwgNTkzNzEsIDU5Mzc4LCA1OTM4MywgCi0gICAgNTkzODgsIDU5MzkzLCA1OTM5OCwgNTk0MDMsIDU5NDA4LCA1OTQxMywgNTk0MTgsIDU5NDIzLCA1OTQyOCwgNTk0MzMsIAotICAgIDU5NDM4LCA1OTQ0MywgNTk0NDgsIDU5NDU0LCA1OTQ1OSwgNTk0NjMsIDU5NDY5LCA1OTQ4MCwgNTk0OTAsIDU5NTA1LCAKLSAgICA1OTUxNSwgNTk1MTksIDU5NTI5LCA1OTUzNSwgNTk1NDEsIDU5NTQ3LCA1OTU1MiwgNTk1NTUsIDU5NTYwLCA1OTU2NCwgMCwgCi0gICAgNTk1NzAsIDU5NTc0LCA1OTU3NywgNTk1ODEsIDU5NTg0LCA1OTU4OCwgNTk1OTEsIDU5NTk1LCA1OTU5OCwgNTk2MDIsIAotICAgIDU5NjA1LCA1OTYwOCwgNTk2MTIsIDU5NjE2LCA1OTYyMCwgNTk2MjQsIDU5NjI4LCA1OTYzMiwgNTk2MzYsIDU5NjQwLCAKLSAgICA1OTY0NCwgNTk2NDcsIDU5NjUxLCA1OTY1NSwgNTk2NTksIDU5NjYzLCA1OTY2NywgNTk2NzEsIDU5Njc1LCA1OTY3OSwgCi0gICAgNTk2ODMsIDU5Njg3LCA1OTY5MSwgNTk2OTUsIDU5Njk5LCA1OTcwNCwgNTk3MDgsIDU5NzEyLCA1OTcxNiwgNTk3MjAsIAotICAgIDU5NzIzLCA1OTcyNywgNTk3MzAsIDU5NzM0LCA1OTczOCwgNTk3NDIsIDU5NzQ2LCA1OTc0OSwgNTk3NTMsIDU5NzU2LCAKLSAgICA1OTc2MCwgNTk3NjQsIDU5NzY4LCA1OTc3MiwgNTk3NzYsIDU5NzgwLCA1OTc4NCwgNTk3ODgsIDU5NzkyLCA1OTc5NiwgCi0gICAgNTk4MDAsIDU5ODA0LCA1OTgwNywgNTk4MTEsIDU5ODE1LCA1OTgxOSwgNTk4MjMsIDU5ODI3LCA1OTgzMCwgNTk4MzUsIAotICAgIDU5ODM5LCA1OTg0NCwgNTk4NDgsIDU5ODUxLCA1OTg1NSwgNTk4NTksIDU5ODYzLCA1OTg2NywgNTk4NzIsIDU5ODc2LCAKLSAgICA1OTg4MCwgNTk4ODQsIDU5ODg4LCA1OTg5MiwgNTk4OTYsIDU5OTAwLCAwLCAwLCA1OTkwNSwgNTk5MTMsIDU5OTIxLCAKLSAgICA1OTkyOCwgNTk5MzUsIDU5OTM5LCA1OTk0NSwgNTk5NTAsIDU5OTU1LCA1OTk1OSwgNTk5NjIsIDU5OTY2LCA1OTk2OSwgCi0gICAgNTk5NzMsIDU5OTc2LCA1OTk4MCwgNTk5ODMsIDU5OTg3LCA1OTk5MCwgNTk5OTMsIDU5OTk3LCA2MDAwMSwgNjAwMDUsIAotICAgIDYwMDA5LCA2MDAxMywgNjAwMTcsIDYwMDIxLCA2MDAyNSwgNjAwMjksIDYwMDMyLCA2MDAzNiwgNjAwNDAsIDYwMDQ0LCAKLSAgICA2MDA0OCwgNjAwNTIsIDYwMDU2LCA2MDA2MCwgNjAwNjQsIDYwMDY4LCA2MDA3MiwgNjAwNzYsIDYwMDgwLCA2MDA4NCwgCi0gICAgNjAwODksIDYwMDkzLCA2MDA5NywgNjAxMDEsIDYwMTA1LCA2MDEwOCwgNjAxMTIsIDYwMTE1LCA2MDExOSwgNjAxMjMsIAotICAgIDYwMTI3LCA2MDEzMSwgNjAxMzQsIDYwMTM4LCA2MDE0MSwgNjAxNDUsIDYwMTQ5LCA2MDE1MywgNjAxNTcsIDYwMTYxLCAKLSAgICA2MDE2NSwgNjAxNjksIDYwMTczLCA2MDE3NywgNjAxODEsIDYwMTg1LCA2MDE4OSwgNjAxOTIsIDYwMTk2LCA2MDIwMCwgCi0gICAgNjAyMDQsIDYwMjA4LCA2MDIxMiwgNjAyMTUsIDYwMjIwLCA2MDIyNCwgNjAyMjksIDYwMjMzLCA2MDIzNiwgNjAyNDAsIAotICAgIDYwMjQ0LCA2MDI0OCwgNjAyNTIsIDYwMjU3LCA2MDI2MSwgNjAyNjUsIDYwMjY5LCA2MDI3MywgNjAyNzcsIDYwMjgxLCAKLSAgICA2MDI4NSwgNjAyOTAsIDYwMjk0LCA2MDI5OCwgNjAzMDIsIDYwMzA2LCA2MDMxMSwgNjAzMTgsIDYwMzIyLCA2MDMyOCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgNjAzMzMsIDYwMzM4LCA2MDM0MywgNjAzNDcsIDYwMzUyLCA2MDM1NywgNjAzNjIsIDYwMzY3LCAKLSAgICA2MDM3MSwgNjAzNzYsIDYwMzgxLCA2MDM4NiwgNjAzOTEsIDYwMzk2LCA2MDQwMSwgNjA0MDYsIDYwNDExLCA2MDQxNiwgCi0gICAgNjA0MjAsIDYwNDI1LCA2MDQzMCwgNjA0MzUsIDYwNDM5LCA2MDQ0MywgNjA0NDcsIDYwNDUyLCA2MDQ1NywgNjA0NjIsIAotICAgIDYwNDY3LCA2MDQ3MiwgNjA0NzcsIDYwNDgyLCA2MDQ4NywgNjA0OTIsIDYwNDk3LCA2MDUwMSwgNjA1MDUsIDYwNTEwLCAKLSAgICA2MDUxNSwgNjA1MjAsIDYwNTI1LCAwLCAwLCAwLCA2MDUzMCwgNjA1MzQsIDYwNTM4LCA2MDU0MiwgNjA1NDYsIDYwNTUwLCAKLSAgICA2MDU1NCwgNjA1NTgsIDYwNTYyLCA2MDU2NiwgNjA1NzAsIDYwNTc0LCA2MDU3OCwgNjA1ODIsIDYwNTg2LCA2MDU5MCwgCi0gICAgNjA1OTQsIDYwNTk4LCA2MDYwMiwgNjA2MDYsIDYwNjEwLCA2MDYxNCwgNjA2MTgsIDYwNjIyLCA2MDYyNiwgNjA2MzAsIAotICAgIDYwNjM0LCA2MDYzOCwgNjA2NDIsIDYwNjQ2LCA2MDY1MCwgNjA2NTMsIDYwNjU3LCA2MDY2MCwgNjA2NjQsIDYwNjY4LCAKLSAgICA2MDY3MSwgNjA2NzUsIDYwNjc5LCA2MDY4MiwgNjA2ODYsIDYwNjkwLCA2MDY5NCwgNjA2OTgsIDYwNzAxLCA2MDcwNSwgCi0gICAgNjA3MDksIDYwNzEzLCA2MDcxNywgNjA3MjEsIDYwNzI1LCA2MDcyOCwgNjA3MzEsIDYwNzM1LCA2MDczOSwgNjA3NDMsIAotICAgIDYwNzQ3LCA2MDc1MSwgNjA3NTUsIDYwNzU5LCA2MDc2MywgNjA3NjcsIDYwNzcxLCA2MDc3NSwgNjA3NzksIDYwNzgzLCAKLSAgICA2MDc4NywgNjA3OTEsIDYwNzk1LCA2MDc5OSwgNjA4MDMsIDYwODA3LCA2MDgxMSwgNjA4MTUsIDYwODE5LCA2MDgyMywgCi0gICAgNjA4MjcsIDYwODMxLCA2MDgzNSwgNjA4MzksIDYwODQzLCA2MDg0NywgNjA4NTEsIDYwODU1LCA2MDg1OSwgNjA4NjMsIAotICAgIDYwODY3LCA2MDg3MSwgNjA4NzUsIDYwODc5LCA2MDg4MywgNjA4ODcsIDYwODkxLCA2MDg5NSwgMCwgNjA4OTksIDYwOTA1LCAKLSAgICA2MDkxMSwgNjA5MTYsIDYwOTIxLCA2MDkyNiwgNjA5MzIsIDYwOTM4LCA2MDk0NCwgNjA5NTAsIDYwOTU2LCA2MDk2MiwgCi0gICAgNjA5NjgsIDYwOTc0LCA2MDk4MCwgNjA5ODYsIDYwOTkyLCA2MDk5NywgNjEwMDIsIDYxMDA3LCA2MTAxMiwgNjEwMTcsIAotICAgIDYxMDIyLCA2MTAyNywgNjEwMzIsIDYxMDM3LCA2MTA0MiwgNjEwNDcsIDYxMDUyLCA2MTA1NywgNjEwNjIsIDYxMDY3LCAKLSAgICA2MTA3MiwgNjEwNzcsIDYxMDgyLCA2MTA4NywgNjEwOTIsIDYxMDk4LCA2MTEwNCwgNjExMTAsIDYxMTE2LCA2MTEyMSwgCi0gICAgNjExMjYsIDAsIDAsIDAsIDAsIDAsIDYxMTMxLCA2MTEzNiwgNjExNDEsIDYxMTQ2LCA2MTE1MSwgNjExNTYsIDYxMTYxLCAKLSAgICA2MTE2NiwgNjExNzEsIDYxMTc2LCA2MTE4MSwgNjExODYsIDYxMTkxLCA2MTE5NiwgNjEyMDEsIDYxMjA2LCA2MTIxMSwgCi0gICAgNjEyMTYsIDYxMjIxLCA2MTIyNiwgNjEyMzEsIDYxMjM2LCA2MTI0MSwgNjEyNDYsIDYxMjUxLCA2MTI1NiwgNjEyNjEsIAotICAgIDYxMjY2LCA2MTI3MSwgNjEyNzYsIDYxMjgxLCA2MTI4NiwgNjEyOTEsIDYxMjk2LCA2MTMwMSwgNjEzMDYsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYxMzExLCA2MTMxNiwgNjEzMjEsIDYxMzI2LCA2MTMzMCwgNjEzMzUsIAotICAgIDYxMzM5LCA2MTM0NCwgNjEzNDksIDYxMzU0LCA2MTM1OSwgNjEzNjQsIDYxMzY4LCA2MTM3MywgNjEzNzgsIDYxMzgzLCAKLSAgICA2MTM4OCwgNjEzOTIsIDYxMzk2LCA2MTQwMCwgNjE0MDQsIDYxNDA4LCA2MTQxMiwgNjE0MTYsIDYxNDIwLCA2MTQyNCwgCi0gICAgNjE0MjgsIDYxNDMyLCA2MTQzNiwgNjE0NDAsIDYxNDQ0LCA2MTQ0OSwgNjE0NTQsIDYxNDU5LCA2MTQ2NCwgNjE0NjksIAotICAgIDYxNDc0LCA2MTQ3OSwgNjE0ODQsIDYxNDg5LCA2MTQ5NCwgNjE0OTksIDYxNTA0LCA2MTUwOSwgNjE1MTQsIDYxNTE5LCAKLSAgICA2MTUyNSwgMCwgNjE1MzIsIDYxNTM1LCA2MTUzOCwgNjE1NDEsIDYxNTQ0LCA2MTU0NywgNjE1NTAsIDYxNTUzLCA2MTU1NiwgCi0gICAgNjE1NTksIDYxNTYzLCA2MTU2NywgNjE1NzEsIDYxNTc1LCA2MTU3OSwgNjE1ODMsIDYxNTg3LCA2MTU5MSwgNjE1OTUsIAotICAgIDYxNTk5LCA2MTYwMywgNjE2MDcsIDYxNjExLCA2MTYxNSwgNjE2MTksIDYxNjIzLCA2MTYyNywgNjE2MzEsIDYxNjM1LCAKLSAgICA2MTYzOSwgNjE2NDMsIDYxNjQ3LCA2MTY1MSwgNjE2NTUsIDYxNjU5LCA2MTY2MywgNjE2NjcsIDYxNjcxLCA2MTY3NSwgCi0gICAgNjE2NzksIDYxNjgzLCA2MTY5MiwgNjE3MDEsIDYxNzEwLCA2MTcxOSwgNjE3MjgsIDYxNzM3LCA2MTc0NiwgNjE3NTUsIAotICAgIDYxNzU4LCA2MTc2MywgNjE3NjgsIDYxNzczLCA2MTc3OCwgNjE3ODMsIDYxNzg4LCA2MTc5MywgNjE3OTgsIDYxODAzLCAKLSAgICA2MTgwNywgNjE4MTIsIDYxODE3LCA2MTgyMiwgNjE4MjcsIDYxODMyLCA2MTgzNiwgNjE4NDAsIDYxODQ0LCA2MTg0OCwgCi0gICAgNjE4NTIsIDYxODU2LCA2MTg2MCwgNjE4NjQsIDYxODY4LCA2MTg3MiwgNjE4NzYsIDYxODgwLCA2MTg4NCwgNjE4ODgsIAotICAgIDYxODkzLCA2MTg5OCwgNjE5MDMsIDYxOTA4LCA2MTkxMywgNjE5MTgsIDYxOTIzLCA2MTkyOCwgNjE5MzMsIDYxOTM4LCAKLSAgICA2MTk0MywgNjE5NDgsIDYxOTUzLCA2MTk1OCwgNjE5NjQsIDYxOTcwLCA2MTk3NSwgNjE5ODAsIDYxOTgzLCA2MTk4NiwgCi0gICAgNjE5ODksIDYxOTkyLCA2MTk5NSwgNjE5OTgsIDYyMDAxLCA2MjAwNCwgNjIwMDcsIDYyMDExLCA2MjAxNSwgNjIwMTksIAotICAgIDYyMDIzLCA2MjAyNywgNjIwMzEsIDYyMDM1LCA2MjAzOSwgNjIwNDMsIDYyMDQ3LCA2MjA1MSwgNjIwNTUsIDYyMDU5LCAKLSAgICA2MjA2MywgNjIwNjcsIDYyMDcxLCA2MjA3NSwgNjIwNzksIDYyMDgzLCA2MjA4NywgNjIwOTEsIDYyMDk1LCA2MjA5OSwgCi0gICAgNjIxMDMsIDYyMTA3LCA2MjExMSwgNjIxMTUsIDYyMTE5LCA2MjEyMywgNjIxMjcsIDYyMTMxLCA2MjEzNSwgNjIxMzksIAotICAgIDYyMTQzLCA2MjE0NywgNjIxNTEsIDYyMTU1LCA2MjE1OSwgNjIxNjMsIDYyMTY3LCA2MjE3MiwgNjIxNzcsIDYyMTgyLCAKLSAgICA2MjE4NywgNjIxOTEsIDYyMTk2LCA2MjIwMSwgNjIyMDYsIDYyMjExLCA2MjIxNiwgNjIyMjEsIDYyMjI2LCA2MjIzMSwgCi0gICAgNjIyMzYsIDYyMjQwLCA2MjI0NywgNjIyNTQsIDYyMjYxLCA2MjI2OCwgNjIyNzUsIDYyMjgyLCA2MjI4OSwgNjIyOTYsIAotICAgIDYyMzAzLCA2MjMxMCwgNjIzMTcsIDYyMzI0LCA2MjMyNywgNjIzMzAsIDYyMzMzLCA2MjMzOCwgNjIzNDEsIDYyMzQ0LCAKLSAgICA2MjM0NywgNjIzNTAsIDYyMzUzLCA2MjM1NiwgNjIzNjAsIDYyMzY0LCA2MjM2OCwgNjIzNzIsIDYyMzc1LCA2MjM3OSwgCi0gICAgNjIzODMsIDYyMzg3LCA2MjM5MSwgNjIzOTUsIDYyMzk5LCA2MjQwMywgNjI0MDcsIDYyNDEwLCA2MjQxMywgNjI0MTcsIAotICAgIDYyNDIxLCA2MjQyNSwgNjI0MjksIDYyNDMyLCA2MjQzNiwgNjI0NDAsIDYyNDQ0LCA2MjQ0OCwgNjI0NTEsIDYyNDU1LCAKLSAgICA2MjQ1OSwgNjI0NjMsIDYyNDY3LCA2MjQ3MCwgNjI0NzQsIDYyNDc4LCA2MjQ4MSwgNjI0ODUsIDYyNDg5LCA2MjQ5MywgCi0gICAgNjI0OTcsIDYyNTAxLCA2MjUwNSwgNjI1MDksIDAsIDYyNTEzLCA2MjUxNiwgNjI1MTksIDYyNTIyLCA2MjUyNSwgNjI1MjgsIAotICAgIDYyNTMxLCA2MjUzNCwgNjI1MzcsIDYyNTQwLCA2MjU0MywgNjI1NDYsIDYyNTQ5LCA2MjU1MiwgNjI1NTUsIDYyNTU4LCAKLSAgICA2MjU2MSwgNjI1NjQsIDYyNTY3LCA2MjU3MCwgNjI1NzMsIDYyNTc2LCA2MjU3OSwgNjI1ODIsIDYyNTg1LCA2MjU4OCwgCi0gICAgNjI1OTEsIDYyNTk0LCA2MjU5NywgNjI2MDAsIDYyNjAzLCA2MjYwNiwgNjI2MDksIDYyNjEyLCA2MjYxNSwgNjI2MTgsIAotICAgIDYyNjIxLCA2MjYyNCwgNjI2MjcsIDYyNjMwLCA2MjYzMywgNjI2MzYsIDYyNjM5LCA2MjY0MiwgNjI2NDUsIDYyNjQ4LCAKLSAgICA2MjY1MSwgNjI2NTQsIDYyNjU3LCA2MjY2MCwgNjI2NjMsIDYyNjY2LCA2MjY2OSwgNjI2NzIsIDYyNjc1LCA2MjY3OCwgCi0gICAgNjI2ODEsIDYyNjg0LCA2MjY4NywgNjI2OTAsIDYyNjkzLCA2MjY5NiwgNjI2OTksIDYyNzAyLCA2MjcwNSwgNjI3MDgsIAotICAgIDYyNzExLCA2MjcxNCwgNjI3MTcsIDYyNzIwLCA2MjcyMywgNjI3MjYsIDYyNzI5LCA2MjczMiwgNjI3MzUsIDYyNzM4LCAKLSAgICA2Mjc0MSwgNjI3NDQsIDYyNzQ3LCA2Mjc1MCwgNjI3NTMsIDYyNzU2LCA2Mjc1OSwgNjI3NjIsIDYyNzY1LCA2Mjc2OCwgCi0gICAgNjI3NzEsIDYyNzc0LCA2Mjc3NywgNjI3ODYsIDYyNzk0LCA2MjgwMiwgNjI4MTAsIDYyODE4LCA2MjgyNiwgNjI4MzQsIAotICAgIDYyODQyLCA2Mjg1MCwgNjI4NTgsIDYyODY3LCA2Mjg3NiwgNjI4ODUsIDYyODk0LCA2MjkwMywgNjI5MTIsIDYyOTIxLCAKLSAgICA2MjkzMCwgNjI5MzksIDYyOTQ4LCA2Mjk1NywgNjI5NjYsIDYyOTc1LCA2Mjk4NCwgNjI5OTMsIDYyOTk2LCA2Mjk5OSwgCi0gICAgNjMwMDIsIDYzMDA0LCA2MzAwNywgNjMwMTAsIDYzMDEzLCA2MzAxOCwgNjMwMjMsIDYzMDI2LCA2MzAzMywgNjMwNDAsIAotICAgIDYzMDQ3LCA2MzA1NCwgNjMwNTcsIDYzMDYyLCA2MzA2NCwgNjMwNjgsIDYzMDcwLCA2MzA3MiwgNjMwNzUsIDYzMDc4LCAKLSAgICA2MzA4MSwgNjMwODQsIDYzMDg3LCA2MzA5MCwgNjMwOTMsIDYzMDk4LCA2MzEwMywgNjMxMDYsIDYzMTA5LCA2MzExMiwgCi0gICAgNjMxMTUsIDYzMTE4LCA2MzEyMSwgNjMxMjQsIDYzMTI4LCA2MzEzMSwgNjMxMzQsIDYzMTM3LCA2MzE0MCwgNjMxNDMsIAotICAgIDYzMTQ3LCA2MzE1MCwgNjMxNTMsIDYzMTU2LCA2MzE2MSwgNjMxNjYsIDYzMTcxLCA2MzE3NiwgNjMxODEsIDYzMTg2LCAKLSAgICA2MzE5MSwgNjMxOTYsIDYzMjAyLCA2MzIxMCwgNjMyMTIsIDYzMjE1LCA2MzIxOCwgNjMyMjEsIDYzMjI0LCA2MzIzMCwgCi0gICAgNjMyMzgsIDYzMjQxLCA2MzI0NCwgNjMyNDksIDYzMjUyLCA2MzI1NSwgNjMyNTgsIDYzMjYzLCA2MzI2NiwgNjMyNjksIAotICAgIDYzMjc0LCA2MzI3NywgNjMyODAsIDYzMjg1LCA2MzI4OCwgNjMyOTEsIDYzMjk2LCA2MzMwMSwgNjMzMDYsIDYzMzA5LCAKLSAgICA2MzMxMiwgNjMzMTUsIDYzMzE4LCA2MzMyNCwgNjMzMjcsIDYzMzMwLCA2MzMzMywgNjMzMzUsIDYzMzM4LCA2MzM0MSwgCi0gICAgNjMzNDQsIDYzMzQ5LCA2MzM1MiwgNjMzNTUsIDYzMzU4LCA2MzM2MSwgNjMzNjQsIDYzMzY5LCA2MzM3MiwgNjMzNzUsIAotICAgIDYzMzc4LCA2MzM4MSwgNjMzODQsIDYzMzg3LCA2MzM5MCwgNjMzOTMsIDYzMzk2LCA2MzQwMSwgNjM0MDUsIDYzNDEzLCAKLSAgICA2MzQyMSwgNjM0MjksIDYzNDM3LCA2MzQ0NSwgNjM0NTMsIDYzNDYxLCA2MzQ2OSwgNjM0NzcsIDYzNDg2LCA2MzQ5NSwgCi0gICAgNjM1MDQsIDYzNTEzLCA2MzUyMiwgNjM1MzEsIDYzNTQwLCA2MzU0OSwgNjM1NTgsIDYzNTY3LCA2MzU3NiwgNjM1ODUsIAotICAgIDYzNTk0LCA2MzYwMywgNjM2MTIsIDYzNjIxLCA2MzYzMCwgNjM2MzksIDYzNjQ4LCA2MzY1NywgNjM2NjYsIDYzNjc1LCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NzY4MSwgNTc2ODUsIDU3Njg5LCA1NzY5NCwgNTc2OTksIDU3NzA0LCAKKyAgICA1NzcwOCwgNTc3MTIsIDU3NzE2LCA1NzcyMSwgNTc3MjYsIDU3NzMwLCA1NzczNCwgNTc3MzgsIDU3NzQyLCA1Nzc0NywgCisgICAgNTc3NTIsIDU3NzU3LCA1Nzc2MiwgNTc3NjYsIDU3NzcwLCA1Nzc3NSwgNTc3ODAsIDU3Nzg1LCA1Nzc5MCwgNTc3OTQsIDAsIAorICAgIDU3Nzk4LCA1NzgwMiwgNTc4MDYsIDU3ODEwLCA1NzgxNCwgNTc4MTgsIDU3ODIyLCA1NzgyNywgNTc4MzIsIDU3ODM2LCAKKyAgICA1Nzg0MSwgNTc4NDYsIDU3ODU1LCA1Nzg1OSwgNTc4NjMsIDU3ODY3LCA1Nzg3NCwgNTc4NzgsIDU3ODgzLCA1Nzg4OCwgCisgICAgNTc4OTIsIDU3ODk2LCA1NzkwMiwgNTc5MDcsIDU3OTEyLCA1NzkxNywgNTc5MjIsIDU3OTI2LCA1NzkzMCwgNTc5MzQsIAorICAgIDU3OTM4LCA1Nzk0MiwgNTc5NDcsIDU3OTUyLCA1Nzk1NiwgNTc5NjAsIDU3OTY1LCA1Nzk3MCwgNTc5NzUsIDU3OTc5LCAKKyAgICA1Nzk4MywgNTc5ODgsIDU3OTkzLCA1Nzk5OSwgNTgwMDUsIDU4MDA5LCA1ODAxNSwgNTgwMjEsIDU4MDI1LCA1ODAzMSwgCisgICAgNTgwMzcsIDU4MDQyLCA1ODA0NywgNTgwNTEsIDU4MDU3LCA1ODA2MSwgNTgwNjUsIDU4MDcxLCA1ODA3NywgNTgwODIsIAorICAgIDU4MDg3LCA1ODA5MSwgNTgwOTUsIDU4MTAzLCA1ODEwOSwgNTgxMTUsIDU4MTIxLCA1ODEyNiwgNTgxMzEsIDU4MTM2LCAKKyAgICA1ODE0MiwgNTgxNDYsIDU4MTUyLCA1ODE1NiwgNTgxNjAsIDU4MTY2LCA1ODE3MiwgNTgxNzgsIDU4MTg0LCA1ODE5MCwgCisgICAgNTgxOTYsIDU4MjAyLCA1ODIwOCwgNTgyMTQsIDU4MjIwLCA1ODIyNiwgNTgyMzIsIDU4MjM2LCA1ODI0MiwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNTgyNDgsIDU4MjUxLCA1ODI1NSwgNTgyNTksIDU4MjYzLCA1ODI2NywgCisgICAgNTgyNzAsIDU4MjczLCA1ODI3NywgNTgyODEsIDU4Mjg1LCA1ODI4OSwgNTgyOTIsIDU4Mjk3LCA1ODMwMSwgNTgzMDUsIAorICAgIDU4MzA5LCA1ODMxNCwgNTgzMTgsIDU4MzIyLCA1ODMyNiwgNTgzMzAsIDU4MzM2LCA1ODM0MiwgNTgzNDYsIDU4MzUwLCAKKyAgICA1ODM1NCwgNTgzNTgsIDU4MzYyLCA1ODM2NiwgNTgzNzAsIDU4Mzc0LCA1ODM3OCwgNTgzODIsIDU4Mzg2LCA1ODM5MiwgCisgICAgNTgzOTYsIDU4NDAwLCA1ODQwNCwgNTg0MDgsIDU4NDEyLCA1ODQxNiwgNTg0MjAsIDU4NDI0LCA1ODQyOCwgNTg0MzIsIAorICAgIDU4NDM2LCA1ODQ0MCwgNTg0NDQsIDU4NDQ4LCA1ODQ1MiwgNTg0NTYsIDU4NDYyLCA1ODQ2OCwgNTg0NzMsIDU4NDc4LCAKKyAgICA1ODQ4MiwgNTg0ODYsIDU4NDkwLCA1ODQ5NCwgNTg0OTgsIDU4NTAyLCA1ODUwNiwgNTg1MTAsIDU4NTE0LCA1ODUxOCwgCisgICAgNTg1MjIsIDU4NTI2LCA1ODUzMCwgNTg1MzQsIDU4NTM4LCA1ODU0MiwgNTg1NDYsIDU4NTUwLCA1ODU1NCwgNTg1NTgsIAorICAgIDU4NTYyLCA1ODU2NiwgNTg1NzAsIDU4NTc0LCA1ODU4MCwgNTg1ODQsIDU4NTg4LCA1ODU5MiwgNTg1OTYsIDU4NjAwLCAKKyAgICA1ODYwNCwgNTg2MDgsIDU4NjEyLCA1ODYxNywgNTg2MjQsIDU4NjI4LCA1ODYzMiwgNTg2MzYsIDU4NjQwLCA1ODY0NCwgCisgICAgNTg2NDgsIDU4NjUyLCA1ODY1NiwgNTg2NjAsIDU4NjY0LCA1ODY2OCwgNTg2NzIsIDU4Njc5LCA1ODY4MywgNTg2ODksIAorICAgIDU4NjkzLCA1ODY5NywgNTg3MDEsIDU4NzA1LCA1ODcwOSwgNTg3MTIsIDU4NzE2LCA1ODcyMCwgNTg3MjQsIDU4NzI4LCAKKyAgICA1ODczMiwgNTg3MzYsIDU4NzQwLCA1ODc0NCwgNTg3NDgsIDU4NzUyLCA1ODc1NiwgNTg3NjAsIDU4NzY0LCA1ODc2OCwgCisgICAgNTg3NzIsIDU4Nzc2LCA1ODc4MCwgNTg3ODQsIDU4Nzg4LCA1ODc5MiwgNTg3OTYsIDU4ODAwLCA1ODgwNCwgNTg4MDgsIAorICAgIDU4ODEyLCA1ODgxNiwgNTg4MjAsIDU4ODI0LCA1ODgyOCwgNTg4MzIsIDU4ODM2LCA1ODg0MCwgNTg4NDYsIDU4ODUwLCAKKyAgICA1ODg1NCwgNTg4NTgsIDU4ODYyLCA1ODg2NiwgNTg4NzAsIDU4ODc0LCA1ODg3OCwgNTg4ODIsIDU4ODg2LCA1ODg5MCwgCisgICAgNTg4OTQsIDU4ODk4LCA1ODkwMiwgNTg5MDYsIDU4OTEwLCA1ODkxNCwgNTg5MTgsIDU4OTIyLCA1ODkyNiwgNTg5MzAsIAorICAgIDU4OTM0LCA1ODkzOCwgNTg5NDIsIDU4OTQ2LCA1ODk1MCwgNTg5NTQsIDU4OTYyLCA1ODk2NiwgNTg5NzAsIDU4OTc0LCAKKyAgICA1ODk3OCwgNTg5ODIsIDU4OTg4LCA1ODk5MiwgNTg5OTYsIDU5MDAwLCA1OTAwNCwgNTkwMDgsIDU5MDEyLCA1OTAxNiwgCisgICAgNTkwMjAsIDU5MDI0LCA1OTAyOCwgNTkwMzIsIDU5MDM2LCA1OTA0MCwgNTkwNDYsIDU5MDUwLCA1OTA1NCwgNTkwNTgsIAorICAgIDU5MDYyLCA1OTA2NiwgNTkwNzAsIDU5MDc0LCA1OTA3OCwgNTkwODIsIDU5MDg2LCA1OTA5MCwgNTkwOTQsIDU5MDk4LCAKKyAgICA1OTEwMiwgNTkxMDYsIDU5MTEwLCA1OTExNCwgNTkxMTgsIDU5MTIyLCA1OTEyNiwgNTkxMzAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDU5MTM0LCA1OTE0MywgCisgICAgNTkxNTEsIDU5MTYzLCA1OTE3NCwgNTkxODIsIDU5MTkxLCA1OTIwMCwgNTkyMTAsIDU5MjIyLCA1OTIzNCwgNTkyNDYsIDAsIAorICAgIDAsIDAsIDAsIDU5MjUyLCA1OTI1NSwgNTkyNTgsIDU5MjYzLCA1OTI2NiwgNTkyNzMsIDU5Mjc3LCA1OTI4MSwgNTkyODUsIAorICAgIDU5Mjg5LCA1OTI5MywgNTkyOTgsIDU5MzAzLCA1OTMwNywgNTkzMTEsIDU5MzE2LCA1OTMyMSwgNTkzMjYsIDU5MzMxLCAKKyAgICA1OTMzNCwgNTkzMzcsIDU5MzQzLCA1OTM0OSwgNTkzNTQsIDU5MzU5LCA1OTM2NiwgNTkzNzMsIDU5Mzc3LCA1OTM4MSwgCisgICAgNTkzODUsIDU5MzkzLCA1OTM5OSwgNTk0MDYsIDU5NDExLCA1OTQxNiwgNTk0MjEsIDU5NDI2LCA1OTQzMSwgNTk0MzYsIAorICAgIDU5NDQxLCA1OTQ0NiwgNTk0NTEsIDU5NDU2LCA1OTQ2MSwgNTk0NjYsIDU5NDcxLCA1OTQ3NiwgNTk0ODIsIDU5NDg3LCAKKyAgICA1OTQ5MSwgNTk0OTcsIDU5NTA4LCA1OTUxOCwgNTk1MzMsIDU5NTQzLCA1OTU0NywgNTk1NTcsIDU5NTYzLCA1OTU2OSwgCisgICAgNTk1NzUsIDU5NTgwLCA1OTU4MywgNTk1ODgsIDU5NTkyLCAwLCA1OTU5OCwgNTk2MDIsIDU5NjA1LCA1OTYwOSwgNTk2MTIsIAorICAgIDU5NjE2LCA1OTYxOSwgNTk2MjMsIDU5NjI2LCA1OTYzMCwgNTk2MzMsIDU5NjM2LCA1OTY0MCwgNTk2NDQsIDU5NjQ4LCAKKyAgICA1OTY1MiwgNTk2NTYsIDU5NjYwLCA1OTY2NCwgNTk2NjgsIDU5NjcyLCA1OTY3NSwgNTk2NzksIDU5NjgzLCA1OTY4NywgCisgICAgNTk2OTEsIDU5Njk1LCA1OTY5OSwgNTk3MDMsIDU5NzA3LCA1OTcxMSwgNTk3MTUsIDU5NzE5LCA1OTcyMywgNTk3MjcsIAorICAgIDU5NzMyLCA1OTczNiwgNTk3NDAsIDU5NzQ0LCA1OTc0OCwgNTk3NTEsIDU5NzU1LCA1OTc1OCwgNTk3NjIsIDU5NzY2LCAKKyAgICA1OTc3MCwgNTk3NzQsIDU5Nzc3LCA1OTc4MSwgNTk3ODQsIDU5Nzg4LCA1OTc5MiwgNTk3OTYsIDU5ODAwLCA1OTgwNCwgCisgICAgNTk4MDgsIDU5ODEyLCA1OTgxNiwgNTk4MjAsIDU5ODI0LCA1OTgyOCwgNTk4MzIsIDU5ODM1LCA1OTgzOSwgNTk4NDMsIAorICAgIDU5ODQ3LCA1OTg1MSwgNTk4NTUsIDU5ODU4LCA1OTg2MywgNTk4NjcsIDU5ODcyLCA1OTg3NiwgNTk4NzksIDU5ODgzLCAKKyAgICA1OTg4NywgNTk4OTEsIDU5ODk1LCA1OTkwMCwgNTk5MDQsIDU5OTA4LCA1OTkxMiwgNTk5MTYsIDU5OTIwLCA1OTkyNCwgCisgICAgNTk5MjgsIDAsIDAsIDU5OTMzLCA1OTk0MSwgNTk5NDksIDU5OTU2LCA1OTk2MywgNTk5NjcsIDU5OTczLCA1OTk3OCwgCisgICAgNTk5ODMsIDU5OTg3LCA1OTk5MCwgNTk5OTQsIDU5OTk3LCA2MDAwMSwgNjAwMDQsIDYwMDA4LCA2MDAxMSwgNjAwMTUsIAorICAgIDYwMDE4LCA2MDAyMSwgNjAwMjUsIDYwMDI5LCA2MDAzMywgNjAwMzcsIDYwMDQxLCA2MDA0NSwgNjAwNDksIDYwMDUzLCAKKyAgICA2MDA1NywgNjAwNjAsIDYwMDY0LCA2MDA2OCwgNjAwNzIsIDYwMDc2LCA2MDA4MCwgNjAwODQsIDYwMDg4LCA2MDA5MiwgCisgICAgNjAwOTYsIDYwMTAwLCA2MDEwNCwgNjAxMDgsIDYwMTEyLCA2MDExNywgNjAxMjEsIDYwMTI1LCA2MDEyOSwgNjAxMzMsIAorICAgIDYwMTM2LCA2MDE0MCwgNjAxNDMsIDYwMTQ3LCA2MDE1MSwgNjAxNTUsIDYwMTU5LCA2MDE2MiwgNjAxNjYsIDYwMTY5LCAKKyAgICA2MDE3MywgNjAxNzcsIDYwMTgxLCA2MDE4NSwgNjAxODksIDYwMTkzLCA2MDE5NywgNjAyMDEsIDYwMjA1LCA2MDIwOSwgCisgICAgNjAyMTMsIDYwMjE3LCA2MDIyMCwgNjAyMjQsIDYwMjI4LCA2MDIzMiwgNjAyMzYsIDYwMjQwLCA2MDI0MywgNjAyNDgsIAorICAgIDYwMjUyLCA2MDI1NywgNjAyNjEsIDYwMjY0LCA2MDI2OCwgNjAyNzIsIDYwMjc2LCA2MDI4MCwgNjAyODUsIDYwMjg5LCAKKyAgICA2MDI5MywgNjAyOTcsIDYwMzAxLCA2MDMwNSwgNjAzMDksIDYwMzEzLCA2MDMxOCwgNjAzMjIsIDYwMzI2LCA2MDMzMCwgCisgICAgNjAzMzQsIDYwMzM5LCA2MDM0NiwgNjAzNTAsIDYwMzU2LCAwLCAwLCAwLCAwLCAwLCA2MDM2MSwgNjAzNjYsIDYwMzcxLCAKKyAgICA2MDM3NSwgNjAzODAsIDYwMzg1LCA2MDM5MCwgNjAzOTUsIDYwMzk5LCA2MDQwNCwgNjA0MDksIDYwNDE0LCA2MDQxOSwgCisgICAgNjA0MjQsIDYwNDI5LCA2MDQzNCwgNjA0MzksIDYwNDQ0LCA2MDQ0OCwgNjA0NTMsIDYwNDU4LCA2MDQ2MywgNjA0NjcsIAorICAgIDYwNDcxLCA2MDQ3NSwgNjA0ODAsIDYwNDg1LCA2MDQ5MCwgNjA0OTUsIDYwNTAwLCA2MDUwNSwgNjA1MTAsIDYwNTE1LCAKKyAgICA2MDUyMCwgNjA1MjUsIDYwNTI5LCA2MDUzMywgNjA1MzgsIDYwNTQzLCA2MDU0OCwgNjA1NTMsIDAsIDAsIDAsIDYwNTU4LCAKKyAgICA2MDU2MiwgNjA1NjYsIDYwNTcwLCA2MDU3NCwgNjA1NzgsIDYwNTgyLCA2MDU4NiwgNjA1OTAsIDYwNTk0LCA2MDU5OCwgCisgICAgNjA2MDIsIDYwNjA2LCA2MDYxMCwgNjA2MTQsIDYwNjE4LCA2MDYyMiwgNjA2MjYsIDYwNjMwLCA2MDYzNCwgNjA2MzgsIAorICAgIDYwNjQyLCA2MDY0NiwgNjA2NTAsIDYwNjU0LCA2MDY1OCwgNjA2NjIsIDYwNjY2LCA2MDY3MCwgNjA2NzQsIDYwNjc4LCAKKyAgICA2MDY4MSwgNjA2ODUsIDYwNjg4LCA2MDY5MiwgNjA2OTYsIDYwNjk5LCA2MDcwMywgNjA3MDcsIDYwNzEwLCA2MDcxNCwgCisgICAgNjA3MTgsIDYwNzIyLCA2MDcyNiwgNjA3MjksIDYwNzMzLCA2MDczNywgNjA3NDEsIDYwNzQ1LCA2MDc0OSwgNjA3NTMsIAorICAgIDYwNzU2LCA2MDc1OSwgNjA3NjMsIDYwNzY3LCA2MDc3MSwgNjA3NzUsIDYwNzc5LCA2MDc4MywgNjA3ODcsIDYwNzkxLCAKKyAgICA2MDc5NSwgNjA3OTksIDYwODAzLCA2MDgwNywgNjA4MTEsIDYwODE1LCA2MDgxOSwgNjA4MjMsIDYwODI3LCA2MDgzMSwgCisgICAgNjA4MzUsIDYwODM5LCA2MDg0MywgNjA4NDcsIDYwODUxLCA2MDg1NSwgNjA4NTksIDYwODYzLCA2MDg2NywgNjA4NzEsIAorICAgIDYwODc1LCA2MDg3OSwgNjA4ODMsIDYwODg3LCA2MDg5MSwgNjA4OTUsIDYwODk5LCA2MDkwMywgNjA5MDcsIDYwOTExLCAKKyAgICA2MDkxNSwgNjA5MTksIDYwOTIzLCAwLCA2MDkyNywgNjA5MzMsIDYwOTM5LCA2MDk0NCwgNjA5NDksIDYwOTU0LCA2MDk2MCwgCisgICAgNjA5NjYsIDYwOTcyLCA2MDk3OCwgNjA5ODQsIDYwOTkwLCA2MDk5NiwgNjEwMDIsIDYxMDA4LCA2MTAxNCwgNjEwMjAsIAorICAgIDYxMDI1LCA2MTAzMCwgNjEwMzUsIDYxMDQwLCA2MTA0NSwgNjEwNTAsIDYxMDU1LCA2MTA2MCwgNjEwNjUsIDYxMDcwLCAKKyAgICA2MTA3NSwgNjEwODAsIDYxMDg1LCA2MTA5MCwgNjEwOTUsIDYxMTAwLCA2MTEwNSwgNjExMTAsIDYxMTE1LCA2MTEyMCwgCisgICAgNjExMjYsIDYxMTMyLCA2MTEzOCwgNjExNDQsIDYxMTQ5LCA2MTE1NCwgMCwgMCwgMCwgMCwgMCwgNjExNTksIDYxMTY0LCAKKyAgICA2MTE2OSwgNjExNzQsIDYxMTc5LCA2MTE4NCwgNjExODksIDYxMTk0LCA2MTE5OSwgNjEyMDQsIDYxMjA5LCA2MTIxNCwgCisgICAgNjEyMTksIDYxMjI0LCA2MTIyOSwgNjEyMzQsIDYxMjM5LCA2MTI0NCwgNjEyNDksIDYxMjU0LCA2MTI1OSwgNjEyNjQsIAorICAgIDYxMjY5LCA2MTI3NCwgNjEyNzksIDYxMjg0LCA2MTI4OSwgNjEyOTQsIDYxMjk5LCA2MTMwNCwgNjEzMDksIDYxMzE0LCAKKyAgICA2MTMxOSwgNjEzMjQsIDYxMzI5LCA2MTMzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNjEzMzksIAorICAgIDYxMzQ0LCA2MTM0OSwgNjEzNTQsIDYxMzU4LCA2MTM2MywgNjEzNjcsIDYxMzcyLCA2MTM3NywgNjEzODIsIDYxMzg3LCAKKyAgICA2MTM5MiwgNjEzOTYsIDYxNDAxLCA2MTQwNiwgNjE0MTEsIDYxNDE2LCA2MTQyMCwgNjE0MjQsIDYxNDI4LCA2MTQzMiwgCisgICAgNjE0MzYsIDYxNDQwLCA2MTQ0NCwgNjE0NDgsIDYxNDUyLCA2MTQ1NiwgNjE0NjAsIDYxNDY0LCA2MTQ2OCwgNjE0NzIsIAorICAgIDYxNDc3LCA2MTQ4MiwgNjE0ODcsIDYxNDkyLCA2MTQ5NywgNjE1MDIsIDYxNTA3LCA2MTUxMiwgNjE1MTcsIDYxNTIyLCAKKyAgICA2MTUyNywgNjE1MzIsIDYxNTM3LCA2MTU0MiwgNjE1NDcsIDYxNTUzLCAwLCA2MTU2MCwgNjE1NjMsIDYxNTY2LCA2MTU2OSwgCisgICAgNjE1NzIsIDYxNTc1LCA2MTU3OCwgNjE1ODEsIDYxNTg0LCA2MTU4NywgNjE1OTEsIDYxNTk1LCA2MTU5OSwgNjE2MDMsIAorICAgIDYxNjA3LCA2MTYxMSwgNjE2MTUsIDYxNjE5LCA2MTYyMywgNjE2MjcsIDYxNjMxLCA2MTYzNSwgNjE2MzksIDYxNjQzLCAKKyAgICA2MTY0NywgNjE2NTEsIDYxNjU1LCA2MTY1OSwgNjE2NjMsIDYxNjY3LCA2MTY3MSwgNjE2NzUsIDYxNjc5LCA2MTY4MywgCisgICAgNjE2ODcsIDYxNjkxLCA2MTY5NSwgNjE2OTksIDYxNzAzLCA2MTcwNywgNjE3MTEsIDYxNzIwLCA2MTcyOSwgNjE3MzgsIAorICAgIDYxNzQ3LCA2MTc1NiwgNjE3NjUsIDYxNzc0LCA2MTc4MywgNjE3ODYsIDYxNzkxLCA2MTc5NiwgNjE4MDEsIDYxODA2LCAKKyAgICA2MTgxMSwgNjE4MTYsIDYxODIxLCA2MTgyNiwgNjE4MzEsIDYxODM1LCA2MTg0MCwgNjE4NDUsIDYxODUwLCA2MTg1NSwgCisgICAgNjE4NjAsIDYxODY0LCA2MTg2OCwgNjE4NzIsIDYxODc2LCA2MTg4MCwgNjE4ODQsIDYxODg4LCA2MTg5MiwgNjE4OTYsIAorICAgIDYxOTAwLCA2MTkwNCwgNjE5MDgsIDYxOTEyLCA2MTkxNiwgNjE5MjEsIDYxOTI2LCA2MTkzMSwgNjE5MzYsIDYxOTQxLCAKKyAgICA2MTk0NiwgNjE5NTEsIDYxOTU2LCA2MTk2MSwgNjE5NjYsIDYxOTcxLCA2MTk3NiwgNjE5ODEsIDYxOTg2LCA2MTk5MiwgCisgICAgNjE5OTgsIDYyMDAzLCA2MjAwOCwgNjIwMTEsIDYyMDE0LCA2MjAxNywgNjIwMjAsIDYyMDIzLCA2MjAyNiwgNjIwMjksIAorICAgIDYyMDMyLCA2MjAzNSwgNjIwMzksIDYyMDQzLCA2MjA0NywgNjIwNTEsIDYyMDU1LCA2MjA1OSwgNjIwNjMsIDYyMDY3LCAKKyAgICA2MjA3MSwgNjIwNzUsIDYyMDc5LCA2MjA4MywgNjIwODcsIDYyMDkxLCA2MjA5NSwgNjIwOTksIDYyMTAzLCA2MjEwNywgCisgICAgNjIxMTEsIDYyMTE1LCA2MjExOSwgNjIxMjMsIDYyMTI3LCA2MjEzMSwgNjIxMzUsIDYyMTM5LCA2MjE0MywgNjIxNDcsIAorICAgIDYyMTUxLCA2MjE1NSwgNjIxNTksIDYyMTYzLCA2MjE2NywgNjIxNzEsIDYyMTc1LCA2MjE3OSwgNjIxODMsIDYyMTg3LCAKKyAgICA2MjE5MSwgNjIxOTUsIDYyMjAwLCA2MjIwNSwgNjIyMTAsIDYyMjE1LCA2MjIxOSwgNjIyMjQsIDYyMjI5LCA2MjIzNCwgCisgICAgNjIyMzksIDYyMjQ0LCA2MjI0OSwgNjIyNTQsIDYyMjU5LCA2MjI2NCwgNjIyNjgsIDYyMjc1LCA2MjI4MiwgNjIyODksIAorICAgIDYyMjk2LCA2MjMwMywgNjIzMTAsIDYyMzE3LCA2MjMyNCwgNjIzMzEsIDYyMzM4LCA2MjM0NSwgNjIzNTIsIDYyMzU1LCAKKyAgICA2MjM1OCwgNjIzNjEsIDYyMzY2LCA2MjM2OSwgNjIzNzIsIDYyMzc1LCA2MjM3OCwgNjIzODEsIDYyMzg0LCA2MjM4OCwgCisgICAgNjIzOTIsIDYyMzk2LCA2MjQwMCwgNjI0MDMsIDYyNDA3LCA2MjQxMSwgNjI0MTUsIDYyNDE5LCA2MjQyMywgNjI0MjcsIAorICAgIDYyNDMxLCA2MjQzNSwgNjI0MzgsIDYyNDQxLCA2MjQ0NSwgNjI0NDksIDYyNDUzLCA2MjQ1NywgNjI0NjAsIDYyNDY0LCAKKyAgICA2MjQ2OCwgNjI0NzIsIDYyNDc2LCA2MjQ3OSwgNjI0ODMsIDYyNDg3LCA2MjQ5MSwgNjI0OTUsIDYyNDk4LCA2MjUwMiwgCisgICAgNjI1MDYsIDYyNTA5LCA2MjUxMywgNjI1MTcsIDYyNTIxLCA2MjUyNSwgNjI1MjksIDYyNTMzLCA2MjUzNywgMCwgNjI1NDEsIAorICAgIDYyNTQ0LCA2MjU0NywgNjI1NTAsIDYyNTUzLCA2MjU1NiwgNjI1NTksIDYyNTYyLCA2MjU2NSwgNjI1NjgsIDYyNTcxLCAKKyAgICA2MjU3NCwgNjI1NzcsIDYyNTgwLCA2MjU4MywgNjI1ODYsIDYyNTg5LCA2MjU5MiwgNjI1OTUsIDYyNTk4LCA2MjYwMSwgCisgICAgNjI2MDQsIDYyNjA3LCA2MjYxMCwgNjI2MTMsIDYyNjE2LCA2MjYxOSwgNjI2MjIsIDYyNjI1LCA2MjYyOCwgNjI2MzEsIAorICAgIDYyNjM0LCA2MjYzNywgNjI2NDAsIDYyNjQzLCA2MjY0NiwgNjI2NDksIDYyNjUyLCA2MjY1NSwgNjI2NTgsIDYyNjYxLCAKKyAgICA2MjY2NCwgNjI2NjcsIDYyNjcwLCA2MjY3MywgNjI2NzYsIDYyNjc5LCA2MjY4MiwgNjI2ODUsIDYyNjg4LCA2MjY5MSwgCisgICAgNjI2OTQsIDYyNjk3LCA2MjcwMCwgNjI3MDMsIDYyNzA2LCA2MjcwOSwgNjI3MTIsIDYyNzE1LCA2MjcxOCwgNjI3MjEsIAorICAgIDYyNzI0LCA2MjcyNywgNjI3MzAsIDYyNzMzLCA2MjczNiwgNjI3MzksIDYyNzQyLCA2Mjc0NSwgNjI3NDgsIDYyNzUxLCAKKyAgICA2Mjc1NCwgNjI3NTcsIDYyNzYwLCA2Mjc2MywgNjI3NjYsIDYyNzY5LCA2Mjc3MiwgNjI3NzUsIDYyNzc4LCA2Mjc4MSwgCisgICAgNjI3ODQsIDYyNzg3LCA2Mjc5MCwgNjI3OTMsIDYyNzk2LCA2Mjc5OSwgNjI4MDIsIDYyODA1LCA2MjgxNCwgNjI4MjIsIAorICAgIDYyODMwLCA2MjgzOCwgNjI4NDYsIDYyODU0LCA2Mjg2MiwgNjI4NzAsIDYyODc4LCA2Mjg4NiwgNjI4OTUsIDYyOTA0LCAKKyAgICA2MjkxMywgNjI5MjIsIDYyOTMxLCA2Mjk0MCwgNjI5NDksIDYyOTU4LCA2Mjk2NywgNjI5NzYsIDYyOTg1LCA2Mjk5NCwgCisgICAgNjMwMDMsIDYzMDEyLCA2MzAyMSwgNjMwMjQsIDYzMDI3LCA2MzAzMCwgNjMwMzIsIDYzMDM1LCA2MzAzOCwgNjMwNDEsIAorICAgIDYzMDQ2LCA2MzA1MSwgNjMwNTQsIDYzMDYxLCA2MzA2OCwgNjMwNzUsIDYzMDgyLCA2MzA4NSwgNjMwOTAsIDYzMDkyLCAKKyAgICA2MzA5NiwgNjMwOTgsIDYzMTAwLCA2MzEwMywgNjMxMDYsIDYzMTA5LCA2MzExMiwgNjMxMTUsIDYzMTE4LCA2MzEyMSwgCisgICAgNjMxMjYsIDYzMTMxLCA2MzEzNCwgNjMxMzcsIDYzMTQwLCA2MzE0MywgNjMxNDYsIDYzMTQ5LCA2MzE1MiwgNjMxNTYsIAorICAgIDYzMTU5LCA2MzE2MiwgNjMxNjUsIDYzMTY4LCA2MzE3MSwgNjMxNzUsIDYzMTc4LCA2MzE4MSwgNjMxODQsIDYzMTg5LCAKKyAgICA2MzE5NCwgNjMxOTksIDYzMjA0LCA2MzIwOSwgNjMyMTQsIDYzMjE5LCA2MzIyNCwgNjMyMzAsIDYzMjM4LCA2MzI0MCwgCisgICAgNjMyNDMsIDYzMjQ2LCA2MzI0OSwgNjMyNTIsIDYzMjU4LCA2MzI2NiwgNjMyNjksIDYzMjcyLCA2MzI3NywgNjMyODAsIAorICAgIDYzMjgzLCA2MzI4NiwgNjMyOTEsIDYzMjk0LCA2MzI5NywgNjMzMDIsIDYzMzA1LCA2MzMwOCwgNjMzMTMsIDYzMzE2LCAKKyAgICA2MzMxOSwgNjMzMjQsIDYzMzI5LCA2MzMzNCwgNjMzMzcsIDYzMzQwLCA2MzM0MywgNjMzNDYsIDYzMzUyLCA2MzM1NSwgCisgICAgNjMzNTgsIDYzMzYxLCA2MzM2MywgNjMzNjYsIDYzMzY5LCA2MzM3MiwgNjMzNzcsIDYzMzgwLCA2MzM4MywgNjMzODYsIAorICAgIDYzMzg5LCA2MzM5MiwgNjMzOTcsIDYzNDAwLCA2MzQwMywgNjM0MDYsIDYzNDA5LCA2MzQxMiwgNjM0MTUsIDYzNDE4LCAKKyAgICA2MzQyMSwgNjM0MjQsIDYzNDI5LCA2MzQzMywgNjM0NDEsIDYzNDQ5LCA2MzQ1NywgNjM0NjUsIDYzNDczLCA2MzQ4MSwgCisgICAgNjM0ODksIDYzNDk3LCA2MzUwNSwgNjM1MTQsIDYzNTIzLCA2MzUzMiwgNjM1NDEsIDYzNTUwLCA2MzU1OSwgNjM1NjgsIAorICAgIDYzNTc3LCA2MzU4NiwgNjM1OTUsIDYzNjA0LCA2MzYxMywgNjM2MjIsIDYzNjMxLCA2MzY0MCwgNjM2NDksIDYzNjU4LCAKKyAgICA2MzY2NywgNjM2NzYsIDYzNjg1LCA2MzY5NCwgNjM3MDMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDYzNjc4LCA2MzY4NywgNjM2OTYsIDYzNzA3LCAKLSAgICA2MzcxNCwgNjM3MTksIDYzNzI0LCA2MzczMSwgNjM3MzgsIDYzNzQ0LCA2Mzc0OSwgNjM3NTQsIDYzNzU5LCA2Mzc2NCwgCi0gICAgNjM3NzEsIDYzNzc2LCA2Mzc4MSwgNjM3ODYsIDYzNzk3LCA2MzgwMiwgNjM4MDcsIDYzODE0LCA2MzgxOSwgNjM4MjYsIAotICAgIDYzODMxLCA2MzgzNiwgNjM4NDMsIDYzODUwLCA2Mzg1NywgNjM4NjYsIDYzODc1LCA2Mzg4MCwgNjM4ODUsIDYzODkwLCAKLSAgICA2Mzg5NywgNjM5MDIsIDYzOTEyLCA2MzkxOSwgNjM5MjQsIDYzOTI5LCA2MzkzNCwgNjM5MzksIDYzOTQ0LCA2Mzk0OSwgCi0gICAgNjM5NTgsIDYzOTY1LCA2Mzk3MiwgNjM5NzcsIDYzOTg0LCA2Mzk4OSwgNjM5OTYsIDY0MDA1LCA2NDAxNiwgNjQwMjEsIAotICAgIDY0MDMwLCA2NDAzNSwgNjQwNDIsIDY0MDUxLCA2NDA2MCwgNjQwNjUsIDY0MDcwLCA2NDA3NywgNjQwODMsIDY0MDkwLCAKLSAgICA2NDA5NywgNjQxMDEsIDY0MTA1LCA2NDEwOCwgNjQxMTIsIDY0MTE2LCA2NDEyMCwgNjQxMjQsIDY0MTI4LCA2NDEzMiwgCi0gICAgNjQxMzYsIDY0MTM5LCA2NDE0MywgNjQxNDcsIDY0MTUxLCA2NDE1NSwgNjQxNTksIDY0MTYzLCA2NDE2NiwgNjQxNzAsIAotICAgIDY0MTc0LCA2NDE3NywgNjQxODEsIDY0MTg1LCA2NDE4OSwgNjQxOTMsIDY0MTk3LCA2NDIwMSwgNjQyMDUsIDY0MjA5LCAKLSAgICA2NDIxMywgNjQyMTcsIDY0MjIxLCA2NDIyNSwgNjQyMjksIDY0MjMzLCA2NDIzNywgNjQyNDEsIDY0MjQ1LCA2NDI0OSwgCi0gICAgNjQyNTMsIDY0MjU3LCA2NDI2MSwgNjQyNjUsIDY0MjY5LCA2NDI3MywgNjQyNzcsIDY0MjgxLCA2NDI4NSwgNjQyODksIAotICAgIDY0MjkzLCA2NDI5NywgNjQzMDEsIDY0MzA1LCA2NDMwOSwgNjQzMTMsIDY0MzE3LCA2NDMyMSwgNjQzMjUsIDY0MzI5LCAKLSAgICA2NDMzMywgNjQzMzcsIDY0MzQxLCA2NDM0NSwgNjQzNDksIDY0MzUzLCA2NDM1NiwgNjQzNjAsIDY0MzY0LCA2NDM2OCwgCi0gICAgNjQzNzIsIDY0Mzc2LCA2NDM4MCwgNjQzODQsIDY0Mzg4LCA2NDM5MiwgNjQzOTYsIDY0NDAwLCA2NDQwNCwgNjQ0MDgsIAotICAgIDY0NDEyLCA2NDQxNiwgNjQ0MjAsIDY0NDI0LCA2NDQyOCwgNjQ0MzIsIDY0NDM2LCA2NDQ0MCwgNjQ0NDQsIDY0NDQ4LCAKLSAgICA2NDQ1MiwgNjQ0NTYsIDY0NDYwLCA2NDQ2NCwgNjQ0NjgsIDY0NDcyLCA2NDQ3NiwgNjQ0ODAsIDY0NDg0LCA2NDQ4OCwgCi0gICAgNjQ0OTIsIDY0NDk2LCA2NDUwMCwgNjQ1MDQsIDY0NTA4LCA2NDUxMiwgNjQ1MTYsIDY0NTIwLCA2NDUyNCwgNjQ1MjgsIAotICAgIDY0NTMyLCA2NDUzNiwgNjQ1NDAsIDY0NTQ0LCA2NDU0OCwgNjQ1NTIsIDY0NTU2LCA2NDU2MCwgNjQ1NjQsIDY0NTY4LCAKLSAgICA2NDU3MiwgNjQ1NzYsIDY0NTgwLCA2NDU4NCwgNjQ1ODgsIDY0NTkyLCA2NDU5NiwgNjQ2MDAsIDY0NjA0LCA2NDYwOCwgCi0gICAgNjQ2MTIsIDY0NjE2LCA2NDYyMCwgNjQ2MjQsIDY0NjI4LCA2NDYzMiwgNjQ2MzYsIDY0NjQwLCA2NDY0NCwgNjQ2NDgsIAotICAgIDY0NjUyLCA2NDY1NiwgNjQ2NjAsIDY0NjY0LCA2NDY2OCwgNjQ2NzIsIDY0Njc2LCA2NDY4MCwgNjQ2ODQsIDY0Njg4LCAKLSAgICA2NDY5MiwgNjQ2OTYsIDY0NzAwLCA2NDcwNCwgNjQ3MDgsIDY0NzEyLCA2NDcxNiwgNjQ3MjAsIDY0NzI0LCA2NDcyOCwgCi0gICAgNjQ3MzIsIDY0NzM2LCA2NDc0MCwgNjQ3NDQsIDY0NzQ4LCA2NDc1MiwgNjQ3NTYsIDY0NzYwLCA2NDc2NCwgNjQ3NjgsIAotICAgIDY0NzcyLCA2NDc3NiwgNjQ3ODAsIDY0Nzg0LCA2NDc4OCwgNjQ3OTIsIDY0Nzk2LCA2NDgwMCwgNjQ4MDQsIDY0ODA4LCAKLSAgICA2NDgxMiwgNjQ4MTYsIDY0ODIwLCA2NDgyNCwgNjQ4MjcsIDY0ODMxLCA2NDgzNSwgNjQ4MzksIDY0ODQzLCA2NDg0NywgCi0gICAgNjQ4NTEsIDY0ODU1LCA2NDg1OSwgNjQ4NjMsIDY0ODY3LCA2NDg3MSwgNjQ4NzUsIDY0ODc5LCA2NDg4MywgNjQ4ODcsIAotICAgIDY0ODkxLCA2NDg5NSwgNjQ4OTksIDY0OTAzLCA2NDkwNywgNjQ5MTEsIDY0OTE1LCA2NDkxOSwgNjQ5MjMsIDY0OTI3LCAKLSAgICA2NDkzMSwgNjQ5MzUsIDY0OTM5LCA2NDk0MywgNjQ5NDcsIDY0OTUxLCA2NDk1NSwgNjQ5NTksIDY0OTYzLCA2NDk2NywgCi0gICAgNjQ5NzEsIDY0OTc1LCA2NDk3OSwgNjQ5ODMsIDY0OTg3LCA2NDk5MSwgNjQ5OTUsIDY0OTk5LCA2NTAwMywgNjUwMDcsIAotICAgIDY1MDExLCA2NTAxNSwgNjUwMTksIDY1MDIzLCA2NTAyNywgNjUwMzEsIDY1MDM1LCA2NTAzOSwgNjUwNDMsIDY1MDQ3LCAKLSAgICA2NTA1MSwgNjUwNTUsIDY1MDU5LCA2NTA2MywgNjUwNjcsIDY1MDcxLCA2NTA3NSwgNjUwNzksIDY1MDgzLCA2NTA4NywgCi0gICAgNjUwOTEsIDY1MDk1LCA2NTA5OSwgNjUxMDMsIDY1MTA3LCA2NTExMSwgNjUxMTUsIDY1MTE5LCA2NTEyMywgNjUxMjcsIAotICAgIDY1MTMxLCA2NTEzNSwgNjUxMzksIDY1MTQzLCA2NTE0NywgNjUxNTEsIDY1MTU1LCA2NTE1OSwgNjUxNjMsIDY1MTY3LCAKLSAgICA2NTE3MSwgNjUxNzUsIDY1MTc5LCA2NTE4MywgNjUxODcsIDY1MTkxLCA2NTE5NSwgNjUxOTksIDY1MjAzLCA2NTIwNywgCi0gICAgNjUyMTEsIDY1MjE1LCA2NTIxOSwgNjUyMjMsIDY1MjI3LCA2NTIzMSwgNjUyMzUsIDY1MjM5LCA2NTI0MywgNjUyNDcsIAotICAgIDY1MjUxLCA2NTI1NSwgNjUyNTksIDY1MjYzLCA2NTI2NywgNjUyNzEsIDY1Mjc1LCA2NTI3OSwgNjUyODMsIDY1Mjg3LCAKLSAgICA2NTI5MCwgNjUyOTQsIDY1Mjk4LCA2NTMwMiwgNjUzMDYsIDY1MzEwLCA2NTMxNCwgNjUzMTgsIDY1MzIyLCA2NTMyNiwgCi0gICAgNjUzMzAsIDY1MzM0LCA2NTMzOCwgNjUzNDIsIDY1MzQ2LCA2NTM1MCwgNjUzNTQsIDY1MzU4LCA2NTM2MiwgNjUzNjYsIAotICAgIDY1MzcwLCA2NTM3NCwgNjUzNzgsIDY1MzgyLCA2NTM4NiwgNjUzOTAsIDY1Mzk0LCA2NTM5OCwgNjU0MDIsIDY1NDA2LCAKLSAgICA2NTQxMCwgNjU0MTQsIDY1NDE4LCA2NTQyMiwgNjU0MjYsIDY1NDMwLCA2NTQzNCwgNjU0MzgsIDY1NDQyLCA2NTQ0NiwgCi0gICAgNjU0NTAsIDY1NDU0LCA2NTQ1OCwgNjU0NjIsIDY1NDY2LCA2NTQ3MCwgNjU0NzQsIDY1NDc4LCA2NTQ4MiwgNjU0ODYsIAotICAgIDY1NDkwLCA2NTQ5NCwgNjU0OTgsIDY1NTAyLCA2NTUwNiwgNjU1MTAsIDY1NTE0LCA2NTUxOCwgNjU1MjIsIDY1NTI2LCAKLSAgICA2NTUzMCwgNjU1MzQsIDY1NTM4LCA2NTU0MiwgNjU1NDYsIDY1NTUwLCA2NTU1NCwgNjU1NTgsIDY1NTYyLCA2NTU2NiwgCi0gICAgNjU1NzAsIDY1NTc0LCA2NTU3OCwgNjU1ODIsIDY1NTg2LCA2NTU5MCwgNjU1OTQsIDY1NTk4LCA2NTYwMiwgNjU2MDYsIAotICAgIDY1NjEwLCA2NTYxNCwgNjU2MTgsIDY1NjIyLCA2NTYyNiwgNjU2MzAsIDY1NjM0LCA2NTYzOCwgNjU2NDIsIDY1NjQ2LCAKLSAgICA2NTY0OSwgNjU2NTMsIDY1NjU3LCA2NTY2MSwgNjU2NjUsIDY1NjY5LCA2NTY3MywgNjU2NzcsIDY1NjgxLCA2NTY4NSwgCi0gICAgNjU2ODksIDY1NjkzLCA2NTY5NywgNjU3MDEsIDY1NzA1LCA2NTcwOSwgNjU3MTMsIDY1NzE3LCA2NTcyMSwgNjU3MjUsIAotICAgIDY1NzI5LCA2NTczMywgNjU3MzcsIDY1NzQxLCA2NTc0NSwgNjU3NDksIDY1NzUzLCA2NTc1NywgNjU3NjEsIDY1NzY1LCAKLSAgICA2NTc2OSwgNjU3NzMsIDY1Nzc3LCA2NTc4MSwgNjU3ODUsIDY1Nzg5LCA2NTc5MywgNjU3OTcsIDY1ODAxLCA2NTgwNSwgCi0gICAgNjU4MDksIDY1ODEzLCA2NTgxNywgNjU4MjEsIDY1ODI1LCA2NTgyOSwgNjU4MzMsIDY1ODM3LCA2NTg0MSwgNjU4NDUsIAotICAgIDY1ODQ5LCA2NTg1MywgNjU4NTcsIDY1ODYxLCA2NTg2NSwgNjU4NjksIDY1ODczLCA2NTg3NywgNjU4ODEsIDY1ODg1LCAKLSAgICA2NTg4OSwgNjU4OTMsIDY1ODk3LCA2NTkwMSwgNjU5MDUsIDY1OTA5LCA2NTkxMywgNjU5MTcsIDY1OTIxLCA2NTkyNSwgCi0gICAgNjU5MjksIDY1OTMzLCA2NTkzNywgNjU5NDEsIDY1OTQ1LCA2NTk0OSwgNjU5NTMsIDY1OTU3LCA2NTk2MSwgNjU5NjUsIAotICAgIDY1OTY5LCA2NTk3MywgNjU5NzcsIDY1OTgxLCA2NTk4NSwgNjU5ODksIDY1OTkzLCA2NTk5NywgNjYwMDEsIDY2MDA1LCAKLSAgICA2NjAwOSwgNjYwMTMsIDY2MDE3LCA2NjAyMSwgNjYwMjUsIDY2MDI5LCA2NjAzMywgNjYwMzcsIDY2MDQxLCA2NjA0NSwgCi0gICAgNjYwNDksIDY2MDUzLCA2NjA1NywgNjYwNjEsIDY2MDY1LCA2NjA2OSwgNjYwNzMsIDY2MDc3LCA2NjA4MSwgNjYwODUsIAotICAgIDY2MDg5LCA2NjA5MywgNjYwOTcsIDY2MTAxLCA2NjEwNSwgNjYxMDksIDY2MTEzLCA2NjExNywgNjYxMjEsIDY2MTI1LCAKLSAgICA2NjEyOSwgNjYxMzMsIDY2MTM3LCA2NjE0MSwgNjYxNDQsIDY2MTQ4LCA2NjE1MiwgNjYxNTYsIDY2MTYwLCA2NjE2NCwgCi0gICAgNjYxNjgsIDY2MTcyLCA2NjE3NiwgNjYxODAsIDY2MTg0LCA2NjE4OCwgNjYxOTIsIDY2MTk2LCA2NjIwMCwgNjYyMDQsIAotICAgIDY2MjA4LCA2NjIxMiwgNjYyMTYsIDY2MjIwLCA2NjIyNCwgNjYyMjgsIDY2MjMyLCA2NjIzNiwgNjYyNDAsIDY2MjQ0LCAKLSAgICA2NjI0OCwgNjYyNTIsIDY2MjU2LCA2NjI2MCwgNjYyNjQsIDY2MjY4LCA2NjI3MiwgNjYyNzYsIDY2MjgwLCA2NjI4NCwgCi0gICAgNjYyODgsIDY2MjkyLCA2NjI5NiwgNjYzMDAsIDY2MzA0LCA2NjMwOCwgNjYzMTIsIDY2MzE2LCA2NjMyMCwgNjYzMjQsIAotICAgIDY2MzI4LCA2NjMzMiwgNjYzMzYsIDY2MzQwLCA2NjM0NCwgNjYzNDgsIDY2MzUyLCA2NjM1NiwgNjYzNjAsIDY2MzY0LCAKLSAgICA2NjM2OCwgNjYzNzIsIDY2Mzc2LCA2NjM4MCwgNjYzODQsIDY2Mzg4LCA2NjM5MiwgNjYzOTYsIDY2NDAwLCA2NjQwNCwgCi0gICAgNjY0MDgsIDY2NDEyLCA2NjQxNiwgNjY0MjAsIDY2NDI0LCA2NjQyOCwgNjY0MzIsIDY2NDM2LCA2NjQ0MCwgNjY0NDQsIAotICAgIDY2NDQ4LCA2NjQ1MiwgNjY0NTYsIDY2NDYwLCA2NjQ2NCwgNjY0NjgsIDY2NDcyLCA2NjQ3NiwgNjY0ODAsIDY2NDg0LCAKLSAgICA2NjQ4OCwgNjY0OTIsIDY2NDk2LCA2NjUwMCwgNjY1MDQsIDY2NTA4LCA2NjUxMiwgNjY1MTYsIDY2NTIwLCA2NjUyNCwgCi0gICAgNjY1MjgsIDY2NTMyLCA2NjUzNiwgNjY1NDAsIDY2NTQ0LCA2NjU0OCwgNjY1NTIsIDY2NTU2LCA2NjU2MCwgNjY1NjQsIAotICAgIDY2NTY4LCA2NjU3MiwgNjY1NzYsIDY2NTgwLCA2NjU4NCwgNjY1ODgsIDY2NTkyLCA2NjU5NiwgNjY1OTksIDY2NjAzLCAKLSAgICA2NjYwNywgNjY2MTEsIDY2NjE1LCA2NjYxOSwgNjY2MjMsIDY2NjI3LCA2NjYzMSwgNjY2MzUsIDY2NjM5LCA2NjY0MywgCi0gICAgNjY2NDcsIDY2NjUxLCA2NjY1NSwgNjY2NTksIDY2NjYzLCA2NjY2NywgNjY2NzEsIDY2Njc1LCA2NjY3OSwgNjY2ODMsIAotICAgIDY2Njg3LCA2NjY5MSwgNjY2OTUsIDY2Njk5LCA2NjcwMywgNjY3MDcsIDY2NzExLCA2NjcxNSwgNjY3MTksIDY2NzIzLCAKLSAgICA2NjcyNywgNjY3MzEsIDY2NzM1LCA2NjczOSwgNjY3NDMsIDY2NzQ3LCA2Njc1MSwgNjY3NTUsIDY2NzU5LCA2Njc2MywgCi0gICAgNjY3NjcsIDY2NzcxLCA2Njc3NSwgNjY3NzksIDY2NzgzLCA2Njc4NywgNjY3OTEsIDY2Nzk1LCA2Njc5OSwgNjY4MDMsIAotICAgIDY2ODA3LCA2NjgxMSwgNjY4MTUsIDY2ODE5LCA2NjgyMywgNjY4MjcsIDY2ODMxLCA2NjgzNSwgNjY4MzksIDY2ODQzLCAKLSAgICA2Njg0NywgNjY4NTEsIDY2ODU1LCA2Njg1OSwgNjY4NjMsIDY2ODY3LCA2Njg3MSwgNjY4NzUsIDY2ODc5LCA2Njg4MywgCi0gICAgNjY4ODcsIDY2ODkxLCA2Njg5NSwgNjY4OTksIDY2OTAzLCA2NjkwNywgNjY5MTEsIDY2OTE1LCA2NjkxOSwgNjY5MjMsIAotICAgIDY2OTI3LCA2NjkzMSwgNjY5MzUsIDY2OTM5LCA2Njk0MywgNjY5NDcsIDY2OTUxLCA2Njk1NSwgNjY5NTksIDY2OTYzLCAKLSAgICA2Njk2NywgNjY5NzEsIDY2OTc1LCA2Njk3OSwgNjY5ODMsIDY2OTg3LCA2Njk5MSwgNjY5OTUsIDY2OTk5LCA2NzAwMywgCi0gICAgNjcwMDcsIDY3MDExLCA2NzAxNSwgNjcwMTksIDY3MDIzLCA2NzAyNywgNjcwMzEsIDY3MDM1LCA2NzAzOSwgNjcwNDMsIAotICAgIDY3MDQ3LCA2NzA1MSwgNjcwNTUsIDY3MDU5LCA2NzA2MywgNjcwNjcsIDY3MDcxLCA2NzA3NSwgNjcwNzksIDY3MDgzLCAKLSAgICA2NzA4NywgNjcwOTEsIDY3MDk1LCA2NzA5OSwgNjcxMDMsIDY3MTA3LCA2NzExMSwgNjcxMTUsIDY3MTE5LCA2NzEyMywgCi0gICAgNjcxMjcsIDY3MTMxLCA2NzEzNSwgNjcxMzksIDY3MTQzLCA2NzE0NywgNjcxNTEsIDY3MTU1LCA2NzE1OSwgNjcxNjMsIAotICAgIDY3MTY3LCA2NzE3MSwgNjcxNzUsIDY3MTc5LCA2NzE4MywgNjcxODcsIDY3MTkxLCA2NzE5NSwgNjcxOTksIDY3MjAyLCAKLSAgICA2NzIwNiwgNjcyMTAsIDY3MjE0LCA2NzIxOCwgNjcyMjIsIDY3MjI2LCA2NzIzMCwgNjcyMzMsIDY3MjM3LCA2NzI0MSwgCi0gICAgNjcyNDUsIDY3MjQ5LCA2NzI1MywgNjcyNTcsIDY3MjYxLCA2NzI2NSwgNjcyNjksIDY3MjczLCA2NzI3NywgNjcyODEsIAotICAgIDY3Mjg1LCA2NzI4OSwgNjcyOTMsIDY3Mjk3LCA2NzMwMSwgNjczMDUsIDY3MzA5LCA2NzMxMywgNjczMTcsIDY3MzIxLCAKLSAgICA2NzMyNSwgNjczMjksIDY3MzMzLCA2NzMzNywgNjczNDEsIDY3MzQ1LCA2NzM0OSwgNjczNTMsIDY3MzU3LCA2NzM2MSwgCi0gICAgNjczNjUsIDY3MzY5LCA2NzM3MywgNjczNzcsIDY3MzgxLCA2NzM4NSwgNjczODksIDY3MzkzLCA2NzM5NywgNjc0MDEsIAotICAgIDY3NDA1LCA2NzQwOSwgNjc0MTMsIDY3NDE3LCA2NzQyMSwgNjc0MjUsIDY3NDI5LCA2NzQzMywgNjc0MzcsIDY3NDQxLCAKLSAgICA2NzQ0NSwgNjc0NDksIDY3NDUzLCA2NzQ1NywgNjc0NjEsIDY3NDY1LCA2NzQ2OSwgNjc0NzMsIDY3NDc3LCA2NzQ4MSwgCi0gICAgNjc0ODUsIDY3NDg5LCA2NzQ5MywgNjc0OTcsIDY3NTAxLCA2NzUwNSwgNjc1MDksIDY3NTEzLCA2NzUxNywgNjc1MjEsIAotICAgIDY3NTI1LCA2NzUyOSwgNjc1MzMsIDY3NTM3LCA2NzU0MSwgNjc1NDUsIDY3NTQ5LCA2NzU1MywgNjc1NTcsIDY3NTYxLCAKLSAgICA2NzU2NSwgNjc1NjksIDY3NTczLCA2NzU3NywgNjc1ODEsIDY3NTg1LCA2NzU4OSwgNjc1OTMsIDY3NTk3LCA2NzYwMSwgCi0gICAgNjc2MDUsIDY3NjA5LCA2NzYxMywgNjc2MTcsIDY3NjIxLCA2NzYyNSwgNjc2MjksIDY3NjMzLCA2NzYzNywgNjc2NDEsIAotICAgIDY3NjQ1LCA2NzY0OSwgNjc2NTMsIDY3NjU3LCA2NzY2MSwgNjc2NjUsIDY3NjY5LCA2NzY3MywgNjc2NzcsIDY3NjgxLCAKLSAgICA2NzY4NSwgNjc2ODksIDY3NjkzLCA2NzY5NywgNjc3MDEsIDY3NzA1LCA2NzcwOSwgNjc3MTMsIDY3NzE3LCA2NzcyMSwgCi0gICAgNjc3MjUsIDY3NzI5LCA2NzczMywgNjc3MzcsIDY3NzQxLCA2Nzc0NSwgNjc3NDksIDY3NzUzLCA2Nzc1NywgNjc3NjEsIAotICAgIDY3NzY1LCA2Nzc2OSwgNjc3NzMsIDY3Nzc3LCA2Nzc4MSwgNjc3ODUsIDY3Nzg5LCA2Nzc5MywgNjc3OTcsIDY3ODAxLCAKLSAgICA2NzgwNSwgNjc4MDksIDY3ODEzLCA2NzgxNywgNjc4MjEsIDY3ODI1LCA2NzgyOSwgNjc4MzMsIDY3ODM3LCA2Nzg0MSwgCi0gICAgNjc4NDUsIDY3ODQ5LCA2Nzg1MywgNjc4NTcsIDY3ODYxLCA2Nzg2NSwgNjc4NjksIDY3ODczLCA2Nzg3NywgNjc4ODEsIAotICAgIDY3ODg1LCA2Nzg4OSwgNjc4OTMsIDY3ODk3LCA2NzkwMSwgNjc5MDUsIDY3OTA5LCA2NzkxMywgNjc5MTcsIDY3OTIxLCAKLSAgICA2NzkyNSwgNjc5MjksIDY3OTMzLCA2NzkzNywgNjc5NDEsIDY3OTQ1LCA2Nzk0OSwgNjc5NTMsIDY3OTU3LCA2Nzk2MCwgCi0gICAgNjc5NjQsIDY3OTY4LCA2Nzk3MiwgNjc5NzYsIDY3OTgwLCA2Nzk4NCwgNjc5ODgsIDY3OTkyLCA2Nzk5NiwgNjgwMDAsIAotICAgIDY4MDA0LCA2ODAwOCwgNjgwMTIsIDY4MDE2LCA2ODAyMCwgNjgwMjQsIDY4MDI4LCA2ODAzMiwgNjgwMzYsIDY4MDQwLCAKLSAgICA2ODA0NCwgNjgwNDgsIDY4MDUyLCA2ODA1NiwgNjgwNjAsIDY4MDY0LCA2ODA2OCwgNjgwNzIsIDY4MDc2LCA2ODA4MCwgCi0gICAgNjgwODQsIDY4MDg4LCA2ODA5MiwgNjgwOTYsIDY4MTAwLCA2ODEwNCwgNjgxMDgsIDY4MTEyLCA2ODExNiwgNjgxMjAsIAotICAgIDY4MTI0LCA2ODEyOCwgNjgxMzIsIDY4MTM2LCA2ODE0MCwgNjgxNDQsIDY4MTQ4LCA2ODE1MiwgNjgxNTYsIDY4MTYwLCAKLSAgICA2ODE2NCwgNjgxNjgsIDY4MTcyLCA2ODE3NiwgNjgxODAsIDY4MTg0LCA2ODE4OCwgNjgxOTIsIDY4MTk2LCA2ODIwMCwgCi0gICAgNjgyMDQsIDY4MjA4LCA2ODIxMiwgNjgyMTYsIDY4MjIwLCA2ODIyNCwgNjgyMjgsIDY4MjMyLCA2ODIzNiwgNjgyNDAsIAotICAgIDY4MjQ0LCA2ODI0OCwgNjgyNTIsIDY4MjU2LCA2ODI2MCwgNjgyNjQsIDY4MjY4LCA2ODI3MiwgNjgyNzYsIDY4MjgwLCAKLSAgICA2ODI4NCwgNjgyODgsIDY4MjkyLCA2ODI5NiwgNjgzMDAsIDY4MzA0LCA2ODMwOCwgNjgzMTIsIDY4MzE2LCA2ODMyMCwgCi0gICAgNjgzMjQsIDY4MzI4LCA2ODMzMiwgNjgzMzYsIDY4MzQwLCA2ODM0NCwgNjgzNDgsIDY4MzUyLCA2ODM1NiwgNjgzNjAsIAotICAgIDY4MzY0LCA2ODM2OCwgNjgzNzIsIDY4Mzc2LCA2ODM4MCwgNjgzODQsIDY4Mzg4LCA2ODM5MiwgNjgzOTYsIDY4NDAwLCAKLSAgICA2ODQwNCwgNjg0MDgsIDY4NDEyLCA2ODQxNiwgNjg0MjAsIDY4NDI0LCA2ODQyOCwgNjg0MzIsIDY4NDM2LCA2ODQ0MCwgCi0gICAgNjg0NDQsIDY4NDQ4LCA2ODQ1MiwgNjg0NTYsIDY4NDYwLCA2ODQ2NCwgNjg0NjgsIDY4NDcyLCA2ODQ3NiwgNjg0ODAsIAotICAgIDY4NDg0LCA2ODQ4OCwgNjg0OTIsIDY4NDk2LCA2ODUwMCwgNjg1MDQsIDY4NTA4LCA2ODUxMiwgNjg1MTYsIDY4NTIwLCAKLSAgICA2ODUyNCwgNjg1MjgsIDY4NTMyLCA2ODUzNiwgNjg1NDAsIDY4NTQ0LCA2ODU0OCwgNjg1NTIsIDY4NTU2LCA2ODU2MCwgCi0gICAgNjg1NjQsIDY4NTY4LCA2ODU3MiwgNjg1NzYsIDY4NTgwLCA2ODU4NCwgNjg1ODgsIDY4NTkyLCA2ODU5NiwgNjg2MDAsIAotICAgIDY4NjA0LCA2ODYwOCwgNjg2MTIsIDY4NjE2LCA2ODYyMCwgNjg2MjQsIDY4NjI4LCA2ODYzMiwgNjg2MzYsIDY4NjQwLCAKLSAgICA2ODY0NCwgNjg2NDgsIDY4NjUyLCA2ODY1NiwgNjg2NjAsIDY4NjY0LCA2ODY2OCwgNjg2NzIsIDY4Njc2LCA2ODY4MCwgCi0gICAgNjg2ODQsIDY4Njg4LCA2ODY5MiwgNjg2OTYsIDY4NzAwLCA2ODcwNCwgNjg3MDgsIDY4NzEyLCA2ODcxNiwgNjg3MjAsIAotICAgIDY4NzI0LCA2ODcyOCwgNjg3MzIsIDY4NzM2LCA2ODc0MCwgMCwgMCwgMCwgNjg3NDQsIDY4NzQ4LCA2ODc1MiwgNjg3NTYsIAotICAgIDY4NzYwLCA2ODc2NCwgNjg3NjgsIDY4NzcyLCA2ODc3NiwgNjg3ODAsIDY4Nzg0LCA2ODc4OCwgNjg3OTIsIDY4Nzk2LCAKLSAgICA2ODgwMCwgNjg4MDQsIDY4ODA4LCA2ODgxMiwgNjg4MTYsIDY4ODIwLCA2ODgyNCwgNjg4MjgsIDY4ODMyLCA2ODgzNiwgCi0gICAgNjg4NDAsIDY4ODQ0LCA2ODg0OCwgNjg4NTIsIDY4ODU2LCA2ODg2MCwgNjg4NjQsIDY4ODY4LCA2ODg3MiwgNjg4NzYsIAotICAgIDY4ODgwLCA2ODg4NCwgNjg4ODgsIDY4ODkyLCA2ODg5NiwgNjg5MDAsIDY4OTA0LCA2ODkwOCwgNjg5MTIsIDY4OTE2LCAKLSAgICA2ODkyMCwgNjg5MjQsIDY4OTI4LCA2ODkzMiwgNjg5MzYsIDY4OTQwLCA2ODk0NCwgNjg5NDgsIDY4OTUyLCA2ODk1NiwgCi0gICAgNjg5NjAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDY4OTY0LCA2ODk2OSwgNjg5NzMsIDY4OTc4LCA2ODk4MywgCi0gICAgNjg5ODgsIDY4OTkzLCA2ODk5OCwgNjkwMDIsIDY5MDA3LCA2OTAxMiwgNjkwMTcsIDY5MDIyLCA2OTAyNywgNjkwMzIsIAotICAgIDY5MDM3LCA2OTA0MSwgNjkwNDUsIDY5MDUwLCA2OTA1NCwgNjkwNTksIDY5MDY0LCA2OTA2OSwgNjkwNzMsIDY5MDc4LCAKLSAgICA2OTA4MywgNjkwODgsIDY5MDkzLCA2OTA5OCwgNjkxMDIsIDY5MTA3LCA2OTExMSwgNjkxMTYsIDY5MTIwLCA2OTEyNSwgCi0gICAgNjkxMjksIDY5MTMzLCA2OTEzNywgNjkxNDIsIDY5MTQ3LCA2OTE1MiwgNjkxNjAsIDY5MTY4LCA2OTE3NiwgNjkxODQsIAotICAgIDY5MTkxLCA2OTE5OSwgNjkyMDUsIDY5MjEzLCA2OTIxNywgNjkyMjEsIDY5MjI1LCA2OTIyOSwgNjkyMzMsIDY5MjM3LCAKLSAgICA2OTI0MSwgNjkyNDUsIDY5MjQ5LCA2OTI1MywgNjkyNTcsIDY5MjYxLCA2OTI2NSwgNjkyNjksIDY5MjczLCA2OTI3NywgCi0gICAgNjkyODEsIDY5Mjg1LCA2OTI4OSwgNjkyOTMsIDY5Mjk3LCA2OTMwMSwgNjkzMDUsIDY5MzA5LCA2OTMxMywgNjkzMTcsIAotICAgIDY5MzIxLCA2OTMyNSwgNjkzMjksIDY5MzMzLCA2OTMzNywgNjkzNDEsIDY5MzQ1LCA2OTM0OSwgNjkzNTMsIDY5MzU3LCAKLSAgICA2OTM2MCwgNjkzNjQsIDY5MzY4LCA2OTM3MiwgNjkzNzYsIDY5MzgwLCA2OTM4NCwgNjkzODgsIDY5MzkyLCA2OTM5NiwgCi0gICAgNjk0MDAsIDY5NDA0LCA2OTQwOCwgNjk0MTIsIDY5NDE2LCA2OTQyMCwgNjk0MjQsIDY5NDI4LCA2OTQzMiwgNjk0MzYsIAotICAgIDY5NDQwLCA2OTQ0NCwgNjk0NDgsIDY5NDUyLCA2OTQ1NiwgNjk0NjAsIDY5NDY0LCA2OTQ2OCwgNjk0NzIsIDY5NDc2LCAKLSAgICA2OTQ4MCwgNjk0ODQsIDY5NDg4LCA2OTQ5MiwgNjk0OTYsIDY5NTAwLCA2OTUwNCwgNjk1MDcsIDY5NTExLCA2OTUxNSwgCi0gICAgNjk1MTgsIDY5NTIyLCA2OTUyNiwgNjk1MzAsIDY5NTMzLCA2OTUzNywgNjk1NDEsIDY5NTQ1LCA2OTU0OSwgNjk1NTMsIAotICAgIDY5NTU3LCA2OTU2MSwgNjk1NjUsIDY5NTY5LCA2OTU3MywgNjk1NzcsIDY5NTgxLCA2OTU4NSwgNjk1ODksIDY5NTkyLCAKLSAgICA2OTU5NiwgNjk2MDAsIDY5NjAzLCA2OTYwNywgNjk2MTEsIDY5NjE1LCA2OTYxOSwgNjk2MjMsIDY5NjI3LCA2OTYzMCwgCi0gICAgNjk2MzMsIDY5NjM3LCA2OTY0MSwgNjk2NDUsIDY5NjQ4LCA2OTY1MSwgNjk2NTUsIDY5NjU5LCA2OTY2MywgNjk2NjcsIAotICAgIDY5NjcxLCA2OTY3NSwgNjk2NzksIDY5NjgzLCA2OTY4NywgNjk2OTEsIDY5Njk1LCA2OTY5OSwgNjk3MDMsIDY5NzA3LCAKLSAgICA2OTcxMSwgNjk3MTUsIDY5NzE5LCA2OTcyMywgNjk3MjcsIDY5NzMxLCA2OTczNSwgNjk3MzksIDY5NzQzLCA2OTc0NywgCi0gICAgNjk3NTEsIDY5NzU1LCA2OTc1OSwgNjk3NjMsIDY5NzY3LCA2OTc3MSwgNjk3NzUsIDY5Nzc5LCA2OTc4MywgNjk3ODcsIAotICAgIDY5NzkxLCA2OTc5NSwgNjk3OTksIDY5ODAyLCA2OTgwNiwgNjk4MTAsIDY5ODE0LCA2OTgxOCwgNjk4MjIsIDY5ODI2LCAKLSAgICA2OTgzMCwgNjk4MzQsIDY5ODM4LCA2OTg0MiwgNjk4NDYsIDY5ODUwLCA2OTg1NCwgNjk4NTgsIDY5ODYyLCA2OTg2NiwgCi0gICAgNjk4NzAsIDY5ODc0LCA2OTg3OCwgNjk4ODIsIDY5ODg2LCA2OTg5MCwgNjk4OTQsIDY5ODk4LCA2OTkwMiwgNjk5MDYsIAotICAgIDY5OTEwLCA2OTkxNCwgNjk5MTgsIDY5OTIyLCA2OTkyNiwgNjk5MzAsIDY5OTM0LCA2OTkzOCwgNjk5NDIsIDY5OTQ2LCAKLSAgICA2OTk0OSwgNjk5NTMsIDY5OTU3LCA2OTk2MSwgNjk5NjUsIDY5OTY5LCA2OTk3MywgNjk5NzcsIDY5OTgxLCA2OTk4NSwgCi0gICAgNjk5ODksIDY5OTkzLCA2OTk5NywgNzAwMDEsIDcwMDA1LCA3MDAwOSwgNzAwMTMsIDcwMDE2LCA3MDAyMCwgNzAwMjQsIAotICAgIDcwMDI4LCA3MDAzMiwgNzAwMzYsIDcwMDQwLCA3MDA0NCwgNzAwNDgsIDcwMDUyLCA3MDA1NiwgNzAwNjAsIDcwMDY0LCAKLSAgICA3MDA2OCwgNzAwNzIsIDcwMDc2LCA3MDA4MCwgNzAwODQsIDcwMDg4LCA3MDA5MiwgNzAwOTYsIDcwMTAwLCA3MDEwMywgCi0gICAgNzAxMDcsIDcwMTExLCA3MDExNSwgNzAxMTksIDcwMTIzLCA3MDEyNywgNzAxMzEsIDcwMTM1LCA3MDEzOSwgNzAxNDMsIAotICAgIDcwMTQ3LCA3MDE1MSwgNzAxNTUsIDcwMTU5LCA3MDE2MywgNzAxNjcsIDcwMTcxLCA3MDE3NSwgNzAxNzksIDcwMTgzLCAKLSAgICA3MDE4NywgNzAxOTEsIDcwMTk1LCA3MDE5OSwgNzAyMDMsIDcwMjA3LCA3MDIxMSwgNzAyMTUsIDcwMjE5LCA3MDIyMywgCi0gICAgNzAyMjcsIDcwMjMxLCA3MDIzNSwgNzAyMzksIDcwMjQzLCA3MDI0NywgNzAyNTEsIDcwMjU1LCA3MDI1OSwgNzAyNjMsIAotICAgIDcwMjY3LCA3MDI3MSwgNzAyNzUsIDcwMjc4LCA3MDI4MywgNzAyODcsIDcwMjkzLCA3MDI5OCwgNzAzMDQsIDcwMzA4LCAKLSAgICA3MDMxMiwgNzAzMTYsIDcwMzIwLCA3MDMyNCwgNzAzMjgsIDcwMzMyLCA3MDMzNiwgNzAzNDAsIDcwMzQ0LCA3MDM0OCwgCi0gICAgNzAzNTIsIDcwMzU2LCA3MDM2MCwgNzAzNjMsIDcwMzY2LCA3MDM2OSwgNzAzNzIsIDcwMzc1LCA3MDM3OCwgNzAzODEsIAotICAgIDcwMzg0LCA3MDM4NywgNzAzOTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDcwMzk4LCA3MDQwMywgNzA0MDgsIDcwNDEzLCA3MDQxOCwgNzA0MjUsIDcwNDMyLCA3MDQzNywgNzA0NDIsIAotICAgIDcwNDQ3LCA3MDQ1MiwgNzA0NTksIDcwNDY2LCA3MDQ3MywgNzA0ODAsIDcwNDg3LCA3MDQ5NCwgNzA1MDQsIDcwNTE0LCAKLSAgICA3MDUyMSwgNzA1MjgsIDcwNTM1LCA3MDU0MiwgNzA1NDgsIDcwNTU0LCA3MDU2MywgNzA1NzIsIDcwNTc5LCA3MDU4NiwgCi0gICAgNzA1OTcsIDcwNjA4LCA3MDYxMywgNzA2MTgsIDcwNjI1LCA3MDYzMiwgNzA2MzksIDcwNjQ2LCA3MDY1MywgNzA2NjAsIAotICAgIDcwNjY3LCA3MDY3NCwgNzA2ODAsIDcwNjg2LCA3MDY5MiwgNzA2OTgsIDcwNzA1LCA3MDcxMiwgNzA3MTcsIDcwNzIxLCAKLSAgICA3MDcyOCwgNzA3MzUsIDcwNzQyLCA3MDc0NiwgNzA3NTMsIDcwNzU3LCA3MDc2MiwgNzA3NjYsIDcwNzcyLCA3MDc3NywgCi0gICAgNzA3ODMsIDcwNzg4LCA3MDc5MiwgNzA3OTYsIDcwNzk5LCA3MDgwMiwgNzA4MDcsIDcwODEyLCA3MDgxNywgNzA4MjIsIAotICAgIDcwODI3LCA3MDgzMiwgNzA4MzcsIDcwODQyLCA3MDg0NywgNzA4NTIsIDcwODYxLCA3MDg3MCwgNzA4NzUsIDcwODgwLCAKLSAgICA3MDg4NSwgNzA4OTAsIDcwODk1LCA3MDkwMCwgNzA5MDUsIDcwOTEwLCA3MDkxNSwgNzA5MjAsIDcwOTI1LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3MDkzMCwgNzA5MzYsIDcwOTM5LCA3MDk0MiwgNzA5NDUsIDcwOTQ5LCA3MDk1MywgNzA5NTcsIAotICAgIDcwOTYxLCA3MDk2NCwgNzA5NjgsIDcwOTcxLCA3MDk3NSwgNzA5NzgsIDcwOTgyLCA3MDk4NiwgNzA5OTAsIDcwOTk0LCAKLSAgICA3MDk5OCwgNzEwMDIsIDcxMDA2LCA3MTAwOSwgNzEwMTMsIDcxMDE3LCA3MTAyMSwgNzEwMjUsIDcxMDI5LCA3MTAzMywgCi0gICAgNzEwMzcsIDcxMDQxLCA3MTA0NSwgNzEwNDksIDcxMDUzLCA3MTA1NywgNzEwNjEsIDcxMDY1LCA3MTA2OCwgNzEwNzIsIAotICAgIDcxMDc2LCA3MTA4MCwgNzEwODQsIDcxMDg4LCA3MTA5MiwgNzEwOTYsIDcxMTAwLCA3MTEwNCwgNzExMDgsIDcxMTEyLCAKLSAgICA3MTExNiwgNzExMjAsIDcxMTI0LCA3MTEyOCwgNzExMzIsIDcxMTM2LCA3MTE0MCwgNzExNDQsIDcxMTQ4LCA3MTE1MiwgCi0gICAgNzExNTYsIDcxMTYwLCA3MTE2NCwgNzExNjcsIDcxMTcxLCA3MTE3NSwgNzExNzksIDcxMTgzLCA3MTE4NywgNzExOTEsIAotICAgIDcxMTk1LCA3MTE5OCwgNzEyMDIsIDcxMjA2LCA3MTIxMCwgNzEyMTQsIDcxMjE4LCA3MTIyMiwgNzEyMjYsIDcxMjMwLCAKLSAgICA3MTIzNCwgNzEyMzgsIDcxMjQyLCA3MTI0NiwgNzEyNTEsIDcxMjU2LCA3MTI1OSwgNzEyNjQsIDcxMjY3LCA3MTI3MCwgCi0gICAgNzEyNzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcxMjc3LCA3MTI4NiwgNzEyOTUsIDcxMzA0LCA3MTMxMywgNzEzMjIsIAotICAgIDcxMzMxLCA3MTM0MCwgNzEzNDksIDcxMzU3LCA3MTM2NCwgNzEzNzIsIDcxMzc5LCA3MTM4NywgNzEzOTcsIDcxNDA2LCAKLSAgICA3MTQxNiwgNzE0MjUsIDcxNDM1LCA3MTQ0MywgNzE0NTAsIDcxNDU4LCA3MTQ2NSwgNzE0NzMsIDcxNDc4LCA3MTQ4MywgCi0gICAgNzE0ODgsIDcxNDk3LCA3MTUwMywgNzE1MDksIDcxNTE2LCA3MTUyNSwgNzE1MzMsIDcxNTQxLCA3MTU0OSwgNzE1NTYsIAotICAgIDcxNTYzLCA3MTU3MCwgNzE1NzcsIDcxNTgyLCA3MTU4NywgNzE1OTIsIDcxNTk3LCA3MTYwMiwgNzE2MDcsIDcxNjEyLCAKLSAgICA3MTYxNywgNzE2MjUsIDcxNjMzLCA3MTYzOSwgNzE2NDUsIDcxNjUwLCA3MTY1NSwgNzE2NjAsIDcxNjY1LCA3MTY3MCwgCi0gICAgNzE2NzUsIDcxNjgwLCA3MTY4NSwgNzE2OTMsIDcxNzAxLCA3MTcwNiwgNzE3MTEsIDcxNzIxLCA3MTczMSwgNzE3MzgsIAotICAgIDcxNzQ1LCA3MTc1NCwgNzE3NjMsIDcxNzc1LCA3MTc4NywgNzE3OTMsIDcxNzk5LCA3MTgwNywgNzE4MTUsIDcxODI1LCAKLSAgICA3MTgzNSwgNzE4NDIsIDcxODQ5LCA3MTg1NCwgNzE4NTksIDcxODcxLCA3MTg4MywgNzE4OTEsIDcxODk5LCA3MTkwOSwgCi0gICAgNzE5MTksIDcxOTMxLCA3MTk0MywgNzE5NTIsIDcxOTYxLCA3MTk2OCwgNzE5NzUsIDcxOTgyLCA3MTk4OSwgNzE5OTgsIAotICAgIDcyMDA3LCA3MjAxMiwgNzIwMTcsIDcyMDI0LCA3MjAzMSwgNzIwMzgsIDcyMDQ1LCA3MjA1NywgNzIwNjksIDcyMDc0LCAKLSAgICA3MjA3OSwgNzIwODQsIDcyMDg5LCA3MjA5NCwgNzIwOTksIDcyMTA0LCA3MjEwOSwgNzIxMTMsIDcyMTE4LCA3MjEyMywgCi0gICAgNzIxMjgsIDcyMTMzLCA3MjEzOCwgNzIxNDQsIDcyMTQ5LCA3MjE1NCwgNzIxNjEsIDcyMTY4LCA3MjE3NSwgNzIxODIsIAotICAgIDcyMTg5LCA3MjE5OCwgNzIyMDcsIDcyMjEzLCA3MjIxOSwgNzIyMjUsIDcyMjMxLCA3MjIzOCwgNzIyNDUsIDcyMjUyLCAKLSAgICA3MjI1OSwgNzIyNjYsIDcyMjcwLCA3MjI3NywgNzIyODIsIDcyMjg3LCA3MjI5NCwgMCwgNzIzMDcsIDcyMzE1LCA3MjMyMywgCi0gICAgNzIzMzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcyMzM3LCA3MjM0NiwgNzIzNTUsIDcyMzY0LCAKLSAgICA3MjM3MywgNzIzODIsIDcyMzkxLCA3MjQwMCwgNzI0MDksIDcyNDE4LCA3MjQyNywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNjM3MDYsIDYzNzE1LCA2MzcyNCwgNjM3MzUsIDYzNzQyLCA2Mzc0NywgNjM3NTIsIDYzNzU5LCA2Mzc2NiwgCisgICAgNjM3NzIsIDYzNzc3LCA2Mzc4MiwgNjM3ODcsIDYzNzkyLCA2Mzc5OSwgNjM4MDQsIDYzODA5LCA2MzgxNCwgNjM4MjUsIAorICAgIDYzODMwLCA2MzgzNSwgNjM4NDIsIDYzODQ3LCA2Mzg1NCwgNjM4NTksIDYzODY0LCA2Mzg3MSwgNjM4NzgsIDYzODg1LCAKKyAgICA2Mzg5NCwgNjM5MDMsIDYzOTA4LCA2MzkxMywgNjM5MTgsIDYzOTI1LCA2MzkzMCwgNjM5NDAsIDYzOTQ3LCA2Mzk1MiwgCisgICAgNjM5NTcsIDYzOTYyLCA2Mzk2NywgNjM5NzIsIDYzOTc3LCA2Mzk4NiwgNjM5OTMsIDY0MDAwLCA2NDAwNSwgNjQwMTIsIAorICAgIDY0MDE3LCA2NDAyNCwgNjQwMzMsIDY0MDQ0LCA2NDA0OSwgNjQwNTgsIDY0MDYzLCA2NDA3MCwgNjQwNzksIDY0MDg4LCAKKyAgICA2NDA5MywgNjQwOTgsIDY0MTA1LCA2NDExMSwgNjQxMTgsIDY0MTI1LCA2NDEyOSwgNjQxMzMsIDY0MTM2LCA2NDE0MCwgCisgICAgNjQxNDQsIDY0MTQ4LCA2NDE1MiwgNjQxNTYsIDY0MTYwLCA2NDE2NCwgNjQxNjcsIDY0MTcxLCA2NDE3NSwgNjQxNzksIAorICAgIDY0MTgzLCA2NDE4NywgNjQxOTEsIDY0MTk0LCA2NDE5OCwgNjQyMDIsIDY0MjA1LCA2NDIwOSwgNjQyMTMsIDY0MjE3LCAKKyAgICA2NDIyMSwgNjQyMjUsIDY0MjI5LCA2NDIzMywgNjQyMzcsIDY0MjQxLCA2NDI0NSwgNjQyNDksIDY0MjUzLCA2NDI1NywgCisgICAgNjQyNjEsIDY0MjY1LCA2NDI2OSwgNjQyNzMsIDY0Mjc3LCA2NDI4MSwgNjQyODUsIDY0Mjg5LCA2NDI5MywgNjQyOTcsIAorICAgIDY0MzAxLCA2NDMwNSwgNjQzMDksIDY0MzEzLCA2NDMxNywgNjQzMjEsIDY0MzI1LCA2NDMyOSwgNjQzMzMsIDY0MzM3LCAKKyAgICA2NDM0MSwgNjQzNDUsIDY0MzQ5LCA2NDM1MywgNjQzNTcsIDY0MzYxLCA2NDM2NSwgNjQzNjksIDY0MzczLCA2NDM3NywgCisgICAgNjQzODEsIDY0Mzg0LCA2NDM4OCwgNjQzOTIsIDY0Mzk2LCA2NDQwMCwgNjQ0MDQsIDY0NDA4LCA2NDQxMiwgNjQ0MTYsIAorICAgIDY0NDIwLCA2NDQyNCwgNjQ0MjgsIDY0NDMyLCA2NDQzNiwgNjQ0NDAsIDY0NDQ0LCA2NDQ0OCwgNjQ0NTIsIDY0NDU2LCAKKyAgICA2NDQ2MCwgNjQ0NjQsIDY0NDY4LCA2NDQ3MiwgNjQ0NzYsIDY0NDgwLCA2NDQ4NCwgNjQ0ODgsIDY0NDkyLCA2NDQ5NiwgCisgICAgNjQ1MDAsIDY0NTA0LCA2NDUwOCwgNjQ1MTIsIDY0NTE2LCA2NDUyMCwgNjQ1MjQsIDY0NTI4LCA2NDUzMiwgNjQ1MzYsIAorICAgIDY0NTQwLCA2NDU0NCwgNjQ1NDgsIDY0NTUyLCA2NDU1NiwgNjQ1NjAsIDY0NTY0LCA2NDU2OCwgNjQ1NzIsIDY0NTc2LCAKKyAgICA2NDU4MCwgNjQ1ODQsIDY0NTg4LCA2NDU5MiwgNjQ1OTYsIDY0NjAwLCA2NDYwNCwgNjQ2MDgsIDY0NjEyLCA2NDYxNiwgCisgICAgNjQ2MjAsIDY0NjI0LCA2NDYyOCwgNjQ2MzIsIDY0NjM2LCA2NDY0MCwgNjQ2NDQsIDY0NjQ4LCA2NDY1MiwgNjQ2NTYsIAorICAgIDY0NjYwLCA2NDY2NCwgNjQ2NjgsIDY0NjcyLCA2NDY3NiwgNjQ2ODAsIDY0Njg0LCA2NDY4OCwgNjQ2OTIsIDY0Njk2LCAKKyAgICA2NDcwMCwgNjQ3MDQsIDY0NzA4LCA2NDcxMiwgNjQ3MTYsIDY0NzIwLCA2NDcyNCwgNjQ3MjgsIDY0NzMyLCA2NDczNiwgCisgICAgNjQ3NDAsIDY0NzQ0LCA2NDc0OCwgNjQ3NTIsIDY0NzU2LCA2NDc2MCwgNjQ3NjQsIDY0NzY4LCA2NDc3MiwgNjQ3NzYsIAorICAgIDY0NzgwLCA2NDc4NCwgNjQ3ODgsIDY0NzkyLCA2NDc5NiwgNjQ4MDAsIDY0ODA0LCA2NDgwOCwgNjQ4MTIsIDY0ODE2LCAKKyAgICA2NDgyMCwgNjQ4MjQsIDY0ODI4LCA2NDgzMiwgNjQ4MzYsIDY0ODQwLCA2NDg0NCwgNjQ4NDgsIDY0ODUyLCA2NDg1NSwgCisgICAgNjQ4NTksIDY0ODYzLCA2NDg2NywgNjQ4NzEsIDY0ODc1LCA2NDg3OSwgNjQ4ODMsIDY0ODg3LCA2NDg5MSwgNjQ4OTUsIAorICAgIDY0ODk5LCA2NDkwMywgNjQ5MDcsIDY0OTExLCA2NDkxNSwgNjQ5MTksIDY0OTIzLCA2NDkyNywgNjQ5MzEsIDY0OTM1LCAKKyAgICA2NDkzOSwgNjQ5NDMsIDY0OTQ3LCA2NDk1MSwgNjQ5NTUsIDY0OTU5LCA2NDk2MywgNjQ5NjcsIDY0OTcxLCA2NDk3NSwgCisgICAgNjQ5NzksIDY0OTgzLCA2NDk4NywgNjQ5OTEsIDY0OTk1LCA2NDk5OSwgNjUwMDMsIDY1MDA3LCA2NTAxMSwgNjUwMTUsIAorICAgIDY1MDE5LCA2NTAyMywgNjUwMjcsIDY1MDMxLCA2NTAzNSwgNjUwMzksIDY1MDQzLCA2NTA0NywgNjUwNTEsIDY1MDU1LCAKKyAgICA2NTA1OSwgNjUwNjMsIDY1MDY3LCA2NTA3MSwgNjUwNzUsIDY1MDc5LCA2NTA4MywgNjUwODcsIDY1MDkxLCA2NTA5NSwgCisgICAgNjUwOTksIDY1MTAzLCA2NTEwNywgNjUxMTEsIDY1MTE1LCA2NTExOSwgNjUxMjMsIDY1MTI3LCA2NTEzMSwgNjUxMzUsIAorICAgIDY1MTM5LCA2NTE0MywgNjUxNDcsIDY1MTUxLCA2NTE1NSwgNjUxNTksIDY1MTYzLCA2NTE2NywgNjUxNzEsIDY1MTc1LCAKKyAgICA2NTE3OSwgNjUxODMsIDY1MTg3LCA2NTE5MSwgNjUxOTUsIDY1MTk5LCA2NTIwMywgNjUyMDcsIDY1MjExLCA2NTIxNSwgCisgICAgNjUyMTksIDY1MjIzLCA2NTIyNywgNjUyMzEsIDY1MjM1LCA2NTIzOSwgNjUyNDMsIDY1MjQ3LCA2NTI1MSwgNjUyNTUsIAorICAgIDY1MjU5LCA2NTI2MywgNjUyNjcsIDY1MjcxLCA2NTI3NSwgNjUyNzksIDY1MjgzLCA2NTI4NywgNjUyOTEsIDY1Mjk1LCAKKyAgICA2NTI5OSwgNjUzMDMsIDY1MzA3LCA2NTMxMSwgNjUzMTUsIDY1MzE4LCA2NTMyMiwgNjUzMjYsIDY1MzMwLCA2NTMzNCwgCisgICAgNjUzMzgsIDY1MzQyLCA2NTM0NiwgNjUzNTAsIDY1MzU0LCA2NTM1OCwgNjUzNjIsIDY1MzY2LCA2NTM3MCwgNjUzNzQsIAorICAgIDY1Mzc4LCA2NTM4MiwgNjUzODYsIDY1MzkwLCA2NTM5NCwgNjUzOTgsIDY1NDAyLCA2NTQwNiwgNjU0MTAsIDY1NDE0LCAKKyAgICA2NTQxOCwgNjU0MjIsIDY1NDI2LCA2NTQzMCwgNjU0MzQsIDY1NDM4LCA2NTQ0MiwgNjU0NDYsIDY1NDUwLCA2NTQ1NCwgCisgICAgNjU0NTgsIDY1NDYyLCA2NTQ2NiwgNjU0NzAsIDY1NDc0LCA2NTQ3OCwgNjU0ODIsIDY1NDg2LCA2NTQ5MCwgNjU0OTQsIAorICAgIDY1NDk4LCA2NTUwMiwgNjU1MDYsIDY1NTEwLCA2NTUxNCwgNjU1MTgsIDY1NTIyLCA2NTUyNiwgNjU1MzAsIDY1NTM0LCAKKyAgICA2NTUzOCwgNjU1NDIsIDY1NTQ2LCA2NTU1MCwgNjU1NTQsIDY1NTU4LCA2NTU2MiwgNjU1NjYsIDY1NTcwLCA2NTU3NCwgCisgICAgNjU1NzgsIDY1NTgyLCA2NTU4NiwgNjU1OTAsIDY1NTk0LCA2NTU5OCwgNjU2MDIsIDY1NjA2LCA2NTYxMCwgNjU2MTQsIAorICAgIDY1NjE4LCA2NTYyMiwgNjU2MjYsIDY1NjMwLCA2NTYzNCwgNjU2MzgsIDY1NjQyLCA2NTY0NiwgNjU2NTAsIDY1NjU0LCAKKyAgICA2NTY1OCwgNjU2NjIsIDY1NjY2LCA2NTY3MCwgNjU2NzQsIDY1Njc3LCA2NTY4MSwgNjU2ODUsIDY1Njg5LCA2NTY5MywgCisgICAgNjU2OTcsIDY1NzAxLCA2NTcwNSwgNjU3MDksIDY1NzEzLCA2NTcxNywgNjU3MjEsIDY1NzI1LCA2NTcyOSwgNjU3MzMsIAorICAgIDY1NzM3LCA2NTc0MSwgNjU3NDUsIDY1NzQ5LCA2NTc1MywgNjU3NTcsIDY1NzYxLCA2NTc2NSwgNjU3NjksIDY1NzczLCAKKyAgICA2NTc3NywgNjU3ODEsIDY1Nzg1LCA2NTc4OSwgNjU3OTMsIDY1Nzk3LCA2NTgwMSwgNjU4MDUsIDY1ODA5LCA2NTgxMywgCisgICAgNjU4MTcsIDY1ODIxLCA2NTgyNSwgNjU4MjksIDY1ODMzLCA2NTgzNywgNjU4NDEsIDY1ODQ1LCA2NTg0OSwgNjU4NTMsIAorICAgIDY1ODU3LCA2NTg2MSwgNjU4NjUsIDY1ODY5LCA2NTg3MywgNjU4NzcsIDY1ODgxLCA2NTg4NSwgNjU4ODksIDY1ODkzLCAKKyAgICA2NTg5NywgNjU5MDEsIDY1OTA1LCA2NTkwOSwgNjU5MTMsIDY1OTE3LCA2NTkyMSwgNjU5MjUsIDY1OTI5LCA2NTkzMywgCisgICAgNjU5MzcsIDY1OTQxLCA2NTk0NSwgNjU5NDksIDY1OTUzLCA2NTk1NywgNjU5NjEsIDY1OTY1LCA2NTk2OSwgNjU5NzMsIAorICAgIDY1OTc3LCA2NTk4MSwgNjU5ODUsIDY1OTg5LCA2NTk5MywgNjU5OTcsIDY2MDAxLCA2NjAwNSwgNjYwMDksIDY2MDEzLCAKKyAgICA2NjAxNywgNjYwMjEsIDY2MDI1LCA2NjAyOSwgNjYwMzMsIDY2MDM3LCA2NjA0MSwgNjYwNDUsIDY2MDQ5LCA2NjA1MywgCisgICAgNjYwNTcsIDY2MDYxLCA2NjA2NSwgNjYwNjksIDY2MDczLCA2NjA3NywgNjYwODEsIDY2MDg1LCA2NjA4OSwgNjYwOTMsIAorICAgIDY2MDk3LCA2NjEwMSwgNjYxMDUsIDY2MTA5LCA2NjExMywgNjYxMTcsIDY2MTIxLCA2NjEyNSwgNjYxMjksIDY2MTMzLCAKKyAgICA2NjEzNywgNjYxNDEsIDY2MTQ1LCA2NjE0OSwgNjYxNTMsIDY2MTU3LCA2NjE2MSwgNjYxNjUsIDY2MTY5LCA2NjE3MiwgCisgICAgNjYxNzYsIDY2MTgwLCA2NjE4NCwgNjYxODgsIDY2MTkyLCA2NjE5NiwgNjYyMDAsIDY2MjA0LCA2NjIwOCwgNjYyMTIsIAorICAgIDY2MjE2LCA2NjIyMCwgNjYyMjQsIDY2MjI4LCA2NjIzMiwgNjYyMzYsIDY2MjQwLCA2NjI0NCwgNjYyNDgsIDY2MjUyLCAKKyAgICA2NjI1NiwgNjYyNjAsIDY2MjY0LCA2NjI2OCwgNjYyNzIsIDY2Mjc2LCA2NjI4MCwgNjYyODQsIDY2Mjg4LCA2NjI5MiwgCisgICAgNjYyOTYsIDY2MzAwLCA2NjMwNCwgNjYzMDgsIDY2MzEyLCA2NjMxNiwgNjYzMjAsIDY2MzI0LCA2NjMyOCwgNjYzMzIsIAorICAgIDY2MzM2LCA2NjM0MCwgNjYzNDQsIDY2MzQ4LCA2NjM1MiwgNjYzNTYsIDY2MzYwLCA2NjM2NCwgNjYzNjgsIDY2MzcyLCAKKyAgICA2NjM3NiwgNjYzODAsIDY2Mzg0LCA2NjM4OCwgNjYzOTIsIDY2Mzk2LCA2NjQwMCwgNjY0MDQsIDY2NDA4LCA2NjQxMiwgCisgICAgNjY0MTYsIDY2NDIwLCA2NjQyNCwgNjY0MjgsIDY2NDMyLCA2NjQzNiwgNjY0NDAsIDY2NDQ0LCA2NjQ0OCwgNjY0NTIsIAorICAgIDY2NDU2LCA2NjQ2MCwgNjY0NjQsIDY2NDY4LCA2NjQ3MiwgNjY0NzYsIDY2NDgwLCA2NjQ4NCwgNjY0ODgsIDY2NDkyLCAKKyAgICA2NjQ5NiwgNjY1MDAsIDY2NTA0LCA2NjUwOCwgNjY1MTIsIDY2NTE2LCA2NjUyMCwgNjY1MjQsIDY2NTI4LCA2NjUzMiwgCisgICAgNjY1MzYsIDY2NTQwLCA2NjU0NCwgNjY1NDgsIDY2NTUyLCA2NjU1NiwgNjY1NjAsIDY2NTY0LCA2NjU2OCwgNjY1NzIsIAorICAgIDY2NTc2LCA2NjU4MCwgNjY1ODQsIDY2NTg4LCA2NjU5MiwgNjY1OTYsIDY2NjAwLCA2NjYwNCwgNjY2MDgsIDY2NjEyLCAKKyAgICA2NjYxNiwgNjY2MjAsIDY2NjI0LCA2NjYyNywgNjY2MzEsIDY2NjM1LCA2NjYzOSwgNjY2NDMsIDY2NjQ3LCA2NjY1MSwgCisgICAgNjY2NTUsIDY2NjU5LCA2NjY2MywgNjY2NjcsIDY2NjcxLCA2NjY3NSwgNjY2NzksIDY2NjgzLCA2NjY4NywgNjY2OTEsIAorICAgIDY2Njk1LCA2NjY5OSwgNjY3MDMsIDY2NzA3LCA2NjcxMSwgNjY3MTUsIDY2NzE5LCA2NjcyMywgNjY3MjcsIDY2NzMxLCAKKyAgICA2NjczNSwgNjY3MzksIDY2NzQzLCA2Njc0NywgNjY3NTEsIDY2NzU1LCA2Njc1OSwgNjY3NjMsIDY2NzY3LCA2Njc3MSwgCisgICAgNjY3NzUsIDY2Nzc5LCA2Njc4MywgNjY3ODcsIDY2NzkxLCA2Njc5NSwgNjY3OTksIDY2ODAzLCA2NjgwNywgNjY4MTEsIAorICAgIDY2ODE1LCA2NjgxOSwgNjY4MjMsIDY2ODI3LCA2NjgzMSwgNjY4MzUsIDY2ODM5LCA2Njg0MywgNjY4NDcsIDY2ODUxLCAKKyAgICA2Njg1NSwgNjY4NTksIDY2ODYzLCA2Njg2NywgNjY4NzEsIDY2ODc1LCA2Njg3OSwgNjY4ODMsIDY2ODg3LCA2Njg5MSwgCisgICAgNjY4OTUsIDY2ODk5LCA2NjkwMywgNjY5MDcsIDY2OTExLCA2NjkxNSwgNjY5MTksIDY2OTIzLCA2NjkyNywgNjY5MzEsIAorICAgIDY2OTM1LCA2NjkzOSwgNjY5NDMsIDY2OTQ3LCA2Njk1MSwgNjY5NTUsIDY2OTU5LCA2Njk2MywgNjY5NjcsIDY2OTcxLCAKKyAgICA2Njk3NSwgNjY5NzksIDY2OTgzLCA2Njk4NywgNjY5OTEsIDY2OTk1LCA2Njk5OSwgNjcwMDMsIDY3MDA3LCA2NzAxMSwgCisgICAgNjcwMTUsIDY3MDE5LCA2NzAyMywgNjcwMjcsIDY3MDMxLCA2NzAzNSwgNjcwMzksIDY3MDQzLCA2NzA0NywgNjcwNTEsIAorICAgIDY3MDU1LCA2NzA1OSwgNjcwNjMsIDY3MDY3LCA2NzA3MSwgNjcwNzUsIDY3MDc5LCA2NzA4MywgNjcwODcsIDY3MDkxLCAKKyAgICA2NzA5NSwgNjcwOTksIDY3MTAzLCA2NzEwNywgNjcxMTEsIDY3MTE1LCA2NzExOSwgNjcxMjMsIDY3MTI3LCA2NzEzMSwgCisgICAgNjcxMzUsIDY3MTM5LCA2NzE0MywgNjcxNDcsIDY3MTUxLCA2NzE1NSwgNjcxNTksIDY3MTYzLCA2NzE2NywgNjcxNzEsIAorICAgIDY3MTc1LCA2NzE3OSwgNjcxODMsIDY3MTg3LCA2NzE5MSwgNjcxOTUsIDY3MTk5LCA2NzIwMywgNjcyMDcsIDY3MjExLCAKKyAgICA2NzIxNSwgNjcyMTksIDY3MjIzLCA2NzIyNywgNjcyMzAsIDY3MjM0LCA2NzIzOCwgNjcyNDIsIDY3MjQ2LCA2NzI1MCwgCisgICAgNjcyNTQsIDY3MjU4LCA2NzI2MSwgNjcyNjUsIDY3MjY5LCA2NzI3MywgNjcyNzcsIDY3MjgxLCA2NzI4NSwgNjcyODksIAorICAgIDY3MjkzLCA2NzI5NywgNjczMDEsIDY3MzA1LCA2NzMwOSwgNjczMTMsIDY3MzE3LCA2NzMyMSwgNjczMjUsIDY3MzI5LCAKKyAgICA2NzMzMywgNjczMzcsIDY3MzQxLCA2NzM0NSwgNjczNDksIDY3MzUzLCA2NzM1NywgNjczNjEsIDY3MzY1LCA2NzM2OSwgCisgICAgNjczNzMsIDY3Mzc3LCA2NzM4MSwgNjczODUsIDY3Mzg5LCA2NzM5MywgNjczOTcsIDY3NDAxLCA2NzQwNSwgNjc0MDksIAorICAgIDY3NDEzLCA2NzQxNywgNjc0MjEsIDY3NDI1LCA2NzQyOSwgNjc0MzMsIDY3NDM3LCA2NzQ0MSwgNjc0NDUsIDY3NDQ5LCAKKyAgICA2NzQ1MywgNjc0NTcsIDY3NDYxLCA2NzQ2NSwgNjc0NjksIDY3NDczLCA2NzQ3NywgNjc0ODEsIDY3NDg1LCA2NzQ4OSwgCisgICAgNjc0OTMsIDY3NDk3LCA2NzUwMSwgNjc1MDUsIDY3NTA5LCA2NzUxMywgNjc1MTcsIDY3NTIxLCA2NzUyNSwgNjc1MjksIAorICAgIDY3NTMzLCA2NzUzNywgNjc1NDEsIDY3NTQ1LCA2NzU0OSwgNjc1NTMsIDY3NTU3LCA2NzU2MSwgNjc1NjUsIDY3NTY5LCAKKyAgICA2NzU3MywgNjc1NzcsIDY3NTgxLCA2NzU4NSwgNjc1ODksIDY3NTkzLCA2NzU5NywgNjc2MDEsIDY3NjA1LCA2NzYwOSwgCisgICAgNjc2MTMsIDY3NjE3LCA2NzYyMSwgNjc2MjUsIDY3NjI5LCA2NzYzMywgNjc2MzcsIDY3NjQxLCA2NzY0NSwgNjc2NDksIAorICAgIDY3NjUzLCA2NzY1NywgNjc2NjEsIDY3NjY1LCA2NzY2OSwgNjc2NzMsIDY3Njc3LCA2NzY4MSwgNjc2ODUsIDY3Njg5LCAKKyAgICA2NzY5MywgNjc2OTcsIDY3NzAxLCA2NzcwNSwgNjc3MDksIDY3NzEzLCA2NzcxNywgNjc3MjEsIDY3NzI1LCA2NzcyOSwgCisgICAgNjc3MzMsIDY3NzM3LCA2Nzc0MSwgNjc3NDUsIDY3NzQ5LCA2Nzc1MywgNjc3NTcsIDY3NzYxLCA2Nzc2NSwgNjc3NjksIAorICAgIDY3NzczLCA2Nzc3NywgNjc3ODEsIDY3Nzg1LCA2Nzc4OSwgNjc3OTMsIDY3Nzk3LCA2NzgwMSwgNjc4MDUsIDY3ODA5LCAKKyAgICA2NzgxMywgNjc4MTcsIDY3ODIxLCA2NzgyNSwgNjc4MjksIDY3ODMzLCA2NzgzNywgNjc4NDEsIDY3ODQ1LCA2Nzg0OSwgCisgICAgNjc4NTMsIDY3ODU3LCA2Nzg2MSwgNjc4NjUsIDY3ODY5LCA2Nzg3MywgNjc4NzcsIDY3ODgxLCA2Nzg4NSwgNjc4ODksIAorICAgIDY3ODkzLCA2Nzg5NywgNjc5MDEsIDY3OTA1LCA2NzkwOSwgNjc5MTMsIDY3OTE3LCA2NzkyMSwgNjc5MjUsIDY3OTI5LCAKKyAgICA2NzkzMywgNjc5MzcsIDY3OTQxLCA2Nzk0NSwgNjc5NDksIDY3OTUzLCA2Nzk1NywgNjc5NjEsIDY3OTY1LCA2Nzk2OSwgCisgICAgNjc5NzMsIDY3OTc3LCA2Nzk4MSwgNjc5ODUsIDY3OTg4LCA2Nzk5MiwgNjc5OTYsIDY4MDAwLCA2ODAwNCwgNjgwMDgsIAorICAgIDY4MDEyLCA2ODAxNiwgNjgwMjAsIDY4MDI0LCA2ODAyOCwgNjgwMzIsIDY4MDM2LCA2ODA0MCwgNjgwNDQsIDY4MDQ4LCAKKyAgICA2ODA1MiwgNjgwNTYsIDY4MDYwLCA2ODA2NCwgNjgwNjgsIDY4MDcyLCA2ODA3NiwgNjgwODAsIDY4MDg0LCA2ODA4OCwgCisgICAgNjgwOTIsIDY4MDk2LCA2ODEwMCwgNjgxMDQsIDY4MTA4LCA2ODExMiwgNjgxMTYsIDY4MTIwLCA2ODEyNCwgNjgxMjgsIAorICAgIDY4MTMyLCA2ODEzNiwgNjgxNDAsIDY4MTQ0LCA2ODE0OCwgNjgxNTIsIDY4MTU2LCA2ODE2MCwgNjgxNjQsIDY4MTY4LCAKKyAgICA2ODE3MiwgNjgxNzYsIDY4MTgwLCA2ODE4NCwgNjgxODgsIDY4MTkyLCA2ODE5NiwgNjgyMDAsIDY4MjA0LCA2ODIwOCwgCisgICAgNjgyMTIsIDY4MjE2LCA2ODIyMCwgNjgyMjQsIDY4MjI4LCA2ODIzMiwgNjgyMzYsIDY4MjQwLCA2ODI0NCwgNjgyNDgsIAorICAgIDY4MjUyLCA2ODI1NiwgNjgyNjAsIDY4MjY0LCA2ODI2OCwgNjgyNzIsIDY4Mjc2LCA2ODI4MCwgNjgyODQsIDY4Mjg4LCAKKyAgICA2ODI5MiwgNjgyOTYsIDY4MzAwLCA2ODMwNCwgNjgzMDgsIDY4MzEyLCA2ODMxNiwgNjgzMjAsIDY4MzI0LCA2ODMyOCwgCisgICAgNjgzMzIsIDY4MzM2LCA2ODM0MCwgNjgzNDQsIDY4MzQ4LCA2ODM1MiwgNjgzNTYsIDY4MzYwLCA2ODM2NCwgNjgzNjgsIAorICAgIDY4MzcyLCA2ODM3NiwgNjgzODAsIDY4Mzg0LCA2ODM4OCwgNjgzOTIsIDY4Mzk2LCA2ODQwMCwgNjg0MDQsIDY4NDA4LCAKKyAgICA2ODQxMiwgNjg0MTYsIDY4NDIwLCA2ODQyNCwgNjg0MjgsIDY4NDMyLCA2ODQzNiwgNjg0NDAsIDY4NDQ0LCA2ODQ0OCwgCisgICAgNjg0NTIsIDY4NDU2LCA2ODQ2MCwgNjg0NjQsIDY4NDY4LCA2ODQ3MiwgNjg0NzYsIDY4NDgwLCA2ODQ4NCwgNjg0ODgsIAorICAgIDY4NDkyLCA2ODQ5NiwgNjg1MDAsIDY4NTA0LCA2ODUwOCwgNjg1MTIsIDY4NTE2LCA2ODUyMCwgNjg1MjQsIDY4NTI4LCAKKyAgICA2ODUzMiwgNjg1MzYsIDY4NTQwLCA2ODU0NCwgNjg1NDgsIDY4NTUyLCA2ODU1NiwgNjg1NjAsIDY4NTY0LCA2ODU2OCwgCisgICAgNjg1NzIsIDY4NTc2LCA2ODU4MCwgNjg1ODQsIDY4NTg4LCA2ODU5MiwgNjg1OTYsIDY4NjAwLCA2ODYwNCwgNjg2MDgsIAorICAgIDY4NjEyLCA2ODYxNiwgNjg2MjAsIDY4NjI0LCA2ODYyOCwgNjg2MzIsIDY4NjM2LCA2ODY0MCwgNjg2NDQsIDY4NjQ4LCAKKyAgICA2ODY1MiwgNjg2NTYsIDY4NjYwLCA2ODY2NCwgNjg2NjgsIDY4NjcyLCA2ODY3NiwgNjg2ODAsIDY4Njg0LCA2ODY4OCwgCisgICAgNjg2OTIsIDY4Njk2LCA2ODcwMCwgNjg3MDQsIDY4NzA4LCA2ODcxMiwgNjg3MTYsIDY4NzIwLCA2ODcyNCwgNjg3MjgsIAorICAgIDY4NzMyLCA2ODczNiwgNjg3NDAsIDY4NzQ0LCA2ODc0OCwgNjg3NTIsIDY4NzU2LCA2ODc2MCwgNjg3NjQsIDY4NzY4LCAwLCAKKyAgICAwLCAwLCA2ODc3MiwgNjg3NzYsIDY4NzgwLCA2ODc4NCwgNjg3ODgsIDY4NzkyLCA2ODc5NiwgNjg4MDAsIDY4ODA0LCAKKyAgICA2ODgwOCwgNjg4MTIsIDY4ODE2LCA2ODgyMCwgNjg4MjQsIDY4ODI4LCA2ODgzMiwgNjg4MzYsIDY4ODQwLCA2ODg0NCwgCisgICAgNjg4NDgsIDY4ODUyLCA2ODg1NiwgNjg4NjAsIDY4ODY0LCA2ODg2OCwgNjg4NzIsIDY4ODc2LCA2ODg4MCwgNjg4ODQsIAorICAgIDY4ODg4LCA2ODg5MiwgNjg4OTYsIDY4OTAwLCA2ODkwNCwgNjg5MDgsIDY4OTEyLCA2ODkxNiwgNjg5MjAsIDY4OTI0LCAKKyAgICA2ODkyOCwgNjg5MzIsIDY4OTM2LCA2ODk0MCwgNjg5NDQsIDY4OTQ4LCA2ODk1MiwgNjg5NTYsIDY4OTYwLCA2ODk2NCwgCisgICAgNjg5NjgsIDY4OTcyLCA2ODk3NiwgNjg5ODAsIDY4OTg0LCA2ODk4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgNjg5OTIsIDY4OTk3LCA2OTAwMSwgNjkwMDYsIDY5MDExLCA2OTAxNiwgNjkwMjEsIDY5MDI2LCA2OTAzMCwgNjkwMzUsIAorICAgIDY5MDQwLCA2OTA0NSwgNjkwNTAsIDY5MDU1LCA2OTA2MCwgNjkwNjUsIDY5MDY5LCA2OTA3MywgNjkwNzgsIDY5MDgyLCAKKyAgICA2OTA4NywgNjkwOTIsIDY5MDk3LCA2OTEwMSwgNjkxMDYsIDY5MTExLCA2OTExNiwgNjkxMjEsIDY5MTI2LCA2OTEzMCwgCisgICAgNjkxMzUsIDY5MTM5LCA2OTE0NCwgNjkxNDgsIDY5MTUzLCA2OTE1NywgNjkxNjEsIDY5MTY1LCA2OTE3MCwgNjkxNzUsIAorICAgIDY5MTgwLCA2OTE4OCwgNjkxOTYsIDY5MjA0LCA2OTIxMiwgNjkyMTksIDY5MjI3LCA2OTIzMywgNjkyNDEsIDY5MjQ1LCAKKyAgICA2OTI0OSwgNjkyNTMsIDY5MjU3LCA2OTI2MSwgNjkyNjUsIDY5MjY5LCA2OTI3MywgNjkyNzcsIDY5MjgxLCA2OTI4NSwgCisgICAgNjkyODksIDY5MjkzLCA2OTI5NywgNjkzMDEsIDY5MzA1LCA2OTMwOSwgNjkzMTMsIDY5MzE3LCA2OTMyMSwgNjkzMjUsIAorICAgIDY5MzI5LCA2OTMzMywgNjkzMzcsIDY5MzQxLCA2OTM0NSwgNjkzNDksIDY5MzUzLCA2OTM1NywgNjkzNjEsIDY5MzY1LCAKKyAgICA2OTM2OSwgNjkzNzMsIDY5Mzc3LCA2OTM4MSwgNjkzODUsIDY5Mzg4LCA2OTM5MiwgNjkzOTYsIDY5NDAwLCA2OTQwNCwgCisgICAgNjk0MDgsIDY5NDEyLCA2OTQxNiwgNjk0MjAsIDY5NDI0LCA2OTQyOCwgNjk0MzIsIDY5NDM2LCA2OTQ0MCwgNjk0NDQsIAorICAgIDY5NDQ4LCA2OTQ1MiwgNjk0NTYsIDY5NDYwLCA2OTQ2NCwgNjk0NjgsIDY5NDcyLCA2OTQ3NiwgNjk0ODAsIDY5NDg0LCAKKyAgICA2OTQ4OCwgNjk0OTIsIDY5NDk2LCA2OTUwMCwgNjk1MDQsIDY5NTA4LCA2OTUxMiwgNjk1MTYsIDY5NTIwLCA2OTUyNCwgCisgICAgNjk1MjgsIDY5NTMyLCA2OTUzNSwgNjk1MzksIDY5NTQzLCA2OTU0NiwgNjk1NTAsIDY5NTU0LCA2OTU1OCwgNjk1NjEsIAorICAgIDY5NTY1LCA2OTU2OSwgNjk1NzMsIDY5NTc3LCA2OTU4MSwgNjk1ODUsIDY5NTg5LCA2OTU5MywgNjk1OTcsIDY5NjAxLCAKKyAgICA2OTYwNSwgNjk2MDksIDY5NjEzLCA2OTYxNywgNjk2MjAsIDY5NjI0LCA2OTYyOCwgNjk2MzEsIDY5NjM1LCA2OTYzOSwgCisgICAgNjk2NDMsIDY5NjQ3LCA2OTY1MSwgNjk2NTUsIDY5NjU4LCA2OTY2MSwgNjk2NjUsIDY5NjY5LCA2OTY3MywgNjk2NzYsIAorICAgIDY5Njc5LCA2OTY4MywgNjk2ODcsIDY5NjkxLCA2OTY5NSwgNjk2OTksIDY5NzAzLCA2OTcwNywgNjk3MTEsIDY5NzE1LCAKKyAgICA2OTcxOSwgNjk3MjMsIDY5NzI3LCA2OTczMSwgNjk3MzUsIDY5NzM5LCA2OTc0MywgNjk3NDcsIDY5NzUxLCA2OTc1NSwgCisgICAgNjk3NTksIDY5NzYzLCA2OTc2NywgNjk3NzEsIDY5Nzc1LCA2OTc3OSwgNjk3ODMsIDY5Nzg3LCA2OTc5MSwgNjk3OTUsIAorICAgIDY5Nzk5LCA2OTgwMywgNjk4MDcsIDY5ODExLCA2OTgxNSwgNjk4MTksIDY5ODIzLCA2OTgyNywgNjk4MzAsIDY5ODM0LCAKKyAgICA2OTgzOCwgNjk4NDIsIDY5ODQ2LCA2OTg1MCwgNjk4NTQsIDY5ODU4LCA2OTg2MiwgNjk4NjYsIDY5ODcwLCA2OTg3NCwgCisgICAgNjk4NzgsIDY5ODgyLCA2OTg4NiwgNjk4OTAsIDY5ODk0LCA2OTg5OCwgNjk5MDIsIDY5OTA2LCA2OTkxMCwgNjk5MTQsIAorICAgIDY5OTE4LCA2OTkyMiwgNjk5MjYsIDY5OTMwLCA2OTkzNCwgNjk5MzgsIDY5OTQyLCA2OTk0NiwgNjk5NTAsIDY5OTU0LCAKKyAgICA2OTk1OCwgNjk5NjIsIDY5OTY2LCA2OTk3MCwgNjk5NzQsIDY5OTc3LCA2OTk4MSwgNjk5ODUsIDY5OTg5LCA2OTk5MywgCisgICAgNjk5OTcsIDcwMDAxLCA3MDAwNSwgNzAwMDksIDcwMDEzLCA3MDAxNywgNzAwMjEsIDcwMDI1LCA3MDAyOSwgNzAwMzMsIAorICAgIDcwMDM3LCA3MDA0MSwgNzAwNDQsIDcwMDQ4LCA3MDA1MiwgNzAwNTYsIDcwMDYwLCA3MDA2NCwgNzAwNjgsIDcwMDcyLCAKKyAgICA3MDA3NiwgNzAwODAsIDcwMDg0LCA3MDA4OCwgNzAwOTIsIDcwMDk2LCA3MDEwMCwgNzAxMDQsIDcwMTA4LCA3MDExMiwgCisgICAgNzAxMTYsIDcwMTIwLCA3MDEyNCwgNzAxMjgsIDcwMTMxLCA3MDEzNSwgNzAxMzksIDcwMTQzLCA3MDE0NywgNzAxNTEsIAorICAgIDcwMTU1LCA3MDE1OSwgNzAxNjMsIDcwMTY3LCA3MDE3MSwgNzAxNzUsIDcwMTc5LCA3MDE4MywgNzAxODcsIDcwMTkxLCAKKyAgICA3MDE5NSwgNzAxOTksIDcwMjAzLCA3MDIwNywgNzAyMTEsIDcwMjE1LCA3MDIxOSwgNzAyMjMsIDcwMjI3LCA3MDIzMSwgCisgICAgNzAyMzUsIDcwMjM5LCA3MDI0MywgNzAyNDcsIDcwMjUxLCA3MDI1NSwgNzAyNTksIDcwMjYzLCA3MDI2NywgNzAyNzEsIAorICAgIDcwMjc1LCA3MDI3OSwgNzAyODMsIDcwMjg3LCA3MDI5MSwgNzAyOTUsIDcwMjk5LCA3MDMwMywgNzAzMDYsIDcwMzExLCAKKyAgICA3MDMxNSwgNzAzMjEsIDcwMzI2LCA3MDMzMiwgNzAzMzYsIDcwMzQwLCA3MDM0NCwgNzAzNDgsIDcwMzUyLCA3MDM1NiwgCisgICAgNzAzNjAsIDcwMzY0LCA3MDM2OCwgNzAzNzIsIDcwMzc2LCA3MDM4MCwgNzAzODQsIDcwMzg4LCA3MDM5MSwgNzAzOTQsIAorICAgIDcwMzk3LCA3MDQwMCwgNzA0MDMsIDcwNDA2LCA3MDQwOSwgNzA0MTIsIDcwNDE1LCA3MDQyMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzA0MjYsIDcwNDMxLCA3MDQzNiwgNzA0NDEsIAorICAgIDcwNDQ2LCA3MDQ1MywgNzA0NjAsIDcwNDY1LCA3MDQ3MCwgNzA0NzUsIDcwNDgwLCA3MDQ4NywgNzA0OTQsIDcwNTAxLCAKKyAgICA3MDUwOCwgNzA1MTUsIDcwNTIyLCA3MDUzMiwgNzA1NDIsIDcwNTQ5LCA3MDU1NiwgNzA1NjMsIDcwNTcwLCA3MDU3NiwgCisgICAgNzA1ODIsIDcwNTkxLCA3MDYwMCwgNzA2MDcsIDcwNjE0LCA3MDYyNSwgNzA2MzYsIDcwNjQxLCA3MDY0NiwgNzA2NTMsIAorICAgIDcwNjYwLCA3MDY2NywgNzA2NzQsIDcwNjgxLCA3MDY4OCwgNzA2OTUsIDcwNzAyLCA3MDcwOCwgNzA3MTQsIDcwNzIwLCAKKyAgICA3MDcyNiwgNzA3MzMsIDcwNzQwLCA3MDc0NSwgNzA3NDksIDcwNzU2LCA3MDc2MywgNzA3NzAsIDcwNzc0LCA3MDc4MSwgCisgICAgNzA3ODUsIDcwNzkwLCA3MDc5NCwgNzA4MDAsIDcwODA1LCA3MDgxMSwgNzA4MTYsIDcwODIwLCA3MDgyNCwgNzA4MjcsIAorICAgIDcwODMwLCA3MDgzNSwgNzA4NDAsIDcwODQ1LCA3MDg1MCwgNzA4NTUsIDcwODYwLCA3MDg2NSwgNzA4NzAsIDcwODc1LCAKKyAgICA3MDg4MCwgNzA4ODksIDcwODk4LCA3MDkwMywgNzA5MDgsIDcwOTEzLCA3MDkxOCwgNzA5MjMsIDcwOTI4LCA3MDkzMywgCisgICAgNzA5MzgsIDcwOTQzLCA3MDk0OCwgNzA5NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDcwOTU4LCA3MDk2NCwgNzA5NjcsIAorICAgIDcwOTcwLCA3MDk3MywgNzA5NzcsIDcwOTgxLCA3MDk4NSwgNzA5ODksIDcwOTkyLCA3MDk5NiwgNzA5OTksIDcxMDAzLCAKKyAgICA3MTAwNiwgNzEwMTAsIDcxMDE0LCA3MTAxOCwgNzEwMjIsIDcxMDI2LCA3MTAzMCwgNzEwMzQsIDcxMDM3LCA3MTA0MSwgCisgICAgNzEwNDUsIDcxMDQ5LCA3MTA1MywgNzEwNTcsIDcxMDYxLCA3MTA2NSwgNzEwNjksIDcxMDczLCA3MTA3NywgNzEwODEsIAorICAgIDcxMDg1LCA3MTA4OSwgNzEwOTMsIDcxMDk2LCA3MTEwMCwgNzExMDQsIDcxMTA4LCA3MTExMiwgNzExMTYsIDcxMTIwLCAKKyAgICA3MTEyNCwgNzExMjgsIDcxMTMyLCA3MTEzNiwgNzExNDAsIDcxMTQ0LCA3MTE0OCwgNzExNTIsIDcxMTU2LCA3MTE2MCwgCisgICAgNzExNjQsIDcxMTY4LCA3MTE3MiwgNzExNzYsIDcxMTgwLCA3MTE4NCwgNzExODgsIDcxMTkyLCA3MTE5NSwgNzExOTksIAorICAgIDcxMjAzLCA3MTIwNywgNzEyMTEsIDcxMjE1LCA3MTIxOSwgNzEyMjMsIDcxMjI2LCA3MTIzMCwgNzEyMzQsIDcxMjM4LCAKKyAgICA3MTI0MiwgNzEyNDYsIDcxMjUwLCA3MTI1NCwgNzEyNTgsIDcxMjYyLCA3MTI2NiwgNzEyNzAsIDcxMjc0LCA3MTI3OSwgCisgICAgNzEyODQsIDcxMjg3LCA3MTI5MiwgNzEyOTUsIDcxMjk4LCA3MTMwMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzEzMDUsIAorICAgIDcxMzE0LCA3MTMyMywgNzEzMzIsIDcxMzQxLCA3MTM1MCwgNzEzNTksIDcxMzY4LCA3MTM3NywgNzEzODUsIDcxMzkyLCAKKyAgICA3MTQwMCwgNzE0MDcsIDcxNDE1LCA3MTQyNSwgNzE0MzQsIDcxNDQ0LCA3MTQ1MywgNzE0NjMsIDcxNDcxLCA3MTQ3OCwgCisgICAgNzE0ODYsIDcxNDkzLCA3MTUwMSwgNzE1MDYsIDcxNTExLCA3MTUxNiwgNzE1MjUsIDcxNTMxLCA3MTUzNywgNzE1NDQsIAorICAgIDcxNTUzLCA3MTU2MSwgNzE1NjksIDcxNTc3LCA3MTU4NCwgNzE1OTEsIDcxNTk4LCA3MTYwNSwgNzE2MTAsIDcxNjE1LCAKKyAgICA3MTYyMCwgNzE2MjUsIDcxNjMwLCA3MTYzNSwgNzE2NDAsIDcxNjQ1LCA3MTY1MywgNzE2NjEsIDcxNjY3LCA3MTY3MywgCisgICAgNzE2NzgsIDcxNjgzLCA3MTY4OCwgNzE2OTMsIDcxNjk4LCA3MTcwMywgNzE3MDgsIDcxNzEzLCA3MTcyMSwgNzE3MjksIAorICAgIDcxNzM0LCA3MTczOSwgNzE3NDksIDcxNzU5LCA3MTc2NiwgNzE3NzMsIDcxNzgyLCA3MTc5MSwgNzE4MDMsIDcxODE1LCAKKyAgICA3MTgyMSwgNzE4MjcsIDcxODM1LCA3MTg0MywgNzE4NTMsIDcxODYzLCA3MTg3MCwgNzE4NzcsIDcxODgyLCA3MTg4NywgCisgICAgNzE4OTksIDcxOTExLCA3MTkxOSwgNzE5MjcsIDcxOTM3LCA3MTk0NywgNzE5NTksIDcxOTcxLCA3MTk4MCwgNzE5ODksIAorICAgIDcxOTk2LCA3MjAwMywgNzIwMTAsIDcyMDE3LCA3MjAyNiwgNzIwMzUsIDcyMDQwLCA3MjA0NSwgNzIwNTIsIDcyMDU5LCAKKyAgICA3MjA2NiwgNzIwNzMsIDcyMDg1LCA3MjA5NywgNzIxMDIsIDcyMTA3LCA3MjExMiwgNzIxMTcsIDcyMTIyLCA3MjEyNywgCisgICAgNzIxMzIsIDcyMTM3LCA3MjE0MSwgNzIxNDYsIDcyMTUxLCA3MjE1NiwgNzIxNjEsIDcyMTY2LCA3MjE3MiwgNzIxNzcsIAorICAgIDcyMTgyLCA3MjE4OSwgNzIxOTYsIDcyMjAzLCA3MjIxMCwgNzIyMTcsIDcyMjI2LCA3MjIzNSwgNzIyNDEsIDcyMjQ3LCAKKyAgICA3MjI1MywgNzIyNTksIDcyMjY2LCA3MjI3MywgNzIyODAsIDcyMjg3LCA3MjI5NCwgNzIyOTgsIDcyMzA1LCA3MjMxMCwgCisgICAgNzIzMTUsIDcyMzIyLCAwLCA3MjMzNSwgNzIzNDMsIDcyMzUxLCA3MjM1OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgNzIzNjUsIDcyMzc0LCA3MjM4MywgNzIzOTIsIDcyNDAxLCA3MjQxMCwgNzI0MTksIDcyNDI4LCA3MjQzNywgCisgICAgNzI0NDYsIDcyNDU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3MjQzNCwgCi0gICAgNzI0NDEsIDcyNDQ3LCA3MjQ1NCwgNzI0NjIsIDcyNDcwLCA3MjQ3NywgNzI0ODUsIDcyNDkyLCA3MjQ5OCwgNzI1MDQsIAotICAgIDcyNTExLCA3MjUxNywgNzI1MjMsIDcyNTI5LCA3MjUzNiwgNzI1NDMsIDcyNTUwLCA3MjU1NywgNzI1NjQsIDcyNTcxLCAKLSAgICA3MjU3OCwgNzI1ODUsIDcyNTkyLCA3MjU5OSwgNzI2MDYsIDcyNjEzLCA3MjYyMCwgNzI2MjcsIDcyNjMzLCA3MjY0MCwgCi0gICAgNzI2NDcsIDcyNjU0LCA3MjY2MSwgNzI2NjgsIDcyNjc1LCA3MjY4MiwgNzI2ODksIDcyNjk2LCA3MjcwMywgNzI3MTAsIAotICAgIDcyNzE3LCA3MjcyNCwgNzI3MzEsIDcyNzM4LCA3Mjc0NSwgNzI3NTIsIDcyNzU5LCA3Mjc2NywgNzI3NzUsIDcyNzgzLCAKLSAgICA3Mjc5MSwgMCwgMCwgMCwgMCwgNzI3OTksIDcyODA4LCA3MjgxNywgNzI4MjYsIDcyODM1LCA3Mjg0NCwgNzI4NTMsIAotICAgIDcyODYwLCA3Mjg2NywgNzI4NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDcyODgxLCA3Mjg4NSwgNzI4OTAsIDcyODk1LCA3MjkwMCwgCi0gICAgNzI5MDUsIDcyOTEwLCA3MjkxNSwgNzI5MjAsIDcyOTI1LCA3MjkzMCwgNzI5MzUsIDcyOTM5LCA3Mjk0MywgNzI5NDgsIAotICAgIDcyOTUzLCA3Mjk1NywgNzI5NjIsIDcyOTY3LCA3Mjk3MiwgNzI5NzcsIDcyOTgyLCA3Mjk4NywgNzI5OTIsIDcyOTk2LCAKLSAgICA3MzAwMCwgNzMwMDUsIDczMDEwLCA3MzAxNCwgNzMwMTgsIDczMDIyLCA3MzAyNiwgNzMwMzAsIDczMDM0LCA3MzAzOCwgCi0gICAgNzMwNDMsIDczMDQ4LCA3MzA1MywgNzMwNTgsIDczMDYzLCA3MzA3MCwgNzMwNzYsIDczMDgxLCA3MzA4NiwgNzMwOTEsIAotICAgIDczMDk2LCA3MzEwMiwgNzMxMDksIDczMTE1LCA3MzEyMiwgNzMxMjgsIDczMTM0LCA3MzEzOSwgNzMxNDYsIDczMTUyLCAKLSAgICA3MzE1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzMxNjMsIDczMTY3LCA3MzE3MSwgNzMxNzQsIDczMTc4LCA3MzE4MSwgCi0gICAgNzMxODUsIDczMTg4LCA3MzE5MiwgNzMxOTYsIDczMjAxLCA3MzIwNSwgNzMyMTAsIDczMjEzLCA3MzIxNywgNzMyMjEsIAotICAgIDczMjI0LCA3MzIyOCwgNzMyMzIsIDczMjM1LCA3MzIzOSwgNzMyNDMsIDczMjQ3LCA3MzI1MSwgNzMyNTUsIDczMjU5LCAKLSAgICA3MzI2MywgNzMyNjcsIDczMjcxLCA3MzI3NSwgNzMyNzksIDczMjgzLCA3MzI4NywgNzMyOTEsIDczMjk1LCA3MzI5OSwgCi0gICAgNzMzMDMsIDczMzA3LCA3MzMxMCwgNzMzMTMsIDczMzE3LCA3MzMyMSwgNzMzMjUsIDczMzI4LCA3MzMzMSwgNzMzMzQsIAotICAgIDczMzM4LCA3MzM0MiwgNzMzNDYsIDczMzUwLCA3MzM1MywgNzMzNTYsIDczMzYwLCA3MzM2NSwgNzMzNzAsIDczMzc0LCAKLSAgICA3MzM3OSwgNzMzODMsIDczMzg4LCA3MzM5MywgNzMzOTksIDczNDA0LCA3MzQxMCwgNzM0MTQsIDczNDE5LCA3MzQyNCwgCi0gICAgNzM0MjgsIDczNDMzLCA3MzQzOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzM0NDIsIDczNDQ1LCA3MzQ0OSwgCi0gICAgNzM0NTMsIDczNDU2LCA3MzQ1OSwgNzM0NjIsIDczNDY1LCA3MzQ2OCwgNzM0NzEsIDczNDc0LCA3MzQ3NywgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgNzM0ODAsIDczNDg1LCA3MzQ4OSwgNzM0OTMsIDczNDk3LCA3MzUwMSwgNzM1MDUsIDczNTA5LCA3MzUxMywgCi0gICAgNzM1MTcsIDczNTIxLCA3MzUyNSwgNzM1MjksIDczNTMzLCA3MzUzNywgNzM1NDEsIDczNTQ1LCA3MzU1MCwgNzM1NTUsIAotICAgIDczNTYxLCA3MzU2NywgNzM1NzQsIDczNTc5LCA3MzU4NCwgNzM1OTAsIDczNTk0LCA3MzU5OSwgNzM2MDIsIDAsIDAsIDAsIAotICAgIDAsIDczNjA1LCA3MzYxMiwgNzM2MTgsIDczNjI0LCA3MzYzMCwgNzM2MzYsIDczNjQyLCA3MzY0OCwgNzM2NTQsIDczNjYwLCAKLSAgICA3MzY2NiwgNzM2NzIsIDczNjc5LCA3MzY4NiwgNzM2OTMsIDczNjk5LCA3MzcwNiwgNzM3MTMsIDczNzIwLCA3MzcyNywgCi0gICAgNzM3MzQsIDczNzQwLCA3Mzc0NiwgNzM3NTMsIDczNzU5LCA3Mzc2NiwgNzM3NzMsIDczNzc5LCA3Mzc4NSwgNzM3OTIsIAotICAgIDczNzk5LCA3MzgwNiwgNzM4MTIsIDczODE5LCA3MzgyNiwgNzM4MzIsIDczODM5LCA3Mzg0NSwgNzM4NTIsIDczODU5LCAKLSAgICA3Mzg2NSwgNzM4NzEsIDczODc4LCA3Mzg4NCwgNzM4OTEsIDczODk4LCA3MzkwNywgNzM5MTQsIDczOTIxLCA3MzkyNSwgCi0gICAgNzM5MzAsIDczOTM1LCA3Mzk0MCwgNzM5NDUsIDczOTQ5LCA3Mzk1MywgNzM5NTgsIDczOTYyLCA3Mzk2NywgNzM5NzIsIAotICAgIDczOTc3LCA3Mzk4MSwgNzM5ODUsIDczOTkwLCA3Mzk5NCwgNzM5OTksIDc0MDAzLCA3NDAwOCwgNzQwMTMsIDc0MDE4LCAKLSAgICA3NDAyMywgNzQwMjcsIDc0MDMyLCA3NDAzNywgNzQwNDIsIDc0MDQ4LCA3NDA1MywgNzQwNTksIDc0MDY1LCA3NDA3MSwgCi0gICAgNzQwNzcsIDc0MDgzLCA3NDA4OCwgNzQwOTQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0MDk4LCAKLSAgICA3NDEwMywgNzQxMDcsIDc0MTExLCA3NDExNSwgNzQxMTksIDc0MTIzLCA3NDEyNywgNzQxMzEsIDc0MTM1LCA3NDEzOSwgCi0gICAgNzQxNDMsIDc0MTQ3LCA3NDE1MSwgNzQxNTUsIDc0MTU5LCA3NDE2MywgNzQxNjcsIDc0MTcxLCA3NDE3NSwgNzQxNzksIAotICAgIDc0MTgzLCA3NDE4NywgNzQxOTEsIDc0MTk1LCA3NDE5OSwgNzQyMDMsIDc0MjA3LCA3NDIxMSwgNzQyMTUsIDAsIDAsIDAsIAotICAgIDc0MjE5LCA3NDIyMywgNzQyMjcsIDc0MjMxLCA3NDIzNSwgNzQyMzgsIDc0MjQ0LCA3NDI0NywgNzQyNTEsIDc0MjU0LCAKLSAgICA3NDI2MCwgNzQyNjYsIDc0Mjc0LCA3NDI3NywgNzQyODEsIDc0Mjg0LCA3NDI4NywgNzQyOTMsIDc0Mjk5LCA3NDMwMywgCi0gICAgNzQzMDksIDc0MzEzLCA3NDMxNywgNzQzMjMsIDc0MzI3LCA3NDMzMywgNzQzMzksIDc0MzQzLCA3NDM0NywgNzQzNTMsIAotICAgIDc0MzU3LCA3NDM2MywgNzQzNjksIDc0MzczLCA3NDM3OSwgNzQzODMsIDc0Mzg5LCA3NDM5MiwgNzQzOTUsIDc0NDAxLCAKLSAgICA3NDQwNSwgNzQ0MTEsIDc0NDE0LCA3NDQxNywgNzQ0MjAsIDc0NDI2LCA3NDQzMCwgNzQ0MzQsIDc0NDQwLCA3NDQ0NiwgCi0gICAgNzQ0NDksIDc0NDUyLCA3NDQ1OCwgNzQ0NjMsIDc0NDY4LCA3NDQ3MywgNzQ0ODAsIDc0NDg1LCA3NDQ5MiwgNzQ0OTcsIAotICAgIDc0NTA0LCA3NDUwOSwgNzQ1MTQsIDc0NTE5LCA3NDUyNCwgNzQ1MjcsIDc0NTMxLCA3NDUzNSwgNzQ1NDAsIDc0NTQ1LCAKLSAgICA3NDU1MCwgNzQ1NTUsIDc0NTYwLCA3NDU2NSwgNzQ1NzAsIDc0NTc1LCA3NDU4MiwgNzQ1ODcsIDAsIDc0NTk0LCA3NDU5NywgCi0gICAgNzQ2MDEsIDc0NjA0LCA3NDYwNywgNzQ2MTAsIDc0NjEzLCA3NDYxNiwgNzQ2MTksIDc0NjIyLCA3NDYyNSwgMCwgMCwgMCwgCi0gICAgMCwgNzQ2MjgsIDc0NjM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDY0MCwgNzQ2NDMsIDc0NjQ2LCA3NDY0OSwgNzQ2NTIsIAotICAgIDc0NjU2LCA3NDY1OSwgNzQ2NjIsIDc0NjY2LCA3NDY3MCwgNzQ2NzQsIDc0Njc4LCA3NDY4MiwgNzQ2ODYsIDc0NjkwLCAKLSAgICA3NDY5NCwgNzQ2OTgsIDc0NzAyLCA3NDcwNiwgNzQ3MTAsIDc0NzE0LCA3NDcxOCwgNzQ3MjIsIDc0NzI2LCA3NDczMCwgCi0gICAgNzQ3MzMsIDc0NzM3LCA3NDc0MCwgNzQ3NDQsIDc0NzQ4LCA3NDc1MiwgNzQ3NTYsIDc0NzYwLCA3NDc2MywgNzQ3NjcsIAotICAgIDc0NzcwLCA3NDc3MywgNzQ3NzcsIDc0NzgxLCA3NDc4NSwgNzQ3ODgsIDc0NzkxLCA3NDc5NiwgNzQ4MDAsIDc0ODA1LCAKLSAgICA3NDgxMCwgNzQ4MTQsIDc0ODE5LCA3NDgyMywgNzQ4MjgsIDc0ODMzLCA3NDgzOCwgNzQ4NDIsIDc0ODQ2LCA3NDg1MSwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzQ4NTYsIDc0ODYxLCA3NDg2NiwgNzQ4NzEsIDc0ODc3LCA3NDg4MiwgNzQ4ODcsIAotICAgIDc0ODkyLCA3NDg5NywgNzQ5MDIsIDc0OTA2LCA3NDkxMCwgNzQ5MTUsIDc0OTIwLCAwLCAwLCA3NDkyNiwgNzQ5MzAsIAotICAgIDc0OTMzLCA3NDkzNiwgNzQ5MzksIDc0OTQyLCA3NDk0NSwgNzQ5NDgsIDc0OTUxLCA3NDk1NCwgMCwgMCwgNzQ5NTcsIAotICAgIDc0OTYyLCA3NDk2NywgNzQ5NzMsIDc0OTgwLCA3NDk4NiwgNzQ5OTIsIDc0OTk4LCA3NTAwNCwgNzUwMTAsIDc1MDE2LCAKLSAgICA3NTAyMiwgNzUwMjgsIDc1MDM0LCA3NTA0MCwgNzUwNDYsIDc1MDUxLCA3NTA1NiwgNzUwNjEsIDc1MDY3LCA3NTA3MywgCi0gICAgNzUwODAsIDc1MDg2LCA3NTA5MiwgNzUwOTcsIDc1MTA0LCA3NTExMSwgNzUxMTgsIDc1MTI0LCA3NTEyOSwgNzUxMzQsIAotICAgIDc1MTM5LCAwLCAwLCAwLCAwLCA3NTE0NywgNzUxNTMsIDc1MTU5LCA3NTE2NSwgNzUxNzEsIDc1MTc3LCA3NTE4MywgCi0gICAgNzUxODksIDc1MTk1LCA3NTIwMSwgNzUyMDcsIDc1MjEzLCA3NTIxOSwgNzUyMjUsIDc1MjMxLCA3NTIzNywgNzUyNDMsIAotICAgIDc1MjQ5LCA3NTI1NSwgNzUyNjEsIDc1MjY3LCA3NTI3MiwgNzUyNzcsIDc1MjgzLCA3NTI4OSwgNzUyOTUsIDc1MzAxLCAKLSAgICA3NTMwNywgNzUzMTMsIDc1MzE5LCA3NTMyNSwgNzUzMzEsIDc1MzM3LCA3NTM0MywgNzUzNDksIDc1MzU1LCA3NTM2MSwgCi0gICAgNzUzNjcsIDc1MzczLCA3NTM3OSwgNzUzODUsIDc1MzkxLCA3NTM5NywgNzU0MDMsIDc1NDA5LCA3NTQxNSwgNzU0MjEsIAotICAgIDc1NDI2LCA3NTQzMSwgNzU0MzcsIDc1NDQyLCA3NTQ0NiwgNzU0NTEsIDc1NDU1LCA3NTQ1OSwgNzU0NjMsIDc1NDY5LCAKLSAgICA3NTQ3NCwgNzU0NzksIDc1NDg0LCA3NTQ4OSwgNzU0OTQsIDc1NDk5LCA3NTUwNCwgNzU1MTEsIDc1NTE4LCA3NTUyNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzI0NjIsIDcyNDY5LCA3MjQ3NSwgNzI0ODIsIDcyNDkwLCA3MjQ5OCwgCisgICAgNzI1MDUsIDcyNTEzLCA3MjUyMCwgNzI1MjYsIDcyNTMyLCA3MjUzOSwgNzI1NDUsIDcyNTUxLCA3MjU1NywgNzI1NjQsIAorICAgIDcyNTcxLCA3MjU3OCwgNzI1ODUsIDcyNTkyLCA3MjU5OSwgNzI2MDYsIDcyNjEzLCA3MjYyMCwgNzI2MjcsIDcyNjM0LCAKKyAgICA3MjY0MSwgNzI2NDgsIDcyNjU1LCA3MjY2MSwgNzI2NjgsIDcyNjc1LCA3MjY4MiwgNzI2ODksIDcyNjk2LCA3MjcwMywgCisgICAgNzI3MTAsIDcyNzE3LCA3MjcyNCwgNzI3MzEsIDcyNzM4LCA3Mjc0NSwgNzI3NTIsIDcyNzU5LCA3Mjc2NiwgNzI3NzMsIAorICAgIDcyNzgwLCA3Mjc4NywgNzI3OTUsIDcyODAzLCA3MjgxMSwgNzI4MTksIDAsIDAsIDAsIDAsIDcyODI3LCA3MjgzNiwgCisgICAgNzI4NDUsIDcyODU0LCA3Mjg2MywgNzI4NzIsIDcyODgxLCA3Mjg4OCwgNzI4OTUsIDcyOTAyLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA3MjkwOSwgNzI5MTMsIDcyOTE4LCA3MjkyMywgNzI5MjgsIDcyOTMzLCA3MjkzOCwgNzI5NDMsIDcyOTQ4LCA3Mjk1MywgCisgICAgNzI5NTgsIDcyOTYzLCA3Mjk2NywgNzI5NzEsIDcyOTc2LCA3Mjk4MSwgNzI5ODUsIDcyOTkwLCA3Mjk5NSwgNzMwMDAsIAorICAgIDczMDA1LCA3MzAxMCwgNzMwMTUsIDczMDIwLCA3MzAyNCwgNzMwMjgsIDczMDMzLCA3MzAzOCwgNzMwNDIsIDczMDQ2LCAKKyAgICA3MzA1MCwgNzMwNTQsIDczMDU4LCA3MzA2MiwgNzMwNjYsIDczMDcxLCA3MzA3NiwgNzMwODEsIDczMDg2LCA3MzA5MSwgCisgICAgNzMwOTgsIDczMTA0LCA3MzEwOSwgNzMxMTQsIDczMTE5LCA3MzEyNCwgNzMxMzAsIDczMTM3LCA3MzE0MywgNzMxNTAsIAorICAgIDczMTU2LCA3MzE2MiwgNzMxNjcsIDczMTc0LCA3MzE4MCwgNzMxODUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDczMTkxLCAKKyAgICA3MzE5NSwgNzMxOTksIDczMjAyLCA3MzIwNiwgNzMyMDksIDczMjEzLCA3MzIxNiwgNzMyMjAsIDczMjI0LCA3MzIyOSwgCisgICAgNzMyMzMsIDczMjM4LCA3MzI0MSwgNzMyNDUsIDczMjQ5LCA3MzI1MiwgNzMyNTYsIDczMjYwLCA3MzI2MywgNzMyNjcsIAorICAgIDczMjcxLCA3MzI3NSwgNzMyNzksIDczMjgzLCA3MzI4NywgNzMyOTEsIDczMjk1LCA3MzI5OSwgNzMzMDMsIDczMzA3LCAKKyAgICA3MzMxMSwgNzMzMTUsIDczMzE5LCA3MzMyMywgNzMzMjcsIDczMzMxLCA3MzMzNSwgNzMzMzgsIDczMzQxLCA3MzM0NSwgCisgICAgNzMzNDksIDczMzUzLCA3MzM1NiwgNzMzNTksIDczMzYyLCA3MzM2NiwgNzMzNzAsIDczMzc0LCA3MzM3OCwgNzMzODEsIAorICAgIDczMzg0LCA3MzM4OCwgNzMzOTMsIDczMzk4LCA3MzQwMiwgNzM0MDcsIDczNDExLCA3MzQxNiwgNzM0MjEsIDczNDI3LCAKKyAgICA3MzQzMiwgNzM0MzgsIDczNDQyLCA3MzQ0NywgNzM0NTIsIDczNDU2LCA3MzQ2MSwgNzM0NjYsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDczNDcwLCA3MzQ3MywgNzM0NzcsIDczNDgxLCA3MzQ4NCwgNzM0ODcsIDczNDkwLCA3MzQ5MywgNzM0OTYsIAorICAgIDczNDk5LCA3MzUwMiwgNzM1MDUsIDAsIDAsIDAsIDAsIDAsIDAsIDczNTA4LCA3MzUxMywgNzM1MTcsIDczNTIxLCA3MzUyNSwgCisgICAgNzM1MjksIDczNTMzLCA3MzUzNywgNzM1NDEsIDczNTQ1LCA3MzU0OSwgNzM1NTMsIDczNTU3LCA3MzU2MSwgNzM1NjUsIAorICAgIDczNTY5LCA3MzU3MywgNzM1NzgsIDczNTgzLCA3MzU4OSwgNzM1OTUsIDczNjAyLCA3MzYwNywgNzM2MTIsIDczNjE4LCAKKyAgICA3MzYyMiwgNzM2MjcsIDczNjMwLCAwLCAwLCAwLCAwLCA3MzYzMywgNzM2NDAsIDczNjQ2LCA3MzY1MiwgNzM2NTgsIAorICAgIDczNjY0LCA3MzY3MCwgNzM2NzYsIDczNjgyLCA3MzY4OCwgNzM2OTQsIDczNzAwLCA3MzcwNywgNzM3MTQsIDczNzIxLCAKKyAgICA3MzcyNywgNzM3MzQsIDczNzQxLCA3Mzc0OCwgNzM3NTUsIDczNzYyLCA3Mzc2OCwgNzM3NzQsIDczNzgxLCA3Mzc4NywgCisgICAgNzM3OTQsIDczODAxLCA3MzgwNywgNzM4MTMsIDczODIwLCA3MzgyNywgNzM4MzQsIDczODQwLCA3Mzg0NywgNzM4NTQsIAorICAgIDczODYwLCA3Mzg2NywgNzM4NzMsIDczODgwLCA3Mzg4NywgNzM4OTMsIDczODk5LCA3MzkwNiwgNzM5MTIsIDczOTE5LCAKKyAgICA3MzkyNiwgNzM5MzUsIDczOTQyLCA3Mzk0OSwgNzM5NTMsIDczOTU4LCA3Mzk2MywgNzM5NjgsIDczOTczLCA3Mzk3NywgCisgICAgNzM5ODEsIDczOTg2LCA3Mzk5MCwgNzM5OTUsIDc0MDAwLCA3NDAwNSwgNzQwMDksIDc0MDEzLCA3NDAxOCwgNzQwMjIsIAorICAgIDc0MDI3LCA3NDAzMSwgNzQwMzYsIDc0MDQxLCA3NDA0NiwgNzQwNTEsIDc0MDU1LCA3NDA2MCwgNzQwNjUsIDc0MDcwLCAKKyAgICA3NDA3NiwgNzQwODEsIDc0MDg3LCA3NDA5MywgNzQwOTksIDc0MTA1LCA3NDExMSwgNzQxMTYsIDc0MTIyLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NDEyNiwgNzQxMzEsIDc0MTM1LCA3NDEzOSwgNzQxNDMsIDc0MTQ3LCA3NDE1MSwgCisgICAgNzQxNTUsIDc0MTU5LCA3NDE2MywgNzQxNjcsIDc0MTcxLCA3NDE3NSwgNzQxNzksIDc0MTgzLCA3NDE4NywgNzQxOTEsIAorICAgIDc0MTk1LCA3NDE5OSwgNzQyMDMsIDc0MjA3LCA3NDIxMSwgNzQyMTUsIDc0MjE5LCA3NDIyMywgNzQyMjcsIDc0MjMxLCAKKyAgICA3NDIzNSwgNzQyMzksIDc0MjQzLCAwLCAwLCAwLCA3NDI0NywgNzQyNTEsIDc0MjU1LCA3NDI1OSwgNzQyNjMsIDc0MjY2LCAKKyAgICA3NDI3MiwgNzQyNzUsIDc0Mjc5LCA3NDI4MiwgNzQyODgsIDc0Mjk0LCA3NDMwMiwgNzQzMDUsIDc0MzA5LCA3NDMxMiwgCisgICAgNzQzMTUsIDc0MzIxLCA3NDMyNywgNzQzMzEsIDc0MzM3LCA3NDM0MSwgNzQzNDUsIDc0MzUxLCA3NDM1NSwgNzQzNjEsIAorICAgIDc0MzY3LCA3NDM3MSwgNzQzNzUsIDc0MzgxLCA3NDM4NSwgNzQzOTEsIDc0Mzk3LCA3NDQwMSwgNzQ0MDcsIDc0NDExLCAKKyAgICA3NDQxNywgNzQ0MjAsIDc0NDIzLCA3NDQyOSwgNzQ0MzMsIDc0NDM5LCA3NDQ0MiwgNzQ0NDUsIDc0NDQ4LCA3NDQ1NCwgCisgICAgNzQ0NTgsIDc0NDYyLCA3NDQ2OCwgNzQ0NzQsIDc0NDc3LCA3NDQ4MCwgNzQ0ODYsIDc0NDkxLCA3NDQ5NiwgNzQ1MDEsIAorICAgIDc0NTA4LCA3NDUxMywgNzQ1MjAsIDc0NTI1LCA3NDUzMiwgNzQ1MzcsIDc0NTQyLCA3NDU0NywgNzQ1NTIsIDc0NTU1LCAKKyAgICA3NDU1OSwgNzQ1NjMsIDc0NTY4LCA3NDU3MywgNzQ1NzgsIDc0NTgzLCA3NDU4OCwgNzQ1OTMsIDc0NTk4LCA3NDYwMywgCisgICAgNzQ2MTAsIDc0NjE1LCAwLCA3NDYyMiwgNzQ2MjUsIDc0NjI5LCA3NDYzMiwgNzQ2MzUsIDc0NjM4LCA3NDY0MSwgNzQ2NDQsIAorICAgIDc0NjQ3LCA3NDY1MCwgNzQ2NTMsIDAsIDAsIDAsIDAsIDc0NjU2LCA3NDY2MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgNzU1MzIsIDc1NTM3LCA3NTU0MiwgNzU1NDcsIDc1NTU0LCA3NTU2MSwgNzU1NjUsIDc1NTY5LCA3NTU3NCwgNzU1NzksIAotICAgIDc1NTg0LCA3NTU4OSwgNzU1OTQsIDc1NTk5LCA3NTYwNCwgNzU2MDksIDc1NjE0LCA3NTYyMCwgNzU2MjYsIDc1NjMyLCAKLSAgICA3NTYzOCwgNzU2NDQsIDc1NjQ4LCA3NTY1NCwgNzU2NTgsIDc1NjY0LCA3NTY3MSwgNzU2NzcsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDc1NjgxLCA3NTY4NSwgNzU2ODksIDc1NjkzLCA3NTY5NywgNzU3MDEsIDAsIDAsIDc1NzA1LCA3NTcwOSwgCi0gICAgNzU3MTMsIDc1NzE3LCA3NTcyMSwgNzU3MjUsIDAsIDAsIDc1NzI5LCA3NTczMywgNzU3MzcsIDc1NzQxLCA3NTc0NSwgCi0gICAgNzU3NDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NzUzLCA3NTc1NywgNzU3NjEsIDc1NzY1LCA3NTc2OSwgCi0gICAgNzU3NzMsIDc1Nzc3LCAwLCA3NTc4MSwgNzU3ODUsIDc1Nzg5LCA3NTc5MywgNzU3OTcsIDc1ODAxLCA3NTgwNSwgMCwgMCwgCisgICAgNzQ2NjgsIDc0NjcxLCA3NDY3NCwgNzQ2NzcsIDc0NjgwLCA3NDY4NCwgNzQ2ODcsIDc0NjkwLCA3NDY5NCwgNzQ2OTgsIAorICAgIDc0NzAyLCA3NDcwNiwgNzQ3MTAsIDc0NzE0LCA3NDcxOCwgNzQ3MjIsIDc0NzI2LCA3NDczMCwgNzQ3MzQsIDc0NzM4LCAKKyAgICA3NDc0MiwgNzQ3NDYsIDc0NzUwLCA3NDc1NCwgNzQ3NTgsIDc0NzYxLCA3NDc2NSwgNzQ3NjgsIDc0NzcyLCA3NDc3NiwgCisgICAgNzQ3ODAsIDc0Nzg0LCA3NDc4OCwgNzQ3OTEsIDc0Nzk1LCA3NDc5OCwgNzQ4MDEsIDc0ODA1LCA3NDgwOSwgNzQ4MTMsIAorICAgIDc0ODE2LCA3NDgxOSwgNzQ4MjQsIDc0ODI4LCA3NDgzMywgNzQ4MzgsIDc0ODQyLCA3NDg0NywgNzQ4NTEsIDc0ODU2LCAKKyAgICA3NDg2MSwgNzQ4NjYsIDc0ODcwLCA3NDg3NCwgNzQ4NzksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc0ODg0LCAKKyAgICA3NDg4OSwgNzQ4OTQsIDc0ODk5LCA3NDkwNSwgNzQ5MTAsIDc0OTE1LCA3NDkyMCwgNzQ5MjUsIDc0OTMwLCA3NDkzNCwgCisgICAgNzQ5MzgsIDc0OTQzLCA3NDk0OCwgMCwgMCwgNzQ5NTQsIDc0OTU4LCA3NDk2MSwgNzQ5NjQsIDc0OTY3LCA3NDk3MCwgCisgICAgNzQ5NzMsIDc0OTc2LCA3NDk3OSwgNzQ5ODIsIDAsIDAsIDc0OTg1LCA3NDk5MCwgNzQ5OTUsIDc1MDAxLCA3NTAwOCwgCisgICAgNzUwMTQsIDc1MDIwLCA3NTAyNiwgNzUwMzIsIDc1MDM4LCA3NTA0NCwgNzUwNTAsIDc1MDU2LCA3NTA2MiwgNzUwNjgsIAorICAgIDc1MDc0LCA3NTA3OSwgNzUwODQsIDc1MDg5LCA3NTA5NSwgNzUxMDEsIDc1MTA4LCA3NTExNCwgNzUxMjAsIDc1MTI1LCAKKyAgICA3NTEzMiwgNzUxMzksIDc1MTQ2LCA3NTE1MiwgNzUxNTcsIDc1MTYyLCA3NTE2NywgMCwgMCwgMCwgMCwgNzUxNzUsIAorICAgIDc1MTgxLCA3NTE4NywgNzUxOTMsIDc1MTk5LCA3NTIwNSwgNzUyMTEsIDc1MjE3LCA3NTIyMywgNzUyMjksIDc1MjM1LCAKKyAgICA3NTI0MSwgNzUyNDcsIDc1MjUzLCA3NTI1OSwgNzUyNjUsIDc1MjcxLCA3NTI3NywgNzUyODMsIDc1Mjg5LCA3NTI5NSwgCisgICAgNzUzMDAsIDc1MzA1LCA3NTMxMSwgNzUzMTcsIDc1MzIzLCA3NTMyOSwgNzUzMzUsIDc1MzQxLCA3NTM0NywgNzUzNTMsIAorICAgIDc1MzU5LCA3NTM2NSwgNzUzNzEsIDc1Mzc3LCA3NTM4MywgNzUzODksIDc1Mzk1LCA3NTQwMSwgNzU0MDcsIDc1NDEzLCAKKyAgICA3NTQxOSwgNzU0MjUsIDc1NDMxLCA3NTQzNywgNzU0NDMsIDc1NDQ5LCA3NTQ1NCwgNzU0NTksIDc1NDY1LCA3NTQ3MCwgCisgICAgNzU0NzQsIDc1NDc5LCA3NTQ4MywgNzU0ODcsIDc1NDkxLCA3NTQ5NywgNzU1MDIsIDc1NTA3LCA3NTUxMiwgNzU1MTcsIAorICAgIDc1NTIyLCA3NTUyNywgNzU1MzIsIDc1NTM5LCA3NTU0NiwgNzU1NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc1NTYwLCA3NTU2NSwgNzU1NzAsIDc1NTc1LCAKKyAgICA3NTU4MiwgNzU1ODksIDc1NTkzLCA3NTU5NywgNzU2MDIsIDc1NjA3LCA3NTYxMiwgNzU2MTcsIDc1NjIyLCA3NTYyNywgCisgICAgNzU2MzIsIDc1NjM3LCA3NTY0MiwgNzU2NDgsIDc1NjU0LCA3NTY2MCwgNzU2NjYsIDc1NjcyLCA3NTY3NiwgNzU2ODIsIAorICAgIDc1Njg2LCA3NTY5MiwgNzU2OTksIDc1NzA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NTcwOSwgNzU3MTMsIAorICAgIDc1NzE3LCA3NTcyMSwgNzU3MjUsIDc1NzI5LCAwLCAwLCA3NTczMywgNzU3MzcsIDc1NzQxLCA3NTc0NSwgNzU3NDksIAorICAgIDc1NzUzLCAwLCAwLCA3NTc1NywgNzU3NjEsIDc1NzY1LCA3NTc2OSwgNzU3NzMsIDc1Nzc3LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA3NTc4MSwgNzU3ODUsIDc1Nzg5LCA3NTc5MywgNzU3OTcsIDc1ODAxLCA3NTgwNSwgMCwgNzU4MDksIAorICAgIDc1ODEzLCA3NTgxNywgNzU4MjEsIDc1ODI1LCA3NTgyOSwgNzU4MzMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDc1ODA5LCA3NTgxNCwgNzU4MTksIDc1ODI0LCA3NTgyOSwgNzU4MzMsIDc1ODM3LCA3NTg0MiwgNzU4NDcsIDc1ODUyLCAKLSAgICA3NTg1NywgNzU4NjIsIDc1ODY3LCA3NTg3MiwgNzU4NzcsIDc1ODgyLCA3NTg4NiwgNzU4OTEsIDc1ODk2LCA3NTkwMSwgCi0gICAgNzU5MDYsIDc1OTExLCA3NTkxNiwgNzU5MjEsIDc1OTI2LCA3NTkzMSwgNzU5MzYsIDc1OTQxLCA3NTk0OCwgNzU5NTUsIAotICAgIDc1OTYyLCA3NTk2OSwgNzU5NzYsIDc1OTgzLCA3NTk5MCwgNzU5OTcsIDc2MDAzLCA3NjAwOSwgNzYwMTUsIDc2MDIxLCAKLSAgICA3NjAyNywgNzYwMzMsIDc2MDM5LCA3NjA0NSwgNzYwNDksIDc2MDU1LCAwLCAwLCA3NjA2MSwgNzYwNjYsIDc2MDcwLCAKLSAgICA3NjA3NCwgNzYwNzgsIDc2MDgyLCA3NjA4NiwgNzYwOTAsIDc2MDk0LCA3NjA5OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzU4MzcsIDc1ODQyLCA3NTg0NywgNzU4NTIsIAorICAgIDc1ODU3LCA3NTg2MSwgNzU4NjUsIDc1ODcwLCA3NTg3NSwgNzU4ODAsIDc1ODg1LCA3NTg5MCwgNzU4OTUsIDc1OTAwLCAKKyAgICA3NTkwNSwgNzU5MTAsIDc1OTE0LCA3NTkxOSwgNzU5MjQsIDc1OTI5LCA3NTkzNCwgNzU5MzksIDc1OTQ0LCA3NTk0OSwgCisgICAgNzU5NTQsIDc1OTU5LCA3NTk2NCwgNzU5NjksIDc1OTc2LCA3NTk4MywgNzU5OTAsIDc1OTk3LCA3NjAwNCwgNzYwMTEsIAorICAgIDc2MDE4LCA3NjAyNSwgNzYwMzEsIDc2MDM3LCA3NjA0MywgNzYwNDksIDc2MDU1LCA3NjA2MSwgNzYwNjcsIDc2MDczLCAKKyAgICA3NjA3NywgNzYwODMsIDAsIDAsIDc2MDg5LCA3NjA5NCwgNzYwOTgsIDc2MTAyLCA3NjEwNiwgNzYxMTAsIDc2MTE0LCAKKyAgICA3NjExOCwgNzYxMjIsIDc2MTI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3NjEwMiwgCi0gICAgNzYxMDYsIDc2MTEwLCA3NjExNCwgNzYxMTgsIDc2MTIyLCA3NjEyNiwgNzYxMzAsIDc2MTM0LCA3NjEzOCwgNzYxNDIsIAotICAgIDc2MTQ2LCA3NjE1MCwgNzYxNTQsIDc2MTU4LCA3NjE2MiwgNzYxNjYsIDc2MTcwLCA3NjE3NCwgNzYxNzgsIDc2MTgyLCAKLSAgICA3NjE4NiwgNzYxOTAsIDAsIDAsIDAsIDAsIDc2MTk0LCA3NjE5OCwgNzYyMDIsIDc2MjA2LCA3NjIxMCwgNzYyMTQsIAotICAgIDc2MjE4LCA3NjIyMiwgNzYyMjYsIDc2MjMwLCA3NjIzNCwgNzYyMzgsIDc2MjQyLCA3NjI0NiwgNzYyNTAsIDc2MjU0LCAKLSAgICA3NjI1OCwgNzYyNjIsIDc2MjY2LCA3NjI3MCwgNzYyNzQsIDc2Mjc4LCA3NjI4MiwgNzYyODYsIDc2MjkwLCA3NjI5NCwgCi0gICAgNzYyOTgsIDc2MzAyLCA3NjMwNiwgNzYzMTAsIDc2MzE0LCA3NjMxOCwgNzYzMjIsIDc2MzI2LCA3NjMzMCwgNzYzMzQsIAotICAgIDc2MzM4LCA3NjM0MiwgNzYzNDYsIDc2MzUwLCA3NjM1NCwgNzYzNTgsIDc2MzYyLCA3NjM2NiwgNzYzNzAsIDc2Mzc0LCAKLSAgICA3NjM3OCwgNzYzODIsIDc2Mzg2LCAwLCAwLCAwLCAwLCA3NjM5MCwgNzYzOTQsIDc2Mzk4LCA3NjQwMiwgNzY0MDYsIAotICAgIDc2NDEwLCA3NjQxNCwgNzY0MTgsIDc2NDIyLCA3NjQyNiwgNzY0MzAsIDc2NDM0LCA3NjQzOCwgNzY0NDIsIDc2NDQ2LCAKLSAgICA3NjQ1MCwgNzY0NTQsIDc2NDU4LCA3NjQ2MiwgNzY0NjYsIDc2NDcwLCA3NjQ3NCwgNzY0NzgsIDc2NDgyLCA3NjQ4NiwgCi0gICAgNzY0OTAsIDc2NDk0LCA3NjQ5OCwgNzY1MDIsIDc2NTA2LCA3NjUxMCwgNzY1MTQsIDc2NTE4LCA3NjUyMiwgNzY1MjYsIAotICAgIDc2NTMwLCA3NjUzNCwgNzY1MzgsIDc2NTQyLCA3NjU0NiwgNzY1NTAsIDc2NTU0LCA3NjU1OCwgNzY1NjIsIDc2NTY2LCAKLSAgICA3NjU3MCwgNzY1NzQsIDc2NTc4LCA3NjU4MiwgNzY1ODYsIDc2NTkwLCA3NjU5NCwgNzY1OTgsIDc2NjAyLCA3NjYwNiwgCi0gICAgNzY2MTAsIDc2NjE0LCA3NjYxOCwgNzY2MjIsIDc2NjI2LCA3NjYzMCwgNzY2MzQsIDc2NjM4LCA3NjY0MiwgNzY2NDYsIAotICAgIDc2NjUwLCA3NjY1NCwgNzY2NTgsIDc2NjYyLCA3NjY2NiwgNzY2NzAsIDc2Njc0LCA3NjY3OCwgNzY2ODIsIDc2Njg2LCAKLSAgICA3NjY5MCwgNzY2OTQsIDc2Njk4LCA3NjcwMiwgNzY3MDYsIDc2NzEwLCA3NjcxNCwgNzY3MTgsIDc2NzIyLCA3NjcyNiwgCi0gICAgNzY3MzAsIDc2NzM0LCA3NjczOCwgNzY3NDIsIDc2NzQ2LCA3Njc1MCwgNzY3NTQsIDc2NzU4LCA3Njc2MiwgNzY3NjYsIAotICAgIDc2NzcwLCA3Njc3NCwgNzY3NzgsIDc2NzgyLCA3Njc4NiwgNzY3OTAsIDc2Nzk0LCA3Njc5OCwgNzY4MDIsIDc2ODA2LCAKLSAgICA3NjgxMCwgNzY4MTQsIDc2ODE4LCA3NjgyMiwgNzY4MjYsIDc2ODMwLCA3NjgzNCwgNzY4MzgsIDc2ODQyLCA3Njg0NiwgCi0gICAgNzY4NTAsIDc2ODU0LCA3Njg1OCwgNzY4NjIsIDc2ODY2LCA3Njg3MCwgNzY4NzQsIDc2ODc4LCA3Njg4MiwgNzY4ODYsIAotICAgIDc2ODkwLCA3Njg5NCwgNzY4OTgsIDc2OTAyLCA3NjkwNiwgNzY5MTAsIDc2OTE0LCA3NjkxOCwgNzY5MjIsIDc2OTI2LCAKLSAgICA3NjkzMCwgNzY5MzQsIDc2OTM4LCA3Njk0MiwgNzY5NDYsIDc2OTUwLCA3Njk1NCwgNzY5NTgsIDc2OTYyLCA3Njk2NiwgCi0gICAgNzY5NzAsIDc2OTc0LCA3Njk3OCwgNzY5ODIsIDc2OTg2LCA3Njk5MCwgNzY5OTQsIDc2OTk4LCA3NzAwMiwgNzcwMDYsIAotICAgIDc3MDEwLCA3NzAxNCwgNzcwMTgsIDc3MDIyLCA3NzAyNiwgNzcwMzAsIDc3MDM0LCA3NzAzOCwgNzcwNDIsIDc3MDQ2LCAKLSAgICA3NzA1MCwgNzcwNTQsIDc3MDU4LCA3NzA2MiwgNzcwNjYsIDc3MDcwLCA3NzA3NCwgNzcwNzgsIDc3MDgyLCA3NzA4NiwgCi0gICAgNzcwOTAsIDc3MDk0LCA3NzA5OCwgNzcxMDIsIDc3MTA2LCA3NzExMCwgNzcxMTQsIDc3MTE4LCA3NzEyMiwgNzcxMjYsIAotICAgIDc3MTMwLCA3NzEzNCwgNzcxMzgsIDc3MTQyLCA3NzE0NiwgNzcxNTAsIDc3MTU0LCA3NzE1OCwgNzcxNjIsIDc3MTY2LCAKLSAgICA3NzE3MCwgNzcxNzQsIDc3MTc4LCA3NzE4MiwgNzcxODYsIDc3MTkwLCA3NzE5NCwgNzcxOTgsIDc3MjAyLCA3NzIwNiwgCi0gICAgNzcyMTAsIDc3MjE0LCA3NzIxOCwgNzcyMjIsIDc3MjI2LCA3NzIzMCwgNzcyMzQsIDc3MjM4LCA3NzI0MiwgNzcyNDYsIAotICAgIDc3MjUwLCA3NzI1NCwgNzcyNTgsIDc3MjYyLCA3NzI2NiwgNzcyNzAsIDc3Mjc0LCA3NzI3OCwgNzcyODIsIDc3Mjg2LCAKLSAgICA3NzI5MCwgNzcyOTQsIDc3Mjk4LCA3NzMwMiwgNzczMDYsIDc3MzEwLCA3NzMxNCwgNzczMTgsIDc3MzIyLCA3NzMyNiwgCi0gICAgNzczMzAsIDc3MzM0LCA3NzMzOCwgNzczNDIsIDc3MzQ2LCA3NzM1MCwgNzczNTQsIDc3MzU4LCA3NzM2MiwgNzczNjYsIAotICAgIDc3MzcwLCA3NzM3NCwgNzczNzgsIDc3MzgyLCA3NzM4NiwgNzczOTAsIDc3Mzk0LCA3NzM5OCwgNzc0MDIsIDc3NDA2LCAKLSAgICA3NzQxMCwgNzc0MTQsIDc3NDE4LCA3NzQyMiwgNzc0MjYsIDc3NDMwLCA3NzQzNCwgNzc0MzgsIDc3NDQyLCA3NzQ0NiwgCi0gICAgNzc0NTAsIDc3NDU0LCA3NzQ1OCwgNzc0NjIsIDc3NDY2LCA3NzQ3MCwgNzc0NzQsIDc3NDc4LCA3NzQ4MiwgNzc0ODYsIAotICAgIDc3NDkwLCA3NzQ5NCwgNzc0OTgsIDc3NTAyLCA3NzUwNiwgNzc1MTAsIDc3NTE0LCA3NzUxOCwgNzc1MjIsIDc3NTI2LCAKLSAgICA3NzUzMCwgNzc1MzQsIDc3NTM4LCA3NzU0MiwgNzc1NDYsIDc3NTUwLCA3NzU1NCwgNzc1NTgsIDc3NTYyLCA3NzU2NiwgCi0gICAgNzc1NzAsIDc3NTc0LCA3NzU3OCwgNzc1ODIsIDc3NTg2LCA3NzU5MCwgNzc1OTQsIDc3NTk4LCA3NzYwMiwgNzc2MDYsIAotICAgIDc3NjEwLCA3NzYxNCwgNzc2MTgsIDc3NjIyLCA3NzYyNiwgNzc2MzAsIDc3NjM0LCA3NzYzOCwgNzc2NDIsIDc3NjQ2LCAKLSAgICA3NzY1MCwgNzc2NTQsIDc3NjU4LCA3NzY2MiwgNzc2NjYsIDc3NjcwLCA3NzY3NCwgNzc2NzgsIDc3NjgyLCA3NzY4NiwgCi0gICAgNzc2OTAsIDc3Njk0LCA3NzY5OCwgNzc3MDIsIDc3NzA2LCA3NzcxMCwgNzc3MTQsIDc3NzE4LCA3NzcyMiwgNzc3MjYsIAotICAgIDc3NzMwLCA3NzczNCwgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU0LCA3Nzc1OCwgNzc3NjIsIDc3NzY2LCAKLSAgICA3Nzc3MCwgNzc3NzQsIDc3Nzc4LCA3Nzc4MiwgNzc3ODYsIDc3NzkwLCA3Nzc5NCwgNzc3OTgsIDc3ODAyLCA3NzgwNiwgCi0gICAgNzc4MTAsIDc3ODE0LCA3NzgxOCwgNzc4MjIsIDc3ODI2LCA3NzgzMCwgNzc4MzQsIDc3ODM4LCA3Nzg0MiwgNzc4NDYsIAotICAgIDc3ODUwLCAwLCAwLCA3Nzg1NCwgNzc4NTgsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc0LCA3Nzg3OCwgNzc4ODIsIAotICAgIDc3ODg2LCA3Nzg5MCwgNzc4OTQsIDc3ODk4LCA3NzkwMiwgNzc5MDYsIDc3OTEwLCA3NzkxNCwgNzc5MTgsIDc3OTIyLCAKLSAgICA3NzkyNiwgNzc5MzAsIDc3OTM0LCA3NzkzOCwgNzc5NDIsIDc3OTQ2LCA3Nzk1MCwgNzc5NTQsIDc3OTU4LCA3Nzk2MiwgCi0gICAgNzc5NjYsIDc3OTcwLCA3Nzk3NCwgNzc5NzgsIDc3OTgyLCA3Nzk4NiwgNzc5OTAsIDc3OTk0LCA3Nzk5OCwgNzgwMDIsIAotICAgIDc4MDA2LCA3ODAxMCwgNzgwMTQsIDc4MDE4LCA3ODAyMiwgNzgwMjYsIDc4MDMwLCA3ODAzNCwgNzgwMzgsIDc4MDQyLCAKLSAgICA3ODA0NiwgNzgwNTAsIDc4MDU0LCA3ODA1OCwgNzgwNjIsIDc4MDY2LCA3ODA3MCwgNzgwNzQsIDc4MDc4LCA3ODA4MiwgCi0gICAgNzgwODYsIDc4MDkwLCA3ODA5NCwgNzgwOTgsIDc4MTAyLCA3ODEwNiwgNzgxMTAsIDc4MTE0LCA3ODExOCwgNzgxMjIsIAotICAgIDc4MTI2LCA3ODEzMCwgNzgxMzQsIDc4MTM4LCA3ODE0MiwgNzgxNDYsIDc4MTUwLCA3ODE1NCwgNzgxNTgsIDc4MTYyLCAKLSAgICA3ODE2NiwgNzgxNzAsIDc4MTc0LCA3ODE3OCwgNzgxODIsIDc4MTg2LCA3ODE5MCwgNzgxOTQsIDc4MTk4LCA3ODIwMiwgCi0gICAgNzgyMDYsIDc4MjEwLCA3ODIxNCwgNzgyMTgsIDc4MjIyLCA3ODIyNiwgNzgyMzAsIDc4MjM0LCA3ODIzOCwgNzgyNDIsIAotICAgIDc4MjQ2LCA3ODI1MCwgNzgyNTQsIDc4MjU4LCA3ODI2MiwgNzgyNjYsIDc4MjcwLCA3ODI3NCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzYxMzAsIDc2MTM0LCA3NjEzOCwgNzYxNDIsIDc2MTQ2LCAKKyAgICA3NjE1MCwgNzYxNTQsIDc2MTU4LCA3NjE2MiwgNzYxNjYsIDc2MTcwLCA3NjE3NCwgNzYxNzgsIDc2MTgyLCA3NjE4NiwgCisgICAgNzYxOTAsIDc2MTk0LCA3NjE5OCwgNzYyMDIsIDc2MjA2LCA3NjIxMCwgNzYyMTQsIDc2MjE4LCAwLCAwLCAwLCAwLCAKKyAgICA3NjIyMiwgNzYyMjYsIDc2MjMwLCA3NjIzNCwgNzYyMzgsIDc2MjQyLCA3NjI0NiwgNzYyNTAsIDc2MjU0LCA3NjI1OCwgCisgICAgNzYyNjIsIDc2MjY2LCA3NjI3MCwgNzYyNzQsIDc2Mjc4LCA3NjI4MiwgNzYyODYsIDc2MjkwLCA3NjI5NCwgNzYyOTgsIAorICAgIDc2MzAyLCA3NjMwNiwgNzYzMTAsIDc2MzE0LCA3NjMxOCwgNzYzMjIsIDc2MzI2LCA3NjMzMCwgNzYzMzQsIDc2MzM4LCAKKyAgICA3NjM0MiwgNzYzNDYsIDc2MzUwLCA3NjM1NCwgNzYzNTgsIDc2MzYyLCA3NjM2NiwgNzYzNzAsIDc2Mzc0LCA3NjM3OCwgCisgICAgNzYzODIsIDc2Mzg2LCA3NjM5MCwgNzYzOTQsIDc2Mzk4LCA3NjQwMiwgNzY0MDYsIDc2NDEwLCA3NjQxNCwgMCwgMCwgMCwgCisgICAgMCwgNzY0MTgsIDc2NDIyLCA3NjQyNiwgNzY0MzAsIDc2NDM0LCA3NjQzOCwgNzY0NDIsIDc2NDQ2LCA3NjQ1MCwgNzY0NTQsIAorICAgIDc2NDU4LCA3NjQ2MiwgNzY0NjYsIDc2NDcwLCA3NjQ3NCwgNzY0NzgsIDc2NDgyLCA3NjQ4NiwgNzY0OTAsIDc2NDk0LCAKKyAgICA3NjQ5OCwgNzY1MDIsIDc2NTA2LCA3NjUxMCwgNzY1MTQsIDc2NTE4LCA3NjUyMiwgNzY1MjYsIDc2NTMwLCA3NjUzNCwgCisgICAgNzY1MzgsIDc2NTQyLCA3NjU0NiwgNzY1NTAsIDc2NTU0LCA3NjU1OCwgNzY1NjIsIDc2NTY2LCA3NjU3MCwgNzY1NzQsIAorICAgIDc2NTc4LCA3NjU4MiwgNzY1ODYsIDc2NTkwLCA3NjU5NCwgNzY1OTgsIDc2NjAyLCA3NjYwNiwgNzY2MTAsIDc2NjE0LCAKKyAgICA3NjYxOCwgNzY2MjIsIDc2NjI2LCA3NjYzMCwgNzY2MzQsIDc2NjM4LCA3NjY0MiwgNzY2NDYsIDc2NjUwLCA3NjY1NCwgCisgICAgNzY2NTgsIDc2NjYyLCA3NjY2NiwgNzY2NzAsIDc2Njc0LCA3NjY3OCwgNzY2ODIsIDc2Njg2LCA3NjY5MCwgNzY2OTQsIAorICAgIDc2Njk4LCA3NjcwMiwgNzY3MDYsIDc2NzEwLCA3NjcxNCwgNzY3MTgsIDc2NzIyLCA3NjcyNiwgNzY3MzAsIDc2NzM0LCAKKyAgICA3NjczOCwgNzY3NDIsIDc2NzQ2LCA3Njc1MCwgNzY3NTQsIDc2NzU4LCA3Njc2MiwgNzY3NjYsIDc2NzcwLCA3Njc3NCwgCisgICAgNzY3NzgsIDc2NzgyLCA3Njc4NiwgNzY3OTAsIDc2Nzk0LCA3Njc5OCwgNzY4MDIsIDc2ODA2LCA3NjgxMCwgNzY4MTQsIAorICAgIDc2ODE4LCA3NjgyMiwgNzY4MjYsIDc2ODMwLCA3NjgzNCwgNzY4MzgsIDc2ODQyLCA3Njg0NiwgNzY4NTAsIDc2ODU0LCAKKyAgICA3Njg1OCwgNzY4NjIsIDc2ODY2LCA3Njg3MCwgNzY4NzQsIDc2ODc4LCA3Njg4MiwgNzY4ODYsIDc2ODkwLCA3Njg5NCwgCisgICAgNzY4OTgsIDc2OTAyLCA3NjkwNiwgNzY5MTAsIDc2OTE0LCA3NjkxOCwgNzY5MjIsIDc2OTI2LCA3NjkzMCwgNzY5MzQsIAorICAgIDc2OTM4LCA3Njk0MiwgNzY5NDYsIDc2OTUwLCA3Njk1NCwgNzY5NTgsIDc2OTYyLCA3Njk2NiwgNzY5NzAsIDc2OTc0LCAKKyAgICA3Njk3OCwgNzY5ODIsIDc2OTg2LCA3Njk5MCwgNzY5OTQsIDc2OTk4LCA3NzAwMiwgNzcwMDYsIDc3MDEwLCA3NzAxNCwgCisgICAgNzcwMTgsIDc3MDIyLCA3NzAyNiwgNzcwMzAsIDc3MDM0LCA3NzAzOCwgNzcwNDIsIDc3MDQ2LCA3NzA1MCwgNzcwNTQsIAorICAgIDc3MDU4LCA3NzA2MiwgNzcwNjYsIDc3MDcwLCA3NzA3NCwgNzcwNzgsIDc3MDgyLCA3NzA4NiwgNzcwOTAsIDc3MDk0LCAKKyAgICA3NzA5OCwgNzcxMDIsIDc3MTA2LCA3NzExMCwgNzcxMTQsIDc3MTE4LCA3NzEyMiwgNzcxMjYsIDc3MTMwLCA3NzEzNCwgCisgICAgNzcxMzgsIDc3MTQyLCA3NzE0NiwgNzcxNTAsIDc3MTU0LCA3NzE1OCwgNzcxNjIsIDc3MTY2LCA3NzE3MCwgNzcxNzQsIAorICAgIDc3MTc4LCA3NzE4MiwgNzcxODYsIDc3MTkwLCA3NzE5NCwgNzcxOTgsIDc3MjAyLCA3NzIwNiwgNzcyMTAsIDc3MjE0LCAKKyAgICA3NzIxOCwgNzcyMjIsIDc3MjI2LCA3NzIzMCwgNzcyMzQsIDc3MjM4LCA3NzI0MiwgNzcyNDYsIDc3MjUwLCA3NzI1NCwgCisgICAgNzcyNTgsIDc3MjYyLCA3NzI2NiwgNzcyNzAsIDc3Mjc0LCA3NzI3OCwgNzcyODIsIDc3Mjg2LCA3NzI5MCwgNzcyOTQsIAorICAgIDc3Mjk4LCA3NzMwMiwgNzczMDYsIDc3MzEwLCA3NzMxNCwgNzczMTgsIDc3MzIyLCA3NzMyNiwgNzczMzAsIDc3MzM0LCAKKyAgICA3NzMzOCwgNzczNDIsIDc3MzQ2LCA3NzM1MCwgNzczNTQsIDc3MzU4LCA3NzM2MiwgNzczNjYsIDc3MzcwLCA3NzM3NCwgCisgICAgNzczNzgsIDc3MzgyLCA3NzM4NiwgNzczOTAsIDc3Mzk0LCA3NzM5OCwgNzc0MDIsIDc3NDA2LCA3NzQxMCwgNzc0MTQsIAorICAgIDc3NDE4LCA3NzQyMiwgNzc0MjYsIDc3NDMwLCA3NzQzNCwgNzc0MzgsIDc3NDQyLCA3NzQ0NiwgNzc0NTAsIDc3NDU0LCAKKyAgICA3NzQ1OCwgNzc0NjIsIDc3NDY2LCA3NzQ3MCwgNzc0NzQsIDc3NDc4LCA3NzQ4MiwgNzc0ODYsIDc3NDkwLCA3NzQ5NCwgCisgICAgNzc0OTgsIDc3NTAyLCA3NzUwNiwgNzc1MTAsIDc3NTE0LCA3NzUxOCwgNzc1MjIsIDc3NTI2LCA3NzUzMCwgNzc1MzQsIAorICAgIDc3NTM4LCA3NzU0MiwgNzc1NDYsIDc3NTUwLCA3NzU1NCwgNzc1NTgsIDc3NTYyLCA3NzU2NiwgNzc1NzAsIDc3NTc0LCAKKyAgICA3NzU3OCwgNzc1ODIsIDc3NTg2LCA3NzU5MCwgNzc1OTQsIDc3NTk4LCA3NzYwMiwgNzc2MDYsIDc3NjEwLCA3NzYxNCwgCisgICAgNzc2MTgsIDc3NjIyLCA3NzYyNiwgNzc2MzAsIDc3NjM0LCA3NzYzOCwgNzc2NDIsIDc3NjQ2LCA3NzY1MCwgNzc2NTQsIAorICAgIDc3NjU4LCA3NzY2MiwgNzc2NjYsIDc3NjcwLCA3NzY3NCwgNzc2NzgsIDc3NjgyLCA3NzY4NiwgNzc2OTAsIDc3Njk0LCAKKyAgICA3NzY5OCwgNzc3MDIsIDc3NzA2LCA3NzcxMCwgNzc3MTQsIDc3NzE4LCA3NzcyMiwgNzc3MjYsIDc3NzMwLCA3NzczNCwgCisgICAgNzc3MzgsIDc3NzQyLCA3Nzc0NiwgNzc3NTAsIDc3NzU0LCA3Nzc1OCwgNzc3NjIsIDc3NzY2LCA3Nzc3MCwgNzc3NzQsIAorICAgIDc3Nzc4LCA3Nzc4MiwgNzc3ODYsIDc3NzkwLCA3Nzc5NCwgNzc3OTgsIDc3ODAyLCA3NzgwNiwgNzc4MTAsIDc3ODE0LCAKKyAgICA3NzgxOCwgNzc4MjIsIDc3ODI2LCA3NzgzMCwgNzc4MzQsIDc3ODM4LCA3Nzg0MiwgNzc4NDYsIDc3ODUwLCA3Nzg1NCwgCisgICAgNzc4NTgsIDc3ODYyLCA3Nzg2NiwgNzc4NzAsIDc3ODc0LCA3Nzg3OCwgMCwgMCwgNzc4ODIsIDc3ODg2LCA3Nzg5MCwgCisgICAgNzc4OTQsIDc3ODk4LCA3NzkwMiwgNzc5MDYsIDc3OTEwLCA3NzkxNCwgNzc5MTgsIDc3OTIyLCA3NzkyNiwgNzc5MzAsIAorICAgIDc3OTM0LCA3NzkzOCwgNzc5NDIsIDc3OTQ2LCA3Nzk1MCwgNzc5NTQsIDc3OTU4LCA3Nzk2MiwgNzc5NjYsIDc3OTcwLCAKKyAgICA3Nzk3NCwgNzc5NzgsIDc3OTgyLCA3Nzk4NiwgNzc5OTAsIDc3OTk0LCA3Nzk5OCwgNzgwMDIsIDc4MDA2LCA3ODAxMCwgCisgICAgNzgwMTQsIDc4MDE4LCA3ODAyMiwgNzgwMjYsIDc4MDMwLCA3ODAzNCwgNzgwMzgsIDc4MDQyLCA3ODA0NiwgNzgwNTAsIAorICAgIDc4MDU0LCA3ODA1OCwgNzgwNjIsIDc4MDY2LCA3ODA3MCwgNzgwNzQsIDc4MDc4LCA3ODA4MiwgNzgwODYsIDc4MDkwLCAKKyAgICA3ODA5NCwgNzgwOTgsIDc4MTAyLCA3ODEwNiwgNzgxMTAsIDc4MTE0LCA3ODExOCwgNzgxMjIsIDc4MTI2LCA3ODEzMCwgCisgICAgNzgxMzQsIDc4MTM4LCA3ODE0MiwgNzgxNDYsIDc4MTUwLCA3ODE1NCwgNzgxNTgsIDc4MTYyLCA3ODE2NiwgNzgxNzAsIAorICAgIDc4MTc0LCA3ODE3OCwgNzgxODIsIDc4MTg2LCA3ODE5MCwgNzgxOTQsIDc4MTk4LCA3ODIwMiwgNzgyMDYsIDc4MjEwLCAKKyAgICA3ODIxNCwgNzgyMTgsIDc4MjIyLCA3ODIyNiwgNzgyMzAsIDc4MjM0LCA3ODIzOCwgNzgyNDIsIDc4MjQ2LCA3ODI1MCwgCisgICAgNzgyNTQsIDc4MjU4LCA3ODI2MiwgNzgyNjYsIDc4MjcwLCA3ODI3NCwgNzgyNzgsIDc4MjgyLCA3ODI4NiwgNzgyOTAsIAorICAgIDc4Mjk0LCA3ODI5OCwgNzgzMDIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDc4MzA2LCAKKyAgICA3ODMxMSwgNzgzMTYsIDc4MzIxLCA3ODMyNiwgNzgzMzEsIDc4MzM5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCA3ODM0NCwgNzgzNTEsIDc4MzU4LCA3ODM2NSwgNzgzNzIsIDAsIDAsIDAsIDAsIDAsIDc4Mzc5LCA3ODM4NiwgCisgICAgNzgzOTMsIDc4NDAzLCA3ODQwOSwgNzg0MTUsIDc4NDIxLCA3ODQyNywgNzg0MzMsIDc4NDM5LCA3ODQ0NiwgNzg0NTIsIAorICAgIDc4NDU4LCA3ODQ2NCwgNzg0NzMsIDc4NDgyLCA3ODQ5NCwgNzg1MDYsIDc4NTEyLCA3ODUxOCwgNzg1MjQsIDc4NTMxLCAKKyAgICA3ODUzOCwgNzg1NDUsIDc4NTUyLCA3ODU1OSwgMCwgNzg1NjYsIDc4NTczLCA3ODU4MCwgNzg1ODgsIDc4NTk1LCAwLCAKKyAgICA3ODYwMiwgMCwgNzg2MDksIDc4NjE2LCAwLCA3ODYyMywgNzg2MzEsIDAsIDc4NjM4LCA3ODY0NSwgNzg2NTIsIDc4NjU5LCAKKyAgICA3ODY2NiwgNzg2NzMsIDc4NjgwLCA3ODY4NywgNzg2OTQsIDc4NzAxLCA3ODcwNiwgNzg3MTMsIDc4NzIwLCA3ODcyNiwgCisgICAgNzg3MzIsIDc4NzM4LCA3ODc0NCwgNzg3NTAsIDc4NzU2LCA3ODc2MiwgNzg3NjgsIDc4Nzc0LCA3ODc4MCwgNzg3ODYsIAorICAgIDc4NzkyLCA3ODc5OCwgNzg4MDQsIDc4ODEwLCA3ODgxNiwgNzg4MjIsIDc4ODI4LCA3ODgzNCwgNzg4NDAsIDc4ODQ2LCAKKyAgICA3ODg1MiwgNzg4NTgsIDc4ODY0LCA3ODg3MCwgNzg4NzYsIDc4ODgyLCA3ODg4OCwgNzg4OTQsIDc4OTAwLCA3ODkwNiwgCisgICAgNzg5MTIsIDc4OTE4LCA3ODkyNCwgNzg5MzAsIDc4OTM2LCA3ODk0MiwgNzg5NDgsIDc4OTU0LCA3ODk2MCwgNzg5NjYsIAorICAgIDc4OTcyLCA3ODk3OCwgNzg5ODQsIDc4OTkwLCA3ODk5NiwgNzkwMDIsIDc5MDA4LCA3OTAxNCwgNzkwMjAsIDc5MDI2LCAKKyAgICA3OTAzMiwgNzkwMzgsIDc5MDQ0LCA3OTA1MCwgNzkwNTYsIDc5MDYyLCA3OTA2OCwgNzkwNzQsIDc5MDgwLCA3OTA4NiwgCisgICAgNzkwOTIsIDc5MDk4LCA3OTEwNCwgNzkxMTAsIDc5MTE2LCA3OTEyMiwgNzkxMjgsIDc5MTM0LCA3OTE0MCwgNzkxNDYsIAorICAgIDc5MTUyLCA3OTE1OCwgNzkxNjQsIDc5MTcwLCA3OTE3NiwgNzkxODQsIDc5MTkyLCA3OTE5OCwgNzkyMDQsIDc5MjEwLCAKKyAgICA3OTIxNiwgNzkyMjUsIDc5MjM0LCA3OTI0MiwgNzkyNTAsIDc5MjU4LCA3OTI2NiwgNzkyNzQsIDc5MjgyLCA3OTI5MCwgCisgICAgNzkyOTgsIDc5MzA1LCA3OTMxMiwgNzkzMjIsIDc5MzMyLCA3OTMzNiwgNzkzNDAsIDc5MzQ1LCA3OTM1MCwgNzkzNTUsIAorICAgIDc5MzYwLCA3OTM2OSwgNzkzNzgsIDc5Mzg0LCA3OTM5MCwgNzkzOTcsIDc5NDA0LCA3OTQxMSwgNzk0MTUsIDc5NDIxLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3OTQyNywgNzk0MzMsIDc5NDM5LCAKKyAgICA3OTQ0NSwgNzk0NTEsIDc5NDU2LCA3OTQ2MSwgNzk0NjcsIDc5NDczLCA3OTQ3OSwgNzk0ODUsIDc5NDkzLCA3OTQ5OSwgCisgICAgNzk1MDUsIDc5NTEzLCA3OTUyMSwgNzk1MjksIDc5NTM3LCA3OTU0MiwgNzk1NDcsIDc5NTUyLCA3OTU1NywgNzk1NzAsIAorICAgIDc5NTgzLCA3OTU5MywgNzk2MDMsIDc5NjE0LCA3OTYyNSwgNzk2MzYsIDc5NjQ3LCA3OTY1NywgNzk2NjcsIDc5Njc4LCAKKyAgICA3OTY4OSwgNzk3MDAsIDc5NzExLCA3OTcyMSwgNzk3MzEsIDc5NzQxLCA3OTc1NywgNzk3NzMsIDc5Nzg5LCA3OTc5NiwgCisgICAgNzk4MDMsIDc5ODEwLCA3OTgxNywgNzk4MjcsIDc5ODM3LCA3OTg0NywgNzk4NTksIDc5ODY5LCA3OTg3NywgNzk4ODUsIAorICAgIDc5ODk0LCA3OTkwMiwgNzk5MTIsIDc5OTIwLCA3OTkyOCwgNzk5MzYsIDc5OTQ1LCA3OTk1MywgNzk5NjMsIDc5OTcxLCAKKyAgICA3OTk3OSwgNzk5ODcsIDc5OTk3LCA4MDAwNSwgODAwMTIsIDgwMDE5LCA4MDAyNiwgODAwMzMsIDgwMDQxLCA4MDA0OSwgCisgICAgODAwNTcsIDgwMDY1LCA4MDA3MywgODAwODIsIDgwMDkwLCA4MDA5OCwgODAxMDYsIDgwMTE0LCA4MDEyMiwgODAxMzEsIAorICAgIDgwMTM5LCA4MDE0NywgODAxNTUsIDgwMTYzLCA4MDE3MSwgODAxNzksIDgwMTg3LCA4MDE5NSwgODAyMDMsIDgwMjExLCAKKyAgICA4MDIyMCwgODAyMjgsIDgwMjM4LCA4MDI0NiwgODAyNTQsIDgwMjYyLCA4MDI3MiwgODAyODAsIDgwMjg4LCA4MDI5NiwgCisgICAgODAzMDQsIDgwMzEzLCA4MDMyMiwgODAzMzAsIDgwMzQwLCA4MDM0OCwgODAzNTYsIDgwMzY0LCA4MDM3MywgODAzODEsIAorICAgIDgwMzkxLCA4MDM5OSwgODA0MDYsIDgwNDEzLCA4MDQyMSwgODA0MjgsIDgwNDM3LCA4MDQ0NCwgODA0NTIsIDgwNDYwLCAKKyAgICA4MDQ2OSwgODA0NzcsIDgwNDg3LCA4MDQ5NSwgODA1MDMsIDgwNTExLCA4MDUyMSwgODA1MjksIDgwNTM2LCA4MDU0MywgCisgICAgODA1NTEsIDgwNTU4LCA4MDU2NywgODA1NzQsIDgwNTg0LCA4MDU5NCwgODA2MDUsIDgwNjE0LCA4MDYyMywgODA2MzIsIAorICAgIDgwNjQxLCA4MDY1MCwgODA2NjAsIDgwNjcxLCA4MDY4MiwgODA2OTIsIDgwNzAzLCA4MDcxNSwgODA3MjUsIDgwNzM0LCAKKyAgICA4MDc0MywgODA3NTEsIDgwNzYwLCA4MDc3MCwgODA3NzgsIDgwNzg3LCA4MDc5NiwgODA4MDQsIDgwODEzLCA4MDgyMywgCisgICAgODA4MzEsIDgwODQwLCA4MDg0OSwgODA4NTcsIDgwODY2LCA4MDg3NiwgODA4ODQsIDgwODk0LCA4MDkwMiwgODA5MTIsIAorICAgIDgwOTIwLCA4MDkyOCwgODA5MzcsIDgwOTQ1LCA4MDk1NSwgODA5NjMsIDgwOTcxLCA4MDk4MSwgODA5ODksIDgwOTk2LCAKKyAgICA4MTAwMywgODEwMTIsIDgxMDIxLCA4MTAyOSwgODEwMzgsIDgxMDQ4LCA4MTA1NiwgODEwNjcsIDgxMDc1LCA4MTA4MywgCisgICAgODEwOTAsIDgxMDk4LCA4MTEwNywgODExMTQsIDgxMTI0LCA4MTEzNCwgODExNDUsIDgxMTU1LCA4MTE2NiwgODExNzQsIAorICAgIDgxMTgyLCA4MTE5MSwgODExOTksIDgxMjA4LCA4MTIxNiwgODEyMjQsIDgxMjMzLCA4MTI0MSwgODEyNTAsIDgxMjU4LCAKKyAgICA4MTI2NSwgODEyNzIsIDgxMjc5LCA4MTI4NiwgODEyOTQsIDgxMzAyLCA4MTMxMCwgODEzMTgsIDgxMzI3LCA4MTMzNSwgCisgICAgODEzNDMsIDgxMzUyLCA4MTM2MCwgODEzNjgsIDgxMzc2LCA4MTM4NSwgODEzOTMsIDgxNDAxLCA4MTQwOSwgODE0MTcsIAorICAgIDgxNDI1LCA4MTQzMywgODE0NDEsIDgxNDQ5LCA4MTQ1NywgODE0NjYsIDgxNDc0LCA4MTQ4MiwgODE0OTAsIDgxNDk4LCAKKyAgICA4MTUwNiwgODE1MTUsIDgxNTI0LCA4MTUzMiwgODE1NDAsIDgxNTQ4LCA4MTU1NywgODE1NjUsIDgxNTc0LCA4MTU4MSwgCisgICAgODE1ODgsIDgxNTk2LCA4MTYwMywgODE2MTEsIDgxNjE5LCA4MTYyOCwgODE2MzYsIDgxNjQ1LCA4MTY1MywgODE2NjEsIAorICAgIDgxNjcxLCA4MTY3OCwgODE2ODUsIDgxNjkzLCA4MTcwMCwgODE3MDgsIDgxNzE4LCA4MTcyOSwgODE3MzcsIDgxNzQ2LCAKKyAgICA4MTc1NCwgODE3NjMsIDgxNzcxLCA4MTc4MCwgODE3ODgsIDgxNzk3LCA4MTgwNSwgODE4MTQsIDgxODIzLCA4MTgzMSwgCisgICAgODE4MzksIDgxODQ3LCA4MTg1NiwgODE4NjMsIDgxODcxLCA4MTg4MCwgODE4ODksIDgxODk4LCA4MTkwOCwgODE5MTYsIAorICAgIDgxOTI2LCA4MTkzNCwgODE5NDQsIDgxOTUyLCA4MTk2MiwgODE5NzAsIDgxOTgwLCA4MTk4OCwgODE5OTcsIDgyMDA0LCAKKyAgICA4MjAxMywgODIwMjAsIDgyMDMwLCA4MjAzOCwgODIwNDgsIDgyMDU2LCA4MjA2NiwgODIwNzQsIDgyMDgyLCA4MjA5MCwgCisgICAgODIwOTksIDgyMTA3LCA4MjExNiwgODIxMjUsIDgyMTM0LCA4MjE0MywgODIxNTMsIDgyMTYxLCA4MjE3MSwgODIxNzksIAorICAgIDgyMTg5LCA4MjE5NywgODIyMDcsIDgyMjE1LCA4MjIyNSwgODIyMzMsIDgyMjQyLCA4MjI0OSwgODIyNTgsIDgyMjY1LCAKKyAgICA4MjI3NSwgODIyODMsIDgyMjkzLCA4MjMwMSwgODIzMTEsIDgyMzE5LCA4MjMyNywgODIzMzUsIDgyMzQ0LCA4MjM1MiwgCisgICAgODIzNjEsIDgyMzcwLCA4MjM3OSwgODIzODgsIDgyMzk2LCA4MjQwNCwgODI0MTMsIDgyNDIxLCA4MjQzMCwgODI0MzksIAorICAgIDgyNDQ3LCA4MjQ1NSwgODI0NjMsIDgyNDcyLCA4MjQ4MCwgODI0ODgsIDgyNDk3LCA4MjUwNSwgODI1MTMsIDgyNTIxLCAKKyAgICA4MjUyOSwgODI1MzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDgyNTM5LCAKKyAgICA4MjU0OSwgODI1NTksIDgyNTY5LCA4MjU3OSwgODI1OTAsIDgyNjAwLCA4MjYxMCwgODI2MjEsIDgyNjMwLCA4MjYzOSwgCisgICAgODI2NDgsIDgyNjU5LCA4MjY2OSwgODI2NzksIDgyNjkxLCA4MjcwMSwgODI3MTEsIDgyNzIxLCA4MjczMSwgODI3NDEsIAorICAgIDgyNzUxLCA4Mjc2MSwgODI3NzEsIDgyNzgxLCA4Mjc5MSwgODI4MDEsIDgyODEyLCA4MjgyMywgODI4MzMsIDgyODQzLCAKKyAgICA4Mjg1NSwgODI4NjYsIDgyODc3LCA4Mjg4NywgODI4OTcsIDgyOTA3LCA4MjkxNywgODI5MjcsIDgyOTM3LCA4Mjk0NywgCisgICAgODI5NTksIDgyOTY5LCA4Mjk3OSwgODI5OTEsIDgzMDAyLCA4MzAxMywgODMwMjMsIDgzMDMzLCA4MzA0MywgODMwNTMsIAorICAgIDgzMDY1LCA4MzA3NSwgODMwODUsIDgzMDk2LCA4MzEwNywgODMxMTcsIDgzMTI3LCA4MzEzNiwgODMxNDUsIDgzMTU0LCAKKyAgICA4MzE2MywgODMxNzIsIDgzMTgyLCAwLCAwLCA4MzE5MiwgODMyMDIsIDgzMjEyLCA4MzIyMiwgODMyMzIsIDgzMjQ0LCAKKyAgICA4MzI1NCwgODMyNjQsIDgzMjc2LCA4MzI4NiwgODMyOTgsIDgzMzA3LCA4MzMxNiwgODMzMjcsIDgzMzM3LCA4MzM0OSwgCisgICAgODMzNjAsIDgzMzczLCA4MzM4MywgODMzOTUsIDgzNDA0LCA4MzQxNSwgODM0MjYsIDgzNDM5LCA4MzQ0OSwgODM0NTksIAorICAgIDgzNDY5LCA4MzQ3OSwgODM0ODksIDgzNDk4LCA4MzUwNywgODM1MTYsIDgzNTI1LCA4MzUzNSwgODM1NDUsIDgzNTU1LCAKKyAgICA4MzU2NSwgODM1NzUsIDgzNTg1LCA4MzU5NSwgODM2MDUsIDgzNjE1LCA4MzYyNSwgODM2MzUsIDgzNjQ1LCA4MzY1NCwgCisgICAgODM2NjMsIDgzNjcyLCA4MzY4MiwgODM2OTIsIDgzNzAyLCA4MzcxMiwgODM3MjIsIDgzNzMzLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA3ODI3OCwgNzgyODMsIDc4Mjg4LCA3ODI5MywgNzgyOTgsIDc4MzAzLCA3ODMxMSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgNzgzMTYsIDc4MzIzLCA3ODMzMCwgNzgzMzcsIDc4MzQ0LCAwLCAKLSAgICAwLCAwLCAwLCAwLCA3ODM1MSwgNzgzNTgsIDc4MzY1LCA3ODM3NSwgNzgzODEsIDc4Mzg3LCA3ODM5MywgNzgzOTksIAotICAgIDc4NDA1LCA3ODQxMSwgNzg0MTgsIDc4NDI0LCA3ODQzMCwgNzg0MzYsIDc4NDQ1LCA3ODQ1NCwgNzg0NjYsIDc4NDc4LCAKLSAgICA3ODQ4NCwgNzg0OTAsIDc4NDk2LCA3ODUwMywgNzg1MTAsIDc4NTE3LCA3ODUyNCwgNzg1MzEsIDAsIDc4NTM4LCA3ODU0NSwgCi0gICAgNzg1NTIsIDc4NTYwLCA3ODU2NywgMCwgNzg1NzQsIDAsIDc4NTgxLCA3ODU4OCwgMCwgNzg1OTUsIDc4NjAzLCAwLCAKLSAgICA3ODYxMCwgNzg2MTcsIDc4NjI0LCA3ODYzMSwgNzg2MzgsIDc4NjQ1LCA3ODY1MiwgNzg2NTksIDc4NjY2LCA3ODY3MywgCi0gICAgNzg2NzgsIDc4Njg1LCA3ODY5MiwgNzg2OTgsIDc4NzA0LCA3ODcxMCwgNzg3MTYsIDc4NzIyLCA3ODcyOCwgNzg3MzQsIAotICAgIDc4NzQwLCA3ODc0NiwgNzg3NTIsIDc4NzU4LCA3ODc2NCwgNzg3NzAsIDc4Nzc2LCA3ODc4MiwgNzg3ODgsIDc4Nzk0LCAKLSAgICA3ODgwMCwgNzg4MDYsIDc4ODEyLCA3ODgxOCwgNzg4MjQsIDc4ODMwLCA3ODgzNiwgNzg4NDIsIDc4ODQ4LCA3ODg1NCwgCi0gICAgNzg4NjAsIDc4ODY2LCA3ODg3MiwgNzg4NzgsIDc4ODg0LCA3ODg5MCwgNzg4OTYsIDc4OTAyLCA3ODkwOCwgNzg5MTQsIAotICAgIDc4OTIwLCA3ODkyNiwgNzg5MzIsIDc4OTM4LCA3ODk0NCwgNzg5NTAsIDc4OTU2LCA3ODk2MiwgNzg5NjgsIDc4OTc0LCAKLSAgICA3ODk4MCwgNzg5ODYsIDc4OTkyLCA3ODk5OCwgNzkwMDQsIDc5MDEwLCA3OTAxNiwgNzkwMjIsIDc5MDI4LCA3OTAzNCwgCi0gICAgNzkwNDAsIDc5MDQ2LCA3OTA1MiwgNzkwNTgsIDc5MDY0LCA3OTA3MCwgNzkwNzYsIDc5MDgyLCA3OTA4OCwgNzkwOTQsIAotICAgIDc5MTAwLCA3OTEwNiwgNzkxMTIsIDc5MTE4LCA3OTEyNCwgNzkxMzAsIDc5MTM2LCA3OTE0MiwgNzkxNDgsIDc5MTU2LCAKLSAgICA3OTE2NCwgNzkxNzAsIDc5MTc2LCA3OTE4MiwgNzkxODgsIDc5MTk3LCA3OTIwNiwgNzkyMTQsIDc5MjIyLCA3OTIzMCwgCi0gICAgNzkyMzgsIDc5MjQ2LCA3OTI1NCwgNzkyNjIsIDc5MjcwLCA3OTI3NywgNzkyODQsIDc5Mjk0LCA3OTMwNCwgNzkzMDgsIAotICAgIDc5MzEyLCA3OTMxNywgNzkzMjIsIDc5MzI3LCA3OTMzMiwgNzkzNDEsIDc5MzUwLCA3OTM1NiwgNzkzNjIsIDc5MzY5LCAKLSAgICA3OTM3NiwgNzkzODMsIDc5Mzg3LCA3OTM5MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgNzkzOTksIDc5NDA1LCA3OTQxMSwgNzk0MTcsIDc5NDIzLCA3OTQyOCwgNzk0MzMsIDc5NDM5LCA3OTQ0NSwgCi0gICAgNzk0NTEsIDc5NDU3LCA3OTQ2NSwgNzk0NzEsIDc5NDc3LCA3OTQ4NSwgNzk0OTMsIDc5NTAxLCA3OTUwOSwgNzk1MTQsIAotICAgIDc5NTE5LCA3OTUyNCwgNzk1MjksIDc5NTQyLCA3OTU1NSwgNzk1NjUsIDc5NTc1LCA3OTU4NiwgNzk1OTcsIDc5NjA4LCAKLSAgICA3OTYxOSwgNzk2MjksIDc5NjM5LCA3OTY1MCwgNzk2NjEsIDc5NjcyLCA3OTY4MywgNzk2OTMsIDc5NzAzLCA3OTcxMywgCi0gICAgNzk3MjksIDc5NzQ1LCA3OTc2MSwgNzk3NjgsIDc5Nzc1LCA3OTc4MiwgNzk3ODksIDc5Nzk5LCA3OTgwOSwgNzk4MTksIAotICAgIDc5ODMxLCA3OTg0MSwgNzk4NDksIDc5ODU3LCA3OTg2NiwgNzk4NzQsIDc5ODg0LCA3OTg5MiwgNzk5MDAsIDc5OTA4LCAKLSAgICA3OTkxNywgNzk5MjUsIDc5OTM1LCA3OTk0MywgNzk5NTEsIDc5OTU5LCA3OTk2OSwgNzk5NzcsIDc5OTg0LCA3OTk5MSwgCi0gICAgNzk5OTgsIDgwMDA1LCA4MDAxMywgODAwMjEsIDgwMDI5LCA4MDAzNywgODAwNDUsIDgwMDU0LCA4MDA2MiwgODAwNzAsIAotICAgIDgwMDc4LCA4MDA4NiwgODAwOTQsIDgwMTAzLCA4MDExMSwgODAxMTksIDgwMTI3LCA4MDEzNSwgODAxNDMsIDgwMTUxLCAKLSAgICA4MDE1OSwgODAxNjcsIDgwMTc1LCA4MDE4MywgODAxOTIsIDgwMjAwLCA4MDIxMCwgODAyMTgsIDgwMjI2LCA4MDIzNCwgCi0gICAgODAyNDQsIDgwMjUyLCA4MDI2MCwgODAyNjgsIDgwMjc2LCA4MDI4NSwgODAyOTQsIDgwMzAyLCA4MDMxMiwgODAzMjAsIAotICAgIDgwMzI4LCA4MDMzNiwgODAzNDUsIDgwMzUzLCA4MDM2MywgODAzNzEsIDgwMzc4LCA4MDM4NSwgODAzOTMsIDgwNDAwLCAKLSAgICA4MDQwOSwgODA0MTYsIDgwNDI0LCA4MDQzMiwgODA0NDEsIDgwNDQ5LCA4MDQ1OSwgODA0NjcsIDgwNDc1LCA4MDQ4MywgCi0gICAgODA0OTMsIDgwNTAxLCA4MDUwOCwgODA1MTUsIDgwNTIzLCA4MDUzMCwgODA1MzksIDgwNTQ2LCA4MDU1NiwgODA1NjYsIAotICAgIDgwNTc3LCA4MDU4NiwgODA1OTUsIDgwNjA0LCA4MDYxMywgODA2MjIsIDgwNjMyLCA4MDY0MywgODA2NTQsIDgwNjY0LCAKLSAgICA4MDY3NSwgODA2ODcsIDgwNjk3LCA4MDcwNiwgODA3MTUsIDgwNzIzLCA4MDczMiwgODA3NDIsIDgwNzUwLCA4MDc1OSwgCi0gICAgODA3NjgsIDgwNzc2LCA4MDc4NSwgODA3OTUsIDgwODAzLCA4MDgxMiwgODA4MjEsIDgwODI5LCA4MDgzOCwgODA4NDgsIAotICAgIDgwODU2LCA4MDg2NiwgODA4NzQsIDgwODg0LCA4MDg5MiwgODA5MDAsIDgwOTA5LCA4MDkxNywgODA5MjcsIDgwOTM1LCAKLSAgICA4MDk0MywgODA5NTMsIDgwOTYxLCA4MDk2OCwgODA5NzUsIDgwOTg0LCA4MDk5MywgODEwMDEsIDgxMDEwLCA4MTAyMCwgCi0gICAgODEwMjgsIDgxMDM5LCA4MTA0NywgODEwNTUsIDgxMDYyLCA4MTA3MCwgODEwNzksIDgxMDg2LCA4MTA5NiwgODExMDYsIAotICAgIDgxMTE3LCA4MTEyNywgODExMzgsIDgxMTQ2LCA4MTE1NCwgODExNjMsIDgxMTcxLCA4MTE4MCwgODExODgsIDgxMTk2LCAKLSAgICA4MTIwNSwgODEyMTMsIDgxMjIyLCA4MTIzMCwgODEyMzcsIDgxMjQ0LCA4MTI1MSwgODEyNTgsIDgxMjY2LCA4MTI3NCwgCi0gICAgODEyODIsIDgxMjkwLCA4MTI5OSwgODEzMDcsIDgxMzE1LCA4MTMyNCwgODEzMzIsIDgxMzQwLCA4MTM0OCwgODEzNTcsIAotICAgIDgxMzY1LCA4MTM3MywgODEzODEsIDgxMzg5LCA4MTM5NywgODE0MDUsIDgxNDEzLCA4MTQyMSwgODE0MjksIDgxNDM4LCAKLSAgICA4MTQ0NiwgODE0NTQsIDgxNDYyLCA4MTQ3MCwgODE0NzgsIDgxNDg3LCA4MTQ5NiwgODE1MDQsIDgxNTEyLCA4MTUyMCwgCi0gICAgODE1MjksIDgxNTM3LCA4MTU0NiwgODE1NTMsIDgxNTYwLCA4MTU2OCwgODE1NzUsIDgxNTgzLCA4MTU5MSwgODE2MDAsIAotICAgIDgxNjA4LCA4MTYxNywgODE2MjUsIDgxNjMzLCA4MTY0MywgODE2NTAsIDgxNjU3LCA4MTY2NSwgODE2NzIsIDgxNjgwLCAKLSAgICA4MTY5MCwgODE3MDEsIDgxNzA5LCA4MTcxOCwgODE3MjYsIDgxNzM1LCA4MTc0MywgODE3NTIsIDgxNzYwLCA4MTc2OSwgCi0gICAgODE3NzcsIDgxNzg2LCA4MTc5NSwgODE4MDMsIDgxODExLCA4MTgxOSwgODE4MjgsIDgxODM1LCA4MTg0MywgODE4NTIsIAotICAgIDgxODYxLCA4MTg3MCwgODE4ODAsIDgxODg4LCA4MTg5OCwgODE5MDYsIDgxOTE2LCA4MTkyNCwgODE5MzQsIDgxOTQyLCAKLSAgICA4MTk1MiwgODE5NjAsIDgxOTY5LCA4MTk3NiwgODE5ODUsIDgxOTkyLCA4MjAwMiwgODIwMTAsIDgyMDIwLCA4MjAyOCwgCi0gICAgODIwMzgsIDgyMDQ2LCA4MjA1NCwgODIwNjIsIDgyMDcxLCA4MjA3OSwgODIwODgsIDgyMDk3LCA4MjEwNiwgODIxMTUsIAotICAgIDgyMTI1LCA4MjEzMywgODIxNDMsIDgyMTUxLCA4MjE2MSwgODIxNjksIDgyMTc5LCA4MjE4NywgODIxOTcsIDgyMjA1LCAKLSAgICA4MjIxNCwgODIyMjEsIDgyMjMwLCA4MjIzNywgODIyNDcsIDgyMjU1LCA4MjI2NSwgODIyNzMsIDgyMjgzLCA4MjI5MSwgCi0gICAgODIyOTksIDgyMzA3LCA4MjMxNiwgODIzMjQsIDgyMzMzLCA4MjM0MiwgODIzNTEsIDgyMzYwLCA4MjM2OCwgODIzNzYsIAotICAgIDgyMzg1LCA4MjM5MywgODI0MDIsIDgyNDExLCA4MjQxOSwgODI0MjcsIDgyNDM1LCA4MjQ0NCwgODI0NTIsIDgyNDYwLCAKLSAgICA4MjQ2OSwgODI0NzcsIDgyNDg1LCA4MjQ5MywgODI1MDEsIDgyNTA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCA4MjUxMSwgODI1MjEsIDgyNTMxLCA4MjU0MSwgODI1NTEsIDgyNTYyLCA4MjU3MiwgODI1ODIsIAotICAgIDgyNTkzLCA4MjYwMiwgODI2MTEsIDgyNjIwLCA4MjYzMSwgODI2NDEsIDgyNjUxLCA4MjY2MywgODI2NzMsIDgyNjgzLCAKLSAgICA4MjY5MywgODI3MDMsIDgyNzEzLCA4MjcyMywgODI3MzMsIDgyNzQzLCA4Mjc1MywgODI3NjMsIDgyNzczLCA4Mjc4NCwgCi0gICAgODI3OTUsIDgyODA1LCA4MjgxNSwgODI4MjcsIDgyODM4LCA4Mjg0OSwgODI4NTksIDgyODY5LCA4Mjg3OSwgODI4ODksIAotICAgIDgyODk5LCA4MjkwOSwgODI5MTksIDgyOTMxLCA4Mjk0MSwgODI5NTEsIDgyOTYzLCA4Mjk3NCwgODI5ODUsIDgyOTk1LCAKLSAgICA4MzAwNSwgODMwMTUsIDgzMDI1LCA4MzAzNywgODMwNDcsIDgzMDU3LCA4MzA2OCwgODMwNzksIDgzMDg5LCA4MzA5OSwgCi0gICAgODMxMDgsIDgzMTE3LCA4MzEyNiwgODMxMzUsIDgzMTQ0LCA4MzE1NCwgMCwgMCwgODMxNjQsIDgzMTc0LCA4MzE4NCwgCi0gICAgODMxOTQsIDgzMjA0LCA4MzIxNiwgODMyMjYsIDgzMjM2LCA4MzI0OCwgODMyNTgsIDgzMjcwLCA4MzI3OSwgODMyODgsIAotICAgIDgzMjk5LCA4MzMwOSwgODMzMjEsIDgzMzMyLCA4MzM0NSwgODMzNTUsIDgzMzY3LCA4MzM3NiwgODMzODcsIDgzMzk4LCAKLSAgICA4MzQxMSwgODM0MjEsIDgzNDMxLCA4MzQ0MSwgODM0NTEsIDgzNDYxLCA4MzQ3MCwgODM0NzksIDgzNDg4LCA4MzQ5NywgCi0gICAgODM1MDcsIDgzNTE3LCA4MzUyNywgODM1MzcsIDgzNTQ3LCA4MzU1NywgODM1NjcsIDgzNTc3LCA4MzU4NywgODM1OTcsIAotICAgIDgzNjA3LCA4MzYxNywgODM2MjYsIDgzNjM1LCA4MzY0NCwgODM2NTQsIDgzNjY0LCA4MzY3NCwgODM2ODQsIDgzNjk0LCAKLSAgICA4MzcwNSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODM3MTUsIDgzNzMwLCAKLSAgICA4Mzc0NSwgODM3NTEsIDgzNzU3LCA4Mzc2MywgODM3NjksIDgzNzc1LCA4Mzc4MSwgODM3ODcsIDgzNzkzLCA4MzgwMSwgCi0gICAgODM4MDUsIDgzODA4LCAwLCAwLCA4MzgxNiwgODM4MTksIDgzODIyLCA4MzgyNSwgODM4MjgsIDgzODMxLCA4MzgzNCwgCi0gICAgODM4MzcsIDgzODQwLCA4Mzg0MywgODM4NDYsIDgzODQ5LCA4Mzg1MiwgODM4NTUsIDgzODU4LCA4Mzg2MSwgODM4NjQsIAotICAgIDgzODcyLCA4Mzg4MSwgODM4OTIsIDgzOTAwLCA4MzkwOCwgODM5MTcsIDgzOTI2LCA4MzkzNywgODM5NDksIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDgzOTU4LCA4Mzk2MywgODM5NjgsIDgzOTc1LCA4Mzk4MiwgODM5ODgsIDgzOTk0LCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA4Mzk5OSwgODQwMDksIDg0MDE5LCA4NDAyOSwgODQwMzgsIDg0MDQ5LCA4NDA1OCwgODQwNjcsIAotICAgIDg0MDc3LCA4NDA4NywgODQwOTksIDg0MTExLCA4NDEyMiwgODQxMzMsIDg0MTQ0LCA4NDE1NSwgODQxNjUsIDg0MTc1LCAKLSAgICA4NDE4NSwgODQxOTUsIDg0MjA2LCA4NDIxNywgODQyMjEsIDg0MjI2LCA4NDIzNSwgODQyNDQsIDg0MjQ4LCA4NDI1MiwgCi0gICAgODQyNTYsIDg0MjYxLCA4NDI2NiwgODQyNzEsIDg0Mjc2LCA4NDI3OSwgODQyODMsIDAsIDg0Mjg4LCA4NDI5MSwgODQyOTQsIAotICAgIDg0Mjk4LCA4NDMwMiwgODQzMDcsIDg0MzExLCA4NDMxNSwgODQzMjAsIDg0MzI1LCA4NDMzMiwgODQzMzksIDg0MzQyLCAKLSAgICA4NDM0NSwgODQzNDgsIDg0MzUxLCA4NDM1NCwgODQzNTgsIDg0MzYyLCAwLCA4NDM2NiwgODQzNzEsIDg0Mzc1LCA4NDM3OSwgCi0gICAgMCwgMCwgMCwgMCwgODQzODQsIDg0Mzg5LCA4NDM5NiwgODQ0MDEsIDg0NDA2LCAwLCA4NDQxMSwgODQ0MTYsIDg0NDIxLCAKLSAgICA4NDQyNiwgODQ0MzEsIDg0NDM2LCA4NDQ0MSwgODQ0NDYsIDg0NDUxLCA4NDQ1NiwgODQ0NjEsIDg0NDY2LCA4NDQ3NSwgCi0gICAgODQ0ODQsIDg0NDkyLCA4NDUwMCwgODQ1MDksIDg0NTE4LCA4NDUyNywgODQ1MzYsIDg0NTQ0LCA4NDU1MiwgODQ1NjAsIAotICAgIDg0NTY4LCA4NDU3MywgODQ1NzgsIDg0NTg0LCA4NDU5MCwgODQ1OTYsIDg0NjAyLCA4NDYxMCwgODQ2MTgsIDg0NjI0LCAKLSAgICA4NDYzMCwgODQ2MzYsIDg0NjQyLCA4NDY0OCwgODQ2NTQsIDg0NjYwLCA4NDY2NiwgODQ2NzEsIDg0Njc2LCA4NDY4MSwgCi0gICAgODQ2ODYsIDg0NjkxLCA4NDY5NiwgODQ3MDEsIDg0NzA2LCA4NDcxMiwgODQ3MTgsIDg0NzI0LCA4NDczMCwgODQ3MzYsIAotICAgIDg0NzQyLCA4NDc0OCwgODQ3NTQsIDg0NzYwLCA4NDc2NiwgODQ3NzIsIDg0Nzc4LCA4NDc4NCwgODQ3OTAsIDg0Nzk2LCAKLSAgICA4NDgwMiwgODQ4MDgsIDg0ODE0LCA4NDgyMCwgODQ4MjYsIDg0ODMyLCA4NDgzOCwgODQ4NDQsIDg0ODUwLCA4NDg1NiwgCi0gICAgODQ4NjIsIDg0ODY4LCA4NDg3NCwgODQ4ODAsIDg0ODg2LCA4NDg5MiwgODQ4OTgsIDg0OTA0LCA4NDkxMCwgODQ5MTYsIAotICAgIDg0OTIyLCA4NDkyOCwgODQ5MzQsIDg0OTQwLCA4NDk0NiwgODQ5NTIsIDg0OTU4LCA4NDk2NCwgODQ5NzAsIDg0OTc2LCAKLSAgICA4NDk4MiwgODQ5ODgsIDg0OTk0LCA4NTAwMCwgODUwMDYsIDg1MDEyLCA4NTAxOCwgODUwMjQsIDg1MDMwLCA4NTAzNiwgCi0gICAgODUwNDIsIDg1MDQ4LCA4NTA1NCwgODUwNjAsIDg1MDY2LCA4NTA3MSwgODUwNzYsIDg1MDgxLCA4NTA4NiwgODUwOTIsIAotICAgIDg1MDk4LCA4NTEwNCwgODUxMTAsIDg1MTE2LCA4NTEyMiwgODUxMjgsIDg1MTM0LCA4NTE0MCwgODUxNDYsIDg1MTUzLCAKLSAgICA4NTE2MCwgODUxNjUsIDg1MTcwLCA4NTE3NSwgODUxODAsIDg1MTkyLCA4NTIwNCwgODUyMTUsIDg1MjI2LCA4NTIzOCwgCi0gICAgODUyNTAsIDg1MjU4LCAwLCAwLCA4NTI2NiwgMCwgODUyNzQsIDg1Mjc4LCA4NTI4MiwgODUyODUsIDg1Mjg5LCA4NTI5MywgCi0gICAgODUyOTYsIDg1Mjk5LCA4NTMwMywgODUzMDcsIDg1MzEwLCA4NTMxMywgODUzMTYsIDg1MzE5LCA4NTMyNCwgODUzMjcsIAotICAgIDg1MzMxLCA4NTMzNCwgODUzMzcsIDg1MzQwLCA4NTM0MywgODUzNDYsIDg1MzQ5LCA4NTM1MiwgODUzNTUsIDg1MzU4LCAKLSAgICA4NTM2MSwgODUzNjQsIDg1MzY4LCA4NTM3MiwgODUzNzYsIDg1MzgwLCA4NTM4NSwgODUzOTAsIDg1Mzk2LCA4NTQwMiwgCi0gICAgODU0MDgsIDg1NDEzLCA4NTQxOSwgODU0MjUsIDg1NDMxLCA4NTQzNiwgODU0NDIsIDg1NDQ4LCA4NTQ1MywgODU0NTgsIAotICAgIDg1NDY0LCA4NTQ2OSwgODU0NzUsIDg1NDgxLCA4NTQ4NiwgODU0OTIsIDg1NDk4LCA4NTUwMywgODU1MDksIDg1NTE1LCAKLSAgICA4NTUyMSwgODU1MjcsIDg1NTMzLCA4NTUzNywgODU1NDIsIDg1NTQ2LCA4NTU1MSwgODU1NTUsIDg1NTYwLCA4NTU2NSwgCi0gICAgODU1NzEsIDg1NTc3LCA4NTU4MywgODU1ODgsIDg1NTk0LCA4NTYwMCwgODU2MDYsIDg1NjExLCA4NTYxNywgODU2MjMsIAotICAgIDg1NjI4LCA4NTYzMywgODU2MzksIDg1NjQ0LCA4NTY1MCwgODU2NTYsIDg1NjYxLCA4NTY2NywgODU2NzMsIDg1Njc4LCAKLSAgICA4NTY4NCwgODU2OTAsIDg1Njk2LCA4NTcwMiwgODU3MDgsIDg1NzEzLCA4NTcxNywgODU3MjIsIDg1NzI0LCA4NTcyOSwgCi0gICAgODU3MzQsIDg1NzQwLCA4NTc0NSwgODU3NTAsIDg1NzU0LCA4NTc2MCwgODU3NjUsIDg1NzcwLCA4NTc3NSwgODU3ODAsIAotICAgIDg1Nzg1LCA4NTc5MCwgODU3OTUsIDg1ODAxLCA4NTgwNywgODU4MTMsIDg1ODIxLCA4NTgyNSwgODU4MjksIDg1ODMzLCAKLSAgICA4NTgzNywgODU4NDEsIDg1ODQ1LCA4NTg1MCwgODU4NTUsIDg1ODYwLCA4NTg2NSwgODU4NjksIDg1ODc0LCA4NTg3OSwgCi0gICAgODU4ODQsIDg1ODg5LCA4NTg5NCwgODU4OTksIDg1OTA0LCA4NTkwOSwgODU5MTMsIDg1OTE3LCA4NTkyMiwgODU5MjcsIAotICAgIDg1OTMyLCA4NTkzNywgODU5NDEsIDg1OTQ2LCA4NTk1MSwgODU5NTYsIDg1OTYxLCA4NTk2NSwgODU5NzAsIDg1OTc1LCAKLSAgICA4NTk4MCwgODU5ODUsIDg1OTg5LCA4NTk5NCwgODU5OTksIDg2MDAzLCA4NjAwOCwgODYwMTMsIDg2MDE4LCA4NjAyMywgCi0gICAgODYwMjgsIDg2MDMzLCA4NjA0MCwgODYwNDcsIDg2MDUxLCA4NjA1NiwgODYwNjEsIDg2MDY2LCA4NjA3MSwgODYwNzYsIAotICAgIDg2MDgxLCA4NjA4NiwgODYwOTEsIDg2MDk2LCA4NjEwMSwgODYxMDYsIDg2MTExLCA4NjExNiwgODYxMjEsIDg2MTI2LCAKLSAgICA4NjEzMSwgODYxMzYsIDg2MTQxLCA4NjE0NiwgODYxNTEsIDg2MTU2LCA4NjE2MSwgODYxNjYsIDg2MTcxLCA4NjE3NiwgCi0gICAgODYxODEsIDg2MTg2LCA4NjE5MSwgODYxOTYsIDAsIDAsIDAsIDg2MjAxLCA4NjIwNSwgODYyMTAsIDg2MjE0LCA4NjIxOSwgCi0gICAgODYyMjQsIDAsIDAsIDg2MjI4LCA4NjIzMywgODYyMzgsIDg2MjQyLCA4NjI0NywgODYyNTIsIDAsIDAsIDg2MjU3LCAKLSAgICA4NjI2MiwgODYyNjYsIDg2MjcxLCA4NjI3NiwgODYyODEsIDAsIDAsIDg2Mjg2LCA4NjI5MSwgODYyOTYsIDAsIDAsIDAsIAotICAgIDg2MzAwLCA4NjMwNCwgODYzMDgsIDg2MzEyLCA4NjMxNSwgODYzMTksIDg2MzIzLCAwLCA4NjMyNywgODYzMzMsIDg2MzM2LCAKLSAgICA4NjM0MCwgODYzNDMsIDg2MzQ3LCA4NjM1MSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODYzNTUsIDg2MzYxLCAKLSAgICA4NjM2NywgODYzNzMsIDg2Mzc5LCAwLCAwLCA4NjM4MywgODYzODksIDg2Mzk1LCA4NjQwMSwgODY0MDcsIDg2NDEzLCAKLSAgICA4NjQyMCwgODY0MjcsIDg2NDM0LCA4NjQ0MSwgODY0NDgsIDg2NDU1LCAwLCA4NjQ2MiwgODY0NjksIDg2NDc2LCA4NjQ4MiwgCi0gICAgODY0ODksIDg2NDk2LCA4NjUwMywgODY1MTAsIDg2NTE2LCA4NjUyMywgODY1MzAsIDg2NTM3LCA4NjU0NCwgODY1NTAsIAotICAgIDg2NTU3LCA4NjU2NCwgODY1NzEsIDg2NTc4LCA4NjU4NCwgODY1OTEsIDg2NTk4LCA4NjYwNSwgODY2MTIsIDg2NjE5LCAKLSAgICA4NjYyNiwgODY2MzMsIDAsIDg2NjQwLCA4NjY0NiwgODY2NTMsIDg2NjYwLCA4NjY2NywgODY2NzQsIDg2NjgwLCA4NjY4NywgCi0gICAgODY2OTQsIDg2NzAxLCA4NjcwOCwgODY3MTUsIDg2NzIyLCA4NjcyOSwgODY3MzUsIDg2NzQyLCA4Njc0OSwgODY3NTYsIAotICAgIDg2NzYzLCAwLCA4Njc3MCwgODY3NzcsIDAsIDg2Nzg0LCA4Njc5MSwgODY3OTgsIDg2ODA1LCA4NjgxMiwgODY4MTksIAotICAgIDg2ODI2LCA4NjgzMywgODY4NDAsIDg2ODQ3LCA4Njg1NCwgODY4NjEsIDg2ODY4LCA4Njg3NSwgODY4ODIsIDAsIDAsIAotICAgIDg2ODg4LCA4Njg5MywgODY4OTgsIDg2OTAzLCA4NjkwOCwgODY5MTMsIDg2OTE4LCA4NjkyMywgODY5MjgsIDg2OTMzLCAKLSAgICA4NjkzOCwgODY5NDMsIDg2OTQ4LCA4Njk1MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODY5NTgsIDg2OTY1LCAKLSAgICA4Njk3MiwgODY5NzksIDg2OTg2LCA4Njk5MywgODcwMDAsIDg3MDA3LCA4NzAxNCwgODcwMjEsIDg3MDI4LCA4NzAzNSwgCi0gICAgODcwNDIsIDg3MDQ5LCA4NzA1NiwgODcwNjMsIDg3MDcwLCA4NzA3NywgODcwODQsIDg3MDkxLCA4NzA5OSwgODcxMDcsIAotICAgIDg3MTE0LCA4NzEyMSwgODcxMjYsIDg3MTM0LCA4NzE0MiwgODcxNDksIDg3MTU2LCA4NzE2MSwgODcxNjgsIDg3MTczLCAKLSAgICA4NzE3OCwgODcxODUsIDg3MTkwLCA4NzE5NSwgODcyMDAsIDg3MjA4LCA4NzIxMywgODcyMTgsIDg3MjI1LCA4NzIzMCwgCi0gICAgODcyMzUsIDg3MjQyLCA4NzI0OSwgODcyNTQsIDg3MjU5LCA4NzI2NCwgODcyNjksIDg3Mjc0LCA4NzI3OSwgODcyODQsIAotICAgIDg3Mjg5LCA4NzI5NCwgODczMDEsIDg3MzA2LCA4NzMxMywgODczMTgsIDg3MzIzLCA4NzMyOCwgODczMzMsIDg3MzM4LCAKLSAgICA4NzM0MywgODczNDgsIDg3MzUzLCA4NzM1OCwgODczNjMsIDg3MzY4LCA4NzM3NSwgODczODIsIDg3Mzg5LCA4NzM5NiwgCi0gICAgODc0MDIsIDg3NDA3LCA4NzQxNCwgODc0MTksIDg3NDI0LCA4NzQzMywgODc0NDAsIDg3NDQ5LCA4NzQ1NiwgODc0NjEsIAotICAgIDg3NDY2LCA4NzQ3NCwgODc0NzksIDg3NDg0LCA4NzQ4OSwgODc0OTQsIDg3NDk5LCA4NzUwNiwgODc1MTEsIDg3NTE2LCAKLSAgICA4NzUyMSwgODc1MjYsIDg3NTMxLCA4NzUzOCwgODc1NDUsIDg3NTUyLCA4NzU1OSwgODc1NjYsIDg3NTczLCA4NzU4MCwgCi0gICAgODc1ODcsIDg3NTk0LCA4NzYwMSwgODc2MDgsIDg3NjE1LCA4NzYyMiwgODc2MjksIDg3NjM2LCA4NzY0MywgODc2NTAsIAotICAgIDg3NjU3LCA4NzY2NCwgODc2NzEsIDg3Njc4LCA4NzY4NSwgODc2OTIsIDg3Njk5LCA4NzcwNiwgODc3MTMsIDg3NzIwLCAKLSAgICA4NzcyNywgMCwgMCwgMCwgMCwgMCwgODc3MzQsIDg3NzQyLCA4Nzc1MCwgMCwgMCwgMCwgMCwgODc3NTUsIDg3NzU5LCAKLSAgICA4Nzc2MywgODc3NjcsIDg3NzcxLCA4Nzc3NSwgODc3NzksIDg3NzgzLCA4Nzc4NywgODc3OTEsIDg3Nzk2LCA4NzgwMSwgCi0gICAgODc4MDYsIDg3ODExLCA4NzgxNiwgODc4MjEsIDg3ODI2LCA4NzgzMSwgODc4MzYsIDg3ODQyLCA4Nzg0OCwgODc4NTQsIAotICAgIDg3ODYxLCA4Nzg2OCwgODc4NzUsIDg3ODgyLCA4Nzg4OSwgODc4OTYsIDg3OTAyLCA4NzkwOCwgODc5MTQsIDg3OTIxLCAKLSAgICA4NzkyOCwgODc5MzUsIDg3OTQyLCA4Nzk0OSwgODc5NTYsIDg3OTYzLCA4Nzk3MCwgODc5NzcsIDg3OTg0LCA4Nzk5MSwgCi0gICAgODc5OTgsIDg4MDA1LCA4ODAxMiwgMCwgMCwgMCwgODgwMTksIDg4MDI3LCA4ODAzNSwgODgwNDMsIDg4MDUxLCA4ODA1OSwgCi0gICAgODgwNjksIDg4MDc5LCA4ODA4NywgODgwOTUsIDg4MTAzLCA4ODExMSwgODgxMTksIDg4MTI1LCA4ODEzMiwgODgxNDEsIAotICAgIDg4MTUwLCA4ODE1OSwgODgxNjgsIDg4MTc3LCA4ODE4NiwgODgxOTYsIDg4MjA3LCA4ODIxNywgODgyMjgsIDg4MjM3LCAKLSAgICA4ODI0NiwgODgyNTUsIDg4MjY1LCA4ODI3NiwgODgyODYsIDg4Mjk3LCA4ODMwOCwgODgzMTcsIDg4MzI1LCA4ODMzMSwgCi0gICAgODgzMzcsIDg4MzQzLCA4ODM0OSwgODgzNTcsIDg4MzY1LCA4ODM3MSwgODgzNzgsIDg4Mzg4LCA4ODM5NSwgODg0MDIsIAotICAgIDg4NDA5LCA4ODQxNiwgODg0MjMsIDg4NDMzLCA4ODQ0MCwgODg0NDcsIDg4NDU1LCA4ODQ2MywgODg0NzIsIDg4NDgxLCAKLSAgICA4ODQ5MCwgODg0OTksIDg4NTA4LCA4ODUxNiwgODg1MjUsIDg4NTM0LCA4ODU0MywgODg1NDcsIDg4NTU0LCA4ODU1OSwgCi0gICAgODg1NjQsIDg4NTY4LCA4ODU3MiwgODg1NzYsIDg4NTgwLCA4ODU4NSwgODg1OTAsIDg4NTk2LCA4ODYwMiwgODg2MDYsIAotICAgIDg4NjEyLCA4ODYxNiwgODg2MjAsIDg4NjI0LCA4ODYyOCwgODg2MzIsIDg4NjM2LCA4ODY0MiwgMCwgMCwgMCwgMCwgMCwgCi0gICAgODg2NDYsIDg4NjUxLCA4ODY1NiwgODg2NjEsIDg4NjY2LCA4ODY3MywgODg2NzgsIDg4NjgzLCA4ODY4OCwgODg2OTMsIAotICAgIDg4Njk4LCA4ODcwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODM3NDMsIDgzNzU4LCA4Mzc3MywgODM3NzksIDgzNzg1LCA4Mzc5MSwgCisgICAgODM3OTcsIDgzODAzLCA4MzgwOSwgODM4MTUsIDgzODIxLCA4MzgyOSwgODM4MzMsIDgzODM2LCAwLCAwLCA4Mzg0NCwgCisgICAgODM4NDcsIDgzODUwLCA4Mzg1MywgODM4NTYsIDgzODU5LCA4Mzg2MiwgODM4NjUsIDgzODY4LCA4Mzg3MSwgODM4NzQsIAorICAgIDgzODc3LCA4Mzg4MCwgODM4ODMsIDgzODg2LCA4Mzg4OSwgODM4OTIsIDgzOTAwLCA4MzkwOSwgODM5MjAsIDgzOTI4LCAKKyAgICA4MzkzNiwgODM5NDUsIDgzOTU0LCA4Mzk2NSwgODM5NzcsIDAsIDAsIDAsIDAsIDAsIDAsIDgzOTg2LCA4Mzk5MSwgODM5OTYsIAorICAgIDg0MDAzLCA4NDAxMCwgODQwMTYsIDg0MDIyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA4NDAyNywgODQwMzcsIAorICAgIDg0MDQ3LCA4NDA1NywgODQwNjYsIDg0MDc3LCA4NDA4NiwgODQwOTUsIDg0MTA1LCA4NDExNSwgODQxMjcsIDg0MTM5LCAKKyAgICA4NDE1MCwgODQxNjEsIDg0MTcyLCA4NDE4MywgODQxOTMsIDg0MjAzLCA4NDIxMywgODQyMjMsIDg0MjM0LCA4NDI0NSwgCisgICAgODQyNDksIDg0MjU0LCA4NDI2MywgODQyNzIsIDg0Mjc2LCA4NDI4MCwgODQyODQsIDg0Mjg5LCA4NDI5NCwgODQyOTksIAorICAgIDg0MzA0LCA4NDMwNywgODQzMTEsIDAsIDg0MzE2LCA4NDMxOSwgODQzMjIsIDg0MzI2LCA4NDMzMCwgODQzMzUsIDg0MzM5LCAKKyAgICA4NDM0MywgODQzNDgsIDg0MzUzLCA4NDM2MCwgODQzNjcsIDg0MzcwLCA4NDM3MywgODQzNzYsIDg0Mzc5LCA4NDM4MiwgCisgICAgODQzODYsIDg0MzkwLCAwLCA4NDM5NCwgODQzOTksIDg0NDAzLCA4NDQwNywgMCwgMCwgMCwgMCwgODQ0MTIsIDg0NDE3LCAKKyAgICA4NDQyNCwgODQ0MjksIDg0NDM0LCAwLCA4NDQzOSwgODQ0NDQsIDg0NDQ5LCA4NDQ1NCwgODQ0NTksIDg0NDY0LCA4NDQ2OSwgCisgICAgODQ0NzQsIDg0NDc5LCA4NDQ4NCwgODQ0ODksIDg0NDk0LCA4NDUwMywgODQ1MTIsIDg0NTIwLCA4NDUyOCwgODQ1MzcsIAorICAgIDg0NTQ2LCA4NDU1NSwgODQ1NjQsIDg0NTcyLCA4NDU4MCwgODQ1ODgsIDg0NTk2LCA4NDYwMSwgODQ2MDYsIDg0NjEyLCAKKyAgICA4NDYxOCwgODQ2MjQsIDg0NjMwLCA4NDYzOCwgODQ2NDYsIDg0NjUyLCA4NDY1OCwgODQ2NjQsIDg0NjcwLCA4NDY3NiwgCisgICAgODQ2ODIsIDg0Njg4LCA4NDY5NCwgODQ2OTksIDg0NzA0LCA4NDcwOSwgODQ3MTQsIDg0NzE5LCA4NDcyNCwgODQ3MjksIAorICAgIDg0NzM0LCA4NDc0MCwgODQ3NDYsIDg0NzUyLCA4NDc1OCwgODQ3NjQsIDg0NzcwLCA4NDc3NiwgODQ3ODIsIDg0Nzg4LCAKKyAgICA4NDc5NCwgODQ4MDAsIDg0ODA2LCA4NDgxMiwgODQ4MTgsIDg0ODI0LCA4NDgzMCwgODQ4MzYsIDg0ODQyLCA4NDg0OCwgCisgICAgODQ4NTQsIDg0ODYwLCA4NDg2NiwgODQ4NzIsIDg0ODc4LCA4NDg4NCwgODQ4OTAsIDg0ODk2LCA4NDkwMiwgODQ5MDgsIAorICAgIDg0OTE0LCA4NDkyMCwgODQ5MjYsIDg0OTMyLCA4NDkzOCwgODQ5NDQsIDg0OTUwLCA4NDk1NiwgODQ5NjIsIDg0OTY4LCAKKyAgICA4NDk3NCwgODQ5ODAsIDg0OTg2LCA4NDk5MiwgODQ5OTgsIDg1MDA0LCA4NTAxMCwgODUwMTYsIDg1MDIyLCA4NTAyOCwgCisgICAgODUwMzQsIDg1MDQwLCA4NTA0NiwgODUwNTIsIDg1MDU4LCA4NTA2NCwgODUwNzAsIDg1MDc2LCA4NTA4MiwgODUwODgsIAorICAgIDg1MDk0LCA4NTA5OSwgODUxMDQsIDg1MTA5LCA4NTExNCwgODUxMjAsIDg1MTI2LCA4NTEzMiwgODUxMzgsIDg1MTQ0LCAKKyAgICA4NTE1MCwgODUxNTYsIDg1MTYyLCA4NTE2OCwgODUxNzQsIDg1MTgxLCA4NTE4OCwgODUxOTMsIDg1MTk4LCA4NTIwMywgCisgICAgODUyMDgsIDg1MjIwLCA4NTIzMiwgODUyNDMsIDg1MjU0LCA4NTI2NiwgODUyNzgsIDg1Mjg2LCAwLCAwLCA4NTI5NCwgMCwgCisgICAgODUzMDIsIDg1MzA2LCA4NTMxMCwgODUzMTMsIDg1MzE3LCA4NTMyMSwgODUzMjQsIDg1MzI3LCA4NTMzMSwgODUzMzUsIAorICAgIDg1MzM4LCA4NTM0MSwgODUzNDQsIDg1MzQ3LCA4NTM1MiwgODUzNTUsIDg1MzU5LCA4NTM2MiwgODUzNjUsIDg1MzY4LCAKKyAgICA4NTM3MSwgODUzNzQsIDg1Mzc3LCA4NTM4MCwgODUzODMsIDg1Mzg2LCA4NTM4OSwgODUzOTIsIDg1Mzk2LCA4NTQwMCwgCisgICAgODU0MDQsIDg1NDA4LCA4NTQxMywgODU0MTgsIDg1NDI0LCA4NTQzMCwgODU0MzYsIDg1NDQxLCA4NTQ0NywgODU0NTMsIAorICAgIDg1NDU5LCA4NTQ2NCwgODU0NzAsIDg1NDc2LCA4NTQ4MSwgODU0ODYsIDg1NDkyLCA4NTQ5NywgODU1MDMsIDg1NTA5LCAKKyAgICA4NTUxNCwgODU1MjAsIDg1NTI2LCA4NTUzMSwgODU1MzcsIDg1NTQzLCA4NTU0OSwgODU1NTUsIDg1NTYxLCA4NTU2NSwgCisgICAgODU1NzAsIDg1NTc0LCA4NTU3OSwgODU1ODMsIDg1NTg4LCA4NTU5MywgODU1OTksIDg1NjA1LCA4NTYxMSwgODU2MTYsIAorICAgIDg1NjIyLCA4NTYyOCwgODU2MzQsIDg1NjM5LCA4NTY0NSwgODU2NTEsIDg1NjU2LCA4NTY2MSwgODU2NjcsIDg1NjcyLCAKKyAgICA4NTY3OCwgODU2ODQsIDg1Njg5LCA4NTY5NSwgODU3MDEsIDg1NzA2LCA4NTcxMiwgODU3MTgsIDg1NzI0LCA4NTczMCwgCisgICAgODU3MzYsIDg1NzQxLCA4NTc0NSwgODU3NTAsIDg1NzUyLCA4NTc1NywgODU3NjIsIDg1NzY4LCA4NTc3MywgODU3NzgsIAorICAgIDg1NzgyLCA4NTc4OCwgODU3OTMsIDg1Nzk4LCA4NTgwMywgODU4MDgsIDg1ODEzLCA4NTgxOCwgODU4MjMsIDg1ODI5LCAKKyAgICA4NTgzNSwgODU4NDEsIDg1ODQ5LCA4NTg1MywgODU4NTcsIDg1ODYxLCA4NTg2NSwgODU4NjksIDg1ODczLCA4NTg3OCwgCisgICAgODU4ODMsIDg1ODg4LCA4NTg5MywgODU4OTcsIDg1OTAyLCA4NTkwNywgODU5MTIsIDg1OTE3LCA4NTkyMiwgODU5MjcsIAorICAgIDg1OTMyLCA4NTkzNywgODU5NDEsIDg1OTQ1LCA4NTk1MCwgODU5NTUsIDg1OTYwLCA4NTk2NSwgODU5NjksIDg1OTc0LCAKKyAgICA4NTk3OSwgODU5ODQsIDg1OTg5LCA4NTk5MywgODU5OTgsIDg2MDAzLCA4NjAwOCwgODYwMTMsIDg2MDE3LCA4NjAyMiwgCisgICAgODYwMjcsIDg2MDMxLCA4NjAzNiwgODYwNDEsIDg2MDQ2LCA4NjA1MSwgODYwNTYsIDg2MDYxLCA4NjA2OCwgODYwNzUsIAorICAgIDg2MDc5LCA4NjA4NCwgODYwODksIDg2MDk0LCA4NjA5OSwgODYxMDQsIDg2MTA5LCA4NjExNCwgODYxMTksIDg2MTI0LCAKKyAgICA4NjEyOSwgODYxMzQsIDg2MTM5LCA4NjE0NCwgODYxNDksIDg2MTU0LCA4NjE1OSwgODYxNjQsIDg2MTY5LCA4NjE3NCwgCisgICAgODYxNzksIDg2MTg0LCA4NjE4OSwgODYxOTQsIDg2MTk5LCA4NjIwNCwgODYyMDksIDg2MjE0LCA4NjIxOSwgODYyMjQsIDAsIAorICAgIDAsIDAsIDg2MjI5LCA4NjIzMywgODYyMzgsIDg2MjQyLCA4NjI0NywgODYyNTIsIDAsIDAsIDg2MjU2LCA4NjI2MSwgCisgICAgODYyNjYsIDg2MjcwLCA4NjI3NSwgODYyODAsIDAsIDAsIDg2Mjg1LCA4NjI5MCwgODYyOTQsIDg2Mjk5LCA4NjMwNCwgCisgICAgODYzMDksIDAsIDAsIDg2MzE0LCA4NjMxOSwgODYzMjQsIDAsIDAsIDAsIDg2MzI4LCA4NjMzMiwgODYzMzYsIDg2MzQwLCAKKyAgICA4NjM0MywgODYzNDcsIDg2MzUxLCAwLCA4NjM1NSwgODYzNjEsIDg2MzY0LCA4NjM2OCwgODYzNzEsIDg2Mzc1LCA4NjM3OSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODYzODMsIDg2Mzg5LCA4NjM5NSwgODY0MDEsIDg2NDA3LCAwLCAwLCAKKyAgICA4NjQxMSwgODY0MTcsIDg2NDIzLCA4NjQyOSwgODY0MzUsIDg2NDQxLCA4NjQ0OCwgODY0NTUsIDg2NDYyLCA4NjQ2OSwgCisgICAgODY0NzYsIDg2NDgzLCAwLCA4NjQ5MCwgODY0OTcsIDg2NTA0LCA4NjUxMCwgODY1MTcsIDg2NTI0LCA4NjUzMSwgODY1MzgsIAorICAgIDg2NTQ0LCA4NjU1MSwgODY1NTgsIDg2NTY1LCA4NjU3MiwgODY1NzgsIDg2NTg1LCA4NjU5MiwgODY1OTksIDg2NjA2LCAKKyAgICA4NjYxMiwgODY2MTksIDg2NjI2LCA4NjYzMywgODY2NDAsIDg2NjQ3LCA4NjY1NCwgODY2NjEsIDAsIDg2NjY4LCA4NjY3NCwgCisgICAgODY2ODEsIDg2Njg4LCA4NjY5NSwgODY3MDIsIDg2NzA4LCA4NjcxNSwgODY3MjIsIDg2NzI5LCA4NjczNiwgODY3NDMsIAorICAgIDg2NzUwLCA4Njc1NywgODY3NjMsIDg2NzcwLCA4Njc3NywgODY3ODQsIDg2NzkxLCAwLCA4Njc5OCwgODY4MDUsIDAsIAorICAgIDg2ODEyLCA4NjgxOSwgODY4MjYsIDg2ODMzLCA4Njg0MCwgODY4NDcsIDg2ODU0LCA4Njg2MSwgODY4NjgsIDg2ODc1LCAKKyAgICA4Njg4MiwgODY4ODksIDg2ODk2LCA4NjkwMywgODY5MTAsIDAsIDAsIDg2OTE2LCA4NjkyMSwgODY5MjYsIDg2OTMxLCAKKyAgICA4NjkzNiwgODY5NDEsIDg2OTQ2LCA4Njk1MSwgODY5NTYsIDg2OTYxLCA4Njk2NiwgODY5NzEsIDg2OTc2LCA4Njk4MSwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg3MDgsIDg4NzE1LCA4ODcyNCwgODg3MzMsIDg4NzQwLCA4ODc0NywgODg3NTQsIAotICAgIDg4NzYxLCA4ODc2OCwgODg3NzUsIDg4NzgxLCA4ODc4OCwgODg3OTUsIDg4ODAyLCA4ODgwOSwgODg4MTYsIDg4ODIzLCAKLSAgICA4ODgzMCwgODg4MzcsIDg4ODQ2LCA4ODg1MywgODg4NjAsIDg4ODY3LCA4ODg3NCwgODg4ODEsIDg4ODg4LCA4ODg5NSwgCi0gICAgODg5MDIsIDg4OTExLCA4ODkxOCwgODg5MjUsIDg4OTMyLCA4ODkzOSwgODg5NDYsIDg4OTUzLCA4ODk2MiwgODg5NjksIAotICAgIDg4OTc2LCA4ODk4MywgODg5OTAsIDg4OTk5LCA4OTAwNiwgODkwMTMsIDg5MDIwLCA4OTAyOCwgODkwMzcsIDAsIDAsIAotICAgIDg5MDQ2LCA4OTA1MCwgODkwNTQsIDg5MDU5LCA4OTA2NCwgODkwNjksIDg5MDc0LCA4OTA3OCwgODkwODMsIDg5MDg4LCAKLSAgICA4OTA5MywgODkwOTgsIDg5MTAzLCA4OTEwOCwgODkxMTIsIDg5MTE2LCA4OTEyMSwgODkxMjYsIDg5MTMxLCA4OTEzNSwgCi0gICAgODkxNDAsIDg5MTQ1LCA4OTE0OSwgODkxNTQsIDg5MTU5LCA4OTE2NCwgODkxNjksIDg5MTc0LCA4OTE3OSwgMCwgMCwgMCwgCi0gICAgODkxODQsIDg5MTg4LCA4OTE5MywgODkxOTgsIDg5MjAyLCA4OTIwNywgODkyMTEsIDg5MjE2LCA4OTIyMSwgODkyMjYsIAotICAgIDg5MjMxLCA4OTIzNSwgODkyMzksIDg5MjQ0LCA4OTI0OSwgODkyNTQsIDg5MjU5LCA4OTI2NCwgODkyNjksIDg5MjczLCAKLSAgICA4OTI3OCwgODkyODMsIDg5Mjg4LCA4OTI5MywgODkyOTgsIDg5MzAzLCA4OTMwNywgODkzMTEsIDg5MzE2LCA4OTMyMSwgCi0gICAgODkzMjYsIDg5MzMxLCA4OTMzNiwgODkzNDEsIDg5MzQ2LCA4OTM1MSwgODkzNTYsIDg5MzYxLCA4OTM2NiwgODkzNzEsIAotICAgIDg5Mzc2LCA4OTM4MSwgODkzODYsIDg5MzkxLCA4OTM5NiwgODk0MDEsIDg5NDA2LCA4OTQxMSwgODk0MTYsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg2OTg2LCA4Njk5MywgODcwMDAsIDg3MDA3LCA4NzAxNCwgODcwMjEsIAorICAgIDg3MDI4LCA4NzAzNSwgODcwNDIsIDg3MDQ5LCA4NzA1NiwgODcwNjMsIDg3MDcwLCA4NzA3NywgODcwODQsIDg3MDkxLCAKKyAgICA4NzA5OCwgODcxMDUsIDg3MTEyLCA4NzExOSwgODcxMjcsIDg3MTM1LCA4NzE0MiwgODcxNDksIDg3MTU0LCA4NzE2MiwgCisgICAgODcxNzAsIDg3MTc3LCA4NzE4NCwgODcxODksIDg3MTk2LCA4NzIwMSwgODcyMDYsIDg3MjEzLCA4NzIxOCwgODcyMjMsIAorICAgIDg3MjI4LCA4NzIzNiwgODcyNDEsIDg3MjQ2LCA4NzI1MywgODcyNTgsIDg3MjYzLCA4NzI3MCwgODcyNzcsIDg3MjgyLCAKKyAgICA4NzI4NywgODcyOTIsIDg3Mjk3LCA4NzMwMiwgODczMDcsIDg3MzEyLCA4NzMxNywgODczMjIsIDg3MzI5LCA4NzMzNCwgCisgICAgODczNDEsIDg3MzQ2LCA4NzM1MSwgODczNTYsIDg3MzYxLCA4NzM2NiwgODczNzEsIDg3Mzc2LCA4NzM4MSwgODczODYsIAorICAgIDg3MzkxLCA4NzM5NiwgODc0MDMsIDg3NDEwLCA4NzQxNywgODc0MjQsIDg3NDMwLCA4NzQzNSwgODc0NDIsIDg3NDQ3LCAKKyAgICA4NzQ1MiwgODc0NjEsIDg3NDY4LCA4NzQ3NywgODc0ODQsIDg3NDg5LCA4NzQ5NCwgODc1MDIsIDg3NTA3LCA4NzUxMiwgCisgICAgODc1MTcsIDg3NTIyLCA4NzUyNywgODc1MzQsIDg3NTM5LCA4NzU0NCwgODc1NDksIDg3NTU0LCA4NzU1OSwgODc1NjYsIAorICAgIDg3NTczLCA4NzU4MCwgODc1ODcsIDg3NTk0LCA4NzYwMSwgODc2MDgsIDg3NjE1LCA4NzYyMiwgODc2MjksIDg3NjM2LCAKKyAgICA4NzY0MywgODc2NTAsIDg3NjU3LCA4NzY2NCwgODc2NzEsIDg3Njc4LCA4NzY4NSwgODc2OTIsIDg3Njk5LCA4NzcwNiwgCisgICAgODc3MTMsIDg3NzIwLCA4NzcyNywgODc3MzQsIDg3NzQxLCA4Nzc0OCwgODc3NTUsIDAsIDAsIDAsIDAsIDAsIDg3NzYyLCAKKyAgICA4Nzc3MCwgODc3NzgsIDAsIDAsIDAsIDAsIDg3NzgzLCA4Nzc4NywgODc3OTEsIDg3Nzk1LCA4Nzc5OSwgODc4MDMsIAorICAgIDg3ODA3LCA4NzgxMSwgODc4MTUsIDg3ODE5LCA4NzgyNCwgODc4MjksIDg3ODM0LCA4NzgzOSwgODc4NDQsIDg3ODQ5LCAKKyAgICA4Nzg1NCwgODc4NTksIDg3ODY0LCA4Nzg3MCwgODc4NzYsIDg3ODgyLCA4Nzg4OSwgODc4OTYsIDg3OTAzLCA4NzkxMCwgCisgICAgODc5MTcsIDg3OTI0LCA4NzkzMCwgODc5MzYsIDg3OTQyLCA4Nzk0OSwgODc5NTYsIDg3OTYzLCA4Nzk3MCwgODc5NzcsIAorICAgIDg3OTg0LCA4Nzk5MSwgODc5OTgsIDg4MDA1LCA4ODAxMiwgODgwMTksIDg4MDI2LCA4ODAzMywgODgwNDAsIDAsIDAsIDAsIAorICAgIDg4MDQ3LCA4ODA1NSwgODgwNjMsIDg4MDcxLCA4ODA3OSwgODgwODcsIDg4MDk3LCA4ODEwNywgODgxMTUsIDg4MTIzLCAKKyAgICA4ODEzMSwgODgxMzksIDg4MTQ3LCA4ODE1MywgODgxNjAsIDg4MTY5LCA4ODE3OCwgODgxODcsIDg4MTk2LCA4ODIwNSwgCisgICAgODgyMTQsIDg4MjI0LCA4ODIzNSwgODgyNDUsIDg4MjU2LCA4ODI2NSwgODgyNzQsIDg4MjgzLCA4ODI5MywgODgzMDQsIAorICAgIDg4MzE0LCA4ODMyNSwgODgzMzYsIDg4MzQ1LCA4ODM1MywgODgzNTksIDg4MzY1LCA4ODM3MSwgODgzNzcsIDg4Mzg1LCAKKyAgICA4ODM5MywgODgzOTksIDg4NDA2LCA4ODQxNiwgODg0MjMsIDg4NDMwLCA4ODQzNywgODg0NDQsIDg4NDUxLCA4ODQ2MSwgCisgICAgODg0NjgsIDg4NDc1LCA4ODQ4MywgODg0OTEsIDg4NTAwLCA4ODUwOSwgODg1MTgsIDg4NTI3LCA4ODUzNiwgODg1NDQsIAorICAgIDg4NTUzLCA4ODU2MiwgODg1NzEsIDg4NTc1LCA4ODU4MiwgODg1ODcsIDg4NTkyLCA4ODU5NiwgODg2MDAsIDg4NjA0LCAKKyAgICA4ODYwOCwgODg2MTMsIDg4NjE4LCA4ODYyNCwgODg2MzAsIDg4NjM0LCA4ODY0MCwgODg2NDQsIDg4NjQ4LCA4ODY1MiwgCisgICAgODg2NTYsIDg4NjYwLCA4ODY2NCwgODg2NzAsIDAsIDAsIDAsIDAsIDAsIDg4Njc0LCA4ODY3OSwgODg2ODQsIDg4Njg5LCAKKyAgICA4ODY5NCwgODg3MDEsIDg4NzA2LCA4ODcxMSwgODg3MTYsIDg4NzIxLCA4ODcyNiwgODg3MzEsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NDIxLCA4OTQyNSwgCi0gICAgODk0MzAsIDg5NDM1LCA4OTQ0MCwgODk0NDQsIDg5NDQ5LCA4OTQ1NCwgODk0NTksIDg5NDY0LCA4OTQ2OCwgODk0NzIsIAotICAgIDg5NDc3LCA4OTQ4MiwgODk0ODcsIDg5NDkyLCA4OTQ5NiwgODk1MDEsIDg5NTA2LCA4OTUxMSwgODk1MTYsIDg5NTIxLCAKLSAgICA4OTUyNiwgODk1MzAsIDg5NTM1LCA4OTU0MCwgODk1NDUsIDg5NTUwLCA4OTU1NSwgODk1NjAsIDg5NTY1LCAwLCA4OTU3MCwgCi0gICAgODk1NzUsIDg5NTgwLCA4OTU4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk1OTIsIDg5NTk3LCAKLSAgICA4OTYwMiwgODk2MDcsIDg5NjEyLCA4OTYxNywgODk2MjIsIDg5NjI3LCA4OTYzMiwgODk2MzcsIDg5NjQyLCA4OTY0NywgCi0gICAgODk2NTIsIDg5NjU3LCA4OTY2MiwgODk2NjcsIDg5NjcyLCA4OTY3NywgODk2ODIsIDg5Njg3LCA4OTY5MiwgODk2OTcsIAotICAgIDg5NzAyLCA4OTcwNywgODk3MTIsIDg5NzE3LCA4OTcyMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODg3MzYsIAorICAgIDg4NzQzLCA4ODc1MiwgODg3NjEsIDg4NzY4LCA4ODc3NSwgODg3ODIsIDg4Nzg5LCA4ODc5NiwgODg4MDMsIDg4ODA5LCAKKyAgICA4ODgxNiwgODg4MjMsIDg4ODMwLCA4ODgzNywgODg4NDQsIDg4ODUxLCA4ODg1OCwgODg4NjUsIDg4ODc0LCA4ODg4MSwgCisgICAgODg4ODgsIDg4ODk1LCA4ODkwMiwgODg5MDksIDg4OTE2LCA4ODkyMywgODg5MzAsIDg4OTM5LCA4ODk0NiwgODg5NTMsIAorICAgIDg4OTYwLCA4ODk2NywgODg5NzQsIDg4OTgxLCA4ODk5MCwgODg5OTcsIDg5MDA0LCA4OTAxMSwgODkwMTgsIDg5MDI3LCAKKyAgICA4OTAzNCwgODkwNDEsIDg5MDQ4LCA4OTA1NiwgODkwNjUsIDAsIDAsIDg5MDc0LCA4OTA3OCwgODkwODIsIDg5MDg3LCAKKyAgICA4OTA5MiwgODkwOTcsIDg5MTAyLCA4OTEwNiwgODkxMTEsIDg5MTE2LCA4OTEyMSwgODkxMjYsIDg5MTMxLCA4OTEzNiwgCisgICAgODkxNDAsIDg5MTQ0LCA4OTE0OSwgODkxNTQsIDg5MTU5LCA4OTE2MywgODkxNjgsIDg5MTczLCA4OTE3NywgODkxODIsIAorICAgIDg5MTg3LCA4OTE5MiwgODkxOTcsIDg5MjAyLCA4OTIwNywgMCwgMCwgMCwgODkyMTIsIDg5MjE2LCA4OTIyMSwgODkyMjYsIAorICAgIDg5MjMwLCA4OTIzNSwgODkyMzksIDg5MjQ0LCA4OTI0OSwgODkyNTQsIDg5MjU5LCA4OTI2MywgODkyNjcsIDg5MjcyLCAKKyAgICA4OTI3NywgODkyODIsIDg5Mjg3LCA4OTI5MiwgODkyOTcsIDg5MzAxLCA4OTMwNiwgODkzMTEsIDg5MzE2LCA4OTMyMSwgCisgICAgODkzMjYsIDg5MzMxLCA4OTMzNSwgODkzMzksIDg5MzQ0LCA4OTM0OSwgODkzNTQsIDg5MzU5LCA4OTM2NCwgODkzNjksIAorICAgIDg5Mzc0LCA4OTM3OSwgODkzODQsIDg5Mzg5LCA4OTM5NCwgODkzOTksIDg5NDA0LCA4OTQwOSwgODk0MTQsIDg5NDE5LCAKKyAgICA4OTQyNCwgODk0MjksIDg5NDM0LCA4OTQzOSwgODk0NDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NzI5LCA4OTczNCwgODk3MzksIAotICAgIDg5NzQ0LCA4OTc0OSwgODk3NTQsIDg5NzU5LCA4OTc2NCwgODk3NjksIDg5Nzc0LCA4OTc3OSwgODk3ODQsIDg5Nzg5LCAKLSAgICA4OTc5NCwgODk3OTksIDg5ODA0LCA4OTgwOSwgODk4MTQsIDg5ODE5LCA4OTgyNCwgODk4MjksIDg5ODM0LCA4OTgzOSwgCi0gICAgODk4NDQsIDg5ODQ5LCA4OTg1NCwgODk4NTksIDg5ODYzLCA4OTg2NywgODk4NzEsIDAsIDg5ODc2LCA4OTg4MiwgODk4ODcsIAotICAgIDg5ODkyLCA4OTg5NywgODk5MDIsIDg5OTA4LCA4OTkxNCwgODk5MjAsIDg5OTI2LCA4OTkzMiwgODk5MzgsIDg5OTQ0LCAKLSAgICA4OTk1MCwgODk5NTYsIDg5OTYyLCA4OTk2OCwgODk5NzQsIDg5OTgwLCA4OTk4NSwgODk5OTEsIDg5OTk3LCA5MDAwMiwgCi0gICAgOTAwMDgsIDkwMDEzLCA5MDAxOSwgOTAwMjUsIDkwMDMwLCA5MDAzNiwgOTAwNDIsIDkwMDQ3LCA5MDA1MywgOTAwNTksIAotICAgIDkwMDY0LCA5MDA3MCwgOTAwNzYsIDkwMDgyLCAwLCAwLCAwLCAwLCA5MDA4NywgOTAwOTMsIDkwMDk5LCA5MDEwNSwgCi0gICAgOTAxMTEsIDkwMTE3LCA5MDEyMywgOTAxMjksIDkwMTM1LCA5MDE0MiwgOTAxNDcsIDkwMTUyLCA5MDE1OCwgOTAxNjQsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDg5NDQ5LCA4OTQ1MywgODk0NTgsIDg5NDYzLCA4OTQ2OCwgODk0NzIsIAorICAgIDg5NDc3LCA4OTQ4MiwgODk0ODcsIDg5NDkyLCA4OTQ5NiwgODk1MDAsIDg5NTA1LCA4OTUxMCwgODk1MTUsIDg5NTIwLCAKKyAgICA4OTUyNCwgODk1MjksIDg5NTM0LCA4OTUzOSwgODk1NDQsIDg5NTQ5LCA4OTU1NCwgODk1NTgsIDg5NTYzLCA4OTU2OCwgCisgICAgODk1NzMsIDg5NTc4LCA4OTU4MywgODk1ODgsIDg5NTkzLCAwLCA4OTU5OCwgODk2MDMsIDg5NjA4LCA4OTYxNCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk2MjAsIDg5NjI1LCA4OTYzMCwgODk2MzUsIDg5NjQwLCA4OTY0NSwgCisgICAgODk2NTAsIDg5NjU1LCA4OTY2MCwgODk2NjUsIDg5NjcwLCA4OTY3NSwgODk2ODAsIDg5Njg1LCA4OTY5MCwgODk2OTUsIAorICAgIDg5NzAwLCA4OTcwNSwgODk3MTAsIDg5NzE1LCA4OTcyMCwgODk3MjUsIDg5NzMwLCA4OTczNSwgODk3NDAsIDg5NzQ1LCAKKyAgICA4OTc1MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTAxNzAsIDkwMTc1LCA5MDE4MCwgCi0gICAgOTAxODUsIDkwMTkxLCA5MDE5NiwgOTAyMDIsIDkwMjA4LCA5MDIxNCwgOTAyMjAsIDkwMjI3LCA5MDIzMywgOTAyNDAsIAotICAgIDkwMjQ1LCA5MDI1MCwgOTAyNTUsIDkwMjYwLCA5MDI2NSwgOTAyNzAsIDkwMjc1LCA5MDI4MCwgOTAyODUsIDkwMjkwLCAKLSAgICA5MDI5NSwgOTAzMDAsIDkwMzA1LCA5MDMxMCwgOTAzMTUsIDkwMzIwLCA5MDMyNSwgOTAzMzAsIDkwMzM1LCA5MDM0MCwgCi0gICAgOTAzNDUsIDkwMzUwLCA5MDM1NSwgOTAzNjAsIDkwMzY1LCA5MDM3MCwgOTAzNzUsIDkwMzgwLCA5MDM4NSwgOTAzOTAsIAotICAgIDkwMzk1LCA5MDQwMSwgOTA0MDYsIDkwNDEyLCA5MDQxOCwgOTA0MjQsIDkwNDMwLCA5MDQzNywgOTA0NDMsIDkwNDUwLCAKLSAgICA5MDQ1NSwgOTA0NjAsIDkwNDY1LCA5MDQ3MCwgOTA0NzUsIDkwNDgwLCA5MDQ4NSwgOTA0OTAsIDkwNDk1LCA5MDUwMCwgCi0gICAgOTA1MDUsIDkwNTEwLCA5MDUxNSwgOTA1MjAsIDkwNTI1LCA5MDUzMCwgOTA1MzUsIDkwNTQwLCA5MDU0NSwgOTA1NTAsIAotICAgIDkwNTU1LCA5MDU2MCwgOTA1NjUsIDkwNTcwLCA5MDU3NSwgOTA1ODAsIDkwNTg1LCA5MDU5MCwgOTA1OTUsIDkwNjAwLCAKLSAgICA5MDYwNSwgOTA2MTAsIDkwNjE1LCA5MDYyMCwgOTA2MjUsIDkwNjMwLCA5MDYzNSwgOTA2NDAsIDkwNjQ1LCA5MDY1MCwgCi0gICAgOTA2NTUsIDkwNjYwLCA5MDY2NSwgOTA2NzAsIDkwNjc1LCA5MDY4MCwgOTA2ODUsIDkwNjkwLCA5MDY5NSwgOTA3MDAsIAotICAgIDkwNzA1LCA5MDcxMCwgOTA3MTUsIDkwNzIwLCA5MDcyNSwgOTA3MzAsIDkwNzM1LCA5MDc0MCwgOTA3NDUsIDkwNzUwLCAKLSAgICA5MDc1NSwgOTA3NjAsIDkwNzY1LCA5MDc3MCwgOTA3NzUsIDkwNzgwLCA5MDc4NSwgOTA3OTAsIDkwNzk1LCA5MDgwMCwgCi0gICAgOTA4MDUsIDkwODEwLCA5MDgxNSwgOTA4MjAsIDkwODI1LCA5MDgzMCwgOTA4MzUsIDkwODQwLCA5MDg0NSwgOTA4NTAsIAotICAgIDkwODU1LCA5MDg2MCwgOTA4NjUsIDkwODY5LCA5MDg3MywgOTA4NzgsIDkwODgzLCA5MDg4OCwgOTA4OTMsIDkwODk4LCAKLSAgICA5MDkwMywgOTA5MDgsIDkwOTEzLCA5MDkxOCwgOTA5MjMsIDkwOTI4LCA5MDkzMiwgOTA5MzYsIDkwOTQwLCA5MDk0NCwgCi0gICAgOTA5NDgsIDkwOTUyLCA5MDk1NiwgOTA5NjEsIDkwOTY2LCAwLCAwLCA5MDk3MSwgOTA5NzYsIDkwOTgwLCA5MDk4NCwgCi0gICAgOTA5ODgsIDkwOTkyLCA5MDk5NiwgOTEwMDAsIDkxMDA0LCA5MTAwOCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgODk3NTcsIDg5NzYyLCA4OTc2NywgODk3NzIsIDg5Nzc3LCA4OTc4MiwgODk3ODcsIAorICAgIDg5NzkyLCA4OTc5NywgODk4MDIsIDg5ODA3LCA4OTgxMiwgODk4MTcsIDg5ODIyLCA4OTgyNywgODk4MzIsIDg5ODM3LCAKKyAgICA4OTg0MiwgODk4NDcsIDg5ODUyLCA4OTg1NywgODk4NjIsIDg5ODY3LCA4OTg3MiwgODk4NzcsIDg5ODgyLCA4OTg4NywgCisgICAgODk4OTEsIDg5ODk1LCA4OTg5OSwgMCwgODk5MDQsIDg5OTEwLCA4OTkxNSwgODk5MjAsIDg5OTI1LCA4OTkzMCwgODk5MzYsIAorICAgIDg5OTQyLCA4OTk0OCwgODk5NTQsIDg5OTYwLCA4OTk2NiwgODk5NzIsIDg5OTc4LCA4OTk4NCwgODk5OTAsIDg5OTk2LCAKKyAgICA5MDAwMiwgOTAwMDgsIDkwMDEzLCA5MDAxOSwgOTAwMjUsIDkwMDMwLCA5MDAzNiwgOTAwNDEsIDkwMDQ3LCA5MDA1MywgCisgICAgOTAwNTgsIDkwMDY0LCA5MDA3MCwgOTAwNzUsIDkwMDgxLCA5MDA4NywgOTAwOTIsIDkwMDk4LCA5MDEwNCwgOTAxMTAsIDAsIAorICAgIDAsIDAsIDAsIDkwMTE1LCA5MDEyMSwgOTAxMjcsIDkwMTMzLCA5MDEzOSwgOTAxNDUsIDkwMTUxLCA5MDE1NywgOTAxNjMsIAorICAgIDkwMTcwLCA5MDE3NSwgOTAxODAsIDkwMTg2LCA5MDE5MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgOTAxOTgsIDkwMjAzLCA5MDIwOCwgOTAyMTMsIDkwMjE5LCA5MDIyNCwgOTAyMzAsIDkwMjM2LCAKKyAgICA5MDI0MiwgOTAyNDgsIDkwMjU1LCA5MDI2MSwgOTAyNjgsIDkwMjczLCA5MDI3OCwgOTAyODMsIDkwMjg4LCA5MDI5MywgCisgICAgOTAyOTgsIDkwMzAzLCA5MDMwOCwgOTAzMTMsIDkwMzE4LCA5MDMyMywgOTAzMjgsIDkwMzMzLCA5MDMzOCwgOTAzNDMsIAorICAgIDkwMzQ4LCA5MDM1MywgOTAzNTgsIDkwMzYzLCA5MDM2OCwgOTAzNzMsIDkwMzc4LCA5MDM4MywgOTAzODgsIDkwMzkzLCAKKyAgICA5MDM5OCwgOTA0MDMsIDkwNDA4LCA5MDQxMywgOTA0MTgsIDkwNDIzLCA5MDQyOSwgOTA0MzQsIDkwNDQwLCA5MDQ0NiwgCisgICAgOTA0NTIsIDkwNDU4LCA5MDQ2NSwgOTA0NzEsIDkwNDc4LCA5MDQ4MywgOTA0ODgsIDkwNDkzLCA5MDQ5OCwgOTA1MDMsIAorICAgIDkwNTA4LCA5MDUxMywgOTA1MTgsIDkwNTIzLCA5MDUyOCwgOTA1MzMsIDkwNTM4LCA5MDU0MywgOTA1NDgsIDkwNTUzLCAKKyAgICA5MDU1OCwgOTA1NjMsIDkwNTY4LCA5MDU3MywgOTA1NzgsIDkwNTgzLCA5MDU4OCwgOTA1OTMsIDkwNTk4LCA5MDYwMywgCisgICAgOTA2MDgsIDkwNjEzLCA5MDYxOCwgOTA2MjMsIDkwNjI4LCA5MDYzMywgOTA2MzgsIDkwNjQzLCA5MDY0OCwgOTA2NTMsIAorICAgIDkwNjU4LCA5MDY2MywgOTA2NjgsIDkwNjczLCA5MDY3OCwgOTA2ODMsIDkwNjg4LCA5MDY5MywgOTA2OTgsIDkwNzAzLCAKKyAgICA5MDcwOCwgOTA3MTMsIDkwNzE4LCA5MDcyMywgOTA3MjgsIDkwNzMzLCA5MDczOCwgOTA3NDMsIDkwNzQ4LCA5MDc1MywgCisgICAgOTA3NTgsIDkwNzYzLCA5MDc2OCwgOTA3NzMsIDkwNzc4LCA5MDc4MywgOTA3ODgsIDkwNzkzLCA5MDc5OCwgOTA4MDMsIAorICAgIDkwODA4LCA5MDgxMywgOTA4MTgsIDkwODIzLCA5MDgyOCwgOTA4MzMsIDkwODM4LCA5MDg0MywgOTA4NDgsIDkwODUzLCAKKyAgICA5MDg1OCwgOTA4NjMsIDkwODY4LCA5MDg3MywgOTA4NzgsIDkwODgzLCA5MDg4OCwgOTA4OTMsIDkwODk3LCA5MDkwMSwgCisgICAgOTA5MDYsIDkwOTExLCA5MDkxNiwgOTA5MjEsIDkwOTI2LCA5MDkzMSwgOTA5MzYsIDkwOTQxLCA5MDk0NiwgOTA5NTEsIAorICAgIDkwOTU2LCA5MDk2MCwgOTA5NjQsIDkwOTY4LCA5MDk3MiwgOTA5NzYsIDkwOTgwLCA5MDk4NCwgOTA5ODksIDkwOTk0LCAwLCAKKyAgICAwLCA5MDk5OSwgOTEwMDQsIDkxMDA4LCA5MTAxMiwgOTEwMTYsIDkxMDIwLCA5MTAyNCwgOTEwMjgsIDkxMDMyLCA5MTAzNiwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTEwMTIsIDkxMDE2LCA5MTAyMCwgOTEwMjQsIDkxMDI4LCA5MTAzMiwgMCwgMCwgOTEwMzcsIDAsIAotICAgIDkxMDQyLCA5MTA0NiwgOTEwNTEsIDkxMDU2LCA5MTA2MSwgOTEwNjYsIDkxMDcxLCA5MTA3NiwgOTEwODEsIDkxMDg2LCAKLSAgICA5MTA5MSwgOTEwOTUsIDkxMTAwLCA5MTEwNSwgOTExMTAsIDkxMTE1LCA5MTExOSwgOTExMjQsIDkxMTI5LCA5MTEzNCwgCi0gICAgOTExMzksIDkxMTQzLCA5MTE0OCwgOTExNTMsIDkxMTU4LCA5MTE2MywgOTExNjcsIDkxMTcyLCA5MTE3NywgOTExODIsIAotICAgIDkxMTg3LCA5MTE5MSwgOTExOTYsIDkxMjAxLCA5MTIwNiwgOTEyMTEsIDkxMjE2LCA5MTIyMSwgOTEyMjYsIDkxMjMwLCAKLSAgICA5MTIzNSwgOTEyNDAsIDkxMjQ1LCA5MTI1MCwgMCwgOTEyNTUsIDkxMjYwLCAwLCAwLCAwLCA5MTI2NSwgMCwgMCwgOTEyNzAsIAotICAgIDkxMjc1LCA5MTI4MiwgOTEyODksIDkxMjk2LCA5MTMwMywgOTEzMTAsIDkxMzE3LCA5MTMyNCwgOTEzMzEsIDkxMzM4LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTA0MCwgOTEwNDQsIDkxMDQ4LCA5MTA1MiwgCisgICAgOTEwNTYsIDkxMDYwLCAwLCAwLCA5MTA2NSwgMCwgOTEwNzAsIDkxMDc0LCA5MTA3OSwgOTEwODQsIDkxMDg5LCA5MTA5NCwgCisgICAgOTEwOTksIDkxMTA0LCA5MTEwOSwgOTExMTQsIDkxMTE5LCA5MTEyMywgOTExMjgsIDkxMTMzLCA5MTEzOCwgOTExNDMsIAorICAgIDkxMTQ3LCA5MTE1MiwgOTExNTcsIDkxMTYyLCA5MTE2NywgOTExNzEsIDkxMTc2LCA5MTE4MSwgOTExODYsIDkxMTkxLCAKKyAgICA5MTE5NSwgOTEyMDAsIDkxMjA1LCA5MTIxMCwgOTEyMTUsIDkxMjE5LCA5MTIyNCwgOTEyMjksIDkxMjM0LCA5MTIzOSwgCisgICAgOTEyNDQsIDkxMjQ5LCA5MTI1NCwgOTEyNTgsIDkxMjYzLCA5MTI2OCwgOTEyNzMsIDkxMjc4LCAwLCA5MTI4MywgOTEyODgsIAorICAgIDAsIDAsIDAsIDkxMjkzLCAwLCAwLCA5MTI5OCwgOTEzMDMsIDkxMzEwLCA5MTMxNywgOTEzMjQsIDkxMzMxLCA5MTMzOCwgCiAgICAgOTEzNDUsIDkxMzUyLCA5MTM1OSwgOTEzNjYsIDkxMzczLCA5MTM4MCwgOTEzODcsIDkxMzk0LCA5MTQwMSwgOTE0MDgsIAotICAgIDkxNDE1LCA5MTQyMiwgMCwgOTE0MjksIDkxNDM2LCA5MTQ0MiwgOTE0NDgsIDkxNDU0LCA5MTQ2MSwgOTE0NjgsIDkxNDc2LCAKLSAgICA5MTQ4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE0OTMsIDkxNDk4LCA5MTUwMywgOTE1MDgsIDkxNTEzLCA5MTUxOCwgCi0gICAgOTE1MjMsIDkxNTI4LCA5MTUzMywgOTE1MzgsIDkxNTQzLCA5MTU0OCwgOTE1NTMsIDkxNTU4LCA5MTU2MywgOTE1NjgsIAotICAgIDkxNTczLCA5MTU3OCwgOTE1ODMsIDkxNTg4LCA5MTU5MywgOTE1OTgsIDkxNjAzLCA5MTYwNywgOTE2MTIsIDkxNjE3LCAKLSAgICA5MTYyMywgOTE2MjcsIDAsIDAsIDAsIDkxNjMxLCA5MTYzNywgOTE2NDEsIDkxNjQ2LCA5MTY1MSwgOTE2NTYsIDkxNjYwLCAKLSAgICA5MTY2NSwgOTE2NjksIDkxNjc0LCA5MTY3OSwgOTE2ODMsIDkxNjg3LCA5MTY5MiwgOTE2OTYsIDkxNzAwLCA5MTcwNSwgCi0gICAgOTE3MTAsIDkxNzE0LCA5MTcxOSwgOTE3MjQsIDkxNzI5LCA5MTczNCwgOTE3MzksIDkxNzQ0LCA5MTc0OSwgOTE3NTQsIDAsIAotICAgIDAsIDAsIDAsIDAsIDkxNzU5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MTc2NCwgCi0gICAgOTE3NzAsIDkxNzc2LCA5MTc4MiwgOTE3ODgsIDkxNzk0LCA5MTgwMSwgOTE4MDgsIDkxODE1LCA5MTgyMSwgOTE4MjcsIAotICAgIDkxODMzLCA5MTg0MCwgOTE4NDcsIDkxODU0LCA5MTg2MCwgOTE4NjcsIDkxODc0LCA5MTg4MSwgOTE4ODgsIDkxODk0LCAKLSAgICA5MTkwMSwgOTE5MDgsIDkxOTE0LCA5MTkyMSwgOTE5MjgsIDkxOTM1LCA5MTk0MiwgOTE5NDksIDkxOTU1LCA5MTk2MiwgCi0gICAgOTE5NjksIDkxOTc2LCA5MTk4MiwgOTE5ODgsIDkxOTk0LCA5MjAwMCwgOTIwMDYsIDkyMDEzLCA5MjAyMCwgOTIwMjYsIAotICAgIDkyMDMyLCA5MjAzOCwgOTIwNDUsIDkyMDUxLCA5MjA1OCwgOTIwNjUsIDkyMDcyLCA5MjA3OCwgOTIwODYsIDkyMDkzLCAKLSAgICA5MjA5OSwgOTIxMDYsIDkyMTEzLCA5MjEyMCwgOTIxMjYsIDAsIDAsIDAsIDAsIDAsIDAsIDkyMTMzLCA5MjE0MSwgMCwgMCwgCisgICAgOTE0MTUsIDkxNDIyLCA5MTQyOSwgOTE0MzYsIDkxNDQzLCA5MTQ1MCwgMCwgOTE0NTcsIDkxNDY0LCA5MTQ3MCwgOTE0NzYsIAorICAgIDkxNDgyLCA5MTQ4OSwgOTE0OTYsIDkxNTA0LCA5MTUxMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE1MjEsIDkxNTI2LCAKKyAgICA5MTUzMSwgOTE1MzYsIDkxNTQxLCA5MTU0NiwgOTE1NTEsIDkxNTU2LCA5MTU2MSwgOTE1NjYsIDkxNTcxLCA5MTU3NiwgCisgICAgOTE1ODEsIDkxNTg2LCA5MTU5MSwgOTE1OTYsIDkxNjAxLCA5MTYwNiwgOTE2MTEsIDkxNjE2LCA5MTYyMSwgOTE2MjYsIAorICAgIDkxNjMxLCA5MTYzNSwgOTE2NDAsIDkxNjQ1LCA5MTY1MSwgOTE2NTUsIDAsIDAsIDAsIDkxNjU5LCA5MTY2NSwgOTE2NjksIAorICAgIDkxNjc0LCA5MTY3OSwgOTE2ODQsIDkxNjg4LCA5MTY5MywgOTE2OTcsIDkxNzAyLCA5MTcwNywgOTE3MTEsIDkxNzE1LCAKKyAgICA5MTcyMCwgOTE3MjQsIDkxNzI4LCA5MTczMywgOTE3MzgsIDkxNzQyLCA5MTc0NywgOTE3NTIsIDkxNzU3LCA5MTc2MiwgCisgICAgOTE3NjcsIDkxNzcyLCA5MTc3NywgOTE3ODIsIDAsIDAsIDAsIDAsIDAsIDkxNzg3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MjE0OSwgOTIxNTMsIDkyMTU4LCA5MjE2MywgMCwgCi0gICAgOTIxNjksIDkyMTc0LCAwLCAwLCAwLCAwLCAwLCA5MjE3OSwgOTIxODUsIDkyMTkyLCA5MjE5NywgOTIyMDIsIDkyMjA2LCAKLSAgICA5MjIxMSwgOTIyMTYsIDAsIDkyMjIxLCA5MjIyNiwgOTIyMzEsIDAsIDkyMjM2LCA5MjI0MSwgOTIyNDYsIDkyMjUxLCAKLSAgICA5MjI1NiwgOTIyNjEsIDkyMjY2LCA5MjI3MSwgOTIyNzYsIDkyMjgxLCA5MjI4NiwgOTIyOTAsIDkyMjk0LCA5MjI5OSwgCi0gICAgOTIzMDQsIDkyMzA5LCA5MjMxMywgOTIzMTcsIDkyMzIxLCA5MjMyNiwgOTIzMzEsIDkyMzM2LCA5MjM0MSwgOTIzNDUsIAotICAgIDkyMzUwLCA5MjM1NCwgOTIzNTksIDAsIDAsIDAsIDAsIDkyMzY0LCA5MjM3MCwgOTIzNzUsIDAsIDAsIDAsIDAsIDkyMzgwLCAKLSAgICA5MjM4NCwgOTIzODgsIDkyMzkyLCA5MjM5NiwgOTI0MDAsIDkyNDA1LCA5MjQxMCwgOTI0MTYsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDkyNDIyLCA5MjQyOCwgOTI0MzUsIDkyNDQxLCA5MjQ0OCwgOTI0NTQsIDkyNDYwLCA5MjQ2NiwgOTI0NzMsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDkyNDc5LCA5MjQ4NywgOTI0OTUsIDkyNTAzLCA5MjUxMSwgOTI1MTksIDkyNTI3LCA5MjUzNSwgCi0gICAgOTI1NDMsIDkyNTUxLCA5MjU1OSwgOTI1NjcsIDkyNTc1LCA5MjU4MywgOTI1OTEsIDkyNTk5LCA5MjYwNywgOTI2MTUsIAotICAgIDkyNjIzLCA5MjYzMSwgOTI2MzksIDkyNjQ3LCA5MjY1NSwgOTI2NjMsIDkyNjcxLCA5MjY3OSwgOTI2ODcsIDkyNjk1LCAKLSAgICA5MjcwMywgOTI3MTEsIDkyNzE4LCA5MjcyNiwgOTI3MzQsIDkyNzM4LCA5Mjc0MywgOTI3NDgsIDkyNzUzLCA5Mjc1OCwgCi0gICAgOTI3NjMsIDkyNzY4LCA5Mjc3MywgOTI3NzcsIDkyNzgyLCA5Mjc4NiwgOTI3OTEsIDkyNzk1LCA5MjgwMCwgOTI4MDQsIAotICAgIDkyODA5LCA5MjgxNCwgOTI4MTksIDkyODI0LCA5MjgyOSwgOTI4MzQsIDkyODM5LCA5Mjg0NCwgOTI4NDksIDkyODU0LCAKLSAgICA5Mjg1OSwgOTI4NjQsIDkyODY5LCA5Mjg3NCwgOTI4NzksIDkyODg0LCA5Mjg4OSwgOTI4OTQsIDkyODk5LCA5MjkwNCwgCi0gICAgOTI5MDksIDkyOTE0LCA5MjkxOSwgOTI5MjQsIDkyOTI5LCA5MjkzNCwgOTI5MzksIDkyOTQ0LCA5Mjk0OSwgOTI5NTQsIAotICAgIDkyOTU5LCA5Mjk2NCwgOTI5NjksIDkyOTc0LCA5Mjk3OSwgOTI5ODQsIDkyOTg5LCA5Mjk5NCwgMCwgMCwgMCwgOTI5OTksIAotICAgIDkzMDA0LCA5MzAxMywgOTMwMjEsIDkzMDMwLCA5MzAzOSwgOTMwNTAsIDkzMDYxLCA5MzA2OCwgOTMwNzUsIDkzMDgyLCAKLSAgICA5MzA4OSwgOTMwOTYsIDkzMTAzLCA5MzExMCwgOTMxMTcsIDkzMTI0LCA5MzEzMSwgOTMxMzgsIDkzMTQ1LCA5MzE1MiwgCi0gICAgOTMxNTksIDkzMTY2LCA5MzE3MywgOTMxODAsIDkzMTg3LCA5MzE5NCwgOTMyMDEsIDkzMjA4LCAwLCAwLCA5MzIxNSwgCi0gICAgOTMyMjEsIDkzMjI3LCA5MzIzMywgOTMyMzksIDkzMjQ2LCA5MzI1MywgOTMyNjEsIDkzMjY5LCA5MzI3NiwgOTMyODMsIAotICAgIDkzMjkwLCA5MzI5NywgOTMzMDQsIDkzMzExLCA5MzMxOCwgOTMzMjUsIDkzMzMyLCA5MzMzOSwgOTMzNDYsIDkzMzUzLCAKLSAgICA5MzM2MCwgOTMzNjcsIDkzMzc0LCA5MzM4MSwgOTMzODgsIDkzMzk1LCAwLCAwLCAwLCAwLCAwLCA5MzQwMiwgOTM0MDgsIAotICAgIDkzNDE0LCA5MzQyMCwgOTM0MjYsIDkzNDMzLCA5MzQ0MCwgOTM0NDgsIDkzNDU2LCA5MzQ2MiwgOTM0NjgsIDkzNDc1LCAKLSAgICA5MzQ4MSwgOTM0ODcsIDkzNDkzLCA5MzQ5OSwgOTM1MDYsIDkzNTEzLCA5MzUyMCwgOTM1MjcsIDkzNTM0LCA5MzU0MSwgCi0gICAgOTM1NDgsIDkzNTU1LCA5MzU2MiwgOTM1NjksIDkzNTc2LCA5MzU4MywgOTM1OTAsIDkzNTk3LCA5MzYwNCwgOTM2MTEsIAotICAgIDkzNjE4LCA5MzYyNSwgOTM2MzIsIDkzNjM5LCA5MzY0NiwgOTM2NTMsIDkzNjYwLCA5MzY2NywgOTM2NzQsIDkzNjgxLCAKLSAgICA5MzY4OCwgOTM2OTUsIDkzNzAyLCA5MzcwOSwgOTM3MTYsIDkzNzIzLCA5MzczMCwgOTM3MzcsIDkzNzQ0LCA5Mzc1MSwgCi0gICAgOTM3NTgsIDkzNzY1LCA5Mzc3MiwgOTM3NzksIDkzNzg2LCA5Mzc5MywgOTM4MDAsIDkzODA3LCA5MzgxNCwgOTM4MjEsIAotICAgIDkzODI4LCA5MzgzNSwgOTM4NDIsIDkzODQ5LCA5Mzg1NiwgOTM4NjMsIDkzODcwLCA5Mzg3NywgOTM4ODQsIDkzODkxLCAKLSAgICA5Mzg5OCwgOTM5MDUsIDkzOTEyLCA5MzkxOSwgOTM5MjYsIDkzOTMzLCA5Mzk0MCwgOTM5NDcsIDkzOTU0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCA5Mzk2MSwgOTM5NjUsIDkzOTY5LCA5Mzk3MywgOTM5NzcsIDkzOTgxLCA5Mzk4NSwgOTM5ODksIAotICAgIDkzOTkzLCA5Mzk5NywgOTQwMDIsIDk0MDA3LCA5NDAxMiwgOTQwMTcsIDk0MDIyLCA5NDAyNywgOTQwMzIsIDk0MDM3LCAKLSAgICA5NDA0MiwgOTQwNDgsIDk0MDU0LCA5NDA2MCwgOTQwNjcsIDk0MDc0LCA5NDA4MSwgOTQwODgsIDk0MDk1LCA5NDEwMiwgCi0gICAgOTQxMDksIDk0MTE2LCA5NDEyMywgMCwgOTQxMzAsIDk0MTM0LCA5NDEzOCwgOTQxNDIsIDk0MTQ2LCA5NDE1MCwgOTQxNTMsIAotICAgIDk0MTU3LCA5NDE2MCwgOTQxNjQsIDk0MTY3LCA5NDE3MSwgOTQxNzUsIDk0MTgwLCA5NDE4NCwgOTQxODksIDk0MTkyLCAKLSAgICA5NDE5NiwgOTQxOTksIDk0MjAzLCA5NDIwNiwgOTQyMTAsIDk0MjE0LCA5NDIxOCwgOTQyMjIsIDk0MjI2LCA5NDIzMCwgCi0gICAgOTQyMzQsIDk0MjM4LCA5NDI0MiwgOTQyNDYsIDk0MjUwLCA5NDI1NCwgOTQyNTgsIDk0MjYyLCA5NDI2NiwgOTQyNzAsIAotICAgIDk0Mjc0LCA5NDI3OCwgOTQyODEsIDk0Mjg0LCA5NDI4OCwgOTQyOTIsIDk0Mjk2LCA5NDI5OSwgOTQzMDIsIDk0MzA1LCAKLSAgICA5NDMwOSwgOTQzMTMsIDk0MzE3LCA5NDMyMSwgOTQzMjQsIDk0MzI3LCA5NDMzMSwgOTQzMzcsIDk0MzQzLCA5NDM0OSwgCi0gICAgOTQzNTQsIDk0MzYxLCA5NDM2NSwgOTQzNzAsIDk0Mzc0LCA5NDM3OSwgOTQzODQsIDk0MzkwLCA5NDM5NSwgOTQ0MDEsIAotICAgIDk0NDA1LCA5NDQxMCwgOTQ0MTQsIDk0NDE5LCA5NDQyMiwgOTQ0MjUsIDk0NDI5LCA5NDQzNCwgOTQ0NDAsIDk0NDQ1LCAKLSAgICA5NDQ1MSwgMCwgMCwgMCwgMCwgOTQ0NTYsIDk0NDU5LCA5NDQ2MiwgOTQ0NjUsIDk0NDY4LCA5NDQ3MSwgOTQ0NzQsIAotICAgIDk0NDc3LCA5NDQ4MCwgOTQ0ODMsIDk0NDg3LCA5NDQ5MSwgOTQ0OTUsIDk0NDk5LCA5NDUwMywgOTQ1MDcsIDk0NTExLCAKLSAgICA5NDUxNSwgOTQ1MTksIDk0NTI0LCA5NDUyOSwgOTQ1MzMsIDk0NTM2LCA5NDUzOSwgOTQ1NDIsIDk0NTQ1LCA5NDU0OCwgCi0gICAgOTQ1NTEsIDk0NTU0LCA5NDU1NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgOTQ1NjAsIDk0NTY1LCA5NDU3MCwgOTQ1NzUsIDk0NTc5LCA5NDU4NCwgOTQ1ODgsIDk0NTkzLCA5NDU5NywgOTQ2MDIsIAotICAgIDk0NjA2LCA5NDYxMSwgOTQ2MTUsIDk0NjIwLCA5NDYyNCwgOTQ2MjksIDk0NjM0LCA5NDYzOSwgOTQ2NDQsIDk0NjQ5LCAKLSAgICA5NDY1NCwgOTQ2NTksIDk0NjY0LCA5NDY2OSwgOTQ2NzQsIDk0Njc5LCA5NDY4NCwgOTQ2ODksIDk0Njk0LCA5NDY5OSwgCi0gICAgOTQ3MDQsIDk0NzA5LCA5NDcxNCwgOTQ3MTksIDk0NzI0LCA5NDcyOCwgOTQ3MzIsIDk0NzM3LCA5NDc0MiwgOTQ3NDcsIAotICAgIDk0NzUxLCA5NDc1NSwgOTQ3NTksIDk0NzY0LCA5NDc2OSwgOTQ3NzQsIDk0Nzc5LCA5NDc4MywgOTQ3ODcsIDk0NzkzLCAKLSAgICA5NDc5OCwgOTQ4MDQsIDk0ODA5LCA5NDgxNSwgOTQ4MjAsIDk0ODI2LCA5NDgzMSwgOTQ4MzcsIDk0ODQyLCA5NDg0NywgCi0gICAgOTQ4NTIsIDk0ODU3LCA5NDg2MSwgOTQ4NjYsIDk0ODcyLCA5NDg3NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgOTQ4ODEsIDk0ODg4LCA5NDg5NSwgOTQ5MDIsIDk0OTA5LCA5NDkxNiwgOTQ5MjMsIDk0OTMwLCAKLSAgICA5NDkzNywgOTQ5NDQsIDk0OTUxLCA5NDk1OCwgOTQ5NjUsIDk0OTcyLCA5NDk3OSwgOTQ5ODYsIDk0OTkzLCA5NTAwMCwgCi0gICAgOTUwMDcsIDk1MDE0LCA5NTAyMSwgOTUwMjgsIDk1MDM1LCA5NTA0MiwgOTUwNDksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk1MDU2LCA5NTA2MywgOTUwNjksIDk1MDc1LCA5NTA4MSwgOTUwODcsIDk1MDkzLCA5NTA5OSwgOTUxMDUsIDk1MTExLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCA5NTExNywgOTUxMjIsIDk1MTI3LCA5NTEzMiwgOTUxMzcsIDk1MTQxLCA5NTE0NSwgOTUxNDksIAotICAgIDk1MTU0LCA5NTE1OSwgOTUxNjQsIDk1MTY5LCA5NTE3NCwgOTUxNzksIDk1MTg0LCA5NTE4OSwgOTUxOTQsIDk1MTk5LCAKLSAgICA5NTIwNCwgOTUyMDksIDk1MjE0LCA5NTIxOSwgOTUyMjQsIDk1MjI5LCA5NTIzNCwgOTUyMzksIDk1MjQ0LCA5NTI0OSwgCi0gICAgOTUyNTQsIDk1MjU5LCA5NTI2NCwgOTUyNjksIDk1Mjc0LCA5NTI3OSwgOTUyODQsIDk1Mjg5LCA5NTI5NCwgOTUyOTksIAotICAgIDk1MzA0LCA5NTMwOSwgOTUzMTQsIDk1MzE5LCA5NTMyNSwgOTUzMzAsIDk1MzM2LCA5NTM0MSwgOTUzNDcsIDk1MzUyLCAKLSAgICA5NTM1OCwgOTUzNjQsIDk1MzY4LCA5NTM3MywgOTUzNzcsIDAsIDk1MzgxLCA5NTM4NiwgOTUzOTAsIDk1Mzk0LCA5NTM5OCwgCi0gICAgOTU0MDIsIDk1NDA2LCA5NTQxMCwgOTU0MTQsIDk1NDE4LCA5NTQyMiwgOTU0MjcsIDk1NDMxLCA5NTQzNiwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTU0NDEsIDk1NDQ1LCA5NTQ0OSwgOTU0NTMsIDk1NDU2LCA5NTQ2MCwgCi0gICAgOTU0NjMsIDk1NDY3LCA5NTQ3MCwgOTU0NzQsIDk1NDc4LCA5NTQ4MywgOTU0ODcsIDk1NDkyLCA5NTQ5NSwgOTU0OTksIAotICAgIDk1NTAyLCA5NTUwNiwgOTU1MDksIDk1NTEzLCA5NTUxNywgOTU1MjEsIDk1NTI1LCA5NTUyOSwgOTU1MzMsIDk1NTM3LCAKLSAgICA5NTU0MSwgOTU1NDUsIDk1NTQ5LCA5NTU1MywgOTU1NTcsIDk1NTYxLCA5NTU2NSwgOTU1NjksIDk1NTczLCA5NTU3NywgCi0gICAgOTU1ODEsIDk1NTg0LCA5NTU4NywgOTU1OTEsIDk1NTk1LCA5NTU5OSwgOTU2MDIsIDk1NjA1LCA5NTYwOCwgOTU2MTIsIAotICAgIDk1NjE2LCA5NTYyMCwgOTU2MjQsIDk1NjI4LCA5NTYzMSwgOTU2MzQsIDk1NjM5LCA5NTY0MywgOTU2NDgsIDk1NjUyLCAKLSAgICA5NTY1NywgOTU2NjIsIDk1NjY4LCA5NTY3MywgOTU2NzksIDk1NjgzLCA5NTY4OCwgOTU2OTIsIDk1Njk3LCA5NTcwMSwgCi0gICAgOTU3MDUsIDk1NzA5LCA5NTcxMywgOTU3MTYsIDk1NzE5LCA5NTcyMywgOTU3MjcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDk1NzMwLCA5NTczNCwgOTU3MzcsIDk1NzQwLCA5NTc0MywgOTU3NDYsIDk1NzQ5LCA5NTc1MiwgOTU3NTUsIDk1NzU4LCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTc2MSwgOTU3NjUsIDk1NzcwLCA5NTc3NCwgOTU3NzksIAotICAgIDk1NzgzLCA5NTc4OCwgOTU3OTIsIDk1Nzk3LCA5NTgwMSwgOTU4MDYsIDk1ODEwLCA5NTgxNSwgOTU4MjAsIDk1ODI1LCAKLSAgICA5NTgzMCwgOTU4MzUsIDk1ODQwLCA5NTg0NSwgOTU4NTAsIDk1ODU1LCA5NTg2MCwgOTU4NjUsIDk1ODcwLCA5NTg3NSwgCi0gICAgOTU4ODAsIDk1ODg1LCA5NTg5MCwgOTU4OTUsIDk1OTAwLCA5NTkwNCwgOTU5MDgsIDk1OTEzLCA5NTkxOCwgOTU5MjMsIAotICAgIDk1OTI3LCA5NTkzMSwgOTU5MzUsIDk1OTQwLCA5NTk0NSwgOTU5NTAsIDk1OTU0LCA5NTk1OCwgOTU5NjMsIDk1OTY4LCAKLSAgICA5NTk3MywgOTU5NzksIDk1OTg0LCA5NTk5MCwgOTU5OTUsIDk2MDAxLCA5NjAwNiwgOTYwMTIsIDk2MDE3LCA5NjAyMywgCi0gICAgOTYwMjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk2MDMzLCA5NjAzOCwgOTYwNDIsIDk2MDQ2LCA5NjA1MCwgOTYwNTQsIAotICAgIDk2MDU4LCA5NjA2MiwgOTYwNjYsIDk2MDcwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NjA3NCwgOTYwNzcsIDk2MDgyLCA5NjA4OCwgCi0gICAgOTYwOTYsIDk2MTAxLCA5NjEwNywgOTYxMTUsIDk2MTIxLCA5NjEyNywgOTYxMzEsIDk2MTM1LCA5NjE0MiwgOTYxNTEsIAotICAgIDk2MTU4LCA5NjE2NywgOTYxNzMsIDk2MTgyLCA5NjE4OSwgOTYxOTYsIDk2MjAzLCA5NjIxMywgOTYyMTksIDk2MjIzLCAKLSAgICA5NjIzMCwgOTYyMzksIDk2MjQ5LCA5NjI1NiwgOTYyNjMsIDk2MjY3LCA5NjI3MSwgOTYyNzgsIDk2Mjg4LCA5NjI5MiwgCi0gICAgOTYyOTksIDk2MzA2LCA5NjMxMywgOTYzMTksIDk2MzI2LCA5NjMzMywgOTYzNDAsIDk2MzQ3LCA5NjM1MSwgOTYzNTUsIAotICAgIDk2MzU5LCA5NjM2NiwgOTYzNzAsIDk2Mzc3LCA5NjM4NCwgOTYzOTgsIDk2NDA3LCA5NjQxMSwgOTY0MTUsIDk2NDE5LCAKLSAgICA5NjQyNiwgOTY0MzAsIDk2NDM0LCA5NjQzOCwgOTY0NDYsIDk2NDU0LCA5NjQ3MywgOTY0ODMsIDk2NTAzLCA5NjUwNywgCi0gICAgOTY1MTEsIDk2NTE1LCA5NjUxOSwgOTY1MjMsIDk2NTI3LCA5NjUzMSwgOTY1MzgsIDk2NTQyLCA5NjU0NSwgOTY1NDksIAotICAgIDk2NTUzLCA5NjU1OSwgOTY1NjYsIDk2NTc1LCA5NjU3OSwgOTY1ODgsIDk2NTk3LCA5NjYwNSwgOTY2MDksIDk2NjE2LCAKLSAgICA5NjYyMCwgOTY2MjQsIDk2NjI4LCA5NjYzMiwgOTY2NDMsIDk2NjUyLCA5NjY2MSwgOTY2NzAsIDk2Njc5LCA5NjY5MSwgCi0gICAgOTY3MDAsIDk2NzA5LCA5NjcxOCwgOTY3MjYsIDk2NzM1LCA5Njc0NywgOTY3NTYsIDk2NzY1LCA5Njc3NCwgOTY3ODYsIAotICAgIDk2Nzk1LCA5NjgwNCwgOTY4MTYsIDk2ODI1LCA5NjgzNCwgOTY4NDYsIDk2ODU1LCA5Njg1OSwgOTY4NjMsIDk2ODY3LCAKLSAgICA5Njg3MSwgOTY4NzUsIDk2ODc5LCA5Njg4MywgOTY4OTAsIDk2ODk0LCA5Njg5OCwgOTY5MDksIDk2OTEzLCA5NjkxNywgCi0gICAgOTY5MjQsIDk2OTMwLCA5NjkzNiwgOTY5NDAsIDk2OTQ3LCA5Njk1MSwgOTY5NTUsIDk2OTU5LCA5Njk2MywgOTY5NjcsIAotICAgIDk2OTcxLCA5Njk3NywgOTY5ODUsIDk2OTg5LCA5Njk5MywgOTY5OTYsIDk3MDAyLCA5NzAxMiwgOTcwMTYsIDk3MDI4LCAKLSAgICA5NzAzNSwgOTcwNDIsIDk3MDQ5LCA5NzA1NiwgOTcwNjIsIDk3MDY2LCA5NzA3MCwgOTcwNzQsIDk3MDc4LCA5NzA4NSwgCi0gICAgOTcwOTQsIDk3MTAxLCA5NzEwOSwgOTcxMTcsIDk3MTIzLCA5NzEyNywgOTcxMzEsIDk3MTM1LCA5NzEzOSwgOTcxNDUsIAotICAgIDk3MTU0LCA5NzE2NiwgOTcxNzMsIDk3MTgwLCA5NzE4OSwgOTcyMDAsIDk3MjA2LCA5NzIxNSwgOTcyMjQsIDk3MjMxLCAKLSAgICA5NzI0MCwgOTcyNDcsIDk3MjU0LCA5NzI2NCwgOTcyNzEsIDk3Mjc4LCA5NzI4NSwgOTcyOTIsIDk3Mjk2LCA5NzMwMiwgCi0gICAgOTczMDYsIDk3MzE3LCA5NzMyNSwgOTczMzQsIDk3MzQ2LCA5NzM1MywgOTczNjAsIDk3MzcwLCA5NzM3NywgOTczODYsIAotICAgIDk3MzkzLCA5NzQwMiwgOTc0MDksIDk3NDE2LCA5NzQyNiwgOTc0MzMsIDk3NDQwLCA5NzQ1MCwgOTc0NTcsIDk3NDY5LCAKLSAgICA5NzQ3OCwgOTc0ODUsIDk3NDkyLCA5NzQ5OSwgOTc1MDgsIDk3NTE4LCA5NzUzMSwgOTc1MzgsIDk3NTQ4LCA5NzU1OCwgCi0gICAgOTc1NjUsIDk3NTc0LCA5NzU4NywgOTc1OTQsIDk3NjAxLCA5NzYwOCwgOTc2MTgsIDk3NjI4LCA5NzYzNSwgOTc2NDUsIAotICAgIDk3NjUyLCA5NzY1OSwgOTc2NjksIDk3Njc1LCA5NzY4MiwgOTc2ODksIDk3Njk2LCA5NzcwNiwgOTc3MTMsIDk3NzIwLCAKLSAgICA5NzcyNywgOTc3MzMsIDk3NzQwLCA5Nzc1MCwgOTc3NTcsIDk3NzYxLCA5Nzc2OSwgOTc3NzMsIDk3Nzg1LCA5Nzc4OSwgCi0gICAgOTc4MDMsIDk3ODA3LCA5NzgxMSwgOTc4MTUsIDk3ODE5LCA5NzgyNSwgOTc4MzIsIDk3ODQwLCA5Nzg0NCwgOTc4NDgsIAotICAgIDk3ODUyLCA5Nzg1NiwgOTc4NjMsIDk3ODY3LCA5Nzg3MywgOTc4NzksIDk3ODg3LCA5Nzg5MSwgOTc4OTgsIDk3OTA2LCAKLSAgICA5NzkxMCwgOTc5MTQsIDk3OTIwLCA5NzkyNCwgOTc5MzMsIDk3OTQyLCA5Nzk0OSwgOTc5NTksIDk3OTY1LCA5Nzk2OSwgCi0gICAgOTc5NzMsIDk3OTgxLCA5Nzk4OCwgOTc5OTUsIDk4MDAxLCA5ODAwNSwgOTgwMTMsIDk4MDE3LCA5ODAyNCwgOTgwMzYsIAotICAgIDk4MDQzLCA5ODA1MywgOTgwNTksIDk4MDYzLCA5ODA3MiwgOTgwNzksIDk4MDg4LCA5ODA5MiwgOTgwOTYsIDk4MTAzLCAKLSAgICA5ODEwNywgOTgxMTEsIDk4MTE1LCA5ODExOSwgOTgxMjIsIDk4MTI4LCA5ODEzNCwgOTgxMzgsIDk4MTQyLCA5ODE0OSwgCi0gICAgOTgxNTYsIDk4MTYzLCA5ODE3MCwgOTgxNzcsIDk4MTg0LCA5ODE5MSwgOTgxOTgsIDk4MjA0LCA5ODIwOCwgOTgyMTIsIAotICAgIDk4MjE5LCA5ODIyNiwgOTgyMzMsIDk4MjQwLCA5ODI0NywgOTgyNTEsIDk4MjU0LCA5ODI1OSwgOTgyNjMsIDk4MjY3LCAKLSAgICA5ODI3NiwgOTgyODUsIDk4Mjg5LCA5ODI5MywgOTgyOTksIDk4MzA1LCA5ODMyMiwgOTgzMjgsIDk4MzMyLCA5ODM0MSwgCi0gICAgOTgzNDUsIDk4MzQ5LCA5ODM1NiwgOTgzNjQsIDk4MzcyLCA5ODM3OCwgOTgzODIsIDk4Mzg2LCA5ODM5MCwgOTgzOTQsIAotICAgIDk4Mzk3LCA5ODQwMywgOTg0MTAsIDk4NDIwLCA5ODQyNywgOTg0MzQsIDk4NDQxLCA5ODQ0NywgOTg0NTQsIDk4NDYxLCAKLSAgICA5ODQ2OCwgOTg0NzUsIDk4NDgyLCA5ODQ5MSwgOTg0OTgsIDk4NTEwLCA5ODUxNywgOTg1MjQsIDk4NTM0LCA5ODU0NSwgCi0gICAgOTg1NTIsIDk4NTU5LCA5ODU2NiwgOTg1NzMsIDk4NTgwLCA5ODU4NywgOTg1OTQsIDk4NjAxLCA5ODYwOCwgOTg2MTUsIAotICAgIDk4NjI1LCA5ODYzNSwgOTg2NDUsIDk4NjUyLCA5ODY2MiwgOTg2NjksIDk4Njc2LCA5ODY4MywgOTg2OTAsIDk4Njk2LCAKLSAgICA5ODcwMywgOTg3MTAsIDk4NzE3LCA5ODcyNCwgOTg3MzEsIDk4NzM4LCA5ODc0NSwgOTg3NTIsIDk4NzU4LCA5ODc2NSwgCi0gICAgOTg3NzIsIDk4NzgxLCA5ODc4OCwgOTg3OTUsIDk4Nzk5LCA5ODgwNywgOTg4MTEsIDk4ODE1LCA5ODgxOSwgOTg4MjMsIAotICAgIDk4ODI3LCA5ODgzNCwgOTg4MzgsIDk4ODQ3LCA5ODg1MSwgOTg4NTgsIDk4ODY2LCA5ODg3MCwgOTg4NzQsIDk4ODc4LCAKLSAgICA5ODg5MSwgOTg5MDcsIDk4OTExLCA5ODkxNSwgOTg5MjIsIDk4OTI4LCA5ODkzNSwgOTg5MzksIDk4OTQzLCA5ODk0NywgCi0gICAgOTg5NTEsIDk4OTU1LCA5ODk2MiwgOTg5NjYsIDk4OTg0LCA5ODk4OCwgOTg5OTIsIDk4OTk5LCA5OTAwMywgOTkwMDcsIAotICAgIDk5MDEzLCA5OTAxNywgOTkwMjEsIDk5MDI5LCA5OTAzMywgOTkwMzcsIDk5MDQxLCA5OTA0NSwgOTkwNTEsIDk5MDYyLCAKLSAgICA5OTA3MSwgOTkwODAsIDk5MDg3LCA5OTA5NCwgOTkxMDUsIDk5MTEyLCA5OTExOSwgOTkxMjYsIDk5MTMzLCA5OTE0MCwgCi0gICAgOTkxNDcsIDk5MTU0LCA5OTE2NCwgOTkxNzAsIDk5MTc3LCA5OTE4NywgOTkxOTYsIDk5MjAzLCA5OTIxMiwgOTkyMjIsIAotICAgIDk5MjI5LCA5OTIzNiwgOTkyNDMsIDk5MjUwLCA5OTI2MiwgOTkyNjksIDk5Mjc2LCA5OTI4MywgOTkyOTAsIDk5Mjk3LCAKLSAgICA5OTMwNywgOTkzMTQsIDk5MzIxLCA5OTMzMSwgOTkzNDQsIDk5MzU2LCA5OTM2MywgOTkzNzMsIDk5MzgwLCA5OTM4NywgCi0gICAgOTkzOTQsIDk5NDA4LCA5OTQxNCwgOTk0MjIsIDk5NDMyLCA5OTQ0MiwgOTk0NDksIDk5NDU2LCA5OTQ2MiwgOTk0NjYsIAotICAgIDk5NDczLCA5OTQ4MywgOTk0ODksIDk5NTAyLCA5OTUwNiwgOTk1MTAsIDk5NTE3LCA5OTUyMSwgOTk1MjgsIDk5NTM4LCAKLSAgICA5OTU0MiwgOTk1NDYsIDk5NTUwLCA5OTU1NCwgOTk1NTgsIDk5NTY1LCA5OTU2OSwgOTk1NzYsIDk5NTgzLCA5OTU5MCwgCi0gICAgOTk1OTksIDk5NjA4LCA5OTYxOCwgOTk2MjUsIDk5NjMyLCA5OTYzOSwgOTk2NDksIDk5NjU2LCA5OTY2NiwgOTk2NzMsIAotICAgIDk5NjgzLCA5OTY5MCwgOTk2OTcsIDk5NzA3LCA5OTcxNywgOTk3MjQsIDk5NzMwLCA5OTczOCwgOTk3NDYsIDk5NzUyLCAKLSAgICA5OTc1OCwgOTk3NjIsIDk5NzY2LCA5OTc3MywgOTk3ODEsIDk5Nzg3LCA5OTc5MSwgOTk3OTUsIDk5Nzk5LCA5OTgwNiwgCi0gICAgOTk4MTgsIDk5ODIxLCA5OTgyOCwgOTk4MzQsIDk5ODM4LCA5OTg0MiwgOTk4NDYsIDk5ODUwLCA5OTg1NCwgOTk4NTgsIAotICAgIDk5ODYyLCA5OTg2NiwgOTk4NzAsIDk5ODc0LCA5OTg4MSwgOTk4ODUsIDk5ODkxLCA5OTg5NSwgOTk4OTksIDk5OTAzLCAKLSAgICA5OTkwOSwgOTk5MTYsIDk5OTIzLCA5OTkzMCwgOTk5NDEsIDk5OTQ5LCA5OTk1MywgOTk5NTksIDk5OTY4LCA5OTk3NSwgCi0gICAgOTk5ODEsIDk5OTg0LCA5OTk4OCwgOTk5OTIsIDk5OTk4LCAxMDAwMDcsIDEwMDAxNSwgMTAwMDE5LCAxMDAwMjUsIAotICAgIDEwMDAyOSwgMTAwMDMzLCAxMDAwMzcsIDEwMDA0MywgMTAwMDUwLCAxMDAwNTYsIDEwMDA2MCwgMTAwMDY2LCAxMDAwNzAsIAotICAgIDEwMDA3NCwgMTAwMDgzLCAxMDAwOTUsIDEwMDA5OSwgMTAwMTA2LCAxMDAxMTMsIDEwMDEyMywgMTAwMTMwLCAxMDAxNDIsIAotICAgIDEwMDE0OSwgMTAwMTU2LCAxMDAxNjMsIDEwMDE3NCwgMTAwMTg0LCAxMDAxOTcsIDEwMDIwNywgMTAwMjE0LCAxMDAyMTgsIAotICAgIDEwMDIyMiwgMTAwMjI2LCAxMDAyMzAsIDEwMDIzOSwgMTAwMjQ4LCAxMDAyNTcsIDEwMDI3NCwgMTAwMjgzLCAxMDAyODksIAotICAgIDEwMDI5NiwgMTAwMzA0LCAxMDAzMTcsIDEwMDMyMSwgMTAwMzMwLCAxMDAzMzksIDEwMDM0OCwgMTAwMzU3LCAxMDAzNjgsIAotICAgIDEwMDM3NywgMTAwMzg2LCAxMDAzOTUsIDEwMDQwNCwgMTAwNDEzLCAxMDA0MjIsIDEwMDQzMiwgMTAwNDM1LCAxMDA0MzksIAotICAgIDEwMDQ0MywgMTAwNDQ3LCAxMDA0NTEsIDEwMDQ1NSwgMTAwNDYxLCAxMDA0NjgsIDEwMDQ3NSwgMTAwNDgyLCAxMDA0ODgsIAotICAgIDEwMDQ5NCwgMTAwNTAxLCAxMDA1MDcsIDEwMDUxNCwgMTAwNTIyLCAxMDA1MjYsIDEwMDUzMywgMTAwNTQwLCAxMDA1NDcsIAotICAgIDEwMDU1NSwgMTAwNTU4LCAxMDA1NjIsIDEwMDU2NiwgMTAwNTcwLCAxMDA1NzMsIDEwMDU3OSwgMTAwNTgzLCAxMDA1ODksIAotICAgIDEwMDU5NiwgMTAwNjAzLCAxMDA2MDksIDEwMDYxNiwgMTAwNjIzLCAxMDA2MzAsIDEwMDYzNywgMTAwNjQ0LCAxMDA2NTEsIAotICAgIDEwMDY1OCwgMTAwNjY1LCAxMDA2NzIsIDEwMDY3OSwgMTAwNjg2LCAxMDA2OTMsIDEwMDcwMCwgMTAwNzA3LCAxMDA3MTMsIAotICAgIDEwMDcxNywgMTAwNzI2LCAxMDA3MzAsIDEwMDczNCwgMTAwNzM4LCAxMDA3NDIsIDEwMDc0OCwgMTAwNzU1LCAxMDA3NjIsIAotICAgIDEwMDc2OSwgMTAwNzc2LCAxMDA3ODMsIDEwMDc4OSwgMTAwNzk3LCAxMDA4MDEsIDEwMDgwNSwgMTAwODA5LCAxMDA4MTMsIAotICAgIDEwMDgxOSwgMTAwODM2LCAxMDA4NTMsIDEwMDg1NywgMTAwODYxLCAxMDA4NjUsIDEwMDg2OSwgMTAwODczLCAxMDA4NzcsIAotICAgIDEwMDg4MywgMTAwODkwLCAxMDA4OTQsIDEwMDkwMCwgMTAwOTA3LCAxMDA5MTQsIDEwMDkyMSwgMTAwOTI4LCAxMDA5MzUsIAotICAgIDEwMDk0NCwgMTAwOTUxLCAxMDA5NTgsIDEwMDk2NSwgMTAwOTcyLCAxMDA5NzYsIDEwMDk4MCwgMTAwOTg2LCAxMDA5OTgsIAotICAgIDEwMTAwMiwgMTAxMDA2LCAxMDEwMTUsIDEwMTAxOSwgMTAxMDIzLCAxMDEwMjcsIDEwMTAzMywgMTAxMDM3LCAxMDEwNDEsIAotICAgIDEwMTA1MCwgMTAxMDU0LCAxMDEwNTgsIDEwMTA2MiwgMTAxMDY5LCAxMDEwNzMsIDEwMTA3NywgMTAxMDgxLCAxMDEwODUsIAotICAgIDEwMTA4OSwgMTAxMDkzLCAxMDEwOTcsIDEwMTEwMSwgMTAxMTA3LCAxMDExMTQsIDEwMTEyMSwgMTAxMTI3LCAxMDExMzEsIAotICAgIDEwMTE0OCwgMTAxMTU0LCAxMDExNTgsIDEwMTE2NCwgMTAxMTcwLCAxMDExNzYsIDEwMTE4MiwgMTAxMTg4LCAxMDExOTQsIAotICAgIDEwMTE5OCwgMTAxMjAyLCAxMDEyMDYsIDEwMTIxMiwgMTAxMjE2LCAxMDEyMjIsIDEwMTIyNiwgMTAxMjMwLCAxMDEyMzcsIAotICAgIDEwMTI0NCwgMTAxMjYxLCAxMDEyNjUsIDEwMTI2OSwgMTAxMjczLCAxMDEyNzcsIDEwMTI4MSwgMTAxMjkzLCAxMDEyOTYsIAotICAgIDEwMTMwMSwgMTAxMzA2LCAxMDEzMjEsIDEwMTMzMSwgMTAxMzQzLCAxMDEzNDcsIDEwMTM1MSwgMTAxMzU1LCAxMDEzNjEsIAotICAgIDEwMTM2OCwgMTAxMzc1LCAxMDEzODUsIDEwMTM5NywgMTAxNDAzLCAxMDE0MDksIDEwMTQxOCwgMTAxNDIyLCAxMDE0MjYsIAotICAgIDEwMTQzMywgMTAxNDQzLCAxMDE0NTAsIDEwMTQ1NiwgMTAxNDYwLCAxMDE0NjQsIDEwMTQ3MSwgMTAxNDc3LCAxMDE0ODEsIAotICAgIDEwMTQ4NywgMTAxNDkxLCAxMDE0OTksIDEwMTUwNSwgMTAxNTA5LCAxMDE1MTcsIDEwMTUyNSwgMTAxNTMyLCAxMDE1MzgsIAotICAgIDEwMTU0NSwgMTAxNTUyLCAxMDE1NjIsIDEwMTU3MiwgMTAxNTc2LCAxMDE1ODAsIDEwMTU4NCwgMTAxNTg4LCAxMDE1OTQsIAotICAgIDEwMTYwMSwgMTAxNjA3LCAxMDE2MTQsIDEwMTYyMSwgMTAxNjI4LCAxMDE2MzcsIDEwMTY0NCwgMTAxNjUxLCAxMDE2NTcsIAotICAgIDEwMTY2NCwgMTAxNjcxLCAxMDE2NzgsIDEwMTY4NSwgMTAxNjkyLCAxMDE2OTksIDEwMTcwNSwgMTAxNzEyLCAxMDE3MTksIAotICAgIDEwMTcyNiwgMTAxNzM1LCAxMDE3NDIsIDEwMTc0OSwgMTAxNzUzLCAxMDE3NTksIDEwMTc2MywgMTAxNzY5LCAxMDE3NzYsIAotICAgIDEwMTc4MywgMTAxNzkwLCAxMDE3OTQsIDEwMTc5OCwgMTAxODAyLCAxMDE4MDYsIDEwMTgxMCwgMTAxODE3LCAxMDE4MjEsIAotICAgIDEwMTgyNSwgMTAxODMxLCAxMDE4MzksIDEwMTg0MywgMTAxODQ3LCAxMDE4NTEsIDEwMTg1NSwgMTAxODYyLCAxMDE4NjYsIAotICAgIDEwMTg3MCwgMTAxODc4LCAxMDE4ODIsIDEwMTg4NiwgMTAxODkwLCAxMDE4OTQsIDEwMTkwMCwgMTAxOTA0LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDE5MDgsIDEwMTkxNCwgMTAxOTIwLCAxMDE5MjcsIAotICAgIDEwMTkzNCwgMTAxOTQxLCAxMDE5NDgsIDEwMTk1NSwgMTAxOTYyLCAxMDE5NjgsIDEwMTk3NSwgMTAxOTgyLCAxMDE5ODksIAotICAgIDEwMTk5NiwgMTAyMDAzLCAxMDIwMTAsIDEwMjAxNiwgMTAyMDIyLCAxMDIwMjgsIDEwMjAzNCwgMTAyMDQwLCAxMDIwNDYsIAotICAgIDEwMjA1MiwgMTAyMDU4LCAxMDIwNjQsIDEwMjA3MSwgMTAyMDc4LCAxMDIwODUsIDEwMjA5MiwgMTAyMDk5LCAxMDIxMDYsIAotICAgIDEwMjExMiwgMTAyMTE4LCAxMDIxMjQsIDEwMjEzMSwgMTAyMTM4LCAxMDIxNDQsIDEwMjE1MCwgMTAyMTU5LCAxMDIxNjYsIAotICAgIDEwMjE3MywgMTAyMTgwLCAxMDIxODcsIDEwMjE5NCwgMTAyMjAxLCAxMDIyMDcsIDEwMjIxMywgMTAyMjE5LCAxMDIyMjgsIAotICAgIDEwMjIzNSwgMTAyMjQyLCAxMDIyNTMsIDEwMjI2NCwgMTAyMjcwLCAxMDIyNzYsIDEwMjI4MiwgMTAyMjkxLCAxMDIyOTgsIAotICAgIDEwMjMwNSwgMTAyMzE1LCAxMDIzMjUsIDEwMjMzNiwgMTAyMzQ3LCAxMDIzNTksIDEwMjM3MiwgMTAyMzgzLCAxMDIzOTQsIAotICAgIDEwMjQwNiwgMTAyNDE5LCAxMDI0MzAsIDEwMjQ0MSwgMTAyNDUyLCAxMDI0NjMsIDEwMjQ3NCwgMTAyNDg2LCAxMDI0OTQsIAotICAgIDEwMjUwMiwgMTAyNTExLCAxMDI1MjAsIDEwMjUyOSwgMTAyNTM1LCAxMDI1NDEsIDEwMjU0NywgMTAyNTU0LCAxMDI1NjQsIAotICAgIDEwMjU3MSwgMTAyNTgxLCAxMDI1ODYsIDEwMjU5MSwgMTAyNTk3LCAxMDI2MDMsIDEwMjYxMSwgMTAyNjE5LCAxMDI2MjgsIAotICAgIDEwMjYzOSwgMTAyNjUwLCAxMDI2NTgsIDEwMjY2NiwgMTAyNjc1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAxMDI2ODQsIDEwMjY5NSwgMTAyNzAyLCAxMDI3MTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEwMjcxOCwgMTAyNzIyLCAxMDI3MjYsIDEwMjczMCwgMTAyNzM0LCAxMDI3MzgsIDEwMjc0MiwgMTAyNzQ2LCAxMDI3NTAsIAotICAgIDEwMjc1NCwgMTAyNzU4LCAxMDI3NjIsIDEwMjc2NiwgMTAyNzcwLCAxMDI3NzQsIDEwMjc3OCwgMTAyNzgyLCAxMDI3ODYsIAotICAgIDEwMjc5MCwgMTAyNzk0LCAxMDI3OTgsIDEwMjgwMiwgMTAyODA2LCAxMDI4MTAsIDEwMjgxNCwgMTAyODE4LCAxMDI4MjIsIAotICAgIDEwMjgyNiwgMTAyODMwLCAxMDI4MzQsIDEwMjgzOCwgMTAyODQyLCAxMDI4NDYsIDEwMjg1MCwgMTAyODU0LCAxMDI4NTgsIAotICAgIDEwMjg2MiwgMTAyODY2LCAxMDI4NzAsIDEwMjg3NCwgMTAyODc4LCAxMDI4ODIsIDEwMjg4NiwgMTAyODkwLCAxMDI4OTQsIAotICAgIDEwMjg5OCwgMTAyOTAyLCAxMDI5MDYsIDEwMjkxMCwgMTAyOTE0LCAxMDI5MTgsIDEwMjkyMiwgMTAyOTI2LCAxMDI5MzAsIAotICAgIDEwMjkzNCwgMTAyOTM4LCAxMDI5NDIsIDEwMjk0NiwgMTAyOTUwLCAxMDI5NTQsIDEwMjk1OCwgMTAyOTYyLCAxMDI5NjYsIAotICAgIDEwMjk3MCwgMTAyOTc0LCAxMDI5NzgsIDEwMjk4MiwgMTAyOTg2LCAxMDI5OTAsIDEwMjk5NCwgMTAyOTk4LCAxMDMwMDIsIAotICAgIDEwMzAwNiwgMTAzMDEwLCAxMDMwMTQsIDEwMzAxOCwgMTAzMDIyLCAxMDMwMjYsIDEwMzAzMCwgMTAzMDM0LCAxMDMwMzgsIAotICAgIDEwMzA0MiwgMTAzMDQ2LCAxMDMwNTAsIDEwMzA1NCwgMTAzMDU4LCAxMDMwNjIsIDEwMzA2NiwgMTAzMDcwLCAxMDMwNzQsIAotICAgIDEwMzA3OCwgMTAzMDgyLCAxMDMwODYsIDEwMzA5MCwgMTAzMDk0LCAxMDMwOTgsIDEwMzEwMiwgMTAzMTA2LCAxMDMxMTAsIAotICAgIDEwMzExNCwgMTAzMTE4LCAxMDMxMjIsIDEwMzEyNiwgMTAzMTMwLCAxMDMxMzQsIDEwMzEzOCwgMTAzMTQyLCAxMDMxNDYsIAotICAgIDEwMzE1MCwgMTAzMTU0LCAxMDMxNTgsIDEwMzE2MiwgMTAzMTY2LCAxMDMxNzAsIDEwMzE3NCwgMTAzMTc4LCAxMDMxODIsIAotICAgIDEwMzE4NiwgMTAzMTkwLCAxMDMxOTQsIDEwMzE5OCwgMTAzMjAyLCAxMDMyMDYsIDEwMzIxMCwgMTAzMjE0LCAxMDMyMTgsIAotICAgIDEwMzIyMiwgMTAzMjI2LCAxMDMyMzAsIDEwMzIzNCwgMTAzMjM4LCAxMDMyNDIsIDEwMzI0NiwgMTAzMjUwLCAxMDMyNTQsIAotICAgIDEwMzI1OCwgMTAzMjYyLCAxMDMyNjYsIDEwMzI3MCwgMTAzMjc0LCAxMDMyNzgsIDEwMzI4MiwgMTAzMjg2LCAxMDMyOTAsIAotICAgIDEwMzI5NCwgMTAzMjk4LCAxMDMzMDIsIDEwMzMwNiwgMTAzMzEwLCAxMDMzMTQsIDEwMzMxOCwgMTAzMzIyLCAxMDMzMjYsIAotICAgIDEwMzMzMCwgMTAzMzM0LCAxMDMzMzgsIDEwMzM0MiwgMTAzMzQ2LCAxMDMzNTAsIDEwMzM1NCwgMTAzMzU4LCAxMDMzNjIsIAotICAgIDEwMzM2NiwgMTAzMzcwLCAxMDMzNzQsIDEwMzM3OCwgMTAzMzgyLCAxMDMzODYsIDEwMzM5MCwgMTAzMzk0LCAxMDMzOTgsIAotICAgIDEwMzQwMiwgMTAzNDA2LCAxMDM0MTAsIDEwMzQxNCwgMTAzNDE4LCAxMDM0MjIsIDEwMzQyNiwgMTAzNDMwLCAxMDM0MzQsIAotICAgIDEwMzQzOCwgMTAzNDQyLCAxMDM0NDYsIDEwMzQ1MCwgMTAzNDU0LCAxMDM0NTgsIDEwMzQ2MiwgMTAzNDY2LCAxMDM0NzAsIAotICAgIDEwMzQ3NCwgMTAzNDc4LCAxMDM0ODIsIDEwMzQ4NiwgMTAzNDkwLCAxMDM0OTQsIDEwMzQ5OCwgMTAzNTAyLCAxMDM1MDYsIAotICAgIDEwMzUxMCwgMTAzNTE0LCAxMDM1MTgsIDEwMzUyMiwgMTAzNTI2LCAxMDM1MzAsIDEwMzUzNCwgMTAzNTM4LCAxMDM1NDIsIAotICAgIDEwMzU0NiwgMTAzNTUwLCAxMDM1NTQsIDEwMzU1OCwgMTAzNTYyLCAxMDM1NjYsIDEwMzU3MCwgMTAzNTc0LCAxMDM1NzgsIAotICAgIDEwMzU4MiwgMTAzNTg2LCAxMDM1OTAsIDEwMzU5NCwgMTAzNTk4LCAxMDM2MDIsIDEwMzYwNiwgMTAzNjEwLCAxMDM2MTQsIAotICAgIDEwMzYxOCwgMTAzNjIyLCAxMDM2MjYsIDEwMzYzMCwgMTAzNjM0LCAxMDM2MzgsIDEwMzY0MiwgMTAzNjQ2LCAxMDM2NTAsIAotICAgIDEwMzY1NCwgMTAzNjU4LCAxMDM2NjIsIDEwMzY2NiwgMTAzNjcwLCAxMDM2NzQsIDEwMzY3OCwgMTAzNjgyLCAxMDM2ODYsIAotICAgIDEwMzY5MCwgMTAzNjk0LCAxMDM2OTgsIDEwMzcwMiwgMTAzNzA2LCAxMDM3MTAsIDEwMzcxNCwgMTAzNzE4LCAxMDM3MjIsIAotICAgIDEwMzcyNiwgMTAzNzMwLCAxMDM3MzQsIDEwMzczOCwgMTAzNzQyLCAxMDM3NDYsIDEwMzc1MCwgMTAzNzU0LCAxMDM3NTgsIAotICAgIDEwMzc2MiwgMTAzNzY2LCAxMDM3NzAsIDEwMzc3NCwgMTAzNzc4LCAxMDM3ODIsIDEwMzc4NiwgMTAzNzkwLCAxMDM3OTQsIAotICAgIDEwMzc5OCwgMTAzODAyLCAxMDM4MDYsIDEwMzgxMCwgMTAzODE0LCAxMDM4MTgsIDEwMzgyMiwgMTAzODI2LCAxMDM4MzAsIAotICAgIDEwMzgzNCwgMTAzODM4LCAxMDM4NDIsIDEwMzg0NiwgMTAzODUwLCAxMDM4NTQsIDEwMzg1OCwgMTAzODYyLCAxMDM4NjYsIAotICAgIDEwMzg3MCwgMTAzODc0LCAxMDM4NzgsIDEwMzg4MiwgMTAzODg2LCAxMDM4OTAsIDEwMzg5NCwgMTAzODk4LCAxMDM5MDIsIAotICAgIDEwMzkwNiwgMTAzOTEwLCAxMDM5MTQsIDEwMzkxOCwgMTAzOTIyLCAxMDM5MjYsIDEwMzkzMCwgMTAzOTM0LCAxMDM5MzgsIAotICAgIDEwMzk0MiwgMTAzOTQ2LCAxMDM5NTAsIDEwMzk1NCwgMTAzOTU4LCAxMDM5NjIsIDEwMzk2NiwgMTAzOTcwLCAxMDM5NzQsIAotICAgIDEwMzk3OCwgMTAzOTgyLCAxMDM5ODYsIDEwMzk5MCwgMTAzOTk0LCAxMDM5OTgsIDEwNDAwMiwgMTA0MDA2LCAxMDQwMTAsIAotICAgIDEwNDAxNCwgMTA0MDE4LCAxMDQwMjIsIDEwNDAyNiwgMTA0MDMwLCAxMDQwMzQsIDEwNDAzOCwgMTA0MDQyLCAxMDQwNDYsIAotICAgIDEwNDA1MCwgMTA0MDU0LCAxMDQwNTgsIDEwNDA2MiwgMTA0MDY2LCAxMDQwNzAsIDEwNDA3NCwgMTA0MDc4LCAxMDQwODIsIAotICAgIDEwNDA4NiwgMTA0MDkwLCAxMDQwOTQsIDEwNDA5OCwgMTA0MTAyLCAxMDQxMDYsIDEwNDExMCwgMTA0MTE0LCAxMDQxMTgsIAotICAgIDEwNDEyMiwgMTA0MTI2LCAxMDQxMzAsIDEwNDEzNCwgMTA0MTM4LCAxMDQxNDIsIDEwNDE0NiwgMTA0MTUwLCAxMDQxNTQsIAotICAgIDEwNDE1OCwgMTA0MTYyLCAxMDQxNjYsIDEwNDE3MCwgMTA0MTc0LCAxMDQxNzgsIDEwNDE4MiwgMTA0MTg2LCAxMDQxOTAsIAotICAgIDEwNDE5NCwgMTA0MTk4LCAxMDQyMDIsIDEwNDIwNiwgMTA0MjEwLCAxMDQyMTQsIDEwNDIxOCwgMTA0MjIyLCAxMDQyMjYsIAotICAgIDEwNDIzMCwgMTA0MjM0LCAxMDQyMzgsIDEwNDI0MiwgMTA0MjQ2LCAxMDQyNTAsIDEwNDI1NCwgMTA0MjU4LCAxMDQyNjIsIAotICAgIDEwNDI2NiwgMTA0MjcwLCAxMDQyNzQsIDEwNDI3OCwgMTA0MjgyLCAxMDQyODYsIDEwNDI5MCwgMTA0Mjk0LCAxMDQyOTgsIAotICAgIDEwNDMwMiwgMTA0MzA2LCAxMDQzMTAsIDEwNDMxNCwgMTA0MzE4LCAxMDQzMjIsIDEwNDMyNiwgMTA0MzMwLCAxMDQzMzQsIAotICAgIDEwNDMzOCwgMTA0MzQyLCAxMDQzNDYsIDEwNDM1MCwgMTA0MzU0LCAxMDQzNTgsIDEwNDM2MiwgMTA0MzY2LCAxMDQzNzAsIAotICAgIDEwNDM3NCwgMTA0Mzc4LCAxMDQzODIsIDEwNDM4NiwgMTA0MzkwLCAxMDQzOTQsIDEwNDM5OCwgMTA0NDAyLCAxMDQ0MDYsIAotICAgIDEwNDQxMCwgMTA0NDE0LCAxMDQ0MTgsIDEwNDQyMiwgMTA0NDI2LCAxMDQ0MzAsIDEwNDQzNCwgMTA0NDM4LCAxMDQ0NDIsIAotICAgIDEwNDQ0NiwgMTA0NDUwLCAxMDQ0NTQsIDEwNDQ1OCwgMTA0NDYyLCAxMDQ0NjYsIDEwNDQ3MCwgMTA0NDc0LCAxMDQ0NzgsIAotICAgIDEwNDQ4MiwgMTA0NDg2LCAxMDQ0OTAsIDEwNDQ5NCwgMTA0NDk4LCAxMDQ1MDIsIDEwNDUwNiwgMTA0NTEwLCAxMDQ1MTQsIAotICAgIDEwNDUxOCwgMTA0NTIyLCAxMDQ1MjYsIDEwNDUzMCwgMTA0NTM0LCAxMDQ1MzgsIDEwNDU0MiwgMTA0NTQ2LCAxMDQ1NTAsIAotICAgIDEwNDU1NCwgMTA0NTU4LCAxMDQ1NjIsIDEwNDU2NiwgMTA0NTcwLCAxMDQ1NzQsIDEwNDU3OCwgMTA0NTgyLCAxMDQ1ODYsIAotICAgIDEwNDU5MCwgMTA0NTk0LCAxMDQ1OTgsIDEwNDYwMiwgMTA0NjA2LCAxMDQ2MTAsIDEwNDYxNCwgMTA0NjE4LCAxMDQ2MjIsIAotICAgIDEwNDYyNiwgMTA0NjMwLCAxMDQ2MzQsIDEwNDYzOCwgMTA0NjQyLCAxMDQ2NDYsIDEwNDY1MCwgMTA0NjU0LCAxMDQ2NTgsIAotICAgIDEwNDY2MiwgMTA0NjY2LCAxMDQ2NzAsIDEwNDY3NCwgMTA0Njc4LCAxMDQ2ODIsIDEwNDY4NiwgMTA0NjkwLCAxMDQ2OTQsIAotICAgIDEwNDY5OCwgMTA0NzAyLCAxMDQ3MDYsIDEwNDcxMCwgMTA0NzE0LCAxMDQ3MTgsIDEwNDcyMiwgMTA0NzI2LCAxMDQ3MzAsIAotICAgIDEwNDczNCwgMTA0NzM4LCAxMDQ3NDIsIDEwNDc0NiwgMTA0NzUwLCAxMDQ3NTQsIDEwNDc1OCwgMTA0NzYyLCAxMDQ3NjYsIAotICAgIDEwNDc3MCwgMTA0Nzc0LCAxMDQ3NzgsIDEwNDc4MiwgMTA0Nzg2LCAxMDQ3OTAsIDEwNDc5NCwgMTA0Nzk4LCAxMDQ4MDIsIAotICAgIDEwNDgwNiwgMTA0ODEwLCAxMDQ4MTQsIDEwNDgxOCwgMTA0ODIyLCAxMDQ4MjYsIDEwNDgzMCwgMTA0ODM0LCAxMDQ4MzgsIAotICAgIDEwNDg0MiwgMTA0ODQ2LCAxMDQ4NTAsIDEwNDg1NCwgMTA0ODU4LCAxMDQ4NjIsIDEwNDg2NiwgMTA0ODcwLCAxMDQ4NzQsIAotICAgIDEwNDg3OCwgMTA0ODgyLCAxMDQ4ODYsIDEwNDg5MCwgMTA0ODk0LCAxMDQ4OTgsIDEwNDkwMiwgMTA0OTA2LCAxMDQ5MTAsIAotICAgIDEwNDkxNCwgMTA0OTE4LCAxMDQ5MjIsIDEwNDkyNiwgMTA0OTMwLCAxMDQ5MzQsIDEwNDkzOCwgMTA0OTQyLCAxMDQ5NDYsIAotICAgIDEwNDk1MCwgMTA0OTU0LCAxMDQ5NTgsIDEwNDk2MiwgMTA0OTY2LCAxMDQ5NzAsIDEwNDk3NCwgMTA0OTc4LCAxMDQ5ODIsIAotICAgIDEwNDk4NiwgMTA0OTkwLCAxMDQ5OTQsIDEwNDk5OCwgMTA1MDAyLCAxMDUwMDYsIDEwNTAxMCwgMTA1MDE0LCAxMDUwMTgsIAotICAgIDEwNTAyMiwgMTA1MDI2LCAxMDUwMzAsIDEwNTAzNCwgMTA1MDM4LCAxMDUwNDIsIDEwNTA0NiwgMTA1MDUwLCAxMDUwNTQsIAotICAgIDEwNTA1OCwgMTA1MDYyLCAxMDUwNjYsIDEwNTA3MCwgMTA1MDc0LCAxMDUwNzgsIDEwNTA4MiwgMTA1MDg2LCAxMDUwOTAsIAotICAgIDEwNTA5NCwgMTA1MDk4LCAxMDUxMDIsIDEwNTEwNiwgMTA1MTEwLCAxMDUxMTQsIDEwNTExOCwgMTA1MTIyLCAxMDUxMjYsIAotICAgIDEwNTEzMCwgMTA1MTM0LCAxMDUxMzgsIDEwNTE0MiwgMTA1MTQ2LCAxMDUxNTAsIDEwNTE1NCwgMTA1MTU4LCAxMDUxNjIsIAotICAgIDEwNTE2NiwgMTA1MTcwLCAxMDUxNzQsIDEwNTE3OCwgMTA1MTgyLCAxMDUxODYsIDEwNTE5MCwgMTA1MTk0LCAxMDUxOTgsIAotICAgIDEwNTIwMiwgMTA1MjA2LCAxMDUyMTAsIDEwNTIxNCwgMTA1MjE4LCAxMDUyMjIsIDEwNTIyNiwgMTA1MjMwLCAxMDUyMzQsIAotICAgIDEwNTIzOCwgMTA1MjQyLCAxMDUyNDYsIDEwNTI1MCwgMTA1MjU0LCAxMDUyNTgsIDEwNTI2MiwgMTA1MjY2LCAxMDUyNzAsIAotICAgIDEwNTI3NCwgMTA1Mjc4LCAxMDUyODIsIDEwNTI4NiwgMTA1MjkwLCAxMDUyOTQsIDEwNTI5OCwgMTA1MzAyLCAxMDUzMDYsIAotICAgIDEwNTMxMCwgMTA1MzE0LCAxMDUzMTgsIDEwNTMyMiwgMTA1MzI2LCAxMDUzMzAsIDEwNTMzNCwgMTA1MzM4LCAxMDUzNDIsIAotICAgIDEwNTM0NiwgMTA1MzUwLCAxMDUzNTQsIDEwNTM1OCwgMTA1MzYyLCAxMDUzNjYsIDEwNTM3MCwgMTA1Mzc0LCAxMDUzNzgsIAotICAgIDEwNTM4MiwgMTA1Mzg2LCAxMDUzOTAsIDEwNTM5NCwgMTA1Mzk4LCAxMDU0MDIsIDEwNTQwNiwgMTA1NDEwLCAxMDU0MTQsIAotICAgIDEwNTQxOCwgMTA1NDIyLCAxMDU0MjYsIDEwNTQzMCwgMTA1NDM0LCAxMDU0MzgsIDEwNTQ0MiwgMTA1NDQ2LCAxMDU0NTAsIAotICAgIDEwNTQ1NCwgMTA1NDU4LCAxMDU0NjIsIDEwNTQ2NiwgMTA1NDcwLCAxMDU0NzQsIDEwNTQ3OCwgMTA1NDgyLCAxMDU0ODYsIAotICAgIDEwNTQ5MCwgMTA1NDk0LCAxMDU0OTgsIDEwNTUwMiwgMTA1NTA2LCAxMDU1MTAsIDEwNTUxNCwgMTA1NTE4LCAxMDU1MjIsIAotICAgIDEwNTUyNiwgMTA1NTMwLCAxMDU1MzQsIDEwNTUzOCwgMTA1NTQyLCAxMDU1NDYsIDEwNTU1MCwgMTA1NTU0LCAxMDU1NTgsIAotICAgIDEwNTU2MiwgMTA1NTY2LCAxMDU1NzAsIDEwNTU3NCwgMTA1NTc4LCAxMDU1ODIsIDEwNTU4NiwgMTA1NTkwLCAxMDU1OTQsIAotICAgIDEwNTU5OCwgMTA1NjAyLCAxMDU2MDYsIDEwNTYxMCwgMTA1NjE0LCAxMDU2MTgsIDEwNTYyMiwgMTA1NjI2LCAxMDU2MzAsIAotICAgIDEwNTYzNCwgMTA1NjM4LCAxMDU2NDIsIDEwNTY0NiwgMTA1NjUwLCAxMDU2NTQsIDEwNTY1OCwgMTA1NjYyLCAxMDU2NjYsIAotICAgIDEwNTY3MCwgMTA1Njc0LCAxMDU2NzgsIDEwNTY4MiwgMTA1Njg2LCAxMDU2OTAsIDEwNTY5NCwgMTA1Njk4LCAxMDU3MDIsIAotICAgIDEwNTcwNiwgMTA1NzEwLCAxMDU3MTQsIDEwNTcxOCwgMTA1NzIyLCAxMDU3MjYsIDEwNTczMCwgMTA1NzM0LCAxMDU3MzgsIAotICAgIDEwNTc0MiwgMTA1NzQ2LCAxMDU3NTAsIDEwNTc1NCwgMTA1NzU4LCAxMDU3NjIsIDEwNTc2NiwgMTA1NzcwLCAxMDU3NzQsIAotICAgIDEwNTc3OCwgMTA1NzgyLCAxMDU3ODYsIDEwNTc5MCwgMTA1Nzk0LCAxMDU3OTgsIDEwNTgwMiwgMTA1ODA2LCAxMDU4MTAsIAotICAgIDEwNTgxNCwgMTA1ODE4LCAxMDU4MjIsIDEwNTgyNiwgMTA1ODMwLCAxMDU4MzQsIDEwNTgzOCwgMTA1ODQyLCAxMDU4NDYsIAotICAgIDEwNTg1MCwgMTA1ODU0LCAxMDU4NTgsIDEwNTg2MiwgMTA1ODY2LCAxMDU4NzAsIDEwNTg3NCwgMTA1ODc4LCAxMDU4ODIsIAotICAgIDEwNTg4NiwgMTA1ODkwLCAxMDU4OTQsIDEwNTg5OCwgMTA1OTAyLCAxMDU5MDYsIDEwNTkxMCwgMTA1OTE0LCAxMDU5MTgsIAotICAgIDEwNTkyMiwgMTA1OTI2LCAxMDU5MzAsIDEwNTkzNCwgMTA1OTM4LCAxMDU5NDIsIDEwNTk0NiwgMTA1OTUwLCAxMDU5NTQsIAotICAgIDEwNTk1OCwgMTA1OTYyLCAxMDU5NjYsIDEwNTk3MCwgMTA1OTc0LCAxMDU5NzgsIDEwNTk4MiwgMTA1OTg2LCAxMDU5OTAsIAotICAgIDEwNTk5NCwgMTA1OTk4LCAxMDYwMDIsIDEwNjAwNiwgMTA2MDEwLCAxMDYwMTQsIDEwNjAxOCwgMTA2MDIyLCAxMDYwMjYsIAotICAgIDEwNjAzMCwgMTA2MDM0LCAxMDYwMzgsIDEwNjA0MiwgMTA2MDQ2LCAxMDYwNTAsIDEwNjA1NCwgMTA2MDU4LCAxMDYwNjIsIAotICAgIDEwNjA2NiwgMTA2MDcwLCAxMDYwNzQsIDEwNjA3OCwgMTA2MDgyLCAxMDYwODYsIDEwNjA5MCwgMTA2MDk0LCAxMDYwOTgsIAotICAgIDEwNjEwMiwgMTA2MTA2LCAxMDYxMTAsIDEwNjExNCwgMTA2MTE4LCAxMDYxMjIsIDEwNjEyNiwgMTA2MTMwLCAxMDYxMzQsIAotICAgIDEwNjEzOCwgMTA2MTQyLCAxMDYxNDYsIDEwNjE1MCwgMTA2MTU0LCAxMDYxNTgsIDEwNjE2MiwgMTA2MTY2LCAxMDYxNzAsIAotICAgIDEwNjE3NCwgMTA2MTc4LCAxMDYxODIsIDEwNjE4NiwgMTA2MTkwLCAxMDYxOTQsIDEwNjE5OCwgMTA2MjAyLCAxMDYyMDYsIAotICAgIDEwNjIxMCwgMTA2MjE0LCAxMDYyMTgsIDEwNjIyMiwgMTA2MjI2LCAxMDYyMzAsIDEwNjIzNCwgMTA2MjM4LCAxMDYyNDIsIAotICAgIDEwNjI0NiwgMTA2MjUwLCAxMDYyNTQsIDEwNjI1OCwgMTA2MjYyLCAxMDYyNjYsIDEwNjI3MCwgMTA2Mjc0LCAxMDYyNzgsIAotICAgIDEwNjI4MiwgMTA2Mjg2LCAxMDYyOTAsIDEwNjI5NCwgMTA2Mjk4LCAxMDYzMDIsIDEwNjMwNiwgMTA2MzEwLCAxMDYzMTQsIAotICAgIDEwNjMxOCwgMTA2MzIyLCAxMDYzMjYsIDEwNjMzMCwgMTA2MzM0LCAxMDYzMzgsIDEwNjM0MiwgMTA2MzQ2LCAxMDYzNTAsIAotICAgIDEwNjM1NCwgMTA2MzU4LCAxMDYzNjIsIDEwNjM2NiwgMTA2MzcwLCAxMDYzNzQsIDEwNjM3OCwgMTA2MzgyLCAxMDYzODYsIAotICAgIDEwNjM5MCwgMTA2Mzk0LCAxMDYzOTgsIDEwNjQwMiwgMTA2NDA2LCAxMDY0MTAsIDEwNjQxNCwgMTA2NDE4LCAxMDY0MjIsIAotICAgIDEwNjQyNiwgMTA2NDMwLCAxMDY0MzQsIDEwNjQzOCwgMTA2NDQyLCAxMDY0NDYsIDEwNjQ1MCwgMTA2NDU0LCAxMDY0NTgsIAotICAgIDEwNjQ2MiwgMTA2NDY2LCAxMDY0NzAsIDEwNjQ3NCwgMTA2NDc4LCAxMDY0ODIsIDEwNjQ4NiwgMTA2NDkwLCAxMDY0OTQsIAotICAgIDEwNjQ5OCwgMTA2NTAyLCAxMDY1MDYsIDEwNjUxMCwgMTA2NTE0LCAxMDY1MTgsIDEwNjUyMiwgMTA2NTI2LCAxMDY1MzAsIAotICAgIDEwNjUzNCwgMTA2NTM4LCAxMDY1NDIsIDEwNjU0NiwgMTA2NTUwLCAxMDY1NTQsIDEwNjU1OCwgMTA2NTYyLCAxMDY1NjYsIAotICAgIDEwNjU3MCwgMTA2NTc0LCAxMDY1NzgsIDEwNjU4MiwgMTA2NTg2LCAxMDY1OTAsIDEwNjU5NCwgMTA2NTk4LCAxMDY2MDIsIAotICAgIDEwNjYwNiwgMTA2NjEwLCAxMDY2MTQsIDEwNjYxOCwgMTA2NjIyLCAxMDY2MjYsIDEwNjYzMCwgMTA2NjM0LCAxMDY2MzgsIAotICAgIDEwNjY0MiwgMTA2NjQ2LCAxMDY2NTAsIDEwNjY1NCwgMTA2NjU4LCAxMDY2NjIsIDEwNjY2NiwgMTA2NjcwLCAxMDY2NzQsIAotICAgIDEwNjY3OCwgMTA2NjgyLCAxMDY2ODYsIDEwNjY5MCwgMTA2Njk0LCAxMDY2OTgsIDEwNjcwMiwgMTA2NzA2LCAxMDY3MTAsIAotICAgIDEwNjcxNCwgMTA2NzE4LCAxMDY3MjIsIDEwNjcyNiwgMTA2NzMwLCAxMDY3MzQsIDEwNjczOCwgMTA2NzQyLCAxMDY3NDYsIAotICAgIDEwNjc1MCwgMTA2NzU0LCAxMDY3NTgsIDEwNjc2MiwgMTA2NzY2LCAxMDY3NzAsIDEwNjc3NCwgMTA2Nzc4LCAxMDY3ODIsIAotICAgIDEwNjc4NiwgMTA2NzkwLCAxMDY3OTQsIDEwNjc5OCwgMTA2ODAyLCAxMDY4MDYsIDEwNjgxMCwgMTA2ODE0LCAxMDY4MTgsIAotICAgIDEwNjgyMiwgMTA2ODI2LCAxMDY4MzAsIDEwNjgzNCwgMTA2ODM4LCAxMDY4NDIsIDEwNjg0NiwgMTA2ODUwLCAxMDY4NTQsIAotICAgIDEwNjg1OCwgMTA2ODYyLCAxMDY4NjYsIDEwNjg3MCwgMTA2ODc0LCAxMDY4NzgsIDEwNjg4MiwgMTA2ODg2LCAxMDY4OTAsIAotICAgIDEwNjg5NCwgMTA2ODk4LCAxMDY5MDIsIDEwNjkwNiwgMTA2OTEwLCAxMDY5MTQsIDEwNjkxOCwgMTA2OTIyLCAxMDY5MjYsIAotICAgIDEwNjkzMCwgMTA2OTM0LCAxMDY5MzgsIDEwNjk0MiwgMTA2OTQ2LCAxMDY5NTAsIDEwNjk1NCwgMTA2OTU4LCAxMDY5NjIsIAotICAgIDEwNjk2NiwgMTA2OTcwLCAxMDY5NzQsIDEwNjk3OCwgMTA2OTgyLCAxMDY5ODYsIDEwNjk5MCwgMTA2OTk0LCAxMDY5OTgsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEwNzAwMiwgMTA3MDA5LCAxMDcwMTYsIDEwNzAyNSwgMTA3MDM0LCAKLSAgICAxMDcwNDEsIDEwNzA0NiwgMTA3MDUzLCAxMDcwNjAsIDEwNzA2OSwgMTA3MDgwLCAxMDcwOTEsIDEwNzA5NiwgMTA3MTAzLCAKLSAgICAxMDcxMDgsIDEwNzExMywgMTA3MTE4LCAxMDcxMjMsIDEwNzEyOCwgMTA3MTMzLCAxMDcxMzgsIDEwNzE0MywgMTA3MTQ4LCAKLSAgICAxMDcxNTMsIDEwNzE1OCwgMTA3MTY1LCAxMDcxNzIsIDEwNzE3NywgMTA3MTgyLCAxMDcxODcsIDEwNzE5MiwgMTA3MTk5LCAKLSAgICAxMDcyMDYsIDEwNzIxNCwgMTA3MjE5LCAxMDcyMjYsIDEwNzIzMSwgMTA3MjM2LCAxMDcyNDEsIDEwNzI0NiwgMTA3MjUxLCAKLSAgICAxMDcyNTgsIDEwNzI2NSwgMTA3MjcwLCAxMDcyNzUsIDEwNzI4MCwgMTA3Mjg1LCAxMDcyOTAsIDEwNzI5NSwgMTA3MzAwLCAKLSAgICAxMDczMDUsIDEwNzMxMCwgMTA3MzE1LCAxMDczMjAsIDEwNzMyNSwgMTA3MzMwLCAxMDczMzUsIDEwNzM0MCwgMTA3MzQ1LCAKLSAgICAxMDczNTAsIDEwNzM1NSwgMTA3MzYwLCAxMDczNjcsIDEwNzM3MiwgMTA3Mzc3LCAxMDczODYsIDEwNzM5MywgMTA3Mzk4LCAKLSAgICAxMDc0MDMsIDEwNzQwOCwgMTA3NDEzLCAxMDc0MTgsIDEwNzQyMywgMTA3NDI4LCAxMDc0MzMsIDEwNzQzOCwgMTA3NDQzLCAKLSAgICAxMDc0NDgsIDEwNzQ1MywgMTA3NDU4LCAxMDc0NjMsIDEwNzQ2OCwgMTA3NDczLCAxMDc0NzgsIDEwNzQ4MywgMTA3NDg4LCAKLSAgICAxMDc0OTMsIDEwNzQ5OCwgMTA3NTA0LCAxMDc1MTIsIDEwNzUxOCwgMTA3NTI2LCAxMDc1MzQsIDEwNzU0MiwgMTA3NTQ4LCAKLSAgICAxMDc1NTQsIDEwNzU2MCwgMTA3NTY2LCAxMDc1NzIsIDEwNzU4MCwgMTA3NTkwLCAxMDc1OTgsIDEwNzYwNiwgMTA3NjEyLCAKLSAgICAxMDc2MTgsIDEwNzYyNiwgMTA3NjM0LCAxMDc2NDAsIDEwNzY0OCwgMTA3NjU2LCAxMDc2NjQsIDEwNzY3MCwgMTA3Njc2LCAKLSAgICAxMDc2ODIsIDEwNzY4OCwgMTA3Njk0LCAxMDc3MDAsIDEwNzcwOCwgMTA3NzE2LCAxMDc3MjIsIDEwNzcyOCwgMTA3NzM0LCAKLSAgICAxMDc3NDAsIDEwNzc0NiwgMTA3NzU0LCAxMDc3NjAsIDEwNzc2NiwgMTA3NzcyLCAxMDc3NzgsIDEwNzc4NCwgMTA3NzkwLCAKLSAgICAxMDc3OTgsIDEwNzgwNCwgMTA3ODEwLCAxMDc4MTYsIDEwNzgyMiwgMTA3ODMwLCAxMDc4MzgsIDEwNzg0NCwgMTA3ODUwLCAKLSAgICAxMDc4NTYsIDEwNzg2MSwgMTA3ODY3LCAxMDc4NzMsIDEwNzg4MCwgMTA3ODg1LCAxMDc4OTAsIDEwNzg5NSwgMTA3OTAwLCAKLSAgICAxMDc5MDUsIDEwNzkxMCwgMTA3OTE1LCAxMDc5MjAsIDEwNzkyNSwgMTA3OTM0LCAxMDc5NDEsIDEwNzk0NiwgMTA3OTUxLCAKLSAgICAxMDc5NTYsIDEwNzk2MywgMTA3OTY4LCAxMDc5NzMsIDEwNzk3OCwgMTA3OTg1LCAxMDc5OTAsIDEwNzk5NSwgMTA4MDAwLCAKLSAgICAxMDgwMDUsIDEwODAxMCwgMTA4MDE1LCAxMDgwMjAsIDEwODAyNSwgMTA4MDMwLCAxMDgwMzUsIDEwODA0MCwgMTA4MDQ3LCAKLSAgICAxMDgwNTIsIDEwODA1OSwgMTA4MDY0LCAxMDgwNjksIDEwODA3NiwgMTA4MDgxLCAxMDgwODYsIDEwODA5MSwgMTA4MDk2LCAKLSAgICAxMDgxMDEsIDEwODEwNiwgMTA4MTExLCAxMDgxMTYsIDEwODEyMSwgMTA4MTI2LCAxMDgxMzEsIDEwODEzNiwgMTA4MTQxLCAKLSAgICAxMDgxNDYsIDEwODE1MSwgMTA4MTU2LCAxMDgxNjEsIDEwODE2NiwgMTA4MTcxLCAxMDgxNzgsIDEwODE4MywgMTA4MTg4LCAKLSAgICAxMDgxOTMsIDEwODE5OCwgMTA4MjAzLCAxMDgyMDgsIDEwODIxMywgMTA4MjE4LCAxMDgyMjMsIDEwODIyOCwgMTA4MjMzLCAKLSAgICAxMDgyMzgsIDEwODI0MywgMTA4MjUwLCAxMDgyNTUsIDEwODI2MCwgMTA4MjY3LCAxMDgyNzIsIDEwODI3NywgMTA4MjgyLCAKLSAgICAxMDgyODcsIDEwODI5MiwgMTA4Mjk3LCAxMDgzMDIsIDEwODMwNywgMTA4MzEyLCAxMDgzMTcsIDEwODMyNCwgMTA4MzI5LCAKLSAgICAxMDgzMzQsIDEwODMzOSwgMTA4MzQ0LCAxMDgzNDksIDEwODM1NiwgMTA4MzYzLCAxMDgzNjgsIDEwODM3MywgMTA4Mzc4LCAKLSAgICAxMDgzODMsIDEwODM4OCwgMTA4MzkzLCAxMDgzOTgsIDEwODQwMywgMTA4NDA4LCAxMDg0MTMsIDEwODQxOCwgMTA4NDIzLCAKLSAgICAxMDg0MjgsIDEwODQzMywgMTA4NDM4LCAxMDg0NDMsIDEwODQ0OCwgMTA4NDUzLCAxMDg0NTgsIDEwODQ2MywgMTA4NDY4LCAKLSAgICAxMDg0NzMsIDEwODQ3OCwgMTA4NDgzLCAxMDg0ODgsIDEwODQ5MywgMTA4NDk4LCAxMDg1MDMsIDEwODUwOCwgMTA4NTEzLCAKLSAgICAxMDg1MTgsIDEwODUyMywgMTA4NTI4LCAxMDg1MzMsIDEwODUzOCwgMTA4NTQzLCAxMDg1NTAsIDEwODU1NSwgMTA4NTYwLCAKLSAgICAxMDg1NjUsIDEwODU3MCwgMTA4NTc1LCAxMDg1ODAsIDEwODU4NSwgMTA4NTkwLCAxMDg1OTUsIDEwODYwMCwgMTA4NjA1LCAKLSAgICAxMDg2MTAsIDEwODYxNSwgMTA4NjIwLCAxMDg2MjUsIDEwODYzMCwgMTA4NjM1LCAxMDg2NDAsIDEwODY0NSwgMTA4NjUwLCAKLSAgICAxMDg2NTUsIDEwODY2MCwgMTA4NjY1LCAxMDg2NzAsIDEwODY3NSwgMTA4NjgwLCAxMDg2ODUsIDEwODY5MCwgMTA4Njk1LCAKLSAgICAxMDg3MDAsIDEwODcwNSwgMTA4NzEwLCAxMDg3MTUsIDEwODcyMCwgMTA4NzI1LCAxMDg3MzAsIDEwODczNSwgMTA4NzQwLCAKLSAgICAxMDg3NDUsIDEwODc1MCwgMTA4NzU1LCAxMDg3NjAsIDEwODc2NSwgMTA4NzcwLCAxMDg3NzUsIDEwODc4MCwgMTA4Nzg1LCAKLSAgICAxMDg3OTAsIDEwODc5NSwgMTA4ODAwLCAxMDg4MDUsIDEwODgxMCwgMTA4ODE1LCAxMDg4MjAsIDEwODgyNSwgMTA4ODMwLCAKLSAgICAxMDg4MzUsIDEwODg0MCwgMTA4ODQ3LCAxMDg4NTIsIDEwODg1NywgMTA4ODYyLCAxMDg4NjcsIDEwODg3MiwgMTA4ODc3LCAKLSAgICAxMDg4ODEsIDEwODg4NiwgMTA4ODkxLCAxMDg4OTYsIDEwODkwMSwgMTA4OTA2LCAxMDg5MTEsIDEwODkxNiwgMTA4OTIxLCAKLSAgICAxMDg5MjYsIDEwODkzMSwgMTA4OTM2LCAxMDg5NDEsIDEwODk0NiwgMTA4OTUxLCAxMDg5NTgsIDEwODk2MywgMTA4OTY4LCAKLSAgICAxMDg5NzQsIDEwODk3OSwgMTA4OTg0LCAxMDg5ODksIDEwODk5NCwgMTA4OTk5LCAxMDkwMDQsIDEwOTAwOSwgMTA5MDE0LCAKLSAgICAxMDkwMTksIDEwOTAyNCwgMTA5MDI5LCAxMDkwMzQsIDEwOTAzOSwgMTA5MDQ0LCAxMDkwNDksIDEwOTA1NCwgMTA5MDU5LCAKLSAgICAxMDkwNjQsIDEwOTA2OSwgMTA5MDc0LCAxMDkwNzksIDEwOTA4NCwgMTA5MDg5LCAxMDkwOTQsIDEwOTA5OSwgMTA5MTA0LCAKLSAgICAxMDkxMDksIDEwOTExNCwgMTA5MTE5LCAxMDkxMjQsIDEwOTEyOSwgMTA5MTM0LCAxMDkxMzksIDEwOTE0NCwgMTA5MTQ5LCAKLSAgICAxMDkxNTQsIDEwOTE1OSwgMTA5MTY0LCAxMDkxNjksIDEwOTE3NCwgMTA5MTc5LCAxMDkxODQsIDEwOTE4OSwgMTA5MTk2LCAKLSAgICAxMDkyMDEsIDEwOTIwNiwgMTA5MjEzLCAxMDkyMjAsIDEwOTIyNSwgMTA5MjMwLCAxMDkyMzUsIDEwOTI0MCwgMTA5MjQ1LCAKLSAgICAxMDkyNTAsIDEwOTI1NSwgMTA5MjYwLCAxMDkyNjUsIDEwOTI3MCwgMTA5Mjc1LCAxMDkyODAsIDEwOTI4NSwgMTA5MjkwLCAKLSAgICAxMDkyOTUsIDEwOTMwMCwgMTA5MzA1LCAxMDkzMTAsIDEwOTMxNSwgMTA5MzIwLCAxMDkzMjUsIDEwOTMzMCwgMTA5MzM1LCAKLSAgICAxMDkzNDAsIDEwOTM0NSwgMTA5MzUyLCAxMDkzNTcsIDEwOTM2MiwgMTA5MzY3LCAxMDkzNzIsIDEwOTM3NywgMTA5MzgyLCAKLSAgICAxMDkzODcsIDEwOTM5MiwgMTA5Mzk3LCAxMDk0MDIsIDEwOTQwNywgMTA5NDEyLCAxMDk0MTcsIDEwOTQyMiwgMTA5NDI3LCAKLSAgICAxMDk0MzIsIDEwOTQzNywgMTA5NDQyLCAxMDk0NDksIDEwOTQ1NCwgMTA5NDU5LCAxMDk0NjQsIDEwOTQ2OSwgMTA5NDc0LCAKLSAgICAxMDk0NzksIDEwOTQ4NCwgMTA5NDkwLCAxMDk0OTUsIDEwOTUwMCwgMTA5NTA1LCAxMDk1MTAsIDEwOTUxNSwgMTA5NTIwLCAKLSAgICAxMDk1MjUsIDEwOTUzMCwgMTA5NTM3LCAxMDk1NDQsIDEwOTU0OSwgMTA5NTU0LCAxMDk1NTgsIDEwOTU2MywgMTA5NTY3LCAKLSAgICAxMDk1NzEsIDEwOTU3NiwgMTA5NTgzLCAxMDk1ODgsIDEwOTU5MywgMTA5NjAyLCAxMDk2MDcsIDEwOTYxMiwgMTA5NjE3LCAKLSAgICAxMDk2MjIsIDEwOTYyOSwgMTA5NjM2LCAxMDk2NDEsIDEwOTY0NiwgMTA5NjUxLCAxMDk2NTYsIDEwOTY2MywgMTA5NjY4LCAKLSAgICAxMDk2NzMsIDEwOTY3OCwgMTA5NjgzLCAxMDk2ODgsIDEwOTY5MywgMTA5Njk4LCAxMDk3MDMsIDEwOTcwOCwgMTA5NzEzLCAKLSAgICAxMDk3MTgsIDEwOTcyMywgMTA5NzMwLCAxMDk3MzQsIDEwOTczOSwgMTA5NzQ0LCAxMDk3NDksIDEwOTc1NCwgMTA5NzU4LCAKLSAgICAxMDk3NjMsIDEwOTc2OCwgMTA5NzczLCAxMDk3NzgsIDEwOTc4MywgMTA5Nzg4LCAxMDk3OTMsIDEwOTc5OCwgMTA5ODAzLCAKLSAgICAxMDk4MDksIDEwOTgxNSwgMTA5ODIxLCAxMDk4MjcsIDEwOTgzMywgMTA5ODM5LCAxMDk4NDUsIDEwOTg1MSwgMTA5ODU3LCAKLSAgICAxMDk4NjMsIDEwOTg2OSwgMTA5ODc1LCAxMDk4ODAsIDEwOTg4NiwgMTA5ODkyLCAxMDk4OTgsIDEwOTkwNCwgMTA5OTEwLCAKLSAgICAxMDk5MTYsIDEwOTkyMiwgMTA5OTI4LCAxMDk5MzQsIDEwOTk0MCwgMTA5OTQ2LCAxMDk5NTEsIDEwOTk1NywgMTA5OTYzLCAKLSAgICAxMDk5NjksIDEwOTk3NSwgMTA5OTgxLCAxMDk5ODcsIDEwOTk5MywgMTA5OTk5LCAxMTAwMDUsIDExMDAxMSwgMTEwMDE3LCAKLSAgICAxMTAwMjMsIDExMDAyOSwgMTEwMDM1LCAxMTAwNDEsIDExMDA0NywgMTEwMDUzLCAxMTAwNTksIDExMDA2NSwgMTEwMDcxLCAKLSAgICAxMTAwNzYsIDExMDA4MiwgMTEwMDg4LCAxMTAwOTQsIDExMDEwMCwgMTEwMTA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTAxMTIsIDExMDExNSwgMTEwMTE5LCAKLSAgICAxMTAxMjMsIDExMDEyNywgMTEwMTMwLCAxMTAxMzQsIDExMDEzOSwgMTEwMTQzLCAxMTAxNDcsIDExMDE1MSwgMTEwMTU1LCAKLSAgICAxMTAxNTksIDExMDE2NCwgMTEwMTY5LCAxMTAxNzMsIDExMDE3NywgMTEwMTgwLCAxMTAxODQsIDExMDE4OSwgMTEwMTk0LCAKLSAgICAxMTAxOTgsIDExMDIwMiwgMTEwMjA2LCAxMTAyMTAsIDExMDIxNCwgMTEwMjE4LCAxMTAyMjIsIDExMDIyNiwgMTEwMjMwLCAKLSAgICAxMTAyMzQsIDExMDIzNywgMTEwMjQxLCAxMTAyNDUsIDExMDI0OSwgMTEwMjUzLCAxMTAyNTcsIDExMDI2MSwgMTEwMjY3LCAKLSAgICAxMTAyNzAsIDExMDI3NCwgMTEwMjc4LCAxMTAyODIsIDExMDI4NiwgMTEwMjkwLCAxMTAyOTQsIDExMDI5OCwgMTEwMzAyLCAKLSAgICAxMTAzMDYsIDExMDMxMSwgMTEwMzE2LCAxMTAzMjIsIDExMDMyNiwgMTEwMzMwLCAxMTAzMzQsIDExMDMzOCwgMTEwMzQyLCAKLSAgICAxMTAzNDYsIDExMDM1MSwgMTEwMzU0LCAxMTAzNTgsIDExMDM2MiwgMTEwMzY2LCAxMTAzNzAsIDExMDM3NiwgMTEwMzgwLCAKLSAgICAxMTAzODQsIDExMDM4OCwgMTEwMzkyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTAzOTYsIDExMDQwMCwgCi0gICAgMTEwNDA0LCAxMTA0MTAsIDExMDQxNiwgMTEwNDIwLCAxMTA0MjUsIDExMDQzMCwgMTEwNDM1LCAxMTA0NDAsIDExMDQ0NCwgCi0gICAgMTEwNDQ5LCAxMTA0NTQsIDExMDQ1OSwgMTEwNDYzLCAxMTA0NjgsIDExMDQ3MywgMTEwNDc4LCAxMTA0ODIsIDExMDQ4NywgCi0gICAgMTEwNDkyLCAxMTA0OTcsIDExMDUwMiwgMTEwNTA3LCAxMTA1MTIsIDExMDUxNywgMTEwNTIyLCAxMTA1MjYsIDExMDUzMSwgCi0gICAgMTEwNTM2LCAxMTA1NDEsIDExMDU0NiwgMTEwNTUxLCAxMTA1NTYsIDExMDU2MSwgMTEwNTY2LCAxMTA1NzEsIDExMDU3NiwgCi0gICAgMTEwNTgxLCAxMTA1ODgsIDExMDU5MywgMTEwNjAwLCAxMTA2MDUsIDExMDYxMCwgMTEwNjE1LCAxMTA2MjAsIDExMDYyNSwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNjMwLCAxMTA2MzQsIDExMDY0MCwgCi0gICAgMTEwNjQzLCAxMTA2NDYsIDExMDY1MCwgMTEwNjU0LCAxMTA2NTgsIDExMDY2MiwgMTEwNjY2LCAxMTA2NzAsIDExMDY3NCwgCi0gICAgMTEwNjgwLCAxMTA2ODYsIDExMDY5MiwgMTEwNjk4LCAxMTA3MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDcxMCwgMTEwNzE1LCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMTA3MjEsIDExMDcyNiwgMTEwNzMxLCAxMTA3MzYsIDExMDc0MywgMTEwNzUwLCAxMTA3NTcsIDExMDc2NCwgMTEwNzY5LCAKLSAgICAxMTA3NzQsIDExMDc3OSwgMTEwNzg0LCAxMTA3OTEsIDExMDc5NiwgMTEwODAzLCAxMTA4MTAsIDExMDgxNSwgMTEwODIwLCAKLSAgICAxMTA4MjUsIDExMDgzMiwgMTEwODM3LCAxMTA4NDIsIDExMDg0OSwgMTEwODU2LCAxMTA4NjEsIDExMDg2NiwgMTEwODcxLCAKLSAgICAxMTA4NzgsIDExMDg4NSwgMTEwODkyLCAxMTA4OTcsIDExMDkwMiwgMTEwOTA5LCAxMTA5MTYsIDExMDkyMywgMTEwOTMwLCAKLSAgICAxMTA5MzUsIDExMDk0MCwgMTEwOTQ1LCAxMTA5NTIsIDExMDk1NywgMTEwOTYyLCAxMTA5NjcsIDExMDk3NCwgMTEwOTgzLCAKLSAgICAxMTA5OTAsIDExMDk5NSwgMTExMDAwLCAxMTEwMDUsIDExMTAxMCwgMTExMDE1LCAxMTEwMjAsIDExMTAyOSwgMTExMDM2LCAKLSAgICAxMTEwNDEsIDExMTA0OCwgMTExMDU1LCAxMTEwNjAsIDExMTA2NSwgMTExMDcwLCAxMTEwNzcsIDExMTA4MiwgMTExMDg5LCAKLSAgICAxMTEwOTYsIDExMTEwMSwgMTExMTA2LCAxMTExMTEsIDExMTExOCwgMTExMTI1LCAxMTExMzAsIDExMTEzNSwgMTExMTQyLCAKLSAgICAxMTExNDksIDExMTE1NiwgMTExMTYxLCAxMTExNjYsIDExMTE3MSwgMTExMTc2LCAxMTExODMsIDExMTE5MiwgMTExMjAxLCAKLSAgICAxMTEyMDYsIDExMTIxMywgMTExMjIyLCAxMTEyMjcsIDExMTIzMiwgMTExMjM3LCAxMTEyNDIsIDExMTI0OSwgMTExMjU2LCAKLSAgICAxMTEyNjMsIDExMTI3MCwgMTExMjc1LCAxMTEyODAsIDExMTI4NSwgMTExMjkyLCAxMTEyOTksIDExMTMwNiwgMTExMzExLCAKLSAgICAxMTEzMTYsIDExMTMyMywgMTExMzI4LCAxMTEzMzUsIDExMTM0MCwgMTExMzQ3LCAxMTEzNTIsIDExMTM1OSwgMTExMzY2LCAKLSAgICAxMTEzNzEsIDExMTM3NiwgMTExMzgxLCAxMTEzODYsIDExMTM5MSwgMTExMzk2LCAxMTE0MDEsIDExMTQwNiwgMTExNDExLCAKLSAgICAxMTE0MTgsIDExMTQyNSwgMTExNDMyLCAxMTE0MzksIDExMTQ0NiwgMTExNDU1LCAxMTE0NjAsIDExMTQ2NSwgMTExNDcyLCAKLSAgICAxMTE0NzksIDExMTQ4NCwgMTExNDkxLCAxMTE0OTgsIDExMTUwNSwgMTExNTEyLCAxMTE1MTksIDExMTUyNiwgMTExNTMxLCAKLSAgICAxMTE1MzYsIDExMTU0MSwgMTExNTQ2LCAxMTE1NTEsIDExMTU2MCwgMTExNTY5LCAxMTE1NzgsIDExMTU4NywgMTExNTk2LCAKLSAgICAxMTE2MDUsIDExMTYxNCwgMTExNjIzLCAxMTE2MjgsIDExMTYzOSwgMTExNjUwLCAxMTE2NTksIDExMTY2NCwgMTExNjY5LCAKLSAgICAxMTE2NzQsIDExMTY3OSwgMTExNjg4LCAxMTE2OTUsIDExMTcwMiwgMTExNzA5LCAxMTE3MTYsIDExMTcyMywgMTExNzMwLCAKLSAgICAxMTE3MzksIDExMTc0OCwgMTExNzU5LCAxMTE3NjgsIDExMTc3OSwgMTExNzg4LCAxMTE3OTUsIDExMTgwNCwgMTExODE1LCAKLSAgICAxMTE4MjQsIDExMTgzMywgMTExODQyLCAxMTE4NTEsIDExMTg1OCwgMTExODY1LCAxMTE4NzIsIDExMTg4MSwgMTExODkwLCAKLSAgICAxMTE5MDEsIDExMTkxMCwgMTExOTE5LCAxMTE5MzAsIDExMTkzNSwgMTExOTQwLCAxMTE5NTEsIDExMTk1OSwgMTExOTY4LCAKLSAgICAxMTE5NzcsIDExMTk4NiwgMTExOTk3LCAxMTIwMDYsIDExMjAxNSwgMTEyMDI2LCAxMTIwMzcsIDExMjA0OCwgMTEyMDU5LCAKLSAgICAxMTIwNzAsIDExMjA4MSwgMTEyMDg4LCAxMTIwOTUsIDExMjEwMiwgMTEyMTA5LCAxMTIxMjAsIDExMjEyOSwgMTEyMTM2LCAKLSAgICAxMTIxNDMsIDExMjE1MCwgMTEyMTYxLCAxMTIxNzIsIDExMjE4MywgMTEyMTk0LCAxMTIyMDUsIDExMjIxNiwgMTEyMjI3LCAKLSAgICAxMTIyMzgsIDExMjI0NSwgMTEyMjUyLCAxMTIyNjEsIDExMjI3MCwgMTEyMjc3LCAxMTIyODQsIDExMjI5MSwgMTEyMzAwLCAKLSAgICAxMTIzMDksIDExMjMxOCwgMTEyMzI1LCAxMTIzMzQsIDExMjM0MywgMTEyMzUyLCAxMTIzNTksIDExMjM2NiwgMTEyMzcxLCAKLSAgICAxMTIzNzcsIDExMjM4NCwgMTEyMzkxLCAxMTIzOTgsIDExMjQwNSwgMTEyNDEyLCAxMTI0MTksIDExMjQyOCwgMTEyNDM3LCAKLSAgICAxMTI0NDYsIDExMjQ1NSwgMTEyNDYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTI0NzEsIDExMjQ3NywgCi0gICAgMTEyNDgyLCAxMTI0ODcsIDExMjQ5NCwgMTEyNTAwLCAxMTI1MDYsIDExMjUxMiwgMTEyNTE4LCAxMTI1MjQsIDExMjUzMCwgCi0gICAgMTEyNTM2LCAxMTI1NDAsIDExMjU0NCwgMTEyNTUwLCAxMTI1NTYsIDExMjU2MiwgMTEyNTY2LCAxMTI1NzEsIDExMjU3NiwgCi0gICAgMTEyNTgwLCAxMTI1ODQsIDExMjU4NywgMTEyNTkzLCAxMTI1OTksIDExMjYwNSwgMTEyNjExLCAxMTI2MTcsIDExMjYyMywgCi0gICAgMTEyNjI5LCAxMTI2MzUsIDExMjY0MSwgMTEyNjUxLCAxMTI2NjEsIDExMjY2NywgMTEyNjczLCAxMTI2ODMsIDExMjY5MywgCi0gICAgMTEyNjk5LCAwLCAwLCAxMTI3MDUsIDExMjcxMywgMTEyNzE4LCAxMTI3MjMsIDExMjcyOSwgMTEyNzM1LCAxMTI3NDEsIAotICAgIDExMjc0NywgMTEyNzUzLCAxMTI3NTksIDExMjc2NiwgMTEyNzczLCAxMTI3NzksIDExMjc4NSwgMTEyNzkxLCAxMTI3OTcsIAotICAgIDExMjgwMywgMTEyODA5LCAxMTI4MTUsIDExMjgyMSwgMTEyODI2LCAxMTI4MzIsIDExMjgzOCwgMTEyODQ0LCAxMTI4NTAsIAotICAgIDExMjg1NiwgMTEyODY1LCAxMTI4NzEsIDExMjg3NiwgMTEyODg0LCAxMTI4OTEsIDExMjg5OCwgMTEyOTA3LCAxMTI5MTYsIAotICAgIDExMjkyNSwgMTEyOTM0LCAxMTI5NDMsIDExMjk1MiwgMTEyOTYxLCAxMTI5NzAsIDExMjk4MCwgMTEyOTkwLCAxMTI5OTgsIAotICAgIDExMzAwNiwgMTEzMDE1LCAxMTMwMjQsIDExMzAzMCwgMTEzMDM2LCAxMTMwNDIsIDExMzA0OCwgMTEzMDU2LCAxMTMwNjQsIAotICAgIDExMzA2OCwgMTEzMDc0LCAxMTMwNzksIDExMzA4NSwgMTEzMDkxLCAxMTMwOTcsIDExMzEwMywgMTEzMTA5LCAxMTMxMTgsIAotICAgIDExMzEyMywgMTEzMTMwLCAxMTMxMzUsIDExMzE0MCwgMTEzMTQ1LCAxMTMxNTEsIDExMzE1NywgMTEzMTYzLCAxMTMxNzAsIAotICAgIDExMzE3NSwgMTEzMTgwLCAxMTMxODUsIDExMzE5MCwgMTEzMTk1LCAxMTMyMDEsIDExMzIwNywgMTEzMjEzLCAxMTMyMTksIAotICAgIDExMzIyNSwgMTEzMjMxLCAxMTMyMzcsIDExMzI0MywgMTEzMjQ4LCAxMTMyNTMsIDExMzI1OCwgMTEzMjYzLCAxMTMyNjgsIAotICAgIDExMzI3MywgMTEzMjc4LCAxMTMyODMsIDExMzI4OSwgMTEzMjk1LCAxMTMzMDAsIDExMzMwNSwgMTEzMzEwLCAxMTMzMTUsIAotICAgIDExMzMyMCwgMTEzMzI2LCAxMTMzMzMsIDExMzMzNywgMTEzMzQxLCAxMTMzNDUsIDExMzM0OSwgMTEzMzUzLCAxMTMzNTcsIAotICAgIDExMzM2MSwgMTEzMzY1LCAxMTMzNzMsIDExMzM4MywgMTEzMzg3LCAxMTMzOTEsIDExMzM5NywgMTEzNDAzLCAxMTM0MDksIAotICAgIDExMzQxNSwgMTEzNDIxLCAxMTM0MjcsIDExMzQzMywgMTEzNDM5LCAxMTM0NDUsIDExMzQ1MSwgMTEzNDU3LCAxMTM0NjMsIAotICAgIDExMzQ2OSwgMTEzNDc1LCAxMTM0NzksIDExMzQ4MywgMTEzNDkwLCAxMTM0OTYsIDExMzUwMiwgMTEzNTA4LCAxMTM1MTMsIAotICAgIDExMzUyMCwgMTEzNTI1LCAxMTM1MzEsIDExMzUzNywgMTEzNTQzLCAxMTM1NDksIDExMzU1NCwgMTEzNTU4LCAxMTM1NjQsIAotICAgIDExMzU2OCwgMTEzNTcyLCAxMTM1NzYsIDExMzU4MiwgMTEzNTg4LCAxMTM1OTIsIDExMzU5OCwgMTEzNjA0LCAxMTM2MTAsIAotICAgIDExMzYxNiwgMTEzNjIyLCAxMTM2MzAsIDExMzYzOCwgMTEzNjQ0LCAxMTM2NTAsIDExMzY1NiwgMTEzNjYyLCAxMTM2NzQsIAotICAgIDExMzY4NiwgMTEzNzAwLCAxMTM3MTIsIDExMzcyNCwgMTEzNzM4LCAxMTM3NTIsIDExMzc2NiwgMTEzNzcwLCAxMTM3NzgsIAotICAgIDExMzc4NiwgMTEzNzkxLCAxMTM3OTUsIDExMzc5OSwgMTEzODAzLCAxMTM4MDcsIDExMzgxMSwgMTEzODE1LCAxMTM4MTksIAotICAgIDExMzgyNSwgMTEzODMxLCAxMTM4MzcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMzg0MywgMTEzODQ5LCAKLSAgICAxMTM4NTUsIDExMzg2MSwgMTEzODY3LCAxMTM4NzMsIDExMzg3OSwgMTEzODg1LCAxMTM4OTEsIDExMzg5NywgMTEzOTAzLCAKLSAgICAxMTM5MDksIDExMzkxNSwgMTEzOTIxLCAxMTM5MjcsIDExMzkzMywgMTEzOTM5LCAxMTM5NDUsIDExMzk1MSwgMTEzOTU3LCAKLSAgICAxMTM5NjMsIDExMzk2OSwgMTEzOTc1LCAxMTM5ODEsIDExMzk4NywgMTEzOTkzLCAxMTM5OTksIDExNDAwNSwgMTE0MDExLCAKLSAgICAxMTQwMTcsIDExNDAyMywgMTE0MDI5LCAxMTQwMzUsIDExNDA0MSwgMTE0MDQ3LCAxMTQwNTMsIDExNDA1OSwgMTE0MDY1LCAKLSAgICAxMTQwNzEsIDExNDA3NywgMTE0MDgzLCAxMTQwODksIDExNDA5NSwgMTE0MTAxLCAxMTQxMDcsIDExNDExMywgMTE0MTE5LCAKLSAgICAxMTQxMjUsIDExNDEzMSwgMTE0MTM3LCAxMTQxNDMsIDExNDE0OSwgMTE0MTU1LCAxMTQxNjEsIDExNDE2NywgMTE0MTczLCAKLSAgICAxMTQxNzksIDExNDE4NSwgMTE0MTkxLCAxMTQxOTcsIDExNDIwMywgMTE0MjA5LCAxMTQyMTUsIDExNDIyMSwgMTE0MjI3LCAKLSAgICAxMTQyMzMsIDExNDIzOSwgMTE0MjQ0LCAxMTQyNDksIDExNDI1NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTE3OTIsIDkxNzk4LCA5MTgwNCwgOTE4MTAsIDkxODE2LCA5MTgyMiwgOTE4MjksIAorICAgIDkxODM2LCA5MTg0MywgOTE4NDksIDkxODU1LCA5MTg2MSwgOTE4NjgsIDkxODc1LCA5MTg4MiwgOTE4ODgsIDkxODk1LCAKKyAgICA5MTkwMiwgOTE5MDksIDkxOTE2LCA5MTkyMiwgOTE5MjksIDkxOTM2LCA5MTk0MiwgOTE5NDksIDkxOTU2LCA5MTk2MywgCisgICAgOTE5NzAsIDkxOTc3LCA5MTk4MywgOTE5OTAsIDkxOTk3LCA5MjAwNCwgOTIwMTAsIDkyMDE2LCA5MjAyMiwgOTIwMjgsIAorICAgIDkyMDM0LCA5MjA0MSwgOTIwNDgsIDkyMDU0LCA5MjA2MCwgOTIwNjYsIDkyMDczLCA5MjA3OSwgOTIwODYsIDkyMDkzLCAKKyAgICA5MjEwMCwgOTIxMDYsIDkyMTE0LCA5MjEyMSwgOTIxMjcsIDkyMTM0LCA5MjE0MSwgOTIxNDgsIDkyMTU0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCA5MjE2MSwgOTIxNjksIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDExNDI1OCwgMTE0MjYzLCAxMTQyNzAsIDExNDI3NywgMTE0Mjg0LCAxMTQyOTEsIDExNDI5NiwgMTE0MzAwLCAxMTQzMDYsIAotICAgIDExNDMxMCwgMTE0MzE0LCAxMTQzMjAsIDExNDMyNCwgMTE0MzI4LCAxMTQzMzIsIDExNDMzOCwgMTE0MzQ1LCAxMTQzNDksIAotICAgIDExNDM1MywgMTE0MzU3LCAxMTQzNjEsIDExNDM2NSwgMTE0MzY5LCAxMTQzNzUsIDExNDM3OSwgMTE0MzgzLCAxMTQzODcsIAotICAgIDExNDM5MSwgMTE0Mzk1LCAxMTQzOTksIDExNDQwMywgMTE0NDA3LCAxMTQ0MTEsIDExNDQxNSwgMTE0NDE5LCAxMTQ0MjMsIAotICAgIDExNDQyOCwgMTE0NDMyLCAxMTQ0MzYsIDExNDQ0MCwgMTE0NDQ0LCAxMTQ0NDgsIDExNDQ1MiwgMTE0NDU2LCAxMTQ0NjAsIAotICAgIDExNDQ2NCwgMTE0NDcxLCAxMTQ0NzUsIDExNDQ4MywgMTE0NDg3LCAxMTQ0OTEsIDExNDQ5NSwgMTE0NDk5LCAxMTQ1MDMsIAotICAgIDExNDUwNywgMTE0NTExLCAxMTQ1MTgsIDExNDUyMiwgMTE0NTI2LCAxMTQ1MzAsIDExNDUzNCwgMTE0NTM4LCAxMTQ1NDQsIAotICAgIDExNDU0OCwgMTE0NTU0LCAxMTQ1NTgsIDExNDU2MiwgMTE0NTY2LCAxMTQ1NzAsIDExNDU3NCwgMTE0NTc4LCAxMTQ1ODIsIAotICAgIDExNDU4NiwgMTE0NTkwLCAxMTQ1OTQsIDExNDU5OCwgMTE0NjAyLCAxMTQ2MDYsIDExNDYxMCwgMTE0NjE0LCAxMTQ2MTgsIAotICAgIDExNDYyMiwgMTE0NjI2LCAxMTQ2MzAsIDExNDYzOCwgMTE0NjQyLCAxMTQ2NDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDExNDY1MCwgMTE0NjU4LCAxMTQ2NjYsIDExNDY3NCwgMTE0NjgyLCAxMTQ2OTAsIDExNDY5OCwgMTE0NzA2LCAKLSAgICAxMTQ3MTQsIDExNDcyMiwgMTE0NzMwLCAxMTQ3MzgsIDExNDc0NiwgMTE0NzU0LCAxMTQ3NjIsIDExNDc3MCwgMTE0Nzc4LCAKLSAgICAxMTQ3ODYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDc5NCwgMTE0Nzk4LCAxMTQ4MDMsIAotICAgIDExNDgwOCwgMTE0ODEzLCAxMTQ4MTcsIDExNDgyMiwgMTE0ODI3LCAxMTQ4MzIsIDExNDgzNiwgMTE0ODQxLCAxMTQ4NDYsIAotICAgIDExNDg1MCwgMTE0ODU0LCAxMTQ4NTksIDExNDg2MywgMTE0ODY4LCAxMTQ4NzMsIDExNDg3NywgMTE0ODgyLCAxMTQ4ODcsIAotICAgIDExNDg5MSwgMTE0ODk2LCAxMTQ5MDEsIDExNDkwNiwgMTE0OTExLCAxMTQ5MTYsIDExNDkyMCwgMTE0OTI1LCAxMTQ5MzAsIAotICAgIDExNDkzNSwgMTE0OTM5LCAxMTQ5NDQsIDExNDk0OSwgMTE0OTU0LCAxMTQ5NTgsIDExNDk2MywgMTE0OTY4LCAxMTQ5NzIsIAotICAgIDExNDk3NiwgMTE0OTgxLCAxMTQ5ODUsIDExNDk5MCwgMTE0OTk1LCAxMTQ5OTksIDExNTAwNCwgMTE1MDA5LCAxMTUwMTMsIAotICAgIDExNTAxOCwgMTE1MDIzLCAxMTUwMjgsIDExNTAzMywgMTE1MDM4LCAxMTUwNDIsIDExNTA0NywgMTE1MDUyLCAxMTUwNTcsIAotICAgIDExNTA2MSwgMTE1MDY2LCAxMTUwNzEsIDExNTA3NiwgMTE1MDgwLCAxMTUwODUsIDExNTA5MCwgMTE1MDk0LCAxMTUwOTgsIAotICAgIDExNTEwMywgMTE1MTA3LCAxMTUxMTIsIDExNTExNywgMTE1MTIxLCAxMTUxMjYsIDExNTEzMSwgMTE1MTM1LCAxMTUxNDAsIAotICAgIDExNTE0NSwgMTE1MTUwLCAxMTUxNTUsIDExNTE2MCwgMTE1MTY0LCAxMTUxNjksIDExNTE3NCwgMTE1MTc5LCAxMTUxODMsIAotICAgIDExNTE4OCwgMCwgMTE1MTkzLCAxMTUxOTcsIDExNTIwMiwgMTE1MjA3LCAxMTUyMTEsIDExNTIxNSwgMTE1MjIwLCAKLSAgICAxMTUyMjQsIDExNTIyOSwgMTE1MjM0LCAxMTUyMzgsIDExNTI0MywgMTE1MjQ4LCAxMTUyNTIsIDExNTI1NywgMTE1MjYyLCAKLSAgICAxMTUyNjcsIDExNTI3MiwgMTE1Mjc3LCAxMTUyODIsIDExNTI4OCwgMTE1Mjk0LCAxMTUzMDAsIDExNTMwNSwgMTE1MzExLCAKLSAgICAxMTUzMTcsIDExNTMyMywgMTE1MzI4LCAxMTUzMzQsIDExNTM0MCwgMTE1MzQ1LCAxMTUzNTAsIDExNTM1NiwgMTE1MzYxLCAKLSAgICAxMTUzNjcsIDExNTM3MywgMTE1Mzc4LCAxMTUzODQsIDExNTM5MCwgMTE1Mzk1LCAxMTU0MDEsIDExNTQwNywgMTE1NDEzLCAKLSAgICAxMTU0MTksIDExNTQyNSwgMTE1NDMwLCAxMTU0MzYsIDExNTQ0MiwgMTE1NDQ4LCAxMTU0NTMsIDExNTQ1OSwgMTE1NDY1LCAKLSAgICAxMTU0NzEsIDExNTQ3NiwgMTE1NDgyLCAxMTU0ODgsIDExNTQ5MywgMTE1NDk4LCAxMTU1MDQsIDExNTUwOSwgMTE1NTE1LCAKLSAgICAxMTU1MjEsIDExNTUyNiwgMTE1NTMyLCAxMTU1MzgsIDExNTU0MywgMTE1NTQ5LCAxMTU1NTUsIDExNTU2MSwgMTE1NTY3LCAKLSAgICAxMTU1NzMsIDAsIDExNTU3NywgMTE1NTgyLCAwLCAwLCAxMTU1ODcsIDAsIDAsIDExNTU5MiwgMTE1NTk3LCAwLCAwLCAKLSAgICAxMTU2MDIsIDExNTYwNywgMTE1NjExLCAxMTU2MTYsIDAsIDExNTYyMSwgMTE1NjI2LCAxMTU2MzEsIDExNTYzNSwgCi0gICAgMTE1NjQwLCAxMTU2NDUsIDExNTY1MCwgMTE1NjU1LCAxMTU2NjAsIDExNTY2NCwgMTE1NjY5LCAxMTU2NzQsIDAsIAotICAgIDExNTY3OSwgMCwgMTE1Njg0LCAxMTU2ODksIDExNTY5MywgMTE1Njk4LCAxMTU3MDMsIDExNTcwNywgMTE1NzExLCAwLCAKLSAgICAxMTU3MTYsIDExNTcyMSwgMTE1NzI2LCAxMTU3MzAsIDExNTczNSwgMTE1NzQwLCAxMTU3NDQsIDExNTc0OSwgMTE1NzU0LCAKLSAgICAxMTU3NTksIDExNTc2NCwgMTE1NzY5LCAxMTU3NzQsIDExNTc4MCwgMTE1Nzg2LCAxMTU3OTIsIDExNTc5NywgMTE1ODAzLCAKLSAgICAxMTU4MDksIDExNTgxNSwgMTE1ODIwLCAxMTU4MjYsIDExNTgzMiwgMTE1ODM3LCAxMTU4NDIsIDExNTg0OCwgMTE1ODUzLCAKLSAgICAxMTU4NTksIDExNTg2NSwgMTE1ODcwLCAxMTU4NzYsIDExNTg4MiwgMTE1ODg3LCAxMTU4OTMsIDExNTg5OSwgMTE1OTA1LCAKLSAgICAxMTU5MTEsIDExNTkxNywgMTE1OTIyLCAxMTU5MjgsIDExNTkzNCwgMTE1OTQwLCAxMTU5NDUsIDExNTk1MSwgMTE1OTU3LCAKLSAgICAxMTU5NjMsIDExNTk2OCwgMTE1OTc0LCAxMTU5ODAsIDExNTk4NSwgMTE1OTkwLCAxMTU5OTYsIDExNjAwMSwgMTE2MDA3LCAKLSAgICAxMTYwMTMsIDExNjAxOCwgMTE2MDI0LCAxMTYwMzAsIDExNjAzNSwgMTE2MDQxLCAxMTYwNDcsIDExNjA1MywgMTE2MDU5LCAKLSAgICAxMTYwNjUsIDExNjA2OSwgMCwgMTE2MDc0LCAxMTYwNzksIDExNjA4MywgMTE2MDg4LCAwLCAwLCAxMTYwOTMsIDExNjA5OCwgCi0gICAgMTE2MTAzLCAxMTYxMDcsIDExNjExMSwgMTE2MTE2LCAxMTYxMjAsIDExNjEyNSwgMCwgMTE2MTMwLCAxMTYxMzUsIAotICAgIDExNjE0MCwgMTE2MTQ0LCAxMTYxNDksIDExNjE1NCwgMTE2MTU5LCAwLCAxMTYxNjQsIDExNjE2OCwgMTE2MTczLCAKLSAgICAxMTYxNzgsIDExNjE4MywgMTE2MTg3LCAxMTYxOTIsIDExNjE5NywgMTE2MjAyLCAxMTYyMDYsIDExNjIxMSwgMTE2MjE2LCAKLSAgICAxMTYyMjAsIDExNjIyNCwgMTE2MjI5LCAxMTYyMzMsIDExNjIzOCwgMTE2MjQzLCAxMTYyNDcsIDExNjI1MiwgMTE2MjU3LCAKLSAgICAxMTYyNjEsIDExNjI2NiwgMTE2MjcxLCAxMTYyNzYsIDExNjI4MSwgMTE2Mjg2LCAxMTYyOTAsIDAsIDExNjI5NSwgCi0gICAgMTE2MzAwLCAxMTYzMDQsIDExNjMwOSwgMCwgMTE2MzE0LCAxMTYzMTgsIDExNjMyMywgMTE2MzI4LCAxMTYzMzIsIDAsIAotICAgIDExNjMzNiwgMCwgMCwgMCwgMTE2MzQwLCAxMTYzNDUsIDExNjM1MCwgMTE2MzU0LCAxMTYzNTksIDExNjM2NCwgMTE2MzY5LCAKLSAgICAwLCAxMTYzNzQsIDExNjM3OCwgMTE2MzgzLCAxMTYzODgsIDExNjM5MywgMTE2Mzk3LCAxMTY0MDIsIDExNjQwNywgCi0gICAgMTE2NDEyLCAxMTY0MTYsIDExNjQyMSwgMTE2NDI2LCAxMTY0MzAsIDExNjQzNCwgMTE2NDM5LCAxMTY0NDMsIDExNjQ0OCwgCi0gICAgMTE2NDUzLCAxMTY0NTcsIDExNjQ2MiwgMTE2NDY3LCAxMTY0NzEsIDExNjQ3NiwgMTE2NDgxLCAxMTY0ODYsIDExNjQ5MSwgCi0gICAgMTE2NDk2LCAxMTY1MDEsIDExNjUwNywgMTE2NTEzLCAxMTY1MTksIDExNjUyNCwgMTE2NTMwLCAxMTY1MzYsIDExNjU0MiwgCi0gICAgMTE2NTQ3LCAxMTY1NTMsIDExNjU1OSwgMTE2NTY0LCAxMTY1NjksIDExNjU3NSwgMTE2NTgwLCAxMTY1ODYsIDExNjU5MiwgCi0gICAgMTE2NTk3LCAxMTY2MDMsIDExNjYwOSwgMTE2NjE0LCAxMTY2MjAsIDExNjYyNiwgMTE2NjMyLCAxMTY2MzgsIDExNjY0NCwgCi0gICAgMTE2NjQ5LCAxMTY2NTUsIDExNjY2MSwgMTE2NjY3LCAxMTY2NzIsIDExNjY3OCwgMTE2Njg0LCAxMTY2OTAsIDExNjY5NSwgCi0gICAgMTE2NzAxLCAxMTY3MDcsIDExNjcxMiwgMTE2NzE3LCAxMTY3MjMsIDExNjcyOCwgMTE2NzM0LCAxMTY3NDAsIDExNjc0NSwgCi0gICAgMTE2NzUxLCAxMTY3NTcsIDExNjc2MiwgMTE2NzY4LCAxMTY3NzQsIDExNjc4MCwgMTE2Nzg2LCAxMTY3OTIsIDExNjc5NiwgCi0gICAgMTE2ODAxLCAxMTY4MDYsIDExNjgxMSwgMTE2ODE1LCAxMTY4MjAsIDExNjgyNSwgMTE2ODMwLCAxMTY4MzQsIDExNjgzOSwgCi0gICAgMTE2ODQ0LCAxMTY4NDgsIDExNjg1MiwgMTE2ODU3LCAxMTY4NjEsIDExNjg2NiwgMTE2ODcxLCAxMTY4NzUsIDExNjg4MCwgCi0gICAgMTE2ODg1LCAxMTY4ODksIDExNjg5NCwgMTE2ODk5LCAxMTY5MDQsIDExNjkwOSwgMTE2OTE0LCAxMTY5MTgsIDExNjkyMywgCi0gICAgMTE2OTI4LCAxMTY5MzMsIDExNjkzNywgMTE2OTQyLCAxMTY5NDcsIDExNjk1MiwgMTE2OTU2LCAxMTY5NjEsIDExNjk2NiwgCi0gICAgMTE2OTcwLCAxMTY5NzQsIDExNjk3OSwgMTE2OTgzLCAxMTY5ODgsIDExNjk5MywgMTE2OTk3LCAxMTcwMDIsIDExNzAwNywgCi0gICAgMTE3MDExLCAxMTcwMTYsIDExNzAyMSwgMTE3MDI2LCAxMTcwMzEsIDExNzAzNiwgMTE3MDQxLCAxMTcwNDcsIDExNzA1MywgCi0gICAgMTE3MDU5LCAxMTcwNjQsIDExNzA3MCwgMTE3MDc2LCAxMTcwODIsIDExNzA4NywgMTE3MDkzLCAxMTcwOTksIDExNzEwNCwgCi0gICAgMTE3MTA5LCAxMTcxMTUsIDExNzEyMCwgMTE3MTI2LCAxMTcxMzIsIDExNzEzNywgMTE3MTQzLCAxMTcxNDksIDExNzE1NCwgCi0gICAgMTE3MTYwLCAxMTcxNjYsIDExNzE3MiwgMTE3MTc4LCAxMTcxODQsIDExNzE4OSwgMTE3MTk1LCAxMTcyMDEsIDExNzIwNywgCi0gICAgMTE3MjEyLCAxMTcyMTgsIDExNzIyNCwgMTE3MjMwLCAxMTcyMzUsIDExNzI0MSwgMTE3MjQ3LCAxMTcyNTIsIDExNzI1NywgCi0gICAgMTE3MjYzLCAxMTcyNjgsIDExNzI3NCwgMTE3MjgwLCAxMTcyODUsIDExNzI5MSwgMTE3Mjk3LCAxMTczMDIsIDExNzMwOCwgCi0gICAgMTE3MzE0LCAxMTczMjAsIDExNzMyNiwgMTE3MzMyLCAxMTczMzcsIDExNzM0MywgMTE3MzQ5LCAxMTczNTUsIDExNzM2MCwgCi0gICAgMTE3MzY2LCAxMTczNzIsIDExNzM3OCwgMTE3MzgzLCAxMTczODksIDExNzM5NSwgMTE3NDAwLCAxMTc0MDUsIDExNzQxMSwgCi0gICAgMTE3NDE2LCAxMTc0MjIsIDExNzQyOCwgMTE3NDMzLCAxMTc0MzksIDExNzQ0NSwgMTE3NDUwLCAxMTc0NTYsIDExNzQ2MiwgCi0gICAgMTE3NDY4LCAxMTc0NzQsIDExNzQ4MCwgMTE3NDg1LCAxMTc0OTEsIDExNzQ5NywgMTE3NTAzLCAxMTc1MDgsIDExNzUxNCwgCi0gICAgMTE3NTIwLCAxMTc1MjYsIDExNzUzMSwgMTE3NTM3LCAxMTc1NDMsIDExNzU0OCwgMTE3NTUzLCAxMTc1NTksIDExNzU2NCwgCi0gICAgMTE3NTcwLCAxMTc1NzYsIDExNzU4MSwgMTE3NTg3LCAxMTc1OTMsIDExNzU5OCwgMTE3NjA0LCAxMTc2MTAsIDExNzYxNiwgCi0gICAgMTE3NjIyLCAxMTc2MjgsIDExNzYzNCwgMTE3NjQxLCAxMTc2NDgsIDExNzY1NSwgMTE3NjYxLCAxMTc2NjgsIDExNzY3NSwgCi0gICAgMTE3NjgyLCAxMTc2ODgsIDExNzY5NSwgMTE3NzAyLCAxMTc3MDgsIDExNzcxNCwgMTE3NzIxLCAxMTc3MjcsIDExNzczNCwgCi0gICAgMTE3NzQxLCAxMTc3NDcsIDExNzc1NCwgMTE3NzYxLCAxMTc3NjcsIDExNzc3NCwgMTE3NzgxLCAxMTc3ODgsIDExNzc5NSwgCi0gICAgMTE3ODAyLCAxMTc4MDgsIDExNzgxNSwgMTE3ODIyLCAxMTc4MjksIDExNzgzNSwgMTE3ODQyLCAxMTc4NDksIDExNzg1NiwgCi0gICAgMTE3ODYyLCAxMTc4NjksIDExNzg3NiwgMTE3ODgyLCAxMTc4ODgsIDExNzg5NSwgMTE3OTAxLCAxMTc5MDgsIDExNzkxNSwgCi0gICAgMTE3OTIxLCAxMTc5MjgsIDExNzkzNSwgMTE3OTQxLCAxMTc5NDgsIDExNzk1NSwgMTE3OTYyLCAxMTc5NjksIDExNzk3NiwgCi0gICAgMTE3OTgxLCAxMTc5ODcsIDExNzk5MywgMTE3OTk5LCAxMTgwMDQsIDExODAxMCwgMTE4MDE2LCAxMTgwMjIsIDExODAyNywgCi0gICAgMTE4MDMzLCAxMTgwMzksIDExODA0NCwgMTE4MDQ5LCAxMTgwNTUsIDExODA2MCwgMTE4MDY2LCAxMTgwNzIsIDExODA3NywgCi0gICAgMTE4MDgzLCAxMTgwODksIDExODA5NCwgMTE4MTAwLCAxMTgxMDYsIDExODExMiwgMTE4MTE4LCAxMTgxMjQsIDExODEyOSwgCi0gICAgMTE4MTM1LCAxMTgxNDEsIDExODE0NywgMTE4MTUyLCAxMTgxNTgsIDExODE2NCwgMTE4MTcwLCAxMTgxNzUsIDExODE4MSwgCi0gICAgMTE4MTg3LCAxMTgxOTIsIDExODE5NywgMTE4MjAzLCAxMTgyMDgsIDExODIxNCwgMTE4MjIwLCAxMTgyMjUsIDExODIzMSwgCi0gICAgMTE4MjM3LCAxMTgyNDIsIDExODI0OCwgMTE4MjU0LCAxMTgyNjAsIDExODI2NiwgMTE4MjcyLCAxMTgyNzgsIDAsIDAsIAotICAgIDExODI4NSwgMTE4MjkwLCAxMTgyOTUsIDExODMwMCwgMTE4MzA1LCAxMTgzMTAsIDExODMxNSwgMTE4MzIwLCAxMTgzMjUsIAotICAgIDExODMzMCwgMTE4MzM1LCAxMTgzNDAsIDExODM0NSwgMTE4MzUwLCAxMTgzNTUsIDExODM2MCwgMTE4MzY1LCAxMTgzNzAsIAotICAgIDExODM3NiwgMTE4MzgxLCAxMTgzODYsIDExODM5MSwgMTE4Mzk2LCAxMTg0MDEsIDExODQwNiwgMTE4NDExLCAxMTg0MTUsIAotICAgIDExODQyMCwgMTE4NDI1LCAxMTg0MzAsIDExODQzNSwgMTE4NDQwLCAxMTg0NDUsIDExODQ1MCwgMTE4NDU1LCAxMTg0NjAsIAotICAgIDExODQ2NSwgMTE4NDcwLCAxMTg0NzUsIDExODQ4MCwgMTE4NDg1LCAxMTg0OTAsIDExODQ5NSwgMTE4NTAwLCAxMTg1MDYsIAotICAgIDExODUxMSwgMTE4NTE2LCAxMTg1MjEsIDExODUyNiwgMTE4NTMxLCAxMTg1MzYsIDExODU0MSwgMTE4NTQ3LCAxMTg1NTIsIAotICAgIDExODU1NywgMTE4NTYyLCAxMTg1NjcsIDExODU3MiwgMTE4NTc3LCAxMTg1ODIsIDExODU4NywgMTE4NTkyLCAxMTg1OTcsIAotICAgIDExODYwMiwgMTE4NjA3LCAxMTg2MTIsIDExODYxNywgMTE4NjIyLCAxMTg2MjcsIDExODYzMiwgMTE4NjM3LCAxMTg2NDIsIAotICAgIDExODY0NywgMTE4NjUyLCAxMTg2NTcsIDExODY2MiwgMTE4NjY4LCAxMTg2NzMsIDExODY3OCwgMTE4NjgzLCAxMTg2ODgsIAotICAgIDExODY5MywgMTE4Njk4LCAxMTg3MDMsIDExODcwNywgMTE4NzEyLCAxMTg3MTcsIDExODcyMiwgMTE4NzI3LCAxMTg3MzIsIAotICAgIDExODczNywgMTE4NzQyLCAxMTg3NDcsIDExODc1MiwgMTE4NzU3LCAxMTg3NjIsIDExODc2NywgMTE4NzcyLCAxMTg3NzcsIAotICAgIDExODc4MiwgMTE4Nzg3LCAxMTg3OTIsIDExODc5OCwgMTE4ODAzLCAxMTg4MDgsIDExODgxMywgMTE4ODE4LCAxMTg4MjMsIAotICAgIDExODgyOCwgMTE4ODMzLCAxMTg4MzksIDExODg0NCwgMTE4ODQ5LCAxMTg4NTQsIDExODg1OSwgMTE4ODY0LCAxMTg4NjksIAotICAgIDExODg3NSwgMTE4ODgxLCAxMTg4ODcsIDExODg5MywgMTE4ODk5LCAxMTg5MDUsIDExODkxMSwgMTE4OTE3LCAxMTg5MjMsIAotICAgIDExODkyOSwgMTE4OTM1LCAxMTg5NDEsIDExODk0NywgMTE4OTUzLCAxMTg5NTksIDExODk2NSwgMTE4OTcxLCAxMTg5NzgsIAotICAgIDExODk4NCwgMTE4OTkwLCAxMTg5OTYsIDExOTAwMiwgMTE5MDA4LCAxMTkwMTQsIDExOTAyMCwgMTE5MDI1LCAxMTkwMzEsIAotICAgIDExOTAzNywgMTE5MDQzLCAxMTkwNDksIDExOTA1NSwgMTE5MDYxLCAxMTkwNjcsIDExOTA3MywgMTE5MDc5LCAxMTkwODUsIAotICAgIDExOTA5MSwgMTE5MDk3LCAxMTkxMDMsIDExOTEwOSwgMTE5MTE1LCAxMTkxMjEsIDExOTEyNywgMTE5MTM0LCAxMTkxNDAsIAotICAgIDExOTE0NiwgMTE5MTUyLCAxMTkxNTgsIDExOTE2NCwgMTE5MTcwLCAxMTkxNzYsIDExOTE4MywgMTE5MTg5LCAxMTkxOTUsIAotICAgIDExOTIwMSwgMTE5MjA3LCAxMTkyMTMsIDExOTIxOSwgMTE5MjI1LCAxMTkyMzEsIDExOTIzNywgMTE5MjQzLCAxMTkyNDksIAotICAgIDExOTI1NSwgMTE5MjYxLCAxMTkyNjcsIDExOTI3MywgMTE5Mjc5LCAxMTkyODUsIDExOTI5MSwgMTE5Mjk3LCAxMTkzMDMsIAotICAgIDExOTMwOSwgMTE5MzE1LCAxMTkzMjEsIDExOTMyOCwgMTE5MzM0LCAxMTkzNDAsIDExOTM0NiwgMTE5MzUyLCAxMTkzNTgsIAotICAgIDExOTM2NCwgMTE5MzcwLCAxMTkzNzUsIDExOTM4MSwgMTE5Mzg3LCAxMTkzOTMsIDExOTM5OSwgMTE5NDA1LCAxMTk0MTEsIAotICAgIDExOTQxNywgMTE5NDIzLCAxMTk0MjksIDExOTQzNSwgMTE5NDQxLCAxMTk0NDcsIDExOTQ1MywgMTE5NDU5LCAxMTk0NjUsIAotICAgIDExOTQ3MSwgMTE5NDc3LCAxMTk0ODQsIDExOTQ5MCwgMTE5NDk2LCAxMTk1MDIsIDExOTUwOCwgMTE5NTE0LCAxMTk1MjAsIAotICAgIDExOTUyNiwgMTE5NTMzLCAxMTk1MzksIDExOTU0NSwgMTE5NTUxLCAxMTk1NTcsIDExOTU2MywgMTE5NTY5LCAxMTk1NzYsIAotICAgIDExOTU4MywgMTE5NTkwLCAxMTk1OTcsIDExOTYwNCwgMTE5NjExLCAxMTk2MTgsIDExOTYyNSwgMTE5NjMyLCAxMTk2MzksIAotICAgIDExOTY0NiwgMTE5NjUzLCAxMTk2NjAsIDExOTY2NywgMTE5Njc0LCAxMTk2ODEsIDExOTY4OCwgMTE5Njk2LCAxMTk3MDMsIAotICAgIDExOTcxMCwgMTE5NzE3LCAxMTk3MjQsIDExOTczMSwgMTE5NzM4LCAxMTk3NDUsIDExOTc1MSwgMTE5NzU4LCAxMTk3NjUsIAotICAgIDExOTc3MiwgMTE5Nzc5LCAxMTk3ODYsIDExOTc5MywgMTE5ODAwLCAxMTk4MDcsIDExOTgxNCwgMTE5ODIxLCAxMTk4MjgsIAotICAgIDExOTgzNSwgMTE5ODQyLCAxMTk4NDksIDExOTg1NiwgMTE5ODYzLCAxMTk4NzAsIDExOTg3OCwgMTE5ODg1LCAxMTk4OTIsIAotICAgIDExOTg5OSwgMTE5OTA2LCAxMTk5MTMsIDExOTkyMCwgMTE5OTI3LCAxMTk5MzUsIDExOTk0MiwgMTE5OTQ5LCAxMTk5NTYsIAotICAgIDExOTk2MywgMTE5OTcwLCAxMTk5NzcsIDExOTk4MiwgMCwgMCwgMTE5OTg3LCAxMTk5OTIsIDExOTk5NiwgMTIwMDAwLCAKLSAgICAxMjAwMDQsIDEyMDAwOCwgMTIwMDEyLCAxMjAwMTYsIDEyMDAyMCwgMTIwMDI0LCAxMjAwMjgsIDEyMDAzMywgMTIwMDM3LCAKLSAgICAxMjAwNDEsIDEyMDA0NSwgMTIwMDQ5LCAxMjAwNTMsIDEyMDA1NywgMTIwMDYxLCAxMjAwNjUsIDEyMDA2OSwgMTIwMDc0LCAKLSAgICAxMjAwNzgsIDEyMDA4MiwgMTIwMDg2LCAxMjAwOTAsIDEyMDA5NCwgMTIwMDk4LCAxMjAxMDIsIDEyMDEwNiwgMTIwMTEwLCAKLSAgICAxMjAxMTYsIDEyMDEyMSwgMTIwMTI2LCAxMjAxMzEsIDEyMDEzNiwgMTIwMTQxLCAxMjAxNDYsIDEyMDE1MSwgMTIwMTU2LCAKLSAgICAxMjAxNjEsIDEyMDE2NywgMTIwMTcyLCAxMjAxNzcsIDEyMDE4MiwgMTIwMTg3LCAxMjAxOTIsIDEyMDE5NywgMTIwMjAyLCAKLSAgICAxMjAyMDcsIDEyMDIxMiwgMTIwMjE2LCAxMjAyMjAsIDEyMDIyNCwgMCwgMTIwMjI4LCAxMjAyMzIsIDEyMDIzNiwgCi0gICAgMTIwMjQwLCAxMjAyNDQsIDEyMDI0OCwgMTIwMjUyLCAxMjAyNTYsIDEyMDI2MCwgMTIwMjY0LCAxMjAyNjgsIDEyMDI3MiwgCisgICAgOTIxNzcsIDkyMTgxLCA5MjE4NiwgOTIxOTEsIDAsIDkyMTk3LCA5MjIwMiwgMCwgMCwgMCwgMCwgMCwgOTIyMDcsIDkyMjEzLCAKKyAgICA5MjIyMCwgOTIyMjUsIDkyMjMwLCA5MjIzNCwgOTIyMzksIDkyMjQ0LCAwLCA5MjI0OSwgOTIyNTQsIDkyMjU5LCAwLCAKKyAgICA5MjI2NCwgOTIyNjksIDkyMjc0LCA5MjI3OSwgOTIyODQsIDkyMjg5LCA5MjI5NCwgOTIyOTksIDkyMzA0LCA5MjMwOSwgCisgICAgOTIzMTQsIDkyMzE4LCA5MjMyMiwgOTIzMjcsIDkyMzMyLCA5MjMzNywgOTIzNDEsIDkyMzQ1LCA5MjM0OSwgOTIzNTQsIAorICAgIDkyMzU5LCA5MjM2NCwgOTIzNjksIDkyMzczLCA5MjM3OCwgOTIzODIsIDkyMzg3LCAwLCAwLCAwLCAwLCA5MjM5MiwgCisgICAgOTIzOTgsIDkyNDAzLCAwLCAwLCAwLCAwLCA5MjQwOCwgOTI0MTIsIDkyNDE2LCA5MjQyMCwgOTI0MjQsIDkyNDI4LCAKKyAgICA5MjQzMywgOTI0MzgsIDkyNDQ0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MjQ1MCwgOTI0NTYsIDkyNDYzLCA5MjQ2OSwgCisgICAgOTI0NzYsIDkyNDgyLCA5MjQ4OCwgOTI0OTQsIDkyNTAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5MjUwNywgOTI1MTUsIAorICAgIDkyNTIzLCA5MjUzMSwgOTI1MzksIDkyNTQ3LCA5MjU1NSwgOTI1NjMsIDkyNTcxLCA5MjU3OSwgOTI1ODcsIDkyNTk1LCAKKyAgICA5MjYwMywgOTI2MTEsIDkyNjE5LCA5MjYyNywgOTI2MzUsIDkyNjQzLCA5MjY1MSwgOTI2NTksIDkyNjY3LCA5MjY3NSwgCisgICAgOTI2ODMsIDkyNjkxLCA5MjY5OSwgOTI3MDcsIDkyNzE1LCA5MjcyMywgOTI3MzEsIDkyNzM5LCA5Mjc0NiwgOTI3NTQsIAorICAgIDkyNzYyLCA5Mjc2NiwgOTI3NzEsIDkyNzc2LCA5Mjc4MSwgOTI3ODYsIDkyNzkxLCA5Mjc5NiwgOTI4MDEsIDkyODA1LCAKKyAgICA5MjgxMCwgOTI4MTQsIDkyODE5LCA5MjgyMywgOTI4MjgsIDkyODMyLCA5MjgzNywgOTI4NDIsIDkyODQ3LCA5Mjg1MiwgCisgICAgOTI4NTcsIDkyODYyLCA5Mjg2NywgOTI4NzIsIDkyODc3LCA5Mjg4MiwgOTI4ODcsIDkyODkyLCA5Mjg5NywgOTI5MDIsIAorICAgIDkyOTA3LCA5MjkxMiwgOTI5MTcsIDkyOTIyLCA5MjkyNywgOTI5MzIsIDkyOTM3LCA5Mjk0MiwgOTI5NDcsIDkyOTUyLCAKKyAgICA5Mjk1NywgOTI5NjIsIDkyOTY3LCA5Mjk3MiwgOTI5NzcsIDkyOTgyLCA5Mjk4NywgOTI5OTIsIDkyOTk3LCA5MzAwMiwgCisgICAgOTMwMDcsIDkzMDEyLCA5MzAxNywgOTMwMjIsIDAsIDAsIDAsIDkzMDI3LCA5MzAzMiwgOTMwNDEsIDkzMDQ5LCA5MzA1OCwgCisgICAgOTMwNjcsIDkzMDc4LCA5MzA4OSwgOTMwOTYsIDkzMTAzLCA5MzExMCwgOTMxMTcsIDkzMTI0LCA5MzEzMSwgOTMxMzgsIAorICAgIDkzMTQ1LCA5MzE1MiwgOTMxNTksIDkzMTY2LCA5MzE3MywgOTMxODAsIDkzMTg3LCA5MzE5NCwgOTMyMDEsIDkzMjA4LCAKKyAgICA5MzIxNSwgOTMyMjIsIDkzMjI5LCA5MzIzNiwgMCwgMCwgOTMyNDMsIDkzMjQ5LCA5MzI1NSwgOTMyNjEsIDkzMjY3LCAKKyAgICA5MzI3NCwgOTMyODEsIDkzMjg5LCA5MzI5NywgOTMzMDQsIDkzMzExLCA5MzMxOCwgOTMzMjUsIDkzMzMyLCA5MzMzOSwgCisgICAgOTMzNDYsIDkzMzUzLCA5MzM2MCwgOTMzNjcsIDkzMzc0LCA5MzM4MSwgOTMzODgsIDkzMzk1LCA5MzQwMiwgOTM0MDksIAorICAgIDkzNDE2LCA5MzQyMywgMCwgMCwgMCwgMCwgMCwgOTM0MzAsIDkzNDM2LCA5MzQ0MiwgOTM0NDgsIDkzNDU0LCA5MzQ2MSwgCisgICAgOTM0NjgsIDkzNDc2LCA5MzQ4NCwgOTM0OTAsIDkzNDk2LCA5MzUwMywgOTM1MDksIDkzNTE1LCA5MzUyMSwgOTM1MjcsIAorICAgIDkzNTM0LCA5MzU0MSwgOTM1NDgsIDkzNTU1LCA5MzU2MiwgOTM1NjksIDkzNTc2LCA5MzU4MywgOTM1OTAsIDkzNTk3LCAKKyAgICA5MzYwNCwgOTM2MTEsIDkzNjE4LCA5MzYyNSwgOTM2MzIsIDkzNjM5LCA5MzY0NiwgOTM2NTMsIDkzNjYwLCA5MzY2NywgCisgICAgOTM2NzQsIDkzNjgxLCA5MzY4OCwgOTM2OTUsIDkzNzAyLCA5MzcwOSwgOTM3MTYsIDkzNzIzLCA5MzczMCwgOTM3MzcsIAorICAgIDkzNzQ0LCA5Mzc1MSwgOTM3NTgsIDkzNzY1LCA5Mzc3MiwgOTM3NzksIDkzNzg2LCA5Mzc5MywgOTM4MDAsIDkzODA3LCAKKyAgICA5MzgxNCwgOTM4MjEsIDkzODI4LCA5MzgzNSwgOTM4NDIsIDkzODQ5LCA5Mzg1NiwgOTM4NjMsIDkzODcwLCA5Mzg3NywgCisgICAgOTM4ODQsIDkzODkxLCA5Mzg5OCwgOTM5MDUsIDkzOTEyLCA5MzkxOSwgOTM5MjYsIDkzOTMzLCA5Mzk0MCwgOTM5NDcsIAorICAgIDkzOTU0LCA5Mzk2MSwgOTM5NjgsIDkzOTc1LCA5Mzk4MiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTM5ODksIDkzOTkzLCAKKyAgICA5Mzk5NywgOTQwMDEsIDk0MDA1LCA5NDAwOSwgOTQwMTMsIDk0MDE3LCA5NDAyMSwgOTQwMjUsIDk0MDMwLCA5NDAzNSwgCisgICAgOTQwNDAsIDk0MDQ1LCA5NDA1MCwgOTQwNTUsIDk0MDYwLCA5NDA2NSwgOTQwNzAsIDk0MDc2LCA5NDA4MiwgOTQwODgsIAorICAgIDk0MDk1LCA5NDEwMiwgOTQxMDksIDk0MTE2LCA5NDEyMywgOTQxMzAsIDk0MTM3LCA5NDE0NCwgOTQxNTEsIDAsIDk0MTU4LCAKKyAgICA5NDE2MiwgOTQxNjYsIDk0MTcwLCA5NDE3NCwgOTQxNzgsIDk0MTgxLCA5NDE4NSwgOTQxODgsIDk0MTkyLCA5NDE5NSwgCisgICAgOTQxOTksIDk0MjAzLCA5NDIwOCwgOTQyMTIsIDk0MjE3LCA5NDIyMCwgOTQyMjQsIDk0MjI3LCA5NDIzMSwgOTQyMzQsIAorICAgIDk0MjM4LCA5NDI0MiwgOTQyNDYsIDk0MjUwLCA5NDI1NCwgOTQyNTgsIDk0MjYyLCA5NDI2NiwgOTQyNzAsIDk0Mjc0LCAKKyAgICA5NDI3OCwgOTQyODIsIDk0Mjg2LCA5NDI5MCwgOTQyOTQsIDk0Mjk4LCA5NDMwMiwgOTQzMDYsIDk0MzA5LCA5NDMxMiwgCisgICAgOTQzMTYsIDk0MzIwLCA5NDMyNCwgOTQzMjcsIDk0MzMwLCA5NDMzMywgOTQzMzcsIDk0MzQxLCA5NDM0NSwgOTQzNDksIAorICAgIDk0MzUyLCA5NDM1NSwgOTQzNTksIDk0MzY1LCA5NDM3MSwgOTQzNzcsIDk0MzgyLCA5NDM4OSwgOTQzOTMsIDk0Mzk4LCAKKyAgICA5NDQwMiwgOTQ0MDcsIDk0NDEyLCA5NDQxOCwgOTQ0MjMsIDk0NDI5LCA5NDQzMywgOTQ0MzgsIDk0NDQyLCA5NDQ0NywgCisgICAgOTQ0NTAsIDk0NDUzLCA5NDQ1NywgOTQ0NjIsIDk0NDY4LCA5NDQ3MywgOTQ0NzksIDAsIDAsIDAsIDAsIDk0NDg0LCAKKyAgICA5NDQ4NywgOTQ0OTAsIDk0NDkzLCA5NDQ5NiwgOTQ0OTksIDk0NTAyLCA5NDUwNSwgOTQ1MDgsIDk0NTExLCA5NDUxNSwgCisgICAgOTQ1MTksIDk0NTIzLCA5NDUyNywgOTQ1MzEsIDk0NTM1LCA5NDUzOSwgOTQ1NDMsIDk0NTQ3LCA5NDU1MiwgOTQ1NTcsIAorICAgIDk0NTYxLCA5NDU2NCwgOTQ1NjcsIDk0NTcwLCA5NDU3MywgOTQ1NzYsIDk0NTc5LCA5NDU4MiwgOTQ1ODUsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0NTg4LCA5NDU5MywgOTQ1OTgsIDk0NjAzLCA5NDYwNywgCisgICAgOTQ2MTIsIDk0NjE2LCA5NDYyMSwgOTQ2MjUsIDk0NjMwLCA5NDYzNCwgOTQ2MzksIDk0NjQzLCA5NDY0OCwgOTQ2NTIsIAorICAgIDk0NjU3LCA5NDY2MiwgOTQ2NjcsIDk0NjcyLCA5NDY3NywgOTQ2ODIsIDk0Njg3LCA5NDY5MiwgOTQ2OTcsIDk0NzAyLCAKKyAgICA5NDcwNywgOTQ3MTIsIDk0NzE3LCA5NDcyMiwgOTQ3MjcsIDk0NzMyLCA5NDczNywgOTQ3NDIsIDk0NzQ3LCA5NDc1MiwgCisgICAgOTQ3NTYsIDk0NzYwLCA5NDc2NSwgOTQ3NzAsIDk0Nzc1LCA5NDc3OSwgOTQ3ODMsIDk0Nzg3LCA5NDc5MiwgOTQ3OTcsIAorICAgIDk0ODAyLCA5NDgwNywgOTQ4MTEsIDk0ODE1LCA5NDgyMSwgOTQ4MjYsIDk0ODMyLCA5NDgzNywgOTQ4NDMsIDk0ODQ4LCAKKyAgICA5NDg1NCwgOTQ4NTksIDk0ODY1LCA5NDg3MCwgOTQ4NzUsIDk0ODgwLCA5NDg4NSwgOTQ4ODksIDk0ODk0LCA5NDkwMCwgCisgICAgOTQ5MDQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk0OTA5LCA5NDkxNiwgOTQ5MjMsIAorICAgIDk0OTMwLCA5NDkzNywgOTQ5NDQsIDk0OTUxLCA5NDk1OCwgOTQ5NjUsIDk0OTcyLCA5NDk3OSwgOTQ5ODYsIDk0OTkzLCAKKyAgICA5NTAwMCwgOTUwMDcsIDk1MDE0LCA5NTAyMSwgOTUwMjgsIDk1MDM1LCA5NTA0MiwgOTUwNDksIDk1MDU2LCA5NTA2MywgCisgICAgOTUwNzAsIDk1MDc3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTA4NCwgOTUwOTEsIDk1MDk3LCA5NTEwMywgOTUxMDksIAorICAgIDk1MTE1LCA5NTEyMSwgOTUxMjcsIDk1MTMzLCA5NTEzOSwgMCwgMCwgMCwgMCwgMCwgMCwgOTUxNDUsIDk1MTUwLCA5NTE1NSwgCisgICAgOTUxNjAsIDk1MTY1LCA5NTE2OSwgOTUxNzMsIDk1MTc3LCA5NTE4MiwgOTUxODcsIDk1MTkyLCA5NTE5NywgOTUyMDIsIAorICAgIDk1MjA3LCA5NTIxMiwgOTUyMTcsIDk1MjIyLCA5NTIyNywgOTUyMzIsIDk1MjM3LCA5NTI0MiwgOTUyNDcsIDk1MjUyLCAKKyAgICA5NTI1NywgOTUyNjIsIDk1MjY3LCA5NTI3MiwgOTUyNzcsIDk1MjgyLCA5NTI4NywgOTUyOTIsIDk1Mjk3LCA5NTMwMiwgCisgICAgOTUzMDcsIDk1MzEyLCA5NTMxNywgOTUzMjIsIDk1MzI3LCA5NTMzMiwgOTUzMzcsIDk1MzQyLCA5NTM0NywgOTUzNTMsIAorICAgIDk1MzU4LCA5NTM2NCwgOTUzNjksIDk1Mzc1LCA5NTM4MCwgOTUzODYsIDk1MzkyLCA5NTM5NiwgOTU0MDEsIDk1NDA1LCAwLCAKKyAgICA5NTQwOSwgOTU0MTQsIDk1NDE4LCA5NTQyMiwgOTU0MjYsIDk1NDMwLCA5NTQzNCwgOTU0MzgsIDk1NDQyLCA5NTQ0NiwgCisgICAgOTU0NTAsIDk1NDU1LCA5NTQ1OSwgOTU0NjQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDk1NDY5LCAKKyAgICA5NTQ3MywgOTU0NzcsIDk1NDgxLCA5NTQ4NCwgOTU0ODgsIDk1NDkxLCA5NTQ5NSwgOTU0OTgsIDk1NTAyLCA5NTUwNiwgCisgICAgOTU1MTEsIDk1NTE1LCA5NTUyMCwgOTU1MjMsIDk1NTI3LCA5NTUzMCwgOTU1MzQsIDk1NTM3LCA5NTU0MSwgOTU1NDUsIAorICAgIDk1NTQ5LCA5NTU1MywgOTU1NTcsIDk1NTYxLCA5NTU2NSwgOTU1NjksIDk1NTczLCA5NTU3NywgOTU1ODEsIDk1NTg1LCAKKyAgICA5NTU4OSwgOTU1OTMsIDk1NTk3LCA5NTYwMSwgOTU2MDUsIDk1NjA5LCA5NTYxMiwgOTU2MTUsIDk1NjE5LCA5NTYyMywgCisgICAgOTU2MjcsIDk1NjMwLCA5NTYzMywgOTU2MzYsIDk1NjQwLCA5NTY0NCwgOTU2NDgsIDk1NjUyLCA5NTY1NiwgOTU2NTksIAorICAgIDk1NjYyLCA5NTY2NywgOTU2NzEsIDk1Njc2LCA5NTY4MCwgOTU2ODUsIDk1NjkwLCA5NTY5NiwgOTU3MDEsIDk1NzA3LCAKKyAgICA5NTcxMSwgOTU3MTYsIDk1NzIwLCA5NTcyNSwgOTU3MjksIDk1NzMzLCA5NTczNywgOTU3NDEsIDk1NzQ0LCA5NTc0NywgCisgICAgOTU3NTEsIDk1NzU1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NTc1OCwgOTU3NjIsIDk1NzY1LCA5NTc2OCwgOTU3NzEsIAorICAgIDk1Nzc0LCA5NTc3NywgOTU3ODAsIDk1NzgzLCA5NTc4NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgOTU3ODksIDk1NzkzLCA5NTc5OCwgOTU4MDIsIDk1ODA3LCA5NTgxMSwgOTU4MTYsIDk1ODIwLCA5NTgyNSwgOTU4MjksIAorICAgIDk1ODM0LCA5NTgzOCwgOTU4NDMsIDk1ODQ4LCA5NTg1MywgOTU4NTgsIDk1ODYzLCA5NTg2OCwgOTU4NzMsIDk1ODc4LCAKKyAgICA5NTg4MywgOTU4ODgsIDk1ODkzLCA5NTg5OCwgOTU5MDMsIDk1OTA4LCA5NTkxMywgOTU5MTgsIDk1OTIzLCA5NTkyOCwgCisgICAgOTU5MzIsIDk1OTM2LCA5NTk0MSwgOTU5NDYsIDk1OTUxLCA5NTk1NSwgOTU5NTksIDk1OTYzLCA5NTk2OCwgOTU5NzMsIAorICAgIDk1OTc4LCA5NTk4MiwgOTU5ODYsIDk1OTkxLCA5NTk5NiwgOTYwMDEsIDk2MDA3LCA5NjAxMiwgOTYwMTgsIDk2MDIzLCAKKyAgICA5NjAyOSwgOTYwMzQsIDk2MDQwLCA5NjA0NSwgOTYwNTEsIDk2MDU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA5NjA2MSwgCisgICAgOTYwNjYsIDk2MDcwLCA5NjA3NCwgOTYwNzgsIDk2MDgyLCA5NjA4NiwgOTYwOTAsIDk2MDk0LCA5NjA5OCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgOTYxMDIsIDk2MTA1LCA5NjExMCwgOTYxMTYsIDk2MTI0LCA5NjEyOSwgOTYxMzUsIDk2MTQzLCA5NjE0OSwgCisgICAgOTYxNTUsIDk2MTU5LCA5NjE2MywgOTYxNzAsIDk2MTc5LCA5NjE4NiwgOTYxOTUsIDk2MjAxLCA5NjIxMCwgOTYyMTcsIAorICAgIDk2MjI0LCA5NjIzMSwgOTYyNDEsIDk2MjQ3LCA5NjI1MSwgOTYyNTgsIDk2MjY3LCA5NjI3NywgOTYyODQsIDk2MjkxLCAKKyAgICA5NjI5NSwgOTYyOTksIDk2MzA2LCA5NjMxNiwgOTYzMjAsIDk2MzI3LCA5NjMzNCwgOTYzNDEsIDk2MzQ3LCA5NjM1NCwgCisgICAgOTYzNjEsIDk2MzY4LCA5NjM3NSwgOTYzNzksIDk2MzgzLCA5NjM4NywgOTYzOTQsIDk2Mzk4LCA5NjQwNSwgOTY0MTIsIAorICAgIDk2NDI2LCA5NjQzNSwgOTY0MzksIDk2NDQzLCA5NjQ0NywgOTY0NTQsIDk2NDU4LCA5NjQ2MiwgOTY0NjYsIDk2NDc0LCAKKyAgICA5NjQ4MiwgOTY1MDEsIDk2NTExLCA5NjUzMSwgOTY1MzUsIDk2NTM5LCA5NjU0MywgOTY1NDcsIDk2NTUxLCA5NjU1NSwgCisgICAgOTY1NTksIDk2NTY2LCA5NjU3MCwgOTY1NzMsIDk2NTc3LCA5NjU4MSwgOTY1ODcsIDk2NTk0LCA5NjYwMywgOTY2MDcsIAorICAgIDk2NjE2LCA5NjYyNSwgOTY2MzMsIDk2NjM3LCA5NjY0NCwgOTY2NDgsIDk2NjUyLCA5NjY1NiwgOTY2NjAsIDk2NjcxLCAKKyAgICA5NjY4MCwgOTY2ODksIDk2Njk4LCA5NjcwNywgOTY3MTksIDk2NzI4LCA5NjczNywgOTY3NDYsIDk2NzU0LCA5Njc2MywgCisgICAgOTY3NzUsIDk2Nzg0LCA5Njc5MywgOTY4MDIsIDk2ODE0LCA5NjgyMywgOTY4MzIsIDk2ODQ0LCA5Njg1MywgOTY4NjIsIAorICAgIDk2ODc0LCA5Njg4MywgOTY4ODcsIDk2ODkxLCA5Njg5NSwgOTY4OTksIDk2OTAzLCA5NjkwNywgOTY5MTEsIDk2OTE4LCAKKyAgICA5NjkyMiwgOTY5MjYsIDk2OTM3LCA5Njk0MSwgOTY5NDUsIDk2OTUyLCA5Njk1OCwgOTY5NjQsIDk2OTY4LCA5Njk3NSwgCisgICAgOTY5NzksIDk2OTgzLCA5Njk4NywgOTY5OTEsIDk2OTk1LCA5Njk5OSwgOTcwMDUsIDk3MDEzLCA5NzAxNywgOTcwMjEsIAorICAgIDk3MDI0LCA5NzAzMCwgOTcwNDAsIDk3MDQ0LCA5NzA1NiwgOTcwNjMsIDk3MDcwLCA5NzA3NywgOTcwODQsIDk3MDkwLCAKKyAgICA5NzA5NCwgOTcwOTgsIDk3MTAyLCA5NzEwNiwgOTcxMTMsIDk3MTIyLCA5NzEyOSwgOTcxMzcsIDk3MTQ1LCA5NzE1MSwgCisgICAgOTcxNTUsIDk3MTU5LCA5NzE2MywgOTcxNjcsIDk3MTczLCA5NzE4MiwgOTcxOTQsIDk3MjAxLCA5NzIwOCwgOTcyMTcsIAorICAgIDk3MjI4LCA5NzIzNCwgOTcyNDMsIDk3MjUyLCA5NzI1OSwgOTcyNjgsIDk3Mjc1LCA5NzI4MiwgOTcyOTIsIDk3Mjk5LCAKKyAgICA5NzMwNiwgOTczMTMsIDk3MzIwLCA5NzMyNCwgOTczMzAsIDk3MzM0LCA5NzM0NSwgOTczNTMsIDk3MzYyLCA5NzM3NCwgCisgICAgOTczODEsIDk3Mzg4LCA5NzM5OCwgOTc0MDUsIDk3NDE0LCA5NzQyMSwgOTc0MzAsIDk3NDM3LCA5NzQ0NCwgOTc0NTQsIAorICAgIDk3NDYxLCA5NzQ2OCwgOTc0NzgsIDk3NDg1LCA5NzQ5NywgOTc1MDYsIDk3NTEzLCA5NzUyMCwgOTc1MjcsIDk3NTM2LCAKKyAgICA5NzU0NiwgOTc1NTksIDk3NTY2LCA5NzU3NiwgOTc1ODYsIDk3NTkzLCA5NzYwMiwgOTc2MTUsIDk3NjIyLCA5NzYyOSwgCisgICAgOTc2MzYsIDk3NjQ2LCA5NzY1NiwgOTc2NjMsIDk3NjczLCA5NzY4MCwgOTc2ODcsIDk3Njk3LCA5NzcwMywgOTc3MTAsIAorICAgIDk3NzE3LCA5NzcyNCwgOTc3MzQsIDk3NzQxLCA5Nzc0OCwgOTc3NTUsIDk3NzYxLCA5Nzc2OCwgOTc3NzgsIDk3Nzg1LCAKKyAgICA5Nzc4OSwgOTc3OTcsIDk3ODAxLCA5NzgxMywgOTc4MTcsIDk3ODMxLCA5NzgzNSwgOTc4MzksIDk3ODQzLCA5Nzg0NywgCisgICAgOTc4NTMsIDk3ODYwLCA5Nzg2OCwgOTc4NzIsIDk3ODc2LCA5Nzg4MCwgOTc4ODQsIDk3ODkxLCA5Nzg5NSwgOTc5MDEsIAorICAgIDk3OTA3LCA5NzkxNSwgOTc5MTksIDk3OTI2LCA5NzkzNCwgOTc5MzgsIDk3OTQyLCA5Nzk0OCwgOTc5NTIsIDk3OTYxLCAKKyAgICA5Nzk3MCwgOTc5NzcsIDk3OTg3LCA5Nzk5MywgOTc5OTcsIDk4MDAxLCA5ODAwOSwgOTgwMTYsIDk4MDIzLCA5ODAyOSwgCisgICAgOTgwMzMsIDk4MDQxLCA5ODA0NSwgOTgwNTIsIDk4MDY0LCA5ODA3MSwgOTgwODEsIDk4MDg3LCA5ODA5MSwgOTgxMDAsIAorICAgIDk4MTA3LCA5ODExNiwgOTgxMjAsIDk4MTI0LCA5ODEzMSwgOTgxMzUsIDk4MTM5LCA5ODE0MywgOTgxNDcsIDk4MTUwLCAKKyAgICA5ODE1NiwgOTgxNjIsIDk4MTY2LCA5ODE3MCwgOTgxNzcsIDk4MTg0LCA5ODE5MSwgOTgxOTgsIDk4MjA1LCA5ODIxMiwgCisgICAgOTgyMTksIDk4MjI2LCA5ODIzMiwgOTgyMzYsIDk4MjQwLCA5ODI0NywgOTgyNTQsIDk4MjYxLCA5ODI2OCwgOTgyNzUsIAorICAgIDk4Mjc5LCA5ODI4MiwgOTgyODcsIDk4MjkxLCA5ODI5NSwgOTgzMDQsIDk4MzEzLCA5ODMxNywgOTgzMjEsIDk4MzI3LCAKKyAgICA5ODMzMywgOTgzNTAsIDk4MzU2LCA5ODM2MCwgOTgzNjksIDk4MzczLCA5ODM3NywgOTgzODQsIDk4MzkyLCA5ODQwMCwgCisgICAgOTg0MDYsIDk4NDEwLCA5ODQxNCwgOTg0MTgsIDk4NDIyLCA5ODQyNSwgOTg0MzEsIDk4NDM4LCA5ODQ0OCwgOTg0NTUsIAorICAgIDk4NDYyLCA5ODQ2OSwgOTg0NzUsIDk4NDgyLCA5ODQ4OSwgOTg0OTYsIDk4NTAzLCA5ODUxMCwgOTg1MTksIDk4NTI2LCAKKyAgICA5ODUzOCwgOTg1NDUsIDk4NTUyLCA5ODU2MiwgOTg1NzMsIDk4NTgwLCA5ODU4NywgOTg1OTQsIDk4NjAxLCA5ODYwOCwgCisgICAgOTg2MTUsIDk4NjIyLCA5ODYyOSwgOTg2MzYsIDk4NjQzLCA5ODY1MywgOTg2NjMsIDk4NjczLCA5ODY4MCwgOTg2OTAsIAorICAgIDk4Njk3LCA5ODcwNCwgOTg3MTEsIDk4NzE4LCA5ODcyNCwgOTg3MzEsIDk4NzM4LCA5ODc0NSwgOTg3NTIsIDk4NzU5LCAKKyAgICA5ODc2NiwgOTg3NzMsIDk4NzgwLCA5ODc4NiwgOTg3OTMsIDk4ODAwLCA5ODgwOSwgOTg4MTYsIDk4ODIzLCA5ODgyNywgCisgICAgOTg4MzUsIDk4ODM5LCA5ODg0MywgOTg4NDcsIDk4ODUxLCA5ODg1NSwgOTg4NjIsIDk4ODY2LCA5ODg3NSwgOTg4NzksIAorICAgIDk4ODg2LCA5ODg5NCwgOTg4OTgsIDk4OTAyLCA5ODkwNiwgOTg5MTksIDk4OTM1LCA5ODkzOSwgOTg5NDMsIDk4OTUwLCAKKyAgICA5ODk1NiwgOTg5NjMsIDk4OTY3LCA5ODk3MSwgOTg5NzUsIDk4OTc5LCA5ODk4MywgOTg5OTAsIDk4OTk0LCA5OTAxMiwgCisgICAgOTkwMTYsIDk5MDIwLCA5OTAyNywgOTkwMzEsIDk5MDM1LCA5OTA0MSwgOTkwNDUsIDk5MDQ5LCA5OTA1NywgOTkwNjEsIAorICAgIDk5MDY1LCA5OTA2OSwgOTkwNzMsIDk5MDc5LCA5OTA5MCwgOTkwOTksIDk5MTA4LCA5OTExNSwgOTkxMjIsIDk5MTMzLCAKKyAgICA5OTE0MCwgOTkxNDcsIDk5MTU0LCA5OTE2MSwgOTkxNjgsIDk5MTc1LCA5OTE4MiwgOTkxOTIsIDk5MTk4LCA5OTIwNSwgCisgICAgOTkyMTUsIDk5MjI0LCA5OTIzMSwgOTkyNDAsIDk5MjUwLCA5OTI1NywgOTkyNjQsIDk5MjcxLCA5OTI3OCwgOTkyOTAsIAorICAgIDk5Mjk3LCA5OTMwNCwgOTkzMTEsIDk5MzE4LCA5OTMyNSwgOTkzMzUsIDk5MzQyLCA5OTM0OSwgOTkzNTksIDk5MzcyLCAKKyAgICA5OTM4NCwgOTkzOTEsIDk5NDAxLCA5OTQwOCwgOTk0MTUsIDk5NDIyLCA5OTQzNiwgOTk0NDIsIDk5NDUwLCA5OTQ2MCwgCisgICAgOTk0NzAsIDk5NDc3LCA5OTQ4NCwgOTk0OTAsIDk5NDk0LCA5OTUwMSwgOTk1MTEsIDk5NTE3LCA5OTUzMCwgOTk1MzQsIAorICAgIDk5NTM4LCA5OTU0NSwgOTk1NDksIDk5NTU2LCA5OTU2NiwgOTk1NzAsIDk5NTc0LCA5OTU3OCwgOTk1ODIsIDk5NTg2LCAKKyAgICA5OTU5MywgOTk1OTcsIDk5NjA0LCA5OTYxMSwgOTk2MTgsIDk5NjI3LCA5OTYzNiwgOTk2NDYsIDk5NjUzLCA5OTY2MCwgCisgICAgOTk2NjcsIDk5Njc3LCA5OTY4NCwgOTk2OTQsIDk5NzAxLCA5OTcxMSwgOTk3MTgsIDk5NzI1LCA5OTczNSwgOTk3NDUsIAorICAgIDk5NzUyLCA5OTc1OCwgOTk3NjYsIDk5Nzc0LCA5OTc4MCwgOTk3ODYsIDk5NzkwLCA5OTc5NCwgOTk4MDEsIDk5ODA5LCAKKyAgICA5OTgxNSwgOTk4MTksIDk5ODIzLCA5OTgyNywgOTk4MzQsIDk5ODQ2LCA5OTg0OSwgOTk4NTYsIDk5ODYyLCA5OTg2NiwgCisgICAgOTk4NzAsIDk5ODc0LCA5OTg3OCwgOTk4ODIsIDk5ODg2LCA5OTg5MCwgOTk4OTQsIDk5ODk4LCA5OTkwMiwgOTk5MDksIAorICAgIDk5OTEzLCA5OTkxOSwgOTk5MjMsIDk5OTI3LCA5OTkzMSwgOTk5MzcsIDk5OTQ0LCA5OTk1MSwgOTk5NTgsIDk5OTY5LCAKKyAgICA5OTk3NywgOTk5ODEsIDk5OTg3LCA5OTk5NiwgMTAwMDAzLCAxMDAwMDksIDEwMDAxMiwgMTAwMDE2LCAxMDAwMjAsIAorICAgIDEwMDAyNiwgMTAwMDM1LCAxMDAwNDMsIDEwMDA0NywgMTAwMDUzLCAxMDAwNTcsIDEwMDA2MSwgMTAwMDY1LCAxMDAwNzEsIAorICAgIDEwMDA3OCwgMTAwMDg0LCAxMDAwODgsIDEwMDA5NCwgMTAwMDk4LCAxMDAxMDIsIDEwMDExMSwgMTAwMTIzLCAxMDAxMjcsIAorICAgIDEwMDEzNCwgMTAwMTQxLCAxMDAxNTEsIDEwMDE1OCwgMTAwMTcwLCAxMDAxNzcsIDEwMDE4NCwgMTAwMTkxLCAxMDAyMDIsIAorICAgIDEwMDIxMiwgMTAwMjI1LCAxMDAyMzUsIDEwMDI0MiwgMTAwMjQ2LCAxMDAyNTAsIDEwMDI1NCwgMTAwMjU4LCAxMDAyNjcsIAorICAgIDEwMDI3NiwgMTAwMjg1LCAxMDAzMDIsIDEwMDMxMSwgMTAwMzE3LCAxMDAzMjQsIDEwMDMzMiwgMTAwMzQ1LCAxMDAzNDksIAorICAgIDEwMDM1OCwgMTAwMzY3LCAxMDAzNzYsIDEwMDM4NSwgMTAwMzk2LCAxMDA0MDUsIDEwMDQxNCwgMTAwNDIzLCAxMDA0MzIsIAorICAgIDEwMDQ0MSwgMTAwNDUwLCAxMDA0NjAsIDEwMDQ2MywgMTAwNDY3LCAxMDA0NzEsIDEwMDQ3NSwgMTAwNDc5LCAxMDA0ODMsIAorICAgIDEwMDQ4OSwgMTAwNDk2LCAxMDA1MDMsIDEwMDUxMCwgMTAwNTE2LCAxMDA1MjIsIDEwMDUyOSwgMTAwNTM1LCAxMDA1NDIsIAorICAgIDEwMDU1MCwgMTAwNTU0LCAxMDA1NjEsIDEwMDU2OCwgMTAwNTc1LCAxMDA1ODMsIDEwMDU4NiwgMTAwNTkwLCAxMDA1OTQsIAorICAgIDEwMDU5OCwgMTAwNjAxLCAxMDA2MDcsIDEwMDYxMSwgMTAwNjE3LCAxMDA2MjQsIDEwMDYzMSwgMTAwNjM3LCAxMDA2NDQsIAorICAgIDEwMDY1MSwgMTAwNjU4LCAxMDA2NjUsIDEwMDY3MiwgMTAwNjc5LCAxMDA2ODYsIDEwMDY5MywgMTAwNzAwLCAxMDA3MDcsIAorICAgIDEwMDcxNCwgMTAwNzIxLCAxMDA3MjgsIDEwMDczNSwgMTAwNzQxLCAxMDA3NDUsIDEwMDc1NCwgMTAwNzU4LCAxMDA3NjIsIAorICAgIDEwMDc2NiwgMTAwNzcwLCAxMDA3NzYsIDEwMDc4MywgMTAwNzkwLCAxMDA3OTcsIDEwMDgwNCwgMTAwODExLCAxMDA4MTcsIAorICAgIDEwMDgyNSwgMTAwODI5LCAxMDA4MzMsIDEwMDgzNywgMTAwODQxLCAxMDA4NDcsIDEwMDg2NCwgMTAwODgxLCAxMDA4ODUsIAorICAgIDEwMDg4OSwgMTAwODkzLCAxMDA4OTcsIDEwMDkwMSwgMTAwOTA1LCAxMDA5MTEsIDEwMDkxOCwgMTAwOTIyLCAxMDA5MjgsIAorICAgIDEwMDkzNSwgMTAwOTQyLCAxMDA5NDksIDEwMDk1NiwgMTAwOTYzLCAxMDA5NzIsIDEwMDk3OSwgMTAwOTg2LCAxMDA5OTMsIAorICAgIDEwMTAwMCwgMTAxMDA0LCAxMDEwMDgsIDEwMTAxNCwgMTAxMDI2LCAxMDEwMzAsIDEwMTAzNCwgMTAxMDQzLCAxMDEwNDcsIAorICAgIDEwMTA1MSwgMTAxMDU1LCAxMDEwNjEsIDEwMTA2NSwgMTAxMDY5LCAxMDEwNzgsIDEwMTA4MiwgMTAxMDg2LCAxMDEwOTAsIAorICAgIDEwMTA5NywgMTAxMTAxLCAxMDExMDUsIDEwMTEwOSwgMTAxMTEzLCAxMDExMTcsIDEwMTEyMSwgMTAxMTI1LCAxMDExMjksIAorICAgIDEwMTEzNSwgMTAxMTQyLCAxMDExNDksIDEwMTE1NSwgMTAxMTU5LCAxMDExNzYsIDEwMTE4MiwgMTAxMTg2LCAxMDExOTIsIAorICAgIDEwMTE5OCwgMTAxMjA0LCAxMDEyMTAsIDEwMTIxNiwgMTAxMjIyLCAxMDEyMjYsIDEwMTIzMCwgMTAxMjM0LCAxMDEyNDAsIAorICAgIDEwMTI0NCwgMTAxMjUwLCAxMDEyNTQsIDEwMTI1OCwgMTAxMjY1LCAxMDEyNzIsIDEwMTI4OSwgMTAxMjkzLCAxMDEyOTcsIAorICAgIDEwMTMwMSwgMTAxMzA1LCAxMDEzMDksIDEwMTMyMSwgMTAxMzI0LCAxMDEzMjksIDEwMTMzNCwgMTAxMzQ5LCAxMDEzNTksIAorICAgIDEwMTM3MSwgMTAxMzc1LCAxMDEzNzksIDEwMTM4MywgMTAxMzg5LCAxMDEzOTYsIDEwMTQwMywgMTAxNDEzLCAxMDE0MjUsIAorICAgIDEwMTQzMSwgMTAxNDM3LCAxMDE0NDYsIDEwMTQ1MCwgMTAxNDU0LCAxMDE0NjEsIDEwMTQ3MSwgMTAxNDc4LCAxMDE0ODQsIAorICAgIDEwMTQ4OCwgMTAxNDkyLCAxMDE0OTksIDEwMTUwNSwgMTAxNTA5LCAxMDE1MTUsIDEwMTUxOSwgMTAxNTI3LCAxMDE1MzMsIAorICAgIDEwMTUzNywgMTAxNTQ1LCAxMDE1NTMsIDEwMTU2MCwgMTAxNTY2LCAxMDE1NzMsIDEwMTU4MCwgMTAxNTkwLCAxMDE2MDAsIAorICAgIDEwMTYwNCwgMTAxNjA4LCAxMDE2MTIsIDEwMTYxNiwgMTAxNjIyLCAxMDE2MjksIDEwMTYzNSwgMTAxNjQyLCAxMDE2NDksIAorICAgIDEwMTY1NiwgMTAxNjY1LCAxMDE2NzIsIDEwMTY3OSwgMTAxNjg1LCAxMDE2OTIsIDEwMTY5OSwgMTAxNzA2LCAxMDE3MTMsIAorICAgIDEwMTcyMCwgMTAxNzI3LCAxMDE3MzMsIDEwMTc0MCwgMTAxNzQ3LCAxMDE3NTQsIDEwMTc2MywgMTAxNzcwLCAxMDE3NzcsIAorICAgIDEwMTc4MSwgMTAxNzg3LCAxMDE3OTEsIDEwMTc5NywgMTAxODA0LCAxMDE4MTEsIDEwMTgxOCwgMTAxODIyLCAxMDE4MjYsIAorICAgIDEwMTgzMCwgMTAxODM0LCAxMDE4MzgsIDEwMTg0NSwgMTAxODQ5LCAxMDE4NTMsIDEwMTg1OSwgMTAxODY3LCAxMDE4NzEsIAorICAgIDEwMTg3NSwgMTAxODc5LCAxMDE4ODMsIDEwMTg5MCwgMTAxODk0LCAxMDE4OTgsIDEwMTkwNiwgMTAxOTEwLCAxMDE5MTQsIAorICAgIDEwMTkxOCwgMTAxOTIyLCAxMDE5MjgsIDEwMTkzMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMTAxOTM2LCAxMDE5NDIsIDEwMTk0OCwgMTAxOTU1LCAxMDE5NjIsIDEwMTk2OSwgMTAxOTc2LCAxMDE5ODMsIAorICAgIDEwMTk5MCwgMTAxOTk2LCAxMDIwMDMsIDEwMjAxMCwgMTAyMDE3LCAxMDIwMjQsIDEwMjAzMSwgMTAyMDM4LCAxMDIwNDQsIAorICAgIDEwMjA1MCwgMTAyMDU2LCAxMDIwNjIsIDEwMjA2OCwgMTAyMDc0LCAxMDIwODAsIDEwMjA4NiwgMTAyMDkyLCAxMDIwOTksIAorICAgIDEwMjEwNiwgMTAyMTEzLCAxMDIxMjAsIDEwMjEyNywgMTAyMTM0LCAxMDIxNDAsIDEwMjE0NiwgMTAyMTUyLCAxMDIxNTksIAorICAgIDEwMjE2NiwgMTAyMTcyLCAxMDIxNzgsIDEwMjE4NywgMTAyMTk0LCAxMDIyMDEsIDEwMjIwOCwgMTAyMjE1LCAxMDIyMjIsIAorICAgIDEwMjIyOSwgMTAyMjM1LCAxMDIyNDEsIDEwMjI0NywgMTAyMjU2LCAxMDIyNjMsIDEwMjI3MCwgMTAyMjgxLCAxMDIyOTIsIAorICAgIDEwMjI5OCwgMTAyMzA0LCAxMDIzMTAsIDEwMjMxOSwgMTAyMzI2LCAxMDIzMzMsIDEwMjM0MywgMTAyMzUzLCAxMDIzNjQsIAorICAgIDEwMjM3NSwgMTAyMzg3LCAxMDI0MDAsIDEwMjQxMSwgMTAyNDIyLCAxMDI0MzQsIDEwMjQ0NywgMTAyNDU4LCAxMDI0NjksIAorICAgIDEwMjQ4MCwgMTAyNDkxLCAxMDI1MDIsIDEwMjUxNCwgMTAyNTIyLCAxMDI1MzAsIDEwMjUzOSwgMTAyNTQ4LCAxMDI1NTcsIAorICAgIDEwMjU2MywgMTAyNTY5LCAxMDI1NzUsIDEwMjU4MiwgMTAyNTkyLCAxMDI1OTksIDEwMjYwOSwgMTAyNjE0LCAxMDI2MTksIAorICAgIDEwMjYyNSwgMTAyNjMxLCAxMDI2MzksIDEwMjY0NywgMTAyNjU2LCAxMDI2NjcsIDEwMjY3OCwgMTAyNjg2LCAxMDI2OTQsIAorICAgIDEwMjcwMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTAyNzEyLCAxMDI3MjMsIDEwMjczMCwgCisgICAgMTAyNzM4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMDI3NDYsIDEwMjc1MCwgMTAyNzU0LCAKKyAgICAxMDI3NTgsIDEwMjc2MiwgMTAyNzY2LCAxMDI3NzAsIDEwMjc3NCwgMTAyNzc4LCAxMDI3ODIsIDEwMjc4NiwgMTAyNzkwLCAKKyAgICAxMDI3OTQsIDEwMjc5OCwgMTAyODAyLCAxMDI4MDYsIDEwMjgxMCwgMTAyODE0LCAxMDI4MTgsIDEwMjgyMiwgMTAyODI2LCAKKyAgICAxMDI4MzAsIDEwMjgzNCwgMTAyODM4LCAxMDI4NDIsIDEwMjg0NiwgMTAyODUwLCAxMDI4NTQsIDEwMjg1OCwgMTAyODYyLCAKKyAgICAxMDI4NjYsIDEwMjg3MCwgMTAyODc0LCAxMDI4NzgsIDEwMjg4MiwgMTAyODg2LCAxMDI4OTAsIDEwMjg5NCwgMTAyODk4LCAKKyAgICAxMDI5MDIsIDEwMjkwNiwgMTAyOTEwLCAxMDI5MTQsIDEwMjkxOCwgMTAyOTIyLCAxMDI5MjYsIDEwMjkzMCwgMTAyOTM0LCAKKyAgICAxMDI5MzgsIDEwMjk0MiwgMTAyOTQ2LCAxMDI5NTAsIDEwMjk1NCwgMTAyOTU4LCAxMDI5NjIsIDEwMjk2NiwgMTAyOTcwLCAKKyAgICAxMDI5NzQsIDEwMjk3OCwgMTAyOTgyLCAxMDI5ODYsIDEwMjk5MCwgMTAyOTk0LCAxMDI5OTgsIDEwMzAwMiwgMTAzMDA2LCAKKyAgICAxMDMwMTAsIDEwMzAxNCwgMTAzMDE4LCAxMDMwMjIsIDEwMzAyNiwgMTAzMDMwLCAxMDMwMzQsIDEwMzAzOCwgMTAzMDQyLCAKKyAgICAxMDMwNDYsIDEwMzA1MCwgMTAzMDU0LCAxMDMwNTgsIDEwMzA2MiwgMTAzMDY2LCAxMDMwNzAsIDEwMzA3NCwgMTAzMDc4LCAKKyAgICAxMDMwODIsIDEwMzA4NiwgMTAzMDkwLCAxMDMwOTQsIDEwMzA5OCwgMTAzMTAyLCAxMDMxMDYsIDEwMzExMCwgMTAzMTE0LCAKKyAgICAxMDMxMTgsIDEwMzEyMiwgMTAzMTI2LCAxMDMxMzAsIDEwMzEzNCwgMTAzMTM4LCAxMDMxNDIsIDEwMzE0NiwgMTAzMTUwLCAKKyAgICAxMDMxNTQsIDEwMzE1OCwgMTAzMTYyLCAxMDMxNjYsIDEwMzE3MCwgMTAzMTc0LCAxMDMxNzgsIDEwMzE4MiwgMTAzMTg2LCAKKyAgICAxMDMxOTAsIDEwMzE5NCwgMTAzMTk4LCAxMDMyMDIsIDEwMzIwNiwgMTAzMjEwLCAxMDMyMTQsIDEwMzIxOCwgMTAzMjIyLCAKKyAgICAxMDMyMjYsIDEwMzIzMCwgMTAzMjM0LCAxMDMyMzgsIDEwMzI0MiwgMTAzMjQ2LCAxMDMyNTAsIDEwMzI1NCwgMTAzMjU4LCAKKyAgICAxMDMyNjIsIDEwMzI2NiwgMTAzMjcwLCAxMDMyNzQsIDEwMzI3OCwgMTAzMjgyLCAxMDMyODYsIDEwMzI5MCwgMTAzMjk0LCAKKyAgICAxMDMyOTgsIDEwMzMwMiwgMTAzMzA2LCAxMDMzMTAsIDEwMzMxNCwgMTAzMzE4LCAxMDMzMjIsIDEwMzMyNiwgMTAzMzMwLCAKKyAgICAxMDMzMzQsIDEwMzMzOCwgMTAzMzQyLCAxMDMzNDYsIDEwMzM1MCwgMTAzMzU0LCAxMDMzNTgsIDEwMzM2MiwgMTAzMzY2LCAKKyAgICAxMDMzNzAsIDEwMzM3NCwgMTAzMzc4LCAxMDMzODIsIDEwMzM4NiwgMTAzMzkwLCAxMDMzOTQsIDEwMzM5OCwgMTAzNDAyLCAKKyAgICAxMDM0MDYsIDEwMzQxMCwgMTAzNDE0LCAxMDM0MTgsIDEwMzQyMiwgMTAzNDI2LCAxMDM0MzAsIDEwMzQzNCwgMTAzNDM4LCAKKyAgICAxMDM0NDIsIDEwMzQ0NiwgMTAzNDUwLCAxMDM0NTQsIDEwMzQ1OCwgMTAzNDYyLCAxMDM0NjYsIDEwMzQ3MCwgMTAzNDc0LCAKKyAgICAxMDM0NzgsIDEwMzQ4MiwgMTAzNDg2LCAxMDM0OTAsIDEwMzQ5NCwgMTAzNDk4LCAxMDM1MDIsIDEwMzUwNiwgMTAzNTEwLCAKKyAgICAxMDM1MTQsIDEwMzUxOCwgMTAzNTIyLCAxMDM1MjYsIDEwMzUzMCwgMTAzNTM0LCAxMDM1MzgsIDEwMzU0MiwgMTAzNTQ2LCAKKyAgICAxMDM1NTAsIDEwMzU1NCwgMTAzNTU4LCAxMDM1NjIsIDEwMzU2NiwgMTAzNTcwLCAxMDM1NzQsIDEwMzU3OCwgMTAzNTgyLCAKKyAgICAxMDM1ODYsIDEwMzU5MCwgMTAzNTk0LCAxMDM1OTgsIDEwMzYwMiwgMTAzNjA2LCAxMDM2MTAsIDEwMzYxNCwgMTAzNjE4LCAKKyAgICAxMDM2MjIsIDEwMzYyNiwgMTAzNjMwLCAxMDM2MzQsIDEwMzYzOCwgMTAzNjQyLCAxMDM2NDYsIDEwMzY1MCwgMTAzNjU0LCAKKyAgICAxMDM2NTgsIDEwMzY2MiwgMTAzNjY2LCAxMDM2NzAsIDEwMzY3NCwgMTAzNjc4LCAxMDM2ODIsIDEwMzY4NiwgMTAzNjkwLCAKKyAgICAxMDM2OTQsIDEwMzY5OCwgMTAzNzAyLCAxMDM3MDYsIDEwMzcxMCwgMTAzNzE0LCAxMDM3MTgsIDEwMzcyMiwgMTAzNzI2LCAKKyAgICAxMDM3MzAsIDEwMzczNCwgMTAzNzM4LCAxMDM3NDIsIDEwMzc0NiwgMTAzNzUwLCAxMDM3NTQsIDEwMzc1OCwgMTAzNzYyLCAKKyAgICAxMDM3NjYsIDEwMzc3MCwgMTAzNzc0LCAxMDM3NzgsIDEwMzc4MiwgMTAzNzg2LCAxMDM3OTAsIDEwMzc5NCwgMTAzNzk4LCAKKyAgICAxMDM4MDIsIDEwMzgwNiwgMTAzODEwLCAxMDM4MTQsIDEwMzgxOCwgMTAzODIyLCAxMDM4MjYsIDEwMzgzMCwgMTAzODM0LCAKKyAgICAxMDM4MzgsIDEwMzg0MiwgMTAzODQ2LCAxMDM4NTAsIDEwMzg1NCwgMTAzODU4LCAxMDM4NjIsIDEwMzg2NiwgMTAzODcwLCAKKyAgICAxMDM4NzQsIDEwMzg3OCwgMTAzODgyLCAxMDM4ODYsIDEwMzg5MCwgMTAzODk0LCAxMDM4OTgsIDEwMzkwMiwgMTAzOTA2LCAKKyAgICAxMDM5MTAsIDEwMzkxNCwgMTAzOTE4LCAxMDM5MjIsIDEwMzkyNiwgMTAzOTMwLCAxMDM5MzQsIDEwMzkzOCwgMTAzOTQyLCAKKyAgICAxMDM5NDYsIDEwMzk1MCwgMTAzOTU0LCAxMDM5NTgsIDEwMzk2MiwgMTAzOTY2LCAxMDM5NzAsIDEwMzk3NCwgMTAzOTc4LCAKKyAgICAxMDM5ODIsIDEwMzk4NiwgMTAzOTkwLCAxMDM5OTQsIDEwMzk5OCwgMTA0MDAyLCAxMDQwMDYsIDEwNDAxMCwgMTA0MDE0LCAKKyAgICAxMDQwMTgsIDEwNDAyMiwgMTA0MDI2LCAxMDQwMzAsIDEwNDAzNCwgMTA0MDM4LCAxMDQwNDIsIDEwNDA0NiwgMTA0MDUwLCAKKyAgICAxMDQwNTQsIDEwNDA1OCwgMTA0MDYyLCAxMDQwNjYsIDEwNDA3MCwgMTA0MDc0LCAxMDQwNzgsIDEwNDA4MiwgMTA0MDg2LCAKKyAgICAxMDQwOTAsIDEwNDA5NCwgMTA0MDk4LCAxMDQxMDIsIDEwNDEwNiwgMTA0MTEwLCAxMDQxMTQsIDEwNDExOCwgMTA0MTIyLCAKKyAgICAxMDQxMjYsIDEwNDEzMCwgMTA0MTM0LCAxMDQxMzgsIDEwNDE0MiwgMTA0MTQ2LCAxMDQxNTAsIDEwNDE1NCwgMTA0MTU4LCAKKyAgICAxMDQxNjIsIDEwNDE2NiwgMTA0MTcwLCAxMDQxNzQsIDEwNDE3OCwgMTA0MTgyLCAxMDQxODYsIDEwNDE5MCwgMTA0MTk0LCAKKyAgICAxMDQxOTgsIDEwNDIwMiwgMTA0MjA2LCAxMDQyMTAsIDEwNDIxNCwgMTA0MjE4LCAxMDQyMjIsIDEwNDIyNiwgMTA0MjMwLCAKKyAgICAxMDQyMzQsIDEwNDIzOCwgMTA0MjQyLCAxMDQyNDYsIDEwNDI1MCwgMTA0MjU0LCAxMDQyNTgsIDEwNDI2MiwgMTA0MjY2LCAKKyAgICAxMDQyNzAsIDEwNDI3NCwgMTA0Mjc4LCAxMDQyODIsIDEwNDI4NiwgMTA0MjkwLCAxMDQyOTQsIDEwNDI5OCwgMTA0MzAyLCAKKyAgICAxMDQzMDYsIDEwNDMxMCwgMTA0MzE0LCAxMDQzMTgsIDEwNDMyMiwgMTA0MzI2LCAxMDQzMzAsIDEwNDMzNCwgMTA0MzM4LCAKKyAgICAxMDQzNDIsIDEwNDM0NiwgMTA0MzUwLCAxMDQzNTQsIDEwNDM1OCwgMTA0MzYyLCAxMDQzNjYsIDEwNDM3MCwgMTA0Mzc0LCAKKyAgICAxMDQzNzgsIDEwNDM4MiwgMTA0Mzg2LCAxMDQzOTAsIDEwNDM5NCwgMTA0Mzk4LCAxMDQ0MDIsIDEwNDQwNiwgMTA0NDEwLCAKKyAgICAxMDQ0MTQsIDEwNDQxOCwgMTA0NDIyLCAxMDQ0MjYsIDEwNDQzMCwgMTA0NDM0LCAxMDQ0MzgsIDEwNDQ0MiwgMTA0NDQ2LCAKKyAgICAxMDQ0NTAsIDEwNDQ1NCwgMTA0NDU4LCAxMDQ0NjIsIDEwNDQ2NiwgMTA0NDcwLCAxMDQ0NzQsIDEwNDQ3OCwgMTA0NDgyLCAKKyAgICAxMDQ0ODYsIDEwNDQ5MCwgMTA0NDk0LCAxMDQ0OTgsIDEwNDUwMiwgMTA0NTA2LCAxMDQ1MTAsIDEwNDUxNCwgMTA0NTE4LCAKKyAgICAxMDQ1MjIsIDEwNDUyNiwgMTA0NTMwLCAxMDQ1MzQsIDEwNDUzOCwgMTA0NTQyLCAxMDQ1NDYsIDEwNDU1MCwgMTA0NTU0LCAKKyAgICAxMDQ1NTgsIDEwNDU2MiwgMTA0NTY2LCAxMDQ1NzAsIDEwNDU3NCwgMTA0NTc4LCAxMDQ1ODIsIDEwNDU4NiwgMTA0NTkwLCAKKyAgICAxMDQ1OTQsIDEwNDU5OCwgMTA0NjAyLCAxMDQ2MDYsIDEwNDYxMCwgMTA0NjE0LCAxMDQ2MTgsIDEwNDYyMiwgMTA0NjI2LCAKKyAgICAxMDQ2MzAsIDEwNDYzNCwgMTA0NjM4LCAxMDQ2NDIsIDEwNDY0NiwgMTA0NjUwLCAxMDQ2NTQsIDEwNDY1OCwgMTA0NjYyLCAKKyAgICAxMDQ2NjYsIDEwNDY3MCwgMTA0Njc0LCAxMDQ2NzgsIDEwNDY4MiwgMTA0Njg2LCAxMDQ2OTAsIDEwNDY5NCwgMTA0Njk4LCAKKyAgICAxMDQ3MDIsIDEwNDcwNiwgMTA0NzEwLCAxMDQ3MTQsIDEwNDcxOCwgMTA0NzIyLCAxMDQ3MjYsIDEwNDczMCwgMTA0NzM0LCAKKyAgICAxMDQ3MzgsIDEwNDc0MiwgMTA0NzQ2LCAxMDQ3NTAsIDEwNDc1NCwgMTA0NzU4LCAxMDQ3NjIsIDEwNDc2NiwgMTA0NzcwLCAKKyAgICAxMDQ3NzQsIDEwNDc3OCwgMTA0NzgyLCAxMDQ3ODYsIDEwNDc5MCwgMTA0Nzk0LCAxMDQ3OTgsIDEwNDgwMiwgMTA0ODA2LCAKKyAgICAxMDQ4MTAsIDEwNDgxNCwgMTA0ODE4LCAxMDQ4MjIsIDEwNDgyNiwgMTA0ODMwLCAxMDQ4MzQsIDEwNDgzOCwgMTA0ODQyLCAKKyAgICAxMDQ4NDYsIDEwNDg1MCwgMTA0ODU0LCAxMDQ4NTgsIDEwNDg2MiwgMTA0ODY2LCAxMDQ4NzAsIDEwNDg3NCwgMTA0ODc4LCAKKyAgICAxMDQ4ODIsIDEwNDg4NiwgMTA0ODkwLCAxMDQ4OTQsIDEwNDg5OCwgMTA0OTAyLCAxMDQ5MDYsIDEwNDkxMCwgMTA0OTE0LCAKKyAgICAxMDQ5MTgsIDEwNDkyMiwgMTA0OTI2LCAxMDQ5MzAsIDEwNDkzNCwgMTA0OTM4LCAxMDQ5NDIsIDEwNDk0NiwgMTA0OTUwLCAKKyAgICAxMDQ5NTQsIDEwNDk1OCwgMTA0OTYyLCAxMDQ5NjYsIDEwNDk3MCwgMTA0OTc0LCAxMDQ5NzgsIDEwNDk4MiwgMTA0OTg2LCAKKyAgICAxMDQ5OTAsIDEwNDk5NCwgMTA0OTk4LCAxMDUwMDIsIDEwNTAwNiwgMTA1MDEwLCAxMDUwMTQsIDEwNTAxOCwgMTA1MDIyLCAKKyAgICAxMDUwMjYsIDEwNTAzMCwgMTA1MDM0LCAxMDUwMzgsIDEwNTA0MiwgMTA1MDQ2LCAxMDUwNTAsIDEwNTA1NCwgMTA1MDU4LCAKKyAgICAxMDUwNjIsIDEwNTA2NiwgMTA1MDcwLCAxMDUwNzQsIDEwNTA3OCwgMTA1MDgyLCAxMDUwODYsIDEwNTA5MCwgMTA1MDk0LCAKKyAgICAxMDUwOTgsIDEwNTEwMiwgMTA1MTA2LCAxMDUxMTAsIDEwNTExNCwgMTA1MTE4LCAxMDUxMjIsIDEwNTEyNiwgMTA1MTMwLCAKKyAgICAxMDUxMzQsIDEwNTEzOCwgMTA1MTQyLCAxMDUxNDYsIDEwNTE1MCwgMTA1MTU0LCAxMDUxNTgsIDEwNTE2MiwgMTA1MTY2LCAKKyAgICAxMDUxNzAsIDEwNTE3NCwgMTA1MTc4LCAxMDUxODIsIDEwNTE4NiwgMTA1MTkwLCAxMDUxOTQsIDEwNTE5OCwgMTA1MjAyLCAKKyAgICAxMDUyMDYsIDEwNTIxMCwgMTA1MjE0LCAxMDUyMTgsIDEwNTIyMiwgMTA1MjI2LCAxMDUyMzAsIDEwNTIzNCwgMTA1MjM4LCAKKyAgICAxMDUyNDIsIDEwNTI0NiwgMTA1MjUwLCAxMDUyNTQsIDEwNTI1OCwgMTA1MjYyLCAxMDUyNjYsIDEwNTI3MCwgMTA1Mjc0LCAKKyAgICAxMDUyNzgsIDEwNTI4MiwgMTA1Mjg2LCAxMDUyOTAsIDEwNTI5NCwgMTA1Mjk4LCAxMDUzMDIsIDEwNTMwNiwgMTA1MzEwLCAKKyAgICAxMDUzMTQsIDEwNTMxOCwgMTA1MzIyLCAxMDUzMjYsIDEwNTMzMCwgMTA1MzM0LCAxMDUzMzgsIDEwNTM0MiwgMTA1MzQ2LCAKKyAgICAxMDUzNTAsIDEwNTM1NCwgMTA1MzU4LCAxMDUzNjIsIDEwNTM2NiwgMTA1MzcwLCAxMDUzNzQsIDEwNTM3OCwgMTA1MzgyLCAKKyAgICAxMDUzODYsIDEwNTM5MCwgMTA1Mzk0LCAxMDUzOTgsIDEwNTQwMiwgMTA1NDA2LCAxMDU0MTAsIDEwNTQxNCwgMTA1NDE4LCAKKyAgICAxMDU0MjIsIDEwNTQyNiwgMTA1NDMwLCAxMDU0MzQsIDEwNTQzOCwgMTA1NDQyLCAxMDU0NDYsIDEwNTQ1MCwgMTA1NDU0LCAKKyAgICAxMDU0NTgsIDEwNTQ2MiwgMTA1NDY2LCAxMDU0NzAsIDEwNTQ3NCwgMTA1NDc4LCAxMDU0ODIsIDEwNTQ4NiwgMTA1NDkwLCAKKyAgICAxMDU0OTQsIDEwNTQ5OCwgMTA1NTAyLCAxMDU1MDYsIDEwNTUxMCwgMTA1NTE0LCAxMDU1MTgsIDEwNTUyMiwgMTA1NTI2LCAKKyAgICAxMDU1MzAsIDEwNTUzNCwgMTA1NTM4LCAxMDU1NDIsIDEwNTU0NiwgMTA1NTUwLCAxMDU1NTQsIDEwNTU1OCwgMTA1NTYyLCAKKyAgICAxMDU1NjYsIDEwNTU3MCwgMTA1NTc0LCAxMDU1NzgsIDEwNTU4MiwgMTA1NTg2LCAxMDU1OTAsIDEwNTU5NCwgMTA1NTk4LCAKKyAgICAxMDU2MDIsIDEwNTYwNiwgMTA1NjEwLCAxMDU2MTQsIDEwNTYxOCwgMTA1NjIyLCAxMDU2MjYsIDEwNTYzMCwgMTA1NjM0LCAKKyAgICAxMDU2MzgsIDEwNTY0MiwgMTA1NjQ2LCAxMDU2NTAsIDEwNTY1NCwgMTA1NjU4LCAxMDU2NjIsIDEwNTY2NiwgMTA1NjcwLCAKKyAgICAxMDU2NzQsIDEwNTY3OCwgMTA1NjgyLCAxMDU2ODYsIDEwNTY5MCwgMTA1Njk0LCAxMDU2OTgsIDEwNTcwMiwgMTA1NzA2LCAKKyAgICAxMDU3MTAsIDEwNTcxNCwgMTA1NzE4LCAxMDU3MjIsIDEwNTcyNiwgMTA1NzMwLCAxMDU3MzQsIDEwNTczOCwgMTA1NzQyLCAKKyAgICAxMDU3NDYsIDEwNTc1MCwgMTA1NzU0LCAxMDU3NTgsIDEwNTc2MiwgMTA1NzY2LCAxMDU3NzAsIDEwNTc3NCwgMTA1Nzc4LCAKKyAgICAxMDU3ODIsIDEwNTc4NiwgMTA1NzkwLCAxMDU3OTQsIDEwNTc5OCwgMTA1ODAyLCAxMDU4MDYsIDEwNTgxMCwgMTA1ODE0LCAKKyAgICAxMDU4MTgsIDEwNTgyMiwgMTA1ODI2LCAxMDU4MzAsIDEwNTgzNCwgMTA1ODM4LCAxMDU4NDIsIDEwNTg0NiwgMTA1ODUwLCAKKyAgICAxMDU4NTQsIDEwNTg1OCwgMTA1ODYyLCAxMDU4NjYsIDEwNTg3MCwgMTA1ODc0LCAxMDU4NzgsIDEwNTg4MiwgMTA1ODg2LCAKKyAgICAxMDU4OTAsIDEwNTg5NCwgMTA1ODk4LCAxMDU5MDIsIDEwNTkwNiwgMTA1OTEwLCAxMDU5MTQsIDEwNTkxOCwgMTA1OTIyLCAKKyAgICAxMDU5MjYsIDEwNTkzMCwgMTA1OTM0LCAxMDU5MzgsIDEwNTk0MiwgMTA1OTQ2LCAxMDU5NTAsIDEwNTk1NCwgMTA1OTU4LCAKKyAgICAxMDU5NjIsIDEwNTk2NiwgMTA1OTcwLCAxMDU5NzQsIDEwNTk3OCwgMTA1OTgyLCAxMDU5ODYsIDEwNTk5MCwgMTA1OTk0LCAKKyAgICAxMDU5OTgsIDEwNjAwMiwgMTA2MDA2LCAxMDYwMTAsIDEwNjAxNCwgMTA2MDE4LCAxMDYwMjIsIDEwNjAyNiwgMTA2MDMwLCAKKyAgICAxMDYwMzQsIDEwNjAzOCwgMTA2MDQyLCAxMDYwNDYsIDEwNjA1MCwgMTA2MDU0LCAxMDYwNTgsIDEwNjA2MiwgMTA2MDY2LCAKKyAgICAxMDYwNzAsIDEwNjA3NCwgMTA2MDc4LCAxMDYwODIsIDEwNjA4NiwgMTA2MDkwLCAxMDYwOTQsIDEwNjA5OCwgMTA2MTAyLCAKKyAgICAxMDYxMDYsIDEwNjExMCwgMTA2MTE0LCAxMDYxMTgsIDEwNjEyMiwgMTA2MTI2LCAxMDYxMzAsIDEwNjEzNCwgMTA2MTM4LCAKKyAgICAxMDYxNDIsIDEwNjE0NiwgMTA2MTUwLCAxMDYxNTQsIDEwNjE1OCwgMTA2MTYyLCAxMDYxNjYsIDEwNjE3MCwgMTA2MTc0LCAKKyAgICAxMDYxNzgsIDEwNjE4MiwgMTA2MTg2LCAxMDYxOTAsIDEwNjE5NCwgMTA2MTk4LCAxMDYyMDIsIDEwNjIwNiwgMTA2MjEwLCAKKyAgICAxMDYyMTQsIDEwNjIxOCwgMTA2MjIyLCAxMDYyMjYsIDEwNjIzMCwgMTA2MjM0LCAxMDYyMzgsIDEwNjI0MiwgMTA2MjQ2LCAKKyAgICAxMDYyNTAsIDEwNjI1NCwgMTA2MjU4LCAxMDYyNjIsIDEwNjI2NiwgMTA2MjcwLCAxMDYyNzQsIDEwNjI3OCwgMTA2MjgyLCAKKyAgICAxMDYyODYsIDEwNjI5MCwgMTA2Mjk0LCAxMDYyOTgsIDEwNjMwMiwgMTA2MzA2LCAxMDYzMTAsIDEwNjMxNCwgMTA2MzE4LCAKKyAgICAxMDYzMjIsIDEwNjMyNiwgMTA2MzMwLCAxMDYzMzQsIDEwNjMzOCwgMTA2MzQyLCAxMDYzNDYsIDEwNjM1MCwgMTA2MzU0LCAKKyAgICAxMDYzNTgsIDEwNjM2MiwgMTA2MzY2LCAxMDYzNzAsIDEwNjM3NCwgMTA2Mzc4LCAxMDYzODIsIDEwNjM4NiwgMTA2MzkwLCAKKyAgICAxMDYzOTQsIDEwNjM5OCwgMTA2NDAyLCAxMDY0MDYsIDEwNjQxMCwgMTA2NDE0LCAxMDY0MTgsIDEwNjQyMiwgMTA2NDI2LCAKKyAgICAxMDY0MzAsIDEwNjQzNCwgMTA2NDM4LCAxMDY0NDIsIDEwNjQ0NiwgMTA2NDUwLCAxMDY0NTQsIDEwNjQ1OCwgMTA2NDYyLCAKKyAgICAxMDY0NjYsIDEwNjQ3MCwgMTA2NDc0LCAxMDY0NzgsIDEwNjQ4MiwgMTA2NDg2LCAxMDY0OTAsIDEwNjQ5NCwgMTA2NDk4LCAKKyAgICAxMDY1MDIsIDEwNjUwNiwgMTA2NTEwLCAxMDY1MTQsIDEwNjUxOCwgMTA2NTIyLCAxMDY1MjYsIDEwNjUzMCwgMTA2NTM0LCAKKyAgICAxMDY1MzgsIDEwNjU0MiwgMTA2NTQ2LCAxMDY1NTAsIDEwNjU1NCwgMTA2NTU4LCAxMDY1NjIsIDEwNjU2NiwgMTA2NTcwLCAKKyAgICAxMDY1NzQsIDEwNjU3OCwgMTA2NTgyLCAxMDY1ODYsIDEwNjU5MCwgMTA2NTk0LCAxMDY1OTgsIDEwNjYwMiwgMTA2NjA2LCAKKyAgICAxMDY2MTAsIDEwNjYxNCwgMTA2NjE4LCAxMDY2MjIsIDEwNjYyNiwgMTA2NjMwLCAxMDY2MzQsIDEwNjYzOCwgMTA2NjQyLCAKKyAgICAxMDY2NDYsIDEwNjY1MCwgMTA2NjU0LCAxMDY2NTgsIDEwNjY2MiwgMTA2NjY2LCAxMDY2NzAsIDEwNjY3NCwgMTA2Njc4LCAKKyAgICAxMDY2ODIsIDEwNjY4NiwgMTA2NjkwLCAxMDY2OTQsIDEwNjY5OCwgMTA2NzAyLCAxMDY3MDYsIDEwNjcxMCwgMTA2NzE0LCAKKyAgICAxMDY3MTgsIDEwNjcyMiwgMTA2NzI2LCAxMDY3MzAsIDEwNjczNCwgMTA2NzM4LCAxMDY3NDIsIDEwNjc0NiwgMTA2NzUwLCAKKyAgICAxMDY3NTQsIDEwNjc1OCwgMTA2NzYyLCAxMDY3NjYsIDEwNjc3MCwgMTA2Nzc0LCAxMDY3NzgsIDEwNjc4MiwgMTA2Nzg2LCAKKyAgICAxMDY3OTAsIDEwNjc5NCwgMTA2Nzk4LCAxMDY4MDIsIDEwNjgwNiwgMTA2ODEwLCAxMDY4MTQsIDEwNjgxOCwgMTA2ODIyLCAKKyAgICAxMDY4MjYsIDEwNjgzMCwgMTA2ODM0LCAxMDY4MzgsIDEwNjg0MiwgMTA2ODQ2LCAxMDY4NTAsIDEwNjg1NCwgMTA2ODU4LCAKKyAgICAxMDY4NjIsIDEwNjg2NiwgMTA2ODcwLCAxMDY4NzQsIDEwNjg3OCwgMTA2ODgyLCAxMDY4ODYsIDEwNjg5MCwgMTA2ODk0LCAKKyAgICAxMDY4OTgsIDEwNjkwMiwgMTA2OTA2LCAxMDY5MTAsIDEwNjkxNCwgMTA2OTE4LCAxMDY5MjIsIDEwNjkyNiwgMTA2OTMwLCAKKyAgICAxMDY5MzQsIDEwNjkzOCwgMTA2OTQyLCAxMDY5NDYsIDEwNjk1MCwgMTA2OTU0LCAxMDY5NTgsIDEwNjk2MiwgMTA2OTY2LCAKKyAgICAxMDY5NzAsIDEwNjk3NCwgMTA2OTc4LCAxMDY5ODIsIDEwNjk4NiwgMTA2OTkwLCAxMDY5OTQsIDEwNjk5OCwgMTA3MDAyLCAKKyAgICAxMDcwMDYsIDEwNzAxMCwgMTA3MDE0LCAxMDcwMTgsIDEwNzAyMiwgMTA3MDI2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAxMDcwMzAsIDEwNzAzNywgMTA3MDQ0LCAxMDcwNTMsIDEwNzA2MiwgMTA3MDY5LCAxMDcwNzQsIDEwNzA4MSwgCisgICAgMTA3MDg4LCAxMDcwOTcsIDEwNzEwOCwgMTA3MTE5LCAxMDcxMjQsIDEwNzEzMSwgMTA3MTM2LCAxMDcxNDEsIDEwNzE0NiwgCisgICAgMTA3MTUxLCAxMDcxNTYsIDEwNzE2MSwgMTA3MTY2LCAxMDcxNzEsIDEwNzE3NiwgMTA3MTgxLCAxMDcxODYsIDEwNzE5MywgCisgICAgMTA3MjAwLCAxMDcyMDUsIDEwNzIxMCwgMTA3MjE1LCAxMDcyMjAsIDEwNzIyNywgMTA3MjM0LCAxMDcyNDIsIDEwNzI0NywgCisgICAgMTA3MjU0LCAxMDcyNTksIDEwNzI2NCwgMTA3MjY5LCAxMDcyNzQsIDEwNzI3OSwgMTA3Mjg2LCAxMDcyOTMsIDEwNzI5OCwgCisgICAgMTA3MzAzLCAxMDczMDgsIDEwNzMxMywgMTA3MzE4LCAxMDczMjMsIDEwNzMyOCwgMTA3MzMzLCAxMDczMzgsIDEwNzM0MywgCisgICAgMTA3MzQ4LCAxMDczNTMsIDEwNzM1OCwgMTA3MzYzLCAxMDczNjgsIDEwNzM3MywgMTA3Mzc4LCAxMDczODMsIDEwNzM4OCwgCisgICAgMTA3Mzk1LCAxMDc0MDAsIDEwNzQwNSwgMTA3NDE0LCAxMDc0MjEsIDEwNzQyNiwgMTA3NDMxLCAxMDc0MzYsIDEwNzQ0MSwgCisgICAgMTA3NDQ2LCAxMDc0NTEsIDEwNzQ1NiwgMTA3NDYxLCAxMDc0NjYsIDEwNzQ3MSwgMTA3NDc2LCAxMDc0ODEsIDEwNzQ4NiwgCisgICAgMTA3NDkxLCAxMDc0OTYsIDEwNzUwMSwgMTA3NTA2LCAxMDc1MTEsIDEwNzUxNiwgMTA3NTIxLCAxMDc1MjYsIDEwNzUzMiwgCisgICAgMTA3NTQwLCAxMDc1NDYsIDEwNzU1NCwgMTA3NTYyLCAxMDc1NzAsIDEwNzU3NiwgMTA3NTgyLCAxMDc1ODgsIDEwNzU5NCwgCisgICAgMTA3NjAwLCAxMDc2MDgsIDEwNzYxOCwgMTA3NjI2LCAxMDc2MzQsIDEwNzY0MCwgMTA3NjQ2LCAxMDc2NTQsIDEwNzY2MiwgCisgICAgMTA3NjY4LCAxMDc2NzYsIDEwNzY4NCwgMTA3NjkyLCAxMDc2OTgsIDEwNzcwNCwgMTA3NzEwLCAxMDc3MTYsIDEwNzcyMiwgCisgICAgMTA3NzI4LCAxMDc3MzYsIDEwNzc0NCwgMTA3NzUwLCAxMDc3NTYsIDEwNzc2MiwgMTA3NzY4LCAxMDc3NzQsIDEwNzc4MiwgCisgICAgMTA3Nzg4LCAxMDc3OTQsIDEwNzgwMCwgMTA3ODA2LCAxMDc4MTIsIDEwNzgxOCwgMTA3ODI2LCAxMDc4MzIsIDEwNzgzOCwgCisgICAgMTA3ODQ0LCAxMDc4NTAsIDEwNzg1OCwgMTA3ODY2LCAxMDc4NzIsIDEwNzg3OCwgMTA3ODg0LCAxMDc4ODksIDEwNzg5NSwgCisgICAgMTA3OTAxLCAxMDc5MDgsIDEwNzkxMywgMTA3OTE4LCAxMDc5MjMsIDEwNzkyOCwgMTA3OTMzLCAxMDc5MzgsIDEwNzk0MywgCisgICAgMTA3OTQ4LCAxMDc5NTMsIDEwNzk2MiwgMTA3OTY5LCAxMDc5NzQsIDEwNzk3OSwgMTA3OTg0LCAxMDc5OTEsIDEwNzk5NiwgCisgICAgMTA4MDAxLCAxMDgwMDYsIDEwODAxMywgMTA4MDE4LCAxMDgwMjMsIDEwODAyOCwgMTA4MDMzLCAxMDgwMzgsIDEwODA0MywgCisgICAgMTA4MDQ4LCAxMDgwNTMsIDEwODA1OCwgMTA4MDYzLCAxMDgwNjgsIDEwODA3NSwgMTA4MDgwLCAxMDgwODcsIDEwODA5MiwgCisgICAgMTA4MDk3LCAxMDgxMDQsIDEwODEwOSwgMTA4MTE0LCAxMDgxMTksIDEwODEyNCwgMTA4MTI5LCAxMDgxMzQsIDEwODEzOSwgCisgICAgMTA4MTQ0LCAxMDgxNDksIDEwODE1NCwgMTA4MTU5LCAxMDgxNjQsIDEwODE2OSwgMTA4MTc0LCAxMDgxNzksIDEwODE4NCwgCisgICAgMTA4MTg5LCAxMDgxOTQsIDEwODE5OSwgMTA4MjA2LCAxMDgyMTEsIDEwODIxNiwgMTA4MjIxLCAxMDgyMjYsIDEwODIzMSwgCisgICAgMTA4MjM2LCAxMDgyNDEsIDEwODI0NiwgMTA4MjUxLCAxMDgyNTYsIDEwODI2MSwgMTA4MjY2LCAxMDgyNzEsIDEwODI3OCwgCisgICAgMTA4MjgzLCAxMDgyODgsIDEwODI5NSwgMTA4MzAwLCAxMDgzMDUsIDEwODMxMCwgMTA4MzE1LCAxMDgzMjAsIDEwODMyNSwgCisgICAgMTA4MzMwLCAxMDgzMzUsIDEwODM0MCwgMTA4MzQ1LCAxMDgzNTIsIDEwODM1NywgMTA4MzYyLCAxMDgzNjcsIDEwODM3MiwgCisgICAgMTA4Mzc3LCAxMDgzODQsIDEwODM5MSwgMTA4Mzk2LCAxMDg0MDEsIDEwODQwNiwgMTA4NDExLCAxMDg0MTYsIDEwODQyMSwgCisgICAgMTA4NDI2LCAxMDg0MzEsIDEwODQzNiwgMTA4NDQxLCAxMDg0NDYsIDEwODQ1MSwgMTA4NDU2LCAxMDg0NjEsIDEwODQ2NiwgCisgICAgMTA4NDcxLCAxMDg0NzYsIDEwODQ4MSwgMTA4NDg2LCAxMDg0OTEsIDEwODQ5NiwgMTA4NTAxLCAxMDg1MDYsIDEwODUxMSwgCisgICAgMTA4NTE2LCAxMDg1MjEsIDEwODUyNiwgMTA4NTMxLCAxMDg1MzYsIDEwODU0MSwgMTA4NTQ2LCAxMDg1NTEsIDEwODU1NiwgCisgICAgMTA4NTYxLCAxMDg1NjYsIDEwODU3MSwgMTA4NTc4LCAxMDg1ODMsIDEwODU4OCwgMTA4NTkzLCAxMDg1OTgsIDEwODYwMywgCisgICAgMTA4NjA4LCAxMDg2MTMsIDEwODYxOCwgMTA4NjIzLCAxMDg2MjgsIDEwODYzMywgMTA4NjM4LCAxMDg2NDMsIDEwODY0OCwgCisgICAgMTA4NjUzLCAxMDg2NTgsIDEwODY2MywgMTA4NjY4LCAxMDg2NzMsIDEwODY3OCwgMTA4NjgzLCAxMDg2ODgsIDEwODY5MywgCisgICAgMTA4Njk4LCAxMDg3MDMsIDEwODcwOCwgMTA4NzEzLCAxMDg3MTgsIDEwODcyMywgMTA4NzI4LCAxMDg3MzMsIDEwODczOCwgCisgICAgMTA4NzQzLCAxMDg3NDgsIDEwODc1MywgMTA4NzU4LCAxMDg3NjMsIDEwODc2OCwgMTA4NzczLCAxMDg3NzgsIDEwODc4MywgCisgICAgMTA4Nzg4LCAxMDg3OTMsIDEwODc5OCwgMTA4ODAzLCAxMDg4MDgsIDEwODgxMywgMTA4ODE4LCAxMDg4MjMsIDEwODgyOCwgCisgICAgMTA4ODMzLCAxMDg4MzgsIDEwODg0MywgMTA4ODQ4LCAxMDg4NTMsIDEwODg1OCwgMTA4ODYzLCAxMDg4NjgsIDEwODg3NSwgCisgICAgMTA4ODgwLCAxMDg4ODUsIDEwODg5MCwgMTA4ODk1LCAxMDg5MDAsIDEwODkwNSwgMTA4OTA5LCAxMDg5MTQsIDEwODkxOSwgCisgICAgMTA4OTI0LCAxMDg5MjksIDEwODkzNCwgMTA4OTM5LCAxMDg5NDQsIDEwODk0OSwgMTA4OTU0LCAxMDg5NTksIDEwODk2NCwgCisgICAgMTA4OTY5LCAxMDg5NzQsIDEwODk3OSwgMTA4OTg2LCAxMDg5OTEsIDEwODk5NiwgMTA5MDAyLCAxMDkwMDcsIDEwOTAxMiwgCisgICAgMTA5MDE3LCAxMDkwMjIsIDEwOTAyNywgMTA5MDMyLCAxMDkwMzcsIDEwOTA0MiwgMTA5MDQ3LCAxMDkwNTIsIDEwOTA1NywgCisgICAgMTA5MDYyLCAxMDkwNjcsIDEwOTA3MiwgMTA5MDc3LCAxMDkwODIsIDEwOTA4NywgMTA5MDkyLCAxMDkwOTcsIDEwOTEwMiwgCisgICAgMTA5MTA3LCAxMDkxMTIsIDEwOTExNywgMTA5MTIyLCAxMDkxMjcsIDEwOTEzMiwgMTA5MTM3LCAxMDkxNDIsIDEwOTE0NywgCisgICAgMTA5MTUyLCAxMDkxNTcsIDEwOTE2MiwgMTA5MTY3LCAxMDkxNzIsIDEwOTE3NywgMTA5MTgyLCAxMDkxODcsIDEwOTE5MiwgCisgICAgMTA5MTk3LCAxMDkyMDIsIDEwOTIwNywgMTA5MjEyLCAxMDkyMTcsIDEwOTIyNCwgMTA5MjI5LCAxMDkyMzQsIDEwOTI0MSwgCisgICAgMTA5MjQ4LCAxMDkyNTMsIDEwOTI1OCwgMTA5MjYzLCAxMDkyNjgsIDEwOTI3MywgMTA5Mjc4LCAxMDkyODMsIDEwOTI4OCwgCisgICAgMTA5MjkzLCAxMDkyOTgsIDEwOTMwMywgMTA5MzA4LCAxMDkzMTMsIDEwOTMxOCwgMTA5MzIzLCAxMDkzMjgsIDEwOTMzMywgCisgICAgMTA5MzM4LCAxMDkzNDMsIDEwOTM0OCwgMTA5MzUzLCAxMDkzNTgsIDEwOTM2MywgMTA5MzY4LCAxMDkzNzMsIDEwOTM4MCwgCisgICAgMTA5Mzg1LCAxMDkzOTAsIDEwOTM5NSwgMTA5NDAwLCAxMDk0MDUsIDEwOTQxMCwgMTA5NDE1LCAxMDk0MjAsIDEwOTQyNSwgCisgICAgMTA5NDMwLCAxMDk0MzUsIDEwOTQ0MCwgMTA5NDQ1LCAxMDk0NTAsIDEwOTQ1NSwgMTA5NDYwLCAxMDk0NjUsIDEwOTQ3MCwgCisgICAgMTA5NDc3LCAxMDk0ODIsIDEwOTQ4NywgMTA5NDkyLCAxMDk0OTcsIDEwOTUwMiwgMTA5NTA3LCAxMDk1MTIsIDEwOTUxOCwgCisgICAgMTA5NTIzLCAxMDk1MjgsIDEwOTUzMywgMTA5NTM4LCAxMDk1NDMsIDEwOTU0OCwgMTA5NTUzLCAxMDk1NTgsIDEwOTU2NSwgCisgICAgMTA5NTcyLCAxMDk1NzcsIDEwOTU4MiwgMTA5NTg2LCAxMDk1OTEsIDEwOTU5NSwgMTA5NTk5LCAxMDk2MDQsIDEwOTYxMSwgCisgICAgMTA5NjE2LCAxMDk2MjEsIDEwOTYzMCwgMTA5NjM1LCAxMDk2NDAsIDEwOTY0NSwgMTA5NjUwLCAxMDk2NTcsIDEwOTY2NCwgCisgICAgMTA5NjY5LCAxMDk2NzQsIDEwOTY3OSwgMTA5Njg0LCAxMDk2OTEsIDEwOTY5NiwgMTA5NzAxLCAxMDk3MDYsIDEwOTcxMSwgCisgICAgMTA5NzE2LCAxMDk3MjEsIDEwOTcyNiwgMTA5NzMxLCAxMDk3MzYsIDEwOTc0MSwgMTA5NzQ2LCAxMDk3NTEsIDEwOTc1OCwgCisgICAgMTA5NzYyLCAxMDk3NjcsIDEwOTc3MiwgMTA5Nzc3LCAxMDk3ODIsIDEwOTc4NiwgMTA5NzkxLCAxMDk3OTYsIDEwOTgwMSwgCisgICAgMTA5ODA2LCAxMDk4MTEsIDEwOTgxNiwgMTA5ODIxLCAxMDk4MjYsIDEwOTgzMSwgMTA5ODM3LCAxMDk4NDMsIDEwOTg0OSwgCisgICAgMTA5ODU1LCAxMDk4NjEsIDEwOTg2NywgMTA5ODczLCAxMDk4NzksIDEwOTg4NSwgMTA5ODkxLCAxMDk4OTcsIDEwOTkwMywgCisgICAgMTA5OTA4LCAxMDk5MTQsIDEwOTkyMCwgMTA5OTI2LCAxMDk5MzIsIDEwOTkzOCwgMTA5OTQ0LCAxMDk5NTAsIDEwOTk1NiwgCisgICAgMTA5OTYyLCAxMDk5NjgsIDEwOTk3NCwgMTA5OTc5LCAxMDk5ODUsIDEwOTk5MSwgMTA5OTk3LCAxMTAwMDMsIDExMDAwOSwgCisgICAgMTEwMDE1LCAxMTAwMjEsIDExMDAyNywgMTEwMDMzLCAxMTAwMzksIDExMDA0NSwgMTEwMDUxLCAxMTAwNTcsIDExMDA2MywgCisgICAgMTEwMDY5LCAxMTAwNzUsIDExMDA4MSwgMTEwMDg3LCAxMTAwOTMsIDExMDA5OSwgMTEwMTA0LCAxMTAxMTAsIDExMDExNiwgCisgICAgMTEwMTIyLCAxMTAxMjgsIDExMDEzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwMTQwLCAxMTAxNDMsIDExMDE0NywgMTEwMTUxLCAxMTAxNTUsIDExMDE1OCwgCisgICAgMTEwMTYyLCAxMTAxNjcsIDExMDE3MSwgMTEwMTc1LCAxMTAxNzksIDExMDE4MywgMTEwMTg3LCAxMTAxOTIsIDExMDE5NywgCisgICAgMTEwMjAxLCAxMTAyMDUsIDExMDIwOCwgMTEwMjEyLCAxMTAyMTcsIDExMDIyMiwgMTEwMjI2LCAxMTAyMzAsIDExMDIzNCwgCisgICAgMTEwMjM4LCAxMTAyNDIsIDExMDI0NiwgMTEwMjUwLCAxMTAyNTQsIDExMDI1OCwgMTEwMjYyLCAxMTAyNjUsIDExMDI2OSwgCisgICAgMTEwMjczLCAxMTAyNzcsIDExMDI4MSwgMTEwMjg1LCAxMTAyODksIDExMDI5NSwgMTEwMjk4LCAxMTAzMDIsIDExMDMwNiwgCisgICAgMTEwMzEwLCAxMTAzMTQsIDExMDMxOCwgMTEwMzIyLCAxMTAzMjYsIDExMDMzMCwgMTEwMzM0LCAxMTAzMzksIDExMDM0NCwgCisgICAgMTEwMzUwLCAxMTAzNTQsIDExMDM1OCwgMTEwMzYyLCAxMTAzNjYsIDExMDM3MCwgMTEwMzc0LCAxMTAzNzksIDExMDM4MiwgCisgICAgMTEwMzg2LCAxMTAzOTAsIDExMDM5NCwgMTEwMzk4LCAxMTA0MDQsIDExMDQwOCwgMTEwNDEyLCAxMTA0MTYsIDExMDQyMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNDI0LCAxMTA0MjgsIDExMDQzMiwgMTEwNDM4LCAxMTA0NDQsIAorICAgIDExMDQ0OCwgMTEwNDUzLCAxMTA0NTgsIDExMDQ2MywgMTEwNDY4LCAxMTA0NzIsIDExMDQ3NywgMTEwNDgyLCAxMTA0ODcsIAorICAgIDExMDQ5MSwgMTEwNDk2LCAxMTA1MDEsIDExMDUwNiwgMTEwNTEwLCAxMTA1MTUsIDExMDUyMCwgMTEwNTI1LCAxMTA1MzAsIAorICAgIDExMDUzNSwgMTEwNTQwLCAxMTA1NDUsIDExMDU1MCwgMTEwNTU0LCAxMTA1NTksIDExMDU2NCwgMTEwNTY5LCAxMTA1NzQsIAorICAgIDExMDU3OSwgMTEwNTg0LCAxMTA1ODksIDExMDU5NCwgMTEwNTk5LCAxMTA2MDQsIDExMDYwOSwgMTEwNjE2LCAxMTA2MjEsIAorICAgIDExMDYyOCwgMTEwNjMzLCAxMTA2MzgsIDExMDY0MywgMTEwNjQ4LCAxMTA2NTMsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExMDY1OCwgMTEwNjYyLCAxMTA2NjgsIDExMDY3MSwgMTEwNjc0LCAxMTA2NzgsIAorICAgIDExMDY4MiwgMTEwNjg2LCAxMTA2OTAsIDExMDY5NCwgMTEwNjk4LCAxMTA3MDIsIDExMDcwOCwgMTEwNzE0LCAxMTA3MjAsIAorICAgIDExMDcyNiwgMTEwNzMyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAxMTA3MzgsIDExMDc0MywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEwNzQ5LCAxMTA3NTQsIDExMDc1OSwgCisgICAgMTEwNzY0LCAxMTA3NzEsIDExMDc3OCwgMTEwNzg1LCAxMTA3OTIsIDExMDc5NywgMTEwODAyLCAxMTA4MDcsIDExMDgxMiwgCisgICAgMTEwODE5LCAxMTA4MjQsIDExMDgzMSwgMTEwODM4LCAxMTA4NDMsIDExMDg0OCwgMTEwODUzLCAxMTA4NjAsIDExMDg2NSwgCisgICAgMTEwODcwLCAxMTA4NzcsIDExMDg4NCwgMTEwODg5LCAxMTA4OTQsIDExMDg5OSwgMTEwOTA2LCAxMTA5MTMsIDExMDkyMCwgCisgICAgMTEwOTI1LCAxMTA5MzAsIDExMDkzNywgMTEwOTQ0LCAxMTA5NTEsIDExMDk1OCwgMTEwOTYzLCAxMTA5NjgsIDExMDk3MywgCisgICAgMTEwOTgwLCAxMTA5ODUsIDExMDk5MCwgMTEwOTk1LCAxMTEwMDIsIDExMTAxMSwgMTExMDE4LCAxMTEwMjMsIDExMTAyOCwgCisgICAgMTExMDMzLCAxMTEwMzgsIDExMTA0MywgMTExMDQ4LCAxMTEwNTcsIDExMTA2NCwgMTExMDY5LCAxMTEwNzYsIDExMTA4MywgCisgICAgMTExMDg4LCAxMTEwOTMsIDExMTA5OCwgMTExMTA1LCAxMTExMTAsIDExMTExNywgMTExMTI0LCAxMTExMjksIDExMTEzNCwgCisgICAgMTExMTM5LCAxMTExNDYsIDExMTE1MywgMTExMTU4LCAxMTExNjMsIDExMTE3MCwgMTExMTc3LCAxMTExODQsIDExMTE4OSwgCisgICAgMTExMTk0LCAxMTExOTksIDExMTIwNCwgMTExMjExLCAxMTEyMjAsIDExMTIyOSwgMTExMjM0LCAxMTEyNDEsIDExMTI1MCwgCisgICAgMTExMjU1LCAxMTEyNjAsIDExMTI2NSwgMTExMjcwLCAxMTEyNzcsIDExMTI4NCwgMTExMjkxLCAxMTEyOTgsIDExMTMwMywgCisgICAgMTExMzA4LCAxMTEzMTMsIDExMTMyMCwgMTExMzI3LCAxMTEzMzQsIDExMTMzOSwgMTExMzQ0LCAxMTEzNTEsIDExMTM1NiwgCisgICAgMTExMzYzLCAxMTEzNjgsIDExMTM3NSwgMTExMzgwLCAxMTEzODcsIDExMTM5NCwgMTExMzk5LCAxMTE0MDQsIDExMTQwOSwgCisgICAgMTExNDE0LCAxMTE0MTksIDExMTQyNCwgMTExNDI5LCAxMTE0MzQsIDExMTQzOSwgMTExNDQ2LCAxMTE0NTMsIDExMTQ2MCwgCisgICAgMTExNDY3LCAxMTE0NzQsIDExMTQ4MywgMTExNDg4LCAxMTE0OTMsIDExMTUwMCwgMTExNTA3LCAxMTE1MTIsIDExMTUxOSwgCisgICAgMTExNTI2LCAxMTE1MzMsIDExMTU0MCwgMTExNTQ3LCAxMTE1NTQsIDExMTU1OSwgMTExNTY0LCAxMTE1NjksIDExMTU3NCwgCisgICAgMTExNTc5LCAxMTE1ODgsIDExMTU5NywgMTExNjA2LCAxMTE2MTUsIDExMTYyNCwgMTExNjMzLCAxMTE2NDIsIDExMTY1MSwgCisgICAgMTExNjU2LCAxMTE2NjcsIDExMTY3OCwgMTExNjg3LCAxMTE2OTIsIDExMTY5NywgMTExNzAyLCAxMTE3MDcsIDExMTcxNiwgCisgICAgMTExNzIzLCAxMTE3MzAsIDExMTczNywgMTExNzQ0LCAxMTE3NTEsIDExMTc1OCwgMTExNzY3LCAxMTE3NzYsIDExMTc4NywgCisgICAgMTExNzk2LCAxMTE4MDcsIDExMTgxNiwgMTExODIzLCAxMTE4MzIsIDExMTg0MywgMTExODUyLCAxMTE4NjEsIDExMTg3MCwgCisgICAgMTExODc5LCAxMTE4ODYsIDExMTg5MywgMTExOTAwLCAxMTE5MDksIDExMTkxOCwgMTExOTI5LCAxMTE5MzgsIDExMTk0NywgCisgICAgMTExOTU4LCAxMTE5NjMsIDExMTk2OCwgMTExOTc5LCAxMTE5ODcsIDExMTk5NiwgMTEyMDA1LCAxMTIwMTQsIDExMjAyNSwgCisgICAgMTEyMDM0LCAxMTIwNDMsIDExMjA1NCwgMTEyMDY1LCAxMTIwNzYsIDExMjA4NywgMTEyMDk4LCAxMTIxMDksIDExMjExNiwgCisgICAgMTEyMTIzLCAxMTIxMzAsIDExMjEzNywgMTEyMTQ4LCAxMTIxNTcsIDExMjE2NCwgMTEyMTcxLCAxMTIxNzgsIDExMjE4OSwgCisgICAgMTEyMjAwLCAxMTIyMTEsIDExMjIyMiwgMTEyMjMzLCAxMTIyNDQsIDExMjI1NSwgMTEyMjY2LCAxMTIyNzMsIDExMjI4MCwgCisgICAgMTEyMjg5LCAxMTIyOTgsIDExMjMwNSwgMTEyMzEyLCAxMTIzMTksIDExMjMyOCwgMTEyMzM3LCAxMTIzNDYsIDExMjM1MywgCisgICAgMTEyMzYyLCAxMTIzNzEsIDExMjM4MCwgMTEyMzg3LCAxMTIzOTQsIDExMjM5OSwgMTEyNDA1LCAxMTI0MTIsIDExMjQxOSwgCisgICAgMTEyNDI2LCAxMTI0MzMsIDExMjQ0MCwgMTEyNDQ3LCAxMTI0NTYsIDExMjQ2NSwgMTEyNDc0LCAxMTI0ODMsIDExMjQ5MCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTEyNDk5LCAxMTI1MDUsIDExMjUxMCwgMTEyNTE1LCAxMTI1MjIsIAorICAgIDExMjUyOCwgMTEyNTM0LCAxMTI1NDAsIDExMjU0NiwgMTEyNTUyLCAxMTI1NTgsIDExMjU2NCwgMTEyNTY4LCAxMTI1NzIsIAorICAgIDExMjU3OCwgMTEyNTg0LCAxMTI1OTAsIDExMjU5NCwgMTEyNTk5LCAxMTI2MDQsIDExMjYwOCwgMTEyNjEyLCAxMTI2MTUsIAorICAgIDExMjYyMSwgMTEyNjI3LCAxMTI2MzMsIDExMjYzOSwgMTEyNjQ1LCAxMTI2NTEsIDExMjY1NywgMTEyNjYzLCAxMTI2NjksIAorICAgIDExMjY3OSwgMTEyNjg5LCAxMTI2OTUsIDExMjcwMSwgMTEyNzExLCAxMTI3MjEsIDExMjcyNywgMCwgMCwgMTEyNzMzLCAKKyAgICAxMTI3NDEsIDExMjc0NiwgMTEyNzUxLCAxMTI3NTcsIDExMjc2MywgMTEyNzY5LCAxMTI3NzUsIDExMjc4MSwgMTEyNzg3LCAKKyAgICAxMTI3OTQsIDExMjgwMSwgMTEyODA3LCAxMTI4MTMsIDExMjgxOSwgMTEyODI1LCAxMTI4MzEsIDExMjgzNywgMTEyODQzLCAKKyAgICAxMTI4NDksIDExMjg1NCwgMTEyODYwLCAxMTI4NjYsIDExMjg3MiwgMTEyODc4LCAxMTI4ODQsIDExMjg5MywgMTEyODk5LCAKKyAgICAxMTI5MDQsIDExMjkxMiwgMTEyOTE5LCAxMTI5MjYsIDExMjkzNSwgMTEyOTQ0LCAxMTI5NTMsIDExMjk2MiwgMTEyOTcxLCAKKyAgICAxMTI5ODAsIDExMjk4OSwgMTEyOTk4LCAxMTMwMDgsIDExMzAxOCwgMTEzMDI2LCAxMTMwMzQsIDExMzA0MywgMTEzMDUyLCAKKyAgICAxMTMwNTgsIDExMzA2NCwgMTEzMDcwLCAxMTMwNzYsIDExMzA4NCwgMTEzMDkyLCAxMTMwOTYsIDExMzEwMiwgMTEzMTA3LCAKKyAgICAxMTMxMTMsIDExMzExOSwgMTEzMTI1LCAxMTMxMzEsIDExMzEzNywgMTEzMTQ2LCAxMTMxNTEsIDExMzE1OCwgMTEzMTYzLCAKKyAgICAxMTMxNjgsIDExMzE3MywgMTEzMTc5LCAxMTMxODUsIDExMzE5MSwgMTEzMTk4LCAxMTMyMDMsIDExMzIwOCwgMTEzMjEzLCAKKyAgICAxMTMyMTgsIDExMzIyMywgMTEzMjI5LCAxMTMyMzUsIDExMzI0MSwgMTEzMjQ3LCAxMTMyNTMsIDExMzI1OSwgMTEzMjY1LCAKKyAgICAxMTMyNzEsIDExMzI3NiwgMTEzMjgxLCAxMTMyODYsIDExMzI5MSwgMTEzMjk2LCAxMTMzMDEsIDExMzMwNiwgMTEzMzExLCAKKyAgICAxMTMzMTcsIDExMzMyMywgMTEzMzI4LCAxMTMzMzMsIDExMzMzOCwgMTEzMzQzLCAxMTMzNDgsIDExMzM1NCwgMTEzMzYxLCAKKyAgICAxMTMzNjUsIDExMzM2OSwgMTEzMzczLCAxMTMzNzcsIDExMzM4MSwgMTEzMzg1LCAxMTMzODksIDExMzM5MywgMTEzNDAxLCAKKyAgICAxMTM0MTEsIDExMzQxNSwgMTEzNDE5LCAxMTM0MjUsIDExMzQzMSwgMTEzNDM3LCAxMTM0NDMsIDExMzQ0OSwgMTEzNDU1LCAKKyAgICAxMTM0NjEsIDExMzQ2NywgMTEzNDczLCAxMTM0NzksIDExMzQ4NSwgMTEzNDkxLCAxMTM0OTcsIDExMzUwMywgMTEzNTA3LCAKKyAgICAxMTM1MTEsIDExMzUxOCwgMTEzNTI0LCAxMTM1MzAsIDExMzUzNiwgMTEzNTQxLCAxMTM1NDgsIDExMzU1MywgMTEzNTU5LCAKKyAgICAxMTM1NjUsIDExMzU3MSwgMTEzNTc3LCAxMTM1ODIsIDExMzU4NiwgMTEzNTkyLCAxMTM1OTYsIDExMzYwMCwgMTEzNjA0LCAKKyAgICAxMTM2MTAsIDExMzYxNiwgMTEzNjIwLCAxMTM2MjYsIDExMzYzMiwgMTEzNjM4LCAxMTM2NDQsIDExMzY1MCwgMTEzNjU4LCAKKyAgICAxMTM2NjYsIDExMzY3MiwgMTEzNjc4LCAxMTM2ODQsIDExMzY5MCwgMTEzNzAyLCAxMTM3MTQsIDExMzcyOCwgMTEzNzQwLCAKKyAgICAxMTM3NTIsIDExMzc2NiwgMTEzNzgwLCAxMTM3OTQsIDExMzc5OCwgMTEzODA2LCAxMTM4MTQsIDExMzgxOSwgMTEzODIzLCAKKyAgICAxMTM4MjcsIDExMzgzMSwgMTEzODM1LCAxMTM4MzksIDExMzg0MywgMTEzODQ3LCAxMTM4NTMsIDExMzg1OSwgMTEzODY1LCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMTM4NzEsIDExMzg3NywgMTEzODgzLCAxMTM4ODksIDExMzg5NSwgCisgICAgMTEzOTAxLCAxMTM5MDcsIDExMzkxMywgMTEzOTE5LCAxMTM5MjUsIDExMzkzMSwgMTEzOTM3LCAxMTM5NDMsIDExMzk0OSwgCisgICAgMTEzOTU1LCAxMTM5NjEsIDExMzk2NywgMTEzOTczLCAxMTM5NzksIDExMzk4NSwgMTEzOTkxLCAxMTM5OTcsIDExNDAwMywgCisgICAgMTE0MDA5LCAxMTQwMTUsIDExNDAyMSwgMTE0MDI3LCAxMTQwMzMsIDExNDAzOSwgMTE0MDQ1LCAxMTQwNTEsIDExNDA1NywgCisgICAgMTE0MDYzLCAxMTQwNjksIDExNDA3NSwgMTE0MDgxLCAxMTQwODcsIDExNDA5MywgMTE0MDk5LCAxMTQxMDUsIDExNDExMSwgCisgICAgMTE0MTE3LCAxMTQxMjMsIDExNDEyOSwgMTE0MTM1LCAxMTQxNDEsIDExNDE0NywgMTE0MTUzLCAxMTQxNTksIDExNDE2NSwgCisgICAgMTE0MTcxLCAxMTQxNzcsIDExNDE4MywgMTE0MTg5LCAxMTQxOTUsIDExNDIwMSwgMTE0MjA3LCAxMTQyMTMsIDExNDIxOSwgCisgICAgMTE0MjI1LCAxMTQyMzEsIDExNDIzNywgMTE0MjQzLCAxMTQyNDksIDExNDI1NSwgMTE0MjYxLCAxMTQyNjcsIDExNDI3MiwgCisgICAgMTE0Mjc3LCAxMTQyODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDI4NiwgMTE0MjkxLCAxMTQyOTgsIAorICAgIDExNDMwNSwgMTE0MzEyLCAxMTQzMTksIDExNDMyNCwgMTE0MzI4LCAxMTQzMzQsIDExNDMzOCwgMTE0MzQyLCAxMTQzNDgsIAorICAgIDExNDM1MiwgMTE0MzU2LCAxMTQzNjAsIDExNDM2NiwgMTE0MzczLCAxMTQzNzcsIDExNDM4MSwgMTE0Mzg1LCAxMTQzODksIAorICAgIDExNDM5MywgMTE0Mzk3LCAxMTQ0MDMsIDExNDQwNywgMTE0NDExLCAxMTQ0MTUsIDExNDQxOSwgMTE0NDIzLCAxMTQ0MjcsIAorICAgIDExNDQzMSwgMTE0NDM1LCAxMTQ0MzksIDExNDQ0MywgMTE0NDQ3LCAxMTQ0NTEsIDExNDQ1NiwgMTE0NDYwLCAxMTQ0NjQsIAorICAgIDExNDQ2OCwgMTE0NDcyLCAxMTQ0NzYsIDExNDQ4MCwgMTE0NDg0LCAxMTQ0ODgsIDExNDQ5MiwgMTE0NDk5LCAxMTQ1MDMsIAorICAgIDExNDUxMSwgMTE0NTE1LCAxMTQ1MTksIDExNDUyMywgMTE0NTI3LCAxMTQ1MzEsIDExNDUzNSwgMTE0NTM5LCAxMTQ1NDYsIAorICAgIDExNDU1MCwgMTE0NTU0LCAxMTQ1NTgsIDExNDU2MiwgMTE0NTY2LCAxMTQ1NzIsIDExNDU3NiwgMTE0NTgyLCAxMTQ1ODYsIAorICAgIDExNDU5MCwgMTE0NTk0LCAxMTQ1OTgsIDExNDYwMiwgMTE0NjA2LCAxMTQ2MTAsIDExNDYxNCwgMTE0NjE4LCAxMTQ2MjIsIAorICAgIDExNDYyNiwgMTE0NjMwLCAxMTQ2MzQsIDExNDYzOCwgMTE0NjQyLCAxMTQ2NDYsIDExNDY1MCwgMTE0NjU0LCAxMTQ2NTgsIAorICAgIDExNDY2NiwgMTE0NjcwLCAxMTQ2NzQsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDY3OCwgMTE0Njg2LCAKKyAgICAxMTQ2OTQsIDExNDcwMiwgMTE0NzEwLCAxMTQ3MTgsIDExNDcyNiwgMTE0NzM0LCAxMTQ3NDIsIDExNDc1MCwgMTE0NzU4LCAKKyAgICAxMTQ3NjYsIDExNDc3NCwgMTE0NzgyLCAxMTQ3OTAsIDExNDc5OCwgMTE0ODA2LCAxMTQ4MTQsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDExNDgyMiwgMTE0ODI2LCAxMTQ4MzEsIDExNDgzNiwgMTE0ODQxLCAxMTQ4NDUsIAorICAgIDExNDg1MCwgMTE0ODU1LCAxMTQ4NjAsIDExNDg2NCwgMTE0ODY5LCAxMTQ4NzQsIDExNDg3OCwgMTE0ODgyLCAxMTQ4ODcsIAorICAgIDExNDg5MSwgMTE0ODk2LCAxMTQ5MDEsIDExNDkwNSwgMTE0OTEwLCAxMTQ5MTUsIDExNDkxOSwgMTE0OTI0LCAxMTQ5MjksIAorICAgIDExNDkzNCwgMTE0OTM5LCAxMTQ5NDQsIDExNDk0OCwgMTE0OTUzLCAxMTQ5NTgsIDExNDk2MywgMTE0OTY3LCAxMTQ5NzIsIAorICAgIDExNDk3NywgMTE0OTgyLCAxMTQ5ODYsIDExNDk5MSwgMTE0OTk2LCAxMTUwMDAsIDExNTAwNCwgMTE1MDA5LCAxMTUwMTMsIAorICAgIDExNTAxOCwgMTE1MDIzLCAxMTUwMjcsIDExNTAzMiwgMTE1MDM3LCAxMTUwNDEsIDExNTA0NiwgMTE1MDUxLCAxMTUwNTYsIAorICAgIDExNTA2MSwgMTE1MDY2LCAxMTUwNzAsIDExNTA3NSwgMTE1MDgwLCAxMTUwODUsIDExNTA4OSwgMTE1MDk0LCAxMTUwOTksIAorICAgIDExNTEwNCwgMTE1MTA4LCAxMTUxMTMsIDExNTExOCwgMTE1MTIyLCAxMTUxMjYsIDExNTEzMSwgMTE1MTM1LCAxMTUxNDAsIAorICAgIDExNTE0NSwgMTE1MTQ5LCAxMTUxNTQsIDExNTE1OSwgMTE1MTYzLCAxMTUxNjgsIDExNTE3MywgMTE1MTc4LCAxMTUxODMsIAorICAgIDExNTE4OCwgMTE1MTkyLCAxMTUxOTcsIDExNTIwMiwgMTE1MjA3LCAxMTUyMTEsIDExNTIxNiwgMCwgMTE1MjIxLCAKKyAgICAxMTUyMjUsIDExNTIzMCwgMTE1MjM1LCAxMTUyMzksIDExNTI0MywgMTE1MjQ4LCAxMTUyNTIsIDExNTI1NywgMTE1MjYyLCAKKyAgICAxMTUyNjYsIDExNTI3MSwgMTE1Mjc2LCAxMTUyODAsIDExNTI4NSwgMTE1MjkwLCAxMTUyOTUsIDExNTMwMCwgMTE1MzA1LCAKKyAgICAxMTUzMTAsIDExNTMxNiwgMTE1MzIyLCAxMTUzMjgsIDExNTMzMywgMTE1MzM5LCAxMTUzNDUsIDExNTM1MSwgMTE1MzU2LCAKKyAgICAxMTUzNjIsIDExNTM2OCwgMTE1MzczLCAxMTUzNzgsIDExNTM4NCwgMTE1Mzg5LCAxMTUzOTUsIDExNTQwMSwgMTE1NDA2LCAKKyAgICAxMTU0MTIsIDExNTQxOCwgMTE1NDIzLCAxMTU0MjksIDExNTQzNSwgMTE1NDQxLCAxMTU0NDcsIDExNTQ1MywgMTE1NDU4LCAKKyAgICAxMTU0NjQsIDExNTQ3MCwgMTE1NDc2LCAxMTU0ODEsIDExNTQ4NywgMTE1NDkzLCAxMTU0OTksIDExNTUwNCwgMTE1NTEwLCAKKyAgICAxMTU1MTYsIDExNTUyMSwgMTE1NTI2LCAxMTU1MzIsIDExNTUzNywgMTE1NTQzLCAxMTU1NDksIDExNTU1NCwgMTE1NTYwLCAKKyAgICAxMTU1NjYsIDExNTU3MSwgMTE1NTc3LCAxMTU1ODMsIDExNTU4OSwgMTE1NTk1LCAxMTU2MDEsIDAsIDExNTYwNSwgCisgICAgMTE1NjEwLCAwLCAwLCAxMTU2MTUsIDAsIDAsIDExNTYyMCwgMTE1NjI1LCAwLCAwLCAxMTU2MzAsIDExNTYzNSwgMTE1NjM5LCAKKyAgICAxMTU2NDQsIDAsIDExNTY0OSwgMTE1NjU0LCAxMTU2NTksIDExNTY2MywgMTE1NjY4LCAxMTU2NzMsIDExNTY3OCwgCisgICAgMTE1NjgzLCAxMTU2ODgsIDExNTY5MiwgMTE1Njk3LCAxMTU3MDIsIDAsIDExNTcwNywgMCwgMTE1NzEyLCAxMTU3MTcsIAorICAgIDExNTcyMSwgMTE1NzI2LCAxMTU3MzEsIDExNTczNSwgMTE1NzM5LCAwLCAxMTU3NDQsIDExNTc0OSwgMTE1NzU0LCAKKyAgICAxMTU3NTgsIDExNTc2MywgMTE1NzY4LCAxMTU3NzIsIDExNTc3NywgMTE1NzgyLCAxMTU3ODcsIDExNTc5MiwgMTE1Nzk3LCAKKyAgICAxMTU4MDIsIDExNTgwOCwgMTE1ODE0LCAxMTU4MjAsIDExNTgyNSwgMTE1ODMxLCAxMTU4MzcsIDExNTg0MywgMTE1ODQ4LCAKKyAgICAxMTU4NTQsIDExNTg2MCwgMTE1ODY1LCAxMTU4NzAsIDExNTg3NiwgMTE1ODgxLCAxMTU4ODcsIDExNTg5MywgMTE1ODk4LCAKKyAgICAxMTU5MDQsIDExNTkxMCwgMTE1OTE1LCAxMTU5MjEsIDExNTkyNywgMTE1OTMzLCAxMTU5MzksIDExNTk0NSwgMTE1OTUwLCAKKyAgICAxMTU5NTYsIDExNTk2MiwgMTE1OTY4LCAxMTU5NzMsIDExNTk3OSwgMTE1OTg1LCAxMTU5OTEsIDExNTk5NiwgMTE2MDAyLCAKKyAgICAxMTYwMDgsIDExNjAxMywgMTE2MDE4LCAxMTYwMjQsIDExNjAyOSwgMTE2MDM1LCAxMTYwNDEsIDExNjA0NiwgMTE2MDUyLCAKKyAgICAxMTYwNTgsIDExNjA2MywgMTE2MDY5LCAxMTYwNzUsIDExNjA4MSwgMTE2MDg3LCAxMTYwOTMsIDExNjA5NywgMCwgCisgICAgMTE2MTAyLCAxMTYxMDcsIDExNjExMSwgMTE2MTE2LCAwLCAwLCAxMTYxMjEsIDExNjEyNiwgMTE2MTMxLCAxMTYxMzUsIAorICAgIDExNjEzOSwgMTE2MTQ0LCAxMTYxNDgsIDExNjE1MywgMCwgMTE2MTU4LCAxMTYxNjMsIDExNjE2OCwgMTE2MTcyLCAKKyAgICAxMTYxNzcsIDExNjE4MiwgMTE2MTg3LCAwLCAxMTYxOTIsIDExNjE5NiwgMTE2MjAxLCAxMTYyMDYsIDExNjIxMSwgCisgICAgMTE2MjE1LCAxMTYyMjAsIDExNjIyNSwgMTE2MjMwLCAxMTYyMzQsIDExNjIzOSwgMTE2MjQ0LCAxMTYyNDgsIDExNjI1MiwgCisgICAgMTE2MjU3LCAxMTYyNjEsIDExNjI2NiwgMTE2MjcxLCAxMTYyNzUsIDExNjI4MCwgMTE2Mjg1LCAxMTYyODksIDExNjI5NCwgCisgICAgMTE2Mjk5LCAxMTYzMDQsIDExNjMwOSwgMTE2MzE0LCAxMTYzMTgsIDAsIDExNjMyMywgMTE2MzI4LCAxMTYzMzIsIAorICAgIDExNjMzNywgMCwgMTE2MzQyLCAxMTYzNDYsIDExNjM1MSwgMTE2MzU2LCAxMTYzNjAsIDAsIDExNjM2NCwgMCwgMCwgMCwgCisgICAgMTE2MzY4LCAxMTYzNzMsIDExNjM3OCwgMTE2MzgyLCAxMTYzODcsIDExNjM5MiwgMTE2Mzk3LCAwLCAxMTY0MDIsIAorICAgIDExNjQwNiwgMTE2NDExLCAxMTY0MTYsIDExNjQyMSwgMTE2NDI1LCAxMTY0MzAsIDExNjQzNSwgMTE2NDQwLCAxMTY0NDQsIAorICAgIDExNjQ0OSwgMTE2NDU0LCAxMTY0NTgsIDExNjQ2MiwgMTE2NDY3LCAxMTY0NzEsIDExNjQ3NiwgMTE2NDgxLCAxMTY0ODUsIAorICAgIDExNjQ5MCwgMTE2NDk1LCAxMTY0OTksIDExNjUwNCwgMTE2NTA5LCAxMTY1MTQsIDExNjUxOSwgMTE2NTI0LCAxMTY1MjksIAorICAgIDExNjUzNSwgMTE2NTQxLCAxMTY1NDcsIDExNjU1MiwgMTE2NTU4LCAxMTY1NjQsIDExNjU3MCwgMTE2NTc1LCAxMTY1ODEsIAorICAgIDExNjU4NywgMTE2NTkyLCAxMTY1OTcsIDExNjYwMywgMTE2NjA4LCAxMTY2MTQsIDExNjYyMCwgMTE2NjI1LCAxMTY2MzEsIAorICAgIDExNjYzNywgMTE2NjQyLCAxMTY2NDgsIDExNjY1NCwgMTE2NjYwLCAxMTY2NjYsIDExNjY3MiwgMTE2Njc3LCAxMTY2ODMsIAorICAgIDExNjY4OSwgMTE2Njk1LCAxMTY3MDAsIDExNjcwNiwgMTE2NzEyLCAxMTY3MTgsIDExNjcyMywgMTE2NzI5LCAxMTY3MzUsIAorICAgIDExNjc0MCwgMTE2NzQ1LCAxMTY3NTEsIDExNjc1NiwgMTE2NzYyLCAxMTY3NjgsIDExNjc3MywgMTE2Nzc5LCAxMTY3ODUsIAorICAgIDExNjc5MCwgMTE2Nzk2LCAxMTY4MDIsIDExNjgwOCwgMTE2ODE0LCAxMTY4MjAsIDExNjgyNCwgMTE2ODI5LCAxMTY4MzQsIAorICAgIDExNjgzOSwgMTE2ODQzLCAxMTY4NDgsIDExNjg1MywgMTE2ODU4LCAxMTY4NjIsIDExNjg2NywgMTE2ODcyLCAxMTY4NzYsIAorICAgIDExNjg4MCwgMTE2ODg1LCAxMTY4ODksIDExNjg5NCwgMTE2ODk5LCAxMTY5MDMsIDExNjkwOCwgMTE2OTEzLCAxMTY5MTcsIAorICAgIDExNjkyMiwgMTE2OTI3LCAxMTY5MzIsIDExNjkzNywgMTE2OTQyLCAxMTY5NDYsIDExNjk1MSwgMTE2OTU2LCAxMTY5NjEsIAorICAgIDExNjk2NSwgMTE2OTcwLCAxMTY5NzUsIDExNjk4MCwgMTE2OTg0LCAxMTY5ODksIDExNjk5NCwgMTE2OTk4LCAxMTcwMDIsIAorICAgIDExNzAwNywgMTE3MDExLCAxMTcwMTYsIDExNzAyMSwgMTE3MDI1LCAxMTcwMzAsIDExNzAzNSwgMTE3MDM5LCAxMTcwNDQsIAorICAgIDExNzA0OSwgMTE3MDU0LCAxMTcwNTksIDExNzA2NCwgMTE3MDY5LCAxMTcwNzUsIDExNzA4MSwgMTE3MDg3LCAxMTcwOTIsIAorICAgIDExNzA5OCwgMTE3MTA0LCAxMTcxMTAsIDExNzExNSwgMTE3MTIxLCAxMTcxMjcsIDExNzEzMiwgMTE3MTM3LCAxMTcxNDMsIAorICAgIDExNzE0OCwgMTE3MTU0LCAxMTcxNjAsIDExNzE2NSwgMTE3MTcxLCAxMTcxNzcsIDExNzE4MiwgMTE3MTg4LCAxMTcxOTQsIAorICAgIDExNzIwMCwgMTE3MjA2LCAxMTcyMTIsIDExNzIxNywgMTE3MjIzLCAxMTcyMjksIDExNzIzNSwgMTE3MjQwLCAxMTcyNDYsIAorICAgIDExNzI1MiwgMTE3MjU4LCAxMTcyNjMsIDExNzI2OSwgMTE3Mjc1LCAxMTcyODAsIDExNzI4NSwgMTE3MjkxLCAxMTcyOTYsIAorICAgIDExNzMwMiwgMTE3MzA4LCAxMTczMTMsIDExNzMxOSwgMTE3MzI1LCAxMTczMzAsIDExNzMzNiwgMTE3MzQyLCAxMTczNDgsIAorICAgIDExNzM1NCwgMTE3MzYwLCAxMTczNjUsIDExNzM3MSwgMTE3Mzc3LCAxMTczODMsIDExNzM4OCwgMTE3Mzk0LCAxMTc0MDAsIAorICAgIDExNzQwNiwgMTE3NDExLCAxMTc0MTcsIDExNzQyMywgMTE3NDI4LCAxMTc0MzMsIDExNzQzOSwgMTE3NDQ0LCAxMTc0NTAsIAorICAgIDExNzQ1NiwgMTE3NDYxLCAxMTc0NjcsIDExNzQ3MywgMTE3NDc4LCAxMTc0ODQsIDExNzQ5MCwgMTE3NDk2LCAxMTc1MDIsIAorICAgIDExNzUwOCwgMTE3NTEzLCAxMTc1MTksIDExNzUyNSwgMTE3NTMxLCAxMTc1MzYsIDExNzU0MiwgMTE3NTQ4LCAxMTc1NTQsIAorICAgIDExNzU1OSwgMTE3NTY1LCAxMTc1NzEsIDExNzU3NiwgMTE3NTgxLCAxMTc1ODcsIDExNzU5MiwgMTE3NTk4LCAxMTc2MDQsIAorICAgIDExNzYwOSwgMTE3NjE1LCAxMTc2MjEsIDExNzYyNiwgMTE3NjMyLCAxMTc2MzgsIDExNzY0NCwgMTE3NjUwLCAxMTc2NTYsIAorICAgIDExNzY2MiwgMTE3NjY5LCAxMTc2NzYsIDExNzY4MywgMTE3Njg5LCAxMTc2OTYsIDExNzcwMywgMTE3NzEwLCAxMTc3MTYsIAorICAgIDExNzcyMywgMTE3NzMwLCAxMTc3MzYsIDExNzc0MiwgMTE3NzQ5LCAxMTc3NTUsIDExNzc2MiwgMTE3NzY5LCAxMTc3NzUsIAorICAgIDExNzc4MiwgMTE3Nzg5LCAxMTc3OTUsIDExNzgwMiwgMTE3ODA5LCAxMTc4MTYsIDExNzgyMywgMTE3ODMwLCAxMTc4MzYsIAorICAgIDExNzg0MywgMTE3ODUwLCAxMTc4NTcsIDExNzg2MywgMTE3ODcwLCAxMTc4NzcsIDExNzg4NCwgMTE3ODkwLCAxMTc4OTcsIAorICAgIDExNzkwNCwgMTE3OTEwLCAxMTc5MTYsIDExNzkyMywgMTE3OTI5LCAxMTc5MzYsIDExNzk0MywgMTE3OTQ5LCAxMTc5NTYsIAorICAgIDExNzk2MywgMTE3OTY5LCAxMTc5NzYsIDExNzk4MywgMTE3OTkwLCAxMTc5OTcsIDExODAwNCwgMTE4MDA5LCAxMTgwMTUsIAorICAgIDExODAyMSwgMTE4MDI3LCAxMTgwMzIsIDExODAzOCwgMTE4MDQ0LCAxMTgwNTAsIDExODA1NSwgMTE4MDYxLCAxMTgwNjcsIAorICAgIDExODA3MiwgMTE4MDc3LCAxMTgwODMsIDExODA4OCwgMTE4MDk0LCAxMTgxMDAsIDExODEwNSwgMTE4MTExLCAxMTgxMTcsIAorICAgIDExODEyMiwgMTE4MTI4LCAxMTgxMzQsIDExODE0MCwgMTE4MTQ2LCAxMTgxNTIsIDExODE1NywgMTE4MTYzLCAxMTgxNjksIAorICAgIDExODE3NSwgMTE4MTgwLCAxMTgxODYsIDExODE5MiwgMTE4MTk4LCAxMTgyMDMsIDExODIwOSwgMTE4MjE1LCAxMTgyMjAsIAorICAgIDExODIyNSwgMTE4MjMxLCAxMTgyMzYsIDExODI0MiwgMTE4MjQ4LCAxMTgyNTMsIDExODI1OSwgMTE4MjY1LCAxMTgyNzAsIAorICAgIDExODI3NiwgMTE4MjgyLCAxMTgyODgsIDExODI5NCwgMTE4MzAwLCAxMTgzMDYsIDAsIDAsIDExODMxMywgMTE4MzE4LCAKKyAgICAxMTgzMjMsIDExODMyOCwgMTE4MzMzLCAxMTgzMzgsIDExODM0MywgMTE4MzQ4LCAxMTgzNTMsIDExODM1OCwgMTE4MzYzLCAKKyAgICAxMTgzNjgsIDExODM3MywgMTE4Mzc4LCAxMTgzODMsIDExODM4OCwgMTE4MzkzLCAxMTgzOTgsIDExODQwNCwgMTE4NDA5LCAKKyAgICAxMTg0MTQsIDExODQxOSwgMTE4NDI0LCAxMTg0MjksIDExODQzNCwgMTE4NDM5LCAxMTg0NDMsIDExODQ0OCwgMTE4NDUzLCAKKyAgICAxMTg0NTgsIDExODQ2MywgMTE4NDY4LCAxMTg0NzMsIDExODQ3OCwgMTE4NDgzLCAxMTg0ODgsIDExODQ5MywgMTE4NDk4LCAKKyAgICAxMTg1MDMsIDExODUwOCwgMTE4NTEzLCAxMTg1MTgsIDExODUyMywgMTE4NTI4LCAxMTg1MzQsIDExODUzOSwgMTE4NTQ0LCAKKyAgICAxMTg1NDksIDExODU1NCwgMTE4NTU5LCAxMTg1NjQsIDExODU2OSwgMTE4NTc1LCAxMTg1ODAsIDExODU4NSwgMTE4NTkwLCAKKyAgICAxMTg1OTUsIDExODYwMCwgMTE4NjA1LCAxMTg2MTAsIDExODYxNSwgMTE4NjIwLCAxMTg2MjUsIDExODYzMCwgMTE4NjM1LCAKKyAgICAxMTg2NDAsIDExODY0NSwgMTE4NjUwLCAxMTg2NTUsIDExODY2MCwgMTE4NjY1LCAxMTg2NzAsIDExODY3NSwgMTE4NjgwLCAKKyAgICAxMTg2ODUsIDExODY5MCwgMTE4Njk2LCAxMTg3MDEsIDExODcwNiwgMTE4NzExLCAxMTg3MTYsIDExODcyMSwgMTE4NzI2LCAKKyAgICAxMTg3MzEsIDExODczNSwgMTE4NzQwLCAxMTg3NDUsIDExODc1MCwgMTE4NzU1LCAxMTg3NjAsIDExODc2NSwgMTE4NzcwLCAKKyAgICAxMTg3NzUsIDExODc4MCwgMTE4Nzg1LCAxMTg3OTAsIDExODc5NSwgMTE4ODAwLCAxMTg4MDUsIDExODgxMCwgMTE4ODE1LCAKKyAgICAxMTg4MjAsIDExODgyNiwgMTE4ODMxLCAxMTg4MzYsIDExODg0MSwgMTE4ODQ2LCAxMTg4NTEsIDExODg1NiwgMTE4ODYxLCAKKyAgICAxMTg4NjcsIDExODg3MiwgMTE4ODc3LCAxMTg4ODIsIDExODg4NywgMTE4ODkyLCAxMTg4OTcsIDExODkwMywgMTE4OTA5LCAKKyAgICAxMTg5MTUsIDExODkyMSwgMTE4OTI3LCAxMTg5MzMsIDExODkzOSwgMTE4OTQ1LCAxMTg5NTEsIDExODk1NywgMTE4OTYzLCAKKyAgICAxMTg5NjksIDExODk3NSwgMTE4OTgxLCAxMTg5ODcsIDExODk5MywgMTE4OTk5LCAxMTkwMDYsIDExOTAxMiwgMTE5MDE4LCAKKyAgICAxMTkwMjQsIDExOTAzMCwgMTE5MDM2LCAxMTkwNDIsIDExOTA0OCwgMTE5MDUzLCAxMTkwNTksIDExOTA2NSwgMTE5MDcxLCAKKyAgICAxMTkwNzcsIDExOTA4MywgMTE5MDg5LCAxMTkwOTUsIDExOTEwMSwgMTE5MTA3LCAxMTkxMTMsIDExOTExOSwgMTE5MTI1LCAKKyAgICAxMTkxMzEsIDExOTEzNywgMTE5MTQzLCAxMTkxNDksIDExOTE1NSwgMTE5MTYyLCAxMTkxNjgsIDExOTE3NCwgMTE5MTgwLCAKKyAgICAxMTkxODYsIDExOTE5MiwgMTE5MTk4LCAxMTkyMDQsIDExOTIxMSwgMTE5MjE3LCAxMTkyMjMsIDExOTIyOSwgMTE5MjM1LCAKKyAgICAxMTkyNDEsIDExOTI0NywgMTE5MjUzLCAxMTkyNTksIDExOTI2NSwgMTE5MjcxLCAxMTkyNzcsIDExOTI4MywgMTE5Mjg5LCAKKyAgICAxMTkyOTUsIDExOTMwMSwgMTE5MzA3LCAxMTkzMTMsIDExOTMxOSwgMTE5MzI1LCAxMTkzMzEsIDExOTMzNywgMTE5MzQzLCAKKyAgICAxMTkzNDksIDExOTM1NiwgMTE5MzYyLCAxMTkzNjgsIDExOTM3NCwgMTE5MzgwLCAxMTkzODYsIDExOTM5MiwgMTE5Mzk4LCAKKyAgICAxMTk0MDMsIDExOTQwOSwgMTE5NDE1LCAxMTk0MjEsIDExOTQyNywgMTE5NDMzLCAxMTk0MzksIDExOTQ0NSwgMTE5NDUxLCAKKyAgICAxMTk0NTcsIDExOTQ2MywgMTE5NDY5LCAxMTk0NzUsIDExOTQ4MSwgMTE5NDg3LCAxMTk0OTMsIDExOTQ5OSwgMTE5NTA1LCAKKyAgICAxMTk1MTIsIDExOTUxOCwgMTE5NTI0LCAxMTk1MzAsIDExOTUzNiwgMTE5NTQyLCAxMTk1NDgsIDExOTU1NCwgMTE5NTYxLCAKKyAgICAxMTk1NjcsIDExOTU3MywgMTE5NTc5LCAxMTk1ODUsIDExOTU5MSwgMTE5NTk3LCAxMTk2MDQsIDExOTYxMSwgMTE5NjE4LCAKKyAgICAxMTk2MjUsIDExOTYzMiwgMTE5NjM5LCAxMTk2NDYsIDExOTY1MywgMTE5NjYwLCAxMTk2NjcsIDExOTY3NCwgMTE5NjgxLCAKKyAgICAxMTk2ODgsIDExOTY5NSwgMTE5NzAyLCAxMTk3MDksIDExOTcxNiwgMTE5NzI0LCAxMTk3MzEsIDExOTczOCwgMTE5NzQ1LCAKKyAgICAxMTk3NTIsIDExOTc1OSwgMTE5NzY2LCAxMTk3NzMsIDExOTc3OSwgMTE5Nzg2LCAxMTk3OTMsIDExOTgwMCwgMTE5ODA3LCAKKyAgICAxMTk4MTQsIDExOTgyMSwgMTE5ODI4LCAxMTk4MzUsIDExOTg0MiwgMTE5ODQ5LCAxMTk4NTYsIDExOTg2MywgMTE5ODcwLCAKKyAgICAxMTk4NzcsIDExOTg4NCwgMTE5ODkxLCAxMTk4OTgsIDExOTkwNiwgMTE5OTEzLCAxMTk5MjAsIDExOTkyNywgMTE5OTM0LCAKKyAgICAxMTk5NDEsIDExOTk0OCwgMTE5OTU1LCAxMTk5NjMsIDExOTk3MCwgMTE5OTc3LCAxMTk5ODQsIDExOTk5MSwgMTE5OTk4LCAKKyAgICAxMjAwMDUsIDEyMDAxMCwgMCwgMCwgMTIwMDE1LCAxMjAwMjAsIDEyMDAyNCwgMTIwMDI4LCAxMjAwMzIsIDEyMDAzNiwgCisgICAgMTIwMDQwLCAxMjAwNDQsIDEyMDA0OCwgMTIwMDUyLCAxMjAwNTYsIDEyMDA2MSwgMTIwMDY1LCAxMjAwNjksIDEyMDA3MywgCisgICAgMTIwMDc3LCAxMjAwODEsIDEyMDA4NSwgMTIwMDg5LCAxMjAwOTMsIDEyMDA5NywgMTIwMTAyLCAxMjAxMDYsIDEyMDExMCwgCisgICAgMTIwMTE0LCAxMjAxMTgsIDEyMDEyMiwgMTIwMTI2LCAxMjAxMzAsIDEyMDEzNCwgMTIwMTM4LCAxMjAxNDQsIDEyMDE0OSwgCisgICAgMTIwMTU0LCAxMjAxNTksIDEyMDE2NCwgMTIwMTY5LCAxMjAxNzQsIDEyMDE3OSwgMTIwMTg0LCAxMjAxODksIDEyMDE5NSwgCisgICAgMTIwMjAwLCAxMjAyMDUsIDEyMDIxMCwgMTIwMjE1LCAxMjAyMjAsIDEyMDIyNSwgMTIwMjMwLCAxMjAyMzUsIDEyMDI0MCwgCisgICAgMTIwMjQ0LCAxMjAyNDgsIDEyMDI1MiwgMCwgMTIwMjU2LCAxMjAyNjAsIDEyMDI2NCwgMTIwMjY4LCAxMjAyNzIsIAogICAgIDEyMDI3NiwgMTIwMjgwLCAxMjAyODQsIDEyMDI4OCwgMTIwMjkyLCAxMjAyOTYsIDEyMDMwMCwgMTIwMzA0LCAxMjAzMDgsIAotICAgIDEyMDMxMiwgMTIwMzE2LCAxMjAzMjAsIDEyMDMyNiwgMTIwMzMyLCAxMjAzMzgsIDAsIDEyMDM0NCwgMTIwMzQ5LCAwLCAKLSAgICAxMjAzNTQsIDAsIDAsIDEyMDM1OSwgMCwgMTIwMzY0LCAxMjAzNjksIDEyMDM3NCwgMTIwMzc5LCAxMjAzODQsIDEyMDM4OSwgCi0gICAgMTIwMzk0LCAxMjAzOTksIDEyMDQwNCwgMTIwNDA5LCAwLCAxMjA0MTQsIDEyMDQxOSwgMTIwNDI0LCAxMjA0MjksIDAsIAotICAgIDEyMDQzNCwgMCwgMTIwNDM5LCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA0NDQsIDAsIDAsIDAsIDAsIDEyMDQ1MCwgMCwgCi0gICAgMTIwNDU2LCAwLCAxMjA0NjIsIDAsIDEyMDQ2OCwgMTIwNDc0LCAxMjA0ODAsIDAsIDEyMDQ4NiwgMTIwNDkyLCAwLCAKLSAgICAxMjA0OTgsIDAsIDAsIDEyMDUwNCwgMCwgMTIwNTEwLCAwLCAxMjA1MTYsIDAsIDEyMDUyMiwgMCwgMTIwNTMwLCAwLCAKLSAgICAxMjA1MzgsIDEyMDU0NCwgMCwgMTIwNTUwLCAwLCAwLCAxMjA1NTYsIDEyMDU2MiwgMTIwNTY4LCAxMjA1NzQsIDAsIAotICAgIDEyMDU4MCwgMTIwNTg2LCAxMjA1OTIsIDEyMDU5OCwgMTIwNjA0LCAxMjA2MTAsIDEyMDYxNiwgMCwgMTIwNjIyLCAKLSAgICAxMjA2MjgsIDEyMDYzNCwgMTIwNjQwLCAwLCAxMjA2NDYsIDEyMDY1MiwgMTIwNjU4LCAxMjA2NjQsIDAsIDEyMDY3MiwgMCwgCi0gICAgMTIwNjgwLCAxMjA2ODYsIDEyMDY5MiwgMTIwNjk4LCAxMjA3MDQsIDEyMDcxMCwgMTIwNzE2LCAxMjA3MjIsIDEyMDcyOCwgCi0gICAgMTIwNzM0LCAwLCAxMjA3NDAsIDEyMDc0NiwgMTIwNzUyLCAxMjA3NTgsIDEyMDc2NCwgMTIwNzcwLCAxMjA3NzYsIAotICAgIDEyMDc4MiwgMTIwNzg4LCAxMjA3OTQsIDEyMDgwMCwgMTIwODA2LCAxMjA4MTIsIDEyMDgxOCwgMTIwODI0LCAxMjA4MzAsIAotICAgIDEyMDgzNiwgMCwgMCwgMCwgMCwgMCwgMTIwODQyLCAxMjA4NDcsIDEyMDg1MiwgMCwgMTIwODU3LCAxMjA4NjIsIDEyMDg2NywgCi0gICAgMTIwODcyLCAxMjA4NzcsIDAsIDEyMDg4MiwgMTIwODg3LCAxMjA4OTIsIDEyMDg5NywgMTIwOTAyLCAxMjA5MDcsIAotICAgIDEyMDkxMiwgMTIwOTE3LCAxMjA5MjIsIDEyMDkyNywgMTIwOTMyLCAxMjA5MzcsIDEyMDk0MiwgMTIwOTQ3LCAxMjA5NTIsIAotICAgIDEyMDk1NywgMTIwOTYyLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjA5NjcsIDEyMDk3NywgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMTIwOTg1LCAxMjA5OTIsIDEyMDk5OSwgMTIxMDA2LCAxMjEwMTMsIDEyMTAyMCwgMTIxMDI3LCAKLSAgICAxMjEwMzMsIDEyMTA0MCwgMTIxMDQ3LCAxMjEwNTQsIDEyMTA2MiwgMTIxMDcwLCAxMjEwNzgsIDEyMTA4NiwgMTIxMDk0LCAKLSAgICAxMjExMDIsIDEyMTEwOSwgMTIxMTE2LCAxMjExMjMsIDEyMTEzMSwgMTIxMTM5LCAxMjExNDcsIDEyMTE1NSwgMTIxMTYzLCAKLSAgICAxMjExNzEsIDEyMTE3OCwgMTIxMTg1LCAxMjExOTIsIDEyMTIwMCwgMTIxMjA4LCAxMjEyMTYsIDEyMTIyNCwgMTIxMjMyLCAKLSAgICAxMjEyNDAsIDEyMTI0NSwgMTIxMjUwLCAxMjEyNTUsIDEyMTI2MCwgMTIxMjY1LCAxMjEyNzAsIDEyMTI3NSwgMTIxMjgwLCAKLSAgICAxMjEyODUsIDAsIDAsIDAsIDAsIDEyMTI5MCwgMTIxMjk1LCAxMjEyOTksIDEyMTMwMywgMTIxMzA3LCAxMjEzMTEsIAotICAgIDEyMTMxNSwgMTIxMzE5LCAxMjEzMjMsIDEyMTMyNywgMTIxMzMxLCAxMjEzMzUsIDEyMTMzOSwgMTIxMzQzLCAxMjEzNDcsIAotICAgIDEyMTM1MSwgMTIxMzU1LCAxMjEzNTksIDEyMTM2MywgMTIxMzY3LCAxMjEzNzEsIDEyMTM3NSwgMTIxMzc5LCAxMjEzODMsIAotICAgIDEyMTM4NywgMTIxMzkxLCAxMjEzOTUsIDEyMTM5OSwgMTIxNDAzLCAxMjE0MDcsIDEyMTQxMSwgMTIxNDE1LCAxMjE0MTksIAotICAgIDEyMTQyMywgMTIxNDI3LCAxMjE0MzEsIDEyMTQzNSwgMTIxNDM5LCAxMjE0NDMsIDEyMTQ0NywgMTIxNDUxLCAxMjE0NTUsIAotICAgIDEyMTQ1OSwgMTIxNDYzLCAxMjE0NjcsIDEyMTQ3MSwgMTIxNDc1LCAxMjE0NzksIDEyMTQ4MywgMTIxNDg3LCAxMjE0OTEsIAotICAgIDEyMTQ5NiwgMTIxNTAwLCAxMjE1MDQsIDEyMTUwOCwgMTIxNTEyLCAxMjE1MTYsIDEyMTUyMCwgMTIxNTI0LCAxMjE1MjgsIAotICAgIDEyMTUzMiwgMTIxNTM2LCAxMjE1NDAsIDEyMTU0NCwgMTIxNTQ4LCAxMjE1NTIsIDEyMTU1NiwgMTIxNTYwLCAxMjE1NjQsIAotICAgIDEyMTU2OCwgMTIxNTcyLCAxMjE1NzYsIDEyMTU4MCwgMTIxNTg0LCAxMjE1ODgsIDEyMTU5MiwgMTIxNTk2LCAxMjE2MDAsIAotICAgIDEyMTYwNCwgMTIxNjA4LCAxMjE2MTIsIDEyMTYxNiwgMTIxNjIwLCAxMjE2MjQsIDEyMTYyOCwgMTIxNjMyLCAxMjE2MzYsIAotICAgIDEyMTY0MCwgMTIxNjQ0LCAxMjE2NDgsIDEyMTY1MiwgMTIxNjU2LCAxMjE2NjAsIDEyMTY2NCwgMTIxNjY4LCAxMjE2NzIsIAotICAgIDEyMTY3NiwgMTIxNjgwLCAxMjE2ODQsIDEyMTY4OCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMTIxNjkyLCAxMjE2OTgsIDEyMTcwNywgMTIxNzE1LCAxMjE3MjMsIDEyMTczMiwgMTIxNzQxLCAxMjE3NTAsIDEyMTc1OSwgCi0gICAgMTIxNzY4LCAxMjE3NzcsIDEyMTc4NiwgMTIxNzk1LCAxMjE4MDQsIDEyMTgxMywgMCwgMCwgMTIxODIyLCAxMjE4MzEsIAotICAgIDEyMTgzOSwgMTIxODQ3LCAxMjE4NTYsIDEyMTg2NSwgMTIxODc0LCAxMjE4ODMsIDEyMTg5MiwgMTIxOTAxLCAxMjE5MTAsIAotICAgIDEyMTkxOSwgMTIxOTI4LCAxMjE5MzcsIDAsIDAsIDEyMTk0NiwgMTIxOTU1LCAxMjE5NjMsIDEyMTk3MSwgMTIxOTgwLCAKLSAgICAxMjE5ODksIDEyMTk5OCwgMTIyMDA3LCAxMjIwMTYsIDEyMjAyNSwgMTIyMDM0LCAxMjIwNDMsIDEyMjA1MiwgMTIyMDYxLCAKLSAgICAxMjIwNzAsIDAsIDEyMjA3NywgMTIyMDg2LCAxMjIwOTQsIDEyMjEwMiwgMTIyMTExLCAxMjIxMjAsIDEyMjEyOSwgCi0gICAgMTIyMTM4LCAxMjIxNDcsIDEyMjE1NiwgMTIyMTY1LCAxMjIxNzQsIDEyMjE4MywgMTIyMTkyLCAxMjIyMDEsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDEyMjIwOCwgMTIyMjE1LCAxMjIyMjAsIDEyMjIyNCwgMTIyMjI4LCAxMjIyMzIsIDEyMjIzNywgCi0gICAgMTIyMjQyLCAxMjIyNDcsIDEyMjI1MiwgMTIyMjU3LCAwLCAwLCAwLCAwLCAwLCAxMjIyNjIsIDEyMjI2NywgMTIyMjczLCAKLSAgICAxMjIyNzksIDEyMjI4NSwgMTIyMjkwLCAxMjIyOTYsIDEyMjMwMiwgMTIyMzA4LCAxMjIzMTMsIDEyMjMxOSwgMTIyMzI1LCAKLSAgICAxMjIzMzAsIDEyMjMzNSwgMTIyMzQxLCAxMjIzNDYsIDEyMjM1MiwgMTIyMzU4LCAxMjIzNjMsIDEyMjM2OSwgMTIyMzc1LCAKLSAgICAxMjIzODAsIDEyMjM4NiwgMTIyMzkyLCAxMjIzOTgsIDEyMjQwNCwgMTIyNDEwLCAxMjI0MjEsIDEyMjQyOCwgMTIyNDM0LCAKLSAgICAxMjI0MzcsIDAsIDEyMjQ0MCwgMTIyNDQ1LCAxMjI0NTEsIDEyMjQ1NywgMTIyNDYzLCAxMjI0NjgsIDEyMjQ3NCwgCi0gICAgMTIyNDgwLCAxMjI0ODYsIDEyMjQ5MSwgMTIyNDk3LCAxMjI1MDMsIDEyMjUwOCwgMTIyNTEzLCAxMjI1MTksIDEyMjUyNCwgCi0gICAgMTIyNTMwLCAxMjI1MzYsIDEyMjU0MSwgMTIyNTQ3LCAxMjI1NTMsIDEyMjU1OCwgMTIyNTY0LCAxMjI1NzAsIDEyMjU3NiwgCi0gICAgMTIyNTgyLCAxMjI1ODgsIDEyMjU5MSwgMTIyNTk0LCAxMjI1OTcsIDEyMjYwMCwgMTIyNjAzLCAxMjI2MDYsIDEyMjYxMiwgCi0gICAgMTIyNjE5LCAxMjI2MjYsIDEyMjYzMywgMTIyNjM5LCAxMjI2NDYsIDEyMjY1MywgMTIyNjYwLCAxMjI2NjYsIDEyMjY3MywgCi0gICAgMTIyNjgwLCAxMjI2ODYsIDEyMjY5MiwgMTIyNjk5LCAxMjI3MDUsIDEyMjcxMiwgMTIyNzE5LCAxMjI3MjUsIDEyMjczMiwgCi0gICAgMTIyNzM5LCAxMjI3NDUsIDEyMjc1MiwgMTIyNzU5LCAxMjI3NjYsIDEyMjc3MywgMTIyNzgwLCAxMjI3ODUsIDAsIDAsIDAsIAotICAgIDAsIDEyMjc5MCwgMTIyNzk2LCAxMjI4MDMsIDEyMjgxMCwgMTIyODE3LCAxMjI4MjMsIDEyMjgzMCwgMTIyODM3LCAKLSAgICAxMjI4NDQsIDEyMjg1MCwgMTIyODU3LCAxMjI4NjQsIDEyMjg3MCwgMTIyODc2LCAxMjI4ODMsIDEyMjg4OSwgMTIyODk2LCAKLSAgICAxMjI5MDMsIDEyMjkwOSwgMTIyOTE2LCAxMjI5MjMsIDEyMjkyOSwgMTIyOTM2LCAxMjI5NDMsIDEyMjk1MCwgMTIyOTU3LCAKLSAgICAxMjI5NjQsIDEyMjk3MywgMTIyOTc3LCAxMjI5ODAsIDEyMjk4MywgMTIyOTg3LCAxMjI5OTEsIDEyMjk5NCwgMTIyOTk3LCAKLSAgICAxMjMwMDAsIDEyMzAwMywgMTIzMDA2LCAxMjMwMDksIDEyMzAxMiwgMTIzMDE1LCAxMjMwMTgsIDEyMzAyNCwgMCwgMCwgMCwgCisgICAgMTIwMzEyLCAxMjAzMTYsIDEyMDMyMCwgMTIwMzI0LCAxMjAzMjgsIDEyMDMzMiwgMTIwMzM2LCAxMjAzNDAsIDEyMDM0NCwgCisgICAgMTIwMzQ4LCAxMjAzNTQsIDEyMDM2MCwgMTIwMzY2LCAwLCAxMjAzNzIsIDEyMDM3NywgMCwgMTIwMzgyLCAwLCAwLCAKKyAgICAxMjAzODcsIDAsIDEyMDM5MiwgMTIwMzk3LCAxMjA0MDIsIDEyMDQwNywgMTIwNDEyLCAxMjA0MTcsIDEyMDQyMiwgCisgICAgMTIwNDI3LCAxMjA0MzIsIDEyMDQzNywgMCwgMTIwNDQyLCAxMjA0NDcsIDEyMDQ1MiwgMTIwNDU3LCAwLCAxMjA0NjIsIDAsIAorICAgIDEyMDQ2NywgMCwgMCwgMCwgMCwgMCwgMCwgMTIwNDcyLCAwLCAwLCAwLCAwLCAxMjA0NzgsIDAsIDEyMDQ4NCwgMCwgCisgICAgMTIwNDkwLCAwLCAxMjA0OTYsIDEyMDUwMiwgMTIwNTA4LCAwLCAxMjA1MTQsIDEyMDUyMCwgMCwgMTIwNTI2LCAwLCAwLCAKKyAgICAxMjA1MzIsIDAsIDEyMDUzOCwgMCwgMTIwNTQ0LCAwLCAxMjA1NTAsIDAsIDEyMDU1OCwgMCwgMTIwNTY2LCAxMjA1NzIsIDAsIAorICAgIDEyMDU3OCwgMCwgMCwgMTIwNTg0LCAxMjA1OTAsIDEyMDU5NiwgMTIwNjAyLCAwLCAxMjA2MDgsIDEyMDYxNCwgMTIwNjIwLCAKKyAgICAxMjA2MjYsIDEyMDYzMiwgMTIwNjM4LCAxMjA2NDQsIDAsIDEyMDY1MCwgMTIwNjU2LCAxMjA2NjIsIDEyMDY2OCwgMCwgCisgICAgMTIwNjc0LCAxMjA2ODAsIDEyMDY4NiwgMTIwNjkyLCAwLCAxMjA3MDAsIDAsIDEyMDcwOCwgMTIwNzE0LCAxMjA3MjAsIAorICAgIDEyMDcyNiwgMTIwNzMyLCAxMjA3MzgsIDEyMDc0NCwgMTIwNzUwLCAxMjA3NTYsIDEyMDc2MiwgMCwgMTIwNzY4LCAKKyAgICAxMjA3NzQsIDEyMDc4MCwgMTIwNzg2LCAxMjA3OTIsIDEyMDc5OCwgMTIwODA0LCAxMjA4MTAsIDEyMDgxNiwgMTIwODIyLCAKKyAgICAxMjA4MjgsIDEyMDgzNCwgMTIwODQwLCAxMjA4NDYsIDEyMDg1MiwgMTIwODU4LCAxMjA4NjQsIDAsIDAsIDAsIDAsIDAsIAorICAgIDEyMDg3MCwgMTIwODc1LCAxMjA4ODAsIDAsIDEyMDg4NSwgMTIwODkwLCAxMjA4OTUsIDEyMDkwMCwgMTIwOTA1LCAwLCAKKyAgICAxMjA5MTAsIDEyMDkxNSwgMTIwOTIwLCAxMjA5MjUsIDEyMDkzMCwgMTIwOTM1LCAxMjA5NDAsIDEyMDk0NSwgMTIwOTUwLCAKKyAgICAxMjA5NTUsIDEyMDk2MCwgMTIwOTY1LCAxMjA5NzAsIDEyMDk3NSwgMTIwOTgwLCAxMjA5ODUsIDEyMDk5MCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMTIwOTk1LCAxMjEwMDUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTAxMywgCisgICAgMTIxMDIwLCAxMjEwMjcsIDEyMTAzNCwgMTIxMDQxLCAxMjEwNDgsIDEyMTA1NSwgMTIxMDYxLCAxMjEwNjgsIDEyMTA3NSwgCisgICAgMTIxMDgyLCAxMjEwOTAsIDEyMTA5OCwgMTIxMTA2LCAxMjExMTQsIDEyMTEyMiwgMTIxMTMwLCAxMjExMzcsIDEyMTE0NCwgCisgICAgMTIxMTUxLCAxMjExNTksIDEyMTE2NywgMTIxMTc1LCAxMjExODMsIDEyMTE5MSwgMTIxMTk5LCAxMjEyMDYsIDEyMTIxMywgCisgICAgMTIxMjIwLCAxMjEyMjgsIDEyMTIzNiwgMTIxMjQ0LCAxMjEyNTIsIDEyMTI2MCwgMTIxMjY4LCAxMjEyNzMsIDEyMTI3OCwgCisgICAgMTIxMjgzLCAxMjEyODgsIDEyMTI5MywgMTIxMjk4LCAxMjEzMDMsIDEyMTMwOCwgMTIxMzEzLCAwLCAwLCAwLCAwLCAKKyAgICAxMjEzMTgsIDEyMTMyMywgMTIxMzI3LCAxMjEzMzEsIDEyMTMzNSwgMTIxMzM5LCAxMjEzNDMsIDEyMTM0NywgMTIxMzUxLCAKKyAgICAxMjEzNTUsIDEyMTM1OSwgMTIxMzYzLCAxMjEzNjcsIDEyMTM3MSwgMTIxMzc1LCAxMjEzNzksIDEyMTM4MywgMTIxMzg3LCAKKyAgICAxMjEzOTEsIDEyMTM5NSwgMTIxMzk5LCAxMjE0MDMsIDEyMTQwNywgMTIxNDExLCAxMjE0MTUsIDEyMTQxOSwgMTIxNDIzLCAKKyAgICAxMjE0MjcsIDEyMTQzMSwgMTIxNDM1LCAxMjE0MzksIDEyMTQ0MywgMTIxNDQ3LCAxMjE0NTEsIDEyMTQ1NSwgMTIxNDU5LCAKKyAgICAxMjE0NjMsIDEyMTQ2NywgMTIxNDcxLCAxMjE0NzUsIDEyMTQ3OSwgMTIxNDgzLCAxMjE0ODcsIDEyMTQ5MSwgMTIxNDk1LCAKKyAgICAxMjE0OTksIDEyMTUwMywgMTIxNTA3LCAxMjE1MTEsIDEyMTUxNSwgMTIxNTE5LCAxMjE1MjQsIDEyMTUyOCwgMTIxNTMyLCAKKyAgICAxMjE1MzYsIDEyMTU0MCwgMTIxNTQ0LCAxMjE1NDgsIDEyMTU1MiwgMTIxNTU2LCAxMjE1NjAsIDEyMTU2NCwgMTIxNTY4LCAKKyAgICAxMjE1NzIsIDEyMTU3NiwgMTIxNTgwLCAxMjE1ODQsIDEyMTU4OCwgMTIxNTkyLCAxMjE1OTYsIDEyMTYwMCwgMTIxNjA0LCAKKyAgICAxMjE2MDgsIDEyMTYxMiwgMTIxNjE2LCAxMjE2MjAsIDEyMTYyNCwgMTIxNjI4LCAxMjE2MzIsIDEyMTYzNiwgMTIxNjQwLCAKKyAgICAxMjE2NDQsIDEyMTY0OCwgMTIxNjUyLCAxMjE2NTYsIDEyMTY2MCwgMTIxNjY0LCAxMjE2NjgsIDEyMTY3MiwgMTIxNjc2LCAKKyAgICAxMjE2ODAsIDEyMTY4NCwgMTIxNjg4LCAxMjE2OTIsIDEyMTY5NiwgMTIxNzAwLCAxMjE3MDQsIDEyMTcwOCwgMTIxNzEyLCAKKyAgICAxMjE3MTYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyMTcyMCwgMTIxNzI2LCAxMjE3MzUsIAorICAgIDEyMTc0MywgMTIxNzUxLCAxMjE3NjAsIDEyMTc2OSwgMTIxNzc4LCAxMjE3ODcsIDEyMTc5NiwgMTIxODA1LCAxMjE4MTQsIAorICAgIDEyMTgyMywgMTIxODMyLCAxMjE4NDEsIDAsIDAsIDEyMTg1MCwgMTIxODU5LCAxMjE4NjcsIDEyMTg3NSwgMTIxODg0LCAKKyAgICAxMjE4OTMsIDEyMTkwMiwgMTIxOTExLCAxMjE5MjAsIDEyMTkyOSwgMTIxOTM4LCAxMjE5NDcsIDEyMTk1NiwgMTIxOTY1LCAKKyAgICAwLCAwLCAxMjE5NzQsIDEyMTk4MywgMTIxOTkxLCAxMjE5OTksIDEyMjAwOCwgMTIyMDE3LCAxMjIwMjYsIDEyMjAzNSwgCisgICAgMTIyMDQ0LCAxMjIwNTMsIDEyMjA2MiwgMTIyMDcxLCAxMjIwODAsIDEyMjA4OSwgMTIyMDk4LCAwLCAxMjIxMDUsIAorICAgIDEyMjExNCwgMTIyMTIyLCAxMjIxMzAsIDEyMjEzOSwgMTIyMTQ4LCAxMjIxNTcsIDEyMjE2NiwgMTIyMTc1LCAxMjIxODQsIAorICAgIDEyMjE5MywgMTIyMjAyLCAxMjIyMTEsIDEyMjIyMCwgMTIyMjI5LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjIyMzYsIAorICAgIDEyMjI0MywgMTIyMjQ4LCAxMjIyNTIsIDEyMjI1NiwgMTIyMjYwLCAxMjIyNjUsIDEyMjI3MCwgMTIyMjc1LCAxMjIyODAsIAorICAgIDEyMjI4NSwgMCwgMCwgMCwgMCwgMCwgMTIyMjkwLCAxMjIyOTUsIDEyMjMwMSwgMTIyMzA3LCAxMjIzMTMsIDEyMjMxOCwgCisgICAgMTIyMzI0LCAxMjIzMzAsIDEyMjMzNiwgMTIyMzQxLCAxMjIzNDcsIDEyMjM1MywgMTIyMzU4LCAxMjIzNjMsIDEyMjM2OSwgCisgICAgMTIyMzc0LCAxMjIzODAsIDEyMjM4NiwgMTIyMzkxLCAxMjIzOTcsIDEyMjQwMywgMTIyNDA4LCAxMjI0MTQsIDEyMjQyMCwgCisgICAgMTIyNDI2LCAxMjI0MzIsIDEyMjQzOCwgMTIyNDQ5LCAxMjI0NTYsIDEyMjQ2MiwgMTIyNDY1LCAwLCAxMjI0NjgsIAorICAgIDEyMjQ3MywgMTIyNDc5LCAxMjI0ODUsIDEyMjQ5MSwgMTIyNDk2LCAxMjI1MDIsIDEyMjUwOCwgMTIyNTE0LCAxMjI1MTksIAorICAgIDEyMjUyNSwgMTIyNTMxLCAxMjI1MzYsIDEyMjU0MSwgMTIyNTQ3LCAxMjI1NTIsIDEyMjU1OCwgMTIyNTY0LCAxMjI1NjksIAorICAgIDEyMjU3NSwgMTIyNTgxLCAxMjI1ODYsIDEyMjU5MiwgMTIyNTk4LCAxMjI2MDQsIDEyMjYxMCwgMTIyNjE2LCAxMjI2MTksIAorICAgIDEyMjYyMiwgMTIyNjI1LCAxMjI2MjgsIDEyMjYzMSwgMTIyNjM0LCAxMjI2NDAsIDEyMjY0NywgMTIyNjU0LCAxMjI2NjEsIAorICAgIDEyMjY2NywgMTIyNjc0LCAxMjI2ODEsIDEyMjY4OCwgMTIyNjk0LCAxMjI3MDEsIDEyMjcwOCwgMTIyNzE0LCAxMjI3MjAsIAorICAgIDEyMjcyNywgMTIyNzMzLCAxMjI3NDAsIDEyMjc0NywgMTIyNzUzLCAxMjI3NjAsIDEyMjc2NywgMTIyNzczLCAxMjI3ODAsIAorICAgIDEyMjc4NywgMTIyNzk0LCAxMjI4MDEsIDEyMjgwOCwgMTIyODEzLCAwLCAwLCAwLCAwLCAxMjI4MTgsIDEyMjgyNCwgCisgICAgMTIyODMxLCAxMjI4MzgsIDEyMjg0NSwgMTIyODUxLCAxMjI4NTgsIDEyMjg2NSwgMTIyODcyLCAxMjI4NzgsIDEyMjg4NSwgCisgICAgMTIyODkyLCAxMjI4OTgsIDEyMjkwNCwgMTIyOTExLCAxMjI5MTcsIDEyMjkyNCwgMTIyOTMxLCAxMjI5MzcsIDEyMjk0NCwgCisgICAgMTIyOTUxLCAxMjI5NTcsIDEyMjk2NCwgMTIyOTcxLCAxMjI5NzgsIDEyMjk4NSwgMTIyOTkyLCAxMjMwMDEsIDEyMzAwNSwgCisgICAgMTIzMDA4LCAxMjMwMTEsIDEyMzAxNSwgMTIzMDE5LCAxMjMwMjIsIDEyMzAyNSwgMTIzMDI4LCAxMjMwMzEsIDEyMzAzNCwgCisgICAgMTIzMDM3LCAxMjMwNDAsIDEyMzA0MywgMTIzMDQ2LCAxMjMwNTIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDEyMzAyNywgMTIzMDM0LCAxMjMwNDIsIDEyMzA1MCwgMTIzMDU4LCAxMjMwNjUsIDEyMzA3MywgMTIzMDgxLCAxMjMwODksIAotICAgIDEyMzA5NiwgMTIzMTA0LCAxMjMxMTIsIDEyMzExOSwgMTIzMTI2LCAxMjMxMzQsIDEyMzE0MSwgMTIzMTQ5LCAxMjMxNTcsIAotICAgIDEyMzE2NCwgMTIzMTcyLCAxMjMxODAsIDEyMzE4NywgMTIzMTk1LCAxMjMyMDMsIDEyMzIxMSwgMTIzMjE5LCAxMjMyMjcsIAotICAgIDEyMzIzMSwgMTIzMjM1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjMyMzgsIDEyMzI0NCwgCi0gICAgMTIzMjUwLCAxMjMyNTYsIDEyMzI2MCwgMTIzMjY2LCAxMjMyNzIsIDEyMzI3OCwgMTIzMjg0LCAxMjMyOTAsIDEyMzI5NiwgCi0gICAgMTIzMzAyLCAxMjMzMDgsIDEyMzMxNCwgMTIzMzIwLCAxMjMzMjYsIDEyMzMzMiwgMTIzMzM4LCAxMjMzNDQsIDEyMzM1MCwgCi0gICAgMTIzMzU2LCAxMjMzNjIsIDEyMzM2OCwgMTIzMzc0LCAxMjMzODAsIDEyMzM4NiwgMTIzMzkyLCAxMjMzOTgsIDEyMzQwNCwgCi0gICAgMTIzNDEwLCAxMjM0MTYsIDEyMzQyMiwgMTIzNDI4LCAxMjM0MzQsIDEyMzQ0MCwgMTIzNDQ2LCAxMjM0NTIsIDEyMzQ1OCwgCi0gICAgMTIzNDY0LCAxMjM0NzAsIDEyMzQ3NiwgMTIzNDgyLCAxMjM0ODgsIDAsIDAsIDAsIDAsIDAsIDEyMzQ5NCwgMTIzNTA1LCAKLSAgICAxMjM1MTYsIDEyMzUyNywgMTIzNTM4LCAxMjM1NDksIDEyMzU2MCwgMTIzNTcxLCAxMjM1ODIsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyMzU5MywgMTIzNTk3LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAxMjM2MDEsIDEyMzYwMywgMTIzNjA1LCAxMjM2MDksIDEyMzYxNCwgMTIzNjE5LCAxMjM2MjEsIAotICAgIDEyMzYyNywgMTIzNjMyLCAxMjM2MzQsIDEyMzY0MCwgMTIzNjQ0LCAxMjM2NDYsIDEyMzY1MCwgMTIzNjU2LCAxMjM2NjIsIAotICAgIDEyMzY2OCwgMTIzNjczLCAxMjM2NzcsIDEyMzY4NCwgMTIzNjkxLCAxMjM2OTgsIDEyMzcwMywgMTIzNzEwLCAxMjM3MTcsIAotICAgIDEyMzcyNCwgMTIzNzI4LCAxMjM3MzQsIDEyMzc0MywgMTIzNzUyLCAxMjM3NTksIDEyMzc2NCwgMTIzNzY4LCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM3NzIsIDEyMzc3NCwgMTIzNzc2LCAxMjM3ODAsIAotICAgIDEyMzc4NCwgMTIzNzg4LCAwLCAxMjM3OTAsIDEyMzc5MiwgMTIzNzk2LCAxMjM3OTgsIDEyMzgwMCwgMTIzODAyLCAKLSAgICAxMjM4MDQsIDEyMzgwOSwgMTIzODE0LCAxMjM4MTYsIDEyMzgyMiwgMTIzODI2LCAxMjM4MzAsIDEyMzgzOCwgMTIzODQwLCAKLSAgICAxMjM4NDIsIDEyMzg0NCwgMTIzODQ2LCAxMjM4NDgsIDEyMzg1MCwgMTIzODUyLCAxMjM4NTQsIDEyMzg1NiwgMTIzODU4LCAKLSAgICAxMjM4NjIsIDEyMzg2NiwgMTIzODY4LCAxMjM4NzAsIDEyMzg3MiwgMTIzODc0LCAxMjM4NzYsIDEyMzg4MSwgMTIzODg3LCAKLSAgICAxMjM4OTEsIDEyMzg5NSwgMTIzODk5LCAxMjM5MDMsIDEyMzkwOCwgMTIzOTEyLCAxMjM5MTQsIDEyMzkxNiwgMTIzOTIwLCAKLSAgICAxMjM5MjYsIDEyMzkyOCwgMTIzOTMwLCAxMjM5MzIsIDEyMzkzNiwgMTIzOTQ1LCAxMjM5NTEsIDEyMzk1NSwgMTIzOTU5LCAKLSAgICAxMjM5NjEsIDEyMzk2MywgMTIzOTY2LCAxMjM5NjgsIDEyMzk3MCwgMTIzOTcyLCAxMjM5NzYsIDEyMzk3OCwgMTIzOTgyLCAKLSAgICAxMjM5ODcsIDEyMzk4OSwgMTIzOTk0LCAxMjQwMDAsIDEyNDAwNywgMTI0MDExLCAxMjQwMTUsIDEyNDAxOSwgMTI0MDIzLCAKLSAgICAxMjQwMjksIDAsIDAsIDAsIDEyNDAzMywgMTI0MDM1LCAxMjQwMzksIDEyNDA0MywgMTI0MDQ1LCAxMjQwNDksIDEyNDA1MywgCi0gICAgMTI0MDU1LCAxMjQwNTksIDEyNDA2MSwgMTI0MDY1LCAxMjQwNjksIDEyNDA3MywgMTI0MDc3LCAxMjQwODEsIDEyNDA4NSwgCi0gICAgMTI0MDg5LCAxMjQwOTMsIDEyNDA5OSwgMTI0MTAzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjQxMDcsIDEyNDExMSwgMTI0MTE1LCAxMjQxMTksIDEyNDEyNiwgMTI0MTI4LCAxMjQxMzIsIDEyNDEzNCwgMTI0MTM2LCAKLSAgICAxMjQxNDAsIDEyNDE0NCwgMTI0MTQ4LCAxMjQxNTAsIDEyNDE1NCwgMTI0MTU4LCAxMjQxNjIsIDEyNDE2NiwgMTI0MTcwLCAKLSAgICAxMjQxNzIsIDEyNDE3NiwgMTI0MTc4LCAxMjQxODQsIDEyNDE4NywgMTI0MTkyLCAxMjQxOTQsIDEyNDE5NiwgMTI0MTk5LCAKLSAgICAxMjQyMDEsIDEyNDIwMywgMTI0MjA2LCAxMjQyMTMsIDEyNDIyMCwgMTI0MjI3LCAxMjQyMzIsIDEyNDIzNiwgMTI0MjM4LCAKLSAgICAxMjQyNDAsIDAsIDEyNDI0MiwgMTI0MjQ0LCAxMjQyNDgsIDEyNDI1MiwgMTI0MjU2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjQyNTgsIDEyNDI2MiwgMTI0MjY3LCAxMjQyNzEsIAotICAgIDEyNDI3NywgMTI0MjgzLCAxMjQyODUsIDEyNDI4NywgMTI0MjkzLCAxMjQyOTUsIDEyNDI5OSwgMTI0MzAzLCAxMjQzMDUsIAotICAgIDEyNDMwOSwgMTI0MzExLCAxMjQzMTUsIDEyNDMxOSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMTI0MzIzLCAxMjQzMjUsIDEyNDMyNywgMTI0MzI5LCAxMjQzMzMsIDEyNDMzNSwgMTI0MzM3LCAxMjQzMzksIAotICAgIDEyNDM0MSwgMTI0MzQzLCAxMjQzNDUsIDEyNDM0NywgMTI0MzQ5LCAxMjQzNTEsIDEyNDM1MywgMTI0MzU1LCAxMjQzNTcsIAotICAgIDEyNDM1OSwgMTI0MzYxLCAxMjQzNjMsIDEyNDM2NSwgMTI0MzY3LCAxMjQzNjksIDEyNDM3MSwgMTI0MzczLCAxMjQzNzUsIAotICAgIDEyNDM3NywgMTI0MzgxLCAxMjQzODMsIDEyNDM4NSwgMTI0Mzg3LCAxMjQzOTEsIDEyNDM5MywgMTI0Mzk3LCAxMjQzOTksIAotICAgIDEyNDQwMSwgMTI0NDA1LCAxMjQ0MDksIDEyNDQxNSwgMTI0NDE3LCAxMjQ0MTksIDEyNDQyMSwgMTI0NDIzLCAxMjQ0MjcsIAotICAgIDEyNDQzMSwgMTI0NDMzLCAxMjQ0MzcsIDEyNDQ0MSwgMTI0NDQ1LCAxMjQ0NDksIDEyNDQ1MywgMTI0NDU3LCAxMjQ0NjEsIAotICAgIDEyNDQ2NSwgMTI0NDY5LCAxMjQ0NzMsIDEyNDQ3NywgMTI0NDgxLCAxMjQ0ODUsIDEyNDQ4OSwgMTI0NDkzLCAxMjQ0OTcsIAotICAgIDEyNDUwMSwgMCwgMTI0NTA1LCAwLCAxMjQ1MDcsIDEyNDUwOSwgMTI0NTExLCAxMjQ1MTMsIDEyNDUxNSwgMTI0NTIzLCAKLSAgICAxMjQ1MzEsIDEyNDUzOSwgMTI0NTQ3LCAxMjQ1NTIsIDEyNDU1NywgMTI0NTYyLCAxMjQ1NjYsIDEyNDU3MCwgMTI0NTc1LCAKLSAgICAxMjQ1NzksIDEyNDU4MSwgMTI0NTg1LCAxMjQ1ODcsIDEyNDU4OSwgMTI0NTkxLCAxMjQ1OTMsIDEyNDU5NSwgMTI0NTk3LCAKLSAgICAxMjQ1OTksIDEyNDYwMywgMTI0NjA1LCAxMjQ2MDcsIDEyNDYwOSwgMTI0NjEzLCAxMjQ2MTcsIDEyNDYyMSwgMTI0NjI1LCAKLSAgICAxMjQ2MjksIDEyNDYzMSwgMTI0NjM3LCAxMjQ2NDMsIDEyNDY0NSwgMTI0NjQ3LCAxMjQ2NDksIDEyNDY1MSwgMTI0NjUzLCAKLSAgICAxMjQ2NjIsIDEyNDY2OSwgMTI0Njc2LCAxMjQ2ODAsIDEyNDY4NywgMTI0NjkyLCAxMjQ2OTksIDEyNDcwOCwgMTI0NzEzLCAKLSAgICAxMjQ3MTcsIDEyNDcyMSwgMTI0NzIzLCAxMjQ3MjcsIDEyNDcyOSwgMTI0NzMzLCAxMjQ3MzcsIDEyNDczOSwgMTI0NzQzLCAKLSAgICAxMjQ3NDcsIDEyNDc1MSwgMTI0NzUzLCAxMjQ3NTUsIDEyNDc2MSwgMTI0NzYzLCAxMjQ3NjUsIDEyNDc2NywgMTI0NzcxLCAKLSAgICAxMjQ3NzUsIDEyNDc3NywgMTI0NzgxLCAxMjQ3ODMsIDEyNDc4NSwgMTI0Nzg4LCAxMjQ3OTIsIDEyNDc5NCwgMTI0Nzk4LCAKLSAgICAxMjQ4MDAsIDEyNDgwMiwgMTI0ODA3LCAxMjQ4MDksIDEyNDgxMywgMTI0ODE3LCAxMjQ4MjAsIDEyNDgyNCwgMTI0ODI4LCAKLSAgICAxMjQ4MzIsIDEyNDgzNiwgMTI0ODQwLCAxMjQ4NDQsIDEyNDg0OCwgMTI0ODUzLCAxMjQ4NTcsIDEyNDg2MSwgMTI0ODcwLCAKLSAgICAxMjQ4NzUsIDEyNDg3OCwgMTI0ODgwLCAxMjQ4ODMsIDEyNDg4NiwgMTI0ODkxLCAxMjQ4OTMsIDEyNDg5NiwgMTI0OTAxLCAKLSAgICAxMjQ5MDUsIDEyNDkwOCwgMTI0OTEyLCAxMjQ5MTYsIDEyNDkxOSwgMTI0OTI0LCAxMjQ5MjgsIDEyNDkzMiwgMTI0OTM2LCAKLSAgICAxMjQ5NDAsIDEyNDk0NiwgMTI0OTUyLCAxMjQ5NTgsIDEyNDk2NCwgMTI0OTY5LCAxMjQ5ODAsIDEyNDk4MiwgMTI0OTg2LCAKLSAgICAxMjQ5ODgsIDEyNDk5MCwgMTI0OTk0LCAxMjQ5OTgsIDEyNTAwMCwgMTI1MDA0LCAxMjUwMDksIDEyNTAxNCwgMTI1MDIwLCAKLSAgICAxMjUwMjIsIDEyNTAyNiwgMTI1MDMwLCAxMjUwMzcsIDEyNTA0NCwgMTI1MDQ4LCAxMjUwNTAsIDEyNTA1MiwgMTI1MDU2LCAKLSAgICAxMjUwNTgsIDEyNTA2MiwgMTI1MDY2LCAxMjUwNzAsIDEyNTA3MiwgMTI1MDc0LCAxMjUwODEsIDEyNTA4NSwgMTI1MDg4LCAKLSAgICAxMjUwOTIsIDEyNTA5NiwgMTI1MTAwLCAxMjUxMDIsIDEyNTEwNiwgMTI1MTA4LCAxMjUxMTAsIDEyNTExNCwgMTI1MTE2LCAKLSAgICAxMjUxMjAsIDEyNTEyNCwgMTI1MTMwLCAxMjUxMzQsIDEyNTEzOCwgMTI1MTQyLCAxMjUxNDQsIDEyNTE0NywgMTI1MTUxLCAKLSAgICAxMjUxNTgsIDEyNTE2NywgMTI1MTc2LCAxMjUxODQsIDEyNTE5MiwgMTI1MTk0LCAxMjUxOTgsIDEyNTIwMCwgMTI1MjA0LCAKLSAgICAxMjUyMTUsIDEyNTIxOSwgMTI1MjI1LCAxMjUyMzEsIDEyNTIzNiwgMCwgMTI1MjM4LCAxMjUyNDIsIDEyNTI0NCwgCi0gICAgMTI1MjQ2LCAwLCAwLCAwLCAxMjUyNDgsIDEyNTI1MywgMTI1MjYzLCAxMjUyNzgsIDEyNTI5MCwgMTI1MzAyLCAxMjUzMDYsIAotICAgIDEyNTMxMCwgMTI1MzE2LCAxMjUzMTgsIDEyNTMyNiwgMTI1MzM0LCAxMjUzMzYsIDEyNTM0MCwgMTI1MzQ2LCAxMjUzNTIsIAotICAgIDEyNTM1OSwgMTI1MzY2LCAxMjUzNjgsIDEyNTM3MCwgMTI1MzczLCAxMjUzNzUsIDEyNTM4MSwgMTI1MzgzLCAxMjUzODYsIAotICAgIDEyNTM5MCwgMTI1Mzk2LCAxMjU0MDIsIDEyNTQxMywgMTI1NDE5LCAxMjU0MjYsIDEyNTQzNCwgMTI1NDM4LCAxMjU0NDYsIAotICAgIDEyNTQ1NCwgMTI1NDYwLCAxMjU0NjYsIDEyNTQ3MywgMTI1NDc1LCAxMjU0NzksIDEyNTQ4MSwgMTI1NDgzLCAxMjU0ODgsIAotICAgIDEyNTQ5MCwgMTI1NDkyLCAxMjU0OTQsIDEyNTQ5NiwgMTI1NTAwLCAxMjU1MTEsIDEyNTUxNywgMTI1NTIxLCAxMjU1MjUsIAotICAgIDEyNTUyOSwgMTI1NTM1LCAxMjU1NDEsIDEyNTU0NywgMTI1NTUzLCAxMjU1NTgsIDEyNTU2MywgMTI1NTY5LCAxMjU1NzUsIAotICAgIDEyNTU4MiwgMCwgMCwgMTI1NTg5LCAxMjU1OTQsIDEyNTYwMiwgMTI1NjA2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjU2MTUsIDEyNTYyMiwgMTI1NjI5LCAxMjU2MzYsIDEyNTY0NCwgMTI1NjUyLCAxMjU2NjAsIDEyNTY2OCwgCi0gICAgMTI1Njc2LCAxMjU2ODQsIDEyNTY5MiwgMTI1NzAwLCAxMjU3MDgsIDEyNTcxNCwgMTI1NzIwLCAxMjU3MjYsIDEyNTczMiwgCi0gICAgMTI1NzM4LCAxMjU3NDQsIDEyNTc1MCwgMTI1NzU2LCAxMjU3NjIsIDEyNTc2OCwgMTI1Nzc0LCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjMwNTUsIDEyMzA2MiwgMTIzMDcwLCAKKyAgICAxMjMwNzgsIDEyMzA4NiwgMTIzMDkzLCAxMjMxMDEsIDEyMzEwOSwgMTIzMTE3LCAxMjMxMjQsIDEyMzEzMiwgMTIzMTQwLCAKKyAgICAxMjMxNDcsIDEyMzE1NCwgMTIzMTYyLCAxMjMxNjksIDEyMzE3NywgMTIzMTg1LCAxMjMxOTIsIDEyMzIwMCwgMTIzMjA4LCAKKyAgICAxMjMyMTUsIDEyMzIyMywgMTIzMjMxLCAxMjMyMzksIDEyMzI0NywgMTIzMjU1LCAxMjMyNTksIDEyMzI2MywgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzMjY2LCAxMjMyNzIsIDEyMzI3OCwgMTIzMjg0LCAxMjMyODgsIAorICAgIDEyMzI5NCwgMTIzMzAwLCAxMjMzMDYsIDEyMzMxMiwgMTIzMzE4LCAxMjMzMjQsIDEyMzMzMCwgMTIzMzM2LCAxMjMzNDIsIAorICAgIDEyMzM0OCwgMTIzMzU0LCAxMjMzNjAsIDEyMzM2NiwgMTIzMzcyLCAxMjMzNzgsIDEyMzM4NCwgMTIzMzkwLCAxMjMzOTYsIAorICAgIDEyMzQwMiwgMTIzNDA4LCAxMjM0MTQsIDEyMzQyMCwgMTIzNDI2LCAxMjM0MzIsIDEyMzQzOCwgMTIzNDQ0LCAxMjM0NTAsIAorICAgIDEyMzQ1NiwgMTIzNDYyLCAxMjM0NjgsIDEyMzQ3NCwgMTIzNDgwLCAxMjM0ODYsIDEyMzQ5MiwgMTIzNDk4LCAxMjM1MDQsIAorICAgIDEyMzUxMCwgMTIzNTE2LCAwLCAwLCAwLCAwLCAwLCAxMjM1MjIsIDEyMzUzMywgMTIzNTQ0LCAxMjM1NTUsIDEyMzU2NiwgCisgICAgMTIzNTc3LCAxMjM1ODgsIDEyMzU5OSwgMTIzNjEwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjM2MjEsIDEyMzYyNSwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTIzNjI5LCAKKyAgICAxMjM2MzEsIDEyMzYzMywgMTIzNjM3LCAxMjM2NDIsIDEyMzY0NywgMTIzNjQ5LCAxMjM2NTUsIDEyMzY2MCwgMTIzNjYyLCAKKyAgICAxMjM2NjgsIDEyMzY3MiwgMTIzNjc0LCAxMjM2NzgsIDEyMzY4NCwgMTIzNjkwLCAxMjM2OTYsIDEyMzcwMSwgMTIzNzA1LCAKKyAgICAxMjM3MTIsIDEyMzcxOSwgMTIzNzI2LCAxMjM3MzEsIDEyMzczOCwgMTIzNzQ1LCAxMjM3NTIsIDEyMzc1NiwgMTIzNzYyLCAKKyAgICAxMjM3NzEsIDEyMzc4MCwgMTIzNzg3LCAxMjM3OTIsIDEyMzc5NiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMTIzODAwLCAxMjM4MDIsIDEyMzgwNCwgMTIzODA4LCAxMjM4MTIsIDEyMzgxNiwgMCwgMTIzODE4LCAKKyAgICAxMjM4MjAsIDEyMzgyNCwgMTIzODI2LCAxMjM4MjgsIDEyMzgzMCwgMTIzODMyLCAxMjM4MzcsIDEyMzg0MiwgMTIzODQ0LCAKKyAgICAxMjM4NTAsIDEyMzg1NCwgMTIzODU4LCAxMjM4NjYsIDEyMzg2OCwgMTIzODcwLCAxMjM4NzIsIDEyMzg3NCwgMTIzODc2LCAKKyAgICAxMjM4NzgsIDEyMzg4MCwgMTIzODgyLCAxMjM4ODQsIDEyMzg4NiwgMTIzODkwLCAxMjM4OTQsIDEyMzg5NiwgMTIzODk4LCAKKyAgICAxMjM5MDAsIDEyMzkwMiwgMTIzOTA0LCAxMjM5MDksIDEyMzkxNSwgMTIzOTE5LCAxMjM5MjMsIDEyMzkyNywgMTIzOTMxLCAKKyAgICAxMjM5MzYsIDEyMzk0MCwgMTIzOTQyLCAxMjM5NDQsIDEyMzk0OCwgMTIzOTU0LCAxMjM5NTYsIDEyMzk1OCwgMTIzOTYwLCAKKyAgICAxMjM5NjQsIDEyMzk3MywgMTIzOTc5LCAxMjM5ODMsIDEyMzk4NywgMTIzOTg5LCAxMjM5OTEsIDEyMzk5NCwgMTIzOTk2LCAKKyAgICAxMjM5OTgsIDEyNDAwMCwgMTI0MDA0LCAxMjQwMDYsIDEyNDAxMCwgMTI0MDE1LCAxMjQwMTcsIDEyNDAyMiwgMTI0MDI4LCAKKyAgICAxMjQwMzUsIDEyNDAzOSwgMTI0MDQzLCAxMjQwNDcsIDEyNDA1MSwgMTI0MDU3LCAwLCAwLCAwLCAxMjQwNjEsIDEyNDA2MywgCisgICAgMTI0MDY3LCAxMjQwNzEsIDEyNDA3MywgMTI0MDc3LCAxMjQwODEsIDEyNDA4MywgMTI0MDg3LCAxMjQwODksIDEyNDA5MywgCisgICAgMTI0MDk3LCAxMjQxMDEsIDEyNDEwNSwgMTI0MTA5LCAxMjQxMTMsIDEyNDExNywgMTI0MTIxLCAxMjQxMjcsIDEyNDEzMSwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI0MTM1LCAxMjQxMzksIDEyNDE0MywgMTI0MTQ3LCAKKyAgICAxMjQxNTQsIDEyNDE1NiwgMTI0MTYwLCAxMjQxNjIsIDEyNDE2NCwgMTI0MTY4LCAxMjQxNzIsIDEyNDE3NiwgMTI0MTc4LCAKKyAgICAxMjQxODIsIDEyNDE4NiwgMTI0MTkwLCAxMjQxOTQsIDEyNDE5OCwgMTI0MjAwLCAxMjQyMDQsIDEyNDIwNiwgMTI0MjEyLCAKKyAgICAxMjQyMTUsIDEyNDIyMCwgMTI0MjIyLCAxMjQyMjQsIDEyNDIyNywgMTI0MjI5LCAxMjQyMzEsIDEyNDIzNCwgMTI0MjQxLCAKKyAgICAxMjQyNDgsIDEyNDI1NSwgMTI0MjYwLCAxMjQyNjQsIDEyNDI2NiwgMTI0MjY4LCAwLCAxMjQyNzAsIDEyNDI3MiwgCisgICAgMTI0Mjc2LCAxMjQyODAsIDEyNDI4NCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMTI0Mjg2LCAxMjQyOTAsIDEyNDI5NSwgMTI0Mjk5LCAxMjQzMDUsIDEyNDMxMSwgMTI0MzEzLCAKKyAgICAxMjQzMTUsIDEyNDMyMSwgMTI0MzIzLCAxMjQzMjcsIDEyNDMzMSwgMTI0MzMzLCAxMjQzMzcsIDEyNDMzOSwgMTI0MzQzLCAKKyAgICAxMjQzNDcsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNDM1MSwgMTI0MzUzLCAKKyAgICAxMjQzNTUsIDEyNDM1NywgMTI0MzYxLCAxMjQzNjMsIDEyNDM2NSwgMTI0MzY3LCAxMjQzNjksIDEyNDM3MSwgMTI0MzczLCAKKyAgICAxMjQzNzUsIDEyNDM3NywgMTI0Mzc5LCAxMjQzODEsIDEyNDM4MywgMTI0Mzg1LCAxMjQzODcsIDEyNDM4OSwgMTI0MzkxLCAKKyAgICAxMjQzOTMsIDEyNDM5NSwgMTI0Mzk3LCAxMjQzOTksIDEyNDQwMSwgMTI0NDAzLCAxMjQ0MDUsIDEyNDQwOSwgMTI0NDExLCAKKyAgICAxMjQ0MTMsIDEyNDQxNSwgMTI0NDE5LCAxMjQ0MjEsIDEyNDQyNSwgMTI0NDI3LCAxMjQ0MjksIDEyNDQzMywgMTI0NDM3LCAKKyAgICAxMjQ0NDMsIDEyNDQ0NSwgMTI0NDQ3LCAxMjQ0NDksIDEyNDQ1MSwgMTI0NDU1LCAxMjQ0NTksIDEyNDQ2MSwgMTI0NDY1LCAKKyAgICAxMjQ0NjksIDEyNDQ3MywgMTI0NDc3LCAxMjQ0ODEsIDEyNDQ4NSwgMTI0NDg5LCAxMjQ0OTMsIDEyNDQ5NywgMTI0NTAxLCAKKyAgICAxMjQ1MDUsIDEyNDUwOSwgMTI0NTEzLCAxMjQ1MTcsIDEyNDUyMSwgMTI0NTI1LCAxMjQ1MjksIDAsIDEyNDUzMywgMCwgCisgICAgMTI0NTM1LCAxMjQ1MzcsIDEyNDUzOSwgMTI0NTQxLCAxMjQ1NDMsIDEyNDU1MSwgMTI0NTU5LCAxMjQ1NjcsIDEyNDU3NSwgCisgICAgMTI0NTgwLCAxMjQ1ODUsIDEyNDU5MCwgMTI0NTk0LCAxMjQ1OTgsIDEyNDYwMywgMTI0NjA3LCAxMjQ2MDksIDEyNDYxMywgCisgICAgMTI0NjE1LCAxMjQ2MTcsIDEyNDYxOSwgMTI0NjIxLCAxMjQ2MjMsIDEyNDYyNSwgMTI0NjI3LCAxMjQ2MzEsIDEyNDYzMywgCisgICAgMTI0NjM1LCAxMjQ2MzcsIDEyNDY0MSwgMTI0NjQ1LCAxMjQ2NDksIDEyNDY1MywgMTI0NjU3LCAxMjQ2NTksIDEyNDY2NSwgCisgICAgMTI0NjcxLCAxMjQ2NzMsIDEyNDY3NSwgMTI0Njc3LCAxMjQ2NzksIDEyNDY4MSwgMTI0NjkwLCAxMjQ2OTcsIDEyNDcwNCwgCisgICAgMTI0NzA4LCAxMjQ3MTUsIDEyNDcyMCwgMTI0NzI3LCAxMjQ3MzYsIDEyNDc0MSwgMTI0NzQ1LCAxMjQ3NDksIDEyNDc1MSwgCisgICAgMTI0NzU1LCAxMjQ3NTcsIDEyNDc2MSwgMTI0NzY1LCAxMjQ3NjcsIDEyNDc3MSwgMTI0Nzc1LCAxMjQ3NzksIDEyNDc4MSwgCisgICAgMTI0NzgzLCAxMjQ3ODksIDEyNDc5MSwgMTI0NzkzLCAxMjQ3OTUsIDEyNDc5OSwgMTI0ODAzLCAxMjQ4MDUsIDEyNDgwOSwgCisgICAgMTI0ODExLCAxMjQ4MTMsIDEyNDgxNiwgMTI0ODIwLCAxMjQ4MjIsIDEyNDgyNiwgMTI0ODI4LCAxMjQ4MzAsIDEyNDgzNSwgCisgICAgMTI0ODM3LCAxMjQ4NDEsIDEyNDg0NSwgMTI0ODQ4LCAxMjQ4NTIsIDEyNDg1NiwgMTI0ODYwLCAxMjQ4NjQsIDEyNDg2OCwgCisgICAgMTI0ODcyLCAxMjQ4NzYsIDEyNDg4MSwgMTI0ODg1LCAxMjQ4ODksIDEyNDg5OCwgMTI0OTAzLCAxMjQ5MDYsIDEyNDkwOCwgCisgICAgMTI0OTExLCAxMjQ5MTQsIDEyNDkxOSwgMTI0OTIxLCAxMjQ5MjQsIDEyNDkyOSwgMTI0OTMzLCAxMjQ5MzYsIDEyNDk0MCwgCisgICAgMTI0OTQ0LCAxMjQ5NDcsIDEyNDk1MiwgMTI0OTU2LCAxMjQ5NjAsIDEyNDk2NCwgMTI0OTY4LCAxMjQ5NzQsIDEyNDk4MCwgCisgICAgMTI0OTg2LCAxMjQ5OTIsIDEyNDk5NywgMTI1MDA4LCAxMjUwMTAsIDEyNTAxNCwgMTI1MDE2LCAxMjUwMTgsIDEyNTAyMiwgCisgICAgMTI1MDI2LCAxMjUwMjgsIDEyNTAzMiwgMTI1MDM3LCAxMjUwNDIsIDEyNTA0OCwgMTI1MDUwLCAxMjUwNTQsIDEyNTA1OCwgCisgICAgMTI1MDY1LCAxMjUwNzIsIDEyNTA3NiwgMTI1MDc4LCAxMjUwODAsIDEyNTA4NCwgMTI1MDg2LCAxMjUwOTAsIDEyNTA5NCwgCisgICAgMTI1MDk4LCAxMjUxMDAsIDEyNTEwMiwgMTI1MTA5LCAxMjUxMTMsIDEyNTExNiwgMTI1MTIwLCAxMjUxMjQsIDEyNTEyOCwgCisgICAgMTI1MTMwLCAxMjUxMzQsIDEyNTEzNiwgMTI1MTM4LCAxMjUxNDIsIDEyNTE0NCwgMTI1MTQ4LCAxMjUxNTIsIDEyNTE1OCwgCisgICAgMTI1MTYyLCAxMjUxNjYsIDEyNTE3MCwgMTI1MTcyLCAxMjUxNzUsIDEyNTE3OSwgMTI1MTg2LCAxMjUxOTUsIDEyNTIwNCwgCisgICAgMTI1MjEyLCAxMjUyMjAsIDEyNTIyMiwgMTI1MjI2LCAxMjUyMjgsIDEyNTIzMiwgMTI1MjQzLCAxMjUyNDcsIDEyNTI1MywgCisgICAgMTI1MjU5LCAxMjUyNjQsIDAsIDEyNTI2NiwgMTI1MjcwLCAxMjUyNzIsIDEyNTI3NCwgMCwgMCwgMCwgMTI1Mjc2LCAKKyAgICAxMjUyODEsIDEyNTI5MSwgMTI1MzA2LCAxMjUzMTgsIDEyNTMzMCwgMTI1MzM0LCAxMjUzMzgsIDEyNTM0NCwgMTI1MzQ2LCAKKyAgICAxMjUzNTQsIDEyNTM2MiwgMTI1MzY0LCAxMjUzNjgsIDEyNTM3NCwgMTI1MzgwLCAxMjUzODcsIDEyNTM5NCwgMTI1Mzk2LCAKKyAgICAxMjUzOTgsIDEyNTQwMSwgMTI1NDAzLCAxMjU0MDksIDEyNTQxMSwgMTI1NDE0LCAxMjU0MTgsIDEyNTQyNCwgMTI1NDMwLCAKKyAgICAxMjU0NDEsIDEyNTQ0NywgMTI1NDU0LCAxMjU0NjIsIDEyNTQ2NiwgMTI1NDc0LCAxMjU0ODIsIDEyNTQ4OCwgMTI1NDk0LCAKKyAgICAxMjU1MDEsIDEyNTUwMywgMTI1NTA3LCAxMjU1MDksIDEyNTUxMSwgMTI1NTE2LCAxMjU1MTgsIDEyNTUyMCwgMTI1NTIyLCAKKyAgICAxMjU1MjQsIDEyNTUyOCwgMTI1NTM5LCAxMjU1NDUsIDEyNTU0OSwgMTI1NTUzLCAxMjU1NTcsIDEyNTU2MywgMTI1NTY5LCAKKyAgICAxMjU1NzUsIDEyNTU4MSwgMTI1NTg2LCAxMjU1OTEsIDEyNTU5NywgMTI1NjAzLCAxMjU2MTAsIDAsIDAsIDEyNTYxNywgCisgICAgMTI1NjIyLCAxMjU2MzAsIDEyNTYzNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1NjQzLCAKKyAgICAxMjU2NTAsIDEyNTY1NywgMTI1NjY0LCAxMjU2NzIsIDEyNTY4MCwgMTI1Njg4LCAxMjU2OTYsIDEyNTcwNCwgMTI1NzEyLCAKKyAgICAxMjU3MjAsIDEyNTcyOCwgMTI1NzM2LCAxMjU3NDIsIDEyNTc0OCwgMTI1NzU0LCAxMjU3NjAsIDEyNTc2NiwgMTI1NzcyLCAKKyAgICAxMjU3NzgsIDEyNTc4NCwgMTI1NzkwLCAxMjU3OTYsIDEyNTgwMiwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1NzgwLCAKLSAgICAxMjU3ODQsIDEyNTc4OCwgMTI1NzkzLCAxMjU3OTgsIDEyNTgwMCwgMTI1ODA0LCAxMjU4MTMsIDEyNTgyMSwgMTI1ODI5LCAKLSAgICAxMjU4NDIsIDEyNTg1NSwgMTI1ODY4LCAxMjU4NzUsIDEyNTg4MiwgMTI1ODg2LCAxMjU4OTUsIDEyNTkwMywgMTI1OTA3LCAKLSAgICAxMjU5MTYsIDEyNTkyMywgMTI1OTI3LCAxMjU5MzEsIDEyNTkzNSwgMTI1OTM5LCAxMjU5NDYsIDEyNTk1MCwgMTI1OTU0LCAKLSAgICAxMjU5NTgsIDEyNTk2MiwgMTI1OTY5LCAxMjU5NzgsIDEyNTk4NywgMTI1OTk0LCAxMjYwMDYsIDEyNjAxOCwgMTI2MDIyLCAKLSAgICAxMjYwMjYsIDEyNjAzMCwgMTI2MDM0LCAxMjYwMzgsIDEyNjA0MiwgMTI2MDUwLCAxMjYwNTgsIDEyNjA2NiwgMTI2MDcwLCAKLSAgICAxMjYwNzQsIDEyNjA3OCwgMTI2MDgyLCAxMjYwODYsIDEyNjA5MCwgMTI2MDk2LCAxMjYxMDIsIDEyNjEwNiwgMTI2MTE3LCAKLSAgICAxMjYxMjUsIDEyNjEyOSwgMTI2MTMzLCAxMjYxMzcsIDEyNjE0MSwgMTI2MTQ3LCAxMjYxNTQsIDEyNjE2NSwgMTI2MTc1LCAKLSAgICAxMjYxODUsIDEyNjE5NiwgMTI2MjA1LCAxMjYyMTYsIDEyNjIyMiwgMTI2MjI4LCAwLCAwLCAwLCAwLCAxMjYyMzQsIAotICAgIDEyNjI0MywgMTI2MjUwLCAxMjYyNTYsIDEyNjI2MCwgMTI2MjY0LCAxMjYyNjgsIDEyNjI3NywgMTI2Mjg5LCAxMjYyOTMsIAotICAgIDEyNjMwMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI1ODA4LCAxMjU4MTIsIDEyNTgxNiwgCisgICAgMTI1ODIxLCAxMjU4MjYsIDEyNTgyOCwgMTI1ODMyLCAxMjU4NDEsIDEyNTg0OSwgMTI1ODU3LCAxMjU4NzAsIDEyNTg4MywgCisgICAgMTI1ODk2LCAxMjU5MDMsIDEyNTkxMCwgMTI1OTE0LCAxMjU5MjMsIDEyNTkzMSwgMTI1OTM1LCAxMjU5NDQsIDEyNTk1MSwgCisgICAgMTI1OTU1LCAxMjU5NTksIDEyNTk2MywgMTI1OTY3LCAxMjU5NzQsIDEyNTk3OCwgMTI1OTgyLCAxMjU5ODYsIDEyNTk5MCwgCisgICAgMTI1OTk3LCAxMjYwMDYsIDEyNjAxNSwgMTI2MDIyLCAxMjYwMzQsIDEyNjA0NiwgMTI2MDUwLCAxMjYwNTQsIDEyNjA1OCwgCisgICAgMTI2MDYyLCAxMjYwNjYsIDEyNjA3MCwgMTI2MDc4LCAxMjYwODYsIDEyNjA5NCwgMTI2MDk4LCAxMjYxMDIsIDEyNjEwNiwgCisgICAgMTI2MTEwLCAxMjYxMTQsIDEyNjExOCwgMTI2MTI0LCAxMjYxMzAsIDEyNjEzNCwgMTI2MTQ1LCAxMjYxNTMsIDEyNjE1NywgCisgICAgMTI2MTYxLCAxMjYxNjUsIDEyNjE2OSwgMTI2MTc1LCAxMjYxODIsIDEyNjE5MywgMTI2MjAzLCAxMjYyMTMsIDEyNjIyNCwgCisgICAgMTI2MjMzLCAxMjYyNDQsIDEyNjI1MCwgMTI2MjU2LCAwLCAwLCAwLCAwLCAxMjYyNjIsIDEyNjI3MSwgMTI2Mjc4LCAKKyAgICAxMjYyODQsIDEyNjI4OCwgMTI2MjkyLCAxMjYyOTYsIDEyNjMwNSwgMTI2MzE3LCAxMjYzMjEsIDEyNjMyOCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCi0gICAgMCwgMCwgMTI2MzA3LCAxMjYzMDksIDEyNjMxMSwgMTI2MzE1LCAxMjYzMTksIDEyNjMyMywgMTI2MzMyLCAxMjYzMzQsIAotICAgIDEyNjMzNiwgMTI2MzM5LCAxMjYzNDEsIDEyNjM0MywgMTI2MzQ3LCAxMjYzNDksIDEyNjM1MywgMTI2MzU1LCAxMjYzNTksIAotICAgIDEyNjM2MSwgMTI2MzYzLCAxMjYzNjcsIDEyNjM3MSwgMTI2Mzc3LCAxMjYzNzksIDEyNjM4MywgMTI2Mzg1LCAxMjYzODksIAotICAgIDEyNjM5MywgMTI2Mzk3LCAxMjY0MDEsIDEyNjQwMywgMTI2NDA1LCAxMjY0MDksIDEyNjQxMywgMTI2NDE3LCAxMjY0MjEsIAotICAgIDEyNjQyMywgMTI2NDI1LCAxMjY0MjcsIDEyNjQzMiwgMTI2NDM3LCAxMjY0NDAsIDEyNjQ0OCwgMTI2NDU2LCAxMjY0NTgsIAotICAgIDEyNjQ2MywgMTI2NDY2LCAxMjY0NzEsIDEyNjQ4MiwgMTI2NDg5LCAxMjY0OTQsIDEyNjQ5OSwgMTI2NTAxLCAxMjY1MDUsIAotICAgIDEyNjUwNywgMTI2NTExLCAxMjY1MTMsIDEyNjUxNywgMTI2NTIxLCAxMjY1MjQsIDEyNjUyNywgMTI2NTI5LCAxMjY1MzIsIAotICAgIDEyNjUzNCwgMTI2NTM4LCAxMjY1NDAsIDEyNjU0MiwgMTI2NTQ0LCAxMjY1NDgsIDEyNjU1MCwgMTI2NTU0LCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjYzMzUsIAorICAgIDEyNjMzNywgMTI2MzM5LCAxMjYzNDMsIDEyNjM0NywgMTI2MzUxLCAxMjYzNjAsIDEyNjM2MiwgMTI2MzY0LCAxMjYzNjcsIAorICAgIDEyNjM2OSwgMTI2MzcxLCAxMjYzNzUsIDEyNjM3NywgMTI2MzgxLCAxMjYzODMsIDEyNjM4NywgMTI2Mzg5LCAxMjYzOTEsIAorICAgIDEyNjM5NSwgMTI2Mzk5LCAxMjY0MDUsIDEyNjQwNywgMTI2NDExLCAxMjY0MTMsIDEyNjQxNywgMTI2NDIxLCAxMjY0MjUsIAorICAgIDEyNjQyOSwgMTI2NDMxLCAxMjY0MzMsIDEyNjQzNywgMTI2NDQxLCAxMjY0NDUsIDEyNjQ0OSwgMTI2NDUxLCAxMjY0NTMsIAorICAgIDEyNjQ1NSwgMTI2NDYwLCAxMjY0NjUsIDEyNjQ2OCwgMTI2NDc2LCAxMjY0ODQsIDEyNjQ4NiwgMTI2NDkxLCAxMjY0OTQsIAorICAgIDEyNjQ5OSwgMTI2NTEwLCAxMjY1MTcsIDEyNjUyMiwgMTI2NTI3LCAxMjY1MjksIDEyNjUzMywgMTI2NTM1LCAxMjY1MzksIAorICAgIDEyNjU0MSwgMTI2NTQ1LCAxMjY1NDksIDEyNjU1MiwgMTI2NTU1LCAxMjY1NTcsIDEyNjU2MCwgMTI2NTYyLCAxMjY1NjYsIAorICAgIDEyNjU2OCwgMTI2NTcwLCAxMjY1NzIsIDEyNjU3NiwgMTI2NTc4LCAxMjY1ODIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNjU1NywgMTI2NTYyLCAxMjY1NjcsIDEyNjU3MiwgMTI2NTc3LCAxMjY1ODIsIAotICAgIDEyNjU4NywgMTI2NTk0LCAxMjY2MDEsIDEyNjYwOCwgMTI2NjE1LCAxMjY2MjAsIDEyNjYyNSwgMTI2NjMwLCAxMjY2MzUsIAotICAgIDEyNjY0MiwgMTI2NjQ4LCAxMjY2NTUsIDEyNjY2MiwgMTI2NjY5LCAxMjY2NzQsIDEyNjY3OSwgMTI2Njg0LCAxMjY2ODksIAotICAgIDEyNjY5NCwgMTI2NzAxLCAxMjY3MDgsIDEyNjcxMywgMTI2NzE4LCAxMjY3MjUsIDEyNjczMiwgMTI2NzQwLCAxMjY3NDgsIAotICAgIDEyNjc1NSwgMTI2NzYyLCAxMjY3NzAsIDEyNjc3OCwgMTI2Nzg2LCAxMjY3OTMsIDEyNjgwMywgMTI2ODE0LCAxMjY4MTksIAotICAgIDEyNjgyNiwgMTI2ODMzLCAxMjY4NDAsIDEyNjg0OCwgMTI2ODU2LCAxMjY4NjcsIDEyNjg3NSwgMTI2ODgzLCAxMjY4OTEsIAotICAgIDEyNjg5NiwgMTI2OTAxLCAxMjY5MDYsIDEyNjkxMSwgMTI2OTE2LCAxMjY5MjEsIDEyNjkyNiwgMTI2OTMxLCAxMjY5MzYsIAotICAgIDEyNjk0MSwgMTI2OTQ2LCAxMjY5NTEsIDEyNjk1OCwgMTI2OTYzLCAxMjY5NjgsIDEyNjk3NSwgMTI2OTgwLCAxMjY5ODUsIAotICAgIDEyNjk5MCwgMTI2OTk1LCAxMjcwMDAsIDEyNzAwNSwgMTI3MDEwLCAxMjcwMTUsIDEyNzAyMCwgMTI3MDI1LCAxMjcwMzAsIAotICAgIDEyNzAzNSwgMTI3MDQyLCAxMjcwNTAsIDEyNzA1NSwgMTI3MDYwLCAxMjcwNjcsIDEyNzA3MiwgMTI3MDc3LCAxMjcwODIsIAotICAgIDEyNzA4OSwgMTI3MDk0LCAxMjcxMDEsIDEyNzEwNiwgMTI3MTEzLCAxMjcxMTgsIDEyNzEyNywgMTI3MTM2LCAxMjcxNDEsIAotICAgIDEyNzE0NiwgMTI3MTUxLCAxMjcxNTYsIDEyNzE2MSwgMTI3MTY2LCAxMjcxNzEsIDEyNzE3NiwgMTI3MTgxLCAxMjcxODYsIAotICAgIDEyNzE5MSwgMTI3MTk2LCAxMjcyMDEsIDEyNzIwOSwgMTI3MjE3LCAxMjcyMjIsIDEyNzIyNywgMTI3MjMyLCAxMjcyMzcsIAotICAgIDEyNzI0MiwgMTI3MjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcyNTQsIDEyNzI1OCwgCi0gICAgMTI3MjYyLCAxMjcyNjYsIDEyNzI3MCwgMTI3Mjc0LCAxMjcyNzgsIDEyNzI4MiwgMTI3Mjg2LCAxMjcyOTAsIDEyNzI5NCwgCisgICAgMCwgMCwgMTI2NTg1LCAxMjY1OTAsIDEyNjU5NSwgMTI2NjAwLCAxMjY2MDUsIDEyNjYxMCwgMTI2NjE1LCAxMjY2MjIsIAorICAgIDEyNjYyOSwgMTI2NjM2LCAxMjY2NDMsIDEyNjY0OCwgMTI2NjUzLCAxMjY2NTgsIDEyNjY2MywgMTI2NjcwLCAxMjY2NzYsIAorICAgIDEyNjY4MywgMTI2NjkwLCAxMjY2OTcsIDEyNjcwMiwgMTI2NzA3LCAxMjY3MTIsIDEyNjcxNywgMTI2NzIyLCAxMjY3MjksIAorICAgIDEyNjczNiwgMTI2NzQxLCAxMjY3NDYsIDEyNjc1MywgMTI2NzYwLCAxMjY3NjgsIDEyNjc3NiwgMTI2NzgzLCAxMjY3OTAsIAorICAgIDEyNjc5OCwgMTI2ODA2LCAxMjY4MTQsIDEyNjgyMSwgMTI2ODMxLCAxMjY4NDIsIDEyNjg0NywgMTI2ODU0LCAxMjY4NjEsIAorICAgIDEyNjg2OCwgMTI2ODc2LCAxMjY4ODQsIDEyNjg5NSwgMTI2OTAzLCAxMjY5MTEsIDEyNjkxOSwgMTI2OTI0LCAxMjY5MjksIAorICAgIDEyNjkzNCwgMTI2OTM5LCAxMjY5NDQsIDEyNjk0OSwgMTI2OTU0LCAxMjY5NTksIDEyNjk2NCwgMTI2OTY5LCAxMjY5NzQsIAorICAgIDEyNjk3OSwgMTI2OTg2LCAxMjY5OTEsIDEyNjk5NiwgMTI3MDAzLCAxMjcwMDgsIDEyNzAxMywgMTI3MDE4LCAxMjcwMjMsIAorICAgIDEyNzAyOCwgMTI3MDMzLCAxMjcwMzgsIDEyNzA0MywgMTI3MDQ4LCAxMjcwNTMsIDEyNzA1OCwgMTI3MDYzLCAxMjcwNzAsIAorICAgIDEyNzA3OCwgMTI3MDgzLCAxMjcwODgsIDEyNzA5NSwgMTI3MTAwLCAxMjcxMDUsIDEyNzExMCwgMTI3MTE3LCAxMjcxMjIsIAorICAgIDEyNzEyOSwgMTI3MTM0LCAxMjcxNDEsIDEyNzE0NiwgMTI3MTU1LCAxMjcxNjQsIDEyNzE2OSwgMTI3MTc0LCAxMjcxNzksIAorICAgIDEyNzE4NCwgMTI3MTg5LCAxMjcxOTQsIDEyNzE5OSwgMTI3MjA0LCAxMjcyMDksIDEyNzIxNCwgMTI3MjE5LCAxMjcyMjQsIAorICAgIDEyNzIyOSwgMTI3MjM3LCAxMjcyNDUsIDEyNzI1MCwgMTI3MjU1LCAxMjcyNjAsIDEyNzI2NSwgMTI3MjcwLCAxMjcyNzYsIAorICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyNzI4MiwgMTI3Mjg2LCAxMjcyOTAsIDEyNzI5NCwgCiAgICAgMTI3Mjk4LCAxMjczMDIsIDEyNzMwNiwgMTI3MzEwLCAxMjczMTQsIDEyNzMxOCwgMTI3MzIyLCAxMjczMjYsIDEyNzMzMCwgCiAgICAgMTI3MzM0LCAxMjczMzgsIDEyNzM0MiwgMTI3MzQ2LCAxMjczNTAsIDEyNzM1NCwgMTI3MzU4LCAxMjczNjIsIDEyNzM2NiwgCiAgICAgMTI3MzcwLCAxMjczNzQsIDEyNzM3OCwgMTI3MzgyLCAxMjczODYsIDEyNzM5MCwgMTI3Mzk0LCAxMjczOTgsIDEyNzQwMiwgCkBAIC0xNjkzNSwxNzcgKzE2OTUyLDE3OSBAQAogICAgIDEyOTMxNCwgMTI5MzE4LCAxMjkzMjIsIDEyOTMyNiwgMTI5MzMwLCAxMjkzMzQsIDEyOTMzOCwgMTI5MzQyLCAxMjkzNDYsIAogICAgIDEyOTM1MCwgMTI5MzU0LCAxMjkzNTgsIDEyOTM2MiwgMTI5MzY2LCAxMjkzNzAsIDEyOTM3NCwgMTI5Mzc4LCAxMjkzODIsIAogICAgIDEyOTM4NiwgMTI5MzkwLCAxMjkzOTQsIDEyOTM5OCwgMTI5NDAyLCAxMjk0MDYsIDEyOTQxMCwgMTI5NDE0LCAxMjk0MTgsIAorICAgIDEyOTQyMiwgMTI5NDI2LCAxMjk0MzAsIDEyOTQzNCwgMTI5NDM4LCAxMjk0NDIsIDEyOTQ0NiwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTI5NDUwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAxMjk0MjIsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEyOTQyNiwgMTI5NDI5LCAxMjk0MzMsIDEyOTQzNywgMTI5NDQwLCAKLSAgICAxMjk0NDQsIDEyOTQ0OCwgMTI5NDUxLCAxMjk0NTQsIDEyOTQ1OCwgMTI5NDYyLCAxMjk0NjUsIDEyOTQ2OCwgMTI5NDcxLCAKLSAgICAxMjk0NzQsIDEyOTQ3OSwgMTI5NDgyLCAxMjk0ODYsIDEyOTQ4OSwgMTI5NDkyLCAxMjk0OTUsIDEyOTQ5OCwgMTI5NTAxLCAKLSAgICAxMjk1MDQsIDEyOTUwNywgMTI5NTEwLCAxMjk1MTMsIDEyOTUxNiwgMTI5NTE5LCAxMjk1MjMsIDEyOTUyNywgMTI5NTMxLCAKLSAgICAxMjk1MzUsIDEyOTU0MCwgMTI5NTQ1LCAxMjk1NTEsIDEyOTU1NywgMTI5NTYzLCAxMjk1NjgsIDEyOTU3NCwgMTI5NTgwLCAKLSAgICAxMjk1ODYsIDEyOTU5MSwgMTI5NTk3LCAxMjk2MDMsIDEyOTYwOCwgMTI5NjEzLCAxMjk2MTksIDEyOTYyNCwgMTI5NjMwLCAKLSAgICAxMjk2MzYsIDEyOTY0MSwgMTI5NjQ3LCAxMjk2NTMsIDEyOTY1OCwgMTI5NjY0LCAxMjk2NzAsIDEyOTY3NiwgMTI5NjgyLCAKLSAgICAxMjk2ODgsIDEyOTY5MiwgMTI5Njk3LCAxMjk3MDEsIDEyOTcwNiwgMTI5NzEwLCAxMjk3MTUsIDEyOTcyMCwgMTI5NzI2LCAKLSAgICAxMjk3MzIsIDEyOTczOCwgMTI5NzQzLCAxMjk3NDksIDEyOTc1NSwgMTI5NzYxLCAxMjk3NjYsIDEyOTc3MiwgMTI5Nzc4LCAKLSAgICAxMjk3ODMsIDEyOTc4OCwgMTI5Nzk0LCAxMjk3OTksIDEyOTgwNSwgMTI5ODExLCAxMjk4MTYsIDEyOTgyMiwgMTI5ODI4LCAKLSAgICAxMjk4MzMsIDEyOTgzOSwgMTI5ODQ1LCAxMjk4NTEsIDEyOTg1NywgMTI5ODYzLCAxMjk4NjgsIDEyOTg3MiwgMTI5ODc3LCAKLSAgICAxMjk4NzksIDEyOTg4MywgMTI5ODg2LCAxMjk4ODksIDEyOTg5MiwgMTI5ODk1LCAxMjk4OTgsIDEyOTkwMSwgMTI5OTA0LCAKLSAgICAxMjk5MDcsIDEyOTkxMCwgMTI5OTEzLCAxMjk5MTYsIDEyOTkxOSwgMTI5OTIyLCAxMjk5MjUsIDEyOTkyOCwgMTI5OTMxLCAKLSAgICAxMjk5MzQsIDEyOTkzNywgMTI5OTQwLCAxMjk5NDMsIDEyOTk0NiwgMTI5OTQ5LCAxMjk5NTIsIDEyOTk1NSwgMTI5OTU4LCAKLSAgICAxMjk5NjEsIDEyOTk2NCwgMTI5OTY3LCAxMjk5NzAsIDEyOTk3MywgMTI5OTc2LCAxMjk5NzksIDEyOTk4MiwgMTI5OTg1LCAKLSAgICAxMjk5ODgsIDEyOTk5MSwgMTI5OTk0LCAxMjk5OTcsIDEzMDAwMCwgMTMwMDAzLCAxMzAwMDYsIDEzMDAwOSwgMTMwMDEyLCAKLSAgICAxMzAwMTUsIDEzMDAxOCwgMTMwMDIxLCAxMzAwMjQsIDEzMDAyNywgMTMwMDMwLCAxMzAwMzMsIDEzMDAzNiwgMTMwMDM5LCAKLSAgICAxMzAwNDIsIDEzMDA0NSwgMTMwMDQ4LCAxMzAwNTEsIDEzMDA1NCwgMTMwMDU3LCAxMzAwNjAsIDEzMDA2MywgMTMwMDY2LCAKLSAgICAxMzAwNjksIDEzMDA3MiwgMTMwMDc1LCAxMzAwNzgsIDEzMDA4MSwgMTMwMDg0LCAxMzAwODcsIDEzMDA5MCwgMTMwMDkzLCAKLSAgICAxMzAwOTYsIDEzMDA5OSwgMTMwMTAyLCAxMzAxMDUsIDEzMDEwOCwgMTMwMTExLCAxMzAxMTQsIDEzMDExNywgMTMwMTIwLCAKLSAgICAxMzAxMjMsIDEzMDEyNiwgMTMwMTI5LCAxMzAxMzIsIDEzMDEzNSwgMTMwMTM4LCAxMzAxNDEsIDEzMDE0NCwgMTMwMTQ3LCAKLSAgICAxMzAxNTAsIDEzMDE1MywgMTMwMTU2LCAxMzAxNTksIDEzMDE2MiwgMTMwMTY1LCAxMzAxNjgsIDEzMDE3MSwgMTMwMTc0LCAKLSAgICAxMzAxNzcsIDEzMDE4MCwgMTMwMTgzLCAxMzAxODYsIDEzMDE4OSwgMTMwMTkyLCAxMzAxOTUsIDEzMDE5OCwgMTMwMjAxLCAKLSAgICAxMzAyMDQsIDEzMDIwNywgMTMwMjEwLCAxMzAyMTMsIDEzMDIxNiwgMTMwMjE5LCAxMzAyMjIsIDEzMDIyNSwgMTMwMjI4LCAKLSAgICAxMzAyMzEsIDEzMDIzNCwgMTMwMjM3LCAxMzAyNDAsIDEzMDI0MywgMTMwMjQ2LCAxMzAyNDksIDEzMDI1MiwgMTMwMjU1LCAKLSAgICAxMzAyNTgsIDEzMDI2MSwgMTMwMjY0LCAxMzAyNjcsIDEzMDI3MCwgMTMwMjczLCAxMzAyNzYsIDEzMDI3OSwgMTMwMjgyLCAKLSAgICAxMzAyODUsIDEzMDI4OCwgMTMwMjkxLCAxMzAyOTQsIDEzMDI5NywgMTMwMzAwLCAxMzAzMDMsIDEzMDMwNiwgMTMwMzA5LCAKLSAgICAxMzAzMTIsIDEzMDMxNSwgMTMwMzE4LCAxMzAzMjEsIDEzMDMyNCwgMTMwMzI3LCAxMzAzMzAsIDEzMDMzMywgMTMwMzM2LCAKLSAgICAxMzAzMzksIDEzMDM0MiwgMTMwMzQ1LCAxMzAzNDgsIDEzMDM1MSwgMTMwMzU0LCAxMzAzNTcsIDEzMDM2MCwgMTMwMzYzLCAKLSAgICAxMzAzNjYsIDEzMDM2OSwgMTMwMzcyLCAxMzAzNzUsIDEzMDM3OCwgMTMwMzgxLCAxMzAzODQsIDEzMDM4NywgMTMwMzkwLCAKLSAgICAxMzAzOTMsIDEzMDM5NiwgMTMwMzk5LCAxMzA0MDIsIDEzMDQwNSwgMTMwNDA4LCAxMzA0MTEsIDEzMDQxNCwgMTMwNDE3LCAKLSAgICAxMzA0MjAsIDEzMDQyMywgMTMwNDI2LCAxMzA0MjksIDEzMDQzMiwgMTMwNDM1LCAxMzA0MzgsIDEzMDQ0MSwgMTMwNDQ0LCAKLSAgICAxMzA0NDcsIDEzMDQ1MCwgMTMwNDUzLCAxMzA0NTYsIDEzMDQ1OSwgMTMwNDYyLCAxMzA0NjUsIDEzMDQ2OCwgMTMwNDcxLCAKLSAgICAxMzA0NzQsIDEzMDQ3NywgMTMwNDgwLCAxMzA0ODMsIDEzMDQ4NiwgMTMwNDg5LCAxMzA0OTIsIDEzMDQ5NSwgMTMwNDk4LCAKLSAgICAxMzA1MDEsIDEzMDUwNCwgMTMwNTA3LCAxMzA1MTAsIDEzMDUxMywgMTMwNTE2LCAxMzA1MTksIDEzMDUyMiwgMTMwNTI1LCAKLSAgICAxMzA1MjgsIDEzMDUzMSwgMTMwNTM0LCAxMzA1MzcsIDEzMDU0MCwgMTMwNTQzLCAxMzA1NDYsIDEzMDU0OSwgMTMwNTUyLCAKLSAgICAxMzA1NTUsIDEzMDU1OCwgMTMwNTYxLCAxMzA1NjQsIDEzMDU2NywgMTMwNTcwLCAxMzA1NzMsIDEzMDU3NiwgMTMwNTc5LCAKLSAgICAxMzA1ODIsIDEzMDU4NSwgMTMwNTg4LCAxMzA1OTEsIDEzMDU5NCwgMTMwNTk3LCAxMzA2MDAsIDAsIDAsIDAsIDAsIDAsIDAsIAotICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEzMDYwMywgMTMwNjA1LCAxMzA2MDcsIDEzMDYxMiwgMTMwNjE0LCAKLSAgICAxMzA2MTksIDEzMDYyMSwgMTMwNjI2LCAxMzA2MjgsIDEzMDYzMywgMTMwNjM1LCAxMzA2MzcsIDEzMDYzOSwgMTMwNjQxLCAKLSAgICAxMzA2NDMsIDEzMDY0NSwgMTMwNjQ3LCAxMzA2NDksIDEzMDY1MSwgMTMwNjU0LCAxMzA2NTcsIDEzMDY1OSwgMTMwNjYxLCAKLSAgICAxMzA2NjUsIDEzMDY2OCwgMTMwNjczLCAxMzA2NzUsIDEzMDY3NywgMTMwNjc5LCAxMzA2ODMsIDEzMDY4NiwgMTMwNjg4LCAKLSAgICAxMzA2OTIsIDEzMDY5NCwgMTMwNjk4LCAxMzA3MDAsIDEzMDcwNCwgMTMwNzA3LCAxMzA3MDksIDEzMDcxMywgMTMwNzE3LCAKLSAgICAxMzA3MTksIDEzMDcyNSwgMTMwNzI3LCAxMzA3MzIsIDEzMDczNCwgMTMwNzM5LCAxMzA3NDEsIDEzMDc0NiwgMTMwNzQ4LCAKLSAgICAxMzA3NTMsIDEzMDc1NSwgMTMwNzU4LCAxMzA3NjAsIDEzMDc2NCwgMTMwNzY2LCAxMzA3NzMsIDEzMDc3NSwgMTMwNzc3LCAKLSAgICAxMzA3NzksIDEzMDc4NCwgMTMwNzg2LCAxMzA3ODgsIDEzMDc5MCwgMTMwNzkyLCAxMzA3OTQsIDEzMDc5OSwgMTMwODAzLCAKLSAgICAxMzA4MDUsIDEzMDgxMCwgMTMwODE0LCAxMzA4MTYsIDEzMDgyMSwgMTMwODI1LCAxMzA4MjcsIDEzMDgzMiwgMTMwODM2LCAKLSAgICAxMzA4MzgsIDEzMDg0MCwgMTMwODQyLCAxMzA4NDQsIDEzMDg0OCwgMTMwODUwLCAxMzA4NTUsIDEzMDg1NywgMTMwODYzLCAKLSAgICAxMzA4NjUsIDEzMDg3MSwgMTMwODczLCAxMzA4NzUsIDEzMDg3NywgMTMwODgxLCAxMzA4ODMsIDEzMDg5MCwgMTMwODkyLCAKLSAgICAxMzA4OTksIDEzMDkwMSwgMTMwOTA2LCAxMzA5MTEsIDEzMDkxMywgMTMwOTE5LCAxMzA5MjUsIDEzMDkyNywgMTMwOTMzLCAKLSAgICAxMzA5MzgsIDEzMDk0MCwgMTMwOTQ2LCAxMzA5NTIsIDEzMDk1NCwgMTMwOTYwLCAxMzA5NjYsIDEzMDk2OCwgMTMwOTc0LCAKLSAgICAxMzA5NzgsIDEzMDk4MCwgMTMwOTg1LCAxMzA5ODcsIDEzMDk4OSwgMTMwOTk0LCAxMzA5OTYsIDEzMDk5OCwgMTMxMDA0LCAKLSAgICAxMzEwMDYsIDEzMTAxMSwgMTMxMDE1LCAxMzEwMTcsIDEzMTAyMiwgMTMxMDI2LCAxMzEwMjgsIDEzMTAzNCwgMTMxMDM2LCAKLSAgICAxMzEwNDAsIDEzMTA0MiwgMTMxMDQ2LCAxMzEwNDgsIDEzMTA1NSwgMTMxMDYyLCAxMzEwNjQsIDEzMTA3MSwgMTMxMDc4LCAKLSAgICAxMzEwODAsIDEzMTA4NSwgMTMxMDg3LCAxMzEwOTQsIDEzMTA5NiwgMTMxMTAxLCAxMzExMDMsIDEzMTEwOSwgMTMxMTExLCAKLSAgICAxMzExMTUsIDEzMTExNywgMTMxMTIzLCAxMzExMjUsIDEzMTEyOSwgMTMxMTMxLCAxMzExMzcsIDEzMTEzOSwgMTMxMTQxLCAKLSAgICAxMzExNDMsIDEzMTE0OCwgMTMxMTUzLCAxMzExNTUsIDEzMTE1OSwgMTMxMTY2LCAxMzExNzMsIDEzMTE3OCwgMTMxMTgzLCAKLSAgICAxMzExOTUsIDEzMTE5NywgMTMxMTk5LCAxMzEyMDEsIDEzMTIwMywgMTMxMjA1LCAxMzEyMDcsIDEzMTIwOSwgMTMxMjExLCAKLSAgICAxMzEyMTMsIDEzMTIxNSwgMTMxMjE3LCAxMzEyMTksIDEzMTIyMSwgMTMxMjIzLCAxMzEyMjUsIDEzMTIyNywgMTMxMjI5LCAKLSAgICAxMzEyMzUsIDEzMTI0MiwgMTMxMjQ3LCAxMzEyNTIsIDEzMTI2MywgMTMxMjY1LCAxMzEyNjcsIDEzMTI2OSwgMTMxMjcxLCAKLSAgICAxMzEyNzMsIDEzMTI3NSwgMTMxMjc3LCAxMzEyNzksIDEzMTI4MSwgMTMxMjgzLCAxMzEyODUsIDEzMTI4NywgMTMxMjg5LCAKLSAgICAxMzEyOTEsIDEzMTI5MywgMTMxMjk1LCAxMzEzMDAsIDEzMTMwMiwgMTMxMzA0LCAxMzEzMTUsIDEzMTMxNywgMTMxMzE5LCAKLSAgICAxMzEzMjEsIDEzMTMyMywgMTMxMzI1LCAxMzEzMjcsIDEzMTMyOSwgMTMxMzMxLCAxMzEzMzMsIDEzMTMzNSwgMTMxMzM3LCAKLSAgICAxMzEzMzksIDEzMTM0MSwgMTMxMzQzLCAxMzEzNDUsIDEzMTM0NywgMTMxMzQ5LCAxMzEzNTEsIDEzMTM1MywgMTMxMzU1LCAKLSAgICAxMzEzNTcsIDEzMTM1OSwgMTMxMzYxLCAxMzEzNjMsIDEzMTM2NSwgMTMxMzY3LCAxMzEzNjksIDEzMTM3MSwgMTMxMzczLCAKLSAgICAxMzEzNzUsIDEzMTM3NywgMTMxMzc5LCAxMzEzODEsIDEzMTM4MywgMTMxMzg1LCAxMzEzODcsIDEzMTM4OSwgMTMxMzkxLCAKLSAgICAxMzEzOTMsIDEzMTM5NSwgMTMxMzk3LCAxMzEzOTksIDEzMTQwMSwgMTMxNDAzLCAxMzE0MDUsIDEzMTQwNywgMTMxNDA5LCAKLSAgICAxMzE0MTEsIDEzMTQxMywgMTMxNDE1LCAxMzE0MTcsIDEzMTQxOSwgMTMxNDIxLCAxMzE0MjMsIDEzMTQyNSwgMTMxNDI3LCAKLSAgICAxMzE0MjksIDEzMTQzMSwgMTMxNDMzLCAxMzE0MzUsIDEzMTQzNywgMTMxNDM5LCAxMzE0NDEsIDEzMTQ0MywgMTMxNDQ1LCAKLSAgICAxMzE0NDcsIDEzMTQ0OSwgMTMxNDUxLCAxMzE0NTMsIDEzMTQ1NSwgMTMxNDU3LCAxMzE0NTksIDEzMTQ2MSwgMTMxNDYzLCAKLSAgICAxMzE0NjUsIDEzMTQ2NywgMTMxNDY5LCAxMzE0NzEsIDEzMTQ3MywgMTMxNDc1LCAxMzE0NzcsIDEzMTQ3OSwgMTMxNDgxLCAKLSAgICAxMzE0ODMsIDEzMTQ4NSwgMTMxNDg3LCAxMzE0ODksIDEzMTQ5MSwgMTMxNDkzLCAxMzE0OTUsIDEzMTQ5NywgMTMxNDk5LCAKLSAgICAxMzE1MDEsIDEzMTUwMywgMTMxNTA1LCAxMzE1MDcsIDEzMTUwOSwgMTMxNTExLCAxMzE1MTMsIDEzMTUxNSwgMTMxNTE3LCAKLSAgICAxMzE1MTksIDEzMTUyMSwgMTMxNTIzLCAxMzE1MjUsIDEzMTUyNywgMTMxNTI5LCAxMzE1MzEsIDEzMTUzMywgMTMxNTM1LCAKLSAgICAxMzE1MzcsIDEzMTUzOSwgMTMxNTQxLCAxMzE1NDMsIDEzMTU0NSwgMTMxNTQ3LCAxMzE1NDksIDEzMTU1MSwgMTMxNTUzLCAKLSAgICAxMzE1NTUsIDEzMTU1NywgMTMxNTU5LCAxMzE1NjEsIDEzMTU2MywgMTMxNTY1LCAxMzE1NjcsIDEzMTU2OSwgMTMxNTcxLCAKLSAgICAxMzE1NzMsIDEzMTU3NSwgMTMxNTc3LCAxMzE1NzksIDEzMTU4MSwgMTMxNTgzLCAxMzE1ODUsIDEzMTU4NywgMTMxNTg5LCAKLSAgICAxMzE1OTEsIDEzMTU5MywgMTMxNTk1LCAxMzE1OTcsIDEzMTU5OSwgMTMxNjAxLCAxMzE2MDMsIDEzMTYwNSwgMTMxNjA3LCAKLSAgICAxMzE2MDksIDEzMTYxMSwgMTMxNjEzLCAxMzE2MTUsIDEzMTYxNywgMTMxNjE5LCAxMzE2MjEsIDEzMTYyMywgMTMxNjI1LCAKLSAgICAxMzE2MjcsIDEzMTYyOSwgMTMxNjMxLCAxMzE2MzMsIDEzMTYzNSwgMTMxNjM3LCAxMzE2MzksIDEzMTY0MSwgMTMxNjQzLCAKLSAgICAxMzE2NDUsIDEzMTY0NywgMTMxNjQ5LCAxMzE2NTEsIDEzMTY1MywgMTMxNjU1LCAxMzE2NTcsIDEzMTY1OSwgMTMxNjYxLCAKLSAgICAxMzE2NjMsIDEzMTY2NSwgMTMxNjY3LCAxMzE2NjksIDEzMTY3MSwgMTMxNjczLCAxMzE2NzUsIDEzMTY3NywgMTMxNjc5LCAKLSAgICAxMzE2ODEsIDEzMTY4MywgMTMxNjg1LCAxMzE2ODcsIDEzMTY4OSwgMTMxNjkxLCAxMzE2OTMsIDEzMTY5NSwgMTMxNjk3LCAKLSAgICAxMzE2OTksIDEzMTcwMSwgMTMxNzAzLCAxMzE3MDUsIDEzMTcwNywgMTMxNzA5LCAxMzE3MTEsIDEzMTcxMywgMTMxNzE1LCAKLSAgICAxMzE3MTcsIDEzMTcxOSwgMTMxNzIxLCAxMzE3MjMsIDEzMTcyNSwgMTMxNzI3LCAxMzE3MjksIDEzMTczMSwgMTMxNzMzLCAKLSAgICAxMzE3MzUsIDEzMTczNywgMTMxNzM5LCAxMzE3NDEsIDEzMTc0MywgMTMxNzQ1LCAxMzE3NDcsIDEzMTc0OSwgMTMxNzUxLCAKLSAgICAxMzE3NTMsIDEzMTc1NSwgMTMxNzU3LCAxMzE3NTksIDEzMTc2MSwgMTMxNzYzLCAxMzE3NjUsIDEzMTc2NywgMTMxNzY5LCAKLSAgICAxMzE3NzEsIDEzMTc3MywgMTMxNzc1LCAxMzE3NzcsIDEzMTc3OSwgMTMxNzgxLCAxMzE3ODMsIDEzMTc4NSwgMTMxNzg3LCAKLSAgICAxMzE3ODksIDEzMTc5MSwgMTMxNzkzLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAxMzE3OTUsIDEzMTgwNSwgMTMxODE1LCAxMzE4MjQsIDEzMTgzMywgMTMxODQ2LCAxMzE4NTksIDEzMTg3MSwgMTMxODgzLCAKLSAgICAxMzE4OTMsIDEzMTkwMywgMTMxOTEzLCAxMzE5MjMsIDEzMTkzNCwgMTMxOTQ1LCAxMzE5NTUsIDEzMTk2NCwgMTMxOTczLCAKLSAgICAxMzE5ODIsIDEzMTk5NSwgMTMyMDA4LCAxMzIwMjAsIDEzMjAzMiwgMTMyMDQyLCAxMzIwNTIsIDEzMjA2MiwgMTMyMDcyLCAKLSAgICAxMzIwODEsIDEzMjA5MCwgMTMyMDk5LCAxMzIxMDgsIDEzMjExNywgMTMyMTI2LCAxMzIxMzUsIDEzMjE0NCwgMTMyMTUzLCAKLSAgICAxMzIxNjIsIDEzMjE3MSwgMTMyMTgwLCAxMzIxOTEsIDEzMjIwMSwgMTMyMjExLCAxMzIyMjQsIDEzMjIzNCwgMTMyMjQ3LCAKLSAgICAxMzIyNTQsIDEzMjI2NCwgMTMyMjcxLCAxMzIyNzgsIDEzMjI4NSwgMTMyMjkyLCAxMzIyOTksIDEzMjMwNiwgMTMyMzE1LCAKLSAgICAxMzIzMjQsIDEzMjMzMywgMTMyMzQyLCAxMzIzNTEsIDEzMjM2MCwgMTMyMzY5LCAxMzIzNzgsIDEzMjM4NiwgMTMyMzk0LCAKLSAgICAxMzI0MDEsIDEzMjQxMSwgMTMyNDIwLCAxMzI0MjgsIDEzMjQzNSwgMTMyNDQ1LCAxMzI0NTQsIDEzMjQ1OCwgMTMyNDYyLCAKLSAgICAxMzI0NjYsIDEzMjQ3MCwgMTMyNDc0LCAxMzI0NzgsIDEzMjQ4MiwgMTMyNDg2LCAxMzI0OTAsIDEzMjQ5NCwgMTMyNDk3LCAKLSAgICAxMzI1MDEsIDEzMjUwNCwgMTMyNTA3LCAxMzI1MTEsIDEzMjUxNSwgMTMyNTE5LCAxMzI1MjMsIDEzMjUyNywgMTMyNTMxLCAKLSAgICAxMzI1MzUsIDEzMjUzOSwgMTMyNTQzLCAxMzI1NDcsIDEzMjU1MSwgMTMyNTU1LCAxMzI1NTksIDEzMjU2MywgMTMyNTY3LCAKLSAgICAxMzI1NzEsIDEzMjU3NSwgMTMyNTc5LCAxMzI1ODMsIDEzMjU4NywgMTMyNTkxLCAxMzI1OTUsIDEzMjU5OSwgMTMyNjAzLCAKLSAgICAxMzI2MDcsIDEzMjYxMSwgMTMyNjE1LCAxMzI2MTksIDEzMjYyMywgMTMyNjI3LCAxMzI2MzEsIDEzMjYzNSwgMTMyNjM5LCAKLSAgICAxMzI2NDMsIDEzMjY0NywgMTMyNjUxLCAxMzI2NTUsIDEzMjY1OSwgMTMyNjYzLCAxMzI2NjcsIDEzMjY3MSwgMTMyNjc1LCAKLSAgICAxMzI2NzksIDEzMjY4MywgMTMyNjg3LCAxMzI2OTEsIDEzMjY5NSwgMTMyNjk5LCAxMzI3MDMsIDEzMjcwNywgMTMyNzExLCAKLSAgICAxMzI3MTUsIDEzMjcxOSwgMTMyNzIzLCAxMzI3MjcsIDEzMjczMSwgMTMyNzM1LCAxMzI3MzksIDEzMjc0MywgMTMyNzQ3LCAKLSAgICAxMzI3NTEsIDEzMjc1NSwgMTMyNzU5LCAxMzI3NjMsIDEzMjc2NywgMTMyNzcxLCAxMzI3NzUsIDEzMjc3OSwgMTMyNzgzLCAKLSAgICAxMzI3ODcsIDEzMjc5MSwgMTMyNzk1LCAxMzI3OTksIDEzMjgwMywgMTMyODA3LCAxMzI4MTEsIDEzMjgxNSwgMTMyODE5LCAKLSAgICAxMzI4MjMsIDEzMjgyNywgMTMyODMxLCAxMzI4MzUsIDEzMjgzOSwgMTMyODQzLCAxMzI4NDcsIDEzMjg1MCwgMTMyODU0LCAKLSAgICAxMzI4NTgsIDEzMjg2MiwgMTMyODY2LCAxMzI4NzAsIDEzMjg3NCwgMTMyODc4LCAxMzI4ODIsIDEzMjg4NiwgMTMyODkwLCAKLSAgICAxMzI4OTQsIDEzMjg5OCwgMTMyOTAyLCAxMzI5MDYsIDEzMjkxMCwgMTMyOTE0LCAxMzI5MTgsIDEzMjkyMiwgMTMyOTI2LCAKLSAgICAxMzI5MzAsIDEzMjkzNCwgMTMyOTM4LCAxMzI5NDIsIDEzMjk0NiwgMTMyOTUwLCAxMzI5NTQsIDEzMjk1OCwgMTMyOTYyLCAKLSAgICAxMzI5NjYsIDEzMjk3MCwgMTMyOTc0LCAxMzI5NzgsIDEzMjk4MiwgMTMyOTg2LCAxMzI5OTAsIDEzMjk5NCwgMTMyOTk4LCAKLSAgICAxMzMwMDIsIDEzMzAwNiwgMTMzMDEwLCAxMzMwMTQsIDEzMzAxOCwgMTMzMDIyLCAxMzMwMjYsIDEzMzAzMCwgMTMzMDM0LCAKLSAgICAxMzMwMzgsIDEzMzA0MiwgMTMzMDQ2LCAxMzMwNTAsIDEzMzA1NCwgMTMzMDU4LCAxMzMwNjIsIDEzMzA2NiwgMTMzMDcwLCAKLSAgICAxMzMwNzQsIDEzMzA3OCwgMTMzMDgyLCAxMzMwODYsIDEzMzA5MCwgMTMzMDk0LCAxMzMwOTgsIDEzMzEwMiwgMTMzMTA2LCAKLSAgICAxMzMxMTAsIDEzMzExNCwgMTMzMTE4LCAxMzMxMjIsIDEzMzEyNiwgMTMzMTMwLCAxMzMxMzQsIDEzMzEzOCwgMTMzMTQyLCAKLSAgICAxMzMxNDYsIDEzMzE1MCwgMTMzMTU0LCAxMzMxNTgsIDEzMzE2MiwgMTMzMTY2LCAxMzMxNzAsIDEzMzE3NCwgMTMzMTc4LCAKLSAgICAxMzMxODIsIDEzMzE4NiwgMTMzMTkwLCAxMzMxOTQsIDEzMzE5OCwgMTMzMjAyLCAxMzMyMDYsIDEzMzIxMCwgMTMzMjE0LCAKLSAgICAxMzMyMTgsIDEzMzIyMiwgMTMzMjI2LCAxMzMyMzAsIDEzMzIzNCwgMTMzMjM4LCAxMzMyNDIsIDEzMzI0NiwgMTMzMjUwLCAKLSAgICAxMzMyNTQsIDEzMzI1OCwgMTMzMjYyLCAxMzMyNjYsIDEzMzI3MCwgMTMzMjc0LCAxMzMyNzgsIDEzMzI4MiwgMTMzMjg2LCAKLSAgICAxMzMyOTAsIDEzMzI5NCwgMTMzMjk4LCAxMzMzMDIsIDEzMzMwNiwgMTMzMzEwLCAxMzMzMTQsIDEzMzMxOCwgMTMzMzIyLCAKLSAgICAxMzMzMjYsIDEzMzMzMCwgMTMzMzM0LCAxMzMzMzgsIDEzMzM0MiwgMTMzMzQ2LCAxMzMzNTAsIDEzMzM1NCwgMTMzMzU4LCAKLSAgICAxMzMzNjIsIDEzMzM2NiwgMTMzMzcwLCAxMzMzNzQsIDEzMzM3OCwgMTMzMzgyLCAxMzMzODYsIDEzMzM5MCwgMTMzMzk0LCAKLSAgICAxMzMzOTgsIDEzMzQwMiwgMTMzNDA2LCAxMzM0MTAsIDEzMzQxNCwgMTMzNDE4LCAxMzM0MjIsIDEzMzQyNiwgMTMzNDMwLCAKLSAgICAxMzM0MzQsIDEzMzQzOCwgMTMzNDQyLCAxMzM0NDYsIDEzMzQ1MCwgMTMzNDU0LCAxMzM0NTgsIDEzMzQ2MiwgMTMzNDY2LCAKLSAgICAxMzM0NzAsIDEzMzQ3NCwgMTMzNDc4LCAxMzM0ODIsIDEzMzQ4NiwgMTMzNDkwLCAxMzM0OTQsIDEzMzQ5OCwgMTMzNTAyLCAKLSAgICAxMzM1MDYsIDEzMzUxMCwgMTMzNTE0LCAxMzM1MTgsIDEzMzUyMiwgMTMzNTI2LCAxMzM1MzAsIDEzMzUzNCwgMTMzNTM4LCAKLSAgICAxMzM1NDIsIDEzMzU0NiwgMTMzNTUwLCAxMzM1NTQsIDEzMzU1OCwgMTMzNTYyLCAxMzM1NjYsIDEzMzU3MCwgMTMzNTc0LCAKLSAgICAxMzM1NzgsIDEzMzU4MiwgMTMzNTg2LCAxMzM1OTAsIDEzMzU5NCwgMTMzNTk4LCAxMzM2MDIsIDEzMzYwNiwgMTMzNjEwLCAKLSAgICAxMzM2MTQsIDEzMzYxOSwgMTMzNjI0LCAxMzM2MjksIDEzMzYzMywgMTMzNjM5LCAxMzM2NDYsIDEzMzY1MywgMTMzNjYwLCAKLSAgICAxMzM2NjcsIDEzMzY3NCwgMTMzNjgxLCAxMzM2ODgsIDEzMzY5NSwgMTMzNzAyLCAxMzM3MDksIDEzMzcxNiwgMTMzNzIzLCAKLSAgICAxMzM3MzAsIDEzMzczNiwgMTMzNzQzLCAxMzM3NTAsIDEzMzc1NiwgMTMzNzYzLCAxMzM3NzAsIDEzMzc3NywgMTMzNzg0LCAKLSAgICAxMzM3OTEsIDEzMzc5OCwgMTMzODA1LCAxMzM4MTIsIDEzMzgxOSwgMTMzODI2LCAxMzM4MzMsIDEzMzg0MCwgMTMzODQ3LCAKLSAgICAxMzM4NTMsIDEzMzg1OSwgMTMzODY2LCAxMzM4NzMsIDEzMzg4MiwgMTMzODkxLCAxMzM5MDAsIDEzMzkwOSwgMTMzOTE0LCAKLSAgICAxMzM5MTksIDEzMzkyNSwgMTMzOTMxLCAxMzM5MzcsIDEzMzk0MywgMTMzOTQ5LCAxMzM5NTUsIDEzMzk2MSwgMTMzOTY3LCAKLSAgICAxMzM5NzMsIDEzMzk3OSwgMTMzOTg1LCAxMzM5OTEsIDEzMzk5NiwgMTM0MDAyLCAxMzQwMTIsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEyOTQ1NCwgMTI5NDU3LCAxMjk0NjEsIDEyOTQ2NSwgMTI5NDY4LCAxMjk0NzIsIDEyOTQ3NiwgCisgICAgMTI5NDc5LCAxMjk0ODIsIDEyOTQ4NiwgMTI5NDkwLCAxMjk0OTMsIDEyOTQ5NiwgMTI5NDk5LCAxMjk1MDIsIDEyOTUwNywgCisgICAgMTI5NTEwLCAxMjk1MTQsIDEyOTUxNywgMTI5NTIwLCAxMjk1MjMsIDEyOTUyNiwgMTI5NTI5LCAxMjk1MzIsIDEyOTUzNSwgCisgICAgMTI5NTM4LCAxMjk1NDEsIDEyOTU0NCwgMTI5NTQ3LCAxMjk1NTEsIDEyOTU1NSwgMTI5NTU5LCAxMjk1NjMsIDEyOTU2OCwgCisgICAgMTI5NTczLCAxMjk1NzksIDEyOTU4NSwgMTI5NTkxLCAxMjk1OTYsIDEyOTYwMiwgMTI5NjA4LCAxMjk2MTQsIDEyOTYxOSwgCisgICAgMTI5NjI1LCAxMjk2MzEsIDEyOTYzNiwgMTI5NjQxLCAxMjk2NDcsIDEyOTY1MiwgMTI5NjU4LCAxMjk2NjQsIDEyOTY2OSwgCisgICAgMTI5Njc1LCAxMjk2ODEsIDEyOTY4NiwgMTI5NjkyLCAxMjk2OTgsIDEyOTcwNCwgMTI5NzEwLCAxMjk3MTYsIDEyOTcyMCwgCisgICAgMTI5NzI1LCAxMjk3MjksIDEyOTczNCwgMTI5NzM4LCAxMjk3NDMsIDEyOTc0OCwgMTI5NzU0LCAxMjk3NjAsIDEyOTc2NiwgCisgICAgMTI5NzcxLCAxMjk3NzcsIDEyOTc4MywgMTI5Nzg5LCAxMjk3OTQsIDEyOTgwMCwgMTI5ODA2LCAxMjk4MTEsIDEyOTgxNiwgCisgICAgMTI5ODIyLCAxMjk4MjcsIDEyOTgzMywgMTI5ODM5LCAxMjk4NDQsIDEyOTg1MCwgMTI5ODU2LCAxMjk4NjEsIDEyOTg2NywgCisgICAgMTI5ODczLCAxMjk4NzksIDEyOTg4NSwgMTI5ODkxLCAxMjk4OTYsIDEyOTkwMCwgMTI5OTA1LCAxMjk5MDcsIDEyOTkxMSwgCisgICAgMTI5OTE0LCAxMjk5MTcsIDEyOTkyMCwgMTI5OTIzLCAxMjk5MjYsIDEyOTkyOSwgMTI5OTMyLCAxMjk5MzUsIDEyOTkzOCwgCisgICAgMTI5OTQxLCAxMjk5NDQsIDEyOTk0NywgMTI5OTUwLCAxMjk5NTMsIDEyOTk1NiwgMTI5OTU5LCAxMjk5NjIsIDEyOTk2NSwgCisgICAgMTI5OTY4LCAxMjk5NzEsIDEyOTk3NCwgMTI5OTc3LCAxMjk5ODAsIDEyOTk4MywgMTI5OTg2LCAxMjk5ODksIDEyOTk5MiwgCisgICAgMTI5OTk1LCAxMjk5OTgsIDEzMDAwMSwgMTMwMDA0LCAxMzAwMDcsIDEzMDAxMCwgMTMwMDEzLCAxMzAwMTYsIDEzMDAxOSwgCisgICAgMTMwMDIyLCAxMzAwMjUsIDEzMDAyOCwgMTMwMDMxLCAxMzAwMzQsIDEzMDAzNywgMTMwMDQwLCAxMzAwNDMsIDEzMDA0NiwgCisgICAgMTMwMDQ5LCAxMzAwNTIsIDEzMDA1NSwgMTMwMDU4LCAxMzAwNjEsIDEzMDA2NCwgMTMwMDY3LCAxMzAwNzAsIDEzMDA3MywgCisgICAgMTMwMDc2LCAxMzAwNzksIDEzMDA4MiwgMTMwMDg1LCAxMzAwODgsIDEzMDA5MSwgMTMwMDk0LCAxMzAwOTcsIDEzMDEwMCwgCisgICAgMTMwMTAzLCAxMzAxMDYsIDEzMDEwOSwgMTMwMTEyLCAxMzAxMTUsIDEzMDExOCwgMTMwMTIxLCAxMzAxMjQsIDEzMDEyNywgCisgICAgMTMwMTMwLCAxMzAxMzMsIDEzMDEzNiwgMTMwMTM5LCAxMzAxNDIsIDEzMDE0NSwgMTMwMTQ4LCAxMzAxNTEsIDEzMDE1NCwgCisgICAgMTMwMTU3LCAxMzAxNjAsIDEzMDE2MywgMTMwMTY2LCAxMzAxNjksIDEzMDE3MiwgMTMwMTc1LCAxMzAxNzgsIDEzMDE4MSwgCisgICAgMTMwMTg0LCAxMzAxODcsIDEzMDE5MCwgMTMwMTkzLCAxMzAxOTYsIDEzMDE5OSwgMTMwMjAyLCAxMzAyMDUsIDEzMDIwOCwgCisgICAgMTMwMjExLCAxMzAyMTQsIDEzMDIxNywgMTMwMjIwLCAxMzAyMjMsIDEzMDIyNiwgMTMwMjI5LCAxMzAyMzIsIDEzMDIzNSwgCisgICAgMTMwMjM4LCAxMzAyNDEsIDEzMDI0NCwgMTMwMjQ3LCAxMzAyNTAsIDEzMDI1MywgMTMwMjU2LCAxMzAyNTksIDEzMDI2MiwgCisgICAgMTMwMjY1LCAxMzAyNjgsIDEzMDI3MSwgMTMwMjc0LCAxMzAyNzcsIDEzMDI4MCwgMTMwMjgzLCAxMzAyODYsIDEzMDI4OSwgCisgICAgMTMwMjkyLCAxMzAyOTUsIDEzMDI5OCwgMTMwMzAxLCAxMzAzMDQsIDEzMDMwNywgMTMwMzEwLCAxMzAzMTMsIDEzMDMxNiwgCisgICAgMTMwMzE5LCAxMzAzMjIsIDEzMDMyNSwgMTMwMzI4LCAxMzAzMzEsIDEzMDMzNCwgMTMwMzM3LCAxMzAzNDAsIDEzMDM0MywgCisgICAgMTMwMzQ2LCAxMzAzNDksIDEzMDM1MiwgMTMwMzU1LCAxMzAzNTgsIDEzMDM2MSwgMTMwMzY0LCAxMzAzNjcsIDEzMDM3MCwgCisgICAgMTMwMzczLCAxMzAzNzYsIDEzMDM3OSwgMTMwMzgyLCAxMzAzODUsIDEzMDM4OCwgMTMwMzkxLCAxMzAzOTQsIDEzMDM5NywgCisgICAgMTMwNDAwLCAxMzA0MDMsIDEzMDQwNiwgMTMwNDA5LCAxMzA0MTIsIDEzMDQxNSwgMTMwNDE4LCAxMzA0MjEsIDEzMDQyNCwgCisgICAgMTMwNDI3LCAxMzA0MzAsIDEzMDQzMywgMTMwNDM2LCAxMzA0MzksIDEzMDQ0MiwgMTMwNDQ1LCAxMzA0NDgsIDEzMDQ1MSwgCisgICAgMTMwNDU0LCAxMzA0NTcsIDEzMDQ2MCwgMTMwNDYzLCAxMzA0NjYsIDEzMDQ2OSwgMTMwNDcyLCAxMzA0NzUsIDEzMDQ3OCwgCisgICAgMTMwNDgxLCAxMzA0ODQsIDEzMDQ4NywgMTMwNDkwLCAxMzA0OTMsIDEzMDQ5NiwgMTMwNDk5LCAxMzA1MDIsIDEzMDUwNSwgCisgICAgMTMwNTA4LCAxMzA1MTEsIDEzMDUxNCwgMTMwNTE3LCAxMzA1MjAsIDEzMDUyMywgMTMwNTI2LCAxMzA1MjksIDEzMDUzMiwgCisgICAgMTMwNTM1LCAxMzA1MzgsIDEzMDU0MSwgMTMwNTQ0LCAxMzA1NDcsIDEzMDU1MCwgMTMwNTUzLCAxMzA1NTYsIDEzMDU1OSwgCisgICAgMTMwNTYyLCAxMzA1NjUsIDEzMDU2OCwgMTMwNTcxLCAxMzA1NzQsIDEzMDU3NywgMTMwNTgwLCAxMzA1ODMsIDEzMDU4NiwgCisgICAgMTMwNTg5LCAxMzA1OTIsIDEzMDU5NSwgMTMwNTk4LCAxMzA2MDEsIDEzMDYwNCwgMTMwNjA3LCAxMzA2MTAsIDEzMDYxMywgCisgICAgMTMwNjE2LCAxMzA2MTksIDEzMDYyMiwgMTMwNjI1LCAxMzA2MjgsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDEzMDYzMSwgMTMwNjMzLCAxMzA2MzUsIDEzMDY0MCwgMTMwNjQyLCAxMzA2NDcsIDEzMDY0OSwgCisgICAgMTMwNjU0LCAxMzA2NTYsIDEzMDY2MSwgMTMwNjYzLCAxMzA2NjUsIDEzMDY2NywgMTMwNjY5LCAxMzA2NzEsIDEzMDY3MywgCisgICAgMTMwNjc1LCAxMzA2NzcsIDEzMDY3OSwgMTMwNjgyLCAxMzA2ODUsIDEzMDY4NywgMTMwNjg5LCAxMzA2OTMsIDEzMDY5NiwgCisgICAgMTMwNzAxLCAxMzA3MDMsIDEzMDcwNSwgMTMwNzA3LCAxMzA3MTEsIDEzMDcxNCwgMTMwNzE2LCAxMzA3MjAsIDEzMDcyMiwgCisgICAgMTMwNzI2LCAxMzA3MjgsIDEzMDczMiwgMTMwNzM1LCAxMzA3MzcsIDEzMDc0MSwgMTMwNzQ1LCAxMzA3NDcsIDEzMDc1MywgCisgICAgMTMwNzU1LCAxMzA3NjAsIDEzMDc2MiwgMTMwNzY3LCAxMzA3NjksIDEzMDc3NCwgMTMwNzc2LCAxMzA3ODEsIDEzMDc4MywgCisgICAgMTMwNzg2LCAxMzA3ODgsIDEzMDc5MiwgMTMwNzk0LCAxMzA4MDEsIDEzMDgwMywgMTMwODA1LCAxMzA4MDcsIDEzMDgxMiwgCisgICAgMTMwODE0LCAxMzA4MTYsIDEzMDgxOCwgMTMwODIwLCAxMzA4MjIsIDEzMDgyNywgMTMwODMxLCAxMzA4MzMsIDEzMDgzOCwgCisgICAgMTMwODQyLCAxMzA4NDQsIDEzMDg0OSwgMTMwODUzLCAxMzA4NTUsIDEzMDg2MCwgMTMwODY0LCAxMzA4NjYsIDEzMDg2OCwgCisgICAgMTMwODcwLCAxMzA4NzIsIDEzMDg3NiwgMTMwODc4LCAxMzA4ODMsIDEzMDg4NSwgMTMwODkxLCAxMzA4OTMsIDEzMDg5OSwgCisgICAgMTMwOTAxLCAxMzA5MDMsIDEzMDkwNSwgMTMwOTA5LCAxMzA5MTEsIDEzMDkxOCwgMTMwOTIwLCAxMzA5MjcsIDEzMDkyOSwgCisgICAgMTMwOTM0LCAxMzA5MzksIDEzMDk0MSwgMTMwOTQ3LCAxMzA5NTMsIDEzMDk1NSwgMTMwOTYxLCAxMzA5NjYsIDEzMDk2OCwgCisgICAgMTMwOTc0LCAxMzA5ODAsIDEzMDk4MiwgMTMwOTg4LCAxMzA5OTQsIDEzMDk5NiwgMTMxMDAyLCAxMzEwMDYsIDEzMTAwOCwgCisgICAgMTMxMDEzLCAxMzEwMTUsIDEzMTAxNywgMTMxMDIyLCAxMzEwMjQsIDEzMTAyNiwgMTMxMDMyLCAxMzEwMzQsIDEzMTAzOSwgCisgICAgMTMxMDQzLCAxMzEwNDUsIDEzMTA1MCwgMTMxMDU0LCAxMzEwNTYsIDEzMTA2MiwgMTMxMDY0LCAxMzEwNjgsIDEzMTA3MCwgCisgICAgMTMxMDc0LCAxMzEwNzYsIDEzMTA4MywgMTMxMDkwLCAxMzEwOTIsIDEzMTA5OSwgMTMxMTA2LCAxMzExMDgsIDEzMTExMywgCisgICAgMTMxMTE1LCAxMzExMjIsIDEzMTEyNCwgMTMxMTI5LCAxMzExMzEsIDEzMTEzNywgMTMxMTM5LCAxMzExNDMsIDEzMTE0NSwgCisgICAgMTMxMTUxLCAxMzExNTMsIDEzMTE1NywgMTMxMTU5LCAxMzExNjUsIDEzMTE2NywgMTMxMTY5LCAxMzExNzEsIDEzMTE3NiwgCisgICAgMTMxMTgxLCAxMzExODMsIDEzMTE4NSwgMTMxMTk0LCAxMzExOTgsIDEzMTIwNSwgMTMxMjEyLCAxMzEyMTcsIDEzMTIyMiwgCisgICAgMTMxMjM0LCAxMzEyMzYsIDEzMTIzOCwgMTMxMjQwLCAxMzEyNDIsIDEzMTI0NCwgMTMxMjQ2LCAxMzEyNDgsIDEzMTI1MCwgCisgICAgMTMxMjUyLCAxMzEyNTQsIDEzMTI1NiwgMTMxMjU4LCAxMzEyNjAsIDEzMTI2MiwgMTMxMjY0LCAxMzEyNjYsIDEzMTI2OCwgCisgICAgMTMxMjcwLCAxMzEyNzIsIDEzMTI3NCwgMTMxMjc2LCAxMzEyODIsIDEzMTI4OSwgMTMxMjk0LCAxMzEyOTksIDEzMTMxMCwgCisgICAgMTMxMzEyLCAxMzEzMTQsIDEzMTMxNiwgMTMxMzE4LCAxMzEzMjAsIDEzMTMyMiwgMTMxMzI0LCAxMzEzMjYsIDEzMTMyOCwgCisgICAgMTMxMzMwLCAxMzEzMzIsIDEzMTMzNCwgMTMxMzM2LCAxMzEzMzgsIDEzMTM0MCwgMTMxMzQyLCAxMzEzNDcsIDEzMTM0OSwgCisgICAgMTMxMzUxLCAxMzEzNTcsIDEzMTM2OSwgMTMxMzgwLCAxMzEzODIsIDEzMTM4NCwgMTMxMzg2LCAxMzEzODgsIDEzMTM5MCwgCisgICAgMTMxMzkyLCAxMzEzOTQsIDEzMTM5NiwgMTMxMzk4LCAxMzE0MDAsIDEzMTQwMiwgMTMxNDA0LCAxMzE0MDYsIDEzMTQwOCwgCisgICAgMTMxNDEwLCAxMzE0MTIsIDEzMTQxNCwgMTMxNDE2LCAxMzE0MTgsIDEzMTQyMCwgMTMxNDIyLCAxMzE0MjQsIDEzMTQyNiwgCisgICAgMTMxNDI4LCAxMzE0MzAsIDEzMTQzMiwgMTMxNDM0LCAxMzE0MzYsIDEzMTQzOCwgMTMxNDQwLCAxMzE0NDIsIDEzMTQ0NCwgCisgICAgMTMxNDQ2LCAxMzE0NDgsIDEzMTQ1MCwgMTMxNDUyLCAxMzE0NTQsIDEzMTQ1NiwgMTMxNDU4LCAxMzE0NjAsIDEzMTQ2MiwgCisgICAgMTMxNDY0LCAxMzE0NjYsIDEzMTQ2OCwgMTMxNDcwLCAxMzE0NzIsIDEzMTQ3NCwgMTMxNDc2LCAxMzE0NzgsIDEzMTQ4MCwgCisgICAgMTMxNDgyLCAxMzE0ODQsIDEzMTQ4NiwgMTMxNDg4LCAxMzE0OTAsIDEzMTQ5MiwgMTMxNDk0LCAxMzE0OTYsIDEzMTQ5OCwgCisgICAgMTMxNTAwLCAxMzE1MDIsIDEzMTUwNCwgMTMxNTA2LCAxMzE1MDgsIDEzMTUxMCwgMTMxNTEyLCAxMzE1MTQsIDEzMTUxNiwgCisgICAgMTMxNTE4LCAxMzE1MjAsIDEzMTUyMiwgMTMxNTI0LCAxMzE1MjYsIDEzMTUyOCwgMTMxNTMwLCAxMzE1MzIsIDEzMTUzNCwgCisgICAgMTMxNTM2LCAxMzE1MzgsIDEzMTU0MCwgMTMxNTQyLCAxMzE1NDQsIDEzMTU0NiwgMTMxNTQ4LCAxMzE1NTAsIDEzMTU1MiwgCisgICAgMTMxNTU0LCAxMzE1NTYsIDEzMTU1OCwgMTMxNTYwLCAxMzE1NjIsIDEzMTU2NCwgMTMxNTY2LCAxMzE1NjgsIDEzMTU3MCwgCisgICAgMTMxNTcyLCAxMzE1NzQsIDEzMTU3NiwgMTMxNTc4LCAxMzE1ODAsIDEzMTU4MiwgMTMxNTg0LCAxMzE1ODYsIDEzMTU4OCwgCisgICAgMTMxNTkwLCAxMzE1OTIsIDEzMTU5NCwgMTMxNTk2LCAxMzE1OTgsIDEzMTYwMCwgMTMxNjAyLCAxMzE2MDQsIDEzMTYwNiwgCisgICAgMTMxNjA4LCAxMzE2MTAsIDEzMTYxMiwgMTMxNjE0LCAxMzE2MTYsIDEzMTYxOCwgMTMxNjIwLCAxMzE2MjIsIDEzMTYyNCwgCisgICAgMTMxNjI2LCAxMzE2MjgsIDEzMTYzMCwgMTMxNjMyLCAxMzE2MzQsIDEzMTYzNiwgMTMxNjM4LCAxMzE2NDAsIDEzMTY0MiwgCisgICAgMTMxNjQ0LCAxMzE2NDYsIDEzMTY0OCwgMTMxNjUwLCAxMzE2NTIsIDEzMTY1NCwgMTMxNjU2LCAxMzE2NTgsIDEzMTY2MCwgCisgICAgMTMxNjYyLCAxMzE2NjQsIDEzMTY2NiwgMTMxNjY4LCAxMzE2NzAsIDEzMTY3MiwgMTMxNjc0LCAxMzE2NzYsIDEzMTY3OCwgCisgICAgMTMxNjgwLCAxMzE2ODIsIDEzMTY4NCwgMTMxNjg2LCAxMzE2ODgsIDEzMTY5MCwgMTMxNjkyLCAxMzE2OTQsIDEzMTY5NiwgCisgICAgMTMxNjk4LCAxMzE3MDAsIDEzMTcwMiwgMTMxNzA0LCAxMzE3MDYsIDEzMTcwOCwgMTMxNzEwLCAxMzE3MTIsIDEzMTcxNCwgCisgICAgMTMxNzE2LCAxMzE3MTgsIDEzMTcyMCwgMTMxNzIyLCAxMzE3MjQsIDEzMTcyNiwgMTMxNzI4LCAxMzE3MzAsIDEzMTczMiwgCisgICAgMTMxNzM0LCAxMzE3MzYsIDEzMTczOCwgMTMxNzQwLCAxMzE3NDIsIDEzMTc0NCwgMTMxNzQ2LCAxMzE3NDgsIDEzMTc1MCwgCisgICAgMTMxNzUyLCAxMzE3NTQsIDEzMTc1NiwgMTMxNzU4LCAxMzE3NjAsIDEzMTc2MiwgMTMxNzY0LCAxMzE3NjYsIDEzMTc2OCwgCisgICAgMTMxNzcwLCAxMzE3NzIsIDEzMTc3NCwgMTMxNzc2LCAxMzE3NzgsIDEzMTc4MCwgMTMxNzgyLCAxMzE3ODQsIDEzMTc4NiwgCisgICAgMTMxNzg4LCAxMzE3OTAsIDEzMTc5MiwgMTMxNzk0LCAxMzE3OTYsIDEzMTc5OCwgMTMxODAwLCAxMzE4MDIsIDEzMTgwNCwgCisgICAgMTMxODA2LCAxMzE4MDgsIDEzMTgxMCwgMTMxODEyLCAxMzE4MTQsIDEzMTgxNiwgMTMxODE4LCAxMzE4MjAsIDEzMTgyMiwgCisgICAgMTMxODI0LCAxMzE4MjYsIDEzMTgyOCwgMTMxODMwLCAxMzE4MzIsIDEzMTgzNCwgMTMxODM2LCAxMzE4MzgsIDEzMTg0MCwgCisgICAgMTMxODQyLCAxMzE4NDQsIDEzMTg0NiwgMTMxODQ4LCAxMzE4NTAsIDEzMTg1MiwgMTMxODU0LCAxMzE4NTYsIDEzMTg1OCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCiAgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMTMxODYwLCAxMzE4NzAsIDEzMTg4MCwgMTMxODg5LCAxMzE4OTgsIDEzMTkxMSwgCisgICAgMTMxOTI0LCAxMzE5MzYsIDEzMTk0OCwgMTMxOTU4LCAxMzE5NjgsIDEzMTk3OCwgMTMxOTg4LCAxMzE5OTksIDEzMjAxMCwgCisgICAgMTMyMDIwLCAxMzIwMjksIDEzMjAzOCwgMTMyMDQ3LCAxMzIwNjAsIDEzMjA3MywgMTMyMDg1LCAxMzIwOTcsIDEzMjEwNywgCisgICAgMTMyMTE3LCAxMzIxMjcsIDEzMjEzNywgMTMyMTQ2LCAxMzIxNTUsIDEzMjE2NCwgMTMyMTczLCAxMzIxODIsIDEzMjE5MSwgCisgICAgMTMyMjAwLCAxMzIyMDksIDEzMjIxOCwgMTMyMjI3LCAxMzIyMzYsIDEzMjI0NSwgMTMyMjU2LCAxMzIyNjYsIDEzMjI3NiwgCisgICAgMTMyMjg5LCAxMzIyOTksIDEzMjMxMiwgMTMyMzE5LCAxMzIzMjksIDEzMjMzNiwgMTMyMzQzLCAxMzIzNTAsIDEzMjM1NywgCisgICAgMTMyMzY0LCAxMzIzNzEsIDEzMjM4MCwgMTMyMzg5LCAxMzIzOTgsIDEzMjQwNywgMTMyNDE2LCAxMzI0MjUsIDEzMjQzNCwgCisgICAgMTMyNDQzLCAxMzI0NTEsIDEzMjQ1OSwgMTMyNDY2LCAxMzI0NzYsIDEzMjQ4NSwgMTMyNDkzLCAxMzI1MDAsIDEzMjUxMCwgCisgICAgMTMyNTE5LCAxMzI1MjksIDEzMjUzOSwgMTMyNTUwLCAxMzI1NjAsIDEzMjU2OSwgMTMyNTc5LCAxMzI1ODgsIDEzMjU5OCwgCisgICAgMTMyNjA2LCAxMzI2MTAsIDEzMjYxNCwgMTMyNjE4LCAxMzI2MjIsIDEzMjYyNiwgMTMyNjMwLCAxMzI2MzQsIDEzMjYzOCwgCisgICAgMTMyNjQyLCAxMzI2NDYsIDEzMjY0OSwgMTMyNjUzLCAxMzI2NTYsIDEzMjY1OSwgMTMyNjYzLCAxMzI2NjcsIDEzMjY3MSwgCisgICAgMTMyNjc1LCAxMzI2NzksIDEzMjY4MywgMTMyNjg3LCAxMzI2OTEsIDEzMjY5NSwgMTMyNjk5LCAxMzI3MDMsIDEzMjcwNywgCisgICAgMTMyNzExLCAxMzI3MTUsIDEzMjcxOSwgMTMyNzIzLCAxMzI3MjcsIDEzMjczMSwgMTMyNzM1LCAxMzI3MzksIDEzMjc0MywgCisgICAgMTMyNzQ3LCAxMzI3NTEsIDEzMjc1NSwgMTMyNzU5LCAxMzI3NjMsIDEzMjc2NywgMTMyNzcxLCAxMzI3NzUsIDEzMjc3OSwgCisgICAgMTMyNzgzLCAxMzI3ODcsIDEzMjc5MSwgMTMyNzk1LCAxMzI3OTksIDEzMjgwMywgMTMyODA3LCAxMzI4MTEsIDEzMjgxNSwgCisgICAgMTMyODE5LCAxMzI4MjMsIDEzMjgyNywgMTMyODMxLCAxMzI4MzUsIDEzMjgzOSwgMTMyODQzLCAxMzI4NDcsIDEzMjg1MSwgCisgICAgMTMyODU1LCAxMzI4NTksIDEzMjg2MywgMTMyODY3LCAxMzI4NzEsIDEzMjg3NSwgMTMyODc5LCAxMzI4ODMsIDEzMjg4NywgCisgICAgMTMyODkxLCAxMzI4OTUsIDEzMjg5OSwgMTMyOTAzLCAxMzI5MDcsIDEzMjkxMSwgMTMyOTE1LCAxMzI5MTksIDEzMjkyMywgCisgICAgMTMyOTI3LCAxMzI5MzEsIDEzMjkzNSwgMTMyOTM5LCAxMzI5NDMsIDEzMjk0NywgMTMyOTUxLCAxMzI5NTUsIDEzMjk1OSwgCisgICAgMTMyOTYzLCAxMzI5NjcsIDEzMjk3MSwgMTMyOTc1LCAxMzI5NzksIDEzMjk4MywgMTMyOTg3LCAxMzI5OTEsIDEzMjk5NSwgCisgICAgMTMyOTk5LCAxMzMwMDIsIDEzMzAwNiwgMTMzMDEwLCAxMzMwMTQsIDEzMzAxOCwgMTMzMDIyLCAxMzMwMjYsIDEzMzAzMCwgCisgICAgMTMzMDM0LCAxMzMwMzgsIDEzMzA0MiwgMTMzMDQ2LCAxMzMwNTAsIDEzMzA1NCwgMTMzMDU4LCAxMzMwNjIsIDEzMzA2NiwgCisgICAgMTMzMDcwLCAxMzMwNzQsIDEzMzA3OCwgMTMzMDgyLCAxMzMwODYsIDEzMzA5MCwgMTMzMDk0LCAxMzMwOTgsIDEzMzEwMiwgCisgICAgMTMzMTA2LCAxMzMxMTAsIDEzMzExNCwgMTMzMTE4LCAxMzMxMjIsIDEzMzEyNiwgMTMzMTMwLCAxMzMxMzQsIDEzMzEzOCwgCisgICAgMTMzMTQyLCAxMzMxNDYsIDEzMzE1MCwgMTMzMTU0LCAxMzMxNTgsIDEzMzE2MiwgMTMzMTY2LCAxMzMxNzAsIDEzMzE3NCwgCisgICAgMTMzMTc4LCAxMzMxODIsIDEzMzE4NiwgMTMzMTkwLCAxMzMxOTQsIDEzMzE5OCwgMTMzMjAyLCAxMzMyMDYsIDEzMzIxMCwgCisgICAgMTMzMjE0LCAxMzMyMTgsIDEzMzIyMiwgMTMzMjI2LCAxMzMyMzAsIDEzMzIzNCwgMTMzMjM4LCAxMzMyNDIsIDEzMzI0NiwgCisgICAgMTMzMjUwLCAxMzMyNTQsIDEzMzI1OCwgMTMzMjYyLCAxMzMyNjYsIDEzMzI3MCwgMTMzMjc0LCAxMzMyNzgsIDEzMzI4MiwgCisgICAgMTMzMjg2LCAxMzMyOTAsIDEzMzI5NCwgMTMzMjk4LCAxMzMzMDIsIDEzMzMwNiwgMTMzMzEwLCAxMzMzMTQsIDEzMzMxOCwgCisgICAgMTMzMzIyLCAxMzMzMjYsIDEzMzMzMCwgMTMzMzM0LCAxMzMzMzgsIDEzMzM0MiwgMTMzMzQ2LCAxMzMzNTAsIDEzMzM1NCwgCisgICAgMTMzMzU4LCAxMzMzNjIsIDEzMzM2NiwgMTMzMzcwLCAxMzMzNzQsIDEzMzM3OCwgMTMzMzgyLCAxMzMzODYsIDEzMzM5MCwgCisgICAgMTMzMzk0LCAxMzMzOTgsIDEzMzQwMiwgMTMzNDA2LCAxMzM0MTAsIDEzMzQxNCwgMTMzNDE4LCAxMzM0MjIsIDEzMzQyNiwgCisgICAgMTMzNDMwLCAxMzM0MzQsIDEzMzQzOCwgMTMzNDQyLCAxMzM0NDYsIDEzMzQ1MCwgMTMzNDU0LCAxMzM0NTgsIDEzMzQ2MiwgCisgICAgMTMzNDY2LCAxMzM0NzAsIDEzMzQ3NCwgMTMzNDc4LCAxMzM0ODIsIDEzMzQ4NiwgMTMzNDkwLCAxMzM0OTQsIDEzMzQ5OCwgCisgICAgMTMzNTAyLCAxMzM1MDYsIDEzMzUxMCwgMTMzNTE0LCAxMzM1MTgsIDEzMzUyMiwgMTMzNTI2LCAxMzM1MzAsIDEzMzUzNCwgCisgICAgMTMzNTM4LCAxMzM1NDIsIDEzMzU0NiwgMTMzNTUwLCAxMzM1NTQsIDEzMzU1OCwgMTMzNTYyLCAxMzM1NjYsIDEzMzU3MCwgCisgICAgMTMzNTc0LCAxMzM1NzgsIDEzMzU4MiwgMTMzNTg2LCAxMzM1OTAsIDEzMzU5NCwgMTMzNTk4LCAxMzM2MDIsIDEzMzYwNiwgCisgICAgMTMzNjEwLCAxMzM2MTQsIDEzMzYxOCwgMTMzNjIyLCAxMzM2MjYsIDEzMzYzMCwgMTMzNjM0LCAxMzM2MzgsIDEzMzY0MiwgCisgICAgMTMzNjQ2LCAxMzM2NTAsIDEzMzY1NCwgMTMzNjU4LCAxMzM2NjIsIDEzMzY2NiwgMTMzNjcwLCAxMzM2NzQsIDEzMzY3OCwgCisgICAgMTMzNjgyLCAxMzM2ODYsIDEzMzY5MCwgMTMzNjk0LCAxMzM2OTgsIDEzMzcwMiwgMTMzNzA2LCAxMzM3MTAsIDEzMzcxNCwgCisgICAgMTMzNzE4LCAxMzM3MjIsIDEzMzcyNiwgMTMzNzMwLCAxMzM3MzQsIDEzMzczOCwgMTMzNzQyLCAxMzM3NDYsIDEzMzc1MCwgCisgICAgMTMzNzU0LCAxMzM3NTgsIDEzMzc2MiwgMTMzNzY2LCAxMzM3NzEsIDEzMzc3NiwgMTMzNzgxLCAxMzM3ODUsIDEzMzc5MSwgCisgICAgMTMzNzk4LCAxMzM4MDUsIDEzMzgxMiwgMTMzODE5LCAxMzM4MjYsIDEzMzgzMywgMTMzODQwLCAxMzM4NDcsIDEzMzg1NCwgCisgICAgMTMzODYxLCAxMzM4NjgsIDEzMzg3NSwgMTMzODgyLCAxMzM4ODgsIDEzMzg5NSwgMTMzOTAyLCAxMzM5MDgsIDEzMzkxNSwgCisgICAgMTMzOTIyLCAxMzM5MjksIDEzMzkzNiwgMTMzOTQzLCAxMzM5NTAsIDEzMzk1NywgMTMzOTY0LCAxMzM5NzEsIDEzMzk3OCwgCisgICAgMTMzOTg1LCAxMzM5OTIsIDEzMzk5OSwgMTM0MDA1LCAxMzQwMTEsIDEzNDAxOCwgMTM0MDI1LCAxMzQwMzQsIDEzNDA0MywgCisgICAgMTM0MDUyLCAxMzQwNjEsIDEzNDA2NiwgMTM0MDcxLCAxMzQwNzcsIDEzNDA4MywgMTM0MDg5LCAxMzQwOTUsIDEzNDEwMSwgCisgICAgMTM0MTA3LCAxMzQxMTMsIDEzNDExOSwgMTM0MTI1LCAxMzQxMzEsIDEzNDEzNywgMTM0MTQzLCAxMzQxNDgsIDEzNDE1NCwgCisgICAgMTM0MTY0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKLSAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKIH07CiAKIC8qIG5hbWUtPmNvZGUgZGljdGlvbmFyeSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBjb2RlX2hhc2hbXSA9IHsKICAgICA3NDIyNCwgNDg1MSwgMCwgNzgxNTYsIDc4NDk5LCAxMjg2ODUsIDc5MjksIDAsIDE5NDY4MiwgMTI3NzY2LCA3ODUwMCwgCi0gICAgNjY0ODAsIDAsIDQyODMzLCA3NDUyOSwgMTIwNjQsIDAsIDU5NiwgOTgzODEyLCA2OTg1MCwgMTMxOTIsIDg2NTEsIDAsIDAsIAorICAgIDY2NDgwLCAwLCA0MjgzMywgNzQ1MjksIDEyMDY0LCAwLCA1OTYsIDk4MzgyMSwgNjk4NTAsIDEzMTkyLCA4NjUxLCAwLCAwLCAKICAgICAxMjAyMTgsIDEyOTk1LCA2NDg2NSwgMTM3MywgMCwgMCwgNTgxNiwgMTE5MDY3LCA2NDgxMCwgNDIzMSwgNjgyNSwgNDI4OTcsIAogICAgIDQyMzMsIDQyMzQsIDQyMzIsIDkxNzgzNiwgNzQ0MTUsIDEyMDIxMCwgNjM4NCwgOTE3ODQwLCA3ODEwOCwgODg1MSwgMCwgCi0gICAgMTI4NTUzLCAwLCA0MTYwMSwgODg3NCwgOTgzNzc0LCA3NzQ4LCAwLCAwLCAwLCAxMjc5MzksIDQxNjAzLCA5Nzg0LCAwLCAKKyAgICAxMjg1NTMsIDAsIDQxNjAxLCA4ODc0LCA5ODM3ODMsIDc3NDgsIDAsIDAsIDAsIDEyNzkzOSwgNDE2MDMsIDk3ODQsIDAsIAogICAgIDkxODgsIDQxNjAwLCAwLCAxMjA2MTgsIDEyODM0MywgMTQ1NywgMzUzNSwgMCwgMCwgMCwgMCwgNjUyNDAsIDExOTUxLCAwLCAKICAgICAzNDA0LCAwLCAwLCAwLCAxNzU5LCAwLCA0MTA3NiwgNjgzODMsIDEyMDU3MiwgMTE5MjA1LCA2NjU3NywgOTQwMTQsIAotICAgIDEyNzc2NCwgNjU4NTksIDAsIDc0MDQsIDAsIDAsIDAsIDAsIDY1OTA4LCA5ODM0LCAzMDU1LCA5ODUyLCA5ODM4NTEsIAorICAgIDEyNzc2NCwgNjU4NTksIDAsIDc0MDQsIDAsIDAsIDAsIDAsIDY1OTA4LCA5ODM0LCAzMDU1LCA5ODUyLCA5ODM4NjAsIAogICAgIDY1Mjg4LCAwLCAxMTM5OCwgMCwgOTI0MTcsIDExOTI1NSwgMCwgMCwgNjAzLCA3NDM5OCwgNDM1NDgsIDAsIDAsIDkxNzgyNCwgCiAgICAgMzM1MCwgMTIwODE3LCA2NDMxOCwgOTE3ODI4LCAxMjcwODksIDMzOTAsIDc0NDgzLCA0MzI2NSwgMTIwNTk5LCA5MTc4MzAsIAogICAgIDc4NTczLCAwLCAxOTE5LCAzNDAwLCAxMjA2NTEsIDEyNzk0NCwgMTE2NDcsIDkxNzU0MCwgNjY0NDYsIDY0MTQxLCA4NTYyLCAKLSAgICAyMTIxLCA2NDEzOCwgNDA0MywgODcxMiwgNjQxMzQsIDY0MTMzLCAxMTI5NywgOTgzNjc5LCA5ODMxNTIsIDExOTY2LCAKLSAgICA2NDEyOCwgMTI4NTg3LCAwLCAwLCA2NDEzMiwgMTA4NjcsIDY0MTMwLCA2NDEyOSwgOTgzODM1LCA0MzM3NCwgOTc3OSwgCisgICAgMjEyMSwgNjQxMzgsIDQwNDMsIDg3MTIsIDY0MTM0LCA2NDEzMywgMTEyOTcsIDk4MzY4OCwgOTgzMTUyLCAxMTk2NiwgCisgICAgNjQxMjgsIDEyODU4NywgMCwgMCwgNjQxMzIsIDEwODY3LCA2NDEzMCwgNjQxMjksIDk4Mzg0NCwgNDMzNzQsIDk3NzksIAogICAgIDI3NjQsIDY2MDAyLCAxMDE2NywgOTQ3MSwgMCwgNjYwMjEsIDAsIDAsIDU0NTcsIDU0NDAsIDg4NTcsIDkzOTgxLCA2NTI4MiwgCi0gICAgMjg0MywgNTM1NSwgMTI3OTI4LCA5ODM5NTYsIDAsIDUxOTQsIDExNjU3LCA0Mzk4NCwgMTI4MjkyLCAwLCA5ODM2MjAsIDAsIAorICAgIDI4NDMsIDUzNTUsIDEyNzkyOCwgOTgzOTY1LCAwLCA1MTk0LCAxMTY1NywgNDM5ODQsIDEyODI5MiwgMCwgOTgzNjIwLCAwLCAKICAgICAwLCAxMjcwMjcsIDEwNzE3LCA2NDU3MCwgNTYzMCwgNTM5NiwgNjQxNDMsIDEwNjgyLCAwLCAxMDYwMiwgODAwLCA0MjQ5OSwgCiAgICAgNjYxODYsIDAsIDAsIDY0OTMwLCAxMTYzMSwgNjQxNDYsIDY0MTQ1LCA2NDE0NCwgNzYyLCAxMzE3MiwgMTE4ODU5LCAKICAgICAxOTQ2NjEsIDY0NDY4LCAxMDkwNiwgMTM1MywgNjk2MCwgMCwgMCwgNTgyOCwgODcyNCwgOTE3ODA2LCA4OTMzLCAxNjAxLCAKICAgICA0MjI0NCwgODU4LCA3MDgwLCA2NDEwOSwgNjQxMDgsIDgwOTAsIDAsIDc0NDAxLCA5MTc4MTEsIDU4NywgMCwgMTI4MTMxLCAKLSAgICAwLCAwLCAwLCA3ODIxNCwgMjc1MCwgNzQyMTgsIDU1NiwgNjQxNTgsIDY0MTU3LCA5ODM5NDAsIDEyMjEzLCAxOTQ2NzgsIAorICAgIDAsIDAsIDAsIDc4MjE0LCAyNzUwLCA3NDIxOCwgNTU2LCA2NDE1OCwgNjQxNTcsIDk4Mzk0OSwgMTIyMTMsIDE5NDY3OCwgCiAgICAgMjc2MCwgMCwgMCwgMCwgMTk0Nzk0LCA2NDE1NiwgNjQxNTUsIDQyNDk2LCAwLCA2NDE1MSwgNjQxNTAsIDEyNjc5LCAKICAgICAxMDA1MywgMTA0MjEsIDExMDkzLCA2NDE1MywgNjQxNTIsIDAsIDAsIDQ4MzksIDAsIDAsIDE4NzQsIDExOTAxNiwgMCwgCiAgICAgNjU3NywgNjQxMjUsIDY0MTI0LCA2NDEyMywgMCwgMTI3NTMxLCA5MjUzNCwgNzAwNywgNzU5MCwgNjU0NDMsIDkwMzYsIApAQCAtMTcxMTQsMTIgKzE3MTMzLDEyIEBACiAgICAgNjQxMDIsIDc4NTksIDE5NDUsIDY0MDk5LCAwLCAxMDQ1MywgNjQxMDQsIDcxODgsIDc5OTcsIDAsIDczODksIDk4MzE2MSwgCiAgICAgODcwNSwgNjQwOTcsIDY0MDk2LCA5NTcxLCA1MjgsIDEyODY3MSwgNDQwMTcsIDExNDI5LCA3MTM0NywgMCwgOTgzMDc3LCAKICAgICA5MTc5OTAsIDczODQxLCAwLCAwLCA5MDU2LCA2NDMxMywgNjE4OCwgMTIwMDE5LCA2MTU1LCA2NDA2OCwgMTgyMywgNjQwNjYsIAotICAgIDY0MDY1LCA2NDA3MiwgNjQwNzEsIDYzLCA3MjMzLCA5MjIxMiwgMCwgNDE5MDQsIDY2MzksIDY0MDY0LCA5ODM3NjYsIAotICAgIDEyODM0NCwgMCwgMTE3NiwgMTE4OTU5LCAxMjc5MzAsIDgxNjIsIDEyODY2NywgOTgzODIyLCAwLCAxMjA1MTksIDY2Mzc2LCAKKyAgICA2NDA2NSwgNjQwNzIsIDY0MDcxLCA2MywgNzIzMywgOTIyMTIsIDAsIDQxOTA0LCA2NjM5LCA2NDA2NCwgOTgzNzc1LCAKKyAgICAxMjgzNDQsIDAsIDExNzYsIDExODk1OSwgMTI3OTMwLCA4MTYyLCAxMjg2NjcsIDk4MzgzMSwgMCwgMTIwNTE5LCA2NjM3NiwgCiAgICAgNjYyNDIsIDExNDE1LCA0MzMzLCA5ODU1LCA2NDExMiwgNjQ2NDIsIDAsIDUzODgsIDAsIDAsIDAsIDc3MTQsIDY2MjIyLCAKLSAgICA2OTkwMiwgNzc2OCwgMCwgNDE5OSwgNjQ3MDgsIDk4MzQxMywgMCwgMCwgODcwOCwgOTU2MCwgNjQwNzcsIDY0MDc2LCAKKyAgICA2OTkwMiwgNzc2OCwgMCwgNDE5OSwgNjQ3MDgsIDk4MzQyMSwgMCwgMCwgODcwOCwgOTU2MCwgNjQwNzcsIDY0MDc2LCAKICAgICA4OTk2LCA0OTkyLCA0NDcxLCA0MjYyMiwgNjQwNzksIDY0MDc4LCA5MjE3OSwgMCwgMTI2NTcwLCAwLCA2NDYxNSwgNDE5MTUsIAotICAgIDAsIDEyMDc1LCA3MDA2MiwgMCwgNTE3NCwgOTgzMjE1LCAwLCAxMjc1NTcsIDMxMjMsIDAsIDEyNjg1LCAxMjc5MDQsIAorICAgIDAsIDEyMDc1LCA3MDA2MiwgMCwgNTE3NCwgOTgzMjE3LCAwLCAxMjc1NTcsIDMxMjMsIDAsIDEyNjg1LCAxMjc5MDQsIAogICAgIDg0MDgsIDY0NzA0LCAwLCAwLCA5MjIzLCAwLCA0MTYxNiwgNjc5OTksIDczNzk3LCAwLCAxMTE2LCAxMjgyMDQsIDQzMDQ5LCAKICAgICA3MTM2LCA0MzA1MCwgODU0OCwgMTIwNDg1LCAwLCAxMTkwNjEsIDkxNzk5OSwgMCwgMTMxMTUsIDQzNjc1LCA2NDA5MSwgCiAgICAgOTMyMiwgMCwgMTIwNTk1LCA2NDA5NSwgNjQwOTQsIDgxMTEsIDY2MjQ3LCA0MjMzMiwgNjQwODksIDY0MDg4LCA2MTk5LCAwLCAKQEAgLTE3MTI3LDEwICsxNzE0NiwxMCBAQAogICAgIDk5MjcsIDQxMzM1LCA0MTE4LCAxNzk3LCAwLCA0MTMzNCwgMCwgNDYsIDQzNDQ4LCAxMjc4ODEsIDI5OCwgMCwgMTI4MTE0LCAKICAgICAwLCA0MjYyNywgMCwgMzIsIDYxODcsIDExOTA1MiwgMTE0OTUsIDExNDU5LCAzNjY1LCA5ODM2MDAsIDQyODcxLCAwLCAKICAgICAxOTkyMywgNzQzMzUsIDAsIDEyNzE5MiwgNjYyMzksIDQyMjY0LCA2NDQwMywgNDQxMiwgNzI0MCwgOTI0OTUsIDAsIAotICAgIDk4MzQ1OCwgNjU3NTgsIDEyNzUwLCA0MTgxLCA4NTQ0LCAwLCAxMjAxOTksIDkxNzg5NywgMTIwMTk4LCA2OTgwOSwgNjE4MSwgCisgICAgOTgzNDY2LCA2NTc1OCwgMTI3NTAsIDQxODEsIDg1NDQsIDAsIDEyMDE5OSwgOTE3ODk3LCAxMjAxOTgsIDY5ODA5LCA2MTgxLCAKICAgICA2NTAxNCwgMCwgMCwgOTgzMTk2LCAzNjM5LCAxMTk1ODgsIDAsIDAsIDExODkwNCwgMTAwNzMsIDEyMDIwNiwgMTI4ODYyLCAKICAgICAxMjcxODYsIDY4NDA5LCA0Mjg0NCwgNzQ5OCwgMTA5OCwgOTI1NjUsIDEyMDIwNSwgMCwgOTgzMTE4LCAxMDIwNywgODc4OSwgCi0gICAgOTgzMjIzLCAwLCAwLCA5ODM0NjQsIDkyMzQsIDAsIDYxODIsIDk4MzQ2NiwgNjUwNTgsIDAsIDk4MzQ3MCwgOTgzNDY3LCAwLCAKKyAgICA5ODMyMjUsIDAsIDAsIDk4MzQ3MiwgOTIzNCwgMCwgNjE4MiwgOTgzNDc0LCA2NTA1OCwgMCwgOTgzNDc4LCA5ODM0NzUsIDAsIAogICAgIDU0NzEsIDk0NjEsIDU1NzMsIDExODkzNiwgNTQ3MywgNDQsIDAsIDY2MjQ0LCA5NDA3MiwgMCwgNjYyMzgsIDEyODQ0LCAwLCAKICAgICAxNjIyLCA3NzY3LCAxOTAwLCA0MTMzOSwgMTE0NTgsIDAsIDAsIDY1ODEsIDU1NzYsIDAsIDY0NDA1LCA0MTMzNywgMCwgCiAgICAgNDE2MzEsIDg5NDcsIDY4MzkwLCAxMjc4NDQsIDQxNjk0LCAwLCAwLCA3OTA4LCAwLCAxMDQwOCwgNjU3OSwgMCwgNjQ2MTgsIApAQCAtMTcxMzgsMTAgKzE3MTU3LDEwIEBACiAgICAgOTk5MiwgMTI4Mjk5LCA1MDU3LCAwLCAwLCA3NDUzOCwgNTA1NCwgMTE4OTUxLCAxOTQ5NzEsIDc4NjA2LCAwLCAxNDM3LCAKICAgICA0MTYxNywgNjU4LCAzNDk3LCAxMjg1MDksIDc0ODYsIDUwNjEsIDUwNjAsIDQyMzUsIDEyNzg3OCwgMCwgMTI4NTI5LCAKICAgICAxMjExMywgNDIzNiwgNDcyNywgMCwgMCwgNzY5MywgMTA3NDksIDAsIDc0ODgsIDU3NzMsIDk3OCwgMTI4MTM0LCAwLCAKLSAgICA0MTYxOSwgMTAyMzksIDY4NjExLCAwLCA2NjIwOSwgMCwgMTI4NzAwLCA5NzQ4LCA5ODM5NDcsIDEyNzUyNCwgMCwgMCwgMCwgCi0gICAgMCwgMTk1MDgzLCAwLCA5ODM4MzQsIDAsIDAsIDAsIDAsIDAsIDkzNDEsIDExOTU5NiwgMjM3OSwgMTEzMjUsIDAsIDY0NjY4LCAKLSAgICA2Nzg1NCwgODEyNSwgMTIwNTQ1LCA2NzQzLCAxMTkxNzUsIDkxNzk0MCwgMjM2OSwgMCwgOTgzOTYzLCA5ODM5NjQsIAotICAgIDExOTIzNSwgNzQwOTIsIDczOTM2LCA3MDA4LCA0MzY2MCwgMCwgMCwgMCwgMjM2NywgMTI3ODI3LCA5ODM4NDgsIDI2NCwgCisgICAgNDE2MTksIDEwMjM5LCA2ODYxMSwgMCwgNjYyMDksIDAsIDEyODcwMCwgOTc0OCwgOTgzOTU2LCAxMjc1MjQsIDAsIDAsIDAsIAorICAgIDAsIDE5NTA4MywgMCwgOTgzODQzLCAwLCAwLCAwLCAwLCAwLCA5MzQxLCAxMTk1OTYsIDIzNzksIDExMzI1LCAwLCA2NDY2OCwgCisgICAgNjc4NTQsIDgxMjUsIDEyMDU0NSwgNjc0MywgMTE5MTc1LCA5MTc5NDAsIDIzNjksIDAsIDk4Mzk3MiwgOTgzOTczLCAKKyAgICAxMTkyMzUsIDc0MDkyLCA3MzkzNiwgNzAwOCwgNDM2NjAsIDAsIDAsIDAsIDIzNjcsIDEyNzgyNywgOTgzODU3LCAyNjQsIAogICAgIDIzNzUsIDgwNjAsIDYxOTQsIDExOTg1OCwgMTg0NCwgMTE5MDg0LCAwLCA2MDE5LCAwLCAwLCA2OTYxLCAwLCAxMTg4MzksIAogICAgIDAsIDg4MDAsIDAsIDQyODYyLCA0NDYzLCA2NTU4MSwgNjE5MiwgMTk0Njc2LCA0Mjc3MSwgMCwgOTIzMzMsIDcyNSwgCiAgICAgNjUwNDIsIDExODc5NywgMTIwODAwLCA5ODMwNDAsIDEyODkyLCAwLCAwLCAwLCAwLCAwLCAwLCAxMjcyNjEsIDEyMDcwNywgCkBAIC0xNzE1OSw2MzQgKzE3MTc4LDYzNCBAQAogICAgIDEyNjUwMywgNDE2MDcsIDEyMDExNSwgMTY3OSwgMTIwMTE2LCAxMjAxODAsIDEyMDExMywgMTI3NDYyLCA3MDA1LCA0MTYwOSwgCiAgICAgOTU4MCwgMCwgNDAxLCA2OTk0OSwgNDM3NzksIDY5NjgsIDU3NjEsIDM0MiwgODU1MywgMCwgODE0MywgMTI3MTE1LCAKICAgICAxMTk4MywgOTIyNDksIDYyNCwgNzQ1MDgsIDQwNTcsIDQzNzg4LCA1MDc4LCA3NDI1OCwgMTI0NzgsIDAsIDUwNzYsIDAsIAotICAgIDE5NDYwOSwgMCwgMTIwMDk3LCA2ODUsIDkwMjUsIDE1MjQsIDEyNjE4LCAwLCA1NTM5LCAwLCA5MjUyMywgMTIwMTAyLCAKLSAgICA3MTM4LCAxMjA1NTIsIDAsIDE5NDYxMSwgNzg3NTIsIDAsIDEyNTIwLCA4MDU4LCA5NzMyLCAwLCA1MDgwLCA2NDc3NSwgCi0gICAgNTAzNiwgNTAzNSwgMTIwNTkwLCA0MjYwNCwgOTgzNjQ3LCAwLCA4MDc0LCAyNzUsIDEzMjkxLCAxOTA3LCA3ODgzOCwgCi0gICAgNDQzMiwgMTI3MjcxLCA1MDMzLCAxMjcyNzMsIDEyNzI3MiwgNDgzNiwgMzg4OCwgNzM3OTIsIDEwNzI5LCA2NDU0NiwgCi0gICAgMTI3MjYyLCA0MzcwNCwgMTI3MjY0LCAxMjcyNTEsIDY3NTg4LCAxMTkwMDAsIDEyNzI1MiwgMTI3MjU1LCA4ODU4LCA2NDA5LCAKLSAgICAxMjcyNTYsIDEyMDI1MiwgMTI4MTAwLCAwLCAwLCA2NjMyMSwgMCwgMTI4MTQsIDEyNzI0OCwgMzQzMiwgMTAyMTgsIDAsIAotICAgIDYwOTQsIDc2NDEsIDQyNDQ1LCAwLCA5MjQ4NywgNDI0MDYsIDE2NzYsIDc0MzIwLCAxOTQ2MDcsIDk4MzE3NywgNTAzMCwgMCwgCi0gICAgMCwgMCwgNzM4NjksIDk2MjIsIDAsIDY5OTQ0LCA2Nzg3LCAwLCAwLCAwLCA5ODM1ODMsIDEwNTQ0LCAxMjkxOSwgMCwgCi0gICAgOTIyMTgsIDAsIDAsIDY5OTA2LCAxMjA3ODksIDAsIDk0NywgMTE5ODM1LCAxOTQ1ODYsIDE5NDU4NSwgMTA5NjksIAotICAgIDExOTkzNSwgNzYxMywgOTI1NjIsIDExOTkzNiwgNDc5NSwgMTE5OTMwLCA3MDE4LCA3Mzc2LCAxMjAxODEsIDEyMDE5MiwgCi0gICAgMTIwMjY4LCAwLCA0MzU2NywgNzQwNTYsIDkxNzkxMCwgMTE4MzMsIDExOTkxOSwgNzIxNiwgNjUyMzIsIDcyMTcsIDI1MSwgCi0gICAgNzIxOCwgNzg5NSwgNDM5NSwgNDM1MzgsIDExOTkyNiwgMTE5OTI5LCAxMTk5MjgsIDcyMTMsIDExOTkyMiwgNzIxNCwgCi0gICAgNzIxNSwgOTgzODI3LCA3NDE0MSwgODg4MCwgNzY4NSwgNjY0NTksIDEyMDE3MywgNjU1NDAsIDExOTYxOCwgNjI1LCA4MTg3LCAKLSAgICA0Mjg2MSwgMTExMywgNzIzNiwgNzkxNSwgMzYzMCwgMTIwMTc2LCA4MTc5LCA3NDI2NCwgNjc4ODYsIDkzMTYsIDEwOTgwLCAKLSAgICAyNDg5LCA2NTYyNCwgODE1MCwgMTM1OSwgNjc2NTIsIDEyNzMyOSwgMTI3MzMwLCA3Mzc1NiwgNTA0MiwgNTA0MSwgNDI3NjksIAotICAgIDEyMDg0LCAxMjczMjQsIDEyNzMyMSwgOTIyNzksIDEyNzMxOSwgMTI3MzIwLCAxMjczMTcsIDEyNzMxOCwgMTI3MzE1LCAKLSAgICAxMjI4MywgMTYxNiwgMzc5NSwgMCwgODc5NSwgNjYyNDUsIDAsIDAsIDAsIDExMzgsIDczOTA1LCAxMjY3NywgMCwgMCwgCi0gICAgMzIzOSwgMTI3MzExLCAwLCAwLCA4NDMxLCAwLCA0MjE2NCwgMCwgMTE3NzgsIDEyNjIwLCA2ODI2LCA3Mzc3MywgMTE5MDczLCAKLSAgICA1MDQwLCAwLCAwLCA5ODM0MzUsIDc4NDIwLCAwLCA1MDM5LCAwLCA3ODQxOCwgMCwgNTAzOCwgMCwgMCwgMTMxODQsIAotICAgIDc0MjkzLCAwLCA2NDY0OCwgMCwgOTM1OSwgNzg0MTYsIDAsIDEyODc3MCwgNjUxNTcsIDY2NjIsIDAsIDAsIDM4NjMsIAotICAgIDczOTA5LCA0ODM1LCA1NTI2NiwgNDM0MzIsIDEyNzgyMiwgNDMwOSwgNzEyNywgMTk0NTY5LCAwLCAxOTQ1NjgsIDEzMDEsIAotICAgIDAsIDQyNTg5LCA1NjksIDAsIDczODEzLCA3MTEsIDQzODksIDcxMzMsIDAsIDczODgwLCAxMTYxMCwgMTEzNjgsIDAsIAotICAgIDE5NDU3MCwgNDEzMzEsIDEwMDYsIDc0MjQwLCAwLCAxNTUwLCA4MjAxLCA3MzczNywgNzYyNywgNTQ5OSwgNTAzMSwgCi0gICAgNzc5MDgsIDQyNzM4LCA2NTc4NCwgNzc5MDcsIDY1MjY3LCAzNzU4LCAwLCA2NTc4MSwgNjQ3MzQsIDcwMDczLCAyNDQwLCAKLSAgICA2NTc4MCwgNzc5MTMsIDg0NDksIDAsIDUwMDgsIDk4MzU3MiwgMjExOCwgMCwgMTIxMjEsIDgyNTUsIDU1MTIsIDczODc1LCAKLSAgICAyMTI4LCAyMTMwLCAyMTMxLCAyMTI2LCAyMTMzLCAxMTE5LCAxMjcwNjgsIDIxMTQsIDIxMTYsIDI0NTUsIDAsIDIxMjIsIAotICAgIDIxMjMsIDIxMjQsIDIxMjUsIDEyNzQ4NiwgODcxNCwgOTgzODExLCAyMTEzLCAwLCAyMTE1LCAxMjgxNzcsIDEyNzkwNywgCi0gICAgNDM3MTMsIDUwNTIsIDY2MjIwLCA1ODIxLCA2MTg2LCA2NTc3OCwgNjU3NzUsIDUwNTEsIDY1NzczLCAxNDI5LCA0MjY0NywgCi0gICAgNTA1MCwgMzAyLCAzODgsIDQxMTE1LCA3MzUsIDY2MzcsIDU5MDcsIDY1MDg4LCAwLCAxMjcyNiwgNzQ1OTQsIDkxMTcsIAotICAgIDk4MzE4MSwgMTIwMDMsIDU1MTMsIDY2NjYsIDUwNTMsIDc0MjMwLCA1NTEwLCA3ODQ1MSwgMCwgNzg0NDcsIDI0NzAsIAotICAgIDc4NDM3LCAwLCAxOTI1LCAwLCA5MjIzNywgNzQ4MDcsIDAsIDUwNDgsIDUwNDcsIDAsIDAsIDAsIDkyMzEzLCAwLCA3NDQ5NywgCi0gICAgOTIzOTUsIDgwODksIDY5MjksIDYzOSwgOTgzNTYzLCA2ODE3OSwgNjQ0NDIsIDAsIDkyMzQ4LCA0NTk5LCA0MTQwMiwgCi0gICAgNjY3NCwgNDMzOTcsIDQzMjk0LCAxNDc2LCA2NDgsIDAsIDY1ODE5LCAzMjMzLCAwLCA0MTc4MiwgNjk1MSwgOTQwMTcsIAotICAgIDk4Mzk2NywgMzUzMCwgOTc1MCwgMTI4MzE3LCAwLCA2NjU2LCA0MjYxOCwgMCwgNTA0NiwgODUxMiwgNjU4NTYsIDc0MjYxLCAKLSAgICA4OTY3LCAwLCA1MDQ1LCA0MjAyNiwgMTkxNiwgNzk4NiwgNTA0NCwgMTIwNTU2LCA5MDA2LCAxMzEyOCwgNTA0MywgMCwgCi0gICAgNzg1MywgNzQwNjgsIDc0MDA0LCA5NjY5LCAxMjM0MSwgMTI3MDMsIDg0MDIsIDAsIDExOTA3MCwgOTE3NjAwLCA0MTc1MCwgCi0gICAgMzU4NiwgNjQ1MDgsIDQzMTQ4LCAwLCAwLCAxMTk2MDYsIDY3OTgzLCAxMzI5NiwgNTE3LCAwLCAxMjg1MzQsIDE5NDk0NiwgCi0gICAgNDE1MjgsIDEyMywgNjU0NTQsIDAsIDAsIDc0NDc4LCAxMDUzMSwgNzc4NCwgNDE1MjYsIDEwODI5LCA3Mzk5MSwgODA1NywgCi0gICAgMTEyNiwgNzM4OTUsIDAsIDE5NDU5MSwgMCwgMzkyNSwgNDI1MSwgODA2OSwgMTA1MTcsIDEyMDQzOSwgNDg5LCAwLCA0MjUwLCAKLSAgICAxMjA0NDEsIDEyMDQ1MiwgNDMxNTEsIDk4MzE3OCwgMTk0ODUxLCA2NjIwMCwgMCwgMCwgMCwgNzg0MjMsIDAsIDAsIDg3MTEsIAotICAgIDYxODMsIDAsIDAsIDAsIDEyMDQ0OCwgNzYyMywgMTE4OTI1LCAxMTg4ODksIDkyMzUsIDEyNzYwLCA3NDE3NiwgNjk2NjIsIAotICAgIDY2NDQ1LCA0MzU0MCwgMTAwNjIsIDM3NDMsIDExNTE0LCAxMTA3OCwgMCwgMTIxMzYsIDAsIDEyNjU5NywgMTIwNDM1LCAwLCAKLSAgICA3NzI2LCAwLCAxOTkyMiwgMjY3LCAzMzkzLCA0MjE5OCwgMTM3MSwgMTk0ODQ5LCA2OTIzMywgMjQ1OCwgMCwgNjIwMSwgMCwgCi0gICAgNDEwNzQsIDQyNjYsIDEwNjUyLCA0MTYxMiwgNDEwNzcsIDM0MDIsIDkwNTAsIDMzOTgsIDAsIDk4MzM0MCwgMCwgMzM5MSwgCi0gICAgNDEwNzUsIDI0NzYsIDAsIDEyODAxNywgMCwgMTA2MjUsIDAsIDEyNzY3LCAxMzAxNywgNzg3NDMsIDY0MjYxLCA2NDkzNCwgCi0gICAgMTI3NTM3LCAxMzAxNCwgMTMwMTMsIDAsIDY2NzMsIDAsIDAsIDAsIDEyNDM4LCAwLCA5ODMzMzQsIDAsIDk4Mzg3MSwgCi0gICAgMTI2NjM4LCA5MDUzLCAxMzAxNSwgNzQ1MjMsIDAsIDcwNCwgNjYyMTUsIDYxOTUsIDk4MzgxOSwgNjY2MCwgNzg3NTgsIAotICAgIDkxNzc2MCwgOTE3NzkzLCA0MjIxMiwgMTI2MjksIDExNDM1LCAwLCA1NTI1NiwgNjU1MzgsIDAsIDEyNzk0MCwgOTgzMzMzLCAKLSAgICA3NDU0NywgMTI2NTg1LCA2NTQ0OCwgNzgxMDAsIDEyOTQ4LCAxMTkwMDEsIDE5NTAwMiwgMTE5MjM4LCAxOTUwMDQsIAotICAgIDc4MDk5LCAxMjcwODUsIDAsIDEyODMyMCwgNDI4NywgODI3NiwgNDkwMiwgMTEzMSwgMCwgNzg0NTgsIDY2NzI4LCAxODE2LCAKLSAgICAwLCA0MjUzMywgMTY4LCA0Mjg0NSwgNDg5OCwgNjQyOTgsIDk4MzE0MSwgMCwgNDkwMSwgMTgyMSwgMCwgNTc4LCAzNjUzLCAKLSAgICAwLCA3OTEsIDkxNjIsIDY5NzcsIDAsIDc4ODg5LCA3NDU2MSwgMCwgNzM3MzEsIDgzNTQsIDQzNTkwLCAxMTkzMDMsIAotICAgIDk4MzQ0MSwgNzU1NywgMTE5MzM5LCAxMTkzMDEsIDgyMzQsIDcyNDEsIDAsIDEyMDY3MSwgMTE5MTY3LCAxOTQ5OTYsIAotICAgIDEyODExLCA2NTkyNSwgMzk0NiwgNzgwNzgsIDEwOTk4LCA3ODA4MCwgNjczLCAxOTQ4NjcsIDY0Mzk3LCAxMjgyNzYsIAotICAgIDc0NTk5LCA3ODQ0OSwgODg5MCwgMTk0OTc3LCAxOTQ5NzYsIDI0NDgsIDc4MDg1LCAxMDI2NywgODQyNCwgMjQ1MiwgCi0gICAgNzgwODMsIDEyODgyNCwgODcyOSwgNzg0NTYsIDAsIDc4NDUsIDkxNzkxNywgNzEzMDIsIDQ0MDgsIDQxMjIsIDY3NzIsIAotICAgIDExMDM5LCA4NzIzLCAxOTQ5OTAsIDcxMzEwLCAxMTkzMDIsIDczMSwgMTE5MzA0LCA5MjI4NiwgMjQzOCwgNjQ4NTUsIAotICAgIDExOTMwMCwgMTE5Mjk5LCAxMTc1LCAwLCA0MjEzNSwgMzczLCAxMTkxNzIsIDIxMTksIDExNDU3LCAxMTUyMSwgNzcyMywgMCwgCi0gICAgMCwgMCwgNDE5NTIsIDAsIDUyNzMsIDIxMjcsIDUyNjksIDYzMzcsIDUyMDIsIDI0MDQsIDUyNjcsIDQyODIzLCAxMTI5MSwgCi0gICAgMTk5MTUsIDUyNzcsIDEyOTYzLCAxMjc4NjQsIDYxODksIDQxMjUsIDEzMTQsIDEyMTMzLCAxMjAzNDAsIDExODg3MywgCi0gICAgMTI3MSwgOTgzNjMxLCAwLCA2NjAyNCwgNDE0ODIsIDM4NjQsIDc0NTM5LCAwLCAzODc5LCAwLCAxMjk3OCwgNDE2NiwgCi0gICAgNDU3NCwgMCwgNzU2NywgNzQ1OSwgOTgzMTYwLCA0MTM5MCwgNTM4NCwgNDE4ODIsIDY3NjQ3LCA5MjU0OCwgNTc1OSwgCi0gICAgOTgzOTAzLCAwLCA0MTM4OCwgNjQ0NDYsIDQxMzkyLCA2NDI4OCwgNDEzODcsIDAsIDg3MDYsIDU1NTIsIDk4MzE4NywgNzAwLCAKLSAgICAwLCA1NTUzLCAwLCA3MDg4LCA1MzU2LCA3NDk5LCA2ODAwNywgNjY1OTYsIDc0MDY2LCAwLCAxMDI2MywgNTU1NCwgMCwgCi0gICAgMTIzNDQsIDEwMzExLCA3ODExMywgNjY2NSwgOTI2MjYsIDAsIDc2MTgsIDg1MTcsIDExNDU1LCA3ODQ0MCwgNjQ2MzIsIAotICAgIDY0NDQ3LCA1NTU1LCA3ODA4OCwgNzgwOTMsIDc4MDkxLCAwLCA0MjgwMywgNjUwMzMsIDkxNDMsIDY2NjgsIDE5NTA2NywgCi0gICAgNjc5OTUsIDE5NTA2OSwgNjU2LCAxOTUwNzEsIDY1MDM3LCA0NTc3LCA2NDYyNCwgMCwgMCwgMCwgOTgzNjQwLCA0MjY5LCAKLSAgICA3Mzg4NSwgOTE3Nzc1LCA0Mjg0NiwgNjk2NDQsIDk1MCwgMCwgOTIyNzMsIDY2NTgwLCAxMTg4OTUsIDY2NjgzLCAxMDU1NCwgCi0gICAgOTE3Nzc4LCAxMTkxMjEsIDAsIDUwOTgsIDkxNzc3MCwgMCwgMTE5MDk5LCA1MDk3LCA0OTM1LCA5ODQ4LCAxMDM4MSwgMCwgCi0gICAgMTI4ODcwLCA5ODM2OTIsIDM2NTEsIDAsIDEyMDczMCwgMTI3NTU2LCA1MTAyLCA1MTAxLCAxMDI2OSwgMTI5ODMsIDgxMzgsIAotICAgIDQ1MTcsIDE5MzIsIDUxMDAsIDE0MzksIDEyMDkzLCAxMjQ3LCAxMDAzNCwgMTk1MDY0LCA1MDk5LCA3ODM3MywgMTQ0MSwgCi0gICAgNDIwODcsIDMwNjMsIDY1MCwgMCwgNzgzOCwgMCwgMTk1MDQxLCAxOTUwNDAsIDExOTE0MiwgOTAzMSwgMTIwNzkwLCAKLSAgICAxMjg1ODIsIDkwNzgsIDg1NDUsIDY2MzU2LCAxMjg3OTksIDAsIDkxNTQsIDkxMTgsIDEyNjU0MywgMCwgMjY3NiwgMjI3NywgCi0gICAgMCwgNzM4MTIsIDYxOTAsIDg1OTksIDE5NTA1MywgNjk5MTgsIDEwNzk1LCA5ODU3LCA3MDE0LCA5ODU2LCAxOTUwMzMsIAotICAgIDkyNjIwLCAxMjEyOSwgMCwgODQ4MSwgMCwgNjIwMiwgMTk1MDM1LCAxMDkyMCwgMTI4MjM3LCA1MjAzLCAxOTUwMzksIAotICAgIDE5NTAzOCwgNTEwOCwgNTEwNywgNjU4MTgsIDY2MDE5LCA5NzYyLCAwLCA1NTQxLCA3NDc3MiwgMCwgMTI2MTMsIDUyODQsIAotICAgIDY2NTcsIDIwNywgMTI4ODA2LCA0Mjc1LCA3NDgxOSwgODU0LCA2ODE0NywgNzQzODEsIDAsIDc4Nzg2LCA1MTAzLCAKLSAgICAxMjc4NjEsIDY0MzQ4LCA0MTM2OCwgNDM5NzQsIDQ4OCwgNjk4MTEsIDAsIDcxMzM5LCAxMDE1NywgMCwgNDMwMzQsIAotICAgIDExNDM4LCA2NDY3NCwgMCwgOTI2OTQsIDY4NDMxLCA0MTc3MSwgNTEwNiwgNjY2OSwgODUwNCwgNjUxNTQsIDY5ODEzLCAKLSAgICA0MTM2NywgNTEwNSwgMTI3NTA5LCA2OTcyMCwgNjQ3NiwgNTEwNCwgOTgzNzQwLCAzMDQsIDMxNzYsIDExOTAxMCwgMCwgCi0gICAgOTMyLCAxMjA2MzMsIDY1NjcsIDIzOCwgNjk2NTYsIDE5NTAxMSwgMTk0NTk1LCAxOTkwNSwgMTIwNTc3LCAxOTUwMTUsIAotICAgIDc4ODcwLCA0MTA0NCwgNjc2NDAsIDE5NDkwMiwgNDIwNTUsIDk5MTIsIDY1OTM5LCAxMDY3MCwgNzQwOTMsIDEzMjczLCAwLCAKLSAgICAxMjU1MiwgMTk1MDE5LCA4ODAzLCAzMDksIDY2MjIsIDgxNTEsIDEwODU4LCA3ODcwNiwgNjc2MzYsIDAsIDEyNTY4LCAwLCAKLSAgICAxMjU1MywgMTA4MTQsIDQzMjc1LCA2OTUwLCA5NzEyLCA2ODY4MCwgNDM5NzAsIDk4MzE5OCwgNjUxNjUsIDkyNzI1LCAwLCAKLSAgICA2NjQ2NiwgMCwgMCwgMCwgNjY3MjUsIDYxOTEsIDExMzUxLCAxMDQzNywgMTEzMTYsIDY3NjM0LCA0Mzc2MywgMCwgNDE3NTQsIAotICAgIDY3NjM1LCA5MzcwLCAyNzIwLCAxOTQ5NzUsIDY4NDYyLCA4MjMyLCAxMTg4MTcsIDAsIDMyMjIsIDAsIDAsIDAsIDY2NjYzLCAKLSAgICAwLCAwLCAxMDgzNCwgMCwgMCwgNjU3MzIsIDk0MDk1LCA5MTc1NDcsIDkyNjgyLCA2NzY3OSwgMTk1MDIwLCAwLCA3NzgxLCAKLSAgICA0MTM4MywgNjQ1NjgsIDAsIDEyMDczOCwgMTIwNzcsIDAsIDY0NTg2LCA5MTc2MjAsIDQyMzk2LCA1NTI1NSwgMzQ3NSwgCi0gICAgMTI4MDM1LCAyNDc5LCAwLCAzNjMyLCAxMjA3MjgsIDEwNjk4LCA4Mzc2LCAzNjQ4LCAxOTQ5NjAsIDc0ODQ0LCA2NzYzOSwgCi0gICAgMzYzNiwgNjc4OTQsIDM2NTAsIDg4MzcsIDY1MjI5LCAxODQzLCA0MjI4MywgNDMyNTAsIDQxNTYyLCA5MTAwLCA3NDU0OCwgCi0gICAgOTE3NjMwLCAzNjQwLCAxMjcxOTAsIDQyMzIxLCA3Mjg0LCAxOTQ5NzQsIDE5NDk3MywgMTk0OTUwLCAxOTQ5NDksIAotICAgIDE5NDk1MiwgMTk0OTUxLCAxMjY2NDksIDE5NDk1MywgNDIwODAsIDI1MjksIDAsIDAsIDAsIDQyMDgzLCAxMjA2NzgsIAotICAgIDY4Mzk4LCAxOTQ5NTcsIDY3NjE5LCA2NjM2NywgMTk0OTU4LCA5NjM0LCA5MjM4MCwgOTk4OCwgMCwgNDEwNjgsIDAsIAotICAgIDQyOTUsIDY1MjY0LCA2ODAwNiwgMCwgOTI1NDUsIDAsIDc4NSwgODIzNiwgMTI4NjQ3LCA5MDI3LCA2ODE2MCwgNjc2MjMsIAotICAgIDY0MzgzLCAxMjAyNjUsIDkyNSwgMTI3MTU2LCAwLCA0MTk4NSwgNDEwNzEsIDk1ODYsIDAsIDQxOTg0LCA5MjE3LCAwLCAwLCAKLSAgICAwLCA5MTg2LCAyMDY3LCA0MDE2LCA5ODM3OTQsIDAsIDM4MSwgMTI5MzYsIDAsIDQyMDc3LCAwLCA2OTg4MCwgNTE4NCwgCi0gICAgNDIwNzgsIDE5NDk0NywgMTA4MTAsIDEyODUzMSwgNDU4NSwgMTk5NDMsIDU4NjAsIDY3NjMzLCAwLCAwLCA4MTIsIDM2MTUsIAotICAgIDAsIDUxNzgsIDQ0MDAwLCAxMjA1NDgsIDc4ODA3LCA1MTg4LCA3NDI4NywgNjc2MjksIDM2MDUsIDEwNjkyLCAxMTY2LCAKLSAgICA2NDQyOSwgNDI2MzksIDkyNCwgMCwgNjc2MzEsIDQyNjE2LCAxMjA2NzAsIDI0NDIsIDEwNzAzLCA3ODc4OSwgNjc2MzIsIAotICAgIDkxNzkyNCwgMTI3NzEsIDEyNzM2LCAxMjc1MywgNjY3MDgsIDczOTMzLCA2NzYyNiwgNDI0MDEsIDAsIDY5ODcyLCAKLSAgICAxMjczNzMsIDQyMjg4LCAxMjc1MSwgMCwgODU0MiwgMTMxNDUsIDE5NDk2MywgMjQ2OCwgNjY3MDYsIDQxMjk0LCAzNjI2LCAKLSAgICAzODgzLCA2NDM4OCwgNDI0NzksIDAsIDQxMTE3LCAwLCA5MjU4MCwgMCwgMCwgNjc2MjQsIDAsIDEyOTAsIDAsIDY1NTg1LCAKLSAgICAyNzE1LCA4MDYsIDY1MjA4LCA0MTg4NCwgOTE3ODgzLCAxMzE4LCA2NDczMSwgMTI2NTc4LCAwLCAwLCA2NjMyNSwgMzQ2NSwgCi0gICAgMjQwNSwgOTI0MCwgMCwgMTI3NTYsIDY1MjU5LCAwLCA5ODM3NzIsIDEyNzUyLCA1ODMzLCAxNDMyLCAwLCA0MTg4MywgCi0gICAgNzM5MTIsIDk3OTksIDAsIDQxODg2LCAyNDgwLCAwLCAyMDYyLCAxMjcyOTMsIDY0OTQsIDU1MzcsIDc4NjU2LCAwLCAKLSAgICAxOTQ1ODcsIDAsIDEyMTEsIDAsIDAsIDAsIDExODgzMiwgMTIzMTgsIDAsIDAsIDY4MDA1LCAxMDYyMiwgOTgzNzcwLCAwLCAKLSAgICA3ODY1NCwgNjU2NiwgNzg2NTksIDAsIDczNzgwLCAxMTkxOTYsIDY0ODY0LCAwLCA3ODY2MCwgMCwgODI4NCwgMTMwODEsIDAsIAotICAgIDM1ODksIDQyMDUxLCA0MDM1LCA2NDkyLCA5MjIzNiwgNDI2NSwgNjY0MiwgMzk3NywgNzQxODYsIDQxNzc4LCA4MzYsIAotICAgIDExOTIxNiwgMjQ4OCwgMCwgNDU4MiwgMCwgMCwgNDE3NzcsIDEyOTI2LCA5ODMzNjksIDc1MjgsIDEwNTUwLCAwLCA5MjcwNiwgCi0gICAgMCwgMTA5NjEsIDAsIDEzNzQsIDY0ODc4LCAxMTkwMTQsIDAsIDQyMzg5LCA0MTM3NCwgMjI4NiwgMCwgNzg0OTIsIDQxMzc3LCAKLSAgICAxMjc5MDksIDAsIDQwMCwgMTI1OTcsIDEyMDU4NiwgMCwgMCwgNjY2MSwgOTgzMTQ1LCA2NDgyNywgMCwgNzM4MTcsIDM5MCwgCi0gICAgMCwgNzEzMDEsIDk4Mzg1MywgMzQ3MywgNzcxOCwgMCwgMCwgMCwgNTUyODUsIDAsIDAsIDAsIDExOTY5LCA5ODMzODIsIAotICAgIDEyNzg0MSwgNjM2NSwgMTg4NywgNjc2MywgOTgzMzYyLCA4MDgwLCA3MDA2LCAwLCA5ODMzNjMsIDY3NTcsIDY0MzUxLCAKLSAgICAxNTQ0LCAwLCA2NzY2LCA2NDY3NywgMTIwNzE2LCA5ODMzNjQsIDYxNDYsIDAsIDc3MSwgOTgzMzY1LCAwLCAxMjgxMiwgCi0gICAgMTMxNjgsIDQyMjcyLCAxMjIwMCwgOTE3OTI3LCA3OTA0LCAwLCA5NTMsIDEyOTE3LCAxMTk1NjAsIDEyMzAwLCAwLCAKLSAgICAxMTQ5MSwgOTcyNCwgMTAzNDEsIDk4Mzc2NCwgOTUyNCwgNzQ5MCwgMTEzODksIDc0ODksIDMzNzksIDAsIDc0ODcsIDAsIAotICAgIDQ3MSwgNzQ4NCwgNzQ4MiwgNjc1MywgNzQ4MCwgNTc2NCwgNzQ3OCwgNzQ3NywgNjUwMSwgNzQ3NSwgNjkxOCwgNzQ3MywgCi0gICAgNzQ3MiwgMjQ3NCwgNzQ3MCwgNzQ2OCwgMTAyMzIsIDEwNjE1LCAxMDIxMywgMTI3Mjg4LCA5MjM1NywgMTAwNDksIDExODM0LCAKLSAgICAzNTQ0LCAwLCA2MDE3LCA2NTMxMSwgMTI3NDgxLCAxMjAyMTYsIDEzMzA2LCAxMDUzMywgNzg3MCwgNzM5NDksIDc2MjUsIDAsIAotICAgIDEyMDU0NCwgMCwgMCwgOTI2NjAsIDAsIDAsIDAsIDE5OTYxLCAyNDcyLCA0MjY2NSwgOTIzNDEsIDAsIDIxMzksIDQyNTYsIAotICAgIDEyMDc3NiwgNzQzODAsIDAsIDQyNjc1LCA0MjY1OCwgMTI4NDUsIDAsIDAsIDY1MTM4LCAxMTkzNTUsIDY3ODYyLCAwLCAKLSAgICA2NTY3MSwgNzA4MywgMTIwMDA4LCA4MDY2LCA3Njc4LCA3NDg2NSwgMCwgMCwgMCwgMCwgNzE4NiwgMCwgMTIwNTU1LCAwLCAKLSAgICA0NDUsIDEyMDU2NiwgMTI4MzA4LCAwLCAwLCA4MzMwLCAwLCAwLCA0Mjc5NywgOTgzMTUwLCAxMjAyMTUsIDAsIDM5MDIsIDAsIAotICAgIDE3NzAsIDAsIDEyODg2NiwgMTU2MCwgMTIwMjA5LCAxOTQ5NzIsIDQ1ODQsIDczODQzLCAwLCAxMTcxMiwgMTA4NjYsIAotICAgIDExODkyOCwgMTExOCwgNzEzMzQsIDAsIDAsIDEwODEsIDc0MzYsIDY4NDIwLCA3MjUyLCAwLCA1OTk2LCA2OTkyMSwgNDkwMywgCi0gICAgMCwgNDEzODYsIDUxNjIsIDExOTE4OSwgMTMzMCwgMCwgNzEzOSwgMCwgMTIwNDcsIDQxMzg0LCAwLCAwLCAxODQ4LCA0MzM0LCAKLSAgICA2MzI0LCA0MTk3NSwgNjQ3NzcsIDEwNjc0LCAxMjMwOCwgMTIxODYsIDAsIDAsIDk4MzczMiwgMTI3MTUsIDY4MDAyLCAKLSAgICA5ODM0NzEsIDEyNjYzMCwgMjAxOCwgNjY2NzIsIDQxOTc5LCA2NjY4NSwgMTE5MTU3LCA2ODAwMCwgOTI0NjQsIDAsIAotICAgIDEyNjk4NCwgNjgwMDEsIDkzMzQsIDkyNzA1LCA5MjMxNSwgNzAxMDEsIDc5NzUsIDAsIDc3OTU3LCAwLCA2NjYyMSwgNDg4NCwgCi0gICAgNjY1OTcsIDY5NzMyLCAwLCAwLCA2MzEzLCA2NTUxMywgNjk4NTcsIDAsIDAsIDAsIDIzNDUsIDQzNjk3LCA0NjMsIDAsIDAsIAotICAgIDExOTYwNywgMzExNywgNTQ2MCwgMCwgMCwgOTgzMzc5LCAwLCA0MjI3OSwgMTk0NTc3LCAwLCA3ODQxNSwgMCwgMTk1MDA4LCAKLSAgICA5ODMzNzYsIDEzMjQ4LCAwLCAwLCAwLCAwLCAwLCAwLCA1NjYzLCAwLCAwLCAwLCAwLCAyNDgyLCAxNDcxLCAwLCAwLCAKLSAgICA0MjI0NywgMTIzNzgsIDczOTI1LCA2OTY2NCwgMCwgMTIzNzQsIDAsIDAsIDAsIDk4MzY4NSwgMjQ2MCwgMCwgMTE5NDQsIAotICAgIDEyMzc2LCAxMjc4NjgsIDY0Njc5LCAwLCAxMjM4MCwgMTA1NTcsIDY0NDczLCA1ODcwLCAwLCAyMDI0LCAxMjcxODAsIDAsIAotICAgIDAsIDUzOSwgMCwgMTI3NzY1LCA5NDA1MiwgMzg1MywgNjUxODAsIDEyNzkyMywgMTIwNzk2LCAxMjAyNDUsIDkyMzI0LCAwLCAKLSAgICA4NjU5LCAwLCAxMjQ3NCwgOTI1NzksIDk1MDMsIDE5NDk2OSwgMjQ3OCwgMCwgNDE2MiwgMCwgNDI2MCwgMTI5NTMsIAotICAgIDY5NjMzLCAxMjAwODksIDEyNDcwLCAwLCA3NDE4OSwgMjc0MiwgMTI0NzYsIDExNzk4LCAxMDk0NiwgMTI3MzEwLCA1MDAwLCAKLSAgICAwLCA5ODM1NzksIDAsIDY5NjcyLCA4MjEzLCA3NDAxNywgNzc3MSwgNjE2MSwgNjgwMTgsIDY3MDksIDAsIDc4ODg1LCAKLSAgICA5ODM2OTksIDEyNzk3MSwgMTIwNTgyLCA3ODU0NywgMCwgMTAzMDEsIDEwMzMzLCAxMDM5NywgMCwgMCwgNzM3OTEsIDAsIDAsIAotICAgIDAsIDAsIDExOTEyMywgNDAxNCwgMTI4NDIsIDczOTUyLCAxMjAxNSwgMTI3MjkwLCA4Mjc1LCAzODkzLCA5ODMyNTYsIDAsIAotICAgIDEyMjEwLCA3MjIxLCA0MjE0NywgMCwgNzQ1NTAsIDc0NDY1LCA2NDc0NywgMTE4ODQxLCAwLCAxMjUxNiwgNDQ0NCwgMCwgCi0gICAgOTIyNzEsIDc0NTM3LCAxMDg5MiwgODIzMSwgMCwgNjQ3MywgNDE5NjgsIDc4Mzg4LCA0MTk3MywgMzU5MSwgNDE5NjksIDAsIAotICAgIDI0NTMsIDEyODU0OSwgOTI2NjYsIDY0NzA1LCAwLCAwLCAxMDM0OSwgMTA0MTMsIDQzNTkxLCA0MTk2MiwgMzIwMiwgCi0gICAgNzQzNTMsIDAsIDgzMTYsIDAsIDAsIDk0MDYwLCA2ODcsIDAsIDAsIDAsIDE4NDAsIDAsIDY4NjcxLCAxMTk4MDksIDQ4ODMsIAotICAgIDI4NSwgNDcyMywgNzAwOTksIDkyNjkyLCA0NDU5LCA3NDU3NywgNDI5MjEsIDQxNzIwLCAxMTA4OSwgMjQwLCAxOTkwNiwgMCwgCi0gICAgNDIzMjMsIDAsIDk3NDMsIDEyMDIzMiwgMTMxMzQsIDEyNjUzNSwgMCwgMCwgMCwgMCwgNDI2MzQsIDk4MzMzNSwgNDM0MzcsIAotICAgIDMwODEsIDExNDYzLCAxMjAxNTQsIDAsIDAsIDEwNDQ1LCAwLCAwLCA2NjcxNywgMjYxNCwgOTEyNSwgMTE5MDIzLCAxNzI5LCAKLSAgICAwLCAxMjAyMzYsIDY1MjIxLCA2Mzg4MywgNDMzMzQsIDY0ODUyLCAwLCA2NTE5NCwgNjYyMDEsIDAsIDY2NTc4LCA1MDAxLCAKLSAgICA0MTg3OSwgNzQ0MjcsIDQxMjEsIDUwMDMsIDg4NCwgNjY3MDAsIDYzODc5LCA0OTQzLCA1MTUwLCA3Mzg4OSwgNzQxODIsIAotICAgIDEyNzkxNSwgNjQzLCAzMDg2LCAwLCA0MjQ0OCwgNDIyOTksIDU4LCAwLCA5MTc5NTIsIDEyMDA4MywgNjM4NzMsIDg0OTEsIAotICAgIDAsIDAsIDAsIDQ1MzAsIDQyNDA5LCA3MTI2LCAxOTQ1NzUsIDI3MjEsIDEyMDA3NCwgMTE5MDk2LCAxOTkyOSwgMCwgCi0gICAgMTk0NTc0LCAwLCA0MjQyLCA0MjY0LCAxMjAwNzcsIDEyMDUzMCwgNjYxNzksIDQyNDEyLCA2NTk0MSwgMTMxMTQsIDY0NTIyLCAKLSAgICAxMDc0MCwgMzA5NCwgMCwgOTc1NCwgMTE5MTAyLCA0NDM3LCA3Mzk0OCwgMTI3MDc0LCA5ODMyMzIsIDU1MjgwLCA0MjE3NCwgCi0gICAgMTk0OTI1LCA0MjQzMCwgMCwgMCwgNDIzNTUsIDY2MDI2LCA0MzA2LCA0MTM4MCwgNjg0MzIsIDkyNTg2LCAwLCA2NjY2NywgCi0gICAgMTI3MzA5LCAwLCAxMjY1MjEsIDQyMjAwLCA0MjU2NiwgMCwgMCwgNTA4OCwgNjk0OCwgMCwgODUyNCwgMCwgMCwgMTIzODUsIAotICAgIDAsIDAsIDY5NjQ2LCAxMzg2LCA2NDU4MCwgMTE0ODAsIDYxMTYsIDY1MDM5LCA2NTAzOCwgMTIzOTIsIDY1MDM2LCA4MDY0LCAKLSAgICAwLCAxMjEwMSwgNTgyMiwgMTE5MDA0LCAyMDgwLCA3MTAsIDc3OTk5LCAxMTY2MywgMTY2NiwgNDIwOTEsIDExOTY1NywgCi0gICAgMTIzODMsIDQzNjcxLCA0MjA5MiwgNjg0MTgsIDQyODksIDAsIDYzODk2LCAxMjA2MSwgNDIwOTYsIDQzNjIxLCAzMzYyLCAKLSAgICAxMjM3NywgOTgzODIzLCA5ODM4MjUsIDY4NDQ5LCA3NDYxLCA3MzkwMSwgMTI0NCwgMzMxLCA3Mzc4NiwgMTI2ODMsIAotICAgIDEwNjYyLCAwLCA4MTEyLCAwLCA2NTg1MiwgMCwgMTIzNzksIDE5NDg3NywgMTIwODE4LCA0MTk2NCwgNDIyMDgsIDYzODQzLCAKLSAgICAyMDg0LCA0MTk2NSwgMCwgNjU4NjYsIDQzMjcsIDAsIDYzODQwLCA3ODU0OSwgNDEyMjAsIDEzMDMyLCAwLCA1ODQsIAotICAgIDEyOTMzLCA0MzE3NywgMTIzNzMsIDY5ODU1LCAxMzAwMCwgMTM1MSwgMjkzNSwgODY5OCwgMTI2NjUsIDAsIDE5MzAsIDAsIAotICAgIDc4MjI5LCAxMjQyNywgNjY1MTQsIDY5ODU5LCAxMzAzMSwgMCwgNjM5MDEsIDAsIDM2NTcsIDEyODU3MiwgNjUyMDIsIAotICAgIDYwMDAsIDExOTIwNiwgMTI0MjYsIDEyNzE4MSwgMCwgNDE3NDAsIDEyNDI4LCA0MTI4MywgNDE5MTYsIDExOTIxMCwgMCwgMCwgCi0gICAgMTI0MjksIDY3MjcsIDAsIDc1NjIsIDAsIDUxNzAsIDAsIDQxNzU1LCA2NzYsIDAsIDY2NzA0LCA2NjY2NCwgOTk3OCwgCi0gICAgNjY0OTEsIDM1MzYsIDAsIDk3NTIsIDkyMzk3LCA2MTYyLCAwLCA2OTIyOCwgMTAxMTMsIDQxODI5LCA2NTg4NiwgNTE1OSwgCi0gICAgMTI0MjIsIDQxODMyLCA0MzksIDQzMDc3LCAwLCA0MjIwNywgNzQ1NDksIDExNzk2LCA0MDk3MCwgNDE4MzAsIDAsIAotICAgIDkxNzc5OSwgODMwOCwgOTE3Nzk3LCA5MTc3OTYsIDAsIDY3ODY0LCA5MTc4MDEsIDkxNzgwMCwgMTIzMzYsIDQxMzUsIAotICAgIDY5ODA1LCAzNDEsIDI3MjcsIDQxMjksIDM1MzksIDAsIDYzODYxLCAwLCA3OTEzLCAwLCA2Mzg1OSwgNDEzMSwgNjM4NjgsIAotICAgIDAsIDYzODY3LCA0MTMzLCAxMTM3MSwgMjEwLCA0NjAwLCAwLCA3NDU2MCwgNDEzNywgODA4MiwgNzg1MDYsIDExOTA2MiwgCi0gICAgNzg1MDQsIDY3MDQsIDQ1OTEsIDEyODAyOSwgMCwgMCwgOTY4MCwgMCwgMTIwNjIzLCA1NjEsIDEyMTU5LCAxOTUsIDc4NTA4LCAKLSAgICA0MTUwMSwgMCwgNDIwMzEsIDU3MTksIDcxNzIsIDQyNjg3LCA4MzY4LCAwLCA0MTQ5OSwgMCwgMCwgNDIyNDIsIDQxNDk4LCAKLSAgICA5MTc3OTQsIDQyMDI1LCA3ODU2NSwgNjU4MDUsIDQyNDYzLCAwLCAyOTI0LCAwLCAxMjA1MTAsIDAsIDAsIDExOTIxMywgCi0gICAgNzM5NDEsIDAsIDQyMzMwLCA5MTc3ODQsIDM5NjksIDAsIDAsIDcxNjksIDE5OTIsIDk2NTIsIDczOTc3LCA3MjQ2LCAKLSAgICA0MjA4NiwgMTI2NjE1LCAyMjE5LCAwLCAwLCAxMjg4MDEsIDE5NDgzNywgMCwgMzI3LCAwLCA5MDQyLCA5MTc3NzcsIAotICAgIDkxNzc3NiwgNjUxNDgsIDEyNDMzLCA5MTc3ODEsIDEyNzI3NiwgOTE3Nzc5LCAxMjQzMSwgODY2OCwgMTI0MzQsIDk4MzgyNiwgCi0gICAgOTE3NzgyLCA1OTk5LCAwLCA3NzEyLCAxMjQzMiwgMTI4MjQzLCA0MzY1MywgMTcyNiwgMTAxNSwgMCwgODIxMiwgMCwgCi0gICAgMTI4MDE0LCA0MjQyMywgMTE5MDY2LCAwLCAxMjgxMDgsIDY2NzA5LCAwLCA4ODExLCA5MjcsIDAsIDAsIDEyNDM2LCAKLSAgICA5ODMyMzksIDQyMDIxLCAwLCAwLCAxMjk5LCAxMjI0MCwgNDIzNTAsIDY1MTQzLCAwLCAxOTUwMTYsIDAsIDc4MTk3LCAKLSAgICAxMTM0OCwgMCwgNzgwMzcsIDkxOTQsIDk4MzE4NCwgMCwgMTk5MTQsIDEyMTc5LCA5ODM4MDMsIDIyOTYsIDE5NDkyMywgCi0gICAgNjM4MzYsIDYzODMyLCA5MTc3NzMsIDEwOTY3LCA2MzgxNiwgMjU5NCwgMzQ0NCwgNjM4MTcsIDY0NjUxLCAwLCA0MTUwMywgCi0gICAgMTI3NDc4LCAxMTI2NSwgMCwgMTIwNzU2LCAxOTQ5MjIsIDAsIDU2NjQsIDM5NzIsIDAsIDAsIDAsIDEyODUwOCwgMTI0MTYsIAotICAgIDkxNzc2NCwgMTE5NjA4LCAxMDgxNiwgOTE3NzY5LCA5MTc3NjgsIDEyNDE4LCA3NDExMSwgMzg4MiwgODUzMiwgOTE3NzcxLCAKLSAgICAxNTczLCAxMjg2NDgsIDExOTg0NywgNDU5NiwgNjYzMzksIDEyNDE3LCA2NjAwMSwgNjUzNDMsIDEyNjQ5MSwgMTI0MTQsIAotICAgIDgyODcsIDY4MjE5LCAxOTUwMTcsIDY4MTA4LCAxMTQzLCAxMTkxNjksIDExOTg0NiwgMTI0MTUsIDY2MjYsIDQyNzYzLCAwLCAKLSAgICAxMTg4ODQsIDkwMjEsIDEyMDc4MywgMCwgMTE3MjQsIDAsIDAsIDEyNzEwNCwgMTI2NjE5LCAwLCAwLCA4MDI3LCAxMDk5NywgCi0gICAgOTE3MSwgMTI3NDEsIDExNDAwLCA3MTMwNSwgMTk0Nzk5LCAwLCAxMjgyMzksIDAsIDEyODg4MSwgMTE5NjA0LCAxMjc1MjMsIAotICAgIDEyMDE5MCwgMTk0NzczLCA2NzYwOCwgMTI4MjE0LCA0MjM2OCwgMCwgNzcxNSwgMzg4MSwgNDE0ODcsIDEyMTE4LCA0MjUxNCwgCi0gICAgNjg2NTEsIDAsIDk4Mzg4NiwgMzAwOSwgNDE0NzYsIDQxNDg5LCA2OTgyNSwgMzAwNywgMTQ0OCwgMzAxOCwgMTk0ODA5LCAKLSAgICAzODg5LCA4NTIxLCA1MDgzLCA1MDgyLCAxMTk4NTksIDEyMDE4NCwgODUxOSwgOTgzMjM1LCAzMDE0LCA1MDgxLCA2NTg1MywgCi0gICAgMTIwNzE1LCAwLCA2ODAxNCwgNjk5NTEsIDUwNzksIDY0ODAyLCA0MjIxMCwgNDU5NywgNjU1MzIsIDExODI4LCAxMjAxODUsIAotICAgIDEyMzcxLCAwLCA4NDA3LCAwLCAxMDgwNSwgODUxOCwgMTA3NzksIDEyMDE4OCwgNzEzMDMsIDk4MzkyNCwgMTIzNjcsIAotICAgIDQyMTcwLCAwLCA5MjU1NywgNjI5LCAxOTI0LCAwLCAxMjAzNywgNzQzNjYsIDU5ODcsIDg0NjIsIDgwMDUsIDEyMzY1LCAKLSAgICA2MzkzMywgNjk3MzUsIDEyMDgxNSwgMTIzNjksIDEwNjQ5LCA2Nzk4MSwgNTA3NywgMTIwMTc0LCAxMDg4MCwgNjM5MjcsIAotICAgIDUwNzUsIDkxNzg4MSwgMCwgNjUwNzUsIDAsIDExMDA3LCA5ODM2OTYsIDY2NjU5LCA5MjYwNywgMCwgNjY2ODQsIDAsIAotICAgIDM0MzQsIDQ5NTQsIDE5MDQsIDAsIDUyNjYsIDEyNjk4MCwgNTI3MiwgMTA0OTksIDQ1MDcsIDk1NzgsIDYzOTIzLCAKLSAgICAxMjAxNzcsIDc5NzksIDAsIDk4MzEsIDAsIDE5NDkyNiwgNDYxLCA5ODAzLCAwLCA0NTA0LCAxNTA1LCAwLCA2MzI1LCAKLSAgICA1Mjc2LCA0MzAyMSwgMTIwNDg4LCAwLCA1NTIzNiwgMCwgNjY0NjEsIDUxNzcsIDQxMzI0LCAxMjA1NSwgODcyMiwgMCwgCi0gICAgNDEzMjcsIDAsIDY2Njk1LCA0MTE0LCA0MDksIDQzODMsIDg5MDAsIDg5NDgsIDQxMzI1LCAwLCA3MjEsIDEwMTgyLCA5MTA4LCAKLSAgICA3MTMxMSwgMCwgMTE5MTg1LCA0MjIyOSwgMTk0OTEyLCAwLCA1OTk4LCAwLCA0MjM1MywgNzQ4MjUsIDAsIDEyNTg3LCAKLSAgICA5NDEwNCwgNzg1NzEsIDAsIDcxMzI4LCAxOTQ1NjIsIDQxNTc2LCA0MjIxNSwgNzg1NzAsIDExOTIwNywgMCwgODU3OCwgCi0gICAgNTk5NSwgNzU3MywgNDE1NzUsIDc0Nzg5LCA3NDc1MiwgNjM5NDQsIDYzOTQ5LCA2NDc2NywgMjY3MCwgNDE2NywgMTk0Nzk2LCAKLSAgICAxMTcyMywgMCwgNzQxMjAsIDAsIDY1MDc2LCA5MzgsIDQzNDE0LCA3Mzg1NCwgMTE3MzcsIDk3MjEsIDAsIDAsIDAsIAotICAgIDExNzQyLCAyNDE5LCAwLCAxMTQ5MywgMTIzMzQsIDE5NDkxMywgNDE1MywgMTIzMDIsIDEwNzkzLCA1MjUwLCAxMjQwNywgCi0gICAgMTE5NzgsIDQ0MDQsIDkxODksIDEyNDAxLCA0MjAwNywgNTc3NSwgNjc1OSwgNjU4MDYsIDQzOTk3LCAwLCA0MjAwMiwgCi0gICAgMTI0MDQsIDk4MzU1MywgMCwgNDk0MCwgMTI0MTAsIDc2ODMsIDExNjcsIDczNzI5LCA0OTgzLCAxMjA1MDcsIDg2MSwgMCwgCi0gICAgMCwgMCwgMCwgNDM3NTcsIDQzMzcwLCAwLCAwLCAxMTk1NiwgMCwgMCwgMCwgOTYxNiwgNjYzMSwgMCwgMTI4MTYsIDQzNzU5LCAKLSAgICA0MjIxOCwgMTI3MTAsIDY4Njc0LCAxMjcyMSwgNDEwMSwgNjYxODUsIDAsIDU5OTIsIDc2MTYsIDE5NTA0NCwgMCwgMTI1NzcsIAotICAgIDAsIDk4Mzg3NSwgODUzLCA0MjY5MywgMTk1MDE0LCAwLCA5ODM2MzgsIDUwMTYsIDQzNTM1LCA2Mzg5MywgNDI4MzUsIAotICAgIDk0OTEsIDkxNzkxMywgMCwgOTE3OTE0LCAwLCAxMjcxMiwgNzEwNSwgMTI3ODA3LCA2NTA2MCwgMTIwNzk3LCA5OTAwLCAKLSAgICA3NzUwLCAwLCAxOTQ5MTksIDAsIDEyNzgzMCwgMCwgNjQ3NzgsIDEyNTg1LCAxMDU2NSwgMTI4MTUxLCAxMjE3NywgMCwgMCwgCi0gICAgMCwgNzc4MjQsIDAsIDQ5MDAsIDEyNzg3NCwgMTI4NzgsIDkyNjMwLCA4OTg0LCA0MTE5LCA3NDc2OCwgODk3MSwgNzg1OTMsIAotICAgIDQzMTEzLCA5NzAyLCA3ODU5NCwgMTEwMjUsIDkyNDUsIDEzMDQ4LCA0OTI3LCA0MTM4LCA3NDE4NSwgOTI0ODEsIDkyNzEwLCAKLSAgICAxMjM5NywgNzc4MjcsIDAsIDEzMDU0LCAxMjM5NCwgMCwgMCwgMCwgMTMwNTMsIDAsIDM5NDgsIDEwNzgxLCAxNTQ2LCAwLCAKLSAgICA1MDEwLCAxNjgwLCAxMDUwNywgNzg1OTAsIDc4NTgzLCAwLCAwLCAwLCAxOTQ5MTUsIDcyNjcsIDAsIDc0ODMzLCAxMjgxODEsIAotICAgIDU5OTMsIDI4MTksIDAsIDEyNzA2LCA3Nzg0MCwgMTg5MywgNzI2NiwgNjM5MTUsIDcyNjQsIDcyNjUsIDAsIDEzNjMsIDAsIAotICAgIDYzOTk3LCA2MzkxMCwgNjM5OTYsIDMwNzcsIDAsIDAsIDE1MTIsIDY5OTI5LCAxMjU4OSwgNDE0NzksIDEyODMxMywgMCwgCi0gICAgNDMzMzksIDAsIDk4MzYsIDEyMDcyNywgMCwgNDE0ODEsIDQzMzM1LCA3ODMyLCA0MjM0MywgMzA5MCwgNDMzMzcsIDgxNywgCi0gICAgMTY2NCwgMTg1MCwgMTI4ODQxLCAzMDc5LCAxMTM0MCwgNDI0MDgsIDQyNDQ3LCAxMjcxNDAsIDEyMDAyMCwgNDIzMDcsIAotICAgIDEyMzg2LCA0MjMwNCwgOTE3NTU1LCAwLCAxMjM4OSwgMCwgOTIzNjYsIDQxOTk2LCAxMTUyNiwgNjM5ODUsIDU4NjQsIAotICAgIDExNDcsIDYzOTkyLCA0Mjg4NywgMTk4NywgOTI3MTgsIDU0ODAsIDc4NTgsIDExNjUzLCA0MTE2LCAxMjM5MSwgNjYxOTMsIAotICAgIDAsIDQ5MzksIDEyMzg0LCAwLCAwLCA0MTY4NiwgNjM5MDUsIDExOTYwMSwgMTk0Njg4LCA5ODMxOTAsIDAsIDEyNjQ5LCAwLCAKLSAgICAwLCA4MjQ3LCA1MDcsIDkxLCAyMDQyLCAxMjA3NzUsIDQzNjQzLCAxOTQ2ODksIDY2MDI4LCAxMDAzNiwgNDE4NDQsIAotICAgIDExOTgxMywgNzc0LCAxMTk4MjksIDAsIDExOTgxNSwgNTk5NCwgMTI1MzksIDAsIDc4Mzc1LCAxMjA1OTcsIDExOTgzMywgCi0gICAgOTgzMTA1LCAxMTk2MDAsIDAsIDAsIDc3MTksIDYwMjYsIDI0ODYsIDEyODMxMiwgMTE5ODA4LCAxNjIsIDAsIDY1MjE5LCAKLSAgICA0MTA3MywgOTY4NywgNDE2ODEsIDYzMDQsIDExOTgxMiwgNjYxOTYsIDE5NDg4MSwgNTI2MiwgMCwgNTUyMzMsIDEyNjgxLCAKLSAgICA0MjM3OSwgMCwgNzUzNCwgMTIyMTksIDAsIDEyNzUyOCwgNDI4MTAsIDEwNDkyLCAwLCA5ODM2NTIsIDAsIDQzMTE5LCAwLCAKLSAgICAxMjA3NTMsIDEyNDAzLCAyNTAwLCAxOTUwMTMsIDAsIDQ4OTksIDEyNzI5LCAwLCAwLCA3NDExMywgMjM0MywgNDEwMywgCi0gICAgMTk5NDYsIDc0MTEyLCA3Nzg1MSwgMTMxMTIsIDAsIDE5NTAxMiwgMTI4NTksIDcwMDg3LCAxMjAxNDgsIDY2MzY5LCA1ODYxLCAKLSAgICAxMjc3NTgsIDExOTk5LCAxMjQwMCwgMCwgOTgzODMwLCAxMjY0NSwgNTE0NiwgMTEzMjAsIDY4NDEwLCA2NzQ4LCA2NTA0MCwgCi0gICAgMCwgNjQxODQsIDEyOTc0LCA2NDE4MywgNjc2MTMsIDEyMDY0NSwgNTE0NywgMCwgMCwgNzQ1MjQsIDAsIDE5MjgsIDAsIAotICAgIDY3NjQ5LCA1OTkxLCAzNDQ1LCA2NzYwOSwgNDk3NiwgNjQxNzYsIDAsIDY3NjEwLCA4MjQxLCAwLCA3Nzg2OCwgNDIwNiwgMCwgCi0gICAgMCwgMCwgMTI4Mjk4LCAwLCAxMDEzOCwgMCwgMCwgODg5NywgMTIwMjM0LCAwLCA4MzU3LCA0MTI0LCA3Nzg2MiwgNjU4MzYsIAotICAgIDEyMDY0MSwgMTI3OTI2LCA3Nzg1OSwgMCwgMCwgMTEyMywgOTYzLCA0MTU1MywgMTAxMjAsIDEyNDA1LCAxMjAxNTAsIAotICAgIDkyNjY0LCAzOTgsIDEzMjc4LCA5NzIzLCA2MzY2LCAxMjAzMTEsIDc5NDUsIDAsIDQ0MDIsIDk5NzAsIDEyNDAyLCAKLSAgICA5ODMxMzYsIDQyMzkyLCAxMzA1LCAxMjQwOCwgMCwgNDQwMDcsIDAsIDAsIDQxNDY0LCAxMjQxMSwgMTI5NjksIDEyMDgyNCwgCi0gICAgNDE0NjUsIDk4MzU2NSwgODUyOCwgMTU3NSwgMCwgNjM5NTUsIDE2NSwgMzAyNCwgNDE0NjcsIDExOTE2MywgMCwgOTA5MywgCi0gICAgMCwgOTE0NywgMTI4Nzg3LCA2Mzk1OCwgMCwgOTE0OCwgOTY5MiwgNDA5NiwgNTMsIDczNzc2LCA2NzUwLCAxOTUwMTgsIDAsIAotICAgIDk1OTQsIDAsIDAsIDQzNTI3LCAwLCA3MjcsIDE5NDcwMywgMTk1MDIzLCA1ODA1LCAwLCA2NzI2LCAwLCA0MjE3NiwgCi0gICAgMTIzNzAsIDExNjU1LCAxMTkwOTUsIDEwNTkxLCAyMjgwLCAwLCAxMjM3MiwgMTIwNjQyLCAxMjAzMDcsIDAsIDkyMzQzLCAwLCAKLSAgICAxMjM2NiwgMTA5NjMsIDYwNjYsIDEzMjksIDAsIDMwNTIsIDkyMjAsIDAsIDY0NDc4LCAxOTQ3MDEsIDEwODAzLCA0MTMyLCAKLSAgICAxMjAzMDYsIDY4NDc0LCA5MjQ3MywgMCwgOTgzMzA1LCA3NDgzNywgMTIwMTU1LCAxNDk5LCAwLCA4MDU1LCA0Mjc0MCwgCi0gICAgNjM5NjUsIDAsIDYzOTYyLCA3NDA0MiwgODkyNCwgNDMxMjMsIDU5ODgsIDM2NjAsIDYzOTY5LCAxMTc4MSwgNDI3MTgsIAotICAgIDg3ODgsIDEzNTcsIDY0ODUxLCA2NTc0MywgMCwgODc3NCwgMCwgMTI3MDg2LCA5OTQxLCAxMjAxNzIsIDAsIDE5MzMsIAotICAgIDY5NjU1LCA5NTY0LCAwLCA5MjQzNSwgNzM4NjYsIDAsIDAsIDI0ODcsIDY3NjE0LCAzMTIxLCAxODA0LCAzMzExLCA2NzYxNSwgCi0gICAgNzAwODEsIDc4MzAyLCAxMjIyMCwgNjc2MTYsIDEyMDU5OCwgMTI3NDc1LCAwLCA2ODIwMCwgNjY3NSwgMTI4MTQ0LCAwLCAKLSAgICA2NzU5MiwgMTIwNjg1LCAwLCA2NDc3MSwgMTE5OCwgOTEzMiwgMCwgNjQ2MTksIDUxMCwgNjQ2NjMsIDAsIDAsIDQ1NjEsIAotICAgIDIxMDEsIDEzOTgsIDAsIDkyNTU0LCA3NDAzNCwgNDE1NjksIDkyNjg0LCAxMTQwNiwgODE2NywgMTIxMjcsIDAsIDg0MCwgMCwgCi0gICAgMTI2NTE4LCA3MTAxLCA2OTY3LCAwLCAxOTQ4OTgsIDk3OTYsIDAsIDMzMywgNjk4OTEsIDAsIDgxNDQsIDIxMTcsIDAsIAotICAgIDk4MzU5NSwgMTI0MDYsIDAsIDE5OTMxLCAxMTkwODksIDY2NzgsIDc3NjksIDAsIDEyNjIxLCAwLCAxMjczNjYsIDEwMjI3LCAKLSAgICA0NzY0LCA0MzEwMSwgOTk4MSwgMCwgNDA5ODYsIDQxMjcsIDY2NDg3LCAwLCA0MjIwMiwgMTI3NTQsIDE5NTAyMiwgMCwgMCwgCi0gICAgOTQwOTcsIDY3NTk0LCAyMDQ4LCAxMjk0NCwgNDA1MCwgNjc1OTUsIDkxNzk2NywgNDMxMDIsIDEwNTgxLCAxMjk4NSwgCi0gICAgNDUzMywgMTk1MDIxLCA3NDAwMywgNjQ5MCwgMCwgMTIwMzgsIDAsIDAsIDEyMDcwNCwgNjU0NjEsIDk3OTgsIDY5NzA0LCAwLCAKLSAgICAxOTQ4LCA2OTg0MSwgMCwgOTUyLCAxMjgyMzUsIDAsIDAsIDEyMDgwMiwgNjQ0OSwgOTQ5NCwgMTIwMzEzLCAwLCA0MzA5OCwgCi0gICAgNDg0MywgODE0MiwgNjQxNjAsIDQwOTgsIDY0MTcwLCAwLCAwLCAzNDM2LCAxMTk5NzMsIDAsIDEyODE3LCA2NzU5NywgCi0gICAgNjY3NiwgMzkzMCwgNDI2MTUsIDAsIDAsIDY3NTk4LCAwLCAwLCAwLCA2NTU5MSwgNDE1ODEsIDY1OTE2LCAxNDUzLCAwLCAwLCAKLSAgICAwLCA4NTAwLCA0MjIyMiwgMTIwMTQyLCA3Mzc0MywgMTIwNDAwLCA0MzE3LCAxMTU0MywgNjc2NzYsIDY0Njc2LCAwLCAwLCAKLSAgICA2NzYwNiwgMTE5MDgzLCAwLCA0MjIxNywgMTMxMDIsIDAsIDY2MDAzLCA2NjcyLCAwLCAwLCAwLCA5ODM3MzgsIDYzODQxLCAKLSAgICA5NjEzLCA5MDAxLCA0NTI2LCAxMTI3NCwgNjc2MDEsIDY0NTIwLCA2NDIxMCwgNjY2NCwgNzg3MDQsIDQyMDU2LCAxMDIyOCwgCi0gICAgNjQ5NTcsIDExMjgxLCAwLCAzODA3LCAxNDY5LCA2NjY0MCwgNjUzODEsIDQyMTk3LCA0OTg4LCA0MjM3MiwgMCwgOTU5OCwgCi0gICAgOTA0LCAzNTIsIDQyMjI1LCAxNDUxLCA4MDYxLCA4NDUzLCA0MTM0LCAwLCA3NDg0NywgNjY1NzYsIDEyNzkxNiwgMCwgCi0gICAgMTA1MjAsIDg1NzUsIDk5NjAsIDEyMDEsIDEyNzI4OSwgMTI4NDYsIDEyNzI5MSwgMTI3MjkyLCAxMTkxOSwgNjQ5NjIsIAotICAgIDEyNzI4NywgNDM3MzksIDEyNzI4MSwgODUxMSwgOTQ2MCwgODIzLCAxMTU4NywgMTIzMDUsIDAsIDY0Njk1LCAxMjczMDUsIAotICAgIDEyMzg3LCAxMjUzLCAxMzE4MywgNjU3NjYsIDUwMCwgNDI3ODMsIDY1NzY1LCA2NDIwOCwgNjQzNjksIDY1NzYwLCA2NTc2MSwgCi0gICAgMTE5NTg1LCAxMTYwNiwgNjQ3ODQsIDExNzAyLCA2NjQ5OCwgOTgyMSwgNjQzMDQsIDAsIDUxNTIsIDExMDQ4LCA3NTMzLCAKLSAgICA2ODM2NiwgNjQ0MTAsIDkyMzA1LCAwLCA0MzIzLCAxMjAwNjIsIDkyNjY5LCA3MTMzMiwgMTI3MDUyLCA0MjU4NywgNDIyMTQsIAotICAgIDQxMzk0LCAwLCA0NzYzLCA0MTEyLCAxMTg5MzUsIDAsIDUyNjAsIDQzMTQzLCA5NDAzOCwgMzI2LCAxMjAxMzEsIDY4NDIzLCAKLSAgICAwLCAxMDc3MSwgMjg3NiwgNzQwNzQsIDkyNTMwLCAxOTQ5MjQsIDQxMzk4LCA3MzgyLCA5ODAyLCAxMjcwNzcsIDEyNzA3NiwgCi0gICAgNDUzLCA0MTM5NiwgMTIwNTI0LCA0MjcyMCwgMTIxNDAsIDk1NzIsIDAsIDcwMDMsIDE5NDg4MywgNDIzMzQsIDc3MDQsIAotICAgIDEyNjQ5MCwgMTk0ODg1LCA0MzE0NCwgNDEyMywgODQ5NCwgNDMxNDYsIDk5NzcsIDAsIDAsIDY1NzU5LCAxMDc2NSwgCi0gICAgNjQwNjEsIDQ0NjUsIDk4MDgsIDY0MDU2LCA2NTU4MiwgNDEyNiwgMCwgOTUyMSwgOTU4OSwgNjQ3NTUsIDAsIDY0MDIwLCAKLSAgICAxMjY2MDQsIDEwNDY0LCAwLCAwLCAxOTQ4NjksIDY0NTE0LCAxMTUyOCwgNjQwMjQsIDEyODA3MiwgNjc5LCA2NDAxMywgMCwgCi0gICAgNTg1MCwgNzU4LCA3NTM2LCAwLCA5MjIzNCwgNDE0NDEsIDEwNjkzLCA2NDAwNiwgOTgzNTY3LCA2NDAwNSwgNDA1OCwgCi0gICAgMTE5MDE5LCAxMjY0ODcsIDY0NjYwLCAwLCAxMTkwNTAsIDAsIDk4MzA2OSwgMTEzOSwgNDMyOTgsIDY0MDI3LCA2NDAyOSwgCi0gICAgODk3MCwgMCwgOTkzNCwgOTgzMDk0LCAxMDc3NCwgMTI4MDIwLCA0MjIwMSwgMTI0MjEsIDEyODIxNiwgMCwgMTg1MiwgCi0gICAgMzA1NywgNjQwNDYsIDczNzQ0LCA2NDAzNCwgNjQwMzksIDAsIDAsIDAsIDE5NDg5OSwgOTIzMjIsIDc2NDUsIDEyODU0LCAKLSAgICA3NDMzOCwgMzQ5NiwgMCwgMCwgMCwgOTEwMiwgNjI3LCAxMjc3OTUsIDYxNTgsIDgzMjcsIDc0NTUzLCA2NjYzMiwgMTI0MTksIAotICAgIDEzMzA5LCAxMTU3MCwgMTI3ODExLCAxOTk2MCwgMTE2OTYsIDAsIDEwMTgsIDExODk3MCwgMTk0OTA5LCAxOTQ4OTcsIAotICAgIDE2ODIsIDE5NDg5NiwgMTk0OTExLCA0Mjc1NiwgNjc2NSwgMTk0OTA2LCAwLCAwLCA3MzgxNCwgMTE0MTIsIDY3NjgsIAotICAgIDEwNzI4LCAxOTQ4MzAsIDcxMzE2LCAxMTg4NjMsIDQzMzExLCA2NDk2NiwgMTE1NzcsIDAsIDQzMDQwLCAxODMzLCAxMTU3NiwgCi0gICAgMCwgNzQ3NzksIDAsIDE4NSwgNjUwODUsIDc0NTMzLCA2NDc1NCwgMTk0ODQ4LCA3NTM1LCA4MDg1LCA0MjUyNSwgMTIwMzg3LCAKLSAgICA5NzQ5LCA0MTcwMSwgNjEzMSwgMTk0OSwgNDExNywgNzg0NywgMTIwNDg5LCAxOTQ3MTEsIDY0NDgzLCA2NTY5MywgMCwgMCwgCi0gICAgMCwgNjk2OTUsIDQyMjQwLCAwLCAxMjY2NTEsIDQyODY0LCAxMjY0OTgsIDY0NjY3LCA0MTg2OCwgMTE4NCwgMCwgODE1LCAKLSAgICAxMTQ4NCwgMTI3NTM1LCA2Nzg0MCwgOTgzNjQyLCAwLCA2NjE5NywgMCwgMTA5ODYsIDY0NjgzLCA5ODM3NzYsIDAsIDM0NTUsIAotICAgIDAsIDAsIDk4NzksIDAsIDAsIDQxNTgsIDEyODA1MCwgNjgxNjYsIDAsIDAsIDAsIDAsIDY5NjQ1LCAzMzIsIDExODgwOCwgMCwgCi0gICAgNTE0MiwgMjQwNywgNjk2NDMsIDQyMTk5LCAwLCA5MjQwNCwgNzQzNzMsIDAsIDU1MjE3LCAwLCA2Mzg3MCwgNDMxNjMsIDAsIAotICAgIDAsIDkyMzkwLCA0Mjg2NywgMTgzNCwgMCwgOTI0NjEsIDY5ODE3LCAxMDk0MCwgNjUyNDksIDExOTA0MCwgODY2MiwgMCwgMCwgCi0gICAgMjY1MiwgMTIwNTI3LCA3MTY0LCAxMDc4NCwgMTk1MDkzLCA2NzY3NCwgMCwgOTIyMzMsIDkyNDgyLCAxOTQ3NDksIDc0NTYyLCAKLSAgICA5MTc1MDUsIDE4MjgsIDc0NDc0LCAxMjAzMjcsIDc4NjIwLCA4NTMxLCAxMjQ5OSwgNjI4MCwgMTIzMjQsIDExODg1NCwgCi0gICAgNjUyMzgsIDY4Mzc0LCA0ODMyLCA2NTU3MywgMCwgNjI3OSwgMTI1MDgsIDEyOTA0LCAxMjUwMiwgOTE2MSwgMCwgMTYyMCwgCi0gICAgNjQ0MzYsIDM2MDEsIDE5NTA5NCwgMTI4MDczLCA5ODM1NjIsIDYwOSwgMTE1NTUsIDk4MzA5OSwgMTI0OTYsIDEyNzgzOSwgCi0gICAgNzQxODEsIDQzNDMsIDEyNTA1LCAwLCAxMjc4NjMsIDAsIDExMzc3LCAyMzksIDAsIDYzNywgMCwgMCwgNDI2NzEsIDAsIDAsIAotICAgIDAsIDQzNTY1LCA3MTMwNiwgMTI2NDkzLCAxMjY5NiwgMTI4MjU2LCAwLCA5NDA2MiwgMTI5MjksIDAsIDcxMiwgMCwgNDE5NywgCi0gICAgOTgzMjA0LCA0MjgxOCwgMTI2NjMyLCAwLCAxMjA0OTAsIDAsIDExOTEzNywgMTUwNiwgNDM1NjIsIDAsIDkyNDkxLCAwLCAKLSAgICAxMjY1MSwgMCwgNjQ2MjgsIDc0NTE3LCAxMjA1OCwgNzQwODQsIDkxNzgzOCwgNzQ5NCwgMCwgNDkyNCwgNjU1OTIsIAotICAgIDExODg0NCwgMCwgMTI3MDg4LCAzNTUsIDk3MTksIDEyNzA4NywgMTMwNjYsIDY0Nzk2LCAwLCAwLCAxMjAzMywgNDIxNzgsIAotICAgIDAsIDY5NzYwLCA0MjU3MSwgOTI2MzUsIDAsIDAsIDAsIDAsIDAsIDEyNzE3NiwgMzE3OCwgMCwgMCwgOTI3MDQsIDAsIAotICAgIDkwODAsIDEyNzAwMCwgMTIwMzUyLCAwLCA2ODIwOSwgMCwgMTEwODIsIDAsIDU2OTksIDE5NTEwMCwgNjYwMDAsIDk0ODgsIAotICAgIDY1MTY2LCAxMTkxMTIsIDAsIDAsIDAsIDAsIDcxMzEzLCAwLCA1MjY1LCA2OTIzNSwgMCwgMTE0ODcsIDY3ODU4LCAxMjQ2NCwgCi0gICAgMCwgNDMwNDUsIDAsIDAsIDQzMzQ1LCAwLCAxMDc3MCwgMTE4OTk0LCA2ODA3LCA0NjUsIDk4MjksIDAsIDc0MzQ4LCAwLCAKLSAgICA0MzM0NiwgODExNiwgNzk1LCAwLCAwLCAxMjQ2MiwgMTA5MzAsIDEwODMxLCAwLCAxMTg5NTIsIDY0MzYyLCA3NDMzNCwgCi0gICAgOTgzNjAyLCAxMjA4MTEsIDAsIDEyNDY4LCA4NjA3LCAxMDA4LCAwLCAxMDA5MiwgMTk1MDc4LCA5MTc4NDIsIDY3ODU1LCAKLSAgICA1NTI1NywgNzM3NzEsIDE3NjYsIDExMjgyLCAxMTk5NiwgMTgyMCwgNDU0NywgMCwgMCwgMCwgMCwgMTMyMjMsIDEyODY2NSwgCi0gICAgNjQ1OTUsIDEyNzI5NCwgMCwgOTIzMTEsIDQzNDUsIDEyNjE2LCAwLCAwLCAwLCA3NDQ2NywgMCwgMCwgMCwgNTM4MiwgMCwgCi0gICAgMCwgMCwgMTE5MDYwLCA2NDk1MywgNTQwNiwgMTk5MjAsIDY5ODk3LCA2NjUxMCwgMzU5MCwgMTk0ODY0LCAxMTMwLCAwLCAwLCAKLSAgICA0MjAxNiwgMTE4MjMsIDQzMDIzLCAwLCAxMTg4OTYsIDc3NDIsIDAsIDEzMjgwLCA3MTMyMywgOTMyNiwgNzM4MjYsIDUzMTAsIAotICAgIDc0ODEyLCA3ODU4NCwgOTIyMjksIDg5NTksIDQzNTg5LCA2NzQ3LCA2NjcyMywgMCwgODU2OCwgMCwgMTIwNDk2LCA3MzgxNiwgCi0gICAgMTIwODAzLCA5ODM4MzksIDQyNjcwLCAwLCAxMTYyMSwgMTI0NjAsIDAsIDEyMDYzMSwgMCwgNDMwNjMsIDc0NTE5LCAKLSAgICAxMjcxODIsIDAsIDczOTE3LCA3ODQzLCA2OTc4MywgMTE2ODksIDU0MTAsIDU3ODMsIDEwNDY4LCA4NDAzLCA1NDAwLCAKLSAgICAxMTU5NCwgMTI4MjQ3LCAwLCAxMTg5OTAsIDEwNDkxLCA2OTg0MiwgNjQ0MTIsIDAsIDAsIDU1ODcsIDQyODY1LCA2NDQwNCwgCi0gICAgODI2OCwgNDkyMywgNjUwODYsIDg5ODEsIDEyMzgyLCA0MjEzMywgMTIwNzU1LCA5NzA2LCA2OTczOCwgMCwgNjY2MTAsIAotICAgIDEwNDYxLCAxMjEwMywgMCwgODY0MiwgMCwgNDI3NjYsIDk4Mzg1NywgMjIxMCwgOTk4MywgMCwgOTQwMDksIDAsIDAsIDAsIAotICAgIDczOTgsIDQxNTE1LCAwLCAxMTgwMiwgODA0MSwgMTQ2MSwgOTEwLCAxMTkxMzMsIDAsIDY3NDksIDM2NTgsIDkzOTY0LCAKLSAgICAxMjA1MjUsIDAsIDc2MTcsIDE5NDg0MSwgMTI4ODgsIDEyNzk4MywgNjc2NjgsIDEzMTQzLCAwLCA5MTkzLCAxMTA5NywgCi0gICAgNTcwMywgMCwgNDE1MTcsIDQxNTA0LCA0MTUxOSwgMTAwMTYsIDY0MzA1LCAwLCA2NTg2NCwgNjIzLCA3ODEsIDY3MCwgCi0gICAgMTA2NjAsIDU3NjksIDYxMywgNzU0MywgMTIwMjc5LCA0NzcsIDQxMDgzLCA5MjUyMSwgMCwgNTkyLCAxNTc4LCAxMjQ1OSwgCi0gICAgNDM0NDksIDAsIDAsIDgyMjUsIDAsIDY1NCwgMTEzNDUsIDY1MywgNjUyLCAwLCA2NDcsIDAsIDYzMywgMTIwNzQ0LCAwLCAKLSAgICAxMjY0NzIsIDEyNDgwLCA0MzI0MywgMCwgMzksIDEyNDg3LCAwLCAxMjA1MjksIDc0MTk5LCAxMjQ4MiwgMCwgMTI0ODksIDAsIAotICAgIDMxOTUsIDU1NTAsIDk4MzU1NCwgNzg5NywgMCwgMTIwMywgNzQzOTYsIDE4MTMsIDY0NTQ0LCA0MTMxMSwgMTIwOTAsIDAsIAotICAgIDI4NzcsIDAsIDAsIDE2NzUsIDY5ODQwLCAwLCAwLCAwLCAxMDA3MCwgMTA1OTUsIDAsIDExOTA3NywgMTk0Nzc3LCAKLSAgICA5ODM2MTEsIDAsIDAsIDAsIDQzMjQ0LCAwLCAwLCA5ODM5MDcsIDExOTU2MSwgOTgzMDc4LCAwLCAxOTQ5MjEsIDEyODE2MCwgCi0gICAgOTkzOSwgMCwgOTgzMTUxLCA3Nzg2MCwgMCwgMCwgMjcwLCAwLCAxMDcxNCwgMCwgMCwgMCwgMCwgMCwgNjUzNzIsIDAsIAotICAgIDc0MDM4LCAxMTk1NTgsIDYyNzMsIDY2Njc5LCAzNjQsIDk1OTUsIDE5NDkwOCwgMCwgMCwgNzA3LCAwLCAwLCA5MjgyLCAKLSAgICA2NjQ4OSwgMjI0LCAwLCA2ODY3MCwgOTMzMiwgNDk2NiwgNjg2NzcsIDAsIDY4NjQ0LCAwLCAzODQxLCA2ODYzNCwgMCwgCi0gICAgMTA3MzIsIDY4NjQwLCA4NTAsIDQ5NzIsIDAsIDEyODkwLCAyOTA5LCA2ODYxOSwgNDQwMDgsIDY4NjI3LCA5ODM3MDksIAotICAgIDExNTQ0LCAxMDIwMywgOTYwOCwgMCwgMCwgMTE5NjIsIDE5NDY5NCwgMTI1MDcsIDExOTYsIDEyODY4NywgMTI4MzExLCAKLSAgICA3NzcsIDEyMDE4NywgNDM3NSwgNjUyNzEsIDY3Njc4LCAwLCAxMjE5OCwgMCwgNjQ4MjQsIDExOTM0MywgOTgzMjMwLCAKLSAgICA5NDU0LCA2Mzc3OCwgODY1OCwgNDI1MjgsIDc4MDAwLCAyNzA1LCA5MTc5NzUsIDQxNTIwLCAwLCAwLCAxMTk4NiwgNzc2NSwgCi0gICAgNDI1MDIsIDgyODAsIDc0NTIwLCAyNzAxLCAwLCAxMjcwMDIsIDU3NjcsIDAsIDAsIDk4MDksIDgzNTMsIDYzNzQ3LCAKLSAgICA2NjcwMSwgNjM3NzIsIDk4MzgwNSwgNjM3NDUsIDE3NDgsIDYzNzcwLCAwLCAwLCAwLCA2NTU0MiwgNjM3NjYsIDU1MjQ0LCAKLSAgICAzMDYxLCAwLCA2Mzc2NCwgNjM3ODcsIDkwNjcsIDYwOTYsIDAsIDc2OTQsIDAsIDcyNTcsIDYzNzY4LCAzNDg1LCAxMjk4NywgCi0gICAgMCwgMTI3NTIyLCAxMjA2MjgsIDYzODA3LCAxNTkxLCAwLCA2Mzg2LCA2Mzc4MywgMCwgMCwgOTI1MzUsIDAsIDAsIDAsIAotICAgIDc0NTc1LCAwLCA2NTcxOSwgMTMwODMsIDY0NTc0LCA2NTAxMiwgMCwgMTY0MCwgMTI0OTUsIDY2NjkxLCA3NjI0LCAzMTM4LCAKLSAgICAxMDk5NiwgOTIyNDcsIDE5MjIsIDAsIDEyNDk4LCAxMDk4NywgNjk5MzYsIDY5OTM5LCAzODk0LCA2NTU0MywgMCwgCi0gICAgMTk0ODQyLCA5ODM1ODgsIDQ5MywgMCwgNDMxOTcsIDE3MTcsIDQyMjgsIDQ3OSwgMTAzMDMsIDc0MDIwLCAwLCA5MTc5MzUsIAotICAgIDEwMzM1LCAzNTIwLCA5MTc5MzIsIDEyNDkwLCA2NDMxNSwgMCwgMTI3MDM5LCAxMjQ5MywgNjIzMywgNDI2ODEsIDEwMDIsIAotICAgIDEyNDkxLCAwLCA2NDkxMSwgOTI2MTUsIDIwOTYsIDY1MTIwLCAwLCA3ODIxOSwgOTgzMDgxLCAxMTYxMSwgMTE2MzIsIAotICAgIDEyNzA0MSwgNjYyMTMsIDYzODY0LCA2NjIyMSwgNjYyMjYsIDY2MjI5LCAxMzIxOCwgNjYyMzEsIDY2MjE2LCA4NTA3LCAKLSAgICA2NjIzNiwgNjYyMTEsIDY2MjE4LCA5MjY3MiwgNjYyNDAsIDc4MDQxLCA2NjIzMywgODkyOCwgOTgzNTUyLCA3OTA5LCAKLSAgICA2NjIzNCwgMTE2MDUsIDYzNzU5LCA5ODM2NDUsIDY2MjA4LCA3Mzk5OSwgNjM3OTksIDYzODAzLCAyNDQsIDExNTQyLCAKLSAgICAxMjg5OCwgMTI0OTQsIDczNzYxLCAxMjQ5MiwgMTI2NjksIDAsIDAsIDc0MTUzLCAwLCAxMjgyNzgsIDEyMDY4MCwgNDg4MiwgCi0gICAgMTMwNDAsIDAsIDg2MTIsIDQ4ODUsIDc0MDUzLCAwLCAxMzA0MiwgNDg4MCwgNjQ2NjIsIDI0MjksIDEzNjAsIDI0OCwgMCwgCi0gICAgNjM3OTcsIDkyMzk0LCA0MjM1OCwgMCwgNzI5MiwgMCwgNjM3NTYsIDQyNzg2LCA2NjY5MywgMCwgMTg3MCwgNzgwNDAsIAotICAgIDQ3MCwgNzgwMzgsIDc4MDM1LCA3ODAzNiwgNzAwMjgsIDc4MDM0LCA0NTc5LCAxMjgwOTAsIDAsIDEyNTExLCA3NDQ1MywgCi0gICAgMTI1MTQsIDAsIDc0NTc5LCA3MjM5LCA3MDAxLCA4NjIzLCA5NDAxMSwgMTI4MDUyLCAxMjgwNDgsIDczNzgsIDEyNTEyLCAKLSAgICAxMTYxNSwgNjEwNCwgMCwgMCwgNjU5LCA2MDk4LCAwLCAxMjIzNCwgMTI3MzA3LCAxMjcwNjcsIDgzMTEsIDEyNTEwLCAKLSAgICA0MTgwMywgMTMwMzksIDEyNzA3MiwgMTI1MTMsIDEwMjAyLCAxMjQ3MSwgMCwgODc0NywgOTgzOTExLCAwLCAwLCAyMzIzLCAKLSAgICAwLCAyMzE5LCA3NzkxNywgMTI0NzcsIDc3OTE2LCAyMzExLCAwLCA0NDE1LCAyMzcsIDYyODEsIDEyNzI4MCwgMCwgMCwgCi0gICAgMjMwOSwgMTMxMiwgODE3MywgMTI4ODcxLCAxMjQ2OSwgMCwgNzg1MDUsIDY0MzM1LCAxMDYwOSwgMCwgMTI4MTExLCA5Mzk3LCAKLSAgICAxMTUyNCwgOTM5NSwgOTM5NiwgOTM5MywgOTM5NCwgOTM5MSwgOTM5MiwgOTM4OSwgNjIwOSwgOTM4NywgOTM4OCwgNDkzMiwgCi0gICAgOTM4NiwgOTM4MywgOTM4NCwgNjc0MCwgMCwgNjU0NTEsIDgxODUsIDAsIDkxNzgzMiwgNDMwMjQsIDQzMzM2LCA2NzY1OSwgCi0gICAgMjMxMywgMTI4MTY3LCA3OTQ4LCA5MjM2LCA5MjU3MSwgMCwgMCwgMTA1NzAsIDQzNDczLCA2Mjg5LCAxMDQ4NCwgMCwgMCwgCi0gICAgMTE5OTgsIDEyMDgyLCAxMDkyNCwgMzE0NywgMCwgMTIwNjg0LCAxMjUyNCwgMTE5MDgxLCAyMzEwLCAxMTgxOCwgOTM4MSwgCi0gICAgOTM4MiwgOTM3OSwgOTM4MCwgOTM3NywgOTM3OCwgOTM3NSwgOTM3NiwgMTY4MywgOTM3NCwgOTgzNzY5LCA5MzcyLCAKLSAgICAxMjQ0NCwgMCwgMCwgMTMwMTYsIDgyMTAsIDk4Mzk0OSwgNDIwMjksIDExMDc5LCAxMjMzMSwgNDM0NTEsIDQyMDMyLCAKLSAgICA4NzQ0LCA3MjYsIDAsIDk4MzgyOCwgNDE1NSwgMCwgMCwgNDIwMzAsIDUwMDcsIDEyNTIyLCA0MzA4OCwgMCwgNDk1MSwgCi0gICAgMTI3ODA1LCAxMjcyNDAsIDAsIDk5MjIsIDQzMzA5LCA5ODM4MzIsIDEyNTI1LCA5ODM0NjMsIDEyMDE2LCA2NTc3MCwgCi0gICAgOTU0OCwgNjc2NjUsIDQwMywgNzgyMzAsIDEyNTAzLCAwLCAwLCAxMTAzMCwgMCwgOTI1NjcsIDY1NjkxLCA2Mzk5OCwgCi0gICAgMTgxOSwgMTA0OTYsIDAsIDAsIDExOTkyMCwgMCwgMTk0NjY4LCAwLCAxMjUwNiwgMCwgMTIyMzEsIDAsIDEyNTAwLCAKLSAgICA0NDAyMywgMTI1MDksIDY0MzkzLCA3ODgzMCwgMzM4OSwgMTA1ODksIDY2MDgsIDQxMDQ3LCAxMjAzMjEsIDc4Mzk1LCAKLSAgICA3ODM5NCwgNzQwNjksIDc3OTk1LCA3ODM5MSwgMzYwOCwgODI4MSwgMTIwMzIwLCAxMTA3LCAwLCA5MDc2LCA4ODYyLCAKLSAgICA2OTc0MywgNDEwNTIsIDEzMDg0LCA2NDc2NiwgNDMyMTcsIDc4MDMsIDEzMjIyLCA3NDE2NSwgNzQ3ODIsIDEyNjUxNCwgCi0gICAgODU0NiwgMTE1NTMsIDYzOTk1LCAxMzE3NywgOTA0MywgNjMwMywgOTgzOTM4LCA0OTgsIDY0NDcxLCAxMjAzMjQsIAotICAgIDEyODU2NywgMTI1MjksIDgwNDIsIDAsIDIzNDQsIDEyNTI4LCA4MDMxLCAyNDE0LCAwLCA2OTcxOSwgMzIzMSwgMCwgNjQyMiwgCi0gICAgNjY1MTIsIDY5NjUzLCAxMjUzMCwgMjUzNywgNzg0MDUsIDQxNDI5LCAxMjY1OCwgMTMwMzYsIDY1NzcyLCAwLCA3ODczOCwgCi0gICAgNDE0MzMsIDQ3MTksIDQ2OSwgMCwgNDM2MywgMzMxMywgNDE0MjgsIDc4NDA3LCAyMDIzLCAxNzcyLCA3ODIyNCwgNzgyMjUsIAotICAgIDY1NzA2LCAxMDA1MSwgNjQ4MTIsIDc4MjIwLCAwLCA5OTIwLCAxMjIxNSwgMCwgNDkzMSwgMTk1MSwgMTI0OTcsIDExOTM2MywgCi0gICAgOTYwNywgMCwgOTY2MywgMCwgMTE5NjM0LCA2NTAzLCA0MTExMCwgMCwgMTQ5MSwgMCwgMCwgMTI3MzA0LCA0MTA2MSwgMCwgCi0gICAgMTk0ODM4LCAxMjcxODcsIDY1MDI2LCA0MTk5MywgNDE1MDksIDExMDQ1LCA2NTAyOCwgNzg2MDIsIDY2NDc2LCA0MTEwOCwgCi0gICAgOTczOCwgNDE5OTUsIDEwNzUsIDE5NTgsIDEyNTM1LCA0MTk5MiwgNDE1MDYsIDAsIDQxNjg3LCAwLCAxMjA3MTcsIAotICAgIDEyNzc3NiwgOTk0MCwgMTI3Mjk5LCA3NjkyLCA5ODM4MjQsIDgwMDgsIDQxMTMxLCAzMzAsIDg1NjYsIDY1MDgzLCA0MTEzMywgCi0gICAgOTgxNiwgMTI2NTE3LCAxMjUzMiwgNzg1NTAsIDc4NTQ2LCAzNTA4LCAxMjcwNTgsIDQzMjM1LCAwLCAxMjcyOTgsIDY0MTM5LCAKLSAgICA3ODIzMSwgNjQxMSwgMTI5MTAsIDc4NTU0LCA2NjY0NCwgMTMwMjgsIDY3MzcsIDEyNTM3LCAwLCAwLCA2NDEzNiwgMTI1MzYsIAotICAgIDIzNTAsIDEzMDI5LCA3ODIzMywgMCwgOTgzMTAzLCAxMzAzMCwgNjcwMiwgNDUyNywgMCwgMTI1MzgsIDEyODgxMCwgCi0gICAgOTgzNjM2LCA2NTU5OSwgNjU3MTcsIDk5NjYsIDAsIDQ5NDgsIDEyNDg0LCA0MDMyLCAxMjgxNDksIDEyNjIzLCAwLCA2MjA3LCAKLSAgICAwLCA2MTE3LCA2NTkzMCwgODQxMiwgMCwgNzQzOCwgMTI5NiwgMjMyNSwgNDE1MTEsIDEyNjYyNSwgMTAxNDksIDc0MTE4LCAKLSAgICAwLCAxMjcyODYsIDEyNDgxLCAwLCAxMjQ4OCwgNjY3MTMsIDAsIDQxNTU2LCA2NDQxNCwgMTE4ODAyLCAyMzU0LCA0MjYxOSwgCi0gICAgNzM3NjYsIDAsIDYyOTUsIDkwMSwgNDE1MTAsIDc5NTMsIDAsIDY1MDMyLCA0MTUxMywgOTgzMTY2LCAxMTkyNywgNjY1ODQsIAotICAgIDc4NTU5LCA3ODU2MCwgNzg1NTcsIDc4NTU4LCAwLCA3ODU1NiwgODQ4LCA5ODY4LCAwLCA2NDI0LCA3ODU2OCwgMTE5MzM4LCAKLSAgICA2OTkyMiwgNzQwMzEsIDc4NTYzLCA3ODU2NCwgMjM1MiwgNzg1NzIsIDg5MywgNjQ1NzYsIDExMjg5LCAxNDA3LCA2Nzk3MywgCi0gICAgMCwgMTMwMjYsIDY3NjIsIDc4NTc5LCA3ODU4MCwgMTMwMjMsIDg5MDMsIDk3NzcsIDY2NzE1LCAxODcxLCA4MDk5LCAwLCAwLCAKLSAgICAxMzQzLCA5ODM4MTQsIDAsIDkzMjUsIDY4MTgsIDYyODMsIDExNzM4LCAwLCA5ODM5MjUsIDAsIDExNzQxLCAwLCAwLCAKLSAgICA5MjE2LCA4MjYzLCAxMTI3OSwgMTk0NzUyLCA5ODM4MTYsIDE5NDc1NCwgMTMwMjEsIDY0NDk0LCAzMTM2LCAxOTQ3NTgsIAotICAgIDE5NDc1NywgMTk0NzYwLCAxMzAyMiwgNDI3MzcsIDk5NTYsIDAsIDAsIDc0NTUyLCAxMDAxNCwgMCwgNDEyNjAsIDExOTM0MCwgCi0gICAgMTMwMjAsIDEwMDI0LCAxOTQ3NjQsIDc0NTgzLCA3NDM0MCwgNjk2ODEsIDAsIDQzMDAxLCA4MDI5LCAwLCAwLCA5ODM3NzEsIAotICAgIDMzMzUsIDAsIDAsIDk3NzYsIDEyMDUyNiwgMTk0NzQ4LCA1MjE1LCA0MjY0NCwgMzMzMywgMTYzMiwgMTk0NzUxLCA2NDg0OSwgCi0gICAgMzM0MiwgNzg1ODIsIDUzNjMsIDEyOTU3LCA3ODU4MSwgNDE1NiwgMCwgMCwgNjQyMSwgNzg1OTEsIDE2MTEsIDc4NTg5LCAKLSAgICAxMzAxOCwgNzQyNTcsIDc4NTg4LCA3NDU0MiwgMzMzNywgNDUzNywgNjc4OTUsIDExNzM2LCAwLCA2ODYwOCwgNjQ4MiwgCi0gICAgNDIxNCwgNzM3OTAsIDExOTQ1LCAwLCAxMzA0NiwgODgzOCwgNDI1LCA0MDI1LCAxMDcwOSwgNzg1OTUsIDIxMDgsIDIzOTIsIAotICAgIDEzMDQ3LCAwLCAwLCA2ODE5LCAxMzA0OSwgNjQ5OSwgOTIyNDMsIDEyNDI0LCA2ODYxNCwgNzM5NDQsIDEzMDUwLCA5OTI0LCAKLSAgICAxOTQ3NDUsIDY1MDcsIDEyNzkxOSwgOTQwNzMsIDEyODA2OSwgMzI3NywgODkyOSwgNDk0NywgNDEwNTUsIDAsIDE5NDcyMiwgCi0gICAgMTk0NzIxLCAxOTQ3MjQsIDEzMDQ1LCA2NDYyNiwgNjYwMzQsIDc3NTEsIDE5NDcyNywgODM3MSwgMTk0NzI5LCAzOTk3LCAKLSAgICAxMjgwNiwgODc2OCwgMTMwNDQsIDAsIDEyNDIwLCA0MDI0LCAxOTQ3MzAsIDQxMDU0LCAxMDc4LCA5NzU3LCA2OTczNiwgCi0gICAgNDEwNTcsIDAsIDAsIDAsIDAsIDk4Mzc4MiwgOTIyMTAsIDkyNDExLCAwLCA0MTQ5NiwgMCwgOTE2NSwgMTU3MiwgMTE5MTEsIAotICAgIDAsIDExODg0MiwgMjM0NiwgMTMyNzAsIDg5NTgsIDAsIDk2NDYsIDM3NzMsIDQzMTgzLCA2NDAxLCA1ODMxLCAwLCAwLCAKLSAgICAxMzA0MywgODA1NiwgOTI0OTQsIDY1NjgxLCAyMDgsIDEyNzM4MiwgNDE1MTQsIDAsIDAsIDAsIDEwNjk5LCA2NDA4LCAKLSAgICA5MjIyNywgNzgyNSwgNTY2MSwgMCwgMTIwNjMwLCAzNjAzLCA0MTEwOSwgMjM5OCwgMzU0OCwgMTI2NTk2LCAwLCAxMTk5MzMsIAotICAgIDAsIDMxMTUsIDk5MTgsIDAsIDExMzIxLCA0MjkxMiwgMCwgMCwgMTk0NzI2LCA0ODc2LCA2NTgwNCwgMCwgMCwgNDM0NjgsIAotICAgIDk4MzI2NiwgNDE1NTgsIDQxNDcxLCA3Mzk1MCwgODE1OCwgOTk0NCwgNDE0NzIsIDEyMDI5OCwgMTMwNTEsIDc4Njg5LCAKLSAgICAzMTQzLCAxOTQ2NzQsIDY3MDEsIDQxNTU5LCAxODk2LCA2NjI1NiwgMTMwNTIsIDE5NDY4MCwgNTY2NSwgMCwgMTE5MDcxLCAKLSAgICA3MDI1LCA2Mzk3NCwgMCwgNzQzNTIsIDc0MTYxLCA0MTU0LCA5ODYzLCA0MzU1MCwgMTIzMTAsIDU2NjIsIDQyMzgyLCAKLSAgICAxOTQ2ODYsIDczOTI0LCAxMTIxLCA3ODMxOSwgNjM5NTksIDAsIDk5NDIsIDEzMjMxLCAwLCA2NDc1MiwgNDczMiwgCi0gICAgMTk0NjY2LCAxMTU5NiwgMTE5OTMxLCA2NTE4NywgMTYyNiwgNjM5ODMsIDEwMTEwLCA2NDc3MiwgNDIwMjQsIDY0MjAsIAotICAgIDQyMDI4LCAwLCAxMDUwOSwgMjc5NSwgNDkxMCwgMTk0NzI4LCA2OTIzMSwgNjQ3NTMsIDYyNzUsIDkzOTU3LCAxMTg4MzAsIAotICAgIDYzOTc4LCAxMTA0NCwgMzIyOSwgNjQyMywgNDI3NzQsIDAsIDAsIDAsIDEyODIzLCAyMzMxLCA5MTc4MTAsIDcwODUsIAotICAgIDYxMzcsIDAsIDc1MjQsIDAsIDkxNzgwOSwgODM0NiwgMCwgODMzOCwgMTI4MzE1LCA2NTA0MywgMCwgODIyLCAxMjc5ODQsIAotICAgIDk5MDMsIDY0NzIxLCA0MjcyMiwgNjk4NzcsIDE5NDY1OSwgNzg2NTUsIDc4NjYxLCAxOTQ2NjAsIDc4NjYyLCA0MTI2NSwgCi0gICAgNTMxMSwgMTc5NSwgOTY1LCAxMTg3OTEsIDEwNTg3LCA3ODA1NSwgMTEyNzgsIDc4NjMyLCAxOTQ2NDAsIDAsIDEyOTQ2LCAKLSAgICAxOTQ2NDEsIDExOTM0MSwgMTIwMzQ5LCA2Mjk0LCAzMTQ0LCAxOTQ2NDgsIDE5NDY0NywgNjUwMTksIDE5NDY0OSwgNzM5OTAsIAotICAgIDAsIDk4Mzk1MSwgNzQ4LCA0MTA2NywgMjMzMCwgNTM1LCAzMTQ4LCAxMjM3NSwgNzg3OTksIDE5NDYyOSwgMTA1NTYsIAotICAgIDI0NzUsIDEyMzg4LCA0ODg5LCA4OTY4LCA2Nzg2MywgMzU5MywgMCwgMCwgMjM0MiwgMCwgMTk0NjM0LCA2NTIwNiwgNDg5NCwgCi0gICAgMTk0NjM1LCA0ODkwLCAxOTQ2MzcsIDkxNzgwNCwgNTgxLCA0ODkzLCA5ODM2MTYsIDY1NzEsIDY1NTQ1LCA0ODg4LCA0MTU3LCAKLSAgICA3ODA0OCwgNzgwNDksIDc4MDQ2LCA3ODA0NywgMCwgMTAxMTksIDY0MTUsIDQyODkzLCAwLCA2OTcwMiwgMCwgMCwgMTEzNzUsIAotICAgIDY0NzQ2LCAyMzMyLCA3ODA2MywgNDEyLCA3ODA2MSwgNjQ5MzIsIDQyODgwLCA0MzU4NywgMCwgMCwgMCwgMCwgNjUxOTcsIAotICAgIDc4MDY2LCAxMjIwMywgNzgwNjQsIDc4MDY1LCA4OTEzLCA2NTg1NCwgNDg3NSwgNjU4MTEsIDEyMDM4MSwgMTIwMzg5LCAKLSAgICAxMTg4ODgsIDkzNDQsIDg4MjYsIDEyMDM4NiwgMTIwMzk1LCAxMzEwNCwgNzQ3ODEsIDExOTk3LCAxMjAzOTMsIDc4MDc1LCAKLSAgICAwLCAzMTM0LCAwLCA2NTY5NiwgOTIzMzEsIDAsIDY2MjE3LCAwLCA4MzM0LCAxMTkzNDQsIDAsIDM0NDksIDAsIDAsIAotICAgIDc4NDE0LCA3ODQxMywgMTE4OTUwLCA3NDAxMSwgMCwgMCwgMCwgMCwgMTkwOCwgMTIwMTY3LCA0MzI4LCAxMDczNCwgCi0gICAgMTI3MDE0LCAwLCAxMjc5MTQsIDc4MDQsIDc4MjcyLCAxMDgxMSwgNjI1MCwgMTEzMzksIDQ5MTQsIDExMzY3LCAwLCAKLSAgICA3ODA1NCwgNDkxNywgNzQ1MTYsIDc0MjA4LCA2NDI4NSwgNDkxMiwgNTQ2NCwgMTI3ODM2LCAxMTg4OTMsIDIzNjEsIDc5NzEsIAotICAgIDc4MDcyLCA3ODA3MywgNTUyNDMsIDc4MDcxLCAwLCA4MDg2LCA3NDMxNywgNjcwNywgODMxOSwgMjMxMiwgNDA5NzcsIAotICAgIDEwOTYwLCA0MDk2MiwgODMwNSwgMTI1NzMsIDk4MzYwOCwgNDA5ODAsIDk4Mzk1NSwgMTMyMDIsIDAsIDEyNTgyLCA3ODI4MiwgCi0gICAgOTgzMDQ4LCA2OTg1NiwgNDI0MzgsIDU1MjIxLCA2Mjg4LCA3ODI4MCwgMTI3OTQ2LCA1NjUzLCA0MjQwMCwgMTA4OTEsIAotICAgIDc2OTgsIDU2NTgsIDc0MDQ1LCA3MDAzOSwgMCwgMCwgNDkxMywgMCwgOTgzOTUwLCA3MTMzMywgNDIzMjYsIDEyODE5NCwgCi0gICAgMTI3MjgsIDkyNjg1LCA0MjQ3OCwgMjMyNywgMCwgMTI1NjMsIDQyMjg3LCAxMjcwNSwgMCwgMCwgMTI1ODgsIDg4MjEsIAotICAgIDYxNTMsIDI4NjcsIDE5NDcwOCwgNjYzMTIsIDY5OCwgMTI4MDA3LCAxOTQ2MDYsIDEwMzU2LCA3MDAxNywgMTk0NzEzLCAKLSAgICA2NTEsIDEyNjQxLCAwLCAwLCAwLCAwLCA0MTU1MiwgNjUxMTUsIDc4NDY1LCA3ODQ2NywgNzg0NjMsIDc4NDY0LCAxMjg4NTEsIAotICAgIDc4NDYxLCAxOTQ2OTcsIDc0MzU2LCA2NDk0NSwgNDcxNiwgNDMyNzcsIDAsIDc4NDc0LCAxMjM0MCwgMTIwNTY4LCAwLCAKLSAgICAxOTQ3MDAsIDU1MjY0LCA0MTIxMSwgMTIwNjc2LCA4NzAzLCA1NDYyLCA5MTc2MjksIDk4MzQ4NywgMTAxMDEsIDAsIAotICAgIDcwMDQ5LCA4NDc5LCA0MTUxLCA0MTkzMywgMCwgMCwgNjYyNTQsIDEyMDgyMSwgMCwgMCwgMTI4NjU0LCAwLCAxMTkxOTQsIAotICAgIDc0MDUwLCA5MjcwMSwgMCwgMCwgMCwgMCwgMCwgMTIyNzgsIDAsIDAsIDAsIDI3MDAsIDEyNTc2LCA3ODQyLCAxMjg5OSwgMCwgCi0gICAgMCwgMjY5OSwgMCwgNzM4NDUsIDI5ODUsIDkyNTY4LCAxMjY0NzUsIDkxNzg0NSwgMTIxOTIsIDExOTMxNCwgMCwgMTE5MzEyLCAKLSAgICA5ODI3LCAxMTkzMTAsIDExOTMxMSwgMTE5MzA4LCAxMTkzMDksIDExOTMwNiwgMTE0ODEsIDQxMjEwLCAxMTkzMDUsIDAsIAotICAgIDM1LCA3ODQ4MSwgNzg0ODIsIDY2Njk0LCA2ODQ3OSwgNzg0NzcsIDc4NDc4LCA0MzU5NiwgNjA5MCwgNjQyNTcsIDc4MTIsIAotICAgIDEwNTM0LCAwLCA3ODQ4NSwgNzM4NDgsIDY3OTc1LCA0MjcyLCAwLCA0MDk2NywgNDA5NjQsIDkxNzgyNSwgMTI3MDQsIAotICAgIDc4NDg3LCA0MzMwNiwgMCwgNjQ0OTcsIDEyMTM4LCA3OTMwLCAwLCAyMjkyLCA2ODIxNiwgMCwgOTE3ODI2LCA1MjQ0LCAKLSAgICA0MTg5LCA5NDEwOCwgNjc1OTYsIDEyNzUwNCwgNDE4OCwgMTg3OSwgMCwgOTY4LCAwLCA0Mzc0MywgMCwgODg3MywgMjI3OSwgCi0gICAgMCwgOTE3ODI3LCA2NTU1NSwgMTI1NzQsIDAsIDAsIDAsIDc0NDkwLCAxMjcwOTksIDQzNjU3LCAwLCAwLCAwLCA0MjY4MiwgCi0gICAgMTI1NzgsIDEyNzIwLCAwLCA0MTIyNywgMCwgMTIzNDYsIDEyNzEwMSwgNjQ4NDgsIDAsIDAsIDcyNTEsIDAsIDAsIAotICAgIDExODg1MCwgMTE5MTQxLCAxMjg1NDYsIDY2MDE1LCAwLCA5NTksIDg4ODUsIDEyNTY0LCA2NjQ1NywgNzg4MDgsIDk0NjksIAotICAgIDk2MzIsIDkyMzIzLCA3NDc2MSwgNjQzMjMsIDEyNzMzNSwgMCwgMCwgMCwgMzEwLCAwLCA0MTI4MSwgMTA5NzYsIDAsIAotICAgIDcxMzI1LCAwLCA3NDI2NiwgMTAwNTQsIDY0OTcsIDg1NzQsIDAsIDkwMTIsIDE5OTU4LCA3NDQyMCwgNjUwODksIDEzMjE1LCAKLSAgICAxMjczMCwgNjUxNjMsIDc0MDQ0LCAzNzQsIDQzMTk1LCA4MTYsIDEyMDE2MSwgMCwgMCwgNDE5MzQsIDc0NjUsIDAsIAotICAgIDEyODE2OCwgOTgzMjYwLCA0NzE1LCA2MTAxLCA5NDEwNiwgNDE5MzYsIDAsIDQ4NzksIDAsIDY1NDQ2LCAwLCAzMDcsIAotICAgIDEyNzE0NywgOTU4NSwgNTM3NCwgOTgzMjU5LCAxMjgwNTksIDAsIDAsIDEyNjYxOCwgMTIwMzkwLCAwLCA2NTU2NywgCi0gICAgMTIwNjE0LCAxOTI5LCAwLCAxMjE0MiwgMCwgMTIyMzYsIDQxNDE5LCAxOTQ2MTgsIDEyMDYxMCwgMTI5ODIsIDE5NDYyMywgCi0gICAgNTM3OCwgNzg3OTEsIDEyODY3OSwgNDE0MjEsIDAsIDQ0NjIsIDAsIDEyNjU5OSwgMTI4MDkyLCA4MjEsIDAsIDI0OTgsIAotICAgIDU4MDAsIDEyMDE1NywgOTgzMTE1LCAxNzYwLCAyNDIxLCA0NDY5LCAyMzI0LCA4MjgsIDM2MTEsIDc4NDAwLCA3NTcsIAotICAgIDExODUsIDAsIDc4NzcwLCA0MzU5NywgMTA2MjgsIDc0ODA4LCAxOTQ1NzIsIDc5OTksIDQzOTcxLCAwLCAwLCAxMDYzNCwgCi0gICAgMTA5NDIsIDc3MTMsIDIzNDgsIDAsIDY0Mzc0LCA0MzgwLCAxOTQ2MDgsIDExOTA0NCwgOTk4MiwgNjQzMjQsIDQxMjQwLCAKLSAgICA4NjIsIDY1NjI2LCA3ODQ2MiwgMTgxMCwgMzY3MywgNTEzNywgMTk0NjE3LCAwLCA3Mjc3LCA2NTYyMiwgMCwgNzU2NiwgCi0gICAgNjQ2ODgsIDE5NDU5MywgMTk0NTkyLCA3ODA5MiwgNzQzNTcsIDE5NDU5NywgNDc0OCwgOTIyMjgsIDE5NDU5OCwgMTk0NjAxLCAKLSAgICA0MjI2MCwgNTg3MSwgMTE5MDc1LCAwLCA3NDU3NiwgNDQwMTksIDAsIDEyODE4OSwgMzk2NywgMTk0NjA0LCAxMzEzNywgCi0gICAgODc3NSwgMTI3OTQ1LCAwLCAyOTYzLCAwLCA4NDEwLCA0NDU0LCA3MjMsIDEyNzg4MiwgOTY2LCA0NDQ5LCA5MjMzMCwgCi0gICAgOTIyMzgsIDAsIDc4MTksIDIzMjAsIDE5NDU4OSwgMzM5LCA0OTY4LCAxOTQ1OTAsIDEyMDM5OSwgODA3NSwgNTUyNzYsIDAsIAotICAgIDgwNDcsIDAsIDc4ODI3LCAxMjYzNCwgNDE1NDIsIDc4NzgwLCA3NDY2LCA2NzA1LCAxMjE3NCwgNDI2MTAsIDAsIDc0NDUyLCAKLSAgICA5ODM3NTQsIDE1ODQsIDY2NjQ1LCA2MDQ1LCA2NzI5LCAxMjA2NDAsIDY1MjE4LCAxMTU1OSwgMCwgNzgwNjIsIDc1MzcsIDAsIAotICAgIDExMzcwLCAwLCAxMDMzMCwgMCwgMTAzOTQsIDAsIDc0MTk0LCAwLCAxMjc5MjksIDk3ODAsIDAsIDEzMDkyLCAxOTQ1NzYsIAotICAgIDc3OTUwLCAxOTQ1NzgsIDcwNzQsIDkyNjQ4LCAxOTQ1NzksIDE5NDU4MiwgMTE0MTQsIDEyODg2OCwgMjUzMSwgMTMwMzQsIAotICAgIDAsIDAsIDQyMTEsIDEyNTksIDc1MTcsIDAsIDAsIDE5NDU2MSwgNDA5OTYsIDEzMDM3LCA3MDkyLCA2NDEsIDUyMTksIAotICAgIDk0MDM0LCAxOTQ1NjYsIDExMDY0LCA0MTEyOSwgMCwgNDI4NTAsIDEzMDM1LCA5MDc1LCA5MjM4NywgNTQ2NiwgMTI4MTUzLCAKLSAgICAwLCA2NDA5OCwgNjU3OTMsIDQ1MzUsIDE5NDU3MywgNDI3MSwgNzg0MTcsIDEyODM1NywgNjc2OSwgNDE0MTAsIDk4MzQ0NCwgCi0gICAgNjQyNjIsIDY3NjcsIDQxNDA3LCAwLCAwLCA2NzU1LCAxMTg4NjQsIDkwNDYsIDEyNzkzNCwgMTI2NjA4LCAwLCAwLCAwLCAwLCAKLSAgICA2NzY3NSwgMCwgMCwgMCwgNjQzMzgsIDI1NjMsIDEzMDMzLCAyNDcsIDExODkxNSwgMCwgMTIzMzgsIDQ2NTEsIDY5ODk1LCAKLSAgICAxMTI3MCwgMCwgMCwgMTE5MzMsIDAsIDAsIDQxOTAzLCA0MzQ0NywgMTEwMDEsIDAsIDQyMjU1LCAwLCA5MjY2MSwgNjk4MjEsIAotICAgIDQxOTA1LCAwLCAwLCAxMDc3NSwgOTc5MywgNTAwOSwgMCwgNDIyNjksIDY0NTg3LCA5ODMwNjMsIDQyNTM1LCA2OTgxMiwgCi0gICAgNjQ1MjksIDQxNDA4LCA0Mjg1MywgMzg3NywgMTIwNzk1LCA0MjY3NCwgODE0NywgNDM1NjYsIDExOTAyMSwgOTgzNzY3LCAKLSAgICAxMDIzNiwgNjU5MTgsIDQzNzgyLCAwLCAwLCA2NDUwNiwgNjk2NTIsIDExODkyMSwgNDc0NywgMTI4MDU4LCA2OTg0NCwgCi0gICAgNDMyMDAsIDU4MzIsIDAsIDAsIDUxNDEsIDQyNjAwLCAwLCA0MzIwMywgMCwgOTgzNzkwLCA0MzI4NiwgMCwgMTI4MjExLCAKLSAgICA0Mzc3OCwgMCwgNDEzMDUsIDc4Nzc2LCA0Mzc4MSwgMTEzMDMsIDY1NTQ3LCAwLCA3MDMxLCA4NTksIDAsIDAsIDAsIDYwNTksIAotICAgIDEyNjk4NSwgNTUyMzUsIDAsIDg1MzUsIDAsIDY1MTk2LCAxOTQ3ODcsIDY2MDMyLCAxMTQ4OCwgMTIwNDgxLCAxMjA3ODYsIAotICAgIDQyMjMzLCA2NDE0MCwgOTk0NiwgNjM4ODUsIDE5NDc5MiwgMTE4MjIsIDAsIDQzMTg5LCA5ODM4ODksIDAsIDE3ODgsIAotICAgIDE1NzksIDEyMDQ4MiwgNzEyOTgsIDAsIDAsIDAsIDkwMjgsIDExOTU3MSwgNjkyMzQsIDk0MDU1LCAwLCAxMjg1LCA2NDg4MiwgCi0gICAgNDEyNDIsIDcwMDg2LCAwLCAxMjY0MCwgMCwgNzQwMSwgMCwgMTI2MjUsIDY4MTk4LCAwLCA3MDA4MiwgMzk0MCwgNDE1OTcsIAotICAgIDQzNzU0LCAzMzk2LCAxMjY0MiwgODY2NSwgMCwgMCwgMTI2MzAsIDE2NTMsIDkxNzgxNSwgMTAxNTMsIDAsIDYxNjYsIAotICAgIDEyMDUxNiwgMTE4OTg5LCAwLCA4ODE1LCA2NjY3MywgNjUwNDYsIDkyODUsIDkxMywgNDIyNTksIDExOTMxNywgMTE5MzE4LCAKLSAgICAyMTQyLCA2ODQ1NCwgNDI0ODUsIDk0MDEyLCA3ODc4LCA4MjExLCA0MjI5MywgNjQzNzcsIDAsIDkyNjQzLCAwLCAxOTQ2NzMsIAotICAgIDEyMDMyLCAwLCA5NzI1LCAwLCA3ODQzMSwgNTI2MywgMTI4MTgsIDc4NDMwLCA0MTkzOSwgMTAwMjIsIDY1Mzg3LCA3ODQxOSwgCi0gICAgNDI3NzcsIDEwMTM5LCA5ODAsIDQzNjk4LCA2NTM4NiwgMjIwOCwgMCwgNDM3MDEsIDQzMTk4LCA3MTg0LCAxMjA2NzMsIAotICAgIDE5NDc5NywgOTE3ODE5LCAxMDA4NSwgMTE5OTkyLCAwLCAxMTk5OTMsIDY2MzQsIDkyMzczLCAwLCAxMTkzMjMsIDgwNzIsIAotICAgIDExOTMyMSwgNDM3MDAsIDAsIDg4NzIsIDc3ODMsIDkxNzk5MiwgMTIzOTgsIDgyMzcsIDAsIDAsIDEyMzk1LCAwLCAKLSAgICAxMjY5NzcsIDEyMDU2NSwgOTkxNCwgMjIxNywgOTE3ODU0LCA3Mzk3NSwgNjM2NywgNjM1MSwgNjY2ODgsIDAsIDc4MTA3LCAKLSAgICAwLCA2NDczNSwgNDEyNDMsIDkyMTk5LCA3ODA4LCAxODI5LCAwLCA0MTkzNywgNDM1OCwgNDMyNzIsIDYzNTMsIDAsIDAsIAotICAgIDEyMDQyMiwgMCwgMTcxMCwgMCwgMCwgNjU2MDcsIDAsIDQ5LCA2NjI3LCAwLCA2MjU4LCAxMDY4MywgNzg2NzIsIDk3NDEsIAotICAgIDc4MzI5LCA1NjQ5LCA3ODQ0MSwgNDM0NDMsIDY0NDE4LCAxNjQzLCA2NTIxMywgODQwNSwgMzQ3MCwgMTI4MjI1LCAxMzIxMywgCi0gICAgNDI0NTIsIDc4MzMxLCAxMjA2NjQsIDc4NDQ1LCAwLCAxMDcyLCA3ODQ1NywgNzg0NTIsIDc4NDU0LCA2NTc2LCA0MTk4OCwgCi0gICAgNDExMzIsIDY1Njc1LCAxMDgwLCAxMjAwMDIsIDk4ODYsIDU1MjI1LCAxMTAxLCA2ODQwNCwgMTIzMDksIDU1MjI3LCAwLCAKLSAgICAxMjYzMiwgMTA4NiwgMTg2OSwgNzg2ODUsIDc2ODAsIDAsIDY1NDU4LCAxMjA3MTQsIDEyNjM5LCAzMzgwLCA4MTIzLCAKLSAgICAxMDkxLCAxMjYzOCwgNzk3NywgNDUwMSwgNDEwOTksIDAsIDY2MzA5LCAwLCAwLCAxNDk0LCA5ODMxNDYsIDEyNjYxMywgMCwgCi0gICAgMTE2OTMsIDEyNjUxMywgMTA0OTQsIDkyNjU1LCA2NTg3MiwgMTIzNjMsIDExMzg2LCAwLCAwLCAwLCAwLCA2NDU4MiwgMCwgCi0gICAgNzM3OTQsIDAsIDgwMjIsIDAsIDEyMDQ2MiwgNzQxMDYsIDEyNDEzLCA5NDA2OSwgOTE3OTk0LCA5MTc5OTMsIDkxNzk5NSwgCi0gICAgNTU3MCwgMTg4MSwgNzIxMCwgMCwgMTAxMiwgNDM3NTIsIDAsIDEyMDcwOSwgNzIwOCwgNjY0NDIsIDU1NjksIDk4MzIzNiwgCi0gICAgNDIzMzksIDAsIDYwNjMsIDAsIDc4MzgzLCAxMTk1OTQsIDYwNTMsIDY1NjAyLCAwLCA5MjIwMSwgNjQ3MjcsIDkxNjAsIAotICAgIDE5NDgyNywgMCwgMCwgOTIxODAsIDEwNTAzLCAxMTg4MTAsIDYwNTUsIDM4NzAsIDQyNzksIDg0OTAsIDEyMDExNCwgNDMxOSwgCi0gICAgNjQ3ODYsIDg2MDIsIDEyMDExMCwgMTEzMjYsIDkyMjA0LCA5ODMxMTYsIDAsIDEyMDExOSwgNzgzMzMsIDEyMDExNywgCi0gICAgMTIwMTE4LCAxMjAwOTksIDEyMDEwMCwgNjUwODcsIDU1NzEsIDM2NzQsIDk3NDAsIDkxMjEsIDU1NjgsIDEyMDEwNywgCi0gICAgMTIwMTA4LCA0MjA4NSwgMTAxMDcsIDQyMTU5LCA0Mjg3MCwgMTIwMTAxLCA1ODksIDcwNTAsIDk4Mzc5MSwgNDMyODEsIAotICAgIDEwMjMzLCA0MTI2MywgNjYyNTEsIDY1NzI5LCA2NjI1MywgMTI2NDk3LCA3NDA5OSwgNDI2NDUsIDAsIDE5NDgxNSwgODU4MywgCi0gICAgMCwgNTg0NywgNjkyOCwgMTI4MDc0LCAwLCAwLCAwLCAwLCA2NjU5MiwgMTIyMDQsIDkxNzk2MiwgMTk5NjYsIDc3ODU2LCAKLSAgICA0MjU2MSwgMTIwNjI2LCA5ODMyNDUsIDAsIDgxMjAsIDEyMDcwMSwgMCwgMCwgMTI4MDEyLCA0MTA2MywgMCwgMTA2NjQsIDAsIAotICAgIDgzNjksIDAsIDQ1NTEsIDE5NDk2NCwgMzM2OSwgMCwgMCwgOTY3MywgNjYzMzQsIDY1NTgwLCAxMDQ3OCwgMTE4OTYwLCAKLSAgICAxMjUxNywgNTU3LCA5NDU3LCAxMjAzNCwgOTgzNjYyLCA2MzU1LCAxMjUxOSwgNDEwMDQsIDAsIDE5NTAyNSwgNzQwOTQsIDAsIAotICAgIDAsIDc3OTcwLCA5ODM1NjAsIDAsIDEyODE3NSwgMTIxMTEsIDM5MjcsIDAsIDEyNTE1LCAxNDc0LCA2Nzg5MywgNTQ5MiwgCi0gICAgNjkyMywgOTIyODEsIDEwNDQxLCA3MzgzNiwgMCwgNDM5OTAsIDU0OTMsIDAsIDc0MzE5LCAwLCA2NjYzNSwgMTIwMTksIDAsIAotICAgIDE2MTgsIDAsIDEyMDQ3NCwgOTY0NSwgMTA0MzAsIDkxNzk1OSwgNTg1MywgMTMwNjMsIDEwMzYzLCAwLCAxMjk1NiwgCi0gICAgMTI4MTY5LCAxMjA3MjksIDExMzE0LCA5MTc1ODIsIDEyMDYwLCAwLCA3ODM5MiwgMTI4MjYsIDYzMjksIDAsIDEwNTE0LCAKLSAgICA2NTUxNywgNzQzOTUsIDI3MDcsIDgzMDksIDAsIDEyNzA1NCwgNzgzOTgsIDQzNTcwLCAyNjk3LCA0MzQyMCwgNzgzOTYsIAotICAgIDEyNzA1NywgMjY5NSwgNDIxNzEsIDAsIDAsIDAsIDY3NjE3LCAxMTg5NzEsIDAsIDI2OTMsIDEyMTI1LCAxMjc2NiwgMCwgCi0gICAgMTE2NCwgMTI4ODE3LCAwLCA0MTkxOCwgOTgzMTY4LCAxMjc1NDIsIDg2ODcsIDY2MDA5LCAxMjE3OCwgNzA1MywgMTI4MDAxLCAKLSAgICA3NDY5LCAwLCA1MjQ4LCAxMjIxOCwgMTIwNTM4LCA2NDI3LCA0Mjg4NCwgNDExMjMsIDAsIDAsIDQyODczLCA0MTEyNiwgCi0gICAgOTk5MSwgNDExMjgsIDc0MzcxLCAxMjcwMzEsIDAsIDk4NzMsIDAsIDQyODc3LCA3OTk0LCA2NDc2MiwgMjA1MywgNDI4NDMsIAotICAgIDY1OTEsIDkzNDAsIDAsIDE1ODksIDAsIDI5NiwgNzQ0MzgsIDc4ODUyLCAwLCA2Nzg0MSwgNzQzNzAsIDAsIDg5MjIsIAotICAgIDEyODA2OCwgNzQ2MDAsIDEyNzAwLCA3NDgzNiwgMCwgMTI1NzksIDAsIDEyNTc1LCA2NDE2LCA1NjU2LCAyODkxLCAxMzI2MiwgCi0gICAgNjU1OTAsIDUyOTksIDAsIDExNDczLCA1NDQ5LCAxMjUyLCAwLCA3ODQwNCwgNDE0MzEsIDc0MzY5LCA2NTM3MywgNTI5NSwgCi0gICAgOTE3NTY5LCA3NDExNCwgMTIyMywgMTY0MiwgMTc0LCA3ODM5OSwgODgzLCA0MTYxLCAxMjY5MSwgNDI2MDMsIDQxNDEzLCAKLSAgICAzMjEyLCA0MTQ1OSwgMzIxMSwgNzQ4MTAsIDQxNDI1LCAxMjcwMjksIDc4NDEyLCA3NDQ1MCwgOTcyOCwgMzg0NiwgODA3MCwgCi0gICAgNjE1MCwgNjYzNiwgNDM3MCwgMCwgMCwgNzQxNzgsIDc0NTg3LCA3NDExNywgMCwgMCwgMCwgNDk4NiwgMTIxODksIDAsIAotICAgIDY3NjQ4LCAxMjA0OTksIDk0MDAxLCA0MjU3LCAxMjEwNCwgNzc5NDIsIDYyMjAsIDkwMDQsIDY1NTYxLCAwLCA3Nzk0OSwgMCwgCi0gICAgNjgxMzUsIDkxNzU3NiwgNzc5NDYsIDAsIDY5Njc5LCA2OTY4NCwgOTg5MCwgNzg1NjEsIDEyOTcxLCA3ODQ1MywgOTI1NTYsIAotICAgIDczODk4LCAxMTk3OSwgNzAwNTEsIDExODkwMCwgOTE3ODk0LCAwLCA5NjM1LCAxMjYwMCwgODg3MSwgMCwgMCwgMCwgNjQ2OSwgCi0gICAgNzQyMjcsIDAsIDY1MzA0LCA0Njc5LCAxMDIzMCwgNjQzMDAsIDY0ODY3LCAzNDI3LCA0MjQwLCAwLCAwLCAwLCAwLCAKLSAgICA0MjkxNiwgMCwgMCwgMCwgNzI4MiwgNzg3MjgsIDY1NzMzLCA0NDQ1LCAxMjcxMzgsIDEyODA4MiwgMzQ5NCwgNzQ2MDYsIAotICAgIDY1NTUsIDAsIDc3OTc2LCAwLCAwLCA3ODU2NiwgMCwgOTgzMTg5LCA2NTg5OCwgOTgzMjM4LCA2NTMxMiwgNTQ0NywgMCwgCi0gICAgMTI4OTUsIDY1NTkzLCA0MDEwLCAwLCA0MTEwNiwgMCwgNjQ0NDgsIDAsIDQxMTA1LCAwLCA2NTgyMCwgNjIzMiwgMCwgCi0gICAgMTI4MjgwLCAwLCA0MzYwOCwgMTE5MDkxLCAwLCA2NTM4LCA0MzM1LCA3ODM2NCwgMzk0MSwgNDExMjIsIDExMDYxLCAKLSAgICA3ODM2MywgNjQ4OTIsIDkxMTMsIDE5NTQsIDEyMTU1LCA5ODM2NjUsIDQyODc4LCAxMTUwMCwgMCwgMCwgNzQ1NzgsIDAsIAotICAgIDY1ODMyLCAwLCAwLCAwLCA3Nzk3NSwgMTE5MjMwLCA0NTg2LCAwLCAzNTAsIDEwOTUxLCAwLCA1MDksIDAsIDAsIDkyMzA3LCAKLSAgICAwLCAwLCA1MTMzLCAwLCAwLCA5NTAwLCAwLCA0OTU3LCA2NDc0MSwgMjQyMiwgMjIxMiwgOTgzMDgwLCAwLCAwLCAyNDk2LCAKLSAgICAxMTUxNiwgOTQ0LCAxMTg4NTEsIDM4OTAsIDEyMTY4LCAxNDM4LCAwLCA5ODMxMTcsIDAsIDQxOTQ3LCAxMjIwLCAxMjA4MjgsIAotICAgIDEyODU1NSwgMCwgMCwgMTU3MSwgNDI2MzAsIDQxOTQ5LCA0MjgwNSwgODI3MCwgOTQzLCA1NjQsIDAsIDMxMiwgNDE5ODAsIAotICAgIDk4MzkzNSwgMCwgNzgxMjAsIDg4NzcsIDI2OSwgNDQyOSwgNjI3MiwgOTYxNywgMTQ2MCwgNjk1NCwgNzg2NTcsIDQxMTIwLCAKLSAgICA2NTEyMSwgMTA4NjIsIDYwNjAsIDQxMTE5LCA0MTQxNiwgNzQzNTUsIDQxNzMsIDAsIDAsIDAsIDE5MDYsIDkxNzk4NiwgCi0gICAgMTE1MzIsIDc0MDczLCAxMjczMzgsIDAsIDE5ODUsIDYyOTYsIDk1ODIsIDkxNzg5NSwgNjQyODcsIDAsIDc4MTE1LCAKLSAgICAxMTQyOCwgMTczMCwgMjQ1NywgOTE3ODA4LCAxOTkxOCwgMTA0NjksIDAsIDAsIDc3MDMsIDg4NDAsIDgwMzUsIDAsIDAsIAotICAgIDkyMjMwLCAwLCA2MTI5LCAwLCAxMjg1MjgsIDEyODI2OCwgMCwgNzg3NCwgODY4MSwgMTE5MDkyLCAwLCAxMzEzNiwgMCwgMCwgCi0gICAgNzAxMDIsIDYzODg2LCAxMTg4ODEsIDk2MDUsIDcxMzA4LCAxMzIyMCwgMTI4Nzc2LCAxMjAyNzQsIDU1MTQsIDAsIDkyMjgsIAotICAgIDAsIDAsIDAsIDUyNDAsIDk4MTEsIDEwMDEyLCAzMDk2LCAwLCAwLCA5ODMzNDMsIDY2Njc2LCA2NTg3MywgMCwgMCwgMCwgCi0gICAgOTUwMSwgMCwgMTI3MiwgNjQ1MzYsIDY1NDY1LCA2NDY1NCwgNzQ2NywgMCwgMTQ2NywgMTAxNTgsIDEwMDQwLCAwLCA5NTE5LCAKLSAgICAwLCA5MTc4MTIsIDAsIDExODg5OSwgMTIxOTMsIDAsIDAsIDAsIDAsIDk4MzM0NSwgMTk5MzUsIDAsIDkyMTYyLCA2OTY3NiwgCi0gICAgMCwgMCwgMCwgNTI3NSwgMCwgMCwgODYzNywgMCwgMCwgMzc4OSwgNjM4ODAsIDExNDcxLCA0MzU1NCwgNjU4NjIsIDExNDc0LCAKLSAgICA2NjMzMiwgNjY2MDMsIDEyODEzOCwgMjQyNiwgMTIwNDIsIDkyMTk0LCA5ODM5MDIsIDk1MzcsIDM5NjEsIDEyMTE1LCAKLSAgICA3Nzk1MywgMjYwNSwgNDUwMCwgNjQ1NjEsIDU1MjI0LCA0OTgxLCAwLCAwLCA2Mzg3NiwgMTE2NjcsIDQyNjg2LCA3Nzk3MywgCi0gICAgNDIzNjIsIDY0Njg2LCA0NDk5LCA0MTY0OSwgNzU4OSwgMCwgMCwgMzIzNywgMCwgNjgyMTUsIDkxNzkwNCwgODU0MSwgCi0gICAgNzgyOTgsIDcwMDM0LCA0MTg2NiwgMCwgMCwgMCwgMCwgNjk5MjQsIDQzNTU1LCAyODIzLCA5NTU5LCAxMDA2MCwgNDE5NDAsIAotICAgIDgyOTksIDQxOTQ1LCA3MTMyLCA0MTk0MSwgMzMwOCwgNzE5MCwgNjQ4ODAsIDg2MTQsIDY1MjIwLCA0MTQ5MywgMCwgCi0gICAgNDE2OTksIDEwNzYyLCA0Mzc4MCwgMTI5OTksIDAsIDAsIDgxMDYsIDQxMjgsIDAsIDYyNzQsIDQ0OTQsIDAsIDQwMTIsIAotICAgIDEwMzk1LCA5ODM1OTEsIDQzNjMzLCA2NTQ0NywgMTI2NTExLCAwLCAxMTAwNCwgNjk1LCA3MzksIDY5NiwgNzYxMSwgMCwgCi0gICAgNDI3NTUsIDc0ODAyLCA5MjI3LCA3NTA2LCA3NTEwLCA2OTkzNywgNjkxLCA3MzgsIDc1MTEsIDc1MTIsIDc1MTUsIDM4NjgsIAotICAgIDY4OCwgNDE4NDcsIDY5MCwgMjU0OCwgNzM3LCA5NzQsIDgwMDMsIDc0MDYsIDkxNzkxMSwgMCwgMTI4Njg4LCAzOTg1LCAKLSAgICA5MTc5MTIsIDY1ODYwLCA2MzkyMSwgNzA1MSwgNjk3NzcsIDQ2ODIsIDkxNzgwNSwgMTI4MDksIDY0MDYsIDQ2ODUsIAotICAgIDkyNTA1LCAxMDg3OSwgMTAzNDcsIDQ2ODAsIDYzNDEsIDAsIDM4NTEsIDgxMzIsIDc0MzI1LCAwLCA5MTc5MDcsIDAsIAotICAgIDQxOTU4LCAxMTkxNzYsIDkxNzkwOCwgMCwgMCwgNDI2NTcsIDkyNDY4LCA3NjQzLCA0MjM3MywgMTE3MTQsIDY3NTg3LCAKLSAgICA0MzU2OCwgOTgzMTc1LCAxMTcxNywgNzY1MCwgMTA1OTQsIDY0OTUxLCA3NjQ3LCA3NjQ5LCAxMjgxNTUsIDc2NDYsIDAsIAotICAgIDc4MDgyLCA5NjUxLCAwLCAzODkxLCAwLCAwLCAyMzM3LCAxNzM1LCA3NDMyNCwgNjc4NjAsIDIzNjMsIDk4MzEzNSwgMCwgCi0gICAgNDM1NjEsIDAsIDAsIDc0MTQ2LCAxODYwLCA3NDk1LCA3NTgwLCA1ODEyLCA3NDk3LCA3NTg0LCAxMTkxNDAsIDEyNzg1MywgCi0gICAgMCwgMTIwMzQ3LCA3NzI3LCAwLCA4NDk4LCA2OTgxOCwgODk0OSwgMzA2NSwgNDI3MTksIDcxMzUsIDE1NjksIDkyMzc1LCAKLSAgICAxMjUzNCwgMTIxMjQsIDc2OTAsIDAsIDEyNTMzLCA5ODM4NzAsIDY0MTgsIDQ1NDMsIDc4MDg2LCA2OTY5LCAwLCA3NDgwMCwgCi0gICAgMCwgNjc5NzQsIDExOTgwLCAxMjg2NTAsIDk4Mzc5MiwgNjM4OTQsIDEyMDc2MCwgMTIyODIsIDY2MTkyLCAwLCA3NDU5MiwgCi0gICAgODg1MCwgNzQyNzUsIDkyMzgsIDEwNjE3LCA5MTc1NDUsIDAsIDkyNjI1LCAwLCAxMjc5MSwgMCwgMCwgMTI3ODQzLCA0NDQ3LCAKLSAgICA3MzczMiwgMTI3OTMsIDEyOTAwLCA5MjM3NywgMTA5NTAsIDAsIDc4MDg3LCAxMjc5MCwgNDE0MDAsIDExOTEyOCwgNjY2MDcsIAotICAgIDEyNzkyLCA0MjIzMiwgMTk0OTM4LCAxNzQ0LCAxMjc4OSwgMTAzNjYsIDEyMzE3LCA0MTMxMCwgOTgzODYwLCA0MTM5OSwgMCwgCi0gICAgMCwgNTUyNTgsIDAsIDEyNjkwLCAwLCAwLCA0MzY3MiwgMTI3ODQwLCA0MTY1MiwgMjk3NCwgOTAxMCwgMTEzMTUsIDAsIAotICAgIDI3OCwgMCwgNDE0MDUsIDExOTI1NCwgMCwgMTAwNzcsIDYzODUzLCA3NDU1NywgNDI1ODYsIDAsIDAsIDYwMDIsIDAsIAotICAgIDQzNTUzLCAwLCA2NzkwMywgMCwgMTI3ODcsIDQxMzA4LCA3OTM0LCA2NTMwNiwgMCwgMCwgMCwgODY0NiwgOTgzMTg2LCAKLSAgICA3NzgyOSwgNzEzNjAsIDAsIDY0MTMsIDY1NTAsIDAsIDE5NDAsIDAsIDQzNjM3LCAyMjAsIDY1MTkzLCA0MzU1MSwgMTA2NzgsIAotICAgIDEwMDQ0LCAxMjgzMjIsIDAsIDAsIDY4NjU5LCA2NDAzLCA1NzA3LCAxMDM5MywgMTI3NTMyLCAwLCA2NjYxNCwgMCwgMCwgMCwgCi0gICAgMTAyOTcsIDAsIDM3NDIsIDAsIDM5NTksIDAsIDAsIDAsIDI0NjcsIDAsIDYwMDMsIDYzODQ0LCA2NjYzLCA4MDQwLCAwLCAKLSAgICA0Mzc1OCwgNDE4MiwgNzgxNzEsIDQ2NzYsIDEyMDUwMSwgMCwgMCwgMjUxMCwgMCwgMTAyMDgsIDc4MTY4LCA5MjM2MSwgCi0gICAgMTE1NDAsIDQzNTQ2LCA2NjkyLCAwLCA0MTA2MCwgMCwgNDY2OCwgOTA4MywgMCwgMCwgNzgxNDQsIDE1NTksIDYzODMxLCAKLSAgICA5Njc3LCAxMjAyNjAsIDAsIDY1MjU2LCAwLCA3NDA3MCwgMCwgMCwgMzY1LCAxMjA1NiwgNDMwMjcsIDEyMDQyMywgNDE3MTYsIAotICAgIDEyODIzNiwgMCwgMTIwNDcyLCA1NTE2LCAyODQ1LCA3NzE3LCA4MDM2LCA0MTcxNywgNzM4MjcsIDU0NCwgMTIwNDUsIAotICAgIDYyNzgsIDAsIDU1MTUsIDAsIDAsIDk4MzA1MSwgNjUzMzksIDQzMjIxLCAyMjExLCAwLCA1NTE3LCAwLCAwLCA3NDg0MSwgCi0gICAgNjc4ODQsIDAsIDY3ODkwLCA2Nzg4NSwgNjc4ODAsIDY3ODgxLCA2Nzg4MiwgNjc4ODMsIDAsIDAsIDY3ODc5LCAxMjcxODgsIAotICAgIDE5MDIsIDY3ODg3LCA5NjM4LCAxMjk3NiwgMTI2NTQ2LCAxMjQ4MywgMTIzNjgsIDQxNzY5LCA0MjcyNiwgNDE3NjUsIAotICAgIDczNjEsIDY2NjcsIDY3ODc0LCA3NTU2LCA2Nzg3OCwgNzQzNTEsIDExMjY0LCA5ODksIDQyNjc3LCA2Nzg4OSwgMCwgMTMxMSwgCi0gICAgOTE3OTY2LCA0MzI2LCAxMTAwMCwgNjM4MjQsIDEzMDY4LCAxMDkzMiwgMTI4ODgwLCA2OTE3LCA3ODE1NSwgMCwgOTQ5LCAKLSAgICA3ODE2MiwgMCwgNjE0OCwgODYwNSwgNDIyNTMsIDc4MTc3LCAwLCAwLCA0MjcxNSwgMCwgMCwgMCwgNjM4NzEsIDAsIAotICAgIDQxNzk2LCAxMjY5LCA2NTMwLCAwLCA2NTA1NywgMCwgNTE0NCwgMTIyMjEsIDQyNzE2LCAwLCA0NDMxLCA0MzMxLCAKLSAgICA5ODM3MjAsIDEyODY3NSwgNDE4MzQsIDUyNzksIDAsIDEwMzM2LCA4MzEyLCAwLCA0MjcwMSwgMTI4ODI1LCAwLCA3ODE2NSwgCi0gICAgNjYwMzYsIDAsIDAsIDY0MjgsIDQyMjcwLCAwLCA5ODM1OTYsIDQzMDU5LCA0MjY2NiwgNTI1NiwgMTA2NywgMjU1LCAKLSAgICAxMjEzMSwgOTgzNzEzLCA5NDkzLCA5ODM5NTksIDQxMDE0LCAxMTc5MywgMTk0OTIwLCAwLCA3NDM5NCwgNDM0NjAsIAotICAgIDEwNjUzLCA0MjcyMywgOTgzODQ1LCAxMTk2MzIsIDAsIDY1NjAsIDcwMTYsIDc0Mjc0LCA5ODM2MTUsIDQzNTU2LCAzOTI5LCAKLSAgICA2Nzk3NywgNjYxNCwgMjc2OCwgOTI1MDQsIDk3NDYsIDUxMzUsIDExODExLCAxMjc5NiwgMTE5NTMsIDAsIDY5NzYxLCAKLSAgICA1MTM5LCAzNDYsIDc0MzAzLCA2MzA1LCAxMjc5NSwgNDY3NSwgNTE2OCwgNzg1NTIsIDEyNzc1MywgNzQzMTUsIDc0MzYxLCAKLSAgICA4MjUzLCA4ODE3LCAxMTM2LCAwLCA0MzU2MywgOTIyMzIsIDAsIDE5NDc1MCwgNzM5MiwgODIzMCwgOTM2NSwgMCwgMCwgCi0gICAgOTgzNjA3LCAwLCAwLCA0MDQxLCAwLCAyMzU3LCA0MzI0MCwgMTI3ODYsIDIyOSwgMTE5ODg1LCAxMTk4ODQsIDQ0MDA0LCAKLSAgICA3MTQyLCAxMTk4ODEsIDEyMzUwLCA2NTU1NCwgMTE5ODgyLCAxMTk4NzcsIDExOTg3NiwgMTI3ODUsIDYzODYzLCA0Mzc5NSwgCi0gICAgNzc3MCwgMTA3MTIsIDY0ODUzLCAxMjY4NiwgMTE4OTE2LCA0MjM3NSwgMCwgMTI3MjM4LCA2NjM1MiwgMTA0NzAsIDAsIAotICAgIDExMDU5LCAxMDc5MSwgOTE3OTQ0LCA0NTAsIDExOTMyOCwgMCwgMTA0MzIsIDEyMDk3LCA1NDUwLCA2NDY5MSwgMTIzMywgMCwgCi0gICAgNDQwMDksIDc4Mjg0LCA2NjMzOCwgMCwgMCwgMTgzOSwgMTE4Nzk5LCA5ODMyMTcsIDEwOTI3LCAxNzAxLCA5ODM2NTUsIAotICAgIDIzODgsIDQxNzQ5LCA0MTc2MSwgNTQ1MywgODM2MSwgMTE5ODY1LCA0MTc1OCwgNTQ0NCwgNDE3NjMsIDY0ODg5LCA3MTQzLCAKLSAgICA5MjQ5MywgNzg2NzcsIDAsIDkyNDI5LCA3ODE3NCwgNjY0MzIsIDg4MDEsIDMwNTMsIDQzNDAsIDk4MzA0NCwgMCwgNjU4MTIsIAotICAgIDkxNzgzMSwgMCwgNDE4MjQsIDY3OTg1LCAxMjAyMDMsIDE5NDgwMCwgMTk0ODAzLCA0MjcwMCwgMTk0ODA1LCAxMjc5ODAsIAotICAgIDE5NDgwNywgNzg2NzYsIDkyMzU2LCAxOTQ4MDgsIDAsIDAsIDQ0OTMsIDQzMzYsIDAsIDIzMTQsIDQzNjAyLCA3ODgyNiwgCi0gICAgMTE5MzI1LCAxOTQ4MTEsIDQyNDM5LCA2NDYzOCwgNDIzMjcsIDQzNTI4LCA0NDg5LCA3MTMzMSwgMCwgMTk0NzkzLCAxOTEyLCAKLSAgICA0MjM4NSwgMTAzMDYsIDEwMzcwLCAwLCAwLCA4ODY3LCAxMDI1MCwgMTAyNTgsIDI3MTIsIDE2MzUsIDc4ODIxLCAxNDEwLCAKLSAgICA5MjY3MSwgOTgzMjQ0LCAxMTg4NzgsIDAsIDAsIDk5MTksIDEyMDUyOCwgNTU5LCAxMjgxNTcsIDQxODI1LCAxMjc5NzUsIAotICAgIDc4MTg4LCA0ODkyLCA3NDAxNiwgMTk0NzgxLCA2NTQyLCA0MTk1NywgMTI4ODY1LCA1Nzc3LCAwLCA3NTksIDY1NzQ5LCAKLSAgICAyMDc5LCA2NTI0OCwgMTI3ODgsIDY0NDg3LCA2NDU1MiwgMCwgMTAyMjMsIDQyMDYyLCAwLCAwLCAxMjY1NzMsIDM2NjgsIAotICAgIDY1NzU0LCA0MzU2MCwgMTIyMjYsIDY3OTkxLCA2NTE0OSwgMjM0MCwgNDE5NTksIDE5NDc4NiwgMTk0Nzg1LCAxOTQ3ODgsIAotICAgIDQzNjE4LCA2NTc0NywgMTA5MzcsIDI5NjIsIDAsIDIzMjEsIDM1ODcsIDY1NzQ1LCA5MjQzNiwgODkyMSwgOTk1MiwgMCwgMCwgCi0gICAgNDI3MTQsIDk5NTEsIDQzNDA5LCAxOTQ3NzAsIDI5NDksIDY2MDEyLCAxOTQ3NzUsIDE5NDc3NCwgMjk1OCwgNjgzNTksIAotICAgIDQxODIwLCAyMzAwLCAyMzk1LCAxMjg1NjMsIDk5NzYsIDEyMDA0MywgMTIwMDUwLCAxMjAwNTgsIDY4MjIwLCAxMjgxNDMsIAotICAgIDQyODA5LCA0MjgwNywgMCwgMTIwMDQ2LCAxMDE5OCwgNDE1MCwgNjQzNzEsIDgzMTgsIDQxNzkwLCA2Nzk3NiwgNDE4OTgsIAotICAgIDIzNjAsIDQxNzk0LCA5MTc5NDIsIDcxMzE0LCAxMjc4MTgsIDAsIDAsIDI0MTgsIDk4MzA5OCwgMjQxMSwgMTEzMzYsIDc5OSwgCi0gICAgNjM4MjMsIDEwMjc2LCAxMDMwOCwgMTAzNzIsIDkxNzU0MSwgNDE3NzIsIDQyODEzLCAyMzE3LCAxMDI2MCwgMTE4OTgwLCAKLSAgICA1NTI4NCwgOTIyMDMsIDAsIDEwMzg0LCA5ODMyMTgsIDAsIDAsIDc3NTMsIDIzNTEsIDY2NTUsIDY0NDg5LCA2OTkzMSwgMCwgCi0gICAgNzc4NzIsIDQ0NDMsIDQyNzc5LCAyMzAsIDAsIDAsIDQzNTQ5LCA0ODU1LCA0MjE1MCwgNjU3MzksIDU0NDEsIDQxODk2LCAKLSAgICAxMDI4OCwgMTAzMjAsIDAsIDg1NSwgNzA0NiwgNjEwOSwgNjUwNDUsIDYzODM5LCA3ODE5OCwgMjA0OSwgMTAwOTgsIDAsIAotICAgIDc0MTQ1LCAxMjc5NDMsIDEwMjY0LCAxMDI4MCwgOTE4NCwgMTAzNzYsIDcwMTMsIDQ0NjcsIDAsIDAsIDAsIDQxODg3LCAwLCAKLSAgICA0ODYyLCA5NzM1LCA2NTM3LCAxMjA1OTEsIDc0Mjg2LCAzOTE0LCA5MjE3OCwgOTM5NzYsIDkwNjUsIDEyOTYxLCAwLCAwLCAKLSAgICA5MjI1MywgMCwgMjg5LCAwLCA0Njk0LCAxMTQyMCwgNDY5MCwgMCwgMTIwNTE0LCA5MTc5NzgsIDQ2OTMsIDczODkzLCAKLSAgICA0MjcyNCwgMCwgNDY4OCwgMTIwNDU0LCAwLCAwLCA2Nzk5NCwgODIzOCwgMzExMCwgMTIwMTYyLCA5ODM4OTksIDEyMDE2MywgCi0gICAgNjUyOCwgMTI3NTUzLCA0MzAzNSwgNjk4OTgsIDIxOCwgMCwgMTUyMCwgMCwgNDc4NiwgMCwgNDMyMjUsIDQ2MDIsIDAsIAotICAgIDc4MTY3LCAxMDA4OCwgNjU0OCwgMCwgMTIwMTU2LCA0Mzk3OCwgODk4OCwgODg4OCwgMCwgMCwgMCwgMCwgMTA2NjYsIDAsIAotICAgIDczOTAyLCA2OTc0MCwgMCwgMCwgOTk3NSwgMTI4MDM5LCAxMTk5MDIsIDQ2ODksIDg5MzIsIDAsIDY1NTYwLCAxMTkyMDksIAotICAgIDc0NDQxLCA3ODgxMCwgMCwgMCwgNjc5ODcsIDAsIDAsIDAsIDY3OTg5LCAwLCAxMDA2NSwgODIwNywgMCwgOTI2MTMsIAotICAgIDEyODAxMSwgMCwgNjYyLCAwLCA5MjQ0LCAxOTQ4NjMsIDAsIDExOTI2MSwgOTgzNDIwLCAwLCAwLCAwLCA0MTkyOSwgMCwgMCwgCi0gICAgNjY2NzQsIDQxOTI2LCAxMjA0MDgsIDEyMDQ0MywgMTA1MTMsIDY0NjM3LCAxOTQ4NjIsIDY4MDEzLCA1MiwgMTMxMTgsIAotICAgIDY0NzUsIDAsIDEyMDM0MSwgMTIwOTUsIDEwMjI1LCA0ODEyLCA5MjU3OCwgMCwgNjc5OTIsIDc0MDg1LCAwLCAzOTc4LCAwLCAKLSAgICA5MTc5NDUsIDEyNzgyMywgMTE1ODIsIDEyMDc2MSwgMTIyODEsIDAsIDY1NDQsIDEzMjQxLCA5Mzk2MSwgNjk3ODIsIAotICAgIDEyODU1NywgMTk0ODYwLCAxMTc2NSwgNjUyNTgsIDEwMzY5LCAwLCAxNTg1LCA3MTkyLCAxMDI0OSwgNDIyLCAxNTAwLCAKLSAgICAyMDM2LCA5ODYsIDE5NDg1OSwgNjQzOTQsIDU3ODEsIDU1OTksIDY0Mjk0LCAyNDk0LCAxMjA0NTAsIDQ4NjEsIDc0MDIxLCAKLSAgICA2NDMzNCwgNzgyMDMsIDEyNzgwOCwgMCwgOTIyNjYsIDY1MTAyLCA4OTYxLCA2NTg0MiwgMTAyNDMsIDEwMjQ1LCA3NDE5MSwgCi0gICAgMTIwNDEwLCAwLCAxMjA0NTMsIDY0ODIxLCA5NDc4LCAyNTA4LCA5MjY4MywgMCwgMjAyLCAxMjgyNDYsIDc0MTMxLCAxMjQyLCAKLSAgICA2NTUxNCwgMCwgNjM5NDAsIDEyODcwNiwgNjQ1MzMsIDEyMDEyOSwgMCwgNjc4NDIsIDExOTkwLCA5MjQzMCwgNjM5MzksIAotICAgIDQzMzc1LCA2NTQ0MCwgMjUwNCwgMCwgNzg2NzEsIDY0ODI5LCA5ODM5MDEsIDY5NDMsIDkxNzkzNCwgNTg1OSwgMCwgMjg1OCwgCi0gICAgOTgzMzUzLCA3NDI5NCwgOTgzOTA1LCA2OTIzOSwgMCwgMTE5MDI3LCAxMjk5MiwgMjc1MywgMTkzNiwgNzAwNzgsIDkyNTc0LCAKKyAgICAxOTQ2MDksIDAsIDgyOTUsIDY4NSwgOTAyNSwgMTUyNCwgMTI2MTgsIDAsIDU1MzksIDAsIDkyNTIzLCAxMjAxMDIsIDcxMzgsIAorICAgIDEyMDU1MiwgMCwgMTk0NjExLCA3ODc1MiwgMCwgMTI1MjAsIDgwNTgsIDk3MzIsIDAsIDUwODAsIDY0Nzc1LCA1MDM2LCAKKyAgICA1MDM1LCAxMjA1OTAsIDQyNjA0LCA5ODM2NTYsIDAsIDgwNzQsIDI3NSwgMTMyOTEsIDE5MDcsIDc4ODM4LCA0NDMyLCAKKyAgICAxMjcyNzEsIDUwMzMsIDEyNzI3MywgMTI3MjcyLCA0ODM2LCAzODg4LCA3Mzc5MiwgMTA3MjksIDY0NTQ2LCAxMjcyNjIsIAorICAgIDQzNzA0LCAxMjcyNjQsIDEyNzI1MSwgNjc1ODgsIDExOTAwMCwgMTI3MjUyLCAxMjcyNTUsIDg4NTgsIDY0MDksIDEyNzI1NiwgCisgICAgMTIwMjUyLCAxMjgxMDAsIDAsIDAsIDY2MzIxLCAwLCAxMjgxNCwgMTI3MjQ4LCAzNDMyLCAxMDIxOCwgMCwgNjA5NCwgCisgICAgNzY0MSwgNDI0NDUsIDAsIDkyNDg3LCA0MjQwNiwgMTY3NiwgNzQzMjAsIDE5NDYwNywgOTgzMTc3LCA1MDMwLCAwLCAwLCAwLCAKKyAgICA3Mzg2OSwgOTYyMiwgMCwgNjk5NDQsIDY3ODcsIDAsIDAsIDAsIDk4MzU4MywgMTA1NDQsIDEyOTE5LCAwLCA5MjIxOCwgMCwgCisgICAgMCwgNjk5MDYsIDEyMDc4OSwgMCwgOTQ3LCAxMTk4MzUsIDE5NDU4NiwgMTk0NTg1LCAxMDk2OSwgMTE5OTM1LCA3NjEzLCAKKyAgICA5MjU2MiwgMTE5OTM2LCA0Nzk1LCAxMTk5MzAsIDcwMTgsIDczNzYsIDEyMDE4MSwgMTIwMTkyLCAxMjAyNjgsIDAsIAorICAgIDQzNTY3LCA3NDA1NiwgOTE3OTEwLCAxMTgzMywgMTE5OTE5LCA3MjE2LCA2NTIzMiwgNzIxNywgMjUxLCA3MjE4LCA3ODk1LCAKKyAgICA0Mzk1LCA0MzUzOCwgMTE5OTI2LCAxMTk5MjksIDExOTkyOCwgNzIxMywgMTE5OTIyLCA3MjE0LCA3MjE1LCA5ODM4MzYsIAorICAgIDc0MTQxLCA4ODgwLCA3Njg1LCA2NjQ1OSwgMTIwMTczLCA2NTU0MCwgMTE5NjE4LCA2MjUsIDgxODcsIDQyODYxLCAxMTEzLCAKKyAgICA3MjM2LCA3OTE1LCAzNjMwLCAxMjAxNzYsIDgxNzksIDc0MjY0LCA2Nzg4NiwgOTMxNiwgMTA5ODAsIDI0ODksIDY1NjI0LCAKKyAgICA4MTUwLCAxMzU5LCA2NzY1MiwgMTI3MzI5LCAxMjczMzAsIDczNzU2LCA1MDQyLCA1MDQxLCA0Mjc2OSwgMTIwODQsIAorICAgIDEyNzMyNCwgMTI3MzIxLCA5MjI3OSwgMTI3MzE5LCAxMjczMjAsIDEyNzMxNywgMTI3MzE4LCAxMjczMTUsIDEyMjgzLCAKKyAgICAxNjE2LCAzNzk1LCAwLCA4Nzk1LCA2NjI0NSwgMCwgMCwgMCwgMTEzOCwgNzM5MDUsIDEyNjc3LCAwLCAwLCAzMjM5LCAKKyAgICAxMjczMTEsIDAsIDAsIDg0MzEsIDAsIDQyMTY0LCAwLCAxMTc3OCwgMTI2MjAsIDY4MjYsIDczNzczLCAxMTkwNzMsIDUwNDAsIAorICAgIDAsIDAsIDk4MzQ0MywgNzg0MjAsIDAsIDUwMzksIDAsIDc4NDE4LCAwLCA1MDM4LCAwLCAwLCAxMzE4NCwgNzQyOTMsIDAsIAorICAgIDY0NjQ4LCAwLCA5MzU5LCA3ODQxNiwgMCwgMTI4NzcwLCA2NTE1NywgNjY2MiwgMCwgMCwgMzg2MywgNzM5MDksIDQ4MzUsIAorICAgIDU1MjY2LCA0MzQzMiwgMTI3ODIyLCA0MzA5LCA3MTI3LCAxOTQ1NjksIDAsIDE5NDU2OCwgMTMwMSwgMCwgNDI1ODksIDU2OSwgCisgICAgMCwgNzM4MTMsIDcxMSwgNDM4OSwgNzEzMywgMCwgNzM4ODAsIDExNjEwLCAxMTM2OCwgMCwgMTk0NTcwLCA0MTMzMSwgCisgICAgMTAwNiwgNzQyNDAsIDAsIDE1NTAsIDgyMDEsIDczNzM3LCA3NjI3LCA1NDk5LCA1MDMxLCA3NzkwOCwgNDI3MzgsIDY1Nzg0LCAKKyAgICA3NzkwNywgNjUyNjcsIDM3NTgsIDAsIDY1NzgxLCA2NDczNCwgNzAwNzMsIDI0NDAsIDY1NzgwLCA3NzkxMywgODQ0OSwgMCwgCisgICAgNTAwOCwgOTgzNTcyLCAyMTE4LCAwLCAxMjEyMSwgODI1NSwgNTUxMiwgNzM4NzUsIDIxMjgsIDIxMzAsIDIxMzEsIDIxMjYsIAorICAgIDIxMzMsIDExMTksIDEyNzA2OCwgMjExNCwgMjExNiwgMjQ1NSwgMCwgMjEyMiwgMjEyMywgMjEyNCwgMjEyNSwgMTI3NDg2LCAKKyAgICA4NzE0LCA5ODM4MjAsIDIxMTMsIDAsIDIxMTUsIDEyODE3NywgMTI3OTA3LCA0MzcxMywgNTA1MiwgNjYyMjAsIDU4MjEsIAorICAgIDYxODYsIDY1Nzc4LCA2NTc3NSwgNTA1MSwgNjU3NzMsIDE0MjksIDQyNjQ3LCA1MDUwLCAzMDIsIDM4OCwgNDExMTUsIDczNSwgCisgICAgNjYzNywgNTkwNywgNjUwODgsIDAsIDEyNzI2LCA3NDU5NCwgOTExNywgOTgzMTgxLCAxMjAwMywgNTUxMywgNjY2NiwgCisgICAgNTA1MywgNzQyMzAsIDU1MTAsIDc4NDUxLCAwLCA3ODQ0NywgMjQ3MCwgNzg0MzcsIDAsIDE5MjUsIDAsIDkyMjM3LCAKKyAgICA3NDgwNywgMCwgNTA0OCwgNTA0NywgMCwgMCwgMCwgOTIzMTMsIDAsIDc0NDk3LCA5MjM5NSwgODA4OSwgNjkyOSwgNjM5LCAKKyAgICA5ODM1NjMsIDY4MTc5LCA2NDQ0MiwgMCwgOTIzNDgsIDQ1OTksIDQxNDAyLCA2Njc0LCA0MzM5NywgNDMyOTQsIDE0NzYsIAorICAgIDY0OCwgMCwgNjU4MTksIDMyMzMsIDAsIDQxNzgyLCA2OTUxLCA5NDAxNywgOTgzOTc2LCAzNTMwLCA5NzUwLCAxMjgzMTcsIAorICAgIDAsIDY2NTYsIDQyNjE4LCAwLCA1MDQ2LCA4NTEyLCA2NTg1NiwgNzQyNjEsIDg5NjcsIDAsIDUwNDUsIDQyMDI2LCAxOTE2LCAKKyAgICA3OTg2LCA1MDQ0LCAxMjA1NTYsIDkwMDYsIDEzMTI4LCA1MDQzLCAwLCA3ODUzLCA3NDA2OCwgNzQwMDQsIDk2NjksIAorICAgIDEyMzQxLCAxMjcwMywgODQwMiwgMCwgMTE5MDcwLCA5MTc2MDAsIDQxNzUwLCAzNTg2LCA2NDUwOCwgNDMxNDgsIDAsIDAsIAorICAgIDExOTYwNiwgNjc5ODMsIDEzMjk2LCA1MTcsIDAsIDEyODUzNCwgMTk0OTQ2LCA0MTUyOCwgMTIzLCA2NTQ1NCwgMCwgMCwgCisgICAgNzQ0NzgsIDEwNTMxLCA3Nzg0LCA0MTUyNiwgMTA4MjksIDczOTkxLCA4MDU3LCAxMTI2LCA3Mzg5NSwgMCwgMTk0NTkxLCAwLCAKKyAgICAzOTI1LCA0MjUxLCA4MDY5LCAxMDUxNywgMTIwNDM5LCA0ODksIDAsIDQyNTAsIDEyMDQ0MSwgMTIwNDUyLCA0MzE1MSwgCisgICAgOTgzMTc4LCAxOTQ4NTEsIDY2MjAwLCAwLCAwLCAwLCA3ODQyMywgMCwgMCwgODcxMSwgNjE4MywgMCwgMCwgMCwgMTIwNDQ4LCAKKyAgICA3NjIzLCAxMTg5MjUsIDExODg4OSwgOTIzNSwgMTI3NjAsIDc0MTc2LCA2OTY2MiwgNjY0NDUsIDQzNTQwLCAxMDA2MiwgCisgICAgMzc0MywgMTE1MTQsIDExMDc4LCAwLCAxMjEzNiwgMCwgMTI2NTk3LCAxMjA0MzUsIDAsIDc3MjYsIDAsIDE5OTIyLCAyNjcsIAorICAgIDMzOTMsIDQyMTk4LCAxMzcxLCAxOTQ4NDksIDY5MjMzLCAyNDU4LCAwLCA2MjAxLCAwLCA0MTA3NCwgNDI2NiwgMTA2NTIsIAorICAgIDQxNjEyLCA0MTA3NywgMzQwMiwgOTA1MCwgMzM5OCwgMCwgOTgzMzQ4LCAwLCAzMzkxLCA0MTA3NSwgMjQ3NiwgMCwgCisgICAgMTI4MDE3LCAwLCAxMDYyNSwgMCwgMTI3NjcsIDEzMDE3LCA3ODc0MywgNjQyNjEsIDY0OTM0LCAxMjc1MzcsIDEzMDE0LCAKKyAgICAxMzAxMywgMCwgNjY3MywgMCwgMCwgMCwgMTI0MzgsIDAsIDk4MzM0MiwgMCwgOTgzODgwLCAxMjY2MzgsIDkwNTMsIAorICAgIDEzMDE1LCA3NDUyMywgMCwgNzA0LCA2NjIxNSwgNjE5NSwgOTgzODI4LCA2NjYwLCA3ODc1OCwgOTE3NzYwLCA5MTc3OTMsIAorICAgIDQyMjEyLCAxMjYyOSwgMTE0MzUsIDAsIDU1MjU2LCA2NTUzOCwgMCwgMTI3OTQwLCA5ODMzNDEsIDc0NTQ3LCAxMjY1ODUsIAorICAgIDY1NDQ4LCA3ODEwMCwgMTI5NDgsIDExOTAwMSwgMTk1MDAyLCAxMTkyMzgsIDE5NTAwNCwgNzgwOTksIDEyNzA4NSwgMCwgCisgICAgMTI4MzIwLCA0Mjg3LCA4Mjc2LCA0OTAyLCAxMTMxLCAwLCA3ODQ1OCwgNjY3MjgsIDE4MTYsIDAsIDQyNTMzLCAxNjgsIAorICAgIDQyODQ1LCA0ODk4LCA2NDI5OCwgOTgzMTQxLCAwLCA0OTAxLCAxODIxLCAwLCA1NzgsIDM2NTMsIDAsIDc5MSwgOTE2MiwgCisgICAgNjk3NywgMCwgNzg4ODksIDc0NTYxLCAwLCA3MzczMSwgODM1NCwgNDM1OTAsIDExOTMwMywgOTgzNDQ5LCA3NTU3LCAKKyAgICAxMTkzMzksIDExOTMwMSwgODIzNCwgNzI0MSwgMCwgMTIwNjcxLCAxMTkxNjcsIDE5NDk5NiwgMTI4MTEsIDY1OTI1LCAKKyAgICAzOTQ2LCA3ODA3OCwgMTA5OTgsIDc4MDgwLCA2NzMsIDE5NDg2NywgNjQzOTcsIDEyODI3NiwgNzQ1OTksIDc4NDQ5LCAKKyAgICA4ODkwLCAxOTQ5NzcsIDE5NDk3NiwgMjQ0OCwgNzgwODUsIDEwMjY3LCA4NDI0LCAyNDUyLCA3ODA4MywgMTI4ODI0LCAKKyAgICA4NzI5LCA3ODQ1NiwgMCwgNzg0NSwgOTE3OTE3LCA3MTMwMiwgNDQwOCwgNDEyMiwgNjc3MiwgMTEwMzksIDg3MjMsIAorICAgIDE5NDk5MCwgNzEzMTAsIDExOTMwMiwgNzMxLCAxMTkzMDQsIDkyMjg2LCAyNDM4LCA2NDg1NSwgMTE5MzAwLCAxMTkyOTksIAorICAgIDExNzUsIDAsIDQyMTM1LCAzNzMsIDExOTE3MiwgMjExOSwgMTE0NTcsIDExNTIxLCA3NzIzLCAwLCAwLCAwLCA0MTk1MiwgMCwgCisgICAgNTI3MywgMjEyNywgNTI2OSwgNjMzNywgNTIwMiwgMjQwNCwgNTI2NywgNDI4MjMsIDExMjkxLCAxOTkxNSwgNTI3NywgCisgICAgMTI5NjMsIDEyNzg2NCwgNjE4OSwgNDEyNSwgMTMxNCwgMTIxMzMsIDEyMDM0MCwgMTE4ODczLCAxMjcxLCA5ODM2NDAsIDAsIAorICAgIDY2MDI0LCA0MTQ4MiwgMzg2NCwgNzQ1MzksIDAsIDM4NzksIDAsIDEyOTc4LCA0MTY2LCA0NTc0LCAwLCA3NTY3LCA3NDU5LCAKKyAgICA5ODMxNjAsIDQxMzkwLCA1Mzg0LCA0MTg4MiwgNjc2NDcsIDkyNTQ4LCA1NzU5LCA5ODM5MTIsIDAsIDQxMzg4LCA2NDQ0NiwgCisgICAgNDEzOTIsIDY0Mjg4LCA0MTM4NywgMCwgODcwNiwgNTU1MiwgOTgzMTg3LCA3MDAsIDAsIDU1NTMsIDAsIDcwODgsIDUzNTYsIAorICAgIDc0OTksIDY4MDA3LCA2NjU5NiwgNzQwNjYsIDAsIDEwMjYzLCA1NTU0LCAwLCAxMjM0NCwgMTAzMTEsIDc4MTEzLCA2NjY1LCAKKyAgICA5MjYyNiwgMCwgNzYxOCwgODUxNywgMTE0NTUsIDc4NDQwLCA2NDYzMiwgNjQ0NDcsIDU1NTUsIDc4MDg4LCA3ODA5MywgCisgICAgNzgwOTEsIDAsIDQyODAzLCA2NTAzMywgOTE0MywgNjY2OCwgMTk1MDY3LCA2Nzk5NSwgMTk1MDY5LCA2NTYsIDE5NTA3MSwgCisgICAgNjUwMzcsIDQ1NzcsIDY0NjI0LCAwLCAwLCAwLCA5ODM2NDksIDQyNjksIDczODg1LCA5MTc3NzUsIDQyODQ2LCA2OTY0NCwgCisgICAgOTUwLCAwLCA5MjI3MywgNjY1ODAsIDExODg5NSwgNjY2ODMsIDEwNTU0LCA5MTc3NzgsIDExOTEyMSwgMCwgNTA5OCwgCisgICAgOTE3NzcwLCAwLCAxMTkwOTksIDUwOTcsIDQ5MzUsIDk4NDgsIDEwMzgxLCAwLCAxMjg4NzAsIDk4MzcwMSwgMzY1MSwgMCwgCisgICAgMTIwNzMwLCAxMjc1NTYsIDUxMDIsIDUxMDEsIDEwMjY5LCAxMjk4MywgODEzOCwgNDUxNywgMTkzMiwgNTEwMCwgMTQzOSwgCisgICAgMTIwOTMsIDEyNDcsIDEwMDM0LCAxOTUwNjQsIDUwOTksIDc4MzczLCAxNDQxLCA0MjA4NywgMzA2MywgNjUwLCAwLCA3ODM4LCAKKyAgICAwLCAxOTUwNDEsIDE5NTA0MCwgMTE5MTQyLCA5MDMxLCAxMjA3OTAsIDEyODU4MiwgOTA3OCwgODU0NSwgNjYzNTYsIAorICAgIDEyODc5OSwgMCwgOTE1NCwgOTExOCwgMTI2NTQzLCAwLCAyNjc2LCAyMjc3LCAwLCA3MzgxMiwgNjE5MCwgODU5OSwgCisgICAgMTk1MDUzLCA2OTkxOCwgMTA3OTUsIDk4NTcsIDcwMTQsIDk4NTYsIDE5NTAzMywgOTI2MjAsIDEyMTI5LCAwLCA4NDgxLCAwLCAKKyAgICA2MjAyLCAxOTUwMzUsIDEwOTIwLCAxMjgyMzcsIDUyMDMsIDE5NTAzOSwgMTk1MDM4LCA1MTA4LCA1MTA3LCA2NTgxOCwgCisgICAgNjYwMTksIDk3NjIsIDAsIDU1NDEsIDc0NzcyLCAwLCAxMjYxMywgNTI4NCwgNjY1NywgMjA3LCAxMjg4MDYsIDQyNzUsIAorICAgIDc0ODE5LCA4NTQsIDY4MTQ3LCA3NDM4MSwgMCwgNzg3ODYsIDUxMDMsIDEyNzg2MSwgNjQzNDgsIDQxMzY4LCA0Mzk3NCwgCisgICAgNDg4LCA2OTgxMSwgMCwgNzEzMzksIDEwMTU3LCAwLCA0MzAzNCwgMTE0MzgsIDY0Njc0LCAwLCA5MjY5NCwgNjg0MzEsIAorICAgIDQxNzcxLCA1MTA2LCA2NjY5LCA4NTA0LCA2NTE1NCwgNjk4MTMsIDQxMzY3LCA1MTA1LCAxMjc1MDksIDY5NzIwLCA2NDc2LCAKKyAgICA1MTA0LCA5ODM3NDksIDMwNCwgMzE3NiwgMTE5MDEwLCAwLCA5MzIsIDEyMDYzMywgNjU2NywgMjM4LCA2OTY1NiwgCisgICAgMTk1MDExLCAxOTQ1OTUsIDE5OTA1LCAxMjA1NzcsIDE5NTAxNSwgNzg4NzAsIDQxMDQ0LCA2NzY0MCwgMTk0OTAyLCAKKyAgICA0MjA1NSwgOTkxMiwgNjU5MzksIDEwNjcwLCA3NDA5MywgMTMyNzMsIDAsIDEyNTUyLCAxOTUwMTksIDg4MDMsIDMwOSwgCisgICAgNjYyMiwgODE1MSwgMTA4NTgsIDc4NzA2LCA2NzYzNiwgMCwgMTI1NjgsIDAsIDEyNTUzLCAxMDgxNCwgNDMyNzUsIDY5NTAsIAorICAgIDk3MTIsIDY4NjgwLCA0Mzk3MCwgOTgzMTk4LCA2NTE2NSwgOTI3MjUsIDAsIDY2NDY2LCAwLCAwLCAwLCA2NjcyNSwgNjE5MSwgCisgICAgMTEzNTEsIDEwNDM3LCAxMTMxNiwgNjc2MzQsIDQzNzYzLCAwLCA0MTc1NCwgNjc2MzUsIDkzNzAsIDI3MjAsIDE5NDk3NSwgCisgICAgNjg0NjIsIDgyMzIsIDExODgxNywgMCwgMzIyMiwgMCwgMCwgMCwgNjY2NjMsIDAsIDAsIDEwODM0LCAwLCAwLCA2NTczMiwgCisgICAgOTQwOTUsIDkxNzU0NywgOTI2ODIsIDY3Njc5LCAxOTUwMjAsIDAsIDc3ODEsIDQxMzgzLCA2NDU2OCwgMCwgMTIwNzM4LCAKKyAgICAxMjA3NywgMCwgNjQ1ODYsIDkxNzYyMCwgNDIzOTYsIDU1MjU1LCAzNDc1LCAxMjgwMzUsIDI0NzksIDAsIDM2MzIsIAorICAgIDEyMDcyOCwgMTA2OTgsIDgzNzYsIDM2NDgsIDE5NDk2MCwgNzQ4NDQsIDY3NjM5LCAzNjM2LCA2Nzg5NCwgMzY1MCwgODgzNywgCisgICAgNjUyMjksIDE4NDMsIDQyMjgzLCA0MzI1MCwgNDE1NjIsIDkxMDAsIDc0NTQ4LCA5MTc2MzAsIDM2NDAsIDEyNzE5MCwgCisgICAgNDIzMjEsIDcyODQsIDE5NDk3NCwgMTk0OTczLCAxOTQ5NTAsIDE5NDk0OSwgMTk0OTUyLCAxOTQ5NTEsIDEyNjY0OSwgCisgICAgMTk0OTUzLCA0MjA4MCwgMjUyOSwgMCwgMCwgMCwgNDIwODMsIDEyMDY3OCwgNjgzOTgsIDE5NDk1NywgNjc2MTksIDY2MzY3LCAKKyAgICAxOTQ5NTgsIDk2MzQsIDkyMzgwLCA5OTg4LCAwLCA0MTA2OCwgMCwgNDI5NSwgNjUyNjQsIDY4MDA2LCAwLCA5MjU0NSwgMCwgCisgICAgNzg1LCA4MjM2LCAxMjg2NDcsIDkwMjcsIDY4MTYwLCA2NzYyMywgNjQzODMsIDEyMDI2NSwgOTI1LCAxMjcxNTYsIDAsIAorICAgIDQxOTg1LCA0MTA3MSwgOTU4NiwgMCwgNDE5ODQsIDkyMTcsIDAsIDAsIDAsIDkxODYsIDIwNjcsIDQwMTYsIDk4MzgwMywgMCwgCisgICAgMzgxLCAxMjkzNiwgMCwgNDIwNzcsIDAsIDY5ODgwLCA1MTg0LCA0MjA3OCwgMTk0OTQ3LCAxMDgxMCwgMTI4NTMxLCA0NTg1LCAKKyAgICAxOTk0MywgNTg2MCwgNjc2MzMsIDAsIDAsIDgxMiwgMzYxNSwgMCwgNTE3OCwgNDQwMDAsIDEyMDU0OCwgNzg4MDcsIDUxODgsIAorICAgIDc0Mjg3LCA2NzYyOSwgMzYwNSwgMTA2OTIsIDExNjYsIDY0NDI5LCA0MjYzOSwgOTI0LCAwLCA2NzYzMSwgNDI2MTYsIAorICAgIDEyMDY3MCwgMjQ0MiwgMTA3MDMsIDc4Nzg5LCA2NzYzMiwgOTE3OTI0LCAxMjc3MSwgMTI3MzYsIDEyNzUzLCA2NjcwOCwgCisgICAgNzM5MzMsIDY3NjI2LCA0MjQwMSwgMCwgNjk4NzIsIDEyNzM3MywgNDIyODgsIDEyNzUxLCAwLCA4NTQyLCAxMzE0NSwgCisgICAgMTk0OTYzLCAyNDY4LCA2NjcwNiwgNDEyOTQsIDM2MjYsIDM4ODMsIDY0Mzg4LCA0MjQ3OSwgMCwgNDExMTcsIDAsIDkyNTgwLCAKKyAgICAwLCAwLCA2NzYyNCwgMCwgMTI5MCwgMCwgNjU1ODUsIDI3MTUsIDgwNiwgNjUyMDgsIDQxODg0LCA5MTc4ODMsIDEzMTgsIAorICAgIDY0NzMxLCAxMjY1NzgsIDAsIDAsIDY2MzI1LCAzNDY1LCAyNDA1LCA5MjQwLCAwLCAxMjc1NiwgNjUyNTksIDAsIDk4Mzc4MSwgCisgICAgMTI3NTIsIDU4MzMsIDE0MzIsIDAsIDQxODgzLCA3MzkxMiwgOTc5OSwgMCwgNDE4ODYsIDI0ODAsIDAsIDIwNjIsIAorICAgIDEyNzI5MywgNjQ5NCwgNTUzNywgNzg2NTYsIDAsIDE5NDU4NywgMCwgMTIxMSwgMCwgMCwgMCwgMTE4ODMyLCAxMjMxOCwgMCwgCisgICAgMCwgNjgwMDUsIDEwNjIyLCA5ODM3NzksIDAsIDc4NjU0LCA2NTY2LCA3ODY1OSwgMCwgNzM3ODAsIDExOTE5NiwgNjQ4NjQsIAorICAgIDAsIDc4NjYwLCAwLCA4Mjg0LCAxMzA4MSwgMCwgMzU4OSwgNDIwNTEsIDQwMzUsIDY0OTIsIDkyMjM2LCA0MjY1LCA2NjQyLCAKKyAgICAzOTc3LCA3NDE4NiwgNDE3NzgsIDgzNiwgMTE5MjE2LCAyNDg4LCAwLCA0NTgyLCAwLCAwLCA0MTc3NywgMTI5MjYsIAorICAgIDk4MzM3NywgNzUyOCwgMTA1NTAsIDAsIDkyNzA2LCAwLCAxMDk2MSwgMCwgMTM3NCwgNjQ4NzgsIDExOTAxNCwgMCwgCisgICAgNDIzODksIDQxMzc0LCAyMjg2LCAwLCA3ODQ5MiwgNDEzNzcsIDEyNzkwOSwgMCwgNDAwLCAxMjU5NywgMTIwNTg2LCAwLCAwLCAKKyAgICA2NjYxLCA5ODMxNDUsIDY0ODI3LCAwLCA3MzgxNywgMzkwLCAwLCA3MTMwMSwgOTgzODYyLCAzNDczLCA3NzE4LCAwLCAwLCAKKyAgICAwLCA1NTI4NSwgMCwgMCwgMCwgMTE5NjksIDk4MzM5MCwgMTI3ODQxLCA2MzY1LCAxODg3LCA2NzYzLCA5ODMzNzAsIDgwODAsIAorICAgIDcwMDYsIDAsIDk4MzM3MSwgNjc1NywgNjQzNTEsIDE1NDQsIDAsIDY3NjYsIDY0Njc3LCAxMjA3MTYsIDk4MzM3MiwgNjE0NiwgCisgICAgMCwgNzcxLCA5ODMzNzMsIDAsIDEyODEyLCAxMzE2OCwgNDIyNzIsIDEyMjAwLCA5MTc5MjcsIDc5MDQsIDAsIDk1MywgCisgICAgMTI5MTcsIDExOTU2MCwgMTIzMDAsIDAsIDExNDkxLCA5NzI0LCAxMDM0MSwgOTgzNzczLCA5NTI0LCA3NDkwLCAxMTM4OSwgCisgICAgNzQ4OSwgMzM3OSwgMCwgNzQ4NywgMCwgNDcxLCA3NDg0LCA3NDgyLCA2NzUzLCA3NDgwLCA1NzY0LCA3NDc4LCA3NDc3LCAKKyAgICA2NTAxLCA3NDc1LCA2OTE4LCA3NDczLCA3NDcyLCAyNDc0LCA3NDcwLCA3NDY4LCAxMDIzMiwgMTA2MTUsIDEwMjEzLCAKKyAgICAxMjcyODgsIDkyMzU3LCAxMDA0OSwgMTE4MzQsIDM1NDQsIDAsIDYwMTcsIDY1MzExLCAxMjc0ODEsIDEyMDIxNiwgMTMzMDYsIAorICAgIDEwNTMzLCA3ODcwLCA3Mzk0OSwgNzYyNSwgMCwgMTIwNTQ0LCAwLCAwLCA5MjY2MCwgMCwgMCwgMCwgMTk5NjEsIDI0NzIsIAorICAgIDQyNjY1LCA5MjM0MSwgMCwgMjEzOSwgNDI1NiwgMTIwNzc2LCA3NDM4MCwgMCwgNDI2NzUsIDQyNjU4LCAxMjg0NSwgMCwgMCwgCisgICAgNjUxMzgsIDExOTM1NSwgNjc4NjIsIDAsIDY1NjcxLCA3MDgzLCAxMjAwMDgsIDgwNjYsIDc2NzgsIDc0ODY1LCAwLCAwLCAwLCAKKyAgICAwLCA3MTg2LCAwLCAxMjA1NTUsIDAsIDQ0NSwgMTIwNTY2LCAxMjgzMDgsIDAsIDAsIDgzMzAsIDAsIDAsIDQyNzk3LCAKKyAgICA5ODMxNTAsIDEyMDIxNSwgMCwgMzkwMiwgMCwgMTc3MCwgMCwgMTI4ODY2LCAxNTYwLCAxMjAyMDksIDE5NDk3MiwgNDU4NCwgCisgICAgNzM4NDMsIDAsIDExNzEyLCAxMDg2NiwgMTE4OTI4LCAxMTE4LCA3MTMzNCwgMCwgMCwgMTA4MSwgNzQzNiwgNjg0MjAsIAorICAgIDcyNTIsIDAsIDU5OTYsIDY5OTIxLCA0OTAzLCAwLCA0MTM4NiwgNTE2MiwgMTE5MTg5LCAxMzMwLCAwLCA3MTM5LCAwLCAKKyAgICAxMjA0NywgNDEzODQsIDAsIDAsIDE4NDgsIDQzMzQsIDYzMjQsIDQxOTc1LCA2NDc3NywgMTA2NzQsIDEyMzA4LCAxMjE4NiwgCisgICAgMCwgMCwgOTgzNzQxLCAxMjcxNSwgNjgwMDIsIDk4MzQ3OSwgMTI2NjMwLCAyMDE4LCA2NjY3MiwgNDE5NzksIDY2Njg1LCAKKyAgICAxMTkxNTcsIDY4MDAwLCA5MjQ2NCwgMCwgMTI2OTg0LCA2ODAwMSwgOTMzNCwgOTI3MDUsIDkyMzE1LCA3MDEwMSwgNzk3NSwgCisgICAgMCwgNzc5NTcsIDAsIDY2NjIxLCA0ODg0LCA2NjU5NywgNjk3MzIsIDAsIDAsIDYzMTMsIDY1NTEzLCA2OTg1NywgMCwgMCwgCisgICAgMCwgMjM0NSwgNDM2OTcsIDQ2MywgMCwgMCwgMTE5NjA3LCAzMTE3LCA1NDYwLCAwLCAwLCA5ODMzODcsIDAsIDQyMjc5LCAKKyAgICAxOTQ1NzcsIDAsIDc4NDE1LCAwLCAxOTUwMDgsIDk4MzM4NCwgMTMyNDgsIDAsIDAsIDAsIDAsIDAsIDAsIDU2NjMsIDAsIDAsIAorICAgIDAsIDAsIDI0ODIsIDE0NzEsIDAsIDAsIDQyMjQ3LCAxMjM3OCwgNzM5MjUsIDY5NjY0LCAwLCAxMjM3NCwgMCwgMCwgMCwgCisgICAgOTgzNjk0LCAyNDYwLCAwLCAxMTk0NCwgMTIzNzYsIDEyNzg2OCwgNjQ2NzksIDAsIDEyMzgwLCAxMDU1NywgNjQ0NzMsIAorICAgIDU4NzAsIDAsIDIwMjQsIDEyNzE4MCwgMCwgMCwgNTM5LCAwLCAxMjc3NjUsIDk0MDUyLCAzODUzLCA2NTE4MCwgMTI3OTIzLCAKKyAgICAxMjA3OTYsIDEyMDI0NSwgOTIzMjQsIDAsIDg2NTksIDAsIDEyNDc0LCA5MjU3OSwgOTUwMywgMTk0OTY5LCAyNDc4LCAwLCAKKyAgICA0MTYyLCAwLCA0MjYwLCAxMjk1MywgNjk2MzMsIDEyMDA4OSwgMTI0NzAsIDAsIDc0MTg5LCAyNzQyLCAxMjQ3NiwgMTE3OTgsIAorICAgIDEwOTQ2LCAxMjczMTAsIDUwMDAsIDAsIDk4MzU3OSwgMCwgNjk2NzIsIDgyMTMsIDc0MDE3LCA3NzcxLCA2MTYxLCA2ODAxOCwgCisgICAgNjcwOSwgMCwgNzg4ODUsIDk4MzcwOCwgMTI3OTcxLCAxMjA1ODIsIDc4NTQ3LCAwLCAxMDMwMSwgMTAzMzMsIDEwMzk3LCAwLCAKKyAgICAwLCA3Mzc5MSwgMCwgMCwgMCwgMCwgMTE5MTIzLCA0MDE0LCAxMjg0MiwgNzM5NTIsIDEyMDE1LCAxMjcyOTAsIDgyNzUsIAorICAgIDM4OTMsIDk4MzI2NCwgMCwgMTIyMTAsIDcyMjEsIDQyMTQ3LCAwLCA3NDU1MCwgNzQ0NjUsIDY0NzQ3LCAxMTg4NDEsIDAsIAorICAgIDEyNTE2LCA0NDQ0LCAwLCA5MjI3MSwgNzQ1MzcsIDEwODkyLCA4MjMxLCAwLCA2NDczLCA0MTk2OCwgNzgzODgsIDQxOTczLCAKKyAgICAzNTkxLCA0MTk2OSwgMCwgMjQ1MywgMTI4NTQ5LCA5MjY2NiwgNjQ3MDUsIDAsIDAsIDEwMzQ5LCAxMDQxMywgNDM1OTEsIAorICAgIDQxOTYyLCAzMjAyLCA3NDM1MywgMCwgODMxNiwgMCwgMCwgOTQwNjAsIDY4NywgMCwgMCwgMCwgMTg0MCwgMCwgNjg2NzEsIAorICAgIDExOTgwOSwgNDg4MywgMjg1LCA0NzIzLCA3MDA5OSwgOTI2OTIsIDQ0NTksIDc0NTc3LCA0MjkyMSwgNDE3MjAsIDExMDg5LCAKKyAgICAyNDAsIDE5OTA2LCAwLCA0MjMyMywgMCwgOTc0MywgMTIwMjMyLCAxMzEzNCwgMTI2NTM1LCAwLCAwLCAwLCAwLCA0MjYzNCwgCisgICAgOTgzMzQzLCA0MzQzNywgMzA4MSwgMTE0NjMsIDEyMDE1NCwgMCwgMCwgMTA0NDUsIDAsIDAsIDY2NzE3LCAyNjE0LCA5MTI1LCAKKyAgICAxMTkwMjMsIDE3MjksIDAsIDEyMDIzNiwgNjUyMjEsIDYzODgzLCA0MzMzNCwgNjQ4NTIsIDAsIDY1MTk0LCA2NjIwMSwgMCwgCisgICAgNjY1NzgsIDUwMDEsIDQxODc5LCA3NDQyNywgNDEyMSwgNTAwMywgODg0LCA2NjcwMCwgNjM4NzksIDQ5NDMsIDUxNTAsIAorICAgIDczODg5LCA3NDE4MiwgMTI3OTE1LCA2NDMsIDMwODYsIDAsIDQyNDQ4LCA0MjI5OSwgNTgsIDAsIDkxNzk1MiwgMTIwMDgzLCAKKyAgICA2Mzg3MywgODQ5MSwgMCwgMCwgOTgzNjIzLCA0NTMwLCA0MjQwOSwgNzEyNiwgMTk0NTc1LCAyNzIxLCAxMjAwNzQsIAorICAgIDExOTA5NiwgMTk5MjksIDAsIDE5NDU3NCwgMCwgNDI0MiwgNDI2NCwgMTIwMDc3LCAxMjA1MzAsIDY2MTc5LCA0MjQxMiwgCisgICAgNjU5NDEsIDEzMTE0LCA2NDUyMiwgMTA3NDAsIDMwOTQsIDAsIDk3NTQsIDExOTEwMiwgNDQzNywgNzM5NDgsIDEyNzA3NCwgCisgICAgOTgzMjM4LCA1NTI4MCwgNDIxNzQsIDE5NDkyNSwgNDI0MzAsIDAsIDAsIDQyMzU1LCA2NjAyNiwgNDMwNiwgNDEzODAsIAorICAgIDY4NDMyLCA5MjU4NiwgMCwgNjY2NjcsIDEyNzMwOSwgMCwgMTI2NTIxLCA0MjIwMCwgNDI1NjYsIDAsIDAsIDUwODgsIAorICAgIDY5NDgsIDAsIDg1MjQsIDAsIDAsIDEyMzg1LCAwLCAwLCA2OTY0NiwgMTM4NiwgNjQ1ODAsIDExNDgwLCA2MTE2LCA2NTAzOSwgCisgICAgNjUwMzgsIDEyMzkyLCA2NTAzNiwgODA2NCwgMCwgMTIxMDEsIDU4MjIsIDExOTAwNCwgMjA4MCwgNzEwLCA3Nzk5OSwgCisgICAgMTE2NjMsIDE2NjYsIDQyMDkxLCAxMTk2NTcsIDEyMzgzLCA0MzY3MSwgNDIwOTIsIDY4NDE4LCA0Mjg5LCAwLCA2Mzg5NiwgCisgICAgMTIwNjEsIDQyMDk2LCA0MzYyMSwgMzM2MiwgMTIzNzcsIDk4MzgzMiwgOTgzODM0LCA2ODQ0OSwgNzQ2MSwgNzM5MDEsIAorICAgIDEyNDQsIDMzMSwgNzM3ODYsIDEyNjgzLCAxMDY2MiwgMCwgODExMiwgMCwgNjU4NTIsIDAsIDEyMzc5LCAxOTQ4NzcsIAorICAgIDEyMDgxOCwgNDE5NjQsIDQyMjA4LCA2Mzg0MywgMjA4NCwgNDE5NjUsIDAsIDY1ODY2LCA0MzI3LCAwLCA2Mzg0MCwgCisgICAgNzg1NDksIDQxMjIwLCAxMzAzMiwgMCwgNTg0LCAxMjkzMywgNDMxNzcsIDEyMzczLCA2OTg1NSwgMTMwMDAsIDEzNTEsIAorICAgIDI5MzUsIDg2OTgsIDEyNjY1LCAwLCAxOTMwLCAwLCA3ODIyOSwgMTI0MjcsIDY2NTE0LCA2OTg1OSwgMTMwMzEsIDAsIAorICAgIDYzOTAxLCAwLCAzNjU3LCAxMjg1NzIsIDY1MjAyLCA2MDAwLCAxMTkyMDYsIDEyNDI2LCAxMjcxODEsIDAsIDQxNzQwLCAKKyAgICAxMjQyOCwgNDEyODMsIDQxOTE2LCAxMTkyMTAsIDAsIDAsIDEyNDI5LCA2NzI3LCAwLCA3NTYyLCAwLCA1MTcwLCAwLCAKKyAgICA0MTc1NSwgNjc2LCAwLCA2NjcwNCwgNjY2NjQsIDk5NzgsIDY2NDkxLCAzNTM2LCAwLCA5NzUyLCA5MjM5NywgNjE2MiwgMCwgCisgICAgNjkyMjgsIDEwMTEzLCA0MTgyOSwgNjU4ODYsIDUxNTksIDEyNDIyLCA0MTgzMiwgNDM5LCA0MzA3NywgMCwgNDIyMDcsIAorICAgIDc0NTQ5LCAxMTc5NiwgNDA5NzAsIDQxODMwLCAwLCA5MTc3OTksIDgzMDgsIDkxNzc5NywgOTE3Nzk2LCAwLCA2Nzg2NCwgCisgICAgOTE3ODAxLCA5MTc4MDAsIDEyMzM2LCA0MTM1LCA2OTgwNSwgMzQxLCAyNzI3LCA0MTI5LCAzNTM5LCAwLCA2Mzg2MSwgMCwgCisgICAgNzkxMywgMCwgNjM4NTksIDQxMzEsIDYzODY4LCAwLCA2Mzg2NywgNDEzMywgMTEzNzEsIDIxMCwgNDYwMCwgMCwgNzQ1NjAsIAorICAgIDQxMzcsIDgwODIsIDc4NTA2LCAxMTkwNjIsIDc4NTA0LCA2NzA0LCA0NTkxLCAxMjgwMjksIDAsIDAsIDk2ODAsIDAsIAorICAgIDEyMDYyMywgNTYxLCAxMjE1OSwgMTk1LCA3ODUwOCwgNDE1MDEsIDAsIDQyMDMxLCA1NzE5LCA3MTcyLCA0MjY4NywgODM2OCwgCisgICAgMCwgNDE0OTksIDAsIDAsIDQyMjQyLCA0MTQ5OCwgOTE3Nzk0LCA0MjAyNSwgNzg1NjUsIDY1ODA1LCA0MjQ2MywgMCwgCisgICAgMjkyNCwgMCwgMTIwNTEwLCAwLCAwLCAxMTkyMTMsIDczOTQxLCAwLCA0MjMzMCwgOTE3Nzg0LCAzOTY5LCAwLCAwLCA3MTY5LCAKKyAgICAxOTkyLCA5NjUyLCA3Mzk3NywgNzI0NiwgNDIwODYsIDEyNjYxNSwgMjIxOSwgMCwgMCwgMTI4ODAxLCAxOTQ4MzcsIDAsIAorICAgIDMyNywgMCwgOTA0MiwgOTE3Nzc3LCA5MTc3NzYsIDY1MTQ4LCAxMjQzMywgOTE3NzgxLCAxMjcyNzYsIDkxNzc3OSwgCisgICAgMTI0MzEsIDg2NjgsIDEyNDM0LCA5ODM4MzUsIDkxNzc4MiwgNTk5OSwgMCwgNzcxMiwgMTI0MzIsIDEyODI0MywgNDM2NTMsIAorICAgIDE3MjYsIDEwMTUsIDAsIDgyMTIsIDAsIDEyODAxNCwgNDI0MjMsIDExOTA2NiwgMCwgMTI4MTA4LCA2NjcwOSwgMCwgODgxMSwgCisgICAgOTI3LCAwLCAwLCAxMjQzNiwgOTgzMjQ1LCA0MjAyMSwgMCwgMCwgMTI5OSwgMTIyNDAsIDQyMzUwLCA2NTE0MywgMCwgCisgICAgMTk1MDE2LCAwLCA3ODE5NywgMTEzNDgsIDAsIDc4MDM3LCA5MTk0LCA5ODMxODQsIDAsIDE5OTE0LCAxMjE3OSwgOTgzODEyLCAKKyAgICAyMjk2LCAxOTQ5MjMsIDYzODM2LCA2MzgzMiwgOTE3NzczLCAxMDk2NywgNjM4MTYsIDI1OTQsIDM0NDQsIDYzODE3LCAKKyAgICA2NDY1MSwgMCwgNDE1MDMsIDEyNzQ3OCwgMTEyNjUsIDAsIDEyMDc1NiwgMTk0OTIyLCAwLCA1NjY0LCAzOTcyLCAwLCAwLCAKKyAgICAwLCAxMjg1MDgsIDEyNDE2LCA5MTc3NjQsIDExOTYwOCwgMTA4MTYsIDkxNzc2OSwgOTE3NzY4LCAxMjQxOCwgNzQxMTEsIAorICAgIDM4ODIsIDg1MzIsIDkxNzc3MSwgMTU3MywgMTI4NjQ4LCAxMTk4NDcsIDQ1OTYsIDY2MzM5LCAxMjQxNywgNjYwMDEsIAorICAgIDY1MzQzLCAxMjY0OTEsIDEyNDE0LCA4Mjg3LCA2ODIxOSwgMTk1MDE3LCA2ODEwOCwgMTE0MywgMTE5MTY5LCAxMTk4NDYsIAorICAgIDEyNDE1LCA2NjI2LCA0Mjc2MywgMCwgMTE4ODg0LCA5MDIxLCAxMjA3ODMsIDAsIDExNzI0LCAwLCAwLCAxMjcxMDQsIAorICAgIDEyNjYxOSwgMCwgMCwgODAyNywgMTA5OTcsIDkxNzEsIDEyNzQxLCAxMTQwMCwgNzEzMDUsIDE5NDc5OSwgMCwgMTI4MjM5LCAKKyAgICAwLCAxMjg4ODEsIDExOTYwNCwgMTI3NTIzLCAxMjAxOTAsIDE5NDc3MywgNjc2MDgsIDEyODIxNCwgNDIzNjgsIDAsIDc3MTUsIAorICAgIDM4ODEsIDQxNDg3LCAxMjExOCwgNDI1MTQsIDY4NjUxLCAwLCA5ODM4OTUsIDMwMDksIDQxNDc2LCA0MTQ4OSwgNjk4MjUsIAorICAgIDMwMDcsIDE0NDgsIDMwMTgsIDE5NDgwOSwgMzg4OSwgODUyMSwgNTA4MywgNTA4MiwgMTE5ODU5LCAxMjAxODQsIDg1MTksIAorICAgIDk4MzI0MSwgMzAxNCwgNTA4MSwgNjU4NTMsIDEyMDcxNSwgMCwgNjgwMTQsIDY5OTUxLCA1MDc5LCA2NDgwMiwgNDIyMTAsIAorICAgIDQ1OTcsIDY1NTMyLCAxMTgyOCwgMTIwMTg1LCAxMjM3MSwgMCwgODQwNywgMCwgMTA4MDUsIDg1MTgsIDEwNzc5LCAKKyAgICAxMjAxODgsIDcxMzAzLCA5ODM5MzMsIDEyMzY3LCA0MjE3MCwgMCwgOTI1NTcsIDYyOSwgMTkyNCwgMCwgMTIwMzcsIAorICAgIDc0MzY2LCA1OTg3LCA4NDYyLCA4MDA1LCAxMjM2NSwgNjM5MzMsIDY5NzM1LCAxMjA4MTUsIDEyMzY5LCAxMDY0OSwgCisgICAgNjc5ODEsIDUwNzcsIDEyMDE3NCwgMTA4ODAsIDYzOTI3LCA1MDc1LCA5MTc4ODEsIDAsIDY1MDc1LCAwLCAxMTAwNywgCisgICAgOTgzNzA1LCA2NjY1OSwgOTI2MDcsIDAsIDY2Njg0LCAwLCAzNDM0LCA0OTU0LCAxOTA0LCAwLCA1MjY2LCAxMjY5ODAsIAorICAgIDUyNzIsIDEwNDk5LCA0NTA3LCA5NTc4LCA2MzkyMywgMTIwMTc3LCA3OTc5LCAwLCA5ODMxLCAwLCAxOTQ5MjYsIDQ2MSwgCisgICAgOTgwMywgMCwgNDUwNCwgMTUwNSwgMCwgNjMyNSwgNTI3NiwgNDMwMjEsIDEyMDQ4OCwgMCwgNTUyMzYsIDAsIDY2NDYxLCAKKyAgICA1MTc3LCA0MTMyNCwgMTIwNTUsIDg3MjIsIDAsIDQxMzI3LCAwLCA2NjY5NSwgNDExNCwgNDA5LCA0MzgzLCA4OTAwLCAKKyAgICA4OTQ4LCA0MTMyNSwgMCwgNzIxLCAxMDE4MiwgOTEwOCwgNzEzMTEsIDAsIDExOTE4NSwgNDIyMjksIDE5NDkxMiwgMCwgCisgICAgNTk5OCwgMCwgNDIzNTMsIDc0ODI1LCAwLCAxMjU4NywgOTQxMDQsIDc4NTcxLCAwLCA3MTMyOCwgMTk0NTYyLCA0MTU3NiwgCisgICAgNDIyMTUsIDc4NTcwLCAxMTkyMDcsIDAsIDg1NzgsIDU5OTUsIDc1NzMsIDQxNTc1LCA3NDc4OSwgNzQ3NTIsIDYzOTQ0LCAKKyAgICA2Mzk0OSwgNjQ3NjcsIDI2NzAsIDQxNjcsIDE5NDc5NiwgMTE3MjMsIDAsIDc0MTIwLCAwLCA2NTA3NiwgOTM4LCA0MzQxNCwgCisgICAgNzM4NTQsIDExNzM3LCA5NzIxLCAwLCAwLCAwLCAxMTc0MiwgMjQxOSwgMCwgMTE0OTMsIDEyMzM0LCAxOTQ5MTMsIDQxNTMsIAorICAgIDEyMzAyLCAxMDc5MywgNTI1MCwgMTI0MDcsIDExOTc4LCA0NDA0LCA5MTg5LCAxMjQwMSwgNDIwMDcsIDU3NzUsIDY3NTksIAorICAgIDY1ODA2LCA0Mzk5NywgMCwgNDIwMDIsIDEyNDA0LCA5ODM1NTMsIDAsIDQ5NDAsIDEyNDEwLCA3NjgzLCAxMTY3LCA3MzcyOSwgCisgICAgNDk4MywgMTIwNTA3LCA4NjEsIDAsIDAsIDAsIDAsIDQzNzU3LCA0MzM3MCwgMCwgMCwgMTE5NTYsIDAsIDAsIDAsIDk2MTYsIAorICAgIDY2MzEsIDAsIDEyODE2LCA0Mzc1OSwgNDIyMTgsIDEyNzEwLCA2ODY3NCwgMTI3MjEsIDQxMDEsIDY2MTg1LCAwLCA1OTkyLCAKKyAgICA3NjE2LCAxOTUwNDQsIDAsIDEyNTc3LCAwLCA5ODM4ODQsIDg1MywgNDI2OTMsIDE5NTAxNCwgMCwgOTgzNjQ3LCA1MDE2LCAKKyAgICA0MzUzNSwgNjM4OTMsIDQyODM1LCA5NDkxLCA5MTc5MTMsIDAsIDkxNzkxNCwgMCwgMTI3MTIsIDcxMDUsIDEyNzgwNywgCisgICAgNjUwNjAsIDEyMDc5NywgOTkwMCwgNzc1MCwgMCwgMTk0OTE5LCAwLCAxMjc4MzAsIDAsIDY0Nzc4LCAxMjU4NSwgMTA1NjUsIAorICAgIDEyODE1MSwgMTIxNzcsIDAsIDAsIDAsIDc3ODI0LCAwLCA0OTAwLCAxMjc4NzQsIDEyODc4LCA5MjYzMCwgODk4NCwgNDExOSwgCisgICAgNzQ3NjgsIDg5NzEsIDc4NTkzLCA0MzExMywgOTcwMiwgNzg1OTQsIDExMDI1LCA5MjQ1LCAxMzA0OCwgNDkyNywgNDEzOCwgCisgICAgNzQxODUsIDkyNDgxLCA5MjcxMCwgMTIzOTcsIDc3ODI3LCAwLCAxMzA1NCwgMTIzOTQsIDAsIDAsIDAsIDEzMDUzLCAwLCAKKyAgICAzOTQ4LCAxMDc4MSwgMTU0NiwgMCwgNTAxMCwgMTY4MCwgMTA1MDcsIDc4NTkwLCA3ODU4MywgMCwgMCwgMCwgMTk0OTE1LCAKKyAgICA3MjY3LCAwLCA3NDgzMywgMTI4MTgxLCA1OTkzLCAyODE5LCAwLCAxMjcwNiwgNzc4NDAsIDE4OTMsIDcyNjYsIDYzOTE1LCAKKyAgICA3MjY0LCA3MjY1LCAwLCAxMzYzLCAwLCA2Mzk5NywgNjM5MTAsIDYzOTk2LCAzMDc3LCAwLCAwLCAxNTEyLCA2OTkyOSwgCisgICAgMTI1ODksIDQxNDc5LCAxMjgzMTMsIDAsIDQzMzM5LCA3Mzc3NiwgOTgzNiwgMTIwNzI3LCAwLCA0MTQ4MSwgNDMzMzUsIAorICAgIDc4MzIsIDQyMzQzLCAzMDkwLCA0MzMzNywgODE3LCAxNjY0LCAxODUwLCAxMjg4NDEsIDMwNzksIDExMzQwLCA0MjQwOCwgCisgICAgNDI0NDcsIDEyNzE0MCwgMTIwMDIwLCA0MjMwNywgMTIzODYsIDQyMzA0LCA5MTc1NTUsIDAsIDEyMzg5LCAwLCA5MjM2NiwgCisgICAgNDE5OTYsIDExNTI2LCA2Mzk4NSwgNTg2NCwgMTE0NywgNjM5OTIsIDQyODg3LCAxOTg3LCA5MjcxOCwgNTQ4MCwgNzg1OCwgCisgICAgMTE2NTMsIDQxMTYsIDEyMzkxLCA2NjE5MywgMCwgNDkzOSwgMTIzODQsIDAsIDAsIDQxNjg2LCA2MzkwNSwgMTE5NjAxLCAKKyAgICAxOTQ2ODgsIDk4MzE5MCwgMCwgMTI2NDksIDAsIDAsIDgyNDcsIDUwNywgOTEsIDIwNDIsIDEyMDc3NSwgNDM2NDMsIAorICAgIDE5NDY4OSwgNjYwMjgsIDEwMDM2LCA0MTg0NCwgMTE5ODEzLCA3NzQsIDExOTgyOSwgMCwgMTE5ODE1LCA1OTk0LCAxMjUzOSwgCisgICAgMCwgNzgzNzUsIDEyMDU5NywgMTE5ODMzLCA5ODMxMDUsIDExOTYwMCwgMCwgMCwgNzcxOSwgNjAyNiwgMjQ4NiwgMTI4MzEyLCAKKyAgICAxMTk4MDgsIDE2MiwgMCwgNjUyMTksIDQxMDczLCA5Njg3LCA0MTY4MSwgNjMwNCwgMTE5ODEyLCA2NjE5NiwgMTk0ODgxLCAKKyAgICA1MjYyLCAwLCA1NTIzMywgMTI2ODEsIDQyMzc5LCAwLCA3NTM0LCAxMjIxOSwgMCwgMTI3NTI4LCA0MjgxMCwgMTA0OTIsIDAsIAorICAgIDk4MzY2MSwgMCwgNDMxMTksIDAsIDEyMDc1MywgMTI0MDMsIDI1MDAsIDE5NTAxMywgMCwgNDg5OSwgMTI3MjksIDAsIDAsIAorICAgIDc0MTEzLCAyMzQzLCA0MTAzLCAxOTk0NiwgNzQxMTIsIDc3ODUxLCAxMzExMiwgMCwgMTk1MDEyLCAxMjg1OSwgNzAwODcsIAorICAgIDEyMDE0OCwgNjYzNjksIDU4NjEsIDEyNzc1OCwgMTE5OTksIDEyNDAwLCAwLCA5ODM4MzksIDEyNjQ1LCA1MTQ2LCAxMTMyMCwgCisgICAgNjg0MTAsIDY3NDgsIDY1MDQwLCAwLCA2NDE4NCwgMTI5NzQsIDY0MTgzLCA2NzYxMywgMTIwNjQ1LCA1MTQ3LCAwLCAwLCAKKyAgICA3NDUyNCwgMCwgMTkyOCwgMCwgNjc2NDksIDU5OTEsIDM0NDUsIDY3NjA5LCA0OTc2LCA2NDE3NiwgMCwgNjc2MTAsIDgyNDEsIAorICAgIDAsIDc3ODY4LCA0MjA2LCAwLCAwLCAwLCAxMjgyOTgsIDAsIDEwMTM4LCAwLCAwLCA4ODk3LCAxMjAyMzQsIDAsIDgzNTcsIAorICAgIDQxMjQsIDc3ODYyLCA2NTgzNiwgMTIwNjQxLCAxMjc5MjYsIDc3ODU5LCAwLCAwLCAxMTIzLCA5NjMsIDQxNTUzLCAxMDEyMCwgCisgICAgMTI0MDUsIDEyMDE1MCwgOTI2NjQsIDM5OCwgMTMyNzgsIDk3MjMsIDYzNjYsIDEyMDMxMSwgNzk0NSwgMCwgNDQwMiwgCisgICAgOTk3MCwgMTI0MDIsIDk4MzEzNiwgNDIzOTIsIDEzMDUsIDEyNDA4LCAwLCA0NDAwNywgMCwgMCwgNDE0NjQsIDEyNDExLCAKKyAgICAxMjk2OSwgMTIwODI0LCA0MTQ2NSwgOTgzNTY1LCA4NTI4LCAxNTc1LCAwLCA2Mzk1NSwgMTY1LCAzMDI0LCA0MTQ2NywgCisgICAgMTE5MTYzLCAwLCA5MDkzLCAwLCA5MTQ3LCAxMjg3ODcsIDYzOTU4LCAwLCA5MTQ4LCA5NjkyLCA0MDk2LCA1MywgODI5NiwgCisgICAgNjc1MCwgMTk1MDE4LCAwLCA5NTk0LCAwLCAwLCA0MzUyNywgMCwgNzI3LCAxOTQ3MDMsIDE5NTAyMywgNTgwNSwgMCwgCisgICAgNjcyNiwgMCwgNDIxNzYsIDEyMzcwLCAxMTY1NSwgMTE5MDk1LCAxMDU5MSwgMjI4MCwgMCwgMTIzNzIsIDEyMDY0MiwgCisgICAgMTIwMzA3LCAwLCA5MjM0MywgMCwgMTIzNjYsIDEwOTYzLCA2MDY2LCAxMzI5LCAwLCAzMDUyLCA5MjIwLCAwLCA2NDQ3OCwgCisgICAgMTk0NzAxLCAxMDgwMywgNDEzMiwgMTIwMzA2LCA2ODQ3NCwgOTI0NzMsIDAsIDk4MzMxMywgNzQ4MzcsIDEyMDE1NSwgCisgICAgMTQ5OSwgMCwgODA1NSwgNDI3NDAsIDYzOTY1LCAwLCA2Mzk2MiwgNzQwNDIsIDg5MjQsIDQzMTIzLCA1OTg4LCAzNjYwLCAKKyAgICA2Mzk2OSwgMTE3ODEsIDQyNzE4LCA4Nzg4LCAxMzU3LCA2NDg1MSwgNjU3NDMsIDAsIDg3NzQsIDAsIDEyNzA4NiwgOTk0MSwgCisgICAgMTIwMTcyLCAwLCAxOTMzLCA2OTY1NSwgOTU2NCwgMCwgOTI0MzUsIDczODY2LCAwLCAwLCAyNDg3LCA2NzYxNCwgMzEyMSwgCisgICAgMTgwNCwgMzMxMSwgNjc2MTUsIDcwMDgxLCA3ODMwMiwgMTIyMjAsIDY3NjE2LCAxMjA1OTgsIDEyNzQ3NSwgMCwgNjgyMDAsIAorICAgIDY2NzUsIDEyODE0NCwgMCwgNjc1OTIsIDEyMDY4NSwgMCwgNjQ3NzEsIDExOTgsIDkxMzIsIDAsIDY0NjE5LCA1MTAsIAorICAgIDY0NjYzLCAwLCAwLCA0NTYxLCAyMTAxLCAxMzk4LCAwLCA5MjU1NCwgNzQwMzQsIDQxNTY5LCA5MjY4NCwgMTE0MDYsIAorICAgIDgxNjcsIDEyMTI3LCAwLCA4NDAsIDAsIDEyNjUxOCwgNzEwMSwgNjk2NywgMCwgMTk0ODk4LCA5Nzk2LCAwLCAzMzMsIAorICAgIDY5ODkxLCAwLCA4MTQ0LCAyMTE3LCAwLCA5ODM1OTUsIDEyNDA2LCAwLCAxOTkzMSwgMTE5MDg5LCA2Njc4LCA3NzY5LCAwLCAKKyAgICAxMjYyMSwgMCwgMTI3MzY2LCAxMDIyNywgNDc2NCwgNDMxMDEsIDk5ODEsIDAsIDQwOTg2LCA0MTI3LCA2NjQ4NywgMCwgCisgICAgNDIyMDIsIDEyNzU0LCAxOTUwMjIsIDAsIDAsIDk0MDk3LCA2NzU5NCwgMjA0OCwgMTI5NDQsIDQwNTAsIDY3NTk1LCAKKyAgICA5MTc5NjcsIDQzMTAyLCAxMDU4MSwgMTI5ODUsIDQ1MzMsIDE5NTAyMSwgNzQwMDMsIDY0OTAsIDAsIDEyMDM4LCAwLCAwLCAKKyAgICAxMjA3MDQsIDY1NDYxLCA5Nzk4LCA2OTcwNCwgMCwgMTk0OCwgNjk4NDEsIDAsIDk1MiwgMTI4MjM1LCAwLCAwLCAxMjA4MDIsIAorICAgIDY0NDksIDk0OTQsIDEyMDMxMywgMCwgNDMwOTgsIDQ4NDMsIDgxNDIsIDY0MTYwLCA0MDk4LCA2NDE3MCwgMCwgMCwgMzQzNiwgCisgICAgMTE5OTczLCAwLCAxMjgxNywgNjc1OTcsIDY2NzYsIDM5MzAsIDQyNjE1LCAwLCAwLCA2NzU5OCwgMCwgMCwgMCwgNjU1OTEsIAorICAgIDQxNTgxLCA2NTkxNiwgMTQ1MywgMCwgMCwgMCwgODUwMCwgNDIyMjIsIDEyMDE0MiwgNzM3NDMsIDEyMDQwMCwgNDMxNywgCisgICAgMTE1NDMsIDY3Njc2LCA2NDY3NiwgMCwgMCwgNjc2MDYsIDExOTA4MywgMCwgNDIyMTcsIDEzMTAyLCAwLCA2NjAwMywgCisgICAgNjY3MiwgMCwgMCwgMCwgOTgzNzQ3LCA2Mzg0MSwgOTYxMywgOTAwMSwgNDUyNiwgMTEyNzQsIDY3NjAxLCA2NDUyMCwgCisgICAgNjQyMTAsIDY2NjQsIDc4NzA0LCA0MjA1NiwgMTAyMjgsIDY0OTU3LCAxMTI4MSwgMCwgMzgwNywgMTQ2OSwgNjY2NDAsIAorICAgIDY1MzgxLCA0MjE5NywgNDk4OCwgNDIzNzIsIDAsIDk1OTgsIDkwNCwgMzUyLCA0MjIyNSwgMTQ1MSwgODA2MSwgODQ1MywgCisgICAgNDEzNCwgMCwgNzQ4NDcsIDY2NTc2LCAxMjc5MTYsIDAsIDEwNTIwLCA4NTc1LCA5OTYwLCAxMjAxLCAxMjcyODksIDEyODQ2LCAKKyAgICAxMjcyOTEsIDEyNzI5MiwgMTE5MTksIDY0OTYyLCAxMjcyODcsIDQzNzM5LCAxMjcyODEsIDg1MTEsIDk0NjAsIDgyMywgCisgICAgMTE1ODcsIDEyMzA1LCAwLCA2NDY5NSwgMTI3MzA1LCAxMjM4NywgMTI1MywgMTMxODMsIDY1NzY2LCA1MDAsIDQyNzgzLCAKKyAgICA2NTc2NSwgNjQyMDgsIDY0MzY5LCA2NTc2MCwgNjU3NjEsIDExOTU4NSwgMTE2MDYsIDY0Nzg0LCAxMTcwMiwgNjY0OTgsIAorICAgIDk4MjEsIDY0MzA0LCAwLCA1MTUyLCAxMTA0OCwgNzUzMywgNjgzNjYsIDY0NDEwLCA5MjMwNSwgMCwgNDMyMywgMTIwMDYyLCAKKyAgICA5MjY2OSwgNzEzMzIsIDEyNzA1MiwgNDI1ODcsIDQyMjE0LCA0MTM5NCwgMCwgNDc2MywgNDExMiwgMTE4OTM1LCAwLCAKKyAgICA1MjYwLCA0MzE0MywgOTQwMzgsIDMyNiwgMTIwMTMxLCA2ODQyMywgMCwgMTA3NzEsIDI4NzYsIDc0MDc0LCA5MjUzMCwgCisgICAgMTk0OTI0LCA0MTM5OCwgNzM4MiwgOTgwMiwgMTI3MDc3LCAxMjcwNzYsIDQ1MywgNDEzOTYsIDEyMDUyNCwgNDI3MjAsIAorICAgIDEyMTQwLCA5NTcyLCAwLCA3MDAzLCAxOTQ4ODMsIDQyMzM0LCA3NzA0LCAxMjY0OTAsIDE5NDg4NSwgNDMxNDQsIDQxMjMsIAorICAgIDg0OTQsIDQzMTQ2LCA5OTc3LCAwLCAwLCA2NTc1OSwgMTA3NjUsIDY0MDYxLCA0NDY1LCA5ODA4LCA2NDA1NiwgNjU1ODIsIAorICAgIDQxMjYsIDAsIDk1MjEsIDk1ODksIDY0NzU1LCAwLCA2NDAyMCwgMTI2NjA0LCAxMDQ2NCwgMCwgMCwgMTk0ODY5LCA2NDUxNCwgCisgICAgMTE1MjgsIDY0MDI0LCAxMjgwNzIsIDY3OSwgNjQwMTMsIDAsIDU4NTAsIDc1OCwgNzUzNiwgMCwgOTIyMzQsIDQxNDQxLCAKKyAgICAxMDY5MywgNjQwMDYsIDk4MzU2NywgNjQwMDUsIDQwNTgsIDExOTAxOSwgMTI2NDg3LCA2NDY2MCwgMCwgMTE5MDUwLCAwLCAKKyAgICA5ODMwNjksIDExMzksIDQzMjk4LCA2NDAyNywgNjQwMjksIDg5NzAsIDAsIDk5MzQsIDk4MzA5NCwgMTA3NzQsIDEyODAyMCwgCisgICAgNDIyMDEsIDEyNDIxLCAxMjgyMTYsIDAsIDE4NTIsIDMwNTcsIDY0MDQ2LCA3Mzc0NCwgNjQwMzQsIDY0MDM5LCAwLCAwLCAwLCAKKyAgICAxOTQ4OTksIDkyMzIyLCA3NjQ1LCAxMjg1NCwgNzQzMzgsIDM0OTYsIDAsIDAsIDAsIDkxMDIsIDYyNywgMTI3Nzk1LCAKKyAgICA2MTU4LCA4MzI3LCA3NDU1MywgNjY2MzIsIDEyNDE5LCAxMzMwOSwgMTE1NzAsIDEyNzgxMSwgMTk5NjAsIDExNjk2LCAwLCAKKyAgICAxMDE4LCAxMTg5NzAsIDE5NDkwOSwgMTk0ODk3LCAxNjgyLCAxOTQ4OTYsIDE5NDkxMSwgNDI3NTYsIDY3NjUsIDE5NDkwNiwgCisgICAgMCwgMCwgNzM4MTQsIDExNDEyLCA2NzY4LCAxMDcyOCwgMTk0ODMwLCA3MTMxNiwgMTE4ODYzLCA0MzMxMSwgNjQ5NjYsIAorICAgIDExNTc3LCAwLCA0MzA0MCwgMTgzMywgMTE1NzYsIDAsIDc0Nzc5LCAwLCAxODUsIDY1MDg1LCA3NDUzMywgNjQ3NTQsIAorICAgIDE5NDg0OCwgNzUzNSwgODA4NSwgNDI1MjUsIDEyMDM4NywgOTc0OSwgNDE3MDEsIDYxMzEsIDE5NDksIDQxMTcsIDc4NDcsIAorICAgIDEyMDQ4OSwgMTk0NzExLCA2NDQ4MywgNjU2OTMsIDAsIDAsIDAsIDY5Njk1LCA0MjI0MCwgMCwgMTI2NjUxLCA0Mjg2NCwgCisgICAgMTI2NDk4LCA2NDY2NywgNDE4NjgsIDExODQsIDAsIDgxNSwgMTE0ODQsIDEyNzUzNSwgNjc4NDAsIDk4MzY1MSwgMCwgCisgICAgNjYxOTcsIDAsIDEwOTg2LCA2NDY4MywgOTgzNzg1LCAwLCAzNDU1LCAwLCAwLCA5ODc5LCAwLCAwLCA0MTU4LCAxMjgwNTAsIAorICAgIDY4MTY2LCAwLCAwLCAwLCAwLCA2OTY0NSwgMzMyLCAxMTg4MDgsIDAsIDUxNDIsIDI0MDcsIDY5NjQzLCA0MjE5OSwgMCwgCisgICAgOTI0MDQsIDc0MzczLCAwLCA1NTIxNywgMCwgNjM4NzAsIDQzMTYzLCAwLCAwLCA5MjM5MCwgNDI4NjcsIDE4MzQsIDAsIAorICAgIDkyNDYxLCA2OTgxNywgMTA5NDAsIDY1MjQ5LCAxMTkwNDAsIDg2NjIsIDAsIDAsIDI2NTIsIDEyMDUyNywgNzE2NCwgCisgICAgMTA3ODQsIDE5NTA5MywgNjc2NzQsIDAsIDkyMjMzLCA5MjQ4MiwgMTk0NzQ5LCA3NDU2MiwgOTE3NTA1LCAxODI4LCAKKyAgICA3NDQ3NCwgMTIwMzI3LCA3ODYyMCwgODUzMSwgMTI0OTksIDYyODAsIDEyMzI0LCAxMTg4NTQsIDY1MjM4LCA2ODM3NCwgCisgICAgNDgzMiwgNjU1NzMsIDAsIDYyNzksIDEyNTA4LCAxMjkwNCwgMTI1MDIsIDkxNjEsIDAsIDE2MjAsIDY0NDM2LCAzNjAxLCAKKyAgICAxOTUwOTQsIDEyODA3MywgOTgzNTYyLCA2MDksIDExNTU1LCA5ODMwOTksIDEyNDk2LCAxMjc4MzksIDc0MTgxLCA0MzQzLCAKKyAgICAxMjUwNSwgMCwgMTI3ODYzLCAwLCAxMTM3NywgMjM5LCAwLCA2MzcsIDAsIDAsIDQyNjcxLCAwLCAwLCAwLCA0MzU2NSwgCisgICAgNzEzMDYsIDEyNjQ5MywgMTI2OTYsIDEyODI1NiwgMCwgOTQwNjIsIDEyOTI5LCAwLCA3MTIsIDAsIDQxOTcsIDk4MzIwNiwgCisgICAgNDI4MTgsIDEyNjYzMiwgMCwgMTIwNDkwLCAwLCAxMTkxMzcsIDE1MDYsIDQzNTYyLCAwLCA5MjQ5MSwgMCwgMTI2NTEsIDAsIAorICAgIDY0NjI4LCA3NDUxNywgMTIwNTgsIDc0MDg0LCA5MTc4MzgsIDc0OTQsIDAsIDQ5MjQsIDY1NTkyLCAxMTg4NDQsIDAsIAorICAgIDEyNzA4OCwgMzU1LCA5NzE5LCAxMjcwODcsIDEzMDY2LCA2NDc5NiwgMCwgMCwgMTIwMzMsIDQyMTc4LCAwLCA2OTc2MCwgCisgICAgNDI1NzEsIDkyNjM1LCAwLCAwLCAwLCAwLCAwLCAxMjcxNzYsIDMxNzgsIDAsIDAsIDkyNzA0LCAwLCA5MDgwLCAxMjcwMDAsIAorICAgIDEyMDM1MiwgMCwgNjgyMDksIDAsIDExMDgyLCAwLCA1Njk5LCAxOTUxMDAsIDY2MDAwLCA5NDg4LCA2NTE2NiwgMTE5MTEyLCAKKyAgICAwLCAwLCAwLCAwLCA3MTMxMywgMCwgNTI2NSwgNjkyMzUsIDAsIDExNDg3LCA2Nzg1OCwgMTI0NjQsIDAsIDQzMDQ1LCAwLCAKKyAgICAwLCA0MzM0NSwgMCwgMTA3NzAsIDExODk5NCwgNjgwNywgNDY1LCA5ODI5LCAwLCA3NDM0OCwgMCwgNDMzNDYsIDgxMTYsIAorICAgIDc5NSwgMCwgMCwgMTI0NjIsIDEwOTMwLCAxMDgzMSwgMCwgMTE4OTUyLCA2NDM2MiwgNzQzMzQsIDk4MzYwMiwgMTIwODExLCAKKyAgICAwLCAxMjQ2OCwgODYwNywgMTAwOCwgMCwgMTAwOTIsIDE5NTA3OCwgOTE3ODQyLCA2Nzg1NSwgNTUyNTcsIDczNzcxLCAKKyAgICAxNzY2LCAxMTI4MiwgMTE5OTYsIDE4MjAsIDQ1NDcsIDAsIDAsIDAsIDAsIDEzMjIzLCAxMjg2NjUsIDY0NTk1LCAxMjcyOTQsIAorICAgIDAsIDkyMzExLCA0MzQ1LCAxMjYxNiwgMCwgMCwgMCwgNzQ0NjcsIDAsIDAsIDAsIDUzODIsIDAsIDAsIDAsIDExOTA2MCwgCisgICAgNjQ5NTMsIDU0MDYsIDE5OTIwLCA2OTg5NywgNjY1MTAsIDM1OTAsIDE5NDg2NCwgMTEzMCwgMCwgMCwgNDIwMTYsIDExODIzLCAKKyAgICA0MzAyMywgMCwgMTE4ODk2LCA3NzQyLCAwLCAxMzI4MCwgNzEzMjMsIDkzMjYsIDczODI2LCA1MzEwLCA3NDgxMiwgNzg1ODQsIAorICAgIDkyMjI5LCA4OTU5LCA0MzU4OSwgNjc0NywgNjY3MjMsIDAsIDg1NjgsIDAsIDEyMDQ5NiwgNzM4MTYsIDEyMDgwMywgCisgICAgOTgzODQ4LCA0MjY3MCwgMCwgMTE2MjEsIDEyNDYwLCAwLCAxMjA2MzEsIDAsIDQzMDYzLCA3NDUxOSwgMTI3MTgyLCAwLCAKKyAgICA3MzkxNywgNzg0MywgNjk3ODMsIDExNjg5LCA1NDEwLCA1NzgzLCAxMDQ2OCwgODQwMywgNTQwMCwgMTE1OTQsIDEyODI0NywgCisgICAgMCwgMTE4OTkwLCAxMDQ5MSwgNjk4NDIsIDY0NDEyLCAwLCAwLCA1NTg3LCA0Mjg2NSwgNjQ0MDQsIDgyNjgsIDQ5MjMsIAorICAgIDY1MDg2LCA4OTgxLCAxMjM4MiwgNDIxMzMsIDEyMDc1NSwgOTcwNiwgNjk3MzgsIDAsIDY2NjEwLCAxMDQ2MSwgMTIxMDMsIAorICAgIDAsIDg2NDIsIDAsIDQyNzY2LCA5ODM4NjYsIDIyMTAsIDk5ODMsIDAsIDk0MDA5LCAwLCAwLCAwLCA3Mzk4LCA0MTUxNSwgMCwgCisgICAgMTE4MDIsIDgwNDEsIDE0NjEsIDkxMCwgMTE5MTMzLCAwLCA2NzQ5LCAzNjU4LCA5Mzk2NCwgMTIwNTI1LCAwLCA3NjE3LCAKKyAgICAxOTQ4NDEsIDEyODg4LCAxMjc5ODMsIDY3NjY4LCAxMzE0MywgMCwgOTE5MywgMTEwOTcsIDU3MDMsIDAsIDQxNTE3LCAKKyAgICA0MTUwNCwgNDE1MTksIDEwMDE2LCA2NDMwNSwgMCwgNjU4NjQsIDYyMywgNzgxLCA2NzAsIDEwNjYwLCA1NzY5LCA2MTMsIAorICAgIDc1NDMsIDEyMDI3OSwgNDc3LCA0MTA4MywgOTI1MjEsIDAsIDU5MiwgMTU3OCwgMTI0NTksIDQzNDQ5LCAwLCAwLCA4MjI1LCAKKyAgICAwLCA2NTQsIDExMzQ1LCA2NTMsIDY1MiwgMCwgNjQ3LCAwLCA2MzMsIDEyMDc0NCwgMCwgMTI2NDcyLCAxMjQ4MCwgNDMyNDMsIAorICAgIDAsIDM5LCAxMjQ4NywgMCwgMTIwNTI5LCA3NDE5OSwgMTI0ODIsIDAsIDEyNDg5LCAwLCAzMTk1LCA1NTUwLCA5ODM1NTQsIAorICAgIDc4OTcsIDAsIDEyMDMsIDc0Mzk2LCAxODEzLCA2NDU0NCwgNDEzMTEsIDEyMDkwLCAwLCAyODc3LCAwLCAwLCAxNjc1LCAKKyAgICA2OTg0MCwgMCwgMCwgMCwgMTAwNzAsIDEwNTk1LCAwLCAxMTkwNzcsIDE5NDc3NywgOTgzNjExLCAwLCAwLCAwLCA0MzI0NCwgCisgICAgMCwgMCwgOTgzOTE2LCAxMTk1NjEsIDk4MzA3OCwgMCwgMTk0OTIxLCAxMjgxNjAsIDk5MzksIDAsIDk4MzE1MSwgNzc4NjAsIAorICAgIDAsIDAsIDI3MCwgMCwgMTA3MTQsIDAsIDAsIDAsIDAsIDAsIDY1MzcyLCAwLCA3NDAzOCwgMTE5NTU4LCA2MjczLCA2NjY3OSwgCisgICAgMzY0LCA5NTk1LCAxOTQ5MDgsIDAsIDAsIDcwNywgMCwgMCwgOTI4MiwgNjY0ODksIDIyNCwgMCwgNjg2NzAsIDkzMzIsIAorICAgIDQ5NjYsIDY4Njc3LCAwLCA2ODY0NCwgMCwgMzg0MSwgNjg2MzQsIDAsIDEwNzMyLCA2ODY0MCwgODUwLCA0OTcyLCAwLCAKKyAgICAxMjg5MCwgMjkwOSwgNjg2MTksIDQ0MDA4LCA2ODYyNywgOTgzNzE4LCAxMTU0NCwgMTAyMDMsIDk2MDgsIDAsIDAsIAorICAgIDExOTYyLCAxOTQ2OTQsIDEyNTA3LCAxMTk2LCAxMjg2ODcsIDEyODMxMSwgNzc3LCAxMjAxODcsIDQzNzUsIDY1MjcxLCAKKyAgICA2NzY3OCwgMCwgMTIxOTgsIDAsIDY0ODI0LCAxMTkzNDMsIDk4MzIzNiwgOTQ1NCwgNjM3NzgsIDg2NTgsIDQyNTI4LCAKKyAgICA3ODAwMCwgMjcwNSwgOTE3OTc1LCA0MTUyMCwgMCwgMCwgMTE5ODYsIDc3NjUsIDQyNTAyLCA4MjgwLCA3NDUyMCwgMjcwMSwgCisgICAgMCwgMTI3MDAyLCA1NzY3LCAwLCAwLCA5ODA5LCA4MzUzLCA2Mzc0NywgNjY3MDEsIDYzNzcyLCA5ODM4MTQsIDYzNzQ1LCAKKyAgICAxNzQ4LCA2Mzc3MCwgMCwgMCwgMCwgNjU1NDIsIDYzNzY2LCA1NTI0NCwgMzA2MSwgMCwgNjM3NjQsIDYzNzg3LCA5MDY3LCAKKyAgICA2MDk2LCAwLCA3Njk0LCAwLCA3MjU3LCA2Mzc2OCwgMzQ4NSwgMTI5ODcsIDAsIDEyNzUyMiwgMTIwNjI4LCA2MzgwNywgCisgICAgMTU5MSwgMCwgNjM4NiwgNjM3ODMsIDAsIDAsIDkyNTM1LCAwLCAwLCAwLCA3NDU3NSwgMCwgNjU3MTksIDEzMDgzLCAKKyAgICA2NDU3NCwgNjUwMTIsIDAsIDE2NDAsIDEyNDk1LCA2NjY5MSwgNzYyNCwgMzEzOCwgMTA5OTYsIDkyMjQ3LCAxOTIyLCAwLCAKKyAgICAxMjQ5OCwgMTA5ODcsIDY5OTM2LCA2OTkzOSwgMzg5NCwgNjU1NDMsIDAsIDE5NDg0MiwgOTgzNTg4LCA0OTMsIDAsIAorICAgIDQzMTk3LCAxNzE3LCA0MjI4LCA0NzksIDEwMzAzLCA3NDAyMCwgMCwgOTE3OTM1LCAxMDMzNSwgMzUyMCwgOTE3OTMyLCAKKyAgICAxMjQ5MCwgNjQzMTUsIDAsIDEyNzAzOSwgMTI0OTMsIDYyMzMsIDQyNjgxLCAxMDAyLCAxMjQ5MSwgMCwgNjQ5MTEsIAorICAgIDkyNjE1LCAyMDk2LCA2NTEyMCwgMCwgNzgyMTksIDk4MzA4MSwgODM3OCwgMTE2MzIsIDEyNzA0MSwgNjYyMTMsIDYzODY0LCAKKyAgICA2NjIyMSwgNjYyMjYsIDY2MjI5LCAxMzIxOCwgNjYyMzEsIDY2MjE2LCA4NTA3LCA2NjIzNiwgNjYyMTEsIDY2MjE4LCAKKyAgICA5MjY3MiwgNjYyNDAsIDc4MDQxLCA2NjIzMywgODkyOCwgOTgzNTUyLCA3OTA5LCA2NjIzNCwgMTE2MDUsIDYzNzU5LCAKKyAgICA5ODM2NTQsIDY2MjA4LCA3Mzk5OSwgNjM3OTksIDYzODAzLCAyNDQsIDExNTQyLCAxMjg5OCwgMTI0OTQsIDczNzYxLCAKKyAgICAxMjQ5MiwgMTI2NjksIDAsIDAsIDc0MTUzLCAwLCAxMjgyNzgsIDEyMDY4MCwgNDg4MiwgMTMwNDAsIDAsIDg2MTIsIDQ4ODUsIAorICAgIDc0MDUzLCAwLCAxMzA0MiwgNDg4MCwgNjQ2NjIsIDI0MjksIDEzNjAsIDI0OCwgMCwgNjM3OTcsIDkyMzk0LCA0MjM1OCwgMCwgCisgICAgNzI5MiwgMCwgNjM3NTYsIDQyNzg2LCA2NjY5MywgMCwgMTg3MCwgNzgwNDAsIDQ3MCwgNzgwMzgsIDc4MDM1LCA3ODAzNiwgCisgICAgNzAwMjgsIDc4MDM0LCA0NTc5LCAxMjgwOTAsIDAsIDEyNTExLCA3NDQ1MywgMTI1MTQsIDAsIDc0NTc5LCA3MjM5LCA3MDAxLCAKKyAgICA4NjIzLCA5NDAxMSwgMTI4MDUyLCAxMjgwNDgsIDczNzgsIDEyNTEyLCAxMTYxNSwgNjEwNCwgMCwgMCwgNjU5LCA2MDk4LCAKKyAgICAwLCAxMjIzNCwgMTI3MzA3LCAxMjcwNjcsIDgzMTEsIDEyNTEwLCA0MTgwMywgMTMwMzksIDEyNzA3MiwgMTI1MTMsIAorICAgIDEwMjAyLCAxMjQ3MSwgMCwgODc0NywgOTgzOTIwLCAwLCAwLCAyMzIzLCAwLCAyMzE5LCA3NzkxNywgMTI0NzcsIDc3OTE2LCAKKyAgICAyMzExLCAwLCA0NDE1LCAyMzcsIDYyODEsIDEyNzI4MCwgMCwgMCwgMjMwOSwgMTMxMiwgODE3MywgMTI4ODcxLCAxMjQ2OSwgCisgICAgMCwgNzg1MDUsIDY0MzM1LCAxMDYwOSwgMCwgMTI4MTExLCA5Mzk3LCAxMTUyNCwgOTM5NSwgOTM5NiwgOTM5MywgOTM5NCwgCisgICAgOTM5MSwgOTM5MiwgOTM4OSwgNjIwOSwgOTM4NywgOTM4OCwgNDkzMiwgOTM4NiwgOTM4MywgOTM4NCwgNjc0MCwgMCwgCisgICAgNjU0NTEsIDgxODUsIDAsIDkxNzgzMiwgNDMwMjQsIDQzMzM2LCA2NzY1OSwgMjMxMywgMTI4MTY3LCA3OTQ4LCA5MjM2LCAKKyAgICA5MjU3MSwgMCwgMCwgMTA1NzAsIDQzNDczLCA2Mjg5LCAxMDQ4NCwgMCwgMCwgMTE5OTgsIDEyMDgyLCAxMDkyNCwgMzE0NywgCisgICAgMCwgMTIwNjg0LCAxMjUyNCwgMTE5MDgxLCAyMzEwLCAxMTgxOCwgOTM4MSwgOTM4MiwgOTM3OSwgOTM4MCwgOTM3NywgCisgICAgOTM3OCwgOTM3NSwgOTM3NiwgMTY4MywgOTM3NCwgOTgzNzc4LCA5MzcyLCAxMjQ0NCwgMCwgMCwgMTMwMTYsIDgyMTAsIAorICAgIDk4Mzk1OCwgNDIwMjksIDExMDc5LCAxMjMzMSwgNDM0NTEsIDQyMDMyLCA4NzQ0LCA3MjYsIDAsIDk4MzgzNywgNDE1NSwgMCwgCisgICAgMCwgNDIwMzAsIDUwMDcsIDEyNTIyLCA0MzA4OCwgMCwgNDk1MSwgMTI3ODA1LCAxMjcyNDAsIDAsIDk5MjIsIDQzMzA5LCAKKyAgICA5ODM4NDEsIDEyNTI1LCA5ODM0NzEsIDEyMDE2LCA2NTc3MCwgOTU0OCwgNjc2NjUsIDQwMywgNzgyMzAsIDEyNTAzLCAwLCAKKyAgICAwLCAxMTAzMCwgMCwgOTI1NjcsIDY1NjkxLCA2Mzk5OCwgMTgxOSwgMTA0OTYsIDAsIDAsIDExOTkyMCwgMCwgMTk0NjY4LCAKKyAgICAwLCAxMjUwNiwgMCwgMTIyMzEsIDAsIDEyNTAwLCA0NDAyMywgMTI1MDksIDY0MzkzLCA3ODgzMCwgMzM4OSwgMTA1ODksIAorICAgIDY2MDgsIDQxMDQ3LCAxMjAzMjEsIDc4Mzk1LCA3ODM5NCwgNzQwNjksIDc3OTk1LCA3ODM5MSwgMzYwOCwgODI4MSwgCisgICAgMTIwMzIwLCAxMTA3LCAwLCA5MDc2LCA4ODYyLCA2OTc0MywgNDEwNTIsIDEzMDg0LCA2NDc2NiwgNDMyMTcsIDc4MDMsIAorICAgIDEzMjIyLCA3NDE2NSwgNzQ3ODIsIDEyNjUxNCwgODU0NiwgMTE1NTMsIDYzOTk1LCAxMzE3NywgOTA0MywgNjMwMywgCisgICAgOTgzOTQ3LCA0OTgsIDY0NDcxLCAxMjAzMjQsIDEyODU2NywgMTI1MjksIDgwNDIsIDAsIDIzNDQsIDEyNTI4LCA4MDMxLCAKKyAgICAyNDE0LCAwLCA2OTcxOSwgMzIzMSwgMCwgNjQyMiwgNjY1MTIsIDY5NjUzLCAxMjUzMCwgMjUzNywgNzg0MDUsIDQxNDI5LCAKKyAgICAxMjY1OCwgMTMwMzYsIDY1NzcyLCAwLCA3ODczOCwgNDE0MzMsIDQ3MTksIDQ2OSwgMCwgNDM2MywgMzMxMywgNDE0MjgsIAorICAgIDc4NDA3LCAyMDIzLCAxNzcyLCA3ODIyNCwgNzgyMjUsIDY1NzA2LCAxMDA1MSwgNjQ4MTIsIDc4MjIwLCAwLCA5OTIwLCAKKyAgICAxMjIxNSwgMCwgNDkzMSwgMTk1MSwgMTI0OTcsIDExOTM2MywgOTYwNywgMCwgOTY2MywgOTgzMjI4LCAxMTk2MzQsIDY1MDMsIAorICAgIDQxMTEwLCAwLCAxNDkxLCAwLCAwLCAxMjczMDQsIDQxMDYxLCAwLCAxOTQ4MzgsIDEyNzE4NywgNjUwMjYsIDQxOTkzLCAKKyAgICA0MTUwOSwgMTEwNDUsIDY1MDI4LCA3ODYwMiwgNjY0NzYsIDQxMTA4LCA5NzM4LCA0MTk5NSwgMTA3NSwgMTk1OCwgMTI1MzUsIAorICAgIDQxOTkyLCA0MTUwNiwgMCwgNDE2ODcsIDAsIDEyMDcxNywgMTI3Nzc2LCA5OTQwLCAxMjcyOTksIDc2OTIsIDk4MzgzMywgCisgICAgODAwOCwgNDExMzEsIDMzMCwgODU2NiwgNjUwODMsIDQxMTMzLCA5ODE2LCAxMjY1MTcsIDEyNTMyLCA3ODU1MCwgNzg1NDYsIAorICAgIDM1MDgsIDEyNzA1OCwgNDMyMzUsIDAsIDEyNzI5OCwgNjQxMzksIDc4MjMxLCA2NDExLCAxMjkxMCwgNzg1NTQsIDY2NjQ0LCAKKyAgICAxMzAyOCwgNjczNywgMTI1MzcsIDAsIDAsIDY0MTM2LCAxMjUzNiwgMjM1MCwgMTMwMjksIDc4MjMzLCAwLCA5ODMxMDMsIAorICAgIDEzMDMwLCA2NzAyLCA0NTI3LCAwLCAxMjUzOCwgMTI4ODEwLCA5ODM2NDUsIDY1NTk5LCA2NTcxNywgOTk2NiwgMCwgNDk0OCwgCisgICAgMTI0ODQsIDQwMzIsIDEyODE0OSwgMTI2MjMsIDAsIDYyMDcsIDAsIDYxMTcsIDY1OTMwLCA4NDEyLCAwLCA3NDM4LCAxMjk2LCAKKyAgICAyMzI1LCA0MTUxMSwgMTI2NjI1LCAxMDE0OSwgNzQxMTgsIDAsIDEyNzI4NiwgMTI0ODEsIDAsIDEyNDg4LCA2NjcxMywgMCwgCisgICAgNDE1NTYsIDY0NDE0LCAxMTg4MDIsIDIzNTQsIDQyNjE5LCA3Mzc2NiwgMCwgNjI5NSwgOTAxLCA0MTUxMCwgNzk1MywgMCwgCisgICAgNjUwMzIsIDQxNTEzLCA5ODMxNjYsIDExOTI3LCA2NjU4NCwgNzg1NTksIDc4NTYwLCA3ODU1NywgNzg1NTgsIDAsIDc4NTU2LCAKKyAgICA4NDgsIDk4NjgsIDAsIDY0MjQsIDc4NTY4LCAxMTkzMzgsIDY5OTIyLCA3NDAzMSwgNzg1NjMsIDc4NTY0LCAyMzUyLCAKKyAgICA3ODU3MiwgODkzLCA2NDU3NiwgMTEyODksIDE0MDcsIDY3OTczLCAwLCAxMzAyNiwgNjc2MiwgNzg1NzksIDc4NTgwLCAKKyAgICAxMzAyMywgODkwMywgOTc3NywgNjY3MTUsIDE4NzEsIDgwOTksIDAsIDAsIDEzNDMsIDk4MzgyMywgMCwgOTMyNSwgNjgxOCwgCisgICAgNjI4MywgMTE3MzgsIDAsIDk4MzkzNCwgMCwgMTE3NDEsIDAsIDAsIDkyMTYsIDgyNjMsIDExMjc5LCAxOTQ3NTIsIAorICAgIDk4MzgyNSwgMTk0NzU0LCAxMzAyMSwgNjQ0OTQsIDMxMzYsIDE5NDc1OCwgMTk0NzU3LCAxOTQ3NjAsIDEzMDIyLCA0MjczNywgCisgICAgOTk1NiwgMCwgMCwgNzQ1NTIsIDEwMDE0LCAwLCA0MTI2MCwgMTE5MzQwLCAxMzAyMCwgMTAwMjQsIDE5NDc2NCwgNzQ1ODMsIAorICAgIDc0MzQwLCA2OTY4MSwgMCwgNDMwMDEsIDgwMjksIDAsIDAsIDk4Mzc4MCwgMzMzNSwgMCwgMCwgOTc3NiwgMTIwNTI2LCAKKyAgICAxOTQ3NDgsIDUyMTUsIDQyNjQ0LCAzMzMzLCAxNjMyLCAxOTQ3NTEsIDY0ODQ5LCAzMzQyLCA3ODU4MiwgNTM2MywgMTI5NTcsIAorICAgIDc4NTgxLCA0MTU2LCAwLCAwLCA2NDIxLCA3ODU5MSwgMTYxMSwgNzg1ODksIDEzMDE4LCA3NDI1NywgNzg1ODgsIDc0NTQyLCAKKyAgICAzMzM3LCA0NTM3LCA2Nzg5NSwgMTE3MzYsIDAsIDY4NjA4LCA2NDgyLCA0MjE0LCA3Mzc5MCwgMTE5NDUsIDAsIDEzMDQ2LCAKKyAgICA4ODM4LCA0MjUsIDQwMjUsIDEwNzA5LCA3ODU5NSwgMjEwOCwgMjM5MiwgMTMwNDcsIDAsIDAsIDY4MTksIDEzMDQ5LCAKKyAgICA2NDk5LCA5MjI0MywgMTI0MjQsIDY4NjE0LCA3Mzk0NCwgMTMwNTAsIDk5MjQsIDE5NDc0NSwgNjUwNywgMTI3OTE5LCAKKyAgICA5NDA3MywgMTI4MDY5LCAzMjc3LCA4OTI5LCA0OTQ3LCA0MTA1NSwgMCwgMTk0NzIyLCAxOTQ3MjEsIDE5NDcyNCwgMTMwNDUsIAorICAgIDY0NjI2LCA2NjAzNCwgNzc1MSwgMTk0NzI3LCA4MzcxLCAxOTQ3MjksIDM5OTcsIDEyODA2LCA4NzY4LCAxMzA0NCwgMCwgCisgICAgMTI0MjAsIDQwMjQsIDE5NDczMCwgNDEwNTQsIDEwNzgsIDk3NTcsIDY5NzM2LCA0MTA1NywgMCwgMCwgMCwgMCwgOTgzNzkxLCAKKyAgICA5MjIxMCwgOTI0MTEsIDAsIDQxNDk2LCAwLCA5MTY1LCAxNTcyLCAxMTkxMSwgMCwgMTE4ODQyLCAyMzQ2LCAxMzI3MCwgCisgICAgODk1OCwgMCwgOTY0NiwgMzc3MywgNDMxODMsIDY0MDEsIDU4MzEsIDAsIDAsIDEzMDQzLCA4MDU2LCA5MjQ5NCwgNjU2ODEsIAorICAgIDIwOCwgMTI3MzgyLCA0MTUxNCwgMCwgMCwgMCwgMTA2OTksIDY0MDgsIDkyMjI3LCA3ODI1LCA1NjYxLCAwLCAxMjA2MzAsIAorICAgIDM2MDMsIDQxMTA5LCAyMzk4LCAzNTQ4LCAxMjY1OTYsIDAsIDExOTkzMywgMCwgMzExNSwgOTkxOCwgMCwgODI5NCwgCisgICAgNDI5MTIsIDAsIDAsIDE5NDcyNiwgNDg3NiwgNjU4MDQsIDAsIDAsIDQzNDY4LCA5ODMyNzQsIDQxNTU4LCA0MTQ3MSwgCisgICAgNzM5NTAsIDgxNTgsIDk5NDQsIDQxNDcyLCAxMjAyOTgsIDEzMDUxLCA3ODY4OSwgMzE0MywgMTk0Njc0LCA2NzAxLCAKKyAgICA0MTU1OSwgMTg5NiwgNjYyNTYsIDEzMDUyLCAxOTQ2ODAsIDU2NjUsIDAsIDExOTA3MSwgNzAyNSwgNjM5NzQsIDAsIAorICAgIDc0MzUyLCA3NDE2MSwgNDE1NCwgOTg2MywgNDM1NTAsIDEyMzEwLCA1NjYyLCA0MjM4MiwgMTU2NCwgNzM5MjQsIDExMjEsIAorICAgIDc4MzE5LCA2Mzk1OSwgMCwgOTk0MiwgMTMyMzEsIDAsIDY0NzUyLCA0NzMyLCAxOTQ2NjYsIDExNTk2LCAxMTk5MzEsIAorICAgIDY1MTg3LCAxNjI2LCA2Mzk4MywgMTAxMTAsIDY0NzcyLCA0MjAyNCwgNjQyMCwgNDIwMjgsIDAsIDEwNTA5LCAyNzk1LCAKKyAgICA0OTEwLCAxOTQ3MjgsIDY5MjMxLCA2NDc1MywgNjI3NSwgOTM5NTcsIDExODgzMCwgNjM5NzgsIDExMDQ0LCAzMjI5LCAKKyAgICA2NDIzLCA0Mjc3NCwgMCwgMCwgMCwgMTI4MjMsIDIzMzEsIDkxNzgxMCwgNzA4NSwgNjEzNywgMCwgNzUyNCwgMCwgCisgICAgOTE3ODA5LCA4MzQ2LCAwLCA4MzM4LCAxMjgzMTUsIDY1MDQzLCAwLCA4MjIsIDEyNzk4NCwgOTkwMywgNjQ3MjEsIDQyNzIyLCAKKyAgICA2OTg3NywgMTk0NjU5LCA3ODY1NSwgNzg2NjEsIDE5NDY2MCwgNzg2NjIsIDQxMjY1LCA1MzExLCAxNzk1LCA5NjUsIAorICAgIDExODc5MSwgMTA1ODcsIDc4MDU1LCAxMTI3OCwgNzg2MzIsIDE5NDY0MCwgMCwgMTI5NDYsIDE5NDY0MSwgMTE5MzQxLCAKKyAgICAxMjAzNDksIDYyOTQsIDMxNDQsIDE5NDY0OCwgMTk0NjQ3LCA2NTAxOSwgMTk0NjQ5LCA3Mzk5MCwgMCwgOTgzOTYwLCA3NDgsIAorICAgIDQxMDY3LCAyMzMwLCA1MzUsIDMxNDgsIDEyMzc1LCA3ODc5OSwgMTk0NjI5LCAxMDU1NiwgMjQ3NSwgMTIzODgsIDQ4ODksIAorICAgIDg5NjgsIDY3ODYzLCAzNTkzLCAwLCAwLCAyMzQyLCAwLCAxOTQ2MzQsIDY1MjA2LCA0ODk0LCAxOTQ2MzUsIDQ4OTAsIAorICAgIDE5NDYzNywgOTE3ODA0LCA1ODEsIDQ4OTMsIDk4MzYxNiwgNjU3MSwgNjU1NDUsIDQ4ODgsIDQxNTcsIDc4MDQ4LCA3ODA0OSwgCisgICAgNzgwNDYsIDc4MDQ3LCAwLCAxMDExOSwgNjQxNSwgNDI4OTMsIDAsIDY5NzAyLCAwLCAwLCAxMTM3NSwgNjQ3NDYsIDIzMzIsIAorICAgIDc4MDYzLCA0MTIsIDc4MDYxLCA2NDkzMiwgNDI4ODAsIDQzNTg3LCAwLCAwLCAwLCAwLCA2NTE5NywgNzgwNjYsIDEyMjAzLCAKKyAgICA3ODA2NCwgNzgwNjUsIDg5MTMsIDY1ODU0LCA0ODc1LCA2NTgxMSwgMTIwMzgxLCAxMjAzODksIDExODg4OCwgOTM0NCwgCisgICAgODgyNiwgMTIwMzg2LCAxMjAzOTUsIDEzMTA0LCA3NDc4MSwgMTE5OTcsIDEyMDM5MywgNzgwNzUsIDAsIDMxMzQsIDAsIAorICAgIDY1Njk2LCA5MjMzMSwgMCwgNjYyMTcsIDAsIDgzMzQsIDExOTM0NCwgMCwgMzQ0OSwgMCwgMCwgNzg0MTQsIDc4NDEzLCAKKyAgICAxMTg5NTAsIDc0MDExLCAwLCAwLCAwLCAwLCAxOTA4LCAxMjAxNjcsIDQzMjgsIDEwNzM0LCAxMjcwMTQsIDAsIDEyNzkxNCwgCisgICAgNzgwNCwgNzgyNzIsIDEwODExLCA2MjUwLCAxMTMzOSwgNDkxNCwgMTEzNjcsIDAsIDc4MDU0LCA0OTE3LCA3NDUxNiwgCisgICAgNzQyMDgsIDY0Mjg1LCA0OTEyLCA1NDY0LCAxMjc4MzYsIDExODg5MywgMjM2MSwgNzk3MSwgNzgwNzIsIDc4MDczLCAKKyAgICA1NTI0MywgNzgwNzEsIDAsIDgwODYsIDc0MzE3LCA2NzA3LCA4MzE5LCAyMzEyLCA0MDk3NywgMTA5NjAsIDQwOTYyLCAKKyAgICA4MzA1LCAxMjU3MywgOTgzNjA4LCA0MDk4MCwgOTgzOTY0LCAxMzIwMiwgMCwgMTI1ODIsIDc4MjgyLCA5ODMwNDgsIAorICAgIDY5ODU2LCA0MjQzOCwgNTUyMjEsIDYyODgsIDc4MjgwLCAxMjc5NDYsIDU2NTMsIDQyNDAwLCAxMDg5MSwgNzY5OCwgNTY1OCwgCisgICAgNzQwNDUsIDcwMDM5LCAwLCAwLCA0OTEzLCAwLCA5ODM5NTksIDcxMzMzLCA0MjMyNiwgMTI4MTk0LCAxMjcyOCwgOTI2ODUsIAorICAgIDQyNDc4LCAyMzI3LCAwLCAxMjU2MywgNDIyODcsIDEyNzA1LCAwLCAwLCAxMjU4OCwgODgyMSwgNjE1MywgMjg2NywgCisgICAgMTk0NzA4LCA2NjMxMiwgNjk4LCAxMjgwMDcsIDE5NDYwNiwgMTAzNTYsIDcwMDE3LCAxOTQ3MTMsIDY1MSwgMTI2NDEsIDAsIAorICAgIDAsIDAsIDAsIDQxNTUyLCA2NTExNSwgNzg0NjUsIDc4NDY3LCA3ODQ2MywgNzg0NjQsIDEyODg1MSwgNzg0NjEsIDE5NDY5NywgCisgICAgNzQzNTYsIDY0OTQ1LCA0NzE2LCA0MzI3NywgMCwgNzg0NzQsIDEyMzQwLCAxMjA1NjgsIDAsIDE5NDcwMCwgNTUyNjQsIAorICAgIDQxMjExLCAxMjA2NzYsIDg3MDMsIDU0NjIsIDkxNzYyOSwgOTgzNDk1LCAxMDEwMSwgMCwgNzAwNDksIDg0NzksIDQxNTEsIAorICAgIDQxOTMzLCAwLCAwLCA2NjI1NCwgMTIwODIxLCAwLCAwLCAxMjg2NTQsIDAsIDExOTE5NCwgNzQwNTAsIDkyNzAxLCAwLCAwLCAKKyAgICAwLCAwLCAwLCAxMjI3OCwgMCwgMCwgMCwgMjcwMCwgMTI1NzYsIDc4NDIsIDEyODk5LCAwLCAwLCAyNjk5LCAwLCA3Mzg0NSwgCisgICAgMjk4NSwgOTI1NjgsIDEyNjQ3NSwgOTE3ODQ1LCAxMjE5MiwgMTE5MzE0LCAwLCAxMTkzMTIsIDk4MjcsIDExOTMxMCwgCisgICAgMTE5MzExLCAxMTkzMDgsIDExOTMwOSwgMTE5MzA2LCAxMTQ4MSwgNDEyMTAsIDExOTMwNSwgMCwgMzUsIDc4NDgxLCAKKyAgICA3ODQ4MiwgNjY2OTQsIDY4NDc5LCA3ODQ3NywgNzg0NzgsIDQzNTk2LCA2MDkwLCA2NDI1NywgNzgxMiwgMTA1MzQsIDAsIAorICAgIDc4NDg1LCA3Mzg0OCwgNjc5NzUsIDQyNzIsIDAsIDQwOTY3LCA0MDk2NCwgOTE3ODI1LCAxMjcwNCwgNzg0ODcsIDQzMzA2LCAKKyAgICAwLCA2NDQ5NywgMTIxMzgsIDc5MzAsIDAsIDIyOTIsIDY4MjE2LCAwLCA5MTc4MjYsIDUyNDQsIDQxODksIDk0MTA4LCAKKyAgICA2NzU5NiwgMTI3NTA0LCA0MTg4LCAxODc5LCAwLCA5NjgsIDAsIDQzNzQzLCAwLCA4ODczLCAyMjc5LCAwLCA5MTc4MjcsIAorICAgIDY1NTU1LCAxMjU3NCwgMCwgMCwgMCwgNzQ0OTAsIDEyNzA5OSwgNDM2NTcsIDAsIDAsIDAsIDQyNjgyLCAxMjU3OCwgCisgICAgMTI3MjAsIDAsIDQxMjI3LCAwLCAxMjM0NiwgMTI3MTAxLCA2NDg0OCwgMCwgMCwgNzI1MSwgMCwgMCwgMTE4ODUwLCAKKyAgICAxMTkxNDEsIDEyODU0NiwgNjYwMTUsIDAsIDk1OSwgODg4NSwgMTI1NjQsIDY2NDU3LCA3ODgwOCwgOTQ2OSwgOTYzMiwgCisgICAgOTIzMjMsIDc0NzYxLCA2NDMyMywgMTI3MzM1LCAwLCAwLCAwLCAzMTAsIDAsIDQxMjgxLCAxMDk3NiwgMCwgNzEzMjUsIDAsIAorICAgIDc0MjY2LCAxMDA1NCwgNjQ5NywgODU3NCwgMCwgOTAxMiwgMTk5NTgsIDc0NDIwLCA2NTA4OSwgMTMyMTUsIDEyNzMwLCAKKyAgICA2NTE2MywgNzQwNDQsIDM3NCwgNDMxOTUsIDgxNiwgMTIwMTYxLCAwLCAwLCA0MTkzNCwgNzQ2NSwgMCwgMTI4MTY4LCAKKyAgICA5ODMyNjgsIDQ3MTUsIDYxMDEsIDk0MTA2LCA0MTkzNiwgMCwgNDg3OSwgMCwgNjU0NDYsIDAsIDMwNywgMTI3MTQ3LCAKKyAgICA5NTg1LCA1Mzc0LCA5ODMyNjcsIDEyODA1OSwgMCwgMCwgMTI2NjE4LCAxMjAzOTAsIDAsIDY1NTY3LCAxMjA2MTQsIDE5MjksIAorICAgIDAsIDEyMTQyLCAwLCAxMjIzNiwgNDE0MTksIDE5NDYxOCwgMTIwNjEwLCAxMjk4MiwgMTk0NjIzLCA1Mzc4LCA3ODc5MSwgCisgICAgMTI4Njc5LCA0MTQyMSwgMCwgNDQ2MiwgMCwgMTI2NTk5LCAxMjgwOTIsIDgyMSwgMCwgMjQ5OCwgNTgwMCwgMTIwMTU3LCAKKyAgICA5ODMxMTUsIDE3NjAsIDI0MjEsIDQ0NjksIDIzMjQsIDgyOCwgMzYxMSwgNzg0MDAsIDc1NywgMTE4NSwgMCwgNzg3NzAsIAorICAgIDQzNTk3LCAxMDYyOCwgNzQ4MDgsIDE5NDU3MiwgNzk5OSwgNDM5NzEsIDAsIDAsIDEwNjM0LCAxMDk0MiwgNzcxMywgMjM0OCwgCisgICAgMCwgNjQzNzQsIDQzODAsIDE5NDYwOCwgMTE5MDQ0LCA5OTgyLCA2NDMyNCwgNDEyNDAsIDg2MiwgNjU2MjYsIDc4NDYyLCAKKyAgICAxODEwLCAzNjczLCA1MTM3LCAxOTQ2MTcsIDAsIDcyNzcsIDY1NjIyLCAwLCA3NTY2LCA2NDY4OCwgMTk0NTkzLCAxOTQ1OTIsIAorICAgIDc4MDkyLCA3NDM1NywgMTk0NTk3LCA0NzQ4LCA5MjIyOCwgMTk0NTk4LCAxOTQ2MDEsIDQyMjYwLCA1ODcxLCAxMTkwNzUsIAorICAgIDAsIDc0NTc2LCA0NDAxOSwgMCwgMTI4MTg5LCAzOTY3LCAxOTQ2MDQsIDEzMTM3LCA4Nzc1LCAxMjc5NDUsIDAsIDI5NjMsIAorICAgIDAsIDg0MTAsIDQ0NTQsIDcyMywgMTI3ODgyLCA5NjYsIDQ0NDksIDkyMzMwLCA5MjIzOCwgMCwgNzgxOSwgMjMyMCwgCisgICAgMTk0NTg5LCAzMzksIDQ5NjgsIDE5NDU5MCwgMTIwMzk5LCA4MDc1LCA1NTI3NiwgMCwgODA0NywgMCwgNzg4MjcsIDEyNjM0LCAKKyAgICA0MTU0MiwgNzg3ODAsIDc0NjYsIDY3MDUsIDEyMTc0LCA0MjYxMCwgMCwgNzQ0NTIsIDk4Mzc2MywgMTU4NCwgNjY2NDUsIAorICAgIDYwNDUsIDY3MjksIDEyMDY0MCwgNjUyMTgsIDExNTU5LCAwLCA3ODA2MiwgNzUzNywgMCwgMTEzNzAsIDAsIDEwMzMwLCAwLCAKKyAgICAxMDM5NCwgMCwgNzQxOTQsIDAsIDEyNzkyOSwgOTc4MCwgMCwgMTMwOTIsIDE5NDU3NiwgNzc5NTAsIDE5NDU3OCwgNzA3NCwgCisgICAgOTI2NDgsIDE5NDU3OSwgMTk0NTgyLCAxMTQxNCwgMTI4ODY4LCAyNTMxLCAxMzAzNCwgMCwgMCwgNDIxMSwgMTI1OSwgCisgICAgNzUxNywgMCwgMCwgMTk0NTYxLCA0MDk5NiwgMTMwMzcsIDcwOTIsIDY0MSwgNTIxOSwgOTQwMzQsIDE5NDU2NiwgMTEwNjQsIAorICAgIDQxMTI5LCAwLCA0Mjg1MCwgMTMwMzUsIDkwNzUsIDkyMzg3LCA1NDY2LCAxMjgxNTMsIDAsIDY0MDk4LCA2NTc5MywgNDUzNSwgCisgICAgMTk0NTczLCA0MjcxLCA3ODQxNywgMTI4MzU3LCA2NzY5LCA0MTQxMCwgOTgzNDUyLCA2NDI2MiwgNjc2NywgNDE0MDcsIDAsIAorICAgIDAsIDY3NTUsIDExODg2NCwgOTA0NiwgMTI3OTM0LCAxMjY2MDgsIDAsIDAsIDAsIDAsIDY3Njc1LCAwLCAwLCAwLCA2NDMzOCwgCisgICAgMjU2MywgMTMwMzMsIDI0NywgMTE4OTE1LCAwLCAxMjMzOCwgNDY1MSwgNjk4OTUsIDExMjcwLCAwLCAwLCAxMTkzMywgMCwgCisgICAgMCwgNDE5MDMsIDQzNDQ3LCAxMTAwMSwgMCwgNDIyNTUsIDAsIDkyNjYxLCA2OTgyMSwgNDE5MDUsIDAsIDAsIDEwNzc1LCAKKyAgICA5NzkzLCA1MDA5LCAwLCA0MjI2OSwgNjQ1ODcsIDk4MzA2MywgNDI1MzUsIDY5ODEyLCA2NDUyOSwgNDE0MDgsIDQyODUzLCAKKyAgICAzODc3LCAxMjA3OTUsIDQyNjc0LCA4MTQ3LCA0MzU2NiwgMTE5MDIxLCA5ODM3NzYsIDEwMjM2LCA2NTkxOCwgNDM3ODIsIDAsIAorICAgIDAsIDY0NTA2LCA2OTY1MiwgMTE4OTIxLCA0NzQ3LCAxMjgwNTgsIDY5ODQ0LCA0MzIwMCwgNTgzMiwgMCwgMCwgNTE0MSwgCisgICAgNDI2MDAsIDAsIDQzMjAzLCAwLCA5ODM3OTksIDQzMjg2LCAwLCAxMjgyMTEsIDQzNzc4LCAwLCA0MTMwNSwgNzg3NzYsIAorICAgIDQzNzgxLCAxMTMwMywgNjU1NDcsIDAsIDcwMzEsIDg1OSwgMCwgMCwgMCwgNjA1OSwgMTI2OTg1LCA1NTIzNSwgMCwgODUzNSwgCisgICAgMCwgNjUxOTYsIDE5NDc4NywgNjYwMzIsIDExNDg4LCAxMjA0ODEsIDEyMDc4NiwgNDIyMzMsIDY0MTQwLCA5OTQ2LCAKKyAgICA2Mzg4NSwgMTk0NzkyLCAxMTgyMiwgMCwgNDMxODksIDk4Mzg5OCwgMCwgMTc4OCwgMTU3OSwgMTIwNDgyLCA3MTI5OCwgMCwgCisgICAgMCwgMCwgOTAyOCwgMTE5NTcxLCA2OTIzNCwgOTQwNTUsIDAsIDEyODUsIDY0ODgyLCA0MTI0MiwgNzAwODYsIDAsIDEyNjQwLCAKKyAgICAwLCA3NDAxLCAwLCAxMjYyNSwgNjgxOTgsIDAsIDcwMDgyLCAzOTQwLCA0MTU5NywgNDM3NTQsIDMzOTYsIDEyNjQyLCAKKyAgICA4NjY1LCAwLCAwLCAxMjYzMCwgMTY1MywgOTE3ODE1LCAxMDE1MywgMCwgNjE2NiwgMTIwNTE2LCAxMTg5ODksIDAsIDg4MTUsIAorICAgIDY2NjczLCA2NTA0NiwgOTI4NSwgOTEzLCA0MjI1OSwgMTE5MzE3LCAxMTkzMTgsIDIxNDIsIDY4NDU0LCA0MjQ4NSwgCisgICAgOTQwMTIsIDc4NzgsIDgyMTEsIDQyMjkzLCA2NDM3NywgMCwgOTI2NDMsIDAsIDE5NDY3MywgMTIwMzIsIDAsIDk3MjUsIDAsIAorICAgIDc4NDMxLCA1MjYzLCAxMjgxOCwgNzg0MzAsIDQxOTM5LCAxMDAyMiwgNjUzODcsIDc4NDE5LCA0Mjc3NywgMTAxMzksIDk4MCwgCisgICAgNDM2OTgsIDY1Mzg2LCAyMjA4LCAwLCA0MzcwMSwgNDMxOTgsIDcxODQsIDEyMDY3MywgMTk0Nzk3LCA5MTc4MTksIDEwMDg1LCAKKyAgICAxMTk5OTIsIDAsIDExOTk5MywgNjYzNCwgOTIzNzMsIDAsIDExOTMyMywgODA3MiwgMTE5MzIxLCA0MzcwMCwgMCwgODg3MiwgCisgICAgNzc4MywgOTE3OTkyLCAxMjM5OCwgODIzNywgMCwgMCwgMTIzOTUsIDAsIDEyNjk3NywgMTIwNTY1LCA5OTE0LCAyMjE3LCAKKyAgICA5MTc4NTQsIDczOTc1LCA2MzY3LCA2MzUxLCA2NjY4OCwgMCwgNzgxMDcsIDAsIDY0NzM1LCA0MTI0MywgOTIxOTksIDc4MDgsIAorICAgIDE4MjksIDAsIDQxOTM3LCA0MzU4LCA0MzI3MiwgNjM1MywgMCwgMCwgMTIwNDIyLCAwLCAxNzEwLCAwLCAwLCA2NTYwNywgMCwgCisgICAgNDksIDY2MjcsIDAsIDYyNTgsIDEwNjgzLCA3ODY3MiwgOTc0MSwgNzgzMjksIDU2NDksIDc4NDQxLCA0MzQ0MywgNjQ0MTgsIAorICAgIDE2NDMsIDY1MjEzLCA4NDA1LCAzNDcwLCAxMjgyMjUsIDEzMjEzLCA0MjQ1MiwgNzgzMzEsIDEyMDY2NCwgNzg0NDUsIDAsIAorICAgIDEwNzIsIDc4NDU3LCA3ODQ1MiwgNzg0NTQsIDY1NzYsIDQxOTg4LCA0MTEzMiwgNjU2NzUsIDEwODAsIDEyMDAwMiwgOTg4NiwgCisgICAgNTUyMjUsIDExMDEsIDY4NDA0LCAxMjMwOSwgNTUyMjcsIDAsIDEyNjMyLCAxMDg2LCAxODY5LCA3ODY4NSwgNzY4MCwgMCwgCisgICAgNjU0NTgsIDEyMDcxNCwgMTI2MzksIDMzODAsIDgxMjMsIDEwOTEsIDEyNjM4LCA3OTc3LCA0NTAxLCA0MTA5OSwgMCwgCisgICAgNjYzMDksIDAsIDAsIDE0OTQsIDk4MzE0NiwgMTI2NjEzLCAwLCAxMTY5MywgMTI2NTEzLCAxMDQ5NCwgOTI2NTUsIDY1ODcyLCAKKyAgICAxMjM2MywgMTEzODYsIDAsIDAsIDAsIDAsIDY0NTgyLCAwLCA3Mzc5NCwgMCwgODAyMiwgMCwgMTIwNDYyLCA3NDEwNiwgCisgICAgMTI0MTMsIDk0MDY5LCA5MTc5OTQsIDkxNzk5MywgOTE3OTk1LCA1NTcwLCAxODgxLCA3MjEwLCAwLCAxMDEyLCA0Mzc1MiwgCisgICAgMCwgMTIwNzA5LCA3MjA4LCA2NjQ0MiwgNTU2OSwgOTgzMjQyLCA0MjMzOSwgMCwgNjA2MywgMCwgNzgzODMsIDExOTU5NCwgCisgICAgNjA1MywgNjU2MDIsIDAsIDkyMjAxLCA2NDcyNywgOTE2MCwgMTk0ODI3LCAwLCAwLCA5MjE4MCwgMTA1MDMsIDExODgxMCwgCisgICAgNjA1NSwgMzg3MCwgNDI3OSwgODQ5MCwgMTIwMTE0LCA0MzE5LCA2NDc4NiwgODYwMiwgMTIwMTEwLCAxMTMyNiwgOTIyMDQsIAorICAgIDk4MzExNiwgMCwgMTIwMTE5LCA3ODMzMywgMTIwMTE3LCAxMjAxMTgsIDEyMDA5OSwgMTIwMTAwLCA2NTA4NywgNTU3MSwgCisgICAgMzY3NCwgOTc0MCwgOTEyMSwgNTU2OCwgMTIwMTA3LCAxMjAxMDgsIDQyMDg1LCAxMDEwNywgNDIxNTksIDQyODcwLCAKKyAgICAxMjAxMDEsIDU4OSwgNzA1MCwgOTgzODAwLCA0MzI4MSwgMTAyMzMsIDQxMjYzLCA2NjI1MSwgNjU3MjksIDY2MjUzLCAKKyAgICAxMjY0OTcsIDc0MDk5LCA0MjY0NSwgMCwgMTk0ODE1LCA4NTgzLCAwLCA1ODQ3LCA2OTI4LCAxMjgwNzQsIDAsIDAsIDAsIDAsIAorICAgIDY2NTkyLCAxMjIwNCwgOTE3OTYyLCAxOTk2NiwgNzc4NTYsIDQyNTYxLCAxMjA2MjYsIDk4MzI1MSwgMCwgODEyMCwgCisgICAgMTIwNzAxLCAwLCAwLCAxMjgwMTIsIDQxMDYzLCAwLCAxMDY2NCwgMCwgODM2OSwgMCwgNDU1MSwgMTk0OTY0LCAzMzY5LCAwLCAKKyAgICAwLCA5NjczLCA2NjMzNCwgNjU1ODAsIDEwNDc4LCAxMTg5NjAsIDEyNTE3LCA1NTcsIDk0NTcsIDEyMDM0LCA5ODM2NzEsIAorICAgIDYzNTUsIDEyNTE5LCA0MTAwNCwgMCwgMTk1MDI1LCA3NDA5NCwgMCwgMCwgNzc5NzAsIDk4MzU2MCwgMCwgMTI4MTc1LCAKKyAgICAxMjExMSwgMzkyNywgMCwgMTI1MTUsIDE0NzQsIDY3ODkzLCA1NDkyLCA2OTIzLCA5MjI4MSwgMTA0NDEsIDczODM2LCAwLCAKKyAgICA0Mzk5MCwgNTQ5MywgMCwgNzQzMTksIDAsIDY2NjM1LCAxMjAxOSwgMCwgMTYxOCwgMCwgMTIwNDc0LCA5NjQ1LCAxMDQzMCwgCisgICAgOTE3OTU5LCA1ODUzLCAxMzA2MywgMTAzNjMsIDAsIDEyOTU2LCAxMjgxNjksIDEyMDcyOSwgMTEzMTQsIDkxNzU4MiwgCisgICAgMTIwNjAsIDAsIDc4MzkyLCAxMjgyNiwgNjMyOSwgMCwgMTA1MTQsIDY1NTE3LCA3NDM5NSwgMjcwNywgODMwOSwgMCwgCisgICAgMTI3MDU0LCA3ODM5OCwgNDM1NzAsIDI2OTcsIDQzNDIwLCA3ODM5NiwgMTI3MDU3LCAyNjk1LCA0MjE3MSwgMCwgMCwgMCwgCisgICAgNjc2MTcsIDExODk3MSwgMCwgMjY5MywgMTIxMjUsIDEyNzY2LCAwLCAxMTY0LCAxMjg4MTcsIDAsIDQxOTE4LCA5ODMxNjgsIAorICAgIDEyNzU0MiwgODY4NywgNjYwMDksIDEyMTc4LCA3MDUzLCAxMjgwMDEsIDc0NjksIDAsIDUyNDgsIDEyMjE4LCAxMjA1MzgsIAorICAgIDY0MjcsIDQyODg0LCA0MTEyMywgMCwgMCwgNDI4NzMsIDQxMTI2LCA5OTkxLCA0MTEyOCwgNzQzNzEsIDEyNzAzMSwgMCwgCisgICAgOTg3MywgMCwgNDI4NzcsIDc5OTQsIDY0NzYyLCAyMDUzLCA0Mjg0MywgNjU5MSwgOTM0MCwgMCwgMTU4OSwgMCwgMjk2LCAKKyAgICA3NDQzOCwgNzg4NTIsIDAsIDY3ODQxLCA3NDM3MCwgMCwgODkyMiwgMTI4MDY4LCA3NDYwMCwgMTI3MDAsIDc0ODM2LCAwLCAKKyAgICAxMjU3OSwgMCwgMTI1NzUsIDY0MTYsIDU2NTYsIDI4OTEsIDEzMjYyLCA2NTU5MCwgNTI5OSwgMCwgMTE0NzMsIDU0NDksIAorICAgIDEyNTIsIDAsIDc4NDA0LCA0MTQzMSwgNzQzNjksIDY1MzczLCA1Mjk1LCA5MTc1NjksIDc0MTE0LCAxMjIzLCAxNjQyLCAKKyAgICAxNzQsIDc4Mzk5LCA4ODMsIDQxNjEsIDEyNjkxLCA0MjYwMywgNDE0MTMsIDMyMTIsIDQxNDU5LCAzMjExLCA3NDgxMCwgCisgICAgNDE0MjUsIDEyNzAyOSwgNzg0MTIsIDc0NDUwLCA5NzI4LCAzODQ2LCA4MDcwLCA2MTUwLCA2NjM2LCA0MzcwLCAwLCAwLCAKKyAgICA3NDE3OCwgNzQ1ODcsIDc0MTE3LCAwLCAwLCAwLCA0OTg2LCAxMjE4OSwgMCwgNjc2NDgsIDEyMDQ5OSwgOTQwMDEsIDQyNTcsIAorICAgIDEyMTA0LCA3Nzk0MiwgNjIyMCwgOTAwNCwgNjU1NjEsIDAsIDc3OTQ5LCAwLCA2ODEzNSwgOTE3NTc2LCA3Nzk0NiwgMCwgCisgICAgNjk2NzksIDY5Njg0LCA5ODkwLCA3ODU2MSwgMTI5NzEsIDc4NDUzLCA5MjU1NiwgNzM4OTgsIDExOTc5LCA3MDA1MSwgCisgICAgMTE4OTAwLCA5MTc4OTQsIDAsIDk2MzUsIDEyNjAwLCA4ODcxLCAwLCAwLCAwLCA2NDY5LCA3NDIyNywgMCwgNjUzMDQsIAorICAgIDQ2NzksIDEwMjMwLCA2NDMwMCwgNjQ4NjcsIDM0MjcsIDQyNDAsIDAsIDAsIDAsIDAsIDQyOTE2LCAwLCAwLCAwLCA3MjgyLCAKKyAgICA3ODcyOCwgNjU3MzMsIDQ0NDUsIDEyNzEzOCwgMTI4MDgyLCAzNDk0LCA3NDYwNiwgNjU1NSwgMCwgNzc5NzYsIDAsIDAsIAorICAgIDc4NTY2LCAwLCA5ODMxODksIDY1ODk4LCA5ODMyNDQsIDY1MzEyLCA1NDQ3LCAwLCAxMjg5NSwgNjU1OTMsIDQwMTAsIDAsIAorICAgIDQxMTA2LCAwLCA2NDQ0OCwgMCwgNDExMDUsIDAsIDY1ODIwLCA2MjMyLCAwLCAxMjgyODAsIDAsIDQzNjA4LCAxMTkwOTEsIAorICAgIDAsIDY1MzgsIDQzMzUsIDc4MzY0LCAzOTQxLCA0MTEyMiwgMTEwNjEsIDc4MzYzLCA2NDg5MiwgOTExMywgMTk1NCwgCisgICAgMTIxNTUsIDk4MzY3NCwgNDI4NzgsIDExNTAwLCAwLCAwLCA3NDU3OCwgMCwgNjU4MzIsIDAsIDAsIDAsIDc3OTc1LCAKKyAgICAxMTkyMzAsIDQ1ODYsIDAsIDM1MCwgMTA5NTEsIDAsIDUwOSwgMCwgMCwgOTIzMDcsIDAsIDAsIDUxMzMsIDAsIDAsIDk1MDAsIAorICAgIDAsIDQ5NTcsIDY0NzQxLCAyNDIyLCAyMjEyLCA5ODMwODAsIDAsIDAsIDI0OTYsIDExNTE2LCA5NDQsIDExODg1MSwgMzg5MCwgCisgICAgMTIxNjgsIDE0MzgsIDAsIDk4MzExNywgMCwgNDE5NDcsIDEyMjAsIDEyMDgyOCwgMTI4NTU1LCAwLCAwLCAxNTcxLCAKKyAgICA0MjYzMCwgNDE5NDksIDQyODA1LCA4MjcwLCA5NDMsIDU2NCwgMCwgMzEyLCA0MTk4MCwgOTgzOTQ0LCAwLCA3ODEyMCwgCisgICAgODg3NywgMjY5LCA0NDI5LCA2MjcyLCA5NjE3LCAxNDYwLCA2OTU0LCA3ODY1NywgNDExMjAsIDY1MTIxLCAxMDg2MiwgCisgICAgNjA2MCwgNDExMTksIDQxNDE2LCA3NDM1NSwgNDE3MywgMCwgMCwgMCwgMTkwNiwgOTE3OTg2LCAxMTUzMiwgNzQwNzMsIAorICAgIDEyNzMzOCwgMCwgMTk4NSwgNjI5NiwgOTU4MiwgOTE3ODk1LCA2NDI4NywgMCwgNzgxMTUsIDExNDI4LCAxNzMwLCAyNDU3LCAKKyAgICA5MTc4MDgsIDE5OTE4LCAxMDQ2OSwgMCwgMCwgNzcwMywgODg0MCwgODAzNSwgMCwgMCwgOTIyMzAsIDAsIDYxMjksIDAsIAorICAgIDEyODUyOCwgMTI4MjY4LCAwLCA3ODc0LCA4NjgxLCAxMTkwOTIsIDAsIDEzMTM2LCAwLCAwLCA3MDEwMiwgNjM4ODYsIAorICAgIDExODg4MSwgOTYwNSwgNzEzMDgsIDEzMjIwLCAxMjg3NzYsIDEyMDI3NCwgNTUxNCwgMCwgOTIyOCwgMCwgMCwgMCwgNTI0MCwgCisgICAgOTgxMSwgMTAwMTIsIDMwOTYsIDAsIDAsIDk4MzM1MSwgNjY2NzYsIDY1ODczLCAwLCAwLCAwLCA5NTAxLCAwLCAxMjcyLCAKKyAgICA2NDUzNiwgNjU0NjUsIDY0NjU0LCA3NDY3LCAwLCAxNDY3LCAxMDE1OCwgMTAwNDAsIDAsIDk1MTksIDAsIDkxNzgxMiwgMCwgCisgICAgMTE4ODk5LCAxMjE5MywgMCwgMCwgMCwgMCwgOTgzMzUzLCAxOTkzNSwgMCwgOTIxNjIsIDY5Njc2LCAwLCAwLCAwLCA1Mjc1LCAKKyAgICAwLCAwLCA4NjM3LCAwLCAwLCAzNzg5LCA2Mzg4MCwgMTE0NzEsIDQzNTU0LCA2NTg2MiwgMTE0NzQsIDY2MzMyLCA2NjYwMywgCisgICAgMTI4MTM4LCAyNDI2LCAxMjA0MiwgOTIxOTQsIDk4MzkxMSwgOTUzNywgMzk2MSwgMTIxMTUsIDc3OTUzLCAyNjA1LCA0NTAwLCAKKyAgICA2NDU2MSwgNTUyMjQsIDQ5ODEsIDAsIDAsIDYzODc2LCAxMTY2NywgNDI2ODYsIDc3OTczLCA0MjM2MiwgNjQ2ODYsIDQ0OTksIAorICAgIDQxNjQ5LCA3NTg5LCAwLCAwLCAzMjM3LCAwLCA2ODIxNSwgOTE3OTA0LCA4NTQxLCA3ODI5OCwgNzAwMzQsIDQxODY2LCAwLCAKKyAgICAwLCAwLCAwLCA2OTkyNCwgNDM1NTUsIDI4MjMsIDk1NTksIDEwMDYwLCA0MTk0MCwgODI5OSwgNDE5NDUsIDcxMzIsIAorICAgIDQxOTQxLCAzMzA4LCA3MTkwLCA2NDg4MCwgODYxNCwgNjUyMjAsIDQxNDkzLCAwLCA0MTY5OSwgMTA3NjIsIDQzNzgwLCAKKyAgICAxMjk5OSwgMCwgMCwgODEwNiwgNDEyOCwgMCwgNjI3NCwgNDQ5NCwgMCwgNDAxMiwgMTAzOTUsIDk4MzU5MSwgNDM2MzMsIAorICAgIDY1NDQ3LCAxMjY1MTEsIDAsIDExMDA0LCA2OTUsIDczOSwgNjk2LCA3NjExLCAwLCA0Mjc1NSwgNzQ4MDIsIDkyMjcsIAorICAgIDc1MDYsIDc1MTAsIDY5OTM3LCA2OTEsIDczOCwgNzUxMSwgNzUxMiwgNzUxNSwgMzg2OCwgNjg4LCA0MTg0NywgNjkwLCAKKyAgICAyNTQ4LCA3MzcsIDk3NCwgODAwMywgNzQwNiwgOTE3OTExLCAwLCAxMjg2ODgsIDM5ODUsIDkxNzkxMiwgNjU4NjAsIAorICAgIDYzOTIxLCA3MDUxLCA2OTc3NywgNDY4MiwgOTE3ODA1LCAxMjgwOSwgNjQwNiwgNDY4NSwgOTI1MDUsIDEwODc5LCAxMDM0NywgCisgICAgNDY4MCwgNjM0MSwgMCwgMzg1MSwgODEzMiwgNzQzMjUsIDAsIDkxNzkwNywgMCwgNDE5NTgsIDExOTE3NiwgOTE3OTA4LCAwLCAKKyAgICAwLCA0MjY1NywgOTI0NjgsIDc2NDMsIDQyMzczLCAxMTcxNCwgNjc1ODcsIDQzNTY4LCA5ODMxNzUsIDExNzE3LCA3NjUwLCAKKyAgICAxMDU5NCwgNjQ5NTEsIDc2NDcsIDc2NDksIDEyODE1NSwgNzY0NiwgMCwgNzgwODIsIDk2NTEsIDAsIDM4OTEsIDAsIDAsIAorICAgIDIzMzcsIDE3MzUsIDc0MzI0LCA2Nzg2MCwgMjM2MywgOTgzMTM1LCAwLCA0MzU2MSwgMCwgMCwgNzQxNDYsIDE4NjAsIAorICAgIDc0OTUsIDc1ODAsIDU4MTIsIDc0OTcsIDc1ODQsIDExOTE0MCwgMTI3ODUzLCAwLCAxMjAzNDcsIDc3MjcsIDAsIDg0OTgsIAorICAgIDY5ODE4LCA4OTQ5LCAzMDY1LCA0MjcxOSwgNzEzNSwgMTU2OSwgOTIzNzUsIDEyNTM0LCAxMjEyNCwgNzY5MCwgMCwgCisgICAgMTI1MzMsIDk4Mzg3OSwgNjQxOCwgNDU0MywgNzgwODYsIDY5NjksIDAsIDc0ODAwLCAwLCA2Nzk3NCwgMTE5ODAsIAorICAgIDEyODY1MCwgOTgzODAxLCA2Mzg5NCwgMTIwNzYwLCAxMjI4MiwgNjYxOTIsIDAsIDc0NTkyLCA4ODUwLCA3NDI3NSwgOTIzOCwgCisgICAgMTA2MTcsIDkxNzU0NSwgMCwgOTI2MjUsIDAsIDEyNzkxLCAwLCAwLCAxMjc4NDMsIDQ0NDcsIDczNzMyLCAxMjc5MywgCisgICAgMTI5MDAsIDkyMzc3LCAxMDk1MCwgMCwgNzgwODcsIDEyNzkwLCA0MTQwMCwgMTE5MTI4LCA2NjYwNywgMTI3OTIsIDQyMjMyLCAKKyAgICAxOTQ5MzgsIDE3NDQsIDEyNzg5LCAxMDM2NiwgMTIzMTcsIDQxMzEwLCA5ODM4NjksIDQxMzk5LCAwLCAwLCA1NTI1OCwgMCwgCisgICAgMTI2OTAsIDAsIDAsIDQzNjcyLCAxMjc4NDAsIDQxNjUyLCAyOTc0LCA5MDEwLCAxMTMxNSwgMCwgMjc4LCAwLCA0MTQwNSwgCisgICAgMTE5MjU0LCAwLCAxMDA3NywgNjM4NTMsIDc0NTU3LCA0MjU4NiwgMCwgMCwgNjAwMiwgMCwgNDM1NTMsIDAsIDY3OTAzLCAwLCAKKyAgICAxMjc4NywgNDEzMDgsIDc5MzQsIDY1MzA2LCAwLCAwLCAwLCA4NjQ2LCA5ODMxODYsIDc3ODI5LCA3MTM2MCwgMCwgNjQxMywgCisgICAgNjU1MCwgMCwgMTk0MCwgMCwgNDM2MzcsIDIyMCwgNjUxOTMsIDQzNTUxLCAxMDY3OCwgMTAwNDQsIDEyODMyMiwgMCwgMCwgCisgICAgNjg2NTksIDY0MDMsIDU3MDcsIDEwMzkzLCAxMjc1MzIsIDAsIDY2NjE0LCAwLCAwLCAwLCAxMDI5NywgMCwgMzc0MiwgMCwgCisgICAgMzk1OSwgMCwgMCwgMCwgMjQ2NywgMCwgNjAwMywgNjM4NDQsIDY2NjMsIDgwNDAsIDAsIDQzNzU4LCA0MTgyLCA3ODE3MSwgCisgICAgNDY3NiwgMTIwNTAxLCAwLCAwLCAyNTEwLCAwLCAxMDIwOCwgNzgxNjgsIDkyMzYxLCAxMTU0MCwgNDM1NDYsIDY2OTIsIDAsIAorICAgIDQxMDYwLCAwLCA0NjY4LCA5MDgzLCAwLCAwLCA3ODE0NCwgMTU1OSwgNjM4MzEsIDk2NzcsIDEyMDI2MCwgMCwgNjUyNTYsIAorICAgIDAsIDc0MDcwLCAwLCAwLCAzNjUsIDEyMDU2LCA0MzAyNywgMTIwNDIzLCA0MTcxNiwgMTI4MjM2LCAwLCAxMjA0NzIsIAorICAgIDU1MTYsIDI4NDUsIDc3MTcsIDgwMzYsIDQxNzE3LCA3MzgyNywgNTQ0LCAxMjA0NSwgNjI3OCwgMCwgNTUxNSwgMCwgMCwgCisgICAgOTgzMDUxLCA2NTMzOSwgNDMyMjEsIDIyMTEsIDAsIDU1MTcsIDAsIDAsIDc0ODQxLCA2Nzg4NCwgMCwgNjc4OTAsIDY3ODg1LCAKKyAgICA2Nzg4MCwgNjc4ODEsIDY3ODgyLCA2Nzg4MywgMCwgMCwgNjc4NzksIDEyNzE4OCwgMTkwMiwgNjc4ODcsIDk2MzgsIAorICAgIDEyOTc2LCAxMjY1NDYsIDEyNDgzLCAxMjM2OCwgNDE3NjksIDQyNzI2LCA0MTc2NSwgNzM2MSwgNjY2NywgNjc4NzQsIAorICAgIDc1NTYsIDY3ODc4LCA3NDM1MSwgMTEyNjQsIDk4OSwgNDI2NzcsIDY3ODg5LCAwLCAxMzExLCA5MTc5NjYsIDQzMjYsIAorICAgIDExMDAwLCA2MzgyNCwgMTMwNjgsIDEwOTMyLCAxMjg4ODAsIDY5MTcsIDc4MTU1LCAwLCA5NDksIDc4MTYyLCAwLCA2MTQ4LCAKKyAgICA4NjA1LCA0MjI1MywgNzgxNzcsIDAsIDAsIDQyNzE1LCAwLCAwLCAwLCA2Mzg3MSwgMCwgNDE3OTYsIDEyNjksIDY1MzAsIDAsIAorICAgIDY1MDU3LCAwLCA1MTQ0LCAxMjIyMSwgNDI3MTYsIDAsIDQ0MzEsIDQzMzEsIDk4MzcyOSwgMTI4Njc1LCA0MTgzNCwgNTI3OSwgCisgICAgMCwgMTAzMzYsIDgzMTIsIDAsIDQyNzAxLCAxMjg4MjUsIDAsIDc4MTY1LCA2NjAzNiwgMCwgMCwgNjQyOCwgNDIyNzAsIDAsIAorICAgIDk4MzU5NiwgNDMwNTksIDQyNjY2LCA1MjU2LCAxMDY3LCAyNTUsIDEyMTMxLCA5ODM3MjIsIDk0OTMsIDk4Mzk2OCwgCisgICAgNDEwMTQsIDExNzkzLCAxOTQ5MjAsIDAsIDc0Mzk0LCA0MzQ2MCwgMTA2NTMsIDQyNzIzLCA5ODM4NTQsIDExOTYzMiwgMCwgCisgICAgNjU2MCwgNzAxNiwgNzQyNzQsIDk4MzYxNSwgNDM1NTYsIDM5MjksIDY3OTc3LCA2NjE0LCAyNzY4LCA5MjUwNCwgOTc0NiwgCisgICAgNTEzNSwgMTE4MTEsIDEyNzk2LCAxMTk1MywgMCwgNjk3NjEsIDUxMzksIDM0NiwgNzQzMDMsIDYzMDUsIDEyNzk1LCA0Njc1LCAKKyAgICA1MTY4LCA3ODU1MiwgMTI3NzUzLCA3NDMxNSwgNzQzNjEsIDgyNTMsIDg4MTcsIDExMzYsIDAsIDQzNTYzLCA5MjIzMiwgMCwgCisgICAgMTk0NzUwLCA3MzkyLCA4MjMwLCA5MzY1LCAwLCAwLCA5ODM2MDcsIDAsIDAsIDQwNDEsIDAsIDIzNTcsIDQzMjQwLCAKKyAgICAxMjc4NiwgMjI5LCAxMTk4ODUsIDExOTg4NCwgNDQwMDQsIDcxNDIsIDExOTg4MSwgMTIzNTAsIDY1NTU0LCAxMTk4ODIsIAorICAgIDExOTg3NywgMTE5ODc2LCAxMjc4NSwgNjM4NjMsIDQzNzk1LCA3NzcwLCAxMDcxMiwgNjQ4NTMsIDEyNjg2LCAxMTg5MTYsIAorICAgIDQyMzc1LCAwLCAxMjcyMzgsIDY2MzUyLCAxMDQ3MCwgMCwgMTEwNTksIDEwNzkxLCA5MTc5NDQsIDQ1MCwgMTE5MzI4LCAwLCAKKyAgICAxMDQzMiwgMTIwOTcsIDU0NTAsIDY0NjkxLCAxMjMzLCAwLCA0NDAwOSwgNzgyODQsIDY2MzM4LCAwLCAwLCAxODM5LCAKKyAgICAxMTg3OTksIDk4MzIxOSwgMTA5MjcsIDE3MDEsIDk4MzY2NCwgMjM4OCwgNDE3NDksIDQxNzYxLCA1NDUzLCA4MzYxLCAKKyAgICAxMTk4NjUsIDQxNzU4LCA1NDQ0LCA0MTc2MywgNjQ4ODksIDcxNDMsIDkyNDkzLCA3ODY3NywgMCwgOTI0MjksIDc4MTc0LCAKKyAgICA2NjQzMiwgODgwMSwgMzA1MywgNDM0MCwgOTgzMDQ0LCAwLCA2NTgxMiwgOTE3ODMxLCAwLCA0MTgyNCwgNjc5ODUsIAorICAgIDEyMDIwMywgMTk0ODAwLCAxOTQ4MDMsIDQyNzAwLCAxOTQ4MDUsIDEyNzk4MCwgMTk0ODA3LCA3ODY3NiwgOTIzNTYsIAorICAgIDE5NDgwOCwgMCwgMCwgNDQ5MywgNDMzNiwgMCwgMjMxNCwgNDM2MDIsIDc4ODI2LCAxMTkzMjUsIDE5NDgxMSwgNDI0MzksIAorICAgIDY0NjM4LCA0MjMyNywgNDM1MjgsIDQ0ODksIDcxMzMxLCAwLCAxOTQ3OTMsIDE5MTIsIDQyMzg1LCAxMDMwNiwgMTAzNzAsIAorICAgIDAsIDAsIDg4NjcsIDEwMjUwLCAxMDI1OCwgMjcxMiwgMTYzNSwgNzg4MjEsIDE0MTAsIDkyNjcxLCA5ODMyNTAsIDExODg3OCwgCisgICAgMCwgMCwgOTkxOSwgMTIwNTI4LCA1NTksIDEyODE1NywgNDE4MjUsIDEyNzk3NSwgNzgxODgsIDQ4OTIsIDc0MDE2LCAKKyAgICAxOTQ3ODEsIDY1NDIsIDQxOTU3LCAxMjg4NjUsIDU3NzcsIDAsIDc1OSwgNjU3NDksIDIwNzksIDY1MjQ4LCAxMjc4OCwgCisgICAgNjQ0ODcsIDY0NTUyLCAwLCAxMDIyMywgNDIwNjIsIDAsIDAsIDEyNjU3MywgMzY2OCwgNjU3NTQsIDQzNTYwLCAxMjIyNiwgCisgICAgNjc5OTEsIDY1MTQ5LCAyMzQwLCA0MTk1OSwgMTk0Nzg2LCAxOTQ3ODUsIDE5NDc4OCwgNDM2MTgsIDY1NzQ3LCAxMDkzNywgCisgICAgMjk2MiwgMCwgMjMyMSwgMzU4NywgNjU3NDUsIDkyNDM2LCA4OTIxLCA5OTUyLCAwLCAwLCA0MjcxNCwgOTk1MSwgNDM0MDksIAorICAgIDE5NDc3MCwgMjk0OSwgNjYwMTIsIDE5NDc3NSwgMTk0Nzc0LCAyOTU4LCA2ODM1OSwgNDE4MjAsIDIzMDAsIDIzOTUsIAorICAgIDEyODU2MywgOTk3NiwgMTIwMDQzLCAxMjAwNTAsIDEyMDA1OCwgNjgyMjAsIDEyODE0MywgNDI4MDksIDQyODA3LCAwLCAKKyAgICAxMjAwNDYsIDEwMTk4LCA0MTUwLCA2NDM3MSwgODMxOCwgNDE3OTAsIDY3OTc2LCA0MTg5OCwgMjM2MCwgNDE3OTQsIAorICAgIDkxNzk0MiwgNzEzMTQsIDEyNzgxOCwgMCwgMCwgMjQxOCwgOTgzMDk4LCAyNDExLCAxMTMzNiwgNzk5LCA2MzgyMywgCisgICAgMTAyNzYsIDEwMzA4LCAxMDM3MiwgOTE3NTQxLCA0MTc3MiwgNDI4MTMsIDIzMTcsIDEwMjYwLCAxMTg5ODAsIDU1Mjg0LCAKKyAgICA5MjIwMywgMCwgMTAzODQsIDk4MzIyMCwgMCwgMCwgNzc1MywgMjM1MSwgNjY1NSwgNjQ0ODksIDY5OTMxLCAwLCA3Nzg3MiwgCisgICAgNDQ0MywgNDI3NzksIDIzMCwgMCwgMCwgNDM1NDksIDQ4NTUsIDQyMTUwLCA2NTczOSwgNTQ0MSwgNDE4OTYsIDEwMjg4LCAKKyAgICAxMDMyMCwgMCwgODU1LCA3MDQ2LCA2MTA5LCA2NTA0NSwgNjM4MzksIDc4MTk4LCAyMDQ5LCAxMDA5OCwgMCwgNzQxNDUsIAorICAgIDEyNzk0MywgMTAyNjQsIDEwMjgwLCA5MTg0LCAxMDM3NiwgNzAxMywgNDQ2NywgMCwgMCwgMCwgNDE4ODcsIDAsIDQ4NjIsIAorICAgIDk3MzUsIDY1MzcsIDEyMDU5MSwgNzQyODYsIDM5MTQsIDkyMTc4LCA5Mzk3NiwgOTA2NSwgMTI5NjEsIDAsIDAsIDkyMjUzLCAKKyAgICAwLCAyODksIDAsIDQ2OTQsIDExNDIwLCA0NjkwLCAwLCAxMjA1MTQsIDkxNzk3OCwgNDY5MywgNzM4OTMsIDQyNzI0LCAwLCAKKyAgICA0Njg4LCAxMjA0NTQsIDAsIDAsIDY3OTk0LCA4MjM4LCAzMTEwLCAxMjAxNjIsIDk4MzkwOCwgMTIwMTYzLCA2NTI4LCAKKyAgICAxMjc1NTMsIDQzMDM1LCA2OTg5OCwgMjE4LCAwLCAxNTIwLCAwLCA0Nzg2LCAwLCA0MzIyNSwgNDYwMiwgMCwgNzgxNjcsIAorICAgIDEwMDg4LCA2NTQ4LCAwLCAxMjAxNTYsIDQzOTc4LCA4OTg4LCA4ODg4LCAwLCAwLCAwLCAwLCAxMDY2NiwgMCwgNzM5MDIsIAorICAgIDY5NzQwLCAwLCAwLCA5OTc1LCAxMjgwMzksIDExOTkwMiwgNDY4OSwgODkzMiwgMCwgNjU1NjAsIDExOTIwOSwgNzQ0NDEsIAorICAgIDc4ODEwLCAwLCAwLCA2Nzk4NywgMCwgMCwgMCwgNjc5ODksIDAsIDEwMDY1LCA4MjA3LCAwLCA5MjYxMywgMTI4MDExLCAwLCAKKyAgICA2NjIsIDAsIDkyNDQsIDE5NDg2MywgMCwgMTE5MjYxLCA5ODM0MjgsIDAsIDAsIDAsIDQxOTI5LCAwLCAwLCA2NjY3NCwgCisgICAgNDE5MjYsIDEyMDQwOCwgMTIwNDQzLCAxMDUxMywgNjQ2MzcsIDE5NDg2MiwgNjgwMTMsIDUyLCAxMzExOCwgNjQ3NSwgMCwgCisgICAgMTIwMzQxLCAxMjA5NSwgMTAyMjUsIDQ4MTIsIDkyNTc4LCAwLCA2Nzk5MiwgNzQwODUsIDAsIDM5NzgsIDAsIDkxNzk0NSwgCisgICAgMTI3ODIzLCAxMTU4MiwgMTIwNzYxLCAxMjI4MSwgMCwgNjU0NCwgMTMyNDEsIDkzOTYxLCA2OTc4MiwgMTI4NTU3LCAKKyAgICAxOTQ4NjAsIDExNzY1LCA2NTI1OCwgMTAzNjksIDAsIDE1ODUsIDcxOTIsIDEwMjQ5LCA0MjIsIDE1MDAsIDIwMzYsIDk4NiwgCisgICAgMTk0ODU5LCA2NDM5NCwgNTc4MSwgNTU5OSwgNjQyOTQsIDI0OTQsIDEyMDQ1MCwgNDg2MSwgNzQwMjEsIDY0MzM0LCAKKyAgICA3ODIwMywgMTI3ODA4LCAwLCA5MjI2NiwgNjUxMDIsIDg5NjEsIDY1ODQyLCAxMDI0MywgMTAyNDUsIDc0MTkxLCAxMjA0MTAsIAorICAgIDAsIDEyMDQ1MywgNjQ4MjEsIDk0NzgsIDI1MDgsIDkyNjgzLCAwLCAyMDIsIDEyODI0NiwgNzQxMzEsIDEyNDIsIDY1NTE0LCAKKyAgICAwLCA2Mzk0MCwgMTI4NzA2LCA2NDUzMywgMTIwMTI5LCAwLCA2Nzg0MiwgMTE5OTAsIDkyNDMwLCA2MzkzOSwgNDMzNzUsIAorICAgIDY1NDQwLCAyNTA0LCAwLCA3ODY3MSwgNjQ4MjksIDk4MzkxMCwgNjk0MywgOTE3OTM0LCA1ODU5LCAwLCAyODU4LCAKKyAgICA5ODMzNjEsIDc0Mjk0LCA5ODM5MTQsIDY5MjM5LCAwLCAxMTkwMjcsIDEyOTkyLCAyNzUzLCAxOTM2LCA3MDA3OCwgOTI1NzQsIAogICAgIDI3NTEsIDEyNjYyLCAyNzYzLCA4OTUzLCA2NDcwMSwgMTA3MzEsIDEyOTIyLCA3MDUyLCA5MTc4MzksIDAsIDAsIDAsIAogICAgIDYzOTIwLCA3NDEyOCwgMjg1NiwgMTE5OTEwLCA0NywgNjk5MDgsIDEyNjk4NiwgNjU4NTgsIDAsIDAsIDAsIDc4OTksIDAsIAogICAgIDg0MTcsIDQzNzk4LCA3MDcyLCAwLCAwLCA0MDMzLCAxMjgxNjQsIDQzOTkyLCAwLCAwLCAyMTIsIDY0NjAwLCAxOTAzLCAKQEAgLTE3Nzk3LDIzICsxNzgxNiwyMyBAQAogICAgIDEyNjI0LCAwLCAxNjczLCA0ODExLCA5MjM4MywgNTk4NiwgOTMzOCwgMzA0NiwgNzQ0ODAsIDU5ODUsIDkxNzkyOCwgCiAgICAgMTE5NTk4LCA5ODIwLCAwLCAxMjE4NywgMCwgMCwgNTk4NCwgMCwgNDMzMDgsIDQzOTMsIDY3NjUwLCAwLCAwLCAwLCAwLCAKICAgICA3NDgyNiwgNjQ3MzMsIDAsIDAsIDM0OTEsIDAsIDAsIDEyODIxOSwgMzUxNCwgNjU0ODUsIDAsIDc0OTIsIDAsIDc0NjA1LCAKLSAgICA5MjQ4MywgNzUxNCwgOTgzMzU5LCAwLCAxOTQ3MzEsIDc1MDIsIDc1ODcsIDY4MzUzLCAwLCAwLCA2MzkyNSwgMCwgNzYxMCwgCisgICAgOTI0ODMsIDc1MTQsIDk4MzM2NywgMCwgMTk0NzMxLCA3NTAyLCA3NTg3LCA2ODM1MywgMCwgMCwgNjM5MjUsIDAsIDc2MTAsIAogICAgIDIxOSwgMCwgMCwgNjkyLCA0MzU4OCwgNzQ0MzMsIDQxNjM1LCA0MzI0MSwgOTY4OCwgNzE0NywgOTUzNSwgMCwgOTM5OTEsIAogICAgIDAsIDY0NTMwLCAwLCA2NDYxMCwgMTE4MDQsIDAsIDcxNDksIDc0NTMsIDAsIDgwMTMsIDAsIDkyMzAxLCAwLCA4ODk1LCAKICAgICA1MjUzLCA3MDAyNSwgNTQ1OCwgMCwgMjg2NiwgMCwgMTI3ODYwLCA2NTExMSwgNjg0MzMsIDY3MDAsIDEyMDQ4NCwgMCwgCi0gICAgMTIwNTgzLCAwLCA4OTYyLCA3Nzk2MCwgOTY0MSwgNDM2OTQsIDcwNTksIDk4MzY2OCwgMCwgOTYwNCwgNzg3MDAsIDc0NDEsIAotICAgIDYzODI2LCA2Nzk3MCwgMTE4OTQxLCA2NDM5MiwgMTk0NzM1LCA5ODM2NzgsIDI4NDQsIDk4MzkzMiwgNDE5NzQsIDAsIAotICAgIDEyMTM5LCA2Nzk3MSwgMCwgMCwgMzM1OCwgNjUyOTUsIDAsIDMxMDQsIDE5NDczNCwgMCwgMTk0NzY1LCA5ODMyMjcsIAorICAgIDEyMDU4MywgMCwgODk2MiwgNzc5NjAsIDk2NDEsIDQzNjk0LCA3MDU5LCA5ODM2NzcsIDAsIDk2MDQsIDc4NzAwLCA3NDQxLCAKKyAgICA2MzgyNiwgNjc5NzAsIDExODk0MSwgNjQzOTIsIDE5NDczNSwgOTgzNjg3LCAyODQ0LCA5ODM5NDEsIDQxOTc0LCAwLCAKKyAgICAxMjEzOSwgNjc5NzEsIDAsIDAsIDMzNTgsIDY1Mjk1LCAwLCAzMTA0LCAxOTQ3MzQsIDAsIDE5NDc2NSwgOTgzMjMzLCAKICAgICA1MzA4LCAwLCAyOTAsIDAsIDAsIDI4NjIsIDI3OTIsIDE5NTA4OCwgOTgzMDcwLCAwLCAzMjY4LCA2NjU5MSwgMCwgNjU1MiwgCiAgICAgNDIzNjcsIDcwMzUsIDEyMDU1OCwgMCwgMCwgMTgxNCwgMCwgMTAyNDAsIDkyMzM4LCA3NDMwNSwgMCwgNzQ1MjgsIDY1OTAzLCAKICAgICAwLCA0MjY0NiwgNzYwNiwgMjU5MSwgMjgzNywgNDM0MSwgNzc5NTYsIDY0NDgyLCAxMjczMzcsIDgxNjMsIDY1MjcwLCAwLCAKICAgICA3NzkzMiwgMCwgOTExMiwgNzQ0MzEsIDg2MywgOTQ5MCwgMTE5ODk4LCAxMjgzNDksIDQzMzIzLCAxMjA1MTMsIDExOTg5NywgCiAgICAgOTA3MSwgMTI3MzMzLCAwLCAzNjU0LCA3Nzg5LCA5NjM3LCAwLCAyNTM1LCA2NTUwNCwgNzY1MywgNDA5OTMsIDExOTg5OSwgCi0gICAgNjY1ODcsIDE5NTA5OCwgMCwgOTI0MDEsIDk4Mzg4NSwgMTEwMDYsIDEyOTI3LCA3ODA3LCA4MDczLCAwLCAxMDYyOSwgMCwgCisgICAgNjY1ODcsIDE5NTA5OCwgMCwgOTI0MDEsIDk4Mzg5NCwgMTEwMDYsIDEyOTI3LCA3ODA3LCA4MDczLCAwLCAxMDYyOSwgMCwgCiAgICAgNzQwODgsIDMwNTYsIDEwODIzLCAxMjg3OTcsIDEyNzMyNywgODc2MiwgMTA1MDgsIDY5Njg5LCA3Mzc3MCwgNDM5NjksIAogICAgIDQzMTkzLCAxMDczNywgMzQ2MywgOTgzMDY1LCAwLCA2NjYzMywgODY5NSwgNDgxNSwgMTEzMjIsIDU4MTEsIDEyMzQ1LCAKICAgICA3MDQ5LCAxMTk5MTEsIDUxOTUsIDE5NTA4MSwgMCwgNjY2MzksIDAsIDAsIDAsIDEyODA0MSwgMCwgOTIzODUsIDEyNjIsIDAsIAotICAgIDY1NjEsIDE5OTM5LCAwLCAwLCAxMjg1MzUsIDExOTkwNiwgMCwgMCwgOTgzMDk3LCAwLCA5ODM2NTgsIDExOTkwNywgCisgICAgNjU2MSwgMTk5MzksIDAsIDAsIDEyODUzNSwgMTE5OTA2LCAwLCAwLCA5ODMwOTcsIDAsIDk4MzY2NywgMTE5OTA3LCAKICAgICA2NDYxMiwgMTE5OTEsIDAsIDAsIDAsIDE1MDIsIDkxNzU2OCwgMCwgOTEwNywgMTI3MzE2LCA1NzAyLCAzNjU1LCA2NzY2MSwgCiAgICAgODQzMCwgMCwgNzQxMzIsIDEyMDc1OCwgMCwgNzQwNTcsIDk2MDMsIDAsIDUyNTQsIDEyMDc0MiwgNzcyNCwgNzQzODgsIAogICAgIDY4Mzc1LCAxMDc5NiwgNTEyOSwgMCwgMCwgNTkwLCA3NTc5LCA1NjE0LCA1ODkzLCA5MjI4MCwgMTE3MjAsIDkyNDk2LCAKQEAgLTE3ODI3LDE3ICsxNzg0NiwxNyBAQAogICAgIDAsIDY1NTU4LCA2NTk0NiwgODExMywgNzA4NywgNTI1NSwgMTc4NiwgNjYxLCAwLCAwLCAwLCA3NDQyMywgNzEzNDUsIDU4NiwgCiAgICAgNzQ0MTQsIDY0MzU5LCAxMjY3LCAxMjgyNjksIDY1NDY4LCAwLCA2NTczMSwgMCwgMTI3MTc5LCAzNjIxLCAxMjA0NzMsIAogICAgIDY2NjY2LCA2NDIxMSwgMCwgNjU2MiwgMTI5MjgsIDAsIDEyMjgsIDY1NDkwLCAxMTM4MywgMCwgMCwgMCwgMTcxNCwgCi0gICAgNzQ0MDYsIDEyNzgzMSwgMCwgOTgzOTEyLCAwLCA2NjIyNSwgMCwgMCwgNDI2NjAsIDExNDM2LCAyMDcwLCA2NCwgMTIwNjk0LCAKKyAgICA3NDQwNiwgMTI3ODMxLCAwLCA5ODM5MjEsIDAsIDY2MjI1LCAwLCAwLCA0MjY2MCwgMTE0MzYsIDIwNzAsIDY0LCAxMjA2OTQsIAogICAgIDAsIDEwMjkxLCAxMDMyMywgMjgyNiwgMCwgMCwgMCwgNDIwMDgsIDk3MDgsIDQyNzEwLCAwLCA0MjAxMSwgNDE5OTksIAotICAgIDkyMTY0LCAxMjIwNiwgNTgzOSwgMTcwMiwgMTI0MCwgNzQwNjUsIDYyODYsIDAsIDk4Mzk2MCwgNjU4MzMsIDc3ODQ4LCAwLCAKKyAgICA5MjE2NCwgMTIyMDYsIDU4MzksIDE3MDIsIDEyNDAsIDc0MDY1LCA2Mjg2LCAwLCA5ODM5NjksIDY1ODMzLCA3Nzg0OCwgMCwgCiAgICAgMTc2NSwgMCwgMCwgNjU1ODgsIDAsIDAsIDAsIDg0MDEsIDAsIDQyMDE0LCAwLCA3MDMwLCAxOTQ3MDQsIDEwNDc5LCAKICAgICA2NDk1OSwgMjg1MiwgMCwgMCwgMCwgMCwgMTI4NTg2LCA5MTc5NTEsIDY5NjMsIDAsIDEyNjY3LCA2NDU0MCwgNzQ3ODYsIAogICAgIDEwMTQ3LCAxMjkzNSwgMTI3NTY4LCAxMjY0ODMsIDAsIDAsIDAsIDc4NzU3LCAwLCAwLCAwLCAwLCA5OTk0LCAxMjQ2NywgCiAgICAgMjg2NCwgNjQ3MTksIDExNDgsIDEwNDM1LCAxMTQ2MiwgNDE2NzUsIDcwODQsIDI3NjUsIDAsIDQzMzgyLCAwLCAxMjA3MTksIAogICAgIDEyODE4OCwgOTI1MTYsIDY2NjYyLCAwLCA3ODEzMywgOTM2NCwgMTk0Njg1LCA3NDQxNiwgMCwgMCwgNzc5ODgsIDI2MywgCi0gICAgMTA0NDksIDQxMjg4LCAwLCA0MTgzOSwgNzgzODcsIDk4MzczMywgNzc5ODYsIDAsIDY5MzEsIDY5NzIyLCA2NDM1NSwgCisgICAgMTA0NDksIDQxMjg4LCAwLCA0MTgzOSwgNzgzODcsIDk4Mzc0MiwgNzc5ODYsIDAsIDY5MzEsIDY5NzIyLCA2NDM1NSwgCiAgICAgNzE3NywgNzAxMDUsIDAsIDAsIDAsIDQyNjIsIDEwMjg1LCAxMDcyMiwgNDIwMjAsIDEyNjU3NSwgNjgwNiwgNjk5MiwgCi0gICAgNDIwMTksIDAsIDQxMjkwLCA5ODM3MDcsIDc1MCwgMCwgNzEzMDQsIDEwMTYzLCA2MzkxMywgNzEzMDAsIDcwMzIsIDU5NTQsIAorICAgIDQyMDE5LCAwLCA0MTI5MCwgOTgzNzE2LCA3NTAsIDAsIDcxMzA0LCAxMDE2MywgNjM5MTMsIDcxMzAwLCA3MDMyLCA1OTU0LCAKICAgICA2NDkzMSwgNDMxNCwgMCwgMTk4LCA2ODQ1MywgNzMwLCAxMjAwOTQsIDYzOTA3LCA3Nzk5MywgNzg4OTEsIDEzMTY1LCAKICAgICA3MTA3LCA3NDE3MSwgNDI4MDQsIDY3OCwgODI0MCwgNzgwMTUsIDEyODc4NCwgNDEzNzgsIDExMDA4LCA2OTM4LCA3MDAyNiwgCiAgICAgOTI2MzcsIDIwOTcsIDY2MjQ2LCAxMjA1NjAsIDAsIDAsIDAsIDM4OTIsIDY4NjMyLCA2OTY0MiwgNjcxMiwgNjYwNDUsIApAQCAtMTc4NDUsMzEgKzE3ODY0LDMxIEBACiAgICAgNjk2NjksIDQzMjU0LCA3MzgzMSwgMCwgMTAyOTMsIDU5NTIsIDEyODEsIDQzNzQ3LCAwLCAwLCAxMDY3NywgNjA0LCAKICAgICA0MTA5NywgOTE4MiwgMTg1OSwgMCwgOTI2MDMsIDM0MjUsIDEyNzQ4OCwgMCwgMjgzNiwgMCwgMCwgOTcwNywgMCwgNDMyMDIsIAogICAgIDAsIDAsIDY1MTk5LCAxNzM4LCA5MTc4MTgsIDEyODE1OCwgMjgzMiwgOTI3MDIsIDk2NzAsIDEyOTM3LCAwLCA2NjM3NCwgCi0gICAgOTE3OTU2LCAwLCAyODIyLCA2ODEyMiwgNDQzNiwgOTI1MTksIDk4MzcxNCwgNzM3NTIsIDAsIDY0ODcyLCA5MjM0MCwgCisgICAgOTE3OTU2LCAwLCAyODIyLCA2ODEyMiwgNDQzNiwgOTI1MTksIDk4MzcyMywgNzM3NTIsIDAsIDY0ODcyLCA5MjM0MCwgCiAgICAgMTMzMSwgMCwgMCwgMCwgMTI3MDgsIDAsIDUwOTAsIDUwODksIDEyNzk3NywgMCwgMTE5MTA5LCAwLCAxMjg2ODEsIDMxOSwgCiAgICAgMTE4ODQ3LCA0MzQ3OSwgOTQ3NywgMCwgMCwgNTA4NywgOTIzMjUsIDc2NDAsIDk2LCA1MDg2LCAwLCA5MjM3OSwgMCwgCiAgICAgNTA4NSwgNjQyODYsIDkyNjY1LCAwLCA0MTQyMiwgMCwgMTE5OTAxLCA0MjM1NiwgMzc3MiwgMCwgMCwgNTAxMSwgMCwgMCwgCiAgICAgMTI2NTg3LCAwLCAxMjcxNjUsIDEyNzI0MSwgNjY3NywgNzYwMSwgMCwgNTkxLCA2NDQxOSwgMTE4OTUzLCA5MjI2MiwgMCwgCiAgICAgMTE4OTIzLCA3MDA4NCwgMCwgMTA5MzksIDYxMDYsIDY5MzMsIDQxMjcxLCA2NzYwLCA3MTM0MywgNDUzNCwgNDEyNzAsIAogICAgIDEyODg3NiwgMCwgNjU1NzQsIDAsIDkyMjQsIDY5ODUzLCAzNjcxLCA4OTc2LCAxMjY0NzQsIDAsIDQxMjc1LCA2MzcyLCAKLSAgICAxMjgwODQsIDU1MjYxLCA3OTYzLCA2MzcxLCAwLCA1NjgsIDAsIDQxMjczLCA5ODM3MjEsIDAsIDY3MjgsIDAsIDk3MTUsIDAsIAorICAgIDEyODA4NCwgNTUyNjEsIDc5NjMsIDYzNzEsIDAsIDU2OCwgMCwgNDEyNzMsIDk4MzczMCwgMCwgNjcyOCwgMCwgOTcxNSwgMCwgCiAgICAgODI1OCwgMTE3NTMsIDc0ODIwLCAwLCA5NjAyLCAxMTg5MTksIDQyLCAwLCA0MzY4OCwgMCwgMCwgNzQ1OCwgMCwgMCwgCiAgICAgNjUzODUsIDExOTkwMCwgMCwgMTE5NTgsIDAsIDkxNzgyMiwgMCwgNjI1NCwgNDI3MjEsIDY2MzM2LCA4MDQ1LCAxMTU1MCwgCiAgICAgMCwgMCwgOTgzNTk3LCA0Mjg1OCwgMTE3ODksIDY1ODY4LCA1NTU3LCAxMDEzMywgOTczNywgMTMxMDksIDAsIDk0NjcsIAogICAgIDU1NTgsIDg4NzgsIDEyODEzNiwgMTk1MDM2LCA3NDUxLCA2NzA2LCAxMDE0NiwgMCwgOTA4NiwgNjQ1NjYsIDAsIDY0NTg0LCAKICAgICA3NDM3LCA3NDU0LCAxMjU5NCwgMTI4NjkwLCA2ODM2MiwgNDU0NiwgNzczMSwgMCwgNzAwNDgsIDc0MjQzLCAwLCAzODA1LCAKLSAgICAwLCAxOTQ1NjUsIDQ0MDAxLCA0MTAwOCwgMCwgNjMwNywgMTk5NDksIDk4Mzc4MSwgNzU0NCwgOTgzMDQ1LCA0MzQ2OSwgMCwgCisgICAgMCwgMTk0NTY1LCA0NDAwMSwgNDEwMDgsIDAsIDYzMDcsIDE5OTQ5LCA5ODM3OTAsIDc1NDQsIDk4MzA0NSwgNDM0NjksIDAsIAogICAgIDAsIDEwMTUyLCA2NDQyMiwgNjUwOTEsIDExOTExMywgNzYwMiwgNjQ3MjksIDAsIDQzNTIxLCAwLCA0MjMwMiwgNDM3MTEsIAogICAgIDQzNTIzLCA0MTQ0NywgNTU1OSwgMCwgODcwNCwgMjM5NywgNTU1NiwgMCwgMCwgMCwgOTAxMSwgOTYzMCwgOTI2MzMsIDAsIAogICAgIDkzOTk4LCA1NTA2LCAwLCAxOTExLCA2NjY1MiwgMCwgOTk2MSwgODg0NSwgNjY2OTgsIDAsIDEwNzkyLCA4ODg5LCAwLCAKLSAgICAyMDk4LCAwLCA2NDc1MSwgMCwgNjY2MjIsIDAsIDAsIDc0MzY0LCAwLCAwLCA5ODM3OTYsIDc0MzY1LCA3NTUyLCAwLCAwLCAKKyAgICAyMDk4LCAwLCA2NDc1MSwgMCwgNjY2MjIsIDAsIDAsIDc0MzY0LCAwLCAwLCA5ODM4MDUsIDc0MzY1LCA3NTUyLCAwLCAwLCAKICAgICA2NTM4NCwgNzIyMywgNDU1OSwgMCwgMTk1NiwgNDMxMzgsIDcwMjQsIDY1NzI4LCA2NDUwMSwgMTIxMCwgMTk1MDc3LCAKLSAgICA2NTE3NSwgMTAxODQsIDQzMTQwLCA0MzY1NCwgMCwgMCwgMCwgMzgsIDg1MzMsIDY2NjY5LCAxMTkxMjQsIDk4MzI4NSwgCi0gICAgOTgzNzgzLCAwLCA0MzU3LCAwLCAxMTk4MzcsIDkxNzg2MywgNzQyMzMsIDk5NjcsIDc4ODg0LCA0Mjg2MCwgMTE5ODM4LCAKKyAgICA2NTE3NSwgMTAxODQsIDQzMTQwLCA0MzY1NCwgMCwgMCwgMCwgMzgsIDg1MzMsIDY2NjY5LCAxMTkxMjQsIDk4MzI5MywgCisgICAgOTgzNzkyLCAwLCA0MzU3LCAwLCAxMTk4MzcsIDkxNzg2MywgNzQyMzMsIDk5NjcsIDc4ODg0LCA0Mjg2MCwgMTE5ODM4LCAKICAgICAxMDk0MSwgNjU3MjEsIDY5NjIsIDAsIDAsIDExOTMyNCwgMCwgMTEwMTQsIDEyNzk3MiwgODk0MiwgMTIwMDAsIDY5MjI0LCAKICAgICA5MjI2NywgMTI4NTM2LCAxMTk3NCwgOTIyMTMsIDQyNzcyLCAxMjc1MTgsIDExNjUwLCA1MDEzLCA5MjY2MywgMTI2NTgzLCAKLSAgICA2NjIxMCwgMTE4OTE0LCA2NjEzLCA5MjQ3NiwgMCwgNDM4MTksIDk4Mzc2MSwgMCwgNjQ3MTQsIDAsIDAsIDEyMTYyLCAKLSAgICAxMjEyMCwgNDM0NzYsIDk4Mzc1NywgMTEwMjQsIDc0ODExLCA2NjIyOCwgMTA1NjMsIDAsIDEyNzE5NiwgNDM1MjIsIDI0NjIsIAorICAgIDY2MjEwLCAxMTg5MTQsIDY2MTMsIDkyNDc2LCAwLCA0MzgxOSwgOTgzNzcwLCAwLCA2NDcxNCwgMCwgMCwgMTIxNjIsIAorICAgIDEyMTIwLCA0MzQ3NiwgOTgzNzY2LCAxMTAyNCwgNzQ4MTEsIDY2MjI4LCAxMDU2MywgMCwgMTI3MTk2LCA0MzUyMiwgMjQ2MiwgCiAgICAgMCwgMTgzNywgMCwgNjM5NzIsIDY5NTcsIDAsIDEyMDU1OSwgNDk1MiwgNjU3MTgsIDY1ODI3LCA1NTA0LCA2NTcyMCwgCiAgICAgNjU3MTQsIDY1NzE1LCA2NTcxNiwgMCwgMTI3MDA1LCAxMjcxMTksIDMxMDksIDYzOTc1LCA3NDAyOCwgMCwgODEwNywgCiAgICAgMTE5MjM0LCAxMTI3LCA0NTUsIDAsIDYzOTY4LCAxMjc5MjQsIDM0ODMsIDExOTU5MywgMTk4OSwgMCwgNjk2NzgsIDkxMDQsIApAQCAtMTc4ODIsNyArMTc5MDEsNyBAQAogICAgIDQxODY5LCAxMjYxOSwgMCwgMTAxNTQsIDk4MzA0MywgNzQ0MzksIDIwMzksIDAsIDc0NDYsIDE2ODQsIDYzOTc5LCAxMDk3NCwgCiAgICAgNDU4LCAxMjA2MjAsIDAsIDY5NzkxLCAxMjcxNjEsIDExOTE2LCA2NTAxNiwgMCwgNjk2NzEsIDQyMTE1LCA5ODMxMzMsIAogICAgIDEyMjg4LCA3ODA1NywgMCwgMTQ5MywgNDIxMTEsIDc1NTMsIDQwOTcsIDEyODE5OSwgMTMwODAsIDAsIDY1ODA4LCA2NjEwLCAKLSAgICA2MDMwLCA4MDU5LCA3NTA4LCAxMzEzMSwgMCwgOTgzNDIzLCAwLCA4Nzk0LCA0MTI3OCwgNDE2MjksIDEyMTU0LCAxMjgxOTIsIAorICAgIDYwMzAsIDgwNTksIDc1MDgsIDEzMTMxLCAwLCA5ODM0MzEsIDAsIDg3OTQsIDQxMjc4LCA0MTYyOSwgMTIxNTQsIDEyODE5MiwgCiAgICAgNDEyNzcsIDY0NjU4LCAwLCA2NDM4MCwgNjYyNSwgNzQzNTQsIDE5OTA0LCAwLCAwLCAwLCA2NTM3MSwgNzA3OCwgMCwgODMzLCAKICAgICAwLCA2MzY5LCAwLCAxMDk3OSwgNDE5NTMsIDAsIDQxNDM0LCA2MDYyLCAwLCAwLCAxOTkxNiwgNjkxMywgOTMzLCAxMzQxLCAKICAgICA5ODQyLCA2NzIwLCA2NTc0NCwgMCwgOTgzNTkyLCAxMjgyOTUsIDAsIDc0MDUsIDEwMTA1LCA2NTgxMCwgMCwgNDE2MzIsIApAQCAtMTc4OTcsMjMgKzE3OTE2LDIzIEBACiAgICAgNjc0MSwgNDMwNDcsIDAsIDEzMTgwLCAxMjg1MTcsIDQxOCwgOTE3OTcyLCA2NDQ5NSwgMTAyOTUsIDEwMzI3LCAxMDM5MSwgCiAgICAgNDE3NTIsIDc0MzM5LCA4NjQxLCA0MTQ0OSwgMCwgNzQxMDAsIDAsIDEwOTExLCA2OTQyLCAwLCAxMDI0LCA0Mjg0OSwgCiAgICAgNDE3NTEsIDY5Nzc2LCA4OTQxLCA5ODM1NTYsIDQ1NTQsIDAsIDkwMjMsIDExNjg1LCAwLCA5OTI4LCA3ODYxNywgMCwgCi0gICAgMTE0MzcsIDQzNzQxLCA5MjE2MywgMTIwNzAwLCA2Mzk2NywgOTgzNDc1LCA0MTIwNiwgMTIwNzI0LCA5MDQ5LCA0MTE4NSwgCisgICAgMTE0MzcsIDQzNzQxLCA5MjE2MywgMTIwNzAwLCA2Mzk2NywgOTgzNDgzLCA0MTIwNiwgMTIwNzI0LCA5MDQ5LCA0MTE4NSwgCiAgICAgNDMxNjYsIDAsIDExNjgwLCA5MjYxOSwgMTE2ODYsIDc4NTQ0LCA2NTIyNCwgNDU2NSwgNDY1NSwgMTE5NTUzLCAwLCAKICAgICA5MjE4MywgNjQ1MjMsIDEwMzQzLCAxMDQwNywgMCwgNjY2NzEsIDExNDY2LCAwLCAxMjgwMDMsIDQyODkwLCA3NDAxMywgCiAgICAgMTIwNTAsIDY4MjAxLCAyODYwLCAwLCAwLCAwLCA0Mjc5MiwgNTc0MywgMTA0MjQsIDEyMDY1LCA0Mjg3MiwgMCwgOTIzNDIsIAogICAgIDAsIDg4NzUsIDAsIDAsIDkxNzk5MSwgNzUzMSwgMTI4NDcsIDI0MTMsIDAsIDc4NjM1LCA5NjIsIDAsIDEyODU1LCA0MTE5NiwgCi0gICAgNDI1NjQsIDAsIDE1ODIsIDk4MzcwNiwgNTUwOCwgMCwgMCwgMCwgMTA4MDEsIDY5ODc2LCA5MjM1NCwgMCwgNzE3MywgNDk2LCAKKyAgICA0MjU2NCwgMCwgMTU4MiwgOTgzNzE1LCA1NTA4LCAwLCAwLCAwLCAxMDgwMSwgNjk4NzYsIDkyMzU0LCAwLCA3MTczLCA0OTYsIAogICAgIDEwNDM5LCA0MzEzLCA2NDYwNywgNjk2MzgsIDc4NjAsIDAsIDkwNiwgNDI3OTMsIDI4NDIsIDY0MDUsIDY0NzIyLCAxMzEzMiwgCiAgICAgNzk4LCA2NDY5NCwgMTI4MDEsIDg0MDYsIDExNTMsIDkyMTczLCA2NDc4OCwgMCwgODA1NCwgOTE3NCwgMTI4NjUyLCAKICAgICA5MTc5NzYsIDk5NjQsIDc0NDA5LCA0MTYxMSwgNDY0MiwgNjY1NzQsIDExNTU2LCA5MTc5ODIsIDAsIDc4ODU3LCA0MjA4OSwgCiAgICAgNzg4NTUsIDkwMDgsIDAsIDEyNjU5MiwgMTk1MDk2LCA0MjA3OSwgOTE3OTgxLCA3NzkyNCwgNDI1MTMsIDc3OTI3LCAKLSAgICA0Mjg0MiwgNzM5ODUsIDY1Mjg1LCAxMTg5NzQsIDEyNzAwMywgOTgzNjkzLCAwLCAwLCAwLCAxMTMzNSwgNjQwNjksIAotICAgIDQyMDkzLCAzOTIwLCAwLCAwLCAwLCAwLCA0NTgwLCA0MTk2NywgOTgzNzIzLCA2NDM4NCwgOTIxNjcsIDkzOTg0LCAzMDIxLCAKKyAgICA0Mjg0MiwgNzM5ODUsIDY1Mjg1LCAxMTg5NzQsIDEyNzAwMywgOTgzNzAyLCAwLCAwLCAwLCAxMTMzNSwgNjQwNjksIAorICAgIDQyMDkzLCAzOTIwLCAwLCAwLCAwLCAwLCA0NTgwLCA0MTk2NywgOTgzNzMyLCA2NDM4NCwgOTIxNjcsIDkzOTg0LCAzMDIxLCAKICAgICA0MjAwNCwgMCwgMCwgNDIzMTcsIDQxOTk4LCAwLCA2OTQ2LCAwLCAwLCAwLCAxMjgxOTMsIDY1MjA0LCAwLCA2ODExMywgCiAgICAgNDI2OTAsIDk4ODAsIDQyMDEwLCA3NDgyNCwgNjQ1ODksIDEwMTExLCA2NDg3NSwgMTI3ODgwLCA2ODM5OSwgNDM5OTgsIAogICAgIDExMzYwLCAwLCAwLCAwLCAxMTg4MjYsIDQyMTQ5LCAwLCAwLCAwLCA2NDk0MSwgNzc5MTksIDEyMDQyMSwgMTI4MDc3LCAwLCAKICAgICA1NTI0NywgNDExMCwgNjYwMDUsIDY5NTksIDEwOTI5LCAxMTkxMTAsIDAsIDY2NzAzLCA3NzkyMSwgODYxNywgNDE5ODIsIAotICAgIDYwMjUsIDY5MjQyLCA5ODMxNzYsIDAsIDAsIDAsIDk1OTcsIDQyMDk5LCA0MzE3MiwgOTgzMzY4LCAxMDExNywgOTgzMTY5LCAKKyAgICA2MDI1LCA2OTI0MiwgOTgzMTc2LCAwLCAwLCAwLCA5NTk3LCA0MjA5OSwgNDMxNzIsIDk4MzM3NiwgMTAxMTcsIDk4MzE2OSwgCiAgICAgOTIyOTcsIDQxNjM2LCAwLCAwLCAxMjA2ODEsIDgzMDEsIDAsIDAsIDE4NywgMCwgNjU2NjksIDEyODMzOSwgNDk2MywgMCwgCiAgICAgMTI3NTE3LCAwLCA4OTY0LCA2NTY3NiwgNzc3NSwgMCwgNDE5NDgsIDAsIDAsIDAsIDQxOTQyLCA2NTQ0OSwgMzE2MCwgCiAgICAgMTAwODEsIDEzMjI2LCA0MjEyMSwgNDI0NzUsIDQyNjYzLCAxMjgyMTAsIDQxNzY2LCAxMTkxMTQsIDY1ODgyLCA3ODg0OSwgCkBAIC0xNzkyMywyMCArMTc5NDIsMjAgQEAKICAgICAzMTAzLCAwLCA0MTc1MywgMTI4NTQwLCAwLCAwLCA3ODg0NCwgNzg4NDUsIDQxNzM5LCA3ODg0MywgNDI1MTUsIDEwOTMxLCAKICAgICA0MTc1NiwgNDMzNDcsIDQyNTYwLCA1MzkxLCA0MTc0NiwgMTE5MTQ3LCA5MjU5MSwgNDEyNTksIDU1NjEsIDY5OTMwLCAKICAgICAyNjkxLCAwLCA2NTU1MywgNzkzMywgNTU2MiwgNjk4MDAsIDEyODI2NSwgNDEyNjIsIDEyODE0NiwgNjQ0MjEsIDc0ODQ2LCAKLSAgICA0MTI1MSwgMCwgMCwgMzk3OSwgMCwgMCwgNzQ4MTMsIDk4MzczMCwgMCwgMCwgMCwgOTI1MjQsIDQxMjY2LCAwLCA2NjU2NiwgCisgICAgNDEyNTEsIDAsIDAsIDM5NzksIDAsIDAsIDc0ODEzLCA5ODM3MzksIDAsIDAsIDAsIDkyNTI0LCA0MTI2NiwgMCwgNjY1NjYsIAogICAgIDEyODgzNiwgMTA1ODUsIDY1NzQxLCA0MTczNywgOTU3NCwgMjY2NiwgMCwgNDE3MzgsIDgzMSwgNDE5LCAxMzEyNiwgCiAgICAgMTA3MTYsIDAsIDQyODIyLCAwLCA2NDM0LCAwLCA2OTM5LCA3NzY2LCA2NDMyLCAxMjgxMDYsIDY5OTMyLCA5MTYsIDc2OSwgCiAgICAgNDE3NDIsIDExOTY4LCA3NDgwNSwgNjQzMywgNTU2MywgNTQ3LCAxOTQzLCA2NDM5LCA1NTYwLCA0OTk0LCA0ODcsIAogICAgIDEyNjUzNywgNDQ5NywgMzc1NCwgMTI3MDU2LCAxMjA0MjQsIDkwMzksIDAsIDQxNzc2LCAwLCA4NzE2LCAxNTk1LCA0MTYxNSwgCi0gICAgMCwgMCwgNzQyNjAsIDAsIDQyODU0LCA0MzIxOSwgMTI4NzA5LCA5ODM0NTIsIDEyMTg1LCAxMjg4NzksIDcwMDcyLCAKLSAgICA2ODM1NSwgNjgzNTcsIDAsIDQyODU2LCA4NjM0LCAwLCA5ODMzODksIDQyMDksIDEyMDcwMiwgMCwgNjU4NzksIDQxNTM4LCAKLSAgICA2NTYxMiwgMTI3NTQzLCA2NjksIDU2NzksIDAsIDY5Nzg2LCA5MjU0MCwgMCwgOTgzNDU2LCA1Njc4LCAxMTgyMSwgMCwgCi0gICAgNjcxMSwgNDYwLCAwLCAwLCA5ODM0NTMsIDAsIDEyMDc0NywgMCwgMCwgNzgwNTAsIDExOTAyMiwgMCwgOTgzNDU0LCAwLCAKKyAgICAwLCAwLCA3NDI2MCwgMCwgNDI4NTQsIDQzMjE5LCAxMjg3MDksIDk4MzQ2MCwgMTIxODUsIDEyODg3OSwgNzAwNzIsIAorICAgIDY4MzU1LCA2ODM1NywgMCwgNDI4NTYsIDg2MzQsIDAsIDk4MzM5NywgNDIwOSwgMTIwNzAyLCAwLCA2NTg3OSwgNDE1MzgsIAorICAgIDY1NjEyLCAxMjc1NDMsIDY2OSwgNTY3OSwgMCwgNjk3ODYsIDkyNTQwLCAwLCA5ODM0NjQsIDU2NzgsIDExODIxLCAwLCAKKyAgICA2NzExLCA0NjAsIDAsIDAsIDk4MzQ2MSwgMCwgMTIwNzQ3LCAwLCAwLCA3ODA1MCwgMTE5MDIyLCAwLCA5ODM0NjIsIDAsIAogICAgIDc3ODIsIDkwNDQsIDQ5NzQsIDExNzYwLCA3ODQ5NCwgNzU3NywgNjU3MTEsIDQxOTEyLCAxMjE2LCAwLCAxMjgwNzksIAotICAgIDU3OTIsIDAsIDAsIDc4NTAxLCAwLCAyOTMzLCAxMjI0NCwgMCwgNTY4MywgOTgzMzg0LCAwLCA3ODExOSwgMTU0OSwgMCwgMCwgCisgICAgNTc5MiwgMCwgMCwgNzg1MDEsIDAsIDI5MzMsIDEyMjQ0LCAwLCA1NjgzLCA5ODMzOTIsIDAsIDc4MTE5LCAxNTQ5LCAwLCAwLCAKICAgICAxMjAzOTgsIDU2ODIsIDYyMDYsIDg2NzAsIDEwMjU2LCA1NjgwLCA2OTkzNSwgMTAwMDEsIDEyODUxMiwgNjk3NjgsIDE0NDksIAogICAgIDEwMjQxLCA3ODI5MCwgMTI4MjI4LCAwLCAxMDU1MiwgNjQzNDIsIDQxOTIyLCAxMjg1NDgsIDg1ODQsIDY4MDMwLCA1NTY3LCAKLSAgICAyNzE3LCAwLCAwLCA1NTY0LCA0Mjg4NiwgNDE5MDgsIDQyODgyLCA1NTY1LCA5ODMyNDgsIDEyODAyNiwgMCwgNjU3MDgsIAorICAgIDI3MTcsIDAsIDAsIDU1NjQsIDQyODg2LCA0MTkwOCwgNDI4ODIsIDU1NjUsIDk4MzI1NiwgMTI4MDI2LCAwLCA2NTcwOCwgCiAgICAgNjU3MDksIDU1NjYsIDY5ODAzLCA2NTcwNCwgNjU3MDUsIDExOTA0LCA0Mjg3NSwgNDMzNzMsIDQyNTM5LCA1OTQyLCA4NDY4LCAKICAgICAxMjA1NjEsIDEwMzYxLCAxMDQyNSwgNjU2OTcsIDY1Njk4LCA2NTY5OSwgMCwgNjY1OTgsIDAsIDY0NjY0LCAxMDY0NywgCiAgICAgNzg3MDIsIDc4NzAzLCA3ODY5MCwgNDU3LCA3ODUwMiwgNjU3MDEsIDE5MzQsIDQzMDA2LCAxMTk5MDMsIDg4MDIsIDc4NzEwLCAKQEAgLTE3OTUwLDE0ICsxNzk2OSwxNCBAQAogICAgIDExOTU3MCwgNDIyMzksIDg1MzYsIDc4NzQwLCA3ODMyNCwgNzg3MjYsIDc0NDMyLCA3MjQsIDAsIDE0NTUsIDc4NzQ5LCAKICAgICA3MTgzLCA2NDU4MywgNzg3NDcsIDY4NDQzLCA0MTc1LCA3ODc0MSwgNDM2MTQsIDY5ODAxLCA5MzksIDAsIDQzNTIwLCAKICAgICA2ODYxMywgNzQ1NjksIDkxNzk1OCwgMCwgNzg3NjMsIDc4NzY0LCA3ODc2MCwgMTA3ODgsIDYwODgsIDc4NzU5LCA3ODc1NSwgCi0gICAgMTkwLCAwLCAxMjU5MywgMCwgODE4OCwgNjQ0MDgsIDAsIDQ0MTcsIDk4MzIxMSwgOTIyNjEsIDYzNzAsIDAsIDc4MjcsIAorICAgIDE5MCwgMCwgMTI1OTMsIDAsIDgxODgsIDY0NDA4LCAwLCA0NDE3LCA5ODMyMTMsIDkyMjYxLCA2MzcwLCAwLCA3ODI3LCAKICAgICA2ODQ0MSwgNjk2NSwgMCwgMCwgMTMyMDEsIDEyODIwNSwgNjk4OTYsIDAsIDc0MzgyLCA3Mzc4MSwgNzkxOCwgNzM5ODgsIDAsIAotICAgIDAsIDkxNzg4NCwgMTcyOCwgMCwgNDM3NjQsIDE3OCwgMTI5NzIsIDkyNjc5LCAwLCA5MTc4ODcsIDkyNTYzLCA5ODMzNzMsIAorICAgIDAsIDkxNzg4NCwgMTcyOCwgMCwgNDM3NjQsIDE3OCwgMTI5NzIsIDkyNjc5LCAwLCA5MTc4ODcsIDkyNTYzLCA5ODMzODEsIAogICAgIDAsIDc4MzI3LCAxMjA0MDUsIDY1NjkwLCAwLCAwLCAxMTkwNTQsIDAsIDkyNTIsIDkxNzg4OSwgNDY1MiwgNjgzNzEsIDAsIAogICAgIDAsIDAsIDEzMDY1LCA5OTIzLCAxMDgwNiwgMCwgMTE3NjMsIDcwMDE2LCAxMjA2ODgsIDY3MjMsIDc4MTg3LCAwLCA2OTkzLCAKLSAgICAwLCAwLCA4MzMzLCAwLCAwLCAxMTM5MCwgMCwgNzQ0NjQsIDAsIDkyMzIwLCA3NDA4MCwgOTgzMzA3LCA2OTkxMSwgMTE5MTAsIAorICAgIDAsIDAsIDgzMzMsIDAsIDAsIDExMzkwLCAwLCA3NDQ2NCwgMCwgOTIzMjAsIDc0MDgwLCA5ODMzMTUsIDY5OTExLCAxMTkxMCwgCiAgICAgOTI1NTksIDgyNzgsIDg5NjMsIDQwMzQsIDEyODU2MCwgMCwgNjUzNDQsIDEyMDUxNywgNDE3NDcsIDAsIDAsIDg2NzcsIDAsIAotICAgIDEyNzA3LCA5MzUwLCA2NjAzNywgMTI4MTgwLCA4ODM2LCAxMjMxNSwgMTI3NDcsIDgzMDAsIDk4Mzc0MSwgMCwgNzQ5MSwgCisgICAgMTI3MDcsIDkzNTAsIDY2MDM3LCAxMjgxODAsIDg4MzYsIDEyMzE1LCAxMjc0NywgODMwMCwgOTgzNzUwLCAwLCA3NDkxLCAKICAgICA4ODU2LCA3MTM2MSwgMCwgNDMxNTAsIDEyNzc2OCwgMTIwNDA0LCA2NTM4OSwgMTIwNDAyLCAxMjA0MDMsIDEwODEzLCAKICAgICAyNTkyLCAxMjg1MywgNDMyNjksIDcyNjMsIDEyMDI0NCwgNjUzNiwgMTIwMjM4LCAxMjAyMzksIDY1NTE2LCAxMjMyMSwgCiAgICAgMTIwMzkxLCAxMjAzODgsIDU1Mjg3LCAxMDAwNywgMTIwMjQ2LCA5NTg4LCAxMjAyNDgsIDE1OTYsIDEyMDM4MywgNDE5OTQsIApAQCAtMTc5ODIsMjcgKzE4MDAxLDI3IEBACiAgICAgMTE2LCAxMjk5OCwgMTIyLCAxMjEsIDEyMCwgMTExLCAxMTAsIDEwOSwgMTA4LCAxMTUsIDExNCwgMTEzLCAxMTIsIDEwMywgCiAgICAgMTAyLCAxMDEsIDEwMCwgMTA3LCAxMDYsIDEwNSwgMTA0LCA2NDM2LCA3Mzk3NCwgNTM0LCA0MTIxMiwgNzc5MzEsIDE1MzYsIAogICAgIDY0MDkzLCA3Mzk3MCwgNzc5MzAsIDEyNzE1NywgMCwgNjAyMCwgMTI3MTYsIDEyNzExMiwgMTI3NDQsIDQ3NSwgMTIwMzk0LCAKLSAgICAxMzI2NiwgMTI3ODEzLCAxMjcxMTEsIDAsIDczOTI2LCAwLCAxMDY0NSwgMTIxMiwgNjU0MywgOTgzMjk5LCA4MTM0LCAKLSAgICAxMjgwMjgsIDI5MTMsIDczODcwLCAxMjcxMTMsIDE4NjYsIDAsIDE5NTA5NSwgMCwgODkyMywgMTY0NSwgMTIwNTksIAorICAgIDEzMjY2LCAxMjc4MTMsIDEyNzExMSwgMCwgNzM5MjYsIDAsIDEwNjQ1LCAxMjEyLCA2NTQzLCA5ODMzMDcsIDgxMzQsIAorICAgIDEyODAyOCwgMjkxMywgNzM4NzAsIDEyNzExMywgMTg2NiwgOTgzMjI5LCAxOTUwOTUsIDAsIDg5MjMsIDE2NDUsIDEyMDU5LCAKICAgICA2NjU4NSwgNzEyOTcsIDMxOTYsIDAsIDAsIDU5MzUsIDEyNTAsIDEyNzA2NiwgODE3NCwgOTc4NywgNjczMywgOTg1OSwgCiAgICAgNzkxNiwgOTg2MSwgOTg2MCwgNTI1OCwgMTg4MiwgMTg5MiwgNjczMSwgMTA4ODIsIDQwNSwgMTE0NTQsIDczOTExLCAwLCAKICAgICAxMjg3ODEsIDQxMTY5LCA4OTM5LCA0MTI0NSwgMCwgNDExNzAsIDE0NTQsIDExMzY5LCA2NDc3LCAxMjE1NywgMCwgMCwgMCwgCi0gICAgNDExNzIsIDc4NTUsIDAsIDAsIDEwNDgwLCAwLCAwLCA3NzkzNiwgODI2NCwgMTI2MTAsIDk4MzMwMCwgNjQ1LCAxMjY2MTYsIAorICAgIDQxMTcyLCA3ODU1LCAwLCAwLCAxMDQ4MCwgMCwgMCwgNzc5MzYsIDgyNjQsIDEyNjEwLCA5ODMzMDgsIDY0NSwgMTI2NjE2LCAKICAgICA3NjA5LCA0MDk3MywgNjk5NDMsIDczODMzLCA2OTk0OCwgNTgyNCwgOTg0LCA3NzkxOCwgMTA2ODgsIDU4NTEsIDAsIDc3MjksIAogICAgIDczOTgyLCAxMjA1MTgsIDAsIDE5NTA4NiwgNDMzNjksIDAsIDEyODE0MCwgNjg0MTUsIDk4MzA5MywgNDUzOCwgMTIwNDA2LCAKLSAgICA0MzE0MSwgMCwgOTgzMjA4LCA3NDIxNCwgNzM4ODYsIDAsIDAsIDExODkwMiwgNDMwMDUsIDc4NDQ4LCA5NTUyLCAwLCAwLCAKKyAgICA0MzE0MSwgMCwgOTgzMjEwLCA3NDIxNCwgNzM4ODYsIDAsIDAsIDExODkwMiwgNDMwMDUsIDc4NDQ4LCA5NTUyLCAwLCAwLCAKICAgICA5ODMxNTksIDEyOTk3LCAwLCAwLCAwLCAwLCAyMzgxLCAxMjg4MywgMTA5OTQsIDEwNTI5LCA0MTkwNiwgMCwgMCwgMCwgCiAgICAgMTI0MjUsIDEwNjYxLCAxMDg1NiwgOTYxNCwgMjQyOCwgNDE0NzgsIDg1ODIsIDEwMDY0LCA3MzkzMCwgMCwgMCwgMCwgCi0gICAgNjQ4OTYsIDExOTE2MiwgMTk1MiwgOTIxODEsIDg0NTUsIDEwMDgyLCAxMTU3NSwgOTgzNDgyLCAxMTk1NjYsIDAsIDEyODA4LCAKKyAgICA2NDg5NiwgMTE5MTYyLCAxOTUyLCA5MjE4MSwgODQ1NSwgMTAwODIsIDExNTc1LCA5ODM0OTAsIDExOTU2NiwgMCwgMTI4MDgsIAogICAgIDEyMTgzLCA2MTQ1LCAxMTg5NTUsIDY0OTI5LCA5MjQzMywgMCwgOTgzMTkzLCA0MzE4NiwgNDI1MDksIDAsIDM5MjIsIAogICAgIDkxODcsIDk4MzYxNCwgMCwgMTAxOTEsIDExOTA1NywgMTE3NTIsIDMzNTMsIDkzNTgsIDAsIDcxMzY2LCA2NjY4MCwgCi0gICAgMTIwMDkwLCA4MjQ4LCA3OTMxLCA4NTU4LCA5Nzk1LCA2ODM4MCwgOTgzMjg5LCAwLCAxMjAwODIsIDEyMDA4MSwgMTIwMDg0LCAKKyAgICAxMjAwOTAsIDgyNDgsIDc5MzEsIDg1NTgsIDk3OTUsIDY4MzgwLCA5ODMyOTcsIDAsIDEyMDA4MiwgMTIwMDgxLCAxMjAwODQsIAogICAgIDQxMDI3LCAxMjAwODYsIDAsIDEyMDA4OCwgNzM2NiwgNzAxOSwgMTIwMDczLCAwLCAxMTc1MSwgMTIwMDc4LCA3ODI5NCwgCiAgICAgNjQ2NTcsIDg2NTcsIDEyMDA0OCwgODU5NCwgMTIwMDY4LCAwLCAwLCAxMjAwNjksIDEyMDA3MiwgMTIwMDcxLCAwLCAwLCAKICAgICA0MzE1NCwgNDEwMjksIDAsIDExMzMyLCA2NTM4MCwgNzcyOCwgOTQwNzcsIDExMjk0LCAwLCA2NjY2NSwgNzg1MSwgMCwgCi0gICAgODM3NSwgODY5OSwgMCwgNDI1MjQsIDAsIDkwODUsIDk0MDQxLCA3NTA0LCA5MzI3LCA2MTYwLCAxMjgwOTUsIDk4Mzg1NSwgCisgICAgODM3NSwgODY5OSwgMCwgNDI1MjQsIDAsIDkwODUsIDk0MDQxLCA3NTA0LCA5MzI3LCA2MTYwLCAxMjgwOTUsIDk4Mzg2NCwgCiAgICAgMCwgODA4OCwgMCwgNzQwMTIsIDkyNTAwLCAwLCA0NDM5LCA2OTI2LCA5ODMwNDcsIDEyOTI0LCAxMjgyMjcsIDQyMzY5LCAKLSAgICA0MzUwLCA2NTQ5MSwgNjUxNDUsIDkwNDEsIDQzNTU5LCA2NDU3NywgMTA4MjYsIDAsIDExMjk2LCA5ODMyNzUsIDAsIDAsIAorICAgIDQzNTAsIDY1NDkxLCA2NTE0NSwgOTA0MSwgNDM1NTksIDY0NTc3LCAxMDgyNiwgMCwgMTEyOTYsIDk4MzI4MywgMCwgMCwgCiAgICAgNjU4MjUsIDk1NzcsIDY4MTk5LCAwLCA2NDY3MCwgOTgzMTIxLCA3ODA1NiwgNjc5MywgMTEyOTUsIDAsIDc4MDUzLCAKICAgICA3Mzg3MiwgMCwgMCwgMTA5MDIsIDAsIDAsIDc4MDcwLCA3ODA2OCwgMTA0NzIsIDI5OTUsIDAsIDAsIDY0NjgyLCAyMzcxLCAKICAgICA3ODA2OSwgMTIwODA4LCAyNTksIDEwMDksIDkyMTcxLCAyNDAyLCAyMzMzLCA2NDQwLCAxOTQ3NDEsIDAsIDY1MTI1LCAKQEAgLTE4MDEwLDE5ICsxODAyOSwxOSBAQAogICAgIDEyNzA3MCwgNDEyNjEsIDExOTM2MiwgNDM2NDAsIDg2MTMsIDAsIDk0MDQ5LCA2NzM2LCAxOTUwOTIsIDQxNDkyLCAxMjAwNSwgCiAgICAgNjk5MjcsIDAsIDE4OTAsIDEyMDA1NiwgMCwgMCwgMCwgNzI5MywgNzk5MSwgMCwgMTA1NzgsIDAsIDc4MDc2LCAxOTQ3MzgsIAogICAgIDc4MDc3LCA2OTkyOCwgMCwgNzg4MDAsIDkyNjUzLCA2NDQ0NSwgNDI2NjgsIDY2MzUsIDAsIDYxNjQsIDY1MTcwLCAwLCAwLCAKLSAgICA3Njc2LCAxMTY2NCwgMCwgOTgzNjQ5LCA2OTcwNywgMCwgMTE4ODEyLCAwLCAwLCAxMjgwNDUsIDkxNzUsIDExOTI1LCAKKyAgICA3Njc2LCAxMTY2NCwgMCwgOTgzNjU4LCA2OTcwNywgMCwgMTE4ODEyLCAwLCAwLCAxMjgwNDUsIDkxNzUsIDExOTI1LCAKICAgICA3ODA0NSwgOTA4OCwgMCwgNjQ1NDUsIDEzOTYsIDAsIDc1NDYsIDM4NDcsIDEyNzE3NywgMTI3ODM1LCA0OTg1LCAxMzI4OCwgCiAgICAgNjcyLCA4MDk4LCA0MzE5NiwgMTk0NzQ2LCA5ODMwOTYsIDEyODEyNiwgNDI2NTUsIDc0MDQzLCA2NTA3MiwgMTU3NywgCiAgICAgMTE3NzIsIDEzMDQxLCA1OTI4LCA0NTI1LCAxMDY1OCwgNjU5MTEsIDEyNjYsIDEwMTgwLCAwLCAxMjg1ODQsIDEyNjIyLCAwLCAKICAgICAwLCAwLCAxOTQ3MTQsIDEyNzEzOSwgMTMzMTAsIDc3MywgMTk5MzMsIDE1MzksIDAsIDEyNjk4MywgNDI3MzEsIDY3OTcyLCAKICAgICAwLCAwLCAwLCAzMDUxLCA1ODYyLCA3ODIzLCA5MjQ3OCwgMCwgMTIwNDExLCAzMjUwLCA0Mzk5MSwgNjk2ODcsIDY2NjQ5LCAKLSAgICA5NTEwLCA2NjIzNywgOTgzMjk0LCAwLCA0MTA2NiwgNjQ2NzMsIDkxNzk2MywgOTE3OTY0LCAwLCAzNTA1LCA4NzA3LCAKKyAgICA5NTEwLCA2NjIzNywgOTgzMzAyLCAwLCA0MTA2NiwgNjQ2NzMsIDkxNzk2MywgOTE3OTY0LCAwLCAzNTA1LCA4NzA3LCAKICAgICA5MTc5NjgsIDY3MjUsIDEyODAxMywgOTE3OTcxLCA5MjMxNCwgMzQ3MSwgOTE3OTcwLCA1NDc5LCA4ODIsIDY2ODYsIAotICAgIDExOTU4NCwgMTE2MTMsIDEyMDc3MiwgNDI3NTQsIDAsIDk4MzI5OCwgOTI2OTYsIDAsIDAsIDAsIDEyODUyMywgMzIyNSwgCisgICAgMTE5NTg0LCAxMTYxMywgMTIwNzcyLCA0Mjc1NCwgMCwgOTgzMzA2LCA5MjY5NiwgMCwgMCwgMCwgMTI4NTIzLCAzMjI1LCAKICAgICA5MTc5OTYsIDQ0MzMsIDQxMTU2LCA0Mzk3MywgNDMxNzMsIDE0NDMsIDQzODEsIDAsIDAsIDEwOTI2LCAxMTc1NiwgMTE3NTcsIAogICAgIDY0ODc5LCA5MTc5NDksIDkxNzk1MCwgMTI3ODQ4LCAxMzIyNywgMCwgMTAwMjEsIDUxNjAsIDEzODcsIDAsIDkxNzk1MywgCiAgICAgNDE0MTgsIDAsIDY1OTE0LCA2NzIxLCAyMTcsIDkxNzk1NSwgOTE3OTYwLCA5MTc5NjEsIDEwNDQzLCAxMDc4OSwgNDExNTgsIAotICAgIDExOTI1NywgNDI3NCwgOTgzMjkyLCA0MTQ4MywgMCwgNDEyNTAsIDAsIDQyMTc5LCAwLCA1OTMxLCAxMTc0NCwgNjkyMzIsIAorICAgIDExOTI1NywgNDI3NCwgOTgzMzAwLCA0MTQ4MywgMCwgNDEyNTAsIDAsIDQyMTc5LCAwLCA1OTMxLCAxMTc0NCwgNjkyMzIsIAogICAgIDAsIDQxMjUyLCA2NjY4MiwgMCwgMTE5NjM3LCA0MTI0OSwgMTM2NiwgNjQ2MzUsIDY1MDQ3LCAxMjQ2NiwgMCwgMCwgNDM5NywgCiAgICAgMTI4MDM3LCAxMjgzMzYsIDQxMjk2LCA5NTQ1LCA0MTI5MSwgMTI4MDQ5LCAwLCA0MTQ4NSwgMzUxMSwgNDEyODIsIDU5MjMsIAogICAgIDEwNDAwLCAwLCAxMjg4MTgsIDc2MCwgMCwgMTIwODgsIDU3ODYsIDAsIDQyMjU2LCAxMTk4NjksIDExOTg2MCwgNDE3LCAKQEAgLTE4MDMyLDE1ICsxODA1MSwxNSBAQAogICAgIDExOTU3NiwgMCwgMCwgMTM3NSwgNjY3MDUsIDQzNTczLCA2NTI2MCwgNDIwNjMsIDAsIDQyODExLCAxMDMxMiwgNjk4NDUsIAogICAgIDEyMDc5NCwgNzg0MCwgMCwgNDM2MzAsIDEwMjUyLCAwLCAxMjgxMDQsIDQzMTg1LCAwLCA0Mzk2LCAwLCAxMTk4ODAsIAogICAgIDEwNzY5LCA5Njc2LCAxMTkwNDEsIDAsIDk3NTMsIDAsIDg5NDQsIDAsIDAsIDEwNDczLCAwLCAwLCA2MDcyLCA0MzAyNSwgCi0gICAgMTAyOTksIDAsIDAsIDEyMDYwOCwgNjYzMjYsIDk4MzQzOSwgMTI3Nzk0LCAwLCA0MzgxMSwgOTMzMCwgMTIwNTk2LCA3MjIyLCAKLSAgICAxMDI4MywgMTAzMTUsIDEwMzc5LCA0OTk2LCA5ODM3NzMsIDEzMjgxLCA2NjUxNywgNzg2NSwgMTAwODcsIDc4MzQzLCAwLCAKKyAgICAxMDI5OSwgMCwgMCwgMTIwNjA4LCA2NjMyNiwgOTgzNDQ3LCAxMjc3OTQsIDAsIDQzODExLCA5MzMwLCAxMjA1OTYsIDcyMjIsIAorICAgIDEwMjgzLCAxMDMxNSwgMTAzNzksIDQ5OTYsIDk4Mzc4MiwgMTMyODEsIDY2NTE3LCA3ODY1LCAxMDA4NywgNzgzNDMsIDAsIAogICAgIDc4MzQ3LCAwLCAwLCA3NTY1LCA2NjM2MywgMTI5NTIsIDY0ODA2LCA0MzE4MCwgNzc5MjgsIDc0MTQsIDc3OTI5LCA0Mzk4MiwgCiAgICAgNzQyODgsIDYyMiwgNzQwMjMsIDg4NSwgNDM0MDUsIDE2MDIsIDAsIDAsIDg1MiwgMCwgMTIxNjAsIDAsIDEwMjEyLCAKICAgICA2NTQzNSwgMCwgMTIwNzEsIDk2MDksIDEyMTU2LCA5MTc5ODMsIDkxNzk4NCwgNDM1ODYsIDExMDM1LCAxMDQxMSwgCiAgICAgOTE3OTg4LCAxMDI1NSwgNjcxMCwgMTAyNzksIDQxOTQsIDEwMzc1LCA3MzkwMCwgMCwgNDMxNSwgMTI2NDQsIDEyNzUxNiwgCiAgICAgNzc5MzcsIDQzNjM5LCA0MzM0MywgNzg3NzcsIDkxNzk5OCwgMTE1MDEsIDQxMTc3LCAxMjg2ODksIDAsIDkxNzc5MiwgMCwgCiAgICAgOTI0MTMsIDg3MTUsIDAsIDQxMTc5LCAwLCA0MzMxMywgMCwgNDExNzYsIDAsIDk5NCwgMCwgODQ1MiwgMTI3MTAzLCAKLSAgICA3Mzk2NiwgMCwgMCwgNTkyMSwgMCwgMjU5NywgMCwgNTkyMiwgMTE4OTAzLCA3Nzk0MywgNDE4NiwgOTI1MzEsIDEyNzEwNiwgCisgICAgNzM5NjYsIDAsIDAsIDU5MjEsIDAsIDI1OTcsIDAsIDU5MjIsIDExODkwMywgNzc5NDMsIDQxODYsIDkyNTMxLCAxMTk5NjcsIAogICAgIDEyNzEwNSwgNjcxOCwgMCwgNDQwNiwgNzQ2MDEsIDg0ODAsIDkxOTIsIDk3NDcsIDEyNjUzMCwgNDQxMywgOTIxOTYsIAogICAgIDQyMjY4LCAzMTk4LCA1OTI0LCA1OTIwLCA5MjQ2OSwgNjkyMSwgNzgwODEsIDc0MDA3LCA0Mjg2OSwgODQxOCwgMTE2ODEsIAogICAgIDQzMTY5LCAxMDE3NiwgMCwgNzQyLCAwLCAyODkzLCAxMDc3MiwgNjUyNzYsIDU5MzcsIDE5MTQsIDI1NTMsIDExNjgyLCAKQEAgLTE4MDYzLDcgKzE4MDgyLDcgQEAKICAgICA3ODMwLCAxMTY1MSwgMTMwOTMsIDY0MDAyLCAwLCA2NTc0MiwgMTI4NzQsIDExOTU5NywgMTE1OTAsIDAsIDc0MDQ4LCAKICAgICAxMjgzNTAsIDg1OTUsIDAsIDkxNzk0NywgNDM3MDMsIDEzMDk3LCAwLCA2NDY0MywgMTMyODMsIDEyNjk3LCAwLCAxMjM4MSwgCiAgICAgMzQ4OCwgNTkzMywgMTAwMzMsIDczNzM4LCA2NjI0MSwgNjU1NzAsIDAsIDEyMjk3LCAxMTkxNTMsIDE5NTUsIDAsIDUzNDksIAotICAgIDQyNTM4LCAwLCAwLCA3NDExLCA5NDYyLCA5MTc1NTQsIDAsIDAsIDAsIDQyNzM2LCAwLCA1NzU2LCA5ODMyMTksIDc2MzgsIAorICAgIDQyNTM4LCAwLCAwLCA3NDExLCA5NDYyLCA5MTc1NTQsIDAsIDAsIDAsIDQyNzM2LCAwLCA1NzU2LCA5ODMyMjEsIDc2MzgsIAogICAgIDQxNjQyLCA0Mjc2NCwgMCwgNDMxMDksIDc2MzcsIDU3NTIsIDc0MDM3LCAwLCA3MzgzMiwgMTI4ODI3LCAxMjA2MzUsIAogICAgIDEyODIzMSwgNzgzMzQsIDAsIDc2MzYsIDY1MTcxLCA5MTI0LCAwLCA3ODg5MiwgMTIwNzk4LCAyOTEsIDAsIDAsIDIwMjcsIAogICAgIDY2MjMwLCAxMDA4MCwgNzgxMzYsIDEwNDAzLCAwLCA0NjQwLCA2NDcxMywgMTAyMjQsIDEyMDQyOSwgNDI1MTIsIDEyMDQzMSwgCkBAIC0xODA3NSwxNyArMTgwOTQsMTcgQEAKICAgICA3ODI3MCwgMTI3OTgyLCA5ODMxNzIsIDY0NzI4LCAwLCA3ODY3MywgNzg2NzQsIDE2NTksIDkxOSwgNDI3ODQsIDE2NzEsIAogICAgIDE5NTA4OSwgNjA2OSwgOTIxOSwgMTI4NTU4LCAxNjYxLCAxMzEyMCwgNjM3ODQsIDY5ODE5LCAxMDE0MCwgOTcxMywgCiAgICAgMTE5MTQzLCAwLCAwLCA5NDA1MCwgMjMwNiwgMTA0ODUsIDExODk0MywgNjA2OCwgMTA2MTIsIDE5NTA5OSwgMTE5NTY3LCAKLSAgICAxOTUxMDEsIDkyNTYxLCA0MTQ2MiwgMTIwNDcwLCAxOTUwNzksIDU0MjIsIDEyODIzNCwgMCwgMCwgMCwgMTAyMjksIAorICAgIDE5NTEwMSwgOTI1NjEsIDQxNDYyLCAxMjA0NzAsIDE5NTA3OSwgNTQyMiwgMTI4MjM0LCA5ODM2MjksIDAsIDAsIDEwMjI5LCAKICAgICAxMDYzNSwgODI2LCAxMjgwODEsIDE5NTA4MiwgMTk1MDg1LCAxOTUwODQsIDE5NTA4NywgNjQ4MywgOTIyMTEsIDE4MDgsIAogICAgIDc4NDgsIDAsIDgxMDAsIDc4MjI3LCA3ODY2OSwgNzg2NzAsIDEzMzAxLCA3ODY2NywgOTY2NywgNzg2NjUsIDc4ODcyLCAwLCAKICAgICAxMTAwMywgOTkwNCwgMCwgMCwgMTIwNjkwLCA5MTQ0LCAxMDkyMSwgMCwgNzg2ODAsIDk4NDAsIDY1MTMxLCA3ODY3OCwgCiAgICAgNzc4NDEsIDEwMzEzLCAwLCAwLCA2NDMyMCwgMTAyNjUsIDc4Njg2LCAxMDk2MiwgNzg2ODQsIDQzMDA4LCA4OTQ1LCAKICAgICA3ODY4MywgMCwgNDEsIDE5NTA3MiwgMTc5MiwgMTIwNTE1LCAxOTUwNzMsIDg2NTUsIDE5NTA3NSwgOTI1NDQsIDc3OTUxLCAKLSAgICAxMjA2NiwgMCwgMzg1LCA0MTUyLCAyNTg1LCAxMjc4MDQsIDExOTA2OCwgMzEyNiwgMCwgNzQxMzYsIDEwOTU3LCA5ODM2OTQsIAorICAgIDEyMDY2LCAwLCAzODUsIDQxNTIsIDI1ODUsIDEyNzgwNCwgMTE5MDY4LCAzMTI2LCAwLCA3NDEzNiwgMTA5NTcsIDk4MzcwMywgCiAgICAgNDMyNTgsIDExOTExNiwgMTI3ODczLCAxMzE1NywgMCwgOTE3NTQ0LCAzNTcwLCAwLCA3NDQzLCAwLCA0NDAwNiwgNjk5NywgCiAgICAgNjgwMDQsIDEyNjYzMSwgNzg3OSwgODczOSwgMTEwNzUsIDAsIDY1MjE2LCAwLCA2OTc5NSwgMjU5MywgODQ2MywgNzgxMCwgCiAgICAgOTE3ODYyLCA3ODM5LCAxMTk5MTMsIDc4ODA2LCAxMTk5MTIsIDk2OTEsIDQ0MTEsIDc4ODAyLCAwLCAwLCA0MzQ0MiwgCi0gICAgNjk4NTEsIDY1MjU0LCAxMDA2NiwgOTgzODgwLCAwLCAwLCAwLCAxMzA2MSwgODAxNiwgNzg2ODcsIDE5OTMyLCA2NDgzMSwgCisgICAgNjk4NTEsIDY1MjU0LCAxMDA2NiwgOTgzODg5LCAwLCAwLCAwLCAxMzA2MSwgODAxNiwgNzg2ODcsIDE5OTMyLCA2NDgzMSwgCiAgICAgMCwgMTE5OTIzLCAxMjM5MCwgMTE5MTcxLCAxNjM0LCA2ODExNSwgMCwgMTEwNTYsIDk4MzU3NCwgMTE5OTI1LCAwLCAKICAgICA0MTE2NSwgMTEzMjgsIDEyNDUwLCAwLCA0MTE2NiwgMCwgMTI0NTYsIDExOTkxNCwgMTcxLCA1OTQxLCAxMjQ1MiwgCiAgICAgMTk0NzA5LCAxMjQ1OCwgMTI1MzEsIDc4Nzc5LCA0MzAxMywgNjM4MDAsIDc0MTYyLCAxMjc1NjksIDEyMDQ4MywgOTk2OSwgCkBAIC0xODEwMCw3ICsxODExOSw3IEBACiAgICAgMTMyNDQsIDEyMDQ2NiwgNDIxNjcsIDc0MzUsIDc4MTkzLCA1MzgwLCAxMTkwODYsIDY5MjI1LCAxMTU1LCAxMTM2NSwgCiAgICAgNDMxMjYsIDc3OTcyLCAwLCA2NTY4NCwgMCwgNTYwMSwgNjUxOTIsIDQyNzY1LCA2Mzc1MiwgMCwgNzk4NywgMTI4NTQzLCAKICAgICAxMTcyLCA2OTc5OSwgNjc4NiwgNDM2MDEsIDEyMDQ3NiwgNzQxMjYsIDU2MDMsIDAsIDQ0NzMsIDAsIDE5NDgyMywgMCwgCi0gICAgNjUzNDcsIDY1MzQ2LCA2NTM0NSwgMCwgMTI3Mzg0LCA1MzQ3LCA2OTgwMiwgOTgzNjIzLCA3Mzg2OCwgMTE4OTQ0LCAKKyAgICA2NTM0NywgNjUzNDYsIDY1MzQ1LCAwLCAxMjczODQsIDUzNDcsIDY5ODAyLCA5ODM2MzIsIDczODY4LCAxMTg5NDQsIAogICAgIDEwNTg4LCAwLCAwLCA2Mzc1NSwgMCwgNTM0MywgNzg0MjIsIDEyMDY2MSwgNDU1NSwgNTM0MSwgMCwgNzAwNzEsIDEyODY3MCwgCiAgICAgNTM1MSwgNzg2NzUsIDQzMTA0LCA2NTI0NCwgOTE3ODkyLCA2NDU0MSwgNDI1MTksIDc0NDcyLCAwLCAwLCA3NDc2NSwgCiAgICAgOTE3ODg4LCAxMjc1MTAsIDY2MzgsIDAsIDY1MTEzLCAyNzEsIDc0MTgwLCA2NTM3MCwgODgzNSwgNjUzNjgsIDEyNjUzLCAKQEAgLTE4MTEwLDE0ICsxODEyOSwxNCBAQAogICAgIDAsIDQ5MTYsIDAsIDM4MCwgMTA5NTgsIDY2NTYzLCA3Nzk1NSwgNjk3NzMsIDk3NzMsIDEzMTY3LCAxMjkxOCwgNDEwOTYsIAogICAgIDczOTgwLCA2OTI0NSwgNzgyNTQsIDkxNzg5MywgMTA2ODQsIDAsIDkxNzg5NiwgMCwgNzk0NiwgMTI1NDEsIDgxODIsIAogICAgIDY3NTg2LCA2OTc4MCwgMCwgMCwgMCwgMCwgOTAwNSwgMTIyNSwgNjYzMCwgMCwgMCwgMCwgNjgwMTEsIDg4NDcsIDAsIAotICAgIDY1ODc2LCA1NTM1LCA4MzI5LCA3NDU5MCwgOTgzMjA2LCA5MjYwOSwgMCwgMCwgMzEyNywgMjU5NSwgNjU3MTMsIDQyMDEzLCAKLSAgICA5ODM4NDksIDU2MDcsIDQxMDg5LCAwLCAwLCA3NDI1NiwgMjY2NSwgMTEzMDQsIDQzNzUxLCA3NDIwMCwgNDk3MCwgODc2NCwgCisgICAgNjU4NzYsIDU1MzUsIDgzMjksIDc0NTkwLCA5ODMyMDgsIDkyNjA5LCAwLCAwLCAzMTI3LCAyNTk1LCA2NTcxMywgNDIwMTMsIAorICAgIDk4Mzg1OCwgNTYwNywgNDEwODksIDAsIDAsIDc0MjU2LCAyNjY1LCAxMTMwNCwgNDM3NTEsIDc0MjAwLCA0OTcwLCA4NzY0LCAKICAgICAxMjA0NTksIDg5MzQsIDkyNzI2LCA0MTU2NiwgNDQ5MiwgMCwgNjUwMTEsIDQxMDkwLCAwLCAwLCAxMTg4LCA3MjU0LCAKICAgICAxMTAwLCAwLCAxMjgzMDEsIDQxMDgxLCAyOTEyLCAxMTc0OSwgNjk3OTIsIDAsIDY4MDE5LCAzNTcyLCAxMDAyMywgNDk1OSwgCi0gICAgMTMwNzksIDAsIDk4MzI2OCwgOTcyOSwgMCwgMCwgMCwgNDMzNjEsIDAsIDAsIDExODAzLCA3OTk2LCA5OTA3LCA0MTQ1MCwgCi0gICAgMTMzMDQsIDEyODI5MCwgMTI3MjYwLCA0MTQ1MSwgMCwgMTEwOTUsIDgyNzMsIDEyNzUzMywgMzQ1MSwgOTgzMzAxLCA5NzIsIAotICAgIDQxNDUzLCA5ODM0MzQsIDAsIDczODgzLCA2ODAyMiwgNzM5NDUsIDk4MzcyNiwgMjI4OCwgMTk5NTUsIDk1MzgsIDAsIAotICAgIDY5ODA3LCAwLCAwLCAwLCAwLCAxMTM5NiwgOTgzNDMyLCAxMTAxOSwgMCwgMCwgMCwgNjgwMjAsIDQxMDc4LCA3MTM2NSwgCisgICAgMTMwNzksIDAsIDk4MzI3NiwgOTcyOSwgMCwgMCwgMCwgNDMzNjEsIDAsIDAsIDExODAzLCA3OTk2LCA5OTA3LCA0MTQ1MCwgCisgICAgMTMzMDQsIDEyODI5MCwgMTI3MjYwLCA0MTQ1MSwgMCwgMTEwOTUsIDgyNzMsIDEyNzUzMywgMzQ1MSwgOTgzMzA5LCA5NzIsIAorICAgIDQxNDUzLCA5ODM0NDIsIDAsIDczODgzLCA2ODAyMiwgNzM5NDUsIDk4MzczNSwgMjI4OCwgMTk5NTUsIDk1MzgsIDAsIAorICAgIDY5ODA3LCAwLCAwLCAwLCAwLCAxMTM5NiwgOTgzNDQwLCAxMTAxOSwgMCwgMCwgMCwgNjgwMjAsIDQxMDc4LCA3MTM2NSwgCiAgICAgMjYxLCA1OTI3LCA3NzkxLCAwLCA3MzYyLCAwLCAxMDY5NiwgMCwgNjA3MywgOTgzOCwgMTE4OTIwLCAwLCA2MDc1LCAKICAgICA5Mzk5NSwgMjgyLCAxMjY1MTAsIDY0MzcsIDc0MDc4LCAxMjgwMDAsIDk4MDEsIDAsIDc0MTc3LCAwLCAwLCAzNDc0LCAKICAgICAxMTg3ODcsIDAsIDEyMDY1NSwgNjA4MSwgMCwgNzg4NzQsIDc0MDc2LCA3ODg3OSwgMCwgMCwgMCwgMCwgMCwgODc1MSwgCkBAIC0xODEzOCw3ICsxODE1Nyw3IEBACiAgICAgNDU2NCwgMCwgMCwgNzQyNzEsIDczNzUzLCA4Mzc0LCA5ODMxNTYsIDAsIDY4MjksIDUyMjUsIDEyODgwNywgMTI3Mzg1LCAwLCAKICAgICAwLCAxMTk2MTUsIDAsIDc0NzkzLCA1NjI2LCA3MzgwNywgMTE3NzEsIDc0MDc1LCAxMjcyMzYsIDEyODAxOSwgNDI2MTQsIAogICAgIDUzNTMsIDU2MjUsIDc0MTc5LCAwLCAwLCAxMDEwLCA2NDU3MiwgNDE3ODAsIDQyNjIzLCA2NDI3NywgNjk5NDIsIDY5NTIsIAotICAgIDk4MzI2NCwgMTIwNzUyLCA3ODc2MiwgMjU5MCwgNTYyOSwgNjU1NTIsIDc1NTEsIDEwMzI1LCA1NjMyLCAxMDQ3MSwgCisgICAgOTgzMjcyLCAxMjA3NTIsIDc4NzYyLCAyNTkwLCA1NjI5LCA2NTU1MiwgNzU1MSwgMTAzMjUsIDU2MzIsIDEwNDcxLCAKICAgICAxMjAwMzgsIDEyMDAyNywgMTIwMDI4LCAxMjAwMjUsIDU2MjgsIDEyMDAzMSwgOTcwLCAxMjAwMjksIDQ3NzIsIDI0MDAsIAogICAgIDU2MjcsIDEyMDAxNywgMTIwMDE4LCAxMjAwMjMsIDY0Mjc1LCAxMjAwMjEsIDg3ODYsIDAsIDIwMywgMCwgMCwgMCwgMCwgCiAgICAgNzgzNTAsIDAsIDY0Mzc4LCA0MjA1NCwgMCwgMCwgNTU0LCAxMTk2NDksIDExMzU4LCAwLCAxMjE4MiwgNDIwNDgsIDExMDY1LCAKQEAgLTE4MTUwLDkgKzE4MTY5LDkgQEAKICAgICAxMTY4LCA5MjUxLCA5MDgyLCAxMTk5NjQsIDY0MDU1LCA0Mjc4MSwgMzg2NiwgMTIzMjMsIDQxNTEyLCA3MzgwNSwgNjgxMjEsIAogICAgIDAsIDQxNDk0LCA5MjMxNiwgNDY2MCwgMCwgMTA0MDUsIDAsIDc4ODAzLCAwLCAwLCA0MjA0MCwgNzM5MTgsIDExOTYyNywgCiAgICAgNzk0NCwgNDE0NTQsIDEyNjA1LCAwLCA0MjIwNSwgNDE0NTUsIDIzNiwgNjQwNTEsIDc4ODY3LCA4MjE0LCAwLCAwLCAwLCAKLSAgICA0MTQ1NywgOTgzOTYxLCAxMTk1ODksIDE5NjksIDIzODQsIDgwOTcsIDkxNzg2NCwgNzQxMywgNjgwMTIsIDc4MDI5LCAKKyAgICA0MTQ1NywgOTgzOTcwLCAxMTk1ODksIDE5NjksIDIzODQsIDgwOTcsIDkxNzg2NCwgNzQxMywgNjgwMTIsIDc4MDI5LCAKICAgICA4NzY2LCAwLCA3ODA3OSwgNTg1NCwgMTI3OTc0LCAxMDU4MywgMCwgMTE5OTg5LCAwLCAxMDQxNiwgOTE3ODY5LCAzODcyLCAKLSAgICA5MTc4NjgsIDAsIDg0MjksIDAsIDExODgwNiwgMjgzOCwgMTI4ODAyLCAwLCA5MTc4NjYsIDAsIDAsIDAsIDk4Mzk1OCwgCisgICAgOTE3ODY4LCAwLCA4NDI5LCAwLCAxMTg4MDYsIDI4MzgsIDEyODgwMiwgMCwgOTE3ODY2LCAwLCAwLCAwLCA5ODM5NjcsIAogICAgIDk0MDA1LCAxMTA5NiwgMTIwODEzLCAxMDU1MywgMTY2MiwgODQ4MywgMTIwMzk2LCA0MzYwNSwgNTg5MiwgNDM0MTgsIDAsIAogICAgIDczNzQyLCA2NiwgNjUsIDY4LCA2NywgNzAsIDY5LCA3MiwgNzEsIDc0LCA3MywgNzYsIDc1LCA3OCwgNzcsIDgwLCA3OSwgCiAgICAgODIsIDgxLCA4NCwgODMsIDg2LCA4NSwgODgsIDg3LCA5MCwgODksIDExOTg2MiwgMTAzNTcsIDczODUsIDgxNzAsIDE3MDQsIApAQCAtMTgxNjcsNyArMTgxODYsNyBAQAogICAgIDEyNDcyLCAwLCA2OTg2NCwgNzY5OSwgMTIzOTMsIDAsIDAsIDAsIDc0NTE4LCA4MjIzLCAwLCA0MjYxLCAwLCAwLCAwLCAwLCAKICAgICAwLCAxMjgzMDIsIDAsIDEyODA0NiwgNDM0MTksIDAsIDY0NTU0LCAxMDU3NCwgMzg3OCwgMCwgNDIzNTIsIDE3NTIsIAogICAgIDczNzg1LCAwLCA0MjUwNiwgMTI4NTQxLCAxMDE5OSwgMCwgMCwgNjgwMjEsIDY1OTE5LCAwLCA2Njk1LCA3MjAsIDMyNCwgMCwgCi0gICAgMCwgNDM0MDYsIDk4MzcyNywgMTQ2NCwgNDA5ODUsIDAsIDc5NzQsIDAsIDQzNDc0LCAwLCA2NDQ4OCwgMCwgMCwgNjQwNDEsIAorICAgIDAsIDQzNDA2LCA5ODM3MzYsIDE0NjQsIDQwOTg1LCAwLCA3OTc0LCAwLCA0MzQ3NCwgMCwgNjQ0ODgsIDAsIDAsIDY0MDQxLCAKICAgICA3NDc4NywgMCwgNzg4NjUsIDkyMjU4LCA2NTU5NywgMCwgNzg4NjMsIDAsIDEzMDIsIDAsIDc4ODYxLCAxMTkxMzQsIDAsIDAsIAogICAgIDUyMDQsIDc0Nzc0LCA0MzQwNCwgMTE4MzUsIDAsIDM5OTUsIDY4MzYwLCA2NTYwOCwgMzcxNCwgOTIxOTAsIDAsIDAsIAogICAgIDEwOTk5LCAxMTc1MCwgMCwgNDMyNTEsIDY4NjYwLCA0MzMwMSwgMCwgMTIwNTU3LCA4MTMwLCA4NjcyLCAxMDg0NSwgCkBAIC0xODE3NSwyMiArMTgxOTQsMjIgQEAKICAgICA2MTIsIDAsIDY0NDAxLCA2NjQ0OCwgNjgzNzYsIDAsIDE2NzQsIDAsIDU4MjMsIDk4MzE2MywgMTIyODAsIDAsIDU0MCwgCiAgICAgNzQ1NjQsIDExOTAxNywgMCwgODQzMiwgMCwgMTEwNzMsIDAsIDY0MzE2LCAwLCAwLCA4MjAsIDQxNzQxLCAwLCAxMjA2NjcsIAogICAgIDAsIDY0Njg0LCAxMjY5OTIsIDMzNTksIDc4MDAsIDY5OTM0LCA2NTE3NywgNjIyNiwgMzUzLCAxMjM5NiwgMCwgMTE5NjEyLCAKLSAgICA2NDc0MiwgMTI4NjgyLCAxMjAyODIsIDAsIDk4MzQ0MiwgMTI0MTIsIDE5OTQxLCAwLCAxMjAyNzcsIDc4ODQ3LCAxODg0LCAKKyAgICA2NDc0MiwgMTI4NjgyLCAxMjAyODIsIDAsIDk4MzQ1MCwgMTI0MTIsIDE5OTQxLCAwLCAxMjAyNzcsIDc4ODQ3LCAxODg0LCAKICAgICA5NDgxLCA0MjQxOCwgNzAwNTksIDQxMTU3LCAwLCAxMTk1LCA2NDg5OCwgNzkyNCwgMCwgNDExNTEsIDIwMTAsIDAsIAogICAgIDQxMzI4LCA0MjM0NCwgMCwgMTI0MDksIDAsIDQzNjAsIDEyNzAwOSwgOTczOSwgMTI4NTUwLCA2OTkzMywgNzM5MjEsIDAsIAotICAgIDQyNTIxLCA4NTM5LCA5ODM3MTYsIDAsIDExODk4NiwgMCwgNDc4OCwgMCwgNjgwMjMsIDY1NzM0LCA5ODM0NDcsIDQzNzkwLCAKKyAgICA0MjUyMSwgODUzOSwgOTgzNzI1LCAwLCAxMTg5ODYsIDAsIDQ3ODgsIDAsIDY4MDIzLCA2NTczNCwgOTgzNDU1LCA0Mzc5MCwgCiAgICAgMCwgMTMwNzUsIDc0NDI5LCA5NDA2MywgNjQ1NjksIDQzNTMyLCAxMDgzNywgMjQ5MiwgMTI3MTk3LCAxMTg5MDEsIDY4NjM3LCAKICAgICA0MTEzNiwgNDM3ODUsIDExODEzLCA5NjQ5LCA0MTE1NCwgMTE5NjE3LCA1MTI4LCA0MDM4LCA0MTE0MywgNjU2MDQsIAogICAgIDY0ODU5LCA0MTU5MiwgNjc3MSwgMTY0OCwgNTQzNSwgOTE3ODM3LCA2NzM0LCA0MTM0MywgMTE5ODQ4LCA2NTQzOSwgCiAgICAgMTI3MDksIDY5ODYsIDkyMzY0LCA2ODAxNSwgMCwgNDEzNDksIDcwMDIxLCAxMjU4MSwgMTAzNzQsIDUxNzUsIDAsIDczODA2LCAKICAgICAxMDI1NCwgMCwgMTAyNzgsIDEwMjYyLCA2OTg1OCwgNDEzNDYsIDAsIDYwNywgMCwgMTE5ODUyLCAxMjg4NDYsIDEyOTIzLCAKICAgICAxMDMxNCwgMTAyODIsIDY1NDc3LCAxMDM3OCwgMTIwMjk3LCA0MDk3NiwgODI2NSwgMCwgMTE5ODM0LCA0MDk3NSwgNTg0MCwgCi0gICAgNDI4MzgsIDAsIDQwOTc4LCA5ODM4ODgsIDExOTg0MCwgMCwgOTgzMDcxLCAwLCA2NjQ0NCwgMTA1MzgsIDAsIDI1NTAsIAorICAgIDQyODM4LCAwLCA0MDk3OCwgOTgzODk3LCAxMTk4NDAsIDAsIDk4MzA3MSwgMCwgNjY0NDQsIDEwNTM4LCAwLCAyNTUwLCAKICAgICAxMTk4MzYsIDY3NzksIDAsIDAsIDM1MjUsIDY4MjQsIDExODg4NiwgMCwgMCwgNTYxOSwgNjU4MjIsIDEyNjU2NywgCiAgICAgMTk0ODgyLCA3NDU1LCAwLCA1NjE2LCAxMTQ4NiwgOTY1NiwgMCwgMCwgMTA3MjcsIDU2MTUsIDAsIDEyMDU1MSwgNDIzODAsIAogICAgIDY0ODk1LCA0MzY5MywgNjY0NTEsIDgwOCwgNTQ1NSwgMTEzNDcsIDAsIDEwMjYsIDU2MjAsIDE5NDg4NywgMCwgMTEzNTAsIAogICAgIDU2MTcsIDAsIDkyMjUsIDY0NjM5LCAxMjcwNzMsIDkxNDUsIDEyODA2MCwgMTMzOCwgMTIwNTgxLCA5ODMxNTgsIDEyNzM5LCAKLSAgICA0NjAzLCAzMDg0LCA5ODMxNTUsIDkyNDg0LCA5ODU4LCA2MDM3LCAwLCAzOTc0LCA3ODIxMywgMTAyOTAsIDk4MzY5NSwgCisgICAgNDYwMywgMzA4NCwgOTgzMTU1LCA5MjQ4NCwgOTg1OCwgNjAzNywgMCwgMzk3NCwgNzgyMTMsIDEwMjkwLCA5ODM3MDQsIAogICAgIDMwODMsIDEwMzIyLCAwLCAwLCAwLCA0MTAzNiwgMCwgMCwgNDMzMjEsIDY1NjA2LCAwLCA0MTAzMiwgNDIzODgsIDAsIAogICAgIDY0NzAwLCAxMDAxMSwgMTQ0NSwgNDA5NjEsIDAsIDExOTEwNSwgMCwgNDA5NjAsIDAsIDE5NDg5MSwgMCwgNDA5NjMsIAogICAgIDY0OTUyLCAxMDQwMiwgMCwgMCwgOTIzMDQsIDEwNjAzLCAwLCAwLCA5ODMxMTMsIDAsIDY3MTQsIDEwMDgzLCAxMjcwNjksIApAQCAtMTgyMDIsOSArMTgyMjEsOSBAQAogICAgIDQxOTc2LCA5NzIwLCA5MTc2MDYsIDExNzY3LCA0MTk3MCwgMTk0NTk2LCA1ODM2LCAxMjM1OCwgMCwgNDM1NSwgOTA0OCwgCiAgICAgMTIxODAsIDY1MDI3LCA2NDY4MCwgMTMwMzgsIDQzNjk5LCAwLCA0MTQ4OCwgMTI4MDg3LCA4NTI3LCAxOTQ5MTcsIDEyMzYyLCAKICAgICAxMjQzNSwgMTIzNjAsIDQxMDUzLCAzMjY2LCAwLCAxMjM1NiwgODYxNiwgNDE0NjYsIDAsIDkyNTg4LCAxMTQ1MCwgMCwgCi0gICAgMzYzOCwgMTIzNTQsIDAsIDMyMTYsIDAsIDIzNTgsIDkyNjA2LCA4NjMzLCAwLCA5ODM3MzYsIDExOTE4MiwgNjkyNDQsIDAsIAorICAgIDM2MzgsIDEyMzU0LCAwLCAzMjE2LCAwLCAyMzU4LCA5MjYwNiwgODYzMywgMCwgOTgzNzQ1LCAxMTkxODIsIDY5MjQ0LCAwLCAKICAgICAwLCAxMTc1OSwgMTk0OTAzLCA2MzY4LCA3NDgyMywgMCwgNDE0MjMsIDgwNzgsIDEwNTA0LCAxMjc1NTgsIDQxNjk4LCAKLSAgICA0MjIzNywgMCwgNzAwMiwgOTgzNjY5LCA0MTQzMCwgNDIyNjcsIDQxMDUxLCA0MTQ4NCwgMCwgMCwgNDEwNTAsIDQxNDczLCAKKyAgICA0MjIzNywgMCwgNzAwMiwgOTgzNjc4LCA0MTQzMCwgNDIyNjcsIDQxMDUxLCA0MTQ4NCwgMCwgMCwgNDEwNTAsIDQxNDczLCAKICAgICAxMDQ2NiwgMTMwOTksIDAsIDAsIDAsIDY0MzUsIDAsIDExMzYyLCAwLCAwLCA2NTM4MiwgMCwgNDE0MjAsIDAsIDM2MjUsIAogICAgIDc4MTU3LCA0MTQwOSwgMCwgNjk2MzksIDIwNDEsIDkxNzgsIDk2NzIsIDQxNDI3LCA0MzU0MSwgNDMzMTcsIDAsIDAsIDAsIAogICAgIDQxNDI0LCA5MTc1OTgsIDEyMDU0NiwgMCwgMTI4MjEyLCAwLCA0MTQxNywgMTI2MSwgMCwgMCwgMTIxMDIsIDExOTY2MiwgCkBAIC0xODIxNCw5ICsxODIzMyw5IEBACiAgICAgNDE0NjEsIDEyODgyMywgMCwgMTI3OTEyLCAwLCA4ODE5LCAxMjY2MywgMCwgNDExODQsIDc0MDE0LCAyMzIsIDc0ODM1LCAKICAgICAxMjA2NDYsIDkxNjgsIDY1Nzg2LCAwLCAwLCAwLCA5MDk0LCAwLCAxMTc1OCwgNjg0MjUsIDAsIDEwNjQsIDQyNDY3LCAKICAgICAxMjgwNDQsIDEwMTE1LCAxOTkyNCwgOTI3MTEsIDAsIDc4NjIsIDY0NTUxLCAxMzIyNCwgODUxNiwgNDE4NjIsIDY2NjUwLCAKLSAgICA3NTYxLCA3ODYxOCwgNjk3OTMsIDE4NzgsIDAsIDk4MzI2MSwgMjkxMSwgMCwgNDExNzgsIDU0MjcsIDY0ODIzLCAwLCAwLCAKKyAgICA3NTYxLCA3ODYxOCwgNjk3OTMsIDE4NzgsIDAsIDk4MzI2OSwgMjkxMSwgMCwgNDExNzgsIDU0MjcsIDY0ODIzLCAwLCAwLCAKICAgICAzNzg3LCA0MTE3NCwgMCwgNDE0NTgsIDAsIDQxNDYzLCA0MjQxMywgMTEyOTIsIDI0MDYsIDc3NSwgMCwgNjU1ODQsIAotICAgIDY5OTIzLCA2MDc0LCA5NjE4LCAxMjg2NjgsIDk4Mzk0MywgNDM0NDAsIDAsIDE5NDkwMSwgNDE0MzYsIDM2NTYsIDAsIAorICAgIDY5OTIzLCA2MDc0LCA5NjE4LCAxMjg2NjgsIDk4Mzk1MiwgNDM0NDAsIDAsIDE5NDkwMSwgNDE0MzYsIDM2NTYsIDAsIAogICAgIDEyMDYwMCwgNDE0NTYsIDAsIDE1OTksIDExMzMzLCAwLCA2NzAzLCA4NTEzLCAwLCAxNjEzLCAwLCA2ODQ1NiwgMTI1OTgsIAogICAgIDk4MzE5MSwgMTIwNzM0LCA3ODc0NSwgNzQ1MDAsIDQxNDYwLCAxMDE0NSwgMTA1NDIsIDk5MzcsIDc4NzQ2LCA3MDAyOSwgCiAgICAgOTkwNSwgMCwgNjU3MzAsIDAsIDEyMDM3NCwgODQyNywgMTIwMzc1LCA1NTI0NiwgMTIwMzc2LCAwLCAxMTQ5NywgNjQ2ODcsIApAQCAtMTgyMzYsMjEgKzE4MjU1LDIxIEBACiAgICAgNDEyODcsIDkyNjEwLCAwLCAwLCA0MjIxOSwgMTI4MjU3LCAwLCA0MTk4NywgNDE2NzYsIDk4MzA1OSwgMTIwODIzLCAKICAgICA5ODMxNDQsIDQxNjcwLCAwLCA5MjU5MCwgMjc5NiwgNTUyOTEsIDExNjgzLCA5OTAyLCA3NDUyMSwgNjc5ODgsIDExNDUxLCAKICAgICA5ODMxMTEsIDEyODgyMiwgNDI2MzEsIDIzNTksIDAsIDY3ODQ0LCA3NDE2NCwgNDEyMzgsIDU0OCwgMTE0MDUsIDEzMTMzLCAKLSAgICA2NDM2OCwgOTgzMjMzLCAxMjg3OTUsIDAsIDM5NywgNDM2MjIsIDQyMTM5LCA5NTQ3LCA5NTkwLCAxMjgyMzgsIDE2MTQsIAorICAgIDY0MzY4LCA5ODMyMzksIDEyODc5NSwgMCwgMzk3LCA0MzYyMiwgNDIxMzksIDk1NDcsIDk1OTAsIDEyODIzOCwgMTYxNCwgCiAgICAgNDM2NjEsIDY0MzU2LCA2NjMwNywgNjY1MSwgMTM1OCwgMCwgNDI4LCA5NjIwLCAxNDY2LCA3ODExMiwgMTA5ODIsIAogICAgIDExODgzMSwgMTMzMywgNzEwNCwgNDA3LCA2NDI1LCAxMjg4MzQsIDc0MjUzLCAwLCAwLCAwLCA1ODA0LCAxMTk3NiwgODU1NCwgCiAgICAgOTI3MjEsIDAsIDAsIDkwNTcsIDQyMjk0LCA0MTIxOCwgMCwgMCwgNzgxMzcsIDE4ODMsIDEwOTUyLCA4MDQ4LCA3ODE0MiwgCi0gICAgNDEyMjUsIDkyNjIxLCA0MjkxNSwgOTgzNjY3LCAxMjg2ODQsIDAsIDQ0MDcsIDAsIDY1ODA5LCAxMTkwNzQsIDE5NDgyMSwgCisgICAgNDEyMjUsIDkyNjIxLCA0MjkxNSwgOTgzNjc2LCAxMjg2ODQsIDAsIDQ0MDcsIDAsIDY1ODA5LCAxMTkwNzQsIDE5NDgyMSwgCiAgICAgODQ0OCwgNzE0MSwgNzQxODMsIDAsIDEyNjc1LCAxMjY1OSwgMCwgNDIzNjMsIDEyMDYyNCwgMTk0ODI0LCA1NTI3MywgCiAgICAgMTA3NjYsIDEyMDEyLCAyMzg2LCA2NDczMiwgOTE3MCwgOTE3ODIxLCA5MTIzLCA2NDU4NSwgMTIwNTAwLCAxMTkxNTgsIAogICAgIDcxNDAsIDEwOTc3LCAxMjczNzgsIDQxNjQsIDkwODEsIDAsIDEyMDU2OSwgNDIwNDksIDQyMDQyLCA4NzA5LCAxMjgyODMsIAogICAgIDEyNjQ3NywgMTIwNjM3LCA0MjQxOSwgNjQ3OTksIDQyMDQ3LCAwLCAwLCA4NDcwLCAxMTgwNywgNjU4OTcsIDU3NywgMCwgCi0gICAgOTgzNzUxLCA3NDMwMCwgMCwgMTI3MzA4LCA3NDg0MCwgMCwgMCwgMTI4NzkxLCA5MjIyNCwgODczNiwgMTQxNCwgNDI2NDMsIAorICAgIDk4Mzc2MCwgNzQzMDAsIDAsIDEyNzMwOCwgNzQ4NDAsIDAsIDAsIDEyODc5MSwgOTIyMjQsIDg3MzYsIDE0MTQsIDQyNjQzLCAKICAgICA5NjgzLCA0MzQ4NiwgNzQzNDQsIDAsIDI1MzYsIDAsIDY2MzMwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA2NjMxNywgNjk5NDUsIAogICAgIDY2MzE1LCAyMTA2LCAxMjAyMjIsIDExMjczLCAwLCA0MzAwNCwgNzU0MSwgMCwgMCwgOTYxLCA2NDMwNywgNjYzMjQsIAogICAgIDY0OTA2LCAxMjg1OTEsIDMxMDYsIDY1OTE3LCA0MTI4NCwgMTY5NiwgMCwgODkxLCAxMjEwNSwgMCwgNDI2MjQsIDEyODAyLCAKICAgICAzMjY0LCA4ODI0LCAxMzI2OCwgNDMwMDMsIDEwOTM2LCAwLCAwLCAwLCAxOTQ4MjYsIDkyNjg4LCAwLCAyMzIyLCAxMjAzNzEsIAotICAgIDk4MzU4NCwgMTE0NDksIDEyODE4NywgNDI4NjgsIDQxMjg1LCAzNTQ3LCAwLCAwLCAxMjg3OTMsIDk4MzM5MCwgNDMyMTYsIAorICAgIDk4MzU4NCwgMTE0NDksIDEyODE4NywgNDI4NjgsIDQxMjg1LCAzNTQ3LCAwLCAwLCAxMjg3OTMsIDk4MzM5OCwgNDMyMTYsIAogICAgIDYwODksIDc4NjgyLCAwLCAxMjA1NzgsIDQxNzAsIDEwMjksIDEyNzc2MSwgMTI3MDM2LCAxMTkyMjQsIDQyMzc0LCAwLCAKICAgICA3NDQsIDAsIDAsIDAsIDY1ODIzLCAxMjc4MjYsIDAsIDM1NTEsIDAsIDAsIDQ2MjMsIDU1MjY4LCAwLCA0NTk4LCA5ODMxNjIsIAogICAgIDY1MTM2LCAxMjcxMzYsIDAsIDAsIDEwODUxLCAwLCA2MTc5LCA5MjYwMiwgNjE4MCwgMCwgMTE5NTIsIDEyMDc3OCwgCkBAIC0xODI2MCwxMCArMTgyNzksMTAgQEAKICAgICAyMzA4LCAwLCA3NDE0OSwgMCwgMjMxOCwgOTgzMTgzLCA2NjM2MSwgODE5OCwgMCwgNjQzNjAsIDEyNjAxLCA0MjUzNiwgCiAgICAgNjUyNjYsIDEyMDgyNywgNzQzMDcsIDkyNDYyLCA2OTcwLCA1NDA0LCA0MzMzMiwgMzY2NywgNzkzNiwgMTI5MjUsIAogICAgIDEyNjk4OSwgNjM4NSwgMCwgMCwgMTE4OTQ5LCAxMDg3NCwgNjU1MDUsIDEyODA4MywgMCwgNDIwNTMsIDIwNzUsIDQyMDU3LCAKLSAgICAxMTA4MywgNDIwNTIsIDAsIDAsIDY3NjUxLCAwLCA5NjY1LCA5MjMwMCwgOTgzNjU3LCAxMzE4MSwgMCwgMCwgMCwgNzAwODgsIAotICAgIDc0MTQ4LCAwLCAwLCAxMjAyMjUsIDEyMDIyOSwgMTIwMjI0LCA3NDE3MiwgNDExNDUsIDAsIDk0MDk2LCA5ODM5MzcsIAorICAgIDExMDgzLCA0MjA1MiwgMCwgMCwgNjc2NTEsIDAsIDk2NjUsIDkyMzAwLCA5ODM2NjYsIDEzMTgxLCAwLCAwLCAwLCA3MDA4OCwgCisgICAgNzQxNDgsIDAsIDAsIDEyMDIyNSwgMTIwMjI5LCAxMjAyMjQsIDc0MTcyLCA0MTE0NSwgMCwgOTQwOTYsIDk4Mzk0NiwgCiAgICAgNDExNDgsIDg2ODMsIDc1OTQsIDEyNzUxOSwgMCwgMTE5MDkwLCAxMDg2OSwgNDM0NTgsIDQxMTQ2LCA5MjQwNywgMTE0NDEsIAotICAgIDAsIDM1MTIsIDExOTYzMywgOTgzNzAwLCA4MTAzLCAwLCAwLCA2NTE4NCwgMTE3ODAsIDQxNTYzLCA0Mjc5NiwgMCwgCisgICAgMCwgMzUxMiwgMTE5NjMzLCA5ODM3MDksIDgxMDMsIDAsIDAsIDY1MTg0LCAxMTc4MCwgNDE1NjMsIDQyNzk2LCAwLCAKICAgICA2OTc0MiwgNDE1NDQsIDY1MTQ2LCAwLCAwLCAwLCAwLCAxOTk0MiwgMCwgMTE4OTA4LCA3OTg4LCAxMDQzNiwgNzQyNzMsIAogICAgIDMyNzEsIDczODA0LCA2NDcxMSwgMCwgOTQwNjQsIDAsIDAsIDM4MDQsIDEzMDcwLCAxMTU1NywgNDIwNDQsIDAsIDEwOTUsIAogICAgIDAsIDM1OTksIDEyNzc3NCwgMCwgMTI4ODYxLCA4NTE0LCAwLCAwLCAwLCA3NDM0NiwgNjY2OTcsIDAsIDExNjg0LCAwLCAKQEAgLTE4MjcyLDIzICsxODI5MSwyMyBAQAogICAgIDAsIDEyNzc3MiwgMCwgOTE3NTQyLCAwLCAwLCA2NTM5LCAwLCAwLCAwLCAxOTQ4NTYsIDAsIDEyMDQ5MiwgNDExOTAsIAogICAgIDM5NzMsIDExOTM2NSwgNDU3NSwgNDExOTMsIDc5ODIsIDQyOSwgMCwgMTI3MTk0LCAwLCAxOTQ4NTQsIDY1NzkyLCAwLCAKICAgICAxMTg5NjgsIDY0MTcsIDExODkxOCwgNzgxNzgsIDAsIDE5NDg1MCwgMCwgMCwgNDkxOSwgMTA1OTAsIDEyODU1NiwgNzc1NSwgCi0gICAgMCwgMCwgNjQ1NDgsIDEyMDUwNiwgMTYyMSwgMTAyMTQsIDY1MTI2LCAwLCAxMjcwMDQsIDAsIDEyMTg4LCA5ODM2NTksIAorICAgIDAsIDAsIDY0NTQ4LCAxMjA1MDYsIDE2MjEsIDEwMjE0LCA2NTEyNiwgMCwgMTI3MDA0LCAwLCAxMjE4OCwgOTgzNjY4LCAKICAgICAxNjE3LCA4MDUwLCAwLCA1MDE1LCAwLCAxMTkxNzQsIDQyNTkwLCAxOTQ4NzEsIDE3NTYsIDc4MTgxLCAwLCA2NTc2OCwgCiAgICAgNjM1MiwgNDE4OTIsIDAsIDc1NTUsIDEzMTAzLCA1NDA4LCAyODE3LCAxMjE0LCA2OTkxOSwgOTIzMzUsIDk4MzEyNSwgMCwgCiAgICAgMCwgMCwgMTI3MTk1LCA3OTU3LCA4Njg5LCA2NDcyMywgMTA1NiwgNDI4OTYsIDc0MTQ3LCAxOTQ4MTMsIDAsIDU1Mjg2LCAKLSAgICA3MDczLCA2NTg1MCwgMTIzMjcsIDk4MzkzOSwgMTE5MDI4LCAwLCAwLCAwLCAyMzQxLCA4NDUwLCA4NDg0LCA4NDc0LCAKLSAgICA5ODMyNTIsIDAsIDcwMDc5LCA4NDYxLCAxMjgxMDIsIDEyMTUzLCAxMjc5OSwgMCwgNDM3MDksIDQzNzA4LCA5NDUxLCAKLSAgICA3NTcxLCAxMzA3MywgMCwgMCwgNjgxLCA5ODMyNDYsIDcwMywgMCwgMzI3MiwgODc4MSwgMTI4OTQsIDcwMDc3LCAxMTcwOSwgCisgICAgNzA3MywgNjU4NTAsIDEyMzI3LCA5ODM5NDgsIDExOTAyOCwgMCwgMCwgMCwgMjM0MSwgODQ1MCwgODQ4NCwgODQ3NCwgCisgICAgOTgzMjYwLCAwLCA3MDA3OSwgODQ2MSwgMTI4MTAyLCAxMjE1MywgMTI3OTksIDAsIDQzNzA5LCA0MzcwOCwgOTQ1MSwgCisgICAgNzU3MSwgMTMwNzMsIDAsIDAsIDY4MSwgOTgzMjUyLCA3MDMsIDAsIDMyNzIsIDg3ODEsIDEyODk0LCA3MDA3NywgMTE3MDksIAogICAgIDkyMjg4LCA3NDQ0NiwgMCwgOTI1MzIsIDAsIDExMzM4LCAxMjA3NjgsIDMyNzYsIDAsIDAsIDY1OTI4LCAwLCAwLCA2NTAyMSwgCiAgICAgNjQ3OTUsIDc0NTc0LCAwLCAxMDA0NywgNzg4MTQsIDMyNjIsIDc4ODExLCA0MjcxMSwgMCwgMCwgNjg0NzgsIDE2MywgNTc2LCAKICAgICA5ODk1LCAxNjU1LCA3ODgxNywgNzQ1OTEsIDc4ODE1LCA3ODgxNiwgOTgzMTIyLCAwLCAwLCAwLCAxMDAzOSwgMCwgCi0gICAgOTgzOTM2LCA1NjIzLCA1NzE3LCA1Nzc2LCAwLCAwLCAwLCA0MTU5MSwgMTEwMzYsIDY1MjUyLCA5MjM4MiwgMCwgMCwgMCwgCisgICAgOTgzOTQ1LCA1NjIzLCA1NzE3LCA1Nzc2LCAwLCAwLCAwLCA0MTU5MSwgMTEwMzYsIDY1MjUyLCA5MjM4MiwgMCwgMCwgMCwgCiAgICAgNjc4NDgsIDAsIDAsIDAsIDg4ODcsIDEyNzUyMSwgNzI5NSwgMTEwMzEsIDAsIDQzMTU3LCAwLCA4OTQ2LCAxMDM0OCwgCi0gICAgMTA0MTIsIDg3NTUsIDAsIDAsIDU3MTgsIDEzMjIxLCAwLCAwLCA3ODEzNSwgMCwgOTgzNzAyLCA4ODEwLCA3NDQ5OSwgNjg2LCAKKyAgICAxMDQxMiwgODc1NSwgMCwgMCwgNTcxOCwgMTMyMjEsIDAsIDAsIDc4MTM1LCAwLCA5ODM3MTEsIDg4MTAsIDc0NDk5LCA2ODYsIAogICAgIDAsIDcxMzYyLCA0NjE5LCAxMTg5NTQsIDY2NTQsIDczNzY5LCA3NDQyNiwgMCwgMTIwNDAsIDY1Njg5LCAxMDEyOCwgCi0gICAgNjUxMTgsIDAsIDExOTE1MSwgNzQyMDUsIDkyNjUxLCAwLCAyNDAxLCA2ODE0NCwgODc5MiwgOTgzNjM5LCAwLCA2NTQ1NSwgCisgICAgNjUxMTgsIDAsIDExOTE1MSwgNzQyMDUsIDkyNjUxLCAwLCAyNDAxLCA2ODE0NCwgODc5MiwgOTgzNjQ4LCAwLCA2NTQ1NSwgCiAgICAgMCwgOTIyNDYsIDAsIDExOTEyOSwgMCwgMTI4ODYsIDEyNzkyMCwgNjY2MjQsIDAsIDQzNTU3LCAxMDMwMCwgMTAxNjEsIAotICAgIDEwMzk2LCA3NDEzNSwgOTgzNDQ1LCAxMTg5NDUsIDc4MTE4LCA3Mzg1MSwgMzAxMCwgNjQ0MSwgNzgxMjIsIDE0NTgsIAorICAgIDEwMzk2LCA3NDEzNSwgOTgzNDUzLCAxMTg5NDUsIDc4MTE4LCA3Mzg1MSwgMzAxMCwgNjQ0MSwgNzgxMjIsIDE0NTgsIAogICAgIDQxNDc1LCAxMjg2NzIsIDkzOTc1LCAwLCAxMTQ3OSwgMCwgMTIwMzU2LCA2MzUwLCAxMjg2NCwgNjk2NzQsIDc4MTE0LCAKICAgICAxMDYxLCA2NDc4MCwgMjAwMSwgNDMxMTEsIDU1MjMwLCAxMjg2ODYsIDQwNTIsIDAsIDc2MjYsIDAsIDAsIDEwNDUsIDAsIAogICAgIDU2MzEsIDQxMTEzLCAwLCAwLCA0MzcwNywgNzQxMjcsIDAsIDAsIDg0ODYsIDAsIDczNzU4LCAyMzM1LCA0MzYyLCAKQEAgLTE4MzA0LDggKzE4MzIzLDggQEAKICAgICA5MjI0NSwgNDQwLCAwLCAxMzA4NSwgOTIzMywgNzQyMTYsIDAsIDAsIDk5NTcsIDEyODI4NSwgNjY0NDcsIDgwNDYsIAogICAgIDY0OTYzLCA2NTc3NywgMTAxMjUsIDc0MjEyLCA0MjgxOSwgMTA5MTAsIDAsIDE1MjEsIDk4OTYsIDkzOTY1LCAxMDQ4NywgCiAgICAgNjk4NzgsIDEyNTI3LCAwLCA3OTcwLCAwLCAxMjg2NjAsIDAsIDY1NzY5LCA1MjQzLCA5ODQ5LCA1MjM5LCA2NTc3MSwgCi0gICAgOTgzMjI5LCAwLCA1MjM3LCA2OTcxNCwgMCwgMTAxMDMsIDUyNDcsIDQ3NjksIDAsIDExODk3NywgMTI4NzMsIDIyODMsIAotICAgIDk4MzIzMSwgMCwgMzAwOCwgNDg5NiwgMCwgMTIwODcsIDAsIDU1MjMxLCA0MTEwMywgMCwgNjQ1NjUsIDQ3NzMsIDAsIAorICAgIDk4MzIzNSwgMCwgNTIzNywgNjk3MTQsIDAsIDEwMTAzLCA1MjQ3LCA0NzY5LCAwLCAxMTg5NzcsIDEyODczLCAyMjgzLCAKKyAgICA5ODMyMzcsIDAsIDMwMDgsIDQ4OTYsIDAsIDEyMDg3LCAwLCA1NTIzMSwgNDExMDMsIDAsIDY0NTY1LCA0NzczLCAwLCAKICAgICA5MjcxNywgNzAwNzQsIDQ3NzAsIDAsIDkxNzU2NywgODczMSwgNjUzNzgsIDEyNzM2MiwgMTIwNjE5LCA5MTIyLCAxMjgwMzMsIAogICAgIDEyNjYwMCwgNDc3NCwgMzAxOSwgOTk5NywgMTI4MzQsIDAsIDk0NTYsIDEwMjE1LCAxMjA1NDcsIDAsIDAsIDAsIDAsIAogICAgIDc0Nzc2LCA0MjgxLCA0NzY4LCAwLCA0MTUzNSwgNDA5OSwgOTAxNywgMCwgMCwgNzgwOTUsIDAsIDc4MDk2LCAwLCAwLCAwLCAKQEAgLTE4MzE5LDEwICsxODMzOCwxMCBAQAogICAgIDc2MzQsIDY1MTY3LCA5ODQ1LCAwLCAwLCA1NzAxLCA5NzIyLCA0MTQ5MCwgOTgzMTUzLCAxNDI2LCA2ODIxNywgMCwgCiAgICAgNjg0NDcsIDQyMjA0LCA1NTI3MCwgODU3MSwgMTk0OTkxLCA3ODA2NywgMCwgNzg4MTgsIDkyNzE5LCA0MzE4MiwgMTIxODQsIAogICAgIDAsIDQyMDIyLCAwLCAxMDI4MSwgMCwgNTY1MCwgNDMxOTQsIDY0NzEyLCAxMDc0NCwgMCwgOTkwLCA1NjQ3LCAwLCA3Mzg3LCAKLSAgICA3ODczNCwgNDExMTQsIDExNDc3LCA1NjQ2LCAxMjg3OSwgMTEwMTgsIDk4MzkyMSwgMzk0NSwgOTI1ODksIDAsIDAsIDAsIDAsIAorICAgIDc4NzM0LCA0MTExNCwgMTE0NzcsIDU2NDYsIDEyODc5LCAxMTAxOCwgOTgzOTMwLCAzOTQ1LCA5MjU4OSwgMCwgMCwgMCwgMCwgCiAgICAgNzgyMTIsIDEyNzc0NiwgMTAyMCwgNzM3NjMsIDAsIDc4NzMxLCA1NjQ4LCA2NDc0OCwgMTk0OTEwLCA3ODczMywgMTAyMDUsIAotICAgIDM1NDUsIDk4MzU4NSwgNjk4NCwgMCwgNzQwNTEsIDk4MzY0NiwgNDMyNDIsIDEyMDQ1OCwgMjY2NywgMCwgMCwgMCwgOTkxMSwgCi0gICAgMCwgNjUwMjAsIDEwMDk3LCAxMTkxNjYsIDEyNzE0NSwgOTgzNjUzLCAxMTg4MzYsIDk4MzczOSwgNzg0MjcsIDExNDAsIAorICAgIDM1NDUsIDk4MzU4NSwgNjk4NCwgMCwgNzQwNTEsIDk4MzY1NSwgNDMyNDIsIDEyMDQ1OCwgMjY2NywgMCwgMCwgMCwgOTkxMSwgCisgICAgMCwgNjUwMjAsIDEwMDk3LCAxMTkxNjYsIDEyNzE0NSwgOTgzNjYyLCAxMTg4MzYsIDk4Mzc0OCwgNzg0MjcsIDExNDAsIAogICAgIDc4NDI2LCAwLCAxMDE1OSwgMCwgMCwgODEyOCwgMCwgMCwgOTE3OTY1LCAxODE1LCAxOTkxMCwgODkwLCAwLCAzMjY3LCAKICAgICA5MjI5MSwgMCwgMTAxMjMsIDAsIDQ0MTAsIDEwNDEsIDEwNTc2LCA2MzU0LCA5MjU4MSwgNTgwLCA3NDIzMiwgMCwgCiAgICAgMTI4MzQ3LCAwLCAwLCAwLCAxOTkzOCwgNjU5MDYsIDEyNzgxOSwgMCwgMCwgMzI5OCwgNTM3NSwgMTAxNDIsIDAsIDgyMTUsIApAQCAtMTgzMzMsMTYgKzE4MzUyLDE2IEBACiAgICAgNDE1MjEsIDExODkzNCwgNDk0LCAxMzI1MCwgMCwgNjUwOTgsIDYzNjQsIDk1NiwgMCwgMTI4MzAsIDEwNDYyLCA3Mzc0MCwgCiAgICAgNzM3MzQsIDAsIDAsIDAsIDY2NDQ5LCAxMzI2MywgNzQyODEsIDY5MjE3LCAxMzE3MSwgMTI3Nzk2LCAwLCAwLCA5MjI5NCwgCiAgICAgMCwgMTA0NCwgNDEyNzYsIDAsIDAsIDAsIDQyMDY4LCAxMTc5NSwgMCwgMCwgMCwgMCwgNDI0NTAsIDM5MDcsIDAsIDY0NTI2LCAKLSAgICAxMTgyOSwgNjgxOTcsIDEyMjk1LCAwLCAxMTQ3NSwgMCwgMzAyMCwgMTE1MzcsIDAsIDY2NDQxLCA5ODM0NDYsIDcwOTgsIDAsIAorICAgIDExODI5LCA2ODE5NywgMTIyOTUsIDAsIDExNDc1LCAwLCAzMDIwLCAxMTUzNywgMCwgNjY0NDEsIDk4MzQ1NCwgNzA5OCwgMCwgCiAgICAgMCwgMTA1NywgNTY2LCA0MjY5NiwgMCwgMzAxNiwgNDIyNzQsIDQzNDY0LCA2NjQ5MCwgMTI5MjEsIDY2NTcxLCA3ODQ3MiwgCiAgICAgOTI1MTAsIDMwMDYsIDQ2MjAsIDEyNzIzNywgOTgzNTc4LCAwLCAwLCA2NDY1OSwgMCwgMTI3NzQ5LCA1NTI1MywgNjM1NywgCiAgICAgNjM2MiwgODYyNiwgNzEzMzcsIDIyMTYsIDkwOTAsIDY1Mzc3LCA0MTU5NiwgMCwgNDI5MjAsIDE2OTgsIDAsIDY0NDc3LCAwLCAKICAgICA0MzgxMywgMTA1MywgMCwgNzgyNjksIDAsIDEyNjU4NiwgMTA1MiwgMTA1MSwgNDU5LCAxMDYwLCA3NDM0OSwgNjY0NzksIDAsIAogICAgIDAsIDAsIDAsIDQyNDkwLCA2ODksIDY1MDgsIDQxNjMsIDQyMjk4LCA4NjM5LCA2NjY0MSwgNDI0NiwgMCwgMCwgMTIxMzAsIAotICAgIDAsIDQyMzM3LCA2NDU5NiwgNjQzNzUsIDY2NDgxLCAxMjc4NTAsIDAsIDAsIDYzNTksIDAsIDQzNDcxLCA5ODM3NTksIDAsIAorICAgIDAsIDQyMzM3LCA2NDU5NiwgNjQzNzUsIDY2NDgxLCAxMjc4NTAsIDAsIDAsIDYzNTksIDAsIDQzNDcxLCA5ODM3NjgsIDAsIAogICAgIDAsIDEyNzI3NCwgMCwgNjM1OCwgNjM2MSwgMTkyNiwgNjM1NiwgOTI2MjcsIDc4OTgsIDgxMTAsIDEwOTM1LCAwLCAxMDA2OSwgCi0gICAgNTgzMCwgMCwgNDM2ODUsIDAsIDAsIDAsIDAsIDg2OTMsIDc4NjExLCAxMTk1NjUsIDk4Mzc5OSwgMTIwNDEzLCAwLCAKLSAgICAxMjcyNTcsIDY1ODk0LCAwLCAwLCAwLCA5ODM5MTQsIDAsIDAsIDExOTE4NywgMjEzNSwgNzg4NjgsIDAsIDAsIDc4ODY5LCAKKyAgICA1ODMwLCAwLCA0MzY4NSwgMCwgMCwgMCwgMCwgODY5MywgNzg2MTEsIDExOTU2NSwgOTgzODA4LCAxMjA0MTMsIDAsIAorICAgIDEyNzI1NywgNjU4OTQsIDAsIDAsIDAsIDk4MzkyMywgMCwgMCwgMTE5MTg3LCAyMTM1LCA3ODg2OCwgMCwgMCwgNzg4NjksIAogICAgIDQyMzEzLCA1NTc5LCA5MjQxMiwgMCwgOTgzMDgyLCA5NDAwMiwgMCwgNTU3OCwgNDE3NzQsIDEyODExNSwgNDIwMjMsIAogICAgIDYyMzQsIDU2NjksIDkyMjc1LCAwLCAwLCAwLCAxMjc1MDYsIDY4MjAyLCA1NTgzLCAwLCAwLCA0MjQyNiwgNTU4MCwgCiAgICAgNDIyNzYsIDI5MjMsIDg5MiwgMjIyMCwgNDI0NjUsIDQxMzMwLCAxOTQ5ODcsIDU3OTUsIDY1NTEyLCAxMTkwMDYsIDY1NzAyLCAKQEAgLTE4MzUyLDcgKzE4MzcxLDcgQEAKICAgICA2NDkwMCwgNzE1MywgNjA5NSwgNDE4NjUsIDAsIDMwMTUsIDEyODAyMywgMTI2NDY1LCA1MjExLCA5ODMwODMsIDY0MDAsIDAsIAogICAgIDE5NDk4MywgNzAwNTQsIDgxODksIDExMjc2LCAwLCAwLCAzNzIsIDEyODgyOSwgMCwgMTE4ODc0LCA0MjEwMiwgNDE1ODUsIAogICAgIDEyODIwMiwgMCwgNDIxMDEsIDI3NiwgNzg0MDIsIDAsIDMzLCA3NDIyNiwgMTI3MzAzLCA5MDA3LCAxMTg3OTYsIDQxNTg4LCAKLSAgICA2NjAzMywgNDI3LCAxMDc2MywgMTE4ODE5LCAwLCAxMjc4ODQsIDAsIDEwMzEsIDYyNTcsIDAsIDQyMTA0LCAwLCA5ODM5NzEsIAorICAgIDY2MDMzLCA0MjcsIDEwNzYzLCAxMTg4MTksIDAsIDEyNzg4NCwgMCwgMTAzMSwgNjI1NywgMCwgNDIxMDQsIDAsIDk4Mzk4MCwgCiAgICAgMjMyOCwgOTI0MDksIDEwNzEsIDQyODk5LCAwLCA3NDg0OCwgMCwgOTgzNTgwLCAwLCAxMDQ3LCAwLCAwLCA2NDc5MCwgMCwgCiAgICAgNjk3MjMsIDEwNjUxLCAwLCAwLCAwLCAwLCA5MjIwNiwgMTE5MTgxLCA1NzExLCA0MTYzMywgMTIwOTgsIDY1NTcxLCA5MTY2LCAKICAgICAwLCA1NzEwLCAwLCA2NzkwLCA2NTE2OCwgMTMyMTYsIDAsIDY5NzE2LCA2OTcyNiwgMCwgNjQ2MTEsIDQxNjIzLCAxOTUwMDEsIApAQCAtMTgzNjEsMTIwICsxODM4MCwxMjAgQEAKICAgICA5MTk2LCA2OTY3MCwgMCwgMCwgMCwgMCwgMTE4OTExLCAwLCAwLCAwLCAwLCAwLCAxMjAwMTAsIDAsIDg3MDEsIDY4MTMwLCAKICAgICAxMTk2MTYsIDEyMDUyMiwgMCwgNDI0NzcsIDE5NDk5NCwgMTIxMjMsIDQ0OTUsIDQzNTY5LCAwLCAwLCAwLCA2NDk0NiwgCiAgICAgMTA5OTIsIDAsIDEyMDAwOSwgMCwgMCwgOTMxOCwgOTM5ODYsIDEzMjQ5LCA2NTY3OSwgNzM4MDgsIDAsIDY1NDU3LCAKLSAgICA0MjI0OSwgNzYzOSwgNDM5OTUsIDY3ODQ1LCA0MjY0MSwgNTQ1NCwgMCwgMCwgMTk0OTk3LCAxMjAwMDUsIDAsIDk4Mzk1NywgCisgICAgNDIyNDksIDc2MzksIDQzOTk1LCA2Nzg0NSwgNDI2NDEsIDU0NTQsIDAsIDAsIDE5NDk5NywgMTIwMDA1LCAwLCA5ODM5NjYsIAogICAgIDUwODQsIDAsIDAsIDExODg2MSwgMCwgNzMzLCA5MTc4NzYsIDc4MDE0LCA3ODQzNiwgNzg0MzUsIDQxNjc3LCAwLCA5MjE4LCAKLSAgICAxNzMxLCAwLCA5ODM3MzcsIDAsIDY3OTkwLCAwLCAwLCAwLCAxMjAwMDEsIDEyNzAxOCwgOTI0OTIsIDUxNTUsIDEyMDAwMCwgCi0gICAgNTM1OCwgOTgzNzM1LCAwLCA5MTc3NjcsIDY0NDI0LCA5ODMyMjUsIDM4NDAsIDY0MzE0LCA0MTQzMiwgMCwgNzgzMTUsIAorICAgIDE3MzEsIDAsIDk4Mzc0NiwgMCwgNjc5OTAsIDAsIDAsIDAsIDEyMDAwMSwgMTI3MDE4LCA5MjQ5MiwgNTE1NSwgMTIwMDAwLCAKKyAgICA1MzU4LCA5ODM3NDQsIDAsIDkxNzc2NywgNjQ0MjQsIDk4MzIzMSwgMzg0MCwgNjQzMTQsIDQxNDMyLCAwLCA3ODMxNSwgCiAgICAgNjg0MzAsIDY3OTgwLCA0MzI1MywgNjU5NDMsIDAsIDMzNzEsIDEwOTg4LCAwLCA4NzcxLCAxNDc5LCAwLCAwLCAxMTA5LCAKLSAgICAxMTU4MCwgMCwgNjQ2MDEsIDEyMjA1LCAwLCAwLCA2NDUwNywgODg2OCwgMzk5LCA2Nzk3OCwgNzQ4NDIsIDk4MzI3NiwgCi0gICAgOTgzNzEyLCAxMjE0OSwgMTMwODgsIDU1MSwgMCwgMTAxNTYsIDEyMTE5LCA5MjU3MiwgMCwgMjU0NCwgNjUwNzQsIAorICAgIDExNTgwLCAwLCA2NDYwMSwgMTIyMDUsIDAsIDAsIDY0NTA3LCA4ODY4LCAzOTksIDY3OTc4LCA3NDg0MiwgOTgzMjg0LCAKKyAgICA5ODM3MjEsIDEyMTQ5LCAxMzA4OCwgNTUxLCAwLCAxMDE1NiwgMTIxMTksIDkyNTcyLCAwLCAyNTQ0LCA2NTA3NCwgCiAgICAgMTE5MjExLCAwLCAwLCA3ODAxMSwgMzUxLCAxMTkxNDksIDAsIDAsIDU1MjI5LCAwLCA3NDI2OCwgMCwgMCwgMCwgNDIzNzcsIAotICAgIDAsIDAsIDAsIDk4MzkxNSwgMCwgOTAxMywgNDA1NCwgMCwgOTgzNTcwLCAwLCAwLCA3Mzk2MCwgNTU4NSwgNjU4ODEsIAorICAgIDAsIDAsIDAsIDk4MzkyNCwgMCwgOTAxMywgNDA1NCwgMCwgOTgzNTcwLCA5ODM2MjgsIDAsIDczOTYwLCA1NTg1LCA2NTg4MSwgCiAgICAgMjU0OSwgNzQ0NjksIDAsIDAsIDU1ODQsIDgzNTgsIDAsIDY0MjE1LCA5MjIxOSwgMTA5MTksIDAsIDc5ODAsIDEyNjYwMSwgCi0gICAgOTgzNzc1LCAyMjE4LCA0MTgwMCwgNTU4OSwgMCwgMjY2NCwgNDE2MTMsIDU1ODYsIDExODg5MCwgMCwgMTEzNTYsIDAsIDAsIAorICAgIDk4Mzc4NCwgMjIxOCwgNDE4MDAsIDU1ODksIDAsIDI2NjQsIDQxNjEzLCA1NTg2LCAxMTg4OTAsIDAsIDExMzU2LCAwLCAwLCAKICAgICA0MzQ1MiwgNzg2MDksIDAsIDQyNTczLCA2Nzg1NiwgMCwgNzgxMjksIDAsIDAsIDc0MzkyLCA4MTM1LCA2NDUwLCAxMDA1NSwgCiAgICAgNzc5OTYsIDAsIDAsIDExOTIyNSwgNTY1NywgMCwgOTYyNiwgMCwgNzc5OTQsIDEwMTc5LCA1NjU0LCAxMjkzOSwgOTI1NzMsIAogICAgIDEyMDc5OSwgMCwgMCwgNTY1MiwgMTA5NDUsIDAsIDY2NDg2LCAwLCAzNjYxLCA3ODYzLCAwLCAwLCAwLCA3NDUwOSwgCi0gICAgOTgzODQzLCA1NjU5LCAwLCA3ODY5MiwgNjY3MjksIDU2NTUsIDAsIDQyMTY4LCAwLCAxMDU1LCA5MTc2MjgsIDEyNzc5MiwgCi0gICAgNjYzMTAsIDc0MDMwLCAwLCAxMjE0NiwgNzM5NTUsIDczOTU2LCAxMTYxOCwgMCwgMTI2OTkwLCAwLCAxMDI3MiwgMTAzMDQsIAotICAgIDEwMzY4LCA0MjUxOCwgNTk0LCAxMDI0NCwgMTAyNDgsIDc0MDcsIDk4Mzg3OCwgNjQ4NzAsIDAsIDM0NjcsIDk4Mzg4MiwgMCwgCi0gICAgMzMzMSwgOTQ2LCAxMDIzMSwgMTQ5NSwgODEzMSwgNzQzMzAsIDAsIDk1NjIsIDY5MjIyLCA2NTkyNywgMCwgNzAwMzYsIAotICAgIDY5Njk2LCA2OTc2OSwgNjQ2NTYsIDk4MzcxNywgMCwgOTQwMjAsIDcwMDU2LCA1NjY2LCA2NTIyNywgNTMxOCwgNjM5OTQsIAotICAgIDAsIDkwOTEsIDEwNzk4LCAwLCAxMjgxNjYsIDEwMTg2LCAwLCA3NzMyLCA5ODM3MTUsIDY0NTU2LCAwLCAwLCA1NjY4LCAKLSAgICA3NDQ0NSwgMCwgMTI4NjYzLCA1NjcwLCAxMjY2MTAsIDEyNzI5NywgMTE4MjAsIDI5OTIsIDc4MjYsIDU2NjcsIDE5OTUyLCAKLSAgICAxMjA4MDcsIDAsIDEyNzQ5LCA3NDU1MSwgMCwgMCwgNjY0OTYsIDQzNjEsIDExOTI2MCwgMTMwNiwgOTI4NiwgMTQ5NywgCi0gICAgMTI4Mjg2LCA5NDAwNCwgMCwgMCwgMzU3MSwgMTMyNDcsIDAsIDc5NzMsIDY2MzUzLCA2ODQzNSwgNzgyNzgsIDY3ODk2LCAKLSAgICA0MzE5MiwgMCwgNzgyNjUsIDU1MywgMTIwNjUzLCAwLCAxMjg1NTQsIDU4MjksIDAsIDQ1ODcsIDc4Mjg1LCA2NTkxMiwgMCwgCi0gICAgMTI3NDYsIDAsIDAsIDExOTkyNCwgNTYzMywgMTE5OTI3LCA5NDEwMSwgOTQxMDIsIDk0MDk5LCA2NDkwNSwgOTQxMDUsIAotICAgIDk1MTIsIDk0MTAzLCAxMjc0MiwgNjQ0MywgOTgzNzk3LCAwLCA5MTM1LCAwLCA0MTU2NCwgMCwgNTUyMTksIDEyODgzMiwgCi0gICAgOTgzODQyLCAwLCAxMjE0OCwgMCwgNzgyOTcsIDAsIDY0MjU2LCAwLCAxMTY2OSwgMCwgNTYzNCwgNDUyNCwgMCwgMTI3MjcwLCAKLSAgICAwLCAxMTg4ODAsIDI0MjUsIDY1MTgyLCAxMjg3NjksIDQzNjM2LCA1MjIxLCA3ODQxMCwgMzI4LCAwLCA5ODM4MDAsIAotICAgIDY5ODE1LCA1NjM2LCAwLCA1MzI5LCAwLCA1NjM4LCAxMTk5MTgsIDc5NDAsIDY0OTM4LCA0MzIyMywgNDM3NjAsIDU2MzUsIAotICAgIDMzNzMsIDI5ODYsIDc4MjkyLCA3NDIyMywgMzQzNywgNzgyOTEsIDYyMDMsIDQyNDcsIDAsIDExOTIwLCA4Mjc0LCAwLCAwLCAKLSAgICAxNjU3LCA0MTU2MSwgNzgyOTksIDc4Mjk1LCA1NjM5LCAyOTU0LCA1NjYwLCA1NjQwLCA3ODMwMywgOTgzNjc2LCA3ODMwMCwgCi0gICAgNDIyMjcsIDAsIDAsIDQxNjM3LCA2Nzg3MiwgMCwgNzgzMTAsIDQxNjI1LCA0MzM2MiwgNzgzMDksIDEyMDcxMywgMTE3MDUsIAotICAgIDU2NDIsIDAsIDU0ODYsIDAsIDQzNTYsIDExNzEwLCAwLCAxMjA1MSwgNjk5MzgsIDAsIDU2NDEsIDgyNTksIDAsIDEwNTgsIAotICAgIDAsIDY3NjMwLCAwLCAwLCAxMTQ0LCA3ODc1MCwgMCwgNDIyMjgsIDAsIDczODkwLCAxMTg5NzIsIDAsIDI4MDAsIDAsIAotICAgIDU2NDUsIDY0OTY0LCA4NjUyLCAyNTQ3LCA2NjQ4NCwgNDM2MzQsIDAsIDU2MDgsIDY1ODkwLCA0MzgwOCwgMCwgNjc2MjEsIAotICAgIDExOTkzNCwgOTAwMCwgMCwgMCwgOTI2NzMsIDE4NjUsIDAsIDU2MTMsIDY5OTUwLCAwLCAwLCA1NjEwLCAwLCAwLCA2NTgyNiwgCi0gICAgMjA2OSwgMCwgMTA3ODcsIDQzOTk5LCAyOTk3LCAwLCA1NjA5LCA3ODMxNiwgNjUzMTksIDc4MzEzLCAxMjMxNiwgNjUzNzYsIAotICAgIDI0MTIsIDAsIDgxODYsIDk4MDcsIDc0MjY5LCA5MjU0NywgMTMxMzAsIDY1ODc0LCAwLCA1ODA3LCAwLCAxMDAzMCwgNTMwNiwgCi0gICAgMTIzNjQsIDEyODA2NCwgMCwgMTE3MDQsIDAsIDkyNTgzLCAxMDIxMSwgMCwgMCwgMCwgMCwgMTE3MDYsIDk3MTAsIDAsIDAsIAotICAgIDAsIDQxMywgNjU2MjMsIDcxMTgsIDAsIDkxMzMsIDc0MjYyLCAwLCAxMDQyLCAwLCA2NDc3OSwgMTIxNzEsIDExOTI0MCwgCi0gICAgNjE4NSwgNjQ3NzYsIDQ5ODQsIDAsIDcwOCwgMTEzOTEsIDAsIDEyMjQxLCA5MjcyMCwgOTgzODkwLCAxMzA4LCAwLCAyNTM0LCAKLSAgICA4MTAsIDAsIDAsIDAsIDAsIDAsIDE5MTcsIDMwMDAsIDAsIDAsIDEyMDczOSwgMjM2NCwgOTI0NDMsIDc0NDcwLCA2NjYxOCwgCi0gICAgNjU2ODAsIDEyMDc3OSwgMTAwMjcsIDAsIDEyODE1NCwgMTIzMzcsIDEyMDcyMiwgMTI3MzY4LCA5ODMxNjcsIDI5ODAsIAotICAgIDc1NSwgNjk3NzQsIDkzMSwgMTMxMjQsIDY4MTgyLCA2MzYzLCAyNzQ4LCAwLCAwLCA2NTA0MSwgOTIyNzYsIDQ0MDExLCAKLSAgICA4NzMwLCA5ODMwNjcsIDEyNzg1NCwgNzgzMTIsIDcyNzQsIDExOTI1MCwgMCwgNzI3NSwgNzgzMDQsIDkzNSwgMCwgNjU4NDAsIAotICAgIDM3NywgNDIzMjUsIDExNjQ5LCAxMjczNjMsIDY1MjUzLCA2NDMwMSwgMTI4ODM1LCA3ODMwOCwgNDIzNDEsIDY1Mjg0LCAKLSAgICAyNDE3LCAwLCAxMjg4NCwgMTk5MTIsIDc5MDcsIDEwNzY4LCAwLCAxOTQ5OTgsIDAsIDEwNjczLCAxMTkyMTcsIDcyNDgsIDAsIAotICAgIDEyODM0NiwgMTc4MSwgNTQ5NiwgMzYyNywgNjIsIDE2NDksIDAsIDk2NCwgMCwgMTI3ODc2LCA3ODIyNiwgMTI4Nzc1LCAKLSAgICAxMjc1MTIsIDAsIDAsIDAsIDAsIDQzNjg5LCAxMjc5MTEsIDEzMTQyLCA3ODgxMiwgNDI0MTUsIDY2NTc1LCA0NTQyLCAKLSAgICA2OTkwOSwgNDM1NDcsIDAsIDAsIDc2NzcsIDI5OTEsIDQ5NDYsIDQyNDU0LCAxMTU2NSwgNzk0OSwgMCwgOTgzOTA5LCAKLSAgICAxMTM0MSwgNDI0OTQsIDMwNzMsIDY1NjI1LCA5NzE0LCAxMTY5MiwgNDY1NywgMCwgOTI3MjQsIDY0NzgsIDk4OTgsIAotICAgIDQzNjczLCA2NTIzNywgNjI0MSwgNzEwNiwgNDg3NywgOTgzNzg2LCA2MjM4LCAwLCAxMDU0OCwgMTI3MDQ5LCA0NDA5LCAwLCAKLSAgICAwLCA2NDc5OCwgMCwgNTM0NiwgMCwgOTQwNDcsIDYyMzcsIDQ4NzQsIDAsIDkxNzYsIDAsIDEyNjU1MywgNjUyMzEsIAotICAgIDY1ODg0LCAxMjY3OCwgNzg3NDgsIDExODkxMiwgMTEzNzgsIDQ0MDE4LCA0Mjc4NSwgMjQwOCwgMzI1MSwgMCwgMCwgNTY4NSwgCi0gICAgMCwgMjQ2MSwgMTEwNTIsIDcwOTEsIDUzNDIsIDgzMTcsIDAsIDY4MTYzLCA1MzQwLCAwLCAxMjc4MjAsIDQzNjM1LCAKLSAgICA3MzkyOCwgMTI3NTI5LCAwLCAwLCAwLCAxMjg1MTAsIDY1NDgyLCAwLCA5MTQyLCAwLCAxMjY0NzAsIDAsIDEwOTM4LCAwLCAKLSAgICAxMTg3OTAsIDExODIsIDI1NDIsIDQ4MjYsIDAsIDAsIDEyODE3NiwgNTI5LCA4NTgwLCAwLCAwLCAxMDU4NiwgMTA3OTAsIAotICAgIDEwODM5LCA2NjAyMywgNDE1OTMsIDQxMjA3LCAwLCAwLCA0MTU5NCwgMjI1LCA0MjgyOCwgMCwgMCwgOTgzOTI5LCAxMTM3NiwgCi0gICAgNzQzNzksIDEwNzIxLCA2NzY2NCwgMzQzOCwgNDIwOTcsIDEyNzI2NywgMTEwODQsIDMxOTQsIDQxODcwLCAyNjYsIDc4MzA1LCAKLSAgICAxMjAxODMsIDQxODczLCAxMjA1NzUsIDExMzI0LCAxMjA1MzEsIDAsIDg0MjAsIDY0OTE4LCAxMjg4NDQsIDQxODcxLCAKLSAgICA0MTMzOCwgMzczNCwgNzczNCwgNDM2ODMsIDg3NTAsIDY2NjA1LCA2NjAxMSwgOTI1MTQsIDQwOTY1LCAxMjc5MzcsIDAsIAotICAgIDUxNjEsIDEwNTcyLCAwLCAwLCAwLCA2NDM0OSwgNzI4NywgNDIxNjIsIDEyNzU1MiwgMCwgMTI2NjA1LCAxMTk0OCwgCi0gICAgNjkyMjAsIDEyMzU5LCA0MzQyOSwgNDEzNjksIDE2OTcsIDEyMTkxLCAwLCA2ODYzMywgNzI4NiwgMCwgNjg2MzUsIDEwMDMxLCAKLSAgICAwLCA5ODcwLCA2ODY0NSwgODYyMCwgNjU4MjQsIDAsIDExOTM4LCAwLCA3Mjg1LCAwLCAxMTk1NzcsIDQyNjc4LCAwLCAKLSAgICA0MzY3NywgNDE1ODMsIDAsIDY1Nzk5LCA5MjYyMywgMCwgMCwgOTgzOTI3LCA3ODE2OSwgNjYxOTksIDAsIDM2MDksIAorICAgIDk4Mzg1MiwgNTY1OSwgMCwgNzg2OTIsIDY2NzI5LCA1NjU1LCA5ODM2MjYsIDQyMTY4LCAwLCAxMDU1LCA5MTc2MjgsIAorICAgIDEyNzc5MiwgNjYzMTAsIDc0MDMwLCAwLCAxMjE0NiwgNzM5NTUsIDczOTU2LCAxMTYxOCwgMCwgMTI2OTkwLCAwLCAxMDI3MiwgCisgICAgMTAzMDQsIDEwMzY4LCA0MjUxOCwgNTk0LCAxMDI0NCwgMTAyNDgsIDc0MDcsIDk4Mzg4NywgNjQ4NzAsIDAsIDM0NjcsIAorICAgIDk4Mzg5MSwgMCwgMzMzMSwgOTQ2LCAxMDIzMSwgMTQ5NSwgODEzMSwgNzQzMzAsIDAsIDk1NjIsIDY5MjIyLCA2NTkyNywgMCwgCisgICAgNzAwMzYsIDY5Njk2LCA2OTc2OSwgNjQ2NTYsIDk4MzcyNiwgMCwgOTQwMjAsIDcwMDU2LCA1NjY2LCA2NTIyNywgNTMxOCwgCisgICAgNjM5OTQsIDAsIDkwOTEsIDEwNzk4LCAwLCAxMjgxNjYsIDEwMTg2LCAwLCA3NzMyLCA5ODM3MjQsIDY0NTU2LCAwLCAwLCAKKyAgICA1NjY4LCA3NDQ0NSwgMCwgMTI4NjYzLCA1NjcwLCAxMjY2MTAsIDEyNzI5NywgMTE4MjAsIDI5OTIsIDc4MjYsIDU2NjcsIAorICAgIDE5OTUyLCAxMjA4MDcsIDAsIDEyNzQ5LCA3NDU1MSwgMCwgMCwgNjY0OTYsIDQzNjEsIDExOTI2MCwgMTMwNiwgOTI4NiwgCisgICAgMTQ5NywgMTI4Mjg2LCA5NDAwNCwgMCwgMCwgMzU3MSwgMTMyNDcsIDAsIDc5NzMsIDY2MzUzLCA2ODQzNSwgNzgyNzgsIAorICAgIDY3ODk2LCA0MzE5MiwgMCwgNzgyNjUsIDU1MywgMTIwNjUzLCAwLCAxMjg1NTQsIDU4MjksIDAsIDQ1ODcsIDc4Mjg1LCAKKyAgICA2NTkxMiwgMCwgMTI3NDYsIDAsIDAsIDExOTkyNCwgNTYzMywgMTE5OTI3LCA5NDEwMSwgOTQxMDIsIDk0MDk5LCA2NDkwNSwgCisgICAgOTQxMDUsIDk1MTIsIDk0MTAzLCAxMjc0MiwgNjQ0MywgOTgzODA2LCAwLCA5MTM1LCAwLCA0MTU2NCwgMCwgNTUyMTksIAorICAgIDEyODgzMiwgOTgzODUxLCAwLCAxMjE0OCwgMCwgNzgyOTcsIDAsIDY0MjU2LCAwLCAxMTY2OSwgMCwgNTYzNCwgNDUyNCwgMCwgCisgICAgMTI3MjcwLCAwLCAxMTg4ODAsIDI0MjUsIDY1MTgyLCAxMjg3NjksIDQzNjM2LCA1MjIxLCA3ODQxMCwgMzI4LCAwLCAKKyAgICA5ODM4MDksIDY5ODE1LCA1NjM2LCAwLCA1MzI5LCAwLCA1NjM4LCAxMTk5MTgsIDc5NDAsIDY0OTM4LCA0MzIyMywgNDM3NjAsIAorICAgIDU2MzUsIDMzNzMsIDI5ODYsIDc4MjkyLCA3NDIyMywgMzQzNywgNzgyOTEsIDYyMDMsIDQyNDcsIDAsIDExOTIwLCA4Mjc0LCAKKyAgICAwLCAwLCAxNjU3LCA0MTU2MSwgNzgyOTksIDc4Mjk1LCA1NjM5LCAyOTU0LCA1NjYwLCA1NjQwLCA3ODMwMywgOTgzNjg1LCAKKyAgICA3ODMwMCwgNDIyMjcsIDAsIDAsIDQxNjM3LCA2Nzg3MiwgMCwgNzgzMTAsIDQxNjI1LCA0MzM2MiwgNzgzMDksIDEyMDcxMywgCisgICAgMTE3MDUsIDU2NDIsIDAsIDU0ODYsIDAsIDQzNTYsIDExNzEwLCAwLCAxMjA1MSwgNjk5MzgsIDAsIDU2NDEsIDgyNTksIDAsIAorICAgIDEwNTgsIDAsIDY3NjMwLCAwLCAwLCAxMTQ0LCA3ODc1MCwgMCwgNDIyMjgsIDAsIDczODkwLCAxMTg5NzIsIDAsIDI4MDAsIAorICAgIDAsIDU2NDUsIDY0OTY0LCA4NjUyLCAyNTQ3LCA2NjQ4NCwgNDM2MzQsIDAsIDU2MDgsIDY1ODkwLCA0MzgwOCwgMCwgCisgICAgNjc2MjEsIDExOTkzNCwgOTAwMCwgMCwgMCwgOTI2NzMsIDE4NjUsIDAsIDU2MTMsIDY5OTUwLCAwLCAwLCA1NjEwLCAwLCAwLCAKKyAgICA2NTgyNiwgMjA2OSwgMCwgMTA3ODcsIDQzOTk5LCAyOTk3LCAwLCA1NjA5LCA3ODMxNiwgNjUzMTksIDc4MzEzLCAxMjMxNiwgCisgICAgNjUzNzYsIDI0MTIsIDAsIDgxODYsIDk4MDcsIDc0MjY5LCA5MjU0NywgMTMxMzAsIDY1ODc0LCAwLCA1ODA3LCAwLCAKKyAgICAxMDAzMCwgNTMwNiwgMTIzNjQsIDEyODA2NCwgMCwgMTE3MDQsIDAsIDkyNTgzLCAxMDIxMSwgMCwgMCwgMCwgMCwgMTE3MDYsIAorICAgIDk3MTAsIDAsIDAsIDAsIDQxMywgNjU2MjMsIDcxMTgsIDAsIDkxMzMsIDc0MjYyLCAwLCAxMDQyLCAwLCA2NDc3OSwgCisgICAgMTIxNzEsIDExOTI0MCwgNjE4NSwgNjQ3NzYsIDQ5ODQsIDAsIDcwOCwgMTEzOTEsIDAsIDEyMjQxLCA5MjcyMCwgOTgzODk5LCAKKyAgICAxMzA4LCAwLCAyNTM0LCA4MTAsIDAsIDAsIDAsIDAsIDAsIDE5MTcsIDMwMDAsIDAsIDAsIDEyMDczOSwgMjM2NCwgOTI0NDMsIAorICAgIDc0NDcwLCA2NjYxOCwgNjU2ODAsIDEyMDc3OSwgMTAwMjcsIDAsIDEyODE1NCwgMTIzMzcsIDEyMDcyMiwgMTI3MzY4LCAKKyAgICA5ODMxNjcsIDI5ODAsIDc1NSwgNjk3NzQsIDkzMSwgMTMxMjQsIDY4MTgyLCA2MzYzLCAyNzQ4LCAwLCAwLCA2NTA0MSwgCisgICAgOTIyNzYsIDQ0MDExLCA4NzMwLCA5ODMwNjcsIDEyNzg1NCwgNzgzMTIsIDcyNzQsIDExOTI1MCwgMCwgNzI3NSwgNzgzMDQsIAorICAgIDkzNSwgMCwgNjU4NDAsIDM3NywgNDIzMjUsIDExNjQ5LCAxMjczNjMsIDY1MjUzLCA2NDMwMSwgMTI4ODM1LCA3ODMwOCwgCisgICAgNDIzNDEsIDY1Mjg0LCAyNDE3LCAwLCAxMjg4NCwgMTk5MTIsIDc5MDcsIDEwNzY4LCAwLCAxOTQ5OTgsIDAsIDEwNjczLCAKKyAgICAxMTkyMTcsIDcyNDgsIDAsIDEyODM0NiwgMTc4MSwgNTQ5NiwgMzYyNywgNjIsIDE2NDksIDAsIDk2NCwgMCwgMTI3ODc2LCAKKyAgICA3ODIyNiwgMTI4Nzc1LCAxMjc1MTIsIDAsIDAsIDAsIDAsIDQzNjg5LCAxMjc5MTEsIDEzMTQyLCA3ODgxMiwgNDI0MTUsIAorICAgIDY2NTc1LCA0NTQyLCA2OTkwOSwgNDM1NDcsIDAsIDAsIDc2NzcsIDI5OTEsIDQ5NDYsIDQyNDU0LCAxMTU2NSwgNzk0OSwgMCwgCisgICAgOTgzOTE4LCAxMTM0MSwgNDI0OTQsIDMwNzMsIDY1NjI1LCA5NzE0LCAxMTY5MiwgNDY1NywgMCwgOTI3MjQsIDY0NzgsIAorICAgIDk4OTgsIDQzNjczLCA2NTIzNywgNjI0MSwgNzEwNiwgNDg3NywgOTgzNzk1LCA2MjM4LCAwLCAxMDU0OCwgMTI3MDQ5LCAKKyAgICA0NDA5LCAwLCAwLCA2NDc5OCwgMCwgNTM0NiwgMCwgOTQwNDcsIDYyMzcsIDQ4NzQsIDAsIDkxNzYsIDAsIDEyNjU1MywgCisgICAgNjUyMzEsIDY1ODg0LCAxMjY3OCwgNzg3NDgsIDExODkxMiwgMTEzNzgsIDQ0MDE4LCA0Mjc4NSwgMjQwOCwgMzI1MSwgMCwgCisgICAgMCwgNTY4NSwgMCwgMjQ2MSwgMTEwNTIsIDcwOTEsIDUzNDIsIDgzMTcsIDAsIDY4MTYzLCA1MzQwLCAwLCAxMjc4MjAsIAorICAgIDQzNjM1LCA3MzkyOCwgMTI3NTI5LCAwLCAwLCAwLCAxMjg1MTAsIDY1NDgyLCAwLCA5MTQyLCAwLCAxMjY0NzAsIDAsIAorICAgIDEwOTM4LCAwLCAxMTg3OTAsIDExODIsIDI1NDIsIDQ4MjYsIDAsIDAsIDEyODE3NiwgNTI5LCA4NTgwLCAwLCAwLCAxMDU4NiwgCisgICAgMTA3OTAsIDEwODM5LCA2NjAyMywgNDE1OTMsIDQxMjA3LCAwLCAwLCA0MTU5NCwgMjI1LCA0MjgyOCwgMCwgMCwgOTgzOTM4LCAKKyAgICAxMTM3NiwgNzQzNzksIDEwNzIxLCA2NzY2NCwgMzQzOCwgNDIwOTcsIDEyNzI2NywgMTEwODQsIDMxOTQsIDQxODcwLCAyNjYsIAorICAgIDc4MzA1LCAxMjAxODMsIDQxODczLCAxMjA1NzUsIDExMzI0LCAxMjA1MzEsIDAsIDg0MjAsIDY0OTE4LCAxMjg4NDQsIAorICAgIDQxODcxLCA0MTMzOCwgMzczNCwgNzczNCwgNDM2ODMsIDg3NTAsIDY2NjA1LCA2NjAxMSwgOTI1MTQsIDQwOTY1LCAKKyAgICAxMjc5MzcsIDAsIDUxNjEsIDEwNTcyLCAwLCAwLCAwLCA2NDM0OSwgNzI4NywgNDIxNjIsIDEyNzU1MiwgMCwgMTI2NjA1LCAKKyAgICAxMTk0OCwgNjkyMjAsIDEyMzU5LCA0MzQyOSwgNDEzNjksIDE2OTcsIDEyMTkxLCAwLCA2ODYzMywgNzI4NiwgMCwgNjg2MzUsIAorICAgIDEwMDMxLCAwLCA5ODcwLCA2ODY0NSwgODYyMCwgNjU4MjQsIDAsIDExOTM4LCAwLCA3Mjg1LCAwLCAxMTk1NzcsIDQyNjc4LCAKKyAgICAwLCA0MzY3NywgNDE1ODMsIDAsIDY1Nzk5LCA5MjYyMywgMCwgMCwgOTgzOTM2LCA3ODE2OSwgNjYxOTksIDAsIDM2MDksIAogICAgIDY4NjI0LCAwLCA4MzIsIDEyMDY5MywgMTIwNzcwLCA3ODQ3MywgNjYwMDcsIDc4NDcxLCA2NTcwMywgMCwgMCwgNDI3MzIsIAogICAgIDUxODAsIDkyNjk5LCA0MTM5NSwgNDE1MzAsIDExNjkxLCA2NDc3MywgOTIyMTQsIDc0MDAyLCAwLCAwLCAxMjg2NDUsIAotICAgIDYzNDgsIDI0MywgMTMyMDAsIDk4MzgwNCwgNjAyNCwgOTIzMDksIDk5NzksIDEwMDM3LCA0MTUyOSwgMTA2NDgsIDg1MzgsIAorICAgIDYzNDgsIDI0MywgMTMyMDAsIDk4MzgxMywgNjAyNCwgOTIzMDksIDk5NzksIDEwMDM3LCA0MTUyOSwgMTA2NDgsIDg1MzgsIAogICAgIDQzNjg3LCAwLCAwLCA0Mjg1LCA2NjE5NSwgMCwgNDIzMCwgMCwgNzM2NywgNDMyNTYsIDkyMzUzLCA3NTYzLCA0MjM3NiwgMCwgCiAgICAgNjg0NDIsIDEyMDUxMiwgMCwgMCwgMjE0LCAwLCAwLCA3ODQ2NiwgNjU4OTMsIDEyMjA4LCA5OTczLCAwLCA2NjMxMSwgCiAgICAgNjU1ODksIDEyODI3NywgMjYwMywgMCwgMCwgMCwgNzAwNDcsIDAsIDYwMjIsIDAsIDI4ODQsIDAsIDExNjIwLCAwLCA0MywgCiAgICAgMCwgNjY0NTMsIDEwMTYsIDQxMTA3LCAwLCA0MTEyMSwgMzg4NSwgOTIsIDY1NDU2LCA2NDYwOCwgMCwgNzQ4MDEsIDAsIAotICAgIDIwNzQsIDAsIDc4MjgzLCAwLCAxMjQ1MywgMTI4MTI4LCA5ODM4MTcsIDc0MjQxLCAxMjY1NjgsIDY3OTEsIDEyNDU3LCAKKyAgICAyMDc0LCAwLCA3ODI4MywgMCwgMTI0NTMsIDEyODEyOCwgOTgzODI2LCA3NDI0MSwgMTI2NTY4LCA2NzkxLCAxMjQ1NywgCiAgICAgNzgyNjgsIDAsIDAsIDAsIDc4Mjc5LCAwLCAwLCA5MjM1OCwgNjY2MzcsIDc5OTUsIDg3NTksIDQzNDIxLCA3ODI3NywgCiAgICAgMTI0NDksIDEyODU1MiwgMCwgMCwgODc1MiwgMzE5NywgNDcyMCwgMTAxNjUsIDAsIDExOTI0OSwgMCwgMTE1OTUsIDY0ODkzLCAKICAgICAwLCA0MzQzNSwgMCwgMCwgNDk5MywgMCwgNjE2OCwgMTA5MzQsIDE5NDYsIDc0MSwgMCwgNTQ5NCwgNDYzOSwgOTgzMTQ3LCAKICAgICAxOTkwLCA2NjU4OSwgNDQ5OCwgNzg2NjQsIDExOTE4MywgMCwgMCwgNjk3MzQsIDI5NjAsIDczNzc5LCAwLCA4OTY5LCAKICAgICAxMjgxMTcsIDQzNDI0LCAxMjcwNTksIDAsIDI5NTAsIDExOTU3OSwgNjIxMCwgNjU3NTMsIDM3MCwgMCwgMCwgMCwgNDk1MywgCi0gICAgOTgzNjczLCAwLCAwLCAwLCA2OTIzMCwgMCwgMCwgNjU2ODgsIDk4MzI0MCwgNTA2MywgMzUxNywgMjk2NCwgNDM2NjMsIAorICAgIDk4MzY4MiwgMCwgMCwgMCwgNjkyMzAsIDAsIDAsIDY1Njg4LCA5ODMyNDYsIDUwNjMsIDM1MTcsIDI5NjQsIDQzNjYzLCAKICAgICA5MTc3NjIsIDYzNDQsIDc0NzkxLCAxMDU2NiwgMTAxNDQsIDY2MzMzLCA4MjUyLCA3MjksIDY2MDE2LCA3ODI1MywgMCwgCiAgICAgNzEzMTcsIDY0OTIzLCAxMjgwNDAsIDQzNjY5LCA5MDMyLCA3ODI2MywgNzgyNjQsIDAsIDQxMjE1LCAwLCA2NTg4MywgMCwgCiAgICAgOTE3Nzc0LCAxMjA2MDIsIDM3NjEsIDAsIDAsIDcwMDY4LCAwLCAxMjkxMiwgMTE5MDEyLCAzODUwLCAxMjgxOTEsIDAsIDAsIAogICAgIDAsIDAsIDkwOCwgMCwgODYxMSwgMCwgMCwgMTI3NTU1LCA0MzY5MSwgNDExOTcsIDAsIDg5NzgsIDEyMDU0MCwgMTE5MTM1LCAKICAgICA0MTU4NiwgMTA1MjcsIDAsIDkxNzg0OCwgMzg0OCwgNzg3MzksIDE5NDkzNywgMTI3NTM2LCA2NTI0MSwgNTMzNiwgCi0gICAgOTgzMjUxLCAxMjg3ODYsIDY2MywgMCwgMTA3ODAsIDAsIDAsIDc4NzY3LCA5ODMyNDksIDEyNzE2MywgNjgxOTMsIDM0NywgCisgICAgOTgzMjU5LCAxMjg3ODYsIDY2MywgMCwgMTA3ODAsIDAsIDAsIDc4NzY3LCA5ODMyNTcsIDEyNzE2MywgNjgxOTMsIDM0NywgCiAgICAgMCwgMCwgNzg3NzUsIDY0Njc1LCA0MTU4MiwgNzg3NzQsIDc4NzQ0LCA2NTU3OSwgMTI5ODAsIDc4NzY5LCAxMjE0MywgCiAgICAgNjk2NTcsIDc4NTEyLCAwLCA0MzQ0MSwgNDE4MDQsIDc4NTIzLCAwLCA3ODUyNSwgMCwgMTI4ODU5LCA0MTU4NCwgMTA2ODEsIAotICAgIDAsIDk4MzY4NiwgNzM5MzgsIDAsIDEyODAyMiwgNDgwMCwgNjY2NjEsIDAsIDY2MzA2LCA2NDcxNSwgNzg1MzQsIDk1MTgsIAotICAgIDY2MDksIDEwNDM0LCAwLCAxMTMxOSwgMTA5NywgMCwgOTE3ODUwLCA0MTczMCwgOTgzMjEyLCAwLCA3Mzg0NywgNzg3NjEsIAotICAgIDY1MTcyLCA0MTcyOCwgNDE3MjEsIDAsIDAsIDAsIDQxMjAzLCA5MTc2MTIsIDEzMTEwLCA0MTcyNiwgOTgzODQ2LCAwLCAKKyAgICAwLCA5ODM2OTUsIDczOTM4LCAwLCAxMjgwMjIsIDQ4MDAsIDY2NjYxLCAwLCA2NjMwNiwgNjQ3MTUsIDc4NTM0LCA5NTE4LCAKKyAgICA2NjA5LCAxMDQzNCwgMCwgMTEzMTksIDEwOTcsIDAsIDkxNzg1MCwgNDE3MzAsIDk4MzIxNCwgMCwgNzM4NDcsIDc4NzYxLCAKKyAgICA2NTE3MiwgNDE3MjgsIDQxNzIxLCAwLCAwLCAwLCA0MTIwMywgOTE3NjEyLCAxMzExMCwgNDE3MjYsIDk4Mzg1NSwgMCwgCiAgICAgMTAwMCwgNjk2NTEsIDAsIDQxMTQwLCAxMjA5LCA3Mzk3OCwgMCwgNzM3NTAsIDEwNzMsIDYzMjEsIDc3ODc4LCA0MTEzOCwgCiAgICAgMCwgNjgyMTMsIDAsIDEyMTY3LCAxMTE1LCA0MTYwNSwgOTc5NCwgMTI3MDYyLCA2NzY3MSwgNTUyNDgsIDEyMjM3LCAKICAgICA3ODc4NywgNjYzMTQsIDY1ODcsIDkyOTAsIDc4NzgyLCA3ODc4MywgOTIzMSwgNzg3ODEsIDI5NTksIDc5MjYsIDAsIDAsIDAsIAotICAgIDY0Mzk4LCAwLCAxMTk5NzAsIDEyMzExLCA5ODM3MTgsIDc4Nzk2LCA3ODc5OCwgNzg3OTQsIDc4Nzk1LCA2ODQzNCwgCisgICAgNjQzOTgsIDAsIDExOTk3MCwgMTIzMTEsIDk4MzcyNywgNzg3OTYsIDc4Nzk4LCA3ODc5NCwgNzg3OTUsIDY4NDM0LCAKICAgICA3ODc5MywgNjY2NzAsIDAsIDAsIDEyMjkwLCAxMjAxNjksIDAsIDExOTg3MywgNDIxNDIsIDk5NjgsIDgyMDUsIDAsIDUxMzEsIAotICAgIDAsIDk2MjcsIDc4NTM2LCA3ODU0MiwgNzg1MzUsIDk4MzIxMCwgMTk0NCwgMTI0OCwgMTAxNDgsIDEyNzc1NSwgMTE5OTkwLCAKKyAgICAwLCA5NjI3LCA3ODUzNiwgNzg1NDIsIDc4NTM1LCA5ODMyMTIsIDE5NDQsIDEyNDgsIDEwMTQ4LCAxMjc3NTUsIDExOTk5MCwgCiAgICAgMTE5OTkxLCAxMjcwMSwgNzgzNzYsIDExMzA4LCAxMTk5OTUsIDAsIDExOTk5NywgMTE5OTk4LCA2NTMwNSwgNjUxMDAsIAogICAgIDQwMzEsIDQyNzk0LCAxMjAwMDMsIDcwNzUsIDgxNTQsIDExOTk4NSwgMTIwMDA3LCA0MTgxNywgNzM5MzQsIDQyMjc1LCAKICAgICAxMjAwMTEsIDEyMDAxMiwgNzg1MjYsIDEyMDAxNCwgMTIwMDE1LCA2MDQxLCAwLCA0MTg5OSwgMCwgODAwMiwgMCwgNDM2NCwgCiAgICAgMCwgMCwgNjQzMzIsIDAsIDc4MTMsIDkwNjQsIDExOTk4NiwgMTAxMjQsIDc1MjYsIDg2MDEsIDcyODEsIDc4NDU1LCA3Mjc5LCAKLSAgICAxMjA0MSwgMTQxOCwgMTA4ODUsIDEyNjczLCAwLCAwLCA5NjYwLCA5ODMyNzIsIDEzMDEyLCA0NTcxLCAwLCAwLCAxMjAxNjQsIAorICAgIDEyMDQxLCAxNDE4LCAxMDg4NSwgMTI2NzMsIDAsIDAsIDk2NjAsIDk4MzI4MCwgMTMwMTIsIDQ1NzEsIDAsIDAsIDEyMDE2NCwgCiAgICAgMTIwNzgsIDI5NzAsIDAsIDEwOTMzLCAwLCA3Nzg3MCwgMCwgMTI3MDE1LCAwLCA0MTU5OSwgMCwgMTI4ODMxLCAwLCAKICAgICAxMjk1MCwgOTIxNjAsIDM0ODYsIDAsIDc4MzExLCA0MjM5LCAwLCAxMjc3OTksIDY2NTExLCAwLCAyNjM3LCA2NDYyOSwgCi0gICAgODQ2MCwgMTI3MDUzLCA4NDc2LCA5ODM5NjYsIDAsIDAsIDAsIDY1NjczLCAxMDE5LCA3ODQ5NSwgNDE0OCwgMCwgMTIyODksIAotICAgIDAsIDQzMTYsIDAsIDEzMTE5LCA4NDg4LCA1NDEyLCA2NjI0MywgOTkzNSwgMCwgNzM4NjQsIDk4MzIwMSwgNDE3MzQsIAorICAgIDg0NjAsIDEyNzA1MywgODQ3NiwgOTgzOTc1LCAwLCAwLCAwLCA2NTY3MywgMTAxOSwgNzg0OTUsIDQxNDgsIDAsIDEyMjg5LCAKKyAgICAwLCA0MzE2LCAwLCAxMzExOSwgODQ4OCwgNTQxMiwgNjYyNDMsIDk5MzUsIDAsIDczODY0LCA5ODMyMDMsIDQxNzM0LCAKICAgICA4MjA2LCA3NDA4MSwgOTE2MywgMzI4NiwgOTA3MiwgNTg2NywgMTMzMDIsIDc2MjIsIDcxMjAsIDQxNzM2LCA5MjU0NiwgCiAgICAgNDE3MzEsIDAsIDc0MDAsIDU0MTYsIDY4NjYzLCAxMTg5MjQsIDEwODE3LCAwLCA0MTUzOSwgMTI3Mjg0LCAwLCA3Mzk2MywgCiAgICAgNDE4NTUsIDQxODY3LCA2NTU2NCwgMTEyNzcsIDY1ODkyLCAxMTUzNiwgMTA2MjAsIDkyMjcyLCA3MTE1LCA2NjAzMCwgCiAgICAgNzM5MzIsIDU0OTgsIDczOTQyLCA0MTUzNiwgMCwgNjgyMDQsIDkyNTg3LCAzNDU5LCA4OTk3LCAwLCAwLCAwLCAwLCAKLSAgICA5MjUxMiwgMCwgNjYzNzcsIDY5NzgxLCAwLCA5ODM2OTAsIDc4NTExLCAzMTYxLCAyOTUsIDEyMDIwNywgMCwgOTIyMjMsIAorICAgIDkyNTEyLCAwLCA2NjM3NywgNjk3ODEsIDAsIDk4MzY5OSwgNzg1MTEsIDMxNjEsIDI5NSwgMTIwMjA3LCAwLCA5MjIyMywgCiAgICAgMTI3ODU2LCA3ODc0MiwgOTAxNiwgNDM0NTQsIDYzOTAzLCA2MzkwMiwgNDM2NDEsIDAsIDM5NzEsIDAsIDcwMDYzLCAyOTUyLCAKICAgICA3ODc2NSwgMTEwMzgsIDEwOTAxLCA2MzkwMCwgNjM4OTksIDYzODk4LCA5NDA0MywgNjY3LCAxMjMzMiwgNjM4ODcsIDYwODYsIAotICAgIDQxNzIyLCAwLCA1MTcyLCAwLCAwLCA0MTU5LCAwLCAwLCA5ODE1LCA2Mzg4NCwgMTk5MzQsIDYzODgyLCA0MTE5OCwgODU1NSwgCi0gICAgNjM4NzgsIDYzODc3LCA0MjQ2MCwgNjA1MCwgNDI3MDgsIDYzODgxLCA2Mzg3MiwgMCwgNDI0MjEsIDAsIDQxNzIzLCAKKyAgICA0MTcyMiwgMCwgNTE3MiwgMCwgOTgzMjc4LCA0MTU5LCAwLCAwLCA5ODE1LCA2Mzg4NCwgMTk5MzQsIDYzODgyLCA0MTE5OCwgCisgICAgODU1NSwgNjM4NzgsIDYzODc3LCA0MjQ2MCwgNjA1MCwgNDI3MDgsIDYzODgxLCA2Mzg3MiwgMCwgNDI0MjEsIDAsIDQxNzIzLCAKICAgICA2Mzg3NSwgNjM4NzQsIDExNDYwLCA3NDMyLCAxOTEzLCA0MTkxMywgNjM4NTIsIDEyNjYzNiwgMCwgNDIzNDgsIDczODkyLCAKICAgICA2NzUyLCA0NDYsIDQxOTExLCAxMjc5MDYsIDYzODUxLCA2Mzg1MCwgNDE5MTAsIDAsIDYzODQ2LCAyOTcyLCAxMjkzMiwgCiAgICAgNzI2MiwgMCwgNjM4NDksIDYzODQ4LCA2Mzg0NywgMTI4MDcwLCA2NTcwLCA4MzAyLCA3MjU5LCA2Mzg0MiwgNDE3OCwgCkBAIC0xODQ4OCw4ICsxODUwNyw4IEBACiAgICAgNzU4MywgNzY3OSwgMjkwMywgMCwgMzAwMSwgMTE1OCwgODc0NSwgNDM3NDYsIDczNzQ4LCA2Mzg2NiwgNzg2MjYsIDE5MTUsIAogICAgIDQ4NDYsIDAsIDY2MzcxLCAxMTg5ODQsIDQyMTA1LCAyOTkwLCAxMjAxMjgsIDgwNSwgNjkyMzgsIDY0NDM4LCAxMjA3MCwgCiAgICAgODc2MCwgMTExNywgMTE4OTg3LCAxMjIxMiwgMTIwMTIzLCA2NTE3NCwgNDIzNTcsIDYzODM1LCA2MzgzNCwgMCwgNzgyNDAsIAotICAgIDEyMjI1LCA2MzgzOCwgNjM4MzcsIDk4Mzg0NCwgOTgzNzk1LCA2MzgzMywgNjA0MiwgNjYzNjAsIDgwODMsIDAsIDAsIAotICAgIDYzODIxLCA2MzgyMCwgNjM4MTksIDYzODE4LCA5ODM4OTUsIDUyMjcsIDkwNDcsIDYzODIyLCAxMjcxNjIsIDYwOTEsIDAsIAorICAgIDEyMjI1LCA2MzgzOCwgNjM4MzcsIDk4Mzg1MywgOTgzODA0LCA2MzgzMywgNjA0MiwgNjYzNjAsIDgwODMsIDAsIDAsIAorICAgIDYzODIxLCA2MzgyMCwgNjM4MTksIDYzODE4LCA5ODM5MDQsIDUyMjcsIDkwNDcsIDYzODIyLCAxMjcxNjIsIDYwOTEsIDAsIAogICAgIDEwNjkxLCA1NjAsIDU2NDMsIDgyMjYsIDExOTU3OCwgNjM4MTIsIDYzODExLCA2MzgxMCwgNjM4MDksIDIyODksIDYzODE1LCAKICAgICA2MzgxNCwgNjM4MTMsIDYwNDcsIDE1OTcsIDEyMDE0MywgNzgwLCAyMDYsIDc3OTI1LCA0OTM2LCA2NTE0NywgODE2OCwgCiAgICAgNjM5MzAsIDIwNzYsIDEwOTMsIDk4ODIsIDYzOTM0LCAyMDgyLCA2MzkzMiwgMTI4MTUwLCA2MzkyOSwgMzU0NiwgMTYwNSwgCkBAIC0xODUwNywyNjIgKzE4NTI2LDI2MiBAQAogICAgIDQzNjU5LCAxMjk1MSwgMTIwNjM4LCA5OTA2LCAyMDU0LCAyMzM0LCA3ODUxNSwgNjM5MTYsIDU0ODMsIDYzOTE0LCA2OTczNywgCiAgICAgNjM5MTEsIDU0ODQsIDYzOTA5LCA2MzkwOCwgMjUzOSwgMCwgNDM5ODAsIDU0ODUsIDAsIDQyNjk3LCA5MDYxLCA1NTM0LCAKICAgICAxMDY3MiwgNDUwMiwgMCwgMjUzLCAwLCA2ODIwOCwgMCwgOTIwMywgNzQyMzEsIDAsIDExNTMwLCA5MjU0MiwgNjg2NjgsIDAsIAotICAgIDExODkwNywgMCwgMTA0NzQsIDQzNDI2LCAxMzI1NywgNDIzNTQsIDEyODA5OSwgOTgzNjg5LCA3MDA0NCwgMTk1MDY1LCAwLCAKLSAgICA4NDEzLCA5ODM4MDcsIDAsIDU2OTMsIDcyNzIsIDAsIDEzMjA5LCA2NDQ3MCwgNjU4MzEsIDc0MzUwLCAxOTUwNjMsIDAsIDAsIAotICAgIDAsIDEyNjYzOSwgMCwgMCwgOTQwNzgsIDEyODEzMywgMTI3NzY3LCA2NjYwOCwgMzExMSwgNDE4NjMsIDg4MDQsIDQyOTEzLCAKLSAgICA5MjE4NywgNzI3MCwgMCwgNjY2MDYsIDY2MjgsIDEwNzYsIDc0MzMsIDE0MzYsIDczODQ0LCA1NTIyNiwgMTI4MzUzLCAKLSAgICA2Mzk4MiwgNzM5MywgMTI4MDcsIDQzNDEzLCA2MzkwNiwgMTU5OCwgNjM5MDQsIDAsIDAsIDQxNzI5LCA0NDIzLCAxMzA3LCAKLSAgICAwLCAxMDUxNSwgNDE1ODksIDEyODY5OCwgMCwgNjIxOCwgMCwgMTQzMCwgMCwgMCwgMTIwNjA2LCA3ODc1NCwgNTQxMywgCi0gICAgNzYxOSwgMzI1NSwgMzQ5MywgNzQwMzIsIDExNTQ5LCAxMDczNSwgNDE3NDMsIDczOTM3LCA2ODAxLCA5ODM2MjQsIDQ1MTgsIAotICAgIDEwOTkwLCA2NTA3MywgNTE2NywgNDQ4MSwgMzc3MSwgMTIwMTU4LCAyNzEwLCAwLCA2OTI0MywgNDE3MjQsIDAsIDQzMDczLCAKLSAgICA0MTY5MCwgMTI0NzksIDk4MzYyNiwgMCwgMCwgOTgzODA5LCA3MDA0NiwgMTYyOCwgMTI3MTQ5LCA5ODM0NzksIDk4MzcyMiwgCi0gICAgNjUyNjIsIDYzMzMsIDEwNzgzLCA0MjMxNSwgMCwgNjM4NTUsIDk0MDU2LCAwLCAwLCA1MzM5LCA3NDMyMywgMCwgMTMwMDQsIAotICAgIDAsIDQ0NTcsIDAsIDAsIDAsIDAsIDU2ODQsIDg2NzgsIDEwOTE0LCAwLCA1Njg5LCA2NTgwNywgMCwgNjg0NjQsIDEyNjMzLCAKLSAgICAxMjg3MCwgNjk3MDUsIDY1MTgzLCA1Njg4LCAxMTkyNiwgNjAzMywgNjMxMCwgNTY4NiwgMCwgNzQyNTEsIDAsIDEyMDY0NywgCi0gICAgMCwgNTAsIDEwNTU4LCA5ODcxLCA0MjYxMiwgNDM2NTUsIDAsIDAsIDAsIDY2NDY4LCAwLCAxMzI1OSwgNDQ0OCwgMCwgCi0gICAgOTgzODM2LCAwLCA3MDA0MywgNjc4NTMsIDAsIDEwNjQwLCAxMTUzOSwgMTE1MSwgMCwgOTE3NjA3LCAxMjc1NDQsIAotICAgIDEyNzA3OSwgMTk1MDUwLCAxMjc4NTIsIDAsIDAsIDAsIDEyNTAxLCA2NDYwNCwgMCwgMTE1MjcsIDExODg3MCwgODgxMiwgMCwgCi0gICAgMTE1MzgsIDg2NzMsIDEyNjUwLCAxMTAyMCwgMCwgNjY0NjcsIDIxMDUsIDgwODcsIDc4MTYzLCA2OTYzMiwgOTg5NCwgMCwgCi0gICAgMCwgMCwgNDYzNiwgNTUyNjIsIDc4NTEzLCA0NTE1LCAyMzgyLCAwLCAxMjcwNTUsIDAsIDEyMDQ5NSwgMCwgMTI4Mjg0LCAKLSAgICAxMjI3NywgMTk0NjI3LCAxMTk5NSwgOTI1NTMsIDAsIDEyMTU4LCAwLCA4NzQxLCAxMDE5NywgMCwgOTI0MjYsIDAsIDY1MzEsIAotICAgIDAsIDEyNzg0NiwgNDczLCA0MzQxNSwgMCwgOTgzNjQxLCAxODczLCAxMDg3LCAwLCAwLCAwLCA3ODUyNywgNjY0MzksIAotICAgIDQzMjE4LCA5ODMxMjMsIDE5NDcxNiwgNzIzNywgMTI1MDQsIDc0MjgyLCAwLCA5ODM1NzEsIDAsIDk0ODksIDAsIDAsIAotICAgIDQzODQsIDc0MjIwLCA2Mzg0NSwgMjA1OCwgMTI4ODYzLCAxMzI5NSwgNDMxOTEsIDEyODAzMCwgMCwgMTE1NCwgMzg1NywgCi0gICAgMTIwNSwgMCwgMCwgMTMxMDAsIDEyOTU4LCAxMjA3MDYsIDc0MTY4LCAwLCAwLCA0NDIxLCAxMDU5MiwgMCwgNDk1LCAKLSAgICAxMTkwMDcsIDQxNzEyLCA3OTgzLCAwLCA5Mzk5NywgMCwgNjM0NywgMTIwMTY1LCA3NjU0LCA0MTcxMCwgNDE5NiwgMCwgCi0gICAgNDM3LCA0MTcwOSwgNzM3NzIsIDAsIDAsIDk0NjUsIDEzMjkwLCAxMTkxODAsIDQ5OTcsIDY0MzA2LCAwLCAwLCA0OTk5LCAKLSAgICAxOTQ2NDIsIDAsIDEyNjU4MiwgNDcxMSwgMTIwNzY5LCAwLCAyNzM5LCAwLCA4MDQ0LCA3NDgzNCwgMTk0NjQzLCA0MTc4OSwgCi0gICAgMTI4MTQyLCAxMDgwOSwgMCwgMCwgMCwgMTc3OSwgNjYwMCwgNjYwMSwgNDE1NDMsIDUzMjUsIDY0MiwgNjQxODcsIDEzMDU4LCAKLSAgICAxMjA0NDksIDEyODc1LCAwLCA5MjE4NiwgMTMyMjksIDAsIDEwNTc1LCA0MzM5OSwgMCwgMCwgNDE3OTEsIDExMDQsIDAsIDAsIAotICAgIDEwNjU1LCAwLCAwLCAwLCAwLCAxMDgyLCAxOTUwNDksIDg0MjgsIDY1NjksIDAsIDAsIDAsIDY5ODQ5LCA2NzgzLCAwLCAKLSAgICAxMjk5MywgODA0OSwgNDE1NDgsIDQ0MDIxLCA2NDU4LCA5ODM3OTgsIDEyODg4MiwgNDc2MSwgNjM4MjgsIDQ3NjYsIAotICAgIDY0NjIzLCAxMjczLCA0MzQwNywgMCwgMTE4ODc2LCAxOTUwNDUsIDY5MTIsIDEzMTMsIDYzMjIsIDEwNDgzLCA5ODM2MDMsIAotICAgIDQxNTQ1LCAwLCA5MjQ0OSwgMCwgMCwgMCwgMCwgNzg2MjQsIDM0ODQsIDc0MzM3LCAwLCAwLCA4NTAzLCA1MTIyLCA0MTUyNywgCi0gICAgMCwgNjYzMjAsIDk4MzgwMiwgMCwgMCwgMCwgNDE1MzcsIDY5NjgzLCA4MzAzLCA4MjgyLCAxMTgxNywgNzM4NTcsIDEwMDAzLCAKLSAgICA3Mzg1OSwgNjU5MDQsIDczNjMsIDE2ODYsIDAsIDc4NDA2LCAxMTQ2NywgMzY2NCwgNjU5MjEsIDY0Mjk5LCAxOTQ2NjQsIDAsIAotICAgIDAsIDQzMjQsIDEyNiwgNDIyNDYsIDExOTE1MiwgMCwgNzQzNzgsIDY1OTI2LCA3NzQ0LCAxOTQ2MzYsIDc0Mjc3LCA3NDMwMiwgCi0gICAgNzgwNTIsIDQzODE3LCA2OTY2LCA0MzgyMiwgODEzNiwgMCwgNjU2MDAsIDE2MzMsIDAsIDAsIDQ3NjIsIDExMDMsIDAsIDAsIAotICAgIDQ3NjUsIDk4MzQ4NCwgMTMwNzgsIDAsIDQ3NjAsIDYzODI3LCAyMDUwLCAxMDg3MSwgNDMxOTksIDExMDIsIDAsIDQyMjM2LCAKLSAgICAxMjg4NjcsIDE5NDY2NywgMTE1NDYsIDc0Nzk0LCAzMzcsIDAsIDQyNTkxLCA4NjI3LCAxMjI3OSwgMTExMSwgMCwgOTIxNjEsIAotICAgIDQ3MDcsIDY4MjA2LCAxMDE0MywgNzg4MywgMTI3MDgxLCA3ODgwLCA0NTIyLCA4NjQ1LCA1NzA0LCAxMzAxMCwgMCwgODMwNCwgCi0gICAgOTE3NTYxLCAwLCAxMTk1NzUsIDIyOTMsIDAsIDY2NjU0LCAwLCA5MjY3NiwgMCwgMTMwMDgsIDAsIDQzODUsIDAsIDEzMDExLCAKLSAgICAwLCA5MjU2OSwgMTE5MTYxLCAxMzAwOSwgMTYwLCAyNjc3LCAwLCAwLCA0MTc5MywgNjU3NjMsIDc0MjIxLCAxMjAxNDEsIAotICAgIDQxNzkyLCA0Mjc3MCwgOTQwNTQsIDY1NzYyLCAxMTg4MjksIDQzODIxLCA1NzA5LCAwLCA5NDA1MywgNDM4MTYsIDAsIDAsIAotICAgIDEwNzksIDM4NjcsIDU3MDgsIDAsIDAsIDQzNzk3LCA1NzA2LCA2NDc2OCwgNTcwNSwgODc5MSwgNDAwNSwgMCwgMTAyMzcsIAotICAgIDEwOTkxLCAxMjg4MTYsIDQzNDU5LCA5MTczLCA5MTc1ODEsIDkxNzU4MCwgMTMxNzAsIDEyNTQwLCA5MTc1NzcsIDQyNjA1LCAKLSAgICAxMjA3NjUsIDEyNjYxNywgNjg2NDcsIDkxNzU3MiwgMTAwNTgsIDAsIDc0ODY3LCAxOTQ2NTQsIDEyNzA3OCwgMzMzOSwgCi0gICAgMTE0NDgsIDExMDYsIDkxNzU5MSwgOTE3NTkwLCA5MTc1OTMsIDMzNDAsIDkxNzU4NywgOTE3NTg2LCA5MTc1ODksIAotICAgIDkxNzU4OCwgMTIwNTQxLCAxMDYwNSwgMTMwOSwgNjM5NjYsIDEyMDc0MywgMTc1NCwgOTIyMjYsIDEzMjQ2LCA4NjQsIDAsIAotICAgIDExODkyNiwgODk3MiwgMCwgNzg0OSwgMTIwMDkyLCA5MjUzMywgMTMyNDAsIDE5NTA2OCwgNTE5MiwgNDMzOCwgNjc5ODIsIAotICAgIDEwOTQ4LCA5MTc2MDEsIDEzMTk5LCA5MjU3NSwgMTIzNiwgMTMyMDgsIDEzMjYxLCAxMzE4OSwgMTMxODgsIDkzOTkzLCAwLCAKLSAgICA3NDQwLCAwLCAxMjAxNTMsIDk1NTMsIDE1OTAsIDYzNzc3LCA2Mzc3NiwgMTMxNzgsIDYzNzgyLCA2Mzc4MSwgNjM3ODAsIAotICAgIDYzNzc5LCAxNTgzLCAwLCAxMzI2MCwgNDU1MCwgMCwgNjQyMDUsIDAsIDAsIDQxNTIyLCA5ODM5MDYsIDkyMTY4LCAKLSAgICA5ODM3NjMsIDkxNzg1OCwgMTEzNTQsIDk0MDcxLCAwLCA0Mjc5NSwgMCwgMTE5MTk1LCAxMTM5NCwgMTk0NjQ2LCAxMzIzNiwgCi0gICAgMTMyNzIsIDEzMTk0LCAxMzM0LCA2OTkyNiwgNDQ3OSwgMTE3OCwgNjU1ODYsIDEyMDY2MywgNjY2ODEsIDExOTE5MywgCi0gICAgNDYwMSwgMCwgMCwgOTgzNzU2LCAwLCAwLCAxOTQ2NTgsIDAsIDY4MDksIDYzNzg2LCA2MDMxLCAwLCA2Mzc5MSwgNjM3OTAsIAotICAgIDExNDUsIDYzNzg4LCA3OTEwLCA2Mzc4NSwgNDMxNTMsIDc1NCwgMTAxOTIsIDEzMTA1LCA4MTgzLCAxMjA3NDEsIDIwMzcsIAotICAgIDAsIDAsIDEwNzQ3LCAxMjUsIDAsIDY0ODkwLCAwLCA5ODMxMzEsIDAsIDQxNzE5LCA2Mzc1OCwgMzUyMywgMTA3NCwgCi0gICAgMTMyNTgsIDk1MzYsIDc0MDc3LCAwLCA0NDI3LCA3NDI0MiwgNjM3NTcsIDQzMTQ1LCAxMjIxNywgNjM3NTQsIDQxNTMyLCAKLSAgICAxMzQ5LCA2Mzc1MCwgNjM3NDksIDAsIDAsIDAsIDYzNzUzLCA2MzgwMiwgNDEwODQsIDEyMDYyMiwgNjgxMzMsIDQxOTMwLCAKLSAgICA2MzgwNSwgNjM4MDQsIDQzNjMyLCA2MzgwMSwgNDEwODIsIDgxNDAsIDYzNzk4LCA2MjYwLCAwLCAwLCA5NDA3NCwgNjM3OTMsIAotICAgIDExOTg4LCAzODk4LCAxMjgyNDEsIDEwMjAxLCAxMjIzOCwgNjM3OTUsIDQyMTk0LCAxMDM2NywgMTI1MjEsIDEwNDMxLCAKLSAgICA0MjExNCwgNDE5MzIsIDEwNjgsIDAsIDEyNTIzLCAxMjk0NSwgOTgzMzIxLCA0MjIwMywgNzk1MCwgMTA4MDQsIDYzNzcxLCAKLSAgICA0Mjc4NywgNDM4NiwgMTIyMjQsIDY5NzMsIDI3OTMsIDEyNDc1LCAwLCAwLCA2Mzc2OSwgOTUzMCwgOTgzMTE5LCAxMjIzMiwgCi0gICAgMTMxMzUsIDg1OTYsIDU2ODEsIDYzNzYyLCA0NTk1LCA2Mzc2MCwgNzkyLCAwLCA2NDgwMywgMCwgODc0MiwgMCwgMTEwNTMsIAotICAgIDEyODc5NiwgNjM3NDQsIDEyODEwNywgMCwgNzU4OCwgNjM3NDgsIDE2OTMsIDYzNzQ2LCA0MzIwNCwgNTA1NSwgNjg0MjYsIAotICAgIDkxNzg1MywgMTA5MCwgMTIwNjc5LCAxMjgzNTYsIDExNjY1LCA3NDEzMywgNDU1OCwgNjU2ODUsIDk1MjMsIDAsIDAsIAotICAgIDc4NjgxLCAxMTUxMywgMCwgNjE1NywgNjM3NzUsIDYzNzc0LCA2Mzc3MywgMTMxOTEsIDEyMTcwLCAzNTAwLCAzMTM5LCAwLCAKLSAgICAzMTcwLCAxMjQ4NSwgMCwgMTA4NzIsIDc4MjcxLCAxMzAwNiwgNjQ0MzMsIDAsIDAsIDk0MSwgMCwgMCwgMCwgNjU1NDEsIAotICAgIDExMDYzLCAwLCA4MjI4LCAwLCA0MjA2NSwgMCwgMCwgOTQwMzksIDAsIDkyNDU1LCA3Mzg2LCAwLCA2NDQ0NCwgMCwgCi0gICAgMTE5ODYzLCA0MzYwMywgOTQwNzUsIDY1Mzk3LCAyODgsIDAsIDAsIDAsIDEwMDI1LCA2OTkxNSwgMjkxOCwgMCwgNjUzMDAsIAotICAgIDExOTg3MSwgOTg4MywgNjQ3MjYsIDI3OTAsIDY1Mzk1LCAzNzkzLCAwLCAxMjc4MjksIDY1MzkzLCAwLCA3NDEzOCwgMCwgMCwgCi0gICAgMCwgNzQxMzksIDkyNzEyLCA2NTM5NCwgMTE1NDgsIDUyNzAsIDAsIDY1Mzk2LCAwLCA2NTgxMywgMTMyNTYsIDEyODIsIAotICAgIDEyMDc3MSwgMCwgMCwgMTA4ODgsIDk4MzYwNCwgNjUyNDIsIDAsIDMzMzAsIDAsIDAsIDk4Mzk2NSwgMCwgMCwgNzQyNTksIAotICAgIDMzMDQsIDQyNzUzLCAwLCAwLCAwLCAxNjI3LCAwLCAwLCAwLCA1MzcxLCAxMzExNiwgMCwgMTgyNiwgMTE4Nzk0LCAwLCAKLSAgICA0MzA5NCwgNzAwMjMsIDQzNjUwLCA5NDAzNywgMCwgOTAzNSwgMCwgMCwgMTI4MDA1LCAwLCA5MjIwNywgNjgxMjUsIDAsIAotICAgIDE2NCwgMCwgOTQwNjcsIDk0MDAwLCA2OTU4LCAwLCA0MzExNiwgMCwgNzAwMTksIDEzMjQ1LCAwLCAwLCAxMjczNzYsIDAsIAotICAgIDcwMDMxLCAxMjc3NTYsIDEyNjY2LCAxMzE3NSwgMTMyMDcsIDEyMDQxNCwgNjYwMTQsIDEyMDQyOCwgNzQ0NywgNTkyOSwgMCwgCi0gICAgNjU1MDksIDAsIDc0NDksIDExMzA2LCAwLCA3MzkyMCwgMzE4MCwgMCwgNjM4MDgsIDkwNTQsIDk3MSwgMTMwNjIsIDAsIDAsIAotICAgIDY1MTk1LCAxMDE2NCwgOTIyNTIsIDc0NDI4LCAwLCA3ODE0NiwgOTI2MTEsIDAsIDAsIDAsIDEwMDQ1LCAxMjg4MiwgCi0gICAgMTMyNzUsIDEyODE2MSwgMTEwNTcsIDAsIDEzMjc2LCAwLCA0MTUyNSwgNzgxNTAsIDcyNzEsIDExNDQ0LCAwLCAwLCAwLCAKLSAgICAxMjIyOSwgNDE1MjMsIDAsIDQzNDExLCA3Mzc1MSwgMCwgNjQ4MTMsIDAsIDAsIDEwNDc2LCAzODU4LCAwLCAzOTMyLCAKLSAgICA2NDk1OCwgMCwgMCwgNzM5ODksIDY4MTkyLCAwLCA2OTg0NywgMzY5LCAwLCA0MTc4NCwgMCwgNjQxNjMsIDAsIDAsIDAsIAotICAgIDY1NDc0LCA0Nzk2LCAxMjI5MiwgMTI2NTk1LCA2NTQ3OSwgMCwgNDE3ODEsIDEwNDg2LCA0MTQ4MCwgNDMwMDIsIDk4OTksIAotICAgIDAsIDAsIDQwNCwgMTI4MjEsIDM3NDEsIDAsIDU3ODgsIDgwOTIsIDY4MjEyLCA0MTIyMiwgMTgzMSwgNjYwMjAsIDM5ODIsIAotICAgIDAsIDQzODgsIDAsIDc0NiwgMTIwNzg0LCAwLCAwLCAxMjAxOCwgNjUyOTQsIDAsIDAsIDAsIDAsIDQ0MjIsIDQ3MDgsIAotICAgIDM3OTksIDc0MjkyLCAxMTkzNTcsIDAsIDc0NDMwLCAwLCAxMTcwMCwgNDM3NCwgMCwgMTI4MTc5LCAxMzY0LCAwLCA4MDM4LCAKLSAgICAwLCA5MTc1OTcsIDEyODY4LCA2OTgxNCwgMCwgNjczNSwgNzM5NzksIDEzMTc0LCA3Mzk2OCwgMTMyMjUsIDAsIDY5ODA4LCAKLSAgICA2NTgzNSwgMCwgMjM2NSwgNzg0MSwgMCwgNDI4NTUsIDExODg1NiwgNDI4NjYsIDAsIDAsIDAsIDY2NDM4LCA0MTc4NSwgCi0gICAgMTI2MTcsIDY0MTcyLCAxMzE3MywgNDM3MiwgMTE5MzU0LCAwLCA5ODM1NjgsIDAsIDAsIDkyNDAyLCAxMjgwNjIsIDEyOTY1LCAKLSAgICAzODQsIDY0NTEyLCAxMDQwNCwgMTAzNDAsIDExOTM1MiwgMTU1NiwgNTI3NCwgMTMyMTAsIDEyMDEyNSwgMTAwMTcsIDk3MzMsIAotICAgIDQxNzg3LCA5ODMyMzcsIDEyNjk5NCwgNDEzNzMsIDc4MDM5LCAxMjMwMywgMCwgMTMyMzIsIDEzMjMzLCAzNDksIDQ4NjMsIAotICAgIDQxMzcxLCAxMTY1NiwgMCwgMTIwNzAzLCAxMTk4ODMsIDEyODYxLCA0Mzk4LCA4NTQzLCA2NTYxOCwgMTI4MDE4LCAxMDk2LCAKLSAgICAwLCAwLCA0MjY4OCwgMTI0NDEsIDEyMzU1LCAxMTkzNDgsIDExOTM0NywgNDMxOCwgMTA0NTIsIDAsIDgwMzIsIDEzMjQzLCAKLSAgICAxMzIzNywgMTI3MTksIDEyNjY0NiwgMTE5MTAxLCAwLCA2NDg4NCwgMTE5ODcyLCAxMTkzNDUsIDg1OTcsIDAsIDAsIDk4NjQsIAotICAgIDAsIDEyMDc4NSwgMTE5ODc0LCA5NDEwNywgMTMxOTUsIDQxNDUyLCA2NDk2MSwgNzcyMiwgMCwgMTA0NTksIDExOTg3OCwgMCwgCi0gICAgMTE5ODc5LCA2NjU5MCwgMTI4MTIzLCA0MTUzMywgNjYzMzcsIDAsIDkyMTg0LCAwLCA0OTY1LCA0MzQ0NSwgOTE3NTM2LCAKLSAgICA3Mzg0OSwgMCwgNDM2MzgsIDc4NTM3LCAxMjgyODcsIDYyNjEsIDExOTM0MiwgNDMxNDcsIDY2NTcwLCAxOTU3LCAxMDQyMCwgCi0gICAgOTgyLCAyNzU2LCAxMzI5MiwgMTMyMDYsIDEyODgyOCwgMCwgMjkyNSwgNzM4MDksIDEzMDU2LCAxMjc1NTksIDEzMjEyLCAKLSAgICA0MzIzOCwgMCwgMTMxOTAsIDEzMTg3LCA5MjU0MSwgMTMxOTgsIDExODc5MywgMCwgNTI0MiwgMTE5MTc5LCA2NDQ3NiwgCi0gICAgMTY5NCwgODIxNiwgNzEzNjksIDY3NzAsIDQzMzMxLCAwLCA2NTYyMCwgOTgzNzE5LCA0MzU0NCwgMTI2NDY2LCAwLCAKLSAgICA0MTQ0NCwgNjU2MjEsIDY5OTU1LCA5MTk3LCA1MjQ2LCAxMTkxMDYsIDEzMTg1LCA5NzA5LCAxMjAzMjMsIDEyMDMyMiwgCi0gICAgMTIzMTQsIDY1NjE2LCA1MjM4LCAxMTkzMzMsIDAsIDExOTMzNywgNTIzNiwgNDA5NzksIDAsIDc0MjAxLCA4Mjg2LCAKLSAgICAxMjg1MzcsIDM5MzYsIDExOTMzMSwgMTE2OTksIDQxMzQ3LCAxMjcyNDksIDEzMjM1LCA4ODQyLCA0MTI0OCwgMCwgNDM3OSwgCi0gICAgMTMyMzksIDEyNjkyLCA3OTY5LCAxMjcyNjYsIDcyMTksIDEyNzI1MCwgMTI4MjUxLCAxMjA1MDksIDAsIDY2MjI0LCA3MzQsIAotICAgIDI5NzksIDEyMDMwMywgNjU2MTksIDk4NzIsIDk1NywgNjQ5MjEsIDE4NDYsIDY2NjMxLCA0MTQ3NywgMTE5MjU2LCAKLSAgICAxMjAzMTAsIDc0NTExLCA0MTc3MCwgMTY3MCwgNjQ0MiwgMTIwMzE3LCA0MjQ0NiwgNTM3OSwgMTIwMzE4LCA0MTE2MywgCi0gICAgNzQ4MzIsIDEyMDMxNSwgMTIwMzE0LCAxMTUwNiwgMCwgNDI4NDEsIDEzMjY3LCAwLCAwLCA0MTc3NSwgMCwgNzEzMCwgCi0gICAgNDE3NzMsIDAsIDEwNjYzLCAwLCAwLCAwLCA2MTUxLCAxMjExMCwgNDI2NzMsIDY1NTcyLCA2NTI5MywgNjUyNTAsIDEzMjY1LCAKLSAgICAxMzI2NCwgNjQ1MTgsIDAsIDYxMDAsIDAsIDkyNjQ3LCA1ODA4LCA2NTkyMiwgMCwgMTI5NjcsIDY2MDQxLCA1NjEyLCAKLSAgICA0NTgzLCAwLCAwLCA2ODA5NywgNjQ1NzUsIDEyNjYzNywgMTE5NjUsIDAsIDY4MzU4LCAwLCA2OTc4OSwgMCwgOTIyNjAsIAotICAgIDY4MTAyLCA5Njk4LCA3ODE0LCA3NDQ3NiwgMTE5NjUxLCAxMjg1MTQsIDAsIDQxOTIxLCAxMTg4NTgsIDk3NTYsIDY5ODUsIAotICAgIDExOTI1OCwgNzg0OTAsIDc0MjE5LCAwLCAwLCAxMTg5OTcsIDgwMTIsIDU2NzQsIDEyMzUzLCAwLCAxMjM2MSwgNTY3NywgCi0gICAgNTU4OCwgMCwgNDE5MjUsIDEyODEyNCwgNDE5MjAsIDU2NzMsIDEyMDUzNCwgNTY3NiwgNDE5MjMsIDEyNjk0LCAxMTg5NzgsIAotICAgIDU2NzIsIDEyOTQsIDAsIDc4MDU5LCAwLCA0MjUxMSwgMTcyNywgMTIwNzI1LCA0MjQzNiwgMCwgMCwgMCwgNzQyMjIsIAotICAgIDg3MTgsIDM1NTAsIDczNiwgMTAyNjgsIDQ1MDUsIDEwMzE2LCA3NDA5MCwgNTgyNiwgNTUyMzIsIDU4MTMsIDAsIDEyMDcxMiwgCi0gICAgNTg0MSwgNTgzNywgNTUyMzQsIDAsIDMxMDUsIDEyODI5LCA1ODM4LCA1Nzk2LCAwLCAxMTk1OTIsIDU3OTMsIDAsIDU4NjYsIAotICAgIDU3OTcsIDQxMDExLCA1ODY1LCAxMjAwOTEsIDc5NTYsIDU5OCwgMCwgNjQ2NDksIDU4MDYsIDQyMzk4LCAwLCA5MDM3LCAKLSAgICA1NjcxLCAxMjAwNDEsIDAsIDAsIDAsIDEyODg1NSwgMCwgODQ3LCAxMjgyNDIsIDk1MjksIDAsIDY2NjU3LCA2OTgwLCAKLSAgICA3ODQ4MywgMTIwMDM1LCA3ODQ4NCwgOTgzNDgzLCAwLCAxMjAwMzMsIDc4NDg2LCAwLCAwLCAxMjAwMzksIDQyNjgzLCAwLCAKLSAgICA5ODMwNTUsIDcxMTQsIDAsIDAsIDQzMTkwLCA2NTQ2MywgMTU1NCwgMCwgNDI2MTEsIDQyNTYzLCAwLCA1NjUxLCAyOTI5LCAKLSAgICA2NzkyLCA0MzIwMSwgMCwgMTk5NjMsIDU2OTgsIDAsIDAsIDAsIDAsIDU2NDQsIDEwMjkyLCA2NTU0NiwgNjk3MjcsIAotICAgIDY4MTQxLCA4MzcyLCAwLCA2NTExNiwgMCwgMTIwMDIyLCAxMDE3NSwgMTAzODgsIDQyNzk5LCA5NDEwMCwgNDEwMTMsIAotICAgIDEwNTY4LCAwLCA5ODM2MTgsIDI4NjksIDAsIDQxMDE1LCAxOTQ2OTIsIDI3ODUsIDQzNjYsIDAsIDEwOTU0LCA0MTgwMiwgMCwgCi0gICAgNDI2MDgsIDc4NDY5LCA5ODg0LCA0NzU5LCAwLCAwLCAxMDI2NiwgNDEzNTksIDExNzAsIDQzMzY1LCA2OTgxMCwgNzM5MDgsIAotICAgIDE2MDksIDkwMiwgMCwgNjM5MzYsIDEyODg3NSwgMTE2NjEsIDgxMjIsIDU4MTgsIDAsIDAsIDM4NjEsIDk1NDAsIDExMDI4LCAKLSAgICAyNTU0LCA1MTU4LCA1NzE0LCAyMjEzLCAwLCAwLCA4MDcsIDQzMDc5LCAwLCA3ODQ3NSwgOTc2LCA1NTExLCA2NDU1MywgMCwgCi0gICAgNDIxNTUsIDAsIDQxMzU2LCA3NDExMCwgMTE4ODAxLCAxMjY2MTQsIDAsIDg2NzYsIDk4MzI4MywgMCwgNTU4MiwgNDUxLCAKLSAgICA2Mzk0MSwgNTc5OCwgOTM0OSwgNDIwMTgsIDEyNzg1OCwgMCwgMCwgNDM2MDksIDU5MDYsIDEyMDU1MywgMTQ0MCwgMCwgCi0gICAgMTI4ODUzLCAxMjAwMTYsIDc0MjgzLCAxMTAwNSwgMCwgNjY2NTYsIDY2MDQ0LCAwLCAxOTQ2OTgsIDAsIDAsIDQzMzkzLCAKLSAgICAxMDA5NCwgMCwgMTE1MjksIDEwODU3LCAxMjA2NDMsIDY2NDM2LCA2NTQ2LCA5MywgODEwMiwgMCwgNjg0MDUsIDAsIDAsIAotICAgIDgxNzEsIDAsIDExOTA5NywgMTI3MDY0LCA5MTc1NDMsIDM4MywgNzE1NCwgNDE2NTYsIDkyNjM0LCA5NDA0MCwgMCwgNTE4NywgCi0gICAgNzEyOTYsIDEyNzI3NywgMTEyODYsIDY4NjIwLCA2NDIxNywgMCwgNTIzMiwgMCwgNDEwMDksIDAsIDQxMDA1LCAwLCAwLCAKLSAgICA5ODM4MTgsIDgyOTIsIDE5NTA3NCwgNDk4MCwgODg2MCwgNzM5NDcsIDEwMDI4LCA2NTI5MSwgNzA3NiwgMTMxODIsIAotICAgIDE5NDcwNSwgMCwgMCwgMTA2MzEsIDY2MDMxLCA3OTcyLCAwLCA3ODc4NSwgMCwgNzkwMCwgMCwgMTEzMDksIDM4MDYsIAotICAgIDQxOTgsIDQyNzI1LCAwLCA2NzY1NiwgOTk5NSwgMCwgOTI1NTIsIDAsIDEyOTMxLCAwLCA0MjY4NCwgNzQyODUsIDIwODgsIAotICAgIDY0MjEzLCA2NDM2NiwgNjUxNTYsIDg4MTQsIDQyMjM4LCA3NDc3MSwgMCwgMCwgMTI4MzYsIDAsIDAsIDc0MzQyLCA4NTkzLCAKLSAgICAwLCAwLCA2ODQ0NSwgMTMyNTUsIDAsIDAsIDc0NjQsIDAsIDY1ODY1LCAwLCAxOTQ2NTAsIDEyNzE0NCwgMCwgOTM0MiwgCi0gICAgMTIwNDY0LCAwLCA2NDUxNiwgMCwgNzg3OTIsIDEwMTI5LCA0MTAwNywgNzQzNzUsIDAsIDQwOTk1LCAxMjIwOSwgNDEwMTIsIAotICAgIDExOTEzNiwgMCwgMCwgNjk3MjQsIDQwOTkyLCA5MjI2NCwgMTI3MTUzLCA2ODY1MywgNDM1NTgsIDU1MjIsIDAsIDYxLCAwLCAKLSAgICA3NDEwNSwgMzYzMywgOTgzODkxLCA2NTE2MiwgNDEyMzQsIDEyMDg5LCA3ODI4MSwgOTc3MSwgOTgzODk2LCAxMzI1MSwgCi0gICAgMTI4NzAxLCAwLCA2MjYyLCAyNzg0LCA0Mjc0MywgMCwgODEyNiwgNjY0ODMsIDAsIDAsIDQ0MSwgNDI2MjEsIDAsIDAsIAotICAgIDQxMDAyLCA0MDk5OSwgMTE5NjIzLCA0MzI2NiwgNzEwOCwgMTk0Nzc5LCAxMDg5MCwgNzQ0ODEsIDY1ODM0LCA4MzI0LCAKLSAgICAxMTkxMDMsIDY0NDE3LCA3NDgxNywgMTI3NDY1LCA2NDczNywgMCwgOTgzNjUwLCA4OTMwLCA2NjY3OCwgNzQyNDksIDExOTMsIAotICAgIDEwMDU2LCAxODAwLCAxMzI1MywgMTMyNTIsIDc4MjksIDAsIDAsIDc3NDMsIDAsIDAsIDc3OTA0LCA5MjY0MCwgNzc5MDUsIAotICAgIDkwMzQsIDYwMzksIDAsIDEwMDc1LCAwLCA0MTAxOCwgNjU2ODMsIDEwMzM4LCA2NjQ2OSwgMCwgMCwgMCwgNDI4MTUsIDAsIAotICAgIDQxOTY2LCAwLCAxMjc0NzEsIDAsIDExNzkyLCA0MzA2NCwgNDEwMjUsIDkxMSwgNzUzOSwgMCwgMCwgMTIwMzM5LCA2NTE1OSwgCi0gICAgNjQzOTAsIDAsIDAsIDU1MjAsIDExNjYyLCAwLCA2NTMzMCwgNDI4MTIsIDAsIDAsIDEyMzI2LCA5ODM4NDcsIDAsIDQyODA4LCAKLSAgICAxMjgzMzcsIDkzNDgsIDY0OTAxLCA5ODM4NTIsIDAsIDAsIDAsIDAsIDAsIDkxNzU4NCwgNDM3MDIsIDk4MzU3NiwgNTg1NywgCi0gICAgNjUzNDIsIDkyNzI3LCAxMTkxMjAsIDEyMDA3OSwgODY0NCwgMCwgMCwgMCwgNzQyOTYsIDQxOTA5LCAwLCAxMjAzMzIsIAotICAgIDI3OTEsIDY5NjYzLCAxODkxLCA2OTgyNCwgMCwgNDE5MDcsIDY2NjQ3LCAxMTg5MzksIDg3NjEsIDEyOTQyLCA1NzQ4LCAwLCAKLSAgICAxMDc3MywgMCwgMCwgODc5NiwgNzgxNDksIDY0MTIsIDIwNjEsIDg1MjAsIDEzMTQ2LCAxMjcxODUsIDYzOTMxLCAwLCAKLSAgICA2NTkwMiwgMjg4MiwgMCwgMCwgMTI4NDMsIDQ1MjAsIDEyMDM0NSwgOTI0NTksIDAsIDk4MzY1MSwgMCwgNzM4NjAsIDAsIDAsIAotICAgIDY0MzQ1LCAwLCA5MjAxLCAxMjgzMTQsIDE5NDk0MCwgMCwgMCwgNDM2NzksIDkxNzU4NSwgNjUxMTcsIDkyMjcwLCAwLCAKLSAgICAxMDQyNywgMCwgMzg0NCwgMTIwNjc1LCA5NzU1LCAxMTEwLCA2NjEyLCAxMjIyMiwgMCwgMTI4Nzg5LCAwLCAwLCA3ODMsIAotICAgIDE5NDkzNSwgMCwgMCwgOTgzMDY0LCAxOTQ3MjAsIDY1MDU2LCAzNjIwLCA0MTE4MCwgNjgzNzgsIDQ1NTYsIDAsIDAsIAotICAgIDE5NDkzMywgNzQyNTAsIDAsIDY3NjU3LCAxMDUxMCwgNDM4MiwgNjY0ODIsIDAsIDAsIDEyNzUyNywgOTE3NywgODkwMiwgCi0gICAgOTM5NTgsIDk4MzksIDAsIDEyODkxLCA5ODM3NDYsIDk4MzYyNywgNjM5OTksIDIwMTYsIDQxOTE3LCA5Nzg4LCA2MzkyOCwgCi0gICAgMCwgMTg2MiwgNjU4MDAsIDkxNTUsIDY2NjIzLCA5Nzg2LCA2NTA4MiwgNDE5MTksIDg1NzksIDQxOTE0LCA3OTgxLCAwLCAKLSAgICA2NjAxNywgNDUwOCwgNjQ4ODMsIDkyNDU2LCA5MjUyMiwgMTI3ODE0LCAwLCA2NDU5MiwgNzQyNzYsIDEyMDA4MCwgNjc4NCwgCi0gICAgNzg3ODgsIDY4MTgxLCAwLCAwLCAwLCAxMjc1MzQsIDEyMTQ3LCA5MDI0LCA2NjM3OCwgNjY0NzIsIDk4MzkyMCwgNjQyODksIAotICAgIDY1Mjg5LCA3ODE1MSwgNjY2NTgsIDE5NDkyOSwgNjQ1MDksIDc4MTUyLCAwLCAxMjY1MDUsIDExMDUxLCA5ODMyODgsIDAsIAotICAgIDExMzU1LCA2NTg4NSwgMCwgMTI4MzEwLCA0MTIxNCwgMCwgMTIyOTksIDAsIDc1MDAsIDQ1MDYsIDc3NzMsIDAsIDAsIAotICAgIDk5NjMsIDY4NjQ5LCAxMjY2MDksIDQwNDAsIDEyMDU3MCwgNjE2NywgMCwgNjM5MjIsIDY1OTQsIDk4MzczMSwgMCwgMCwgCi0gICAgMzYyNCwgNDMwMzYsIDAsIDYzODcsIDYzOTkwLCAxOTk0NywgNjM5ODgsIDQxOTU1LCAwLCA2Mzk5MywgMTA0NDAsIDk2MTEsIAotICAgIDY1NjA1LCA2ODAzLCAwLCA3NzM4LCA2Mzk4NiwgMTE0NDYsIDYzOTg0LCA5MjY0MSwgMzQzNSwgNzgxNjQsIDQzODE0LCAKLSAgICA0MzgxMCwgNzAyOSwgNjQyNTgsIDQxMjkyLCAxMTg4OTgsIDEyNzQ4LCA0Mjc0MiwgOTUxNywgMTE1MTgsIDAsIDc4NzkwLCAKLSAgICAwLCA2Nzk5MywgNjM5NTYsIDQyNDU4LCA2Mzk1NCwgNjM5NTMsIDYzOTYwLCA5NTkxLCA0NTE2LCAxMDIxNywgNjgzNzAsIAotICAgIDExNDY5LCA2OTY5NywgNDIzMDYsIDI3MjMsIDExODk0NywgMCwgMCwgMCwgMCwgMCwgMTEzOTcsIDI4ODAsIDAsIDAsIAotICAgIDI4NzIsIDAsIDAsIDM0OTgsIDQzNzgsIDkxNzUzOSwgNDI3MCwgMCwgNjU1NTEsIDY4MjA1LCA2NjMzLCA0MzM4NywgMCwgCi0gICAgNTIzMCwgMCwgMCwgMCwgMCwgMCwgODE2MSwgMzkzLCAxMjAxMywgMCwgMCwgMTI2NDc5LCA0MTUsIDYzOTY0LCA2Mzk2MywgCi0gICAgNDIzNDUsIDkyMzEwLCA1MTgzLCAxODc3LCA0MjQ5OCwgMCwgMjkyNywgMCwgNjM5NjEsIDQ0NzIsIDAsIDAsIDc4MTU5LCAKLSAgICA2OTY5OSwgOTE3OTM2LCA0MjM0MCwgNDc1NiwgMTI4MDc4LCA3MDgxLCAxMDczMCwgNzY5MSwgMTAzMzEsIDYzODMwLCAKLSAgICAxMTk2MjUsIDQyOTIyLCA0MjEwMywgODYyOCwgOTgxMywgMCwgNDI0NTMsIDE2MDQsIDk1NjUsIDEwNTM5LCA2OTcwMSwgCi0gICAgNjU3NjQsIDQxNDE1LCA2NTc2NywgMCwgODQ1NywgNDIzMDEsIDExMzcyLCA2NDg3MywgMTE5OTIsIDAsIDAsIDYzOTgwLCAKLSAgICAxMTgwMSwgMzYyMiwgOTgzMTI0LCA2NDMzNiwgMTIwMTcsIDEwNDYzLCA2Mzk4MSwgNDk2NywgNjQxODksIDE5NjYsIAotICAgIDQzNjI4LCAwLCA5ODMyODQsIDAsIDAsIDYzOTcxLCA0MzQ3LCA0NDE2LCA0MjA5OCwgMTEwMDksIDEwNjk0LCA2Mzk3MywgCi0gICAgNDAyLCAwLCAxMzE0NywgMTI4NjkyLCA0MjEwMCwgNjQ2NDYsIDEzMjI4LCAwLCA0MTg3NSwgMzUxNSwgNzQyNTIsIDExODA1LCAKLSAgICAwLCAxMTMwMiwgNjI1OSwgNDMzOTUsIDAsIDAsIDE5NDY3MCwgMCwgOTIzNTEsIDAsIDc0NDI1LCAxMTI5OSwgMTU2MSwgMCwgCi0gICAgOTIzNTksIDY0OTQyLCA5ODM1NTksIDE5NDczMywgOTgzNjc3LCAxOTQ3MzIsIDAsIDc0MzAxLCAwLCAxMTI4MCwgMCwgCi0gICAgNjk3ODQsIDc0MDYwLCAwLCAwLCAxMTk2NjQsIDUxNDUsIDEyNDg2LCA2NTAxOCwgNjY1MTYsIDU0MDksIDEyNzM3OSwgCi0gICAgMTk0NjY5LCA3NDAyLCA1Mzk5LCA5Njg1LCA3NDA4OSwgNzk1MiwgNTQwMSwgMCwgNjY2MTYsIDY4NDIxLCA5ODM5MTAsIDAsIAotICAgIDU0MDUsIDEyNzg3NSwgNjQ4NjYsIDAsIDExOTU4MywgMTI4MzQ1LCA3ODc4NCwgNzQyNDgsIDExMzMwLCAxOTQ3MjMsIAotICAgIDY0NjkwLCAzMjU0LCAwLCAwLCAxMjgyMDcsIDQyMzkwLCA0MzY3OCwgMTk0NzI1LCA5ODM5MDAsIDY1MDc3LCAwLCA2Mzg4LCAKLSAgICAzMzU1LCA5NTA4LCA5ODY3LCA1NzIzLCAxMTUyMCwgNTYxMSwgMCwgMzM3NywgMCwgMCwgMCwgMCwgNzgyMjgsIDAsIAotICAgIDk4Mzc1MywgNDI2OTEsIDkxNzg4NiwgMTI3MTk4LCA3NDc2NywgMCwgMTI3MDc1LCAxMzc5LCAyNDYsIDAsIDk4Mzc1MiwgCi0gICAgMzc4OCwgOTgzMTA2LCAxMTA0MSwgOTI1NDksIDY2MzA0LCAwLCAwLCA4OTE3LCA0MjQwMywgMzAxLCAwLCAwLCAwLCAwLCAwLCAKLSAgICA5ODM2ODgsIDEwNjU2LCAwLCA2NTIxNCwgMTE5MjQyLCA0MjU2NywgOTIyMTcsIDEzMTYzLCA5ODMyMDIsIDEyMDgzMSwgCi0gICAgNzQ1OTcsIDMxODIsIDAsIDAsIDAsIDY1MDM0LCA2NTg4OSwgNDIxNjksIDQ3NTUsIDc0MjQ0LCAxOTQ2MjEsIDExNDQzLCAwLCAKLSAgICA2NjMxOSwgNzQ1OTgsIDYwOCwgNjAwLCAwLCAxMjE5LCAzOTM0LCA2NDIwNiwgMTE0ODMsIDc0NTEwLCAwLCA3NDQ4NSwgCi0gICAgNDI0NDIsIDY1NDcwLCA5ODM4OTgsIDY0MjAyLCAxMzE2MCwgNzc1OSwgNDI0ODIsIDQ4NSwgMTI4MDA2LCAwLCA5ODI4LCAwLCAKLSAgICAwLCA0MjI4MCwgMCwgOTM1MSwgNzc3OCwgNjQzNzksIDc0OTYsIDQyNDMxLCA2OTE2LCAxMjA4LCAwLCAxMTk2MzEsIAotICAgIDExMDAyLCA0MjQ3MCwgMCwgMTE4OTQ2LCAwLCAwLCA3NDA0MSwgMCwgNzAwNDUsIDQzNTM5LCA1NDExLCA0MjE5NiwgMCwgMCwgCi0gICAgMCwgOTE1MCwgMCwgNDIzOTMsIDEzMDg2LCAxMzEwLCAxOTQ2ODcsIDkzMzcsIDEyMDUyLCAxMDY0MywgNTUyNzEsIAotICAgIDk4MzE3OSwgMTIxNjYsIDI1NDYsIDE5NDY4MywgMjEzLCAxMTg4NTIsIDY1NjExLCAwLCAwLCAxOTQ3NTYsIDc0MzEwLCAKLSAgICA2NTU0LCAwLCAxMTkxNCwgNTQ1MiwgMCwgMCwgMCwgMCwgMCwgMTk0NjgxLCA5MjU2MCwgMjcxMywgMCwgOTY1MCwgNDMzMzAsIAotICAgIDAsIDE5NDY3NSwgMTQwNiwgMCwgMCwgOTI2NTksIDAsIDY4MjIzLCA0MTQzLCAxOTQ2NzcsIDAsIDY1NzQ4LCA0MTQxLCAKLSAgICA5NjgyLCA2NTI4NywgMTUwOCwgMTI3MDEzLCA4Nzc5LCAxMDU2OSwgODcyNSwgMTMyOTksIDY2NjM4LCA2NTc1MCwgNDIyNjMsIAotICAgIDQxNDUsIDYzODAsIDY1NzUxLCA2NjYxMywgNDM5OTQsIDY1NzM4LCA1NTI1MCwgOTE4NSwgOTU1MCwgMCwgNDM0MDMsIDAsIAotICAgIDAsIDAsIDY1NzM2LCA0MTk1MSwgNjQ4MTYsIDY1NzU2LCA5ODMyMDMsIDEyOTU1LCAxMDU5NiwgMjg4OCwgMTk0NjQ1LCAwLCAKLSAgICAwLCA5NjU3LCA5MDE5LCAxOTQ3NjYsIDAsIDI4NzgsIDUzOTAsIDAsIDE5NDk2MSwgMCwgNjg2NzksIDQzNTUyLCA3NTAxLCAKLSAgICA2MzI4LCAwLCAxMDQyOSwgMTAzNjUsIDAsIDAsIDQxOTQ2LCA3NTAzLCA1MjM1LCA4MDMsIDY4MzgxLCAwLCAwLCA4OTg2LCAKLSAgICAxMjY1NDIsIDEwNjMyLCAxMTkzNCwgMTE0NTIsIDEzMzIsIDAsIDAsIDEyNjY0NywgMCwgMTE4ODg3LCAxNzkxLCA1MTkxLCAKLSAgICA5Mjg4LCA2NDgyMiwgMjg5MiwgMCwgNDMzOTQsIDU1NSwgMCwgMCwgNjY2NDYsIDAsIDExOTAwMiwgMTMxNTEsIDc0NTEyLCAKLSAgICA3Mjg5LCA3NDA1NSwgNjQxNjEsIDg4NTQsIDY0MTYyLCA1ODU4LCA0MTkyNywgMTA1ODIsIDAsIDE3ODQsIDEzNjEsIAotICAgIDE5NTA0NywgMCwgNzkwNSwgMCwgNjQ4NjgsIDEyODgxMywgMTMxNTgsIDkyMTY2LCA3MjExLCAwLCA5MzcxLCA3Mzk3MywgCi0gICAgOTE3NTUzLCA2ODI4LCAxNjI1LCA5MjMwMiwgMCwgMTM0MiwgNjg0NDAsIDY0MTcxLCAxMjY3MDQsIDEwOTAzLCA5ODM0ODYsIAotICAgIDAsIDAsIDAsIDAsIDQ0ODIsIDQxNjA2LCAwLCAxMjg1NjksIDk4MzExMiwgMCwgNjQzODEsIDAsIDAsIDE5NTA5MCwgCi0gICAgNDIyNDUsIDEyNjQ2NywgNDE5NzIsIDAsIDQ0NCwgMCwgOTEyNywgNjY2ODcsIDY2NjE5LCAxMjY0ODksIDc4MDI1LCAwLCAKLSAgICAxMTM0OSwgNDA5OTEsIDkxNzU3MCwgMCwgMTE5NTk5LCAxMjA4MzAsIDAsIDExOTcsIDEyODI4MiwgMTE0OSwgMTk0OTcwLCAKLSAgICAwLCAwLCA0MDk5MCwgNDM3NjUsIDAsIDM0OTIsIDAsIDEyNzk0MiwgMCwgMCwgMCwgMTI4MzgsIDk4Mzk2OSwgMTk5NDgsIDAsIAotICAgIDMwOTksIDAsIDAsIDQxMDg3LCAwLCAwLCAwLCAxMTkwNTksIDEyMDM2LCA0MTMwOSwgMCwgMCwgODE1MiwgMCwgNDE1NTAsIAotICAgIDEyMjI3LCA5ODM2MTMsIDAsIDEyODI4LCAxMjc1MTEsIDAsIDAsIDEyMDcwOCwgMCwgMCwgMTAzODYsIDExOTU3NCwgMCwgMCwgCi0gICAgOTI2ODAsIDk4Mzc4MCwgNjgxNTQsIDAsIDE3NDMsIDAsIDAsIDkyMjM5LCA2NTE4NiwgOTE3NTcxLCAwLCA5NjA2LCAwLCAwLCAKLSAgICA2NDQzOSwgMCwgMCwgOTI2ODYsIDAsIDAsIDE5NDk2NywgMCwgMCwgMzM5NSwgOTM2MiwgMTA4NzgsIDAsIDAsIDc4MzYyLCAKLSAgICA2NDgzMCwgMCwgMTI2NTU3LCA0MTA5MSwgMzQyNiwgMTM0NCwgODg3MCwgMCwgMCwgNDczNSwgMTI3MDE3LCA2MTE5LCAKLSAgICAxMjgyMiwgNDI2OTksIDAsIDk4MzgxNSwgNzQ4MTgsIDE0MjMsIDAsIDQyNjM3LCA0MTA4MCwgMCwgMTIwMzksIDEwNTU5LCAKLSAgICAwLCAxMTg4OTIsIDAsIDk0NzIsIDAsIDExOTI5LCAwLCA3MTcwLCA5NTk2LCA2MTMwLCAxMjg4MjYsIDQzNjI5LCAxMTU3OSwgCi0gICAgNzg3MTMsIDAsIDE5NDc0MCwgMTI4NjkxLCA5MjE4NSwgNjY2OTksIDY0NDQwLCAxMDA0LCA5MjU4NCwgMTk0NzM3LCAKLSAgICA0MzIzNCwgNjYwMDgsIDEyNjI3LCAwLCA2ODQxNCwgMCwgNDM2MTksIDQzMzAzLCAxMTMwMCwgNDMzMDQsIDk2ODYsIDU4OTAsIAotICAgIDExNzc2LCA3NTU4LCAxMjcxNTgsIDY1NjI3LCAwLCAxMDcxOCwgMTMxNTQsIDM0NjEsIDkxMzksIDAsIDAsIDAsIDAsIAotICAgIDY1MzY1LCA3Mzg3NywgNjU2MjgsIDc4MDE5LCAxMjAzMTksIDAsIDQxNzA4LCAxMjg2MCwgMjY0MSwgMTIwNjksIDEwODM4LCAKLSAgICA1NDAzLCAxMDM1MiwgNzAwODUsIDEwMDYxLCA0MzIzNywgMCwgNTE0MCwgMjA5LCAxMjg4NDcsIDQxNzA0LCA0MTA1NiwgCi0gICAgNDMwNzgsIDEyODEyNSwgMTE4ODA5LCAwLCAxMDg5OSwgNjU0NjksIDkyMzYyLCAwLCAwLCAyNDEwLCA5OTMsIDAsIAotICAgIDEyMDU4OSwgMTIwNjg5LCA3ODY5MywgMCwgMCwgNzIzMiwgMCwgMTE5MjUzLCAwLCA3MTEwLCA3NDQ2MiwgMjA2NiwgCi0gICAgMTA0ODksIDQyMTY2LCA0MzQ2MywgMTA2NTksIDM2MDAsIDAsIDQyMjQsIDEzMzYsIDQxNTE4LCAwLCAwLCAwLCAwLCAKLSAgICA0MTEzOSwgNjQ4MjAsIDkyNTM4LCAxMjk2NiwgNDExMzQsIDAsIDAsIDAsIDAsIDI3MiwgNDI2MywgODc5MywgMCwgMCwgCi0gICAgNDE1MDIsIDAsIDk4MywgMTI1NDksIDAsIDAsIDExOTAsIDQxMDksIDEzMzUsIDg0MSwgNTg4OCwgNDEzNTgsIDY0ODYzLCAKLSAgICA5NTQ0LCA0MzQ4MSwgMCwgMTk0ODA2LCA3MDAyNywgMjA5OSwgNTEyMCwgMjQwOSwgNzc5OSwgMCwgNzQ0MjQsIDAsIDAsIAotICAgIDQ3MzEsIDAsIDY2NjI5LCAwLCAwLCAxMjU1LCA0MTQ5LCA5MjQ3LCAwLCA5OTEzLCAwLCAwLCA2NDkxNCwgOTE3Nzg3LCAKLSAgICA2NTEwMSwgMCwgMTE2OTQsIDkyNDc1LCAxMTY5MCwgNTgzNSwgMTI3MTY0LCA2NjYyNSwgMTA4NDIsIDQxMzU0LCA0MjEyMywgCi0gICAgNDMwOTcsIDExNjg4LCA2NjYzNCwgMTA5NCwgMTk0LCA2NDY5MiwgMCwgODE4MCwgMCwgMCwgOTk3MiwgNzM4NjUsIDQ1MTksIAotICAgIDYxMTQsIDEwODk4LCA0MzA3MiwgMCwgMCwgOTM5NjAsIDk4MzMxNCwgMTI2NTgxLCAxMDY5NSwgMCwgNzU0MCwgMCwgODgxLCAKLSAgICA3ODU3LCA2MDY3LCA2NTE2NCwgMCwgMCwgMCwgMTMzMTEsIDY4NDAzLCA0MTg1NywgNjQzMjEsIDgzNTksIDAsIDEyNjg5LCAKLSAgICAwLCAxOTQ1OTQsIDAsIDk4MzMwNCwgOTgzODcyLCA2ODE4MywgMCwgOTgzMzA2LCAxMjg3LCA1NDM2LCAwLCA5ODMzMDksIAotICAgIDc0MTQyLCA5MjMyOCwgNzQxNTIsIDExOTA3OCwgNjA1MSwgMTA0OTcsIDY5NjY4LCA4OTg1LCAxMjEwOSwgOTgzMzE1LCAwLCAKLSAgICAxMjcyNDIsIDAsIDAsIDM2NTIsIDEwNTM3LCAwLCAxMjc2LCAxMjA0NDAsIDY1NDksIDI3OSwgNzM3NDUsIDAsIDAsIDAsIAotICAgIDE0ODksIDAsIDAsIDAsIDM4OTksIDEwMDcsIDQyMTI0LCA5ODM1NTcsIDQyMTIyLCA5MjMzNywgOTIzNjcsIDAsIDExOTg1LCAKLSAgICAxMzQ1LCA3ODYwMCwgMCwgMCwgODk1NiwgNDMwODMsIDk0MDU3LCA0MjEzOCwgNzg2MTAsIDAsIDEyMTUxLCA3ODYwOCwgCi0gICAgNzg2MDQsIDc4NjA1LCA2Mjg1LCA3ODYwMywgNzg2MTIsIDc4NjEzLCA2NTk0MiwgNDkyLCA4Njg1LCAwLCA5ODM3NTAsIDAsIAotICAgIDc4NjIyLCA0MzcxMiwgMjU4MiwgMTE0NzAsIDY0NTM4LCA3NDQ0LCA3ODYxNSwgNzg2MTYsIDIyOTcsIDAsIDczODM3LCAKLSAgICAxMTk4MjMsIDI1MjcsIDExOTgyNCwgMTk3LCAyNzk5LCA5MjU5NCwgNDE5NDQsIDEyMDI3NiwgOTkzMywgMCwgNjY1MTUsIAotICAgIDc2NywgNTUyNCwgNzAyOCwgMCwgMCwgMTE5ODI3LCAxMTk4MTcsIDExOTgyOCwgNzg2MzMsIDEwODk2LCAwLCAxNzk5LCAKLSAgICAxMjA0OTcsIDY5NzEsIDc0MzM2LCAxMjgzNDIsIDAsIDY1MzQwLCAxMTg5NzksIDQxNTUxLCAyNDM0LCA5NDAxOCwgMCwgCi0gICAgMTIwNTc5LCAwLCA0NjMxLCAwLCAwLCA2NDA3LCAwLCA2MzM4LCA0MzIxNCwgMCwgNzU3MCwgMCwgMzE5MiwgMCwgODQxNCwgCi0gICAgMCwgOTM5ODMsIDAsIDAsIDAsIDkxNjQsIDY2NjEyLCA5Mzk1OSwgMzE3MSwgNjYyMywgNDk2MSwgNjgzOTYsIDg4NiwgCi0gICAgNTUyMTYsIDg2NTQsIDc4ODMyLCA5OTkzLCA3NDM5MCwgNjQ2MDMsIDcwMDY2LCA2OTI0MSwgOTU5OSwgNzg2MjksIDQzMDg0LCAKLSAgICA3ODYyNywgNzg2MjgsIDc4NjI1LCAyMzk5LCA2OTY5MywgODk5NCwgMTA5NDQsIDQxMjA4LCA5ODM3MDQsIDQxMTY4LCAKLSAgICA4MTc4LCAwLCAzMzY3LCA5MjMzNCwgNDI1MTAsIDc4NjQxLCA3ODYzNiwgNjgwNCwgNzg2MzQsIDE5NDcsIDAsIDAsIAotICAgIDkyNjgxLCA0Mjc1OSwgMTEwNjgsIDE3MDUsIDkzMzEsIDAsIDc0Nzk4LCA5MTgxLCA2NTM1OSwgMCwgODAxNywgMTE5ODMxLCAKLSAgICA2NTA5NiwgNjY3MjAsIDAsIDQzNDc1LCAwLCA0OTA5LCAxMjEyNiwgMTI4NjczLCAxMjA2OTYsIDQ5MDQsIDk4MzMyNSwgCi0gICAgNjk2NTAsIDEzNjUsIDkyNTMsIDQyNzU3LCA0MzQzNiwgNzQ2MiwgMCwgMCwgMCwgMCwgMTE5NTg3LCA2NDQxNSwgMCwgMCwgCi0gICAgNTM5OCwgMCwgMTI3Mzg2LCA5Mzk1MywgMCwgMCwgMTE5MDE1LCAwLCAwLCA5NDc2LCAwLCA5ODM3NjgsIDEyNzYzLCAKLSAgICAxMjY2MDMsIDM2MjksIDAsIDEzMDA1LCAwLCAzNjI4LCAwLCAwLCA5MjUwMiwgMzQ2OSwgNDIxMDcsIDQyMTE2LCA5MTc1NzgsIAotICAgIDY0ODA5LCAyOTI4LCA0OTA1LCA5ODUzLCA4NTEsIDkwNDAsIDAsIDY0NjY1LCA0MzA4NiwgOTExNCwgMCwgNDI1ODMsIAotICAgIDkzMTUsIDQ4MjIsIDQ5MDYsIDM4NTIsIDI4NDcsIDExOTgyMSwgMzIzNiwgMTEzMTcsIDEyNTEsIDc3NzcsIDQxODUyLCAKLSAgICAxMTQxMCwgMTA5NjQsIDAsIDQzMjIyLCAxMjY0NiwgMTIwMjY5LCAxMDI1OSwgOTg2NSwgNjU4MjEsIDAsIDYwMTgsIAotICAgIDkyMjkwLCAwLCAxMjI3NiwgMCwgNjgzNzIsIDAsIDkyMjU5LCAxMTkyNDQsIDAsIDk4MzIyNCwgMTA0NjcsIDAsIDI0NDMsIAotICAgIDEwOTE4LCA3ODIxNywgMTE5ODI1LCAxMDAxLCA5MjQxLCAxOTI3LCAwLCAwLCA3Mzk4NywgMTI3ODg1LCAwLCAwLCAKKyAgICAxMTg5MDcsIDAsIDEwNDc0LCA0MzQyNiwgMTMyNTcsIDQyMzU0LCAxMjgwOTksIDk4MzY5OCwgNzAwNDQsIDE5NTA2NSwgMCwgCisgICAgODQxMywgOTgzODE2LCAwLCA1NjkzLCA3MjcyLCAwLCAxMzIwOSwgNjQ0NzAsIDY1ODMxLCA3NDM1MCwgMTk1MDYzLCAwLCAwLCAKKyAgICAwLCAxMjY2MzksIDEyMDA5NywgMCwgOTQwNzgsIDEyODEzMywgMTI3NzY3LCA2NjYwOCwgMzExMSwgNDE4NjMsIDg4MDQsIAorICAgIDQyOTEzLCA5MjE4NywgNzI3MCwgMCwgNjY2MDYsIDY2MjgsIDEwNzYsIDc0MzMsIDE0MzYsIDczODQ0LCA1NTIyNiwgCisgICAgMTI4MzUzLCA2Mzk4MiwgNzM5MywgMTI4MDcsIDQzNDEzLCA2MzkwNiwgMTU5OCwgNjM5MDQsIDAsIDAsIDQxNzI5LCA0NDIzLCAKKyAgICAxMzA3LCAwLCAxMDUxNSwgNDE1ODksIDEyODY5OCwgMCwgNjIxOCwgMCwgMTQzMCwgMCwgMCwgMTIwNjA2LCA3ODc1NCwgCisgICAgNTQxMywgNzYxOSwgMzI1NSwgMzQ5MywgNzQwMzIsIDExNTQ5LCAxMDczNSwgNDE3NDMsIDczOTM3LCA2ODAxLCA5ODM2MzMsIAorICAgIDQ1MTgsIDEwOTkwLCA2NTA3MywgNTE2NywgNDQ4MSwgMzc3MSwgMTIwMTU4LCAyNzEwLCAwLCA2OTI0MywgNDE3MjQsIDAsIAorICAgIDQzMDczLCA0MTY5MCwgMTI0NzksIDk4MzYzNSwgMCwgMCwgOTgzODE4LCA3MDA0NiwgMTYyOCwgMTI3MTQ5LCA5ODM0ODcsIAorICAgIDk4MzczMSwgNjUyNjIsIDYzMzMsIDEwNzgzLCA0MjMxNSwgMCwgNjM4NTUsIDk0MDU2LCAwLCAwLCA1MzM5LCA3NDMyMywgMCwgCisgICAgMTMwMDQsIDAsIDQ0NTcsIDAsIDAsIDE5NDgxOCwgMCwgNTY4NCwgODY3OCwgMTA5MTQsIDAsIDU2ODksIDY1ODA3LCAwLCAKKyAgICA2ODQ2NCwgMTI2MzMsIDEyODcwLCA2OTcwNSwgNjUxODMsIDU2ODgsIDExOTI2LCA2MDMzLCA2MzEwLCA1Njg2LCAwLCAKKyAgICA3NDI1MSwgMCwgMTIwNjQ3LCAwLCA1MCwgMTA1NTgsIDk4NzEsIDQyNjEyLCA0MzY1NSwgMCwgMCwgMCwgNjY0NjgsIDAsIAorICAgIDEzMjU5LCA0NDQ4LCAwLCA5ODM4NDUsIDAsIDcwMDQzLCA2Nzg1MywgMCwgMTA2NDAsIDExNTM5LCAxMTUxLCAwLCAKKyAgICA5MTc2MDcsIDEyNzU0NCwgMTI3MDc5LCAxOTUwNTAsIDEyNzg1MiwgMCwgMCwgMCwgMTI1MDEsIDY0NjA0LCAwLCAxMTUyNywgCisgICAgMTE4ODcwLCA4ODEyLCAwLCAxMTUzOCwgODY3MywgMTI2NTAsIDExMDIwLCAwLCA2NjQ2NywgMjEwNSwgODA4NywgNzgxNjMsIAorICAgIDY5NjMyLCA5ODk0LCAwLCAwLCAwLCA0NjM2LCA1NTI2MiwgNzg1MTMsIDQ1MTUsIDIzODIsIDAsIDEyNzA1NSwgMCwgCisgICAgMTIwNDk1LCAwLCAxMjgyODQsIDEyMjc3LCAxOTQ2MjcsIDExOTk1LCA5MjU1MywgMCwgMTIxNTgsIDAsIDg3NDEsIDEwMTk3LCAKKyAgICAwLCA5MjQyNiwgMCwgNjUzMSwgMCwgMTI3ODQ2LCA0NzMsIDQzNDE1LCAwLCA5ODM2NTAsIDE4NzMsIDEwODcsIDAsIDAsIDAsIAorICAgIDc4NTI3LCA2NjQzOSwgNDMyMTgsIDk4MzEyMywgMTk0NzE2LCA3MjM3LCAxMjUwNCwgNzQyODIsIDAsIDk4MzU3MSwgMCwgCisgICAgOTQ4OSwgMCwgMCwgNDM4NCwgNzQyMjAsIDYzODQ1LCAyMDU4LCAxMjg4NjMsIDEzMjk1LCA0MzE5MSwgMTI4MDMwLCAwLCAKKyAgICAxMTU0LCAzODU3LCAxMjA1LCAwLCAwLCAxMzEwMCwgMTI5NTgsIDEyMDcwNiwgNzQxNjgsIDAsIDAsIDQ0MjEsIDEwNTkyLCAKKyAgICAwLCA0OTUsIDExOTAwNywgNDE3MTIsIDc5ODMsIDAsIDkzOTk3LCAwLCA2MzQ3LCAxMjAxNjUsIDc2NTQsIDQxNzEwLCAKKyAgICA0MTk2LCAwLCA0MzcsIDQxNzA5LCA3Mzc3MiwgMCwgMCwgOTQ2NSwgMTMyOTAsIDExOTE4MCwgNDk5NywgNjQzMDYsIDAsIDAsIAorICAgIDQ5OTksIDE5NDY0MiwgMCwgMTI2NTgyLCA0NzExLCAxMjA3NjksIDAsIDI3MzksIDAsIDgwNDQsIDc0ODM0LCAxOTQ2NDMsIAorICAgIDQxNzg5LCAxMjgxNDIsIDEwODA5LCAwLCAwLCAwLCAxNzc5LCA2NjAwLCA2NjAxLCA0MTU0MywgNTMyNSwgNjQyLCA2NDE4NywgCisgICAgMTMwNTgsIDEyMDQ0OSwgMTI4NzUsIDAsIDkyMTg2LCAxMzIyOSwgMCwgMTA1NzUsIDQzMzk5LCAwLCAwLCA0MTc5MSwgCisgICAgMTEwNCwgMCwgMCwgMTA2NTUsIDAsIDAsIDAsIDAsIDEwODIsIDE5NTA0OSwgODQyOCwgNjU2OSwgMCwgMCwgMCwgNjk4NDksIAorICAgIDY3ODMsIDAsIDEyOTkzLCA4MDQ5LCA0MTU0OCwgNDQwMjEsIDY0NTgsIDk4MzgwNywgMTI4ODgyLCA0NzYxLCA2MzgyOCwgCisgICAgNDc2NiwgNjQ2MjMsIDEyNzMsIDQzNDA3LCAwLCAxMTg4NzYsIDE5NTA0NSwgNjkxMiwgMTMxMywgNjMyMiwgMTA0ODMsIAorICAgIDk4MzYwMywgNDE1NDUsIDAsIDkyNDQ5LCAwLCAwLCAwLCAwLCA3ODYyNCwgMzQ4NCwgNzQzMzcsIDAsIDAsIDg1MDMsIAorICAgIDUxMjIsIDQxNTI3LCAwLCA2NjMyMCwgOTgzODExLCAwLCAwLCAwLCA0MTUzNywgNjk2ODMsIDgzMDMsIDgyODIsIDExODE3LCAKKyAgICA3Mzg1NywgMTAwMDMsIDczODU5LCA2NTkwNCwgNzM2MywgMTY4NiwgMCwgNzg0MDYsIDExNDY3LCAzNjY0LCA2NTkyMSwgCisgICAgNjQyOTksIDE5NDY2NCwgMCwgMCwgNDMyNCwgMTI2LCA0MjI0NiwgMTE5MTUyLCAwLCA3NDM3OCwgNjU5MjYsIDc3NDQsIAorICAgIDE5NDYzNiwgNzQyNzcsIDc0MzAyLCA3ODA1MiwgNDM4MTcsIDY5NjYsIDQzODIyLCA4MTM2LCAwLCA2NTYwMCwgMTYzMywgMCwgCisgICAgMCwgNDc2MiwgMTEwMywgMCwgMCwgNDc2NSwgOTgzNDkyLCAxMzA3OCwgMCwgNDc2MCwgNjM4MjcsIDIwNTAsIDEwODcxLCAKKyAgICA0MzE5OSwgMTEwMiwgMCwgNDIyMzYsIDEyODg2NywgMTk0NjY3LCAxMTU0NiwgNzQ3OTQsIDMzNywgMCwgNDI1OTEsIDg2MjcsIAorICAgIDEyMjc5LCAxMTExLCAwLCA5MjE2MSwgNDcwNywgNjgyMDYsIDEwMTQzLCA3ODgzLCAxMjcwODEsIDc4ODAsIDQ1MjIsIAorICAgIDg2NDUsIDU3MDQsIDEzMDEwLCAwLCA4MzA0LCA5MTc1NjEsIDAsIDExOTU3NSwgMjI5MywgMCwgNjY2NTQsIDAsIDkyNjc2LCAKKyAgICAwLCAxMzAwOCwgMCwgNDM4NSwgMCwgMTMwMTEsIDAsIDkyNTY5LCAxMTkxNjEsIDEzMDA5LCAxNjAsIDI2NzcsIDAsIDAsIAorICAgIDQxNzkzLCA2NTc2MywgNzQyMjEsIDEyMDE0MSwgNDE3OTIsIDQyNzcwLCA5NDA1NCwgNjU3NjIsIDExODgyOSwgNDM4MjEsIAorICAgIDU3MDksIDAsIDk0MDUzLCA0MzgxNiwgMCwgMCwgMTA3OSwgMzg2NywgNTcwOCwgMCwgMCwgNDM3OTcsIDU3MDYsIDY0NzY4LCAKKyAgICA1NzA1LCA4NzkxLCA0MDA1LCAwLCAxMDIzNywgMTA5OTEsIDEyODgxNiwgNDM0NTksIDkxNzMsIDkxNzU4MSwgOTE3NTgwLCAKKyAgICAxMzE3MCwgMTI1NDAsIDkxNzU3NywgNDI2MDUsIDEyMDc2NSwgMTI2NjE3LCA2ODY0NywgOTE3NTcyLCAxMDA1OCwgMCwgCisgICAgNzQ4NjcsIDE5NDY1NCwgMTI3MDc4LCAzMzM5LCAxMTQ0OCwgMTEwNiwgOTE3NTkxLCA5MTc1OTAsIDkxNzU5MywgMzM0MCwgCisgICAgOTE3NTg3LCA5MTc1ODYsIDkxNzU4OSwgOTE3NTg4LCAxMjA1NDEsIDEwNjA1LCAxMzA5LCA2Mzk2NiwgMTIwNzQzLCAxNzU0LCAKKyAgICA5MjIyNiwgMTMyNDYsIDg2NCwgMCwgMTE4OTI2LCA4OTcyLCAwLCA3ODQ5LCAxMjAwOTIsIDkyNTMzLCAxMzI0MCwgCisgICAgMTk1MDY4LCA1MTkyLCA0MzM4LCA2Nzk4MiwgMTA5NDgsIDkxNzYwMSwgMTMxOTksIDkyNTc1LCAxMjM2LCAxMzIwOCwgCisgICAgMTMyNjEsIDEzMTg5LCAxMzE4OCwgOTM5OTMsIDAsIDc0NDAsIDAsIDEyMDE1MywgOTU1MywgMTU5MCwgNjM3NzcsIDYzNzc2LCAKKyAgICAxMzE3OCwgNjM3ODIsIDYzNzgxLCA2Mzc4MCwgNjM3NzksIDE1ODMsIDAsIDEzMjYwLCA0NTUwLCAwLCA2NDIwNSwgMCwgMCwgCisgICAgNDE1MjIsIDk4MzkxNSwgOTIxNjgsIDk4Mzc3MiwgOTE3ODU4LCAxMTM1NCwgOTQwNzEsIDAsIDQyNzk1LCAwLCAxMTkxOTUsIAorICAgIDExMzk0LCAxOTQ2NDYsIDEzMjM2LCAxMzI3MiwgMTMxOTQsIDEzMzQsIDY5OTI2LCA0NDc5LCAxMTc4LCA2NTU4NiwgCisgICAgMTIwNjYzLCA2NjY4MSwgMTE5MTkzLCA0NjAxLCAwLCAwLCA5ODM3NjUsIDAsIDAsIDE5NDY1OCwgMCwgNjgwOSwgNjM3ODYsIAorICAgIDYwMzEsIDAsIDYzNzkxLCA2Mzc5MCwgMTE0NSwgNjM3ODgsIDc5MTAsIDYzNzg1LCA0MzE1MywgNzU0LCAxMDE5MiwgCisgICAgMTMxMDUsIDgxODMsIDEyMDc0MSwgMjAzNywgMCwgMCwgMTA3NDcsIDEyNSwgMCwgNjQ4OTAsIDAsIDk4MzEzMSwgMCwgCisgICAgNDE3MTksIDYzNzU4LCAzNTIzLCAxMDc0LCAxMzI1OCwgOTUzNiwgNzQwNzcsIDAsIDQ0MjcsIDc0MjQyLCA2Mzc1NywgCisgICAgNDMxNDUsIDEyMjE3LCA2Mzc1NCwgNDE1MzIsIDEzNDksIDYzNzUwLCA2Mzc0OSwgMCwgMCwgMCwgNjM3NTMsIDYzODAyLCAKKyAgICA0MTA4NCwgMTIwNjIyLCA2ODEzMywgNDE5MzAsIDYzODA1LCA2MzgwNCwgNDM2MzIsIDYzODAxLCA0MTA4MiwgODE0MCwgCisgICAgNjM3OTgsIDYyNjAsIDAsIDAsIDk0MDc0LCA2Mzc5MywgMTE5ODgsIDM4OTgsIDEyODI0MSwgMTAyMDEsIDEyMjM4LCAKKyAgICA2Mzc5NSwgNDIxOTQsIDEwMzY3LCAxMjUyMSwgMTA0MzEsIDQyMTE0LCA0MTkzMiwgMTA2OCwgMCwgMTI1MjMsIDEyOTQ1LCAKKyAgICA5ODMzMjksIDQyMjAzLCA3OTUwLCAxMDgwNCwgNjM3NzEsIDQyNzg3LCA0Mzg2LCAxMjIyNCwgNjk3MywgMjc5MywgMTI0NzUsIAorICAgIDAsIDAsIDYzNzY5LCA5NTMwLCA5ODMxMTksIDEyMjMyLCAxMzEzNSwgODU5NiwgNTY4MSwgNjM3NjIsIDQ1OTUsIDYzNzYwLCAKKyAgICA3OTIsIDAsIDY0ODAzLCAwLCA4NzQyLCAwLCAxMTA1MywgMTI4Nzk2LCA2Mzc0NCwgMTI4MTA3LCAwLCA3NTg4LCA2Mzc0OCwgCisgICAgMTY5MywgNjM3NDYsIDQzMjA0LCA1MDU1LCA2ODQyNiwgOTE3ODUzLCAxMDkwLCAxMjA2NzksIDEyODM1NiwgMTE2NjUsIAorICAgIDc0MTMzLCA0NTU4LCA2NTY4NSwgOTUyMywgMCwgMCwgNzg2ODEsIDExNTEzLCAwLCA2MTU3LCA2Mzc3NSwgNjM3NzQsIAorICAgIDYzNzczLCAxMzE5MSwgMTIxNzAsIDM1MDAsIDMxMzksIDAsIDMxNzAsIDEyNDg1LCAwLCAxMDg3MiwgNzgyNzEsIDEzMDA2LCAKKyAgICA2NDQzMywgMCwgMCwgOTQxLCAwLCAwLCAwLCA2NTU0MSwgMTEwNjMsIDAsIDgyMjgsIDAsIDQyMDY1LCAwLCAwLCA5NDAzOSwgCisgICAgMCwgOTI0NTUsIDczODYsIDAsIDY0NDQ0LCAwLCAxMTk4NjMsIDQzNjAzLCA5NDA3NSwgNjUzOTcsIDI4OCwgMCwgMCwgMCwgCisgICAgMTAwMjUsIDY5OTE1LCAyOTE4LCAwLCA2NTMwMCwgMTE5ODcxLCA5ODgzLCA2NDcyNiwgMjc5MCwgNjUzOTUsIDM3OTMsIDAsIAorICAgIDEyNzgyOSwgNjUzOTMsIDAsIDc0MTM4LCAwLCAwLCAwLCA3NDEzOSwgOTI3MTIsIDY1Mzk0LCAxMTU0OCwgNTI3MCwgMCwgCisgICAgNjUzOTYsIDAsIDY1ODEzLCAxMzI1NiwgMTI4MiwgMTIwNzcxLCAwLCAwLCAxMDg4OCwgOTgzNjA0LCA2NTI0MiwgMCwgCisgICAgMzMzMCwgMCwgMCwgOTgzOTc0LCAwLCAwLCA3NDI1OSwgMzMwNCwgNDI3NTMsIDAsIDAsIDAsIDE2MjcsIDAsIDAsIDAsIAorICAgIDUzNzEsIDEzMTE2LCAwLCAxODI2LCAxMTg3OTQsIDAsIDQzMDk0LCA3MDAyMywgNDM2NTAsIDk0MDM3LCAwLCA5MDM1LCAwLCAKKyAgICAwLCAxMjgwMDUsIDAsIDkyMjA3LCA2ODEyNSwgMCwgMTY0LCAwLCA5NDA2NywgOTQwMDAsIDY5NTgsIDAsIDQzMTE2LCAwLCAKKyAgICA3MDAxOSwgMTMyNDUsIDAsIDAsIDEyNzM3NiwgMCwgNzAwMzEsIDEyNzc1NiwgMTI2NjYsIDEzMTc1LCAxMzIwNywgCisgICAgMTIwNDE0LCA2NjAxNCwgMTIwNDI4LCA3NDQ3LCA1OTI5LCAwLCA2NTUwOSwgMCwgNzQ0OSwgMTEzMDYsIDAsIDczOTIwLCAKKyAgICAzMTgwLCAwLCA2MzgwOCwgOTA1NCwgOTcxLCAxMzA2MiwgMCwgMCwgNjUxOTUsIDEwMTY0LCA5MjI1MiwgNzQ0MjgsIDAsIAorICAgIDc4MTQ2LCA5MjYxMSwgMCwgMCwgMCwgMTAwNDUsIDEyODgyLCAxMzI3NSwgMTI4MTYxLCAxMTA1NywgMCwgMTMyNzYsIDAsIAorICAgIDQxNTI1LCA3ODE1MCwgNzI3MSwgMTE0NDQsIDAsIDAsIDAsIDEyMjI5LCA0MTUyMywgMCwgNDM0MTEsIDczNzUxLCAwLCAKKyAgICA2NDgxMywgMCwgMCwgMTA0NzYsIDM4NTgsIDAsIDM5MzIsIDY0OTU4LCAwLCAwLCA3Mzk4OSwgNjgxOTIsIDAsIDY5ODQ3LCAKKyAgICAzNjksIDAsIDQxNzg0LCAwLCA2NDE2MywgMCwgMCwgMCwgNjU0NzQsIDQ3OTYsIDEyMjkyLCAxMjY1OTUsIDY1NDc5LCAwLCAKKyAgICA0MTc4MSwgMTA0ODYsIDQxNDgwLCA0MzAwMiwgOTg5OSwgMCwgMCwgNDA0LCAxMjgyMSwgMzc0MSwgMCwgNTc4OCwgODA5MiwgCisgICAgNjgyMTIsIDQxMjIyLCAxODMxLCA2NjAyMCwgMzk4MiwgMCwgNDM4OCwgMCwgNzQ2LCAxMjA3ODQsIDAsIDAsIDEyMDE4LCAKKyAgICA2NTI5NCwgMCwgMCwgMCwgMCwgNDQyMiwgNDcwOCwgMzc5OSwgNzQyOTIsIDExOTM1NywgMCwgNzQ0MzAsIDAsIDExNzAwLCAKKyAgICA0Mzc0LCAwLCAxMjgxNzksIDEzNjQsIDAsIDgwMzgsIDAsIDkxNzU5NywgMTI4NjgsIDY5ODE0LCAwLCA2NzM1LCA3Mzk3OSwgCisgICAgMTMxNzQsIDczOTY4LCAxMzIyNSwgMCwgNjk4MDgsIDY1ODM1LCAwLCAyMzY1LCA3ODQxLCAwLCA0Mjg1NSwgMTE4ODU2LCAKKyAgICA0Mjg2NiwgMCwgMCwgMCwgNjY0MzgsIDQxNzg1LCAxMjYxNywgNjQxNzIsIDEzMTczLCA0MzcyLCAxMTkzNTQsIDAsIAorICAgIDk4MzU2OCwgMCwgMCwgOTI0MDIsIDEyODA2MiwgMTI5NjUsIDM4NCwgNjQ1MTIsIDEwNDA0LCAxMDM0MCwgMTE5MzUyLCAKKyAgICAxNTU2LCA1Mjc0LCAxMzIxMCwgMTIwMTI1LCAxMDAxNywgOTczMywgNDE3ODcsIDk4MzI0MywgMTI2OTk0LCA0MTM3MywgCisgICAgNzgwMzksIDEyMzAzLCAwLCAxMzIzMiwgMTMyMzMsIDM0OSwgNDg2MywgNDEzNzEsIDExNjU2LCAwLCAxMjA3MDMsIAorICAgIDExOTg4MywgMTI4NjEsIDQzOTgsIDg1NDMsIDY1NjE4LCAxMjgwMTgsIDEwOTYsIDAsIDAsIDQyNjg4LCAxMjQ0MSwgCisgICAgMTIzNTUsIDExOTM0OCwgMTE5MzQ3LCA0MzE4LCAxMDQ1MiwgMCwgODAzMiwgMTMyNDMsIDEzMjM3LCAxMjcxOSwgMTI2NjQ2LCAKKyAgICAxMTkxMDEsIDAsIDY0ODg0LCAxMTk4NzIsIDExOTM0NSwgODU5NywgMCwgMCwgOTg2NCwgMCwgMTIwNzg1LCAxMTk4NzQsIAorICAgIDk0MTA3LCAxMzE5NSwgNDE0NTIsIDY0OTYxLCA3NzIyLCAwLCAxMDQ1OSwgMTE5ODc4LCAwLCAxMTk4NzksIDY2NTkwLCAKKyAgICAxMjgxMjMsIDQxNTMzLCA2NjMzNywgMCwgOTIxODQsIDAsIDQ5NjUsIDQzNDQ1LCA5MTc1MzYsIDczODQ5LCAwLCA0MzYzOCwgCisgICAgNzg1MzcsIDEyODI4NywgNjI2MSwgMTE5MzQyLCA0MzE0NywgNjY1NzAsIDE5NTcsIDEwNDIwLCA5ODIsIDI3NTYsIDEzMjkyLCAKKyAgICAxMzIwNiwgMTI4ODI4LCAwLCAyOTI1LCA3MzgwOSwgMTMwNTYsIDEyNzU1OSwgMTMyMTIsIDQzMjM4LCAwLCAxMzE5MCwgCisgICAgMTMxODcsIDkyNTQxLCAxMzE5OCwgMTE4NzkzLCAwLCA1MjQyLCAxMTkxNzksIDY0NDc2LCAxNjk0LCA4MjE2LCA3MTM2OSwgCisgICAgNjc3MCwgNDMzMzEsIDAsIDY1NjIwLCA5ODM3MjgsIDQzNTQ0LCAxMjY0NjYsIDAsIDQxNDQ0LCA2NTYyMSwgNjk5NTUsIAorICAgIDkxOTcsIDUyNDYsIDExOTEwNiwgMTMxODUsIDk3MDksIDEyMDMyMywgMTIwMzIyLCAxMjMxNCwgNjU2MTYsIDUyMzgsIAorICAgIDExOTMzMywgMCwgMTE5MzM3LCA1MjM2LCA0MDk3OSwgMCwgNzQyMDEsIDgyODYsIDEyODUzNywgMzkzNiwgMTE5MzMxLCAKKyAgICAxMTY5OSwgNDEzNDcsIDEyNzI0OSwgMTMyMzUsIDg4NDIsIDQxMjQ4LCAwLCA0Mzc5LCAxMzIzOSwgMTI2OTIsIDc5NjksIAorICAgIDEyNzI2NiwgNzIxOSwgMTI3MjUwLCAxMjgyNTEsIDEyMDUwOSwgMCwgNjYyMjQsIDczNCwgMjk3OSwgMTIwMzAzLCA2NTYxOSwgCisgICAgOTg3MiwgOTU3LCA2NDkyMSwgMTg0NiwgNjY2MzEsIDQxNDc3LCAxMTkyNTYsIDEyMDMxMCwgNzQ1MTEsIDQxNzcwLCAxNjcwLCAKKyAgICA2NDQyLCAxMjAzMTcsIDQyNDQ2LCA1Mzc5LCAxMjAzMTgsIDQxMTYzLCA3NDgzMiwgMTIwMzE1LCAxMjAzMTQsIDExNTA2LCAKKyAgICAwLCA0Mjg0MSwgMTMyNjcsIDAsIDAsIDQxNzc1LCAwLCA3MTMwLCA0MTc3MywgMCwgMTA2NjMsIDAsIDAsIDAsIDYxNTEsIAorICAgIDEyMTEwLCA0MjY3MywgNjU1NzIsIDY1MjkzLCA2NTI1MCwgMTMyNjUsIDEzMjY0LCA2NDUxOCwgMCwgNjEwMCwgMCwgCisgICAgOTI2NDcsIDU4MDgsIDY1OTIyLCAwLCAxMjk2NywgNjYwNDEsIDU2MTIsIDQ1ODMsIDAsIDAsIDY4MDk3LCA2NDU3NSwgCisgICAgMTI2NjM3LCAxMTk2NSwgMCwgNjgzNTgsIDAsIDY5Nzg5LCAwLCA5MjI2MCwgNjgxMDIsIDk2OTgsIDc4MTQsIDc0NDc2LCAKKyAgICAxMTk2NTEsIDEyODUxNCwgMCwgNDE5MjEsIDExODg1OCwgOTc1NiwgNjk4NSwgMTE5MjU4LCA3ODQ5MCwgNzQyMTksIDAsIDAsIAorICAgIDExODk5NywgODAxMiwgNTY3NCwgMTIzNTMsIDAsIDEyMzYxLCA1Njc3LCA1NTg4LCAwLCA0MTkyNSwgMTI4MTI0LCA0MTkyMCwgCisgICAgNTY3MywgMTIwNTM0LCA1Njc2LCA0MTkyMywgMTI2OTQsIDExODk3OCwgNTY3MiwgMTI5NCwgMCwgNzgwNTksIDAsIDQyNTExLCAKKyAgICAxNzI3LCAxMjA3MjUsIDQyNDM2LCAwLCAwLCAwLCA3NDIyMiwgODcxOCwgMzU1MCwgNzM2LCAxMDI2OCwgNDUwNSwgMTAzMTYsIAorICAgIDc0MDkwLCA1ODI2LCA1NTIzMiwgNTgxMywgMCwgMTIwNzEyLCA1ODQxLCA1ODM3LCA1NTIzNCwgMCwgMzEwNSwgMTI4MjksIAorICAgIDU4MzgsIDU3OTYsIDAsIDExOTU5MiwgNTc5MywgMCwgNTg2NiwgNTc5NywgNDEwMTEsIDU4NjUsIDEyMDA5MSwgNzk1NiwgCisgICAgNTk4LCAwLCA2NDY0OSwgNTgwNiwgNDIzOTgsIDAsIDkwMzcsIDU2NzEsIDEyMDA0MSwgOTgzMjU1LCAwLCAwLCAxMjg4NTUsIAorICAgIDAsIDg0NywgMTI4MjQyLCA5NTI5LCAwLCA2NjY1NywgNjk4MCwgNzg0ODMsIDEyMDAzNSwgNzg0ODQsIDk4MzQ5MSwgMCwgCisgICAgMTIwMDMzLCA3ODQ4NiwgMCwgMCwgMTIwMDM5LCA0MjY4MywgMCwgOTgzMDU1LCA3MTE0LCAwLCAwLCA0MzE5MCwgNjU0NjMsIAorICAgIDE1NTQsIDAsIDQyNjExLCA0MjU2MywgMCwgNTY1MSwgMjkyOSwgNjc5MiwgNDMyMDEsIDAsIDE5OTYzLCA1Njk4LCAwLCAwLCAKKyAgICAwLCAwLCA1NjQ0LCAxMDI5MiwgNjU1NDYsIDY5NzI3LCA2ODE0MSwgODM3MiwgMCwgNjUxMTYsIDAsIDEyMDAyMiwgMTAxNzUsIAorICAgIDEwMzg4LCA0Mjc5OSwgOTQxMDAsIDQxMDEzLCAxMDU2OCwgMCwgOTgzNjE4LCAyODY5LCAwLCA0MTAxNSwgMTk0NjkyLCAKKyAgICAyNzg1LCA0MzY2LCAwLCAxMDk1NCwgNDE4MDIsIDAsIDQyNjA4LCA3ODQ2OSwgOTg4NCwgNDc1OSwgMCwgMCwgMTAyNjYsIAorICAgIDQxMzU5LCAxMTcwLCA0MzM2NSwgNjk4MTAsIDczOTA4LCAxNjA5LCA5MDIsIDAsIDYzOTM2LCAxMjg4NzUsIDExNjYxLCAKKyAgICA4MTIyLCA1ODE4LCAwLCAwLCAzODYxLCA5NTQwLCAxMTAyOCwgMjU1NCwgNTE1OCwgNTcxNCwgMjIxMywgMCwgMCwgODA3LCAKKyAgICA0MzA3OSwgMCwgNzg0NzUsIDk3NiwgNTUxMSwgNjQ1NTMsIDAsIDQyMTU1LCAwLCA0MTM1NiwgNzQxMTAsIDExODgwMSwgCisgICAgMTI2NjE0LCAwLCA4Njc2LCA5ODMyOTEsIDAsIDU1ODIsIDQ1MSwgNjM5NDEsIDU3OTgsIDkzNDksIDQyMDE4LCAxMjc4NTgsIAorICAgIDAsIDAsIDQzNjA5LCA1OTA2LCAxMjA1NTMsIDE0NDAsIDAsIDEyODg1MywgMTIwMDE2LCA3NDI4MywgMTEwMDUsIDAsIAorICAgIDY2NjU2LCA2NjA0NCwgMCwgMTk0Njk4LCAwLCAwLCA0MzM5MywgMTAwOTQsIDAsIDExNTI5LCAxMDg1NywgMTIwNjQzLCAKKyAgICA2NjQzNiwgNjU0NiwgOTMsIDgxMDIsIDAsIDY4NDA1LCAwLCAwLCA4MTcxLCAwLCAxMTkwOTcsIDEyNzA2NCwgOTE3NTQzLCAKKyAgICAzODMsIDcxNTQsIDQxNjU2LCA5MjYzNCwgOTQwNDAsIDAsIDUxODcsIDcxMjk2LCAxMjcyNzcsIDExMjg2LCA2ODYyMCwgCisgICAgNjQyMTcsIDAsIDUyMzIsIDAsIDQxMDA5LCAwLCA0MTAwNSwgMCwgMCwgOTgzODI3LCA4MjkyLCAxOTUwNzQsIDQ5ODAsIAorICAgIDg4NjAsIDczOTQ3LCAxMDAyOCwgNjUyOTEsIDcwNzYsIDEzMTgyLCAxOTQ3MDUsIDAsIDAsIDEwNjMxLCA2NjAzMSwgNzk3MiwgCisgICAgMCwgNzg3ODUsIDAsIDc5MDAsIDAsIDExMzA5LCAzODA2LCA0MTk4LCA0MjcyNSwgMCwgNjc2NTYsIDk5OTUsIDAsIDkyNTUyLCAKKyAgICAwLCAxMjkzMSwgMCwgNDI2ODQsIDc0Mjg1LCAyMDg4LCA2NDIxMywgNjQzNjYsIDY1MTU2LCA4ODE0LCA0MjIzOCwgNzQ3NzEsIAorICAgIDAsIDAsIDEyODM2LCAwLCAwLCA3NDM0MiwgODU5MywgMCwgMCwgNjg0NDUsIDEzMjU1LCAwLCAwLCA3NDY0LCAwLCA2NTg2NSwgCisgICAgMCwgMTk0NjUwLCAxMjcxNDQsIDAsIDkzNDIsIDEyMDQ2NCwgMCwgNjQ1MTYsIDAsIDc4NzkyLCAxMDEyOSwgNDEwMDcsIAorICAgIDc0Mzc1LCAwLCA0MDk5NSwgMTIyMDksIDQxMDEyLCAxMTkxMzYsIDAsIDAsIDY5NzI0LCA0MDk5MiwgOTIyNjQsIDEyNzE1MywgCisgICAgNjg2NTMsIDQzNTU4LCA1NTIyLCAwLCA2MSwgMCwgNzQxMDUsIDM2MzMsIDk4MzkwMCwgNjUxNjIsIDQxMjM0LCAxMjA4OSwgCisgICAgNzgyODEsIDk3NzEsIDk4MzkwNSwgMTMyNTEsIDEyODcwMSwgMCwgNjI2MiwgMjc4NCwgNDI3NDMsIDAsIDgxMjYsIDY2NDgzLCAKKyAgICAwLCAwLCA0NDEsIDQyNjIxLCAwLCAwLCA0MTAwMiwgNDA5OTksIDExOTYyMywgNDMyNjYsIDcxMDgsIDE5NDc3OSwgMTA4OTAsIAorICAgIDc0NDgxLCA2NTgzNCwgODMyNCwgMTE5MTAzLCA2NDQxNywgNzQ4MTcsIDEyNzQ2NSwgNjQ3MzcsIDAsIDk4MzY1OSwgODkzMCwgCisgICAgNjY2NzgsIDc0MjQ5LCAxMTkzLCAxMDA1NiwgMTgwMCwgMTMyNTMsIDEzMjUyLCA3ODI5LCAwLCAwLCA3NzQzLCAwLCAwLCAKKyAgICA3NzkwNCwgOTI2NDAsIDc3OTA1LCA5MDM0LCA2MDM5LCAwLCAxMDA3NSwgMCwgNDEwMTgsIDY1NjgzLCAxMDMzOCwgNjY0NjksIAorICAgIDAsIDAsIDAsIDQyODE1LCAwLCA0MTk2NiwgMCwgMTI3NDcxLCAwLCAxMTc5MiwgNDMwNjQsIDQxMDI1LCA5MTEsIDc1MzksIAorICAgIDAsIDAsIDEyMDMzOSwgNjUxNTksIDY0MzkwLCAwLCAwLCA1NTIwLCAxMTY2MiwgMCwgNjUzMzAsIDQyODEyLCAwLCAwLCAKKyAgICAxMjMyNiwgOTgzODU2LCAwLCA0MjgwOCwgMTI4MzM3LCA5MzQ4LCA2NDkwMSwgOTgzODYxLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA5MTc1ODQsIDQzNzAyLCA5ODM1NzYsIDU4NTcsIDY1MzQyLCA5MjcyNywgMTE5MTIwLCAxMjAwNzksIDg2NDQsIDAsIDAsIDAsIAorICAgIDc0Mjk2LCA0MTkwOSwgMCwgMTIwMzMyLCAyNzkxLCA2OTY2MywgMTg5MSwgNjk4MjQsIDAsIDQxOTA3LCA2NjY0NywgCisgICAgMTE4OTM5LCA4NzYxLCAxMjk0MiwgNTc0OCwgMCwgMTA3NzMsIDAsIDAsIDg3OTYsIDc4MTQ5LCA2NDEyLCAyMDYxLCA4NTIwLCAKKyAgICAxMzE0NiwgMTI3MTg1LCA2MzkzMSwgMCwgNjU5MDIsIDI4ODIsIDAsIDAsIDEyODQzLCA0NTIwLCAxMjAzNDUsIDkyNDU5LCAKKyAgICAwLCA5ODM2NjAsIDAsIDczODYwLCAwLCAwLCA2NDM0NSwgMCwgOTIwMSwgMTI4MzE0LCAxOTQ5NDAsIDAsIDAsIDQzNjc5LCAKKyAgICA5MTc1ODUsIDY1MTE3LCA5MjI3MCwgMCwgMTA0MjcsIDAsIDM4NDQsIDEyMDY3NSwgOTc1NSwgMTExMCwgNjYxMiwgMTIyMjIsIAorICAgIDAsIDEyODc4OSwgMCwgMCwgNzgzLCAxOTQ5MzUsIDAsIDAsIDk4MzA2NCwgMTk0NzIwLCA2NTA1NiwgMzYyMCwgNDExODAsIAorICAgIDY4Mzc4LCA0NTU2LCAwLCAwLCAxOTQ5MzMsIDc0MjUwLCAwLCA2NzY1NywgMTA1MTAsIDQzODIsIDY2NDgyLCAwLCAwLCAKKyAgICAxMjc1MjcsIDkxNzcsIDg5MDIsIDkzOTU4LCA5ODM5LCAwLCAxMjg5MSwgOTgzNzU1LCA5ODM2MzYsIDYzOTk5LCAyMDE2LCAKKyAgICA0MTkxNywgOTc4OCwgNjM5MjgsIDAsIDE4NjIsIDY1ODAwLCA5MTU1LCA2NjYyMywgOTc4NiwgNjUwODIsIDQxOTE5LCAKKyAgICA4NTc5LCA0MTkxNCwgNzk4MSwgMCwgNjYwMTcsIDQ1MDgsIDY0ODgzLCA5MjQ1NiwgOTI1MjIsIDEyNzgxNCwgMCwgNjQ1OTIsIAorICAgIDc0Mjc2LCAxMjAwODAsIDY3ODQsIDc4Nzg4LCA2ODE4MSwgMCwgMCwgMCwgMTI3NTM0LCAxMjE0NywgOTAyNCwgNjYzNzgsIAorICAgIDY2NDcyLCA5ODM5MjksIDY0Mjg5LCA2NTI4OSwgNzgxNTEsIDY2NjU4LCAxOTQ5MjksIDY0NTA5LCA3ODE1MiwgMCwgCisgICAgMTI2NTA1LCAxMTA1MSwgOTgzMjk2LCAwLCAxMTM1NSwgNjU4ODUsIDAsIDEyODMxMCwgNDEyMTQsIDAsIDEyMjk5LCAwLCAKKyAgICA3NTAwLCA0NTA2LCA3NzczLCAwLCAwLCA5OTYzLCA2ODY0OSwgMTI2NjA5LCA0MDQwLCAxMjA1NzAsIDYxNjcsIDAsIAorICAgIDYzOTIyLCA2NTk0LCA5ODM3NDAsIDAsIDAsIDM2MjQsIDQzMDM2LCAwLCA2Mzg3LCA2Mzk5MCwgMTk5NDcsIDYzOTg4LCAKKyAgICA0MTk1NSwgMCwgNjM5OTMsIDEwNDQwLCA5NjExLCA2NTYwNSwgNjgwMywgMCwgNzczOCwgNjM5ODYsIDExNDQ2LCA2Mzk4NCwgCisgICAgOTI2NDEsIDM0MzUsIDc4MTY0LCA0MzgxNCwgNDM4MTAsIDcwMjksIDY0MjU4LCA0MTI5MiwgMTE4ODk4LCAxMjc0OCwgCisgICAgNDI3NDIsIDk1MTcsIDExNTE4LCAwLCA3ODc5MCwgMCwgNjc5OTMsIDYzOTU2LCA0MjQ1OCwgNjM5NTQsIDYzOTUzLCAKKyAgICA2Mzk2MCwgOTU5MSwgNDUxNiwgMTAyMTcsIDY4MzcwLCAxMTQ2OSwgNjk2OTcsIDQyMzA2LCAyNzIzLCAxMTg5NDcsIDAsIDAsIAorICAgIDAsIDAsIDAsIDExMzk3LCAyODgwLCAwLCAwLCAyODcyLCAwLCAwLCAzNDk4LCA0Mzc4LCA5MTc1MzksIDQyNzAsIDAsIAorICAgIDY1NTUxLCA2ODIwNSwgNjYzMywgNDMzODcsIDAsIDUyMzAsIDAsIDAsIDAsIDAsIDAsIDgxNjEsIDM5MywgMTIwMTMsIDAsIAorICAgIDAsIDEyNjQ3OSwgNDE1LCA2Mzk2NCwgNjM5NjMsIDQyMzQ1LCA5MjMxMCwgNTE4MywgMTg3NywgNDI0OTgsIDAsIDI5MjcsIAorICAgIDAsIDYzOTYxLCA0NDcyLCAwLCAwLCA3ODE1OSwgNjk2OTksIDkxNzkzNiwgNDIzNDAsIDQ3NTYsIDEyODA3OCwgNzA4MSwgCisgICAgMTA3MzAsIDc2OTEsIDEwMzMxLCA2MzgzMCwgMTE5NjI1LCA0MjkyMiwgNDIxMDMsIDg2MjgsIDk4MTMsIDAsIDQyNDUzLCAKKyAgICAxNjA0LCA5NTY1LCAxMDUzOSwgNjk3MDEsIDY1NzY0LCA0MTQxNSwgNjU3NjcsIDAsIDg0NTcsIDQyMzAxLCAxMTM3MiwgCisgICAgNjQ4NzMsIDExOTkyLCAwLCAwLCA2Mzk4MCwgMTE4MDEsIDM2MjIsIDk4MzEyNCwgNjQzMzYsIDEyMDE3LCAxMDQ2MywgCisgICAgNjM5ODEsIDQ5NjcsIDY0MTg5LCAxOTY2LCA0MzYyOCwgMCwgOTgzMjkyLCAwLCAwLCA2Mzk3MSwgNDM0NywgNDQxNiwgCisgICAgNDIwOTgsIDExMDA5LCAxMDY5NCwgNjM5NzMsIDQwMiwgMCwgMTMxNDcsIDEyODY5MiwgNDIxMDAsIDY0NjQ2LCAxMzIyOCwgCisgICAgMCwgNDE4NzUsIDM1MTUsIDc0MjUyLCAxMTgwNSwgMCwgMTEzMDIsIDYyNTksIDQzMzk1LCAwLCAwLCAxOTQ2NzAsIDAsIAorICAgIDkyMzUxLCAwLCA3NDQyNSwgMTEyOTksIDE1NjEsIDAsIDkyMzU5LCA2NDk0MiwgOTgzNTU5LCAxOTQ3MzMsIDk4MzY4NiwgCisgICAgMTk0NzMyLCAwLCA3NDMwMSwgMCwgMTEyODAsIDAsIDY5Nzg0LCA3NDA2MCwgMCwgMCwgMTE5NjY0LCA1MTQ1LCAxMjQ4NiwgCisgICAgNjUwMTgsIDY2NTE2LCA1NDA5LCAxMjczNzksIDE5NDY2OSwgNzQwMiwgNTM5OSwgOTY4NSwgNzQwODksIDc5NTIsIDU0MDEsIAorICAgIDAsIDY2NjE2LCA2ODQyMSwgOTgzOTE5LCAwLCA1NDA1LCAxMjc4NzUsIDY0ODY2LCAwLCAxMTk1ODMsIDEyODM0NSwgCisgICAgNzg3ODQsIDc0MjQ4LCAxMTMzMCwgMTk0NzIzLCA2NDY5MCwgMzI1NCwgMCwgMCwgMTI4MjA3LCA0MjM5MCwgNDM2NzgsIAorICAgIDE5NDcyNSwgOTgzOTA5LCA2NTA3NywgMCwgNjM4OCwgMzM1NSwgOTUwOCwgOTg2NywgNTcyMywgMTE1MjAsIDU2MTEsIDAsIAorICAgIDMzNzcsIDAsIDAsIDAsIDAsIDc4MjI4LCAwLCA5ODM3NjIsIDQyNjkxLCA5MTc4ODYsIDEyNzE5OCwgNzQ3NjcsIDAsIAorICAgIDEyNzA3NSwgMTM3OSwgMjQ2LCAwLCA5ODM3NjEsIDM3ODgsIDk4MzEwNiwgMTEwNDEsIDkyNTQ5LCA2NjMwNCwgMCwgMCwgCisgICAgODkxNywgNDI0MDMsIDMwMSwgMCwgMCwgMCwgMCwgMCwgOTgzNjk3LCAxMDY1NiwgMCwgNjUyMTQsIDExOTI0MiwgNDI1NjcsIAorICAgIDkyMjE3LCAxMzE2MywgOTgzMjA0LCAxMjA4MzEsIDc0NTk3LCAzMTgyLCAwLCAwLCAwLCA2NTAzNCwgNjU4ODksIDQyMTY5LCAKKyAgICA0NzU1LCA3NDI0NCwgMTk0NjIxLCAxMTQ0MywgMCwgNjYzMTksIDc0NTk4LCA2MDgsIDYwMCwgMCwgMTIxOSwgMzkzNCwgCisgICAgNjQyMDYsIDExNDgzLCA3NDUxMCwgMCwgNzQ0ODUsIDQyNDQyLCA2NTQ3MCwgOTgzOTA3LCA2NDIwMiwgMTMxNjAsIDc3NTksIAorICAgIDQyNDgyLCA0ODUsIDEyODAwNiwgMCwgOTgyOCwgMCwgMCwgNDIyODAsIDAsIDkzNTEsIDc3NzgsIDY0Mzc5LCA3NDk2LCAKKyAgICA0MjQzMSwgNjkxNiwgMTIwOCwgMCwgMTE5NjMxLCAxMTAwMiwgNDI0NzAsIDAsIDExODk0NiwgMCwgMCwgNzQwNDEsIDAsIAorICAgIDcwMDQ1LCA0MzUzOSwgNTQxMSwgNDIxOTYsIDAsIDAsIDAsIDkxNTAsIDAsIDQyMzkzLCAxMzA4NiwgMTMxMCwgMTk0Njg3LCAKKyAgICA5MzM3LCAxMjA1MiwgMTA2NDMsIDU1MjcxLCA5ODMxNzksIDEyMTY2LCAyNTQ2LCAxOTQ2ODMsIDIxMywgMTE4ODUyLCAKKyAgICA2NTYxMSwgMCwgMCwgMTk0NzU2LCA3NDMxMCwgNjU1NCwgMCwgMTE5MTQsIDU0NTIsIDAsIDAsIDAsIDAsIDAsIDE5NDY4MSwgCisgICAgOTI1NjAsIDI3MTMsIDAsIDk2NTAsIDQzMzMwLCAwLCAxOTQ2NzUsIDE0MDYsIDAsIDAsIDkyNjU5LCAwLCA2ODIyMywgCisgICAgNDE0MywgMTk0Njc3LCAwLCA2NTc0OCwgNDE0MSwgOTY4MiwgNjUyODcsIDE1MDgsIDEyNzAxMywgODc3OSwgMTA1NjksIAorICAgIDg3MjUsIDEzMjk5LCA2NjYzOCwgNjU3NTAsIDQyMjYzLCA0MTQ1LCA2MzgwLCA2NTc1MSwgNjY2MTMsIDQzOTk0LCA2NTczOCwgCisgICAgNTUyNTAsIDkxODUsIDk1NTAsIDAsIDQzNDAzLCAwLCAwLCAwLCA2NTczNiwgNDE5NTEsIDY0ODE2LCA2NTc1NiwgOTgzMjA1LCAKKyAgICAxMjk1NSwgMTA1OTYsIDI4ODgsIDE5NDY0NSwgMCwgMCwgOTY1NywgOTAxOSwgMTk0NzY2LCAwLCAyODc4LCA1MzkwLCAwLCAKKyAgICAxOTQ5NjEsIDAsIDY4Njc5LCA0MzU1MiwgNzUwMSwgNjMyOCwgMCwgMTA0MjksIDEwMzY1LCAwLCAwLCA0MTk0NiwgNzUwMywgCisgICAgNTIzNSwgODAzLCA2ODM4MSwgMCwgMCwgODk4NiwgMTI2NTQyLCAxMDYzMiwgMTE5MzQsIDExNDUyLCAxMzMyLCAwLCAwLCAKKyAgICAxMjY2NDcsIDAsIDExODg4NywgMTc5MSwgNTE5MSwgOTI4OCwgNjQ4MjIsIDI4OTIsIDAsIDQzMzk0LCA1NTUsIDAsIDAsIAorICAgIDY2NjQ2LCAwLCAxMTkwMDIsIDEzMTUxLCA3NDUxMiwgNzI4OSwgNzQwNTUsIDY0MTYxLCA4ODU0LCA2NDE2MiwgNTg1OCwgCisgICAgNDE5MjcsIDEwNTgyLCAwLCAxNzg0LCAxMzYxLCAxOTUwNDcsIDAsIDc5MDUsIDAsIDY0ODY4LCAxMjg4MTMsIDEzMTU4LCAKKyAgICA5MjE2NiwgNzIxMSwgMCwgOTM3MSwgNzM5NzMsIDkxNzU1MywgNjgyOCwgMTYyNSwgOTIzMDIsIDAsIDEzNDIsIDY4NDQwLCAKKyAgICA2NDE3MSwgMTI2NzA0LCAxMDkwMywgOTgzNDk0LCAwLCAwLCAwLCAwLCA0NDgyLCA0MTYwNiwgMCwgMTI4NTY5LCA5ODMxMTIsIAorICAgIDAsIDY0MzgxLCAwLCAwLCAxOTUwOTAsIDQyMjQ1LCAxMjY0NjcsIDQxOTcyLCAwLCA0NDQsIDAsIDkxMjcsIDY2Njg3LCAKKyAgICA2NjYxOSwgMTI2NDg5LCA3ODAyNSwgMCwgMTEzNDksIDQwOTkxLCA5MTc1NzAsIDAsIDExOTU5OSwgMTIwODMwLCAwLCAKKyAgICAxMTk3LCAxMjgyODIsIDExNDksIDE5NDk3MCwgMCwgMCwgNDA5OTAsIDQzNzY1LCAwLCAzNDkyLCAwLCAxMjc5NDIsIDAsIDAsIAorICAgIDAsIDEyODM4LCA5ODM5NzgsIDE5OTQ4LCAwLCAzMDk5LCAwLCAwLCA0MTA4NywgMCwgMCwgMCwgMTE5MDU5LCAxMjAzNiwgCisgICAgNDEzMDksIDAsIDAsIDgxNTIsIDAsIDQxNTUwLCAxMjIyNywgOTgzNjEzLCAwLCAxMjgyOCwgMTI3NTExLCAwLCAwLCAKKyAgICAxMjA3MDgsIDAsIDAsIDEwMzg2LCAxMTk1NzQsIDAsIDAsIDkyNjgwLCA5ODM3ODksIDY4MTU0LCAwLCAxNzQzLCAwLCAwLCAKKyAgICA5MjIzOSwgNjUxODYsIDkxNzU3MSwgMCwgOTYwNiwgMCwgMCwgNjQ0MzksIDAsIDAsIDkyNjg2LCAwLCAwLCAxOTQ5NjcsIDAsIAorICAgIDAsIDMzOTUsIDkzNjIsIDEwODc4LCAwLCAwLCA3ODM2MiwgNjQ4MzAsIDAsIDEyNjU1NywgNDEwOTEsIDM0MjYsIDEzNDQsIAorICAgIDg4NzAsIDAsIDAsIDQ3MzUsIDEyNzAxNywgNjExOSwgMTI4MjIsIDQyNjk5LCAwLCA5ODM4MjQsIDc0ODE4LCAxNDIzLCAwLCAKKyAgICA0MjYzNywgNDEwODAsIDAsIDEyMDM5LCAxMDU1OSwgMCwgMTE4ODkyLCAwLCA5NDcyLCAwLCAxMTkyOSwgMCwgNzE3MCwgCisgICAgOTU5NiwgNjEzMCwgMTI4ODI2LCA0MzYyOSwgMTE1NzksIDc4NzEzLCAwLCAxOTQ3NDAsIDEyODY5MSwgOTIxODUsIDY2Njk5LCAKKyAgICA2NDQ0MCwgMTAwNCwgOTI1ODQsIDE5NDczNywgNDMyMzQsIDY2MDA4LCAxMjYyNywgMCwgNjg0MTQsIDAsIDQzNjE5LCAKKyAgICA0MzMwMywgMTEzMDAsIDQzMzA0LCA5Njg2LCA1ODkwLCAxMTc3NiwgNzU1OCwgMTI3MTU4LCA2NTYyNywgMCwgMTA3MTgsIAorICAgIDEzMTU0LCAzNDYxLCA5MTM5LCAwLCAwLCAwLCAwLCA2NTM2NSwgNzM4NzcsIDY1NjI4LCA3ODAxOSwgMTIwMzE5LCAwLCAKKyAgICA0MTcwOCwgMTI4NjAsIDI2NDEsIDEyMDY5LCAxMDgzOCwgNTQwMywgMTAzNTIsIDcwMDg1LCAxMDA2MSwgNDMyMzcsIDAsIAorICAgIDUxNDAsIDIwOSwgMTI4ODQ3LCA0MTcwNCwgNDEwNTYsIDQzMDc4LCAxMjgxMjUsIDExODgwOSwgMCwgMTA4OTksIDY1NDY5LCAKKyAgICA5MjM2MiwgMCwgMCwgMjQxMCwgOTkzLCAwLCAxMjA1ODksIDEyMDY4OSwgNzg2OTMsIDAsIDAsIDcyMzIsIDAsIDExOTI1MywgCisgICAgMCwgNzExMCwgNzQ0NjIsIDIwNjYsIDEwNDg5LCA0MjE2NiwgNDM0NjMsIDEwNjU5LCAzNjAwLCAwLCA0MjI0LCAxMzM2LCAKKyAgICA0MTUxOCwgMCwgMCwgMCwgMCwgNDExMzksIDY0ODIwLCA5MjUzOCwgMTI5NjYsIDQxMTM0LCAwLCAwLCAwLCAwLCAyNzIsIAorICAgIDQyNjMsIDg3OTMsIDAsIDAsIDQxNTAyLCAwLCA5ODMsIDEyNTQ5LCAwLCAwLCAxMTkwLCA0MTA5LCAxMzM1LCA4NDEsIAorICAgIDU4ODgsIDQxMzU4LCA2NDg2MywgOTU0NCwgNDM0ODEsIDAsIDE5NDgwNiwgNzAwMjcsIDIwOTksIDUxMjAsIDI0MDksIAorICAgIDc3OTksIDAsIDc0NDI0LCAwLCAwLCA0NzMxLCAwLCA2NjYyOSwgMCwgMCwgMTI1NSwgNDE0OSwgOTI0NywgMCwgOTkxMywgMCwgCisgICAgMCwgNjQ5MTQsIDkxNzc4NywgNjUxMDEsIDAsIDExNjk0LCA5MjQ3NSwgMTE2OTAsIDU4MzUsIDEyNzE2NCwgNjY2MjUsIAorICAgIDEwODQyLCA0MTM1NCwgNDIxMjMsIDQzMDk3LCAxMTY4OCwgNjY2MzQsIDEwOTQsIDE5NCwgNjQ2OTIsIDAsIDgxODAsIDAsIAorICAgIDAsIDk5NzIsIDczODY1LCA0NTE5LCA2MTE0LCAxMDg5OCwgNDMwNzIsIDAsIDAsIDkzOTYwLCA5ODMzMjIsIDEyNjU4MSwgCisgICAgMTA2OTUsIDAsIDc1NDAsIDAsIDg4MSwgNzg1NywgNjA2NywgNjUxNjQsIDAsIDAsIDAsIDEzMzExLCA2ODQwMywgNDE4NTcsIAorICAgIDY0MzIxLCA4MzU5LCAwLCAxMjY4OSwgMCwgMTk0NTk0LCAwLCA5ODMzMTIsIDk4Mzg4MSwgNjgxODMsIDAsIDk4MzMxNCwgCisgICAgMTI4NywgNTQzNiwgMCwgOTgzMzE3LCA3NDE0MiwgOTIzMjgsIDc0MTUyLCAxMTkwNzgsIDYwNTEsIDEwNDk3LCA2OTY2OCwgCisgICAgODk4NSwgMTIxMDksIDk4MzMyMywgMCwgMTI3MjQyLCAwLCAwLCAzNjUyLCAxMDUzNywgMCwgMTI3NiwgMTIwNDQwLCA2NTQ5LCAKKyAgICAyNzksIDczNzQ1LCAwLCAwLCAwLCAxNDg5LCAwLCAwLCAwLCAzODk5LCAxMDA3LCA0MjEyNCwgOTgzNTU3LCA0MjEyMiwgCisgICAgOTIzMzcsIDkyMzY3LCAwLCAxMTk4NSwgMTM0NSwgNzg2MDAsIDAsIDAsIDg5NTYsIDQzMDgzLCA5NDA1NywgNDIxMzgsIAorICAgIDc4NjEwLCAwLCAxMjE1MSwgNzg2MDgsIDc4NjA0LCA3ODYwNSwgNjI4NSwgNzg2MDMsIDc4NjEyLCA3ODYxMywgNjU5NDIsIAorICAgIDQ5MiwgODY4NSwgMCwgOTgzNzU5LCAwLCA3ODYyMiwgNDM3MTIsIDI1ODIsIDExNDcwLCA2NDUzOCwgNzQ0NCwgNzg2MTUsIAorICAgIDc4NjE2LCAyMjk3LCAwLCA3MzgzNywgMTE5ODIzLCAyNTI3LCAxMTk4MjQsIDE5NywgMjc5OSwgOTI1OTQsIDQxOTQ0LCAKKyAgICAxMjAyNzYsIDk5MzMsIDAsIDY2NTE1LCA3NjcsIDU1MjQsIDcwMjgsIDAsIDAsIDExOTgyNywgMTE5ODE3LCAxMTk4MjgsIAorICAgIDc4NjMzLCAxMDg5NiwgMCwgMTc5OSwgMTIwNDk3LCA2OTcxLCA3NDMzNiwgMTI4MzQyLCAwLCA2NTM0MCwgMTE4OTc5LCAKKyAgICA0MTU1MSwgMjQzNCwgOTQwMTgsIDAsIDEyMDU3OSwgMCwgNDYzMSwgMCwgMCwgNjQwNywgMCwgNjMzOCwgNDMyMTQsIDAsIAorICAgIDc1NzAsIDAsIDMxOTIsIDAsIDg0MTQsIDAsIDkzOTgzLCAwLCAwLCAwLCA5MTY0LCA2NjYxMiwgOTM5NTksIDMxNzEsIAorICAgIDY2MjMsIDQ5NjEsIDY4Mzk2LCA4ODYsIDU1MjE2LCA4NjU0LCA3ODgzMiwgOTk5MywgNzQzOTAsIDY0NjAzLCA3MDA2NiwgCisgICAgNjkyNDEsIDk1OTksIDc4NjI5LCA0MzA4NCwgNzg2MjcsIDc4NjI4LCA3ODYyNSwgMjM5OSwgNjk2OTMsIDg5OTQsIDEwOTQ0LCAKKyAgICA0MTIwOCwgOTgzNzEzLCA0MTE2OCwgODE3OCwgMCwgMzM2NywgOTIzMzQsIDQyNTEwLCA3ODY0MSwgNzg2MzYsIDY4MDQsIAorICAgIDc4NjM0LCAxOTQ3LCAwLCAwLCA5MjY4MSwgNDI3NTksIDExMDY4LCAxNzA1LCA5MzMxLCAwLCA3NDc5OCwgOTE4MSwgCisgICAgNjUzNTksIDAsIDgwMTcsIDExOTgzMSwgNjUwOTYsIDY2NzIwLCAwLCA0MzQ3NSwgMCwgNDkwOSwgMTIxMjYsIDEyODY3MywgCisgICAgMTIwNjk2LCA0OTA0LCA5ODMzMzMsIDY5NjUwLCAxMzY1LCA5MjUzLCA0Mjc1NywgNDM0MzYsIDc0NjIsIDAsIDAsIDAsIDAsIAorICAgIDExOTU4NywgNjQ0MTUsIDAsIDAsIDUzOTgsIDAsIDEyNzM4NiwgOTM5NTMsIDAsIDAsIDExOTAxNSwgMCwgMCwgOTQ3NiwgMCwgCisgICAgOTgzNzc3LCAxMjc2MywgMTI2NjAzLCAzNjI5LCAwLCAxMzAwNSwgMCwgMzYyOCwgMCwgMCwgOTI1MDIsIDM0NjksIDQyMTA3LCAKKyAgICA0MjExNiwgOTE3NTc4LCA2NDgwOSwgMjkyOCwgNDkwNSwgOTg1MywgODUxLCA5MDQwLCAwLCA2NDY2NSwgNDMwODYsIDkxMTQsIAorICAgIDAsIDQyNTgzLCA5MzE1LCA0ODIyLCA0OTA2LCAzODUyLCAyODQ3LCAxMTk4MjEsIDMyMzYsIDExMzE3LCAxMjUxLCA3Nzc3LCAKKyAgICA0MTg1MiwgMTE0MTAsIDEwOTY0LCAwLCA0MzIyMiwgMTI2NDYsIDEyMDI2OSwgMTAyNTksIDk4NjUsIDY1ODIxLCAwLCAKKyAgICA2MDE4LCA5MjI5MCwgMCwgMTIyNzYsIDAsIDY4MzcyLCAwLCA5MjI1OSwgMTE5MjQ0LCAwLCA5ODMyMzAsIDEwNDY3LCAwLCAKKyAgICAyNDQzLCAxMDkxOCwgNzgyMTcsIDExOTgyNSwgMTAwMSwgOTI0MSwgMTkyNywgMCwgMCwgNzM5ODcsIDEyNzg4NSwgMCwgMCwgCiAgICAgMTE4ODI4LCAxMjAyNzEsIDY1Njc4LCAxMjg2NywgMCwgODI2MCwgNzc5NDUsIDc1MTksIDExNTA1LCAxMjI3NCwgODkwNCwgCiAgICAgNTE4LCA2NTg1NywgMCwgMTI4Njc0LCAxMzIwNCwgNDM4NywgODU3LCAwLCA2NTM2OSwgMCwgOTIzMzYsIDQzMTI1LCAKICAgICAxMjA1OTIsIDAsIDAsIDAsIDAsIDUxMzYsIDE5NjgsIDk4MzA0MSwgMTI2NjI3LCAxMzM3LCA2NDk2NywgMTYyOSwgMCwgCkBAIC0xODc3Nyw0NCArMTg3OTYsNDQgQEAKICAgICA3ODY5OCwgNzg2OTcsIDc4Njk2LCA3ODY5NSwgODcxMCwgNDI0OTUsIDExODk1NiwgMCwgNDA1MSwgMTA0NjAsIDQzMzY0LCAKICAgICAxMTg5MTcsIDEzNTYsIDEyMTYxLCA0MjcxMywgMTI4ODU3LCAxMjcyNjgsIDE2MTksIDk3MDMsIDQzMTUyLCA0MjQ4OSwgCiAgICAgNDIxMTIsIDEyNzk3OCwgMTg3NSwgMTA4MDgsIDQyMTA5LCAxMjAyODQsIDQxODYwLCA2NDg2MiwgMTMzMDUsIDY0OTA3LCAKLSAgICA1Mjg5LCAxMzE0NCwgMTI4NjU4LCAwLCA1NTc1LCA5Njc1LCAwLCA1OTQwLCAyMjYsIDI2NDksIDYzMzYsIDk4MzI2OSwgCisgICAgNTI4OSwgMTMxNDQsIDEyODY1OCwgMCwgNTU3NSwgOTY3NSwgMCwgNTk0MCwgMjI2LCAyNjQ5LCA2MzM2LCA5ODMyNzcsIAogICAgIDExOTgzMCwgNDMyMzYsIDMzODIsIDQyNDQ5LCA2NDk4LCAxNjU4LCAxMTkzNiwgNzgyMzIsIDAsIDExMjY5LCAxMDE1MSwgCiAgICAgNzM3NTksIDQzMTAwLCA2OTg4OCwgNjU1MDgsIDAsIDAsIDAsIDg5MzUsIDkxNzk4NSwgMCwgMCwgMCwgNjE2LCA3NDc1MywgCiAgICAgNjUxNzgsIDQ2ODQsIDc4NzAxLCAxMTk2NTMsIDAsIDEyNjU1MSwgMCwgNjA0OCwgNzQ0NjAsIDQyMTEwLCA3Mzk2NSwgCiAgICAgMTA4NzAsIDg1NTcsIDExMDU0LCA2ODY2NCwgMTE5MDQ5LCA5NjgxLCA0NDc1LCAwLCA0MTE0MiwgMjEwMCwgMCwgMTIwNzMxLCAKLSAgICA2MDM1LCAwLCA3NjUxLCAxMDI5NiwgNjQ0NDMsIDAsIDk4MzI4NywgOTE3OTg3LCAwLCAxMTg5NjYsIDc0MTQ0LCA0MDk5NywgCisgICAgNjAzNSwgMCwgNzY1MSwgMTAyOTYsIDY0NDQzLCAwLCA5ODMyOTUsIDkxNzk4NywgMCwgMTE4OTY2LCA3NDE0NCwgNDA5OTcsIAogICAgIDAsIDEwMzkyLCAxMDMyOCwgNDA5OTgsIDQzNDYyLCA3NDQ4OCwgMCwgOTgwMCwgODk3OSwgMCwgMTMzMDcsIDQxMDAwLCAwLCAKICAgICAxMTkyMzksIDY0ODcsIDMzODYsIDAsIDEwMzQ0LCAwLCA2NTI5OSwgNTM5NCwgNDMyNDYsIDc4MjQzLCAxMDIyMCwgNjY1MDUsIAogICAgIDQxMjAwLCAxMjg1ODMsIDQ0MjUsIDAsIDAsIDAsIDQzMDc0LCA3Mzc5OSwgOTgzMjAwLCA3ODE0NywgMCwgMTIxNzMsIAogICAgIDc4NTQ1LCAwLCAxMjcwMTEsIDY1MzM4LCAwLCAwLCAxMTk1ODIsIDQ0NzQsIDAsIDQzMDkzLCAxMjg2NDQsIDE1ODcsIDAsIAotICAgIDEyNzM3MiwgNjQ0NzUsIDEyODA5OCwgMTM2OSwgOTgzNjYzLCA5OTU5LCA3OTI3LCAwLCA0NTYwLCAwLCAwLCA5MjI3NywgMCwgCi0gICAgNjQ5NDgsIDQ0MzAsIDc0MzQ3LCA0MjYwMSwgNDUxNCwgNjY0MzQsIDkzOTU1LCA4MTk0LCA2NTQ2MiwgMTA2MjYsIDEwOTY1LCAKLSAgICAwLCA4ODkzLCA5ODMyOTMsIDEyNTQyLCAwLCA2NTM0MSwgMCwgNjU4MjksIDc5MjUsIDExOTgyMiwgMTA0NzUsIDAsIDAsIAotICAgIDEzNTIsIDExMDY5LCA3NzA3LCAxMjc1NjAsIDEyNjQ4NiwgNjUyNzksIDEyNzEwMiwgNjgyMDcsIDEyNzEwMCwgNzA5OSwgCi0gICAgNjA0MCwgMTI3MDk3LCAxMDA3MSwgMCwgOTMzNiwgNDM3NTAsIDAsIDg4OTksIDc3OTgsIDY0NDc0LCA2NDI1OSwgNjk4NzMsIAotICAgIDY1MTg4LCA3ODIwLCA0MzAxOCwgMTI3MDgyLCAwLCA3NzQ2LCAxNDkyLCA3ODU1MSwgMTA4ODQsIDc3OTgyLCAwLCA1MTI3LCAKLSAgICAxMTI4NSwgNDI1MDEsIDU0OTUsIDQyNzMsIDQzMDk1LCA0MTQyNiwgMTA4NDksIDU3MzAsIDI5OTksIDYzNDIsIDY4NjM2LCAKLSAgICA3NDMwNCwgMzcxLCA2NDM3MywgNjAyMywgMTY5LCA1NDk3LCAxMTcwOCwgMCwgMCwgNjMyMywgMTk0Njg0LCA4MjI0LCAwLCAKLSAgICA4OTM4LCA2MDQzLCAxMjczOCwgMCwgOTgzMDc2LCA1MzIxLCAwLCAxOTQ3OTgsIDAsIDI1ODksIDc0MzMyLCAxNjg5LCAKLSAgICA3ODAyLCA0NjgzLCA3NDMxOCwgNDI3MDQsIDEyMDI5NiwgMTE5MDUsIDAsIDAsIDEyODUxNiwgMTI4MTYzLCA3NDUxMywgCi0gICAgNjA0OSwgMCwgNDAyNywgODM0LCAxMTg5NjIsIDE4MDMsIDAsIDE1MDMsIDAsIDAsIDcxMzEyLCA1NzMxLCAxMzgxLCAyMzg3LCAKLSAgICAwLCAwLCA4Mjg5LCA2NDUyNSwgNjU4MTcsIDI4ODEsIDQzMTQyLCAwLCA5NjAxLCAyODc5LCA5NjY4LCA5NzY2LCAwLCAKLSAgICA1NzI5LCA5MTc4MzMsIDc0NDEwLCA2MDM2LCA2NDg4MSwgNDAyNiwgOTM2MSwgMTI3MDkxLCAyODg3LCAwLCAzNTI2LCAKLSAgICA2Mjk4LCAwLCA3Nzg5NywgMTIwMDk1LCA3ODUxOSwgMCwgODU3MiwgNjAyMSwgNzc4OTYsIDEyODI4OCwgNzc4OTUsIAotICAgIDQzMTU1LCAwLCAxMTk4NDksIDMxNDYsIDEwOTU5LCA5NDgzLCAwLCA3Nzg5MywgMTA5ODEsIDE2NiwgOTE3ODQxLCA4NjM1LCAKLSAgICA5ODM2MDYsIDEwNjIzLCA0MDgsIDExOTA1OCwgMTI3NTA3LCAxMzI5OCwgMCwgNzQyNiwgNDE2NDEsIDEyNzE3LCAwLCAKLSAgICA3NjA3LCAxMDYzOSwgNDMzOTYsIDAsIDAsIDQxNjQzLCA3NDEzNCwgOTgzMDU0LCA4NzEzLCA0MTY0MCwgMTAyMjEsIAotICAgIDQxNjQ1LCA2NjcxMiwgNjY0NSwgNjQ2LCA2NjcyNiwgNjY3MTEsIDQyMTI5LCA5Mzk5NCwgNzc5MDEsIDM0NzIsIDg2OTcsIAotICAgIDAsIDAsIDk4MzgwNiwgMCwgMCwgMCwgNTgwOSwgMTk1MCwgMTE5MzU2LCA5MjQzMiwgNzQ1NzIsIDAsIDQyMTM2LCAwLCAwLCAKLSAgICAwLCAwLCAzMjQ3LCAxMTk4NTQsIDY1MDE3LCA5ODM5NDQsIDY4NDI4LCA2NjY2OCwgMCwgMCwgMTA5ODMsIDAsIDAsIDAsIAotICAgIDQxNTY3LCAwLCAwLCAwLCAxOTQ2MjQsIDExOTg1MywgMCwgMCwgODI4NSwgMCwgNDUwOSwgMCwgNjY0NzEsIDEyMjE2LCAwLCAKLSAgICA0MDk4OCwgOTI1OTIsIDc0ODA5LCA0MTcyNywgMCwgNDI4NDgsIDIzOTYsIDkxNzc2NiwgMCwgNzQwMTgsIDkxNzUzOCwgCisgICAgMTI3MzcyLCA2NDQ3NSwgMTI4MDk4LCAxMzY5LCA5ODM2NzIsIDk5NTksIDc5MjcsIDAsIDQ1NjAsIDAsIDAsIDkyMjc3LCAKKyAgICA5ODM2MjEsIDY0OTQ4LCA0NDMwLCA3NDM0NywgNDI2MDEsIDQ1MTQsIDY2NDM0LCA5Mzk1NSwgODE5NCwgNjU0NjIsIAorICAgIDEwNjI2LCAxMDk2NSwgMCwgODg5MywgOTgzMzAxLCAxMjU0MiwgMCwgNjUzNDEsIDAsIDY1ODI5LCA3OTI1LCAxMTk4MjIsIAorICAgIDEwNDc1LCAwLCAwLCAxMzUyLCAxMTA2OSwgNzcwNywgMTI3NTYwLCAxMjY0ODYsIDY1Mjc5LCAxMjcxMDIsIDY4MjA3LCAKKyAgICAxMjcxMDAsIDcwOTksIDYwNDAsIDEyNzA5NywgMTAwNzEsIDAsIDkzMzYsIDQzNzUwLCAwLCA4ODk5LCA3Nzk4LCA2NDQ3NCwgCisgICAgNjQyNTksIDY5ODczLCA2NTE4OCwgNzgyMCwgNDMwMTgsIDEyNzA4MiwgMCwgNzc0NiwgMTQ5MiwgNzg1NTEsIDEwODg0LCAKKyAgICA3Nzk4MiwgMCwgNTEyNywgMTEyODUsIDQyNTAxLCA1NDk1LCA0MjczLCA0MzA5NSwgNDE0MjYsIDEwODQ5LCA1NzMwLCAKKyAgICAyOTk5LCA2MzQyLCA2ODYzNiwgNzQzMDQsIDM3MSwgNjQzNzMsIDYwMjMsIDE2OSwgNTQ5NywgMTE3MDgsIDAsIDAsIDYzMjMsIAorICAgIDE5NDY4NCwgODIyNCwgMCwgODkzOCwgNjA0MywgMTI3MzgsIDAsIDk4MzA3NiwgNTMyMSwgMCwgMTk0Nzk4LCAwLCAyNTg5LCAKKyAgICA3NDMzMiwgMTY4OSwgNzgwMiwgNDY4MywgNzQzMTgsIDQyNzA0LCAxMjAyOTYsIDExOTA1LCAwLCAwLCAxMjg1MTYsIAorICAgIDEyODE2MywgNzQ1MTMsIDYwNDksIDAsIDQwMjcsIDgzNCwgMTE4OTYyLCAxODAzLCAwLCAxNTAzLCAwLCAwLCA3MTMxMiwgCisgICAgNTczMSwgMTM4MSwgMjM4NywgMCwgMCwgODI4OSwgNjQ1MjUsIDY1ODE3LCAyODgxLCA0MzE0MiwgMCwgOTYwMSwgMjg3OSwgCisgICAgOTY2OCwgOTc2NiwgMCwgNTcyOSwgOTE3ODMzLCA3NDQxMCwgNjAzNiwgNjQ4ODEsIDQwMjYsIDkzNjEsIDEyNzA5MSwgCisgICAgMjg4NywgMCwgMzUyNiwgNjI5OCwgMCwgNzc4OTcsIDEyMDA5NSwgNzg1MTksIDAsIDg1NzIsIDYwMjEsIDc3ODk2LCAKKyAgICAxMjgyODgsIDc3ODk1LCA0MzE1NSwgMCwgMTE5ODQ5LCAzMTQ2LCAxMDk1OSwgOTQ4MywgMCwgNzc4OTMsIDEwOTgxLCAxNjYsIAorICAgIDkxNzg0MSwgODYzNSwgOTgzNjA2LCAxMDYyMywgNDA4LCAxMTkwNTgsIDEyNzUwNywgMTMyOTgsIDAsIDc0MjYsIDQxNjQxLCAKKyAgICAxMjcxNywgMCwgNzYwNywgMTA2MzksIDQzMzk2LCAwLCAwLCA0MTY0MywgNzQxMzQsIDk4MzA1NCwgODcxMywgNDE2NDAsIAorICAgIDEwMjIxLCA0MTY0NSwgNjY3MTIsIDY2NDUsIDY0NiwgNjY3MjYsIDY2NzExLCA0MjEyOSwgOTM5OTQsIDc3OTAxLCAzNDcyLCAKKyAgICA4Njk3LCAwLCAwLCA5ODM4MTUsIDAsIDAsIDAsIDU4MDksIDE5NTAsIDExOTM1NiwgOTI0MzIsIDc0NTcyLCAwLCA0MjEzNiwgCisgICAgMCwgMCwgMCwgMCwgMzI0NywgMTE5ODU0LCA2NTAxNywgOTgzOTUzLCA2ODQyOCwgNjY2NjgsIDAsIDAsIDEwOTgzLCAwLCAwLCAKKyAgICAwLCA0MTU2NywgMCwgMCwgMCwgMTk0NjI0LCAxMTk4NTMsIDAsIDAsIDgyODUsIDAsIDQ1MDksIDAsIDY2NDcxLCAxMjIxNiwgCisgICAgMCwgNDA5ODgsIDkyNTkyLCA3NDgwOSwgNDE3MjcsIDAsIDQyODQ4LCAyMzk2LCA5MTc3NjYsIDAsIDc0MDE4LCA5MTc1MzgsIAogICAgIDY0OTQwLCA3MDI3LCAzODg2LCAwLCA0MjQ1NywgMTE5MDA4LCAwLCA5OTYsIDY4MTIzLCA5NDA1OCwgNDI0OSwgMCwgCiAgICAgOTE3NTk0LCAxMTcwNywgODIyMiwgMCwgNzkzOSwgOTI0NTQsIDkyNDYwLCAxMjc4MDEsIDkxNzU5MiwgMTI4MzU5LCA4NTM0LCAKLSAgICAxMjcxNTQsIDQwOTgzLCAwLCA5ODMyMzQsIDAsIDcyMDEsIDEyNTYxLCAwLCA0MjM3MSwgMTI1NTgsIDE1NDAsIDkxNzU0OSwgCisgICAgMTI3MTU0LCA0MDk4MywgMCwgOTgzMjQwLCAwLCA3MjAxLCAxMjU2MSwgMCwgNDIzNzEsIDEyNTU4LCAxNTQwLCA5MTc1NDksIAogICAgIDEwMDUyLCA0MDk4MiwgMCwgMCwgMTQ4OCwgMCwgMCwgMCwgOTE3NTU5LCAwLCAwLCAxNTYzLCAxMjgwMzQsIDk2MTksIAotICAgIDk4MzkzMSwgMCwgMCwgMTI3ODcyLCA3MTM2MywgNTgwMywgNzc5NywgNjA3MCwgMTAwMDYsIDAsIDI5MjIsIDYwODIsIDAsIAotICAgIDY1MDA5LCA5ODM5MzMsIDEyNTY3LCAxMjg3MDMsIDAsIDQxNDEyLCAwLCAwLCAzNjA3LCA5MjAwLCAxMDA0NiwgOTYxMiwgCisgICAgOTgzOTQwLCAwLCAwLCAxMjc4NzIsIDcxMzYzLCA1ODAzLCA3Nzk3LCA2MDcwLCAxMDAwNiwgMCwgMjkyMiwgNjA4MiwgMCwgCisgICAgNjUwMDksIDk4Mzk0MiwgMTI1NjcsIDEyODcwMywgMCwgNDE0MTIsIDAsIDAsIDM2MDcsIDkyMDAsIDEwMDQ2LCA5NjEyLCAKICAgICA0MjE1MywgODIxOCwgOTQ4NSwgMCwgMjAzMiwgNzgzNTQsIDAsIDAsIDAsIDAsIDAsIDQzMDg1LCA2MDU3LCA1MDgsIAogICAgIDkzOTY4LCAxMjgwMTUsIDY3OTY4LCAwLCA5MjQwNSwgMCwgMCwgNjM4LCA2MDgzLCAxMTkwNzIsIDAsIDAsIDIzMDUsIAogICAgIDc4MzQ4LCA2ODA5NiwgMCwgNjA1NiwgNjY1OSwgNjc5NjksIDAsIDYwODUsIDAsIDAsIDM5MTUsIDQxNjM0LCAwLCA0MTYzOSwgCkBAIC0xODgyMiwxNSArMTg4NDEsMTUgQEAKICAgICAxMjMyOCwgNTAxLCA5Mzk4NSwgMTA2MDEsIDAsIDU4MywgMCwgNDE5NzcsIDAsIDY2MDA0LCAxMTkzNTAsIDY1MDUsIAogICAgIDc0MDEwLCAwLCAxMzA2NCwgNTUyNjcsIDEyMDgxMCwgNjUwMCwgNTUyNiwgNjUwNDksIDAsIDczNzY0LCAwLCA5MjM3NiwgCiAgICAgMTI3NDUsIDk2NzgsIDAsIDEyMDU4NywgOTg2OSwgMTI4ODE1LCAxNzcxLCAwLCA4OTM2LCAwLCAwLCA0MjA4LCA3ODM0MSwgCi0gICAgNzg1NjcsIDc4MzQyLCAwLCA5ODM0NDgsIDc0MTAxLCAwLCAxMTc2MiwgMCwgOTI0MjIsIDc3OTk3LCA2ODAxMCwgNjY0NzUsIAorICAgIDc4NTY3LCA3ODM0MiwgMCwgOTgzNDU2LCA3NDEwMSwgMCwgMTE3NjIsIDAsIDkyNDIyLCA3Nzk5NywgNjgwMTAsIDY2NDc1LCAKICAgICAwLCA1MDI3LCA3ODE3MiwgMTI4ODc4LCAwLCA1MDY5LCA3Mzg2MiwgNTAyOCwgOTg5NywgMCwgNzM3MzksIDUwMjYsIAotICAgIDk4MzI0NywgNjg2MzksIDYzMzEsIDEwMDc5LCA4OTMxLCAwLCAxNDE1LCA4ODY2LCA0MTkwMSwgNzQ3OTAsIDc4MTM4LCAKKyAgICA5ODMyNTMsIDY4NjM5LCA2MzMxLCAxMDA3OSwgODkzMSwgMCwgMTQxNSwgODg2NiwgNDE5MDEsIDc0NzkwLCA3ODEzOCwgCiAgICAgMTE5MzYxLCA5ODM1NjQsIDQzMTA2LCA1MDI5LCA2NTMwOSwgMTU4MCwgMzU5OCwgNjg0MjQsIDQxMDcwLCA3NzkwMywgMCwgCi0gICAgMzQ0MCwgNzgyMTUsIDE1NjIsIDEyODY1NiwgMTI3MTc1LCAxMTkzNTgsIDE3MTYsIDk4MzY3MCwgMTA2MDAsIDkxNzg2NywgCisgICAgMzQ0MCwgNzgyMTUsIDE1NjIsIDEyODY1NiwgMTI3MTc1LCAxMTkzNTgsIDE3MTYsIDk4MzY3OSwgMTA2MDAsIDkxNzg2NywgCiAgICAgNjIwLCA0MTAwMSwgNjAyOCwgMCwgNDI4OTIsIDAsIDc0ODIyLCA1MDI0LCAxMjA4MjksIDQxMDAzLCAwLCA1MDI1LCAKLSAgICA2OTg5MiwgOTgzMjA3LCAwLCAxMTg4ODUsIDAsIDY1NTU3LCAwLCA3NDU0MSwgOTgzNTg3LCAxMTU5OSwgMTI4MjA5LCAKKyAgICA2OTg5MiwgOTgzMjA5LCAwLCAxMTg4ODUsIDAsIDY1NTU3LCAwLCA3NDU0MSwgOTgzNTg3LCAxMTU5OSwgMTI4MjA5LCAKICAgICAxMTYwMiwgNjI0MywgMTE1NzQsIDExNTgxLCAxMTU5NywgMTE1OTgsIDYyNTMsIDYxMDUsIDExNTg0LCA3NDE5NSwgMTE1NjksIAotICAgIDY1Mjc1LCA4OTA2LCAxMjcwOTYsIDU3NTUsIDI2MzYsIDAsIDEwODE1LCAxMTYxOSwgMjMwMSwgNDE1NDAsIDc4MTUsIAorICAgIDY1Mjc1LCA4OTA2LCAxMjcwOTYsIDU3NTUsIDI2MzYsIDk4MzIyNywgMTA4MTUsIDExNjE5LCAyMzAxLCA0MTU0MCwgNzgxNSwgCiAgICAgMTE2MTYsIDY5NzksIDEyMDgwLCA3NzIxLCAxMTYwNCwgNzg2OSwgMTU5MiwgMCwgNDIxNTIsIDc4NDk4LCA0MTA0OCwgCiAgICAgOTE3NzYzLCA4MjksIDAsIDkyNDA2LCAxOTk1MCwgMCwgMTI2NDgyLCA2NjE2LCAwLCAxMTg4NzUsIDEwOTUzLCAzOTEsIDAsIAogICAgIDY5Nzg1LCA0ODIsIDQyMjk2LCAxMTU4OCwgMCwgNDM2MDYsIDAsIDY4Mzk3LCA2NjM3MCwgNzQ1MDYsIDQyMzM1LCAKQEAgLTE4ODM5LDkgKzE4ODU4LDkgQEAKICAgICAxMTMzNywgNzgyMDksIDkxNzgyMCwgNjM5ODksIDM5NTgsIDEyMTMyLCAxODQ5LCAwLCA5OTIxLCA0MjQ1MSwgNDI1MywgCiAgICAgNDExNDcsIDQyMDY0LCAxMTk1OSwgNDI0MDQsIDQxMTYwLCAwLCAzNjE4LCA3ODMzOCwgMCwgNDMzMDAsIDUxNTYsIDkyNjI5LCAKICAgICAwLCA5MjksIDY4MjcsIDQyMDM1LCA0MjQzNywgMTU1NSwgMCwgODY5MSwgNjY0MzUsIDIyMTUsIDQxNjYyLCA5NDAxMCwgMCwgCi0gICAgMCwgMCwgOTM5NTIsIDQ1NzgsIDY0NTEzLCA0MTY2NCwgOTgzNzI1LCA0MjU3OCwgMTI4Nzk0LCA0MTY2MSwgNzg3MTUsIAorICAgIDAsIDAsIDkzOTUyLCA0NTc4LCA2NDUxMywgNDE2NjQsIDk4MzczNCwgNDI1NzgsIDEyODc5NCwgNDE2NjEsIDc4NzE1LCAKICAgICA0MzI2NywgOTM1NiwgMCwgMCwgMCwgMTI4NiwgMTAxNjYsIDAsIDAsIDY0NzA3LCA5ODMxMjcsIDQyNDc2LCA3NzMwLCAKLSAgICA5ODM4NTAsIDEyODUyMiwgNDI0ODMsIDAsIDAsIDQyMzI0LCA0MjI5MSwgMTAwMjAsIDQzMzU5LCAwLCA2NjQxLCA1MjUsIAorICAgIDk4Mzg1OSwgMTI4NTIyLCA0MjQ4MywgMCwgMCwgNDIzMjQsIDQyMjkxLCAxMDAyMCwgNDMzNTksIDAsIDY2NDEsIDUyNSwgCiAgICAgNDE2MjcsIDkxNzkyMywgODc2MywgMTI4MzA0LCA0MTYyOCwgNTMzLCAxMTkzMSwgNjUyMjUsIDgzMjEsIDQyNTA0LCAKICAgICA0MjU4MSwgMCwgNjkxNSwgNDIzMTAsIDQzNzcsIDg1NTksIDAsIDc0MzYwLCAwLCAxMzE5MywgNjQzNTAsIDExNjY2LCAKICAgICA4Njc5LCA0MTkyNCwgMTU3NiwgNzczNSwgOTIzOTgsIDAsIDczODQwLCA5ODMwOTIsIDExMzc0LCA3ODA0MywgMTA4ODksIApAQCAtMTg4NTksMjQgKzE4ODc4LDI0IEBACiAgICAgODI0NCwgMzYyLCA5MjQzOSwgMCwgODAzNywgNDM3NzcsIDExNTM1LCAwLCA3NDg0NSwgNTE4NSwgNzE2NSwgNTUyMSwgCiAgICAgMTAzMzQsIDIwOTMsIDcxMzI5LCAxMDMwMiwgMTI4MTEyLCAxMDEwNCwgMTAyNywgNTE4MSwgMCwgMCwgMTA1MjMsIDE0NDYsIAogICAgIDQyMzIwLCA0MTY0NiwgOTkxLCA1MTg5LCA0MjQ3MiwgNDE2NDcsIDEyMDEwNSwgMTcyMiwgNTU4MSwgNDI4OTgsIDM0MDUsIAotICAgIDAsIDE5NDY0NCwgNTUyMywgMCwgNDI2MjAsIDkyNDQ3LCA5ODM4MTAsIDk1NDksIDAsIDEwNTQ5LCA1NTI4MiwgOTY2MSwgCi0gICAgNDM2ODIsIDAsIDc3OTEwLCAxMjAwMjYsIDc4NzA4LCAwLCA3NzkxMSwgMCwgNDE5OTEsIDk4Mzg4NCwgMCwgNzYzMCwgCisgICAgMCwgMTk0NjQ0LCA1NTIzLCAwLCA0MjYyMCwgOTI0NDcsIDk4MzgxOSwgOTU0OSwgMCwgMTA1NDksIDU1MjgyLCA5NjYxLCAKKyAgICA0MzY4MiwgMCwgNzc5MTAsIDEyMDAyNiwgNzg3MDgsIDAsIDc3OTExLCAwLCA0MTk5MSwgOTgzODkzLCAwLCA3NjMwLCAKICAgICA5ODQ2LCA3Njg0LCAxMDM1MCwgMCwgMTE3NCwgNzc5ODEsIDQyNzMzLCA3Nzk3OCwgNzc5ODAsIDY2NDg1LCA3Nzk3NywgCiAgICAgNDIyNzcsIDc3OTc0LCA0MjQ1NiwgNjU2NjcsIDEyNzAzNywgMTIzMzAsIDEyODI3MiwgMCwgNDI0MTcsIDQyMzgzLCAKICAgICA2NjYzMCwgNDEzNDQsIDYyOTMsIDAsIDY2MjUyLCA3Nzk4NCwgNzQ0NDMsIDAsIDEwMjA5LCA4MzEzLCA0MTk1LCA3NDQzNSwgCi0gICAgMTMxNiwgNjY2OTAsIDEyMDAzMiwgNjMzMiwgNjQ4OTQsIDAsIDY1ODcxLCA3ODA2MCwgMTczNiwgOTgzNjc1LCAzOTAxLCAKKyAgICAxMzE2LCA2NjY5MCwgMTIwMDMyLCA2MzMyLCA2NDg5NCwgMCwgNjU4NzEsIDc4MDYwLCAxNzM2LCA5ODM2ODQsIDM5MDEsIAogICAgIDEyMjI4LCAxMjAxNTEsIDY1MjAwLCAzMzgzLCAxMDQ0NiwgNzg4NDEsIDY5MywgOTEzMCwgMzE0LCA2NDE0OSwgNDI0MjAsIAotICAgIDExOTQ5LCA5ODM2NjAsIDEyMDE1MiwgMTEwMjYsIDEyODc4OCwgNTMzMiwgNjk0MCwgNjQxNTQsIDEyNjM1LCAxMjcwMDcsIAorICAgIDExOTQ5LCA5ODM2NjksIDEyMDE1MiwgMTEwMjYsIDEyODc4OCwgNTMzMiwgNjk0MCwgNjQxNTQsIDEyNjM1LCAxMjcwMDcsIAogICAgIDQyNzA2LCAxNzUxLCAyNzMsIDgxNjUsIDEzMTY2LCAxMjA3NjMsIDc4ODQwLCA3MTM2OCwgMTI4MjQsIDAsIDQ1MjgsIAogICAgIDUzMjAsIDYzMDEsIDQzNjYyLCA2MTMzLCA5MzM5LCA5NDYzLCA0MjM0NiwgMTA5MjIsIDY0NTYwLCAzNzU3LCAwLCAwLCAwLCAKLSAgICA2NTg2OSwgNzM3NjAsIDI1NjksIDAsIDIzMjYsIDY1NzQwLCAyNTY1LCA0MjQ1OSwgNzU5NiwgNzkyMSwgOTgzODU5LCAKLSAgICA3NDA5NSwgMTI3OTgxLCA0MTg0OCwgMjU2NywgNjYwMDYsIDAsIDQwNDQsIDkyNjQ2LCAwLCAxMjIzMywgOTgzODYyLCAKKyAgICA2NTg2OSwgNzM3NjAsIDI1NjksIDAsIDIzMjYsIDY1NzQwLCAyNTY1LCA0MjQ1OSwgNzU5NiwgNzkyMSwgOTgzODY4LCAKKyAgICA3NDA5NSwgMTI3OTgxLCA0MTg0OCwgMjU2NywgNjYwMDYsIDAsIDQwNDQsIDkyNjQ2LCAwLCAxMjIzMywgOTgzODcxLCAKICAgICAxMDIzLCA0NzQsIDAsIDExOTgxOCwgMCwgMCwgNDI0ODcsIDY1NTU2LCAwLCAxMjc4NjYsIDQyMjk1LCAwLCAwLCA3MTMyMiwgCiAgICAgOTI1MTgsIDk4MzUsIDY2NDk5LCAwLCA1NDE3LCAxMjI3NSwgMTA4OTUsIDAsIDI3NCwgMCwgMTg1OCwgMCwgMCwgNTUyNTEsIAogICAgIDEwMTE4LCAzMTMzLCAxMjgwMDgsIDczNzk1LCAwLCA5NjEwLCA4MDY4LCA4MTk3LCAwLCA2OTksIDAsIDQxNjY1LCA1ODY4LCAKICAgICAwLCA5MjY5NSwgNDIxODIsIDc1ODEsIDE5OTQwLCA0MzY2OCwgNDE2NjcsIDEyODA1NywgMCwgMTkyMywgNjU1ODMsIAogICAgIDY1ODAyLCA5Mzk3MCwgNjQ1OTcsIDQzNDQ0LCAxMTkxODQsIDkyMTk3LCAwLCA2NDY0LCA3MDM2LCAyOTk2LCAxOTM3LCAKLSAgICA5ODM3NDIsIDAsIDQxODM1LCA0MDQ3LCA0MTg0MiwgMCwgNjQxMDcsIDAsIDAsIDExMDE3LCAxMjA2MDEsIDAsIDI5MywgCisgICAgOTgzNzUxLCAwLCA0MTgzNSwgNDA0NywgNDE4NDIsIDAsIDY0MTA3LCAwLCAwLCAxMTAxNywgMTIwNjAxLCAwLCAyOTMsIAogICAgIDc3OTY2LCA5MjE2OSwgNjQ3OTEsIDQxODI3LCA0MjQ2NiwgNDM0MjIsIDEwNTc5LCA4NTYwLCA3MTM1MCwgNjU0MTMsIAogICAgIDc3OTYzLCA0ODAzLCAxMjk2NCwgMTczOSwgMTk0MSwgMzkwMCwgMCwgMTcxMywgNzc5NjksIDAsIDczOTU3LCAxMTQwNywgCiAgICAgNDI0NDEsIDQxOTcxLCA2Mjk3LCAxMjAwOTgsIDY0MTA1LCAxMjgwODAsIDQyNDgxLCAxMTcxNiwgNjY0NzMsIDcxNzksIApAQCAtMTg4OTQsMzM3ICsxODkxMywzMzggQEAKICAgICAzNjU5LCA5NTMzLCAxODQsIDE1NTMsIDEzMTA3LCA2NTQ4NCwgNjk2NDgsIDEwNTAyLCA3NDQ1NywgMCwgMCwgNDE1NTQsIDAsIAogICAgIDgyMjAsIDkxNzk0MywgNDE1NTcsIDAsIDAsIDExMDcwLCAxMTkyMjEsIDUxNTcsIDQwMjAsIDczODU4LCA0MTU1NSwgOTUxNCwgCiAgICAgNjQ4MTgsIDY1MTAzLCA2NDY0MSwgNjQzMDMsIDc4MTMxLCA3NTIwLCAwLCA3NDM3NywgMTEwMjksIDY2NjUxLCA5ODMwNjgsIAotICAgIDAsIDExODkzMCwgNjQ1MjcsIDAsIDc4NzcsIDczODAzLCA5ODM3ODksIDEyNzM0OCwgMTIwMDk2LCA3NDYwMiwgOTk1NSwgCisgICAgMCwgMTE4OTMwLCA2NDUyNywgMCwgNzg3NywgNzM4MDMsIDk4Mzc5OCwgMTI3MzQ4LCAxMjAwOTYsIDc0NjAyLCA5OTU1LCAKICAgICAxMTk1NTcsIDQwNTUsIDQyODE3LCAwLCA2NTIxMiwgMTE3MTUsIDEyMTkwLCAxMjMxOSwgNzg2MzAsIDAsIDc4NjMxLCAKICAgICA5NTAyLCA2NTQyNywgMCwgNjU0MjQsIDEyNjA3LCAwLCA5NzM0LCA2NTQyNSwgMCwgMCwgMTI3MzU3LCA3ODgzNSwgOTI0MTAsIAogICAgIDEwMTEyLCAxMDgyNywgMCwgOTg2NiwgNzQ1MjcsIDY2Njc1LCAwLCA4NjI1LCA2NDM0NiwgMTEyOTAsIDEwNDc3LCAwLCAKLSAgICA4NjM2LCA5ODM5MTgsIDgzMTUsIDY1NDQ0LCA5ODM3ODQsIDAsIDc0NTk1LCA2MTUyLCAwLCAwLCA2NjI5LCAxMjcxMDgsIAorICAgIDg2MzYsIDk4MzkyNywgODMxNSwgNjU0NDQsIDk4Mzc5MywgMCwgNzQ1OTUsIDYxNTIsIDAsIDAsIDY2MjksIDEyNzEwOCwgCiAgICAgMTIwMTcxLCAwLCA3NDU4OSwgNDM5OTMsIDAsIDY5NzkwLCA2NDQzNSwgMCwgNDM2OTAsIDExMDQ2LCAxMTQ5MCwgNDI3MzAsIAogICAgIDQ0ODUsIDEyNzEwNywgMCwgNjQ5MjYsIDAsIDAsIDAsIDU4NjksIDEyNDM3LCA0MjcyOCwgMCwgNzA0MCwgMzU4OCwgMCwgCi0gICAgMTI4MjUsIDAsIDAsIDEyNzI1LCAwLCAwLCA3ODY0MiwgMjIzLCAwLCA2OTY3NSwgMTIwMTY2LCA0MjQ0NCwgMCwgNjQ0OTksIAotICAgIDY1MjQ1LCAwLCAxMTcxLCAwLCA2OTcxNywgMCwgMTgwNSwgODc3MiwgNDM4MjAsIDAsIDk5MzAsIDY1MjQ3LCA3ODYxOSwgCi0gICAgMTIwMTExLCAyMzM4LCAwLCAxMTg4NTMsIDAsIDQyNjc2LCAwLCA2NDgwMCwgNjUyMzYsIDY3NjQ0LCA2ODEyNiwgMTIxMywgCi0gICAgMCwgNjQwNzUsIDc5NywgNjQwNzQsIDg3MzQsIDQyMTIsIDEyNzM2OSwgNjQzODcsIDQxMTUsIDAsIDUwMDUsIDY0MDcwLCAKLSAgICA2NDA3MywgMTA2NzksIDAsIDc3OTU0LCA5NDAyLCA2NDI3NiwgNDI2LCAwLCAwLCA4MjUxLCAxMDEzNiwgNjU0MzYsIDAsIAotICAgIDIxMjAsIDQzMzAyLCAxMjI0LCAwLCA2NTU3NiwgNzQxOTIsIDEwNzAxLCAxNzY0LCAzMTAxLCAxMjc4MTUsIDEyODU4LCAKLSAgICAxMjAxNTksIDAsIDExMzczLCA2Mzc4LCAxMjc4NTksIDEyMDEwMywgODY2MywgOTMxMiwgNDE2NDQsIDQ1MzksIDIxMjksIDAsIAotICAgIDkyMjIsIDk4MzcyOSwgMCwgNDI1OSwgOTA5MiwgNzQ1NjcsIDQxOTYxLCAwLCAxMjcyNCwgNjYzNTcsIDQyMzMxLCA2NDkzNSwgCi0gICAgMCwgMCwgMTI5MywgNzk0NywgMjEzMiwgOTgzNzU4LCA3NDU5MywgMTIwMzA4LCAyNDU0LCA0MjcxNywgMzYxMywgMTI4ODM3LCAKLSAgICAwLCAwLCA2NTg4OCwgODgxNiwgMTA5NzgsIDEwODQwLCAwLCAxMDY2OCwgMCwgNDMwODcsIDEyNTk1LCAxMjAzMDQsIAotICAgIDk4MzExNCwgODgyMiwgMCwgMTE1NywgNjQ5MDMsIDg2MzgsIDAsIDAsIDAsIDAsIDY5ODQ4LCA4MjM1LCAxMjAzMTYsIAotICAgIDQ0MDUsIDEwMDg2LCAxMjAyNDcsIDAsIDY5MjE2LCAwLCA2NTQzMCwgNzEzMjEsIDYwNzksIDY4MTcsIDEwNzY0LCAKLSAgICAxMjc5MTAsIDY0MjkxLCAxMjgwNTEsIDk5OCwgMTIwMzEyLCAxMTA2MiwgMTMxNywgNjQzMjcsIDE1NTgsIDAsIDE5OTEsIAotICAgIDc4ODIsIDQyMjU0LCAwLCA0MTcwMCwgNTMwLCAwLCAxMDQyOCwgMTE5MzM1LCAxMjAwMiwgMTE5MzM2LCA1NzQyLCA0MzA3NiwgCi0gICAgNDY5MiwgNjQ2MzAsIDQxODIzLCA0MDA3LCA1MDA0LCAxMTkzMzQsIDc4OTYsIDc1MSwgNjU5NSwgNjU5NiwgMTIwMzI1LCAKLSAgICA2NjM3MywgMCwgMCwgNjQ5MDgsIDkyNjkxLCA2MzExLCAwLCAxMjAwNCwgMTE5MTkyLCAxMjA0OSwgNDMxMDgsIDEyMDMyNiwgCi0gICAgMCwgNDE3MDUsIDkyMTg4LCA2NTk4LCAwLCA2NTk5LCAxMjAzMzQsIDAsIDQyMTQ4LCAxMTg4MjUsIDY2MDI3LCAwLCA2NTk3LCAKLSAgICA5NDEyLCA4MzQwLCAxMTgyNCwgNjQ3NDUsIDIyODEsIDY5OTA0LCAwLCAxOTg4LCA1NDA3LCA2Nzg2NSwgMjQzMCwgNDE2NzgsIAotICAgIDAsIDEyMDI0MywgMjMzNiwgOTgzODk0LCAwLCA3ODg3MSwgMTIwNDQyLCA5ODM3NjAsIDE5MjEsIDEwOTQ3LCAxOTkyNywgMCwgCi0gICAgNjU0MDYsIDAsIDE5OTEzLCA0Mjg0LCAxMzIxNywgMCwgNDM3ODksIDEyODQxLCA5MjI5LCAxMDk1NiwgNDIyODUsIDQxNjc0LCAKLSAgICAxOTk2NCwgNDE2NzksIDY1MDg0LCAzNTIxLCAwLCA1Nzc0LCA4MzI1LCAwLCA2NTQwMywgOTgzMDg5LCAxODU0LCAxMDc5NCwgCi0gICAgMCwgNjc2NjAsIDY5ODQ2LCAwLCA3ODM1OSwgNTI4MCwgMCwgNDM0NCwgMTI5MDUsIDY1NDMzLCA2MDc2LCA2NDc5MywgCi0gICAgNDE2MTAsIDc2OCwgMTIwNzQsIDQ0MiwgMCwgNjgxNjIsIDY0MDgxLCAxMjkzNCwgNDE2ODIsIDY1NDMyLCA0MTY5MywgMCwgCi0gICAgNjA3MSwgNjU0MzQsIDEyNzQ2NywgNDgwNCwgNDA1MywgMCwgMTI3NDY5LCAxOTQ2NTMsIDQxNjk2LCA0NjcsIDY5ODIzLCAKLSAgICAxMjc0NjMsIDY5Nzk3LCAxOTQ2NTIsIDEyNzQ3MywgODQyMSwgMTI3NDcyLCA2OTY4MiwgNDM3MDUsIDUwMiwgMCwgNjU0MzEsIAotICAgIDExOTA1NiwgNjk5NTQsIDEyMDQzLCAxMzAzLCAzMTYsIDczNjQsIDIwMjksIDIxMzYsIDExOTI0NiwgMTE1MzMsIDY0MzY1LCAKLSAgICA0MzQ4MCwgOTI2MzksIDQ4NjAsIDEyNjY0OCwgMTI3ODc3LCA0MjQ4OCwgMCwgOTU4MywgMTI4ODQ5LCA1NTQ2LCA4MDE5LCAKLSAgICA3Mzg1NiwgMCwgMCwgMCwgNTU0NCwgMjM1NSwgMTIxNTAsIDY1NzI1LCA1NTQzLCA3Nzk4OSwgNjM3NTEsIDEyMTM3LCAKLSAgICA1NTQ4LCA3Nzk4NSwgMCwgNjU3MjcsIDY4Mzg4LCA2NTcyNiwgNjA3NywgMTI4MzUyLCA2NTQ1MiwgMCwgMTEzMDEsIAotICAgIDc4MDEzLCA3ODAwOCwgNzgwMTAsIDk4NzQsIDc4MDA3LCAwLCAxMzE5LCAzMDUwLCA2NTQxMCwgMCwgMCwgNzgwMTYsIAotICAgIDc4MDE3LCA0MjgzMCwgNDM5OTYsIDY2NzE2LCAxMjgxMzcsIDQ2OTEsIDkyMjQyLCA5MzQ1LCA2MjEsIDkyNzA5LCAKLSAgICAxMjgyMjIsIDAsIDY1NDExLCAwLCA0MTE4MiwgNzM4ODEsIDY1NDA4LCA3Mzg5OSwgNzgwMjQsIDk0NzQsIDEwNTQ1LCAKLSAgICAxMTkxMTgsIDEwODg3LCAzNzg2LCA2NTQwOSwgODg5NCwgNDMxNzksIDExOTYxMSwgNzkyMywgMzcxNiwgOTIzNjMsIDk5OTYsIAotICAgIDg1MDgsIDAsIDcwMTIsIDgxOTUsIDEyNzgzNCwgOTU2NiwgMCwgMzcyMiwgMCwgNDE3MDcsIDg0OTMsIDU0NSwgOTU3NSwgCi0gICAgNDEzNzksIDEwMDUwLCAxMjcxOCwgNjk4NTQsIDg4NTksIDY4MjAsIDc0MzQ1LCA2NTExMCwgMTIwNzQwLCAwLCAwLCA5MTE5LCAKLSAgICAyNzg3LCA3OTIwLCAxMTg4MjMsIDQwMjEsIDIwMTIsIDc5ODUsIDAsIDExOTY2MywgMCwgMCwgNzgwMjEsIDc4MDIyLCA0MTAsIAotICAgIDc4MDIwLCAxODAyLCA3ODAxOCwgNzQxMDcsIDAsIDQxNjU5LCA0MTY3MSwgMTgyNywgMCwgNjQzOTYsIDEwMTI2LCAxMjExNiwgCi0gICAgNDE2NzMsIDEyMDM3MCwgMTE0MjIsIDc4MTQxLCAxMjAzNzMsIDM4NjAsIDEyMDM2NywgNjg0MTIsIDQxMzQ1LCAxMjAzNjIsIAotICAgIDEyMDM2MywgMTE3NDgsIDQyMTU4LCA3OTQxLCAxMTA3NiwgODc0OSwgMTIwMzYxLCAyMTA0LCA2NDg1OCwgMzYxLCAKLSAgICAxMjAzNTcsIDg0NSwgMCwgNDE1NjAsIDExOTcwLCA0NTYyLCA5MTc5MjAsIDI5MjYsIDkxNzkxOSwgNDU2OSwgNzQxMzAsIDAsIAotICAgIDQzNDg3LCAxOTQ2MzAsIDYxMSwgNzQxMjksIDY0ODcxLCAxMTg4OTEsIDY1NjI5LCAwLCAxOTQ4NTgsIDAsIDAsIDEyNzU0NSwgCi0gICAgMTIwNTQzLCAwLCAwLCA2MjkxLCAwLCA3ODYzOSwgNDE2NjksIDcwOTQsIDkxNzkyMSwgMCwgOTgzNTgxLCA3NDA1NCwgCi0gICAgMTI3NzU0LCAxOTUwMjksIDAsIDgzOSwgOTgzMzExLCA3Njk1LCA4NzY5LCA2NTI0NiwgNDgyOSwgMTk0NjYzLCA0ODU5LCAKLSAgICA2NDQ2NywgMCwgOTgzOTU0LCAxMTg5OTgsIDcyMDYsIDAsIDY2NDcsIDQzOTg2LCAwLCA2OTc2NiwgMCwgNjQ3NjQsIDQyMTAsIAotICAgIDk4Mzg1NCwgMTI3OTM2LCA4MDQsIDAsIDAsIDEyMjk4LCAwLCA2NjY1MywgMCwgNjQ5MjQsIDEwMDkxLCA3MzkzMSwgOTQ2OCwgCi0gICAgNzQyNDUsIDAsIDAsIDc0MjQ2LCA5MjUwMywgMTI4MzksIDY0NjY5LCA5MjIwMiwgMCwgMTI3OSwgMTQyNSwgNjIyNCwgCi0gICAgMTE5MjI5LCAxMTA0OSwgMCwgOTI2OTcsIDQzMjM5LCA4NDgyLCA5MjQ0MCwgMCwgNTAzMiwgNjk2NzcsIDExOTQwLCAKLSAgICA2Nzg4OCwgNjY0LCAxMjA0MzcsIDUwMzQsIDAsIDAsIDEyNzUyNSwgNDI3MDIsIDczODg4LCA5ODMxNDksIDEzMjk0LCAKLSAgICA2Nzg3MywgNjQ4NjksIDYwMzIsIDAsIDkxMTUsIDc0MzAsIDEyMDM3NywgMCwgMTIwODE5LCA2ODM4NywgMTIwMTY4LCAKLSAgICA3MzkxMywgMTIwMTcwLCA0MTE2MSwgNTUxOCwgNDE3NCwgMTA5OTMsIDQxMTYyLCAxMjAxNjAsIDY0NTI4LCAxMTY5LCA0MzQsIAotICAgIDQxNDM3LCAxOTA1LCA2MDM0LCA0MTE2NCwgNjQ3NDQsIDk1MjgsIDExODg2NywgMTI4ODAwLCA1MjQsIDAsIDc0MDI5LCAKLSAgICA3ODgsIDc0MDI3LCAwLCAxOTQ2MzgsIDAsIDE2NjMsIDEwNDE5LCA3NDAyNSwgNDI2MzYsIDAsIDY5NzI1LCAwLCAxMjA2NTYsIAotICAgIDAsIDY3ODc2LCAwLCAwLCAwLCA2Nzg5NywgNzQwMzksIDAsIDAsIDExMzk1LCAwLCAxMTkxMDcsIDQzNjEyLCA2NDM0NCwgMCwgCi0gICAgMCwgMTA4NTUsIDU0NDUsIDkzNTUsIDAsIDY1MTk4LCA3MzkxLCA4OTg5LCAyMjEsIDY1Njg2LCAwLCAwLCA4MDEwLCA3MTkxLCAKLSAgICA0OTYyLCA2OTc3MiwgODg1NSwgMCwgMCwgNjQ0NjksIDEyMDQyNiwgMTA1NTUsIDAsIDQzMzMzLCA5MjI5OSwgMCwgCi0gICAgMTIwNDI3LCAxMDQ1MSwgMCwgNjc2NTMsIDcyNDUsIDEyNDQzLCA3NDQwNSwgOTk0NywgMTIwMTQ5LCA3ODMxNywgMzg3MywgCi0gICAgODM2NywgMCwgMTIwMTQ2LCA0MzQzMywgNDM2NDksIDExOTg3LCAwLCAwLCAxMTAxMCwgMTI3MjMsIDc0MDU5LCA3NDA2MiwgCi0gICAgNjIxNywgNTg5NiwgMCwgNzY4MiwgNzQwNDksIDE0NjIsIDEwMjM1LCAwLCAwLCAwLCAwLCAwLCAwLCA0MjU5NSwgMCwgCi0gICAgNzQ0MDIsIDExODg2MCwgMCwgMTIwNDE5LCA5MjQ5NywgNzQwNTIsIDAsIDkyMzc4LCAxMjA1NDksIDExOTA4MiwgNjQyOTUsIAotICAgIDEyMDQxOCwgMCwgNjQ3NjUsIDczOTIzLCAxMjA0MTcsIDEyMDY2MiwgNjk5MjAsIDE5NDcwMiwgNjIxNiwgMCwgMTA3NTUsIAotICAgIDk0NTUsIDAsIDgxMjQsIDEyNzA0MiwgOTQ3MCwgNjk0NCwgMTI3NTQwLCAwLCA2OTY4MCwgMjgyOCwgMCwgNTMxLCA0MjYzOCwgCi0gICAgMCwgMCwgMCwgNDM0MjgsIDgyMDQsIDM2MTQsIDI4MjcsIDk2OTYsIDAsIDAsIDg3MjgsIDQzNTQsIDEwOTA0LCA3ODU2MiwgCi0gICAgMTk5MzYsIDc4MzMsIDEyMDY5MSwgMCwgNDI1OTksIDQyNTk3LCA0MjcwOSwgMTIwNDA5LCAxMjcwNDQsIDAsIDg1MzcsIDAsIAotICAgIDAsIDkzNTQsIDk4MzE2NCwgMTI4ODMzLCA0MTE5OSwgMTAxMjEsIDIwMjgsIDAsIDk4MzE5NCwgNjk3MTUsIDAsIDMwNjIsIAotICAgIDAsIDc0NDQ3LCAxMjYwOCwgMCwgNjY0NDAsIDc1NDUsIDk3MDAsIDEyNTgwLCA5MjIwNSwgMTIwNzc3LCAxMjA1MDIsIAotICAgIDQxMTU1LCAwLCA3NDA3MSwgMCwgOTgzNDQ5LCAxMjcxMywgMCwgMCwgMCwgNzg3NzIsIDAsIDE3MzQsIDAsIDAsIDEyNzA0MCwgCi0gICAgNjQ1OTQsIDI0NTYsIDIzMSwgMCwgNzQxNjcsIDU0MiwgMCwgMTE4Nzg2LCAwLCA5ODM5NzAsIDEyMzAsIDAsIDAsIDM1OTcsIAotICAgIDQ0NDYsIDEwNTg0LCA3NDIzNSwgOTIyMTUsIDQwMzcsIDEyNzkzOCwgODM1MiwgMCwgNTY4NywgMCwgNjQ1MTUsIDAsIAotICAgIDE5NDgwMSwgNTUyNjUsIDY3ODQ2LCA3ODQzNCwgOTcwNCwgMCwgMCwgNzAwODAsIDcxMzM4LCAwLCA4NjYwLCAxMjY0OTUsIAotICAgIDAsIDAsIDc4NzczLCA3NDQ4MiwgNDQ4MywgMTcwOSwgNjk3MjEsIDk5MDksIDYwODAsIDAsIDEyMDM1OCwgMTc0NiwgMTMxNSwgCi0gICAgODY2NywgMCwgMCwgMTMxNDAsIDY1ODk5LCAxMDYwNCwgMCwgNDQ4MCwgMTEyNjYsIDEyODE1MiwgMTIyNiwgNjkzMCwgCi0gICAgNjc5NzksIDk4MzY4MSwgNjM2MCwgMTA4OTcsIDQxMjMwLCA2MDUsIDAsIDc0Nzg1LCA2OTg3NSwgMCwgMCwgNDE1MDAsIDAsIAotICAgIDMxMSwgMTE0NTMsIDYyMjEsIDEwNjA4LCA2NDk0MywgNzQyODAsIDEwODc3LCAxMTg4NjgsIDY0ODg1LCA3NDI3MiwgMCwgMCwgCi0gICAgMTI4NTU5LCAxMjA3MzYsIDc0MzEyLCAzNDUsIDAsIDc0NDU2LCA2NDYwNiwgOTkxNywgMCwgOTIyMzEsIDUwMzcsIDAsIAotICAgIDE3NzYsIDg0MjIsIDAsIDExODgxNCwgNDE1MDgsIDQxMjAxLCAzMjMsIDQzMzI4LCAwLCA0MjY5OCwgMTI5NSwgMTk0ODUzLCAKLSAgICA0NjI1LCAwLCA0NjMwLCAxMzExNywgMCwgMTI4NzcyLCA2NTEyMywgMTEyOTMsIDI2NjgsIDExMjg4LCAwLCA0MjY0MCwgCi0gICAgNjU2NjYsIDI1MTksIDkyMzY5LCA2NTQyMCwgOTI0NzksIDAsIDQyNTIsIDUwNDksIDQyNjU5LCAxMTkwMTEsIDcwNiwgCi0gICAgNzc1NCwgMTA4NTQsIDg3MzgsIDAsIDY1NDE5LCAwLCAwLCA2NDksIDY1NDIxLCAwLCA2NjcwMiwgMCwgMTI2NzAsIDEwMTMsIAotICAgIDAsIDY0OTE5LCA3MDUsIDAsIDY1NDIyLCAxMjc4MDMsIDExODMsIDEyNjUxOSwgNzAxNywgNDI4NTIsIDAsIDgxNTcsIAotICAgIDk3MzYsIDY0NTAzLCA2NTQxOCwgMCwgOTgzODY5LCA3NDAzNSwgMCwgMTE5MTMsIDczODc0LCA2Njk2LCAwLCA4OTIwLCAKLSAgICAxMTkyOTgsIDAsIDc5NjIsIDEyMjExLCA5ODM3LCAyMDUxLCA2NjIyNywgMCwgNDE4NCwgMCwgMCwgMTAxNzcsIDczNzc3LCAKLSAgICAxODU3LCAxOTQ2NTcsIDQ2MjYsIDg0NjQsIDg0NzIsIDAsIDQ2MjksIDg0OTksIDc4MzIxLCA3ODMyMiwgNDYyNCwgNzgxOCwgCi0gICAgMTE5MTczLCAwLCAwLCA3ODA1LCAwLCA5NDAwNywgNjkzNSwgOTIyOTIsIDc4MzI1LCA3ODMyNiwgNzgzMjMsIDQzMzI3LCAKLSAgICA0Mzk4OSwgMTE5MDQ2LCA4NDkyLCA4MjUwLCA4NDU5LCAwLCA4NDk3LCA4NDk2LCAwLCAwLCA3ODMzNiwgNzgzMzksIDk1NDMsIAotICAgIDc4MzM1LCA3ODMzMiwgNzc4MzIsIDY1ODQ5LCA3NzgzMSwgOTgzOTUyLCAwLCAxMjQ1MSwgMCwgODY4NCwgMCwgNjEwMiwgMCwgCi0gICAgNTI5OCwgMCwgNTI5NCwgMCwgMCwgOTgzNDUxLCAxOTUwNjIsIDk5NDksIDExOTgyNiwgNDM2MTcsIDExOTIxNSwgMCwgCi0gICAgMTIwNzMsIDAsIDAsIDc3ODYzLCAxMzEwOCwgMTIwNjE3LCAxMTQzOSwgNDE0NjgsIDk4Mzc0OCwgMCwgNTI5MiwgNTUyNzIsIAotICAgIDk4Mzg3NCwgMTkzOSwgNTMwMiwgMzk3MCwgOTE3ODc5LCAxMjQ1NSwgMTc5MywgMCwgMCwgMCwgNjY0MywgOTI0NzcsIAotICAgIDY1MjYzLCAwLCA3ODMzMCwgNDEyOTMsIDc4MzI4LCA2NTkyMywgMCwgMTMyMTksIDk1NjksIDAsIDc0MzgzLCAwLCA3NDE5NywgCi0gICAgMCwgNTUwMCwgODgxMywgMCwgMCwgNzQ1NjYsIDUzMjIsIDAsIDc4MzQwLCA0MzYzMSwgNTMyNCwgNjY0NDMsIDM3ODQsIAotICAgIDQxNjE0LCA2NTI2OSwgNjIzMCwgNzgzNDksIDc4MzQ1LCA0MzMyNCwgMzM2MCwgNzgzNDQsIDExNTIzLCAwLCA5MjQ4OCwgCi0gICAgOTkyNiwgNzE5NywgMCwgNjg0MjksIDQyODk0LCA0MTgyMSwgMTI0OSwgNzgzNjAsIDc4MzYxLCA3ODM1NiwgNzgzNTgsIAotICAgIDc4MzUzLCA2NDg5OSwgNjQ3NjMsIDQxMTQ5LCA0MTgwNywgNDMxNjIsIDQxODE1LCA0MTE1MCwgMCwgMTA1NzEsIDEwMDk2LCAKLSAgICAwLCAwLCA3ODA3NCwgNjk0NywgNDExNTIsIDg4NywgOTI0OSwgNjU2NSwgNzg1MTAsIDQxOTkwLCA3ODUwOSwgNDE4MTEsIAotICAgIDc0NDY2LCA5Mzk2NiwgNjY3MCwgNzc4ODIsIDAsIDAsIDQzMDkyLCA0MzMyNSwgMCwgMTAxNjgsIDAsIDk3ODEsIDEyODY1NSwgCi0gICAgOTE5MCwgMCwgOTY2NiwgODI2OSwgNjU5NDQsIDc0MDA1LCAxMzAxOSwgMTE2NzAsIDY5ODYwLCAzMTUsIDEyODEzLCAKLSAgICA5ODM0NTAsIDc4NDMyLCA3ODI1NiwgNzgzNTEsIDc4MzUyLCAwLCA5ODM2NDgsIDAsIDAsIDEzNzgsIDk1MDksIDAsIDAsIAotICAgIDc0NDc1LCAzMDY2LCA5MjIyMCwgNjc4NDcsIDAsIDkyMzU1LCAwLCA3ODM2NSwgODc4NywgMTIwMzc5LCAxOTQ2MTYsIAotICAgIDQxNjE4LCAxOTQ2MTUsIDc4MjYxLCAxOTQ2MTQsIDAsIDY0NjUyLCAwLCAxOTQ2MTIsIDAsIDc4MzY2LCA0MjA4OCwgMCwgCi0gICAgMTk1MDYxLCA3MTc2LCA0Mzc1NiwgMTAxMzcsIDYxMjEsIDEwOTk1LCA3ODI1OSwgNzQ1MzQsIDgxMTksIDY0ODc0LCAKLSAgICA5MTc4MTYsIDEyNzE5OSwgMTk0OTM5LCAwLCA3NDUyNSwgMCwgMCwgMTI5MzAsIDEzOTQsIDc0NTE0LCAwLCA3NDUxNSwgMCwgCi0gICAgMTE4ODA0LCAyOTk4LCA5NTI3LCAxMjA2NTksIDY1MTkwLCAxMjk3NywgNDIwOTAsIDExOTE2NSwgMCwgMTE5MTAwLCAKLSAgICA0MTIzNiwgOTIyMzUsIDQyMDA1LCA0MjAwMywgNDEyMzcsIDU4NDgsIDAsIDAsIDM2NzAsIDEyODY1NywgMTk0NjAwLCAwLCAKLSAgICAwLCA3ODkwLCAwLCAxMTI5OCwgNDMzMTUsIDAsIDYyMjksIDE1OTMsIDAsIDAsIDYxOSwgNDYzNSwgNjUwODAsIDAsIAotICAgIDEyODAwMiwgNDEyMCwgNjUzMzcsIDY1MzM2LCAwLCAxMTgwOCwgMTE5MjE0LCA3NDExNSwgOTM2NiwgNDI3OTAsIDQyMDA2LCAKLSAgICAxMTkxMTUsIDY1MzI3LCA2NTMyNiwgNjUzMjUsIDEwNzU3LCAxNTA3LCA0MjIxNiwgNjUzMjEsIDY1MzIwLCA2NTMzNSwgCi0gICAgNjUzMzQsIDY1MzMzLCA2NTMzMiwgNjUzMzEsIDQyMDU5LCA2NTMyOSwgNDI2ODksIDkyNDI3LCA5MTI4LCA5NDA0NSwgCi0gICAgNDIwNzMsIDY3ODUsIDY0NTkwLCA5ODM4MjEsIDQzNzEsIDcxOTYsIDY1MzE4LCAyMDM1LCA2NTMxNiwgNDEwNiwgNjUzMTQsIAotICAgIDY1MzEzLCA0MjA3NCwgMTI3ODQ3LCA0MTIyOCwgMCwgNjU2MDksIDQxMjQxLCA3OTAzLCA0MTIzOSwgNDM1MzMsIDc4NDU5LCAKLSAgICA3MTg5LCAwLCAwLCAwLCAxMjM1NywgNDI4MDIsIDc4NDUwLCA4NDg3LCA5MTMxLCAwLCA0NjE1LCAxMjY5NSwgMTI3NzUyLCAKLSAgICAwLCAxMjE3NSwgMCwgNjQ1MzUsIDAsIDc4MDksIDAsIDAsIDU2MiwgMTIxNjksIDY1OTAsIDY5NzYyLCA2NjQ1NSwgNjQ3MzgsIAotICAgIDMyMTksIDY4NjU0LCA5ODM3NzgsIDAsIDEwMzcsIDAsIDIwMjUsIDEyODI2MywgMTMwOTgsIDc4NDQyLCAxMDYzNywgNDU2OCwgCi0gICAgNTQ5LCAxNTcwLCAwLCAyODM1LCAwLCAxMDYyNCwgNDM2MjMsIDExMDcyLCAxMjcxOTEsIDAsIDAsIDEyNjA2LCA3ODQzMywgCi0gICAgMjgyNSwgMCwgMTA4MjUsIDgwNzksIDI4MjEsIDQxMDQ2LCA5MjMyNywgNzM2NSwgOTgzNzQ0LCAxMjA1OTMsIDEzMDcxLCAwLCAKLSAgICA0NTIsIDQxMDQ5LCA0Mjg0MCwgNjM0NiwgMjgzMSwgNTQ2MSwgNzQ1OTYsIDExNDY1LCA1MjEyLCAwLCA2NDcwMywgCi0gICAgMTE5MTkxLCA0MjMwOCwgNzE4MSwgMCwgNDEzMzIsIDAsIDEyMzMzLCAwLCAxNjY4LCAwLCAwLCAwLCAxMTg3LCA5ODMzNzcsIAotICAgIDQyNjI4LCA3ODU3NSwgMCwgMTI4Nzc3LCAwLCAzMjQwLCAxMjg1MTgsIDEyMTk0LCAwLCAxMTU5MSwgNDEwNjUsIDUzMjMsIAotICAgIDgxNjYsIDAsIDAsIDAsIDc0NTM1LCAxNjIzLCA2NTI5NywgMTI4ODU2LCA1NzEsIDAsIDQ5MTgsIDAsIDUyODgsIDEyNzI5NSwgCi0gICAgODkxNiwgNjUwNDgsIDE5MDksIDg4NjQsIDAsIDAsIDEwNzM2LCA5MjUwOCwgMTE1NzEsIDc2MTUsIDEyNzMwMCwgOTIyOTYsIAotICAgIDQyMzcsIDkyNTc2LCAxMDM1LCA2NTgxNSwgMCwgNzg4MSwgNzAxLCA2NTkzNiwgMzQ4OSwgMCwgMCwgMTIwNzUxLCAxMTQwMywgCi0gICAgMCwgMCwgMTI3MTQ2LCAzNzk2LCA2ODAwLCAwLCAzOTk0LCAxMTQyMSwgMCwgMTk1MDc2LCAwLCA5ODM5MTMsIDAsIDAsIAotICAgIDY0ODU3LCAxMjgxMDUsIDI4NTUsIDEyNzgyOCwgNjYzMDgsIDQxNjIxLCA2ODIxNCwgMTI3MjgzLCAxMjc4MTcsIDEwNjU0LCAKLSAgICAwLCAxMTkyMjYsIDEyMTY0LCAzMjQ2LCA3OTA2LCA0Mzk3MiwgNjU4NDcsIDcxODIsIDAsIDEzMDI0LCAxOTQ4MjIsIAotICAgIDc0MjcwLCAxMjgyODksIDAsIDAsIDAsIDE0OTYsIDc0NywgMCwgOTQyLCAyMzc4LCA0MzEzNiwgMTI3OTA1LCA4NDY2LCAKLSAgICA5ODM1NzUsIDkzMjAsIDgwMDEsIDEyMzIsIDgxMzksIDExNjE3LCAwLCAwLCAxMTQwOSwgNjgzNzMsIDYzODIsIDAsIAotICAgIDY0NjM0LCAxMjgyNzksIDAsIDExNjEyLCAwLCA2NzYwMCwgMjM3NCwgOTQwNjYsIDg0NzUsIDExNjA5LCA2NjMxMywgMCwgMCwgCi0gICAgNTI4NiwgMTE5Mjk3LCAwLCAwLCA2NDkyNSwgMTIwMjgzLCAxOTQ1ODQsIDExODk4MiwgMTk0NTgzLCA3NzA1LCAxMTk0MiwgCi0gICAgMTEzMDUsIDE5NDU4MSwgMzMwOSwgMCwgMCwgMCwgMCwgNjgwMiwgMCwgNDE2NTMsIDEyODAsIDEyNDEsIDcxNjgsIDEyMDk2LCAKLSAgICAwLCA2NjYxNSwgNDI1NjUsIDQxNjUxLCAwLCAwLCAwLCA0MTY1MCwgNjY1MDcsIDY2NDcwLCAwLCAxMjkxNCwgNDE0OTEsIAotICAgIDY2MDEwLCAxMTk1NTIsIDYwNzgsIDk5NTQsIDAsIDE0NzUsIDExOTI0NywgOTkzOCwgNjA4NCwgOTE3NTQ2LCA0MTA2NCwgCi0gICAgNDEwNjIsIDAsIDAsIDMyNTYsIDEwMTg5LCA0MjA3NiwgNDMyNTIsIDc4ODIzLCA5MTc5MDYsIDg3MjcsIDAsIDY1ODc1LCAwLCAKLSAgICAwLCAxMjc3NjIsIDEwNTYyLCA3NDIxNSwgNDMwNjUsIDAsIDAsIDMyNDgsIDc0Mjk3LCAzMjYxLCA5MDE1LCA3MTM1MSwgMCwgCi0gICAgMzYzNSwgNjQzMzcsIDk4MzI3MywgMCwgMCwgNzE5NSwgMCwgMjAwNywgNjQ0MzEsIDAsIDAsIDAsIDAsIDYzNSwgMCwgMCwgCi0gICAgNjU2MTMsIDc3OTA5LCA5MjQyMCwgNzM5OTcsIDAsIDAsIDExOTIxOCwgNzk4NCwgODYwMCwgNzQ0MzQsIDEyNzc3MCwgCi0gICAgNDE3NiwgNzAwNTAsIDIwMzQsIDkyNTUxLCAxMjA4MDUsIDY1ODkxLCAxMjcwMzgsIDAsIDMxOCwgMjAzOCwgMTI4ODYwLCAKLSAgICA3ODU5NiwgMCwgMzY0OSwgMTMxNDksIDQyMTQ1LCA0Mjc5OCwgMzYzNCwgMTIwMjkxLCAxMTg5MjcsIDY3Njc3LCAxMjAxMjQsIAotICAgIDc4NjYsIDAsIDExNDAyLCA0MjE0NiwgOTQwMzIsIDc0MjM4LCA0MjY2NCwgMjg0OSwgMTI3MDM0LCAwLCA3OTM4LCAxMjk2MCwgCi0gICAgMTc2MSwgMTE4MTIsIDY1Mzc5LCA2ODM4NiwgMTI4MTg1LCAxMTU5LCAwLCA2OTcyOSwgMCwgMCwgNzE3OCwgMTk0NjMyLCAwLCAKLSAgICA0MTY4MCwgMCwgMTI4MjAzLCAxMTUzNCwgMTUxNCwgMTE2NjgsIDY3ODkxLCA5MzEzLCA3MDE1LCAwLCA2Nzg3NywgCi0gICAgMTk0NTY3LCAxMjk4OSwgNjY0NzQsIDkzNjgsIDEyODQ4LCAxNjI0LCA0MzI3MCwgMCwgNzQyNzgsIDEwODE4LCAxMjY2NDQsIAotICAgIDk5NTMsIDAsIDc4NDIxLCAxMTk0LCAzMjQyLCA5NzYxLCA5NTU1LCA4NTk4LCAxMjAyOTksIDYxNjksIDEyODcxLCAxNTUxLCAKLSAgICAyNzk4LCA2NTE3NiwgNDk1OCwgNDI3NTIsIDExOTAyNSwgMCwgNjc4NzUsIDEyMDMwMSwgMzQ5NSwgNjY2NDgsIDE5NDc2OCwgCi0gICAgMCwgNjgzNjQsIDk4MzIyMiwgNDg5MSwgMCwgMTA2NDEsIDAsIDczNzQ2LCAwLCA2ODM1MiwgMCwgNzM3ODcsIDE5NDgyOSwgCi0gICAgMTk0NjMzLCA3MTk5LCA2NDk1NSwgMCwgMCwgMCwgMCwgMCwgNDI2ODUsIDQyNjc5LCAxOTMsIDAsIDAsIDAsIDQyNjY3LCAwLCAKLSAgICA1MjcxLCA5MjMxOCwgOTI1MTcsIDExODg4MiwgMTM2MiwgMTMyOTcsIDAsIDEyODA5NCwgMCwgOTgzMzIzLCA3Mzc4OSwgMCwgCi0gICAgNjY1OCwgNDQyNiwgMCwgOTI2MjgsIDk4MzgzMywgOTIzMTksIDcyNzYsIDQyMTYzLCA1MjIwLCAwLCAwLCA5ODMzMjIsIAotICAgIDI0MTYsIDMzMTAsIDQyNzAzLCAwLCAzNzksIDAsIDQzNzU1LCAwLCAwLCAzMjIzLCA2NTQ5MiwgMTI4NCwgMTk0NzcxLCAKLSAgICA0NTQ5LCAwLCAwLCA5ODMxNTQsIDEyNzc2MywgMTA4MDcsIDk1NTgsIDE5NDYxMywgMCwgODUxNSwgODY4OCwgMTI4NjYsIAotICAgIDY1MzA4LCAzMjk0LCA5ODMzMjQsIDg1MjksIDEyODEwMSwgNDMzODUsIDc1NjQsIDAsIDQzMzI5LCAwLCA5MjQ1OCwgCi0gICAgNzM3NTcsIDY2NDU2LCA0MjM1OSwgMCwgMjAzMSwgMCwgNzIwMiwgMCwgMTI2NzYsIDQyNzI5LCA5MjE5OCwgMzIxNSwgMCwgCi0gICAgNzcxMCwgMTYxMCwgNzM4MDEsIDAsIDAsIDY1NjgyLCAwLCAxMjA1MzcsIDY1OTI0LCA5OTc0LCAyMjgsIDY2MzU0LCAxNTAxLCAKLSAgICAwLCA2NDM5NSwgNTE3OSwgNzIwMCwgNjIyNSwgMCwgNjU3OTQsIDE3MjUsIDY1NTMzLCA4MTk2LCA3NDc2LCA3NDM5OSwgMCwgCi0gICAgMCwgNzE1MiwgODUwMiwgNTc2MiwgMTk2NywgNzQ4MywgMCwgMCwgODEwNCwgMCwgNzQ3NCwgNzc5NzksIDAsIDEyNjUwNywgCi0gICAgMTA0MTQsIDEzMDAxLCA4MTQxLCAwLCA0MjUzNywgMTU1NywgNDM1OTQsIDEyODY0MiwgNjMzMCwgNjgwNSwgODYzMSwgCi0gICAgMjU0NSwgNzAwNTIsIDEyNzE2NiwgMCwgNzQxOTAsIDAsIDAsIDk4Mzc3NywgNDI3NjIsIDAsIDQyOTE0LCAxNjUwLCAyNjIsIAotICAgIDE2MzcsIDAsIDc5MDEsIDMyMzgsIDEyODE3MywgNDE4NjEsIDAsIDEyODU4NSwgNjUxNTgsIDEwODYwLCA5NDA1OSwgCi0gICAgNDM2NTgsIDc1MjcsIDAsIDQzMzE5LCA2NDE5LCAwLCA0NSwgMCwgNjQ1ODgsIDkzOTg5LCAwLCAxMTk4MTAsIDcxOTQsIAotICAgIDUyOTEsIDAsIDQzNjY2LCAxMzEyOSwgMCwgOTA4NCwgMCwgODczNywgMCwgMTI4ODEsIDAsIDEyOTA2LCA5NjM5LCA3OTEyLCAKLSAgICAyNjIwLCAwLCAwLCAwLCA5ODM4NjYsIDE3OSwgNjU4OTYsIDAsIDY0NzU2LCAyODUzLCA3ODQ0MywgMTE4ODEzLCA5ODM4ODEsIAotICAgIDExODk5NiwgMTE5MDA5LCAyODUwLCA4MDg0LCA5ODMwODUsIDczODUwLCAyODAxLCA5MjI4NCwgNDIwNjksIDExOTgzOSwgCi0gICAgNzQ3NTQsIDExOTg0MSwgNDIwNzIsIDExOTg0MywgMTE5ODQyLCAxMDM5OCwgOTgzMDU2LCAwLCA4Mzc3LCAxMjcxMTYsIAotICAgIDgyNDUsIDY4NDAxLCAzMTU4LCA5MjM5NiwgMzk4MywgNDM2NTYsIDkyMywgMTE5ODU3LCAxMTk4NTYsIDI5MiwgMTMwMDIsIAotICAgIDExOTg0NSwgMTE5ODQ0LCAzMjIxLCAxNzYzLCA5MjQ2MywgNDYxMiwgMTE5ODUxLCAxMTk4NTAsIDcyNTMsIDEyNzExMCwgCi0gICAgNjgzOTEsIDAsIDEwNzgyLCAzNjM3LCAxMjk5NiwgNDM1NDIsIDAsIDY0NTc4LCA5ODM2NjYsIDMyMjgsIDY5NjM2LCA4NzgzLCAKLSAgICAwLCAxMTk2MTQsIDI3MzEsIDAsIDAsIDc4NTg1LCA0MTAyLCA3Njk2LCA3Mzg3OCwgMCwgMCwgNzg1ODYsIDQzMzE2LCAKLSAgICA0MTc3LCAxMTI4MywgOTA4OSwgMCwgNzM5OTYsIDk4MzE3MywgNjQ1MDAsIDQzNjc0LCAwLCA2NDk0NywgMTg1NiwgMCwgMCwgCi0gICAgNjM3OSwgMCwgMCwgMCwgMzIwOCwgMTI5NzUsIDc0Nzc1LCAxMjczODAsIDk4MzkyMiwgOTIzODksIDc0MDcyLCA1NTI2OSwgCi0gICAgMCwgMCwgOTgzNjc0LCAyMDMzLCA3ODU3NywgNzg1NzYsIDE5NTAyNiwgNTUyNTQsIDc3NDAsIDAsIDAsIDAsIDczOTY0LCAwLCAKLSAgICA5Mzk4OCwgNjc2MTIsIDY1Njc0LCAxMjgyNDQsIDk0MTEwLCA0MTY4OSwgMCwgNzQwMDYsIDY0OTA5LCA2NjQ2LCAxMTc5MCwgCi0gICAgNzQwMTksIDAsIDEyODA2NiwgMTI4MDMxLCA4NTYxLCA0NTczLCAwLCA1MzI2LCAwLCAxMjA2MDUsIDcyMzAsIDgyNTcsIDAsIAotICAgIDg3NzgsIDQxNjg4LCAwLCA2NTc3NiwgMjA3MSwgODMxNCwgNjQ1OSwgMCwgNzYyOCwgNjUwOTIsIDczOTAzLCA2NjcyMSwgCi0gICAgMTEzNDIsIDEyODU2MSwgMCwgMCwgMTI4MjI2LCAxMjcwMDEsIDAsIDExODEwLCAxMzE2NCwgMTA3MjMsIDk2NywgOTgzOTQyLCAKLSAgICAxMjY0NjksIDExOTQ2LCAwLCAzMjU3LCAwLCAxMjMwNywgMTg0NSwgOTgzMTU3LCA0MzUyNiwgMCwgMCwgMTg4NiwgNDIzNDIsIAotICAgIDEwMDg5LCA4NzAsIDc2NDgsIDM0OTksIDg2MDksIDc2NTIsIDg3NiwgODcxLCA4NzcsIDAsIDg3OCwgNDIwMTUsIDg3OSwgCi0gICAgNDM2OTIsIDQ1NjMsIDAsIDAsIDc1OTEsIDY1ODg3LCA4NjcsIDk1MjAsIDg3MiwgMTI2NjA3LCA4NjgsIDg3MywgNzY0MiwgCi0gICAgMCwgODY5LCA4NzQsIDc2NDQsIDEyMDY3NCwgODc1LCA3OTAsIDEyODMwMywgMCwgMCwgMCwgNjYxODIsIDk4MzI1MCwgCi0gICAgNTQyOSwgMTk1MDU1LCA2NjE4MCwgMTI2NDgwLCA2NjE4MSwgNjg0NTIsIDk4MzI4MSwgOTgzMjQyLCA0MjA2NywgMCwgCi0gICAgNTQzMywgMTA2NTcsIDc5MTEsIDE5NDYyMiwgMTU0NywgNjYxNzYsIDQyMDEyLCAxMjA1NzYsIDU0MjUsIDQ5NzcsIDk5OTksIAotICAgIDUzMTcsIDU0MjMsIDQ2MTEsIDAsIDY3NjM3LCAwLCA5Njc5LCA3NDEyMiwgMCwgMCwgMCwgNjYxOTQsIDQ0MTgsIDY2MTg0LCAKLSAgICA0NjI4LCA0MjQ1LCAxMTk2NDgsIDAsIDAsIDE4NTEsIDAsIDEyNzE4OSwgMTE5MDgsIDAsIDkzNjAsIDExODg5NywgCi0gICAgOTgzMjcwLCA0Mjc3NiwgNjYxODcsIDEyODM3LCA4ODI5LCA3NzExLCA5MjcxNCwgMCwgOTIzMjEsIDQzMzE4LCAwLCA4ODA5LCAKLSAgICA2OTg4MSwgMCwgOTgzMTQyLCAxMjA2MDQsIDk4MzA1MiwgOTgzODczLCAwLCA5ODMyNjIsIDAsIDAsIDc0MjcsIDk5NTgsIAotICAgIDQ1ODgsIDQzNjgwLCAwLCA3NDQ4NCwgMTk0OTY4LCAyNDMzLCAwLCAxMTk2MjIsIDMzNTIsIDc0MzYzLCA5ODM4NzYsIDAsIAotICAgIDc5MywgNzQ0MDQsIDAsIDMwNSwgNTY3LCA2NzY2MiwgODQyLCAxMjg1MTksIDgyMDgsIDAsIDQxNjk1LCAxNjQ3LCAKLSAgICAxMTg4NzcsIDAsIDc4MzcsIDkxNzYyNSwgODE4LCA1MzM3LCAxOTQ2MjgsIDkxNzYyMSwgNDEzNzYsIDExOTk3OCwgCi0gICAgMTI2NTc2LCAxMjA1OTQsIDc0MDg2LCA5MTc2MTUsIDkxNzYxNCwgOTE3NjEzLCAxMDk3MywgNjYzNTksIDEzNzIsIAotICAgIDEyNzE3MiwgOTE3NjA4LCA0OTY5LCAxMjU0LCA5MTc2MDUsIDkxNzYwNCwgOTM5NjcsIDkxNzYwMiwgNjUyMjgsIDc4MjIxLCAKLSAgICAxMjY2MTIsIDAsIDI4NDAsIDAsIDExOTk4MiwgOTgzOTMwLCAwLCAzMjQ1LCA5MDY4LCA2ODE5NCwgNjQ3MjUsIDAsIDAsIAotICAgIDEyOTkxLCAwLCAyNjUxLCA2ODAxNiwgOTgzMjU3LCA5MTc2MTEsIDEyNzAyNiwgMTI4ODgzLCAwLCAwLCA0MzY0OCwgCi0gICAgMTIwODEyLCAwLCA0MzMyMiwgOTI2NjIsIDAsIDAsIDY0MzcyLCA5MjY5OCwgMzIyNiwgNjU1LCA3NTIsIDc0NTcsIDc0NTYsIAotICAgIDc0NTIsIDMyODUsIDEyODc3OSwgMTI3ODIxLCAxMTk5ODgsIDY1NjEwLCAyMzkxLCAwLCA5MjI0OCwgNjcxLCAyNTAsIAotICAgIDc0MzQsIDYxOCwgNjY4LCA2MTAsIDQyODAwLCA3NDMxLCAxMTUyLCA0MjgwMSwgNjQwLCAxMjA2NjYsIDc0NDgsIDc0MzksIAotICAgIDYyOCwgMzkwNSwgNzM4MTAsIDAsIDEyODI2NiwgNjQ3NDksIDY3ODUwLCAyMTA3LCAwLCAwLCA0NjA1LCAxMjgxNzQsIAotICAgIDk4MzE5MiwgNDMzNzIsIDY1OTQ1LCAxMjg4MzgsIDAsIDExOTU5MCwgMCwgMCwgMCwgOTg3LCA2OTI3LCAxMTU3MiwgCi0gICAgNDIyNjEsIDExNDY0LCAzMzY1LCA5OTcxLCAwLCAwLCAxMjgyOTcsIDAsIDAsIDAsIDAsIDExMzM0LCA0MzMyNiwgMTI2MDksIAotICAgIDExNTE5LCAxMTUwMywgNTUzMCwgNTIxMCwgMCwgNDYyNywgOTgzODgzLCA1MjA4LCAwLCAxMjg4NDIsIDEwMzMyLCA1MjE4LCAKLSAgICA3OTc2LCA5MTU2LCAwLCAzMjQ0LCA1NTI5LCA2OTY0NywgNzM4OTQsIDEyODg1MiwgNTQzMiwgNjQ5NjUsIDU1MjcsIAotICAgIDc0MDMzLCAxMDUxNiwgNzc5MCwgNTUyOCwgMCwgNDIxNDAsIDEyMDI4MSwgMCwgMCwgNDM1NDUsIDk4ODcsIDAsIDQwMDAsIAotICAgIDc0MjksIDc0MjgsIDY2NSwgNzQyNCwgMzIwNiwgMTIwMjc4LCA3ODg0LCAwLCAxMjg1NjYsIDkxNzk4OSwgMTI4NjY2LCAKLSAgICAyMTEsIDI1MDksIDEyODg1OCwgMTIwNTczLCA2ODY3MiwgMzIyMCwgNDIyMzUsIDAsIDEwNjkwLCA4OTUxLCA1MjE0LCAKLSAgICA0MjQ3NCwgODExOCwgMCwgNzA0OCwgNDU5MCwgMTI3MjU4LCA1ODUyLCAwLCAwLCAxMjcyNTksIDE3MDgsIDAsIDk4MzE2NSwgCi0gICAgMjYyMywgMTE5NDMsIDAsIDY5MjI2LCAwLCA0Njk4LCA2NjUwOSwgMTA2NiwgMTE5OTIxLCA0NzAxLCA5ODM4NjcsIAotICAgIDEyMDI4NSwgNzQyMjUsIDk0MTExLCA4MjY3LCAwLCAxMjcyNjUsIDAsIDc1MTYsIDAsIDI2MjUsIDk4Mzk2OCwgODAzNCwgCi0gICAgNzQzMDksIDAsIDM2MzEsIDEwOTU1LCA3ODUwLCAxMjAyOTMsIDg0MTYsIDAsIDAsIDAsIDQzMzg0LCAxMjY2MCwgMCwgMCwgCi0gICAgMCwgNzQ4NTAsIDQxMDY5LCAwLCAxMjgxNTYsIDEyMDk5LCA0MzEwLCAxMDAzMiwgNjI1MiwgNzEzLCA3OTkwLCAwLCAzOTkwLCAKLSAgICAwLCA5ODMyNTQsIDY2MzY4LCA1MDE3LCA2NDk1NiwgNzA3MSwgMCwgMTE5MTQ0LCAxMDMwLCAxMTg4MDAsIDk4MzEyMCwgCi0gICAgOTUxMywgNDEwNTksIDkzNTcsIDAsIDE3NzMsIDAsIDEyMDM1MCwgMCwgNjMzOSwgNzc0NSwgOTg0NCwgMCwgNjQ2NTAsIDk0LCAKLSAgICAxODgwLCA3NDc2NiwgOTgzODI5LCA4OTA4LCAwLCAxMjg3MDcsIDY1OTEzLCA3ODQ3MCwgMTA3NTIsIDEzMDAzLCAwLCAKLSAgICAxMjY1NzIsIDQxMzA3LCA4NzMyLCAxMjAzMzgsIDAsIDE3NTcsIDY5NjQsIDQ2OTYsIDAsIDEyMDMzNSwgNjQ3ODUsIDczOTQsIAotICAgIDM2NDEsIDU0MTksIDEyODA1NSwgMCwgMTI3ODgzLCAwLCAxMjAzNDQsIDQzOTg4LCAwLCA4NjEwLCA0MzA2MiwgNzU5MiwgCi0gICAgODU2LCA3NDI5OSwgOTM2LCAxMzI4OSwgNjk4OTQsIDQzMTcxLCAxNDU5LCAwLCA2NTI0MywgNzg2MzgsIDE5OTUzLCAwLCAKLSAgICAxNTA0LCA3MDA2NCwgMCwgMTI5MTMsIDc0MjA2LCA3NTI5LCAwLCAxMjg2OTksIDk4Mzk0OCwgMTIwNzgyLCA0MTEzLCAwLCAKLSAgICAyMzcyLCAzMzYsIDAsIDc1MDksIDEyMTUyLCAwLCA2ODIsIDY2NDU4LCA0MTUwNSwgMCwgNjQ3NDMsIDEwNTkzLCAxNzAzLCAKLSAgICAwLCA5ODM5NDYsIDgwMzMsIDY5OTUzLCAwLCA5ODEwLCAxMjcyNjksIDAsIDEyOTcwLCAwLCA0MjM1MSwgMTAxMDksIAotICAgIDkxNzYyMywgMCwgMTk0NjkzLCAwLCA5MjY5MCwgMCwgMCwgNzQyOTEsIDE5NjUsIDcwNjksIDQzMzEyLCAwLCA3Mzg4NywgMCwgCi0gICAgMjA4NywgNjQzNzAsIDYzMTQsIDQxNzE0LCA4NTAxLCAwLCAwLCA3NDIzOSwgNDEzMTcsIDkyNjE0LCAyMDkxLCA3NDU0NSwgCi0gICAgMjA5MCwgMCwgOTM1MywgNzExNywgMjA3NywgNzc4ODYsIDAsIDEwNDk4LCAyMDgzLCA3Nzg4OCwgMCwgMCwgMTE5MjM2LCAKLSAgICA2MzQsIDAsIDAsIDAsIDY5Nzc5LCA0MTY1LCA4NzQ2LCAwLCA5NjU0LCAxMjg1NiwgNjkyNCwgMCwgNzA2NiwgOTgzNzEwLCAKLSAgICAwLCAxMjgxMzUsIDQxMDM3LCA0MjY5MiwgNzc4NiwgMTI5NTksIDQxMDM5LCAxMjc0ODMsIDAsIDY4MCwgMjMwMiwgCi0gICAgMTI4MjAwLCAxMTgxLCA3MDU2LCAzMTc0LCAxMjY1MTYsIDAsIDkyNjY4LCA2NTY2NSwgMTI3Mzc1LCAxMjY1MDYsIDY5MjAsIAotICAgIDAsIDkyMjk1LCAwLCAxMTg5NjUsIDAsIDY0NjQ0LCAxMjY5ODEsIDc0MTE5LCAwLCA0MTAyOCwgMCwgNjIzMSwgMjYxMywgCi0gICAgNjUzMDIsIDQwOTg5LCAwLCAxOTQ2OTYsIDAsIDQyNzYwLCAwLCA5ODM1NjYsIDAsIDQwOTg3LCA0NjY3LCAwLCA5ODM5MjMsIAotICAgIDg4MjgsIDAsIDAsIDEyNDYsIDQ3NDYsIDAsIDAsIDExMDIxLCA0NzQ5LCA5MjY3NSwgMCwgOTIxLCA0NzQ0LCAwLCAxMjcwMiwgCi0gICAgMjQyLCAwLCAxNTY2LCA4MjE3LCAwLCA2NDY1MywgNzgzODYsIDEyODEyMSwgNzQwMzYsIDc0NTA1LCA0MzI3NCwgNTMxMywgCi0gICAgOTUxLCAwLCAwLCA5ODM4NTgsIDc2MDQsIDk4MzI4MiwgNDAwOSwgMTI3ODE2LCA5ODM3MDEsIDEyMDU2MiwgMCwgOTgzNzExLCAKLSAgICA2NDg2MCwgMTE5MTM4LCAxMTkwNjksIDAsIDEyNzM3MCwgNDA0OCwgOTgzNTk4LCAwLCA3MDAyNCwgMTY0NiwgNzc4OTAsIAotICAgIDY0NTM0LCA3Mzk5NSwgMTIwNzA1LCAwLCAxMTk4OTAsIDI1NzksIDExOTkwNSwgMzE3NywgMTEzNTcsIDkwOTksIDQxMDcsIAotICAgIDM0NDEsIDExOTg5NCwgMjk3NSwgNzQ0NDIsIDk4MjIsIDk4MzkyNiwgNTUyMjAsIDEwMDg0LCA3Mzk0MywgMTE4ODQwLCAwLCAKLSAgICA5MTc1NjIsIDE5NDYxMCwgMzM5OSwgOTg1MSwgOTgzNzA4LCAxMTkwOSwgOTA1OSwgMCwgNzY4NywgMCwgNjc4OSwgMCwgMCwgCi0gICAgMCwgNzEzNjcsIDAsIDAsIDE3NzcsIDkxNTEsIDExMzcsIDY5NzY3LCA3NDksIDQyMzY2LCAwLCA1Mzg1LCAxMjg1NzQsIAotICAgIDEyODIxOCwgMCwgMCwgNTk4OSwgMCwgMCwgMTI4MDkxLCAwLCA0MTY4NSwgNjkyMjMsIDAsIDk3NjksIDQxNjg0LCAKLSAgICA5ODMyMTQsIDUxOSwgMCwgMTE3NDAsIDU3NjYsIDAsIDAsIDI2MDAsIDg4NDgsIDEyMDEzOCwgNDEyOTcsIDAsIDM2NjYsIAotICAgIDc0NDczLCA0MTMwMCwgNzQ0NjgsIDY1MTYwLCAwLCA2OTY4OCwgNjk3NzEsIDc0NDc5LCAwLCA2NTU4LCAwLCAwLCA2OTc2NSwgCi0gICAgMTIwNzUwLCAyNTIsIDAsIDQxMzAyLCAwLCAwLCAwLCA2OTc2MywgMCwgMTE3MjksIDg3MTksIDkwNjAsIDAsIDEyMDEzOSwgCi0gICAgMTA3NjEsIDAsIDAsIDAsIDExODc5MiwgMTE3MzQsIDk4MzIyMSwgMTE3MzAsIDAsIDk1OTMsIDU3NTcsIDI0MDMsIDY0ODA4LCAKLSAgICA1NTI3NSwgMCwgMTE3MjgsIDQzNTcyLCAwLCAwLCA3NzY0LCA5ODM3MDUsIDExMDk0LCAxMjA4MjUsIDAsIDAsIDQyODIsIAotICAgIDgyOTgsIDAsIDAsIDAsIDAsIDAsIDY0NDQ5LCAwLCAxMjY2NTAsIDYzODU0LCA4NDU2LCAwLCA3NDc4MywgNjU2NzAsIDAsIAotICAgIDc4MjUwLCAwLCA3Nzc0LCAxMDYwNywgOTc5MiwgMCwgMCwgMCwgMCwgMTIwNzY0LCAwLCAxMDAxOSwgNzQ3NjIsIDAsIAotICAgIDM0NTgsIDQzNjUsIDcwMDUzLCA5ODM3MDMsIDM2NDcsIDAsIDI2MDIsIDEyODM0MSwgMCwgMTk0NzA3LCA0MTEzNSwgMCwgMCwgCi0gICAgMCwgNjQ2MzEsIDE3MiwgNDk3MSwgNDEyMTksIDQxMTM3LCAxODg5LCA3MjM4LCA2NTQ1LCAxMjY0NzYsIDkyMTkzLCA3NTk3LCAKLSAgICAxMDUyOCwgMCwgMCwgMzczMiwgNzM5MTAsIDE5NDU4OCwgNTM0NCwgMCwgNDMzNjYsIDQzMzYzLCA5MDYyLCAxMTkyNTIsIDAsIAotICAgIDAsIDAsIDY0NDc5LCA5MjMyLCA5MjU5NiwgMCwgMCwgMTk0NzEyLCAxMDkwMCwgNDE1MzEsIDEyNjMsIDM3MjAsIDEyMDQ4LCAKLSAgICAwLCA2NDI5MiwgNDE1MjQsIDcyMjcsIDExOTYzNSwgNjA5OSwgNDE1MzQsIDAsIDEyNzM1NCwgMTI3MzQ1LCAyOTksIAotICAgIDkxNzk1NywgODUyNSwgMTI3MzQ3LCAzNTI0LCA5MTc1NjUsIDg4MzEsIDEyNzM0OSwgOTI1NjQsIDMwNzUsIDY3ODY3LCAKLSAgICAxMjczNTIsIDAsIDY2MzYyLCAwLCA2NDM1MywgMCwgMCwgNTg0NSwgMCwgMCwgMCwgMjU4MSwgODIwMCwgNjUxMTQsIAotICAgIDY4NDYwLCAwLCA0MzI4MywgNTU1MSwgMCwgMTIwNzM1LCAwLCA2MzQwLCAxMTg4NTUsIDAsIDc4MTM0LCA4NjgwLCA3MjA0LCAKLSAgICA3MDA2NSwgMjU4OCwgMjkxNCwgNzAxMSwgNTUyODEsIDAsIDI0NzEsIDE5NDYzMSwgMjg4MywgMjc0OSwgMTE5NTYzLCAKLSAgICA3Mzc3NCwgMTA5MTMsIDAsIDAsIDg2NjYsIDY3NSwgNDI0OTMsIDAsIDQzNTcxLCAwLCA2MjE5LCAwLCA5OTgwLCA0MTIzMiwgCi0gICAgMTA5MjgsIDAsIDQxMTUzLCA0MTIyOSwgMTE4OTY3LCAwLCAzNzM4LCA5NDAxNiwgMCwgMTI3MTEsIDMxODEsIDY2MjEyLCAKLSAgICA3NDI4OSwgNjg0NzIsIDQyODU3LCA4MjYyLCA5ODMzNzEsIDAsIDk4MzIyMCwgMCwgNDIzNDcsIDEyMDkyLCA5NjE1LCAKLSAgICA3MjM0LCA3NDA0NywgOTgzMDg4LCAwLCA0Mzc0NCwgMCwgMCwgNzM4NDYsIDI5MzQsIDEyNzIyLCAxMjA3NjIsIDkyMiwgCi0gICAgNDM5ODMsIDc0NTA3LCA5ODMxMjYsIDc0NDYxLCAzMjE4LCAxMjA0NzEsIDc0MjkwLCAxMjA0NjksIDY0NTYyLCAxMjA0NzUsIAotICAgIDg1NjksIDExNDA0LCAxMTkzMiwgNzM3MjgsIDMyMTQsIDEyMDQ2MSwgMTIwNDY4LCAxMjEyOCwgMzIwNywgNjU0ODYsIAotICAgIDc4NzI5LCAxOTAxLCA3ODcyNywgMTI3MzI2LCAxMjA0NjAsIDc0MjUsIDMyMDUsIDY4MDAzLCA3ODczNywgNzg3MzYsIAotICAgIDc4NzM1LCA0MzM4MywgNjk5NDAsIDY1NDU5LCAyNjA2LCA3ODczMCwgNzM4OTcsIDAsIDExNDk2LCAxMTczLCAwLCA0MTI3MiwgCi0gICAgMTE5NjYxLCAwLCAwLCA5ODMzMTMsIDEyMDczNywgMCwgOTgzOTYyLCA5ODMzMTIsIDM3OCwgMjYxMCwgMCwgNjUwNzksIAotICAgIDk4MzMxNywgNjU2OTUsIDEyNjU1OSwgMzcsIDcwNjgsIDAsIDEyMDQ4MCwgMTIwNDc5LCAzMjA5LCAxMjA0NzcsIDAsIAotICAgIDEwNjM4LCA5NzY4LCA2OTk1MiwgMTE5OTA5LCA5ODMzOTEsIDAsIDAsIDAsIDAsIDY1NTEwLCAwLCAwLCA1MjMzLCAKLSAgICA5ODMzMjcsIDY0NzkyLCA5ODMzMjYsIDAsIDEyNjYzMywgMCwgNzA2MCwgOTg0NywgMTIwMTQ0LCAxNjg1LCA1OTUsIDAsIAotICAgIDczOTcxLCAxMjkyLCA4OTQwLCA3MzgwLCAxMTA4OCwgMCwgMTAwMDQsIDEyNjk5NywgMCwgNjU0MSwgMCwgMCwgMCwgMzI0MywgCi0gICAgOTAxNCwgNTYwNiwgMCwgNTM4LCA2NDYyMCwgNTYwMiwgODQ2NywgNzQzOTEsIDY1NDcsIDEyODEzMiwgODIwMywgNzg0ODgsIAotICAgIDk4MzA5MCwgODQ1OCwgNjUyMTEsIDg0OTUsIDExOTkwNCwgMCwgOTE3NTUyLCA3NzksIDc4MzE0LCA2NDM2NywgMjQ2NSwgCi0gICAgNjk5MDEsIDgxOTMsIDU1Mjc5LCA5NzMwLCA5MjgwLCAwLCA3MDY1LCA3NDE1NSwgNDM0NiwgMCwgNzM3OTgsIDUwNCwgMCwgCi0gICAgOTI0MTQsIDg5ODIsIDAsIDAsIDAsIDc4MiwgMCwgMTA4ODMsIDAsIDE5NDg1MiwgNzMyLCAzNzM3LCAxMjcyNTMsIDE1NDgsIAotICAgIDY4NjUwLCA5MjUwNywgMTgzMiwgNTYwNCwgNTczNSwgNDExNDEsIDExOTAyMCwgNDM3NiwgMCwgMTE3ODcsIDM3NDUsIDAsIAotICAgIDAsIDQyODg4LCA2NTcxMiwgOTgzMjk2LCAzODY5LCAxMTkzNywgNTcyNSwgMTI3NTM5LCAxNzgzLCA2ODY0OCwgNTcyOCwgMCwgCi0gICAgMCwgMCwgMTE5MTgsIDY2NTY3LCA1NzI0LCAwLCA1NzI3LCA3ODUyMSwgMCwgMCwgNzY0LCAwLCAxMjgxMTYsIDQzNTMxLCAwLCAKLSAgICA5MDMzLCAwLCA0MjUzMiwgNjIyMywgMTEwNDIsIDEyMDc0OSwgMTE0MjMsIDAsIDExOTg2MSwgNzEzNDQsIDQzNDY1LCAwLCAKLSAgICAxMjgyNjcsIDY1NTksIDY0NTU3LCA3MTM0OCwgOTI2NDksIDEyMDY0OCwgNDMwMTksIDQzNDc3LCAxMDIzOCwgNzQ0OTEsIDAsIAotICAgIDQzMzc3LCA5MjI4MiwgNzEzNDYsIDE0NzgsIDk3ODMsIDExODI1LCAyNjA3LCA2NDc0MCwgMCwgNzczOSwgNzQ1NDMsIDAsIAotICAgIDAsIDAsIDYxMzIsIDAsIDYzNzY1LCAwLCA3MDA1OCwgNDExNDQsIDAsIDkyNDM4LCA0MzUzNywgNjc2MSwgMTAwOTMsIAotICAgIDQzNjksIDkxNzc5MSwgMCwgOTgzMTQ4LCA4ODIwLCAzOTQ3LCAwLCAwLCAxMTUxNSwgNTI2LCAxMjgxMDMsIDQxMjk1LCAKLSAgICAxOTQ2MDMsIDkxNzc4NSwgMTk0OTMyLCAwLCA3Njg4LCA5MTc3ODYsIDc2ODYsIDgyODgsIDExODE1LCAwLCAwLCA5ODMzNzQsIAotICAgIDE1NDMsIDM3MTMsIDQxMjIxLCAxMjQyMywgNDIyODEsIDkxNzc4OCwgNzQwMjQsIDEyMjkzLCAwLCA2NDM1NywgMTE3OTQsIAotICAgIDQyMDgyLCAwLCAxNzM3LCA4OTg3LCA0MjA4MSwgMCwgNzIwNSwgMCwgOTMzNSwgMTI4NTAsIDExOTg3MCwgNjU1MywgNzA1NSwgCi0gICAgMCwgODI3NywgMCwgMCwgNTQ3NSwgNzQ3OTUsIDY3ODAsIDAsIDAsIDEyOTkwLCAxMTYwLCA0MjA4NCwgMTE5NjUwLCAKLSAgICA0MTIxNywgMTE5NjYwLCAxMDAxOCwgMzYwLCAwLCAwLCA2ODE3NiwgNTg2MywgMzEzNywgMCwgNDE0NywgOTgzMTcwLCAKLSAgICA0MTIxNiwgNzg0NCwgMjYxNiwgMTE5MTkwLCA2ODQ2MSwgNjUyMzQsIDk4MzI4NiwgMTMwNzYsIDMxMzUsIDk4MzI3OSwgCi0gICAgNzgxNDMsIDExOTEzOSwgMzE0MiwgOTI0NTEsIDk0MDY4LCAxMDgxOSwgMTE5NTgwLCAxMDE4MywgMCwgMjYwOCwgMTQ3MCwgCi0gICAgNzM5NjcsIDk0MDA4LCA2MjI3LCAwLCAxMjcxNzMsIDY5NzQxLCA5ODM1ODIsIDYxNjMsIDk4MzU1OCwgMCwgMTI3MzE0LCAwLCAKLSAgICAwLCA4NjAzLCAwLCAxMTk4NjYsIDMzMDYsIDEwODc2LCA0MzM5MiwgMTE5NTczLCAxMjc5MzEsIDU3NTEsIDAsIDYyMjIsIDAsIAotICAgIDAsIDEyMDg2LCA3NDAzLCAxNjAwLCA2NDMwOSwgNjQ5MzksIDAsIDY0NzgzLCA5MjY1OCwgMTEzMTAsIDAsIDg4ODIsIDAsIAotICAgIDAsIDI1NzAsIDcwMjEsIDAsIDAsIDQzMTEwLCAwLCAxMjM0LCA2NTQwLCA2OTc0LCAwLCAwLCA5ODMyMDksIDUwMDIsIDAsIAotICAgIDQxMjg2LCA2OTk0NiwgMTI3MDE5LCAwLCA0MzU4NSwgMCwgNjU1MSwgOTgzOTUzLCAxMjgyMjksIDAsIDQxMjg5LCAwLCAKLSAgICAxOTQ2MDIsIDAsIDg5NzcsIDYwMiwgMTIwODE0LCAwLCAxMjg3NzgsIDEyODY2MSwgMCwgOTgzMzY3LCA0MTI3OSwgMCwgMCwgCi0gICAgMCwgMTEwODEsIDQzNjE1LCAwLCAwLCAwLCA5ODM2MTIsIDEyNzI3LCAwLCAwLCA3ODM5NywgOTQ3NSwgNzExMiwgNjUxMDUsIAotICAgIDAsIDk2MzMsIDEwODg2LCA0MzU5MiwgNzgzMSwgOTgzODIwLCAxOTQ1NzEsIDAsIDczOTE1LCA4MDc2LCA0MzA0OCwgODI5MCwgCi0gICAgODI5MSwgNDMwNTEsIDkyNTcwLCAwLCAyNTk2LCA0MzU4NCwgMCwgMTMxMTMsIDAsIDEyNzc1NywgMjM5MywgNzA1OCwgCi0gICAgOTA4NywgNzQwNjcsIDY4NjczLCA0MTU3NCwgNzgzMzcsIDAsIDc0MDU4LCA2Mzc2LCAwLCAwLCAwLCAwLCA5ODU0LCAKLSAgICAxMjc3NDgsIDY0Njk2LCAwLCAxMjgyMjAsIDAsIDY5OTQsIDAsIDE3MjAsIDAsIDAsIDAsIDY1MjksIDcwNjMsIDk4MzE4MiwgCi0gICAgMzc1MSwgOTEyMCwgOTgzNDc3LCAwLCAxNzk4LCA3MDksIDAsIDEzNTQsIDE4NzYsIDEzMTUyLCA2NTU3LCAxMjQzMCwgCi0gICAgODEzNywgOTQwOTgsIDkyNjQyLCAwLCAwLCAyNDUsIDEyODA5NywgMTE0NTYsIDQxMjMzLCA3MDcwLCAwLCA5NDA0NiwgCi0gICAgNjEzNiwgOTE3NjA5LCA2NTY3NywgODY4MiwgNDEyMzUsIDkyNTk1LCA0MjA0NSwgOTgwNCwgMTE4OTYzLCA0MzIsIDM1OTUsIAotICAgIDE5NDk0NSwgNjU0MzcsIDAsIDc0NDU1LCA0MjM5OSwgMCwgMCwgMTI4Mjc0LCAwLCAxMTk2NTgsIDAsIDAsIDAsIDc3ODk0LCAKLSAgICA4Nzk3LCAwLCA5MDUyLCA2NDg4OCwgNzE2NywgMjM1NiwgOTUsIDc0Nzg0LCAxMDU4MCwgMCwgNDIyODYsIDAsIDY0NjQwLCAKLSAgICAwLCA5NDEwOSwgMCwgNzQxMzcsIDcwMDM1LCAxMDA2MywgMTI2NTIsIDEyMTk5LCA5MjQ4MCwgMCwgMjU2NiwgMTE5NzEsIAotICAgIDk4MzcyOCwgMCwgMTA2NSwgMCwgMCwgNDM0MDAsIDI1NzYsIDY2Njk2LCA5Mzk5OSwgMCwgNDM2MDQsIDAsIDAsIDc0MDgyLCAKLSAgICA1MTQsIDc0NTAyLCA3MDAzMiwgMjkyMSwgNDMyMTUsIDY0NDkzLCA1NzcyLCAxMjk2OCwgNzAwNTUsIDE5NDk0NCwgNzQ1ODAsIAotICAgIDQzMzk4LCAyNTgwLCA5ODM4MDEsIDQxMzQxLCA0MTIyMywgNjU2NCwgMTQ2MywgNDEzNDIsIDAsIDUyOTMsIDcwMDIwLCAwLCAKLSAgICAzNzMzLCAxMTM0NiwgMCwgMTIwNTQsIDAsIDc0MDk4LCA0MjgyNywgMCwgMTMwOTEsIDAsIDAsIDAsIDkxNzkxNSwgMCwgCi0gICAgMTI3MDI1LCAwLCA3NDgyMSwgMCwgOTgzNzI0LCAxMTkwNDIsIDAsIDEyNzg2NSwgMTMwOTAsIDY2NjQzLCAwLCAxMjcwLCAKLSAgICAxMTMyLCA0MjM2MCwgMCwgNzQwOTYsIDY2NjU1LCA0MjU2OSwgMTI3ODI0LCAwLCA2NDc2MSwgMCwgNDEwMjEsIDg1MTAsIAotICAgIDQyNDMyLCAwLCAwLCAxOTQ3ODIsIDAsIDY0NDk2LCA3NDEwOSwgNzAwMzAsIDk5MTUsIDAsIDk4MzIxNiwgNzA2MSwgCi0gICAgNDEzMzYsIDM4NTQsIDY5NzAwLCAxMzE0MSwgNjg0MTMsIDQzNDAxLCA0MjMxOSwgMTMwODIsIDAsIDcwNjcsIDY4MjIxLCAwLCAKLSAgICAxMjczODMsIDEyNzE3MSwgMCwgMCwgMTI3Nzk3LCA5MDI5LCA0MzU0MywgMTE5MzE1LCAyMzUzLCA2MzA4LCAwLCA3NDc5MiwgCi0gICAgMjYxMSwgMTE5MTg2LCAwLCAwLCAwLCA0MzY2NCwgOTIzOTksIDY2NjI3LCAwLCA0NDg0LCA4NTA5LCAxMTg5NzYsIDExMDY2LCAKLSAgICA2NTIzMywgMCwgNDEyMjQsIDQxMDE3LCAwLCAzNzQ3LCAxMDUyMiwgMCwgMCwgMTY5MSwgNDEyMjYsIDAsIDEyMTA3LCAKLSAgICA3MTAwLCAxMDkwNSwgNjUwMTAsIDE5NDk4NiwgNjk3LCA2NjAxOCwgOTI4NCwgNDI0NCwgMCwgMCwgOTI2NDQsIDEzMTIxLCAKLSAgICAxMjAwMzYsIDAsIDEyMDEwLCAxMjg1NzMsIDEyODIyMSwgMCwgMCwgMCwgMTI3MTkzLCA2NTgxNiwgNjgxMTEsIDAsIAotICAgIDEyNzkzMywgNjU2NjgsIDkyMjU3LCA2NjE4LCAxMTg3ODQsIDY2MzY1LCAwLCA0MjIzNCwgMTI2NDgsIDc4MTEwLCA3MTIzLCAKLSAgICA3MDAzOCwgNTc4NSwgOTE5OCwgOTc2NCwgNDEzMTYsIDY1ODc3LCA3MzgzLCAxMzIzMCwgNDEyOTksIDAsIDAsIDY4MzY1LCAKLSAgICAxMjgyNTgsIDAsIDAsIDAsIDEzMTIyLCAwLCAxOTEsIDcwMDYwLCA4NTg1LCA4MDAwLCA2NDQxMSwgMTIwNjUyLCA0Mjg4OSwgCi0gICAgNjQ4NTAsIDQxMDcyLCA0MTU3OCwgMCwgNDE1NzcsIDAsIDEwMDAyLCAwLCA2NTMzLCA3MzgwMiwgNDE1NzAsIDAsIDY4MywgCi0gICAgMzk2LCA0MTU4MCwgNjgxNDYsIDAsIDEyOTAxLCA0MzA1OCwgMCwgMzQzLCA3MTI5LCA0MjY4MCwgNDEzNjAsIDc4MTU0LCAwLCAKLSAgICA0NzQzLCAwLCAwLCA3NDA0MCwgNzQxMDgsIDg3NDMsIDE3MjQsIDE0MzMsIDExOTMyMiwgMCwgMzczOSwgNjI2MywgNzEzNDksIAotICAgIDAsIDM5NjQsIDY1OTIsIDAsIDEyODY5MywgNjYwNDAsIDAsIDQyNTY4LCA2OTgwNiwgMTI4MTEzLCAxNzc4LCAzOTU2LCAwLCAKLSAgICA0MjA3MCwgNjU2MywgNDMwNzUsIDkwMTgsIDk0MDA2LCA5ODMzODgsIDEyMDY3LCA0MTMxMiwgMCwgNTU0NywgNzQ1MzEsIAotICAgIDEyNzk2OSwgMCwgODE3NSwgMCwgMjg0LCA4MTA4LCA5MzQsIDAsIDc0MDAxLCAxNzMsIDY2NDYwLCA3MTc0LCA5MjcwMywgCi0gICAgMTE4ODIyLCAxNzUwLCAwLCA0Mzk0LCA2ODM2OCwgMTgwNywgOTgzODc5LCA5MjI5OCwgMCwgNTg4OSwgMCwgNzE4MCwgMCwgCi0gICAgMTE5MTQ1LCAwLCA5MTc1NTgsIDQyNDcxLCA2OTgyLCAxNzIxLCA0NDAyMiwgNzg5MSwgNDIyNDMsIDQyMTYwLCAyNTgzLCAKLSAgICA0NTEyLCAxMTkzNjAsIDY1MjMwLCAxMjgxMDksIDAsIDAsIDM4NTUsIDAsIDAsIDAsIDAsIDc0Mjk1LCAwLCAwLCA5MjQxNiwgCi0gICAgMzk3NSwgMCwgNzQwODcsIDAsIDEyNjcyLCAzNzk4LCAyNzAzLCA5ODM1OTksIDAsIDIxMDksIDk3NzQsIDEyNzUsIDAsIDAsIAotICAgIDQxMDk1LCAzOTYyLCAwLCAyOTMyLCA0MTEwMSwgMzk1NCwgNjQ1NywgNDUxMywgMCwgMCwgNzM5OTQsIDczOTkyLCAxNDY4LCAKLSAgICAwLCAwLCA0MTg1MSwgMTI4MjMwLCA0MTg0NiwgMCwgNTUyMzgsIDc2MzMsIDQxODQ5LCA2ODM4NSwgNDMyMCwgMzIyNCwgMCwgCisgICAgMTI4MjUsIDAsIDAsIDEyNzI1LCAwLCAxMjcxMDYsIDc4NjQyLCAyMjMsIDAsIDY5Njc1LCAxMjAxNjYsIDQyNDQ0LCAwLCAKKyAgICA2NDQ5OSwgNjUyNDUsIDAsIDExNzEsIDAsIDY5NzE3LCAwLCAxODA1LCA4NzcyLCA0MzgyMCwgMCwgOTkzMCwgNjUyNDcsIAorICAgIDc4NjE5LCAxMjAxMTEsIDIzMzgsIDAsIDExODg1MywgMCwgNDI2NzYsIDAsIDY0ODAwLCA2NTIzNiwgNjc2NDQsIDY4MTI2LCAKKyAgICAxMjEzLCAwLCA2NDA3NSwgNzk3LCA2NDA3NCwgODczNCwgNDIxMiwgMTI3MzY5LCA2NDM4NywgNDExNSwgMCwgNTAwNSwgCisgICAgNjQwNzAsIDY0MDczLCAxMDY3OSwgMCwgNzc5NTQsIDk0MDIsIDY0Mjc2LCA0MjYsIDAsIDAsIDgyNTEsIDEwMTM2LCAKKyAgICA2NTQzNiwgMCwgMjEyMCwgNDMzMDIsIDEyMjQsIDAsIDY1NTc2LCA3NDE5MiwgMTA3MDEsIDE3NjQsIDMxMDEsIDEyNzgxNSwgCisgICAgMTI4NTgsIDEyMDE1OSwgMCwgMTEzNzMsIDYzNzgsIDEyNzg1OSwgMTIwMTAzLCA4NjYzLCA5MzEyLCA0MTY0NCwgNDUzOSwgCisgICAgMjEyOSwgMCwgOTIyMiwgOTgzNzM4LCAwLCA0MjU5LCA5MDkyLCA3NDU2NywgNDE5NjEsIDAsIDEyNzI0LCA2NjM1NywgCisgICAgNDIzMzEsIDY0OTM1LCAwLCAwLCAxMjkzLCA3OTQ3LCAyMTMyLCA5ODM3NjcsIDc0NTkzLCAxMjAzMDgsIDI0NTQsIDQyNzE3LCAKKyAgICAzNjEzLCAxMjg4MzcsIDAsIDAsIDY1ODg4LCA4ODE2LCAxMDk3OCwgMTA4NDAsIDAsIDEwNjY4LCAwLCA0MzA4NywgMTI1OTUsIAorICAgIDEyMDMwNCwgOTgzMTE0LCA4ODIyLCAwLCAxMTU3LCA2NDkwMywgODYzOCwgMCwgMCwgMCwgMCwgNjk4NDgsIDgyMzUsIAorICAgIDEyMDMxNiwgNDQwNSwgMTAwODYsIDEyMDI0NywgMCwgNjkyMTYsIDAsIDY1NDMwLCA3MTMyMSwgNjA3OSwgNjgxNywgCisgICAgMTA3NjQsIDEyNzkxMCwgNjQyOTEsIDEyODA1MSwgOTk4LCAxMjAzMTIsIDExMDYyLCAxMzE3LCA2NDMyNywgMTU1OCwgMCwgCisgICAgMTk5MSwgNzg4MiwgNDIyNTQsIDAsIDQxNzAwLCA1MzAsIDAsIDEwNDI4LCAxMTkzMzUsIDEyMDAyLCAxMTkzMzYsIDU3NDIsIAorICAgIDQzMDc2LCA0NjkyLCA2NDYzMCwgNDE4MjMsIDQwMDcsIDUwMDQsIDExOTMzNCwgNzg5NiwgNzUxLCA2NTk1LCA2NTk2LCAKKyAgICAxMjAzMjUsIDY2MzczLCAwLCAwLCA2NDkwOCwgOTI2OTEsIDYzMTEsIDAsIDEyMDA0LCAxMTkxOTIsIDEyMDQ5LCA0MzEwOCwgCisgICAgMTIwMzI2LCAwLCA0MTcwNSwgOTIxODgsIDY1OTgsIDAsIDY1OTksIDEyMDMzNCwgMCwgNDIxNDgsIDExODgyNSwgNjYwMjcsIAorICAgIDAsIDY1OTcsIDk0MTIsIDgzNDAsIDExODI0LCA2NDc0NSwgMjI4MSwgNjk5MDQsIDAsIDE5ODgsIDU0MDcsIDY3ODY1LCAKKyAgICAyNDMwLCA0MTY3OCwgMCwgMTIwMjQzLCAyMzM2LCA5ODM5MDMsIDAsIDc4ODcxLCAxMjA0NDIsIDk4Mzc2OSwgMTkyMSwgCisgICAgMTA5NDcsIDE5OTI3LCAwLCA2NTQwNiwgMCwgMTk5MTMsIDQyODQsIDEzMjE3LCAwLCA0Mzc4OSwgMTI4NDEsIDkyMjksIAorICAgIDEwOTU2LCA0MjI4NSwgNDE2NzQsIDE5OTY0LCA0MTY3OSwgNjUwODQsIDM1MjEsIDAsIDU3NzQsIDgzMjUsIDAsIDY1NDAzLCAKKyAgICA5ODMwODksIDE4NTQsIDEwNzk0LCAwLCA2NzY2MCwgNjk4NDYsIDAsIDc4MzU5LCA1MjgwLCAwLCA0MzQ0LCAxMjkwNSwgCisgICAgNjU0MzMsIDYwNzYsIDY0NzkzLCA0MTYxMCwgNzY4LCAxMjA3NCwgNDQyLCAwLCA2ODE2MiwgNjQwODEsIDEyOTM0LCAKKyAgICA0MTY4MiwgNjU0MzIsIDQxNjkzLCAwLCA2MDcxLCA2NTQzNCwgMTI3NDY3LCA0ODA0LCA0MDUzLCAwLCAxMjc0NjksIAorICAgIDE5NDY1MywgNDE2OTYsIDQ2NywgNjk4MjMsIDEyNzQ2MywgNjk3OTcsIDE5NDY1MiwgMTI3NDczLCA4NDIxLCAxMjc0NzIsIAorICAgIDY5NjgyLCA0MzcwNSwgNTAyLCAwLCA2NTQzMSwgMTE5MDU2LCA2OTk1NCwgMTIwNDMsIDEzMDMsIDMxNiwgNzM2NCwgMjAyOSwgCisgICAgMjEzNiwgMTE5MjQ2LCAxMTUzMywgNjQzNjUsIDQzNDgwLCA5MjYzOSwgNDg2MCwgMTI2NjQ4LCAxMjc4NzcsIDQyNDg4LCAwLCAKKyAgICA5NTgzLCAxMjg4NDksIDU1NDYsIDgwMTksIDczODU2LCAwLCAwLCAwLCA1NTQ0LCAyMzU1LCAxMjE1MCwgNjU3MjUsIDU1NDMsIAorICAgIDc3OTg5LCA2Mzc1MSwgMTIxMzcsIDU1NDgsIDc3OTg1LCAwLCA2NTcyNywgNjgzODgsIDY1NzI2LCA2MDc3LCAxMjgzNTIsIAorICAgIDY1NDUyLCAwLCAxMTMwMSwgNzgwMTMsIDc4MDA4LCA3ODAxMCwgOTg3NCwgNzgwMDcsIDAsIDEzMTksIDMwNTAsIDY1NDEwLCAKKyAgICAwLCAwLCA3ODAxNiwgNzgwMTcsIDQyODMwLCA0Mzk5NiwgNjY3MTYsIDEyODEzNywgNDY5MSwgOTIyNDIsIDkzNDUsIDYyMSwgCisgICAgOTI3MDksIDEyODIyMiwgMCwgNjU0MTEsIDAsIDQxMTgyLCA3Mzg4MSwgNjU0MDgsIDczODk5LCA3ODAyNCwgOTQ3NCwgCisgICAgMTA1NDUsIDExOTExOCwgMTA4ODcsIDM3ODYsIDY1NDA5LCA4ODk0LCA0MzE3OSwgMTE5NjExLCA3OTIzLCAzNzE2LCAKKyAgICA5MjM2MywgOTk5NiwgODUwOCwgMCwgNzAxMiwgODE5NSwgMTI3ODM0LCA5NTY2LCAwLCAzNzIyLCAwLCA0MTcwNywgODQ5MywgCisgICAgNTQ1LCA5NTc1LCA0MTM3OSwgMTAwNTAsIDEyNzE4LCA2OTg1NCwgODg1OSwgNjgyMCwgNzQzNDUsIDY1MTEwLCAxMjA3NDAsIAorICAgIDAsIDAsIDkxMTksIDI3ODcsIDc5MjAsIDExODgyMywgNDAyMSwgMjAxMiwgNzk4NSwgMCwgMTE5NjYzLCAwLCAwLCA3ODAyMSwgCisgICAgNzgwMjIsIDQxMCwgNzgwMjAsIDE4MDIsIDc4MDE4LCA3NDEwNywgMCwgNDE2NTksIDQxNjcxLCAxODI3LCAwLCA2NDM5NiwgCisgICAgMTAxMjYsIDEyMTE2LCA0MTY3MywgMTIwMzcwLCAxMTQyMiwgNzgxNDEsIDEyMDM3MywgMzg2MCwgMTIwMzY3LCA2ODQxMiwgCisgICAgNDEzNDUsIDEyMDM2MiwgMTIwMzYzLCAxMTc0OCwgNDIxNTgsIDc5NDEsIDExMDc2LCA4NzQ5LCAxMjAzNjEsIDIxMDQsIAorICAgIDY0ODU4LCAzNjEsIDEyMDM1NywgODQ1LCAwLCA0MTU2MCwgMTE5NzAsIDQ1NjIsIDkxNzkyMCwgMjkyNiwgOTE3OTE5LCAKKyAgICA0NTY5LCA3NDEzMCwgMCwgNDM0ODcsIDE5NDYzMCwgNjExLCA3NDEyOSwgNjQ4NzEsIDExODg5MSwgNjU2MjksIDAsIAorICAgIDE5NDg1OCwgMCwgMCwgMTI3NTQ1LCAxMjA1NDMsIDAsIDAsIDYyOTEsIDAsIDc4NjM5LCA0MTY2OSwgNzA5NCwgOTE3OTIxLCAKKyAgICAwLCA5ODM1ODEsIDc0MDU0LCAxMjc3NTQsIDE5NTAyOSwgMCwgODM5LCA5ODMzMTksIDc2OTUsIDg3NjksIDY1MjQ2LCAKKyAgICA0ODI5LCAxOTQ2NjMsIDQ4NTksIDY0NDY3LCAwLCA5ODM5NjMsIDExODk5OCwgNzIwNiwgMCwgNjY0NywgNDM5ODYsIDAsIAorICAgIDY5NzY2LCAwLCA2NDc2NCwgNDIxMCwgOTgzODYzLCAxMjc5MzYsIDgwNCwgMCwgMCwgMTIyOTgsIDAsIDY2NjUzLCAwLCAKKyAgICA2NDkyNCwgMTAwOTEsIDczOTMxLCA5NDY4LCA3NDI0NSwgMCwgMCwgNzQyNDYsIDkyNTAzLCAxMjgzOSwgNjQ2NjksIAorICAgIDkyMjAyLCAwLCAxMjc5LCAxNDI1LCA2MjI0LCAxMTkyMjksIDExMDQ5LCAwLCA5MjY5NywgNDMyMzksIDg0ODIsIDkyNDQwLCAKKyAgICAwLCA1MDMyLCA2OTY3NywgMTE5NDAsIDY3ODg4LCA2NjQsIDEyMDQzNywgNTAzNCwgMCwgMCwgMTI3NTI1LCA0MjcwMiwgCisgICAgNzM4ODgsIDk4MzE0OSwgMTMyOTQsIDY3ODczLCA2NDg2OSwgNjAzMiwgMCwgOTExNSwgNzQzMCwgMTIwMzc3LCAwLCAKKyAgICAxMjA4MTksIDY4Mzg3LCAxMjAxNjgsIDczOTEzLCAxMjAxNzAsIDQxMTYxLCA1NTE4LCA0MTc0LCAxMDk5MywgNDExNjIsIAorICAgIDEyMDE2MCwgNjQ1MjgsIDExNjksIDQzNCwgNDE0MzcsIDE5MDUsIDYwMzQsIDQxMTY0LCA2NDc0NCwgOTUyOCwgMTE4ODY3LCAKKyAgICAxMjg4MDAsIDUyNCwgMCwgNzQwMjksIDc4OCwgNzQwMjcsIDAsIDE5NDYzOCwgMCwgMTY2MywgMTA0MTksIDc0MDI1LCAKKyAgICA0MjYzNiwgMCwgNjk3MjUsIDAsIDEyMDY1NiwgMCwgNjc4NzYsIDAsIDAsIDAsIDY3ODk3LCA3NDAzOSwgMCwgMCwgMTEzOTUsIAorICAgIDAsIDExOTEwNywgNDM2MTIsIDY0MzQ0LCAwLCAwLCAxMDg1NSwgNTQ0NSwgOTM1NSwgMCwgNjUxOTgsIDczOTEsIDg5ODksIAorICAgIDIyMSwgNjU2ODYsIDAsIDAsIDgwMTAsIDcxOTEsIDQ5NjIsIDY5NzcyLCA4ODU1LCAwLCAwLCA2NDQ2OSwgMTIwNDI2LCAKKyAgICAxMDU1NSwgMCwgNDMzMzMsIDkyMjk5LCAwLCAxMjA0MjcsIDEwNDUxLCAwLCA2NzY1MywgNzI0NSwgMTI0NDMsIDc0NDA1LCAKKyAgICA5OTQ3LCAxMjAxNDksIDc4MzE3LCAzODczLCA4MzY3LCAwLCAxMjAxNDYsIDQzNDMzLCA0MzY0OSwgMTE5ODcsIDAsIDAsIAorICAgIDExMDEwLCAxMjcyMywgNzQwNTksIDc0MDYyLCA2MjE3LCA1ODk2LCAwLCA3NjgyLCA3NDA0OSwgMTQ2MiwgMTAyMzUsIDAsIAorICAgIDAsIDAsIDAsIDAsIDAsIDQyNTk1LCAwLCA3NDQwMiwgMTE4ODYwLCAwLCAxMjA0MTksIDkyNDk3LCA3NDA1MiwgMCwgCisgICAgOTIzNzgsIDEyMDU0OSwgMTE5MDgyLCA2NDI5NSwgMTIwNDE4LCAwLCA2NDc2NSwgNzM5MjMsIDEyMDQxNywgMTIwNjYyLCAKKyAgICA2OTkyMCwgMTk0NzAyLCA2MjE2LCAwLCAxMDc1NSwgOTQ1NSwgMCwgODEyNCwgMTI3MDQyLCA5NDcwLCA2OTQ0LCAxMjc1NDAsIAorICAgIDAsIDY5NjgwLCAyODI4LCAwLCA1MzEsIDQyNjM4LCAwLCAwLCAwLCA0MzQyOCwgODIwNCwgMzYxNCwgMjgyNywgOTY5NiwgMCwgCisgICAgMCwgODcyOCwgNDM1NCwgMTA5MDQsIDc4NTYyLCAxOTkzNiwgNzgzMywgMTIwNjkxLCAwLCA0MjU5OSwgNDI1OTcsIDQyNzA5LCAKKyAgICAxMjA0MDksIDEyNzA0NCwgMCwgODUzNywgMCwgMCwgOTM1NCwgOTgzMTY0LCAxMjg4MzMsIDQxMTk5LCAxMDEyMSwgMjAyOCwgCisgICAgMCwgOTgzMTk0LCA2OTcxNSwgMCwgMzA2MiwgMCwgNzQ0NDcsIDEyNjA4LCAwLCA2NjQ0MCwgNzU0NSwgOTcwMCwgMTI1ODAsIAorICAgIDkyMjA1LCAxMjA3NzcsIDEyMDUwMiwgNDExNTUsIDAsIDc0MDcxLCAwLCA5ODM0NTcsIDEyNzEzLCAwLCAwLCAwLCA3ODc3MiwgCisgICAgMCwgMTczNCwgMCwgMCwgMTI3MDQwLCA2NDU5NCwgMjQ1NiwgMjMxLCAwLCA3NDE2NywgNTQyLCAwLCAxMTg3ODYsIDAsIAorICAgIDk4Mzk3OSwgMTIzMCwgMCwgMCwgMzU5NywgNDQ0NiwgMTA1ODQsIDc0MjM1LCA5MjIxNSwgNDAzNywgMTI3OTM4LCA4MzUyLCAKKyAgICAwLCA1Njg3LCAwLCA2NDUxNSwgMCwgMTk0ODAxLCA1NTI2NSwgNjc4NDYsIDc4NDM0LCA5NzA0LCAwLCAwLCA3MDA4MCwgCisgICAgNzEzMzgsIDAsIDg2NjAsIDEyNjQ5NSwgMCwgMCwgNzg3NzMsIDc0NDgyLCA0NDgzLCAxNzA5LCA2OTcyMSwgOTkwOSwgCisgICAgNjA4MCwgMCwgMTIwMzU4LCAxNzQ2LCAxMzE1LCA4NjY3LCAwLCAwLCAxMzE0MCwgNjU4OTksIDEwNjA0LCAwLCA0NDgwLCAKKyAgICAxMTI2NiwgMTI4MTUyLCAxMjI2LCA2OTMwLCA2Nzk3OSwgOTgzNjkwLCA2MzYwLCAxMDg5NywgNDEyMzAsIDYwNSwgMCwgCisgICAgNzQ3ODUsIDY5ODc1LCAwLCAwLCA0MTUwMCwgMCwgMzExLCAxMTQ1MywgNjIyMSwgMTA2MDgsIDY0OTQzLCA3NDI4MCwgCisgICAgMTA4NzcsIDExODg2OCwgNjQ4ODUsIDc0MjcyLCAwLCAwLCAxMjg1NTksIDEyMDczNiwgNzQzMTIsIDM0NSwgMCwgNzQ0NTYsIAorICAgIDY0NjA2LCA5OTE3LCAwLCA5MjIzMSwgNTAzNywgMCwgMTc3NiwgODQyMiwgMCwgMTE4ODE0LCA0MTUwOCwgNDEyMDEsIDMyMywgCisgICAgNDMzMjgsIDAsIDQyNjk4LCAxMjk1LCAxOTQ4NTMsIDQ2MjUsIDAsIDQ2MzAsIDEzMTE3LCAwLCAxMjg3NzIsIDY1MTIzLCAKKyAgICAxMTI5MywgMjY2OCwgMTEyODgsIDAsIDQyNjQwLCA2NTY2NiwgMjUxOSwgOTIzNjksIDY1NDIwLCA5MjQ3OSwgMCwgNDI1MiwgCisgICAgNTA0OSwgNDI2NTksIDExOTAxMSwgNzA2LCA3NzU0LCAxMDg1NCwgODczOCwgMCwgNjU0MTksIDAsIDAsIDY0OSwgNjU0MjEsIAorICAgIDAsIDY2NzAyLCAwLCAxMjY3MCwgMTAxMywgMCwgNjQ5MTksIDcwNSwgMCwgNjU0MjIsIDEyNzgwMywgMTE4MywgMTI2NTE5LCAKKyAgICA3MDE3LCA0Mjg1MiwgMCwgODE1NywgOTczNiwgNjQ1MDMsIDY1NDE4LCAwLCA5ODM4NzgsIDc0MDM1LCAwLCAxMTkxMywgCisgICAgNzM4NzQsIDY2OTYsIDAsIDg5MjAsIDExOTI5OCwgMCwgNzk2MiwgMTIyMTEsIDk4MzcsIDIwNTEsIDY2MjI3LCAwLCA0MTg0LCAKKyAgICAwLCAwLCAxMDE3NywgNzM3NzcsIDE4NTcsIDE5NDY1NywgNDYyNiwgODQ2NCwgODQ3MiwgMCwgNDYyOSwgODQ5OSwgNzgzMjEsIAorICAgIDc4MzIyLCA0NjI0LCA3ODE4LCAxMTkxNzMsIDAsIDAsIDc4MDUsIDAsIDk0MDA3LCA2OTM1LCA5MjI5MiwgNzgzMjUsIAorICAgIDc4MzI2LCA3ODMyMywgNDMzMjcsIDQzOTg5LCAxMTkwNDYsIDg0OTIsIDgyNTAsIDg0NTksIDAsIDg0OTcsIDg0OTYsIDAsIAorICAgIDAsIDc4MzM2LCA3ODMzOSwgOTU0MywgNzgzMzUsIDc4MzMyLCA3NzgzMiwgNjU4NDksIDc3ODMxLCA5ODM5NjEsIDAsIAorICAgIDEyNDUxLCAwLCA4Njg0LCAwLCA2MTAyLCAwLCA1Mjk4LCAwLCA1Mjk0LCAwLCAwLCA5ODM0NTksIDE5NTA2MiwgOTk0OSwgCisgICAgMTE5ODI2LCA0MzYxNywgMTE5MjE1LCAwLCAxMjA3MywgMCwgMCwgNzc4NjMsIDEzMTA4LCAxMjA2MTcsIDExNDM5LCAKKyAgICA0MTQ2OCwgOTgzNzU3LCAwLCA1MjkyLCA1NTI3MiwgOTgzODgzLCAxOTM5LCA1MzAyLCAzOTcwLCA5MTc4NzksIDEyNDU1LCAKKyAgICAxNzkzLCAwLCAwLCAwLCA2NjQzLCA5MjQ3NywgNjUyNjMsIDAsIDc4MzMwLCA0MTI5MywgNzgzMjgsIDY1OTIzLCAwLCAKKyAgICAxMzIxOSwgOTU2OSwgMCwgNzQzODMsIDAsIDc0MTk3LCAwLCA1NTAwLCA4ODEzLCAwLCAwLCA3NDU2NiwgNTMyMiwgMCwgCisgICAgNzgzNDAsIDQzNjMxLCA1MzI0LCA2NjQ0MywgMzc4NCwgNDE2MTQsIDY1MjY5LCA2MjMwLCA3ODM0OSwgNzgzNDUsIDQzMzI0LCAKKyAgICAzMzYwLCA3ODM0NCwgMTE1MjMsIDAsIDkyNDg4LCA5OTI2LCA3MTk3LCAwLCA2ODQyOSwgNDI4OTQsIDQxODIxLCAxMjQ5LCAKKyAgICA3ODM2MCwgNzgzNjEsIDc4MzU2LCA3ODM1OCwgNzgzNTMsIDY0ODk5LCA2NDc2MywgNDExNDksIDQxODA3LCA0MzE2MiwgCisgICAgNDE4MTUsIDQxMTUwLCAwLCAxMDU3MSwgMTAwOTYsIDAsIDAsIDc4MDc0LCA2OTQ3LCA0MTE1MiwgODg3LCA5MjQ5LCA2NTY1LCAKKyAgICA3ODUxMCwgNDE5OTAsIDc4NTA5LCA0MTgxMSwgNzQ0NjYsIDkzOTY2LCA2NjcwLCA3Nzg4MiwgMCwgMCwgNDMwOTIsIAorICAgIDQzMzI1LCAwLCAxMDE2OCwgMCwgOTc4MSwgMTI4NjU1LCA5MTkwLCAwLCA5NjY2LCA4MjY5LCA2NTk0NCwgNzQwMDUsIAorICAgIDEzMDE5LCAxMTY3MCwgNjk4NjAsIDMxNSwgMTI4MTMsIDk4MzQ1OCwgNzg0MzIsIDc4MjU2LCA3ODM1MSwgNzgzNTIsIDAsIAorICAgIDk4MzY1NywgMCwgMCwgMTM3OCwgOTUwOSwgMCwgMCwgNzQ0NzUsIDMwNjYsIDkyMjIwLCA2Nzg0NywgMCwgOTIzNTUsIDAsIAorICAgIDc4MzY1LCA4Nzg3LCAxMjAzNzksIDE5NDYxNiwgNDE2MTgsIDE5NDYxNSwgNzgyNjEsIDE5NDYxNCwgMCwgNjQ2NTIsIDAsIAorICAgIDE5NDYxMiwgMCwgNzgzNjYsIDQyMDg4LCAwLCAxOTUwNjEsIDcxNzYsIDQzNzU2LCAxMDEzNywgNjEyMSwgMTA5OTUsIAorICAgIDc4MjU5LCA3NDUzNCwgODExOSwgNjQ4NzQsIDkxNzgxNiwgMTI3MTk5LCAxOTQ5MzksIDAsIDc0NTI1LCAwLCAwLCAxMjkzMCwgCisgICAgMTM5NCwgNzQ1MTQsIDAsIDc0NTE1LCAwLCAxMTg4MDQsIDI5OTgsIDk1MjcsIDEyMDY1OSwgNjUxOTAsIDEyOTc3LCAKKyAgICA0MjA5MCwgMTE5MTY1LCAwLCAxMTkxMDAsIDQxMjM2LCA5MjIzNSwgNDIwMDUsIDQyMDAzLCA0MTIzNywgNTg0OCwgMCwgMCwgCisgICAgMzY3MCwgMTI4NjU3LCAxOTQ2MDAsIDAsIDAsIDc4OTAsIDAsIDExMjk4LCA0MzMxNSwgMCwgNjIyOSwgMTU5MywgMCwgMCwgCisgICAgNjE5LCA0NjM1LCA2NTA4MCwgMCwgMTI4MDAyLCA0MTIwLCA2NTMzNywgNjUzMzYsIDAsIDExODA4LCAxMTkyMTQsIDc0MTE1LCAKKyAgICA5MzY2LCA0Mjc5MCwgNDIwMDYsIDExOTExNSwgNjUzMjcsIDY1MzI2LCA2NTMyNSwgMTA3NTcsIDE1MDcsIDQyMjE2LCAKKyAgICA2NTMyMSwgNjUzMjAsIDY1MzM1LCA2NTMzNCwgNjUzMzMsIDY1MzMyLCA2NTMzMSwgNDIwNTksIDY1MzI5LCA0MjY4OSwgCisgICAgOTI0MjcsIDkxMjgsIDk0MDQ1LCA0MjA3MywgNjc4NSwgNjQ1OTAsIDk4MzgzMCwgNDM3MSwgNzE5NiwgNjUzMTgsIDIwMzUsIAorICAgIDY1MzE2LCA0MTA2LCA2NTMxNCwgNjUzMTMsIDQyMDc0LCAxMjc4NDcsIDQxMjI4LCAwLCA2NTYwOSwgNDEyNDEsIDc5MDMsIAorICAgIDQxMjM5LCA0MzUzMywgNzg0NTksIDcxODksIDAsIDAsIDAsIDEyMzU3LCA0MjgwMiwgNzg0NTAsIDg0ODcsIDkxMzEsIDAsIAorICAgIDQ2MTUsIDEyNjk1LCAxMjc3NTIsIDAsIDEyMTc1LCAwLCA2NDUzNSwgMCwgNzgwOSwgMCwgMCwgNTYyLCAxMjE2OSwgNjU5MCwgCisgICAgNjk3NjIsIDY2NDU1LCA2NDczOCwgMzIxOSwgNjg2NTQsIDk4Mzc4NywgMCwgMTAzNywgMCwgMjAyNSwgMTI4MjYzLCAKKyAgICAxMzA5OCwgNzg0NDIsIDEwNjM3LCA0NTY4LCA1NDksIDE1NzAsIDAsIDI4MzUsIDAsIDEwNjI0LCA0MzYyMywgMTEwNzIsIAorICAgIDEyNzE5MSwgMCwgMCwgMTI2MDYsIDc4NDMzLCAyODI1LCAwLCAxMDgyNSwgODA3OSwgMjgyMSwgNDEwNDYsIDkyMzI3LCAKKyAgICA3MzY1LCA5ODM3NTMsIDEyMDU5MywgMTMwNzEsIDAsIDQ1MiwgNDEwNDksIDQyODQwLCA2MzQ2LCAyODMxLCA1NDYxLCAKKyAgICA3NDU5NiwgMTE0NjUsIDUyMTIsIDAsIDY0NzAzLCAxMTkxOTEsIDQyMzA4LCA3MTgxLCAwLCA0MTMzMiwgMCwgMTIzMzMsIDAsIAorICAgIDE2NjgsIDAsIDAsIDAsIDExODcsIDk4MzM4NSwgNDI2MjgsIDc4NTc1LCAwLCAxMjg3NzcsIDAsIDMyNDAsIDEyODUxOCwgCisgICAgMTIxOTQsIDAsIDExNTkxLCA0MTA2NSwgNTMyMywgODE2NiwgMCwgMCwgMCwgNzQ1MzUsIDE2MjMsIDY1Mjk3LCAxMjg4NTYsIAorICAgIDU3MSwgMCwgNDkxOCwgMCwgNTI4OCwgMTI3Mjk1LCA4OTE2LCA2NTA0OCwgMTkwOSwgODg2NCwgMCwgMCwgMTA3MzYsIAorICAgIDkyNTA4LCAxMTU3MSwgNzYxNSwgMTI3MzAwLCA5MjI5NiwgNDIzNywgOTI1NzYsIDEwMzUsIDY1ODE1LCAwLCA3ODgxLCAKKyAgICA3MDEsIDY1OTM2LCAzNDg5LCAwLCAwLCAxMjA3NTEsIDExNDAzLCAwLCAwLCAxMjcxNDYsIDM3OTYsIDY4MDAsIDAsIDM5OTQsIAorICAgIDExNDIxLCAwLCAxOTUwNzYsIDAsIDk4MzkyMiwgMCwgMCwgNjQ4NTcsIDEyODEwNSwgMjg1NSwgMTI3ODI4LCA2NjMwOCwgCisgICAgNDE2MjEsIDY4MjE0LCAxMjcyODMsIDEyNzgxNywgMTA2NTQsIDAsIDExOTIyNiwgMTIxNjQsIDMyNDYsIDc5MDYsIDQzOTcyLCAKKyAgICA2NTg0NywgNzE4MiwgMCwgMTMwMjQsIDE5NDgyMiwgNzQyNzAsIDEyODI4OSwgMCwgMCwgMCwgMTQ5NiwgNzQ3LCAwLCA5NDIsIAorICAgIDIzNzgsIDQzMTM2LCAxMjc5MDUsIDg0NjYsIDk4MzU3NSwgOTMyMCwgODAwMSwgMTIzMiwgODEzOSwgMTE2MTcsIDAsIDAsIAorICAgIDExNDA5LCA2ODM3MywgNjM4MiwgMCwgNjQ2MzQsIDEyODI3OSwgMCwgMTE2MTIsIDAsIDY3NjAwLCAyMzc0LCA5NDA2NiwgCisgICAgODQ3NSwgMTE2MDksIDY2MzEzLCAwLCAwLCA1Mjg2LCAxMTkyOTcsIDAsIDAsIDY0OTI1LCAxMjAyODMsIDE5NDU4NCwgCisgICAgMTE4OTgyLCAxOTQ1ODMsIDc3MDUsIDExOTQyLCAxMTMwNSwgMTk0NTgxLCAzMzA5LCAwLCAwLCAwLCAwLCA2ODAyLCAwLCAKKyAgICA0MTY1MywgMTI4MCwgMTI0MSwgNzE2OCwgMTIwOTYsIDAsIDY2NjE1LCA0MjU2NSwgNDE2NTEsIDAsIDAsIDAsIDQxNjUwLCAKKyAgICA2NjUwNywgNjY0NzAsIDAsIDEyOTE0LCA0MTQ5MSwgNjYwMTAsIDExOTU1MiwgNjA3OCwgOTk1NCwgMCwgMTQ3NSwgCisgICAgMTE5MjQ3LCA5OTM4LCA2MDg0LCA5MTc1NDYsIDQxMDY0LCA0MTA2MiwgMCwgMCwgMzI1NiwgMTAxODksIDQyMDc2LCAKKyAgICA0MzI1MiwgNzg4MjMsIDkxNzkwNiwgODcyNywgMCwgNjU4NzUsIDAsIDAsIDEyNzc2MiwgMTA1NjIsIDc0MjE1LCA0MzA2NSwgCisgICAgMCwgMCwgMzI0OCwgNzQyOTcsIDMyNjEsIDkwMTUsIDcxMzUxLCAwLCAzNjM1LCA2NDMzNywgOTgzMjgxLCAwLCAwLCA3MTk1LCAKKyAgICAwLCAyMDA3LCA2NDQzMSwgMCwgMCwgMCwgMCwgNjM1LCAwLCAwLCA2NTYxMywgNzc5MDksIDkyNDIwLCA3Mzk5NywgMCwgMCwgCisgICAgMTE5MjE4LCA3OTg0LCA4NjAwLCA3NDQzNCwgMTI3NzcwLCA0MTc2LCA3MDA1MCwgMjAzNCwgOTI1NTEsIDEyMDgwNSwgCisgICAgNjU4OTEsIDEyNzAzOCwgMCwgMzE4LCAyMDM4LCAxMjg4NjAsIDc4NTk2LCAwLCAzNjQ5LCAxMzE0OSwgNDIxNDUsIDQyNzk4LCAKKyAgICAzNjM0LCAxMjAyOTEsIDExODkyNywgNjc2NzcsIDEyMDEyNCwgNzg2NiwgMCwgMTE0MDIsIDQyMTQ2LCA5NDAzMiwgNzQyMzgsIAorICAgIDQyNjY0LCAyODQ5LCAxMjcwMzQsIDAsIDc5MzgsIDEyOTYwLCAxNzYxLCAxMTgxMiwgNjUzNzksIDY4Mzg2LCAxMjgxODUsIAorICAgIDExNTksIDAsIDY5NzI5LCAwLCAwLCA3MTc4LCAxOTQ2MzIsIDAsIDQxNjgwLCAwLCAxMjgyMDMsIDExNTM0LCAxNTE0LCAKKyAgICAxMTY2OCwgNjc4OTEsIDkzMTMsIDcwMTUsIDAsIDY3ODc3LCAxOTQ1NjcsIDEyOTg5LCA2NjQ3NCwgOTM2OCwgMTI4NDgsIAorICAgIDE2MjQsIDQzMjcwLCAwLCA3NDI3OCwgMTA4MTgsIDEyNjY0NCwgOTk1MywgMCwgNzg0MjEsIDExOTQsIDMyNDIsIDk3NjEsIAorICAgIDk1NTUsIDg1OTgsIDEyMDI5OSwgNjE2OSwgMTI4NzEsIDE1NTEsIDI3OTgsIDY1MTc2LCA0OTU4LCA0Mjc1MiwgMTE5MDI1LCAKKyAgICAwLCA2Nzg3NSwgMTIwMzAxLCAzNDk1LCA2NjY0OCwgMTk0NzY4LCAwLCA2ODM2NCwgOTgzMjI0LCA0ODkxLCAwLCAxMDY0MSwgCisgICAgMCwgNzM3NDYsIDAsIDY4MzUyLCAwLCA3Mzc4NywgMTk0ODI5LCAxOTQ2MzMsIDcxOTksIDY0OTU1LCAwLCAwLCAwLCAwLCAwLCAKKyAgICA0MjY4NSwgNDI2NzksIDE5MywgMCwgMCwgMCwgNDI2NjcsIDAsIDUyNzEsIDkyMzE4LCA5MjUxNywgMTE4ODgyLCAxMzYyLCAKKyAgICAxMzI5NywgMCwgMTI4MDk0LCAwLCA5ODMzMzEsIDczNzg5LCAwLCA2NjU4LCA0NDI2LCAwLCA5MjYyOCwgOTgzODQyLCAKKyAgICA5MjMxOSwgNzI3NiwgNDIxNjMsIDUyMjAsIDAsIDAsIDk4MzMzMCwgMjQxNiwgMzMxMCwgNDI3MDMsIDAsIDM3OSwgMCwgCisgICAgNDM3NTUsIDAsIDAsIDMyMjMsIDY1NDkyLCAxMjg0LCAxOTQ3NzEsIDQ1NDksIDAsIDAsIDk4MzE1NCwgMTI3NzYzLCAKKyAgICAxMDgwNywgOTU1OCwgMTk0NjEzLCAwLCA4NTE1LCA4Njg4LCAxMjg2NiwgNjUzMDgsIDMyOTQsIDk4MzMzMiwgODUyOSwgCisgICAgMTI4MTAxLCA0MzM4NSwgNzU2NCwgMCwgNDMzMjksIDAsIDkyNDU4LCA3Mzc1NywgNjY0NTYsIDQyMzU5LCAwLCAyMDMxLCAwLCAKKyAgICA3MjAyLCAwLCAxMjY3NiwgNDI3MjksIDkyMTk4LCAzMjE1LCAwLCA3NzEwLCAxNjEwLCA3MzgwMSwgMCwgMCwgNjU2ODIsIDAsIAorICAgIDEyMDUzNywgNjU5MjQsIDk5NzQsIDIyOCwgNjYzNTQsIDE1MDEsIDAsIDY0Mzk1LCA1MTc5LCA3MjAwLCA2MjI1LCAwLCAKKyAgICA2NTc5NCwgMTcyNSwgNjU1MzMsIDgxOTYsIDc0NzYsIDc0Mzk5LCAwLCAwLCA3MTUyLCA4NTAyLCA1NzYyLCAxOTY3LCAKKyAgICA3NDgzLCAwLCAwLCA4MTA0LCAwLCA3NDc0LCA3Nzk3OSwgMCwgMTI2NTA3LCAxMDQxNCwgMTMwMDEsIDgxNDEsIDAsIAorICAgIDQyNTM3LCAxNTU3LCA0MzU5NCwgMTI4NjQyLCA2MzMwLCA2ODA1LCA4NjMxLCAyNTQ1LCA3MDA1MiwgMTI3MTY2LCAwLCAKKyAgICA3NDE5MCwgMCwgMCwgOTgzNzg2LCA0Mjc2MiwgMCwgNDI5MTQsIDE2NTAsIDI2MiwgMTYzNywgMCwgNzkwMSwgMzIzOCwgCisgICAgMTI4MTczLCA0MTg2MSwgMCwgMTI4NTg1LCA2NTE1OCwgMTA4NjAsIDk0MDU5LCA0MzY1OCwgNzUyNywgMCwgNDMzMTksIAorICAgIDY0MTksIDAsIDQ1LCAwLCA2NDU4OCwgOTM5ODksIDAsIDExOTgxMCwgNzE5NCwgNTI5MSwgMCwgNDM2NjYsIDEzMTI5LCAwLCAKKyAgICA5MDg0LCAwLCA4NzM3LCAwLCAxMjg4MSwgMCwgMTI5MDYsIDk2MzksIDc5MTIsIDI2MjAsIDAsIDAsIDAsIDk4Mzg3NSwgCisgICAgMTc5LCA2NTg5NiwgMCwgNjQ3NTYsIDI4NTMsIDc4NDQzLCAxMTg4MTMsIDk4Mzg5MCwgMTE4OTk2LCAxMTkwMDksIDI4NTAsIAorICAgIDgwODQsIDk4MzA4NSwgNzM4NTAsIDI4MDEsIDkyMjg0LCA0MjA2OSwgMTE5ODM5LCA3NDc1NCwgMTE5ODQxLCA0MjA3MiwgCisgICAgMTE5ODQzLCAxMTk4NDIsIDEwMzk4LCA5ODMwNTYsIDAsIDgzNzcsIDEyNzExNiwgODI0NSwgNjg0MDEsIDMxNTgsIDkyMzk2LCAKKyAgICAzOTgzLCA0MzY1NiwgOTIzLCAxMTk4NTcsIDExOTg1NiwgMjkyLCAxMzAwMiwgMTE5ODQ1LCAxMTk4NDQsIDMyMjEsIDE3NjMsIAorICAgIDkyNDYzLCA0NjEyLCAxMTk4NTEsIDExOTg1MCwgNzI1MywgMTI3MTEwLCA2ODM5MSwgMCwgMTA3ODIsIDM2MzcsIDEyOTk2LCAKKyAgICA0MzU0MiwgMCwgNjQ1NzgsIDk4MzY3NSwgMzIyOCwgNjk2MzYsIDg3ODMsIDAsIDExOTYxNCwgMjczMSwgMCwgMCwgNzg1ODUsIAorICAgIDQxMDIsIDc2OTYsIDczODc4LCAwLCAwLCA3ODU4NiwgNDMzMTYsIDQxNzcsIDExMjgzLCA5MDg5LCAwLCA3Mzk5NiwgCisgICAgOTgzMTczLCA2NDUwMCwgNDM2NzQsIDAsIDY0OTQ3LCAxODU2LCAwLCAwLCA2Mzc5LCAwLCAwLCAwLCAzMjA4LCAxMjk3NSwgCisgICAgNzQ3NzUsIDEyNzM4MCwgOTgzOTMxLCA5MjM4OSwgNzQwNzIsIDU1MjY5LCAwLCAwLCA5ODM2ODMsIDIwMzMsIDc4NTc3LCAKKyAgICA3ODU3NiwgMTk1MDI2LCA1NTI1NCwgNzc0MCwgMCwgMCwgMCwgNzM5NjQsIDAsIDkzOTg4LCA2NzYxMiwgNjU2NzQsIAorICAgIDEyODI0NCwgOTQxMTAsIDQxNjg5LCAwLCA3NDAwNiwgNjQ5MDksIDY2NDYsIDExNzkwLCA3NDAxOSwgMCwgMTI4MDY2LCAKKyAgICAxMjgwMzEsIDg1NjEsIDQ1NzMsIDAsIDUzMjYsIDAsIDEyMDYwNSwgNzIzMCwgODI1NywgMCwgODc3OCwgNDE2ODgsIDAsIAorICAgIDY1Nzc2LCAyMDcxLCA4MzE0LCA2NDU5LCAwLCA3NjI4LCA2NTA5MiwgNzM5MDMsIDY2NzIxLCAxMTM0MiwgMTI4NTYxLCAwLCAKKyAgICAwLCAxMjgyMjYsIDEyNzAwMSwgMCwgMTE4MTAsIDEzMTY0LCAxMDcyMywgOTY3LCA5ODM5NTEsIDEyNjQ2OSwgMTE5NDYsIDAsIAorICAgIDMyNTcsIDAsIDEyMzA3LCAxODQ1LCA5ODMxNTcsIDQzNTI2LCAwLCAwLCAxODg2LCA0MjM0MiwgMTAwODksIDg3MCwgNzY0OCwgCisgICAgMzQ5OSwgODYwOSwgNzY1MiwgODc2LCA4NzEsIDg3NywgMCwgODc4LCA0MjAxNSwgODc5LCA0MzY5MiwgNDU2MywgMCwgMCwgCisgICAgNzU5MSwgNjU4ODcsIDg2NywgOTUyMCwgODcyLCAxMjY2MDcsIDg2OCwgODczLCA3NjQyLCAwLCA4NjksIDg3NCwgNzY0NCwgCisgICAgMTIwNjc0LCA4NzUsIDc5MCwgMTI4MzAzLCAwLCAwLCAwLCA2NjE4MiwgOTgzMjU4LCA1NDI5LCAxOTUwNTUsIDY2MTgwLCAKKyAgICAxMjY0ODAsIDY2MTgxLCA2ODQ1MiwgOTgzMjg5LCA5ODMyNDgsIDQyMDY3LCAwLCA1NDMzLCAxMDY1NywgNzkxMSwgCisgICAgMTk0NjIyLCAxNTQ3LCA2NjE3NiwgNDIwMTIsIDEyMDU3NiwgNTQyNSwgNDk3NywgOTk5OSwgNTMxNywgNTQyMywgNDYxMSwgCisgICAgMCwgNjc2MzcsIDAsIDk2NzksIDc0MTIyLCAwLCAwLCAwLCA2NjE5NCwgNDQxOCwgNjYxODQsIDQ2MjgsIDQyNDUsIAorICAgIDExOTY0OCwgMCwgMCwgMTg1MSwgMCwgMTI3MTg5LCAxMTkwOCwgMCwgOTM2MCwgMTE4ODk3LCA5ODMyMDIsIDQyNzc2LCAKKyAgICA2NjE4NywgMTI4MzcsIDg4MjksIDc3MTEsIDkyNzE0LCAwLCA5MjMyMSwgNDMzMTgsIDAsIDg4MDksIDY5ODgxLCAwLCAKKyAgICA5ODMxNDIsIDEyMDYwNCwgOTgzMDUyLCA5ODM4ODIsIDAsIDk4MzI3MCwgMCwgMCwgNzQyNywgOTk1OCwgNDU4OCwgNDM2ODAsIAorICAgIDAsIDc0NDg0LCAxOTQ5NjgsIDI0MzMsIDAsIDExOTYyMiwgMzM1MiwgNzQzNjMsIDk4Mzg4NSwgMCwgNzkzLCA3NDQwNCwgMCwgCisgICAgMzA1LCA1NjcsIDY3NjYyLCA4NDIsIDEyODUxOSwgODIwOCwgMCwgNDE2OTUsIDE2NDcsIDExODg3NywgMCwgNzgzNywgCisgICAgOTE3NjI1LCA4MTgsIDUzMzcsIDE5NDYyOCwgOTE3NjIxLCA0MTM3NiwgMTE5OTc4LCAxMjY1NzYsIDEyMDU5NCwgNzQwODYsIAorICAgIDkxNzYxNSwgOTE3NjE0LCA5MTc2MTMsIDEwOTczLCA2NjM1OSwgMTM3MiwgMTI3MTcyLCA5MTc2MDgsIDQ5NjksIDEyNTQsIAorICAgIDkxNzYwNSwgOTE3NjA0LCA5Mzk2NywgOTE3NjAyLCA2NTIyOCwgNzgyMjEsIDEyNjYxMiwgMCwgMjg0MCwgMCwgMTE5OTgyLCAKKyAgICA5ODM5MzksIDAsIDMyNDUsIDkwNjgsIDY4MTk0LCA2NDcyNSwgMCwgMCwgMTI5OTEsIDAsIDI2NTEsIDY4MDE2LCA5ODMyNjUsIAorICAgIDkxNzYxMSwgMTI3MDI2LCAxMjg4ODMsIDAsIDAsIDQzNjQ4LCAxMjA4MTIsIDAsIDQzMzIyLCA5MjY2MiwgMCwgMCwgCisgICAgNjQzNzIsIDkyNjk4LCAzMjI2LCA2NTUsIDc1MiwgNzQ1NywgNzQ1NiwgNzQ1MiwgMzI4NSwgMTI4Nzc5LCAxMjc4MjEsIAorICAgIDExOTk4OCwgNjU2MTAsIDIzOTEsIDAsIDkyMjQ4LCA2NzEsIDI1MCwgNzQzNCwgNjE4LCA2NjgsIDYxMCwgNDI4MDAsIAorICAgIDc0MzEsIDExNTIsIDQyODAxLCA2NDAsIDEyMDY2NiwgNzQ0OCwgNzQzOSwgNjI4LCAzOTA1LCA3MzgxMCwgMCwgMTI4MjY2LCAKKyAgICA2NDc0OSwgNjc4NTAsIDIxMDcsIDAsIDAsIDQ2MDUsIDEyODE3NCwgOTgzMTkyLCA0MzM3MiwgNjU5NDUsIDEyODgzOCwgMCwgCisgICAgMTE5NTkwLCAwLCAwLCAwLCA5ODcsIDY5MjcsIDExNTcyLCA0MjI2MSwgMTE0NjQsIDMzNjUsIDk5NzEsIDAsIDAsIAorICAgIDEyODI5NywgMCwgMCwgMCwgMCwgMTEzMzQsIDQzMzI2LCAxMjYwOSwgMTE1MTksIDExNTAzLCA1NTMwLCA1MjEwLCAwLCAKKyAgICA0NjI3LCA5ODM4OTIsIDUyMDgsIDAsIDEyODg0MiwgMTAzMzIsIDUyMTgsIDc5NzYsIDkxNTYsIDAsIDMyNDQsIDU1MjksIAorICAgIDY5NjQ3LCA3Mzg5NCwgMTI4ODUyLCA1NDMyLCA2NDk2NSwgNTUyNywgNzQwMzMsIDEwNTE2LCA3NzkwLCA1NTI4LCAwLCAKKyAgICA0MjE0MCwgMTIwMjgxLCAwLCAwLCA0MzU0NSwgOTg4NywgMCwgNDAwMCwgNzQyOSwgNzQyOCwgNjY1LCA3NDI0LCAzMjA2LCAKKyAgICAxMjAyNzgsIDc4ODQsIDAsIDEyODU2NiwgOTE3OTg5LCAxMjg2NjYsIDIxMSwgMjUwOSwgMTI4ODU4LCAxMjA1NzMsIAorICAgIDY4NjcyLCAzMjIwLCA0MjIzNSwgMCwgMTA2OTAsIDg5NTEsIDUyMTQsIDQyNDc0LCA4MTE4LCAwLCA3MDQ4LCA0NTkwLCAKKyAgICAxMjcyNTgsIDU4NTIsIDAsIDAsIDEyNzI1OSwgMTcwOCwgMCwgOTgzMTY1LCAyNjIzLCAxMTk0MywgMCwgNjkyMjYsIDAsIAorICAgIDQ2OTgsIDY2NTA5LCAxMDY2LCAxMTk5MjEsIDQ3MDEsIDk4Mzg3NiwgMTIwMjg1LCA3NDIyNSwgOTQxMTEsIDgyNjcsIDAsIAorICAgIDEyNzI2NSwgMCwgNzUxNiwgMCwgMjYyNSwgOTgzOTc3LCA4MDM0LCA3NDMwOSwgMCwgMzYzMSwgMTA5NTUsIDc4NTAsIAorICAgIDEyMDI5MywgODQxNiwgMCwgMCwgMCwgNDMzODQsIDEyNjYwLCAwLCAwLCAwLCA3NDg1MCwgNDEwNjksIDAsIDEyODE1NiwgCisgICAgMTIwOTksIDQzMTAsIDEwMDMyLCA2MjUyLCA3MTMsIDc5OTAsIDAsIDM5OTAsIDAsIDk4MzI2MiwgNjYzNjgsIDUwMTcsIAorICAgIDY0OTU2LCA3MDcxLCAwLCAxMTkxNDQsIDEwMzAsIDExODgwMCwgOTgzMTIwLCA5NTEzLCA0MTA1OSwgOTM1NywgMCwgMTc3MywgCisgICAgMCwgMTIwMzUwLCAwLCA2MzM5LCA3NzQ1LCA5ODQ0LCAwLCA2NDY1MCwgOTQsIDE4ODAsIDc0NzY2LCA5ODM4MzgsIDg5MDgsIAorICAgIDAsIDEyODcwNywgNjU5MTMsIDc4NDcwLCAxMDc1MiwgMTMwMDMsIDAsIDEyNjU3MiwgNDEzMDcsIDg3MzIsIDEyMDMzOCwgMCwgCisgICAgMTc1NywgNjk2NCwgNDY5NiwgMCwgMTIwMzM1LCA2NDc4NSwgNzM5NCwgMzY0MSwgNTQxOSwgMTI4MDU1LCAwLCAxMjc4ODMsIAorICAgIDAsIDEyMDM0NCwgNDM5ODgsIDAsIDg2MTAsIDQzMDYyLCA3NTkyLCA4NTYsIDc0Mjk5LCA5MzYsIDEzMjg5LCA2OTg5NCwgCisgICAgNDMxNzEsIDE0NTksIDAsIDY1MjQzLCA3ODYzOCwgMTk5NTMsIDAsIDE1MDQsIDcwMDY0LCAwLCAxMjkxMywgNzQyMDYsIAorICAgIDc1MjksIDAsIDEyODY5OSwgOTgzOTU3LCAxMjA3ODIsIDQxMTMsIDAsIDIzNzIsIDMzNiwgMCwgNzUwOSwgMTIxNTIsIDAsIAorICAgIDY4MiwgNjY0NTgsIDQxNTA1LCAwLCA2NDc0MywgMTA1OTMsIDE3MDMsIDAsIDk4Mzk1NSwgODAzMywgNjk5NTMsIDAsIAorICAgIDk4MTAsIDEyNzI2OSwgMCwgMTI5NzAsIDAsIDQyMzUxLCAxMDEwOSwgOTE3NjIzLCAwLCAxOTQ2OTMsIDAsIDkyNjkwLCAwLCAKKyAgICAwLCA3NDI5MSwgMTk2NSwgNzA2OSwgNDMzMTIsIDAsIDczODg3LCAwLCAyMDg3LCA2NDM3MCwgNjMxNCwgNDE3MTQsIDg1MDEsIAorICAgIDAsIDAsIDc0MjM5LCA0MTMxNywgOTI2MTQsIDIwOTEsIDc0NTQ1LCAyMDkwLCAwLCA5MzUzLCA3MTE3LCAyMDc3LCA3Nzg4NiwgCisgICAgMCwgMTA0OTgsIDIwODMsIDc3ODg4LCAwLCAwLCAxMTkyMzYsIDYzNCwgMCwgMCwgMCwgNjk3NzksIDQxNjUsIDg3NDYsIDAsIAorICAgIDk2NTQsIDEyODU2LCA2OTI0LCAwLCA3MDY2LCA5ODM3MTksIDAsIDEyODEzNSwgNDEwMzcsIDQyNjkyLCA3Nzg2LCAxMjk1OSwgCisgICAgNDEwMzksIDEyNzQ4MywgMCwgNjgwLCAyMzAyLCAxMjgyMDAsIDExODEsIDcwNTYsIDMxNzQsIDEyNjUxNiwgMCwgOTI2NjgsIAorICAgIDY1NjY1LCAxMjczNzUsIDEyNjUwNiwgNjkyMCwgMCwgOTIyOTUsIDAsIDExODk2NSwgMCwgNjQ2NDQsIDEyNjk4MSwgCisgICAgNzQxMTksIDAsIDQxMDI4LCAwLCA2MjMxLCAyNjEzLCA2NTMwMiwgNDA5ODksIDAsIDE5NDY5NiwgMCwgNDI3NjAsIDAsIAorICAgIDk4MzU2NiwgMCwgNDA5ODcsIDQ2NjcsIDAsIDk4MzkzMiwgODgyOCwgMCwgMCwgMTI0NiwgNDc0NiwgMCwgMCwgMTEwMjEsIAorICAgIDQ3NDksIDkyNjc1LCAwLCA5MjEsIDQ3NDQsIDAsIDEyNzAyLCAyNDIsIDAsIDE1NjYsIDgyMTcsIDAsIDY0NjUzLCA3ODM4NiwgCisgICAgMTI4MTIxLCA3NDAzNiwgNzQ1MDUsIDQzMjc0LCA1MzEzLCA5NTEsIDAsIDAsIDk4Mzg2NywgNzYwNCwgOTgzMjkwLCA0MDA5LCAKKyAgICAxMjc4MTYsIDk4MzcxMCwgMTIwNTYyLCAwLCA5ODM3MjAsIDY0ODYwLCAxMTkxMzgsIDExOTA2OSwgMCwgMTI3MzcwLCAKKyAgICA0MDQ4LCA5ODM1OTgsIDAsIDcwMDI0LCAxNjQ2LCA3Nzg5MCwgNjQ1MzQsIDczOTk1LCAxMjA3MDUsIDAsIDExOTg5MCwgCisgICAgMjU3OSwgMTE5OTA1LCAzMTc3LCAxMTM1NywgOTA5OSwgNDEwNywgMzQ0MSwgMTE5ODk0LCAyOTc1LCA3NDQ0MiwgOTgyMiwgCisgICAgOTgzOTM1LCA1NTIyMCwgMTAwODQsIDczOTQzLCAxMTg4NDAsIDAsIDkxNzU2MiwgMTk0NjEwLCAzMzk5LCA5ODUxLCAKKyAgICA5ODM3MTcsIDExOTA5LCA5MDU5LCAwLCA3Njg3LCAwLCA2Nzg5LCAwLCAwLCAwLCA3MTM2NywgMCwgMCwgMTc3NywgOTE1MSwgCisgICAgMTEzNywgNjk3NjcsIDc0OSwgNDIzNjYsIDAsIDUzODUsIDEyODU3NCwgMTI4MjE4LCAwLCAwLCA1OTg5LCAwLCAwLCAKKyAgICAxMjgwOTEsIDAsIDQxNjg1LCA2OTIyMywgMCwgOTc2OSwgNDE2ODQsIDk4MzIxNiwgNTE5LCAwLCAxMTc0MCwgNTc2NiwgMCwgCisgICAgMCwgMjYwMCwgODg0OCwgMTIwMTM4LCA0MTI5NywgMCwgMzY2NiwgNzQ0NzMsIDQxMzAwLCA3NDQ2OCwgNjUxNjAsIDAsIAorICAgIDY5Njg4LCA2OTc3MSwgNzQ0NzksIDAsIDY1NTgsIDAsIDAsIDY5NzY1LCAxMjA3NTAsIDI1MiwgMCwgNDEzMDIsIDAsIDAsIAorICAgIDAsIDY5NzYzLCAwLCAxMTcyOSwgODcxOSwgOTA2MCwgMCwgMTIwMTM5LCAxMDc2MSwgMCwgMCwgMCwgMTE4NzkyLCAxMTczNCwgCisgICAgOTgzMjIzLCAxMTczMCwgMCwgOTU5MywgNTc1NywgMjQwMywgNjQ4MDgsIDU1Mjc1LCAwLCAxMTcyOCwgNDM1NzIsIDAsIDAsIAorICAgIDc3NjQsIDk4MzcxNCwgMTEwOTQsIDEyMDgyNSwgMCwgOTgzMjI2LCA0MjgyLCA4Mjk4LCAwLCAwLCAwLCAwLCAwLCA2NDQ0OSwgCisgICAgMCwgMTI2NjUwLCA2Mzg1NCwgODQ1NiwgMCwgNzQ3ODMsIDY1NjcwLCAwLCA3ODI1MCwgMCwgNzc3NCwgMTA2MDcsIDk3OTIsIAorICAgIDAsIDAsIDAsIDAsIDEyMDc2NCwgMCwgMTAwMTksIDc0NzYyLCAwLCAzNDU4LCA0MzY1LCA3MDA1MywgOTgzNzEyLCAzNjQ3LCAKKyAgICAwLCAyNjAyLCAxMjgzNDEsIDAsIDE5NDcwNywgNDExMzUsIDAsIDAsIDAsIDY0NjMxLCAxNzIsIDQ5NzEsIDQxMjE5LCAKKyAgICA0MTEzNywgMTg4OSwgNzIzOCwgNjU0NSwgMTI2NDc2LCA5MjE5MywgNzU5NywgMTA1MjgsIDAsIDAsIDM3MzIsIDczOTEwLCAKKyAgICAxOTQ1ODgsIDUzNDQsIDAsIDQzMzY2LCA0MzM2MywgOTA2MiwgMTE5MjUyLCAwLCAwLCAwLCA2NDQ3OSwgOTIzMiwgOTI1OTYsIAorICAgIDAsIDAsIDE5NDcxMiwgMTA5MDAsIDQxNTMxLCAxMjYzLCAzNzIwLCAxMjA0OCwgMCwgNjQyOTIsIDQxNTI0LCA3MjI3LCAKKyAgICAxMTk2MzUsIDYwOTksIDQxNTM0LCAwLCAxMjczNTQsIDEyNzM0NSwgMjk5LCA5MTc5NTcsIDg1MjUsIDEyNzM0NywgMzUyNCwgCisgICAgOTE3NTY1LCA4ODMxLCAxMjczNDksIDkyNTY0LCAzMDc1LCA2Nzg2NywgMTI3MzUyLCAwLCA2NjM2MiwgMCwgNjQzNTMsIDAsIAorICAgIDAsIDU4NDUsIDAsIDAsIDAsIDI1ODEsIDgyMDAsIDY1MTE0LCA2ODQ2MCwgMCwgNDMyODMsIDU1NTEsIDAsIDEyMDczNSwgCisgICAgOTgzMjAxLCA2MzQwLCAxMTg4NTUsIDAsIDc4MTM0LCA4NjgwLCA3MjA0LCA3MDA2NSwgMjU4OCwgMjkxNCwgNzAxMSwgCisgICAgNTUyODEsIDAsIDI0NzEsIDE5NDYzMSwgMjg4MywgMjc0OSwgMTE5NTYzLCA3Mzc3NCwgMTA5MTMsIDAsIDAsIDg2NjYsIAorICAgIDY3NSwgNDI0OTMsIDAsIDQzNTcxLCAwLCA2MjE5LCAwLCA5OTgwLCA0MTIzMiwgMTA5MjgsIDAsIDQxMTUzLCA0MTIyOSwgCisgICAgMTE4OTY3LCAwLCAzNzM4LCA5NDAxNiwgMCwgMTI3MTEsIDMxODEsIDY2MjEyLCA3NDI4OSwgNjg0NzIsIDQyODU3LCA4MjYyLCAKKyAgICA5ODMzNzksIDAsIDk4MzIyMiwgMCwgNDIzNDcsIDEyMDkyLCA5NjE1LCA3MjM0LCA3NDA0NywgOTgzMDg4LCAwLCA0Mzc0NCwgCisgICAgMCwgMCwgNzM4NDYsIDI5MzQsIDEyNzIyLCAxMjA3NjIsIDkyMiwgNDM5ODMsIDc0NTA3LCA5ODMxMjYsIDc0NDYxLCAzMjE4LCAKKyAgICAxMjA0NzEsIDc0MjkwLCAxMjA0NjksIDY0NTYyLCAxMjA0NzUsIDg1NjksIDExNDA0LCAxMTkzMiwgNzM3MjgsIDMyMTQsIAorICAgIDEyMDQ2MSwgMTIwNDY4LCAxMjEyOCwgMzIwNywgNjU0ODYsIDc4NzI5LCAxOTAxLCA3ODcyNywgMTI3MzI2LCAxMjA0NjAsIAorICAgIDc0MjUsIDMyMDUsIDY4MDAzLCA3ODczNywgNzg3MzYsIDc4NzM1LCA0MzM4MywgNjk5NDAsIDY1NDU5LCAyNjA2LCA3ODczMCwgCisgICAgNzM4OTcsIDAsIDExNDk2LCAxMTczLCAwLCA0MTI3MiwgMTE5NjYxLCAwLCAwLCA5ODMzMjEsIDEyMDczNywgMCwgOTgzOTcxLCAKKyAgICA5ODMzMjAsIDM3OCwgMjYxMCwgMCwgNjUwNzksIDk4MzMyNSwgNjU2OTUsIDEyNjU1OSwgMzcsIDcwNjgsIDAsIDEyMDQ4MCwgCisgICAgMTIwNDc5LCAzMjA5LCAxMjA0NzcsIDAsIDEwNjM4LCA5NzY4LCA2OTk1MiwgMTE5OTA5LCA5ODMzOTksIDAsIDAsIDAsIDAsIAorICAgIDY1NTEwLCAwLCAwLCA1MjMzLCA5ODMzMzUsIDY0NzkyLCA5ODMzMzQsIDAsIDEyNjYzMywgMCwgNzA2MCwgOTg0NywgCisgICAgMTIwMTQ0LCAxNjg1LCA1OTUsIDAsIDczOTcxLCAxMjkyLCA4OTQwLCA3MzgwLCAxMTA4OCwgMCwgMTAwMDQsIDEyNjk5NywgCisgICAgMCwgNjU0MSwgMCwgMCwgMCwgMzI0MywgOTAxNCwgNTYwNiwgMCwgNTM4LCA2NDYyMCwgNTYwMiwgODQ2NywgNzQzOTEsIAorICAgIDY1NDcsIDEyODEzMiwgODIwMywgNzg0ODgsIDk4MzA5MCwgODQ1OCwgNjUyMTEsIDg0OTUsIDExOTkwNCwgMCwgOTE3NTUyLCAKKyAgICA3NzksIDc4MzE0LCA2NDM2NywgMjQ2NSwgNjk5MDEsIDgxOTMsIDU1Mjc5LCA5NzMwLCA5MjgwLCAwLCA3MDY1LCA3NDE1NSwgCisgICAgNDM0NiwgMCwgNzM3OTgsIDUwNCwgMCwgOTI0MTQsIDg5ODIsIDAsIDAsIDAsIDc4MiwgMCwgMTA4ODMsIDAsIDE5NDg1MiwgCisgICAgNzMyLCAzNzM3LCAxMjcyNTMsIDE1NDgsIDY4NjUwLCA5MjUwNywgMTgzMiwgNTYwNCwgNTczNSwgNDExNDEsIDExOTAyMCwgCisgICAgNDM3NiwgMCwgMTE3ODcsIDM3NDUsIDAsIDAsIDQyODg4LCA2NTcxMiwgOTgzMzA0LCAzODY5LCAxMTkzNywgNTcyNSwgCisgICAgMTI3NTM5LCAxNzgzLCA2ODY0OCwgNTcyOCwgMCwgMCwgMCwgMTE5MTgsIDY2NTY3LCA1NzI0LCAwLCA1NzI3LCA3ODUyMSwgCisgICAgMCwgMCwgNzY0LCAwLCAxMjgxMTYsIDQzNTMxLCAwLCA5MDMzLCAwLCA0MjUzMiwgNjIyMywgMTEwNDIsIDEyMDc0OSwgCisgICAgMTE0MjMsIDAsIDExOTg2MSwgNzEzNDQsIDQzNDY1LCAwLCAxMjgyNjcsIDY1NTksIDY0NTU3LCA3MTM0OCwgOTI2NDksIAorICAgIDEyMDY0OCwgNDMwMTksIDQzNDc3LCAxMDIzOCwgNzQ0OTEsIDAsIDQzMzc3LCA5MjI4MiwgNzEzNDYsIDE0NzgsIDk3ODMsIAorICAgIDExODI1LCAyNjA3LCA2NDc0MCwgMCwgNzczOSwgNzQ1NDMsIDAsIDAsIDAsIDYxMzIsIDAsIDYzNzY1LCAwLCA3MDA1OCwgCisgICAgNDExNDQsIDAsIDkyNDM4LCA0MzUzNywgNjc2MSwgMTAwOTMsIDQzNjksIDkxNzc5MSwgMCwgOTgzMTQ4LCA4ODIwLCAzOTQ3LCAKKyAgICAwLCAwLCAxMTUxNSwgNTI2LCAxMjgxMDMsIDQxMjk1LCAxOTQ2MDMsIDkxNzc4NSwgMTk0OTMyLCAwLCA3Njg4LCA5MTc3ODYsIAorICAgIDc2ODYsIDgyODgsIDExODE1LCAwLCAwLCA5ODMzODIsIDE1NDMsIDM3MTMsIDQxMjIxLCAxMjQyMywgNDIyODEsIDkxNzc4OCwgCisgICAgNzQwMjQsIDEyMjkzLCAwLCA2NDM1NywgMTE3OTQsIDQyMDgyLCAwLCAxNzM3LCA4OTg3LCA0MjA4MSwgMCwgNzIwNSwgMCwgCisgICAgOTMzNSwgMTI4NTAsIDExOTg3MCwgNjU1MywgNzA1NSwgMCwgODI3NywgMCwgMCwgNTQ3NSwgNzQ3OTUsIDY3ODAsIDAsIDAsIAorICAgIDEyOTkwLCAxMTYwLCA0MjA4NCwgMTE5NjUwLCA0MTIxNywgMTE5NjYwLCAxMDAxOCwgMzYwLCAwLCAwLCA2ODE3NiwgNTg2MywgCisgICAgMzEzNywgMCwgNDE0NywgOTgzMTcwLCA0MTIxNiwgNzg0NCwgMjYxNiwgMTE5MTkwLCA2ODQ2MSwgNjUyMzQsIDk4MzI5NCwgCisgICAgMTMwNzYsIDMxMzUsIDk4MzI4NywgNzgxNDMsIDExOTEzOSwgMzE0MiwgOTI0NTEsIDk0MDY4LCAxMDgxOSwgMTE5NTgwLCAKKyAgICAxMDE4MywgMCwgMjYwOCwgMTQ3MCwgNzM5NjcsIDk0MDA4LCA2MjI3LCAwLCAxMjcxNzMsIDY5NzQxLCA5ODM1ODIsIDYxNjMsIAorICAgIDk4MzU1OCwgMCwgMTI3MzE0LCAwLCAwLCA4NjAzLCAwLCAxMTk4NjYsIDMzMDYsIDEwODc2LCA0MzM5MiwgMTE5NTczLCAKKyAgICAxMjc5MzEsIDU3NTEsIDAsIDYyMjIsIDAsIDAsIDEyMDg2LCA3NDAzLCAxNjAwLCA2NDMwOSwgNjQ5MzksIDAsIDY0NzgzLCAKKyAgICA5MjY1OCwgMTEzMTAsIDAsIDg4ODIsIDAsIDAsIDI1NzAsIDcwMjEsIDAsIDAsIDQzMTEwLCAwLCAxMjM0LCA2NTQwLCAKKyAgICA2OTc0LCAwLCAwLCA5ODMyMTEsIDUwMDIsIDAsIDQxMjg2LCA2OTk0NiwgMTI3MDE5LCAwLCA0MzU4NSwgMCwgNjU1MSwgCisgICAgOTgzOTYyLCAxMjgyMjksIDAsIDQxMjg5LCAwLCAxOTQ2MDIsIDAsIDg5NzcsIDYwMiwgMTIwODE0LCAwLCAxMjg3NzgsIAorICAgIDEyODY2MSwgMCwgOTgzMzc1LCA0MTI3OSwgMCwgMCwgMCwgMTEwODEsIDQzNjE1LCAwLCAwLCAwLCA5ODM2MTIsIDEyNzI3LCAKKyAgICAwLCAwLCA3ODM5NywgOTQ3NSwgNzExMiwgNjUxMDUsIDAsIDk2MzMsIDEwODg2LCA0MzU5MiwgNzgzMSwgOTgzODI5LCAKKyAgICAxOTQ1NzEsIDAsIDczOTE1LCA4MDc2LCA0MzA0OCwgODI5MCwgODI5MSwgNDMwNTEsIDkyNTcwLCAwLCAyNTk2LCA0MzU4NCwgCisgICAgMCwgMTMxMTMsIDAsIDEyNzc1NywgMjM5MywgNzA1OCwgOTA4NywgNzQwNjcsIDY4NjczLCA0MTU3NCwgNzgzMzcsIDAsIAorICAgIDc0MDU4LCA2Mzc2LCAwLCAwLCAwLCAwLCA5ODU0LCAxMjc3NDgsIDY0Njk2LCAwLCAxMjgyMjAsIDAsIDY5OTQsIDAsIAorICAgIDE3MjAsIDAsIDAsIDAsIDY1MjksIDcwNjMsIDk4MzE4MiwgMzc1MSwgOTEyMCwgOTgzNDg1LCAwLCAxNzk4LCA3MDksIDAsIAorICAgIDEzNTQsIDE4NzYsIDEzMTUyLCA2NTU3LCAxMjQzMCwgODEzNywgOTQwOTgsIDkyNjQyLCAwLCAwLCAyNDUsIDEyODA5NywgCisgICAgMTE0NTYsIDQxMjMzLCA3MDcwLCAwLCA5NDA0NiwgNjEzNiwgOTE3NjA5LCA2NTY3NywgODY4MiwgNDEyMzUsIDkyNTk1LCAKKyAgICA0MjA0NSwgOTgwNCwgMTE4OTYzLCA0MzIsIDM1OTUsIDE5NDk0NSwgNjU0MzcsIDAsIDc0NDU1LCA0MjM5OSwgMCwgMCwgCisgICAgMTI4Mjc0LCAwLCAxMTk2NTgsIDAsIDAsIDAsIDc3ODk0LCA4Nzk3LCAwLCA5MDUyLCA2NDg4OCwgNzE2NywgMjM1NiwgOTUsIAorICAgIDc0Nzg0LCAxMDU4MCwgMCwgNDIyODYsIDAsIDY0NjQwLCAwLCA5NDEwOSwgMCwgNzQxMzcsIDcwMDM1LCAxMDA2MywgCisgICAgMTI2NTIsIDEyMTk5LCA5MjQ4MCwgMCwgMjU2NiwgMTE5NzEsIDk4MzczNywgMCwgMTA2NSwgMCwgMCwgNDM0MDAsIDI1NzYsIAorICAgIDY2Njk2LCA5Mzk5OSwgMCwgNDM2MDQsIDAsIDAsIDc0MDgyLCA1MTQsIDc0NTAyLCA3MDAzMiwgMjkyMSwgNDMyMTUsIAorICAgIDY0NDkzLCA1NzcyLCAxMjk2OCwgNzAwNTUsIDE5NDk0NCwgNzQ1ODAsIDQzMzk4LCAyNTgwLCA5ODM4MTAsIDQxMzQxLCAKKyAgICA0MTIyMywgNjU2NCwgMTQ2MywgNDEzNDIsIDAsIDUyOTMsIDcwMDIwLCAwLCAzNzMzLCAxMTM0NiwgMCwgMTIwNTQsIDAsIAorICAgIDc0MDk4LCA0MjgyNywgMCwgMTMwOTEsIDAsIDAsIDAsIDkxNzkxNSwgMCwgMTI3MDI1LCAwLCA3NDgyMSwgMCwgOTgzNzMzLCAKKyAgICAxMTkwNDIsIDAsIDEyNzg2NSwgMTMwOTAsIDY2NjQzLCAwLCAxMjcwLCAxMTMyLCA0MjM2MCwgMCwgNzQwOTYsIDY2NjU1LCAKKyAgICA0MjU2OSwgMTI3ODI0LCAwLCA2NDc2MSwgMCwgNDEwMjEsIDg1MTAsIDQyNDMyLCAwLCAwLCAxOTQ3ODIsIDAsIDY0NDk2LCAKKyAgICA3NDEwOSwgNzAwMzAsIDk5MTUsIDAsIDk4MzIxOCwgNzA2MSwgNDEzMzYsIDM4NTQsIDY5NzAwLCAxMzE0MSwgNjg0MTMsIAorICAgIDQzNDAxLCA0MjMxOSwgMTMwODIsIDAsIDcwNjcsIDY4MjIxLCAwLCAxMjczODMsIDEyNzE3MSwgMCwgMCwgMTI3Nzk3LCAKKyAgICA5MDI5LCA0MzU0MywgMTE5MzE1LCAyMzUzLCA2MzA4LCAwLCA3NDc5MiwgMjYxMSwgMTE5MTg2LCAwLCAwLCAwLCA0MzY2NCwgCisgICAgOTIzOTksIDY2NjI3LCAwLCA0NDg0LCA4NTA5LCAxMTg5NzYsIDExMDY2LCA2NTIzMywgMCwgNDEyMjQsIDQxMDE3LCAwLCAKKyAgICAzNzQ3LCAxMDUyMiwgMCwgMCwgMTY5MSwgNDEyMjYsIDAsIDEyMTA3LCA3MTAwLCAxMDkwNSwgNjUwMTAsIDE5NDk4NiwgCisgICAgNjk3LCA2NjAxOCwgOTI4NCwgNDI0NCwgMCwgMCwgOTI2NDQsIDEzMTIxLCAxMjAwMzYsIDAsIDEyMDEwLCAxMjg1NzMsIAorICAgIDEyODIyMSwgMCwgMCwgMCwgMTI3MTkzLCA2NTgxNiwgNjgxMTEsIDAsIDEyNzkzMywgNjU2NjgsIDkyMjU3LCA2NjE4LCAKKyAgICAxMTg3ODQsIDY2MzY1LCAwLCA0MjIzNCwgMTI2NDgsIDc4MTEwLCA3MTIzLCA3MDAzOCwgNTc4NSwgOTE5OCwgOTc2NCwgCisgICAgNDEzMTYsIDY1ODc3LCA3MzgzLCAxMzIzMCwgNDEyOTksIDAsIDAsIDY4MzY1LCAxMjgyNTgsIDAsIDAsIDAsIDEzMTIyLCAwLCAKKyAgICAxOTEsIDcwMDYwLCA4NTg1LCA4MDAwLCA2NDQxMSwgMTIwNjUyLCA0Mjg4OSwgNjQ4NTAsIDQxMDcyLCA0MTU3OCwgMCwgCisgICAgNDE1NzcsIDAsIDEwMDAyLCAwLCA2NTMzLCA3MzgwMiwgNDE1NzAsIDAsIDY4MywgMzk2LCA0MTU4MCwgNjgxNDYsIDAsIAorICAgIDEyOTAxLCA0MzA1OCwgMCwgMzQzLCA3MTI5LCA0MjY4MCwgNDEzNjAsIDc4MTU0LCAwLCA0NzQzLCAwLCAwLCA3NDA0MCwgCisgICAgNzQxMDgsIDg3NDMsIDE3MjQsIDE0MzMsIDExOTMyMiwgMCwgMzczOSwgNjI2MywgNzEzNDksIDAsIDM5NjQsIDY1OTIsIDAsIAorICAgIDEyODY5MywgNjYwNDAsIDAsIDQyNTY4LCA2OTgwNiwgMTI4MTEzLCAxNzc4LCAzOTU2LCAwLCA0MjA3MCwgNjU2MywgCisgICAgNDMwNzUsIDkwMTgsIDk0MDA2LCA5ODMzOTYsIDEyMDY3LCA0MTMxMiwgMCwgNTU0NywgNzQ1MzEsIDEyNzk2OSwgMCwgCisgICAgODE3NSwgMCwgMjg0LCA4MTA4LCA5MzQsIDAsIDc0MDAxLCAxNzMsIDY2NDYwLCA3MTc0LCA5MjcwMywgMTE4ODIyLCAxNzUwLCAKKyAgICAwLCA0Mzk0LCA2ODM2OCwgMTgwNywgOTgzODg4LCA5MjI5OCwgMCwgNTg4OSwgMCwgNzE4MCwgMCwgMTE5MTQ1LCAwLCAKKyAgICA5MTc1NTgsIDQyNDcxLCA2OTgyLCAxNzIxLCA0NDAyMiwgNzg5MSwgNDIyNDMsIDQyMTYwLCAyNTgzLCA0NTEyLCAxMTkzNjAsIAorICAgIDY1MjMwLCAxMjgxMDksIDAsIDAsIDM4NTUsIDAsIDAsIDAsIDAsIDc0Mjk1LCAwLCAwLCA5MjQxNiwgMzk3NSwgMCwgCisgICAgNzQwODcsIDAsIDEyNjcyLCAzNzk4LCAyNzAzLCA5ODM1OTksIDAsIDIxMDksIDk3NzQsIDEyNzUsIDAsIDAsIDQxMDk1LCAKKyAgICAzOTYyLCAwLCAyOTMyLCA0MTEwMSwgMzk1NCwgNjQ1NywgNDUxMywgMCwgMCwgNzM5OTQsIDczOTkyLCAxNDY4LCAwLCAwLCAKKyAgICA0MTg1MSwgMTI4MjMwLCA0MTg0NiwgMCwgNTUyMzgsIDc2MzMsIDQxODQ5LCA2ODM4NSwgNDMyMCwgMzIyNCwgMCwgCiAgICAgMTI4MDMyLCAwLCA0MjUzMSwgMTE5MTA4LCAxNTEwLCAwLCA4MjU2LCAwLCAxMTM5MywgMCwgODg3OSwgMTI4MDc1LCAKICAgICA5MjQ3NCwgODc3MCwgMCwgMCwgNzgzNzcsIDE5MTAsIDg2NzEsIDc4Mzc0LCA0MjgzLCAwLCAxMjcxMTcsIDY4MzYxLCAKICAgICA3ODMxOCwgMjY1NCwgNzg5MywgMTk1MDA3LCAwLCAwLCAwLCA2NTEwNiwgNDI3NjEsIDEyODU3LCA0NTgxLCA4NDExLCAKQEAgLTE5MjM2LDI4ICsxOTI1NiwyOCBAQAogICAgIDkxNzYxOSwgMCwgMCwgMTAwNDMsIDAsIDExODYsIDQxNTcxLCA2OTk5LCA2MTcsIDk0NjQsIDEyNjY0MiwgMzY3NSwgNTIwNywgCiAgICAgNjUwNjIsIDUyMTMsIDE5NDc2OSwgMjYxNywgNDEzNDgsIDQxNTY4LCAxMjg4MDMsIDMyNTMsIDEyMDUzNSwgMCwgODYzMCwgCiAgICAgMTI4NTQ0LCAwLCA1NTk2LCA1NTQ1LCA3Mjg4LCAyNTg2LCA2NDg4NywgMCwgNTIxNywgNzEzMzYsIDAsIDAsIDAsIDY0MjkzLCAKLSAgICA2ODA5OCwgMjYzNSwgMCwgMCwgOTgzODM3LCAwLCA5ODM2MzIsIDc4MzUsIDcwMDQwLCAwLCAxOTQ5ODgsIDkyMjg1LCAKKyAgICA2ODA5OCwgMjYzNSwgMCwgMCwgOTgzODQ2LCAwLCA5ODM2NDEsIDc4MzUsIDcwMDQwLCAwLCAxOTQ5ODgsIDkyMjg1LCAKICAgICA2NDU1OCwgMTI3MTIyLCAwLCAxMjcxMjEsIDAsIDEyNzkxMywgMCwgNTc4NCwgOTgzMTAyLCAwLCAwLCA3MDAzMywgNDAxMSwgCi0gICAgOTE3NjE2LCA2ODEwMSwgMCwgNzg2NCwgNDI1NCwgNjUwOTUsIDk4MzQ4OCwgNTYwMCwgMzkwMywgMTI3MDgzLCAxMDQ0NywgCisgICAgOTE3NjE2LCA2ODEwMSwgMCwgNzg2NCwgNDI1NCwgNjUwOTUsIDk4MzQ5NiwgNTYwMCwgMzkwMywgMTI3MDgzLCAxMDQ0NywgCiAgICAgNTU5OCwgMTIwNywgMTIwNTIxLCA2NjY4OSwgMzUwMSwgNDI1ODIsIDQzNjAwLCAxOTQ3ODAsIDAsIDExMjQsIDU1OTcsIAotICAgIDE5NDc3OCwgMTk0NzcyLCA5MzIxLCA5ODM0NzYsIDk4MzQ3MywgOTgzNDc0LCAwLCAxNzE5LCA2ODM1NiwgNjgzNTQsIAotICAgIDk2NzEsIDExMjUsIDQzOTksIDEyNzQ3OSwgOTE3NjEwLCA5ODM0ODAsIDc2MzEsIDU0ODgsIDcxMjgsIDEyMDUzMiwgMCwgCisgICAgMTk0Nzc4LCAxOTQ3NzIsIDkzMjEsIDk4MzQ4NCwgOTgzNDgxLCA5ODM0ODIsIDAsIDE3MTksIDY4MzU2LCA2ODM1NCwgCisgICAgOTY3MSwgMTEyNSwgNDM5OSwgMTI3NDc5LCA5MTc2MTAsIDk4MzQ4OCwgNzYzMSwgNTQ4OCwgNzEyOCwgMTIwNTMyLCAwLCAKICAgICA1NDkxLCAwLCA4OTM3LCA0MzA0NCwgMjYwNCwgNzQxODcsIDU0OTAsIDQzMDQ2LCA1NDg5LCA3MjEyLCAxMTc2OCwgNDMwNDMsIAogICAgIDYzMDAsIDAsIDcxMjIsIDAsIDQzOTAsIDQ1NCwgNDEzOTcsIDAsIDk4NzUsIDc1OTMsIDE5NDc5MSwgOTIyNzQsIDExODkxMywgCiAgICAgNzIwNywgMCwgNjU5MDEsIDIzOTQsIDI1NzUsIDAsIDM3NDYsIDExMDE2LCA2NTc1MiwgMTIwMDM3LCAwLCA0MzQyMywgCiAgICAgMTI4NjgzLCAxMTk4OSwgMCwgMCwgMCwgMCwgMCwgODI0OSwgMTI4MTcyLCAwLCA3ODUzMSwgNjY0MCwgNzQ4MDYsIDI1OTgsIAotICAgIDUxMywgMCwgNjU4NiwgODY1NiwgMCwgMTIwNzEwLCA2NTAwOCwgMCwgMTk0Nzg0LCAxOTQ5ODksIDE5NDc5NSwgOTgzNDY1LCAKLSAgICA5MjUxNSwgNjg0NzUsIDkzOTczLCAwLCAwLCA3ODYzNywgMTI2NDcsIDAsIDEyODA0MywgNjk4OTMsIDEwMzYsIDk4MzQ2OSwgCi0gICAgOTI0MTksIDE3MjMsIDEyODA1NiwgNzQyMTcsIDAsIDQxNTc5LCAyNDQ0LCAwLCAxMDcwNSwgNzM4NzYsIDk4MzQ2MSwgCi0gICAgNzQ0ODYsIDk4MzQ1OSwgNzQwLCAxMTkyMjIsIDE5NDk3OCwgMTk0OTg0LCAwLCA0MjM4LCAxMTA3MSwgOTQ1OSwgNjg0MzcsIAorICAgIDUxMywgMCwgNjU4NiwgODY1NiwgMCwgMTIwNzEwLCA2NTAwOCwgMCwgMTk0Nzg0LCAxOTQ5ODksIDE5NDc5NSwgOTgzNDczLCAKKyAgICA5MjUxNSwgNjg0NzUsIDkzOTczLCAwLCAwLCA3ODYzNywgMTI2NDcsIDAsIDEyODA0MywgNjk4OTMsIDEwMzYsIDk4MzQ3NywgCisgICAgOTI0MTksIDE3MjMsIDEyODA1NiwgNzQyMTcsIDAsIDQxNTc5LCAyNDQ0LCAwLCAxMDcwNSwgNzM4NzYsIDk4MzQ2OSwgCisgICAgNzQ0ODYsIDk4MzQ2NywgNzQwLCAxMTkyMjIsIDE5NDk3OCwgMTk0OTg0LCAwLCA0MjM4LCAxMTA3MSwgOTQ1OSwgNjg0MzcsIAogICAgIDc4MTQwLCA3ODEzOSwgMTk0OTg1LCA4MTIxLCAxMDQzOCwgNzQ0ODcsIDQyNTc0LCAxMzI4NSwgNTUyNjMsIDExOTA3LCAKICAgICAxOTUwMDAsIDU2OTAsIDkyMjU1LCA5Mzk5MiwgMCwgNDMxODEsIDEzMDk1LCAwLCAxMjc4NTcsIDY0NDk4LCAwLCA5NTA2LCAKICAgICA2OTc4LCAxOTQ5OTMsIDc3OTkyLCAwLCAwLCAxOTQ5OTIsIDAsIDEyNzg0NSwgMTEyMiwgMzE3LCAwLCAwLCAwLCAwLCAKICAgICAxOTIwLCAwLCAxMDE3MywgODI3LCAwLCAwLCA3ODM3OCwgMTIwMTI2LCA1MjIzLCAxMzA0LCAwLCAxMTk1NjQsIDUyMjYsIAogICAgIDEyNjAyLCA5NDA0NCwgMCwgOTMyOSwgNzc1OCwgOTIzOSwgNDExNzMsIDUyMjQsIDU0ODcsIDEyMjIsIDU2OTIsIDQxNzI1LCAKICAgICA2OTIyOSwgOTY3NCwgNTY5NSwgNDE3MTEsIDY0NjI3LCAxOTkwOSwgMCwgNzQ2MDQsIDU2OTEsIDI4NywgODY2LCAyMzMsIAotICAgIDEyNzQ5MCwgOTgzNDMzLCA0MjgxNiwgOTQwMzYsIDY1MTQwLCA3NDc5NywgMCwgODgzMCwgNjU2OCwgNDIzMDAsIDEwNTI0LCAKLSAgICA0MTE3NSwgOTgzNDQwLCA5ODM0MzcsIDk4MzQzOCwgNTI5NiwgOTgzNDM2LCA0MjQ5MiwgNDM0MDIsIDkyNDY2LCAzMzAyLCAKKyAgICAxMjc0OTAsIDk4MzQ0MSwgNDI4MTYsIDk0MDM2LCA2NTE0MCwgNzQ3OTcsIDAsIDg4MzAsIDY1NjgsIDQyMzAwLCAxMDUyNCwgCisgICAgNDExNzUsIDk4MzQ0OCwgOTgzNDQ1LCA5ODM0NDYsIDUyOTYsIDk4MzQ0NCwgNDI0OTIsIDQzNDAyLCA5MjQ2NiwgMzMwMiwgCiAgICAgMCwgMCwgNjUxNiwgNjUxNSwgNjUxNCwgNjUxMywgNjUxMiwgMCwgNzg1NiwgODY5MCwgMCwgMCwgMTIxMjIsIDExOTYwMiwgCiAgICAgNDM5NzYsIDAsIDE3ODUsIDY5OTI1LCA2ODYyMiwgNjUxNTMsIDE5NDgxMCwgNTEzOCwgMCwgMCwgMTE4ODY5LCAwLCA0NTQwLCAKICAgICA0MTE4MSwgMCwgNjIwMCwgMCwgNTEzNCwgMCwgMzIyLCA0NjQzLCA1MTMyLCAwLCA2Mzg5LCAxMjg1MzMsIDUxNDMsIDAsIApAQCAtMTkyNjUsNyArMTkyODUsNyBAQAogICAgIDEyNzAxMiwgMTAyNzAsIDEwMjg2LCAxMDMxOCwgMTAzODIsIDQzNTI5LCA2NjQ3NywgMCwgMCwgNzQxNzAsIDAsIDMyMzQsIAogICAgIDAsIDAsIDc0Mzc2LCA0MzEzOSwgMTE4ODE1LCAxMjcwODQsIDEyMDYyNywgODc2NywgMCwgNzQ0ODksIDk2OTUsIDEyMDc0NiwgCiAgICAgNTIwMSwgMCwgNjIxNSwgMTI3MTQsIDYyMTQsIDEzMTAxLCAwLCAxOTQ5OTksIDY1MjY4LCAwLCAwLCAwLCAxMTAyNywgMCwgCi0gICAgMTAwNTksIDEwNTExLCA0MjA3NSwgOTc2NywgNzg5LCAxNzQ5LCA3ODg5MCwgMTI3MDcxLCA5ODM2NjEsIDMyMCwgMCwgCisgICAgMTAwNTksIDEwNTExLCA0MjA3NSwgOTc2NywgNzg5LCAxNzQ5LCA3ODg5MCwgMTI3MDcxLCA5ODM2NzAsIDMyMCwgMCwgCiAgICAgODY0NywgMCwgMzA0OSwgMCwgNjQ3MSwgNDIwNzEsIDQzMTU2LCA5OTI1LCAxMjczNTYsIDEyNzM1NSwgNjY0NzgsIDQ5NjAsIAogICAgIDU1NDksIDEyNzM1OSwgMTI3MzQ2LCA4NDg1LCA0NjcxLCA1NDE4LCAxMjczNTAsIDMzNTEsIDEyNzAwNiwgMTI3MzUxLCAKICAgICAxMDYxMCwgNTQxNCwgMzA2NCwgNjIxMiwgNDI4NiwgNTQyMSwgMTI3MzQ0LCA5NTU0LCAwLCA5NDA0OCwgMTI3MTA5LCAKQEAgLTE5MjczLDE2ICsxOTI5MywxNiBAQAogICAgIDEyNjAzLCA3MTMxLCAxMTQzMCwgNDU2NiwgNzUxOCwgOTMxNywgMzgwMSwgMTAzNDIsIDEwNDA2LCAwLCAxMTkyNTksIAogICAgIDQyNTc2LCAwLCA1MjAwLCAxMjY2MTEsIDkxNzk0OCwgMCwgOTE4MywgMTI3MzYxLCA3NDQ1OCwgNzM4MjUsIDM5NSwgNTQ4MiwgCiAgICAgNTE5OCwgNDM0OSwgMTAzOTAsIDc0MjAyLCA1MTk2LCA0MzIyNCwgNjExMywgNDIwMDksIDUyMDUsIDAsIDQzMzA3LCAwLCAKLSAgICAxMTg5NzMsIDAsIDEyMTM0LCAwLCAwLCAxMTg4NDMsIDkxMjYsIDQzNSwgMCwgMTIwMTQsIDEwMzc3LCA4MDkzLCA5MDc5LCAKLSAgICAzMjAzLCAxOTIsIDY1MTA5LCAzMzg1LCAwLCA2NDQzMCwgNTM4MywgMTAyOTQsIDEwMzI2LCAxMjgxNzgsIDU3MzgsIAotICAgIDk4MzIxMywgMzMzNiwgNzgzNTUsIDUzNjEsIDM2MjMsIDQxMTU5LCAwLCA2ODExMiwgNzg3MiwgODU4MSwgMCwgMTI2MCwgCisgICAgMTE4OTczLCAwLCAxMjEzNCwgMCwgMCwgMTE4ODQzLCA5MTI2LCA0MzUsIDk4MzYyNCwgMTIwMTQsIDEwMzc3LCA4MDkzLCAKKyAgICA5MDc5LCAzMjAzLCAxOTIsIDY1MTA5LCAzMzg1LCAwLCA2NDQzMCwgNTM4MywgMTAyOTQsIDEwMzI2LCAxMjgxNzgsIDU3MzgsIAorICAgIDk4MzIxNSwgMzMzNiwgNzgzNTUsIDUzNjEsIDM2MjMsIDQxMTU5LCAwLCA2ODExMiwgNzg3MiwgODU4MSwgMCwgMTI2MCwgCiAgICAgMzE0OSwgNTM1OSwgMTIwMTM0LCAwLCA3OTE0LCA1MzU3LCA5MjE3MCwgMTI4NjU5LCAyNjI0LCA1MzY0LCAwLCAxMTQzMSwgCiAgICAgMTIwMDMwLCA5MTAxLCAxMTA1OCwgNzgyODgsIDAsIDc4MjkzLCA0MjI3MSwgNzgyODksIDQyOTE3LCAxMjA3OTMsIDAsIAogICAgIDY1NTY2LCA2NzE3LCAxMDYxOSwgNDMzNjAsIDc4Mzg1LCA3ODM4NCwgMTE4MzIsIDc4MzgyLCA3ODM4MSwgNzgzODAsIAogICAgIDc4Mzc5LCA5MzE5LCA3MDk3LCAxMTkwNTUsIDc3OTA2LCAzMjMyLCA3MzgyNCwgNzQ1ODEsIDEyMDYzMiwgMCwgMCwgCiAgICAgNDE4ODksIDkyNDUzLCAwLCAxMTYxLCA0MTg5NSwgNzQxMDMsIDk3MDEsIDg2MjIsIDAsIDAsIDczODE5LCAxMjA1ODgsIAogICAgIDUwMTIsIDc3OTEyLCA0MTM2MiwgNjk4NjIsIDc4Mjk2LCAxMTkyMSwgMCwgMTE3NjksIDAsIDY4NjA5LCA0MTM2NCwgMCwgCi0gICAgNzQyMjgsIDQxMzUyLCA0MTM2MSwgMCwgNDEzNjYsIDAsIDMzNTYsIDAsIDkxNywgNjg0MjIsIDExOTkxNSwgNzEzNCwgCisgICAgNzQyMjgsIDQxMzUyLCA0MTM2MSwgMCwgNDEzNjYsIDAsIDMzNTYsIDExNjExLCA5MTcsIDY4NDIyLCAxMTk5MTUsIDcxMzQsIAogICAgIDgxOTksIDc4Mzg5LCAxMTk5MTcsIDY3NywgMTE5OTE2LCAwLCAxMTk5MzIsIDEyNzE2OSwgMCwgMCwgMCwgMzM0OSwgCiAgICAgNzQxMjUsIDcwMjIsIDg5MjcsIDQ3MzksIDAsIDU4MDIsIDAsIDg2MTUsIDAsIDAsIDQ5MSwgMTI4ODE5LCAxMDE5MCwgCiAgICAgMTIwNjk4LCA2NTgzNywgMTI4ODIwLCA4NDI2LCAxMTA5MiwgOTg5MSwgMCwgNDI0OTcsIDcxMTMsIDc1ODYsIDQyMzA1LCAKQEAgLTE5MzEwLDMwICsxOTMzMCwzMCBAQAogICAgIDU1MjUyLCA3Mzk3MiwgMTQ0MiwgMCwgNTg5NCwgNzAwNjksIDAsIDQxMTcxLCA5MjUxMSwgNzQzMTMsIDAsIDEzMTYyLCAwLCAKICAgICAzMzM0LCAxOTUwMTAsIDExODgwMywgNzc4ODEsIDY2MDIyLCAwLCAwLCAxNjUxLCAxMjg3NzEsIDg4NjEsIDAsIDAsIDExNDIsIAogICAgIDAsIDgyNzEsIDAsIDk4MzA1OCwgMTI2NjQ1LCAxMjkwMywgMCwgNDAwMiwgNDM2MjYsIDEwNDQyLCAxMDY3NiwgMzM0NCwgMCwgCi0gICAgMCwgMTI5MjAsIDE5NDU2MCwgMCwgMCwgNjY2NDIsIDEyNzcsIDAsIDc4NzEsIDAsIDAsIDc4ODUzLCAwLCA3ODg1NCwgCisgICAgMCwgMTI5MjAsIDE5NDU2MCwgMCwgMCwgNjY2NDIsIDEyNzcsIDAsIDc4NzEsIDAsIDE5NDY4NiwgNzg4NTMsIDAsIDc4ODU0LCAKICAgICAxMjAzNjAsIDAsIDExNzg0LCAwLCA3ODAxMiwgNDcwMCwgNjYzNjYsIDc4ODU4LCAxMjAzNTksIDExMDEyLCAwLCA3ODg1NiwgCiAgICAgOTI0MDAsIDc3ODc5LCA0OTczLCA4Nzg0LCA3Nzg3NywgNzQ4MDQsIDc3ODc0LCA3Nzg2OSwgNzc4NzEsIDQyNDQwLCAwLCAKICAgICA0MzExOCwgMCwgNDIzNjQsIDY3NzQsIDY3NzMsIDkxNzU2MCwgMTIwMzY5LCAxMDM0NiwgMTA0MTAsIDc4ODU5LCA5MjQzLCAKICAgICAyNDY0LCA3NDI2MywgNjEwOCwgMzM3MiwgMCwgNjI0NywgNDMxMTcsIDc0NTI2LCA3MTIxLCA3NDE2NiwgMCwgMTIwMzU1LCAKICAgICA5MjUzNywgMCwgMCwgMTk1MDM0LCAwLCAwLCAwLCA3MDA4MywgMzM1NCwgMTk1MDM3LCA0MTkyLCA5Mjg5LCAxMTg5OTksIAogICAgIDQxMTkxLCAzODc2LCAwLCA3MDA2NywgMTIwNjYwLCA0MzY5NiwgNDMzODAsIDAsIDk4MzA5MSwgMCwgMCwgMTE2MDMsIAotICAgIDk4Mzk0NSwgMCwgNjU4OSwgMTI4NTg4LCAxOTQ2NzksIDAsIDAsIDk4MzY5MSwgMCwgMCwgNDI1NzIsIDEyODI2NCwgCisgICAgOTgzOTU0LCAwLCA2NTg5LCAxMjg1ODgsIDE5NDY3OSwgMCwgMCwgOTgzNzAwLCAwLCAwLCA0MjU3MiwgMTI4MjY0LCAKICAgICAxMDYzMCwgNzQ4MjcsIDE5NjMsIDExNjIyLCAxMjcwOTgsIDExNjU0LCAwLCA3NTUwLCAxMDY4NiwgNTkwMywgMCwgNzgwMDksIAogICAgIDQxMzI5LCA5NjYyLCA5MTc5MzcsIDY0Njk4LCAzMzY2LCAxMDM5OSwgMCwgNTU0MiwgMTEwMTMsIDEyNzkyNywgMTI4MzAwLCAKLSAgICAwLCA3ODYyMSwgMTk0NjcyLCA2OTI1LCAwLCAwLCA5MTc5MjksIDAsIDExNTY4LCA5ODM2NjQsIDQzMzY3LCA2NDU3OSwgCisgICAgMCwgNzg2MjEsIDE5NDY3MiwgNjkyNSwgMCwgMCwgOTE3OTI5LCAwLCAxMTU2OCwgOTgzNjczLCA0MzM2NywgNjQ1NzksIAogICAgIDkxNzkzMCwgNzg1MiwgMCwgMCwgNjc1NCwgNjMxMiwgMCwgNjQ2NzIsIDY1Mjk2LCAwLCAxMTg5NTcsIDAsIDQxNiwgCiAgICAgMTIyOTYsIDY4NDU3LCA3MzgzNCwgNjgxNzcsIDExMDUwLCAxMDk4NCwgOTIyMDgsIDAsIDAsIDkyMTgyLCAwLCA5ODM2MDUsIAotICAgIDk1MzIsIDY2MzU1LCAwLCA5ODMyMjgsIDkxNzkyNSwgNjQzNDMsIDE5NTAzMiwgMTI4MjgxLCAxOTUwMzEsIDAsIDE5NTAzMCwgCisgICAgOTUzMiwgNjYzNTUsIDAsIDk4MzIzNCwgOTE3OTI1LCA2NDM0MywgMTk1MDMyLCAxMjgyODEsIDE5NTAzMSwgMCwgMTk1MDMwLCAKICAgICAxOTUwNTcsIDExNDQ1LCAwLCAyMTEyLCAxOTUwNTYsIDEyODgxNCwgMTAxODUsIDEwMjEsIDEyODEzMCwgOTUwNywgMTAyMTAsIAogICAgIDc0NTQ0LCA4MDIzLCAxMjAwLCAxMjI0MywgNzgwMDEsIDUyODIsIDc4MDAzLCA5NjI0LCAxMTU0NSwgMCwgMTIwNDkzLCAKICAgICAzMzQzLCA0NDI0LCAxMTA0NywgMTg4NSwgNDMyNjgsIDM4OTYsIDc4NDQ0LCA2NjQ5NywgMjk0NywgMzkyLCA3ODk0LCAKICAgICA0MzkxLCA2ODEzOSwgOTgzMDYyLCAxMzA1OSwgNzQ4MTYsIDc3OTk4LCAzMzgxLCA3OTQyLCAwLCA2OTIxOSwgMCwgNjQ3NTcsIAogICAgIDAsIDM5MTMsIDAsIDAsIDc4MjM1LCA3MDQ0LCAxMjY1LCAwLCA2MzA5LCA3MDQ1LCA3MTc1LCA3MDQ3LCA3ODIzOSwgCi0gICAgMTE3OTEsIDAsIDAsIDgyMjEsIDc4MzA3LCA0MTg2NCwgMCwgMCwgMCwgMCwgMTY3LCA5ODM4OTcsIDc4MzAxLCA5ODM2NDQsIAotICAgIDc0MjExLCA0MTg5NywgNjg0NzcsIDAsIDkxNzU4MywgOTgzNjI1LCA5NDA2NSwgMjQ5MywgMCwgMTE4ODExLCAwLCAwLCAKKyAgICAxMTc5MSwgMCwgMCwgODIyMSwgNzgzMDcsIDQxODY0LCAwLCAwLCAwLCAwLCAxNjcsIDk4MzkwNiwgNzgzMDEsIDk4MzY1MywgCisgICAgNzQyMTEsIDQxODk3LCA2ODQ3NywgMCwgOTE3NTgzLCA5ODM2MzQsIDk0MDY1LCAyNDkzLCAwLCAxMTg4MTEsIDAsIDAsIAogICAgIDY0MzU0LCAwLCA4Nzc3LCAwLCA0MDYsIDg4ODQsIDIzODUsIDAsIDkyNDUwLCAwLCA5MTc1NzMsIDQzMDMwLCA0MjAyNywgCiAgICAgMTIxMTQsIDAsIDkxNzU3OSwgNjQ5MzYsIDE5NDY5NSwgMCwgMTIwNjI5LCAxMDU2MSwgMCwgODM2NSwgMTIwNTM5LCAKLSAgICA5ODM3NjUsIDY1ODQxLCAxMjA3ODcsIDExNjAxLCAwLCA3NDEyMSwgMCwgOTE3NTc1LCA3ODM0LCA3NDE1OSwgMCwgCisgICAgOTgzNzc0LCA2NTg0MSwgMTIwNzg3LCAxMTYwMSwgMCwgNzQxMjEsIDAsIDkxNzU3NSwgNzgzNCwgNzQxNTksIDAsIAogICAgIDkxNzU3NCwgMTAyOTgsIDY2MjQsIDQ5MDgsIDkxNzU5NiwgMTYzOSwgMCwgMCwgNzQxNTcsIDYzMjcsIDY3MjQsIDAsIAogICAgIDEyODA4NiwgOTI1NjYsIDY5OTEwLCA0ODE3LCA3ODQ0NiwgMTk0NzU5LCA5MjUzNiwgNzA0MywgOTYwMCwgMTEwMjIsIDAsIAogICAgIDAsIDAsIDAsIDAsIDAsIDc1NDgsIDY0Nzk0LCA0MjA1MCwgMTIyOTEsIDU1Mjg5LCAxOTQ3NjEsIDEyMzQzLCA2NTcsIApAQCAtMTkzNDMsMTQgKzE5MzYzLDE0IEBACiAgICAgNDE0MDYsIDQzMjczLCA3NDE2MCwgMTE5OTgzLCA3MzkzOSwgOTI2MzgsIDExOTk4NCwgMTE5OTc5LCA0MTQwNCwgMTE2NSwgCiAgICAgMTE5OTgwLCA0NDUxLCAxMzA4NywgMCwgMTEyODQsIDExOTk4NywgNzAwOTcsIDY1MTU1LCA0MzAxNCwgNTQzOSwgOTM2MywgCiAgICAgNzAwNzAsIDMzNzUsIDEyODg2OSwgNTkwMCwgOTM5OTAsIDc4ODksIDI3MjIsIDQyMjYyLCAwLCAwLCAxMjg3NzQsIDAsIAotICAgIDIyODIsIDAsIDEyNzgxMCwgMTE0MDEsIDk4MzgxMywgMCwgNjg0NTksIDAsIDAsIDAsIDAsIDY1NDM4LCAwLCA3MjgwLCAKLSAgICAxMjc4ODcsIDAsIDEyNzM4MSwgNDg2OCwgMTE5OTY3LCAxMTk5NjYsIDExODc5OCwgMCwgMCwgNDMxNjEsIDAsIDkyMzYwLCAKLSAgICAwLCA1MTgyLCAwLCAxMjA1NDIsIDAsIDAsIDQyMjYsIDExOTI0MywgMTIxMzUsIDU3MzIsIDQ0NjQsIDAsIDcxMzMwLCA5NzcsIAorICAgIDIyODIsIDAsIDEyNzgxMCwgMTE0MDEsIDk4MzgyMiwgMCwgNjg0NTksIDAsIDAsIDAsIDAsIDY1NDM4LCAwLCA3MjgwLCAKKyAgICAxMjc4ODcsIDAsIDEyNzM4MSwgNDg2OCwgODI5NywgMTE5OTY2LCAxMTg3OTgsIDAsIDAsIDQzMTYxLCAwLCA5MjM2MCwgMCwgCisgICAgNTE4MiwgMCwgMTIwNTQyLCAwLCAwLCA0MjI2LCAxMTkyNDMsIDEyMTM1LCA1NzMyLCA0NDY0LCAwLCA3MTMzMCwgOTc3LCAKICAgICA0NDU4LCAwLCAwLCA2NDc3MCwgNzQ4MzgsIDAsIDM0NCwgMCwgMTk0NzkwLCAxMzk1LCA2NDI3OSwgMCwgOTIyNDAsIDAsIAogICAgIDc4NiwgMCwgNDMxNzQsIDY0MzQwLCAwLCAxOTQ3NjcsIDEyMDcyMywgNDMwMjYsIDc2MTIsIDEwMTMyLCA2NDQxMywgCiAgICAgNjUwMjUsIDAsIDAsIDAsIDkzOTU2LCAwLCA2ODQ0NCwgMCwgOTI0MzcsIDAsIDExOTE2MCwgMTAyMDQsIDkyNjU2LCAwLCAKLSAgICAxMjc4MDksIDk4MzYzNSwgMTM5OSwgOTgzNjQzLCA2NTIxNywgMCwgODg1MiwgMTI4NTcxLCAyNDEsIDEyODc4MCwgNDkwNywgCi0gICAgMCwgOTgzNjMwLCA3OTMyLCA5NzI3LCAxMjg4NzMsIDc0MjU1LCA4NzQ4LCAwLCAwLCA5ODM2MzQsIDAsIDQyNzgwLCAwLCAwLCAKKyAgICAxMjc4MDksIDk4MzY0NCwgMTM5OSwgOTgzNjUyLCA2NTIxNywgMCwgODg1MiwgMTI4NTcxLCAyNDEsIDEyODc4MCwgNDkwNywgCisgICAgMCwgOTgzNjM5LCA3OTMyLCA5NzI3LCAxMjg4NzMsIDc0MjU1LCA4NzQ4LCAwLCAwLCA5ODM2NDMsIDAsIDQyNzgwLCAwLCAwLCAKICAgICAwLCA0MjE3LCAwLCA4NjUwLCAwLCAwLCAwLCA2OTkwMCwgMTE4ODcyLCA0MzA5OSwgMzk2NSwgMTE5MTE5LCA2NzE5LCAwLCAKICAgICAxMzMwMCwgNzg0MzksIDkzOTcxLCA0MzA1NywgNjY1ODgsIDExODk5MSwgMCwgMCwgNzM4MTUsIDQ0MjAsIDAsIDY0MTAsIAogICAgIDc3NjAsIDAsIDAsIDAsIDAsIDAsIDcyOTQsIDAsIDAsIDAsIDkwNjYsIDAsIDExOTkzLCA0MzE4OCwgMjYyNiwgNzc2MiwgMCwgCkBAIC0xOTM1OCw0NSArMTkzNzgsNDUgQEAKICAgICA2NjQ1NCwgOTU5MiwgNDI4NTEsIDEyNjk5MywgMTU0MiwgOTIzMDMsIDAsIDAsIDAsIDAsIDc0MzExLCA3ODQ5NywgMCwgCiAgICAgMTAxODEsIDAsIDQzNjI0LCAwLCA3Nzc5LCAwLCAxMDE5NSwgOTQ3OSwgNjAyOSwgMCwgOTIyNjgsIDk2ODksIDAsIDY1NTc3LCAKICAgICA4OTkzLCA2NjM1OCwgMCwgNDIzNzgsIDMzNjgsIDYwNiwgMTI3MDMwLCA3Njk3LCA2OTIzNywgNjk3ODcsIDIwMzAsIDAsIAotICAgIDYwMjcsIDgzNzAsIDQzMjIsIDAsIDY1MjA3LCAwLCA5ODMzMzEsIDk4MzMzMCwgOTgzMzI5LCA5ODMzMjgsIDI3MzUsIAorICAgIDYwMjcsIDgzNzAsIDQzMjIsIDAsIDY1MjA3LCAwLCA5ODMzMzksIDk4MzMzOCwgOTgzMzM3LCA5ODMzMzYsIDI3MzUsIAogICAgIDQyODMxLCA3NzkzNSwgMTI3MTIwLCA3NDg2NiwgODg4MSwgMTE5MDQ3LCAwLCAwLCA3Mzk0NiwgMCwgMCwgMCwgNjgxNDAsIAotICAgIDk4MzkxOSwgOTU3NiwgMTI4ODcyLCAzMzQ3LCA0MTYwLCA1MTU0LCA1NTI4OCwgMzc5NCwgNjY1NjQsIDg1MzAsIDEyNzA2MywgCi0gICAgNzcwOSwgNDExMTIsIDk4MzEzMiwgNjY1NjAsIDQyMDQxLCA0NTcyLCAxMjg3NiwgNjY1NjEsIDk4Mzc0OSwgNjc1OCwgCi0gICAgOTgzOTE3LCAxNjE1LCA1ODU1LCA4MDksIDAsIDkyMjgzLCAxMjgzMTYsIDEyODAwNCwgNTc5OSwgOTgzMzIwLCA3MDEwMCwgCi0gICAgOTgzMzE4LCA3MjYwLCA5ODMzMTYsIDQzMDMxLCA2NDQyNSwgNjUxMjgsIDc4ODE5LCA2NDM4NiwgNjUyNTcsIDAsIDY4NjE2LCAKKyAgICA5ODM5MjgsIDk1NzYsIDEyODg3MiwgMzM0NywgNDE2MCwgNTE1NCwgNTUyODgsIDM3OTQsIDY2NTY0LCA4NTMwLCAxMjcwNjMsIAorICAgIDc3MDksIDQxMTEyLCA5ODMxMzIsIDY2NTYwLCA0MjA0MSwgNDU3MiwgMTI4NzYsIDY2NTYxLCA5ODM3NTgsIDY3NTgsIAorICAgIDk4MzkyNiwgMTYxNSwgNTg1NSwgODA5LCAwLCA5MjI4MywgMTI4MzE2LCAxMjgwMDQsIDU3OTksIDk4MzMyOCwgNzAxMDAsIAorICAgIDk4MzMyNiwgNzI2MCwgOTgzMzI0LCA0MzAzMSwgNjQ0MjUsIDY1MTI4LCA3ODgxOSwgNjQzODYsIDY1MjU3LCAwLCA2ODYxNiwgCiAgICAgMTIwNjA3LCA5MzQ3LCAxMjgwNjcsIDY1MzIsIDAsIDAsIDAsIDEyNzA2MCwgNjU4MjgsIDAsIDI4MywgNjg2NjUsIDc4ODEzLCAKLSAgICA1MzIsIDc4NjYzLCAwLCA5ODM3ODcsIDEyMDYwOSwgMCwgMzM3MCwgMCwgMTEzNjEsIDU0NDMsIDc4Nzc4LCA4MTUzLCAKLSAgICA3Mzc2NywgMCwgMTA3NDEsIDAsIDIyOTgsIDAsIDk4MzkwOCwgNjU0OTUsIDY0NzA2LCA5ODMzMTAsIDQzMzQ0LCA5ODMzMDgsIAotICAgIDcxNDQsIDk0NjYsIDc4ODY2LCA5ODI0LCA5ODMzMDMsIDk4MzMwMiwgMCwgMCwgOTE1LCA0MzQyNSwgMCwgMCwgMCwgMCwgCisgICAgNTMyLCA3ODY2MywgMCwgOTgzNzk2LCAxMjA2MDksIDAsIDMzNzAsIDAsIDExMzYxLCA1NDQzLCA3ODc3OCwgODE1MywgCisgICAgNzM3NjcsIDAsIDEwNzQxLCAwLCAyMjk4LCAwLCA5ODM5MTcsIDY1NDk1LCA2NDcwNiwgOTgzMzE4LCA0MzM0NCwgOTgzMzE2LCAKKyAgICA3MTQ0LCA5NDY2LCA3ODg2NiwgOTgyNCwgOTgzMzExLCA5ODMzMTAsIDAsIDAsIDkxNSwgNDM0MjUsIDAsIDAsIDAsIDAsIAogICAgIDEyNzE3OCwgNDMyNjQsIDcwMDk2LCAwLCAwLCA0MzAzOCwgNzg4NjQsIDY3MzAsIDc4ODYyLCA2ODE2MSwgNjQ1NTAsIAogICAgIDUxODYsIDczNjAsIDEyNzgzNywgMCwgMTIxMDgsIDAsIDY1MTI0LCA0MzEyNywgNjYwNDMsIDAsIDYzMjYsIDQzMTA3LCAKLSAgICA3NzgyNiwgMCwgNDI1NjIsIDAsIDEyODgyMSwgMCwgMTI4NTIwLCAxMTQ4NSwgNjEwMywgMTI3MTIzLCA5ODMyOTcsIAotICAgIDExNzE4LCA5ODMyOTUsIDEyODg5LCA5MjY1NywgMTI3MTM3LCAwLCAwLCAwLCA1NTI0NSwgMCwgMTYzMCwgMTI4MjMyLCAKKyAgICA3NzgyNiwgMCwgNDI1NjIsIDAsIDEyODgyMSwgMCwgMTI4NTIwLCAxMTQ4NSwgNjEwMywgMTI3MTIzLCA5ODMzMDUsIAorICAgIDExNzE4LCA5ODMzMDMsIDEyODg5LCA5MjY1NywgMTI3MTM3LCAwLCAwLCAwLCA1NTI0NSwgMCwgMTYzMCwgMTI4MjMyLCAKICAgICA2NTQ4MywgMCwgMTI1NjUsIDAsIDY1NDc2LCAxMjAwMTMsIDAsIDExOTU1NCwgOTI4MywgNzcwMCwgOTE3NTM3LCA5NjkwLCAKICAgICA2NTQ5OSwgMCwgNjQ1OTMsIDUxMiwgMzM3NiwgNjgyMTAsIDAsIDEyODY3NywgNzc4OTIsIDYzMiwgMTI5NDAsIDc3ODkxLCAKLSAgICA0MjUyOSwgNzg1ODcsIDAsIDU5NTcsIDExMDU5MywgODkyNiwgOTgzMjkxLCA5ODMyOTAsIDEyODI3MywgMTA3NDUsIAorICAgIDQyNTI5LCA3ODU4NywgMCwgNTk1NywgMTEwNTkzLCA4OTI2LCA5ODMyOTksIDk4MzI5OCwgMTI4MjczLCAxMDc0NSwgCiAgICAgMTAxNzQsIDczNzksIDY0NTgxLCA1Mzg2LCAxMjA2ODYsIDExNzEzLCAxMDYzMywgNjk3MDgsIDUwNTYsIDAsIDAsIDAsIAogICAgIDEyMDc3MywgMCwgOTgxMiwgMCwgNDQ2MCwgMCwgMCwgNzEzMDcsIDEyODAzOCwgMCwgMCwgMTI3MTc0LCA2NDI3OCwgCiAgICAgOTIzNzAsIDQzNDY2LCAwLCAwLCA2NDM4OSwgMjk1MywgNzM4NzksIDE4MDEsIDEyODM1LCAxMTkwMjksIDAsIDczODIzLCAwLCAKLSAgICA2NjM3NSwgMjA4NSwgNzAyLCA0MjU3OSwgNzc4ODQsIDc3ODg1LCAxMzA3NCwgNzc4ODMsIDk4MzI3OCwgOTgzMjc3LCAKLSAgICAxMjg1NzAsIDEyMTA2LCA5ODMyNzQsIDc0MjA3LCAxNzU1LCAxMDQ4MiwgMTI4NjMsIDc3ODk4LCAxMTYzLCAyOTUxLCAKKyAgICA2NjM3NSwgMjA4NSwgNzAyLCA0MjU3OSwgNzc4ODQsIDc3ODg1LCAxMzA3NCwgNzc4ODMsIDk4MzI4NiwgOTgzMjg1LCAKKyAgICAxMjg1NzAsIDEyMTA2LCA5ODMyODIsIDc0MjA3LCAxNzU1LCAxMDQ4MiwgMTI4NjMsIDc3ODk4LCAxMTYzLCAyOTUxLCAKICAgICA5NTIyLCA3NDA3OSwgNzgyNjYsIDY2NjA0LCAwLCAzMzg0LCA2OTIyNywgMTA3MDIsIDgzMCwgNzc5MDIsIDc3ODk5LCAKICAgICA3NzkwMCwgODQ1MSwgMCwgMCwgMCwgNjk3MzksIDAsIDAsIDAsIDAsIDI5MDgsIDAsIDQzMzg2LCA2NDkwMiwgNDI0MywgMCwgCi0gICAgMTIyMzksIDAsIDAsIDQ0NDEsIDAsIDk4MzI3MSwgNzM5NDAsIDY0MzUyLCAxMjc1MTMsIDk4MzI2NywgNDExLCA5ODMyNjUsIAotICAgIDkxOTksIDk4MzI2MywgNDA1NiwgMTE4OTkyLCA0MTg5MCwgMCwgMjczMCwgNDE2MDQsIDk4MzkyOCwgNTQyOCwgMTk0NzQzLCAKKyAgICAxMjIzOSwgMCwgMCwgNDQ0MSwgMCwgOTgzMjc5LCA3Mzk0MCwgNjQzNTIsIDEyNzUxMywgOTgzMjc1LCA0MTEsIDk4MzI3MywgCisgICAgOTE5OSwgOTgzMjcxLCA0MDU2LCAxMTg5OTIsIDQxODkwLCAwLCAyNzMwLCA0MTYwNCwgOTgzOTM3LCA1NDI4LCAxOTQ3NDMsIAogICAgIDMzNjQsIDQyMjY1LCA2NDQzNywgMTI3OTM1LCAxMTg4MTYsIDE5NDc0MiwgOTY4NCwgMjE2LCAwLCAxNDAxLCAxMjgwNTMsIAogICAgIDQ0MDEyLCAwLCAwLCA5MjU4NSwgOTE1OCwgNzc4NDIsIDY5OTA1LCA1NzY4LCAwLCAwLCAwLCA0ODQsIDE5NDczOSwgMCwgMCwgCi0gICAgNjU4OTUsIDAsIDAsIDMzMzgsIDczOTM1LCA1NzIsIDcwNDEsIDI3MzYsIDY3NjA1LCA5ODMyNTUsIDkzOTYyLCAyNzk0LCAKKyAgICA2NTg5NSwgMCwgMCwgMzMzOCwgNzM5MzUsIDU3MiwgNzA0MSwgMjczNiwgNjc2MDUsIDk4MzI2MywgOTM5NjIsIDI3OTQsIAogICAgIDg4MDcsIDY0NDkxLCA3Nzg0NywgNTQzOCwgNTIyMiwgNTM4MSwgNDMxMTQsIDAsIDUxOTMsIDUxMjUsIDU0NTYsIDU1MDksIAogICAgIDc3ODQ2LCAxOTQ3NDcsIDk1MzQsIDAsIDAsIDAsIDM0MzAsIDAsIDAsIDc4NzE3LCAwLCA5ODEsIDAsIDQzMzAsIDczOTI5LCAKICAgICAxMjA1MzYsIDE4MjQsIDEwOTA4LCAwLCA3MDM0LCA0MTY4MywgNjQ2MTcsIDAsIDczNzU0LCAzOTU3LCA2NDM1OCwgNjQ1NDcsIAotICAgIDEyODI1OSwgNjc0LCA2Mzk5MSwgOTgzMjQzLCAyOTQ2LCA1MzU0LCA1MjUxLCA1MzI4LCA1MzA3LCAzNzU5LCAxMTQxMSwgCisgICAgMTI4MjU5LCA2NzQsIDYzOTkxLCA5ODMyNDksIDI5NDYsIDUzNTQsIDUyNTEsIDUzMjgsIDUzMDcsIDM3NTksIDExNDExLCAKICAgICA4MzY0LCA1MTIzLCAxMTk2MjgsIDUyODEsIDU0NjksIDUxMjEsIDExOTI0NSwgMTE4OTkzLCAwLCA1MTMwLCAwLCAwLCAKICAgICA3Nzk5MCwgMCwgMTIwNzI2LCAxMjIxLCAyNzMzLCAxMTc0NiwgNzc5OTEsIDUyMTYsIDAsIDAsIDAsIDAsIDM0NjgsIDcwMzMsIAogICAgIDkyMzAsIDU5MzksIDE5NTA1MiwgMCwgMCwgMTIwNjc3LCA2ODQwMCwgNzI3OCwgMTAzMjEsIDEwMjg5LCA2NDYxMywgCi0gICAgMTAzODUsIDQxNzA2LCAwLCAwLCA5ODM0MDUsIDAsIDExNzM5LCA5ODM0MTgsIDQxOTgxLCAwLCA1OTM4LCAwLCA0Mzc2NiwgCisgICAgMTAzODUsIDQxNzA2LCAwLCAwLCA5ODM0MTMsIDAsIDExNzM5LCA5ODM0MjYsIDQxOTgxLCAwLCA1OTM4LCAwLCA0Mzc2NiwgCiAgICAgMTI0NDgsIDc1NzYsIDEwNDAxLCAxMDMzNywgNzM4NTIsIDAsIDEzMDU3LCAwLCAxMjY5NzYsIDAsIDEwMDA5LCAwLCAKLSAgICA0MTcwMywgOTgzNjI5LCAxMjE2NSwgMCwgMCwgOTg4NSwgMCwgODA3NywgMCwgMTI3OTA4LCAwLCAwLCAwLCA5MjQ1NywgMCwgCisgICAgNDE3MDMsIDk4MzYzOCwgMTIxNjUsIDAsIDAsIDk4ODUsIDAsIDgwNzcsIDAsIDEyNzkwOCwgMCwgMCwgMCwgOTI0NTcsIDAsIAogICAgIDQyMjAsIDEwNzI1LCAxMDQzMywgMCwgNjgzOTUsIDQ5ODcsIDY0NTE5LCAwLCAxMjgzNDAsIDAsIDAsIDAsIDEwOTcwLCAKICAgICAxMTczMywgMCwgMTIwNzkyLCAwLCAxOTk0NCwgMCwgOTAwOSwgODU1MSwgOTIzNDUsIDExNDY4LCA2NDYzNiwgNzU3NSwgMCwgCiAgICAgMjcyNCwgMCwgMCwgMTIzMTMsIDExMDU5MiwgNTE1LCAxMTk5NDcsIDQyNzkxLCA2Mzk4NywgNzgyODYsIDExOTk0MywgCkBAIC0xOTQwNiw3MyArMTk0MjYsNzMgQEAKICAgICAwLCA0NDc3LCAxMTg5NjQsIDgxNCwgNDIwNjYsIDY2MTgzLCA2NjIwNCwgNDM3ODYsIDExOTk2MSwgNjYxOTgsIDQxODgwLCAKICAgICA2NjE4OCwgMTE2MjMsIDc4MTQ4LCAxMTk1NSwgNjYxOTAsIDY2MTkxLCA0MTExMSwgNjYxODksIDczNzg4LCA3Nzg4LCAKICAgICA0ODQ3LCAwLCAxMjc3NTksIDAsIDAsIDAsIDE1ODEsIDY1MzUsIDc4MTYxLCAxMjk1NCwgNDMwLCA3ODE2MCwgNTUyNTksIAotICAgIDc4MTU4LCAxMjgwMzYsIDUyNzgsIDQ5NDUsIDQyODgzLCA0OTUwLCA5ODM0MzAsIDY4NjI1LCA5ODM0MjgsIDcyNjksIDAsIAotICAgIDU5NjQsIDEyOTA4LCA5ODM1NTUsIDAsIDc0NzY0LCA3NDQ3NywgMTE5MTQ2LCAxOTQ5MzYsIDQ5NDksIDk4MzQyMSwgNDQzLCAKLSAgICA5ODM0MTksIDQ5NDQsIDU0NjcsIDExOTYwMywgMCwgNjUxMzcsIDYwNDQsIDY1MzkyLCAwLCA0MjEzLCAwLCA0MTMwMywgMCwgCi0gICAgMTk0OTMxLCAxMTk5NjIsIDQxMzA2LCA3Mzk4NCwgMjY5OCwgMTI3MTU5LCAwLCAxMjA3MiwgMzE5MywgMCwgNDEzMDQsIAotICAgIDgyNCwgMTI4Njc2LCAxMjA5MSwgNzg4OTMsIDc4ODk0LCAxMTk4MTYsIDQ2NzMsIDY0ODA0LCA0Njc4LCAxMTk4MjAsIAotICAgIDExOTgxOSwgNjUwNTksIDAsIDY3MzksIDAsIDU0ODEsIDM0OTAsIDExOTksIDExOTgxMSwgODM1NiwgNjk5NDcsIDExOTgzMiwgCi0gICAgNDY3NywgMTI2ODgsIDMxMDIsIDAsIDQ2NzIsIDc4MTczLCA3ODE3NSwgNTUzMSwgNjgzNjcsIDQyNTc1LCA3ODE3MCwgCi0gICAgNzgxNjYsIDQ2NzQsIDQ1NDgsIDQ0MDA1LCAxMTk5NDksIDY4NjU4LCAxMTk5NDYsIDgwMjUsIDY4NjMwLCAxMjcwMjQsIAotICAgIDE4NTUsIDk4MzQwNCwgNjg2NjksIDk4MzQwMiwgOTI0NDUsIDEyNzU1NCwgMCwgMTI3MzM5LCAxMTk2NTIsIDI3NDUsIAotICAgIDExNzk3LCA5ODM0MTAsIDEyODE1OSwgOTIwMiwgNDY1NCwgOTgzNDA2LCA5ODM0MDgsIDY4NjM4LCA3Mzk5MywgMTA1MjUsIAotICAgIDQ2NDksIDY1MjA5LCA5ODM0MDksIDAsIDQ2NDgsIDQzMDgwLCA5ODMzOTgsIDk4MzM5OSwgOTgzMzk2LCA2MjQ2LCA2NDk1MCwgCi0gICAgNzgyOCwgNDY1MCwgNjc3NywgNjc3NiwgNjc3NSwgNDY1MywgNzgyMiwgNzgwMDUsIDkyMzg0LCA0MzE4NywgODY2OSwgCi0gICAgOTgzNDA3LCA2ODIxLCA2NTA5MywgMCwgNzg4ODEsIDI3MTYsIDAsIDk4MzA2MCwgOTgzNDExLCAwLCA2ODM2OSwgMTIwMDU0LCAKLSAgICAxMTA2MCwgODU0NywgMjcxMSwgNDIxNjUsIDc4MDI3LCA3ODAyNiwgNzk5MiwgMCwgMCwgNDY2MiwgNzgwMzMsIDc4MDMyLCAKLSAgICA5MTQ5LCA5MTQ2LCA1OTksIDIwODEsIDc4MDMxLCA3ODAzMCwgMTk0OTYyLCA0NjU2LCAxMDEzMCwgNjg0NTAsIDc4MTEsIAotICAgIDQwOTk0LCAxOTQ5NjUsIDY0MTQsIDU5NjcsIDQ2NTgsIDM3MjUsIDU3MTMsIDU4MTQsIDQ2NjEsIDQyNDM0LCA5ODM0MDMsIAotICAgIDAsIDAsIDY0OTA0LCA5MDI2LCAxMDgzMywgNzQ4NjQsIDc1NDcsIDQ4NjcsIDAsIDEwMDA4LCAxMDIyMiwgMzA1NCwgCi0gICAgMTk0OTU2LCA5NzQ0LCA3ODg2MCwgNzYwNSwgNDYyMiwgMTE5NjU2LCA5ODMzODcsIDk0MDcwLCA5ODMzODUsIDk4MzM4NiwgCi0gICAgOTgzMzgzLCA5MDQ1LCA3ODg4OCwgNDIyNSwgMTk5MjYsIDc4ODg3LCAxMjg4MCwgNjUzMDcsIDQ2MTcsIDc4ODgzLCAKLSAgICA5ODMzNzgsIDQxNzMyLCA0NjE2LCAxMDUxOCwgMTA0MjMsIDEwMzU5LCA5ODMzNzIsIDU5NTgsIDAsIDk4MzQyNSwgNDIxNSwgCi0gICAgOTc4OSwgOTE3OTQxLCA0MzIxLCA0NjIxLCA5ODMzODEsIDQxMzEzLCA1MjIsIDUzNjgsIDAsIDY1ODAzLCAwLCA1MzY2LCAKLSAgICAxMjIwMSwgNTM3MiwgMCwgOTgzNDAxLCAwLCA3NzIwLCA3MzkwLCAyNjk2LCA5ODMzOTIsIDAsIDQ2MzgsIDk4MzM5NywgCi0gICAgMTc5MCwgNzgyNDIsIDU5NjUsIDY0MzYzLCA2NjU2OSwgNjg2NDYsIDEyNzgzMywgNTM3NiwgMTgzNSwgNTMzNSwgMTk0OTY2LCAKLSAgICAxMjgwODksIDQ2MzMsIDAsIDY4MTE5LCAxMTgwLCA0NjMyLCAxMjgwOTMsIDUzODcsIDUzMzMsIDAsIDAsIDQyMDk0LCAKLSAgICA1MzMxLCA0NjM0LCAxMTkyOCwgOTgzNTk0LCA1MzM4LCA0NjM3LCAxMjgxNzAsIDU5NzEsIDQyNDE0LCAwLCAxMjY4LCAKLSAgICA2NTA5NywgNDIzNjEsIDAsIDAsIDczODUzLCAxNDI3LCAwLCAwLCA1OTcwLCAzNDMxLCAwLCAxMDM1OCwgMTA0MjIsIDQ3NTgsIAotICAgIDk4MzM2NiwgMTYwOCwgMjczOCwgMCwgMTA0NTUsIDQ3NTMsIDc0MDI2LCAxMTM0NCwgNDIyMiwgNjI0MCwgNTIzMSwgCi0gICAgNzQzODQsIDk4MzM3MCwgNjgzNzcsIDYyNDgsIDk4MzM1NCwgOTgzMzU1LCA5ODMzNTIsIDQyMzE4LCA5MjU4MiwgNTIyOSwgCisgICAgNzgxNTgsIDEyODAzNiwgNTI3OCwgNDk0NSwgNDI4ODMsIDQ5NTAsIDk4MzQzOCwgNjg2MjUsIDk4MzQzNiwgNzI2OSwgMCwgCisgICAgNTk2NCwgMTI5MDgsIDk4MzU1NSwgMCwgNzQ3NjQsIDc0NDc3LCAxMTkxNDYsIDE5NDkzNiwgNDk0OSwgOTgzNDI5LCA0NDMsIAorICAgIDk4MzQyNywgNDk0NCwgNTQ2NywgMTE5NjAzLCA5ODMyNTQsIDY1MTM3LCA2MDQ0LCA2NTM5MiwgMCwgNDIxMywgMCwgCisgICAgNDEzMDMsIDAsIDE5NDkzMSwgMTE5OTYyLCA0MTMwNiwgNzM5ODQsIDI2OTgsIDEyNzE1OSwgMCwgMTIwNzIsIDMxOTMsIDAsIAorICAgIDQxMzA0LCA4MjQsIDEyODY3NiwgMTIwOTEsIDc4ODkzLCA3ODg5NCwgMTE5ODE2LCA0NjczLCA2NDgwNCwgNDY3OCwgCisgICAgMTE5ODIwLCAxMTk4MTksIDY1MDU5LCAwLCA2NzM5LCAwLCA1NDgxLCAzNDkwLCAxMTk5LCAxMTk4MTEsIDgzNTYsIDY5OTQ3LCAKKyAgICAxMTk4MzIsIDQ2NzcsIDEyNjg4LCAzMTAyLCAwLCA0NjcyLCA3ODE3MywgNzgxNzUsIDU1MzEsIDY4MzY3LCA0MjU3NSwgCisgICAgNzgxNzAsIDc4MTY2LCA0Njc0LCA0NTQ4LCA0NDAwNSwgMTE5OTQ5LCA2ODY1OCwgMTE5OTQ2LCA4MDI1LCA2ODYzMCwgCisgICAgMTI3MDI0LCAxODU1LCA5ODM0MTIsIDY4NjY5LCA5ODM0MTAsIDkyNDQ1LCAxMjc1NTQsIDAsIDEyNzMzOSwgMTE5NjUyLCAKKyAgICAyNzQ1LCAxMTc5NywgOTgzNDE4LCAxMjgxNTksIDkyMDIsIDQ2NTQsIDk4MzQxNCwgOTgzNDE2LCA2ODYzOCwgNzM5OTMsIAorICAgIDEwNTI1LCA0NjQ5LCA2NTIwOSwgOTgzNDE3LCAwLCA0NjQ4LCA0MzA4MCwgOTgzNDA2LCA5ODM0MDcsIDk4MzQwNCwgNjI0NiwgCisgICAgNjQ5NTAsIDc4MjgsIDQ2NTAsIDY3NzcsIDY3NzYsIDY3NzUsIDQ2NTMsIDc4MjIsIDc4MDA1LCA5MjM4NCwgNDMxODcsIAorICAgIDg2NjksIDk4MzQxNSwgNjgyMSwgNjUwOTMsIDAsIDc4ODgxLCAyNzE2LCAwLCA5ODMwNjAsIDk4MzQxOSwgMCwgNjgzNjksIAorICAgIDEyMDA1NCwgMTEwNjAsIDg1NDcsIDI3MTEsIDQyMTY1LCA3ODAyNywgNzgwMjYsIDc5OTIsIDAsIDAsIDQ2NjIsIDc4MDMzLCAKKyAgICA3ODAzMiwgOTE0OSwgOTE0NiwgNTk5LCAyMDgxLCA3ODAzMSwgNzgwMzAsIDE5NDk2MiwgNDY1NiwgMTAxMzAsIDY4NDUwLCAKKyAgICA3ODExLCA0MDk5NCwgMTk0OTY1LCA2NDE0LCA1OTY3LCA0NjU4LCAzNzI1LCA1NzEzLCA1ODE0LCA0NjYxLCA0MjQzNCwgCisgICAgOTgzNDExLCAwLCAwLCA2NDkwNCwgOTAyNiwgMTA4MzMsIDc0ODY0LCA3NTQ3LCA0ODY3LCAwLCAxMDAwOCwgMTAyMjIsIAorICAgIDMwNTQsIDE5NDk1NiwgOTc0NCwgNzg4NjAsIDc2MDUsIDQ2MjIsIDExOTY1NiwgOTgzMzk1LCA5NDA3MCwgOTgzMzkzLCAKKyAgICA5ODMzOTQsIDk4MzM5MSwgOTA0NSwgNzg4ODgsIDQyMjUsIDE5OTI2LCA3ODg4NywgMTI4ODAsIDY1MzA3LCA0NjE3LCAKKyAgICA3ODg4MywgOTgzMzg2LCA0MTczMiwgNDYxNiwgMTA1MTgsIDEwNDIzLCAxMDM1OSwgOTgzMzgwLCA1OTU4LCAwLCA5ODM0MzMsIAorICAgIDQyMTUsIDk3ODksIDkxNzk0MSwgNDMyMSwgNDYyMSwgOTgzMzg5LCA0MTMxMywgNTIyLCA1MzY4LCAwLCA2NTgwMywgMCwgCisgICAgNTM2NiwgMTIyMDEsIDUzNzIsIDAsIDk4MzQwOSwgMCwgNzcyMCwgNzM5MCwgMjY5NiwgOTgzNDAwLCAwLCA0NjM4LCAKKyAgICA5ODM0MDUsIDE3OTAsIDc4MjQyLCA1OTY1LCA2NDM2MywgNjY1NjksIDY4NjQ2LCAxMjc4MzMsIDUzNzYsIDE4MzUsIDUzMzUsIAorICAgIDE5NDk2NiwgMTI4MDg5LCA0NjMzLCAwLCA2ODExOSwgMTE4MCwgNDYzMiwgMTI4MDkzLCA1Mzg3LCA1MzMzLCAwLCAwLCAKKyAgICA0MjA5NCwgNTMzMSwgNDYzNCwgMTE5MjgsIDk4MzU5NCwgNTMzOCwgNDYzNywgMTI4MTcwLCA1OTcxLCA0MjQxNCwgMCwgCisgICAgMTI2OCwgNjUwOTcsIDQyMzYxLCAwLCAwLCA3Mzg1MywgMTQyNywgMCwgMCwgNTk3MCwgMzQzMSwgMCwgMTAzNTgsIDEwNDIyLCAKKyAgICA0NzU4LCA5ODMzNzQsIDE2MDgsIDI3MzgsIDAsIDEwNDU1LCA0NzUzLCA3NDAyNiwgMTEzNDQsIDQyMjIsIDYyNDAsIDUyMzEsIAorICAgIDc0Mzg0LCA5ODMzNzgsIDY4Mzc3LCA2MjQ4LCA5ODMzNjIsIDk4MzM2MywgOTgzMzYwLCA0MjMxOCwgOTI1ODIsIDUyMjksIAogICAgIDQ3NTcsIDAsIDAsIDI3MjgsIDQ3NTIsIDY0NTYzLCA2NTIzNSwgNTIzNCwgMCwgMTI4MTQ1LCAwLCAxMDcxMywgNzE2NiwgMCwgCiAgICAgMjYyMiwgNzQ2MCwgMTI3MzAyLCAwLCAwLCA4OTU0LCA3NDc2MCwgNjUxODksIDI2MzIsIDQyNjE3LCAxMDEwOCwgMTAxMSwgCiAgICAgNTU3NCwgMTg1MywgMjcwOSwgNjUxMzksIDU1NzcsIDAsIDAsIDExODg3MSwgNjg2NDEsIDg5NjUsIDc2MzUsIDQyMTc3LCAKLSAgICA1MzE2LCAwLCA1MzE0LCA2NDUxLCA1NTcyLCA2NjQ2NCwgNTMxMiwgMCwgNTUyNSwgNTMzMCwgNTMxOSwgOTgzNDEyLCAKLSAgICA5ODM4NjMsIDE5NDkwNywgNDQwMDMsIDAsIDk4MzQ3MiwgOTgzNDE1LCAxMjA0OTgsIDEyNzg1MSwgMTk1MDA5LCA5ODM4NTYsIAotICAgIDc0MDIyLCA5ODM0MTQsIDY0NjA5LCA2ODY0MywgMTIwNjM0LCA5ODM0ODEsIDU3MjEsIDk4MzM5MywgNTUxOSwgODYzMiwgCi0gICAgNjY0NjUsIDExMjY3LCA3Mzk2MSwgOTIyNzgsIDU3MjAsIDk4MzM0NCwgMTY5MiwgNDIxOSwgNDYxMCwgODY5NiwgNDMwNSwgCi0gICAgMCwgNDYwOSwgNDM0NzgsIDQ2MTQsIDU0MSwgOTgzMzQ3LCA1Mjg3LCA1MzA5LCA1Mjg1LCA2ODM4OSwgNTk2MSwgNDY0NywgCi0gICAgNTYsIDQyMTYsIDEwNTc3LCA0MTM4MSwgNjAxLCA0NjEzLCA5ODMzNDEsIDk4MzMzOCwgNzc4NDksIDQ2MDgsIDY0MjYwLCAKKyAgICA1MzE2LCAwLCA1MzE0LCA2NDUxLCA1NTcyLCA2NjQ2NCwgNTMxMiwgMCwgNTUyNSwgNTMzMCwgNTMxOSwgOTgzNDIwLCAKKyAgICA5ODM4NzIsIDE5NDkwNywgNDQwMDMsIDAsIDk4MzQ4MCwgOTgzNDIzLCAxMjA0OTgsIDEyNzg1MSwgMTk1MDA5LCA5ODM4NjUsIAorICAgIDc0MDIyLCA5ODM0MjIsIDY0NjA5LCA2ODY0MywgMTIwNjM0LCA5ODM0ODksIDU3MjEsIDk4MzQwMSwgNTUxOSwgODYzMiwgCisgICAgNjY0NjUsIDExMjY3LCA3Mzk2MSwgOTIyNzgsIDU3MjAsIDk4MzM1MiwgMTY5MiwgNDIxOSwgNDYxMCwgODY5NiwgNDMwNSwgCisgICAgMCwgNDYwOSwgNDM0NzgsIDQ2MTQsIDU0MSwgOTgzMzU1LCA1Mjg3LCA1MzA5LCA1Mjg1LCA2ODM4OSwgNTk2MSwgNDY0NywgCisgICAgNTYsIDQyMTYsIDEwNTc3LCA0MTM4MSwgNjAxLCA0NjEzLCA5ODMzNDksIDk4MzM0NiwgNzc4NDksIDQ2MDgsIDY0MjYwLCAKICAgICA0MTEyNCwgNTE5MCwgNjc2MjgsIDAsIDY4MTQ1LCA3MDg2LCAwLCA2Nzk5OCwgNjc2MjAsIDAsIDI3MzQsIDExMDc0LCAwLCAKICAgICA2NzYyNywgNDM1OTMsIDAsIDY3NjI1LCA1OTYwLCAwLCA4OTkyLCA0MjU5MywgMTI4MjYwLCAxNzgyLCA2NzYyMiwgNjgxMTQsIAogICAgIDExOTkzOSwgMCwgNjgxODAsIDU1MDEsIDExOTk1MiwgNDI1MDgsIDc0NDIsIDQzNjY1LCAzNTksIDQxMjUzLCA2ODM5MiwgCiAgICAgNjIzOSwgMTE5OTU2LCA0MTI1NiwgMCwgNjgxMzQsIDAsIDc0MjA5LCA5MTc1NTAsIDkzNDYsIDY5NjYwLCA0MTI1NCwgCiAgICAgMTI4MDQ3LCA0MzI5MSwgMzc2NywgNTczNywgMCwgNDg2NSwgMCwgNTc0MCwgOTE3OTk3LCA1NzM2LCA0MzY4LCA2NDcyNCwgCi0gICAgNzE5MywgNjgxMzcsIDAsIDU3MzksIDQxMDI0LCA0ODY2LCAwLCA3MzkwNCwgOTgzODMxLCA0ODY5LCAxMjA1NjMsIDAsIAotICAgIDQyMjMsIDEyODIwMSwgNjY1MCwgMTI2NTA5LCAwLCA5ODM0NTUsIDEyNzg5MCwgNDg3MCwgMTIwNDQ1LCA2ODY2MSwgNjcxNiwgCisgICAgNzE5MywgNjgxMzcsIDAsIDU3MzksIDQxMDI0LCA0ODY2LCAwLCA3MzkwNCwgOTgzODQwLCA0ODY5LCAxMjA1NjMsIDAsIAorICAgIDQyMjMsIDEyODIwMSwgNjY1MCwgMTI2NTA5LCAwLCA5ODM0NjMsIDEyNzg5MCwgNDg3MCwgMTIwNDQ1LCA2ODY2MSwgNjcxNiwgCiAgICAgNzgxNzYsIDY4NjY3LCA2ODM4MiwgNjg2NzYsIDEyNzkyNSwgMTAxMjIsIDQ4NjQsIDY2NTY4LCA0MTQ0LCA3OTM3LCAwLCAKICAgICA2MjQ1LCA2ODY1MiwgMjczMiwgNDI3MzQsIDc0NSwgMCwgMTk1MDk3LCA5MjE5NSwgNDc3NywgNzgyMSwgMCwgNjg2MzEsIAotICAgIDQyNzc1LCAwLCAxOTQ5NTQsIDAsIDMwOTcsIDAsIDU5NjYsIDk4MzQ3OCwgNDc3OCwgMCwgMTA4NjMsIDAsIDQ3ODEsIDAsIAorICAgIDQyNzc1LCAwLCAxOTQ5NTQsIDAsIDMwOTcsIDAsIDU5NjYsIDk4MzQ4NiwgNDc3OCwgMCwgMTA4NjMsIDAsIDQ3ODEsIDAsIAogICAgIDY0NDA3LCAwLCAxMjgzMjMsIDg1NzcsIDEyODU2MiwgNjgxOTYsIDQzMjg1LCAxMDIxNiwgNDc4MiwgMCwgMCwgMTIwNzU3LCAKICAgICA2ODYxOCwgMTIzMjUsIDQzMDU2LCA4NzE3LCAwLCAwLCA0Nzc2LCA3MzgxOCwgMTE0OTIsIDg3MDAsIDAsIDEzMTc2LCAKICAgICA2ODM2MywgMTA0MjYsIDAsIDkxNzU5OSwgMTAzNjIsIDE5NDcwNiwgMTcxNSwgNDg0OSwgODI0MiwgOTU2MSwgNzM5MjIsIAogICAgIDQzMjc4LCA0MjYzNSwgMCwgMCwgNTk2MywgOTE3OTI2LCAwLCAwLCA0ODUwLCAwLCAxNjA3LCA0NjYsIDQ4NTMsIDExODk5NSwgCi0gICAgNDg1NCwgMTI3OTE4LCA1MTY0LCA5ODM4NjEsIDEzNTAsIDUxMjQsIDY0NDIwLCAxOTkzLCA1MzYyLCA4NDcxLCAyNzA4LCAKKyAgICA0ODU0LCAxMjc5MTgsIDUxNjQsIDk4Mzg3MCwgMTM1MCwgNTEyNCwgNjQ0MjAsIDE5OTMsIDUzNjIsIDg0NzEsIDI3MDgsIAogICAgIDkyNDcxLCAxMjQ0NSwgMzc4NSwgMjM0LCAzMTk5LCAwLCA0MTI2OCwgNDg0OCwgMjUzMCwgOTE3OTA5LCAyMDY4LCAxOTY0LCAKICAgICAwLCA3Mzc2MiwgMTA0NTgsIDAsIDg1NzYsIDc4NTQzLCAwLCAyNzA0LCA0Nzk0LCAwLCA2ODIxMSwgODMyMiwgNDc5NywgCi0gICAgNTc1MywgMCwgMjY5NCwgNDc5MiwgMCwgMjQzOSwgNjUxMDQsIDY5ODA0LCA5ODM0MTYsIDMwMywgOTgzMTAxLCA5MjYyMiwgCi0gICAgOTgzNDE3LCAyNDM3LCAwLCA0MjIxLCA0ODQ0LCA5MjIxNiwgMCwgMCwgMCwgNzAwNDIsIDAsIDQzMjkyLCAwLCAyNDQxLCAKKyAgICA1NzUzLCAwLCAyNjk0LCA0NzkyLCAwLCAyNDM5LCA2NTEwNCwgNjk4MDQsIDk4MzQyNCwgMzAzLCA5ODMxMDEsIDkyNjIyLCAKKyAgICA5ODM0MjUsIDI0MzcsIDAsIDQyMjEsIDQ4NDQsIDkyMjE2LCAwLCAwLCAwLCA3MDA0MiwgMCwgNDMyOTIsIDAsIDI0NDEsIAogICAgIDEwNzM5LCA2NTA5MCwgMCwgMTE5MzI3LCAxMjY1NDEsIDI0NTEsIDI3MTQsIDExOTMyNiwgMCwgNDMzNzksIDQ5MzcsIAogICAgIDQzMzc2LCA3NTMsIDU4NDksIDEwNTk3LCA0MzA4OSwgMTE3MjIsIDkyNDgsIDkyNTU1LCA0Mjg3OSwgMTE3MjUsIDAsIDAsIAogICAgIDI3MjYsIDMxMDcsIDczOTU4LCA0OTQxLCA2NDkzNywgMTE5MjMzLCA5MTQwLCAxNDA4LCA1MjYxLCA0NjA3LCAwLCAxODEsIAotICAgIDk4MzQyMiwgNDk0MiwgOTUzOSwgNDkzOCwgMCwgNjUyMDEsIDUyNTksIDkzNjksIDY0MTg1LCA0MTQyLCA1MjU3LCAKKyAgICA5ODM0MzAsIDQ5NDIsIDk1MzksIDQ5MzgsIDAsIDY1MjAxLCA1MjU5LCA5MzY5LCA2NDE4NSwgNDE0MiwgNTI1NywgCiAgICAgOTgzNjAxLCAwLCA0OTY0LCA1MjY0LCA2NDE3OCwgNjQxNzcsIDEyOTc5LCA0MTQxMSwgNjQxODIsIDY0MTgxLCA2NDE4MCwgCiAgICAgNjQxNzksIDk0ODIsIDQ4NzMsIDQxMjMxLCAxODIyLCA0MjUyNiwgMTI4NTgxLCAxMjc1OCwgMzg2NSwgMCwgMCwgMTA1MDAsIAogICAgIDAsIDExOTAyNCwgNzgwMjgsIDkyNDA4LCA5ODMwLCA0MzY0MiwgMzg5LCAxMDg5MywgNzUyMSwgMTI3ODc5LCA0ODcyLCAKICAgICA1NDYzLCAwLCAzMTI1LCA5NTY3LCAwLCA0ODc4LCA1NDU5LCA0NjA0LCA5MTc5MzEsIDk1NTcsIDU0NjUsIDY4NjE3LCAwLCAKLSAgICAxMTQ5NCwgMTI2NDkyLCA5NTYzLCAxMDg2NSwgNzQ1NzAsIDQzMjc5LCA2NDE4NiwgOTgzNDMxLCA3ODcxNCwgNjQxOTEsIAorICAgIDExNDk0LCAxMjY0OTIsIDk1NjMsIDEwODY1LCA3NDU3MCwgNDMyNzksIDY0MTg2LCA5ODM0MzksIDc4NzE0LCA2NDE5MSwgCiAgICAgNjQxOTAsIDg4OTgsIDY0MTg4LCAwLCA0MTAzMCwgNzg4MzYsIDAsIDkxNzgzNSwgNzg4MjAsIDkxNzgzNCwgMCwgNzg4MDUsIAotICAgIDQxMDMxLCA3ODgwMSwgMTE5NjAsIDY3NDUsIDMwODIsIDk4MzQyOSwgNzg1MzksIDczOTE5LCAxMDU3MywgNDE3NDQsIAorICAgIDQxMDMxLCA3ODgwMSwgMTE5NjAsIDY3NDUsIDMwODIsIDk4MzQzNywgNzg1MzksIDczOTE5LCAxMDU3MywgNDE3NDQsIAogICAgIDcwNzksIDU4NTYsIDEyNzA0MywgNTE2MywgNzg4MDksIDEyODE2MiwgMTgxNywgNjY3MjQsIDc4NTM4LCAwLCAxMDU2NCwgCiAgICAgNzc2MywgMTMwNzcsIDQxODEzLCA0NDAwLCA0MTc0NSwgNjQyMDcsIDEwMjc1LCA4OTI1LCAxMDM3MSwgMTAzMDcsIDQxODE0LCAKICAgICA0MjQ4LCAwLCAwLCA0NTQxLCA2Mjk5LCA2NDIwNCwgNjQyMDMsIDY0MjAxLCA2NDIwMCwgNjQxOTksIDY0MTk4LCAxMjY0NzEsIApAQCAtMTk0ODUsMzMgKzE5NTA1LDMzIEBACiAgICAgNjUyMjIsIDY5OTgsIDc4MTgwLCAwLCAzMTI4LCA0Nzg5LCA1MDY3LCA1MDY2LCAxMTg4NDksIDQ3ODQsIDAsIDg4MjcsIAogICAgIDExNDYsIDUwNjUsIDY5ODkwLCA3ODE5MiwgNjgxMzYsIDc4MTkwLCA0MzQxMiwgNTA2NCwgMjQzMSwgMCwgOTQ1MCwgMTgwOSwgCiAgICAgMCwgNzgyMDAsIDc4MjAxLCA1MDYyLCAxMjY0LCA2NDgxNywgMTMyNTQsIDExNjk3LCAxMjY1OTgsIDk3ODUsIDY0NzE2LCAwLCAKLSAgICAzOTMzLCA3NDU1OSwgNDc0MCwgNzk1NCwgMCwgMCwgNDI2MDksIDAsIDc0MTc1LCAwLCAxMjcwMTYsIDAsIDk4Mzg2NCwgCisgICAgMzkzMywgNzQ1NTksIDQ3NDAsIDc5NTQsIDAsIDAsIDQyNjA5LCAwLCA3NDE3NSwgMCwgMTI3MDE2LCAwLCA5ODM4NzMsIAogICAgIDQyMTMwLCAwLCA1MTUxLCA5MTc4MjksIDkxNzgyMywgMCwgOTM5ODAsIDAsIDc2MjAsIDM4MDAsIDY1MTIyLCAwLCAwLCAKICAgICA4MzU1LCA3ODU0LCAwLCA5NTQsIDY0OTI3LCA0MTg1LCA0MTA0NSwgMTI3MTQxLCA0MTQzOCwgNDE0MzksIDY4NjY2LCAKLSAgICAxMDcxMSwgNDU5MywgMTI3NzQ1LCAxMjA1ODQsIDk4MzQwMCwgNjQ3NzQsIDgwNTMsIDEwNTMyLCA2NjcyNywgMCwgMCwgMCwgCisgICAgMTA3MTEsIDQ1OTMsIDEyNzc0NSwgMTIwNTg0LCA5ODM0MDgsIDY0Nzc0LCA4MDUzLCAxMDUzMiwgNjY3MjcsIDAsIDAsIDAsIAogICAgIDY0NzU5LCA2MzgxLCA1MTY2LCA5ODg4LCAxMjc4MDAsIDUxNDgsIDQyODM0LCAwLCA3ODIwNSwgNzgyMDYsIDQzNzg3LCAKICAgICA3ODIwNCwgNjQxMzEsIDMxMTksIDkxNzgxNCwgMCwgMzA2MCwgNjQxMzUsIDk5ODYsIDAsIDc3ODc2LCA2MzYsIDExNjk4LCAKLSAgICAwLCA5ODM0NDMsIDk5MTYsIDExNzAxLCA3ODM2LCA0Mjc0MSwgNjQxMzcsIDgzMjAsIDc4NjQwLCA4ODYzLCA5MjQzMSwgCi0gICAgMTE5OTYwLCAxNDc3LCA0MzI4OSwgMCwgNzQzNTgsIDg2MTgsIDk4MzM5NCwgOTkwOCwgOTgzOTcyLCAwLCAwLCAzOTM3LCAKLSAgICAxMjMxMiwgMCwgOTgzMzk1LCAwLCA2NDc4MSwgOTEyLCA2MzQ5LCA0NTM2LCA5Mzk1NCwgNzQ1MzIsIDEyNjU5NCwgNjI0NCwgCi0gICAgOTIyMDksIDcxMzQxLCAzOTM1LCAxMjA2NjUsIDk4MzQ2OCwgMCwgMTE5NTAsIDUzOTIsIDQyMjQ4LCA2NTEyOSwgNjg2NTYsIAorICAgIDAsIDk4MzQ1MSwgOTkxNiwgMTE3MDEsIDc4MzYsIDQyNzQxLCA2NDEzNywgODMyMCwgNzg2NDAsIDg4NjMsIDkyNDMxLCAKKyAgICAxMTk5NjAsIDE0NzcsIDQzMjg5LCAwLCA3NDM1OCwgODYxOCwgOTgzNDAyLCA5OTA4LCA5ODM5ODEsIDAsIDAsIDM5MzcsIAorICAgIDEyMzEyLCAwLCA5ODM0MDMsIDAsIDY0NzgxLCA5MTIsIDYzNDksIDQ1MzYsIDkzOTU0LCA3NDUzMiwgMTI2NTk0LCA2MjQ0LCAKKyAgICA5MjIwOSwgNzEzNDEsIDM5MzUsIDEyMDY2NSwgOTgzNDc2LCAwLCAxMTk1MCwgNTM5MiwgNDIyNDgsIDY1MTI5LCA2ODY1NiwgCiAgICAgNTM5NywgMCwgMTIwNDYsIDEyNTk5LCAwLCAxMjgyNjEsIDUzOTUsIDAsIDUzOTMsIDM1NCwgNjg2MTUsIDExOTk0OCwgCiAgICAgNzg1MDMsIDAsIDAsIDQyMDM5LCAwLCAwLCA2NDE0MiwgNjI2LCAwLCA1ODk1LCAwLCAwLCA1NzgwLCAwLCAwLCAxMjg4NzQsIAogICAgIDAsIDAsIDQzMjk3LCA5ODMwNzksIDQzMTEsIDQ2NDQsIDg4MTgsIDAsIDEyODE4NiwgMCwgNzE0NSwgMzkxOCwgNjY0NTIsIAogICAgIDM3OTcsIDE2NDQsIDkyMzQ2LCA5NjU4LCA0MTQwLCAxMTM4NSwgNjU5NDcsIDY0NTUsIDkwMzAsIDgxMywgMTE5OTQ1LCAKICAgICA2ODEzMSwgNDE0NiwgMTE5OTU3LCA1MzYwLCAyNDY2LCAwLCA2NzY2OSwgMTE5OTQyLCA2MjQ5LCA0MjExNywgOTIyODcsIAotICAgIDEyODIyNCwgMCwgMCwgNzQwNDYsIDQzNzQ1LCA0OTExLCA5ODgsIDkxNzgwNywgMCwgOTgzNDYwLCA0MzA2MSwgNzA1NCwgCisgICAgMTI4MjI0LCAwLCAwLCA3NDA0NiwgNDM3NDUsIDQ5MTEsIDk4OCwgOTE3ODA3LCAwLCA5ODM0NjgsIDQzMDYxLCA3MDU0LCAKICAgICA2NDE0NywgMCwgNjQ5MjAsIDY4MTk1LCA2Njk4LCAxMTg5MzMsIDkyNTA2LCAwLCAxMjAwMDYsIDExOTgxLCAxMjIwMiwgMCwgCiAgICAgMTEwMzIsIDY3NjU0LCA2MDkzLCAxMTYwOCwgOTc1LCA2ODY2MiwgNjU4NDMsIDE3MCwgMCwgMCwgNDE2OSwgMCwgNDE4NTksIAogICAgIDYwNTgsIDEyMDQwMSwgMTMyMDMsIDEyMDY1NywgMCwgMCwgNjg2NTcsIDk4MTgsIDEwMTc4LCAxMDMyNCwgNDIxMDYsIAogICAgIDU4OTgsIDc0NTQwLCA0NzM4LCA0MTg1NiwgNzA2MiwgOTE3ODY1LCA0NzM3LCAxMTc3OSwgNDc0MiwgMTIwNTY0LCA5MjM5MSwgCi0gICAgNzM3MzYsIDk4MzM1NiwgOTgyNSwgNjQ0OCwgNjcxNSwgMTI3MDA4LCA0ODMxLCAwLCA5MjUyNSwgMCwgNTMwMCwgNDc0MSwgCi0gICAgNDIxMDgsIDk4MzM0NiwgNjQxNTksIDQ3MzYsIDY0MTQ4LCAwLCA4NDksIDkyMTkxLCA3ODQ5MSwgNDMyODgsIDAsIDY2NjIwLCAKLSAgICA5MTc5MTYsIDEyNzMzMSwgNjU1NDksIDk0OTYsIDY0NTk4LCAxMTg4NjYsIDk4MzM1OCwgNzg3NiwgNjgxMzIsIDkxNzg3MiwgCisgICAgNzM3MzYsIDk4MzM2NCwgOTgyNSwgNjQ0OCwgNjcxNSwgMTI3MDA4LCA0ODMxLCAwLCA5MjUyNSwgMCwgNTMwMCwgNDc0MSwgCisgICAgNDIxMDgsIDk4MzM1NCwgNjQxNTksIDQ3MzYsIDY0MTQ4LCAwLCA4NDksIDkyMTkxLCA3ODQ5MSwgNDMyODgsIDAsIDY2NjIwLCAKKyAgICA5MTc5MTYsIDEyNzMzMSwgNjU1NDksIDk0OTYsIDY0NTk4LCAxMTg4NjYsIDk4MzM2NiwgNzg3NiwgNjgxMzIsIDkxNzg3MiwgCiAgICAgMzkyOCwgOTE3ODcwLCA0MzM3OCwgMTA3MDYsIDcxOTgsIDAsIDQ4NDIsIDEyMDUzLCAxMjgxMjksIDAsIDQ4NDEsIDAsIAogICAgIDQxNzEsIDEyMDA4LCA2MjUxLCAzOTIzLCAxNDkwLCAwLCAxMTk1OTEsIDEyNjUxMiwgNDA5NzIsIDUyNDUsIDAsIDEwMTE0LCAKICAgICA0MjAwMSwgNDE4ODgsIDQ4NDUsIDgzMzIsIDQwOTc0LCA2NDM0NywgNDg0MCwgOTA3NywgNzgzNDYsIDE3NDcsIDkxNzg0OSwgCi0gICAgNDgyNSwgNjkyNDAsIDkxNzg1MiwgNjg2NTUsIDAsIDk4MzM4MCwgMCwgMCwgNjg2MjgsIDk4MzMzOSwgOTg1MCwgMTE4OTM3LCAKKyAgICA0ODI1LCA2OTI0MCwgOTE3ODUyLCA2ODY1NSwgMCwgOTgzMzg4LCAwLCAwLCA2ODYyOCwgOTgzMzQ3LCA5ODUwLCAxMTg5MzcsIAogICAgIDM2NywgMTQ3MiwgOTE3ODU5LCA2Njg3LCAxMjc0LCAwLCA1OTA1LCAxMjMzOSwgODkxOSwgNzM5NTMsIDEwOTA3LCA2NTI2MSwgCiAgICAgMTEwMjMsIDExOTU1OSwgNDgzMCwgOTEzNCwgNzg2NjYsIDY0MTI2LCA0MzAxMSwgMCwgMTI2NjI2LCA2NDEwMSwgMCwgMCwgCiAgICAgNDgyNCwgMTA2MTQsIDExOTY1OSwgMCwgMTg4OCwgMTk2MCwgNzg2MSwgOTE3ODU2LCA3ODUyNCwgNDE4MzYsIDQzMDEyLCAKQEAgLTE5NTIwLDEyICsxOTU0MCwxMiBAQAogICAgIDY0MTE4LCAxMjY5OTgsIDEyOTYyLCAwLCAxMjY1ODAsIDQwMTcsIDEyODI3LCA1MjQxLCAxMjAzOTIsIDAsIDQxMTE4LCAKICAgICAzOTI0LCAwLCAxMTM2NiwgOTE3ODQzLCAwLCAwLCA5MTc4NDYsIDQxMTE2LCA5MTc4NDQsIDkxNzU2NCwgMCwgMTEzNjMsIAogICAgIDEyMDU3LCAxMTkxNywgMTU2NywgNzQwMDAsIDQ3MjEsIDEyNjY0MSwgNjYyMDIsIDg5NTcsIDQxMzksIDAsIDAsIDAsIDAsIAotICAgIDAsIDEyNzQwLCAxMjg3MDIsIDQ3MjIsIDY4MTYsIDEyNzc5MywgMTI3NTksIDQ3MjUsIDk4MzM3NSwgNDcyNiwgMCwgCi0gICAgMTk0ODkyLCAwLCAxMjgzMjEsIDkxNzkwNSwgMCwgMTI3NTUsIDEyNzYyLCA0MDE1LCAwLCA4MDUyLCA0NzYsIDAsIDAsIAotICAgIDEyODI5NCwgNjQyMTIsIDQxMDIwLCAxMzgyLCA2NDIwOSwgNjQyMTYsIDQ0MDAyLCA2NDIxNCwgMTY1NiwgNDE4MzEsIDAsIAotICAgIDAsIDQxODQzLCA4NzIwLCAzOTA4LCAxNDUyLCAxMzExMSwgMCwgNjQwNjcsIDEyNzMyOCwgODU1MiwgNjQxMTMsIDQxODQ1LCAKLSAgICAzODQ5LCA3ODczMiwgNjYyMzIsIDk3NzgsIDEyMDA2NiwgNTg5MSwgNzA2NCwgNTUsIDk5NDgsIDExOTA4NSwgMCwgMCwgCi0gICAgNzkzNSwgMjQyMCwgMCwgMTExNCwgOTI1OTksIDY3NTg1LCA3MDEwNCwgMTIwMDUzLCA5MjM1MCwgMTIwMDUxLCAzOTM4LCAKKyAgICAwLCAxMjc0MCwgMTI4NzAyLCA0NzIyLCA2ODE2LCAxMjc3OTMsIDEyNzU5LCA0NzI1LCA5ODMzODMsIDQ3MjYsIDAsIAorICAgIDE5NDg5MiwgOTgzNjIyLCAxMjgzMjEsIDkxNzkwNSwgMCwgMTI3NTUsIDEyNzYyLCA0MDE1LCAwLCA4MDUyLCA0NzYsIDAsIAorICAgIDAsIDEyODI5NCwgNjQyMTIsIDQxMDIwLCAxMzgyLCA2NDIwOSwgNjQyMTYsIDQ0MDAyLCA2NDIxNCwgMTY1NiwgNDE4MzEsIAorICAgIDAsIDAsIDQxODQzLCA4NzIwLCAzOTA4LCAxNDUyLCAxMzExMSwgMCwgNjQwNjcsIDEyNzMyOCwgODU1MiwgNjQxMTMsIAorICAgIDQxODQ1LCAzODQ5LCA3ODczMiwgNjYyMzIsIDk3NzgsIDEyMDA2NiwgNTg5MSwgNzA2NCwgNTUsIDk5NDgsIDExOTA4NSwgMCwgCisgICAgMCwgNzkzNSwgMjQyMCwgMCwgMTExNCwgOTI1OTksIDY3NTg1LCA3MDEwNCwgMTIwMDUzLCA5MjM1MCwgMTIwMDUxLCAzOTM4LCAKICAgICAxMjAwNTcsIDY1NDE3LCA2NDcxNywgMTIwMDYwLCAxMjAwNjEsIDY1NDE1LCAxMjAwNTksIDYyOTIsIDY1MzAzLCA3OTU1LCAKICAgICA2NDUyLCA0NzEzLCAxMjgxOTYsIDY2MjQ5LCA5MTc4ODUsIDkxNzg5MCwgOTE3ODkxLCA2NTE1MiwgNzE5LCAxMjAwNDQsIAogICAgIDc4NjIzLCAxMjAwNDIsIDY3MTMsIDQ1MzIsIDY1NDEyLCA2OTgyMiwgMTA4NjgsIDQ3MTcsIDIzNDksIDU5MDIsIDY2NDUwLCAKQEAgLTE5NTM3LDI2ICsxOTU1NywyNiBAQAogICAgIDQ4MTQsIDAsIDQ4MTAsIDAsIDAsIDY0OTI4LCAxMDU0MywgMCwgMzUyMiwgNzEzMzUsIDQxNCwgNjU0MDQsIDAsIDE5NTAyNywgCiAgICAgNjQ1NiwgNzM4MjAsIDAsIDY2OTEsIDQyMTkzLCA5MjIyNSwgMTI4MTcxLCAwLCA3NDQ5NSwgMCwgMCwgMCwgMTE4ODIwLCAKICAgICA5NzUxLCA2NTQwNywgMTI4MDg1LCAxMTc3MCwgMzkxOSwgMCwgMCwgNjUwNjEsIDAsIDAsIDAsIDEyMjM1LCAwLCAwLCAKLSAgICAxMjcyMzMsIDY0MDkyLCA5ODM0NjIsIDY0MDgwLCAwLCA2NDA5MCwgMCwgNjk5MTMsIDEwMTYyLCAxMDMxMCwgMCwgODQ1NCwgCisgICAgMTI3MjMzLCA2NDA5MiwgOTgzNDcwLCA2NDA4MCwgMCwgNjQwOTAsIDAsIDY5OTEzLCAxMDE2MiwgMTAzMTAsIDAsIDg0NTQsIAogICAgIDEyNzg4OCwgNDIwMzgsIDM4NywgNDEzNjMsIDEyNzM3LCAwLCA0NzgwLCA0MzM2OCwgMCwgNjQzMTAsIDY0NjIxLCA2NzMyLCAKLSAgICA3ODExNiwgMCwgOTgzMTM5LCAwLCA5ODMwNzQsIDg4OTYsIDAsIDM3NSwgNjk3NiwgNjY1ODIsIDExOTAwNSwgOTgzODY1LCAKLSAgICAwLCA5ODM0MjYsIDExOTIwMiwgMTE5MjAzLCAxMjUyNiwgNDMxMjAsIDIzMTUsIDAsIDE5MzgsIDExOTE5NywgMCwgNDUyOSwgCi0gICAgMTE5MjAwLCAxMTkyMDEsIDExOTE5OCwgMTE5MTk5LCA2OTY5MiwgOTgzNDI0LCA2OTY5OCwgMTMxNTAsIDY0NDkyLCAwLCAwLCAKKyAgICA3ODExNiwgMCwgOTgzMTM5LCAwLCA5ODMwNzQsIDg4OTYsIDAsIDM3NSwgNjk3NiwgNjY1ODIsIDExOTAwNSwgOTgzODc0LCAKKyAgICAwLCA5ODM0MzQsIDExOTIwMiwgMTE5MjAzLCAxMjUyNiwgNDMxMjAsIDIzMTUsIDAsIDE5MzgsIDExOTE5NywgMCwgNDUyOSwgCisgICAgMTE5MjAwLCAxMTkyMDEsIDExOTE5OCwgMTE5MTk5LCA2OTY5MiwgOTgzNDMyLCA2OTY5OCwgMTMxNTAsIDY0NDkyLCAwLCAwLCAKICAgICAyMjkxLCAxMjkwMiwgMCwgNDI4OTEsIDY2MzI3LCA3NDI5OCwgOTE3ODU3LCAxMDc5OSwgNjk2OTAsIDI1ODcsIDY2MzcyLCAKICAgICAwLCA0MTkzLCA5MjI1MCwgNDI0MSwgOTgzMDU3LCA3OTk4LCAwLCAwLCAwLCAxMjY2NDAsIDIzMTYsIDExODgyMSwgMCwgMCwgCi0gICAgMCwgNjQyOTcsIDc0Nzk5LCA5MjQ0MiwgNzQxNDAsIDAsIDUzNzMsIDAsIDk4Mzg3NywgMzc2MiwgMTAwMTUsIDEyMDY3MiwgCisgICAgMCwgNjQyOTcsIDc0Nzk5LCA5MjQ0MiwgNzQxNDAsIDAsIDUzNzMsIDAsIDk4Mzg4NiwgMzc2MiwgMTAwMTUsIDEyMDY3MiwgCiAgICAgMTE5MjMyLCAwLCA0MTU5MCwgMCwgNzAwOTgsIDM3ODAsIDc0ODUsIDU3NzksIDAsIDQyMDM3LCAwLCAzOTA2LCAxMjM0OSwgCiAgICAgMCwgODMyNiwgMCwgNjU0OTgsIDM3NjMsIDY5ODMsIDU2MTgsIDAsIDM3NzksIDAsIDQzNjEzLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAyODAsIDc0NTU4LCAxMjczMzIsIDY4MTM4LCAxMzA3MiwgMTg5NCwgMCwgMCwgNjU0NzgsIDQzMzEwLCA3MjMxLCAwLCAKLSAgICAxMTc3MywgMCwgMCwgMCwgMCwgMjU1MSwgMCwgNjQ1MywgMTAyMDAsIDYyMzUsIDk4Mzc0MywgMTE5MjM3LCAwLCAxMjg4MDUsIAorICAgIDExNzczLCAwLCAwLCAwLCAwLCAyNTUxLCAwLCA2NDUzLCAxMDIwMCwgNjIzNSwgOTgzNzUyLCAxMTkyMzcsIDAsIDEyODgwNSwgCiAgICAgNDQ3MCwgMTE4MjYsIDkxNzU1NywgNzc4MCwgNTM2OSwgMTE4OTU4LCA1MjQ5LCAwLCA1MzY3LCA4NzU2LCAxMjcxNDMsIDAsIAotICAgIDUzNzcsIDEyMDU4NSwgNjgxNDMsIDE2ODgsIDc4MjQ1LCA5ODMzNDgsIDY5Njg1LCA5ODM3NDcsIDAsIDAsIDQ0MDIwLCAKKyAgICA1Mzc3LCAxMjA1ODUsIDY4MTQzLCAxNjg4LCA3ODI0NSwgOTgzMzU2LCA2OTY4NSwgOTgzNzU2LCAwLCAwLCA0NDAyMCwgCiAgICAgNjgwOCwgNDEzMTksIDEzMDAsIDEwNjUwLCA0MTY5MiwgNjQ1MDUsIDIyOTAsIDAsIDExOTYyNCwgMTQ2NSwgMTA4NTAsIAogICAgIDM5NDMsIDAsIDQxMjA1LCA0MTMxNSwgMTE4OTYxLCAwLCAwLCA1MzUyLCAwLCAwLCA4ODM5LCA0MTMxNCwgNzM4NCwgNzc4NSwgCiAgICAgNDEyMDQsIDEyNzMyMiwgNDEyMDksIDY5NjM3LCA5MjI0MSwgNDM2MDcsIDAsIDAsIDU0MjAsIDM4OTcsIDEwMTM0LCAwLCAKICAgICA3NDQxNywgNDAxOCwgNzE1MCwgNjgxMjcsIDAsIDAsIDAsIDAsIDEyNzUyNiwgMjU2MSwgNjg2MjEsIDM1NDIsIDcxNDgsIAogICAgIDEyMDc2LCA3OTUxLCA2ODE1MiwgMTE4ODU3LCA1MzAzLCA2Mjc2LCAxNzA2LCAwLCA3ODc1MSwgNzE0NiwgMCwgNjUxNTAsIAotICAgIDQxODE5LCAwLCA3Mzk1MSwgMTA4NDcsIDQxODIyLCA5OTg1LCA4NjAsIDAsIDEwNTA2LCA5ODM0MjcsIDY5NjQxLCAxMDc1MywgCisgICAgNDE4MTksIDAsIDczOTUxLCAxMDg0NywgNDE4MjIsIDk5ODUsIDg2MCwgMCwgMTA1MDYsIDk4MzQzNSwgNjk2NDEsIDEwNzUzLCAKICAgICAxMDgzMCwgMCwgNjE1LCA2NDQ5MCwgNzU3NCwgOTI2MTcsIDc3OTIyLCAwLCAxMjkwOSwgNDMwMTYsIDY0NTU5LCAxMjcwMjgsIAogICAgIDAsIDAsIDY3OTk2LCAyMDIwLCAwLCA0MDIyLCAxMjg3ODMsIDAsIDc3OTIzLCAxMjY1OTMsIDQxNjkxLCAwLCAwLCA3NDMyOSwgCiAgICAgMCwgNjQ2MjIsIDkwNzAsIDAsIDY4NDExLCAzOTExLCA0MjgyOSwgNDMxMjIsIDEwMzMsIDc0NDQwLCAwLCA3MDAwLCAzOTA0LCAKQEAgLTE5NTcxLDcgKzE5NTkxLDcgQEAKICAgICA2ODY3NSwgMTI4MDU0LCAxNTExLCA5MzI0LCA3ODIxMSwgMTA1MTksIDY2MzMxLCAzNDU0LCAxOTkzMCwgMCwgNDEwMTksIDAsIAogICAgIDAsIDY1MjkyLCA2ODIyLCAxMjg2MiwgMCwgMCwgNDIxNDMsIDQxODI4LCA3ODIwNywgNjU1MzEsIDc4MjA4LCAxMTg4NzksIAogICAgIDU1MjIzLCAwLCAxMjgwNzEsIDQxODI2LCA4ODY1LCA2NDAyLCAwLCAxMzI3OSwgNzkxNywgNzQ3NTUsIDAsIDc3MzMsIDAsIAotICAgIDQ5OTgsIDk4Mzg4NywgOTIzMzIsIDQxOTUwLCAwLCA0MjY4LCAwLCAwLCA3MDA2MSwgNDAxMywgMCwgMTA4ODEsIDAsIDAsIAorICAgIDQ5OTgsIDk4Mzg5NiwgOTIzMzIsIDQxOTUwLCAwLCA0MjY4LCAwLCAwLCA3MDA2MSwgNDAxMywgMCwgMTA4ODEsIDAsIDAsIAogICAgIDAsIDc0Nzg4LCAyMDE0LCAwLCAwLCA5NzY1LCAwLCAwLCAwLCAxOTUwNTksIDc4MzU3LCA2NTI4MSwgMTI3ODI1LCAxMDk0OSwgCiAgICAgMCwgMCwgMCwgMjAxNSwgMCwgMCwgMCwgNjYzMTgsIDQzMjMzLCAwLCA0MjUxNywgMCwgMCwgMCwgMTI2OTgsIDgwOTQsIAogICAgIDEwMTM1LCA2NTkwOSwgNjQ3NCwgNzk0LCAwLCAxMjY1NiwgMTI4MTIyLCAxMTkzNTMsIDEyODI3MCwgMTY2NSwgMCwgNDgzMywgCkBAIC0xOTU5MCw5ICsxOTYxMCw5IEBACiAgICAgOTQyNSwgOTQyNiwgOTQyNywgOTQyOCwgOTQyOSwgNjQ3NTgsIDIzNjIsIDk2NTUsIDAsIDIwMDQsIDkwOTYsIDk3ODIsIAogICAgIDEyODg0OCwgOTE3MiwgMTI4NTQ1LCAxOTk2NSwgMCwgNTk1NSwgNjc2NjYsIDExMDgsIDAsIDc0NzczLCAwLCAwLCA2NDc4MiwgCiAgICAgMzkyNiwgOTI0NDgsIDY1MjEwLCA4Nzk4LCAwLCA5MjE2NSwgMTM5MiwgMCwgMCwgMTI3MzY0LCAxMDYwNiwgODA2NSwgCi0gICAgMTE4ODA1LCAxMDM1MywgMTA0MTcsIDAsIDAsIDY0NTI0LCA5MjQxOCwgNDAxOSwgMCwgOTgzMjgwLCA0MzI4MCwgODIxOSwgCi0gICAgNjg0MDIsIDE4MTIsIDExOTk2MywgOTgzNjgzLCAwLCAxMjY0ODgsIDQyNDEwLCA3NDQ0OCwgMTE5MTMyLCA2MDU0LCAKLSAgICAxMDY5NywgMzE2OSwgNDIyOTcsIDQyMzIyLCAxMDY0MiwgMzkwOSwgOTk1MCwgMCwgMTI4MTM5LCA5ODMyNTMsIDY4Njc4LCAKKyAgICAxMTg4MDUsIDEwMzUzLCAxMDQxNywgMCwgMCwgNjQ1MjQsIDkyNDE4LCA0MDE5LCAwLCA5ODMyODgsIDQzMjgwLCA4MjE5LCAKKyAgICA2ODQwMiwgMTgxMiwgMTE5OTYzLCA5ODM2OTIsIDAsIDEyNjQ4OCwgNDI0MTAsIDc0NDQ4LCAxMTkxMzIsIDYwNTQsIAorICAgIDEwNjk3LCAzMTY5LCA0MjI5NywgNDIzMjIsIDEwNjQyLCAzOTA5LCA5OTUwLCAwLCAxMjgxMzksIDk4MzI2MSwgNjg2NzgsIAogICAgIDAsIDAsIDEwNDksIDAsIDY1NzA3LCAyMzA0LCA0MTgwNiwgOTIzMjYsIDQyMzM2LCAzOTIxLCAwLCAxMTc3NSwgNjQ3NjAsIAogICAgIDExNzY2LCAxMDM4LCA0MjMwMywgOTgyMywgMTI3Mjc4LCA2OTIzNiwgNDAwOCwgNjQwMDQsIDg3NzMsIDEwNzMzLCAzNiwgMCwgCiAgICAgNTE1MywgNDE4MDUsIDAsIDczNzM1LCA3NjMsIDQxODA4LCA2NDkxMCwgOTgzMTMwLCAyMDA5LCAwLCAwLCAxMjcxNDIsIApAQCAtMTk2MDcsNyArMTk2MjcsNyBAQAogICAgIDc4MDAyLCAwLCA3NTEzLCAxODYzLCA0NzEwLCAwLCA1OTU2LCA3NjIxLCA3ODAwNiwgOTI2MjQsIDQ3MDUsIDcxNiwgCiAgICAgNzgwMDQsIDAsIDQ3MDQsIDEyMDA0MCwgMTIwMjcwLCA0MjI0MSwgMTYxLCA0Mzk3NywgNzQ1NDYsIDY2MjE0LCA0NzA2LCAwLCAKICAgICA2OTkxNCwgNDI2NzIsIDQ3MDksIDEwNjgwLCAxMTkwNjUsIDQzMjkzLCAxMTk5NDQsIDAsIDExOTE2NCwgMTIwMzI4LCAKLSAgICA5MjQ2NywgMTAxODcsIDE3MDAsIDExOTIyMywgMCwgMCwgMTI4MTE5LCA0MDA0LCAwLCAxMDk2OCwgNDMyOTYsIDk4MzYzMywgCisgICAgOTI0NjcsIDEwMTg3LCAxNzAwLCAxMTkyMjMsIDAsIDAsIDEyODExOSwgNDAwNCwgMCwgMTA5NjgsIDQzMjk2LCA5ODM2NDIsIAogICAgIDg1MDYsIDAsIDAsIDEyNjk5NiwgMTAwNSwgOTM3LCA3ODIxNiwgNDczNCwgMjg3MCwgMCwgNzgyMTgsIDk4MzEwOSwgNzQ2MywgCiAgICAgNDcyOSwgMCwgMjM1LCAxMzg0LCA0NzI4LCAwLCAxMjA0MjAsIDkyNDkwLCA3NDQ0OSwgODEwOSwgNDMxMDUsIDk4MzE3NCwgCiAgICAgNDczMCwgNDQ3LCAxMzE4NiwgMTUxMywgNDczMywgMTIwNDE1LCAwLCAwLCA0MjUyNywgMTI5MTEsIDQzNDI3LCAxMzgzLCAKQEAgLTE5NjE4LDcgKzE5NjM4LDcgQEAKICAgICAxMjc2OSwgNjU5MDUsIDQxNjk3LCAxMjgzLCAxMjAzMDIsIDQ3NzksIDAsIDM3MTksIDQwMDYsIDk4MzU2OSwgMTk5NTcsIAogICAgIDEyODc3MywgMjAyMSwgMTE5MzMyLCAxMjA2OTksIDExOTE1MCwgNDMwMjgsIDY1NDkzLCA0MTgzOCwgMzg3NSwgNTk2MiwgCiAgICAgNjQzNDEsIDkyNjE2LCA5ODE0LCA0MzQ1NywgNTgyNywgMzMxNCwgNzc4NywgNzgyMzQsIDY1NDk0LCA2ODE1MywgMCwgMCwgCi0gICAgMTIwNjM2LCA2NDUzMSwgMTIwNjkyLCAxOTQ2MjYsIDAsIDAsIDY2MzE2LCA2NTQ2NywgNTc3MSwgNDEyOTgsIDk4Mzc4NSwgCisgICAgMTIwNjM2LCA2NDUzMSwgMTIwNjkyLCAxOTQ2MjYsIDAsIDAsIDY2MzE2LCA2NTQ2NywgNTc3MSwgNDEyOTgsIDk4Mzc5NCwgCiAgICAgOTc0MiwgNTIxLCAwLCAxMDgwMCwgOTIyMjIsIDg0MDQsIDE5NDYyNSwgNDgzLCA3MDk2LCA3MDg5LCA2NjMyMywgOTI4LCAwLCAKICAgICAwLCAxMTkwMTgsIDEwNTk5LCAxMTU4NiwgMzk4OSwgMTA5NzEsIDQzNzQ4LCA2NTc4MiwgOTg0MSwgODg0MywgMTIxNDUsIAogICAgIDkyNDcwLCAxMDA3NCwgNzg1NDgsIDAsIDM3NjksIDAsIDAsIDAsIDk4MzEwNywgOTU3MywgMCwgNjUyOTAsIDg4NDksIDAsIApAQCAtMTk2MjYsMTcgKzE5NjQ2LDE3IEBACiAgICAgNzM4MzgsIDc4NTUzLCA1ODI1LCAxMzAwNywgNjgxNjUsIDAsIDEyMDQ1NywgMTI2NjEsIDc2MDgsIDEwMzU0LCAxMDQxOCwgCiAgICAgNDI0MTEsIDIwMjIsIDAsIDE0MDksIDEyMTk1LCA0MDAxLCAzMTEyLCAxMDgyNCwgMTIwNjM5LCAxMzkwLCAwLCAwLCA0MjEsIAogICAgIDQzNTM2LCA1ODQ2LCAxMjAxMjAsIDQxMzAsIDEyNzc3NSwgNzU5NSwgNDI1ODgsIDc2MDAsIDEyMDEyMSwgNjYwMzUsIAotICAgIDk4MzkwNCwgMCwgNjU4NTEsIDQyNjA3LCAxMjgxOTAsIDkyNDAzLCAzMTY4LCAwLCA0MjEzNCwgMTE4MzEsIDIzNzAsIAorICAgIDk4MzkxMywgMCwgNjU4NTEsIDQyNjA3LCAxMjgxOTAsIDkyNDAzLCAzMTY4LCAwLCA0MjEzNCwgMTE4MzEsIDIzNzAsIAogICAgIDI4NDYsIDkyNjA1LCAwLCAwLCAxMjAxMzIsIDAsIDE4MzYsIDAsIDAsIDkyNTU4LCAzNzQwLCA2OTg0MywgNjI5MCwgCiAgICAgNjUzNzQsIDEyMDQ1MSwgMjM5MCwgMzk0NCwgNjY2MjgsIDEyMDQzNCwgMCwgNjEzNSwgMzExOCwgNzQyNjUsIDExOTA5MywgCi0gICAgMTIwNDQ2LCAwLCAwLCA4MTI3LCA4OTc1LCA2NDczOSwgNzk0MywgOTgzNzM0LCAwLCAxMDYxOCwgMjU4NCwgMCwgMCwgMCwgCisgICAgMTIwNDQ2LCAwLCAwLCA4MTI3LCA4OTc1LCA2NDczOSwgNzk0MywgOTgzNzQzLCAwLCAxMDYxOCwgMjU4NCwgMCwgMCwgMCwgCiAgICAgOTk5OCwgMTI4NTY0LCAwLCAwLCAwLCAwLCA2MjA0LCAwLCAwLCA4Mjc5LCA4Nzc2LCA2NDk1NCwgNDk3NSwgNzAwNzUsIAogICAgIDEyMDEzMCwgNDI2NywgMTYzMSwgNDIyMDYsIDc3OTgzLCAwLCAxOTUwNDYsIDY1NzAwLCA2NjU2MiwgMCwgNjQ2NDUsIDAsIAotICAgIDAsIDEyNjU4OCwgMTI1ODYsIDAsIDkyNDIsIDEyNzkyMiwgMCwgNDUyMywgNTg0MiwgMTA0OTUsIDMxMjIsIDk4Mzc4OCwgCisgICAgMCwgMTI2NTg4LCAxMjU4NiwgMCwgOTI0MiwgMTI3OTIyLCAwLCA0NTIzLCA1ODQyLCAxMDQ5NSwgMzEyMiwgOTgzNzk3LCAKICAgICA3NzkzLCA3ODI3NSwgOTMyOCwgMTE5MTA0LCA3ODM5MywgMTI2MDQsIDAsIDY2MTUsIDIyODUsIDkyMzQ0LCAzOTg2LCAKLSAgICA0NDAyNSwgMCwgODkxMiwgNjQ1NTUsIDc0MDksIDAsIDk4MzM1MCwgOTU0MSwgNzgyNzYsIDAsIDExMjc1LCA4NTQwLCAKLSAgICAxMTQ5OCwgMCwgOTgzMzQ5LCA0MTA0MCwgMjQ1OSwgMCwgMTMwNjAsIDQxMDQxLCA3NDQxMywgOTgzMTM4LCAwLCAwLCAKLSAgICA2ODQyNywgMTA0NTAsIDEyNTUxLCA0MTA0MywgNzAyMCwgMTIwMzUzLCAzNzY1LCA5ODMzNDIsIDAsIDE2MDYsIDEyMDM0OCwgCisgICAgNDQwMjUsIDAsIDg5MTIsIDY0NTU1LCA3NDA5LCAwLCA5ODMzNTgsIDk1NDEsIDc4Mjc2LCAwLCAxMTI3NSwgODU0MCwgCisgICAgMTE0OTgsIDAsIDk4MzM1NywgNDEwNDAsIDI0NTksIDAsIDEzMDYwLCA0MTA0MSwgNzQ0MTMsIDk4MzEzOCwgMCwgMCwgCisgICAgNjg0MjcsIDEwNDUwLCAxMjU1MSwgNDEwNDMsIDcwMjAsIDEyMDM1MywgMzc2NSwgOTgzMzUwLCAwLCAxNjA2LCAxMjAzNDgsIAogICAgIDEyMDM1MSwgMzA5MywgNjg0MzYsIDAsIDk4MzA2MSwgMTE5NjEzLCAwLCAwLCA0MzEyLCA3NDA5MSwgMTIwMzM3LCAKICAgICAxMjAzMzYsIDExOTIzLCA0MDIzLCAxMjAzMzMsIDU3NjMsIDk0MDE1LCA0ODI3LCAxMDg5NCwgMTI4MTAsIDY0NDA2LCAKICAgICAxMTg3ODUsIDQ0NTUsIDc0MzIxLCA0MzMsIDExOTYyMCwgNjY2NjAsIDI0OTksIDAsIDAsIDExODgzNywgMTE5NzMsIApAQCAtMTk2NDYsMjUgKzE5NjY2LDI1IEBACiAgICAgNzAwNCwgMCwgNjU4ODAsIDEyNzg4NiwgMTE5MDQ4LCAyMzgwLCAxMTM4MCwgMCwgOTM5OTYsIDIzNzYsIDAsIDExOTMyMCwgCiAgICAgMCwgNTE5NywgMTI3MDQ2LCAxMjcwNDcsIDEyNzA0OCwgMjM2NiwgMTI3MDUwLCAxMjcwNTEsIDEyMDU1NCwgMTIwMDQ1LCAwLCAKICAgICAwLCAwLCA5ODMwODQsIDAsIDAsIDAsIDc0MTg4LCA3MTM0MiwgOTgzMDg2LCA5ODM1NzMsIDEyMDA0NywgMTI4NTc1LCAwLCAKLSAgICAwLCAxMjAwNDksIDAsIDE4NDcsIDAsIDEwMzM5LCA5ODMzNTcsIDQyMzg0LCAwLCA0MjI3LCA3NDE1OCwgMCwgOTI1MDEsIAotICAgIDQzMDMyLCAwLCA0MjM2NSwgMCwgMTI2NzEsIDExMzg0LCAwLCA5ODM0NTcsIDAsIDY0Nzk3LCA5ODMzMzcsIDU4MjAsIAotICAgIDk4MzMzNiwgMTIwMDUyLCAxMjAwNjUsIDAsIDEyMDA2NCwgMTIwNjUwLCA0MjEzNywgOTg5MywgMjc1NCwgMTI2NjQsIAorICAgIDAsIDEyMDA0OSwgMCwgMTg0NywgMCwgMTAzMzksIDk4MzM2NSwgNDIzODQsIDAsIDQyMjcsIDc0MTU4LCAwLCA5MjUwMSwgCisgICAgNDMwMzIsIDAsIDQyMzY1LCAwLCAxMjY3MSwgMTEzODQsIDAsIDk4MzQ2NSwgMCwgNjQ3OTcsIDk4MzM0NSwgNTgyMCwgCisgICAgOTgzMzQ0LCAxMjAwNTIsIDEyMDA2NSwgMCwgMTIwMDY0LCAxMjA2NTAsIDQyMTM3LCA5ODkzLCAyNzU0LCAxMjY2NCwgCiAgICAgMTIwMDYzLCAwLCA3Mzc3LCAxMjc4NjcsIDQxNzk5LCA2NTUzMCwgMTcxMSwgMTI5ODQsIDQzMDM5LCAzMTE0LCA2MjU1LCAKLSAgICA5ODMzMzIsIDExODkzOCwgMCwgMTA4NTMsIDkyNiwgOTgzMzYxLCA3NDE4NCwgOTgzMzYwLCAxMjAwNTUsIDAsIDQzMTc1LCAKKyAgICA5ODMzNDAsIDExODkzOCwgMCwgMTA4NTMsIDkyNiwgOTgzMzY5LCA3NDE4NCwgOTgzMzY4LCAxMjAwNTUsIDAsIDQzMTc1LCAKICAgICAwLCA0MzAzNywgNDE3OTgsIDQxMDM1LCAxMTU4MywgMTI3NzY5LCA0MTgwMSwgMTE5MDg4LCAxMTk2MDUsIDUyMCwgNDIwMCwgCi0gICAgMTI2OTksIDgzMzEsIDAsIDMwOTEsIDQxMDM0LCAxMjczNTMsIDk4MzY3MiwgODM2MCwgMCwgNzgwNDQsIDMyMSwgNDIyOSwgCisgICAgMTI2OTksIDgzMzEsIDAsIDMwOTEsIDQxMDM0LCAxMjczNTMsIDk4MzY4MSwgODM2MCwgMCwgNzgwNDQsIDMyMSwgNDIyOSwgCiAgICAgNjQ1NDMsIDkxNzk0NiwgNjU1NjMsIDAsIDkxNzk3NCwgMjg2MSwgNDM3OTMsIDEwMDk1LCAwLCA5MTk1LCA5MjM4NiwgCiAgICAgMTg2MSwgMCwgNzM3MzMsIDAsIDAsIDQzMDQxLCAwLCA0Mzc5NCwgMTI4NTMwLCAzODU5LCAxMjE4MSwgNDE2NjAsIDgyMDksIAogICAgIDAsIDczODY3LCAxMjk3MywgMCwgNzQ3NTcsIDEyNzUxNCwgNDE2NTgsIDAsIDAsIDU3NjAsIDAsIDc0MywgNDQxNCwgCiAgICAgMTIwNzY2LCAwLCA0MjYzMiwgOTE3OTczLCA2NTE2MSwgNzM4OTYsIDEyODU4OSwgMCwgMTQwNSwgMTE5MDYzLCA0MzIyMCwgCiAgICAgNDMzNDEsIDAsIDE5OTE5LCAwLCA2NDUzMiwgNjUzNjcsIDQzNzEwLCAwLCAwLCAzNTEzLCAwLCAxMTg4ODMsIDQzMzQyLCAKICAgICAxMTkwNjQsIDY1NTI5LCA2NTM2NCwgMTI4MTk3LCAwLCA2NDg1LCAxMzk3LCAwLCA0MTk4NiwgOTI2NzgsIDAsIDAsIAotICAgIDc0MDk3LCAwLCA3NDcxLCAxMjA3OSwgNjc5OTcsIDEyNjgyLCA0MzI4NywgOTIzMTcsIDAsIDk4MzE0MywgOTgzNjk4LCAwLCAKKyAgICA3NDA5NywgMCwgNzQ3MSwgMTIwNzksIDY3OTk3LCAxMjY4MiwgNDMyODcsIDkyMzE3LCAwLCA5ODMxNDMsIDk4MzcwNywgMCwgCiAgICAgMCwgMTA5OSwgMTA0OTAsIDAsIDEwNTAxLCA2NTE4MSwgNzQ0NjMsIDAsIDQ2NCwgNDE2MjQsIDY1MjgzLCA2NzY2MywgCiAgICAgNzgyMjIsIDEzNDYsIDAsIDkxNzYzMSwgNjQ1NzMsIDY0ODk3LCA0MjMsIDE4MTgsIDY1MTQ0LCAwLCA4MjcyLCAxMjc4MTIsIAotICAgIDE5OTExLCA0MjE4LCAzMDg3LCA2NDk2MCwgMTI3MjM0LCA0MzU2NCwgMCwgMCwgOTU4NCwgMTA0NjUsIDk4Mzg5MywgCisgICAgMTk5MTEsIDQyMTgsIDMwODcsIDY0OTYwLCAxMjcyMzQsIDQzNTY0LCAwLCAwLCA5NTg0LCAxMDQ2NSwgOTgzOTAyLCAKICAgICA3NDM1OSwgMTI2MjYsIDkxMDYsIDAsIDQyNjQyLCAxMjAyMzAsIDY0NzUwLCA5MzkwLCAwLCA0MTc5NywgMCwgMCwgMjY1LCAKLSAgICA0MTc5NSwgNjQ2NjYsIDEyNjUwOCwgNDM1MzAsIDI3NTIsIDAsIDAsIDk4MzQ4NSwgNTksIDAsIDk4MzU5MywgMCwgOTIzNzEsIAorICAgIDQxNzk1LCA2NDY2NiwgMTI2NTA4LCA0MzUzMCwgMjc1MiwgMCwgMCwgOTgzNDkzLCA1OSwgMCwgOTgzNTkzLCAwLCA5MjM3MSwgCiAgICAgNzc4NzMsIDQxODEwLCAwLCA3MDEwLCAwLCA0MTgwOSwgNDE0OTUsIDExOTM2NCwgMCwgNDIyNTIsIDQyMjEzLCA4MDA5LCAKICAgICAzMzA1LCA0MzAzMywgNTExLCA5MjcwMCwgNjYyNTUsIDEzMTI3LCAxMjAwNjcsIDAsIDc0Mzk3LCAxMjAyMzUsIDkxNzk3NywgCiAgICAgNjU5MTUsIDE0MDAsIDQxODEyLCAxMDY4NSwgMTk0ODcwLCAyMTAzLCAxMDM4NywgNDQ1MywgNDMyNzYsIDkxNzc4MywgCkBAIC0xOTY3NSwxNyArMTk2OTUsMTcgQEAKICAgICAwLCA0MTg0MSwgNDMzMzgsIDAsIDAsIDU3MjYsIDY0OTE1LCA0MjE3NSwgMCwgMCwgNDE0OTcsIDY1MDQ0LCAxMjAxMDksIAogICAgIDI4NTEsIDQzMDE3LCA5ODM1ODksIDAsIDQzNzMsIDc4MDU4LCAwLCA5NTg3LCAxNzg5LCA2NjcxLCAxMjg4NDAsIDMxMDAsIAogICAgIDAsIDY1MzYwLCAwLCA5MjM2NSwgOTE3Nzg5LCA2NDkyMiwgMCwgODE5MCwgMTIwODMsIDAsIDAsIDY1MDYsIDY0MzEyLCAKLSAgICA3NDM3NCwgMjM2OCwgMCwgNDQxOSwgOTgzODM4LCAxMTkxMjUsIDM0MzksIDE4MjUsIDExOTIsIDEyMDEwNiwgODg5MSwgCisgICAgNzQzNzQsIDIzNjgsIDAsIDQ0MTksIDk4Mzg0NywgMTE5MTI1LCAzNDM5LCAxODI1LCAxMTkyLCAxMjAxMDYsIDg4OTEsIAogICAgIDMwODAsIDEyMDIyOCwgMjM0NywgNTQzMCwgMCwgODk5MCwgMjg0OCwgMCwgMTI4MjIzLCA5MjUyOCwgMjQ5LCAwLCAwLCAwLCAKICAgICAxMjA2NTgsIDAsIDAsIDg4ODMsIDkxNzgwMiwgNzI4LCA2ODE3OCwgOTk1LCAwLCAwLCA2NDgyNiwgMCwgOTE3Nzk4LCAKLSAgICAxMjgzNDgsIDAsIDE5OTQ1LCA4MDkxLCA1NTgsIDAsIDEyMjczLCAxOTQ4MTQsIDk4Mzg0MSwgMTIxMTIsIDY5OTEyLCAwLCAKKyAgICAxMjgzNDgsIDAsIDE5OTQ1LCA4MDkxLCA1NTgsIDAsIDEyMjczLCAxOTQ4MTQsIDk4Mzg1MCwgMTIxMTIsIDY5OTEyLCAwLCAKICAgICAwLCA3NDQxOSwgMTIzMzUsIDEyMDEwNCwgOTE3Nzk1LCAzNDQzLCAzMTI5LCAwLCAyMTAyLCA2NTQ0NSwgNzgyNTgsIAogICAgIDY0ODkxLCAwLCA3NzI1LCA2NTEwOCwgNzgyNTUsIDAsIDg2MjQsIDY5MjQ2LCAxMjQ0NiwgNDMyOTUsIDAsIDQxODk0LCAwLCAKICAgICA2Mjc3LCA0MTY3MiwgNDE4OTMsIDEwMDEwLCAxMjg2NzgsIDM1NDAsIDEyODY0OSwgODM1LCA3MTM0MCwgNjk4MTYsIAogICAgIDExOTg2OCwgNzQ0MDgsIDAsIDczOTU5LCA1NDI2LCA0MjU4LCAwLCAwLCA1NDI0LCAxMjgxMjcsIDgyODMsIDAsIDU0MzQsIAogICAgIDk4MzU5MCwgMCwgMTk5MTcsIDExNDA4LCAwLCAxMTk0NywgMCwgMTQwNCwgMzA5NSwgMTE0MzIsIDEyODMwNywgMzQ2NCwgCiAgICAgNjQ4NiwgNDgxOSwgMTI4MjMzLCAwLCA1NzAsIDgwOTUsIDM2NzIsIDExOTg2NCwgMTQ5OCwgNjc4NjYsIDAsIDEyODUzOSwgCi0gICAgNDMxLCAwLCAwLCAxMjgxODIsIDEyODA5NiwgNjgxNjcsIDk4MzY1NCwgMTMwOTYsIDEyODY0MywgMCwgNDM0MDgsIDk1MTYsIAorICAgIDQzMSwgMCwgMCwgMTI4MTgyLCAxMjgwOTYsIDY4MTY3LCA5ODM2NjMsIDEzMDk2LCAxMjg2NDMsIDAsIDQzNDA4LCA5NTE2LCAKICAgICAxMjg1MzgsIDUyNjgsIDQyMjMwLCA0MjIyMCwgMCwgNDQ1MCwgMTIwNTExLCAxMTU0NywgNDM0MTcsIDEyODU0MiwgMzU2LCAKICAgICAzNDc3LCAyMjcsIDEwNDg4LCA2ODIwMywgMzgyLCAxMTQxOCwgMCwgMTk1MDY2LCAwLCAwLCAwLCAwLCA2NDg0LCAyNTQxLCAKICAgICA2NjAzOSwgMCwgNzg3MTgsIDkyNzIzLCAzNTQ5LCAwLCA5MTEwLCAxMTk2NjUsIDI3NDMsIDAsIDQzMjkwLCAxOTQ4MTIsIApAQCAtMTk2OTQsNyArMTk3MTQsNyBAQAogICAgIDEyODQ5LCAzOTUzLCAxODk3LCAwLCA2NTA5NCwgMTE5OTQsIDQzMzksIDc0NTU2LCA5MjY1NCwgNjc4NDMsIDAsIDAsIDAsIAogICAgIDY4NDczLCA3NDEwNCwgNTIyOCwgMTI4ODA0LCA3ODY4LCA0MzE4NCwgMCwgMCwgNzM5ODYsIDQzNDM4LCAwLCA0MzAyMiwgMCwgCiAgICAgMTE2MiwgOTE3ODQ3LCAyNjcxLCAwLCAwLCA5MjYzMiwgOTI2MzEsIDExODg2NSwgNDU1MywgNzM4MTEsIDAsIDE5NTAwNSwgCi0gICAgMCwgMCwgMTk5MjEsIDc0MzMxLCAxMTQyNCwgMTk1MDA2LCA0NTY3LCA0MTg5MSwgMCwgOTgzNzc5LCA1NTI0OSwgNDgyMCwgCisgICAgMCwgMCwgMTk5MjEsIDc0MzMxLCAxMTQyNCwgMTk1MDA2LCA0NTY3LCA0MTg5MSwgMCwgOTgzNzg4LCA1NTI0OSwgNDgyMCwgCiAgICAgNjUyMzksIDE5NDY2MiwgMCwgMTk0NjY1LCA0MzA0MiwgMTE5MjEyLCAxMzc3LCAxMjg2OSwgNDg5NywgNDI4MjEsIDkyNTAsIAogICAgIDAsIDQ0MzgsIDY0Mzg1LCAwLCAxNzUzLCAxMTMzMSwgNjE0NywgMTk0OTQxLCA0MzI4MiwgODgzMywgMCwgMCwgNjUwNCwgCiAgICAgNzg0MDgsIDEyNjk3OSwgMTA3MTksIDAsIDE4OTgsIDE0MTMsIDQyNDQzLCAwLCA4MDIsIDEyMTQxLCAwLCAxOTQ2NzEsIApAQCAtMTk3MDMsNyArMTk3MjMsNyBAQAogICAgIDc4NzE5LCA2NjU3MywgMCwgNzg3MjQsIDc4NzEyLCAxMTc2MSwgMTk0NjU1LCAwLCA0MTA5NCwgMCwgMCwgMTk0ODkzLCAwLCAKICAgICA5MjY4OSwgNjE5NiwgNjk0NSwgOTM5NjksIDE5NDg5MCwgMTI4MTg0LCAxMjA0OTEsIDExODE2LCAxOTQ5NDMsIDU3MzMsIAogICAgIDI5MzAsIDAsIDAsIDQxMDk4LCAwLCA0MTA5MywgMCwgNjY2MjYsIDU4OCwgOTc2MCwgMCwgMTk0NzE3LCAxMjM4LCAyMDAsIAotICAgIDk4MzIwNSwgMTY2MCwgNzM5MTYsIDAsIDExODkwNSwgNzQzNjIsIDAsIDkyNDg1LCAxOTQ2NTEsIDAsIDk4MzY5NywgMzM5NCwgCisgICAgOTgzMjA3LCAxNjYwLCA3MzkxNiwgMCwgMTE4OTA1LCA3NDM2MiwgMCwgOTI0ODUsIDE5NDY1MSwgMCwgOTgzNzA2LCAzMzk0LCAKICAgICAxOTQ4OTQsIDEyMDY2OCwgMCwgMCwgMTI3MzU4LCA2NjIxOSwgMTI3MTgzLCA0MzI4NCwgMTk0NjU2LCA3ODE3LCAxODQxLCAKICAgICAxMTA1NSwgMTIwNTMzLCAxOTQ5NzksIDE5NDk4MiwgMTY2OSwgMTA3NzYsIDE5NDk4MSwgNzcwMSwgMTk0OTgwLCAwLCAKICAgICAxOTQ5OTUsIDE3MzIsIDQwMzAsIDAsIDM5NjMsIDY2NjExLCAxMjc1MzAsIDQxNzY4LCA2NDkxLCAwLCA2NTMyNCwgOTE0LCAKQEAgLTE5NzExLDMwICsxOTczMSwzMCBAQAogICAgIDEyMDA5LCAxMjM5OSwgMCwgNjc4NTIsIDY1NTM3LCAwLCAxMDg0MSwgNDM0MzAsIDUzMDEsIDAsIDkyNjE4LCA1NzM0LCAKICAgICA4OTYwLCAwLCA5MjUyNywgNjUzMTcsIDc3ODgwLCAwLCAwLCAwLCAxMjMwNCwgMCwgMCwgNjUzMTUsIDkyNjcwLCAxMjg1MTEsIAogICAgIDAsIDAsIDAsIDExOTYyMSwgOTI1MjksIDc0NTM2LCAxMjQ0NywgNjQ0ODYsIDEyNzM3NCwgMTI2NTYyLCA5ODMxMjksIDAsIAotICAgIDAsIDk4Mzc5MywgNDI3NjcsIDEwOTE1LCAwLCAxMjAwNywgNDM2OTUsIDEyMDUyMCwgMTE5NzUsIDE5NDg3OCwgMCwgCisgICAgMCwgOTgzODAyLCA0Mjc2NywgMTA5MTUsIDAsIDEyMDA3LCA0MzY5NSwgMTIwNTIwLCAxMTk3NSwgMTk0ODc4LCAwLCAKICAgICA5MjYwNCwgMjU1NSwgODYyOSwgMTI4NjQwLCA0MzE2OCwgNDE4NzIsIDQzNzA2LCA0NDk2LCAxOTQ4NzksIDEyODE0OCwgCiAgICAgMTIwMjQxLCAwLCAwLCAwLCAwLCA2NDczMCwgNzAwNDEsIDY2NzE0LCA2ODIyMiwgMCwgNzAwNzYsIDY1NTk2LCA5MjMwNiwgCiAgICAgMTE0MTYsIDQyODAsIDY3NjU1LCA4NzY1LCAxMjc4NCwgNzc5MiwgMTM5MywgMTI2NDczLCA2Nzg3MSwgNzQzODYsIDAsIAogICAgIDgyMzMsIDEyODIwLCAwLCA2NjgzLCAxOTQ4NzYsIDM0NDIsIDEyMTQ0LCAyODQxLCAxMjU0MywgMCwgMTQ3MywgNDI4MjAsIAogICAgIDY0MzI5LCAxMjc4MzIsIDAsIDY4NjQyLCA2NDg4LCAzNTcsIDEwNDgsIDQxMTAwLCAwLCA0MTEwNCwgOTQwMDMsIDM0MDYsIAogICAgIDEwNTQsIDcxMzIwLCAxMDQwLCA2NTQ1MCwgMCwgNDQzNCwgMTA2OSwgMCwgMTE4ODYyLCA2NTczNywgOTE3NzY1LCAKLSAgICAxMjg3MDUsIDAsIDk4MzY4NCwgOTY5MywgNDE5NDMsIDEyNjU2NCwgNDE5MzEsIDQxNzU5LCAxMjc1NywgNDM1MywgMCwgCi0gICAgMTA1OSwgOTc5MCwgODk5NSwgMTE5OTc0LCA5ODM2ODcsIDY1OTM3LCAwLCA0MTc2NCwgMTA2NDYsIDAsIDExODgzMywgCi0gICAgOTIzNzIsIDAsIDc0ODMwLCA3ODU2OSwgMTI3NDMsIDk4MzY4MCwgNjQ4MCwgOTE3NzYxLCA0MTc3OSwgNDI1ODAsIDY2NjAxLCAKLSAgICAxMjIwNywgMTE5NjE5LCA2MzM1LCA2NjYwMiwgMTEzMTIsIDY0ODA3LCAwLCAwLCA0MTc2NywgMTE5NjI5LCA5ODM3NTUsIAotICAgIDQzMDIwLCAxMjgyNzEsIDM5NTUsIDc0MjU0LCAwLCA5ODM3NDUsIDkxNzg2MSwgMCwgNzc5MjYsIDk3NzAsIDkyNDYsIAorICAgIDEyODcwNSwgMCwgOTgzNjkzLCA5NjkzLCA0MTk0MywgMTI2NTY0LCA0MTkzMSwgNDE3NTksIDEyNzU3LCA0MzUzLCAwLCAKKyAgICAxMDU5LCA5NzkwLCA4OTk1LCAxMTk5NzQsIDk4MzY5NiwgNjU5MzcsIDAsIDQxNzY0LCAxMDY0NiwgMCwgMTE4ODMzLCAKKyAgICA5MjM3MiwgMCwgNzQ4MzAsIDc4NTY5LCAxMjc0MywgOTgzNjg5LCA2NDgwLCA5MTc3NjEsIDQxNzc5LCA0MjU4MCwgNjY2MDEsIAorICAgIDEyMjA3LCAxMTk2MTksIDYzMzUsIDY2NjAyLCAxMTMxMiwgNjQ4MDcsIDAsIDAsIDQxNzY3LCAxMTk2MjksIDk4Mzc2NCwgCisgICAgNDMwMjAsIDEyODI3MSwgMzk1NSwgNzQyNTQsIDAsIDk4Mzc1NCwgOTE3ODYxLCAwLCA3NzkyNiwgOTc3MCwgOTI0NiwgCiAgICAgMTIyMzAsIDAsIDAsIDAsIDEwNDQ4LCA0MTc4MywgNDE3ODYsIDEyNzA5MywgMTI3OTcsIDI3NTUsIDY0NTcxLCA3ODU3OCwgCiAgICAgMTk0OTI3LCA0ODU3LCAwLCA0NDI4LCAxMjc5NCwgNzM3NTUsIDEyODA2MSwgNzg1NzQsIDAsIDc0Mjg0LCAwLCA1NzQ3LCAKICAgICA3ODgyNSwgMCwgNzk3OCwgNDEwOTIsIDc0NTcxLCAwLCAxMTkyNCwgNDM4MTIsIDQyMTQ0LCA2NTAxNSwgMCwgNTYzLCAwLCAKLSAgICA5ODM2ODIsIDEyNzk4LCAxMTI3MSwgNTcsIDAsIDAsIDkxNzg2MCwgMTE5MDQzLCAwLCA5NDA1MSwgNDMxMzcsIDY5NCwgMCwgCisgICAgOTgzNjkxLCAxMjc5OCwgMTEyNzEsIDU3LCAwLCAwLCA5MTc4NjAsIDExOTA0MywgMCwgOTQwNTEsIDQzMTM3LCA2OTQsIDAsIAogICAgIDk4NzYsIDAsIDExOTE2OCwgMCwgNzg4MjIsIDY0NTM3LCAwLCAyNzcsIDc0Mzg1LCA3MjI5LCAxMjc2MSwgMCwgMCwgCiAgICAgMTMwMjUsIDY0ODExLCA4NzU3LCA3ODgyNCwgMTI2NDc4LCAxNTc0LCA3MzgxLCAwLCAyNTI1LCA0ODUyLCA1NzQ5LCAKICAgICA2ODQ2NSwgMTMwMjcsIDQyODI0LCAxMjA1NzQsIDEwMzksIDcxNTEsIDEwMTU1LCA1NzQ1LCAxODgsIDQxODU4LCAxMTU5MiwgCiAgICAgMCwgNzQwMTUsIDkwNTUsIDQxODUzLCA0ODU4LCA5MTc3ODAsIDAsIDQzNiwgNDc3MSwgMCwgMjc4NiwgMCwgNDg1NiwgCiAgICAgODA1MSwgMCwgMTE5NjA5LCA3MTMyNywgOTY0NCwgMCwgMCwgMCwgMTk0OTE2LCAxMjA3MzIsIDY2NzEwLCAxMTg4MzQsIAotICAgIDk4MzM1MSwgNzM5MDYsIDEyODY4MCwgMTI3MTE0LCAwLCAxMDIzNCwgNTg0MywgMTE5MzksIDAsIDQyMTU3LCAwLCAzMTU3LCAKKyAgICA5ODMzNTksIDczOTA2LCAxMjg2ODAsIDEyNzExNCwgMCwgMTAyMzQsIDU4NDMsIDExOTM5LCAwLCA0MjE1NywgMCwgMzE1NywgCiAgICAgMTk0OTE4LCA2ODM5MywgMCwgMzUwNCwgMTE5MTc4LCAwLCAxMDgyMiwgNTE0OSwgNjYwMjksIDEwMjI2LCA2NTE0MiwgCi0gICAgMTI4MDI1LCAzNTk0LCA0MjQyNCwgMTk0OTU5LCA0MCwgMTI2NTcsIDk4MzY1NiwgMCwgMzg2LCAwLCA4ODM0LCAwLCAKKyAgICAxMjgwMjUsIDM1OTQsIDQyNDI0LCAxOTQ5NTksIDQwLCAxMjY1NywgOTgzNjY1LCAwLCAzODYsIDAsIDg4MzQsIDAsIAogICAgIDEyODE1LCA0MzU3NCwgMCwgNzM5MDcsIDAsIDc0MTk2LCA3MjIwLCA3NDUwNCwgMCwgNzQzMTYsIDAsIDY1MzIyLCA0MzA0LCAKICAgICA3NDUwMywgODE2MCwgNzg3MDcsIDE5NDc1MywgMCwgMCwgMTI4NTI2LCAxMzQ4LCA5MjM0OSwgNzg1OTcsIDEyNjUzOSwgCiAgICAgMTMzMDMsIDAsIDkyMzkyLCAxOTQ3NTUsIDc1OTksIDEyNzgsIDQzNjE2LCAxMzI2OSwgMCwgMCwgNzQzODcsIDc4MTc5LCAKQEAgLTE5NzQ2LDI1ICsxOTc2NiwyNSBAQAogICAgIDQyNTA3LCAxOTYyLCA0MzMwNSwgNzg0NzYsIDQyNTA1LCAxMTY2MCwgMCwgMjA3MiwgOTIzMTIsIDY5OTUsIDc0MTczLCAKICAgICA1NDM3LCA3NDE3NCwgMTA2NjksIDg3MDIsIDc5NjQsIDkyMzUyLCAwLCAxOTksIDE5NDg0MywgNDEwNSwgMTk0ODQ1LCAKICAgICAxOTQ2OTksIDE5NDg0NywgMTk0NzEwLCAxMTk4NzUsIDEzMTQ4LCA3NTYwLCA3ODQ3OSwgOTIyNiwgNzg0ODAsIDE5NTA3MCwgCi0gICAgNjQ3MiwgNjU4MTQsIDczOTU0LCAwLCA0NzI0LCAwLCAwLCA5MTkxLCAwLCA2NDQzMiwgOTgzODA4LCA5ODMyNDEsIAorICAgIDY0NzIsIDY1ODE0LCA3Mzk1NCwgMCwgNDcyNCwgMCwgMCwgOTE5MSwgMCwgNjQ0MzIsIDk4MzgxNywgOTgzMjQ3LCAKICAgICAxOTUwMjQsIDEwMTk2LCA3ODg2LCAwLCA2NTg1LCAwLCA2NjgwLCAxOTUwNDIsIDAsIDE5NTA1MSwgNjY3OSwgNzQ0MTIsIAotICAgIDkyMjUxLCAxOTQ4NjYsIDc0NDIxLCAxMTM4MiwgOTgzNjIyLCA5ODM2MjgsIDEyNzg5MSwgMTI3NDg0LCAxOTQ4MzMsIAorICAgIDkyMjUxLCAxOTQ4NjYsIDc0NDIxLCAxMTM4MiwgOTgzNjMxLCA5ODM2MzcsIDEyNzg5MSwgMTI3NDg0LCAxOTQ4MzMsIAogICAgIDE5NDgzMiwgNjY4MSwgMTI3NDgyLCAxMjY5MywgMTk0ODM2LCA0MjcyNywgNzgxOTYsIDEyODI1MiwgNzgxOTUsIDY1NDQyLCAKLSAgICAxMTk2MTAsIDY5NzMzLCA5OTg5LCA0MzI0OCwgNjYyNDgsIDE5NDgxNiwgMCwgMTk0ODE4LCAxMjg4NDUsIDE5NDgyMCwgCisgICAgMTE5NjEwLCA2OTczMywgOTk4OSwgNDMyNDgsIDY2MjQ4LCAxOTQ4MTYsIDAsIDExMzIxLCAxMjg4NDUsIDE5NDgyMCwgCiAgICAgMTk0ODE5LCA1Mjk3LCA3MDQyLCAxMzI4NCwgNjExMiwgNzk2OCwgMTk0ODI1LCA3MzkyNywgOTI0NDQsIDE5NDczNiwgCiAgICAgNjU3NDYsIDEyNzQ3NiwgNjk4ODksIDc0Mzg5LCAxMjg2OTYsIDQzNDIsIDQyODM5LCAxOTQ4MzEsIDE2NzcsIDAsIDAsIAogICAgIDEyNjU5MCwgOTE3ODU1LCAxMTA5MSwgMTEwMTEsIDI3MTksIDAsIDAsIDExOTU5NSwgMTAxNjAsIDAsIDAsIDc1ODUsIAogICAgIDY1MTY5LCAyMDUyLCA0MzA4LCA5MjE3NCwgNDMwMDAsIDc1MDUsIDU0MywgNjQ5MTYsIDY0NzM2LCAwLCAwLCA2NDY1NSwgMCwgCi0gICAgMTE4OTIyLCAyMDY0LCAwLCA0MzE1OCwgNzkwMiwgMCwgNjUyNjUsIDE5NDYzOSwgMCwgMTI3MTcwLCAwLCAwLCAwLCAwLCAKLSAgICAxMjk5NCwgOTI3MjgsIDEwODI4LCA5ODM5MzQsIDYyMjgsIDQzMDcsIDM0ODIsIDEyODUyNywgMCwgMCwgMCwgNTA2LCAKLSAgICA3NDU3MywgNDExOTQsIDY1NzM1LCAyMDU1LCA0MzI1NSwgNDExOTUsIDAsIDgxNjksIDk4MzY3MSwgODg0MSwgMCwgNTE2LCAKKyAgICAxMTg5MjIsIDIwNjQsIDAsIDQzMTU4LCA3OTAyLCAwLCA2NTI2NSwgMTk0NjM5LCAwLCAxMjcxNzAsIDAsIDk4MzYyNSwgMCwgCisgICAgMCwgMTI5OTQsIDkyNzI4LCAxMDgyOCwgOTgzOTQzLCA2MjI4LCA0MzA3LCAzNDgyLCAxMjg1MjcsIDAsIDAsIDAsIDUwNiwgCisgICAgNzQ1NzMsIDQxMTk0LCA2NTczNSwgMjA1NSwgNDMyNTUsIDQxMTk1LCAwLCA4MTY5LCA5ODM2ODAsIDg4NDEsIDAsIDUxNiwgCiAgICAgOTM5NzQsIDIwNjMsIDExOTA1MSwgMzQsIDEyODg1MCwgMTIwMTg2LCAxMTUwNCwgMTYxMiwgNzQzMzMsIDEyMDE4MiwgCiAgICAgMTE4MjcsIDc0MzA4LCAxMjAwMSwgMTIwMTc4LCAxMDI0MiwgNjQ1NjQsIDEyMDE3OSwgNjc5ODYsIDY1ODQsIDc3NDksIAogICAgIDExMDM3LCAwLCAxNzU4LCAxMjcwOTIsIDEwNjY3LCAxMDU2MCwgMTIwMTk3LCA5MjU5MywgMTkzNSwgMTE1MTcsIDEyMDE5MywgCiAgICAgMTIwMTk2LCAxMjAxOTUsIDE5MzEsIDEyMDE4OSwgNzQ4MzksIDEyMDE5MSwgMTIxNywgNjQ3MDIsIDEyNjQzLCA4MjUsIAogICAgIDEyNzgzOCwgMTk0OTA1LCAxMjI5NCwgOTI0MjgsIDc4ODM0LCA5MTM4LCA3ODgzMSwgNzg4MzMsIDEyNjMxLCA3ODgyOSwgCiAgICAgMTEwODAsIDc0NTU0LCA2NDAwMCwgNTU5MSwgMTIzOSwgMCwgMTEzMTMsIDAsIDM0MDMsIDAsIDAsIDY0MzY0LCA5MjI2OSwgCi0gICAgMCwgNzQ1ODIsIDg5OTgsIDEyOTg4LCAwLCA5MTUyLCA5ODM4NDAsIDAsIDEyNjQ4NCwgNjc1ODksIDQxODUwLCA2NDI5MCwgCisgICAgMCwgNzQ1ODIsIDg5OTgsIDEyOTg4LCAwLCA5MTUyLCA5ODM4NDksIDAsIDEyNjQ4NCwgNjc1ODksIDQxODUwLCA2NDI5MCwgCiAgICAgMzQzMywgOTIzOTMsIDEyNjE1LCAxNTk0LCA0MjE5MiwgNjkxNCwgNjc2MDMsIDAsIDExOTU2OSwgNzQ1NjUsIDQxMzUzLCAKICAgICA2NzYwMiwgNjc2MTEsIDQzMzcsIDAsIDEyNzI5NiwgOTE4LCA2NTAzNSwgNDEzNTEsIDc2ODEsIDE5NDkwMCwgNDI1NzcsIAogICAgIDQxMzkzLCAxMjY2OCwgMTk0OTA0LCAyNDc3LCAxMjcyODUsIDAsIDEyNzMwMSwgMCwgNjc2MDQsIDE5NDg4MCwgMTI3MjM1LCAKQEAgLTE5Nzc2LDE0ICsxOTc5NiwxNCBAQAogICAgIDczNzk2LCAwLCAxMTkyMjgsIDEyMDM1LCAwLCAyODE4LCAwLCA3NDQxMSwgNzM3OTMsIDAsIDQxNzIsIDAsIDAsIDgzNzMsIAogICAgIDEwODczLCAxMjE5NywgMCwgMCwgOTIyNjUsIDY5NzA2LCAwLCA3ODIxMCwgMCwgMTI4MTEwLCAxOTQ4NjUsIDEyNjk4MiwgCiAgICAgNzQ1NjMsIDY0ODI4LCAxMTQxOSwgMTk0ODY4LCA3NjYsIDEyNTcsIDAsIDExODg0NSwgMTEzODEsIDMyNjUsIDY2NjE3LCAKLSAgICAzMjc0LCAxMjczNjUsIDEyNjUyMywgOTQwNDIsIDk4Mzk0MSwgNzQ1MjIsIDQxOTg5LCAwLCAwLCAxMjg3OTgsIDMyNjMsIDAsIAorICAgIDMyNzQsIDEyNzM2NSwgMTI2NTIzLCA5NDA0MiwgOTgzOTUwLCA3NDUyMiwgNDE5ODksIDAsIDAsIDEyODc5OCwgMzI2MywgMCwgCiAgICAgNjU2NzIsIDAsIDMyNzAsIDY0NTM5LCAxMTQ4OSwgMCwgMCwgMCwgMCwgOTUwNSwgNjU1MTgsIDE5NDc3NiwgNzU2LCAKICAgICAxOTQ2MDUsIDAsIDAsIDAsIDcyNjEsIDAsIDE4NiwgMCwgMTE5MTU2LCA1NzcwLCAxMzE3OSwgNjU4MzAsIDEyNjEyLCAKLSAgICAxMjk0OSwgNjQ4NTYsIDEyODAwLCA5ODM4OTIsIDc0MjAzLCA2NDcxOCwgMTE1MDcsIDAsIDkyNDM0LCAxMTg5MjksIDAsIAorICAgIDEyOTQ5LCA2NDg1NiwgMTI4MDAsIDk4MzkwMSwgNzQyMDMsIDY0NzE4LCAxMTUwNywgMCwgOTI0MzQsIDExODkyOSwgMCwgCiAgICAgMTE1NzgsIDAsIDExOTI5NiwgMCwgMCwgMCwgMCwgNzQ1NjgsIDkyNTQsIDAsIDE3OTQsIDEyMDIxNywgNjQ1MjEsIDU2MjQsIAogICAgIDEyMDIyMCwgMTIwMjIxLCAxMTk5NTgsIDEyMDIyMywgMzYxNywgNjY2MzYsIDY0ODg2LCA5NDA2MSwgMTIwMjEyLCAKICAgICAxMjAyMTMsIDEyMDIxNCwgMTg3MiwgNjY1MDgsIDEyMDQ2NywgNDEwNzksIDEwNzQ4LCA1NTAyLCAxMTkzMzAsIDQ0NTIsIDAsIAotICAgIDk4Mzc2MiwgOTI1MjYsIDQ1MTEsIDAsIDk4Mzg2OCwgNjQ2NzgsIDExNDI1LCAwLCA0MzI0NSwgMTIzMSwgMTk0NzgzLCAKKyAgICA5ODM3NzEsIDkyNTI2LCA0NTExLCAwLCA5ODM4NzcsIDY0Njc4LCAxMTQyNSwgMCwgNDMyNDUsIDEyMzEsIDE5NDc4MywgCiAgICAgNjk5MDMsIDAsIDkwMDMsIDgxOTIsIDAsIDUzMDUsIDk2NTMsIDEwNjE2LCA4Njk0LCA5NTQ2LCAwLCAwLCAxMjA0NzgsIAogICAgIDEyMDIwMCwgNjUyMDUsIDEyMDIwMiwgNjQwNjMsIDk4NzgsIDc0NzgwLCAxMTk2MjYsIDc4MjAyLCA2NDA1OCwgODc5OSwgCiAgICAgNDIxMzEsIDAsIDY0MDYyLCAxMDI4LCA2NDA2MCwgNjQwNTksIDgzNywgMTA1NjcsIDAsIDQzMTAzLCAwLCAxMjA3NTQsIApAQCAtMTk3OTIsMjYgKzE5ODEyLDI2IEBACiAgICAgNjQwMzIsIDQyNzM1LCA2NDAzOCwgNjQwMzcsIDY0MDM2LCA2NDAzNSwgNDI5MSwgMTk0OTI4LCA2NDAxNSwgNjQwMTQsIAogICAgIDY0NjgxLCAxOTQ5MzAsIDAsIDc4MTQ1LCAwLCA0MzA5MCwgMCwgMzQ3NiwgODk3MywgNjQwMTIsIDQyNDczLCA2NDAxMCwgCiAgICAgNjQwMDgsIDY0MDA3LCAyMDAzLCA3NzA2LCA2NDUxNywgNzgxNTMsIDI1MzgsIDY0MDA5LCAyMDQsIDAsIDQ4MDIsIDQxMTEsIAotICAgIDgyMzksIDkwOTgsIDQ4MDUsIDY0MDAxLCA2NDA1NywgNzg4NSwgNzI0NywgNjQwNTQsIDk4MzI1OCwgMCwgNDc2NywgOTM0MywgCisgICAgODIzOSwgOTA5OCwgNDgwNSwgNjQwMDEsIDY0MDU3LCA3ODg1LCA3MjQ3LCA2NDA1NCwgOTgzMjY2LCAwLCA0NzY3LCA5MzQzLCAKICAgICA2NDA0OSwgNjQwNDgsIDEyMDAzNCwgMTEzMywgNjQwNTMsIDY0MDUyLCA0MzQ1MywgNjQwNTAsIDQxMzQwLCAxMTg5NzUsIAogICAgIDE5NDgzNSwgMTAwMDUsIDEyMzI5LCA0MTMzMywgMCwgODQ4OSwgMTk0MiwgMCwgMTk0ODM0LCA0MjUyMCwgMTI4MjQ5LCAwLCAKICAgICAwLCAxMDc2MCwgNjQwMjMsIDY0MDIyLCA2NDAyMSwgNjU4MiwgNDM2NzAsIDAsIDY0MDI1LCA5MTY3LCA0MjE1MSwgNzgyNDQsIAotICAgIDk4MzIyNiwgMjAyNiwgNjQwMTksIDY0MDE4LCA2NDAxNywgNjQwMTYsIDEyNzY4LCAwLCA3NTgyLCA3ODI1MiwgNzgyNDgsIAorICAgIDk4MzIzMiwgMjAyNiwgNjQwMTksIDY0MDE4LCA2NDAxNywgNjQwMTYsIDEyNzY4LCAwLCA3NTgyLCA3ODI1MiwgNzgyNDgsIAogICAgIDc3OTE0LCA3ODI0NiwgNzgyNDcsIDAsIDc3OTE1LCA3ODc2NiwgNjc4OCwgMTMwOTQsIDc3OTIwLCA3NTMyLCA0MTQxNCwgCiAgICAgNzg1MjAsIDMxNzksIDc4NTE4LCA2NDc2OSwgNzg1MTQsIDc4NTE3LCAxMTQ2MSwgNzQ0NTQsIDEwNzUxLCA5MDUxLCAKLSAgICAxMjA3MjAsIDY3MDgsIDEwNTM1LCAwLCA2ODIxOCwgNTUyNzQsIDIwMDgsIDY0MDMxLCA2NDAzMCwgMjk0LCA0MTg3NCwgMCwgCi0gICAgMTI2OTkxLCA2NTkyOSwgMCwgMCwgMCwgMCwgNjQwMjgsIDgxNDYsIDY0MDI2LCA0MTc4OCwgMTk0ODQ0LCAwLCA0MzUxLCAKLSAgICA2MzQzLCA0MzI0NywgMTE5ODg4LCAwLCAxMTk4ODYsIDExOTg5MSwgMTE5ODkyLCAxMTk4ODksIDExNDMzLCAxMTk4OTUsIAotICAgIDExOTg5NiwgMCwgNzgwMSwgNjU1NzgsIDE5NDgzOSwgMTI5MTUsIDQzOTY4LCAzMjk3LCA5Njk5LCAxOTQ5NTUsIDExMzUsIAotICAgIDAsIDAsIDEyODUyNSwgMTk5NSwgNjcyMiwgOTgzOTE2LCAwLCAyNTUyLCA0MTU0NiwgNjAsIDY4Mzk0LCA4NjQ5LCA0MTU0OSwgCi0gICAgNzg0OTYsIDk4MzMxOSwgMCwgNjY4MiwgMCwgNzg2NzksIDY0NzEwLCA0MTU0NywgOTgzNjIxLCAyMDEzLCAxMjgyOTEsIAotICAgIDc4NTMwLCA3ODUzMiwgNzg1MjgsIDc4NTI5LCAxMjgzMiwgNzg0OTMsIDgwODEsIDgzNjIsIDM1MzcsIDExOTkwOCwgOTEzNywgCi0gICAgNzE1NSwgODk5OSwgMCwgNzg1MzMsIDM0NjYsIDAsIDAsIDE5OTYsIDAsIDM0NTMsIDYyODIsIDAsIDIwMDIsIDIwMDAsIAotICAgIDEyMDE3NSwgNTM3LCAwLCA0MTc5LCA2NTExOSwgMTk5OCwgMCwgMTg0MiwgMCwgOTI2NzQsIDk2MjgsIDY4NDQ2LCAxMjA4MSwgCi0gICAgOTgyNiwgNjQ1MDIsIDE3NjcsIDAsIDAsIDAsIDEyMDIwMSwgOTgzNjM3LCAwLCAwLCAzMDU5LCA0NDAyNCwgMTIwMjA0LCAKLSAgICAxMTk5NTMsIDkyNjkzLCAwLCAwLCA5MjQ1MiwgNDEwMCwgOTIwLCAxODExLCAxMzU1LCAwLCAwLCAzNTkyLCAxMDA3OCwgMCwgCi0gICAgMCwgMCwgODU5MiwgNjU4NzAsIDY4MTY0LCAxMjg3OTIsIDEwNzQyLCAwLCA0MjkxOCwgMTk5NCwgOTI4MSwgMzI5NiwgCi0gICAgMTI4NjUsIDE5OTcsIDE4OTUsIAorICAgIDEyMDcyMCwgNjcwOCwgMTA1MzUsIDk4MzYyNywgNjgyMTgsIDU1Mjc0LCAyMDA4LCA2NDAzMSwgNjQwMzAsIDI5NCwgCisgICAgNDE4NzQsIDAsIDEyNjk5MSwgNjU5MjksIDAsIDAsIDAsIDAsIDY0MDI4LCA4MTQ2LCA2NDAyNiwgNDE3ODgsIDE5NDg0NCwgCisgICAgMCwgNDM1MSwgNjM0MywgNDMyNDcsIDExOTg4OCwgMCwgMTE5ODg2LCAxMTk4OTEsIDExOTg5MiwgMTE5ODg5LCAxMTQzMywgCisgICAgMTE5ODk1LCAxMTk4OTYsIDAsIDc4MDEsIDY1NTc4LCAxOTQ4MzksIDEyOTE1LCA0Mzk2OCwgMzI5NywgOTY5OSwgMTk0OTU1LCAKKyAgICAxMTM1LCAwLCAwLCAxMjg1MjUsIDE5OTUsIDY3MjIsIDk4MzkyNSwgMCwgMjU1MiwgNDE1NDYsIDYwLCA2ODM5NCwgODY0OSwgCisgICAgNDE1NDksIDc4NDk2LCA5ODMzMjcsIDAsIDY2ODIsIDAsIDc4Njc5LCA2NDcxMCwgNDE1NDcsIDk4MzYzMCwgMjAxMywgCisgICAgMTI4MjkxLCA3ODUzMCwgNzg1MzIsIDc4NTI4LCA3ODUyOSwgMTI4MzIsIDc4NDkzLCA4MDgxLCA4MzYyLCAzNTM3LCAKKyAgICAxMTk5MDgsIDkxMzcsIDcxNTUsIDg5OTksIDAsIDc4NTMzLCAzNDY2LCAwLCAwLCAxOTk2LCAwLCAzNDUzLCA2MjgyLCAwLCAKKyAgICAyMDAyLCAyMDAwLCAxMjAxNzUsIDUzNywgMCwgNDE3OSwgNjUxMTksIDE5OTgsIDAsIDE4NDIsIDAsIDkyNjc0LCA5NjI4LCAKKyAgICA2ODQ0NiwgMTIwODEsIDk4MjYsIDY0NTAyLCAxNzY3LCAwLCAwLCAwLCAxMjAyMDEsIDk4MzY0NiwgMCwgMCwgMzA1OSwgCisgICAgNDQwMjQsIDEyMDIwNCwgMTE5OTUzLCA5MjY5MywgMCwgMCwgOTI0NTIsIDQxMDAsIDkyMCwgMTgxMSwgMTM1NSwgMCwgMCwgCisgICAgMzU5MiwgMTAwNzgsIDAsIDAsIDAsIDg1OTIsIDY1ODcwLCA2ODE2NCwgMTI4NzkyLCAxMDc0MiwgMCwgNDI5MTgsIDE5OTQsIAorICAgIDkyODEsIDMyOTYsIDEyODY1LCAxOTk3LCAxODk1LCAKIH07CiAKICNkZWZpbmUgY29kZV9tYWdpYyA0NwpAQCAtMTk4MTksNyArMTk4MzksNyBAQAogI2RlZmluZSBjb2RlX3BvbHkgMzI3NzEKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhbGlhc2VzX3N0YXJ0ID0gMHhmMDAwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYWxpYXNlc19lbmQgPSAweGYwMWMxOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBhbGlhc2VzX2VuZCA9IDB4ZjAxYzk7CiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVfYWxpYXNlc1tdID0gewogICAgIDB4MDAwMCwKICAgICAweDAwMDAsCkBAIC0xOTk4Miw2ICsyMDAwMiw4IEBACiAgICAgMHgwMUEyLAogICAgIDB4MDFBMywKICAgICAweDAzNEYsCisgICAgMHgwNjFDLAorICAgIDB4MDcwOSwKICAgICAweDBDREUsCiAgICAgMHgwRTlELAogICAgIDB4MEU5RiwKQEAgLTIwMDA1LDYgKzIwMDI3LDEwIEBACiAgICAgMHgyMDJGLAogICAgIDB4MjA1RiwKICAgICAweDIwNjAsCisgICAgMHgyMDY2LAorICAgIDB4MjA2NywKKyAgICAweDIwNjgsCisgICAgMHgyMDY5LAogICAgIDB4MjExOCwKICAgICAweDI0NDgsCiAgICAgMHgyNDQ5LApAQCAtMjAwMjksNiArMjAwNTUsOCBAQAogICAgIDB4RkVGRiwKICAgICAweEZFRkYsCiAgICAgMHhGRUZGLAorICAgIDB4MTIyRDQsCisgICAgMHgxMjJENSwKICAgICAweDFEMEM1LAogICAgIDB4RTAxMDAsCiAgICAgMHhFMDEwMSwKQEAgLTIwMjc4LDcgKzIwMzA2LDcgQEAKIH0gbmFtZWRfc2VxdWVuY2U7CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZWRfc2VxdWVuY2VzX3N0YXJ0ID0gMHhmMDIwMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbmFtZWRfc2VxdWVuY2VzX2VuZCA9IDB4ZjAzYTU7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5hbWVkX3NlcXVlbmNlc19lbmQgPSAweGYwM2FlOwogc3RhdGljIGNvbnN0IG5hbWVkX3NlcXVlbmNlIG5hbWVkX3NlcXVlbmNlc1tdID0gewogICAgIHsyLCB7MHgwMTAwLCAweDAzMDB9fSwKICAgICB7MiwgezB4MDEwMSwgMHgwMzAwfX0sCkBAIC0yMDM0OSw2ICsyMDM3NywxNSBAQAogICAgIHsyLCB7MHgwMjU5LCAweDAzMDF9fSwKICAgICB7MiwgezB4MDI1QSwgMHgwMzAwfX0sCiAgICAgezIsIHsweDAyNUEsIDB4MDMwMX19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2Mjd9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNjQ4fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDY0OX19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2QzZ9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkM3fX0sCisgICAgezIsIHsweDA2MjYsIDB4MDZDOH19LAorICAgIHsyLCB7MHgwNjI2LCAweDA2RDB9fSwKKyAgICB7MiwgezB4MDYyNiwgMHgwNkQ1fX0sCisgICAgezIsIHsweDA2NDYsIDB4MDZBOX19LAogICAgIHszLCB7MHgwOTk1LCAweDA5Q0QsIDB4MDlCN319LAogICAgIHsyLCB7MHgwQjk1LCAweDBCQ0R9fSwKICAgICB7MiwgezB4MEI5OSwgMHgwQkNEfX0sCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3h4bGltaXRlZC5jIGIvTW9kdWxlcy94eGxpbWl0ZWQuYwppbmRleCA2NjFiNmUyLi5lZWNkYWI5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3h4bGltaXRlZC5jCisrKyBiL01vZHVsZXMveHhsaW1pdGVkLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIFh4b19kZWFsbG9jKFh4b09iamVjdCAqc2VsZikKIHsKICAgICBQeV9YREVDUkVGKHNlbGYtPnhfYXR0cik7Ci0gICAgUHlPYmplY3RfRGVsKHNlbGYpOworICAgICgoZnJlZWZ1bmMpUHlUeXBlX0dldFNsb3QoUHlfVFlQRShzZWxmKSwgUHlfdHBfZnJlZSkpKHNlbGYpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96aXBpbXBvcnQuYyBiL01vZHVsZXMvemlwaW1wb3J0LmMKaW5kZXggZGFkNjk5ZS4uNDU5NGRkNCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96aXBpbXBvcnQuYworKysgYi9Nb2R1bGVzL3ppcGltcG9ydC5jCkBAIC0xNCw2ICsxNCwxMCBAQAogICAgIGludCB0eXBlOwogfTsKIAorI2lmZGVmIEFMVFNFUAorX1B5X0lERU5USUZJRVIocmVwbGFjZSk7CisjZW5kaWYKKwogLyogemlwX3NlYXJjaG9yZGVyIGRlZmluZXMgaG93IHdlIHNlYXJjaCBmb3IgYSBtb2R1bGUgaW4gdGhlIFppcAogICAgYXJjaGl2ZTogd2UgZmlyc3Qgc2VhcmNoIGZvciBhIHBhY2thZ2UgX19pbml0X18sIHRoZW4gZm9yCiAgICBub24tcGFja2FnZSAucHljLCAucHlvIGFuZCAucHkgZW50cmllcy4gVGhlIC5weWMgYW5kIC5weW8gZW50cmllcwpAQCAtNjYsOSArNzAsNiBAQAogICAgIFB5T2JqZWN0ICpwYXRoLCAqZmlsZXMsICp0bXA7CiAgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTDsKICAgICBQeV9zc2l6ZV90IGxlbiwgZmxlbjsKLSNpZmRlZiBBTFRTRVAKLSAgICBfUHlfSURFTlRJRklFUihyZXBsYWNlKTsKLSNlbmRpZgogCiAgICAgaWYgKCFfUHlBcmdfTm9LZXl3b3JkcygiemlwaW1wb3J0ZXIoKSIsIGt3ZHMpKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0xMTcsNiArMTE4LDggQEAKICAgICAgICAgaWYgKGZsZW4gPT0gLTEpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHBhdGgsIDAsIGZsZW4pOworICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhaaXBJbXBvcnRFcnJvciwgIm5vdCBhIFppcCBmaWxlIik7CkBAIC0yMzAsNyArMjMzLDcgQEAKICAgICBQeV9zc2l6ZV90IGxlbjsKIAogICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHByZWZpeCkgKyBQeVVuaWNvZGVfR0VUX0xFTkdUSChuYW1lKSArIDE7Ci0gICAgcCA9IGJ1ZiA9IFB5TWVtX01hbGxvYyhzaXplb2YoUHlfVUNTNCkgKiBsZW4pOworICAgIHAgPSBidWYgPSBQeU1lbV9OZXcoUHlfVUNTNCwgbGVuKTsKICAgICBpZiAoYnVmID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00NjksMTAgKzQ3MiwxMyBAQAogICAgIGlmIChpc3BhY2thZ2UpIHsKICAgICAgICAgLyogYWRkIF9fcGF0aF9fIHRvIHRoZSBtb2R1bGUgKmJlZm9yZSogdGhlIGNvZGUgZ2V0cwogICAgICAgICAgICBleGVjdXRlZCAqLwotICAgICAgICBQeU9iamVjdCAqcGtncGF0aCwgKmZ1bGxwYXRoOwotICAgICAgICBQeU9iamVjdCAqc3VibmFtZSA9IGdldF9zdWJuYW1lKGZ1bGxuYW1lKTsKKyAgICAgICAgUHlPYmplY3QgKnBrZ3BhdGgsICpmdWxscGF0aCwgKnN1Ym5hbWU7CiAgICAgICAgIGludCBlcnI7CiAKKyAgICAgICAgc3VibmFtZSA9IGdldF9zdWJuYW1lKGZ1bGxuYW1lKTsKKyAgICAgICAgaWYgKHN1Ym5hbWUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgZnVsbHBhdGggPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJVUlYyVVJVUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5hcmNoaXZlLCBTRVAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnByZWZpeCwgc3VibmFtZSk7CkBAIC01NTQsOSArNTYwLDYgQEAKIHsKICAgICBaaXBJbXBvcnRlciAqc2VsZiA9IChaaXBJbXBvcnRlciAqKW9iajsKICAgICBQeU9iamVjdCAqcGF0aCwgKmtleTsKLSNpZmRlZiBBTFRTRVAKLSAgICBfUHlfSURFTlRJRklFUihyZXBsYWNlKTsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICp0b2NfZW50cnk7CiAgICAgUHlfc3NpemVfdCBwYXRoX3N0YXJ0LCBwYXRoX2xlbiwgbGVuOwogCkBAIC04NjIsNiArODY1LDcgQEAKICAgICBsb25nIGwsIGNvdW50OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBjaGFyIG5hbWVbTUFYUEFUSExFTiArIDVdOworICAgIGNoYXIgZHVtbXlbOF07IC8qIEJ1ZmZlciB0byByZWFkIHVudXNlZCBoZWFkZXIgdmFsdWVzIGludG8gKi8KICAgICBQeU9iamVjdCAqbmFtZW9iaiA9IE5VTEw7CiAgICAgY2hhciAqcCwgZW5kb2ZfY2VudHJhbF9kaXJbMjJdOwogICAgIFB5X3NzaXplX3QgYXJjX29mZnNldDsgIC8qIEFic29sdXRlIG9mZnNldCB0byBzdGFydCBvZiB0aGUgemlwLWFyY2hpdmUuICovCkBAIC04NjksNyArODczLDcgQEAKICAgICBjb25zdCBjaGFyICpjaGFyc2V0OwogICAgIGludCBib290c3RyYXA7CiAKLSAgICBmcCA9IF9QeV9mb3BlbihhcmNoaXZlLCAicmIiKTsKKyAgICBmcCA9IF9QeV9mb3Blbl9vYmooYXJjaGl2ZSwgInJiIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFppcEltcG9ydEVycm9yLCAiY2FuJ3Qgb3BlbiBaaXAgZmlsZTogJVIiLCBhcmNoaXZlKTsKQEAgLTkwNSwxNyArOTA5LDI1IEBACiAKICAgICAvKiBTdGFydCBvZiBDZW50cmFsIERpcmVjdG9yeSAqLwogICAgIGNvdW50ID0gMDsKKyAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQsIDApID09IC0xKQorICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CiAgICAgZm9yICg7OykgewogICAgICAgICBQeU9iamVjdCAqdDsKICAgICAgICAgaW50IGVycjsKIAotICAgICAgICBpZiAoZnNlZWsoZnAsIGhlYWRlcl9vZmZzZXQsIDApID09IC0xKSAgLyogU3RhcnQgb2YgZmlsZSBoZWFkZXIgKi8KLSAgICAgICAgICAgIGdvdG8gZnNlZWtfZXJyb3I7CisgICAgICAgIC8qIFN0YXJ0IG9mIGZpbGUgaGVhZGVyICovCiAgICAgICAgIGwgPSBQeU1hcnNoYWxfUmVhZExvbmdGcm9tRmlsZShmcCk7CisgICAgICAgIGlmIChsID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBpZiAobCAhPSAweDAyMDE0QjUwKQogICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAvKiBCYWQ6IENlbnRyYWwgRGlyIEZpbGUgSGVhZGVyICovCi0gICAgICAgIGlmIChmc2VlayhmcCwgaGVhZGVyX29mZnNldCArIDgsIDApID09IC0xKQotICAgICAgICAgICAgZ290byBmc2Vla19lcnJvcjsKKworICAgICAgICAvKiBPbiBXaW5kb3dzLCBjYWxsaW5nIGZzZWVrIHRvIHNraXAgb3ZlciB0aGUgZmllbGRzIHdlIGRvbid0IHVzZSBpcworICAgICAgICBzbG93ZXIgdGhhbiByZWFkaW5nIHRoZSBkYXRhIGludG8gYSBkdW1teSBidWZmZXIgYmVjYXVzZSBmc2VlayBmbHVzaGVzCisgICAgICAgIHN0ZGlvJ3MgaW50ZXJuYWwgYnVmZmVycy4gU2VlIGlzc3VlICM4NzQ1LiAqLworICAgICAgICBpZiAoZnJlYWQoZHVtbXksIDEsIDQsIGZwKSAhPSA0KSAvKiBTa2lwIHVudXNlZCBmaWVsZHMsIGF2b2lkIGZzZWVrICovCisgICAgICAgICAgICBnb3RvIGZpbGVfZXJyb3I7CisKICAgICAgICAgZmxhZ3MgPSAodW5zaWduZWQgc2hvcnQpUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKICAgICAgICAgY29tcHJlc3MgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwogICAgICAgICB0aW1lID0gUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKQEAgLTkyNCwxMiArOTM2LDE1IEBACiAgICAgICAgIGRhdGFfc2l6ZSA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKTsKICAgICAgICAgZmlsZV9zaXplID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwogICAgICAgICBuYW1lX3NpemUgPSBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApOwotICAgICAgICBoZWFkZXJfc2l6ZSA9IDQ2ICsgbmFtZV9zaXplICsKKyAgICAgICAgaGVhZGVyX3NpemUgPSBuYW1lX3NpemUgKwogICAgICAgICAgICBQeU1hcnNoYWxfUmVhZFNob3J0RnJvbUZpbGUoZnApICsKICAgICAgICAgICAgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKTsKLSAgICAgICAgaWYgKGZzZWVrKGZwLCBoZWFkZXJfb2Zmc2V0ICsgNDIsIDApID09IC0xKQotICAgICAgICAgICAgZ290byBmc2Vla19lcnJvcjsKKyAgICAgICAgaWYgKGZyZWFkKGR1bW15LCAxLCA4LCBmcCkgIT0gOCkgLyogU2tpcCB1bnVzZWQgZmllbGRzLCBhdm9pZCBmc2VlayAqLworICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOwogICAgICAgICBmaWxlX29mZnNldCA9IFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKGZwKSArIGFyY19vZmZzZXQ7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKwogICAgICAgICBpZiAobmFtZV9zaXplID4gTUFYUEFUSExFTikKICAgICAgICAgICAgIG5hbWVfc2l6ZSA9IE1BWFBBVEhMRU47CiAKQEAgLTk0MSw3ICs5NTYsOSBAQAogICAgICAgICAgICAgcCsrOwogICAgICAgICB9CiAgICAgICAgICpwID0gMDsgICAgICAgICAvKiBBZGQgdGVybWluYXRpbmcgbnVsbCBieXRlICovCi0gICAgICAgIGhlYWRlcl9vZmZzZXQgKz0gaGVhZGVyX3NpemU7CisgICAgICAgIGZvciAoOyBpIDwgaGVhZGVyX3NpemU7IGkrKykgLyogU2tpcCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyICovCisgICAgICAgICAgICBpZihnZXRjKGZwKSA9PSBFT0YpIC8qIEF2b2lkIGZzZWVrICovCisgICAgICAgICAgICAgICAgZ290byBmaWxlX2Vycm9yOwogCiAgICAgICAgIGJvb3RzdHJhcCA9IDA7CiAgICAgICAgIGlmIChmbGFncyAmIDB4MDgwMCkKQEAgLTk4OCw3ICsxMDA1LDcgQEAKICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIHppcGltcG9ydDogZm91bmQgJWxkIG5hbWVzIGluICVSXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnQsIGFyY2hpdmUpOwogICAgIHJldHVybiBmaWxlczsKLWZzZWVrX2Vycm9yOgorZmlsZV9lcnJvcjoKICAgICBmY2xvc2UoZnApOwogICAgIFB5X1hERUNSRUYoZmlsZXMpOwogICAgIFB5X1hERUNSRUYobmFtZW9iaik7CkBAIC0xMDU0LDggKzEwNzEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRhdGUsICZjcmMpKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICBpZiAoZGF0YV9zaXplIDwgMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJuZWdhdGl2ZSBkYXRhIHNpemUiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCi0gICAgZnAgPSBfUHlfZm9wZW4oYXJjaGl2ZSwgInJiIik7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGFyY2hpdmUsICJyYiIpOwogICAgIGlmICghZnApIHsKICAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0lPRXJyb3IsCkBAIC0xMDczLDkgKzEwOTQsMTAgQEAKICAgICBsID0gUHlNYXJzaGFsX1JlYWRMb25nRnJvbUZpbGUoZnApOwogICAgIGlmIChsICE9IDB4MDQwMzRCNTApIHsKICAgICAgICAgLyogQmFkOiBMb2NhbCBGaWxlIEhlYWRlciAqLwotICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiYmFkIGxvY2FsIGZpbGUgaGVhZGVyIGluICVVIiwKLSAgICAgICAgICAgICAgICAgICAgIGFyY2hpdmUpOworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBsb2NhbCBmaWxlIGhlYWRlciBpbiAlVSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJjaGl2ZSk7CiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTEwODcsNiArMTEwOSwxMCBAQAogCiAgICAgbCA9IDMwICsgUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlKGZwKSArCiAgICAgICAgIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShmcCk7ICAgICAgICAvKiBsb2NhbCBoZWFkZXIgc2l6ZSAqLworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBmaWxlX29mZnNldCArPSBsOyAgICAgICAgICAgLyogU3RhcnQgb2YgZmlsZSBkYXRhICovCiAKICAgICBpZiAoZGF0YV9zaXplID4gTE9OR19NQVggLSAxKSB7CkBAIC0xMTEwLDYgKzExMzYsNyBAQAogICAgICAgICBieXRlc19yZWFkID0gZnJlYWQoYnVmLCAxLCBkYXRhX3NpemUsIGZwKTsKICAgICB9IGVsc2UgewogICAgICAgICBmY2xvc2UoZnApOworICAgICAgICBQeV9ERUNSRUYocmF3X2RhdGEpOwogICAgICAgICBQeUVycl9Gb3JtYXQoWmlwSW1wb3J0RXJyb3IsICJjYW4ndCByZWFkIFppcCBmaWxlOiAlUiIsIGFyY2hpdmUpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMjU0LDcgKzEyODEsNyBAQAogfQogCiAvKiBHaXZlbiBhIHN0cmluZyBidWZmZXIgY29udGFpbmluZyBQeXRob24gc291cmNlIGNvZGUsIGNvbXBpbGUgaXQKLSAgIHJldHVybiBhbmQgcmV0dXJuIGEgY29kZSBvYmplY3QgYXMgYSBuZXcgcmVmZXJlbmNlLiAqLworICAgYW5kIHJldHVybiBhIGNvZGUgb2JqZWN0IGFzIGEgbmV3IHJlZmVyZW5jZS4gKi8KIHN0YXRpYyBQeU9iamVjdCAqCiBjb21waWxlX3NvdXJjZShQeU9iamVjdCAqcGF0aG5hbWUsIFB5T2JqZWN0ICpzb3VyY2UpCiB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nIGIvTW9kdWxlcy96bGliL0NoYW5nZUxvZwppbmRleCBmMzEwYmIwLi5mMjJhYWJhIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvQ2hhbmdlTG9nCisrKyBiL01vZHVsZXMvemxpYi9DaGFuZ2VMb2cKQEAgLTEsMTIgKzEsMjc2IEBACiAKICAgICAgICAgICAgICAgICBDaGFuZ2VMb2cgZmlsZSBmb3IgemxpYgogCitDaGFuZ2VzIGluIDEuMi44ICgyOCBBcHIgMjAxMykKKy0gVXBkYXRlIGNvbnRyaWIvbWluaXppcC9pb3dpbjMyLmMgZm9yIFdpbmRvd3MgUlQgW1ZvbGxhbnRdCistIERvIG5vdCBmb3JjZSBaX0NPTlNUIGZvciBDKysKKy0gQ2xlYW4gdXAgY29udHJpYi92c3R1ZGlvIFtSb6ddCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gemxpYi5oCistIEZpeCBtaXhlZCBsaW5lIGVuZGluZ3MgaW4gY29udHJpYi92c3R1ZGlvCisKK0NoYW5nZXMgaW4gMS4yLjcuMyAoMTMgQXByIDIwMTMpCistIEZpeCB2ZXJzaW9uIG51bWJlcnMgYW5kIERMTCBuYW1lcyBpbiBjb250cmliL3ZzdHVkaW8vKi96bGliLnJjCisKK0NoYW5nZXMgaW4gMS4yLjcuMiAoMTMgQXByIDIwMTMpCistIENoYW5nZSBjaGVjayBmb3IgYSBmb3VyLWJ5dGUgdHlwZSBiYWNrIHRvIGhleGFkZWNpbWFsCistIEZpeCB0eXBvIGluIHdpbjMyL01ha2VmaWxlLm1zYworLSBBZGQgY2FzdHMgaW4gZ3p3cml0ZS5jIGZvciBwb2ludGVyIGRpZmZlcmVuY2VzCisKK0NoYW5nZXMgaW4gMS4yLjcuMSAoMjQgTWFyIDIwMTMpCistIFJlcGxhY2UgdXNlIG9mIHVuc2FmZSBzdHJpbmcgZnVuY3Rpb25zIHdpdGggc25wcmludGYgaWYgYXZhaWxhYmxlCistIEF2b2lkIGluY2x1ZGluZyBzdGRkZWYuaCBvbiBXaW5kb3dzIGZvciBaX1NPTE8gY29tcGlsZSBbTmllc3NpbmtdCistIEZpeCBnemdldGMgdW5kZWZpbmUgd2hlbiBaX1BSRUZJWCBzZXQgW1R1cmtdCistIEVsaW1pbmF0ZSB1c2Ugb2YgbWt0ZW1wIGluIE1ha2VmaWxlIChub3QgYWx3YXlzIGF2YWlsYWJsZSkKKy0gRml4IGJ1ZyBpbiAnRicgbW9kZSBmb3IgZ3pvcGVuKCkKKy0gQWRkIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgZnVuY3Rpb24KKy0gQ29ycmVjdCBjb21tZW50IGluIGRlZmxhdGUuaAorLSBVc2UgX3NucHJpbnRmIGZvciBzbnByaW50ZiBpbiBNaWNyb3NvZnQgQworLSBPbiBEYXJ3aW4sIG9ubHkgdXNlIC91c3IvYmluL2xpYnRvb2wgaWYgbGlidG9vbCBpcyBub3QgQXBwbGUKKy0gRGVsZXRlICItLXZlcnNpb24iIGZpbGUgaWYgY3JlYXRlZCBieSAiYXIgLS12ZXJzaW9uIiBbUmljaGFyZCBHLl0KKy0gRml4IGNvbmZpZ3VyZSBjaGVjayBmb3IgdmVyYWNpdHkgb2YgY29tcGlsZXIgZXJyb3IgcmV0dXJuIGNvZGVzCistIEZpeCBDTWFrZSBjb21waWxhdGlvbiBvZiBzdGF0aWMgbGliIGZvciBNU1ZDMjAxMCB4NjQKKy0gUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBpbiBpbmZiYWNrOS5jCistIEZpeCBhcmd1bWVudCBjaGVja3MgaW4gZ3psb2dfY29tcHJlc3MoKSBhbmQgZ3psb2dfd3JpdGUoKQorLSBDbGVhbiB1cCB0aGUgdXNhZ2Ugb2Ygel9jb25zdCBhbmQgcmVzcGVjdCBjb25zdCB1c2FnZSB3aXRoaW4gemxpYgorLSBDbGVhbiB1cCBleGFtcGxlcy9nemxvZy5bY2hdIGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudCB0eXBlcworLSBBdm9pZCBzaGlmdCBlcXVhbCB0byBiaXRzIGluIHR5cGUgKGNhdXNlZCBlbmRsZXNzIGxvb3ApCistIEZpeCB1bmludGlhbGl6ZWQgdmFsdWUgYnVnIGluIGd6cHV0YygpIGludHJvZHVjZWQgYnkgY29uc3QgcGF0Y2hlcworLSBGaXggbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IgaW4gZXhhbXBsZXMvenJhbi5jIFtOb3JdCistIEZpeCBidWcgd2hlcmUgZ3pvcGVuKCksIGd6Y2xvc2UoKSB3b3VsZCB3cml0ZSBhbiBlbXB0eSBmaWxlCistIEZpeCBidWcgaW4gZ3pjbG9zZSgpIHdoZW4gZ3p3cml0ZSgpIHJ1bnMgb3V0IG9mIG1lbW9yeQorLSBDaGVjayBmb3IgaW5wdXQgYnVmZmVyIG1hbGxvYyBmYWlsdXJlIGluIGV4YW1wbGVzL2d6YXBwZW5kLmMKKy0gQWRkIG5vdGUgdG8gY29udHJpYi9ibGFzdCB0byB1c2UgYmluYXJ5IG1vZGUgaW4gc3RkaW8KKy0gRml4IGNvbXBhcmlzb25zIG9mIGRpZmZlcmVudGx5IHNpZ25lZCBpbnRlZ2VycyBpbiBjb250cmliL2JsYXN0CistIENoZWNrIGZvciBpbnZhbGlkIGNvZGUgbGVuZ3RoIGNvZGVzIGluIGNvbnRyaWIvcHVmZgorLSBGaXggc2VyaW91cyBidXQgdmVyeSByYXJlIGRlY29tcHJlc3Npb24gYnVnIGluIGluZnRyZWVzLmMKKy0gVXBkYXRlIGluZmxhdGVCYWNrKCkgY29tbWVudHMsIHNpbmNlIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyCistIFVzZSB1bmRlcnNjb3JlZCBJL08gZnVuY3Rpb24gbmFtZXMgZm9yIFdJTkFQSV9GQU1JTFkKKy0gQWRkIF90cl9mbHVzaF9iaXRzIHRvIHRoZSBleHRlcm5hbCBzeW1ib2xzIHByZWZpeGVkIGJ5IC0tenByZWZpeAorLSBBZGQgY29udHJpYi92c3R1ZGlvL3ZjMTAgcHJlLWJ1aWxkIHN0ZXAgZm9yIHN0YXRpYyBvbmx5CistIFF1b3RlIC0tdmVyc2lvbi1zY3JpcHQgYXJndW1lbnQgaW4gQ01ha2VMaXN0cy50eHQKKy0gRG9uJ3Qgc3BlY2lmeSAtLXZlcnNpb24tc2NyaXB0IG9uIEFwcGxlIHBsYXRmb3JtcyBpbiBDTWFrZUxpc3RzLnR4dAorLSBGaXggY2FzdGluZyBlcnJvciBpbiBjb250cmliL3Rlc3R6bGliL3Rlc3R6bGliLmMKKy0gRml4IHR5cGVzIGluIGNvbnRyaWIvbWluaXppcCB0byBtYXRjaCByZXN1bHQgb2YgZ2V0X2NyY190YWJsZSgpCistIFNpbXBsaWZ5IGNvbnRyaWIvdnN0dWRpby92YzEwIHdpdGggJ2QnIHN1ZmZpeAorLSBBZGQgVE9QIHN1cHBvcnQgdG8gd2luMzIvTWFrZWZpbGUubXNjCistIFN1cG9ydCBpNjg2IGFuZCBhbWQ2NCBhc3NlbWJsZXIgYnVpbGRzIGluIENNYWtlTGlzdHMudHh0CistIEZpeCB0eXBvcyBpbiB0aGUgdXNlIG9mIF9MQVJHRUZJTEU2NF9TT1VSQ0UgaW4gemNvbmYuaAorLSBBZGQgdmMxMSBhbmQgdmMxMiBidWlsZCBmaWxlcyB0byBjb250cmliL3ZzdHVkaW8KKy0gQWRkIGd6dnByaW50ZigpIGFzIGFuIHVuZG9jdW1lbnRlZCBmdW5jdGlvbiBpbiB6bGliCistIEZpeCBjb25maWd1cmUgZm9yIFN1biBzaGVsbAorLSBSZW1vdmUgcnVudGltZSBjaGVjayBpbiBjb25maWd1cmUgZm9yIGZvdXItYnl0ZSBpbnRlZ2VyIHR5cGUKKy0gQWRkIGNhc3RzIGFuZCBjb25zdHMgdG8gZWFzZSB1c2VyIGNvbnZlcnNpb24gdG8gQysrCistIEFkZCBtYW4gcGFnZXMgZm9yIG1pbml6aXAgYW5kIG1pbml1bnppcAorLSBJbiBNYWtlZmlsZSB1bmluc3RhbGwsIGRvbid0IHJtIGlmIHByZWNlZGluZyBjZCBmYWlscworLSBEbyBub3QgcmV0dXJuIFpfQlVGX0VSUk9SIGlmIGRlZmxhdGVQYXJhbSgpIGhhcyBub3RoaW5nIHRvIHdyaXRlCisKK0NoYW5nZXMgaW4gMS4yLjcgKDIgTWF5IDIwMTIpCistIFJlcGxhY2UgdXNlIG9mIG1lbW1vdmUoKSB3aXRoIGEgc2ltcGxlIGNvcHkgZm9yIHBvcnRhYmlsaXR5CistIFRlc3QgZm9yIGV4aXN0ZW5jZSBvZiBzdHJlcnJvcgorLSBSZXN0b3JlIGd6Z2V0Y18gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCAxLjIuNgorLSBGaXggYnVpbGQgd2l0aCBub24tR05VIG1ha2Ugb24gU29sYXJpcworLSBSZXF1aXJlIGdjYyA0LjAgb3IgbGF0ZXIgb24gTWFjIE9TIFggdG8gdXNlIHRoZSBoaWRkZW4gYXR0cmlidXRlCistIEluY2x1ZGUgdW5pc3RkLmggZm9yIFdhdGNvbSBDCistIFVzZSBfX1dBVENPTUNfXyBpbnN0ZWFkIG9mIF9fV0FUQ09NX18KKy0gRG8gbm90IHVzZSB0aGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaWYgTk9fVklaIGRlZmluZWQKKy0gSW1wcm92ZSB0aGUgZGV0ZWN0aW9uIG9mIG5vIGhpZGRlbiB2aXNpYmlsaXR5IGF0dHJpYnV0ZQorLSBBdm9pZCB1c2luZyBfX2ludDY0IGZvciBnY2Mgb3Igc29sbyBjb21waWxhdGlvbgorLSBDYXN0IHRvIGNoYXIgKiBpbiBnenByaW50ZiB0byBhdm9pZCB3YXJuaW5ncyBbWmluc2VyXQorLSBGaXggbWFrZV92bXMuY29tIGZvciBWQVggW1ppbnNlcl0KKy0gRG9uJ3QgdXNlIGxpYnJhcnkgb3IgYnVpbHQtaW4gYnl0ZSBzd2FwcworLSBTaW1wbGlmeSB0ZXN0IGFuZCB1c2Ugb2YgZ2NjIGhpZGRlbiBhdHRyaWJ1dGUKKy0gRml4IGJ1ZyBpbiBnemNsb3NlX3coKSB3aGVuIGd6d3JpdGUoKSBmYWlscyB0byBhbGxvY2F0ZSBtZW1vcnkKKy0gQWRkICJ4IiAoT19FWENMKSBhbmQgImUiIChPX0NMT0VYRUMpIG1vZGVzIHN1cHBvcnQgdG8gZ3pvcGVuKCkKKy0gRml4IGJ1ZyBpbiB0ZXN0L21pbmlnemlwLmMgZm9yIGNvbmZpZ3VyZSAtLXNvbG8KKy0gRml4IGNvbnRyaWIvdnN0dWRpbyBwcm9qZWN0IGxpbmsgZXJyb3JzIFtNb2hhbmF0aGFzXQorLSBBZGQgYWJpbGl0eSB0byBjaG9vc2UgdGhlIGJ1aWxkZXIgaW4gbWFrZV92bXMuY29tIFtTY2h3ZWRhXQorLSBBZGQgREVTVERJUiBzdXBwb3J0IHRvIG1pbmd3MzIgd2luMzIvTWFrZWZpbGUuZ2NjCistIEZpeCBjb21tZW50cyBpbiB3aW4zMi9NYWtlZmlsZS5nY2MgZm9yIHByb3BlciB1c2FnZQorLSBBbGxvdyBvdmVycmlkaW5nIHRoZSBkZWZhdWx0IGluc3RhbGwgbG9jYXRpb25zIGZvciBjbWFrZQorLSBHZW5lcmF0ZSBhbmQgaW5zdGFsbCB0aGUgcGtnLWNvbmZpZyBmaWxlIHdpdGggY21ha2UKKy0gQnVpbGQgYm90aCBhIHN0YXRpYyBhbmQgYSBzaGFyZWQgdmVyc2lvbiBvZiB6bGliIHdpdGggY21ha2UKKy0gSW5jbHVkZSB2ZXJzaW9uIHN5bWJvbHMgZm9yIGNtYWtlIGJ1aWxkcworLSBJZiB1c2luZyBjbWFrZSB3aXRoIE1TVkMsIGFkZCB0aGUgc291cmNlIGRpcmVjdG9yeSB0byB0aGUgaW5jbHVkZXMKKy0gUmVtb3ZlIHVubmVlZGVkIEVYVFJBX0NGTEFHUyBmcm9tIHdpbjMyL01ha2VmaWxlLmdjYyBbVHJ1dGFdCistIE1vdmUgb2Jzb2xldGUgZW14IG1ha2VmaWxlIHRvIG9sZCBbVHJ1dGFdCistIEFsbG93IHRoZSB1c2Ugb2YgLVd1bmRlZiB3aGVuIGNvbXBpbGluZyBvciB1c2luZyB6bGliCistIEF2b2lkIHRoZSB1c2Ugb2YgdGhlIC11IG9wdGlvbiB3aXRoIG1rdGVtcAorLSBJbXByb3ZlIGluZmxhdGUoKSBkb2N1bWVudGF0aW9uIG9uIHRoZSB1c2Ugb2YgWl9GSU5JU0gKKy0gUmVjb2duaXplIGNsYW5nIGFzIGdjYworLSBBZGQgZ3pvcGVuX3coKSBpbiBXaW5kb3dzIGZvciB3aWRlIGNoYXJhY3RlciBwYXRoIG5hbWVzCistIFJlbmFtZSB6Y29uZi5oIGluIENNYWtlTGlzdHMudHh0IHRvIG1vdmUgaXQgb3V0IG9mIHRoZSB3YXkKKy0gQWRkIHNvdXJjZSBkaXJlY3RvcnkgaW4gQ01ha2VMaXN0cy50eHQgZm9yIGJ1aWxkaW5nIGV4YW1wbGVzCistIExvb2sgaW4gYnVpbGQgZGlyZWN0b3J5IGZvciB6bGliLnBjIGluIENNYWtlTGlzdHMudHh0CistIFJlbW92ZSBnemZsYWdzIGZyb20gemxpYnZjLmRlZiBpbiB2YzkgYW5kIHZjMTAKKy0gRml4IGNvbnRyaWIvbWluaXppcCBjb21waWxhdGlvbiBpbiB0aGUgTWluR1cgZW52aXJvbm1lbnQKKy0gVXBkYXRlIC4vY29uZmlndXJlIGZvciBTb2xhcmlzLCBzdXBwb3J0IC0tNjQgW01vb25leV0KKy0gUmVtb3ZlIC1SLiBmcm9tIFNvbGFyaXMgc2hhcmVkIGJ1aWxkIChwb3NzaWJsZSBzZWN1cml0eSBpc3N1ZSkKKy0gQXZvaWQgcmFjZSBjb25kaXRpb24gZm9yIHBhcmFsbGVsIG1ha2UgKC1qKSBydW5uaW5nIGV4YW1wbGUKKy0gRml4IHR5cGUgbWlzbWF0Y2ggYmV0d2VlbiBnZXRfY3JjX3RhYmxlKCkgYW5kIGNyY190YWJsZQorLSBGaXggcGFyc2luZyBvZiB2ZXJzaW9uIHdpdGggIi0iIGluIENNYWtlTGlzdHMudHh0IFtTbmlkZXIsIFppZWdsZXJdCistIEZpeCB0aGUgcGF0aCB0byB6bGliLm1hcCBpbiBDTWFrZUxpc3RzLnR4dAorLSBGb3JjZSB0aGUgbmF0aXZlIGxpYnRvb2wgaW4gTWFjIE9TIFggdG8gYXZvaWQgR05VIGxpYnRvb2wgW0JlZWJlXQorLSBBZGQgaW5zdHJ1Y3Rpb25zIHRvIHdpbjMyL01ha2VmaWxlLmdjYyBmb3Igc2hhcmVkIGluc3RhbGwgW1RvcnJpXQorCitDaGFuZ2VzIGluIDEuMi42LjEgKDEyIEZlYiAyMDEyKQorLSBBdm9pZCB0aGUgdXNlIG9mIHRoZSBPYmplY3RpdmUtQyByZXNlcnZlZCBuYW1lICJpZCIKKy0gSW5jbHVkZSBpby5oIGluIGd6Z3V0cy5oIGZvciBNaWNyb3NvZnQgY29tcGlsZXJzCistIEZpeCBwcm9ibGVtIHdpdGggLi9jb25maWd1cmUgLS1wcmVmaXggYW5kIGd6Z2V0YyBtYWNybworLSBJbmNsdWRlIGd6X2hlYWRlciBkZWZpbml0aW9uIHdoZW4gY29tcGlsaW5nIHpsaWIgc29sbworLSBQdXQgZ3pmbGFncygpIGZ1bmN0aW9uYWxpdHkgYmFjayBpbiB6dXRpbC5jCistIEF2b2lkIGxpYnJhcnkgaGVhZGVyIGluY2x1ZGUgaW4gY3JjMzIuYyBmb3IgWl9TT0xPCistIFVzZSBuYW1lIGluIEdDQ19DTEFTU0lDIGFzIEMgY29tcGlsZXIgZm9yIGNvdmVyYWdlIHRlc3RpbmcsIGlmIHNldAorLSBNaW5vciBjbGVhbnVwIGluIGNvbnRyaWIvbWluaXppcC96aXAuYyBbVm9sbGFudF0KKy0gVXBkYXRlIG1ha2Vfdm1zLmNvbSBbWmluc2VyXQorLSBSZW1vdmUgdW5uZWNlc3NhcnkgZ3pnZXRjXyBmdW5jdGlvbgorLSBVc2Ugb3B0aW1pemVkIGJ5dGUgc3dhcCBvcGVyYXRpb25zIGZvciBNaWNyb3NvZnQgYW5kIEdOVSBbU255ZGVyXQorLSBGaXggbWlub3IgdHlwbyBpbiB6bGliLmggY29tbWVudHMgW1J6ZXNuaW93aWVja2ldCisKK0NoYW5nZXMgaW4gMS4yLjYgKDI5IEphbiAyMDEyKQorLSBVcGRhdGUgdGhlIFBhc2NhbCBpbnRlcmZhY2UgaW4gY29udHJpYi9wYXNjYWwKKy0gRml4IGZ1bmN0aW9uIG51bWJlcnMgZm9yIGd6Z2V0Y18gaW4gemxpYnZjLmRlZiBmaWxlcworLSBGaXggY29uZmlndXJlLmFjIGZvciBjb250cmliL21pbml6aXAgW1NjaGlmZmVyXQorLSBGaXggbGFyZ2UtZW50cnkgZGV0ZWN0aW9uIGluIG1pbml6aXAgb24gNjQtYml0IHN5c3RlbXMgW1NjaGlmZmVyXQorLSBIYXZlIC4vY29uZmlndXJlIHVzZSB0aGUgY29tcGlsZXIgcmV0dXJuIGNvZGUgZm9yIGVycm9yIGluZGljYXRpb24KKy0gRml4IENNYWtlTGlzdHMudHh0IGZvciBjcm9zcyBjb21waWxhdGlvbiBbTWNDbHVyZV0KKy0gRml4IGNvbnRyaWIvbWluaXppcC96aXAuYyBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMgW0RhbHNuZXNdCistIEZpeCBjb21waWxhdGlvbiBvZiBjb250cmliL21pbml6aXAgb24gRnJlZUJTRCBbTWFycXVlel0KKy0gQ29ycmVjdCBzdWdnZXN0ZWQgdXNhZ2VzIGluIHdpbjMyL01ha2VmaWxlLm1zYyBbU2hhY2hhciwgSG9ydmF0aF0KKy0gSW5jbHVkZSBpby5oIGZvciBUdXJibyBDIC8gQm9ybGFuZCBDIG9uIGFsbCBwbGF0Zm9ybXMgW1RydXRhXQorLSBNYWtlIHZlcnNpb24gZXhwbGljaXQgaW4gY29udHJpYi9taW5pemlwL2NvbmZpZ3VyZS5hYyBbQm9zbWFuc10KKy0gQXZvaWQgd2FybmluZyBmb3Igbm8gZW5jcnlwdGlvbiBpbiBjb250cmliL21pbml6aXAvemlwLmMgW1ZvbGxhbnRdCistIE1pbm9yIGNsZWFudXAgdXAgY29udHJpYi9taW5pemlwL3VuemlwLmMgW1ZvbGxhbnRdCistIEZpeCBidWcgd2hlbiBjb21waWxpbmcgbWluaXppcCB3aXRoIEMrKyBbVm9sbGFudF0KKy0gUHJvdGVjdCBmb3IgbG9uZyBuYW1lIGFuZCBleHRyYSBmaWVsZHMgaW4gY29udHJpYi9taW5pemlwIFtWb2xsYW50XQorLSBBdm9pZCBzb21lIHdhcm5pbmdzIGluIGNvbnRyaWIvbWluaXppcCBbVm9sbGFudF0KKy0gQWRkIC1JLi4vLi4gLUwuLi8uLiB0byBDRkxBR1MgZm9yIG1pbml6aXAgYW5kIG1pbml1bnppcAorLSBBZGQgbWlzc2luZyBsaWJzIHRvIG1pbml6aXAgbGlua2VyIGNvbW1hbmQKKy0gQWRkIHN1cHBvcnQgZm9yIFZQQVRIIGJ1aWxkcyBpbiBjb250cmliL21pbml6aXAKKy0gQWRkIGFuIC0tZW5hYmxlLWRlbW9zIG9wdGlvbiB0byBjb250cmliL21pbml6aXAvY29uZmlndXJlCistIEFkZCB0aGUgZ2VuZXJhdGlvbiBvZiBjb25maWd1cmUubG9nIGJ5IC4vY29uZmlndXJlCistIEV4aXQgd2hlbiByZXF1aXJlZCBwYXJhbWV0ZXJzIG5vdCBwcm92aWRlZCB0byB3aW4zMi9NYWtlZmlsZS5nY2MKKy0gSGF2ZSBnenB1dGMgcmV0dXJuIHRoZSBjaGFyYWN0ZXIgd3JpdHRlbiBpbnN0ZWFkIG9mIHRoZSBhcmd1bWVudAorLSBVc2UgdGhlIC1tIG9wdGlvbiBvbiBsZGNvbmZpZyBmb3IgQlNEIHN5c3RlbXMgW1RvYmlhc10KKy0gQ29ycmVjdCBpbiB6bGliLm1hcCB3aGVuIGRlZmxhdGVSZXNldEtlZXAgd2FzIGFkZGVkCisKK0NoYW5nZXMgaW4gMS4yLjUuMyAoMTUgSmFuIDIwMTIpCistIFJlc3RvcmUgZ3pnZXRjIGZ1bmN0aW9uIGZvciBiaW5hcnkgY29tcGF0aWJpbGl0eQorLSBEbyBub3QgdXNlIF9sc2Vla2k2NCB1bmRlciBCb3JsYW5kIEMrKyBbVHJ1dGFdCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5tc2MgdG8gYnVpbGQgdGVzdC8qLmMgW1RydXRhXQorLSBSZW1vdmUgb2xkL3Zpc3VhbGM2IGdpdmVuIENNYWtlZmlsZSBhbmQgb3RoZXIgYWx0ZXJuYXRpdmVzCistIFVwZGF0ZSBBUzQwMCBidWlsZCBmaWxlcyBhbmQgZG9jdW1lbnRhdGlvbiBbTW9ubmVyYXRdCistIFVwZGF0ZSB3aW4zMi9NYWtlZmlsZS5nY2MgdG8gYnVpbGQgdGVzdC8qLmMgW1RydXRhXQorLSBQZXJtaXQgc3Ryb25nZXIgZmx1c2hlcyBhZnRlciBaX0JMT0NLIGZsdXNoZXMKKy0gQXZvaWQgZXh0cmFuZW91cyBlbXB0eSBibG9ja3Mgd2hlbiBkb2luZyBlbXB0eSBmbHVzaGVzCistIFBlcm1pdCBaX05VTEwgYXJndW1lbnRzIHRvIGRlZmxhdGVQZW5kaW5nCistIEFsbG93IGRlZmxhdGVQcmltZSgpIHRvIGluc2VydCBiaXRzIGluIHRoZSBtaWRkbGUgb2YgYSBzdHJlYW0KKy0gUmVtb3ZlIHNlY29uZCBlbXB0eSBzdGF0aWMgYmxvY2sgZm9yIFpfUEFSVElBTF9GTFVTSAorLSBXcml0ZSBvdXQgYWxsIG9mIHRoZSBhdmFpbGFibGUgYml0cyB3aGVuIHVzaW5nIFpfQkxPQ0sKKy0gSW5zZXJ0IHRoZSBmaXJzdCB0d28gc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSBhZnRlciBhIGZsdXNoCisKK0NoYW5nZXMgaW4gMS4yLjUuMiAoMTcgRGVjIDIwMTEpCistIGZpeCBsZCBlcnJvcjogdW5hYmxlIHRvIGZpbmQgdmVyc2lvbiBkZXBlbmRlbmN5ICdaTElCXzEuMi41JworLSB1c2UgcmVsYXRpdmUgc3ltbGlua3MgZm9yIHNoYXJlZCBsaWJzCistIEF2b2lkIHNlYXJjaGluZyBwYXN0IHdpbmRvdyBmb3IgWl9STEUgc3RyYXRlZ3kKKy0gQXNzdXJlIHRoYXQgaGlnaC13YXRlciBtYXJrIGluaXRpYWxpemF0aW9uIGlzIGFsd2F5cyBhcHBsaWVkIGluIGRlZmxhdGUKKy0gQWRkIGFzc2VydGlvbnMgdG8gZmlsbF93aW5kb3coKSBpbiBkZWZsYXRlLmMgdG8gbWF0Y2ggY29tbWVudHMKKy0gVXBkYXRlIHB5dGhvbiBsaW5rIGluIFJFQURNRQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIGd6cmVhZC5jCistIEZpeCBidWcgaW4gZ3pnZXRzKCkgZm9yIGEgY29uY2F0ZW5hdGVkIGVtcHR5IGd6aXAgc3RyZWFtCistIENvcnJlY3QgZXJyb3IgaW4gY29tbWVudCBmb3IgZ3pfbWFrZSgpCistIENoYW5nZSBnenJlYWQoKSBhbmQgcmVsYXRlZCB0byBpZ25vcmUganVuayBhZnRlciBnemlwIHN0cmVhbXMKKy0gQWxsb3cgZ3pyZWFkKCkgYW5kIHJlbGF0ZWQgdG8gY29udGludWUgYWZ0ZXIgZ3pjbGVhcmVycigpCistIEFsbG93IGd6cmV3aW5kKCkgYW5kIGd6c2VlaygpIGFmdGVyIGEgcHJlbWF0dXJlIGVuZC1vZi1maWxlCistIFNpbXBsaWZ5IGd6c2VlaygpIG5vdyB0aGF0IHJhdyBhZnRlciBnemlwIGlzIGlnbm9yZWQKKy0gQ2hhbmdlIGd6Z2V0YygpIHRvIGEgbWFjcm8gZm9yIHNwZWVkICh+NDAlIHNwZWVkdXAgaW4gdGVzdGluZykKKy0gRml4IGd6Y2xvc2UoKSB0byByZXR1cm4gdGhlIGFjdHVhbCBlcnJvciBsYXN0IGVuY291bnRlcmVkCistIEFsd2F5cyBhZGQgbGFyZ2UgZmlsZSBzdXBwb3J0IGZvciB3aW5kb3dzCistIEluY2x1ZGUgemNvbmYuaCBmb3Igd2luZG93cyBsYXJnZSBmaWxlIHN1cHBvcnQKKy0gSW5jbHVkZSB6Y29uZi5oLmNtYWtlaW4gZm9yIHdpbmRvd3MgbGFyZ2UgZmlsZSBzdXBwb3J0CistIFVwZGF0ZSB6Y29uZi5oLmNtYWtlaW4gb24gbWFrZSBkaXN0Y2xlYW4KKy0gTWVyZ2UgdmVzdGlnaWFsIHZzbnByaW50ZiBkZXRlcm1pbmF0aW9uIGZyb20genV0aWwuaCB0byBnemd1dHMuaAorLSBDbGFyaWZ5IGhvdyBnem9wZW4oKSBhcHBlbmRzIGluIHpsaWIuaCBjb21tZW50cworLSBDb3JyZWN0IGRvY3VtZW50YXRpb24gb2YgZ3pkaXJlY3QoKSBzaW5jZSBqdW5rIGF0IGVuZCBub3cgaWdub3JlZAorLSBBZGQgYSB0cmFuc3BhcmVudCB3cml0ZSBtb2RlIHRvIGd6b3BlbigpIHdoZW4gJ1QnIGlzIGluIHRoZSBtb2RlCistIFVwZGF0ZSBweXRob24gbGluayBpbiB6bGliIG1hbiBwYWdlCistIEdldCBpbmZmaXhlZC5oIGFuZCBNQUtFRklYRUQgcmVzdWx0IHRvIG1hdGNoCistIEFkZCBhIC4vY29uZmlnIC0tc29sbyBvcHRpb24gdG8gbWFrZSB6bGliIHN1YnNldCB3aXRoIG5vIGxpYmFyeSB1c2UKKy0gQWRkIHVuZG9jdW1lbnRlZCBpbmZsYXRlUmVzZXRLZWVwKCkgZnVuY3Rpb24gZm9yIENBQiBmaWxlIGRlY29kaW5nCistIEFkZCAtLWNvdmVyIG9wdGlvbiB0byAuL2NvbmZpZ3VyZSBmb3IgZ2NjIGNvdmVyYWdlIHRlc3RpbmcKKy0gQWRkICNkZWZpbmUgWkxJQl9DT05TVCBvcHRpb24gdG8gdXNlIGNvbnN0IGluIHRoZSB6X3N0cmVhbSBpbnRlcmZhY2UKKy0gQWRkIGNvbW1lbnQgdG8gZ3pkb3BlbigpIGluIHpsaWIuaCB0byB1c2UgZHVwKCkgd2hlbiB1c2luZyBmaWxlbm8oKQorLSBOb3RlIGJlaGF2aW9yIG9mIHVuY29tcHJlc3MoKSB0byBwcm92aWRlIGFzIG11Y2ggZGF0YSBhcyBpdCBjYW4KKy0gQWRkIGZpbGVzIGluIGNvbnRyaWIvbWluaXppcCB0byBhaWQgaW4gYnVpbGRpbmcgbGlibWluaXppcAorLSBTcGxpdCBvZmYgQVIgb3B0aW9ucyBpbiBNYWtlZmlsZS5pbiBhbmQgY29uZmlndXJlCistIENoYW5nZSBPTiBtYWNybyB0byBaX0FSRyB0byBhdm9pZCBhcHBsaWNhdGlvbiBjb25mbGljdHMKKy0gRmFjaWxpdGF0ZSBjb21waWxhdGlvbiB3aXRoIEJvcmxhbmQgQysrIGZvciBwcmFnbWFzIGFuZCB2c25wcmludGYKKy0gSW5jbHVkZSBpby5oIGZvciBUdXJibyBDIC8gQm9ybGFuZCBDKysKKy0gTW92ZSBleGFtcGxlLmMgYW5kIG1pbmlnemlwLmMgdG8gdGVzdC8KKy0gU2ltcGxpZnkgaW5jb21wbGV0ZSBjb2RlIHRhYmxlIGZpbGxpbmcgaW4gaW5mbGF0ZV90YWJsZSgpCistIFJlbW92ZSBjb2RlIGZyb20gaW5mbGF0ZS5jIGFuZCBpbmZiYWNrLmMgdGhhdCBpcyBpbXBvc3NpYmxlIHRvIGV4ZWN1dGUKKy0gVGVzdCB0aGUgaW5mbGF0ZSBjb2RlIHdpdGggZnVsbCBjb3ZlcmFnZQorLSBBbGxvdyBkZWZsYXRlU2V0RGljdGlvbmFyeSwgaW5mbGF0ZVNldERpY3Rpb25hcnkgYXQgYW55IHRpbWUgKGluIHJhdykKKy0gQWRkIGRlZmxhdGVSZXNldEtlZXAgYW5kIGZpeCBpbmZsYXRlUmVzZXRLZWVwIHRvIHJldGFpbiBkaWN0aW9uYXJ5CistIEZpeCBnendyaXRlLmMgdG8gYWNjb21tb2RhdGUgcmVkdWNlZCBtZW1vcnkgemxpYiBjb21waWxhdGlvbgorLSBIYXZlIGluZmxhdGUoKSB3aXRoIFpfRklOSVNIIGF2b2lkIHRoZSBhbGxvY2F0aW9uIG9mIGEgd2luZG93CistIERvIG5vdCBzZXQgc3RybS0+YWRsZXIgd2hlbiBkb2luZyByYXcgaW5mbGF0ZQorLSBGaXggZ3plb2YoKSB0byBiZWhhdmUganVzdCBsaWtlIGZlb2YoKSB3aGVuIHJlYWQgaXMgbm90IHBhc3QgZW5kIG9mIGZpbGUKKy0gRml4IGJ1ZyBpbiBnenJlYWQuYyB3aGVuIGVuZC1vZi1maWxlIGlzIHJlYWNoZWQKKy0gQXZvaWQgdXNlIG9mIFpfQlVGX0VSUk9SIGluIGd6KiBmdW5jdGlvbnMgZXhjZXB0IGZvciBwcmVtYXR1cmUgRU9GCistIERvY3VtZW50IGd6cmVhZCgpIGNhcGFiaWxpdHkgdG8gcmVhZCBjb25jdXJyZW50bHkgd3JpdHRlbiBmaWxlcworLSBSZW1vdmUgaGFyZC1jb2Rpbmcgb2YgcmVzb3VyY2UgY29tcGlsZXIgaW4gQ01ha2VMaXN0cy50eHQgW0JsYW1tb10KKworQ2hhbmdlcyBpbiAxLjIuNS4xICgxMCBTZXAgMjAxMSkKKy0gVXBkYXRlIEZBUSBlbnRyeSBvbiBzaGFyZWQgYnVpbGRzICgjMTMpCistIEF2b2lkIHN5bWJvbGljIGFyZ3VtZW50IHRvIGNobW9kIGluIE1ha2VmaWxlLmluCistIEZpeCBidWcgYW5kIGFkZCBjb25zdHMgaW4gY29udHJpYi9wdWZmIFtPYmVyaHVtZXJdCistIFVwZGF0ZSBjb250cmliL3B1ZmYvemVyb3MucmF3IHRlc3QgZmlsZSB0byBoYXZlIGFsbCBibG9jayB0eXBlcworLSBBZGQgZnVsbCBjb3ZlcmFnZSB0ZXN0IGZvciBwdWZmIGluIGNvbnRyaWIvcHVmZi9NYWtlZmlsZQorLSBGaXggc3RhdGljLW9ubHktYnVpbGQgaW5zdGFsbCBpbiBNYWtlZmlsZS5pbgorLSBGaXggYnVnIGluIHVuekdldEN1cnJlbnRGaWxlSW5mbygpIGluIGNvbnRyaWIvbWluaXppcCBbS3Vub10KKy0gQWRkIGxpYnouYSBkZXBlbmRlbmN5IHRvIHNoYXJlZCBpbiBNYWtlZmlsZS5pbiBmb3IgcGFyYWxsZWwgYnVpbGRzCistIFNwZWxsIG91dCAibnVtYmVyIiAoaW5zdGVhZCBvZiAibmIiKSBpbiB6bGliLmggZm9yIHRvdGFsX2luLCB0b3RhbF9vdXQKKy0gUmVwbGFjZSAkKC4uLikgd2l0aCBgLi4uYCBpbiBjb25maWd1cmUgZm9yIG5vbi1iYXNoIHNoIFtCb3dsZXJdCistIEFkZCBkYXJ3aW4qIHRvIERhcndpbiogYW5kIHNvbGFyaXMqIHRvIFN1bk9TXCA1KiBpbiBjb25maWd1cmUgW0dyb2ZmZW5dCistIEFkZCBzb2xhcmlzKiB0byBMaW51eCogaW4gY29uZmlndXJlIHRvIGFsbG93IGdjYyB1c2UgW0dyb2ZmZW5dCistIEFkZCAqYnNkKiB0byBMaW51eCogY2FzZSBpbiBjb25maWd1cmUgW0Jhci1MZXZdCistIEFkZCBpbmZmYXN0Lm9iaiB0byBkZXBlbmRlbmNpZXMgaW4gd2luMzIvTWFrZWZpbGUubXNjCistIENvcnJlY3Qgc3BlbGxpbmcgZXJyb3IgaW4gZGVmbGF0ZS5oIFtLb2hsZXJdCistIENoYW5nZSBsaWJ6ZGxsLmEgYWdhaW4gdG8gbGliei5kbGwuYSAoISkgaW4gd2luMzIvTWFrZWZpbGUuZ2NjCistIEFkZCB0ZXN0IHRvIGNvbmZpZ3VyZSBmb3IgR05VIEMgbG9va2luZyBmb3IgZ2NjIGluIG91dHB1dCBvZiAkY2MgLXYKKy0gQWRkIHpsaWIucGMgZ2VuZXJhdGlvbiB0byB3aW4zMi9NYWtlZmlsZS5nY2MgW1dlaWdlbHRdCistIEZpeCBidWcgaW4gemxpYi5oIGZvciBfRklMRV9PRkZTRVRfQklUUyBzZXQgYW5kIF9MQVJHRUZJTEU2NF9TT1VSQ0Ugbm90CistIEFkZCBjb21tZW50IGluIHpsaWIuaCB0aGF0IGFkbGVyMzJfY29tYmluZSB3aXRoIGxlbjIgPCAwIG1ha2VzIG5vIHNlbnNlCistIE1ha2UgTk9fRElWSURFIG9wdGlvbiBpbiBhZGxlcjMyLmMgbXVjaCBmYXN0ZXIgKHRoYW5rcyB0byBKb2huIFJlaXNlcikKKy0gTWFrZSBzdHJvbmdlciB0ZXN0IGluIHpjb25mLmggdG8gaW5jbHVkZSB1bmlzdGQuaCBmb3IgTEZTCistIEFwcGx5IERhcndpbiBwYXRjaGVzIGZvciA2NC1iaXQgZmlsZSBvZmZzZXRzIHRvIGNvbnRyaWIvbWluaXppcCBbU2xhY2tdCistIEZpeCB6bGliLmggTEZTIHN1cHBvcnQgd2hlbiBaX1BSRUZJWCB1c2VkCistIEFkZCB1cGRhdGVkIGFzNDAwIHN1cHBvcnQgKHJlbW92ZWQgZnJvbSBvbGQpIFtNb25uZXJhdF0KKy0gQXZvaWQgZGVmbGF0ZSBzZW5zaXRpdml0eSB0byB2b2xhdGlsZSBpbnB1dCBkYXRhCistIEF2b2lkIGRpdmlzaW9uIGluIGFkbGVyMzJfY29tYmluZSBmb3IgTk9fRElWSURFCistIENsYXJpZnkgdGhlIHVzZSBvZiBaX0ZJTklTSCB3aXRoIGRlZmxhdGVCb3VuZCgpIGFtb3VudCBvZiBzcGFjZQorLSBTZXQgYmluYXJ5IGZvciBvdXRwdXQgZmlsZSBpbiBwdWZmLmMKKy0gVXNlIHU0IHR5cGUgZm9yIGNyY190YWJsZSB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFwcGx5IGNhc3RzIGluIHpsaWIuaCB0byBhdm9pZCBjb252ZXJzaW9uIHdhcm5pbmdzCistIEFkZCBPRiB0byBwcm90b3R5cGVzIGZvciBhZGxlcjMyX2NvbWJpbmVfIGFuZCBjcmMzMl9jb21iaW5lXyBbTWlsbGVyXQorLSBJbXByb3ZlIGluZmxhdGVTeW5jKCkgZG9jdW1lbnRhdGlvbiB0byBub3RlIGluZGV0ZXJtaW5hbmN5CistIEFkZCBkZWZsYXRlUGVuZGluZygpIGZ1bmN0aW9uIHRvIHJldHVybiB0aGUgYW1vdW50IG9mIHBlbmRpbmcgb3V0cHV0CistIENvcnJlY3QgdGhlIHNwZWxsaW5nIG9mICJzcGVjaWZpY2F0aW9uIiBpbiBGQVEgW1JhbmRlcnMtUGVocnNvbl0KKy0gQWRkIGEgY2hlY2sgaW4gY29uZmlndXJlIGZvciBzdGRhcmcuaCwgdXNlIGZvciBnenByaW50ZigpCistIENoZWNrIHRoYXQgcG9pbnRlcnMgZml0IGluIGludHMgd2hlbiBnenByaW50KCkgY29tcGlsZWQgb2xkIHN0eWxlCistIEFkZCBkdW1teSBuYW1lIGJlZm9yZSAkKFNIQVJFRExJQlYpIGluIE1ha2VmaWxlIFtCYXItTGV2LCBCb3dsZXJdCistIERlbGV0ZSBsaW5lIGluIGNvbmZpZ3VyZSB0aGF0IGFkZHMgLUwuIGxpYnouYSB0byBMREZMQUdTIFtXZWlnZWx0XQorLSBBZGQgZGVidWcgcmVjb3JkcyBpbiBhc3NtZWJsZXIgY29kZSBbTG9uZGVyXQorLSBVcGRhdGUgUkZDIHJlZmVyZW5jZXMgdG8gdXNlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sLy4uLiBbTGldCistIEFkZCAtLWFyY2hzIG9wdGlvbiwgdXNlIG9mIGxpYnRvb2wgdG8gY29uZmlndXJlIGZvciBNYWMgT1MgWCBbQm9yc3RlbF0KKwogQ2hhbmdlcyBpbiAxLjIuNSAoMTkgQXByIDIwMTApCiAtIERpc2FibGUgdmlzaWJpbGl0eSBhdHRyaWJ1dGUgaW4gd2luMzIvTWFrZWZpbGUuZ2NjIFtCYXItTGV2XQogLSBEZWZhdWx0IHRvIGxpYmRpciBhcyBzaGFyZWRsaWJkaXIgaW4gY29uZmlndXJlIFtOaWVkZXJdCiAtIFVwZGF0ZSBjb3B5cmlnaHQgZGF0ZXMgb24gbW9kaWZpZWQgc291cmNlIGZpbGVzCiAtIFVwZGF0ZSB0cmVlcy5jIHRvIGJlIGFibGUgdG8gZ2VuZXJhdGUgbW9kaWZpZWQgdHJlZXMuaAogLSBFeGl0IGNvbmZpZ3VyZSBmb3IgTWluR1csIHN1Z2dlc3Rpbmcgd2luMzIvTWFrZWZpbGUuZ2NjCistIENoZWNrIGZvciBOVUxMIHBhdGggaW4gZ3pfb3BlbiBbSG9tdXJsdV0KIAogQ2hhbmdlcyBpbiAxLjIuNC41ICgxOCBBcHIgMjAxMCkKIC0gU2V0IHNoYXJlZGxpYmRpciBpbiBjb25maWd1cmUgW1Rvcm9rXQpAQCAtMjYxLDcgKzUyNSw3IEBACiAtIENsZWFyIGJ5dGVzIGFmdGVyIGRlZmxhdGUgbG9va2FoZWFkIHRvIGF2b2lkIHVzZSBvZiB1bmluaXRpYWxpemVkIGRhdGEKIC0gQ2hhbmdlIGEgbGltaXQgaW4gaW5mdHJlZXMuYyB0byBiZSBtb3JlIHRyYW5zcGFyZW50IHRvIENvdmVyaXR5IFByZXZlbnQKIC0gVXBkYXRlIHdpbjMyL3psaWIuZGVmIHdpdGggZXhwb3J0ZWQgc3ltYm9scyBmcm9tIHpsaWIuaAotLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9yIGluIHpsaWIuaCBbV2lsbGVtXQorLSBDb3JyZWN0IHNwZWxsaW5nIGVycm9ycyBpbiB6bGliLmggW1dpbGxlbSwgU29icmFkb10KIC0gQWxsb3cgWl9CTE9DSyBmb3IgZGVmbGF0ZSgpIHRvIGZvcmNlIGEgbmV3IGJsb2NrCiAtIEFsbG93IG5lZ2F0aXZlIGJpdHMgaW4gaW5mbGF0ZVByaW1lKCkgdG8gZGVsZXRlIGV4aXN0aW5nIGJpdCBidWZmZXIKIC0gQWRkIFpfVFJFRVMgZmx1c2ggb3B0aW9uIHRvIGluZmxhdGUoKSB0byByZXR1cm4gYXQgZW5kIG9mIHRyZWVzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvRkFRIGIvTW9kdWxlcy96bGliL0ZBUQppbmRleCAxYTIyNzUwLi45OWI3Y2Y5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvRkFRCisrKyBiL01vZHVsZXMvemxpYi9GQVEKQEAgLTQ0LDggKzQ0LDggQEAKIAogIDYuIFdoZXJlJ3MgdGhlIHpsaWIgZG9jdW1lbnRhdGlvbiAobWFuIHBhZ2VzLCBldGMuKT8KIAotICAgIEl0J3MgaW4gemxpYi5oIC4gIEV4YW1wbGVzIG9mIHpsaWIgdXNhZ2UgYXJlIGluIHRoZSBmaWxlcyBleGFtcGxlLmMgYW5kCi0gICAgbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVzLyAuCisgICAgSXQncyBpbiB6bGliLmggLiAgRXhhbXBsZXMgb2YgemxpYiB1c2FnZSBhcmUgaW4gdGhlIGZpbGVzIHRlc3QvZXhhbXBsZS5jCisgICAgYW5kIHRlc3QvbWluaWd6aXAuYywgd2l0aCBtb3JlIGluIGV4YW1wbGVzLyAuCiAKICA3LiBXaHkgZG9uJ3QgeW91IHVzZSBHTlUgYXV0b2NvbmYgb3IgbGlidG9vbCBvciAuLi4/CiAKQEAgLTg0LDggKzg0LDEwIEBACiAKIDEzLiBIb3cgY2FuIEkgbWFrZSBhIFVuaXggc2hhcmVkIGxpYnJhcnk/CiAKLSAgICBtYWtlIGNsZWFuCi0gICAgLi9jb25maWd1cmUgLXMKKyAgICBCeSBkZWZhdWx0IGEgc2hhcmVkIChhbmQgYSBzdGF0aWMpIGxpYnJhcnkgaXMgYnVpbHQgZm9yIFVuaXguICBTbzoKKworICAgIG1ha2UgZGlzdGNsZWFuCisgICAgLi9jb25maWd1cmUKICAgICBtYWtlCiAKIDE0LiBIb3cgZG8gSSBpbnN0YWxsIGEgc2hhcmVkIHpsaWIgbGlicmFyeSBvbiBVbml4PwpAQCAtMzI1LDcgKzMyNyw3IEBACiAgICAgY29ycmVjdGx5IHBvaW50cyB0byB0aGUgemxpYiBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUwIGZvciB0aGUgImRlZmxhdGUiCiAgICAgdHJhbnNmZXIgZW5jb2RpbmcsIHRoZXJlIGhhdmUgYmVlbiByZXBvcnRzIG9mIHNlcnZlcnMgYW5kIGJyb3dzZXJzIHRoYXQKICAgICBpbmNvcnJlY3RseSBwcm9kdWNlIG9yIGV4cGVjdCByYXcgZGVmbGF0ZSBkYXRhIHBlciB0aGUgZGVmbGF0ZQotICAgIHNwZWNmaWNpYXRpb24gaW4gUkZDIDE5NTEsIG1vc3Qgbm90YWJseSBNaWNyb3NvZnQuICBTbyBldmVuIHRob3VnaCB0aGUKKyAgICBzcGVjaWZpY2F0aW9uIGluIFJGQyAxOTUxLCBtb3N0IG5vdGFibHkgTWljcm9zb2Z0LiAgU28gZXZlbiB0aG91Z2ggdGhlCiAgICAgImRlZmxhdGUiIHRyYW5zZmVyIGVuY29kaW5nIHVzaW5nIHRoZSB6bGliIGZvcm1hdCB3b3VsZCBiZSB0aGUgbW9yZQogICAgIGVmZmljaWVudCBhcHByb2FjaCAoYW5kIGluIGZhY3QgZXhhY3RseSB3aGF0IHRoZSB6bGliIGZvcm1hdCB3YXMgZGVzaWduZWQKICAgICBmb3IpLCB1c2luZyB0aGUgImd6aXAiIHRyYW5zZmVyIGVuY29kaW5nIGlzIHByb2JhYmx5IG1vcmUgcmVsaWFibGUgZHVlIHRvCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvSU5ERVggYi9Nb2R1bGVzL3psaWIvSU5ERVgKaW5kZXggZjZjNTFjYS4uMmJhMDY0MSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL0lOREVYCisrKyBiL01vZHVsZXMvemxpYi9JTkRFWApAQCAtNyw2ICs3LDkgQEAKIFJFQURNRSAgICAgICAgICBndWVzcyB3aGF0CiBjb25maWd1cmUgICAgICAgY29uZmlndXJlIHNjcmlwdCBmb3IgVW5peAogbWFrZV92bXMuY29tICAgIG1ha2VmaWxlIGZvciBWTVMKK3Rlc3QvZXhhbXBsZS5jICB6bGliIHVzYWdlcyBleGFtcGxlcyBmb3IgYnVpbGQgdGVzdGluZwordGVzdC9taW5pZ3ppcC5jIG1pbmltYWwgZ3ppcC1saWtlIGZ1bmN0aW9uYWxpdHkgZm9yIGJ1aWxkIHRlc3RpbmcKK3Rlc3QvaW5mY292ZXIuYyBpbmYqLmMgY29kZSBjb3ZlcmFnZSBmb3IgYnVpbGQgY292ZXJhZ2UgdGVzdGluZwogdHJlZWJ1aWxkLnhtbCAgIFhNTCBkZXNjcmlwdGlvbiBvZiBzb3VyY2UgZmlsZSBkZXBlbmRlbmNpZXMKIHpjb25mLmguY21ha2VpbiB6Y29uZi5oIHRlbXBsYXRlIGZvciBjbWFrZQogemNvbmYuaC5pbiAgICAgIHpjb25mLmggdGVtcGxhdGUgZm9yIGNvbmZpZ3VyZQpAQCAtMTQsOSArMTcsMTEgQEAKIHpsaWIuMy5wZGYgICAgICBNYW4gcGFnZSBpbiBQREYgZm9ybWF0CiB6bGliLm1hcCAgICAgICAgTGludXggc3ltYm9sIGluZm9ybWF0aW9uCiB6bGliLnBjLmluICAgICAgVGVtcGxhdGUgZm9yIHBrZy1jb25maWcgZGVzY3JpcHRvcgoremxpYi5wYy5jbWFrZWluIHpsaWIucGMgdGVtcGxhdGUgZm9yIGNtYWtlCiB6bGliMmFuc2kgICAgICAgcGVybCBzY3JpcHQgdG8gY29udmVydCBzb3VyY2UgZmlsZXMgZm9yIEMrKyBjb21waWxhdGlvbgogCiBhbWlnYS8gICAgICAgICAgbWFrZWZpbGVzIGZvciBBbWlnYSBTQVMgQworYXM0MDAvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgQVMvNDAwCiBkb2MvICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBmb3IgZm9ybWF0cyBhbmQgYWxnb3JpdGhtcwogbXNkb3MvICAgICAgICAgIG1ha2VmaWxlcyBmb3IgTVNET1MKIG5pbnRlbmRvZHMvICAgICBtYWtlZmlsZSBmb3IgTmludGVuZG8gRFMKQEAgLTU2LDEwICs2MSw4IEBACiB6dXRpbC5jCiB6dXRpbC5oCiAKLSAgICAgICAgICAgICAgICBzb3VyY2UgZmlsZXMgZm9yIHNhbXBsZSBwcm9ncmFtczoKLWV4YW1wbGUuYwotbWluaWd6aXAuYwotU2VlIGV4YW1wbGVzL1JFQURNRS5leGFtcGxlcyBmb3IgbW9yZQorICAgICAgICAgICAgICAgIHNvdXJjZSBmaWxlcyBmb3Igc2FtcGxlIHByb2dyYW1zCitTZWUgZXhhbXBsZXMvUkVBRE1FLmV4YW1wbGVzCiAKLSAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZCBjb250cmlidXRpb24gYnkgdGhpcmQgcGFydGllcworICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkIGNvbnRyaWJ1dGlvbnMgYnkgdGhpcmQgcGFydGllcwogU2VlIGNvbnRyaWIvUkVBRE1FLmNvbnRyaWIKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbiBiL01vZHVsZXMvemxpYi9NYWtlZmlsZS5pbgppbmRleCA1YjE1YmQwLi5jNjFhYTMwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvTWFrZWZpbGUuaW4KKysrIGIvTW9kdWxlcy96bGliL01ha2VmaWxlLmluCkBAIC0xLDUgKzEsNSBAQAogIyBNYWtlZmlsZSBmb3IgemxpYgotIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorIyBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5LCBNYXJrIEFkbGVyCiAjIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKIAogIyBUbyBjb21waWxlIGFuZCB0ZXN0LCB0eXBlOgpAQCAtMzIsMTEgKzMyLDEyIEBACiAKIFNUQVRJQ0xJQj1saWJ6LmEKIFNIQVJFRExJQj1saWJ6LnNvCi1TSEFSRURMSUJWPWxpYnouc28uMS4yLjUKK1NIQVJFRExJQlY9bGliei5zby4xLjIuOAogU0hBUkVETElCTT1saWJ6LnNvLjEKIExJQlM9JChTVEFUSUNMSUIpICQoU0hBUkVETElCVikKIAotQVI9YXIgcmMKK0FSPWFyCitBUkZMQUdTPXJjCiBSQU5MSUI9cmFubGliCiBMRENPTkZJRz1sZGNvbmZpZwogTERTSEFSRURMSUJDPS1sYwpAQCAtNTMsMTEgKzU0LDEzIEBACiBtYW4zZGlyID0gJHttYW5kaXJ9L21hbjMKIHBrZ2NvbmZpZ2RpciA9ICR7bGliZGlyfS9wa2djb25maWcKIAotT0JKQyA9IGFkbGVyMzIubyBjb21wcmVzcy5vIGNyYzMyLm8gZGVmbGF0ZS5vIGd6Y2xvc2UubyBnemxpYi5vIGd6cmVhZC5vIFwKLQlnendyaXRlLm8gaW5mYmFjay5vIGluZmZhc3QubyBpbmZsYXRlLm8gaW5mdHJlZXMubyB0cmVlcy5vIHVuY29tcHIubyB6dXRpbC5vCitPQkpaID0gYWRsZXIzMi5vIGNyYzMyLm8gZGVmbGF0ZS5vIGluZmJhY2subyBpbmZmYXN0Lm8gaW5mbGF0ZS5vIGluZnRyZWVzLm8gdHJlZXMubyB6dXRpbC5vCitPQkpHID0gY29tcHJlc3MubyB1bmNvbXByLm8gZ3pjbG9zZS5vIGd6bGliLm8gZ3pyZWFkLm8gZ3p3cml0ZS5vCitPQkpDID0gJChPQkpaKSAkKE9CSkcpCiAKLVBJQ19PQkpDID0gYWRsZXIzMi5sbyBjb21wcmVzcy5sbyBjcmMzMi5sbyBkZWZsYXRlLmxvIGd6Y2xvc2UubG8gZ3psaWIubG8gZ3pyZWFkLmxvIFwKLQlnendyaXRlLmxvIGluZmJhY2subG8gaW5mZmFzdC5sbyBpbmZsYXRlLmxvIGluZnRyZWVzLmxvIHRyZWVzLmxvIHVuY29tcHIubG8genV0aWwubG8KK1BJQ19PQkpaID0gYWRsZXIzMi5sbyBjcmMzMi5sbyBkZWZsYXRlLmxvIGluZmJhY2subG8gaW5mZmFzdC5sbyBpbmZsYXRlLmxvIGluZnRyZWVzLmxvIHRyZWVzLmxvIHp1dGlsLmxvCitQSUNfT0JKRyA9IGNvbXByZXNzLmxvIHVuY29tcHIubG8gZ3pjbG9zZS5sbyBnemxpYi5sbyBnenJlYWQubG8gZ3p3cml0ZS5sbworUElDX09CSkMgPSAkKFBJQ19PQkpaKSAkKFBJQ19PQkpHKQogCiAjIHRvIHVzZSB0aGUgYXNtIGNvZGU6IG1ha2UgT0JKQT1tYXRjaC5vLCBQSUNfT0JKQT1tYXRjaC5sbwogT0JKQSA9CkBAIC04MCwzNSArODMsNDkgQEAKIHRlc3Q6IGFsbCB0ZXN0c3RhdGljIHRlc3RzaGFyZWQKIAogdGVzdHN0YXRpYzogc3RhdGljCi0JQGlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGU7IHRoZW4gXAorCUBUTVBTVD10bXBzdF8kJDsgXAorCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwIHwgLi9taW5pZ3ppcCAtZCAmJiAuL2V4YW1wbGUgJCRUTVBTVCA7IHRoZW4gXAogCSAgZWNobyAnCQkqKiogemxpYiB0ZXN0IE9LICoqKic7IFwKIAllbHNlIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUFNUCiAKIHRlc3RzaGFyZWQ6IHNoYXJlZAogCUBMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChMRF9MSUJSQVJZX1BBVEgpIDsgZXhwb3J0IExEX0xJQlJBUllfUEFUSDsgXAogCUxEX0xJQlJBUllOMzJfUEFUSD1gcHdkYDokKExEX0xJQlJBUllOMzJfUEFUSCkgOyBleHBvcnQgTERfTElCUkFSWU4zMl9QQVRIOyBcCiAJRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGA6JChEWUxEX0xJQlJBUllfUEFUSCkgOyBleHBvcnQgRFlMRF9MSUJSQVJZX1BBVEg7IFwKIAlTSExJQl9QQVRIPWBwd2RgOiQoU0hMSUJfUEFUSCkgOyBleHBvcnQgU0hMSUJfUEFUSDsgXAotCWlmIGVjaG8gaGVsbG8gd29ybGQgfCAuL21pbmlnemlwc2ggfCAuL21pbmlnemlwc2ggLWQgJiYgLi9leGFtcGxlc2g7IHRoZW4gXAorCVRNUFNIPXRtcHNoXyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXBzaCB8IC4vbWluaWd6aXBzaCAtZCAmJiAuL2V4YW1wbGVzaCAkJFRNUFNIOyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgc2hhcmVkIHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiBzaGFyZWQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUFNICiAKIHRlc3Q2NDogYWxsNjQKLQlAaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXA2NCB8IC4vbWluaWd6aXA2NCAtZCAmJiAuL2V4YW1wbGU2NDsgdGhlbiBcCisJQFRNUDY0PXRtcDY0XyQkOyBcCisJaWYgZWNobyBoZWxsbyB3b3JsZCB8IC4vbWluaWd6aXA2NCB8IC4vbWluaWd6aXA2NCAtZCAmJiAuL2V4YW1wbGU2NCAkJFRNUDY0OyB0aGVuIFwKIAkgIGVjaG8gJwkJKioqIHpsaWIgNjQtYml0IHRlc3QgT0sgKioqJzsgXAogCWVsc2UgXAogCSAgZWNobyAnCQkqKiogemxpYiA2NC1iaXQgdGVzdCBGQUlMRUQgKioqJzsgZmFsc2U7IFwKLQlmaQotCS1Acm0gLWYgZm9vLmd6CisJZmk7IFwKKwlybSAtZiAkJFRNUDY0CisKK2luZmNvdmVyLm86IHRlc3QvaW5mY292ZXIuYyB6bGliLmggemNvbmYuaAorCSQoQ0MpICQoQ0ZMQUdTKSAtSS4gLWMgLW8gJEAgdGVzdC9pbmZjb3Zlci5jCisKK2luZmNvdmVyOiBpbmZjb3Zlci5vIGxpYnouYQorCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBpbmZjb3Zlci5vIGxpYnouYQorCitjb3ZlcjogaW5mY292ZXIKKwlybSAtZiAqLmdjZGEKKwkuL2luZmNvdmVyCisJZ2NvdiBpbmYqLmMKIAogbGliei5hOiAkKE9CSlMpCi0JJChBUikgJEAgJChPQkpTKQorCSQoQVIpICQoQVJGTEFHUykgJEAgJChPQkpTKQogCS1AICgkKFJBTkxJQikgJEAgfHwgdHJ1ZSkgPi9kZXYvbnVsbCAyPiYxCiAKIG1hdGNoLm86IG1hdGNoLlMKQEAgLTEyMywxMSArMTQwLDE3IEBACiAJbXYgX21hdGNoLm8gbWF0Y2gubG8KIAlybSAtZiBfbWF0Y2gucwogCi1leGFtcGxlNjQubzogZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCi0JJChDQykgJChDRkxBR1MpIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgZXhhbXBsZS5jCitleGFtcGxlLm86IHRlc3QvZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCisJJChDQykgJChDRkxBR1MpIC1JLiAtYyAtbyAkQCB0ZXN0L2V4YW1wbGUuYwogCi1taW5pZ3ppcDY0Lm86IG1pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKLQkkKENDKSAkKENGTEFHUykgLURfRklMRV9PRkZTRVRfQklUUz02NCAtYyAtbyAkQCBtaW5pZ3ppcC5jCittaW5pZ3ppcC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1jIC1vICRAIHRlc3QvbWluaWd6aXAuYworCitleGFtcGxlNjQubzogdGVzdC9leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9leGFtcGxlLmMKKworbWluaWd6aXA2NC5vOiB0ZXN0L21pbmlnemlwLmMgemxpYi5oIHpjb25mLmgKKwkkKENDKSAkKENGTEFHUykgLUkuIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLWMgLW8gJEAgdGVzdC9taW5pZ3ppcC5jCiAKIC5TVUZGSVhFUzogLmxvCiAKQEAgLTEzNiw3ICsxNTksNyBAQAogCSQoQ0MpICQoU0ZMQUdTKSAtRFBJQyAtYyAtbyBvYmpzLyQqLm8gJDwKIAktQG12IG9ianMvJCoubyAkQAogCi0kKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKQorcGxhY2VibyAkKFNIQVJFRExJQlYpOiAkKFBJQ19PQkpTKSBsaWJ6LmEKIAkkKExEU0hBUkVEKSAkKFNGTEFHUykgLW8gJEAgJChQSUNfT0JKUykgJChMRFNIQVJFRExJQkMpICQoTERGTEFHUykKIAlybSAtZiAkKFNIQVJFRExJQikgJChTSEFSRURMSUJNKQogCWxuIC1zICRAICQoU0hBUkVETElCKQpAQCAtMTY4LDE0ICsxOTEsMTYgQEAKIAktQGlmIFsgISAtZCAkKERFU1RESVIpJChtYW4zZGlyKSAgICAgIF07IHRoZW4gbWtkaXIgLXAgJChERVNURElSKSQobWFuM2Rpcik7IGZpCiAJLUBpZiBbICEgLWQgJChERVNURElSKSQocGtnY29uZmlnZGlyKSBdOyB0aGVuIG1rZGlyIC1wICQoREVTVERJUikkKHBrZ2NvbmZpZ2Rpcik7IGZpCiAJY3AgJChTVEFUSUNMSUIpICQoREVTVERJUikkKGxpYmRpcikKLQljcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikKLQljZCAkKERFU1RESVIpJChsaWJkaXIpOyBjaG1vZCB1PXJ3LGdvPXIgJChTVEFUSUNMSUIpCi0JLUAoY2QgJChERVNURElSKSQobGliZGlyKTsgJChSQU5MSUIpIGxpYnouYSB8fCB0cnVlKSA+L2Rldi9udWxsIDI+JjEKLQktQGNkICQoREVTVERJUikkKHNoYXJlZGxpYmRpcik7IGlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAotCSAgY2htb2QgNzU1ICQoU0hBUkVETElCVik7IFwKLQkgIHJtIC1mICQoU0hBUkVETElCKSAkKFNIQVJFRExJQk0pOyBcCi0JICBsbiAtcyAkKFNIQVJFRExJQlYpICQoU0hBUkVETElCKTsgXAotCSAgbG4gLXMgJChTSEFSRURMSUJWKSAkKFNIQVJFRExJQk0pOyBcCisJY2htb2QgNjQ0ICQoREVTVERJUikkKGxpYmRpcikvJChTVEFUSUNMSUIpCisJLUAoJChSQU5MSUIpICQoREVTVERJUikkKGxpYmRpcikvbGliei5hIHx8IHRydWUpID4vZGV2L251bGwgMj4mMQorCS1AaWYgdGVzdCAtbiAiJChTSEFSRURMSUJWKSI7IHRoZW4gXAorCSAgY3AgJChTSEFSRURMSUJWKSAkKERFU1RESVIpJChzaGFyZWRsaWJkaXIpOyBcCisJICBlY2hvICJjcCAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikiOyBcCisJICBjaG1vZCA3NTUgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpOyBcCisJICBlY2hvICJjaG1vZCA3NTUgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQlYpIjsgXAorCSAgcm0gLWYgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQikgJChERVNURElSKSQoc2hhcmVkbGliZGlyKS8kKFNIQVJFRExJQk0pOyBcCisJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUIpOyBcCisJICBsbiAtcyAkKFNIQVJFRExJQlYpICQoREVTVERJUikkKHNoYXJlZGxpYmRpcikvJChTSEFSRURMSUJNKTsgXAogCSAgKCQoTERDT05GSUcpIHx8IHRydWUpICA+L2Rldi9udWxsIDI+JjE7IFwKIAlmaQogCWNwIHpsaWIuMyAkKERFU1RESVIpJChtYW4zZGlyKQpAQCAtMTkxLDIyICsyMTYsMjUgQEAKIAljaG1vZCA2NDQgJChERVNURElSKSQoaW5jbHVkZWRpcikvemxpYi5oICQoREVTVERJUikkKGluY2x1ZGVkaXIpL3pjb25mLmgKIAogdW5pbnN0YWxsOgotCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpOyBybSAtZiB6bGliLmggemNvbmYuaAotCWNkICQoREVTVERJUikkKGxpYmRpcik7IHJtIC1mIGxpYnouYTsgXAotCWlmIHRlc3QgIiQoU0hBUkVETElCVikiIC1hIC1mICQoU0hBUkVETElCVik7IHRoZW4gXAorCWNkICQoREVTVERJUikkKGluY2x1ZGVkaXIpICYmIHJtIC1mIHpsaWIuaCB6Y29uZi5oCisJY2QgJChERVNURElSKSQobGliZGlyKSAmJiBybSAtZiBsaWJ6LmE7IFwKKwlpZiB0ZXN0IC1uICIkKFNIQVJFRExJQlYpIiAtYSAtZiAkKFNIQVJFRExJQlYpOyB0aGVuIFwKIAkgIHJtIC1mICQoU0hBUkVETElCVikgJChTSEFSRURMSUIpICQoU0hBUkVETElCTSk7IFwKIAlmaQotCWNkICQoREVTVERJUikkKG1hbjNkaXIpOyBybSAtZiB6bGliLjMKLQljZCAkKERFU1RESVIpJChwa2djb25maWdkaXIpOyBybSAtZiB6bGliLnBjCisJY2QgJChERVNURElSKSQobWFuM2RpcikgJiYgcm0gLWYgemxpYi4zCisJY2QgJChERVNURElSKSQocGtnY29uZmlnZGlyKSAmJiBybSAtZiB6bGliLnBjCiAKIGRvY3M6IHpsaWIuMy5wZGYKIAogemxpYi4zLnBkZjogemxpYi4zCiAJZ3JvZmYgLW1hbmRvYyAtZiBIIC1UIHBzIHpsaWIuMyB8IHBzMnBkZiAtIHpsaWIuMy5wZGYKIAotemNvbmYuaC5pbjogemNvbmYuaC5jbWFrZWluCi0Jc2VkICIvXiNjbWFrZWRlZmluZS9EIiA8IHpjb25mLmguY21ha2VpbiA+IHpjb25mLmguaW4KLQl0b3VjaCAtciB6Y29uZi5oLmNtYWtlaW4gemNvbmYuaC5pbgoremNvbmYuaC5jbWFrZWluOiB6Y29uZi5oLmluCisJLUAgVEVNUEZJTEU9emNvbmZoXyQkOyBcCisJZWNobyAiLyNkZWZpbmUgWkNPTkZfSC8gYVxcXFxcbiNjbWFrZWRlZmluZSBaX1BSRUZJWFxcXFxcbiNjbWFrZWRlZmluZSBaX0hBVkVfVU5JU1REX0hcbiIgPj4gJCRURU1QRklMRSAmJlwKKwlzZWQgLWYgJCRURU1QRklMRSB6Y29uZi5oLmluID4gemNvbmYuaC5jbWFrZWluICYmXAorCXRvdWNoIC1yIHpjb25mLmguaW4gemNvbmYuaC5jbWFrZWluICYmXAorCXJtICQkVEVNUEZJTEUKIAogemNvbmY6IHpjb25mLmguaW4KIAljcCAtcCB6Y29uZi5oLmluIHpjb25mLmgKQEAgLTIxNiwxMyArMjQ0LDE2IEBACiAJcm0gLWYgKi5vICoubG8gKn4gXAogCSAgIGV4YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkgZXhhbXBsZXNoJChFWEUpIG1pbmlnemlwc2gkKEVYRSkgXAogCSAgIGV4YW1wbGU2NCQoRVhFKSBtaW5pZ3ppcDY0JChFWEUpIFwKKwkgICBpbmZjb3ZlciBcCiAJICAgbGliei4qIGZvby5neiBzb19sb2NhdGlvbnMgXAogCSAgIF9tYXRjaC5zIG1ha2V0cmVlIGNvbnRyaWIvaW5mYmFjazkvKi5vCiAJcm0gLXJmIG9ianMKKwlybSAtZiAqLmdjZGEgKi5nY25vICouZ2NvdgorCXJtIC1mIGNvbnRyaWIvaW5mYmFjazkvKi5nY2RhIGNvbnRyaWIvaW5mYmFjazkvKi5nY25vIGNvbnRyaWIvaW5mYmFjazkvKi5nY292CiAKIG1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgotZGlzdGNsZWFuOiBjbGVhbiB6Y29uZiBkb2NzCi0Jcm0gLWYgTWFrZWZpbGUgemxpYi5wYworZGlzdGNsZWFuOiBjbGVhbiB6Y29uZiB6Y29uZi5oLmNtYWtlaW4gZG9jcworCXJtIC1mIE1ha2VmaWxlIHpsaWIucGMgY29uZmlndXJlLmxvZwogCS1Acm0gLWYgLkRTX1N0b3JlCiAJLUBwcmludGYgJ2FsbDpcblx0LUBlY2hvICJQbGVhc2UgdXNlIC4vY29uZmlndXJlIGZpcnN0LiAgVGhhbmsgeW91LiJcbicgPiBNYWtlZmlsZQogCS1AcHJpbnRmICdcbmRpc3RjbGVhbjpcblx0bWFrZSAtZiBNYWtlZmlsZS5pbiBkaXN0Y2xlYW5cbicgPj4gTWFrZWZpbGUKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9SRUFETUUgYi9Nb2R1bGVzL3psaWIvUkVBRE1FCmluZGV4IGQ0MjE5YmYuLjVjYTlkMTIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9SRUFETUUKKysrIGIvTW9kdWxlcy96bGliL1JFQURNRQpAQCAtMSwyMiArMSwyMiBAQAogWkxJQiBEQVRBIENPTVBSRVNTSU9OIExJQlJBUlkKIAotemxpYiAxLjIuNSBpcyBhIGdlbmVyYWwgcHVycG9zZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuICBBbGwgdGhlIGNvZGUgaXMKK3psaWIgMS4yLjggaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCiB0aHJlYWQgc2FmZS4gIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcwotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQgKGRlZmxhdGUgZm9ybWF0KQotYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUwICh6bGliIGZvcm1hdCksIHJmYzE5NTEgKGRlZmxhdGUgZm9ybWF0KSBhbmQKK3JmYzE5NTIgKGd6aXAgZm9ybWF0KS4KIAogQWxsIGZ1bmN0aW9ucyBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhcmUgZG9jdW1lbnRlZCBpbiB0aGUgZmlsZSB6bGliLmgKICh2b2x1bnRlZXIgdG8gd3JpdGUgbWFuIHBhZ2VzIHdlbGNvbWUsIGNvbnRhY3QgemxpYkBnemlwLm9yZykuICBBIHVzYWdlIGV4YW1wbGUKLW9mIHRoZSBsaWJyYXJ5IGlzIGdpdmVuIGluIHRoZSBmaWxlIGV4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQgdGhlIGxpYnJhcnkKLWlzIHdvcmtpbmcgY29ycmVjdGx5LiAgQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRoZSBmaWxlIG1pbmlnemlwLmMuICBUaGUKLWNvbXByZXNzaW9uIGxpYnJhcnkgaXRzZWxmIGlzIGNvbXBvc2VkIG9mIGFsbCBzb3VyY2UgZmlsZXMgZXhjZXB0IGV4YW1wbGUuYyBhbmQKLW1pbmlnemlwLmMuCitvZiB0aGUgbGlicmFyeSBpcyBnaXZlbiBpbiB0aGUgZmlsZSB0ZXN0L2V4YW1wbGUuYyB3aGljaCBhbHNvIHRlc3RzIHRoYXQKK3RoZSBsaWJyYXJ5IGlzIHdvcmtpbmcgY29ycmVjdGx5LiAgQW5vdGhlciBleGFtcGxlIGlzIGdpdmVuIGluIHRoZSBmaWxlCit0ZXN0L21pbmlnemlwLmMuICBUaGUgY29tcHJlc3Npb24gbGlicmFyeSBpdHNlbGYgaXMgY29tcG9zZWQgb2YgYWxsIHNvdXJjZQorZmlsZXMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5LgogCiBUbyBjb21waWxlIGFsbCBmaWxlcyBhbmQgcnVuIHRoZSB0ZXN0IHByb2dyYW0sIGZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGdpdmVuIGF0CiB0aGUgdG9wIG9mIE1ha2VmaWxlLmluLiAgSW4gc2hvcnQgIi4vY29uZmlndXJlOyBtYWtlIHRlc3QiLCBhbmQgaWYgdGhhdCBnb2VzCi13ZWxsLCAibWFrZSBpbnN0YWxsIiBzaG91bGQgd29yayBmb3IgbW9zdCBmbGF2b3JzIG9mIFVuaXguICBGb3IgV2luZG93cywgdXNlIG9uZQotb2YgdGhlIHNwZWNpYWwgbWFrZWZpbGVzIGluIHdpbjMyLyBvciBjb250cmliL3ZzdHVkaW8vIC4gIEZvciBWTVMsIHVzZQord2VsbCwgIm1ha2UgaW5zdGFsbCIgc2hvdWxkIHdvcmsgZm9yIG1vc3QgZmxhdm9ycyBvZiBVbml4LiAgRm9yIFdpbmRvd3MsIHVzZQorb25lIG9mIHRoZSBzcGVjaWFsIG1ha2VmaWxlcyBpbiB3aW4zMi8gb3IgY29udHJpYi92c3R1ZGlvLyAuICBGb3IgVk1TLCB1c2UKIG1ha2Vfdm1zLmNvbS4KIAogUXVlc3Rpb25zIGFib3V0IHpsaWIgc2hvdWxkIGJlIHNlbnQgdG8gPHpsaWJAZ3ppcC5vcmc+LCBvciB0byBHaWxsZXMgVm9sbGFudApAQCAtMzEsNyArMzEsNyBAQAogaXNzdWUgb2YgRHIuICBEb2JiJ3MgSm91cm5hbDsgYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBhdAogaHR0cDovL21hcmtuZWxzb24udXMvMTk5Ny8wMS8wMS96bGliLWVuZ2luZS8gLgogCi1UaGUgY2hhbmdlcyBtYWRlIGluIHZlcnNpb24gMS4yLjUgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgorVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJzaW9uIDEuMi44IGFyZSBkb2N1bWVudGVkIGluIHRoZSBmaWxlIENoYW5nZUxvZy4KIAogVW5zdXBwb3J0ZWQgdGhpcmQgcGFydHkgY29udHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQgaW4gZGlyZWN0b3J5IGNvbnRyaWIvIC4KIApAQCAtNDQsNyArNDQsNyBAQAogCiBBIFB5dGhvbiBpbnRlcmZhY2UgdG8gemxpYiB3cml0dGVuIGJ5IEEuTS4gS3VjaGxpbmcgPGFta0BhbWsuY2E+IGlzCiBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnMsIHNlZQotaHR0cDovL3d3dy5weXRob24ub3JnL2RvYy9saWIvbW9kdWxlLXpsaWIuaHRtbCAuCitodHRwOi8vZG9jcy5weXRob24ub3JnL2xpYnJhcnkvemxpYi5odG1sIC4KIAogemxpYiBpcyBidWlsdCBpbnRvIHRjbDogaHR0cDovL3dpa2kudGNsLnRrLzQ2MTAgLgogCkBAIC04NCw3ICs4NCw3IEBACiAKIENvcHlyaWdodCBub3RpY2U6CiAKLSAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIAogICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAogICB3YXJyYW50eS4gIEluIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcnMgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jIGIvTW9kdWxlcy96bGliL2FkbGVyMzIuYwppbmRleCA2NWFkNmE1Li5hODY4ZjA3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvYWRsZXIzMi5jCisrKyBiL01vZHVsZXMvemxpYi9hZGxlcjMyLmMKQEAgLTEsNSArMSw1IEBACiAvKiBhZGxlcjMyLmMgLS0gY29tcHV0ZSB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgYSBkYXRhIHN0cmVhbQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDcgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksOSArOSw5IEBACiAKICNkZWZpbmUgbG9jYWwgc3RhdGljCiAKLWxvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8odUxvbmcgYWRsZXIxLCB1TG9uZyBhZGxlcjIsIHpfb2ZmNjRfdCBsZW4yKTsKK2xvY2FsIHVMb25nIGFkbGVyMzJfY29tYmluZV8gT0YoKHVMb25nIGFkbGVyMSwgdUxvbmcgYWRsZXIyLCB6X29mZjY0X3QgbGVuMikpOwogCi0jZGVmaW5lIEJBU0UgNjU1MjFVTCAgICAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLworI2RlZmluZSBCQVNFIDY1NTIxICAgICAgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KICNkZWZpbmUgTk1BWCA1NTUyCiAvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsgKG4rMSkoQkFTRS0xKSA8PSAyXjMyLTEgKi8KIApAQCAtMjEsMzkgKzIxLDQ0IEBACiAjZGVmaW5lIERPOChidWYsaSkgIERPNChidWYsaSk7IERPNChidWYsaSs0KTsKICNkZWZpbmUgRE8xNihidWYpICAgRE84KGJ1ZiwwKTsgRE84KGJ1Ziw4KTsKIAotLyogdXNlIE5PX0RJVklERSBpZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBkbyBkaXZpc2lvbiBpbiBoYXJkd2FyZSAqLworLyogdXNlIE5PX0RJVklERSBpZiB5b3VyIHByb2Nlc3NvciBkb2VzIG5vdCBkbyBkaXZpc2lvbiBpbiBoYXJkd2FyZSAtLQorICAgdHJ5IGl0IGJvdGggd2F5cyB0byBzZWUgd2hpY2ggaXMgZmFzdGVyICovCiAjaWZkZWYgTk9fRElWSURFCi0jICBkZWZpbmUgTU9EKGEpIFwKKy8qIG5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgQkFTRSBpcyA2NTUyMSwgd2hlcmUgNjU1MzYgJSA2NTUyMSA9PSAxNQorICAgKHRoYW5rIHlvdSB0byBKb2huIFJlaXNlciBmb3IgcG9pbnRpbmcgdGhpcyBvdXQpICovCisjICBkZWZpbmUgQ0hPUChhKSBcCiAgICAgZG8geyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDE2KSkgYSAtPSAoQkFTRSA8PCAxNik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTUpKSBhIC09IChCQVNFIDw8IDE1KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxNCkpIGEgLT0gKEJBU0UgPDwgMTQpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEzKSkgYSAtPSAoQkFTRSA8PCAxMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMTIpKSBhIC09IChCQVNFIDw8IDEyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxMSkpIGEgLT0gKEJBU0UgPDwgMTEpOyBcCi0gICAgICAgIGlmIChhID49IChCQVNFIDw8IDEwKSkgYSAtPSAoQkFTRSA8PCAxMCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOSkpIGEgLT0gKEJBU0UgPDwgOSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgOCkpIGEgLT0gKEJBU0UgPDwgOCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNykpIGEgLT0gKEJBU0UgPDwgNyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNikpIGEgLT0gKEJBU0UgPDwgNik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNSkpIGEgLT0gKEJBU0UgPDwgNSk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgNCkpIGEgLT0gKEJBU0UgPDwgNCk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMykpIGEgLT0gKEJBU0UgPDwgMyk7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMikpIGEgLT0gKEJBU0UgPDwgMik7IFwKLSAgICAgICAgaWYgKGEgPj0gKEJBU0UgPDwgMSkpIGEgLT0gKEJBU0UgPDwgMSk7IFwKKyAgICAgICAgdW5zaWduZWQgbG9uZyB0bXAgPSBhID4+IDE2OyBcCisgICAgICAgIGEgJj0gMHhmZmZmVUw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0QyOChhKSBcCisgICAgZG8geyBcCisgICAgICAgIENIT1AoYSk7IFwKICAgICAgICAgaWYgKGEgPj0gQkFTRSkgYSAtPSBCQVNFOyBcCiAgICAgfSB3aGlsZSAoMCkKLSMgIGRlZmluZSBNT0Q0KGEpIFwKKyMgIGRlZmluZSBNT0QoYSkgXAogICAgIGRvIHsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCA0KSkgYSAtPSAoQkFTRSA8PCA0KTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAzKSkgYSAtPSAoQkFTRSA8PCAzKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAyKSkgYSAtPSAoQkFTRSA8PCAyKTsgXAotICAgICAgICBpZiAoYSA+PSAoQkFTRSA8PCAxKSkgYSAtPSAoQkFTRSA8PCAxKTsgXAorICAgICAgICBDSE9QKGEpOyBcCisgICAgICAgIE1PRDI4KGEpOyBcCisgICAgfSB3aGlsZSAoMCkKKyMgIGRlZmluZSBNT0Q2MyhhKSBcCisgICAgZG8geyAvKiB0aGlzIGFzc3VtZXMgYSBpcyBub3QgbmVnYXRpdmUgKi8gXAorICAgICAgICB6X29mZjY0X3QgdG1wID0gYSA+PiAzMjsgXAorICAgICAgICBhICY9IDB4ZmZmZmZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA4KSAtICh0bXAgPDwgNSkgKyB0bXA7IFwKKyAgICAgICAgdG1wID0gYSA+PiAxNjsgXAorICAgICAgICBhICY9IDB4ZmZmZkw7IFwKKyAgICAgICAgYSArPSAodG1wIDw8IDQpIC0gdG1wOyBcCisgICAgICAgIHRtcCA9IGEgPj4gMTY7IFwKKyAgICAgICAgYSAmPSAweGZmZmZMOyBcCisgICAgICAgIGEgKz0gKHRtcCA8PCA0KSAtIHRtcDsgXAogICAgICAgICBpZiAoYSA+PSBCQVNFKSBhIC09IEJBU0U7IFwKICAgICB9IHdoaWxlICgwKQogI2Vsc2UKICMgIGRlZmluZSBNT0QoYSkgYSAlPSBCQVNFCi0jICBkZWZpbmUgTU9ENChhKSBhICU9IEJBU0UKKyMgIGRlZmluZSBNT0QyOChhKSBhICU9IEJBU0UKKyMgIGRlZmluZSBNT0Q2MyhhKSBhICU9IEJBU0UKICNlbmRpZgogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC05Miw3ICs5Nyw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGFkbGVyID49IEJBU0UpCiAgICAgICAgICAgICBhZGxlciAtPSBCQVNFOwotICAgICAgICBNT0Q0KHN1bTIpOyAgICAgICAgICAgICAvKiBvbmx5IGFkZGVkIHNvIG1hbnkgQkFTRSdzICovCisgICAgICAgIE1PRDI4KHN1bTIpOyAgICAgICAgICAgIC8qIG9ubHkgYWRkZWQgc28gbWFueSBCQVNFJ3MgKi8KICAgICAgICAgcmV0dXJuIGFkbGVyIHwgKHN1bTIgPDwgMTYpOwogICAgIH0KIApAQCAtMTM3LDggKzE0MiwxMyBAQAogICAgIHVuc2lnbmVkIGxvbmcgc3VtMjsKICAgICB1bnNpZ25lZCByZW07CiAKKyAgICAvKiBmb3IgbmVnYXRpdmUgbGVuLCByZXR1cm4gaW52YWxpZCBhZGxlcjMyIGFzIGEgY2x1ZSBmb3IgZGVidWdnaW5nICovCisgICAgaWYgKGxlbjIgPCAwKQorICAgICAgICByZXR1cm4gMHhmZmZmZmZmZlVMOworCiAgICAgLyogdGhlIGRlcml2YXRpb24gb2YgdGhpcyBmb3JtdWxhIGlzIGxlZnQgYXMgYW4gZXhlcmNpc2UgZm9yIHRoZSByZWFkZXIgKi8KLSAgICByZW0gPSAodW5zaWduZWQpKGxlbjIgJSBCQVNFKTsKKyAgICBNT0Q2MyhsZW4yKTsgICAgICAgICAgICAgICAgLyogYXNzdW1lcyBsZW4yID49IDAgKi8KKyAgICByZW0gPSAodW5zaWduZWQpbGVuMjsKICAgICBzdW0xID0gYWRsZXIxICYgMHhmZmZmOwogICAgIHN1bTIgPSByZW0gKiBzdW0xOwogICAgIE1PRChzdW0yKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9hbGdvcml0aG0udHh0IGIvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKaW5kZXggYjAyMmRkZS4uYzk3ZjQ5NSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKKysrIGIvTW9kdWxlcy96bGliL2FsZ29yaXRobS50eHQKQEAgLTEyMSw3ICsxMjEsNyBAQAoga2J5dGVzLiAgWW91IGNhbiBpbWFnaW5lIHRoYXQgZmlsbGluZyBpbiBhIDJeMTUgZW50cnkgdGFibGUgZm9yIGEgMTUtYml0IGNvZGUKIHdvdWxkIHRha2UgdG9vIGxvbmcgaWYgeW91J3JlIG9ubHkgZGVjb2Rpbmcgc2V2ZXJhbCB0aG91c2FuZCBzeW1ib2xzLiAgQXQgdGhlCiBvdGhlciBleHRyZW1lLCB5b3UgY291bGQgbWFrZSBhIG5ldyB0YWJsZSBmb3IgZXZlcnkgYml0IGluIHRoZSBjb2RlLiAgSW4gZmFjdCwKLXRoYXQncyBlc3NlbnRpYWxseSBhIEh1ZmZtYW4gdHJlZS4gIEJ1dCB0aGVuIHlvdSBzcGVuZCB0d28gbXVjaCB0aW1lCit0aGF0J3MgZXNzZW50aWFsbHkgYSBIdWZmbWFuIHRyZWUuICBCdXQgdGhlbiB5b3Ugc3BlbmQgdG9vIG11Y2ggdGltZQogdHJhdmVyc2luZyB0aGUgdHJlZSB3aGlsZSBkZWNvZGluZywgZXZlbiBmb3Igc2hvcnQgc3ltYm9scy4KIAogU28gdGhlIG51bWJlciBvZiBiaXRzIGZvciB0aGUgZmlyc3QgbG9va3VwIHRhYmxlIGlzIGEgdHJhZGUgb2YgdGhlIHRpbWUgdG8KQEAgLTIwNiw0ICsyMDYsNCBAQAogcHAuIDMzNy0zNDMuCiAKIGBgREVGTEFURSBDb21wcmVzc2VkIERhdGEgRm9ybWF0IFNwZWNpZmljYXRpb24nJyBhdmFpbGFibGUgaW4KLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0CitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUxCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvY29tcHJlc3MuYyBiL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCmluZGV4IGVhNGRmYmUuLjZlOTc2MjYgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCisrKyBiL01vZHVsZXMvemxpYi9jb21wcmVzcy5jCkBAIC0yOSw3ICsyOSw3IEBACiAgICAgel9zdHJlYW0gc3RyZWFtOwogICAgIGludCBlcnI7CiAKLSAgICBzdHJlYW0ubmV4dF9pbiA9IChCeXRlZiopc291cmNlOworICAgIHN0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilzb3VyY2U7CiAgICAgc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc291cmNlTGVuOwogI2lmZGVmIE1BWFNFR182NEsKICAgICAvKiBDaGVjayBmb3Igc291cmNlID4gNjRLIG9uIDE2LWJpdCBtYWNoaW5lOiAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NvbmZpZ3VyZSBiL01vZHVsZXMvemxpYi9jb25maWd1cmUKaW5kZXggYmQ5ZWRkMi4uYjc3YThhOCAxMDA3NTUKLS0tIGEvTW9kdWxlcy96bGliL2NvbmZpZ3VyZQorKysgYi9Nb2R1bGVzL3psaWIvY29uZmlndXJlCkBAIC0xMywzOSArMTMsNTIgQEAKICMgSWYgeW91IGhhdmUgcHJvYmxlbXMsIHRyeSB3aXRob3V0IGRlZmluaW5nIENDIGFuZCBDRkxBR1MgYmVmb3JlIHJlcG9ydGluZwogIyBhbiBlcnJvci4KIAorIyBzdGFydCBvZmYgY29uZmlndXJlLmxvZworZWNobyAtLS0tLS0tLS0tLS0tLS0tLS0tLSA+PiBjb25maWd1cmUubG9nCitlY2hvICQwICQqID4+IGNvbmZpZ3VyZS5sb2cKK2RhdGUgPj4gY29uZmlndXJlLmxvZworCisjIHNldCBjb21tYW5kIHByZWZpeCBmb3IgY3Jvc3MtY29tcGlsYXRpb24KIGlmIFsgLW4gIiR7Q0hPU1R9IiBdOyB0aGVuCi0gICAgdW5hbWU9IiQoZWNobyAiJHtDSE9TVH0iIHwgc2VkIC1lICdzL15bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKSQvXDEvJyAtZSAncy9eW14tXSotW14tXSotXChbXi1dKlwpLS4qJC9cMS8nKSIKKyAgICB1bmFtZT0iYGVjaG8gIiR7Q0hPU1R9IiB8IHNlZCAtZSAncy9eW14tXSotXChbXi1dKlwpJC9cMS8nIC1lICdzL15bXi1dKi1bXi1dKi1cKFteLV0qXCkkL1wxLycgLWUgJ3MvXlteLV0qLVteLV0qLVwoW14tXSpcKS0uKiQvXDEvJ2AiCiAgICAgQ1JPU1NfUFJFRklYPSIke0NIT1NUfS0iCiBmaQogCisjIGRlc3RpbmF0aW9uIG5hbWUgZm9yIHN0YXRpYyBsaWJyYXJ5CiBTVEFUSUNMSUI9bGliei5hCi1MREZMQUdTPSIke0xERkxBR1N9IC1MLiAke1NUQVRJQ0xJQn0iCisKKyMgZXh0cmFjdCB6bGliIHZlcnNpb24gbnVtYmVycyBmcm9tIHpsaWIuaAogVkVSPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKC4qXCkiLiovXDEvcCcgPCB6bGliLmhgCiBWRVIzPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlxcLlswLTldKlwpLiovXDEvcCcgPCB6bGliLmhgCiBWRVIyPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlxcLlswLTldKlwpXFwuLiovXDEvcCcgPCB6bGliLmhgCiBWRVIxPWBzZWQgLW4gLWUgJy9WRVJTSU9OICIvcy8uKiJcKFswLTldKlwpXFwuLiovXDEvcCcgPCB6bGliLmhgCisKKyMgZXN0YWJsaXNoIGNvbW1hbmRzIGZvciBsaWJyYXJ5IGJ1aWxkaW5nCiBpZiAiJHtDUk9TU19QUkVGSVh9YXIiIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIEFSPSR7QVItIiR7Q1JPU1NfUFJFRklYfWFyIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIEFSPSR7QVItImFyIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtBUn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKLUFSX1JDPSIke0FSfSByYyIKK0FSRkxBR1M9JHtBUkZMQUdTLSJyYyJ9CiBpZiAiJHtDUk9TU19QUkVGSVh9cmFubGliIiAtLXZlcnNpb24gPi9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8fCB0ZXN0ICQ/IC1sdCAxMjY7IHRoZW4KICAgICBSQU5MSUI9JHtSQU5MSUItIiR7Q1JPU1NfUFJFRklYfXJhbmxpYiJ9Ci0gICAgdGVzdCAtbiAiJHtDUk9TU19QUkVGSVh9IiAmJiBlY2hvIFVzaW5nICR7UkFOTElCfQorICAgIHRlc3QgLW4gIiR7Q1JPU1NfUFJFRklYfSIgJiYgZWNobyBVc2luZyAke1JBTkxJQn0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIFJBTkxJQj0ke1JBTkxJQi0icmFubGliIn0KIGZpCiBpZiAiJHtDUk9TU19QUkVGSVh9bm0iIC0tdmVyc2lvbiA+L2Rldi9udWxsIDI+L2Rldi9udWxsIHx8IHRlc3QgJD8gLWx0IDEyNjsgdGhlbgogICAgIE5NPSR7Tk0tIiR7Q1JPU1NfUFJFRklYfW5tIn0KLSAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtOTX0KKyAgICB0ZXN0IC1uICIke0NST1NTX1BSRUZJWH0iICYmIGVjaG8gVXNpbmcgJHtOTX0gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQogICAgIE5NPSR7Tk0tIm5tIn0KIGZpCisKKyMgc2V0IGRlZmF1bHRzIGJlZm9yZSBwcm9jZXNzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zCiBMRENPTkZJRz0ke0xEQ09ORklHLSJsZGNvbmZpZyJ9CiBMRFNIQVJFRExJQkM9IiR7TERTSEFSRURMSUJDLS1sY30iCitBUkNIUz0KIHByZWZpeD0ke3ByZWZpeC0vdXNyL2xvY2FsfQogZXhlY19wcmVmaXg9JHtleGVjX3ByZWZpeC0nJHtwcmVmaXh9J30KIGxpYmRpcj0ke2xpYmRpci0nJHtleGVjX3ByZWZpeH0vbGliJ30KQEAgLTU0LDIwICs2NywzOSBAQAogbWFuZGlyPSR7bWFuZGlyLScke3ByZWZpeH0vc2hhcmUvbWFuJ30KIHNoYXJlZF9leHQ9Jy5zbycKIHNoYXJlZD0xCitzb2xvPTAKK2NvdmVyPTAKIHpwcmVmaXg9MAoremNvbnN0PTAKIGJ1aWxkNjQ9MAogZ2NjPTAKIG9sZF9jYz0iJENDIgogb2xkX2NmbGFncz0iJENGTEFHUyIKK09CSkM9JyQoT0JKWikgJChPQkpHKScKK1BJQ19PQkpDPSckKFBJQ19PQkpaKSAkKFBJQ19PQkpHKScKIAorIyBsZWF2ZSB0aGlzIHNjcmlwdCwgb3B0aW9uYWxseSBpbiBhIGJhZCB3YXkKK2xlYXZlKCkKK3sKKyAgaWYgdGVzdCAiJCoiICE9ICIwIjsgdGhlbgorICAgIGVjaG8gIioqICQwIGFib3J0aW5nLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBmaQorICBybSAtZiAkdGVzdC5bY29dICR0ZXN0ICR0ZXN0JHNoYXJlZF9leHQgJHRlc3QuZ2NubyAuLy0tdmVyc2lvbgorICBlY2hvIC0tLS0tLS0tLS0tLS0tLS0tLS0tID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZworICBleGl0ICQxCit9CisKKyMgcHJvY2VzcyBjb21tYW5kIGxpbmUgb3B0aW9ucwogd2hpbGUgdGVzdCAkIyAtZ2UgMQogZG8KIGNhc2UgIiQxIiBpbgogICAgIC1oKiB8IC0taGVscCkKLSAgICAgIGVjaG8gJ3VzYWdlOicKLSAgICAgIGVjaG8gJyAgY29uZmlndXJlIFstLXpwcmVmaXhdIFstLXByZWZpeD1QUkVGSVhdICBbLS1lcHJlZml4PUVYUFJFRklYXScKLSAgICAgIGVjaG8gJyAgICBbLS1zdGF0aWNdIFstLTY0XSBbLS1saWJkaXI9TElCRElSXSBbLS1zaGFyZWRsaWJkaXI9TElCRElSXScKLSAgICAgIGVjaG8gJyAgICBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdJworICAgICAgZWNobyAndXNhZ2U6JyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgIGNvbmZpZ3VyZSBbLS1jb25zdF0gWy0tenByZWZpeF0gWy0tcHJlZml4PVBSRUZJWF0gIFstLWVwcmVmaXg9RVhQUkVGSVhdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICcgICAgWy0tc3RhdGljXSBbLS02NF0gWy0tbGliZGlyPUxJQkRJUl0gWy0tc2hhcmVkbGliZGlyPUxJQkRJUl0nIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gJyAgICBbLS1pbmNsdWRlZGlyPUlOQ0xVREVESVJdIFstLWFyY2hzPSItYXJjaCBpMzg2IC1hcmNoIHg4Nl82NCJdJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgICAgIGV4aXQgMCA7OwogICAgIC1wKj0qIHwgLS1wcmVmaXg9KikgcHJlZml4PWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CiAgICAgLWUqPSogfCAtLWVwcmVmaXg9KikgZXhlY19wcmVmaXg9YGVjaG8gJDEgfCBzZWQgJ3MvLio9Ly8nYDsgc2hpZnQgOzsKQEAgLTgxLDUxICsxMTMsODggQEAKICAgICAtaSogfCAtLWluY2x1ZGVkaXIpIGluY2x1ZGVkaXI9IiQyIjsgc2hpZnQ7IHNoaWZ0IDs7CiAgICAgLXMqIHwgLS1zaGFyZWQgfCAtLWVuYWJsZS1zaGFyZWQpIHNoYXJlZD0xOyBzaGlmdCA7OwogICAgIC10IHwgLS1zdGF0aWMpIHNoYXJlZD0wOyBzaGlmdCA7OworICAgIC0tc29sbykgc29sbz0xOyBzaGlmdCA7OworICAgIC0tY292ZXIpIGNvdmVyPTE7IHNoaWZ0IDs7CiAgICAgLXoqIHwgLS16cHJlZml4KSB6cHJlZml4PTE7IHNoaWZ0IDs7CiAgICAgLTYqIHwgLS02NCkgYnVpbGQ2ND0xOyBzaGlmdCA7OwotICAgIC0tc3lzY29uZmRpcj0qKSBlY2hvICJpZ25vcmVkIG9wdGlvbjogLS1zeXNjb25mZGlyIjsgc2hpZnQgOzsKLSAgICAtLWxvY2Fsc3RhdGVkaXI9KikgZWNobyAiaWdub3JlZCBvcHRpb246IC0tbG9jYWxzdGF0ZWRpciI7IHNoaWZ0IDs7Ci0gICAgKikgZWNobyAidW5rbm93biBvcHRpb246ICQxIjsgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIjsgZXhpdCAxIDs7CisgICAgLWEqPSogfCAtLWFyY2hzPSopIEFSQ0hTPWBlY2hvICQxIHwgc2VkICdzLy4qPS8vJ2A7IHNoaWZ0IDs7CisgICAgLS1zeXNjb25mZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLXN5c2NvbmZkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLS1sb2NhbHN0YXRlZGlyPSopIGVjaG8gImlnbm9yZWQgb3B0aW9uOiAtLWxvY2Fsc3RhdGVkaXIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2c7IHNoaWZ0IDs7CisgICAgLWMqIHwgLS1jb25zdCkgemNvbnN0PTE7IHNoaWZ0IDs7CisgICAgKikKKyAgICAgIGVjaG8gInVua25vd24gb3B0aW9uOiAkMSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBsZWF2ZSAxOzsKICAgICBlc2FjCiBkb25lCiAKKyMgdGVtcG9yYXJ5IGZpbGUgbmFtZQogdGVzdD16dGVzdCQkCisKKyMgcHV0IGFyZ3VtZW50cyBpbiBsb2csIGFsc28gcHV0IHRlc3QgZmlsZSBpbiBsb2cgaWYgdXNlZCBpbiBhcmd1bWVudHMKK3Nob3coKQoreworICBjYXNlICIkKiIgaW4KKyAgICAqJHRlc3QuYyopCisgICAgICBlY2hvID09PSAkdGVzdC5jID09PSA+PiBjb25maWd1cmUubG9nCisgICAgICBjYXQgJHRlc3QuYyA+PiBjb25maWd1cmUubG9nCisgICAgICBlY2hvID09PSA+PiBjb25maWd1cmUubG9nOzsKKyAgZXNhYworICBlY2hvICQqID4+IGNvbmZpZ3VyZS5sb2cKK30KKworIyBjaGVjayBmb3IgZ2NjIHZzLiBjYyBhbmQgc2V0IGNvbXBpbGUgYW5kIGxpbmsgZmxhZ3MgYmFzZWQgb24gdGhlIHN5c3RlbSBpZGVudGlmaWVkIGJ5IHVuYW1lCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiBleHRlcm4gaW50IGdldGNoYXIoKTsKIGludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hhcigpO30KIEVPRgogCi10ZXN0IC16ICIkQ0MiICYmIGVjaG8gQ2hlY2tpbmcgZm9yICR7Q1JPU1NfUFJFRklYfWdjYy4uLgordGVzdCAteiAiJENDIiAmJiBlY2hvIENoZWNraW5nIGZvciAke0NST1NTX1BSRUZJWH1nY2MuLi4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogY2M9JHtDQy0ke0NST1NTX1BSRUZJWH1nY2N9CiBjZmxhZ3M9JHtDRkxBR1MtIi1PMyJ9CiAjIHRvIGZvcmNlIHRoZSBhc20gdmVyc2lvbiB1c2U6IENGTEFHUz0iLU8zIC1EQVNNViIgLi9jb25maWd1cmUKIGNhc2UgIiRjYyIgaW4KICAgKmdjYyopIGdjYz0xIDs7CisgICpjbGFuZyopIGdjYz0xIDs7Citlc2FjCitjYXNlIGAkY2MgLXYgMj4mMWAgaW4KKyAgKmdjYyopIGdjYz0xIDs7CiBlc2FjCiAKLWlmIHRlc3QgIiRnY2MiIC1lcSAxICYmICgkY2MgLWMgJGNmbGFncyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgorc2hvdyAkY2MgLWMgJHRlc3QuYworaWYgdGVzdCAiJGdjYyIgLWVxIDEgJiYgKCRjYyAtYyAkdGVzdC5jKSA+PiBjb25maWd1cmUubG9nIDI+JjE7IHRoZW4KKyAgZWNobyAuLi4gdXNpbmcgZ2NjID4+IGNvbmZpZ3VyZS5sb2cKICAgQ0M9IiRjYyIKKyAgQ0ZMQUdTPSIke0NGTEFHUy0tTzN9ICR7QVJDSFN9IgogICBTRkxBR1M9IiR7Q0ZMQUdTLS1PM30gLWZQSUMiCi0gIENGTEFHUz0iJHtDRkxBR1MtLU8zfSIKKyAgTERGTEFHUz0iJHtMREZMQUdTfSAke0FSQ0hTfSIKICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgogICAgIENGTEFHUz0iJHtDRkxBR1N9IC1tNjQiCiAgICAgU0ZMQUdTPSIke1NGTEFHU30gLW02NCIKICAgZmkKICAgaWYgdGVzdCAiJHtaTElCR0NDV0FSTn0iID0gIllFUyI7IHRoZW4KLSAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtV2FsbCAtV2V4dHJhIC1wZWRhbnRpYyIKKyAgICBpZiB0ZXN0ICIkemNvbnN0IiAtZXEgMTsgdGhlbgorICAgICAgQ0ZMQUdTPSIke0NGTEFHU30gLVdhbGwgLVdleHRyYSAtV2Nhc3QtcXVhbCAtcGVkYW50aWMgLURaTElCX0NPTlNUIgorICAgIGVsc2UKKyAgICAgIENGTEFHUz0iJHtDRkxBR1N9IC1XYWxsIC1XZXh0cmEgLXBlZGFudGljIgorICAgIGZpCiAgIGZpCiAgIGlmIHRlc3QgLXogIiR1bmFtZSI7IHRoZW4KICAgICB1bmFtZT1gKHVuYW1lIC1zIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgCiAgIGZpCiAgIGNhc2UgIiR1bmFtZSIgaW4KLSAgTGludXgqIHwgbGludXgqIHwgR05VIHwgR05VLyogfCAqQlNEIHwgRHJhZ29uRmx5KSBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9IDs7CisgIExpbnV4KiB8IGxpbnV4KiB8IEdOVSB8IEdOVS8qIHwgc29sYXJpcyopCisgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtc29uYW1lLGxpYnouc28uMSwtLXZlcnNpb24tc2NyaXB0LHpsaWIubWFwIn0gOzsKKyAgKkJTRCB8ICpic2QqIHwgRHJhZ29uRmx5KQorICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLXNoYXJlZCAtV2wsLXNvbmFtZSxsaWJ6LnNvLjEsLS12ZXJzaW9uLXNjcmlwdCx6bGliLm1hcCJ9CisgICAgICAgIExEQ09ORklHPSJsZGNvbmZpZyAtbSIgOzsKICAgQ1lHV0lOKiB8IEN5Z3dpbiogfCBjeWd3aW4qIHwgT1MvMiopCiAgICAgICAgIEVYRT0nLmV4ZScgOzsKLSAgTUlOR1cqfG1pbmd3KikKKyAgTUlOR1cqIHwgbWluZ3cqKQogIyB0ZW1wb3JhcnkgYnlwYXNzCiAgICAgICAgIHJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAotICAgICAgICBlY2hvICJQbGVhc2UgdXNlIHdpbjMyL01ha2VmaWxlLmdjYyBpbnN0ZWFkLiIKLSAgICAgICAgZXhpdCAxCisgICAgICAgIGVjaG8gIlBsZWFzZSB1c2Ugd2luMzIvTWFrZWZpbGUuZ2NjIGluc3RlYWQuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICAgIGxlYXZlIDEKICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQifQogICAgICAgICBMRFNIQVJFRExJQkM9IiIKICAgICAgICAgRVhFPScuZXhlJyA7OwpAQCAtMTQyLDE3ICsyMTEsMjUgQEAKICAgICAgICAgICAgICAgICAgc2hhcmVkX2V4dD0nLnNsJwogICAgICAgICAgICAgICAgICBTSEFSRURMSUI9J2xpYnouc2wnIDs7CiAgICAgICAgICBlc2FjIDs7Ci0gIERhcndpbiopICAgc2hhcmVkX2V4dD0nLmR5bGliJworICBEYXJ3aW4qIHwgZGFyd2luKikKKyAgICAgICAgICAgICBzaGFyZWRfZXh0PScuZHlsaWInCiAgICAgICAgICAgICAgU0hBUkVETElCPWxpYnokc2hhcmVkX2V4dAogICAgICAgICAgICAgIFNIQVJFRExJQlY9bGliei4kVkVSJHNoYXJlZF9leHQKICAgICAgICAgICAgICBTSEFSRURMSUJNPWxpYnouJFZFUjEkc2hhcmVkX2V4dAotICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtZHluYW1pY2xpYiAtaW5zdGFsbF9uYW1lICRsaWJkaXIvJFNIQVJFRExJQk0gLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkVkVSMSAtY3VycmVudF92ZXJzaW9uICRWRVIzIn0gOzsKKyAgICAgICAgICAgICBMRFNIQVJFRD0ke0xEU0hBUkVELSIkY2MgLWR5bmFtaWNsaWIgLWluc3RhbGxfbmFtZSAkbGliZGlyLyRTSEFSRURMSUJNIC1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJFZFUjEgLWN1cnJlbnRfdmVyc2lvbiAkVkVSMyJ9CisgICAgICAgICAgICAgaWYgbGlidG9vbCAtViAyPiYxIHwgZ3JlcCBBcHBsZSA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgICBBUj0ibGlidG9vbCIKKyAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIEFSPSIvdXNyL2Jpbi9saWJ0b29sIgorICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgQVJGTEFHUz0iLW8iIDs7CiAgICopICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIn0gOzsKICAgZXNhYwogZWxzZQogICAjIGZpbmQgc3lzdGVtIG5hbWUgYW5kIGNvcnJlc3BvbmRpbmcgY2Mgb3B0aW9ucwogICBDQz0ke0NDLWNjfQogICBnY2M9MAorICBlY2hvIC4uLiB1c2luZyAkQ0MgPj4gY29uZmlndXJlLmxvZwogICBpZiB0ZXN0IC16ICIkdW5hbWUiOyB0aGVuCiAgICAgdW5hbWU9YCh1bmFtZSAtc3IgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAKICAgZmkKQEAgLTE4MywxOSArMjYwLDM0IEBACiAgICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItNCAtTyJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MifQogICAgICAgICAgICAgIFJBTkxJQj0ke1JBTkxJQi0idHJ1ZSJ9Ci0gICAgICAgICAgICAgQVJfUkM9ImNjIC1BIiA7OworICAgICAgICAgICAgIEFSPSJjYyIKKyAgICAgICAgICAgICBBUkZMQUdTPSItQSIgOzsKICAgU0NPX1NWXCAzLjIqKSBTRkxBR1M9JHtDRkxBR1MtIi1PMyAtZHkgLUtQSUMgIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PMyJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0iY2MgLWR5IC1LUElDIC1HIn0gOzsKLSAgU3VuT1NcIDUqKSBMRFNIQVJFRD0ke0xEU0hBUkVELSJjYyAtRyJ9Ci0gICAgICAgICBjYXNlIGAodW5hbWUgLW0gfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICAgIGk4NiopCi0gICAgICAgICAgICAgU0ZMQUdTPSR7Q0ZMQUdTLSIteHBlbnRpdW0gLWZhc3QgLUtQSUMgLVIuIn0KLSAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi14cGVudGl1bSAtZmFzdCJ9IDs7Ci0gICAgICAgICAqKQotICAgICAgICAgICAgIFNGTEFHUz0ke0NGTEFHUy0iLWZhc3QgLXhjZzkyIC1LUElDIC1SLiJ9Ci0gICAgICAgICAgICAgQ0ZMQUdTPSR7Q0ZMQUdTLSItZmFzdCAteGNnOTIifSA7OwotICAgICAgICAgZXNhYyA7OworICBTdW5PU1wgNSogfCBzb2xhcmlzKikKKyAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtImNjIC1HIC1oIGxpYnokc2hhcmVkX2V4dC4kVkVSMSJ9CisgICAgICAgICBTRkxBR1M9JHtDRkxBR1MtIi1mYXN0IC1LUElDIn0KKyAgICAgICAgIENGTEFHUz0ke0NGTEFHUy0iLWZhc3QifQorICAgICAgICAgaWYgdGVzdCAkYnVpbGQ2NCAtZXEgMTsgdGhlbgorICAgICAgICAgICAgICMgb2xkIHZlcnNpb25zIG9mIFN1blBSTy9Xb3Jrc2hvcC9TdHVkaW8gZG9uJ3Qgc3VwcG9ydCAtbTY0LAorICAgICAgICAgICAgICMgYnV0IG5ld2VyIG9uZXMgZG8uICBDaGVjayBmb3IgaXQuCisgICAgICAgICAgICAgZmxhZzY0PWAkQ0MgLWZsYWdzIHwgZWdyZXAgLS0gJ14tbTY0J2AKKyAgICAgICAgICAgICBpZiB0ZXN0IHgiJGZsYWc2NCIgIT0geCIiIDsgdGhlbgorICAgICAgICAgICAgICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtbTY0IgorICAgICAgICAgICAgICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtbTY0IgorICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgY2FzZSBgKHVuYW1lIC1tIHx8IGVjaG8gdW5rbm93bikgMj4vZGV2L251bGxgIGluCisgICAgICAgICAgICAgICAgICAgaTg2KikKKyAgICAgICAgICAgICAgICAgICAgIFNGTEFHUz0iJFNGTEFHUyAteGFyY2g9YW1kNjQiCisgICAgICAgICAgICAgICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXhhcmNoPWFtZDY0IiA7OworICAgICAgICAgICAgICAgICAgICopCisgICAgICAgICAgICAgICAgICAgICBTRkxBR1M9IiRTRkxBR1MgLXhhcmNoPXY5IgorICAgICAgICAgICAgICAgICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC14YXJjaD12OSIgOzsKKyAgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICAgICAgOzsKICAgU3VuT1NcIDQqKSBTRkxBR1M9JHtDRkxBR1MtIi1PMiAtUElDIn0KICAgICAgICAgICAgICBDRkxBR1M9JHtDRkxBR1MtIi1PMiJ9CiAgICAgICAgICAgICAgTERTSEFSRUQ9JHtMRFNIQVJFRC0ibGQifSA7OwpAQCAtMjI1LDI1ICszMTcsNzkgQEAKICAgZXNhYwogZmkKIAorIyBkZXN0aW5hdGlvbiBuYW1lcyBmb3Igc2hhcmVkIGxpYnJhcnkgaWYgbm90IGRlZmluZWQgYWJvdmUKIFNIQVJFRExJQj0ke1NIQVJFRExJQi0ibGlieiRzaGFyZWRfZXh0In0KIFNIQVJFRExJQlY9JHtTSEFSRURMSUJWLSJsaWJ6JHNoYXJlZF9leHQuJFZFUiJ9CiBTSEFSRURMSUJNPSR7U0hBUkVETElCTS0ibGlieiRzaGFyZWRfZXh0LiRWRVIxIn0KIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgZGVmaW5lIGZ1bmN0aW9ucyBmb3IgdGVzdGluZyBjb21waWxlciBhbmQgbGlicmFyeSBjaGFyYWN0ZXJpc3RpY3MgYW5kIGxvZ2dpbmcgdGhlIHJlc3VsdHMKKworY2F0ID4gJHRlc3QuYyA8PEVPRgorI2Vycm9yIGVycm9yCitFT0YKK2lmICgkQ0MgLWMgJENGTEFHUyAkdGVzdC5jKSAyPi9kZXYvbnVsbDsgdGhlbgorICB0cnkoKQorICB7CisgICAgc2hvdyAkKgorICAgIHRlc3QgImAoICQqICkgMj4mMSB8IHRlZSAtYSBjb25maWd1cmUubG9nYCIgPSAiIgorICB9CisgIGVjaG8gLSB1c2luZyBhbnkgb3V0cHV0IGZyb20gY29tcGlsZXIgdG8gaW5kaWNhdGUgYW4gZXJyb3IgPj4gY29uZmlndXJlLmxvZworZWxzZQordHJ5KCkKK3sKKyAgc2hvdyAkKgorICAoICQqICkgPj4gY29uZmlndXJlLmxvZyAyPiYxCisgIHJldD0kPworICBpZiB0ZXN0ICRyZXQgLW5lIDA7IHRoZW4KKyAgICBlY2hvICIoZXhpdCBjb2RlICIkcmV0IikiID4+IGNvbmZpZ3VyZS5sb2cKKyAgZmkKKyAgcmV0dXJuICRyZXQKK30KK2ZpCisKK3RyeWJvdGgoKQoreworICBzaG93ICQqCisgIGdvdD1gKCAkKiApIDI+JjFgCisgIHJldD0kPworICBwcmludGYgJXMgIiRnb3QiID4+IGNvbmZpZ3VyZS5sb2cKKyAgaWYgdGVzdCAkcmV0IC1uZSAwOyB0aGVuCisgICAgcmV0dXJuICRyZXQKKyAgZmkKKyAgdGVzdCAiJGdvdCIgPSAiIgorfQorCitjYXQgPiAkdGVzdC5jIDw8IEVPRgoraW50IGZvbygpIHsgcmV0dXJuIDA7IH0KK0VPRgorZWNobyAiQ2hlY2tpbmcgZm9yIG9ic2Vzc2l2ZS1jb21wdWxzaXZlIGNvbXBpbGVyIG9wdGlvbnMuLi4iID4+IGNvbmZpZ3VyZS5sb2cKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiQ29tcGlsZXIgZXJyb3IgcmVwb3J0aW5nIGlzIHRvbyBoYXJzaCBmb3IgJDAgKHBlcmhhcHMgcmVtb3ZlIC1XZXJyb3IpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBsZWF2ZSAxCitmaQorCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBzZWUgaWYgc2hhcmVkIGxpYnJhcnkgYnVpbGQgc3VwcG9ydGVkCitjYXQgPiAkdGVzdC5jIDw8RU9GCitleHRlcm4gaW50IGdldGNoYXIoKTsKK2ludCBoZWxsbygpIHtyZXR1cm4gZ2V0Y2hhcigpO30KK0VPRgogaWYgdGVzdCAkc2hhcmVkIC1lcSAxOyB0aGVuCi0gIGVjaG8gQ2hlY2tpbmcgZm9yIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuLi4KKyAgZWNobyBDaGVja2luZyBmb3Igc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4uLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICMgd2UgbXVzdCB0ZXN0IGluIHR3byBzdGVwcyAoY2MgdGhlbiBsZCksIHJlcXVpcmVkIGF0IGxlYXN0IG9uIFN1bk9TIDQueAotICBpZiB0ZXN0ICJgKCRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiICYmCi0gICAgIHRlc3QgImAoJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gQnVpbGRpbmcgc2hhcmVkIGxpYnJhcnkgJFNIQVJFRExJQlYgd2l0aCAkQ0MuCisgIGlmIHRyeSAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jICYmCisgICAgIHRyeSAkTERTSEFSRUQgJFNGTEFHUyAtbyAkdGVzdCRzaGFyZWRfZXh0ICR0ZXN0Lm87IHRoZW4KKyAgICBlY2hvIEJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5ICRTSEFSRURMSUJWIHdpdGggJENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsaWYgdGVzdCAteiAiJG9sZF9jYyIgLWEgLXogIiRvbGRfY2ZsYWdzIjsgdGhlbgotICAgIGVjaG8gTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4KKyAgICBlY2hvIE5vIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBzaGFyZWQ9MDsKICAgZWxzZQotICAgIGVjaG8gVGVzdGVkICRDQyAtdyAtYyAkU0ZMQUdTICR0ZXN0LmMKLSAgICAkQ0MgLXcgLWMgJFNGTEFHUyAkdGVzdC5jCi0gICAgZWNobyBUZXN0ZWQgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vCi0gICAgJExEU0hBUkVEICRTRkxBR1MgLW8gJHRlc3Qkc2hhcmVkX2V4dCAkdGVzdC5vCi0gICAgZWNobyAnTm8gc2hhcmVkIGxpYnJhcnkgc3VwcG9ydDsgdHJ5IHdpdGhvdXQgZGVmaW5pbmcgQ0MgYW5kIENGTEFHUycKKyAgICBlY2hvICdObyBzaGFyZWQgbGlicmFyeSBzdXBwb3J0OyB0cnkgd2l0aG91dCBkZWZpbmluZyBDQyBhbmQgQ0ZMQUdTJyB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgc2hhcmVkPTA7CiAgIGZpCiBmaQpAQCAtMjU0LDI1ICs0MDAsNDMgQEAKICAgU0hBUkVETElCPSIiCiAgIFNIQVJFRExJQlY9IiIKICAgU0hBUkVETElCTT0iIgotICBlY2hvIEJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJ5ICRTVEFUSUNMSUIgdmVyc2lvbiAkVkVSIHdpdGggJENDLgorICBlY2hvIEJ1aWxkaW5nIHN0YXRpYyBsaWJyYXJ5ICRTVEFUSUNMSUIgdmVyc2lvbiAkVkVSIHdpdGggJENDLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCiAgIEFMTD0ic3RhdGljIHNoYXJlZCIKICAgVEVTVD0iYWxsIHRlc3RzdGF0aWMgdGVzdHNoYXJlZCIKIGZpCiAKKyMgY2hlY2sgZm9yIHVuZGVyc2NvcmVzIGluIGV4dGVybmFsIG5hbWVzIGZvciB1c2UgYnkgYXNzZW1ibGVyIGNvZGUKK0NQUD0ke0NQUC0iJENDIC1FIn0KK2Nhc2UgJENGTEFHUyBpbgorICAqQVNNViopCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCisgICAgc2hvdyAiJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyIKKyAgICBpZiB0ZXN0ICJgJE5NICR0ZXN0Lm8gfCBncmVwIF9oZWxsbyB8IHRlZSAtYSBjb25maWd1cmUubG9nYCIgPSAiIjsgdGhlbgorICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5FIgorICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIE5vLiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWxzZQorICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIFllcy4gfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGZpIDs7Citlc2FjCisKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBsYXJnZSBmaWxlIHN1cHBvcnQsIGFuZCBpZiBub25lLCBjaGVjayBmb3IgZnNlZWtvKCkKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIG9mZjY0X3QgZHVtbXkgPSAwOwogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTIC1EX0xBUkdFRklMRTY0X1NPVVJDRT0xICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCitpZiB0cnkgJENDIC1jICRDRkxBR1MgLURfTEFSR0VGSUxFNjRfU09VUkNFPTEgJHRlc3QuYzsgdGhlbgogICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRF9MQVJHRUZJTEU2NF9TT1VSQ0U9MSIKICAgU0ZMQUdTPSIke1NGTEFHU30gLURfTEFSR0VGSUxFNjRfU09VUkNFPTEiCiAgIEFMTD0iJHtBTEx9IGFsbDY0IgogICBURVNUPSIke1RFU1R9IHRlc3Q2NCIKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gWWVzLiIKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIgorICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgIGVjaG8gIkNoZWNraW5nIGZvciBmc2Vla28uLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZWxzZQotICBlY2hvICJDaGVja2luZyBmb3Igb2ZmNjRfdC4uLiBOby4iCisgIGVjaG8gIkNoZWNraW5nIGZvciBvZmY2NF90Li4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CiBpbnQgbWFpbih2b2lkKSB7CkBAIC0yODAsMjcyICs0NDQsMzM1IEBACiAgIHJldHVybiAwOwogfQogRU9GCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIFllcy4iCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGZzZWVrby4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGVsc2UKICAgICBDRkxBR1M9IiR7Q0ZMQUdTfSAtRE5PX0ZTRUVLTyIKICAgICBTRkxBR1M9IiR7U0ZMQUdTfSAtRE5PX0ZTRUVLTyIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIE5vLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgZnNlZWtvLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICBmaQogZmkKIAorZWNobyA+PiBjb25maWd1cmUubG9nCisKKyMgY2hlY2sgZm9yIHN0cmVycm9yKCkgZm9yIHVzZSBieSBneiogZnVuY3Rpb25zCitjYXQgPiAkdGVzdC5jIDw8RU9GCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KK2ludCBtYWluKCkgeyByZXR1cm4gc3RybGVuKHN0cmVycm9yKGVycm5vKSk7IH0KK0VPRgoraWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0cmVycm9yLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKK2Vsc2UKKyAgQ0ZMQUdTPSIke0NGTEFHU30gLUROT19TVFJFUlJPUiIKKyAgU0ZMQUdTPSIke1NGTEFHU30gLUROT19TVFJFUlJPUiIKKyAgZWNobyAiQ2hlY2tpbmcgZm9yIHN0cmVycm9yLi4uIE5vLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZmkKKworIyBjb3B5IGNsZWFuIHpjb25mLmggZm9yIHN1YnNlcXVlbnQgZWRpdHMKIGNwIC1wIHpjb25mLmguaW4gemNvbmYuaAogCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjaGVjayBmb3IgdW5pc3RkLmggYW5kIHNhdmUgcmVzdWx0IGluIHpjb25mLmgKIGNhdCA+ICR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDx1bmlzdGQuaD4KIGludCBtYWluKCkgeyByZXR1cm4gMDsgfQogRU9GCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgogICBzZWQgPCB6Y29uZi5oICIvXiNpZmRlZiBIQVZFX1VOSVNURF9ILiogbWF5IGJlL3MvZGVmIEhBVkVfVU5JU1REX0hcKC4qXCkgbWF5IGJlLyAxXDEgd2FzLyIgPiB6Y29uZi50ZW1wLmgKICAgbXYgemNvbmYudGVtcC5oIHpjb25mLmgKLSAgZWNobyAiQ2hlY2tpbmcgZm9yIHVuaXN0ZC5oLi4uIFllcy4iCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiBlbHNlCi0gIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBOby4iCisgIGVjaG8gIkNoZWNraW5nIGZvciB1bmlzdGQuaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIGZpCiAKK2VjaG8gPj4gY29uZmlndXJlLmxvZworCisjIGNoZWNrIGZvciBzdGRhcmcuaCBhbmQgc2F2ZSByZXN1bHQgaW4gemNvbmYuaAorY2F0ID4gJHRlc3QuYyA8PEVPRgorI2luY2x1ZGUgPHN0ZGFyZy5oPgoraW50IG1haW4oKSB7IHJldHVybiAwOyB9CitFT0YKK2lmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgIHNlZCA8IHpjb25mLmggIi9eI2lmZGVmIEhBVkVfU1REQVJHX0guKiBtYXkgYmUvcy9kZWYgSEFWRV9TVERBUkdfSFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAorICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworZWxzZQorICBlY2hvICJDaGVja2luZyBmb3Igc3RkYXJnLmguLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCitmaQorCisjIGlmIHRoZSB6XyBwcmVmaXggd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmgKIGlmIHRlc3QgJHpwcmVmaXggLWVxIDE7IHRoZW4KICAgc2VkIDwgemNvbmYuaCAiLyNpZmRlZiBaX1BSRUZJWC4qIG1heSBiZS9zL2RlZiBaX1BSRUZJWFwoLipcKSBtYXkgYmUvIDFcMSB3YXMvIiA+IHpjb25mLnRlbXAuaAogICBtdiB6Y29uZi50ZW1wLmggemNvbmYuaAotICBlY2hvICJVc2luZyB6XyBwcmVmaXggb24gYWxsIHN5bWJvbHMuIgorICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKyAgZWNobyAiVXNpbmcgel8gcHJlZml4IG9uIGFsbCBzeW1ib2xzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogZmkKIAorIyBpZiAtLXNvbG8gY29tcGlsYXRpb24gd2FzIHJlcXVlc3RlZCwgc2F2ZSB0aGF0IGluIHpjb25mLmggYW5kIHJlbW92ZSBneiBzdHVmZiBmcm9tIG9iamVjdCBsaXN0cworaWYgdGVzdCAkc29sbyAtZXEgMTsgdGhlbgorICBzZWQgJy8jZGVmaW5lIFpDT05GX0gvYVwKKyNkZWZpbmUgWl9TT0xPCisKKycgPCB6Y29uZi5oID4gemNvbmYudGVtcC5oCisgIG12IHpjb25mLnRlbXAuaCB6Y29uZi5oCitPQkpDPSckKE9CSlopJworUElDX09CSkM9JyQoUElDX09CSlopJworZmkKKworIyBpZiBjb2RlIGNvdmVyYWdlIHRlc3Rpbmcgd2FzIHJlcXVlc3RlZCwgdXNlIG9sZGVyIGdjYyBpZiBkZWZpbmVkLCBlLmcuICJnY2MtNC4yIiBvbiBNYWMgT1MgWAoraWYgdGVzdCAkY292ZXIgLWVxIDE7IHRoZW4KKyAgQ0ZMQUdTPSIke0NGTEFHU30gLWZwcm9maWxlLWFyY3MgLWZ0ZXN0LWNvdmVyYWdlIgorICBpZiB0ZXN0IC1uICIkR0NDX0NMQVNTSUMiOyB0aGVuCisgICAgQ0M9JEdDQ19DTEFTU0lDCisgIGZpCitmaQorCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKKworIyBjb25kdWN0IGEgc2VyaWVzIG9mIHRlc3RzIHRvIHJlc29sdmUgZWlnaHQgcG9zc2libGUgY2FzZXMgb2YgdXNpbmcgInZzIiBvciAicyIgcHJpbnRmIGZ1bmN0aW9ucworIyAodXNpbmcgc3RkYXJnIG9yIG5vdCksIHdpdGggb3Igd2l0aG91dCAibiIgKHByb3Zpbmcgc2l6ZSBvZiBidWZmZXIpLCBhbmQgd2l0aCBvciB3aXRob3V0IGEKKyMgcmV0dXJuIHZhbHVlLiAgVGhlIG1vc3Qgc2VjdXJlIHJlc3VsdCBpcyB2c25wcmludGYoKSB3aXRoIGEgcmV0dXJuIHZhbHVlLiAgc25wcmludGYoKSB3aXRoIGEKKyMgcmV0dXJuIHZhbHVlIGlzIHNlY3VyZSBhcyB3ZWxsLCBidXQgdGhlbiBnenByaW50ZigpIHdpbGwgYmUgbGltaXRlZCB0byAyMCBhcmd1bWVudHMuCiBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlICJ6Y29uZi5oIgotCiBpbnQgbWFpbigpCiB7CiAjaWZuZGVmIFNUREMKICAgY2hva2UgbWUKICNlbmRpZgotCiAgIHJldHVybiAwOwogfQogRU9GCitpZiB0cnkgJENDIC1jICRDRkxBR1MgJHRlc3QuYzsgdGhlbgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyB2c1tuXXByaW50ZigpLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCi1pZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHZzW25dcHJpbnRmKCkuIgotCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiAwOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKKyAgaWYgdHJ5ICRDQyAkQ0ZMQUdTIC1vICR0ZXN0ICR0ZXN0LmM7IHRoZW4KKyAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKLSAgaWYgdGVzdCAiYCgkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgotICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCi0KKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGFyZy5oPgotCiBpbnQgbXl0ZXN0KGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwotCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwogICBuID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwogICB2YV9lbmQoYXApOwogICByZXR1cm4gbjsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgiSGVsbG8lZFxuIiwgMSkpOwogfQogRU9GCiAKLSAgICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzbnByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKICAgICAgIFNGTEFHUz0iJFNGTEFHUyAtREhBU192c25wcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzbnByaW50ZigpIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLiB6bGliIgotICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IgotICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIgorICAgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHJldHVybiB2YWx1ZSBvZiB2c25wcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSB2c25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBlbHNlCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fdnNucHJpbnRmIgogICAgIFNGTEFHUz0iJFNGTEFHUyAtRE5PX3ZzbnByaW50ZiIKLSAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iCi0gICAgZWNobyAiICBXQVJOSU5HOiB2c25wcmludGYoKSBub3QgZm91bmQsIGZhbGxpbmcgYmFjayB0byB2c3ByaW50ZigpLiB6bGliIgotICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgYnVmZmVyLW92ZXJmbG93IHNlY3VyaXR5IgotICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgdnNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIFdBUk5JTkc6IHZzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHZzcHJpbnRmKCkuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgIGVjaG8gIiAgdnVsbmVyYWJpbGl0aWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogCisgICAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgICAgY2F0ID4kdGVzdC5jIDw8RU9GCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLQogaW50IG15dGVzdChjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKICAgaW50IG47CiAgIGNoYXIgYnVmWzIwXTsKICAgdmFfbGlzdCBhcDsKLQogICB2YV9zdGFydChhcCwgZm10KTsKICAgbiA9IHZzcHJpbnRmKGJ1ZiwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7CiAgIHJldHVybiBuOwogfQotCiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAobXl0ZXN0KCJIZWxsbyVkXG4iLCAxKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2YgdnNwcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU192c3ByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3ZzcHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHZzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHZzcHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgdnNwcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBmaQogZWxzZQotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyBzW25dcHJpbnRmKCkuIgorICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c1tuXXByaW50ZigpIG9yIHNbbl1wcmludGYoKS4uLiB1c2luZyBzW25dcHJpbnRmKCkuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgZWNobyA+PiBjb25maWd1cmUubG9nCiAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzIiwgImZvbyIpOwogICByZXR1cm4gMDsKIH0KLQogaW50IG1haW4oKQogewogICByZXR1cm4gKG15dGVzdCgpKTsKIH0KIEVPRgogCi0gIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCisgIGlmIHRyeSAkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jOyB0aGVuCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBZZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAKKyAgICBlY2hvID4+IGNvbmZpZ3VyZS5sb2cKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotCiBpbnQgbXl0ZXN0KCkKIHsKICAgY2hhciBidWZbMjBdOwotCiAgIHJldHVybiBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCAiZm9vIik7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc25wcmludGYoKS4uLiBZZXMuIgorICAgIGlmIHRyeSAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gWWVzLiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZwogICAgIGVsc2UKICAgICAgIENGTEFHUz0iJENGTEFHUyAtREhBU19zbnByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3NucHJpbnRmX3ZvaWQiCi0gICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gTm8uIgotICAgICAgZWNobyAiICBXQVJOSU5HOiBhcHBhcmVudGx5IHNucHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNucHJpbnRmKCkuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIFdBUk5JTkc6IGFwcGFyZW50bHkgc25wcmludGYoKSBkb2VzIG5vdCByZXR1cm4gYSB2YWx1ZS4gemxpYiIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBzdHJpbmctZm9ybWF0IHNlY3VyaXR5IiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBmaQogICBlbHNlCiAgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ETk9fc25wcmludGYiCiAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ETk9fc25wcmludGYiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iCi0gICAgZWNobyAiICBXQVJOSU5HOiBzbnByaW50ZigpIG5vdCBmb3VuZCwgZmFsbGluZyBiYWNrIHRvIHNwcmludGYoKS4gemxpYiIKLSAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIGJ1ZmZlci1vdmVyZmxvdyBzZWN1cml0eSIKLSAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIHNucHJpbnRmKCkgaW4gc3RkaW8uaC4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIFdBUk5JTkc6IHNucHJpbnRmKCkgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gc3ByaW50ZigpLiB6bGliIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCisgICAgZWNobyAiICBjYW4gYnVpbGQgYnV0IHdpbGwgYmUgb3BlbiB0byBwb3NzaWJsZSBidWZmZXItb3ZlcmZsb3cgc2VjdXJpdHkiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKIAorICAgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICAgIGNhdCA+JHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KIGludCBteXRlc3QoKQogewogICBjaGFyIGJ1ZlsyMF07Ci0KICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJXMiLCAiZm9vIik7CiB9Ci0KIGludCBtYWluKCkKIHsKICAgcmV0dXJuIChteXRlc3QoKSk7CiB9CiBFT0YKIAotICAgIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iCisgICAgaWYgdHJ5ICRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmM7IHRoZW4KKyAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgICBlbHNlCiAgICAgICBDRkxBR1M9IiRDRkxBR1MgLURIQVNfc3ByaW50Zl92b2lkIgogICAgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFTX3NwcmludGZfdm9pZCIKLSAgICAgIGVjaG8gIkNoZWNraW5nIGZvciByZXR1cm4gdmFsdWUgb2Ygc3ByaW50ZigpLi4uIE5vLiIKLSAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiCi0gICAgICBlY2hvICIgIGNhbiBidWlsZCBidXQgd2lsbCBiZSBvcGVuIHRvIHBvc3NpYmxlIHN0cmluZy1mb3JtYXQgc2VjdXJpdHkiCi0gICAgICBlY2hvICIgIHZ1bG5lcmFiaWxpdGllcy4iCisgICAgICBlY2hvICJDaGVja2luZyBmb3IgcmV0dXJuIHZhbHVlIG9mIHNwcmludGYoKS4uLiBOby4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgV0FSTklORzogYXBwYXJlbnRseSBzcHJpbnRmKCkgZG9lcyBub3QgcmV0dXJuIGEgdmFsdWUuIHpsaWIiIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKKyAgICAgIGVjaG8gIiAgY2FuIGJ1aWxkIGJ1dCB3aWxsIGJlIG9wZW4gdG8gcG9zc2libGUgc3RyaW5nLWZvcm1hdCBzZWN1cml0eSIgfCB0ZWUgLWEgY29uZmlndXJlLmxvZworICAgICAgZWNobyAiICB2dWxuZXJhYmlsaXRpZXMuIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgICAgZmkKICAgZmkKIGZpCiAKKyMgc2VlIGlmIHdlIGNhbiBoaWRlIHpsaWIgaW50ZXJuYWwgc3ltYm9scyB0aGF0IGFyZSBsaW5rZWQgYmV0d2VlbiBzZXBhcmF0ZSBzb3VyY2UgZmlsZXMKIGlmIHRlc3QgIiRnY2MiIC1lcSAxOyB0aGVuCisgIGVjaG8gPj4gY29uZmlndXJlLmxvZwogICBjYXQgPiAkdGVzdC5jIDw8RU9GCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykKLSMgIGRlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCi0jZWxzZQotIyAgZGVmaW5lIFpMSUJfSU5URVJOQUwKLSNlbmRpZgorI2RlZmluZSBaTElCX0lOVEVSTkFMIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkgKCJoaWRkZW4iKSkpCiBpbnQgWkxJQl9JTlRFUk5BTCBmb287CiBpbnQgbWFpbigpCiB7CiAgIHJldHVybiAwOwogfQogRU9GCi0gIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KLSAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gWWVzLiIKKyAgaWYgdHJ5Ym90aCAkQ0MgLWMgJENGTEFHUyAkdGVzdC5jOyB0aGVuCisgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1ESEFWRV9ISURERU4iCisgICAgU0ZMQUdTPSIkU0ZMQUdTIC1ESEFWRV9ISURERU4iCisgICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIFllcy4iIHwgdGVlIC1hIGNvbmZpZ3VyZS5sb2cKICAgZWxzZQotICAgIENGTEFHUz0iJENGTEFHUyAtRE5PX1ZJWiIKLSAgICBTRkxBR1M9IiRTRkxBR1MgLUROT19WSVoiCi0gICAgZWNobyAiQ2hlY2tpbmcgZm9yIGF0dHJpYnV0ZSh2aXNpYmlsaXR5KSBzdXBwb3J0Li4uIE5vLiIKKyAgICBlY2hvICJDaGVja2luZyBmb3IgYXR0cmlidXRlKHZpc2liaWxpdHkpIHN1cHBvcnQuLi4gTm8uIiB8IHRlZSAtYSBjb25maWd1cmUubG9nCiAgIGZpCiBmaQogCi1DUFA9JHtDUFAtIiRDQyAtRSJ9Ci1jYXNlICRDRkxBR1MgaW4KLSAgKkFTTVYqKQotICAgIGlmIHRlc3QgImAkTk0gJHRlc3QubyB8IGdyZXAgX2hlbGxvYCIgPSAiIjsgdGhlbgotICAgICAgQ1BQPSIkQ1BQIC1ETk9fVU5ERVJMSU5FIgotICAgICAgZWNobyBDaGVja2luZyBmb3IgdW5kZXJsaW5lIGluIGV4dGVybmFsIG5hbWVzLi4uIE5vLgotICAgIGVsc2UKLSAgICAgIGVjaG8gQ2hlY2tpbmcgZm9yIHVuZGVybGluZSBpbiBleHRlcm5hbCBuYW1lcy4uLiBZZXMuCi0gICAgZmkgOzsKLWVzYWMKKyMgc2hvdyB0aGUgcmVzdWx0cyBpbiB0aGUgbG9nCitlY2hvID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQUxMID0gJEFMTCA+PiBjb25maWd1cmUubG9nCitlY2hvIEFSID0gJEFSID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQVJGTEFHUyA9ICRBUkZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ0MgPSAkQ0MgPj4gY29uZmlndXJlLmxvZworZWNobyBDRkxBR1MgPSAkQ0ZMQUdTID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gQ1BQID0gJENQUCA+PiBjb25maWd1cmUubG9nCitlY2hvIEVYRSA9ICRFWEUgPj4gY29uZmlndXJlLmxvZworZWNobyBMRENPTkZJRyA9ICRMRENPTkZJRyA+PiBjb25maWd1cmUubG9nCitlY2hvIExERkxBR1MgPSAkTERGTEFHUyA+PiBjb25maWd1cmUubG9nCitlY2hvIExEU0hBUkVEID0gJExEU0hBUkVEID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gTERTSEFSRURMSUJDID0gJExEU0hBUkVETElCQyA+PiBjb25maWd1cmUubG9nCitlY2hvIE9CSkMgPSAkT0JKQyA+PiBjb25maWd1cmUubG9nCitlY2hvIFBJQ19PQkpDID0gJFBJQ19PQkpDID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gUkFOTElCID0gJFJBTkxJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFNGTEFHUyA9ICRTRkxBR1MgPj4gY29uZmlndXJlLmxvZworZWNobyBTSEFSRURMSUIgPSAkU0hBUkVETElCID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCTSA9ICRTSEFSRURMSUJNID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU0hBUkVETElCViA9ICRTSEFSRURMSUJWID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gU1RBVElDTElCID0gJFNUQVRJQ0xJQiA+PiBjb25maWd1cmUubG9nCitlY2hvIFRFU1QgPSAkVEVTVCA+PiBjb25maWd1cmUubG9nCitlY2hvIFZFUiA9ICRWRVIgPj4gY29uZmlndXJlLmxvZworZWNobyBaX1U0ID0gJFpfVTQgPj4gY29uZmlndXJlLmxvZworZWNobyBleGVjX3ByZWZpeCA9ICRleGVjX3ByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIGluY2x1ZGVkaXIgPSAkaW5jbHVkZWRpciA+PiBjb25maWd1cmUubG9nCitlY2hvIGxpYmRpciA9ICRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyBtYW5kaXIgPSAkbWFuZGlyID4+IGNvbmZpZ3VyZS5sb2cKK2VjaG8gcHJlZml4ID0gJHByZWZpeCA+PiBjb25maWd1cmUubG9nCitlY2hvIHNoYXJlZGxpYmRpciA9ICRzaGFyZWRsaWJkaXIgPj4gY29uZmlndXJlLmxvZworZWNobyB1bmFtZSA9ICR1bmFtZSA+PiBjb25maWd1cmUubG9nCiAKLXJtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAotCi0jIHVkcGF0ZSBNYWtlZmlsZQorIyB1ZHBhdGUgTWFrZWZpbGUgd2l0aCB0aGUgY29uZmlndXJlIHJlc3VsdHMKIHNlZCA8IE1ha2VmaWxlLmluICIKIC9eQ0MgKj0vcyM9LiojPSRDQyMKIC9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIwpAQCAtNTU3LDcgKzc4NCw4IEBACiAvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKIC9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwotL15BUiAqPS9zIz0uKiM9JEFSX1JDIworL15BUiAqPS9zIz0uKiM9JEFSIworL15BUkZMQUdTICo9L3MjPS4qIz0kQVJGTEFHUyMKIC9eUkFOTElCICo9L3MjPS4qIz0kUkFOTElCIwogL15MRENPTkZJRyAqPS9zIz0uKiM9JExEQ09ORklHIwogL15MRFNIQVJFRExJQkMgKj0vcyM9LiojPSRMRFNIQVJFRExJQkMjCkBAIC01NjgsMTAgKzc5NiwxMyBAQAogL15zaGFyZWRsaWJkaXIgKj0vcyM9LiojPSRzaGFyZWRsaWJkaXIjCiAvXmluY2x1ZGVkaXIgKj0vcyM9LiojPSRpbmNsdWRlZGlyIwogL15tYW5kaXIgKj0vcyM9LiojPSRtYW5kaXIjCisvXk9CSkMgKj0vcyM9LiojPSAkT0JKQyMKKy9eUElDX09CSkMgKj0vcyM9LiojPSAkUElDX09CSkMjCiAvXmFsbDogKi9zIzouKiM6ICRBTEwjCiAvXnRlc3Q6ICovcyM6LiojOiAkVEVTVCMKICIgPiBNYWtlZmlsZQogCisjIGNyZWF0ZSB6bGliLnBjIHdpdGggdGhlIGNvbmZpZ3VyZSByZXN1bHRzCiBzZWQgPCB6bGliLnBjLmluICIKIC9eQ0MgKj0vcyM9LiojPSRDQyMKIC9eQ0ZMQUdTICo9L3MjPS4qIz0kQ0ZMQUdTIwpAQCAtNTgxLDcgKzgxMiw4IEBACiAvXlNIQVJFRExJQiAqPS9zIz0uKiM9JFNIQVJFRExJQiMKIC9eU0hBUkVETElCViAqPS9zIz0uKiM9JFNIQVJFRExJQlYjCiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwotL15BUiAqPS9zIz0uKiM9JEFSX1JDIworL15BUiAqPS9zIz0uKiM9JEFSIworL15BUkZMQUdTICo9L3MjPS4qIz0kQVJGTEFHUyMKIC9eUkFOTElCICo9L3MjPS4qIz0kUkFOTElCIwogL15FWEUgKj0vcyM9LiojPSRFWEUjCiAvXnByZWZpeCAqPS9zIz0uKiM9JHByZWZpeCMKQEAgLTU5NCwzICs4MjYsNiBAQAogIiB8IHNlZCAtZSAiCiBzL1xAVkVSU0lPTlxALyRWRVIvZzsKICIgPiB6bGliLnBjCisKKyMgZG9uZQorbGVhdmUgMApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2NyYzMyLmMgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwppbmRleCA5MWJlMzcyLi45NzlhNzE5IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvY3JjMzIuYworKysgYi9Nb2R1bGVzL3psaWIvY3JjMzIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGNyYzMyLmMgLS0gY29tcHV0ZSB0aGUgQ1JDLTMyIG9mIGEgZGF0YSBzdHJlYW0KLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwLCAyMDExLCAyMDEyIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqCiAgKiBUaGFua3MgdG8gUm9kbmV5IEJyb3duIDxyYnJvd242NEBjc2MuY29tLmF1PiBmb3IgaGlzIGNvbnRyaWJ1dGlvbiBvZiBmYXN0ZXIKQEAgLTE3LDYgKzE3LDggQEAKICAgb2YgdGhlIGNyYyB0YWJsZXMuICBUaGVyZWZvcmUsIGlmIHlvdSAjZGVmaW5lIERZTkFNSUNfQ1JDX1RBQkxFLCB5b3Ugc2hvdWxkCiAgIGZpcnN0IGNhbGwgZ2V0X2NyY190YWJsZSgpIHRvIGluaXRpYWxpemUgdGhlIHRhYmxlcyBiZWZvcmUgYWxsb3dpbmcgbW9yZSB0aGFuCiAgIG9uZSB0aHJlYWQgdG8gdXNlIGNyYzMyKCkuCisKKyAgRFlOQU1JQ19DUkNfVEFCTEUgYW5kIE1BS0VDUkNIIGNhbiBiZSAjZGVmaW5lZCB0byB3cml0ZSBvdXQgY3JjMzIuaC4KICAqLwogCiAjaWZkZWYgTUFLRUNSQ0gKQEAgLTMwLDMxICszMiwxMSBAQAogCiAjZGVmaW5lIGxvY2FsIHN0YXRpYwogCi0vKiBGaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSBmb3IgY3JjMzJfbGl0dGxlKCkgYW5kIGNyYzMyX2JpZygpLiAqLwotI2lmbmRlZiBOT0JZRk9VUgotIyAgaWZkZWYgU1REQyAgICAgICAgICAgLyogbmVlZCBBTlNJIEMgbGltaXRzLmggdG8gZGV0ZXJtaW5lIHNpemVzICovCi0jICAgIGluY2x1ZGUgPGxpbWl0cy5oPgotIyAgICBkZWZpbmUgQllGT1VSCi0jICAgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCi0gICAgICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgdTQ7Ci0jICAgIGVsc2UKLSMgICAgICBpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB1NDsKLSMgICAgICBlbHNlCi0jICAgICAgICBpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKLSAgICAgICAgICAgdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1NDsKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgdW5kZWYgQllGT1VSICAgICAvKiBjYW4ndCBmaW5kIGEgZm91ci1ieXRlIGludGVnZXIgdHlwZSEgKi8KLSMgICAgICAgIGVuZGlmCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmIC8qIFNUREMgKi8KLSNlbmRpZiAvKiAhTk9CWUZPVVIgKi8KLQogLyogRGVmaW5pdGlvbnMgZm9yIGRvaW5nIHRoZSBjcmMgZm91ciBkYXRhIGJ5dGVzIGF0IGEgdGltZS4gKi8KKyNpZiAhZGVmaW5lZChOT0JZRk9VUikgJiYgZGVmaW5lZChaX1U0KQorIyAgZGVmaW5lIEJZRk9VUgorI2VuZGlmCiAjaWZkZWYgQllGT1VSCi0jICBkZWZpbmUgUkVWKHcpICgoKCh3KT4+MjQpJjB4ZmYpKygoKHcpPj44KSYweGZmMDApKyBcCi0gICAgICAgICAgICAgICAgKCgodykmMHhmZjAwKTw8OCkrKCgodykmMHhmZik8PDI0KSkKICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfbGl0dGxlIE9GKCh1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiwgdW5zaWduZWQpKTsKICAgIGxvY2FsIHVuc2lnbmVkIGxvbmcgY3JjMzJfYmlnIE9GKCh1bnNpZ25lZCBsb25nLApAQCAtNjgsMTYgKzUwLDE2IEBACiBsb2NhbCB1bnNpZ25lZCBsb25nIGdmMl9tYXRyaXhfdGltZXMgT0YoKHVuc2lnbmVkIGxvbmcgKm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2ZWMpKTsKIGxvY2FsIHZvaWQgZ2YyX21hdHJpeF9zcXVhcmUgT0YoKHVuc2lnbmVkIGxvbmcgKnNxdWFyZSwgdW5zaWduZWQgbG9uZyAqbWF0KSk7Ci1sb2NhbCB1TG9uZyBjcmMzMl9jb21iaW5lXyh1TG9uZyBjcmMxLCB1TG9uZyBjcmMyLCB6X29mZjY0X3QgbGVuMik7Citsb2NhbCB1TG9uZyBjcmMzMl9jb21iaW5lXyBPRigodUxvbmcgY3JjMSwgdUxvbmcgY3JjMiwgel9vZmY2NF90IGxlbjIpKTsKIAogCiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKIAogbG9jYWwgdm9sYXRpbGUgaW50IGNyY190YWJsZV9lbXB0eSA9IDE7Ci1sb2NhbCB1bnNpZ25lZCBsb25nIEZBUiBjcmNfdGFibGVbVEJMU11bMjU2XTsKK2xvY2FsIHpfY3JjX3QgRkFSIGNyY190YWJsZVtUQkxTXVsyNTZdOwogbG9jYWwgdm9pZCBtYWtlX2NyY190YWJsZSBPRigodm9pZCkpOwogI2lmZGVmIE1BS0VDUkNICi0gICBsb2NhbCB2b2lkIHdyaXRlX3RhYmxlIE9GKChGSUxFICosIGNvbnN0IHVuc2lnbmVkIGxvbmcgRkFSICopKTsKKyAgIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUgT0YoKEZJTEUgKiwgY29uc3Qgel9jcmNfdCBGQVIgKikpOwogI2VuZGlmIC8qIE1BS0VDUkNIICovCiAvKgogICBHZW5lcmF0ZSB0YWJsZXMgZm9yIGEgYnl0ZS13aXNlIDMyLWJpdCBDUkMgY2FsY3VsYXRpb24gb24gdGhlIHBvbHlub21pYWw6CkBAIC0xMDcsOSArODksOSBAQAogKi8KIGxvY2FsIHZvaWQgbWFrZV9jcmNfdGFibGUoKQogewotICAgIHVuc2lnbmVkIGxvbmcgYzsKKyAgICB6X2NyY190IGM7CiAgICAgaW50IG4sIGs7Ci0gICAgdW5zaWduZWQgbG9uZyBwb2x5OyAgICAgICAgICAgICAgICAgLyogcG9seW5vbWlhbCBleGNsdXNpdmUtb3IgcGF0dGVybiAqLworICAgIHpfY3JjX3QgcG9seTsgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvbHlub21pYWwgZXhjbHVzaXZlLW9yIHBhdHRlcm4gKi8KICAgICAvKiB0ZXJtcyBvZiBwb2x5bm9taWFsIGRlZmluaW5nIHRoaXMgY3JjIChleGNlcHQgeF4zMik6ICovCiAgICAgc3RhdGljIHZvbGF0aWxlIGludCBmaXJzdCA9IDE7ICAgICAgLyogZmxhZyB0byBsaW1pdCBjb25jdXJyZW50IG1ha2luZyAqLwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHBbXSA9IHswLDEsMiw0LDUsNyw4LDEwLDExLDEyLDE2LDIyLDIzLDI2fTsKQEAgLTEyMSwxMyArMTAzLDEzIEBACiAgICAgICAgIGZpcnN0ID0gMDsKIAogICAgICAgICAvKiBtYWtlIGV4Y2x1c2l2ZS1vciBwYXR0ZXJuIGZyb20gcG9seW5vbWlhbCAoMHhlZGI4ODMyMFVMKSAqLwotICAgICAgICBwb2x5ID0gMFVMOwotICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2l6ZW9mKHApL3NpemVvZih1bnNpZ25lZCBjaGFyKTsgbisrKQotICAgICAgICAgICAgcG9seSB8PSAxVUwgPDwgKDMxIC0gcFtuXSk7CisgICAgICAgIHBvbHkgPSAwOworICAgICAgICBmb3IgKG4gPSAwOyBuIDwgKGludCkoc2l6ZW9mKHApL3NpemVvZih1bnNpZ25lZCBjaGFyKSk7IG4rKykKKyAgICAgICAgICAgIHBvbHkgfD0gKHpfY3JjX3QpMSA8PCAoMzEgLSBwW25dKTsKIAogICAgICAgICAvKiBnZW5lcmF0ZSBhIGNyYyBmb3IgZXZlcnkgOC1iaXQgdmFsdWUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7Ci0gICAgICAgICAgICBjID0gKHVuc2lnbmVkIGxvbmcpbjsKKyAgICAgICAgICAgIGMgPSAoel9jcmNfdCluOwogICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IDg7IGsrKykKICAgICAgICAgICAgICAgICBjID0gYyAmIDEgPyBwb2x5IF4gKGMgPj4gMSkgOiBjID4+IDE7CiAgICAgICAgICAgICBjcmNfdGFibGVbMF1bbl0gPSBjOwpAQCAtMTM4LDExICsxMjAsMTEgQEAKICAgICAgICAgICAgYW5kIHRoZW4gdGhlIGJ5dGUgcmV2ZXJzYWwgb2YgdGhvc2UgYXMgd2VsbCBhcyB0aGUgZmlyc3QgdGFibGUgKi8KICAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7CiAgICAgICAgICAgICBjID0gY3JjX3RhYmxlWzBdW25dOwotICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gUkVWKGMpOworICAgICAgICAgICAgY3JjX3RhYmxlWzRdW25dID0gWlNXQVAzMihjKTsKICAgICAgICAgICAgIGZvciAoayA9IDE7IGsgPCA0OyBrKyspIHsKICAgICAgICAgICAgICAgICBjID0gY3JjX3RhYmxlWzBdW2MgJiAweGZmXSBeIChjID4+IDgpOwogICAgICAgICAgICAgICAgIGNyY190YWJsZVtrXVtuXSA9IGM7Ci0gICAgICAgICAgICAgICAgY3JjX3RhYmxlW2sgKyA0XVtuXSA9IFJFVihjKTsKKyAgICAgICAgICAgICAgICBjcmNfdGFibGVbayArIDRdW25dID0gWlNXQVAzMihjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmIC8qIEJZRk9VUiAqLwpAQCAtMTY0LDcgKzE0Niw3IEBACiAgICAgICAgIGlmIChvdXQgPT0gTlVMTCkgcmV0dXJuOwogICAgICAgICBmcHJpbnRmKG91dCwgIi8qIGNyYzMyLmggLS0gdGFibGVzIGZvciByYXBpZCBDUkMgY2FsY3VsYXRpb25cbiIpOwogICAgICAgICBmcHJpbnRmKG91dCwgIiAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNyYzMyLmNcbiAqL1xuXG4iKTsKLSAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAiKTsKKyAgICAgICAgZnByaW50ZihvdXQsICJsb2NhbCBjb25zdCB6X2NyY190IEZBUiAiKTsKICAgICAgICAgZnByaW50ZihvdXQsICJjcmNfdGFibGVbVEJMU11bMjU2XSA9XG57XG4gIHtcbiIpOwogICAgICAgICB3cml0ZV90YWJsZShvdXQsIGNyY190YWJsZVswXSk7CiAjICBpZmRlZiBCWUZPVVIKQEAgLTE4NCwxMiArMTY2LDEzIEBACiAjaWZkZWYgTUFLRUNSQ0gKIGxvY2FsIHZvaWQgd3JpdGVfdGFibGUob3V0LCB0YWJsZSkKICAgICBGSUxFICpvdXQ7Ci0gICAgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgKnRhYmxlOworICAgIGNvbnN0IHpfY3JjX3QgRkFSICp0YWJsZTsKIHsKICAgICBpbnQgbjsKIAogICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykKLSAgICAgICAgZnByaW50ZihvdXQsICIlczB4JTA4bHhVTCVzIiwgbiAlIDUgPyAiIiA6ICIgICAgIiwgdGFibGVbbl0sCisgICAgICAgIGZwcmludGYob3V0LCAiJXMweCUwOGx4VUwlcyIsIG4gJSA1ID8gIiIgOiAiICAgICIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKHRhYmxlW25dKSwKICAgICAgICAgICAgICAgICBuID09IDI1NSA/ICJcbiIgOiAobiAlIDUgPT0gNCA/ICIsXG4iIDogIiwgIikpOwogfQogI2VuZGlmIC8qIE1BS0VDUkNIICovCkBAIC0yMDQsMTMgKzE4NywxMyBAQAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBieSBhc20gdmVyc2lvbnMgb2YgY3JjMzIoKQogICovCi1jb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgpCitjb25zdCB6X2NyY190IEZBUiAqIFpFWFBPUlQgZ2V0X2NyY190YWJsZSgpCiB7CiAjaWZkZWYgRFlOQU1JQ19DUkNfVEFCTEUKICAgICBpZiAoY3JjX3RhYmxlX2VtcHR5KQogICAgICAgICBtYWtlX2NyY190YWJsZSgpOwogI2VuZGlmIC8qIERZTkFNSUNfQ1JDX1RBQkxFICovCi0gICAgcmV0dXJuIChjb25zdCB1bnNpZ25lZCBsb25nIEZBUiAqKWNyY190YWJsZTsKKyAgICByZXR1cm4gKGNvbnN0IHpfY3JjX3QgRkFSICopY3JjX3RhYmxlOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCkBAIC0yMzIsNyArMjE1LDcgQEAKIAogI2lmZGVmIEJZRk9VUgogICAgIGlmIChzaXplb2Yodm9pZCAqKSA9PSBzaXplb2YocHRyZGlmZl90KSkgewotICAgICAgICB1NCBlbmRpYW47CisgICAgICAgIHpfY3JjX3QgZW5kaWFuOwogCiAgICAgICAgIGVuZGlhbiA9IDE7CiAgICAgICAgIGlmICgqKCh1bnNpZ25lZCBjaGFyICopKCZlbmRpYW4pKSkKQEAgLTI2NiwxNyArMjQ5LDE3IEBACiAgICAgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZjsKICAgICB1bnNpZ25lZCBsZW47CiB7Ci0gICAgcmVnaXN0ZXIgdTQgYzsKLSAgICByZWdpc3RlciBjb25zdCB1NCBGQVIgKmJ1ZjQ7CisgICAgcmVnaXN0ZXIgel9jcmNfdCBjOworICAgIHJlZ2lzdGVyIGNvbnN0IHpfY3JjX3QgRkFSICpidWY0OwogCi0gICAgYyA9ICh1NCljcmM7CisgICAgYyA9ICh6X2NyY190KWNyYzsKICAgICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYgJiAzKSkgewogICAgICAgICBjID0gY3JjX3RhYmxlWzBdWyhjIF4gKmJ1ZisrKSAmIDB4ZmZdIF4gKGMgPj4gOCk7CiAgICAgICAgIGxlbi0tOwogICAgIH0KIAotICAgIGJ1ZjQgPSAoY29uc3QgdTQgRkFSICopKGNvbnN0IHZvaWQgRkFSICopYnVmOworICAgIGJ1ZjQgPSAoY29uc3Qgel9jcmNfdCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0xJVDMyOwogICAgICAgICBsZW4gLT0gMzI7CkBAIC0zMDYsMTcgKzI4OSwxNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICpidWY7CiAgICAgdW5zaWduZWQgbGVuOwogewotICAgIHJlZ2lzdGVyIHU0IGM7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdTQgRkFSICpidWY0OworICAgIHJlZ2lzdGVyIHpfY3JjX3QgYzsKKyAgICByZWdpc3RlciBjb25zdCB6X2NyY190IEZBUiAqYnVmNDsKIAotICAgIGMgPSBSRVYoKHU0KWNyYyk7CisgICAgYyA9IFpTV0FQMzIoKHpfY3JjX3QpY3JjKTsKICAgICBjID0gfmM7CiAgICAgd2hpbGUgKGxlbiAmJiAoKHB0cmRpZmZfdClidWYgJiAzKSkgewogICAgICAgICBjID0gY3JjX3RhYmxlWzRdWyhjID4+IDI0KSBeICpidWYrK10gXiAoYyA8PCA4KTsKICAgICAgICAgbGVuLS07CiAgICAgfQogCi0gICAgYnVmNCA9IChjb25zdCB1NCBGQVIgKikoY29uc3Qgdm9pZCBGQVIgKilidWY7CisgICAgYnVmNCA9IChjb25zdCB6X2NyY190IEZBUiAqKShjb25zdCB2b2lkIEZBUiAqKWJ1ZjsKICAgICBidWY0LS07CiAgICAgd2hpbGUgKGxlbiA+PSAzMikgewogICAgICAgICBET0JJRzMyOwpAQCAtMzMzLDcgKzMxNiw3IEBACiAgICAgICAgIGMgPSBjcmNfdGFibGVbNF1bKGMgPj4gMjQpIF4gKmJ1ZisrXSBeIChjIDw8IDgpOwogICAgIH0gd2hpbGUgKC0tbGVuKTsKICAgICBjID0gfmM7Ci0gICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKShSRVYoYykpOworICAgIHJldHVybiAodW5zaWduZWQgbG9uZykoWlNXQVAzMihjKSk7CiB9CiAKICNlbmRpZiAvKiBCWUZPVVIgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9jcmMzMi5oIGIvTW9kdWxlcy96bGliL2NyYzMyLmgKaW5kZXggODA1M2I2MS4uOWUwYzc3OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2NyYzMyLmgKKysrIGIvTW9kdWxlcy96bGliL2NyYzMyLmgKQEAgLTIsNyArMiw3IEBACiAgKiBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjcmMzMi5jCiAgKi8KIAotbG9jYWwgY29uc3QgdW5zaWduZWQgbG9uZyBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPQorbG9jYWwgY29uc3Qgel9jcmNfdCBGQVIgY3JjX3RhYmxlW1RCTFNdWzI1Nl0gPQogewogICB7CiAgICAgMHgwMDAwMDAwMFVMLCAweDc3MDczMDk2VUwsIDB4ZWUwZTYxMmNVTCwgMHg5OTA5NTFiYVVMLCAweDA3NmRjNDE5VUwsCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuYwppbmRleCBiY2VmNjdjLi42OTY5NTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9kZWZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBkZWZsYXRlLmMgLS0gY29tcHJlc3MgZGF0YSB1c2luZyB0aGUgZGVmbGF0aW9uIGFsZ29yaXRobQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTM3LDcgKzM3LDcgQEAKICAqICBSRUZFUkVOQ0VTCiAgKgogICogICAgICBEZXV0c2NoLCBMLlAuLCJERUZMQVRFIENvbXByZXNzZWQgRGF0YSBGb3JtYXQgU3BlY2lmaWNhdGlvbiIuCi0gKiAgICAgIEF2YWlsYWJsZSBpbiBodHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUxLnR4dAorICogICAgICBBdmFpbGFibGUgaW4gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MQogICoKICAqICAgICAgQSBkZXNjcmlwdGlvbiBvZiB0aGUgUmFiaW4gYW5kIEthcnAgYWxnb3JpdGhtIGlzIGdpdmVuIGluIHRoZSBib29rCiAgKiAgICAgICAgICJBbGdvcml0aG1zIiBieSBSLiBTZWRnZXdpY2ssIEFkZGlzb24tV2VzbGV5LCBwMjUyLgpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImRlZmxhdGUuaCIKIAogY29uc3QgY2hhciBkZWZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgZGVmbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKKyAgICIgZGVmbGF0ZSAxLjIuOCBDb3B5cmlnaHQgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtMTU1LDkgKzE1NSwxMiBAQAogc3RydWN0IHN0YXRpY190cmVlX2Rlc2NfcyB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KICNlbmRpZgogCisvKiByYW5rIFpfQkxPQ0sgYmV0d2VlbiBaX05PX0ZMVVNIIGFuZCBaX1BBUlRJQUxfRkxVU0ggKi8KKyNkZWZpbmUgUkFOSyhmKSAoKChmKSA8PCAxKSAtICgoZikgPiA0ID8gOSA6IDApKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFVwZGF0ZSBhIGhhc2ggdmFsdWUgd2l0aCB0aGUgZ2l2ZW4gaW5wdXQgYnl0ZQotICogSU4gIGFzc2VydGlvbjogYWxsIGNhbGxzIHRvIFVQREFURV9IQVNIIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBVUERBVEVfSEFTSCBhcmUgbWFkZSB3aXRoIGNvbnNlY3V0aXZlCiAgKiAgICBpbnB1dCBjaGFyYWN0ZXJzLCBzbyB0aGF0IGEgcnVubmluZyBoYXNoIGtleSBjYW4gYmUgY29tcHV0ZWQgZnJvbSB0aGUKICAqICAgIHByZXZpb3VzIGtleSBpbnN0ZWFkIG9mIGNvbXBsZXRlIHJlY2FsY3VsYXRpb24gZWFjaCB0aW1lLgogICovCkBAIC0xNzAsNyArMTczLDcgQEAKICAqIHRoZSBwcmV2aW91cyBsZW5ndGggb2YgdGhlIGhhc2ggY2hhaW4uCiAgKiBJZiB0aGlzIGZpbGUgaXMgY29tcGlsZWQgd2l0aCAtREZBU1RFU1QsIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBpcyBmb3JjZWQKICAqIHRvIDEsIGFuZCBubyBoYXNoIGNoYWlucyBhcmUgbWFpbnRhaW5lZC4KLSAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKKyAqIElOICBhc3NlcnRpb246IGFsbCBjYWxscyB0byB0byBJTlNFUlRfU1RSSU5HIGFyZSBtYWRlIHdpdGggY29uc2VjdXRpdmUKICAqICAgIGlucHV0IGNoYXJhY3RlcnMgYW5kIHRoZSBmaXJzdCBNSU5fTUFUQ0ggYnl0ZXMgb2Ygc3RyIGFyZSB2YWxpZAogICogICAgKGV4Y2VwdCBmb3IgdGhlIGxhc3QgTUlOX01BVENILTEgYnl0ZXMgb2YgdGhlIGlucHV0IGZpbGUpLgogICovCkBAIC0yMzUsMTAgKzIzOCwxOSBAQAogCiAgICAgc3RybS0+bXNnID0gWl9OVUxMOwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKIAogI2lmZGVmIEZBU1RFU1QKICAgICBpZiAobGV2ZWwgIT0gMCkgbGV2ZWwgPSAxOwpAQCAtMjkzLDcgKzMwNSw3IEBACiAgICAgaWYgKHMtPndpbmRvdyA9PSBaX05VTEwgfHwgcy0+cHJldiA9PSBaX05VTEwgfHwgcy0+aGVhZCA9PSBaX05VTEwgfHwKICAgICAgICAgcy0+cGVuZGluZ19idWYgPT0gWl9OVUxMKSB7CiAgICAgICAgIHMtPnN0YXR1cyA9IEZJTklTSF9TVEFURTsKLSAgICAgICAgc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coWl9NRU1fRVJST1IpOworICAgICAgICBzdHJtLT5tc2cgPSBFUlJfTVNHKFpfTUVNX0VSUk9SKTsKICAgICAgICAgZGVmbGF0ZUVuZCAoc3RybSk7CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9CkBAIC0zMTQsNDMgKzMyNiw3MCBAQAogICAgIHVJbnQgIGRpY3RMZW5ndGg7CiB7CiAgICAgZGVmbGF0ZV9zdGF0ZSAqczsKLSAgICB1SW50IGxlbmd0aCA9IGRpY3RMZW5ndGg7Ci0gICAgdUludCBuOwotICAgIElQb3MgaGFzaF9oZWFkID0gMDsKKyAgICB1SW50IHN0ciwgbjsKKyAgICBpbnQgd3JhcDsKKyAgICB1bnNpZ25lZCBhdmFpbDsKKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgKm5leHQ7CiAKLSAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMIHx8Ci0gICAgICAgIHN0cm0tPnN0YXRlLT53cmFwID09IDIgfHwKLSAgICAgICAgKHN0cm0tPnN0YXRlLT53cmFwID09IDEgJiYgc3RybS0+c3RhdGUtPnN0YXR1cyAhPSBJTklUX1NUQVRFKSkKKyAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMIHx8IGRpY3Rpb25hcnkgPT0gWl9OVUxMKQorICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIHdyYXAgPSBzLT53cmFwOworICAgIGlmICh3cmFwID09IDIgfHwgKHdyYXAgPT0gMSAmJiBzLT5zdGF0dXMgIT0gSU5JVF9TVEFURSkgfHwgcy0+bG9va2FoZWFkKQogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAKLSAgICBzID0gc3RybS0+c3RhdGU7Ci0gICAgaWYgKHMtPndyYXApCisgICAgLyogd2hlbiB1c2luZyB6bGliIHdyYXBwZXJzLCBjb21wdXRlIEFkbGVyLTMyIGZvciBwcm92aWRlZCBkaWN0aW9uYXJ5ICovCisgICAgaWYgKHdyYXAgPT0gMSkKICAgICAgICAgc3RybS0+YWRsZXIgPSBhZGxlcjMyKHN0cm0tPmFkbGVyLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKKyAgICBzLT53cmFwID0gMDsgICAgICAgICAgICAgICAgICAgIC8qIGF2b2lkIGNvbXB1dGluZyBBZGxlci0zMiBpbiByZWFkX2J1ZiAqLwogCi0gICAgaWYgKGxlbmd0aCA8IE1JTl9NQVRDSCkgcmV0dXJuIFpfT0s7Ci0gICAgaWYgKGxlbmd0aCA+IHMtPndfc2l6ZSkgewotICAgICAgICBsZW5ndGggPSBzLT53X3NpemU7Ci0gICAgICAgIGRpY3Rpb25hcnkgKz0gZGljdExlbmd0aCAtIGxlbmd0aDsgLyogdXNlIHRoZSB0YWlsIG9mIHRoZSBkaWN0aW9uYXJ5ICovCisgICAgLyogaWYgZGljdGlvbmFyeSB3b3VsZCBmaWxsIHdpbmRvdywganVzdCByZXBsYWNlIHRoZSBoaXN0b3J5ICovCisgICAgaWYgKGRpY3RMZW5ndGggPj0gcy0+d19zaXplKSB7CisgICAgICAgIGlmICh3cmFwID09IDApIHsgICAgICAgICAgICAvKiBhbHJlYWR5IGVtcHR5IG90aGVyd2lzZSAqLworICAgICAgICAgICAgQ0xFQVJfSEFTSChzKTsKKyAgICAgICAgICAgIHMtPnN0cnN0YXJ0ID0gMDsKKyAgICAgICAgICAgIHMtPmJsb2NrX3N0YXJ0ID0gMEw7CisgICAgICAgICAgICBzLT5pbnNlcnQgPSAwOworICAgICAgICB9CisgICAgICAgIGRpY3Rpb25hcnkgKz0gZGljdExlbmd0aCAtIHMtPndfc2l6ZTsgIC8qIHVzZSB0aGUgdGFpbCAqLworICAgICAgICBkaWN0TGVuZ3RoID0gcy0+d19zaXplOwogICAgIH0KLSAgICB6bWVtY3B5KHMtPndpbmRvdywgZGljdGlvbmFyeSwgbGVuZ3RoKTsKLSAgICBzLT5zdHJzdGFydCA9IGxlbmd0aDsKLSAgICBzLT5ibG9ja19zdGFydCA9IChsb25nKWxlbmd0aDsKIAotICAgIC8qIEluc2VydCBhbGwgc3RyaW5ncyBpbiB0aGUgaGFzaCB0YWJsZSAoZXhjZXB0IGZvciB0aGUgbGFzdCB0d28gYnl0ZXMpLgotICAgICAqIHMtPmxvb2thaGVhZCBzdGF5cyBudWxsLCBzbyBzLT5pbnNfaCB3aWxsIGJlIHJlY29tcHV0ZWQgYXQgdGhlIG5leHQKLSAgICAgKiBjYWxsIG9mIGZpbGxfd2luZG93LgotICAgICAqLwotICAgIHMtPmluc19oID0gcy0+d2luZG93WzBdOwotICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbMV0pOwotICAgIGZvciAobiA9IDA7IG4gPD0gbGVuZ3RoIC0gTUlOX01BVENIOyBuKyspIHsKLSAgICAgICAgSU5TRVJUX1NUUklORyhzLCBuLCBoYXNoX2hlYWQpOworICAgIC8qIGluc2VydCBkaWN0aW9uYXJ5IGludG8gd2luZG93IGFuZCBoYXNoICovCisgICAgYXZhaWwgPSBzdHJtLT5hdmFpbF9pbjsKKyAgICBuZXh0ID0gc3RybS0+bmV4dF9pbjsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGRpY3RMZW5ndGg7CisgICAgc3RybS0+bmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopZGljdGlvbmFyeTsKKyAgICBmaWxsX3dpbmRvdyhzKTsKKyAgICB3aGlsZSAocy0+bG9va2FoZWFkID49IE1JTl9NQVRDSCkgeworICAgICAgICBzdHIgPSBzLT5zdHJzdGFydDsKKyAgICAgICAgbiA9IHMtPmxvb2thaGVhZCAtIChNSU5fTUFUQ0gtMSk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIFVQREFURV9IQVNIKHMsIHMtPmluc19oLCBzLT53aW5kb3dbc3RyICsgTUlOX01BVENILTFdKTsKKyNpZm5kZWYgRkFTVEVTVAorICAgICAgICAgICAgcy0+cHJldltzdHIgJiBzLT53X21hc2tdID0gcy0+aGVhZFtzLT5pbnNfaF07CisjZW5kaWYKKyAgICAgICAgICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcylzdHI7CisgICAgICAgICAgICBzdHIrKzsKKyAgICAgICAgfSB3aGlsZSAoLS1uKTsKKyAgICAgICAgcy0+c3Ryc3RhcnQgPSBzdHI7CisgICAgICAgIHMtPmxvb2thaGVhZCA9IE1JTl9NQVRDSC0xOworICAgICAgICBmaWxsX3dpbmRvdyhzKTsKICAgICB9Ci0gICAgaWYgKGhhc2hfaGVhZCkgaGFzaF9oZWFkID0gMDsgIC8qIHRvIG1ha2UgY29tcGlsZXIgaGFwcHkgKi8KKyAgICBzLT5zdHJzdGFydCArPSBzLT5sb29rYWhlYWQ7CisgICAgcy0+YmxvY2tfc3RhcnQgPSAobG9uZylzLT5zdHJzdGFydDsKKyAgICBzLT5pbnNlcnQgPSBzLT5sb29rYWhlYWQ7CisgICAgcy0+bG9va2FoZWFkID0gMDsKKyAgICBzLT5tYXRjaF9sZW5ndGggPSBzLT5wcmV2X2xlbmd0aCA9IE1JTl9NQVRDSC0xOworICAgIHMtPm1hdGNoX2F2YWlsYWJsZSA9IDA7CisgICAgc3RybS0+bmV4dF9pbiA9IG5leHQ7CisgICAgc3RybS0+YXZhaWxfaW4gPSBhdmFpbDsKKyAgICBzLT53cmFwID0gd3JhcDsKICAgICByZXR1cm4gWl9PSzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwotaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQoraW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0S2VlcCAoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKICAgICBkZWZsYXRlX3N0YXRlICpzOwpAQCAtMzgwLDEyICs0MTksMjMgQEAKICAgICBzLT5sYXN0X2ZsdXNoID0gWl9OT19GTFVTSDsKIAogICAgIF90cl9pbml0KHMpOwotICAgIGxtX2luaXQocyk7CiAKICAgICByZXR1cm4gWl9PSzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZVJlc2V0IChzdHJtKQorICAgIHpfc3RyZWFtcCBzdHJtOworeworICAgIGludCByZXQ7CisKKyAgICByZXQgPSBkZWZsYXRlUmVzZXRLZWVwKHN0cm0pOworICAgIGlmIChyZXQgPT0gWl9PSykKKyAgICAgICAgbG1faW5pdChzdHJtLT5zdGF0ZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogaW50IFpFWFBPUlQgZGVmbGF0ZVNldEhlYWRlciAoc3RybSwgaGVhZCkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBnel9oZWFkZXJwIGhlYWQ7CkBAIC0zOTcsMTQgKzQ0Nyw0MiBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCitpbnQgWkVYUE9SVCBkZWZsYXRlUGVuZGluZyAoc3RybSwgcGVuZGluZywgYml0cykKKyAgICB1bnNpZ25lZCAqcGVuZGluZzsKKyAgICBpbnQgKmJpdHM7CisgICAgel9zdHJlYW1wIHN0cm07Cit7CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIGlmIChwZW5kaW5nICE9IFpfTlVMTCkKKyAgICAgICAgKnBlbmRpbmcgPSBzdHJtLT5zdGF0ZS0+cGVuZGluZzsKKyAgICBpZiAoYml0cyAhPSBaX05VTEwpCisgICAgICAgICpiaXRzID0gc3RybS0+c3RhdGUtPmJpX3ZhbGlkOworICAgIHJldHVybiBaX09LOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgKHN0cm0sIGJpdHMsIHZhbHVlKQogICAgIHpfc3RyZWFtcCBzdHJtOwogICAgIGludCBiaXRzOwogICAgIGludCB2YWx1ZTsKIHsKKyAgICBkZWZsYXRlX3N0YXRlICpzOworICAgIGludCBwdXQ7CisKICAgICBpZiAoc3RybSA9PSBaX05VTEwgfHwgc3RybS0+c3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0gICAgc3RybS0+c3RhdGUtPmJpX3ZhbGlkID0gYml0czsKLSAgICBzdHJtLT5zdGF0ZS0+YmlfYnVmID0gKHVzaCkodmFsdWUgJiAoKDEgPDwgYml0cykgLSAxKSk7CisgICAgcyA9IHN0cm0tPnN0YXRlOworICAgIGlmICgoQnl0ZWYgKikocy0+ZF9idWYpIDwgcy0+cGVuZGluZ19vdXQgKyAoKEJ1Zl9zaXplICsgNykgPj4gMykpCisgICAgICAgIHJldHVybiBaX0JVRl9FUlJPUjsKKyAgICBkbyB7CisgICAgICAgIHB1dCA9IEJ1Zl9zaXplIC0gcy0+YmlfdmFsaWQ7CisgICAgICAgIGlmIChwdXQgPiBiaXRzKQorICAgICAgICAgICAgcHV0ID0gYml0czsKKyAgICAgICAgcy0+YmlfYnVmIHw9ICh1c2gpKCh2YWx1ZSAmICgoMSA8PCBwdXQpIC0gMSkpIDw8IHMtPmJpX3ZhbGlkKTsKKyAgICAgICAgcy0+YmlfdmFsaWQgKz0gcHV0OworICAgICAgICBfdHJfZmx1c2hfYml0cyhzKTsKKyAgICAgICAgdmFsdWUgPj49IHB1dDsKKyAgICAgICAgYml0cyAtPSBwdXQ7CisgICAgfSB3aGlsZSAoYml0cyk7CiAgICAgcmV0dXJuIFpfT0s7CiB9CiAKQEAgLTQzNSw2ICs1MTMsOCBAQAogICAgICAgICBzdHJtLT50b3RhbF9pbiAhPSAwKSB7CiAgICAgICAgIC8qIEZsdXNoIHRoZSBsYXN0IGJ1ZmZlcjogKi8KICAgICAgICAgZXJyID0gZGVmbGF0ZShzdHJtLCBaX0JMT0NLKTsKKyAgICAgICAgaWYgKGVyciA9PSBaX0JVRl9FUlJPUiAmJiBzLT5wZW5kaW5nID09IDApCisgICAgICAgICAgICBlcnIgPSBaX09LOwogICAgIH0KICAgICBpZiAocy0+bGV2ZWwgIT0gbGV2ZWwpIHsKICAgICAgICAgcy0+bGV2ZWwgPSBsZXZlbDsKQEAgLTU2MiwxOSArNjQyLDIyIEBACiBsb2NhbCB2b2lkIGZsdXNoX3BlbmRpbmcoc3RybSkKICAgICB6X3N0cmVhbXAgc3RybTsKIHsKLSAgICB1bnNpZ25lZCBsZW4gPSBzdHJtLT5zdGF0ZS0+cGVuZGluZzsKKyAgICB1bnNpZ25lZCBsZW47CisgICAgZGVmbGF0ZV9zdGF0ZSAqcyA9IHN0cm0tPnN0YXRlOwogCisgICAgX3RyX2ZsdXNoX2JpdHMocyk7CisgICAgbGVuID0gcy0+cGVuZGluZzsKICAgICBpZiAobGVuID4gc3RybS0+YXZhaWxfb3V0KSBsZW4gPSBzdHJtLT5hdmFpbF9vdXQ7CiAgICAgaWYgKGxlbiA9PSAwKSByZXR1cm47CiAKLSAgICB6bWVtY3B5KHN0cm0tPm5leHRfb3V0LCBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQsIGxlbik7CisgICAgem1lbWNweShzdHJtLT5uZXh0X291dCwgcy0+cGVuZGluZ19vdXQsIGxlbik7CiAgICAgc3RybS0+bmV4dF9vdXQgICs9IGxlbjsKLSAgICBzdHJtLT5zdGF0ZS0+cGVuZGluZ19vdXQgICs9IGxlbjsKKyAgICBzLT5wZW5kaW5nX291dCAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX291dCArPSBsZW47CiAgICAgc3RybS0+YXZhaWxfb3V0ICAtPSBsZW47Ci0gICAgc3RybS0+c3RhdGUtPnBlbmRpbmcgLT0gbGVuOwotICAgIGlmIChzdHJtLT5zdGF0ZS0+cGVuZGluZyA9PSAwKSB7Ci0gICAgICAgIHN0cm0tPnN0YXRlLT5wZW5kaW5nX291dCA9IHN0cm0tPnN0YXRlLT5wZW5kaW5nX2J1ZjsKKyAgICBzLT5wZW5kaW5nIC09IGxlbjsKKyAgICBpZiAocy0+cGVuZGluZyA9PSAwKSB7CisgICAgICAgIHMtPnBlbmRpbmdfb3V0ID0gcy0+cGVuZGluZ19idWY7CiAgICAgfQogfQogCkBAIC04MDEsNyArODg0LDcgQEAKICAgICAgKiBmbHVzaGVzLiBGb3IgcmVwZWF0ZWQgYW5kIHVzZWxlc3MgY2FsbHMgd2l0aCBaX0ZJTklTSCwgd2Uga2VlcAogICAgICAqIHJldHVybmluZyBaX1NUUkVBTV9FTkQgaW5zdGVhZCBvZiBaX0JVRl9FUlJPUi4KICAgICAgKi8KLSAgICB9IGVsc2UgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZmx1c2ggPD0gb2xkX2ZsdXNoICYmCisgICAgfSBlbHNlIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwICYmIFJBTksoZmx1c2gpIDw9IFJBTksob2xkX2ZsdXNoKSAmJgogICAgICAgICAgICAgICAgZmx1c2ggIT0gWl9GSU5JU0gpIHsKICAgICAgICAgRVJSX1JFVFVSTihzdHJtLCBaX0JVRl9FUlJPUik7CiAgICAgfQpAQCAtODUwLDYgKzkzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcy0+c3Ryc3RhcnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmluc2VydCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC05NDUsMTIgKzEwMjksMTIgQEAKIAogICAgIHNzID0gc291cmNlLT5zdGF0ZTsKIAotICAgIHptZW1jcHkoZGVzdCwgc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOwogCiAgICAgZHMgPSAoZGVmbGF0ZV9zdGF0ZSAqKSBaQUxMT0MoZGVzdCwgMSwgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoZHMgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgZGVzdC0+c3RhdGUgPSAoc3RydWN0IGludGVybmFsX3N0YXRlIEZBUiAqKSBkczsKLSAgICB6bWVtY3B5KGRzLCBzcywgc2l6ZW9mKGRlZmxhdGVfc3RhdGUpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZHMsICh2b2lkcGYpc3MsIHNpemVvZihkZWZsYXRlX3N0YXRlKSk7CiAgICAgZHMtPnN0cm0gPSBkZXN0OwogCiAgICAgZHMtPndpbmRvdyA9IChCeXRlZiAqKSBaQUxMT0MoZGVzdCwgZHMtPndfc2l6ZSwgMipzaXplb2YoQnl0ZSkpOwpAQCAtOTY2LDggKzEwNTAsOCBAQAogICAgIH0KICAgICAvKiBmb2xsb3dpbmcgem1lbWNweSBkbyBub3Qgd29yayBmb3IgMTYtYml0IE1TRE9TICovCiAgICAgem1lbWNweShkcy0+d2luZG93LCBzcy0+d2luZG93LCBkcy0+d19zaXplICogMiAqIHNpemVvZihCeXRlKSk7Ci0gICAgem1lbWNweShkcy0+cHJldiwgc3MtPnByZXYsIGRzLT53X3NpemUgKiBzaXplb2YoUG9zKSk7Ci0gICAgem1lbWNweShkcy0+aGVhZCwgc3MtPmhlYWQsIGRzLT5oYXNoX3NpemUgKiBzaXplb2YoUG9zKSk7CisgICAgem1lbWNweSgodm9pZHBmKWRzLT5wcmV2LCAodm9pZHBmKXNzLT5wcmV2LCBkcy0+d19zaXplICogc2l6ZW9mKFBvcykpOworICAgIHptZW1jcHkoKHZvaWRwZilkcy0+aGVhZCwgKHZvaWRwZilzcy0+aGVhZCwgZHMtPmhhc2hfc2l6ZSAqIHNpemVvZihQb3MpKTsKICAgICB6bWVtY3B5KGRzLT5wZW5kaW5nX2J1Ziwgc3MtPnBlbmRpbmdfYnVmLCAodUludClkcy0+cGVuZGluZ19idWZfc2l6ZSk7CiAKICAgICBkcy0+cGVuZGluZ19vdXQgPSBkcy0+cGVuZGluZ19idWYgKyAoc3MtPnBlbmRpbmdfb3V0IC0gc3MtPnBlbmRpbmdfYnVmKTsKQEAgLTEwMDEsMTUgKzEwODUsMTUgQEAKIAogICAgIHN0cm0tPmF2YWlsX2luICAtPSBsZW47CiAKKyAgICB6bWVtY3B5KGJ1Ziwgc3RybS0+bmV4dF9pbiwgbGVuKTsKICAgICBpZiAoc3RybS0+c3RhdGUtPndyYXAgPT0gMSkgewotICAgICAgICBzdHJtLT5hZGxlciA9IGFkbGVyMzIoc3RybS0+YWRsZXIsIHN0cm0tPm5leHRfaW4sIGxlbik7CisgICAgICAgIHN0cm0tPmFkbGVyID0gYWRsZXIzMihzdHJtLT5hZGxlciwgYnVmLCBsZW4pOwogICAgIH0KICNpZmRlZiBHWklQCiAgICAgZWxzZSBpZiAoc3RybS0+c3RhdGUtPndyYXAgPT0gMikgewotICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzdHJtLT5uZXh0X2luLCBsZW4pOworICAgICAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBidWYsIGxlbik7CiAgICAgfQogI2VuZGlmCi0gICAgem1lbWNweShidWYsIHN0cm0tPm5leHRfaW4sIGxlbik7CiAgICAgc3RybS0+bmV4dF9pbiAgKz0gbGVuOwogICAgIHN0cm0tPnRvdGFsX2luICs9IGxlbjsKIApAQCAtMTAzNiw2ICsxMTIwLDcgQEAKICAgICBzLT5zdHJzdGFydCA9IDA7CiAgICAgcy0+YmxvY2tfc3RhcnQgPSAwTDsKICAgICBzLT5sb29rYWhlYWQgPSAwOworICAgIHMtPmluc2VydCA9IDA7CiAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+cHJldl9sZW5ndGggPSBNSU5fTUFUQ0gtMTsKICAgICBzLT5tYXRjaF9hdmFpbGFibGUgPSAwOwogICAgIHMtPmluc19oID0gMDsKQEAgLTEzMTAsNiArMTM5NSw4IEBACiAgICAgdW5zaWduZWQgbW9yZTsgICAgLyogQW1vdW50IG9mIGZyZWUgc3BhY2UgYXQgdGhlIGVuZCBvZiB0aGUgd2luZG93LiAqLwogICAgIHVJbnQgd3NpemUgPSBzLT53X3NpemU7CiAKKyAgICBBc3NlcnQocy0+bG9va2FoZWFkIDwgTUlOX0xPT0tBSEVBRCwgImFscmVhZHkgZW5vdWdoIGxvb2thaGVhZCIpOworCiAgICAgZG8gewogICAgICAgICBtb3JlID0gKHVuc2lnbmVkKShzLT53aW5kb3dfc2l6ZSAtKHVsZylzLT5sb29rYWhlYWQgLSh1bGcpcy0+c3Ryc3RhcnQpOwogCkBAIC0xMzYyLDcgKzE0NDksNyBAQAogI2VuZGlmCiAgICAgICAgICAgICBtb3JlICs9IHdzaXplOwogICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA9PSAwKSByZXR1cm47CisgICAgICAgIGlmIChzLT5zdHJtLT5hdmFpbF9pbiA9PSAwKSBicmVhazsKIAogICAgICAgICAvKiBJZiB0aGVyZSB3YXMgbm8gc2xpZGluZzoKICAgICAgICAgICogICAgc3Ryc3RhcnQgPD0gV1NJWkUrTUFYX0RJU1QtMSAmJiBsb29rYWhlYWQgPD0gTUlOX0xPT0tBSEVBRCAtIDEgJiYKQEAgLTEzODEsMTIgKzE0NjgsMjQgQEAKICAgICAgICAgcy0+bG9va2FoZWFkICs9IG47CiAKICAgICAgICAgLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB2YWx1ZSBub3cgdGhhdCB3ZSBoYXZlIHNvbWUgaW5wdXQ6ICovCi0gICAgICAgIGlmIChzLT5sb29rYWhlYWQgPj0gTUlOX01BVENIKSB7Ci0gICAgICAgICAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1tzLT5zdHJzdGFydF07Ci0gICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3MtPnN0cnN0YXJ0KzFdKTsKKyAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA+PSBNSU5fTUFUQ0gpIHsKKyAgICAgICAgICAgIHVJbnQgc3RyID0gcy0+c3Ryc3RhcnQgLSBzLT5pbnNlcnQ7CisgICAgICAgICAgICBzLT5pbnNfaCA9IHMtPndpbmRvd1tzdHJdOworICAgICAgICAgICAgVVBEQVRFX0hBU0gocywgcy0+aW5zX2gsIHMtPndpbmRvd1tzdHIgKyAxXSk7CiAjaWYgTUlOX01BVENIICE9IDMKICAgICAgICAgICAgIENhbGwgVVBEQVRFX0hBU0goKSBNSU5fTUFUQ0gtMyBtb3JlIHRpbWVzCiAjZW5kaWYKKyAgICAgICAgICAgIHdoaWxlIChzLT5pbnNlcnQpIHsKKyAgICAgICAgICAgICAgICBVUERBVEVfSEFTSChzLCBzLT5pbnNfaCwgcy0+d2luZG93W3N0ciArIE1JTl9NQVRDSC0xXSk7CisjaWZuZGVmIEZBU1RFU1QKKyAgICAgICAgICAgICAgICBzLT5wcmV2W3N0ciAmIHMtPndfbWFza10gPSBzLT5oZWFkW3MtPmluc19oXTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIHMtPmhlYWRbcy0+aW5zX2hdID0gKFBvcylzdHI7CisgICAgICAgICAgICAgICAgc3RyKys7CisgICAgICAgICAgICAgICAgcy0+aW5zZXJ0LS07CisgICAgICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCArIHMtPmluc2VydCA8IE1JTl9NQVRDSCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogSWYgdGhlIHdob2xlIGlucHV0IGhhcyBsZXNzIHRoYW4gTUlOX01BVENIIGJ5dGVzLCBpbnNfaCBpcyBnYXJiYWdlLAogICAgICAgICAgKiBidXQgdGhpcyBpcyBub3QgaW1wb3J0YW50IHNpbmNlIG9ubHkgbGl0ZXJhbCBieXRlcyB3aWxsIGJlIGVtaXR0ZWQuCkBAIC0xNDI3LDYgKzE1MjYsOSBAQAogICAgICAgICAgICAgcy0+aGlnaF93YXRlciArPSBpbml0OwogICAgICAgICB9CiAgICAgfQorCisgICAgQXNzZXJ0KCh1bGcpcy0+c3Ryc3RhcnQgPD0gcy0+d2luZG93X3NpemUgLSBNSU5fTE9PS0FIRUFELAorICAgICAgICAgICAibm90IGVub3VnaCByb29tIGZvciBzZWFyY2giKTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xNTA2LDggKzE2MDgsMTQgQEAKICAgICAgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOwogICAgICAgICB9CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKChsb25nKXMtPnN0cnN0YXJ0ID4gcy0+YmxvY2tfc3RhcnQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE2MDMsOCArMTcxMSwxNCBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChiZmx1c2gpIEZMVVNIX0JMT0NLKHMsIDApOwogICAgIH0KLSAgICBGTFVTSF9CTE9DSyhzLCBmbHVzaCA9PSBaX0ZJTklTSCk7Ci0gICAgcmV0dXJuIGZsdXNoID09IFpfRklOSVNIID8gZmluaXNoX2RvbmUgOiBibG9ja19kb25lOworICAgIHMtPmluc2VydCA9IHMtPnN0cnN0YXJ0IDwgTUlOX01BVENILTEgPyBzLT5zdHJzdGFydCA6IE1JTl9NQVRDSC0xOworICAgIGlmIChmbHVzaCA9PSBaX0ZJTklTSCkgeworICAgICAgICBGTFVTSF9CTE9DSyhzLCAxKTsKKyAgICAgICAgcmV0dXJuIGZpbmlzaF9kb25lOworICAgIH0KKyAgICBpZiAocy0+bGFzdF9saXQpCisgICAgICAgIEZMVVNIX0JMT0NLKHMsIDApOworICAgIHJldHVybiBibG9ja19kb25lOwogfQogCiAjaWZuZGVmIEZBU1RFU1QKQEAgLTE3MjgsOCArMTg0MiwxNCBAQAogICAgICAgICBfdHJfdGFsbHlfbGl0KHMsIHMtPndpbmRvd1tzLT5zdHJzdGFydC0xXSwgYmZsdXNoKTsKICAgICAgICAgcy0+bWF0Y2hfYXZhaWxhYmxlID0gMDsKICAgICB9Ci0gICAgRkxVU0hfQkxPQ0socywgZmx1c2ggPT0gWl9GSU5JU0gpOwotICAgIHJldHVybiBmbHVzaCA9PSBaX0ZJTklTSCA/IGZpbmlzaF9kb25lIDogYmxvY2tfZG9uZTsKKyAgICBzLT5pbnNlcnQgPSBzLT5zdHJzdGFydCA8IE1JTl9NQVRDSC0xID8gcy0+c3Ryc3RhcnQgOiBNSU5fTUFUQ0gtMTsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KICNlbmRpZiAvKiBGQVNURVNUICovCiAKQEAgLTE3NDksMTEgKzE4NjksMTEgQEAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyBoYXZlIGVub3VnaCBsb29rYWhlYWQsIGV4Y2VwdAogICAgICAgICAgKiBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCBmaWxlLiBXZSBuZWVkIE1BWF9NQVRDSCBieXRlcwotICAgICAgICAgKiBmb3IgdGhlIGxvbmdlc3QgZW5jb2RhYmxlIHJ1bi4KKyAgICAgICAgICogZm9yIHRoZSBsb25nZXN0IHJ1biwgcGx1cyBvbmUgZm9yIHRoZSB1bnJvbGxlZCBsb29wLgogICAgICAgICAgKi8KLSAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA8IE1BWF9NQVRDSCkgeworICAgICAgICBpZiAocy0+bG9va2FoZWFkIDw9IE1BWF9NQVRDSCkgewogICAgICAgICAgICAgZmlsbF93aW5kb3cocyk7Ci0gICAgICAgICAgICBpZiAocy0+bG9va2FoZWFkIDwgTUFYX01BVENIICYmIGZsdXNoID09IFpfTk9fRkxVU0gpIHsKKyAgICAgICAgICAgIGlmIChzLT5sb29rYWhlYWQgPD0gTUFYX01BVENIICYmIGZsdXNoID09IFpfTk9fRkxVU0gpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbmVlZF9tb3JlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHMtPmxvb2thaGVhZCA9PSAwKSBicmVhazsgLyogZmx1c2ggdGhlIGN1cnJlbnQgYmxvY2sgKi8KQEAgLTE3NzYsNiArMTg5Niw3IEBACiAgICAgICAgICAgICAgICAgaWYgKHMtPm1hdGNoX2xlbmd0aCA+IHMtPmxvb2thaGVhZCkKICAgICAgICAgICAgICAgICAgICAgcy0+bWF0Y2hfbGVuZ3RoID0gcy0+bG9va2FoZWFkOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgQXNzZXJ0KHNjYW4gPD0gcy0+d2luZG93Kyh1SW50KShzLT53aW5kb3dfc2l6ZS0xKSwgIndpbGQgc2NhbiIpOwogICAgICAgICB9CiAKICAgICAgICAgLyogRW1pdCBtYXRjaCBpZiBoYXZlIHJ1biBvZiBNSU5fTUFUQ0ggb3IgbG9uZ2VyLCBlbHNlIGVtaXQgbGl0ZXJhbCAqLwpAQCAtMTc5Niw4ICsxOTE3LDE0IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xODI5LDYgKzE5NTYsMTIgQEAKICAgICAgICAgcy0+c3Ryc3RhcnQrKzsKICAgICAgICAgaWYgKGJmbHVzaCkgRkxVU0hfQkxPQ0socywgMCk7CiAgICAgfQotICAgIEZMVVNIX0JMT0NLKHMsIGZsdXNoID09IFpfRklOSVNIKTsKLSAgICByZXR1cm4gZmx1c2ggPT0gWl9GSU5JU0ggPyBmaW5pc2hfZG9uZSA6IGJsb2NrX2RvbmU7CisgICAgcy0+aW5zZXJ0ID0gMDsKKyAgICBpZiAoZmx1c2ggPT0gWl9GSU5JU0gpIHsKKyAgICAgICAgRkxVU0hfQkxPQ0socywgMSk7CisgICAgICAgIHJldHVybiBmaW5pc2hfZG9uZTsKKyAgICB9CisgICAgaWYgKHMtPmxhc3RfbGl0KQorICAgICAgICBGTFVTSF9CTE9DSyhzLCAwKTsKKyAgICByZXR1cm4gYmxvY2tfZG9uZTsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmggYi9Nb2R1bGVzL3psaWIvZGVmbGF0ZS5oCmluZGV4IGNiZjBkMWUuLmNlMDI5OWUgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9kZWZsYXRlLmgKKysrIGIvTW9kdWxlcy96bGliL2RlZmxhdGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGRlZmxhdGUuaCAtLSBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgSmVhbi1sb3VwIEdhaWxseQogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQ4LDYgKzQ4LDkgQEAKICNkZWZpbmUgTUFYX0JJVFMgMTUKIC8qIEFsbCBjb2RlcyBtdXN0IG5vdCBleGNlZWQgTUFYX0JJVFMgYml0cyAqLwogCisjZGVmaW5lIEJ1Zl9zaXplIDE2CisvKiBzaXplIG9mIGJpdCBidWZmZXIgaW4gYmlfYnVmICovCisKICNkZWZpbmUgSU5JVF9TVEFURSAgICA0MgogI2RlZmluZSBFWFRSQV9TVEFURSAgIDY5CiAjZGVmaW5lIE5BTUVfU1RBVEUgICAgNzMKQEAgLTEwMSw3ICsxMDQsNyBAQAogICAgIGludCAgIHdyYXA7ICAgICAgICAgIC8qIGJpdCAwIHRydWUgZm9yIHpsaWIsIGJpdCAxIHRydWUgZm9yIGd6aXAgKi8KICAgICBnel9oZWFkZXJwICBnemhlYWQ7ICAvKiBnemlwIGhlYWRlciBpbmZvcm1hdGlvbiB0byB3cml0ZSAqLwogICAgIHVJbnQgICBnemluZGV4OyAgICAgIC8qIHdoZXJlIGluIGV4dHJhLCBuYW1lLCBvciBjb21tZW50ICovCi0gICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogU1RPUkVEIChmb3IgemlwIG9ubHkpIG9yIERFRkxBVEVEICovCisgICAgQnl0ZSAgbWV0aG9kOyAgICAgICAgLyogY2FuIG9ubHkgYmUgREVGTEFURUQgKi8KICAgICBpbnQgICBsYXN0X2ZsdXNoOyAgICAvKiB2YWx1ZSBvZiBmbHVzaCBwYXJhbSBmb3IgcHJldmlvdXMgZGVmbGF0ZSBjYWxsICovCiAKICAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IGRlZmxhdGUuYzogKi8KQEAgLTE4OCw3ICsxOTEsNyBAQAogICAgIGludCBuaWNlX21hdGNoOyAvKiBTdG9wIHNlYXJjaGluZyB3aGVuIGN1cnJlbnQgbWF0Y2ggZXhjZWVkcyB0aGlzICovCiAKICAgICAgICAgICAgICAgICAvKiB1c2VkIGJ5IHRyZWVzLmM6ICovCi0gICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcmVzcyBjb21waWxlciB3YXJuaW5nICovCisgICAgLyogRGlkbid0IHVzZSBjdF9kYXRhIHR5cGVkZWYgYmVsb3cgdG8gc3VwcHJlc3MgY29tcGlsZXIgd2FybmluZyAqLwogICAgIHN0cnVjdCBjdF9kYXRhX3MgZHluX2x0cmVlW0hFQVBfU0laRV07ICAgLyogbGl0ZXJhbCBhbmQgbGVuZ3RoIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGR5bl9kdHJlZVsyKkRfQ09ERVMrMV07IC8qIGRpc3RhbmNlIHRyZWUgKi8KICAgICBzdHJ1Y3QgY3RfZGF0YV9zIGJsX3RyZWVbMipCTF9DT0RFUysxXTsgIC8qIEh1ZmZtYW4gdHJlZSBmb3IgYml0IGxlbmd0aHMgKi8KQEAgLTI0NCw3ICsyNDcsNyBAQAogICAgIHVsZyBvcHRfbGVuOyAgICAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggb3B0aW1hbCB0cmVlcyAqLwogICAgIHVsZyBzdGF0aWNfbGVuOyAgICAgLyogYml0IGxlbmd0aCBvZiBjdXJyZW50IGJsb2NrIHdpdGggc3RhdGljIHRyZWVzICovCiAgICAgdUludCBtYXRjaGVzOyAgICAgICAvKiBudW1iZXIgb2Ygc3RyaW5nIG1hdGNoZXMgaW4gY3VycmVudCBibG9jayAqLwotICAgIGludCBsYXN0X2VvYl9sZW47ICAgLyogYml0IGxlbmd0aCBvZiBFT0IgY29kZSBmb3IgbGFzdCBibG9jayAqLworICAgIHVJbnQgaW5zZXJ0OyAgICAgICAgLyogYnl0ZXMgYXQgZW5kIG9mIHdpbmRvdyBsZWZ0IHRvIGluc2VydCAqLwogCiAjaWZkZWYgREVCVUcKICAgICB1bGcgY29tcHJlc3NlZF9sZW47IC8qIHRvdGFsIGJpdCBsZW5ndGggb2YgY29tcHJlc3NlZCBmaWxlIG1vZCAyXjMyICovCkBAIC0yOTQsNiArMjk3LDcgQEAKIGludCBaTElCX0lOVEVSTkFMIF90cl90YWxseSBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgdW5zaWduZWQgZGlzdCwgdW5zaWduZWQgbGMpKTsKIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYml0cyBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9hbGlnbiBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogdm9pZCBaTElCX0lOVEVSTkFMIF90cl9zdG9yZWRfYmxvY2sgT0YoKGRlZmxhdGVfc3RhdGUgKnMsIGNoYXJmICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICB1bGcgc3RvcmVkX2xlbiwgaW50IGxhc3QpKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMgYi9Nb2R1bGVzL3psaWIvZXhhbXBsZS5jCmluZGV4IDYwNDczNmYuLjEzOGE2OTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9leGFtcGxlLmMKKysrIGIvTW9kdWxlcy96bGliL2V4YW1wbGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGV4YW1wbGUuYyAtLSB1c2FnZSBleGFtcGxlIG9mIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2IEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMSBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTI2LDcgKzI2LDcgQEAKICAgICB9IFwKIH0KIAotY29uc3QgY2hhciBoZWxsb1tdID0gImhlbGxvLCBoZWxsbyEiOworel9jb25zdCBjaGFyIGhlbGxvW10gPSAiaGVsbG8sIGhlbGxvISI7CiAvKiAiaGVsbG8gd29ybGQiIHdvdWxkIGJlIG1vcmUgc3RhbmRhcmQsIGJ1dCB0aGUgcmVwZWF0ZWQgImhlbGxvIgogICogc3RyZXNzZXMgdGhlIGNvbXByZXNzaW9uIGNvZGUgYmV0dGVyLCBzb3JyeS4uLgogICovCkBAIC0zNCwxMCArMzQsNiBAQAogY29uc3QgY2hhciBkaWN0aW9uYXJ5W10gPSAiaGVsbG8iOwogdUxvbmcgZGljdElkOyAvKiBBZGxlcjMyIHZhbHVlIG9mIHRoZSBkaWN0aW9uYXJ5ICovCiAKLXZvaWQgdGVzdF9jb21wcmVzcyAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwotdm9pZCB0ZXN0X2d6aW8gICAgICAgICAgT0YoKGNvbnN0IGNoYXIgKmZuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKIHZvaWQgdGVzdF9kZWZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4pKTsKIHZvaWQgdGVzdF9pbmZsYXRlICAgICAgIE9GKChCeXRlICpjb21wciwgdUxvbmcgY29tcHJMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnl0ZSAqdW5jb21wciwgdUxvbmcgdW5jb21wckxlbikpOwpAQCAtNTMsNiArNDksMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CiBpbnQgIG1haW4gICAgICAgICAgICAgICBPRigoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkpOwogCisKKyNpZmRlZiBaX1NPTE8KKwordm9pZCAqbXlhbGxvYyBPRigodm9pZCAqLCB1bnNpZ25lZCwgdW5zaWduZWQpKTsKK3ZvaWQgbXlmcmVlIE9GKCh2b2lkICosIHZvaWQgKikpOworCit2b2lkICpteWFsbG9jKHEsIG4sIG0pCisgICAgdm9pZCAqcTsKKyAgICB1bnNpZ25lZCBuLCBtOworeworICAgIHEgPSBaX05VTEw7CisgICAgcmV0dXJuIGNhbGxvYyhuLCBtKTsKK30KKwordm9pZCBteWZyZWUodm9pZCAqcSwgdm9pZCAqcCkKK3sKKyAgICBxID0gWl9OVUxMOworICAgIGZyZWUocCk7Cit9CisKK3N0YXRpYyBhbGxvY19mdW5jIHphbGxvYyA9IG15YWxsb2M7CitzdGF0aWMgZnJlZV9mdW5jIHpmcmVlID0gbXlmcmVlOworCisjZWxzZSAvKiAhWl9TT0xPICovCisKK3N0YXRpYyBhbGxvY19mdW5jIHphbGxvYyA9IChhbGxvY19mdW5jKTA7CitzdGF0aWMgZnJlZV9mdW5jIHpmcmVlID0gKGZyZWVfZnVuYykwOworCit2b2lkIHRlc3RfY29tcHJlc3MgICAgICBPRigoQnl0ZSAqY29tcHIsIHVMb25nIGNvbXByTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgKnVuY29tcHIsIHVMb25nIHVuY29tcHJMZW4pKTsKK3ZvaWQgdGVzdF9nemlvICAgICAgICAgIE9GKChjb25zdCBjaGFyICpmbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeXRlICp1bmNvbXByLCB1TG9uZyB1bmNvbXByTGVuKSk7CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogVGVzdCBjb21wcmVzcygpIGFuZCB1bmNvbXByZXNzKCkKICAqLwpAQCAtMTYzLDYgKzE5Miw4IEBACiAjZW5kaWYKIH0KIAorI2VuZGlmIC8qIFpfU09MTyAqLworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIFRlc3QgZGVmbGF0ZSgpIHdpdGggc21hbGwgYnVmZmVycwogICovCkBAIC0xNzQsMTQgKzIwNSwxNCBAQAogICAgIGludCBlcnI7CiAgICAgdUxvbmcgbGVuID0gKHVMb25nKXN0cmxlbihoZWxsbykrMTsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAKICAgICB3aGlsZSAoY19zdHJlYW0udG90YWxfaW4gIT0gbGVuICYmIGNfc3RyZWFtLnRvdGFsX291dCA8IGNvbXByTGVuKSB7CkBAIC0yMTMsOCArMjQ0LDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTI1Miw4ICsyODMsOCBAQAogICAgIHpfc3RyZWFtIGNfc3RyZWFtOyAvKiBjb21wcmVzc2lvbiBzdHJlYW0gKi8KICAgICBpbnQgZXJyOwogCi0gICAgY19zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBjX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBjX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgY19zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBjX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBlcnIgPSBkZWZsYXRlSW5pdCgmY19zdHJlYW0sIFpfQkVTVF9TUEVFRCk7CkBAIC0zMDksOCArMzQwLDggQEAKIAogICAgIHN0cmNweSgoY2hhciopdW5jb21wciwgImdhcmJhZ2UiKTsKIAotICAgIGRfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgZF9zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgZF9zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGRfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgZF9zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZF9zdHJlYW0ubmV4dF9pbiAgPSBjb21wcjsKQEAgLTM0OSwxNCArMzgwLDE0IEBACiAgICAgaW50IGVycjsKICAgICB1SW50IGxlbiA9ICh1SW50KXN0cmxlbihoZWxsbykrMTsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0RFRkFVTFRfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCi0gICAgY19zdHJlYW0ubmV4dF9pbiAgPSAoQnl0ZWYqKWhlbGxvOworICAgIGNfc3RyZWFtLm5leHRfaW4gID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAgICAgY19zdHJlYW0uYXZhaWxfaW4gPSAzOwogICAgIGNfc3RyZWFtLmF2YWlsX291dCA9ICh1SW50KSpjb21wckxlbjsKQEAgLTM4OCw4ICs0MTksOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtNDMwLDIyICs0NjEsMjIgQEAKICAgICB6X3N0cmVhbSBjX3N0cmVhbTsgLyogY29tcHJlc3Npb24gc3RyZWFtICovCiAgICAgaW50IGVycjsKIAotICAgIGNfc3RyZWFtLnphbGxvYyA9IChhbGxvY19mdW5jKTA7Ci0gICAgY19zdHJlYW0uemZyZWUgPSAoZnJlZV9mdW5jKTA7CisgICAgY19zdHJlYW0uemFsbG9jID0gemFsbG9jOworICAgIGNfc3RyZWFtLnpmcmVlID0gemZyZWU7CiAgICAgY19zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwogCiAgICAgZXJyID0gZGVmbGF0ZUluaXQoJmNfc3RyZWFtLCBaX0JFU1RfQ09NUFJFU1NJT04pOwogICAgIENIRUNLX0VSUihlcnIsICJkZWZsYXRlSW5pdCIpOwogCiAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJmNfc3RyZWFtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBCeXRlZiopZGljdGlvbmFyeSwgc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgICAgICAoY29uc3QgQnl0ZWYqKWRpY3Rpb25hcnksIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKICAgICBDSEVDS19FUlIoZXJyLCAiZGVmbGF0ZVNldERpY3Rpb25hcnkiKTsKIAogICAgIGRpY3RJZCA9IGNfc3RyZWFtLmFkbGVyOwogICAgIGNfc3RyZWFtLm5leHRfb3V0ID0gY29tcHI7CiAgICAgY19zdHJlYW0uYXZhaWxfb3V0ID0gKHVJbnQpY29tcHJMZW47CiAKLSAgICBjX3N0cmVhbS5uZXh0X2luID0gKEJ5dGVmKiloZWxsbzsKKyAgICBjX3N0cmVhbS5uZXh0X2luID0gKHpfY29uc3QgdW5zaWduZWQgY2hhciAqKWhlbGxvOwogICAgIGNfc3RyZWFtLmF2YWlsX2luID0gKHVJbnQpc3RybGVuKGhlbGxvKSsxOwogCiAgICAgZXJyID0gZGVmbGF0ZSgmY19zdHJlYW0sIFpfRklOSVNIKTsKQEAgLTQ2OSw4ICs1MDAsOCBAQAogCiAgICAgc3RyY3B5KChjaGFyKil1bmNvbXByLCAiZ2FyYmFnZSIpOwogCi0gICAgZF9zdHJlYW0uemFsbG9jID0gKGFsbG9jX2Z1bmMpMDsKLSAgICBkX3N0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKKyAgICBkX3N0cmVhbS56YWxsb2MgPSB6YWxsb2M7CisgICAgZF9zdHJlYW0uemZyZWUgPSB6ZnJlZTsKICAgICBkX3N0cmVhbS5vcGFxdWUgPSAodm9pZHBmKTA7CiAKICAgICBkX3N0cmVhbS5uZXh0X2luICA9IGNvbXByOwpAQCAtNDkxLDcgKzUyMiw3IEBACiAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCZkX3N0cmVhbSwgKGNvbnN0IEJ5dGVmKilkaWN0aW9uYXJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGRpY3Rpb25hcnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGRpY3Rpb25hcnkpKTsKICAgICAgICAgfQogICAgICAgICBDSEVDS19FUlIoZXJyLCAiaW5mbGF0ZSB3aXRoIGRpY3QiKTsKICAgICB9CkBAIC01NDAsMTAgKzU3MSwxNSBAQAogICAgICAgICBwcmludGYoIm91dCBvZiBtZW1vcnlcbiIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KKworI2lmZGVmIFpfU09MTworICAgIGFyZ2MgPSBzdHJsZW4oYXJndlswXSk7CisjZWxzZQogICAgIHRlc3RfY29tcHJlc3MoY29tcHIsIGNvbXByTGVuLCB1bmNvbXByLCB1bmNvbXByTGVuKTsKIAogICAgIHRlc3RfZ3ppbygoYXJnYyA+IDEgPyBhcmd2WzFdIDogVEVTVEZJTEUpLAogICAgICAgICAgICAgICB1bmNvbXByLCB1bmNvbXByTGVuKTsKKyNlbmRpZgogCiAgICAgdGVzdF9kZWZsYXRlKGNvbXByLCBjb21wckxlbik7CiAgICAgdGVzdF9pbmZsYXRlKGNvbXByLCBjb21wckxlbiwgdW5jb21wciwgdW5jb21wckxlbik7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvZ3pndXRzLmggYi9Nb2R1bGVzL3psaWIvZ3pndXRzLmgKaW5kZXggMGY4ZmI3OS4uZDg3NjU5ZCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2d6Z3V0cy5oCisrKyBiL01vZHVsZXMvemxpYi9nemd1dHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qIGd6Z3V0cy5oIC0tIHpsaWIgaW50ZXJuYWwgaGVhZGVyIGRlZmluaXRpb25zIGZvciBneiogb3BlcmF0aW9ucwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTIsNyArMTIsNyBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorI2lmZGVmIEhBVkVfSElEREVOCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogI2Vsc2UKICMgIGRlZmluZSBaTElCX0lOVEVSTkFMCkBAIC0yNywxMyArMjcsODAgQEAKICNlbmRpZgogI2luY2x1ZGUgPGZjbnRsLmg+CiAKKyNpZmRlZiBfV0lOMzIKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX1dJTjMyKQorIyAgaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWZkZWYgV0lOQVBJX0ZBTUlMWQorIyAgZGVmaW5lIG9wZW4gX29wZW4KKyMgIGRlZmluZSByZWFkIF9yZWFkCisjICBkZWZpbmUgd3JpdGUgX3dyaXRlCisjICBkZWZpbmUgY2xvc2UgX2Nsb3NlCisjZW5kaWYKKwogI2lmZGVmIE5PX0RFRkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLwogIyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKICNlbmRpZgogCisjaWYgZGVmaW5lZChTVERDOTkpIHx8IChkZWZpbmVkKF9fVFVSQk9DX18pICYmIF9fVFVSQk9DX18gPj0gMHg1NTApCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE1TRE9TKSAmJiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgKEJPUkxBTkRDID4gMHg0MTApCisjICBpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgICAgZGVmaW5lIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9WU05QUklOVEYKKyMgIGlmZGVmIE1TRE9TCisvKiB2c25wcmludGYgbWF5IGV4aXN0IG9uIHNvbWUgTVMtRE9TIGNvbXBpbGVycyAoREpHUFA/KSwKKyAgIGJ1dCBmb3Igbm93IHdlIGp1c3QgYXNzdW1lIGl0IGRvZXNuJ3QuICovCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX1RVUkJPQ19fCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBXSU4zMgorLyogSW4gV2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50Zi4gKi8KKyMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisjICAgICAgaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8ICggZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxNTAwICkKKyMgICAgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fU0FTQworIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWZkZWYgVk1TCisjICAgIGRlZmluZSBOT192c25wcmludGYKKyMgIGVuZGlmCisjICBpZmRlZiBfX09TNDAwX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9fTVZTX18KKyMgICAgZGVmaW5lIE5PX3ZzbnByaW50ZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiB1bmxpa2Ugc25wcmludGYgKHdoaWNoIGlzIHJlcXVpcmVkIGluIEM5OSwgeWV0IHN0aWxsIG5vdCBzdXBwb3J0ZWQgYnkKKyAgIE1pY3Jvc29mdCBtb3JlIHRoYW4gYSBkZWNhZGUgbGF0ZXIhKSwgX3NucHJpbnRmIGRvZXMgbm90IGd1YXJhbnRlZSBudWxsCisgICB0ZXJtaW5hdGlvbiBvZiB0aGUgcmVzdWx0IC0tIGhvd2V2ZXIgdGhpcyBpcyBvbmx5IHVzZWQgaW4gZ3psaWIuYyB3aGVyZQorICAgdGhlIHJlc3VsdCBpcyBhc3N1cmVkIHRvIGZpdCBpbiB0aGUgc3BhY2UgcHJvdmlkZWQgKi8KICNpZmRlZiBfTVNDX1ZFUgotIyAgaW5jbHVkZSA8aW8uaD4KLSMgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorIyAgZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgogI2VuZGlmCiAKICNpZm5kZWYgbG9jYWwKQEAgLTUyLDcgKzExOSw3IEBACiAjICBpbmNsdWRlIDx3aW5kb3dzLmg+CiAjICBkZWZpbmUgenN0cmVycm9yKCkgZ3pfc3Ryd2luZXJyb3IoKERXT1JEKUdldExhc3RFcnJvcigpKQogI2Vsc2UKLSMgIGlmZGVmIFNUREMKKyMgIGlmbmRlZiBOT19TVFJFUlJPUgogIyAgICBpbmNsdWRlIDxlcnJuby5oPgogIyAgICBkZWZpbmUgenN0cmVycm9yKCkgc3RyZXJyb3IoZXJybm8pCiAjICBlbHNlCkBAIC02OCw3ICsxMzUsMTUgQEAKICAgICBaRVhURVJOIHpfb2ZmNjRfdCBaRVhQT1JUIGd6b2Zmc2V0NjQgT0YoKGd6RmlsZSkpOwogI2VuZGlmCiAKLS8qIGRlZmF1bHQgaS9vIGJ1ZmZlciBzaXplIC0tIGRvdWJsZSB0aGlzIGZvciBvdXRwdXQgd2hlbiByZWFkaW5nICovCisvKiBkZWZhdWx0IG1lbUxldmVsICovCisjaWYgTUFYX01FTV9MRVZFTCA+PSA4CisjICBkZWZpbmUgREVGX01FTV9MRVZFTCA4CisjZWxzZQorIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgIE1BWF9NRU1fTEVWRUwKKyNlbmRpZgorCisvKiBkZWZhdWx0IGkvbyBidWZmZXIgc2l6ZSAtLSBkb3VibGUgdGhpcyBmb3Igb3V0cHV0IHdoZW4gcmVhZGluZyAodGhpcyBhbmQKKyAgIHR3aWNlIHRoaXMgbXVzdCBiZSBhYmxlIHRvIGZpdCBpbiBhbiB1bnNpZ25lZCB0eXBlKSAqLwogI2RlZmluZSBHWkJVRlNJWkUgODE5MgogCiAvKiBnemlwIG1vZGVzLCBhbHNvIHByb3ZpZGUgYSBsaXR0bGUgaW50ZWdyaXR5IGNoZWNrIG9uIHRoZSBwYXNzZWQgc3RydWN0dXJlICovCkBAIC04NCwyMyArMTU5LDI1IEBACiAKIC8qIGludGVybmFsIGd6aXAgZmlsZSBzdGF0ZSBkYXRhIHN0cnVjdHVyZSAqLwogdHlwZWRlZiBzdHJ1Y3QgeworICAgICAgICAvKiBleHBvc2VkIGNvbnRlbnRzIGZvciBnemdldGMoKSBtYWNybyAqLworICAgIHN0cnVjdCBnekZpbGVfcyB4OyAgICAgIC8qICJ4IiBmb3IgZXhwb3NlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHguaGF2ZTogbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZSBhdCB4Lm5leHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB4Lm5leHQ6IG5leHQgb3V0cHV0IGRhdGEgdG8gZGVsaXZlciBvciB3cml0ZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHgucG9zOiBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCiAgICAgICAgIC8qIHVzZWQgZm9yIGJvdGggcmVhZGluZyBhbmQgd3JpdGluZyAqLwogICAgIGludCBtb2RlOyAgICAgICAgICAgICAgIC8qIHNlZSBnemlwIG1vZGVzIGFib3ZlICovCiAgICAgaW50IGZkOyAgICAgICAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yICovCiAgICAgY2hhciAqcGF0aDsgICAgICAgICAgICAgLyogcGF0aCBvciBmZCBmb3IgZXJyb3IgbWVzc2FnZXMgKi8KLSAgICB6X29mZjY0X3QgcG9zOyAgICAgICAgICAvKiBjdXJyZW50IHBvc2l0aW9uIGluIHVuY29tcHJlc3NlZCBkYXRhICovCiAgICAgdW5zaWduZWQgc2l6ZTsgICAgICAgICAgLyogYnVmZmVyIHNpemUsIHplcm8gaWYgbm90IGFsbG9jYXRlZCB5ZXQgKi8KICAgICB1bnNpZ25lZCB3YW50OyAgICAgICAgICAvKiByZXF1ZXN0ZWQgYnVmZmVyIHNpemUsIGRlZmF1bHQgaXMgR1pCVUZTSVpFICovCiAgICAgdW5zaWduZWQgY2hhciAqaW47ICAgICAgLyogaW5wdXQgYnVmZmVyICovCiAgICAgdW5zaWduZWQgY2hhciAqb3V0OyAgICAgLyogb3V0cHV0IGJ1ZmZlciAoZG91YmxlLXNpemVkIHdoZW4gcmVhZGluZykgKi8KLSAgICB1bnNpZ25lZCBjaGFyICpuZXh0OyAgICAvKiBuZXh0IG91dHB1dCBkYXRhIHRvIGRlbGl2ZXIgb3Igd3JpdGUgKi8KKyAgICBpbnQgZGlyZWN0OyAgICAgICAgICAgICAvKiAwIGlmIHByb2Nlc3NpbmcgZ3ppcCwgMSBpZiB0cmFuc3BhcmVudCAqLwogICAgICAgICAvKiBqdXN0IGZvciByZWFkaW5nICovCi0gICAgdW5zaWduZWQgaGF2ZTsgICAgICAgICAgLyogYW1vdW50IG9mIG91dHB1dCBkYXRhIHVudXNlZCBhdCBuZXh0ICovCi0gICAgaW50IGVvZjsgICAgICAgICAgICAgICAgLyogdHJ1ZSBpZiBlbmQgb2YgaW5wdXQgZmlsZSByZWFjaGVkICovCi0gICAgel9vZmY2NF90IHN0YXJ0OyAgICAgICAgLyogd2hlcmUgdGhlIGd6aXAgZGF0YSBzdGFydGVkLCBmb3IgcmV3aW5kaW5nICovCi0gICAgel9vZmY2NF90IHJhdzsgICAgICAgICAgLyogd2hlcmUgdGhlIHJhdyBkYXRhIHN0YXJ0ZWQsIGZvciBzZWVraW5nICovCiAgICAgaW50IGhvdzsgICAgICAgICAgICAgICAgLyogMDogZ2V0IGhlYWRlciwgMTogY29weSwgMjogZGVjb21wcmVzcyAqLwotICAgIGludCBkaXJlY3Q7ICAgICAgICAgICAgIC8qIHRydWUgaWYgbGFzdCByZWFkIGRpcmVjdCwgZmFsc2UgaWYgZ3ppcCAqLworICAgIHpfb2ZmNjRfdCBzdGFydDsgICAgICAgIC8qIHdoZXJlIHRoZSBnemlwIGRhdGEgc3RhcnRlZCwgZm9yIHJld2luZGluZyAqLworICAgIGludCBlb2Y7ICAgICAgICAgICAgICAgIC8qIHRydWUgaWYgZW5kIG9mIGlucHV0IGZpbGUgcmVhY2hlZCAqLworICAgIGludCBwYXN0OyAgICAgICAgICAgICAgIC8qIHRydWUgaWYgcmVhZCByZXF1ZXN0ZWQgcGFzdCBlbmQgKi8KICAgICAgICAgLyoganVzdCBmb3Igd3JpdGluZyAqLwogICAgIGludCBsZXZlbDsgICAgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICovCiAgICAgaW50IHN0cmF0ZWd5OyAgICAgICAgICAgLyogY29tcHJlc3Npb24gc3RyYXRlZ3kgKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nemlvLmMgYi9Nb2R1bGVzL3psaWIvZ3ppby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTkwZjQ5Li4wMDAwMDAwCi0tLSBhL01vZHVsZXMvemxpYi9nemlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDI2ICswLDAgQEAKLS8qIGd6aW8uYyAtLSBJTyBvbiAuZ3ogZmlsZXMKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1IEplYW4tbG91cCBHYWlsbHkuCi0gKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCi0gKgotICogQ29tcGlsZSB0aGlzIGZpbGUgd2l0aCAtRE5PX0daQ09NUFJFU1MgdG8gYXZvaWQgdGhlIGNvbXByZXNzaW9uIGNvZGUuCi0gKi8KLQotLyogQCgjKSAkSWQkICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jaW5jbHVkZSAienV0aWwuaCIKLQotI2lmZGVmIE5PX0RFRkxBVEUgICAgICAgLyogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBvbGQgZGVmaW5pdGlvbiAqLwotIyAgZGVmaW5lIE5PX0daQ09NUFJFU1MKLSNlbmRpZgotCi0jaWZuZGVmIE5PX0RVTU1ZX0RFQ0wKLXN0cnVjdCBpbnRlcm5hbF9zdGF0ZSB7aW50IGR1bW15O307IC8qIGZvciBidWdneSBjb21waWxlcnMgKi8KLSNlbmRpZgotCi0jaWZuZGVmIFpfQlVGU0laRQotIyAgaWZkZWYgTUFYU0VHXzY0SwotIyAgICBkZWZpbmUgWl9CVUZTSVpFIDQwOTYgLyogbWluaW1pemUgbWVtb3J5IHVzYWdlIGZvciAxNi1iaXQgRE9TICovCi0jICBlbHNlCi0jICAgIGRlZmluZSBaX0JVRlNJWkUgMTYzODQKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgWl9QUklOVEZfQlVGU0laRQotIyAgZGVmaW5lIFpfUFJJTlRGX0JVRlNJWkUgNDA5NgotI2VuZGlmCi0KLSNpZmRlZiBfX01WU19fCi0jICBwcmFnbWEgbWFwIChmZG9wZW4gLCAiXDE3NFwxNzRGRE9QRU4iKQotICAgRklMRSAqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKLSNlbmRpZgotCi0jaWZuZGVmIFNUREMKLWV4dGVybiB2b2lkcCAgbWFsbG9jIE9GKCh1SW50IHNpemUpKTsKLWV4dGVybiB2b2lkICAgZnJlZSAgIE9GKCh2b2lkcGYgcHRyKSk7Ci0jZW5kaWYKLQotI2RlZmluZSBBTExPQyhzaXplKSBtYWxsb2Moc2l6ZSkKLSNkZWZpbmUgVFJZRlJFRShwKSB7aWYgKHApIGZyZWUocCk7fQotCi1zdGF0aWMgaW50IGNvbnN0IGd6X21hZ2ljWzJdID0gezB4MWYsIDB4OGJ9OyAvKiBnemlwIG1hZ2ljIGhlYWRlciAqLwotCi0vKiBnemlwIGZsYWcgYnl0ZSAqLwotI2RlZmluZSBBU0NJSV9GTEFHICAgMHgwMSAvKiBiaXQgMCBzZXQ6IGZpbGUgcHJvYmFibHkgYXNjaWkgdGV4dCAqLwotI2RlZmluZSBIRUFEX0NSQyAgICAgMHgwMiAvKiBiaXQgMSBzZXQ6IGhlYWRlciBDUkMgcHJlc2VudCAqLwotI2RlZmluZSBFWFRSQV9GSUVMRCAgMHgwNCAvKiBiaXQgMiBzZXQ6IGV4dHJhIGZpZWxkIHByZXNlbnQgKi8KLSNkZWZpbmUgT1JJR19OQU1FICAgIDB4MDggLyogYml0IDMgc2V0OiBvcmlnaW5hbCBmaWxlIG5hbWUgcHJlc2VudCAqLwotI2RlZmluZSBDT01NRU5UICAgICAgMHgxMCAvKiBiaXQgNCBzZXQ6IGZpbGUgY29tbWVudCBwcmVzZW50ICovCi0jZGVmaW5lIFJFU0VSVkVEICAgICAweEUwIC8qIGJpdHMgNS4uNzogcmVzZXJ2ZWQgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgZ3pfc3RyZWFtIHsKLSAgICB6X3N0cmVhbSBzdHJlYW07Ci0gICAgaW50ICAgICAgel9lcnI7ICAgLyogZXJyb3IgY29kZSBmb3IgbGFzdCBzdHJlYW0gb3BlcmF0aW9uICovCi0gICAgaW50ICAgICAgel9lb2Y7ICAgLyogc2V0IGlmIGVuZCBvZiBpbnB1dCBmaWxlICovCi0gICAgRklMRSAgICAgKmZpbGU7ICAgLyogLmd6IGZpbGUgKi8KLSAgICBCeXRlICAgICAqaW5idWY7ICAvKiBpbnB1dCBidWZmZXIgKi8KLSAgICBCeXRlICAgICAqb3V0YnVmOyAvKiBvdXRwdXQgYnVmZmVyICovCi0gICAgdUxvbmcgICAgY3JjOyAgICAgLyogY3JjMzIgb2YgdW5jb21wcmVzc2VkIGRhdGEgKi8KLSAgICBjaGFyICAgICAqbXNnOyAgICAvKiBlcnJvciBtZXNzYWdlICovCi0gICAgY2hhciAgICAgKnBhdGg7ICAgLyogcGF0aCBuYW1lIGZvciBkZWJ1Z2dpbmcgb25seSAqLwotICAgIGludCAgICAgIHRyYW5zcGFyZW50OyAvKiAxIGlmIGlucHV0IGZpbGUgaXMgbm90IGEgLmd6IGZpbGUgKi8KLSAgICBjaGFyICAgICBtb2RlOyAgICAvKiAndycgb3IgJ3InICovCi0gICAgel9vZmZfdCAgc3RhcnQ7ICAgLyogc3RhcnQgb2YgY29tcHJlc3NlZCBkYXRhIGluIGZpbGUgKGhlYWRlciBza2lwcGVkKSAqLwotICAgIHpfb2ZmX3QgIGluOyAgICAgIC8qIGJ5dGVzIGludG8gZGVmbGF0ZSBvciBpbmZsYXRlICovCi0gICAgel9vZmZfdCAgb3V0OyAgICAgLyogYnl0ZXMgb3V0IG9mIGRlZmxhdGUgb3IgaW5mbGF0ZSAqLwotICAgIGludCAgICAgIGJhY2s7ICAgIC8qIG9uZSBjaGFyYWN0ZXIgcHVzaC1iYWNrICovCi0gICAgaW50ICAgICAgbGFzdDsgICAgLyogdHJ1ZSBpZiBwdXNoLWJhY2sgaXMgbGFzdCBjaGFyYWN0ZXIgKi8KLX0gZ3pfc3RyZWFtOwotCi0KLWxvY2FsIGd6RmlsZSBnel9vcGVuICAgICAgT0YoKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUsIGludCAgZmQpKTsKLWxvY2FsIGludCBkb19mbHVzaCAgICAgICAgT0YoKGd6RmlsZSBmaWxlLCBpbnQgZmx1c2gpKTsKLWxvY2FsIGludCAgICBnZXRfYnl0ZSAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotbG9jYWwgdm9pZCAgIGNoZWNrX2hlYWRlciBPRigoZ3pfc3RyZWFtICpzKSk7Ci1sb2NhbCBpbnQgICAgZGVzdHJveSAgICAgIE9GKChnel9zdHJlYW0gKnMpKTsKLWxvY2FsIHZvaWQgICBwdXRMb25nICAgICAgT0YoKEZJTEUgKmZpbGUsIHVMb25nIHgpKTsKLWxvY2FsIHVMb25nICBnZXRMb25nICAgICAgT0YoKGd6X3N0cmVhbSAqcykpOwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgT3BlbnMgYSBnemlwICguZ3opIGZpbGUgZm9yIHJlYWRpbmcgb3Igd3JpdGluZy4gVGhlIG1vZGUgcGFyYW1ldGVyCi0gICBpcyBhcyBpbiBmb3BlbiAoInJiIiBvciAid2IiKS4gVGhlIGZpbGUgaXMgZ2l2ZW4gZWl0aGVyIGJ5IGZpbGUgZGVzY3JpcHRvcgotICAgb3IgcGF0aCBuYW1lIChpZiBmZCA9PSAtMSkuCi0gICAgIGd6X29wZW4gcmV0dXJucyBOVUxMIGlmIHRoZSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQgb3IgaWYgdGhlcmUgd2FzCi0gICBpbnN1ZmZpY2llbnQgbWVtb3J5IHRvIGFsbG9jYXRlIHRoZSAoZGUpY29tcHJlc3Npb24gc3RhdGU7IGVycm5vCi0gICBjYW4gYmUgY2hlY2tlZCB0byBkaXN0aW5ndWlzaCB0aGUgdHdvIGNhc2VzIChpZiBlcnJubyBpcyB6ZXJvLCB0aGUKLSAgIHpsaWIgZXJyb3IgaXMgWl9NRU1fRVJST1IpLgotKi8KLWxvY2FsIGd6RmlsZSBnel9vcGVuIChwYXRoLCBtb2RlLCBmZCkKLSAgICBjb25zdCBjaGFyICpwYXRoOwotICAgIGNvbnN0IGNoYXIgKm1vZGU7Ci0gICAgaW50ICBmZDsKLXsKLSAgICBpbnQgZXJyOwotICAgIGludCBsZXZlbCA9IFpfREVGQVVMVF9DT01QUkVTU0lPTjsgLyogY29tcHJlc3Npb24gbGV2ZWwgKi8KLSAgICBpbnQgc3RyYXRlZ3kgPSBaX0RFRkFVTFRfU1RSQVRFR1k7IC8qIGNvbXByZXNzaW9uIHN0cmF0ZWd5ICovCi0gICAgY2hhciAqcCA9IChjaGFyKiltb2RlOwotICAgIGd6X3N0cmVhbSAqczsKLSAgICBjaGFyIGZtb2RlWzgwXTsgLyogY29weSBvZiBtb2RlLCB3aXRob3V0IHRoZSBjb21wcmVzc2lvbiBsZXZlbCAqLwotICAgIGNoYXIgKm0gPSBmbW9kZTsKLQotICAgIGlmICghcGF0aCB8fCAhbW9kZSkgcmV0dXJuIFpfTlVMTDsKLQotICAgIHMgPSAoZ3pfc3RyZWFtICopQUxMT0Moc2l6ZW9mKGd6X3N0cmVhbSkpOwotICAgIGlmICghcykgcmV0dXJuIFpfTlVMTDsKLQotICAgIHMtPnN0cmVhbS56YWxsb2MgPSAoYWxsb2NfZnVuYykwOwotICAgIHMtPnN0cmVhbS56ZnJlZSA9IChmcmVlX2Z1bmMpMDsKLSAgICBzLT5zdHJlYW0ub3BhcXVlID0gKHZvaWRwZikwOwotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWYgPSBaX05VTEw7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmID0gWl9OVUxMOwotICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IHMtPnN0cmVhbS5hdmFpbF9vdXQgPSAwOwotICAgIHMtPmZpbGUgPSBOVUxMOwotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+aW4gPSAwOwotICAgIHMtPm91dCA9IDA7Ci0gICAgcy0+YmFjayA9IEVPRjsKLSAgICBzLT5jcmMgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICBzLT5tc2cgPSBOVUxMOwotICAgIHMtPnRyYW5zcGFyZW50ID0gMDsKLQotICAgIHMtPnBhdGggPSAoY2hhciopQUxMT0Moc3RybGVuKHBhdGgpKzEpOwotICAgIGlmIChzLT5wYXRoID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgIH0KLSAgICBzdHJjcHkocy0+cGF0aCwgcGF0aCk7IC8qIGRvIHRoaXMgZWFybHkgZm9yIGRlYnVnZ2luZyAqLwotCi0gICAgcy0+bW9kZSA9ICdcMCc7Ci0gICAgZG8gewotICAgICAgICBpZiAoKnAgPT0gJ3InKSBzLT5tb2RlID0gJ3InOwotICAgICAgICBpZiAoKnAgPT0gJ3cnIHx8ICpwID09ICdhJykgcy0+bW9kZSA9ICd3JzsKLSAgICAgICAgaWYgKCpwID49ICcwJyAmJiAqcCA8PSAnOScpIHsKLSAgICAgICAgICAgIGxldmVsID0gKnAgLSAnMCc7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ2YnKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOwotICAgICAgICB9IGVsc2UgaWYgKCpwID09ICdoJykgewotICAgICAgICAgIHN0cmF0ZWd5ID0gWl9IVUZGTUFOX09OTFk7Ci0gICAgICAgIH0gZWxzZSBpZiAoKnAgPT0gJ1InKSB7Ci0gICAgICAgICAgc3RyYXRlZ3kgPSBaX1JMRTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICptKysgPSAqcDsgLyogY29weSB0aGUgbW9kZSAqLwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoKnArKyAmJiBtICE9IGZtb2RlICsgc2l6ZW9mKGZtb2RlKSk7Ci0gICAgaWYgKHMtPm1vZGUgPT0gJ1wwJykgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotCi0gICAgaWYgKHMtPm1vZGUgPT0gJ3cnKSB7Ci0jaWZkZWYgTk9fR1pDT01QUkVTUwotICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgIGVyciA9IGRlZmxhdGVJbml0MigmKHMtPnN0cmVhbSksIGxldmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgWl9ERUZMQVRFRCwgLU1BWF9XQklUUywgREVGX01FTV9MRVZFTCwgc3RyYXRlZ3kpOwotICAgICAgICAvKiB3aW5kb3dCaXRzIGlzIHBhc3NlZCA8IDAgdG8gc3VwcHJlc3MgemxpYiBoZWFkZXIgKi8KLQotICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSNlbmRpZgotICAgICAgICBpZiAoZXJyICE9IFpfT0sgfHwgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIGRlc3Ryb3kocyksIChnekZpbGUpWl9OVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfaW4gID0gcy0+aW5idWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLQotICAgICAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJihzLT5zdHJlYW0pLCAtTUFYX1dCSVRTKTsKLSAgICAgICAgLyogd2luZG93Qml0cyBpcyBwYXNzZWQgPCAwIHRvIHRlbGwgdGhhdCB0aGVyZSBpcyBubyB6bGliIGhlYWRlci4KLSAgICAgICAgICogTm90ZSB0aGF0IGluIHRoaXMgY2FzZSBpbmZsYXRlICpyZXF1aXJlcyogYW4gZXh0cmEgImR1bW15IiBieXRlCi0gICAgICAgICAqIGFmdGVyIHRoZSBjb21wcmVzc2VkIHN0cmVhbSBpbiBvcmRlciB0byBjb21wbGV0ZSBkZWNvbXByZXNzaW9uIGFuZAotICAgICAgICAgKiByZXR1cm4gWl9TVFJFQU1fRU5ELiBIZXJlIHRoZSBnemlwIENSQzMyIGVuc3VyZXMgdGhhdCA0IGJ5dGVzIGFyZQotICAgICAgICAgKiBwcmVzZW50IGFmdGVyIHRoZSBjb21wcmVzc2VkIHN0cmVhbS4KLSAgICAgICAgICovCi0gICAgICAgIGlmIChlcnIgIT0gWl9PSyB8fCBzLT5pbmJ1ZiA9PSBaX05VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBkZXN0cm95KHMpLCAoZ3pGaWxlKVpfTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotCi0gICAgZXJybm8gPSAwOwotICAgIHMtPmZpbGUgPSBmZCA8IDAgPyBGX09QRU4ocGF0aCwgZm1vZGUpIDogKEZJTEUqKWZkb3BlbihmZCwgZm1vZGUpOwotCi0gICAgaWYgKHMtPmZpbGUgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gZGVzdHJveShzKSwgKGd6RmlsZSlaX05VTEw7Ci0gICAgfQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotICAgICAgICAvKiBXcml0ZSBhIHZlcnkgc2ltcGxlIC5neiBoZWFkZXI6Ci0gICAgICAgICAqLwotICAgICAgICBmcHJpbnRmKHMtPmZpbGUsICIlYyVjJWMlYyVjJWMlYyVjJWMlYyIsIGd6X21hZ2ljWzBdLCBnel9tYWdpY1sxXSwKLSAgICAgICAgICAgICBaX0RFRkxBVEVELCAwIC8qZmxhZ3MqLywgMCwwLDAsMCAvKnRpbWUqLywgMCAvKnhmbGFncyovLCBPU19DT0RFKTsKLSAgICAgICAgcy0+c3RhcnQgPSAxMEw7Ci0gICAgICAgIC8qIFdlIHVzZSAxMEwgaW5zdGVhZCBvZiBmdGVsbChzLT5maWxlKSB0byBiZWNhdXNlIGZ0ZWxsIGNhdXNlcyBhbgotICAgICAgICAgKiBmZmx1c2ggb24gc29tZSBzeXN0ZW1zLiBUaGlzIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgZG9lc24ndCB1c2UKLSAgICAgICAgICogc3RhcnQgYW55d2F5IGluIHdyaXRlIG1vZGUsIHNvIHRoaXMgaW5pdGlhbGl6YXRpb24gaXMgbm90Ci0gICAgICAgICAqIG5lY2Vzc2FyeS4KLSAgICAgICAgICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hlY2tfaGVhZGVyKHMpOyAvKiBza2lwIHRoZSAuZ3ogaGVhZGVyICovCi0gICAgICAgIHMtPnN0YXJ0ID0gZnRlbGwocy0+ZmlsZSkgLSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgfQotCi0gICAgcmV0dXJuIChnekZpbGUpczsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIE9wZW5zIGEgZ3ppcCAoLmd6KSBmaWxlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcuCi0qLwotZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuIChwYXRoLCBtb2RlKQotICAgIGNvbnN0IGNoYXIgKnBhdGg7Ci0gICAgY29uc3QgY2hhciAqbW9kZTsKLXsKLSAgICByZXR1cm4gZ3pfb3BlbiAocGF0aCwgbW9kZSwgLTEpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgQXNzb2NpYXRlIGEgZ3pGaWxlIHdpdGggdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4gZmQgaXMgbm90IGR1cCdlZCBoZXJlCi0gICB0byBtaW1pYyB0aGUgYmVoYXZpbyh1KXIgb2YgZmRvcGVuLgotKi8KLWd6RmlsZSBaRVhQT1JUIGd6ZG9wZW4gKGZkLCBtb2RlKQotICAgIGludCBmZDsKLSAgICBjb25zdCBjaGFyICptb2RlOwotewotICAgIGNoYXIgbmFtZVs0Nl07ICAgICAgLyogYWxsb3cgZm9yIHVwIHRvIDEyOC1iaXQgaW50ZWdlcnMgKi8KLQotICAgIGlmIChmZCA8IDApIHJldHVybiAoZ3pGaWxlKVpfTlVMTDsKLSAgICBzcHJpbnRmKG5hbWUsICI8ZmQ6JWQ+IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCi0KLSAgICByZXR1cm4gZ3pfb3BlbiAobmFtZSwgbW9kZSwgZmQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIFVwZGF0ZSB0aGUgY29tcHJlc3Npb24gbGV2ZWwgYW5kIHN0cmF0ZWd5Ci0gKi8KLWludCBaRVhQT1JUIGd6c2V0cGFyYW1zIChmaWxlLCBsZXZlbCwgc3RyYXRlZ3kpCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgaW50IGxldmVsOwotICAgIGludCBzdHJhdGVneTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgaWYgKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICd3JykgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwotCi0gICAgLyogTWFrZSByb29tIHRvIGFsbG93IGZsdXNoaW5nICovCi0gICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgIHMtPnN0cmVhbS5uZXh0X291dCA9IHMtPm91dGJ1ZjsKLSAgICAgICAgaWYgKGZ3cml0ZShzLT5vdXRidWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSkgIT0gWl9CVUZTSVpFKSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgIH0KLSAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZGVmbGF0ZVBhcmFtcyAoJihzLT5zdHJlYW0pLCBsZXZlbCwgc3RyYXRlZ3kpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmVhZCBhIGJ5dGUgZnJvbSBhIGd6X3N0cmVhbTsgdXBkYXRlIG5leHRfaW4gYW5kIGF2YWlsX2luLiBSZXR1cm4gRU9GCi0gICBmb3IgZW5kIG9mIGZpbGUuCi0gICBJTiBhc3NlcnRpb246IHRoZSBzdHJlYW0gcyBoYXMgYmVlbiBzdWNlc3NmdWxseSBvcGVuZWQgZm9yIHJlYWRpbmcuCi0qLwotbG9jYWwgaW50IGdldF9ieXRlKHMpCi0gICAgZ3pfc3RyZWFtICpzOwotewotICAgIGlmIChzLT56X2VvZikgcmV0dXJuIEVPRjsKLSAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgZXJybm8gPSAwOwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAodUludClmcmVhZChzLT5pbmJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9pbiA9PSAwKSB7Ci0gICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICBpZiAoZmVycm9yKHMtPmZpbGUpKSBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICByZXR1cm4gRU9GOwotICAgICAgICB9Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgfQotICAgIHMtPnN0cmVhbS5hdmFpbF9pbi0tOwotICAgIHJldHVybiAqKHMtPnN0cmVhbS5uZXh0X2luKSsrOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIENoZWNrIHRoZSBnemlwIGhlYWRlciBvZiBhIGd6X3N0cmVhbSBvcGVuZWQgZm9yIHJlYWRpbmcuIFNldCB0aGUgc3RyZWFtCi0gICAgbW9kZSB0byB0cmFuc3BhcmVudCBpZiB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgaXMgbm90IHByZXNlbnQ7IHNldCBzLT5lcnIKLSAgICB0byBaX0RBVEFfRVJST1IgaWYgdGhlIG1hZ2ljIGhlYWRlciBpcyBwcmVzZW50IGJ1dCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyCi0gICAgaXMgaW5jb3JyZWN0LgotICAgIElOIGFzc2VydGlvbjogdGhlIHN0cmVhbSBzIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZCBzdWNlc3NmdWxseTsKLSAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gaXMgemVybyBmb3IgdGhlIGZpcnN0IHRpbWUsIGJ1dCBtYXkgYmUgbm9uLXplcm8KLSAgICAgICBmb3IgY29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSovCi1sb2NhbCB2b2lkIGNoZWNrX2hlYWRlcihzKQotICAgIGd6X3N0cmVhbSAqczsKLXsKLSAgICBpbnQgbWV0aG9kOyAvKiBtZXRob2QgYnl0ZSAqLwotICAgIGludCBmbGFnczsgIC8qIGZsYWdzIGJ5dGUgKi8KLSAgICB1SW50IGxlbjsKLSAgICBpbnQgYzsKLQotICAgIC8qIEFzc3VyZSB0d28gYnl0ZXMgaW4gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gcGVlayBhaGVhZCAtLSBoYW5kbGUgY2FzZQotICAgICAgIHdoZXJlIGZpcnN0IGJ5dGUgb2YgaGVhZGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGJ1ZmZlciBhZnRlciB0aGUgbGFzdAotICAgICAgIGd6aXAgc2VnbWVudCAqLwotICAgIGxlbiA9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICBpZiAobGVuIDwgMikgewotICAgICAgICBpZiAobGVuKSBzLT5pbmJ1ZlswXSA9IHMtPnN0cmVhbS5uZXh0X2luWzBdOwotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIGxlbiA9ICh1SW50KWZyZWFkKHMtPmluYnVmICsgbGVuLCAxLCBaX0JVRlNJWkUgPj4gbGVuLCBzLT5maWxlKTsKLSAgICAgICAgaWYgKGxlbiA9PSAwICYmIGZlcnJvcihzLT5maWxlKSkgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICBzLT5zdHJlYW0uYXZhaWxfaW4gKz0gbGVuOwotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiA9IHMtPmluYnVmOwotICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luIDwgMikgewotICAgICAgICAgICAgcy0+dHJhbnNwYXJlbnQgPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBQZWVrIGFoZWFkIHRvIGNoZWNrIHRoZSBnemlwIG1hZ2ljIGhlYWRlciAqLwotICAgIGlmIChzLT5zdHJlYW0ubmV4dF9pblswXSAhPSBnel9tYWdpY1swXSB8fAotICAgICAgICBzLT5zdHJlYW0ubmV4dF9pblsxXSAhPSBnel9tYWdpY1sxXSkgewotICAgICAgICBzLT50cmFuc3BhcmVudCA9IDE7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luIC09IDI7Ci0gICAgcy0+c3RyZWFtLm5leHRfaW4gKz0gMjsKLQotICAgIC8qIENoZWNrIHRoZSByZXN0IG9mIHRoZSBnemlwIGhlYWRlciAqLwotICAgIG1ldGhvZCA9IGdldF9ieXRlKHMpOwotICAgIGZsYWdzID0gZ2V0X2J5dGUocyk7Ci0gICAgaWYgKG1ldGhvZCAhPSBaX0RFRkxBVEVEIHx8IChmbGFncyAmIFJFU0VSVkVEKSAhPSAwKSB7Ci0gICAgICAgIHMtPnpfZXJyID0gWl9EQVRBX0VSUk9SOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyogRGlzY2FyZCB0aW1lLCB4ZmxhZ3MgYW5kIE9TIGNvZGU6ICovCi0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCA2OyBsZW4rKykgKHZvaWQpZ2V0X2J5dGUocyk7Ci0KLSAgICBpZiAoKGZsYWdzICYgRVhUUkFfRklFTEQpICE9IDApIHsgLyogc2tpcCB0aGUgZXh0cmEgZmllbGQgKi8KLSAgICAgICAgbGVuICA9ICAodUludClnZXRfYnl0ZShzKTsKLSAgICAgICAgbGVuICs9ICgodUludClnZXRfYnl0ZShzKSk8PDg7Ci0gICAgICAgIC8qIGxlbiBpcyBnYXJiYWdlIGlmIEVPRiBidXQgdGhlIGxvb3AgYmVsb3cgd2lsbCBxdWl0IGFueXdheSAqLwotICAgICAgICB3aGlsZSAobGVuLS0gIT0gMCAmJiBnZXRfYnl0ZShzKSAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIE9SSUdfTkFNRSkgIT0gMCkgeyAvKiBza2lwIHRoZSBvcmlnaW5hbCBmaWxlIG5hbWUgKi8KLSAgICAgICAgd2hpbGUgKChjID0gZ2V0X2J5dGUocykpICE9IDAgJiYgYyAhPSBFT0YpIDsKLSAgICB9Ci0gICAgaWYgKChmbGFncyAmIENPTU1FTlQpICE9IDApIHsgICAvKiBza2lwIHRoZSAuZ3ogZmlsZSBjb21tZW50ICovCi0gICAgICAgIHdoaWxlICgoYyA9IGdldF9ieXRlKHMpKSAhPSAwICYmIGMgIT0gRU9GKSA7Ci0gICAgfQotICAgIGlmICgoZmxhZ3MgJiBIRUFEX0NSQykgIT0gMCkgeyAgLyogc2tpcCB0aGUgaGVhZGVyIGNyYyAqLwotICAgICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IDI7IGxlbisrKSAodm9pZClnZXRfYnl0ZShzKTsKLSAgICB9Ci0gICAgcy0+el9lcnIgPSBzLT56X2VvZiA/IFpfREFUQV9FUlJPUiA6IFpfT0s7Ci19Ci0KLSAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqIENsZWFudXAgdGhlbiBmcmVlIHRoZSBnaXZlbiBnel9zdHJlYW0uIFJldHVybiBhIHpsaWIgZXJyb3IgY29kZS4KLSAgIFRyeSBmcmVlaW5nIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mIGFsbG9jYXRpb25zLgotICovCi1sb2NhbCBpbnQgZGVzdHJveSAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgaW50IGVyciA9IFpfT0s7Ci0KLSAgICBpZiAoIXMpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLQotICAgIGlmIChzLT5zdHJlYW0uc3RhdGUgIT0gTlVMTCkgewotICAgICAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgICAgICBlcnIgPSBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgICAgICBlcnIgPSBkZWZsYXRlRW5kKCYocy0+c3RyZWFtKSk7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIGlmIChzLT5tb2RlID09ICdyJykgewotICAgICAgICAgICAgZXJyID0gaW5mbGF0ZUVuZCgmKHMtPnN0cmVhbSkpOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmIChzLT5maWxlICE9IE5VTEwgJiYgZmNsb3NlKHMtPmZpbGUpKSB7Ci0jaWZkZWYgRVNQSVBFCi0gICAgICAgIGlmIChlcnJubyAhPSBFU1BJUEUpIC8qIGZjbG9zZSBpcyBicm9rZW4gZm9yIHBpcGVzIGluIEhQL1VYICovCi0jZW5kaWYKLSAgICAgICAgICAgIGVyciA9IFpfRVJSTk87Ci0gICAgfQotICAgIGlmIChzLT56X2VyciA8IDApIGVyciA9IHMtPnpfZXJyOwotCi0gICAgVFJZRlJFRShzLT5pbmJ1Zik7Ci0gICAgVFJZRlJFRShzLT5vdXRidWYpOwotICAgIFRSWUZSRUUocy0+cGF0aCk7Ci0gICAgVFJZRlJFRShzKTsKLSAgICByZXR1cm4gZXJyOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmVhZHMgdGhlIGdpdmVuIG51bWJlciBvZiB1bmNvbXByZXNzZWQgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLgotICAgZ3pyZWFkIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseSByZWFkICgwIGZvciBlbmQgb2YgZmlsZSkuCi0qLwotaW50IFpFWFBPUlQgZ3pyZWFkIChmaWxlLCBidWYsIGxlbikKLSAgICBnekZpbGUgZmlsZTsKLSAgICB2b2lkcCBidWY7Ci0gICAgdW5zaWduZWQgbGVuOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0gICAgQnl0ZWYgKnN0YXJ0ID0gKEJ5dGVmKilidWY7IC8qIHN0YXJ0aW5nIHBvaW50IGZvciBjcmMgY29tcHV0YXRpb24gKi8KLSAgICBCeXRlICAqbmV4dF9vdXQ7IC8qID09IHN0cmVhbS5uZXh0X291dCBidXQgbm90IGZvcmNlZCBmYXIgKGZvciBNU0RPUykgKi8KLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIGlmIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykgcmV0dXJuIC0xOwotICAgIGlmIChzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpIHJldHVybiAwOyAgLyogRU9GICovCi0KLSAgICBuZXh0X291dCA9IChCeXRlKilidWY7Ci0gICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IGxlbjsKLQotICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ICYmIHMtPmJhY2sgIT0gRU9GKSB7Ci0gICAgICAgICpuZXh0X291dCsrID0gcy0+YmFjazsKLSAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0Kys7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQtLTsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+b3V0Kys7Ci0gICAgICAgIHN0YXJ0Kys7Ci0gICAgICAgIGlmIChzLT5sYXN0KSB7Ci0gICAgICAgICAgICBzLT56X2VyciA9IFpfU1RSRUFNX0VORDsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCkgewotCi0gICAgICAgIGlmIChzLT50cmFuc3BhcmVudCkgewotICAgICAgICAgICAgLyogQ29weSBmaXJzdCB0aGUgbG9va2FoZWFkIGJ5dGVzOiAqLwotICAgICAgICAgICAgdUludCBuID0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICAgICAgaWYgKG4gPiBzLT5zdHJlYW0uYXZhaWxfb3V0KSBuID0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgICAgIGlmIChuID4gMCkgewotICAgICAgICAgICAgICAgIHptZW1jcHkocy0+c3RyZWFtLm5leHRfb3V0LCBzLT5zdHJlYW0ubmV4dF9pbiwgbik7Ci0gICAgICAgICAgICAgICAgbmV4dF9vdXQgKz0gbjsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBuZXh0X291dDsKLSAgICAgICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9pbiAgICs9IG47Ci0gICAgICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCAtPSBuOwotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiAgLT0gbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfb3V0ID4gMCkgewotICAgICAgICAgICAgICAgIHMtPnN0cmVhbS5hdmFpbF9vdXQgLT0KLSAgICAgICAgICAgICAgICAgICAgKHVJbnQpZnJlYWQobmV4dF9vdXQsIDEsIHMtPnN0cmVhbS5hdmFpbF9vdXQsIHMtPmZpbGUpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGVuIC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgICAgICBzLT5pbiAgKz0gbGVuOwotICAgICAgICAgICAgcy0+b3V0ICs9IGxlbjsKLSAgICAgICAgICAgIGlmIChsZW4gPT0gMCkgcy0+el9lb2YgPSAxOwotICAgICAgICAgICAgcmV0dXJuIChpbnQpbGVuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzLT5zdHJlYW0uYXZhaWxfaW4gPT0gMCAmJiAhcy0+el9lb2YpIHsKLQotICAgICAgICAgICAgZXJybm8gPSAwOwotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX2luID0gKHVJbnQpZnJlYWQocy0+aW5idWYsIDEsIFpfQlVGU0laRSwgcy0+ZmlsZSk7Ci0gICAgICAgICAgICBpZiAocy0+c3RyZWFtLmF2YWlsX2luID09IDApIHsKLSAgICAgICAgICAgICAgICBzLT56X2VvZiA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZlcnJvcihzLT5maWxlKSkgewotICAgICAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIH0KLSAgICAgICAgcy0+aW4gKz0gcy0+c3RyZWFtLmF2YWlsX2luOwotICAgICAgICBzLT5vdXQgKz0gcy0+c3RyZWFtLmF2YWlsX291dDsKLSAgICAgICAgcy0+el9lcnIgPSBpbmZsYXRlKCYocy0+c3RyZWFtKSwgWl9OT19GTFVTSCk7Ci0gICAgICAgIHMtPmluIC09IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0IC09IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0KLSAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfU1RSRUFNX0VORCkgewotICAgICAgICAgICAgLyogQ2hlY2sgQ1JDIGFuZCBvcmlnaW5hbCBzaXplICovCi0gICAgICAgICAgICBzLT5jcmMgPSBjcmMzMihzLT5jcmMsIHN0YXJ0LCAodUludCkocy0+c3RyZWFtLm5leHRfb3V0IC0gc3RhcnQpKTsKLSAgICAgICAgICAgIHN0YXJ0ID0gcy0+c3RyZWFtLm5leHRfb3V0OwotCi0gICAgICAgICAgICBpZiAoZ2V0TG9uZyhzKSAhPSBzLT5jcmMpIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfREFUQV9FUlJPUjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKHZvaWQpZ2V0TG9uZyhzKTsKLSAgICAgICAgICAgICAgICAvKiBUaGUgdW5jb21wcmVzc2VkIGxlbmd0aCByZXR1cm5lZCBieSBhYm92ZSBnZXRsb25nKCkgbWF5IGJlCi0gICAgICAgICAgICAgICAgICogZGlmZmVyZW50IGZyb20gcy0+b3V0IGluIGNhc2Ugb2YgY29uY2F0ZW5hdGVkIC5neiBmaWxlcy4KLSAgICAgICAgICAgICAgICAgKiBDaGVjayBmb3Igc3VjaCBmaWxlczoKLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBjaGVja19oZWFkZXIocyk7Ci0gICAgICAgICAgICAgICAgaWYgKHMtPnpfZXJyID09IFpfT0spIHsKLSAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KCYocy0+c3RyZWFtKSk7Ci0gICAgICAgICAgICAgICAgICAgIHMtPmNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSyB8fCBzLT56X2VvZikgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgc3RhcnQsICh1SW50KShzLT5zdHJlYW0ubmV4dF9vdXQgLSBzdGFydCkpOwotCi0gICAgaWYgKGxlbiA9PSBzLT5zdHJlYW0uYXZhaWxfb3V0ICYmCi0gICAgICAgIChzLT56X2VyciA9PSBaX0RBVEFfRVJST1IgfHwgcy0+el9lcnIgPT0gWl9FUlJOTykpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gKGludCkobGVuIC0gcy0+c3RyZWFtLmF2YWlsX291dCk7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICBSZWFkcyBvbmUgYnl0ZSBmcm9tIHRoZSBjb21wcmVzc2VkIGZpbGUuIGd6Z2V0YyByZXR1cm5zIHRoaXMgYnl0ZQotICAgb3IgLTEgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnemdldGMoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGM7Ci0KLSAgICByZXR1cm4gZ3pyZWFkKGZpbGUsICZjLCAxKSA9PSAxID8gYyA6IC0xOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgUHVzaCBvbmUgYnl0ZSBiYWNrIG9udG8gdGhlIHN0cmVhbS4KLSovCi1pbnQgWkVYUE9SVCBnenVuZ2V0YyhjLCBmaWxlKQotICAgIGludCBjOwotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InIHx8IGMgPT0gRU9GIHx8IHMtPmJhY2sgIT0gRU9GKSByZXR1cm4gRU9GOwotICAgIHMtPmJhY2sgPSBjOwotICAgIHMtPm91dC0tOwotICAgIHMtPmxhc3QgPSAocy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EKTsKLSAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX09LOwotICAgIHMtPnpfZW9mID0gMDsKLSAgICByZXR1cm4gYzsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFJlYWRzIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZSB1bnRpbCBsZW4tMSBjaGFyYWN0ZXJzIGFyZQotICAgcmVhZCwgb3IgYSBuZXdsaW5lIGNoYXJhY3RlciBpcyByZWFkIGFuZCB0cmFuc2ZlcnJlZCB0byBidWYsIG9yIGFuCi0gICBlbmQtb2YtZmlsZSBjb25kaXRpb24gaXMgZW5jb3VudGVyZWQuICBUaGUgc3RyaW5nIGlzIHRoZW4gdGVybWluYXRlZAotICAgd2l0aCBhIG51bGwgY2hhcmFjdGVyLgotICAgICAgZ3pnZXRzIHJldHVybnMgYnVmLCBvciBaX05VTEwgaW4gY2FzZSBvZiBlcnJvci4KLQotICAgICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gaXMgbm90IG9wdGltaXplZCBhdCBhbGwuCi0qLwotY2hhciAqIFpFWFBPUlQgZ3pnZXRzKGZpbGUsIGJ1ZiwgbGVuKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNoYXIgKmJ1ZjsKLSAgICBpbnQgbGVuOwotewotICAgIGNoYXIgKmIgPSBidWY7Ci0gICAgaWYgKGJ1ZiA9PSBaX05VTEwgfHwgbGVuIDw9IDApIHJldHVybiBaX05VTEw7Ci0KLSAgICB3aGlsZSAoLS1sZW4gPiAwICYmIGd6cmVhZChmaWxlLCBidWYsIDEpID09IDEgJiYgKmJ1ZisrICE9ICdcbicpIDsKLSAgICAqYnVmID0gJ1wwJzsKLSAgICByZXR1cm4gYiA9PSBidWYgJiYgbGVuID4gMCA/IFpfTlVMTCA6IGI7Ci19Ci0KLQotI2lmbmRlZiBOT19HWkNPTVBSRVNTCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgV3JpdGVzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGludG8gdGhlIGNvbXByZXNzZWQgZmlsZS4KLSAgIGd6d3JpdGUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotaW50IFpFWFBPUlQgZ3p3cml0ZSAoZmlsZSwgYnVmLCBsZW4pCi0gICAgZ3pGaWxlIGZpbGU7Ci0gICAgdm9pZHBjIGJ1ZjsKLSAgICB1bnNpZ25lZCBsZW47Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAndycpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLQotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gKEJ5dGVmKilidWY7Ci0gICAgcy0+c3RyZWFtLmF2YWlsX2luID0gbGVuOwotCi0gICAgd2hpbGUgKHMtPnN0cmVhbS5hdmFpbF9pbiAhPSAwKSB7Ci0KLSAgICAgICAgaWYgKHMtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgewotCi0gICAgICAgICAgICBzLT5zdHJlYW0ubmV4dF9vdXQgPSBzLT5vdXRidWY7Ci0gICAgICAgICAgICBpZiAoZndyaXRlKHMtPm91dGJ1ZiwgMSwgWl9CVUZTSVpFLCBzLT5maWxlKSAhPSBaX0JVRlNJWkUpIHsKLSAgICAgICAgICAgICAgICBzLT56X2VyciA9IFpfRVJSTk87Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBzLT5zdHJlYW0uYXZhaWxfb3V0ID0gWl9CVUZTSVpFOwotICAgICAgICB9Ci0gICAgICAgIHMtPmluICs9IHMtPnN0cmVhbS5hdmFpbF9pbjsKLSAgICAgICAgcy0+b3V0ICs9IHMtPnN0cmVhbS5hdmFpbF9vdXQ7Ci0gICAgICAgIHMtPnpfZXJyID0gZGVmbGF0ZSgmKHMtPnN0cmVhbSksIFpfTk9fRkxVU0gpOwotICAgICAgICBzLT5pbiAtPSBzLT5zdHJlYW0uYXZhaWxfaW47Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBpZiAocy0+el9lcnIgIT0gWl9PSykgYnJlYWs7Ci0gICAgfQotICAgIHMtPmNyYyA9IGNyYzMyKHMtPmNyYywgKGNvbnN0IEJ5dGVmICopYnVmLCBsZW4pOwotCi0gICAgcmV0dXJuIChpbnQpKGxlbiAtIHMtPnN0cmVhbS5hdmFpbF9pbik7Ci19Ci0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIENvbnZlcnRzLCBmb3JtYXRzLCBhbmQgd3JpdGVzIHRoZSBhcmdzIHRvIHRoZSBjb21wcmVzc2VkIGZpbGUgdW5kZXIKLSAgIGNvbnRyb2wgb2YgdGhlIGZvcm1hdCBzdHJpbmcsIGFzIGluIGZwcmludGYuIGd6cHJpbnRmIHJldHVybnMgdGhlIG51bWJlciBvZgotICAgdW5jb21wcmVzc2VkIGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4gKDAgaW4gY2FzZSBvZiBlcnJvcikuCi0qLwotI2lmZGVmIFNUREMKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLQotaW50IFpFWFBPUlRWQSBnenByaW50ZiAoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLyogYXJncyAqLyAuLi4pCi17Ci0gICAgY2hhciBidWZbWl9QUklOVEZfQlVGU0laRV07Ci0gICAgdmFfbGlzdCB2YTsKLSAgICBpbnQgbGVuOwotCi0gICAgYnVmW3NpemVvZihidWYpIC0gMV0gPSAwOwotICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotI2lmZGVmIE5PX3ZzbnByaW50ZgotIyAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplb2YoYnVmKTsgbGVuKyspCi0gICAgICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMgIGVsc2UKLSAgICBsZW4gPSB2c3ByaW50ZihidWYsIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7Ci0jICBlbmRpZgotI2Vsc2UKLSMgIGlmZGVmIEhBU192c25wcmludGZfdm9pZAotICAgICh2b2lkKXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAgZWxzZQotICAgIGxlbiA9IHZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwotIyAgZW5kaWYKLSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gKGludClzaXplb2YoYnVmKSB8fCBidWZbc2l6ZW9mKGJ1ZikgLSAxXSAhPSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gZ3p3cml0ZShmaWxlLCBidWYsICh1bnNpZ25lZClsZW4pOwotfQotI2Vsc2UgLyogbm90IEFOU0kgQyAqLwotCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChmaWxlLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwgYTksIGExMCwKLSAgICAgICAgICAgICAgICAgICAgICAgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNvbnN0IGNoYXIgKmZvcm1hdDsKLSAgICBpbnQgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLAotICAgICAgICBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjA7Ci17Ci0gICAgY2hhciBidWZbWl9QUklOVEZfQlVGU0laRV07Ci0gICAgaW50IGxlbjsKLQotICAgIGJ1ZltzaXplb2YoYnVmKSAtIDFdID0gMDsKLSNpZmRlZiBOT19zbnByaW50ZgotIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmludGYoYnVmLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7Ci0gICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplb2YoYnVmKTsgbGVuKyspCi0gICAgICAgIGlmIChidWZbbGVuXSA9PSAwKSBicmVhazsKLSMgIGVsc2UKLSAgICBsZW4gPSBzcHJpbnRmKGJ1ZiwgZm9ybWF0LCBhMSwgYTIsIGEzLCBhNCwgYTUsIGE2LCBhNywgYTgsCi0gICAgICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKLSMgIGVuZGlmCi0jZWxzZQotIyAgaWZkZWYgSEFTX3NucHJpbnRmX3ZvaWQKLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKLSAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGxlbiA9IHN0cmxlbihidWYpOwotIyAgZWxzZQotICAgIGxlbiA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotIyAgZW5kaWYKLSNlbmRpZgotICAgIGlmIChsZW4gPD0gMCB8fCBsZW4gPj0gc2l6ZW9mKGJ1ZikgfHwgYnVmW3NpemVvZihidWYpIC0gMV0gIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgYnVmLCBsZW4pOwotfQotI2VuZGlmCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgV3JpdGVzIGMsIGNvbnZlcnRlZCB0byBhbiB1bnNpZ25lZCBjaGFyLCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuCi0gICBnenB1dGMgcmV0dXJucyB0aGUgdmFsdWUgdGhhdCB3YXMgd3JpdHRlbiwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSovCi1pbnQgWkVYUE9SVCBnenB1dGMoZmlsZSwgYykKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgYzsKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGNjID0gKHVuc2lnbmVkIGNoYXIpIGM7IC8qIHJlcXVpcmVkIGZvciBiaWcgZW5kaWFuIHN5c3RlbXMgKi8KLQotICAgIHJldHVybiBnendyaXRlKGZpbGUsICZjYywgMSkgPT0gMSA/IChpbnQpY2MgOiAtMTsKLX0KLQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFdyaXRlcyB0aGUgZ2l2ZW4gbnVsbC10ZXJtaW5hdGVkIHN0cmluZyB0byB0aGUgY29tcHJlc3NlZCBmaWxlLCBleGNsdWRpbmcKLSAgIHRoZSB0ZXJtaW5hdGluZyBudWxsIGNoYXJhY3Rlci4KLSAgICAgIGd6cHV0cyByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuLCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLgotKi8KLWludCBaRVhQT1JUIGd6cHV0cyhmaWxlLCBzKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGNvbnN0IGNoYXIgKnM7Ci17Ci0gICAgcmV0dXJuIGd6d3JpdGUoZmlsZSwgKGNoYXIqKXMsICh1bnNpZ25lZClzdHJsZW4ocykpOwotfQotCi0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBGbHVzaGVzIGFsbCBwZW5kaW5nIG91dHB1dCBpbnRvIHRoZSBjb21wcmVzc2VkIGZpbGUuIFRoZSBwYXJhbWV0ZXIKLSAgIGZsdXNoIGlzIGFzIGluIHRoZSBkZWZsYXRlKCkgZnVuY3Rpb24uCi0qLwotbG9jYWwgaW50IGRvX2ZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICBnekZpbGUgZmlsZTsKLSAgICBpbnQgZmx1c2g7Ci17Ci0gICAgdUludCBsZW47Ci0gICAgaW50IGRvbmUgPSAwOwotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3cnKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOyAvKiBzaG91bGQgYmUgemVybyBhbHJlYWR5IGFueXdheSAqLwotCi0gICAgZm9yICg7OykgewotICAgICAgICBsZW4gPSBaX0JVRlNJWkUgLSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIGlmIChsZW4gIT0gMCkgewotICAgICAgICAgICAgaWYgKCh1SW50KWZ3cml0ZShzLT5vdXRidWYsIDEsIGxlbiwgcy0+ZmlsZSkgIT0gbGVuKSB7Ci0gICAgICAgICAgICAgICAgcy0+el9lcnIgPSBaX0VSUk5POwotICAgICAgICAgICAgICAgIHJldHVybiBaX0VSUk5POwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcy0+c3RyZWFtLm5leHRfb3V0ID0gcy0+b3V0YnVmOwotICAgICAgICAgICAgcy0+c3RyZWFtLmF2YWlsX291dCA9IFpfQlVGU0laRTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZG9uZSkgYnJlYWs7Ci0gICAgICAgIHMtPm91dCArPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotICAgICAgICBzLT56X2VyciA9IGRlZmxhdGUoJihzLT5zdHJlYW0pLCBmbHVzaCk7Ci0gICAgICAgIHMtPm91dCAtPSBzLT5zdHJlYW0uYXZhaWxfb3V0OwotCi0gICAgICAgIC8qIElnbm9yZSB0aGUgc2Vjb25kIG9mIHR3byBjb25zZWN1dGl2ZSBmbHVzaGVzOiAqLwotICAgICAgICBpZiAobGVuID09IDAgJiYgcy0+el9lcnIgPT0gWl9CVUZfRVJST1IpIHMtPnpfZXJyID0gWl9PSzsKLQotICAgICAgICAvKiBkZWZsYXRlIGhhcyBmaW5pc2hlZCBmbHVzaGluZyBvbmx5IHdoZW4gaXQgaGFzbid0IHVzZWQgdXAKLSAgICAgICAgICogYWxsIHRoZSBhdmFpbGFibGUgc3BhY2UgaW4gdGhlIG91dHB1dCBidWZmZXI6Ci0gICAgICAgICAqLwotICAgICAgICBkb25lID0gKHMtPnN0cmVhbS5hdmFpbF9vdXQgIT0gMCB8fCBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQpOwotCi0gICAgICAgIGlmIChzLT56X2VyciAhPSBaX09LICYmIHMtPnpfZXJyICE9IFpfU1RSRUFNX0VORCkgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiAgcy0+el9lcnIgPT0gWl9TVFJFQU1fRU5EID8gWl9PSyA6IHMtPnpfZXJyOwotfQotCi1pbnQgWkVYUE9SVCBnemZsdXNoIChmaWxlLCBmbHVzaCkKLSAgICAgZ3pGaWxlIGZpbGU7Ci0gICAgIGludCBmbHVzaDsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotICAgIGludCBlcnIgPSBkb19mbHVzaCAoZmlsZSwgZmx1c2gpOwotCi0gICAgaWYgKGVycikgcmV0dXJuIGVycjsKLSAgICBmZmx1c2gocy0+ZmlsZSk7Ci0gICAgcmV0dXJuICBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQgPyBaX09LIDogcy0+el9lcnI7Ci19Ci0jZW5kaWYgLyogTk9fR1pDT01QUkVTUyAqLwotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgIFNldHMgdGhlIHN0YXJ0aW5nIHBvc2l0aW9uIGZvciB0aGUgbmV4dCBnenJlYWQgb3IgZ3p3cml0ZSBvbiB0aGUgZ2l2ZW4KLSAgIGNvbXByZXNzZWQgZmlsZS4gVGhlIG9mZnNldCByZXByZXNlbnRzIGEgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZQotICAgICAgZ3pzZWVrIHJldHVybnMgdGhlIHJlc3VsdGluZyBvZmZzZXQgbG9jYXRpb24gYXMgbWVhc3VyZWQgaW4gYnl0ZXMgZnJvbQotICAgdGhlIGJlZ2lubmluZyBvZiB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSwgb3IgLTEgaW4gY2FzZSBvZiBlcnJvci4KLSAgICAgIFNFRUtfRU5EIGlzIG5vdCBpbXBsZW1lbnRlZCwgcmV0dXJucyBlcnJvci4KLSAgICAgIEluIHRoaXMgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgZ3pzZWVrIGNhbiBiZSBleHRyZW1lbHkgc2xvdy4KLSovCi16X29mZl90IFpFWFBPUlQgZ3pzZWVrIChmaWxlLCBvZmZzZXQsIHdoZW5jZSkKLSAgICBnekZpbGUgZmlsZTsKLSAgICB6X29mZl90IG9mZnNldDsKLSAgICBpbnQgd2hlbmNlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMIHx8IHdoZW5jZSA9PSBTRUVLX0VORCB8fAotICAgICAgICBzLT56X2VyciA9PSBaX0VSUk5PIHx8IHMtPnpfZXJyID09IFpfREFUQV9FUlJPUikgewotICAgICAgICByZXR1cm4gLTFMOwotICAgIH0KLQotICAgIGlmIChzLT5tb2RlID09ICd3JykgewotI2lmZGVmIE5PX0daQ09NUFJFU1MKLSAgICAgICAgcmV0dXJuIC0xTDsKLSNlbHNlCi0gICAgICAgIGlmICh3aGVuY2UgPT0gU0VFS19TRVQpIHsKLSAgICAgICAgICAgIG9mZnNldCAtPSBzLT5pbjsKLSAgICAgICAgfQotICAgICAgICBpZiAob2Zmc2V0IDwgMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICAvKiBBdCB0aGlzIHBvaW50LCBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiB6ZXJvIGJ5dGVzIHRvIHdyaXRlLiAqLwotICAgICAgICBpZiAocy0+aW5idWYgPT0gWl9OVUxMKSB7Ci0gICAgICAgICAgICBzLT5pbmJ1ZiA9IChCeXRlKilBTExPQyhaX0JVRlNJWkUpOyAvKiBmb3Igc2Vla2luZyAqLwotICAgICAgICAgICAgaWYgKHMtPmluYnVmID09IFpfTlVMTCkgcmV0dXJuIC0xTDsKLSAgICAgICAgICAgIHptZW16ZXJvKHMtPmluYnVmLCBaX0JVRlNJWkUpOwotICAgICAgICB9Ci0gICAgICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICAgICAgdUludCBzaXplID0gWl9CVUZTSVpFOwotICAgICAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkgc2l6ZSA9ICh1SW50KW9mZnNldDsKLQotICAgICAgICAgICAgc2l6ZSA9IGd6d3JpdGUoZmlsZSwgcy0+aW5idWYsIHNpemUpOwotICAgICAgICAgICAgaWYgKHNpemUgPT0gMCkgcmV0dXJuIC0xTDsKLQotICAgICAgICAgICAgb2Zmc2V0IC09IHNpemU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHMtPmluOwotI2VuZGlmCi0gICAgfQotICAgIC8qIFJlc3Qgb2YgZnVuY3Rpb24gaXMgZm9yIHJlYWRpbmcgb25seSAqLwotCi0gICAgLyogY29tcHV0ZSBhYnNvbHV0ZSBwb3NpdGlvbiAqLwotICAgIGlmICh3aGVuY2UgPT0gU0VFS19DVVIpIHsKLSAgICAgICAgb2Zmc2V0ICs9IHMtPm91dDsKLSAgICB9Ci0gICAgaWYgKG9mZnNldCA8IDApIHJldHVybiAtMUw7Ci0KLSAgICBpZiAocy0+dHJhbnNwYXJlbnQpIHsKLSAgICAgICAgLyogbWFwIHRvIGZzZWVrICovCi0gICAgICAgIHMtPmJhY2sgPSBFT0Y7Ci0gICAgICAgIHMtPnN0cmVhbS5hdmFpbF9pbiA9IDA7Ci0gICAgICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgICAgIGlmIChmc2VlayhzLT5maWxlLCBvZmZzZXQsIFNFRUtfU0VUKSA8IDApIHJldHVybiAtMUw7Ci0KLSAgICAgICAgcy0+aW4gPSBzLT5vdXQgPSBvZmZzZXQ7Ci0gICAgICAgIHJldHVybiBvZmZzZXQ7Ci0gICAgfQotCi0gICAgLyogRm9yIGEgbmVnYXRpdmUgc2VlaywgcmV3aW5kIGFuZCB1c2UgcG9zaXRpdmUgc2VlayAqLwotICAgIGlmIChvZmZzZXQgPj0gcy0+b3V0KSB7Ci0gICAgICAgIG9mZnNldCAtPSBzLT5vdXQ7Ci0gICAgfSBlbHNlIGlmIChnenJld2luZChmaWxlKSA8IDApIHsKLSAgICAgICAgcmV0dXJuIC0xTDsKLSAgICB9Ci0gICAgLyogb2Zmc2V0IGlzIG5vdyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHNraXAuICovCi0KLSAgICBpZiAob2Zmc2V0ICE9IDAgJiYgcy0+b3V0YnVmID09IFpfTlVMTCkgewotICAgICAgICBzLT5vdXRidWYgPSAoQnl0ZSopQUxMT0MoWl9CVUZTSVpFKTsKLSAgICAgICAgaWYgKHMtPm91dGJ1ZiA9PSBaX05VTEwpIHJldHVybiAtMUw7Ci0gICAgfQotICAgIGlmIChvZmZzZXQgJiYgcy0+YmFjayAhPSBFT0YpIHsKLSAgICAgICAgcy0+YmFjayA9IEVPRjsKLSAgICAgICAgcy0+b3V0Kys7Ci0gICAgICAgIG9mZnNldC0tOwotICAgICAgICBpZiAocy0+bGFzdCkgcy0+el9lcnIgPSBaX1NUUkVBTV9FTkQ7Ci0gICAgfQotICAgIHdoaWxlIChvZmZzZXQgPiAwKSAgewotICAgICAgICBpbnQgc2l6ZSA9IFpfQlVGU0laRTsKLSAgICAgICAgaWYgKG9mZnNldCA8IFpfQlVGU0laRSkgc2l6ZSA9IChpbnQpb2Zmc2V0OwotCi0gICAgICAgIHNpemUgPSBnenJlYWQoZmlsZSwgcy0+b3V0YnVmLCAodUludClzaXplKTsKLSAgICAgICAgaWYgKHNpemUgPD0gMCkgcmV0dXJuIC0xTDsKLSAgICAgICAgb2Zmc2V0IC09IHNpemU7Ci0gICAgfQotICAgIHJldHVybiBzLT5vdXQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXdpbmRzIGlucHV0IGZpbGUuCi0qLwotaW50IFpFWFBPUlQgZ3pyZXdpbmQgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAtMTsKLQotICAgIHMtPnpfZXJyID0gWl9PSzsKLSAgICBzLT56X2VvZiA9IDA7Ci0gICAgcy0+YmFjayA9IEVPRjsKLSAgICBzLT5zdHJlYW0uYXZhaWxfaW4gPSAwOwotICAgIHMtPnN0cmVhbS5uZXh0X2luID0gcy0+aW5idWY7Ci0gICAgcy0+Y3JjID0gY3JjMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgaWYgKCFzLT50cmFuc3BhcmVudCkgKHZvaWQpaW5mbGF0ZVJlc2V0KCZzLT5zdHJlYW0pOwotICAgIHMtPmluID0gMDsKLSAgICBzLT5vdXQgPSAwOwotICAgIHJldHVybiBmc2VlayhzLT5maWxlLCBzLT5zdGFydCwgU0VFS19TRVQpOwotfQotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyB0aGUgc3RhcnRpbmcgcG9zaXRpb24gZm9yIHRoZSBuZXh0IGd6cmVhZCBvciBnendyaXRlIG9uIHRoZQotICAgZ2l2ZW4gY29tcHJlc3NlZCBmaWxlLiBUaGlzIHBvc2l0aW9uIHJlcHJlc2VudHMgYSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlCi0gICB1bmNvbXByZXNzZWQgZGF0YSBzdHJlYW0uCi0qLwotel9vZmZfdCBaRVhQT1JUIGd6dGVsbCAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICByZXR1cm4gZ3pzZWVrKGZpbGUsIDBMLCBTRUVLX0NVUik7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIDEgd2hlbiBFT0YgaGFzIHByZXZpb3VzbHkgYmVlbiBkZXRlY3RlZCByZWFkaW5nIHRoZSBnaXZlbgotICAgaW5wdXQgc3RyZWFtLCBvdGhlcndpc2UgemVyby4KLSovCi1pbnQgWkVYUE9SVCBnemVvZiAoZmlsZSkKLSAgICBnekZpbGUgZmlsZTsKLXsKLSAgICBnel9zdHJlYW0gKnMgPSAoZ3pfc3RyZWFtKilmaWxlOwotCi0gICAgLyogV2l0aCBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZCBmaWxlcyB0aGF0IGNhbiBoYXZlIGVtYmVkZGVkCi0gICAgICogY3JjIHRyYWlsZXJzLCB6X2VvZiBpcyBubyBsb25nZXIgdGhlIG9ubHkvYmVzdCBpbmRpY2F0b3Igb2YgRU9GCi0gICAgICogb24gYSBnel9zdHJlYW0uIEhhbmRsZSBlbmQtb2Ytc3RyZWFtIGVycm9yIGV4cGxpY2l0bHkgaGVyZS4KLSAgICAgKi8KLSAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gMDsKLSAgICBpZiAocy0+el9lb2YpIHJldHVybiAxOwotICAgIHJldHVybiBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQ7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBSZXR1cm5zIDEgaWYgcmVhZGluZyBhbmQgZG9pbmcgc28gdHJhbnNwYXJlbnRseSwgb3RoZXJ3aXNlIHplcm8uCi0qLwotaW50IFpFWFBPUlQgZ3pkaXJlY3QgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwgfHwgcy0+bW9kZSAhPSAncicpIHJldHVybiAwOwotICAgIHJldHVybiBzLT50cmFuc3BhcmVudDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICBPdXRwdXRzIGEgbG9uZyBpbiBMU0Igb3JkZXIgdG8gdGhlIGdpdmVuIGZpbGUKLSovCi1sb2NhbCB2b2lkIHB1dExvbmcgKGZpbGUsIHgpCi0gICAgRklMRSAqZmlsZTsKLSAgICB1TG9uZyB4OwotewotICAgIGludCBuOwotICAgIGZvciAobiA9IDA7IG4gPCA0OyBuKyspIHsKLSAgICAgICAgZnB1dGMoKGludCkoeCAmIDB4ZmYpLCBmaWxlKTsKLSAgICAgICAgeCA+Pj0gODsKLSAgICB9Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgUmVhZHMgYSBsb25nIGluIExTQiBvcmRlciBmcm9tIHRoZSBnaXZlbiBnel9zdHJlYW0uIFNldHMgel9lcnIgaW4gY2FzZQotICAgb2YgZXJyb3IuCi0qLwotbG9jYWwgdUxvbmcgZ2V0TG9uZyAocykKLSAgICBnel9zdHJlYW0gKnM7Ci17Ci0gICAgdUxvbmcgeCA9ICh1TG9uZylnZXRfYnl0ZShzKTsKLSAgICBpbnQgYzsKLQotICAgIHggKz0gKCh1TG9uZylnZXRfYnl0ZShzKSk8PDg7Ci0gICAgeCArPSAoKHVMb25nKWdldF9ieXRlKHMpKTw8MTY7Ci0gICAgYyA9IGdldF9ieXRlKHMpOwotICAgIGlmIChjID09IEVPRikgcy0+el9lcnIgPSBaX0RBVEFfRVJST1I7Ci0gICAgeCArPSAoKHVMb25nKWMpPDwyNDsKLSAgICByZXR1cm4geDsKLX0KLQotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgIEZsdXNoZXMgYWxsIHBlbmRpbmcgb3V0cHV0IGlmIG5lY2Vzc2FyeSwgY2xvc2VzIHRoZSBjb21wcmVzc2VkIGZpbGUKLSAgIGFuZCBkZWFsbG9jYXRlcyBhbGwgdGhlIChkZSljb21wcmVzc2lvbiBzdGF0ZS4KLSovCi1pbnQgWkVYUE9SVCBnemNsb3NlIChmaWxlKQotICAgIGd6RmlsZSBmaWxlOwotewotICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7Ci0KLSAgICBpZiAocyA9PSBOVUxMKSByZXR1cm4gWl9TVFJFQU1fRVJST1I7Ci0KLSAgICBpZiAocy0+bW9kZSA9PSAndycpIHsKLSNpZmRlZiBOT19HWkNPTVBSRVNTCi0gICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKLSNlbHNlCi0gICAgICAgIGlmIChkb19mbHVzaCAoZmlsZSwgWl9GSU5JU0gpICE9IFpfT0spCi0gICAgICAgICAgICByZXR1cm4gZGVzdHJveSgoZ3pfc3RyZWFtKilmaWxlKTsKLQotICAgICAgICBwdXRMb25nIChzLT5maWxlLCBzLT5jcmMpOwotICAgICAgICBwdXRMb25nIChzLT5maWxlLCAodUxvbmcpKHMtPmluICYgMHhmZmZmZmZmZikpOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiBkZXN0cm95KChnel9zdHJlYW0qKWZpbGUpOwotfQotCi0jaWZkZWYgU1REQwotIyAgZGVmaW5lIHpzdHJlcnJvcihlcnJudW0pIHN0cmVycm9yKGVycm51bSkKLSNlbHNlCi0jICBkZWZpbmUgenN0cmVycm9yKGVycm51bSkgIiIKLSNlbmRpZgotCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgUmV0dXJucyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgdGhlIGxhc3QgZXJyb3Igd2hpY2ggb2NjdXJyZWQgb24gdGhlCi0gICBnaXZlbiBjb21wcmVzc2VkIGZpbGUuIGVycm51bSBpcyBzZXQgdG8gemxpYiBlcnJvciBudW1iZXIuIElmIGFuCi0gICBlcnJvciBvY2N1cnJlZCBpbiB0aGUgZmlsZSBzeXN0ZW0gYW5kIG5vdCBpbiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSwKLSAgIGVycm51bSBpcyBzZXQgdG8gWl9FUlJOTyBhbmQgdGhlIGFwcGxpY2F0aW9uIG1heSBjb25zdWx0IGVycm5vCi0gICB0byBnZXQgdGhlIGV4YWN0IGVycm9yIGNvZGUuCi0qLwotY29uc3QgY2hhciAqIFpFWFBPUlQgZ3plcnJvciAoZmlsZSwgZXJybnVtKQotICAgIGd6RmlsZSBmaWxlOwotICAgIGludCAqZXJybnVtOwotewotICAgIGNoYXIgKm07Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgKmVycm51bSA9IFpfU1RSRUFNX0VSUk9SOwotICAgICAgICByZXR1cm4gKGNvbnN0IGNoYXIqKUVSUl9NU0coWl9TVFJFQU1fRVJST1IpOwotICAgIH0KLSAgICAqZXJybnVtID0gcy0+el9lcnI7Ci0gICAgaWYgKCplcnJudW0gPT0gWl9PSykgcmV0dXJuIChjb25zdCBjaGFyKikiIjsKLQotICAgIG0gPSAoY2hhciopKCplcnJudW0gPT0gWl9FUlJOTyA/IHpzdHJlcnJvcihlcnJubykgOiBzLT5zdHJlYW0ubXNnKTsKLQotICAgIGlmIChtID09IE5VTEwgfHwgKm0gPT0gJ1wwJykgbSA9IChjaGFyKilFUlJfTVNHKHMtPnpfZXJyKTsKLQotICAgIFRSWUZSRUUocy0+bXNnKTsKLSAgICBzLT5tc2cgPSAoY2hhciopQUxMT0Moc3RybGVuKHMtPnBhdGgpICsgc3RybGVuKG0pICsgMyk7Ci0gICAgaWYgKHMtPm1zZyA9PSBaX05VTEwpIHJldHVybiAoY29uc3QgY2hhciopRVJSX01TRyhaX01FTV9FUlJPUik7Ci0gICAgc3RyY3B5KHMtPm1zZywgcy0+cGF0aCk7Ci0gICAgc3RyY2F0KHMtPm1zZywgIjogIik7Ci0gICAgc3RyY2F0KHMtPm1zZywgbSk7Ci0gICAgcmV0dXJuIChjb25zdCBjaGFyKilzLT5tc2c7Ci19Ci0KLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICBDbGVhciB0aGUgZXJyb3IgYW5kIGVuZC1vZi1maWxlIGZsYWdzLCBhbmQgZG8gdGhlIHNhbWUgZm9yIHRoZSByZWFsIGZpbGUuCi0qLwotdm9pZCBaRVhQT1JUIGd6Y2xlYXJlcnIgKGZpbGUpCi0gICAgZ3pGaWxlIGZpbGU7Ci17Ci0gICAgZ3pfc3RyZWFtICpzID0gKGd6X3N0cmVhbSopZmlsZTsKLQotICAgIGlmIChzID09IE5VTEwpIHJldHVybjsKLSAgICBpZiAocy0+el9lcnIgIT0gWl9TVFJFQU1fRU5EKSBzLT56X2VyciA9IFpfT0s7Ci0gICAgcy0+el9lb2YgPSAwOwotICAgIGNsZWFyZXJyKHMtPmZpbGUpOwotfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2d6bGliLmMgYi9Nb2R1bGVzL3psaWIvZ3psaWIuYwppbmRleCA2MDNlNjBlLi5mYWUyMDJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3psaWIuYworKysgYi9Nb2R1bGVzL3psaWIvZ3psaWIuYwpAQCAtMSwxOSArMSwyMyBAQAogLyogZ3psaWIuYyAtLSB6bGliIGZ1bmN0aW9ucyBjb21tb24gdG8gcmVhZGluZyBhbmQgd3JpdGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCiAjaW5jbHVkZSAiZ3pndXRzLmgiCiAKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgZGVmaW5lIExTRUVLIF9sc2Vla2k2NAorI2Vsc2UKICNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAogIyAgZGVmaW5lIExTRUVLIGxzZWVrNjQKICNlbHNlCiAjICBkZWZpbmUgTFNFRUsgbHNlZWsKICNlbmRpZgorI2VuZGlmCiAKIC8qIExvY2FsIGZ1bmN0aW9ucyAqLwogbG9jYWwgdm9pZCBnel9yZXNldCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBnekZpbGUgZ3pfb3BlbiBPRigoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworbG9jYWwgZ3pGaWxlIGd6X29wZW4gT0YoKGNvbnN0IHZvaWQgKiwgaW50LCBjb25zdCBjaGFyICopKTsKIAogI2lmIGRlZmluZWQgVU5ERVJfQ0UKIApAQCAtNzEsMjggKzc1LDQwIEBACiBsb2NhbCB2b2lkIGd6X3Jlc2V0KHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKKyAgICBzdGF0ZS0+eC5oYXZlID0gMDsgICAgICAgICAgICAgIC8qIG5vIG91dHB1dCBkYXRhIGF2YWlsYWJsZSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7ICAgLyogZm9yIHJlYWRpbmcgLi4uICovCi0gICAgICAgIHN0YXRlLT5oYXZlID0gMDsgICAgICAgICAgICAvKiBubyBvdXRwdXQgZGF0YSBhdmFpbGFibGUgKi8KICAgICAgICAgc3RhdGUtPmVvZiA9IDA7ICAgICAgICAgICAgIC8qIG5vdCBhdCBlbmQgb2YgZmlsZSAqLworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7ICAgICAgICAgICAgLyogaGF2ZSBub3QgcmVhZCBwYXN0IGVuZCB5ZXQgKi8KICAgICAgICAgc3RhdGUtPmhvdyA9IExPT0s7ICAgICAgICAgIC8qIGxvb2sgZm9yIGd6aXAgaGVhZGVyICovCi0gICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOyAgICAgICAgICAvKiBkZWZhdWx0IGZvciBlbXB0eSBmaWxlICovCiAgICAgfQogICAgIHN0YXRlLT5zZWVrID0gMDsgICAgICAgICAgICAgICAgLyogbm8gc2VlayByZXF1ZXN0IHBlbmRpbmcgKi8KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7ICAgIC8qIGNsZWFyIGVycm9yICovCi0gICAgc3RhdGUtPnBvcyA9IDA7ICAgICAgICAgICAgICAgICAvKiBubyB1bmNvbXByZXNzZWQgZGF0YSB5ZXQgKi8KKyAgICBzdGF0ZS0+eC5wb3MgPSAwOyAgICAgICAgICAgICAgIC8qIG5vIHVuY29tcHJlc3NlZCBkYXRhIHlldCAqLwogICAgIHN0YXRlLT5zdHJtLmF2YWlsX2luID0gMDsgICAgICAgLyogbm8gaW5wdXQgZGF0YSB5ZXQgKi8KIH0KIAogLyogT3BlbiBhIGd6aXAgZmlsZSBlaXRoZXIgYnkgbmFtZSBvciBmaWxlIGRlc2NyaXB0b3IuICovCiBsb2NhbCBnekZpbGUgZ3pfb3BlbihwYXRoLCBmZCwgbW9kZSkKLSAgICBjb25zdCBjaGFyICpwYXRoOworICAgIGNvbnN0IHZvaWQgKnBhdGg7CiAgICAgaW50IGZkOwogICAgIGNvbnN0IGNoYXIgKm1vZGU7CiB7CiAgICAgZ3pfc3RhdGVwIHN0YXRlOworICAgIHNpemVfdCBsZW47CisgICAgaW50IG9mbGFnOworI2lmZGVmIE9fQ0xPRVhFQworICAgIGludCBjbG9leGVjID0gMDsKKyNlbmRpZgorI2lmZGVmIE9fRVhDTAorICAgIGludCBleGNsdXNpdmUgPSAwOworI2VuZGlmCisKKyAgICAvKiBjaGVjayBpbnB1dCAqLworICAgIGlmIChwYXRoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogYWxsb2NhdGUgZ3pGaWxlIHN0cnVjdHVyZSB0byByZXR1cm4gKi8KLSAgICBzdGF0ZSA9IG1hbGxvYyhzaXplb2YoZ3pfc3RhdGUpKTsKKyAgICBzdGF0ZSA9IChnel9zdGF0ZXApbWFsbG9jKHNpemVvZihnel9zdGF0ZSkpOwogICAgIGlmIChzdGF0ZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdGF0ZS0+c2l6ZSA9IDA7ICAgICAgICAgICAgLyogbm8gYnVmZmVycyBhbGxvY2F0ZWQgeWV0ICovCkBAIC0xMDMsNiArMTE5LDcgQEAKICAgICBzdGF0ZS0+bW9kZSA9IEdaX05PTkU7CiAgICAgc3RhdGUtPmxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOwogICAgIHN0YXRlLT5zdHJhdGVneSA9IFpfREVGQVVMVF9TVFJBVEVHWTsKKyAgICBzdGF0ZS0+ZGlyZWN0ID0gMDsKICAgICB3aGlsZSAoKm1vZGUpIHsKICAgICAgICAgaWYgKCptb2RlID49ICcwJyAmJiAqbW9kZSA8PSAnOScpCiAgICAgICAgICAgICBzdGF0ZS0+bGV2ZWwgPSAqbW9kZSAtICcwJzsKQEAgLTEyNCw2ICsxNDEsMTYgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGNhc2UgJ2InOiAgICAgICAvKiBpZ25vcmUgLS0gd2lsbCByZXF1ZXN0IGJpbmFyeSBhbnl3YXkgKi8KICAgICAgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBPX0NMT0VYRUMKKyAgICAgICAgICAgIGNhc2UgJ2UnOgorICAgICAgICAgICAgICAgIGNsb2V4ZWMgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgT19FWENMCisgICAgICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgICAgICBleGNsdXNpdmUgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCiAgICAgICAgICAgICBjYXNlICdmJzoKICAgICAgICAgICAgICAgICBzdGF0ZS0+c3RyYXRlZ3kgPSBaX0ZJTFRFUkVEOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTM1LDYgKzE2MiwxMCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnRic6CiAgICAgICAgICAgICAgICAgc3RhdGUtPnN0cmF0ZWd5ID0gWl9GSVhFRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDogICAgICAgIC8qIGNvdWxkIGNvbnNpZGVyIGFzIGFuIGVycm9yLCBidXQganVzdCBpZ25vcmUgKi8KICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICB9CkBAIC0xNDcsMzAgKzE3OCw3MSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICAvKiBjYW4ndCBmb3JjZSB0cmFuc3BhcmVudCByZWFkICovCisgICAgaWYgKHN0YXRlLT5tb2RlID09IEdaX1JFQUQpIHsKKyAgICAgICAgaWYgKHN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDE7ICAgICAgLyogZm9yIGVtcHR5IGZpbGUgKi8KKyAgICB9CisKICAgICAvKiBzYXZlIHRoZSBwYXRoIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCi0gICAgc3RhdGUtPnBhdGggPSBtYWxsb2Moc3RybGVuKHBhdGgpICsgMSk7CisjaWZkZWYgX1dJTjMyCisgICAgaWYgKGZkID09IC0yKSB7CisgICAgICAgIGxlbiA9IHdjc3RvbWJzKE5VTEwsIHBhdGgsIDApOworICAgICAgICBpZiAobGVuID09IChzaXplX3QpLTEpCisgICAgICAgICAgICBsZW4gPSAwOworICAgIH0KKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopcGF0aCk7CisgICAgc3RhdGUtPnBhdGggPSAoY2hhciAqKW1hbGxvYyhsZW4gKyAxKTsKICAgICBpZiAoc3RhdGUtPnBhdGggPT0gTlVMTCkgewogICAgICAgICBmcmVlKHN0YXRlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0cmNweShzdGF0ZS0+cGF0aCwgcGF0aCk7CisjaWZkZWYgX1dJTjMyCisgICAgaWYgKGZkID09IC0yKQorICAgICAgICBpZiAobGVuKQorICAgICAgICAgICAgd2NzdG9tYnMoc3RhdGUtPnBhdGgsIHBhdGgsIGxlbiArIDEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqKHN0YXRlLT5wYXRoKSA9IDA7CisgICAgZWxzZQorI2VuZGlmCisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAgICAgc25wcmludGYoc3RhdGUtPnBhdGgsIGxlbiArIDEsICIlcyIsIChjb25zdCBjaGFyICopcGF0aCk7CisjZWxzZQorICAgICAgICBzdHJjcHkoc3RhdGUtPnBhdGgsIHBhdGgpOworI2VuZGlmCiAKLSAgICAvKiBvcGVuIHRoZSBmaWxlIHdpdGggdGhlIGFwcHJvcHJpYXRlIG1vZGUgKG9yIGp1c3QgdXNlIGZkKSAqLwotICAgIHN0YXRlLT5mZCA9IGZkICE9IC0xID8gZmQgOgotICAgICAgICBvcGVuKHBhdGgsCisgICAgLyogY29tcHV0ZSB0aGUgZmxhZ3MgZm9yIG9wZW4oKSAqLworICAgIG9mbGFnID0KICNpZmRlZiBPX0xBUkdFRklMRQotICAgICAgICAgICAgT19MQVJHRUZJTEUgfAorICAgICAgICBPX0xBUkdFRklMRSB8CiAjZW5kaWYKICNpZmRlZiBPX0JJTkFSWQotICAgICAgICAgICAgT19CSU5BUlkgfAorICAgICAgICBPX0JJTkFSWSB8CiAjZW5kaWYKLSAgICAgICAgICAgIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KLSAgICAgICAgICAgICAgICBPX1JET05MWSA6Ci0gICAgICAgICAgICAgICAgKE9fV1JPTkxZIHwgT19DUkVBVCB8ICgKLSAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPT0gR1pfV1JJVEUgPwotICAgICAgICAgICAgICAgICAgICAgICAgT19UUlVOQyA6Ci0gICAgICAgICAgICAgICAgICAgICAgICBPX0FQUEVORCkpKSwKLSAgICAgICAgICAgIDA2NjYpOworI2lmZGVmIE9fQ0xPRVhFQworICAgICAgICAoY2xvZXhlYyA/IE9fQ0xPRVhFQyA6IDApIHwKKyNlbmRpZgorICAgICAgICAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCA/CisgICAgICAgICBPX1JET05MWSA6CisgICAgICAgICAoT19XUk9OTFkgfCBPX0NSRUFUIHwKKyNpZmRlZiBPX0VYQ0wKKyAgICAgICAgICAoZXhjbHVzaXZlID8gT19FWENMIDogMCkgfAorI2VuZGlmCisgICAgICAgICAgKHN0YXRlLT5tb2RlID09IEdaX1dSSVRFID8KKyAgICAgICAgICAgT19UUlVOQyA6CisgICAgICAgICAgIE9fQVBQRU5EKSkpOworCisgICAgLyogb3BlbiB0aGUgZmlsZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncyAob3IganVzdCB1c2UgZmQpICovCisgICAgc3RhdGUtPmZkID0gZmQgPiAtMSA/IGZkIDogKAorI2lmZGVmIF9XSU4zMgorICAgICAgICBmZCA9PSAtMiA/IF93b3BlbihwYXRoLCBvZmxhZywgMDY2NikgOgorI2VuZGlmCisgICAgICAgIG9wZW4oKGNvbnN0IGNoYXIgKilwYXRoLCBvZmxhZywgMDY2NikpOwogICAgIGlmIChzdGF0ZS0+ZmQgPT0gLTEpIHsKICAgICAgICAgZnJlZShzdGF0ZS0+cGF0aCk7CiAgICAgICAgIGZyZWUoc3RhdGUpOwpAQCAtMjE2LDE1ICsyODgsMjkgQEAKICAgICBjaGFyICpwYXRoOyAgICAgICAgIC8qIGlkZW50aWZpZXIgZm9yIGVycm9yIG1lc3NhZ2VzICovCiAgICAgZ3pGaWxlIGd6OwogCi0gICAgaWYgKGZkID09IC0xIHx8IChwYXRoID0gbWFsbG9jKDcgKyAzICogc2l6ZW9mKGludCkpKSA9PSBOVUxMKQorICAgIGlmIChmZCA9PSAtMSB8fCAocGF0aCA9IChjaGFyICopbWFsbG9jKDcgKyAzICogc2l6ZW9mKGludCkpKSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKHBhdGgsIDcgKyAzICogc2l6ZW9mKGludCksICI8ZmQ6JWQ+IiwgZmQpOyAvKiBmb3IgZGVidWdnaW5nICovCisjZWxzZQogICAgIHNwcmludGYocGF0aCwgIjxmZDolZD4iLCBmZCk7ICAgLyogZm9yIGRlYnVnZ2luZyAqLworI2VuZGlmCiAgICAgZ3ogPSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKTsKICAgICBmcmVlKHBhdGgpOwogICAgIHJldHVybiBnejsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIF9XSU4zMgorZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuX3cocGF0aCwgbW9kZSkKKyAgICBjb25zdCB3Y2hhcl90ICpwYXRoOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgcmV0dXJuIGd6X29wZW4ocGF0aCwgLTIsIG1vZGUpOworfQorI2VuZGlmCisKKy8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUIGd6YnVmZmVyKGZpbGUsIHNpemUpCiAgICAgZ3pGaWxlIGZpbGU7CiAgICAgdW5zaWduZWQgc2l6ZTsKQEAgLTI0Myw4ICszMjksOCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjaGVjayBhbmQgc2V0IHJlcXVlc3RlZCBzaXplICovCi0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChzaXplIDwgMikKKyAgICAgICAgc2l6ZSA9IDI7ICAgICAgICAgICAgICAgLyogbmVlZCB0d28gYnl0ZXMgdG8gY2hlY2sgbWFnaWMgaGVhZGVyICovCiAgICAgc3RhdGUtPndhbnQgPSBzaXplOwogICAgIHJldHVybiAwOwogfQpAQCAtMjYxLDcgKzM0Nyw4IEBACiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogYmFjayB1cCBhbmQgc3RhcnQgb3ZlciAqLwpAQCAtMjg5LDcgKzM3Niw3IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGNoZWNrIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiBjYW4gb25seSBzZWVrIGZyb20gc3RhcnQgb3IgcmVsYXRpdmUgdG8gY3VycmVudCBwb3NpdGlvbiAqLwpAQCAtMjk4LDMxICszODUsMzIgQEAKIAogICAgIC8qIG5vcm1hbGl6ZSBvZmZzZXQgdG8gYSBTRUVLX0NVUiBzcGVjaWZpY2F0aW9uICovCiAgICAgaWYgKHdoZW5jZSA9PSBTRUVLX1NFVCkKLSAgICAgICAgb2Zmc2V0IC09IHN0YXRlLT5wb3M7CisgICAgICAgIG9mZnNldCAtPSBzdGF0ZS0+eC5wb3M7CiAgICAgZWxzZSBpZiAoc3RhdGUtPnNlZWspCiAgICAgICAgIG9mZnNldCArPSBzdGF0ZS0+c2tpcDsKICAgICBzdGF0ZS0+c2VlayA9IDA7CiAKICAgICAvKiBpZiB3aXRoaW4gcmF3IGFyZWEgd2hpbGUgcmVhZGluZywganVzdCBnbyB0aGVyZSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEICYmIHN0YXRlLT5ob3cgPT0gQ09QWSAmJgotICAgICAgICBzdGF0ZS0+cG9zICsgb2Zmc2V0ID49IHN0YXRlLT5yYXcpIHsKLSAgICAgICAgcmV0ID0gTFNFRUsoc3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+aGF2ZSwgU0VFS19DVVIpOworICAgICAgICAgICAgc3RhdGUtPngucG9zICsgb2Zmc2V0ID49IDApIHsKKyAgICAgICAgcmV0ID0gTFNFRUsoc3RhdGUtPmZkLCBvZmZzZXQgLSBzdGF0ZS0+eC5oYXZlLCBTRUVLX0NVUik7CiAgICAgICAgIGlmIChyZXQgPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHN0YXRlLT5oYXZlID0gMDsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CiAgICAgICAgIHN0YXRlLT5lb2YgPSAwOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgICAgIHN0YXRlLT5zZWVrID0gMDsKICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfT0ssIE5VTEwpOwogICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gb2Zmc2V0OwotICAgICAgICByZXR1cm4gc3RhdGUtPnBvczsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHN0YXRlLT54LnBvczsKICAgICB9CiAKICAgICAvKiBjYWxjdWxhdGUgc2tpcCBhbW91bnQsIHJld2luZGluZyBpZiBuZWVkZWQgZm9yIGJhY2sgc2VlayB3aGVuIHJlYWRpbmcgKi8KICAgICBpZiAob2Zmc2V0IDwgMCkgewogICAgICAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCkgICAgICAgICAvKiB3cml0aW5nIC0tIGNhbid0IGdvIGJhY2t3YXJkcyAqLwogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBvZmZzZXQgKz0gc3RhdGUtPnBvczsKKyAgICAgICAgb2Zmc2V0ICs9IHN0YXRlLT54LnBvczsKICAgICAgICAgaWYgKG9mZnNldCA8IDApICAgICAgICAgICAgICAgICAgICAgLyogYmVmb3JlIHN0YXJ0IG9mIGZpbGUhICovCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChnenJld2luZChmaWxlKSA9PSAtMSkgICAgICAgICAgIC8qIHJld2luZCwgdGhlbiBza2lwIHRvIG9mZnNldCAqLwpAQCAtMzMxLDExICs0MTksMTEgQEAKIAogICAgIC8qIGlmIHJlYWRpbmcsIHNraXAgd2hhdCdzIGluIG91dHB1dCBidWZmZXIgKG9uZSBsZXNzIGd6Z2V0YygpIGNoZWNrKSAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEKSB7Ci0gICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPmhhdmUgPiBvZmZzZXQgPwotICAgICAgICAgICAgKHVuc2lnbmVkKW9mZnNldCA6IHN0YXRlLT5oYXZlOwotICAgICAgICBzdGF0ZS0+aGF2ZSAtPSBuOwotICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIG4gPSBHVF9PRkYoc3RhdGUtPnguaGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+eC5oYXZlID4gb2Zmc2V0ID8KKyAgICAgICAgICAgICh1bnNpZ25lZClvZmZzZXQgOiBzdGF0ZS0+eC5oYXZlOworICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgIHN0YXRlLT54Lm5leHQgKz0gbjsKKyAgICAgICAgc3RhdGUtPngucG9zICs9IG47CiAgICAgICAgIG9mZnNldCAtPSBuOwogICAgIH0KIApAQCAtMzQ0LDcgKzQzMiw3IEBACiAgICAgICAgIHN0YXRlLT5zZWVrID0gMTsKICAgICAgICAgc3RhdGUtPnNraXAgPSBvZmZzZXQ7CiAgICAgfQotICAgIHJldHVybiBzdGF0ZS0+cG9zICsgb2Zmc2V0OworICAgIHJldHVybiBzdGF0ZS0+eC5wb3MgKyBvZmZzZXQ7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTM3Myw3ICs0NjEsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiByZXR1cm4gcG9zaXRpb24gKi8KLSAgICByZXR1cm4gc3RhdGUtPnBvcyArIChzdGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7CisgICAgcmV0dXJuIHN0YXRlLT54LnBvcyArIChzdGF0ZS0+c2VlayA/IHN0YXRlLT5za2lwIDogMCk7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQzMyw4ICs1MjEsNyBAQAogICAgICAgICByZXR1cm4gMDsKIAogICAgIC8qIHJldHVybiBlbmQtb2YtZmlsZSBzdGF0ZSAqLwotICAgIHJldHVybiBzdGF0ZS0+bW9kZSA9PSBHWl9SRUFEID8KLSAgICAgICAgKHN0YXRlLT5lb2YgJiYgc3RhdGUtPnN0cm0uYXZhaWxfaW4gPT0gMCAmJiBzdGF0ZS0+aGF2ZSA9PSAwKSA6IDA7CisgICAgcmV0dXJuIHN0YXRlLT5tb2RlID09IEdaX1JFQUQgPyBzdGF0ZS0+cGFzdCA6IDA7CiB9CiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KQEAgLTQ1NCw3ICs1NDEsOCBAQAogICAgIC8qIHJldHVybiBlcnJvciBpbmZvcm1hdGlvbiAqLwogICAgIGlmIChlcnJudW0gIT0gTlVMTCkKICAgICAgICAgKmVycm51bSA9IHN0YXRlLT5lcnI7Ci0gICAgcmV0dXJuIHN0YXRlLT5tc2cgPT0gTlVMTCA/ICIiIDogc3RhdGUtPm1zZzsKKyAgICByZXR1cm4gc3RhdGUtPmVyciA9PSBaX01FTV9FUlJPUiA/ICJvdXQgb2YgbWVtb3J5IiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUtPm1zZyA9PSBOVUxMID8gIiIgOiBzdGF0ZS0+bXNnKTsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtNDcxLDggKzU1OSwxMCBAQAogICAgICAgICByZXR1cm47CiAKICAgICAvKiBjbGVhciBlcnJvciBhbmQgZW5kLW9mLWZpbGUgKi8KLSAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkKKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCkgewogICAgICAgICBzdGF0ZS0+ZW9mID0gMDsKKyAgICAgICAgc3RhdGUtPnBhc3QgPSAwOworICAgIH0KICAgICBnel9lcnJvcihzdGF0ZSwgWl9PSywgTlVMTCk7CiB9CiAKQEAgLTQ5NCwyNiArNTg0LDMzIEBACiAgICAgICAgIHN0YXRlLT5tc2cgPSBOVUxMOwogICAgIH0KIAorICAgIC8qIGlmIGZhdGFsLCBzZXQgc3RhdGUtPnguaGF2ZSB0byAwIHNvIHRoYXQgdGhlIGd6Z2V0YygpIG1hY3JvIGZhaWxzICovCisgICAgaWYgKGVyciAhPSBaX09LICYmIGVyciAhPSBaX0JVRl9FUlJPUikKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDA7CisKICAgICAvKiBzZXQgZXJyb3IgY29kZSwgYW5kIGlmIG5vIG1lc3NhZ2UsIHRoZW4gZG9uZSAqLwogICAgIHN0YXRlLT5lcnIgPSBlcnI7CiAgICAgaWYgKG1zZyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKLSAgICAvKiBmb3IgYW4gb3V0IG9mIG1lbW9yeSBlcnJvciwgc2F2ZSBhcyBzdGF0aWMgc3RyaW5nICovCi0gICAgaWYgKGVyciA9PSBaX01FTV9FUlJPUikgewotICAgICAgICBzdGF0ZS0+bXNnID0gKGNoYXIgKiltc2c7CisgICAgLyogZm9yIGFuIG91dCBvZiBtZW1vcnkgZXJyb3IsIHJldHVybiBsaXRlcmFsIHN0cmluZyB3aGVuIHJlcXVlc3RlZCAqLworICAgIGlmIChlcnIgPT0gWl9NRU1fRVJST1IpCiAgICAgICAgIHJldHVybjsKLSAgICB9CiAKICAgICAvKiBjb25zdHJ1Y3QgZXJyb3IgbWVzc2FnZSB3aXRoIHBhdGggKi8KLSAgICBpZiAoKHN0YXRlLT5tc2cgPSBtYWxsb2Moc3RybGVuKHN0YXRlLT5wYXRoKSArIHN0cmxlbihtc2cpICsgMykpID09IE5VTEwpIHsKKyAgICBpZiAoKHN0YXRlLT5tc2cgPSAoY2hhciAqKW1hbGxvYyhzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzKSkgPT0KKyAgICAgICAgICAgIE5VTEwpIHsKICAgICAgICAgc3RhdGUtPmVyciA9IFpfTUVNX0VSUk9SOwotICAgICAgICBzdGF0ZS0+bXNnID0gKGNoYXIgKikib3V0IG9mIG1lbW9yeSI7CiAgICAgICAgIHJldHVybjsKICAgICB9CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICBzbnByaW50ZihzdGF0ZS0+bXNnLCBzdHJsZW4oc3RhdGUtPnBhdGgpICsgc3RybGVuKG1zZykgKyAzLAorICAgICAgICAgICAgICIlcyVzJXMiLCBzdGF0ZS0+cGF0aCwgIjogIiwgbXNnKTsKKyNlbHNlCiAgICAgc3RyY3B5KHN0YXRlLT5tc2csIHN0YXRlLT5wYXRoKTsKICAgICBzdHJjYXQoc3RhdGUtPm1zZywgIjogIik7CiAgICAgc3RyY2F0KHN0YXRlLT5tc2csIG1zZyk7CisjZW5kaWYKICAgICByZXR1cm47CiB9CiAKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nenJlYWQuYyBiL01vZHVsZXMvemxpYi9nenJlYWQuYwppbmRleCA1NDgyMDFhLi5iZjQ1MzhlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvZ3pyZWFkLmMKKysrIGIvTW9kdWxlcy96bGliL2d6cmVhZC5jCkBAIC0xLDUgKzEsNSBAQAogLyogZ3pyZWFkLmMgLS0gemxpYiBmdW5jdGlvbnMgZm9yIHJlYWRpbmcgZ3ppcCBmaWxlcwotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAxMCwgMjAxMSwgMjAxMiwgMjAxMyBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOCwxMCArOCw5IEBACiAvKiBMb2NhbCBmdW5jdGlvbnMgKi8KIGxvY2FsIGludCBnel9sb2FkIE9GKChnel9zdGF0ZXAsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIHVuc2lnbmVkICopKTsKIGxvY2FsIGludCBnel9hdmFpbCBPRigoZ3pfc3RhdGVwKSk7Ci1sb2NhbCBpbnQgZ3pfbmV4dDQgT0YoKGd6X3N0YXRlcCwgdW5zaWduZWQgbG9uZyAqKSk7Ci1sb2NhbCBpbnQgZ3pfaGVhZCBPRigoZ3pfc3RhdGVwKSk7Citsb2NhbCBpbnQgZ3pfbG9vayBPRigoZ3pfc3RhdGVwKSk7CiBsb2NhbCBpbnQgZ3pfZGVjb21wIE9GKChnel9zdGF0ZXApKTsKLWxvY2FsIGludCBnel9tYWtlIE9GKChnel9zdGF0ZXApKTsKK2xvY2FsIGludCBnel9mZXRjaCBPRigoZ3pfc3RhdGVwKSk7CiBsb2NhbCBpbnQgZ3pfc2tpcCBPRigoZ3pfc3RhdGVwLCB6X29mZjY0X3QpKTsKIAogLyogVXNlIHJlYWQoKSB0byBsb2FkIGEgYnVmZmVyIC0tIHJldHVybiAtMSBvbiBlcnJvciwgb3RoZXJ3aXNlIDAuICBSZWFkIGZyb20KQEAgLTQ2LDczICs0NSw1NCBAQAogICAgZXJyb3IsIDAgb3RoZXJ3aXNlLiAgTm90ZSB0aGF0IHRoZSBlb2YgZmxhZyBpcyBzZXQgd2hlbiB0aGUgZW5kIG9mIHRoZSBpbnB1dAogICAgZmlsZSBpcyByZWFjaGVkLCBldmVuIHRob3VnaCB0aGVyZSBtYXkgYmUgdW51c2VkIGRhdGEgaW4gdGhlIGJ1ZmZlci4gIE9uY2UKICAgIHRoYXQgZGF0YSBoYXMgYmVlbiB1c2VkLCBubyBtb3JlIGF0dGVtcHRzIHdpbGwgYmUgbWFkZSB0byByZWFkIHRoZSBmaWxlLgotICAgZ3pfYXZhaWwoKSBhc3N1bWVzIHRoYXQgc3RybS0+YXZhaWxfaW4gPT0gMC4gKi8KKyAgIElmIHN0cm0tPmF2YWlsX2luICE9IDAsIHRoZW4gdGhlIGN1cnJlbnQgZGF0YSBpcyBtb3ZlZCB0byB0aGUgYmVnaW5uaW5nIG9mCisgICB0aGUgaW5wdXQgYnVmZmVyLCBhbmQgdGhlbiB0aGUgcmVtYWluZGVyIG9mIHRoZSBidWZmZXIgaXMgbG9hZGVkIHdpdGggdGhlCisgICBhdmFpbGFibGUgZGF0YSBmcm9tIHRoZSBpbnB1dCBmaWxlLiAqLwogbG9jYWwgaW50IGd6X2F2YWlsKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKKyAgICB1bnNpZ25lZCBnb3Q7CiAgICAgel9zdHJlYW1wIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAotICAgIGlmIChzdGF0ZS0+ZXJyICE9IFpfT0spCisgICAgaWYgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKHN0YXRlLT5lb2YgPT0gMCkgewotICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgc3RhdGUtPmluLCBzdGF0ZS0+c2l6ZSwKLSAgICAgICAgICAgICAgICAodW5zaWduZWQgKikmKHN0cm0tPmF2YWlsX2luKSkgPT0gLTEpCisgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbikgeyAgICAgICAvKiBjb3B5IHdoYXQncyB0aGVyZSB0byB0aGUgc3RhcnQgKi8KKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnAgPSBzdGF0ZS0+aW47CisgICAgICAgICAgICB1bnNpZ25lZCBjb25zdCBjaGFyICpxID0gc3RybS0+bmV4dF9pbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG4gPSBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAqcCsrID0gKnErKzsKKyAgICAgICAgICAgIH0gd2hpbGUgKC0tbik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5pbiArIHN0cm0tPmF2YWlsX2luLAorICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+c2l6ZSAtIHN0cm0tPmF2YWlsX2luLCAmZ290KSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gZ290OwogICAgICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAotLyogR2V0IG5leHQgYnl0ZSBmcm9tIGlucHV0LCBvciAtMSBpZiBlbmQgb3IgZXJyb3IuICovCi0jZGVmaW5lIE5FWFQoKSAoKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKSA/IC0xIDogXAotICAgICAgICAgICAgICAgIChzdHJtLT5hdmFpbF9pbiA9PSAwID8gLTEgOiBcCi0gICAgICAgICAgICAgICAgIChzdHJtLT5hdmFpbF9pbi0tLCAqKHN0cm0tPm5leHRfaW4pKyspKSkKLQotLyogR2V0IGEgZm91ci1ieXRlIGxpdHRsZS1lbmRpYW4gaW50ZWdlciBhbmQgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgdGhlIHZhbHVlCi0gICBpbiAqcmV0LiAgT3RoZXJ3aXNlIC0xIGlzIHJldHVybmVkIGFuZCAqcmV0IGlzIG5vdCBtb2RpZmllZC4gKi8KLWxvY2FsIGludCBnel9uZXh0NChzdGF0ZSwgcmV0KQotICAgIGd6X3N0YXRlcCBzdGF0ZTsKLSAgICB1bnNpZ25lZCBsb25nICpyZXQ7Ci17Ci0gICAgaW50IGNoOwotICAgIHVuc2lnbmVkIGxvbmcgdmFsOwotICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7Ci0KLSAgICB2YWwgPSBORVhUKCk7Ci0gICAgdmFsICs9ICh1bnNpZ25lZClORVhUKCkgPDwgODsKLSAgICB2YWwgKz0gKHVuc2lnbmVkIGxvbmcpTkVYVCgpIDw8IDE2OwotICAgIGNoID0gTkVYVCgpOwotICAgIGlmIChjaCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHZhbCArPSAodW5zaWduZWQgbG9uZyljaCA8PCAyNDsKLSAgICAqcmV0ID0gdmFsOwotICAgIHJldHVybiAwOwotfQotCi0vKiBMb29rIGZvciBnemlwIGhlYWRlciwgc2V0IHVwIGZvciBpbmZsYXRlIG9yIGNvcHkuICBzdGF0ZS0+aGF2ZSBtdXN0IGJlIHplcm8uCisvKiBMb29rIGZvciBnemlwIGhlYWRlciwgc2V0IHVwIGZvciBpbmZsYXRlIG9yIGNvcHkuICBzdGF0ZS0+eC5oYXZlIG11c3QgYmUgMC4KICAgIElmIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgaW4sIGFsbG9jYXRlIHJlcXVpcmVkIG1lbW9yeS4gIHN0YXRlLT5ob3cgd2lsbCBiZQogICAgbGVmdCB1bmNoYW5nZWQgaWYgdGhlcmUgaXMgbm8gbW9yZSBpbnB1dCBkYXRhIGF2YWlsYWJsZSwgd2lsbCBiZSBzZXQgdG8gQ09QWQogICAgaWYgdGhlcmUgaXMgbm8gZ3ppcCBoZWFkZXIgYW5kIGRpcmVjdCBjb3B5aW5nIHdpbGwgYmUgcGVyZm9ybWVkLCBvciBpdCB3aWxsCi0gICBiZSBzZXQgdG8gR1pJUCBmb3IgZGVjb21wcmVzc2lvbiwgYW5kIHRoZSBnemlwIGhlYWRlciB3aWxsIGJlIHNraXBwZWQgc28KLSAgIHRoYXQgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGRhdGEgaXMgdGhlIHJhdyBkZWZsYXRlIHN0cmVhbS4gIElmIGRpcmVjdAotICAgY29weWluZywgdGhlbiBsZWZ0b3ZlciBpbnB1dCBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB3aWxsIGJlIGNvcGllZCB0bwotICAgdGhlIG91dHB1dCBidWZmZXIuICBJbiB0aGF0IGNhc2UsIGFsbCBmdXJ0aGVyIGZpbGUgcmVhZHMgd2lsbCBiZSBkaXJlY3RseSB0bwotICAgZWl0aGVyIHRoZSBvdXRwdXQgYnVmZmVyIG9yIGEgdXNlciBidWZmZXIuICBJZiBkZWNvbXByZXNzaW5nLCB0aGUgaW5mbGF0ZQotICAgc3RhdGUgYW5kIHRoZSBjaGVjayB2YWx1ZSB3aWxsIGJlIGluaXRpYWxpemVkLiAgZ3pfaGVhZCgpIHdpbGwgcmV0dXJuIDAgb24KLSAgIHN1Y2Nlc3Mgb3IgLTEgb24gZmFpbHVyZS4gIEZhaWx1cmVzIG1heSBpbmNsdWRlIHJlYWQgZXJyb3JzIG9yIGd6aXAgaGVhZGVyCi0gICBlcnJvcnMuICAqLwotbG9jYWwgaW50IGd6X2hlYWQoc3RhdGUpCisgICBiZSBzZXQgdG8gR1pJUCBmb3IgZGVjb21wcmVzc2lvbi4gIElmIGRpcmVjdCBjb3B5aW5nLCB0aGVuIGxlZnRvdmVyIGlucHV0CisgICBkYXRhIGZyb20gdGhlIGlucHV0IGJ1ZmZlciB3aWxsIGJlIGNvcGllZCB0byB0aGUgb3V0cHV0IGJ1ZmZlci4gIEluIHRoYXQKKyAgIGNhc2UsIGFsbCBmdXJ0aGVyIGZpbGUgcmVhZHMgd2lsbCBiZSBkaXJlY3RseSB0byBlaXRoZXIgdGhlIG91dHB1dCBidWZmZXIgb3IKKyAgIGEgdXNlciBidWZmZXIuICBJZiBkZWNvbXByZXNzaW5nLCB0aGUgaW5mbGF0ZSBzdGF0ZSB3aWxsIGJlIGluaXRpYWxpemVkLgorICAgZ3pfbG9vaygpIHdpbGwgcmV0dXJuIDAgb24gc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLiAqLworbG9jYWwgaW50IGd6X2xvb2soc3RhdGUpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogewogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7Ci0gICAgaW50IGZsYWdzOwotICAgIHVuc2lnbmVkIGxlbjsKIAogICAgIC8qIGFsbG9jYXRlIHJlYWQgYnVmZmVycyBhbmQgaW5mbGF0ZSBtZW1vcnkgKi8KICAgICBpZiAoc3RhdGUtPnNpemUgPT0gMCkgewogICAgICAgICAvKiBhbGxvY2F0ZSBidWZmZXJzICovCi0gICAgICAgIHN0YXRlLT5pbiA9IG1hbGxvYyhzdGF0ZS0+d2FudCk7Ci0gICAgICAgIHN0YXRlLT5vdXQgPSBtYWxsb2Moc3RhdGUtPndhbnQgPDwgMSk7CisgICAgICAgIHN0YXRlLT5pbiA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50KTsKKyAgICAgICAgc3RhdGUtPm91dCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKHN0YXRlLT53YW50IDw8IDEpOwogICAgICAgICBpZiAoc3RhdGUtPmluID09IE5VTEwgfHwgc3RhdGUtPm91dCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAoc3RhdGUtPm91dCAhPSBOVUxMKQogICAgICAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CkBAIC0xMjksNyArMTA5LDcgQEAKICAgICAgICAgc3RhdGUtPnN0cm0ub3BhcXVlID0gWl9OVUxMOwogICAgICAgICBzdGF0ZS0+c3RybS5hdmFpbF9pbiA9IDA7CiAgICAgICAgIHN0YXRlLT5zdHJtLm5leHRfaW4gPSBaX05VTEw7Ci0gICAgICAgIGlmIChpbmZsYXRlSW5pdDIoJihzdGF0ZS0+c3RybSksIC0xNSkgIT0gWl9PSykgeyAgICAvKiByYXcgaW5mbGF0ZSAqLworICAgICAgICBpZiAoaW5mbGF0ZUluaXQyKCYoc3RhdGUtPnN0cm0pLCAxNSArIDE2KSAhPSBaX09LKSB7ICAgIC8qIGd1bnppcCAqLwogICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKICAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKICAgICAgICAgICAgIHN0YXRlLT5zaXplID0gMDsKQEAgLTEzOCw4MyArMTE4LDQ1IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBnZXQgc29tZSBkYXRhIGluIHRoZSBpbnB1dCBidWZmZXIgKi8KLSAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgeworICAgIC8qIGdldCBhdCBsZWFzdCB0aGUgbWFnaWMgYnl0ZXMgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLworICAgIGlmIChzdHJtLT5hdmFpbF9pbiA8IDIpIHsKICAgICAgICAgaWYgKGd6X2F2YWlsKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvKiBsb29rIGZvciB0aGUgZ3ppcCBtYWdpYyBoZWFkZXIgYnl0ZXMgMzEgYW5kIDEzOSAqLwotICAgIGlmIChzdHJtLT5uZXh0X2luWzBdID09IDMxKSB7Ci0gICAgICAgIHN0cm0tPmF2YWlsX2luLS07Ci0gICAgICAgIHN0cm0tPm5leHRfaW4rKzsKLSAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gJiYgc3RybS0+bmV4dF9pblswXSA9PSAxMzkpIHsKLSAgICAgICAgICAgIC8qIHdlIGhhdmUgYSBnemlwIGhlYWRlciwgd29vIGhvbyEgKi8KLSAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luLS07Ci0gICAgICAgICAgICBzdHJtLT5uZXh0X2luKys7Ci0KLSAgICAgICAgICAgIC8qIHNraXAgcmVzdCBvZiBoZWFkZXIgKi8KLSAgICAgICAgICAgIGlmIChORVhUKCkgIT0gOCkgeyAgICAgIC8qIGNvbXByZXNzaW9uIG1ldGhvZCAqLwotICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGZsYWdzID0gTkVYVCgpOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMHhlMCkgeyAgICAgLyogcmVzZXJ2ZWQgZmxhZyBiaXRzICovCi0gICAgICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVua25vd24gaGVhZGVyIGZsYWdzIHNldCIpOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIE5FWFQoKTsgICAgICAgICAgICAgICAgIC8qIG1vZGlmaWNhdGlvbiB0aW1lICovCi0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICBORVhUKCk7ICAgICAgICAgICAgICAgICAvKiBleHRyYSBmbGFncyAqLwotICAgICAgICAgICAgTkVYVCgpOyAgICAgICAgICAgICAgICAgLyogb3BlcmF0aW5nIHN5c3RlbSAqLwotICAgICAgICAgICAgaWYgKGZsYWdzICYgNCkgeyAgICAgICAgLyogZXh0cmEgZmllbGQgKi8KLSAgICAgICAgICAgICAgICBsZW4gPSAodW5zaWduZWQpTkVYVCgpOwotICAgICAgICAgICAgICAgIGxlbiArPSAodW5zaWduZWQpTkVYVCgpIDw8IDg7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGxlbi0tKQotICAgICAgICAgICAgICAgICAgICBpZiAoTkVYVCgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZsYWdzICYgOCkgICAgICAgICAgLyogZmlsZSBuYW1lICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKE5FWFQoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIDsKLSAgICAgICAgICAgIGlmIChmbGFncyAmIDE2KSAgICAgICAgIC8qIGNvbW1lbnQgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoTkVYVCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgaWYgKGZsYWdzICYgMikgeyAgICAgICAgLyogaGVhZGVyIGNyYyAqLwotICAgICAgICAgICAgICAgIE5FWFQoKTsKLSAgICAgICAgICAgICAgICBORVhUKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvKiBhbiB1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIGlzIG5vdCBjaGVja2VkIGZvciBoZXJlIC0tIGl0IHdpbGwgYmUKLSAgICAgICAgICAgICAgIG5vdGljZWQgb24gdGhlIGZpcnN0IHJlcXVlc3QgZm9yIHVuY29tcHJlc3NlZCBkYXRhICovCi0KLSAgICAgICAgICAgIC8qIHNldCB1cCBmb3IgZGVjb21wcmVzc2lvbiAqLwotICAgICAgICAgICAgaW5mbGF0ZVJlc2V0KHN0cm0pOwotICAgICAgICAgICAgc3RybS0+YWRsZXIgPSBjcmMzMigwTCwgWl9OVUxMLCAwKTsKLSAgICAgICAgICAgIHN0YXRlLT5ob3cgPSBHWklQOwotICAgICAgICAgICAgc3RhdGUtPmRpcmVjdCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIG5vdCBhIGd6aXAgZmlsZSAtLSBzYXZlIGZpcnN0IGJ5dGUgKDMxKSBhbmQgZmFsbCB0byByYXcgaS9vICovCi0gICAgICAgICAgICBzdGF0ZS0+b3V0WzBdID0gMzE7Ci0gICAgICAgICAgICBzdGF0ZS0+aGF2ZSA9IDE7Ci0gICAgICAgIH0KKyAgICAvKiBsb29rIGZvciBnemlwIG1hZ2ljIGJ5dGVzIC0tIGlmIHRoZXJlLCBkbyBnemlwIGRlY29kaW5nIChub3RlOiB0aGVyZSBpcworICAgICAgIGEgbG9naWNhbCBkaWxlbW1hIGhlcmUgd2hlbiBjb25zaWRlcmluZyB0aGUgY2FzZSBvZiBhIHBhcnRpYWxseSB3cml0dGVuCisgICAgICAgZ3ppcCBmaWxlLCB0byB3aXQsIGlmIGEgc2luZ2xlIDMxIGJ5dGUgaXMgd3JpdHRlbiwgdGhlbiB3ZSBjYW5ub3QgdGVsbAorICAgICAgIHdoZXRoZXIgdGhpcyBpcyBhIHNpbmdsZS1ieXRlIGZpbGUsIG9yIGp1c3QgYSBwYXJ0aWFsbHkgd3JpdHRlbiBnemlwCisgICAgICAgZmlsZSAtLSBmb3IgaGVyZSB3ZSBhc3N1bWUgdGhhdCBpZiBhIGd6aXAgZmlsZSBpcyBiZWluZyB3cml0dGVuLCB0aGVuCisgICAgICAgdGhlIGhlYWRlciB3aWxsIGJlIHdyaXR0ZW4gaW4gYSBzaW5nbGUgb3BlcmF0aW9uLCBzbyB0aGF0IHJlYWRpbmcgYQorICAgICAgIHNpbmdsZSBieXRlIGlzIHN1ZmZpY2llbnQgaW5kaWNhdGlvbiB0aGF0IGl0IGlzIG5vdCBhIGd6aXAgZmlsZSkgKi8KKyAgICBpZiAoc3RybS0+YXZhaWxfaW4gPiAxICYmCisgICAgICAgICAgICBzdHJtLT5uZXh0X2luWzBdID09IDMxICYmIHN0cm0tPm5leHRfaW5bMV0gPT0gMTM5KSB7CisgICAgICAgIGluZmxhdGVSZXNldChzdHJtKTsKKyAgICAgICAgc3RhdGUtPmhvdyA9IEdaSVA7CisgICAgICAgIHN0YXRlLT5kaXJlY3QgPSAwOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAvKiBkb2luZyByYXcgaS9vLCBzYXZlIHN0YXJ0IG9mIHJhdyBkYXRhIGZvciBzZWVraW5nLCBjb3B5IGFueSBsZWZ0b3ZlcgotICAgICAgIGlucHV0IHRvIG91dHB1dCAtLSB0aGlzIGFzc3VtZXMgdGhhdCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBsYXJnZXIgdGhhbgotICAgICAgIHRoZSBpbnB1dCBidWZmZXIsIHdoaWNoIGFsc28gYXNzdXJlcyBzcGFjZSBmb3IgZ3p1bmdldGMoKSAqLwotICAgIHN0YXRlLT5yYXcgPSBzdGF0ZS0+cG9zOwotICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dDsKKyAgICAvKiBubyBnemlwIGhlYWRlciAtLSBpZiB3ZSB3ZXJlIGRlY29kaW5nIGd6aXAgYmVmb3JlLCB0aGVuIHRoaXMgaXMgdHJhaWxpbmcKKyAgICAgICBnYXJiYWdlLiAgSWdub3JlIHRoZSB0cmFpbGluZyBnYXJiYWdlIGFuZCBmaW5pc2guICovCisgICAgaWYgKHN0YXRlLT5kaXJlY3QgPT0gMCkgeworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIHN0YXRlLT5lb2YgPSAxOworICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogZG9pbmcgcmF3IGkvbywgY29weSBhbnkgbGVmdG92ZXIgaW5wdXQgdG8gb3V0cHV0IC0tIHRoaXMgYXNzdW1lcyB0aGF0CisgICAgICAgdGhlIG91dHB1dCBidWZmZXIgaXMgbGFyZ2VyIHRoYW4gdGhlIGlucHV0IGJ1ZmZlciwgd2hpY2ggYWxzbyBhc3N1cmVzCisgICAgICAgc3BhY2UgZm9yIGd6dW5nZXRjKCkgKi8KKyAgICBzdGF0ZS0+eC5uZXh0ID0gc3RhdGUtPm91dDsKICAgICBpZiAoc3RybS0+YXZhaWxfaW4pIHsKLSAgICAgICAgbWVtY3B5KHN0YXRlLT5uZXh0ICsgc3RhdGUtPmhhdmUsIHN0cm0tPm5leHRfaW4sIHN0cm0tPmF2YWlsX2luKTsKLSAgICAgICAgc3RhdGUtPmhhdmUgKz0gc3RybS0+YXZhaWxfaW47CisgICAgICAgIG1lbWNweShzdGF0ZS0+eC5uZXh0LCBzdHJtLT5uZXh0X2luLCBzdHJtLT5hdmFpbF9pbik7CisgICAgICAgIHN0YXRlLT54LmhhdmUgPSBzdHJtLT5hdmFpbF9pbjsKICAgICAgICAgc3RybS0+YXZhaWxfaW4gPSAwOwogICAgIH0KICAgICBzdGF0ZS0+aG93ID0gQ09QWTsKQEAgLTIyMywxOSArMTY1LDE1IEBACiB9CiAKIC8qIERlY29tcHJlc3MgZnJvbSBpbnB1dCB0byB0aGUgcHJvdmlkZWQgbmV4dF9vdXQgYW5kIGF2YWlsX291dCBpbiB0aGUgc3RhdGUuCi0gICBJZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaXMgcmVhY2hlZCwgdGhlbiB2ZXJpZnkgdGhlIGd6aXAgdHJhaWxlcgotICAgY2hlY2sgdmFsdWUgYW5kIGxlbmd0aCAobW9kdWxvIDJeMzIpLiAgc3RhdGUtPmhhdmUgYW5kIHN0YXRlLT5uZXh0IGFyZSBzZXQKLSAgIHRvIHBvaW50IHRvIHRoZSBqdXN0IGRlY29tcHJlc3NlZCBkYXRhLCBhbmQgdGhlIGNyYyBpcyB1cGRhdGVkLiAgSWYgdGhlCi0gICB0cmFpbGVyIGlzIHZlcmlmaWVkLCBzdGF0ZS0+aG93IGlzIHJlc2V0IHRvIExPT0sgdG8gbG9vayBmb3IgdGhlIG5leHQgZ3ppcAotICAgc3RyZWFtIG9yIHJhdyBkYXRhLCBvbmNlIHN0YXRlLT5oYXZlIGlzIGRlcGxldGVkLiAgUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xCi0gICBvbiBmYWlsdXJlLiAgRmFpbHVyZXMgbWF5IGluY2x1ZGUgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgb3IgYSBmYWlsZWQgZ3ppcAotICAgdHJhaWxlciB2ZXJpZmljYXRpb24uICovCisgICBPbiByZXR1cm4sIHN0YXRlLT54LmhhdmUgYW5kIHN0YXRlLT54Lm5leHQgcG9pbnQgdG8gdGhlIGp1c3QgZGVjb21wcmVzc2VkCisgICBkYXRhLiAgSWYgdGhlIGd6aXAgc3RyZWFtIGNvbXBsZXRlcywgc3RhdGUtPmhvdyBpcyByZXNldCB0byBMT09LIHRvIGxvb2sgZm9yCisgICB0aGUgbmV4dCBnemlwIHN0cmVhbSBvciByYXcgZGF0YSwgb25jZSBzdGF0ZS0+eC5oYXZlIGlzIGRlcGxldGVkLiAgUmV0dXJucyAwCisgICBvbiBzdWNjZXNzLCAtMSBvbiBmYWlsdXJlLiAqLwogbG9jYWwgaW50IGd6X2RlY29tcChzdGF0ZSkKICAgICBnel9zdGF0ZXAgc3RhdGU7CiB7Ci0gICAgaW50IHJldDsKKyAgICBpbnQgcmV0ID0gWl9PSzsKICAgICB1bnNpZ25lZCBoYWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBjcmMsIGxlbjsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCiAgICAgLyogZmlsbCBvdXRwdXQgYnVmZmVyIHVwIHRvIGVuZCBvZiBkZWZsYXRlIHN0cmVhbSAqLwpAQCAtMjQ1LDE1ICsxODMsMTUgQEAKICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDAgJiYgZ3pfYXZhaWwoc3RhdGUpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBpZiAoc3RybS0+YXZhaWxfaW4gPT0gMCkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInVuZXhwZWN0ZWQgZW5kIG9mIGZpbGUiKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgLyogZGVjb21wcmVzcyBhbmQgaGFuZGxlIGVycm9ycyAqLwogICAgICAgICByZXQgPSBpbmZsYXRlKHN0cm0sIFpfTk9fRkxVU0gpOwogICAgICAgICBpZiAocmV0ID09IFpfU1RSRUFNX0VSUk9SIHx8IHJldCA9PSBaX05FRURfRElDVCkgewogICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfU1RSRUFNX0VSUk9SLAotICAgICAgICAgICAgICAgICAgICAgICJpbnRlcm5hbCBlcnJvcjogaW5mbGF0ZSBzdHJlYW0gY29ycnVwdCIpOworICAgICAgICAgICAgICAgICAgICAgImludGVybmFsIGVycm9yOiBpbmZsYXRlIHN0cmVhbSBjb3JydXB0Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHJldCA9PSBaX01FTV9FUlJPUikgewpAQCAtMjYyLDY3ICsyMDAsNTUgQEAKICAgICAgICAgfQogICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikgeyAgICAgICAgICAgICAgLyogZGVmbGF0ZSBzdHJlYW0gaW52YWxpZCAqLwogICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPT0gTlVMTCA/ICJjb21wcmVzc2VkIGRhdGEgZXJyb3IiIDogc3RybS0+bXNnKTsKKyAgICAgICAgICAgICAgICAgICAgIHN0cm0tPm1zZyA9PSBOVUxMID8gImNvbXByZXNzZWQgZGF0YSBlcnJvciIgOiBzdHJtLT5tc2cpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpOwogCi0gICAgLyogdXBkYXRlIGF2YWlsYWJsZSBvdXRwdXQgYW5kIGNyYyBjaGVjayB2YWx1ZSAqLwotICAgIHN0YXRlLT5oYXZlID0gaGFkIC0gc3RybS0+YXZhaWxfb3V0OwotICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+aGF2ZTsKLSAgICBzdHJtLT5hZGxlciA9IGNyYzMyKHN0cm0tPmFkbGVyLCBzdGF0ZS0+bmV4dCwgc3RhdGUtPmhhdmUpOworICAgIC8qIHVwZGF0ZSBhdmFpbGFibGUgb3V0cHV0ICovCisgICAgc3RhdGUtPnguaGF2ZSA9IGhhZCAtIHN0cm0tPmF2YWlsX291dDsKKyAgICBzdGF0ZS0+eC5uZXh0ID0gc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5oYXZlOwogCi0gICAgLyogY2hlY2sgZ3ppcCB0cmFpbGVyIGlmIGF0IGVuZCBvZiBkZWZsYXRlIHN0cmVhbSAqLwotICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRU5EKSB7Ci0gICAgICAgIGlmIChnel9uZXh0NChzdGF0ZSwgJmNyYykgPT0gLTEgfHwgZ3pfbmV4dDQoc3RhdGUsICZsZW4pID09IC0xKSB7Ci0gICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAidW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChjcmMgIT0gc3RybS0+YWRsZXIpIHsKLSAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJpbmNvcnJlY3QgZGF0YSBjaGVjayIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChsZW4gIT0gKHN0cm0tPnRvdGFsX291dCAmIDB4ZmZmZmZmZmZMKSkgewotICAgICAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgImluY29ycmVjdCBsZW5ndGggY2hlY2siKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBzdGF0ZS0+aG93ID0gTE9PSzsgICAgICAvKiByZWFkeSBmb3IgbmV4dCBzdHJlYW0sIG9uY2UgaGF2ZSBpcyAwIChsZWF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+ZGlyZWN0IHVuY2hhbmdlZCB0byByZW1lbWJlciBob3cpICovCi0gICAgfQorICAgIC8qIGlmIHRoZSBnemlwIHN0cmVhbSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LCBsb29rIGZvciBhbm90aGVyICovCisgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgIHN0YXRlLT5ob3cgPSBMT09LOwogCiAgICAgLyogZ29vZCBkZWNvbXByZXNzaW9uICovCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qIE1ha2UgZGF0YSBhbmQgcHV0IGluIHRoZSBvdXRwdXQgYnVmZmVyLiAgQXNzdW1lcyB0aGF0IHN0YXRlLT5oYXZlID09IDAuCisvKiBGZXRjaCBkYXRhIGFuZCBwdXQgaXQgaW4gdGhlIG91dHB1dCBidWZmZXIuICBBc3N1bWVzIHN0YXRlLT54LmhhdmUgaXMgMC4KICAgIERhdGEgaXMgZWl0aGVyIGNvcGllZCBmcm9tIHRoZSBpbnB1dCBmaWxlIG9yIGRlY29tcHJlc3NlZCBmcm9tIHRoZSBpbnB1dAogICAgZmlsZSBkZXBlbmRpbmcgb24gc3RhdGUtPmhvdy4gIElmIHN0YXRlLT5ob3cgaXMgTE9PSywgdGhlbiBhIGd6aXAgaGVhZGVyIGlzCi0gICBsb29rZWQgZm9yIChhbmQgc2tpcHBlZCBpZiBmb3VuZCkgdG8gZGV0ZXJtaW5lIHdpdGhlciB0byBjb3B5IG9yIGRlY29tcHJlc3MuCi0gICBSZXR1cm5zIC0xIG9uIGVycm9yLCBvdGhlcndpc2UgMC4gIGd6X21ha2UoKSB3aWxsIGxlYXZlIHN0YXRlLT5oYXZlIGFzIENPUFkKLSAgIG9yIEdaSVAgdW5sZXNzIHRoZSBlbmQgb2YgdGhlIGlucHV0IGZpbGUgaGFzIGJlZW4gcmVhY2hlZCBhbmQgYWxsIGRhdGEgaGFzCi0gICBiZWVuIHByb2Nlc3NlZC4gICovCi1sb2NhbCBpbnQgZ3pfbWFrZShzdGF0ZSkKKyAgIGxvb2tlZCBmb3IgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gY29weSBvciBkZWNvbXByZXNzLiAgUmV0dXJucyAtMSBvbiBlcnJvciwKKyAgIG90aGVyd2lzZSAwLiAgZ3pfZmV0Y2goKSB3aWxsIGxlYXZlIHN0YXRlLT5ob3cgYXMgQ09QWSBvciBHWklQIHVubGVzcyB0aGUKKyAgIGVuZCBvZiB0aGUgaW5wdXQgZmlsZSBoYXMgYmVlbiByZWFjaGVkIGFuZCBhbGwgZGF0YSBoYXMgYmVlbiBwcm9jZXNzZWQuICAqLworbG9jYWwgaW50IGd6X2ZldGNoKHN0YXRlKQogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIHsKICAgICB6X3N0cmVhbXAgc3RybSA9ICYoc3RhdGUtPnN0cm0pOwogCi0gICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSykgeyAgICAgICAgICAgLyogbG9vayBmb3IgZ3ppcCBoZWFkZXIgKi8KLSAgICAgICAgaWYgKGd6X2hlYWQoc3RhdGUpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBpZiAoc3RhdGUtPmhhdmUpICAgICAgICAgICAgICAgIC8qIGdvdCBzb21lIGRhdGEgZnJvbSBnel9oZWFkKCkgKi8KKyAgICBkbyB7CisgICAgICAgIHN3aXRjaChzdGF0ZS0+aG93KSB7CisgICAgICAgIGNhc2UgTE9PSzogICAgICAvKiAtPiBMT09LLCBDT1BZIChvbmx5IGlmIG5ldmVyIEdaSVApLCBvciBHWklQICovCisgICAgICAgICAgICBpZiAoZ3pfbG9vayhzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSykKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENPUFk6ICAgICAgLyogLT4gQ09QWSAqLworICAgICAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5vdXQsIHN0YXRlLT5zaXplIDw8IDEsICYoc3RhdGUtPnguaGF2ZSkpCisgICAgICAgICAgICAgICAgICAgID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0OwogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAgICAgIC8qIHN0cmFpZ2h0IGNvcHkgKi8KLSAgICAgICAgaWYgKGd6X2xvYWQoc3RhdGUsIHN0YXRlLT5vdXQsIHN0YXRlLT5zaXplIDw8IDEsICYoc3RhdGUtPmhhdmUpKSA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+b3V0OwotICAgIH0KLSAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IEdaSVApIHsgICAgICAvKiBkZWNvbXByZXNzICovCi0gICAgICAgIHN0cm0tPmF2YWlsX291dCA9IHN0YXRlLT5zaXplIDw8IDE7Ci0gICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKLSAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQorICAgICAgICBjYXNlIEdaSVA6ICAgICAgLyogLT4gR1pJUCBvciBMT09LIChpZiBlbmQgb2YgZ3ppcCBzdHJlYW0pICovCisgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZSA8PCAxOworICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OworICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc3RhdGUtPnguaGF2ZSA9PSAwICYmICghc3RhdGUtPmVvZiB8fCBzdHJtLT5hdmFpbF9pbikpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMzYsMTIgKzI2MiwxMiBAQAogICAgIC8qIHNraXAgb3ZlciBsZW4gYnl0ZXMgb3IgcmVhY2ggZW5kLW9mLWZpbGUsIHdoaWNoZXZlciBjb21lcyBmaXJzdCAqLwogICAgIHdoaWxlIChsZW4pCiAgICAgICAgIC8qIHNraXAgb3ZlciB3aGF0ZXZlciBpcyBpbiBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICAgICAgbiA9IEdUX09GRihzdGF0ZS0+aGF2ZSkgfHwgKHpfb2ZmNjRfdClzdGF0ZS0+aGF2ZSA+IGxlbiA/Ci0gICAgICAgICAgICAgICAgKHVuc2lnbmVkKWxlbiA6IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKLSAgICAgICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgICAgICBzdGF0ZS0+cG9zICs9IG47CisgICAgICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgICAgICBuID0gR1RfT0ZGKHN0YXRlLT54LmhhdmUpIHx8ICh6X29mZjY0X3Qpc3RhdGUtPnguaGF2ZSA+IGxlbiA/CisgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWxlbiA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlIC09IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5uZXh0ICs9IG47CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgICAgIGxlbiAtPSBuOwogICAgICAgICB9CiAKQEAgLTM1Miw3ICsyNzgsNyBAQAogICAgICAgICAvKiBuZWVkIG1vcmUgZGF0YSB0byBza2lwIC0tIGxvYWQgdXAgb3V0cHV0IGJ1ZmZlciAqLwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8qIGdldCBtb3JlIG91dHB1dCwgbG9va2luZyBmb3IgaGVhZGVyIGlmIHJlcXVpcmVkICovCi0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICBpZiAoZ3pfZmV0Y2goc3RhdGUpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIHJldHVybiAwOwpAQCAtMzc0LDE0ICszMDAsMTUgQEAKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKICAgICBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAgICAgKHN0YXRlLT5lcnIgIT0gWl9PSyAmJiBzdGF0ZS0+ZXJyICE9IFpfQlVGX0VSUk9SKSkKICAgICAgICAgcmV0dXJuIC0xOwogCiAgICAgLyogc2luY2UgYW4gaW50IGlzIHJldHVybmVkLCBtYWtlIHN1cmUgbGVuIGZpdHMgaW4gb25lLCBvdGhlcndpc2UgcmV0dXJuCiAgICAgICAgd2l0aCBhbiBlcnJvciAodGhpcyBhdm9pZHMgdGhlIGZsYXcgaW4gdGhlIGludGVyZmFjZSkgKi8KICAgICBpZiAoKGludClsZW4gPCAwKSB7Ci0gICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0JVRl9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOworICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9EQVRBX0VSUk9SLCAicmVxdWVzdGVkIGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gaW50Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKQEAgLTQwMCw0OSArMzI3LDUxIEBACiAgICAgZ290ID0gMDsKICAgICBkbyB7CiAgICAgICAgIC8qIGZpcnN0IGp1c3QgdHJ5IGNvcHlpbmcgZGF0YSBmcm9tIHRoZSBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlID4gbGVuID8gbGVuIDogc3RhdGUtPmhhdmU7Ci0gICAgICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCArPSBuOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgLT0gbjsKKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUpIHsKKyAgICAgICAgICAgIG4gPSBzdGF0ZS0+eC5oYXZlID4gbGVuID8gbGVuIDogc3RhdGUtPnguaGF2ZTsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHN0YXRlLT54Lm5leHQsIG4pOworICAgICAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICAgICAgc3RhdGUtPnguaGF2ZSAtPSBuOwogICAgICAgICB9CiAKICAgICAgICAgLyogb3V0cHV0IGJ1ZmZlciBlbXB0eSAtLSByZXR1cm4gaWYgd2UncmUgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQgKi8KLSAgICAgICAgZWxzZSBpZiAoc3RhdGUtPmVvZiAmJiBzdHJtLT5hdmFpbF9pbiA9PSAwKQorICAgICAgICBlbHNlIGlmIChzdGF0ZS0+ZW9mICYmIHN0cm0tPmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgIHN0YXRlLT5wYXN0ID0gMTsgICAgICAgIC8qIHRyaWVkIHRvIHJlYWQgcGFzdCBlbmQgKi8KICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAgICAgLyogbmVlZCBvdXRwdXQgZGF0YSAtLSBmb3Igc21hbGwgbGVuIG9yIG5ldyBzdHJlYW0gbG9hZCB1cCBvdXIgb3V0cHV0CiAgICAgICAgICAgIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IExPT0sgfHwgbGVuIDwgKHN0YXRlLT5zaXplIDw8IDEpKSB7CiAgICAgICAgICAgICAvKiBnZXQgbW9yZSBvdXRwdXQsIGxvb2tpbmcgZm9yIGhlYWRlciBpZiByZXF1aXJlZCAqLwotICAgICAgICAgICAgaWYgKGd6X21ha2Uoc3RhdGUpID09IC0xKQorICAgICAgICAgICAgaWYgKGd6X2ZldGNoKHN0YXRlKSA9PSAtMSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBjb250aW51ZTsgICAgICAgLyogbm8gcHJvZ3Jlc3MgeWV0IC0tIGdvIGJhY2sgdG8gbWVtY3B5KCkgYWJvdmUgKi8KKyAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBubyBwcm9ncmVzcyB5ZXQgLS0gZ28gYmFjayB0byBjb3B5IGFib3ZlICovCiAgICAgICAgICAgICAvKiB0aGUgY29weSBhYm92ZSBhc3N1cmVzIHRoYXQgd2Ugd2lsbCBsZWF2ZSB3aXRoIHNwYWNlIGluIHRoZQogICAgICAgICAgICAgICAgb3V0cHV0IGJ1ZmZlciwgYWxsb3dpbmcgYXQgbGVhc3Qgb25lIGd6dW5nZXRjKCkgdG8gc3VjY2VlZCAqLwogICAgICAgICB9CiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIHJlYWQgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIGlmIChzdGF0ZS0+aG93ID09IENPUFkpIHsgICAgICAvKiByZWFkIGRpcmVjdGx5ICovCi0gICAgICAgICAgICBpZiAoZ3pfbG9hZChzdGF0ZSwgYnVmLCBsZW4sICZuKSA9PSAtMSkKKyAgICAgICAgICAgIGlmIChnel9sb2FkKHN0YXRlLCAodW5zaWduZWQgY2hhciAqKWJ1ZiwgbGVuLCAmbikgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAKICAgICAgICAgLyogbGFyZ2UgbGVuIC0tIGRlY29tcHJlc3MgZGlyZWN0bHkgaW50byB1c2VyIGJ1ZmZlciAqLwogICAgICAgICBlbHNlIHsgIC8qIHN0YXRlLT5ob3cgPT0gR1pJUCAqLwogICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gbGVuOwotICAgICAgICAgICAgc3RybS0+bmV4dF9vdXQgPSBidWY7CisgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopYnVmOwogICAgICAgICAgICAgaWYgKGd6X2RlY29tcChzdGF0ZSkgPT0gLTEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbiA9IHN0YXRlLT5oYXZlOwotICAgICAgICAgICAgc3RhdGUtPmhhdmUgPSAwOworICAgICAgICAgICAgbiA9IHN0YXRlLT54LmhhdmU7CisgICAgICAgICAgICBzdGF0ZS0+eC5oYXZlID0gMDsKICAgICAgICAgfQogCiAgICAgICAgIC8qIHVwZGF0ZSBwcm9ncmVzcyAqLwogICAgICAgICBsZW4gLT0gbjsKICAgICAgICAgYnVmID0gKGNoYXIgKilidWYgKyBuOwogICAgICAgICBnb3QgKz0gbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICB9IHdoaWxlIChsZW4pOwogCiAgICAgLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyByZWFkIGludG8gdXNlciBidWZmZXIgKHdpbGwgZml0IGluIGludCkgKi8KQEAgLTQ1MCw2ICszNzksMTEgQEAKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLworI2lmZGVmIFpfUFJFRklYX1NFVAorIyAgdW5kZWYgel9nemdldGMKKyNlbHNlCisjICB1bmRlZiBnemdldGMKKyNlbmRpZgogaW50IFpFWFBPUlQgZ3pnZXRjKGZpbGUpCiAgICAgZ3pGaWxlIGZpbGU7CiB7CkBAIC00NjIsMTUgKzM5NiwxNiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgc3RhdGUgPSAoZ3pfc3RhdGVwKWZpbGU7CiAKLSAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwotICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8IHN0YXRlLT5lcnIgIT0gWl9PSykKKyAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHJlYWRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyAoc2VyaW91cykgZXJyb3IgKi8KKyAgICBpZiAoc3RhdGUtPm1vZGUgIT0gR1pfUkVBRCB8fAorICAgICAgICAoc3RhdGUtPmVyciAhPSBaX09LICYmIHN0YXRlLT5lcnIgIT0gWl9CVUZfRVJST1IpKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICAvKiB0cnkgb3V0cHV0IGJ1ZmZlciAobm8gbmVlZCB0byBjaGVjayBmb3Igc2tpcCByZXF1ZXN0KSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSkgewotICAgICAgICBzdGF0ZS0+aGF2ZS0tOwotICAgICAgICBzdGF0ZS0+cG9zKys7Ci0gICAgICAgIHJldHVybiAqKHN0YXRlLT5uZXh0KSsrOworICAgIGlmIChzdGF0ZS0+eC5oYXZlKSB7CisgICAgICAgIHN0YXRlLT54LmhhdmUtLTsKKyAgICAgICAgc3RhdGUtPngucG9zKys7CisgICAgICAgIHJldHVybiAqKHN0YXRlLT54Lm5leHQpKys7CiAgICAgfQogCiAgICAgLyogbm90aGluZyB0aGVyZSAtLSB0cnkgZ3pyZWFkKCkgKi8KQEAgLTQ3OCw2ICs0MTMsMTIgQEAKICAgICByZXR1cm4gcmV0IDwgMSA/IC0xIDogYnVmWzBdOwogfQogCitpbnQgWkVYUE9SVCBnemdldGNfKGZpbGUpCitnekZpbGUgZmlsZTsKK3sKKyAgICByZXR1cm4gZ3pnZXRjKGZpbGUpOworfQorCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCiBpbnQgWkVYUE9SVCBnenVuZ2V0YyhjLCBmaWxlKQogICAgIGludCBjOwpAQCAtNDkwLDggKzQzMSw5IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIHByb2Nlc3MgYSBza2lwIHJlcXVlc3QgKi8KQEAgLTUwNiwzMiArNDQ4LDM0IEBACiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qIGlmIG91dHB1dCBidWZmZXIgZW1wdHksIHB1dCBieXRlIGF0IGVuZCAoYWxsb3dzIG1vcmUgcHVzaGluZykgKi8KLSAgICBpZiAoc3RhdGUtPmhhdmUgPT0gMCkgewotICAgICAgICBzdGF0ZS0+aGF2ZSA9IDE7Ci0gICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPm91dCArIChzdGF0ZS0+c2l6ZSA8PCAxKSAtIDE7Ci0gICAgICAgIHN0YXRlLT5uZXh0WzBdID0gYzsKLSAgICAgICAgc3RhdGUtPnBvcy0tOworICAgIGlmIChzdGF0ZS0+eC5oYXZlID09IDApIHsKKyAgICAgICAgc3RhdGUtPnguaGF2ZSA9IDE7CisgICAgICAgIHN0YXRlLT54Lm5leHQgPSBzdGF0ZS0+b3V0ICsgKHN0YXRlLT5zaXplIDw8IDEpIC0gMTsKKyAgICAgICAgc3RhdGUtPngubmV4dFswXSA9IGM7CisgICAgICAgIHN0YXRlLT54LnBvcy0tOworICAgICAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgICAgIHJldHVybiBjOwogICAgIH0KIAogICAgIC8qIGlmIG5vIHJvb20sIGdpdmUgdXAgKG11c3QgaGF2ZSBhbHJlYWR5IGRvbmUgYSBnenVuZ2V0YygpKSAqLwotICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAoc3RhdGUtPnNpemUgPDwgMSkpIHsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfQlVGX0VSUk9SLCAib3V0IG9mIHJvb20gdG8gcHVzaCBjaGFyYWN0ZXJzIik7CisgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gKHN0YXRlLT5zaXplIDw8IDEpKSB7CisgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0RBVEFfRVJST1IsICJvdXQgb2Ygcm9vbSB0byBwdXNoIGNoYXJhY3RlcnMiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIC8qIHNsaWRlIG91dHB1dCBkYXRhIGlmIG5lZWRlZCBhbmQgaW5zZXJ0IGJ5dGUgYmVmb3JlIGV4aXN0aW5nIGRhdGEgKi8KLSAgICBpZiAoc3RhdGUtPm5leHQgPT0gc3RhdGUtPm91dCkgewotICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMgPSBzdGF0ZS0+b3V0ICsgc3RhdGUtPmhhdmU7CisgICAgaWYgKHN0YXRlLT54Lm5leHQgPT0gc3RhdGUtPm91dCkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMgPSBzdGF0ZS0+b3V0ICsgc3RhdGUtPnguaGF2ZTsKICAgICAgICAgdW5zaWduZWQgY2hhciAqZGVzdCA9IHN0YXRlLT5vdXQgKyAoc3RhdGUtPnNpemUgPDwgMSk7CiAgICAgICAgIHdoaWxlIChzcmMgPiBzdGF0ZS0+b3V0KQogICAgICAgICAgICAgKi0tZGVzdCA9ICotLXNyYzsKLSAgICAgICAgc3RhdGUtPm5leHQgPSBkZXN0OworICAgICAgICBzdGF0ZS0+eC5uZXh0ID0gZGVzdDsKICAgICB9Ci0gICAgc3RhdGUtPmhhdmUrKzsKLSAgICBzdGF0ZS0+bmV4dC0tOwotICAgIHN0YXRlLT5uZXh0WzBdID0gYzsKLSAgICBzdGF0ZS0+cG9zLS07CisgICAgc3RhdGUtPnguaGF2ZSsrOworICAgIHN0YXRlLT54Lm5leHQtLTsKKyAgICBzdGF0ZS0+eC5uZXh0WzBdID0gYzsKKyAgICBzdGF0ZS0+eC5wb3MtLTsKKyAgICBzdGF0ZS0+cGFzdCA9IDA7CiAgICAgcmV0dXJuIGM7CiB9CiAKQEAgLTU1MSw4ICs0OTUsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdGF0ZSA9IChnel9zdGF0ZXApZmlsZTsKIAotICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIGVycm9yICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQgfHwgc3RhdGUtPmVyciAhPSBaX09LKQorICAgIC8qIGNoZWNrIHRoYXQgd2UncmUgcmVhZGluZyBhbmQgdGhhdCB0aGVyZSdzIG5vIChzZXJpb3VzKSBlcnJvciAqLworICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9SRUFEIHx8CisgICAgICAgIChzdGF0ZS0+ZXJyICE9IFpfT0sgJiYgc3RhdGUtPmVyciAhPSBaX0JVRl9FUlJPUikpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogcHJvY2VzcyBhIHNraXAgcmVxdWVzdCAqLwpAQCAtNTY5LDMyICs1MTQsMzEgQEAKICAgICBsZWZ0ID0gKHVuc2lnbmVkKWxlbiAtIDE7CiAgICAgaWYgKGxlZnQpIGRvIHsKICAgICAgICAgLyogYXNzdXJlIHRoYXQgc29tZXRoaW5nIGlzIGluIHRoZSBvdXRwdXQgYnVmZmVyICovCi0gICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoZ3pfbWFrZShzdGF0ZSkgPT0gLTEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogZXJyb3IgKi8KLSAgICAgICAgICAgIGlmIChzdGF0ZS0+aGF2ZSA9PSAwKSB7ICAgICAvKiBlbmQgb2YgZmlsZSAqLwotICAgICAgICAgICAgICAgIGlmIChidWYgPT0gc3RyKSAgICAgICAgIC8qIGdvdCBidXBrdXMgKi8KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogZ290IHNvbWV0aGluZyAtLSByZXR1cm4gaXQgKi8KLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCAmJiBnel9mZXRjaChzdGF0ZSkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogZXJyb3IgKi8KKyAgICAgICAgaWYgKHN0YXRlLT54LmhhdmUgPT0gMCkgeyAgICAgICAvKiBlbmQgb2YgZmlsZSAqLworICAgICAgICAgICAgc3RhdGUtPnBhc3QgPSAxOyAgICAgICAgICAgIC8qIHJlYWQgcGFzdCBlbmQgKi8KKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAvKiByZXR1cm4gd2hhdCB3ZSBoYXZlICovCiAgICAgICAgIH0KIAogICAgICAgICAvKiBsb29rIGZvciBlbmQtb2YtbGluZSBpbiBjdXJyZW50IG91dHB1dCBidWZmZXIgKi8KLSAgICAgICAgbiA9IHN0YXRlLT5oYXZlID4gbGVmdCA/IGxlZnQgOiBzdGF0ZS0+aGF2ZTsKLSAgICAgICAgZW9sID0gbWVtY2hyKHN0YXRlLT5uZXh0LCAnXG4nLCBuKTsKKyAgICAgICAgbiA9IHN0YXRlLT54LmhhdmUgPiBsZWZ0ID8gbGVmdCA6IHN0YXRlLT54LmhhdmU7CisgICAgICAgIGVvbCA9ICh1bnNpZ25lZCBjaGFyICopbWVtY2hyKHN0YXRlLT54Lm5leHQsICdcbicsIG4pOwogICAgICAgICBpZiAoZW9sICE9IE5VTEwpCi0gICAgICAgICAgICBuID0gKHVuc2lnbmVkKShlb2wgLSBzdGF0ZS0+bmV4dCkgKyAxOworICAgICAgICAgICAgbiA9ICh1bnNpZ25lZCkoZW9sIC0gc3RhdGUtPngubmV4dCkgKyAxOwogCiAgICAgICAgIC8qIGNvcHkgdGhyb3VnaCBlbmQtb2YtbGluZSwgb3IgcmVtYWluZGVyIGlmIG5vdCBmb3VuZCAqLwotICAgICAgICBtZW1jcHkoYnVmLCBzdGF0ZS0+bmV4dCwgbik7Ci0gICAgICAgIHN0YXRlLT5oYXZlIC09IG47Ci0gICAgICAgIHN0YXRlLT5uZXh0ICs9IG47Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbjsKKyAgICAgICAgbWVtY3B5KGJ1Ziwgc3RhdGUtPngubmV4dCwgbik7CisgICAgICAgIHN0YXRlLT54LmhhdmUgLT0gbjsKKyAgICAgICAgc3RhdGUtPngubmV4dCArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgbGVmdCAtPSBuOwogICAgICAgICBidWYgKz0gbjsKICAgICB9IHdoaWxlIChsZWZ0ICYmIGVvbCA9PSBOVUxMKTsKIAotICAgIC8qIGZvdW5kIGVuZC1vZi1saW5lIG9yIG91dCBvZiBzcGFjZSAtLSB0ZXJtaW5hdGUgc3RyaW5nIGFuZCByZXR1cm4gaXQgKi8KKyAgICAvKiByZXR1cm4gdGVybWluYXRlZCBzdHJpbmcsIG9yIGlmIG5vdGhpbmcsIGVuZCBvZiBmaWxlICovCisgICAgaWYgKGJ1ZiA9PSBzdHIpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGJ1ZlswXSA9IDA7CiAgICAgcmV0dXJuIHN0cjsKIH0KQEAgLTYxMCwxNiArNTU0LDEyIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogCi0gICAgLyogY2hlY2sgdGhhdCB3ZSdyZSByZWFkaW5nICovCi0gICAgaWYgKHN0YXRlLT5tb2RlICE9IEdaX1JFQUQpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgLyogaWYgdGhlIHN0YXRlIGlzIG5vdCBrbm93biwgYnV0IHdlIGNhbiBmaW5kIG91dCwgdGhlbiBkbyBzbyAodGhpcyBpcwogICAgICAgIG1haW5seSBmb3IgcmlnaHQgYWZ0ZXIgYSBnem9wZW4oKSBvciBnemRvcGVuKCkpICovCi0gICAgaWYgKHN0YXRlLT5ob3cgPT0gTE9PSyAmJiBzdGF0ZS0+aGF2ZSA9PSAwKQotICAgICAgICAodm9pZClnel9oZWFkKHN0YXRlKTsKKyAgICBpZiAoc3RhdGUtPm1vZGUgPT0gR1pfUkVBRCAmJiBzdGF0ZS0+aG93ID09IExPT0sgJiYgc3RhdGUtPnguaGF2ZSA9PSAwKQorICAgICAgICAodm9pZClnel9sb29rKHN0YXRlKTsKIAotICAgIC8qIHJldHVybiAxIGlmIHJlYWRpbmcgZGlyZWN0LCAwIGlmIGRlY29tcHJlc3NpbmcgYSBnemlwIHN0cmVhbSAqLworICAgIC8qIHJldHVybiAxIGlmIHRyYW5zcGFyZW50LCAwIGlmIHByb2Nlc3NpbmcgYSBnemlwIHN0cmVhbSAqLwogICAgIHJldHVybiBzdGF0ZS0+ZGlyZWN0OwogfQogCkBAIC02MjcsNyArNTY3LDcgQEAKIGludCBaRVhQT1JUIGd6Y2xvc2VfcihmaWxlKQogICAgIGd6RmlsZSBmaWxlOwogewotICAgIGludCByZXQ7CisgICAgaW50IHJldCwgZXJyOwogICAgIGd6X3N0YXRlcCBzdGF0ZTsKIAogICAgIC8qIGdldCBpbnRlcm5hbCBzdHJ1Y3R1cmUgKi8KQEAgLTY0NSw5ICs1ODUsMTAgQEAKICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKICAgICAgICAgZnJlZShzdGF0ZS0+aW4pOwogICAgIH0KKyAgICBlcnIgPSBzdGF0ZS0+ZXJyID09IFpfQlVGX0VSUk9SID8gWl9CVUZfRVJST1IgOiBaX09LOwogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKICAgICByZXQgPSBjbG9zZShzdGF0ZS0+ZmQpOwogICAgIGZyZWUoc3RhdGUpOwotICAgIHJldHVybiByZXQgPyBaX0VSUk5PIDogWl9PSzsKKyAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IGVycjsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9nendyaXRlLmMgYi9Nb2R1bGVzL3psaWIvZ3p3cml0ZS5jCmluZGV4IGU4ZGVmYzYuLmFhNzY3ZmIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9nendyaXRlLmMKKysrIGIvTW9kdWxlcy96bGliL2d6d3JpdGUuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGd6d3JpdGUuYyAtLSB6bGliIGZ1bmN0aW9ucyBmb3Igd3JpdGluZyBnemlwIGZpbGVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDEwLCAyMDExLCAyMDEyLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xOCw0NCArMTgsNTUgQEAKICAgICBpbnQgcmV0OwogICAgIHpfc3RyZWFtcCBzdHJtID0gJihzdGF0ZS0+c3RybSk7CiAKLSAgICAvKiBhbGxvY2F0ZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgKi8KLSAgICBzdGF0ZS0+aW4gPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgIHN0YXRlLT5vdXQgPSBtYWxsb2Moc3RhdGUtPndhbnQpOwotICAgIGlmIChzdGF0ZS0+aW4gPT0gTlVMTCB8fCBzdGF0ZS0+b3V0ID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHN0YXRlLT5vdXQgIT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7Ci0gICAgICAgIGlmIChzdGF0ZS0+aW4gIT0gTlVMTCkKLSAgICAgICAgICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICAvKiBhbGxvY2F0ZSBpbnB1dCBidWZmZXIgKi8KKyAgICBzdGF0ZS0+aW4gPSAodW5zaWduZWQgY2hhciAqKW1hbGxvYyhzdGF0ZS0+d2FudCk7CisgICAgaWYgKHN0YXRlLT5pbiA9PSBOVUxMKSB7CiAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX01FTV9FUlJPUiwgIm91dCBvZiBtZW1vcnkiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIC8qIGFsbG9jYXRlIGRlZmxhdGUgbWVtb3J5LCBzZXQgdXAgZm9yIGd6aXAgY29tcHJlc3Npb24gKi8KLSAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7Ci0gICAgc3RybS0+emZyZWUgPSBaX05VTEw7Ci0gICAgc3RybS0+b3BhcXVlID0gWl9OVUxMOwotICAgIHJldCA9IGRlZmxhdGVJbml0MihzdHJtLCBzdGF0ZS0+bGV2ZWwsIFpfREVGTEFURUQsCi0gICAgICAgICAgICAgICAgICAgICAgIDE1ICsgMTYsIDgsIHN0YXRlLT5zdHJhdGVneSk7Ci0gICAgaWYgKHJldCAhPSBaX09LKSB7Ci0gICAgICAgIGZyZWUoc3RhdGUtPmluKTsKLSAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfTUVNX0VSUk9SLCAib3V0IG9mIG1lbW9yeSIpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgLyogb25seSBuZWVkIG91dHB1dCBidWZmZXIgYW5kIGRlZmxhdGUgc3RhdGUgaWYgY29tcHJlc3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgLyogYWxsb2NhdGUgb3V0cHV0IGJ1ZmZlciAqLworICAgICAgICBzdGF0ZS0+b3V0ID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2Moc3RhdGUtPndhbnQpOworICAgICAgICBpZiAoc3RhdGUtPm91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICAvKiBhbGxvY2F0ZSBkZWZsYXRlIG1lbW9yeSwgc2V0IHVwIGZvciBnemlwIGNvbXByZXNzaW9uICovCisgICAgICAgIHN0cm0tPnphbGxvYyA9IFpfTlVMTDsKKyAgICAgICAgc3RybS0+emZyZWUgPSBaX05VTEw7CisgICAgICAgIHN0cm0tPm9wYXF1ZSA9IFpfTlVMTDsKKyAgICAgICAgcmV0ID0gZGVmbGF0ZUluaXQyKHN0cm0sIHN0YXRlLT5sZXZlbCwgWl9ERUZMQVRFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9XQklUUyArIDE2LCBERUZfTUVNX0xFVkVMLCBzdGF0ZS0+c3RyYXRlZ3kpOworICAgICAgICBpZiAocmV0ICE9IFpfT0spIHsKKyAgICAgICAgICAgIGZyZWUoc3RhdGUtPm91dCk7CisgICAgICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9NRU1fRVJST1IsICJvdXQgb2YgbWVtb3J5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBtYXJrIHN0YXRlIGFzIGluaXRpYWxpemVkICovCiAgICAgc3RhdGUtPnNpemUgPSBzdGF0ZS0+d2FudDsKIAotICAgIC8qIGluaXRpYWxpemUgd3JpdGUgYnVmZmVyICovCi0gICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7Ci0gICAgc3RybS0+bmV4dF9vdXQgPSBzdGF0ZS0+b3V0OwotICAgIHN0YXRlLT5uZXh0ID0gc3RybS0+bmV4dF9vdXQ7CisgICAgLyogaW5pdGlhbGl6ZSB3cml0ZSBidWZmZXIgaWYgY29tcHJlc3NpbmcgKi8KKyAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gc3RhdGUtPnNpemU7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gc3RhdGUtPm91dDsKKyAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogLyogQ29tcHJlc3Mgd2hhdGV2ZXIgaXMgYXQgYXZhaWxfaW4gYW5kIG5leHRfaW4gYW5kIHdyaXRlIHRvIHRoZSBvdXRwdXQgZmlsZS4KICAgIFJldHVybiAtMSBpZiB0aGVyZSBpcyBhbiBlcnJvciB3cml0aW5nIHRvIHRoZSBvdXRwdXQgZmlsZSwgb3RoZXJ3aXNlIDAuCiAgICBmbHVzaCBpcyBhc3N1bWVkIHRvIGJlIGEgdmFsaWQgZGVmbGF0ZSgpIGZsdXNoIHZhbHVlLiAgSWYgZmx1c2ggaXMgWl9GSU5JU0gsCi0gICB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMgcmVzZXQgdG8gc3RhcnQgYSBuZXcgZ3ppcCBzdHJlYW0uICovCisgICB0aGVuIHRoZSBkZWZsYXRlKCkgc3RhdGUgaXMgcmVzZXQgdG8gc3RhcnQgYSBuZXcgZ3ppcCBzdHJlYW0uICBJZiBnei0+ZGlyZWN0CisgICBpcyB0cnVlLCB0aGVuIHNpbXBseSB3cml0ZSB0byB0aGUgb3V0cHV0IGZpbGUgd2l0aG91dCBjb21wcmVzc2luZywgYW5kCisgICBpZ25vcmUgZmx1c2guICovCiBsb2NhbCBpbnQgZ3pfY29tcChzdGF0ZSwgZmx1c2gpCiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIGludCBmbHVzaDsKQEAgLTY4LDYgKzc5LDE3IEBACiAgICAgaWYgKHN0YXRlLT5zaXplID09IDAgJiYgZ3pfaW5pdChzdGF0ZSkgPT0gLTEpCiAgICAgICAgIHJldHVybiAtMTsKIAorICAgIC8qIHdyaXRlIGRpcmVjdGx5IGlmIHJlcXVlc3RlZCAqLworICAgIGlmIChzdGF0ZS0+ZGlyZWN0KSB7CisgICAgICAgIGdvdCA9IHdyaXRlKHN0YXRlLT5mZCwgc3RybS0+bmV4dF9pbiwgc3RybS0+YXZhaWxfaW4pOworICAgICAgICBpZiAoZ290IDwgMCB8fCAodW5zaWduZWQpZ290ICE9IHN0cm0tPmF2YWlsX2luKSB7CisgICAgICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9FUlJOTywgenN0cmVycm9yKCkpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgLyogcnVuIGRlZmxhdGUoKSBvbiBwcm92aWRlZCBpbnB1dCB1bnRpbCBpdCBwcm9kdWNlcyBubyBtb3JlIG91dHB1dCAqLwogICAgIHJldCA9IFpfT0s7CiAgICAgZG8gewpAQCAtNzUsOCArOTcsOCBAQAogICAgICAgICAgICBkb2luZyBaX0ZJTklTSCB0aGVuIGRvbid0IHdyaXRlIHVudGlsIHdlIGdldCB0byBaX1NUUkVBTV9FTkQgKi8KICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX291dCA9PSAwIHx8IChmbHVzaCAhPSBaX05PX0ZMVVNIICYmCiAgICAgICAgICAgICAoZmx1c2ggIT0gWl9GSU5JU0ggfHwgcmV0ID09IFpfU1RSRUFNX0VORCkpKSB7Ci0gICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKShzdHJtLT5uZXh0X291dCAtIHN0YXRlLT5uZXh0KTsKLSAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+bmV4dCwgaGF2ZSkpIDwgMCB8fAorICAgICAgICAgICAgaGF2ZSA9ICh1bnNpZ25lZCkoc3RybS0+bmV4dF9vdXQgLSBzdGF0ZS0+eC5uZXh0KTsKKyAgICAgICAgICAgIGlmIChoYXZlICYmICgoZ290ID0gd3JpdGUoc3RhdGUtPmZkLCBzdGF0ZS0+eC5uZXh0LCBoYXZlKSkgPCAwIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKWdvdCAhPSBoYXZlKSkgewogICAgICAgICAgICAgICAgIGd6X2Vycm9yKHN0YXRlLCBaX0VSUk5PLCB6c3RyZXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtODUsNyArMTA3LDcgQEAKICAgICAgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBzdGF0ZS0+c2l6ZTsKICAgICAgICAgICAgICAgICBzdHJtLT5uZXh0X291dCA9IHN0YXRlLT5vdXQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+bmV4dCA9IHN0cm0tPm5leHRfb3V0OworICAgICAgICAgICAgc3RhdGUtPngubmV4dCA9IHN0cm0tPm5leHRfb3V0OwogICAgICAgICB9CiAKICAgICAgICAgLyogY29tcHJlc3MgKi8KQEAgLTEzMSw3ICsxNTMsNyBAQAogICAgICAgICB9CiAgICAgICAgIHN0cm0tPmF2YWlsX2luID0gbjsKICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgc3RhdGUtPnBvcyArPSBuOworICAgICAgICBzdGF0ZS0+eC5wb3MgKz0gbjsKICAgICAgICAgaWYgKGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBsZW4gLT0gbjsKQEAgLTE0Niw3ICsxNjgsNiBAQAogICAgIHVuc2lnbmVkIGxlbjsKIHsKICAgICB1bnNpZ25lZCBwdXQgPSBsZW47Ci0gICAgdW5zaWduZWQgbjsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAgICAgel9zdHJlYW1wIHN0cm07CiAKQEAgLTE2Myw3ICsxODQsNyBAQAogICAgIC8qIHNpbmNlIGFuIGludCBpcyByZXR1cm5lZCwgbWFrZSBzdXJlIGxlbiBmaXRzIGluIG9uZSwgb3RoZXJ3aXNlIHJldHVybgogICAgICAgIHdpdGggYW4gZXJyb3IgKHRoaXMgYXZvaWRzIHRoZSBmbGF3IGluIHRoZSBpbnRlcmZhY2UpICovCiAgICAgaWYgKChpbnQpbGVuIDwgMCkgewotICAgICAgICBnel9lcnJvcihzdGF0ZSwgWl9CVUZfRVJST1IsICJyZXF1ZXN0ZWQgbGVuZ3RoIGRvZXMgbm90IGZpdCBpbiBpbnQiKTsKKyAgICAgICAgZ3pfZXJyb3Ioc3RhdGUsIFpfREFUQV9FUlJPUiwgInJlcXVlc3RlZCBsZW5ndGggZG9lcyBub3QgZml0IGluIGludCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTE4NiwxNiArMjA3LDE5IEBACiAgICAgaWYgKGxlbiA8IHN0YXRlLT5zaXplKSB7CiAgICAgICAgIC8qIGNvcHkgdG8gaW5wdXQgYnVmZmVyLCBjb21wcmVzcyB3aGVuIGZ1bGwgKi8KICAgICAgICAgZG8geworICAgICAgICAgICAgdW5zaWduZWQgaGF2ZSwgY29weTsKKwogICAgICAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApCiAgICAgICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgICAgIG4gPSBzdGF0ZS0+c2l6ZSAtIHN0cm0tPmF2YWlsX2luOwotICAgICAgICAgICAgaWYgKG4gPiBsZW4pCi0gICAgICAgICAgICAgICAgbiA9IGxlbjsKLSAgICAgICAgICAgIG1lbWNweShzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4sIGJ1Ziwgbik7Ci0gICAgICAgICAgICBzdHJtLT5hdmFpbF9pbiArPSBuOwotICAgICAgICAgICAgc3RhdGUtPnBvcyArPSBuOwotICAgICAgICAgICAgYnVmID0gKGNoYXIgKilidWYgKyBuOwotICAgICAgICAgICAgbGVuIC09IG47CisgICAgICAgICAgICBoYXZlID0gKHVuc2lnbmVkKSgoc3RybS0+bmV4dF9pbiArIHN0cm0tPmF2YWlsX2luKSAtIHN0YXRlLT5pbik7CisgICAgICAgICAgICBjb3B5ID0gc3RhdGUtPnNpemUgLSBoYXZlOworICAgICAgICAgICAgaWYgKGNvcHkgPiBsZW4pCisgICAgICAgICAgICAgICAgY29weSA9IGxlbjsKKyAgICAgICAgICAgIG1lbWNweShzdGF0ZS0+aW4gKyBoYXZlLCBidWYsIGNvcHkpOworICAgICAgICAgICAgc3RybS0+YXZhaWxfaW4gKz0gY29weTsKKyAgICAgICAgICAgIHN0YXRlLT54LnBvcyArPSBjb3B5OworICAgICAgICAgICAgYnVmID0gKGNvbnN0IGNoYXIgKilidWYgKyBjb3B5OworICAgICAgICAgICAgbGVuIC09IGNvcHk7CiAgICAgICAgICAgICBpZiAobGVuICYmIGd6X2NvbXAoc3RhdGUsIFpfTk9fRkxVU0gpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IHdoaWxlIChsZW4pOwpAQCAtMjA3LDggKzIzMSw4IEBACiAKICAgICAgICAgLyogZGlyZWN0bHkgY29tcHJlc3MgdXNlciBidWZmZXIgdG8gZmlsZSAqLwogICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGxlbjsKLSAgICAgICAgc3RybS0+bmV4dF9pbiA9ICh2b2lkcClidWY7Ci0gICAgICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgICAgICBzdHJtLT5uZXh0X2luID0gKHpfY29uc3QgQnl0ZWYgKilidWY7CisgICAgICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgICAgIGlmIChnel9jb21wKHN0YXRlLCBaX05PX0ZMVVNIKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTIyMiw2ICsyNDYsNyBAQAogICAgIGd6RmlsZSBmaWxlOwogICAgIGludCBjOwogeworICAgIHVuc2lnbmVkIGhhdmU7CiAgICAgdW5zaWduZWQgY2hhciBidWZbMV07CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwpAQCAtMjQ1LDE5ICsyNzAsMjMgQEAKIAogICAgIC8qIHRyeSB3cml0aW5nIHRvIGlucHV0IGJ1ZmZlciBmb3Igc3BlZWQgKHN0YXRlLT5zaXplID09IDAgaWYgYnVmZmVyIG5vdAogICAgICAgIGluaXRpYWxpemVkKSAqLwotICAgIGlmIChzdHJtLT5hdmFpbF9pbiA8IHN0YXRlLT5zaXplKSB7CisgICAgaWYgKHN0YXRlLT5zaXplKSB7CiAgICAgICAgIGlmIChzdHJtLT5hdmFpbF9pbiA9PSAwKQogICAgICAgICAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICAgICAgc3RybS0+bmV4dF9pbltzdHJtLT5hdmFpbF9pbisrXSA9IGM7Ci0gICAgICAgIHN0YXRlLT5wb3MrKzsKLSAgICAgICAgcmV0dXJuIGM7CisgICAgICAgIGhhdmUgPSAodW5zaWduZWQpKChzdHJtLT5uZXh0X2luICsgc3RybS0+YXZhaWxfaW4pIC0gc3RhdGUtPmluKTsKKyAgICAgICAgaWYgKGhhdmUgPCBzdGF0ZS0+c2l6ZSkgeworICAgICAgICAgICAgc3RhdGUtPmluW2hhdmVdID0gYzsKKyAgICAgICAgICAgIHN0cm0tPmF2YWlsX2luKys7CisgICAgICAgICAgICBzdGF0ZS0+eC5wb3MrKzsKKyAgICAgICAgICAgIHJldHVybiBjICYgMHhmZjsKKyAgICAgICAgfQogICAgIH0KIAogICAgIC8qIG5vIHJvb20gaW4gYnVmZmVyIG9yIG5vdCBpbml0aWFsaXplZCwgdXNlIGd6X3dyaXRlKCkgKi8KICAgICBidWZbMF0gPSBjOwogICAgIGlmIChnendyaXRlKGZpbGUsIGJ1ZiwgMSkgIT0gMSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBjOworICAgIHJldHVybiBjICYgMHhmZjsKIH0KIAogLyogLS0gc2VlIHpsaWIuaCAtLSAqLwpAQCAtMjc0LDE2ICszMDMsMTUgQEAKICAgICByZXR1cm4gcmV0ID09IDAgJiYgbGVuICE9IDAgPyAtMSA6IHJldDsKIH0KIAotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQogI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiAvKiAtLSBzZWUgemxpYi5oIC0tICovCi1pbnQgWkVYUE9SVFZBIGd6cHJpbnRmIChnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCitpbnQgWkVYUE9SVFZBIGd6dnByaW50ZihnekZpbGUgZmlsZSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIGludCBzaXplLCBsZW47CiAgICAgZ3pfc3RhdGVwIHN0YXRlOwogICAgIHpfc3RyZWFtcCBzdHJtOwotICAgIHZhX2xpc3QgdmE7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCiAgICAgaWYgKGZpbGUgPT0gTlVMTCkKQEAgLTMxMywyNSArMzQxLDIwIEBACiAgICAgLyogZG8gdGhlIHByaW50ZigpIGludG8gdGhlIGlucHV0IGJ1ZmZlciwgcHV0IGxlbmd0aCBpbiBsZW4gKi8KICAgICBzaXplID0gKGludCkoc3RhdGUtPnNpemUpOwogICAgIHN0YXRlLT5pbltzaXplIC0gMV0gPSAwOwotICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwogI2lmZGVmIE5PX3ZzbnByaW50ZgogIyAgaWZkZWYgSEFTX3ZzcHJpbnRmX3ZvaWQKLSAgICAodm9pZCl2c3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgdmEpOwotICAgIHZhX2VuZCh2YSk7CisgICAgKHZvaWQpdnNwcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgZm9ybWF0LCB2YSk7CiAgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBzaXplOyBsZW4rKykKICAgICAgICAgaWYgKHN0YXRlLT5pbltsZW5dID09IDApIGJyZWFrOwogIyAgZWxzZQotICAgIGxlbiA9IHZzcHJpbnRmKHN0YXRlLT5pbiwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKKyAgICBsZW4gPSB2c3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIHZhKTsKICMgIGVuZGlmCiAjZWxzZQogIyAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgKHZvaWQpdnNucHJpbnRmKHN0YXRlLT5pbiwgc2l6ZSwgZm9ybWF0LCB2YSk7Ci0gICAgdmFfZW5kKHZhKTsKLSAgICBsZW4gPSBzdHJsZW4oc3RhdGUtPmluKTsKKyAgICAodm9pZCl2c25wcmludGYoKGNoYXIgKikoc3RhdGUtPmluKSwgc2l6ZSwgZm9ybWF0LCB2YSk7CisgICAgbGVuID0gc3RybGVuKChjaGFyICopKHN0YXRlLT5pbikpOwogIyAgZWxzZQogICAgIGxlbiA9IHZzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIHZhKTsKLSAgICB2YV9lbmQodmEpOwogIyAgZW5kaWYKICNlbmRpZgogCkBAIC0zNDIsMTEgKzM2NSwyMiBAQAogICAgIC8qIHVwZGF0ZSBidWZmZXIgYW5kIHBvc2l0aW9uLCBkZWZlciBjb21wcmVzc2lvbiB1bnRpbCBuZWVkZWQgKi8KICAgICBzdHJtLT5hdmFpbF9pbiA9ICh1bnNpZ25lZClsZW47CiAgICAgc3RybS0+bmV4dF9pbiA9IHN0YXRlLT5pbjsKLSAgICBzdGF0ZS0+cG9zICs9IGxlbjsKKyAgICBzdGF0ZS0+eC5wb3MgKz0gbGVuOwogICAgIHJldHVybiBsZW47CiB9CiAKLSNlbHNlIC8qICFTVERDICovCitpbnQgWkVYUE9SVFZBIGd6cHJpbnRmKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IHZhOworICAgIGludCByZXQ7CisKKyAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKKyAgICByZXQgPSBnenZwcmludGYoZmlsZSwgZm9ybWF0LCB2YSk7CisgICAgdmFfZW5kKHZhKTsKKyAgICByZXR1cm4gcmV0OworfQorCisjZWxzZSAvKiAhU1REQyAmJiAhWl9IQVZFX1NUREFSR19IICovCiAKIC8qIC0tIHNlZSB6bGliLmggLS0gKi8KIGludCBaRVhQT1JUVkEgZ3pwcmludGYgKGZpbGUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LCBhOSwgYTEwLApAQCAtMzY2LDYgKzQwMCwxMCBAQAogICAgIHN0YXRlID0gKGd6X3N0YXRlcClmaWxlOwogICAgIHN0cm0gPSAmKHN0YXRlLT5zdHJtKTsKIAorICAgIC8qIGNoZWNrIHRoYXQgY2FuIHJlYWxseSBwYXNzIHBvaW50ZXIgaW4gaW50cyAqLworICAgIGlmIChzaXplb2YoaW50KSAhPSBzaXplb2Yodm9pZCAqKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHdyaXRpbmcgYW5kIHRoYXQgdGhlcmUncyBubyBlcnJvciAqLwogICAgIGlmIChzdGF0ZS0+bW9kZSAhPSBHWl9XUklURSB8fCBzdGF0ZS0+ZXJyICE9IFpfT0spCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzkwLDIyICs0MjgsMjMgQEAKICAgICBzdGF0ZS0+aW5bc2l6ZSAtIDFdID0gMDsKICNpZmRlZiBOT19zbnByaW50ZgogIyAgaWZkZWYgSEFTX3NwcmludGZfdm9pZAotICAgIHNwcmludGYoc3RhdGUtPmluLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICBzcHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAogICAgICAgICAgICAgYTksIGExMCwgYTExLCBhMTIsIGExMywgYTE0LCBhMTUsIGExNiwgYTE3LCBhMTgsIGExOSwgYTIwKTsKICAgICBmb3IgKGxlbiA9IDA7IGxlbiA8IHNpemU7IGxlbisrKQogICAgICAgICBpZiAoc3RhdGUtPmluW2xlbl0gPT0gMCkgYnJlYWs7CiAjICBlbHNlCi0gICAgbGVuID0gc3ByaW50ZihzdGF0ZS0+aW4sIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CisgICAgbGVuID0gc3ByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICAgICAgICAgICAgICAgIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LCBhMTksIGEyMCk7CiAjICBlbmRpZgogI2Vsc2UKICMgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgc25wcmludGYoc3RhdGUtPmluLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKKyAgICBzbnByaW50ZigoY2hhciAqKShzdGF0ZS0+aW4pLCBzaXplLCBmb3JtYXQsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYsIGE3LCBhOCwKICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOwotICAgIGxlbiA9IHN0cmxlbihzdGF0ZS0+aW4pOworICAgIGxlbiA9IHN0cmxlbigoY2hhciAqKShzdGF0ZS0+aW4pKTsKICMgIGVsc2UKLSAgICBsZW4gPSBzbnByaW50ZihzdGF0ZS0+aW4sIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwgYTcsIGE4LAotICAgICAgICAgICAgICAgICBhOSwgYTEwLCBhMTEsIGExMiwgYTEzLCBhMTQsIGExNSwgYTE2LCBhMTcsIGExOCwgYTE5LCBhMjApOworICAgIGxlbiA9IHNucHJpbnRmKChjaGFyICopKHN0YXRlLT5pbiksIHNpemUsIGZvcm1hdCwgYTEsIGEyLCBhMywgYTQsIGE1LCBhNiwKKyAgICAgICAgICAgICAgICAgICBhNywgYTgsIGE5LCBhMTAsIGExMSwgYTEyLCBhMTMsIGExNCwgYTE1LCBhMTYsIGExNywgYTE4LAorICAgICAgICAgICAgICAgICAgIGExOSwgYTIwKTsKICMgIGVuZGlmCiAjZW5kaWYKIApAQCAtNDE2LDcgKzQ1NSw3IEBACiAgICAgLyogdXBkYXRlIGJ1ZmZlciBhbmQgcG9zaXRpb24sIGRlZmVyIGNvbXByZXNzaW9uIHVudGlsIG5lZWRlZCAqLwogICAgIHN0cm0tPmF2YWlsX2luID0gKHVuc2lnbmVkKWxlbjsKICAgICBzdHJtLT5uZXh0X2luID0gc3RhdGUtPmluOwotICAgIHN0YXRlLT5wb3MgKz0gbGVuOworICAgIHN0YXRlLT54LnBvcyArPSBsZW47CiAgICAgcmV0dXJuIGxlbjsKIH0KIApAQCAtNTAwLDcgKzUzOSw3IEBACiBpbnQgWkVYUE9SVCBnemNsb3NlX3coZmlsZSkKICAgICBnekZpbGUgZmlsZTsKIHsKLSAgICBpbnQgcmV0ID0gMDsKKyAgICBpbnQgcmV0ID0gWl9PSzsKICAgICBnel9zdGF0ZXAgc3RhdGU7CiAKICAgICAvKiBnZXQgaW50ZXJuYWwgc3RydWN0dXJlICovCkBAIC01MTUsMTcgKzU1NCwyNCBAQAogICAgIC8qIGNoZWNrIGZvciBzZWVrIHJlcXVlc3QgKi8KICAgICBpZiAoc3RhdGUtPnNlZWspIHsKICAgICAgICAgc3RhdGUtPnNlZWsgPSAwOwotICAgICAgICByZXQgKz0gZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApOworICAgICAgICBpZiAoZ3pfemVybyhzdGF0ZSwgc3RhdGUtPnNraXApID09IC0xKQorICAgICAgICAgICAgcmV0ID0gc3RhdGUtPmVycjsKICAgICB9CiAKICAgICAvKiBmbHVzaCwgZnJlZSBtZW1vcnksIGFuZCBjbG9zZSBmaWxlICovCi0gICAgcmV0ICs9IGd6X2NvbXAoc3RhdGUsIFpfRklOSVNIKTsKLSAgICAodm9pZClkZWZsYXRlRW5kKCYoc3RhdGUtPnN0cm0pKTsKLSAgICBmcmVlKHN0YXRlLT5vdXQpOwotICAgIGZyZWUoc3RhdGUtPmluKTsKKyAgICBpZiAoZ3pfY29tcChzdGF0ZSwgWl9GSU5JU0gpID09IC0xKQorICAgICAgICByZXQgPSBzdGF0ZS0+ZXJyOworICAgIGlmIChzdGF0ZS0+c2l6ZSkgeworICAgICAgICBpZiAoIXN0YXRlLT5kaXJlY3QpIHsKKyAgICAgICAgICAgICh2b2lkKWRlZmxhdGVFbmQoJihzdGF0ZS0+c3RybSkpOworICAgICAgICAgICAgZnJlZShzdGF0ZS0+b3V0KTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHN0YXRlLT5pbik7CisgICAgfQogICAgIGd6X2Vycm9yKHN0YXRlLCBaX09LLCBOVUxMKTsKICAgICBmcmVlKHN0YXRlLT5wYXRoKTsKLSAgICByZXQgKz0gY2xvc2Uoc3RhdGUtPmZkKTsKKyAgICBpZiAoY2xvc2Uoc3RhdGUtPmZkKSA9PSAtMSkKKyAgICAgICAgcmV0ID0gWl9FUlJOTzsKICAgICBmcmVlKHN0YXRlKTsKLSAgICByZXR1cm4gcmV0ID8gWl9FUlJOTyA6IFpfT0s7CisgICAgcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZiYWNrLmMgYi9Nb2R1bGVzL3psaWIvaW5mYmFjay5jCmluZGV4IGFmM2E4YzkuLmYzODMzYzIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZiYWNrLmMKKysrIGIvTW9kdWxlcy96bGliL2luZmJhY2suYwpAQCAtMSw1ICsxLDUgQEAKIC8qIGluZmJhY2suYyAtLSBpbmZsYXRlIHVzaW5nIGEgY2FsbC1iYWNrIGludGVyZmFjZQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDkgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTEgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQyLDEwICs0MiwxOSBAQAogICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CiAgICAgc3RybS0+bXNnID0gWl9OVUxMOyAgICAgICAgICAgICAgICAgLyogaW4gY2FzZSB3ZSByZXR1cm4gYW4gZXJyb3IgKi8KICAgICBpZiAoc3RybS0+emFsbG9jID09IChhbGxvY19mdW5jKTApIHsKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKICAgICAgICAgc3RybS0+emFsbG9jID0gemNhbGxvYzsKICAgICAgICAgc3RybS0+b3BhcXVlID0gKHZvaWRwZikwOworI2VuZGlmCiAgICAgfQotICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApIHN0cm0tPnpmcmVlID0gemNmcmVlOworICAgIGlmIChzdHJtLT56ZnJlZSA9PSAoZnJlZV9mdW5jKTApCisjaWZkZWYgWl9TT0xPCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyNlbHNlCisgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilaQUxMT0Moc3RybSwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbmZsYXRlX3N0YXRlKSk7CiAgICAgaWYgKHN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfTUVNX0VSUk9SOwpAQCAtMjQ2LDcgKzI1NSw3IEBACiB2b2lkIEZBUiAqb3V0X2Rlc2M7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLworICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKm5leHQ7ICAgIC8qIG5leHQgaW5wdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqcHV0OyAgICAgLyogbmV4dCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBoYXZlLCBsZWZ0OyAgICAgICAgLyogYXZhaWxhYmxlIGlucHV0IGFuZCBvdXRwdXQgKi8KICAgICB1bnNpZ25lZCBsb25nIGhvbGQ7ICAgICAgICAgLyogYml0IGJ1ZmZlciAqLwpAQCAtMzk0LDcgKzQwMyw2IEBACiAgICAgICAgICAgICAgICAgICAgIFBVTExCWVRFKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChoZXJlLnZhbCA8IDE2KSB7Ci0gICAgICAgICAgICAgICAgICAgIE5FRURCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIERST1BCSVRTKGhlcmUuYml0cyk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5sZW5zW3N0YXRlLT5oYXZlKytdID0gaGVyZS52YWw7CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZmZhc3QuYyBiL01vZHVsZXMvemxpYi9pbmZmYXN0LmMKaW5kZXggMmYxZDYwYi4uYmRhNTljZSAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZmZhc3QuYworKysgYi9Nb2R1bGVzL3psaWIvaW5mZmFzdC5jCkBAIC0xLDUgKzEsNSBAQAogLyogaW5mZmFzdC5jIC0tIGZhc3QgZGVjb2RpbmcKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA4LCAyMDEwIE1hcmsgQWRsZXIKKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA4LCAyMDEwLCAyMDEzIE1hcmsgQWRsZXIKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC02OSw4ICs2OSw4IEBACiB1bnNpZ25lZCBzdGFydDsgICAgICAgICAvKiBpbmZsYXRlKCkncyBzdGFydGluZyB2YWx1ZSBmb3Igc3RybS0+YXZhaWxfb3V0ICovCiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjaGFyIEZBUiAqaW47ICAgICAgLyogbG9jYWwgc3RybS0+bmV4dF9pbiAqLwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpsYXN0OyAgICAvKiB3aGlsZSBpbiA8IGxhc3QsIGVub3VnaCBpbnB1dCBhdmFpbGFibGUgKi8KKyAgICB6X2NvbnN0IHVuc2lnbmVkIGNoYXIgRkFSICppbjsgICAgICAvKiBsb2NhbCBzdHJtLT5uZXh0X2luICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbGFzdDsgICAgLyogaGF2ZSBlbm91Z2ggaW5wdXQgd2hpbGUgaW4gPCBsYXN0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKm91dDsgICAgIC8qIGxvY2FsIHN0cm0tPm5leHRfb3V0ICovCiAgICAgdW5zaWduZWQgY2hhciBGQVIgKmJlZzsgICAgIC8qIGluZmxhdGUoKSdzIGluaXRpYWwgc3RybS0+bmV4dF9vdXQgKi8KICAgICB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kOyAgICAgLyogd2hpbGUgb3V0IDwgZW5kLCBlbm91Z2ggc3BhY2UgYXZhaWxhYmxlICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mZml4ZWQuaCBiL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCmluZGV4IDc1ZWQ0YjUuLmQ2MjgzMjcgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCisrKyBiL01vZHVsZXMvemxpYi9pbmZmaXhlZC5oCkBAIC0yLDkgKzIsOSBAQAogICAgICAqIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IG1ha2VmaXhlZCgpLgogICAgICAqLwogCi0gICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQKLSAgICAgICBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29tcHJlc3Npb24gbGlicmFyeSBhbmQKLSAgICAgICBpcyBzdWJqZWN0IHRvIGNoYW5nZS4gQXBwbGljYXRpb25zIHNob3VsZCBvbmx5IHVzZSB6bGliLmguCisgICAgLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4KKyAgICAgICBJdCBpcyBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGxpYnJhcnkgYW5kIGlzCisgICAgICAgc3ViamVjdCB0byBjaGFuZ2UuIEFwcGxpY2F0aW9ucyBzaG91bGQgb25seSB1c2UgemxpYi5oLgogICAgICAqLwogCiAgICAgc3RhdGljIGNvbnN0IGNvZGUgbGVuZml4WzUxMl0gPSB7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jIGIvTW9kdWxlcy96bGliL2luZmxhdGUuYwppbmRleCBhODQzMWFiLi44NzBmODliIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mbGF0ZS5jCisrKyBiL01vZHVsZXMvemxpYi9pbmZsYXRlLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZsYXRlLmMgLS0gemxpYiBkZWNvbXByZXNzaW9uCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBNYXJrIEFkbGVyCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMiBNYXJrIEFkbGVyCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtOTMsMTQgKzkzLDE1IEBACiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KIGxvY2FsIHZvaWQgZml4ZWR0YWJsZXMgT0YoKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGUpKTsKLWxvY2FsIGludCB1cGRhdGV3aW5kb3cgT0YoKHpfc3RyZWFtcCBzdHJtLCB1bnNpZ25lZCBvdXQpKTsKK2xvY2FsIGludCB1cGRhdGV3aW5kb3cgT0YoKHpfc3RyZWFtcCBzdHJtLCBjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqZW5kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY29weSkpOwogI2lmZGVmIEJVSUxERklYRUQKICAgIHZvaWQgbWFrZWZpeGVkIE9GKCh2b2lkKSk7CiAjZW5kaWYKLWxvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKK2xvY2FsIHVuc2lnbmVkIHN5bmNzZWFyY2ggT0YoKHVuc2lnbmVkIEZBUiAqaGF2ZSwgY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKmJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbikpOwogCi1pbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQoc3RybSkKK2ludCBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAoc3RybSkKIHpfc3RyZWFtcCBzdHJtOwogewogICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CkBAIC0xMDksMTUgKzExMCwxMyBAQAogICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOwogICAgIHN0cm0tPnRvdGFsX2luID0gc3RybS0+dG90YWxfb3V0ID0gc3RhdGUtPnRvdGFsID0gMDsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7Ci0gICAgc3RybS0+YWRsZXIgPSAxOyAgICAgICAgLyogdG8gc3VwcG9ydCBpbGwtY29uY2VpdmVkIEphdmEgdGVzdCBzdWl0ZSAqLworICAgIGlmIChzdGF0ZS0+d3JhcCkgICAgICAgIC8qIHRvIHN1cHBvcnQgaWxsLWNvbmNlaXZlZCBKYXZhIHRlc3Qgc3VpdGUgKi8KKyAgICAgICAgc3RybS0+YWRsZXIgPSBzdGF0ZS0+d3JhcCAmIDE7CiAgICAgc3RhdGUtPm1vZGUgPSBIRUFEOwogICAgIHN0YXRlLT5sYXN0ID0gMDsKICAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAwOwogICAgIHN0YXRlLT5kbWF4ID0gMzI3NjhVOwogICAgIHN0YXRlLT5oZWFkID0gWl9OVUxMOwotICAgIHN0YXRlLT53c2l6ZSA9IDA7Ci0gICAgc3RhdGUtPndoYXZlID0gMDsKLSAgICBzdGF0ZS0+d25leHQgPSAwOwogICAgIHN0YXRlLT5ob2xkID0gMDsKICAgICBzdGF0ZS0+Yml0cyA9IDA7CiAgICAgc3RhdGUtPmxlbmNvZGUgPSBzdGF0ZS0+ZGlzdGNvZGUgPSBzdGF0ZS0+bmV4dCA9IHN0YXRlLT5jb2RlczsKQEAgLTEyNyw2ICsxMjYsMTkgQEAKICAgICByZXR1cm4gWl9PSzsKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0ZVJlc2V0KHN0cm0pCit6X3N0cmVhbXAgc3RybTsKK3sKKyAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOworCisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0YXRlID0gKHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqKXN0cm0tPnN0YXRlOworICAgIHN0YXRlLT53c2l6ZSA9IDA7CisgICAgc3RhdGUtPndoYXZlID0gMDsKKyAgICBzdGF0ZS0+d25leHQgPSAwOworICAgIHJldHVybiBpbmZsYXRlUmVzZXRLZWVwKHN0cm0pOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRlUmVzZXQyKHN0cm0sIHdpbmRvd0JpdHMpCiB6X3N0cmVhbXAgc3RybTsKIGludCB3aW5kb3dCaXRzOwpAQCAtMTgwLDEwICsxOTIsMTkgQEAKICAgICBpZiAoc3RybSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKICAgICBzdHJtLT5tc2cgPSBaX05VTEw7ICAgICAgICAgICAgICAgICAvKiBpbiBjYXNlIHdlIHJldHVybiBhbiBlcnJvciAqLwogICAgIGlmIChzdHJtLT56YWxsb2MgPT0gKGFsbG9jX2Z1bmMpMCkgeworI2lmZGVmIFpfU09MTworICAgICAgICByZXR1cm4gWl9TVFJFQU1fRVJST1I7CisjZWxzZQogICAgICAgICBzdHJtLT56YWxsb2MgPSB6Y2FsbG9jOwogICAgICAgICBzdHJtLT5vcGFxdWUgPSAodm9pZHBmKTA7CisjZW5kaWYKICAgICB9Ci0gICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisgICAgaWYgKHN0cm0tPnpmcmVlID09IChmcmVlX2Z1bmMpMCkKKyNpZmRlZiBaX1NPTE8KKyAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworI2Vsc2UKKyAgICAgICAgc3RybS0+emZyZWUgPSB6Y2ZyZWU7CisjZW5kaWYKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKikKICAgICAgICAgICAgIFpBTExPQyhzdHJtLCAxLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUgPT0gWl9OVUxMKSByZXR1cm4gWl9NRU1fRVJST1I7CkBAIC0zMjEsOCArMzQyLDggQEAKICAgICBsb3cgPSAwOwogICAgIGZvciAoOzspIHsKICAgICAgICAgaWYgKChsb3cgJSA3KSA9PSAwKSBwcmludGYoIlxuICAgICAgICAiKTsKLSAgICAgICAgcHJpbnRmKCJ7JXUsJXUsJWR9Iiwgc3RhdGUubGVuY29kZVtsb3ddLm9wLCBzdGF0ZS5sZW5jb2RlW2xvd10uYml0cywKLSAgICAgICAgICAgICAgIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOworICAgICAgICBwcmludGYoInsldSwldSwlZH0iLCAobG93ICYgMTI3KSA9PSA5OSA/IDY0IDogc3RhdGUubGVuY29kZVtsb3ddLm9wLAorICAgICAgICAgICAgICAgc3RhdGUubGVuY29kZVtsb3ddLmJpdHMsIHN0YXRlLmxlbmNvZGVbbG93XS52YWwpOwogICAgICAgICBpZiAoKytsb3cgPT0gc2l6ZSkgYnJlYWs7CiAgICAgICAgIHB1dGNoYXIoJywnKTsKICAgICB9CkBAIC0zNTUsMTIgKzM3NiwxMyBAQAogICAgb3V0cHV0IHdpbGwgZmFsbCBpbiB0aGUgb3V0cHV0IGRhdGEsIG1ha2luZyBtYXRjaCBjb3BpZXMgc2ltcGxlciBhbmQgZmFzdGVyLgogICAgVGhlIGFkdmFudGFnZSBtYXkgYmUgZGVwZW5kZW50IG9uIHRoZSBzaXplIG9mIHRoZSBwcm9jZXNzb3IncyBkYXRhIGNhY2hlcy4KICAqLwotbG9jYWwgaW50IHVwZGF0ZXdpbmRvdyhzdHJtLCBvdXQpCitsb2NhbCBpbnQgdXBkYXRld2luZG93KHN0cm0sIGVuZCwgY29weSkKIHpfc3RyZWFtcCBzdHJtOwotdW5zaWduZWQgb3V0OworY29uc3QgQnl0ZWYgKmVuZDsKK3Vuc2lnbmVkIGNvcHk7CiB7CiAgICAgc3RydWN0IGluZmxhdGVfc3RhdGUgRkFSICpzdGF0ZTsKLSAgICB1bnNpZ25lZCBjb3B5LCBkaXN0OworICAgIHVuc2lnbmVkIGRpc3Q7CiAKICAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKIApAQCAtMzgwLDE5ICs0MDIsMTggQEAKICAgICB9CiAKICAgICAvKiBjb3B5IHN0YXRlLT53c2l6ZSBvciBsZXNzIG91dHB1dCBieXRlcyBpbnRvIHRoZSBjaXJjdWxhciB3aW5kb3cgKi8KLSAgICBjb3B5ID0gb3V0IC0gc3RybS0+YXZhaWxfb3V0OwogICAgIGlmIChjb3B5ID49IHN0YXRlLT53c2l6ZSkgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIHN0cm0tPm5leHRfb3V0IC0gc3RhdGUtPndzaXplLCBzdGF0ZS0+d3NpemUpOworICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGVuZCAtIHN0YXRlLT53c2l6ZSwgc3RhdGUtPndzaXplKTsKICAgICAgICAgc3RhdGUtPnduZXh0ID0gMDsKICAgICAgICAgc3RhdGUtPndoYXZlID0gc3RhdGUtPndzaXplOwogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZGlzdCA9IHN0YXRlLT53c2l6ZSAtIHN0YXRlLT53bmV4dDsKICAgICAgICAgaWYgKGRpc3QgPiBjb3B5KSBkaXN0ID0gY29weTsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LCBzdHJtLT5uZXh0X291dCAtIGNvcHksIGRpc3QpOworICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d25leHQsIGVuZCAtIGNvcHksIGRpc3QpOwogICAgICAgICBjb3B5IC09IGRpc3Q7CiAgICAgICAgIGlmIChjb3B5KSB7Ci0gICAgICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIHN0cm0tPm5leHRfb3V0IC0gY29weSwgY29weSk7CisgICAgICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3csIGVuZCAtIGNvcHksIGNvcHkpOwogICAgICAgICAgICAgc3RhdGUtPnduZXh0ID0gY29weTsKICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSA9IHN0YXRlLT53c2l6ZTsKICAgICAgICAgfQpAQCAtNDk5LDExICs1MjAsNiBAQAogICAgICAgICBiaXRzIC09IGJpdHMgJiA3OyBcCiAgICAgfSB3aGlsZSAoMCkKIAotLyogUmV2ZXJzZSB0aGUgYnl0ZXMgaW4gYSAzMi1iaXQgdmFsdWUgKi8KLSNkZWZpbmUgUkVWRVJTRShxKSBcCi0gICAgKCgoKHEpID4+IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAotICAgICAoKChxKSAmIDB4ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYpIDw8IDI0KSkKLQogLyoKICAgIGluZmxhdGUoKSB1c2VzIGEgc3RhdGUgbWFjaGluZSB0byBwcm9jZXNzIGFzIG11Y2ggaW5wdXQgZGF0YSBhbmQgZ2VuZXJhdGUgYXMKICAgIG11Y2ggb3V0cHV0IGRhdGEgYXMgcG9zc2libGUgYmVmb3JlIHJldHVybmluZy4gIFRoZSBzdGF0ZSBtYWNoaW5lIGlzCkBAIC01OTEsNyArNjA3LDcgQEAKIGludCBmbHVzaDsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGNoYXIgRkFSICpuZXh0OyAgICAvKiBuZXh0IGlucHV0ICovCisgICAgel9jb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqbmV4dDsgICAgLyogbmV4dCBpbnB1dCAqLwogICAgIHVuc2lnbmVkIGNoYXIgRkFSICpwdXQ7ICAgICAvKiBuZXh0IG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGhhdmUsIGxlZnQ7ICAgICAgICAvKiBhdmFpbGFibGUgaW5wdXQgYW5kIG91dHB1dCAqLwogICAgIHVuc2lnbmVkIGxvbmcgaG9sZDsgICAgICAgICAvKiBiaXQgYnVmZmVyICovCkBAIC03OTcsNyArODEzLDcgQEAKICNlbmRpZgogICAgICAgICBjYXNlIERJQ1RJRDoKICAgICAgICAgICAgIE5FRURCSVRTKDMyKTsKLSAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gUkVWRVJTRShob2xkKTsKKyAgICAgICAgICAgIHN0cm0tPmFkbGVyID0gc3RhdGUtPmNoZWNrID0gWlNXQVAzMihob2xkKTsKICAgICAgICAgICAgIElOSVRCSVRTKCk7CiAgICAgICAgICAgICBzdGF0ZS0+bW9kZSA9IERJQ1Q7CiAgICAgICAgIGNhc2UgRElDVDoKQEAgLTkwNSw3ICs5MjEsNyBAQAogICAgICAgICAgICAgd2hpbGUgKHN0YXRlLT5oYXZlIDwgMTkpCiAgICAgICAgICAgICAgICAgc3RhdGUtPmxlbnNbb3JkZXJbc3RhdGUtPmhhdmUrK11dID0gMDsKICAgICAgICAgICAgIHN0YXRlLT5uZXh0ID0gc3RhdGUtPmNvZGVzOwotICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmxlbmNvZGUgPSAoY29uc3QgY29kZSBGQVIgKikoc3RhdGUtPm5leHQpOwogICAgICAgICAgICAgc3RhdGUtPmxlbmJpdHMgPSA3OwogICAgICAgICAgICAgcmV0ID0gaW5mbGF0ZV90YWJsZShDT0RFUywgc3RhdGUtPmxlbnMsIDE5LCAmKHN0YXRlLT5uZXh0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bGVuYml0cyksIHN0YXRlLT53b3JrKTsKQEAgLTkyNSw3ICs5NDEsNiBAQAogICAgICAgICAgICAgICAgICAgICBQVUxMQllURSgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoaGVyZS52YWwgPCAxNikgewotICAgICAgICAgICAgICAgICAgICBORUVEQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBEUk9QQklUUyhoZXJlLmJpdHMpOwogICAgICAgICAgICAgICAgICAgICBzdGF0ZS0+bGVuc1tzdGF0ZS0+aGF2ZSsrXSA9IGhlcmUudmFsOwogICAgICAgICAgICAgICAgIH0KQEAgLTk4MCw3ICs5OTUsNyBAQAogICAgICAgICAgICAgICAgdmFsdWVzIGhlcmUgKDkgYW5kIDYpIHdpdGhvdXQgcmVhZGluZyB0aGUgY29tbWVudHMgaW4gaW5mdHJlZXMuaAogICAgICAgICAgICAgICAgY29uY2VybmluZyB0aGUgRU5PVUdIIGNvbnN0YW50cywgd2hpY2ggZGVwZW5kIG9uIHRob3NlIHZhbHVlcyAqLwogICAgICAgICAgICAgc3RhdGUtPm5leHQgPSBzdGF0ZS0+Y29kZXM7Ci0gICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb2RlIGNvbnN0IEZBUiAqKShzdGF0ZS0+bmV4dCk7CisgICAgICAgICAgICBzdGF0ZS0+bGVuY29kZSA9IChjb25zdCBjb2RlIEZBUiAqKShzdGF0ZS0+bmV4dCk7CiAgICAgICAgICAgICBzdGF0ZS0+bGVuYml0cyA9IDk7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKExFTlMsIHN0YXRlLT5sZW5zLCBzdGF0ZS0+bmxlbiwgJihzdGF0ZS0+bmV4dCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoc3RhdGUtPmxlbmJpdHMpLCBzdGF0ZS0+d29yayk7CkBAIC05ODksNyArMTAwNCw3IEBACiAgICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBCQUQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdGF0ZS0+ZGlzdGNvZGUgPSAoY29kZSBjb25zdCBGQVIgKikoc3RhdGUtPm5leHQpOworICAgICAgICAgICAgc3RhdGUtPmRpc3Rjb2RlID0gKGNvbnN0IGNvZGUgRkFSICopKHN0YXRlLT5uZXh0KTsKICAgICAgICAgICAgIHN0YXRlLT5kaXN0Yml0cyA9IDY7CiAgICAgICAgICAgICByZXQgPSBpbmZsYXRlX3RhYmxlKERJU1RTLCBzdGF0ZS0+bGVucyArIHN0YXRlLT5ubGVuLCBzdGF0ZS0+bmRpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihzdGF0ZS0+bmV4dCksICYoc3RhdGUtPmRpc3RiaXRzKSwgc3RhdGUtPndvcmspOwpAQCAtMTE3MCw3ICsxMTg1LDcgQEAKICNpZmRlZiBHVU5aSVAKICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5mbGFncyA/IGhvbGQgOgogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICBSRVZFUlNFKGhvbGQpKSAhPSBzdGF0ZS0+Y2hlY2spIHsKKyAgICAgICAgICAgICAgICAgICAgIFpTV0FQMzIoaG9sZCkpICE9IHN0YXRlLT5jaGVjaykgewogICAgICAgICAgICAgICAgICAgICBzdHJtLT5tc2cgPSAoY2hhciAqKSJpbmNvcnJlY3QgZGF0YSBjaGVjayI7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gQkFEOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTEyMTQsOCArMTIyOSw5IEBACiAgICAgICovCiAgIGluZl9sZWF2ZToKICAgICBSRVNUT1JFKCk7Ci0gICAgaWYgKHN0YXRlLT53c2l6ZSB8fCAoc3RhdGUtPm1vZGUgPCBDSEVDSyAmJiBvdXQgIT0gc3RybS0+YXZhaWxfb3V0KSkKLSAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBvdXQpKSB7CisgICAgaWYgKHN0YXRlLT53c2l6ZSB8fCAob3V0ICE9IHN0cm0tPmF2YWlsX291dCAmJiBzdGF0ZS0+bW9kZSA8IEJBRCAmJgorICAgICAgICAgICAgKHN0YXRlLT5tb2RlIDwgQ0hFQ0sgfHwgZmx1c2ggIT0gWl9GSU5JU0gpKSkKKyAgICAgICAgaWYgKHVwZGF0ZXdpbmRvdyhzdHJtLCBzdHJtLT5uZXh0X291dCwgb3V0IC0gc3RybS0+YXZhaWxfb3V0KSkgewogICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07CiAgICAgICAgICAgICByZXR1cm4gWl9NRU1fRVJST1I7CiAgICAgICAgIH0KQEAgLTEyNDksMTMgKzEyNjUsMzcgQEAKICAgICByZXR1cm4gWl9PSzsKIH0KIAoraW50IFpFWFBPUlQgaW5mbGF0ZUdldERpY3Rpb25hcnkoc3RybSwgZGljdGlvbmFyeSwgZGljdExlbmd0aCkKK3pfc3RyZWFtcCBzdHJtOworQnl0ZWYgKmRpY3Rpb25hcnk7Cit1SW50ICpkaWN0TGVuZ3RoOworeworICAgIHN0cnVjdCBpbmZsYXRlX3N0YXRlIEZBUiAqc3RhdGU7CisKKyAgICAvKiBjaGVjayBzdGF0ZSAqLworICAgIGlmIChzdHJtID09IFpfTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBaX05VTEwpIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdGF0ZSA9IChzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKilzdHJtLT5zdGF0ZTsKKworICAgIC8qIGNvcHkgZGljdGlvbmFyeSAqLworICAgIGlmIChzdGF0ZS0+d2hhdmUgJiYgZGljdGlvbmFyeSAhPSBaX05VTEwpIHsKKyAgICAgICAgem1lbWNweShkaWN0aW9uYXJ5LCBzdGF0ZS0+d2luZG93ICsgc3RhdGUtPnduZXh0LAorICAgICAgICAgICAgICAgIHN0YXRlLT53aGF2ZSAtIHN0YXRlLT53bmV4dCk7CisgICAgICAgIHptZW1jcHkoZGljdGlvbmFyeSArIHN0YXRlLT53aGF2ZSAtIHN0YXRlLT53bmV4dCwKKyAgICAgICAgICAgICAgICBzdGF0ZS0+d2luZG93LCBzdGF0ZS0+d25leHQpOworICAgIH0KKyAgICBpZiAoZGljdExlbmd0aCAhPSBaX05VTEwpCisgICAgICAgICpkaWN0TGVuZ3RoID0gc3RhdGUtPndoYXZlOworICAgIHJldHVybiBaX09LOworfQorCiBpbnQgWkVYUE9SVCBpbmZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKQogel9zdHJlYW1wIHN0cm07CiBjb25zdCBCeXRlZiAqZGljdGlvbmFyeTsKIHVJbnQgZGljdExlbmd0aDsKIHsKICAgICBzdHJ1Y3QgaW5mbGF0ZV9zdGF0ZSBGQVIgKnN0YXRlOwotICAgIHVuc2lnbmVkIGxvbmcgaWQ7CisgICAgdW5zaWduZWQgbG9uZyBkaWN0aWQ7CisgICAgaW50IHJldDsKIAogICAgIC8qIGNoZWNrIHN0YXRlICovCiAgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwpAQCAtMTI2MywyOSArMTMwMywyMSBAQAogICAgIGlmIChzdGF0ZS0+d3JhcCAhPSAwICYmIHN0YXRlLT5tb2RlICE9IERJQ1QpCiAgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKIAotICAgIC8qIGNoZWNrIGZvciBjb3JyZWN0IGRpY3Rpb25hcnkgaWQgKi8KKyAgICAvKiBjaGVjayBmb3IgY29ycmVjdCBkaWN0aW9uYXJ5IGlkZW50aWZpZXIgKi8KICAgICBpZiAoc3RhdGUtPm1vZGUgPT0gRElDVCkgewotICAgICAgICBpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7Ci0gICAgICAgIGlkID0gYWRsZXIzMihpZCwgZGljdGlvbmFyeSwgZGljdExlbmd0aCk7Ci0gICAgICAgIGlmIChpZCAhPSBzdGF0ZS0+Y2hlY2spCisgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoMEwsIFpfTlVMTCwgMCk7CisgICAgICAgIGRpY3RpZCA9IGFkbGVyMzIoZGljdGlkLCBkaWN0aW9uYXJ5LCBkaWN0TGVuZ3RoKTsKKyAgICAgICAgaWYgKGRpY3RpZCAhPSBzdGF0ZS0+Y2hlY2spCiAgICAgICAgICAgICByZXR1cm4gWl9EQVRBX0VSUk9SOwogICAgIH0KIAotICAgIC8qIGNvcHkgZGljdGlvbmFyeSB0byB3aW5kb3cgKi8KLSAgICBpZiAodXBkYXRld2luZG93KHN0cm0sIHN0cm0tPmF2YWlsX291dCkpIHsKKyAgICAvKiBjb3B5IGRpY3Rpb25hcnkgdG8gd2luZG93IHVzaW5nIHVwZGF0ZXdpbmRvdygpLCB3aGljaCB3aWxsIGFtZW5kIHRoZQorICAgICAgIGV4aXN0aW5nIGRpY3Rpb25hcnkgaWYgYXBwcm9wcmlhdGUgKi8KKyAgICByZXQgPSB1cGRhdGV3aW5kb3coc3RybSwgZGljdGlvbmFyeSArIGRpY3RMZW5ndGgsIGRpY3RMZW5ndGgpOworICAgIGlmIChyZXQpIHsKICAgICAgICAgc3RhdGUtPm1vZGUgPSBNRU07CiAgICAgICAgIHJldHVybiBaX01FTV9FUlJPUjsKICAgICB9Ci0gICAgaWYgKGRpY3RMZW5ndGggPiBzdGF0ZS0+d3NpemUpIHsKLSAgICAgICAgem1lbWNweShzdGF0ZS0+d2luZG93LCBkaWN0aW9uYXJ5ICsgZGljdExlbmd0aCAtIHN0YXRlLT53c2l6ZSwKLSAgICAgICAgICAgICAgICBzdGF0ZS0+d3NpemUpOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSBzdGF0ZS0+d3NpemU7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICB6bWVtY3B5KHN0YXRlLT53aW5kb3cgKyBzdGF0ZS0+d3NpemUgLSBkaWN0TGVuZ3RoLCBkaWN0aW9uYXJ5LAotICAgICAgICAgICAgICAgIGRpY3RMZW5ndGgpOwotICAgICAgICBzdGF0ZS0+d2hhdmUgPSBkaWN0TGVuZ3RoOwotICAgIH0KICAgICBzdGF0ZS0+aGF2ZWRpY3QgPSAxOwogICAgIFRyYWNldigoc3RkZXJyLCAiaW5mbGF0ZTogICBkaWN0aW9uYXJ5IHNldFxuIikpOwogICAgIHJldHVybiBaX09LOwpAQCAtMTMyMSw3ICsxMzUzLDcgQEAKICAqLwogbG9jYWwgdW5zaWduZWQgc3luY3NlYXJjaChoYXZlLCBidWYsIGxlbikKIHVuc2lnbmVkIEZBUiAqaGF2ZTsKLXVuc2lnbmVkIGNoYXIgRkFSICpidWY7Citjb25zdCB1bnNpZ25lZCBjaGFyIEZBUiAqYnVmOwogdW5zaWduZWQgbGVuOwogewogICAgIHVuc2lnbmVkIGdvdDsKQEAgLTE0MzMsOCArMTQ2NSw4IEBACiAgICAgfQogCiAgICAgLyogY29weSBzdGF0ZSAqLwotICAgIHptZW1jcHkoZGVzdCwgc291cmNlLCBzaXplb2Yoel9zdHJlYW0pKTsKLSAgICB6bWVtY3B5KGNvcHksIHN0YXRlLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKKyAgICB6bWVtY3B5KCh2b2lkcGYpZGVzdCwgKHZvaWRwZilzb3VyY2UsIHNpemVvZih6X3N0cmVhbSkpOworICAgIHptZW1jcHkoKHZvaWRwZiljb3B5LCAodm9pZHBmKXN0YXRlLCBzaXplb2Yoc3RydWN0IGluZmxhdGVfc3RhdGUpKTsKICAgICBpZiAoc3RhdGUtPmxlbmNvZGUgPj0gc3RhdGUtPmNvZGVzICYmCiAgICAgICAgIHN0YXRlLT5sZW5jb2RlIDw9IHN0YXRlLT5jb2RlcyArIEVOT1VHSCAtIDEpIHsKICAgICAgICAgY29weS0+bGVuY29kZSA9IGNvcHktPmNvZGVzICsgKHN0YXRlLT5sZW5jb2RlIC0gc3RhdGUtPmNvZGVzKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi9pbmZ0cmVlcy5jIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKaW5kZXggMTFlOWM1Mi4uNDRkODljZiAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKKysrIGIvTW9kdWxlcy96bGliL2luZnRyZWVzLmMKQEAgLTEsNSArMSw1IEBACiAvKiBpbmZ0cmVlcy5jIC0tIGdlbmVyYXRlIEh1ZmZtYW4gdHJlZXMgZm9yIGVmZmljaWVudCBkZWNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgTWFyayBBZGxlcgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgTWFyayBBZGxlcgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIE1BWEJJVFMgMTUKIAogY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgaW5mbGF0ZSAxLjIuNSBDb3B5cmlnaHQgMTk5NS0yMDEwIE1hcmsgQWRsZXIgIjsKKyAgICIgaW5mbGF0ZSAxLjIuOCBDb3B5cmlnaHQgMTk5NS0yMDEzIE1hcmsgQWRsZXIgIjsKIC8qCiAgIElmIHlvdSB1c2UgdGhlIHpsaWIgbGlicmFyeSBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGlzIHdlbGNvbWUKICAgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgeW91ciBwcm9kdWN0LiBJZiBmb3Igc29tZSByZWFzb24geW91IGNhbm5vdApAQCAtNjIsNyArNjIsNyBAQAogICAgICAgICAzNSwgNDMsIDUxLCA1OSwgNjcsIDgzLCA5OSwgMTE1LCAxMzEsIDE2MywgMTk1LCAyMjcsIDI1OCwgMCwgMH07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGxleHRbMzFdID0geyAvKiBMZW5ndGggY29kZXMgMjU3Li4yODUgZXh0cmEgKi8KICAgICAgICAgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNywgMTcsIDE3LCAxNywgMTgsIDE4LCAxOCwgMTgsCi0gICAgICAgIDE5LCAxOSwgMTksIDE5LCAyMCwgMjAsIDIwLCAyMCwgMjEsIDIxLCAyMSwgMjEsIDE2LCA3MywgMTk1fTsKKyAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDcyLCA3OH07CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGRiYXNlWzMyXSA9IHsgLyogRGlzdGFuY2UgY29kZXMgMC4uMjkgYmFzZSAqLwogICAgICAgICAxLCAyLCAzLCA0LCA1LCA3LCA5LCAxMywgMTcsIDI1LCAzMywgNDksIDY1LCA5NywgMTI5LCAxOTMsCiAgICAgICAgIDI1NywgMzg1LCA1MTMsIDc2OSwgMTAyNSwgMTUzNywgMjA0OSwgMzA3MywgNDA5NywgNjE0NSwKQEAgLTIwOCw4ICsyMDgsOCBAQAogICAgIG1hc2sgPSB1c2VkIC0gMTsgICAgICAgICAgICAvKiBtYXNrIGZvciBjb21wYXJpbmcgbG93ICovCiAKICAgICAvKiBjaGVjayBhdmFpbGFibGUgdGFibGUgc3BhY2UgKi8KLSAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID49IEVOT1VHSF9MRU5TKSB8fAotICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCisgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+IEVOT1VHSF9MRU5TKSB8fAorICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID4gRU5PVUdIX0RJU1RTKSkKICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAvKiBwcm9jZXNzIGFsbCBjb2RlcyBhbmQgbWFrZSB0YWJsZSBlbnRyaWVzICovCkBAIC0yNzcsOCArMjc3LDggQEAKIAogICAgICAgICAgICAgLyogY2hlY2sgZm9yIGVub3VnaCBzcGFjZSAqLwogICAgICAgICAgICAgdXNlZCArPSAxVSA8PCBjdXJyOwotICAgICAgICAgICAgaWYgKCh0eXBlID09IExFTlMgJiYgdXNlZCA+PSBFTk9VR0hfTEVOUykgfHwKLSAgICAgICAgICAgICAgICAodHlwZSA9PSBESVNUUyAmJiB1c2VkID49IEVOT1VHSF9ESVNUUykpCisgICAgICAgICAgICBpZiAoKHR5cGUgPT0gTEVOUyAmJiB1c2VkID4gRU5PVUdIX0xFTlMpIHx8CisgICAgICAgICAgICAgICAgKHR5cGUgPT0gRElTVFMgJiYgdXNlZCA+IEVOT1VHSF9ESVNUUykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAKICAgICAgICAgICAgIC8qIHBvaW50IGVudHJ5IGluIHJvb3QgdGFibGUgdG8gc3ViLXRhYmxlICovCkBAIC0yODksMzggKzI4OSwxNCBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgLyoKLSAgICAgICBGaWxsIGluIHJlc3Qgb2YgdGFibGUgZm9yIGluY29tcGxldGUgY29kZXMuICBUaGlzIGxvb3AgaXMgc2ltaWxhciB0byB0aGUKLSAgICAgICBsb29wIGFib3ZlIGluIGluY3JlbWVudGluZyBodWZmIGZvciB0YWJsZSBpbmRpY2VzLiAgSXQgaXMgYXNzdW1lZCB0aGF0Ci0gICAgICAgbGVuIGlzIGVxdWFsIHRvIGN1cnIgKyBkcm9wLCBzbyB0aGVyZSBpcyBubyBsb29wIG5lZWRlZCB0byBpbmNyZW1lbnQKLSAgICAgICB0aHJvdWdoIGhpZ2ggaW5kZXggYml0cy4gIFdoZW4gdGhlIGN1cnJlbnQgc3ViLXRhYmxlIGlzIGZpbGxlZCwgdGhlIGxvb3AKLSAgICAgICBkcm9wcyBiYWNrIHRvIHRoZSByb290IHRhYmxlIHRvIGZpbGwgaW4gYW55IHJlbWFpbmluZyBlbnRyaWVzIHRoZXJlLgotICAgICAqLwotICAgIGhlcmUub3AgPSAodW5zaWduZWQgY2hhcik2NDsgICAgICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLwotICAgIGhlcmUuYml0cyA9ICh1bnNpZ25lZCBjaGFyKShsZW4gLSBkcm9wKTsKLSAgICBoZXJlLnZhbCA9ICh1bnNpZ25lZCBzaG9ydCkwOwotICAgIHdoaWxlIChodWZmICE9IDApIHsKLSAgICAgICAgLyogd2hlbiBkb25lIHdpdGggc3ViLXRhYmxlLCBkcm9wIGJhY2sgdG8gcm9vdCB0YWJsZSAqLwotICAgICAgICBpZiAoZHJvcCAhPSAwICYmIChodWZmICYgbWFzaykgIT0gbG93KSB7Ci0gICAgICAgICAgICBkcm9wID0gMDsKLSAgICAgICAgICAgIGxlbiA9IHJvb3Q7Ci0gICAgICAgICAgICBuZXh0ID0gKnRhYmxlOwotICAgICAgICAgICAgaGVyZS5iaXRzID0gKHVuc2lnbmVkIGNoYXIpbGVuOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogcHV0IGludmFsaWQgY29kZSBtYXJrZXIgaW4gdGFibGUgKi8KLSAgICAgICAgbmV4dFtodWZmID4+IGRyb3BdID0gaGVyZTsKLQotICAgICAgICAvKiBiYWNrd2FyZHMgaW5jcmVtZW50IHRoZSBsZW4tYml0IGNvZGUgaHVmZiAqLwotICAgICAgICBpbmNyID0gMVUgPDwgKGxlbiAtIDEpOwotICAgICAgICB3aGlsZSAoaHVmZiAmIGluY3IpCi0gICAgICAgICAgICBpbmNyID4+PSAxOwotICAgICAgICBpZiAoaW5jciAhPSAwKSB7Ci0gICAgICAgICAgICBodWZmICY9IGluY3IgLSAxOwotICAgICAgICAgICAgaHVmZiArPSBpbmNyOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGh1ZmYgPSAwOworICAgIC8qIGZpbGwgaW4gcmVtYWluaW5nIHRhYmxlIGVudHJ5IGlmIGNvZGUgaXMgaW5jb21wbGV0ZSAoZ3VhcmFudGVlZCB0byBoYXZlCisgICAgICAgYXQgbW9zdCBvbmUgcmVtYWluaW5nIGVudHJ5LCBzaW5jZSBpZiB0aGUgY29kZSBpcyBpbmNvbXBsZXRlLCB0aGUKKyAgICAgICBtYXhpbXVtIGNvZGUgbGVuZ3RoIHRoYXQgd2FzIGFsbG93ZWQgdG8gZ2V0IHRoaXMgZmFyIGlzIG9uZSBiaXQpICovCisgICAgaWYgKGh1ZmYgIT0gMCkgeworICAgICAgICBoZXJlLm9wID0gKHVuc2lnbmVkIGNoYXIpNjQ7ICAgICAgICAgICAgLyogaW52YWxpZCBjb2RlIG1hcmtlciAqLworICAgICAgICBoZXJlLmJpdHMgPSAodW5zaWduZWQgY2hhcikobGVuIC0gZHJvcCk7CisgICAgICAgIGhlcmUudmFsID0gKHVuc2lnbmVkIHNob3J0KTA7CisgICAgICAgIG5leHRbaHVmZl0gPSBoZXJlOwogICAgIH0KIAogICAgIC8qIHNldCByZXR1cm4gcGFyYW1ldGVycyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL2luZnRyZWVzLmggYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaAppbmRleCAyNDIzMGM1Li5iYWE1M2EwIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaAorKysgYi9Nb2R1bGVzL3psaWIvaW5mdHJlZXMuaApAQCAtNDEsNyArNDEsNyBAQAogICAgZXhhbXBsZXMvZW5vdWdoLmMgZm91bmQgaW4gdGhlIHpsaWIgZGlzdHJpYnR1dGlvbi4gIFRoZSBhcmd1bWVudHMgdG8gdGhhdAogICAgcHJvZ3JhbSBhcmUgdGhlIG51bWJlciBvZiBzeW1ib2xzLCB0aGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUsIGFuZCB0aGUKICAgIG1heGltdW0gYml0IGxlbmd0aCBvZiBhIGNvZGUuICAiZW5vdWdoIDI4NiA5IDE1IiBmb3IgbGl0ZXJhbC9sZW5ndGggY29kZXMKLSAgIHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0dXJucyA1OTIuCisgICByZXR1cm5zIHJldHVybnMgODUyLCBhbmQgImVub3VnaCAzMCA2IDE1IiBmb3IgZGlzdGFuY2UgY29kZXMgcmV0dXJucyA1OTIuCiAgICBUaGUgaW5pdGlhbCByb290IHRhYmxlIHNpemUgKDkgb3IgNikgaXMgZm91bmQgaW4gdGhlIGZpZnRoIGFyZ3VtZW50IG9mIHRoZQogICAgaW5mbGF0ZV90YWJsZSgpIGNhbGxzIGluIGluZmxhdGUuYyBhbmQgaW5mYmFjay5jLiAgSWYgdGhlIHJvb3QgdGFibGUgc2l6ZSBpcwogICAgY2hhbmdlZCwgdGhlbiB0aGVzZSBtYXhpbXVtIHNpemVzIHdvdWxkIGJlIG5lZWQgdG8gYmUgcmVjYWxjdWxhdGVkIGFuZApkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbSBiL01vZHVsZXMvemxpYi9tYWtlX3Ztcy5jb20KaW5kZXggNjU3NjQ5MC4uNjVlOWQwYyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL21ha2Vfdm1zLmNvbQorKysgYi9Nb2R1bGVzL3psaWIvbWFrZV92bXMuY29tCkBAIC0zLDcgKzMsNyBAQAogJCEKICQhIEluIGNhc2Ugb2YgcHJvYmxlbXMgd2l0aCB0aGUgaW5zdGFsbCB5b3UgbWlnaHQgY29udGFjdCBtZSBhdAogJCEgemluc2VyQHppbnNlci5uby1pcC5pbmZvKHByZWZlcnJlZCkgb3IKLSQhIHppbnNlckBzeXNkZXYuZGV1dHNjaGUtYm9lcnNlLmNvbSAod29yaykKKyQhIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tICh3b3JrKQogJCEKICQhIE1ha2UgcHJvY2VkdXJlIGhpc3RvcnkgZm9yIFpsaWIKICQhCkBAIC0xNCw5ICsxNCwxNiBAQAogJCEgMC4wMyAyMDA5MTIyNCBBZGQgc3VwcG9ydCBmb3IgbGFyZ2UgZmlsZSBjaGVjawogJCEgMC4wNCAyMDEwMDExMCBBZGQgbmV3IGd6Y2xvc2UsIGd6bGliLCBnenJlYWQsIGd6d3JpdGUKICQhIDAuMDUgMjAxMDAyMjEgRXhjaGFuZ2UgemxpYmRlZnMuaCBieSB6Y29uZi5oLmluCiskISAwLjA2IDIwMTIwMTExIEZpeCBtaXNzaW5nIGFtaXNzX2VyciwgdXBkYXRlIHpjb25mX2guaW4sIGZpeCBuZXcgZXhtcGxlcworJCEgICAgICAgICAgICAgICBzdWJkaXIgcGF0aCwgdXBkYXRlIG1vZHVsZSBzZWFyY2ggaW4gbWFrZWZpbGUuaW4KKyQhIDAuMDcgMjAxMjAxMTUgVHJpZ2dlcmVkIGJ5IHdvcmsgZG9uZSBieSBBbGV4ZXkgQ2h1cGFoaW4gY29tcGxldGx5IHJlZGVzaWduZWQKKyQhICAgICAgICAgICAgICAgc2hhcmVkIGltYWdlIGNyZWF0aW9uCiskISAwLjA4IDIwMTIwMjE5IE1ha2UgaXQgd29yayBvbiBWQVggYWdhaW4sIHByZS1sb2FkIG1pc3Npbmcgc3ltYm9scyB0byBzaGFyZWQKKyQhICAgICAgICAgICAgICAgaW1hZ2UKKyQhIDAuMDkgMjAxMjAzMDUgU01TLiAgUDEgc2V0cyBidWlsZGVyICgiTU1LIiwgIk1NUyIsICIgIiAoYnVpbHQtaW4pKS4KKyQhICAgICAgICAgICAgICAgIiIgLT4gYXV0b21hdGljLCBwcmVmZXJlbmNlOiBNTUssIE1NUywgYnVpbHQtaW4uCiAkIQogJCBvbiBlcnJvciB0aGVuIGdvdG8gZXJyX2V4aXQKLSQgc2V0IHByb2MvcGFyc2U9ZXh0CiAkIQogJCB0cnVlICA9IDEKICQgZmFsc2UgPSAwCkBAIC0zMiwzMSArMzksNDMgQEAKICQhCiAkISBTZXR1cCB2YXJpYWJsZXMgaG9sZGluZyAiY29uZmlnIiBpbmZvcm1hdGlvbgogJCEKLSQgTWFrZSAgICA9ICIiCiskIE1ha2UgICAgPSAiJydwMSciCiAkIG5hbWUgICAgID0gIlpsaWIiCiAkIHZlcnNpb24gID0gIj8uPy4/IgogJCB2X3N0cmluZyA9ICJaTElCX1ZFUlNJT04iCiAkIHZfZmlsZSAgID0gInpsaWIuaCIKLSQgY2NvcHQgICA9ICIiCiskIGNjb3B0ICAgPSAiL2luY2x1ZGUgPSBbXSIKICQgbG9wdHMgICA9ICIiCiAkIGRuc3JsICAgPSAiIgotJCBhY29uZl9pbl9maWxlID0gInpjb25mLmguaW4jemNvbmYuaF9pbiIKKyQgYWNvbmZfaW5fZmlsZSA9ICJ6Y29uZi5oLmluI3pjb25mLmhfaW4jemNvbmZfaC5pbiIKICQgY29uZl9jaGVja19zdHJpbmcgPSAiIgogJCBsaW5rb25seSA9IGZhbHNlCiAkIG9wdGZpbGUgID0gbmFtZSArICIub3B0IgorJCBtYXBmaWxlICA9IG5hbWUgKyAiLm1hcCIKICQgbGliZGVmcyAgPSAiIgorJCB2YXggICAgICA9IGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjEwMjQKICQgYXhwICAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS4xMDI0IC5hbmQuIGYkZ2V0c3lpKCJIV19NT0RFTCIpLmx0LjQwOTYKKyQgaWE2NCAgICAgPSBmJGdldHN5aSgiSFdfTU9ERUwiKS5nZS40MDk2CiAkIQotJCB3aG9hbWkgPSBmJHBhcnNlKGYkZW52aW9ybm1lbnQoIlByb2NlZHVyZSIpLCwsLCJOT19DT05DRUFMIikKKyQhIDIwMTItMDMtMDUgU01TLgorJCEgV2h5IGlzIHRoaXMgbmVlZGVkPyAgQW5kIGlmIGl0IGlzIG5lZWRlZCwgd2h5IG5vdCBzaW1wbHkgIi5ub3QuIHZheCI/CiskIQorJCEhISBpZiBheHAgLm9yLiBpYTY0IHRoZW4gIHNldCBwcm9jL3BhcnNlPWV4dGVuZGVkCiskIQorJCB3aG9hbWkgPSBmJHBhcnNlKGYkZW52aXJvbm1lbnQoIlByb2NlZHVyZSIpLCwsLCJOT19DT05DRUFMIikKICQgbXlkZWYgID0gRiRwYXJzZSh3aG9hbWksLCwiREVWSUNFIikKICQgbXlkaXIgID0gZiRwYXJzZSh3aG9hbWksLCwiRElSRUNUT1JZIikgLSAiXVsiCiAkIG15cHJvYyA9IGYkcGFyc2Uod2hvYW1pLCwsIk5hbWUiKSArIGYkcGFyc2Uod2hvYW1pLCwsInR5cGUiKQogJCEKICQhIENoZWNrIGZvciBNTUsvTU1TCiAkIQotJCBJZiBGJFNlYXJjaCAoIlN5cyRTeXN0ZW06TU1TLkVYRSIpIC5uZXMuICIiIFRoZW4gTWFrZSA9ICJNTVMiCi0kIElmIEYkVHlwZSAoTU1LKSAuZXFzLiAiU1RSSU5HIiBUaGVuIE1ha2UgPSAiTU1LIgotJCEKKyQgaWYgKE1ha2UgLmVxcy4gIiIpCiskIHRoZW4KKyQgICBJZiBGJFNlYXJjaCAoIlN5cyRTeXN0ZW06TU1TLkVYRSIpIC5uZXMuICIiIFRoZW4gTWFrZSA9ICJNTVMiCiskICAgSWYgRiRUeXBlIChNTUspIC5lcXMuICJTVFJJTkciIFRoZW4gTWFrZSA9ICJNTUsiCiskIGVsc2UKKyQgICBNYWtlID0gZiRlZGl0KCBNYWtlLCAidHJpbSIpCiskIGVuZGlmCiAkIQogJCBnb3N1YiBmaW5kX3ZlcnNpb24KICQhCkBAIC02OSw2ICs4OCw3IEBACiAkIQogJCBnb3N1YiBjaGVja19jb21waWxlcgogJCBjbG9zZSB0b3B0CiskIGNsb3NlIG9wdGYKICQhCiAkIGlmIGl0c19kZWNjCiAkIHRoZW4KQEAgLTgzLDYgKzEwMywxNSBAQAogJCAgICAgICBkZWZpbmUgc3lzIGRlY2MkbGlicmFyeV9pbmNsdWRlOgogJCAgICAgZW5kaWYKICQgICBlbmRpZgorJCEKKyQhIDIwMTItMDMtMDUgU01TLgorJCEgV2h5IC9OQU1FUyA9IEFTX0lTPyAgV2h5IG5vdCBzaW1wbHkgIi5ub3QuIHZheCI/ICBBbmQgd2h5IG5vdCBvbiBWQVg/CiskIQorJCAgIGlmIGF4cCAub3IuIGlhNjQKKyQgICB0aGVuCiskICAgICAgIGNjb3B0ID0gY2NvcHQgKyAiL25hbWU9YXNfaXMvb3B0PShpbmxpbmU9c3BlZWQpIgorJCAgICAgICBzX2Nhc2UgPSB0cnVlCiskICAgZW5kaWYKICQgZW5kaWYKICQgaWYgaXRzX3ZheGMgLm9yLiBpdHNfZ251YwogJCB0aGVuCkBAIC0xMjIsMTUgKzE1MSwyMCBAQAogJCBlbmRpZgogJCBnb3RvIGFjb25mX2xvb3AKICRBQ09ORl9FWElUOgorJCB3cml0ZSBhY29uZiAiIgorJCB3cml0ZSBhY29uZiAiLyogVk1TIHNwZWNpZmljcyBhZGRlZCBieSBtYWtlX3Ztcy5jb206ICovIgogJCB3cml0ZSBhY29uZiAiI2RlZmluZSBWTVMgMSIKICQgd3JpdGUgYWNvbmYgIiNpbmNsdWRlIDx1bmlzdGQuaD4iCiAkIHdyaXRlIGFjb25mICIjaW5jbHVkZSA8dW5peGlvLmg+IgogJCB3cml0ZSBhY29uZiAiI2lmZGVmIF9MQVJHRUZJTEUiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIG9mZjY0X3QgX19vZmY2NF90IgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmb3BlbjY0IGZvcGVuIgotJCB3cml0ZSBhY29uZiAiI2RlZmluZSBmc2Vla282NCBmc2Vla28iCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGxzZWVrNjQgbHNlZWsiCi0kIHdyaXRlIGFjb25mICIjZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgb2ZmNjRfdCBfX29mZjY0X3QiCiskIHdyaXRlIGFjb25mICIjIGRlZmluZSBmb3BlbjY0IGZvcGVuIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgZnNlZWtvNjQgZnNlZWtvIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgbHNlZWs2NCBsc2VlayIKKyQgd3JpdGUgYWNvbmYgIiMgZGVmaW5lIGZ0ZWxsbzY0IGZ0ZWxsIgorJCB3cml0ZSBhY29uZiAiI2VuZGlmIgorJCB3cml0ZSBhY29uZiAiI2lmICFkZWZpbmVkKCBfX1ZBWCkgJiYgKF9fQ1JUTF9WRVIgPj0gNzAzMTIwMDApIgorJCB3cml0ZSBhY29uZiAiIyBkZWZpbmUgSEFWRV9WU05QUklOVEYiCiAkIHdyaXRlIGFjb25mICIjZW5kaWYiCiAkIGNsb3NlIGFjb25mX2luCiAkIGNsb3NlIGFjb25mCkBAIC0xMzksOCArMTczLDkgQEAKICQhCiAkIHdyaXRlIHN5cyRvdXRwdXQgIkNvbXBpbGluZyBabGliIHNvdXJjZXMgLi4uIgogJCBpZiBtYWtlLmVxcy4iIgotJCAgdGhlbgotJCAgIGRlbGUgZXhhbXBsZS5vYmo7KixtaW5pZ3ppcC5vYmo7KgorJCB0aGVuCiskICAgaWYgKGYkc2VhcmNoKCAiZXhhbXBsZS5vYmo7KiIpIC5uZXMuICIiKSB0aGVuIGRlbGV0ZSBleGFtcGxlLm9iajsqCiskICAgaWYgKGYkc2VhcmNoKCAibWluaWd6aXAub2JqOyoiKSAubmVzLiAiIikgdGhlbiBkZWxldGUgbWluaWd6aXAub2JqOyoKICQgICBDQUxMIE1BS0UgYWRsZXIzMi5PQkogIkNDICcnQ0NPUFQnIGFkbGVyMzIiIC0KICAgICAgICAgICAgICAgICBhZGxlcjMyLmMgemxpYi5oIHpjb25mLmgKICQgICBDQUxMIE1BS0UgY29tcHJlc3MuT0JKICJDQyAnJ0NDT1BUJyBjb21wcmVzcyIgLQpAQCAtMTc0LDQxICsyMDksMzQgQEAKICQgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBabGliIC4uLiIKICQgICBDQUxMIE1BS0UgbGliei5PTEIgImxpYi9jcmVhIGxpYnoub2xiICoub2JqIiAqLk9CSgogJCAgIHdyaXRlIHN5cyRvdXRwdXQgIkJ1aWxkaW5nIGV4YW1wbGUuLi4iCi0kICAgQ0FMTCBNQUtFIGV4YW1wbGUuT0JKICJDQyAnJ0NDT1BUJyBleGFtcGxlIiAtCi0gICAgICAgICAgICAgICAgZXhhbXBsZS5jIHpsaWIuaCB6Y29uZi5oCiskICAgQ0FMTCBNQUtFIGV4YW1wbGUuT0JKICJDQyAnJ0NDT1BUJyBbLnRlc3RdZXhhbXBsZSIgLQorICAgICAgICAgICAgICAgIFsudGVzdF1leGFtcGxlLmMgemxpYi5oIHpjb25mLmgKICQgICBjYWxsIG1ha2UgZXhhbXBsZS5leGUgIkxJTksgZXhhbXBsZSxsaWJ6Lm9sYi9saWIiIGV4YW1wbGUub2JqIGxpYnoub2xiCi0kICAgaWYgZiRzZWFyY2goIngxMXZtczp4dm1zdXRpbHMub2xiIikgLm5lcy4gIiIKLSQgICB0aGVuCi0kICAgICB3cml0ZSBzeXMkb3V0cHV0ICJCdWlsZGluZyBtaW5pZ3ppcC4uLiIKLSQgICAgIENBTEwgTUFLRSBtaW5pZ3ppcC5PQkogIkNDICcnQ0NPUFQnIG1pbmlnemlwIiAtCi0gICAgICAgICAgICAgICAgbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAotJCAgICAgY2FsbCBtYWtlIG1pbmlnemlwLmV4ZSAtCi0gICAgICAgICAgICAgICAgIkxJTksgbWluaWd6aXAsbGliei5vbGIvbGliLHgxMXZtczp4dm1zdXRpbHMub2xiL2xpYiIgLQotICAgICAgICAgICAgICAgIG1pbmlnemlwLm9iaiBsaWJ6Lm9sYgotJCAgIGVuZGlmCi0kICBlbHNlCiskICAgd3JpdGUgc3lzJG91dHB1dCAiQnVpbGRpbmcgbWluaWd6aXAuLi4iCiskICAgQ0FMTCBNQUtFIG1pbmlnemlwLk9CSiAiQ0MgJydDQ09QVCcgWy50ZXN0XW1pbmlnemlwIiAtCisgICAgICAgICAgICAgIFsudGVzdF1taW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCiskICAgY2FsbCBtYWtlIG1pbmlnemlwLmV4ZSAtCisgICAgICAgICAgICAgICJMSU5LIG1pbmlnemlwLGxpYnoub2xiL2xpYiIgLQorICAgICAgICAgICAgICBtaW5pZ3ppcC5vYmogbGliei5vbGIKKyQgZWxzZQogJCAgIGdvc3ViIGNyZWFfbW1zCiAkICAgd3JpdGUgc3lzJG91dHB1dCAiTWFrZSAnJ25hbWUnICcndmVyc2lvbicgd2l0aCAnJ01ha2UnICIKICQgICAnbWFrZScKLSQgIGVuZGlmCi0kIQotJCEgQWxwaGEgZ2V0cyBhIHNoYXJlYWJsZSBpbWFnZQotJCEKLSQgSWYgYXhwCi0kIFRoZW4KLSQgICBnb3N1YiBjcmVhX29saXN0Ci0kICAgd3JpdGUgc3lzJG91dHB1dCAiQ3JlYXRpbmcgbGlienNoci5leGUiCi0kICAgY2FsbCBhbmFsX29ial9heHAgbW9kdWxlcy5vcHQgX2xpbmsub3B0Ci0kICAgaWYgc19jYXNlCi0kICAgdGhlbgotJCAgICAgIG9wZW4vYXBwZW5kIG9wdGYgbW9kdWxlcy5vcHQKLSQgICAgICB3cml0ZSBvcHRmICJjYXNlX3NlbnNpdGl2ZT1ZRVMiCi0kICAgICAgY2xvc2Ugb3B0ZgotJCAgIGVuZGlmCi0kICAgTElOS18nbG9wdHMnL1NIQVJFPWxpYnpzaHIuZXhlIG1vZHVsZXMub3B0L29wdCxfbGluay5vcHQvb3B0CiAkIGVuZGlmCiskIQorJCEgQ3JlYXRlIHNoYXJlYWJsZSBpbWFnZQorJCEKKyQgZ29zdWIgY3JlYV9vbGlzdAorJCB3cml0ZSBzeXMkb3V0cHV0ICJDcmVhdGluZyBsaWJ6c2hyLmV4ZSIKKyQgY2FsbCBtYXBfMl9zaG9wdCAnbWFwZmlsZScgJ29wdGZpbGUnCiskIExJTktfJ2xvcHRzJy9TSEFSRT1saWJ6c2hyLmV4ZSBtb2R1bGVzLm9wdC9vcHQsJ29wdGZpbGUnL29wdAogJCB3cml0ZSBzeXMkb3V0cHV0ICJabGliIGJ1aWxkIGNvbXBsZXRlZCIKKyQgZGVsZXRlL25vbG9nIHRtcC5vcHQ7KgogJCBleGl0CiskQU1JU1NfRVJSOgorJCB3cml0ZSBzeXMkb3V0cHV0ICJObyBzb3VyY2UgZm9yIGNvbmZpZy5oaW4gZm91bmQuIgorJCB3cml0ZSBzeXMkb3V0cHV0ICJUcmllZCBhbnkgb2YgJydhY29uZl9pbl9maWxlJyIKKyQgZ290byBlcnJfZXhpdAogJENDX0VSUjoKICQgd3JpdGUgc3lzJG91dHB1dCAiQyBjb21waWxlciByZXF1aXJlZCB0byBidWlsZCAnJ25hbWUnIgogJCBnb3RvIGVycl9leGl0CkBAIC0yMTYsNyArMjQ0LDYgQEAKICQgc2V0IG1lc3NhZ2UvZmFjaWwvaWRlbnQvc2V2ZXIvdGV4dAogJCBjbG9zZS9ub2xvZyBvcHRmCiAkIGNsb3NlL25vbG9nIHRvcHQKLSQgY2xvc2Uvbm9sb2cgY29uZl9oaW4KICQgY2xvc2Uvbm9sb2cgYWNvbmZfaW4KICQgY2xvc2Uvbm9sb2cgYWNvbmYKICQgY2xvc2Uvbm9sb2cgb3V0CkBAIC0zOTcsNyArNDI0LDcgQEAKICQgZGVjawogIyBkZXNjcmlwLm1tczogTU1TIGRlc2NyaXB0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nIHpsaWIgb24gVk1TCiAjIHdyaXR0ZW4gYnkgTWFydGluIFAuSi4gWmluc2VyCi0jIDx6aW5zZXJAemluc2VyLm5vLWlwLmluZm8gb3Igemluc2VyQHN5c2Rldi5kZXV0c2NoZS1ib2Vyc2UuY29tPgorIyA8emluc2VyQHppbnNlci5uby1pcC5pbmZvIG9yIG1hcnRpbi56aW5zZXJAZXVyZXhjaGFuZ2UuY29tPgogCiBPQkpTID0gYWRsZXIzMi5vYmosIGNvbXByZXNzLm9iaiwgY3JjMzIub2JqLCBnemNsb3NlLm9iaiwgZ3psaWIub2JqXAogICAgICAgIGd6cmVhZC5vYmosIGd6d3JpdGUub2JqLCB1bmNvbXByLm9iaiwgaW5mYmFjay5vYmpcCkBAIC00MDcsMTAgKzQzNCw5IEBACiAkIGVvZAogJCB3cml0ZSBvdXQgIkNGTEFHUz0iLCBjY29wdAogJCB3cml0ZSBvdXQgIkxPUFRTPSIsIGxvcHRzCiskIHdyaXRlIG91dCAiYWxsIDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlIGxpYnoub2xiIgogJCBjb3B5IHN5cyRpbnB1dDogb3V0CiAkIGRlY2sKLQotYWxsIDogZXhhbXBsZS5leGUgbWluaWd6aXAuZXhlIGxpYnoub2xiCiAgICAgICAgIEAgd3JpdGUgc3lzJG91dHB1dCAiIEV4YW1wbGUgYXBwbGljYXRpb25zIGF2YWlsYWJsZSIKIAogbGliei5vbGIgOiBsaWJ6Lm9sYigkKE9CSlMpKQpAQCAtNDIwLDcgKzQ0Niw3IEBACiAgICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgZXhhbXBsZSxsaWJ6Lm9sYi9saWIKIAogbWluaWd6aXAuZXhlIDogbWluaWd6aXAub2JqIGxpYnoub2xiCi0gICAgICAgICAgICAgIGxpbmsgJChMT1BUUykgbWluaWd6aXAsbGliei5vbGIvbGliLHgxMXZtczp4dm1zdXRpbHMub2xiL2xpYgorICAgICAgICAgICAgICBsaW5rICQoTE9QVFMpIG1pbmlnemlwLGxpYnoub2xiL2xpYgogCiBjbGVhbiA6CiAJZGVsZXRlICoub2JqOyosbGliei5vbGI7KiwqLm9wdDsqLCouZXhlOyoKQEAgLTQzMSw3ICs0NTcsNyBAQAogY29tcHJlc3Mub2JqIDogY29tcHJlc3MuYyB6bGliLmggemNvbmYuaAogY3JjMzIub2JqICAgIDogY3JjMzIuYyB6dXRpbC5oIHpsaWIuaCB6Y29uZi5oCiBkZWZsYXRlLm9iaiAgOiBkZWZsYXRlLmMgZGVmbGF0ZS5oIHp1dGlsLmggemxpYi5oIHpjb25mLmgKLWV4YW1wbGUub2JqICA6IGV4YW1wbGUuYyB6bGliLmggemNvbmYuaAorZXhhbXBsZS5vYmogIDogWy50ZXN0XWV4YW1wbGUuYyB6bGliLmggemNvbmYuaAogZ3pjbG9zZS5vYmogIDogZ3pjbG9zZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGd6bGliLm9iaiAgICA6IGd6bGliLmMgenV0aWwuaCB6bGliLmggemNvbmYuaAogZ3pyZWFkLm9iaiAgIDogZ3pyZWFkLmMgenV0aWwuaCB6bGliLmggemNvbmYuaApAQCAtNDM5LDcgKzQ2NSw3IEBACiBpbmZmYXN0Lm9iaiAgOiBpbmZmYXN0LmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oIGluZmZhc3QuaAogaW5mbGF0ZS5vYmogIDogaW5mbGF0ZS5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKIGluZnRyZWVzLm9iaiA6IGluZnRyZWVzLmMgenV0aWwuaCB6bGliLmggemNvbmYuaCBpbmZ0cmVlcy5oCi1taW5pZ3ppcC5vYmogOiBtaW5pZ3ppcC5jIHpsaWIuaCB6Y29uZi5oCittaW5pZ3ppcC5vYmogOiBbLnRlc3RdbWluaWd6aXAuYyB6bGliLmggemNvbmYuaAogdHJlZXMub2JqICAgIDogdHJlZXMuYyBkZWZsYXRlLmggenV0aWwuaCB6bGliLmggemNvbmYuaAogdW5jb21wci5vYmogIDogdW5jb21wci5jIHpsaWIuaCB6Y29uZi5oCiB6dXRpbC5vYmogICAgOiB6dXRpbC5jIHp1dGlsLmggemxpYi5oIHpjb25mLmgKQEAgLTQ1NSwxMyArNDgxLDE4IEBACiAkQ1JFQV9PTElTVDoKICQgb3Blbi9yZWFkIG1pbiBtYWtlZmlsZS5pbgogJCBvcGVuL3dyaXRlIG1vZCBtb2R1bGVzLm9wdAotJCBzcmNfY2hlY2sgPSAiT0JKQyA9IgorJCBzcmNfY2hlY2tfbGlzdCA9ICJPQkpaID0jT0JKRyA9IgogJE1STE9PUDoKICQgcmVhZC9lbmQ9bXJkb25lIG1pbiByZWMKLSQgaWYgKGYkZXh0cmFjdCgwLDYscmVjKSAubmVzLiBzcmNfY2hlY2spIHRoZW4gZ290byBtcmxvb3AKKyQgaSA9IDAKKyRTUkNfQ0hFQ0tfTE9PUDoKKyQgc3JjX2NoZWNrID0gZiRlbGVtZW50KGksICIjIiwgc3JjX2NoZWNrX2xpc3QpCiskIGkgPSBpKzEKKyQgaWYgc3JjX2NoZWNrIC5lcXMuICIjIiB0aGVuIGdvdG8gbXJsb29wCiskIGlmIChmJGV4dHJhY3QoMCw2LHJlYykgLm5lcy4gc3JjX2NoZWNrKSB0aGVuIGdvdG8gc3JjX2NoZWNrX2xvb3AKICQgcmVjID0gcmVjIC0gc3JjX2NoZWNrCiAkIGdvc3ViIGV4dHJhX2ZpbG5hbQotJCBpZiAoZiRlbGVtZW50KDEsIlwiLHJlYykgLmVxcy4gIlwiKSB0aGVuIGdvdG8gbXJkb25lCiskIGlmIChmJGVsZW1lbnQoMSwiXCIscmVjKSAuZXFzLiAiXCIpIHRoZW4gZ290byBtcmxvb3AKICRNUlNMT09QOgogJCByZWFkL2VuZD1tcmRvbmUgbWluIHJlYwogJCBnb3N1YiBleHRyYV9maWxuYW0KQEAgLTY3MiwxMjQgKzcwMyw2IEBACiAkIHJldHVybgogJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICQhCi0kISBBbmFseXplIE9iamVjdCBmaWxlcyBmb3IgT3BlblZNUyBBWFAgdG8gZXh0cmFjdCBQcm9jZWR1cmUgYW5kIERhdGEKLSQhIGluZm9ybWF0aW9uIHRvIGJ1aWxkIGEgc3ltYm9sIHZlY3RvciBmb3IgYSBzaGFyZWFibGUgaW1hZ2UKLSQhIEFsbCB0aGUgImJyYWlucyIgb2YgdGhpcyBsb2dpYyB3YXMgc3VnZ2VzdGVkIGJ5IEhhcnRtdXQgQmVja2VyCi0kISAoSGFydG11dC5CZWNrZXJAY29tcGFxLmNvbSkuIEFsbCB0aGUgYnVncyB3ZXJlIGludHJvZHVjZWQgYnkgbWUKLSQhICh6aW5zZXJAemluc2VyLm5vLWlwLmluZm8pLCBzbyBpZiB5b3UgZG8gaGF2ZSBwcm9ibGVtIHJlcG9ydHMgcGxlYXNlIGRvIG5vdAotJCEgYm90aGVyIEhhcnRtdXQvSFAsIGJ1dCBnZXQgaW4gdG91Y2ggd2l0aCBtZQotJCEKLSQhIFZlcnNpb24gaGlzdG9yeQotJCEgMC4wMSAyMDA0MDQwNiBTa2lwIG92ZXIgc2hhcmVhYmxlIGltYWdlcyBpbiBvcHRpb24gZmlsZQotJCEgMC4wMiAyMDA0MTEwOSBGaXggb3B0aW9uIGZpbGUgZm9yIHNoYXJlYWJsZSBpbWFnZXMgd2l0aCBjYXNlX3NlbnNpdGl2ZT1ZRVMKLSQhIDAuMDMgMjAwNTAxMDcgU2tpcCBvdmVyIElkZW50aWZpY2F0aW9uIGxhYmVscyBpbiBvcHRpb24gZmlsZQotJCEgMC4wNCAyMDA2MDExNyBBZGQgdXBwZXJjYXNlIGFsaWFzIHRvIGNvZGUgY29tcGlsZWQgd2l0aCAvbmFtZT1hc19pcwotJCEKLSQgQU5BTF9PQkpfQVhQOiBTdWJyb3V0aW5lCi0kIFYgPSAnRiRWZXJpZnkoMCkKLSQgU0FZIDo9ICJXUklURV8gU1lTJE9VVFBVVCIKLSQKLSQgSUYgRiRTRUFSQ0goIicnUDEnIikgLkVRUy4gIiIKLSQgVEhFTgotJCAgICBTQVkgIkFOQUxfT0JKX0FYUC1FLU5PU1VDSEZJTEU6ICBFcnJvciwgaW5wdXRmaWxlICcncDEnIG5vdCBhdmFpbGFibGUiCi0kICAgIGdvdG8gZXhpdF9hYQotJCBFTkRJRgotJCBJRiAiJydQMiciIC5FUVMuICIiCi0kIFRIRU4KLSQgICAgU0FZICJBTkFMX09CSl9BWFA6ICBFcnJvciwgbm8gb3V0cHV0IGZpbGUgcHJvdmlkZWQiCi0kICAgIGdvdG8gZXhpdF9hYQotJCBFTkRJRgotJAotJCBvcGVuL3JlYWQgaW4gJ3AxCi0kIGNyZWF0ZSBhLnRtcAotJCBvcGVuL2FwcGVuZCBhdG1wIGEudG1wCi0kIGxvb3A6Ci0kIHJlYWQvZW5kPWVuZF9sb29wIGluIGxpbmUKLSQgaWYgZiRsb2NhdGUoIi9TSEFSRSIsZiRlZGl0KGxpbmUsInVwY2FzZSIpKSAubHQuIGYkbGVuZ3RoKGxpbmUpCi0kIHRoZW4KLSQgICB3cml0ZSBzeXMkb3V0cHV0ICJBTkFMX1NLUF9TSFItaS1za2lwc2hhcmUsICcnbGluZSciCi0kICAgZ290byBsb29wCi0kIGVuZGlmCi0kIGlmIGYkbG9jYXRlKCJJREVOVElGSUNBVElPTj0iLGYkZWRpdChsaW5lLCJ1cGNhc2UiKSkgLmx0LiBmJGxlbmd0aChsaW5lKQotJCB0aGVuCi0kICAgd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9PQkpfQVhQLWktaWRlbnQ6IElkZW50aWZpY2F0aW9uICIsIC0KLSAgICAgICAgICAgICAgICAgICAgIGYkZWxlbWVudCgxLCI9IixsaW5lKQotJCAgIGdvdG8gbG9vcAotJCBlbmRpZgotJCBmPSBmJHNlYXJjaChsaW5lKQotJCBpZiBmIC5lcXMuICIiCi0kIHRoZW4KLSQJd3JpdGUgc3lzJG91dHB1dCAiQU5BTF9PQkpfQVhQLXctbm9zdWNoZmlsZSwgJydsaW5lJyIKLSQJZ290byBsb29wCi0kIGVuZGlmCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGRlZmluZS91c2VyIHN5cyRlcnJvciBubDoKLSQgYW5hbC9vYmovZ3NkICdmIC9vdXQ9eC50bXAKLSQgb3Blbi9yZWFkIHh0bXAgeC50bXAKLSQgWExPT1A6Ci0kIHJlYWQvZW5kPWVuZF94bG9vcCB4dG1wIHhsaW5lCi0kIHhsaW5lID0gZiRlZGl0KHhsaW5lLCJjb21wcmVzcyIpCi0kIHdyaXRlIGF0bXAgeGxpbmUKLSQgZ290byB4bG9vcAotJCBFTkRfWExPT1A6Ci0kIGNsb3NlIHh0bXAKLSQgZ290byBsb29wCi0kIGVuZF9sb29wOgotJCBjbG9zZSBpbgotJCBjbG9zZSBhdG1wCi0kIGlmIGYkc2VhcmNoKCJhLnRtcCIpIC5lcXMuICIiIC0KLQl0aGVuICQgZXhpdAotJCAhIGFsbCBnbG9iYWwgZGVmaW5pdGlvbnMKLSQgc2VhcmNoIGEudG1wICJzeW1ib2w6IiwiRUdTWSRWX0RFRiAxIiwiRUdTWSRWX05PUk0gMSIvb3V0PWIudG1wCi0kICEgYWxsIHByb2NlZHVyZXMKLSQgc2VhcmNoIGIudG1wICJFR1NZJFZfTk9STSAxIi93aW5kPSgwLDEpIC9vdXQ9Yy50bXAKLSQgc2VhcmNoIGMudG1wICJzeW1ib2w6Ii9vdXQ9ZC50bXAKLSQgZGVmaW5lL3VzZXIgc3lzJG91dHB1dCBubDoKLSQgZWRpdG8vZWR0L2NvbW1hbmQ9c3lzJGlucHV0IGQudG1wCi1zdWIvc3ltYm9sOiAiL3N5bWJvbF92ZWN0b3I9KC93aG9sZQotc3ViLyIvPVBST0NFRFVSRSkvd2hvbGUKLWV4aXQKLSQgISBhbGwgZGF0YQotJCBzZWFyY2ggYi50bXAgIkVHU1kkVl9ERUYgMSIvd2luZD0oMCwxKSAvb3V0PWUudG1wCi0kIHNlYXJjaCBlLnRtcCAic3ltYm9sOiIvb3V0PWYudG1wCi0kIGRlZmluZS91c2VyIHN5cyRvdXRwdXQgbmw6Ci0kIGVkaXRvL2VkdC9jb21tYW5kPXN5cyRpbnB1dCBmLnRtcAotc3ViL3N5bWJvbDogIi9zeW1ib2xfdmVjdG9yPSgvd2hvbGUKLXN1Yi8iLz1EQVRBKS93aG9sZQotZXhpdAotJCBzb3J0L25vZHVwbCBkLnRtcCxmLnRtcCBnLnRtcAotJCBvcGVuL3JlYWQgcmF3X3ZlY3RvciBnLnRtcAotJCBvcGVuL3dyaXRlIGNhc2VfdmVjdG9yICdwMicKLSQgUkFXTE9PUDoKLSQgcmVhZC9lbmQ9ZW5kX3Jhd2xvb3AgcmF3X3ZlY3RvciByYXdfZWxlbWVudAotJCB3cml0ZSBjYXNlX3ZlY3RvciByYXdfZWxlbWVudAotJCBpZiBmJGxvY2F0ZSgiPVBST0NFRFVSRSkiLHJhd19lbGVtZW50KSAubHQuIGYkbGVuZ3RoKHJhd19lbGVtZW50KQotJCB0aGVuCi0kICAgICBuYW1lID0gZiRlbGVtZW50KDEsIj0iLHJhd19lbGVtZW50KSAtICIoIgotJCAgICAgaWYgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpIC5uZXMuIG5hbWUgdGhlbiAtCi0gICAgICAgICAgd3JpdGUgY2FzZV92ZWN0b3IgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPVBST0NFRFVSRSkiLCAtCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBmJGVkaXQobmFtZSwiVVBDQVNFIiksIG5hbWUpCi0kIGVuZGlmCi0kIGlmIGYkbG9jYXRlKCI9REFUQSkiLHJhd19lbGVtZW50KSAubHQuIGYkbGVuZ3RoKHJhd19lbGVtZW50KQotJCB0aGVuCi0kICAgICBuYW1lID0gZiRlbGVtZW50KDEsIj0iLHJhd19lbGVtZW50KSAtICIoIgotJCAgICAgaWYgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpIC5uZXMuIG5hbWUgdGhlbiAtCi0gICAgICAgICAgd3JpdGUgY2FzZV92ZWN0b3IgZiRmYW8oIiBzeW1ib2xfdmVjdG9yPSghQVMvIUFTPURBVEEpIiwgLQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgZiRlZGl0KG5hbWUsIlVQQ0FTRSIpLCBuYW1lKQotJCBlbmRpZgotJCBnb3RvIHJhd2xvb3AKLSQgRU5EX1JBV0xPT1A6Ci0kIGNsb3NlIHJhd192ZWN0b3IKLSQgY2xvc2UgY2FzZV92ZWN0b3IKLSQgZGVsZXRlIGEudG1wOyosYi50bXA7KixjLnRtcDsqLGQudG1wOyosZS50bXA7KixmLnRtcDsqLGcudG1wOyoKLSQgaWYgZiRzZWFyY2goIngudG1wIikgLm5lcy4gIiIgLQotCXRoZW4gJCBkZWxldGUgeC50bXA7KgotJCEKLSQgRVhJVF9BQToKLSQgaWYgViB0aGVuIHNldCB2ZXJpZnkKLSQgZW5kc3Vicm91dGluZQotJCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSQhCiAkISBXcml0ZSBjb25maWd1cmF0aW9uIHRvIGJvdGggcGVybWFuZW50IGFuZCB0ZW1wb3JhcnkgY29uZmlnIGZpbGUKICQhCiAkISBWZXJzaW9uIGhpc3RvcnkKQEAgLTgwMiwzICs3MTUsMTUzIEBACiAkICBjbG9zZSBjb25maAogJEVORFNVQlJPVVRJTkUKICQhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiskIQorJCEgQW5hbHl6ZSB0aGUgcHJvamVjdCBtYXAgZmlsZSBhbmQgY3JlYXRlIHRoZSBzeW1ib2wgdmVjdG9yIGZvciBhIHNoYXJlYWJsZQorJCEgaW1hZ2UgZnJvbSBpdAorJCEKKyQhIFZlcnNpb24gaGlzdG9yeQorJCEgMC4wMSAyMDEyMDEyOCBGaXJzdCB2ZXJzaW9uCiskISAwLjAyIDIwMTIwMjI2IEFkZCBwcmUtbG9hZCBsb2dpYworJCEKKyQgTUFQXzJfU0hPUFQ6IFN1YnJvdXRpbmUKKyQhCiskIFNBWSA6PSAiV1JJVEVfIFNZUyRPVVRQVVQiCiskIQorJCBJRiBGJFNFQVJDSCgiJydQMSciKSAuRVFTLiAiIgorJCBUSEVOCiskICAgIFNBWSAiTUFQXzJfU0hPUFQtRS1OT1NVQ0hGSUxFOiAgRXJyb3IsIGlucHV0ZmlsZSAnJ3AxJyBub3QgYXZhaWxhYmxlIgorJCAgICBnb3RvIGV4aXRfbTJzCiskIEVORElGCiskIElGICInJ1AyJyIgLkVRUy4gIiIKKyQgVEhFTgorJCAgICBTQVkgIk1BUF8yX1NIT1BUOiAgRXJyb3IsIG5vIG91dHB1dCBmaWxlIHByb3ZpZGVkIgorJCAgICBnb3RvIGV4aXRfbTJzCiskIEVORElGCiskIQorJCBtb2R1bGUxID0gImRlZmxhdGUjZGVmbGF0ZUVuZCNkZWZsYXRlSW5pdF8jZGVmbGF0ZVBhcmFtcyNkZWZsYXRlU2V0RGljdGlvbmFyeSIKKyQgbW9kdWxlMiA9ICJnemNsb3NlI2d6ZXJyb3IjZ3pnZXRjI2d6Z2V0cyNnem9wZW4jZ3pwcmludGYjZ3pwdXRjI2d6cHV0cyNnenJlYWQiCiskIG1vZHVsZTMgPSAiZ3pzZWVrI2d6dGVsbCNpbmZsYXRlI2luZmxhdGVFbmQjaW5mbGF0ZUluaXRfI2luZmxhdGVTZXREaWN0aW9uYXJ5IgorJCBtb2R1bGU0ID0gImluZmxhdGVTeW5jI3VuY29tcHJlc3MjemxpYlZlcnNpb24jY29tcHJlc3MiCiskIG9wZW4vcmVhZCBtYXAgJ3AxCiskIGlmIGF4cCAub3IuIGlhNjQKKyQgdGhlbgorJCAgICAgb3Blbi93cml0ZSBhb3B0IGEub3B0CiskICAgICBvcGVuL3dyaXRlIGJvcHQgYi5vcHQKKyQgICAgIHdyaXRlIGFvcHQgIiBDQVNFX1NFTlNJVElWRT1ZRVMiCiskICAgICB3cml0ZSBib3B0ICJTWU1CT0xfVkVDVE9SPSAoLSIKKyQgICAgIG1vZF9zeW1fbnVtID0gMQorJCBNT0RfU1lNX0xPT1A6CiskICAgICBpZiBmJHR5cGUobW9kdWxlJ21vZF9zeW1fbnVtJykgLm5lcy4gIiIKKyQgICAgIHRoZW4KKyQgICAgICAgICBtb2RfaW4gPSAwCiskIE1PRF9TWU1fSU46CiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVsZW1lbnQobW9kX2luLCAiIyIsIG1vZHVsZSdtb2Rfc3ltX251bScpCiskICAgICAgICAgaWYgc2hhcmVkX3Byb2MgLm5lcy4gIiMiCiskICAgICAgICAgdGhlbgorJCAgICAgICAgICAgICB3cml0ZSBhb3B0IGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwtCisgICAgICAgIAkJICAgICAgIGYkZWRpdChzaGFyZWRfcHJvYywidXBjYXNlIiksc2hhcmVkX3Byb2MpCiskICAgICAgICAgICAgIHdyaXRlIGJvcHQgZiRmYW8oIiFBUz1QUk9DRURVUkUsLSIsc2hhcmVkX3Byb2MpCiskICAgICAgICAgICAgIG1vZF9pbiA9IG1vZF9pbiArIDEKKyQgICAgICAgICAgICAgZ290byBtb2Rfc3ltX2luCiskICAgICAgICAgZW5kaWYKKyQgICAgICAgICBtb2Rfc3ltX251bSA9IG1vZF9zeW1fbnVtICsgMQorJCAgICAgICAgIGdvdG8gbW9kX3N5bV9sb29wCiskICAgICBlbmRpZgorJE1BUF9MT09QOgorJCAgICAgcmVhZC9lbmQ9bWFwX2VuZCBtYXAgbGluZQorJCAgICAgaWYgKGYkbG9jYXRlKCJ7IixsaW5lKS5sdC4gZiRsZW5ndGgobGluZSkpIC5vci4gLQorICAgICAgICAgKGYkbG9jYXRlKCJnbG9iYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSkKKyQgICAgIHRoZW4KKyQgICAgICAgICBwcm9jID0gdHJ1ZQorJCAgICAgICAgIGdvdG8gbWFwX2xvb3AKKyQgICAgIGVuZGlmCiskICAgICBpZiBmJGxvY2F0ZSgifSIsbGluZSkubHQuIGYkbGVuZ3RoKGxpbmUpIHRoZW4gcHJvYyA9IGZhbHNlCiskICAgICBpZiBmJGxvY2F0ZSgibG9jYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgaWYgcHJvYworJCAgICAgdGhlbgorJCAgICAgICAgIHNoYXJlZF9wcm9jID0gZiRlZGl0KGxpbmUsImNvbGxhcHNlIikKKyQgICAgICAgICBjaG9wX3NlbWkgPSBmJGxvY2F0ZSgiOyIsIHNoYXJlZF9wcm9jKQorJCAgICAgICAgIGlmIGNob3Bfc2VtaSAubHQuIGYkbGVuZ3RoKHNoYXJlZF9wcm9jKSB0aGVuIC0KKyAgICAgICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGV4dHJhY3QoMCwgY2hvcF9zZW1pLCBzaGFyZWRfcHJvYykKKyQgICAgICAgICB3cml0ZSBhb3B0IGYkZmFvKCIgc3ltYm9sX3ZlY3Rvcj0oIUFTLyFBUz1QUk9DRURVUkUpIiwtCisgICAgICAgIAkJCSBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpLHNoYXJlZF9wcm9jKQorJCAgICAgICAgIHdyaXRlIGJvcHQgZiRmYW8oIiFBUz1QUk9DRURVUkUsLSIsc2hhcmVkX3Byb2MpCiskICAgICBlbmRpZgorJCAgICAgZ290byBtYXBfbG9vcAorJE1BUF9FTkQ6CiskICAgICBjbG9zZS9ub2xvZyBhb3B0CiskICAgICBjbG9zZS9ub2xvZyBib3B0CiskICAgICBvcGVuL2FwcGVuZCBsaWJvcHQgJ3AyJworJCAgICAgb3Blbi9yZWFkIGFvcHQgYS5vcHQKKyQgICAgIG9wZW4vcmVhZCBib3B0IGIub3B0CiskQUxPT1A6CiskICAgICByZWFkL2VuZD1hbG9vcF9lbmQgYW9wdCBsaW5lCiskICAgICB3cml0ZSBsaWJvcHQgbGluZQorJCAgICAgZ290byBhbG9vcAorJEFMT09QX0VORDoKKyQgICAgIGNsb3NlL25vbG9nIGFvcHQKKyQgICAgIHN2ID0gIiIKKyRCTE9PUDoKKyQgICAgIHJlYWQvZW5kPWJsb29wX2VuZCBib3B0IHN2bgorJCAgICAgaWYgKHN2bi5uZXMuIiIpCiskICAgICB0aGVuCiskICAgICAgICBpZiAoc3YubmVzLiIiKSB0aGVuIHdyaXRlIGxpYm9wdCBzdgorJCAgICAgICAgc3YgPSBzdm4KKyQgICAgIGVuZGlmCiskICAgICBnb3RvIGJsb29wCiskQkxPT1BfRU5EOgorJCAgICAgd3JpdGUgbGlib3B0IGYkZXh0cmFjdCgwLGYkbGVuZ3RoKHN2KS0yLHN2KSwgIi0iCiskICAgICB3cml0ZSBsaWJvcHQgIikiCiskICAgICBjbG9zZS9ub2xvZyBib3B0CiskICAgICBkZWxldGUvbm9sb2cvbm9jb25mIGEub3B0OyosYi5vcHQ7KgorJCBlbHNlCiskICAgICBpZiB2YXgKKyQgICAgIHRoZW4KKyQgICAgIG9wZW4vYXBwZW5kIGxpYm9wdCAncDInCiskICAgICBtb2Rfc3ltX251bSA9IDEKKyQgVk1PRF9TWU1fTE9PUDoKKyQgICAgIGlmIGYkdHlwZShtb2R1bGUnbW9kX3N5bV9udW0nKSAubmVzLiAiIgorJCAgICAgdGhlbgorJCAgICAgICAgIG1vZF9pbiA9IDAKKyQgVk1PRF9TWU1fSU46CiskICAgICAgICAgc2hhcmVkX3Byb2MgPSBmJGVsZW1lbnQobW9kX2luLCAiIyIsIG1vZHVsZSdtb2Rfc3ltX251bScpCiskICAgICAgICAgaWYgc2hhcmVkX3Byb2MgLm5lcy4gIiMiCiskICAgICAgICAgdGhlbgorJCAgICAgCSAgICAgIHdyaXRlIGxpYm9wdCBmJGZhbygiVU5JVkVSU0FMPSFBUyIsLQorICAgICAgCSAgCQkJICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpKQorJCAgICAgICAgICAgICBtb2RfaW4gPSBtb2RfaW4gKyAxCiskICAgICAgICAgICAgIGdvdG8gdm1vZF9zeW1faW4KKyQgICAgICAgICBlbmRpZgorJCAgICAgICAgIG1vZF9zeW1fbnVtID0gbW9kX3N5bV9udW0gKyAxCiskICAgICAgICAgZ290byB2bW9kX3N5bV9sb29wCiskICAgICBlbmRpZgorJFZNQVBfTE9PUDoKKyQgICAgIAkgIHJlYWQvZW5kPXZtYXBfZW5kIG1hcCBsaW5lCiskICAgICAJICBpZiAoZiRsb2NhdGUoInsiLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSkgLm9yLiAtCisgICAJICAgICAgKGYkbG9jYXRlKCJnbG9iYWw6IiwgbGluZSkgLmx0LiBmJGxlbmd0aChsaW5lKSkKKyQgICAgIAkgIHRoZW4KKyQgICAgIAkgICAgICBwcm9jID0gdHJ1ZQorJCAgICAgCSAgICAgIGdvdG8gdm1hcF9sb29wCiskICAgICAJICBlbmRpZgorJCAgICAgCSAgaWYgZiRsb2NhdGUoIn0iLGxpbmUpLmx0LiBmJGxlbmd0aChsaW5lKSB0aGVuIHByb2MgPSBmYWxzZQorJCAgICAgCSAgaWYgZiRsb2NhdGUoImxvY2FsOiIsIGxpbmUpIC5sdC4gZiRsZW5ndGgobGluZSkgdGhlbiBwcm9jID0gZmFsc2UKKyQgICAgIAkgIGlmIHByb2MKKyQgICAgIAkgIHRoZW4KKyQgICAgIAkgICAgICBzaGFyZWRfcHJvYyA9IGYkZWRpdChsaW5lLCJjb2xsYXBzZSIpCiskICAgICAJICAgICAgY2hvcF9zZW1pID0gZiRsb2NhdGUoIjsiLCBzaGFyZWRfcHJvYykKKyQgICAgIAkgICAgICBpZiBjaG9wX3NlbWkgLmx0LiBmJGxlbmd0aChzaGFyZWRfcHJvYykgdGhlbiAtCisgICAgICAJICAJICBzaGFyZWRfcHJvYyA9IGYkZXh0cmFjdCgwLCBjaG9wX3NlbWksIHNoYXJlZF9wcm9jKQorJCAgICAgCSAgICAgIHdyaXRlIGxpYm9wdCBmJGZhbygiVU5JVkVSU0FMPSFBUyIsLQorICAgICAgCSAgCQkJICAgICBmJGVkaXQoc2hhcmVkX3Byb2MsInVwY2FzZSIpKQorJCAgICAgCSAgZW5kaWYKKyQgICAgIAkgIGdvdG8gdm1hcF9sb29wCiskVk1BUF9FTkQ6CiskICAgICBlbHNlCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiVW5rbm93biBBcmNoaXRlY3R1cmUgKE5vdCBWQVgsIEFYUCwgb3IgSUE2NCkiCiskICAgICAgICAgd3JpdGUgc3lzJG91dHB1dCAiTm8gb3B0aW9ucyBmaWxlIGNyZWF0ZWQiCiskICAgICBlbmRpZgorJCBlbmRpZgorJCBFWElUX00yUzoKKyQgY2xvc2Uvbm9sb2cgbWFwCiskIGNsb3NlL25vbG9nIGxpYm9wdAorJCBlbmRzdWJyb3V0aW5lCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvbWluaWd6aXAuYyBiL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCmluZGV4IDk4MjVjY2MuLmIzMDI1YTQgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCisrKyBiL01vZHVsZXMvemxpYi9taW5pZ3ppcC5jCkBAIC0xLDUgKzEsNSBAQAogLyogbWluaWd6aXAuYyAtLSBzaW11bGF0ZSBnemlwIHVzaW5nIHRoZSB6bGliIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA2LCAyMDEwIEplYW4tbG91cCBHYWlsbHkuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNiwgMjAxMCwgMjAxMSBKZWFuLWxvdXAgR2FpbGx5LgogICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAogICovCiAKQEAgLTQwLDYgKzQwLDEwIEBACiAjICBkZWZpbmUgU0VUX0JJTkFSWV9NT0RFKGZpbGUpCiAjZW5kaWYKIAorI2lmZGVmIF9NU0NfVkVSCisjICBkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjZW5kaWYKKwogI2lmZGVmIFZNUwogIyAgZGVmaW5lIHVubGluayBkZWxldGUKICMgIGRlZmluZSBHWl9TVUZGSVggIi1neiIKQEAgLTEzOCw2ICsxNDIsMTk3IEBACiAjICBkZWZpbmUgbG9jYWwKICNlbmRpZgogCisjaWZkZWYgWl9TT0xPCisvKiBmb3IgWl9TT0xPLCBjcmVhdGUgc2ltcGxpZmllZCBneiogZnVuY3Rpb25zIHVzaW5nIGRlZmxhdGUgYW5kIGluZmxhdGUgKi8KKworI2lmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKFpfTEFSR0UpCisjICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgLyogZm9yIHVubGluaygpICovCisjZW5kaWYKKwordm9pZCAqbXlhbGxvYyBPRigodm9pZCAqLCB1bnNpZ25lZCwgdW5zaWduZWQpKTsKK3ZvaWQgbXlmcmVlIE9GKCh2b2lkICosIHZvaWQgKikpOworCit2b2lkICpteWFsbG9jKHEsIG4sIG0pCisgICAgdm9pZCAqcTsKKyAgICB1bnNpZ25lZCBuLCBtOworeworICAgIHEgPSBaX05VTEw7CisgICAgcmV0dXJuIGNhbGxvYyhuLCBtKTsKK30KKwordm9pZCBteWZyZWUocSwgcCkKKyAgICB2b2lkICpxLCAqcDsKK3sKKyAgICBxID0gWl9OVUxMOworICAgIGZyZWUocCk7Cit9CisKK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zIHsKKyAgICBGSUxFICpmaWxlOworICAgIGludCB3cml0ZTsKKyAgICBpbnQgZXJyOworICAgIGNoYXIgKm1zZzsKKyAgICB6X3N0cmVhbSBzdHJtOworfSAqZ3pGaWxlOworCitnekZpbGUgZ3pvcGVuIE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworZ3pGaWxlIGd6ZG9wZW4gT0YoKGludCwgY29uc3QgY2hhciAqKSk7CitnekZpbGUgZ3pfb3BlbiBPRigoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKikpOworCitnekZpbGUgZ3pvcGVuKHBhdGgsIG1vZGUpCitjb25zdCBjaGFyICpwYXRoOworY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihwYXRoLCAtMSwgbW9kZSk7Cit9CisKK2d6RmlsZSBnemRvcGVuKGZkLCBtb2RlKQoraW50IGZkOworY29uc3QgY2hhciAqbW9kZTsKK3sKKyAgICByZXR1cm4gZ3pfb3BlbihOVUxMLCBmZCwgbW9kZSk7Cit9CisKK2d6RmlsZSBnel9vcGVuKHBhdGgsIGZkLCBtb2RlKQorICAgIGNvbnN0IGNoYXIgKnBhdGg7CisgICAgaW50IGZkOworICAgIGNvbnN0IGNoYXIgKm1vZGU7Cit7CisgICAgZ3pGaWxlIGd6OworICAgIGludCByZXQ7CisKKyAgICBneiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGd6RmlsZV9zKSk7CisgICAgaWYgKGd6ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGd6LT53cml0ZSA9IHN0cmNocihtb2RlLCAndycpICE9IE5VTEw7CisgICAgZ3otPnN0cm0uemFsbG9jID0gbXlhbGxvYzsKKyAgICBnei0+c3RybS56ZnJlZSA9IG15ZnJlZTsKKyAgICBnei0+c3RybS5vcGFxdWUgPSBaX05VTEw7CisgICAgaWYgKGd6LT53cml0ZSkKKyAgICAgICAgcmV0ID0gZGVmbGF0ZUluaXQyKCYoZ3otPnN0cm0pLCAtMSwgOCwgMTUgKyAxNiwgOCwgMCk7CisgICAgZWxzZSB7CisgICAgICAgIGd6LT5zdHJtLm5leHRfaW4gPSAwOworICAgICAgICBnei0+c3RybS5hdmFpbF9pbiA9IFpfTlVMTDsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZUluaXQyKCYoZ3otPnN0cm0pLCAxNSArIDE2KTsKKyAgICB9CisgICAgaWYgKHJldCAhPSBaX09LKSB7CisgICAgICAgIGZyZWUoZ3opOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZ3otPmZpbGUgPSBwYXRoID09IE5VTEwgPyBmZG9wZW4oZmQsIGd6LT53cml0ZSA/ICJ3YiIgOiAicmIiKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3BlbihwYXRoLCBnei0+d3JpdGUgPyAid2IiIDogInJiIik7CisgICAgaWYgKGd6LT5maWxlID09IE5VTEwpIHsKKyAgICAgICAgZ3otPndyaXRlID8gZGVmbGF0ZUVuZCgmKGd6LT5zdHJtKSkgOiBpbmZsYXRlRW5kKCYoZ3otPnN0cm0pKTsKKyAgICAgICAgZnJlZShneik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBnei0+ZXJyID0gMDsKKyAgICBnei0+bXNnID0gIiI7CisgICAgcmV0dXJuIGd6OworfQorCitpbnQgZ3p3cml0ZSBPRigoZ3pGaWxlLCBjb25zdCB2b2lkICosIHVuc2lnbmVkKSk7CisKK2ludCBnendyaXRlKGd6LCBidWYsIGxlbikKKyAgICBnekZpbGUgZ3o7CisgICAgY29uc3Qgdm9pZCAqYnVmOworICAgIHVuc2lnbmVkIGxlbjsKK3sKKyAgICB6X3N0cmVhbSAqc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFtCVUZMRU5dOworCisgICAgaWYgKGd6ID09IE5VTEwgfHwgIWd6LT53cml0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgc3RybSA9ICYoZ3otPnN0cm0pOworICAgIHN0cm0tPm5leHRfaW4gPSAodm9pZCAqKWJ1ZjsKKyAgICBzdHJtLT5hdmFpbF9pbiA9IGxlbjsKKyAgICBkbyB7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBCVUZMRU47CisgICAgICAgICh2b2lkKWRlZmxhdGUoc3RybSwgWl9OT19GTFVTSCk7CisgICAgICAgIGZ3cml0ZShvdXQsIDEsIEJVRkxFTiAtIHN0cm0tPmF2YWlsX291dCwgZ3otPmZpbGUpOworICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCA9PSAwKTsKKyAgICByZXR1cm4gbGVuOworfQorCitpbnQgZ3pyZWFkIE9GKChnekZpbGUsIHZvaWQgKiwgdW5zaWduZWQpKTsKKworaW50IGd6cmVhZChneiwgYnVmLCBsZW4pCisgICAgZ3pGaWxlIGd6OworICAgIHZvaWQgKmJ1ZjsKKyAgICB1bnNpZ25lZCBsZW47Cit7CisgICAgaW50IHJldDsKKyAgICB1bnNpZ25lZCBnb3Q7CisgICAgdW5zaWduZWQgY2hhciBpblsxXTsKKyAgICB6X3N0cmVhbSAqc3RybTsKKworICAgIGlmIChneiA9PSBOVUxMIHx8IGd6LT53cml0ZSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGd6LT5lcnIpCisgICAgICAgIHJldHVybiAwOworICAgIHN0cm0gPSAmKGd6LT5zdHJtKTsKKyAgICBzdHJtLT5uZXh0X291dCA9ICh2b2lkICopYnVmOworICAgIHN0cm0tPmF2YWlsX291dCA9IGxlbjsKKyAgICBkbyB7CisgICAgICAgIGdvdCA9IGZyZWFkKGluLCAxLCAxLCBnei0+ZmlsZSk7CisgICAgICAgIGlmIChnb3QgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdHJtLT5uZXh0X2luID0gaW47CisgICAgICAgIHN0cm0tPmF2YWlsX2luID0gMTsKKyAgICAgICAgcmV0ID0gaW5mbGF0ZShzdHJtLCBaX05PX0ZMVVNIKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX0RBVEFfRVJST1IpIHsKKyAgICAgICAgICAgIGd6LT5lcnIgPSBaX0RBVEFfRVJST1I7CisgICAgICAgICAgICBnei0+bXNnID0gc3RybS0+bXNnOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCA9PSBaX1NUUkVBTV9FTkQpCisgICAgICAgICAgICBpbmZsYXRlUmVzZXQoc3RybSk7CisgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0KTsKKyAgICByZXR1cm4gbGVuIC0gc3RybS0+YXZhaWxfb3V0OworfQorCitpbnQgZ3pjbG9zZSBPRigoZ3pGaWxlKSk7CisKK2ludCBnemNsb3NlKGd6KQorICAgIGd6RmlsZSBnejsKK3sKKyAgICB6X3N0cmVhbSAqc3RybTsKKyAgICB1bnNpZ25lZCBjaGFyIG91dFtCVUZMRU5dOworCisgICAgaWYgKGd6ID09IE5VTEwpCisgICAgICAgIHJldHVybiBaX1NUUkVBTV9FUlJPUjsKKyAgICBzdHJtID0gJihnei0+c3RybSk7CisgICAgaWYgKGd6LT53cml0ZSkgeworICAgICAgICBzdHJtLT5uZXh0X2luID0gWl9OVUxMOworICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgICAgICAgICAgc3RybS0+YXZhaWxfb3V0ID0gQlVGTEVOOworICAgICAgICAgICAgKHZvaWQpZGVmbGF0ZShzdHJtLCBaX0ZJTklTSCk7CisgICAgICAgICAgICBmd3JpdGUob3V0LCAxLCBCVUZMRU4gLSBzdHJtLT5hdmFpbF9vdXQsIGd6LT5maWxlKTsKKyAgICAgICAgfSB3aGlsZSAoc3RybS0+YXZhaWxfb3V0ID09IDApOworICAgICAgICBkZWZsYXRlRW5kKHN0cm0pOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGluZmxhdGVFbmQoc3RybSk7CisgICAgZmNsb3NlKGd6LT5maWxlKTsKKyAgICBmcmVlKGd6KTsKKyAgICByZXR1cm4gWl9PSzsKK30KKworY29uc3QgY2hhciAqZ3plcnJvciBPRigoZ3pGaWxlLCBpbnQgKikpOworCitjb25zdCBjaGFyICpnemVycm9yKGd6LCBlcnIpCisgICAgZ3pGaWxlIGd6OworICAgIGludCAqZXJyOworeworICAgICplcnIgPSBnei0+ZXJyOworICAgIHJldHVybiBnei0+bXNnOworfQorCisjZW5kaWYKKwogY2hhciAqcHJvZzsKIAogdm9pZCBlcnJvciAgICAgICAgICAgIE9GKChjb25zdCBjaGFyICptc2cpKTsKQEAgLTI3Miw4ICs0NjcsMTIgQEAKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKG91dGZpbGUsIHNpemVvZihvdXRmaWxlKSwgIiVzJXMiLCBmaWxlLCBHWl9TVUZGSVgpOworI2Vsc2UKICAgICBzdHJjcHkob3V0ZmlsZSwgZmlsZSk7CiAgICAgc3RyY2F0KG91dGZpbGUsIEdaX1NVRkZJWCk7CisjZW5kaWYKIAogICAgIGluID0gZm9wZW4oZmlsZSwgInJiIik7CiAgICAgaWYgKGluID09IE5VTEwpIHsKQEAgLTMwOCw3ICs1MDcsMTEgQEAKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKKyNpZiAhZGVmaW5lZChOT19zbnByaW50ZikgJiYgIWRlZmluZWQoTk9fdnNucHJpbnRmKQorICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsIGZpbGUpOworI2Vsc2UKICAgICBzdHJjcHkoYnVmLCBmaWxlKTsKKyNlbmRpZgogCiAgICAgaWYgKGxlbiA+IFNVRkZJWF9MRU4gJiYgc3RyY21wKGZpbGUrbGVuLVNVRkZJWF9MRU4sIEdaX1NVRkZJWCkgPT0gMCkgewogICAgICAgICBpbmZpbGUgPSBmaWxlOwpAQCAtMzE3LDcgKzUyMCwxMSBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIG91dGZpbGUgPSBmaWxlOwogICAgICAgICBpbmZpbGUgPSBidWY7CisjaWYgIWRlZmluZWQoTk9fc25wcmludGYpICYmICFkZWZpbmVkKE5PX3ZzbnByaW50ZikKKyAgICAgICAgc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIiVzIiwgR1pfU1VGRklYKTsKKyNlbHNlCiAgICAgICAgIHN0cmNhdChpbmZpbGUsIEdaX1NVRkZJWCk7CisjZW5kaWYKICAgICB9CiAgICAgaW4gPSBnem9wZW4oaW5maWxlLCAicmIiKTsKICAgICBpZiAoaW4gPT0gTlVMTCkgewpAQCAtMzU1LDcgKzU2MiwxMSBAQAogICAgIGd6RmlsZSBmaWxlOwogICAgIGNoYXIgKmJuYW1lLCBvdXRtb2RlWzIwXTsKIAorI2lmICFkZWZpbmVkKE5PX3NucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCisgICAgc25wcmludGYob3V0bW9kZSwgc2l6ZW9mKG91dG1vZGUpLCAiJXMiLCAid2I2ICIpOworI2Vsc2UKICAgICBzdHJjcHkob3V0bW9kZSwgIndiNiAiKTsKKyNlbmRpZgogCiAgICAgcHJvZyA9IGFyZ3ZbMF07CiAgICAgYm5hbWUgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJyk7CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvdHJlZXMuYyBiL01vZHVsZXMvemxpYi90cmVlcy5jCmluZGV4IDU2ZTliYjEuLjFmZDc3NTkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi90cmVlcy5jCisrKyBiL01vZHVsZXMvemxpYi90cmVlcy5jCkBAIC0xLDUgKzEsNSBAQAogLyogdHJlZXMuYyAtLSBvdXRwdXQgZGVmbGF0ZWQgZGF0YSB1c2luZyBIdWZmbWFuIGNvZGluZwotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseQorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTIgSmVhbi1sb3VwIEdhaWxseQogICogZGV0ZWN0X2RhdGFfdHlwZSgpIGZ1bmN0aW9uIHByb3ZpZGVkIGZyZWVseSBieSBDb3NtaW4gVHJ1dGEsIDIwMDYKICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwpAQCAtNzQsMTEgKzc0LDYgQEAKICAqIHByb2JhYmlsaXR5LCB0byBhdm9pZCB0cmFuc21pdHRpbmcgdGhlIGxlbmd0aHMgZm9yIHVudXNlZCBiaXQgbGVuZ3RoIGNvZGVzLgogICovCiAKLSNkZWZpbmUgQnVmX3NpemUgKDggKiAyKnNpemVvZihjaGFyKSkKLS8qIE51bWJlciBvZiBiaXRzIHVzZWQgd2l0aGluIGJpX2J1Zi4gKGJpX2J1ZiBtaWdodCBiZSBpbXBsZW1lbnRlZCBvbgotICogbW9yZSB0aGFuIDE2IGJpdHMgb24gc29tZSBzeXN0ZW1zLikKLSAqLwotCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqIExvY2FsIGRhdGEuIFRoZXNlIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuCiAgKi8KQEAgLTE1MSw4ICsxNDYsOCBAQAogbG9jYWwgaW50ICBidWlsZF9ibF90cmVlICBPRigoZGVmbGF0ZV9zdGF0ZSAqcykpOwogbG9jYWwgdm9pZCBzZW5kX2FsbF90cmVlcyBPRigoZGVmbGF0ZV9zdGF0ZSAqcywgaW50IGxjb2RlcywgaW50IGRjb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBibGNvZGVzKSk7Ci1sb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjdF9kYXRhICpsdHJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0X2RhdGEgKmR0cmVlKSk7Citsb2NhbCB2b2lkIGNvbXByZXNzX2Jsb2NrIE9GKChkZWZsYXRlX3N0YXRlICpzLCBjb25zdCBjdF9kYXRhICpsdHJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlKSk7CiBsb2NhbCBpbnQgIGRldGVjdF9kYXRhX3R5cGUgT0YoKGRlZmxhdGVfc3RhdGUgKnMpKTsKIGxvY2FsIHVuc2lnbmVkIGJpX3JldmVyc2UgT0YoKHVuc2lnbmVkIHZhbHVlLCBpbnQgbGVuZ3RoKSk7CiBsb2NhbCB2b2lkIGJpX3dpbmR1cCAgICAgIE9GKChkZWZsYXRlX3N0YXRlICpzKSk7CkBAIC0zOTksNyArMzk0LDYgQEAKIAogICAgIHMtPmJpX2J1ZiA9IDA7CiAgICAgcy0+YmlfdmFsaWQgPSAwOwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUgKi8KICNpZmRlZiBERUJVRwogICAgIHMtPmNvbXByZXNzZWRfbGVuID0gMEw7CiAgICAgcy0+Yml0c19zZW50ID0gMEw7CkBAIC04ODMsMTUgKzg3NywxNyBAQAogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIEZsdXNoIHRoZSBiaXRzIGluIHRoZSBiaXQgYnVmZmVyIHRvIHBlbmRpbmcgb3V0cHV0IChsZWF2ZXMgYXQgbW9zdCA3IGJpdHMpCisgKi8KK3ZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfZmx1c2hfYml0cyhzKQorICAgIGRlZmxhdGVfc3RhdGUgKnM7Cit7CisgICAgYmlfZmx1c2gocyk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogU2VuZCBvbmUgZW1wdHkgc3RhdGljIGJsb2NrIHRvIGdpdmUgZW5vdWdoIGxvb2thaGVhZCBmb3IgaW5mbGF0ZS4KICAqIFRoaXMgdGFrZXMgMTAgYml0cywgb2Ygd2hpY2ggNyBtYXkgcmVtYWluIGluIHRoZSBiaXQgYnVmZmVyLgotICogVGhlIGN1cnJlbnQgaW5mbGF0ZSBjb2RlIHJlcXVpcmVzIDkgYml0cyBvZiBsb29rYWhlYWQuIElmIHRoZQotICogbGFzdCB0d28gY29kZXMgZm9yIHRoZSBwcmV2aW91cyBibG9jayAocmVhbCBjb2RlIHBsdXMgRU9CKSB3ZXJlIGNvZGVkCi0gKiBvbiA1IGJpdHMgb3IgbGVzcywgaW5mbGF0ZSBtYXkgaGF2ZSBvbmx5IDUrMyBiaXRzIG9mIGxvb2thaGVhZCB0byBkZWNvZGUKLSAqIHRoZSBsYXN0IHJlYWwgY29kZS4gSW4gdGhpcyBjYXNlIHdlIHNlbmQgdHdvIGVtcHR5IHN0YXRpYyBibG9ja3MgaW5zdGVhZAotICogb2Ygb25lLiAoVGhlcmUgYXJlIG5vIHByb2JsZW1zIGlmIHRoZSBwcmV2aW91cyBibG9jayBpcyBzdG9yZWQgb3IgZml4ZWQuKQotICogVG8gc2ltcGxpZnkgdGhlIGNvZGUsIHdlIGFzc3VtZSB0aGUgd29yc3QgY2FzZSBvZiBsYXN0IHJlYWwgY29kZSBlbmNvZGVkCi0gKiBvbiBvbmUgYml0IG9ubHkuCiAgKi8KIHZvaWQgWkxJQl9JTlRFUk5BTCBfdHJfYWxpZ24ocykKICAgICBkZWZsYXRlX3N0YXRlICpzOwpAQCAtOTAyLDIwICs4OTgsNiBAQAogICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsgLyogMyBmb3IgYmxvY2sgdHlwZSwgNyBmb3IgRU9CICovCiAjZW5kaWYKICAgICBiaV9mbHVzaChzKTsKLSAgICAvKiBPZiB0aGUgMTAgYml0cyBmb3IgdGhlIGVtcHR5IGJsb2NrLCB3ZSBoYXZlIGFscmVhZHkgc2VudAotICAgICAqICgxMCAtIGJpX3ZhbGlkKSBiaXRzLiBUaGUgbG9va2FoZWFkIGZvciB0aGUgbGFzdCByZWFsIGNvZGUgKGJlZm9yZQotICAgICAqIHRoZSBFT0Igb2YgdGhlIHByZXZpb3VzIGJsb2NrKSB3YXMgdGh1cyBhdCBsZWFzdCBvbmUgcGx1cyB0aGUgbGVuZ3RoCi0gICAgICogb2YgdGhlIEVPQiBwbHVzIHdoYXQgd2UgaGF2ZSBqdXN0IHNlbnQgb2YgdGhlIGVtcHR5IHN0YXRpYyBibG9jay4KLSAgICAgKi8KLSAgICBpZiAoMSArIHMtPmxhc3RfZW9iX2xlbiArIDEwIC0gcy0+YmlfdmFsaWQgPCA5KSB7Ci0gICAgICAgIHNlbmRfYml0cyhzLCBTVEFUSUNfVFJFRVM8PDEsIDMpOwotICAgICAgICBzZW5kX2NvZGUocywgRU5EX0JMT0NLLCBzdGF0aWNfbHRyZWUpOwotI2lmZGVmIERFQlVHCi0gICAgICAgIHMtPmNvbXByZXNzZWRfbGVuICs9IDEwTDsKLSNlbmRpZgotICAgICAgICBiaV9mbHVzaChzKTsKLSAgICB9Ci0gICAgcy0+bGFzdF9lb2JfbGVuID0gNzsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC05OTAsNyArOTcyLDggQEAKICAgICB9IGVsc2UgaWYgKHMtPnN0cmF0ZWd5ID09IFpfRklYRUQgfHwgc3RhdGljX2xlbmIgPT0gb3B0X2xlbmIpIHsKICNlbmRpZgogICAgICAgICBzZW5kX2JpdHMocywgKFNUQVRJQ19UUkVFUzw8MSkrbGFzdCwgMyk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopc3RhdGljX2x0cmVlLCAoY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7CisgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopc3RhdGljX2x0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXN0YXRpY19kdHJlZSk7CiAjaWZkZWYgREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMtPnN0YXRpY19sZW47CiAjZW5kaWYKQEAgLTk5OCw3ICs5ODEsOCBAQAogICAgICAgICBzZW5kX2JpdHMocywgKERZTl9UUkVFUzw8MSkrbGFzdCwgMyk7CiAgICAgICAgIHNlbmRfYWxsX3RyZWVzKHMsIHMtPmxfZGVzYy5tYXhfY29kZSsxLCBzLT5kX2Rlc2MubWF4X2NvZGUrMSwKICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2JsaW5kZXgrMSk7Ci0gICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjdF9kYXRhICopcy0+ZHluX2x0cmVlLCAoY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CisgICAgICAgIGNvbXByZXNzX2Jsb2NrKHMsIChjb25zdCBjdF9kYXRhICopcy0+ZHluX2x0cmVlLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY3RfZGF0YSAqKXMtPmR5bl9kdHJlZSk7CiAjaWZkZWYgREVCVUcKICAgICAgICAgcy0+Y29tcHJlc3NlZF9sZW4gKz0gMyArIHMtPm9wdF9sZW47CiAjZW5kaWYKQEAgLTEwNzUsOCArMTA1OSw4IEBACiAgKi8KIGxvY2FsIHZvaWQgY29tcHJlc3NfYmxvY2socywgbHRyZWUsIGR0cmVlKQogICAgIGRlZmxhdGVfc3RhdGUgKnM7Ci0gICAgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLwotICAgIGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCisgICAgY29uc3QgY3RfZGF0YSAqbHRyZWU7IC8qIGxpdGVyYWwgdHJlZSAqLworICAgIGNvbnN0IGN0X2RhdGEgKmR0cmVlOyAvKiBkaXN0YW5jZSB0cmVlICovCiB7CiAgICAgdW5zaWduZWQgZGlzdDsgICAgICAvKiBkaXN0YW5jZSBvZiBtYXRjaGVkIHN0cmluZyAqLwogICAgIGludCBsYzsgICAgICAgICAgICAgLyogbWF0Y2ggbGVuZ3RoIG9yIHVubWF0Y2hlZCBjaGFyIChpZiBkaXN0ID09IDApICovCkBAIC0xMTE4LDcgKzExMDIsNiBAQAogICAgIH0gd2hpbGUgKGx4IDwgcy0+bGFzdF9saXQpOwogCiAgICAgc2VuZF9jb2RlKHMsIEVORF9CTE9DSywgbHRyZWUpOwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IGx0cmVlW0VORF9CTE9DS10uTGVuOwogfQogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTEyMjYsNyArMTIwOSw2IEBACiAgICAgaW50ICAgICAgaGVhZGVyOyAgLyogdHJ1ZSBpZiBibG9jayBoZWFkZXIgbXVzdCBiZSB3cml0dGVuICovCiB7CiAgICAgYmlfd2luZHVwKHMpOyAgICAgICAgLyogYWxpZ24gb24gYnl0ZSBib3VuZGFyeSAqLwotICAgIHMtPmxhc3RfZW9iX2xlbiA9IDg7IC8qIGVub3VnaCBsb29rYWhlYWQgZm9yIGluZmxhdGUgKi8KIAogICAgIGlmIChoZWFkZXIpIHsKICAgICAgICAgcHV0X3Nob3J0KHMsICh1c2gpbGVuKTsKZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi91bmNvbXByLmMgYi9Nb2R1bGVzL3psaWIvdW5jb21wci5jCmluZGV4IGFkOThiZTMuLjI0MmU5NDkgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi91bmNvbXByLmMKKysrIGIvTW9kdWxlcy96bGliL3VuY29tcHIuYwpAQCAtMzAsNyArMzAsNyBAQAogICAgIHpfc3RyZWFtIHN0cmVhbTsKICAgICBpbnQgZXJyOwogCi0gICAgc3RyZWFtLm5leHRfaW4gPSAoQnl0ZWYqKXNvdXJjZTsKKyAgICBzdHJlYW0ubmV4dF9pbiA9ICh6X2NvbnN0IEJ5dGVmICopc291cmNlOwogICAgIHN0cmVhbS5hdmFpbF9pbiA9ICh1SW50KXNvdXJjZUxlbjsKICAgICAvKiBDaGVjayBmb3Igc291cmNlID4gNjRLIG9uIDE2LWJpdCBtYWNoaW5lOiAqLwogICAgIGlmICgodUxvbmcpc3RyZWFtLmF2YWlsX2luICE9IHNvdXJjZUxlbikgcmV0dXJuIFpfQlVGX0VSUk9SOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmggYi9Nb2R1bGVzL3psaWIvemNvbmYuaAppbmRleCAwMmNlNTZjLi45OTg3YTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaAorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNSwxMSArMTUsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjcsOSArMjksMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00MCw0NCArNDQsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTkyLDE2ICsxMDUsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMSw3ICsxMzAsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTcsNiArMjE4LDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0Myw2ICsyNzAsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTYsMTIgKzM5MSw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MCwyMSArNDQwLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTQsMTggKzQ4MSwxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluIGIvTW9kdWxlcy96bGliL3pjb25mLmguY21ha2VpbgppbmRleCBhMmY3MWIxLi4wNDMwMTljIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5jbWFrZWluCisrKyBiL01vZHVsZXMvemxpYi96Y29uZi5oLmNtYWtlaW4KQEAgLTEsNSArMSw1IEBACiAvKiB6Y29uZi5oIC0tIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHpsaWIgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDEzIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIApAQCAtMTcsMTEgKzE3LDEzIEBACiAgKiB0aGlzIHBlcm1hbmVudGx5IGluIHpjb25mLmggdXNpbmcgIi4vY29uZmlndXJlIC0tenByZWZpeCIuCiAgKi8KICNpZmRlZiBaX1BSRUZJWCAgICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLworIyAgZGVmaW5lIFpfUFJFRklYX1NFVAogCiAvKiBhbGwgbGlua2VkIHN5bWJvbHMgKi8KICMgIGRlZmluZSBfZGlzdF9jb2RlICAgICAgICAgICAgel9fZGlzdF9jb2RlCiAjICBkZWZpbmUgX2xlbmd0aF9jb2RlICAgICAgICAgIHpfX2xlbmd0aF9jb2RlCiAjICBkZWZpbmUgX3RyX2FsaWduICAgICAgICAgICAgIHpfX3RyX2FsaWduCisjICBkZWZpbmUgX3RyX2ZsdXNoX2JpdHMgICAgICAgIHpfX3RyX2ZsdXNoX2JpdHMKICMgIGRlZmluZSBfdHJfZmx1c2hfYmxvY2sgICAgICAgel9fdHJfZmx1c2hfYmxvY2sKICMgIGRlZmluZSBfdHJfaW5pdCAgICAgICAgICAgICAgel9fdHJfaW5pdAogIyAgZGVmaW5lIF90cl9zdG9yZWRfYmxvY2sgICAgICB6X190cl9zdG9yZWRfYmxvY2sKQEAgLTI5LDkgKzMxLDExIEBACiAjICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSAgICAgICB6X2FkbGVyMzJfY29tYmluZQogIyAgZGVmaW5lIGFkbGVyMzJfY29tYmluZTY0ICAgICB6X2FkbGVyMzJfY29tYmluZTY0Ci0jICBkZWZpbmUgY29tcHJlc3MgICAgICAgICAgICAgIHpfY29tcHJlc3MKLSMgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKLSMgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcworIyAgICBkZWZpbmUgY29tcHJlc3MyICAgICAgICAgICAgIHpfY29tcHJlc3MyCisjICAgIGRlZmluZSBjb21wcmVzc0JvdW5kICAgICAgICAgel9jb21wcmVzc0JvdW5kCisjICBlbmRpZgogIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZSAgICAgICAgIHpfY3JjMzJfY29tYmluZQogIyAgZGVmaW5lIGNyYzMyX2NvbWJpbmU2NCAgICAgICB6X2NyYzMyX2NvbWJpbmU2NApAQCAtNDIsNDQgKzQ2LDUzIEBACiAjICBkZWZpbmUgZGVmbGF0ZUluaXQyXyAgICAgICAgIHpfZGVmbGF0ZUluaXQyXwogIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwogIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKKyMgIGRlZmluZSBkZWZsYXRlUGVuZGluZyAgICAgICAgel9kZWZsYXRlUGVuZGluZwogIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgICAgICAgICB6X2RlZmxhdGVQcmltZQogIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVSZXNldEtlZXAgICAgICB6X2RlZmxhdGVSZXNldEtlZXAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSAgel9kZWZsYXRlU2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGRlZmxhdGVTZXRIZWFkZXIgICAgICB6X2RlZmxhdGVTZXRIZWFkZXIKICMgIGRlZmluZSBkZWZsYXRlVHVuZSAgICAgICAgICAgel9kZWZsYXRlVHVuZQogIyAgZGVmaW5lIGRlZmxhdGVfY29weXJpZ2h0ICAgICB6X2RlZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIGd6X2Vycm9yICAgICAgICAgICAgICB6X2d6X2Vycm9yCi0jICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4Ci0jICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKLSMgIGRlZmluZSBnemJ1ZmZlciAgICAgICAgICAgICAgel9nemJ1ZmZlcgotIyAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKLSMgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCi0jICBkZWZpbmUgZ3pjbG9zZV9yICAgICAgICAgICAgIHpfZ3pjbG9zZV9yCi0jICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93Ci0jICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKLSMgIGRlZmluZSBnemRvcGVuICAgICAgICAgICAgICAgel9nemRvcGVuCi0jICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKLSMgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCi0jICBkZWZpbmUgZ3pmbHVzaCAgICAgICAgICAgICAgIHpfZ3pmbHVzaAotIyAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YwotIyAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cwotIyAgZGVmaW5lIGd6b2Zmc2V0ICAgICAgICAgICAgICB6X2d6b2Zmc2V0Ci0jICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAotIyAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgotIyAgZGVmaW5lIGd6b3BlbjY0ICAgICAgICAgICAgICB6X2d6b3BlbjY0Ci0jICBkZWZpbmUgZ3pwcmludGYgICAgICAgICAgICAgIHpfZ3pwcmludGYKLSMgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKLSMgIGRlZmluZSBnenB1dHMgICAgICAgICAgICAgICAgel9nenB1dHMKLSMgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKLSMgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAotIyAgZGVmaW5lIGd6c2VlayAgICAgICAgICAgICAgICB6X2d6c2VlawotIyAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0Ci0jICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKLSMgIGRlZmluZSBnenRlbGwgICAgICAgICAgICAgICAgel9nenRlbGwKLSMgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAotIyAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCi0jICBkZWZpbmUgZ3p3cml0ZSAgICAgICAgICAgICAgIHpfZ3p3cml0ZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKKyMgICAgZGVmaW5lIGd6X2ludG1heCAgICAgICAgICAgICB6X2d6X2ludG1heAorIyAgICBkZWZpbmUgZ3pfc3Ryd2luZXJyb3IgICAgICAgIHpfZ3pfc3Ryd2luZXJyb3IKKyMgICAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCisjICAgIGRlZmluZSBnemNsZWFyZXJyICAgICAgICAgICAgel9nemNsZWFyZXJyCisjICAgIGRlZmluZSBnemNsb3NlICAgICAgICAgICAgICAgel9nemNsb3NlCisjICAgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKKyMgICAgZGVmaW5lIGd6Y2xvc2VfdyAgICAgICAgICAgICB6X2d6Y2xvc2VfdworIyAgICBkZWZpbmUgZ3pkaXJlY3QgICAgICAgICAgICAgIHpfZ3pkaXJlY3QKKyMgICAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KKyMgICAgZGVmaW5lIGd6ZW9mICAgICAgICAgICAgICAgICB6X2d6ZW9mCisjICAgIGRlZmluZSBnemVycm9yICAgICAgICAgICAgICAgel9nemVycm9yCisjICAgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCisjICAgIGRlZmluZSBnemdldGMgICAgICAgICAgICAgICAgel9nemdldGMKKyMgICAgZGVmaW5lIGd6Z2V0Y18gICAgICAgICAgICAgICB6X2d6Z2V0Y18KKyMgICAgZGVmaW5lIGd6Z2V0cyAgICAgICAgICAgICAgICB6X2d6Z2V0cworIyAgICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0NjQgICAgICAgICAgICB6X2d6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGd6b3BlbiAgICAgICAgICAgICAgICB6X2d6b3BlbgorIyAgICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKKyMgICAgaWZkZWYgX1dJTjMyCisjICAgICAgZGVmaW5lIGd6b3Blbl93ICAgICAgICAgICAgICB6X2d6b3Blbl93CisjICAgIGVuZGlmCisjICAgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgorIyAgICBkZWZpbmUgZ3p2cHJpbnRmICAgICAgICAgICAgIHpfZ3p2cHJpbnRmCisjICAgIGRlZmluZSBnenB1dGMgICAgICAgICAgICAgICAgel9nenB1dGMKKyMgICAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cworIyAgICBkZWZpbmUgZ3pyZWFkICAgICAgICAgICAgICAgIHpfZ3pyZWFkCisjICAgIGRlZmluZSBnenJld2luZCAgICAgICAgICAgICAgel9nenJld2luZAorIyAgICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCisjICAgIGRlZmluZSBnenNlZWs2NCAgICAgICAgICAgICAgel9nenNlZWs2NAorIyAgICBkZWZpbmUgZ3pzZXRwYXJhbXMgICAgICAgICAgIHpfZ3pzZXRwYXJhbXMKKyMgICAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAorIyAgICBkZWZpbmUgZ3p0ZWxsNjQgICAgICAgICAgICAgIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6dW5nZXRjICAgICAgICAgICAgICB6X2d6dW5nZXRjCisjICAgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBlbmRpZgogIyAgZGVmaW5lIGluZmxhdGUgICAgICAgICAgICAgICB6X2luZmxhdGUKICMgIGRlZmluZSBpbmZsYXRlQmFjayAgICAgICAgICAgel9pbmZsYXRlQmFjawogIyAgZGVmaW5lIGluZmxhdGVCYWNrRW5kICAgICAgICB6X2luZmxhdGVCYWNrRW5kCkBAIC05NCwxNiArMTA3LDIyIEBACiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0ICAgICAgICAgIHpfaW5mbGF0ZVJlc2V0CiAjICBkZWZpbmUgaW5mbGF0ZVJlc2V0MiAgICAgICAgIHpfaW5mbGF0ZVJlc2V0MgogIyAgZGVmaW5lIGluZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2luZmxhdGVTZXREaWN0aW9uYXJ5CisjICBkZWZpbmUgaW5mbGF0ZUdldERpY3Rpb25hcnkgIHpfaW5mbGF0ZUdldERpY3Rpb25hcnkKICMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwogIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKICMgIGRlZmluZSBpbmZsYXRlVW5kZXJtaW5lICAgICAgel9pbmZsYXRlVW5kZXJtaW5lCisjICBkZWZpbmUgaW5mbGF0ZVJlc2V0S2VlcCAgICAgIHpfaW5mbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGluZmxhdGVfY29weXJpZ2h0ICAgICB6X2luZmxhdGVfY29weXJpZ2h0CiAjICBkZWZpbmUgaW5mbGF0ZV9mYXN0ICAgICAgICAgIHpfaW5mbGF0ZV9mYXN0CiAjICBkZWZpbmUgaW5mbGF0ZV90YWJsZSAgICAgICAgIHpfaW5mbGF0ZV90YWJsZQotIyAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIHVuY29tcHJlc3MgICAgICAgICAgICB6X3VuY29tcHJlc3MKKyMgIGVuZGlmCiAjICBkZWZpbmUgekVycm9yICAgICAgICAgICAgICAgIHpfekVycm9yCi0jICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYwotIyAgZGVmaW5lIHpjZnJlZSAgICAgICAgICAgICAgICB6X3pjZnJlZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgemNhbGxvYyAgICAgICAgICAgICAgIHpfemNhbGxvYworIyAgICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBlbmRpZgogIyAgZGVmaW5lIHpsaWJDb21waWxlRmxhZ3MgICAgICB6X3psaWJDb21waWxlRmxhZ3MKICMgIGRlZmluZSB6bGliVmVyc2lvbiAgICAgICAgICAgel96bGliVmVyc2lvbgogCkBAIC0xMTMsNyArMTMyLDkgQEAKICMgIGRlZmluZSBhbGxvY19mdW5jICAgICAgICAgICAgel9hbGxvY19mdW5jCiAjICBkZWZpbmUgY2hhcmYgICAgICAgICAgICAgICAgIHpfY2hhcmYKICMgIGRlZmluZSBmcmVlX2Z1bmMgICAgICAgICAgICAgel9mcmVlX2Z1bmMKLSMgIGRlZmluZSBnekZpbGUgICAgICAgICAgICAgICAgel9nekZpbGUKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgZW5kaWYKICMgIGRlZmluZSBnel9oZWFkZXIgICAgICAgICAgICAgel9nel9oZWFkZXIKICMgIGRlZmluZSBnel9oZWFkZXJwICAgICAgICAgICAgel9nel9oZWFkZXJwCiAjICBkZWZpbmUgaW5fZnVuYyAgICAgICAgICAgICAgIHpfaW5fZnVuYwpAQCAtMTk5LDYgKzIyMCwxMiBAQAogIyAgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChaTElCX0NPTlNUKSAmJiAhZGVmaW5lZCh6X2NvbnN0KQorIyAgZGVmaW5lIHpfY29uc3QgY29uc3QKKyNlbHNlCisjICBkZWZpbmUgel9jb25zdAorI2VuZGlmCisKIC8qIFNvbWUgTWFjIGNvbXBpbGVycyBtZXJnZSBhbGwgLmggZmlsZXMgaW5jb3JyZWN0bHk6ICovCiAjaWYgZGVmaW5lZChfX01XRVJLU19fKXx8ZGVmaW5lZChhcHBsZWMpfHxkZWZpbmVkKFRISU5LX0MpfHxkZWZpbmVkKF9fU0NfXykKICMgIGRlZmluZSBOT19EVU1NWV9ERUNMCkBAIC0yNDUsNiArMjcyLDE0IEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZm5kZWYgWl9BUkcgLyogZnVuY3Rpb24gcHJvdG90eXBlcyBmb3Igc3RkYXJnICovCisjICBpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgIGFyZ3MKKyMgIGVsc2UKKyMgICAgZGVmaW5lIFpfQVJHKGFyZ3MpICAoKQorIyAgZW5kaWYKKyNlbmRpZgorCiAvKiBUaGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGZvciBGQVIgYXJlIG5lZWRlZCBvbmx5IGZvciBNU0RPUyBtaXhlZAogICogbW9kZWwgcHJvZ3JhbW1pbmcgKHNtYWxsIG9yIG1lZGl1bSBtb2RlbCB3aXRoIHNvbWUgZmFyIGFsbG9jYXRpb25zKS4KICAqIFRoaXMgd2FzIHRlc3RlZCBvbmx5IHdpdGggTVNDOyBmb3Igb3RoZXIgTVNET1MgY29tcGlsZXJzIHlvdSBtYXkgaGF2ZQpAQCAtMzU4LDEyICszOTMsNDcgQEAKICAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7CiAjZW5kaWYKIAorI2lmICFkZWZpbmVkKFpfVTQpICYmICFkZWZpbmVkKFpfU09MTykgJiYgZGVmaW5lZChTVERDKQorIyAgaW5jbHVkZSA8bGltaXRzLmg+CisjICBpZiAoVUlOVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZAorIyAgZWxpZiAoVUxPTkdfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoVVNIUlRfTUFYID09IDB4ZmZmZmZmZmZVTCkKKyMgICAgZGVmaW5lIFpfVTQgdW5zaWduZWQgc2hvcnQKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIFpfVTQKKyAgIHR5cGVkZWYgWl9VNCB6X2NyY190OworI2Vsc2UKKyAgIHR5cGVkZWYgdW5zaWduZWQgbG9uZyB6X2NyY190OworI2VuZGlmCisKICNpZmRlZiBIQVZFX1VOSVNURF9IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KICMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKICNlbmRpZgogCisjaWZkZWYgSEFWRV9TVERBUkdfSCAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9IQVZFX1NUREFSR19ICisjZW5kaWYKKwogI2lmZGVmIFNUREMKLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgICAgLyogZm9yIG9mZl90ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQorIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzdGRhcmcuaD4gICAgICAgICAvKiBmb3IgdmFfbGlzdCAqLworIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPiAgICAgICAgIC8qIGZvciB3Y2hhcl90ICovCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIGEgbGl0dGxlIHRyaWNrIHRvIGFjY29tbW9kYXRlIGJvdGggIiNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kCkBAIC0zNzIsMjEgKzQ0MiwzOCBAQAogICogYm90aCAiI3VuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UiIGFuZCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIDAiIGFzCiAgKiBlcXVpdmFsZW50bHkgcmVxdWVzdGluZyBubyA2NC1iaXQgb3BlcmF0aW9ucwogICovCi0jaWYgLV9MQVJHRUZJTEU2NF9TT1VSQ0UgLSAtMSA9PSAxCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKICMgIHVuZGVmIF9MQVJHRUZJTEU2NF9TT1VSQ0UKICNlbmRpZgogCi0jaWYgZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpIHx8IGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkKLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgICAgLyogZm9yIG9mZl90ICovCi0jICBlbmRpZgotIyAgaWZuZGVmIHpfb2ZmX3QKLSMgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAhZGVmaW5lZChaX0hBVkVfVU5JU1REX0gpCisjICBkZWZpbmUgWl9IQVZFX1VOSVNURF9ICisjZW5kaWYKKyNpZm5kZWYgWl9TT0xPCisjICBpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQorIyAgICBpbmNsdWRlIDx1bmlzdGQuaD4gICAgICAgICAvKiBmb3IgU0VFS18qLCBvZmZfdCwgYW5kIF9MRlM2NF9MQVJHRUZJTEUgKi8KKyMgICAgaWZkZWYgVk1TCisjICAgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAgIC8qIGZvciBvZmZfdCAqLworIyAgICBlbmRpZgorIyAgICBpZm5kZWYgel9vZmZfdAorIyAgICAgIGRlZmluZSB6X29mZl90IG9mZl90CisjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZm5kZWYgU0VFS19TRVQKKyNpZiBkZWZpbmVkKF9MRlM2NF9MQVJHRUZJTEUpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorIyAgZGVmaW5lIFpfTEZTNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9MQVJHRTY0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX0ZJTEVfT0ZGU0VUX0JJVFMpICYmIF9GSUxFX09GRlNFVF9CSVRTLTAgPT0gNjQgJiYgZGVmaW5lZChaX0xGUzY0KQorIyAgZGVmaW5lIFpfV0FOVDY0CisjZW5kaWYKKworI2lmICFkZWZpbmVkKFNFRUtfU0VUKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBkZWZpbmUgU0VFS19TRVQgICAgICAgIDAgICAgICAgLyogU2VlayBmcm9tIGJlZ2lubmluZyBvZiBmaWxlLiAgKi8KICMgIGRlZmluZSBTRUVLX0NVUiAgICAgICAgMSAgICAgICAvKiBTZWVrIGZyb20gY3VycmVudCBwb3NpdGlvbi4gICovCiAjICBkZWZpbmUgU0VFS19FTkQgICAgICAgIDIgICAgICAgLyogU2V0IGZpbGUgcG9pbnRlciB0byBFT0YgcGx1cyAib2Zmc2V0IiAqLwpAQCAtMzk2LDE4ICs0ODMsMTQgQEAKICMgIGRlZmluZSB6X29mZl90IGxvbmcKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKSAmJiBfTEZTNjRfTEFSR0VGSUxFLTAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIGRlZmluZWQoWl9MQVJHRTY0KQogIyAgZGVmaW5lIHpfb2ZmNjRfdCBvZmY2NF90CiAjZWxzZQotIyAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19PUzQwMF9fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fTVZTX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKFpfU09MTykKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCBfX2ludDY0CisjICBlbHNlCisjICAgIGRlZmluZSB6X29mZjY0X3Qgel9vZmZfdAorIyAgZW5kaWYKICNlbmRpZgogCiAvKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3pjb25mLmguaW4gYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgppbmRleCAwMmNlNTZjLi45OTg3YTc3IDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgorKysgYi9Nb2R1bGVzL3psaWIvemNvbmYuaC5pbgpAQCAtMSw1ICsxLDUgQEAKIC8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xNSwxMSArMTUsMTMgQEAKICAqIHRoaXMgcGVybWFuZW50bHkgaW4gemNvbmYuaCB1c2luZyAiLi9jb25maWd1cmUgLS16cHJlZml4Ii4KICAqLwogI2lmZGVmIFpfUFJFRklYICAgICAvKiBtYXkgYmUgc2V0IHRvICNpZiAxIGJ5IC4vY29uZmlndXJlICovCisjICBkZWZpbmUgWl9QUkVGSVhfU0VUCiAKIC8qIGFsbCBsaW5rZWQgc3ltYm9scyAqLwogIyAgZGVmaW5lIF9kaXN0X2NvZGUgICAgICAgICAgICB6X19kaXN0X2NvZGUKICMgIGRlZmluZSBfbGVuZ3RoX2NvZGUgICAgICAgICAgel9fbGVuZ3RoX2NvZGUKICMgIGRlZmluZSBfdHJfYWxpZ24gICAgICAgICAgICAgel9fdHJfYWxpZ24KKyMgIGRlZmluZSBfdHJfZmx1c2hfYml0cyAgICAgICAgel9fdHJfZmx1c2hfYml0cwogIyAgZGVmaW5lIF90cl9mbHVzaF9ibG9jayAgICAgICB6X190cl9mbHVzaF9ibG9jawogIyAgZGVmaW5lIF90cl9pbml0ICAgICAgICAgICAgICB6X190cl9pbml0CiAjICBkZWZpbmUgX3RyX3N0b3JlZF9ibG9jayAgICAgIHpfX3RyX3N0b3JlZF9ibG9jawpAQCAtMjcsOSArMjksMTEgQEAKICMgIGRlZmluZSBhZGxlcjMyICAgICAgICAgICAgICAgel9hZGxlcjMyCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lICAgICAgIHpfYWRsZXIzMl9jb21iaW5lCiAjICBkZWZpbmUgYWRsZXIzMl9jb21iaW5lNjQgICAgIHpfYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgZGVmaW5lIGNvbXByZXNzICAgICAgICAgICAgICB6X2NvbXByZXNzCisjICAgIGRlZmluZSBjb21wcmVzczIgICAgICAgICAgICAgel9jb21wcmVzczIKKyMgICAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKKyMgIGVuZGlmCiAjICBkZWZpbmUgY3JjMzIgICAgICAgICAgICAgICAgIHpfY3JjMzIKICMgIGRlZmluZSBjcmMzMl9jb21iaW5lICAgICAgICAgel9jcmMzMl9jb21iaW5lCiAjICBkZWZpbmUgY3JjMzJfY29tYmluZTY0ICAgICAgIHpfY3JjMzJfY29tYmluZTY0CkBAIC00MCw0NCArNDQsNTMgQEAKICMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCiAjICBkZWZpbmUgZGVmbGF0ZUluaXRfICAgICAgICAgIHpfZGVmbGF0ZUluaXRfCiAjICBkZWZpbmUgZGVmbGF0ZVBhcmFtcyAgICAgICAgIHpfZGVmbGF0ZVBhcmFtcworIyAgZGVmaW5lIGRlZmxhdGVQZW5kaW5nICAgICAgICB6X2RlZmxhdGVQZW5kaW5nCiAjICBkZWZpbmUgZGVmbGF0ZVByaW1lICAgICAgICAgIHpfZGVmbGF0ZVByaW1lCiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICAgICAgICAgIHpfZGVmbGF0ZVJlc2V0CisjICBkZWZpbmUgZGVmbGF0ZVJlc2V0S2VlcCAgICAgIHpfZGVmbGF0ZVJlc2V0S2VlcAogIyAgZGVmaW5lIGRlZmxhdGVTZXREaWN0aW9uYXJ5ICB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZVNldEhlYWRlciAgICAgIHpfZGVmbGF0ZVNldEhlYWRlcgogIyAgZGVmaW5lIGRlZmxhdGVUdW5lICAgICAgICAgICB6X2RlZmxhdGVUdW5lCiAjICBkZWZpbmUgZGVmbGF0ZV9jb3B5cmlnaHQgICAgIHpfZGVmbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBnZXRfY3JjX3RhYmxlICAgICAgICAgel9nZXRfY3JjX3RhYmxlCi0jICBkZWZpbmUgZ3pfZXJyb3IgICAgICAgICAgICAgIHpfZ3pfZXJyb3IKLSMgIGRlZmluZSBnel9pbnRtYXggICAgICAgICAgICAgel9nel9pbnRtYXgKLSMgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgotIyAgZGVmaW5lIGd6YnVmZmVyICAgICAgICAgICAgICB6X2d6YnVmZmVyCi0jICBkZWZpbmUgZ3pjbGVhcmVyciAgICAgICAgICAgIHpfZ3pjbGVhcmVycgotIyAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKLSMgIGRlZmluZSBnemNsb3NlX3IgICAgICAgICAgICAgel9nemNsb3NlX3IKLSMgIGRlZmluZSBnemNsb3NlX3cgICAgICAgICAgICAgel9nemNsb3NlX3cKLSMgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAotIyAgZGVmaW5lIGd6ZG9wZW4gICAgICAgICAgICAgICB6X2d6ZG9wZW4KLSMgIGRlZmluZSBnemVvZiAgICAgICAgICAgICAgICAgel9nemVvZgotIyAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKLSMgIGRlZmluZSBnemZsdXNoICAgICAgICAgICAgICAgel9nemZsdXNoCi0jICBkZWZpbmUgZ3pnZXRjICAgICAgICAgICAgICAgIHpfZ3pnZXRjCi0jICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCi0jICBkZWZpbmUgZ3pvZmZzZXQgICAgICAgICAgICAgIHpfZ3pvZmZzZXQKLSMgIGRlZmluZSBnem9mZnNldDY0ICAgICAgICAgICAgel9nem9mZnNldDY0Ci0jICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCi0jICBkZWZpbmUgZ3pvcGVuNjQgICAgICAgICAgICAgIHpfZ3pvcGVuNjQKLSMgIGRlZmluZSBnenByaW50ZiAgICAgICAgICAgICAgel9nenByaW50ZgotIyAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YwotIyAgZGVmaW5lIGd6cHV0cyAgICAgICAgICAgICAgICB6X2d6cHV0cwotIyAgZGVmaW5lIGd6cmVhZCAgICAgICAgICAgICAgICB6X2d6cmVhZAotIyAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCi0jICBkZWZpbmUgZ3pzZWVrICAgICAgICAgICAgICAgIHpfZ3pzZWVrCi0jICBkZWZpbmUgZ3pzZWVrNjQgICAgICAgICAgICAgIHpfZ3pzZWVrNjQKLSMgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcwotIyAgZGVmaW5lIGd6dGVsbCAgICAgICAgICAgICAgICB6X2d6dGVsbAotIyAgZGVmaW5lIGd6dGVsbDY0ICAgICAgICAgICAgICB6X2d6dGVsbDY0Ci0jICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKLSMgIGRlZmluZSBnendyaXRlICAgICAgICAgICAgICAgel9nendyaXRlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSBnel9lcnJvciAgICAgICAgICAgICAgel9nel9lcnJvcgorIyAgICBkZWZpbmUgZ3pfaW50bWF4ICAgICAgICAgICAgIHpfZ3pfaW50bWF4CisjICAgIGRlZmluZSBnel9zdHJ3aW5lcnJvciAgICAgICAgel9nel9zdHJ3aW5lcnJvcgorIyAgICBkZWZpbmUgZ3pidWZmZXIgICAgICAgICAgICAgIHpfZ3pidWZmZXIKKyMgICAgZGVmaW5lIGd6Y2xlYXJlcnIgICAgICAgICAgICB6X2d6Y2xlYXJlcnIKKyMgICAgZGVmaW5lIGd6Y2xvc2UgICAgICAgICAgICAgICB6X2d6Y2xvc2UKKyMgICAgZGVmaW5lIGd6Y2xvc2VfciAgICAgICAgICAgICB6X2d6Y2xvc2VfcgorIyAgICBkZWZpbmUgZ3pjbG9zZV93ICAgICAgICAgICAgIHpfZ3pjbG9zZV93CisjICAgIGRlZmluZSBnemRpcmVjdCAgICAgICAgICAgICAgel9nemRpcmVjdAorIyAgICBkZWZpbmUgZ3pkb3BlbiAgICAgICAgICAgICAgIHpfZ3pkb3BlbgorIyAgICBkZWZpbmUgZ3plb2YgICAgICAgICAgICAgICAgIHpfZ3plb2YKKyMgICAgZGVmaW5lIGd6ZXJyb3IgICAgICAgICAgICAgICB6X2d6ZXJyb3IKKyMgICAgZGVmaW5lIGd6Zmx1c2ggICAgICAgICAgICAgICB6X2d6Zmx1c2gKKyMgICAgZGVmaW5lIGd6Z2V0YyAgICAgICAgICAgICAgICB6X2d6Z2V0YworIyAgICBkZWZpbmUgZ3pnZXRjXyAgICAgICAgICAgICAgIHpfZ3pnZXRjXworIyAgICBkZWZpbmUgZ3pnZXRzICAgICAgICAgICAgICAgIHpfZ3pnZXRzCisjICAgIGRlZmluZSBnem9mZnNldCAgICAgICAgICAgICAgel9nem9mZnNldAorIyAgICBkZWZpbmUgZ3pvZmZzZXQ2NCAgICAgICAgICAgIHpfZ3pvZmZzZXQ2NAorIyAgICBkZWZpbmUgZ3pvcGVuICAgICAgICAgICAgICAgIHpfZ3pvcGVuCisjICAgIGRlZmluZSBnem9wZW42NCAgICAgICAgICAgICAgel9nem9wZW42NAorIyAgICBpZmRlZiBfV0lOMzIKKyMgICAgICBkZWZpbmUgZ3pvcGVuX3cgICAgICAgICAgICAgIHpfZ3pvcGVuX3cKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIGd6cHJpbnRmICAgICAgICAgICAgICB6X2d6cHJpbnRmCisjICAgIGRlZmluZSBnenZwcmludGYgICAgICAgICAgICAgel9nenZwcmludGYKKyMgICAgZGVmaW5lIGd6cHV0YyAgICAgICAgICAgICAgICB6X2d6cHV0YworIyAgICBkZWZpbmUgZ3pwdXRzICAgICAgICAgICAgICAgIHpfZ3pwdXRzCisjICAgIGRlZmluZSBnenJlYWQgICAgICAgICAgICAgICAgel9nenJlYWQKKyMgICAgZGVmaW5lIGd6cmV3aW5kICAgICAgICAgICAgICB6X2d6cmV3aW5kCisjICAgIGRlZmluZSBnenNlZWsgICAgICAgICAgICAgICAgel9nenNlZWsKKyMgICAgZGVmaW5lIGd6c2VlazY0ICAgICAgICAgICAgICB6X2d6c2VlazY0CisjICAgIGRlZmluZSBnenNldHBhcmFtcyAgICAgICAgICAgel9nenNldHBhcmFtcworIyAgICBkZWZpbmUgZ3p0ZWxsICAgICAgICAgICAgICAgIHpfZ3p0ZWxsCisjICAgIGRlZmluZSBnenRlbGw2NCAgICAgICAgICAgICAgel9nenRlbGw2NAorIyAgICBkZWZpbmUgZ3p1bmdldGMgICAgICAgICAgICAgIHpfZ3p1bmdldGMKKyMgICAgZGVmaW5lIGd6d3JpdGUgICAgICAgICAgICAgICB6X2d6d3JpdGUKKyMgIGVuZGlmCiAjICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQogIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCiAjICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKQEAgLTkyLDE2ICsxMDUsMjIgQEAKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQgICAgICAgICAgel9pbmZsYXRlUmVzZXQKICMgIGRlZmluZSBpbmZsYXRlUmVzZXQyICAgICAgICAgel9pbmZsYXRlUmVzZXQyCiAjICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKKyMgIGRlZmluZSBpbmZsYXRlR2V0RGljdGlvbmFyeSAgel9pbmZsYXRlR2V0RGljdGlvbmFyeQogIyAgZGVmaW5lIGluZmxhdGVTeW5jICAgICAgICAgICB6X2luZmxhdGVTeW5jCiAjICBkZWZpbmUgaW5mbGF0ZVN5bmNQb2ludCAgICAgIHpfaW5mbGF0ZVN5bmNQb2ludAogIyAgZGVmaW5lIGluZmxhdGVVbmRlcm1pbmUgICAgICB6X2luZmxhdGVVbmRlcm1pbmUKKyMgIGRlZmluZSBpbmZsYXRlUmVzZXRLZWVwICAgICAgel9pbmZsYXRlUmVzZXRLZWVwCiAjICBkZWZpbmUgaW5mbGF0ZV9jb3B5cmlnaHQgICAgIHpfaW5mbGF0ZV9jb3B5cmlnaHQKICMgIGRlZmluZSBpbmZsYXRlX2Zhc3QgICAgICAgICAgel9pbmZsYXRlX2Zhc3QKICMgIGRlZmluZSBpbmZsYXRlX3RhYmxlICAgICAgICAgel9pbmZsYXRlX3RhYmxlCi0jICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgdW5jb21wcmVzcyAgICAgICAgICAgIHpfdW5jb21wcmVzcworIyAgZW5kaWYKICMgIGRlZmluZSB6RXJyb3IgICAgICAgICAgICAgICAgel96RXJyb3IKLSMgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCi0jICBkZWZpbmUgemNmcmVlICAgICAgICAgICAgICAgIHpfemNmcmVlCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGRlZmluZSB6Y2FsbG9jICAgICAgICAgICAgICAgel96Y2FsbG9jCisjICAgIGRlZmluZSB6Y2ZyZWUgICAgICAgICAgICAgICAgel96Y2ZyZWUKKyMgIGVuZGlmCiAjICBkZWZpbmUgemxpYkNvbXBpbGVGbGFncyAgICAgIHpfemxpYkNvbXBpbGVGbGFncwogIyAgZGVmaW5lIHpsaWJWZXJzaW9uICAgICAgICAgICB6X3psaWJWZXJzaW9uCiAKQEAgLTExMSw3ICsxMzAsOSBAQAogIyAgZGVmaW5lIGFsbG9jX2Z1bmMgICAgICAgICAgICB6X2FsbG9jX2Z1bmMKICMgIGRlZmluZSBjaGFyZiAgICAgICAgICAgICAgICAgel9jaGFyZgogIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGd6RmlsZSAgICAgICAgICAgICAgICB6X2d6RmlsZQorIyAgaWZuZGVmIFpfU09MTworIyAgICBkZWZpbmUgZ3pGaWxlICAgICAgICAgICAgICAgIHpfZ3pGaWxlCisjICBlbmRpZgogIyAgZGVmaW5lIGd6X2hlYWRlciAgICAgICAgICAgICB6X2d6X2hlYWRlcgogIyAgZGVmaW5lIGd6X2hlYWRlcnAgICAgICAgICAgICB6X2d6X2hlYWRlcnAKICMgIGRlZmluZSBpbl9mdW5jICAgICAgICAgICAgICAgel9pbl9mdW5jCkBAIC0xOTcsNiArMjE4LDEyIEBACiAjICBlbmRpZgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKFpMSUJfQ09OU1QpICYmICFkZWZpbmVkKHpfY29uc3QpCisjICBkZWZpbmUgel9jb25zdCBjb25zdAorI2Vsc2UKKyMgIGRlZmluZSB6X2NvbnN0CisjZW5kaWYKKwogLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KICNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQogIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKQEAgLTI0Myw2ICsyNzAsMTQgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAorI2lmbmRlZiBaX0FSRyAvKiBmdW5jdGlvbiBwcm90b3R5cGVzIGZvciBzdGRhcmcgKi8KKyMgIGlmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICAgIGRlZmluZSBaX0FSRyhhcmdzKSAgYXJncworIyAgZWxzZQorIyAgICBkZWZpbmUgWl9BUkcoYXJncykgICgpCisjICBlbmRpZgorI2VuZGlmCisKIC8qIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgZm9yIEZBUiBhcmUgbmVlZGVkIG9ubHkgZm9yIE1TRE9TIG1peGVkCiAgKiBtb2RlbCBwcm9ncmFtbWluZyAoc21hbGwgb3IgbWVkaXVtIG1vZGVsIHdpdGggc29tZSBmYXIgYWxsb2NhdGlvbnMpLgogICogVGhpcyB3YXMgdGVzdGVkIG9ubHkgd2l0aCBNU0M7IGZvciBvdGhlciBNU0RPUyBjb21waWxlcnMgeW91IG1heSBoYXZlCkBAIC0zNTYsMTIgKzM5MSw0NyBAQAogICAgdHlwZWRlZiBCeXRlICAgICAgICp2b2lkcDsKICNlbmRpZgogCisjaWYgIWRlZmluZWQoWl9VNCkgJiYgIWRlZmluZWQoWl9TT0xPKSAmJiBkZWZpbmVkKFNUREMpCisjICBpbmNsdWRlIDxsaW1pdHMuaD4KKyMgIGlmIChVSU5UX01BWCA9PSAweGZmZmZmZmZmVUwpCisjICAgIGRlZmluZSBaX1U0IHVuc2lnbmVkCisjICBlbGlmIChVTE9OR19NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBsb25nCisjICBlbGlmIChVU0hSVF9NQVggPT0gMHhmZmZmZmZmZlVMKQorIyAgICBkZWZpbmUgWl9VNCB1bnNpZ25lZCBzaG9ydAorIyAgZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgWl9VNAorICAgdHlwZWRlZiBaX1U0IHpfY3JjX3Q7CisjZWxzZQorICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHpfY3JjX3Q7CisjZW5kaWYKKwogI2lmZGVmIEhBVkVfVU5JU1REX0ggICAgLyogbWF5IGJlIHNldCB0byAjaWYgMSBieSAuL2NvbmZpZ3VyZSAqLwogIyAgZGVmaW5lIFpfSEFWRV9VTklTVERfSAogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NUREFSR19IICAgIC8qIG1heSBiZSBzZXQgdG8gI2lmIDEgYnkgLi9jb25maWd1cmUgKi8KKyMgIGRlZmluZSBaX0hBVkVfU1REQVJHX0gKKyNlbmRpZgorCiAjaWZkZWYgU1REQwotIyAgaW5jbHVkZSA8c3lzL3R5cGVzLmg+ICAgIC8qIGZvciBvZmZfdCAqLworIyAgaWZuZGVmIFpfU09MTworIyAgICBpbmNsdWRlIDxzeXMvdHlwZXMuaD4gICAgICAvKiBmb3Igb2ZmX3QgKi8KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGluY2x1ZGUgPHN0ZGFyZy5oPiAgICAgICAgIC8qIGZvciB2YV9saXN0ICovCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyMgIGlmbmRlZiBaX1NPTE8KKyMgICAgaW5jbHVkZSA8c3RkZGVmLmg+ICAgICAgICAgLyogZm9yIHdjaGFyX3QgKi8KKyMgIGVuZGlmCiAjZW5kaWYKIAogLyogYSBsaXR0bGUgdHJpY2sgdG8gYWNjb21tb2RhdGUgYm90aCAiI2RlZmluZSBfTEFSR0VGSUxFNjRfU09VUkNFIiBhbmQKQEAgLTM3MCwyMSArNDQwLDM4IEBACiAgKiBib3RoICIjdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRSIgYW5kICIjZGVmaW5lIF9MQVJHRUZJTEU2NF9TT1VSQ0UgMCIgYXMKICAqIGVxdWl2YWxlbnRseSByZXF1ZXN0aW5nIG5vIDY0LWJpdCBvcGVyYXRpb25zCiAgKi8KLSNpZiAtX0xBUkdFRklMRTY0X1NPVVJDRSAtIC0xID09IDEKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIC1fTEFSR0VGSUxFNjRfU09VUkNFIC0gLTEgPT0gMQogIyAgdW5kZWYgX0xBUkdFRklMRTY0X1NPVVJDRQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkgfHwgZGVmaW5lZChfTEFSR0VGSUxFNjRfU09VUkNFKQotIyAgaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgIC8qIGZvciBTRUVLXyogYW5kIG9mZl90ICovCi0jICBpZmRlZiBWTVMKLSMgICAgaW5jbHVkZSA8dW5peGlvLmg+ICAgICAvKiBmb3Igb2ZmX3QgKi8KLSMgIGVuZGlmCi0jICBpZm5kZWYgel9vZmZfdAotIyAgICBkZWZpbmUgel9vZmZfdCBvZmZfdAorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmICFkZWZpbmVkKFpfSEFWRV9VTklTVERfSCkKKyMgIGRlZmluZSBaX0hBVkVfVU5JU1REX0gKKyNlbmRpZgorI2lmbmRlZiBaX1NPTE8KKyMgIGlmIGRlZmluZWQoWl9IQVZFX1VOSVNURF9IKSB8fCBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpCisjICAgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAgICAgIC8qIGZvciBTRUVLXyosIG9mZl90LCBhbmQgX0xGUzY0X0xBUkdFRklMRSAqLworIyAgICBpZmRlZiBWTVMKKyMgICAgICBpbmNsdWRlIDx1bml4aW8uaD4gICAgICAgLyogZm9yIG9mZl90ICovCisjICAgIGVuZGlmCisjICAgIGlmbmRlZiB6X29mZl90CisjICAgICAgZGVmaW5lIHpfb2ZmX3Qgb2ZmX3QKKyMgICAgZW5kaWYKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmbmRlZiBTRUVLX1NFVAorI2lmIGRlZmluZWQoX0xGUzY0X0xBUkdFRklMRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjICBkZWZpbmUgWl9MRlM2NAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIGRlZmluZWQoWl9MRlM2NCkKKyMgIGRlZmluZSBaX0xBUkdFNjQKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfRklMRV9PRkZTRVRfQklUUykgJiYgX0ZJTEVfT0ZGU0VUX0JJVFMtMCA9PSA2NCAmJiBkZWZpbmVkKFpfTEZTNjQpCisjICBkZWZpbmUgWl9XQU5UNjQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0VFS19TRVQpICYmICFkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwogIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KICMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCkBAIC0zOTQsMTggKzQ4MSwxNCBAQAogIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9MQVJHRUZJTEU2NF9TT1VSQ0UpICYmIF9MRlM2NF9MQVJHRUZJTEUtMAorI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChaX0xBUkdFNjQpCiAjICBkZWZpbmUgel9vZmY2NF90IG9mZjY0X3QKICNlbHNlCi0jICBkZWZpbmUgel9vZmY2NF90IHpfb2ZmX3QKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKKyMgIGlmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoWl9TT0xPKQorIyAgICBkZWZpbmUgel9vZmY2NF90IF9faW50NjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHpfb2ZmNjRfdCB6X29mZl90CisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemNvbmYuaW4uaCBiL01vZHVsZXMvemxpYi96Y29uZi5pbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwM2E5NDMxLi4wMDAwMDAwCi0tLSBhL01vZHVsZXMvemxpYi96Y29uZi5pbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMyICswLDAgQEAKLS8qIHpjb25mLmggLS0gY29uZmlndXJhdGlvbiBvZiB0aGUgemxpYiBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwNSBKZWFuLWxvdXAgR2FpbGx5LgotICogRm9yIGNvbmRpdGlvbnMgb2YgZGlzdHJpYnV0aW9uIGFuZCB1c2UsIHNlZSBjb3B5cmlnaHQgbm90aWNlIGluIHpsaWIuaAotICovCi0KLS8qIEAoIykgJElkJCAqLwotCi0jaWZuZGVmIFpDT05GX0gKLSNkZWZpbmUgWkNPTkZfSAotCi0vKgotICogSWYgeW91ICpyZWFsbHkqIG5lZWQgYSB1bmlxdWUgcHJlZml4IGZvciBhbGwgdHlwZXMgYW5kIGxpYnJhcnkgZnVuY3Rpb25zLAotICogY29tcGlsZSB3aXRoIC1EWl9QUkVGSVguIFRoZSAic3RhbmRhcmQiIHpsaWIgc2hvdWxkIGJlIGNvbXBpbGVkIHdpdGhvdXQgaXQuCi0gKi8KLSNpZmRlZiBaX1BSRUZJWAotIyAgZGVmaW5lIGRlZmxhdGVJbml0XyAgICAgICAgICB6X2RlZmxhdGVJbml0XwotIyAgZGVmaW5lIGRlZmxhdGUgICAgICAgICAgICAgICB6X2RlZmxhdGUKLSMgIGRlZmluZSBkZWZsYXRlRW5kICAgICAgICAgICAgel9kZWZsYXRlRW5kCi0jICBkZWZpbmUgaW5mbGF0ZUluaXRfICAgICAgICAgIHpfaW5mbGF0ZUluaXRfCi0jICBkZWZpbmUgaW5mbGF0ZSAgICAgICAgICAgICAgIHpfaW5mbGF0ZQotIyAgZGVmaW5lIGluZmxhdGVFbmQgICAgICAgICAgICB6X2luZmxhdGVFbmQKLSMgIGRlZmluZSBkZWZsYXRlSW5pdDJfICAgICAgICAgel9kZWZsYXRlSW5pdDJfCi0jICBkZWZpbmUgZGVmbGF0ZVNldERpY3Rpb25hcnkgIHpfZGVmbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBkZWZsYXRlQ29weSAgICAgICAgICAgel9kZWZsYXRlQ29weQotIyAgZGVmaW5lIGRlZmxhdGVSZXNldCAgICAgICAgICB6X2RlZmxhdGVSZXNldAotIyAgZGVmaW5lIGRlZmxhdGVQYXJhbXMgICAgICAgICB6X2RlZmxhdGVQYXJhbXMKLSMgIGRlZmluZSBkZWZsYXRlQm91bmQgICAgICAgICAgel9kZWZsYXRlQm91bmQKLSMgIGRlZmluZSBkZWZsYXRlUHJpbWUgICAgICAgICAgel9kZWZsYXRlUHJpbWUKLSMgIGRlZmluZSBpbmZsYXRlSW5pdDJfICAgICAgICAgel9pbmZsYXRlSW5pdDJfCi0jICBkZWZpbmUgaW5mbGF0ZVNldERpY3Rpb25hcnkgIHpfaW5mbGF0ZVNldERpY3Rpb25hcnkKLSMgIGRlZmluZSBpbmZsYXRlU3luYyAgICAgICAgICAgel9pbmZsYXRlU3luYwotIyAgZGVmaW5lIGluZmxhdGVTeW5jUG9pbnQgICAgICB6X2luZmxhdGVTeW5jUG9pbnQKLSMgIGRlZmluZSBpbmZsYXRlQ29weSAgICAgICAgICAgel9pbmZsYXRlQ29weQotIyAgZGVmaW5lIGluZmxhdGVSZXNldCAgICAgICAgICB6X2luZmxhdGVSZXNldAotIyAgZGVmaW5lIGluZmxhdGVCYWNrICAgICAgICAgICB6X2luZmxhdGVCYWNrCi0jICBkZWZpbmUgaW5mbGF0ZUJhY2tFbmQgICAgICAgIHpfaW5mbGF0ZUJhY2tFbmQKLSMgIGRlZmluZSBjb21wcmVzcyAgICAgICAgICAgICAgel9jb21wcmVzcwotIyAgZGVmaW5lIGNvbXByZXNzMiAgICAgICAgICAgICB6X2NvbXByZXNzMgotIyAgZGVmaW5lIGNvbXByZXNzQm91bmQgICAgICAgICB6X2NvbXByZXNzQm91bmQKLSMgIGRlZmluZSB1bmNvbXByZXNzICAgICAgICAgICAgel91bmNvbXByZXNzCi0jICBkZWZpbmUgYWRsZXIzMiAgICAgICAgICAgICAgIHpfYWRsZXIzMgotIyAgZGVmaW5lIGNyYzMyICAgICAgICAgICAgICAgICB6X2NyYzMyCi0jICBkZWZpbmUgZ2V0X2NyY190YWJsZSAgICAgICAgIHpfZ2V0X2NyY190YWJsZQotIyAgZGVmaW5lIHpFcnJvciAgICAgICAgICAgICAgICB6X3pFcnJvcgotCi0jICBkZWZpbmUgYWxsb2NfZnVuYyAgICAgICAgICAgIHpfYWxsb2NfZnVuYwotIyAgZGVmaW5lIGZyZWVfZnVuYyAgICAgICAgICAgICB6X2ZyZWVfZnVuYwotIyAgZGVmaW5lIGluX2Z1bmMgICAgICAgICAgICAgICB6X2luX2Z1bmMKLSMgIGRlZmluZSBvdXRfZnVuYyAgICAgICAgICAgICAgel9vdXRfZnVuYwotIyAgZGVmaW5lIEJ5dGUgICAgICAgICAgICAgICAgICB6X0J5dGUKLSMgIGRlZmluZSB1SW50ICAgICAgICAgICAgICAgICAgel91SW50Ci0jICBkZWZpbmUgdUxvbmcgICAgICAgICAgICAgICAgIHpfdUxvbmcKLSMgIGRlZmluZSBCeXRlZiAgICAgICAgICAgICAgICAgel9CeXRlZgotIyAgZGVmaW5lIGNoYXJmICAgICAgICAgICAgICAgICB6X2NoYXJmCi0jICBkZWZpbmUgaW50ZiAgICAgICAgICAgICAgICAgIHpfaW50ZgotIyAgZGVmaW5lIHVJbnRmICAgICAgICAgICAgICAgICB6X3VJbnRmCi0jICBkZWZpbmUgdUxvbmdmICAgICAgICAgICAgICAgIHpfdUxvbmdmCi0jICBkZWZpbmUgdm9pZHBmICAgICAgICAgICAgICAgIHpfdm9pZHBmCi0jICBkZWZpbmUgdm9pZHAgICAgICAgICAgICAgICAgIHpfdm9pZHAKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKE1TRE9TKQotIyAgZGVmaW5lIE1TRE9TCi0jZW5kaWYKLSNpZiAoZGVmaW5lZChPU18yKSB8fCBkZWZpbmVkKF9fT1MyX18pKSAmJiAhZGVmaW5lZChPUzIpCi0jICBkZWZpbmUgT1MyCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9XSU5ET1dTKSAmJiAhZGVmaW5lZChXSU5ET1dTKQotIyAgZGVmaW5lIFdJTkRPV1MKLSNlbmRpZgotI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpIHx8IGRlZmluZWQoX19XSU4zMl9fKQotIyAgaWZuZGVmIFdJTjMyCi0jICAgIGRlZmluZSBXSU4zMgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIChkZWZpbmVkKE1TRE9TKSB8fCBkZWZpbmVkKE9TMikgfHwgZGVmaW5lZChXSU5ET1dTKSkgJiYgIWRlZmluZWQoV0lOMzIpCi0jICBpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19GTEFUX18pICYmICFkZWZpbmVkKF9fMzg2X18pCi0jICAgIGlmbmRlZiBTWVMxNkJJVAotIyAgICAgIGRlZmluZSBTWVMxNkJJVAotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKgotICogQ29tcGlsZSB3aXRoIC1ETUFYU0VHXzY0SyBpZiB0aGUgYWxsb2MgZnVuY3Rpb24gY2Fubm90IGFsbG9jYXRlIG1vcmUKLSAqIHRoYW4gNjRrIGJ5dGVzIGF0IGEgdGltZSAobmVlZGVkIG9uIHN5c3RlbXMgd2l0aCAxNi1iaXQgaW50KS4KLSAqLwotI2lmZGVmIFNZUzE2QklUCi0jICBkZWZpbmUgTUFYU0VHXzY0SwotI2VuZGlmCi0jaWZkZWYgTVNET1MKLSMgIGRlZmluZSBVTkFMSUdORURfT0sKLSNlbmRpZgotCi0jaWZkZWYgX19TVERDX1ZFUlNJT05fXwotIyAgaWZuZGVmIFNUREMKLSMgICAgZGVmaW5lIFNUREMKLSMgIGVuZGlmCi0jICBpZiBfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwKLSMgICAgaWZuZGVmIFNUREM5OQotIyAgICAgIGRlZmluZSBTVERDOTkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykpCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0jaWYgIWRlZmluZWQoU1REQykgJiYgKGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChNU0RPUykgfHwgZGVmaW5lZChXSU5ET1dTKSB8fCBkZWZpbmVkKFdJTjMyKSkKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChTVERDKSAmJiAoZGVmaW5lZChPUzIpIHx8IGRlZmluZWQoX19IT1NfQUlYX18pKQotIyAgZGVmaW5lIFNUREMKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCi0jICBkZWZpbmUgU1REQwotI2VuZGlmCi0KLSNpZm5kZWYgU1REQwotIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLwotIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogU29tZSBNYWMgY29tcGlsZXJzIG1lcmdlIGFsbCAuaCBmaWxlcyBpbmNvcnJlY3RseTogKi8KLSNpZiBkZWZpbmVkKF9fTVdFUktTX18pfHxkZWZpbmVkKGFwcGxlYyl8fGRlZmluZWQoVEhJTktfQyl8fGRlZmluZWQoX19TQ19fKQotIyAgZGVmaW5lIE5PX0RVTU1ZX0RFQ0wKLSNlbmRpZgotCi0vKiBNYXhpbXVtIHZhbHVlIGZvciBtZW1MZXZlbCBpbiBkZWZsYXRlSW5pdDIgKi8KLSNpZm5kZWYgTUFYX01FTV9MRVZFTAotIyAgaWZkZWYgTUFYU0VHXzY0SwotIyAgICBkZWZpbmUgTUFYX01FTV9MRVZFTCA4Ci0jICBlbHNlCi0jICAgIGRlZmluZSBNQVhfTUVNX0xFVkVMIDkKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogTWF4aW11bSB2YWx1ZSBmb3Igd2luZG93Qml0cyBpbiBkZWZsYXRlSW5pdDIgYW5kIGluZmxhdGVJbml0Mi4KLSAqIFdBUk5JTkc6IHJlZHVjaW5nIE1BWF9XQklUUyBtYWtlcyBtaW5pZ3ppcCB1bmFibGUgdG8gZXh0cmFjdCAuZ3ogZmlsZXMKLSAqIGNyZWF0ZWQgYnkgZ3ppcC4gKEZpbGVzIGNyZWF0ZWQgYnkgbWluaWd6aXAgY2FuIHN0aWxsIGJlIGV4dHJhY3RlZCBieQotICogZ3ppcC4pCi0gKi8KLSNpZm5kZWYgTUFYX1dCSVRTCi0jICBkZWZpbmUgTUFYX1dCSVRTICAgMTUgLyogMzJLIExaNzcgd2luZG93ICovCi0jZW5kaWYKLQotLyogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6Ci0gICAgICAgICAgICAoMSA8PCAod2luZG93Qml0cysyKSkgKyAgKDEgPDwgKG1lbUxldmVsKzkpKQotIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHM9MTUgICsgIDEyOEsgZm9yIG1lbUxldmVsID0gOCAgKGRlZmF1bHQgdmFsdWVzKQotIHBsdXMgYSBmZXcga2lsb2J5dGVzIGZvciBzbWFsbCBvYmplY3RzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVkdWNlCi0gdGhlIGRlZmF1bHQgbWVtb3J5IHJlcXVpcmVtZW50cyBmcm9tIDI1NksgdG8gMTI4SywgY29tcGlsZSB3aXRoCi0gICAgIG1ha2UgQ0ZMQUdTPSItTyAtRE1BWF9XQklUUz0xNCAtRE1BWF9NRU1fTEVWRUw9NyIKLSBPZiBjb3Vyc2UgdGhpcyB3aWxsIGdlbmVyYWxseSBkZWdyYWRlIGNvbXByZXNzaW9uICh0aGVyZSdzIG5vIGZyZWUgbHVuY2gpLgotCi0gICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgaW5mbGF0ZSBhcmUgKGluIGJ5dGVzKSAxIDw8IHdpbmRvd0JpdHMKLSB0aGF0IGlzLCAzMksgZm9yIHdpbmRvd0JpdHM9MTUgKGRlZmF1bHQgdmFsdWUpIHBsdXMgYSBmZXcga2lsb2J5dGVzCi0gZm9yIHNtYWxsIG9iamVjdHMuCi0qLwotCi0gICAgICAgICAgICAgICAgICAgICAgICAvKiBUeXBlIGRlY2xhcmF0aW9ucyAqLwotCi0jaWZuZGVmIE9GIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgKi8KLSMgIGlmZGVmIFNUREMKLSMgICAgZGVmaW5lIE9GKGFyZ3MpICBhcmdzCi0jICBlbHNlCi0jICAgIGRlZmluZSBPRihhcmdzKSAgKCkKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBmb3IgRkFSIGFyZSBuZWVkZWQgb25seSBmb3IgTVNET1MgbWl4ZWQKLSAqIG1vZGVsIHByb2dyYW1taW5nIChzbWFsbCBvciBtZWRpdW0gbW9kZWwgd2l0aCBzb21lIGZhciBhbGxvY2F0aW9ucykuCi0gKiBUaGlzIHdhcyB0ZXN0ZWQgb25seSB3aXRoIE1TQzsgZm9yIG90aGVyIE1TRE9TIGNvbXBpbGVycyB5b3UgbWF5IGhhdmUKLSAqIHRvIGRlZmluZSBOT19NRU1DUFkgaW4genV0aWwuaC4gIElmIHlvdSBkb24ndCBuZWVkIHRoZSBtaXhlZCBtb2RlbCwKLSAqIGp1c3QgZGVmaW5lIEZBUiB0byBiZSBlbXB0eS4KLSAqLwotI2lmZGVmIFNZUzE2QklUCi0jICBpZiBkZWZpbmVkKE1fSTg2U00pIHx8IGRlZmluZWQoTV9JODZNTSkKLSAgICAgLyogTVNDIHNtYWxsIG9yIG1lZGl1bSBtb2RlbCAqLwotIyAgICBkZWZpbmUgU01BTExfTUVESVVNCi0jICAgIGlmZGVmIF9NU0NfVkVSCi0jICAgICAgZGVmaW5lIEZBUiBfZmFyCi0jICAgIGVsc2UKLSMgICAgICBkZWZpbmUgRkFSIGZhcgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmIChkZWZpbmVkKF9fU01BTExfXykgfHwgZGVmaW5lZChfX01FRElVTV9fKSkKLSAgICAgLyogVHVyYm8gQyBzbWFsbCBvciBtZWRpdW0gbW9kZWwgKi8KLSMgICAgZGVmaW5lIFNNQUxMX01FRElVTQotIyAgICBpZmRlZiBfX0JPUkxBTkRDX18KLSMgICAgICBkZWZpbmUgRkFSIF9mYXIKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBGQVIgZmFyCi0jICAgIGVuZGlmCi0jICBlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFdJTkRPV1MpIHx8IGRlZmluZWQoV0lOMzIpCi0gICAvKiBJZiBidWlsZGluZyBvciB1c2luZyB6bGliIGFzIGEgRExMLCBkZWZpbmUgWkxJQl9ETEwuCi0gICAgKiBUaGlzIGlzIG5vdCBtYW5kYXRvcnksIGJ1dCBpdCBvZmZlcnMgYSBsaXR0bGUgcGVyZm9ybWFuY2UgaW5jcmVhc2UuCi0gICAgKi8KLSMgIGlmZGVmIFpMSUJfRExMCi0jICAgIGlmIGRlZmluZWQoV0lOMzIpICYmICghZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IChfX0JPUkxBTkRDX18gPj0gMHg1MDApKQotIyAgICAgIGlmZGVmIFpMSUJfSU5URVJOQUwKLSMgICAgICAgIGRlZmluZSBaRVhURVJOIGV4dGVybiBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgICBlbHNlCi0jICAgICAgICBkZWZpbmUgWkVYVEVSTiBleHRlcm4gX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZW5kaWYKLSMgICAgZW5kaWYKLSMgIGVuZGlmICAvKiBaTElCX0RMTCAqLwotICAgLyogSWYgYnVpbGRpbmcgb3IgdXNpbmcgemxpYiB3aXRoIHRoZSBXSU5BUEkvV0lOQVBJViBjYWxsaW5nIGNvbnZlbnRpb24sCi0gICAgKiBkZWZpbmUgWkxJQl9XSU5BUEkuCi0gICAgKiBDYXV0aW9uOiB0aGUgc3RhbmRhcmQgWkxJQjEuRExMIGlzIE5PVCBjb21waWxlZCB1c2luZyBaTElCX1dJTkFQSS4KLSAgICAqLwotIyAgaWZkZWYgWkxJQl9XSU5BUEkKLSMgICAgaWZkZWYgRkFSCi0jICAgICAgdW5kZWYgRkFSCi0jICAgIGVuZGlmCi0jICAgIGluY2x1ZGUgPHdpbmRvd3MuaD4KLSAgICAgLyogTm8gbmVlZCBmb3IgX2V4cG9ydCwgdXNlIFpMSUIuREVGIGluc3RlYWQuICovCi0gICAgIC8qIEZvciBjb21wbGV0ZSBXaW5kb3dzIGNvbXBhdGliaWxpdHksIHVzZSBXSU5BUEksIG5vdCBfX3N0ZGNhbGwuICovCi0jICAgIGRlZmluZSBaRVhQT1JUIFdJTkFQSQotIyAgICBpZmRlZiBXSU4zMgotIyAgICAgIGRlZmluZSBaRVhQT1JUVkEgV0lOQVBJVgotIyAgICBlbHNlCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBGQVIgQ0RFQ0wKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9fQkVPU19fKQotIyAgaWZkZWYgWkxJQl9ETEwKLSMgICAgaWZkZWYgWkxJQl9JTlRFUk5BTAotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxleHBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSMgICAgZWxzZQotIyAgICAgIGRlZmluZSBaRVhQT1JUICAgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0jICAgICAgZGVmaW5lIFpFWFBPUlRWQSBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSMgICAgZW5kaWYKLSMgIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBaRVhURVJOCi0jICBkZWZpbmUgWkVYVEVSTiBleHRlcm4KLSNlbmRpZgotI2lmbmRlZiBaRVhQT1JUCi0jICBkZWZpbmUgWkVYUE9SVAotI2VuZGlmCi0jaWZuZGVmIFpFWFBPUlRWQQotIyAgZGVmaW5lIFpFWFBPUlRWQQotI2VuZGlmCi0KLSNpZm5kZWYgRkFSCi0jICBkZWZpbmUgRkFSCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9fTUFDVFlQRVNfXykKLXR5cGVkZWYgdW5zaWduZWQgY2hhciAgQnl0ZTsgIC8qIDggYml0cyAqLwotI2VuZGlmCi10eXBlZGVmIHVuc2lnbmVkIGludCAgIHVJbnQ7ICAvKiAxNiBiaXRzIG9yIG1vcmUgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyAgdUxvbmc7IC8qIDMyIGJpdHMgb3IgbW9yZSAqLwotCi0jaWZkZWYgU01BTExfTUVESVVNCi0gICAvKiBCb3JsYW5kIEMvQysrIGFuZCBzb21lIG9sZCBNU0MgdmVyc2lvbnMgaWdub3JlIEZBUiBpbnNpZGUgdHlwZWRlZiAqLwotIyAgZGVmaW5lIEJ5dGVmIEJ5dGUgRkFSCi0jZWxzZQotICAgdHlwZWRlZiBCeXRlICBGQVIgQnl0ZWY7Ci0jZW5kaWYKLXR5cGVkZWYgY2hhciAgRkFSIGNoYXJmOwotdHlwZWRlZiBpbnQgICBGQVIgaW50ZjsKLXR5cGVkZWYgdUludCAgRkFSIHVJbnRmOwotdHlwZWRlZiB1TG9uZyBGQVIgdUxvbmdmOwotCi0jaWZkZWYgU1REQwotICAgdHlwZWRlZiB2b2lkIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVmIHZvaWQgRkFSICAgKnZvaWRwZjsKLSAgIHR5cGVkZWYgdm9pZCAgICAgICAqdm9pZHA7Ci0jZWxzZQotICAgdHlwZWRlZiBCeXRlIGNvbnN0ICp2b2lkcGM7Ci0gICB0eXBlZGVmIEJ5dGUgRkFSICAgKnZvaWRwZjsKLSAgIHR5cGVkZWYgQnl0ZSAgICAgICAqdm9pZHA7Ci0jZW5kaWYKLQotI2lmIDAgICAgICAgICAgIC8qIEhBVkVfVU5JU1REX0ggLS0gdGhpcyBsaW5lIGlzIHVwZGF0ZWQgYnkgLi9jb25maWd1cmUgKi8KLSMgIGluY2x1ZGUgPHN5cy90eXBlcy5oPiAvKiBmb3Igb2ZmX3QgKi8KLSMgIGluY2x1ZGUgPHVuaXN0ZC5oPiAgICAvKiBmb3IgU0VFS18qIGFuZCBvZmZfdCAqLwotIyAgaWZkZWYgVk1TCi0jICAgIGluY2x1ZGUgPHVuaXhpby5oPiAgIC8qIGZvciBvZmZfdCAqLwotIyAgZW5kaWYKLSMgIGRlZmluZSB6X29mZl90IG9mZl90Ci0jZW5kaWYKLSNpZm5kZWYgU0VFS19TRVQKLSMgIGRlZmluZSBTRUVLX1NFVCAgICAgICAgMCAgICAgICAvKiBTZWVrIGZyb20gYmVnaW5uaW5nIG9mIGZpbGUuICAqLwotIyAgZGVmaW5lIFNFRUtfQ1VSICAgICAgICAxICAgICAgIC8qIFNlZWsgZnJvbSBjdXJyZW50IHBvc2l0aW9uLiAgKi8KLSMgIGRlZmluZSBTRUVLX0VORCAgICAgICAgMiAgICAgICAvKiBTZXQgZmlsZSBwb2ludGVyIHRvIEVPRiBwbHVzICJvZmZzZXQiICovCi0jZW5kaWYKLSNpZm5kZWYgel9vZmZfdAotIyAgZGVmaW5lIHpfb2ZmX3QgbG9uZwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fT1M0MDBfXykKLSMgIGRlZmluZSBOT192c25wcmludGYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX01WU19fKQotIyAgZGVmaW5lIE5PX3ZzbnByaW50ZgotIyAgaWZkZWYgRkFSCi0jICAgIHVuZGVmIEZBUgotIyAgZW5kaWYKLSNlbmRpZgotCi0vKiBNVlMgbGlua2VyIGRvZXMgbm90IHN1cHBvcnQgZXh0ZXJuYWwgbmFtZXMgbGFyZ2VyIHRoYW4gOCBieXRlcyAqLwotI2lmIGRlZmluZWQoX19NVlNfXykKLSMgICBwcmFnbWEgbWFwKGRlZmxhdGVJbml0XywiREVJTiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlSW5pdDJfLCJERUlOMiIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlRW5kLCJERUVORCIpCi0jICAgcHJhZ21hIG1hcChkZWZsYXRlQm91bmQsIkRFQk5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVJbml0XywiSU5JTiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlSW5pdDJfLCJJTklOMiIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlRW5kLCJJTkVORCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU3luYywiSU5TWSIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlU2V0RGljdGlvbmFyeSwiSU5TRURJIikKLSMgICBwcmFnbWEgbWFwKGNvbXByZXNzQm91bmQsIkNNQk5EIikKLSMgICBwcmFnbWEgbWFwKGluZmxhdGVfdGFibGUsIklOVEFCTCIpCi0jICAgcHJhZ21hIG1hcChpbmZsYXRlX2Zhc3QsIklORkEiKQotIyAgIHByYWdtYSBtYXAoaW5mbGF0ZV9jb3B5cmlnaHQsIklOQ09QWSIpCi0jZW5kaWYKLQotI2VuZGlmIC8qIFpDT05GX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYi96bGliLjMgYi9Nb2R1bGVzL3psaWIvemxpYi4zCmluZGV4IDI3YWRjNGMuLjAxNjBlNjIgMTAwNjQ0Ci0tLSBhL01vZHVsZXMvemxpYi96bGliLjMKKysrIGIvTW9kdWxlcy96bGliL3psaWIuMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBaTElCIDMgIjE5IEFwciAyMDEwIgorLlRIIFpMSUIgMyAiMjggQXByIDIwMTMiCiAuU0ggTkFNRQogemxpYiBcLSBjb21wcmVzc2lvbi9kZWNvbXByZXNzaW9uIGxpYnJhcnkKIC5TSCBTWU5PUFNJUwpAQCAtMzYsOSArMzYsOSBAQAogLklSIHpsaWIuaCAuCiBUaGUgZGlzdHJpYnV0aW9uIHNvdXJjZSBpbmNsdWRlcyBleGFtcGxlcyBvZiB1c2Ugb2YgdGhlIGxpYnJhcnkKIGluIHRoZSBmaWxlcwotLkkgZXhhbXBsZS5jCisuSSB0ZXN0L2V4YW1wbGUuYwogYW5kCi0uSVIgbWluaWd6aXAuYywKKy5JUiB0ZXN0L21pbmlnemlwLmMsCiBhcyB3ZWxsIGFzIG90aGVyIGV4YW1wbGVzIGluIHRoZQogLklSIGV4YW1wbGVzLwogZGlyZWN0b3J5LgpAQCAtNjUsNyArNjUsNyBAQAogd3JpdHRlbiBieSBBLk0uIEt1Y2hsaW5nIChhbWtAbWFnbmV0LmNvbSksCiBpcyBhdmFpbGFibGUgaW4gUHl0aG9uIDEuNSBhbmQgbGF0ZXIgdmVyc2lvbnM6CiAuSVAKLWh0dHA6Ly93d3cucHl0aG9uLm9yZy9kb2MvbGliL21vZHVsZS16bGliLmh0bWwKK2h0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS96bGliLmh0bWwKIC5MUAogLkkgemxpYgogaXMgYnVpbHQgaW50bwpAQCAtOTUsMTEgKzk1LDExIEBACiBUaGUgZGF0YSBmb3JtYXQgdXNlZCBieSB0aGUgemxpYiBsaWJyYXJ5IGlzIGRlc2NyaWJlZCBieSBSRkMKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlczoKIC5JUAotaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKGZvciB0aGUgemxpYiBoZWFkZXIgYW5kIHRyYWlsZXIgZm9ybWF0KQoraHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTk1MCAoZm9yIHRoZSB6bGliIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCiAuYnIKLWh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTEudHh0IChmb3IgdGhlIGRlZmxhdGUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCkKK2h0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTEgKGZvciB0aGUgZGVmbGF0ZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0KQogLmJyCi1odHRwOi8vd3d3LmlldGYub3JnL3JmYy9yZmMxOTUyLnR4dCAoZm9yIHRoZSBnemlwIGhlYWRlciBhbmQgdHJhaWxlciBmb3JtYXQpCitodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxOTUyIChmb3IgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyIGZvcm1hdCkKIC5MUAogTWFyayBOZWxzb24gd3JvdGUgYW4gYXJ0aWNsZSBhYm91dAogLkkgemxpYgpAQCAtMTI1LDggKzEyNSw4IEBACiBTZW5kIHF1ZXN0aW9ucyBhbmQvb3IgY29tbWVudHMgdG8gemxpYkBnemlwLm9yZywKIG9yIChmb3IgdGhlIFdpbmRvd3MgRExMIHZlcnNpb24pIHRvIEdpbGxlcyBWb2xsYW50IChpbmZvQHdpbmltYWdlLmNvbSkuCiAuU0ggQVVUSE9SUwotVmVyc2lvbiAxLjIuNQotQ29weXJpZ2h0IChDKSAxOTk1LTIwMTAgSmVhbi1sb3VwIEdhaWxseSAoamxvdXBAZ3ppcC5vcmcpCitWZXJzaW9uIDEuMi44CitDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMyBKZWFuLWxvdXAgR2FpbGx5IChqbG91cEBnemlwLm9yZykKIGFuZCBNYXJrIEFkbGVyIChtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1KS4KIC5MUAogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMtaXMsIgpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3psaWIuaCBiL01vZHVsZXMvemxpYi96bGliLmgKaW5kZXggNzlhMTg3Yy4uM2UwYzc2NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIuaAorKysgYi9Nb2R1bGVzL3psaWIvemxpYi5oCkBAIC0xLDcgKzEsNyBAQAogLyogemxpYi5oIC0tIGludGVyZmFjZSBvZiB0aGUgJ3psaWInIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gIHZlcnNpb24gMS4yLjUsIEFwcmlsIDE5dGgsIDIwMTAKKyAgdmVyc2lvbiAxLjIuOCwgQXByaWwgMjh0aCwgMjAxMwogCi0gIENvcHlyaWdodCAoQykgMTk5NS0yMDEwIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKKyAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlcgogCiAgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCiAgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9ycyBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMKQEAgLTI0LDggKzI0LDggQEAKIAogCiAgIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MgKFJlcXVlc3QgZm9yCi0gIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzE5NTAudHh0Ci0gICh6bGliIGZvcm1hdCksIHJmYzE5NTEudHh0IChkZWZsYXRlIGZvcm1hdCkgYW5kIHJmYzE5NTIudHh0IChnemlwIGZvcm1hdCkuCisgIENvbW1lbnRzKSAxOTUwIHRvIDE5NTIgaW4gdGhlIGZpbGVzIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTAKKyAgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MSAoZGVmbGF0ZSBmb3JtYXQpIGFuZCByZmMxOTUyIChnemlwIGZvcm1hdCkuCiAqLwogCiAjaWZuZGVmIFpMSUJfSApAQCAtMzcsMTEgKzM3LDExIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jZGVmaW5lIFpMSUJfVkVSU0lPTiAiMS4yLjUiCi0jZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTI1MAorI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi44IgorI2RlZmluZSBaTElCX1ZFUk5VTSAweDEyODAKICNkZWZpbmUgWkxJQl9WRVJfTUFKT1IgMQogI2RlZmluZSBaTElCX1ZFUl9NSU5PUiAyCi0jZGVmaW5lIFpMSUJfVkVSX1JFVklTSU9OIDUKKyNkZWZpbmUgWkxJQl9WRVJfUkVWSVNJT04gOAogI2RlZmluZSBaTElCX1ZFUl9TVUJSRVZJU0lPTiAwCiAKIC8qCkBAIC04MywxNSArODMsMTUgQEAKIHN0cnVjdCBpbnRlcm5hbF9zdGF0ZTsKIAogdHlwZWRlZiBzdHJ1Y3Qgel9zdHJlYW1fcyB7Ci0gICAgQnl0ZWYgICAgKm5leHRfaW47ICAvKiBuZXh0IGlucHV0IGJ5dGUgKi8KKyAgICB6X2NvbnN0IEJ5dGVmICpuZXh0X2luOyAgICAgLyogbmV4dCBpbnB1dCBieXRlICovCiAgICAgdUludCAgICAgYXZhaWxfaW47ICAvKiBudW1iZXIgb2YgYnl0ZXMgYXZhaWxhYmxlIGF0IG5leHRfaW4gKi8KLSAgICB1TG9uZyAgICB0b3RhbF9pbjsgIC8qIHRvdGFsIG5iIG9mIGlucHV0IGJ5dGVzIHJlYWQgc28gZmFyICovCisgICAgdUxvbmcgICAgdG90YWxfaW47ICAvKiB0b3RhbCBudW1iZXIgb2YgaW5wdXQgYnl0ZXMgcmVhZCBzbyBmYXIgKi8KIAogICAgIEJ5dGVmICAgICpuZXh0X291dDsgLyogbmV4dCBvdXRwdXQgYnl0ZSBzaG91bGQgYmUgcHV0IHRoZXJlICovCiAgICAgdUludCAgICAgYXZhaWxfb3V0OyAvKiByZW1haW5pbmcgZnJlZSBzcGFjZSBhdCBuZXh0X291dCAqLwotICAgIHVMb25nICAgIHRvdGFsX291dDsgLyogdG90YWwgbmIgb2YgYnl0ZXMgb3V0cHV0IHNvIGZhciAqLworICAgIHVMb25nICAgIHRvdGFsX291dDsgLyogdG90YWwgbnVtYmVyIG9mIGJ5dGVzIG91dHB1dCBzbyBmYXIgKi8KIAotICAgIGNoYXIgICAgICptc2c7ICAgICAgLyogbGFzdCBlcnJvciBtZXNzYWdlLCBOVUxMIGlmIG5vIGVycm9yICovCisgICAgel9jb25zdCBjaGFyICptc2c7ICAvKiBsYXN0IGVycm9yIG1lc3NhZ2UsIE5VTEwgaWYgbm8gZXJyb3IgKi8KICAgICBzdHJ1Y3QgaW50ZXJuYWxfc3RhdGUgRkFSICpzdGF0ZTsgLyogbm90IHZpc2libGUgYnkgYXBwbGljYXRpb25zICovCiAKICAgICBhbGxvY19mdW5jIHphbGxvYzsgIC8qIHVzZWQgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlICovCkBAIC0zMjcsOCArMzI3LDkgQEAKIAogICAgIFpfRklOSVNIIGNhbiBiZSB1c2VkIGltbWVkaWF0ZWx5IGFmdGVyIGRlZmxhdGVJbml0IGlmIGFsbCB0aGUgY29tcHJlc3Npb24KICAgaXMgdG8gYmUgZG9uZSBpbiBhIHNpbmdsZSBzdGVwLiAgSW4gdGhpcyBjYXNlLCBhdmFpbF9vdXQgbXVzdCBiZSBhdCBsZWFzdCB0aGUKLSAgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiAgSWYgZGVmbGF0ZSBkb2VzIG5vdCByZXR1cm4KLSAgWl9TVFJFQU1fRU5ELCB0aGVuIGl0IG11c3QgYmUgY2FsbGVkIGFnYWluIGFzIGRlc2NyaWJlZCBhYm92ZS4KKyAgdmFsdWUgcmV0dXJuZWQgYnkgZGVmbGF0ZUJvdW5kIChzZWUgYmVsb3cpLiAgVGhlbiBkZWZsYXRlIGlzIGd1YXJhbnRlZWQgdG8KKyAgcmV0dXJuIFpfU1RSRUFNX0VORC4gIElmIG5vdCBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCBkZWZsYXRlIHdpbGwKKyAgbm90IHJldHVybiBaX1NUUkVBTV9FTkQsIGFuZCBpdCBtdXN0IGJlIGNhbGxlZCBhZ2FpbiBhcyBkZXNjcmliZWQgYWJvdmUuCiAKICAgICBkZWZsYXRlKCkgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgaW5wdXQgcmVhZAogICBzbyBmYXIgKHRoYXQgaXMsIHRvdGFsX2luIGJ5dGVzKS4KQEAgLTQ1MSwyMyArNDUyLDI5IEBACiAgIGVycm9yLiAgSG93ZXZlciBpZiBhbGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcCAoYQogICBzaW5nbGUgY2FsbCBvZiBpbmZsYXRlKSwgdGhlIHBhcmFtZXRlciBmbHVzaCBzaG91bGQgYmUgc2V0IHRvIFpfRklOSVNILiAgSW4KICAgdGhpcyBjYXNlIGFsbCBwZW5kaW5nIGlucHV0IGlzIHByb2Nlc3NlZCBhbmQgYWxsIHBlbmRpbmcgb3V0cHV0IGlzIGZsdXNoZWQ7Ci0gIGF2YWlsX291dCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIGFsbCB0aGUgdW5jb21wcmVzc2VkIGRhdGEuICAoVGhlIHNpemUKLSAgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIG1heSBoYXZlIGJlZW4gc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgZm9yIHRoaXMKLSAgcHVycG9zZS4pIFRoZSBuZXh0IG9wZXJhdGlvbiBvbiB0aGlzIHN0cmVhbSBtdXN0IGJlIGluZmxhdGVFbmQgdG8gZGVhbGxvY2F0ZQotICB0aGUgZGVjb21wcmVzc2lvbiBzdGF0ZS4gIFRoZSB1c2Ugb2YgWl9GSU5JU0ggaXMgbmV2ZXIgcmVxdWlyZWQsIGJ1dCBjYW4gYmUKLSAgdXNlZCB0byBpbmZvcm0gaW5mbGF0ZSB0aGF0IGEgZmFzdGVyIGFwcHJvYWNoIG1heSBiZSB1c2VkIGZvciB0aGUgc2luZ2xlCi0gIGluZmxhdGUoKSBjYWxsLgorICBhdmFpbF9vdXQgbXVzdCBiZSBsYXJnZSBlbm91Z2ggdG8gaG9sZCBhbGwgb2YgdGhlIHVuY29tcHJlc3NlZCBkYXRhIGZvciB0aGUKKyAgb3BlcmF0aW9uIHRvIGNvbXBsZXRlLiAgKFRoZSBzaXplIG9mIHRoZSB1bmNvbXByZXNzZWQgZGF0YSBtYXkgaGF2ZSBiZWVuCisgIHNhdmVkIGJ5IHRoZSBjb21wcmVzc29yIGZvciB0aGlzIHB1cnBvc2UuKSBUaGUgdXNlIG9mIFpfRklOSVNIIGlzIG5vdAorICByZXF1aXJlZCB0byBwZXJmb3JtIGFuIGluZmxhdGlvbiBpbiBvbmUgc3RlcC4gIEhvd2V2ZXIgaXQgbWF5IGJlIHVzZWQgdG8KKyAgaW5mb3JtIGluZmxhdGUgdGhhdCBhIGZhc3RlciBhcHByb2FjaCBjYW4gYmUgdXNlZCBmb3IgdGhlIHNpbmdsZSBpbmZsYXRlKCkKKyAgY2FsbC4gIFpfRklOSVNIIGFsc28gaW5mb3JtcyBpbmZsYXRlIHRvIG5vdCBtYWludGFpbiBhIHNsaWRpbmcgd2luZG93IGlmIHRoZQorICBzdHJlYW0gY29tcGxldGVzLCB3aGljaCByZWR1Y2VzIGluZmxhdGUncyBtZW1vcnkgZm9vdHByaW50LiAgSWYgdGhlIHN0cmVhbQorICBkb2VzIG5vdCBjb21wbGV0ZSwgZWl0aGVyIGJlY2F1c2Ugbm90IGFsbCBvZiB0aGUgc3RyZWFtIGlzIHByb3ZpZGVkIG9yIG5vdAorICBlbm91Z2ggb3V0cHV0IHNwYWNlIGlzIHByb3ZpZGVkLCB0aGVuIGEgc2xpZGluZyB3aW5kb3cgd2lsbCBiZSBhbGxvY2F0ZWQgYW5kCisgIGluZmxhdGUoKSBjYW4gYmUgY2FsbGVkIGFnYWluIHRvIGNvbnRpbnVlIHRoZSBvcGVyYXRpb24gYXMgaWYgWl9OT19GTFVTSCBoYWQKKyAgYmVlbiB1c2VkLgogCiAgICAgIEluIHRoaXMgaW1wbGVtZW50YXRpb24sIGluZmxhdGUoKSBhbHdheXMgZmx1c2hlcyBhcyBtdWNoIG91dHB1dCBhcwogICBwb3NzaWJsZSB0byB0aGUgb3V0cHV0IGJ1ZmZlciwgYW5kIGFsd2F5cyB1c2VzIHRoZSBmYXN0ZXIgYXBwcm9hY2ggb24gdGhlCi0gIGZpcnN0IGNhbGwuICBTbyB0aGUgb25seSBlZmZlY3Qgb2YgdGhlIGZsdXNoIHBhcmFtZXRlciBpbiB0aGlzIGltcGxlbWVudGF0aW9uCi0gIGlzIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpLCBhcyBub3RlZCBiZWxvdywgb3Igd2hlbiBpdCByZXR1cm5zIGVhcmx5Ci0gIGJlY2F1c2UgWl9CTE9DSyBvciBaX1RSRUVTIGlzIHVzZWQuCisgIGZpcnN0IGNhbGwuICBTbyB0aGUgZWZmZWN0cyBvZiB0aGUgZmx1c2ggcGFyYW1ldGVyIGluIHRoaXMgaW1wbGVtZW50YXRpb24gYXJlCisgIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgaW5mbGF0ZSgpIGFzIG5vdGVkIGJlbG93LCB3aGVuIGluZmxhdGUoKSByZXR1cm5zIGVhcmx5CisgIHdoZW4gWl9CTE9DSyBvciBaX1RSRUVTIGlzIHVzZWQsIGFuZCB3aGVuIGluZmxhdGUoKSBhdm9pZHMgdGhlIGFsbG9jYXRpb24gb2YKKyAgbWVtb3J5IGZvciBhIHNsaWRpbmcgd2luZG93IHdoZW4gWl9GSU5JU0ggaXMgdXNlZC4KIAogICAgICBJZiBhIHByZXNldCBkaWN0aW9uYXJ5IGlzIG5lZWRlZCBhZnRlciB0aGlzIGNhbGwgKHNlZSBpbmZsYXRlU2V0RGljdGlvbmFyeQotICBiZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiB0aGUgZGljdGlvbmFyeQorICBiZWxvdyksIGluZmxhdGUgc2V0cyBzdHJtLT5hZGxlciB0byB0aGUgQWRsZXItMzIgY2hlY2tzdW0gb2YgdGhlIGRpY3Rpb25hcnkKICAgY2hvc2VuIGJ5IHRoZSBjb21wcmVzc29yIGFuZCByZXR1cm5zIFpfTkVFRF9ESUNUOyBvdGhlcndpc2UgaXQgc2V0cwotICBzdHJtLT5hZGxlciB0byB0aGUgYWRsZXIzMiBjaGVja3N1bSBvZiBhbGwgb3V0cHV0IHByb2R1Y2VkIHNvIGZhciAodGhhdCBpcywKKyAgc3RybS0+YWRsZXIgdG8gdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGFsbCBvdXRwdXQgcHJvZHVjZWQgc28gZmFyICh0aGF0IGlzLAogICB0b3RhbF9vdXQgYnl0ZXMpIGFuZCByZXR1cm5zIFpfT0ssIFpfU1RSRUFNX0VORCBvciBhbiBlcnJvciBjb2RlIGFzIGRlc2NyaWJlZAogICBiZWxvdy4gIEF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbSwgaW5mbGF0ZSgpIGNoZWNrcyB0aGF0IGl0cyBjb21wdXRlZCBhZGxlcjMyCiAgIGNoZWNrc3VtIGlzIGVxdWFsIHRvIHRoYXQgc2F2ZWQgYnkgdGhlIGNvbXByZXNzb3IgYW5kIHJldHVybnMgWl9TVFJFQU1fRU5ECkBAIC00NzgsNyArNDg1LDkgQEAKICAgaW5pdGlhbGl6aW5nIHdpdGggaW5mbGF0ZUluaXQyKCkuICBBbnkgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoZSBnemlwCiAgIGhlYWRlciBpcyBub3QgcmV0YWluZWQsIHNvIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQgdGhhdCBpbmZvcm1hdGlvbiBzaG91bGQKICAgaW5zdGVhZCB1c2UgcmF3IGluZmxhdGUsIHNlZSBpbmZsYXRlSW5pdDIoKSBiZWxvdywgb3IgaW5mbGF0ZUJhY2soKSBhbmQKLSAgcGVyZm9ybSB0aGVpciBvd24gcHJvY2Vzc2luZyBvZiB0aGUgZ3ppcCBoZWFkZXIgYW5kIHRyYWlsZXIuCisgIHBlcmZvcm0gdGhlaXIgb3duIHByb2Nlc3Npbmcgb2YgdGhlIGd6aXAgaGVhZGVyIGFuZCB0cmFpbGVyLiAgV2hlbiBwcm9jZXNzaW5nCisgIGd6aXAtd3JhcHBlZCBkZWZsYXRlIGRhdGEsIHN0cm0tPmFkbGVyMzIgaXMgc2V0IHRvIHRoZSBDUkMtMzIgb2YgdGhlIG91dHB1dAorICBwcm9kdWN0ZWQgc28gZmFyLiAgVGhlIENSQy0zMiBpcyBjaGVja2VkIGFnYWluc3QgdGhlIGd6aXAgdHJhaWxlci4KIAogICAgIGluZmxhdGUoKSByZXR1cm5zIFpfT0sgaWYgc29tZSBwcm9ncmVzcyBoYXMgYmVlbiBtYWRlIChtb3JlIGlucHV0IHByb2Nlc3NlZAogICBvciBtb3JlIG91dHB1dCBwcm9kdWNlZCksIFpfU1RSRUFNX0VORCBpZiB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgaGFzCkBAIC01ODAsMTAgKzU4OSwxNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgZGljdExlbmd0aCkpOwogLyoKICAgICAgSW5pdGlhbGl6ZXMgdGhlIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgZnJvbSB0aGUgZ2l2ZW4gYnl0ZSBzZXF1ZW5jZQotICAgd2l0aG91dCBwcm9kdWNpbmcgYW55IGNvbXByZXNzZWQgb3V0cHV0LiAgVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAotICAgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVmbGF0ZUluaXQsIGRlZmxhdGVJbml0MiBvciBkZWZsYXRlUmVzZXQsIGJlZm9yZSBhbnkgY2FsbAotICAgb2YgZGVmbGF0ZS4gIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZQotICAgZGljdGlvbmFyeSAoc2VlIGluZmxhdGVTZXREaWN0aW9uYXJ5KS4KKyAgIHdpdGhvdXQgcHJvZHVjaW5nIGFueSBjb21wcmVzc2VkIG91dHB1dC4gIFdoZW4gdXNpbmcgdGhlIHpsaWIgZm9ybWF0LCB0aGlzCisgICBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlciBkZWZsYXRlSW5pdCwgZGVmbGF0ZUluaXQyIG9yCisgICBkZWZsYXRlUmVzZXQsIGFuZCBiZWZvcmUgYW55IGNhbGwgb2YgZGVmbGF0ZS4gIFdoZW4gZG9pbmcgcmF3IGRlZmxhdGUsIHRoaXMKKyAgIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGVpdGhlciBiZWZvcmUgYW55IGNhbGwgb2YgZGVmbGF0ZSwgb3IgaW1tZWRpYXRlbHkKKyAgIGFmdGVyIHRoZSBjb21wbGV0aW9uIG9mIGEgZGVmbGF0ZSBibG9jaywgaS5lLiBhZnRlciBhbGwgaW5wdXQgaGFzIGJlZW4KKyAgIGNvbnN1bWVkIGFuZCBhbGwgb3V0cHV0IGhhcyBiZWVuIGRlbGl2ZXJlZCB3aGVuIHVzaW5nIGFueSBvZiB0aGUgZmx1c2gKKyAgIG9wdGlvbnMgWl9CTE9DSywgWl9QQVJUSUFMX0ZMVVNILCBaX1NZTkNfRkxVU0gsIG9yIFpfRlVMTF9GTFVTSC4gIFRoZQorICAgY29tcHJlc3NvciBhbmQgZGVjb21wcmVzc29yIG11c3QgdXNlIGV4YWN0bHkgdGhlIHNhbWUgZGljdGlvbmFyeSAoc2VlCisgICBpbmZsYXRlU2V0RGljdGlvbmFyeSkuCiAKICAgICAgVGhlIGRpY3Rpb25hcnkgc2hvdWxkIGNvbnNpc3Qgb2Ygc3RyaW5ncyAoYnl0ZSBzZXF1ZW5jZXMpIHRoYXQgYXJlIGxpa2VseQogICAgdG8gYmUgZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seQpAQCAtNjEwLDggKzYyNCw4IEBACiAgICAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiBhCiAgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKICAgIGluY29uc2lzdGVudCAoZm9yIGV4YW1wbGUgaWYgZGVmbGF0ZSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgdGhpcyBzdHJlYW0KLSAgIG9yIGlmIHRoZSBjb21wcmVzc2lvbiBtZXRob2QgaXMgYnNvcnQpLiAgZGVmbGF0ZVNldERpY3Rpb25hcnkgZG9lcyBub3QKLSAgIHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCisgICBvciBpZiBub3QgYXQgYSBibG9jayBib3VuZGFyeSBmb3IgcmF3IGRlZmxhdGUpLiAgZGVmbGF0ZVNldERpY3Rpb25hcnkgZG9lcworICAgbm90IHBlcmZvcm0gYW55IGNvbXByZXNzaW9uOiB0aGlzIHdpbGwgYmUgZG9uZSBieSBkZWZsYXRlKCkuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwKQEAgLTY4OCw5ICs3MDIsMjkgQEAKICAgIGRlZmxhdGlvbiBvZiBzb3VyY2VMZW4gYnl0ZXMuICBJdCBtdXN0IGJlIGNhbGxlZCBhZnRlciBkZWZsYXRlSW5pdCgpIG9yCiAgICBkZWZsYXRlSW5pdDIoKSwgYW5kIGFmdGVyIGRlZmxhdGVTZXRIZWFkZXIoKSwgaWYgdXNlZC4gIFRoaXMgd291bGQgYmUgdXNlZAogICAgdG8gYWxsb2NhdGUgYW4gb3V0cHV0IGJ1ZmZlciBmb3IgZGVmbGF0aW9uIGluIGEgc2luZ2xlIHBhc3MsIGFuZCBzbyB3b3VsZCBiZQotICAgY2FsbGVkIGJlZm9yZSBkZWZsYXRlKCkuCisgICBjYWxsZWQgYmVmb3JlIGRlZmxhdGUoKS4gIElmIHRoYXQgZmlyc3QgZGVmbGF0ZSgpIGNhbGwgaXMgcHJvdmlkZWQgdGhlCisgICBzb3VyY2VMZW4gaW5wdXQgYnl0ZXMsIGFuIG91dHB1dCBidWZmZXIgYWxsb2NhdGVkIHRvIHRoZSBzaXplIHJldHVybmVkIGJ5CisgICBkZWZsYXRlQm91bmQoKSwgYW5kIHRoZSBmbHVzaCB2YWx1ZSBaX0ZJTklTSCwgdGhlbiBkZWZsYXRlKCkgaXMgZ3VhcmFudGVlZAorICAgdG8gcmV0dXJuIFpfU1RSRUFNX0VORC4gIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgdGhlIGNvbXByZXNzZWQgc2l6ZSB0bworICAgYmUgbGFyZ2VyIHRoYW4gdGhlIHZhbHVlIHJldHVybmVkIGJ5IGRlZmxhdGVCb3VuZCgpIGlmIGZsdXNoIG9wdGlvbnMgb3RoZXIKKyAgIHRoYW4gWl9GSU5JU0ggb3IgWl9OT19GTFVTSCBhcmUgdXNlZC4KICovCiAKK1pFWFRFUk4gaW50IFpFWFBPUlQgZGVmbGF0ZVBlbmRpbmcgT0YoKHpfc3RyZWFtcCBzdHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgKnBlbmRpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmJpdHMpKTsKKy8qCisgICAgIGRlZmxhdGVQZW5kaW5nKCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFuZCBiaXRzIG9mIG91dHB1dCB0aGF0IGhhdmUKKyAgIGJlZW4gZ2VuZXJhdGVkLCBidXQgbm90IHlldCBwcm92aWRlZCBpbiB0aGUgYXZhaWxhYmxlIG91dHB1dC4gIFRoZSBieXRlcyBub3QKKyAgIHByb3ZpZGVkIHdvdWxkIGJlIGR1ZSB0byB0aGUgYXZhaWxhYmxlIG91dHB1dCBzcGFjZSBoYXZpbmcgYmVpbmcgY29uc3VtZWQuCisgICBUaGUgbnVtYmVyIG9mIGJpdHMgb2Ygb3V0cHV0IG5vdCBwcm92aWRlZCBhcmUgYmV0d2VlbiAwIGFuZCA3LCB3aGVyZSB0aGV5CisgICBhd2FpdCBtb3JlIGJpdHMgdG8gam9pbiB0aGVtIGluIG9yZGVyIHRvIGZpbGwgb3V0IGEgZnVsbCBieXRlLiAgSWYgcGVuZGluZworICAgb3IgYml0cyBhcmUgWl9OVUxMLCB0aGVuIHRob3NlIHZhbHVlcyBhcmUgbm90IHNldC4KKworICAgICBkZWZsYXRlUGVuZGluZyByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisgKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBkZWZsYXRlUHJpbWUgT0YoKHpfc3RyZWFtcCBzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSkpOwpAQCAtNzAzLDggKzczNyw5IEBACiAgICB0aGFuIG9yIGVxdWFsIHRvIDE2LCBhbmQgdGhhdCBtYW55IG9mIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHZhbHVlCiAgICB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBvdXRwdXQuCiAKLSAgICAgZGVmbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc291cmNlCi0gICBzdHJlYW0gc3RhdGUgd2FzIGluY29uc2lzdGVudC4KKyAgICAgZGVmbGF0ZVByaW1lIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaAorICAgcm9vbSBpbiB0aGUgaW50ZXJuYWwgYnVmZmVyIHRvIGluc2VydCB0aGUgYml0cywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzb3VyY2Ugc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVTZXRIZWFkZXIgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtNzkwLDEwICs4MjUsMTEgQEAKICAgIGlmIHRoYXQgY2FsbCByZXR1cm5lZCBaX05FRURfRElDVC4gIFRoZSBkaWN0aW9uYXJ5IGNob3NlbiBieSB0aGUgY29tcHJlc3NvcgogICAgY2FuIGJlIGRldGVybWluZWQgZnJvbSB0aGUgYWRsZXIzMiB2YWx1ZSByZXR1cm5lZCBieSB0aGF0IGNhbGwgb2YgaW5mbGF0ZS4KICAgIFRoZSBjb21wcmVzc29yIGFuZCBkZWNvbXByZXNzb3IgbXVzdCB1c2UgZXhhY3RseSB0aGUgc2FtZSBkaWN0aW9uYXJ5IChzZWUKLSAgIGRlZmxhdGVTZXREaWN0aW9uYXJ5KS4gIEZvciByYXcgaW5mbGF0ZSwgdGhpcyBmdW5jdGlvbiBjYW4gYmUgY2FsbGVkCi0gICBpbW1lZGlhdGVseSBhZnRlciBpbmZsYXRlSW5pdDIoKSBvciBpbmZsYXRlUmVzZXQoKSBhbmQgYmVmb3JlIGFueSBjYWxsIG9mCi0gICBpbmZsYXRlKCkgdG8gc2V0IHRoZSBkaWN0aW9uYXJ5LiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlCi0gICBkaWN0aW9uYXJ5IHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgorICAgZGVmbGF0ZVNldERpY3Rpb25hcnkpLiAgRm9yIHJhdyBpbmZsYXRlLCB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQgYW55CisgICB0aW1lIHRvIHNldCB0aGUgZGljdGlvbmFyeS4gIElmIHRoZSBwcm92aWRlZCBkaWN0aW9uYXJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUKKyAgIHdpbmRvdyBhbmQgdGhlcmUgaXMgYWxyZWFkeSBkYXRhIGluIHRoZSB3aW5kb3csIHRoZW4gdGhlIHByb3ZpZGVkIGRpY3Rpb25hcnkKKyAgIHdpbGwgYW1lbmQgd2hhdCdzIHRoZXJlLiAgVGhlIGFwcGxpY2F0aW9uIG11c3QgaW5zdXJlIHRoYXQgdGhlIGRpY3Rpb25hcnkKKyAgIHRoYXQgd2FzIHVzZWQgZm9yIGNvbXByZXNzaW9uIGlzIHByb3ZpZGVkLgogCiAgICAgIGluZmxhdGVTZXREaWN0aW9uYXJ5IHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX1NUUkVBTV9FUlJPUiBpZiBhCiAgICBwYXJhbWV0ZXIgaXMgaW52YWxpZCAoZS5nLiAgZGljdGlvbmFyeSBiZWluZyBaX05VTEwpIG9yIHRoZSBzdHJlYW0gc3RhdGUgaXMKQEAgLTgwMywxOSArODM5LDM4IEBACiAgICBpbmZsYXRlKCkuCiAqLwogCitaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVHZXREaWN0aW9uYXJ5IE9GKCh6X3N0cmVhbXAgc3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGVmICpkaWN0aW9uYXJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdUludCAgKmRpY3RMZW5ndGgpKTsKKy8qCisgICAgIFJldHVybnMgdGhlIHNsaWRpbmcgZGljdGlvbmFyeSBiZWluZyBtYWludGFpbmVkIGJ5IGluZmxhdGUuICBkaWN0TGVuZ3RoIGlzCisgICBzZXQgdG8gdGhlIG51bWJlciBvZiBieXRlcyBpbiB0aGUgZGljdGlvbmFyeSwgYW5kIHRoYXQgbWFueSBieXRlcyBhcmUgY29waWVkCisgICB0byBkaWN0aW9uYXJ5LiAgZGljdGlvbmFyeSBtdXN0IGhhdmUgZW5vdWdoIHNwYWNlLCB3aGVyZSAzMjc2OCBieXRlcyBpcworICAgYWx3YXlzIGVub3VnaC4gIElmIGluZmxhdGVHZXREaWN0aW9uYXJ5KCkgaXMgY2FsbGVkIHdpdGggZGljdGlvbmFyeSBlcXVhbCB0bworICAgWl9OVUxMLCB0aGVuIG9ubHkgdGhlIGRpY3Rpb25hcnkgbGVuZ3RoIGlzIHJldHVybmVkLCBhbmQgbm90aGluZyBpcyBjb3BpZWQuCisgICBTaW1pbGFyeSwgaWYgZGljdExlbmd0aCBpcyBaX05VTEwsIHRoZW4gaXQgaXMgbm90IHNldC4KKworICAgICBpbmZsYXRlR2V0RGljdGlvbmFyeSByZXR1cm5zIFpfT0sgb24gc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlCisgICBzdHJlYW0gc3RhdGUgaXMgaW5jb25zaXN0ZW50LgorKi8KKwogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlU3luYyBPRigoel9zdHJlYW1wIHN0cm0pKTsKIC8qCi0gICAgIFNraXBzIGludmFsaWQgY29tcHJlc3NlZCBkYXRhIHVudGlsIGEgZnVsbCBmbHVzaCBwb2ludCAoc2VlIGFib3ZlIHRoZQotICAgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKKyAgICAgU2tpcHMgaW52YWxpZCBjb21wcmVzc2VkIGRhdGEgdW50aWwgYSBwb3NzaWJsZSBmdWxsIGZsdXNoIHBvaW50IChzZWUgYWJvdmUKKyAgIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgZGVmbGF0ZSB3aXRoIFpfRlVMTF9GTFVTSCkgY2FuIGJlIGZvdW5kLCBvciB1bnRpbCBhbGwKICAgIGF2YWlsYWJsZSBpbnB1dCBpcyBza2lwcGVkLiAgTm8gb3V0cHV0IGlzIHByb3ZpZGVkLgogCi0gICAgIGluZmxhdGVTeW5jIHJldHVybnMgWl9PSyBpZiBhIGZ1bGwgZmx1c2ggcG9pbnQgaGFzIGJlZW4gZm91bmQsIFpfQlVGX0VSUk9SCi0gICBpZiBubyBtb3JlIGlucHV0IHdhcyBwcm92aWRlZCwgWl9EQVRBX0VSUk9SIGlmIG5vIGZsdXNoIHBvaW50IGhhcyBiZWVuCi0gICBmb3VuZCwgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHN0cmVhbSBzdHJ1Y3R1cmUgd2FzIGluY29uc2lzdGVudC4gIEluIHRoZQotICAgc3VjY2VzcyBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHNhdmUgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdG90YWxfaW4KLSAgIHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAgSW4gdGhlIGVycm9yIGNhc2UsCi0gICB0aGUgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUgaW5wdXQgZWFjaAotICAgdGltZSwgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCisgICAgIGluZmxhdGVTeW5jIHNlYXJjaGVzIGZvciBhIDAwIDAwIEZGIEZGIHBhdHRlcm4gaW4gdGhlIGNvbXByZXNzZWQgZGF0YS4KKyAgIEFsbCBmdWxsIGZsdXNoIHBvaW50cyBoYXZlIHRoaXMgcGF0dGVybiwgYnV0IG5vdCBhbGwgb2NjdXJyZW5jZXMgb2YgdGhpcworICAgcGF0dGVybiBhcmUgZnVsbCBmbHVzaCBwb2ludHMuCisKKyAgICAgaW5mbGF0ZVN5bmMgcmV0dXJucyBaX09LIGlmIGEgcG9zc2libGUgZnVsbCBmbHVzaCBwb2ludCBoYXMgYmVlbiBmb3VuZCwKKyAgIFpfQlVGX0VSUk9SIGlmIG5vIG1vcmUgaW5wdXQgd2FzIHByb3ZpZGVkLCBaX0RBVEFfRVJST1IgaWYgbm8gZmx1c2ggcG9pbnQKKyAgIGhhcyBiZWVuIGZvdW5kLCBvciBaX1NUUkVBTV9FUlJPUiBpZiB0aGUgc3RyZWFtIHN0cnVjdHVyZSB3YXMgaW5jb25zaXN0ZW50LgorICAgSW4gdGhlIHN1Y2Nlc3MgY2FzZSwgdGhlIGFwcGxpY2F0aW9uIG1heSBzYXZlIHRoZSBjdXJyZW50IGN1cnJlbnQgdmFsdWUgb2YKKyAgIHRvdGFsX2luIHdoaWNoIGluZGljYXRlcyB3aGVyZSB2YWxpZCBjb21wcmVzc2VkIGRhdGEgd2FzIGZvdW5kLiAgSW4gdGhlCisgICBlcnJvciBjYXNlLCB0aGUgYXBwbGljYXRpb24gbWF5IHJlcGVhdGVkbHkgY2FsbCBpbmZsYXRlU3luYywgcHJvdmlkaW5nIG1vcmUKKyAgIGlucHV0IGVhY2ggdGltZSwgdW50aWwgc3VjY2VzcyBvciBlbmQgb2YgdGhlIGlucHV0IGRhdGEuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGluZmxhdGVDb3B5IE9GKCh6X3N0cmVhbXAgZGVzdCwKQEAgLTk2MiwxMiArMTAxNywxMyBAQAogICAgICBTZWUgaW5mbGF0ZUJhY2soKSBmb3IgdGhlIHVzYWdlIG9mIHRoZXNlIHJvdXRpbmVzLgogCiAgICAgIGluZmxhdGVCYWNrSW5pdCB3aWxsIHJldHVybiBaX09LIG9uIHN1Y2Nlc3MsIFpfU1RSRUFNX0VSUk9SIGlmIGFueSBvZgotICAgdGhlIHBhcmFtYXRlcnMgYXJlIGludmFsaWQsIFpfTUVNX0VSUk9SIGlmIHRoZSBpbnRlcm5hbCBzdGF0ZSBjb3VsZCBub3QgYmUKKyAgIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlkLCBaX01FTV9FUlJPUiBpZiB0aGUgaW50ZXJuYWwgc3RhdGUgY291bGQgbm90IGJlCiAgICBhbGxvY2F0ZWQsIG9yIFpfVkVSU0lPTl9FUlJPUiBpZiB0aGUgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBkb2VzIG5vdCBtYXRjaAogICAgdGhlIHZlcnNpb24gb2YgdGhlIGhlYWRlciBmaWxlLgogKi8KIAotdHlwZWRlZiB1bnNpZ25lZCAoKmluX2Z1bmMpIE9GKCh2b2lkIEZBUiAqLCB1bnNpZ25lZCBjaGFyIEZBUiAqIEZBUiAqKSk7Cit0eXBlZGVmIHVuc2lnbmVkICgqaW5fZnVuYykgT0YoKHZvaWQgRkFSICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpfY29uc3QgdW5zaWduZWQgY2hhciBGQVIgKiBGQVIgKikpOwogdHlwZWRlZiBpbnQgKCpvdXRfZnVuYykgT0YoKHZvaWQgRkFSICosIHVuc2lnbmVkIGNoYXIgRkFSICosIHVuc2lnbmVkKSk7CiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgaW5mbGF0ZUJhY2sgT0YoKHpfc3RyZWFtcCBzdHJtLApAQCAtOTc1LDExICsxMDMxLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfZnVuYyBvdXQsIHZvaWQgRkFSICpvdXRfZGVzYykpOwogLyoKICAgICAgaW5mbGF0ZUJhY2soKSBkb2VzIGEgcmF3IGluZmxhdGUgd2l0aCBhIHNpbmdsZSBjYWxsIHVzaW5nIGEgY2FsbC1iYWNrCi0gICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gaW5mbGF0ZSgpIGZvcgotICAgZmlsZSBpL28gYXBwbGljYXRpb25zIGluIHRoYXQgaXQgYXZvaWRzIGNvcHlpbmcgYmV0d2VlbiB0aGUgb3V0cHV0IGFuZCB0aGUKLSAgIHNsaWRpbmcgd2luZG93IGJ5IHNpbXBseSBtYWtpbmcgdGhlIHdpbmRvdyBpdHNlbGYgdGhlIG91dHB1dCBidWZmZXIuICBUaGlzCi0gICBmdW5jdGlvbiB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dCBidWZmZXIgcGFzc2VkIGJ5Ci0gICB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCisgICBpbnRlcmZhY2UgZm9yIGlucHV0IGFuZCBvdXRwdXQuICBUaGlzIGlzIHBvdGVudGlhbGx5IG1vcmUgZWZmaWNpZW50IHRoYW4KKyAgIGluZmxhdGUoKSBmb3IgZmlsZSBpL28gYXBwbGljYXRpb25zLCBpbiB0aGF0IGl0IGF2b2lkcyBjb3B5aW5nIGJldHdlZW4gdGhlCisgICBvdXRwdXQgYW5kIHRoZSBzbGlkaW5nIHdpbmRvdyBieSBzaW1wbHkgbWFraW5nIHRoZSB3aW5kb3cgaXRzZWxmIHRoZSBvdXRwdXQKKyAgIGJ1ZmZlci4gIGluZmxhdGUoKSBjYW4gYmUgZmFzdGVyIG9uIG1vZGVybiBDUFVzIHdoZW4gdXNlZCB3aXRoIGxhcmdlCisgICBidWZmZXJzLiAgaW5mbGF0ZUJhY2soKSB0cnVzdHMgdGhlIGFwcGxpY2F0aW9uIHRvIG5vdCBjaGFuZ2UgdGhlIG91dHB1dAorICAgYnVmZmVyIHBhc3NlZCBieSB0aGUgb3V0cHV0IGZ1bmN0aW9uLCBhdCBsZWFzdCB1bnRpbCBpbmZsYXRlQmFjaygpIHJldHVybnMuCiAKICAgICAgaW5mbGF0ZUJhY2tJbml0KCkgbXVzdCBiZSBjYWxsZWQgZmlyc3QgdG8gYWxsb2NhdGUgdGhlIGludGVybmFsIHN0YXRlCiAgICBhbmQgdG8gaW5pdGlhbGl6ZSB0aGUgc3RhdGUgd2l0aCB0aGUgdXNlci1wcm92aWRlZCB3aW5kb3cgYnVmZmVyLgpAQCAtMTA4OCw2ICsxMTQ1LDcgQEAKICAgICAgMjctMzE6IDAgKHJlc2VydmVkKQogICovCiAKKyNpZm5kZWYgWl9TT0xPCiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHV0aWxpdHkgZnVuY3Rpb25zICovCiAKQEAgLTExNDksMTAgKzEyMDcsMTEgQEAKIAogICAgICB1bmNvbXByZXNzIHJldHVybnMgWl9PSyBpZiBzdWNjZXNzLCBaX01FTV9FUlJPUiBpZiB0aGVyZSB3YXMgbm90CiAgICBlbm91Z2ggbWVtb3J5LCBaX0JVRl9FUlJPUiBpZiB0aGVyZSB3YXMgbm90IGVub3VnaCByb29tIGluIHRoZSBvdXRwdXQKLSAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4KKyAgIGJ1ZmZlciwgb3IgWl9EQVRBX0VSUk9SIGlmIHRoZSBpbnB1dCBkYXRhIHdhcyBjb3JydXB0ZWQgb3IgaW5jb21wbGV0ZS4gIEluCisgICB0aGUgY2FzZSB3aGVyZSB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20sIHVuY29tcHJlc3MoKSB3aWxsIGZpbGwgdGhlIG91dHB1dAorICAgYnVmZmVyIHdpdGggdGhlIHVuY29tcHJlc3NlZCBkYXRhIHVwIHRvIHRoYXQgcG9pbnQuCiAqLwogCi0KICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGd6aXAgZmlsZSBhY2Nlc3MgZnVuY3Rpb25zICovCiAKIC8qCkBAIC0xMTYyLDcgKzEyMjEsNyBAQAogICAgd3JhcHBlciwgZG9jdW1lbnRlZCBpbiBSRkMgMTk1Miwgd3JhcHBlZCBhcm91bmQgYSBkZWZsYXRlIHN0cmVhbS4KICovCiAKLXR5cGVkZWYgdm9pZHAgZ3pGaWxlOyAgICAgICAvKiBvcGFxdWUgZ3ppcCBmaWxlIGRlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IGd6RmlsZV9zICpnekZpbGU7ICAgIC8qIHNlbWktb3BhcXVlIGd6aXAgZmlsZSBkZXNjcmlwdG9yICovCiAKIC8qCiBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbiBPRigoY29uc3QgY2hhciAqcGF0aCwgY29uc3QgY2hhciAqbW9kZSkpOwpAQCAtMTE3MiwxMyArMTIzMSwyOCBAQAogICAgYSBzdHJhdGVneTogJ2YnIGZvciBmaWx0ZXJlZCBkYXRhIGFzIGluICJ3YjZmIiwgJ2gnIGZvciBIdWZmbWFuLW9ubHkKICAgIGNvbXByZXNzaW9uIGFzIGluICJ3YjFoIiwgJ1InIGZvciBydW4tbGVuZ3RoIGVuY29kaW5nIGFzIGluICJ3YjFSIiwgb3IgJ0YnCiAgICBmb3IgZml4ZWQgY29kZSBjb21wcmVzc2lvbiBhcyBpbiAid2I5RiIuICAoU2VlIHRoZSBkZXNjcmlwdGlvbiBvZgotICAgZGVmbGF0ZUluaXQyIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSBBbHNvICJhIgotICAgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiAidyIgdG8gcmVxdWVzdCB0aGF0IHRoZSBnemlwIHN0cmVhbSB0aGF0IHdpbGwgYmUKLSAgIHdyaXR0ZW4gYmUgYXBwZW5kZWQgdG8gdGhlIGZpbGUuICAiKyIgd2lsbCByZXN1bHQgaW4gYW4gZXJyb3IsIHNpbmNlIHJlYWRpbmcKLSAgIGFuZCB3cml0aW5nIHRvIHRoZSBzYW1lIGd6aXAgZmlsZSBpcyBub3Qgc3VwcG9ydGVkLgorICAgZGVmbGF0ZUluaXQyIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdHJhdGVneSBwYXJhbWV0ZXIuKSAgJ1QnIHdpbGwKKyAgIHJlcXVlc3QgdHJhbnNwYXJlbnQgd3JpdGluZyBvciBhcHBlbmRpbmcgd2l0aCBubyBjb21wcmVzc2lvbiBhbmQgbm90IHVzaW5nCisgICB0aGUgZ3ppcCBmb3JtYXQuCisKKyAgICAgImEiIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgInciIHRvIHJlcXVlc3QgdGhhdCB0aGUgZ3ppcCBzdHJlYW0gdGhhdCB3aWxsCisgICBiZSB3cml0dGVuIGJlIGFwcGVuZGVkIHRvIHRoZSBmaWxlLiAgIisiIHdpbGwgcmVzdWx0IGluIGFuIGVycm9yLCBzaW5jZQorICAgcmVhZGluZyBhbmQgd3JpdGluZyB0byB0aGUgc2FtZSBnemlwIGZpbGUgaXMgbm90IHN1cHBvcnRlZC4gIFRoZSBhZGRpdGlvbiBvZgorICAgIngiIHdoZW4gd3JpdGluZyB3aWxsIGNyZWF0ZSB0aGUgZmlsZSBleGNsdXNpdmVseSwgd2hpY2ggZmFpbHMgaWYgdGhlIGZpbGUKKyAgIGFscmVhZHkgZXhpc3RzLiAgT24gc3lzdGVtcyB0aGF0IHN1cHBvcnQgaXQsIHRoZSBhZGRpdGlvbiBvZiAiZSIgd2hlbgorICAgcmVhZGluZyBvciB3cml0aW5nIHdpbGwgc2V0IHRoZSBmbGFnIHRvIGNsb3NlIHRoZSBmaWxlIG9uIGFuIGV4ZWN2ZSgpIGNhbGwuCisKKyAgICAgVGhlc2UgZnVuY3Rpb25zLCBhcyB3ZWxsIGFzIGd6aXAsIHdpbGwgcmVhZCBhbmQgZGVjb2RlIGEgc2VxdWVuY2Ugb2YgZ3ppcAorICAgc3RyZWFtcyBpbiBhIGZpbGUuICBUaGUgYXBwZW5kIGZ1bmN0aW9uIG9mIGd6b3BlbigpIGNhbiBiZSB1c2VkIHRvIGNyZWF0ZQorICAgc3VjaCBhIGZpbGUuICAoQWxzbyBzZWUgZ3pmbHVzaCgpIGZvciBhbm90aGVyIHdheSB0byBkbyB0aGlzLikgIFdoZW4KKyAgIGFwcGVuZGluZywgZ3pvcGVuIGRvZXMgbm90IHRlc3Qgd2hldGhlciB0aGUgZmlsZSBiZWdpbnMgd2l0aCBhIGd6aXAgc3RyZWFtLAorICAgbm9yIGRvZXMgaXQgbG9vayBmb3IgdGhlIGVuZCBvZiB0aGUgZ3ppcCBzdHJlYW1zIHRvIGJlZ2luIGFwcGVuZGluZy4gIGd6b3BlbgorICAgd2lsbCBzaW1wbHkgYXBwZW5kIGEgZ3ppcCBzdHJlYW0gdG8gdGhlIGV4aXN0aW5nIGZpbGUuCiAKICAgICAgZ3pvcGVuIGNhbiBiZSB1c2VkIHRvIHJlYWQgYSBmaWxlIHdoaWNoIGlzIG5vdCBpbiBnemlwIGZvcm1hdDsgaW4gdGhpcwotICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLgorICAgY2FzZSBnenJlYWQgd2lsbCBkaXJlY3RseSByZWFkIGZyb20gdGhlIGZpbGUgd2l0aG91dCBkZWNvbXByZXNzaW9uLiAgV2hlbgorICAgcmVhZGluZywgdGhpcyB3aWxsIGJlIGRldGVjdGVkIGF1dG9tYXRpY2FsbHkgYnkgbG9va2luZyBmb3IgdGhlIG1hZ2ljIHR3by0KKyAgIGJ5dGUgZ3ppcCBoZWFkZXIuCiAKICAgICAgZ3pvcGVuIHJldHVybnMgTlVMTCBpZiB0aGUgZmlsZSBjb3VsZCBub3QgYmUgb3BlbmVkLCBpZiB0aGVyZSB3YXMKICAgIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlIGd6RmlsZSBzdGF0ZSwgb3IgaWYgYW4gaW52YWxpZCBtb2RlIHdhcwpAQCAtMTE5Nyw3ICsxMjcxLDExIEBACiAgICBkZXNjcmlwdG9yIGZkLCBqdXN0IGxpa2UgZmNsb3NlKGZkb3BlbihmZCwgbW9kZSkpIGNsb3NlcyB0aGUgZmlsZSBkZXNjcmlwdG9yCiAgICBmZC4gIElmIHlvdSB3YW50IHRvIGtlZXAgZmQgb3BlbiwgdXNlIGZkID0gZHVwKGZkX2tlZXApOyBneiA9IGd6ZG9wZW4oZmQsCiAgICBtb2RlKTsuICBUaGUgZHVwbGljYXRlZCBkZXNjcmlwdG9yIHNob3VsZCBiZSBzYXZlZCB0byBhdm9pZCBhIGxlYWssIHNpbmNlCi0gICBnemRvcGVuIGRvZXMgbm90IGNsb3NlIGZkIGlmIGl0IGZhaWxzLgorICAgZ3pkb3BlbiBkb2VzIG5vdCBjbG9zZSBmZCBpZiBpdCBmYWlscy4gIElmIHlvdSBhcmUgdXNpbmcgZmlsZW5vKCkgdG8gZ2V0IHRoZQorICAgZmlsZSBkZXNjcmlwdG9yIGZyb20gYSBGSUxFICosIHRoZW4geW91IHdpbGwgaGF2ZSB0byB1c2UgZHVwKCkgdG8gYXZvaWQKKyAgIGRvdWJsZS1jbG9zZSgpaW5nIHRoZSBmaWxlIGRlc2NyaXB0b3IuICBCb3RoIGd6Y2xvc2UoKSBhbmQgZmNsb3NlKCkgd2lsbAorICAgY2xvc2UgdGhlIGFzc29jaWF0ZWQgZmlsZSBkZXNjcmlwdG9yLCBzbyB0aGV5IG5lZWQgdG8gaGF2ZSBkaWZmZXJlbnQgZmlsZQorICAgZGVzY3JpcHRvcnMuCiAKICAgICAgZ3pkb3BlbiByZXR1cm5zIE5VTEwgaWYgdGhlcmUgd2FzIGluc3VmZmljaWVudCBtZW1vcnkgdG8gYWxsb2NhdGUgdGhlCiAgICBnekZpbGUgc3RhdGUsIGlmIGFuIGludmFsaWQgbW9kZSB3YXMgc3BlY2lmaWVkIChhbiAncicsICd3Jywgb3IgJ2EnIHdhcyBub3QKQEAgLTEyMzUsMTQgKzEzMTMsMjYgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pyZWFkIE9GKChnekZpbGUgZmlsZSwgdm9pZHAgYnVmLCB1bnNpZ25lZCBsZW4pKTsKIC8qCiAgICAgIFJlYWRzIHRoZSBnaXZlbiBudW1iZXIgb2YgdW5jb21wcmVzc2VkIGJ5dGVzIGZyb20gdGhlIGNvbXByZXNzZWQgZmlsZS4gIElmCi0gICB0aGUgaW5wdXQgZmlsZSB3YXMgbm90IGluIGd6aXAgZm9ybWF0LCBnenJlYWQgY29waWVzIHRoZSBnaXZlbiBudW1iZXIgb2YKLSAgIGJ5dGVzIGludG8gdGhlIGJ1ZmZlci4KKyAgIHRoZSBpbnB1dCBmaWxlIGlzIG5vdCBpbiBnemlwIGZvcm1hdCwgZ3pyZWFkIGNvcGllcyB0aGUgZ2l2ZW4gbnVtYmVyIG9mCisgICBieXRlcyBpbnRvIHRoZSBidWZmZXIgZGlyZWN0bHkgZnJvbSB0aGUgZmlsZS4KIAogICAgICBBZnRlciByZWFjaGluZyB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaW4gdGhlIGlucHV0LCBnenJlYWQgd2lsbCBjb250aW51ZQotICAgdG8gcmVhZCwgbG9va2luZyBmb3IgYW5vdGhlciBnemlwIHN0cmVhbSwgb3IgZmFpbGluZyB0aGF0LCByZWFkaW5nIHRoZSByZXN0Ci0gICBvZiB0aGUgaW5wdXQgZmlsZSBkaXJlY3RseSB3aXRob3V0IGRlY29tcHJlc3Npb24uICBUaGUgZW50aXJlIGlucHV0IGZpbGUKLSAgIHdpbGwgYmUgcmVhZCBpZiBnenJlYWQgaXMgY2FsbGVkIHVudGlsIGl0IHJldHVybnMgbGVzcyB0aGFuIHRoZSByZXF1ZXN0ZWQKLSAgIGxlbi4KKyAgIHRvIHJlYWQsIGxvb2tpbmcgZm9yIGFub3RoZXIgZ3ppcCBzdHJlYW0uICBBbnkgbnVtYmVyIG9mIGd6aXAgc3RyZWFtcyBtYXkgYmUKKyAgIGNvbmNhdGVuYXRlZCBpbiB0aGUgaW5wdXQgZmlsZSwgYW5kIHdpbGwgYWxsIGJlIGRlY29tcHJlc3NlZCBieSBnenJlYWQoKS4KKyAgIElmIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZ3ppcCBzdHJlYW0gaXMgZW5jb3VudGVyZWQgYWZ0ZXIgYSBnemlwIHN0cmVhbSwKKyAgIHRoYXQgcmVtYWluaW5nIHRyYWlsaW5nIGdhcmJhZ2UgaXMgaWdub3JlZCAoYW5kIG5vIGVycm9yIGlzIHJldHVybmVkKS4KKworICAgICBnenJlYWQgY2FuIGJlIHVzZWQgdG8gcmVhZCBhIGd6aXAgZmlsZSB0aGF0IGlzIGJlaW5nIGNvbmN1cnJlbnRseSB3cml0dGVuLgorICAgVXBvbiByZWFjaGluZyB0aGUgZW5kIG9mIHRoZSBpbnB1dCwgZ3pyZWFkIHdpbGwgcmV0dXJuIHdpdGggdGhlIGF2YWlsYWJsZQorICAgZGF0YS4gIElmIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGd6ZXJyb3IgaXMgWl9PSyBvciBaX0JVRl9FUlJPUiwgdGhlbgorICAgZ3pjbGVhcmVyciBjYW4gYmUgdXNlZCB0byBjbGVhciB0aGUgZW5kIG9mIGZpbGUgaW5kaWNhdG9yIGluIG9yZGVyIHRvIHBlcm1pdAorICAgZ3pyZWFkIHRvIGJlIHRyaWVkIGFnYWluLiAgWl9PSyBpbmRpY2F0ZXMgdGhhdCBhIGd6aXAgc3RyZWFtIHdhcyBjb21wbGV0ZWQKKyAgIG9uIHRoZSBsYXN0IGd6cmVhZC4gIFpfQlVGX0VSUk9SIGluZGljYXRlcyB0aGF0IHRoZSBpbnB1dCBmaWxlIGVuZGVkIGluIHRoZQorICAgbWlkZGxlIG9mIGEgZ3ppcCBzdHJlYW0uICBOb3RlIHRoYXQgZ3pyZWFkIGRvZXMgbm90IHJldHVybiAtMSBpbiB0aGUgZXZlbnQKKyAgIG9mIGFuIGluY29tcGxldGUgZ3ppcCBzdHJlYW0uICBUaGlzIGVycm9yIGlzIGRlZmVycmVkIHVudGlsIGd6Y2xvc2UoKSwgd2hpY2gKKyAgIHdpbGwgcmV0dXJuIFpfQlVGX0VSUk9SIGlmIHRoZSBsYXN0IGd6cmVhZCBlbmRlZCBpbiB0aGUgbWlkZGxlIG9mIGEgZ3ppcAorICAgc3RyZWFtLiAgQWx0ZXJuYXRpdmVseSwgZ3plcnJvciBjYW4gYmUgdXNlZCBiZWZvcmUgZ3pjbG9zZSB0byBkZXRlY3QgdGhpcworICAgY2FzZS4KIAogICAgICBnenJlYWQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVuY29tcHJlc3NlZCBieXRlcyBhY3R1YWxseSByZWFkLCBsZXNzIHRoYW4KICAgIGxlbiBmb3IgZW5kIG9mIGZpbGUsIG9yIC0xIGZvciBlcnJvci4KQEAgLTEyNTYsNyArMTM0Niw3IEBACiAgICBlcnJvci4KICovCiAKLVpFWFRFUk4gaW50IFpFWFBPUlRWQSBnenByaW50ZiBPRigoZ3pGaWxlIGZpbGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CitaRVhURVJOIGludCBaRVhQT1JUVkEgZ3pwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpOwogLyoKICAgICAgQ29udmVydHMsIGZvcm1hdHMsIGFuZCB3cml0ZXMgdGhlIGFyZ3VtZW50cyB0byB0aGUgY29tcHJlc3NlZCBmaWxlIHVuZGVyCiAgICBjb250cm9sIG9mIHRoZSBmb3JtYXQgc3RyaW5nLCBhcyBpbiBmcHJpbnRmLiAgZ3pwcmludGYgcmV0dXJucyB0aGUgbnVtYmVyIG9mCkBAIC0xMzAxLDcgKzEzOTEsMTAgQEAKIFpFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjIE9GKChnekZpbGUgZmlsZSkpOwogLyoKICAgICAgUmVhZHMgb25lIGJ5dGUgZnJvbSB0aGUgY29tcHJlc3NlZCBmaWxlLiAgZ3pnZXRjIHJldHVybnMgdGhpcyBieXRlIG9yIC0xCi0gICBpbiBjYXNlIG9mIGVuZCBvZiBmaWxlIG9yIGVycm9yLgorICAgaW4gY2FzZSBvZiBlbmQgb2YgZmlsZSBvciBlcnJvci4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYXMgYSBtYWNybyBmb3Igc3BlZWQuCisgICBBcyBzdWNoLCBpdCBkb2VzIG5vdCBkbyBhbGwgb2YgdGhlIGNoZWNraW5nIHRoZSBvdGhlciBmdW5jdGlvbnMgZG8uICBJLmUuCisgICBpdCBkb2VzIG5vdCBjaGVjayB0byBzZWUgaWYgZmlsZSBpcyBOVUxMLCBub3Igd2hldGhlciB0aGUgc3RydWN0dXJlIGZpbGUKKyAgIHBvaW50cyB0byBoYXMgYmVlbiBjbG9iYmVyZWQgb3Igbm90LgogKi8KIAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnenVuZ2V0YyBPRigoaW50IGMsIGd6RmlsZSBmaWxlKSk7CkBAIC0xMzk3LDkgKzE0OTAsNyBAQAogWkVYVEVSTiBpbnQgWkVYUE9SVCBnemRpcmVjdCBPRigoZ3pGaWxlIGZpbGUpKTsKIC8qCiAgICAgIFJldHVybnMgdHJ1ZSAoMSkgaWYgZmlsZSBpcyBiZWluZyBjb3BpZWQgZGlyZWN0bHkgd2hpbGUgcmVhZGluZywgb3IgZmFsc2UKLSAgICgwKSBpZiBmaWxlIGlzIGEgZ3ppcCBzdHJlYW0gYmVpbmcgZGVjb21wcmVzc2VkLiAgVGhpcyBzdGF0ZSBjYW4gY2hhbmdlIGZyb20KLSAgIGZhbHNlIHRvIHRydWUgd2hpbGUgcmVhZGluZyB0aGUgaW5wdXQgZmlsZSBpZiB0aGUgZW5kIG9mIGEgZ3ppcCBzdHJlYW0gaXMKLSAgIHJlYWNoZWQsIGJ1dCBpcyBmb2xsb3dlZCBieSBkYXRhIHRoYXQgaXMgbm90IGFub3RoZXIgZ3ppcCBzdHJlYW0uCisgICAoMCkgaWYgZmlsZSBpcyBhIGd6aXAgc3RyZWFtIGJlaW5nIGRlY29tcHJlc3NlZC4KIAogICAgICBJZiB0aGUgaW5wdXQgZmlsZSBpcyBlbXB0eSwgZ3pkaXJlY3QoKSB3aWxsIHJldHVybiB0cnVlLCBzaW5jZSB0aGUgaW5wdXQKICAgIGRvZXMgbm90IGNvbnRhaW4gYSBnemlwIHN0cmVhbS4KQEAgLTE0MDgsNiArMTQ5OSwxMyBAQAogICAgY2F1c2UgYnVmZmVycyB0byBiZSBhbGxvY2F0ZWQgdG8gYWxsb3cgcmVhZGluZyB0aGUgZmlsZSB0byBkZXRlcm1pbmUgaWYgaXQKICAgIGlzIGEgZ3ppcCBmaWxlLiAgVGhlcmVmb3JlIGlmIGd6YnVmZmVyKCkgaXMgdXNlZCwgaXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUKICAgIGd6ZGlyZWN0KCkuCisKKyAgICAgV2hlbiB3cml0aW5nLCBnemRpcmVjdCgpIHJldHVybnMgdHJ1ZSAoMSkgaWYgdHJhbnNwYXJlbnQgd3JpdGluZyB3YXMKKyAgIHJlcXVlc3RlZCAoIndUIiBmb3IgdGhlIGd6b3BlbigpIG1vZGUpLCBvciBmYWxzZSAoMCkgb3RoZXJ3aXNlLiAgKE5vdGU6CisgICBnemRpcmVjdCgpIGlzIG5vdCBuZWVkZWQgd2hlbiB3cml0aW5nLiAgVHJhbnNwYXJlbnQgd3JpdGluZyBtdXN0IGJlCisgICBleHBsaWNpdGx5IHJlcXVlc3RlZCwgc28gdGhlIGFwcGxpY2F0aW9uIGFscmVhZHkga25vd3MgdGhlIGFuc3dlci4gIFdoZW4KKyAgIGxpbmtpbmcgc3RhdGljYWxseSwgdXNpbmcgZ3pkaXJlY3QoKSB3aWxsIGluY2x1ZGUgYWxsIG9mIHRoZSB6bGliIGNvZGUgZm9yCisgICBnemlwIGZpbGUgcmVhZGluZyBhbmQgZGVjb21wcmVzc2lvbiwgd2hpY2ggbWF5IG5vdCBiZSBkZXNpcmVkLikKICovCiAKIFpFWFRFUk4gaW50IFpFWFBPUlQgICAgZ3pjbG9zZSBPRigoZ3pGaWxlIGZpbGUpKTsKQEAgLTE0MTksNyArMTUxNyw4IEBACiAgICBtdXN0IG5vdCBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ugb24gdGhlIHNhbWUgYWxsb2NhdGlvbi4KIAogICAgICBnemNsb3NlIHdpbGwgcmV0dXJuIFpfU1RSRUFNX0VSUk9SIGlmIGZpbGUgaXMgbm90IHZhbGlkLCBaX0VSUk5PIG9uIGEKLSAgIGZpbGUgb3BlcmF0aW9uIGVycm9yLCBvciBaX09LIG9uIHN1Y2Nlc3MuCisgICBmaWxlIG9wZXJhdGlvbiBlcnJvciwgWl9NRU1fRVJST1IgaWYgb3V0IG9mIG1lbW9yeSwgWl9CVUZfRVJST1IgaWYgdGhlCisgICBsYXN0IHJlYWQgZW5kZWQgaW4gdGhlIG1pZGRsZSBvZiBhIGd6aXAgc3RyZWFtLCBvciBaX09LIG9uIHN1Y2Nlc3MuCiAqLwogCiBaRVhURVJOIGludCBaRVhQT1JUIGd6Y2xvc2VfciBPRigoZ3pGaWxlIGZpbGUpKTsKQEAgLTE0NTcsNiArMTU1Niw3IEBACiAgICBmaWxlIHRoYXQgaXMgYmVpbmcgd3JpdHRlbiBjb25jdXJyZW50bHkuCiAqLwogCisjZW5kaWYgLyogIVpfU09MTyAqLwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8KIApAQCAtMTQ5MiwxNiArMTU5MiwxNyBAQAogICAgICBDb21iaW5lIHR3byBBZGxlci0zMiBjaGVja3N1bXMgaW50byBvbmUuICBGb3IgdHdvIHNlcXVlbmNlcyBvZiBieXRlcywgc2VxMQogICAgYW5kIHNlcTIgd2l0aCBsZW5ndGhzIGxlbjEgYW5kIGxlbjIsIEFkbGVyLTMyIGNoZWNrc3VtcyB3ZXJlIGNhbGN1bGF0ZWQgZm9yCiAgICBlYWNoLCBhZGxlcjEgYW5kIGFkbGVyMi4gIGFkbGVyMzJfY29tYmluZSgpIHJldHVybnMgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mCi0gICBzZXExIGFuZCBzZXEyIGNvbmNhdGVuYXRlZCwgcmVxdWlyaW5nIG9ubHkgYWRsZXIxLCBhZGxlcjIsIGFuZCBsZW4yLgorICAgc2VxMSBhbmQgc2VxMiBjb25jYXRlbmF0ZWQsIHJlcXVpcmluZyBvbmx5IGFkbGVyMSwgYWRsZXIyLCBhbmQgbGVuMi4gIE5vdGUKKyAgIHRoYXQgdGhlIHpfb2ZmX3QgdHlwZSAobGlrZSBvZmZfdCkgaXMgYSBzaWduZWQgaW50ZWdlci4gIElmIGxlbjIgaXMKKyAgIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGhhcyBubyBtZWFuaW5nIG9yIHV0aWxpdHkuCiAqLwogCiBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzIgICBPRigodUxvbmcgY3JjLCBjb25zdCBCeXRlZiAqYnVmLCB1SW50IGxlbikpOwogLyoKICAgICAgVXBkYXRlIGEgcnVubmluZyBDUkMtMzIgd2l0aCB0aGUgYnl0ZXMgYnVmWzAuLmxlbi0xXSBhbmQgcmV0dXJuIHRoZQogICAgdXBkYXRlZCBDUkMtMzIuICBJZiBidWYgaXMgWl9OVUxMLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVpcmVkCi0gICBpbml0aWFsIHZhbHVlIGZvciB0aGUgZm9yIHRoZSBjcmMuICBQcmUtIGFuZCBwb3N0LWNvbmRpdGlvbmluZyAob25lJ3MKLSAgIGNvbXBsZW1lbnQpIGlzIHBlcmZvcm1lZCB3aXRoaW4gdGhpcyBmdW5jdGlvbiBzbyBpdCBzaG91bGRuJ3QgYmUgZG9uZSBieSB0aGUKLSAgIGFwcGxpY2F0aW9uLgorICAgaW5pdGlhbCB2YWx1ZSBmb3IgdGhlIGNyYy4gIFByZS0gYW5kIHBvc3QtY29uZGl0aW9uaW5nIChvbmUncyBjb21wbGVtZW50KSBpcworICAgcGVyZm9ybWVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9uIHNvIGl0IHNob3VsZG4ndCBiZSBkb25lIGJ5IHRoZSBhcHBsaWNhdGlvbi4KIAogICAgVXNhZ2UgZXhhbXBsZToKIApAQCAtMTU0NCwxNyArMTY0NSw0MiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RyZWFtX3NpemUpKTsKICNkZWZpbmUgZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpIFwKLSAgICAgICAgZGVmbGF0ZUluaXRfKChzdHJtKSwgKGxldmVsKSwgICAgICAgWkxJQl9WRVJTSU9OLCBzaXplb2Yoel9zdHJlYW0pKQorICAgICAgICBkZWZsYXRlSW5pdF8oKHN0cm0pLCAobGV2ZWwpLCBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKICNkZWZpbmUgaW5mbGF0ZUluaXQoc3RybSkgXAotICAgICAgICBpbmZsYXRlSW5pdF8oKHN0cm0pLCAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgIGluZmxhdGVJbml0Xygoc3RybSksIFpMSUJfVkVSU0lPTiwgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIG1ldGhvZCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5KSBcCiAgICAgICAgIGRlZmxhdGVJbml0Ml8oKHN0cm0pLChsZXZlbCksKG1ldGhvZCksKHdpbmRvd0JpdHMpLChtZW1MZXZlbCksXAotICAgICAgICAgICAgICAgICAgICAgIChzdHJhdGVneSksICAgICAgICAgICBaTElCX1ZFUlNJT04sIHNpemVvZih6X3N0cmVhbSkpCisgICAgICAgICAgICAgICAgICAgICAgKHN0cmF0ZWd5KSwgWkxJQl9WRVJTSU9OLCAoaW50KXNpemVvZih6X3N0cmVhbSkpCiAjZGVmaW5lIGluZmxhdGVJbml0MihzdHJtLCB3aW5kb3dCaXRzKSBcCi0gICAgICAgIGluZmxhdGVJbml0Ml8oKHN0cm0pLCAod2luZG93Qml0cyksIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgaW5mbGF0ZUluaXQyXygoc3RybSksICh3aW5kb3dCaXRzKSwgWkxJQl9WRVJTSU9OLCBcCisgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2Yoel9zdHJlYW0pKQogI2RlZmluZSBpbmZsYXRlQmFja0luaXQoc3RybSwgd2luZG93Qml0cywgd2luZG93KSBcCiAgICAgICAgIGluZmxhdGVCYWNrSW5pdF8oKHN0cm0pLCAod2luZG93Qml0cyksICh3aW5kb3cpLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpMSUJfVkVSU0lPTiwgc2l6ZW9mKHpfc3RyZWFtKSkKKyAgICAgICAgICAgICAgICAgICAgICBaTElCX1ZFUlNJT04sIChpbnQpc2l6ZW9mKHpfc3RyZWFtKSkKKworI2lmbmRlZiBaX1NPTE8KKworLyogZ3pnZXRjKCkgbWFjcm8gYW5kIGl0cyBzdXBwb3J0aW5nIGZ1bmN0aW9uIGFuZCBleHBvc2VkIGRhdGEgc3RydWN0dXJlLiAgTm90ZQorICogdGhhdCB0aGUgcmVhbCBpbnRlcm5hbCBzdGF0ZSBpcyBtdWNoIGxhcmdlciB0aGFuIHRoZSBleHBvc2VkIHN0cnVjdHVyZS4KKyAqIFRoaXMgYWJicmV2aWF0ZWQgc3RydWN0dXJlIGV4cG9zZXMganVzdCBlbm91Z2ggZm9yIHRoZSBnemdldGMoKSBtYWNyby4gIFRoZQorICogdXNlciBzaG91bGQgbm90IG1lc3Mgd2l0aCB0aGVzZSBleHBvc2VkIGVsZW1lbnRzLCBzaW5jZSB0aGVpciBuYW1lcyBvcgorICogYmVoYXZpb3IgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUsIHBlcmhhcHMgZXZlbiBjYXByaWNpb3VzbHkuICBUaGV5IGNhbgorICogb25seSBiZSB1c2VkIGJ5IHRoZSBnemdldGMoKSBtYWNyby4gIFlvdSBoYXZlIGJlZW4gd2FybmVkLgorICovCitzdHJ1Y3QgZ3pGaWxlX3MgeworICAgIHVuc2lnbmVkIGhhdmU7CisgICAgdW5zaWduZWQgY2hhciAqbmV4dDsKKyAgICB6X29mZjY0X3QgcG9zOworfTsKK1pFWFRFUk4gaW50IFpFWFBPUlQgZ3pnZXRjXyBPRigoZ3pGaWxlIGZpbGUpKTsgIC8qIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNpZmRlZiBaX1BSRUZJWF9TRVQKKyMgIHVuZGVmIHpfZ3pnZXRjCisjICBkZWZpbmUgel9nemdldGMoZykgXAorICAgICAgICAgICgoZyktPmhhdmUgPyAoKGcpLT5oYXZlLS0sIChnKS0+cG9zKyssICooKGcpLT5uZXh0KSsrKSA6IGd6Z2V0YyhnKSkKKyNlbHNlCisjICBkZWZpbmUgZ3pnZXRjKGcpIFwKKyAgICAgICAgICAoKGcpLT5oYXZlID8gKChnKS0+aGF2ZS0tLCAoZyktPnBvcysrLCAqKChnKS0+bmV4dCkrKykgOiBnemdldGMoZykpCisjZW5kaWYKIAogLyogcHJvdmlkZSA2NC1iaXQgb2Zmc2V0IGZ1bmN0aW9ucyBpZiBfTEFSR0VGSUxFNjRfU09VUkNFIGRlZmluZWQsIGFuZC9vcgogICogY2hhbmdlIHRoZSByZWd1bGFyIGZ1bmN0aW9ucyB0byA2NCBiaXRzIGlmIF9GSUxFX09GRlNFVF9CSVRTIGlzIDY0IChpZgpAQCAtMTU2Miw3ICsxNjg4LDcgQEAKICAqIGZ1bmN0aW9ucyBhcmUgY2hhbmdlZCB0byA2NCBiaXRzKSAtLSBpbiBjYXNlIHRoZXNlIGFyZSBzZXQgb24gc3lzdGVtcwogICogd2l0aG91dCBsYXJnZSBmaWxlIHN1cHBvcnQsIF9MRlM2NF9MQVJHRUZJTEUgbXVzdCBhbHNvIGJlIHRydWUKICAqLwotI2lmIGRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgJiYgX0xGUzY0X0xBUkdFRklMRS0wCisjaWZkZWYgWl9MQVJHRTY0CiAgICBaRVhURVJOIGd6RmlsZSBaRVhQT1JUIGd6b3BlbjY0IE9GKChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOwogICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenNlZWs2NCBPRigoZ3pGaWxlLCB6X29mZjY0X3QsIGludCkpOwogICAgWkVYVEVSTiB6X29mZjY0X3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CkBAIC0xNTcxLDE0ICsxNjk3LDIzIEBACiAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmNjRfdCkpOwogI2VuZGlmCiAKLSNpZiAhZGVmaW5lZChaTElCX0lOVEVSTkFMKSAmJiBfRklMRV9PRkZTRVRfQklUUy0wID09IDY0ICYmIF9MRlM2NF9MQVJHRUZJTEUtMAotIyAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAotIyAgZGVmaW5lIGd6c2VlayBnenNlZWs2NAotIyAgZGVmaW5lIGd6dGVsbCBnenRlbGw2NAotIyAgZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKLSMgIGRlZmluZSBhZGxlcjMyX2NvbWJpbmUgYWRsZXIzMl9jb21iaW5lNjQKLSMgIGRlZmluZSBjcmMzMl9jb21iaW5lIGNyYzMyX2NvbWJpbmU2NAotIyAgaWZkZWYgX0xBUkdFRklMRTY0X1NPVVJDRQorI2lmICFkZWZpbmVkKFpMSUJfSU5URVJOQUwpICYmIGRlZmluZWQoWl9XQU5UNjQpCisjICBpZmRlZiBaX1BSRUZJWF9TRVQKKyMgICAgZGVmaW5lIHpfZ3pvcGVuIHpfZ3pvcGVuNjQKKyMgICAgZGVmaW5lIHpfZ3pzZWVrIHpfZ3pzZWVrNjQKKyMgICAgZGVmaW5lIHpfZ3p0ZWxsIHpfZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIHpfZ3pvZmZzZXQgel9nem9mZnNldDY0CisjICAgIGRlZmluZSB6X2FkbGVyMzJfY29tYmluZSB6X2FkbGVyMzJfY29tYmluZTY0CisjICAgIGRlZmluZSB6X2NyYzMyX2NvbWJpbmUgel9jcmMzMl9jb21iaW5lNjQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIGd6b3BlbiBnem9wZW42NAorIyAgICBkZWZpbmUgZ3pzZWVrIGd6c2VlazY0CisjICAgIGRlZmluZSBnenRlbGwgZ3p0ZWxsNjQKKyMgICAgZGVmaW5lIGd6b2Zmc2V0IGd6b2Zmc2V0NjQKKyMgICAgZGVmaW5lIGFkbGVyMzJfY29tYmluZSBhZGxlcjMyX2NvbWJpbmU2NAorIyAgICBkZWZpbmUgY3JjMzJfY29tYmluZSBjcmMzMl9jb21iaW5lNjQKKyMgIGVuZGlmCisjICBpZm5kZWYgWl9MQVJHRTY0CiAgICAgIFpFWFRFUk4gZ3pGaWxlIFpFWFBPUlQgZ3pvcGVuNjQgT0YoKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CiAgICAgIFpFWFRFUk4gel9vZmZfdCBaRVhQT1JUIGd6c2VlazY0IE9GKChnekZpbGUsIHpfb2ZmX3QsIGludCkpOwogICAgICBaRVhURVJOIHpfb2ZmX3QgWkVYUE9SVCBnenRlbGw2NCBPRigoZ3pGaWxlKSk7CkBAIC0xNTk1LDYgKzE3MzAsMTMgQEAKICAgIFpFWFRFUk4gdUxvbmcgWkVYUE9SVCBjcmMzMl9jb21iaW5lIE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICNlbmRpZgogCisjZWxzZSAvKiBaX1NPTE8gKi8KKworICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZSBPRigodUxvbmcsIHVMb25nLCB6X29mZl90KSk7CisKKyNlbmRpZiAvKiAhWl9TT0xPICovCisKIC8qIGhhY2sgZm9yIGJ1Z2d5IGNvbXBpbGVycyAqLwogI2lmICFkZWZpbmVkKFpVVElMX0gpICYmICFkZWZpbmVkKE5PX0RVTU1ZX0RFQ0wpCiAgICAgc3RydWN0IGludGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsKQEAgLTE2MDMsOCArMTc0NSwyMSBAQAogLyogdW5kb2N1bWVudGVkIGZ1bmN0aW9ucyAqLwogWkVYVEVSTiBjb25zdCBjaGFyICAgKiBaRVhQT1JUIHpFcnJvciAgICAgICAgICAgT0YoKGludCkpOwogWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVTeW5jUG9pbnQgT0YoKHpfc3RyZWFtcCkpOwotWkVYVEVSTiBjb25zdCB1TG9uZ2YgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsKK1pFWFRFUk4gY29uc3Qgel9jcmNfdCBGQVIgKiBaRVhQT1JUIGdldF9jcmNfdGFibGUgICAgT0YoKHZvaWQpKTsKIFpFWFRFUk4gaW50ICAgICAgICAgICAgWkVYUE9SVCBpbmZsYXRlVW5kZXJtaW5lIE9GKCh6X3N0cmVhbXAsIGludCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGluZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworWkVYVEVSTiBpbnQgICAgICAgICAgICBaRVhQT1JUIGRlZmxhdGVSZXNldEtlZXAgT0YoKHpfc3RyZWFtcCkpOworI2lmIGRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5lZChaX1NPTE8pCitaRVhURVJOIGd6RmlsZSAgICAgICAgIFpFWFBPUlQgZ3pvcGVuX3cgT0YoKGNvbnN0IHdjaGFyX3QgKnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm1vZGUpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoU1REQykgfHwgZGVmaW5lZChaX0hBVkVfU1REQVJHX0gpCisjICBpZm5kZWYgWl9TT0xPCitaRVhURVJOIGludCAgICAgICAgICAgIFpFWFBPUlRWQSBnenZwcmludGYgWl9BUkcoKGd6RmlsZSBmaWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2xpc3QgdmEpKTsKKyMgIGVuZGlmCisjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9Nb2R1bGVzL3psaWIvemxpYi5tYXAgYi9Nb2R1bGVzL3psaWIvemxpYi5tYXAKaW5kZXggZjI4MmQzNi4uNTVjNjY0NyAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGliL3psaWIubWFwCisrKyBiL01vZHVsZXMvemxpYi96bGliLm1hcApAQCAtNjYsMyArNjYsMTggQEAKICAgICBnemNsb3NlX3I7CiAgICAgZ3pjbG9zZV93OwogfSBaTElCXzEuMi4zLjQ7CisKK1pMSUJfMS4yLjUuMSB7CisgICAgZGVmbGF0ZVBlbmRpbmc7Cit9IFpMSUJfMS4yLjMuNTsKKworWkxJQl8xLjIuNS4yIHsKKyAgICBkZWZsYXRlUmVzZXRLZWVwOworICAgIGd6Z2V0Y187CisgICAgaW5mbGF0ZVJlc2V0S2VlcDsKK30gWkxJQl8xLjIuNS4xOworCitaTElCXzEuMi43LjEgeworICAgIGluZmxhdGVHZXREaWN0aW9uYXJ5OworICAgIGd6dnByaW50ZjsKK30gWkxJQl8xLjIuNS4yOwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3p1dGlsLmMgYi9Nb2R1bGVzL3psaWIvenV0aWwuYwppbmRleCA4OThlZDM0Li4yM2QyZWJlIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvenV0aWwuYworKysgYi9Nb2R1bGVzL3psaWIvenV0aWwuYwpAQCAtMSwxNyArMSwyMCBAQAogLyogenV0aWwuYyAtLSB0YXJnZXQgZGVwZW5kZW50IHV0aWxpdHkgZnVuY3Rpb25zIGZvciB0aGUgY29tcHJlc3Npb24gbGlicmFyeQotICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUsIDIwMTAgSmVhbi1sb3VwIEdhaWxseS4KKyAqIENvcHlyaWdodCAoQykgMTk5NS0yMDA1LCAyMDEwLCAyMDExLCAyMDEyIEplYW4tbG91cCBHYWlsbHkuCiAgKiBGb3IgY29uZGl0aW9ucyBvZiBkaXN0cmlidXRpb24gYW5kIHVzZSwgc2VlIGNvcHlyaWdodCBub3RpY2UgaW4gemxpYi5oCiAgKi8KIAogLyogQCgjKSAkSWQkICovCiAKICNpbmNsdWRlICJ6dXRpbC5oIgorI2lmbmRlZiBaX1NPTE8KKyMgIGluY2x1ZGUgImd6Z3V0cy5oIgorI2VuZGlmCiAKICNpZm5kZWYgTk9fRFVNTVlfREVDTAogc3RydWN0IGludGVybmFsX3N0YXRlICAgICAge2ludCBkdW1teTt9OyAvKiBmb3IgYnVnZ3kgY29tcGlsZXJzICovCiAjZW5kaWYKIAotY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsKK3pfY29uc3QgY2hhciAqIGNvbnN0IHpfZXJybXNnWzEwXSA9IHsKICJuZWVkIGRpY3Rpb25hcnkiLCAgICAgLyogWl9ORUVEX0RJQ1QgICAgICAgMiAgKi8KICJzdHJlYW0gZW5kIiwgICAgICAgICAgLyogWl9TVFJFQU1fRU5EICAgICAgMSAgKi8KICIiLCAgICAgICAgICAgICAgICAgICAgLyogWl9PSyAgICAgICAgICAgICAgMCAgKi8KQEAgLTg1LDI3ICs4OCwyNyBAQAogI2lmZGVmIEZBU1RFU1QKICAgICBmbGFncyArPSAxTCA8PCAyMTsKICNlbmRpZgotI2lmZGVmIFNUREMKKyNpZiBkZWZpbmVkKFNUREMpIHx8IGRlZmluZWQoWl9IQVZFX1NUREFSR19IKQogIyAgaWZkZWYgTk9fdnNucHJpbnRmCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI1OworICAgIGZsYWdzICs9IDFMIDw8IDI1OwogIyAgICBpZmRlZiBIQVNfdnNwcmludGZfdm9pZAotICAgICAgICBmbGFncyArPSAxTCA8PCAyNjsKKyAgICBmbGFncyArPSAxTCA8PCAyNjsKICMgICAgZW5kaWYKICMgIGVsc2UKICMgICAgaWZkZWYgSEFTX3ZzbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbHNlCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI0OworICAgIGZsYWdzICs9IDFMIDw8IDI0OwogIyAgaWZkZWYgTk9fc25wcmludGYKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjU7CiAjICAgIGlmZGVmIEhBU19zcHJpbnRmX3ZvaWQKLSAgICAgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CisgICAgZmxhZ3MgKz0gMUwgPDwgMjY7CiAjICAgIGVuZGlmCiAjICBlbHNlCiAjICAgIGlmZGVmIEhBU19zbnByaW50Zl92b2lkCi0gICAgICAgIGZsYWdzICs9IDFMIDw8IDI2OworICAgIGZsYWdzICs9IDFMIDw8IDI2OwogIyAgICBlbmRpZgogIyAgZW5kaWYKICNlbmRpZgpAQCAtMTgxLDYgKzE4NCw3IEBACiB9CiAjZW5kaWYKIAorI2lmbmRlZiBaX1NPTE8KIAogI2lmZGVmIFNZUzE2QklUCiAKQEAgLTMxNiwzICszMjAsNSBAQAogfQogCiAjZW5kaWYgLyogTVlfWkNBTExPQyAqLworCisjZW5kaWYgLyogIVpfU09MTyAqLwpkaWZmIC0tZ2l0IGEvTW9kdWxlcy96bGliL3p1dGlsLmggYi9Nb2R1bGVzL3psaWIvenV0aWwuaAppbmRleCAyNThmYTg4Li4yNGFiMDZiIDEwMDY0NAotLS0gYS9Nb2R1bGVzL3psaWIvenV0aWwuaAorKysgYi9Nb2R1bGVzL3psaWIvenV0aWwuaApAQCAtMSw1ICsxLDUgQEAKIC8qIHp1dGlsLmggLS0gaW50ZXJuYWwgaW50ZXJmYWNlIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBjb21wcmVzc2lvbiBsaWJyYXJ5Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAxMCBKZWFuLWxvdXAgR2FpbGx5LgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMTMgSmVhbi1sb3VwIEdhaWxseS4KICAqIEZvciBjb25kaXRpb25zIG9mIGRpc3RyaWJ1dGlvbiBhbmQgdXNlLCBzZWUgY29weXJpZ2h0IG5vdGljZSBpbiB6bGliLmgKICAqLwogCkBAIC0xMyw3ICsxMyw3IEBACiAjaWZuZGVmIFpVVElMX0gKICNkZWZpbmUgWlVUSUxfSAogCi0jaWYgKChfX0dOVUNfXy0wKSAqIDEwICsgX19HTlVDX01JTk9SX18tMCA+PSAzMykgJiYgIWRlZmluZWQoTk9fVklaKQorI2lmZGVmIEhBVkVfSElEREVOCiAjICBkZWZpbmUgWkxJQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5ICgiaGlkZGVuIikpKQogI2Vsc2UKICMgIGRlZmluZSBaTElCX0lOVEVSTkFMCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpbmNsdWRlICJ6bGliLmgiCiAKLSNpZmRlZiBTVERDCisjaWYgZGVmaW5lZChTVERDKSAmJiAhZGVmaW5lZChaX1NPTE8pCiAjICBpZiAhKGRlZmluZWQoX1dJTjMyX1dDRSkgJiYgZGVmaW5lZChfTVNDX1ZFUikpCiAjICAgIGluY2x1ZGUgPHN0ZGRlZi5oPgogIyAgZW5kaWYKQEAgLTI5LDYgKzI5LDEwIEBACiAjICBpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCisjaWZkZWYgWl9TT0xPCisgICB0eXBlZGVmIGxvbmcgcHRyZGlmZl90OyAgLyogZ3Vlc3MgLS0gd2lsbCBiZSBjYXVnaHQgaWYgZ3Vlc3MgaXMgd3JvbmcgKi8KKyNlbmRpZgorCiAjaWZuZGVmIGxvY2FsCiAjICBkZWZpbmUgbG9jYWwgc3RhdGljCiAjZW5kaWYKQEAgLTQwLDEzICs0NCwxMyBAQAogdHlwZWRlZiB1c2ggRkFSIHVzaGY7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHVsZzsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCB6X2Vycm1zZ1sxMF07IC8qIGluZGV4ZWQgYnkgMi16bGliX2Vycm9yICovCitleHRlcm4gel9jb25zdCBjaGFyICogY29uc3Qgel9lcnJtc2dbMTBdOyAvKiBpbmRleGVkIGJ5IDItemxpYl9lcnJvciAqLwogLyogKHNpemUgZ2l2ZW4gdG8gYXZvaWQgc2lsbHkgd2FybmluZ3Mgd2l0aCBWaXN1YWwgQysrKSAqLwogCiAjZGVmaW5lIEVSUl9NU0coZXJyKSB6X2Vycm1zZ1taX05FRURfRElDVC0oZXJyKV0KIAogI2RlZmluZSBFUlJfUkVUVVJOKHN0cm0sZXJyKSBcCi0gIHJldHVybiAoc3RybS0+bXNnID0gKGNoYXIqKUVSUl9NU0coZXJyKSwgKGVycikpCisgIHJldHVybiAoc3RybS0+bXNnID0gRVJSX01TRyhlcnIpLCAoZXJyKSkKIC8qIFRvIGJlIHVzZWQgb25seSB3aGVuIHRoZSBzdGF0ZSBpcyBrbm93biB0byBiZSB2YWxpZCAqLwogCiAgICAgICAgIC8qIGNvbW1vbiBjb25zdGFudHMgKi8KQEAgLTc4LDE2ICs4MiwxOCBAQAogCiAjaWYgZGVmaW5lZChNU0RPUykgfHwgKGRlZmluZWQoV0lORE9XUykgJiYgIWRlZmluZWQoV0lOMzIpKQogIyAgZGVmaW5lIE9TX0NPREUgIDB4MDAKLSMgIGlmIGRlZmluZWQoX19UVVJCT0NfXykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pCi0jICAgIGlmIChfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQotICAgICAgIC8qIEFsbG93IGNvbXBpbGF0aW9uIHdpdGggQU5TSSBrZXl3b3JkcyBvbmx5IGVuYWJsZWQgKi8KLSAgICAgICB2b2lkIF9DZGVjbCBmYXJmcmVlKCB2b2lkICpibG9jayApOwotICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7Ci0jICAgIGVsc2UKLSMgICAgICBpbmNsdWRlIDxhbGxvYy5oPgorIyAgaWZuZGVmIFpfU09MTworIyAgICBpZiBkZWZpbmVkKF9fVFVSQk9DX18pIHx8IGRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgICAgIGlmIChfX1NURENfXyA9PSAxKSAmJiAoZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoX19DT01QQUNUX18pKQorICAgICAgICAgLyogQWxsb3cgY29tcGlsYXRpb24gd2l0aCBBTlNJIGtleXdvcmRzIG9ubHkgZW5hYmxlZCAqLworICAgICAgICAgdm9pZCBfQ2RlY2wgZmFyZnJlZSggdm9pZCAqYmxvY2sgKTsKKyAgICAgICAgIHZvaWQgKl9DZGVjbCBmYXJtYWxsb2MoIHVuc2lnbmVkIGxvbmcgbmJ5dGVzICk7CisjICAgICAgZWxzZQorIyAgICAgICAgaW5jbHVkZSA8YWxsb2MuaD4KKyMgICAgICBlbmRpZgorIyAgICBlbHNlIC8qIE1TQyBvciBESkdQUCAqLworIyAgICAgIGluY2x1ZGUgPG1hbGxvYy5oPgogIyAgICBlbmRpZgotIyAgZWxzZSAvKiBNU0Mgb3IgREpHUFAgKi8KLSMgICAgaW5jbHVkZSA8bWFsbG9jLmg+CiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTEwNywxOCArMTEzLDIwIEBACiAKICNpZmRlZiBPUzIKICMgIGRlZmluZSBPU19DT0RFICAweDA2Ci0jICBpZmRlZiBNX0k4NgorIyAgaWYgZGVmaW5lZChNX0k4NikgJiYgIWRlZmluZWQoWl9TT0xPKQogIyAgICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgIGVuZGlmCiAjZW5kaWYKIAogI2lmIGRlZmluZWQoTUFDT1MpIHx8IGRlZmluZWQoVEFSR0VUX09TX01BQykKICMgIGRlZmluZSBPU19DT0RFICAweDA3Ci0jICBpZiBkZWZpbmVkKF9fTVdFUktTX18pICYmIF9fZGVzdF9vcyAhPSBfX2JlX29zICYmIF9fZGVzdF9vcyAhPSBfX3dpbjMyX29zCi0jICAgIGluY2x1ZGUgPHVuaXguaD4gLyogZm9yIGZkb3BlbiAqLwotIyAgZWxzZQotIyAgICBpZm5kZWYgZmRvcGVuCi0jICAgICAgZGVmaW5lIGZkb3BlbihmZCxtb2RlKSBOVUxMIC8qIE5vIGZkb3BlbigpICovCisjICBpZm5kZWYgWl9TT0xPCisjICAgIGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgX19kZXN0X29zICE9IF9fYmVfb3MgJiYgX19kZXN0X29zICE9IF9fd2luMzJfb3MKKyMgICAgICBpbmNsdWRlIDx1bml4Lmg+IC8qIGZvciBmZG9wZW4gKi8KKyMgICAgZWxzZQorIyAgICAgIGlmbmRlZiBmZG9wZW4KKyMgICAgICAgIGRlZmluZSBmZG9wZW4oZmQsbW9kZSkgTlVMTCAvKiBObyBmZG9wZW4oKSAqLworIyAgICAgIGVuZGlmCiAjICAgIGVuZGlmCiAjICBlbmRpZgogI2VuZGlmCkBAIC0xNTMsMTQgKzE2MSwxNSBAQAogIyAgZW5kaWYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmICFkZWZpbmVkKE1TRE9TKQogICAjcHJhZ21hIHdhcm4gLTgwMDQKICAgI3ByYWdtYSB3YXJuIC04MDA4CiAgICNwcmFnbWEgd2FybiAtODA2NgogI2VuZGlmCiAKIC8qIHByb3ZpZGUgcHJvdG90eXBlcyBmb3IgdGhlc2Ugd2hlbiBidWlsZGluZyB6bGliIHdpdGhvdXQgTEZTICovCi0jaWYgIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgfHwgX0xGUzY0X0xBUkdFRklMRS0wID09IDAKKyNpZiAhZGVmaW5lZChfV0lOMzIpICYmIFwKKyAgICAoIWRlZmluZWQoX0xBUkdFRklMRTY0X1NPVVJDRSkgfHwgX0xGUzY0X0xBUkdFRklMRS0wID09IDApCiAgICAgWkVYVEVSTiB1TG9uZyBaRVhQT1JUIGFkbGVyMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICAgICBaRVhURVJOIHVMb25nIFpFWFBPUlQgY3JjMzJfY29tYmluZTY0IE9GKCh1TG9uZywgdUxvbmcsIHpfb2ZmX3QpKTsKICNlbmRpZgpAQCAtMTc3LDQyICsxODYsNyBAQAogCiAgICAgICAgICAvKiBmdW5jdGlvbnMgKi8KIAotI2lmIGRlZmluZWQoU1REQzk5KSB8fCAoZGVmaW5lZChfX1RVUkJPQ19fKSAmJiBfX1RVUkJPQ19fID49IDB4NTUwKQotIyAgaWZuZGVmIEhBVkVfVlNOUFJJTlRGCi0jICAgIGRlZmluZSBIQVZFX1ZTTlBSSU5URgotIyAgZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19DWUdXSU5fXykKLSMgIGlmbmRlZiBIQVZFX1ZTTlBSSU5URgotIyAgICBkZWZpbmUgSEFWRV9WU05QUklOVEYKLSMgIGVuZGlmCi0jZW5kaWYKLSNpZm5kZWYgSEFWRV9WU05QUklOVEYKLSMgIGlmZGVmIE1TRE9TCi0gICAgIC8qIHZzbnByaW50ZiBtYXkgZXhpc3Qgb24gc29tZSBNUy1ET1MgY29tcGlsZXJzIChESkdQUD8pLAotICAgICAgICBidXQgZm9yIG5vdyB3ZSBqdXN0IGFzc3VtZSBpdCBkb2Vzbid0LiAqLwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgX19UVVJCT0NfXwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotIyAgaWZkZWYgV0lOMzIKLSAgICAgLyogSW4gV2luMzIsIHZzbnByaW50ZiBpcyBhdmFpbGFibGUgYXMgdGhlICJub24tQU5TSSIgX3ZzbnByaW50Zi4gKi8KLSMgICAgaWYgIWRlZmluZWQodnNucHJpbnRmKSAmJiAhZGVmaW5lZChOT192c25wcmludGYpCi0jICAgICAgaWYgIWRlZmluZWQoX01TQ19WRVIpIHx8ICggZGVmaW5lZChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxNTAwICkKLSMgICAgICAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSMgIGlmZGVmIF9fU0FTQwotIyAgICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jICBlbmRpZgotI2VuZGlmCi0jaWZkZWYgVk1TCi0jICBkZWZpbmUgTk9fdnNucHJpbnRmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQocHlyKQorI2lmIGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKFpfU09MTykKICMgIGRlZmluZSBOT19NRU1DUFkKICNlbmRpZgogI2lmIGRlZmluZWQoU01BTExfTUVESVVNKSAmJiAhZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19TQ19fKQpAQCAtMjYxLDE0ICsyMzUsMTkgQEAKICMgIGRlZmluZSBUcmFjZWN2KGMseCkKICNlbmRpZgogCi0KLXZvaWRwZiBaTElCX0lOVEVSTkFMIHpjYWxsb2MgT0YoKHZvaWRwZiBvcGFxdWUsIHVuc2lnbmVkIGl0ZW1zLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgc2l6ZSkpOwotdm9pZCBaTElCX0lOVEVSTkFMIHpjZnJlZSAgT0YoKHZvaWRwZiBvcGFxdWUsIHZvaWRwZiBwdHIpKTsKKyNpZm5kZWYgWl9TT0xPCisgICB2b2lkcGYgWkxJQl9JTlRFUk5BTCB6Y2FsbG9jIE9GKCh2b2lkcGYgb3BhcXVlLCB1bnNpZ25lZCBpdGVtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNpemUpKTsKKyAgIHZvaWQgWkxJQl9JTlRFUk5BTCB6Y2ZyZWUgIE9GKCh2b2lkcGYgb3BhcXVlLCB2b2lkcGYgcHRyKSk7CisjZW5kaWYKIAogI2RlZmluZSBaQUxMT0Moc3RybSwgaXRlbXMsIHNpemUpIFwKICAgICAgICAgICAgKCooKHN0cm0pLT56YWxsb2MpKSgoc3RybSktPm9wYXF1ZSwgKGl0ZW1zKSwgKHNpemUpKQogI2RlZmluZSBaRlJFRShzdHJtLCBhZGRyKSAgKCooKHN0cm0pLT56ZnJlZSkpKChzdHJtKS0+b3BhcXVlLCAodm9pZHBmKShhZGRyKSkKICNkZWZpbmUgVFJZX0ZSRUUocywgcCkge2lmIChwKSBaRlJFRShzLCBwKTt9CiAKKy8qIFJldmVyc2UgdGhlIGJ5dGVzIGluIGEgMzItYml0IHZhbHVlICovCisjZGVmaW5lIFpTV0FQMzIocSkgKCgoKHEpID4+IDI0KSAmIDB4ZmYpICsgKCgocSkgPj4gOCkgJiAweGZmMDApICsgXAorICAgICAgICAgICAgICAgICAgICAoKChxKSAmIDB4ZmYwMCkgPDwgOCkgKyAoKChxKSAmIDB4ZmYpIDw8IDI0KSkKKwogI2VuZGlmIC8qIFpVVElMX0ggKi8KZGlmZiAtLWdpdCBhL01vZHVsZXMvemxpYm1vZHVsZS5jIGIvTW9kdWxlcy96bGlibW9kdWxlLmMKaW5kZXggMWQxMDcyZC4uMGQyZTE4OCAxMDA2NDQKLS0tIGEvTW9kdWxlcy96bGlibW9kdWxlLmMKKysrIGIvTW9kdWxlcy96bGlibW9kdWxlLmMKQEAgLTMsMTEgKzMsMTMgQEAKIAogLyogV2luZG93cyB1c2VyczogIHJlYWQgUHl0aG9uJ3MgUENidWlsZFxyZWFkbWUudHh0ICovCiAKKyNkZWZpbmUgUFlfU1NJWkVfVF9DTEVBTgogCiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAjaW5jbHVkZSAiemxpYi5oIgogCisKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICNpbmNsdWRlICJweXRocmVhZC5oIgogICAgICNkZWZpbmUgRU5URVJfWkxJQihvYmopIFwKQEAgLTI3LDEwICsyOSw5IEBACiAjZWxzZQogIyAgZGVmaW5lIERFRl9NRU1fTEVWRUwgIE1BWF9NRU1fTEVWRUwKICNlbmRpZgotI2RlZmluZSBERUZfV0JJVFMgTUFYX1dCSVRTCiAKLS8qIFRoZSBvdXRwdXQgYnVmZmVyIHdpbGwgYmUgaW5jcmVhc2VkIGluIGNodW5rcyBvZiBERUZBVUxUQUxMT0MgYnl0ZXMuICovCi0jZGVmaW5lIERFRkFVTFRBTExPQyAoMTYqMTAyNCkKKy8qIEluaXRpYWwgYnVmZmVyIHNpemUuICovCisjZGVmaW5lIERFRl9CVUZfU0laRSAoMTYqMTAyNCkKIAogc3RhdGljIFB5VHlwZU9iamVjdCBDb21wdHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgRGVjb21wdHlwZTsKQEAgLTgwLDM1ICs4MSwxMyBAQAogICAgICAgICBQeUVycl9Gb3JtYXQoWmxpYkVycm9yLCAiRXJyb3IgJWQgJXM6ICUuMjAwcyIsIGVyciwgbXNnLCB6bXNnKTsKIH0KIAotUHlEb2NfU1RSVkFSKGNvbXByZXNzb2JqX19kb2NfXywKLSJjb21wcmVzc29iaihsZXZlbD0tMSwgbWV0aG9kPURFRkxBVEVELCB3Yml0cz0xNSwgbWVtbGV2ZWw9OCxcbiIKLSIgICAgICAgICAgICBzdHJhdGVneT1aX0RFRkFVTFRfU1RSQVRFR1lbLCB6ZGljdF0pXG4iCi0iIC0tIFJldHVybiBhIGNvbXByZXNzb3Igb2JqZWN0LlxuIgotIlxuIgotImxldmVsIGlzIHRoZSBjb21wcmVzc2lvbiBsZXZlbCAoYW4gaW50ZWdlciBpbiB0aGUgcmFuZ2UgMC05OyBkZWZhdWx0IGlzIDYpLlxuIgotIkhpZ2hlciBjb21wcmVzc2lvbiBsZXZlbHMgYXJlIHNsb3dlciwgYnV0IHByb2R1Y2Ugc21hbGxlciByZXN1bHRzLlxuIgotIlxuIgotIm1ldGhvZCBpcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBJZiBnaXZlbiwgdGhpcyBtdXN0IGJlIERFRkxBVEVELlxuIgotIlxuIgotIndiaXRzIGlzIHRoZSBiYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplIChyYW5nZTogOC4uMTUpLlxuIgotIlxuIgotIm1lbWxldmVsIGNvbnRyb2xzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHVzZWQgZm9yIGludGVybmFsIGNvbXByZXNzaW9uIHN0YXRlLlxuIgotIlZhbGlkIHZhbHVlcyByYW5nZSBmcm9tIDEgdG8gOS4gSGlnaGVyIHZhbHVlcyByZXN1bHQgaW4gaGlnaGVyIG1lbW9yeSB1c2FnZSxcbiIKLSJmYXN0ZXIgY29tcHJlc3Npb24sIGFuZCBzbWFsbGVyIG91dHB1dC5cbiIKLSJcbiIKLSJzdHJhdGVneSBpcyB1c2VkIHRvIHR1bmUgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4gUG9zc2libGUgdmFsdWVzIGFyZVxuIgotIlpfREVGQVVMVF9TVFJBVEVHWSwgWl9GSUxURVJFRCwgYW5kIFpfSFVGRk1BTl9PTkxZLlxuIgotIlxuIgotInpkaWN0IGlzIHRoZSBwcmVkZWZpbmVkIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkgLSBhIHNlcXVlbmNlIG9mIGJ5dGVzXG4iCi0iY29udGFpbmluZyBzdWJzZXF1ZW5jZXMgdGhhdCBhcmUgbGlrZWx5IHRvIG9jY3VyIGluIHRoZSBpbnB1dCBkYXRhLiIpOwotCi1QeURvY19TVFJWQVIoZGVjb21wcmVzc29ial9fZG9jX18sCi0iZGVjb21wcmVzc29iaihbd2JpdHNbLCB6ZGljdF1dKSAtLSBSZXR1cm4gYSBkZWNvbXByZXNzb3Igb2JqZWN0LlxuIgotIlxuIgotIk9wdGlvbmFsIGFyZyB3Yml0cyBpcyB0aGUgd2luZG93IGJ1ZmZlciBzaXplLlxuIgotIlxuIgotIk9wdGlvbmFsIGFyZyB6ZGljdCBpcyB0aGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5LiBUaGlzIG11c3QgYmVcbiIKLSJ0aGUgc2FtZSBkaWN0aW9uYXJ5IGFzIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IgdGhhdCBwcm9kdWNlZCB0aGUgaW5wdXQgZGF0YS4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK291dHB1dCBwcmVzZXQgZmlsZQorbW9kdWxlIHpsaWIKK2NsYXNzIHpsaWIuQ29tcHJlc3MgImNvbXBvYmplY3QgKiIgIiZDb21wdHlwZSIKK2NsYXNzIHpsaWIuRGVjb21wcmVzcyAiY29tcG9iamVjdCAqIiAiJkRlY29tcHR5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD1iZmQ0YzM0MDU3M2JhOTFkXSovCiAKIHN0YXRpYyBjb21wb2JqZWN0ICoKIG5ld2NvbXBvYmplY3QoUHlUeXBlT2JqZWN0ICp0eXBlKQpAQCAtMTMyLDQwICsxMTEsNjMgQEAKICAgICB9CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBzZWxmLT5sb2NrID0gUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpOworICAgIGlmIChzZWxmLT5sb2NrID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX01lbW9yeUVycm9yLCAiVW5hYmxlIHRvIGFsbG9jYXRlIGxvY2siKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIHNlbGY7CiB9CiAKLVB5RG9jX1NUUlZBUihjb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3Moc3RyaW5nWywgbGV2ZWxdKSAtLSBSZXR1cm5lZCBjb21wcmVzc2VkIHN0cmluZy5cbiIKLSJcbiIKLSJPcHRpb25hbCBhcmcgbGV2ZWwgaXMgdGhlIGNvbXByZXNzaW9uIGxldmVsLCBpbiAwLTkuIik7CitzdGF0aWMgdm9pZCoKK1B5WmxpYl9NYWxsb2Modm9pZHBmIGN0eCwgdUludCBpdGVtcywgdUludCBzaXplKQoreworICAgIGlmIChpdGVtcyA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVggLyBzaXplKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAvKiBQeU1lbV9NYWxsb2MoKSBjYW5ub3QgYmUgdXNlZDogdGhlIEdJTCBpcyBub3QgaGVsZCB3aGVuCisgICAgICAgaW5mbGF0ZSgpIGFuZCBkZWZsYXRlKCkgYXJlIGNhbGxlZCAqLworICAgIHJldHVybiBQeU1lbV9SYXdNYWxsb2MoaXRlbXMgKiBzaXplKTsKK30KKworc3RhdGljIHZvaWQKK1B5WmxpYl9GcmVlKHZvaWRwZiBjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBQeU1lbV9SYXdGcmVlKHB0cik7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuY29tcHJlc3MKKworICAgIGJ5dGVzOiBQeV9idWZmZXIKKyAgICAgICAgQmluYXJ5IGRhdGEgdG8gYmUgY29tcHJlc3NlZC4KKyAgICBsZXZlbDogaW50KGNfZGVmYXVsdD0iWl9ERUZBVUxUX0NPTVBSRVNTSU9OIikgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04KKyAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwsIGluIDAtOS4KKyAgICAvCisKK1JldHVybnMgYSBieXRlcyBvYmplY3QgY29udGFpbmluZyBjb21wcmVzc2VkIGRhdGEuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfY29tcHJlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9jb21wcmVzc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqYnl0ZXMsIGludCBsZXZlbCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD01ZDdkZDQ1ODg3ODhlZmQzIGlucHV0PWJlM2FiZTk5MzRiZGE0YjNdKi8KIHsKICAgICBQeU9iamVjdCAqUmV0dXJuVmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwogICAgIEJ5dGUgKmlucHV0LCAqb3V0cHV0ID0gTlVMTDsKICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoOwotICAgIGludCBsZXZlbD1aX0RFRkFVTFRfQ09NUFJFU1NJT04sIGVycjsKKyAgICBpbnQgZXJyOwogICAgIHpfc3RyZWFtIHpzdDsKIAotICAgIC8qIHJlcXVpcmUgUHl0aG9uIHN0cmluZyBvYmplY3QsIG9wdGlvbmFsICdsZXZlbCcgYXJnICovCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOmNvbXByZXNzIiwgJnBpbnB1dCwgJmxldmVsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBpZiAocGlucHV0LmxlbiA+IFVJTlRfTUFYKSB7CisgICAgaWYgKChzaXplX3QpYnl0ZXMtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgbGVuZ3RoID0gcGlucHV0LmxlbjsKKyAgICBpbnB1dCA9IGJ5dGVzLT5idWY7CisgICAgbGVuZ3RoID0gKHVuc2lnbmVkIGludClieXRlcy0+bGVuOwogCiAgICAgenN0LmF2YWlsX291dCA9IGxlbmd0aCArIGxlbmd0aC8xMDAwICsgMTIgKyAxOwogCi0gICAgb3V0cHV0ID0gKEJ5dGUqKW1hbGxvYyh6c3QuYXZhaWxfb3V0KTsKKyAgICBvdXRwdXQgPSAoQnl0ZSopUHlNZW1fTWFsbG9jKHpzdC5hdmFpbF9vdXQpOwogICAgIGlmIChvdXRwdXQgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTWVtb3J5RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IHRvIGNvbXByZXNzIGRhdGEiKTsKQEAgLTE3NSw4ICsxNzcsOSBAQAogICAgIC8qIFBhc3QgdGhlIHBvaW50IG9mIG5vIHJldHVybi4gIEZyb20gaGVyZSBvbiBvdXQsIHdlIG5lZWQgdG8gbWFrZSBzdXJlCiAgICAgICAgd2UgY2xlYW4gdXAgbWFsbG9jcyAmIElOQ1JFRnMuICovCiAKLSAgICB6c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICB6c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICB6c3Qub3BhcXVlID0gTlVMTDsKKyAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKW91dHB1dDsKICAgICB6c3QubmV4dF9pbiA9IChCeXRlICopaW5wdXQ7CiAgICAgenN0LmF2YWlsX2luID0gbGVuZ3RoOwpAQCAtMjE3LDU2ICsyMjAsMTAwIEBACiAgICAgICAgIHpsaWJfZXJyb3IoenN0LCBlcnIsICJ3aGlsZSBmaW5pc2hpbmcgY29tcHJlc3Npb24iKTsKIAogIGVycm9yOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7Ci0gICAgZnJlZShvdXRwdXQpOworICAgIFB5TWVtX0ZyZWUob3V0cHV0KTsKIAogICAgIHJldHVybiBSZXR1cm5WYWw7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXByZXNzX19kb2NfXywKLSJkZWNvbXByZXNzKHN0cmluZ1ssIHdiaXRzWywgYnVmc2l6ZV1dKSAtLSBSZXR1cm4gZGVjb21wcmVzc2VkIHN0cmluZy5cbiIKLSJcbiIKLSJPcHRpb25hbCBhcmcgd2JpdHMgaXMgdGhlIHdpbmRvdyBidWZmZXIgc2l6ZS4gIE9wdGlvbmFsIGFyZyBidWZzaXplIGlzXG4iCi0idGhlIGluaXRpYWwgb3V0cHV0IGJ1ZmZlciBzaXplLiIpOworLypbcHl0aG9uIGlucHV0XQorCitjbGFzcyB1aW50X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGludCcKKyAgICBjb252ZXJ0ZXIgPSAndWludF9jb252ZXJ0ZXInCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworW3B5dGhvbiBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbcHl0aG9uIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9MjIyNjM4NTVmN2EzZWJmZF0qLworCitzdGF0aWMgaW50Cit1aW50X2NvbnZlcnRlcihQeU9iamVjdCAqb2JqLCB2b2lkICpwdHIpCit7CisgICAgbG9uZyB2YWw7CisgICAgdW5zaWduZWQgbG9uZyB1dmFsOworCisgICAgdmFsID0gUHlMb25nX0FzTG9uZyhvYmopOworICAgIGlmICh2YWwgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICB1dmFsID0gUHlMb25nX0FzVW5zaWduZWRMb25nKG9iaik7CisgICAgICAgIGlmICh1dmFsID09ICh1bnNpZ25lZCBsb25nKS0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlmICh2YWwgPCAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgbXVzdCBiZSBwb3NpdGl2ZSIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgdXZhbCA9ICh1bnNpZ25lZCBsb25nKXZhbDsKKyAgICB9CisKKyAgICBpZiAodXZhbCA+IFVJTlRfTUFYKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIGZvciBDIHVuc2lnbmVkIGludCIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAqKHVuc2lnbmVkIGludCAqKXB0ciA9IFB5X1NBRkVfRE9XTkNBU1QodXZhbCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KTsKKyAgICByZXR1cm4gMTsKK30KKworLypbY2xpbmljIGlucHV0XQoremxpYi5kZWNvbXByZXNzCisKKyAgICBkYXRhOiBQeV9idWZmZXIKKyAgICAgICAgQ29tcHJlc3NlZCBkYXRhLgorICAgIHdiaXRzOiBpbnQoY19kZWZhdWx0PSJNQVhfV0JJVFMiKSA9IE1BWF9XQklUUworICAgICAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLgorICAgIGJ1ZnNpemU6IHVpbnQoY19kZWZhdWx0PSJERUZfQlVGX1NJWkUiKSA9IERFRl9CVUZfU0laRQorICAgICAgICBUaGUgaW5pdGlhbCBvdXRwdXQgYnVmZmVyIHNpemUuCisgICAgLworCitSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHVuY29tcHJlc3NlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2RlY29tcHJlc3MoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9kZWNvbXByZXNzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCBpbnQgd2JpdHMsIHVuc2lnbmVkIGludCBidWZzaXplKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTllNTQ2NGU3MmRmOWNiNWYgaW5wdXQ9MGY0YjlhYmI3MTAzZjUwZV0qLwogewogICAgIFB5T2JqZWN0ICpyZXN1bHRfc3RyID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwogICAgIEJ5dGUgKmlucHV0OwogICAgIHVuc2lnbmVkIGludCBsZW5ndGg7CiAgICAgaW50IGVycjsKLSAgICBpbnQgd3NpemU9REVGX1dCSVRTOwotICAgIFB5X3NzaXplX3Qgcl9zdHJsZW49REVGQVVMVEFMTE9DOworICAgIHVuc2lnbmVkIGludCBuZXdfYnVmc2l6ZTsKICAgICB6X3N0cmVhbSB6c3Q7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfGluOmRlY29tcHJlc3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmcGlucHV0LCAmd3NpemUsICZyX3N0cmxlbikpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KWRhdGEtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpbnB1dCA9IHBpbnB1dC5idWY7Ci0gICAgbGVuZ3RoID0gcGlucHV0LmxlbjsKKyAgICBpbnB1dCA9IGRhdGEtPmJ1ZjsKKyAgICBsZW5ndGggPSAodW5zaWduZWQgaW50KWRhdGEtPmxlbjsKIAotICAgIGlmIChyX3N0cmxlbiA8PSAwKQotICAgICAgICByX3N0cmxlbiA9IDE7CisgICAgaWYgKGJ1ZnNpemUgPT0gMCkKKyAgICAgICAgYnVmc2l6ZSA9IDE7CiAKICAgICB6c3QuYXZhaWxfaW4gPSBsZW5ndGg7Ci0gICAgenN0LmF2YWlsX291dCA9IHJfc3RybGVuOworICAgIHpzdC5hdmFpbF9vdXQgPSBidWZzaXplOwogCi0gICAgaWYgKCEocmVzdWx0X3N0ciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgcl9zdHJsZW4pKSkKKyAgICBpZiAoIShyZXN1bHRfc3RyID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBidWZzaXplKSkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICB6c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICB6c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICB6c3Qub3BhcXVlID0gTlVMTDsKKyAgICB6c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICB6c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICB6c3QubmV4dF9vdXQgPSAoQnl0ZSAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdF9zdHIpOwogICAgIHpzdC5uZXh0X2luID0gKEJ5dGUgKilpbnB1dDsKLSAgICBlcnIgPSBpbmZsYXRlSW5pdDIoJnpzdCwgd3NpemUpOworICAgIGVyciA9IGluZmxhdGVJbml0MigmenN0LCB3Yml0cyk7CiAKICAgICBzd2l0Y2goZXJyKSB7CiAgICAgY2FzZShaX09LKToKQEAgLTMwMywxNCArMzUwLDE4IEBACiAgICAgICAgICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgY2FzZShaX09LKToKICAgICAgICAgICAgIC8qIG5lZWQgbW9yZSBtZW1vcnkgKi8KLSAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJlc3VsdF9zdHIsIHJfc3RybGVuIDw8IDEpIDwgMCkgeworICAgICAgICAgICAgaWYgKGJ1ZnNpemUgPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgICAgIG5ld19idWZzaXplID0gYnVmc2l6ZSA8PCAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG5ld19idWZzaXplID0gVUlOVF9NQVg7CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXN1bHRfc3RyLCBuZXdfYnVmc2l6ZSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgenN0Lm5leHRfb3V0ID0KLSAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKHJlc3VsdF9zdHIpICsgcl9zdHJsZW47Ci0gICAgICAgICAgICB6c3QuYXZhaWxfb3V0ID0gcl9zdHJsZW47Ci0gICAgICAgICAgICByX3N0cmxlbiA9IHJfc3RybGVuIDw8IDE7CisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhyZXN1bHRfc3RyKSArIGJ1ZnNpemU7CisgICAgICAgICAgICB6c3QuYXZhaWxfb3V0ID0gYnVmc2l6ZTsKKyAgICAgICAgICAgIGJ1ZnNpemUgPSBuZXdfYnVmc2l6ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgaW5mbGF0ZUVuZCgmenN0KTsKQEAgLTMyOCw0NiArMzc5LDY3IEBACiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmcmVzdWx0X3N0ciwgenN0LnRvdGFsX291dCkgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKICAgICByZXR1cm4gcmVzdWx0X3N0cjsKIAogIGVycm9yOgotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnBpbnB1dCk7CiAgICAgUHlfWERFQ1JFRihyZXN1bHRfc3RyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jb21wcmVzc29iaihQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0gICAgY29tcG9iamVjdCAqc2VsZjsKLSAgICBpbnQgbGV2ZWw9Wl9ERUZBVUxUX0NPTVBSRVNTSU9OLCBtZXRob2Q9REVGTEFURUQ7Ci0gICAgaW50IHdiaXRzPU1BWF9XQklUUywgbWVtTGV2ZWw9REVGX01FTV9MRVZFTCwgc3RyYXRlZ3k9MCwgZXJyOwotICAgIFB5X2J1ZmZlciB6ZGljdDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7ImxldmVsIiwgIm1ldGhvZCIsICJ3Yml0cyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1MZXZlbCIsICJzdHJhdGVneSIsICJ6ZGljdCIsIE5VTEx9OworLypbY2xpbmljIGlucHV0XQoremxpYi5jb21wcmVzc29iagogCi0gICAgemRpY3QuYnVmID0gTlVMTDsgLyogU2VudGluZWwsIHNvIHdlIGNhbiB0ZWxsIHdoZXRoZXIgemRpY3Qgd2FzIHN1cHBsaWVkLiAqLwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywgInxpaWlpaXkqOmNvbXByZXNzb2JqIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrd2xpc3QsICZsZXZlbCwgJm1ldGhvZCwgJndiaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtZW1MZXZlbCwgJnN0cmF0ZWd5LCAmemRpY3QpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBsZXZlbDogaW50KGNfZGVmYXVsdD0iWl9ERUZBVUxUX0NPTVBSRVNTSU9OIikgPSBaX0RFRkFVTFRfQ09NUFJFU1NJT04KKyAgICAgICAgVGhlIGNvbXByZXNzaW9uIGxldmVsIChhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAwLTk7IGRlZmF1bHQgaXMgNikuCisgICAgICAgIEhpZ2hlciBjb21wcmVzc2lvbiBsZXZlbHMgYXJlIHNsb3dlciwgYnV0IHByb2R1Y2Ugc21hbGxlciByZXN1bHRzLgorICAgIG1ldGhvZDogaW50KGNfZGVmYXVsdD0iREVGTEFURUQiKSA9IERFRkxBVEVECisgICAgICAgIFRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uICBJZiBnaXZlbiwgdGhpcyBtdXN0IGJlIERFRkxBVEVELgorICAgIHdiaXRzOiBpbnQoY19kZWZhdWx0PSJNQVhfV0JJVFMiKSA9IE1BWF9XQklUUworICAgICAgICBUaGUgYmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAocmFuZ2U6IDguLjE1KS4KKyAgICBtZW1MZXZlbDogaW50KGNfZGVmYXVsdD0iREVGX01FTV9MRVZFTCIpID0gREVGX01FTV9MRVZFTAorICAgICAgICBDb250cm9scyB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGZvciBpbnRlcm5hbCBjb21wcmVzc2lvbiBzdGF0ZS4KKyAgICAgICAgVmFsaWQgdmFsdWVzIHJhbmdlIGZyb20gMSB0byA5LiAgSGlnaGVyIHZhbHVlcyByZXN1bHQgaW4gaGlnaGVyIG1lbW9yeQorICAgICAgICB1c2FnZSwgZmFzdGVyIGNvbXByZXNzaW9uLCBhbmQgc21hbGxlciBvdXRwdXQuCisgICAgc3RyYXRlZ3k6IGludChjX2RlZmF1bHQ9IlpfREVGQVVMVF9TVFJBVEVHWSIpID0gWl9ERUZBVUxUX1NUUkFURUdZCisgICAgICAgIFVzZWQgdG8gdHVuZSB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiAgUG9zc2libGUgdmFsdWVzIGFyZQorICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1ksIFpfRklMVEVSRUQsIGFuZCBaX0hVRkZNQU5fT05MWS4KKyAgICB6ZGljdDogUHlfYnVmZmVyID0gTm9uZQorICAgICAgICBUaGUgcHJlZGVmaW5lZCBjb21wcmVzc2lvbiBkaWN0aW9uYXJ5IC0gYSBzZXF1ZW5jZSBvZiBieXRlcworICAgICAgICBjb250YWluaW5nIHN1YnNlcXVlbmNlcyB0aGF0IGFyZSBsaWtlbHkgdG8gb2NjdXIgaW4gdGhlIGlucHV0IGRhdGEuCisKK1JldHVybiBhIGNvbXByZXNzb3Igb2JqZWN0LgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitzdGF0aWMgUHlPYmplY3QgKgoremxpYl9jb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCBsZXZlbCwgaW50IG1ldGhvZCwgaW50IHdiaXRzLCBpbnQgbWVtTGV2ZWwsIGludCBzdHJhdGVneSwgUHlfYnVmZmVyICp6ZGljdCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04OWU1YTZjMTQ0OWNhYTllIGlucHV0PWIwMzQ4NDdmODgyMWY2YWZdKi8KK3sKKyAgICBjb21wb2JqZWN0ICpzZWxmID0gTlVMTDsKKyAgICBpbnQgZXJyOworCisgICAgaWYgKHpkaWN0LT5idWYgIT0gTlVMTCAmJiAoc2l6ZV90KXpkaWN0LT5sZW4gPiBVSU5UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJ6ZGljdCBsZW5ndGggZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KIAogICAgIHNlbGYgPSBuZXdjb21wb2JqZWN0KCZDb21wdHlwZSk7CiAgICAgaWYgKHNlbGY9PU5VTEwpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgc2VsZi0+enN0LnphbGxvYyA9IChhbGxvY19mdW5jKU5VTEw7Ci0gICAgc2VsZi0+enN0LnpmcmVlID0gKGZyZWVfZnVuYylaX05VTEw7CisgICAgc2VsZi0+enN0Lm9wYXF1ZSA9IE5VTEw7CisgICAgc2VsZi0+enN0LnphbGxvYyA9IFB5WmxpYl9NYWxsb2M7CisgICAgc2VsZi0+enN0LnpmcmVlID0gUHlabGliX0ZyZWU7CiAgICAgc2VsZi0+enN0Lm5leHRfaW4gPSBOVUxMOwogICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IDA7CiAgICAgZXJyID0gZGVmbGF0ZUluaXQyKCZzZWxmLT56c3QsIGxldmVsLCBtZXRob2QsIHdiaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3kpOwogICAgIHN3aXRjaChlcnIpIHsKICAgICBjYXNlIChaX09LKToKICAgICAgICAgc2VsZi0+aXNfaW5pdGlhbGlzZWQgPSAxOwotICAgICAgICBpZiAoemRpY3QuYnVmID09IE5VTEwpIHsKKyAgICAgICAgaWYgKHpkaWN0LT5idWYgPT0gTlVMTCkgewogICAgICAgICAgICAgZ290byBzdWNjZXNzOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwgemRpY3QuYnVmLCB6ZGljdC5sZW4pOworICAgICAgICAgICAgZXJyID0gZGVmbGF0ZVNldERpY3Rpb25hcnkoJnNlbGYtPnpzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkaWN0LT5idWYsICh1bnNpZ25lZCBpbnQpemRpY3QtPmxlbik7CiAgICAgICAgICAgICBzd2l0Y2ggKGVycikgewogICAgICAgICAgICAgY2FzZSAoWl9PSyk6CiAgICAgICAgICAgICAgICAgZ290byBzdWNjZXNzOwpAQCAtMzk0LDIyICs0NjYsMjggQEAKICBlcnJvcjoKICAgICBQeV9DTEVBUihzZWxmKTsKICBzdWNjZXNzOgotICAgIGlmICh6ZGljdC5idWYgIT0gTlVMTCkKLSAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmemRpY3QpOwogICAgIHJldHVybiAoUHlPYmplY3QqKXNlbGY7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfZGVjb21wcmVzc29iaihQeU9iamVjdCAqc2VsZnB0ciwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCi17Ci0gICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ3Yml0cyIsICJ6ZGljdCIsIE5VTEx9OwotICAgIGludCB3Yml0cz1ERUZfV0JJVFMsIGVycjsKLSAgICBjb21wb2JqZWN0ICpzZWxmOwotICAgIFB5T2JqZWN0ICp6ZGljdD1OVUxMOworLypbY2xpbmljIGlucHV0XQoremxpYi5kZWNvbXByZXNzb2JqCiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8aU86ZGVjb21wcmVzc29iaiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmd2JpdHMsICZ6ZGljdCkpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIHdiaXRzOiBpbnQoY19kZWZhdWx0PSJNQVhfV0JJVFMiKSA9IE1BWF9XQklUUworICAgICAgICBUaGUgd2luZG93IGJ1ZmZlciBzaXplLgorICAgIHpkaWN0OiBvYmplY3QoY19kZWZhdWx0PSJOVUxMIikgPSBiJycKKyAgICAgICAgVGhlIHByZWRlZmluZWQgY29tcHJlc3Npb24gZGljdGlvbmFyeS4gIFRoaXMgbXVzdCBiZSB0aGUgc2FtZQorICAgICAgICBkaWN0aW9uYXJ5IGFzIHVzZWQgYnkgdGhlIGNvbXByZXNzb3IgdGhhdCBwcm9kdWNlZCB0aGUgaW5wdXQgZGF0YS4KKworUmV0dXJuIGEgZGVjb21wcmVzc29yIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworc3RhdGljIFB5T2JqZWN0ICoKK3psaWJfZGVjb21wcmVzc29ial9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIGludCB3Yml0cywgUHlPYmplY3QgKnpkaWN0KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PThjY2Q1ODNmYmQ2MzE3OTggaW5wdXQ9NjdmMDUxNDVhNjkyMDEyN10qLworeworICAgIGludCBlcnI7CisgICAgY29tcG9iamVjdCAqc2VsZjsKKwogICAgIGlmICh6ZGljdCAhPSBOVUxMICYmICFQeU9iamVjdF9DaGVja0J1ZmZlcih6ZGljdCkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJ6ZGljdCBhcmd1bWVudCBtdXN0IHN1cHBvcnQgdGhlIGJ1ZmZlciBwcm90b2NvbCIpOwpAQCAtNDE5LDggKzQ5Nyw5IEBACiAgICAgc2VsZiA9IG5ld2NvbXBvYmplY3QoJkRlY29tcHR5cGUpOwogICAgIGlmIChzZWxmID09IE5VTEwpCiAgICAgICAgIHJldHVybihOVUxMKTsKLSAgICBzZWxmLT56c3QuemFsbG9jID0gKGFsbG9jX2Z1bmMpTlVMTDsKLSAgICBzZWxmLT56c3QuemZyZWUgPSAoZnJlZV9mdW5jKVpfTlVMTDsKKyAgICBzZWxmLT56c3Qub3BhcXVlID0gTlVMTDsKKyAgICBzZWxmLT56c3QuemFsbG9jID0gUHlabGliX01hbGxvYzsKKyAgICBzZWxmLT56c3QuemZyZWUgPSBQeVpsaWJfRnJlZTsKICAgICBzZWxmLT56c3QubmV4dF9pbiA9IE5VTEw7CiAgICAgc2VsZi0+enN0LmF2YWlsX2luID0gMDsKICAgICBpZiAoemRpY3QgIT0gTlVMTCkgewpAQCAtNDc2LDM3ICs1NTUsNDEgQEAKICAgICBEZWFsbG9jKHNlbGYpOwogfQogCi1QeURvY19TVFJWQVIoY29tcF9jb21wcmVzc19fZG9jX18sCi0iY29tcHJlc3MoZGF0YSkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgZGF0YSBjb21wcmVzc2VkLlxuIgotIlxuIgotIkFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc29tZSBvZiB0aGUgaW5wdXQgZGF0YSBtYXkgc3RpbGxcbiIKLSJiZSBzdG9yZWQgaW4gaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy5cbiIKLSJDYWxsIHRoZSBmbHVzaCgpIG1ldGhvZCB0byBjbGVhciB0aGVzZSBidWZmZXJzLiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5Db21wcmVzcy5jb21wcmVzcwogCisgICAgZGF0YTogUHlfYnVmZmVyCisgICAgICAgIEJpbmFyeSBkYXRhIHRvIGJlIGNvbXByZXNzZWQuCisgICAgLworCitSZXR1cm5zIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgY29tcHJlc3NlZCBkYXRhLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsCitiZSBzdG9yZWQgaW4gaW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KK0NhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfb2JqY29tcHJlc3MoY29tcG9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX0NvbXByZXNzX2NvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTVkNWNkNzkxY2JjNmE3ZjQgaW5wdXQ9MGQ5NTkwOGQ2ZTY0ZmFiOF0qLwogewogICAgIGludCBlcnI7CiAgICAgdW5zaWduZWQgaW50IGlucGxlbjsKLSAgICBQeV9zc2l6ZV90IGxlbmd0aCA9IERFRkFVTFRBTExPQzsKLSAgICBQeU9iamVjdCAqUmV0VmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBERUZfQlVGX1NJWkUsIG5ld19sZW5ndGg7CisgICAgUHlPYmplY3QgKlJldFZhbDsKICAgICBCeXRlICppbnB1dDsKICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3RvdGFsX291dDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSo6Y29tcHJlc3MiLCAmcGlucHV0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHBpbnB1dC5sZW4gPiBVSU5UX01BWCkgeworICAgIGlmICgoc2l6ZV90KWRhdGEtPmxlbiA+IFVJTlRfTUFYKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIlNpemUgZG9lcyBub3QgZml0IGluIGFuIHVuc2lnbmVkIGludCIpOwotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGlucGxlbiA9IHBpbnB1dC5sZW47CisgICAgaW5wdXQgPSBkYXRhLT5idWY7CisgICAgaW5wbGVuID0gKHVuc2lnbmVkIGludClkYXRhLT5sZW47CiAKICAgICBpZiAoIShSZXRWYWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIEVOVEVSX1pMSUIoc2VsZik7CiAKQEAgLTUyMywxNSArNjA2LDE4IEBACiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoZXJyID09IFpfT0sgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOwotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgaWYgKGxlbmd0aCA8PSAoVUlOVF9NQVggPj4gMSkpCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBVSU5UX01BWDsKKyAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBuZXdfbGVuZ3RoKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CisgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKSArIGxlbmd0aDsKICAgICAgICAgc2VsZi0+enN0LmF2YWlsX291dCA9IGxlbmd0aDsKLSAgICAgICAgbGVuZ3RoID0gbGVuZ3RoIDw8IDE7CisgICAgICAgIGxlbmd0aCA9IG5ld19sZW5ndGg7CiAKICAgICAgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUwogICAgICAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgWl9OT19GTFVTSCk7CkBAIC01NDQsMTkgKzYzMCwxNSBAQAogCiAgICAgaWYgKGVyciAhPSBaX09LICYmIGVyciAhPSBaX0JVRl9FUlJPUikgewogICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgY29tcHJlc3NpbmcgZGF0YSIpOwotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKKyAgICAgICAgZ290byBkb25lOwogICAgIH0KICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKLSBlcnJvcjoKKyBkb25lOgogICAgIExFQVZFX1pMSUIoc2VsZik7Ci0gZXJyb3Jfb3V0ZXI6Ci0gICAgUHlCdWZmZXJfUmVsZWFzZSgmcGlucHV0KTsKICAgICByZXR1cm4gUmV0VmFsOwogfQogCkBAIC01NzIsNyArNjU0LDcgQEAKICAgICAgICAgICAgIFB5X3NzaXplX3Qgb2xkX3NpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVudXNlZF9kYXRhKTsKICAgICAgICAgICAgIFB5X3NzaXplX3QgbmV3X3NpemU7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmV3X2RhdGE7Ci0gICAgICAgICAgICBpZiAoc2VsZi0+enN0LmF2YWlsX2luID4gUFlfU1NJWkVfVF9NQVggLSBvbGRfc2l6ZSkgeworICAgICAgICAgICAgaWYgKChzaXplX3Qpc2VsZi0+enN0LmF2YWlsX2luID4gKHNpemVfdClVSU5UX01BWCAtIChzaXplX3Qpb2xkX3NpemUpIHsKICAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KQEAgLTYwMyw1NSArNjg1LDUwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXBfZGVjb21wcmVzc19fZG9jX18sCi0iZGVjb21wcmVzcyhkYXRhLCBtYXhfbGVuZ3RoKSAtLSBSZXR1cm4gYSBzdHJpbmcgY29udGFpbmluZyB0aGUgZGVjb21wcmVzc2VkXG4iCi0idmVyc2lvbiBvZiB0aGUgZGF0YS5cbiIKLSJcbiIKLSJBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpblxuIgotImludGVybmFsIGJ1ZmZlcnMgZm9yIGxhdGVyIHByb2Nlc3NpbmcuXG4iCi0iQ2FsbCB0aGUgZmx1c2goKSBtZXRob2QgdG8gY2xlYXIgdGhlc2UgYnVmZmVycy5cbiIKLSJJZiB0aGUgbWF4X2xlbmd0aCBwYXJhbWV0ZXIgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlXG4iCi0ibm8gbG9uZ2VyIHRoYW4gbWF4X2xlbmd0aC4gIFVuY29uc3VtZWQgaW5wdXQgZGF0YSB3aWxsIGJlIHN0b3JlZCBpblxuIgotInRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5EZWNvbXByZXNzLmRlY29tcHJlc3MKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgICAgICBUaGUgYmluYXJ5IGRhdGEgdG8gZGVjb21wcmVzcy4KKyAgICBtYXhfbGVuZ3RoOiB1aW50ID0gMAorICAgICAgICBUaGUgbWF4aW11bSBhbGxvd2FibGUgbGVuZ3RoIG9mIHRoZSBkZWNvbXByZXNzZWQgZGF0YS4KKyAgICAgICAgVW5jb25zdW1lZCBpbnB1dCBkYXRhIHdpbGwgYmUgc3RvcmVkIGluCisgICAgICAgIHRoZSB1bmNvbnN1bWVkX3RhaWwgYXR0cmlidXRlLgorICAgIC8KKworUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRlY29tcHJlc3NlZCB2ZXJzaW9uIG9mIHRoZSBkYXRhLgorCitBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvbWUgb2YgdGhlIGlucHV0IGRhdGEgbWF5IHN0aWxsIGJlIHN0b3JlZCBpbgoraW50ZXJuYWwgYnVmZmVycyBmb3IgbGF0ZXIgcHJvY2Vzc2luZy4KK0NhbGwgdGhlIGZsdXNoKCkgbWV0aG9kIHRvIGNsZWFyIHRoZXNlIGJ1ZmZlcnMuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfb2JqZGVjb21wcmVzcyhjb21wb2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfRGVjb21wcmVzc19kZWNvbXByZXNzX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgbWF4X2xlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD03NTVjY2NjOTA4N2JmZTU1IGlucHV0PTAyY2ZjMDQ3Mzc3Y2VjODZdKi8KIHsKLSAgICBpbnQgZXJyLCBtYXhfbGVuZ3RoID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgaW5wbGVuOwotICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCwgbGVuZ3RoID0gREVGQVVMVEFMTE9DOworICAgIGludCBlcnI7CisgICAgdW5zaWduZWQgaW50IG9sZF9sZW5ndGgsIGxlbmd0aCA9IERFRl9CVUZfU0laRTsKICAgICBQeU9iamVjdCAqUmV0VmFsID0gTlVMTDsKLSAgICBQeV9idWZmZXIgcGlucHV0OwotICAgIEJ5dGUgKmlucHV0OwogICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdG90YWxfb3V0OwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ5KnxpOmRlY29tcHJlc3MiLCAmcGlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAmbWF4X2xlbmd0aCkpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChwaW5wdXQubGVuID4gVUlOVF9NQVgpIHsKKyAgICBpZiAoKHNpemVfdClkYXRhLT5sZW4gPiBVSU5UX01BWCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJTaXplIGRvZXMgbm90IGZpdCBpbiBhbiB1bnNpZ25lZCBpbnQiKTsKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKLSAgICB9Ci0gICAgaW5wdXQgPSBwaW5wdXQuYnVmOwotICAgIGlucGxlbiA9IHBpbnB1dC5sZW47Ci0gICAgaWYgKG1heF9sZW5ndGggPCAwKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIm1heF9sZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwotICAgICAgICBnb3RvIGVycm9yX291dGVyOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKiBsaW1pdCBhbW91bnQgb2YgZGF0YSBhbGxvY2F0ZWQgdG8gbWF4X2xlbmd0aCAqLwogICAgIGlmIChtYXhfbGVuZ3RoICYmIGxlbmd0aCA+IG1heF9sZW5ndGgpCiAgICAgICAgIGxlbmd0aCA9IG1heF9sZW5ndGg7CiAgICAgaWYgKCEoUmV0VmFsID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBsZW5ndGgpKSkKLSAgICAgICAgZ290byBlcnJvcl9vdXRlcjsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBFTlRFUl9aTElCKHNlbGYpOwogCiAgICAgc3RhcnRfdG90YWxfb3V0ID0gc2VsZi0+enN0LnRvdGFsX291dDsKLSAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSBpbnBsZW47Ci0gICAgc2VsZi0+enN0Lm5leHRfaW4gPSBpbnB1dDsKKyAgICBzZWxmLT56c3QuYXZhaWxfaW4gPSAodW5zaWduZWQgaW50KWRhdGEtPmxlbjsKKyAgICBzZWxmLT56c3QubmV4dF9pbiA9IGRhdGEtPmJ1ZjsKICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwogICAgIHNlbGYtPnpzdC5uZXh0X291dCA9ICh1bnNpZ25lZCBjaGFyICopUHlCeXRlc19BU19TVFJJTkcoUmV0VmFsKTsKIApAQCAtNjY2LDEyICs3NDMsMjEgQEAKICAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9Ci0gICAgICAgIGVyciA9IGluZmxhdGVTZXREaWN0aW9uYXJ5KCYoc2VsZi0+enN0KSwgemRpY3RfYnVmLmJ1ZiwgemRpY3RfYnVmLmxlbik7CisKKyAgICAgICAgaWYgKChzaXplX3QpemRpY3RfYnVmLmxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgInpkaWN0IGxlbmd0aCBkb2VzIG5vdCBmaXQgaW4gYW4gdW5zaWduZWQgaW50Iik7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ6ZGljdF9idWYpOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKworICAgICAgICBlcnIgPSBpbmZsYXRlU2V0RGljdGlvbmFyeSgmKHNlbGYtPnpzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkaWN0X2J1Zi5idWYsICh1bnNpZ25lZCBpbnQpemRpY3RfYnVmLmxlbik7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnpkaWN0X2J1Zik7CiAgICAgICAgIGlmIChlcnIgIT0gWl9PSykgewogICAgICAgICAgICAgemxpYl9lcnJvcihzZWxmLT56c3QsIGVyciwgIndoaWxlIGRlY29tcHJlc3NpbmcgZGF0YSIpOwotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgLyogUmVwZWF0IHRoZSBjYWxsIHRvIGluZmxhdGUuICovCkBAIC02OTcsOCArNzgzLDcgQEAKICAgICAgICAgICAgIGxlbmd0aCA9IG1heF9sZW5ndGg7CiAKICAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGgpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgICAgICBSZXRWYWwgPSBOVUxMOworICAgICAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0KQEAgLTczMiwzOSArODE3LDM5IEBACiAgICAgfQogCiAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBzZWxmLT56c3QudG90YWxfb3V0IC0gc3RhcnRfdG90YWxfb3V0KSA8IDApIHsKLSAgICAgICAgUHlfREVDUkVGKFJldFZhbCk7Ci0gICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIFB5X0NMRUFSKFJldFZhbCk7CiAgICAgfQogCiAgZXJyb3I6CiAgICAgTEVBVkVfWkxJQihzZWxmKTsKLSBlcnJvcl9vdXRlcjoKLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwaW5wdXQpOwogICAgIHJldHVybiBSZXRWYWw7CiB9CiAKLVB5RG9jX1NUUlZBUihjb21wX2ZsdXNoX19kb2NfXywKLSJmbHVzaCggW21vZGVdICkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBjb21wcmVzc2VkIGRhdGEuXG4iCi0iXG4iCi0ibW9kZSBjYW4gYmUgb25lIG9mIHRoZSBjb25zdGFudHMgWl9TWU5DX0ZMVVNILCBaX0ZVTExfRkxVU0gsIFpfRklOSVNIOyB0aGVcbiIKLSJkZWZhdWx0IHZhbHVlIHVzZWQgd2hlbiBtb2RlIGlzIG5vdCBzcGVjaWZpZWQgaXMgWl9GSU5JU0guXG4iCi0iSWYgbW9kZSA9PSBaX0ZJTklTSCwgdGhlIGNvbXByZXNzb3Igb2JqZWN0IGNhbiBubyBsb25nZXIgYmUgdXNlZCBhZnRlclxuIgotImNhbGxpbmcgdGhlIGZsdXNoKCkgbWV0aG9kLiAgT3RoZXJ3aXNlLCBtb3JlIGRhdGEgY2FuIHN0aWxsIGJlIGNvbXByZXNzZWQuIik7CisvKltjbGluaWMgaW5wdXRdCit6bGliLkNvbXByZXNzLmZsdXNoCisKKyAgICBtb2RlOiBpbnQoY19kZWZhdWx0PSJaX0ZJTklTSCIpID0gemxpYi5aX0ZJTklTSAorICAgICAgICBPbmUgb2YgdGhlIGNvbnN0YW50cyBaX1NZTkNfRkxVU0gsIFpfRlVMTF9GTFVTSCwgWl9GSU5JU0guCisgICAgICAgIElmIG1vZGUgPT0gWl9GSU5JU0gsIHRoZSBjb21wcmVzc29yIG9iamVjdCBjYW4gbm8gbG9uZ2VyIGJlCisgICAgICAgIHVzZWQgYWZ0ZXIgY2FsbGluZyB0aGUgZmx1c2goKSBtZXRob2QuICBPdGhlcndpc2UsIG1vcmUgZGF0YQorICAgICAgICBjYW4gc3RpbGwgYmUgY29tcHJlc3NlZC4KKyAgICAvCisKK1JldHVybiBhIGJ5dGVzIG9iamVjdCBjb250YWluaW5nIGFueSByZW1haW5pbmcgY29tcHJlc3NlZCBkYXRhLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCiBzdGF0aWMgUHlPYmplY3QgKgotUHlabGliX2ZsdXNoKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9Db21wcmVzc19mbHVzaF9pbXBsKGNvbXBvYmplY3QgKnNlbGYsIGludCBtb2RlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWEyMDNmNGNlZmM5ZGU3MjcgaW5wdXQ9NzNlZDA2Njc5NGJkMTViY10qLwogewotICAgIGludCBlcnIsIGxlbmd0aCA9IERFRkFVTFRBTExPQzsKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGludCBsZW5ndGggPSBERUZfQlVGX1NJWkUsIG5ld19sZW5ndGg7CiAgICAgUHlPYmplY3QgKlJldFZhbDsKLSAgICBpbnQgZmx1c2htb2RlID0gWl9GSU5JU0g7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmZsdXNoIiwgJmZsdXNobW9kZSkpCi0gICAgICAgIHJldHVybiBOVUxMOwotCiAgICAgLyogRmx1c2hpbmcgd2l0aCBaX05PX0ZMVVNIIGlzIGEgbm8tb3AsIHNvIHRoZXJlJ3Mgbm8gcG9pbnQgaW4KICAgICAgICBkb2luZyBhbnkgd29yayBhdCBhbGw7IGp1c3QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4gKi8KLSAgICBpZiAoZmx1c2htb2RlID09IFpfTk9fRkxVU0gpIHsKKyAgICBpZiAobW9kZSA9PSBaX05PX0ZMVVNIKSB7CiAgICAgICAgIHJldHVybiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDApOwogICAgIH0KIApAQCAtNzc5LDMxICs4NjQsMzQgQEAKICAgICBzZWxmLT56c3QubmV4dF9vdXQgPSAodW5zaWduZWQgY2hhciAqKVB5Qnl0ZXNfQVNfU1RSSU5HKFJldFZhbCk7CiAKICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIGZsdXNobW9kZSk7CisgICAgZXJyID0gZGVmbGF0ZSgmKHNlbGYtPnpzdCksIG1vZGUpOwogICAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgICAvKiB3aGlsZSBaX09LIGFuZCB0aGUgb3V0cHV0IGJ1ZmZlciBpcyBmdWxsLCB0aGVyZSBtaWdodCBiZSBtb3JlIG91dHB1dCwKICAgICAgICBzbyBleHRlbmQgdGhlIG91dHB1dCBidWZmZXIgYW5kIHRyeSBhZ2FpbiAqLwogICAgIHdoaWxlIChlcnIgPT0gWl9PSyAmJiBzZWxmLT56c3QuYXZhaWxfb3V0ID09IDApIHsKLSAgICAgICAgaWYgKF9QeUJ5dGVzX1Jlc2l6ZSgmUmV0VmFsLCBsZW5ndGggPDwgMSkgPCAwKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgICAgIFJldFZhbCA9IE5VTEw7CisgICAgICAgIGlmIChsZW5ndGggPD0gKFVJTlRfTUFYID4+IDEpKQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IGxlbmd0aCA8PCAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZXdfbGVuZ3RoID0gVUlOVF9NQVg7CisgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJlJldFZhbCwgbmV3X2xlbmd0aCkgPCAwKSB7CisgICAgICAgICAgICBQeV9DTEVBUihSZXRWYWwpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBzZWxmLT56c3QubmV4dF9vdXQgPQogICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKilQeUJ5dGVzX0FTX1NUUklORyhSZXRWYWwpICsgbGVuZ3RoOwogICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgICAgIGVyciA9IGRlZmxhdGUoJihzZWxmLT56c3QpLCBmbHVzaG1vZGUpOworICAgICAgICBlcnIgPSBkZWZsYXRlKCYoc2VsZi0+enN0KSwgbW9kZSk7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfQogCi0gICAgLyogSWYgZmx1c2htb2RlIGlzIFpfRklOSVNILCB3ZSBhbHNvIGhhdmUgdG8gY2FsbCBkZWZsYXRlRW5kKCkgdG8gZnJlZQorICAgIC8qIElmIG1vZGUgaXMgWl9GSU5JU0gsIHdlIGFsc28gaGF2ZSB0byBjYWxsIGRlZmxhdGVFbmQoKSB0byBmcmVlCiAgICAgICAgdmFyaW91cyBkYXRhIHN0cnVjdHVyZXMuIE5vdGUgd2Ugc2hvdWxkIG9ubHkgZ2V0IFpfU1RSRUFNX0VORCB3aGVuCi0gICAgICAgZmx1c2htb2RlIGlzIFpfRklOSVNILCBidXQgY2hlY2tpbmcgYm90aCBmb3Igc2FmZXR5Ki8KLSAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCAmJiBmbHVzaG1vZGUgPT0gWl9GSU5JU0gpIHsKKyAgICAgICBtb2RlIGlzIFpfRklOSVNILCBidXQgY2hlY2tpbmcgYm90aCBmb3Igc2FmZXR5Ki8KKyAgICBpZiAoZXJyID09IFpfU1RSRUFNX0VORCAmJiBtb2RlID09IFpfRklOSVNIKSB7CiAgICAgICAgIGVyciA9IGRlZmxhdGVFbmQoJihzZWxmLT56c3QpKTsKICAgICAgICAgaWYgKGVyciAhPSBaX09LKSB7CiAgICAgICAgICAgICB6bGliX2Vycm9yKHNlbGYtPnpzdCwgZXJyLCAid2hpbGUgZmluaXNoaW5nIGNvbXByZXNzaW9uIik7CkBAIC04MjYsOCArOTE0LDcgQEAKICAgICB9CiAKICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZSZXRWYWwsIHNlbGYtPnpzdC50b3RhbF9vdXQgLSBzdGFydF90b3RhbF9vdXQpIDwgMCkgewotICAgICAgICBQeV9ERUNSRUYoUmV0VmFsKTsKLSAgICAgICAgUmV0VmFsID0gTlVMTDsKKyAgICAgICAgUHlfQ0xFQVIoUmV0VmFsKTsKICAgICB9CiAKICBlcnJvcjoKQEAgLTgzNywxMSArOTI0LDE2IEBACiB9CiAKICNpZmRlZiBIQVZFX1pMSUJfQ09QWQotUHlEb2NfU1RSVkFSKGNvbXBfY29weV9fZG9jX18sCi0iY29weSgpIC0tIFJldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4iKTsKKworLypbY2xpbmljIGlucHV0XQoremxpYi5Db21wcmVzcy5jb3B5CisKK1JldHVybiBhIGNvcHkgb2YgdGhlIGNvbXByZXNzaW9uIG9iamVjdC4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jb3B5KGNvbXBvYmplY3QgKnNlbGYpCit6bGliX0NvbXByZXNzX2NvcHlfaW1wbChjb21wb2JqZWN0ICpzZWxmKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUxNDRhYTE1M2MyMWU4MDUgaW5wdXQ9YzY1NjM1MWY5NGI4MjcxOF0qLwogewogICAgIGNvbXBvYmplY3QgKnJldHZhbCA9IE5VTEw7CiAgICAgaW50IGVycjsKQEAgLTg5MSwxMSArOTgzLDE1IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihkZWNvbXBfY29weV9fZG9jX18sCi0iY29weSgpIC0tIFJldHVybiBhIGNvcHkgb2YgdGhlIGRlY29tcHJlc3Npb24gb2JqZWN0LiIpOworLypbY2xpbmljIGlucHV0XQoremxpYi5EZWNvbXByZXNzLmNvcHkKKworUmV0dXJuIGEgY29weSBvZiB0aGUgZGVjb21wcmVzc2lvbiBvYmplY3QuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1QeVpsaWJfdW5jb3B5KGNvbXBvYmplY3QgKnNlbGYpCit6bGliX0RlY29tcHJlc3NfY29weV9pbXBsKGNvbXBvYmplY3QgKnNlbGYpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MDJhODgzYTJhNTEwYzhjYyBpbnB1dD1iYTZjM2U5NjcxMmE1OTZiXSovCiB7CiAgICAgY29tcG9iamVjdCAqcmV0dmFsID0gTlVMTDsKICAgICBpbnQgZXJyOwpAQCAtOTQ3LDM0ICsxMDQzLDQzIEBACiB9CiAjZW5kaWYKIAotUHlEb2NfU1RSVkFSKGRlY29tcF9mbHVzaF9fZG9jX18sCi0iZmx1c2goIFtsZW5ndGhdICkgLS0gUmV0dXJuIGEgc3RyaW5nIGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZ1xuIgotImRlY29tcHJlc3NlZCBkYXRhLiBsZW5ndGgsIGlmIGdpdmVuLCBpcyB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZVxuIgotIm91dHB1dCBidWZmZXIuXG4iCi0iXG4iCi0iVGhlIGRlY29tcHJlc3NvciBvYmplY3QgY2FuIG5vIGxvbmdlciBiZSB1c2VkIGFmdGVyIHRoaXMgY2FsbC4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuRGVjb21wcmVzcy5mbHVzaAorCisgICAgbGVuZ3RoOiB1aW50KGNfZGVmYXVsdD0iREVGX0JVRl9TSVpFIikgPSB6bGliLkRFRl9CVUZfU0laRQorICAgICAgICB0aGUgaW5pdGlhbCBzaXplIG9mIHRoZSBvdXRwdXQgYnVmZmVyLgorICAgIC8KKworUmV0dXJuIGEgYnl0ZXMgb2JqZWN0IGNvbnRhaW5pbmcgYW55IHJlbWFpbmluZyBkZWNvbXByZXNzZWQgZGF0YS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl91bmZsdXNoKGNvbXBvYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoremxpYl9EZWNvbXByZXNzX2ZsdXNoX2ltcGwoY29tcG9iamVjdCAqc2VsZiwgdW5zaWduZWQgaW50IGxlbmd0aCkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYjZmYjc1M2FiNjk4ZTIyIGlucHV0PTE1ODA5NTY1MDU5Nzg5OTNdKi8KIHsKLSAgICBpbnQgZXJyLCBsZW5ndGggPSBERUZBVUxUQUxMT0M7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBpbnQgbmV3X2xlbmd0aDsKICAgICBQeU9iamVjdCAqIHJldHZhbCA9IE5VTEw7CiAgICAgdW5zaWduZWQgbG9uZyBzdGFydF90b3RhbF9vdXQ7CisgICAgUHlfc3NpemVfdCBzaXplOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8aTpmbHVzaCIsICZsZW5ndGgpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAobGVuZ3RoIDw9IDApIHsKKyAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybyIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisKICAgICBpZiAoIShyZXR2YWwgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGxlbmd0aCkpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogCiAgICAgRU5URVJfWkxJQihzZWxmKTsKIAorICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYtPnVuY29uc3VtZWRfdGFpbCk7CisKICAgICBzdGFydF90b3RhbF9vdXQgPSBzZWxmLT56c3QudG90YWxfb3V0OwotICAgIHNlbGYtPnpzdC5hdmFpbF9pbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VsZi0+dW5jb25zdW1lZF90YWlsKTsKKyAgICAvKiBzYXZlX3VuY29uc3VtZWRfaW5wdXQoKSBlbnN1cmVzIHRoYXQgdW5jb25zdW1lZF90YWlsIGxlbmd0aCBpcyBsZXNzZXIKKyAgICAgICBvciBlcXVhbCB0aGFuIFVJTlRfTUFYICovCisgICAgc2VsZi0+enN0LmF2YWlsX2luID0gUHlfU0FGRV9ET1dOQ0FTVChzaXplLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBpbnQpOwogICAgIHNlbGYtPnpzdC5uZXh0X2luID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhzZWxmLT51bmNvbnN1bWVkX3RhaWwpOwogICAgIHNlbGYtPnpzdC5hdmFpbF9vdXQgPSBsZW5ndGg7CiAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpOwpAQCAtOTg2LDE0ICsxMDkxLDE3IEBACiAgICAgLyogd2hpbGUgWl9PSyBhbmQgdGhlIG91dHB1dCBidWZmZXIgaXMgZnVsbCwgdGhlcmUgbWlnaHQgYmUgbW9yZSBvdXRwdXQsCiAgICAgICAgc28gZXh0ZW5kIHRoZSBvdXRwdXQgYnVmZmVyIGFuZCB0cnkgYWdhaW4gKi8KICAgICB3aGlsZSAoKGVyciA9PSBaX09LIHx8IGVyciA9PSBaX0JVRl9FUlJPUikgJiYgc2VsZi0+enN0LmF2YWlsX291dCA9PSAwKSB7Ci0gICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgbGVuZ3RoIDw8IDEpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHJldHZhbCk7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAobGVuZ3RoIDw9IChVSU5UX01BWCA+PiAxKSkKKyAgICAgICAgICAgIG5ld19sZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmV3X2xlbmd0aCA9IFVJTlRfTUFYOworICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZyZXR2YWwsIG5ld19sZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgc2VsZi0+enN0Lm5leHRfb3V0ID0gKEJ5dGUgKilQeUJ5dGVzX0FTX1NUUklORyhyZXR2YWwpICsgbGVuZ3RoOwogICAgICAgICBzZWxmLT56c3QuYXZhaWxfb3V0ID0gbGVuZ3RoOwotICAgICAgICBsZW5ndGggPSBsZW5ndGggPDwgMTsKKyAgICAgICAgbGVuZ3RoID0gbmV3X2xlbmd0aDsKIAogICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCiAgICAgICAgIGVyciA9IGluZmxhdGUoJihzZWxmLT56c3QpLCBaX0ZJTklTSCk7CkBAIC0xMDIwLDggKzExMjgsNyBAQAogICAgIH0KIAogICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnJldHZhbCwgc2VsZi0+enN0LnRvdGFsX291dCAtIHN0YXJ0X3RvdGFsX291dCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXR2YWwpOwotICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBQeV9DTEVBUihyZXR2YWwpOwogICAgIH0KIAogZXJyb3I6CkBAIC0xMDMxLDI4ICsxMTM4LDI0IEBACiAgICAgcmV0dXJuIHJldHZhbDsKIH0KIAorI2luY2x1ZGUgImNsaW5pYy96bGlibW9kdWxlLmMuaCIKKwogc3RhdGljIFB5TWV0aG9kRGVmIGNvbXBfbWV0aG9kc1tdID0KIHsKLSAgICB7ImNvbXByZXNzIiwgKGJpbmFyeWZ1bmMpUHlabGliX29iamNvbXByZXNzLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgICAgIGNvbXBfY29tcHJlc3NfX2RvY19ffSwKLSAgICB7ImZsdXNoIiwgKGJpbmFyeWZ1bmMpUHlabGliX2ZsdXNoLCBNRVRIX1ZBUkFSR1MsCi0gICAgICAgICAgICAgIGNvbXBfZmx1c2hfX2RvY19ffSwKKyAgICBaTElCX0NPTVBSRVNTX0NPTVBSRVNTX01FVEhPRERFRgorICAgIFpMSUJfQ09NUFJFU1NfRkxVU0hfTUVUSE9EREVGCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLSAgICB7ImNvcHkiLCAgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb3B5LCBNRVRIX05PQVJHUywKLSAgICAgICAgICAgICAgY29tcF9jb3B5X19kb2NfX30sCisgICAgWkxJQl9DT01QUkVTU19DT1BZX01FVEhPRERFRgogI2VuZGlmCiAgICAge05VTEwsIE5VTEx9CiB9OwogCiBzdGF0aWMgUHlNZXRob2REZWYgRGVjb21wX21ldGhvZHNbXSA9CiB7Ci0gICAgeyJkZWNvbXByZXNzIiwgKGJpbmFyeWZ1bmMpUHlabGliX29iamRlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXBfZGVjb21wcmVzc19fZG9jX199LAotICAgIHsiZmx1c2giLCAoYmluYXJ5ZnVuYylQeVpsaWJfdW5mbHVzaCwgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICBkZWNvbXBfZmx1c2hfX2RvY19ffSwKKyAgICBaTElCX0RFQ09NUFJFU1NfREVDT01QUkVTU19NRVRIT0RERUYKKyAgICBaTElCX0RFQ09NUFJFU1NfRkxVU0hfTUVUSE9EREVGCiAjaWZkZWYgSEFWRV9aTElCX0NPUFkKLSAgICB7ImNvcHkiLCAgKFB5Q0Z1bmN0aW9uKVB5WmxpYl91bmNvcHksIE1FVEhfTk9BUkdTLAotICAgICAgICAgICAgICBkZWNvbXBfY29weV9fZG9jX199LAorICAgIFpMSUJfREVDT01QUkVTU19DT1BZX01FVEhPRERFRgogI2VuZGlmCiAgICAge05VTEwsIE5VTEx9CiB9OwpAQCAtMTA2NSw5NiArMTE2OCw5NSBAQAogICAgIHtOVUxMfSwKIH07CiAKLVB5RG9jX1NUUlZBUihhZGxlcjMyX19kb2NfXywKLSJhZGxlcjMyKHN0cmluZ1ssIHN0YXJ0XSkgLS0gQ29tcHV0ZSBhbiBBZGxlci0zMiBjaGVja3N1bSBvZiBzdHJpbmcuXG4iCi0iXG4iCi0iQW4gb3B0aW9uYWwgc3RhcnRpbmcgdmFsdWUgY2FuIGJlIHNwZWNpZmllZC4gIFRoZSByZXR1cm5lZCBjaGVja3N1bSBpc1xuIgotImFuIGludGVnZXIuIik7CisvKltjbGluaWMgaW5wdXRdCit6bGliLmFkbGVyMzIKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIHZhbHVlOiB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKSA9IDEKKyAgICAgICAgU3RhcnRpbmcgdmFsdWUgb2YgdGhlIGNoZWNrc3VtLgorICAgIC8KKworQ29tcHV0ZSBhbiBBZGxlci0zMiBjaGVja3N1bSBvZiBkYXRhLgorCitUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9hZGxlcjMyKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3psaWJfYWRsZXIzMl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5X2J1ZmZlciAqZGF0YSwgdW5zaWduZWQgaW50IHZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTUxZDZkNzVlZTY1NWM3OGEgaW5wdXQ9NmZmNDU1Nzg3MjE2MGU4OF0qLwogewotICAgIHVuc2lnbmVkIGludCBhZGxlcjMydmFsID0gMTsgIC8qIGFkbGVyMzIoMEwsIFpfTlVMTCwgMCkgKi8KLSAgICBQeV9idWZmZXIgcGJ1ZjsKLQotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAieSp8STphZGxlcjMyIiwgJnBidWYsICZhZGxlcjMydmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogUmVsZWFzaW5nIHRoZSBHSUwgZm9yIHZlcnkgc21hbGwgYnVmZmVycyBpcyBpbmVmZmljaWVudAogICAgICAgIGFuZCBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgKi8KLSAgICBpZiAocGJ1Zi5sZW4gPiAxMDI0KjUpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gcGJ1Zi5idWY7Ci0gICAgICAgIFB5X3NzaXplX3QgbGVuID0gcGJ1Zi5sZW47CisgICAgaWYgKGRhdGEtPmxlbiA+IDEwMjQqNSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBkYXRhLT5idWY7CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgLyogQXZvaWQgdHJ1bmNhdGlvbiBvZiBsZW5ndGggZm9yIHZlcnkgbGFyZ2UgYnVmZmVycy4gYWRsZXIzMigpIHRha2VzCiAgICAgICAgICAgIGxlbmd0aCBhcyBhbiB1bnNpZ25lZCBpbnQsIHdoaWNoIG1heSBiZSBuYXJyb3dlciB0aGFuIFB5X3NzaXplX3QuICovCi0gICAgICAgIHdoaWxlIChsZW4gPiAoc2l6ZV90KSBVSU5UX01BWCkgewotICAgICAgICAgICAgYWRsZXIzMnZhbCA9IGFkbGVyMzIoYWRsZXIzMnZhbCwgYnVmLCBVSU5UX01BWCk7CisgICAgICAgIHdoaWxlICgoc2l6ZV90KWxlbiA+IFVJTlRfTUFYKSB7CisgICAgICAgICAgICB2YWx1ZSA9IGFkbGVyMzIodmFsdWUsIGJ1ZiwgVUlOVF9NQVgpOwogICAgICAgICAgICAgYnVmICs9IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICAgICAgbGVuIC09IChzaXplX3QpIFVJTlRfTUFYOwogICAgICAgICB9Ci0gICAgICAgIGFkbGVyMzJ2YWwgPSBhZGxlcjMyKGFkbGVyMzJ2YWwsIGJ1ZiwgbGVuKTsKKyAgICAgICAgdmFsdWUgPSBhZGxlcjMyKHZhbHVlLCBidWYsICh1bnNpZ25lZCBpbnQpbGVuKTsKICAgICAgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKICAgICB9IGVsc2UgewotICAgICAgICBhZGxlcjMydmFsID0gYWRsZXIzMihhZGxlcjMydmFsLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICB2YWx1ZSA9IGFkbGVyMzIodmFsdWUsIGRhdGEtPmJ1ZiwgKHVuc2lnbmVkIGludClkYXRhLT5sZW4pOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoYWRsZXIzMnZhbCAmIDB4ZmZmZmZmZmZVKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcodmFsdWUgJiAweGZmZmZmZmZmVSk7CiB9CiAKLVB5RG9jX1NUUlZBUihjcmMzMl9fZG9jX18sCi0iY3JjMzIoc3RyaW5nWywgc3RhcnRdKSAtLSBDb21wdXRlIGEgQ1JDLTMyIGNoZWNrc3VtIG9mIHN0cmluZy5cbiIKLSJcbiIKLSJBbiBvcHRpb25hbCBzdGFydGluZyB2YWx1ZSBjYW4gYmUgc3BlY2lmaWVkLiAgVGhlIHJldHVybmVkIGNoZWNrc3VtIGlzXG4iCi0iYW4gaW50ZWdlci4iKTsKKy8qW2NsaW5pYyBpbnB1dF0KK3psaWIuY3JjMzIKKworICAgIGRhdGE6IFB5X2J1ZmZlcgorICAgIHZhbHVlOiB1bnNpZ25lZF9pbnQoYml0d2lzZT1UcnVlKSA9IDAKKyAgICAgICAgU3RhcnRpbmcgdmFsdWUgb2YgdGhlIGNoZWNrc3VtLgorICAgIC8KKworQ29tcHV0ZSBhIENSQy0zMiBjaGVja3N1bSBvZiBkYXRhLgorCitUaGUgcmV0dXJuZWQgY2hlY2tzdW0gaXMgYW4gaW50ZWdlci4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KIAogc3RhdGljIFB5T2JqZWN0ICoKLVB5WmxpYl9jcmMzMihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit6bGliX2NyYzMyX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlfYnVmZmVyICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsdWUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YzFlOTg2ZTc0ZmU3YjYyMyBpbnB1dD0yNmMzZWQ0MzBmYTAwYjRjXSovCiB7Ci0gICAgdW5zaWduZWQgaW50IGNyYzMydmFsID0gMDsgIC8qIGNyYzMyKDBMLCBaX05VTEwsIDApICovCi0gICAgUHlfYnVmZmVyIHBidWY7CiAgICAgaW50IHNpZ25lZF92YWw7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqfEk6Y3JjMzIiLCAmcGJ1ZiwgJmNyYzMydmFsKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogUmVsZWFzaW5nIHRoZSBHSUwgZm9yIHZlcnkgc21hbGwgYnVmZmVycyBpcyBpbmVmZmljaWVudAogICAgICAgIGFuZCBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgKi8KLSAgICBpZiAocGJ1Zi5sZW4gPiAxMDI0KjUpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqYnVmID0gcGJ1Zi5idWY7Ci0gICAgICAgIFB5X3NzaXplX3QgbGVuID0gcGJ1Zi5sZW47CisgICAgaWYgKGRhdGEtPmxlbiA+IDEwMjQqNSkgeworICAgICAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBkYXRhLT5idWY7CisgICAgICAgIFB5X3NzaXplX3QgbGVuID0gZGF0YS0+bGVuOwogCiAgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICAgICAgLyogQXZvaWQgdHJ1bmNhdGlvbiBvZiBsZW5ndGggZm9yIHZlcnkgbGFyZ2UgYnVmZmVycy4gY3JjMzIoKSB0YWtlcwogICAgICAgICAgICBsZW5ndGggYXMgYW4gdW5zaWduZWQgaW50LCB3aGljaCBtYXkgYmUgbmFycm93ZXIgdGhhbiBQeV9zc2l6ZV90LiAqLwotICAgICAgICB3aGlsZSAobGVuID4gKHNpemVfdCkgVUlOVF9NQVgpIHsKLSAgICAgICAgICAgIGNyYzMydmFsID0gY3JjMzIoY3JjMzJ2YWwsIGJ1ZiwgVUlOVF9NQVgpOworICAgICAgICB3aGlsZSAoKHNpemVfdClsZW4gPiBVSU5UX01BWCkgeworICAgICAgICAgICAgdmFsdWUgPSBjcmMzMih2YWx1ZSwgYnVmLCBVSU5UX01BWCk7CiAgICAgICAgICAgICBidWYgKz0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgICAgICBsZW4gLT0gKHNpemVfdCkgVUlOVF9NQVg7CiAgICAgICAgIH0KLSAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBidWYsIGxlbik7CisgICAgICAgIHNpZ25lZF92YWwgPSBjcmMzMih2YWx1ZSwgYnVmLCAodW5zaWduZWQgaW50KWxlbik7CiAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCiAgICAgfSBlbHNlIHsKLSAgICAgICAgc2lnbmVkX3ZhbCA9IGNyYzMyKGNyYzMydmFsLCBwYnVmLmJ1ZiwgcGJ1Zi5sZW4pOworICAgICAgICBzaWduZWRfdmFsID0gY3JjMzIodmFsdWUsIGRhdGEtPmJ1ZiwgKHVuc2lnbmVkIGludClkYXRhLT5sZW4pOwogICAgIH0KLSAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZwYnVmKTsKICAgICByZXR1cm4gUHlMb25nX0Zyb21VbnNpZ25lZExvbmcoc2lnbmVkX3ZhbCAmIDB4ZmZmZmZmZmZVKTsKIH0KIAogCiBzdGF0aWMgUHlNZXRob2REZWYgemxpYl9tZXRob2RzW10gPQogewotICAgIHsiYWRsZXIzMiIsIChQeUNGdW5jdGlvbilQeVpsaWJfYWRsZXIzMiwgTUVUSF9WQVJBUkdTLAotICAgICAgICAgICAgICAgIGFkbGVyMzJfX2RvY19ffSwKLSAgICB7ImNvbXByZXNzIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb21wcmVzcywgIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgY29tcHJlc3NfX2RvY19ffSwKLSAgICB7ImNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9jb21wcmVzc29iaiwgTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMsCi0gICAgICAgICAgICAgICAgICAgIGNvbXByZXNzb2JqX19kb2NfX30sCi0gICAgeyJjcmMzMiIsIChQeUNGdW5jdGlvbilQeVpsaWJfY3JjMzIsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgY3JjMzJfX2RvY19ffSwKLSAgICB7ImRlY29tcHJlc3MiLCAoUHlDRnVuY3Rpb24pUHlabGliX2RlY29tcHJlc3MsIE1FVEhfVkFSQVJHUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzX19kb2NfX30sCi0gICAgeyJkZWNvbXByZXNzb2JqIiwgKFB5Q0Z1bmN0aW9uKVB5WmxpYl9kZWNvbXByZXNzb2JqLCBNRVRIX1ZBUkFSR1N8TUVUSF9LRVlXT1JEUywKLSAgICAgICAgICAgICAgICAgICBkZWNvbXByZXNzb2JqX19kb2NfX30sCisgICAgWkxJQl9BRExFUjMyX01FVEhPRERFRgorICAgIFpMSUJfQ09NUFJFU1NfTUVUSE9EREVGCisgICAgWkxJQl9DT01QUkVTU09CSl9NRVRIT0RERUYKKyAgICBaTElCX0NSQzMyX01FVEhPRERFRgorICAgIFpMSUJfREVDT01QUkVTU19NRVRIT0RERUYKKyAgICBaTElCX0RFQ09NUFJFU1NPQkpfTUVUSE9EREVGCiAgICAge05VTEwsIE5VTEx9CiB9OwogCkBAIC0xMjY1LDIwICsxMzY3LDIxIEBACiAgICAgICAgIFB5X0lOQ1JFRihabGliRXJyb3IpOwogICAgICAgICBQeU1vZHVsZV9BZGRPYmplY3QobSwgImVycm9yIiwgWmxpYkVycm9yKTsKICAgICB9Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1BWF9XQklUUyIsIE1BWF9XQklUUyk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIkRFRkxBVEVEIiwgREVGTEFURUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJERUZfTUVNX0xFVkVMIiwgREVGX01FTV9MRVZFTCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfQkVTVF9TUEVFRCIsIFpfQkVTVF9TUEVFRCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfQkVTVF9DT01QUkVTU0lPTiIsIFpfQkVTVF9DT01QUkVTU0lPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfREVGQVVMVF9DT01QUkVTU0lPTiIsIFpfREVGQVVMVF9DT01QUkVTU0lPTik7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfRklMVEVSRUQiLCBaX0ZJTFRFUkVEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9IVUZGTUFOX09OTFkiLCBaX0hVRkZNQU5fT05MWSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlpfREVGQVVMVF9TVFJBVEVHWSIsIFpfREVGQVVMVF9TVFJBVEVHWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTUFYX1dCSVRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBERUZMQVRFRCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX01FTV9MRVZFTCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgREVGX0JVRl9TSVpFKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0JFU1RfU1BFRUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfQkVTVF9DT01QUkVTU0lPTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9ERUZBVUxUX0NPTVBSRVNTSU9OKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0ZJTFRFUkVEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX0hVRkZNQU5fT05MWSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgWl9ERUZBVUxUX1NUUkFURUdZKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZJTklTSCIsIFpfRklOSVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWl9OT19GTFVTSCIsIFpfTk9fRkxVU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX1NZTkNfRkxVU0giLCBaX1NZTkNfRkxVU0gpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJaX0ZVTExfRkxVU0giLCBaX0ZVTExfRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRklOSVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX05PX0ZMVVNIKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBaX1NZTkNfRkxVU0gpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFpfRlVMTF9GTFVTSCk7CiAKICAgICB2ZXIgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhaTElCX1ZFUlNJT04pOwogICAgIGlmICh2ZXIgIT0gTlVMTCkKZGlmZiAtLWdpdCBhL09iamVjdHMvYWJzdHJhY3QuYyBiL09iamVjdHMvYWJzdHJhY3QuYwppbmRleCAxMjRlNzY2Li41ZTk2MTM4IDEwMDY0NAotLS0gYS9PYmplY3RzL2Fic3RyYWN0LmMKKysrIGIvT2JqZWN0cy9hYnN0cmFjdC5jCkBAIC02NCw0OSArNjQsNzIgQEAKIH0KICNkZWZpbmUgUHlPYmplY3RfTGVuZ3RoIFB5T2JqZWN0X1NpemUKIAoraW50CitfUHlPYmplY3RfSGFzTGVuKFB5T2JqZWN0ICpvKSB7CisgICAgcmV0dXJuIChQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZSAmJiBQeV9UWVBFKG8pLT50cF9hc19zZXF1ZW5jZS0+c3FfbGVuZ3RoKSB8fAorICAgICAgICAoUHlfVFlQRShvKS0+dHBfYXNfbWFwcGluZyAmJiBQeV9UWVBFKG8pLT50cF9hc19tYXBwaW5nLT5tcF9sZW5ndGgpOworfQogCiAvKiBUaGUgbGVuZ3RoIGhpbnQgZnVuY3Rpb24gcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSB2YWx1ZSBmcm9tIG8uX19sZW5fXygpCi0gICBvciBvLl9fbGVuZ3RoX2hpbnRfXygpLiAgSWYgdGhvc2UgbWV0aG9kcyBhcmVuJ3QgZm91bmQgb3IgcmV0dXJuIGEgbmVnYXRpdmUKLSAgIHZhbHVlLCB0aGVuIHRoZSBkZWZhdWx0dmFsdWUgaXMgcmV0dXJuZWQuICBJZiBvbmUgb2YgdGhlIGNhbGxzIGZhaWxzLAorICAgb3Igby5fX2xlbmd0aF9oaW50X18oKS4gSWYgdGhvc2UgbWV0aG9kcyBhcmVuJ3QgZm91bmQgdGhlIGRlZmF1bHR2YWx1ZSBpcworICAgcmV0dXJuZWQuICBJZiBvbmUgb2YgdGhlIGNhbGxzIGZhaWxzIHdpdGggYW4gZXhjZXB0aW9uIG90aGVyIHRoYW4gVHlwZUVycm9yCiAgICB0aGlzIGZ1bmN0aW9uIHJldHVybnMgLTEuCiAqLwogCiBQeV9zc2l6ZV90Ci1fUHlPYmplY3RfTGVuZ3RoSGludChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBkZWZhdWx0dmFsdWUpCitQeU9iamVjdF9MZW5ndGhIaW50KFB5T2JqZWN0ICpvLCBQeV9zc2l6ZV90IGRlZmF1bHR2YWx1ZSkKIHsKKyAgICBQeU9iamVjdCAqaGludCwgKnJlc3VsdDsKKyAgICBQeV9zc2l6ZV90IHJlczsKICAgICBfUHlfSURFTlRJRklFUihfX2xlbmd0aF9oaW50X18pOwotICAgIFB5T2JqZWN0ICpybywgKmhpbnRtZXRoOwotICAgIFB5X3NzaXplX3QgcnY7Ci0KLSAgICAvKiB0cnkgby5fX2xlbl9fKCkgKi8KLSAgICBydiA9IFB5T2JqZWN0X1NpemUobyk7Ci0gICAgaWYgKHJ2ID49IDApCi0gICAgICAgIHJldHVybiBydjsKLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBpZiAoX1B5T2JqZWN0X0hhc0xlbihvKSkgeworICAgICAgICByZXMgPSBQeU9iamVjdF9MZW5ndGgobyk7CisgICAgICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KICAgICB9Ci0KLSAgICAvKiB0cnkgby5fX2xlbmd0aF9oaW50X18oKSAqLwotICAgIGhpbnRtZXRoID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgJlB5SWRfX19sZW5ndGhfaGludF9fKTsKLSAgICBpZiAoaGludG1ldGggPT0gTlVMTCkgewotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICBoaW50ID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwobywgJlB5SWRfX19sZW5ndGhfaGludF9fKTsKKyAgICBpZiAoaGludCA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7Ci0gICAgfQotICAgIHJvID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhoaW50bWV0aCwgTlVMTCk7Ci0gICAgUHlfREVDUkVGKGhpbnRtZXRoKTsKLSAgICBpZiAocm8gPT0gTlVMTCkgewotICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gZGVmYXVsdHZhbHVlOwogICAgIH0KLSAgICBydiA9IFB5TG9uZ19DaGVjayhybykgPyBQeUxvbmdfQXNTc2l6ZV90KHJvKSA6IGRlZmF1bHR2YWx1ZTsKLSAgICBQeV9ERUNSRUYocm8pOwotICAgIHJldHVybiBydjsKKyAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKGhpbnQsIE5VTEwpOworICAgIFB5X0RFQ1JFRihoaW50KTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkgeworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBlbHNlIGlmIChyZXN1bHQgPT0gUHlfTm90SW1wbGVtZW50ZWQpIHsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBkZWZhdWx0dmFsdWU7CisgICAgfQorICAgIGlmICghUHlMb25nX0NoZWNrKHJlc3VsdCkpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgIl9fbGVuZ3RoX2hpbnRfXyBtdXN0IGJlIGFuIGludGVnZXIsIG5vdCAlLjEwMHMiLAorICAgICAgICAgICAgUHlfVFlQRShyZXN1bHQpLT50cF9uYW1lKTsKKyAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmVzID0gUHlMb25nX0FzU3NpemVfdChyZXN1bHQpOworICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIl9fbGVuZ3RoX2hpbnRfXygpIHNob3VsZCByZXR1cm4gPj0gMCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiByZXM7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTIwMiw3ICsyMjUsNyBAQAogfQogCiBpbnQKLVB5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSkKK1B5T2JqZWN0X0RlbEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqb2tleTsKICAgICBpbnQgcmV0OwpAQCAtMjI3LDI4ICsyNTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqYnVmZmVyX2xlbikKIHsKLSAgICBQeUJ1ZmZlclByb2NzICpwYjsKLSAgICBQeV9idWZmZXIgdmlldzsKLQotICAgIGlmIChvYmogPT0gTlVMTCB8fCBidWZmZXIgPT0gTlVMTCB8fCBidWZmZXJfbGVuID09IE5VTEwpIHsKLSAgICAgICAgbnVsbF9lcnJvcigpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIHBiID0gb2JqLT5vYl90eXBlLT50cF9hc19idWZmZXI7Ci0gICAgaWYgKHBiID09IE5VTEwgfHwgcGItPmJmX2dldGJ1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYnl0ZXMsIGJ5dGVhcnJheSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAib3IgYnVmZmVyIGNvbXBhdGlibGUgb2JqZWN0Iik7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0gICAgaWYgKCgqcGItPmJmX2dldGJ1ZmZlcikob2JqLCAmdmlldywgUHlCVUZfU0lNUExFKSkgcmV0dXJuIC0xOwotCi0gICAgKmJ1ZmZlciA9IHZpZXcuYnVmOwotICAgICpidWZmZXJfbGVuID0gdmlldy5sZW47Ci0gICAgaWYgKHBiLT5iZl9yZWxlYXNlYnVmZmVyICE9IE5VTEwpCi0gICAgICAgICgqcGItPmJmX3JlbGVhc2VidWZmZXIpKG9iaiwgJnZpZXcpOwotICAgIFB5X1hERUNSRUYodmlldy5vYmopOwotICAgIHJldHVybiAwOworICAgIHJldHVybiBQeU9iamVjdF9Bc1JlYWRCdWZmZXIob2JqLCAoY29uc3Qgdm9pZCAqKilidWZmZXIsIGJ1ZmZlcl9sZW4pOwogfQogCiBpbnQKQEAgLTI3MiwyOCArMjc0LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKipidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmJ1ZmZlcl9sZW4pCiB7Ci0gICAgUHlCdWZmZXJQcm9jcyAqcGI7CiAgICAgUHlfYnVmZmVyIHZpZXc7CiAKICAgICBpZiAob2JqID09IE5VTEwgfHwgYnVmZmVyID09IE5VTEwgfHwgYnVmZmVyX2xlbiA9PSBOVUxMKSB7CiAgICAgICAgIG51bGxfZXJyb3IoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBwYiA9IG9iai0+b2JfdHlwZS0+dHBfYXNfYnVmZmVyOwotICAgIGlmIChwYiA9PSBOVUxMIHx8Ci0gICAgICAgIHBiLT5iZl9nZXRidWZmZXIgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgYnVmZmVyIGludGVyZmFjZSIpOworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIob2JqLCAmdmlldywgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKCgqcGItPmJmX2dldGJ1ZmZlcikob2JqLCAmdmlldywgUHlCVUZfU0lNUExFKSkgcmV0dXJuIC0xOwogCiAgICAgKmJ1ZmZlciA9IHZpZXcuYnVmOwogICAgICpidWZmZXJfbGVuID0gdmlldy5sZW47Ci0gICAgaWYgKHBiLT5iZl9yZWxlYXNlYnVmZmVyICE9IE5VTEwpCi0gICAgICAgICgqcGItPmJmX3JlbGVhc2VidWZmZXIpKG9iaiwgJnZpZXcpOwotICAgIFB5X1hERUNSRUYodmlldy5vYmopOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTksOSArMzExLDcgQEAKIAogICAgICpidWZmZXIgPSB2aWV3LmJ1ZjsKICAgICAqYnVmZmVyX2xlbiA9IHZpZXcubGVuOwotICAgIGlmIChwYi0+YmZfcmVsZWFzZWJ1ZmZlciAhPSBOVUxMKQotICAgICAgICAoKnBiLT5iZl9yZWxlYXNlYnVmZmVyKShvYmosICZ2aWV3KTsKLSAgICBQeV9YREVDUkVGKHZpZXcub2JqKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzMwLDEzICszMjAsMTUgQEAKIGludAogUHlPYmplY3RfR2V0QnVmZmVyKFB5T2JqZWN0ICpvYmosIFB5X2J1ZmZlciAqdmlldywgaW50IGZsYWdzKQogewotICAgIGlmICghUHlPYmplY3RfQ2hlY2tCdWZmZXIob2JqKSkgeworICAgIFB5QnVmZmVyUHJvY3MgKnBiID0gb2JqLT5vYl90eXBlLT50cF9hc19idWZmZXI7CisKKyAgICBpZiAocGIgPT0gTlVMTCB8fCBwYi0+YmZfZ2V0YnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICInJS4xMDBzJyBkb2VzIG5vdCBzdXBwb3J0IHRoZSBidWZmZXIgaW50ZXJmYWNlIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgcmV0dXJuICgqKG9iai0+b2JfdHlwZS0+dHBfYXNfYnVmZmVyLT5iZl9nZXRidWZmZXIpKShvYmosIHZpZXcsIGZsYWdzKTsKKyAgICByZXR1cm4gKCpwYi0+YmZfZ2V0YnVmZmVyKShvYmosIHZpZXcsIGZsYWdzKTsKIH0KIAogc3RhdGljIGludApAQCAtNDY1LDcgKzQ1Nyw3IEBACiAKICAgICAvKiBPdGhlcndpc2UgYSBtb3JlIGVsYWJvcmF0ZSBzY2hlbWUgaXMgbmVlZGVkICovCiAKLSAgICAvKiBYWFgobm5vcndpdHopOiBuZWVkIHRvIGNoZWNrIGZvciBvdmVyZmxvdyEgKi8KKyAgICAvKiB2aWV3LT5uZGltIDw9IDY0ICovCiAgICAgaW5kaWNlcyA9IChQeV9zc2l6ZV90ICopUHlNZW1fTWFsbG9jKHNpemVvZihQeV9zc2l6ZV90KSoodmlldy0+bmRpbSkpOwogICAgIGlmIChpbmRpY2VzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTQ4NywxMCArNDc5LDEwIEBACiAgICAgICovCiAgICAgZWxlbWVudHMgPSBsZW4gLyB2aWV3LT5pdGVtc2l6ZTsKICAgICB3aGlsZSAoZWxlbWVudHMtLSkgewotICAgICAgICBhZGRvbmUodmlldy0+bmRpbSwgaW5kaWNlcywgdmlldy0+c2hhcGUpOwogICAgICAgICBwdHIgPSBQeUJ1ZmZlcl9HZXRQb2ludGVyKHZpZXcsIGluZGljZXMpOwogICAgICAgICBtZW1jcHkocHRyLCBzcmMsIHZpZXctPml0ZW1zaXplKTsKICAgICAgICAgc3JjICs9IHZpZXctPml0ZW1zaXplOworICAgICAgICBhZGRvbmUodmlldy0+bmRpbSwgaW5kaWNlcywgdmlldy0+c2hhcGUpOwogICAgIH0KIAogICAgIFB5TWVtX0ZyZWUoaW5kaWNlcyk7CkBAIC02MjksMTAgKzYyMSwxNCBAQAogUHlCdWZmZXJfUmVsZWFzZShQeV9idWZmZXIgKnZpZXcpCiB7CiAgICAgUHlPYmplY3QgKm9iaiA9IHZpZXctPm9iajsKLSAgICBpZiAob2JqICYmIFB5X1RZUEUob2JqKS0+dHBfYXNfYnVmZmVyICYmIFB5X1RZUEUob2JqKS0+dHBfYXNfYnVmZmVyLT5iZl9yZWxlYXNlYnVmZmVyKQotICAgICAgICBQeV9UWVBFKG9iaiktPnRwX2FzX2J1ZmZlci0+YmZfcmVsZWFzZWJ1ZmZlcihvYmosIHZpZXcpOwotICAgIFB5X1hERUNSRUYob2JqKTsKKyAgICBQeUJ1ZmZlclByb2NzICpwYjsKKyAgICBpZiAob2JqID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKyAgICBwYiA9IFB5X1RZUEUob2JqKS0+dHBfYXNfYnVmZmVyOworICAgIGlmIChwYiAmJiBwYi0+YmZfcmVsZWFzZWJ1ZmZlcikKKyAgICAgICAgcGItPmJmX3JlbGVhc2VidWZmZXIob2JqLCB2aWV3KTsKICAgICB2aWV3LT5vYmogPSBOVUxMOworICAgIFB5X0RFQ1JFRihvYmopOwogfQogCiBQeU9iamVjdCAqCkBAIC0xMTYyLDYgKzExNTgsMTUgQEAKICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KKyAgICAvKiBJc3N1ZSAjMTc1NzY6IHdhcm4gaWYgJ3Jlc3VsdCcgbm90IG9mIGV4YWN0IHR5cGUgaW50LiAqLworICAgIGlmIChQeUVycl9XYXJuRm9ybWF0KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywgMSwKKyAgICAgICAgICAgICJfX2luZGV4X18gcmV0dXJuZWQgbm9uLWludCAodHlwZSAlLjIwMHMpLiAgIgorICAgICAgICAgICAgIlRoZSBhYmlsaXR5IHRvIHJldHVybiBhbiBpbnN0YW5jZSBvZiBhIHN0cmljdCBzdWJjbGFzcyBvZiBpbnQgIgorICAgICAgICAgICAgImlzIGRlcHJlY2F0ZWQsIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbi4iLAorICAgICAgICAgICAgcmVzdWx0LT5vYl90eXBlLT50cF9uYW1lKSkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTEyMTcsOCArMTIyMiw3IEBACiB7CiAgICAgUHlOdW1iZXJNZXRob2RzICptOwogICAgIFB5T2JqZWN0ICp0cnVuY19mdW5jOwotICAgIGNvbnN0IGNoYXIgKmJ1ZmZlcjsKLSAgICBQeV9zc2l6ZV90IGJ1ZmZlcl9sZW47CisgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgX1B5X0lERU5USUZJRVIoX190cnVuY19fKTsKIAogICAgIGlmIChvID09IE5VTEwpCkBAIC0xMjM5LDcgKzEyNDMsNyBAQAogICAgICAgICBpZiAodHJ1bmNhdGVkID09IE5VTEwgfHwgUHlMb25nX0NoZWNrKHRydW5jYXRlZCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1bmNhdGVkOwogICAgICAgICAvKiBfX3RydW5jX18gaXMgc3BlY2lmaWVkIHRvIHJldHVybiBhbiBJbnRlZ3JhbCB0eXBlLAotICAgICAgICAgICBidXQgaW50KCkgbmVlZHMgdG8gcmV0dXJuIGEgaW50LiAqLworICAgICAgICAgICBidXQgaW50KCkgbmVlZHMgdG8gcmV0dXJuIGFuIGludC4gKi8KICAgICAgICAgbSA9IHRydW5jYXRlZC0+b2JfdHlwZS0+dHBfYXNfbnVtYmVyOwogICAgICAgICBpZiAobSA9PSBOVUxMIHx8IG0tPm5iX2ludCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCkBAIC0xMjU2LDYgKzEyNjAsMTAgQEAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrKG8pKQorICAgICAgICAvKiBUaGUgYmVsb3cgY2hlY2sgaXMgZG9uZSBpbiBQeUxvbmdfRnJvbVVuaWNvZGUoKS4gKi8KKyAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5pY29kZU9iamVjdChvLCAxMCk7CisKICAgICBpZiAoUHlCeXRlc19DaGVjayhvKSkKICAgICAgICAgLyogbmVlZCB0byBkbyBleHRyYSBlcnJvciBjaGVja2luZyB0aGF0IFB5TG9uZ19Gcm9tU3RyaW5nKCkKICAgICAgICAgICogZG9lc24ndCBkby4gIEluIHBhcnRpY3VsYXIgaW50KCc5XHgwMDUnKSBtdXN0IHJhaXNlIGFuCkBAIC0xMjYzLDE0ICsxMjcxLDI5IEBACiAgICAgICAgICAqLwogICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZXMoUHlCeXRlc19BU19TVFJJTkcobyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0dFVF9TSVpFKG8pLCAxMCk7Ci0gICAgaWYgKFB5VW5pY29kZV9DaGVjayhvKSkKLSAgICAgICAgLyogVGhlIGFib3ZlIGNoZWNrIGlzIGRvbmUgaW4gUHlMb25nX0Zyb21Vbmljb2RlKCkuICovCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbVVuaWNvZGVPYmplY3QobywgMTApOwotICAgIGlmICghUHlPYmplY3RfQXNDaGFyQnVmZmVyKG8sICZidWZmZXIsICZidWZmZXJfbGVuKSkKLSAgICAgICAgcmV0dXJuIF9QeUxvbmdfRnJvbUJ5dGVzKGJ1ZmZlciwgYnVmZmVyX2xlbiwgMTApOwogCi0gICAgcmV0dXJuIHR5cGVfZXJyb3IoImludCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSAiCi0gICAgICAgICAgICAgICAgICAgICAgIm51bWJlciwgbm90ICclLjIwMHMnIiwgbyk7CisgICAgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKG8pKQorICAgICAgICByZXR1cm4gX1B5TG9uZ19Gcm9tQnl0ZXMoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKG8pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlQXJyYXlfR0VUX1NJWkUobyksIDEwKTsKKworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIobywgJnZpZXcsIFB5QlVGX1NJTVBMRSkgPT0gMCkgeworICAgICAgICBQeU9iamVjdCAqcmVzdWx0LCAqYnl0ZXM7CisKKyAgICAgICAgLyogQ29weSB0byBOVUwtdGVybWluYXRlZCBidWZmZXIuICovCisgICAgICAgIGJ5dGVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY29uc3QgY2hhciAqKXZpZXcuYnVmLCB2aWV3Lmxlbik7CisgICAgICAgIGlmIChieXRlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9IF9QeUxvbmdfRnJvbUJ5dGVzKFB5Qnl0ZXNfQVNfU1RSSU5HKGJ5dGVzKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRShieXRlcyksIDEwKTsKKyAgICAgICAgUHlfREVDUkVGKGJ5dGVzKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgcmV0dXJuIHR5cGVfZXJyb3IoImludCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIGEgYnl0ZXMtbGlrZSBvYmplY3QgIgorICAgICAgICAgICAgICAgICAgICAgICJvciBhIG51bWJlciwgbm90ICclLjIwMHMnIiwgbyk7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTE2MzEsNyArMTY1NCw3IEBACiAgICAgICAgIFB5X0lOQ1JFRih2KTsKICAgICAgICAgcmV0dXJuIHY7CiAgICAgfQotICAgIGlmIChQeUxpc3RfQ2hlY2sodikpCisgICAgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHYpKQogICAgICAgICByZXR1cm4gUHlMaXN0X0FzVHVwbGUodik7CiAKICAgICAvKiBHZXQgaXRlcmF0b3IuICovCkBAIC0xNjQwLDcgKzE2NjMsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEd1ZXNzIHJlc3VsdCBzaXplIGFuZCBhbGxvY2F0ZSBzcGFjZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQodiwgMTApOworICAgIG4gPSBQeU9iamVjdF9MZW5ndGhIaW50KHYsIDEwKTsKICAgICBpZiAobiA9PSAtMSkKICAgICAgICAgZ290byBGYWlsOwogICAgIHJlc3VsdCA9IFB5VHVwbGVfTmV3KG4pOwpAQCAtMTkwMCw3ICsxOTIzLDcgQEAKICNkZWZpbmUgUHlNYXBwaW5nX0xlbmd0aCBQeU1hcHBpbmdfU2l6ZQogCiBQeU9iamVjdCAqCi1QeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhQeU9iamVjdCAqbywgY2hhciAqa2V5KQorUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSkKIHsKICAgICBQeU9iamVjdCAqb2tleSwgKnI7CiAKQEAgLTE5MTYsNyArMTkzOSw3IEBACiB9CiAKIGludAotUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQorUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKmtleSwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFB5T2JqZWN0ICpva2V5OwogICAgIGludCByOwpAQCAtMTkzNSw3ICsxOTU4LDcgQEAKIH0KIAogaW50Ci1QeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjaGFyICprZXkpCitQeU1hcHBpbmdfSGFzS2V5U3RyaW5nKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICprZXkpCiB7CiAgICAgUHlPYmplY3QgKnY7CiAKQEAgLTIwMzQsMTAgKzIwNTcsMTYgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXN1bHQgPSAoKmNhbGwpKGZ1bmMsIGFyZywga3cpOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMICYmICFQeUVycl9PY2N1cnJlZCgpKQorI2lmZGVmIE5ERUJVRworICAgICAgICBpZiAocmVzdWx0ID09IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAiTlVMTCByZXN1bHQgd2l0aG91dCBlcnJvciBpbiBQeU9iamVjdF9DYWxsIik7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGFzc2VydCgocmVzdWx0ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgfHwgKHJlc3VsdCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKKyNlbmRpZgogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiJyUuMjAwcycgb2JqZWN0IGlzIG5vdCBjYWxsYWJsZSIsCkBAIC0yMDcyLDcgKzIxMDEsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK1B5T2JqZWN0X0NhbGxGdW5jdGlvbihQeU9iamVjdCAqY2FsbGFibGUsIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogewogICAgIHZhX2xpc3QgdmE7CiAgICAgUHlPYmplY3QgKmFyZ3M7CkBAIC0yMDg3LDEyICsyMTE2LDE0IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgIGlmIChhcmdzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgcmV0dXJuIGNhbGxfZnVuY3Rpb25fdGFpbChjYWxsYWJsZSwgYXJncyk7CiB9CiAKIFB5T2JqZWN0ICoKLV9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjaGFyICpmb3JtYXQsIC4uLikKK19QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQoUHlPYmplY3QgKmNhbGxhYmxlLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjExMiw3ICsyMTQzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0KgotY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQorY2FsbG1ldGhvZChQeU9iamVjdCogZnVuYywgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhLCBpbnQgaXNfc2l6ZV90KQogewogICAgIFB5T2JqZWN0ICpyZXR2YWwgPSBOVUxMOwogICAgIFB5T2JqZWN0ICphcmdzOwpAQCAtMjE0MSw3ICsyMTcyLDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlPYmplY3RfQ2FsbE1ldGhvZChQeU9iamVjdCAqbywgY2hhciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitQeU9iamVjdF9DYWxsTWV0aG9kKFB5T2JqZWN0ICpvLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIxNTEsOSArMjE4Miw4IEBACiAgICAgICAgIHJldHVybiBudWxsX2Vycm9yKCk7CiAKICAgICBmdW5jID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvLCBuYW1lKTsKLSAgICBpZiAoZnVuYyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwogICAgIHJldHZhbCA9IGNhbGxtZXRob2QoZnVuYywgZm9ybWF0LCB2YSwgMCk7CkBAIC0yMTYyLDcgKzIxOTIsOCBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMTcyLDkgKzIyMDMsOCBAQAogICAgICAgICByZXR1cm4gbnVsbF9lcnJvcigpOwogCiAgICAgZnVuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQobywgbmFtZSk7Ci0gICAgaWYgKGZ1bmMgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKICAgICByZXR2YWwgPSBjYWxsbWV0aG9kKGZ1bmMsIGZvcm1hdCwgdmEsIDApOwpAQCAtMjE4Myw3ICsyMjEzLDggQEAKIH0KIAogUHlPYmplY3QgKgotX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQoUHlPYmplY3QgKm8sIGNoYXIgKm5hbWUsIGNoYXIgKmZvcm1hdCwgLi4uKQorX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQoUHlPYmplY3QgKm8sIGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKIHsKICAgICB2YV9saXN0IHZhOwogICAgIFB5T2JqZWN0ICpmdW5jID0gTlVMTDsKQEAgLTIxOTMsOSArMjIyNCw4IEBACiAgICAgICAgIHJldHVybiBudWxsX2Vycm9yKCk7CiAKICAgICBmdW5jID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhvLCBuYW1lKTsKLSAgICBpZiAoZnVuYyA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAoZnVuYyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKICAgICByZXR2YWwgPSBjYWxsbWV0aG9kKGZ1bmMsIGZvcm1hdCwgdmEsIDEpOwogICAgIHZhX2VuZCh2YSk7CkBAIC0yMjAzLDcgKzIyMzMsOCBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwgY2hhciAqZm9ybWF0LCAuLi4pCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkX1NpemVUKFB5T2JqZWN0ICpvLCBfUHlfSWRlbnRpZmllciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCiB7CiAgICAgdmFfbGlzdCB2YTsKICAgICBQeU9iamVjdCAqZnVuYyA9IE5VTEw7CkBAIC0yMjczLDcgKzIzMDQsNyBAQAogfQogCiBQeU9iamVjdCAqCi1fUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCitfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhQeU9iamVjdCAqY2FsbGFibGUsCiAgICAgICAgIHN0cnVjdCBfUHlfSWRlbnRpZmllciAqbmFtZSwgLi4uKQogewogICAgIFB5T2JqZWN0ICphcmdzLCAqdG1wOwpAQCAtMjY0OCw4ICsyNjc5LDggQEAKICAqIE5VTEwgdGVybWluYXRlZCBzdHJpbmcgcG9pbnRlcnMgd2l0aCBhIE5VTEwgY2hhciogdGVybWluYXRpbmcgdGhlIGFycmF5LgogICogKGllOiBhbiBhcmd2IG9yIGVudiBsaXN0KQogICoKLSAqIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSByZXR1cm5lZCBsaXN0IGlzIGFsbG9jYXRlZCB1c2luZyBtYWxsb2MoKSBhbmQgTVVTVAotICogYmUgZnJlZWQgYnkgdGhlIGNhbGxlciB1c2luZyBhIGZyZWUoKSBsb29wIG9yIF9QeV9GcmVlQ2hhclBBcnJheSgpLgorICogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlIHJldHVybmVkIGxpc3QgaXMgYWxsb2NhdGVkIHVzaW5nIFB5TWVtX01hbGxvYygpCisgKiBhbmQgTVVTVCBiZSBmcmVlZCBieSBfUHlfRnJlZUNoYXJQQXJyYXkoKS4KICAqLwogY2hhciAqY29uc3QgKgogX1B5U2VxdWVuY2VfQnl0ZXNUb0NoYXJwQXJyYXkoUHlPYmplY3QqIHNlbGYpCkBAIC0yNjU3LDYgKzI2ODgsNyBAQAogICAgIGNoYXIgKiphcnJheTsKICAgICBQeV9zc2l6ZV90IGksIGFyZ2M7CiAgICAgUHlPYmplY3QgKml0ZW0gPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIGFyZ2MgPSBQeVNlcXVlbmNlX1NpemUoc2VsZik7CiAgICAgaWYgKGFyZ2MgPT0gLTEpCkBAIC0yNjY5LDcgKzI3MDEsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBhcnJheSA9IG1hbGxvYygoYXJnYyArIDEpICogc2l6ZW9mKGNoYXIgKikpOworICAgIGFycmF5ID0gUHlNZW1fTWFsbG9jKChhcmdjICsgMSkgKiBzaXplb2YoY2hhciAqKSk7CiAgICAgaWYgKGFycmF5ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yNjg4LDExICsyNzIwLDEzIEBACiAgICAgICAgICAgICBhcnJheVtpXSA9IE5VTEw7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KLSAgICAgICAgYXJyYXlbaV0gPSBzdHJkdXAoZGF0YSk7CisgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGl0ZW0pICsgMTsKKyAgICAgICAgYXJyYXlbaV0gPSBQeU1lbV9NYWxsb2Moc2l6ZSk7CiAgICAgICAgIGlmICghYXJyYXlbaV0pIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGFycmF5W2ldLCBkYXRhLCBzaXplKTsKICAgICAgICAgUHlfREVDUkVGKGl0ZW0pOwogICAgIH0KICAgICBhcnJheVthcmdjXSA9IE5VTEw7CkBAIC0yNzEyLDcgKzI3NDYsNyBAQAogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBmb3IgKGkgPSAwOyBhcnJheVtpXSAhPSBOVUxMOyArK2kpIHsKLSAgICAgICAgZnJlZShhcnJheVtpXSk7CisgICAgICAgIFB5TWVtX0ZyZWUoYXJyYXlbaV0pOwogICAgIH0KLSAgICBmcmVlKCh2b2lkKilhcnJheSk7CisgICAgUHlNZW1fRnJlZSgodm9pZCopYXJyYXkpOwogfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYyBiL09iamVjdHMvYnl0ZWFycmF5b2JqZWN0LmMKaW5kZXggNTA2NjdhNi4uMTVjNTI1YyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlYXJyYXlvYmplY3QuYworKysgYi9PYmplY3RzL2J5dGVhcnJheW9iamVjdC5jCkBAIC03NCwyNCArNzQsNiBAQAogICAgIG9iai0+b2JfZXhwb3J0cy0tOwogfQogCi1zdGF0aWMgUHlfc3NpemVfdAotX2dldGJ1ZmZlcihQeU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcpCi17Ci0gICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVyID0gUHlfVFlQRShvYmopLT50cF9hc19idWZmZXI7Ci0KLSAgICBpZiAoYnVmZmVyID09IE5VTEwgfHwgYnVmZmVyLT5iZl9nZXRidWZmZXIgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZG9lc24ndCBzdXBwb3J0IHRoZSBidWZmZXIgQVBJIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoYnVmZmVyLT5iZl9nZXRidWZmZXIob2JqLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gdmlldy0+bGVuOwotfQotCiBzdGF0aWMgaW50CiBfY2FucmVzaXplKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmKQogewpAQCAtMTUwLDYgKzEzMiw3IEBACiAgICAgfQogICAgIFB5X1NJWkUobmV3KSA9IHNpemU7CiAgICAgbmV3LT5vYl9hbGxvYyA9IGFsbG9jOworICAgIG5ldy0+b2Jfc3RhcnQgPSBuZXctPm9iX2J5dGVzOwogICAgIG5ldy0+b2JfZXhwb3J0cyA9IDA7CiAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopbmV3OwpAQCAtMTc0LDUxICsxNTcsODAgQEAKIH0KIAogaW50Ci1QeUJ5dGVBcnJheV9SZXNpemUoUHlPYmplY3QgKnNlbGYsIFB5X3NzaXplX3Qgc2l6ZSkKK1B5Qnl0ZUFycmF5X1Jlc2l6ZShQeU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCByZXF1ZXN0ZWRfc2l6ZSkKIHsKICAgICB2b2lkICpzdmFsOwotICAgIFB5X3NzaXplX3QgYWxsb2MgPSAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2FsbG9jOworICAgIFB5Qnl0ZUFycmF5T2JqZWN0ICpvYmogPSAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZik7CisgICAgLyogQWxsIGNvbXB1dGF0aW9ucyBhcmUgZG9uZSB1bnNpZ25lZCB0byBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93cworICAgICAgIChzZWUgaXNzdWUgIzIyMzM1KS4gKi8KKyAgICBzaXplX3QgYWxsb2MgPSAoc2l6ZV90KSBvYmotPm9iX2FsbG9jOworICAgIHNpemVfdCBsb2dpY2FsX29mZnNldCA9IChzaXplX3QpIChvYmotPm9iX3N0YXJ0IC0gb2JqLT5vYl9ieXRlcyk7CisgICAgc2l6ZV90IHNpemUgPSAoc2l6ZV90KSByZXF1ZXN0ZWRfc2l6ZTsKIAogICAgIGFzc2VydChzZWxmICE9IE5VTEwpOwogICAgIGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayhzZWxmKSk7Ci0gICAgYXNzZXJ0KHNpemUgPj0gMCk7CisgICAgYXNzZXJ0KGxvZ2ljYWxfb2Zmc2V0IDw9IGFsbG9jKTsKKyAgICBhc3NlcnQocmVxdWVzdGVkX3NpemUgPj0gMCk7CiAKLSAgICBpZiAoc2l6ZSA9PSBQeV9TSVpFKHNlbGYpKSB7CisgICAgaWYgKHJlcXVlc3RlZF9zaXplID09IFB5X1NJWkUoc2VsZikpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICghX2NhbnJlc2l6ZSgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKSkgeworICAgIGlmICghX2NhbnJlc2l6ZShvYmopKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBpZiAoc2l6ZSA8IGFsbG9jIC8gMikgewotICAgICAgICAvKiBNYWpvciBkb3duc2l6ZTsgcmVzaXplIGRvd24gdG8gZXhhY3Qgc2l6ZSAqLwotICAgICAgICBhbGxvYyA9IHNpemUgKyAxOwotICAgIH0KLSAgICBlbHNlIGlmIChzaXplIDwgYWxsb2MpIHsKLSAgICAgICAgLyogV2l0aGluIGFsbG9jYXRlZCBzaXplOyBxdWljayBleGl0ICovCi0gICAgICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOwotICAgICAgICAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopc2VsZiktPm9iX2J5dGVzW3NpemVdID0gJ1wwJzsgLyogVHJhaWxpbmcgbnVsbCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgZWxzZSBpZiAoc2l6ZSA8PSBhbGxvYyAqIDEuMTI1KSB7Ci0gICAgICAgIC8qIE1vZGVyYXRlIHVwc2l6ZTsgb3ZlcmFsbG9jYXRlIHNpbWlsYXIgdG8gbGlzdF9yZXNpemUoKSAqLwotICAgICAgICBhbGxvYyA9IHNpemUgKyAoc2l6ZSA+PiAzKSArIChzaXplIDwgOSA/IDMgOiA2KTsKKyAgICBpZiAoc2l6ZSArIGxvZ2ljYWxfb2Zmc2V0ICsgMSA8PSBhbGxvYykgeworICAgICAgICAvKiBDdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggdG8gaG9zdCB0aGUgcmVxdWVzdGVkIHNpemUsCisgICAgICAgICAgIGRlY2lkZSBvbiBhIHN0cmF0ZWd5LiAqLworICAgICAgICBpZiAoc2l6ZSA8IGFsbG9jIC8gMikgeworICAgICAgICAgICAgLyogTWFqb3IgZG93bnNpemU7IHJlc2l6ZSBkb3duIHRvIGV4YWN0IHNpemUgKi8KKyAgICAgICAgICAgIGFsbG9jID0gc2l6ZSArIDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNaW5vciBkb3duc2l6ZTsgcXVpY2sgZXhpdCAqLworICAgICAgICAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7CisgICAgICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsICovCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgLyogTWFqb3IgdXBzaXplOyByZXNpemUgdXAgdG8gZXhhY3Qgc2l6ZSAqLwotICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICAvKiBOZWVkIGdyb3dpbmcsIGRlY2lkZSBvbiBhIHN0cmF0ZWd5ICovCisgICAgICAgIGlmIChzaXplIDw9IGFsbG9jICogMS4xMjUpIHsKKyAgICAgICAgICAgIC8qIE1vZGVyYXRlIHVwc2l6ZTsgb3ZlcmFsbG9jYXRlIHNpbWlsYXIgdG8gbGlzdF9yZXNpemUoKSAqLworICAgICAgICAgICAgYWxsb2MgPSBzaXplICsgKHNpemUgPj4gMykgKyAoc2l6ZSA8IDkgPyAzIDogNik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvKiBNYWpvciB1cHNpemU7IHJlc2l6ZSB1cCB0byBleGFjdCBzaXplICovCisgICAgICAgICAgICBhbGxvYyA9IHNpemUgKyAxOworICAgICAgICB9CiAgICAgfQotCi0gICAgc3ZhbCA9IFB5T2JqZWN0X1JlYWxsb2MoKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlcywgYWxsb2MpOwotICAgIGlmIChzdmFsID09IE5VTEwpIHsKKyAgICBpZiAoYWxsb2MgPiBQWV9TU0laRV9UX01BWCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9ieXRlcyA9IHN2YWw7CisgICAgaWYgKGxvZ2ljYWxfb2Zmc2V0ID4gMCkgeworICAgICAgICBzdmFsID0gUHlPYmplY3RfTWFsbG9jKGFsbG9jKTsKKyAgICAgICAgaWYgKHN2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoc3ZhbCwgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLAorICAgICAgICAgICAgICAgUHlfTUlOKHJlcXVlc3RlZF9zaXplLCBQeV9TSVpFKHNlbGYpKSk7CisgICAgICAgIFB5T2JqZWN0X0ZyZWUob2JqLT5vYl9ieXRlcyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdmFsID0gUHlPYmplY3RfUmVhbGxvYyhvYmotPm9iX2J5dGVzLCBhbGxvYyk7CisgICAgICAgIGlmIChzdmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBvYmotPm9iX2J5dGVzID0gb2JqLT5vYl9zdGFydCA9IHN2YWw7CiAgICAgUHlfU0laRShzZWxmKSA9IHNpemU7Ci0gICAgKChQeUJ5dGVBcnJheU9iamVjdCAqKXNlbGYpLT5vYl9hbGxvYyA9IGFsbG9jOwotICAgICgoUHlCeXRlQXJyYXlPYmplY3QgKilzZWxmKS0+b2JfYnl0ZXNbc2l6ZV0gPSAnXDAnOyAvKiBUcmFpbGluZyBudWxsIGJ5dGUgKi8KKyAgICBvYmotPm9iX2FsbG9jID0gYWxsb2M7CisgICAgb2JqLT5vYl9ieXRlc1tzaXplXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0yMzIsOCArMjQ0LDggQEAKIAogICAgIHZhLmxlbiA9IC0xOwogICAgIHZiLmxlbiA9IC0xOwotICAgIGlmIChfZ2V0YnVmZmVyKGEsICZ2YSkgPCAwICB8fAotICAgICAgICBfZ2V0YnVmZmVyKGIsICZ2YikgPCAwKSB7CisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhLCAmdmEsIFB5QlVGX1NJTVBMRSkgIT0gMCB8fAorICAgICAgICBQeU9iamVjdF9HZXRCdWZmZXIoYiwgJnZiLCBQeUJVRl9TSU1QTEUpICE9IDApIHsKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJjYW4ndCBjb25jYXQgJS4xMDBzIHRvICUuMTAwcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShhKS0+dHBfbmFtZSwgUHlfVFlQRShiKS0+dHBfbmFtZSk7CiAgICAgICAgICAgICBnb3RvIGRvbmU7CkBAIC0yNzQsNyArMjg2LDcgQEAKICAgICBQeV9zc2l6ZV90IHNpemU7CiAgICAgUHlfYnVmZmVyIHZvOwogCi0gICAgaWYgKF9nZXRidWZmZXIob3RoZXIsICZ2bykgPCAwKSB7CisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihvdGhlciwgJnZvLCBQeUJVRl9TSU1QTEUpICE9IDApIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImNhbid0IGNvbmNhdCAlLjEwMHMgdG8gJS4xMDBzIiwKICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob3RoZXIpLT50cF9uYW1lLCBQeV9UWVBFKHNlbGYpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yODYsMTUgKzI5OCwxMSBAQAogICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2byk7CiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KLSAgICBpZiAoc2l6ZSA8IHNlbGYtPm9iX2FsbG9jKSB7Ci0gICAgICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOwotICAgICAgICBzZWxmLT5vYl9ieXRlc1tQeV9TSVpFKHNlbGYpXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLwotICAgIH0KLSAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKSB7CisgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBzaXplKSA8IDApIHsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdm8pOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgbXlzaXplLCB2by5idWYsIHZvLmxlbik7CisgICAgbWVtY3B5KFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSArIG15c2l6ZSwgdm8uYnVmLCB2by5sZW4pOwogICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZvKTsKICAgICBQeV9JTkNSRUYoc2VsZik7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKXNlbGY7CkBAIC0zMzEsNiArMzM5LDcgQEAKIHsKICAgICBQeV9zc2l6ZV90IG15c2l6ZTsKICAgICBQeV9zc2l6ZV90IHNpemU7CisgICAgY2hhciAqYnVmOwogCiAgICAgaWYgKGNvdW50IDwgMCkKICAgICAgICAgY291bnQgPSAwOwpAQCAtMzM4LDE5ICszNDcsMTYgQEAKICAgICBpZiAoY291bnQgPiAwICYmIG15c2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC8gY291bnQpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIHNpemUgPSBteXNpemUgKiBjb3VudDsKLSAgICBpZiAoc2l6ZSA8IHNlbGYtPm9iX2FsbG9jKSB7Ci0gICAgICAgIFB5X1NJWkUoc2VsZikgPSBzaXplOwotICAgICAgICBzZWxmLT5vYl9ieXRlc1tQeV9TSVpFKHNlbGYpXSA9ICdcMCc7IC8qIFRyYWlsaW5nIG51bGwgYnl0ZSAqLwotICAgIH0KLSAgICBlbHNlIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKQorICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgc2l6ZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBpZiAobXlzaXplID09IDEpCi0gICAgICAgIG1lbXNldChzZWxmLT5vYl9ieXRlcywgc2VsZi0+b2JfYnl0ZXNbMF0sIHNpemUpOworICAgICAgICBtZW1zZXQoYnVmLCBidWZbMF0sIHNpemUpOwogICAgIGVsc2UgewogICAgICAgICBQeV9zc2l6ZV90IGk7CiAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBjb3VudDsgaSsrKQotICAgICAgICAgICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgaSpteXNpemUsIHNlbGYtPm9iX2J5dGVzLCBteXNpemUpOworICAgICAgICAgICAgbWVtY3B5KGJ1ZiArIGkqbXlzaXplLCBidWYsIG15c2l6ZSk7CiAgICAgfQogCiAgICAgUHlfSU5DUkVGKHNlbGYpOwpAQCAtMzY2LDcgKzM3Miw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAiYnl0ZWFycmF5IGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygodW5zaWduZWQgY2hhcikoc2VsZi0+b2JfYnl0ZXNbaV0pKTsKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh1bnNpZ25lZCBjaGFyKShQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbaV0pKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTM4NSw3ICszOTEsNyBAQAogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0luZGV4RXJyb3IsICJieXRlYXJyYXkgaW5kZXggb3V0IG9mIHJhbmdlIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh1bnNpZ25lZCBjaGFyKShzZWxmLT5vYl9ieXRlc1tpXSkpOworICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKCh1bnNpZ25lZCBjaGFyKShQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbaV0pKTsKICAgICB9CiAgICAgZWxzZSBpZiAoUHlTbGljZV9DaGVjayhpbmRleCkpIHsKICAgICAgICAgUHlfc3NpemVfdCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW5ndGgsIGN1ciwgaTsKQEAgLTM5OCw4ICs0MDQsOCBAQAogICAgICAgICBpZiAoc2xpY2VsZW5ndGggPD0gMCkKICAgICAgICAgICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZSgiIiwgMCk7CiAgICAgICAgIGVsc2UgaWYgKHN0ZXAgPT0gMSkgewotICAgICAgICAgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzICsgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbGljZWxlbmd0aCk7CisgICAgICAgICAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoCisgICAgICAgICAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpICsgc3RhcnQsIHNsaWNlbGVuZ3RoKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGNoYXIgKnNvdXJjZV9idWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CkBAIC00MjUsMTAgKzQzMSw5NCBAQAogfQogCiBzdGF0aWMgaW50CitieXRlYXJyYXlfc2V0c2xpY2VfbGluZWFyKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxvLCBQeV9zc2l6ZV90IGhpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpieXRlcywgUHlfc3NpemVfdCBieXRlc19sZW4pCit7CisgICAgUHlfc3NpemVfdCBhdmFpbCA9IGhpIC0gbG87CisgICAgY2hhciAqYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOworICAgIFB5X3NzaXplX3QgZ3Jvd3RoID0gYnl0ZXNfbGVuIC0gYXZhaWw7CisgICAgaW50IHJlcyA9IDA7CisgICAgYXNzZXJ0KGF2YWlsID49IDApOworCisgICAgaWYgKGdyb3d0aCA8IDApIHsKKyAgICAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIGlmIChsbyA9PSAwKSB7CisgICAgICAgICAgICAvKiBTaHJpbmsgdGhlIGJ1ZmZlciBieSBhZHZhbmNpbmcgaXRzIGxvZ2ljYWwgc3RhcnQgKi8KKyAgICAgICAgICAgIHNlbGYtPm9iX3N0YXJ0IC09IGdyb3d0aDsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgICAgIGhpICAgICAgICAgICAgIG9sZF9zaXplCisgICAgICAgICAgICAgIHwgICB8PC0tLS1hdmFpbC0tLS0tPnw8LS0tLS10YWlsLS0tLS0tPnwKKyAgICAgICAgICAgICAgfCAgICAgIHw8LWJ5dGVzX2xlbi0+fDwtLS0tLXRhaWwtLS0tLS0+fAorICAgICAgICAgICAgICAwICAgIG5ld19sbyAgICAgICAgIG5ld19oaSAgICAgICAgICBuZXdfc2l6ZQorICAgICAgICAgICAgKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgIDAgICBsbyAgICAgICAgICAgICAgIGhpICAgICAgICAgICAgICAgb2xkX3NpemUKKyAgICAgICAgICAgICAgfCAgIHw8LS0tLWF2YWlsLS0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58CisgICAgICAgICAgICAgIHwgICB8PC1ieXRlc19sZW4tPnw8LS0tLS10b21vdmUtLS0tLS0+fAorICAgICAgICAgICAgICAwICAgbG8gICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCisgICAgICAgICAgICAqLworICAgICAgICAgICAgbWVtbW92ZShidWYgKyBsbyArIGJ5dGVzX2xlbiwgYnVmICsgaGksCisgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBoaSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgKyBncm93dGgpIDwgMCkgeworICAgICAgICAgICAgLyogSXNzdWUgIzE5NTc4OiBIYW5kbGluZyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSBoZXJlIGlzCisgICAgICAgICAgICAgICB0cmlja3kgaGVyZSBiZWNhdXNlIHRoZSBieXRlYXJyYXkgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4KKyAgICAgICAgICAgICAgIG1vZGlmaWVkLiBEZXBlbmRpbmcgb24gZ3Jvd3RoIGFuZCBsbywgdGhlIGJlaGF2aW91ciBpcworICAgICAgICAgICAgICAgZGlmZmVyZW50LgorCisgICAgICAgICAgICAgICBJZiBncm93dGggPCAwIGFuZCBsbyAhPSAwLCB0aGUgb3BlcmF0aW9uIGlzIGNvbXBsZXRlZCwgYnV0IGEKKyAgICAgICAgICAgICAgIE1lbW9yeUVycm9yIGlzIHN0aWxsIHJhaXNlZCBhbmQgdGhlIG1lbW9yeSBibG9jayBpcyBub3QKKyAgICAgICAgICAgICAgIHNocmlua2VkLiBPdGhlcndpc2UsIHRoZSBieXRlYXJyYXkgaXMgcmVzdG9yZWQgaW4gaXRzIHByZXZpb3VzCisgICAgICAgICAgICAgICBzdGF0ZSBhbmQgYSBNZW1vcnlFcnJvciBpcyByYWlzZWQuICovCisgICAgICAgICAgICBpZiAobG8gPT0gMCkgeworICAgICAgICAgICAgICAgIHNlbGYtPm9iX3N0YXJ0ICs9IGdyb3d0aDsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAvKiBtZW1tb3ZlKCkgcmVtb3ZlZCBieXRlcywgdGhlIGJ5dGVhcnJheSBvYmplY3QgY2Fubm90IGJlCisgICAgICAgICAgICAgICByZXN0b3JlZCBpbiBpdHMgcHJldmlvdXMgc3RhdGUuICovCisgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICs9IGdyb3d0aDsKKyAgICAgICAgICAgIHJlcyA9IC0xOworICAgICAgICB9CisgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICB9CisgICAgZWxzZSBpZiAoZ3Jvd3RoID4gMCkgeworICAgICAgICBpZiAoUHlfU0laRShzZWxmKSA+IChQeV9zc2l6ZV90KVBZX1NTSVpFX1RfTUFYIC0gZ3Jvd3RoKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgKyBncm93dGgpIDwgMCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKKyAgICAgICAgLyogTWFrZSB0aGUgcGxhY2UgZm9yIHRoZSBhZGRpdGlvbmFsIGJ5dGVzICovCisgICAgICAgIC8qCisgICAgICAgICAgMCAgIGxvICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCisgICAgICAgICAgfCAgIHw8LWF2YWlsLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKKyAgICAgICAgICB8ICAgfDwtLS1ieXRlc19sZW4tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKKyAgICAgICAgICAwICAgbG8gICAgICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCisgICAgICAgICAqLworICAgICAgICBtZW1tb3ZlKGJ1ZiArIGxvICsgYnl0ZXNfbGVuLCBidWYgKyBoaSwKKyAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gbG8gLSBieXRlc19sZW4pOworICAgIH0KKworICAgIGlmIChieXRlc19sZW4gPiAwKQorICAgICAgICBtZW1jcHkoYnVmICsgbG8sIGJ5dGVzLCBieXRlc19sZW4pOworICAgIHJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQKIGJ5dGVhcnJheV9zZXRzbGljZShQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBsbywgUHlfc3NpemVfdCBoaSwKICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZXMpCiB7Ci0gICAgUHlfc3NpemVfdCBhdmFpbCwgbmVlZGVkOworICAgIFB5X3NzaXplX3QgbmVlZGVkOwogICAgIHZvaWQgKmJ5dGVzOwogICAgIFB5X2J1ZmZlciB2Ynl0ZXM7CiAgICAgaW50IHJlcyA9IDA7CkBAIC00NTAsMTQgKzU0MCwxNCBAQAogICAgICAgICBuZWVkZWQgPSAwOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChfZ2V0YnVmZmVyKHZhbHVlcywgJnZieXRlcykgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3Qgc2V0IGJ5dGVhcnJheSBzbGljZSBmcm9tICUuMTAwcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHZhbHVlcyktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBuZWVkZWQgPSB2Ynl0ZXMubGVuOwotICAgICAgICAgICAgYnl0ZXMgPSB2Ynl0ZXMuYnVmOworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHZhbHVlcywgJnZieXRlcywgUHlCVUZfU0lNUExFKSAhPSAwKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBzZXQgYnl0ZWFycmF5IHNsaWNlIGZyb20gJS4xMDBzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHZhbHVlcyktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG5lZWRlZCA9IHZieXRlcy5sZW47CisgICAgICAgIGJ5dGVzID0gdmJ5dGVzLmJ1ZjsKICAgICB9CiAKICAgICBpZiAobG8gPCAwKQpAQCAtNDY3LDUwICs1NTcsOSBAQAogICAgIGlmIChoaSA+IFB5X1NJWkUoc2VsZikpCiAgICAgICAgIGhpID0gUHlfU0laRShzZWxmKTsKIAotICAgIGF2YWlsID0gaGkgLSBsbzsKLSAgICBpZiAoYXZhaWwgPCAwKQotICAgICAgICBsbyA9IGhpID0gYXZhaWwgPSAwOwotCi0gICAgaWYgKGF2YWlsICE9IG5lZWRlZCkgewotICAgICAgICBpZiAoYXZhaWwgPiBuZWVkZWQpIHsKLSAgICAgICAgICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkgewotICAgICAgICAgICAgICAgIHJlcyA9IC0xOwotICAgICAgICAgICAgICAgIGdvdG8gZmluaXNoOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICB8ICAgfDwtLS0tYXZhaWwtLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgfCAgIHw8LW5lZWRlZC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgIDAgICBsbyAgICAgIG5ld19oaSAgICAgICAgICAgICAgbmV3X3NpemUKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgbG8gKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgaGksCi0gICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBoaSk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogbmVlZCB0byB2ZXJpZnkgdGhpcyBjYW4ndCBvdmVyZmxvdyEgKi8KLSAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfU0laRShzZWxmKSArIG5lZWRlZCAtIGF2YWlsKSA8IDApIHsKLSAgICAgICAgICAgICAgICByZXMgPSAtMTsKLSAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaDsKLSAgICAgICAgfQotICAgICAgICBpZiAoYXZhaWwgPCBuZWVkZWQpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgIDAgICBsbyAgICAgICAgaGkgICAgICAgICAgICAgICBvbGRfc2l6ZQotICAgICAgICAgICAgICB8ICAgfDwtYXZhaWwtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICB8ICAgfDwtLS0tbmVlZGVkLS0tLT58PC0tLS0tdG9tb3ZlLS0tLS0tPnwKLSAgICAgICAgICAgICAgMCAgIGxvICAgICAgICAgICAgbmV3X2hpICAgICAgICAgICAgICBuZXdfc2l6ZQotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgbG8gKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgaGksCi0gICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBsbyAtIG5lZWRlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAobmVlZGVkID4gMCkKLSAgICAgICAgbWVtY3B5KHNlbGYtPm9iX2J5dGVzICsgbG8sIGJ5dGVzLCBuZWVkZWQpOwotCi0KLSBmaW5pc2g6CisgICAgcmVzID0gYnl0ZWFycmF5X3NldHNsaWNlX2xpbmVhcihzZWxmLCBsbywgaGksIGJ5dGVzLCBuZWVkZWQpOwogICAgIGlmICh2Ynl0ZXMubGVuICE9IC0xKQotICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmJ5dGVzKTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmJ5dGVzKTsKICAgICByZXR1cm4gcmVzOwogfQogCkBAIC01MzMsNyArNTgyLDcgQEAKICAgICBpZiAoIV9nZXRieXRldmFsdWUodmFsdWUsICZpdmFsKSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgc2VsZi0+b2JfYnl0ZXNbaV0gPSBpdmFsOworICAgIFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKVtpXSA9IGl2YWw7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTU0MSw3ICs1OTAsOCBAQAogYnl0ZWFycmF5X2Fzc19zdWJzY3JpcHQoUHlCeXRlQXJyYXlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICppbmRleCwgUHlPYmplY3QgKnZhbHVlcykKIHsKICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBzdG9wLCBzdGVwLCBzbGljZWxlbiwgbmVlZGVkOwotICAgIGNoYXIgKmJ5dGVzOworICAgIGNoYXIgKmJ1ZiwgKmJ5dGVzOworICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKIAogICAgIGlmIChQeUluZGV4X0NoZWNrKGluZGV4KSkgewogICAgICAgICBQeV9zc2l6ZV90IGkgPSBQeU51bWJlcl9Bc1NzaXplX3QoaW5kZXgsIFB5RXhjX0luZGV4RXJyb3IpOwpAQCAtNTY4LDcgKzYxOCw3IEBACiAgICAgICAgICAgICBpbnQgaXZhbDsKICAgICAgICAgICAgIGlmICghX2dldGJ5dGV2YWx1ZSh2YWx1ZXMsICZpdmFsKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBzZWxmLT5vYl9ieXRlc1tpXSA9IChjaGFyKWl2YWw7CisgICAgICAgICAgICBidWZbaV0gPSAoY2hhcilpdmFsOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC02MDYsNyArNjU2LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGFzc2VydChQeUJ5dGVBcnJheV9DaGVjayh2YWx1ZXMpKTsKLSAgICAgICAgYnl0ZXMgPSAoKFB5Qnl0ZUFycmF5T2JqZWN0ICopdmFsdWVzKS0+b2JfYnl0ZXM7CisgICAgICAgIGJ5dGVzID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHZhbHVlcyk7CiAgICAgICAgIG5lZWRlZCA9IFB5X1NJWkUodmFsdWVzKTsKICAgICB9CiAgICAgLyogTWFrZSBzdXJlIGJbNToyXSA9IC4uLiBpbnNlcnRzIGJlZm9yZSA1LCBub3QgYmVmb3JlIDIuICovCkBAIC02MTQsMzggKzY2NCw3IEBACiAgICAgICAgIChzdGVwID4gMCAmJiBzdGFydCA+IHN0b3ApKQogICAgICAgICBzdG9wID0gc3RhcnQ7CiAgICAgaWYgKHN0ZXAgPT0gMSkgewotICAgICAgICBpZiAoc2xpY2VsZW4gIT0gbmVlZGVkKSB7Ci0gICAgICAgICAgICBpZiAoIV9jYW5yZXNpemUoc2VsZikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgaWYgKHNsaWNlbGVuID4gbmVlZGVkKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgIDAgICBzdGFydCAgICAgICAgICAgc3RvcCAgICAgICAgICAgICAgb2xkX3NpemUKLSAgICAgICAgICAgICAgICAgIHwgICB8PC0tLXNsaWNlbGVuLS0tPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgIHw8LW5lZWRlZC0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgc3RhcnQgKyBuZWVkZWQsIHNlbGYtPm9iX2J5dGVzICsgc3RvcCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X1NJWkUoc2VsZikgLSBzdG9wKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpICsgbmVlZGVkIC0gc2xpY2VsZW4pIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoc2xpY2VsZW4gPCBuZWVkZWQpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgMCAgIGxvICAgICAgICBoaSAgICAgICAgICAgICAgIG9sZF9zaXplCi0gICAgICAgICAgICAgICAgICB8ICAgfDwtYXZhaWwtPnw8LS0tLS10b21vdmUtLS0tLS0+fAotICAgICAgICAgICAgICAgICAgfCAgIHw8LS0tLW5lZWRlZC0tLS0+fDwtLS0tLXRvbW92ZS0tLS0tLT58Ci0gICAgICAgICAgICAgICAgICAwICAgbG8gICAgICAgICAgICBuZXdfaGkgICAgICAgICAgICAgIG5ld19zaXplCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgbWVtbW92ZShzZWxmLT5vYl9ieXRlcyArIHN0YXJ0ICsgbmVlZGVkLCBzZWxmLT5vYl9ieXRlcyArIHN0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC0gc3RhcnQgLSBuZWVkZWQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5lZWRlZCA+IDApCi0gICAgICAgICAgICBtZW1jcHkoc2VsZi0+b2JfYnl0ZXMgKyBzdGFydCwgYnl0ZXMsIG5lZWRlZCk7Ci0KLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBieXRlYXJyYXlfc2V0c2xpY2VfbGluZWFyKHNlbGYsIHN0YXJ0LCBzdG9wLCBieXRlcywgbmVlZGVkKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChuZWVkZWQgPT0gMCkgewpAQCAtNjcyLDE0ICs2OTEsMTQgQEAKICAgICAgICAgICAgICAgICBpZiAoY3VyICsgc3RlcCA+PSAoc2l6ZV90KVB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlbGYpKQogICAgICAgICAgICAgICAgICAgICBsaW0gPSBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAtIGN1ciAtIDE7CiAKLSAgICAgICAgICAgICAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgY3VyIC0gaSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzICsgY3VyICsgMSwgbGltKTsKKyAgICAgICAgICAgICAgICBtZW1tb3ZlKGJ1ZiArIGN1ciAtIGksCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBjdXIgKyAxLCBsaW0pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogTW92ZSB0aGUgdGFpbCBvZiB0aGUgYnl0ZXMsIGluIG9uZSBjaHVuayAqLwogICAgICAgICAgICAgY3VyID0gc3RhcnQgKyAoc2l6ZV90KXNsaWNlbGVuKnN0ZXA7CiAgICAgICAgICAgICBpZiAoY3VyIDwgKHNpemVfdClQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSkgewotICAgICAgICAgICAgICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyBjdXIgLSBzbGljZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzICsgY3VyLAorICAgICAgICAgICAgICAgIG1lbW1vdmUoYnVmICsgY3VyIC0gc2xpY2VsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBidWYgKyBjdXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVBcnJheV9HRVRfU0laRShzZWxmKSAtIGN1cik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsCkBAIC03MDEsNyArNzIwLDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBmb3IgKGN1ciA9IHN0YXJ0LCBpID0gMDsgaSA8IHNsaWNlbGVuOyBjdXIgKz0gc3RlcCwgaSsrKQotICAgICAgICAgICAgICAgIHNlbGYtPm9iX2J5dGVzW2N1cl0gPSBieXRlc1tpXTsKKyAgICAgICAgICAgICAgICBidWZbY3VyXSA9IGJ5dGVzW2ldOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CkBAIC03ODEsNyArODAwLDcgQEAKICAgICAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBjb3VudCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgbWVtc2V0KHNlbGYtPm9iX2J5dGVzLCAwLCBjb3VudCk7CisgICAgICAgICAgICBtZW1zZXQoUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpLCAwLCBjb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtNzk0LDcgKzgxMyw4IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIHNpemUgPSB2aWV3LmxlbjsKICAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBzaXplKSA8IDApIGdvdG8gZmFpbDsKLSAgICAgICAgaWYgKFB5QnVmZmVyX1RvQ29udGlndW91cyhzZWxmLT5vYl9ieXRlcywgJnZpZXcsIHNpemUsICdDJykgPCAwKQorICAgICAgICBpZiAoUHlCdWZmZXJfVG9Db250aWd1b3VzKFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKSwKKyAgICAgICAgICAgICZ2aWV3LCBzaXplLCAnQycpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtODM0LDExICs4NTQsMTMgQEAKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICAgICAgLyogQXBwZW5kIHRoZSBieXRlICovCi0gICAgICAgIGlmIChQeV9TSVpFKHNlbGYpIDwgc2VsZi0+b2JfYWxsb2MpCisgICAgICAgIGlmIChQeV9TSVpFKHNlbGYpICsgMSA8IHNlbGYtPm9iX2FsbG9jKSB7CiAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpKys7CisgICAgICAgICAgICBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZilbUHlfU0laRShzZWxmKV0gPSAnXDAnOworICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBQeV9TSVpFKHNlbGYpKzEpIDwgMCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIHNlbGYtPm9iX2J5dGVzW1B5X1NJWkUoc2VsZiktMV0gPSB2YWx1ZTsKKyAgICAgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW1B5X1NJWkUoc2VsZiktMV0gPSB2YWx1ZTsKICAgICB9CiAKICAgICAvKiBDbGVhbiB1cCBhbmQgcmV0dXJuIHN1Y2Nlc3MgKi8KQEAgLTg2Miw5ICs4ODQsMTAgQEAKICAgICAvKiAxNSA9PSBzdHJsZW4ocXVvdGVfcHJlZml4KSArIDIgKyBzdHJsZW4ocXVvdGVfcG9zdGZpeCkgKyAxICovCiAgICAgc2l6ZV90IG5ld3NpemU7CiAgICAgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIGNoYXIgYzsKLSAgICByZWdpc3RlciBjaGFyICpwOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBjaGFyICpieXRlczsKKyAgICBjaGFyIGM7CisgICAgY2hhciAqcDsKICAgICBpbnQgcXVvdGU7CiAgICAgY2hhciAqdGVzdCwgKnN0YXJ0OwogICAgIGNoYXIgKmJ1ZmZlcjsKQEAgLTg5OSwxMSArOTIyLDEyIEBACiAgICAgICAgICpwKysgPSAqcXVvdGVfcHJlZml4Kys7CiAgICAgKnArKyA9IHF1b3RlOwogCisgICAgYnl0ZXMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIC8qIFRoZXJlJ3MgYXQgbGVhc3QgZW5vdWdoIHJvb20gZm9yIGEgaGV4IGVzY2FwZQogICAgICAgICAgICBhbmQgYSBjbG9zaW5nIHF1b3RlLiAqLwogICAgICAgICBhc3NlcnQobmV3c2l6ZSAtIChwIC0gYnVmZmVyKSA+PSA1KTsKLSAgICAgICAgYyA9IHNlbGYtPm9iX2J5dGVzW2ldOworICAgICAgICBjID0gYnl0ZXNbaV07CiAgICAgICAgIGlmIChjID09ICdcJycgfHwgYyA9PSAnXFwnKQogICAgICAgICAgICAgKnArKyA9ICdcXCcsICpwKysgPSBjOwogICAgICAgICBlbHNlIGlmIChjID09ICdcdCcpCkBAIC05NTIsMTMgKzk3NiwxNyBAQAogICAgIFB5X2J1ZmZlciBzZWxmX2J5dGVzLCBvdGhlcl9ieXRlczsKICAgICBQeU9iamVjdCAqcmVzOwogICAgIFB5X3NzaXplX3QgbWluc2l6ZTsKLSAgICBpbnQgY21wOworICAgIGludCBjbXAsIHJjOwogCiAgICAgLyogQnl0ZXMgY2FuIGJlIGNvbXBhcmVkIHRvIGFueXRoaW5nIHRoYXQgc3VwcG9ydHMgdGhlIChiaW5hcnkpCiAgICAgICAgYnVmZmVyIEFQSS4gIEV4Y2VwdCB0aGF0IGEgY29tcGFyaXNvbiB3aXRoIFVuaWNvZGUgaXMgYWx3YXlzIGFuCiAgICAgICAgZXJyb3IsIGV2ZW4gaWYgdGhlIGNvbXBhcmlzb24gaXMgZm9yIGVxdWFsaXR5LiAqLwotICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKHNlbGYsIChQeU9iamVjdCopJlB5VW5pY29kZV9UeXBlKSB8fAotICAgICAgICBQeU9iamVjdF9Jc0luc3RhbmNlKG90aGVyLCAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkpIHsKKyAgICByYyA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uoc2VsZiwgKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpOworICAgIGlmICghcmMpCisgICAgICAgIHJjID0gUHlPYmplY3RfSXNJbnN0YW5jZShvdGhlciwgKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpOworICAgIGlmIChyYyA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChyYykgewogICAgICAgICBpZiAoUHlfQnl0ZXNXYXJuaW5nRmxhZyAmJiAob3AgPT0gUHlfRVEgfHwgb3AgPT0gUHlfTkUpKSB7CiAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0J5dGVzV2FybmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaXNvbiBiZXR3ZWVuIGJ5dGVhcnJheSBhbmQgc3RyaW5nIiwgMSkpCkBAIC05NjgsMTggKzk5NiwxOCBAQAogICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CiAgICAgfQogCi0gICAgc2VsZl9zaXplID0gX2dldGJ1ZmZlcihzZWxmLCAmc2VsZl9ieXRlcyk7Ci0gICAgaWYgKHNlbGZfc2l6ZSA8IDApIHsKKyAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHNlbGYsICZzZWxmX2J5dGVzLCBQeUJVRl9TSU1QTEUpICE9IDApIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOwogICAgIH0KKyAgICBzZWxmX3NpemUgPSBzZWxmX2J5dGVzLmxlbjsKIAotICAgIG90aGVyX3NpemUgPSBfZ2V0YnVmZmVyKG90aGVyLCAmb3RoZXJfYnl0ZXMpOwotICAgIGlmIChvdGhlcl9zaXplIDwgMCkgeworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIob3RoZXIsICZvdGhlcl9ieXRlcywgUHlCVUZfU0lNUExFKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlbGZfYnl0ZXMpOwogICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CiAgICAgfQorICAgIG90aGVyX3NpemUgPSBvdGhlcl9ieXRlcy5sZW47CiAKICAgICBpZiAoc2VsZl9zaXplICE9IG90aGVyX3NpemUgJiYgKG9wID09IFB5X0VRIHx8IG9wID09IFB5X05FKSkgewogICAgICAgICAvKiBTaG9ydGN1dDogaWYgdGhlIGxlbmd0aHMgZGlmZmVyLCB0aGUgb2JqZWN0cyBkaWZmZXIgKi8KQEAgLTEwMzgsNiArMTA2Niw3IEBACiAjZGVmaW5lIEZBU1RTRUFSQ0ggZmFzdHNlYXJjaAogI2RlZmluZSBTVFJJTkdMSUIoRikgc3RyaW5nbGliXyMjRgogI2RlZmluZSBTVFJJTkdMSUJfQ0hBUiBjaGFyCisjZGVmaW5lIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiAxCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gUHlCeXRlQXJyYXlfR0VUX1NJWkUKICNkZWZpbmUgU1RSSU5HTElCX1NUUiBQeUJ5dGVBcnJheV9BU19TVFJJTkcKICNkZWZpbmUgU1RSSU5HTElCX05FVyBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZQpAQCAtMTA0OSw2ICsxMDc4LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvZmFzdHNlYXJjaC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL2pvaW4uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvcGFydGl0aW9uLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2N0eXBlLmgiCkBAIC0xMDg5LDcgKzExMTksNyBAQAogICAgICAgICByZXR1cm4gLTI7CiAKICAgICBpZiAoc3Vib2JqKSB7Ci0gICAgICAgIGlmIChfZ2V0YnVmZmVyKHN1Ym9iaiwgJnN1YmJ1ZikgPCAwKQorICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN1Ym9iaiwgJnN1YmJ1ZiwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIC0yOwogCiAgICAgICAgIHN1YiA9IHN1YmJ1Zi5idWY7CkBAIC0xMTU3LDcgKzExODcsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzdWJfb2JqKSB7Ci0gICAgICAgIGlmIChfZ2V0YnVmZmVyKHN1Yl9vYmosICZ2c3ViKSA8IDApCisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3ViX29iaiwgJnZzdWIsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgICAgIHN1YiA9IHZzdWIuYnVmOwpAQCAtMTI3Miw3ICsxMzAyLDcgQEAKICAgICAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgICAgIFB5X3NzaXplX3QgcG9zOwogICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBpZiAoX2dldGJ1ZmZlcihhcmcsICZ2YXJnKSA8IDApCisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYXJnLCAmdmFyZywgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBwb3MgPSBzdHJpbmdsaWJfZmluZChQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZiksIFB5X1NJWkUoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmcuYnVmLCB2YXJnLmxlbiwgMCk7CkBAIC0xMzAzLDcgKzEzMzMsNyBAQAogCiAgICAgc3RyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCi0gICAgaWYgKF9nZXRidWZmZXIoc3Vic3RyLCAmdnN1YnN0cikgPCAwKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3Vic3RyLCAmdnN1YnN0ciwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBsZW4pOwpAQCAtMTQyOSw5ICsxNDU5LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlYXJyYXlfdHJhbnNsYXRlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICByZWdpc3RlciBjaGFyICppbnB1dCwgKm91dHB1dDsKLSAgICByZWdpc3RlciBjb25zdCBjaGFyICp0YWJsZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGM7CisgICAgY2hhciAqaW5wdXQsICpvdXRwdXQ7CisgICAgY29uc3QgY2hhciAqdGFibGU7CisgICAgUHlfc3NpemVfdCBpLCBjOwogICAgIFB5T2JqZWN0ICppbnB1dF9vYmogPSAoUHlPYmplY3QqKXNlbGY7CiAgICAgY29uc3QgY2hhciAqb3V0cHV0X3N0YXJ0OwogICAgIFB5X3NzaXplX3QgaW5sZW47CkBAIC0xNDQ3LDcgKzE0NzcsNyBAQAogICAgIGlmICh0YWJsZW9iaiA9PSBQeV9Ob25lKSB7CiAgICAgICAgIHRhYmxlID0gTlVMTDsKICAgICAgICAgdGFibGVvYmogPSBOVUxMOwotICAgIH0gZWxzZSBpZiAoX2dldGJ1ZmZlcih0YWJsZW9iaiwgJnZ0YWJsZSkgPCAwKSB7CisgICAgfSBlbHNlIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodGFibGVvYmosICZ2dGFibGUsIFB5QlVGX1NJTVBMRSkgIT0gMCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAodnRhYmxlLmxlbiAhPSAyNTYpIHsKQEAgLTE0NjAsNyArMTQ5MCw3IEBACiAgICAgfQogCiAgICAgaWYgKGRlbG9iaiAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChfZ2V0YnVmZmVyKGRlbG9iaiwgJnZkZWwpIDwgMCkgeworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGRlbG9iaiwgJnZkZWwsIFB5QlVGX1NJTVBMRSkgIT0gMCkgewogICAgICAgICAgICAgaWYgKHRhYmxlb2JqICE9IE5VTEwpCiAgICAgICAgICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdnRhYmxlKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjAyNCwyNiArMjA1NCwyMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVhcnJheV9yZXBsYWNlKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIFB5X2J1ZmZlciBvbGQgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfYnVmZmVyIG5ldyA9IHtOVUxMLCBOVUxMfTsKICAgICBQeV9zc2l6ZV90IGNvdW50ID0gLTE7Ci0gICAgUHlPYmplY3QgKmZyb20sICp0bywgKnJlczsKLSAgICBQeV9idWZmZXIgdmZyb20sIHZ0bzsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT098bjpyZXBsYWNlIiwgJmZyb20sICZ0bywgJmNvdW50KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqeSp8bjpyZXBsYWNlIiwgJm9sZCwgJm5ldywgJmNvdW50KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoX2dldGJ1ZmZlcihmcm9tLCAmdmZyb20pIDwgMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKF9nZXRidWZmZXIodG8sICZ2dG8pIDwgMCkgewotICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2ZnJvbSk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIHJlcyA9IChQeU9iamVjdCAqKXJlcGxhY2UoKFB5Qnl0ZUFycmF5T2JqZWN0ICopIHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZnJvbS5idWYsIHZmcm9tLmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ0by5idWYsIHZ0by5sZW4sIGNvdW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopb2xkLmJ1Ziwgb2xkLmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBjaGFyICopbmV3LmJ1ZiwgbmV3LmxlbiwgY291bnQpOwogCi0gICAgUHlCdWZmZXJfUmVsZWFzZSgmdmZyb20pOwotICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZ0byk7CisgICAgUHlCdWZmZXJfUmVsZWFzZSgmb2xkKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZuZXcpOwogICAgIHJldHVybiByZXM7CiB9CiAKQEAgLTIwNzQsNyArMjA5OCw3IEBACiAgICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0X3doaXRlc3BhY2UoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBtYXhzcGxpdCk7CiAKLSAgICBpZiAoX2dldGJ1ZmZlcihzdWJvYmosICZ2c3ViKSA8IDApCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdWJvYmosICZ2c3ViLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN1YiA9IHZzdWIuYnVmOwogICAgIG4gPSB2c3ViLmxlbjsKQEAgLTIxNjksNyArMjE5Myw3IEBACiAgICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gc3RyaW5nbGliX3JzcGxpdF93aGl0ZXNwYWNlKChQeU9iamVjdCopIHNlbGYsIHMsIGxlbiwgbWF4c3BsaXQpOwogCi0gICAgaWYgKF9nZXRidWZmZXIoc3Vib2JqLCAmdnN1YikgPCAwKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3Vib2JqLCAmdnN1YiwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdWIgPSB2c3ViLmJ1ZjsKICAgICBuID0gdnN1Yi5sZW47CkBAIC0yMTkyLDcgKzIyMTYsNyBAQAogICAgIFB5X3NzaXplX3QgaSwgaiwgbiA9IFB5X1NJWkUoc2VsZik7CiAKICAgICBqID0gbiAvIDI7Ci0gICAgaGVhZCA9IHNlbGYtPm9iX2J5dGVzOworICAgIGhlYWQgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgdGFpbCA9IGhlYWQgKyBuIC0gMTsKICAgICBmb3IgKGkgPSAwOyBpIDwgajsgaSsrKSB7CiAgICAgICAgIHN3YXAgPSAqaGVhZDsKQEAgLTIyMTMsNiArMjIzNyw3IEBACiAgICAgUHlPYmplY3QgKnZhbHVlOwogICAgIGludCBpdmFsOwogICAgIFB5X3NzaXplX3Qgd2hlcmUsIG4gPSBQeV9TSVpFKHNlbGYpOworICAgIGNoYXIgKmJ1ZjsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAibk86aW5zZXJ0IiwgJndoZXJlLCAmdmFsdWUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIyMjYsNiArMjI1MSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChQeUJ5dGVBcnJheV9SZXNpemUoKFB5T2JqZWN0ICopc2VsZiwgbiArIDEpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogCiAgICAgaWYgKHdoZXJlIDwgMCkgewogICAgICAgICB3aGVyZSArPSBuOwpAQCAtMjIzNCw4ICsyMjYwLDggQEAKICAgICB9CiAgICAgaWYgKHdoZXJlID4gbikKICAgICAgICAgd2hlcmUgPSBuOwotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIG4gLSB3aGVyZSk7Ci0gICAgc2VsZi0+b2JfYnl0ZXNbd2hlcmVdID0gaXZhbDsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlICsgMSwgYnVmICsgd2hlcmUsIG4gLSB3aGVyZSk7CisgICAgYnVmW3doZXJlXSA9IGl2YWw7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTIyNjAsNyArMjI4Niw3IEBACiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuICsgMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNlbGYtPm9iX2J5dGVzW25dID0gdmFsdWU7CisgICAgUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpW25dID0gdmFsdWU7CiAKICAgICBQeV9SRVRVUk5fTk9ORTsKIH0KQEAgLTIyOTEsNyArMjMxNyw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyogVHJ5IHRvIGRldGVybWluZSB0aGUgbGVuZ3RoIG9mIHRoZSBhcmd1bWVudC4gMzIgaXMgYXJiaXRyYXJ5LiAqLwotICAgIGJ1Zl9zaXplID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoYXJnLCAzMik7CisgICAgYnVmX3NpemUgPSBQeU9iamVjdF9MZW5ndGhIaW50KGFyZywgMzIpOwogICAgIGlmIChidWZfc2l6ZSA9PSAtMSkgewogICAgICAgICBQeV9ERUNSRUYoaXQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNTMsNiArMjM3OSw3IEBACiB7CiAgICAgaW50IHZhbHVlOwogICAgIFB5X3NzaXplX3Qgd2hlcmUgPSAtMSwgbiA9IFB5X1NJWkUoc2VsZik7CisgICAgY2hhciAqYnVmOwogCiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8bjpwb3AiLCAmd2hlcmUpKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzNzEsOCArMjM5OCw5IEBACiAgICAgaWYgKCFfY2FucmVzaXplKHNlbGYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHZhbHVlID0gc2VsZi0+b2JfYnl0ZXNbd2hlcmVdOwotICAgIG1lbW1vdmUoc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSwgc2VsZi0+b2JfYnl0ZXMgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CisgICAgYnVmID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOworICAgIHZhbHVlID0gYnVmW3doZXJlXTsKKyAgICBtZW1tb3ZlKGJ1ZiArIHdoZXJlLCBidWYgKyB3aGVyZSArIDEsIG4gLSB3aGVyZSk7CiAgICAgaWYgKFB5Qnl0ZUFycmF5X1Jlc2l6ZSgoUHlPYmplY3QgKilzZWxmLCBuIC0gMSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjM4OCwxMiArMjQxNiwxMyBAQAogewogICAgIGludCB2YWx1ZTsKICAgICBQeV9zc2l6ZV90IHdoZXJlLCBuID0gUHlfU0laRShzZWxmKTsKKyAgICBjaGFyICpidWYgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAKICAgICBpZiAoISBfZ2V0Ynl0ZXZhbHVlKGFyZywgJnZhbHVlKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBmb3IgKHdoZXJlID0gMDsgd2hlcmUgPCBuOyB3aGVyZSsrKSB7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9ieXRlc1t3aGVyZV0gPT0gdmFsdWUpCisgICAgICAgIGlmIChidWZbd2hlcmVdID09IHZhbHVlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICh3aGVyZSA9PSBuKSB7CkBAIC0yNDAzLDcgKzI0MzIsNyBAQAogICAgIGlmICghX2NhbnJlc2l6ZShzZWxmKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBtZW1tb3ZlKHNlbGYtPm9iX2J5dGVzICsgd2hlcmUsIHNlbGYtPm9iX2J5dGVzICsgd2hlcmUgKyAxLCBuIC0gd2hlcmUpOworICAgIG1lbW1vdmUoYnVmICsgd2hlcmUsIGJ1ZiArIHdoZXJlICsgMSwgbiAtIHdoZXJlKTsKICAgICBpZiAoUHlCeXRlQXJyYXlfUmVzaXplKChQeU9iamVjdCAqKXNlbGYsIG4gLSAxKSA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0yNDEzLDIxICsyNDQyLDIxIEBACiAvKiBYWFggVGhlc2UgdHdvIGhlbHBlcnMgY291bGQgYmUgb3B0aW1pemVkIGlmIGFyZ3NpemUgPT0gMSAqLwogCiBzdGF0aWMgUHlfc3NpemVfdAotbHN0cmlwX2hlbHBlcih1bnNpZ25lZCBjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCitsc3RyaXBfaGVscGVyKGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKICAgICAgICAgICAgICAgdm9pZCAqYXJncHRyLCBQeV9zc2l6ZV90IGFyZ3NpemUpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gMDsKLSAgICB3aGlsZSAoaSA8IG15c2l6ZSAmJiBtZW1jaHIoYXJncHRyLCBteXB0cltpXSwgYXJnc2l6ZSkpCisgICAgd2hpbGUgKGkgPCBteXNpemUgJiYgbWVtY2hyKGFyZ3B0ciwgKHVuc2lnbmVkIGNoYXIpIG15cHRyW2ldLCBhcmdzaXplKSkKICAgICAgICAgaSsrOwogICAgIHJldHVybiBpOwogfQogCiBzdGF0aWMgUHlfc3NpemVfdAotcnN0cmlwX2hlbHBlcih1bnNpZ25lZCBjaGFyICpteXB0ciwgUHlfc3NpemVfdCBteXNpemUsCityc3RyaXBfaGVscGVyKGNoYXIgKm15cHRyLCBQeV9zc2l6ZV90IG15c2l6ZSwKICAgICAgICAgICAgICAgdm9pZCAqYXJncHRyLCBQeV9zc2l6ZV90IGFyZ3NpemUpCiB7CiAgICAgUHlfc3NpemVfdCBpID0gbXlzaXplIC0gMTsKLSAgICB3aGlsZSAoaSA+PSAwICYmIG1lbWNocihhcmdwdHIsIG15cHRyW2ldLCBhcmdzaXplKSkKKyAgICB3aGlsZSAoaSA+PSAwICYmIG1lbWNocihhcmdwdHIsICh1bnNpZ25lZCBjaGFyKSBteXB0cltpXSwgYXJnc2l6ZSkpCiAgICAgICAgIGktLTsKICAgICByZXR1cm4gaSArIDE7CiB9CkBAIC0yNDQyLDcgKzI0NzEsNyBAQAogYnl0ZWFycmF5X3N0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8TzpzdHJpcCIsICZhcmcpKQpAQCAtMjQ1MiwxMiArMjQ4MSwxMiBAQAogICAgICAgICBhcmdzaXplID0gNjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmIChfZ2V0YnVmZmVyKGFyZywgJnZhcmcpIDwgMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihhcmcsICZ2YXJnLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgYXJncHRyID0gdmFyZy5idWY7CisgICAgICAgIGFyZ3B0ciA9IChjaGFyICopIHZhcmcuYnVmOwogICAgICAgICBhcmdzaXplID0gdmFyZy5sZW47CiAgICAgfQotICAgIG15cHRyID0gc2VsZi0+b2JfYnl0ZXM7CisgICAgbXlwdHIgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VsZik7CiAgICAgbXlzaXplID0gUHlfU0laRShzZWxmKTsKICAgICBsZWZ0ID0gbHN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChsZWZ0ID09IG15c2l6ZSkKQEAgLTI0NjYsNyArMjQ5NSw3IEBACiAgICAgICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKKyAgICByZXR1cm4gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUobXlwdHIgKyBsZWZ0LCByaWdodCAtIGxlZnQpOwogfQogCiBQeURvY19TVFJWQVIobHN0cmlwX19kb2NfXywKQEAgLTI0NzksNyArMjUwOCw3IEBACiBieXRlYXJyYXlfbHN0cmlwKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKICAgICBQeV9zc2l6ZV90IGxlZnQsIHJpZ2h0LCBteXNpemUsIGFyZ3NpemU7Ci0gICAgdm9pZCAqbXlwdHIsICphcmdwdHI7CisgICAgY2hhciAqbXlwdHIsICphcmdwdHI7CiAgICAgUHlPYmplY3QgKmFyZyA9IFB5X05vbmU7CiAgICAgUHlfYnVmZmVyIHZhcmc7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJ8Tzpsc3RyaXAiLCAmYXJnKSkKQEAgLTI0ODksMTggKzI1MTgsMTggQEAKICAgICAgICAgYXJnc2l6ZSA9IDY7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBpZiAoX2dldGJ1ZmZlcihhcmcsICZ2YXJnKSA8IDApCisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYXJnLCAmdmFyZywgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIGFyZ3B0ciA9IHZhcmcuYnVmOworICAgICAgICBhcmdwdHIgPSAoY2hhciAqKSB2YXJnLmJ1ZjsKICAgICAgICAgYXJnc2l6ZSA9IHZhcmcubGVuOwogICAgIH0KLSAgICBteXB0ciA9IHNlbGYtPm9iX2J5dGVzOworICAgIG15cHRyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKHNlbGYpOwogICAgIG15c2l6ZSA9IFB5X1NJWkUoc2VsZik7CiAgICAgbGVmdCA9IGxzdHJpcF9oZWxwZXIobXlwdHIsIG15c2l6ZSwgYXJncHRyLCBhcmdzaXplKTsKICAgICByaWdodCA9IG15c2l6ZTsKICAgICBpZiAoYXJnICE9IFB5X05vbmUpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZhcmcpOwotICAgIHJldHVybiBQeUJ5dGVBcnJheV9Gcm9tU3RyaW5nQW5kU2l6ZShzZWxmLT5vYl9ieXRlcyArIGxlZnQsIHJpZ2h0IC0gbGVmdCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyICsgbGVmdCwgcmlnaHQgLSBsZWZ0KTsKIH0KIAogUHlEb2NfU1RSVkFSKHJzdHJpcF9fZG9jX18sCkBAIC0yNTEzLDcgKzI1NDIsNyBAQAogYnl0ZWFycmF5X3JzdHJpcChQeUJ5dGVBcnJheU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCByaWdodCwgbXlzaXplLCBhcmdzaXplOwotICAgIHZvaWQgKm15cHRyLCAqYXJncHRyOworICAgIGNoYXIgKm15cHRyLCAqYXJncHRyOwogICAgIFB5T2JqZWN0ICphcmcgPSBQeV9Ob25lOwogICAgIFB5X2J1ZmZlciB2YXJnOwogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifE86cnN0cmlwIiwgJmFyZykpCkBAIC0yNTIzLDE3ICsyNTUyLDE3IEBACiAgICAgICAgIGFyZ3NpemUgPSA2OwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQorICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGFyZywgJnZhcmcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBhcmdwdHIgPSB2YXJnLmJ1ZjsKKyAgICAgICAgYXJncHRyID0gKGNoYXIgKikgdmFyZy5idWY7CiAgICAgICAgIGFyZ3NpemUgPSB2YXJnLmxlbjsKICAgICB9Ci0gICAgbXlwdHIgPSBzZWxmLT5vYl9ieXRlczsKKyAgICBteXB0ciA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwogICAgIHJpZ2h0ID0gcnN0cmlwX2hlbHBlcihteXB0ciwgbXlzaXplLCBhcmdwdHIsIGFyZ3NpemUpOwogICAgIGlmIChhcmcgIT0gUHlfTm9uZSkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmFyZyk7Ci0gICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKHNlbGYtPm9iX2J5dGVzLCByaWdodCk7CisgICAgcmV0dXJuIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplKG15cHRyLCByaWdodCk7CiB9CiAKIFB5RG9jX1NUUlZBUihkZWNvZGVfZG9jLApAQCAtMjU3OCw3MyArMjYwNyw5IEBACiBpbiBiZXR3ZWVuIGVhY2ggcGFpciwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGFzIGEgbmV3IGJ5dGVhcnJheS4iKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVhcnJheV9qb2luKFB5Qnl0ZUFycmF5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaXQpCitieXRlYXJyYXlfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKml0ZXJhYmxlKQogewotICAgIFB5T2JqZWN0ICpzZXE7Ci0gICAgUHlfc3NpemVfdCBteXNpemUgPSBQeV9TSVpFKHNlbGYpOwotICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeV9zc2l6ZV90IG47Ci0gICAgUHlPYmplY3QgKippdGVtczsKLSAgICBQeV9zc2l6ZV90IHRvdGFsc2l6ZSA9IDA7Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBjaGFyICpkZXN0OwotCi0gICAgc2VxID0gUHlTZXF1ZW5jZV9GYXN0KGl0LCAiY2FuIG9ubHkgam9pbiBhbiBpdGVyYWJsZSIpOwotICAgIGlmIChzZXEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbiA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpOwotICAgIGl0ZW1zID0gUHlTZXF1ZW5jZV9GYXN0X0lURU1TKHNlcSk7Ci0KLSAgICAvKiBDb21wdXRlIHRoZSB0b3RhbCBzaXplLCBhbmQgY2hlY2sgdGhhdCB0aGV5IGFyZSBhbGwgYnl0ZXMgKi8KLSAgICAvKiBYWFggU2hvdWxkbid0IHdlIHVzZSBfZ2V0YnVmZmVyKCkgb24gdGhlc2UgaXRlbXMgaW5zdGVhZD8gKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIFB5T2JqZWN0ICpvYmogPSBpdGVtc1tpXTsKLSAgICAgICAgaWYgKCFQeUJ5dGVBcnJheV9DaGVjayhvYmopICYmICFQeUJ5dGVzX0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBvbmx5IGpvaW4gYW4gaXRlcmFibGUgb2YgYnl0ZXMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICIoaXRlbSAlbGQgaGFzIHR5cGUgJyUuMTAwcycpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFggJWxkIGlzbid0IHJpZ2h0IG9uIFdpbjY0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpaSwgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKLSAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGkgPiAwKQotICAgICAgICAgICAgdG90YWxzaXplICs9IG15c2l6ZTsKLSAgICAgICAgdG90YWxzaXplICs9IFB5X1NJWkUob2JqKTsKLSAgICAgICAgaWYgKHRvdGFsc2l6ZSA8IDApIHsKLSAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQWxsb2NhdGUgdGhlIHJlc3VsdCwgYW5kIGNvcHkgdGhlIGJ5dGVzICovCi0gICAgcmVzdWx0ID0gUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUoTlVMTCwgdG90YWxzaXplKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgZGVzdCA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhyZXN1bHQpOwotICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgUHlPYmplY3QgKm9iaiA9IGl0ZW1zW2ldOwotICAgICAgICBQeV9zc2l6ZV90IHNpemUgPSBQeV9TSVpFKG9iaik7Ci0gICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKG9iaikpCi0gICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhvYmopOwotICAgICAgICBlbHNlCi0gICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKG9iaik7Ci0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICBtZW1jcHkoZGVzdCwgc2VsZi0+b2JfYnl0ZXMsIG15c2l6ZSk7Ci0gICAgICAgICAgICBkZXN0ICs9IG15c2l6ZTsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoZGVzdCwgYnVmLCBzaXplKTsKLSAgICAgICAgZGVzdCArPSBzaXplOwotICAgIH0KLQotICAgIC8qIERvbmUgKi8KLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICByZXR1cm4gcmVzdWx0OwotCi0gICAgLyogRXJyb3IgaGFuZGxpbmcgKi8KLSAgZXJyb3I6Ci0gICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9ieXRlc19qb2luKHNlbGYsIGl0ZXJhYmxlKTsKIH0KIAogUHlEb2NfU1RSVkFSKHNwbGl0bGluZXNfX2RvY19fLApAQCAtMjc0OCw2ICsyNzEzLDcgQEAKIHsKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CisgICAgY2hhciAqYnVmOwogCiAgICAgZGljdCA9IF9QeU9iamVjdF9HZXRBdHRySWQoKFB5T2JqZWN0ICopc2VsZiwgJlB5SWRfX19kaWN0X18pOwogICAgIGlmIChkaWN0ID09IE5VTEwpIHsKQEAgLTI3NTYsMTkgKzI3MjIsMjAgQEAKICAgICAgICAgUHlfSU5DUkVGKGRpY3QpOwogICAgIH0KIAorICAgIGJ1ZiA9IFB5Qnl0ZUFycmF5X0FTX1NUUklORyhzZWxmKTsKICAgICBpZiAocHJvdG8gPCAzKSB7CiAgICAgICAgIC8qIHVzZSBzdHIgYmFzZWQgcmVkdWN0aW9uIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIFB5dGhvbiAyLnggKi8KICAgICAgICAgUHlPYmplY3QgKmxhdGluMTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX2J5dGVzKQotICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0RlY29kZUxhdGluMShzZWxmLT5vYl9ieXRlcywgUHlfU0laRShzZWxmKSwgTlVMTCk7CisgICAgICAgIGlmIChQeV9TSVpFKHNlbGYpKQorICAgICAgICAgICAgbGF0aW4xID0gUHlVbmljb2RlX0RlY29kZUxhdGluMShidWYsIFB5X1NJWkUoc2VsZiksIE5VTEwpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBsYXRpbjEgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiIik7CiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyhOcylOKSIsIFB5X1RZUEUoc2VsZiksIGxhdGluMSwgImxhdGluLTEiLCBkaWN0KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8qIHVzZSBtb3JlIGVmZmljaWVudCBieXRlIGJhc2VkIHJlZHVjdGlvbiAqLwotICAgICAgICBpZiAoc2VsZi0+b2JfYnl0ZXMpIHsKLSAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyh5IylOKSIsIFB5X1RZUEUoc2VsZiksIHNlbGYtPm9iX2J5dGVzLCBQeV9TSVpFKHNlbGYpLCBkaWN0KTsKKyAgICAgICAgaWYgKFB5X1NJWkUoc2VsZikpIHsKKyAgICAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTyh5IylOKSIsIFB5X1RZUEUoc2VsZiksIGJ1ZiwgUHlfU0laRShzZWxmKSwgZGljdCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE8oKU4pIiwgUHlfVFlQRShzZWxmKSwgZGljdCk7CkBAIC0yODQ5LDcgKzI4MTYsNyBAQAogICAgIHsiY291bnQiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2NvdW50LCBNRVRIX1ZBUkFSR1MsIGNvdW50X19kb2NfX30sCiAgICAgeyJkZWNvZGUiLCAoUHlDRnVuY3Rpb24pYnl0ZWFycmF5X2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX2RvY30sCiAgICAgeyJlbmRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZW5kc3dpdGgsIE1FVEhfVkFSQVJHUywgZW5kc3dpdGhfX2RvY19ffSwKLSAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUywKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX2V4cGFuZHRhYnMsIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgIGV4cGFuZHRhYnNfX2RvY19ffSwKICAgICB7ImV4dGVuZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZXh0ZW5kLCBNRVRIX08sIGV4dGVuZF9fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlYXJyYXlfZmluZCwgTUVUSF9WQVJBUkdTLCBmaW5kX19kb2NfX30sCkBAIC0zMDAwLDcgKzI5NjcsNyBAQAogCiAgICAgaWYgKGl0LT5pdF9pbmRleCA8IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHNlcSkpIHsKICAgICAgICAgaXRlbSA9IFB5TG9uZ19Gcm9tTG9uZygKLSAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKXNlcS0+b2JfYnl0ZXNbaXQtPml0X2luZGV4XSk7CisgICAgICAgICAgICAodW5zaWduZWQgY2hhcilQeUJ5dGVBcnJheV9BU19TVFJJTkcoc2VxKVtpdC0+aXRfaW5kZXhdKTsKICAgICAgICAgaWYgKGl0ZW0gIT0gTlVMTCkKICAgICAgICAgICAgICsraXQtPml0X2luZGV4OwogICAgICAgICByZXR1cm4gaXRlbTsKZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZXNfbWV0aG9kcy5jIGIvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKaW5kZXggZWYzYzJmNy4uOWZmN2FjZSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKKysrIGIvT2JqZWN0cy9ieXRlc19tZXRob2RzLmMKQEAgLTEwLDkgKzEwLDkgQEAKIFB5T2JqZWN0KgogX1B5X2J5dGVzX2lzc3BhY2UoY29uc3QgY2hhciAqY3B0ciwgUHlfc3NpemVfdCBsZW4pCiB7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqcAorICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKICAgICAgICAgPSAodW5zaWduZWQgY2hhciAqKSBjcHRyOwotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KICAgICBpZiAobGVuID09IDEgJiYgUHlfSVNTUEFDRSgqcCkpCkBAIC00MCw5ICs0MCw5IEBACiBQeU9iamVjdCoKIF9QeV9ieXRlc19pc2FscGhhKGNvbnN0IGNoYXIgKmNwdHIsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwCiAgICAgICAgID0gKHVuc2lnbmVkIGNoYXIgKikgY3B0cjsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICplOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmU7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCiAgICAgaWYgKGxlbiA9PSAxICYmIFB5X0lTQUxQSEEoKnApKQpAQCAtNzAsOSArNzAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNhbG51bShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0FMTlVNKCpwKSkKQEAgLTEwMCw5ICsxMDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNkaWdpdChjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogCiAgICAgLyogU2hvcnRjdXQgZm9yIHNpbmdsZSBjaGFyYWN0ZXIgc3RyaW5ncyAqLwogICAgIGlmIChsZW4gPT0gMSAmJiBQeV9JU0RJR0lUKCpwKSkKQEAgLTEzMCw5ICsxMzAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXNsb3dlcihjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTE2NCw5ICsxNjQsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXN1cHBlcihjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZDsKIAogICAgIC8qIFNob3J0Y3V0IGZvciBzaW5nbGUgY2hhcmFjdGVyIHN0cmluZ3MgKi8KQEAgLTIwMCw5ICsyMDAsOSBAQAogUHlPYmplY3QqCiBfUHlfYnl0ZXNfaXN0aXRsZShjb25zdCBjaGFyICpjcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKLSAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpwCisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcAogICAgICAgICA9ICh1bnNpZ25lZCBjaGFyICopIGNwdHI7Ci0gICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICplOwogICAgIGludCBjYXNlZCwgcHJldmlvdXNfaXNfY2FzZWQ7CiAKICAgICAvKiBTaG9ydGN1dCBmb3Igc2luZ2xlIGNoYXJhY3RlciBzdHJpbmdzICovCkBAIC0yMTcsNyArMjE3LDcgQEAKICAgICBjYXNlZCA9IDA7CiAgICAgcHJldmlvdXNfaXNfY2FzZWQgPSAwOwogICAgIGZvciAoOyBwIDwgZTsgcCsrKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgY2ggPSAqcDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciBjaCA9ICpwOwogCiAgICAgICAgIGlmIChQeV9JU1VQUEVSKGNoKSkgewogICAgICAgICAgICAgaWYgKHByZXZpb3VzX2lzX2Nhc2VkKQpAQCAtMzYzLDQxICszNjMsMjAgQEAKIGluIGZybSBpcyBtYXBwZWQgdG8gdGhlIGJ5dGUgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4gdG8uXG5cCiBUaGUgYnl0ZXMgb2JqZWN0cyBmcm0gYW5kIHRvIG11c3QgYmUgb2YgdGhlIHNhbWUgbGVuZ3RoLiIpOwogCi1zdGF0aWMgUHlfc3NpemVfdAotX2dldGJ1ZmZlcihQeU9iamVjdCAqb2JqLCBQeV9idWZmZXIgKnZpZXcpCi17Ci0gICAgUHlCdWZmZXJQcm9jcyAqYnVmZmVyID0gUHlfVFlQRShvYmopLT50cF9hc19idWZmZXI7Ci0KLSAgICBpZiAoYnVmZmVyID09IE5VTEwgfHwgYnVmZmVyLT5iZl9nZXRidWZmZXIgPT0gTlVMTCkKLSAgICB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiVHlwZSAlLjEwMHMgZG9lc24ndCBzdXBwb3J0IHRoZSBidWZmZXIgQVBJIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0KLSAgICBpZiAoYnVmZmVyLT5iZl9nZXRidWZmZXIob2JqLCB2aWV3LCBQeUJVRl9TSU1QTEUpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiB2aWV3LT5sZW47Ci19Ci0KIFB5T2JqZWN0ICoKIF9QeV9ieXRlc19tYWtldHJhbnMoUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKmZybSwgKnRvLCAqcmVzID0gTlVMTDsKLSAgICBQeV9idWZmZXIgYmZybSwgYnRvOworICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOworICAgIFB5X2J1ZmZlciBiZnJtID0ge05VTEwsIE5VTEx9OworICAgIFB5X2J1ZmZlciBidG8gPSB7TlVMTCwgTlVMTH07CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGNoYXIgKnA7CiAKICAgICBiZnJtLmxlbiA9IC0xOwogICAgIGJ0by5sZW4gPSAtMTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT086bWFrZXRyYW5zIiwgJmZybSwgJnRvKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqeSo6bWFrZXRyYW5zIiwgJmJmcm0sICZidG8pKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoX2dldGJ1ZmZlcihmcm0sICZiZnJtKSA8IDApCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChfZ2V0YnVmZmVyKHRvLCAmYnRvKSA8IDApCi0gICAgICAgIGdvdG8gZG9uZTsKICAgICBpZiAoYmZybS5sZW4gIT0gYnRvLmxlbikgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICJtYWtldHJhbnMgYXJndW1lbnRzIG11c3QgaGF2ZSBzYW1lIGxlbmd0aCIpOwpAQCAtNDE1LDkgKzM5NCw5IEBACiAgICAgfQogCiBkb25lOgotICAgIGlmIChiZnJtLmxlbiAhPSAtMSkKKyAgICBpZiAoYmZybS5vYmogIT0gTlVMTCkKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmYmZybSk7Ci0gICAgaWYgKGJ0by5sZW4gIT0gLTEpCisgICAgaWYgKGJmcm0ub2JqICE9IE5VTEwpCiAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ0byk7CiAgICAgcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL09iamVjdHMvYnl0ZXNvYmplY3QuYyBiL09iamVjdHMvYnl0ZXNvYmplY3QuYwppbmRleCAzMmM1ZDcxLi4yN2Y0MDY5IDEwMDY0NAotLS0gYS9PYmplY3RzL2J5dGVzb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9ieXRlc29iamVjdC5jCkBAIC03LDI0ICs3LDYgQEAKICNpbmNsdWRlICJieXRlc19tZXRob2RzLmgiCiAjaW5jbHVkZSA8c3RkZGVmLmg+CiAKLXN0YXRpYyBQeV9zc2l6ZV90Ci1fZ2V0YnVmZmVyKFB5T2JqZWN0ICpvYmosIFB5X2J1ZmZlciAqdmlldykKLXsKLSAgICBQeUJ1ZmZlclByb2NzICpidWZmZXIgPSBQeV9UWVBFKG9iaiktPnRwX2FzX2J1ZmZlcjsKLQotICAgIGlmIChidWZmZXIgPT0gTlVMTCB8fCBidWZmZXItPmJmX2dldGJ1ZmZlciA9PSBOVUxMKQotICAgIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJUeXBlICUuMTAwcyBkb2Vzbid0IHN1cHBvcnQgdGhlIGJ1ZmZlciBBUEkiLAotICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmIChidWZmZXItPmJmX2dldGJ1ZmZlcihvYmosIHZpZXcsIFB5QlVGX1NJTVBMRSkgPCAwKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIHZpZXctPmxlbjsKLX0KLQogI2lmZGVmIENPVU5UX0FMTE9DUwogUHlfc3NpemVfdCBudWxsX3N0cmluZ3MsIG9uZV9zdHJpbmdzOwogI2VuZGlmCkBAIC02NSw3ICs0Nyw3IEBACiBQeU9iamVjdCAqCiBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBzaXplKQogewotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKm9wOworICAgIFB5Qnl0ZXNPYmplY3QgKm9wOwogICAgIGlmIChzaXplIDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCiAgICAgICAgICAgICAiTmVnYXRpdmUgc2l6ZSBwYXNzZWQgdG8gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSIpOwpAQCAtOTgsNyArODAsNyBAQAogICAgIG9wID0gKFB5Qnl0ZXNPYmplY3QgKilQeU9iamVjdF9NQUxMT0MoUHlCeXRlc09iamVjdF9TSVpFICsgc2l6ZSk7CiAgICAgaWYgKG9wID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlCeXRlc19UeXBlLCBzaXplKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUX1ZBUihvcCwgJlB5Qnl0ZXNfVHlwZSwgc2l6ZSk7CiAgICAgb3AtPm9iX3NoYXNoID0gLTE7CiAgICAgaWYgKHN0ciAhPSBOVUxMKQogICAgICAgICBQeV9NRU1DUFkob3AtPm9iX3N2YWwsIHN0ciwgc2l6ZSk7CkBAIC0xMTcsOCArOTksOCBAQAogUHlPYmplY3QgKgogUHlCeXRlc19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0cikKIHsKLSAgICByZWdpc3RlciBzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICpvcDsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeUJ5dGVzT2JqZWN0ICpvcDsKIAogICAgIGFzc2VydChzdHIgIT0gTlVMTCk7CiAgICAgc2l6ZSA9IHN0cmxlbihzdHIpOwpAQCAtMTQ2LDcgKzEyOCw3IEBACiAgICAgb3AgPSAoUHlCeXRlc09iamVjdCAqKVB5T2JqZWN0X01BTExPQyhQeUJ5dGVzT2JqZWN0X1NJWkUgKyBzaXplKTsKICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlCeXRlc19UeXBlLCBzaXplKTsKICAgICBvcC0+b2Jfc2hhc2ggPSAtMTsKICAgICBQeV9NRU1DUFkob3AtPm9iX3N2YWwsIHN0ciwgc2l6ZSsxKTsKICAgICAvKiBzaGFyZSBzaG9ydCBzdHJpbmdzICovCkBAIC01MTcsNyArNDk5LDcgQEAKIC8qIG9iamVjdCBhcGkgKi8KIAogUHlfc3NpemVfdAotUHlCeXRlc19TaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5Qnl0ZXNfU2l6ZShQeU9iamVjdCAqb3ApCiB7CiAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtNTI4LDcgKzUxMCw3IEBACiB9CiAKIGNoYXIgKgotUHlCeXRlc19Bc1N0cmluZyhyZWdpc3RlciBQeU9iamVjdCAqb3ApCitQeUJ5dGVzX0FzU3RyaW5nKFB5T2JqZWN0ICpvcCkKIHsKICAgICBpZiAoIVB5Qnl0ZXNfQ2hlY2sob3ApKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCkBAIC01MzksOSArNTIxLDkgQEAKIH0KIAogaW50Ci1QeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZShyZWdpc3RlciBQeU9iamVjdCAqb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNoYXIgKipzLAotICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgKmxlbikKK1B5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKFB5T2JqZWN0ICpvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCAqbGVuKQogewogICAgIGlmIChzID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC01NzMsNiArNTU1LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvZmFzdHNlYXJjaC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL2pvaW4uaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvcGFydGl0aW9uLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2N0eXBlLmgiCkBAIC01ODIsNyArNTY1LDcgQEAKIFB5T2JqZWN0ICoKIFB5Qnl0ZXNfUmVwcihQeU9iamVjdCAqb2JqLCBpbnQgc21hcnRxdW90ZXMpCiB7Ci0gICAgcmVnaXN0ZXIgUHlCeXRlc09iamVjdCogb3AgPSAoUHlCeXRlc09iamVjdCopIG9iajsKKyAgICBQeUJ5dGVzT2JqZWN0KiBvcCA9IChQeUJ5dGVzT2JqZWN0Kikgb2JqOwogICAgIFB5X3NzaXplX3QgaSwgbGVuZ3RoID0gUHlfU0laRShvcCk7CiAgICAgUHlfc3NpemVfdCBuZXdzaXplLCBzcXVvdGVzLCBkcXVvdGVzOwogICAgIFB5T2JqZWN0ICp2OwpAQCAtNjg1LDggKzY2OCw4IEBACiAKICAgICB2YS5sZW4gPSAtMTsKICAgICB2Yi5sZW4gPSAtMTsKLSAgICBpZiAoX2dldGJ1ZmZlcihhLCAmdmEpIDwgMCAgfHwKLSAgICAgICAgX2dldGJ1ZmZlcihiLCAmdmIpIDwgMCkgeworICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoYSwgJnZhLCBQeUJVRl9TSU1QTEUpICE9IDAgfHwKKyAgICAgICAgUHlPYmplY3RfR2V0QnVmZmVyKGIsICZ2YiwgUHlCVUZfU0lNUExFKSAhPSAwKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJjYW4ndCBjb25jYXQgJS4xMDBzIHRvICUuMTAwcyIsCiAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGEpLT50cF9uYW1lLCBQeV9UWVBFKGIpLT50cF9uYW1lKTsKICAgICAgICAgZ290byBkb25lOwpAQCAtNzI1LDEyICs3MDgsMTIgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX3JlcGVhdChyZWdpc3RlciBQeUJ5dGVzT2JqZWN0ICphLCByZWdpc3RlciBQeV9zc2l6ZV90IG4pCitieXRlc19yZXBlYXQoUHlCeXRlc09iamVjdCAqYSwgUHlfc3NpemVfdCBuKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGo7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBzaXplOwotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKm9wOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGo7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIFB5Qnl0ZXNPYmplY3QgKm9wOwogICAgIHNpemVfdCBuYnl0ZXM7CiAgICAgaWYgKG4gPCAwKQogICAgICAgICBuID0gMDsKQEAgLTc1Niw3ICs3MzksNyBAQAogICAgIG9wID0gKFB5Qnl0ZXNPYmplY3QgKilQeU9iamVjdF9NQUxMT0MoUHlCeXRlc09iamVjdF9TSVpFICsgbmJ5dGVzKTsKICAgICBpZiAob3AgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgUHlPYmplY3RfSU5JVF9WQVIob3AsICZQeUJ5dGVzX1R5cGUsIHNpemUpOworICAgICh2b2lkKVB5T2JqZWN0X0lOSVRfVkFSKG9wLCAmUHlCeXRlc19UeXBlLCBzaXplKTsKICAgICBvcC0+b2Jfc2hhc2ggPSAtMTsKICAgICBvcC0+b2Jfc3ZhbFtzaXplXSA9ICdcMCc7CiAgICAgaWYgKFB5X1NJWkUoYSkgPT0gMSAmJiBuID4gMCkgewpAQCAtNzg0LDcgKzc2Nyw3IEBACiAgICAgICAgIFB5X2J1ZmZlciB2YXJnOwogICAgICAgICBQeV9zc2l6ZV90IHBvczsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgaWYgKF9nZXRidWZmZXIoYXJnLCAmdmFyZykgPCAwKQorICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGFyZywgJnZhcmcsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgcG9zID0gc3RyaW5nbGliX2ZpbmQoUHlCeXRlc19BU19TVFJJTkcoc2VsZiksIFB5X1NJWkUoc2VsZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmcuYnVmLCB2YXJnLmxlbiwgMCk7CkBAIC04MDAsNyArNzgzLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWJ5dGVzX2l0ZW0oUHlCeXRlc09iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpKQorYnl0ZXNfaXRlbShQeUJ5dGVzT2JqZWN0ICphLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShhKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgImluZGV4IG91dCBvZiByYW5nZSIpOwpAQCAtODA5LDYgKzc5MiwyMyBAQAogICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoKHVuc2lnbmVkIGNoYXIpYS0+b2Jfc3ZhbFtpXSk7CiB9CiAKK1B5X0xPQ0FMKGludCkKK2J5dGVzX2NvbXBhcmVfZXEoUHlCeXRlc09iamVjdCAqYSwgUHlCeXRlc09iamVjdCAqYikKK3sKKyAgICBpbnQgY21wOworICAgIFB5X3NzaXplX3QgbGVuOworCisgICAgbGVuID0gUHlfU0laRShhKTsKKyAgICBpZiAoUHlfU0laRShiKSAhPSBsZW4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGEtPm9iX3N2YWxbMF0gIT0gYi0+b2Jfc3ZhbFswXSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjbXAgPSBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgbGVuKTsKKyAgICByZXR1cm4gKGNtcCA9PSAwKTsKK30KKwogc3RhdGljIFB5T2JqZWN0KgogYnl0ZXNfcmljaGNvbXBhcmUoUHlCeXRlc09iamVjdCAqYSwgUHlCeXRlc09iamVjdCAqYiwgaW50IG9wKQogewpAQCAtODE2LDY2ICs4MTYsNzQgQEAKICAgICBQeV9zc2l6ZV90IGxlbl9hLCBsZW5fYjsKICAgICBQeV9zc2l6ZV90IG1pbl9sZW47CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKKyAgICBpbnQgcmM7CiAKICAgICAvKiBNYWtlIHN1cmUgYm90aCBhcmd1bWVudHMgYXJlIHN0cmluZ3MuICovCiAgICAgaWYgKCEoUHlCeXRlc19DaGVjayhhKSAmJiBQeUJ5dGVzX0NoZWNrKGIpKSkgewotICAgICAgICBpZiAoUHlfQnl0ZXNXYXJuaW5nRmxhZyAmJiAob3AgPT0gUHlfRVEgfHwgb3AgPT0gUHlfTkUpICYmCi0gICAgICAgICAgICAoUHlPYmplY3RfSXNJbnN0YW5jZSgoUHlPYmplY3QqKWEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSkgfHwKLSAgICAgICAgICAgIFB5T2JqZWN0X0lzSW5zdGFuY2UoKFB5T2JqZWN0KiliLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0KikmUHlVbmljb2RlX1R5cGUpKSkgewotICAgICAgICAgICAgaWYgKFB5RXJyX1dhcm5FeChQeUV4Y19CeXRlc1dhcm5pbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGFyaXNvbiBiZXR3ZWVuIGJ5dGVzIGFuZCBzdHJpbmciLCAxKSkKKyAgICAgICAgaWYgKFB5X0J5dGVzV2FybmluZ0ZsYWcgJiYgKG9wID09IFB5X0VRIHx8IG9wID09IFB5X05FKSkgeworICAgICAgICAgICAgcmMgPSBQeU9iamVjdF9Jc0luc3RhbmNlKChQeU9iamVjdCopYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QqKSZQeVVuaWNvZGVfVHlwZSk7CisgICAgICAgICAgICBpZiAoIXJjKQorICAgICAgICAgICAgICAgIHJjID0gUHlPYmplY3RfSXNJbnN0YW5jZSgoUHlPYmplY3QqKWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeU9iamVjdCopJlB5VW5pY29kZV9UeXBlKTsKKyAgICAgICAgICAgIGlmIChyYyA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0J5dGVzV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb21wYXJpc29uIGJldHdlZW4gYnl0ZXMgYW5kIHN0cmluZyIsIDEpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXN1bHQgPSBQeV9Ob3RJbXBsZW1lbnRlZDsKLSAgICAgICAgZ290byBvdXQ7CiAgICAgfQotICAgIGlmIChhID09IGIpIHsKKyAgICBlbHNlIGlmIChhID09IGIpIHsKICAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIFB5X0VROmNhc2UgUHlfTEU6Y2FzZSBQeV9HRToKKyAgICAgICAgY2FzZSBQeV9FUToKKyAgICAgICAgY2FzZSBQeV9MRToKKyAgICAgICAgY2FzZSBQeV9HRToKKyAgICAgICAgICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLwogICAgICAgICAgICAgcmVzdWx0ID0gUHlfVHJ1ZTsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICBjYXNlIFB5X05FOmNhc2UgUHlfTFQ6Y2FzZSBQeV9HVDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5X05FOgorICAgICAgICBjYXNlIFB5X0xUOgorICAgICAgICBjYXNlIFB5X0dUOgogICAgICAgICAgICAgcmVzdWx0ID0gUHlfRmFsc2U7Ci0gICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChvcCA9PSBQeV9FUSkgewotICAgICAgICAvKiBTdXBwb3J0aW5nIFB5X05FIGhlcmUgYXMgd2VsbCBkb2VzIG5vdCBzYXZlCi0gICAgICAgICAgIG11Y2ggdGltZSwgc2luY2UgUHlfTkUgaXMgcmFyZWx5IHVzZWQuICAqLwotICAgICAgICBpZiAoUHlfU0laRShhKSA9PSBQeV9TSVpFKGIpCi0gICAgICAgICAgICAmJiAoYS0+b2Jfc3ZhbFswXSA9PSBiLT5vYl9zdmFsWzBdCi0gICAgICAgICAgICAmJiBtZW1jbXAoYS0+b2Jfc3ZhbCwgYi0+b2Jfc3ZhbCwgUHlfU0laRShhKSkgPT0gMCkpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X1RydWU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBQeV9GYWxzZTsKKyAgICBlbHNlIGlmIChvcCA9PSBQeV9FUSB8fCBvcCA9PSBQeV9ORSkgeworICAgICAgICBpbnQgZXEgPSBieXRlc19jb21wYXJlX2VxKGEsIGIpOworICAgICAgICBlcSBePSAob3AgPT0gUHlfTkUpOworICAgICAgICByZXN1bHQgPSBlcSA/IFB5X1RydWUgOiBQeV9GYWxzZTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGxlbl9hID0gUHlfU0laRShhKTsKKyAgICAgICAgbGVuX2IgPSBQeV9TSVpFKGIpOworICAgICAgICBtaW5fbGVuID0gUHlfTUlOKGxlbl9hLCBsZW5fYik7CisgICAgICAgIGlmIChtaW5fbGVuID4gMCkgeworICAgICAgICAgICAgYyA9IFB5X0NIQVJNQVNLKCphLT5vYl9zdmFsKSAtIFB5X0NIQVJNQVNLKCpiLT5vYl9zdmFsKTsKKyAgICAgICAgICAgIGlmIChjID09IDApCisgICAgICAgICAgICAgICAgYyA9IG1lbWNtcChhLT5vYl9zdmFsLCBiLT5vYl9zdmFsLCBtaW5fbGVuKTsKICAgICAgICAgfQotICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYyA9IDA7CisgICAgICAgIGlmIChjID09IDApCisgICAgICAgICAgICBjID0gKGxlbl9hIDwgbGVuX2IpID8gLTEgOiAobGVuX2EgPiBsZW5fYikgPyAxIDogMDsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFB5X0xUOiBjID0gYyA8ICAwOyBicmVhazsKKyAgICAgICAgY2FzZSBQeV9MRTogYyA9IGMgPD0gMDsgYnJlYWs7CisgICAgICAgIGNhc2UgUHlfR1Q6IGMgPSBjID4gIDA7IGJyZWFrOworICAgICAgICBjYXNlIFB5X0dFOiBjID0gYyA+PSAwOyBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBjID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOwogICAgIH0KLSAgICBsZW5fYSA9IFB5X1NJWkUoYSk7IGxlbl9iID0gUHlfU0laRShiKTsKLSAgICBtaW5fbGVuID0gKGxlbl9hIDwgbGVuX2IpID8gbGVuX2EgOiBsZW5fYjsKLSAgICBpZiAobWluX2xlbiA+IDApIHsKLSAgICAgICAgYyA9IFB5X0NIQVJNQVNLKCphLT5vYl9zdmFsKSAtIFB5X0NIQVJNQVNLKCpiLT5vYl9zdmFsKTsKLSAgICAgICAgaWYgKGM9PTApCi0gICAgICAgICAgICBjID0gbWVtY21wKGEtPm9iX3N2YWwsIGItPm9iX3N2YWwsIG1pbl9sZW4pOwotICAgIH0gZWxzZQotICAgICAgICBjID0gMDsKLSAgICBpZiAoYyA9PSAwKQotICAgICAgICBjID0gKGxlbl9hIDwgbGVuX2IpID8gLTEgOiAobGVuX2EgPiBsZW5fYikgPyAxIDogMDsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBQeV9MVDogYyA9IGMgPCAgMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9MRTogYyA9IGMgPD0gMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9FUTogYXNzZXJ0KDApOyAgYnJlYWs7IC8qIHVucmVhY2hhYmxlICovCi0gICAgY2FzZSBQeV9ORTogYyA9IGMgIT0gMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9HVDogYyA9IGMgPiAgMDsgYnJlYWs7Ci0gICAgY2FzZSBQeV9HRTogYyA9IGMgPj0gMDsgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmVzdWx0ID0gUHlfTm90SW1wbGVtZW50ZWQ7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLSAgICByZXN1bHQgPSBjID8gUHlfVHJ1ZSA6IFB5X0ZhbHNlOwotICBvdXQ6CisKICAgICBQeV9JTkNSRUYocmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtODg1LDcgKzg5Myw3IEBACiB7CiAgICAgaWYgKGEtPm9iX3NoYXNoID09IC0xKSB7CiAgICAgICAgIC8qIENhbid0IGZhaWwgKi8KLSAgICAgICAgYS0+b2Jfc2hhc2ggPSBfUHlfSGFzaEJ5dGVzKCh1bnNpZ25lZCBjaGFyICopIGEtPm9iX3N2YWwsIFB5X1NJWkUoYSkpOworICAgICAgICBhLT5vYl9zaGFzaCA9IF9QeV9IYXNoQnl0ZXMoYS0+b2Jfc3ZhbCwgUHlfU0laRShhKSk7CiAgICAgfQogICAgIHJldHVybiBhLT5vYl9zaGFzaDsKIH0KQEAgLTEwMTksNyArMTAyNyw3IEBACiAgICAgICAgIG1heHNwbGl0ID0gUFlfU1NJWkVfVF9NQVg7CiAgICAgaWYgKHN1Ym9iaiA9PSBQeV9Ob25lKQogICAgICAgICByZXR1cm4gc3RyaW5nbGliX3NwbGl0X3doaXRlc3BhY2UoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBtYXhzcGxpdCk7Ci0gICAgaWYgKF9nZXRidWZmZXIoc3Vib2JqLCAmdnN1YikgPCAwKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3Vib2JqLCAmdnN1YiwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdWIgPSB2c3ViLmJ1ZjsKICAgICBuID0gdnN1Yi5sZW47CkBAIC0xMDM5LDIxICsxMDQ3LDE5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNfcGFydGl0aW9uKFB5Qnl0ZXNPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICpzZXBfb2JqKQogewotICAgIGNvbnN0IGNoYXIgKnNlcDsKLSAgICBQeV9zc2l6ZV90IHNlcF9sZW47CisgICAgUHlfYnVmZmVyIHNlcCA9IHtOVUxMLCBOVUxMfTsKKyAgICBQeU9iamVjdCAqcmVzOwogCi0gICAgaWYgKFB5Qnl0ZXNfQ2hlY2soc2VwX29iaikpIHsKLSAgICAgICAgc2VwID0gUHlCeXRlc19BU19TVFJJTkcoc2VwX29iaik7Ci0gICAgICAgIHNlcF9sZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlcF9vYmopOwotICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIoc2VwX29iaiwgJnNlcCwgJnNlcF9sZW4pKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc2VwX29iaiwgJnNlcCwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJldHVybiBzdHJpbmdsaWJfcGFydGl0aW9uKAorICAgIHJlcyA9IHN0cmluZ2xpYl9wYXJ0aXRpb24oCiAgICAgICAgIChQeU9iamVjdCopIHNlbGYsCiAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKHNlbGYpLCBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpLAotICAgICAgICBzZXBfb2JqLCBzZXAsIHNlcF9sZW4KKyAgICAgICAgc2VwX29iaiwgc2VwLmJ1Ziwgc2VwLmxlbgogICAgICAgICApOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJnNlcCk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogUHlEb2NfU1RSVkFSKHJwYXJ0aXRpb25fX2RvY19fLApAQCAtMTA2NywyMSArMTA3MywxOSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGJ5dGVzX3JwYXJ0aXRpb24oUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKnNlcF9vYmopCiB7Ci0gICAgY29uc3QgY2hhciAqc2VwOwotICAgIFB5X3NzaXplX3Qgc2VwX2xlbjsKKyAgICBQeV9idWZmZXIgc2VwID0ge05VTEwsIE5VTEx9OworICAgIFB5T2JqZWN0ICpyZXM7CiAKLSAgICBpZiAoUHlCeXRlc19DaGVjayhzZXBfb2JqKSkgewotICAgICAgICBzZXAgPSBQeUJ5dGVzX0FTX1NUUklORyhzZXBfb2JqKTsKLSAgICAgICAgc2VwX2xlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUoc2VwX29iaik7Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihzZXBfb2JqLCAmc2VwLCAmc2VwX2xlbikpCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzZXBfb2JqLCAmc2VwLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0dXJuIHN0cmluZ2xpYl9ycGFydGl0aW9uKAorICAgIHJlcyA9IHN0cmluZ2xpYl9ycGFydGl0aW9uKAogICAgICAgICAoUHlPYmplY3QqKSBzZWxmLAogICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhzZWxmKSwgUHlCeXRlc19HRVRfU0laRShzZWxmKSwKLSAgICAgICAgc2VwX29iaiwgc2VwLCBzZXBfbGVuCisgICAgICAgIHNlcF9vYmosIHNlcC5idWYsIHNlcC5sZW4KICAgICAgICAgKTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzZXApOworICAgIHJldHVybiByZXM7CiB9CiAKIFB5RG9jX1NUUlZBUihyc3BsaXRfX2RvY19fLApAQCAtMTExMSw3ICsxMTE1LDcgQEAKICAgICAgICAgbWF4c3BsaXQgPSBQWV9TU0laRV9UX01BWDsKICAgICBpZiAoc3Vib2JqID09IFB5X05vbmUpCiAgICAgICAgIHJldHVybiBzdHJpbmdsaWJfcnNwbGl0X3doaXRlc3BhY2UoKFB5T2JqZWN0Kikgc2VsZiwgcywgbGVuLCBtYXhzcGxpdCk7Ci0gICAgaWYgKF9nZXRidWZmZXIoc3Vib2JqLCAmdnN1YikgPCAwKQorICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoc3Vib2JqLCAmdnN1YiwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzdWIgPSB2c3ViLmJ1ZjsKICAgICBuID0gdnN1Yi5sZW47CkBAIC0xMTI5LDk0ICsxMTMzLDkgQEAKIEV4YW1wbGU6IGInLicuam9pbihbYidhYicsIGIncHEnLCBiJ3JzJ10pIC0+IGInYWIucHEucnMnLiIpOwogCiBzdGF0aWMgUHlPYmplY3QgKgotYnl0ZXNfam9pbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm9yaWcpCitieXRlc19qb2luKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqaXRlcmFibGUpCiB7Ci0gICAgY2hhciAqc2VwID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZik7Ci0gICAgY29uc3QgUHlfc3NpemVfdCBzZXBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpOwotICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotICAgIGNoYXIgKnA7Ci0gICAgUHlfc3NpemVfdCBzZXFsZW4gPSAwOwotICAgIHNpemVfdCBzeiA9IDA7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICpzZXEsICppdGVtOwotCi0gICAgc2VxID0gUHlTZXF1ZW5jZV9GYXN0KG9yaWcsICIiKTsKLSAgICBpZiAoc2VxID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgc2VxbGVuID0gUHlTZXF1ZW5jZV9TaXplKHNlcSk7Ci0gICAgaWYgKHNlcWxlbiA9PSAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICByZXR1cm4gUHlCeXRlc19Gcm9tU3RyaW5nKCIiKTsKLSAgICB9Ci0gICAgaWYgKHNlcWxlbiA9PSAxKSB7Ci0gICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCAwKTsKLSAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChpdGVtKSkgewotICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOwotICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7Ci0gICAgICAgICAgICByZXR1cm4gaXRlbTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIFRoZXJlIGFyZSBhdCBsZWFzdCB0d28gdGhpbmdzIHRvIGpvaW4sIG9yIGVsc2Ugd2UgaGF2ZSBhIHN1YmNsYXNzCi0gICAgICogb2YgdGhlIGJ1aWx0aW4gdHlwZXMgaW4gdGhlIHNlcXVlbmNlLgotICAgICAqIERvIGEgcHJlLXBhc3MgdG8gZmlndXJlIG91dCB0aGUgdG90YWwgYW1vdW50IG9mIHNwYWNlIHdlJ2xsCi0gICAgICogbmVlZCAoc3opLCBhbmQgc2VlIHdoZXRoZXIgYWxsIGFyZ3VtZW50IGFyZSBieXRlcy4KLSAgICAgKi8KLSAgICAvKiBYWFggU2hvdWxkbid0IHdlIHVzZSBfZ2V0YnVmZmVyKCkgb24gdGhlc2UgaXRlbXMgaW5zdGVhZD8gKi8KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyBpKyspIHsKLSAgICAgICAgY29uc3Qgc2l6ZV90IG9sZF9zeiA9IHN6OwotICAgICAgICBpdGVtID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9JVEVNKHNlcSwgaSk7Ci0gICAgICAgIGlmICghUHlCeXRlc19DaGVjayhpdGVtKSAmJiAhUHlCeXRlQXJyYXlfQ2hlY2soaXRlbSkpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgInNlcXVlbmNlIGl0ZW0gJXpkOiBleHBlY3RlZCBieXRlcywiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiAlLjgwcyBmb3VuZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaSwgUHlfVFlQRShpdGVtKS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHN6ICs9IFB5X1NJWkUoaXRlbSk7Ci0gICAgICAgIGlmIChpICE9IDApCi0gICAgICAgICAgICBzeiArPSBzZXBsZW47Ci0gICAgICAgIGlmIChzeiA8IG9sZF9zeiB8fCBzeiA+IFBZX1NTSVpFX1RfTUFYKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAiam9pbigpIHJlc3VsdCBpcyB0b28gbG9uZyBmb3IgYnl0ZXMiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKiBBbGxvY2F0ZSByZXN1bHQgc3BhY2UuICovCi0gICAgcmVzID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciopTlVMTCwgc3opOwotICAgIGlmIChyZXMgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgLyogQ2F0ZW5hdGUgZXZlcnl0aGluZy4gKi8KLSAgICAvKiBJJ20gbm90IHdvcnJpZWQgYWJvdXQgYSBQeUJ5dGVBcnJheSBpdGVtIGdyb3dpbmcgYmVjYXVzZSB0aGVyZSdzCi0gICAgICAgbm93aGVyZSBpbiB0aGlzIGZ1bmN0aW9uIHdoZXJlIHdlIHJlbGVhc2UgdGhlIEdJTC4gKi8KLSAgICBwID0gUHlCeXRlc19BU19TVFJJTkcocmVzKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKLSAgICAgICAgc2l6ZV90IG47Ci0gICAgICAgIGNoYXIgKnE7Ci0gICAgICAgIGlmIChpKSB7Ci0gICAgICAgICAgICBQeV9NRU1DUFkocCwgc2VwLCBzZXBsZW4pOwotICAgICAgICAgICAgcCArPSBzZXBsZW47Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbSA9IFB5U2VxdWVuY2VfRmFzdF9HRVRfSVRFTShzZXEsIGkpOwotICAgICAgICBuID0gUHlfU0laRShpdGVtKTsKLSAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2soaXRlbSkpCi0gICAgICAgICAgICBxID0gUHlCeXRlc19BU19TVFJJTkcoaXRlbSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHEgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcoaXRlbSk7Ci0gICAgICAgIFB5X01FTUNQWShwLCBxLCBuKTsKLSAgICAgICAgcCArPSBuOwotICAgIH0KLQotICAgIFB5X0RFQ1JFRihzZXEpOwotICAgIHJldHVybiByZXM7CisgICAgcmV0dXJuIHN0cmluZ2xpYl9ieXRlc19qb2luKHNlbGYsIGl0ZXJhYmxlKTsKIH0KIAogUHlPYmplY3QgKgpAQCAtMTI1OCw3ICsxMTc3LDcgQEAKICAgICAgICAgcmV0dXJuIC0yOwogCiAgICAgaWYgKHN1Ym9iaikgewotICAgICAgICBpZiAoX2dldGJ1ZmZlcihzdWJvYmosICZzdWJidWYpIDwgMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdWJvYmosICZzdWJidWYsIFB5QlVGX1NJTVBMRSkgIT0gMCkKICAgICAgICAgICAgIHJldHVybiAtMjsKIAogICAgICAgICBzdWIgPSBzdWJidWYuYnVmOwpAQCAtMTM3Myw3ICsxMjkyLDcgQEAKICAgICBQeV9zc2l6ZV90IHNlcGxlbjsKICAgICBQeV9zc2l6ZV90IGksIGo7CiAKLSAgICBpZiAoX2dldGJ1ZmZlcihzZXBvYmosICZ2c2VwKSA8IDApCisgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzZXBvYmosICZ2c2VwLCBQeUJVRl9TSU1QTEUpICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHNlcCA9IHZzZXAuYnVmOwogICAgIHNlcGxlbiA9IHZzZXAubGVuOwpAQCAtMTQzOSw3ICsxMzU4LDcgQEAKIHsKICAgICBQeU9iamVjdCAqc2VwID0gTlVMTDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAoY2hhciAqKXN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCBzdHJpcGZvcm1hdFtzdHJpcHR5cGVdLCAmc2VwKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoc2VwICE9IE5VTEwgJiYgc2VwICE9IFB5X05vbmUpIHsKQEAgLTE1MTgsNyArMTQzNyw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKHN1Yl9vYmopIHsKLSAgICAgICAgaWYgKF9nZXRidWZmZXIoc3ViX29iaiwgJnZzdWIpIDwgMCkKKyAgICAgICAgaWYgKFB5T2JqZWN0X0dldEJ1ZmZlcihzdWJfb2JqLCAmdnN1YiwgUHlCVUZfU0lNUExFKSAhPSAwKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAgICAgc3ViID0gdnN1Yi5idWY7CkBAIC0xNTUzLDkgKzE0NzIsMTEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc190cmFuc2xhdGUoUHlCeXRlc09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgcmVnaXN0ZXIgY2hhciAqaW5wdXQsICpvdXRwdXQ7CisgICAgY2hhciAqaW5wdXQsICpvdXRwdXQ7CisgICAgUHlfYnVmZmVyIHRhYmxlX3ZpZXcgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfYnVmZmVyIGRlbF90YWJsZV92aWV3ID0ge05VTEwsIE5VTEx9OwogICAgIGNvbnN0IGNoYXIgKnRhYmxlOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgYywgY2hhbmdlZCA9IDA7CisgICAgUHlfc3NpemVfdCBpLCBjLCBjaGFuZ2VkID0gMDsKICAgICBQeU9iamVjdCAqaW5wdXRfb2JqID0gKFB5T2JqZWN0KilzZWxmOwogICAgIGNvbnN0IGNoYXIgKm91dHB1dF9zdGFydCwgKmRlbF90YWJsZT1OVUxMOwogICAgIFB5X3NzaXplX3QgaW5sZW4sIHRhYmxlbiwgZGVsbGVuID0gMDsKQEAgLTE1NzUsMTIgKzE0OTYsMTcgQEAKICAgICAgICAgdGFibGUgPSBOVUxMOwogICAgICAgICB0YWJsZW4gPSAyNTY7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcih0YWJsZW9iaiwgJnRhYmxlLCAmdGFibGVuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodGFibGVvYmosICZ0YWJsZV92aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgdGFibGUgPSB0YWJsZV92aWV3LmJ1ZjsKKyAgICAgICAgdGFibGVuID0gdGFibGVfdmlldy5sZW47CisgICAgfQogCiAgICAgaWYgKHRhYmxlbiAhPSAyNTYpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCiAgICAgICAgICAgInRyYW5zbGF0aW9uIHRhYmxlIG11c3QgYmUgMjU2IGNoYXJhY3RlcnMgbG9uZyIpOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ0YWJsZV92aWV3KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xNTg5LDggKzE1MTUsMTQgQEAKICAgICAgICAgICAgIGRlbF90YWJsZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGRlbG9iaik7CiAgICAgICAgICAgICBkZWxsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGRlbG9iaik7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoUHlPYmplY3RfQXNDaGFyQnVmZmVyKGRlbG9iaiwgJmRlbF90YWJsZSwgJmRlbGxlbikpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKGRlbG9iaiwgJmRlbF90YWJsZV92aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApIHsKKyAgICAgICAgICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ0YWJsZV92aWV3KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlbF90YWJsZSA9IGRlbF90YWJsZV92aWV3LmJ1ZjsKKyAgICAgICAgICAgIGRlbGxlbiA9IGRlbF90YWJsZV92aWV3LmxlbjsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgZGVsX3RhYmxlID0gTlVMTDsKQEAgLTE1OTksOCArMTUzMSwxMSBAQAogCiAgICAgaW5sZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGlucHV0X29iaik7CiAgICAgcmVzdWx0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKU5VTEwsIGlubGVuKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRlbF90YWJsZV92aWV3KTsKKyAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdGFibGVfdmlldyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBvdXRwdXRfc3RhcnQgPSBvdXRwdXQgPSBQeUJ5dGVzX0FzU3RyaW5nKHJlc3VsdCk7CiAgICAgaW5wdXQgPSBQeUJ5dGVzX0FTX1NUUklORyhpbnB1dF9vYmopOwogCkBAIC0xNjExLDExICsxNTQ2LDE0IEBACiAgICAgICAgICAgICBpZiAoUHlfQ0hBUk1BU0soKCpvdXRwdXQrKyA9IHRhYmxlW2NdKSkgIT0gYykKICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoY2hhbmdlZCB8fCAhUHlCeXRlc19DaGVja0V4YWN0KGlucHV0X29iaikpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKLSAgICAgICAgUHlfSU5DUkVGKGlucHV0X29iaik7Ci0gICAgICAgIHJldHVybiBpbnB1dF9vYmo7CisgICAgICAgIGlmICghY2hhbmdlZCAmJiBQeUJ5dGVzX0NoZWNrRXhhY3QoaW5wdXRfb2JqKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGlucHV0X29iaik7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGlucHV0X29iajsKKyAgICAgICAgfQorICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZkZWxfdGFibGVfdmlldyk7CisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnRhYmxlX3ZpZXcpOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAogICAgIGlmICh0YWJsZSA9PSBOVUxMKSB7CkBAIC0xNjI1LDkgKzE1NjMsMTEgQEAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQogICAgICAgICAgICAgdHJhbnNfdGFibGVbaV0gPSBQeV9DSEFSTUFTSyh0YWJsZVtpXSk7CiAgICAgfQorICAgIFB5QnVmZmVyX1JlbGVhc2UoJnRhYmxlX3ZpZXcpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IGRlbGxlbjsgaSsrKQogICAgICAgICB0cmFuc190YWJsZVsoaW50KSBQeV9DSEFSTUFTSyhkZWxfdGFibGVbaV0pXSA9IC0xOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJmRlbF90YWJsZV92aWV3KTsKIAogICAgIGZvciAoaSA9IGlubGVuOyAtLWkgPj0gMDsgKSB7CiAgICAgICAgIGMgPSBQeV9DSEFSTUFTSygqaW5wdXQrKyk7CkBAIC0yMTU2LDMxICsyMDk2LDIxIEBACiBzdGF0aWMgUHlPYmplY3QgKgogYnl0ZXNfcmVwbGFjZShQeUJ5dGVzT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIFB5X2J1ZmZlciBvbGQgPSB7TlVMTCwgTlVMTH07CisgICAgUHlfYnVmZmVyIG5ldyA9IHtOVUxMLCBOVUxMfTsKICAgICBQeV9zc2l6ZV90IGNvdW50ID0gLTE7Ci0gICAgUHlPYmplY3QgKmZyb20sICp0bzsKLSAgICBjb25zdCBjaGFyICpmcm9tX3MsICp0b19zOwotICAgIFB5X3NzaXplX3QgZnJvbV9sZW4sIHRvX2xlbjsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiT098bjpyZXBsYWNlIiwgJmZyb20sICZ0bywgJmNvdW50KSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInkqeSp8bjpyZXBsYWNlIiwgJm9sZCwgJm5ldywgJmNvdW50KSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlCeXRlc19DaGVjayhmcm9tKSkgewotICAgICAgICBmcm9tX3MgPSBQeUJ5dGVzX0FTX1NUUklORyhmcm9tKTsKLSAgICAgICAgZnJvbV9sZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKGZyb20pOwotICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIoZnJvbSwgJmZyb21fcywgJmZyb21fbGVuKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmVzID0gKFB5T2JqZWN0ICopcmVwbGFjZSgoUHlCeXRlc09iamVjdCAqKSBzZWxmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKilvbGQuYnVmLCBvbGQubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiluZXcuYnVmLCBuZXcubGVuLCBjb3VudCk7CiAKLSAgICBpZiAoUHlCeXRlc19DaGVjayh0bykpIHsKLSAgICAgICAgdG9fcyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHRvKTsKLSAgICAgICAgdG9fbGVuID0gUHlCeXRlc19HRVRfU0laRSh0byk7Ci0gICAgfQotICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcih0bywgJnRvX3MsICZ0b19sZW4pKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHJldHVybiAoUHlPYmplY3QgKilyZXBsYWNlKChQeUJ5dGVzT2JqZWN0ICopIHNlbGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbV9zLCBmcm9tX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b19zLCB0b19sZW4sIGNvdW50KTsKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZvbGQpOworICAgIFB5QnVmZmVyX1JlbGVhc2UoJm5ldyk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogLyoqIEVuZCBEQUxLRSAqKi8KQEAgLTIxOTUsNiArMjEyNSw3IEBACiB7CiAgICAgUHlfc3NpemVfdCBsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHNlbGYpOwogICAgIFB5X3NzaXplX3Qgc2xlbjsKKyAgICBQeV9idWZmZXIgc3ViX3ZpZXcgPSB7TlVMTCwgTlVMTH07CiAgICAgY29uc3QgY2hhciogc3ViOwogICAgIGNvbnN0IGNoYXIqIHN0cjsKIApAQCAtMjIwMiw4ICsyMTMzLDEyIEBACiAgICAgICAgIHN1YiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHN1YnN0cik7CiAgICAgICAgIHNsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHN1YnN0cik7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcihzdWJzdHIsICZzdWIsICZzbGVuKSkKLSAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgeworICAgICAgICBpZiAoUHlPYmplY3RfR2V0QnVmZmVyKHN1YnN0ciwgJnN1Yl92aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHN1YiA9IHN1Yl92aWV3LmJ1ZjsKKyAgICAgICAgc2xlbiA9IHN1Yl92aWV3LmxlbjsKKyAgICB9CiAgICAgc3RyID0gUHlCeXRlc19BU19TVFJJTkcoc2VsZik7CiAKICAgICBBREpVU1RfSU5ESUNFUyhzdGFydCwgZW5kLCBsZW4pOwpAQCAtMjIxMSwxNyArMjE0NiwyNSBAQAogICAgIGlmIChkaXJlY3Rpb24gPCAwKSB7CiAgICAgICAgIC8qIHN0YXJ0c3dpdGggKi8KICAgICAgICAgaWYgKHN0YXJ0K3NsZW4gPiBsZW4pCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGdvdG8gbm90Zm91bmQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogZW5kc3dpdGggKi8KICAgICAgICAgaWYgKGVuZC1zdGFydCA8IHNsZW4gfHwgc3RhcnQgPiBsZW4pCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGdvdG8gbm90Zm91bmQ7CiAKICAgICAgICAgaWYgKGVuZC1zbGVuID4gc3RhcnQpCiAgICAgICAgICAgICBzdGFydCA9IGVuZCAtIHNsZW47CiAgICAgfQotICAgIGlmIChlbmQtc3RhcnQgPj0gc2xlbikKLSAgICAgICAgcmV0dXJuICEgbWVtY21wKHN0citzdGFydCwgc3ViLCBzbGVuKTsKKyAgICBpZiAoZW5kLXN0YXJ0IDwgc2xlbikKKyAgICAgICAgZ290byBub3Rmb3VuZDsKKyAgICBpZiAobWVtY21wKHN0citzdGFydCwgc3ViLCBzbGVuKSAhPSAwKQorICAgICAgICBnb3RvIG5vdGZvdW5kOworCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmc3ViX3ZpZXcpOworICAgIHJldHVybiAxOworCitub3Rmb3VuZDoKKyAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZzdWJfdmlldyk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTIzMzMsOCArMjI3Niw2IEBACiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsICJ8c3M6ZGVjb2RlIiwga3dsaXN0LCAmZW5jb2RpbmcsICZlcnJvcnMpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoZW5jb2RpbmcgPT0gTlVMTCkKLSAgICAgICAgZW5jb2RpbmcgPSBQeVVuaWNvZGVfR2V0RGVmYXVsdEVuY29kaW5nKCk7CiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdChzZWxmLCBlbmNvZGluZywgZXJyb3JzKTsKIH0KIApAQCAtMjQzNSwxOCArMjM3Niw2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLVB5RG9jX1NUUlZBUihzaXplb2ZfX2RvY19fLAotIkIuX19zaXplb2ZfXygpIC0+IHNpemUgb2YgQiBpbiBtZW1vcnksIGluIGJ5dGVzIik7Ci0KLXN0YXRpYyBQeU9iamVjdCAqCi1ieXRlc19zaXplb2YoUHlCeXRlc09iamVjdCAqdikKLXsKLSAgICBQeV9zc2l6ZV90IHJlczsKLSAgICByZXMgPSBQeUJ5dGVzT2JqZWN0X1NJWkUgKyBQeV9TSVpFKHYpICogUHlfVFlQRSh2KS0+dHBfaXRlbXNpemU7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOwotfQotCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc19nZXRuZXdhcmdzKFB5Qnl0ZXNPYmplY3QgKnYpCiB7CkBAIC0yNDY0LDcgKzIzOTMsNyBAQAogICAgIHsiZGVjb2RlIiwgKFB5Q0Z1bmN0aW9uKWJ5dGVzX2RlY29kZSwgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZGVjb2RlX19kb2NfX30sCiAgICAgeyJlbmRzd2l0aCIsIChQeUNGdW5jdGlvbilieXRlc19lbmRzd2l0aCwgTUVUSF9WQVJBUkdTLAogICAgICBlbmRzd2l0aF9fZG9jX199LAotICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTLAorICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfZXhwYW5kdGFicywgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywKICAgICAgZXhwYW5kdGFic19fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbilieXRlc19maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKICAgICB7ImZyb21oZXgiLCAoUHlDRnVuY3Rpb24pYnl0ZXNfZnJvbWhleCwgTUVUSF9WQVJBUkdTfE1FVEhfQ0xBU1MsCkBAIC0yNTEyLDEzICsyNDQxLDExIEBACiAgICAgIHRyYW5zbGF0ZV9fZG9jX199LAogICAgIHsidXBwZXIiLCAoUHlDRnVuY3Rpb24pc3RyaW5nbGliX3VwcGVyLCBNRVRIX05PQVJHUywgX1B5X3VwcGVyX19kb2NfX30sCiAgICAgeyJ6ZmlsbCIsIChQeUNGdW5jdGlvbilzdHJpbmdsaWJfemZpbGwsIE1FVEhfVkFSQVJHUywgemZpbGxfX2RvY19ffSwKLSAgICB7Il9fc2l6ZW9mX18iLCAoUHlDRnVuY3Rpb24pYnl0ZXNfc2l6ZW9mLCBNRVRIX05PQVJHUywKLSAgICAgc2l6ZW9mX19kb2NfX30sCiAgICAge05VTEwsICAgICBOVUxMfSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZW50aW5lbCAqLwogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLXN0cl9zdWJ0eXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CitieXRlc19zdWJ0eXBlX25ldyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcyk7CiAKIHN0YXRpYyBQeU9iamVjdCAqCiBieXRlc19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC0yNTMzLDcgKzI0NjAsNyBAQAogICAgIF9QeV9JREVOVElGSUVSKF9fYnl0ZXNfXyk7CiAKICAgICBpZiAodHlwZSAhPSAmUHlCeXRlc19UeXBlKQotICAgICAgICByZXR1cm4gc3RyX3N1YnR5cGVfbmV3KHR5cGUsIGFyZ3MsIGt3ZHMpOworICAgICAgICByZXR1cm4gYnl0ZXNfc3VidHlwZV9uZXcodHlwZSwgYXJncywga3dkcyk7CiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxPc3M6Ynl0ZXMiLCBrd2xpc3QsICZ4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmNvZGluZywgJmVycm9ycykpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjU2MSw2ICsyNDg4LDEzIEBACiAgICAgICAgIHJldHVybiBuZXc7CiAgICAgfQogCisgICAgLyogSWYgaXQncyBub3QgdW5pY29kZSwgdGhlcmUgY2FuJ3QgYmUgZW5jb2Rpbmcgb3IgZXJyb3JzICovCisgICAgaWYgKGVuY29kaW5nICE9IE5VTEwgfHwgZXJyb3JzICE9IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJlbmNvZGluZyBvciBlcnJvcnMgd2l0aG91dCBhIHN0cmluZyBhcmd1bWVudCIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICAvKiBXZSdkIGxpa2UgdG8gY2FsbCBQeU9iamVjdF9CeXRlcyBoZXJlLCBidXQgd2UgbmVlZCB0byBjaGVjayBmb3IgYW4KICAgICAgICBpbnRlZ2VyIGFyZ3VtZW50IGJlZm9yZSBkZWZlcnJpbmcgdG8gUHlCeXRlc19Gcm9tT2JqZWN0LCBzb21ldGhpbmcKICAgICAgICBQeU9iamVjdF9CeXRlcyBkb2Vzbid0IGRvLiAqLwpAQCAtMjYwMiwxMyArMjUzNiw2IEBACiAgICAgICAgIHJldHVybiBuZXc7CiAgICAgfQogCi0gICAgLyogSWYgaXQncyBub3QgdW5pY29kZSwgdGhlcmUgY2FuJ3QgYmUgZW5jb2Rpbmcgb3IgZXJyb3JzICovCi0gICAgaWYgKGVuY29kaW5nICE9IE5VTEwgfHwgZXJyb3JzICE9IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICJlbmNvZGluZyBvciBlcnJvcnMgd2l0aG91dCBhIHN0cmluZyBhcmd1bWVudCIpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICByZXR1cm4gUHlCeXRlc19Gcm9tT2JqZWN0KHgpOwogfQogCkBAIC0yNjk2LDcgKzI2MjMsNyBAQAogICAgIH0KIAogICAgIC8qIEZvciBpdGVyYXRvciB2ZXJzaW9uLCBjcmVhdGUgYSBzdHJpbmcgb2JqZWN0IGFuZCByZXNpemUgYXMgbmVlZGVkICovCi0gICAgc2l6ZSA9IF9QeU9iamVjdF9MZW5ndGhIaW50KHgsIDY0KTsKKyAgICBzaXplID0gUHlPYmplY3RfTGVuZ3RoSGludCh4LCA2NCk7CiAgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgLyogQWxsb2NhdGUgYW4gZXh0cmEgYnl0ZSB0byBwcmV2ZW50IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKSBmcm9tCkBAIC0yNzU0LDE0ICsyNjgxLDEzIEBACiAgICAgcmV0dXJuIG5ldzsKIAogICBlcnJvcjoKLSAgICAvKiBFcnJvciBoYW5kbGluZyB3aGVuIG5ldyAhPSBOVUxMICovCiAgICAgUHlfWERFQ1JFRihpdCk7Ci0gICAgUHlfREVDUkVGKG5ldyk7CisgICAgUHlfWERFQ1JFRihuZXcpOwogICAgIHJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotc3RyX3N1YnR5cGVfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorYnl0ZXNfc3VidHlwZV9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlPYmplY3QgKnRtcCwgKnBuZXc7CiAgICAgUHlfc3NpemVfdCBuOwpAQCAtMjc3MCw3ICsyNjk2LDcgQEAKICAgICB0bXAgPSBieXRlc19uZXcoJlB5Qnl0ZXNfVHlwZSwgYXJncywga3dkcyk7CiAgICAgaWYgKHRtcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBhc3NlcnQoUHlCeXRlc19DaGVja0V4YWN0KHRtcCkpOworICAgIGFzc2VydChQeUJ5dGVzX0NoZWNrKHRtcCkpOwogICAgIG4gPSBQeUJ5dGVzX0dFVF9TSVpFKHRtcCk7CiAgICAgcG5ldyA9IHR5cGUtPnRwX2FsbG9jKHR5cGUsIG4pOwogICAgIGlmIChwbmV3ICE9IE5VTEwpIHsKQEAgLTI4NDIsOSArMjc2OCw5IEBACiB9OwogCiB2b2lkCi1QeUJ5dGVzX0NvbmNhdChyZWdpc3RlciBQeU9iamVjdCAqKnB2LCByZWdpc3RlciBQeU9iamVjdCAqdykKK1B5Qnl0ZXNfQ29uY2F0KFB5T2JqZWN0ICoqcHYsIFB5T2JqZWN0ICp3KQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OworICAgIFB5T2JqZWN0ICp2OwogICAgIGFzc2VydChwdiAhPSBOVUxMKTsKICAgICBpZiAoKnB2ID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NTgsNyArMjc4NCw3IEBACiB9CiAKIHZvaWQKLVB5Qnl0ZXNfQ29uY2F0QW5kRGVsKHJlZ2lzdGVyIFB5T2JqZWN0ICoqcHYsIHJlZ2lzdGVyIFB5T2JqZWN0ICp3KQorUHlCeXRlc19Db25jYXRBbmREZWwoUHlPYmplY3QgKipwdiwgUHlPYmplY3QgKncpCiB7CiAgICAgUHlCeXRlc19Db25jYXQocHYsIHcpOwogICAgIFB5X1hERUNSRUYodyk7CkBAIC0yODgyLDggKzI4MDgsOCBAQAogaW50CiBfUHlCeXRlc19SZXNpemUoUHlPYmplY3QgKipwdiwgUHlfc3NpemVfdCBuZXdzaXplKQogewotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5Qnl0ZXNPYmplY3QgKnN2OworICAgIFB5T2JqZWN0ICp2OworICAgIFB5Qnl0ZXNPYmplY3QgKnN2OwogICAgIHYgPSAqcHY7CiAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKHYpIHx8IFB5X1JFRkNOVCh2KSAhPSAxIHx8IG5ld3NpemUgPCAwKSB7CiAgICAgICAgICpwdiA9IDA7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NsYXNzb2JqZWN0LmMgYi9PYmplY3RzL2NsYXNzb2JqZWN0LmMKaW5kZXggY2RjOWIxYy4uMGMwYmQ0NyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9jbGFzc29iamVjdC5jCisrKyBiL09iamVjdHMvY2xhc3NvYmplY3QuYwpAQCAtNDQsNyArNDQsNyBAQAogUHlPYmplY3QgKgogUHlNZXRob2RfTmV3KFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqc2VsZikKIHsKLSAgICByZWdpc3RlciBQeU1ldGhvZE9iamVjdCAqaW07CisgICAgUHlNZXRob2RPYmplY3QgKmltOwogICAgIGlmIChzZWxmID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNTIsNyArNTIsNyBAQAogICAgIGltID0gZnJlZV9saXN0OwogICAgIGlmIChpbSAhPSBOVUxMKSB7CiAgICAgICAgIGZyZWVfbGlzdCA9IChQeU1ldGhvZE9iamVjdCAqKShpbS0+aW1fc2VsZik7Ci0gICAgICAgIFB5T2JqZWN0X0lOSVQoaW0sICZQeU1ldGhvZF9UeXBlKTsKKyAgICAgICAgKHZvaWQpUHlPYmplY3RfSU5JVChpbSwgJlB5TWV0aG9kX1R5cGUpOwogICAgICAgICBudW1mcmVlLS07CiAgICAgfQogICAgIGVsc2UgewpAQCAtNjksNiArNjksMzAgQEAKICAgICByZXR1cm4gKFB5T2JqZWN0ICopaW07CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCittZXRob2RfcmVkdWNlKFB5TWV0aG9kT2JqZWN0ICppbSkKK3sKKyAgICBQeU9iamVjdCAqc2VsZiA9IFB5TWV0aG9kX0dFVF9TRUxGKGltKTsKKyAgICBQeU9iamVjdCAqZnVuYyA9IFB5TWV0aG9kX0dFVF9GVU5DVElPTihpbSk7CisgICAgUHlPYmplY3QgKmJ1aWx0aW5zOworICAgIFB5T2JqZWN0ICpnZXRhdHRyOworICAgIFB5T2JqZWN0ICpmdW5jbmFtZTsKKyAgICBfUHlfSURFTlRJRklFUihnZXRhdHRyKTsKKworICAgIGZ1bmNuYW1lID0gX1B5T2JqZWN0X0dldEF0dHJJZChmdW5jLCAmUHlJZF9fX25hbWVfXyk7CisgICAgaWYgKGZ1bmNuYW1lID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGJ1aWx0aW5zID0gUHlFdmFsX0dldEJ1aWx0aW5zKCk7CisgICAgZ2V0YXR0ciA9IF9QeURpY3RfR2V0SXRlbUlkKGJ1aWx0aW5zLCAmUHlJZF9nZXRhdHRyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPTikiLCBnZXRhdHRyLCBzZWxmLCBmdW5jbmFtZSk7Cit9CisKK3N0YXRpYyBQeU1ldGhvZERlZiBtZXRob2RfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiltZXRob2RfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiAvKiBEZXNjcmlwdG9ycyBmb3IgUHlNZXRob2QgYXR0cmlidXRlcyAqLwogCiAvKiBpbV9mdW5jIGFuZCBpbV9zZWxmIGFyZSBzdG9yZWQgaW4gdGhlIFB5TWV0aG9kIG9iamVjdCAqLwpAQCAtMTY0LDcgKzE4OCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1tZXRob2RfZGVhbGxvYyhyZWdpc3RlciBQeU1ldGhvZE9iamVjdCAqaW0pCittZXRob2RfZGVhbGxvYyhQeU1ldGhvZE9iamVjdCAqaW0pCiB7CiAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soaW0pOwogICAgIGlmIChpbS0+aW1fd2Vha3JlZmxpc3QgIT0gTlVMTCkKQEAgLTM2Nyw3ICszOTEsNyBAQAogICAgIG9mZnNldG9mKFB5TWV0aG9kT2JqZWN0LCBpbV93ZWFrcmVmbGlzdCksIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIG1ldGhvZF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIG1ldGhvZF9tZW1iZXJsaXN0LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIG1ldGhvZF9nZXRzZXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC01MDksNyArNTMzLDcgQEAKIAogc3RhdGljIFB5T2JqZWN0ICoKIGluc3RhbmNlbWV0aG9kX2Rlc2NyX2dldChQeU9iamVjdCAqZGVzY3IsIFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICp0eXBlKSB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKmZ1bmMgPSBQeUluc3RhbmNlTWV0aG9kX0dFVF9GVU5DVElPTihkZXNjcik7CisgICAgUHlPYmplY3QgKmZ1bmMgPSBQeUluc3RhbmNlTWV0aG9kX0dFVF9GVU5DVElPTihkZXNjcik7CiAgICAgaWYgKG9iaiA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0lOQ1JFRihmdW5jKTsKICAgICAgICAgcmV0dXJuIGZ1bmM7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NvZGVvYmplY3QuYyBiL09iamVjdHMvY29kZW9iamVjdC5jCmluZGV4IDk3MTNmNjEuLjM1M2Y0MTQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY29kZW9iamVjdC5jCisrKyBiL09iamVjdHMvY29kZW9iamVjdC5jCkBAIC03NCw2ICs3NCwxMSBAQAogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCisgICAgLyogRW5zdXJlIHRoYXQgdGhlIGZpbGVuYW1lIGlzIGEgcmVhZHkgVW5pY29kZSBzdHJpbmcgKi8KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKGZpbGVuYW1lKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgbl9jZWxsdmFycyA9IFB5VHVwbGVfR0VUX1NJWkUoY2VsbHZhcnMpOwogICAgIGludGVybl9zdHJpbmdzKG5hbWVzKTsKICAgICBpbnRlcm5fc3RyaW5ncyh2YXJuYW1lcyk7CmRpZmYgLS1naXQgYS9PYmplY3RzL2NvbXBsZXhvYmplY3QuYyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCmluZGV4IGIwOGFhNmYuLjdhYWFlYWIgMTAwNjQ0Ci0tLSBhL09iamVjdHMvY29tcGxleG9iamVjdC5jCisrKyBiL09iamVjdHMvY29tcGxleG9iamVjdC5jCkBAIC03OCw3ICs3OCw3IEBACiAgICAgIGNvbnN0IGRvdWJsZSBhYnNfYnJlYWwgPSBiLnJlYWwgPCAwID8gLWIucmVhbCA6IGIucmVhbDsKICAgICAgY29uc3QgZG91YmxlIGFic19iaW1hZyA9IGIuaW1hZyA8IDAgPyAtYi5pbWFnIDogYi5pbWFnOwogCi0gICAgIGlmIChhYnNfYnJlYWwgPj0gYWJzX2JpbWFnKSB7CisgICAgaWYgKGFic19icmVhbCA+PSBhYnNfYmltYWcpIHsKICAgICAgICAgLyogZGl2aWRlIHRvcHMgYW5kIGJvdHRvbSBieSBiLnJlYWwgKi8KICAgICAgICAgaWYgKGFic19icmVhbCA9PSAwLjApIHsKICAgICAgICAgICAgIGVycm5vID0gRURPTTsKQEAgLTkxLDcgKzkxLDcgQEAKICAgICAgICAgICAgIHIuaW1hZyA9IChhLmltYWcgLSBhLnJlYWwgKiByYXRpbykgLyBkZW5vbTsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlIGlmIChhYnNfYmltYWcgPj0gYWJzX2JyZWFsKSB7CiAgICAgICAgIC8qIGRpdmlkZSB0b3BzIGFuZCBib3R0b20gYnkgYi5pbWFnICovCiAgICAgICAgIGNvbnN0IGRvdWJsZSByYXRpbyA9IGIucmVhbCAvIGIuaW1hZzsKICAgICAgICAgY29uc3QgZG91YmxlIGRlbm9tID0gYi5yZWFsICogcmF0aW8gKyBiLmltYWc7CkBAIC05OSw2ICs5OSwxMCBAQAogICAgICAgICByLnJlYWwgPSAoYS5yZWFsICogcmF0aW8gKyBhLmltYWcpIC8gZGVub207CiAgICAgICAgIHIuaW1hZyA9IChhLmltYWcgKiByYXRpbyAtIGEucmVhbCkgLyBkZW5vbTsKICAgICB9CisgICAgZWxzZSB7CisgICAgICAgIC8qIEF0IGxlYXN0IG9uZSBvZiBiLnJlYWwgb3IgYi5pbWFnIGlzIGEgTmFOICovCisgICAgICAgIHIucmVhbCA9IHIuaW1hZyA9IFB5X05BTjsKKyAgICB9CiAgICAgcmV0dXJuIHI7CiB9CiAKQEAgLTIxMSwxMyArMjE1LDEzIEBACiBQeU9iamVjdCAqCiBQeUNvbXBsZXhfRnJvbUNDb21wbGV4KFB5X2NvbXBsZXggY3ZhbCkKIHsKLSAgICByZWdpc3RlciBQeUNvbXBsZXhPYmplY3QgKm9wOworICAgIFB5Q29tcGxleE9iamVjdCAqb3A7CiAKICAgICAvKiBJbmxpbmUgUHlPYmplY3RfTmV3ICovCiAgICAgb3AgPSAoUHlDb21wbGV4T2JqZWN0ICopIFB5T2JqZWN0X01BTExPQyhzaXplb2YoUHlDb21wbGV4T2JqZWN0KSk7CiAgICAgaWYgKG9wID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIFB5T2JqZWN0X0lOSVQob3AsICZQeUNvbXBsZXhfVHlwZSk7CisgICAgKHZvaWQpUHlPYmplY3RfSU5JVChvcCwgJlB5Q29tcGxleF9UeXBlKTsKICAgICBvcC0+Y3ZhbCA9IGN2YWw7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBvcDsKIH0KQEAgLTI3MSw2ICsyNzUsMTIgQEAKICAgICBpZiAoZikgewogICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhmLCBOVUxMKTsKICAgICAgICAgUHlfREVDUkVGKGYpOworICAgICAgICBpZiAocmVzICE9IE5VTEwgJiYgIVB5Q29tcGxleF9DaGVjayhyZXMpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJfX2NvbXBsZXhfXyBzaG91bGQgcmV0dXJuIGEgY29tcGxleCBvYmplY3QiKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlczsKICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yOTYsMTIgKzMwNiw2IEBACiAgICAgbmV3b3AgPSB0cnlfY29tcGxleF9zcGVjaWFsX21ldGhvZChvcCk7CiAKICAgICBpZiAobmV3b3ApIHsKLSAgICAgICAgaWYgKCFQeUNvbXBsZXhfQ2hlY2sobmV3b3ApKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICJfX2NvbXBsZXhfXyBzaG91bGQgcmV0dXJuIGEgY29tcGxleCBvYmplY3QiKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdvcCk7Ci0gICAgICAgICAgICByZXR1cm4gY3Y7Ci0gICAgICAgIH0KICAgICAgICAgY3YgPSAoKFB5Q29tcGxleE9iamVjdCAqKW5ld29wKS0+Y3ZhbDsKICAgICAgICAgUHlfREVDUkVGKG5ld29wKTsKICAgICAgICAgcmV0dXJuIGN2OwpAQCAtNzA1LDcgKzcwOSw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5Q29tcGxleF9Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTc3Miw5ICs3NzYsMTAgQEAKICAgICAgICAgaWYgKHMgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5T2JqZWN0X0FzQ2hhckJ1ZmZlcih2LCAmcywgJmxlbikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjb21wbGV4KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciIpOworICAgIGVsc2UgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgImNvbXBsZXgoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtOTUzLDggKzk1OCw5IEBACiAgICAgICAgIG5iaSA9IGktPm9iX3R5cGUtPnRwX2FzX251bWJlcjsKICAgICBpZiAobmJyID09IE5VTEwgfHwgbmJyLT5uYl9mbG9hdCA9PSBOVUxMIHx8CiAgICAgICAgICgoaSAhPSBOVUxMKSAmJiAobmJpID09IE5VTEwgfHwgbmJpLT5uYl9mbG9hdCA9PSBOVUxMKSkpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAiY29tcGxleCgpIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgb3IgYSBudW1iZXIiKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICJjb21wbGV4KCkgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBvciBhIG51bWJlciwgbm90ICclLjIwMHMnIiwKKyAgICAgICAgICAgIFB5X1RZUEUociktPnRwX25hbWUpOwogICAgICAgICBpZiAob3duX3IpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihyKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9kZXNjcm9iamVjdC5jIGIvT2JqZWN0cy9kZXNjcm9iamVjdC5jCmluZGV4IGJhOThhMzAuLjYxNWY0OTkgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZGVzY3JvYmplY3QuYworKysgYi9PYmplY3RzL2Rlc2Nyb2JqZWN0LmMKQEAgLTExNSw3ICsxMTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKChQeVR5cGVPYmplY3QgKil0eXBlKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3KGRlc2NyLT5kX21ldGhvZCwgdHlwZSk7CisgICAgcmV0dXJuIFB5Q0Z1bmN0aW9uX05ld0V4KGRlc2NyLT5kX21ldGhvZCwgdHlwZSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMjUsNyArMTI1LDcgQEAKIAogICAgIGlmIChkZXNjcl9jaGVjaygoUHlEZXNjck9iamVjdCAqKWRlc2NyLCBvYmosICZyZXMpKQogICAgICAgICByZXR1cm4gcmVzOwotICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCBvYmopOworICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChkZXNjci0+ZF9tZXRob2QsIG9iaiwgTlVMTCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0yMzksNyArMjM5LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ldyhkZXNjci0+ZF9tZXRob2QsIHNlbGYpOworICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXdFeChkZXNjci0+ZF9tZXRob2QsIHNlbGYsIE5VTEwpOwogICAgIGlmIChmdW5jID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGFyZ3MgPSBQeVR1cGxlX0dldFNsaWNlKGFyZ3MsIDEsIGFyZ2MpOwpAQCAtMjkyLDcgKzI5Miw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcoZGVzY3ItPmRfbWV0aG9kLCBzZWxmKTsKKyAgICBmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgoZGVzY3ItPmRfbWV0aG9kLCBzZWxmLCBOVUxMKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhcmdzID0gUHlUdXBsZV9HZXRTbGljZShhcmdzLCAxLCBhcmdjKTsKQEAgLTM1MywxMSArMzUzLDEzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogbWV0aG9kX2dldF9kb2MoUHlNZXRob2REZXNjck9iamVjdCAqZGVzY3IsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgaWYgKGRlc2NyLT5kX21ldGhvZC0+bWxfZG9jID09IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9Ci0gICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGRlc2NyLT5kX21ldGhvZC0+bWxfZG9jKTsKKyAgICByZXR1cm4gX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2MoZGVzY3ItPmRfbWV0aG9kLT5tbF9uYW1lLCBkZXNjci0+ZF9tZXRob2QtPm1sX2RvYyk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCittZXRob2RfZ2V0X3RleHRfc2lnbmF0dXJlKFB5TWV0aG9kRGVzY3JPYmplY3QgKmRlc2NyLCB2b2lkICpjbG9zdXJlKQoreworICAgIHJldHVybiBfUHlUeXBlX0dldFRleHRTaWduYXR1cmVGcm9tSW50ZXJuYWxEb2MoZGVzY3ItPmRfbWV0aG9kLT5tbF9uYW1lLCBkZXNjci0+ZF9tZXRob2QtPm1sX2RvYyk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0zOTgsNiArNDAwLDI0IEBACiAgICAgcmV0dXJuIGRlc2NyLT5kX3F1YWxuYW1lOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZGVzY3JfcmVkdWNlKFB5RGVzY3JPYmplY3QgKmRlc2NyKQoreworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBfUHlfSURFTlRJRklFUihnZXRhdHRyKTsKKworICAgIGJ1aWx0aW5zID0gUHlFdmFsX0dldEJ1aWx0aW5zKCk7CisgICAgZ2V0YXR0ciA9IF9QeURpY3RfR2V0SXRlbUlkKGJ1aWx0aW5zLCAmUHlJZF9nZXRhdHRyKTsKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTyhPTykiLCBnZXRhdHRyLCBQeURlc2NyX1RZUEUoZGVzY3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGVzY3JfTkFNRShkZXNjcikpOworfQorCitzdGF0aWMgUHlNZXRob2REZWYgZGVzY3JfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbilkZXNjcl9yZWR1Y2UsIE1FVEhfTk9BUkdTLCBOVUxMfSwKKyAgICB7TlVMTCwgTlVMTH0KK307CisKIHN0YXRpYyBQeU1lbWJlckRlZiBkZXNjcl9tZW1iZXJzW10gPSB7CiAgICAgeyJfX29iamNsYXNzX18iLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlEZXNjck9iamVjdCwgZF90eXBlKSwgUkVBRE9OTFl9LAogICAgIHsiX19uYW1lX18iLCBUX09CSkVDVCwgb2Zmc2V0b2YoUHlEZXNjck9iamVjdCwgZF9uYW1lKSwgUkVBRE9OTFl9LApAQCAtNDA3LDYgKzQyNyw3IEBACiBzdGF0aWMgUHlHZXRTZXREZWYgbWV0aG9kX2dldHNldFtdID0gewogICAgIHsiX19kb2NfXyIsIChnZXR0ZXIpbWV0aG9kX2dldF9kb2N9LAogICAgIHsiX19xdWFsbmFtZV9fIiwgKGdldHRlcilkZXNjcl9nZXRfcXVhbG5hbWV9LAorICAgIHsiX190ZXh0X3NpZ25hdHVyZV9fIiwgKGdldHRlciltZXRob2RfZ2V0X3RleHRfc2lnbmF0dXJlfSwKICAgICB7MH0KIH07CiAKQEAgLTQ0NSwxNiArNDY2LDE5IEBACiBzdGF0aWMgUHlPYmplY3QgKgogd3JhcHBlcmRlc2NyX2dldF9kb2MoUHlXcmFwcGVyRGVzY3JPYmplY3QgKmRlc2NyLCB2b2lkICpjbG9zdXJlKQogewotICAgIGlmIChkZXNjci0+ZF9iYXNlLT5kb2MgPT0gTlVMTCkgewotICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7Ci0gICAgICAgIHJldHVybiBQeV9Ob25lOwotICAgIH0KLSAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoZGVzY3ItPmRfYmFzZS0+ZG9jKTsKKyAgICByZXR1cm4gX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2MoZGVzY3ItPmRfYmFzZS0+bmFtZSwgZGVzY3ItPmRfYmFzZS0+ZG9jKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3dyYXBwZXJkZXNjcl9nZXRfdGV4dF9zaWduYXR1cmUoUHlXcmFwcGVyRGVzY3JPYmplY3QgKmRlc2NyLCB2b2lkICpjbG9zdXJlKQoreworICAgIHJldHVybiBfUHlUeXBlX0dldFRleHRTaWduYXR1cmVGcm9tSW50ZXJuYWxEb2MoZGVzY3ItPmRfYmFzZS0+bmFtZSwgZGVzY3ItPmRfYmFzZS0+ZG9jKTsKIH0KIAogc3RhdGljIFB5R2V0U2V0RGVmIHdyYXBwZXJkZXNjcl9nZXRzZXRbXSA9IHsKICAgICB7Il9fZG9jX18iLCAoZ2V0dGVyKXdyYXBwZXJkZXNjcl9nZXRfZG9jfSwKICAgICB7Il9fcXVhbG5hbWVfXyIsIChnZXR0ZXIpZGVzY3JfZ2V0X3F1YWxuYW1lfSwKKyAgICB7Il9fdGV4dF9zaWduYXR1cmVfXyIsIChnZXR0ZXIpd3JhcHBlcmRlc2NyX2dldF90ZXh0X3NpZ25hdHVyZX0sCiAgICAgezB9CiB9OwogCkBAIC00OTQsNyArNTE4LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGRlc2NyX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIGRlc2NyX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIG1ldGhvZF9nZXRzZXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC01MzIsNyArNTU2LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGRlc2NyX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIGRlc2NyX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIG1ldGhvZF9nZXRzZXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC01NjksNyArNTkzLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGRlc2NyX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIGRlc2NyX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIG1lbWJlcl9nZXRzZXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC02NDMsNyArNjY3LDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGRlc2NyX21ldGhvZHMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIGRlc2NyX21lbWJlcnMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIHdyYXBwZXJkZXNjcl9nZXRzZXQsICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC0xMDA5LDcgKzEwMzMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHdyYXBwZXJfcmljaGNvbXBhcmUoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiLCBpbnQgb3ApCiB7Ci0gICAgaW50IHJlc3VsdDsKKyAgICBQeV9pbnRwdHJfdCByZXN1bHQ7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgUHlXcmFwcGVyRGVzY3JPYmplY3QgKmFfZGVzY3IsICpiX2Rlc2NyOwogCkBAIC0xMDg1LDYgKzExMDksMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cC0+c2VsZik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCit3cmFwcGVyX3JlZHVjZSh3cmFwcGVyb2JqZWN0ICp3cCkKK3sKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgUHlPYmplY3QgKmdldGF0dHI7CisgICAgX1B5X0lERU5USUZJRVIoZ2V0YXR0cik7CisKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT08pIiwgZ2V0YXR0ciwgd3AtPnNlbGYsIFB5RGVzY3JfTkFNRSh3cC0+ZGVzY3IpKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIHdyYXBwZXJfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbil3cmFwcGVyX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKwogc3RhdGljIFB5TWVtYmVyRGVmIHdyYXBwZXJfbWVtYmVyc1tdID0gewogICAgIHsiX19zZWxmX18iLCBUX09CSkVDVCwgb2Zmc2V0b2Yod3JhcHBlcm9iamVjdCwgc2VsZiksIFJFQURPTkxZfSwKICAgICB7MH0KQEAgLTExMDgsMTcgKzExNDksMTUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXdyYXBwZXJfZG9jKHdyYXBwZXJvYmplY3QgKndwKQord3JhcHBlcl9kb2Mod3JhcHBlcm9iamVjdCAqd3AsIHZvaWQgKmNsb3N1cmUpCiB7Ci0gICAgY29uc3QgY2hhciAqcyA9IHdwLT5kZXNjci0+ZF9iYXNlLT5kb2M7CisgICAgcmV0dXJuIF9QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKHdwLT5kZXNjci0+ZF9iYXNlLT5uYW1lLCB3cC0+ZGVzY3ItPmRfYmFzZS0+ZG9jKTsKK30KIAotICAgIGlmIChzID09IE5VTEwpIHsKLSAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgICAgICByZXR1cm4gUHlfTm9uZTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhzKTsKLSAgICB9CitzdGF0aWMgUHlPYmplY3QgKgord3JhcHBlcl90ZXh0X3NpZ25hdHVyZSh3cmFwcGVyb2JqZWN0ICp3cCwgdm9pZCAqY2xvc3VyZSkKK3sKKyAgICByZXR1cm4gX1B5VHlwZV9HZXRUZXh0U2lnbmF0dXJlRnJvbUludGVybmFsRG9jKHdwLT5kZXNjci0+ZF9iYXNlLT5uYW1lLCB3cC0+ZGVzY3ItPmRfYmFzZS0+ZG9jKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTExMzIsNiArMTE3MSw3IEBACiAgICAgeyJfX25hbWVfXyIsIChnZXR0ZXIpd3JhcHBlcl9uYW1lfSwKICAgICB7Il9fcXVhbG5hbWVfXyIsIChnZXR0ZXIpd3JhcHBlcl9xdWFsbmFtZX0sCiAgICAgeyJfX2RvY19fIiwgKGdldHRlcil3cmFwcGVyX2RvY30sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKXdyYXBwZXJfdGV4dF9zaWduYXR1cmV9LAogICAgIHswfQogfTsKIApAQCAtMTE5Myw3ICsxMjMzLDcgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIHdyYXBwZXJfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwogICAgIHdyYXBwZXJfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWVtYmVycyAqLwogICAgIHdyYXBwZXJfZ2V0c2V0cywgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9iYXNlICovCkBAIC0xMjI4LDExICsxMjY4LDExIEBACiAvKiBBIGJ1aWx0LWluICdwcm9wZXJ0eScgdHlwZSAqLwogCiAvKgotICAgIGNsYXNzIHByb3BlcnR5KG9iamVjdCk6CitjbGFzcyBwcm9wZXJ0eShvYmplY3QpOgogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZnZXQ9Tm9uZSwgZnNldD1Ob25lLCBmZGVsPU5vbmUsIGRvYz1Ob25lKToKICAgICAgICAgaWYgZG9jIGlzIE5vbmUgYW5kIGZnZXQgaXMgbm90IE5vbmUgYW5kIGhhc2F0dHIoZmdldCwgIl9fZG9jX18iKToKLSAgICAgICAgZG9jID0gZmdldC5fX2RvY19fCisgICAgICAgICAgICBkb2MgPSBmZ2V0Ll9fZG9jX18KICAgICAgICAgc2VsZi5fX2dldCA9IGZnZXQKICAgICAgICAgc2VsZi5fX3NldCA9IGZzZXQKICAgICAgICAgc2VsZi5fX2RlbCA9IGZkZWwKQEAgLTEyNDAsMTkgKzEyODAsMTkgQEAKIAogICAgIGRlZiBfX2dldF9fKHNlbGYsIGluc3QsIHR5cGU9Tm9uZSk6CiAgICAgICAgIGlmIGluc3QgaXMgTm9uZToKLSAgICAgICAgcmV0dXJuIHNlbGYKKyAgICAgICAgICAgIHJldHVybiBzZWxmCiAgICAgICAgIGlmIHNlbGYuX19nZXQgaXMgTm9uZToKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsICJ1bnJlYWRhYmxlIGF0dHJpYnV0ZSIKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAidW5yZWFkYWJsZSBhdHRyaWJ1dGUiCiAgICAgICAgIHJldHVybiBzZWxmLl9fZ2V0KGluc3QpCiAKICAgICBkZWYgX19zZXRfXyhzZWxmLCBpbnN0LCB2YWx1ZSk6CiAgICAgICAgIGlmIHNlbGYuX19zZXQgaXMgTm9uZToKLSAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsICJjYW4ndCBzZXQgYXR0cmlidXRlIgorICAgICAgICAgICAgcmFpc2UgQXR0cmlidXRlRXJyb3IsICJjYW4ndCBzZXQgYXR0cmlidXRlIgogICAgICAgICByZXR1cm4gc2VsZi5fX3NldChpbnN0LCB2YWx1ZSkKIAogICAgIGRlZiBfX2RlbGV0ZV9fKHNlbGYsIGluc3QpOgogICAgICAgICBpZiBzZWxmLl9fZGVsIGlzIE5vbmU6Ci0gICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiY2FuJ3QgZGVsZXRlIGF0dHJpYnV0ZSIKKyAgICAgICAgICAgIHJhaXNlIEF0dHJpYnV0ZUVycm9yLCAiY2FuJ3QgZGVsZXRlIGF0dHJpYnV0ZSIKICAgICAgICAgcmV0dXJuIHNlbGYuX19kZWwoaW5zdCkKIAogKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZGljdG9iamVjdC5jIGIvT2JqZWN0cy9kaWN0b2JqZWN0LmMKaW5kZXggOTUzNDg0Yy4uMjU2MTljMSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9kaWN0b2JqZWN0LmMKKysrIGIvT2JqZWN0cy9kaWN0b2JqZWN0LmMKQEAgLTY5LDYgKzY5LDExIEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2VxLmgiCiAKKy8qW2NsaW5pYyBpbnB1dF0KK2NsYXNzIGRpY3QgIlB5RGljdE9iamVjdCAqIiAiJlB5RGljdF9UeXBlIgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWRhMzlhM2VlNWU2YjRiMGQgaW5wdXQ9ZjE1N2E1YTBjZTk1ODlkNl0qLworCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgLyogQ2FjaGVkIGhhc2ggY29kZSBvZiBtZV9rZXkuICovCiAgICAgUHlfaGFzaF90IG1lX2hhc2g7CkBAIC05NSwyMCArMTAwLDYgQEAKIGl0J3MgVVNBQkxFX0ZSQUNUSU9OIChjdXJyZW50bHkgdHdvLXRoaXJkcykgZnVsbC4KICovCiAKLS8qIFNldCBhIGtleSBlcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnQsIHdyYXBwaW5nIGl0IGluIGEKLSAqIHR1cGxlIGF1dG9tYXRpY2FsbHkgc28gdGhhdCB0dXBsZSBrZXlzIGFyZSBub3QgdW5wYWNrZWQgYXMgdGhlCi0gKiBleGNlcHRpb24gYXJndW1lbnRzLiAqLwotc3RhdGljIHZvaWQKLXNldF9rZXlfZXJyb3IoUHlPYmplY3QgKmFyZykKLXsKLSAgICBQeU9iamVjdCAqdHVwOwotICAgIHR1cCA9IFB5VHVwbGVfUGFjaygxLCBhcmcpOwotICAgIGlmICghdHVwKQotICAgICAgICByZXR1cm47IC8qIGNhbGxlciB3aWxsIGV4cGVjdCBlcnJvciB0byBiZSBzZXQgYW55d2F5ICovCi0gICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0tleUVycm9yLCB0dXApOwotICAgIFB5X0RFQ1JFRih0dXApOwotfQotCiAjZGVmaW5lIFBFUlRVUkJfU0hJRlQgNQogCiAvKgpAQCAtMzA1LDkgKzI5Niw5IEBACiAgKiAjZGVmaW5lIFVTQUJMRV9GUkFDVElPTihuKSAoKChuKSA+PiAxKSArICgobikgPj4gMikgLSAoKG4pID4+IDMpKQogKi8KIAotLyogR1JPV1RIX1JBVEUuIEdyb3d0aCByYXRlIHVwb24gaGl0dGluZyBtYXhpbXVtIGxvYWQuIAotICogQ3VycmVudGx5IHNldCB0byB1c2VkKjIgKyBjYXBhY2l0eS8yLiAKLSAqIFRoaXMgbWVhbnMgdGhhdCBkaWN0cyBkb3VibGUgaW4gc2l6ZSB3aGVuIGdyb3dpbmcgd2l0aG91dCBkZWxldGlvbnMsIAorLyogR1JPV1RIX1JBVEUuIEdyb3d0aCByYXRlIHVwb24gaGl0dGluZyBtYXhpbXVtIGxvYWQuCisgKiBDdXJyZW50bHkgc2V0IHRvIHVzZWQqMiArIGNhcGFjaXR5LzIuCisgKiBUaGlzIG1lYW5zIHRoYXQgZGljdHMgZG91YmxlIGluIHNpemUgd2hlbiBncm93aW5nIHdpdGhvdXQgZGVsZXRpb25zLAogICogYnV0IGhhdmUgbW9yZSBoZWFkIHJvb20gd2hlbiB0aGUgbnVtYmVyIG9mIGRlbGV0aW9ucyBpcyBvbiBhIHBhciB3aXRoIHRoZQogICogbnVtYmVyIG9mIGluc2VydGlvbnMuCiAgKiBSYWlzaW5nIHRoaXMgdG8gdXNlZCo0IGRvdWJsZXMgbWVtb3J5IGNvbnN1bXB0aW9uIGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZgpAQCAtMzg5LDYgKzM4MCw3IEBACiBuZXdfZGljdChQeURpY3RLZXlzT2JqZWN0ICprZXlzLCBQeU9iamVjdCAqKnZhbHVlcykKIHsKICAgICBQeURpY3RPYmplY3QgKm1wOworICAgIGFzc2VydChrZXlzICE9IE5VTEwpOwogICAgIGlmIChudW1mcmVlKSB7CiAgICAgICAgIG1wID0gZnJlZV9saXN0Wy0tbnVtZnJlZV07CiAgICAgICAgIGFzc2VydCAobXAgIT0gTlVMTCk7CkBAIC00MzEsNyArNDIzLDEwIEBACiBQeU9iamVjdCAqCiBQeURpY3RfTmV3KHZvaWQpCiB7Ci0gICAgcmV0dXJuIG5ld19kaWN0KG5ld19rZXlzX29iamVjdChQeURpY3RfTUlOU0laRV9DT01CSU5FRCksIE5VTEwpOworICAgIFB5RGljdEtleXNPYmplY3QgKmtleXMgPSBuZXdfa2V5c19vYmplY3QoUHlEaWN0X01JTlNJWkVfQ09NQklORUQpOworICAgIGlmIChrZXlzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBuZXdfZGljdChrZXlzLCBOVUxMKTsKIH0KIAogLyoKQEAgLTQ2MywxMyArNDU4LDEzIEBACiBsb29rZGljdChQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrOworICAgIHNpemVfdCBpOworICAgIHNpemVfdCBwZXJ0dXJiOworICAgIFB5RGljdEtleUVudHJ5ICpmcmVlc2xvdDsKKyAgICBzaXplX3QgbWFzazsKICAgICBQeURpY3RLZXlFbnRyeSAqZXAwOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICplcDsKLSAgICByZWdpc3RlciBpbnQgY21wOworICAgIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBpbnQgY21wOwogICAgIFB5T2JqZWN0ICpzdGFydGtleTsKIAogdG9wOgpAQCAtNTU1LDEyICs1NTAsMTIgQEAKIGxvb2tkaWN0X3VuaWNvZGUoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgICAgICAgICAgUHlfaGFzaF90IGhhc2gsIFB5T2JqZWN0ICoqKnZhbHVlX2FkZHIpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0S2V5RW50cnkgKmZyZWVzbG90OwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IHBlcnR1cmI7CisgICAgUHlEaWN0S2V5RW50cnkgKmZyZWVzbG90OworICAgIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwMCA9ICZtcC0+bWFfa2V5cy0+ZGtfZW50cmllc1swXTsKLSAgICByZWdpc3RlciBQeURpY3RLZXlFbnRyeSAqZXA7CisgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogCiAgICAgLyogTWFrZSBzdXJlIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBoYXZlIHRvIGhhbmRsZSBub24tdW5pY29kZSBrZXlzLAogICAgICAgIGluY2x1ZGluZyBzdWJjbGFzc2VzIG9mIHN0cjsgZS5nLiwgb25lIHJlYXNvbiB0byBzdWJjbGFzcwpAQCAtNjIwLDExICs2MTUsMTEgQEAKIGxvb2tkaWN0X3VuaWNvZGVfbm9kdW1teShQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IHBlcnR1cmI7CisgICAgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXAwID0gJm1wLT5tYV9rZXlzLT5ka19lbnRyaWVzWzBdOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdG8gaGFuZGxlIG5vbi11bmljb2RlIGtleXMsCiAgICAgICAgaW5jbHVkaW5nIHN1YmNsYXNzZXMgb2Ygc3RyOyBlLmcuLCBvbmUgcmVhc29uIHRvIHN1YmNsYXNzCkBAIC02NjUsMTEgKzY2MCwxMSBAQAogbG9va2RpY3Rfc3BsaXQoUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmtleSwKICAgICAgICAgICAgICAgIFB5X2hhc2hfdCBoYXNoLCBQeU9iamVjdCAqKip2YWx1ZV9hZGRyKQogewotICAgIHJlZ2lzdGVyIHNpemVfdCBpOwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNpemVfdCBtYXNrID0gREtfTUFTSyhtcC0+bWFfa2V5cyk7CisgICAgc2l6ZV90IGk7CisgICAgc2l6ZV90IHBlcnR1cmI7CisgICAgc2l6ZV90IG1hc2sgPSBES19NQVNLKG1wLT5tYV9rZXlzKTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXAwID0gJm1wLT5tYV9rZXlzLT5ka19lbnRyaWVzWzBdOwotICAgIHJlZ2lzdGVyIFB5RGljdEtleUVudHJ5ICplcDsKKyAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAKICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkpIHsKICAgICAgICAgZXAgPSBsb29rZGljdChtcCwga2V5LCBoYXNoLCB2YWx1ZV9hZGRyKTsKQEAgLTgxOSwxMyArODE0LDE0IEBACiAgICAgaWYgKGVwID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fCBtcC0+bWFfa2V5cy0+ZGtfbG9va3VwID09IGxvb2tkaWN0KTsKICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgIE1BSU5UQUlOX1RSQUNLSU5HKG1wLCBrZXksIHZhbHVlKTsKICAgICBvbGRfdmFsdWUgPSAqdmFsdWVfYWRkcjsKICAgICBpZiAob2xkX3ZhbHVlICE9IE5VTEwpIHsKICAgICAgICAgYXNzZXJ0KGVwLT5tZV9rZXkgIT0gTlVMTCAmJiBlcC0+bWVfa2V5ICE9IGR1bW15KTsKICAgICAgICAgKnZhbHVlX2FkZHIgPSB2YWx1ZTsKLSAgICAgICAgUHlfREVDUkVGKG9sZF92YWx1ZSk7IC8qIHdoaWNoICoqQ0FOKiogcmUtZW50ZXIgKi8KKyAgICAgICAgUHlfREVDUkVGKG9sZF92YWx1ZSk7IC8qIHdoaWNoICoqQ0FOKiogcmUtZW50ZXIgKHNlZSBpc3N1ZSAjMjI2NTMpICovCiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBpZiAoZXAtPm1lX2tleSA9PSBOVUxMKSB7CkBAIC04NTYsOSArODUyLDggQEAKICAgICAgICAgfQogICAgICAgICBtcC0+bWFfdXNlZCsrOwogICAgICAgICAqdmFsdWVfYWRkciA9IHZhbHVlOworICAgICAgICBhc3NlcnQoZXAtPm1lX2tleSAhPSBOVUxMICYmIGVwLT5tZV9rZXkgIT0gZHVtbXkpOwogICAgIH0KLSAgICBhc3NlcnQoZXAtPm1lX2tleSAhPSBOVUxMICYmIGVwLT5tZV9rZXkgIT0gZHVtbXkpOwotICAgIGFzc2VydChQeVVuaWNvZGVfQ2hlY2tFeGFjdChrZXkpIHx8IG1wLT5tYV9rZXlzLT5ka19sb29rdXAgPT0gbG9va2RpY3QpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xMjM3LDcgKzEyMzIsNyBAQAogICAgIGlmIChlcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCp2YWx1ZV9hZGRyID09IE5VTEwpIHsKLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBvbGRfdmFsdWUgPSAqdmFsdWVfYWRkcjsKQEAgLTEzOTEsNyArMTM4Niw3IEBACiAgICAgICAgIH0KICAgICAgICAgREtfREVDUkVGKGtleXMpOwogICAgIH0KLSAgICBlbHNlIHsKKyAgICBlbHNlIGlmIChrZXlzICE9IE5VTEwpIHsKICAgICAgICAgYXNzZXJ0KGtleXMtPmRrX3JlZmNudCA9PSAxKTsKICAgICAgICAgREtfREVDUkVGKGtleXMpOwogICAgIH0KQEAgLTE0MDcsOSArMTQwMiw5IEBACiBkaWN0X3JlcHIoUHlEaWN0T2JqZWN0ICptcCkKIHsKICAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKnMsICp0ZW1wLCAqY29sb24gPSBOVUxMOwotICAgIFB5T2JqZWN0ICpwaWVjZXMgPSBOVUxMLCAqcmVzdWx0ID0gTlVMTDsKLSAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7CisgICAgUHlPYmplY3QgKmtleSA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CisgICAgaW50IGZpcnN0OwogCiAgICAgaSA9IFB5X1JlcHJFbnRlcigoUHlPYmplY3QgKiltcCk7CiAgICAgaWYgKGkgIT0gMCkgewpAQCAtMTQxNyw3MSArMTQxMiw3MyBAQAogICAgIH0KIAogICAgIGlmIChtcC0+bWFfdXNlZCA9PSAwKSB7Ci0gICAgICAgIHJlc3VsdCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ7fSIpOwotICAgICAgICBnb3RvIERvbmU7CisgICAgICAgIFB5X1JlcHJMZWF2ZSgoUHlPYmplY3QgKiltcCk7CisgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygie30iKTsKICAgICB9CiAKLSAgICBwaWVjZXMgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChwaWVjZXMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKKyAgICAvKiAieyIgKyAiMTogMiIgKyAiLCAzOiA0IiAqIChsZW4gLSAxKSArICJ9IiAqLworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gMSArIDQgKyAoMiArIDQpICogKG1wLT5tYV91c2VkIC0gMSkgKyAxOwogCi0gICAgY29sb24gPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiOiAiKTsKLSAgICBpZiAoY29sb24gPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAneycpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIC8qIERvIHJlcHIoKSBvbiBlYWNoIGtleSt2YWx1ZSBwYWlyLCBhbmQgaW5zZXJ0ICI6ICIgYmV0d2VlbiB0aGVtLgogICAgICAgIE5vdGUgdGhhdCByZXByIG1heSBtdXRhdGUgdGhlIGRpY3QuICovCiAgICAgaSA9IDA7CisgICAgZmlyc3QgPSAxOwogICAgIHdoaWxlIChQeURpY3RfTmV4dCgoUHlPYmplY3QgKiltcCwgJmksICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgaW50IHN0YXR1czsKKyAgICAgICAgUHlPYmplY3QgKnM7CisgICAgICAgIGludCByZXM7CisKICAgICAgICAgLyogUHJldmVudCByZXByIGZyb20gZGVsZXRpbmcga2V5IG9yIHZhbHVlIGR1cmluZyBrZXkgZm9ybWF0LiAqLwogICAgICAgICBQeV9JTkNSRUYoa2V5KTsKICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKKworICAgICAgICBpZiAoIWZpcnN0KSB7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICIsICIsIDIpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIGZpcnN0ID0gMDsKKwogICAgICAgICBzID0gUHlPYmplY3RfUmVwcihrZXkpOwotICAgICAgICBQeVVuaWNvZGVfQXBwZW5kKCZzLCBjb2xvbik7Ci0gICAgICAgIFB5VW5pY29kZV9BcHBlbmRBbmREZWwoJnMsIFB5T2JqZWN0X1JlcHIodmFsdWUpKTsKLSAgICAgICAgUHlfREVDUkVGKGtleSk7Ci0gICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIERvbmU7Ci0gICAgICAgIHN0YXR1cyA9IFB5TGlzdF9BcHBlbmQocGllY2VzLCBzKTsKLSAgICAgICAgUHlfREVDUkVGKHMpOyAgLyogYXBwZW5kIGNyZWF0ZWQgYSBuZXcgcmVmICovCi0gICAgICAgIGlmIChzdGF0dXMgPCAwKQotICAgICAgICAgICAgZ290byBEb25lOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgcmVzID0gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCBzKTsKKyAgICAgICAgUHlfREVDUkVGKHMpOworICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZygmd3JpdGVyLCAiOiAiLCAyKSA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKHZhbHVlKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHJlcyA9IF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcyk7CisgICAgICAgIFB5X0RFQ1JFRihzKTsKKyAgICAgICAgaWYgKHJlcyA8IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIFB5X0NMRUFSKGtleSk7CisgICAgICAgIFB5X0NMRUFSKHZhbHVlKTsKICAgICB9CiAKLSAgICAvKiBBZGQgInt9IiBkZWNvcmF0aW9ucyB0byB0aGUgZmlyc3QgYW5kIGxhc3QgaXRlbXMuICovCi0gICAgYXNzZXJ0KFB5TGlzdF9HRVRfU0laRShwaWVjZXMpID4gMCk7Ci0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ7Iik7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHRlbXAgPSBQeUxpc3RfR0VUX0lURU0ocGllY2VzLCAwKTsKLSAgICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsKCZzLCB0ZW1wKTsKLSAgICBQeUxpc3RfU0VUX0lURU0ocGllY2VzLCAwLCBzKTsKLSAgICBpZiAocyA9PSBOVUxMKQotICAgICAgICBnb3RvIERvbmU7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICd9JykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJ9Iik7Ci0gICAgaWYgKHMgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotICAgIHRlbXAgPSBQeUxpc3RfR0VUX0lURU0ocGllY2VzLCBQeUxpc3RfR0VUX1NJWkUocGllY2VzKSAtIDEpOwotICAgIFB5VW5pY29kZV9BcHBlbmRBbmREZWwoJnRlbXAsIHMpOwotICAgIFB5TGlzdF9TRVRfSVRFTShwaWVjZXMsIFB5TGlzdF9HRVRfU0laRShwaWVjZXMpIC0gMSwgdGVtcCk7Ci0gICAgaWYgKHRlbXAgPT0gTlVMTCkKLSAgICAgICAgZ290byBEb25lOwotCi0gICAgLyogUGFzdGUgdGhlbSBhbGwgdG9nZXRoZXIgd2l0aCAiLCAiIGJldHdlZW4uICovCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOwotICAgIGlmIChzID09IE5VTEwpCi0gICAgICAgIGdvdG8gRG9uZTsKLSAgICByZXN1bHQgPSBQeVVuaWNvZGVfSm9pbihzLCBwaWVjZXMpOwotICAgIFB5X0RFQ1JFRihzKTsKLQotRG9uZToKLSAgICBQeV9YREVDUkVGKHBpZWNlcyk7Ci0gICAgUHlfWERFQ1JFRihjb2xvbik7CiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKW1wKTsKLSAgICByZXR1cm4gcmVzdWx0OworCisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOworCitlcnJvcjoKKyAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbXApOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKKyAgICBQeV9YREVDUkVGKGtleSk7CisgICAgUHlfWERFQ1JFRih2YWx1ZSk7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyBQeV9zc2l6ZV90CkBAIC0xNDkxLDcgKzE0ODgsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9zdWJzY3JpcHQoUHlEaWN0T2JqZWN0ICptcCwgcmVnaXN0ZXIgUHlPYmplY3QgKmtleSkKK2RpY3Rfc3Vic2NyaXB0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpCiB7CiAgICAgUHlPYmplY3QgKnY7CiAgICAgUHlfaGFzaF90IGhhc2g7CkBAIC0xNTIzLDcgKzE1MjAsNyBAQAogICAgICAgICAgICAgZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBzZXRfa2V5X2Vycm9yKGtleSk7CisgICAgICAgIF9QeUVycl9TZXRLZXlFcnJvcihrZXkpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZQpAQCAtMTU0NywxMCArMTU0NCwxMCBAQAogfTsKIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3Rfa2V5cyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9rZXlzKFB5RGljdE9iamVjdCAqbXApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqOworICAgIFB5T2JqZWN0ICp2OworICAgIFB5X3NzaXplX3QgaSwgajsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CiAgICAgUHlfc3NpemVfdCBzaXplLCBuLCBvZmZzZXQ7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CkBAIC0xNTkxLDEwICsxNTg4LDEwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X3ZhbHVlcyhyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF92YWx1ZXMoUHlEaWN0T2JqZWN0ICptcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqdjsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGksIGo7CisgICAgUHlPYmplY3QgKnY7CisgICAgUHlfc3NpemVfdCBpLCBqOwogICAgIFB5X3NzaXplX3Qgc2l6ZSwgbiwgb2Zmc2V0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCkBAIC0xNjMzLDEwICsxNjMwLDEwIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2l0ZW1zKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXApCitkaWN0X2l0ZW1zKFB5RGljdE9iamVjdCAqbXApCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnY7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBqLCBuOworICAgIFB5T2JqZWN0ICp2OworICAgIFB5X3NzaXplX3QgaSwgaiwgbjsKICAgICBQeV9zc2l6ZV90IHNpemUsIG9mZnNldDsKICAgICBQeU9iamVjdCAqaXRlbSwgKmtleTsKICAgICBQeURpY3RLZXlFbnRyeSAqZXA7CkBAIC0xNjk0LDM3ICsxNjkxLDcyIEBACiAgICAgcmV0dXJuIHY7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK0BjbGFzc21ldGhvZAorZGljdC5mcm9ta2V5cworICAgIGl0ZXJhYmxlOiBvYmplY3QKKyAgICB2YWx1ZTogb2JqZWN0PU5vbmUKKyAgICAvCisKK1JldHVybnMgYSBuZXcgZGljdCB3aXRoIGtleXMgZnJvbSBpdGVyYWJsZSBhbmQgdmFsdWVzIGVxdWFsIHRvIHZhbHVlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoZGljdF9mcm9ta2V5c19fZG9jX18sCisiZnJvbWtleXMoJHR5cGUsIGl0ZXJhYmxlLCB2YWx1ZT1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyBhIG5ldyBkaWN0IHdpdGgga2V5cyBmcm9tIGl0ZXJhYmxlIGFuZCB2YWx1ZXMgZXF1YWwgdG8gdmFsdWUuIik7CisKKyNkZWZpbmUgRElDVF9GUk9NS0VZU19NRVRIT0RERUYgICAgXAorICAgIHsiZnJvbWtleXMiLCAoUHlDRnVuY3Rpb24pZGljdF9mcm9ta2V5cywgTUVUSF9WQVJBUkdTfE1FVEhfQ0xBU1MsIGRpY3RfZnJvbWtleXNfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfZnJvbWtleXMoUHlPYmplY3QgKmNscywgUHlPYmplY3QgKmFyZ3MpCitkaWN0X2Zyb21rZXlzX2ltcGwoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUsIFB5T2JqZWN0ICp2YWx1ZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitkaWN0X2Zyb21rZXlzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnNlcTsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqaXRlcmFibGU7CiAgICAgUHlPYmplY3QgKnZhbHVlID0gUHlfTm9uZTsKKworICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgImZyb21rZXlzIiwKKyAgICAgICAgMSwgMiwKKyAgICAgICAgJml0ZXJhYmxlLCAmdmFsdWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gZGljdF9mcm9ta2V5c19pbXBsKHR5cGUsIGl0ZXJhYmxlLCB2YWx1ZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK2RpY3RfZnJvbWtleXNfaW1wbChQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICppdGVyYWJsZSwgUHlPYmplY3QgKnZhbHVlKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU1ZjhkYzBmZmE4NzQwNmYgaW5wdXQ9Yjg1YTY2N2Y5YmY0NjY5ZF0qLworewogICAgIFB5T2JqZWN0ICppdDsgICAgICAgLyogaXRlcihzZXEpICovCiAgICAgUHlPYmplY3QgKmtleTsKICAgICBQeU9iamVjdCAqZDsKICAgICBpbnQgc3RhdHVzOwogCi0gICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZnJvbWtleXMiLCAxLCAyLCAmc2VxLCAmdmFsdWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIGQgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGNscywgTlVMTCk7CisgICAgZCA9IFB5T2JqZWN0X0NhbGxPYmplY3QoKFB5T2JqZWN0ICopdHlwZSwgTlVMTCk7CiAgICAgaWYgKGQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3QoZCkgJiYgKChQeURpY3RPYmplY3QgKilkKS0+bWFfdXNlZCA9PSAwKSB7Ci0gICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChzZXEpKSB7CisgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChpdGVyYWJsZSkpIHsKICAgICAgICAgICAgIFB5RGljdE9iamVjdCAqbXAgPSAoUHlEaWN0T2JqZWN0ICopZDsKICAgICAgICAgICAgIFB5T2JqZWN0ICpvbGR2YWx1ZTsKICAgICAgICAgICAgIFB5X3NzaXplX3QgcG9zID0gMDsKICAgICAgICAgICAgIFB5T2JqZWN0ICprZXk7CiAgICAgICAgICAgICBQeV9oYXNoX3QgaGFzaDsKIAotICAgICAgICAgICAgaWYgKGRpY3RyZXNpemUobXAsIFB5X1NJWkUoc2VxKSkpIHsKKyAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeV9TSVpFKGl0ZXJhYmxlKSkpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHdoaWxlIChfUHlEaWN0X05leHQoc2VxLCAmcG9zLCAma2V5LCAmb2xkdmFsdWUsICZoYXNoKSkgeworICAgICAgICAgICAgd2hpbGUgKF9QeURpY3RfTmV4dChpdGVyYWJsZSwgJnBvcywgJmtleSwgJm9sZHZhbHVlLCAmaGFzaCkpIHsKICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0ZGljdChtcCwga2V5LCBoYXNoLCB2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGQpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3MzIsMTggKzE3NjQsMTggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBkOwogICAgICAgICB9Ci0gICAgICAgIGlmIChQeUFueVNldF9DaGVja0V4YWN0KHNlcSkpIHsKKyAgICAgICAgaWYgKFB5QW55U2V0X0NoZWNrRXhhY3QoaXRlcmFibGUpKSB7CiAgICAgICAgICAgICBQeURpY3RPYmplY3QgKm1wID0gKFB5RGljdE9iamVjdCAqKWQ7CiAgICAgICAgICAgICBQeV9zc2l6ZV90IHBvcyA9IDA7CiAgICAgICAgICAgICBQeU9iamVjdCAqa2V5OwogICAgICAgICAgICAgUHlfaGFzaF90IGhhc2g7CiAKLSAgICAgICAgICAgIGlmIChkaWN0cmVzaXplKG1wLCBQeVNldF9HRVRfU0laRShzZXEpKSkgeworICAgICAgICAgICAgaWYgKGRpY3RyZXNpemUobXAsIFB5U2V0X0dFVF9TSVpFKGl0ZXJhYmxlKSkpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHdoaWxlIChfUHlTZXRfTmV4dEVudHJ5KHNlcSwgJnBvcywgJmtleSwgJmhhc2gpKSB7CisgICAgICAgICAgICB3aGlsZSAoX1B5U2V0X05leHRFbnRyeShpdGVyYWJsZSwgJnBvcywgJmtleSwgJmhhc2gpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGluc2VydGRpY3QobXAsIGtleSwgaGFzaCwgdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNzUzLDcgKzE3ODUsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKHNlcSk7CisgICAgaXQgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZXJhYmxlKTsKICAgICBpZiAoaXQgPT0gTlVMTCl7CiAgICAgICAgIFB5X0RFQ1JFRihkKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xOTA4LDggKzE5NDAsOCBAQAogaW50CiBQeURpY3RfTWVyZ2UoUHlPYmplY3QgKmEsIFB5T2JqZWN0ICpiLCBpbnQgb3ZlcnJpZGUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgKm90aGVyOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeURpY3RPYmplY3QgKm1wLCAqb3RoZXI7CisgICAgUHlfc3NpemVfdCBpLCBuOwogICAgIFB5RGljdEtleUVudHJ5ICplbnRyeTsKIAogICAgIC8qIFdlIGFjY2VwdCBmb3IgdGhlIGFyZ3VtZW50IGVpdGhlciBhIGNvbmNyZXRlIGRpY3Rpb25hcnkgb2JqZWN0LApAQCAtMjAxOCw3ICsyMDUwLDcgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfY29weShyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wKQorZGljdF9jb3B5KFB5RGljdE9iamVjdCAqbXApCiB7CiAgICAgcmV0dXJuIFB5RGljdF9Db3B5KChQeU9iamVjdCopbXApOwogfQpAQCAtMjEzMCwxMyArMjE2MiwxOCBAQAogICAgICAgICBpZiAoYXZhbCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpbnQgY21wOwogICAgICAgICAgICAgUHlPYmplY3QgKmJ2YWw7CisgICAgICAgICAgICBQeU9iamVjdCAqKnZhZGRyOwogICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IGVwLT5tZV9rZXk7CiAgICAgICAgICAgICAvKiB0ZW1wb3JhcmlseSBidW1wIGF2YWwncyByZWZjb3VudCB0byBlbnN1cmUgaXQgc3RheXMKICAgICAgICAgICAgICAgIGFsaXZlIHVudGlsIHdlJ3JlIGRvbmUgd2l0aCBpdCAqLwogICAgICAgICAgICAgUHlfSU5DUkVGKGF2YWwpOwogICAgICAgICAgICAgLyogZGl0dG8gZm9yIGtleSAqLwogICAgICAgICAgICAgUHlfSU5DUkVGKGtleSk7Ci0gICAgICAgICAgICBidmFsID0gUHlEaWN0X0dldEl0ZW1XaXRoRXJyb3IoKFB5T2JqZWN0ICopYiwga2V5KTsKKyAgICAgICAgICAgIC8qIHJldXNlIHRoZSBrbm93biBoYXNoIHZhbHVlICovCisgICAgICAgICAgICBpZiAoKGItPm1hX2tleXMtPmRrX2xvb2t1cCkoYiwga2V5LCBlcC0+bWVfaGFzaCwgJnZhZGRyKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJ2YWwgPSBOVUxMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJ2YWwgPSAqdmFkZHI7CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKICAgICAgICAgICAgIGlmIChidmFsID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoYXZhbCk7CkBAIC0yMTc0LDkgKzIyMTEsMzEgQEAKICAgICByZXR1cm4gcmVzOwogfQogCisvKltjbGluaWMgaW5wdXRdCisKK0Bjb2V4aXN0CitkaWN0Ll9fY29udGFpbnNfXworCisgIGtleTogb2JqZWN0CisgIC8KKworVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoZGljdF9fX2NvbnRhaW5zX19fX2RvY19fLAorIl9fY29udGFpbnNfXygkc2VsZiwga2V5LCAvKVxuIgorIi0tXG4iCisiXG4iCisiVHJ1ZSBpZiBEIGhhcyBhIGtleSBrLCBlbHNlIEZhbHNlLiIpOworCisjZGVmaW5lIERJQ1RfX19DT05UQUlOU19fX01FVEhPRERFRiAgICBcCisgICAgeyJfX2NvbnRhaW5zX18iLCAoUHlDRnVuY3Rpb24pZGljdF9fX2NvbnRhaW5zX18sIE1FVEhfT3xNRVRIX0NPRVhJU1QsIGRpY3RfX19jb250YWluc19fX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2NvbnRhaW5zKHJlZ2lzdGVyIFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICprZXkpCitkaWN0X19fY29udGFpbnNfXyhQeURpY3RPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXkpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9M2NmM2Y4YWFmMmNjNWNjMyBpbnB1dD1iODUyYjJhMTliNTFhYjI0XSovCiB7CisgICAgcmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCA9IHNlbGY7CiAgICAgUHlfaGFzaF90IGhhc2g7CiAgICAgUHlEaWN0S2V5RW50cnkgKmVwOwogICAgIFB5T2JqZWN0ICoqdmFsdWVfYWRkcjsKQEAgLTIxOTQsNyArMjI1Myw3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X2dldChyZWdpc3RlciBQeURpY3RPYmplY3QgKm1wLCBQeU9iamVjdCAqYXJncykKK2RpY3RfZ2V0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICprZXk7CiAgICAgUHlPYmplY3QgKmZhaWxvYmogPSBQeV9Ob25lOwpAQCAtMjIyMiwxOSArMjI4MSwxOSBAQAogICAgIHJldHVybiB2YWw7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1kaWN0X3NldGRlZmF1bHQocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCwgUHlPYmplY3QgKmFyZ3MpCitQeU9iamVjdCAqCitQeURpY3RfU2V0RGVmYXVsdChQeU9iamVjdCAqZCwgUHlPYmplY3QgKmtleSwgUHlPYmplY3QgKmRlZmF1bHRvYmopCiB7Ci0gICAgUHlPYmplY3QgKmtleTsKLSAgICBQeU9iamVjdCAqZmFpbG9iaiA9IFB5X05vbmU7CisgICAgUHlEaWN0T2JqZWN0ICptcCA9IChQeURpY3RPYmplY3QgKilkOwogICAgIFB5T2JqZWN0ICp2YWwgPSBOVUxMOwogICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5RGljdEtleUVudHJ5ICplcDsKICAgICBQeU9iamVjdCAqKnZhbHVlX2FkZHI7CiAKLSAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJzZXRkZWZhdWx0IiwgMSwgMiwgJmtleSwgJmZhaWxvYmopKQorICAgIGlmICghUHlEaWN0X0NoZWNrKGQpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKLQorICAgIH0KICAgICBpZiAoIVB5VW5pY29kZV9DaGVja0V4YWN0KGtleSkgfHwKICAgICAgICAgKGhhc2ggPSAoKFB5QVNDSUlPYmplY3QgKikga2V5KS0+aGFzaCkgPT0gLTEpIHsKICAgICAgICAgaGFzaCA9IFB5T2JqZWN0X0hhc2goa2V5KTsKQEAgLTIyNTIsMjMgKzIzMTEsMzUgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGVwID0gZmluZF9lbXB0eV9zbG90KG1wLCBrZXksIGhhc2gsICZ2YWx1ZV9hZGRyKTsKICAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoZmFpbG9iaik7CisgICAgICAgIFB5X0lOQ1JFRihkZWZhdWx0b2JqKTsKICAgICAgICAgUHlfSU5DUkVGKGtleSk7Ci0gICAgICAgIE1BSU5UQUlOX1RSQUNLSU5HKG1wLCBrZXksIGZhaWxvYmopOworICAgICAgICBNQUlOVEFJTl9UUkFDS0lORyhtcCwga2V5LCBkZWZhdWx0b2JqKTsKICAgICAgICAgZXAtPm1lX2tleSA9IGtleTsKICAgICAgICAgZXAtPm1lX2hhc2ggPSBoYXNoOwotICAgICAgICAqdmFsdWVfYWRkciA9IGZhaWxvYmo7Ci0gICAgICAgIHZhbCA9IGZhaWxvYmo7CisgICAgICAgICp2YWx1ZV9hZGRyID0gZGVmYXVsdG9iajsKKyAgICAgICAgdmFsID0gZGVmYXVsdG9iajsKICAgICAgICAgbXAtPm1hX2tleXMtPmRrX3VzYWJsZS0tOwogICAgICAgICBtcC0+bWFfdXNlZCsrOwogICAgIH0KLSAgICBQeV9JTkNSRUYodmFsKTsKICAgICByZXR1cm4gdmFsOwogfQogCitzdGF0aWMgUHlPYmplY3QgKgorZGljdF9zZXRkZWZhdWx0KFB5RGljdE9iamVjdCAqbXAsIFB5T2JqZWN0ICphcmdzKQoreworICAgIFB5T2JqZWN0ICprZXksICp2YWw7CisgICAgUHlPYmplY3QgKmRlZmF1bHRvYmogPSBQeV9Ob25lOworCisgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAic2V0ZGVmYXVsdCIsIDEsIDIsICZrZXksICZkZWZhdWx0b2JqKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICB2YWwgPSBQeURpY3RfU2V0RGVmYXVsdCgoUHlPYmplY3QgKiltcCwga2V5LCBkZWZhdWx0b2JqKTsKKyAgICBQeV9YSU5DUkVGKHZhbCk7CisgICAgcmV0dXJuIHZhbDsKK30KIAogc3RhdGljIFB5T2JqZWN0ICoKLWRpY3RfY2xlYXIocmVnaXN0ZXIgUHlEaWN0T2JqZWN0ICptcCkKK2RpY3RfY2xlYXIoUHlEaWN0T2JqZWN0ICptcCkKIHsKICAgICBQeURpY3RfQ2xlYXIoKFB5T2JqZWN0ICopbXApOwogICAgIFB5X1JFVFVSTl9OT05FOwpAQCAtMjI5MCw3ICsyMzYxLDcgQEAKICAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZsdCk7CiAgICAgICAgICAgICByZXR1cm4gZGVmbHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fApAQCAtMjMwOCw3ICsyMzc5LDcgQEAKICAgICAgICAgICAgIFB5X0lOQ1JFRihkZWZsdCk7CiAgICAgICAgICAgICByZXR1cm4gZGVmbHQ7CiAgICAgICAgIH0KLSAgICAgICAgc2V0X2tleV9lcnJvcihrZXkpOworICAgICAgICBfUHlFcnJfU2V0S2V5RXJyb3Ioa2V5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgICp2YWx1ZV9hZGRyID0gTlVMTDsKQEAgLTI0NDksOSArMjUyMCw2IEBACiAgICAgcmV0dXJuIHNpemVvZihQeURpY3RLZXlzT2JqZWN0KSArIChES19TSVpFKGtleXMpLTEpICogc2l6ZW9mKFB5RGljdEtleUVudHJ5KTsKIH0KIAotUHlEb2NfU1RSVkFSKGNvbnRhaW5zX19kb2NfXywKLSJELl9fY29udGFpbnNfXyhrKSAtPiBUcnVlIGlmIEQgaGFzIGEga2V5IGssIGVsc2UgRmFsc2UiKTsKLQogUHlEb2NfU1RSVkFSKGdldGl0ZW1fX2RvY19fLCAieC5fX2dldGl0ZW1fXyh5KSA8PT0+IHhbeV0iKTsKIAogUHlEb2NfU1RSVkFSKHNpemVvZl9fZG9jX18sCkBAIC0yNDcyLDE0ICsyNTQwLDEwIEBACiAyLXR1cGxlOyBidXQgcmFpc2UgS2V5RXJyb3IgaWYgRCBpcyBlbXB0eS4iKTsKIAogUHlEb2NfU1RSVkFSKHVwZGF0ZV9fZG9jX18sCi0iRC51cGRhdGUoW0UsIF0qKkYpIC0+IE5vbmUuICBVcGRhdGUgRCBmcm9tIGRpY3QvaXRlcmFibGUgRSBhbmQgRi5cbiIKLSJJZiBFIHByZXNlbnQgYW5kIGhhcyBhIC5rZXlzKCkgbWV0aG9kLCBkb2VzOiAgICAgZm9yIGsgaW4gRTogRFtrXSA9IEVba11cblwKLUlmIEUgcHJlc2VudCBhbmQgbGFja3MgLmtleXMoKSBtZXRob2QsIGRvZXM6ICAgICBmb3IgKGssIHYpIGluIEU6IERba10gPSB2XG5cCi1JbiBlaXRoZXIgY2FzZSwgdGhpcyBpcyBmb2xsb3dlZCBieTogZm9yIGsgaW4gRjogRFtrXSA9IEZba10iKTsKLQotUHlEb2NfU1RSVkFSKGZyb21rZXlzX19kb2NfXywKLSJkaWN0LmZyb21rZXlzKFNbLHZdKSAtPiBOZXcgZGljdCB3aXRoIGtleXMgZnJvbSBTIGFuZCB2YWx1ZXMgZXF1YWwgdG8gdi5cblwKLXYgZGVmYXVsdHMgdG8gTm9uZS4iKTsKKyJELnVwZGF0ZShbRSwgXSoqRikgLT4gTm9uZS4gIFVwZGF0ZSBEIGZyb20gZGljdC9pdGVyYWJsZSBFIGFuZCBGLlxuXAorSWYgRSBpcyBwcmVzZW50IGFuZCBoYXMgYSAua2V5cygpIG1ldGhvZCwgdGhlbiBkb2VzOiAgZm9yIGsgaW4gRTogRFtrXSA9IEVba11cblwKK0lmIEUgaXMgcHJlc2VudCBhbmQgbGFja3MgYSAua2V5cygpIG1ldGhvZCwgdGhlbiBkb2VzOiAgZm9yIGssIHYgaW4gRTogRFtrXSA9IHZcblwKK0luIGVpdGhlciBjYXNlLCB0aGlzIGlzIGZvbGxvd2VkIGJ5OiBmb3IgayBpbiBGOiAgRFtrXSA9IEZba10iKTsKIAogUHlEb2NfU1RSVkFSKGNsZWFyX19kb2NfXywKICJELmNsZWFyKCkgLT4gTm9uZS4gIFJlbW92ZSBhbGwgaXRlbXMgZnJvbSBELiIpOwpAQCAtMjUwMCw4ICsyNTY0LDcgQEAKICAgICAgICAgICAgICAiRC52YWx1ZXMoKSAtPiBhbiBvYmplY3QgcHJvdmlkaW5nIGEgdmlldyBvbiBEJ3MgdmFsdWVzIik7CiAKIHN0YXRpYyBQeU1ldGhvZERlZiBtYXBwX21ldGhvZHNbXSA9IHsKLSAgICB7Il9fY29udGFpbnNfXyIsKFB5Q0Z1bmN0aW9uKWRpY3RfY29udGFpbnMsICAgICBNRVRIX08gfCBNRVRIX0NPRVhJU1QsCi0gICAgIGNvbnRhaW5zX19kb2NfX30sCisgICAgRElDVF9fX0NPTlRBSU5TX19fTUVUSE9EREVGCiAgICAgeyJfX2dldGl0ZW1fXyIsIChQeUNGdW5jdGlvbilkaWN0X3N1YnNjcmlwdCwgICAgICAgIE1FVEhfTyB8IE1FVEhfQ09FWElTVCwKICAgICAgZ2V0aXRlbV9fZG9jX199LAogICAgIHsiX19zaXplb2ZfXyIsICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3Rfc2l6ZW9mLCAgICAgICBNRVRIX05PQVJHUywKQEAgLTI1MjIsOCArMjU4NSw3IEBACiAgICAgdmFsdWVzX19kb2NfX30sCiAgICAgeyJ1cGRhdGUiLCAgICAgICAgICAoUHlDRnVuY3Rpb24pZGljdF91cGRhdGUsICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsCiAgICAgIHVwZGF0ZV9fZG9jX199LAotICAgIHsiZnJvbWtleXMiLCAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RfZnJvbWtleXMsICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0NMQVNTLAotICAgICBmcm9ta2V5c19fZG9jX199LAorICAgIERJQ1RfRlJPTUtFWVNfTUVUSE9EREVGCiAgICAgeyJjbGVhciIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pZGljdF9jbGVhciwgICAgICAgIE1FVEhfTk9BUkdTLAogICAgICBjbGVhcl9fZG9jX199LAogICAgIHsiY29weSIsICAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWRpY3RfY29weSwgICAgICAgICBNRVRIX05PQVJHUywKQEAgLTI1ODAsMjIgKzI2NDIsMjMgQEAKIGRpY3RfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T2JqZWN0ICpzZWxmOworICAgIFB5RGljdE9iamVjdCAqZDsKIAogICAgIGFzc2VydCh0eXBlICE9IE5VTEwgJiYgdHlwZS0+dHBfYWxsb2MgIT0gTlVMTCk7CiAgICAgc2VsZiA9IHR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwotICAgIGlmIChzZWxmICE9IE5VTEwpIHsKLSAgICAgICAgUHlEaWN0T2JqZWN0ICpkID0gKFB5RGljdE9iamVjdCAqKXNlbGY7Ci0gICAgICAgIGQtPm1hX2tleXMgPSBuZXdfa2V5c19vYmplY3QoUHlEaWN0X01JTlNJWkVfQ09NQklORUQpOwotICAgICAgICAvKiBYWFggLSBTaG91bGQgd2UgcmFpc2UgYSBuby1tZW1vcnkgZXJyb3I/ICovCi0gICAgICAgIGlmIChkLT5tYV9rZXlzID09IE5VTEwpIHsKLSAgICAgICAgICAgIERLX0lOQ1JFRihQeV9FTVBUWV9LRVlTKTsKLSAgICAgICAgICAgIGQtPm1hX2tleXMgPSBQeV9FTVBUWV9LRVlTOwotICAgICAgICAgICAgZC0+bWFfdmFsdWVzID0gZW1wdHlfdmFsdWVzOwotICAgICAgICB9Ci0gICAgICAgIGQtPm1hX3VzZWQgPSAwOwotICAgICAgICAvKiBUaGUgb2JqZWN0IGhhcyBiZWVuIGltcGxpY2l0bHkgdHJhY2tlZCBieSB0cF9hbGxvYyAqLwotICAgICAgICBpZiAodHlwZSA9PSAmUHlEaWN0X1R5cGUpCi0gICAgICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhkKTsKKyAgICBpZiAoc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkID0gKFB5RGljdE9iamVjdCAqKXNlbGY7CisKKyAgICAvKiBUaGUgb2JqZWN0IGhhcyBiZWVuIGltcGxpY2l0bHkgdHJhY2tlZCBieSB0cF9hbGxvYyAqLworICAgIGlmICh0eXBlID09ICZQeURpY3RfVHlwZSkKKyAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soZCk7CisKKyAgICBkLT5tYV91c2VkID0gMDsKKyAgICBkLT5tYV9rZXlzID0gbmV3X2tleXNfb2JqZWN0KFB5RGljdF9NSU5TSVpFX0NPTUJJTkVEKTsKKyAgICBpZiAoZC0+bWFfa2V5cyA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZWxmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiBzZWxmOwogfQpAQCAtMjY3MSw4ICsyNzM0LDEwIEBACiB7CiAgICAgUHlPYmplY3QgKmt2OwogICAgIGt2ID0gX1B5VW5pY29kZV9Gcm9tSWQoa2V5KTsgLyogYm9ycm93ZWQgKi8KLSAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICBpZiAoa3YgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIFB5RGljdF9HZXRJdGVtKGRwLCBrdik7CiB9CiAKQEAgLTI2ODMsOCArMjc0OCwxMCBAQAogewogICAgIFB5T2JqZWN0ICprdiwgKnJ2OwogICAgIGt2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoa2V5KTsKLSAgICBpZiAoa3YgPT0gTlVMTCkKKyAgICBpZiAoa3YgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcnYgPSBQeURpY3RfR2V0SXRlbSh2LCBrdik7CiAgICAgUHlfREVDUkVGKGt2KTsKICAgICByZXR1cm4gcnY7CkBAIC0yNzE1LDYgKzI3ODIsMTUgQEAKIH0KIAogaW50CitfUHlEaWN0X0RlbEl0ZW1JZChQeU9iamVjdCAqdiwgX1B5X0lkZW50aWZpZXIgKmtleSkKK3sKKyAgICBQeU9iamVjdCAqa3YgPSBfUHlVbmljb2RlX0Zyb21JZChrZXkpOyAvKiBib3Jyb3dlZCAqLworICAgIGlmIChrdiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuIFB5RGljdF9EZWxJdGVtKHYsIGt2KTsKK30KKworaW50CiBQeURpY3RfRGVsSXRlbVN0cmluZyhQeU9iamVjdCAqdiwgY29uc3QgY2hhciAqa2V5KQogewogICAgIFB5T2JqZWN0ICprdjsKQEAgLTI4MDcsOCArMjg4Myw4IEBACiBzdGF0aWMgUHlPYmplY3QgKmRpY3RpdGVyX2l0ZXJuZXh0a2V5KGRpY3RpdGVyb2JqZWN0ICpkaSkKIHsKICAgICBQeU9iamVjdCAqa2V5OwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwotICAgIHJlZ2lzdGVyIFB5RGljdEtleXNPYmplY3QgKms7CisgICAgUHlfc3NpemVfdCBpLCBtYXNrLCBvZmZzZXQ7CisgICAgUHlEaWN0S2V5c09iamVjdCAqazsKICAgICBQeURpY3RPYmplY3QgKmQgPSBkaS0+ZGlfZGljdDsKICAgICBQeU9iamVjdCAqKnZhbHVlX3B0cjsKIApAQCAtMjg5MCw3ICsyOTY2LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqZGljdGl0ZXJfaXRlcm5leHR2YWx1ZShkaWN0aXRlcm9iamVjdCAqZGkpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OworICAgIFB5X3NzaXplX3QgaSwgbWFzaywgb2Zmc2V0OwogICAgIFB5RGljdE9iamVjdCAqZCA9IGRpLT5kaV9kaWN0OwogICAgIFB5T2JqZWN0ICoqdmFsdWVfcHRyOwogCkBAIC0yOTcxLDcgKzMwNDcsNyBAQAogc3RhdGljIFB5T2JqZWN0ICpkaWN0aXRlcl9pdGVybmV4dGl0ZW0oZGljdGl0ZXJvYmplY3QgKmRpKQogewogICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZSwgKnJlc3VsdCA9IGRpLT5kaV9yZXN1bHQ7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBtYXNrLCBvZmZzZXQ7CisgICAgUHlfc3NpemVfdCBpLCBtYXNrLCBvZmZzZXQ7CiAgICAgUHlEaWN0T2JqZWN0ICpkID0gZGktPmRpX2RpY3Q7CiAgICAgUHlPYmplY3QgKip2YWx1ZV9wdHI7CiAKQEAgLTMzMTgsNyArMzM5NCw3IEBACiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQocmVzdWx0LCAmUHlJZF9kaWZmZXJlbmNlX3VwZGF0ZSwgIk8iLCBvdGhlcik7CisgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MocmVzdWx0LCAmUHlJZF9kaWZmZXJlbmNlX3VwZGF0ZSwgb3RoZXIsIE5VTEwpOwogICAgIGlmICh0bXAgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMzM4LDcgKzM0MTQsNyBAQAogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICB0bXAgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHJlc3VsdCwgJlB5SWRfaW50ZXJzZWN0aW9uX3VwZGF0ZSwgIk8iLCBvdGhlcik7CisgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MocmVzdWx0LCAmUHlJZF9pbnRlcnNlY3Rpb25fdXBkYXRlLCBvdGhlciwgTlVMTCk7CiAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMzNTgsNyArMzQzNCw3IEBACiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQocmVzdWx0LCAmUHlJZF91cGRhdGUsICJPIiwgb3RoZXIpOworICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKHJlc3VsdCwgJlB5SWRfdXBkYXRlLCBvdGhlciwgTlVMTCk7CiAgICAgaWYgKHRtcCA9PSBOVUxMKSB7CiAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTMzNzgsOCArMzQ1NCw3IEBACiAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHRtcCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQocmVzdWx0LCAmUHlJZF9zeW1tZXRyaWNfZGlmZmVyZW5jZV91cGRhdGUsICJPIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyKTsKKyAgICB0bXAgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhyZXN1bHQsICZQeUlkX3N5bW1ldHJpY19kaWZmZXJlbmNlX3VwZGF0ZSwgb3RoZXIsIE5VTEwpOwogICAgIGlmICh0bXAgPT0gTlVMTCkgewogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9PYmplY3RzL2V4Y2VwdGlvbnMuYyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCmluZGV4IDZiMDQ3MDAuLjFhMjE4YzEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZXhjZXB0aW9ucy5jCisrKyBiL09iamVjdHMvZXhjZXB0aW9ucy5jCkBAIC0xNiw5ICsxNiw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogUHlPYmplY3QgKlB5RXhjX1dpbmRvd3NFcnJvciA9IE5VTEw7CiAjZW5kaWYKLSNpZmRlZiBfX1ZNUwotUHlPYmplY3QgKlB5RXhjX1ZNU0Vycm9yID0gTlVMTDsKLSNlbmRpZgogCiAvKiBUaGUgZGljdCBtYXAgZnJvbSBlcnJubyBjb2RlcyB0byBPU0Vycm9yIHN1YmNsYXNzZXMgKi8KIHN0YXRpYyBQeU9iamVjdCAqZXJybm9tYXAgPSBOVUxMOwpAQCAtMTIxLDExICsxMTgsMTEgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBCYXNlRXhjZXB0aW9uX3JlcHIoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICpzZWxmKQogewotICAgIGNoYXIgKm5hbWU7Ci0gICAgY2hhciAqZG90OworICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgY29uc3QgY2hhciAqZG90OwogCi0gICAgbmFtZSA9IChjaGFyICopUHlfVFlQRShzZWxmKS0+dHBfbmFtZTsKLSAgICBkb3QgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisgICAgbmFtZSA9IFB5X1RZUEUoc2VsZiktPnRwX25hbWU7CisgICAgZG90ID0gKGNvbnN0IGNoYXIgKikgc3RycmNocihuYW1lLCAnLicpOwogICAgIGlmIChkb3QgIT0gTlVMTCkgbmFtZSA9IGRvdCsxOwogCiAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyVSIiwgbmFtZSwgc2VsZi0+YXJncyk7CkBAIC03MjcsMTMgKzcyNCwxNyBAQAogICogd2UgaGFjayBhcmdzIHNvIHRoYXQgaXQgb25seSBjb250YWlucyB0d28gaXRlbXMuICBUaGlzIGFsc28KICAqIG1lYW5zIHdlIG5lZWQgb3VyIG93biBfX3N0cl9fKCkgd2hpY2ggcHJpbnRzIG91dCB0aGUgZmlsZW5hbWUKICAqIHdoZW4gaXQgd2FzIHN1cHBsaWVkLgorICoKKyAqIChJZiBhIGZ1bmN0aW9uIGhhcyB0d28gZmlsZW5hbWVzLCBzdWNoIGFzIHJlbmFtZSgpLCBzeW1saW5rKCksCisgKiBvciBjb3B5KCksIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoKSBpcyBjYWxsZWQsCisgKiB3aGljaCBhbGxvd3MgcGFzc2luZyBpbiBhIHNlY29uZCBmaWxlbmFtZS4pCiAgKi8KIAogLyogVGhpcyBmdW5jdGlvbiBkb2Vzbid0IGNsZWFudXAgb24gZXJyb3IsIHRoZSBjYWxsZXIgc2hvdWxkICovCiBzdGF0aWMgaW50CiBvc2Vycm9yX3BhcnNlX2FyZ3MoUHlPYmplY3QgKipwX2FyZ3MsCiAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipteWVycm5vLCBQeU9iamVjdCAqKnN0cmVycm9yLAotICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqZmlsZW5hbWUKKyAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKmZpbGVuYW1lLCBQeU9iamVjdCAqKmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAgICAgICAsIFB5T2JqZWN0ICoqd2luZXJyb3IKICNlbmRpZgpAQCAtNzQxLDE0ICs3NDIsMjMgQEAKIHsKICAgICBQeV9zc2l6ZV90IG5hcmdzOwogICAgIFB5T2JqZWN0ICphcmdzID0gKnBfYXJnczsKKyNpZm5kZWYgTVNfV0lORE9XUworICAgIC8qCisgICAgICogaWdub3JlZCBvbiBub24tV2luZG93cyBwbGF0Zm9ybXMsCisgICAgICogYnV0IHBhcnNlZCBzbyBPU0Vycm9yIGhhcyBhIGNvbnNpc3RlbnQgc2lnbmF0dXJlCisgICAgICovCisgICAgUHlPYmplY3QgKl93aW5lcnJvciA9IE5VTEw7CisgICAgUHlPYmplY3QgKip3aW5lcnJvciA9ICZfd2luZXJyb3I7CisjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCiAgICAgbmFyZ3MgPSBQeVR1cGxlX0dFVF9TSVpFKGFyZ3MpOwogCi0jaWZkZWYgTVNfV0lORE9XUwotICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDQpIHsKLSAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiT1NFcnJvciIsIDIsIDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lLCB3aW5lcnJvcikpCisgICAgaWYgKG5hcmdzID49IDIgJiYgbmFyZ3MgPD0gNSkgeworICAgICAgICBpZiAoIVB5QXJnX1VucGFja1R1cGxlKGFyZ3MsICJPU0Vycm9yIiwgMiwgNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteWVycm5vLCBzdHJlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgd2luZXJyb3IsIGZpbGVuYW1lMikpCiAgICAgICAgICAgICByZXR1cm4gLTE7CisjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICBpZiAoKndpbmVycm9yICYmIFB5TG9uZ19DaGVjaygqd2luZXJyb3IpKSB7CiAgICAgICAgICAgICBsb25nIGVycmNvZGUsIHdpbmVycmNvZGU7CiAgICAgICAgICAgICBQeU9iamVjdCAqbmV3YXJnczsKQEAgLTc4MCwxNCArNzkwLDggQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKICAgICAgICAgICAgIGFyZ3MgPSAqcF9hcmdzID0gbmV3YXJnczsKICAgICAgICAgfQorI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KICAgICB9Ci0jZWxzZQotICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDMpIHsKLSAgICAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiT1NFcnJvciIsIDIsIDMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci0jZW5kaWYKIAogICAgIHJldHVybiAwOwogfQpAQCAtNzk1LDcgKzc5OSw3IEBACiBzdGF0aWMgaW50CiBvc2Vycm9yX2luaXQoUHlPU0Vycm9yT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqKnBfYXJncywKICAgICAgICAgICAgICBQeU9iamVjdCAqbXllcnJubywgUHlPYmplY3QgKnN0cmVycm9yLAotICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZQorICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlPYmplY3QgKmZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAsIFB5T2JqZWN0ICp3aW5lcnJvcgogI2VuZGlmCkBAIC04MTksOSArODIzLDE0IEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOwogICAgICAgICAgICAgc2VsZi0+ZmlsZW5hbWUgPSBmaWxlbmFtZTsKIAotICAgICAgICAgICAgaWYgKG5hcmdzID49IDIgJiYgbmFyZ3MgPD0gMykgewotICAgICAgICAgICAgICAgIC8qIGZpbGVuYW1lIGlzIHJlbW92ZWQgZnJvbSB0aGUgYXJncyB0dXBsZSAoZm9yIGNvbXBhdGliaWxpdHkKLSAgICAgICAgICAgICAgICAgICBwdXJwb3Nlcywgc2VlIHRlc3RfZXhjZXB0aW9ucy5weSkgKi8KKyAgICAgICAgICAgIGlmIChmaWxlbmFtZTIgJiYgZmlsZW5hbWUyICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZmlsZW5hbWUyKTsKKyAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZTIgPSBmaWxlbmFtZTI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChuYXJncyA+PSAyICYmIG5hcmdzIDw9IDUpIHsKKyAgICAgICAgICAgICAgICAvKiBmaWxlbmFtZSwgZmlsZW5hbWUyLCBhbmQgd2luZXJyb3IgYXJlIHJlbW92ZWQgZnJvbSB0aGUgYXJncyB0dXBsZQorICAgICAgICAgICAgICAgICAgIChmb3IgY29tcGF0aWJpbGl0eSBwdXJwb3Nlcywgc2VlIHRlc3RfZXhjZXB0aW9ucy5weSkgKi8KICAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3Vic2xpY2UgPSBQeVR1cGxlX0dldFNsaWNlKGFyZ3MsIDAsIDIpOwogICAgICAgICAgICAgICAgIGlmICghc3Vic2xpY2UpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTg0NSw3ICs4NTQsNyBAQAogICAgIC8qIFN0ZWFscyB0aGUgcmVmZXJlbmNlIHRvIGFyZ3MgKi8KICAgICBQeV9DTEVBUihzZWxmLT5hcmdzKTsKICAgICBzZWxmLT5hcmdzID0gYXJnczsKLSAgICBhcmdzID0gTlVMTDsKKyAgICAqcF9hcmdzID0gYXJncyA9IE5VTEw7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTg1OCw3ICs4NjcsNyBAQAogc3RhdGljIGludAogb3NlcnJvcl91c2VfaW5pdChQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgLyogV2hlbiBfX2luaXRfXyBpcyBkZWZpbmVkIGluIGEgT1NFcnJvciBzdWJjbGFzcywgd2Ugd2FudCBhbnkKKyAgICAvKiBXaGVuIF9faW5pdF9fIGlzIGRlZmluZWQgaW4gYW4gT1NFcnJvciBzdWJjbGFzcywgd2Ugd2FudCBhbnkKICAgICAgICBleHRyYW5lb3VzIGFyZ3VtZW50IHRvIF9fbmV3X18gdG8gYmUgaWdub3JlZC4gIFRoZSBvbmx5IHJlYXNvbmFibGUKICAgICAgICBzb2x1dGlvbiwgZ2l2ZW4gX19uZXdfXyB0YWtlcyBhIHZhcmlhYmxlIG51bWJlciBvZiBhcmd1bWVudHMsCiAgICAgICAgaXMgdG8gZGVmZXIgYXJnIHBhcnNpbmcgYW5kIGluaXRpYWxpemF0aW9uIHRvIF9faW5pdF9fLgpAQCAtODgwLDE3ICs4ODksMjAgQEAKIE9TRXJyb3JfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQogewogICAgIFB5T1NFcnJvck9iamVjdCAqc2VsZiA9IE5VTEw7Ci0gICAgUHlPYmplY3QgKm15ZXJybm8gPSBOVUxMLCAqc3RyZXJyb3IgPSBOVUxMLCAqZmlsZW5hbWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpteWVycm5vID0gTlVMTCwgKnN0cmVycm9yID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBOVUxMLCAqZmlsZW5hbWUyID0gTlVMTDsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlPYmplY3QgKndpbmVycm9yID0gTlVMTDsKICNlbmRpZgogCisgICAgUHlfSU5DUkVGKGFyZ3MpOworCiAgICAgaWYgKCFvc2Vycm9yX3VzZV9pbml0KHR5cGUpKSB7CiAgICAgICAgIGlmICghX1B5QXJnX05vS2V5d29yZHModHlwZS0+dHBfbmFtZSwga3dkcykpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICAgICAgUHlfSU5DUkVGKGFyZ3MpOwotICAgICAgICBpZiAob3NlcnJvcl9wYXJzZV9hcmdzKCZhcmdzLCAmbXllcnJubywgJnN0cmVycm9yLCAmZmlsZW5hbWUKKyAgICAgICAgaWYgKG9zZXJyb3JfcGFyc2VfYXJncygmYXJncywgJm15ZXJybm8sICZzdHJlcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZmlsZW5hbWUsICZmaWxlbmFtZTIKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAmd2luZXJyb3IKICNlbmRpZgpAQCAtOTE5LDcgKzkzMSw3IEBACiAgICAgc2VsZi0+d3JpdHRlbiA9IC0xOwogCiAgICAgaWYgKCFvc2Vycm9yX3VzZV9pbml0KHR5cGUpKSB7Ci0gICAgICAgIGlmIChvc2Vycm9yX2luaXQoc2VsZiwgJmFyZ3MsIG15ZXJybm8sIHN0cmVycm9yLCBmaWxlbmFtZQorICAgICAgICBpZiAob3NlcnJvcl9pbml0KHNlbGYsICZhcmdzLCBteWVycm5vLCBzdHJlcnJvciwgZmlsZW5hbWUsIGZpbGVuYW1lMgogI2lmZGVmIE1TX1dJTkRPV1MKICAgICAgICAgICAgICAgICAgICAgICAgICAsIHdpbmVycm9yCiAjZW5kaWYKQEAgLTkzMiw2ICs5NDQsNyBAQAogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKKyAgICBQeV9YREVDUkVGKGFyZ3MpOwogICAgIHJldHVybiAoUHlPYmplY3QgKikgc2VsZjsKIAogZXJyb3I6CkBAIC05NDMsNyArOTU2LDggQEAKIHN0YXRpYyBpbnQKIE9TRXJyb3JfaW5pdChQeU9TRXJyb3JPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBQeU9iamVjdCAqbXllcnJubyA9IE5VTEwsICpzdHJlcnJvciA9IE5VTEwsICpmaWxlbmFtZSA9IE5VTEw7CisgICAgUHlPYmplY3QgKm15ZXJybm8gPSBOVUxMLCAqc3RyZXJyb3IgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IE5VTEwsICpmaWxlbmFtZTIgPSBOVUxMOwogI2lmZGVmIE1TX1dJTkRPV1MKICAgICBQeU9iamVjdCAqd2luZXJyb3IgPSBOVUxMOwogI2VuZGlmCkBAIC05NTYsMTQgKzk3MCwxNCBAQAogICAgICAgICByZXR1cm4gLTE7CiAKICAgICBQeV9JTkNSRUYoYXJncyk7Ci0gICAgaWYgKG9zZXJyb3JfcGFyc2VfYXJncygmYXJncywgJm15ZXJybm8sICZzdHJlcnJvciwgJmZpbGVuYW1lCisgICAgaWYgKG9zZXJyb3JfcGFyc2VfYXJncygmYXJncywgJm15ZXJybm8sICZzdHJlcnJvciwgJmZpbGVuYW1lLCAmZmlsZW5hbWUyCiAjaWZkZWYgTVNfV0lORE9XUwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAmd2luZXJyb3IKICNlbmRpZgogICAgICAgICApKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgaWYgKG9zZXJyb3JfaW5pdChzZWxmLCAmYXJncywgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lCisgICAgaWYgKG9zZXJyb3JfaW5pdChzZWxmLCAmYXJncywgbXllcnJubywgc3RyZXJyb3IsIGZpbGVuYW1lLCBmaWxlbmFtZTIKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgICAgICAgICAgICAgICAgICAsIHdpbmVycm9yCiAjZW5kaWYKQEAgLTk4Myw2ICs5OTcsNyBAQAogICAgIFB5X0NMRUFSKHNlbGYtPm15ZXJybm8pOwogICAgIFB5X0NMRUFSKHNlbGYtPnN0cmVycm9yKTsKICAgICBQeV9DTEVBUihzZWxmLT5maWxlbmFtZSk7CisgICAgUHlfQ0xFQVIoc2VsZi0+ZmlsZW5hbWUyKTsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlfQ0xFQVIoc2VsZi0+d2luZXJyb3IpOwogI2VuZGlmCkBAIC0xMDA0LDYgKzEwMTksNyBAQAogICAgIFB5X1ZJU0lUKHNlbGYtPm15ZXJybm8pOwogICAgIFB5X1ZJU0lUKHNlbGYtPnN0cmVycm9yKTsKICAgICBQeV9WSVNJVChzZWxmLT5maWxlbmFtZSk7CisgICAgUHlfVklTSVQoc2VsZi0+ZmlsZW5hbWUyKTsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlfVklTSVQoc2VsZi0+d2luZXJyb3IpOwogI2VuZGlmCkBAIC0xMDEzLDIzICsxMDI5LDQyIEBACiBzdGF0aWMgUHlPYmplY3QgKgogT1NFcnJvcl9zdHIoUHlPU0Vycm9yT2JqZWN0ICpzZWxmKQogeworI2RlZmluZSBPUl9OT05FKHgpICgoeCk/KHgpOlB5X05vbmUpCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIC8qIElmIGF2YWlsYWJsZSwgd2luZXJyb3IgaGFzIHRoZSBwcmlvcml0eSBvdmVyIG15ZXJybm8gKi8KLSAgICBpZiAoc2VsZi0+d2luZXJyb3IgJiYgc2VsZi0+ZmlsZW5hbWUpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW1dpbkVycm9yICVTXSAlUzogJVIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+d2luZXJyb3IgPyBzZWxmLT53aW5lcnJvcjogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmVycm9yID8gc2VsZi0+c3RyZXJyb3I6IFB5X05vbmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSk7CisgICAgaWYgKHNlbGYtPndpbmVycm9yICYmIHNlbGYtPmZpbGVuYW1lKSB7CisgICAgICAgIGlmIChzZWxmLT5maWxlbmFtZTIpIHsKKyAgICAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW1dpbkVycm9yICVTXSAlUzogJVIgLT4gJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SX05PTkUoc2VsZi0+d2luZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SX05PTkUoc2VsZi0+c3RyZXJyb3IpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmZpbGVuYW1lMik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltXaW5FcnJvciAlU10gJVM6ICVSIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPndpbmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPnN0cmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgaWYgKHNlbGYtPndpbmVycm9yICYmIHNlbGYtPnN0cmVycm9yKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltXaW5FcnJvciAlU10gJVMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+d2luZXJyb3IgPyBzZWxmLT53aW5lcnJvcjogUHlfTm9uZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPnN0cmVycm9yID8gc2VsZi0+c3RyZXJyb3I6IFB5X05vbmUpOwogI2VuZGlmCi0gICAgaWYgKHNlbGYtPmZpbGVuYW1lKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIltFcnJubyAlU10gJVM6ICVSIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm15ZXJybm8gPyBzZWxmLT5teWVycm5vOiBQeV9Ob25lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi0+c3RyZXJyb3IgPyBzZWxmLT5zdHJlcnJvcjogUHlfTm9uZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPmZpbGVuYW1lKTsKKyAgICBpZiAoc2VsZi0+ZmlsZW5hbWUpIHsKKyAgICAgICAgaWYgKHNlbGYtPmZpbGVuYW1lMikgeworICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbRXJybm8gJVNdICVTOiAlUiAtPiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5teWVycm5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPnN0cmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZTIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJbRXJybm8gJVNdICVTOiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT1JfTk9ORShzZWxmLT5teWVycm5vKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUl9OT05FKHNlbGYtPnN0cmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5maWxlbmFtZSk7CisgICAgICAgIH0KKyAgICB9CiAgICAgaWYgKHNlbGYtPm15ZXJybm8gJiYgc2VsZi0+c3RyZXJyb3IpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiW0Vycm5vICVTXSAlUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLT5teWVycm5vID8gc2VsZi0+bXllcnJubzogUHlfTm9uZSwKQEAgLTEwNDYsNyArMTA4MSw4IEBACiAgICAgLyogc2VsZi0+YXJncyBpcyBvbmx5IHRoZSBmaXJzdCB0d28gcmVhbCBhcmd1bWVudHMgaWYgdGhlcmUgd2FzIGEKICAgICAgKiBmaWxlIG5hbWUgZ2l2ZW4gdG8gT1NFcnJvci4gKi8KICAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSA9PSAyICYmIHNlbGYtPmZpbGVuYW1lKSB7Ci0gICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygzKTsKKyAgICAgICAgUHlfc3NpemVfdCBzaXplID0gc2VsZi0+ZmlsZW5hbWUyID8gNSA6IDM7CisgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldyhzaXplKTsKICAgICAgICAgaWYgKCFhcmdzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTEwNjAsNiArMTA5NiwyMCBAQAogCiAgICAgICAgIFB5X0lOQ1JFRihzZWxmLT5maWxlbmFtZSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMiwgc2VsZi0+ZmlsZW5hbWUpOworCisgICAgICAgIGlmIChzZWxmLT5maWxlbmFtZTIpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGlzIHR1cGxlIGlzIGVzc2VudGlhbGx5IHVzZWQgYXMgT1NFcnJvcigqYXJncykuCisgICAgICAgICAgICAgKiBTbywgdG8gcmVjcmVhdGUgZmlsZW5hbWUyLCB3ZSBuZWVkIHRvIHBhc3MgaW4KKyAgICAgICAgICAgICAqIHdpbmVycm9yIGFzIHdlbGwuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMywgUHlfTm9uZSk7CisKKyAgICAgICAgICAgIC8qIGZpbGVuYW1lMiAqLworICAgICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPmZpbGVuYW1lMik7CisgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDQsIHNlbGYtPmZpbGVuYW1lMik7CisgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgUHlfSU5DUkVGKGFyZ3MpOwogCkBAIC0xMDk5LDYgKzExNDksOCBAQAogICAgICAgICBQeURvY19TVFIoImV4Y2VwdGlvbiBzdHJlcnJvciIpfSwKICAgICB7ImZpbGVuYW1lIiwgVF9PQkpFQ1QsIG9mZnNldG9mKFB5T1NFcnJvck9iamVjdCwgZmlsZW5hbWUpLCAwLAogICAgICAgICBQeURvY19TVFIoImV4Y2VwdGlvbiBmaWxlbmFtZSIpfSwKKyAgICB7ImZpbGVuYW1lMiIsIFRfT0JKRUNULCBvZmZzZXRvZihQeU9TRXJyb3JPYmplY3QsIGZpbGVuYW1lMiksIDAsCisgICAgICAgIFB5RG9jX1NUUigic2Vjb25kIGV4Y2VwdGlvbiBmaWxlbmFtZSIpfSwKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgeyJ3aW5lcnJvciIsIFRfT0JKRUNULCBvZmZzZXRvZihQeU9TRXJyb3JPYmplY3QsIHdpbmVycm9yKSwgMCwKICAgICAgICAgUHlEb2NfU1RSKCJXaW4zMiBleGNlcHRpb24gY29kZSIpfSwKQEAgLTEyMDIsNiArMTI1NCw5IEBACiAgKiAgICBTeW50YXhFcnJvciBleHRlbmRzIEV4Y2VwdGlvbgogICovCiAKKy8qIEhlbHBlciBmdW5jdGlvbiB0byBjdXN0b21pc2UgZXJyb3IgbWVzc2FnZSBmb3Igc29tZSBzeW50YXggZXJyb3JzICovCitzdGF0aWMgaW50IF9yZXBvcnRfbWlzc2luZ19wYXJlbnRoZXNlcyhQeVN5bnRheEVycm9yT2JqZWN0ICpzZWxmKTsKKwogc3RhdGljIGludAogU3ludGF4RXJyb3JfaW5pdChQeVN5bnRheEVycm9yT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CkBAIC0xMjQ2LDYgKzEzMDEsMTMgQEAKICAgICAgICAgUHlfSU5DUkVGKHNlbGYtPnRleHQpOwogCiAgICAgICAgIFB5X0RFQ1JFRihpbmZvKTsKKworICAgICAgICAvKiBJc3N1ZSAjMjE2Njk6IEN1c3RvbSBlcnJvciBmb3IgJ3ByaW50JyAmICdleGVjJyBhcyBzdGF0ZW1lbnRzICovCisgICAgICAgIGlmIChzZWxmLT50ZXh0ICYmIFB5VW5pY29kZV9DaGVjayhzZWxmLT50ZXh0KSkgeworICAgICAgICAgICAgaWYgKF9yZXBvcnRfbWlzc2luZ19wYXJlbnRoZXNlcyhzZWxmKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0xNzg1LDYgKzE4NDcsMTAgQEAKICAgICBQeU9iamVjdCAqcmVhc29uX3N0ciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmVuY29kaW5nX3N0ciA9IE5VTEw7CiAKKyAgICBpZiAoIXVzZWxmLT5vYmplY3QpCisgICAgICAgIC8qIE5vdCBwcm9wZXJseSBpbml0aWFsaXplZC4gKi8KKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKwogICAgIC8qIEdldCByZWFzb24gYW5kIGVuY29kaW5nIGFzIHN0cmluZ3MsIHdoaWNoIHRoZXkgbWlnaHQgbm90IGJlIGlmCiAgICAgICAgdGhleSd2ZSBiZWVuIG1vZGlmaWVkIGFmdGVyIHdlIHdlcmUgY29udHJ1Y3RlZC4gKi8KICAgICByZWFzb25fc3RyID0gUHlPYmplY3RfU3RyKHVzZWxmLT5yZWFzb24pOwpAQCAtMTg1Niw4ICsxOTIyLDYgQEAKIFVuaWNvZGVEZWNvZGVFcnJvcl9pbml0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlVbmljb2RlRXJyb3JPYmplY3QgKnVkZTsKLSAgICBjb25zdCBjaGFyICpkYXRhOwotICAgIFB5X3NzaXplX3Qgc2l6ZTsKIAogICAgIGlmIChCYXNlRXhjZXB0aW9uX2luaXQoKFB5QmFzZUV4Y2VwdGlvbk9iamVjdCAqKXNlbGYsIGFyZ3MsIGt3ZHMpID09IC0xKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0xODc4LDIxICsxOTQyLDI3IEBACiAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmICghUHlCeXRlc19DaGVjayh1ZGUtPm9iamVjdCkpIHsKLSAgICAgICAgaWYgKFB5T2JqZWN0X0FzUmVhZEJ1ZmZlcih1ZGUtPm9iamVjdCwgKGNvbnN0IHZvaWQgKiopJmRhdGEsICZzaXplKSkgewotICAgICAgICAgICAgdWRlLT5lbmNvZGluZyA9IHVkZS0+b2JqZWN0ID0gdWRlLT5yZWFzb24gPSBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHVkZS0+b2JqZWN0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShkYXRhLCBzaXplKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5X0lOQ1JFRih1ZGUtPm9iamVjdCk7Ci0gICAgfQotCiAgICAgUHlfSU5DUkVGKHVkZS0+ZW5jb2RpbmcpOworICAgIFB5X0lOQ1JFRih1ZGUtPm9iamVjdCk7CiAgICAgUHlfSU5DUkVGKHVkZS0+cmVhc29uKTsKIAorICAgIGlmICghUHlCeXRlc19DaGVjayh1ZGUtPm9iamVjdCkpIHsKKyAgICAgICAgUHlfYnVmZmVyIHZpZXc7CisgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodWRlLT5vYmplY3QsICZ2aWV3LCBQeUJVRl9TSU1QTEUpICE9IDApCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBQeV9DTEVBUih1ZGUtPm9iamVjdCk7CisgICAgICAgIHVkZS0+b2JqZWN0ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSh2aWV3LmJ1Ziwgdmlldy5sZW4pOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgaWYgKCF1ZGUtPm9iamVjdCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogICAgIHJldHVybiAwOworCitlcnJvcjoKKyAgICBQeV9DTEVBUih1ZGUtPmVuY29kaW5nKTsKKyAgICBQeV9DTEVBUih1ZGUtPm9iamVjdCk7CisgICAgUHlfQ0xFQVIodWRlLT5yZWFzb24pOworICAgIHJldHVybiAtMTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE5MDMsNiArMTk3MywxMCBAQAogICAgIFB5T2JqZWN0ICpyZWFzb25fc3RyID0gTlVMTDsKICAgICBQeU9iamVjdCAqZW5jb2Rpbmdfc3RyID0gTlVMTDsKIAorICAgIGlmICghdXNlbGYtPm9iamVjdCkKKyAgICAgICAgLyogTm90IHByb3Blcmx5IGluaXRpYWxpemVkLiAqLworICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiIpOworCiAgICAgLyogR2V0IHJlYXNvbiBhbmQgZW5jb2RpbmcgYXMgc3RyaW5ncywgd2hpY2ggdGhleSBtaWdodCBub3QgYmUgaWYKICAgICAgICB0aGV5J3ZlIGJlZW4gbW9kaWZpZWQgYWZ0ZXIgd2Ugd2VyZSBjb250cnVjdGVkLiAqLwogICAgIHJlYXNvbl9zdHIgPSBQeU9iamVjdF9TdHIodXNlbGYtPnJlYXNvbik7CkBAIC0xOTk3LDYgKzIwNzEsMTAgQEAKICAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqcmVhc29uX3N0ciA9IE5VTEw7CiAKKyAgICBpZiAoIXVzZWxmLT5vYmplY3QpCisgICAgICAgIC8qIE5vdCBwcm9wZXJseSBpbml0aWFsaXplZC4gKi8KKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIiKTsKKwogICAgIC8qIEdldCByZWFzb24gYXMgYSBzdHJpbmcsIHdoaWNoIGl0IG1pZ2h0IG5vdCBiZSBpZiBpdCdzIGJlZW4KICAgICAgICBtb2RpZmllZCBhZnRlciB3ZSB3ZXJlIGNvbnRydWN0ZWQuICovCiAgICAgcmVhc29uX3N0ciA9IFB5T2JqZWN0X1N0cih1c2VsZi0+cmVhc29uKTsKQEAgLTIwNjAsNyArMjEzOCw3IEBACiAgICAgUHlPYmplY3QgKm9iamVjdCwKICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCwgY29uc3QgY2hhciAqcmVhc29uKQogewotICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24oUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yLCAiT25zIiwKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKFB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciwgIk9ubnMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0LCBzdGFydCwgZW5kLCByZWFzb24pOwogfQogCkBAIC0yMzI3LDcgKzI0MDUsNyBAQAogICAgIH0KIAogI2lmZGVmIE1TX1dJTkRPV1MKLSNpbmNsdWRlIDxXaW5zb2NrMi5oPgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CiAvKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyB3ZXJlIGFkZGVkIHRvIGVycm5vLmggaW4gVlMyMDEwIGJ1dCBoYXZlCiAgICBwcmVmZXJyZWQgV1NBIGVxdWl2YWxlbnRzLiAqLwogI3VuZGVmIEVBRERSSU5VU0UKQEAgLTI0NzEsOSArMjU0OSw2IEBACiAjaWZkZWYgTVNfV0lORE9XUwogICAgIElOSVRfQUxJQVMoV2luZG93c0Vycm9yLCBPU0Vycm9yKQogI2VuZGlmCi0jaWZkZWYgX19WTVMKLSAgICBJTklUX0FMSUFTKFZNU0Vycm9yLCBPU0Vycm9yKQotI2VuZGlmCiAgICAgUE9TVF9JTklUKEVPRkVycm9yKQogICAgIFBPU1RfSU5JVChSdW50aW1lRXJyb3IpCiAgICAgUE9TVF9JTklUKE5vdEltcGxlbWVudGVkRXJyb3IpCkBAIC0yNTkxLDMgKzI2NjYsMjU5IEBACiAgICAgZnJlZV9wcmVhbGxvY2F0ZWRfbWVtZXJyb3JzKCk7CiAgICAgUHlfQ0xFQVIoZXJybm9tYXApOwogfQorCisvKiBIZWxwZXIgdG8gZG8gdGhlIGVxdWl2YWxlbnQgb2YgInJhaXNlIFggZnJvbSBZIiBpbiBDLCBidXQgYWx3YXlzIHVzaW5nCisgKiB0aGUgY3VycmVudCBleGNlcHRpb24gcmF0aGVyIHRoYW4gcGFzc2luZyBvbmUgaW4uCisgKgorICogV2UgY3VycmVudGx5IGxpbWl0IHRoaXMgdG8gKm9ubHkqIGV4Y2VwdGlvbnMgdGhhdCB1c2UgdGhlIEJhc2VFeGNlcHRpb24KKyAqIHRwX2luaXQgYW5kIHRwX25ldyBtZXRob2RzLCBzaW5jZSB3ZSBjYW4gYmUgcmVhc29uYWJseSBzdXJlIHdlIGNhbiB3cmFwCisgKiB0aG9zZSBjb3JyZWN0bHkgd2l0aG91dCBsb3NpbmcgZGF0YSBhbmQgd2l0aG91dCBsb3NpbmcgYmFja3dhcmRzCisgKiBjb21wYXRpYmlsaXR5LgorICoKKyAqIFdlIGFsc28gYWltIHRvIHJ1bGUgb3V0ICphbGwqIGV4Y2VwdGlvbnMgdGhhdCBtaWdodCBiZSBzdG9yaW5nIGFkZGl0aW9uYWwKKyAqIHN0YXRlLCB3aGV0aGVyIGJ5IGhhdmluZyBhIHNpemUgZGlmZmVyZW5jZSByZWxhdGl2ZSB0byBCYXNlRXhjZXB0aW9uLAorICogYWRkaXRpb25hbCBhcmd1bWVudHMgcGFzc2VkIGluIGR1cmluZyBjb25zdHJ1Y3Rpb24gb3IgYnkgaGF2aW5nIGEKKyAqIG5vbi1lbXB0eSBpbnN0YW5jZSBkaWN0LgorICoKKyAqIFdlIG5lZWQgdG8gYmUgdmVyeSBjYXJlZnVsIHdpdGggd2hhdCB3ZSB3cmFwLCBzaW5jZSBjaGFuZ2luZyB0eXBlcyB0bworICogYSBicm9hZGVyIGV4Y2VwdGlvbiB0eXBlIHdvdWxkIGJlIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgZm9yCisgKiBleGlzdGluZyBjb2RlY3MsIGFuZCB3aXRoIGRpZmZlcmVudCBpbml0IG9yIG5ldyBtZXRob2QgaW1wbGVtZW50YXRpb25zCisgKiBtYXkgZWl0aGVyIG5vdCBzdXBwb3J0IGluc3RhbnRpYXRpb24gd2l0aCBQeUVycl9Gb3JtYXQgb3IgbG9zZQorICogaW5mb3JtYXRpb24gd2hlbiBpbnN0YW50aWF0ZWQgdGhhdCB3YXkuCisgKgorICogWFhYIChuY29naGxhbik6IFRoaXMgY291bGQgYmUgbWFkZSBtb3JlIGNvbXByZWhlbnNpdmUgYnkgZXhwbG9pdGluZyB0aGUKKyAqIGZhY3QgdGhhdCBleGNlcHRpb25zIGFyZSBleHBlY3RlZCB0byBzdXBwb3J0IHBpY2tsaW5nLiBJZiBtb3JlIGJ1aWx0aW4KKyAqIGV4Y2VwdGlvbnMgKGUuZy4gQXR0cmlidXRlRXJyb3IpIHN0YXJ0IHRvIGJlIGNvbnZlcnRlZCB0byByaWNoCisgKiBleGNlcHRpb25zIHdpdGggYWRkaXRpb25hbCBhdHRyaWJ1dGVzLCB0aGF0J3MgcHJvYmFibHkgYSBiZXR0ZXIgYXBwcm9hY2gKKyAqIHRvIHB1cnN1ZSBvdmVyIGFkZGluZyBzcGVjaWFsIGNhc2VzIGZvciBwYXJ0aWN1bGFyIHN0YXRlZnVsIHN1YmNsYXNzZXMuCisgKgorICogUmV0dXJucyBhIGJvcnJvd2VkIHJlZmVyZW5jZSB0byB0aGUgbmV3IGV4Y2VwdGlvbiAoaWYgYW55KSwgTlVMTCBpZiB0aGUKKyAqIGV4aXN0aW5nIGV4Y2VwdGlvbiB3YXMgbGVmdCBpbiBwbGFjZS4KKyAqLworUHlPYmplY3QgKgorX1B5RXJyX1RyeVNldEZyb21DYXVzZShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICBQeU9iamVjdCogbXNnX3ByZWZpeDsKKyAgICBQeU9iamVjdCAqZXhjLCAqdmFsLCAqdGI7CisgICAgUHlUeXBlT2JqZWN0ICpjYXVnaHRfdHlwZTsKKyAgICBQeU9iamVjdCAqKmRpY3RwdHI7CisgICAgUHlPYmplY3QgKmluc3RhbmNlX2FyZ3M7CisgICAgUHlfc3NpemVfdCBudW1fYXJncywgY2F1Z2h0X3R5cGVfc2l6ZSwgYmFzZV9leGNfc2l6ZTsKKyAgICBQeU9iamVjdCAqbmV3X2V4YywgKm5ld192YWwsICpuZXdfdGI7CisgICAgdmFfbGlzdCB2YXJnczsKKyAgICBpbnQgc2FtZV9iYXNpY19zaXplOworCisgICAgUHlFcnJfRmV0Y2goJmV4YywgJnZhbCwgJnRiKTsKKyAgICBjYXVnaHRfdHlwZSA9IChQeVR5cGVPYmplY3QgKilleGM7CisgICAgLyogRW5zdXJlIHR5cGUgaW5mbyBpbmRpY2F0ZXMgbm8gZXh0cmEgc3RhdGUgaXMgc3RvcmVkIGF0IHRoZSBDIGxldmVsCisgICAgICogYW5kIHRoYXQgdGhlIHR5cGUgY2FuIGJlIHJlaW5zdGFudGlhdGVkIHVzaW5nIFB5RXJyX0Zvcm1hdAorICAgICAqLworICAgIGNhdWdodF90eXBlX3NpemUgPSBjYXVnaHRfdHlwZS0+dHBfYmFzaWNzaXplOworICAgIGJhc2VfZXhjX3NpemUgPSBfUHlFeGNfQmFzZUV4Y2VwdGlvbi50cF9iYXNpY3NpemU7CisgICAgc2FtZV9iYXNpY19zaXplID0gKAorICAgICAgICBjYXVnaHRfdHlwZV9zaXplID09IGJhc2VfZXhjX3NpemUgfHwKKyAgICAgICAgKFB5VHlwZV9TVVBQT1JUU19XRUFLUkVGUyhjYXVnaHRfdHlwZSkgJiYKKyAgICAgICAgICAgIChjYXVnaHRfdHlwZV9zaXplID09IGJhc2VfZXhjX3NpemUgKyBzaXplb2YoUHlPYmplY3QgKikpCisgICAgICAgICkKKyAgICApOworICAgIGlmIChjYXVnaHRfdHlwZS0+dHBfaW5pdCAhPSAoaW5pdHByb2MpQmFzZUV4Y2VwdGlvbl9pbml0IHx8CisgICAgICAgIGNhdWdodF90eXBlLT50cF9uZXcgIT0gQmFzZUV4Y2VwdGlvbl9uZXcgfHwKKyAgICAgICAgIXNhbWVfYmFzaWNfc2l6ZSB8fAorICAgICAgICBjYXVnaHRfdHlwZS0+dHBfaXRlbXNpemUgIT0gX1B5RXhjX0Jhc2VFeGNlcHRpb24udHBfaXRlbXNpemUpIHsKKyAgICAgICAgLyogV2UgY2FuJ3QgYmUgc3VyZSB3ZSBjYW4gd3JhcCB0aGlzIHNhZmVseSwgc2luY2UgaXQgbWF5IGNvbnRhaW4KKyAgICAgICAgICogbW9yZSBzdGF0ZSB0aGFuIGp1c3QgdGhlIGV4Y2VwdGlvbiB0eXBlLiBBY2NvcmRpbmdseSwgd2UganVzdAorICAgICAgICAgKiBsZWF2ZSBpdCBhbG9uZS4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogQ2hlY2sgdGhlIGFyZ3MgYXJlIGVtcHR5IG9yIGNvbnRhaW4gYSBzaW5nbGUgc3RyaW5nICovCisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMsICZ2YWwsICZ0Yik7CisgICAgaW5zdGFuY2VfYXJncyA9ICgoUHlCYXNlRXhjZXB0aW9uT2JqZWN0ICopdmFsKS0+YXJnczsKKyAgICBudW1fYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoaW5zdGFuY2VfYXJncyk7CisgICAgaWYgKG51bV9hcmdzID4gMSB8fAorICAgICAgICAobnVtX2FyZ3MgPT0gMSAmJgorICAgICAgICAgIVB5VW5pY29kZV9DaGVja0V4YWN0KFB5VHVwbGVfR0VUX0lURU0oaW5zdGFuY2VfYXJncywgMCkpKSkgeworICAgICAgICAvKiBNb3JlIHRoYW4gMSBhcmcsIG9yIHRoZSBvbmUgYXJnIHdlIGRvIGhhdmUgaXNuJ3QgYSBzdHJpbmcKKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRW5zdXJlIHRoZSBpbnN0YW5jZSBkaWN0IGlzIGFsc28gZW1wdHkgKi8KKyAgICBkaWN0cHRyID0gX1B5T2JqZWN0X0dldERpY3RQdHIodmFsKTsKKyAgICBpZiAoZGljdHB0ciAhPSBOVUxMICYmICpkaWN0cHRyICE9IE5VTEwgJiYKKyAgICAgICAgUHlPYmplY3RfTGVuZ3RoKCpkaWN0cHRyKSA+IDApIHsKKyAgICAgICAgLyogV2hpbGUgd2UgY291bGQgcG90ZW50aWFsbHkgY29weSBhIG5vbi1lbXB0eSBpbnN0YW5jZSBkaWN0aW9uYXJ5CisgICAgICAgICAqIHRvIHRoZSByZXBsYWNlbWVudCBleGNlcHRpb24sIGZvciBub3cgd2UgdGFrZSB0aGUgbW9yZQorICAgICAgICAgKiBjb25zZXJ2YXRpdmUgcGF0aCBvZiBsZWF2aW5nIGV4Y2VwdGlvbnMgd2l0aCBhdHRyaWJ1dGVzIHNldAorICAgICAgICAgKiBhbG9uZS4KKyAgICAgICAgICovCisgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjLCB2YWwsIHRiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogRm9yIGV4Y2VwdGlvbnMgdGhhdCB3ZSBjYW4gd3JhcCBzYWZlbHksIHdlIGNoYWluIHRoZSBvcmlnaW5hbAorICAgICAqIGV4Y2VwdGlvbiB0byBhIG5ldyBvbmUgb2YgdGhlIGV4YWN0IHNhbWUgdHlwZSB3aXRoIGFuCisgICAgICogZXJyb3IgbWVzc2FnZSB0aGF0IG1lbnRpb25zIHRoZSBhZGRpdGlvbmFsIGRldGFpbHMgYW5kIHRoZQorICAgICAqIG9yaWdpbmFsIGV4Y2VwdGlvbi4KKyAgICAgKgorICAgICAqIEl0IHdvdWxkIGJlIG5pY2UgdG8gd3JhcCBPU0Vycm9yIGFuZCB2YXJpb3VzIG90aGVyIGV4Y2VwdGlvbgorICAgICAqIHR5cGVzIGFzIHdlbGwsIGJ1dCB0aGF0J3MgcXVpdGUgYSBiaXQgdHJpY2tpZXIgZHVlIHRvIHRoZSBleHRyYQorICAgICAqIHN0YXRlIHBvdGVudGlhbGx5IHN0b3JlZCBvbiBPU0Vycm9yIGluc3RhbmNlcy4KKyAgICAgKi8KKyAgICAvKiBFbnN1cmUgdGhlIHRyYWNlYmFjayBpcyBzZXQgY29ycmVjdGx5IG9uIHRoZSBleGlzdGluZyBleGNlcHRpb24gKi8KKyAgICBpZiAodGIgIT0gTlVMTCkgeworICAgICAgICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2sodmFsLCB0Yik7CisgICAgICAgIFB5X0RFQ1JFRih0Yik7CisgICAgfQorCisjaWZkZWYgSEFWRV9TVERBUkdfUFJPVE9UWVBFUworICAgIHZhX3N0YXJ0KHZhcmdzLCBmb3JtYXQpOworI2Vsc2UKKyAgICB2YV9zdGFydCh2YXJncyk7CisjZW5kaWYKKyAgICBtc2dfcHJlZml4ID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmFyZ3MpOworICAgIHZhX2VuZCh2YXJncyk7CisgICAgaWYgKG1zZ19wcmVmaXggPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICAgICAgUHlfREVDUkVGKHZhbCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIFB5RXJyX0Zvcm1hdChleGMsICIlVSAoJXM6ICVTKSIsCisgICAgICAgICAgICAgICAgIG1zZ19wcmVmaXgsIFB5X1RZUEUodmFsKS0+dHBfbmFtZSwgdmFsKTsKKyAgICBQeV9ERUNSRUYoZXhjKTsKKyAgICBQeV9ERUNSRUYobXNnX3ByZWZpeCk7CisgICAgUHlFcnJfRmV0Y2goJm5ld19leGMsICZuZXdfdmFsLCAmbmV3X3RiKTsKKyAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJm5ld19leGMsICZuZXdfdmFsLCAmbmV3X3RiKTsKKyAgICBQeUV4Y2VwdGlvbl9TZXRDYXVzZShuZXdfdmFsLCB2YWwpOworICAgIFB5RXJyX1Jlc3RvcmUobmV3X2V4YywgbmV3X3ZhbCwgbmV3X3RiKTsKKyAgICByZXR1cm4gbmV3X3ZhbDsKK30KKworCisvKiBUbyBoZWxwIHdpdGggbWlncmF0aW9uIGZyb20gUHl0aG9uIDIsIFN5bnRheEVycm9yLl9faW5pdF9fIGFwcGxpZXMgc29tZQorICogaGV1cmlzdGljcyB0byB0cnkgdG8gcmVwb3J0IGEgbW9yZSBtZWFuaW5nZnVsIGV4Y2VwdGlvbiB3aGVuIHByaW50IGFuZAorICogZXhlYyBhcmUgdXNlZCBsaWtlIHN0YXRlbWVudHMuCisgKgorICogVGhlIGhldXJpc3RpY3MgYXJlIGN1cnJlbnRseSBleHBlY3RlZCB0byBkZXRlY3QgdGhlIGZvbGxvd2luZyBjYXNlczoKKyAqICAgLSB0b3AgbGV2ZWwgc3RhdGVtZW50CisgKiAgIC0gc3RhdGVtZW50IGluIGEgbmVzdGVkIHN1aXRlCisgKiAgIC0gdHJhaWxpbmcgc2VjdGlvbiBvZiBhIG9uZSBsaW5lIGNvbXBsZXggc3RhdGVtZW50CisgKgorICogVGhleSdyZSBjdXJyZW50bHkga25vd24gbm90IHRvIHRyaWdnZXI6CisgKiAgIC0gYWZ0ZXIgYSBzZW1pLWNvbG9uCisgKgorICogVGhlIGVycm9yIG1lc3NhZ2UgY2FuIGJlIGEgYml0IG9kZCBpbiBjYXNlcyB3aGVyZSB0aGUgImFyZ3VtZW50cyIgYXJlCisgKiBjb21wbGV0ZWx5IGlsbGVnYWwgc3ludGFjdGljYWxseSwgYnV0IHRoYXQgaXNuJ3Qgd29ydGggdGhlIGhhc3NsZSBvZgorICogZml4aW5nLgorICoKKyAqIFdlIGFsc28gY2FuJ3QgZG8gYW55dGhpbmcgYWJvdXQgY2FzZXMgdGhhdCBhcmUgbGVnYWwgUHl0aG9uIDMgc3ludGF4CisgKiBidXQgbWVhbiBzb21ldGhpbmcgZW50aXJlbHkgZGlmZmVyZW50IGZyb20gd2hhdCB0aGV5IGRpZCBpbiBQeXRob24gMgorICogKG9taXR0aW5nIHRoZSBhcmd1bWVudHMgZW50aXJlbHksIHByaW50aW5nIGl0ZW1zIHByZWNlZGVkIGJ5IGEgdW5hcnkgcGx1cworICogb3IgbWludXMsIHVzaW5nIHRoZSBzdHJlYW0gcmVkaXJlY3Rpb24gc3ludGF4KS4KKyAqLworCitzdGF0aWMgaW50CitfY2hlY2tfZm9yX2xlZ2FjeV9zdGF0ZW1lbnRzKFB5U3ludGF4RXJyb3JPYmplY3QgKnNlbGYsIFB5X3NzaXplX3Qgc3RhcnQpCit7CisgICAgLyogUmV0dXJuIHZhbHVlczoKKyAgICAgKiAgIC0xOiBhbiBlcnJvciBvY2N1cnJlZAorICAgICAqICAgIDA6IG5vdGhpbmcgaGFwcGVuZWQKKyAgICAgKiAgICAxOiB0aGUgY2hlY2sgdHJpZ2dlcmVkICYgdGhlIGVycm9yIG1lc3NhZ2Ugd2FzIGNoYW5nZWQKKyAgICAgKi8KKyAgICBzdGF0aWMgUHlPYmplY3QgKnByaW50X3ByZWZpeCA9IE5VTEw7CisgICAgc3RhdGljIFB5T2JqZWN0ICpleGVjX3ByZWZpeCA9IE5VTEw7CisgICAgUHlfc3NpemVfdCB0ZXh0X2xlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYtPnRleHQpOworICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZi0+dGV4dCk7CisgICAgdm9pZCAqZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYtPnRleHQpOworCisgICAgLyogSWdub3JlIGxlYWRpbmcgd2hpdGVzcGFjZSAqLworICAgIHdoaWxlIChzdGFydCA8IHRleHRfbGVuKSB7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBzdGFydCk7CisgICAgICAgIGlmICghUHlfVU5JQ09ERV9JU1NQQUNFKGNoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdGFydCsrOworICAgIH0KKyAgICAvKiBDaGVja2luZyBhZ2FpbnN0IGFuIGVtcHR5IG9yIHdoaXRlc3BhY2Utb25seSBwYXJ0IG9mIHRoZSBzdHJpbmcgKi8KKyAgICBpZiAoc3RhcnQgPT0gdGV4dF9sZW4pIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIGxlZ2FjeSBwcmludCBzdGF0ZW1lbnRzICovCisgICAgaWYgKHByaW50X3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgIHByaW50X3ByZWZpeCA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJwcmludCAiKTsKKyAgICAgICAgaWYgKHByaW50X3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9UYWlsbWF0Y2goc2VsZi0+dGV4dCwgcHJpbnRfcHJlZml4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCB0ZXh0X2xlbiwgLTEpKSB7CisgICAgICAgIFB5X0NMRUFSKHNlbGYtPm1zZyk7CisgICAgICAgIHNlbGYtPm1zZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKAorICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHBhcmVudGhlc2VzIGluIGNhbGwgdG8gJ3ByaW50JyIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBDaGVjayBmb3IgbGVnYWN5IGV4ZWMgc3RhdGVtZW50cyAqLworICAgIGlmIChleGVjX3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgIGV4ZWNfcHJlZml4ID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoImV4ZWMgIik7CisgICAgICAgIGlmIChleGVjX3ByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9UYWlsbWF0Y2goc2VsZi0+dGV4dCwgZXhlY19wcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQsIHRleHRfbGVuLCAtMSkpIHsKKyAgICAgICAgUHlfQ0xFQVIoc2VsZi0+bXNnKTsKKyAgICAgICAgc2VsZi0+bXNnID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoCisgICAgICAgICAgICAgICAgICAgICJNaXNzaW5nIHBhcmVudGhlc2VzIGluIGNhbGwgdG8gJ2V4ZWMnIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAvKiBGYWxsIGJhY2sgdG8gdGhlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSAqLworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfcmVwb3J0X21pc3NpbmdfcGFyZW50aGVzZXMoUHlTeW50YXhFcnJvck9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9VQ1M0IGxlZnRfcGFyZW4gPSA0MDsKKyAgICBQeV9zc2l6ZV90IGxlZnRfcGFyZW5faW5kZXg7CisgICAgUHlfc3NpemVfdCB0ZXh0X2xlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYtPnRleHQpOworICAgIGludCBsZWdhY3lfY2hlY2tfcmVzdWx0ID0gMDsKKworICAgIC8qIFNraXAgZW50aXJlbHkgaWYgdGhlcmUgaXMgYW4gb3BlbmluZyBwYXJlbnRoZXNpcyAqLworICAgIGxlZnRfcGFyZW5faW5kZXggPSBQeVVuaWNvZGVfRmluZENoYXIoc2VsZi0+dGV4dCwgbGVmdF9wYXJlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHRleHRfbGVuLCAxKTsKKyAgICBpZiAobGVmdF9wYXJlbl9pbmRleCA8IC0xKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKGxlZnRfcGFyZW5faW5kZXggIT0gLTEpIHsKKyAgICAgICAgLyogVXNlIGRlZmF1bHQgZXJyb3IgbWVzc2FnZSBmb3IgYW55IGxpbmUgd2l0aCBhbiBvcGVuaW5nIHBhcmVuICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAvKiBIYW5kbGUgdGhlIHNpbXBsZSBzdGF0ZW1lbnQgY2FzZSAqLworICAgIGxlZ2FjeV9jaGVja19yZXN1bHQgPSBfY2hlY2tfZm9yX2xlZ2FjeV9zdGF0ZW1lbnRzKHNlbGYsIDApOworICAgIGlmIChsZWdhY3lfY2hlY2tfcmVzdWx0IDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisKKyAgICB9CisgICAgaWYgKGxlZ2FjeV9jaGVja19yZXN1bHQgPT0gMCkgeworICAgICAgICAvKiBIYW5kbGUgdGhlIG9uZS1saW5lIGNvbXBsZXggc3RhdGVtZW50IGNhc2UgKi8KKyAgICAgICAgUHlfVUNTNCBjb2xvbiA9IDU4OworICAgICAgICBQeV9zc2l6ZV90IGNvbG9uX2luZGV4OworICAgICAgICBjb2xvbl9pbmRleCA9IFB5VW5pY29kZV9GaW5kQ2hhcihzZWxmLT50ZXh0LCBjb2xvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgdGV4dF9sZW4sIDEpOworICAgICAgICBpZiAoY29sb25faW5kZXggPCAtMSkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChjb2xvbl9pbmRleCA+PSAwICYmIGNvbG9uX2luZGV4IDwgdGV4dF9sZW4pIHsKKyAgICAgICAgICAgIC8qIENoZWNrIGFnYWluLCBzdGFydGluZyBmcm9tIGp1c3QgYWZ0ZXIgdGhlIGNvbG9uICovCisgICAgICAgICAgICBpZiAoX2NoZWNrX2Zvcl9sZWdhY3lfc3RhdGVtZW50cyhzZWxmLCBjb2xvbl9pbmRleCsxKSA8IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZpbGVvYmplY3QuYyBiL09iamVjdHMvZmlsZW9iamVjdC5jCmluZGV4IDk4ZjQyYTkuLjFhOTNhNmQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmlsZW9iamVjdC5jCisrKyBiL09iamVjdHMvZmlsZW9iamVjdC5jCkBAIC0yNiw4ICsyNiw4IEBACiAvKiBFeHRlcm5hbCBDIGludGVyZmFjZSAqLwogCiBQeU9iamVjdCAqCi1QeUZpbGVfRnJvbUZkKGludCBmZCwgY2hhciAqbmFtZSwgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY2hhciAqZW5jb2RpbmcsCi0gICAgICAgICAgICAgIGNoYXIgKmVycm9ycywgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCitQeUZpbGVfRnJvbUZkKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kZSwgaW50IGJ1ZmZlcmluZywgY29uc3QgY2hhciAqZW5jb2RpbmcsCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycywgY29uc3QgY2hhciAqbmV3bGluZSwgaW50IGNsb3NlZmQpCiB7CiAgICAgUHlPYmplY3QgKmlvLCAqc3RyZWFtOwogICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwpAQCAtMzcyLDggKzM3MiwxMSBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHN0ZHByaW50ZXJfd3JpdGUoUHlTdGRQcmludGVyX09iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgY2hhciAqYzsKKyAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBQeU9iamVjdCAqYnl0ZXMgPSBOVUxMOworICAgIGNoYXIgKnN0cjsKICAgICBQeV9zc2l6ZV90IG47CisgICAgaW50IGVycjsKIAogICAgIGlmIChzZWxmLT5mZCA8IDApIHsKICAgICAgICAgLyogZmQgbWlnaHQgYmUgaW52YWxpZCBvbiBXaW5kb3dzCkBAIC0zODMsMjUgKzM4Niw0MSBAQAogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInMiLCAmYykpIHsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIlUiLCAmdW5pY29kZSkpCiAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyogZW5jb2RlIFVuaWNvZGUgdG8gVVRGLTggKi8KKyAgICBzdHIgPSBQeVVuaWNvZGVfQXNVVEY4QW5kU2l6ZSh1bmljb2RlLCAmbik7CisgICAgaWYgKHN0ciA9PSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgIGJ5dGVzID0gX1B5VW5pY29kZV9Bc1VURjhTdHJpbmcodW5pY29kZSwgImJhY2tzbGFzaHJlcGxhY2UiKTsKKyAgICAgICAgaWYgKGJ5dGVzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplKGJ5dGVzLCAmc3RyLCAmbikgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYnl0ZXMpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9Ci0gICAgbiA9IHN0cmxlbihjKTsKIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKICAgICBlcnJubyA9IDA7Ci0jaWYgZGVmaW5lZChNU19XSU42NCkgfHwgZGVmaW5lZChNU19XSU5ET1dTKQorI2lmZGVmIE1TX1dJTkRPV1MKICAgICBpZiAobiA+IElOVF9NQVgpCiAgICAgICAgIG4gPSBJTlRfTUFYOwotICAgIG4gPSB3cml0ZShzZWxmLT5mZCwgYywgKGludCluKTsKKyAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIHN0ciwgKGludCluKTsKICNlbHNlCi0gICAgbiA9IHdyaXRlKHNlbGYtPmZkLCBjLCBuKTsKKyAgICBuID0gd3JpdGUoc2VsZi0+ZmQsIHN0ciwgbik7CiAjZW5kaWYKKyAgICAvKiBzYXZlIGVycm5vLCBpdCBjYW4gYmUgbW9kaWZpZWQgaW5kaXJlY3RseSBieSBQeV9YREVDUkVGKCkgKi8KKyAgICBlcnIgPSBlcnJubzsKICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUwogCisgICAgUHlfWERFQ1JFRihieXRlcyk7CisKICAgICBpZiAobiA8IDApIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVBR0FJTikKKyAgICAgICAgaWYgKGVyciA9PSBFQUdBSU4pCiAgICAgICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKyAgICAgICAgZXJybm8gPSBlcnI7CiAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19JT0Vycm9yKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9mbG9hdG9iamVjdC5jIGIvT2JqZWN0cy9mbG9hdG9iamVjdC5jCmluZGV4IGEwOGE4NTIuLmFjZDg4ZDYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvZmxvYXRvYmplY3QuYworKysgYi9PYmplY3RzL2Zsb2F0b2JqZWN0LmMKQEAgLTksMTEgKzksNiBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZmxvYXQuaD4KIAotI3VuZGVmIE1BWAotI3VuZGVmIE1JTgotI2RlZmluZSBNQVgoeCwgeSkgKCh4KSA8ICh5KSA/ICh5KSA6ICh4KSkKLSNkZWZpbmUgTUlOKHgsIHkpICgoeCkgPCAoeSkgPyAoeCkgOiAoeSkpCi0KIAogLyogU3BlY2lhbCBmcmVlIGxpc3QKICAgIGZyZWVfbGlzdCBpcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBhdmFpbGFibGUgUHlGbG9hdE9iamVjdHMsIGxpbmtlZApAQCAtMTE0LDcgKzEwOSw3IEBACiBQeU9iamVjdCAqCiBQeUZsb2F0X0Zyb21Eb3VibGUoZG91YmxlIGZ2YWwpCiB7Ci0gICAgcmVnaXN0ZXIgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CisgICAgUHlGbG9hdE9iamVjdCAqb3AgPSBmcmVlX2xpc3Q7CiAgICAgaWYgKG9wICE9IE5VTEwpIHsKICAgICAgICAgZnJlZV9saXN0ID0gKFB5RmxvYXRPYmplY3QgKikgUHlfVFlQRShvcCk7CiAgICAgICAgIG51bWZyZWUtLTsKQEAgLTEyNCw3ICsxMTksNyBAQAogICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQogICAgIC8qIElubGluZSBQeU9iamVjdF9OZXcgKi8KLSAgICBQeU9iamVjdF9JTklUKG9wLCAmUHlGbG9hdF9UeXBlKTsKKyAgICAodm9pZClQeU9iamVjdF9JTklUKG9wLCAmUHlGbG9hdF9UeXBlKTsKICAgICBvcC0+b2JfZnZhbCA9IGZ2YWw7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBvcDsKIH0KQEAgLTEzNiw2ICsxMzEsNyBAQAogICAgIGRvdWJsZSB4OwogICAgIFB5T2JqZWN0ICpzX2J1ZmZlciA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBsZW47CisgICAgUHlfYnVmZmVyIHZpZXcgPSB7TlVMTCwgTlVMTH07CiAgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CiAKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKHYpKSB7CkBAIC0xNDgsOSArMTQ0LDI5IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc0NoYXJCdWZmZXIodiwgJnMsICZsZW4pKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAiZmxvYXQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyIik7CisgICAgZWxzZSBpZiAoUHlCeXRlc19DaGVjayh2KSkgeworICAgICAgICBzID0gUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgIGxlbiA9IFB5Qnl0ZXNfR0VUX1NJWkUodik7CisgICAgfQorICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKHYpKSB7CisgICAgICAgIHMgPSBQeUJ5dGVBcnJheV9BU19TVFJJTkcodik7CisgICAgICAgIGxlbiA9IFB5Qnl0ZUFycmF5X0dFVF9TSVpFKHYpOworICAgIH0KKyAgICBlbHNlIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodiwgJnZpZXcsIFB5QlVGX1NJTVBMRSkgPT0gMCkgeworICAgICAgICBzID0gKGNvbnN0IGNoYXIgKil2aWV3LmJ1ZjsKKyAgICAgICAgbGVuID0gdmlldy5sZW47CisgICAgICAgIC8qIENvcHkgdG8gTlVMLXRlcm1pbmF0ZWQgYnVmZmVyLiAqLworICAgICAgICBzX2J1ZmZlciA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgbGVuKTsKKyAgICAgICAgaWYgKHNfYnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJnZpZXcpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcyA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHNfYnVmZmVyKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAiZmxvYXQoKSBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgbnVtYmVyLCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBsYXN0ID0gcyArIGxlbjsKQEAgLTE3NCw2ICsxOTAsNyBAQAogICAgIGVsc2UKICAgICAgICAgcmVzdWx0ID0gUHlGbG9hdF9Gcm9tRG91YmxlKHgpOwogCisgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgUHlfWERFQ1JFRihzX2J1ZmZlcik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTIxOCw2ICsyMzUsNyBAQAogICAgIGlmIChmbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCFQeUZsb2F0X0NoZWNrKGZvKSkgeworICAgICAgICBQeV9ERUNSRUYoZm8pOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5iX2Zsb2F0IHNob3VsZCByZXR1cm4gZmxvYXQgb2JqZWN0Iik7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI0Niw3ICsyNjQsNyBAQAogc3RhdGljIGludAogY29udmVydF90b19kb3VibGUoUHlPYmplY3QgKip2LCBkb3VibGUgKmRibCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2JqID0gKnY7CisgICAgUHlPYmplY3QgKm9iaiA9ICp2OwogCiAgICAgaWYgKFB5TG9uZ19DaGVjayhvYmopKSB7CiAgICAgICAgICpkYmwgPSBQeUxvbmdfQXNEb3VibGUob2JqKTsKQEAgLTExMzEsNyArMTE0OSw3IEBACiAgICAgfQogCiAgICAgbSA9IGZyZXhwKGZhYnMoeCksICZlKTsKLSAgICBzaGlmdCA9IDEgLSBNQVgoREJMX01JTl9FWFAgLSBlLCAwKTsKKyAgICBzaGlmdCA9IDEgLSBQeV9NQVgoREJMX01JTl9FWFAgLSBlLCAwKTsKICAgICBtID0gbGRleHAobSwgc2hpZnQpOwogICAgIGUgLT0gc2hpZnQ7CiAKQEAgLTEyODUsOCArMTMwMyw4IEBACiAgICAgZmRpZ2l0cyA9IGNvZWZmX2VuZCAtIHNfc3RvcmU7CiAgICAgaWYgKG5kaWdpdHMgPT0gMCkKICAgICAgICAgZ290byBwYXJzZV9lcnJvcjsKLSAgICBpZiAobmRpZ2l0cyA+IE1JTihEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIExPTkdfTUlOLzIsCi0gICAgICAgICAgICAgICAgICAgICAgTE9OR19NQVgvMiArIDEgLSBEQkxfTUFYX0VYUCkvNCkKKyAgICBpZiAobmRpZ2l0cyA+IFB5X01JTihEQkxfTUlOX0VYUCAtIERCTF9NQU5UX0RJRyAtIExPTkdfTUlOLzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgTE9OR19NQVgvMiArIDEgLSBEQkxfTUFYX0VYUCkvNCkKICAgICAgICAgZ290byBpbnNhbmVfbGVuZ3RoX2Vycm9yOwogCiAgICAgLyogW3AgPGV4cG9uZW50Pl0gKi8KQEAgLTEzNDIsNyArMTM2MCw3IEBACiAKICAgICAvKiBsc2IgPSBleHBvbmVudCBvZiBsZWFzdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlICpyb3VuZGVkKiB2YWx1ZS4KICAgICAgICBUaGlzIGlzIHRvcF9leHAgLSBEQkxfTUFOVF9ESUcgdW5sZXNzIHJlc3VsdCBpcyBzdWJub3JtYWwuICovCi0gICAgbHNiID0gTUFYKHRvcF9leHAsIChsb25nKURCTF9NSU5fRVhQKSAtIERCTF9NQU5UX0RJRzsKKyAgICBsc2IgPSBQeV9NQVgodG9wX2V4cCwgKGxvbmcpREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHOwogCiAgICAgeCA9IDAuMDsKICAgICBpZiAoZXhwID49IGxzYikgewpAQCAtMTQyMSw3ICsxNDM5LDcgQEAKID4+PiBmbG9hdC5mcm9taGV4KCcweDEuZmZmZnAxMCcpXG5cCiAyMDQ3Ljk4NDM3NVxuXAogPj4+IGZsb2F0LmZyb21oZXgoJy0weDFwLTEwNzQnKVxuXAotLTQuOTQwNjU2NDU4NDEyNDY1NGUtMzI0Iik7CistNWUtMzI0Iik7CiAKIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTE1NDksNyArMTU2Nyw3IEBACiAgICAgdG1wID0gZmxvYXRfbmV3KCZQeUZsb2F0X1R5cGUsIGFyZ3MsIGt3ZHMpOwogICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KFB5RmxvYXRfQ2hlY2tFeGFjdCh0bXApKTsKKyAgICBhc3NlcnQoUHlGbG9hdF9DaGVjayh0bXApKTsKICAgICBuZXdvYmogPSB0eXBlLT50cF9hbGxvYyh0eXBlLCAwKTsKICAgICBpZiAobmV3b2JqID09IE5VTEwpIHsKICAgICAgICAgUHlfREVDUkVGKHRtcCk7CkBAIC0xNzExLDcgKzE3MjksNyBAQAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTpfX2Zvcm1hdF9fIiwgJmZvcm1hdF9zcGVjKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeUZsb2F0X0Zvcm1hdEFkdmFuY2VkV3JpdGVyKAogICAgICAgICAmd3JpdGVyLAogICAgICAgICBzZWxmLApAQCAtMTg1OCw3ICsxODc2LDcgQEAKICAgICBmbG9hdF9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX25ldyAqLwogfTsKIAotdm9pZAoraW50CiBfUHlGbG9hdF9Jbml0KHZvaWQpCiB7CiAgICAgLyogV2UgYXR0ZW1wdCB0byBkZXRlcm1pbmUgaWYgdGhpcyBtYWNoaW5lIGlzIHVzaW5nIElFRUUKQEAgLTE5MDgsOCArMTkyNiwxMSBAQAogICAgIGZsb2F0X2Zvcm1hdCA9IGRldGVjdGVkX2Zsb2F0X2Zvcm1hdDsKIAogICAgIC8qIEluaXQgZmxvYXQgaW5mbyAqLwotICAgIGlmIChGbG9hdEluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmRmxvYXRJbmZvVHlwZSwgJmZsb2F0aW5mb19kZXNjKTsKKyAgICBpZiAoRmxvYXRJbmZvVHlwZS50cF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZGbG9hdEluZm9UeXBlLCAmZmxvYXRpbmZvX2Rlc2MpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gMTsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9PYmplY3RzL2ZyYW1lb2JqZWN0LmMgYi9PYmplY3RzL2ZyYW1lb2JqZWN0LmMKaW5kZXggYjMxMjEzMC4uNTVlZTU2MyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mcmFtZW9iamVjdC5jCisrKyBiL09iamVjdHMvZnJhbWVvYmplY3QuYwpAQCAtNywxMSArNyw2IEBACiAjaW5jbHVkZSAib3Bjb2RlLmgiCiAjaW5jbHVkZSAic3RydWN0bWVtYmVyLmgiCiAKLSN1bmRlZiBNSU4KLSN1bmRlZiBNQVgKLSNkZWZpbmUgTUlOKGEsIGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lIE1BWChhLCBiKSAoKGEpID4gKGIpID8gKGEpIDogKGIpKQotCiAjZGVmaW5lIE9GRih4KSBvZmZzZXRvZihQeUZyYW1lT2JqZWN0LCB4KQogCiBzdGF0aWMgUHlNZW1iZXJEZWYgZnJhbWVfbWVtYmVybGlzdFtdID0gewpAQCAtMjYsNyArMjEsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGZyYW1lX2dldGxvY2FscyhQeUZyYW1lT2JqZWN0ICpmLCB2b2lkICpjbG9zdXJlKQogewotICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGYpOworICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmKSA8IDApCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIFB5X0lOQ1JFRihmLT5mX2xvY2Fscyk7CiAgICAgcmV0dXJuIGYtPmZfbG9jYWxzOwogfQpAQCAtMTYwLDggKzE1Niw4IEBACiAKICAgICAvKiBXZSdyZSBub3cgcmVhZHkgdG8gbG9vayBhdCB0aGUgYnl0ZWNvZGUuICovCiAgICAgUHlCeXRlc19Bc1N0cmluZ0FuZFNpemUoZi0+Zl9jb2RlLT5jb19jb2RlLCAoY2hhciAqKikmY29kZSwgJmNvZGVfbGVuKTsKLSAgICBtaW5fYWRkciA9IE1JTihuZXdfbGFzdGksIGYtPmZfbGFzdGkpOwotICAgIG1heF9hZGRyID0gTUFYKG5ld19sYXN0aSwgZi0+Zl9sYXN0aSk7CisgICAgbWluX2FkZHIgPSBQeV9NSU4obmV3X2xhc3RpLCBmLT5mX2xhc3RpKTsKKyAgICBtYXhfYWRkciA9IFB5X01BWChuZXdfbGFzdGksIGYtPmZfbGFzdGkpOwogCiAgICAgLyogWW91IGNhbid0IGp1bXAgb250byBhIGxpbmUgd2l0aCBhbiAnZXhjZXB0JyBzdGF0ZW1lbnQgb24gaXQgLQogICAgICAqIHRoZXkgZXhwZWN0IHRvIGhhdmUgYW4gZXhjZXB0aW9uIG9uIHRoZSB0b3Agb2YgdGhlIHN0YWNrLCB3aGljaApAQCAtMjkzLDcgKzI4OSw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIG1pbl9kZWx0YV9pYmxvY2sgPSBNSU4obWluX2RlbHRhX2libG9jaywgZGVsdGFfaWJsb2NrKTsKKyAgICAgICAgbWluX2RlbHRhX2libG9jayA9IFB5X01JTihtaW5fZGVsdGFfaWJsb2NrLCBkZWx0YV9pYmxvY2spOwogCiAgICAgICAgIGlmIChvcCA+PSBIQVZFX0FSR1VNRU5UKSB7CiAgICAgICAgICAgICBhZGRyICs9IDI7CkBAIC00NjYsNyArNDYyLDcgQEAKIGZyYW1lX3RyYXZlcnNlKFB5RnJhbWVPYmplY3QgKmYsIHZpc2l0cHJvYyB2aXNpdCwgdm9pZCAqYXJnKQogewogICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipwOwotICAgIGludCBpLCBzbG90czsKKyAgICBQeV9zc2l6ZV90IGksIHNsb3RzOwogCiAgICAgUHlfVklTSVQoZi0+Zl9iYWNrKTsKICAgICBQeV9WSVNJVChmLT5mX2NvZGUpOwpAQCAtNDkzLDEwICs0ODksMTAgQEAKIH0KIAogc3RhdGljIHZvaWQKLWZyYW1lX2NsZWFyKFB5RnJhbWVPYmplY3QgKmYpCitmcmFtZV90cF9jbGVhcihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipwLCAqKm9sZHRvcDsKLSAgICBpbnQgaSwgc2xvdHM7CisgICAgUHlfc3NpemVfdCBpLCBzbG90czsKIAogICAgIC8qIEJlZm9yZSBhbnl0aGluZyBlbHNlLCBtYWtlIHN1cmUgdGhhdCB0aGlzIGZyYW1lIGlzIGNsZWFybHkgbWFya2VkCiAgICAgICogYXMgYmVpbmcgZGVmdW5jdCEgIEVsc2UsIGUuZy4sIGEgZ2VuZXJhdG9yIHJlYWNoYWJsZSBmcm9tIHRoaXMKQEAgLTUwNSw2ICs1MDEsNyBAQAogICAgICAqLwogICAgIG9sZHRvcCA9IGYtPmZfc3RhY2t0b3A7CiAgICAgZi0+Zl9zdGFja3RvcCA9IE5VTEw7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOwogCiAgICAgUHlfQ0xFQVIoZi0+Zl9leGNfdHlwZSk7CiAgICAgUHlfQ0xFQVIoZi0+Zl9leGNfdmFsdWUpOwpAQCAtNTI1LDYgKzUyMiwyNSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorZnJhbWVfY2xlYXIoUHlGcmFtZU9iamVjdCAqZikKK3sKKyAgICBpZiAoZi0+Zl9leGVjdXRpbmcpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgY2xlYXIgYW4gZXhlY3V0aW5nIGZyYW1lIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoZi0+Zl9nZW4pIHsKKyAgICAgICAgX1B5R2VuX0ZpbmFsaXplKGYtPmZfZ2VuKTsKKyAgICAgICAgYXNzZXJ0KGYtPmZfZ2VuID09IE5VTEwpOworICAgIH0KKyAgICBmcmFtZV90cF9jbGVhcihmKTsKKyAgICBQeV9SRVRVUk5fTk9ORTsKK30KKworUHlEb2NfU1RSVkFSKGNsZWFyX19kb2NfXywKKyJGLmNsZWFyKCk6IGNsZWFyIG1vc3QgcmVmZXJlbmNlcyBoZWxkIGJ5IHRoZSBmcmFtZSIpOworCitzdGF0aWMgUHlPYmplY3QgKgogZnJhbWVfc2l6ZW9mKFB5RnJhbWVPYmplY3QgKmYpCiB7CiAgICAgUHlfc3NpemVfdCByZXMsIGV4dHJhcywgbmNlbGxzLCBuZnJlZXM7CkBAIC01NDMsNiArNTU5LDggQEAKICJGLl9fc2l6ZW9mX18oKSAtPiBzaXplIG9mIEYgaW4gbWVtb3J5LCBpbiBieXRlcyIpOwogCiBzdGF0aWMgUHlNZXRob2REZWYgZnJhbWVfbWV0aG9kc1tdID0geworICAgIHsiY2xlYXIiLCAgICAgICAgICAgKFB5Q0Z1bmN0aW9uKWZyYW1lX2NsZWFyLCAgICAgICBNRVRIX05PQVJHUywKKyAgICAgY2xlYXJfX2RvY19ffSwKICAgICB7Il9fc2l6ZW9mX18iLCAgICAgIChQeUNGdW5jdGlvbilmcmFtZV9zaXplb2YsICAgICAgTUVUSF9OT0FSR1MsCiAgICAgIHNpemVvZl9fZG9jX199LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAvKiBzZW50aW5lbCAqLwpAQCAtNTcxLDcgKzU4OSw3IEBACiAgICAgUHlfVFBGTEFHU19ERUZBVUxUIHwgUHlfVFBGTEFHU19IQVZFX0dDLC8qIHRwX2ZsYWdzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKWZyYW1lX3RyYXZlcnNlLCAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCi0gICAgKGlucXVpcnkpZnJhbWVfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLworICAgIChpbnF1aXJ5KWZyYW1lX3RwX2NsZWFyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfY2xlYXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwpAQCAtNTgzLDEzICs2MDEsMTMgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RpY3QgKi8KIH07CiAKLXN0YXRpYyBQeU9iamVjdCAqYnVpbHRpbl9vYmplY3Q7CitfUHlfSURFTlRJRklFUihfX2J1aWx0aW5zX18pOwogCiBpbnQgX1B5RnJhbWVfSW5pdCgpCiB7Ci0gICAgYnVpbHRpbl9vYmplY3QgPSBQeVVuaWNvZGVfSW50ZXJuRnJvbVN0cmluZygiX19idWlsdGluc19fIik7Ci0gICAgaWYgKGJ1aWx0aW5fb2JqZWN0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOworICAgIC8qIEJlZm9yZSwgUHlJZF9fX2J1aWx0aW5zX18gd2FzIGEgc3RyaW5nIGNyZWF0ZWQgZXhwbGljaXRseSBpbgorICAgICAgIHRoaXMgZnVuY3Rpb24uIE5vdyB0aGVyZSBpcyBub3RoaW5nIHRvIGluaXRpYWxpemUgYW55bW9yZSwgYnV0CisgICAgICAgdGhlIGZ1bmN0aW9uIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuICovCiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTYxMCw3ICs2MjgsNyBAQAogICAgIH0KICNlbmRpZgogICAgIGlmIChiYWNrID09IE5VTEwgfHwgYmFjay0+Zl9nbG9iYWxzICE9IGdsb2JhbHMpIHsKLSAgICAgICAgYnVpbHRpbnMgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBidWlsdGluX29iamVjdCk7CisgICAgICAgIGJ1aWx0aW5zID0gX1B5RGljdF9HZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fKTsKICAgICAgICAgaWYgKGJ1aWx0aW5zKSB7CiAgICAgICAgICAgICBpZiAoUHlNb2R1bGVfQ2hlY2soYnVpbHRpbnMpKSB7CiAgICAgICAgICAgICAgICAgYnVpbHRpbnMgPSBQeU1vZHVsZV9HZXREaWN0KGJ1aWx0aW5zKTsKQEAgLTcwOCwxMSArNzI2LDEyIEBACiAgICAgICAgIFB5X0lOQ1JFRihsb2NhbHMpOwogICAgICAgICBmLT5mX2xvY2FscyA9IGxvY2FsczsKICAgICB9Ci0gICAgZi0+Zl90c3RhdGUgPSB0c3RhdGU7CiAKICAgICBmLT5mX2xhc3RpID0gLTE7CiAgICAgZi0+Zl9saW5lbm8gPSBjb2RlLT5jb19maXJzdGxpbmVubzsKICAgICBmLT5mX2libG9jayA9IDA7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOworICAgIGYtPmZfZ2VuID0gTlVMTDsKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhmKTsKICAgICByZXR1cm4gZjsKQEAgLTc1MywxMiArNzcyLDkgQEAKICAgIElmIGRlcmVmIGlzIHRydWUsIHRoZW4gdGhlIHZhbHVlcyBiZWluZyBjb3BpZWQgYXJlIGNlbGwgdmFyaWFibGVzCiAgICBhbmQgdGhlIHZhbHVlIGlzIGV4dHJhY3RlZCBmcm9tIHRoZSBjZWxsIHZhcmlhYmxlIGJlZm9yZSBiZWluZyBwdXQKICAgIGluIGRpY3QuCi0KLSAgIEV4Y2VwdGlvbnMgcmFpc2VkIHdoaWxlIG1vZGlmeWluZyB0aGUgZGljdCBhcmUgc2lsZW50bHkgaWdub3JlZCwKLSAgIGJlY2F1c2UgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gcmVwb3J0IHRoZW0uCiAgKi8KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIG1hcF90b19kaWN0KFB5T2JqZWN0ICptYXAsIFB5X3NzaXplX3Qgbm1hcCwgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICoqdmFsdWVzLAogICAgICAgICAgICAgaW50IGRlcmVmKQogewpAQCAtNzcwLDE5ICs3ODYsMjQgQEAKICAgICAgICAgUHlPYmplY3QgKmtleSA9IFB5VHVwbGVfR0VUX0lURU0obWFwLCBqKTsKICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gdmFsdWVzW2pdOwogICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKGtleSkpOwotICAgICAgICBpZiAoZGVyZWYpIHsKKyAgICAgICAgaWYgKGRlcmVmICYmIHZhbHVlICE9IE5VTEwpIHsKICAgICAgICAgICAgIGFzc2VydChQeUNlbGxfQ2hlY2sodmFsdWUpKTsKICAgICAgICAgICAgIHZhbHVlID0gUHlDZWxsX0dFVCh2YWx1ZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmIChQeU9iamVjdF9EZWxJdGVtKGRpY3QsIGtleSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0RlbEl0ZW0oZGljdCwga2V5KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKFB5T2JqZWN0X1NldEl0ZW0oZGljdCwga2V5LCB2YWx1ZSkgIT0gMCkKLSAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gMDsKIH0KIAogLyogQ29weSB2YWx1ZXMgZnJvbSB0aGUgImxvY2FscyIgZGljdCBpbnRvIHRoZSBmYXN0IGxvY2Fscy4KQEAgLTgzOSw0MiArODYwLDQ5IEBACiAgICAgfQogfQogCi12b2lkCi1QeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoraW50CitQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihQeUZyYW1lT2JqZWN0ICpmKQogewogICAgIC8qIE1lcmdlIGZhc3QgbG9jYWxzIGludG8gZi0+Zl9sb2NhbHMgKi8KICAgICBQeU9iamVjdCAqbG9jYWxzLCAqbWFwOwogICAgIFB5T2JqZWN0ICoqZmFzdDsKLSAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlfc3NpemVfdCBqOwotICAgIGludCBuY2VsbHMsIG5mcmVldmFyczsKLSAgICBpZiAoZiA9PSBOVUxMKQotICAgICAgICByZXR1cm47CisgICAgUHlfc3NpemVfdCBuY2VsbHMsIG5mcmVldmFyczsKKworICAgIGlmIChmID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CiAgICAgbG9jYWxzID0gZi0+Zl9sb2NhbHM7CiAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzID0gUHlEaWN0X05ldygpOwotICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIENhbid0IHJlcG9ydCBpdCA6LSggKi8KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGNvID0gZi0+Zl9jb2RlOwogICAgIG1hcCA9IGNvLT5jb192YXJuYW1lczsKLSAgICBpZiAoIVB5VHVwbGVfQ2hlY2sobWFwKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworICAgIGlmICghUHlUdXBsZV9DaGVjayhtYXApKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjb192YXJuYW1lcyBtdXN0IGJlIGEgdHVwbGUsIG5vdCAlcyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG1hcCktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGZhc3QgPSBmLT5mX2xvY2Fsc3BsdXM7CiAgICAgaiA9IFB5VHVwbGVfR0VUX1NJWkUobWFwKTsKICAgICBpZiAoaiA+IGNvLT5jb19ubG9jYWxzKQogICAgICAgICBqID0gY28tPmNvX25sb2NhbHM7Ci0gICAgaWYgKGNvLT5jb19ubG9jYWxzKQotICAgICAgICBtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCk7CisgICAgaWYgKGNvLT5jb19ubG9jYWxzKSB7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChtYXAsIGosIGxvY2FscywgZmFzdCwgMCkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KICAgICBuY2VsbHMgPSBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19jZWxsdmFycyk7CiAgICAgbmZyZWV2YXJzID0gUHlUdXBsZV9HRVRfU0laRShjby0+Y29fZnJlZXZhcnMpOwogICAgIGlmIChuY2VsbHMgfHwgbmZyZWV2YXJzKSB7Ci0gICAgICAgIG1hcF90b19kaWN0KGNvLT5jb19jZWxsdmFycywgbmNlbGxzLAotICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscywgMSk7CisgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fY2VsbHZhcnMsIG5jZWxscywKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzLCAxKSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKwogICAgICAgICAvKiBJZiB0aGUgbmFtZXNwYWNlIGlzIHVub3B0aW1pemVkLCB0aGVuIG9uZSBvZiB0aGUKICAgICAgICAgICAgZm9sbG93aW5nIGNhc2VzIGFwcGxpZXM6CiAgICAgICAgICAgIDEuIEl0IGRvZXMgbm90IGNvbnRhaW4gZnJlZSB2YXJpYWJsZXMsIGJlY2F1c2UgaXQKQEAgLTg4NCwxMSArOTEyLDI0IEBACiAgICAgICAgICAgIGludG8gdGhlIGxvY2FscyBkaWN0IHVzZWQgYnkgdGhlIGNsYXNzLgogICAgICAgICAqLwogICAgICAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fT1BUSU1JWkVEKSB7Ci0gICAgICAgICAgICBtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FscywgZmFzdCArIGNvLT5jb19ubG9jYWxzICsgbmNlbGxzLCAxKTsKKyAgICAgICAgICAgIGlmIChtYXBfdG9fZGljdChjby0+Y29fZnJlZXZhcnMsIG5mcmVldmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHMsIGZhc3QgKyBjby0+Y29fbmxvY2FscyArIG5jZWxscywgMSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KLSAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworICAgIHJldHVybiAwOworfQorCit2b2lkCitQeUZyYW1lX0Zhc3RUb0xvY2FscyhQeUZyYW1lT2JqZWN0ICpmKQoreworICAgIGludCByZXM7CisKKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworCisgICAgcmVzID0gUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZik7CisgICAgaWYgKHJlcyA8IDApCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiB9CiAKIHZvaWQKQEAgLTkwMCw3ICs5NDEsNyBAQAogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeV9zc2l6ZV90IGo7Ci0gICAgaW50IG5jZWxscywgbmZyZWV2YXJzOworICAgIFB5X3NzaXplX3QgbmNlbGxzLCBuZnJlZXZhcnM7CiAgICAgaWYgKGYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzOwpAQCAtOTUyLDcgKzk5Myw2IEBACiBQeUZyYW1lX0Zpbmkodm9pZCkKIHsKICAgICAodm9pZClQeUZyYW1lX0NsZWFyRnJlZUxpc3QoKTsKLSAgICBQeV9DTEVBUihidWlsdGluX29iamVjdCk7CiB9CiAKIC8qIFByaW50IHN1bW1hcnkgaW5mbyBhYm91dCB0aGUgc3RhdGUgb2YgdGhlIG9wdGltaXplZCBhbGxvY2F0b3IgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvZnVuY29iamVjdC5jIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKaW5kZXggNDk0MTViOS4uYjA0MzkzNCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9mdW5jb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9mdW5jb2JqZWN0LmMKQEAgLTgsNjAgKzgsNTkgQEAKIFB5T2JqZWN0ICoKIFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKFB5T2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKnF1YWxuYW1lKQogewotICAgIFB5RnVuY3Rpb25PYmplY3QgKm9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5RnVuY3Rpb25fVHlwZSk7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpfX25hbWVfXyA9IDA7Ci0gICAgaWYgKG9wICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKmRvYzsKLSAgICAgICAgUHlPYmplY3QgKmNvbnN0czsKLSAgICAgICAgUHlPYmplY3QgKm1vZHVsZTsKLSAgICAgICAgb3AtPmZ1bmNfd2Vha3JlZmxpc3QgPSBOVUxMOwotICAgICAgICBQeV9JTkNSRUYoY29kZSk7Ci0gICAgICAgIG9wLT5mdW5jX2NvZGUgPSBjb2RlOwotICAgICAgICBQeV9JTkNSRUYoZ2xvYmFscyk7Ci0gICAgICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOwotICAgICAgICBvcC0+ZnVuY19uYW1lID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX25hbWUpOwotICAgICAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCi0gICAgICAgIG9wLT5mdW5jX2t3ZGVmYXVsdHMgPSBOVUxMOyAvKiBObyBrZXl3b3JkIG9ubHkgZGVmYXVsdHMgKi8KLSAgICAgICAgb3AtPmZ1bmNfY2xvc3VyZSA9IE5VTEw7Ci0gICAgICAgIGNvbnN0cyA9ICgoUHlDb2RlT2JqZWN0ICopY29kZSktPmNvX2NvbnN0czsKLSAgICAgICAgaWYgKFB5VHVwbGVfU2l6ZShjb25zdHMpID49IDEpIHsKLSAgICAgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOwotICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZG9jKSkKLSAgICAgICAgICAgICAgICBkb2MgPSBQeV9Ob25lOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvYyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihkb2MpOwotICAgICAgICBvcC0+ZnVuY19kb2MgPSBkb2M7Ci0gICAgICAgIG9wLT5mdW5jX2RpY3QgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOwotICAgICAgICBvcC0+ZnVuY19hbm5vdGF0aW9ucyA9IE5VTEw7CisgICAgUHlGdW5jdGlvbk9iamVjdCAqb3A7CisgICAgUHlPYmplY3QgKmRvYywgKmNvbnN0cywgKm1vZHVsZTsKKyAgICBzdGF0aWMgUHlPYmplY3QgKl9fbmFtZV9fID0gTlVMTDsKIAotICAgICAgICAvKiBfX21vZHVsZV9fOiBJZiBtb2R1bGUgbmFtZSBpcyBpbiBnbG9iYWxzLCB1c2UgaXQuCi0gICAgICAgICAgIE90aGVyd2lzZSwgdXNlIE5vbmUuCi0gICAgICAgICovCi0gICAgICAgIGlmICghX19uYW1lX18pIHsKLSAgICAgICAgICAgIF9fbmFtZV9fID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fbmFtZV9fIik7Ci0gICAgICAgICAgICBpZiAoIV9fbmFtZV9fKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG9wKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBtb2R1bGUgPSBQeURpY3RfR2V0SXRlbShnbG9iYWxzLCBfX25hbWVfXyk7Ci0gICAgICAgIGlmIChtb2R1bGUpIHsKLSAgICAgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOwotICAgICAgICAgICAgb3AtPmZ1bmNfbW9kdWxlID0gbW9kdWxlOwotICAgICAgICB9Ci0gICAgICAgIGlmIChxdWFsbmFtZSkKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gcXVhbG5hbWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKLSAgICAgICAgUHlfSU5DUkVGKG9wLT5mdW5jX3F1YWxuYW1lKTsKKyAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkgeworICAgICAgICBfX25hbWVfXyA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOworICAgICAgICBpZiAoX19uYW1lX18gPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG9wID0gUHlPYmplY3RfR0NfTmV3KFB5RnVuY3Rpb25PYmplY3QsICZQeUZ1bmN0aW9uX1R5cGUpOworICAgIGlmIChvcCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9wLT5mdW5jX3dlYWtyZWZsaXN0ID0gTlVMTDsKKyAgICBQeV9JTkNSRUYoY29kZSk7CisgICAgb3AtPmZ1bmNfY29kZSA9IGNvZGU7CisgICAgUHlfSU5DUkVGKGdsb2JhbHMpOworICAgIG9wLT5mdW5jX2dsb2JhbHMgPSBnbG9iYWxzOworICAgIG9wLT5mdW5jX25hbWUgPSAoKFB5Q29kZU9iamVjdCAqKWNvZGUpLT5jb19uYW1lOworICAgIFB5X0lOQ1JFRihvcC0+ZnVuY19uYW1lKTsKKyAgICBvcC0+ZnVuY19kZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGRlZmF1bHQgYXJndW1lbnRzICovCisgICAgb3AtPmZ1bmNfa3dkZWZhdWx0cyA9IE5VTEw7IC8qIE5vIGtleXdvcmQgb25seSBkZWZhdWx0cyAqLworICAgIG9wLT5mdW5jX2Nsb3N1cmUgPSBOVUxMOworCisgICAgY29uc3RzID0gKChQeUNvZGVPYmplY3QgKiljb2RlKS0+Y29fY29uc3RzOworICAgIGlmIChQeVR1cGxlX1NpemUoY29uc3RzKSA+PSAxKSB7CisgICAgICAgIGRvYyA9IFB5VHVwbGVfR2V0SXRlbShjb25zdHMsIDApOworICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhkb2MpKQorICAgICAgICAgICAgZG9jID0gUHlfTm9uZTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKyAgICBQeV9JTkNSRUYoZG9jKTsKKyAgICBvcC0+ZnVuY19kb2MgPSBkb2M7CisKKyAgICBvcC0+ZnVuY19kaWN0ID0gTlVMTDsKKyAgICBvcC0+ZnVuY19tb2R1bGUgPSBOVUxMOworICAgIG9wLT5mdW5jX2Fubm90YXRpb25zID0gTlVMTDsKKworICAgIC8qIF9fbW9kdWxlX186IElmIG1vZHVsZSBuYW1lIGlzIGluIGdsb2JhbHMsIHVzZSBpdC4KKyAgICAgICBPdGhlcndpc2UsIHVzZSBOb25lLiAqLworICAgIG1vZHVsZSA9IFB5RGljdF9HZXRJdGVtKGdsb2JhbHMsIF9fbmFtZV9fKTsKKyAgICBpZiAobW9kdWxlKSB7CisgICAgICAgIFB5X0lOQ1JFRihtb2R1bGUpOworICAgICAgICBvcC0+ZnVuY19tb2R1bGUgPSBtb2R1bGU7CisgICAgfQorICAgIGlmIChxdWFsbmFtZSkKKyAgICAgICAgb3AtPmZ1bmNfcXVhbG5hbWUgPSBxdWFsbmFtZTsKKyAgICBlbHNlCisgICAgICAgIG9wLT5mdW5jX3F1YWxuYW1lID0gb3AtPmZ1bmNfbmFtZTsKKyAgICBQeV9JTkNSRUYob3AtPmZ1bmNfcXVhbG5hbWUpOworCiAgICAgX1B5T2JqZWN0X0dDX1RSQUNLKG9wKTsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopb3A7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL2dlbm9iamVjdC5jIGIvT2JqZWN0cy9nZW5vYmplY3QuYwppbmRleCAyZTc0YjhjLi42N2U2ZWY5IDEwMDY0NAotLS0gYS9PYmplY3RzL2dlbm9iamVjdC5jCisrKyBiL09iamVjdHMvZ2Vub2JqZWN0LmMKQEAgLTE1LDYgKzE1LDMxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQKK19QeUdlbl9GaW5hbGl6ZShQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeUdlbk9iamVjdCAqZ2VuID0gKFB5R2VuT2JqZWN0ICopc2VsZjsKKyAgICBQeU9iamVjdCAqcmVzOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICBpZiAoZ2VuLT5naV9mcmFtZSA9PSBOVUxMIHx8IGdlbi0+Z2lfZnJhbWUtPmZfc3RhY2t0b3AgPT0gTlVMTCkKKyAgICAgICAgLyogR2VuZXJhdG9yIGlzbid0IHBhdXNlZCwgc28gbm8gbmVlZCB0byBjbG9zZSAqLworICAgICAgICByZXR1cm47CisKKyAgICAvKiBTYXZlIHRoZSBjdXJyZW50IGV4Y2VwdGlvbiwgaWYgYW55LiAqLworICAgIFB5RXJyX0ZldGNoKCZlcnJvcl90eXBlLCAmZXJyb3JfdmFsdWUsICZlcnJvcl90cmFjZWJhY2spOworCisgICAgcmVzID0gZ2VuX2Nsb3NlKGdlbiwgTlVMTCk7CisKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZShzZWxmKTsKKyAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLworICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Cit9CisKIHN0YXRpYyB2b2lkCiBnZW5fZGVhbGxvYyhQeUdlbk9iamVjdCAqZ2VuKQogewpAQCAtMjcsMTIgKzUyLDggQEAKIAogICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKIAotICAgIGlmIChnZW4tPmdpX2ZyYW1lICE9IE5VTEwgJiYgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qIEdlbmVyYXRvciBpcyBwYXVzZWQsIHNvIHdlIG5lZWQgdG8gY2xvc2UgKi8KLSAgICAgICAgUHlfVFlQRShnZW4pLT50cF9kZWwoc2VsZik7Ci0gICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQotICAgICAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KLSAgICB9CisgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSkKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgIC8qIHJlc3VycmVjdGVkLiAgOiggKi8KIAogICAgIF9QeU9iamVjdF9HQ19VTlRSQUNLKHNlbGYpOwogICAgIFB5X0NMRUFSKGdlbi0+Z2lfZnJhbWUpOwpAQCAtNDAsNyArNjEsNiBAQAogICAgIFB5T2JqZWN0X0dDX0RlbChnZW4pOwogfQogCi0KIHN0YXRpYyBQeU9iamVjdCAqCiBnZW5fc2VuZF9leChQeUdlbk9iamVjdCAqZ2VuLCBQeU9iamVjdCAqYXJnLCBpbnQgZXhjKQogewpAQCAtNzYsNyArOTYsNiBAQAogCiAgICAgLyogR2VuZXJhdG9ycyBhbHdheXMgcmV0dXJuIHRvIHRoZWlyIG1vc3QgcmVjZW50IGNhbGxlciwgbm90CiAgICAgICogbmVjZXNzYXJpbHkgdGhlaXIgY3JlYXRvci4gKi8KLSAgICBmLT5mX3RzdGF0ZSA9IHRzdGF0ZTsKICAgICBQeV9YSU5DUkVGKHRzdGF0ZS0+ZnJhbWUpOwogICAgIGFzc2VydChmLT5mX2JhY2sgPT0gTlVMTCk7CiAgICAgZi0+Zl9iYWNrID0gdHN0YXRlLT5mcmFtZTsKQEAgLTkwLDggKzEwOSw2IEBACiAgICAgICogY3ljbGUuICovCiAgICAgYXNzZXJ0KGYtPmZfYmFjayA9PSB0c3RhdGUtPmZyYW1lKTsKICAgICBQeV9DTEVBUihmLT5mX2JhY2spOwotICAgIC8qIENsZWFyIHRoZSBib3Jyb3dlZCByZWZlcmVuY2UgdG8gdGhlIHRocmVhZCBzdGF0ZSAqLwotICAgIGYtPmZfdHN0YXRlID0gTlVMTDsKIAogICAgIC8qIElmIHRoZSBnZW5lcmF0b3IganVzdCByZXR1cm5lZCAoYXMgb3Bwb3NlZCB0byB5aWVsZGluZyksIHNpZ25hbAogICAgICAqIHRoYXQgdGhlIGdlbmVyYXRvciBpcyBleGhhdXN0ZWQuICovCkBAIC0xMjMsNiArMTQwLDcgQEAKICAgICAgICAgUHlfWERFQ1JFRih0KTsKICAgICAgICAgUHlfWERFQ1JFRih2KTsKICAgICAgICAgUHlfWERFQ1JFRih0Yik7CisgICAgICAgIGdlbi0+Z2lfZnJhbWUtPmZfZ2VuID0gTlVMTDsKICAgICAgICAgZ2VuLT5naV9mcmFtZSA9IE5VTEw7CiAgICAgICAgIFB5X0RFQ1JFRihmKTsKICAgICB9CkBAIC0yMjUsNjggKzI0Myw2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkCi1nZW5fZGVsKFB5T2JqZWN0ICpzZWxmKQotewotICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKLSAgICBQeUdlbk9iamVjdCAqZ2VuID0gKFB5R2VuT2JqZWN0ICopc2VsZjsKLQotICAgIGlmIChnZW4tPmdpX2ZyYW1lID09IE5VTEwgfHwgZ2VuLT5naV9mcmFtZS0+Zl9zdGFja3RvcCA9PSBOVUxMKQotICAgICAgICAvKiBHZW5lcmF0b3IgaXNuJ3QgcGF1c2VkLCBzbyBubyBuZWVkIHRvIGNsb3NlICovCi0gICAgICAgIHJldHVybjsKLQotICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPT0gMCk7Ci0gICAgc2VsZi0+b2JfcmVmY250ID0gMTsKLQotICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCi0gICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0KLSAgICByZXMgPSBnZW5fY2xvc2UoZ2VuLCBOVUxMKTsKLQotICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHNlbGYpOwotICAgIGVsc2UKLSAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0KLSAgICAvKiBSZXN0b3JlIHRoZSBzYXZlZCBleGNlcHRpb24uICovCi0gICAgUHlFcnJfUmVzdG9yZShlcnJvcl90eXBlLCBlcnJvcl92YWx1ZSwgZXJyb3JfdHJhY2ViYWNrKTsKLQotICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKLSAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgotICAgICAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKLSAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKLSAgICAgICAgcmV0dXJuOyAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KLQotICAgIC8qIGNsb3NlKCkgcmVzdXJyZWN0ZWQgaXQhICBNYWtlIGl0IGxvb2sgbGlrZSB0aGUgb3JpZ2luYWwgUHlfREVDUkVGCi0gICAgICogbmV2ZXIgaGFwcGVuZWQuCi0gICAgICovCi0gICAgewotICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKLSAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgc2VsZi0+b2JfcmVmY250ID0gcmVmY250OwotICAgIH0KLSAgICBhc3NlcnQoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpICYmCi0gICAgICAgICAgIF9QeV9BU19HQyhzZWxmKS0+Z2MuZ2NfcmVmcyAhPSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7Ci0KLSAgICAvKiBJZiBQeV9SRUZfREVCVUcsIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIF9QeV9SZWZUb3RhbCwgc28KLSAgICAgKiB3ZSBuZWVkIHRvIHVuZG8gdGhhdC4gKi8KLSAgICBfUHlfREVDX1JFRlRPVEFMOwotICAgIC8qIElmIFB5X1RSQUNFX1JFRlMsIF9QeV9OZXdSZWZlcmVuY2UgcmUtYWRkZWQgc2VsZiB0byB0aGUgb2JqZWN0Ci0gICAgICogY2hhaW4sIHNvIG5vIG1vcmUgdG8gZG8gdGhlcmUuCi0gICAgICogSWYgQ09VTlRfQUxMT0NTLCB0aGUgb3JpZ2luYWwgZGVjcmVmIGJ1bXBlZCB0cF9mcmVlcywgYW5kCi0gICAgICogX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgdHBfYWxsb2NzOiAgYm90aCBvZiB0aG9zZSBuZWVkIHRvIGJlCi0gICAgICogdW5kb25lLgotICAgICAqLwotI2lmZGVmIENPVU5UX0FMTE9DUwotICAgIC0tKFB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzKTsKLSAgICAtLShQeV9UWVBFKHNlbGYpLT50cF9hbGxvY3MpOwotI2VuZGlmCi19Ci0KLQogCiBQeURvY19TVFJWQVIodGhyb3dfZG9jLAogInRocm93KHR5cFssdmFsWyx0Yl1dKSAtPiByYWlzZSBleGNlcHRpb24gaW4gZ2VuZXJhdG9yLFxuXApAQCAtNDQwLDEzICszOTYsMjkgQEAKIAogICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N0b3BJdGVyYXRpb24pKSB7CiAgICAgICAgIFB5RXJyX0ZldGNoKCZldCwgJmV2LCAmdGIpOworICAgICAgICBpZiAoZXYpIHsKKyAgICAgICAgICAgIC8qIGV4Y2VwdGlvbiB3aWxsIHVzdWFsbHkgYmUgbm9ybWFsaXNlZCBhbHJlYWR5ICovCisgICAgICAgICAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKGV2LCAoUHlUeXBlT2JqZWN0ICopIGV0KSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gKChQeVN0b3BJdGVyYXRpb25PYmplY3QgKilldiktPnZhbHVlOworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGV2KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZXQgPT0gUHlFeGNfU3RvcEl0ZXJhdGlvbikgeworICAgICAgICAgICAgICAgIC8qIGF2b2lkIG5vcm1hbGlzYXRpb24gYW5kIHRha2UgZXYgYXMgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGV2OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBub3JtYWxpc2F0aW9uIHJlcXVpcmVkICovCisgICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZldCwgJmV2LCAmdGIpOworICAgICAgICAgICAgICAgIGlmICghUHlPYmplY3RfVHlwZUNoZWNrKGV2LCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfU3RvcEl0ZXJhdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfUmVzdG9yZShldCwgZXYsIHRiKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICgoUHlTdG9wSXRlcmF0aW9uT2JqZWN0ICopZXYpLT52YWx1ZTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihldik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgUHlfWERFQ1JFRihldCk7CiAgICAgICAgIFB5X1hERUNSRUYodGIpOwotICAgICAgICBpZiAoZXYpIHsKLSAgICAgICAgICAgIHZhbHVlID0gKChQeVN0b3BJdGVyYXRpb25PYmplY3QgKilldiktPnZhbHVlOwotICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihldik7Ci0gICAgICAgIH0KICAgICB9IGVsc2UgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KQEAgLTUyMCw3ICs0OTIsOCBAQAogICAgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3NldGF0dHJvICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9hc19idWZmZXIgKi8KLSAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MsLyogdHBfZmxhZ3MgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hBVkVfR0MgfAorICAgICAgICBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUsICAgICAgICAgICAgICAgLyogdHBfZmxhZ3MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2RvYyAqLwogICAgICh0cmF2ZXJzZXByb2MpZ2VuX3RyYXZlcnNlLCAgICAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCkBAIC01NDcsNyArNTIwLDkgQEAKICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NhY2hlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9zdWJjbGFzc2VzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdCAqLwotICAgIGdlbl9kZWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZGVsICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kZWwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3ZlcnNpb25fdGFnICovCisgICAgX1B5R2VuX0ZpbmFsaXplLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9maW5hbGl6ZSAqLwogfTsKIAogUHlPYmplY3QgKgpAQCAtNTU5LDYgKzUzNCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBnZW4tPmdpX2ZyYW1lID0gZjsKKyAgICBmLT5mX2dlbiA9IChQeU9iamVjdCAqKSBnZW47CiAgICAgUHlfSU5DUkVGKGYtPmZfY29kZSk7CiAgICAgZ2VuLT5naV9jb2RlID0gKFB5T2JqZWN0ICopKGYtPmZfY29kZSk7CiAgICAgZ2VuLT5naV9ydW5uaW5nID0gMDsKZGlmZiAtLWdpdCBhL09iamVjdHMvaXRlcm9iamVjdC5jIGIvT2JqZWN0cy9pdGVyb2JqZWN0LmMKaW5kZXggM2NmYmVhZi4uMzA0N2Q2YiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9pdGVyb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9pdGVyb2JqZWN0LmMKQEAgLTQsNyArNCw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyAgICAgIGl0X2luZGV4OworICAgIFB5X3NzaXplX3QgaXRfaW5kZXg7CiAgICAgUHlPYmplY3QgKml0X3NlcTsgLyogU2V0IHRvIE5VTEwgd2hlbiBpdGVyYXRvciBpcyBleGhhdXN0ZWQgKi8KIH0gc2VxaXRlcm9iamVjdDsKIApAQCAtNTQsNiArNTQsMTEgQEAKICAgICBzZXEgPSBpdC0+aXRfc2VxOwogICAgIGlmIChzZXEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKGl0LT5pdF9pbmRleCA9PSBQWV9TU0laRV9UX01BWCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpdGVyIGluZGV4IHRvbyBsYXJnZSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBQeVNlcXVlbmNlX0dldEl0ZW0oc2VxLCBpdC0+aXRfaW5kZXgpOwogICAgIGlmIChyZXN1bHQgIT0gTlVMTCkgewpAQCAtNzYsOSArODEsMTQgQEAKICAgICBQeV9zc2l6ZV90IHNlcXNpemUsIGxlbjsKIAogICAgIGlmIChpdC0+aXRfc2VxKSB7Ci0gICAgICAgIHNlcXNpemUgPSBQeVNlcXVlbmNlX1NpemUoaXQtPml0X3NlcSk7Ci0gICAgICAgIGlmIChzZXFzaXplID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzTGVuKGl0LT5pdF9zZXEpKSB7CisgICAgICAgICAgICBzZXFzaXplID0gUHlTZXF1ZW5jZV9TaXplKGl0LT5pdF9zZXEpOworICAgICAgICAgICAgaWYgKHNlcXNpemUgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeV9SRVRVUk5fTk9USU1QTEVNRU5URUQ7CisgICAgICAgIH0KICAgICAgICAgbGVuID0gc2Vxc2l6ZSAtIGl0LT5pdF9pbmRleDsKICAgICAgICAgaWYgKGxlbiA+PSAwKQogICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChsZW4pOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9saXN0b2JqZWN0LmMgYi9PYmplY3RzL2xpc3RvYmplY3QuYwppbmRleCAyOTdlZGYxLi4xOTk2N2NhIDEwMDY0NAotLS0gYS9PYmplY3RzL2xpc3RvYmplY3QuYworKysgYi9PYmplY3RzL2xpc3RvYmplY3QuYwpAQCAtMjEzLDExICsyMTMsMTEgQEAKIH0KIAogaW50Ci1QeUxpc3RfU2V0SXRlbShyZWdpc3RlciBQeU9iamVjdCAqb3AsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSwKLSAgICAgICAgICAgICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpuZXdpdGVtKQorUHlMaXN0X1NldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGksCisgICAgICAgICAgICAgICBQeU9iamVjdCAqbmV3aXRlbSkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqb2xkaXRlbTsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKnA7CisgICAgUHlPYmplY3QgKm9sZGl0ZW07CisgICAgUHlPYmplY3QgKipwOwogICAgIGlmICghUHlMaXN0X0NoZWNrKG9wKSkgewogICAgICAgICBQeV9YREVDUkVGKG5ld2l0ZW0pOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTMzOCw1NyArMzM4LDU3IEBACiBsaXN0X3JlcHIoUHlMaXN0T2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaTsKLSAgICBQeU9iamVjdCAqcyA9IE5VTEw7Ci0gICAgX1B5QWNjdSBhY2M7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpzZXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpzOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogCiAgICAgaWYgKFB5X1NJWkUodikgPT0gMCkgewogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIltdIik7CiAgICAgfQogCi0gICAgaWYgKHNlcCA9PSBOVUxMKSB7Ci0gICAgICAgIHNlcCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsICIpOwotICAgICAgICBpZiAoc2VwID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KICAgICBpID0gUHlfUmVwckVudGVyKChQeU9iamVjdCopdik7CiAgICAgaWYgKGkgIT0gMCkgewogICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygiWy4uLl0iKSA6IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgLyogIlsiICsgIjEiICsgIiwgMiIgKiAobGVuIC0gMSkgKyAiXSIgKi8KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IDEgKyAxICsgKDIgKyAxKSAqIChQeV9TSVpFKHYpIC0gMSkgKyAxOwogCi0gICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJbIik7Ci0gICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICdbJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgLyogRG8gcmVwcigpIG9uIGVhY2ggZWxlbWVudC4gIE5vdGUgdGhhdCB0aGlzIG1heSBtdXRhdGUgdGhlIGxpc3QsCiAgICAgICAgc28gbXVzdCByZWZldGNoIHRoZSBsaXN0IHNpemUgb24gZWFjaCBpdGVyYXRpb24uICovCiAgICAgZm9yIChpID0gMDsgaSA8IFB5X1NJWkUodik7ICsraSkgeworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwgIiwgMikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgcmVwciBvZiBhIGxpc3QiKSkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIHMgPSBQeU9iamVjdF9SZXByKHYtPm9iX2l0ZW1baV0pOwogICAgICAgICBQeV9MZWF2ZVJlY3Vyc2l2ZUNhbGwoKTsKLSAgICAgICAgaWYgKGkgPiAwICYmIF9QeUFjY3VfQWNjdW11bGF0ZSgmYWNjLCBzZXApKQorICAgICAgICBpZiAocyA9PSBOVUxMKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgaWYgKHMgPT0gTlVMTCB8fCBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgcykpCisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIoJndyaXRlciwgcykgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBQeV9DTEVBUihzKTsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYocyk7CiAgICAgfQotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiXSIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorCisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFyKCZ3cml0ZXIsICddJykgPCAwKQogICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOwogCiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwotICAgIHJldHVybiBfUHlBY2N1X0ZpbmlzaCgmYWNjKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIGVycm9yOgotICAgIF9QeUFjY3VfRGVzdHJveSgmYWNjKTsKLSAgICBQeV9YREVDUkVGKHMpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC02NDQsOSArNjQ0LDE0IEBACiAgICAgbWVtY3B5KHJlY3ljbGUsICZpdGVtW2lsb3ddLCBzKTsKIAogICAgIGlmIChkIDwgMCkgeyAvKiBEZWxldGUgLWQgaXRlbXMgKi8KLSAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLAotICAgICAgICAgICAgKFB5X1NJWkUoYSkgLSBpaGlnaCkqc2l6ZW9mKFB5T2JqZWN0ICopKTsKLSAgICAgICAgbGlzdF9yZXNpemUoYSwgUHlfU0laRShhKSArIGQpOworICAgICAgICBQeV9zc2l6ZV90IHRhaWw7CisgICAgICAgIHRhaWwgPSAoUHlfU0laRShhKSAtIGloaWdoKSAqIHNpemVvZihQeU9iamVjdCAqKTsKKyAgICAgICAgbWVtbW92ZSgmaXRlbVtpaGlnaCtkXSwgJml0ZW1baWhpZ2hdLCB0YWlsKTsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKGEsIFB5X1NJWkUoYSkgKyBkKSA8IDApIHsKKyAgICAgICAgICAgIG1lbW1vdmUoJml0ZW1baWhpZ2hdLCAmaXRlbVtpaGlnaCtkXSwgdGFpbCk7CisgICAgICAgICAgICBtZW1jcHkoJml0ZW1baWxvd10sIHJlY3ljbGUsIHMpOworICAgICAgICAgICAgZ290byBFcnJvcjsKKyAgICAgICAgfQogICAgICAgICBpdGVtID0gYS0+b2JfaXRlbTsKICAgICB9CiAgICAgZWxzZSBpZiAoZCA+IDApIHsgLyogSW5zZXJ0IGQgaXRlbXMgKi8KQEAgLTgyNiw3ICs4MzEsNyBAQAogICAgIGl0ZXJuZXh0ID0gKml0LT5vYl90eXBlLT50cF9pdGVybmV4dDsKIAogICAgIC8qIEd1ZXNzIGEgcmVzdWx0IGxpc3Qgc2l6ZS4gKi8KLSAgICBuID0gX1B5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CisgICAgbiA9IFB5T2JqZWN0X0xlbmd0aEhpbnQoYiwgOCk7CiAgICAgaWYgKG4gPT0gLTEpIHsKICAgICAgICAgUHlfREVDUkVGKGl0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC04NzEsOCArODc2LDEwIEBACiAgICAgfQogCiAgICAgLyogQ3V0IGJhY2sgcmVzdWx0IGxpc3QgaWYgaW5pdGlhbCBndWVzcyB3YXMgdG9vIGxhcmdlLiAqLwotICAgIGlmIChQeV9TSVpFKHNlbGYpIDwgc2VsZi0+YWxsb2NhdGVkKQotICAgICAgICBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsgIC8qIHNocmlua2luZyBjYW4ndCBmYWlsICovCisgICAgaWYgKFB5X1NJWkUoc2VsZikgPCBzZWxmLT5hbGxvY2F0ZWQpIHsKKyAgICAgICAgaWYgKGxpc3RfcmVzaXplKHNlbGYsIFB5X1NJWkUoc2VsZikpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgUHlfREVDUkVGKGl0KTsKICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTkyNSwxNyArOTMyLDE3IEBACiAgICAgdiA9IHNlbGYtPm9iX2l0ZW1baV07CiAgICAgaWYgKGkgPT0gUHlfU0laRShzZWxmKSAtIDEpIHsKICAgICAgICAgc3RhdHVzID0gbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSAtIDEpOwotICAgICAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgICAgICByZXR1cm4gdjsgLyogYW5kIHYgbm93IG93bnMgdGhlIHJlZmVyZW5jZSB0aGUgbGlzdCBoYWQgKi8KKyAgICAgICAgaWYgKHN0YXR1cyA+PSAwKQorICAgICAgICAgICAgcmV0dXJuIHY7IC8qIGFuZCB2IG5vdyBvd25zIHRoZSByZWZlcmVuY2UgdGhlIGxpc3QgaGFkICovCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9JTkNSRUYodik7CiAgICAgc3RhdHVzID0gbGlzdF9hc3Nfc2xpY2Uoc2VsZiwgaSwgaSsxLCAoUHlPYmplY3QgKilOVUxMKTsKLSAgICBhc3NlcnQoc3RhdHVzID49IDApOwotICAgIC8qIFVzZSBzdGF0dXMsIHNvIHRoYXQgaW4gYSByZWxlYXNlIGJ1aWxkIGNvbXBpbGVycyBkb24ndAotICAgICAqIGNvbXBsYWluIGFib3V0IHRoZSB1bnVzZWQgbmFtZS4KLSAgICAgKi8KLSAgICAodm9pZCkgc3RhdHVzOwotCisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgcmV0dXJuIHY7CiB9CiAKQEAgLTEwNTEsOSArMTA1OCw5IEBACiBzdGF0aWMgaW50CiBiaW5hcnlzb3J0KHNvcnRzbGljZSBsbywgUHlPYmplY3QgKipoaSwgUHlPYmplY3QgKipzdGFydCkKIHsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGs7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipsLCAqKnAsICoqcjsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcGl2b3Q7CisgICAgUHlfc3NpemVfdCBrOworICAgIFB5T2JqZWN0ICoqbCwgKipwLCAqKnI7CisgICAgUHlPYmplY3QgKnBpdm90OwogCiAgICAgYXNzZXJ0KGxvLmtleXMgPD0gc3RhcnQgJiYgc3RhcnQgPD0gaGkpOwogICAgIC8qIGFzc2VydCBbbG8sIHN0YXJ0KSBpcyBzb3J0ZWQgKi8KQEAgLTE4MjUsNyArMTgzMiw4IEBACiAgICAgYXNzZXJ0KG1zKTsKICAgICB3aGlsZSAobXMtPm4gPiAxKSB7CiAgICAgICAgIFB5X3NzaXplX3QgbiA9IG1zLT5uIC0gMjsKLSAgICAgICAgaWYgKG4gPiAwICYmIHBbbi0xXS5sZW4gPD0gcFtuXS5sZW4gKyBwW24rMV0ubGVuKSB7CisgICAgICAgIGlmICgobiA+IDAgJiYgcFtuLTFdLmxlbiA8PSBwW25dLmxlbiArIHBbbisxXS5sZW4pIHx8CisgICAgICAgICAgICAobiA+IDEgJiYgcFtuLTJdLmxlbiA8PSBwW24tMV0ubGVuICsgcFtuXS5sZW4pKSB7CiAgICAgICAgICAgICBpZiAocFtuLTFdLmxlbiA8IHBbbisxXS5sZW4pCiAgICAgICAgICAgICAgICAgLS1uOwogICAgICAgICAgICAgaWYgKG1lcmdlX2F0KG1zLCBuKSA8IDApCkBAIC0yNDc4LDYgKzI0ODYsNyBAQAogICAgICAgICAgICAgUHlPYmplY3QgKipnYXJiYWdlOwogICAgICAgICAgICAgc2l6ZV90IGN1cjsKICAgICAgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgICAgIGludCByZXM7CiAKICAgICAgICAgICAgIGlmIChzbGljZWxlbmd0aCA8PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtMjUyOCwxNCArMjUzNywxNCBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBQeV9TSVpFKHNlbGYpIC09IHNsaWNlbGVuZ3RoOwotICAgICAgICAgICAgbGlzdF9yZXNpemUoc2VsZiwgUHlfU0laRShzZWxmKSk7CisgICAgICAgICAgICByZXMgPSBsaXN0X3Jlc2l6ZShzZWxmLCBQeV9TSVpFKHNlbGYpKTsKIAogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNsaWNlbGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZ2FyYmFnZVtpXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeU1lbV9GUkVFKGdhcmJhZ2UpOwogCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiByZXM7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKiBhc3NpZ24gc2xpY2UgKi8KQEAgLTI2NjIsNyArMjY3MSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyBpdF9pbmRleDsKKyAgICBQeV9zc2l6ZV90IGl0X2luZGV4OwogICAgIFB5TGlzdE9iamVjdCAqaXRfc2VxOyAvKiBTZXQgdG8gTlVMTCB3aGVuIGl0ZXJhdG9yIGlzIGV4aGF1c3RlZCAqLwogfSBsaXN0aXRlcm9iamVjdDsKIApAQCAtMjc5OSw3ICsyODA4LDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBsaXN0aXRlcl9zZXRzdGF0ZShsaXN0aXRlcm9iamVjdCAqaXQsIFB5T2JqZWN0ICpzdGF0ZSkKIHsKLSAgICBsb25nIGluZGV4ID0gUHlMb25nX0FzTG9uZyhzdGF0ZSk7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IFB5TG9uZ19Bc1NzaXplX3Qoc3RhdGUpOwogICAgIGlmIChpbmRleCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoaXQtPml0X3NlcSAhPSBOVUxMKSB7CkBAIC0yOTYyLDcgKzI5NzEsNyBAQAogICAgIGlmIChmb3J3YXJkKSB7CiAgICAgICAgIGxpc3RpdGVyb2JqZWN0ICppdCA9IChsaXN0aXRlcm9iamVjdCAqKV9pdDsKICAgICAgICAgaWYgKGl0LT5pdF9zZXEpCi0gICAgICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiTihPKWwiLCBfUHlPYmplY3RfR2V0QnVpbHRpbigiaXRlciIpLAorICAgICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTyluIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LT5pdF9zZXEsIGl0LT5pdF9pbmRleCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbGlzdHJldml0ZXJvYmplY3QgKml0ID0gKGxpc3RyZXZpdGVyb2JqZWN0ICopX2l0OwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9sb25nb2JqZWN0LmMgYi9PYmplY3RzL2xvbmdvYmplY3QuYwppbmRleCAyMjQ1ZWNlLi4zYTY0YjUzIDEwMDY0NAotLS0gYS9PYmplY3RzL2xvbmdvYmplY3QuYworKysgYi9PYmplY3RzL2xvbmdvYmplY3QuYwpAQCAtMTcsNyArMTcsOCBAQAogI2VuZGlmCiAKIC8qIGNvbnZlcnQgYSBQeUxvbmcgb2Ygc2l6ZSAxLCAwIG9yIC0xIHRvIGFuIHNkaWdpdCAqLwotI2RlZmluZSBNRURJVU1fVkFMVUUoeCkgKFB5X1NJWkUoeCkgPCAwID8gLShzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSA6ICAgXAorI2RlZmluZSBNRURJVU1fVkFMVUUoeCkgKGFzc2VydCgtMSA8PSBQeV9TSVpFKHgpICYmIFB5X1NJWkUoeCkgPD0gMSksICAgXAorICAgICAgICAgUHlfU0laRSh4KSA8IDAgPyAtKHNkaWdpdCkoeCktPm9iX2RpZ2l0WzBdIDogICBcCiAgICAgICAgICAgICAgKFB5X1NJWkUoeCkgPT0gMCA/IChzZGlnaXQpMCA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgIChzZGlnaXQpKHgpLT5vYl9kaWdpdFswXSkpCiAjZGVmaW5lIEFCUyh4KSAoKHgpIDwgMCA/IC0oeCkgOiAoeCkpCkBAIC03MiwxMSArNzMsMjEgQEAKIAogLyogSWYgYSBmcmVzaGx5LWFsbG9jYXRlZCBpbnQgaXMgYWxyZWFkeSBzaGFyZWQsIGl0IG11c3QKICAgIGJlIGEgc21hbGwgaW50ZWdlciwgc28gbmVnYXRpbmcgaXQgbXVzdCBnbyB0byBQeUxvbmdfRnJvbUxvbmcgKi8KLSNkZWZpbmUgTkVHQVRFKHgpIFwKLSAgICBkbyBpZiAoUHlfUkVGQ05UKHgpID09IDEpIFB5X1NJWkUoeCkgPSAtUHlfU0laRSh4KTsgIFwKLSAgICAgICBlbHNlIHsgUHlPYmplY3QqIHRtcD1QeUxvbmdfRnJvbUxvbmcoLU1FRElVTV9WQUxVRSh4KSk7ICBcCi0gICAgICAgICAgIFB5X0RFQ1JFRih4KTsgKHgpID0gKFB5TG9uZ09iamVjdCopdG1wOyB9ICAgICAgICAgICAgICAgXAotICAgIHdoaWxlKDApCitQeV9MT0NBTF9JTkxJTkUodm9pZCkKK19QeUxvbmdfTmVnYXRlKFB5TG9uZ09iamVjdCAqKnhfcCkKK3sKKyAgICBQeUxvbmdPYmplY3QgKng7CisKKyAgICB4ID0gKFB5TG9uZ09iamVjdCAqKSp4X3A7CisgICAgaWYgKFB5X1JFRkNOVCh4KSA9PSAxKSB7CisgICAgICAgIFB5X1NJWkUoeCkgPSAtUHlfU0laRSh4KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICp4X3AgPSAoUHlMb25nT2JqZWN0ICopUHlMb25nX0Zyb21Mb25nKC1NRURJVU1fVkFMVUUoeCkpOworICAgIFB5X0RFQ1JFRih4KTsKK30KKwogLyogRm9yIGludCBtdWx0aXBsaWNhdGlvbiwgdXNlIHRoZSBPKE4qKjIpIHNjaG9vbCBhbGdvcml0aG0gdW5sZXNzCiAgKiBib3RoIG9wZXJhbmRzIGNvbnRhaW4gbW9yZSB0aGFuIEtBUkFUU1VCQV9DVVRPRkYgZGlnaXRzICh0aGlzCiAgKiBiZWluZyBhbiBpbnRlcm5hbCBQeXRob24gaW50IGRpZ2l0LCBpbiBiYXNlIEJBU0UpLgpAQCAtOTEsMTEgKzEwMiw2IEBACiAgKi8KICNkZWZpbmUgRklWRUFSWV9DVVRPRkYgOAogCi0jdW5kZWYgTUlOCi0jdW5kZWYgTUFYCi0jZGVmaW5lIE1BWCh4LCB5KSAoKHgpIDwgKHkpID8gKHkpIDogKHgpKQotI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA+ICh5KSA/ICh5KSA6ICh4KSkKLQogI2RlZmluZSBTSUdDSEVDSyhQeVRyeUJsb2NrKSAgICAgICAgICAgICAgICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoUHlFcnJfQ2hlY2tTaWduYWxzKCkpIFB5VHJ5QmxvY2sgICAgXApAQCAtMTA2LDcgKzExMiw3IEBACiAgICBvZiB0aGUgYWxnb3JpdGhtcyB1c2VkLCB0aGlzIGNvdWxkIHNhdmUgYXQgbW9zdCBiZSBvbmUgd29yZCBhbnl3YXkuICovCiAKIHN0YXRpYyBQeUxvbmdPYmplY3QgKgotbG9uZ19ub3JtYWxpemUocmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2KQorbG9uZ19ub3JtYWxpemUoUHlMb25nT2JqZWN0ICp2KQogewogICAgIFB5X3NzaXplX3QgaiA9IEFCUyhQeV9TSVpFKHYpKTsKICAgICBQeV9zc2l6ZV90IGkgPSBqOwpAQCAtMTU1LDYgKzE2MSwxNSBAQAogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorICAgIC8qIElzc3VlICMxNzU3Njogd2FybiBpZiAncmVzdWx0JyBub3Qgb2YgZXhhY3QgdHlwZSBpbnQuICovCisgICAgaWYgKFB5RXJyX1dhcm5Gb3JtYXQoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLCAxLAorICAgICAgICAgICAgIl9faW50X18gcmV0dXJuZWQgbm9uLWludCAodHlwZSAlLjIwMHMpLiAgIgorICAgICAgICAgICAgIlRoZSBhYmlsaXR5IHRvIHJldHVybiBhbiBpbnN0YW5jZSBvZiBhIHN0cmljdCBzdWJjbGFzcyBvZiBpbnQgIgorICAgICAgICAgICAgImlzIGRlcHJlY2F0ZWQsIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFB5dGhvbi4iLAorICAgICAgICAgICAgcmVzdWx0LT5vYl90eXBlLT50cF9uYW1lKSkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiAoUHlMb25nT2JqZWN0ICopcmVzdWx0OwogfQogCkBAIC0zNzcsNyArMzkyLDcgQEAKIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhQeU9iamVjdCAqdnYsIGludCAqb3ZlcmZsb3cpCiB7CiAgICAgLyogVGhpcyB2ZXJzaW9uIGJ5IFRpbSBQZXRlcnMgKi8KLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBsb25nIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC00ODksNyArNTA0LDcgQEAKIAogUHlfc3NpemVfdAogUHlMb25nX0FzU3NpemVfdChQeU9iamVjdCAqdnYpIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHNpemVfdCB4LCBwcmV2OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTU0NSw3ICs1NjAsNyBAQAogdW5zaWduZWQgbG9uZwogUHlMb25nX0FzVW5zaWduZWRMb25nKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIGxvbmcgeCwgcHJldjsKICAgICBQeV9zc2l6ZV90IGk7CiAKQEAgLTU3NSw3ICs1OTAsNyBAQAogICAgICAgICB4ID0gKHggPDwgUHlMb25nX1NISUZUKSB8IHYtPm9iX2RpZ2l0W2ldOwogICAgICAgICBpZiAoKHggPj4gUHlMb25nX1NISUZUKSAhPSBwcmV2KSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHl0aG9uIGludCB0b28gbGFyZ2UgdG8gY29udmVydCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBpbnQgdG9vIGxhcmdlIHRvIGNvbnZlcnQgIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0byBDIHVuc2lnbmVkIGxvbmciKTsKICAgICAgICAgICAgIHJldHVybiAodW5zaWduZWQgbG9uZykgLTE7CiAgICAgICAgIH0KQEAgLTU4OSw3ICs2MDQsNyBAQAogc2l6ZV90CiBQeUxvbmdfQXNTaXplX3QoUHlPYmplY3QgKnZ2KQogewotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgc2l6ZV90IHgsIHByZXY7CiAgICAgUHlfc3NpemVfdCBpOwogCkBAIC02MzIsNyArNjQ3LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nCiBfUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqdnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlMb25nT2JqZWN0ICp2OworICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICB1bnNpZ25lZCBsb25nIHg7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIGludCBzaWduOwpAQCAtNjYwLDcgKzY3NSw3IEBACiB9CiAKIHVuc2lnbmVkIGxvbmcKLVB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2socmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlMb25nX0FzVW5zaWduZWRMb25nTWFzayhQeU9iamVjdCAqb3ApCiB7CiAgICAgUHlMb25nT2JqZWN0ICpsbzsKICAgICB1bnNpZ25lZCBsb25nIHZhbDsKQEAgLTk3NSw5ICs5OTAsNiBAQAogUHlMb25nX0Zyb21Wb2lkUHRyKHZvaWQgKnApCiB7CiAjaWYgU0laRU9GX1ZPSURfUCA8PSBTSVpFT0ZfTE9ORwotICAgIC8qIHNwZWNpYWwtY2FzZSBudWxsIHBvaW50ZXIgKi8KLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nKCh1bnNpZ25lZCBsb25nKShQeV91aW50cHRyX3QpcCk7CiAjZWxzZQogCkBAIC05ODcsOSArOTk5LDYgQEAKICNpZiBTSVpFT0ZfTE9OR19MT05HIDwgU0laRU9GX1ZPSURfUAogIyAgIGVycm9yICJQeUxvbmdfRnJvbVZvaWRQdHI6IHNpemVvZihQWV9MT05HX0xPTkcpIDwgc2l6ZW9mKHZvaWQqKSIKICNlbmRpZgotICAgIC8qIHNwZWNpYWwtY2FzZSBudWxsIHBvaW50ZXIgKi8KLSAgICBpZiAoIXApCi0gICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoMCk7CiAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZygodW5zaWduZWQgUFlfTE9OR19MT05HKShQeV91aW50cHRyX3QpcCk7CiAjZW5kaWYgLyogU0laRU9GX1ZPSURfUCA8PSBTSVpFT0ZfTE9ORyAqLwogCkBAIC0xMDM1LDcgKzEwNDQsNiBAQAogICogcmV3cml0dGVuIHRvIHVzZSB0aGUgbmV3ZXIgUHlMb25nX3tBcyxGcm9tfUJ5dGVBcnJheSBBUEkuCiAgKi8KIAotI2RlZmluZSBJU19MSVRUTEVfRU5ESUFOIChpbnQpKih1bnNpZ25lZCBjaGFyKikmb25lCiAjZGVmaW5lIFBZX0FCU19MTE9OR19NSU4gKDAtKHVuc2lnbmVkIFBZX0xPTkdfTE9ORylQWV9MTE9OR19NSU4pCiAKIC8qIENyZWF0ZSBhIG5ldyBpbnQgb2JqZWN0IGZyb20gYSBDIFBZX0xPTkdfTE9ORyBpbnQuICovCkBAIC0xMTg4LDcgKzExOTYsNiBAQAogewogICAgIFB5TG9uZ09iamVjdCAqdjsKICAgICBQWV9MT05HX0xPTkcgYnl0ZXM7Ci0gICAgaW50IG9uZSA9IDE7CiAgICAgaW50IHJlczsKICAgICBpbnQgZG9fZGVjcmVmID0gMDsgLyogaWYgbmJfaW50IHdhcyBjYWxsZWQgKi8KIApAQCAtMTIyMCw3ICsxMjI3LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmVzID0gX1B5TG9uZ19Bc0J5dGVBcnJheSgoUHlMb25nT2JqZWN0ICopdiwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgSVNfTElUVExFX0VORElBTiwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0laRU9GX0xPTkdfTE9ORywgUFlfTElUVExFX0VORElBTiwgMSk7CiAgICAgfQogICAgIGlmIChkb19kZWNyZWYpIHsKICAgICAgICAgUHlfREVDUkVGKHYpOwpAQCAtMTI0MSw3ICsxMjQ4LDYgQEAKIHsKICAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIGJ5dGVzOwotICAgIGludCBvbmUgPSAxOwogICAgIGludCByZXM7CiAKICAgICBpZiAodnYgPT0gTlVMTCkgewpAQCAtMTI2MCw3ICsxMjY2LDcgQEAKICAgICB9CiAKICAgICByZXMgPSBfUHlMb25nX0FzQnl0ZUFycmF5KChQeUxvbmdPYmplY3QgKil2diwgKHVuc2lnbmVkIGNoYXIgKikmYnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTSVpFT0ZfTE9OR19MT05HLCBJU19MSVRUTEVfRU5ESUFOLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVPRl9MT05HX0xPTkcsIFBZX0xJVFRMRV9FTkRJQU4sIDApOwogCiAgICAgLyogUGxhbiA5IGNhbid0IGhhbmRsZSBQWV9MT05HX0xPTkcgaW4gPyA6IGV4cHJlc3Npb25zICovCiAgICAgaWYgKHJlcyA8IDApCkBAIC0xMjc1LDcgKzEyODEsNyBAQAogc3RhdGljIHVuc2lnbmVkIFBZX0xPTkdfTE9ORwogX1B5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrKFB5T2JqZWN0ICp2dikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKnY7CisgICAgUHlMb25nT2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIFBZX0xPTkdfTE9ORyB4OwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpbnQgc2lnbjsKQEAgLTEzMDMsNyArMTMwOSw3IEBACiB9CiAKIHVuc2lnbmVkIFBZX0xPTkdfTE9ORwotUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2socmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2soUHlPYmplY3QgKm9wKQogewogICAgIFB5TG9uZ09iamVjdCAqbG87CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIHZhbDsKQEAgLTEzMjUsNyArMTMzMSw2IEBACiAgICAgUHlfREVDUkVGKGxvKTsKICAgICByZXR1cm4gdmFsOwogfQotI3VuZGVmIElTX0xJVFRMRV9FTkRJQU4KIAogLyogR2V0IGEgQyBsb25nIGxvbmcgaW50IGZyb20gYW4gaW50IG9iamVjdCBvciBhbnkgb2JqZWN0IHRoYXQgaGFzIGFuCiAgICBfX2ludF9fIG1ldGhvZC4KQEAgLTEzNDEsNyArMTM0Niw3IEBACiBQeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93KFB5T2JqZWN0ICp2diwgaW50ICpvdmVyZmxvdykKIHsKICAgICAvKiBUaGlzIHZlcnNpb24gYnkgVGltIFBldGVycyAqLwotICAgIHJlZ2lzdGVyIFB5TG9uZ09iamVjdCAqdjsKKyAgICBQeUxvbmdPYmplY3QgKnY7CiAgICAgdW5zaWduZWQgUFlfTE9OR19MT05HIHgsIHByZXY7CiAgICAgUFlfTE9OR19MT05HIHJlczsKICAgICBQeV9zc2l6ZV90IGk7CkBAIC0xNjA2LDcgKzE2MTEsNyBAQAogICAgICovCiAgICAgaWYgKHNpemVfYSA+IFBZX1NTSVpFX1RfTUFYIC8gUHlMb25nX1NISUZUKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgImxvbmcgaXMgdG9vIGxhcmdlIHRvIGZvcm1hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgLyogdGhlIGV4cHJlc3Npb24gc2l6ZV9hICogUHlMb25nX1NISUZUIGlzIG5vdyBzYWZlIGZyb20gb3ZlcmZsb3cgKi8KQEAgLTE2NzYsNyArMTY4MSw2IEBACiAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcCA9IChUWVBFKilQeVVuaWNvZGVfREFUQShzdHIpICsgc3RybGVuOyAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICpwID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAvKiBwb3V0WzBdIHRocm91Z2ggcG91dFtzaXplLTJdIGNvbnRyaWJ1dGUgZXhhY3RseSAgICAgICAgICAgIFwKICAgICAgICAgICAgX1B5TG9uZ19ERUNJTUFMX1NISUZUIGRpZ2l0cyBlYWNoICovICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGZvciAoaT0wOyBpIDwgc2l6ZSAtIDE7IGkrKykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTc0OSw3ICsxNzUzLDcgQEAKIGxvbmdfZm9ybWF0X2JpbmFyeShQeU9iamVjdCAqYWEsIGludCBiYXNlLCBpbnQgYWx0ZXJuYXRlLAogICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKLSAgICByZWdpc3RlciBQeUxvbmdPYmplY3QgKmEgPSAoUHlMb25nT2JqZWN0ICopYWE7CisgICAgUHlMb25nT2JqZWN0ICphID0gKFB5TG9uZ09iamVjdCAqKWFhOwogICAgIFB5T2JqZWN0ICp2OwogICAgIFB5X3NzaXplX3Qgc3o7CiAgICAgUHlfc3NpemVfdCBzaXplX2E7CkBAIC0xNzkwLDcgKzE3OTQsNyBAQAogICAgICAgICAvKiBFbnN1cmUgb3ZlcmZsb3cgZG9lc24ndCBvY2N1ciBkdXJpbmcgY29tcHV0YXRpb24gb2Ygc3ouICovCiAgICAgICAgIGlmIChzaXplX2EgPiAoUFlfU1NJWkVfVF9NQVggLSAzKSAvIFB5TG9uZ19TSElGVCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCBpcyB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gZm9ybWF0Iik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICAgICAgc2l6ZV9hX2luX2JpdHMgPSAoc2l6ZV9hIC0gMSkgKiBQeUxvbmdfU0hJRlQgKwpAQCAtMTk0NiwxMCArMTk1MCwxMCBAQAogICogc3RyaW5nIGNoYXJhY3RlcnMuCiAgKi8KIHN0YXRpYyBQeUxvbmdPYmplY3QgKgotbG9uZ19mcm9tX2JpbmFyeV9iYXNlKGNoYXIgKipzdHIsIGludCBiYXNlKQorbG9uZ19mcm9tX2JpbmFyeV9iYXNlKGNvbnN0IGNoYXIgKipzdHIsIGludCBiYXNlKQogewotICAgIGNoYXIgKnAgPSAqc3RyOwotICAgIGNoYXIgKnN0YXJ0ID0gcDsKKyAgICBjb25zdCBjaGFyICpwID0gKnN0cjsKKyAgICBjb25zdCBjaGFyICpzdGFydCA9IHA7CiAgICAgaW50IGJpdHNfcGVyX2NoYXI7CiAgICAgUHlfc3NpemVfdCBuOwogICAgIFB5TG9uZ09iamVjdCAqejsKQEAgLTIwMTQsMTAgKzIwMTgsMTAgQEAKICAqIElmIHVuc3VjY2Vzc2Z1bCwgTlVMTCB3aWxsIGJlIHJldHVybmVkLgogICovCiBQeU9iamVjdCAqCi1QeUxvbmdfRnJvbVN0cmluZyhjaGFyICpzdHIsIGNoYXIgKipwZW5kLCBpbnQgYmFzZSkKK1B5TG9uZ19Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgY2hhciAqKnBlbmQsIGludCBiYXNlKQogewogICAgIGludCBzaWduID0gMSwgZXJyb3JfaWZfbm9uemVybyA9IDA7Ci0gICAgY2hhciAqc3RhcnQsICpvcmlnX3N0ciA9IHN0cjsKKyAgICBjb25zdCBjaGFyICpzdGFydCwgKm9yaWdfc3RyID0gc3RyOwogICAgIFB5TG9uZ09iamVjdCAqeiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKnN0cm9iajsKICAgICBQeV9zc2l6ZV90IHNsZW47CkBAIC0yMTQ2LDEzICsyMTUwLDEzIEBACiBqdXN0IDEgZGlnaXQgYXQgdGhlIHN0YXJ0LCBzbyB0aGF0IHRoZSBjb3B5aW5nIGNvZGUgd2FzIGV4ZXJjaXNlZCBmb3IgZXZlcnkKIGRpZ2l0IGJleW9uZCB0aGUgZmlyc3QuCiAqKiovCi0gICAgICAgIHJlZ2lzdGVyIHR3b2RpZ2l0cyBjOyAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgdHdvZGlnaXRzIGM7ICAgICAgICAgICAvKiBjdXJyZW50IGlucHV0IGNoYXJhY3RlciAqLwogICAgICAgICBQeV9zc2l6ZV90IHNpemVfejsKICAgICAgICAgaW50IGk7CiAgICAgICAgIGludCBjb252d2lkdGg7CiAgICAgICAgIHR3b2RpZ2l0cyBjb252bXVsdG1heCwgY29udm11bHQ7CiAgICAgICAgIGRpZ2l0ICpweiwgKnB6c3RvcDsKLSAgICAgICAgY2hhciogc2NhbjsKKyAgICAgICAgY29uc3QgY2hhciogc2NhbjsKIAogICAgICAgICBzdGF0aWMgZG91YmxlIGxvZ19iYXNlX0JBU0VbMzddID0gezAuMGUwLH07CiAgICAgICAgIHN0YXRpYyBpbnQgY29udndpZHRoX2Jhc2VbMzddID0gezAsfTsKQEAgLTIyODAsMTkgKzIyODQsMTkgQEAKICAgICBpZiAoeiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAocGVuZCAhPSBOVUxMKQotICAgICAgICAqcGVuZCA9IHN0cjsKKyAgICAgICAgKnBlbmQgPSAoY2hhciAqKXN0cjsKICAgICByZXR1cm4gKFB5T2JqZWN0ICopIHo7CiAKICAgb25FcnJvcjoKICAgICBpZiAocGVuZCAhPSBOVUxMKQotICAgICAgICAqcGVuZCA9IHN0cjsKKyAgICAgICAgKnBlbmQgPSAoY2hhciAqKXN0cjsKICAgICBQeV9YREVDUkVGKHopOwogICAgIHNsZW4gPSBzdHJsZW4ob3JpZ19zdHIpIDwgMjAwID8gc3RybGVuKG9yaWdfc3RyKSA6IDIwMDsKICAgICBzdHJvYmogPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUob3JpZ19zdHIsIHNsZW4pOwogICAgIGlmIChzdHJvYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJpbnZhbGlkIGxpdGVyYWwgZm9yIGludCgpIHdpdGggYmFzZSAlZDogJVIiLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCiAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7CiAgICAgUHlfREVDUkVGKHN0cm9iaik7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC0yMzE2LDcgKzIzMjAsNyBAQAogICAgIHN0cm9iaiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUocywgUHlfTUlOKGxlbiwgMjAwKSk7CiAgICAgaWYgKHN0cm9iaiAhPSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlUiIsCisgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICUuMjAwUiIsCiAgICAgICAgICAgICAgICAgICAgICBiYXNlLCBzdHJvYmopOwogICAgICAgICBQeV9ERUNSRUYoc3Ryb2JqKTsKICAgICB9CkBAIC0yMzM3LDcgKzIzNDEsNyBAQAogUHlPYmplY3QgKgogUHlMb25nX0Zyb21Vbmljb2RlT2JqZWN0KFB5T2JqZWN0ICp1LCBpbnQgYmFzZSkKIHsKLSAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXNjaWlkaWcsICpzdHJvYmo7CisgICAgUHlPYmplY3QgKnJlc3VsdCwgKmFzY2lpZGlnOwogICAgIGNoYXIgKmJ1ZmZlciwgKmVuZCA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBidWZsZW47CiAKQEAgLTIzNTksMTMgKzIzNjMsOSBAQAogICAgICAgICBQeV9ERUNSRUYoYXNjaWlkaWcpOwogICAgICAgICBQeV9YREVDUkVGKHJlc3VsdCk7CiAgICAgfQotICAgIHN0cm9iaiA9IFB5U2VxdWVuY2VfR2V0U2xpY2UodSwgMCwgMjAwKTsKLSAgICBpZiAoc3Ryb2JqICE9IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBsaXRlcmFsIGZvciBpbnQoKSB3aXRoIGJhc2UgJWQ6ICVSIiwKLSAgICAgICAgICAgICAgICAgICAgIGJhc2UsIHN0cm9iaik7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHJvYmopOwotICAgIH0KKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgbGl0ZXJhbCBmb3IgaW50KCkgd2l0aCBiYXNlICVkOiAlLjIwMFIiLAorICAgICAgICAgICAgICAgICBiYXNlLCB1KTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjQxOSwxMCArMjQxOSwyMSBAQAogICAgICAgIFRoZSBxdW90aWVudCB6IGhhcyB0aGUgc2lnbiBvZiBhKmI7CiAgICAgICAgdGhlIHJlbWFpbmRlciByIGhhcyB0aGUgc2lnbiBvZiBhLAogICAgICAgIHNvIGEgPSBiKnogKyByLiAqLwotICAgIGlmICgoUHlfU0laRShhKSA8IDApICE9IChQeV9TSVpFKGIpIDwgMCkpCi0gICAgICAgIE5FR0FURSh6KTsKLSAgICBpZiAoUHlfU0laRShhKSA8IDAgJiYgUHlfU0laRSgqcHJlbSkgIT0gMCkKLSAgICAgICAgTkVHQVRFKCpwcmVtKTsKKyAgICBpZiAoKFB5X1NJWkUoYSkgPCAwKSAhPSAoUHlfU0laRShiKSA8IDApKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKnByZW0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorICAgIGlmIChQeV9TSVpFKGEpIDwgMCAmJiBQeV9TSVpFKCpwcmVtKSAhPSAwKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKHByZW0pOworICAgICAgICBpZiAoKnByZW0gPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHopOworICAgICAgICAgICAgUHlfQ0xFQVIoKnByZW0pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQogICAgICpwZGl2ID0gbWF5YmVfc21hbGxfbG9uZyh6KTsKICAgICByZXR1cm4gMDsKIH0KQEAgLTI2OTgsNyArMjcwOSw3IEBACiAgICAgeCA9IF9QeUxvbmdfRnJleHAoKFB5TG9uZ09iamVjdCAqKXYsICZleHBvbmVudCk7CiAgICAgaWYgKCh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkgfHwgZXhwb25lbnQgPiBEQkxfTUFYX0VYUCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nIGludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOworICAgICAgICAgICAgICAgICAgICAgICAgImludCB0b28gbGFyZ2UgdG8gY29udmVydCB0byBmbG9hdCIpOwogICAgICAgICByZXR1cm4gLTEuMDsKICAgICB9CiAgICAgcmV0dXJuIGxkZXhwKHgsIChpbnQpZXhwb25lbnQpOwpAQCAtMjkxOCw4ICsyOTI5LDExIEBACiAgICAgICAgIGJvcnJvdyAmPSAxOyAvKiBLZWVwIG9ubHkgb25lIHNpZ24gYml0ICovCiAgICAgfQogICAgIGFzc2VydChib3Jyb3cgPT0gMCk7Ci0gICAgaWYgKHNpZ24gPCAwKQotICAgICAgICBORUdBVEUoeik7CisgICAgaWYgKHNpZ24gPCAwKSB7CisgICAgICAgIF9QeUxvbmdfTmVnYXRlKCZ6KTsKKyAgICAgICAgaWYgKHogPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICByZXR1cm4gbG9uZ19ub3JtYWxpemUoeik7CiB9CiAKQEAgLTMwODYsNyArMzEwMCw3IEBACiAgICAgUHlfc3NpemVfdCBzaXplX2xvLCBzaXplX2hpOwogICAgIGNvbnN0IFB5X3NzaXplX3Qgc2l6ZV9uID0gQUJTKFB5X1NJWkUobikpOwogCi0gICAgc2l6ZV9sbyA9IE1JTihzaXplX24sIHNpemUpOworICAgIHNpemVfbG8gPSBQeV9NSU4oc2l6ZV9uLCBzaXplKTsKICAgICBzaXplX2hpID0gc2l6ZV9uIC0gc2l6ZV9sbzsKIAogICAgIGlmICgoaGkgPSBfUHlMb25nX05ldyhzaXplX2hpKSkgPT0gTlVMTCkKQEAgLTMzNTcsNyArMzM3MSw3IEBACiAgICAgbmJkb25lID0gMDsKICAgICB3aGlsZSAoYnNpemUgPiAwKSB7CiAgICAgICAgIFB5TG9uZ09iamVjdCAqcHJvZHVjdDsKLSAgICAgICAgY29uc3QgUHlfc3NpemVfdCBuYnRvdXNlID0gTUlOKGJzaXplLCBhc2l6ZSk7CisgICAgICAgIGNvbnN0IFB5X3NzaXplX3QgbmJ0b3VzZSA9IFB5X01JTihic2l6ZSwgYXNpemUpOwogCiAgICAgICAgIC8qIE11bHRpcGx5IHRoZSBuZXh0IHNsaWNlIG9mIGIgYnkgYS4gKi8KICAgICAgICAgbWVtY3B5KGJzbGljZS0+b2JfZGlnaXQsIGItPm9iX2RpZ2l0ICsgbmJkb25lLApAQCAtMzQxMCw4ICszNDI0LDExIEBACiAKICAgICB6ID0ga19tdWwoYSwgYik7CiAgICAgLyogTmVnYXRlIGlmIGV4YWN0bHkgb25lIG9mIHRoZSBpbnB1dHMgaXMgbmVnYXRpdmUuICovCi0gICAgaWYgKCgoUHlfU0laRShhKSBeIFB5X1NJWkUoYikpIDwgMCkgJiYgeikKLSAgICAgICAgTkVHQVRFKHopOworICAgIGlmICgoKFB5X1NJWkUoYSkgXiBQeV9TSVpFKGIpKSA8IDApICYmIHopIHsKKyAgICAgICAgX1B5TG9uZ19OZWdhdGUoJnopOworICAgICAgICBpZiAoeiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiAoUHlPYmplY3QgKil6OwogfQogCkBAIC0zNjQ4LDcgKzM2NjUsNyBAQAogICAgICAgICBnb3RvIHVuZGVyZmxvd19vcl96ZXJvOwogCiAgICAgLyogQ2hvb3NlIHZhbHVlIGZvciBzaGlmdDsgc2VlIGNvbW1lbnRzIGZvciBzdGVwIDEgYWJvdmUuICovCi0gICAgc2hpZnQgPSBNQVgoZGlmZiwgREJMX01JTl9FWFApIC0gREJMX01BTlRfRElHIC0gMjsKKyAgICBzaGlmdCA9IFB5X01BWChkaWZmLCBEQkxfTUlOX0VYUCkgLSBEQkxfTUFOVF9ESUcgLSAyOwogCiAgICAgaW5leGFjdCA9IDA7CiAKQEAgLTM3MTksNyArMzczNiw3IEBACiAgICAgeF9iaXRzID0gKHhfc2l6ZS0xKSpQeUxvbmdfU0hJRlQrYml0c19pbl9kaWdpdCh4LT5vYl9kaWdpdFt4X3NpemUtMV0pOwogCiAgICAgLyogVGhlIG51bWJlciBvZiBleHRyYSBiaXRzIHRoYXQgaGF2ZSB0byBiZSByb3VuZGVkIGF3YXkuICovCi0gICAgZXh0cmFfYml0cyA9IE1BWCh4X2JpdHMsIERCTF9NSU5fRVhQIC0gc2hpZnQpIC0gREJMX01BTlRfRElHOworICAgIGV4dHJhX2JpdHMgPSBQeV9NQVgoeF9iaXRzLCBEQkxfTUlOX0VYUCAtIHNoaWZ0KSAtIERCTF9NQU5UX0RJRzsKICAgICBhc3NlcnQoZXh0cmFfYml0cyA9PSAyIHx8IGV4dHJhX2JpdHMgPT0gMyk7CiAKICAgICAvKiBSb3VuZCBieSBkaXJlY3RseSBtb2RpZnlpbmcgdGhlIGxvdyBkaWdpdCBvZiB4LiAqLwpAQCAtMzg1OCw3ICszODc1LDkgQEAKICAgICAgICAgICAgIFB5X0RFQ1JFRihjKTsKICAgICAgICAgICAgIGMgPSB0ZW1wOwogICAgICAgICAgICAgdGVtcCA9IE5VTEw7Ci0gICAgICAgICAgICBORUdBVEUoYyk7CisgICAgICAgICAgICBfUHlMb25nX05lZ2F0ZSgmYyk7CisgICAgICAgICAgICBpZiAoYyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CiAgICAgICAgIH0KIAogICAgICAgICAvKiBpZiBtb2R1bHVzID09IDE6CkBAIC0zOTY0LDEwICszOTgzLDcgQEAKICAgICBnb3RvIERvbmU7CiAKICAgRXJyb3I6Ci0gICAgaWYgKHogIT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYoeik7Ci0gICAgICAgIHogPSBOVUxMOwotICAgIH0KKyAgICBQeV9DTEVBUih6KTsKICAgICAvKiBmYWxsIHRocm91Z2ggKi8KICAgRG9uZToKICAgICBpZiAoUHlfU0laRShiKSA+IEZJVkVBUllfQ1VUT0ZGKSB7CkBAIC00MDk3LDEwICs0MTEzLDEwIEBACiAKICAgICBzaGlmdGJ5ID0gUHlMb25nX0FzU3NpemVfdCgoUHlPYmplY3QgKiliKTsKICAgICBpZiAoc2hpZnRieSA9PSAtMUwgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgZ290byBsc2hpZnRfZXJyb3I7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaGlmdGJ5IDwgMCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIm5lZ2F0aXZlIHNoaWZ0IGNvdW50Iik7Ci0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgLyogd29yZHNoaWZ0LCByZW1zaGlmdCA9IGRpdm1vZChzaGlmdGJ5LCBQeUxvbmdfU0hJRlQpICovCiAgICAgd29yZHNoaWZ0ID0gc2hpZnRieSAvIFB5TG9uZ19TSElGVDsKQEAgLTQxMTIsOSArNDEyOCwxMSBAQAogICAgICAgICArK25ld3NpemU7CiAgICAgeiA9IF9QeUxvbmdfTmV3KG5ld3NpemUpOwogICAgIGlmICh6ID09IE5VTEwpCi0gICAgICAgIGdvdG8gbHNoaWZ0X2Vycm9yOwotICAgIGlmIChQeV9TSVpFKGEpIDwgMCkKLSAgICAgICAgTkVHQVRFKHopOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlfU0laRShhKSA8IDApIHsKKyAgICAgICAgYXNzZXJ0KFB5X1JFRkNOVCh6KSA9PSAxKTsKKyAgICAgICAgUHlfU0laRSh6KSA9IC1QeV9TSVpFKHopOworICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgd29yZHNoaWZ0OyBpKyspCiAgICAgICAgIHotPm9iX2RpZ2l0W2ldID0gMDsKICAgICBhY2N1bSA9IDA7CkBAIC00MTI4LDcgKzQxNDYsNiBAQAogICAgIGVsc2UKICAgICAgICAgYXNzZXJ0KCFhY2N1bSk7CiAgICAgeiA9IGxvbmdfbm9ybWFsaXplKHopOwotICBsc2hpZnRfZXJyb3I6CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKSBtYXliZV9zbWFsbF9sb25nKHopOwogfQogCkBAIC00MTUzLDcgKzQxNzAsNyBAQAogCiBzdGF0aWMgUHlPYmplY3QgKgogbG9uZ19iaXR3aXNlKFB5TG9uZ09iamVjdCAqYSwKLSAgICAgICAgICAgICBpbnQgb3AsICAvKiAnJicsICd8JywgJ14nICovCisgICAgICAgICAgICAgY2hhciBvcCwgIC8qICcmJywgJ3wnLCAnXicgKi8KICAgICAgICAgICAgICBQeUxvbmdPYmplY3QgKmIpCiB7CiAgICAgaW50IG5lZ2EsIG5lZ2IsIG5lZ3o7CkBAIC00MzI4LDggKzQzNDUsNyBAQAogbG9uZ19uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CiAgICAgUHlPYmplY3QgKm9iYXNlID0gTlVMTCwgKnggPSBOVUxMOwotICAgIGxvbmcgYmFzZTsKLSAgICBpbnQgb3ZlcmZsb3c7CisgICAgUHlfc3NpemVfdCBiYXNlOwogICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsieCIsICJiYXNlIiwgMH07CiAKICAgICBpZiAodHlwZSAhPSAmUHlMb25nX1R5cGUpCkBAIC00MzQ4LDEwICs0MzY0LDEwIEBACiAgICAgaWYgKG9iYXNlID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeU51bWJlcl9Mb25nKHgpOwogCi0gICAgYmFzZSA9IFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdyhvYmFzZSwgJm92ZXJmbG93KTsKKyAgICBiYXNlID0gUHlOdW1iZXJfQXNTc2l6ZV90KG9iYXNlLCBOVUxMKTsKICAgICBpZiAoYmFzZSA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAob3ZlcmZsb3cgfHwgKGJhc2UgIT0gMCAmJiBiYXNlIDwgMikgfHwgYmFzZSA+IDM2KSB7CisgICAgaWYgKChiYXNlICE9IDAgJiYgYmFzZSA8IDIpIHx8IGJhc2UgPiAzNikgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQoKSBiYXNlIG11c3QgYmUgPj0gMiBhbmQgPD0gMzYiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00Mzg5LDcgKzQ0MDUsNyBAQAogICAgIHRtcCA9IChQeUxvbmdPYmplY3QgKilsb25nX25ldygmUHlMb25nX1R5cGUsIGFyZ3MsIGt3ZHMpOwogICAgIGlmICh0bXAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgYXNzZXJ0KFB5TG9uZ19DaGVja0V4YWN0KHRtcCkpOworICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodG1wKSk7CiAgICAgbiA9IFB5X1NJWkUodG1wKTsKICAgICBpZiAobiA8IDApCiAgICAgICAgIG4gPSAtbjsKQEAgLTQ0MzIsNyArNDQ0OCw3IEBACiAgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOl9fZm9ybWF0X18iLCAmZm9ybWF0X3NwZWMpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyLCAwKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CiAgICAgcmV0ID0gX1B5TG9uZ19Gb3JtYXRBZHZhbmNlZFdyaXRlcigKICAgICAgICAgJndyaXRlciwKICAgICAgICAgc2VsZiwKQEAgLTUwODIsMTUgKzUwOTgsMTcgQEAKICAgICAgICAgICAgIGFzc2VydCh2LT5vYl9kaWdpdFswXSA9PSBhYnMoaXZhbCkpOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlPYmplY3RfSU5JVCh2LCAmUHlMb25nX1R5cGUpOworICAgICAgICAgICAgKHZvaWQpUHlPYmplY3RfSU5JVCh2LCAmUHlMb25nX1R5cGUpOwogICAgICAgICB9CiAgICAgICAgIFB5X1NJWkUodikgPSBzaXplOwogICAgICAgICB2LT5vYl9kaWdpdFswXSA9IGFicyhpdmFsKTsKICAgICB9CiAjZW5kaWYKICAgICAvKiBpbml0aWFsaXplIGludF9pbmZvICovCi0gICAgaWYgKEludF9JbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJkludF9JbmZvVHlwZSwgJmludF9pbmZvX2Rlc2MpOworICAgIGlmIChJbnRfSW5mb1R5cGUudHBfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmSW50X0luZm9UeXBlLCAmaW50X2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgcmV0dXJuIDE7CiB9CmRpZmYgLS1naXQgYS9PYmplY3RzL21lbW9yeW9iamVjdC5jIGIvT2JqZWN0cy9tZW1vcnlvYmplY3QuYwppbmRleCAxODlhZjg4Li4wYmU4NDkzIDEwMDY0NAotLS0gYS9PYmplY3RzL21lbW9yeW9iamVjdC5jCisrKyBiL09iamVjdHMvbWVtb3J5b2JqZWN0LmMKQEAgLTExMzUsNiArMTEzNSw1MSBAQAogICAgIHJldHVybiAtMTsKIH0KIAorUHlfTE9DQUxfSU5MSU5FKGNoYXIgKikKK2dldF9uYXRpdmVfZm10c3RyKGNvbnN0IGNoYXIgKmZtdCkKK3sKKyAgICBpbnQgYXQgPSAwOworCisgICAgaWYgKGZtdFswXSA9PSAnQCcpIHsKKyAgICAgICAgYXQgPSAxOworICAgICAgICBmbXQrKzsKKyAgICB9CisgICAgaWYgKGZtdFswXSA9PSAnXDAnIHx8IGZtdFsxXSAhPSAnXDAnKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworI2RlZmluZSBSRVRVUk4ocykgZG8geyByZXR1cm4gYXQgPyAiQCIgcyA6IHM7IH0gd2hpbGUgKDApCisKKyAgICBzd2l0Y2ggKGZtdFswXSkgeworICAgIGNhc2UgJ2MnOiBSRVRVUk4oImMiKTsKKyAgICBjYXNlICdiJzogUkVUVVJOKCJiIik7CisgICAgY2FzZSAnQic6IFJFVFVSTigiQiIpOworICAgIGNhc2UgJ2gnOiBSRVRVUk4oImgiKTsKKyAgICBjYXNlICdIJzogUkVUVVJOKCJIIik7CisgICAgY2FzZSAnaSc6IFJFVFVSTigiaSIpOworICAgIGNhc2UgJ0knOiBSRVRVUk4oIkkiKTsKKyAgICBjYXNlICdsJzogUkVUVVJOKCJsIik7CisgICAgY2FzZSAnTCc6IFJFVFVSTigiTCIpOworICAgICNpZmRlZiBIQVZFX0xPTkdfTE9ORworICAgIGNhc2UgJ3EnOiBSRVRVUk4oInEiKTsKKyAgICBjYXNlICdRJzogUkVUVVJOKCJRIik7CisgICAgI2VuZGlmCisgICAgY2FzZSAnbic6IFJFVFVSTigibiIpOworICAgIGNhc2UgJ04nOiBSRVRVUk4oIk4iKTsKKyAgICBjYXNlICdmJzogUkVUVVJOKCJmIik7CisgICAgY2FzZSAnZCc6IFJFVFVSTigiZCIpOworICAgICNpZmRlZiBIQVZFX0M5OV9CT09MCisgICAgY2FzZSAnPyc6IFJFVFVSTigiPyIpOworICAgICNlbHNlCisgICAgY2FzZSAnPyc6IFJFVFVSTigiPyIpOworICAgICNlbmRpZgorICAgIGNhc2UgJ1AnOiBSRVRVUk4oIlAiKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworCiAvKiBDYXN0IGEgbWVtb3J5dmlldydzIGRhdGEgdHlwZSB0byAnZm9ybWF0Jy4gVGhlIGlucHV0IGFycmF5IG11c3QgYmUKICAgIEMtY29udGlndW91cy4gQXQgbGVhc3Qgb25lIG9mIGlucHV0LWZvcm1hdCwgb3V0cHV0LWZvcm1hdCBtdXN0IGhhdmUKICAgIGJ5dGUgc2l6ZS4gVGhlIG91dHB1dCBhcnJheSBpcyAxLUQsIHdpdGggdGhlIHNhbWUgYnl0ZSBsZW5ndGggYXMgdGhlCkBAIC0xMTg0LDEwICsxMjI5LDEzIEBACiAgICAgICAgIGdvdG8gb3V0OwogICAgIH0KIAotICAgIHN0cm5jcHkobXYtPmZvcm1hdCwgUHlCeXRlc19BU19TVFJJTkcoYXNjaWlmbXQpLAotICAgICAgICAgICAgX1B5X01FTU9SWVZJRVdfTUFYX0ZPUk1BVCk7Ci0gICAgbXYtPmZvcm1hdFtfUHlfTUVNT1JZVklFV19NQVhfRk9STUFULTFdID0gJ1wwJzsKLSAgICB2aWV3LT5mb3JtYXQgPSBtdi0+Zm9ybWF0OworICAgIHZpZXctPmZvcm1hdCA9IGdldF9uYXRpdmVfZm10c3RyKFB5Qnl0ZXNfQVNfU1RSSU5HKGFzY2lpZm10KSk7CisgICAgaWYgKHZpZXctPmZvcm1hdCA9PSBOVUxMKSB7CisgICAgICAgIC8qIE5PVF9SRUFDSEVEOiBnZXRfbmF0aXZlX2ZtdGNoYXIoKSBhbHJlYWR5IHZhbGlkYXRlcyB0aGUgZm9ybWF0LiAqLworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgIm1lbW9yeXZpZXc6IGludGVybmFsIGVycm9yIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KICAgICB2aWV3LT5pdGVtc2l6ZSA9IGl0ZW1zaXplOwogCiAgICAgdmlldy0+bmRpbSA9IDE7CkBAIC0yNDAyLDcgKzI0NTAsNyBAQAogCiAvKiBBcyBzZXF1ZW5jZSAqLwogc3RhdGljIFB5U2VxdWVuY2VNZXRob2RzIG1lbW9yeV9hc19zZXF1ZW5jZSA9IHsKLSAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX2xlbmd0aCAqLworICAgICAgICAobGVuZnVuYyltZW1vcnlfbGVuZ3RoLCAgICAgICAgICAgLyogc3FfbGVuZ3RoICovCiAgICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzcV9jb25jYXQgKi8KICAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNxX3JlcGVhdCAqLwogICAgICAgICAoc3NpemVhcmdmdW5jKW1lbW9yeV9pdGVtLCAgICAgICAgLyogc3FfaXRlbSAqLwpAQCAtMjc0Miw3ICsyNzkwLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIENhbid0IGZhaWwgKi8KLSAgICAgICAgc2VsZi0+aGFzaCA9IF9QeV9IYXNoQnl0ZXMoKHVuc2lnbmVkIGNoYXIgKiltZW0sIHZpZXctPmxlbik7CisgICAgICAgIHNlbGYtPmhhc2ggPSBfUHlfSGFzaEJ5dGVzKG1lbSwgdmlldy0+bGVuKTsKIAogICAgICAgICBpZiAobWVtICE9IHZpZXctPmJ1ZikKICAgICAgICAgICAgIFB5TWVtX0ZyZWUobWVtKTsKZGlmZiAtLWdpdCBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMgYi9PYmplY3RzL21ldGhvZG9iamVjdC5jCmluZGV4IGYwNjg1ZGQuLjliNmU1ZTQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvbWV0aG9kb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9tZXRob2RvYmplY3QuYwpAQCAtMTMsNiArMTMsMTUgQEAKICNkZWZpbmUgUHlDRnVuY3Rpb25fTUFYRlJFRUxJU1QgMjU2CiAjZW5kaWYKIAorLyogdW5kZWZpbmUgbWFjcm8gdHJhbXBvbGluZSB0byBQeUNGdW5jdGlvbl9OZXdFeCAqLworI3VuZGVmIFB5Q0Z1bmN0aW9uX05ldworCitQeUFQSV9GVU5DKFB5T2JqZWN0ICopCitQeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKm1sLCBQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlDRnVuY3Rpb25fTmV3RXgobWwsIHNlbGYsIE5VTEwpOworfQorCiBQeU9iamVjdCAqCiBQeUNGdW5jdGlvbl9OZXdFeChQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbW9kdWxlKQogewpAQCAtMjAsNyArMjksNyBAQAogICAgIG9wID0gZnJlZV9saXN0OwogICAgIGlmIChvcCAhPSBOVUxMKSB7CiAgICAgICAgIGZyZWVfbGlzdCA9IChQeUNGdW5jdGlvbk9iamVjdCAqKShvcC0+bV9zZWxmKTsKLSAgICAgICAgUHlPYmplY3RfSU5JVChvcCwgJlB5Q0Z1bmN0aW9uX1R5cGUpOworICAgICAgICAodm9pZClQeU9iamVjdF9JTklUKG9wLCAmUHlDRnVuY3Rpb25fVHlwZSk7CiAgICAgICAgIG51bWZyZWUtLTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC03MCwyMyArNzksMzQgQEAKIFB5T2JqZWN0ICoKIFB5Q0Z1bmN0aW9uX0NhbGwoUHlPYmplY3QgKmZ1bmMsIFB5T2JqZWN0ICphcmcsIFB5T2JqZWN0ICprdykKIHsKKyNkZWZpbmUgQ0hFQ0tfUkVTVUxUKHJlcykgYXNzZXJ0KHJlcyAhPSBOVUxMIHx8IFB5RXJyX09jY3VycmVkKCkpCisKICAgICBQeUNGdW5jdGlvbk9iamVjdCogZiA9IChQeUNGdW5jdGlvbk9iamVjdCopZnVuYzsKICAgICBQeUNGdW5jdGlvbiBtZXRoID0gUHlDRnVuY3Rpb25fR0VUX0ZVTkNUSU9OKGZ1bmMpOwogICAgIFB5T2JqZWN0ICpzZWxmID0gUHlDRnVuY3Rpb25fR0VUX1NFTEYoZnVuYyk7CisgICAgUHlPYmplY3QgKnJlczsKICAgICBQeV9zc2l6ZV90IHNpemU7CiAKICAgICBzd2l0Y2ggKFB5Q0Z1bmN0aW9uX0dFVF9GTEFHUyhmdW5jKSAmIH4oTUVUSF9DTEFTUyB8IE1FVEhfU1RBVElDIHwgTUVUSF9DT0VYSVNUKSkgewogICAgIGNhc2UgTUVUSF9WQVJBUkdTOgotICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAoKm1ldGgpKHNlbGYsIGFyZyk7CisgICAgICAgIGlmIChrdyA9PSBOVUxMIHx8IFB5RGljdF9TaXplKGt3KSA9PSAwKSB7CisgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIGFyZyk7CisgICAgICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTOgotICAgICAgICByZXR1cm4gKCooUHlDRnVuY3Rpb25XaXRoS2V5d29yZHMpbWV0aCkoc2VsZiwgYXJnLCBrdyk7CisgICAgICAgIHJlcyA9ICgqKFB5Q0Z1bmN0aW9uV2l0aEtleXdvcmRzKW1ldGgpKHNlbGYsIGFyZywga3cpOworICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgcmV0dXJuIHJlczsKICAgICBjYXNlIE1FVEhfTk9BUkdTOgogICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkgewogICAgICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VUX1NJWkUoYXJnKTsKLSAgICAgICAgICAgIGlmIChzaXplID09IDApCi0gICAgICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgTlVMTCk7CisgICAgICAgICAgICBpZiAoc2l6ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmVzID0gKCptZXRoKShzZWxmLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBDSEVDS19SRVNVTFQocmVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAiJS4yMDBzKCkgdGFrZXMgbm8gYXJndW1lbnRzICglemQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXplKTsKQEAgLTk2LDggKzExNiwxMSBAQAogICAgIGNhc2UgTUVUSF9POgogICAgICAgICBpZiAoa3cgPT0gTlVMTCB8fCBQeURpY3RfU2l6ZShrdykgPT0gMCkgewogICAgICAgICAgICAgc2l6ZSA9IFB5VHVwbGVfR0VUX1NJWkUoYXJnKTsKLSAgICAgICAgICAgIGlmIChzaXplID09IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuICgqbWV0aCkoc2VsZiwgUHlUdXBsZV9HRVRfSVRFTShhcmcsIDApKTsKKyAgICAgICAgICAgIGlmIChzaXplID09IDEpIHsKKyAgICAgICAgICAgICAgICByZXMgPSAoKm1ldGgpKHNlbGYsIFB5VHVwbGVfR0VUX0lURU0oYXJnLCAwKSk7CisgICAgICAgICAgICAgICAgQ0hFQ0tfUkVTVUxUKHJlcyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgIiUuMjAwcygpIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50ICglemQgZ2l2ZW4pIiwKICAgICAgICAgICAgICAgICBmLT5tX21sLT5tbF9uYW1lLCBzaXplKTsKQEAgLTExNCw2ICsxMzcsOCBAQAogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICIlLjIwMHMoKSB0YWtlcyBubyBrZXl3b3JkIGFyZ3VtZW50cyIsCiAgICAgICAgICAgICAgICAgIGYtPm1fbWwtPm1sX25hbWUpOwogICAgIHJldHVybiBOVUxMOworCisjdW5kZWYgQ0hFQ0tfUkVTVUxUCiB9CiAKIC8qIE1ldGhvZHMgKHRoZSBzdGFuZGFyZCBidWlsdC1pbiBtZXRob2RzLCB0aGF0IGlzKSAqLwpAQCAtMTM1LDE0ICsxNjAsMzUgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK21ldGhfcmVkdWNlKFB5Q0Z1bmN0aW9uT2JqZWN0ICptKQoreworICAgIFB5T2JqZWN0ICpidWlsdGluczsKKyAgICBQeU9iamVjdCAqZ2V0YXR0cjsKKyAgICBfUHlfSURFTlRJRklFUihnZXRhdHRyKTsKKworICAgIGlmIChtLT5tX3NlbGYgPT0gTlVMTCB8fCBQeU1vZHVsZV9DaGVjayhtLT5tX3NlbGYpKQorICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcobS0+bV9tbC0+bWxfbmFtZSk7CisKKyAgICBidWlsdGlucyA9IFB5RXZhbF9HZXRCdWlsdGlucygpOworICAgIGdldGF0dHIgPSBfUHlEaWN0X0dldEl0ZW1JZChidWlsdGlucywgJlB5SWRfZ2V0YXR0cik7CisgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk8oT3MpIiwgZ2V0YXR0ciwgbS0+bV9zZWxmLCBtLT5tX21sLT5tbF9uYW1lKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG1ldGhfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiltZXRoX3JlZHVjZSwgTUVUSF9OT0FSR1MsIE5VTEx9LAorICAgIHtOVUxMLCBOVUxMfQorfTsKKworc3RhdGljIFB5T2JqZWN0ICoKK21ldGhfZ2V0X190ZXh0X3NpZ25hdHVyZV9fKFB5Q0Z1bmN0aW9uT2JqZWN0ICptLCB2b2lkICpjbG9zdXJlKQoreworICAgIHJldHVybiBfUHlUeXBlX0dldFRleHRTaWduYXR1cmVGcm9tSW50ZXJuYWxEb2MobS0+bV9tbC0+bWxfbmFtZSwgbS0+bV9tbC0+bWxfZG9jKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKIG1ldGhfZ2V0X19kb2NfXyhQeUNGdW5jdGlvbk9iamVjdCAqbSwgdm9pZCAqY2xvc3VyZSkKIHsKLSAgICBjb25zdCBjaGFyICpkb2MgPSBtLT5tX21sLT5tbF9kb2M7Ci0KLSAgICBpZiAoZG9jICE9IE5VTEwpCi0gICAgICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZyhkb2MpOwotICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICByZXR1cm4gUHlfTm9uZTsKKyAgICByZXR1cm4gX1B5VHlwZV9HZXREb2NGcm9tSW50ZXJuYWxEb2MobS0+bV9tbC0+bWxfbmFtZSwgbS0+bV9tbC0+bWxfZG9jKTsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKQEAgLTIxMSw2ICsyNTcsNyBAQAogICAgIHsiX19uYW1lX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X19uYW1lX18sIE5VTEwsIE5VTEx9LAogICAgIHsiX19xdWFsbmFtZV9fIiwgKGdldHRlciltZXRoX2dldF9fcXVhbG5hbWVfXywgTlVMTCwgTlVMTH0sCiAgICAgeyJfX3NlbGZfXyIsIChnZXR0ZXIpbWV0aF9nZXRfX3NlbGZfXywgTlVMTCwgTlVMTH0sCisgICAgeyJfX3RleHRfc2lnbmF0dXJlX18iLCAoZ2V0dGVyKW1ldGhfZ2V0X190ZXh0X3NpZ25hdHVyZV9fLCBOVUxMLCBOVUxMfSwKICAgICB7MH0KIH07CiAKQEAgLTMwOCw3ICszNTUsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXIgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCisgICAgbWV0aF9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZXRob2RzICovCiAgICAgbWV0aF9tZW1iZXJzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgbWV0aF9nZXRzZXRzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2Jhc2UgKi8KQEAgLTM0NiwxNyArMzkzLDMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmcmVlIFB5Q0Z1bmN0aW9uT2JqZWN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWZyZWUsIHNpemVvZihQeUNGdW5jdGlvbk9iamVjdCkpOwogfQotCi0vKiBQeUNGdW5jdGlvbl9OZXcoKSBpcyBub3cganVzdCBhIG1hY3JvIHRoYXQgY2FsbHMgUHlDRnVuY3Rpb25fTmV3RXgoKSwKLSAgIGJ1dCBpdCdzIHBhcnQgb2YgdGhlIEFQSSBzbyB3ZSBuZWVkIHRvIGtlZXAgYSBmdW5jdGlvbiBhcm91bmQgdGhhdAotICAgZXhpc3RpbmcgQyBleHRlbnNpb25zIGNhbiBjYWxsLgotKi8KLQotI3VuZGVmIFB5Q0Z1bmN0aW9uX05ldwotUHlBUElfRlVOQyhQeU9iamVjdCAqKSBQeUNGdW5jdGlvbl9OZXcoUHlNZXRob2REZWYgKiwgUHlPYmplY3QgKik7Ci0KLVB5T2JqZWN0ICoKLVB5Q0Z1bmN0aW9uX05ldyhQeU1ldGhvZERlZiAqbWwsIFB5T2JqZWN0ICpzZWxmKQotewotICAgIHJldHVybiBQeUNGdW5jdGlvbl9OZXdFeChtbCwgc2VsZiwgTlVMTCk7Ci19CmRpZmYgLS1naXQgYS9PYmplY3RzL21vZHVsZW9iamVjdC5jIGIvT2JqZWN0cy9tb2R1bGVvYmplY3QuYwppbmRleCA3Mjk3OGFlLi5mNTA5OTMyIDEwMDY0NAotLS0gYS9PYmplY3RzL21vZHVsZW9iamVjdC5jCisrKyBiL09iamVjdHMvbW9kdWxlb2JqZWN0LmMKQEAgLTExLDYgKzExLDggQEAKICAgICBQeU9iamVjdCAqbWRfZGljdDsKICAgICBzdHJ1Y3QgUHlNb2R1bGVEZWYgKm1kX2RlZjsKICAgICB2b2lkICptZF9zdGF0ZTsKKyAgICBQeU9iamVjdCAqbWRfd2Vha2xpc3Q7CisgICAgUHlPYmplY3QgKm1kX25hbWU7ICAvKiBmb3IgbG9nZ2luZyBwdXJwb3NlcyBhZnRlciBtZF9kaWN0IGlzIGNsZWFyZWQgKi8KIH0gUHlNb2R1bGVPYmplY3Q7CiAKIHN0YXRpYyBQeU1lbWJlckRlZiBtb2R1bGVfbWVtYmVyc1tdID0gewpAQCAtMjYsNiArMjgsMzUgQEAKIH07CiAKIAorc3RhdGljIGludAorbW9kdWxlX2luaXRfZGljdChQeU1vZHVsZU9iamVjdCAqbW9kLCBQeU9iamVjdCAqbWRfZGljdCwKKyAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpkb2MpCit7CisgICAgaWYgKG1kX2RpY3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGlmIChkb2MgPT0gTlVMTCkKKyAgICAgICAgZG9jID0gUHlfTm9uZTsKKworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtZF9kaWN0LCAiX19uYW1lX18iLCBuYW1lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX2RvY19fIiwgZG9jKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3BhY2thZ2VfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobWRfZGljdCwgIl9fbG9hZGVyX18iLCBQeV9Ob25lKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKG1kX2RpY3QsICJfX3NwZWNfXyIsIFB5X05vbmUpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobmFtZSkpIHsKKyAgICAgICAgUHlfSU5DUkVGKG5hbWUpOworICAgICAgICBQeV9YREVDUkVGKG1vZC0+bWRfbmFtZSk7CisgICAgICAgIG1vZC0+bWRfbmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKwogUHlPYmplY3QgKgogUHlNb2R1bGVfTmV3T2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewpAQCAtMzUsMTQgKzY2LDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG0tPm1kX2RlZiA9IE5VTEw7CiAgICAgbS0+bWRfc3RhdGUgPSBOVUxMOworICAgIG0tPm1kX3dlYWtsaXN0ID0gTlVMTDsKKyAgICBtLT5tZF9uYW1lID0gTlVMTDsKICAgICBtLT5tZF9kaWN0ID0gUHlEaWN0X05ldygpOwotICAgIGlmIChtLT5tZF9kaWN0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fbmFtZV9fIiwgbmFtZSkgIT0gMCkKLSAgICAgICAgZ290byBmYWlsOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19kb2NfXyIsIFB5X05vbmUpICE9IDApCi0gICAgICAgIGdvdG8gZmFpbDsKLSAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcobS0+bWRfZGljdCwgIl9fcGFja2FnZV9fIiwgUHlfTm9uZSkgIT0gMCkKKyAgICBpZiAobW9kdWxlX2luaXRfZGljdChtLCBtLT5tZF9kaWN0LCBuYW1lLCBOVUxMKSAhPSAwKQogICAgICAgICBnb3RvIGZhaWw7CiAgICAgUHlPYmplY3RfR0NfVHJhY2sobSk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKW07CkBAIC0yNzIsNiArMjk5LDE0IEBACiB2b2lkCiBfUHlNb2R1bGVfQ2xlYXIoUHlPYmplY3QgKm0pCiB7CisgICAgUHlPYmplY3QgKmQgPSAoKFB5TW9kdWxlT2JqZWN0ICopbSktPm1kX2RpY3Q7CisgICAgaWYgKGQgIT0gTlVMTCkKKyAgICAgICAgX1B5TW9kdWxlX0NsZWFyRGljdChkKTsKK30KKwordm9pZAorX1B5TW9kdWxlX0NsZWFyRGljdChQeU9iamVjdCAqZCkKK3sKICAgICAvKiBUbyBtYWtlIHRoZSBleGVjdXRpb24gb3JkZXIgb2YgZGVzdHJ1Y3RvcnMgZm9yIGdsb2JhbAogICAgICAgIG9iamVjdHMgYSBiaXQgbW9yZSBwcmVkaWN0YWJsZSwgd2UgZmlyc3QgemFwIGFsbCBvYmplY3RzCiAgICAgICAgd2hvc2UgbmFtZSBzdGFydHMgd2l0aCBhIHNpbmdsZSB1bmRlcnNjb3JlLCBiZWZvcmUgd2UgY2xlYXIKQEAgLTI4MSwxMSArMzE2LDYgQEAKIAogICAgIFB5X3NzaXplX3QgcG9zOwogICAgIFB5T2JqZWN0ICprZXksICp2YWx1ZTsKLSAgICBQeU9iamVjdCAqZDsKLQotICAgIGQgPSAoKFB5TW9kdWxlT2JqZWN0ICopbSktPm1kX2RpY3Q7Ci0gICAgaWYgKGQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwogCiAgICAgLyogRmlyc3QsIGNsZWFyIG9ubHkgbmFtZXMgc3RhcnRpbmcgd2l0aCBhIHNpbmdsZSB1bmRlcnNjb3JlICovCiAgICAgcG9zID0gMDsKQEAgLTM0OSw5ICszNzksNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBtLT5tZF9kaWN0ID0gZGljdDsKICAgICB9Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICJfX25hbWVfXyIsIG5hbWUpIDwgMCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiX19kb2NfXyIsIGRvYykgPCAwKQorICAgIGlmIChtb2R1bGVfaW5pdF9kaWN0KG0sIGRpY3QsIG5hbWUsIGRvYykgPCAwKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNjAsMTIgKzM4OCwxNSBAQAogbW9kdWxlX2RlYWxsb2MoUHlNb2R1bGVPYmplY3QgKm0pCiB7CiAgICAgUHlPYmplY3RfR0NfVW5UcmFjayhtKTsKKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcgJiYgbS0+bWRfbmFtZSkgeworICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgZGVzdHJveSAlU1xuIiwgbS0+bWRfbmFtZSk7CisgICAgfQorICAgIGlmIChtLT5tZF93ZWFrbGlzdCAhPSBOVUxMKQorICAgICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKSBtKTsKICAgICBpZiAobS0+bWRfZGVmICYmIG0tPm1kX2RlZi0+bV9mcmVlKQogICAgICAgICBtLT5tZF9kZWYtPm1fZnJlZShtKTsKLSAgICBpZiAobS0+bWRfZGljdCAhPSBOVUxMKSB7Ci0gICAgICAgIF9QeU1vZHVsZV9DbGVhcigoUHlPYmplY3QgKiltKTsKLSAgICAgICAgUHlfREVDUkVGKG0tPm1kX2RpY3QpOwotICAgIH0KKyAgICBQeV9YREVDUkVGKG0tPm1kX2RpY3QpOworICAgIFB5X1hERUNSRUYobS0+bWRfbmFtZSk7CiAgICAgaWYgKG0tPm1kX3N0YXRlICE9IE5VTEwpCiAgICAgICAgIFB5TWVtX0ZSRUUobS0+bWRfc3RhdGUpOwogICAgIFB5X1RZUEUobSktPnRwX2ZyZWUoKFB5T2JqZWN0ICopbSk7CkBAIC0zNzQsNTUgKzQwNSwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIG1vZHVsZV9yZXByKFB5TW9kdWxlT2JqZWN0ICptKQogewotICAgIFB5T2JqZWN0ICpuYW1lLCAqZmlsZW5hbWUsICpyZXByLCAqbG9hZGVyID0gTlVMTDsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CiAKLSAgICAvKiBTZWUgaWYgdGhlIG1vZHVsZSBoYXMgYW4gX19sb2FkZXJfXy4gIElmIGl0IGRvZXMsIGdpdmUgdGhlIGxvYWRlciB0aGUKLSAgICAgKiBmaXJzdCBzaG90IGF0IHByb2R1Y2luZyBhIHJlcHIgZm9yIHRoZSBtb2R1bGUuCi0gICAgICovCi0gICAgaWYgKG0tPm1kX2RpY3QgIT0gTlVMTCkgewotICAgICAgICBsb2FkZXIgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtLT5tZF9kaWN0LCAiX19sb2FkZXJfXyIpOwotICAgIH0KLSAgICBpZiAobG9hZGVyICE9IE5VTEwpIHsKLSAgICAgICAgcmVwciA9IFB5T2JqZWN0X0NhbGxNZXRob2QobG9hZGVyLCAibW9kdWxlX3JlcHIiLCAiKE8pIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopbSwgTlVMTCk7Ci0gICAgICAgIGlmIChyZXByID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gcmVwcjsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBfX2xvYWRlcl9fLm1vZHVsZV9yZXByKG0pIGRpZCBub3QgcHJvdmlkZSB1cyB3aXRoIGEgcmVwci4gIE5leHQsIHNlZSBpZgotICAgICAqIHRoZSBtb2R1bGUgaGFzIGFuIF9fZmlsZV9fLiAgSWYgaXQgZG9lc24ndCB0aGVuIHVzZSByZXByKF9fbG9hZGVyX18pIGlmCi0gICAgICogaXQgZXhpc3RzLCBvdGhlcndpc2UsIGp1c3QgdXNlIG1vZHVsZS5fX25hbWVfXy4KLSAgICAgKi8KLSAgICBuYW1lID0gUHlNb2R1bGVfR2V0TmFtZU9iamVjdCgoUHlPYmplY3QgKiltKTsKLSAgICBpZiAobmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIG5hbWUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIj8iLCAxKTsKLSAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBmaWxlbmFtZSA9IFB5TW9kdWxlX0dldEZpbGVuYW1lT2JqZWN0KChQeU9iamVjdCAqKW0pOwotICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIC8qIFRoZXJlJ3Mgbm8gbS5fX2ZpbGVfXywgc28gaWYgdGhlcmUgd2FzIGFuIF9fbG9hZGVyX18sIHVzZSB0aGF0IGluCi0gICAgICAgICAqIHRoZSByZXByLCBvdGhlcndpc2UsIHRoZSBvbmx5IHRoaW5nIHlvdSBjYW4gdXNlIGlzIG0uX19uYW1lX18KLSAgICAgICAgICovCi0gICAgICAgIGlmIChsb2FkZXIgPT0gTlVMTCkgewotICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSPiIsIG5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgcmVwciA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8bW9kdWxlICVSICglUik+IiwgbmFtZSwgbG9hZGVyKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAvKiBGaW5hbGx5LCB1c2UgbS5fX2ZpbGVfXyAqLwotICAgIGVsc2UgewotICAgICAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxtb2R1bGUgJVIgZnJvbSAlUj4iLCBuYW1lLCBmaWxlbmFtZSk7Ci0gICAgICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7Ci0gICAgfQotICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICByZXR1cm4gcmVwcjsKKyAgICByZXR1cm4gUHlPYmplY3RfQ2FsbE1ldGhvZChpbnRlcnAtPmltcG9ydGxpYiwgIl9tb2R1bGVfcmVwciIsICJPIiwgbSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTUxMSw3ICs0OTcsNyBAQAogICAgICh0cmF2ZXJzZXByb2MpbW9kdWxlX3RyYXZlcnNlLCAgICAgICAgICAgICAgLyogdHBfdHJhdmVyc2UgKi8KICAgICAoaW5xdWlyeSltb2R1bGVfY2xlYXIsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2NsZWFyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9yaWNoY29tcGFyZSAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfd2Vha2xpc3RvZmZzZXQgKi8KKyAgICBvZmZzZXRvZihQeU1vZHVsZU9iamVjdCwgbWRfd2Vha2xpc3QpLCAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9pdGVybmV4dCAqLwogICAgIG1vZHVsZV9tZXRob2RzLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYyBiL09iamVjdHMvbmFtZXNwYWNlb2JqZWN0LmMKaW5kZXggZmYyNzhkMy4uM2QyN2E5NSAxMDA2NDQKLS0tIGEvT2JqZWN0cy9uYW1lc3BhY2VvYmplY3QuYworKysgYi9PYmplY3RzL25hbWVzcGFjZW9iamVjdC5jCkBAIC00NCw3ICs0NCw3IEBACiAgICAgaWYgKGFyZ3MgIT0gTlVMTCkgewogICAgICAgICBQeV9zc2l6ZV90IGFyZ2NvdW50ID0gUHlPYmplY3RfU2l6ZShhcmdzKTsKICAgICAgICAgaWYgKGFyZ2NvdW50IDwgMCkKLSAgICAgICAgICAgIHJldHVybiBhcmdjb3VudDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgZWxzZSBpZiAoYXJnY291bnQgPiAwKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAibm8gcG9zaXRpb25hbCBhcmd1bWVudHMgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTY2LDE2ICs2NiwyMCBAQAogCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1uYW1lc3BhY2VfcmVwcihfUHlOYW1lc3BhY2VPYmplY3QgKm5zKQorbmFtZXNwYWNlX3JlcHIoUHlPYmplY3QgKm5zKQogewogICAgIGludCBpLCBsb29wX2Vycm9yID0gMDsKICAgICBQeU9iamVjdCAqcGFpcnMgPSBOVUxMLCAqZCA9IE5VTEwsICprZXlzID0gTlVMTCwgKmtleXNfaXRlciA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmtleTsKICAgICBQeU9iamVjdCAqc2VwYXJhdG9yLCAqcGFpcnNyZXByLCAqcmVwciA9IE5VTEw7CisgICAgY29uc3QgY2hhciAqIG5hbWU7CiAKLSAgICBpID0gUHlfUmVwckVudGVyKChQeU9iamVjdCAqKW5zKTsKKyAgICBuYW1lID0gKFB5X1RZUEUobnMpID09ICZfUHlOYW1lc3BhY2VfVHlwZSkgPyAibmFtZXNwYWNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5zLT5vYl90eXBlLT50cF9uYW1lOworCisgICAgaSA9IFB5X1JlcHJFbnRlcihucyk7CiAgICAgaWYgKGkgIT0gMCkgewotICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygibmFtZXNwYWNlKC4uLikiKSA6IE5VTEw7CisgICAgICAgIHJldHVybiBpID4gMCA/IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCIlcyguLi4pIiwgbmFtZSkgOiBOVUxMOwogICAgIH0KIAogICAgIHBhaXJzID0gUHlMaXN0X05ldygwKTsKQEAgLTk3LDcgKzEwMSw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICB3aGlsZSAoKGtleSA9IFB5SXRlcl9OZXh0KGtleXNfaXRlcikpICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5VW5pY29kZV9HRVRfU0laRShrZXkpID4gMCkgeworICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrKGtleSkgJiYgUHlVbmljb2RlX0dFVF9MRU5HVEgoa2V5KSA+IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSwgKml0ZW07CiAKICAgICAgICAgICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW0oZCwga2V5KTsKQEAgLTEyNyw4ICsxMzEsNyBAQAogICAgIGlmIChwYWlyc3JlcHIgPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKIAotICAgIHJlcHIgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiJXMoJVMpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChQeU9iamVjdCAqKW5zKS0+b2JfdHlwZS0+dHBfbmFtZSwgcGFpcnNyZXByKTsKKyAgICByZXByID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIiVzKCVTKSIsIG5hbWUsIHBhaXJzcmVwcik7CiAgICAgUHlfREVDUkVGKHBhaXJzcmVwcik7CiAKIGVycm9yOgpAQCAtMTM2LDcgKzEzOSw3IEBACiAgICAgUHlfWERFQ1JFRihkKTsKICAgICBQeV9YREVDUkVGKGtleXMpOwogICAgIFB5X1hERUNSRUYoa2V5c19pdGVyKTsKLSAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopbnMpOworICAgIFB5X1JlcHJMZWF2ZShucyk7CiAKICAgICByZXR1cm4gcmVwcjsKIH0KQEAgLTE1OCwxNCArMTYxLDQ4IEBACiB9CiAKIAorc3RhdGljIFB5T2JqZWN0ICoKK25hbWVzcGFjZV9yaWNoY29tcGFyZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm90aGVyLCBpbnQgb3ApCit7CisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhzZWxmLCAmX1B5TmFtZXNwYWNlX1R5cGUpICYmCisgICAgICAgIFB5T2JqZWN0X1R5cGVDaGVjayhvdGhlciwgJl9QeU5hbWVzcGFjZV9UeXBlKSkKKyAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JpY2hDb21wYXJlKCgoX1B5TmFtZXNwYWNlT2JqZWN0ICopc2VsZiktPm5zX2RpY3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX1B5TmFtZXNwYWNlT2JqZWN0ICopb3RoZXIpLT5uc19kaWN0LCBvcCk7CisgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworfQorCisKK1B5RG9jX1NUUlZBUihuYW1lc3BhY2VfcmVkdWNlX19kb2NfXywgIlJldHVybiBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgcGlja2xpbmciKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK25hbWVzcGFjZV9yZWR1Y2UoX1B5TmFtZXNwYWNlT2JqZWN0ICpucykKK3sKKyAgICBQeU9iamVjdCAqcmVzdWx0LCAqYXJncyA9IFB5VHVwbGVfTmV3KDApOworCisgICAgaWYgKCFhcmdzKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJlc3VsdCA9IFB5VHVwbGVfUGFjaygzLCAoUHlPYmplY3QgKilQeV9UWVBFKG5zKSwgYXJncywgbnMtPm5zX2RpY3QpOworICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK3N0YXRpYyBQeU1ldGhvZERlZiBuYW1lc3BhY2VfbWV0aG9kc1tdID0geworICAgIHsiX19yZWR1Y2VfXyIsIChQeUNGdW5jdGlvbiluYW1lc3BhY2VfcmVkdWNlLCBNRVRIX05PQVJHUywKKyAgICAgbmFtZXNwYWNlX3JlZHVjZV9fZG9jX199LAorICAgIHtOVUxMLCAgICAgICAgIE5VTEx9ICAvKiBzZW50aW5lbCAqLworfTsKKworCiBQeURvY19TVFJWQVIobmFtZXNwYWNlX2RvYywKICJBIHNpbXBsZSBhdHRyaWJ1dGUtYmFzZWQgbmFtZXNwYWNlLlxuXAogXG5cCi1uYW1lc3BhY2UoKiprd2FyZ3MpIik7CitTaW1wbGVOYW1lc3BhY2UoKiprd2FyZ3MpIik7CiAKIFB5VHlwZU9iamVjdCBfUHlOYW1lc3BhY2VfVHlwZSA9IHsKICAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQotICAgICJuYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLworICAgICJ0eXBlcy5TaW1wbGVOYW1lc3BhY2UiLCAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwogICAgIHNpemVvZihfUHlOYW1lc3BhY2VPYmplY3QpLCAgICAgICAgICAgICAgICAgLyogdHBfc2l6ZSAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlbXNpemUgKi8KICAgICAoZGVzdHJ1Y3RvciluYW1lc3BhY2VfZGVhbGxvYywgICAgICAgICAgICAgIC8qIHRwX2RlYWxsb2MgKi8KQEAgLTE4OCwxMSArMjI1LDExIEBACiAgICAgbmFtZXNwYWNlX2RvYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9kb2MgKi8KICAgICAodHJhdmVyc2Vwcm9jKW5hbWVzcGFjZV90cmF2ZXJzZSwgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgKGlucXVpcnkpbmFtZXNwYWNlX2NsZWFyLCAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwotICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KKyAgICBuYW1lc3BhY2VfcmljaGNvbXBhcmUsICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3JpY2hjb21wYXJlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlcm5leHQgKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KKyAgICBuYW1lc3BhY2VfbWV0aG9kcywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICBuYW1lc3BhY2VfbWVtYmVycywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX21lbWJlcnMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2dldHNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYmplY3QuYyBiL09iamVjdHMvb2JqZWN0LmMKaW5kZXggZTA3OWQ1MS4uMzA3ZTNhYyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9vYmplY3QuYworKysgYi9PYmplY3RzL29iamVjdC5jCkBAIC04LDYgKzgsMTIgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKFB5X1JlcHIpOworX1B5X0lERU5USUZJRVIoX19ieXRlc19fKTsKK19QeV9JREVOVElGSUVSKF9fZGlyX18pOworX1B5X0lERU5USUZJRVIoX19pc2Fic3RyYWN0bWV0aG9kX18pOworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworCiAjaWZkZWYgUHlfUkVGX0RFQlVHCiBQeV9zc2l6ZV90IF9QeV9SZWZUb3RhbDsKIApAQCAtMjIsNyArMjgsNyBAQAogICAgIG8gPSBfUHlEaWN0X0R1bW15KCk7CiAgICAgaWYgKG8gIT0gTlVMTCkKICAgICAgICAgdG90YWwgLT0gby0+b2JfcmVmY250OwotICAgIG8gPSBfUHlTZXRfRHVtbXkoKTsKKyAgICBvID0gX1B5U2V0X0R1bW15OwogICAgIGlmIChvICE9IE5VTEwpCiAgICAgICAgIHRvdGFsIC09IG8tPm9iX3JlZmNudDsKICAgICByZXR1cm4gdG90YWw7CkBAIC0yNTUsNiArMjYxLDcyIEBACiAgICAgcmV0dXJuIFB5T2JqZWN0X0lOSVRfVkFSKG9wLCB0cCwgbml0ZW1zKTsKIH0KIAordm9pZAorUHlPYmplY3RfQ2FsbEZpbmFsaXplcihQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeVR5cGVPYmplY3QgKnRwID0gUHlfVFlQRShzZWxmKTsKKworICAgIC8qIFRoZSBmb3JtZXIgY291bGQgaGFwcGVuIG9uIGhlYXB0eXBlcyBjcmVhdGVkIGZyb20gdGhlIEMgQVBJLCBlLmcuCisgICAgICAgUHlUeXBlX0Zyb21TcGVjKCkuICovCisgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZSh0cCwgUHlfVFBGTEFHU19IQVZFX0ZJTkFMSVpFKSB8fAorICAgICAgICB0cC0+dHBfZmluYWxpemUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworICAgIC8qIHRwX2ZpbmFsaXplIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlLiAqLworICAgIGlmIChQeVR5cGVfSVNfR0ModHApICYmIF9QeUdDX0ZJTkFMSVpFRChzZWxmKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgdHAtPnRwX2ZpbmFsaXplKHNlbGYpOworICAgIGlmIChQeVR5cGVfSVNfR0ModHApKQorICAgICAgICBfUHlHQ19TRVRfRklOQUxJWkVEKHNlbGYsIDEpOworfQorCitpbnQKK1B5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICBQeV9zc2l6ZV90IHJlZmNudDsKKworICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLworICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgIT0gMCkgeworICAgICAgICBQeV9GYXRhbEVycm9yKCJQeU9iamVjdF9DYWxsRmluYWxpemVyRnJvbURlYWxsb2MgY2FsbGVkIG9uICIKKyAgICAgICAgICAgICAgICAgICAgICAib2JqZWN0IHdpdGggYSBub24temVybyByZWZjb3VudCIpOworICAgIH0KKyAgICBzZWxmLT5vYl9yZWZjbnQgPSAxOworCisgICAgUHlPYmplY3RfQ2FsbEZpbmFsaXplcihzZWxmKTsKKworICAgIC8qIFVuZG8gdGhlIHRlbXBvcmFyeSByZXN1cnJlY3Rpb247IGNhbid0IHVzZSBERUNSRUYgaGVyZSwgaXQgd291bGQKKyAgICAgKiBjYXVzZSBhIHJlY3Vyc2l2ZSBjYWxsLgorICAgICAqLworICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPiAwKTsKKyAgICBpZiAoLS1zZWxmLT5vYl9yZWZjbnQgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgLyogdGhpcyBpcyB0aGUgbm9ybWFsIHBhdGggb3V0ICovCisKKyAgICAvKiB0cF9maW5hbGl6ZSByZXN1cnJlY3RlZCBpdCEgIE1ha2UgaXQgbG9vayBsaWtlIHRoZSBvcmlnaW5hbCBQeV9ERUNSRUYKKyAgICAgKiBuZXZlciBoYXBwZW5lZC4KKyAgICAgKi8KKyAgICByZWZjbnQgPSBzZWxmLT5vYl9yZWZjbnQ7CisgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKKyAgICBzZWxmLT5vYl9yZWZjbnQgPSByZWZjbnQ7CisKKyAgICBpZiAoUHlUeXBlX0lTX0dDKFB5X1RZUEUoc2VsZikpKSB7CisgICAgICAgIGFzc2VydChfUHlHQ19SRUZTKHNlbGYpICE9IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKKyAgICB9CisgICAgLyogSWYgUHlfUkVGX0RFQlVHLCBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCBfUHlfUmVmVG90YWwsIHNvCisgICAgICogd2UgbmVlZCB0byB1bmRvIHRoYXQuICovCisgICAgX1B5X0RFQ19SRUZUT1RBTDsKKyAgICAvKiBJZiBQeV9UUkFDRV9SRUZTLCBfUHlfTmV3UmVmZXJlbmNlIHJlLWFkZGVkIHNlbGYgdG8gdGhlIG9iamVjdAorICAgICAqIGNoYWluLCBzbyBubyBtb3JlIHRvIGRvIHRoZXJlLgorICAgICAqIElmIENPVU5UX0FMTE9DUywgdGhlIG9yaWdpbmFsIGRlY3JlZiBidW1wZWQgdHBfZnJlZXMsIGFuZAorICAgICAqIF9QeV9OZXdSZWZlcmVuY2UgYnVtcGVkIHRwX2FsbG9jczogIGJvdGggb2YgdGhvc2UgbmVlZCB0byBiZQorICAgICAqIHVuZG9uZS4KKyAgICAgKi8KKyNpZmRlZiBDT1VOVF9BTExPQ1MKKyAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2ZyZWVzOworICAgIC0tUHlfVFlQRShzZWxmKS0+dHBfYWxsb2NzOworI2VuZGlmCisgICAgcmV0dXJuIC0xOworfQorCiBpbnQKIFB5T2JqZWN0X1ByaW50KFB5T2JqZWN0ICpvcCwgRklMRSAqZnAsIGludCBmbGFncykKIHsKQEAgLTM0MCwxMSArNDEyLDE3IEBACiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9TVEFURSBnaWw7CiAjZW5kaWYKKyAgICAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKKwogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9iamVjdCAgOiAiKTsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgICAgICBnaWwgPSBQeUdJTFN0YXRlX0Vuc3VyZSgpOwogI2VuZGlmCisKKyAgICAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAgICAgICAgICh2b2lkKVB5T2JqZWN0X1ByaW50KG9wLCBzdGRlcnIsIDApOworICAgICAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOworCiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgUHlHSUxTdGF0ZV9SZWxlYXNlKGdpbCk7CiAjZW5kaWYKQEAgLTM3Nyw2ICs0NTUsMTQgQEAKICAgICBpZiAoUHlfVFlQRSh2KS0+dHBfcmVwciA9PSBOVUxMKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYtPm9iX3R5cGUtPnRwX25hbWUsIHYpOworCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeU9iamVjdF9SZXByKCkgbXVzdCBub3QgYmUgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldCwKKyAgICAgICBiZWNhdXNlIGl0IG1heSBjbGVhciBpdCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSkgYW5kIHNvIHRoZQorICAgICAgIGNhbGxlciBsb3NlcyBpdHMgZXhjZXB0aW9uICovCisgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyNlbmRpZgorCiAgICAgcmVzID0gKCp2LT5vYl90eXBlLT50cF9yZXByKSh2KTsKICAgICBpZiAocmVzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNDE5LDYgKzUwNSwxMyBAQAogICAgIGlmIChQeV9UWVBFKHYpLT50cF9zdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5T2JqZWN0X1JlcHIodik7CiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIFB5T2JqZWN0X1N0cigpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQsCisgICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKKyAgICAgICBjYWxsZXIgbG9zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIC8qIEl0IGlzIHBvc3NpYmxlIGZvciBhIHR5cGUgdG8gaGF2ZSBhIHRwX3N0ciByZXByZXNlbnRhdGlvbiB0aGF0IGxvb3BzCiAgICAgICAgaW5maW5pdGVseS4gKi8KICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgc3RyIG9mIGFuIG9iamVjdCIpKQpAQCAtNDUxLDYgKzU0NCw5IEBACiAgICAgaWYgKHJlcHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHJlcHIpKQorICAgICAgICByZXR1cm4gcmVwcjsKKwogICAgIC8qIHJlcHIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIFB5VW5pY29kZSBvYmplY3QgYnkgUHlPYmplY3RfUmVwciAqLwogICAgIGFzY2lpID0gX1B5VW5pY29kZV9Bc0FTQ0lJU3RyaW5nKHJlcHIsICJiYWNrc2xhc2hyZXBsYWNlIik7CiAgICAgUHlfREVDUkVGKHJlcHIpOwpAQCAtNDcwLDcgKzU2Niw2IEBACiBQeU9iamVjdF9CeXRlcyhQeU9iamVjdCAqdikKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0LCAqZnVuYzsKLSAgICBfUHlfSURFTlRJRklFUihfX2J5dGVzX18pOwogCiAgICAgaWYgKHYgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZygiPE5VTEw+Iik7CkBAIC02MzYsMTUwICs3MzEsNiBAQAogICAgIHJldHVybiBvazsKIH0KIAotLyogU2V0IG9mIGhhc2ggdXRpbGl0eSBmdW5jdGlvbnMgdG8gaGVscCBtYWludGFpbmluZyB0aGUgaW52YXJpYW50IHRoYXQKLSAgICBpZiBhPT1iIHRoZW4gaGFzaChhKT09aGFzaChiKQotCi0gICBBbGwgdGhlIHV0aWxpdHkgZnVuY3Rpb25zIChfUHlfSGFzaCooKSkgcmV0dXJuICItMSIgdG8gc2lnbmlmeSBhbiBlcnJvci4KLSovCi0KLS8qIEZvciBudW1lcmljIHR5cGVzLCB0aGUgaGFzaCBvZiBhIG51bWJlciB4IGlzIGJhc2VkIG9uIHRoZSByZWR1Y3Rpb24KLSAgIG9mIHggbW9kdWxvIHRoZSBwcmltZSBQID0gMioqX1B5SEFTSF9CSVRTIC0gMS4gIEl0J3MgZGVzaWduZWQgc28gdGhhdAotICAgaGFzaCh4KSA9PSBoYXNoKHkpIHdoZW5ldmVyIHggYW5kIHkgYXJlIG51bWVyaWNhbGx5IGVxdWFsLCBldmVuIGlmCi0gICB4IGFuZCB5IGhhdmUgZGlmZmVyZW50IHR5cGVzLgotCi0gICBBIHF1aWNrIHN1bW1hcnkgb2YgdGhlIGhhc2hpbmcgc3RyYXRlZ3k6Ci0KLSAgICgxKSBGaXJzdCBkZWZpbmUgdGhlICdyZWR1Y3Rpb24gb2YgeCBtb2R1bG8gUCcgZm9yIGFueSByYXRpb25hbAotICAgbnVtYmVyIHg7IHRoaXMgaXMgYSBzdGFuZGFyZCBleHRlbnNpb24gb2YgdGhlIHVzdWFsIG5vdGlvbiBvZgotICAgcmVkdWN0aW9uIG1vZHVsbyBQIGZvciBpbnRlZ2Vycy4gIElmIHggPT0gcC9xICh3cml0dGVuIGluIGxvd2VzdAotICAgdGVybXMpLCB0aGUgcmVkdWN0aW9uIGlzIGludGVycHJldGVkIGFzIHRoZSByZWR1Y3Rpb24gb2YgcCB0aW1lcwotICAgdGhlIGludmVyc2Ugb2YgdGhlIHJlZHVjdGlvbiBvZiBxLCBhbGwgbW9kdWxvIFA7IGlmIHEgaXMgZXhhY3RseQotICAgZGl2aXNpYmxlIGJ5IFAgdGhlbiBkZWZpbmUgdGhlIHJlZHVjdGlvbiB0byBiZSBpbmZpbml0eS4gIFNvIHdlJ3ZlCi0gICBnb3QgYSB3ZWxsLWRlZmluZWQgbWFwCi0KLSAgICAgIHJlZHVjZSA6IHsgcmF0aW9uYWwgbnVtYmVycyB9IC0+IHsgMCwgMSwgMiwgLi4uLCBQLTEsIGluZmluaXR5IH0uCi0KLSAgICgyKSBOb3cgZm9yIGEgcmF0aW9uYWwgbnVtYmVyIHgsIGRlZmluZSBoYXNoKHgpIGJ5OgotCi0gICAgICByZWR1Y2UoeCkgICBpZiB4ID49IDAKLSAgICAgIC1yZWR1Y2UoLXgpIGlmIHggPCAwCi0KLSAgIElmIHRoZSByZXN1bHQgb2YgdGhlIHJlZHVjdGlvbiBpcyBpbmZpbml0eSAodGhpcyBpcyBpbXBvc3NpYmxlIGZvcgotICAgaW50ZWdlcnMsIGZsb2F0cyBhbmQgRGVjaW1hbHMpIHRoZW4gdXNlIHRoZSBwcmVkZWZpbmVkIGhhc2ggdmFsdWUKLSAgIF9QeUhBU0hfSU5GIGZvciB4ID49IDAsIG9yIC1fUHlIQVNIX0lORiBmb3IgeCA8IDAsIGluc3RlYWQuCi0gICBfUHlIQVNIX0lORiwgLV9QeUhBU0hfSU5GIGFuZCBfUHlIQVNIX05BTiBhcmUgYWxzbyB1c2VkIGZvciB0aGUKLSAgIGhhc2hlcyBvZiBmbG9hdCBhbmQgRGVjaW1hbCBpbmZpbml0aWVzIGFuZCBuYW5zLgotCi0gICBBIHNlbGxpbmcgcG9pbnQgZm9yIHRoZSBhYm92ZSBzdHJhdGVneSBpcyB0aGF0IGl0IG1ha2VzIGl0IHBvc3NpYmxlCi0gICB0byBjb21wdXRlIGhhc2hlcyBvZiBkZWNpbWFsIGFuZCBiaW5hcnkgZmxvYXRpbmctcG9pbnQgbnVtYmVycwotICAgZWZmaWNpZW50bHksIGV2ZW4gaWYgdGhlIGV4cG9uZW50IG9mIHRoZSBiaW5hcnkgb3IgZGVjaW1hbCBudW1iZXIKLSAgIGlzIGxhcmdlLiAgVGhlIGtleSBwb2ludCBpcyB0aGF0Ci0KLSAgICAgIHJlZHVjZSh4ICogeSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKHkpIChtb2R1bG8gX1B5SEFTSF9NT0RVTFVTKQotCi0gICBwcm92aWRlZCB0aGF0IHtyZWR1Y2UoeCksIHJlZHVjZSh5KX0gIT0gezAsIGluZmluaXR5fS4gIFRoZSByZWR1Y3Rpb24gb2YgYQotICAgYmluYXJ5IG9yIGRlY2ltYWwgZmxvYXQgaXMgbmV2ZXIgaW5maW5pdHksIHNpbmNlIHRoZSBkZW5vbWluYXRvciBpcyBhIHBvd2VyCi0gICBvZiAyIChmb3IgYmluYXJ5KSBvciBhIGRpdmlzb3Igb2YgYSBwb3dlciBvZiAxMCAoZm9yIGRlY2ltYWwpLiAgU28gd2UgaGF2ZSwKLSAgIGZvciBub25uZWdhdGl2ZSB4LAotCi0gICAgICByZWR1Y2UoeCAqIDIqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgyKiplKSAlIF9QeUhBU0hfTU9EVUxVUwotCi0gICAgICByZWR1Y2UoeCAqIDEwKiplKSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoMTAqKmUpICUgX1B5SEFTSF9NT0RVTFVTCi0KLSAgIGFuZCByZWR1Y2UoMTAqKmUpIGNhbiBiZSBjb21wdXRlZCBlZmZpY2llbnRseSBieSB0aGUgdXN1YWwgbW9kdWxhcgotICAgZXhwb25lbnRpYXRpb24gYWxnb3JpdGhtLiAgRm9yIHJlZHVjZSgyKiplKSBpdCdzIGV2ZW4gYmV0dGVyOiBzaW5jZQotICAgUCBpcyBvZiB0aGUgZm9ybSAyKipuLTEsIHJlZHVjZSgyKiplKSBpcyAyKiooZSBtb2QgbiksIGFuZCBtdWx0aXBsaWNhdGlvbgotICAgYnkgMioqKGUgbW9kIG4pIG1vZHVsbyAyKipuLTEganVzdCBhbW91bnRzIHRvIGEgcm90YXRpb24gb2YgYml0cy4KLQotICAgKi8KLQotUHlfaGFzaF90Ci1fUHlfSGFzaERvdWJsZShkb3VibGUgdikKLXsKLSAgICBpbnQgZSwgc2lnbjsKLSAgICBkb3VibGUgbTsKLSAgICBQeV91aGFzaF90IHgsIHk7Ci0KLSAgICBpZiAoIVB5X0lTX0ZJTklURSh2KSkgewotICAgICAgICBpZiAoUHlfSVNfSU5GSU5JVFkodikpCi0gICAgICAgICAgICByZXR1cm4gdiA+IDAgPyBfUHlIQVNIX0lORiA6IC1fUHlIQVNIX0lORjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIF9QeUhBU0hfTkFOOwotICAgIH0KLQotICAgIG0gPSBmcmV4cCh2LCAmZSk7Ci0KLSAgICBzaWduID0gMTsKLSAgICBpZiAobSA8IDApIHsKLSAgICAgICAgc2lnbiA9IC0xOwotICAgICAgICBtID0gLW07Ci0gICAgfQotCi0gICAgLyogcHJvY2VzcyAyOCBiaXRzIGF0IGEgdGltZTsgIHRoaXMgc2hvdWxkIHdvcmsgd2VsbCBib3RoIGZvciBiaW5hcnkKLSAgICAgICBhbmQgaGV4YWRlY2ltYWwgZmxvYXRpbmcgcG9pbnQuICovCi0gICAgeCA9IDA7Ci0gICAgd2hpbGUgKG0pIHsKLSAgICAgICAgeCA9ICgoeCA8PCAyOCkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gMjgpOwotICAgICAgICBtICo9IDI2ODQzNTQ1Ni4wOyAgLyogMioqMjggKi8KLSAgICAgICAgZSAtPSAyODsKLSAgICAgICAgeSA9IChQeV91aGFzaF90KW07ICAvKiBwdWxsIG91dCBpbnRlZ2VyIHBhcnQgKi8KLSAgICAgICAgbSAtPSB5OwotICAgICAgICB4ICs9IHk7Ci0gICAgICAgIGlmICh4ID49IF9QeUhBU0hfTU9EVUxVUykKLSAgICAgICAgICAgIHggLT0gX1B5SEFTSF9NT0RVTFVTOwotICAgIH0KLQotICAgIC8qIGFkanVzdCBmb3IgdGhlIGV4cG9uZW50OyAgZmlyc3QgcmVkdWNlIGl0IG1vZHVsbyBfUHlIQVNIX0JJVFMgKi8KLSAgICBlID0gZSA+PSAwID8gZSAlIF9QeUhBU0hfQklUUyA6IF9QeUhBU0hfQklUUy0xLSgoLTEtZSkgJSBfUHlIQVNIX0JJVFMpOwotICAgIHggPSAoKHggPDwgZSkgJiBfUHlIQVNIX01PRFVMVVMpIHwgeCA+PiAoX1B5SEFTSF9CSVRTIC0gZSk7Ci0KLSAgICB4ID0geCAqIHNpZ247Ci0gICAgaWYgKHggPT0gKFB5X3VoYXNoX3QpLTEpCi0gICAgICAgIHggPSAoUHlfdWhhc2hfdCktMjsKLSAgICByZXR1cm4gKFB5X2hhc2hfdCl4OwotfQotCi1QeV9oYXNoX3QKLV9QeV9IYXNoUG9pbnRlcih2b2lkICpwKQotewotICAgIFB5X2hhc2hfdCB4OwotICAgIHNpemVfdCB5ID0gKHNpemVfdClwOwotICAgIC8qIGJvdHRvbSAzIG9yIDQgYml0cyBhcmUgbGlrZWx5IHRvIGJlIDA7IHJvdGF0ZSB5IGJ5IDQgdG8gYXZvaWQKLSAgICAgICBleGNlc3NpdmUgaGFzaCBjb2xsaXNpb25zIGZvciBkaWN0cyBhbmQgc2V0cyAqLwotICAgIHkgPSAoeSA+PiA0KSB8ICh5IDw8ICg4ICogU0laRU9GX1ZPSURfUCAtIDQpKTsKLSAgICB4ID0gKFB5X2hhc2hfdCl5OwotICAgIGlmICh4ID09IC0xKQotICAgICAgICB4ID0gLTI7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KLVB5X2hhc2hfdAotX1B5X0hhc2hCeXRlcyh1bnNpZ25lZCBjaGFyICpwLCBQeV9zc2l6ZV90IGxlbikKLXsKLSAgICBQeV91aGFzaF90IHg7Ci0gICAgUHlfc3NpemVfdCBpOwotCi0gICAgLyoKLSAgICAgIFdlIG1ha2UgdGhlIGhhc2ggb2YgdGhlIGVtcHR5IHN0cmluZyBiZSAwLCByYXRoZXIgdGhhbiB1c2luZwotICAgICAgKHByZWZpeCBeIHN1ZmZpeCksIHNpbmNlIHRoaXMgc2xpZ2h0bHkgb2JmdXNjYXRlcyB0aGUgaGFzaCBzZWNyZXQKLSAgICAqLwotI2lmZGVmIFB5X0RFQlVHCi0gICAgYXNzZXJ0KF9QeV9IYXNoU2VjcmV0X0luaXRpYWxpemVkKTsKLSNlbmRpZgotICAgIGlmIChsZW4gPT0gMCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgeCA9IChQeV91aGFzaF90KSBfUHlfSGFzaFNlY3JldC5wcmVmaXg7Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgKnAgPDwgNzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKnArKzsKLSAgICB4IF49IChQeV91aGFzaF90KSBsZW47Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuc3VmZml4OwotICAgIGlmICh4ID09IC0xKQotICAgICAgICB4ID0gLTI7Ci0gICAgcmV0dXJuIHg7Ci19Ci0KIFB5X2hhc2hfdAogUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkKFB5T2JqZWN0ICp2KQogewpAQCAtNzg4LDggKzczOSw2IEBACiAgICAgcmV0dXJuIC0xOwogfQogCi1fUHlfSGFzaFNlY3JldF90IF9QeV9IYXNoU2VjcmV0OwotCiBQeV9oYXNoX3QKIFB5T2JqZWN0X0hhc2goUHlPYmplY3QgKnYpCiB7CkBAIC04NTksNyArODA4LDYgQEAKIHsKICAgICBpbnQgcmVzOwogICAgIFB5T2JqZWN0KiBpc2Fic3RyYWN0OwotICAgIF9QeV9JREVOVElGSUVSKF9faXNhYnN0cmFjdG1ldGhvZF9fKTsKIAogICAgIGlmIChvYmogPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMDMyLDggKzk4MCwxMiBAQAogUHlPYmplY3QgKgogX1B5T2JqZWN0X0dldEJ1aWx0aW4oY29uc3QgY2hhciAqbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbW9kLCAqYXR0cjsKLSAgICBtb2QgPSBQeUltcG9ydF9JbXBvcnRNb2R1bGUoImJ1aWx0aW5zIik7CisgICAgUHlPYmplY3QgKm1vZF9uYW1lLCAqbW9kLCAqYXR0cjsKKworICAgIG1vZF9uYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfYnVpbHRpbnMpOyAgIC8qIGJvcnJvd2VkICovCisgICAgaWYgKG1vZF9uYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1vZCA9IFB5SW1wb3J0X0ltcG9ydChtb2RfbmFtZSk7CiAgICAgaWYgKG1vZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBhdHRyID0gUHlPYmplY3RfR2V0QXR0clN0cmluZyhtb2QsIG5hbWUpOwpAQCAtMTMxNywxMiArMTI2OSwxMSBAQAogX2Rpcl9sb2NhbHModm9pZCkKIHsKICAgICBQeU9iamVjdCAqbmFtZXM7Ci0gICAgUHlPYmplY3QgKmxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICBQeU9iamVjdCAqbG9jYWxzOwogCi0gICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeXN0ZW1FcnJvciwgImZyYW1lIGRvZXMgbm90IGV4aXN0Iik7CisgICAgbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQogCiAgICAgbmFtZXMgPSBQeU1hcHBpbmdfS2V5cyhsb2NhbHMpOwogICAgIGlmICghbmFtZXMpCkBAIC0xMzQ3LDcgKzEyOTgsNiBAQAogX2Rpcl9vYmplY3QoUHlPYmplY3QgKm9iaikKIHsKICAgICBQeU9iamVjdCAqcmVzdWx0LCAqc29ydGVkOwotICAgIF9QeV9JREVOVElGSUVSKF9fZGlyX18pOwogICAgIFB5T2JqZWN0ICpkaXJmdW5jID0gX1B5T2JqZWN0X0xvb2t1cFNwZWNpYWwob2JqLCAmUHlJZF9fX2Rpcl9fKTsKIAogICAgIGFzc2VydChvYmopOwpAQCAtMTUxNSw2ICsxNDY1LDE3IEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCitOb3RJbXBsZW1lbnRlZF9yZWR1Y2UoUHlPYmplY3QgKm9wKQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiTm90SW1wbGVtZW50ZWQiKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIG5vdGltcGxlbWVudGVkX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pTm90SW1wbGVtZW50ZWRfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCitzdGF0aWMgUHlPYmplY3QgKgogbm90aW1wbGVtZW50ZWRfbmV3KFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCiB7CiAgICAgaWYgKFB5VHVwbGVfR0VUX1NJWkUoYXJncykgfHwgKGt3YXJncyAmJiBQeURpY3RfU2l6ZShrd2FyZ3MpKSkgewpAQCAtMTUyNCwxMiArMTQ4NSwyMSBAQAogICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKIH0KIAorc3RhdGljIHZvaWQKK25vdGltcGxlbWVudGVkX2RlYWxsb2MoUHlPYmplY3QqIGlnbm9yZSkKK3sKKyAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBnZXQgY2FsbGVkLCBidXQgd2UgYWxzbyBkb24ndCB3YW50IHRvIFNFR1YgaWYKKyAgICAgKiB3ZSBhY2NpZGVudGFsbHkgZGVjcmVmIE5vdEltcGxlbWVudGVkIG91dCBvZiBleGlzdGVuY2UuCisgICAgICovCisgICAgUHlfRmF0YWxFcnJvcigiZGVhbGxvY2F0aW5nIE5vdEltcGxlbWVudGVkIik7Cit9CisKIFB5VHlwZU9iamVjdCBfUHlOb3RJbXBsZW1lbnRlZF9UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCiAgICAgIk5vdEltcGxlbWVudGVkVHlwZSIsCiAgICAgMCwKICAgICAwLAotICAgIG5vbmVfZGVhbGxvYywgICAgICAgLyp0cF9kZWFsbG9jKi8gLypuZXZlciBjYWxsZWQqLworICAgIG5vdGltcGxlbWVudGVkX2RlYWxsb2MsICAgICAgIC8qdHBfZGVhbGxvYyovIC8qbmV2ZXIgY2FsbGVkKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfcHJpbnQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRhdHRyKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc2V0YXR0ciovCkBAIC0xNTUyLDcgKzE1MjIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF93ZWFrbGlzdG9mZnNldCAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9pdGVyICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX21ldGhvZHMgKi8KKyAgICBub3RpbXBsZW1lbnRlZF9tZXRob2RzLCAvKnRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfbWVtYmVycyAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfYmFzZSAqLwpAQCAtMTY5OSwxNSArMTY2OSw2IEBACiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlNZW1iZXJEZXNjcl9UeXBlKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbWVtYmVyIGRlc2NyaXB0b3IgdHlwZSIpOwogCi0gICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlGaWx0ZXJfVHlwZSkgPCAwKQotICAgICAgICBQeV9GYXRhbEVycm9yKCJDYW4ndCBpbml0aWFsaXplIGZpbHRlciB0eXBlIik7Ci0KLSAgICBpZiAoUHlUeXBlX1JlYWR5KCZQeU1hcF9UeXBlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgbWFwIHR5cGUiKTsKLQotICAgIGlmIChQeVR5cGVfUmVhZHkoJlB5WmlwX1R5cGUpIDwgMCkKLSAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSB6aXAgdHlwZSIpOwotCiAgICAgaWYgKFB5VHlwZV9SZWFkeSgmX1B5TmFtZXNwYWNlX1R5cGUpIDwgMCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgaW5pdGlhbGl6ZSBuYW1lc3BhY2UgdHlwZSIpOwogCkBAIC0xNzQ5LDEwICsxNzEwLDEwIEBACiB9CiAKIHZvaWQKLV9QeV9Gb3JnZXRSZWZlcmVuY2UocmVnaXN0ZXIgUHlPYmplY3QgKm9wKQorX1B5X0ZvcmdldFJlZmVyZW5jZShQeU9iamVjdCAqb3ApCiB7CiAjaWZkZWYgU0xPV19VTlJFRl9DSEVDSwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICpwOworICAgIFB5T2JqZWN0ICpwOwogI2VuZGlmCiAgICAgaWYgKG9wLT5vYl9yZWZjbnQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJVTlJFRiBuZWdhdGl2ZSByZWZjbnQiKTsKQEAgLTE4NTYsMjYgKzE4MTcsNiBAQAogUHlfc3NpemVfdCAoKl9QeV9hYnN0cmFjdF9oYWNrKShQeU9iamVjdCAqKSA9IFB5T2JqZWN0X1NpemU7CiAKIAotLyogUHl0aG9uJ3MgbWFsbG9jIHdyYXBwZXJzIChzZWUgcHltZW0uaCkgKi8KLQotdm9pZCAqCi1QeU1lbV9NYWxsb2Moc2l6ZV90IG5ieXRlcykKLXsKLSAgICByZXR1cm4gUHlNZW1fTUFMTE9DKG5ieXRlcyk7Ci19Ci0KLXZvaWQgKgotUHlNZW1fUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQotewotICAgIHJldHVybiBQeU1lbV9SRUFMTE9DKHAsIG5ieXRlcyk7Ci19Ci0KLXZvaWQKLVB5TWVtX0ZyZWUodm9pZCAqcCkKLXsKLSAgICBQeU1lbV9GUkVFKHApOwotfQotCiB2b2lkCiBfUHlPYmplY3RfRGVidWdUeXBlU3RhdHMoRklMRSAqb3V0KQogewpAQCAtMTg4NSw3ICsxODI2LDYgQEAKICAgICBfUHlGcmFtZV9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5TGlzdF9EZWJ1Z01hbGxvY1N0YXRzKG91dCk7CiAgICAgX1B5TWV0aG9kX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKLSAgICBfUHlTZXRfRGVidWdNYWxsb2NTdGF0cyhvdXQpOwogICAgIF9QeVR1cGxlX0RlYnVnTWFsbG9jU3RhdHMob3V0KTsKIH0KIApAQCAtMTkwMSw4ICsxODQxLDYgQEAKICAgIFNlZSBkaWN0b2JqZWN0LmMgYW5kIGxpc3RvYmplY3QuYyBmb3IgZXhhbXBsZXMgb2YgdXNlLgogKi8KIAotI2RlZmluZSBLRVkgIlB5X1JlcHIiCi0KIGludAogUHlfUmVwckVudGVyKFB5T2JqZWN0ICpvYmopCiB7CkBAIC0xOTExLDE0ICsxODQ5LDE2IEBACiAgICAgUHlfc3NpemVfdCBpOwogCiAgICAgZGljdCA9IFB5VGhyZWFkU3RhdGVfR2V0RGljdCgpOworICAgIC8qIElnbm9yZSBhIG1pc3NpbmcgdGhyZWFkLXN0YXRlLCBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZAorICAgICAgIGVhcmx5IG9uIHN0YXJ0dXAuICovCiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbGlzdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSk7CisgICAgbGlzdCA9IF9QeURpY3RfR2V0SXRlbUlkKGRpY3QsICZQeUlkX1B5X1JlcHIpOwogICAgIGlmIChsaXN0ID09IE5VTEwpIHsKICAgICAgICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgICAgIGlmIChsaXN0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBLRVksIGxpc3QpIDwgMCkKKyAgICAgICAgaWYgKF9QeURpY3RfU2V0SXRlbUlkKGRpY3QsICZQeUlkX1B5X1JlcHIsIGxpc3QpIDwgMCkKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgUHlfREVDUkVGKGxpc3QpOwogICAgIH0KQEAgLTE5MjcsNyArMTg2Nyw4IEBACiAgICAgICAgIGlmIChQeUxpc3RfR0VUX0lURU0obGlzdCwgaSkgPT0gb2JqKQogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIFB5TGlzdF9BcHBlbmQobGlzdCwgb2JqKTsKKyAgICBpZiAoUHlMaXN0X0FwcGVuZChsaXN0LCBvYmopIDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiAwOwogfQogCkBAIC0xOTM3LDEzICsxODc4LDE4IEBACiAgICAgUHlPYmplY3QgKmRpY3Q7CiAgICAgUHlPYmplY3QgKmxpc3Q7CiAgICAgUHlfc3NpemVfdCBpOworICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CisKKyAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKIAogICAgIGRpY3QgPSBQeVRocmVhZFN0YXRlX0dldERpY3QoKTsKICAgICBpZiAoZGljdCA9PSBOVUxMKQotICAgICAgICByZXR1cm47Ci0gICAgbGlzdCA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsIEtFWSk7CisgICAgICAgIGdvdG8gZmluYWxseTsKKworICAgIGxpc3QgPSBfUHlEaWN0X0dldEl0ZW1JZChkaWN0LCAmUHlJZF9QeV9SZXByKTsKICAgICBpZiAobGlzdCA9PSBOVUxMIHx8ICFQeUxpc3RfQ2hlY2sobGlzdCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgZ290byBmaW5hbGx5OworCiAgICAgaSA9IFB5TGlzdF9HRVRfU0laRShsaXN0KTsKICAgICAvKiBDb3VudCBiYWNrd2FyZHMgYmVjYXVzZSB3ZSBhbHdheXMgZXhwZWN0IG9iaiB0byBiZSBsaXN0Wy0xXSAqLwogICAgIHdoaWxlICgtLWkgPj0gMCkgewpAQCAtMTk1Miw2ICsxODk4LDEwIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KKworZmluYWxseToKKyAgICAvKiBpZ25vcmUgZXhjZXB0aW9ucyBiZWNhdXNlIHRoZXJlIGlzIG5vIHdheSB0byByZXBvcnQgdGhlbS4gKi8KKyAgICBQeUVycl9SZXN0b3JlKGVycm9yX3R5cGUsIGVycm9yX3ZhbHVlLCBlcnJvcl90cmFjZWJhY2spOwogfQogCiAvKiBUcmFzaGNhbiBzdXBwb3J0LiAqLwpAQCAtMTk3Miw3ICsxOTIyLDcgQEAKIF9QeVRyYXNoX2RlcG9zaXRfb2JqZWN0KFB5T2JqZWN0ICpvcCkKIHsKICAgICBhc3NlcnQoUHlPYmplY3RfSVNfR0Mob3ApKTsKLSAgICBhc3NlcnQoX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcmVmcyA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgYXNzZXJ0KF9QeUdDX1JFRlMob3ApID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKICAgICBhc3NlcnQob3AtPm9iX3JlZmNudCA9PSAwKTsKICAgICBfUHlfQVNfR0Mob3ApLT5nYy5nY19wcmV2ID0gKFB5R0NfSGVhZCAqKV9QeVRyYXNoX2RlbGV0ZV9sYXRlcjsKICAgICBfUHlUcmFzaF9kZWxldGVfbGF0ZXIgPSBvcDsKQEAgLTE5ODQsNyArMTkzNCw3IEBACiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBhc3NlcnQoUHlPYmplY3RfSVNfR0Mob3ApKTsKLSAgICBhc3NlcnQoX1B5X0FTX0dDKG9wKS0+Z2MuZ2NfcmVmcyA9PSBfUHlHQ19SRUZTX1VOVFJBQ0tFRCk7CisgICAgYXNzZXJ0KF9QeUdDX1JFRlMob3ApID09IF9QeUdDX1JFRlNfVU5UUkFDS0VEKTsKICAgICBhc3NlcnQob3AtPm9iX3JlZmNudCA9PSAwKTsKICAgICBfUHlfQVNfR0Mob3ApLT5nYy5nY19wcmV2ID0gKFB5R0NfSGVhZCAqKSB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlcjsKICAgICB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9sYXRlciA9IG9wOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9vYm1hbGxvYy5jIGIvT2JqZWN0cy9vYm1hbGxvYy5jCmluZGV4IGMyNjFiNjguLjNjMzMyNTUgMTAwNjQ0Ci0tLSBhL09iamVjdHMvb2JtYWxsb2MuYworKysgYi9PYmplY3RzL29ibWFsbG9jLmMKQEAgLTEsMTQgKzEsMzc0IEBACiAjaW5jbHVkZSAiUHl0aG9uLmgiCiAKLSNpZmRlZiBXSVRIX1BZTUFMTE9DCisvKiBQeXRob24ncyBtYWxsb2Mgd3JhcHBlcnMgKHNlZSBweW1lbS5oKSAqLwogCi0jaWZkZWYgSEFWRV9NTUFQCi0gI2luY2x1ZGUgPHN5cy9tbWFuLmg+Ci0gI2lmZGVmIE1BUF9BTk9OWU1PVVMKLSAgI2RlZmluZSBBUkVOQVNfVVNFX01NQVAKKyNpZmRlZiBQWU1BTExPQ19ERUJVRyAgIC8qIFdJVEhfUFlNQUxMT0MgJiYgUFlNQUxMT0NfREVCVUcgKi8KKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0YXRpYyB2b2lkKiBfUHlNZW1fRGVidWdNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBfUHlNZW1fRGVidWdGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCk7CitzdGF0aWMgdm9pZCogX1B5TWVtX0RlYnVnUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworCitzdGF0aWMgdm9pZCBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKTsKK3N0YXRpYyB2b2lkIF9QeU1lbV9EZWJ1Z0NoZWNrQWRkcmVzcyhjaGFyIGFwaV9pZCwgY29uc3Qgdm9pZCAqcCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19oYXNfZmVhdHVyZSkgIC8qIENsYW5nICovCisgI2lmIF9faGFzX2ZlYXR1cmUoYWRkcmVzc19zYW5pdGl6ZXIpICAvKiBpcyBBU0FOIGVuYWJsZWQ/ICovCisgICNkZWZpbmUgQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXygobm9fYWRkcmVzc19zYWZldHlfYW5hbHlzaXMpKSBcCisgICAgICAgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCisgI2Vsc2UKKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMKKyAjZW5kaWYKKyNlbHNlCisgI2lmIGRlZmluZWQoX19TQU5JVElaRV9BRERSRVNTX18pICAvKiBHQ0MgNC44LngsIGlzIEFTQU4gZW5hYmxlZD8gKi8KKyAgI2RlZmluZSBBVFRSSUJVVEVfTk9fQUREUkVTU19TQUZFVFlfQU5BTFlTSVMgXAorICAgICAgICBfX2F0dHJpYnV0ZV9fKChub19hZGRyZXNzX3NhZmV0eV9hbmFseXNpcykpIFwKKyAgICAgICAgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKKyAjZWxzZQorICAjZGVmaW5lIEFUVFJJQlVURV9OT19BRERSRVNTX1NBRkVUWV9BTkFMWVNJUwogICNlbmRpZgogI2VuZGlmCiAKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisKKyNpZmRlZiBNU19XSU5ET1dTCisjICBpbmNsdWRlIDx3aW5kb3dzLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfTU1BUCkKKyMgIGluY2x1ZGUgPHN5cy9tbWFuLmg+CisjICBpZmRlZiBNQVBfQU5PTllNT1VTCisjICAgIGRlZmluZSBBUkVOQVNfVVNFX01NQVAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogRm9yd2FyZCBkZWNsYXJhdGlvbiAqLworc3RhdGljIHZvaWQqIF9QeU9iamVjdF9NYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSk7CitzdGF0aWMgdm9pZCBfUHlPYmplY3RfRnJlZSh2b2lkICpjdHgsIHZvaWQgKnApOworc3RhdGljIHZvaWQqIF9QeU9iamVjdF9SZWFsbG9jKHZvaWQgKmN0eCwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisjZW5kaWYKKworCitzdGF0aWMgdm9pZCAqCitfUHlNZW1fUmF3TWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IHNpemUpCit7CisgICAgLyogUHlNZW1fTWFsbG9jKDApIG1lYW5zIG1hbGxvYygxKS4gU29tZSBzeXN0ZW1zIHdvdWxkIHJldHVybiBOVUxMCisgICAgICAgZm9yIG1hbGxvYygwKSwgd2hpY2ggd291bGQgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4gU29tZSBwbGF0Zm9ybXMgd291bGQKKyAgICAgICByZXR1cm4gYSBwb2ludGVyIHdpdGggbm8gbWVtb3J5IGJlaGluZCBpdCwgd2hpY2ggd291bGQgYnJlYWsgcHltYWxsb2MuCisgICAgICAgVG8gc29sdmUgdGhlc2UgcHJvYmxlbXMsIGFsbG9jYXRlIGFuIGV4dHJhIGJ5dGUuICovCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKK30KKworc3RhdGljIHZvaWQgKgorX1B5TWVtX1Jhd1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzaXplID09IDApCisgICAgICAgIHNpemUgPSAxOworICAgIHJldHVybiByZWFsbG9jKHB0ciwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCitfUHlNZW1fUmF3RnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0cikKK3sKKyAgICBmcmVlKHB0cik7Cit9CisKKworI2lmZGVmIE1TX1dJTkRPV1MKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9BcmVuYVZpcnR1YWxBbGxvYyh2b2lkICpjdHgsIHNpemVfdCBzaXplKQoreworICAgIHJldHVybiBWaXJ0dWFsQWxsb2MoTlVMTCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FTV9DT01NSVQgfCBNRU1fUkVTRVJWRSwgUEFHRV9SRUFEV1JJVEUpOworfQorCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0FyZW5hVmlydHVhbEZyZWUodm9pZCAqY3R4LCB2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworICAgIFZpcnR1YWxGcmVlKHB0ciwgMCwgTUVNX1JFTEVBU0UpOworfQorCisjZWxpZiBkZWZpbmVkKEFSRU5BU19VU0VfTU1BUCkKK3N0YXRpYyB2b2lkICoKK19QeU9iamVjdF9BcmVuYU1tYXAodm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICB2b2lkICpwdHI7CisgICAgcHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwKKyAgICAgICAgICAgICAgIE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKKyAgICBpZiAocHRyID09IE1BUF9GQUlMRUQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGFzc2VydChwdHIgIT0gTlVMTCk7CisgICAgcmV0dXJuIHB0cjsKK30KKworc3RhdGljIHZvaWQKK19QeU9iamVjdF9BcmVuYU11bm1hcCh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgbXVubWFwKHB0ciwgc2l6ZSk7Cit9CisKKyNlbHNlCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfQXJlbmFNYWxsb2Modm9pZCAqY3R4LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICByZXR1cm4gbWFsbG9jKHNpemUpOworfQorCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0FyZW5hRnJlZSh2b2lkICpjdHgsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCit7CisgICAgZnJlZShwdHIpOworfQorI2VuZGlmCisKKworI2RlZmluZSBQWVJBV19GVU5DUyBfUHlNZW1fUmF3TWFsbG9jLCBfUHlNZW1fUmF3UmVhbGxvYywgX1B5TWVtX1Jhd0ZyZWUKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisjICBkZWZpbmUgUFlPQkpfRlVOQ1MgX1B5T2JqZWN0X01hbGxvYywgX1B5T2JqZWN0X1JlYWxsb2MsIF9QeU9iamVjdF9GcmVlCisjZWxzZQorIyAgZGVmaW5lIFBZT0JKX0ZVTkNTIFBZUkFXX0ZVTkNTCisjZW5kaWYKKyNkZWZpbmUgUFlNRU1fRlVOQ1MgUFlSQVdfRlVOQ1MKKworI2lmZGVmIFBZTUFMTE9DX0RFQlVHCit0eXBlZGVmIHN0cnVjdCB7CisgICAgLyogV2UgdGFnIGVhY2ggYmxvY2sgd2l0aCBhbiBBUEkgSUQgaW4gb3JkZXIgdG8gdGFnIEFQSSB2aW9sYXRpb25zICovCisgICAgY2hhciBhcGlfaWQ7CisgICAgUHlNZW1BbGxvY2F0b3IgYWxsb2M7Cit9IGRlYnVnX2FsbG9jX2FwaV90Oworc3RhdGljIHN0cnVjdCB7CisgICAgZGVidWdfYWxsb2NfYXBpX3QgcmF3OworICAgIGRlYnVnX2FsbG9jX2FwaV90IG1lbTsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCBvYmo7Cit9IF9QeU1lbV9EZWJ1ZyA9IHsKKyAgICB7J3InLCB7TlVMTCwgUFlSQVdfRlVOQ1N9fSwKKyAgICB7J20nLCB7TlVMTCwgUFlNRU1fRlVOQ1N9fSwKKyAgICB7J28nLCB7TlVMTCwgUFlPQkpfRlVOQ1N9fQorICAgIH07CisKKyNkZWZpbmUgUFlEQkdfRlVOQ1MgX1B5TWVtX0RlYnVnTWFsbG9jLCBfUHlNZW1fRGVidWdSZWFsbG9jLCBfUHlNZW1fRGVidWdGcmVlCisjZW5kaWYKKworc3RhdGljIFB5TWVtQWxsb2NhdG9yIF9QeU1lbV9SYXcgPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLnJhdywgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlSQVdfRlVOQ1MKKyNlbmRpZgorICAgIH07CisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlNZW0gPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLm1lbSwgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlNRU1fRlVOQ1MKKyNlbmRpZgorICAgIH07CisKK3N0YXRpYyBQeU1lbUFsbG9jYXRvciBfUHlPYmplY3QgPSB7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICAmX1B5TWVtX0RlYnVnLm9iaiwgUFlEQkdfRlVOQ1MKKyNlbHNlCisgICAgTlVMTCwgUFlPQkpfRlVOQ1MKKyNlbmRpZgorICAgIH07CisKKyN1bmRlZiBQWVJBV19GVU5DUworI3VuZGVmIFBZTUVNX0ZVTkNTCisjdW5kZWYgUFlPQkpfRlVOQ1MKKyN1bmRlZiBQWURCR19GVU5DUworCitzdGF0aWMgUHlPYmplY3RBcmVuYUFsbG9jYXRvciBfUHlPYmplY3RfQXJlbmEgPSB7TlVMTCwKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgX1B5T2JqZWN0X0FyZW5hVmlydHVhbEFsbG9jLCBfUHlPYmplY3RfQXJlbmFWaXJ0dWFsRnJlZQorI2VsaWYgZGVmaW5lZChBUkVOQVNfVVNFX01NQVApCisgICAgX1B5T2JqZWN0X0FyZW5hTW1hcCwgX1B5T2JqZWN0X0FyZW5hTXVubWFwCisjZWxzZQorICAgIF9QeU9iamVjdF9BcmVuYU1hbGxvYywgX1B5T2JqZWN0X0FyZW5hRnJlZQorI2VuZGlmCisgICAgfTsKKwordm9pZAorUHlNZW1fU2V0dXBEZWJ1Z0hvb2tzKHZvaWQpCit7CisjaWZkZWYgUFlNQUxMT0NfREVCVUcKKyAgICBQeU1lbUFsbG9jYXRvciBhbGxvYzsKKworICAgIGFsbG9jLm1hbGxvYyA9IF9QeU1lbV9EZWJ1Z01hbGxvYzsKKyAgICBhbGxvYy5yZWFsbG9jID0gX1B5TWVtX0RlYnVnUmVhbGxvYzsKKyAgICBhbGxvYy5mcmVlID0gX1B5TWVtX0RlYnVnRnJlZTsKKworICAgIGlmIChfUHlNZW1fUmF3Lm1hbGxvYyAhPSBfUHlNZW1fRGVidWdNYWxsb2MpIHsKKyAgICAgICAgYWxsb2MuY3R4ID0gJl9QeU1lbV9EZWJ1Zy5yYXc7CisgICAgICAgIFB5TWVtX0dldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmX1B5TWVtX0RlYnVnLnJhdy5hbGxvYyk7CisgICAgICAgIFB5TWVtX1NldEFsbG9jYXRvcihQWU1FTV9ET01BSU5fUkFXLCAmYWxsb2MpOworICAgIH0KKworICAgIGlmIChfUHlNZW0ubWFsbG9jICE9IF9QeU1lbV9EZWJ1Z01hbGxvYykgeworICAgICAgICBhbGxvYy5jdHggPSAmX1B5TWVtX0RlYnVnLm1lbTsKKyAgICAgICAgUHlNZW1fR2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZfUHlNZW1fRGVidWcubWVtLmFsbG9jKTsKKyAgICAgICAgUHlNZW1fU2V0QWxsb2NhdG9yKFBZTUVNX0RPTUFJTl9NRU0sICZhbGxvYyk7CisgICAgfQorCisgICAgaWYgKF9QeU9iamVjdC5tYWxsb2MgIT0gX1B5TWVtX0RlYnVnTWFsbG9jKSB7CisgICAgICAgIGFsbG9jLmN0eCA9ICZfUHlNZW1fRGVidWcub2JqOworICAgICAgICBQeU1lbV9HZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJl9QeU1lbV9EZWJ1Zy5vYmouYWxsb2MpOworICAgICAgICBQeU1lbV9TZXRBbGxvY2F0b3IoUFlNRU1fRE9NQUlOX09CSiwgJmFsbG9jKTsKKyAgICB9CisjZW5kaWYKK30KKwordm9pZAorUHlNZW1fR2V0QWxsb2NhdG9yKFB5TWVtQWxsb2NhdG9yRG9tYWluIGRvbWFpbiwgUHlNZW1BbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBzd2l0Y2goZG9tYWluKQorICAgIHsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9SQVc6ICphbGxvY2F0b3IgPSBfUHlNZW1fUmF3OyBicmVhazsKKyAgICBjYXNlIFBZTUVNX0RPTUFJTl9NRU06ICphbGxvY2F0b3IgPSBfUHlNZW07IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX09CSjogKmFsbG9jYXRvciA9IF9QeU9iamVjdDsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgLyogdW5rbm93biBkb21haW4gKi8KKyAgICAgICAgYWxsb2NhdG9yLT5jdHggPSBOVUxMOworICAgICAgICBhbGxvY2F0b3ItPm1hbGxvYyA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRvci0+cmVhbGxvYyA9IE5VTEw7CisgICAgICAgIGFsbG9jYXRvci0+ZnJlZSA9IE5VTEw7CisgICAgfQorfQorCit2b2lkCitQeU1lbV9TZXRBbGxvY2F0b3IoUHlNZW1BbGxvY2F0b3JEb21haW4gZG9tYWluLCBQeU1lbUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgIHN3aXRjaChkb21haW4pCisgICAgeworICAgIGNhc2UgUFlNRU1fRE9NQUlOX1JBVzogX1B5TWVtX1JhdyA9ICphbGxvY2F0b3I7IGJyZWFrOworICAgIGNhc2UgUFlNRU1fRE9NQUlOX01FTTogX1B5TWVtID0gKmFsbG9jYXRvcjsgYnJlYWs7CisgICAgY2FzZSBQWU1FTV9ET01BSU5fT0JKOiBfUHlPYmplY3QgPSAqYWxsb2NhdG9yOyBicmVhazsKKyAgICAvKiBpZ25vcmUgdW5rbm93biBkb21haW4gKi8KKyAgICB9CisKK30KKwordm9pZAorUHlPYmplY3RfR2V0QXJlbmFBbGxvY2F0b3IoUHlPYmplY3RBcmVuYUFsbG9jYXRvciAqYWxsb2NhdG9yKQoreworICAgICphbGxvY2F0b3IgPSBfUHlPYmplY3RfQXJlbmE7Cit9CisKK3ZvaWQKK1B5T2JqZWN0X1NldEFyZW5hQWxsb2NhdG9yKFB5T2JqZWN0QXJlbmFBbGxvY2F0b3IgKmFsbG9jYXRvcikKK3sKKyAgICBfUHlPYmplY3RfQXJlbmEgPSAqYWxsb2NhdG9yOworfQorCit2b2lkICoKK1B5TWVtX1Jhd01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKgorICAgICAqIExpbWl0IG91cnNlbHZlcyB0byBQWV9TU0laRV9UX01BWCBieXRlcyB0byBwcmV2ZW50IHNlY3VyaXR5IGhvbGVzLgorICAgICAqIE1vc3QgcHl0aG9uIGludGVybmFscyBibGluZGx5IHVzZSBhIHNpZ25lZCBQeV9zc2l6ZV90IHRvIHRyYWNrCisgICAgICogdGhpbmdzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93cyBvciBuZWdhdGl2ZXMuCisgICAgICogQXMgc2l6ZV90IGlzIHVuc2lnbmVkLCBjaGVja2luZyBmb3Igc2l6ZSA8IDAgaXMgbm90IHJlcXVpcmVkLgorICAgICAqLworICAgIGlmIChzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gX1B5TWVtX1Jhdy5tYWxsb2MoX1B5TWVtX1Jhdy5jdHgsIHNpemUpOworfQorCit2b2lkKgorUHlNZW1fUmF3UmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAobmV3X3NpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtX1Jhdy5yZWFsbG9jKF9QeU1lbV9SYXcuY3R4LCBwdHIsIG5ld19zaXplKTsKK30KKwordm9pZCBQeU1lbV9SYXdGcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlNZW1fUmF3LmZyZWUoX1B5TWVtX1Jhdy5jdHgsIHB0cik7Cit9CisKK3ZvaWQgKgorUHlNZW1fTWFsbG9jKHNpemVfdCBzaXplKQoreworICAgIC8qIHNlZSBQeU1lbV9SYXdNYWxsb2MoKSAqLworICAgIGlmIChzaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU1lbS5tYWxsb2MoX1B5TWVtLmN0eCwgc2l6ZSk7Cit9CisKK3ZvaWQgKgorUHlNZW1fUmVhbGxvYyh2b2lkICpwdHIsIHNpemVfdCBuZXdfc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAobmV3X3NpemUgPiAoc2l6ZV90KVBZX1NTSVpFX1RfTUFYKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gX1B5TWVtLnJlYWxsb2MoX1B5TWVtLmN0eCwgcHRyLCBuZXdfc2l6ZSk7Cit9CisKK3ZvaWQKK1B5TWVtX0ZyZWUodm9pZCAqcHRyKQoreworICAgIF9QeU1lbS5mcmVlKF9QeU1lbS5jdHgsIHB0cik7Cit9CisKK2NoYXIgKgorX1B5TWVtX1Jhd1N0cmR1cChjb25zdCBjaGFyICpzdHIpCit7CisgICAgc2l6ZV90IHNpemU7CisgICAgY2hhciAqY29weTsKKworICAgIHNpemUgPSBzdHJsZW4oc3RyKSArIDE7CisgICAgY29weSA9IFB5TWVtX1Jhd01hbGxvYyhzaXplKTsKKyAgICBpZiAoY29weSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtZW1jcHkoY29weSwgc3RyLCBzaXplKTsKKyAgICByZXR1cm4gY29weTsKK30KKworY2hhciAqCitfUHlNZW1fU3RyZHVwKGNvbnN0IGNoYXIgKnN0cikKK3sKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBjaGFyICpjb3B5OworCisgICAgc2l6ZSA9IHN0cmxlbihzdHIpICsgMTsKKyAgICBjb3B5ID0gUHlNZW1fTWFsbG9jKHNpemUpOworICAgIGlmIChjb3B5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIG1lbWNweShjb3B5LCBzdHIsIHNpemUpOworICAgIHJldHVybiBjb3B5OworfQorCit2b2lkICoKK1B5T2JqZWN0X01hbGxvYyhzaXplX3Qgc2l6ZSkKK3sKKyAgICAvKiBzZWUgUHlNZW1fUmF3TWFsbG9jKCkgKi8KKyAgICBpZiAoc2l6ZSA+IChzaXplX3QpUFlfU1NJWkVfVF9NQVgpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBfUHlPYmplY3QubWFsbG9jKF9QeU9iamVjdC5jdHgsIHNpemUpOworfQorCit2b2lkICoKK1B5T2JqZWN0X1JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3QgbmV3X3NpemUpCit7CisgICAgLyogc2VlIFB5TWVtX1Jhd01hbGxvYygpICovCisgICAgaWYgKG5ld19zaXplID4gKHNpemVfdClQWV9TU0laRV9UX01BWCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeU9iamVjdC5yZWFsbG9jKF9QeU9iamVjdC5jdHgsIHB0ciwgbmV3X3NpemUpOworfQorCit2b2lkCitQeU9iamVjdF9GcmVlKHZvaWQgKnB0cikKK3sKKyAgICBfUHlPYmplY3QuZnJlZShfUHlPYmplY3QuY3R4LCBwdHIpOworfQorCisKKyNpZmRlZiBXSVRIX1BZTUFMTE9DCisKICNpZmRlZiBXSVRIX1ZBTEdSSU5ECiAjaW5jbHVkZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4KIApAQCAtNTI1LDYgKzg4NSwxNSBAQAogLyogSGlnaCB3YXRlciBtYXJrIChtYXggdmFsdWUgZXZlciBzZWVuKSBmb3IgbmFyZW5hc19jdXJyZW50bHlfYWxsb2NhdGVkLiAqLwogc3RhdGljIHNpemVfdCBuYXJlbmFzX2hpZ2h3YXRlciA9IDA7CiAKK3N0YXRpYyBQeV9zc2l6ZV90IF9QeV9BbGxvY2F0ZWRCbG9ja3MgPSAwOworCitQeV9zc2l6ZV90CitfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKHZvaWQpCit7CisgICAgcmV0dXJuIF9QeV9BbGxvY2F0ZWRCbG9ja3M7Cit9CisKKwogLyogQWxsb2NhdGUgYSBuZXcgYXJlbmEuICBJZiB3ZSBydW4gb3V0IG9mIG1lbW9yeSwgcmV0dXJuIE5VTEwuICBFbHNlCiAgKiBhbGxvY2F0ZSBhIG5ldyBhcmVuYSwgYW5kIHJldHVybiB0aGUgYWRkcmVzcyBvZiBhbiBhcmVuYV9vYmplY3QKICAqIGRlc2NyaWJpbmcgdGhlIG5ldyBhcmVuYS4gIEl0J3MgZXhwZWN0ZWQgdGhhdCB0aGUgY2FsbGVyIHdpbGwgc2V0CkBAIC01MzYsNyArOTA1LDYgQEAKICAgICBzdHJ1Y3QgYXJlbmFfb2JqZWN0KiBhcmVuYW9iajsKICAgICB1aW50IGV4Y2VzczsgICAgICAgIC8qIG51bWJlciBvZiBieXRlcyBhYm92ZSBwb29sIGFsaWdubWVudCAqLwogICAgIHZvaWQgKmFkZHJlc3M7Ci0gICAgaW50IGVycjsKIAogI2lmZGVmIFBZTUFMTE9DX0RFQlVHCiAgICAgaWYgKFB5X0dFVEVOVigiUFlUSE9OTUFMTE9DU1RBVFMiKSkKQEAgLTU1OCw3ICs5MjYsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIG92ZXJmbG93ICovCiAjZW5kaWYKICAgICAgICAgbmJ5dGVzID0gbnVtYXJlbmFzICogc2l6ZW9mKCphcmVuYXMpOwotICAgICAgICBhcmVuYW9iaiA9IChzdHJ1Y3QgYXJlbmFfb2JqZWN0ICopcmVhbGxvYyhhcmVuYXMsIG5ieXRlcyk7CisgICAgICAgIGFyZW5hb2JqID0gKHN0cnVjdCBhcmVuYV9vYmplY3QgKilQeU1lbV9SYXdSZWFsbG9jKGFyZW5hcywgbmJ5dGVzKTsKICAgICAgICAgaWYgKGFyZW5hb2JqID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgYXJlbmFzID0gYXJlbmFvYmo7CkBAIC01ODksMTUgKzk1Nyw4IEBACiAgICAgYXJlbmFvYmogPSB1bnVzZWRfYXJlbmFfb2JqZWN0czsKICAgICB1bnVzZWRfYXJlbmFfb2JqZWN0cyA9IGFyZW5hb2JqLT5uZXh0YXJlbmE7CiAgICAgYXNzZXJ0KGFyZW5hb2JqLT5hZGRyZXNzID09IDApOwotI2lmZGVmIEFSRU5BU19VU0VfTU1BUAotICAgIGFkZHJlc3MgPSBtbWFwKE5VTEwsIEFSRU5BX1NJWkUsIFBST1RfUkVBRHxQUk9UX1dSSVRFLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNQVBfUFJJVkFURXxNQVBfQU5PTllNT1VTLCAtMSwgMCk7Ci0gICAgZXJyID0gKGFkZHJlc3MgPT0gTUFQX0ZBSUxFRCk7Ci0jZWxzZQotICAgIGFkZHJlc3MgPSBtYWxsb2MoQVJFTkFfU0laRSk7Ci0gICAgZXJyID0gKGFkZHJlc3MgPT0gMCk7Ci0jZW5kaWYKLSAgICBpZiAoZXJyKSB7CisgICAgYWRkcmVzcyA9IF9QeU9iamVjdF9BcmVuYS5hbGxvYyhfUHlPYmplY3RfQXJlbmEuY3R4LCBBUkVOQV9TSVpFKTsKKyAgICBpZiAoYWRkcmVzcyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIFRoZSBhbGxvY2F0aW9uIGZhaWxlZDogcmV0dXJuIE5VTEwgYWZ0ZXIgcHV0dGluZyB0aGUKICAgICAgICAgICogYXJlbmFvYmogYmFjay4KICAgICAgICAgICovCkBAIC03NjAsMTUgKzExMjEsMTYgQEAKICAqIFVubGVzcyB0aGUgb3B0aW1pemVyIHJlb3JkZXJzIGV2ZXJ5dGhpbmcsIGJlaW5nIHRvbyBzbWFydC4uLgogICovCiAKLSN1bmRlZiBQeU9iamVjdF9NYWxsb2MKLXZvaWQgKgotUHlPYmplY3RfTWFsbG9jKHNpemVfdCBuYnl0ZXMpCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfTWFsbG9jKHZvaWQgKmN0eCwgc2l6ZV90IG5ieXRlcykKIHsKICAgICBibG9jayAqYnA7CiAgICAgcG9vbHAgcG9vbDsKICAgICBwb29scCBuZXh0OwogICAgIHVpbnQgc2l6ZTsKIAorICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MrKzsKKwogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA9PSAtMSkpCiAgICAgICAgIHJ1bm5pbmdfb25fdmFsZ3JpbmQgPSBSVU5OSU5HX09OX1ZBTEdSSU5EOwpAQCAtNzc3LDE1ICsxMTM5LDYgQEAKICNlbmRpZgogCiAgICAgLyoKLSAgICAgKiBMaW1pdCBvdXJzZWx2ZXMgdG8gUFlfU1NJWkVfVF9NQVggYnl0ZXMgdG8gcHJldmVudCBzZWN1cml0eSBob2xlcy4KLSAgICAgKiBNb3N0IHB5dGhvbiBpbnRlcm5hbHMgYmxpbmRseSB1c2UgYSBzaWduZWQgUHlfc3NpemVfdCB0byB0cmFjawotICAgICAqIHRoaW5ncyB3aXRob3V0IGNoZWNraW5nIGZvciBvdmVyZmxvd3Mgb3IgbmVnYXRpdmVzLgotICAgICAqIEFzIHNpemVfdCBpcyB1bnNpZ25lZCwgY2hlY2tpbmcgZm9yIG5ieXRlcyA8IDAgaXMgbm90IHJlcXVpcmVkLgotICAgICAqLwotICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKgogICAgICAqIFRoaXMgaW1wbGljaXRseSByZWRpcmVjdHMgbWFsbG9jKDApLgogICAgICAqLwogICAgIGlmICgobmJ5dGVzIC0gMSkgPCBTTUFMTF9SRVFVRVNUX1RIUkVTSE9MRCkgewpAQCAtOTAxLDYgKzEyNTQsNyBAQAogICAgICAgICAgICAgICAgICAqIGFuZCBmcmVlIGxpc3QgYXJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgYnAgPSBwb29sLT5mcmVlYmxvY2s7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGJwICE9IE5VTEwpOwogICAgICAgICAgICAgICAgIHBvb2wtPmZyZWVibG9jayA9ICooYmxvY2sgKiopYnA7CiAgICAgICAgICAgICAgICAgVU5MT0NLKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuICh2b2lkICopYnA7CkBAIC05NTYsMTYgKzEzMTAsMTkgQEAKICAgICAgKiBsYXN0IGNoYW5jZSB0byBzZXJ2ZSB0aGUgcmVxdWVzdCkgb3Igd2hlbiB0aGUgbWF4IG1lbW9yeSBsaW1pdAogICAgICAqIGhhcyBiZWVuIHJlYWNoZWQuCiAgICAgICovCi0gICAgaWYgKG5ieXRlcyA9PSAwKQotICAgICAgICBuYnl0ZXMgPSAxOwotICAgIHJldHVybiAodm9pZCAqKW1hbGxvYyhuYnl0ZXMpOworICAgIHsKKyAgICAgICAgdm9pZCAqcmVzdWx0ID0gUHlNZW1fUmF3TWFsbG9jKG5ieXRlcyk7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgX1B5X0FsbG9jYXRlZEJsb2Nrcy0tOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KIH0KIAogLyogZnJlZSAqLwogCi0jdW5kZWYgUHlPYmplY3RfRnJlZQotdm9pZAotUHlPYmplY3RfRnJlZSh2b2lkICpwKQorQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCitzdGF0aWMgdm9pZAorX1B5T2JqZWN0X0ZyZWUodm9pZCAqY3R4LCB2b2lkICpwKQogewogICAgIHBvb2xwIHBvb2w7CiAgICAgYmxvY2sgKmxhc3RmcmVlOwpAQCAtOTc4LDYgKzEzMzUsOCBAQAogICAgIGlmIChwID09IE5VTEwpICAgICAgLyogZnJlZShOVUxMKSBoYXMgbm8gZWZmZWN0ICovCiAgICAgICAgIHJldHVybjsKIAorICAgIF9QeV9BbGxvY2F0ZWRCbG9ja3MtLTsKKwogI2lmZGVmIFdJVEhfVkFMR1JJTkQKICAgICBpZiAoVU5MSUtFTFkocnVubmluZ19vbl92YWxncmluZCA+IDApKQogICAgICAgICBnb3RvIHJlZGlyZWN0OwpAQCAtMTA3MiwxMSArMTQzMSw4IEBACiAgICAgICAgICAgICAgICAgdW51c2VkX2FyZW5hX29iamVjdHMgPSBhbzsKIAogICAgICAgICAgICAgICAgIC8qIEZyZWUgdGhlIGVudGlyZSBhcmVuYS4gKi8KLSNpZmRlZiBBUkVOQVNfVVNFX01NQVAKLSAgICAgICAgICAgICAgICBtdW5tYXAoKHZvaWQgKilhby0+YWRkcmVzcywgQVJFTkFfU0laRSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGZyZWUoKHZvaWQgKilhby0+YWRkcmVzcyk7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICBfUHlPYmplY3RfQXJlbmEuZnJlZShfUHlPYmplY3RfQXJlbmEuY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYW8tPmFkZHJlc3MsIEFSRU5BX1NJWkUpOwogICAgICAgICAgICAgICAgIGFvLT5hZGRyZXNzID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtYXJrIHVuYXNzb2NpYXRlZCAqLwogICAgICAgICAgICAgICAgIC0tbmFyZW5hc19jdXJyZW50bHlfYWxsb2NhdGVkOwogCkBAIC0xMTg1LDcgKzE1NDEsNyBAQAogcmVkaXJlY3Q6CiAjZW5kaWYKICAgICAvKiBXZSBkaWRuJ3QgYWxsb2NhdGUgdGhpcyBhZGRyZXNzLiAqLwotICAgIGZyZWUocCk7CisgICAgUHlNZW1fUmF3RnJlZShwKTsKIH0KIAogLyogcmVhbGxvYy4gIElmIHAgaXMgTlVMTCwgdGhpcyBhY3RzIGxpa2UgbWFsbG9jKG5ieXRlcykuICBFbHNlIGlmIG5ieXRlcz09MCwKQEAgLTExOTMsOSArMTU0OSw5IEBACiAgKiByZXR1cm4gYSBub24tTlVMTCByZXN1bHQuCiAgKi8KIAotI3VuZGVmIFB5T2JqZWN0X1JlYWxsb2MKLXZvaWQgKgotUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQorQVRUUklCVVRFX05PX0FERFJFU1NfU0FGRVRZX0FOQUxZU0lTCitzdGF0aWMgdm9pZCAqCitfUHlPYmplY3RfUmVhbGxvYyh2b2lkICpjdHgsIHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCiB7CiAgICAgdm9pZCAqYnA7CiAgICAgcG9vbHAgcG9vbDsKQEAgLTEyMDUsMTYgKzE1NjEsNyBAQAogI2VuZGlmCiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gUHlPYmplY3RfTWFsbG9jKG5ieXRlcyk7Ci0KLSAgICAvKgotICAgICAqIExpbWl0IG91cnNlbHZlcyB0byBQWV9TU0laRV9UX01BWCBieXRlcyB0byBwcmV2ZW50IHNlY3VyaXR5IGhvbGVzLgotICAgICAqIE1vc3QgcHl0aG9uIGludGVybmFscyBibGluZGx5IHVzZSBhIHNpZ25lZCBQeV9zc2l6ZV90IHRvIHRyYWNrCi0gICAgICogdGhpbmdzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG92ZXJmbG93cyBvciBuZWdhdGl2ZXMuCi0gICAgICogQXMgc2l6ZV90IGlzIHVuc2lnbmVkLCBjaGVja2luZyBmb3IgbmJ5dGVzIDwgMCBpcyBub3QgcmVxdWlyZWQuCi0gICAgICovCi0gICAgaWYgKG5ieXRlcyA+IFBZX1NTSVpFX1RfTUFYKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIF9QeU9iamVjdF9NYWxsb2MoY3R4LCBuYnl0ZXMpOwogCiAjaWZkZWYgV0lUSF9WQUxHUklORAogICAgIC8qIFRyZWF0IHJ1bm5pbmdfb25fdmFsZ3JpbmQgPT0gLTEgdGhlIHNhbWUgYXMgMCAqLwpAQCAtMTI0MiwxMCArMTU4OSwxMCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2l6ZSA9IG5ieXRlczsKICAgICAgICAgfQotICAgICAgICBicCA9IFB5T2JqZWN0X01hbGxvYyhuYnl0ZXMpOworICAgICAgICBicCA9IF9QeU9iamVjdF9NYWxsb2MoY3R4LCBuYnl0ZXMpOwogICAgICAgICBpZiAoYnAgIT0gTlVMTCkgewogICAgICAgICAgICAgbWVtY3B5KGJwLCBwLCBzaXplKTsKLSAgICAgICAgICAgIFB5T2JqZWN0X0ZyZWUocCk7CisgICAgICAgICAgICBfUHlPYmplY3RfRnJlZShjdHgsIHApOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBicDsKICAgICB9CkBAIC0xMjYzLDE0ICsxNjEwLDE0IEBACiAgICAgICogYXQgcC4gIEluc3RlYWQgd2UgcHVudDogIGxldCBDIGNvbnRpbnVlIHRvIG1hbmFnZSB0aGlzIGJsb2NrLgogICAgICAqLwogICAgIGlmIChuYnl0ZXMpCi0gICAgICAgIHJldHVybiByZWFsbG9jKHAsIG5ieXRlcyk7CisgICAgICAgIHJldHVybiBQeU1lbV9SYXdSZWFsbG9jKHAsIG5ieXRlcyk7CiAgICAgLyogQyBkb2Vzbid0IGRlZmluZSB0aGUgcmVzdWx0IG9mIHJlYWxsb2MocCwgMCkgKGl0IG1heSBvciBtYXkgbm90CiAgICAgICogcmV0dXJuIE5VTEwgdGhlbiksIGJ1dCBQeXRob24ncyBkb2NzIHByb21pc2UgdGhhdCBuYnl0ZXM9PTAgbmV2ZXIKICAgICAgKiByZXR1cm5zIE5VTEwuICBXZSBkb24ndCBwYXNzIDAgdG8gcmVhbGxvYygpLCB0byBhdm9pZCB0aGF0IGVuZGNhc2UKICAgICAgKiB0byBiZWdpbiB3aXRoLiAgRXZlbiB0aGVuLCB3ZSBjYW4ndCBiZSBzdXJlIHRoYXQgcmVhbGxvYygpIHdvbid0CiAgICAgICogcmV0dXJuIE5VTEwuCiAgICAgICovCi0gICAgYnAgPSByZWFsbG9jKHAsIDEpOworICAgIGJwID0gUHlNZW1fUmF3UmVhbGxvYyhwLCAxKTsKICAgICByZXR1cm4gYnAgPyBicCA6IHA7CiB9CiAKQEAgLTEyODAsMjMgKzE2MjcsMTIgQEAKIC8qIHB5bWFsbG9jIG5vdCBlbmFibGVkOiAgUmVkaXJlY3QgdGhlIGVudHJ5IHBvaW50cyB0byBtYWxsb2MuICBUaGVzZSB3aWxsCiAgKiBvbmx5IGJlIHVzZWQgYnkgZXh0ZW5zaW9ucyB0aGF0IGFyZSBjb21waWxlZCB3aXRoIHB5bWFsbG9jIGVuYWJsZWQuICovCiAKLXZvaWQgKgotUHlPYmplY3RfTWFsbG9jKHNpemVfdCBuKQorUHlfc3NpemVfdAorX1B5X0dldEFsbG9jYXRlZEJsb2Nrcyh2b2lkKQogewotICAgIHJldHVybiBQeU1lbV9NQUxMT0Mobik7CisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgKgotUHlPYmplY3RfUmVhbGxvYyh2b2lkICpwLCBzaXplX3QgbikKLXsKLSAgICByZXR1cm4gUHlNZW1fUkVBTExPQyhwLCBuKTsKLX0KLQotdm9pZAotUHlPYmplY3RfRnJlZSh2b2lkICpwKQotewotICAgIFB5TWVtX0ZSRUUocCk7Ci19CiAjZW5kaWYgLyogV0lUSF9QWU1BTExPQyAqLwogCiAjaWZkZWYgUFlNQUxMT0NfREVCVUcKQEAgLTEzMTYsMTAgKzE2NTIsNiBAQAogI2RlZmluZSBERUFEQllURSAgICAgICAweERCICAgIC8qIGRlYWQgKG5ld2x5IGZyZWVkKSBtZW1vcnkgKi8KICNkZWZpbmUgRk9SQklEREVOQllURSAgMHhGQiAgICAvKiB1bnRvdWNoYWJsZSBieXRlcyBhdCBlYWNoIGVuZCBvZiBhIGJsb2NrICovCiAKLS8qIFdlIHRhZyBlYWNoIGJsb2NrIHdpdGggYW4gQVBJIElEIGluIG9yZGVyIHRvIHRhZyBBUEkgdmlvbGF0aW9ucyAqLwotI2RlZmluZSBfUFlNQUxMT0NfTUVNX0lEICdtJyAgIC8qIHRoZSBQeU1lbV9NYWxsb2MoKSBBUEkgKi8KLSNkZWZpbmUgX1BZTUFMTE9DX09CSl9JRCAnbycgICAvKiBUaGUgUHlPYmplY3RfTWFsbG9jKCkgQVBJICovCi0KIHN0YXRpYyBzaXplX3Qgc2VyaWFsbm8gPSAwOyAgICAgLyogaW5jcmVtZW50ZWQgb24gZWFjaCBkZWJ1ZyB7bSxyZX1hbGxvYyAqLwogCiAvKiBzZXJpYWxubyBpcyBhbHdheXMgaW5jcmVtZW50ZWQgdmlhIGNhbGxpbmcgdGhpcyByb3V0aW5lLiAgVGhlIHBvaW50IGlzCkBAIC0xMzkyLDcgKzE3MjQsOSBAQAogcFswOiBTXQogICAgIE51bWJlciBvZiBieXRlcyBvcmlnaW5hbGx5IGFza2VkIGZvci4gIFRoaXMgaXMgYSBzaXplX3QsIGJpZy1lbmRpYW4gKGVhc2llcgogICAgIHRvIHJlYWQgaW4gYSBtZW1vcnkgZHVtcCkuCi1wW1M6IDIqU10KK3BbU10KKyAgICBBUEkgSUQuICBTZWUgUEVQIDQ0NS4gIFRoaXMgaXMgYSBjaGFyYWN0ZXIsIGJ1dCBzZWVtcyB1bmRvY3VtZW50ZWQuCitwW1MrMTogMipTXQogICAgIENvcGllcyBvZiBGT1JCSURERU5CWVRFLiAgVXNlZCB0byBjYXRjaCB1bmRlci0gd3JpdGVzIGFuZCByZWFkcy4KIHBbMipTOiAyKlMrbl0KICAgICBUaGUgcmVxdWVzdGVkIG1lbW9yeSwgZmlsbGVkIHdpdGggY29waWVzIG9mIENMRUFOQllURS4KQEAgLTE0MDIsNzYgKzE3MzYsMzYgQEAKIHBbMipTK246IDIqUytuK1NdCiAgICAgQ29waWVzIG9mIEZPUkJJRERFTkJZVEUuICBVc2VkIHRvIGNhdGNoIG92ZXItIHdyaXRlcyBhbmQgcmVhZHMuCiBwWzIqUytuK1M6IDIqUytuKzIqU10KLSAgICBBIHNlcmlhbCBudW1iZXIsIGluY3JlbWVudGVkIGJ5IDEgb24gZWFjaCBjYWxsIHRvIF9QeU9iamVjdF9EZWJ1Z01hbGxvYwotICAgIGFuZCBfUHlPYmplY3RfRGVidWdSZWFsbG9jLgorICAgIEEgc2VyaWFsIG51bWJlciwgaW5jcmVtZW50ZWQgYnkgMSBvbiBlYWNoIGNhbGwgdG8gX1B5TWVtX0RlYnVnTWFsbG9jCisgICAgYW5kIF9QeU1lbV9EZWJ1Z1JlYWxsb2MuCiAgICAgVGhpcyBpcyBhIGJpZy1lbmRpYW4gc2l6ZV90LgogICAgIElmICJiYWQgbWVtb3J5IiBpcyBkZXRlY3RlZCBsYXRlciwgdGhlIHNlcmlhbCBudW1iZXIgZ2l2ZXMgYW4KICAgICBleGNlbGxlbnQgd2F5IHRvIHNldCBhIGJyZWFrcG9pbnQgb24gdGhlIG5leHQgcnVuLCB0byBjYXB0dXJlIHRoZQogICAgIGluc3RhbnQgYXQgd2hpY2ggdGhpcyBibG9jayB3YXMgcGFzc2VkIG91dC4KICovCiAKLS8qIGRlYnVnIHJlcGxhY2VtZW50cyBmb3IgdGhlIFB5TWVtXyogbWVtb3J5IEFQSSAqLwotdm9pZCAqCi1fUHlNZW1fRGVidWdNYWxsb2Moc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9EZWJ1Z01hbGxvYyh2b2lkICpjdHgsIHNpemVfdCBuYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfTUVNX0lELCBuYnl0ZXMpOwotfQotdm9pZCAqCi1fUHlNZW1fRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX01FTV9JRCwgcCwgbmJ5dGVzKTsKLX0KLXZvaWQKLV9QeU1lbV9EZWJ1Z0ZyZWUodm9pZCAqcCkKLXsKLSAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19NRU1fSUQsIHApOwotfQotCi0vKiBkZWJ1ZyByZXBsYWNlbWVudHMgZm9yIHRoZSBQeU9iamVjdF8qIG1lbW9yeSBBUEkgKi8KLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnTWFsbG9jKHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShfUFlNQUxMT0NfT0JKX0lELCBuYnl0ZXMpOwotfQotdm9pZCAqCi1fUHlPYmplY3RfRGVidWdSZWFsbG9jKHZvaWQgKnAsIHNpemVfdCBuYnl0ZXMpCi17Ci0gICAgcmV0dXJuIF9QeU9iamVjdF9EZWJ1Z1JlYWxsb2NBcGkoX1BZTUFMTE9DX09CSl9JRCwgcCwgbmJ5dGVzKTsKLX0KLXZvaWQKLV9QeU9iamVjdF9EZWJ1Z0ZyZWUodm9pZCAqcCkKLXsKLSAgICBfUHlPYmplY3RfRGVidWdGcmVlQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOwotfQotdm9pZAotX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzKGNvbnN0IHZvaWQgKnApCi17Ci0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKF9QWU1BTExPQ19PQkpfSUQsIHApOwotfQotCi0KLS8qIGdlbmVyaWMgZGVidWcgbWVtb3J5IGFwaSwgd2l0aCBhbiAiaWQiIHRvIGlkZW50aWZ5IHRoZSBBUEkgaW4gdXNlICovCi12b2lkICoKLV9QeU9iamVjdF9EZWJ1Z01hbGxvY0FwaShjaGFyIGlkLCBzaXplX3QgbmJ5dGVzKQoteworICAgIGRlYnVnX2FsbG9jX2FwaV90ICphcGkgPSAoZGVidWdfYWxsb2NfYXBpX3QgKiljdHg7CiAgICAgdWNoYXIgKnA7ICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3Mgb2YgbWFsbG9jJ2VkIGJsb2NrICovCiAgICAgdWNoYXIgKnRhaWw7ICAgICAgICAvKiBwICsgMipTU1QgKyBuYnl0ZXMgPT0gcG9pbnRlciB0byB0YWlsIHBhZCBieXRlcyAqLwogICAgIHNpemVfdCB0b3RhbDsgICAgICAgLyogbmJ5dGVzICsgNCpTU1QgKi8KIAogICAgIGJ1bXBzZXJpYWxubygpOwogICAgIHRvdGFsID0gbmJ5dGVzICsgNCpTU1Q7Ci0gICAgaWYgKHRvdGFsIDwgbmJ5dGVzKQotICAgICAgICAvKiBvdmVyZmxvdzogIGNhbid0IHJlcHJlc2VudCB0b3RhbCBhcyBhIHNpemVfdCAqLworICAgIGlmIChuYnl0ZXMgPiBQWV9TU0laRV9UX01BWCAtIDQqU1NUKQorICAgICAgICAvKiBvdmVyZmxvdzogIGNhbid0IHJlcHJlc2VudCB0b3RhbCBhcyBhIFB5X3NzaXplX3QgKi8KICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBwID0gKHVjaGFyICopUHlPYmplY3RfTWFsbG9jKHRvdGFsKTsKKyAgICBwID0gKHVjaGFyICopYXBpLT5hbGxvYy5tYWxsb2MoYXBpLT5hbGxvYy5jdHgsIHRvdGFsKTsKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGF0IHAsIHdyaXRlIHNpemUgKFNTVCBieXRlcyksIGlkICgxIGJ5dGUpLCBwYWQgKFNTVC0xIGJ5dGVzKSAqLwogICAgIHdyaXRlX3NpemVfdChwLCBuYnl0ZXMpOwotICAgIHBbU1NUXSA9ICh1Y2hhcilpZDsKLSAgICBtZW1zZXQocCArIFNTVCArIDEgLCBGT1JCSURERU5CWVRFLCBTU1QtMSk7CisgICAgcFtTU1RdID0gKHVjaGFyKWFwaS0+YXBpX2lkOworICAgIG1lbXNldChwICsgU1NUICsgMSwgRk9SQklEREVOQllURSwgU1NULTEpOwogCiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChwICsgMipTU1QsIENMRUFOQllURSwgbmJ5dGVzKTsKQEAgLTE0ODksNjAgKzE3ODMsNjQgQEAKICAgIFRoZW4gZmlsbHMgdGhlIG9yaWdpbmFsIGJ5dGVzIHdpdGggREVBREJZVEUuCiAgICBUaGVuIGNhbGxzIHRoZSB1bmRlcmx5aW5nIGZyZWUuCiAqLwotdm9pZAotX1B5T2JqZWN0X0RlYnVnRnJlZUFwaShjaGFyIGFwaSwgdm9pZCAqcCkKK3N0YXRpYyB2b2lkCitfUHlNZW1fRGVidWdGcmVlKHZvaWQgKmN0eCwgdm9pZCAqcCkKIHsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OwogICAgIHVjaGFyICpxID0gKHVjaGFyICopcCAtIDIqU1NUOyAgLyogYWRkcmVzcyByZXR1cm5lZCBmcm9tIG1hbGxvYyAqLwogICAgIHNpemVfdCBuYnl0ZXM7CiAKICAgICBpZiAocCA9PSBOVUxMKQogICAgICAgICByZXR1cm47Ci0gICAgX1B5T2JqZWN0X0RlYnVnQ2hlY2tBZGRyZXNzQXBpKGFwaSwgcCk7CisgICAgX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGFwaS0+YXBpX2lkLCBwKTsKICAgICBuYnl0ZXMgPSByZWFkX3NpemVfdChxKTsKICAgICBuYnl0ZXMgKz0gNCpTU1Q7CiAgICAgaWYgKG5ieXRlcyA+IDApCiAgICAgICAgIG1lbXNldChxLCBERUFEQllURSwgbmJ5dGVzKTsKLSAgICBQeU9iamVjdF9GcmVlKHEpOworICAgIGFwaS0+YWxsb2MuZnJlZShhcGktPmFsbG9jLmN0eCwgcSk7CiB9CiAKLXZvaWQgKgotX1B5T2JqZWN0X0RlYnVnUmVhbGxvY0FwaShjaGFyIGFwaSwgdm9pZCAqcCwgc2l6ZV90IG5ieXRlcykKK3N0YXRpYyB2b2lkICoKK19QeU1lbV9EZWJ1Z1JlYWxsb2Modm9pZCAqY3R4LCB2b2lkICpwLCBzaXplX3QgbmJ5dGVzKQogewotICAgIHVjaGFyICpxID0gKHVjaGFyICopcDsKKyAgICBkZWJ1Z19hbGxvY19hcGlfdCAqYXBpID0gKGRlYnVnX2FsbG9jX2FwaV90ICopY3R4OworICAgIHVjaGFyICpxID0gKHVjaGFyICopcCwgKm9sZHE7CiAgICAgdWNoYXIgKnRhaWw7CiAgICAgc2l6ZV90IHRvdGFsOyAgICAgICAvKiBuYnl0ZXMgKyA0KlNTVCAqLwogICAgIHNpemVfdCBvcmlnaW5hbF9uYnl0ZXM7CiAgICAgaW50IGk7CiAKICAgICBpZiAocCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gX1B5T2JqZWN0X0RlYnVnTWFsbG9jQXBpKGFwaSwgbmJ5dGVzKTsKKyAgICAgICAgcmV0dXJuIF9QeU1lbV9EZWJ1Z01hbGxvYyhjdHgsIG5ieXRlcyk7CiAKLSAgICBfUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoYXBpLCBwKTsKKyAgICBfUHlNZW1fRGVidWdDaGVja0FkZHJlc3MoYXBpLT5hcGlfaWQsIHApOwogICAgIGJ1bXBzZXJpYWxubygpOwogICAgIG9yaWdpbmFsX25ieXRlcyA9IHJlYWRfc2l6ZV90KHEgLSAyKlNTVCk7CiAgICAgdG90YWwgPSBuYnl0ZXMgKyA0KlNTVDsKLSAgICBpZiAodG90YWwgPCBuYnl0ZXMpCi0gICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgc2l6ZV90ICovCisgICAgaWYgKG5ieXRlcyA+IFBZX1NTSVpFX1RfTUFYIC0gNCpTU1QpCisgICAgICAgIC8qIG92ZXJmbG93OiAgY2FuJ3QgcmVwcmVzZW50IHRvdGFsIGFzIGEgUHlfc3NpemVfdCAqLwogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChuYnl0ZXMgPCBvcmlnaW5hbF9uYnl0ZXMpIHsKLSAgICAgICAgLyogc2hyaW5raW5nOiAgbWFyayBvbGQgZXh0cmEgbWVtb3J5IGRlYWQgKi8KLSAgICAgICAgbWVtc2V0KHEgKyBuYnl0ZXMsIERFQURCWVRFLCBvcmlnaW5hbF9uYnl0ZXMgLSBuYnl0ZXMgKyAyKlNTVCk7Ci0gICAgfQotCiAgICAgLyogUmVzaXplIGFuZCBhZGQgZGVjb3JhdGlvbnMuIFdlIG1heSBnZXQgYSBuZXcgcG9pbnRlciBoZXJlLCBpbiB3aGljaAogICAgICAqIGNhc2Ugd2UgZGlkbid0IGdldCB0aGUgY2hhbmNlIHRvIG1hcmsgdGhlIG9sZCBtZW1vcnkgd2l0aCBERUFEQllURSwKICAgICAgKiBidXQgd2UgbGl2ZSB3aXRoIHRoYXQuCiAgICAgICovCi0gICAgcSA9ICh1Y2hhciAqKVB5T2JqZWN0X1JlYWxsb2MocSAtIDIqU1NULCB0b3RhbCk7CisgICAgb2xkcSA9IHE7CisgICAgcSA9ICh1Y2hhciAqKWFwaS0+YWxsb2MucmVhbGxvYyhhcGktPmFsbG9jLmN0eCwgcSAtIDIqU1NULCB0b3RhbCk7CiAgICAgaWYgKHEgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKKyAgICBpZiAocSA9PSBvbGRxICYmIG5ieXRlcyA8IG9yaWdpbmFsX25ieXRlcykgeworICAgICAgICAvKiBzaHJpbmtpbmc6ICBtYXJrIG9sZCBleHRyYSBtZW1vcnkgZGVhZCAqLworICAgICAgICBtZW1zZXQocSArIG5ieXRlcywgREVBREJZVEUsIG9yaWdpbmFsX25ieXRlcyAtIG5ieXRlcyk7CisgICAgfQorCiAgICAgd3JpdGVfc2l6ZV90KHEsIG5ieXRlcyk7Ci0gICAgYXNzZXJ0KHFbU1NUXSA9PSAodWNoYXIpYXBpKTsKKyAgICBhc3NlcnQocVtTU1RdID09ICh1Y2hhcilhcGktPmFwaV9pZCk7CiAgICAgZm9yIChpID0gMTsgaSA8IFNTVDsgKytpKQogICAgICAgICBhc3NlcnQocVtTU1QgKyBpXSA9PSBGT1JCSURERU5CWVRFKTsKICAgICBxICs9IDIqU1NUOworCiAgICAgdGFpbCA9IHEgKyBuYnl0ZXM7CiAgICAgbWVtc2V0KHRhaWwsIEZPUkJJRERFTkJZVEUsIFNTVCk7CiAgICAgd3JpdGVfc2l6ZV90KHRhaWwgKyBTU1QsIHNlcmlhbG5vKTsKQEAgLTE1NjEsOCArMTg1OSw4IEBACiAgKiBhbmQgY2FsbCBQeV9GYXRhbEVycm9yIHRvIGtpbGwgdGhlIHByb2dyYW0uCiAgKiBUaGUgQVBJIGlkLCBpcyBhbHNvIGNoZWNrZWQuCiAgKi8KLSB2b2lkCi1fUHlPYmplY3RfRGVidWdDaGVja0FkZHJlc3NBcGkoY2hhciBhcGksIGNvbnN0IHZvaWQgKnApCitzdGF0aWMgdm9pZAorX1B5TWVtX0RlYnVnQ2hlY2tBZGRyZXNzKGNoYXIgYXBpLCBjb25zdCB2b2lkICpwKQogewogICAgIGNvbnN0IHVjaGFyICpxID0gKGNvbnN0IHVjaGFyICopcDsKICAgICBjaGFyIG1zZ2J1Zls2NF07CkBAIC0xNjE0LDcgKzE5MTIsNyBAQAogfQogCiAvKiBEaXNwbGF5IGluZm8gdG8gc3RkZXJyIGFib3V0IHRoZSBtZW1vcnkgYmxvY2sgYXQgcC4gKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBfUHlPYmplY3RfRGVidWdEdW1wQWRkcmVzcyhjb25zdCB2b2lkICpwKQogewogICAgIGNvbnN0IHVjaGFyICpxID0gKGNvbnN0IHVjaGFyICopcDsKZGlmZiAtLWdpdCBhL09iamVjdHMvcmFuZ2VvYmplY3QuYyBiL09iamVjdHMvcmFuZ2VvYmplY3QuYwppbmRleCBmMjAzMGMzLi5jNGJhNzE1IDEwMDY0NAotLS0gYS9PYmplY3RzL3Jhbmdlb2JqZWN0LmMKKysrIGIvT2JqZWN0cy9yYW5nZW9iamVjdC5jCkBAIC0xMzksNyArMTM5LDExIEBACiAicmFuZ2Uoc3RvcCkgLT4gcmFuZ2Ugb2JqZWN0XG5cCiByYW5nZShzdGFydCwgc3RvcFssIHN0ZXBdKSAtPiByYW5nZSBvYmplY3RcblwKIFxuXAotUmV0dXJuIGEgdmlydHVhbCBzZXF1ZW5jZSBvZiBudW1iZXJzIGZyb20gc3RhcnQgdG8gc3RvcCBieSBzdGVwLiIpOworUmV0dXJuIGFuIG9iamVjdCB0aGF0IHByb2R1Y2VzIGEgc2VxdWVuY2Ugb2YgaW50ZWdlcnMgZnJvbSBzdGFydCAoaW5jbHVzaXZlKVxuXAordG8gc3RvcCAoZXhjbHVzaXZlKSBieSBzdGVwLiAgcmFuZ2UoaSwgaikgcHJvZHVjZXMgaSwgaSsxLCBpKzIsIC4uLiwgai0xLlxuXAorc3RhcnQgZGVmYXVsdHMgdG8gMCwgYW5kIHN0b3AgaXMgb21pdHRlZCEgIHJhbmdlKDQpIHByb2R1Y2VzIDAsIDEsIDIsIDMuXG5cCitUaGVzZSBhcmUgZXhhY3RseSB0aGUgdmFsaWQgaW5kaWNlcyBmb3IgYSBsaXN0IG9mIDQgZWxlbWVudHMuXG5cCitXaGVuIHN0ZXAgaXMgZ2l2ZW4sIGl0IHNwZWNpZmllcyB0aGUgaW5jcmVtZW50IChvciBkZWNyZW1lbnQpLiIpOwogCiBzdGF0aWMgdm9pZAogcmFuZ2VfZGVhbGxvYyhyYW5nZW9iamVjdCAqcikKQEAgLTE5MCw4ICsxOTQsMTEgQEAKICAgICB9CiAKICAgICAvKiBpZiAobG8gPj0gaGkpLCByZXR1cm4gbGVuZ3RoIG9mIDAuICovCi0gICAgaWYgKFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChsbywgaGksIFB5X0dFKSA9PSAxKSB7CisgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChsbywgaGksIFB5X0dFKTsKKyAgICBpZiAoY21wX3Jlc3VsdCAhPSAwKSB7CiAgICAgICAgIFB5X1hERUNSRUYoc3RlcCk7CisgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKDApOwogICAgIH0KIApAQCAtMzE4LDE5NSArMzI1LDYgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKiBBZGRpdGlvbmFsIGhlbHBlcnMsIHNpbmNlIHRoZSBzdGFuZGFyZCBzbGljZSBoZWxwZXJzCi0gKiBhbGwgY2xpcCB0byBQWV9TU0laRV9UX01BWAotICovCi0KLS8qIFJlcGxhY2UgX1B5RXZhbF9TbGljZUluZGV4ICovCi1zdGF0aWMgUHlPYmplY3QgKgotY29tcHV0ZV9zbGljZV9lbGVtZW50KFB5T2JqZWN0ICpvYmopCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7Ci0gICAgaWYgKG9iaiAhPSBOVUxMKSB7Ci0gICAgICAgIGlmIChQeUluZGV4X0NoZWNrKG9iaikpIHsKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5TnVtYmVyX0luZGV4KG9iaik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBpbmRpY2VzIG11c3QgYmUgaW50ZWdlcnMgb3IgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOb25lIG9yIGhhdmUgYW4gX19pbmRleF9fIG1ldGhvZCIpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8qIFJlcGxhY2UgUHlTbGljZV9HZXRJbmRpY2VzRXgKLSAqICAgUmVzdWx0IGluZGljYXRlcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2xpY2UgaXMgZW1wdHkKLSAqICAgICgtMSA9IGVycm9yLCAwID0gZW1wdHkgc2xpY2UsIDEgPSBzbGljZSBjb250YWlucyBlbGVtZW50cykKLSAqLwotc3RhdGljIGludAotY29tcHV0ZV9zbGljZV9pbmRpY2VzKHJhbmdlb2JqZWN0ICpyLCBQeVNsaWNlT2JqZWN0ICpzbGljZSwKLSAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0YXJ0LCBQeU9iamVjdCAqKnN0b3AsIFB5T2JqZWN0ICoqc3RlcCkKLXsKLSAgICBpbnQgY21wX3Jlc3VsdCwgaGFzX2VsZW1lbnRzOwotICAgIFB5X3NzaXplX3QgY2xhbXBlZF9zdGVwID0gMDsKLSAgICBQeU9iamVjdCAqemVybyA9IE5VTEwsICpvbmUgPSBOVUxMLCAqbmVnX29uZSA9IE5VTEwsICpjYW5kaWRhdGUgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0bXBfc3RhcnQgPSBOVUxMLCAqdG1wX3N0b3AgPSBOVUxMLCAqdG1wX3N0ZXAgPSBOVUxMOwotICAgIHplcm8gPSBQeUxvbmdfRnJvbUxvbmcoMCk7Ci0gICAgaWYgKHplcm8gPT0gTlVMTCkgZ290byBGYWlsOwotICAgIG9uZSA9IFB5TG9uZ19Gcm9tTG9uZygxKTsKLSAgICBpZiAob25lID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICBuZWdfb25lID0gUHlMb25nX0Zyb21Mb25nKC0xKTsKLSAgICBpZiAobmVnX29uZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0KLSAgICAvKiBDYWxjdWxhdGUgc3RlcCB2YWx1ZSAqLwotICAgIGlmIChzbGljZS0+c3RlcCA9PSBQeV9Ob25lKSB7Ci0gICAgICAgIGNsYW1wZWRfc3RlcCA9IDE7Ci0gICAgICAgIHRtcF9zdGVwID0gb25lOwotICAgICAgICBQeV9JTkNSRUYodG1wX3N0ZXApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghX1B5RXZhbF9TbGljZUluZGV4KHNsaWNlLT5zdGVwLCAmY2xhbXBlZF9zdGVwKSkgZ290byBGYWlsOwotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwID09IDApIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbGljZSBzdGVwIGNhbm5vdCBiZSB6ZXJvIik7Ci0gICAgICAgICAgICBnb3RvIEZhaWw7Ci0gICAgICAgIH0KLSAgICAgICAgdG1wX3N0ZXAgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0ZXApOwotICAgICAgICBpZiAodG1wX3N0ZXAgPT0gTlVMTCkgZ290byBGYWlsOwotICAgIH0KLQotICAgIC8qIENhbGN1bGF0ZSBzdGFydCB2YWx1ZSAqLwotICAgIGlmIChzbGljZS0+c3RhcnQgPT0gUHlfTm9uZSkgewotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgdG1wX3N0YXJ0ID0gUHlOdW1iZXJfU3VidHJhY3Qoci0+bGVuZ3RoLCBvbmUpOwotICAgICAgICAgICAgaWYgKHRtcF9zdGFydCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB0bXBfc3RhcnQgPSB6ZXJvOwotICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjYW5kaWRhdGUgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0YXJ0KTsKLSAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woY2FuZGlkYXRlLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiBjYW5kaWRhdGUgPCAwICovCi0gICAgICAgICAgICB0bXBfc3RhcnQgPSBQeU51bWJlcl9BZGQoci0+bGVuZ3RoLCBjYW5kaWRhdGUpOwotICAgICAgICAgICAgaWYgKHRtcF9zdGFydCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBQeV9DTEVBUihjYW5kaWRhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlID49IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdGFydCA9IGNhbmRpZGF0ZTsKLSAgICAgICAgICAgIGNhbmRpZGF0ZSA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdGFydCA8IDAgKi8KLSAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IG5lZ19vbmU7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IHplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0YXJ0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qIHRtcF9zdGFydCA+PSAwICovCi0gICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgci0+bGVuZ3RoLCBQeV9HRSk7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvKiB0bXBfc3RhcnQgPj0gci0+bGVuZ3RoICovCi0gICAgICAgICAgICAgICAgUHlfQ0xFQVIodG1wX3N0YXJ0KTsKLSAgICAgICAgICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgICAgICAgICB0bXBfc3RhcnQgPSBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW5ndGgsIG9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBfc3RhcnQgPT0gTlVMTCkgZ290byBGYWlsOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHRtcF9zdGFydCA9IHItPmxlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRtcF9zdGFydCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ2FsY3VsYXRlIHN0b3AgdmFsdWUgKi8KLSAgICBpZiAoc2xpY2UtPnN0b3AgPT0gUHlfTm9uZSkgewotICAgICAgICBpZiAoY2xhbXBlZF9zdGVwIDwgMCkgewotICAgICAgICAgICAgdG1wX3N0b3AgPSBuZWdfb25lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdG1wX3N0b3AgPSByLT5sZW5ndGg7Ci0gICAgICAgIH0KLSAgICAgICAgUHlfSU5DUkVGKHRtcF9zdG9wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjYW5kaWRhdGUgPSBjb21wdXRlX3NsaWNlX2VsZW1lbnQoc2xpY2UtPnN0b3ApOwotICAgICAgICBpZiAoY2FuZGlkYXRlID09IE5VTEwpIGdvdG8gRmFpbDsKLSAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChjYW5kaWRhdGUsIHplcm8sIFB5X0xUKTsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQgPT0gLTEpIGdvdG8gRmFpbDsKLSAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgIC8qIGNhbmRpZGF0ZSA8IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdG9wID0gUHlOdW1iZXJfQWRkKHItPmxlbmd0aCwgY2FuZGlkYXRlKTsKLSAgICAgICAgICAgIGlmICh0bXBfc3RvcCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICBQeV9DTEVBUihjYW5kaWRhdGUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogY2FuZGlkYXRlID49IDAgKi8KLSAgICAgICAgICAgIHRtcF9zdG9wID0gY2FuZGlkYXRlOwotICAgICAgICAgICAgY2FuZGlkYXRlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdG9wLCB6ZXJvLCBQeV9MVCk7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0ID09IC0xKSBnb3RvIEZhaWw7Ci0gICAgICAgIGlmIChjbXBfcmVzdWx0KSB7Ci0gICAgICAgICAgICAvKiB0bXBfc3RvcCA8IDAgKi8KLSAgICAgICAgICAgIFB5X0NMRUFSKHRtcF9zdG9wKTsKLSAgICAgICAgICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgICAgICAgICAgdG1wX3N0b3AgPSBuZWdfb25lOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB0bXBfc3RvcCA9IHplcm87Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYodG1wX3N0b3ApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogdG1wX3N0b3AgPj0gMCAqLwotICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RvcCwgci0+bGVuZ3RoLCBQeV9HRSk7Ci0gICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA9PSAtMSkgZ290byBGYWlsOwotICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICAvKiB0bXBfc3RvcCA+PSByLT5sZW5ndGggKi8KLSAgICAgICAgICAgICAgICBQeV9DTEVBUih0bXBfc3RvcCk7Ci0gICAgICAgICAgICAgICAgaWYgKGNsYW1wZWRfc3RlcCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0b3AgPSBQeU51bWJlcl9TdWJ0cmFjdChyLT5sZW5ndGgsIG9uZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0bXBfc3RvcCA9PSBOVUxMKSBnb3RvIEZhaWw7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgdG1wX3N0b3AgPSByLT5sZW5ndGg7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih0bXBfc3RvcCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyogQ2hlY2sgaWYgdGhlIHNsaWNlIGlzIGVtcHR5IG9yIG5vdCAqLwotICAgIGlmIChjbGFtcGVkX3N0ZXAgPCAwKSB7Ci0gICAgICAgIGhhc19lbGVtZW50cyA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCh0bXBfc3RhcnQsIHRtcF9zdG9wLCBQeV9HVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaGFzX2VsZW1lbnRzID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHRtcF9zdGFydCwgdG1wX3N0b3AsIFB5X0xUKTsKLSAgICB9Ci0gICAgaWYgKGhhc19lbGVtZW50cyA9PSAtMSkgZ290byBGYWlsOwotCi0gICAgKnN0YXJ0ID0gdG1wX3N0YXJ0OwotICAgICpzdG9wID0gdG1wX3N0b3A7Ci0gICAgKnN0ZXAgPSB0bXBfc3RlcDsKLSAgICBQeV9ERUNSRUYobmVnX29uZSk7Ci0gICAgUHlfREVDUkVGKG9uZSk7Ci0gICAgUHlfREVDUkVGKHplcm8pOwotICAgIHJldHVybiBoYXNfZWxlbWVudHM7Ci0KLSAgRmFpbDoKLSAgICBQeV9YREVDUkVGKHRtcF9zdGFydCk7Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RvcCk7Ci0gICAgUHlfWERFQ1JFRih0bXBfc3RlcCk7Ci0gICAgUHlfWERFQ1JFRihjYW5kaWRhdGUpOwotICAgIFB5X1hERUNSRUYobmVnX29uZSk7Ci0gICAgUHlfWERFQ1JFRihvbmUpOwotICAgIFB5X1hERUNSRUYoemVybyk7Ci0gICAgcmV0dXJuIC0xOwotfQotCiBzdGF0aWMgUHlPYmplY3QgKgogY29tcHV0ZV9zbGljZShyYW5nZW9iamVjdCAqciwgUHlPYmplY3QgKl9zbGljZSkKIHsKQEAgLTUxNCwxMCArMzMyLDExIEBACiAgICAgcmFuZ2VvYmplY3QgKnJlc3VsdDsKICAgICBQeU9iamVjdCAqc3RhcnQgPSBOVUxMLCAqc3RvcCA9IE5VTEwsICpzdGVwID0gTlVMTDsKICAgICBQeU9iamVjdCAqc3Vic3RhcnQgPSBOVUxMLCAqc3Vic3RvcCA9IE5VTEwsICpzdWJzdGVwID0gTlVMTDsKLSAgICBpbnQgaGFzX2VsZW1lbnRzOworICAgIGludCBlcnJvcjsKIAotICAgIGhhc19lbGVtZW50cyA9IGNvbXB1dGVfc2xpY2VfaW5kaWNlcyhyLCBzbGljZSwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOwotICAgIGlmIChoYXNfZWxlbWVudHMgPT0gLTEpIHJldHVybiBOVUxMOworICAgIGVycm9yID0gX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoc2xpY2UsIHItPmxlbmd0aCwgJnN0YXJ0LCAmc3RvcCwgJnN0ZXApOworICAgIGlmIChlcnJvciA9PSAtMSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBzdWJzdGVwID0gUHlOdW1iZXJfTXVsdGlwbHkoci0+c3RlcCwgc3RlcCk7CiAgICAgaWYgKHN1YnN0ZXAgPT0gTlVMTCkgZ290byBmYWlsOwpAQCAtNTI3LDEzICszNDYsOCBAQAogICAgIGlmIChzdWJzdGFydCA9PSBOVUxMKSBnb3RvIGZhaWw7CiAgICAgUHlfQ0xFQVIoc3RhcnQpOwogCi0gICAgaWYgKGhhc19lbGVtZW50cykgewotICAgICAgICBzdWJzdG9wID0gY29tcHV0ZV9pdGVtKHIsIHN0b3ApOwotICAgICAgICBpZiAoc3Vic3RvcCA9PSBOVUxMKSBnb3RvIGZhaWw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3Vic3RvcCA9IHN1YnN0YXJ0OwotICAgICAgICBQeV9JTkNSRUYoc3Vic3RvcCk7Ci0gICAgfQorICAgIHN1YnN0b3AgPSBjb21wdXRlX2l0ZW0ociwgc3RvcCk7CisgICAgaWYgKHN1YnN0b3AgPT0gTlVMTCkgZ290byBmYWlsOwogICAgIFB5X0NMRUFSKHN0b3ApOwogCiAgICAgcmVzdWx0ID0gbWFrZV9yYW5nZV9vYmplY3QoUHlfVFlQRShyKSwgc3Vic3RhcnQsIHN1YnN0b3AsIHN1YnN0ZXApOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zZXRvYmplY3QuYyBiL09iamVjdHMvc2V0b2JqZWN0LmMKaW5kZXggZmMxN2ZhNS4uNjFmMWQ5NCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zZXRvYmplY3QuYworKysgYi9PYmplY3RzL3NldG9iamVjdC5jCkBAIC0xLDE1MSArMSwxMTUgQEAKIAogLyogc2V0IG9iamVjdCBpbXBsZW1lbnRhdGlvbgorCiAgICBXcml0dGVuIGFuZCBtYWludGFpbmVkIGJ5IFJheW1vbmQgRC4gSGV0dGluZ2VyIDxweXRob25AcmNuLmNvbT4KICAgIERlcml2ZWQgZnJvbSBMaWIvc2V0cy5weSBhbmQgT2JqZWN0cy9kaWN0b2JqZWN0LmMuCisKKyAgIFRoZSBiYXNpYyBsb29rdXAgZnVuY3Rpb24gdXNlZCBieSBhbGwgb3BlcmF0aW9ucy4KKyAgIFRoaXMgaXMgYmFzZWQgb24gQWxnb3JpdGhtIEQgZnJvbSBLbnV0aCBWb2wuIDMsIFNlYy4gNi40LgorCisgICBUaGUgaW5pdGlhbCBwcm9iZSBpbmRleCBpcyBjb21wdXRlZCBhcyBoYXNoIG1vZCB0aGUgdGFibGUgc2l6ZS4KKyAgIFN1YnNlcXVlbnQgcHJvYmUgaW5kaWNlcyBhcmUgY29tcHV0ZWQgYXMgZXhwbGFpbmVkIGluIE9iamVjdHMvZGljdG9iamVjdC5jLgorCisgICBUbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5LCBlYWNoIHByb2JlIGluc3BlY3RzIGEgc2VyaWVzIG9mIGNvbnNlY3V0aXZlCisgICBuZWFyYnkgZW50cmllcyBiZWZvcmUgbW92aW5nIG9uIHRvIHByb2JlcyBlbHNld2hlcmUgaW4gbWVtb3J5LiAgVGhpcyBsZWF2ZXMKKyAgIHVzIHdpdGggYSBoeWJyaWQgb2YgbGluZWFyIHByb2JpbmcgYW5kIG9wZW4gYWRkcmVzc2luZy4gIFRoZSBsaW5lYXIgcHJvYmluZworICAgcmVkdWNlcyB0aGUgY29zdCBvZiBoYXNoIGNvbGxpc2lvbnMgYmVjYXVzZSBjb25zZWN1dGl2ZSBtZW1vcnkgYWNjZXNzZXMKKyAgIHRlbmQgdG8gYmUgbXVjaCBjaGVhcGVyIHRoYW4gc2NhdHRlcmVkIHByb2Jlcy4gIEFmdGVyIExJTkVBUl9QUk9CRVMgc3RlcHMsCisgICB3ZSB0aGVuIHVzZSBvcGVuIGFkZHJlc3Npbmcgd2l0aCB0aGUgdXBwZXIgYml0cyBmcm9tIHRoZSBoYXNoIHZhbHVlLiAgVGhpcworICAgaGVscHMgYnJlYWstdXAgbG9uZyBjaGFpbnMgb2YgY29sbGlzaW9ucy4KKworICAgQWxsIGFyaXRobWV0aWMgb24gaGFzaCBzaG91bGQgaWdub3JlIG92ZXJmbG93LgorCisgICBVbmxpa2UgdGhlIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb24sIHRoZSBsb29ra2V5IGZ1bmN0aW9ucyBjYW4gcmV0dXJuCisgICBOVUxMIGlmIHRoZSByaWNoIGNvbXBhcmlzb24gcmV0dXJucyBhbiBlcnJvci4KICovCiAKICNpbmNsdWRlICJQeXRob24uaCIKICNpbmNsdWRlICJzdHJ1Y3RtZW1iZXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZXEuaCIKIAotLyogU2V0IGEga2V5IGVycm9yIHdpdGggdGhlIHNwZWNpZmllZCBhcmd1bWVudCwgd3JhcHBpbmcgaXQgaW4gYQotICogdHVwbGUgYXV0b21hdGljYWxseSBzbyB0aGF0IHR1cGxlIGtleXMgYXJlIG5vdCB1bnBhY2tlZCBhcyB0aGUKLSAqIGV4Y2VwdGlvbiBhcmd1bWVudHMuICovCi1zdGF0aWMgdm9pZAotc2V0X2tleV9lcnJvcihQeU9iamVjdCAqYXJnKQotewotICAgIFB5T2JqZWN0ICp0dXA7Ci0gICAgdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7Ci0gICAgaWYgKCF0dXApCi0gICAgICAgIHJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KLSAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7Ci0gICAgUHlfREVDUkVGKHR1cCk7Ci19CisvKiBPYmplY3QgdXNlZCBhcyBkdW1teSBrZXkgdG8gZmlsbCBkZWxldGVkIGVudHJpZXMgKi8KK3N0YXRpYyBQeU9iamVjdCBfZHVtbXlfc3RydWN0OwogCi0vKiBUaGlzIG11c3QgYmUgPj0gMS4gKi8KKyNkZWZpbmUgZHVtbXkgKCZfZHVtbXlfc3RydWN0KQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PSBCZWdpbiBsb2dpYyBmb3IgcHJvYmluZyB0aGUgaGFzaCB0YWJsZSA9PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIFNldCB0aGlzIHRvIHplcm8gdG8gdHVybi1vZmYgbGluZWFyIHByb2JpbmcgKi8KKyNpZm5kZWYgTElORUFSX1BST0JFUworI2RlZmluZSBMSU5FQVJfUFJPQkVTIDkKKyNlbmRpZgorCisvKiBUaGlzIG11c3QgYmUgPj0gMSAqLwogI2RlZmluZSBQRVJUVVJCX1NISUZUIDUKIAotLyogT2JqZWN0IHVzZWQgYXMgZHVtbXkga2V5IHRvIGZpbGwgZGVsZXRlZCBlbnRyaWVzICovCi1zdGF0aWMgUHlPYmplY3QgKmR1bW15ID0gTlVMTDsgLyogSW5pdGlhbGl6ZWQgYnkgZmlyc3QgY2FsbCB0byBtYWtlX25ld19zZXQoKSAqLwotCi0jaWZkZWYgUHlfUkVGX0RFQlVHCi1QeU9iamVjdCAqCi1fUHlTZXRfRHVtbXkodm9pZCkKLXsKLSAgICByZXR1cm4gZHVtbXk7Ci19Ci0jZW5kaWYKLQotI2RlZmluZSBJTklUX05PTlpFUk9fU0VUX1NMT1RTKHNvKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoc28pLT50YWJsZSA9IChzbyktPnNtYWxsdGFibGU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKHNvKS0+bWFzayA9IFB5U2V0X01JTlNJWkUgLSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIChzbyktPmhhc2ggPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IHdoaWxlKDApCi0KLSNkZWZpbmUgRU1QVFlfVE9fTUlOU0laRShzbykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgbWVtc2V0KChzbyktPnNtYWxsdGFibGUsIDAsIHNpemVvZigoc28pLT5zbWFsbHRhYmxlKSk7ICAgICAgXAotICAgIChzbyktPnVzZWQgPSAoc28pLT5maWxsID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBJTklUX05PTlpFUk9fU0VUX1NMT1RTKHNvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKQotCi0vKiBSZXVzZSBzY2hlbWUgdG8gc2F2ZSBjYWxscyB0byBtYWxsb2MsIGZyZWUsIGFuZCBtZW1zZXQgKi8KLSNpZm5kZWYgUHlTZXRfTUFYRlJFRUxJU1QKLSNkZWZpbmUgUHlTZXRfTUFYRlJFRUxJU1QgODAKLSNlbmRpZgotc3RhdGljIFB5U2V0T2JqZWN0ICpmcmVlX2xpc3RbUHlTZXRfTUFYRlJFRUxJU1RdOwotc3RhdGljIGludCBudW1mcmVlID0gMDsKLQotCi0vKgotVGhlIGJhc2ljIGxvb2t1cCBmdW5jdGlvbiB1c2VkIGJ5IGFsbCBvcGVyYXRpb25zLgotVGhpcyBpcyBiYXNlZCBvbiBBbGdvcml0aG0gRCBmcm9tIEtudXRoIFZvbC4gMywgU2VjLiA2LjQuCi1PcGVuIGFkZHJlc3NpbmcgaXMgcHJlZmVycmVkIG92ZXIgY2hhaW5pbmcgc2luY2UgdGhlIGxpbmsgb3ZlcmhlYWQgZm9yCi1jaGFpbmluZyB3b3VsZCBiZSBzdWJzdGFudGlhbCAoMTAwJSB3aXRoIHR5cGljYWwgbWFsbG9jIG92ZXJoZWFkKS4KLQotVGhlIGluaXRpYWwgcHJvYmUgaW5kZXggaXMgY29tcHV0ZWQgYXMgaGFzaCBtb2QgdGhlIHRhYmxlIHNpemUuIFN1YnNlcXVlbnQKLXByb2JlIGluZGljZXMgYXJlIGNvbXB1dGVkIGFzIGV4cGxhaW5lZCBpbiBPYmplY3RzL2RpY3RvYmplY3QuYy4KLQotQWxsIGFyaXRobWV0aWMgb24gaGFzaCBzaG91bGQgaWdub3JlIG92ZXJmbG93LgotCi1Vbmxpa2UgdGhlIGRpY3Rpb25hcnkgaW1wbGVtZW50YXRpb24sIHRoZSBsb29ra2V5IGZ1bmN0aW9ucyBjYW4gcmV0dXJuCi1OVUxMIGlmIHRoZSByaWNoIGNvbXBhcmlzb24gcmV0dXJucyBhbiBlcnJvci4KLSovCi0KIHN0YXRpYyBzZXRlbnRyeSAqCi1zZXRfbG9va2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIHJlZ2lzdGVyIFB5X2hhc2hfdCBoYXNoKQorc2V0X2xvb2trZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IHNvLT5tYXNrOwogICAgIHNldGVudHJ5ICp0YWJsZSA9IHNvLT50YWJsZTsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7Ci0gICAgcmVnaXN0ZXIgaW50IGNtcDsKLSAgICBQeU9iamVjdCAqc3RhcnRrZXk7CisgICAgc2V0ZW50cnkgKmZyZWVzbG90ID0gTlVMTDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CisgICAgc2l6ZV90IHBlcnR1cmIgPSBoYXNoOworICAgIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CisgICAgc2l6ZV90IGkgPSAoc2l6ZV90KWhhc2g7IC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLworICAgIHNpemVfdCBqOworICAgIGludCBjbXA7CiAKLSAgICBpID0gKHNpemVfdCloYXNoICYgbWFzazsKLSAgICBlbnRyeSA9ICZ0YWJsZVtpXTsKLSAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMIHx8IGVudHJ5LT5rZXkgPT0ga2V5KQorICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gZW50cnk7CiAKLSAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSkKLSAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKLSAgICBlbHNlIHsKLSAgICAgICAgaWYgKGVudHJ5LT5oYXNoID09IGhhc2gpIHsKLSAgICAgICAgICAgIHN0YXJ0a2V5ID0gZW50cnktPmtleTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkpCisgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgIGlmIChlbnRyeS0+aGFzaCA9PSBoYXNoICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydGtleSA9IGVudHJ5LT5rZXk7CiAgICAgICAgICAgICBQeV9JTkNSRUYoc3RhcnRrZXkpOwogICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0a2V5LCBrZXksIFB5X0VRKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydGtleSk7CiAgICAgICAgICAgICBpZiAoY21wIDwgMCkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YWJsZSA9PSBzby0+dGFibGUgJiYgZW50cnktPmtleSA9PSBzdGFydGtleSkgeworICAgICAgICAgICAgaWYgKHRhYmxlICE9IHNvLT50YWJsZSB8fCBlbnRyeS0+a2V5ICE9IHN0YXJ0a2V5KQorICAgICAgICAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQorICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKworICAgICAgICBmb3IgKGogPSAxIDsgaiA8PSBMSU5FQVJfUFJPQkVTIDsgaisrKSB7CisgICAgICAgICAgICBlbnRyeSA9ICZ0YWJsZVsoaSArIGopICYgbWFza107CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0YXJ0a2V5ID0gZW50cnktPmtleTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYoc3RhcnRrZXkpOworICAgICAgICAgICAgICAgIGNtcCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdGFydGtleSwga2V5LCBQeV9FUSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0a2V5KTsKKyAgICAgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlICE9IHNvLT50YWJsZSB8fCBlbnRyeS0+a2V5ICE9IHN0YXJ0a2V5KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0X2xvb2trZXkoc28sIGtleSwgaGFzaCk7CiAgICAgICAgICAgICAgICAgaWYgKGNtcCA+IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIFRoZSBjb21wYXJlIGRpZCBtYWpvciBuYXN0eSBzdHVmZiB0byB0aGUKLSAgICAgICAgICAgICAgICAgKiBzZXQ6ICBzdGFydCBvdmVyLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKICAgICAgICAgfQotICAgICAgICBmcmVlc2xvdCA9IE5VTEw7Ci0gICAgfQogCi0gICAgLyogSW4gdGhlIGxvb3AsIGtleSA9PSBkdW1teSBpcyBieSBmYXIgKGZhY3RvciBvZiAxMDBzKSB0aGUKLSAgICAgICBsZWFzdCBsaWtlbHkgb3V0Y29tZSwgc28gdGVzdCBmb3IgdGhhdCBsYXN0LiAqLwotICAgIGZvciAocGVydHVyYiA9IGhhc2g7IDsgcGVydHVyYiA+Pj0gUEVSVFVSQl9TSElGVCkgewotICAgICAgICBpID0gKGkgPDwgMikgKyBpICsgcGVydHVyYiArIDE7CisgICAgICAgIHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQ7CisgICAgICAgIGkgPSBpICogNSArIDEgKyBwZXJ0dXJiOworCiAgICAgICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKLSAgICAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKGZyZWVzbG90ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgZW50cnkgPSBmcmVlc2xvdDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7Ci0gICAgICAgICAgICBzdGFydGtleSA9IGVudHJ5LT5rZXk7Ci0gICAgICAgICAgICBQeV9JTkNSRUYoc3RhcnRrZXkpOwotICAgICAgICAgICAgY21wID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0a2V5LCBrZXksIFB5X0VRKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydGtleSk7Ci0gICAgICAgICAgICBpZiAoY21wIDwgMCkKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIGlmICh0YWJsZSA9PSBzby0+dGFibGUgJiYgZW50cnktPmtleSA9PSBzdGFydGtleSkgewotICAgICAgICAgICAgICAgIGlmIChjbXAgPiAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIC8qIFRoZSBjb21wYXJlIGRpZCBtYWpvciBuYXN0eSBzdHVmZiB0byB0aGUKLSAgICAgICAgICAgICAgICAgKiBzZXQ6ICBzdGFydCBvdmVyLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChlbnRyeS0+a2V5ID09IGR1bW15ICYmIGZyZWVzbG90ID09IE5VTEwpCi0gICAgICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OworICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOwogICAgIH0KLSAgICByZXR1cm4gZW50cnk7CisgIGZvdW5kX251bGw6CisgICAgcmV0dXJuIGZyZWVzbG90ID09IE5VTEwgPyBlbnRyeSA6IGZyZWVzbG90OwogfQogCiAvKgpAQCAtMTU0LDE0ICsxMTgsMTUgQEAKICAqIHNlZSBpZiB0aGUgY29tcGFyaXNvbiBhbHRlcmVkIHRoZSB0YWJsZS4KICAqLwogc3RhdGljIHNldGVudHJ5ICoKLXNldF9sb29ra2V5X3VuaWNvZGUoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCByZWdpc3RlciBQeV9oYXNoX3QgaGFzaCkKK3NldF9sb29ra2V5X3VuaWNvZGUoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKIHsKLSAgICByZWdpc3RlciBzaXplX3QgaTsgIC8qIFVuc2lnbmVkIGZvciBkZWZpbmVkIG92ZXJmbG93IGJlaGF2aW9yLiAqLwotICAgIHJlZ2lzdGVyIHNpemVfdCBwZXJ0dXJiOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICpmcmVlc2xvdDsKLSAgICByZWdpc3RlciBzaXplX3QgbWFzayA9IHNvLT5tYXNrOwogICAgIHNldGVudHJ5ICp0YWJsZSA9IHNvLT50YWJsZTsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgc2V0ZW50cnkgKmZyZWVzbG90ID0gTlVMTDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CisgICAgc2l6ZV90IHBlcnR1cmIgPSBoYXNoOworICAgIHNpemVfdCBtYXNrID0gc28tPm1hc2s7CisgICAgc2l6ZV90IGkgPSAoc2l6ZV90KWhhc2g7CisgICAgc2l6ZV90IGo7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IGhhdmUgdG8gaGFuZGxlIG5vbi11bmljb2RlIGtleXMsCiAgICAgICAgaW5jbHVkaW5nIHN1YmNsYXNzZXMgb2Ygc3RyOyBlLmcuLCBvbmUgcmVhc29uIHRvIHN1YmNsYXNzCkBAIC0xNzEsNDYgKzEzNiw5NCBAQAogICAgICAgICBzby0+bG9va3VwID0gc2V0X2xvb2trZXk7CiAgICAgICAgIHJldHVybiBzZXRfbG9va2tleShzbywga2V5LCBoYXNoKTsKICAgICB9Ci0gICAgaSA9IChzaXplX3QpaGFzaCAmIG1hc2s7Ci0gICAgZW50cnkgPSAmdGFibGVbaV07Ci0gICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCB8fCBlbnRyeS0+a2V5ID09IGtleSkKLSAgICAgICAgcmV0dXJuIGVudHJ5OwotICAgIGlmIChlbnRyeS0+a2V5ID09IGR1bW15KQotICAgICAgICBmcmVlc2xvdCA9IGVudHJ5OwotICAgIGVsc2UgewotICAgICAgICBpZiAoZW50cnktPmhhc2ggPT0gaGFzaCAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpCi0gICAgICAgICAgICByZXR1cm4gZW50cnk7Ci0gICAgICAgIGZyZWVzbG90ID0gTlVMTDsKLSAgICB9CiAKLSAgICAvKiBJbiB0aGUgbG9vcCwga2V5ID09IGR1bW15IGlzIGJ5IGZhciAoZmFjdG9yIG9mIDEwMHMpIHRoZQotICAgICAgIGxlYXN0IGxpa2VseSBvdXRjb21lLCBzbyB0ZXN0IGZvciB0aGF0IGxhc3QuICovCi0gICAgZm9yIChwZXJ0dXJiID0gaGFzaDsgOyBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUKSB7Ci0gICAgICAgIGkgPSAoaSA8PCAyKSArIGkgKyBwZXJ0dXJiICsgMTsKLSAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOwotICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIGZyZWVzbG90ID09IE5VTEwgPyBlbnRyeSA6IGZyZWVzbG90OworICAgIGVudHJ5ID0gJnRhYmxlW2kgJiBtYXNrXTsKKyAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gZW50cnk7CisKKyAgICB3aGlsZSAoMSkgewogICAgICAgICBpZiAoZW50cnktPmtleSA9PSBrZXkKICAgICAgICAgICAgIHx8IChlbnRyeS0+aGFzaCA9PSBoYXNoCi0gICAgICAgICAgICAmJiBlbnRyeS0+a2V5ICE9IGR1bW15Ci0gICAgICAgICAgICAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpKQorICAgICAgICAgICAgICAgICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkKKyAgICAgICAgICAgICAgICAmJiB1bmljb2RlX2VxKGVudHJ5LT5rZXksIGtleSkpKQogICAgICAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQogICAgICAgICAgICAgZnJlZXNsb3QgPSBlbnRyeTsKKworICAgICAgICBmb3IgKGogPSAxIDsgaiA8PSBMSU5FQVJfUFJPQkVTIDsgaisrKSB7CisgICAgICAgICAgICBlbnRyeSA9ICZ0YWJsZVsoaSArIGopICYgbWFza107CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IGtleQorICAgICAgICAgICAgICAgIHx8IChlbnRyeS0+aGFzaCA9PSBoYXNoCisgICAgICAgICAgICAgICAgICAgICYmIGVudHJ5LT5rZXkgIT0gZHVtbXkKKyAgICAgICAgICAgICAgICAgICAgJiYgdW5pY29kZV9lcShlbnRyeS0+a2V5LCBrZXkpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZW50cnk7CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBkdW1teSAmJiBmcmVlc2xvdCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGZyZWVzbG90ID0gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUOworICAgICAgICBpID0gaSAqIDUgKyAxICsgcGVydHVyYjsKKworICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107CisgICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZvdW5kX251bGw7CiAgICAgfQotICAgIGFzc2VydCgwKTsgICAgICAgICAgLyogTk9UIFJFQUNIRUQgKi8KLSAgICByZXR1cm4gMDsKKyAgZm91bmRfbnVsbDoKKyAgICByZXR1cm4gZnJlZXNsb3QgPT0gTlVMTCA/IGVudHJ5IDogZnJlZXNsb3Q7CiB9CiAKIC8qCitJbnRlcm5hbCByb3V0aW5lIHVzZWQgYnkgc2V0X3RhYmxlX3Jlc2l6ZSgpIHRvIGluc2VydCBhbiBpdGVtIHdoaWNoIGlzCitrbm93biB0byBiZSBhYnNlbnQgZnJvbSB0aGUgc2V0LiAgVGhpcyByb3V0aW5lIGFsc28gYXNzdW1lcyB0aGF0Cit0aGUgc2V0IGNvbnRhaW5zIG5vIGRlbGV0ZWQgZW50cmllcy4gIEJlc2lkZXMgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQsCit1c2luZyBzZXRfaW5zZXJ0X2NsZWFuKCkgaW4gc2V0X3RhYmxlX3Jlc2l6ZSgpIGlzIGRhbmdlcm91cyAoU0YgYnVnICMxNDU2MjA5KS4KK05vdGUgdGhhdCBubyByZWZjb3VudHMgYXJlIGNoYW5nZWQgYnkgdGhpcyByb3V0aW5lOyBpZiBuZWVkZWQsIHRoZSBjYWxsZXIKK2lzIHJlc3BvbnNpYmxlIGZvciBpbmNyZWYnaW5nIGBrZXlgLgorKi8KK3N0YXRpYyB2b2lkCitzZXRfaW5zZXJ0X2NsZWFuKFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCit7CisgICAgc2V0ZW50cnkgKnRhYmxlID0gc28tPnRhYmxlOworICAgIHNldGVudHJ5ICplbnRyeTsKKyAgICBzaXplX3QgcGVydHVyYiA9IGhhc2g7CisgICAgc2l6ZV90IG1hc2sgPSAoc2l6ZV90KXNvLT5tYXNrOworICAgIHNpemVfdCBpID0gKHNpemVfdCloYXNoOworICAgIHNpemVfdCBqOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgZW50cnkgPSAmdGFibGVbaSAmIG1hc2tdOworICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBmb3VuZF9udWxsOworICAgICAgICBmb3IgKGogPSAxIDsgaiA8PSBMSU5FQVJfUFJPQkVTIDsgaisrKSB7CisgICAgICAgICAgICBlbnRyeSA9ICZ0YWJsZVsoaSArIGopICYgbWFza107CisgICAgICAgICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZm91bmRfbnVsbDsKKyAgICAgICAgfQorICAgICAgICBwZXJ0dXJiID4+PSBQRVJUVVJCX1NISUZUOworICAgICAgICBpID0gaSAqIDUgKyAxICsgcGVydHVyYjsKKyAgICB9CisgIGZvdW5kX251bGw6CisgICAgZW50cnktPmtleSA9IGtleTsKKyAgICBlbnRyeS0+aGFzaCA9IGhhc2g7CisgICAgc28tPmZpbGwrKzsKKyAgICBzby0+dXNlZCsrOworfQorCisvKiA9PT09PT09PSBFbmQgbG9naWMgZm9yIHByb2JpbmcgdGhlIGhhc2ggdGFibGUgPT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCisKKy8qCiBJbnRlcm5hbCByb3V0aW5lIHRvIGluc2VydCBhIG5ldyBrZXkgaW50byB0aGUgdGFibGUuCiBVc2VkIGJ5IHRoZSBwdWJsaWMgaW5zZXJ0IHJvdXRpbmUuCiBFYXRzIGEgcmVmZXJlbmNlIHRvIGtleS4KICovCiBzdGF0aWMgaW50Ci1zZXRfaW5zZXJ0X2tleShyZWdpc3RlciBQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXksIFB5X2hhc2hfdCBoYXNoKQorc2V0X2luc2VydF9rZXkoUHlTZXRPYmplY3QgKnNvLCBQeU9iamVjdCAqa2V5LCBQeV9oYXNoX3QgaGFzaCkKIHsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogCiAgICAgYXNzZXJ0KHNvLT5sb29rdXAgIT0gTlVMTCk7CiAgICAgZW50cnkgPSBzby0+bG9va3VwKHNvLCBrZXksIGhhc2gpOwpAQCAtMjI3LDcgKzI0MCw2IEBACiAgICAgICAgIGVudHJ5LT5rZXkgPSBrZXk7CiAgICAgICAgIGVudHJ5LT5oYXNoID0gaGFzaDsKICAgICAgICAgc28tPnVzZWQrKzsKLSAgICAgICAgUHlfREVDUkVGKGR1bW15KTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBBQ1RJVkUgKi8KICAgICAgICAgUHlfREVDUkVGKGtleSk7CkBAIC0yMzYsMzUgKzI0OCw2IEBACiB9CiAKIC8qCi1JbnRlcm5hbCByb3V0aW5lIHVzZWQgYnkgc2V0X3RhYmxlX3Jlc2l6ZSgpIHRvIGluc2VydCBhbiBpdGVtIHdoaWNoIGlzCi1rbm93biB0byBiZSBhYnNlbnQgZnJvbSB0aGUgc2V0LiAgVGhpcyByb3V0aW5lIGFsc28gYXNzdW1lcyB0aGF0Ci10aGUgc2V0IGNvbnRhaW5zIG5vIGRlbGV0ZWQgZW50cmllcy4gIEJlc2lkZXMgdGhlIHBlcmZvcm1hbmNlIGJlbmVmaXQsCi11c2luZyBzZXRfaW5zZXJ0X2NsZWFuKCkgaW4gc2V0X3RhYmxlX3Jlc2l6ZSgpIGlzIGRhbmdlcm91cyAoU0YgYnVnICMxNDU2MjA5KS4KLU5vdGUgdGhhdCBubyByZWZjb3VudHMgYXJlIGNoYW5nZWQgYnkgdGhpcyByb3V0aW5lOyBpZiBuZWVkZWQsIHRoZSBjYWxsZXIKLWlzIHJlc3BvbnNpYmxlIGZvciBpbmNyZWYnaW5nIGBrZXlgLgotKi8KLXN0YXRpYyB2b2lkCi1zZXRfaW5zZXJ0X2NsZWFuKHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSwgUHlfaGFzaF90IGhhc2gpCi17Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IHBlcnR1cmI7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IG1hc2sgPSAoc2l6ZV90KXNvLT5tYXNrOwotICAgIHNldGVudHJ5ICp0YWJsZSA9IHNvLT50YWJsZTsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7Ci0KLSAgICBpID0gKHNpemVfdCloYXNoICYgbWFzazsKLSAgICBlbnRyeSA9ICZ0YWJsZVtpXTsKLSAgICBmb3IgKHBlcnR1cmIgPSBoYXNoOyBlbnRyeS0+a2V5ICE9IE5VTEw7IHBlcnR1cmIgPj49IFBFUlRVUkJfU0hJRlQpIHsKLSAgICAgICAgaSA9IChpIDw8IDIpICsgaSArIHBlcnR1cmIgKyAxOwotICAgICAgICBlbnRyeSA9ICZ0YWJsZVtpICYgbWFza107Ci0gICAgfQotICAgIHNvLT5maWxsKys7Ci0gICAgZW50cnktPmtleSA9IGtleTsKLSAgICBlbnRyeS0+aGFzaCA9IGhhc2g7Ci0gICAgc28tPnVzZWQrKzsKLX0KLQotLyoKIFJlc3RydWN0dXJlIHRoZSB0YWJsZSBieSBhbGxvY2F0aW5nIGEgbmV3IHRhYmxlIGFuZCByZWluc2VydGluZyBhbGwKIGtleXMgYWdhaW4uICBXaGVuIGVudHJpZXMgaGF2ZSBiZWVuIGRlbGV0ZWQsIHRoZSBuZXcgdGFibGUgbWF5CiBhY3R1YWxseSBiZSBzbWFsbGVyIHRoYW4gdGhlIG9sZCBvbmUuCkBAIC0zMjcsMjMgKzMxMCwxNCBAQAogICAgIHNvLT50YWJsZSA9IG5ld3RhYmxlOwogICAgIHNvLT5tYXNrID0gbmV3c2l6ZSAtIDE7CiAgICAgbWVtc2V0KG5ld3RhYmxlLCAwLCBzaXplb2Yoc2V0ZW50cnkpICogbmV3c2l6ZSk7CisgICAgaSA9IHNvLT51c2VkOwogICAgIHNvLT51c2VkID0gMDsKLSAgICBpID0gc28tPmZpbGw7CiAgICAgc28tPmZpbGwgPSAwOwogCiAgICAgLyogQ29weSB0aGUgZGF0YSBvdmVyOyB0aGlzIGlzIHJlZmNvdW50LW5ldXRyYWwgZm9yIGFjdGl2ZSBlbnRyaWVzOwogICAgICAgIGR1bW15IGVudHJpZXMgYXJlbid0IGNvcGllZCBvdmVyLCBvZiBjb3Vyc2UgKi8KICAgICBmb3IgKGVudHJ5ID0gb2xkdGFibGU7IGkgPiAwOyBlbnRyeSsrKSB7Ci0gICAgICAgIGlmIChlbnRyeS0+a2V5ID09IE5VTEwpIHsKLSAgICAgICAgICAgIC8qIFVOVVNFRCAqLwotICAgICAgICAgICAgOwotICAgICAgICB9IGVsc2UgaWYgKGVudHJ5LT5rZXkgPT0gZHVtbXkpIHsKLSAgICAgICAgICAgIC8qIERVTU1ZICovCi0gICAgICAgICAgICAtLWk7Ci0gICAgICAgICAgICBhc3NlcnQoZW50cnktPmtleSA9PSBkdW1teSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZW50cnktPmtleSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiBBQ1RJVkUgKi8KKyAgICAgICAgaWYgKGVudHJ5LT5rZXkgIT0gTlVMTCAmJiBlbnRyeS0+a2V5ICE9IGR1bW15KSB7CiAgICAgICAgICAgICAtLWk7CiAgICAgICAgICAgICBzZXRfaW5zZXJ0X2NsZWFuKHNvLCBlbnRyeS0+a2V5LCBlbnRyeS0+aGFzaCk7CiAgICAgICAgIH0KQEAgLTM1Nyw5ICszMzEsOSBAQAogLyogQ0FVVElPTjogc2V0X2FkZF9rZXkvZW50cnkoKSBtdXN0IGd1YXJhbnRlZSBpdCB3b24ndCByZXNpemUgdGhlIHRhYmxlICovCiAKIHN0YXRpYyBpbnQKLXNldF9hZGRfZW50cnkocmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvLCBzZXRlbnRyeSAqZW50cnkpCitzZXRfYWRkX2VudHJ5KFB5U2V0T2JqZWN0ICpzbywgc2V0ZW50cnkgKmVudHJ5KQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgbl91c2VkOworICAgIFB5X3NzaXplX3Qgbl91c2VkOwogICAgIFB5T2JqZWN0ICprZXkgPSBlbnRyeS0+a2V5OwogICAgIFB5X2hhc2hfdCBoYXNoID0gZW50cnktPmhhc2g7CiAKQEAgLTM3NiwxMCArMzUwLDEwIEBACiB9CiAKIHN0YXRpYyBpbnQKLXNldF9hZGRfa2V5KHJlZ2lzdGVyIFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKK3NldF9hZGRfa2V5KFB5U2V0T2JqZWN0ICpzbywgUHlPYmplY3QgKmtleSkKIHsKLSAgICByZWdpc3RlciBQeV9oYXNoX3QgaGFzaDsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IG5fdXNlZDsKKyAgICBQeV9oYXNoX3QgaGFzaDsKKyAgICBQeV9zc2l6ZV90IG5fdXNlZDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrRXhhY3Qoa2V5KSB8fAogICAgICAgICAoaGFzaCA9ICgoUHlBU0NJSU9iamVjdCAqKSBrZXkpLT5oYXNoKSA9PSAtMSkgewpAQCAtNDA0LDcgKzM3OCw3IEBACiAKIHN0YXRpYyBpbnQKIHNldF9kaXNjYXJkX2VudHJ5KFB5U2V0T2JqZWN0ICpzbywgc2V0ZW50cnkgKm9sZGVudHJ5KQoteyAgICAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7Cit7ICAgICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeU9iamVjdCAqb2xkX2tleTsKIAogICAgIGVudHJ5ID0gKHNvLT5sb29rdXApKHNvLCBvbGRlbnRyeS0+a2V5LCBvbGRlbnRyeS0+aGFzaCk7CkBAIC00MTMsNyArMzg3LDYgQEAKICAgICBpZiAoZW50cnktPmtleSA9PSBOVUxMICB8fCAgZW50cnktPmtleSA9PSBkdW1teSkKICAgICAgICAgcmV0dXJuIERJU0NBUkRfTk9URk9VTkQ7CiAgICAgb2xkX2tleSA9IGVudHJ5LT5rZXk7Ci0gICAgUHlfSU5DUkVGKGR1bW15KTsKICAgICBlbnRyeS0+a2V5ID0gZHVtbXk7CiAgICAgc28tPnVzZWQtLTsKICAgICBQeV9ERUNSRUYob2xkX2tleSk7CkBAIC00MjMsOCArMzk2LDggQEAKIHN0YXRpYyBpbnQKIHNldF9kaXNjYXJkX2tleShQeVNldE9iamVjdCAqc28sIFB5T2JqZWN0ICprZXkpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfaGFzaF90IGhhc2g7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X2hhc2hfdCBoYXNoOworICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeU9iamVjdCAqb2xkX2tleTsKIAogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKQEAgLTQ0MSwxMyArNDE0LDIzIEBACiAgICAgaWYgKGVudHJ5LT5rZXkgPT0gTlVMTCAgfHwgIGVudHJ5LT5rZXkgPT0gZHVtbXkpCiAgICAgICAgIHJldHVybiBESVNDQVJEX05PVEZPVU5EOwogICAgIG9sZF9rZXkgPSBlbnRyeS0+a2V5OwotICAgIFB5X0lOQ1JFRihkdW1teSk7CiAgICAgZW50cnktPmtleSA9IGR1bW15OwogICAgIHNvLT51c2VkLS07CiAgICAgUHlfREVDUkVGKG9sZF9rZXkpOwogICAgIHJldHVybiBESVNDQVJEX0ZPVU5EOwogfQogCitzdGF0aWMgdm9pZAorc2V0X2VtcHR5X3RvX21pbnNpemUoUHlTZXRPYmplY3QgKnNvKQoreworICAgIG1lbXNldChzby0+c21hbGx0YWJsZSwgMCwgc2l6ZW9mKHNvLT5zbWFsbHRhYmxlKSk7CisgICAgc28tPmZpbGwgPSAwOworICAgIHNvLT51c2VkID0gMDsKKyAgICBzby0+bWFzayA9IFB5U2V0X01JTlNJWkUgLSAxOworICAgIHNvLT50YWJsZSA9IHNvLT5zbWFsbHRhYmxlOworICAgIHNvLT5oYXNoID0gLTE7Cit9CisKIHN0YXRpYyBpbnQKIHNldF9jbGVhcl9pbnRlcm5hbChQeVNldE9iamVjdCAqc28pCiB7CkBAIC00NTUsMTQgKzQzOCwxMyBAQAogICAgIGludCB0YWJsZV9pc19tYWxsb2NlZDsKICAgICBQeV9zc2l6ZV90IGZpbGw7CiAgICAgc2V0ZW50cnkgc21hbGxfY29weVtQeVNldF9NSU5TSVpFXTsKLSNpZmRlZiBQeV9ERUJVRwotICAgIFB5X3NzaXplX3QgaSwgbjsKLSAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAKLSAgICBuID0gc28tPm1hc2sgKyAxOwotICAgIGkgPSAwOworI2lmZGVmIFB5X0RFQlVHCisgICAgUHlfc3NpemVfdCBpID0gMDsKKyAgICBQeV9zc2l6ZV90IG4gPSBzby0+bWFzayArIDE7CiAjZW5kaWYKIAorICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKICAgICB0YWJsZSA9IHNvLT50YWJsZTsKICAgICBhc3NlcnQodGFibGUgIT0gTlVMTCk7CiAgICAgdGFibGVfaXNfbWFsbG9jZWQgPSB0YWJsZSAhPSBzby0+c21hbGx0YWJsZTsKQEAgLTQ3NSw3ICs0NTcsNyBAQAogICAgICAqLwogICAgIGZpbGwgPSBzby0+ZmlsbDsKICAgICBpZiAodGFibGVfaXNfbWFsbG9jZWQpCi0gICAgICAgIEVNUFRZX1RPX01JTlNJWkUoc28pOworICAgICAgICBzZXRfZW1wdHlfdG9fbWluc2l6ZShzbyk7CiAKICAgICBlbHNlIGlmIChmaWxsID4gMCkgewogICAgICAgICAvKiBJdCdzIGEgc21hbGwgdGFibGUgd2l0aCBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkLgpAQCAtNDg0LDcgKzQ2Niw3IEBACiAgICAgICAgICAqLwogICAgICAgICBtZW1jcHkoc21hbGxfY29weSwgdGFibGUsIHNpemVvZihzbWFsbF9jb3B5KSk7CiAgICAgICAgIHRhYmxlID0gc21hbGxfY29weTsKLSAgICAgICAgRU1QVFlfVE9fTUlOU0laRShzbyk7CisgICAgICAgIHNldF9lbXB0eV90b19taW5zaXplKHNvKTsKICAgICB9CiAgICAgLyogZWxzZSBpdCdzIGEgc21hbGwgdGFibGUgdGhhdCdzIGFscmVhZHkgZW1wdHkgKi8KIApAQCAtNDk5LDcgKzQ4MSw4IEBACiAjZW5kaWYKICAgICAgICAgaWYgKGVudHJ5LT5rZXkpIHsKICAgICAgICAgICAgIC0tZmlsbDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+a2V5ICE9IGR1bW15KQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihlbnRyeS0+a2V5KTsKICAgICAgICAgfQogI2lmZGVmIFB5X0RFQlVHCiAgICAgICAgIGVsc2UKQEAgLTUzMCw3ICs1MTMsNyBAQAogewogICAgIFB5X3NzaXplX3QgaTsKICAgICBQeV9zc2l6ZV90IG1hc2s7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKnRhYmxlOworICAgIHNldGVudHJ5ICp0YWJsZTsKIAogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKICAgICBpID0gKnBvc19wdHI7CkBAIC01NTAsNyArNTMzLDcgQEAKIHN0YXRpYyB2b2lkCiBzZXRfZGVhbGxvYyhQeVNldE9iamVjdCAqc28pCiB7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIHNldGVudHJ5ICplbnRyeTsKICAgICBQeV9zc2l6ZV90IGZpbGwgPSBzby0+ZmlsbDsKICAgICBQeU9iamVjdF9HQ19VblRyYWNrKHNvKTsKICAgICBQeV9UUkFTSENBTl9TQUZFX0JFR0lOKHNvKQpAQCAtNTYwLDE1ICs1NDMsMTMgQEAKICAgICBmb3IgKGVudHJ5ID0gc28tPnRhYmxlOyBmaWxsID4gMDsgZW50cnkrKykgewogICAgICAgICBpZiAoZW50cnktPmtleSkgewogICAgICAgICAgICAgLS1maWxsOwotICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOworICAgICAgICAgICAgaWYgKGVudHJ5LT5rZXkgIT0gZHVtbXkpCisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGVudHJ5LT5rZXkpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChzby0+dGFibGUgIT0gc28tPnNtYWxsdGFibGUpCiAgICAgICAgIFB5TWVtX0RFTChzby0+dGFibGUpOwotICAgIGlmIChudW1mcmVlIDwgUHlTZXRfTUFYRlJFRUxJU1QgJiYgUHlBbnlTZXRfQ2hlY2tFeGFjdChzbykpCi0gICAgICAgIGZyZWVfbGlzdFtudW1mcmVlKytdID0gc287Ci0gICAgZWxzZQotICAgICAgICBQeV9UWVBFKHNvKS0+dHBfZnJlZShzbyk7CisgICAgUHlfVFlQRShzbyktPnRwX2ZyZWUoc28pOwogICAgIFB5X1RSQVNIQ0FOX1NBRkVfRU5EKHNvKQogfQogCkBAIC02MjksOCArNjEwLDggQEAKICAgICBQeVNldE9iamVjdCAqb3RoZXI7CiAgICAgUHlPYmplY3QgKmtleTsKICAgICBQeV9oYXNoX3QgaGFzaDsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgc2V0ZW50cnkgKmVudHJ5OworICAgIFB5X3NzaXplX3QgaTsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAKICAgICBhc3NlcnQgKFB5QW55U2V0X0NoZWNrKHNvKSk7CiAgICAgYXNzZXJ0IChQeUFueVNldF9DaGVjayhvdGhlcnNldCkpOwpAQCAtNjk4LDggKzY3OSw4IEBACiBzdGF0aWMgUHlPYmplY3QgKgogc2V0X3BvcChQeVNldE9iamVjdCAqc28pCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpID0gMDsKLSAgICByZWdpc3RlciBzZXRlbnRyeSAqZW50cnk7CisgICAgUHlfc3NpemVfdCBpID0gMDsKKyAgICBzZXRlbnRyeSAqZW50cnk7CiAgICAgUHlPYmplY3QgKmtleTsKIAogICAgIGFzc2VydCAoUHlBbnlTZXRfQ2hlY2soc28pKTsKQEAgLTczMSw3ICs3MTIsNiBAQAogICAgICAgICB9CiAgICAgfQogICAgIGtleSA9IGVudHJ5LT5rZXk7Ci0gICAgUHlfSU5DUkVGKGR1bW15KTsKICAgICBlbnRyeS0+a2V5ID0gZHVtbXk7CiAgICAgc28tPnVzZWQtLTsKICAgICBzby0+dGFibGVbMF0uaGFzaCA9IGkgKyAxOyAgLyogbmV4dCBwbGFjZSB0byBzdGFydCAqLwpAQCAtNzU1LDYgKzczNSwxNyBAQAogc3RhdGljIFB5X2hhc2hfdAogZnJvemVuc2V0X2hhc2goUHlPYmplY3QgKnNlbGYpCiB7CisgICAgLyogTW9zdCBvZiB0aGUgY29uc3RhbnRzIGluIHRoaXMgaGFzaCBhbGdvcml0aG0gYXJlIHJhbmRvbWx5IGNob29zZW4KKyAgICAgICBsYXJnZSBwcmltZXMgd2l0aCAiaW50ZXJlc3RpbmcgYml0IHBhdHRlcm5zIiBhbmQgdGhhdCBwYXNzZWQKKyAgICAgICB0ZXN0cyBmb3IgZ29vZCBjb2xsaXNpb24gc3RhdGlzdGljcyBvbiBhIHZhcmlldHkgb2YgcHJvYmxlbWF0aWMKKyAgICAgICBkYXRhc2V0cyBzdWNoIGFzOgorCisgICAgICAgICAgcHMgPSBbXQorICAgICAgICAgIGZvciByIGluIHJhbmdlKDIxKToKKyAgICAgICAgICAgICAgcHMgKz0gaXRlcnRvb2xzLmNvbWJpbmF0aW9ucyhyYW5nZSgyMCksIHIpCisgICAgICAgICAgbnVtX2Rpc3RpbmN0X2hhc2hlcyA9IGxlbih7aGFzaChmcm96ZW5zZXQocykpIGZvciBzIGluIHBzfSkKKworICAgICovCiAgICAgUHlTZXRPYmplY3QgKnNvID0gKFB5U2V0T2JqZWN0ICopc2VsZjsKICAgICBQeV91aGFzaF90IGgsIGhhc2ggPSAxOTI3ODY4MjM3VUw7CiAgICAgc2V0ZW50cnkgKmVudHJ5OwpAQCAtNzcxLDggKzc2MiwxMCBAQAogICAgICAgICAgICBoYXNoZXMgc28gdGhhdCBtYW55IGRpc3RpbmN0IGNvbWJpbmF0aW9ucyBjb2xsYXBzZSB0byBvbmx5CiAgICAgICAgICAgIGEgaGFuZGZ1bCBvZiBkaXN0aW5jdCBoYXNoIHZhbHVlcy4gKi8KICAgICAgICAgaCA9IGVudHJ5LT5oYXNoOwotICAgICAgICBoYXNoIF49IChoIF4gKGggPDwgMTYpIF4gODk4Njk3NDdVTCkgICogMzY0NDc5ODE2N1VMOworICAgICAgICBoYXNoIF49ICgoaCBeIDg5ODY5NzQ3VUwpIF4gKGggPDwgMTYpKSAqIDM2NDQ3OTgxNjdVTDsKICAgICB9CisgICAgLyogTWFrZSB0aGUgZmluYWwgcmVzdWx0IHNwcmVhZC1vdXQgaW4gYSBkaWZmZXJlbnQgcGF0dGVybgorICAgICAgIHRoYW4gdGhlIGFsZ29yaXRobSBmb3IgdHVwbGVzIG9yIG90aGVyIHB5dGhvbiBvYmplY3RzLiAqLwogICAgIGhhc2ggPSBoYXNoICogNjkwNjlVICsgOTA3MTMzOTIzVUw7CiAgICAgaWYgKGhhc2ggPT0gLTEpCiAgICAgICAgIGhhc2ggPSA1OTA5MjM3MTNVTDsKQEAgLTg2Niw4ICs4NTksOCBAQAogc3RhdGljIFB5T2JqZWN0ICpzZXRpdGVyX2l0ZXJuZXh0KHNldGl0ZXJvYmplY3QgKnNpKQogewogICAgIFB5T2JqZWN0ICprZXk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBtYXNrOwotICAgIHJlZ2lzdGVyIHNldGVudHJ5ICplbnRyeTsKKyAgICBQeV9zc2l6ZV90IGksIG1hc2s7CisgICAgc2V0ZW50cnkgKmVudHJ5OwogICAgIFB5U2V0T2JqZWN0ICpzbyA9IHNpLT5zaV9zZXQ7CiAKICAgICBpZiAoc28gPT0gTlVMTCkKQEAgLTEwMjEsMzMgKzEwMTQsMTkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtYWtlX25ld19zZXQoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqaXRlcmFibGUpCiB7Ci0gICAgcmVnaXN0ZXIgUHlTZXRPYmplY3QgKnNvID0gTlVMTDsKLQotICAgIGlmIChkdW1teSA9PSBOVUxMKSB7IC8qIEF1dG8taW5pdGlhbGl6ZSBkdW1teSAqLwotICAgICAgICBkdW1teSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8ZHVtbXkga2V5PiIpOwotICAgICAgICBpZiAoZHVtbXkgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBQeVNldE9iamVjdCAqc28gPSBOVUxMOwogCiAgICAgLyogY3JlYXRlIFB5U2V0T2JqZWN0IHN0cnVjdHVyZSAqLwotICAgIGlmIChudW1mcmVlICYmCi0gICAgICAgICh0eXBlID09ICZQeVNldF9UeXBlICB8fCAgdHlwZSA9PSAmUHlGcm96ZW5TZXRfVHlwZSkpIHsKLSAgICAgICAgc28gPSBmcmVlX2xpc3RbLS1udW1mcmVlXTsKLSAgICAgICAgYXNzZXJ0IChzbyAhPSBOVUxMICYmIFB5QW55U2V0X0NoZWNrRXhhY3Qoc28pKTsKLSAgICAgICAgUHlfVFlQRShzbykgPSB0eXBlOwotICAgICAgICBfUHlfTmV3UmVmZXJlbmNlKChQeU9iamVjdCAqKXNvKTsKLSAgICAgICAgRU1QVFlfVE9fTUlOU0laRShzbyk7Ci0gICAgICAgIFB5T2JqZWN0X0dDX1RyYWNrKHNvKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzbyA9IChQeVNldE9iamVjdCAqKXR5cGUtPnRwX2FsbG9jKHR5cGUsIDApOwotICAgICAgICBpZiAoc28gPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAvKiB0cF9hbGxvYyBoYXMgYWxyZWFkeSB6ZXJvZWQgdGhlIHN0cnVjdHVyZSAqLwotICAgICAgICBhc3NlcnQoc28tPnRhYmxlID09IE5VTEwgJiYgc28tPmZpbGwgPT0gMCAmJiBzby0+dXNlZCA9PSAwKTsKLSAgICAgICAgSU5JVF9OT05aRVJPX1NFVF9TTE9UUyhzbyk7Ci0gICAgfQorICAgIHNvID0gKFB5U2V0T2JqZWN0ICopdHlwZS0+dHBfYWxsb2ModHlwZSwgMCk7CisgICAgaWYgKHNvID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgc28tPmZpbGwgPSAwOworICAgIHNvLT51c2VkID0gMDsKKyAgICBzby0+bWFzayA9IFB5U2V0X01JTlNJWkUgLSAxOworICAgIHNvLT50YWJsZSA9IHNvLT5zbWFsbHRhYmxlOwogICAgIHNvLT5sb29rdXAgPSBzZXRfbG9va2tleV91bmljb2RlOworICAgIHNvLT5oYXNoID0gLTE7CiAgICAgc28tPndlYWtyZWZsaXN0ID0gTlVMTDsKIAogICAgIGlmIChpdGVyYWJsZSAhPSBOVUxMKSB7CkBAIC0xMTEwLDM1ICsxMDg5LDE1IEBACiBpbnQKIFB5U2V0X0NsZWFyRnJlZUxpc3Qodm9pZCkKIHsKLSAgICBpbnQgZnJlZWxpc3Rfc2l6ZSA9IG51bWZyZWU7Ci0gICAgUHlTZXRPYmplY3QgKnNvOwotCi0gICAgd2hpbGUgKG51bWZyZWUpIHsKLSAgICAgICAgbnVtZnJlZS0tOwotICAgICAgICBzbyA9IGZyZWVfbGlzdFtudW1mcmVlXTsKLSAgICAgICAgUHlPYmplY3RfR0NfRGVsKHNvKTsKLSAgICB9Ci0gICAgcmV0dXJuIGZyZWVsaXN0X3NpemU7CisgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQKIFB5U2V0X0Zpbmkodm9pZCkKIHsKLSAgICBQeVNldF9DbGVhckZyZWVMaXN0KCk7Ci0gICAgUHlfQ0xFQVIoZHVtbXkpOwogICAgIFB5X0NMRUFSKGVtcHR5ZnJvemVuc2V0KTsKIH0KIAotLyogUHJpbnQgc3VtbWFyeSBpbmZvIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGUgb3B0aW1pemVkIGFsbG9jYXRvciAqLwotdm9pZAotX1B5U2V0X0RlYnVnTWFsbG9jU3RhdHMoRklMRSAqb3V0KQotewotICAgIF9QeURlYnVnQWxsb2NhdG9yU3RhdHMob3V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyZWUgUHlTZXRPYmplY3QiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtZnJlZSwgc2l6ZW9mKFB5U2V0T2JqZWN0KSk7Ci19Ci0KLQogc3RhdGljIFB5T2JqZWN0ICoKIHNldF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7CkBAIC0xNjA3LDkgKzE1NjYsMTUgQEAKICAgICBpZiAoUHlEaWN0X0NoZWNrRXhhY3Qob3RoZXIpKSB7CiAgICAgICAgIHdoaWxlIChzZXRfbmV4dChzbywgJnBvcywgJmVudHJ5KSkgewogICAgICAgICAgICAgc2V0ZW50cnkgZW50cnljb3B5OworICAgICAgICAgICAgaW50IHJ2OwogICAgICAgICAgICAgZW50cnljb3B5Lmhhc2ggPSBlbnRyeS0+aGFzaDsKICAgICAgICAgICAgIGVudHJ5Y29weS5rZXkgPSBlbnRyeS0+a2V5OwotICAgICAgICAgICAgaWYgKCFfUHlEaWN0X0NvbnRhaW5zKG90aGVyLCBlbnRyeS0+a2V5LCBlbnRyeS0+aGFzaCkpIHsKKyAgICAgICAgICAgIHJ2ID0gX1B5RGljdF9Db250YWlucyhvdGhlciwgZW50cnktPmtleSwgZW50cnktPmhhc2gpOworICAgICAgICAgICAgaWYgKHJ2IDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFydikgewogICAgICAgICAgICAgICAgIGlmIChzZXRfYWRkX2VudHJ5KChQeVNldE9iamVjdCAqKXJlc3VsdCwgJmVudHJ5Y29weSkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTg0NSw3ICsxODEwLDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBzZXRfcmljaGNvbXBhcmUoUHlTZXRPYmplY3QgKnYsIFB5T2JqZWN0ICp3LCBpbnQgb3ApCiB7Ci0gICAgUHlPYmplY3QgKnIxLCAqcjI7CisgICAgUHlPYmplY3QgKnIxOworICAgIGludCByMjsKIAogICAgIGlmKCFQeUFueVNldF9DaGVjayh3KSkKICAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOwpAQCAtMTg2Myw5ICsxODI5LDExIEBACiAgICAgICAgIHIxID0gc2V0X3JpY2hjb21wYXJlKHYsIHcsIFB5X0VRKTsKICAgICAgICAgaWYgKHIxID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgcjIgPSBQeUJvb2xfRnJvbUxvbmcoUHlPYmplY3RfTm90KHIxKSk7CisgICAgICAgIHIyID0gUHlPYmplY3RfSXNUcnVlKHIxKTsKICAgICAgICAgUHlfREVDUkVGKHIxKTsKLSAgICAgICAgcmV0dXJuIHIyOworICAgICAgICBpZiAocjIgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoIXIyKTsKICAgICBjYXNlIFB5X0xFOgogICAgICAgICByZXR1cm4gc2V0X2lzc3Vic2V0KHYsIHcpOwogICAgIGNhc2UgUHlfR0U6CkBAIC0xOTQ5LDcgKzE5MTcsNyBAQAogICAgIH0KIAogICAgIGlmIChydiA9PSBESVNDQVJEX05PVEZPVU5EKSB7Ci0gICAgICAgIHNldF9rZXlfZXJyb3Ioa2V5KTsKKyAgICAgICAgX1B5RXJyX1NldEtleUVycm9yKGtleSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9SRVRVUk5fTk9ORTsKQEAgLTIzOTMsNiArMjM2MSw5IEBACiAgICAgcmV0dXJuIHNldF91cGRhdGVfaW50ZXJuYWwoKFB5U2V0T2JqZWN0ICopc2V0LCBpdGVyYWJsZSk7CiB9CiAKKy8qIEV4cG9ydGVkIGZvciB0aGUgZ2RiIHBsdWdpbidzIGJlbmVmaXQuICovCitQeU9iamVjdCAqX1B5U2V0X0R1bW15ID0gZHVtbXk7CisKICNpZmRlZiBQeV9ERUJVRwogCiAvKiBUZXN0IGNvZGUgdG8gYmUgY2FsbGVkIHdpdGggYW55IHRocmVlIGVsZW1lbnQgc2V0LgpAQCAtMjQxMSw3ICsyMzgyLDcgQEAKICAgICBQeV9zc2l6ZV90IGNvdW50OwogICAgIGNoYXIgKnM7CiAgICAgUHlfc3NpemVfdCBpOwotICAgIFB5T2JqZWN0ICplbGVtPU5VTEwsICpkdXA9TlVMTCwgKnQsICpmLCAqZHVwMiwgKng7CisgICAgUHlPYmplY3QgKmVsZW09TlVMTCwgKmR1cD1OVUxMLCAqdCwgKmYsICpkdXAyLCAqeD1OVUxMOwogICAgIFB5T2JqZWN0ICpvYiA9IChQeU9iamVjdCAqKXNvOwogICAgIFB5X2hhc2hfdCBoYXNoOwogICAgIFB5T2JqZWN0ICpzdHI7CkBAIC0yNTM0LDMgKzI1MDUsNDYgQEAKICN1bmRlZiBhc3NlcnRSYWlzZXMKIAogI2VuZGlmCisKKy8qKioqKiBEdW1teSBTdHJ1Y3QgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBQeU9iamVjdCAqCitkdW1teV9yZXByKFB5T2JqZWN0ICpvcCkKK3sKKyAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjxkdW1teSBrZXk+Iik7Cit9CisKK3N0YXRpYyB2b2lkCitkdW1teV9kZWFsbG9jKFB5T2JqZWN0KiBpZ25vcmUpCit7CisgICAgUHlfRmF0YWxFcnJvcigiZGVhbGxvY2F0aW5nIDxkdW1teSBrZXk+Iik7Cit9CisKK3N0YXRpYyBQeVR5cGVPYmplY3QgX1B5U2V0RHVtbXlfVHlwZSA9IHsKKyAgICBQeVZhck9iamVjdF9IRUFEX0lOSVQoJlB5VHlwZV9UeXBlLCAwKQorICAgICI8ZHVtbXkga2V5PiB0eXBlIiwKKyAgICAwLAorICAgIDAsCisgICAgZHVtbXlfZGVhbGxvYywgICAgICAvKnRwX2RlYWxsb2MqLyAvKm5ldmVyIGNhbGxlZCovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3ByaW50Ki8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfZ2V0YXR0ciovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9yZXNlcnZlZCovCisgICAgZHVtbXlfcmVwciwgICAgICAgICAvKnRwX3JlcHIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19udW1iZXIqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9hc19zZXF1ZW5jZSovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX21hcHBpbmcqLworICAgIDAsICAgICAgICAgICAgICAgICAgLyp0cF9oYXNoICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2NhbGwgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgIC8qdHBfc3RyICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2dldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX3NldGF0dHJvICovCisgICAgMCwgICAgICAgICAgICAgICAgICAvKnRwX2FzX2J1ZmZlciAqLworICAgIFB5X1RQRkxBR1NfREVGQVVMVCwgLyp0cF9mbGFncyAqLworfTsKKworc3RhdGljIFB5T2JqZWN0IF9kdW1teV9zdHJ1Y3QgPSB7CisgIF9QeU9iamVjdF9FWFRSQV9JTklUCisgIDIsICZfUHlTZXREdW1teV9UeXBlCit9OworCmRpZmYgLS1naXQgYS9PYmplY3RzL3NsaWNlb2JqZWN0LmMgYi9PYmplY3RzL3NsaWNlb2JqZWN0LmMKaW5kZXggMTU5MzMzNS4uMTA0OTUyMyAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zbGljZW9iamVjdC5jCisrKyBiL09iamVjdHMvc2xpY2VvYmplY3QuYwpAQCAtMzMsNiArMzMsMTcgQEAKICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIkVsbGlwc2lzIik7CiB9CiAKK3N0YXRpYyBQeU9iamVjdCAqCitlbGxpcHNpc19yZWR1Y2UoUHlPYmplY3QgKm9wKQoreworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZygiRWxsaXBzaXMiKTsKK30KKworc3RhdGljIFB5TWV0aG9kRGVmIGVsbGlwc2lzX21ldGhvZHNbXSA9IHsKKyAgICB7Il9fcmVkdWNlX18iLCAoUHlDRnVuY3Rpb24pZWxsaXBzaXNfcmVkdWNlLCBNRVRIX05PQVJHUywgTlVMTH0sCisgICAge05VTEwsIE5VTEx9Cit9OworCiBQeVR5cGVPYmplY3QgUHlFbGxpcHNpc19UeXBlID0gewogICAgIFB5VmFyT2JqZWN0X0hFQURfSU5JVCgmUHlUeXBlX1R5cGUsIDApCiAgICAgImVsbGlwc2lzIiwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmFtZSAqLwpAQCAtNjEsNyArNzIsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3dlYWtsaXN0b2Zmc2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfaXRlciAqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2l0ZXJuZXh0ICovCi0gICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbWV0aG9kcyAqLworICAgIGVsbGlwc2lzX21ldGhvZHMsICAgICAgICAgICAgICAgICAgIC8qIHRwX21ldGhvZHMgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9tZW1iZXJzICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfZ2V0c2V0ICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfYmFzZSAqLwpAQCAtMjk5LDIzICszMTAsMTk4IEBACiAgICAgezB9CiB9OwogCisvKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29udmVydCBhIHNsaWNlIGFyZ3VtZW50IHRvIGEgUHlMb25nLCBhbmQgcmFpc2UgVHlwZUVycm9yCisgICB3aXRoIGEgc3VpdGFibGUgbWVzc2FnZSBvbiBmYWlsdXJlLiAqLworCitzdGF0aWMgUHlPYmplY3QqCitldmFsdWF0ZV9zbGljZV9pbmRleChQeU9iamVjdCAqdikKK3sKKyAgICBpZiAoUHlJbmRleF9DaGVjayh2KSkgeworICAgICAgICByZXR1cm4gUHlOdW1iZXJfSW5kZXgodik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgInNsaWNlIGluZGljZXMgbXVzdCBiZSBpbnRlZ2VycyBvciAiCisgICAgICAgICAgICAgICAgICAgICAgICAiTm9uZSBvciBoYXZlIGFuIF9faW5kZXhfXyBtZXRob2QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisvKiBDb21wdXRlIHNsaWNlIGluZGljZXMgZ2l2ZW4gYSBzbGljZSBhbmQgbGVuZ3RoLiAgUmV0dXJuIC0xIG9uIGZhaWx1cmUuICBVc2VkCisgICBieSBzbGljZS5pbmRpY2VzIGFuZCByYW5nZW9iamVjdCBzbGljaW5nLiAgQXNzdW1lcyB0aGF0IGBsZW5gIGlzIGEKKyAgIG5vbm5lZ2F0aXZlIGluc3RhbmNlIG9mIFB5TG9uZy4gKi8KKworaW50CitfUHlTbGljZV9HZXRMb25nSW5kaWNlcyhQeVNsaWNlT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipzdGFydF9wdHIsIFB5T2JqZWN0ICoqc3RvcF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnN0ZXBfcHRyKQoreworICAgIFB5T2JqZWN0ICpzdGFydD1OVUxMLCAqc3RvcD1OVUxMLCAqc3RlcD1OVUxMOworICAgIFB5T2JqZWN0ICp1cHBlcj1OVUxMLCAqbG93ZXI9TlVMTDsKKyAgICBpbnQgc3RlcF9pc19uZWdhdGl2ZSwgY21wX3Jlc3VsdDsKKworICAgIC8qIENvbnZlcnQgc3RlcCB0byBhbiBpbnRlZ2VyOyByYWlzZSBmb3IgemVybyBzdGVwLiAqLworICAgIGlmIChzZWxmLT5zdGVwID09IFB5X05vbmUpIHsKKyAgICAgICAgc3RlcCA9IFB5TG9uZ19Gcm9tTG9uZygxTCk7CisgICAgICAgIGlmIChzdGVwID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBzdGVwX2lzX25lZ2F0aXZlID0gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCBzdGVwX3NpZ247CisgICAgICAgIHN0ZXAgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzZWxmLT5zdGVwKTsKKyAgICAgICAgaWYgKHN0ZXAgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIHN0ZXBfc2lnbiA9IF9QeUxvbmdfU2lnbihzdGVwKTsKKyAgICAgICAgaWYgKHN0ZXBfc2lnbiA9PSAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2xpY2Ugc3RlcCBjYW5ub3QgYmUgemVybyIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBzdGVwX2lzX25lZ2F0aXZlID0gc3RlcF9zaWduIDwgMDsKKyAgICB9CisKKyAgICAvKiBGaW5kIGxvd2VyIGFuZCB1cHBlciBib3VuZHMgZm9yIHN0YXJ0IGFuZCBzdG9wLiAqLworICAgIGlmIChzdGVwX2lzX25lZ2F0aXZlKSB7CisgICAgICAgIGxvd2VyID0gUHlMb25nX0Zyb21Mb25nKC0xTCk7CisgICAgICAgIGlmIChsb3dlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICB1cHBlciA9IFB5TnVtYmVyX0FkZChsZW5ndGgsIGxvd2VyKTsKKyAgICAgICAgaWYgKHVwcGVyID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbG93ZXIgPSBQeUxvbmdfRnJvbUxvbmcoMEwpOworICAgICAgICBpZiAobG93ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgdXBwZXIgPSBsZW5ndGg7CisgICAgICAgIFB5X0lOQ1JFRih1cHBlcik7CisgICAgfQorCisgICAgLyogQ29tcHV0ZSBzdGFydC4gKi8KKyAgICBpZiAoc2VsZi0+c3RhcnQgPT0gUHlfTm9uZSkgeworICAgICAgICBzdGFydCA9IHN0ZXBfaXNfbmVnYXRpdmUgPyB1cHBlciA6IGxvd2VyOworICAgICAgICBQeV9JTkNSRUYoc3RhcnQpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgc3RhcnQgPSBldmFsdWF0ZV9zbGljZV9pbmRleChzZWxmLT5zdGFydCk7CisgICAgICAgIGlmIChzdGFydCA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoX1B5TG9uZ19TaWduKHN0YXJ0KSA8IDApIHsKKyAgICAgICAgICAgIC8qIHN0YXJ0ICs9IGxlbmd0aCAqLworICAgICAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5TnVtYmVyX0FkZChzdGFydCwgbGVuZ3RoKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdGFydCk7CisgICAgICAgICAgICBzdGFydCA9IHRtcDsKKyAgICAgICAgICAgIGlmIChzdGFydCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RhcnQsIGxvd2VyLCBQeV9MVCk7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0KSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGxvd2VyKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgICAgIHN0YXJ0ID0gbG93ZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjbXBfcmVzdWx0ID0gUHlPYmplY3RfUmljaENvbXBhcmVCb29sKHN0YXJ0LCB1cHBlciwgUHlfR1QpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih1cHBlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IHVwcGVyOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogQ29tcHV0ZSBzdG9wLiAqLworICAgIGlmIChzZWxmLT5zdG9wID09IFB5X05vbmUpIHsKKyAgICAgICAgc3RvcCA9IHN0ZXBfaXNfbmVnYXRpdmUgPyBsb3dlciA6IHVwcGVyOworICAgICAgICBQeV9JTkNSRUYoc3RvcCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdG9wID0gZXZhbHVhdGVfc2xpY2VfaW5kZXgoc2VsZi0+c3RvcCk7CisgICAgICAgIGlmIChzdG9wID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChfUHlMb25nX1NpZ24oc3RvcCkgPCAwKSB7CisgICAgICAgICAgICAvKiBzdG9wICs9IGxlbmd0aCAqLworICAgICAgICAgICAgUHlPYmplY3QgKnRtcCA9IFB5TnVtYmVyX0FkZChzdG9wLCBsZW5ndGgpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgc3RvcCA9IHRtcDsKKyAgICAgICAgICAgIGlmIChzdG9wID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICAgICAgY21wX3Jlc3VsdCA9IFB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbChzdG9wLCBsb3dlciwgUHlfTFQpOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBpZiAoY21wX3Jlc3VsdCkgeworICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihsb3dlcik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgICAgIHN0b3AgPSBsb3dlcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNtcF9yZXN1bHQgPSBQeU9iamVjdF9SaWNoQ29tcGFyZUJvb2woc3RvcCwgdXBwZXIsIFB5X0dUKTsKKyAgICAgICAgICAgIGlmIChjbXBfcmVzdWx0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgaWYgKGNtcF9yZXN1bHQpIHsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYodXBwZXIpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdG9wKTsKKyAgICAgICAgICAgICAgICBzdG9wID0gdXBwZXI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAqc3RhcnRfcHRyID0gc3RhcnQ7CisgICAgKnN0b3BfcHRyID0gc3RvcDsKKyAgICAqc3RlcF9wdHIgPSBzdGVwOworICAgIFB5X0RFQ1JFRih1cHBlcik7CisgICAgUHlfREVDUkVGKGxvd2VyKTsKKyAgICByZXR1cm4gMDsKKworICBlcnJvcjoKKyAgICAqc3RhcnRfcHRyID0gKnN0b3BfcHRyID0gKnN0ZXBfcHRyID0gTlVMTDsKKyAgICBQeV9YREVDUkVGKHN0YXJ0KTsKKyAgICBQeV9YREVDUkVGKHN0b3ApOworICAgIFB5X1hERUNSRUYoc3RlcCk7CisgICAgUHlfWERFQ1JFRih1cHBlcik7CisgICAgUHlfWERFQ1JFRihsb3dlcik7CisgICAgcmV0dXJuIC0xOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBzbGljZS5pbmRpY2VzLiAqLworCiBzdGF0aWMgUHlPYmplY3QqCiBzbGljZV9pbmRpY2VzKFB5U2xpY2VPYmplY3QqIHNlbGYsIFB5T2JqZWN0KiBsZW4pCiB7Ci0gICAgUHlfc3NpemVfdCBpbGVuLCBzdGFydCwgc3RvcCwgc3RlcCwgc2xpY2VsZW5ndGg7CisgICAgUHlPYmplY3QgKnN0YXJ0LCAqc3RvcCwgKnN0ZXA7CisgICAgUHlPYmplY3QgKmxlbmd0aDsKKyAgICBpbnQgZXJyb3I7CiAKLSAgICBpbGVuID0gUHlOdW1iZXJfQXNTc2l6ZV90KGxlbiwgUHlFeGNfT3ZlcmZsb3dFcnJvcik7CisgICAgLyogQ29udmVydCBsZW5ndGggdG8gYW4gaW50ZWdlciBpZiBuZWNlc3Nhcnk7IHJhaXNlIGZvciBuZWdhdGl2ZSBsZW5ndGguICovCisgICAgbGVuZ3RoID0gUHlOdW1iZXJfSW5kZXgobGVuKTsKKyAgICBpZiAobGVuZ3RoID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKGlsZW4gPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgIGlmIChfUHlMb25nX1NpZ24obGVuZ3RoKSA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIHNob3VsZCBub3QgYmUgbmVnYXRpdmUiKTsKKyAgICAgICAgUHlfREVDUkVGKGxlbmd0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChQeVNsaWNlX0dldEluZGljZXNFeCgoUHlPYmplY3QqKXNlbGYsIGlsZW4sICZzdGFydCwgJnN0b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGVwLCAmc2xpY2VsZW5ndGgpIDwgMCkgeworICAgIGVycm9yID0gX1B5U2xpY2VfR2V0TG9uZ0luZGljZXMoc2VsZiwgbGVuZ3RoLCAmc3RhcnQsICZzdG9wLCAmc3RlcCk7CisgICAgUHlfREVDUkVGKGxlbmd0aCk7CisgICAgaWYgKGVycm9yID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKG5ubikiLCBzdGFydCwgc3RvcCwgc3RlcCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gUHlfQnVpbGRWYWx1ZSgiKE5OTikiLCBzdGFydCwgc3RvcCwgc3RlcCk7CiB9CiAKIFB5RG9jX1NUUlZBUihzbGljZV9pbmRpY2VzX2RvYywKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL1JFQURNRS50eHQgYi9PYmplY3RzL3N0cmluZ2xpYi9SRUFETUUudHh0CmluZGV4IGFiNTA2ZDYuLjhmZjZhZDggMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL1JFQURNRS50eHQKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvUkVBRE1FLnR4dApAQCAtMSw0ICsxLDQgQEAKLWJpdHMgc2hhcmVkIGJ5IHRoZSBzdHJpbmdvYmplY3QgYW5kIHVuaWNvZGVvYmplY3QgaW1wbGVtZW50YXRpb25zIChhbmQKK2JpdHMgc2hhcmVkIGJ5IHRoZSBieXRlc29iamVjdCBhbmQgdW5pY29kZW9iamVjdCBpbXBsZW1lbnRhdGlvbnMgKGFuZAogcG9zc2libHkgb3RoZXIgbW9kdWxlcywgaW4gYSBub3QgdG9vIGRpc3RhbnQgZnV0dXJlKS4KIAogdGhlIHN0dWZmIGluIGhlcmUgaXMgaW5jbHVkZWQgaW50byByZWxldmFudCBwbGFjZXM7IHNlZSB0aGUgaW5kaXZpZHVhbApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL2FzY2lpbGliLmgKaW5kZXggZjYyODEzZC4uZDBmYzE4ZCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvYXNjaWlsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9hc2NpaWxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyhTVFIsTEVOKSAgIF9QeVVuaWNvZGVfRnJvbUFTQ0lJKChjaGFyKikoU1RSKSwoTEVOKSkKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvY29kZWNzLmggYi9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaAppbmRleCBmMzUzMzY3Li5lZTFiZjJiIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9jb2RlY3MuaApAQCAtMzgsOCArMzgsOCBAQAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmIChfUHlfSVNfQUxJR05FRChzLCBTSVpFT0ZfTE9ORykpIHsKICAgICAgICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCBjaGFyICpfcyA9IHM7Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXIgU1RSSU5HTElCX0NIQVIgKl9wID0gcDsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfcyA9IHM7CisgICAgICAgICAgICAgICAgU1RSSU5HTElCX0NIQVIgKl9wID0gcDsKICAgICAgICAgICAgICAgICB3aGlsZSAoX3MgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgICAgICAvKiBSZWFkIGEgd2hvbGUgbG9uZyBhdCBhIHRpbWUgKGVpdGhlciA0IG9yIDggYnl0ZXMpLAogICAgICAgICAgICAgICAgICAgICAgICBhbmQgZG8gYSBmYXN0IHVucm9sbGVkIGNvcHkgaWYgaXQgb25seSBjb250YWlucyBBU0NJSQpAQCAtNDcsNyArNDcsNyBAQAogICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopIF9zOwogICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiBBU0NJSV9DSEFSX01BU0spCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICAgICAgICAgICAgICAgICAgICAgX3BbMF0gPSAoU1RSSU5HTElCX0NIQVIpKHZhbHVlICYgMHhGRnUpOwogICAgICAgICAgICAgICAgICAgICBfcFsxXSA9IChTVFJJTkdMSUJfQ0hBUikoKHZhbHVlID4+IDgpICYgMHhGRnUpOwogICAgICAgICAgICAgICAgICAgICBfcFsyXSA9IChTVFJJTkdMSUJfQ0hBUikoKHZhbHVlID4+IDE2KSAmIDB4RkZ1KTsKQEAgLTQ4Niw3ICs0ODYsNyBAQAogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEgPSAqaW5wdHI7CiAgICAgU1RSSU5HTElCX0NIQVIgKnAgPSBkZXN0ICsgKm91dHBvczsKICAgICAvKiBPZmZzZXRzIGZyb20gcSBmb3IgcmV0cmlldmluZyBieXRlIHBhaXJzIGluIHRoZSByaWdodCBvcmRlci4gKi8KLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgorI2lmIFBZX0xJVFRMRV9FTkRJQU4KICAgICBpbnQgaWhpID0gISFuYXRpdmVfb3JkZXJpbmcsIGlsbyA9ICFuYXRpdmVfb3JkZXJpbmc7CiAjZWxzZQogICAgIGludCBpaGkgPSAhbmF0aXZlX29yZGVyaW5nLCBpbG8gPSAhIW5hdGl2ZV9vcmRlcmluZzsKQEAgLTQ5OSw3ICs0OTksNyBAQAogICAgICAgICAgICByZWFkcyBhcmUgbW9yZSBleHBlbnNpdmUsIGJldHRlciB0byBkZWZlciB0byBhbm90aGVyIGl0ZXJhdGlvbi4gKi8KICAgICAgICAgaWYgKF9QeV9JU19BTElHTkVEKHEsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAgICAgLyogRmFzdCBwYXRoIGZvciBydW5zIG9mIGluLXJhbmdlIG5vbi1zdXJyb2dhdGUgY2hhcnMuICovCi0gICAgICAgICAgICByZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpfcSA9IHE7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpfcSA9IHE7CiAgICAgICAgICAgICB3aGlsZSAoX3EgPCBhbGlnbmVkX2VuZCkgewogICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2sgPSAqICh1bnNpZ25lZCBsb25nICopIF9xOwogICAgICAgICAgICAgICAgIGlmIChuYXRpdmVfb3JkZXJpbmcpIHsKQEAgLTUxNyw3ICs1MTcsNyBAQAogICAgICAgICAgICAgICAgICAgICBibG9jayA9IFNXQUIoYmxvY2spOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgfQotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogIyBpZiBTSVpFT0ZfTE9ORyA9PSA0CiAgICAgICAgICAgICAgICAgcFswXSA9IChTVFJJTkdMSUJfQ0hBUikoYmxvY2sgJiAweEZGRkZ1KTsKICAgICAgICAgICAgICAgICBwWzFdID0gKFNUUklOR0xJQl9DSEFSKShibG9jayA+PiAxNik7CkBAIC01OTYsMjYgKzU5NiwzMCBAQAogI3VuZGVmIFNXQUIKIAogCi1QeV9MT0NBTF9JTkxJTkUodm9pZCkKLVNUUklOR0xJQih1dGYxNl9lbmNvZGUpKHVuc2lnbmVkIHNob3J0ICpvdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqaW4sCisjaWYgU1RSSU5HTElCX01BWF9DSEFSID49IDB4ODAKK1B5X0xPQ0FMX0lOTElORShQeV9zc2l6ZV90KQorU1RSSU5HTElCKHV0ZjE2X2VuY29kZSkoY29uc3QgU1RSSU5HTElCX0NIQVIgKmluLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqKm91dHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGludCBuYXRpdmVfb3JkZXJpbmcpCiB7CisgICAgdW5zaWduZWQgc2hvcnQgKm91dCA9ICpvdXRwdHI7CiAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKmVuZCA9IGluICsgbGVuOwogI2lmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiA9PSAxCi0jIGRlZmluZSBTV0FCMihDSCkgICgoQ0gpIDw8IDgpCi0jZWxzZQotIyBkZWZpbmUgU1dBQjIoQ0gpICAoKChDSCkgPDwgOCkgfCAoKENIKSA+PiA4KSkKLSNlbmRpZgotI2lmIFNUUklOR0xJQl9NQVhfQ0hBUiA8IDB4MTAwMDAKICAgICBpZiAobmF0aXZlX29yZGVyaW5nKSB7Ci0jIGlmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiA9PSAyCi0gICAgICAgIFB5X01FTUNQWShvdXQsIGluLCAyICogbGVuKTsKLSMgZWxzZQotICAgICAgICBfUHlVbmljb2RlX0NPTlZFUlRfQllURVMoU1RSSU5HTElCX0NIQVIsIHVuc2lnbmVkIHNob3J0LCBpbiwgZW5kLCBvdXQpOwotIyBlbmRpZgorICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworICAgICAgICAgICAgb3V0WzBdID0gaW5bMF07CisgICAgICAgICAgICBvdXRbMV0gPSBpblsxXTsKKyAgICAgICAgICAgIG91dFsyXSA9IGluWzJdOworICAgICAgICAgICAgb3V0WzNdID0gaW5bM107CisgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaW4gPCBlbmQpIHsKKyAgICAgICAgICAgICpvdXQrKyA9ICppbisrOworICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyMgZGVmaW5lIFNXQUIyKENIKSAgKChDSCkgPDwgOCkgLyogaGlnaCBieXRlIGlzIHplcm8gKi8KICAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGluICsgX1B5X1NJWkVfUk9VTkRfRE9XTihsZW4sIDQpOwogICAgICAgICB3aGlsZSAoaW4gPCB1bnJvbGxlZF9lbmQpIHsKICAgICAgICAgICAgIG91dFswXSA9IFNXQUIyKGluWzBdKTsKQEAgLTYyNSwzNyArNjI5LDk1IEBACiAgICAgICAgICAgICBpbiArPSA0OyBvdXQgKz0gNDsKICAgICAgICAgfQogICAgICAgICB3aGlsZSAoaW4gPCBlbmQpIHsKLSAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKCppbik7Ci0gICAgICAgICAgICArK2luOworICAgICAgICAgICAgUHlfVUNTNCBjaCA9ICppbisrOworICAgICAgICAgICAgKm91dCsrID0gU1dBQjIoKFB5X1VDUzIpY2gpOwogICAgICAgICB9CisjdW5kZWYgU1dBQjIKICAgICB9CisgICAgKm91dHB0ciA9IG91dDsKKyAgICByZXR1cm4gbGVuOwogI2Vsc2UKICAgICBpZiAobmF0aXZlX29yZGVyaW5nKSB7CisjaWYgU1RSSU5HTElCX01BWF9DSEFSIDwgMHgxMDAwMAorICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworICAgICAgICAgICAgLyogY2hlY2sgaWYgYW55IGNoYXJhY3RlciBpcyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGlmICgoKGluWzBdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsxXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMl0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzNdIF4gMHhkODAwKSAmIDB4ZjgwMCkgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG91dFswXSA9IGluWzBdOworICAgICAgICAgICAgb3V0WzFdID0gaW5bMV07CisgICAgICAgICAgICBvdXRbMl0gPSBpblsyXTsKKyAgICAgICAgICAgIG91dFszXSA9IGluWzNdOworICAgICAgICAgICAgaW4gKz0gNDsgb3V0ICs9IDQ7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICB3aGlsZSAoaW4gPCBlbmQpIHsKLSAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqaW4rKzsKLSAgICAgICAgICAgIGlmIChjaCA8IDB4MTAwMDApCisgICAgICAgICAgICBQeV9VQ1M0IGNoOworICAgICAgICAgICAgY2ggPSAqaW4rKzsKKyAgICAgICAgICAgIGlmIChjaCA8IDB4ZDgwMCkKICAgICAgICAgICAgICAgICAqb3V0KysgPSBjaDsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweGUwMDApCisgICAgICAgICAgICAgICAgLyogcmVqZWN0IHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIChVK0Q4MDAtVStERkZGKSAqLworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPj0gMHgxMDAwMAorICAgICAgICAgICAgZWxzZSBpZiAoY2ggPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIG91dFswXSA9IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIG91dFsxXSA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICAgICAgb3V0ICs9IDI7CiAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqb3V0KysgPSBjaDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CisjZGVmaW5lIFNXQUIyKENIKSAgKCgoQ0gpIDw8IDgpIHwgKChDSCkgPj4gOCkpCisjaWYgU1RSSU5HTElCX01BWF9DSEFSIDwgMHgxMDAwMAorICAgICAgICBjb25zdCBTVFJJTkdMSUJfQ0hBUiAqdW5yb2xsZWRfZW5kID0gaW4gKyBfUHlfU0laRV9ST1VORF9ET1dOKGxlbiwgNCk7CisgICAgICAgIHdoaWxlIChpbiA8IHVucm9sbGVkX2VuZCkgeworICAgICAgICAgICAgLyogY2hlY2sgaWYgYW55IGNoYXJhY3RlciBpcyBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgIGlmICgoKGluWzBdIF4gMHhkODAwKSAmCisgICAgICAgICAgICAgICAgIChpblsxXSBeIDB4ZDgwMCkgJgorICAgICAgICAgICAgICAgICAoaW5bMl0gXiAweGQ4MDApICYKKyAgICAgICAgICAgICAgICAgKGluWzNdIF4gMHhkODAwKSAmIDB4ZjgwMCkgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG91dFswXSA9IFNXQUIyKGluWzBdKTsKKyAgICAgICAgICAgIG91dFsxXSA9IFNXQUIyKGluWzFdKTsKKyAgICAgICAgICAgIG91dFsyXSA9IFNXQUIyKGluWzJdKTsKKyAgICAgICAgICAgIG91dFszXSA9IFNXQUIyKGluWzNdKTsKKyAgICAgICAgICAgIGluICs9IDQ7IG91dCArPSA0OworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgd2hpbGUgKGluIDwgZW5kKSB7CiAgICAgICAgICAgICBQeV9VQ1M0IGNoID0gKmluKys7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweDEwMDAwKQorICAgICAgICAgICAgaWYgKGNoIDwgMHhkODAwKQogICAgICAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKChQeV9VQ1MyKWNoKTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweGUwMDApCisgICAgICAgICAgICAgICAgLyogcmVqZWN0IHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzIChVK0Q4MDAtVStERkZGKSAqLworICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyNpZiBTVFJJTkdMSUJfTUFYX0NIQVIgPj0gMHgxMDAwMAorICAgICAgICAgICAgZWxzZSBpZiAoY2ggPj0gMHgxMDAwMCkgewogICAgICAgICAgICAgICAgIFB5X1VDUzIgY2gxID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICAgICAgUHlfVUNTMiBjaDIgPSBQeV9VTklDT0RFX0xPV19TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgICAgIG91dFswXSA9IFNXQUIyKGNoMSk7CiAgICAgICAgICAgICAgICAgb3V0WzFdID0gU1dBQjIoY2gyKTsKICAgICAgICAgICAgICAgICBvdXQgKz0gMjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KICNlbmRpZgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpvdXQrKyA9IFNXQUIyKChQeV9VQ1MyKWNoKTsKKyAgICAgICAgfQogI3VuZGVmIFNXQUIyCisgICAgfQorICAgICpvdXRwdHIgPSBvdXQ7CisgICAgcmV0dXJuIGxlbjsKKyAgZmFpbDoKKyAgICAqb3V0cHRyID0gb3V0OworICAgIHJldHVybiBsZW4gLSAoZW5kIC0gaW4gKyAxKTsKKyNlbmRpZgogfQorI2VuZGlmCisKICNlbmRpZiAvKiBTVFJJTkdMSUJfSVNfVU5JQ09ERSAqLwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaCBiL09iamVjdHMvc3RyaW5nbGliL2VxLmgKaW5kZXggM2U1ZjUxMC4uZjhmZDM4NCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvZXEuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9lcS5oCkBAIC02LDggKzYsOCBAQAogUHlfTE9DQUxfSU5MSU5FKGludCkKIHVuaWNvZGVfZXEoUHlPYmplY3QgKmFhLCBQeU9iamVjdCAqYmIpCiB7Ci0gICAgcmVnaXN0ZXIgUHlVbmljb2RlT2JqZWN0ICphID0gKFB5VW5pY29kZU9iamVjdCAqKWFhOwotICAgIHJlZ2lzdGVyIFB5VW5pY29kZU9iamVjdCAqYiA9IChQeVVuaWNvZGVPYmplY3QgKiliYjsKKyAgICBQeVVuaWNvZGVPYmplY3QgKmEgPSAoUHlVbmljb2RlT2JqZWN0ICopYWE7CisgICAgUHlVbmljb2RlT2JqZWN0ICpiID0gKFB5VW5pY29kZU9iamVjdCAqKWJiOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShhKSA9PSAtMSB8fCBQeVVuaWNvZGVfUkVBRFkoYikgPT0gLTEpIHsKICAgICAgICAgYXNzZXJ0KDAgJiYgInVuaWNvZGVfZXEgcmVhZHkgZmFpbCIpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvZmFzdHNlYXJjaC5oCmluZGV4IDU1YWM3N2QuLmNkN2NhYzQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL2Zhc3RzZWFyY2guaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9mYXN0c2VhcmNoLmgKQEAgLTE0Miw2ICsxNDIsOCBAQAogICAgIG1hc2sgPSAwOwogCiAgICAgaWYgKG1vZGUgIT0gRkFTVF9SU0VBUkNIKSB7CisgICAgICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICpzcyA9IHMgKyBtIC0gMTsKKyAgICAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnBwID0gcCArIG0gLSAxOwogCiAgICAgICAgIC8qIGNyZWF0ZSBjb21wcmVzc2VkIGJveWVyLW1vb3JlIGRlbHRhIDEgdGFibGUgKi8KIApAQCAtMTU2LDcgKzE1OCw3IEBACiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8PSB3OyBpKyspIHsKICAgICAgICAgICAgIC8qIG5vdGU6IHVzaW5nIG1sYXN0IGluIHRoZSBza2lwIHBhdGggc2xvd3MgdGhpbmdzIGRvd24gb24geDg2ICovCi0gICAgICAgICAgICBpZiAoc1tpK20tMV0gPT0gcFttLTFdKSB7CisgICAgICAgICAgICBpZiAoc3NbaV0gPT0gcHBbMF0pIHsKICAgICAgICAgICAgICAgICAvKiBjYW5kaWRhdGUgbWF0Y2ggKi8KICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbWxhc3Q7IGorKykKICAgICAgICAgICAgICAgICAgICAgaWYgKHNbaStqXSAhPSBwW2pdKQpAQCAtMTcyLDEzICsxNzQsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8qIG1pc3M6IGNoZWNrIGlmIG5leHQgY2hhcmFjdGVyIGlzIHBhcnQgb2YgcGF0dGVybiAqLwotICAgICAgICAgICAgICAgIGlmICghU1RSSU5HTElCX0JMT09NKG1hc2ssIHNbaSttXSkpCisgICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc3NbaSsxXSkpCiAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgbTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGkgPSBpICsgc2tpcDsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogc2tpcDogY2hlY2sgaWYgbmV4dCBjaGFyYWN0ZXIgaXMgcGFydCBvZiBwYXR0ZXJuICovCi0gICAgICAgICAgICAgICAgaWYgKCFTVFJJTkdMSUJfQkxPT00obWFzaywgc1tpK21dKSkKKyAgICAgICAgICAgICAgICBpZiAoIVNUUklOR0xJQl9CTE9PTShtYXNrLCBzc1tpKzFdKSkKICAgICAgICAgICAgICAgICAgICAgaSA9IGkgKyBtOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmggYi9PYmplY3RzL3N0cmluZ2xpYi9maW5kX21heF9jaGFyLmgKaW5kZXggMDY1NTljOC4uZWIzZmU4OCAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaApAQCAtMjQsNyArMjQsNyBAQAogICAgIHdoaWxlIChwIDwgZW5kKSB7CiAgICAgICAgIGlmIChfUHlfSVNfQUxJR05FRChwLCBTSVpFT0ZfTE9ORykpIHsKICAgICAgICAgICAgIC8qIEhlbHAgcmVnaXN0ZXIgYWxsb2NhdGlvbiAqLwotICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqX3AgPSBwOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqX3AgPSBwOwogICAgICAgICAgICAgd2hpbGUgKF9wIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIFVDUzFfQVNDSUlfQ0hBUl9NQVNLKQpAQCAtNjYsNyArNjYsNyBAQAogI2Vsc2UKICNlcnJvciBJbnZhbGlkIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiAobXVzdCBiZSAxLCAyIG9yIDQpCiAjZW5kaWYKLSAgICByZWdpc3RlciBQeV9VQ1M0IG1hc2s7CisgICAgUHlfVUNTNCBtYXNrOwogICAgIFB5X3NzaXplX3QgbiA9IGVuZCAtIGJlZ2luOwogICAgIGNvbnN0IFNUUklOR0xJQl9DSEFSICpwID0gYmVnaW47CiAgICAgY29uc3QgU1RSSU5HTElCX0NIQVIgKnVucm9sbGVkX2VuZCA9IGJlZ2luICsgX1B5X1NJWkVfUk9VTkRfRE9XTihuLCA0KTsKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaCBiL09iamVjdHMvc3RyaW5nbGliL2pvaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmY4MWJlCi0tLSAvZGV2L251bGwKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvam9pbi5oCkBAIC0wLDAgKzEsMTQwIEBACisvKiBzdHJpbmdsaWI6IGJ5dGVzIGpvaW5pbmcgaW1wbGVtZW50YXRpb24gKi8KKworI2lmIFNUUklOR0xJQl9TSVpFT0ZfQ0hBUiAhPSAxCisjZXJyb3Igam9pbi5oIG9ubHkgY29tcGF0aWJsZSB3aXRoIGJ5dGUtd2lzZSBzdHJpbmdzCisjZW5kaWYKKworUHlfTE9DQUxfSU5MSU5FKFB5T2JqZWN0ICopCitTVFJJTkdMSUIoYnl0ZXNfam9pbikoUHlPYmplY3QgKnNlcCwgUHlPYmplY3QgKml0ZXJhYmxlKQoreworICAgIGNoYXIgKnNlcHN0ciA9IFNUUklOR0xJQl9TVFIoc2VwKTsKKyAgICBjb25zdCBQeV9zc2l6ZV90IHNlcGxlbiA9IFNUUklOR0xJQl9MRU4oc2VwKTsKKyAgICBQeU9iamVjdCAqcmVzID0gTlVMTDsKKyAgICBjaGFyICpwOworICAgIFB5X3NzaXplX3Qgc2VxbGVuID0gMDsKKyAgICBQeV9zc2l6ZV90IHN6ID0gMDsKKyAgICBQeV9zc2l6ZV90IGksIG5idWZzOworICAgIFB5T2JqZWN0ICpzZXEsICppdGVtOworICAgIFB5X2J1ZmZlciAqYnVmZmVycyA9IE5VTEw7CisjZGVmaW5lIE5CX1NUQVRJQ19CVUZGRVJTIDEwCisgICAgUHlfYnVmZmVyIHN0YXRpY19idWZmZXJzW05CX1NUQVRJQ19CVUZGRVJTXTsKKworICAgIHNlcSA9IFB5U2VxdWVuY2VfRmFzdChpdGVyYWJsZSwgImNhbiBvbmx5IGpvaW4gYW4gaXRlcmFibGUiKTsKKyAgICBpZiAoc2VxID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc2VxbGVuID0gUHlTZXF1ZW5jZV9GYXN0X0dFVF9TSVpFKHNlcSk7CisgICAgaWYgKHNlcWxlbiA9PSAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICByZXR1cm4gU1RSSU5HTElCX05FVyhOVUxMLCAwKTsKKyAgICB9CisjaWZuZGVmIFNUUklOR0xJQl9NVVRBQkxFCisgICAgaWYgKHNlcWxlbiA9PSAxKSB7CisgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCAwKTsKKyAgICAgICAgaWYgKFNUUklOR0xJQl9DSEVDS19FWEFDVChpdGVtKSkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICByZXR1cm4gaXRlbTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGlmIChzZXFsZW4gPiBOQl9TVEFUSUNfQlVGRkVSUykgeworICAgICAgICBidWZmZXJzID0gUHlNZW1fTkVXKFB5X2J1ZmZlciwgc2VxbGVuKTsKKyAgICAgICAgaWYgKGJ1ZmZlcnMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHNlcSk7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGJ1ZmZlcnMgPSBzdGF0aWNfYnVmZmVyczsKKyAgICB9CisKKyAgICAvKiBIZXJlIGlzIHRoZSBnZW5lcmFsIGNhc2UuICBEbyBhIHByZS1wYXNzIHRvIGZpZ3VyZSBvdXQgdGhlIHRvdGFsCisgICAgICogYW1vdW50IG9mIHNwYWNlIHdlJ2xsIG5lZWQgKHN6KSwgYW5kIHNlZSB3aGV0aGVyIGFsbCBhcmd1bWVudHMgYXJlCisgICAgICogYnl0ZXMtbGlrZS4KKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwLCBuYnVmcyA9IDA7IGkgPCBzZXFsZW47IGkrKykgeworICAgICAgICBQeV9zc2l6ZV90IGl0ZW1sZW47CisgICAgICAgIGl0ZW0gPSBQeVNlcXVlbmNlX0Zhc3RfR0VUX0lURU0oc2VxLCBpKTsKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdChpdGVtKSkgeworICAgICAgICAgICAgLyogRmFzdCBwYXRoLiAqLworICAgICAgICAgICAgUHlfSU5DUkVGKGl0ZW0pOworICAgICAgICAgICAgYnVmZmVyc1tpXS5vYmogPSBpdGVtOworICAgICAgICAgICAgYnVmZmVyc1tpXS5idWYgPSBQeUJ5dGVzX0FTX1NUUklORyhpdGVtKTsKKyAgICAgICAgICAgIGJ1ZmZlcnNbaV0ubGVuID0gUHlCeXRlc19HRVRfU0laRShpdGVtKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoaXRlbSwgJmJ1ZmZlcnNbaV0sIFB5QlVGX1NJTVBMRSkgIT0gMCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAic2VxdWVuY2UgaXRlbSAlemQ6IGV4cGVjdGVkIGEgYnl0ZXMtbGlrZSBvYmplY3QsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJS44MHMgZm91bmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIGksIFB5X1RZUEUoaXRlbSktPnRwX25hbWUpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgICAgICBuYnVmcyA9IGkgKyAxOyAgLyogZm9yIGVycm9yIGNsZWFudXAgKi8KKyAgICAgICAgaXRlbWxlbiA9IGJ1ZmZlcnNbaV0ubGVuOworICAgICAgICBpZiAoaXRlbWxlbiA+IFBZX1NTSVpFX1RfTUFYIC0gc3opIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICAgIHN6ICs9IGl0ZW1sZW47CisgICAgICAgIGlmIChpICE9IDApIHsKKyAgICAgICAgICAgIGlmIChzZXBsZW4gPiBQWV9TU0laRV9UX01BWCAtIHN6KSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJqb2luKCkgcmVzdWx0IGlzIHRvbyBsb25nIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN6ICs9IHNlcGxlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VxbGVuICE9IFB5U2VxdWVuY2VfRmFzdF9HRVRfU0laRShzZXEpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfUnVudGltZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXF1ZW5jZSBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIEFsbG9jYXRlIHJlc3VsdCBzcGFjZS4gKi8KKyAgICByZXMgPSBTVFJJTkdMSUJfTkVXKE5VTEwsIHN6KTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAvKiBDYXRlbmF0ZSBldmVyeXRoaW5nLiAqLworICAgIHAgPSBTVFJJTkdMSUJfU1RSKHJlcyk7CisgICAgaWYgKCFzZXBsZW4pIHsKKyAgICAgICAgLyogZmFzdCBwYXRoICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG4gPSBidWZmZXJzW2ldLmxlbjsKKyAgICAgICAgICAgIGNoYXIgKnEgPSBidWZmZXJzW2ldLmJ1ZjsKKyAgICAgICAgICAgIFB5X01FTUNQWShwLCBxLCBuKTsKKyAgICAgICAgICAgIHAgKz0gbjsKKyAgICAgICAgfQorICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGZvciAoaSA9IDA7IGkgPCBuYnVmczsgaSsrKSB7CisgICAgICAgIFB5X3NzaXplX3QgbjsKKyAgICAgICAgY2hhciAqcTsKKyAgICAgICAgaWYgKGkpIHsKKyAgICAgICAgICAgIFB5X01FTUNQWShwLCBzZXBzdHIsIHNlcGxlbik7CisgICAgICAgICAgICBwICs9IHNlcGxlbjsKKyAgICAgICAgfQorICAgICAgICBuID0gYnVmZmVyc1tpXS5sZW47CisgICAgICAgIHEgPSBidWZmZXJzW2ldLmJ1ZjsKKyAgICAgICAgUHlfTUVNQ1BZKHAsIHEsIG4pOworICAgICAgICBwICs9IG47CisgICAgfQorICAgIGdvdG8gZG9uZTsKKworZXJyb3I6CisgICAgcmVzID0gTlVMTDsKK2RvbmU6CisgICAgUHlfREVDUkVGKHNlcSk7CisgICAgZm9yIChpID0gMDsgaSA8IG5idWZzOyBpKyspCisgICAgICAgIFB5QnVmZmVyX1JlbGVhc2UoJmJ1ZmZlcnNbaV0pOworICAgIGlmIChidWZmZXJzICE9IHN0YXRpY19idWZmZXJzKQorICAgICAgICBQeU1lbV9GUkVFKGJ1ZmZlcnMpOworICAgIHJldHVybiByZXM7Cit9CisKKyN1bmRlZiBOQl9TVEFUSUNfQlVGRkVSUwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvcGFydGl0aW9uLmggYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAppbmRleCA0MGNiNTEyLi5lZDMyYTZmIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9wYXJ0aXRpb24uaApAQCAtMjksNiArMjksMTEgQEAKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDAsIFNUUklOR0xJQl9ORVcoc3RyLCBzdHJfbGVuKSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAxLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDIsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOworCisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob3V0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAjZWxzZQogICAgICAgICBQeV9JTkNSRUYoc3RyX29iaik7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBzdHJfb2JqKTsKQEAgLTc5LDYgKzg0LDExIEBACiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCBTVFJJTkdMSUJfTkVXKE5VTEwsIDApKTsKICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTShvdXQsIDEsIFNUUklOR0xJQl9ORVcoTlVMTCwgMCkpOwogICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKG91dCwgMiwgU1RSSU5HTElCX05FVyhzdHIsIHN0cl9sZW4pKTsKKworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG91dCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogI2Vsc2UKICAgICAgICAgUHlfSU5DUkVGKFNUUklOR0xJQl9FTVBUWSk7CiAgICAgICAgIFB5VHVwbGVfU0VUX0lURU0ob3V0LCAwLCAoUHlPYmplY3QqKSBTVFJJTkdMSUJfRU1QVFkpOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvcmVwbGFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMzE4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi9yZXBsYWNlLmgKQEAgLTAsMCArMSw1MyBAQAorLyogc3RyaW5nbGliOiByZXBsYWNlIGltcGxlbWVudGF0aW9uICovCisKKyNpZm5kZWYgU1RSSU5HTElCX0ZBU1RTRUFSQ0hfSAorI2Vycm9yIG11c3QgaW5jbHVkZSAic3RyaW5nbGliL2Zhc3RzZWFyY2guaCIgYmVmb3JlIGluY2x1ZGluZyB0aGlzIG1vZHVsZQorI2VuZGlmCisKK1B5X0xPQ0FMX0lOTElORSh2b2lkKQorU1RSSU5HTElCKHJlcGxhY2VfMWNoYXJfaW5wbGFjZSkoU1RSSU5HTElCX0NIQVIqIHMsIFNUUklOR0xJQl9DSEFSKiBlbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9VQ1M0IHUxLCBQeV9VQ1M0IHUyLCBQeV9zc2l6ZV90IG1heGNvdW50KQoreworICAgICpzID0gdTI7CisgICAgd2hpbGUgKC0tbWF4Y291bnQgJiYgKytzICE9IGVuZCkgeworICAgICAgICAvKiBGaW5kIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSByZXBsYWNlZC4KKworICAgICAgICAgICBJZiBpdCBvY2N1cnMgb2Z0ZW4sIGl0IGlzIGZhc3RlciB0byBzY2FuIGZvciBpdCB1c2luZyBhbiBpbmxpbmUKKyAgICAgICAgICAgbG9vcC4gIElmIGl0IG9jY3VycyBzZWxkb20sIGl0IGlzIGZhc3RlciB0byBzY2FuIGZvciBpdCB1c2luZyBhCisgICAgICAgICAgIGZ1bmN0aW9uIGNhbGw7IHRoZSBvdmVyaGVhZCBvZiB0aGUgZnVuY3Rpb24gY2FsbCBpcyBhbW9ydGl6ZWQKKyAgICAgICAgICAgYWNyb3NzIHRoZSBtYW55IGNoYXJhY3RlcnMgdGhhdCBjYWxsIGNvdmVycy4gIFdlIHN0YXJ0IHdpdGggYW4KKyAgICAgICAgICAgaW5saW5lIGxvb3AgYW5kIHVzZSBhIGhldXJpc3RpYyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBmYWxsIGJhY2sKKyAgICAgICAgICAgdG8gYSBmdW5jdGlvbiBjYWxsLiAqLworICAgICAgICBpZiAoKnMgIT0gdTEpIHsKKyAgICAgICAgICAgIGludCBhdHRlbXB0cyA9IDEwOworICAgICAgICAgICAgLyogc2VhcmNoIHUxIGluIGEgZHVtbXkgbG9vcCAqLworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoKytzID09IGVuZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGlmICgqcyA9PSB1MSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCEtLWF0dGVtcHRzKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIGlmIHUxIHdhcyBub3QgZm91bmQgZm9yIGF0dGVtcHRzIGl0ZXJhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgIHVzZSBGQVNUU0VBUkNIKCkgb3IgbWVtY2hyKCkgKi8KKyNpZiBTVFJJTkdMSUJfU0laRU9GX0NIQVIgPT0gMQorICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIHMgPSBtZW1jaHIocywgdTEsIGVuZCAtIHMpOworICAgICAgICAgICAgICAgICAgICBpZiAocyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICAgICAgICAgICAgICBTVFJJTkdMSUJfQ0hBUiBjaDEgPSAoU1RSSU5HTElCX0NIQVIpIHUxOworICAgICAgICAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICAgICAgICAgIGkgPSBGQVNUU0VBUkNIKHMsIGVuZCAtIHMsICZjaDEsIDEsIDAsIEZBU1RfU0VBUkNIKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBzICs9IGk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgLyogcmVzdGFydCB0aGUgZHVtbXkgbG9vcCAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKnMgPSB1MjsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3BsaXQuaAppbmRleCA5NDdkZDI4Li4zMWY3N2E3IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9zcGxpdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3NwbGl0LmgKQEAgLTM0NSw4ICszNDUsOCBAQAogICAgICAgIGFuZCB0aGUgYXBwZW5kcyBvbmx5IGRvbmUgd2hlbiB0aGUgcHJlYWxsb2MgYnVmZmVyIGlzIGZ1bGwuCiAgICAgICAgVGhhdCdzIHRvbyBtdWNoIHdvcmsgZm9yIGxpdHRsZSBnYWluLiovCiAKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBqOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGo7CiAgICAgUHlPYmplY3QgKmxpc3QgPSBQeUxpc3RfTmV3KDApOwogICAgIFB5T2JqZWN0ICpzdWI7CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaCBiL09iamVjdHMvc3RyaW5nbGliL3N0cmluZ2RlZnMuaAppbmRleCA3YmI5MWE3Li5jZTI3ZjNlIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi9zdHJpbmdkZWZzLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvc3RyaW5nZGVmcy5oCkBAIC0yMSw3ICsyMSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORwogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlCeXRlc19HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZQotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgX1B5Qnl0ZXNfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeUJ5dGVzX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeUJ5dGVzX0NoZWNrRXhhY3QKICNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1N0cgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdHJhbnNtb2dyaWZ5LmggYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAppbmRleCBjYmQ3MTQ0Li5jYWU2ZWExIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi90cmFuc21vZ3JpZnkuaApAQCAtNSwyMSArNSwyMyBAQAogICAgc2hhcmVkIGNvZGUgaW4gYnl0ZXNfbWV0aG9kcy5jIHRvIGN1dCBkb3duIG9uIGR1cGxpY2F0ZSBjb2RlIGJsb2F0LiAgKi8KIAogUHlEb2NfU1RSVkFSKGV4cGFuZHRhYnNfX2RvY19fLAotIkIuZXhwYW5kdGFicyhbdGFic2l6ZV0pIC0+IGNvcHkgb2YgQlxuXAorIkIuZXhwYW5kdGFicyh0YWJzaXplPTgpIC0+IGNvcHkgb2YgQlxuXAogXG5cCiBSZXR1cm4gYSBjb3B5IG9mIEIgd2hlcmUgYWxsIHRhYiBjaGFyYWN0ZXJzIGFyZSBleHBhbmRlZCB1c2luZyBzcGFjZXMuXG5cCiBJZiB0YWJzaXplIGlzIG5vdCBnaXZlbiwgYSB0YWIgc2l6ZSBvZiA4IGNoYXJhY3RlcnMgaXMgYXNzdW1lZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0Kgotc3RyaW5nbGliX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorc3RyaW5nbGliX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBjb25zdCBjaGFyICplLCAqcDsKICAgICBjaGFyICpxOwogICAgIFB5X3NzaXplX3QgaSwgajsKICAgICBQeU9iamVjdCAqdTsKKyAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7InRhYnNpemUiLCAwfTsKICAgICBpbnQgdGFic2l6ZSA9IDg7CiAKLSAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgInxpOmV4cGFuZHRhYnMiLCAmdGFic2l6ZSkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgInxpOmV4cGFuZHRhYnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJnRhYnNpemUpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIEZpcnN0IHBhc3M6IGRldGVybWluZSBzaXplIG9mIG91dHB1dCBzdHJpbmcgKi8KZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaCBiL09iamVjdHMvc3RyaW5nbGliL3VjczFsaWIuaAppbmRleCBlOGM2ZmNiLi5jZTFlYjU3IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91Y3MxbGliLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMWxpYi5oCkBAIC0xOSw3ICsxOSw2IEBACiAjZGVmaW5lIFNUUklOR0xJQl9TVFIgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQQogI2RlZmluZSBTVFJJTkdMSUJfTEVOICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgKICNkZWZpbmUgU1RSSU5HTElCX05FVyAgICAgICAgICAgIF9QeVVuaWNvZGVfRnJvbVVDUzEKLSNkZWZpbmUgU1RSSU5HTElCX1JFU0laRSAgICAgICAgIG5vdF9zdXBwb3J0ZWQKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLICAgICAgICAgIFB5VW5pY29kZV9DaGVjawogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0tfRVhBQ1QgICAgUHlVbmljb2RlX0NoZWNrRXhhY3QKIApkaWZmIC0tZ2l0IGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdWNzMmxpYi5oCmluZGV4IDQ1ZTU3MjkuLmY5MDBjYjYgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VjczJsaWIuaAorKysgYi9PYmplY3RzL3N0cmluZ2xpYi91Y3MybGliLmgKQEAgLTE5LDcgKzE5LDYgQEAKICNkZWZpbmUgU1RSSU5HTElCX1NUUiAgICAgICAgICAgIFB5VW5pY29kZV8yQllURV9EQVRBCiAjZGVmaW5lIFNUUklOR0xJQl9MRU4gICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSAogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgX1B5VW5pY29kZV9Gcm9tVUNTMgotI2RlZmluZSBTVFJJTkdMSUJfUkVTSVpFICAgICAgICAgbm90X3N1cHBvcnRlZAogI2RlZmluZSBTVFJJTkdMSUJfQ0hFQ0sgICAgICAgICAgUHlVbmljb2RlX0NoZWNrCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDS19FWEFDVCAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdAogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmggYi9PYmplY3RzL3N0cmluZ2xpYi91Y3M0bGliLmgKaW5kZXggNjQ3YTI3ZS4uODZhNDgwZiAxMDA2NDQKLS0tIGEvT2JqZWN0cy9zdHJpbmdsaWIvdWNzNGxpYi5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VjczRsaWIuaApAQCAtMTksNyArMTksNiBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlXzRCWVRFX0RBVEEKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RICiAjZGVmaW5lIFNUUklOR0xJQl9ORVcgICAgICAgICAgICBfUHlVbmljb2RlX0Zyb21VQ1M0Ci0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBub3Rfc3VwcG9ydGVkCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKZGlmZiAtLWdpdCBhL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmggYi9PYmplY3RzL3N0cmluZ2xpYi91bmRlZi5oCmluZGV4IDAzMTE3ZWMuLmY5ZDNmMWQgMTAwNjQ0Ci0tLSBhL09iamVjdHMvc3RyaW5nbGliL3VuZGVmLmgKKysrIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5kZWYuaApAQCAtNiw3ICs2LDYgQEAKICN1bmRlZiAgU1RSSU5HTElCX1NUUgogI3VuZGVmICBTVFJJTkdMSUJfTEVOCiAjdW5kZWYgIFNUUklOR0xJQl9ORVcKLSN1bmRlZiAgU1RSSU5HTElCX1JFU0laRQogI3VuZGVmICBfUHlfSW5zZXJ0VGhvdXNhbmRzR3JvdXBpbmcKICN1bmRlZiBTVFJJTkdMSUJfSVNfVU5JQ09ERQogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZV9mb3JtYXQuaAppbmRleCBkNDcxOWE1Li5hZWMyMjFhIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlX2Zvcm1hdC5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVfZm9ybWF0LmgKQEAgLTU0Myw3ICs1NDMsNyBAQAogCiBzdGF0aWMgaW50CiBwYXJzZV9maWVsZChTdWJTdHJpbmcgKnN0ciwgU3ViU3RyaW5nICpmaWVsZF9uYW1lLCBTdWJTdHJpbmcgKmZvcm1hdF9zcGVjLAotICAgICAgICAgICAgUHlfVUNTNCAqY29udmVyc2lvbikKKyAgICAgICAgICAgIGludCAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nLCBQeV9VQ1M0ICpjb252ZXJzaW9uKQogewogICAgIC8qIE5vdGUgdGhpcyBmdW5jdGlvbiB3b3JrcyBpZiB0aGUgZmllbGQgbmFtZSBpcyB6ZXJvIGxlbmd0aCwKICAgICAgICB3aGljaCBpcyBnb29kLiAgWmVybyBsZW5ndGggZmllbGQgbmFtZXMgYXJlIGhhbmRsZWQgbGF0ZXIsIGluCkBAIC01NjEsNiArNTYxLDE1IEBACiAgICAgZmllbGRfbmFtZS0+c3RhcnQgPSBzdHItPnN0YXJ0OwogICAgIHdoaWxlIChzdHItPnN0YXJ0IDwgc3RyLT5lbmQpIHsKICAgICAgICAgc3dpdGNoICgoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKykpKSB7CisgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJ1bmV4cGVjdGVkICd7JyBpbiBmaWVsZCBuYW1lIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICBmb3IgKDsgc3RyLT5zdGFydCA8IHN0ci0+ZW5kOyBzdHItPnN0YXJ0KyspCisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQpID09ICddJykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnfSc6CiAgICAgICAgIGNhc2UgJzonOgogICAgICAgICBjYXNlICchJzoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTcwLDQxICs1NzksNjIgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydCAtIDE7CiAgICAgaWYgKGMgPT0gJyEnIHx8IGMgPT0gJzonKSB7CisgICAgICAgIFB5X3NzaXplX3QgY291bnQ7CiAgICAgICAgIC8qIHdlIGhhdmUgYSBmb3JtYXQgc3BlY2lmaWVyIGFuZC9vciBhIGNvbnZlcnNpb24gKi8KICAgICAgICAgLyogZG9uJ3QgaW5jbHVkZSB0aGUgbGFzdCBjaGFyYWN0ZXIgKi8KLSAgICAgICAgZmllbGRfbmFtZS0+ZW5kID0gc3RyLT5zdGFydC0xOwotCi0gICAgICAgIC8qIHRoZSBmb3JtYXQgc3BlY2lmaWVyIGlzIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcgKi8KLSAgICAgICAgZm9ybWF0X3NwZWMtPnN0ciA9IHN0ci0+c3RyOwotICAgICAgICBmb3JtYXRfc3BlYy0+c3RhcnQgPSBzdHItPnN0YXJ0OwotICAgICAgICBmb3JtYXRfc3BlYy0+ZW5kID0gc3RyLT5lbmQ7CiAKICAgICAgICAgLyogc2VlIGlmIHRoZXJlJ3MgYSBjb252ZXJzaW9uIHNwZWNpZmllciAqLwogICAgICAgICBpZiAoYyA9PSAnIScpIHsKICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYW5vdGhlciBjaGFyYWN0ZXIgcHJlc2VudCAqLwotICAgICAgICAgICAgaWYgKGZvcm1hdF9zcGVjLT5zdGFydCA+PSBmb3JtYXRfc3BlYy0+ZW5kKSB7CisgICAgICAgICAgICBpZiAoc3RyLT5zdGFydCA+PSBzdHItPmVuZCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kIG9mIGZvcm1hdCB3aGlsZSBsb29raW5nIGZvciBjb252ZXJzaW9uICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVuZCBvZiBzdHJpbmcgd2hpbGUgbG9va2luZyBmb3IgY29udmVyc2lvbiAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzcGVjaWZpZXIiKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpjb252ZXJzaW9uID0gUHlVbmljb2RlX1JFQURfQ0hBUihmb3JtYXRfc3BlYy0+c3RyLCBmb3JtYXRfc3BlYy0+c3RhcnQrKyk7CisgICAgICAgICAgICAqY29udmVyc2lvbiA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKyk7CiAKLSAgICAgICAgICAgIC8qIGlmIHRoZXJlIGlzIGFub3RoZXIgY2hhcmFjdGVyLCBpdCBtdXN0IGJlIGEgY29sb24gKi8KLSAgICAgICAgICAgIGlmIChmb3JtYXRfc3BlYy0+c3RhcnQgPCBmb3JtYXRfc3BlYy0+ZW5kKSB7Ci0gICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoZm9ybWF0X3NwZWMtPnN0ciwgZm9ybWF0X3NwZWMtPnN0YXJ0KyspOworICAgICAgICAgICAgaWYgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgeworICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0ci0+c3RyLCBzdHItPnN0YXJ0KyspOworICAgICAgICAgICAgICAgIGlmIChjID09ICd9JykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICAgICAgaWYgKGMgIT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICc6JyBhZnRlciBmb3JtYXQgc3BlY2lmaWVyIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJzonIGFmdGVyIGNvbnZlcnNpb24gc3BlY2lmaWVyIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBmb3JtYXRfc3BlYy0+c3RyID0gc3RyLT5zdHI7CisgICAgICAgIGZvcm1hdF9zcGVjLT5zdGFydCA9IHN0ci0+c3RhcnQ7CisgICAgICAgIGNvdW50ID0gMTsKKyAgICAgICAgd2hpbGUgKHN0ci0+c3RhcnQgPCBzdHItPmVuZCkgeworICAgICAgICAgICAgc3dpdGNoICgoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyLT5zdHIsIHN0ci0+c3RhcnQrKykpKSB7CisgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgICAgICAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nID0gMTsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICAgICAgY291bnQtLTsKKyAgICAgICAgICAgICAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBmb3JtYXRfc3BlYy0+ZW5kID0gc3RyLT5zdGFydCAtIDE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVubWF0Y2hlZCAneycgaW4gZm9ybWF0IHNwZWMiKTsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgLyogZW5kIG9mIHN0cmluZywgdGhlcmUncyBubyBmb3JtYXRfc3BlYyBvciBjb252ZXJzaW9uICovCi0gICAgICAgIGZpZWxkX25hbWUtPmVuZCA9IHN0ci0+c3RhcnQ7CisgICAgZWxzZSBpZiAoYyAhPSAnfScpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJleHBlY3RlZCAnfScgYmVmb3JlIGVuZCBvZiBzdHJpbmciKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgcmV0dXJuIDE7CiB9CkBAIC02MzgsMTAgKzY2OCw5IEBACiAgICAgICAgICAgICAgICAgICAgIFN1YlN0cmluZyAqZm9ybWF0X3NwZWMsIFB5X1VDUzQgKmNvbnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgIGludCAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nKQogewotICAgIGludCBhdF9lbmQsIGhpdF9mb3JtYXRfc3BlYzsKKyAgICBpbnQgYXRfZW5kOwogICAgIFB5X1VDUzQgYyA9IDA7CiAgICAgUHlfc3NpemVfdCBzdGFydDsKLSAgICBpbnQgY291bnQ7CiAgICAgUHlfc3NpemVfdCBsZW47CiAgICAgaW50IG1hcmt1cF9mb2xsb3dzID0gMDsKIApAQCAtNzEzLDUyICs3NDIsMTIgQEAKICAgICBpZiAoIW1hcmt1cF9mb2xsb3dzKQogICAgICAgICByZXR1cm4gMjsKIAotICAgIC8qIHRoaXMgaXMgbWFya3VwLCBmaW5kIHRoZSBlbmQgb2YgdGhlIHN0cmluZyBieSBjb3VudGluZyBuZXN0ZWQKLSAgICAgICBicmFjZXMuICBub3RlIHRoYXQgdGhpcyBwcm9oaWJpdHMgZXNjYXBlZCBicmFjZXMsIHNvIHRoYXQKLSAgICAgICBmb3JtYXRfc3BlY3MgY2Fubm90IGhhdmUgYnJhY2VzIGluIHRoZW0uICovCisgICAgLyogdGhpcyBpcyBtYXJrdXA7IHBhcnNlIHRoZSBmaWVsZCAqLwogICAgICpmaWVsZF9wcmVzZW50ID0gMTsKLSAgICBjb3VudCA9IDE7Ci0KLSAgICBzdGFydCA9IHNlbGYtPnN0ci5zdGFydDsKLQotICAgIC8qIHdlIGtub3cgd2UgY2FuJ3QgaGF2ZSBhIHplcm8gbGVuZ3RoIHN0cmluZywgc28gZG9uJ3Qgd29ycnkKLSAgICAgICBhYm91dCB0aGF0IGNhc2UgKi8KLSAgICBoaXRfZm9ybWF0X3NwZWMgPSAwOwotICAgIHdoaWxlIChzZWxmLT5zdHIuc3RhcnQgPCBzZWxmLT5zdHIuZW5kKSB7Ci0gICAgICAgIHN3aXRjaCAoYyA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc2VsZi0+c3RyLnN0ciwgc2VsZi0+c3RyLnN0YXJ0KyspKSB7Ci0gICAgICAgIGNhc2UgJzonOgotICAgICAgICAgICAgaWYgKCFoaXRfZm9ybWF0X3NwZWMpIHsKLSAgICAgICAgICAgICAgICBjb3VudCA9IDE7Ci0gICAgICAgICAgICAgICAgaGl0X2Zvcm1hdF9zcGVjID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICd7JzoKLSAgICAgICAgICAgIC8qIHRoZSBmb3JtYXQgc3BlYyBuZWVkcyB0byBiZSByZWN1cnNpdmVseSBleHBhbmRlZC4KLSAgICAgICAgICAgICAgIHRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCBhbmQgbm90IHN0cmljdGx5IG5lZWRlZCAqLwotICAgICAgICAgICAgaWYgKGhpdF9mb3JtYXRfc3BlYykKLSAgICAgICAgICAgICAgICAqZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nID0gMTsKLSAgICAgICAgICAgIGNvdW50Kys7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnfSc6Ci0gICAgICAgICAgICBjb3VudC0tOwotICAgICAgICAgICAgaWYgKGNvdW50IDw9IDApIHsKLSAgICAgICAgICAgICAgICAvKiB3ZSdyZSBkb25lLiAgcGFyc2UgYW5kIGdldCBvdXQgKi8KLSAgICAgICAgICAgICAgICBTdWJTdHJpbmcgczsKLQotICAgICAgICAgICAgICAgIFN1YlN0cmluZ19pbml0KCZzLCBzZWxmLT5zdHIuc3RyLCBzdGFydCwgc2VsZi0+c3RyLnN0YXJ0IC0gMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHBhcnNlX2ZpZWxkKCZzLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywgY29udmVyc2lvbikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgICAgICAgICAvKiBzdWNjZXNzICovCi0gICAgICAgICAgICAgICAgcmV0dXJuIDI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qIGVuZCBvZiBzdHJpbmcgd2hpbGUgc2VhcmNoaW5nIGZvciBtYXRjaGluZyAnfScgKi8KLSAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInVubWF0Y2hlZCAneycgaW4gZm9ybWF0Iik7Ci0gICAgcmV0dXJuIDA7CisgICAgaWYgKCFwYXJzZV9maWVsZCgmc2VsZi0+c3RyLCBmaWVsZF9uYW1lLCBmb3JtYXRfc3BlYywKKyAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9zcGVjX25lZWRzX2V4cGFuZGluZywgY29udmVyc2lvbikpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiAyOwogfQogCiAKQEAgLTg3NywyNSArODY2LDE5IEBACiAgICAgU3ViU3RyaW5nIGxpdGVyYWw7CiAgICAgU3ViU3RyaW5nIGZpZWxkX25hbWU7CiAgICAgU3ViU3RyaW5nIGZvcm1hdF9zcGVjOwotICAgIFB5X1VDUzQgY29udmVyc2lvbiwgbWF4Y2hhcjsKLSAgICBQeV9zc2l6ZV90IHN1YmxlbjsKLSAgICBpbnQgZXJyOworICAgIFB5X1VDUzQgY29udmVyc2lvbjsKIAogICAgIE1hcmt1cEl0ZXJhdG9yX2luaXQoJml0ZXIsIGlucHV0LT5zdHIsIGlucHV0LT5zdGFydCwgaW5wdXQtPmVuZCk7CiAgICAgd2hpbGUgKChyZXN1bHQgPSBNYXJrdXBJdGVyYXRvcl9uZXh0KCZpdGVyLCAmbGl0ZXJhbCwgJmZpZWxkX3ByZXNlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmaWVsZF9uYW1lLCAmZm9ybWF0X3NwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb252ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9ybWF0X3NwZWNfbmVlZHNfZXhwYW5kaW5nKSkgPT0gMikgewotICAgICAgICBzdWJsZW4gPSBsaXRlcmFsLmVuZCAtIGxpdGVyYWwuc3RhcnQ7Ci0gICAgICAgIGlmIChzdWJsZW4pIHsKLSAgICAgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKGxpdGVyYWwuc3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdGFydCwgbGl0ZXJhbC5lbmQpOwotICAgICAgICAgICAgZXJyID0gX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgc3VibGVuLCBtYXhjaGFyKTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gLTEpCisgICAgICAgIGlmIChsaXRlcmFsLmVuZCAhPSBsaXRlcmFsLnN0YXJ0KSB7CisgICAgICAgICAgICBpZiAoIWZpZWxkX3ByZXNlbnQgJiYgaXRlci5zdHIuc3RhcnQgPT0gaXRlci5zdHIuZW5kKQorICAgICAgICAgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMDsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3Vic3RyaW5nKHdyaXRlciwgbGl0ZXJhbC5zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXRlcmFsLnN0YXJ0LCBsaXRlcmFsLmVuZCkgPCAwKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGl0ZXJhbC5zdHIsIGxpdGVyYWwuc3RhcnQsIHN1Ymxlbik7Ci0gICAgICAgICAgICB3cml0ZXItPnBvcyArPSBzdWJsZW47CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZmllbGRfcHJlc2VudCkgewpAQCAtOTIwLDcgKzkwMyw2IEBACiAgICAgICAgICAgICAgaW50IHJlY3Vyc2lvbl9kZXB0aCwgQXV0b051bWJlciAqYXV0b19udW1iZXIpCiB7CiAgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Ci0gICAgUHlfc3NpemVfdCBtaW5sZW47CiAKICAgICAvKiBjaGVjayB0aGUgcmVjdXJzaW9uIGxldmVsICovCiAgICAgaWYgKHJlY3Vyc2lvbl9kZXB0aCA8PSAwKSB7CkBAIC05MjksOCArOTExLDkgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgbWlubGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5wdXQtPnN0cikgKyAxMDA7Ci0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIG1pbmxlbik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaW5wdXQtPnN0cikgKyAxMDA7CiAKICAgICBpZiAoIWRvX21hcmt1cChpbnB1dCwgYXJncywga3dhcmdzLCAmd3JpdGVyLCByZWN1cnNpb25fZGVwdGgsCiAgICAgICAgICAgICAgICAgICAgYXV0b19udW1iZXIpKSB7CmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oIGIvT2JqZWN0cy9zdHJpbmdsaWIvdW5pY29kZWRlZnMuaAppbmRleCBmMTZmMjFlLi4zZGI1NjI5IDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cmluZ2xpYi91bmljb2RlZGVmcy5oCisrKyBiL09iamVjdHMvc3RyaW5nbGliL3VuaWNvZGVkZWZzLmgKQEAgLTIxLDE3ICsyMSwxMSBAQAogI2RlZmluZSBTVFJJTkdMSUJfU1RSICAgICAgICAgICAgUHlVbmljb2RlX0FTX1VOSUNPREUKICNkZWZpbmUgU1RSSU5HTElCX0xFTiAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfU0laRQogI2RlZmluZSBTVFJJTkdMSUJfTkVXICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlCi0jZGVmaW5lIFNUUklOR0xJQl9SRVNJWkUgICAgICAgICBQeVVuaWNvZGVfUmVzaXplCiAjZGVmaW5lIFNUUklOR0xJQl9DSEVDSyAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2sKICNkZWZpbmUgU1RSSU5HTElCX0NIRUNLX0VYQUNUICAgIFB5VW5pY29kZV9DaGVja0V4YWN0CiAKLSNpZiBQWV9WRVJTSU9OX0hFWCA8IDB4MDMwMDAwMDAKLSNkZWZpbmUgU1RSSU5HTElCX1RPU1RSICAgICAgICAgIFB5T2JqZWN0X1VuaWNvZGUKLSNkZWZpbmUgU1RSSU5HTElCX1RPQVNDSUkgICAgICAgIFB5T2JqZWN0X1JlcHIKLSNlbHNlCiAjZGVmaW5lIFNUUklOR0xJQl9UT1NUUiAgICAgICAgICBQeU9iamVjdF9TdHIKICNkZWZpbmUgU1RSSU5HTElCX1RPQVNDSUkgICAgICAgIFB5T2JqZWN0X0FTQ0lJCi0jZW5kaWYKIAogI2RlZmluZSBTVFJJTkdMSUJfV0FOVF9DT05UQUlOU19PQkogMQogCmRpZmYgLS1naXQgYS9PYmplY3RzL3N0cnVjdHNlcS5jIGIvT2JqZWN0cy9zdHJ1Y3RzZXEuYwppbmRleCBjM2I5YTcyLi42NjQzNDRiIDEwMDY0NAotLS0gYS9PYmplY3RzL3N0cnVjdHNlcS5jCisrKyBiL09iamVjdHMvc3RydWN0c2VxLmMKQEAgLTExLDE3ICsxMSwyMCBAQAogLyogRmllbGRzIHdpdGggdGhpcyBuYW1lIGhhdmUgb25seSBhIGZpZWxkIGluZGV4LCBub3QgYSBmaWVsZCBuYW1lLgogICAgVGhleSBhcmUgb25seSBhbGxvd2VkIGZvciBpbmRpY2VzIDwgbl92aXNpYmxlX2ZpZWxkcy4gKi8KIGNoYXIgKlB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkID0gInVubmFtZWQgZmllbGQiOworX1B5X0lERU5USUZJRVIobl9zZXF1ZW5jZV9maWVsZHMpOworX1B5X0lERU5USUZJRVIobl9maWVsZHMpOworX1B5X0lERU5USUZJRVIobl91bm5hbWVkX2ZpZWxkcyk7CiAKICNkZWZpbmUgVklTSUJMRV9TSVpFKG9wKSBQeV9TSVpFKG9wKQogI2RlZmluZSBWSVNJQkxFX1NJWkVfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCB2aXNpYmxlX2xlbmd0aF9rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fc2VxdWVuY2VfZmllbGRzKSkKIAogI2RlZmluZSBSRUFMX1NJWkVfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCByZWFsX2xlbmd0aF9rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fZmllbGRzKSkKICNkZWZpbmUgUkVBTF9TSVpFKG9wKSBSRUFMX1NJWkVfVFAoUHlfVFlQRShvcCkpCiAKICNkZWZpbmUgVU5OQU1FRF9GSUVMRFNfVFAodHApIFB5TG9uZ19Bc0xvbmcoIFwKLSAgICAgICAgICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZygodHApLT50cF9kaWN0LCB1bm5hbWVkX2ZpZWxkc19rZXkpKQorICAgICAgICAgICAgICAgICAgICAgIF9QeURpY3RfR2V0SXRlbUlkKCh0cCktPnRwX2RpY3QsICZQeUlkX25fdW5uYW1lZF9maWVsZHMpKQogI2RlZmluZSBVTk5BTUVEX0ZJRUxEUyhvcCkgVU5OQU1FRF9GSUVMRFNfVFAoUHlfVFlQRShvcCkpCiAKIApAQCAtNTksNyArNjIsNyBAQAogc3RydWN0c2VxX2RlYWxsb2MoUHlTdHJ1Y3RTZXF1ZW5jZSAqb2JqKQogewogICAgIFB5X3NzaXplX3QgaSwgc2l6ZTsKLSAgICAKKwogICAgIHNpemUgPSBSRUFMX1NJWkUob2JqKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIFB5X1hERUNSRUYob2JqLT5vYl9pdGVtW2ldKTsKQEAgLTIzMCw4ICsyMzMsOCBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHN0cnVjdHNlcV9yZWR1Y2UoUHlTdHJ1Y3RTZXF1ZW5jZSogc2VsZikKIHsKLSAgICBQeU9iamVjdCogdHVwOwotICAgIFB5T2JqZWN0KiBkaWN0OworICAgIFB5T2JqZWN0KiB0dXAgPSBOVUxMOworICAgIFB5T2JqZWN0KiBkaWN0ID0gTlVMTDsKICAgICBQeU9iamVjdCogcmVzdWx0OwogICAgIFB5X3NzaXplX3Qgbl9maWVsZHMsIG5fdmlzaWJsZV9maWVsZHMsIG5fdW5uYW1lZF9maWVsZHM7CiAgICAgaW50IGk7CkBAIC0yNDAsMTUgKzI0MywxMiBAQAogICAgIG5fdmlzaWJsZV9maWVsZHMgPSBWSVNJQkxFX1NJWkUoc2VsZik7CiAgICAgbl91bm5hbWVkX2ZpZWxkcyA9IFVOTkFNRURfRklFTERTKHNlbGYpOwogICAgIHR1cCA9IFB5VHVwbGVfTmV3KG5fdmlzaWJsZV9maWVsZHMpOwotICAgIGlmICghdHVwKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBpZiAoIXR1cCkKKyAgICAgICAgZ290byBlcnJvcjsKIAogICAgIGRpY3QgPSBQeURpY3RfTmV3KCk7Ci0gICAgaWYgKCFkaWN0KSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0dXApOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKCFkaWN0KQorICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG5fdmlzaWJsZV9maWVsZHM7IGkrKykgewogICAgICAgICBQeV9JTkNSRUYoc2VsZi0+b2JfaXRlbVtpXSk7CkBAIC0yNTcsOCArMjU3LDggQEAKIAogICAgIGZvciAoOyBpIDwgbl9maWVsZHM7IGkrKykgewogICAgICAgICBjaGFyICpuID0gUHlfVFlQRShzZWxmKS0+dHBfbWVtYmVyc1tpLW5fdW5uYW1lZF9maWVsZHNdLm5hbWU7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsIG4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYtPm9iX2l0ZW1baV0pOworICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgbiwgc2VsZi0+b2JfaXRlbVtpXSkgPCAwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CiAKICAgICByZXN1bHQgPSBQeV9CdWlsZFZhbHVlKCIoTyhPTykpIiwgUHlfVFlQRShzZWxmKSwgdHVwLCBkaWN0KTsKQEAgLTI2Nyw2ICsyNjcsMTEgQEAKICAgICBQeV9ERUNSRUYoZGljdCk7CiAKICAgICByZXR1cm4gcmVzdWx0OworCitlcnJvcjoKKyAgICBQeV9YREVDUkVGKHR1cCk7CisgICAgUHlfWERFQ1JFRihkaWN0KTsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIFB5TWV0aG9kRGVmIHN0cnVjdHNlcV9tZXRob2RzW10gPSB7CkBAIC0zMTUsMTIgKzMyMCwxMyBAQAogICAgIHN0cnVjdHNlcV9uZXcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfbmV3ICovCiB9OwogCi12b2lkCi1QeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlTdHJ1Y3RTZXF1ZW5jZV9EZXNjICpkZXNjKQoraW50CitQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihQeVR5cGVPYmplY3QgKnR5cGUsIFB5U3RydWN0U2VxdWVuY2VfRGVzYyAqZGVzYykKIHsKICAgICBQeU9iamVjdCAqZGljdDsKICAgICBQeU1lbWJlckRlZiogbWVtYmVyczsKICAgICBpbnQgbl9tZW1iZXJzLCBuX3VubmFtZWRfbWVtYmVycywgaSwgazsKKyAgICBQeU9iamVjdCAqdjsKIAogI2lmZGVmIFB5X1RSQUNFX1JFRlMKICAgICAvKiBpZiB0aGUgdHlwZSBvYmplY3Qgd2FzIGNoYWluZWQsIHVuY2hhaW4gaXQgZmlyc3QKQEAgLTM0Miw4ICszNDgsMTAgQEAKICAgICB0eXBlLT50cF9kb2MgPSBkZXNjLT5kb2M7CiAKICAgICBtZW1iZXJzID0gUHlNZW1fTkVXKFB5TWVtYmVyRGVmLCBuX21lbWJlcnMtbl91bm5hbWVkX21lbWJlcnMrMSk7Ci0gICAgaWYgKG1lbWJlcnMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOworICAgIGlmIChtZW1iZXJzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGZvciAoaSA9IGsgPSAwOyBpIDwgbl9tZW1iZXJzOyArK2kpIHsKICAgICAgICAgaWYgKGRlc2MtPmZpZWxkc1tpXS5uYW1lID09IFB5U3RydWN0U2VxdWVuY2VfVW5uYW1lZEZpZWxkKQpAQCAtMzYxLDMwICszNjksNTYgQEAKICAgICB0eXBlLT50cF9tZW1iZXJzID0gbWVtYmVyczsKIAogICAgIGlmIChQeVR5cGVfUmVhZHkodHlwZSkgPCAwKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAtMTsKICAgICBQeV9JTkNSRUYodHlwZSk7CiAKICAgICBkaWN0ID0gdHlwZS0+dHBfZGljdDsKICNkZWZpbmUgU0VUX0RJQ1RfRlJPTV9JTlQoa2V5LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeU9iamVjdCAqdiA9IFB5TG9uZ19Gcm9tTG9uZygobG9uZykgdmFsdWUpOyAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHYgIT0gTlVMTCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCBrZXksIHYpOyAgICAgICAgICAgICAgICAgXAorICAgICAgICB2ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKSB2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwga2V5LCB2KSA8IDApIHsgICAgICAgICAgIFwKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlfREVDUkVGKHYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKIAogICAgIFNFVF9ESUNUX0ZST01fSU5UKHZpc2libGVfbGVuZ3RoX2tleSwgZGVzYy0+bl9pbl9zZXF1ZW5jZSk7CiAgICAgU0VUX0RJQ1RfRlJPTV9JTlQocmVhbF9sZW5ndGhfa2V5LCBuX21lbWJlcnMpOwogICAgIFNFVF9ESUNUX0ZST01fSU5UKHVubmFtZWRfZmllbGRzX2tleSwgbl91bm5hbWVkX21lbWJlcnMpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK1B5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCit7CisgICAgKHZvaWQpUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIodHlwZSwgZGVzYyk7CiB9CiAKIFB5VHlwZU9iamVjdCoKIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZShQeVN0cnVjdFNlcXVlbmNlX0Rlc2MgKmRlc2MpCiB7Ci0gICAgUHlUeXBlT2JqZWN0ICpyZXN1bHQgPSAoUHlUeXBlT2JqZWN0KilQeVR5cGVfR2VuZXJpY0FsbG9jKCZQeVR5cGVfVHlwZSwgMCk7Ci0gICAgaWYgKHJlc3VsdCAhPSBOVUxMKSB7Ci0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUocmVzdWx0LCBkZXNjKTsKKyAgICBQeVR5cGVPYmplY3QgKnJlc3VsdDsKKworICAgIHJlc3VsdCA9IChQeVR5cGVPYmplY3QqKVB5VHlwZV9HZW5lcmljQWxsb2MoJlB5VHlwZV9UeXBlLCAwKTsKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMihyZXN1bHQsIGRlc2MpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CisKK2ludCBfUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0KHZvaWQpCit7CisgICAgaWYgKF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fc2VxdWVuY2VfZmllbGRzKSA9PSBOVUxMCisgICAgICAgIHx8IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fZmllbGRzKSA9PSBOVUxMCisgICAgICAgIHx8IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX25fdW5uYW1lZF9maWVsZHMpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvT2JqZWN0cy90dXBsZW9iamVjdC5jIGIvT2JqZWN0cy90dXBsZW9iamVjdC5jCmluZGV4IGY4MTU1OTUuLjhjMDAyMTAgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHVwbGVvYmplY3QuYworKysgYi9PYmplY3RzL3R1cGxlb2JqZWN0LmMKQEAgLTYzLDkgKzYzLDkgQEAKIH0KIAogUHlPYmplY3QgKgotUHlUdXBsZV9OZXcocmVnaXN0ZXIgUHlfc3NpemVfdCBzaXplKQorUHlUdXBsZV9OZXcoUHlfc3NpemVfdCBzaXplKQogewotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKm9wOworICAgIFB5VHVwbGVPYmplY3QgKm9wOwogICAgIFB5X3NzaXplX3QgaTsKICAgICBpZiAoc2l6ZSA8IDApIHsKICAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAKIH0KIAogUHlfc3NpemVfdAotUHlUdXBsZV9TaXplKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCkKK1B5VHVwbGVfU2l6ZShQeU9iamVjdCAqb3ApCiB7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTEzMyw3ICsxMzMsNyBAQAogfQogCiBQeU9iamVjdCAqCi1QeVR1cGxlX0dldEl0ZW0ocmVnaXN0ZXIgUHlPYmplY3QgKm9wLCByZWdpc3RlciBQeV9zc2l6ZV90IGkpCitQeVR1cGxlX0dldEl0ZW0oUHlPYmplY3QgKm9wLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKG9wKSkgewogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTE0NywxMCArMTQ3LDEwIEBACiB9CiAKIGludAotUHlUdXBsZV9TZXRJdGVtKHJlZ2lzdGVyIFB5T2JqZWN0ICpvcCwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpLCBQeU9iamVjdCAqbmV3aXRlbSkKK1B5VHVwbGVfU2V0SXRlbShQeU9iamVjdCAqb3AsIFB5X3NzaXplX3QgaSwgUHlPYmplY3QgKm5ld2l0ZW0pCiB7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKm9sZGl0ZW07Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipwOworICAgIFB5T2JqZWN0ICpvbGRpdGVtOworICAgIFB5T2JqZWN0ICoqcDsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sob3ApIHx8IG9wLT5vYl9yZWZjbnQgIT0gMSkgewogICAgICAgICBQeV9YREVDUkVGKG5ld2l0ZW0pOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKQEAgLTIyNCwxMCArMjI0LDEwIEBACiAvKiBNZXRob2RzICovCiAKIHN0YXRpYyB2b2lkCi10dXBsZWRlYWxsb2MocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqb3ApCit0dXBsZWRlYWxsb2MoUHlUdXBsZU9iamVjdCAqb3ApCiB7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBpOwotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3QgbGVuID0gIFB5X1NJWkUob3ApOworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9ICBQeV9TSVpFKG9wKTsKICAgICBQeU9iamVjdF9HQ19VblRyYWNrKG9wKTsKICAgICBQeV9UUkFTSENBTl9TQUZFX0JFR0lOKG9wKQogICAgIGlmIChsZW4gPiAwKSB7CkBAIC0yNTUsMjAgKzI1NSwxMiBAQAogdHVwbGVyZXByKFB5VHVwbGVPYmplY3QgKnYpCiB7CiAgICAgUHlfc3NpemVfdCBpLCBuOwotICAgIFB5T2JqZWN0ICpzID0gTlVMTDsKLSAgICBfUHlBY2N1IGFjYzsKLSAgICBzdGF0aWMgUHlPYmplY3QgKnNlcCA9IE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAKICAgICBuID0gUHlfU0laRSh2KTsKICAgICBpZiAobiA9PSAwKQogICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIigpIik7CiAKLSAgICBpZiAoc2VwID09IE5VTEwpIHsKLSAgICAgICAgc2VwID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIiwgIik7Ci0gICAgICAgIGlmIChzZXAgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQogICAgIC8qIFdoaWxlIG5vdCBtdXRhYmxlLCBpdCBpcyBzdGlsbCBwb3NzaWJsZSB0byBlbmQgdXAgd2l0aCBhIGN5Y2xlIGluIGEKICAgICAgICB0dXBsZSB0aHJvdWdoIGFuIG9iamVjdCB0aGF0IHN0b3JlcyBpdHNlbGYgd2l0aGluIGEgdHVwbGUgKGFuZCB0aHVzCiAgICAgICAgaW5maW5pdGVseSBhc2tzIGZvciB0aGUgcmVwciBvZiBpdHNlbGYpLiBUaGlzIHNob3VsZCBvbmx5IGJlCkBAIC0yNzgsNDAgKzI3MCw1OCBAQAogICAgICAgICByZXR1cm4gaSA+IDAgPyBQeVVuaWNvZGVfRnJvbVN0cmluZygiKC4uLikiKSA6IE5VTEw7CiAgICAgfQogCi0gICAgaWYgKF9QeUFjY3VfSW5pdCgmYWNjKSkKLSAgICAgICAgZ290byBlcnJvcjsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgaWYgKFB5X1NJWkUodikgPiAxKSB7CisgICAgICAgIC8qICIoIiArICIxIiArICIsIDIiICogKGxlbiAtIDEpICsgIikiICovCisgICAgICAgIHdyaXRlci5taW5fbGVuZ3RoID0gMSArIDEgKyAoMiArIDEpICogKFB5X1NJWkUodikgLSAxKSArIDE7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKiAiKDEsKSIgKi8KKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSA0OworICAgIH0KIAotICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiKCIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnKCcpIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBQeV9DTEVBUihzKTsKIAogICAgIC8qIERvIHJlcHIoKSBvbiBlYWNoIGVsZW1lbnQuICovCiAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkgeworICAgICAgICBQeU9iamVjdCAqczsKKworICAgICAgICBpZiAoaSA+IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcoJndyaXRlciwgIiwgIiwgMikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoUHlfRW50ZXJSZWN1cnNpdmVDYWxsKCIgd2hpbGUgZ2V0dGluZyB0aGUgcmVwciBvZiBhIHR1cGxlIikpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBzID0gUHlPYmplY3RfUmVwcih2LT5vYl9pdGVtW2ldKTsKICAgICAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7Ci0gICAgICAgIGlmIChpID4gMCAmJiBfUHlBY2N1X0FjY3VtdWxhdGUoJmFjYywgc2VwKSkKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQorCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKCZ3cml0ZXIsIHMpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHMpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgUHlfQ0xFQVIocyk7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHMpOwogICAgIH0KLSAgICBpZiAobiA+IDEpCi0gICAgICAgIHMgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiKSIpOwotICAgIGVsc2UKLSAgICAgICAgcyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIsKSIpOwotICAgIGlmIChzID09IE5VTEwgfHwgX1B5QWNjdV9BY2N1bXVsYXRlKCZhY2MsIHMpKQotICAgICAgICBnb3RvIGVycm9yOwotICAgIFB5X0NMRUFSKHMpOworCisgICAgd3JpdGVyLm92ZXJhbGxvY2F0ZSA9IDA7CisgICAgaWYgKG4gPiAxKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcigmd3JpdGVyLCAnKScpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsICIsKSIsIDIpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgfQogCiAgICAgUHlfUmVwckxlYXZlKChQeU9iamVjdCAqKXYpOwotICAgIHJldHVybiBfUHlBY2N1X0ZpbmlzaCgmYWNjKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIGVycm9yOgotICAgIF9QeUFjY3VfRGVzdHJveSgmYWNjKTsKLSAgICBQeV9YREVDUkVGKHMpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9SZXByTGVhdmUoKFB5T2JqZWN0ICopdik7CiAgICAgcmV0dXJuIE5VTEw7CiB9CkBAIC0zMjIsMTUgKzMzMiwxOCBAQAogCiAgICAgIDEwODI1MjcsIDExNjUwNDksIDEwODI1MzEsIDExNjUwNTcsIDEyNDc1ODEsIDEzMzAxMDMsIDEwODI1MzMsCiAgICAgIDEzMzAxMTEsIDE0MTI2MzMsIDExNjUwNjksIDEyNDc1OTksIDE0OTUxNzcsIDE1Nzc2OTkKKworICAgVGVzdHMgaGF2ZSBzaG93biB0aGF0IGl0J3Mgbm90IHdvcnRoIHRvIGNhY2hlIHRoZSBoYXNoIHZhbHVlLCBzZWUKKyAgIGlzc3VlICM5Njg1LgogKi8KIAogc3RhdGljIFB5X2hhc2hfdAogdHVwbGVoYXNoKFB5VHVwbGVPYmplY3QgKnYpCiB7Ci0gICAgcmVnaXN0ZXIgUHlfdWhhc2hfdCB4OyAgLyogVW5zaWduZWQgZm9yIGRlZmluZWQgb3ZlcmZsb3cgYmVoYXZpb3IuICovCi0gICAgcmVnaXN0ZXIgUHlfaGFzaF90IHk7Ci0gICAgcmVnaXN0ZXIgUHlfc3NpemVfdCBsZW4gPSBQeV9TSVpFKHYpOwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICoqcDsKKyAgICBQeV91aGFzaF90IHg7ICAvKiBVbnNpZ25lZCBmb3IgZGVmaW5lZCBvdmVyZmxvdyBiZWhhdmlvci4gKi8KKyAgICBQeV9oYXNoX3QgeTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5X1NJWkUodik7CisgICAgUHlPYmplY3QgKipwOwogICAgIFB5X3VoYXNoX3QgbXVsdCA9IF9QeUhBU0hfTVVMVElQTElFUjsKICAgICB4ID0gMHgzNDU2NzhVTDsKICAgICBwID0gdi0+b2JfaXRlbTsKQEAgLTM2Nyw3ICszODAsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVpdGVtKHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKmEsIHJlZ2lzdGVyIFB5X3NzaXplX3QgaSkKK3R1cGxlaXRlbShQeVR1cGxlT2JqZWN0ICphLCBQeV9zc2l6ZV90IGkpCiB7CiAgICAgaWYgKGkgPCAwIHx8IGkgPj0gUHlfU0laRShhKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW5kZXhFcnJvciwgInR1cGxlIGluZGV4IG91dCBvZiByYW5nZSIpOwpAQCAtMzc4LDEyICszOTEsMTIgQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKLXR1cGxlc2xpY2UocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlfc3NpemVfdCBpbG93LAotICAgICAgICAgICByZWdpc3RlciBQeV9zc2l6ZV90IGloaWdoKQordHVwbGVzbGljZShQeVR1cGxlT2JqZWN0ICphLCBQeV9zc2l6ZV90IGlsb3csCisgICAgICAgICAgIFB5X3NzaXplX3QgaWhpZ2gpCiB7Ci0gICAgcmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqbnA7CisgICAgUHlUdXBsZU9iamVjdCAqbnA7CiAgICAgUHlPYmplY3QgKipzcmMsICoqZGVzdDsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIGlmIChpbG93IDwgMCkKICAgICAgICAgaWxvdyA9IDA7CkBAIC00MjAsMTAgKzQzMywxMCBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotdHVwbGVjb25jYXQocmVnaXN0ZXIgUHlUdXBsZU9iamVjdCAqYSwgcmVnaXN0ZXIgUHlPYmplY3QgKmJiKQordHVwbGVjb25jYXQoUHlUdXBsZU9iamVjdCAqYSwgUHlPYmplY3QgKmJiKQogewotICAgIHJlZ2lzdGVyIFB5X3NzaXplX3Qgc2l6ZTsKLSAgICByZWdpc3RlciBQeV9zc2l6ZV90IGk7CisgICAgUHlfc3NpemVfdCBzaXplOworICAgIFB5X3NzaXplX3QgaTsKICAgICBQeU9iamVjdCAqKnNyYywgKipkZXN0OwogICAgIFB5VHVwbGVPYmplY3QgKm5wOwogICAgIGlmICghUHlUdXBsZV9DaGVjayhiYikpIHsKQEAgLTc0NiwyNyArNzU5LDE1IEBACiAKIH0KIAotc3RhdGljIFB5T2JqZWN0ICoKLXR1cGxlX3NpemVvZihQeVR1cGxlT2JqZWN0ICpzZWxmKQotewotICAgIFB5X3NzaXplX3QgcmVzOwotCi0gICAgcmVzID0gUHlUdXBsZV9UeXBlLnRwX2Jhc2ljc2l6ZSArIFB5X1NJWkUoc2VsZikgKiBzaXplb2YoUHlPYmplY3QgKik7Ci0gICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3NpemVfdChyZXMpOwotfQotCiBQeURvY19TVFJWQVIoaW5kZXhfZG9jLAogIlQuaW5kZXgodmFsdWUsIFtzdGFydCwgW3N0b3BdXSkgLT4gaW50ZWdlciAtLSByZXR1cm4gZmlyc3QgaW5kZXggb2YgdmFsdWUuXG4iCiAiUmFpc2VzIFZhbHVlRXJyb3IgaWYgdGhlIHZhbHVlIGlzIG5vdCBwcmVzZW50LiIKICk7CiBQeURvY19TVFJWQVIoY291bnRfZG9jLAogIlQuY291bnQodmFsdWUpIC0+IGludGVnZXIgLS0gcmV0dXJuIG51bWJlciBvZiBvY2N1cnJlbmNlcyBvZiB2YWx1ZSIpOwotUHlEb2NfU1RSVkFSKHNpemVvZl9kb2MsCi0iVC5fX3NpemVvZl9fKCkgLS0gc2l6ZSBvZiBUIGluIG1lbW9yeSwgaW4gYnl0ZXMiKTsKIAogc3RhdGljIFB5TWV0aG9kRGVmIHR1cGxlX21ldGhvZHNbXSA9IHsKICAgICB7Il9fZ2V0bmV3YXJnc19fIiwgICAgICAgICAgKFB5Q0Z1bmN0aW9uKXR1cGxlX2dldG5ld2FyZ3MsICBNRVRIX05PQVJHU30sCi0gICAgeyJfX3NpemVvZl9fIiwgICAgICAoUHlDRnVuY3Rpb24pdHVwbGVfc2l6ZW9mLCBNRVRIX05PQVJHUywgc2l6ZW9mX2RvY30sCiAgICAgeyJpbmRleCIsICAgICAgICAgICAoUHlDRnVuY3Rpb24pdHVwbGVpbmRleCwgIE1FVEhfVkFSQVJHUywgaW5kZXhfZG9jfSwKICAgICB7ImNvdW50IiwgICAgICAgICAgIChQeUNGdW5jdGlvbil0dXBsZWNvdW50LCAgTUVUSF9PLCBjb3VudF9kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCkBAIC04MzMsOCArODM0LDggQEAKIGludAogX1B5VHVwbGVfUmVzaXplKFB5T2JqZWN0ICoqcHYsIFB5X3NzaXplX3QgbmV3c2l6ZSkKIHsKLSAgICByZWdpc3RlciBQeVR1cGxlT2JqZWN0ICp2OwotICAgIHJlZ2lzdGVyIFB5VHVwbGVPYmplY3QgKnN2OworICAgIFB5VHVwbGVPYmplY3QgKnY7CisgICAgUHlUdXBsZU9iamVjdCAqc3Y7CiAgICAgUHlfc3NpemVfdCBpOwogICAgIFB5X3NzaXplX3Qgb2xkc2l6ZTsKIApAQCAtOTI1LDcgKzkyNiw3IEBACiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBQeU9iamVjdF9IRUFECi0gICAgbG9uZyBpdF9pbmRleDsKKyAgICBQeV9zc2l6ZV90IGl0X2luZGV4OwogICAgIFB5VHVwbGVPYmplY3QgKml0X3NlcTsgLyogU2V0IHRvIE5VTEwgd2hlbiBpdGVyYXRvciBpcyBleGhhdXN0ZWQgKi8KIH0gdHVwbGVpdGVyb2JqZWN0OwogCkBAIC05ODMsNyArOTg0LDcgQEAKIHR1cGxlaXRlcl9yZWR1Y2UodHVwbGVpdGVyb2JqZWN0ICppdCkKIHsKICAgICBpZiAoaXQtPml0X3NlcSkKLSAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTylsIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIk4oTyluIiwgX1B5T2JqZWN0X0dldEJ1aWx0aW4oIml0ZXIiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXQtPml0X3NlcSwgaXQtPml0X2luZGV4KTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCJOKCgpKSIsIF9QeU9iamVjdF9HZXRCdWlsdGluKCJpdGVyIikpOwpAQCAtOTkyLDcgKzk5Myw3IEBACiBzdGF0aWMgUHlPYmplY3QgKgogdHVwbGVpdGVyX3NldHN0YXRlKHR1cGxlaXRlcm9iamVjdCAqaXQsIFB5T2JqZWN0ICpzdGF0ZSkKIHsKLSAgICBsb25nIGluZGV4ID0gUHlMb25nX0FzTG9uZyhzdGF0ZSk7CisgICAgUHlfc3NpemVfdCBpbmRleCA9IFB5TG9uZ19Bc1NzaXplX3Qoc3RhdGUpOwogICAgIGlmIChpbmRleCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoaXQtPml0X3NlcSAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9PYmplY3RzL3R5cGVvYmplY3QuYyBiL09iamVjdHMvdHlwZW9iamVjdC5jCmluZGV4IDg4NTFmYWUuLmNhNTM1NWEgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdHlwZW9iamVjdC5jCisrKyBiL09iamVjdHMvdHlwZW9iamVjdC5jCkBAIC0zNSwxOSArMzUsMTI3IEBACiBzdGF0aWMgc3RydWN0IG1ldGhvZF9jYWNoZV9lbnRyeSBtZXRob2RfY2FjaGVbMSA8PCBNQ0FDSEVfU0laRV9FWFBdOwogc3RhdGljIHVuc2lnbmVkIGludCBuZXh0X3ZlcnNpb25fdGFnID0gMDsKIAorLyogYWxwaGFiZXRpY2FsIG9yZGVyICovCitfUHlfSURFTlRJRklFUihfX2Fic3RyYWN0bWV0aG9kc19fKTsKIF9QeV9JREVOVElGSUVSKF9fY2xhc3NfXyk7CitfUHlfSURFTlRJRklFUihfX2RlbGl0ZW1fXyk7CiBfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CiBfUHlfSURFTlRJRklFUihfX2RvY19fKTsKLV9QeV9JREVOVElGSUVSKF9fZ2V0aXRlbV9fKTsKIF9QeV9JREVOVElGSUVSKF9fZ2V0YXR0cmlidXRlX18pOworX1B5X0lERU5USUZJRVIoX19nZXRpdGVtX18pOwogX1B5X0lERU5USUZJRVIoX19oYXNoX18pOworX1B5X0lERU5USUZJRVIoX19sZW5fXyk7CiBfUHlfSURFTlRJRklFUihfX21vZHVsZV9fKTsKIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKIF9QeV9JREVOVElGSUVSKF9fbmV3X18pOworX1B5X0lERU5USUZJRVIoX19zZXRpdGVtX18pOworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOwogCiBzdGF0aWMgUHlPYmplY3QgKgogc2xvdF90cF9uZXcoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpOwogCisvKgorICogZmluZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgZG9jc3RyaW5nJ3MgaW50cm9zcGVjdGlvbiBzaWduYXR1cmUuCisgKiBpZiBwcmVzZW50LCByZXR1cm5zIGEgcG9pbnRlciBwb2ludGluZyB0byB0aGUgZmlyc3QgJygnLgorICogb3RoZXJ3aXNlIHJldHVybnMgTlVMTC4KKyAqCisgKiBkb2Vzbid0IGd1YXJhbnRlZSB0aGF0IHRoZSBzaWduYXR1cmUgaXMgdmFsaWQsIG9ubHkgdGhhdCBpdAorICogaGFzIGEgdmFsaWQgcHJlZml4LiAgKHRoZSBzaWduYXR1cmUgbXVzdCBhbHNvIHBhc3Mgc2tpcF9zaWduYXR1cmUuKQorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitmaW5kX3NpZ25hdHVyZShjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpkb2MpCit7CisgICAgY29uc3QgY2hhciAqZG90OworICAgIHNpemVfdCBsZW5ndGg7CisKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhc3NlcnQobmFtZSAhPSBOVUxMKTsKKworICAgIC8qIGZvciBkb3R0ZWQgbmFtZXMgbGlrZSBjbGFzc2VzLCBvbmx5IHVzZSB0aGUgbGFzdCBjb21wb25lbnQgKi8KKyAgICBkb3QgPSBzdHJyY2hyKG5hbWUsICcuJyk7CisgICAgaWYgKGRvdCkKKyAgICAgICAgbmFtZSA9IGRvdCArIDE7CisKKyAgICBsZW5ndGggPSBzdHJsZW4obmFtZSk7CisgICAgaWYgKHN0cm5jbXAoZG9jLCBuYW1lLCBsZW5ndGgpKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBkb2MgKz0gbGVuZ3RoOworICAgIGlmICgqZG9jICE9ICcoJykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIGRvYzsKK30KKworI2RlZmluZSBTSUdOQVRVUkVfRU5EX01BUktFUiAgICAgICAgICIpXG4tLVxuXG4iCisjZGVmaW5lIFNJR05BVFVSRV9FTkRfTUFSS0VSX0xFTkdUSCAgNgorLyoKKyAqIHNraXBzIHBhc3QgdGhlIGVuZCBvZiB0aGUgZG9jc3RyaW5nJ3MgaW5zdHJvc3BlY3Rpb24gc2lnbmF0dXJlLgorICogKGFzc3VtZXMgZG9jIHN0YXJ0cyB3aXRoIGEgdmFsaWQgc2lnbmF0dXJlIHByZWZpeC4pCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK3NraXBfc2lnbmF0dXJlKGNvbnN0IGNoYXIgKmRvYykKK3sKKyAgICB3aGlsZSAoKmRvYykgeworICAgICAgICBpZiAoKCpkb2MgPT0gKlNJR05BVFVSRV9FTkRfTUFSS0VSKSAmJgorICAgICAgICAgICAgIXN0cm5jbXAoZG9jLCBTSUdOQVRVUkVfRU5EX01BUktFUiwgU0lHTkFUVVJFX0VORF9NQVJLRVJfTEVOR1RIKSkKKyAgICAgICAgICAgIHJldHVybiBkb2MgKyBTSUdOQVRVUkVfRU5EX01BUktFUl9MRU5HVEg7CisgICAgICAgIGlmICgoKmRvYyA9PSAnXG4nKSAmJiAoZG9jWzFdID09ICdcbicpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGRvYysrOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorX1B5VHlwZV9Eb2NXaXRob3V0U2lnbmF0dXJlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmludGVybmFsX2RvYykKK3sKKyAgICBjb25zdCBjaGFyICpkb2MgPSBmaW5kX3NpZ25hdHVyZShuYW1lLCBpbnRlcm5hbF9kb2MpOworCisgICAgaWYgKGRvYykgeworICAgICAgICBkb2MgPSBza2lwX3NpZ25hdHVyZShkb2MpOworICAgICAgICBpZiAoZG9jKQorICAgICAgICAgICAgcmV0dXJuIGRvYzsKKyAgICAgICAgfQorICAgIHJldHVybiBpbnRlcm5hbF9kb2M7Cit9CisKK1B5T2JqZWN0ICoKK19QeVR5cGVfR2V0RG9jRnJvbUludGVybmFsRG9jKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmludGVybmFsX2RvYykKK3sKKyAgICBjb25zdCBjaGFyICpkb2MgPSBfUHlUeXBlX0RvY1dpdGhvdXRTaWduYXR1cmUobmFtZSwgaW50ZXJuYWxfZG9jKTsKKworICAgIGlmICghZG9jKSB7CisgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKKyAgICAgICAgcmV0dXJuIFB5X05vbmU7CisgICAgfQorCisgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKGRvYyk7Cit9CisKK1B5T2JqZWN0ICoKK19QeVR5cGVfR2V0VGV4dFNpZ25hdHVyZUZyb21JbnRlcm5hbERvYyhjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICppbnRlcm5hbF9kb2MpCit7CisgICAgY29uc3QgY2hhciAqc3RhcnQgPSBmaW5kX3NpZ25hdHVyZShuYW1lLCBpbnRlcm5hbF9kb2MpOworICAgIGNvbnN0IGNoYXIgKmVuZDsKKworICAgIGlmIChzdGFydCkKKyAgICAgICAgZW5kID0gc2tpcF9zaWduYXR1cmUoc3RhcnQpOworICAgIGVsc2UKKyAgICAgICAgZW5kID0gTlVMTDsKKyAgICBpZiAoIWVuZCkgeworICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CisgICAgICAgIHJldHVybiBQeV9Ob25lOworICAgIH0KKworICAgIC8qIGJhY2sgImVuZCIgdXAgdW50aWwgaXQgcG9pbnRzIGp1c3QgcGFzdCB0aGUgZmluYWwgJyknICovCisgICAgZW5kIC09IFNJR05BVFVSRV9FTkRfTUFSS0VSX0xFTkdUSCAtIDE7CisgICAgYXNzZXJ0KChlbmQgLSBzdGFydCkgPj0gMik7IC8qIHNob3VsZCBiZSAiKCkiIGF0IGxlYXN0ICovCisgICAgYXNzZXJ0KGVuZFstMV0gPT0gJyknKTsKKyAgICBhc3NlcnQoZW5kWzBdID09ICdcbicpOworICAgIHJldHVybiBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoc3RhcnQsIGVuZCAtIHN0YXJ0KTsKK30KKwogdW5zaWduZWQgaW50CiBQeVR5cGVfQ2xlYXJDYWNoZSh2b2lkKQogewpAQCAtOTQsMTYgKzIwMiwxNyBAQAogICAgICAgIG5lZWRlZC4KICAgICAgKi8KICAgICBQeU9iamVjdCAqcmF3LCAqcmVmOwotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGk7CiAKICAgICBpZiAoIVB5VHlwZV9IYXNGZWF0dXJlKHR5cGUsIFB5X1RQRkxBR1NfVkFMSURfVkVSU0lPTl9UQUcpKQogICAgICAgICByZXR1cm47CiAKICAgICByYXcgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChyYXcgIT0gTlVMTCkgewotICAgICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHJhdyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShyYXcsIGkpOworICAgICAgICBhc3NlcnQoUHlEaWN0X0NoZWNrRXhhY3QocmF3KSk7CisgICAgICAgIGkgPSAwOworICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQocmF3LCAmaSwgTlVMTCwgJnJlZikpIHsKKyAgICAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgICAgICByZWYgPSBQeVdlYWtyZWZfR0VUX09CSkVDVChyZWYpOwogICAgICAgICAgICAgaWYgKHJlZiAhPSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgUHlUeXBlX01vZGlmaWVkKChQeVR5cGVPYmplY3QgKilyZWYpOwpAQCAtMzM2LDExICs0NDUsMTAgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB0eXBlX21vZHVsZShQeVR5cGVPYmplY3QgKnR5cGUsIHZvaWQgKmNvbnRleHQpCiB7Ci0gICAgUHlPYmplY3QgKm1vZDsKICAgICBjaGFyICpzOwogCiAgICAgaWYgKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkgewotICAgICAgICBtb2QgPSBfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX21vZHVsZV9fKTsKKyAgICAgICAgUHlPYmplY3QgKm1vZCA9IF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbW9kdWxlX18pOwogICAgICAgICBpZiAoIW1vZCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiX19tb2R1bGVfXyIpOwogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC0zNDksMTEgKzQ1NywxNCBAQAogICAgICAgICByZXR1cm4gbW9kOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKm5hbWU7CiAgICAgICAgIHMgPSBzdHJyY2hyKHR5cGUtPnRwX25hbWUsICcuJyk7CiAgICAgICAgIGlmIChzICE9IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmdBbmRTaXplKAogICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUsIChQeV9zc2l6ZV90KShzIC0gdHlwZS0+dHBfbmFtZSkpOwotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoImJ1aWx0aW5zIik7CisgICAgICAgIG5hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9idWlsdGlucyk7CisgICAgICAgIFB5X1hJTkNSRUYobmFtZSk7CisgICAgICAgIHJldHVybiBuYW1lOwogICAgIH0KIH0KIApAQCAtMzc1LDkgKzQ4NiwxMSBAQAogICAgIC8qIHR5cGUgaXRzZWxmIGhhcyBhbiBfX2Fic3RyYWN0bWV0aG9kc19fIGRlc2NyaXB0b3IgKHRoaXMpLiBEb24ndCByZXR1cm4KICAgICAgICB0aGF0LiAqLwogICAgIGlmICh0eXBlICE9ICZQeVR5cGVfVHlwZSkKLSAgICAgICAgbW9kID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcodHlwZS0+dHBfZGljdCwgIl9fYWJzdHJhY3RtZXRob2RzX18iKTsKKyAgICAgICAgbW9kID0gX1B5RGljdF9HZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19hYnN0cmFjdG1ldGhvZHNfXyk7CiAgICAgaWYgKCFtb2QpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0F0dHJpYnV0ZUVycm9yLCAiX19hYnN0cmFjdG1ldGhvZHNfXyIpOworICAgICAgICBQeU9iamVjdCAqbWVzc2FnZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18pOworICAgICAgICBpZiAobWVzc2FnZSkKKyAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdChQeUV4Y19BdHRyaWJ1dGVFcnJvciwgbWVzc2FnZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBQeV9YSU5DUkVGKG1vZCk7CkBAIC0zOTYsMTMgKzUwOSwxNSBAQAogICAgICAgICBhYnN0cmFjdCA9IFB5T2JqZWN0X0lzVHJ1ZSh2YWx1ZSk7CiAgICAgICAgIGlmIChhYnN0cmFjdCA8IDApCiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHJlcyA9IFB5RGljdF9TZXRJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsICJfX2Fic3RyYWN0bWV0aG9kc19fIiwgdmFsdWUpOworICAgICAgICByZXMgPSBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2Fic3RyYWN0bWV0aG9kc19fLCB2YWx1ZSk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBhYnN0cmFjdCA9IDA7Ci0gICAgICAgIHJlcyA9IFB5RGljdF9EZWxJdGVtU3RyaW5nKHR5cGUtPnRwX2RpY3QsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgIHJlcyA9IF9QeURpY3RfRGVsSXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18pOwogICAgICAgICBpZiAocmVzICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfQXR0cmlidXRlRXJyb3IsICJfX2Fic3RyYWN0bWV0aG9kc19fIik7CisgICAgICAgICAgICBQeU9iamVjdCAqbWVzc2FnZSA9IF9QeVVuaWNvZGVfRnJvbUlkKCZQeUlkX19fYWJzdHJhY3RtZXRob2RzX18pOworICAgICAgICAgICAgaWYgKG1lc3NhZ2UpCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0T2JqZWN0KFB5RXhjX0F0dHJpYnV0ZUVycm9yLCBtZXNzYWdlKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KQEAgLTQyNCwxMCArNTM5LDEzIEBACiB9CiAKIHN0YXRpYyBQeVR5cGVPYmplY3QgKmJlc3RfYmFzZShQeU9iamVjdCAqKTsKLXN0YXRpYyBpbnQgbXJvX2ludGVybmFsKFB5VHlwZU9iamVjdCAqKTsKK3N0YXRpYyBpbnQgbXJvX2ludGVybmFsKFB5VHlwZU9iamVjdCAqLCBQeU9iamVjdCAqKik7CitQeV9MT0NBTF9JTkxJTkUoaW50KSB0eXBlX2lzX3N1YnR5cGVfYmFzZV9jaGFpbihQeVR5cGVPYmplY3QgKiwgUHlUeXBlT2JqZWN0ICopOwogc3RhdGljIGludCBjb21wYXRpYmxlX2Zvcl9hc3NpZ25tZW50KFB5VHlwZU9iamVjdCAqLCBQeVR5cGVPYmplY3QgKiwgY2hhciAqKTsKIHN0YXRpYyBpbnQgYWRkX3N1YmNsYXNzKFB5VHlwZU9iamVjdCosIFB5VHlwZU9iamVjdCopOworc3RhdGljIGludCBhZGRfYWxsX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZXMpOwogc3RhdGljIHZvaWQgcmVtb3ZlX3N1YmNsYXNzKFB5VHlwZU9iamVjdCAqLCBQeVR5cGVPYmplY3QgKik7CitzdGF0aWMgdm9pZCByZW1vdmVfYWxsX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZXMpOwogc3RhdGljIHZvaWQgdXBkYXRlX2FsbF9zbG90cyhQeVR5cGVPYmplY3QgKik7CiAKIHR5cGVkZWYgaW50ICgqdXBkYXRlX2NhbGxiYWNrKShQeVR5cGVPYmplY3QgKiwgdm9pZCAqKTsKQEAgLTQzNSwxNzMgKzU1MywxOTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpbnQgcmVjdXJzZV9kb3duX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlX2NhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBQeU9iamVjdCAqdHlwZV9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmlnbm9yZWQpOwogCiBzdGF0aWMgaW50Ci1tcm9fc3ViY2xhc3NlcyhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0KiB0ZW1wKQorbXJvX2hpZXJhcmNoeShQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICp0ZW1wKQogewotICAgIFB5VHlwZU9iamVjdCAqc3ViY2xhc3M7Ci0gICAgUHlPYmplY3QgKnJlZiwgKnN1YmNsYXNzZXMsICpvbGRfbXJvOworICAgIGludCByZXM7CisgICAgUHlPYmplY3QgKm5ld19tcm8sICpvbGRfbXJvOworICAgIFB5T2JqZWN0ICp0dXBsZTsKKyAgICBQeU9iamVjdCAqc3ViY2xhc3NlczsKICAgICBQeV9zc2l6ZV90IGksIG47CiAKLSAgICBzdWJjbGFzc2VzID0gdHlwZS0+dHBfc3ViY2xhc3NlczsKKyAgICByZXMgPSBtcm9faW50ZXJuYWwodHlwZSwgJm9sZF9tcm8pOworICAgIGlmIChyZXMgPD0gMCkKKyAgICAgICAgLyogZXJyb3IgLyByZWVudHJhbmNlICovCisgICAgICAgIHJldHVybiByZXM7CisgICAgbmV3X21ybyA9IHR5cGUtPnRwX21ybzsKKworICAgIGlmIChvbGRfbXJvICE9IE5VTEwpCisgICAgICAgIHR1cGxlID0gUHlUdXBsZV9QYWNrKDMsIHR5cGUsIG5ld19tcm8sIG9sZF9tcm8pOworICAgIGVsc2UKKyAgICAgICAgdHVwbGUgPSBQeVR1cGxlX1BhY2soMiwgdHlwZSwgbmV3X21ybyk7CisKKyAgICBpZiAodHVwbGUgIT0gTlVMTCkKKyAgICAgICAgcmVzID0gUHlMaXN0X0FwcGVuZCh0ZW1wLCB0dXBsZSk7CisgICAgZWxzZQorICAgICAgICByZXMgPSAtMTsKKyAgICBQeV9YREVDUkVGKHR1cGxlKTsKKworICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgIHR5cGUtPnRwX21ybyA9IG9sZF9tcm87CisgICAgICAgIFB5X0RFQ1JFRihuZXdfbXJvKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBQeV9YREVDUkVGKG9sZF9tcm8pOworCisgICAgLyogT2J0YWluIGEgY29weSBvZiBzdWJjbGFzc2VzIGxpc3QgdG8gaXRlcmF0ZSBvdmVyLgorCisgICAgICAgT3RoZXJ3aXNlIHR5cGUtPnRwX3N1YmNsYXNzZXMgbWlnaHQgYmUgYWx0ZXJlZAorICAgICAgIGluIHRoZSBtaWRkbGUgb2YgdGhlIGxvb3AsIGZvciBleGFtcGxlLCB0aHJvdWdoIGEgY3VzdG9tIG1ybygpLAorICAgICAgIGJ5IGludm9raW5nIHR5cGVfc2V0X2Jhc2VzIG9uIHNvbWUgc3ViY2xhc3Mgb2YgdGhlIHR5cGUKKyAgICAgICB3aGljaCBpbiB0dXJuIGNhbGxzIHJlbW92ZV9zdWJjbGFzcy9hZGRfc3ViY2xhc3Mgb24gdGhpcyB0eXBlLgorCisgICAgICAgRmluYWxseSwgdGhpcyBtYWtlcyB0aGluZ3Mgc2ltcGxlIGF2b2lkaW5nIHRoZSBuZWVkIHRvIGRlYWwKKyAgICAgICB3aXRoIGRpY3Rpb25hcnkgaXRlcmF0b3JzIGFuZCB3ZWFrIHJlZmVyZW5jZXMuCisgICAgKi8KKyAgICBzdWJjbGFzc2VzID0gdHlwZV9zdWJjbGFzc2VzKHR5cGUsIE5VTEwpOwogICAgIGlmIChzdWJjbGFzc2VzID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOwotICAgIGFzc2VydChQeUxpc3RfQ2hlY2soc3ViY2xhc3NlcykpOworICAgICAgICByZXR1cm4gLTE7CiAgICAgbiA9IFB5TGlzdF9HRVRfU0laRShzdWJjbGFzc2VzKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShzdWJjbGFzc2VzLCBpKTsKLSAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKLSAgICAgICAgc3ViY2xhc3MgPSAoUHlUeXBlT2JqZWN0ICopUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKTsKLSAgICAgICAgYXNzZXJ0KHN1YmNsYXNzICE9IE5VTEwpOwotICAgICAgICBpZiAoKFB5T2JqZWN0ICopc3ViY2xhc3MgPT0gUHlfTm9uZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBhc3NlcnQoUHlUeXBlX0NoZWNrKHN1YmNsYXNzKSk7Ci0gICAgICAgIG9sZF9tcm8gPSBzdWJjbGFzcy0+dHBfbXJvOwotICAgICAgICBpZiAobXJvX2ludGVybmFsKHN1YmNsYXNzKSA8IDApIHsKLSAgICAgICAgICAgIHN1YmNsYXNzLT50cF9tcm8gPSBvbGRfbXJvOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgUHlPYmplY3QqIHR1cGxlOwotICAgICAgICAgICAgdHVwbGUgPSBQeVR1cGxlX1BhY2soMiwgc3ViY2xhc3MsIG9sZF9tcm8pOwotICAgICAgICAgICAgUHlfREVDUkVGKG9sZF9tcm8pOwotICAgICAgICAgICAgaWYgKCF0dXBsZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZCh0ZW1wLCB0dXBsZSkgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKG1yb19zdWJjbGFzc2VzKHN1YmNsYXNzLCB0ZW1wKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIFB5VHlwZU9iamVjdCAqc3ViY2xhc3M7CisgICAgICAgIHN1YmNsYXNzID0gKFB5VHlwZU9iamVjdCAqKVB5TGlzdF9HRVRfSVRFTShzdWJjbGFzc2VzLCBpKTsKKyAgICAgICAgcmVzID0gbXJvX2hpZXJhcmNoeShzdWJjbGFzcywgdGVtcCk7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIHJldHVybiAwOworICAgIFB5X0RFQ1JFRihzdWJjbGFzc2VzKTsKKworICAgIHJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQKLXR5cGVfc2V0X2Jhc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCB2b2lkICpjb250ZXh0KQordHlwZV9zZXRfYmFzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqbmV3X2Jhc2VzLCB2b2lkICpjb250ZXh0KQogewotICAgIFB5X3NzaXplX3QgaTsKLSAgICBpbnQgciA9IDA7Ci0gICAgUHlPYmplY3QgKm9iLCAqdGVtcDsKKyAgICBpbnQgcmVzID0gMDsKKyAgICBQeU9iamVjdCAqdGVtcDsKKyAgICBQeU9iamVjdCAqb2xkX2Jhc2VzOwogICAgIFB5VHlwZU9iamVjdCAqbmV3X2Jhc2UsICpvbGRfYmFzZTsKLSAgICBQeU9iamVjdCAqb2xkX2Jhc2VzLCAqb2xkX21ybzsKKyAgICBQeV9zc2l6ZV90IGk7CiAKLSAgICBpZiAoIWNoZWNrX3NldF9zcGVjaWFsX3R5cGVfYXR0cih0eXBlLCB2YWx1ZSwgIl9fYmFzZXNfXyIpKQorICAgIGlmICghY2hlY2tfc2V0X3NwZWNpYWxfdHlwZV9hdHRyKHR5cGUsIG5ld19iYXNlcywgIl9fYmFzZXNfXyIpKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKCFQeVR1cGxlX0NoZWNrKHZhbHVlKSkgeworICAgIGlmICghUHlUdXBsZV9DaGVjayhuZXdfYmFzZXMpKSB7CiAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgImNhbiBvbmx5IGFzc2lnbiB0dXBsZSB0byAlcy5fX2Jhc2VzX18sIG5vdCAlcyIsCi0gICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUsIFB5X1RZUEUodmFsdWUpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSwgUHlfVFlQRShuZXdfYmFzZXMpLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBpZiAoUHlUdXBsZV9HRVRfU0laRSh2YWx1ZSkgPT0gMCkgeworICAgIGlmIChQeVR1cGxlX0dFVF9TSVpFKG5ld19iYXNlcykgPT0gMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICJjYW4gb25seSBhc3NpZ24gbm9uLWVtcHR5IHR1cGxlIHRvICVzLl9fYmFzZXNfXywgbm90ICgpIiwKICAgICAgICAgICAgICAgICAgdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUodmFsdWUpOyBpKyspIHsKLSAgICAgICAgb2IgPSBQeVR1cGxlX0dFVF9JVEVNKHZhbHVlLCBpKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgUHlUdXBsZV9HRVRfU0laRShuZXdfYmFzZXMpOyBpKyspIHsKKyAgICAgICAgUHlPYmplY3QgKm9iOworICAgICAgICBQeVR5cGVPYmplY3QgKmJhc2U7CisKKyAgICAgICAgb2IgPSBQeVR1cGxlX0dFVF9JVEVNKG5ld19iYXNlcywgaSk7CiAgICAgICAgIGlmICghUHlUeXBlX0NoZWNrKG9iKSkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMuX19iYXNlc19fIG11c3QgYmUgdHVwbGUgb2YgY2xhc3Nlcywgbm90ICclcyciLAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUsIFB5X1RZUEUob2IpLT50cF9uYW1lKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICBpZiAoUHlUeXBlX0lzU3VidHlwZSgoUHlUeXBlT2JqZWN0KilvYiwgdHlwZSkpIHsKKworICAgICAgICBiYXNlID0gKFB5VHlwZU9iamVjdCopb2I7CisgICAgICAgIGlmIChQeVR5cGVfSXNTdWJ0eXBlKGJhc2UsIHR5cGUpIHx8CisgICAgICAgICAgICAvKiBJbiBjYXNlIG9mIHJlZW50ZXJpbmcgaGVyZSBhZ2FpbiB0aHJvdWdoIGEgY3VzdG9tIG1ybygpCisgICAgICAgICAgICAgICB0aGUgYWJvdmUgY2hlY2sgaXMgbm90IGVub3VnaCBzaW5jZSBpdCByZWxpZXMgb24KKyAgICAgICAgICAgICAgIGJhc2UtPnRwX21ybyB3aGljaCB3b3VsZCBnb25uYSBiZSB1cGRhdGVkIGluc2lkZQorICAgICAgICAgICAgICAgbXJvX2ludGVybmFsIG9ubHkgdXBvbiByZXR1cm5pbmcgZnJvbSB0aGUgbXJvKCkuCisKKyAgICAgICAgICAgICAgIEhvd2V2ZXIsIGJhc2UtPnRwX2Jhc2UgaGFzIGFscmVhZHkgYmVlbiBhc3NpZ25lZCAoc2VlCisgICAgICAgICAgICAgICBiZWxvdyksIHdoaWNoIGluIHR1cm4gbWF5IGNhdXNlIGFuIGluaGVyaXRhbmNlIGN5Y2xlCisgICAgICAgICAgICAgICB0aHJvdWdoIHRwX2Jhc2UgY2hhaW4uICBBbmQgdGhpcyBpcyBkZWZpbml0ZWx5CisgICAgICAgICAgICAgICBub3Qgd2hhdCB5b3Ugd2FudCB0byBldmVyIGhhcHBlbi4gICovCisgICAgICAgICAgICAoYmFzZS0+dHBfbXJvICE9IE5VTEwgJiYgdHlwZV9pc19zdWJ0eXBlX2Jhc2VfY2hhaW4oYmFzZSwgdHlwZSkpKSB7CisKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImEgX19iYXNlc19fIGl0ZW0gY2F1c2VzIGFuIGluaGVyaXRhbmNlIGN5Y2xlIik7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBuZXdfYmFzZSA9IGJlc3RfYmFzZSh2YWx1ZSk7Ci0KLSAgICBpZiAoIW5ld19iYXNlKQorICAgIG5ld19iYXNlID0gYmVzdF9iYXNlKG5ld19iYXNlcyk7CisgICAgaWYgKG5ld19iYXNlID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmICghY29tcGF0aWJsZV9mb3JfYXNzaWdubWVudCh0eXBlLT50cF9iYXNlLCBuZXdfYmFzZSwgIl9fYmFzZXNfXyIpKQogICAgICAgICByZXR1cm4gLTE7CiAKKyAgICBQeV9JTkNSRUYobmV3X2Jhc2VzKTsKICAgICBQeV9JTkNSRUYobmV3X2Jhc2UpOwotICAgIFB5X0lOQ1JFRih2YWx1ZSk7CiAKICAgICBvbGRfYmFzZXMgPSB0eXBlLT50cF9iYXNlczsKICAgICBvbGRfYmFzZSA9IHR5cGUtPnRwX2Jhc2U7Ci0gICAgb2xkX21ybyA9IHR5cGUtPnRwX21ybzsKIAotICAgIHR5cGUtPnRwX2Jhc2VzID0gdmFsdWU7CisgICAgdHlwZS0+dHBfYmFzZXMgPSBuZXdfYmFzZXM7CiAgICAgdHlwZS0+dHBfYmFzZSA9IG5ld19iYXNlOwogCi0gICAgaWYgKG1yb19pbnRlcm5hbCh0eXBlKSA8IDApIHsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQogICAgIHRlbXAgPSBQeUxpc3RfTmV3KDApOwotICAgIGlmICghdGVtcCkKKyAgICBpZiAodGVtcCA9PSBOVUxMKQogICAgICAgICBnb3RvIGJhaWw7Ci0KLSAgICByID0gbXJvX3N1YmNsYXNzZXModHlwZSwgdGVtcCk7Ci0KLSAgICBpZiAociA8IDApIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5TGlzdF9TaXplKHRlbXApOyBpKyspIHsKLSAgICAgICAgICAgIFB5VHlwZU9iamVjdCogY2xzOwotICAgICAgICAgICAgUHlPYmplY3QqIG1ybzsKLSAgICAgICAgICAgIFB5QXJnX1VucGFja1R1cGxlKFB5TGlzdF9HRVRfSVRFTSh0ZW1wLCBpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIDIsIDIsICZjbHMsICZtcm8pOwotICAgICAgICAgICAgUHlfSU5DUkVGKG1ybyk7Ci0gICAgICAgICAgICBvYiA9IGNscy0+dHBfbXJvOwotICAgICAgICAgICAgY2xzLT50cF9tcm8gPSBtcm87Ci0gICAgICAgICAgICBQeV9ERUNSRUYob2IpOwotICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRih0ZW1wKTsKLSAgICAgICAgZ290byBiYWlsOwotICAgIH0KLQorICAgIGlmIChtcm9faGllcmFyY2h5KHR5cGUsIHRlbXApIDwgMCkKKyAgICAgICAgZ290byB1bmRvOwogICAgIFB5X0RFQ1JFRih0ZW1wKTsKIAotICAgIC8qIGFueSBiYXNlIHRoYXQgd2FzIGluIF9fYmFzZXNfXyBidXQgbm93IGlzbid0LCB3ZQotICAgICAgIG5lZWQgdG8gcmVtb3ZlIHx0eXBlfCBmcm9tIGl0cyB0cF9zdWJjbGFzc2VzLgotICAgICAgIGNvbnZlcnNlbHksIGFueSBjbGFzcyBub3cgaW4gX19iYXNlc19fIHRoYXQgd2Fzbid0Ci0gICAgICAgbmVlZHMgdG8gaGF2ZSB8dHlwZXwgYWRkZWQgdG8gaXRzIHN1YmNsYXNzZXMuICovCisgICAgLyogVGFrZSBubyBhY3Rpb24gaW4gY2FzZSBpZiB0eXBlLT50cF9iYXNlcyBoYXMgYmVlbiByZXBsYWNlZAorICAgICAgIHRocm91Z2ggcmVlbnRyYW5jZS4gICovCisgICAgaWYgKHR5cGUtPnRwX2Jhc2VzID09IG5ld19iYXNlcykgeworICAgICAgICAvKiBhbnkgYmFzZSB0aGF0IHdhcyBpbiBfX2Jhc2VzX18gYnV0IG5vdyBpc24ndCwgd2UKKyAgICAgICAgICAgbmVlZCB0byByZW1vdmUgfHR5cGV8IGZyb20gaXRzIHRwX3N1YmNsYXNzZXMuCisgICAgICAgICAgIGNvbnZlcnNlbHksIGFueSBjbGFzcyBub3cgaW4gX19iYXNlc19fIHRoYXQgd2Fzbid0CisgICAgICAgICAgIG5lZWRzIHRvIGhhdmUgfHR5cGV8IGFkZGVkIHRvIGl0cyBzdWJjbGFzc2VzLiAqLwogCi0gICAgLyogZm9yIG5vdywgc29kIHRoYXQ6IGp1c3QgcmVtb3ZlIGZyb20gYWxsIG9sZF9iYXNlcywKLSAgICAgICBhZGQgdG8gYWxsIG5ld19iYXNlcyAqLwotCi0gICAgZm9yIChpID0gUHlUdXBsZV9HRVRfU0laRShvbGRfYmFzZXMpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLSAgICAgICAgb2IgPSBQeVR1cGxlX0dFVF9JVEVNKG9sZF9iYXNlcywgaSk7Ci0gICAgICAgIGlmIChQeVR5cGVfQ2hlY2sob2IpKSB7Ci0gICAgICAgICAgICByZW1vdmVfc3ViY2xhc3MoCi0gICAgICAgICAgICAgICAgKFB5VHlwZU9iamVjdCopb2IsIHR5cGUpOwotICAgICAgICB9CisgICAgICAgIC8qIGZvciBub3csIHNvZCB0aGF0OiBqdXN0IHJlbW92ZSBmcm9tIGFsbCBvbGRfYmFzZXMsCisgICAgICAgICAgIGFkZCB0byBhbGwgbmV3X2Jhc2VzICovCisgICAgICAgIHJlbW92ZV9hbGxfc3ViY2xhc3Nlcyh0eXBlLCBvbGRfYmFzZXMpOworICAgICAgICByZXMgPSBhZGRfYWxsX3N1YmNsYXNzZXModHlwZSwgbmV3X2Jhc2VzKTsKKyAgICAgICAgdXBkYXRlX2FsbF9zbG90cyh0eXBlKTsKICAgICB9CiAKLSAgICBmb3IgKGkgPSBQeVR1cGxlX0dFVF9TSVpFKHZhbHVlKSAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIG9iID0gUHlUdXBsZV9HRVRfSVRFTSh2YWx1ZSwgaSk7Ci0gICAgICAgIGlmIChQeVR5cGVfQ2hlY2sob2IpKSB7Ci0gICAgICAgICAgICBpZiAoYWRkX3N1YmNsYXNzKChQeVR5cGVPYmplY3QqKW9iLCB0eXBlKSA8IDApCi0gICAgICAgICAgICAgICAgciA9IC0xOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdXBkYXRlX2FsbF9zbG90cyh0eXBlKTsKLQogICAgIFB5X0RFQ1JFRihvbGRfYmFzZXMpOwogICAgIFB5X0RFQ1JFRihvbGRfYmFzZSk7Ci0gICAgUHlfREVDUkVGKG9sZF9tcm8pOwogCi0gICAgcmV0dXJuIHI7CisgICAgcmV0dXJuIHJlczsKKworICB1bmRvOgorICAgIGZvciAoaSA9IFB5TGlzdF9HRVRfU0laRSh0ZW1wKSAtIDE7IGkgPj0gMDsgaS0tKSB7CisgICAgICAgIFB5VHlwZU9iamVjdCAqY2xzOworICAgICAgICBQeU9iamVjdCAqbmV3X21ybywgKm9sZF9tcm8gPSBOVUxMOworCisgICAgICAgIFB5QXJnX1VucGFja1R1cGxlKFB5TGlzdF9HRVRfSVRFTSh0ZW1wLCBpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiIsIDIsIDMsICZjbHMsICZuZXdfbXJvLCAmb2xkX21ybyk7CisgICAgICAgIC8qIERvIG5vdCByb2xsYmFjayBpZiBjbHMgaGFzIGEgbmV3ZXIgdmVyc2lvbiBvZiBNUk8uICAqLworICAgICAgICBpZiAoY2xzLT50cF9tcm8gPT0gbmV3X21ybykgeworICAgICAgICAgICAgUHlfWElOQ1JFRihvbGRfbXJvKTsKKyAgICAgICAgICAgIGNscy0+dHBfbXJvID0gb2xkX21ybzsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdfbXJvKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9ERUNSRUYodGVtcCk7CiAKICAgYmFpbDoKLSAgICBQeV9ERUNSRUYodHlwZS0+dHBfYmFzZXMpOwotICAgIFB5X0RFQ1JFRih0eXBlLT50cF9iYXNlKTsKLSAgICBpZiAodHlwZS0+dHBfbXJvICE9IG9sZF9tcm8pIHsKLSAgICAgICAgUHlfREVDUkVGKHR5cGUtPnRwX21ybyk7Ci0gICAgfQorICAgIGlmICh0eXBlLT50cF9iYXNlcyA9PSBuZXdfYmFzZXMpIHsKKyAgICAgICAgYXNzZXJ0KHR5cGUtPnRwX2Jhc2UgPT0gbmV3X2Jhc2UpOwogCi0gICAgdHlwZS0+dHBfYmFzZXMgPSBvbGRfYmFzZXM7Ci0gICAgdHlwZS0+dHBfYmFzZSA9IG9sZF9iYXNlOwotICAgIHR5cGUtPnRwX21ybyA9IG9sZF9tcm87CisgICAgICAgIHR5cGUtPnRwX2Jhc2VzID0gb2xkX2Jhc2VzOworICAgICAgICB0eXBlLT50cF9iYXNlID0gb2xkX2Jhc2U7CisKKyAgICAgICAgUHlfREVDUkVGKG5ld19iYXNlcyk7CisgICAgICAgIFB5X0RFQ1JFRihuZXdfYmFzZSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBQeV9ERUNSRUYob2xkX2Jhc2VzKTsKKyAgICAgICAgUHlfREVDUkVGKG9sZF9iYXNlKTsKKyAgICB9CiAKICAgICByZXR1cm4gLTE7CiB9CkBAIC02MjAsOCArNzU5LDkgQEAKIHR5cGVfZ2V0X2RvYyhQeVR5cGVPYmplY3QgKnR5cGUsIHZvaWQgKmNvbnRleHQpCiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBpZiAoISh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpICYmIHR5cGUtPnRwX2RvYyAhPSBOVUxMKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcodHlwZS0+dHBfZG9jKTsKKyAgICBpZiAoISh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEVBUFRZUEUpICYmIHR5cGUtPnRwX2RvYyAhPSBOVUxMKSB7CisgICAgICAgIHJldHVybiBfUHlUeXBlX0dldERvY0Zyb21JbnRlcm5hbERvYyh0eXBlLT50cF9uYW1lLCB0eXBlLT50cF9kb2MpOworICAgIH0KICAgICByZXN1bHQgPSBfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2RvY19fKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgcmVzdWx0ID0gUHlfTm9uZTsKQEAgLTYzNyw2ICs3NzcsMTIgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgUHlPYmplY3QgKgordHlwZV9nZXRfdGV4dF9zaWduYXR1cmUoUHlUeXBlT2JqZWN0ICp0eXBlLCB2b2lkICpjb250ZXh0KQoreworICAgIHJldHVybiBfUHlUeXBlX0dldFRleHRTaWduYXR1cmVGcm9tSW50ZXJuYWxEb2ModHlwZS0+dHBfbmFtZSwgdHlwZS0+dHBfZG9jKTsKK30KKwogc3RhdGljIGludAogdHlwZV9zZXRfZG9jKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCB2b2lkICpjb250ZXh0KQogewpAQCAtNjgzLDYgKzgyOSw3IEBACiAgICAgIChzZXR0ZXIpdHlwZV9zZXRfYWJzdHJhY3RtZXRob2RzLCBOVUxMfSwKICAgICB7Il9fZGljdF9fIiwgIChnZXR0ZXIpdHlwZV9kaWN0LCAgTlVMTCwgTlVMTH0sCiAgICAgeyJfX2RvY19fIiwgKGdldHRlcil0eXBlX2dldF9kb2MsIChzZXR0ZXIpdHlwZV9zZXRfZG9jLCBOVUxMfSwKKyAgICB7Il9fdGV4dF9zaWduYXR1cmVfXyIsIChnZXR0ZXIpdHlwZV9nZXRfdGV4dF9zaWduYXR1cmUsIE5VTEwsIE5VTEx9LAogICAgIHswfQogfTsKIApAQCAtNzA0LDcgKzg1MSw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChtb2QgIT0gTlVMTCAmJiBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhtb2QsICJidWlsdGlucyIpKQorICAgIGlmIChtb2QgIT0gTlVMTCAmJiBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobW9kLCAmUHlJZF9idWlsdGlucykpCiAgICAgICAgIHJ0biA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCI8Y2xhc3MgJyVVLiVVJz4iLCBtb2QsIG5hbWUpOwogICAgIGVsc2UKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjxjbGFzcyAnJXMnPiIsIHR5cGUtPnRwX25hbWUpOwpAQCAtNzI2LDYgKzg3MywxMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyNpZmRlZiBQeV9ERUJVRworICAgIC8qIHR5cGVfY2FsbCgpIG11c3Qgbm90IGJlIGNhbGxlZCB3aXRoIGFuIGV4Y2VwdGlvbiBzZXQsCisgICAgICAgYmVjYXVzZSBpdCBtYXkgY2xlYXIgaXQgKGRpcmVjdGx5IG9yIGluZGlyZWN0bHkpIGFuZCBzbyB0aGUKKyAgICAgICBjYWxsZXIgbG9zZXMgaXRzIGV4Y2VwdGlvbiAqLworICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CisjZW5kaWYKKwogICAgIG9iaiA9IHR5cGUtPnRwX25ldyh0eXBlLCBhcmdzLCBrd2RzKTsKICAgICBpZiAob2JqICE9IE5VTEwpIHsKICAgICAgICAgLyogVWdseSBleGNlcHRpb246IHdoZW4gdGhlIGNhbGwgd2FzIHR5cGUoc29tZXRoaW5nKSwKQEAgLTc0MCwxMCArODk0LDEyIEBACiAgICAgICAgIGlmICghUHlUeXBlX0lzU3VidHlwZShQeV9UWVBFKG9iaiksIHR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIG9iajsKICAgICAgICAgdHlwZSA9IFB5X1RZUEUob2JqKTsKLSAgICAgICAgaWYgKHR5cGUtPnRwX2luaXQgIT0gTlVMTCAmJgotICAgICAgICAgICAgdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpIDwgMCkgewotICAgICAgICAgICAgUHlfREVDUkVGKG9iaik7Ci0gICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICBpZiAodHlwZS0+dHBfaW5pdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgcmVzID0gdHlwZS0+dHBfaW5pdChvYmosIGFyZ3MsIGt3ZHMpOworICAgICAgICAgICAgaWYgKHJlcyA8IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYob2JqKTsKKyAgICAgICAgICAgICAgICBvYmogPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBvYmo7CkBAIC03NzAsNyArOTI2LDcgQEAKICAgICAgICAgUHlfSU5DUkVGKHR5cGUpOwogCiAgICAgaWYgKHR5cGUtPnRwX2l0ZW1zaXplID09IDApCi0gICAgICAgIFB5T2JqZWN0X0lOSVQob2JqLCB0eXBlKTsKKyAgICAgICAgKHZvaWQpUHlPYmplY3RfSU5JVChvYmosIHR5cGUpOwogICAgIGVsc2UKICAgICAgICAgKHZvaWQpIFB5T2JqZWN0X0lOSVRfVkFSKChQeVZhck9iamVjdCAqKW9iaiwgdHlwZSwgbml0ZW1zKTsKIApAQCAtOTAyLDYgKzEwNTgsNyBAQAogICAgIFB5VHlwZU9iamVjdCAqdHlwZSwgKmJhc2U7CiAgICAgZGVzdHJ1Y3RvciBiYXNlZGVhbGxvYzsKICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIGludCBoYXNfZmluYWxpemVyOwogCiAgICAgLyogRXh0cmFjdCB0aGUgdHlwZTsgd2UgZXhwZWN0IGl0IHRvIGJlIGEgaGVhcCB0eXBlICovCiAgICAgdHlwZSA9IFB5X1RZUEUoc2VsZik7CkBAIC05MTcsNiArMTA3NCwxMCBAQAogICAgICAgICAgICBjbGVhcl9zbG90cygpLCBvciBERUNSRUYgdGhlIGRpY3QsIG9yIGNsZWFyIHdlYWtyZWZzLiAqLwogCiAgICAgICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCisgICAgICAgIGlmICh0eXBlLT50cF9maW5hbGl6ZSkgeworICAgICAgICAgICAgaWYgKFB5T2JqZWN0X0NhbGxGaW5hbGl6ZXJGcm9tRGVhbGxvYyhzZWxmKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGlmICh0eXBlLT50cF9kZWwpIHsKICAgICAgICAgICAgIHR5cGUtPnRwX2RlbChzZWxmKTsKICAgICAgICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKQpAQCAtOTY4LDI1ICsxMTI5LDM2IEBACiAgICAgICAgIGFzc2VydChiYXNlKTsKICAgICB9CiAKLSAgICAvKiBJZiB3ZSBhZGRlZCBhIHdlYWtsaXN0LCB3ZSBjbGVhciBpdC4gICAgICBEbyB0aGlzICpiZWZvcmUqIGNhbGxpbmcKLSAgICAgICB0aGUgZmluYWxpemVyIChfX2RlbF9fKSwgY2xlYXJpbmcgc2xvdHMsIG9yIGNsZWFyaW5nIHRoZSBpbnN0YW5jZQotICAgICAgIGRpY3QuICovCisgICAgaGFzX2ZpbmFsaXplciA9IHR5cGUtPnRwX2ZpbmFsaXplIHx8IHR5cGUtPnRwX2RlbDsKIAorICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCisgICAgaWYgKGhhc19maW5hbGl6ZXIpCisgICAgICAgIF9QeU9iamVjdF9HQ19UUkFDSyhzZWxmKTsKKworICAgIGlmICh0eXBlLT50cF9maW5hbGl6ZSkgeworICAgICAgICBpZiAoUHlPYmplY3RfQ2FsbEZpbmFsaXplckZyb21EZWFsbG9jKHNlbGYpIDwgMCkgeworICAgICAgICAgICAgLyogUmVzdXJyZWN0ZWQgKi8KKyAgICAgICAgICAgIGdvdG8gZW5kbGFiZWw7CisgICAgICAgIH0KKyAgICB9CisgICAgLyogSWYgd2UgYWRkZWQgYSB3ZWFrbGlzdCwgd2UgY2xlYXIgaXQuICAgICAgRG8gdGhpcyAqYmVmb3JlKiBjYWxsaW5nCisgICAgICAgdHBfZGVsLCBjbGVhcmluZyBzbG90cywgb3IgY2xlYXJpbmcgdGhlIGluc3RhbmNlIGRpY3QuICovCiAgICAgaWYgKHR5cGUtPnRwX3dlYWtsaXN0b2Zmc2V0ICYmICFiYXNlLT50cF93ZWFrbGlzdG9mZnNldCkKICAgICAgICAgUHlPYmplY3RfQ2xlYXJXZWFrUmVmcyhzZWxmKTsKIAotICAgIC8qIE1heWJlIGNhbGwgZmluYWxpemVyOyBleGl0IGVhcmx5IGlmIHJlc3VycmVjdGVkICovCiAgICAgaWYgKHR5cGUtPnRwX2RlbCkgewotICAgICAgICBfUHlPYmplY3RfR0NfVFJBQ0soc2VsZik7CiAgICAgICAgIHR5cGUtPnRwX2RlbChzZWxmKTsKLSAgICAgICAgaWYgKHNlbGYtPm9iX3JlZmNudCA+IDApCi0gICAgICAgICAgICBnb3RvIGVuZGxhYmVsOyAgICAgICAgICAgICAgLyogcmVzdXJyZWN0ZWQgKi8KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgX1B5T2JqZWN0X0dDX1VOVFJBQ0soc2VsZik7CisgICAgICAgIGlmIChzZWxmLT5vYl9yZWZjbnQgPiAwKSB7CisgICAgICAgICAgICAvKiBSZXN1cnJlY3RlZCAqLworICAgICAgICAgICAgZ290byBlbmRsYWJlbDsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaGFzX2ZpbmFsaXplcikgeworICAgICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyhzZWxmKTsKICAgICAgICAgLyogTmV3IHdlYWtyZWZzIGNvdWxkIGJlIGNyZWF0ZWQgZHVyaW5nIHRoZSBmaW5hbGl6ZXIgY2FsbC4KLSAgICAgICAgICAgIElmIHRoaXMgb2NjdXJzLCBjbGVhciB0aGVtIG91dCB3aXRob3V0IGNhbGxpbmcgdGhlaXIKLSAgICAgICAgICAgIGZpbmFsaXplcnMgc2luY2UgdGhleSBtaWdodCByZWx5IG9uIHBhcnQgb2YgdGhlIG9iamVjdAotICAgICAgICAgICAgYmVpbmcgZmluYWxpemVkIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBkZXN0cm95ZWQuICovCisgICAgICAgICAgIElmIHRoaXMgb2NjdXJzLCBjbGVhciB0aGVtIG91dCB3aXRob3V0IGNhbGxpbmcgdGhlaXIKKyAgICAgICAgICAgZmluYWxpemVycyBzaW5jZSB0aGV5IG1pZ2h0IHJlbHkgb24gcGFydCBvZiB0aGUgb2JqZWN0CisgICAgICAgICAgIGJlaW5nIGZpbmFsaXplZCB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGVzdHJveWVkLiAqLwogICAgICAgICBpZiAodHlwZS0+dHBfd2Vha2xpc3RvZmZzZXQgJiYgIWJhc2UtPnRwX3dlYWtsaXN0b2Zmc2V0KSB7CiAgICAgICAgICAgICAvKiBNb2RlbGVkIGFmdGVyIEdFVF9XRUFLUkVGU19MSVNUUFRSKCkgKi8KICAgICAgICAgICAgIFB5V2Vha1JlZmVyZW5jZSAqKmxpc3QgPSAoUHlXZWFrUmVmZXJlbmNlICoqKSBcCkBAIC0xMTQxLDYgKzEzMTMsMTggQEAKIAogLyogdHlwZSB0ZXN0IHdpdGggc3ViY2xhc3Npbmcgc3VwcG9ydCAqLwogCitQeV9MT0NBTF9JTkxJTkUoaW50KQordHlwZV9pc19zdWJ0eXBlX2Jhc2VfY2hhaW4oUHlUeXBlT2JqZWN0ICphLCBQeVR5cGVPYmplY3QgKmIpCit7CisgICAgZG8geworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGEgPSBhLT50cF9iYXNlOworICAgIH0gd2hpbGUgKGEgIT0gTlVMTCk7CisKKyAgICByZXR1cm4gKGIgPT0gJlB5QmFzZU9iamVjdF9UeXBlKTsKK30KKwogaW50CiBQeVR5cGVfSXNTdWJ0eXBlKFB5VHlwZU9iamVjdCAqYSwgUHlUeXBlT2JqZWN0ICpiKQogewpAQCAtMTE1OSwxNSArMTM0Myw5IEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGVsc2UgeworICAgIGVsc2UKICAgICAgICAgLyogYSBpcyBub3QgY29tcGxldGVseSBpbml0aWxpemVkIHlldDsgZm9sbG93IHRwX2Jhc2UgKi8KLSAgICAgICAgZG8gewotICAgICAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIGEgPSBhLT50cF9iYXNlOwotICAgICAgICB9IHdoaWxlIChhICE9IE5VTEwpOwotICAgICAgICByZXR1cm4gYiA9PSAmUHlCYXNlT2JqZWN0X1R5cGU7Ci0gICAgfQorICAgICAgICByZXR1cm4gdHlwZV9pc19zdWJ0eXBlX2Jhc2VfY2hhaW4oYSwgYik7CiB9CiAKIC8qIEludGVybmFsIHJvdXRpbmVzIHRvIGRvIGEgbWV0aG9kIGxvb2t1cCBpbiB0aGUgdHlwZQpAQCAtMTQzNCwxMCArMTYxMiwxMSBAQAogfQogCiBzdGF0aWMgaW50Ci1wbWVyZ2UoUHlPYmplY3QgKmFjYywgUHlPYmplY3QqIHRvX21lcmdlKSB7CitwbWVyZ2UoUHlPYmplY3QgKmFjYywgUHlPYmplY3QqIHRvX21lcmdlKQoreworICAgIGludCByZXMgPSAwOwogICAgIFB5X3NzaXplX3QgaSwgaiwgdG9fbWVyZ2Vfc2l6ZSwgZW1wdHlfY250OwogICAgIGludCAqcmVtYWluOwotICAgIGludCBvazsKIAogICAgIHRvX21lcmdlX3NpemUgPSBQeUxpc3RfR0VUX1NJWkUodG9fbWVyZ2UpOwogCkBAIC0xNDQ2LDggKzE2MjUsMTAgQEAKICAgICAgICB0aGF0IGlzIG5vdCBpbmNsdWRlZCBpbiBhY2MuCiAgICAgKi8KICAgICByZW1haW4gPSAoaW50ICopUHlNZW1fTUFMTE9DKFNJWkVPRl9JTlQqdG9fbWVyZ2Vfc2l6ZSk7Ci0gICAgaWYgKHJlbWFpbiA9PSBOVUxMKQorICAgIGlmIChyZW1haW4gPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogICAgIGZvciAoaSA9IDA7IGkgPCB0b19tZXJnZV9zaXplOyBpKyspCiAgICAgICAgIHJlbWFpbltpXSA9IDA7CiAKQEAgLTE0NzMsMTUgKzE2NTQsMTMgQEAKICAgICAgICAgY2FuZGlkYXRlID0gUHlMaXN0X0dFVF9JVEVNKGN1cl9saXN0LCByZW1haW5baV0pOwogICAgICAgICBmb3IgKGogPSAwOyBqIDwgdG9fbWVyZ2Vfc2l6ZTsgaisrKSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqal9sc3QgPSBQeUxpc3RfR0VUX0lURU0odG9fbWVyZ2UsIGopOwotICAgICAgICAgICAgaWYgKHRhaWxfY29udGFpbnMoal9sc3QsIHJlbWFpbltqXSwgY2FuZGlkYXRlKSkgeworICAgICAgICAgICAgaWYgKHRhaWxfY29udGFpbnMoal9sc3QsIHJlbWFpbltqXSwgY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICBnb3RvIHNraXA7IC8qIGNvbnRpbnVlIG91dGVyIGxvb3AgKi8KLSAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBvayA9IFB5TGlzdF9BcHBlbmQoYWNjLCBjYW5kaWRhdGUpOwotICAgICAgICBpZiAob2sgPCAwKSB7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHJlbWFpbik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KKyAgICAgICAgcmVzID0gUHlMaXN0X0FwcGVuZChhY2MsIGNhbmRpZGF0ZSk7CisgICAgICAgIGlmIChyZXMgPCAwKQorICAgICAgICAgICAgZ290byBvdXQ7CisKICAgICAgICAgZm9yIChqID0gMDsgaiA8IHRvX21lcmdlX3NpemU7IGorKykgewogICAgICAgICAgICAgUHlPYmplY3QgKmpfbHN0ID0gUHlMaXN0X0dFVF9JVEVNKHRvX21lcmdlLCBqKTsKICAgICAgICAgICAgIGlmIChyZW1haW5bal0gPCBQeUxpc3RfR0VUX1NJWkUoal9sc3QpICYmCkBAIC0xNDkzLDIyICsxNjcyLDI1IEBACiAgICAgICBza2lwOiA7CiAgICAgfQogCi0gICAgaWYgKGVtcHR5X2NudCA9PSB0b19tZXJnZV9zaXplKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUocmVtYWluKTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGVtcHR5X2NudCAhPSB0b19tZXJnZV9zaXplKSB7CisgICAgICAgIHNldF9tcm9fZXJyb3IodG9fbWVyZ2UsIHJlbWFpbik7CisgICAgICAgIHJlcyA9IC0xOwogICAgIH0KLSAgICBzZXRfbXJvX2Vycm9yKHRvX21lcmdlLCByZW1haW4pOworCisgIG91dDoKICAgICBQeU1lbV9GUkVFKHJlbWFpbik7Ci0gICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKIG1yb19pbXBsZW1lbnRhdGlvbihQeVR5cGVPYmplY3QgKnR5cGUpCiB7Ci0gICAgUHlfc3NpemVfdCBpLCBuOwotICAgIGludCBvazsKLSAgICBQeU9iamVjdCAqYmFzZXMsICpyZXN1bHQ7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IE5VTEw7CisgICAgUHlPYmplY3QgKmJhc2VzOwogICAgIFB5T2JqZWN0ICp0b19tZXJnZSwgKmJhc2VzX2FzbGlzdDsKKyAgICBpbnQgcmVzOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIGlmICh0eXBlLT50cF9kaWN0ID09IE5VTEwpIHsKICAgICAgICAgaWYgKFB5VHlwZV9SZWFkeSh0eXBlKSA8IDApCkBAIC0xNTMyLDQyICsxNzE0LDQ0IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFB5VHVwbGVfR0VUX0lURU0oYmFzZXMsIGkpOwotICAgICAgICBQeU9iamVjdCAqcGFyZW50TVJPOwotICAgICAgICBwYXJlbnRNUk8gPSBQeVNlcXVlbmNlX0xpc3QoKChQeVR5cGVPYmplY3QqKWJhc2UpLT50cF9tcm8pOwotICAgICAgICBpZiAocGFyZW50TVJPID09IE5VTEwpIHsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih0b19tZXJnZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgUHlUeXBlT2JqZWN0ICpiYXNlOworICAgICAgICBQeU9iamVjdCAqYmFzZV9tcm9fYXNsaXN0OworCisgICAgICAgIGJhc2UgPSAoUHlUeXBlT2JqZWN0ICopUHlUdXBsZV9HRVRfSVRFTShiYXNlcywgaSk7CisgICAgICAgIGlmIChiYXNlLT50cF9tcm8gPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGV4dGVuZCBhbiBpbmNvbXBsZXRlIHR5cGUgJyUuMTAwcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UtPnRwX25hbWUpOworICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgIH0KIAotICAgICAgICBQeUxpc3RfU0VUX0lURU0odG9fbWVyZ2UsIGksIHBhcmVudE1STyk7CisgICAgICAgIGJhc2VfbXJvX2FzbGlzdCA9IFB5U2VxdWVuY2VfTGlzdChiYXNlLT50cF9tcm8pOworICAgICAgICBpZiAoYmFzZV9tcm9fYXNsaXN0ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIG91dDsKKworICAgICAgICBQeUxpc3RfU0VUX0lURU0odG9fbWVyZ2UsIGksIGJhc2VfbXJvX2FzbGlzdCk7CiAgICAgfQogCiAgICAgYmFzZXNfYXNsaXN0ID0gUHlTZXF1ZW5jZV9MaXN0KGJhc2VzKTsKLSAgICBpZiAoYmFzZXNfYXNsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgUHlfREVDUkVGKHRvX21lcmdlKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmIChiYXNlc19hc2xpc3QgPT0gTlVMTCkKKyAgICAgICAgZ290byBvdXQ7CiAgICAgLyogVGhpcyBpcyBqdXN0IGEgYmFzaWMgc2FuaXR5IGNoZWNrLiAqLwogICAgIGlmIChjaGVja19kdXBsaWNhdGVzKGJhc2VzX2FzbGlzdCkgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRih0b19tZXJnZSk7CiAgICAgICAgIFB5X0RFQ1JFRihiYXNlc19hc2xpc3QpOwotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgZ290byBvdXQ7CiAgICAgfQogICAgIFB5TGlzdF9TRVRfSVRFTSh0b19tZXJnZSwgbiwgYmFzZXNfYXNsaXN0KTsKIAogICAgIHJlc3VsdCA9IFB5X0J1aWxkVmFsdWUoIltPXSIsIChQeU9iamVjdCAqKXR5cGUpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewotICAgICAgICBQeV9ERUNSRUYodG9fbWVyZ2UpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgaWYgKHJlc3VsdCA9PSBOVUxMKQorICAgICAgICBnb3RvIG91dDsKIAotICAgIG9rID0gcG1lcmdlKHJlc3VsdCwgdG9fbWVyZ2UpOworICAgIHJlcyA9IHBtZXJnZShyZXN1bHQsIHRvX21lcmdlKTsKKyAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgUHlfQ0xFQVIocmVzdWx0KTsKKworICBvdXQ6CiAgICAgUHlfREVDUkVGKHRvX21lcmdlKTsKLSAgICBpZiAob2sgPCAwKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTU4MSw1OSArMTc2NSwxMzMgQEAKIH0KIAogc3RhdGljIGludAotbXJvX2ludGVybmFsKFB5VHlwZU9iamVjdCAqdHlwZSkKK21yb19jaGVjayhQeVR5cGVPYmplY3QgKnR5cGUsIFB5T2JqZWN0ICptcm8pCiB7Ci0gICAgUHlPYmplY3QgKm1ybywgKnJlc3VsdCwgKnR1cGxlOwotICAgIGludCBjaGVja2l0ID0gMDsKKyAgICBQeVR5cGVPYmplY3QgKnNvbGlkOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAotICAgIGlmIChQeV9UWVBFKHR5cGUpID09ICZQeVR5cGVfVHlwZSkgewotICAgICAgICByZXN1bHQgPSBtcm9faW1wbGVtZW50YXRpb24odHlwZSk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihtcm8pOwotICAgICAgICBjaGVja2l0ID0gMTsKLSAgICAgICAgbXJvID0gbG9va3VwX21ldGhvZCgoUHlPYmplY3QgKil0eXBlLCAmUHlJZF9tcm8pOwotICAgICAgICBpZiAobXJvID09IE5VTEwpCisgICAgc29saWQgPSBzb2xpZF9iYXNlKHR5cGUpOworCisgICAgbiA9IFB5VHVwbGVfR0VUX1NJWkUobXJvKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIFB5VHlwZU9iamVjdCAqYmFzZTsKKyAgICAgICAgUHlPYmplY3QgKnRtcDsKKworICAgICAgICB0bXAgPSBQeVR1cGxlX0dFVF9JVEVNKG1ybywgaSk7CisgICAgICAgIGlmICghUHlUeXBlX0NoZWNrKHRtcCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdCgKKyAgICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgIm1ybygpIHJldHVybmVkIGEgbm9uLWNsYXNzICgnJS41MDBzJykiLAorICAgICAgICAgICAgICAgIFB5X1RZUEUodG1wKS0+dHBfbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QobXJvLCBOVUxMKTsKLSAgICAgICAgUHlfREVDUkVGKG1ybyk7Ci0gICAgfQotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIHR1cGxlID0gUHlTZXF1ZW5jZV9UdXBsZShyZXN1bHQpOwotICAgIFB5X0RFQ1JFRihyZXN1bHQpOwotICAgIGlmICh0dXBsZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgaWYgKGNoZWNraXQpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpLCBsZW47Ci0gICAgICAgIFB5T2JqZWN0ICpjbHM7Ci0gICAgICAgIFB5VHlwZU9iamVjdCAqc29saWQ7CisgICAgICAgIH0KIAotICAgICAgICBzb2xpZCA9IHNvbGlkX2Jhc2UodHlwZSk7Ci0KLSAgICAgICAgbGVuID0gUHlUdXBsZV9HRVRfU0laRSh0dXBsZSk7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICBQeVR5cGVPYmplY3QgKnQ7Ci0gICAgICAgICAgICBjbHMgPSBQeVR1cGxlX0dFVF9JVEVNKHR1cGxlLCBpKTsKLSAgICAgICAgICAgIGlmICghUHlUeXBlX0NoZWNrKGNscykpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAibXJvKCkgcmV0dXJuZWQgYSBub24tY2xhc3MgKCclLjUwMHMnKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKGNscyktPnRwX25hbWUpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0dXBsZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdCA9IChQeVR5cGVPYmplY3QqKWNsczsKLSAgICAgICAgICAgIGlmICghUHlUeXBlX0lzU3VidHlwZShzb2xpZCwgc29saWRfYmFzZSh0KSkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICJtcm8oKSByZXR1cm5lZCBiYXNlIHdpdGggdW5zdWl0YWJsZSBsYXlvdXQgKCclLjUwMHMnKSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+dHBfbmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgfQorICAgICAgICBiYXNlID0gKFB5VHlwZU9iamVjdCopdG1wOworICAgICAgICBpZiAoIVB5VHlwZV9Jc1N1YnR5cGUoc29saWQsIHNvbGlkX2Jhc2UoYmFzZSkpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoCisgICAgICAgICAgICAgICAgUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICJtcm8oKSByZXR1cm5lZCBiYXNlIHdpdGggdW5zdWl0YWJsZSBsYXlvdXQgKCclLjUwMHMnKSIsCisgICAgICAgICAgICAgICAgYmFzZS0+dHBfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgdHlwZS0+dHBfbXJvID0gdHVwbGU7CisKKyAgICByZXR1cm4gMDsKK30KKworLyogTG9va3VwcyBhbiBtY2xzLm1ybyBtZXRob2QsIGludm9rZXMgaXQgYW5kIGNoZWNrcyB0aGUgcmVzdWx0IChpZiBuZWVkZWQsCisgICBpbiBjYXNlIG9mIGEgY3VzdG9tIG1ybygpIGltcGxlbWVudGF0aW9uKS4KKworICAgS2VlcCBpbiBtaW5kIHRoYXQgZHVyaW5nIGV4ZWN1dGlvbiBvZiB0aGlzIGZ1bmN0aW9uIHR5cGUtPnRwX21ybworICAgY2FuIGJlIHJlcGxhY2VkIGR1ZSB0byBwb3NzaWJsZSByZWVudHJhbmNlIChmb3IgZXhhbXBsZSwKKyAgIHRocm91Z2ggdHlwZV9zZXRfYmFzZXMpOgorCisgICAgICAtIHdoZW4gbG9va2luZyB1cCB0aGUgbWNscy5tcm8gYXR0cmlidXRlIChpdCBjb3VsZCBiZQorICAgICAgICBhIHVzZXItcHJvdmlkZWQgZGVzY3JpcHRvcik7CisKKyAgICAgIC0gZnJvbSBpbnNpZGUgYSBjdXN0b20gbXJvKCkgaXRzZWxmOworCisgICAgICAtIHRocm91Z2ggYSBmaW5hbGl6ZXIgb2YgdGhlIHJldHVybiB2YWx1ZSBvZiBtcm8oKS4KKyovCitzdGF0aWMgUHlPYmplY3QgKgorbXJvX2ludm9rZShQeVR5cGVPYmplY3QgKnR5cGUpCit7CisgICAgUHlPYmplY3QgKm1yb19yZXN1bHQ7CisgICAgUHlPYmplY3QgKm5ld19tcm87CisgICAgaW50IGN1c3RvbSA9IChQeV9UWVBFKHR5cGUpICE9ICZQeVR5cGVfVHlwZSk7CisKKyAgICBpZiAoY3VzdG9tKSB7CisgICAgICAgIF9QeV9JREVOVElGSUVSKG1ybyk7CisgICAgICAgIFB5T2JqZWN0ICptcm9fbWV0aCA9IGxvb2t1cF9tZXRob2QoKFB5T2JqZWN0ICopdHlwZSwgJlB5SWRfbXJvKTsKKyAgICAgICAgaWYgKG1yb19tZXRoID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbXJvX3Jlc3VsdCA9IFB5T2JqZWN0X0NhbGxPYmplY3QobXJvX21ldGgsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYobXJvX21ldGgpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbXJvX3Jlc3VsdCA9IG1yb19pbXBsZW1lbnRhdGlvbih0eXBlKTsKKyAgICB9CisgICAgaWYgKG1yb19yZXN1bHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuZXdfbXJvID0gUHlTZXF1ZW5jZV9UdXBsZShtcm9fcmVzdWx0KTsKKyAgICBQeV9ERUNSRUYobXJvX3Jlc3VsdCk7CisgICAgaWYgKG5ld19tcm8gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoY3VzdG9tICYmIG1yb19jaGVjayh0eXBlLCBuZXdfbXJvKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKG5ld19tcm8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3X21ybzsKK30KKworLyogQ2FsY3VsYXRlcyBhbmQgYXNzaWducyBhIG5ldyBNUk8gdG8gdHlwZS0+dHBfbXJvLgorICAgUmV0dXJuIHZhbHVlcyBhbmQgaW52YXJpYW50czoKKworICAgICAtIFJldHVybnMgMSBpZiBhIG5ldyBNUk8gdmFsdWUgaGFzIGJlZW4gc2V0IHRvIHR5cGUtPnRwX21ybyBkdWUgdG8KKyAgICAgICB0aGlzIGNhbGwgb2YgbXJvX2ludGVybmFsIChubyB0cmlja3kgcmVlbnRyYW5jeSBhbmQgbm8gZXJyb3JzKS4KKworICAgICAgIEluIGNhc2UgaWYgcF9vbGRfbXJvIGFyZ3VtZW50IGlzIG5vdCBOVUxMLCBhIHByZXZpb3VzIHZhbHVlCisgICAgICAgb2YgdHlwZS0+dHBfbXJvIGlzIHB1dCB0aGVyZSwgYW5kIHRoZSBvd25lcnNoaXAgb2YgdGhpcworICAgICAgIHJlZmVyZW5jZSBpcyB0cmFuc2ZlcnJlZCB0byBhIGNhbGxlci4KKyAgICAgICBPdGhlcndpc2UsIHRoZSBwcmV2aW91cyB2YWx1ZSAoaWYgYW55KSBpcyBkZWNyZWYnZWQuCisKKyAgICAgLSBSZXR1cm5zIDAgaW4gY2FzZSB3aGVuIHR5cGUtPnRwX21ybyBnZXRzIGNoYW5nZWQgYmVjYXVzZSBvZgorICAgICAgIHJlZW50ZXJpbmcgaGVyZSB0aHJvdWdoIGEgY3VzdG9tIG1ybygpIChzZWUgYSBjb21tZW50IHRvIG1yb19pbnZva2UpLgorCisgICAgICAgSW4gdGhpcyBjYXNlLCBhIHJlZmNvdW50IG9mIGFuIG9sZCB0eXBlLT50cF9tcm8gaXMgYWRqdXN0ZWQKKyAgICAgICBzb21ld2hlcmUgZGVlcGVyIGluIHRoZSBjYWxsIHN0YWNrIChieSB0aGUgaW5uZXJtb3N0IG1yb19pbnRlcm5hbAorICAgICAgIG9yIGl0cyBjYWxsZXIpIGFuZCBtYXkgYmVjb21lIHplcm8gdXBvbiByZXR1cm5pbmcgZnJvbSBoZXJlLgorICAgICAgIFRoaXMgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIHdob2xlIGhpZXJhcmNoeSBvZiBzdWJjbGFzc2VzIG9mIHRoZSB0eXBlCisgICAgICAgaGFzIHNlZW4gdGhlIG5ldyB2YWx1ZSBhbmQgdXBkYXRlZCB0aGVpciBNUk8gYWNjb3JkaW5nbHkuCisKKyAgICAgLSBSZXR1cm5zIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisqLworc3RhdGljIGludAorbXJvX2ludGVybmFsKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKipwX29sZF9tcm8pCit7CisgICAgUHlPYmplY3QgKm5ld19tcm8sICpvbGRfbXJvOworICAgIGludCByZWVudDsKKworICAgIC8qIEtlZXAgYSByZWZlcmVuY2UgdG8gYmUgYWJsZSB0byBkbyBhIHJlZW50cmFuY3kgY2hlY2sgYmVsb3cuCisgICAgICAgRG9uJ3QgbGV0IG9sZF9tcm8gYmUgR0MnZWQgYW5kIGl0cyBhZGRyZXNzIGJlIHJldXNlZCBmb3IKKyAgICAgICBhbm90aGVyIG9iamVjdCwgbGlrZSAoc3VkZGVubHkhKSBhIG5ldyB0cF9tcm8uICAqLworICAgIG9sZF9tcm8gPSB0eXBlLT50cF9tcm87CisgICAgUHlfWElOQ1JFRihvbGRfbXJvKTsKKyAgICBuZXdfbXJvID0gbXJvX2ludm9rZSh0eXBlKTsgIC8qIG1pZ2h0IGNhdXNlIHJlZW50cmFuY2UgKi8KKyAgICByZWVudCA9ICh0eXBlLT50cF9tcm8gIT0gb2xkX21ybyk7CisgICAgUHlfWERFQ1JFRihvbGRfbXJvKTsKKyAgICBpZiAobmV3X21ybyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAocmVlbnQpIHsKKyAgICAgICAgUHlfREVDUkVGKG5ld19tcm8pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICB0eXBlLT50cF9tcm8gPSBuZXdfbXJvOwogCiAgICAgdHlwZV9tcm9fbW9kaWZpZWQodHlwZSwgdHlwZS0+dHBfbXJvKTsKICAgICAvKiBjb3JuZXIgY2FzZTogdGhlIHN1cGVyIGNsYXNzIG1pZ2h0IGhhdmUgYmVlbiBoaWRkZW4KQEAgLTE2NDIsNyArMTkwMCwxMiBAQAogCiAgICAgUHlUeXBlX01vZGlmaWVkKHR5cGUpOwogCi0gICAgcmV0dXJuIDA7CisgICAgaWYgKHBfb2xkX21ybyAhPSBOVUxMKQorICAgICAgICAqcF9vbGRfbXJvID0gb2xkX21ybzsgIC8qIHRyYW5zZmVyIHRoZSBvd25lcnNoaXAgKi8KKyAgICBlbHNlCisgICAgICAgIFB5X1hERUNSRUYob2xkX21ybyk7CisKKyAgICByZXR1cm4gMTsKIH0KIAogCkBAIC0xNjc0LDYgKzE5MzcsMTIgQEAKICAgICAgICAgICAgIGlmIChQeVR5cGVfUmVhZHkoYmFzZV9pKSA8IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeVR5cGVfSGFzRmVhdHVyZShiYXNlX2ksIFB5X1RQRkxBR1NfQkFTRVRZUEUpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlICclLjEwMHMnIGlzIG5vdCBhbiBhY2NlcHRhYmxlIGJhc2UgdHlwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZV9pLT50cF9uYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CiAgICAgICAgIGNhbmRpZGF0ZSA9IHNvbGlkX2Jhc2UoYmFzZV9pKTsKICAgICAgICAgaWYgKHdpbm5lciA9PSBOVUxMKSB7CiAgICAgICAgICAgICB3aW5uZXIgPSBjYW5kaWRhdGU7CkBAIC0xOTM5LDcgKzIyMDgsNyBAQAogICAgIHJldHVybiByZXM7CiB9CiAKLWxvbmcKK3Vuc2lnbmVkIGxvbmcKIFB5VHlwZV9HZXRGbGFncyhQeVR5cGVPYmplY3QgKnR5cGUpCiB7CiAgICAgcmV0dXJuIHR5cGUtPnRwX2ZsYWdzOwpAQCAtMjA1NCwxMiArMjMyMyw2IEBACiAgICAgaWYgKGJhc2UgPT0gTlVMTCkgewogICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KLSAgICBpZiAoIVB5VHlwZV9IYXNGZWF0dXJlKGJhc2UsIFB5X1RQRkxBR1NfQkFTRVRZUEUpKSB7Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAidHlwZSAnJS4xMDBzJyBpcyBub3QgYW4gYWNjZXB0YWJsZSBiYXNlIHR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgYmFzZS0+dHBfbmFtZSk7Ci0gICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQogCiAgICAgZGljdCA9IFB5RGljdF9Db3B5KG9yaWdfZGljdCk7CiAgICAgaWYgKGRpY3QgPT0gTlVMTCkKQEAgLTIxMDgsNyArMjM3MSw3IEBACiAgICAgICAgICAgICBpZiAoIXZhbGlkX2lkZW50aWZpZXIodG1wKSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayh0bXApKTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyh0bXAsICJfX2RpY3RfXyIpID09IDApIHsKKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQodG1wLCAmUHlJZF9fX2RpY3RfXykgPT0gMCkgewogICAgICAgICAgICAgICAgIGlmICghbWF5X2FkZF9kaWN0IHx8IGFkZF9kaWN0KSB7CiAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAiX19kaWN0X18gc2xvdCBkaXNhbGxvd2VkOiAiCkBAIC0yMTM5LDcgKzI0MDIsNyBAQAogICAgICAgICBmb3IgKGkgPSBqID0gMDsgaSA8IG5zbG90czsgaSsrKSB7CiAgICAgICAgICAgICB0bXAgPSBQeVR1cGxlX0dFVF9JVEVNKHNsb3RzLCBpKTsKICAgICAgICAgICAgIGlmICgoYWRkX2RpY3QgJiYKLSAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX19kaWN0X18iKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQodG1wLCAmUHlJZF9fX2RpY3RfXykgPT0gMCkgfHwKICAgICAgICAgICAgICAgICAoYWRkX3dlYWsgJiYKICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcodG1wLCAiX193ZWFrcmVmX18iKSA9PSAwKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTIyMTAsNyArMjQ3Myw3IEBACiAKICAgICAvKiBJbml0aWFsaXplIHRwX2ZsYWdzICovCiAgICAgdHlwZS0+dHBfZmxhZ3MgPSBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0hFQVBUWVBFIHwKLSAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRTsKKyAgICAgICAgUHlfVFBGTEFHU19CQVNFVFlQRSB8IFB5X1RQRkxBR1NfSEFWRV9GSU5BTElaRTsKICAgICBpZiAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfR0MpCiAgICAgICAgIHR5cGUtPnRwX2ZsYWdzIHw9IFB5X1RQRkxBR1NfSEFWRV9HQzsKIApAQCAtMjI4MCw4ICsyNTQzLDEwIEBACiAgICAgICAgICAgICAvKiBTaWxlbnRseSB0cnVuY2F0ZSB0aGUgZG9jc3RyaW5nIGlmIGl0IGNvbnRhaW5zIG51bGwgYnl0ZXMuICovCiAgICAgICAgICAgICBsZW4gPSBzdHJsZW4oZG9jX3N0cik7CiAgICAgICAgICAgICB0cF9kb2MgPSAoY2hhciAqKVB5T2JqZWN0X01BTExPQyhsZW4gKyAxKTsKLSAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIG1lbWNweSh0cF9kb2MsIGRvY19zdHIsIGxlbiArIDEpOwogICAgICAgICAgICAgdHlwZS0+dHBfZG9jID0gdHBfZG9jOwogICAgICAgICB9CkBAIC0yMzI1LDkgKzI1OTAsNiBAQAogICAgICAgICAgICAgdHlwZS0+dHBfZGljdG9mZnNldCA9IHNsb3RvZmZzZXQ7CiAgICAgICAgIHNsb3RvZmZzZXQgKz0gc2l6ZW9mKFB5T2JqZWN0ICopOwogICAgIH0KLSAgICBpZiAodHlwZS0+dHBfZGljdG9mZnNldCkgewotICAgICAgICBldC0+aHRfY2FjaGVkX2tleXMgPSBfUHlEaWN0X05ld0tleXNGb3JDbGFzcygpOwotICAgIH0KICAgICBpZiAoYWRkX3dlYWspIHsKICAgICAgICAgYXNzZXJ0KCFiYXNlLT50cF9pdGVtc2l6ZSk7CiAgICAgICAgIHR5cGUtPnRwX3dlYWtsaXN0b2Zmc2V0ID0gc2xvdG9mZnNldDsKQEAgLTIzNzcsNiArMjYzOSwxMCBAQAogICAgIC8qIFB1dCB0aGUgcHJvcGVyIHNsb3RzIGluIHBsYWNlICovCiAgICAgZml4dXBfc2xvdF9kaXNwYXRjaGVycyh0eXBlKTsKIAorICAgIGlmICh0eXBlLT50cF9kaWN0b2Zmc2V0KSB7CisgICAgICAgIGV0LT5odF9jYWNoZWRfa2V5cyA9IF9QeURpY3RfTmV3S2V5c0ZvckNsYXNzKCk7CisgICAgfQorCiAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgIHJldHVybiAoUHlPYmplY3QgKil0eXBlOwogCkBAIC0yNDAxLDcgKzI2NjcsNyBAQAogICAgIGNoYXIgKnM7CiAgICAgY2hhciAqcmVzX3N0YXJ0ID0gKGNoYXIqKXJlczsKICAgICBQeVR5cGVfU2xvdCAqc2xvdDsKLSAgICAKKwogICAgIC8qIFNldCB0aGUgdHlwZSBuYW1lIGFuZCBxdWFsbmFtZSAqLwogICAgIHMgPSBzdHJyY2hyKHNwZWMtPm5hbWUsICcuJyk7CiAgICAgaWYgKHMgPT0gTlVMTCkKQEAgLTI0MjIsNyArMjY4OCw3IEBACiAgICAgdHlwZS0+dHBfbmFtZSA9IHNwZWMtPm5hbWU7CiAgICAgaWYgKCF0eXBlLT50cF9uYW1lKQogICAgICAgICBnb3RvIGZhaWw7Ci0gICAgCisKICAgICAvKiBBZGp1c3QgZm9yIGVtcHR5IHR1cGxlIGJhc2VzICovCiAgICAgaWYgKCFiYXNlcykgewogICAgICAgICBiYXNlID0gJlB5QmFzZU9iamVjdF9UeXBlOwpAQCAtMjQ4MiwxNyArMjc0OCwxNyBAQAogICAgICAgICAvKiBuZWVkIHRvIG1ha2UgYSBjb3B5IG9mIHRoZSBkb2NzdHJpbmcgc2xvdCwgd2hpY2ggdXN1YWxseQogICAgICAgICAgICBwb2ludHMgdG8gYSBzdGF0aWMgc3RyaW5nIGxpdGVyYWwgKi8KICAgICAgICAgaWYgKHNsb3QtPnNsb3QgPT0gUHlfdHBfZG9jKSB7Ci0gICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKHNsb3QtPnBmdW5jKSsxOworICAgICAgICAgICAgY29uc3QgY2hhciAqb2xkX2RvYyA9IF9QeVR5cGVfRG9jV2l0aG91dFNpZ25hdHVyZSh0eXBlLT50cF9uYW1lLCBzbG90LT5wZnVuYyk7CisgICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKG9sZF9kb2MpKzE7CiAgICAgICAgICAgICBjaGFyICp0cF9kb2MgPSBQeU9iamVjdF9NQUxMT0MobGVuKTsKLSAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkKKyAgICAgICAgICAgIGlmICh0cF9kb2MgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgbWVtY3B5KHRwX2RvYywgc2xvdC0+cGZ1bmMsIGxlbik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1jcHkodHBfZG9jLCBvbGRfZG9jLCBsZW4pOwogICAgICAgICAgICAgdHlwZS0+dHBfZG9jID0gdHBfZG9jOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICh0eXBlLT50cF9kaWN0b2Zmc2V0KSB7Ci0gICAgICAgIHJlcy0+aHRfY2FjaGVkX2tleXMgPSBfUHlEaWN0X05ld0tleXNGb3JDbGFzcygpOwotICAgIH0KICAgICBpZiAodHlwZS0+dHBfZGVhbGxvYyA9PSBOVUxMKSB7CiAgICAgICAgIC8qIEl0J3MgYSBoZWFwIHR5cGUsIHNvIG5lZWRzIHRoZSBoZWFwIHR5cGVzJyBkZWFsbG9jLgogICAgICAgICAgICBzdWJ0eXBlX2RlYWxsb2Mgd2lsbCBjYWxsIHRoZSBiYXNlIHR5cGUncyB0cF9kZWFsbG9jLCBpZgpAQCAtMjUwMywxMCArMjc2OSwxNCBAQAogICAgIGlmIChQeVR5cGVfUmVhZHkodHlwZSkgPCAwKQogICAgICAgICBnb3RvIGZhaWw7CiAKKyAgICBpZiAodHlwZS0+dHBfZGljdG9mZnNldCkgeworICAgICAgICByZXMtPmh0X2NhY2hlZF9rZXlzID0gX1B5RGljdF9OZXdLZXlzRm9yQ2xhc3MoKTsKKyAgICB9CisKICAgICAvKiBTZXQgdHlwZS5fX21vZHVsZV9fICovCiAgICAgcyA9IHN0cnJjaHIoc3BlYy0+bmFtZSwgJy4nKTsKICAgICBpZiAocyAhPSBOVUxMKQotICAgICAgICBfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX21vZHVsZV9fLCAKKyAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19tb2R1bGVfXywKICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZSgKICAgICAgICAgICAgICAgICBzcGVjLT5uYW1lLCAoUHlfc3NpemVfdCkocyAtIHNwZWMtPm5hbWUpKSk7CiAKQEAgLTI1MjMsNiArMjc5MywxOSBAQAogICAgIHJldHVybiBQeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMoc3BlYywgTlVMTCk7CiB9CiAKK3ZvaWQgKgorUHlUeXBlX0dldFNsb3QoUHlUeXBlT2JqZWN0ICp0eXBlLCBpbnQgc2xvdCkKK3sKKyAgICBpZiAoIVB5VHlwZV9IYXNGZWF0dXJlKHR5cGUsIFB5X1RQRkxBR1NfSEVBUFRZUEUpKSB7CisgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKHNsb3QgPj0gUHlfQVJSQVlfTEVOR1RIKHNsb3RvZmZzZXRzKSkgeworICAgICAgICAvKiBFeHRlbnNpb24gbW9kdWxlIHJlcXVlc3Rpbmcgc2xvdCBmcm9tIGEgZnV0dXJlIHZlcnNpb24gKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiAgKih2b2lkKiopKCgoY2hhciopdHlwZSkgKyBzbG90b2Zmc2V0c1tzbG90XSk7Cit9CiAKIC8qIEludGVybmFsIEFQSSB0byBsb29rIGZvciBhIG5hbWUgdGhyb3VnaCB0aGUgTVJPLgogICAgVGhpcyByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlLCBhbmQgZG9lc24ndCBzZXQgYW4gZXhjZXB0aW9uISAqLwpAQCAtMjY5NSwxMCArMjk3OCwxNCBAQAogdHlwZV9kZWFsbG9jKFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKICAgICBQeUhlYXBUeXBlT2JqZWN0ICpldDsKKyAgICBQeU9iamVjdCAqdHAsICp2YWwsICp0YjsKIAogICAgIC8qIEFzc2VydCB0aGlzIGlzIGEgaGVhcC1hbGxvY2F0ZWQgdHlwZSBvYmplY3QgKi8KICAgICBhc3NlcnQodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hFQVBUWVBFKTsKICAgICBfUHlPYmplY3RfR0NfVU5UUkFDSyh0eXBlKTsKKyAgICBQeUVycl9GZXRjaCgmdHAsICZ2YWwsICZ0Yik7CisgICAgcmVtb3ZlX2FsbF9zdWJjbGFzc2VzKHR5cGUsIHR5cGUtPnRwX2Jhc2VzKTsKKyAgICBQeUVycl9SZXN0b3JlKHRwLCB2YWwsIHRiKTsKICAgICBQeU9iamVjdF9DbGVhcldlYWtSZWZzKChQeU9iamVjdCAqKXR5cGUpOwogICAgIGV0ID0gKFB5SGVhcFR5cGVPYmplY3QgKil0eXBlOwogICAgIFB5X1hERUNSRUYodHlwZS0+dHBfYmFzZSk7CkBAIC0yNzIzLDcgKzMwMTAsNyBAQAogdHlwZV9zdWJjbGFzc2VzKFB5VHlwZU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKmFyZ3NfaWdub3JlZCkKIHsKICAgICBQeU9iamVjdCAqbGlzdCwgKnJhdywgKnJlZjsKLSAgICBQeV9zc2l6ZV90IGksIG47CisgICAgUHlfc3NpemVfdCBpOwogCiAgICAgbGlzdCA9IFB5TGlzdF9OZXcoMCk7CiAgICAgaWYgKGxpc3QgPT0gTlVMTCkKQEAgLTI3MzEsMTAgKzMwMTgsOSBAQAogICAgIHJhdyA9IHR5cGUtPnRwX3N1YmNsYXNzZXM7CiAgICAgaWYgKHJhdyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gbGlzdDsKLSAgICBhc3NlcnQoUHlMaXN0X0NoZWNrKHJhdykpOwotICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUocmF3KTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShyYXcsIGkpOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChyYXcpKTsKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoUHlEaWN0X05leHQocmF3LCAmaSwgTlVMTCwgJnJlZikpIHsKICAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKICAgICAgICAgcmVmID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKTsKICAgICAgICAgaWYgKHJlZiAhPSBQeV9Ob25lKSB7CkBAIC0yODY3LDYgKzMxNTMsOCBAQAogfTsKIAogUHlEb2NfU1RSVkFSKHR5cGVfZG9jLAorLyogdGhpcyB0ZXh0IHNpZ25hdHVyZSBjYW5ub3QgYmUgYWNjdXJhdGUgeWV0LiAgd2lsbCBmaXguICAtLWxhcnJ5ICovCisidHlwZShvYmplY3Rfb3JfbmFtZSwgYmFzZXMsIGRpY3QpXG4iCiAidHlwZShvYmplY3QpIC0+IHRoZSBvYmplY3QncyB0eXBlXG4iCiAidHlwZShuYW1lLCBiYXNlcywgZGljdCkgLT4gYSBuZXcgdHlwZSIpOwogCkBAIC0yOTIzLDggKzMyMTEsOCBAQAogICAgICAgICAgICBjbGFzcydzIGRpY3Q7IHRoZSBjeWNsZSB3aWxsIGJlIGJyb2tlbiB0aGF0IHdheS4KIAogICAgICAgIHRwX3N1YmNsYXNzZXM6Ci0gICAgICAgICAgIEEgbGlzdCBvZiB3ZWFrIHJlZmVyZW5jZXMgY2FuJ3QgYmUgcGFydCBvZiBhIGN5Y2xlOyBhbmQKLSAgICAgICAgICAgbGlzdHMgaGF2ZSB0aGVpciBvd24gdHBfY2xlYXIuCisgICAgICAgICAgIEEgZGljdCBvZiB3ZWFrIHJlZmVyZW5jZXMgY2FuJ3QgYmUgcGFydCBvZiBhIGN5Y2xlOyBhbmQKKyAgICAgICAgICAgZGljdHMgaGF2ZSB0aGVpciBvd24gdHBfY2xlYXIuCiAKICAgICAgICBzbG90cyAoaW4gUHlIZWFwVHlwZU9iamVjdCk6CiAgICAgICAgICAgIEEgdHVwbGUgb2Ygc3RyaW5ncyBjYW4ndCBiZSBwYXJ0IG9mIGEgY3ljbGUuCkBAIC0zMTQxLDcgKzM0MjksNyBAQAogICAgICAgICBQeV9YREVDUkVGKG1vZCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAobW9kICE9IE5VTEwgJiYgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobW9kLCAiYnVpbHRpbnMiKSkKKyAgICBpZiAobW9kICE9IE5VTEwgJiYgX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG1vZCwgJlB5SWRfYnVpbHRpbnMpKQogICAgICAgICBydG4gPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiPCVVLiVVIG9iamVjdCBhdCAlcD4iLCBtb2QsIG5hbWUsIHNlbGYpOwogICAgIGVsc2UKICAgICAgICAgcnRuID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoIjwlcyBvYmplY3QgYXQgJXA+IiwKQEAgLTMxNzgsOSArMzQ2NiwxNCBAQAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUHlfTkU6Ci0gICAgICAgIC8qIEJ5IGRlZmF1bHQsICE9IHJldHVybnMgdGhlIG9wcG9zaXRlIG9mID09LAorICAgICAgICAvKiBCeSBkZWZhdWx0LCBfX25lX18oKSBkZWxlZ2F0ZXMgdG8gX19lcV9fKCkgYW5kIGludmVydHMgdGhlIHJlc3VsdCwKICAgICAgICAgICAgdW5sZXNzIHRoZSBsYXR0ZXIgcmV0dXJucyBOb3RJbXBsZW1lbnRlZC4gKi8KLSAgICAgICAgcmVzID0gUHlPYmplY3RfUmljaENvbXBhcmUoc2VsZiwgb3RoZXIsIFB5X0VRKTsKKyAgICAgICAgaWYgKHNlbGYtPm9iX3R5cGUtPnRwX3JpY2hjb21wYXJlID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJlcyA9IFB5X05vdEltcGxlbWVudGVkOworICAgICAgICAgICAgUHlfSU5DUkVGKHJlcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXMgPSAoKnNlbGYtPm9iX3R5cGUtPnRwX3JpY2hjb21wYXJlKShzZWxmLCBvdGhlciwgUHlfRVEpOwogICAgICAgICBpZiAocmVzICE9IE5VTEwgJiYgcmVzICE9IFB5X05vdEltcGxlbWVudGVkKSB7CiAgICAgICAgICAgICBpbnQgb2sgPSBQeU9iamVjdF9Jc1RydWUocmVzKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwpAQCAtMzMxMyw3ICszNjA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18gYXNzaWdubWVudDogb25seSBmb3IgaGVhcCB0eXBlcyIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChjb21wYXRpYmxlX2Zvcl9hc3NpZ25tZW50KG5ld3RvLCBvbGR0bywgIl9fY2xhc3NfXyIpKSB7CisgICAgaWYgKGNvbXBhdGlibGVfZm9yX2Fzc2lnbm1lbnQob2xkdG8sIG5ld3RvLCAiX19jbGFzc19fIikpIHsKICAgICAgICAgUHlfSU5DUkVGKG5ld3RvKTsKICAgICAgICAgUHlfVFlQRShzZWxmKSA9IG5ld3RvOwogICAgICAgICBQeV9ERUNSRUYob2xkdG8pOwpAQCAtMzM2NiwxNTAgKzM2NTksNDM4IEBACiAgICAgcmV0dXJuIFB5SW1wb3J0X0ltcG9ydChjb3B5cmVnX3N0cik7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1zbG90bmFtZXMoUHlPYmplY3QgKmNscykKK1B5X0xPQ0FMKFB5T2JqZWN0ICopCitfUHlUeXBlX0dldFNsb3ROYW1lcyhQeVR5cGVPYmplY3QgKmNscykKIHsKLSAgICBQeU9iamVjdCAqY2xzZGljdDsKICAgICBQeU9iamVjdCAqY29weXJlZzsKICAgICBQeU9iamVjdCAqc2xvdG5hbWVzOwogICAgIF9QeV9JREVOVElGSUVSKF9fc2xvdG5hbWVzX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9zbG90bmFtZXMpOwogCi0gICAgY2xzZGljdCA9ICgoUHlUeXBlT2JqZWN0ICopY2xzKS0+dHBfZGljdDsKLSAgICBzbG90bmFtZXMgPSBfUHlEaWN0X0dldEl0ZW1JZChjbHNkaWN0LCAmUHlJZF9fX3Nsb3RuYW1lc19fKTsKLSAgICBpZiAoc2xvdG5hbWVzICE9IE5VTEwgJiYgUHlMaXN0X0NoZWNrKHNsb3RuYW1lcykpIHsKKyAgICBhc3NlcnQoUHlUeXBlX0NoZWNrKGNscykpOworCisgICAgLyogR2V0IHRoZSBzbG90IG5hbWVzIGZyb20gdGhlIGNhY2hlIGluIHRoZSBjbGFzcyBpZiBwb3NzaWJsZS4gKi8KKyAgICBzbG90bmFtZXMgPSBfUHlEaWN0X0dldEl0ZW1JZFdpdGhFcnJvcihjbHMtPnRwX2RpY3QsICZQeUlkX19fc2xvdG5hbWVzX18pOworICAgIGlmIChzbG90bmFtZXMgIT0gTlVMTCkgeworICAgICAgICBpZiAoc2xvdG5hbWVzICE9IFB5X05vbmUgJiYgIVB5TGlzdF9DaGVjayhzbG90bmFtZXMpKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICIlLjIwMHMuX19zbG90bmFtZXNfXyBzaG91bGQgYmUgYSBsaXN0IG9yIE5vbmUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibm90ICUuMjAwcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY2xzLT50cF9uYW1lLCBQeV9UWVBFKHNsb3RuYW1lcyktPnRwX25hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgUHlfSU5DUkVGKHNsb3RuYW1lcyk7CiAgICAgICAgIHJldHVybiBzbG90bmFtZXM7CiAgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgLyogVGhlIGNsYXNzIGRvZXMgbm90IGhhdmUgdGhlIHNsb3QgbmFtZXMgY2FjaGVkIHlldC4gKi8KKyAgICB9CiAKICAgICBjb3B5cmVnID0gaW1wb3J0X2NvcHlyZWcoKTsKICAgICBpZiAoY29weXJlZyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHNsb3RuYW1lcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoY29weXJlZywgJlB5SWRfX3Nsb3RuYW1lcywgIk8iLCBjbHMpOworICAgIC8qIFVzZSBfc2xvdG5hbWVzIGZ1bmN0aW9uIGZyb20gdGhlIGNvcHlyZWcgbW9kdWxlIHRvIGZpbmQgdGhlIHNsb3RzCisgICAgICAgYnkgdGhpcyBjbGFzcyBhbmQgaXRzIGJhc2VzLiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2FjaGUgdGhlIHJlc3VsdAorICAgICAgIGluIF9fc2xvdG5hbWVzX18uICovCisgICAgc2xvdG5hbWVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoY29weXJlZywgJlB5SWRfX3Nsb3RuYW1lcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbHMsIE5VTEwpOwogICAgIFB5X0RFQ1JFRihjb3B5cmVnKTsKLSAgICBpZiAoc2xvdG5hbWVzICE9IE5VTEwgJiYKLSAgICAgICAgc2xvdG5hbWVzICE9IFB5X05vbmUgJiYKLSAgICAgICAgIVB5TGlzdF9DaGVjayhzbG90bmFtZXMpKQotICAgIHsKKyAgICBpZiAoc2xvdG5hbWVzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmICFQeUxpc3RfQ2hlY2soc2xvdG5hbWVzKSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgImNvcHlyZWcuX3Nsb3RuYW1lcyBkaWRuJ3QgcmV0dXJuIGEgbGlzdCBvciBOb25lIik7CisgICAgICAgICAgICAgICAgICAgICAgICAiY29weXJlZy5fc2xvdG5hbWVzIGRpZG4ndCByZXR1cm4gYSBsaXN0IG9yIE5vbmUiKTsKICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7Ci0gICAgICAgIHNsb3RuYW1lcyA9IE5VTEw7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIHJldHVybiBzbG90bmFtZXM7CiB9CiAKLXN0YXRpYyBQeU9iamVjdCAqCi1yZWR1Y2VfMihQeU9iamVjdCAqb2JqKQorUHlfTE9DQUwoUHlPYmplY3QgKikKK19QeU9iamVjdF9HZXRTdGF0ZShQeU9iamVjdCAqb2JqKQogewotICAgIFB5T2JqZWN0ICpjbHMsICpnZXRuZXdhcmdzOwotICAgIFB5T2JqZWN0ICphcmdzID0gTlVMTCwgKmFyZ3MyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZ2V0c3RhdGUgPSBOVUxMLCAqc3RhdGUgPSBOVUxMLCAqbmFtZXMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpzbG90cyA9IE5VTEwsICpsaXN0aXRlbXMgPSBOVUxMLCAqZGljdGl0ZW1zID0gTlVMTDsKLSAgICBQeU9iamVjdCAqY29weXJlZyA9IE5VTEwsICpuZXdvYmogPSBOVUxMLCAqcmVzID0gTlVMTDsKLSAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgX1B5X0lERU5USUZJRVIoX19nZXRuZXdhcmdzX18pOworICAgIFB5T2JqZWN0ICpzdGF0ZTsKKyAgICBQeU9iamVjdCAqZ2V0c3RhdGU7CiAgICAgX1B5X0lERU5USUZJRVIoX19nZXRzdGF0ZV9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX25ld29ial9fKTsKLQotICAgIGNscyA9IChQeU9iamVjdCAqKSBQeV9UWVBFKG9iaik7Ci0KLSAgICBnZXRuZXdhcmdzID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX19fZ2V0bmV3YXJnc19fKTsKLSAgICBpZiAoZ2V0bmV3YXJncyAhPSBOVUxMKSB7Ci0gICAgICAgIGFyZ3MgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGdldG5ld2FyZ3MsIE5VTEwpOwotICAgICAgICBQeV9ERUNSRUYoZ2V0bmV3YXJncyk7Ci0gICAgICAgIGlmIChhcmdzICE9IE5VTEwgJiYgIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19fIHNob3VsZCByZXR1cm4gYSB0dXBsZSwgIgotICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKGFyZ3MpLT50cF9uYW1lKTsKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7Ci0gICAgfQotICAgIGlmIChhcmdzID09IE5VTEwpCi0gICAgICAgIGdvdG8gZW5kOwogCiAgICAgZ2V0c3RhdGUgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfX19nZXRzdGF0ZV9fKTsKLSAgICBpZiAoZ2V0c3RhdGUgIT0gTlVMTCkgeworICAgIGlmIChnZXRzdGF0ZSA9PSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpzbG90bmFtZXM7CisKKyAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKworICAgICAgICB7CisgICAgICAgICAgICBQeU9iamVjdCAqKmRpY3Q7CisgICAgICAgICAgICBkaWN0ID0gX1B5T2JqZWN0X0dldERpY3RQdHIob2JqKTsKKyAgICAgICAgICAgIC8qIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIG9iamVjdCdzIGRpY3QgaXMgbm90IGluaXRpYWxpemVkCisgICAgICAgICAgICAgICB5ZXQuIEluIHRoaXMgY2FzZSwgd2Ugd2lsbCByZXR1cm4gTm9uZSBmb3IgdGhlIHN0YXRlLgorICAgICAgICAgICAgICAgV2UgYWxzbyByZXR1cm4gTm9uZSBpZiB0aGUgZGljdCBpcyBlbXB0eSB0byBtYWtlIHRoZSBiZWhhdmlvcgorICAgICAgICAgICAgICAgY29uc2lzdGVudCByZWdhcmRsZXNzIHdoZXRoZXIgdGhlIGRpY3Qgd2FzIGluaXRpYWxpemVkIG9yIG5vdC4KKyAgICAgICAgICAgICAgIFRoaXMgbWFrZSB1bml0IHRlc3RpbmcgZWFzaWVyLiAqLworICAgICAgICAgICAgaWYgKGRpY3QgIT0gTlVMTCAmJiAqZGljdCAhPSBOVUxMICYmIFB5RGljdF9TaXplKCpkaWN0KSA+IDApIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9ICpkaWN0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBQeV9Ob25lOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfSU5DUkVGKHN0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIHNsb3RuYW1lcyA9IF9QeVR5cGVfR2V0U2xvdE5hbWVzKFB5X1RZUEUob2JqKSk7CisgICAgICAgIGlmIChzbG90bmFtZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0KHNsb3RuYW1lcyA9PSBQeV9Ob25lIHx8IFB5TGlzdF9DaGVjayhzbG90bmFtZXMpKTsKKyAgICAgICAgaWYgKHNsb3RuYW1lcyAhPSBQeV9Ob25lICYmIFB5X1NJWkUoc2xvdG5hbWVzKSA+IDApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzbG90czsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgc2xvdG5hbWVzX3NpemUsIGk7CisKKyAgICAgICAgICAgIHNsb3RzID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgaWYgKHNsb3RzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzbG90bmFtZXNfc2l6ZSA9IFB5X1NJWkUoc2xvdG5hbWVzKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbG90bmFtZXNfc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZTsKKworICAgICAgICAgICAgICAgIG5hbWUgPSBQeUxpc3RfR0VUX0lURU0oc2xvdG5hbWVzLCBpKTsKKyAgICAgICAgICAgICAgICBQeV9JTkNSRUYobmFtZSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeU9iamVjdF9HZXRBdHRyKG9iaiwgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG5hbWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfQXR0cmlidXRlRXJyb3IpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIEl0IGlzIG5vdCBhbiBlcnJvciBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBwcmVzZW50LiAqLworICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaW50IGVyciA9IFB5RGljdF9TZXRJdGVtKHNsb3RzLCBuYW1lLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFRoZSBsaXN0IGlzIHN0b3JlZCBvbiB0aGUgY2xhc3Mgc28gaXQgbWF5IG11dGF0ZXMgd2hpbGUgd2UKKyAgICAgICAgICAgICAgICAgICBpdGVyYXRlIG92ZXIgaXQgKi8KKyAgICAgICAgICAgICAgICBpZiAoc2xvdG5hbWVzX3NpemUgIT0gUHlfU0laRShzbG90bmFtZXMpKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19SdW50aW1lRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19zbG90c25hbWVfXyBjaGFuZ2VkIHNpemUgZHVyaW5nIGl0ZXJhdGlvbiIpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIFdlIGhhbmRsZSBlcnJvcnMgd2l0aGluIHRoZSBsb29wIGhlcmUuICovCisgICAgICAgICAgICAgICAgaWYgKDApIHsKKyAgICAgICAgICAgICAgICAgIGVycm9yOgorICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2xvdG5hbWVzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RzKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBJZiB3ZSBmb3VuZCBzb21lIHNsb3QgYXR0cmlidXRlcywgcGFjayB0aGVtIGluIGEgdHVwbGUgYWxvbmcKKyAgICAgICAgICAgICAgIHRoZSBvcmdpbmFsIGF0dHJpYnV0ZSBkaWN0aW9uYXJ5LiAqLworICAgICAgICAgICAgaWYgKFB5RGljdF9TaXplKHNsb3RzKSA+IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RhdGUyOworCisgICAgICAgICAgICAgICAgc3RhdGUyID0gUHlUdXBsZV9QYWNrKDIsIHN0YXRlLCBzbG90cyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXRlKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RhdGUyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90cyk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN0YXRlMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFB5X0RFQ1JFRihzbG90cyk7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHNsb3RuYW1lcyk7CisgICAgfQorICAgIGVsc2UgeyAvKiBnZXRzdGF0ZSAhPSBOVUxMICovCiAgICAgICAgIHN0YXRlID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRzdGF0ZSwgTlVMTCk7CiAgICAgICAgIFB5X0RFQ1JFRihnZXRzdGF0ZSk7CiAgICAgICAgIGlmIChzdGF0ZSA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIFB5T2JqZWN0ICoqZGljdDsKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgZGljdCA9IF9QeU9iamVjdF9HZXREaWN0UHRyKG9iaik7Ci0gICAgICAgIGlmIChkaWN0ICYmICpkaWN0KQotICAgICAgICAgICAgc3RhdGUgPSAqZGljdDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgc3RhdGUgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoc3RhdGUpOwotICAgICAgICBuYW1lcyA9IHNsb3RuYW1lcyhjbHMpOwotICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICBpZiAobmFtZXMgIT0gUHlfTm9uZSAmJiBQeUxpc3RfR0VUX1NJWkUobmFtZXMpID4gMCkgewotICAgICAgICAgICAgYXNzZXJ0KFB5TGlzdF9DaGVjayhuYW1lcykpOwotICAgICAgICAgICAgc2xvdHMgPSBQeURpY3RfTmV3KCk7Ci0gICAgICAgICAgICBpZiAoc2xvdHMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgIG4gPSAwOwotICAgICAgICAgICAgLyogQ2FuJ3QgcHJlLWNvbXB1dGUgdGhlIGxpc3Qgc2l6ZTsgdGhlIGxpc3QKLSAgICAgICAgICAgICAgIGlzIHN0b3JlZCBvbiB0aGUgY2xhc3Mgc28gYWNjZXNzaWJsZSB0byBvdGhlcgotICAgICAgICAgICAgICAgdGhyZWFkcywgd2hpY2ggbWF5IGJlIHJ1biBieSBERUNSRUYgKi8KLSAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeUxpc3RfR0VUX1NJWkUobmFtZXMpOyBpKyspIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlOwotICAgICAgICAgICAgICAgIG5hbWUgPSBQeUxpc3RfR0VUX0lURU0obmFtZXMsIGkpOwotICAgICAgICAgICAgICAgIHZhbHVlID0gUHlPYmplY3RfR2V0QXR0cihvYmosIG5hbWUpOwotICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgZXJyID0gUHlEaWN0X1NldEl0ZW0oc2xvdHMsIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChuKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUgPSBQeV9CdWlsZFZhbHVlKCIoTk8pIiwgc3RhdGUsIHNsb3RzKTsKLSAgICAgICAgICAgICAgICBpZiAoc3RhdGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAgICAgICB9CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK1B5X0xPQ0FMKGludCkKK19QeU9iamVjdF9HZXROZXdBcmd1bWVudHMoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKiphcmdzLCBQeU9iamVjdCAqKmt3YXJncykKK3sKKyAgICBQeU9iamVjdCAqZ2V0bmV3YXJncywgKmdldG5ld2FyZ3NfZXg7CisgICAgX1B5X0lERU5USUZJRVIoX19nZXRuZXdhcmdzX2V4X18pOworICAgIF9QeV9JREVOVElGSUVSKF9fZ2V0bmV3YXJnc19fKTsKKworICAgIGlmIChhcmdzID09IE5VTEwgfHwga3dhcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBXZSBmaXJzdCBhdHRlbXB0IHRvIGZldGNoIHRoZSBhcmd1bWVudHMgZm9yIF9fbmV3X18gYnkgY2FsbGluZworICAgICAgIF9fZ2V0bmV3YXJnc19leF9fIG9uIHRoZSBvYmplY3QuICovCisgICAgZ2V0bmV3YXJnc19leCA9IF9QeU9iamVjdF9Mb29rdXBTcGVjaWFsKG9iaiwgJlB5SWRfX19nZXRuZXdhcmdzX2V4X18pOworICAgIGlmIChnZXRuZXdhcmdzX2V4ICE9IE5VTEwpIHsKKyAgICAgICAgUHlPYmplY3QgKm5ld2FyZ3MgPSBQeU9iamVjdF9DYWxsT2JqZWN0KGdldG5ld2FyZ3NfZXgsIE5VTEwpOworICAgICAgICBQeV9ERUNSRUYoZ2V0bmV3YXJnc19leCk7CisgICAgICAgIGlmIChuZXdhcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQorICAgICAgICBpZiAoIVB5VHVwbGVfQ2hlY2sobmV3YXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIHNob3VsZCByZXR1cm4gYSB0dXBsZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKG5ld2FyZ3MpLT50cF9uYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoUHlfU0laRShuZXdhcmdzKSAhPSAyKSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiX19nZXRuZXdhcmdzX2V4X18gc2hvdWxkIHJldHVybiBhIHR1cGxlIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAibGVuZ3RoIDIsIG5vdCAlemQiLCBQeV9TSVpFKG5ld2FyZ3MpKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICAqYXJncyA9IFB5VHVwbGVfR0VUX0lURU0obmV3YXJncywgMCk7CisgICAgICAgIFB5X0lOQ1JFRigqYXJncyk7CisgICAgICAgICprd2FyZ3MgPSBQeVR1cGxlX0dFVF9JVEVNKG5ld2FyZ3MsIDEpOworICAgICAgICBQeV9JTkNSRUYoKmt3YXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKworICAgICAgICAvKiBYWFggV2Ugc2hvdWxkIHBlcmhhcHMgYWxsb3cgTm9uZSB0byBiZSBwYXNzZWQgaGVyZS4gKi8KKyAgICAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKCphcmdzKSkgeworICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiZmlyc3QgaXRlbSBvZiB0aGUgdHVwbGUgcmV0dXJuZWQgYnkgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJfX2dldG5ld2FyZ3NfZXhfXyBtdXN0IGJlIGEgdHVwbGUsIG5vdCAnJS4yMDBzJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRSgqYXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmFyZ3MpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmt3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFQeURpY3RfQ2hlY2soKmt3YXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBpdGVtIG9mIHRoZSB0dXBsZSByZXR1cm5lZCBieSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19leF9fIG11c3QgYmUgYSBkaWN0LCBub3QgJyUuMjAwcyciLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUoKmt3YXJncyktPnRwX25hbWUpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmFyZ3MpOworICAgICAgICAgICAgUHlfQ0xFQVIoKmt3YXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBUaGUgb2JqZWN0IGRvZXMgbm90IGhhdmUgX19nZXRuZXdhcmdzX2V4X18gc28gd2UgZmFsbGJhY2sgb24gdXNpbmcKKyAgICAgICBfX2dldG5ld2FyZ3NfXyBpbnN0ZWFkLiAqLworICAgIGdldG5ld2FyZ3MgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvYmosICZQeUlkX19fZ2V0bmV3YXJnc19fKTsKKyAgICBpZiAoZ2V0bmV3YXJncyAhPSBOVUxMKSB7CisgICAgICAgICphcmdzID0gUHlPYmplY3RfQ2FsbE9iamVjdChnZXRuZXdhcmdzLCBOVUxMKTsKKyAgICAgICAgUHlfREVDUkVGKGdldG5ld2FyZ3MpOworICAgICAgICBpZiAoKmFyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICghUHlUdXBsZV9DaGVjaygqYXJncykpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIl9fZ2V0bmV3YXJnc19fIHNob3VsZCByZXR1cm4gYSB0dXBsZSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJyUuMjAwcyciLCBQeV9UWVBFKCphcmdzKS0+dHBfbmFtZSk7CisgICAgICAgICAgICBQeV9DTEVBUigqYXJncyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKmt3YXJncyA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogVGhlIG9iamVjdCBkb2VzIG5vdCBoYXZlIF9fZ2V0bmV3YXJnc19leF9fIGFuZCBfX2dldG5ld2FyZ3NfXy4gVGhpcyBtYXkKKyAgICAgICBtZWFucyBfX25ld19fIGRvZXMgbm90IHRha2VzIGFueSBhcmd1bWVudHMgb24gdGhpcyBvYmplY3QsIG9yIHRoYXQgdGhlCisgICAgICAgb2JqZWN0IGRvZXMgbm90IGltcGxlbWVudCB0aGUgcmVkdWNlIHByb3RvY29sIGZvciBwaWNrbGluZyBvcgorICAgICAgIGNvcHlpbmcuICovCisgICAgKmFyZ3MgPSBOVUxMOworICAgICprd2FyZ3MgPSBOVUxMOworICAgIHJldHVybiAwOworfQorCitQeV9MT0NBTChpbnQpCitfUHlPYmplY3RfR2V0SXRlbXNJdGVyKFB5T2JqZWN0ICpvYmosIFB5T2JqZWN0ICoqbGlzdGl0ZW1zLAorICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKmRpY3RpdGVtcykKK3sKKyAgICBpZiAobGlzdGl0ZW1zID09IE5VTEwgfHwgZGljdGl0ZW1zID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoIVB5TGlzdF9DaGVjayhvYmopKSB7Ci0gICAgICAgIGxpc3RpdGVtcyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihsaXN0aXRlbXMpOworICAgICAgICAqbGlzdGl0ZW1zID0gUHlfTm9uZTsKKyAgICAgICAgUHlfSU5DUkVGKCpsaXN0aXRlbXMpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgbGlzdGl0ZW1zID0gUHlPYmplY3RfR2V0SXRlcihvYmopOwotICAgICAgICBpZiAobGlzdGl0ZW1zID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgKmxpc3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIob2JqKTsKKyAgICAgICAgaWYgKCpsaXN0aXRlbXMgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoIVB5RGljdF9DaGVjayhvYmopKSB7Ci0gICAgICAgIGRpY3RpdGVtcyA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihkaWN0aXRlbXMpOworICAgICAgICAqZGljdGl0ZW1zID0gUHlfTm9uZTsKKyAgICAgICAgUHlfSU5DUkVGKCpkaWN0aXRlbXMpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgUHlPYmplY3QgKml0ZW1zOwogICAgICAgICBfUHlfSURFTlRJRklFUihpdGVtcyk7Ci0gICAgICAgIFB5T2JqZWN0ICppdGVtcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQob2JqLCAmUHlJZF9pdGVtcywgIiIpOwotICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkKLSAgICAgICAgICAgIGdvdG8gZW5kOwotICAgICAgICBkaWN0aXRlbXMgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZW1zKTsKKworICAgICAgICBpdGVtcyA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKG9iaiwgJlB5SWRfaXRlbXMsIE5VTEwpOworICAgICAgICBpZiAoaXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKmxpc3RpdGVtcyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgKmRpY3RpdGVtcyA9IFB5T2JqZWN0X0dldEl0ZXIoaXRlbXMpOwogICAgICAgICBQeV9ERUNSRUYoaXRlbXMpOwotICAgICAgICBpZiAoZGljdGl0ZW1zID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgaWYgKCpkaWN0aXRlbXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfQ0xFQVIoKmxpc3RpdGVtcyk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBhc3NlcnQoKmxpc3RpdGVtcyAhPSBOVUxMICYmICpkaWN0aXRlbXMgIT0gTlVMTCk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK3JlZHVjZV80KFB5T2JqZWN0ICpvYmopCit7CisgICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqa3dhcmdzID0gTlVMTDsKKyAgICBQeU9iamVjdCAqY29weXJlZzsKKyAgICBQeU9iamVjdCAqbmV3b2JqLCAqbmV3YXJncywgKnN0YXRlLCAqbGlzdGl0ZW1zLCAqZGljdGl0ZW1zOworICAgIFB5T2JqZWN0ICpyZXN1bHQ7CisgICAgX1B5X0lERU5USUZJRVIoX19uZXdvYmpfZXhfXyk7CisKKyAgICBpZiAoUHlfVFlQRShvYmopLT50cF9uZXcgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgImNhbid0IHBpY2tsZSAlcyBvYmplY3RzIiwKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUob2JqKS0+dHBfbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoX1B5T2JqZWN0X0dldE5ld0FyZ3VtZW50cyhvYmosICZhcmdzLCAma3dhcmdzKSA8IDApIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgYXJncyA9IFB5VHVwbGVfTmV3KDApOworICAgICAgICBpZiAoYXJncyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChrd2FyZ3MgPT0gTlVMTCkgeworICAgICAgICBrd2FyZ3MgPSBQeURpY3RfTmV3KCk7CisgICAgICAgIGlmIChrd2FyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOworICAgIGlmIChjb3B5cmVnID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgICAgICBQeV9ERUNSRUYoa3dhcmdzKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG5ld29iaiA9IF9QeU9iamVjdF9HZXRBdHRySWQoY29weXJlZywgJlB5SWRfX19uZXdvYmpfZXhfXyk7CisgICAgUHlfREVDUkVGKGNvcHlyZWcpOworICAgIGlmIChuZXdvYmogPT0gTlVMTCkgeworICAgICAgICBQeV9ERUNSRUYoYXJncyk7CisgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbmV3YXJncyA9IFB5VHVwbGVfUGFjaygzLCBQeV9UWVBFKG9iaiksIGFyZ3MsIGt3YXJncyk7CisgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgIGlmIChuZXdhcmdzID09IE5VTEwpIHsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBzdGF0ZSA9IF9QeU9iamVjdF9HZXRTdGF0ZShvYmopOworICAgIGlmIChzdGF0ZSA9PSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgICAgICBQeV9ERUNSRUYobmV3YXJncyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoX1B5T2JqZWN0X0dldEl0ZW1zSXRlcihvYmosICZsaXN0aXRlbXMsICZkaWN0aXRlbXMpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld2FyZ3MpOworICAgICAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBQeVR1cGxlX1BhY2soNSwgbmV3b2JqLCBuZXdhcmdzLCBzdGF0ZSwgbGlzdGl0ZW1zLCBkaWN0aXRlbXMpOworICAgIFB5X0RFQ1JFRihuZXdvYmopOworICAgIFB5X0RFQ1JFRihuZXdhcmdzKTsKKyAgICBQeV9ERUNSRUYoc3RhdGUpOworICAgIFB5X0RFQ1JFRihsaXN0aXRlbXMpOworICAgIFB5X0RFQ1JFRihkaWN0aXRlbXMpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCityZWR1Y2VfMihQeU9iamVjdCAqb2JqKQoreworICAgIFB5T2JqZWN0ICpjbHM7CisgICAgUHlPYmplY3QgKmFyZ3MgPSBOVUxMLCAqYXJnczIgPSBOVUxMLCAqa3dhcmdzID0gTlVMTDsKKyAgICBQeU9iamVjdCAqc3RhdGUgPSBOVUxMLCAqbGlzdGl0ZW1zID0gTlVMTCwgKmRpY3RpdGVtcyA9IE5VTEw7CisgICAgUHlPYmplY3QgKmNvcHlyZWcgPSBOVUxMLCAqbmV3b2JqID0gTlVMTCwgKnJlcyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBpLCBuOworICAgIF9QeV9JREVOVElGSUVSKF9fbmV3b2JqX18pOworCisgICAgaWYgKFB5X1RZUEUob2JqKS0+dHBfbmV3ID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBwaWNrbGUgJXMgb2JqZWN0cyIsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKG9iaiktPnRwX25hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKF9QeU9iamVjdF9HZXROZXdBcmd1bWVudHMob2JqLCAmYXJncywgJmt3YXJncykgPCAwKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoYXJncyA9PSBOVUxMKSB7CisgICAgICAgIGFzc2VydChrd2FyZ3MgPT0gTlVMTCk7CisgICAgICAgIGFyZ3MgPSBQeVR1cGxlX05ldygwKTsKKyAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoa3dhcmdzICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKFB5RGljdF9TaXplKGt3YXJncykgPiAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAibXVzdCB1c2UgcHJvdG9jb2wgNCBvciBncmVhdGVyIHRvIGNvcHkgdGhpcyAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdDsgc2luY2UgX19nZXRuZXdhcmdzX2V4X18gcmV0dXJuZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJrZXl3b3JkIGFyZ3VtZW50cy4iKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihrd2FyZ3MpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgUHlfQ0xFQVIoa3dhcmdzKTsKKyAgICB9CisKKyAgICBzdGF0ZSA9IF9QeU9iamVjdF9HZXRTdGF0ZShvYmopOworICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGVuZDsKKworICAgIGlmIChfUHlPYmplY3RfR2V0SXRlbXNJdGVyKG9iaiwgJmxpc3RpdGVtcywgJmRpY3RpdGVtcykgPCAwKQorICAgICAgICBnb3RvIGVuZDsKKwogICAgIGNvcHlyZWcgPSBpbXBvcnRfY29weXJlZygpOwogICAgIGlmIChjb3B5cmVnID09IE5VTEwpCiAgICAgICAgIGdvdG8gZW5kOwpAQCAtMzUyMSw2ICs0MTAyLDcgQEAKICAgICBhcmdzMiA9IFB5VHVwbGVfTmV3KG4rMSk7CiAgICAgaWYgKGFyZ3MyID09IE5VTEwpCiAgICAgICAgIGdvdG8gZW5kOworICAgIGNscyA9IChQeU9iamVjdCAqKSBQeV9UWVBFKG9iaik7CiAgICAgUHlfSU5DUkVGKGNscyk7CiAgICAgUHlUdXBsZV9TRVRfSVRFTShhcmdzMiwgMCwgY2xzKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0zNTM0LDkgKzQxMTYsNyBAQAogICBlbmQ6CiAgICAgUHlfWERFQ1JFRihhcmdzKTsKICAgICBQeV9YREVDUkVGKGFyZ3MyKTsKLSAgICBQeV9YREVDUkVGKHNsb3RzKTsKICAgICBQeV9YREVDUkVGKHN0YXRlKTsKLSAgICBQeV9YREVDUkVGKG5hbWVzKTsKICAgICBQeV9YREVDUkVGKGxpc3RpdGVtcyk7CiAgICAgUHlfWERFQ1JFRihkaWN0aXRlbXMpOwogICAgIFB5X1hERUNSRUYoY29weXJlZyk7CkBAIC0zNTY0LDcgKzQxNDQsOSBAQAogewogICAgIFB5T2JqZWN0ICpjb3B5cmVnLCAqcmVzOwogCi0gICAgaWYgKHByb3RvID49IDIpCisgICAgaWYgKHByb3RvID49IDQpCisgICAgICAgIHJldHVybiByZWR1Y2VfNChzZWxmKTsKKyAgICBlbHNlIGlmIChwcm90byA+PSAyKQogICAgICAgICByZXR1cm4gcmVkdWNlXzIoc2VsZik7CiAKICAgICBjb3B5cmVnID0gaW1wb3J0X2NvcHlyZWcoKTsKQEAgLTM2NTIsNyArNDIzNCw3IEBACiAKICAgIGNsYXNzIG9iamVjdDoKICAgICAgICBkZWYgX19mb3JtYXRfXyhzZWxmLCBmb3JtYXRfc3BlYyk6Ci0gICAgICAgcmV0dXJuIGZvcm1hdChzdHIoc2VsZiksIGZvcm1hdF9zcGVjKQorICAgICAgICAgICByZXR1cm4gZm9ybWF0KHN0cihzZWxmKSwgZm9ybWF0X3NwZWMpCiAqLwogc3RhdGljIFB5T2JqZWN0ICoKIG9iamVjdF9mb3JtYXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQpAQCAtMzY2OSwxNiArNDI1MSw5IEBACiAgICAgICAgIC8qIElzc3VlIDc5OTQ6IElmIHdlJ3JlIGNvbnZlcnRpbmcgdG8gYSBzdHJpbmcsIHdlCiAgICAgICAgICAgIHNob3VsZCByZWplY3QgZm9ybWF0IHNwZWNpZmljYXRpb25zICovCiAgICAgICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSChmb3JtYXRfc3BlYykgPiAwKSB7Ci0gICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9iamVjdC5fX2Zvcm1hdF9fIHdpdGggYSBub24tZW1wdHkgZm9ybWF0ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyBpcyBkZXByZWNhdGVkIiwgMSkgPCAwKSB7Ci0gICAgICAgICAgICAgIGdvdG8gZG9uZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qIEV2ZW50dWFsbHkgdGhpcyB3aWxsIGJlY29tZSBhbiBlcnJvcjoKLSAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgIm5vbi1lbXB0eSBmb3JtYXQgc3RyaW5nIHBhc3NlZCB0byBvYmplY3QuX19mb3JtYXRfXyIpOwotICAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgfQogCiAgICAgICAgIHJlc3VsdCA9IFB5T2JqZWN0X0Zvcm1hdChzZWxmX2FzX3N0ciwgZm9ybWF0X3NwZWMpOwpAQCAtMzY5OCw3ICs0MjczLDcgQEAKICAgICByZXMgPSAwOwogICAgIGlzaXplID0gc2VsZi0+b2JfdHlwZS0+dHBfaXRlbXNpemU7CiAgICAgaWYgKGlzaXplID4gMCkKLSAgICAgICAgcmVzID0gUHlfU0laRShzZWxmLT5vYl90eXBlKSAqIGlzaXplOworICAgICAgICByZXMgPSBQeV9TSVpFKHNlbGYpICogaXNpemU7CiAgICAgcmVzICs9IHNlbGYtPm9iX3R5cGUtPnRwX2Jhc2ljc2l6ZTsKIAogICAgIHJldHVybiBQeUxvbmdfRnJvbVNzaXplX3QocmVzKTsKQEAgLTM3ODgsOCArNDM2Myw4IEBACiAgICAgUHlPYmplY3RfR2VuZXJpY0dldEF0dHIsICAgICAgICAgICAgICAgICAgICAvKiB0cF9nZXRhdHRybyAqLwogICAgIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyLCAgICAgICAgICAgICAgICAgICAgLyogdHBfc2V0YXR0cm8gKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX2FzX2J1ZmZlciAqLwotICAgIFB5X1RQRkxBR1NfREVGQVVMVCB8IFB5X1RQRkxBR1NfQkFTRVRZUEUsIC8qIHRwX2ZsYWdzICovCi0gICAgUHlEb2NfU1RSKCJUaGUgbW9zdCBiYXNlIHR5cGUiKSwgICAgICAgICAgICAvKiB0cF9kb2MgKi8KKyAgICBQeV9UUEZMQUdTX0RFRkFVTFQgfCBQeV9UUEZMQUdTX0JBU0VUWVBFLCAgIC8qIHRwX2ZsYWdzICovCisgICAgUHlEb2NfU1RSKCJvYmplY3QoKVxuLS1cblxuVGhlIG1vc3QgYmFzZSB0eXBlIiksICAvKiB0cF9kb2MgKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRwX3RyYXZlcnNlICovCiAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cF9jbGVhciAqLwogICAgIG9iamVjdF9yaWNoY29tcGFyZSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHBfcmljaGNvbXBhcmUgKi8KQEAgLTM4MzMsNyArNDQwOCw3IEBACiAgICAgICAgICAgICBkZXNjciA9IFB5RGVzY3JfTmV3Q2xhc3NNZXRob2QodHlwZSwgbWV0aCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAobWV0aC0+bWxfZmxhZ3MgJiBNRVRIX1NUQVRJQykgewotICAgICAgICAgICAgUHlPYmplY3QgKmNmdW5jID0gUHlDRnVuY3Rpb25fTmV3KG1ldGgsIChQeU9iamVjdCopdHlwZSk7CisgICAgICAgICAgUHlPYmplY3QgKmNmdW5jID0gUHlDRnVuY3Rpb25fTmV3RXgobWV0aCwgKFB5T2JqZWN0Kil0eXBlLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChjZnVuYyA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGRlc2NyID0gUHlTdGF0aWNNZXRob2RfTmV3KGNmdW5jKTsKQEAgLTQxMDMsNiArNDY3OCwxMCBAQAogICAgICAgICBDT1BZU0xPVCh0cF9pbml0KTsKICAgICAgICAgQ09QWVNMT1QodHBfYWxsb2MpOwogICAgICAgICBDT1BZU0xPVCh0cF9pc19nYyk7CisgICAgICAgIGlmICgodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpICYmCisgICAgICAgICAgICAoYmFzZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0hBVkVfRklOQUxJWkUpKSB7CisgICAgICAgICAgICBDT1BZU0xPVCh0cF9maW5hbGl6ZSk7CisgICAgICAgIH0KICAgICAgICAgaWYgKCh0eXBlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9HQykgPT0KICAgICAgICAgICAgIChiYXNlLT50cF9mbGFncyAmIFB5X1RQRkxBR1NfSEFWRV9HQykpIHsKICAgICAgICAgICAgIC8qIFRoZXkgYWdyZWUgYWJvdXQgZ2MuICovCkBAIC00MjE1LDkgKzQ3OTQsOCBAQAogICAgIH0KIAogICAgIC8qIENhbGN1bGF0ZSBtZXRob2QgcmVzb2x1dGlvbiBvcmRlciAqLwotICAgIGlmIChtcm9faW50ZXJuYWwodHlwZSkgPCAwKSB7CisgICAgaWYgKG1yb19pbnRlcm5hbCh0eXBlLCBOVUxMKSA8IDApCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgfQogCiAgICAgLyogSW5oZXJpdCBzcGVjaWFsIGZsYWdzIGZyb20gZG9taW5hbnQgYmFzZSAqLwogICAgIGlmICh0eXBlLT50cF9iYXNlICE9IE5VTEwpCkBAIC00MjM0LDYgKzQ4MTIsMjMgQEAKICAgICAgICAgICAgIGluaGVyaXRfc2xvdHModHlwZSwgKFB5VHlwZU9iamVjdCAqKWIpOwogICAgIH0KIAorICAgIC8qIEFsbCBiYXNlcyBvZiBzdGF0aWNhbGx5IGFsbG9jYXRlZCB0eXBlIHNob3VsZCBiZSBzdGF0aWNhbGx5IGFsbG9jYXRlZCAqLworICAgIGlmICghKHR5cGUtPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkpCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiID0gUHlUdXBsZV9HRVRfSVRFTShiYXNlcywgaSk7CisgICAgICAgICAgICBpZiAoUHlUeXBlX0NoZWNrKGIpICYmCisgICAgICAgICAgICAgICAgKCgoUHlUeXBlT2JqZWN0ICopYiktPnRwX2ZsYWdzICYgUHlfVFBGTEFHU19IRUFQVFlQRSkpIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1ZlszMDBdOworICAgICAgICAgICAgICAgIFB5T1Nfc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlICclLjEwMHMnIGlzIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYnV0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpdHMgYmFzZSB0eXBlICclLjEwMHMnIGlzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLT50cF9uYW1lLCAoKFB5VHlwZU9iamVjdCAqKWIpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybihQeUV4Y19EZXByZWNhdGlvbldhcm5pbmcsIGJ1ZikgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAvKiBTYW5pdHkgY2hlY2sgZm9yIHRwX2ZyZWUuICovCiAgICAgaWYgKFB5VHlwZV9JU19HQyh0eXBlKSAmJiAodHlwZS0+dHBfZmxhZ3MgJiBQeV9UUEZMQUdTX0JBU0VUWVBFKSAmJgogICAgICAgICAodHlwZS0+dHBfZnJlZSA9PSBOVUxMIHx8IHR5cGUtPnRwX2ZyZWUgPT0gUHlPYmplY3RfRGVsKSkgewpAQCAtNDI1MiwxNCArNDg0NywyMCBAQAogICAgICAqLwogICAgIGlmIChfUHlEaWN0X0dldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2RvY19fKSA9PSBOVUxMKSB7CiAgICAgICAgIGlmICh0eXBlLT50cF9kb2MgIT0gTlVMTCkgewotICAgICAgICAgICAgUHlPYmplY3QgKmRvYyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHR5cGUtPnRwX2RvYyk7CisgICAgICAgICAgICBjb25zdCBjaGFyICpvbGRfZG9jID0gX1B5VHlwZV9Eb2NXaXRob3V0U2lnbmF0dXJlKHR5cGUtPnRwX25hbWUsCisgICAgICAgICAgICAgICAgdHlwZS0+dHBfZG9jKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkb2MgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhvbGRfZG9jKTsKICAgICAgICAgICAgIGlmIChkb2MgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19kb2NfXywgZG9jKTsKKyAgICAgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LCAmUHlJZF9fX2RvY19fLCBkb2MpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkb2MpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYoZG9jKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIF9QeURpY3RfU2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUHlJZF9fX2RvY19fLCBQeV9Ob25lKTsKKyAgICAgICAgICAgIGlmIChfUHlEaWN0X1NldEl0ZW1JZCh0eXBlLT50cF9kaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19fZG9jX18sIFB5X05vbmUpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MzAzLDEzICs0OTA0LDExIEBACiAgICAgLyogV2FybiBmb3IgYSB0eXBlIHRoYXQgaW1wbGVtZW50cyB0cF9jb21wYXJlIChub3cga25vd24gYXMKICAgICAgICB0cF9yZXNlcnZlZCkgYnV0IG5vdCB0cF9yaWNoY29tcGFyZS4gKi8KICAgICBpZiAodHlwZS0+dHBfcmVzZXJ2ZWQgJiYgIXR5cGUtPnRwX3JpY2hjb21wYXJlKSB7Ci0gICAgICAgIGludCBlcnJvcjsKLSAgICAgICAgZXJyb3IgPSBQeUVycl9XYXJuRm9ybWF0KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywgMSwKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICJUeXBlICUuMTAwcyBkZWZpbmVzIHRwX3Jlc2VydmVkIChmb3JtZXJseSB0cF9jb21wYXJlKSAiCiAgICAgICAgICAgICAiYnV0IG5vdCB0cF9yaWNoY29tcGFyZS4gQ29tcGFyaXNvbnMgbWF5IG5vdCBiZWhhdmUgYXMgaW50ZW5kZWQuIiwKICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUpOwotICAgICAgICBpZiAoZXJyb3IgPT0gLTEpCi0gICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIC8qIEFsbCBkb25lIC0tIHNldCB0aGUgcmVhZHkgZmxhZyAqLwpAQCAtNDMyNiw0OSArNDkyNSw3NSBAQAogc3RhdGljIGludAogYWRkX3N1YmNsYXNzKFB5VHlwZU9iamVjdCAqYmFzZSwgUHlUeXBlT2JqZWN0ICp0eXBlKQogewotICAgIFB5X3NzaXplX3QgaTsKLSAgICBpbnQgcmVzdWx0OwotICAgIFB5T2JqZWN0ICpsaXN0LCAqcmVmLCAqbmV3b2JqOworICAgIGludCByZXN1bHQgPSAtMTsKKyAgICBQeU9iamVjdCAqZGljdCwgKmtleSwgKm5ld29iajsKIAotICAgIGxpc3QgPSBiYXNlLT50cF9zdWJjbGFzc2VzOwotICAgIGlmIChsaXN0ID09IE5VTEwpIHsKLSAgICAgICAgYmFzZS0+dHBfc3ViY2xhc3NlcyA9IGxpc3QgPSBQeUxpc3RfTmV3KDApOwotICAgICAgICBpZiAobGlzdCA9PSBOVUxMKQorICAgIGRpY3QgPSBiYXNlLT50cF9zdWJjbGFzc2VzOworICAgIGlmIChkaWN0ID09IE5VTEwpIHsKKyAgICAgICAgYmFzZS0+dHBfc3ViY2xhc3NlcyA9IGRpY3QgPSBQeURpY3RfTmV3KCk7CisgICAgICAgIGlmIChkaWN0ID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGFzc2VydChQeUxpc3RfQ2hlY2sobGlzdCkpOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChkaWN0KSk7CisgICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkICopIHR5cGUpOworICAgIGlmIChrZXkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIG5ld29iaiA9IFB5V2Vha3JlZl9OZXdSZWYoKFB5T2JqZWN0ICopdHlwZSwgTlVMTCk7Ci0gICAgaSA9IFB5TGlzdF9HRVRfU0laRShsaXN0KTsKLSAgICB3aGlsZSAoLS1pID49IDApIHsKLSAgICAgICAgcmVmID0gUHlMaXN0X0dFVF9JVEVNKGxpc3QsIGkpOwotICAgICAgICBhc3NlcnQoUHlXZWFrcmVmX0NoZWNrUmVmKHJlZikpOwotICAgICAgICBpZiAoUHlXZWFrcmVmX0dFVF9PQkpFQ1QocmVmKSA9PSBQeV9Ob25lKQotICAgICAgICAgICAgcmV0dXJuIFB5TGlzdF9TZXRJdGVtKGxpc3QsIGksIG5ld29iaik7CisgICAgaWYgKG5ld29iaiAhPSBOVUxMKSB7CisgICAgICAgIHJlc3VsdCA9IFB5RGljdF9TZXRJdGVtKGRpY3QsIGtleSwgbmV3b2JqKTsKKyAgICAgICAgUHlfREVDUkVGKG5ld29iaik7CiAgICAgfQotICAgIHJlc3VsdCA9IFB5TGlzdF9BcHBlbmQobGlzdCwgbmV3b2JqKTsKLSAgICBQeV9ERUNSRUYobmV3b2JqKTsKKyAgICBQeV9ERUNSRUYoa2V5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCitzdGF0aWMgaW50CithZGRfYWxsX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZXMpCit7CisgICAgaW50IHJlcyA9IDA7CisKKyAgICBpZiAoYmFzZXMpIHsKKyAgICAgICAgUHlfc3NpemVfdCBpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlUdXBsZV9HRVRfU0laRShiYXNlcyk7IGkrKykgeworICAgICAgICAgICAgUHlPYmplY3QgKmJhc2UgPSBQeVR1cGxlX0dFVF9JVEVNKGJhc2VzLCBpKTsKKyAgICAgICAgICAgIGlmIChQeVR5cGVfQ2hlY2soYmFzZSkgJiYKKyAgICAgICAgICAgICAgICBhZGRfc3ViY2xhc3MoKFB5VHlwZU9iamVjdCopYmFzZSwgdHlwZSkgPCAwKQorICAgICAgICAgICAgICAgIHJlcyA9IC0xOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJlczsKK30KKwogc3RhdGljIHZvaWQKIHJlbW92ZV9zdWJjbGFzcyhQeVR5cGVPYmplY3QgKmJhc2UsIFB5VHlwZU9iamVjdCAqdHlwZSkKIHsKLSAgICBQeV9zc2l6ZV90IGk7Ci0gICAgUHlPYmplY3QgKmxpc3QsICpyZWY7CisgICAgUHlPYmplY3QgKmRpY3QsICprZXk7CiAKLSAgICBsaXN0ID0gYmFzZS0+dHBfc3ViY2xhc3NlczsKLSAgICBpZiAobGlzdCA9PSBOVUxMKSB7CisgICAgZGljdCA9IGJhc2UtPnRwX3N1YmNsYXNzZXM7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkgewogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGFzc2VydChQeUxpc3RfQ2hlY2sobGlzdCkpOwotICAgIGkgPSBQeUxpc3RfR0VUX1NJWkUobGlzdCk7Ci0gICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgIHJlZiA9IFB5TGlzdF9HRVRfSVRFTShsaXN0LCBpKTsKLSAgICAgICAgYXNzZXJ0KFB5V2Vha3JlZl9DaGVja1JlZihyZWYpKTsKLSAgICAgICAgaWYgKFB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZikgPT0gKFB5T2JqZWN0Kil0eXBlKSB7Ci0gICAgICAgICAgICAvKiB0aGlzIGNhbid0IGZhaWwsIHJpZ2h0PyAqLwotICAgICAgICAgICAgUHlTZXF1ZW5jZV9EZWxJdGVtKGxpc3QsIGkpOwotICAgICAgICAgICAgcmV0dXJuOworICAgIGFzc2VydChQeURpY3RfQ2hlY2tFeGFjdChkaWN0KSk7CisgICAga2V5ID0gUHlMb25nX0Zyb21Wb2lkUHRyKCh2b2lkICopIHR5cGUpOworICAgIGlmIChrZXkgPT0gTlVMTCB8fCBQeURpY3RfRGVsSXRlbShkaWN0LCBrZXkpKSB7CisgICAgICAgIC8qIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdHlwZSBpbml0aWFsaXphdGlvbiBlcnJvcmVkIG91dCBiZWZvcmUKKyAgICAgICAgICAgdGhlIGJhc2Ugc3ViY2xhc3NlcyB3ZXJlIHVwZGF0ZWQgKGUuZy4gYSBub24tc3RyIF9fcXVhbG5hbWVfXworICAgICAgICAgICB3YXMgcGFzc2VkIGluIHRoZSB0eXBlIGRpY3QpLiAqLworICAgICAgICBQeUVycl9DbGVhcigpOworICAgIH0KKyAgICBQeV9YREVDUkVGKGtleSk7Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVfYWxsX3N1YmNsYXNzZXMoUHlUeXBlT2JqZWN0ICp0eXBlLCBQeU9iamVjdCAqYmFzZXMpCit7CisgICAgaWYgKGJhc2VzKSB7CisgICAgICAgIFB5X3NzaXplX3QgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IFB5VHVwbGVfR0VUX1NJWkUoYmFzZXMpOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYXNlID0gUHlUdXBsZV9HRVRfSVRFTShiYXNlcywgaSk7CisgICAgICAgICAgICBpZiAoUHlUeXBlX0NoZWNrKGJhc2UpKQorICAgICAgICAgICAgICAgIHJlbW92ZV9zdWJjbGFzcygoUHlUeXBlT2JqZWN0KikgYmFzZSwgdHlwZSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC00NzI1LDYgKzUzNTAsMTggQEAKIH0KIAogc3RhdGljIFB5T2JqZWN0ICoKK3dyYXBfZGVsKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgdm9pZCAqd3JhcHBlZCkKK3sKKyAgICBkZXN0cnVjdG9yIGZ1bmMgPSAoZGVzdHJ1Y3Rvcil3cmFwcGVkOworCisgICAgaWYgKCFjaGVja19udW1fYXJncyhhcmdzLCAwKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAoKmZ1bmMpKHNlbGYpOworICAgIFB5X1JFVFVSTl9OT05FOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogd3JhcF9yaWNoY21wZnVuYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIHZvaWQgKndyYXBwZWQsIGludCBvcCkKIHsKICAgICByaWNoY21wZnVuYyBmdW5jID0gKHJpY2hjbXBmdW5jKXdyYXBwZWQ7CkBAIC00ODc3LDcgKzU1MTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIiVzLl9fbmV3X18oJXMpIGlzIG5vdCBzYWZlLCB1c2UgJXMuX19uZXdfXygpIiwKICAgICAgICAgICAgICAgICAgICAgIHR5cGUtPnRwX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdWJ0eXBlLT50cF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgc3RhdGljYmFzZSA9PSBOVUxMID8gIj8iIDogc3RhdGljYmFzZS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICBzdGF0aWNiYXNlLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC00ODkxLDggKzU1MjgsOSBAQAogCiBzdGF0aWMgc3RydWN0IFB5TWV0aG9kRGVmIHRwX25ld19tZXRob2RkZWZbXSA9IHsKICAgICB7Il9fbmV3X18iLCAoUHlDRnVuY3Rpb24pdHBfbmV3X3dyYXBwZXIsIE1FVEhfVkFSQVJHU3xNRVRIX0tFWVdPUkRTLAotICAgICBQeURvY19TVFIoIlQuX19uZXdfXyhTLCAuLi4pIC0+ICIKLSAgICAgICAgICAgICAgICJhIG5ldyBvYmplY3Qgd2l0aCB0eXBlIFMsIGEgc3VidHlwZSBvZiBUIil9LAorICAgICBQeURvY19TVFIoIl9fbmV3X18oJHR5cGUsICphcmdzLCAqKmt3YXJncylcbi0tXG5cbiIKKyAgICAgICAgICAgICAgICJDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBvYmplY3QuICAiCisgICAgICAgICAgICAgICAiU2VlIGhlbHAodHlwZSkgZm9yIGFjY3VyYXRlIHNpZ25hdHVyZS4iKX0sCiAgICAgezB9CiB9OwogCkBAIC00OTAzLDcgKzU1NDEsNyBAQAogCiAgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKHR5cGUtPnRwX2RpY3QsICZQeUlkX19fbmV3X18pICE9IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGZ1bmMgPSBQeUNGdW5jdGlvbl9OZXcodHBfbmV3X21ldGhvZGRlZiwgKFB5T2JqZWN0ICopdHlwZSk7CisgICAgZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KHRwX25ld19tZXRob2RkZWYsIChQeU9iamVjdCAqKXR5cGUsIE5VTEwpOwogICAgIGlmIChmdW5jID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQodHlwZS0+dHBfZGljdCwgJlB5SWRfX19uZXdfXywgZnVuYykpIHsKQEAgLTUwMTUsNyArNTY1Myw2IEBACiBzdGF0aWMgUHlfc3NpemVfdAogc2xvdF9zcV9sZW5ndGgoUHlPYmplY3QgKnNlbGYpCiB7Ci0gICAgX1B5X0lERU5USUZJRVIoX19sZW5fXyk7CiAgICAgUHlPYmplY3QgKnJlcyA9IGNhbGxfbWV0aG9kKHNlbGYsICZQeUlkX19fbGVuX18sICIoKSIpOwogICAgIFB5X3NzaXplX3QgbGVuOwogCkBAIC01MDc2LDggKzU3MTMsNiBAQAogc2xvdF9zcV9hc3NfaXRlbShQeU9iamVjdCAqc2VsZiwgUHlfc3NpemVfdCBpbmRleCwgUHlPYmplY3QgKnZhbHVlKQogewogICAgIFB5T2JqZWN0ICpyZXM7Ci0gICAgX1B5X0lERU5USUZJRVIoX19kZWxpdGVtX18pOwotICAgIF9QeV9JREVOVElGSUVSKF9fc2V0aXRlbV9fKTsKIAogICAgIGlmICh2YWx1ZSA9PSBOVUxMKQogICAgICAgICByZXMgPSBjYWxsX21ldGhvZChzZWxmLCAmUHlJZF9fX2RlbGl0ZW1fXywgIihuKSIsIGluZGV4KTsKQEAgLTUxMjcsOCArNTc2Miw2IEBACiBzbG90X21wX2Fzc19zdWJzY3JpcHQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICprZXksIFB5T2JqZWN0ICp2YWx1ZSkKIHsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIF9QeV9JREVOVElGSUVSKF9fZGVsaXRlbV9fKTsKLSAgICBfUHlfSURFTlRJRklFUihfX3NldGl0ZW1fXyk7CiAKICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgcmVzID0gY2FsbF9tZXRob2Qoc2VsZiwgJlB5SWRfX19kZWxpdGVtX18sICIoTykiLCBrZXkpOwpAQCAtNTE3OSw3ICs1ODEyLDYgQEAKICAgICBQeU9iamVjdCAqZnVuYywgKmFyZ3M7CiAgICAgaW50IHJlc3VsdCA9IC0xOwogICAgIGludCB1c2luZ19sZW4gPSAwOwotICAgIF9QeV9JREVOVElGSUVSKF9fbGVuX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9fYm9vbF9fKTsKIAogICAgIGZ1bmMgPSBsb29rdXBfbWF5YmUoc2VsZiwgJlB5SWRfX19ib29sX18pOwpAQCAtNTI4MSwyOCArNTkxMywxMSBAQAogICAgIF9QeV9JREVOVElGSUVSKF9fc3RyX18pOwogCiAgICAgZnVuYyA9IGxvb2t1cF9tZXRob2Qoc2VsZiwgJlB5SWRfX19zdHJfXyk7Ci0gICAgaWYgKGZ1bmMgIT0gTlVMTCkgewotICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBOVUxMKTsKLSAgICAgICAgUHlfREVDUkVGKGZ1bmMpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgLyogUHlPYmplY3QgKnJlc3M7ICovCi0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIHJlcyA9IHNsb3RfdHBfcmVwcihzZWxmKTsKLSAgICAgICAgaWYgKCFyZXMpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgLyogWFhYIHRoaXMgaXMgbm9uLXNlbnNpY2FsLiBXaHkgc2hvdWxkIHdlIHJldHVybgotICAgICAgICAgICBhIGJ5dGVzIG9iamVjdCBmcm9tIF9fc3RyX18uIElzIHRoaXMgY29kZSBldmVuCi0gICAgICAgICAgIHVzZWQ/IC0gbXZsICovCi0gICAgICAgIGFzc2VydCgwKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgICAgLyoKLSAgICAgICAgcmVzcyA9IF9QeVVuaWNvZGVfQXNEZWZhdWx0RW5jb2RlZFN0cmluZyhyZXMpOwotICAgICAgICBQeV9ERUNSRUYocmVzKTsKLSAgICAgICAgcmV0dXJuIHJlc3M7Ci0gICAgICAgICovCi0gICAgfQorICAgIGlmIChmdW5jID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJlcyA9IFB5RXZhbF9DYWxsT2JqZWN0KGZ1bmMsIE5VTEwpOworICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICByZXR1cm4gcmVzOwogfQogCiBzdGF0aWMgUHlfaGFzaF90CkBAIC01NTk4LDcgKzYyMTMsNiBAQAogICAgIFB5T2JqZWN0ICpmdW5jOwogICAgIFB5T2JqZWN0ICpuZXdhcmdzLCAqeDsKICAgICBQeV9zc2l6ZV90IGksIG47Ci0gICAgX1B5X0lERU5USUZJRVIoX19uZXdfXyk7CiAKICAgICBmdW5jID0gX1B5T2JqZWN0X0dldEF0dHJJZCgoUHlPYmplY3QgKil0eXBlLCAmUHlJZF9fX25ld19fKTsKICAgICBpZiAoZnVuYyA9PSBOVUxMKQpAQCAtNTYyMiwxNiArNjIzNiwxMiBAQAogfQogCiBzdGF0aWMgdm9pZAotc2xvdF90cF9kZWwoUHlPYmplY3QgKnNlbGYpCitzbG90X3RwX2ZpbmFsaXplKFB5T2JqZWN0ICpzZWxmKQogewogICAgIF9QeV9JREVOVElGSUVSKF9fZGVsX18pOwogICAgIFB5T2JqZWN0ICpkZWwsICpyZXM7CiAgICAgUHlPYmplY3QgKmVycm9yX3R5cGUsICplcnJvcl92YWx1ZSwgKmVycm9yX3RyYWNlYmFjazsKIAotICAgIC8qIFRlbXBvcmFyaWx5IHJlc3VycmVjdCB0aGUgb2JqZWN0LiAqLwotICAgIGFzc2VydChzZWxmLT5vYl9yZWZjbnQgPT0gMCk7Ci0gICAgc2VsZi0+b2JfcmVmY250ID0gMTsKLQogICAgIC8qIFNhdmUgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLCBpZiBhbnkuICovCiAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7CiAKQEAgLTU2NDgsMzcgKzYyNTgsNiBAQAogCiAgICAgLyogUmVzdG9yZSB0aGUgc2F2ZWQgZXhjZXB0aW9uLiAqLwogICAgIFB5RXJyX1Jlc3RvcmUoZXJyb3JfdHlwZSwgZXJyb3JfdmFsdWUsIGVycm9yX3RyYWNlYmFjayk7Ci0KLSAgICAvKiBVbmRvIHRoZSB0ZW1wb3JhcnkgcmVzdXJyZWN0aW9uOyBjYW4ndCB1c2UgREVDUkVGIGhlcmUsIGl0IHdvdWxkCi0gICAgICogY2F1c2UgYSByZWN1cnNpdmUgY2FsbC4KLSAgICAgKi8KLSAgICBhc3NlcnQoc2VsZi0+b2JfcmVmY250ID4gMCk7Ci0gICAgaWYgKC0tc2VsZi0+b2JfcmVmY250ID09IDApCi0gICAgICAgIHJldHVybjsgICAgICAgICAvKiB0aGlzIGlzIHRoZSBub3JtYWwgcGF0aCBvdXQgKi8KLQotICAgIC8qIF9fZGVsX18gcmVzdXJyZWN0ZWQgaXQhICBNYWtlIGl0IGxvb2sgbGlrZSB0aGUgb3JpZ2luYWwgUHlfREVDUkVGCi0gICAgICogbmV2ZXIgaGFwcGVuZWQuCi0gICAgICovCi0gICAgewotICAgICAgICBQeV9zc2l6ZV90IHJlZmNudCA9IHNlbGYtPm9iX3JlZmNudDsKLSAgICAgICAgX1B5X05ld1JlZmVyZW5jZShzZWxmKTsKLSAgICAgICAgc2VsZi0+b2JfcmVmY250ID0gcmVmY250OwotICAgIH0KLSAgICBhc3NlcnQoIVB5VHlwZV9JU19HQyhQeV9UWVBFKHNlbGYpKSB8fAotICAgICAgICAgICBfUHlfQVNfR0Moc2VsZiktPmdjLmdjX3JlZnMgIT0gX1B5R0NfUkVGU19VTlRSQUNLRUQpOwotICAgIC8qIElmIFB5X1JFRl9ERUJVRywgX1B5X05ld1JlZmVyZW5jZSBidW1wZWQgX1B5X1JlZlRvdGFsLCBzbwotICAgICAqIHdlIG5lZWQgdG8gdW5kbyB0aGF0LiAqLwotICAgIF9QeV9ERUNfUkVGVE9UQUw7Ci0gICAgLyogSWYgUHlfVFJBQ0VfUkVGUywgX1B5X05ld1JlZmVyZW5jZSByZS1hZGRlZCBzZWxmIHRvIHRoZSBvYmplY3QKLSAgICAgKiBjaGFpbiwgc28gbm8gbW9yZSB0byBkbyB0aGVyZS4KLSAgICAgKiBJZiBDT1VOVF9BTExPQ1MsIHRoZSBvcmlnaW5hbCBkZWNyZWYgYnVtcGVkIHRwX2ZyZWVzLCBhbmQKLSAgICAgKiBfUHlfTmV3UmVmZXJlbmNlIGJ1bXBlZCB0cF9hbGxvY3M6ICBib3RoIG9mIHRob3NlIG5lZWQgdG8gYmUKLSAgICAgKiB1bmRvbmUuCi0gICAgICovCi0jaWZkZWYgQ09VTlRfQUxMT0NTCi0gICAgLS1QeV9UWVBFKHNlbGYpLT50cF9mcmVlczsKLSAgICAtLVB5X1RZUEUoc2VsZiktPnRwX2FsbG9jczsKLSNlbmRpZgogfQogCiAKQEAgLTU3MjMsMjIgKzYzMDIsMjIgQEAKICAgICBFVFNMT1QoTkFNRSwgYXNfbnVtYmVyLlNMT1QsIEZVTkNUSU9OLCBXUkFQUEVSLCBET0MpCiAjZGVmaW5lIFVOU0xPVChOQU1FLCBTTE9ULCBGVU5DVElPTiwgV1JBUFBFUiwgRE9DKSBcCiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgV1JBUFBFUiwgXAotICAgICAgICAgICAieC4iIE5BTUUgIigpIDw9PT4gIiBET0MpCisgICAgICAgICAgIE5BTUUgIigkc2VsZiwgLylcbi0tXG5cbiIgRE9DKQogI2RlZmluZSBJQlNMT1QoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIFdSQVBQRVIsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoeSkgPD09PiB4IiBET0MgInkiKQorICAgICAgICAgICBOQU1FICIoJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGYiIERPQyAidmFsdWUuIikKICNkZWZpbmUgQklOU0xPVChOQU1FLCBTTE9ULCBGVU5DVElPTiwgRE9DKSBcCiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgd3JhcF9iaW5hcnlmdW5jX2wsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoeSkgPD09PiB4IiBET0MgInkiKQorICAgICAgICAgICBOQU1FICIoJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGYiIERPQyAidmFsdWUuIikKICNkZWZpbmUgUkJJTlNMT1QoTkFNRSwgU0xPVCwgRlVOQ1RJT04sIERPQykgXAogICAgIEVUU0xPVChOQU1FLCBhc19udW1iZXIuU0xPVCwgRlVOQ1RJT04sIHdyYXBfYmluYXJ5ZnVuY19yLCBcCi0gICAgICAgICAgICJ4LiIgTkFNRSAiKHkpIDw9PT4geSIgRE9DICJ4IikKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiB2YWx1ZSIgRE9DICJzZWxmLiIpCiAjZGVmaW5lIEJJTlNMT1ROT1RJTkZJWChOQU1FLCBTTE9ULCBGVU5DVElPTiwgRE9DKSBcCiAgICAgRVRTTE9UKE5BTUUsIGFzX251bWJlci5TTE9ULCBGVU5DVElPTiwgd3JhcF9iaW5hcnlmdW5jX2wsIFwKLSAgICAgICAgICAgInguIiBOQU1FICIoeSkgPD09PiAiIERPQykKKyAgICAgICAgICAgTkFNRSAiKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cbiIgRE9DKQogI2RlZmluZSBSQklOU0xPVE5PVElORklYKE5BTUUsIFNMT1QsIEZVTkNUSU9OLCBET0MpIFwKICAgICBFVFNMT1QoTkFNRSwgYXNfbnVtYmVyLlNMT1QsIEZVTkNUSU9OLCB3cmFwX2JpbmFyeWZ1bmNfciwgXAotICAgICAgICAgICAieC4iIE5BTUUgIih5KSA8PT0+ICIgRE9DKQorICAgICAgICAgICBOQU1FICIoJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuIiBET0MpCiAKIHN0YXRpYyBzbG90ZGVmIHNsb3RkZWZzW10gPSB7CiAgICAgVFBTTE9UKCJfX2dldGF0dHJpYnV0ZV9fIiwgdHBfZ2V0YXR0ciwgTlVMTCwgTlVMTCwgIiIpLApAQCAtNTc0Niw4MCArNjMyNSw4NSBAQAogICAgIFRQU0xPVCgiX19zZXRhdHRyX18iLCB0cF9zZXRhdHRyLCBOVUxMLCBOVUxMLCAiIiksCiAgICAgVFBTTE9UKCJfX2RlbGF0dHJfXyIsIHRwX3NldGF0dHIsIE5VTEwsIE5VTEwsICIiKSwKICAgICBUUFNMT1QoIl9fcmVwcl9fIiwgdHBfcmVwciwgc2xvdF90cF9yZXByLCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgInguX19yZXByX18oKSA8PT0+IHJlcHIoeCkiKSwKKyAgICAgICAgICAgIl9fcmVwcl9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIHJlcHIoc2VsZikuIiksCiAgICAgVFBTTE9UKCJfX2hhc2hfXyIsIHRwX2hhc2gsIHNsb3RfdHBfaGFzaCwgd3JhcF9oYXNoZnVuYywKLSAgICAgICAgICAgInguX19oYXNoX18oKSA8PT0+IGhhc2goeCkiKSwKKyAgICAgICAgICAgIl9faGFzaF9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIGhhc2goc2VsZikuIiksCiAgICAgRkxTTE9UKCJfX2NhbGxfXyIsIHRwX2NhbGwsIHNsb3RfdHBfY2FsbCwgKHdyYXBwZXJmdW5jKXdyYXBfY2FsbCwKLSAgICAgICAgICAgInguX19jYWxsX18oLi4uKSA8PT0+IHgoLi4uKSIsIFB5V3JhcHBlckZsYWdfS0VZV09SRFMpLAorICAgICAgICAgICAiX19jYWxsX18oJHNlbGYsIC8sICphcmdzLCAqKmt3YXJncylcbi0tXG5cbkNhbGwgc2VsZiBhcyBhIGZ1bmN0aW9uLiIsCisgICAgICAgICAgIFB5V3JhcHBlckZsYWdfS0VZV09SRFMpLAogICAgIFRQU0xPVCgiX19zdHJfXyIsIHRwX3N0ciwgc2xvdF90cF9zdHIsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAieC5fX3N0cl9fKCkgPD09PiBzdHIoeCkiKSwKKyAgICAgICAgICAgIl9fc3RyX18oJHNlbGYsIC8pXG4tLVxuXG5SZXR1cm4gc3RyKHNlbGYpLiIpLAogICAgIFRQU0xPVCgiX19nZXRhdHRyaWJ1dGVfXyIsIHRwX2dldGF0dHJvLCBzbG90X3RwX2dldGF0dHJfaG9vaywKLSAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLCAieC5fX2dldGF0dHJpYnV0ZV9fKCduYW1lJykgPD09PiB4Lm5hbWUiKSwKKyAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLAorICAgICAgICAgICAiX19nZXRhdHRyaWJ1dGVfXygkc2VsZiwgbmFtZSwgLylcbi0tXG5cblJldHVybiBnZXRhdHRyKHNlbGYsIG5hbWUpLiIpLAogICAgIFRQU0xPVCgiX19nZXRhdHRyX18iLCB0cF9nZXRhdHRybywgc2xvdF90cF9nZXRhdHRyX2hvb2ssIE5VTEwsICIiKSwKICAgICBUUFNMT1QoIl9fc2V0YXR0cl9fIiwgdHBfc2V0YXR0cm8sIHNsb3RfdHBfc2V0YXR0cm8sIHdyYXBfc2V0YXR0ciwKLSAgICAgICAgICAgInguX19zZXRhdHRyX18oJ25hbWUnLCB2YWx1ZSkgPD09PiB4Lm5hbWUgPSB2YWx1ZSIpLAorICAgICAgICAgICAiX19zZXRhdHRyX18oJHNlbGYsIG5hbWUsIHZhbHVlLCAvKVxuLS1cblxuSW1wbGVtZW50IHNldGF0dHIoc2VsZiwgbmFtZSwgdmFsdWUpLiIpLAogICAgIFRQU0xPVCgiX19kZWxhdHRyX18iLCB0cF9zZXRhdHRybywgc2xvdF90cF9zZXRhdHRybywgd3JhcF9kZWxhdHRyLAotICAgICAgICAgICAieC5fX2RlbGF0dHJfXygnbmFtZScpIDw9PT4gZGVsIHgubmFtZSIpLAorICAgICAgICAgICAiX19kZWxhdHRyX18oJHNlbGYsIG5hbWUsIC8pXG4tLVxuXG5JbXBsZW1lbnQgZGVsYXR0cihzZWxmLCBuYW1lKS4iKSwKICAgICBUUFNMT1QoIl9fbHRfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2x0LAotICAgICAgICAgICAieC5fX2x0X18oeSkgPD09PiB4PHkiKSwKKyAgICAgICAgICAgIl9fbHRfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZjx2YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9fbGVfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2xlLAotICAgICAgICAgICAieC5fX2xlX18oeSkgPD09PiB4PD15IiksCisgICAgICAgICAgICJfX2xlX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY8PXZhbHVlLiIpLAogICAgIFRQU0xPVCgiX19lcV9fIiwgdHBfcmljaGNvbXBhcmUsIHNsb3RfdHBfcmljaGNvbXBhcmUsIHJpY2hjbXBfZXEsCi0gICAgICAgICAgICJ4Ll9fZXFfXyh5KSA8PT0+IHg9PXkiKSwKKyAgICAgICAgICAgIl9fZXFfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZj09dmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX25lX18iLCB0cF9yaWNoY29tcGFyZSwgc2xvdF90cF9yaWNoY29tcGFyZSwgcmljaGNtcF9uZSwKLSAgICAgICAgICAgInguX19uZV9fKHkpIDw9PT4geCE9eSIpLAorICAgICAgICAgICAiX19uZV9fKCRzZWxmLCB2YWx1ZSwgLylcbi0tXG5cblJldHVybiBzZWxmIT12YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9fZ3RfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2d0LAotICAgICAgICAgICAieC5fX2d0X18oeSkgPD09PiB4PnkiKSwKKyAgICAgICAgICAgIl9fZ3RfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZj52YWx1ZS4iKSwKICAgICBUUFNMT1QoIl9fZ2VfXyIsIHRwX3JpY2hjb21wYXJlLCBzbG90X3RwX3JpY2hjb21wYXJlLCByaWNoY21wX2dlLAotICAgICAgICAgICAieC5fX2dlX18oeSkgPD09PiB4Pj15IiksCisgICAgICAgICAgICJfX2dlX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGY+PXZhbHVlLiIpLAogICAgIFRQU0xPVCgiX19pdGVyX18iLCB0cF9pdGVyLCBzbG90X3RwX2l0ZXIsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAieC5fX2l0ZXJfXygpIDw9PT4gaXRlcih4KSIpLAorICAgICAgICAgICAiX19pdGVyX18oJHNlbGYsIC8pXG4tLVxuXG5JbXBsZW1lbnQgaXRlcihzZWxmKS4iKSwKICAgICBUUFNMT1QoIl9fbmV4dF9fIiwgdHBfaXRlcm5leHQsIHNsb3RfdHBfaXRlcm5leHQsIHdyYXBfbmV4dCwKLSAgICAgICAgICAgInguX19uZXh0X18oKSA8PT0+IG5leHQoeCkiKSwKKyAgICAgICAgICAgIl9fbmV4dF9fKCRzZWxmLCAvKVxuLS1cblxuSW1wbGVtZW50IG5leHQoc2VsZikuIiksCiAgICAgVFBTTE9UKCJfX2dldF9fIiwgdHBfZGVzY3JfZ2V0LCBzbG90X3RwX2Rlc2NyX2dldCwgd3JhcF9kZXNjcl9nZXQsCi0gICAgICAgICAgICJkZXNjci5fX2dldF9fKG9ialssIHR5cGVdKSAtPiB2YWx1ZSIpLAorICAgICAgICAgICAiX19nZXRfXygkc2VsZiwgaW5zdGFuY2UsIG93bmVyLCAvKVxuLS1cblxuUmV0dXJuIGFuIGF0dHJpYnV0ZSBvZiBpbnN0YW5jZSwgd2hpY2ggaXMgb2YgdHlwZSBvd25lci4iKSwKICAgICBUUFNMT1QoIl9fc2V0X18iLCB0cF9kZXNjcl9zZXQsIHNsb3RfdHBfZGVzY3Jfc2V0LCB3cmFwX2Rlc2NyX3NldCwKLSAgICAgICAgICAgImRlc2NyLl9fc2V0X18ob2JqLCB2YWx1ZSkiKSwKKyAgICAgICAgICAgIl9fc2V0X18oJHNlbGYsIGluc3RhbmNlLCB2YWx1ZSwgLylcbi0tXG5cblNldCBhbiBhdHRyaWJ1dGUgb2YgaW5zdGFuY2UgdG8gdmFsdWUuIiksCiAgICAgVFBTTE9UKCJfX2RlbGV0ZV9fIiwgdHBfZGVzY3Jfc2V0LCBzbG90X3RwX2Rlc2NyX3NldCwKLSAgICAgICAgICAgd3JhcF9kZXNjcl9kZWxldGUsICJkZXNjci5fX2RlbGV0ZV9fKG9iaikiKSwKKyAgICAgICAgICAgd3JhcF9kZXNjcl9kZWxldGUsCisgICAgICAgICAgICJfX2RlbGV0ZV9fKCRzZWxmLCBpbnN0YW5jZSwgLylcbi0tXG5cbkRlbGV0ZSBhbiBhdHRyaWJ1dGUgb2YgaW5zdGFuY2UuIiksCiAgICAgRkxTTE9UKCJfX2luaXRfXyIsIHRwX2luaXQsIHNsb3RfdHBfaW5pdCwgKHdyYXBwZXJmdW5jKXdyYXBfaW5pdCwKLSAgICAgICAgICAgInguX19pbml0X18oLi4uKSBpbml0aWFsaXplcyB4OyAiCi0gICAgICAgICAgICJzZWUgaGVscCh0eXBlKHgpKSBmb3Igc2lnbmF0dXJlIiwKKyAgICAgICAgICAgIl9faW5pdF9fKCRzZWxmLCAvLCAqYXJncywgKiprd2FyZ3MpXG4tLVxuXG4iCisgICAgICAgICAgICJJbml0aWFsaXplIHNlbGYuICBTZWUgaGVscCh0eXBlKHNlbGYpKSBmb3IgYWNjdXJhdGUgc2lnbmF0dXJlLiIsCiAgICAgICAgICAgIFB5V3JhcHBlckZsYWdfS0VZV09SRFMpLAotICAgIFRQU0xPVCgiX19uZXdfXyIsIHRwX25ldywgc2xvdF90cF9uZXcsIE5VTEwsICIiKSwKLSAgICBUUFNMT1QoIl9fZGVsX18iLCB0cF9kZWwsIHNsb3RfdHBfZGVsLCBOVUxMLCAiIiksCisgICAgVFBTTE9UKCJfX25ld19fIiwgdHBfbmV3LCBzbG90X3RwX25ldywgTlVMTCwKKyAgICAgICAgICAgIl9fbmV3X18odHlwZSwgLywgKmFyZ3MsICoqa3dhcmdzKVxuLS1cblxuIgorICAgICAgICAgICAiQ3JlYXRlIGFuZCByZXR1cm4gbmV3IG9iamVjdC4gIFNlZSBoZWxwKHR5cGUpIGZvciBhY2N1cmF0ZSBzaWduYXR1cmUuIiksCisgICAgVFBTTE9UKCJfX2RlbF9fIiwgdHBfZmluYWxpemUsIHNsb3RfdHBfZmluYWxpemUsICh3cmFwcGVyZnVuYyl3cmFwX2RlbCwgIiIpLAogCiAgICAgQklOU0xPVCgiX19hZGRfXyIsIG5iX2FkZCwgc2xvdF9uYl9hZGQsCi0gICAgICAgICIrIiksCisgICAgICAgICAgICIrIiksCiAgICAgUkJJTlNMT1QoIl9fcmFkZF9fIiwgbmJfYWRkLCBzbG90X25iX2FkZCwKLSAgICAgICAgICAgICAiKyIpLAorICAgICAgICAgICAiKyIpLAogICAgIEJJTlNMT1QoIl9fc3ViX18iLCBuYl9zdWJ0cmFjdCwgc2xvdF9uYl9zdWJ0cmFjdCwKLSAgICAgICAgIi0iKSwKKyAgICAgICAgICAgIi0iKSwKICAgICBSQklOU0xPVCgiX19yc3ViX18iLCBuYl9zdWJ0cmFjdCwgc2xvdF9uYl9zdWJ0cmFjdCwKLSAgICAgICAgICAgICAiLSIpLAorICAgICAgICAgICAiLSIpLAogICAgIEJJTlNMT1QoIl9fbXVsX18iLCBuYl9tdWx0aXBseSwgc2xvdF9uYl9tdWx0aXBseSwKLSAgICAgICAgIioiKSwKKyAgICAgICAgICAgIioiKSwKICAgICBSQklOU0xPVCgiX19ybXVsX18iLCBuYl9tdWx0aXBseSwgc2xvdF9uYl9tdWx0aXBseSwKLSAgICAgICAgICAgICAiKiIpLAorICAgICAgICAgICAiKiIpLAogICAgIEJJTlNMT1QoIl9fbW9kX18iLCBuYl9yZW1haW5kZXIsIHNsb3RfbmJfcmVtYWluZGVyLAotICAgICAgICAiJSIpLAorICAgICAgICAgICAiJSIpLAogICAgIFJCSU5TTE9UKCJfX3Jtb2RfXyIsIG5iX3JlbWFpbmRlciwgc2xvdF9uYl9yZW1haW5kZXIsCi0gICAgICAgICAgICAgIiUiKSwKKyAgICAgICAgICAgIiUiKSwKICAgICBCSU5TTE9UTk9USU5GSVgoIl9fZGl2bW9kX18iLCBuYl9kaXZtb2QsIHNsb3RfbmJfZGl2bW9kLAotICAgICAgICAiZGl2bW9kKHgsIHkpIiksCisgICAgICAgICAgICJSZXR1cm4gZGl2bW9kKHNlbGYsIHZhbHVlKS4iKSwKICAgICBSQklOU0xPVE5PVElORklYKCJfX3JkaXZtb2RfXyIsIG5iX2Rpdm1vZCwgc2xvdF9uYl9kaXZtb2QsCi0gICAgICAgICAgICAgImRpdm1vZCh5LCB4KSIpLAorICAgICAgICAgICAiUmV0dXJuIGRpdm1vZCh2YWx1ZSwgc2VsZikuIiksCiAgICAgTkJTTE9UKCJfX3Bvd19fIiwgbmJfcG93ZXIsIHNsb3RfbmJfcG93ZXIsIHdyYXBfdGVybmFyeWZ1bmMsCi0gICAgICAgICAgICJ4Ll9fcG93X18oeVssIHpdKSA8PT0+IHBvdyh4LCB5Wywgel0pIiksCisgICAgICAgICAgICJfX3Bvd19fKCRzZWxmLCB2YWx1ZSwgbW9kPU5vbmUsIC8pXG4tLVxuXG5SZXR1cm4gcG93KHNlbGYsIHZhbHVlLCBtb2QpLiIpLAogICAgIE5CU0xPVCgiX19ycG93X18iLCBuYl9wb3dlciwgc2xvdF9uYl9wb3dlciwgd3JhcF90ZXJuYXJ5ZnVuY19yLAotICAgICAgICAgICAieS5fX3Jwb3dfXyh4Wywgel0pIDw9PT4gcG93KHgsIHlbLCB6XSkiKSwKLSAgICBVTlNMT1QoIl9fbmVnX18iLCBuYl9uZWdhdGl2ZSwgc2xvdF9uYl9uZWdhdGl2ZSwgd3JhcF91bmFyeWZ1bmMsICIteCIpLAotICAgIFVOU0xPVCgiX19wb3NfXyIsIG5iX3Bvc2l0aXZlLCBzbG90X25iX3Bvc2l0aXZlLCB3cmFwX3VuYXJ5ZnVuYywgIit4IiksCisgICAgICAgICAgICJfX3Jwb3dfXygkc2VsZiwgdmFsdWUsIG1vZD1Ob25lLCAvKVxuLS1cblxuUmV0dXJuIHBvdyh2YWx1ZSwgc2VsZiwgbW9kKS4iKSwKKyAgICBVTlNMT1QoIl9fbmVnX18iLCBuYl9uZWdhdGl2ZSwgc2xvdF9uYl9uZWdhdGl2ZSwgd3JhcF91bmFyeWZ1bmMsICItc2VsZiIpLAorICAgIFVOU0xPVCgiX19wb3NfXyIsIG5iX3Bvc2l0aXZlLCBzbG90X25iX3Bvc2l0aXZlLCB3cmFwX3VuYXJ5ZnVuYywgIitzZWxmIiksCiAgICAgVU5TTE9UKCJfX2Fic19fIiwgbmJfYWJzb2x1dGUsIHNsb3RfbmJfYWJzb2x1dGUsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAiYWJzKHgpIiksCisgICAgICAgICAgICJhYnMoc2VsZikiKSwKICAgICBVTlNMT1QoIl9fYm9vbF9fIiwgbmJfYm9vbCwgc2xvdF9uYl9ib29sLCB3cmFwX2lucXVpcnlwcmVkLAotICAgICAgICAgICAieCAhPSAwIiksCi0gICAgVU5TTE9UKCJfX2ludmVydF9fIiwgbmJfaW52ZXJ0LCBzbG90X25iX2ludmVydCwgd3JhcF91bmFyeWZ1bmMsICJ+eCIpLAorICAgICAgICAgICAic2VsZiAhPSAwIiksCisgICAgVU5TTE9UKCJfX2ludmVydF9fIiwgbmJfaW52ZXJ0LCBzbG90X25iX2ludmVydCwgd3JhcF91bmFyeWZ1bmMsICJ+c2VsZiIpLAogICAgIEJJTlNMT1QoIl9fbHNoaWZ0X18iLCBuYl9sc2hpZnQsIHNsb3RfbmJfbHNoaWZ0LCAiPDwiKSwKICAgICBSQklOU0xPVCgiX19ybHNoaWZ0X18iLCBuYl9sc2hpZnQsIHNsb3RfbmJfbHNoaWZ0LCAiPDwiKSwKICAgICBCSU5TTE9UKCJfX3JzaGlmdF9fIiwgbmJfcnNoaWZ0LCBzbG90X25iX3JzaGlmdCwgIj4+IiksCkBAIC01ODMxLDkgKzY0MTUsOSBAQAogICAgIEJJTlNMT1QoIl9fb3JfXyIsIG5iX29yLCBzbG90X25iX29yLCAifCIpLAogICAgIFJCSU5TTE9UKCJfX3Jvcl9fIiwgbmJfb3IsIHNsb3RfbmJfb3IsICJ8IiksCiAgICAgVU5TTE9UKCJfX2ludF9fIiwgbmJfaW50LCBzbG90X25iX2ludCwgd3JhcF91bmFyeWZ1bmMsCi0gICAgICAgICAgICJpbnQoeCkiKSwKKyAgICAgICAgICAgImludChzZWxmKSIpLAogICAgIFVOU0xPVCgiX19mbG9hdF9fIiwgbmJfZmxvYXQsIHNsb3RfbmJfZmxvYXQsIHdyYXBfdW5hcnlmdW5jLAotICAgICAgICAgICAiZmxvYXQoeCkiKSwKKyAgICAgICAgICAgImZsb2F0KHNlbGYpIiksCiAgICAgSUJTTE9UKCJfX2lhZGRfXyIsIG5iX2lucGxhY2VfYWRkLCBzbG90X25iX2lucGxhY2VfYWRkLAogICAgICAgICAgICB3cmFwX2JpbmFyeWZ1bmMsICIrPSIpLAogICAgIElCU0xPVCgiX19pc3ViX18iLCBuYl9pbnBsYWNlX3N1YnRyYWN0LCBzbG90X25iX2lucGxhY2Vfc3VidHJhY3QsCkBAIC01ODU5LDQ5ICs2NDQzLDUyIEBACiAgICAgQklOU0xPVCgiX190cnVlZGl2X18iLCBuYl90cnVlX2RpdmlkZSwgc2xvdF9uYl90cnVlX2RpdmlkZSwgIi8iKSwKICAgICBSQklOU0xPVCgiX19ydHJ1ZWRpdl9fIiwgbmJfdHJ1ZV9kaXZpZGUsIHNsb3RfbmJfdHJ1ZV9kaXZpZGUsICIvIiksCiAgICAgSUJTTE9UKCJfX2lmbG9vcmRpdl9fIiwgbmJfaW5wbGFjZV9mbG9vcl9kaXZpZGUsCi0gICAgICAgICAgIHNsb3RfbmJfaW5wbGFjZV9mbG9vcl9kaXZpZGUsIHdyYXBfYmluYXJ5ZnVuYywgIi8vIiksCisgICAgICAgICAgIHNsb3RfbmJfaW5wbGFjZV9mbG9vcl9kaXZpZGUsIHdyYXBfYmluYXJ5ZnVuYywgIi8vPSIpLAogICAgIElCU0xPVCgiX19pdHJ1ZWRpdl9fIiwgbmJfaW5wbGFjZV90cnVlX2RpdmlkZSwKLSAgICAgICAgICAgc2xvdF9uYl9pbnBsYWNlX3RydWVfZGl2aWRlLCB3cmFwX2JpbmFyeWZ1bmMsICIvIiksCisgICAgICAgICAgIHNsb3RfbmJfaW5wbGFjZV90cnVlX2RpdmlkZSwgd3JhcF9iaW5hcnlmdW5jLCAiLz0iKSwKICAgICBOQlNMT1QoIl9faW5kZXhfXyIsIG5iX2luZGV4LCBzbG90X25iX2luZGV4LCB3cmFwX3VuYXJ5ZnVuYywKLSAgICAgICAgICAgInhbeTp6XSA8PT0+IHhbeS5fX2luZGV4X18oKTp6Ll9faW5kZXhfXygpXSIpLAotCisgICAgICAgICAgICJfX2luZGV4X18oJHNlbGYsIC8pXG4tLVxuXG4iCisgICAgICAgICAgICJSZXR1cm4gc2VsZiBjb252ZXJ0ZWQgdG8gYW4gaW50ZWdlciwgaWYgc2VsZiBpcyBzdWl0YWJsZSAiCisgICAgICAgICAgICJmb3IgdXNlIGFzIGFuIGluZGV4IGludG8gYSBsaXN0LiIpLAogICAgIE1QU0xPVCgiX19sZW5fXyIsIG1wX2xlbmd0aCwgc2xvdF9tcF9sZW5ndGgsIHdyYXBfbGVuZnVuYywKLSAgICAgICAgICAgInguX19sZW5fXygpIDw9PT4gbGVuKHgpIiksCisgICAgICAgICAgICJfX2xlbl9fKCRzZWxmLCAvKVxuLS1cblxuUmV0dXJuIGxlbihzZWxmKS4iKSwKICAgICBNUFNMT1QoIl9fZ2V0aXRlbV9fIiwgbXBfc3Vic2NyaXB0LCBzbG90X21wX3N1YnNjcmlwdCwKICAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLAotICAgICAgICAgICAieC5fX2dldGl0ZW1fXyh5KSA8PT0+IHhbeV0iKSwKKyAgICAgICAgICAgIl9fZ2V0aXRlbV9fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5SZXR1cm4gc2VsZltrZXldLiIpLAogICAgIE1QU0xPVCgiX19zZXRpdGVtX18iLCBtcF9hc3Nfc3Vic2NyaXB0LCBzbG90X21wX2Fzc19zdWJzY3JpcHQsCiAgICAgICAgICAgIHdyYXBfb2Jqb2JqYXJncHJvYywKLSAgICAgICAgICAgInguX19zZXRpdGVtX18oaSwgeSkgPD09PiB4W2ldPXkiKSwKKyAgICAgICAgICAgIl9fc2V0aXRlbV9fKCRzZWxmLCBrZXksIHZhbHVlLCAvKVxuLS1cblxuU2V0IHNlbGZba2V5XSB0byB2YWx1ZS4iKSwKICAgICBNUFNMT1QoIl9fZGVsaXRlbV9fIiwgbXBfYXNzX3N1YnNjcmlwdCwgc2xvdF9tcF9hc3Nfc3Vic2NyaXB0LAogICAgICAgICAgICB3cmFwX2RlbGl0ZW0sCi0gICAgICAgICAgICJ4Ll9fZGVsaXRlbV9fKHkpIDw9PT4gZGVsIHhbeV0iKSwKKyAgICAgICAgICAgIl9fZGVsaXRlbV9fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5EZWxldGUgc2VsZltrZXldLiIpLAogCiAgICAgU1FTTE9UKCJfX2xlbl9fIiwgc3FfbGVuZ3RoLCBzbG90X3NxX2xlbmd0aCwgd3JhcF9sZW5mdW5jLAotICAgICAgICAgICAieC5fX2xlbl9fKCkgPD09PiBsZW4oeCkiKSwKKyAgICAgICAgICAgIl9fbGVuX18oJHNlbGYsIC8pXG4tLVxuXG5SZXR1cm4gbGVuKHNlbGYpLiIpLAogICAgIC8qIEhlYXAgdHlwZXMgZGVmaW5pbmcgX19hZGRfXy9fX211bF9fIGhhdmUgc3FfY29uY2F0L3NxX3JlcGVhdCA9PSBOVUxMLgogICAgICAgIFRoZSBsb2dpYyBpbiBhYnN0cmFjdC5jIGFsd2F5cyBmYWxscyBiYWNrIHRvIG5iX2FkZC9uYl9tdWx0aXBseSBpbgogICAgICAgIHRoaXMgY2FzZS4gIERlZmluaW5nIGJvdGggdGhlIG5iXyogYW5kIHRoZSBzcV8qIHNsb3RzIHRvIGNhbGwgdGhlCiAgICAgICAgdXNlci1kZWZpbmVkIG1ldGhvZHMgaGFzIHVuZXhwZWN0ZWQgc2lkZS1lZmZlY3RzLCBhcyBzaG93biBieQogICAgICAgIHRlc3RfZGVzY3Iubm90aW1wbGVtZW50ZWQoKSAqLwogICAgIFNRU0xPVCgiX19hZGRfXyIsIHNxX2NvbmNhdCwgTlVMTCwgd3JhcF9iaW5hcnlmdW5jLAotICAgICAgInguX19hZGRfXyh5KSA8PT0+IHgreSIpLAorICAgICAgICAgICAiX19hZGRfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZit2YWx1ZS4iKSwKICAgICBTUVNMT1QoIl9fbXVsX18iLCBzcV9yZXBlYXQsIE5VTEwsIHdyYXBfaW5kZXhhcmdmdW5jLAotICAgICAgInguX19tdWxfXyhuKSA8PT0+IHgqbiIpLAorICAgICAgICAgICAiX19tdWxfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5SZXR1cm4gc2VsZip2YWx1ZS5uIiksCiAgICAgU1FTTE9UKCJfX3JtdWxfXyIsIHNxX3JlcGVhdCwgTlVMTCwgd3JhcF9pbmRleGFyZ2Z1bmMsCi0gICAgICAieC5fX3JtdWxfXyhuKSA8PT0+IG4qeCIpLAorICAgICAgICAgICAiX19ybXVsX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuUmV0dXJuIHNlbGYqdmFsdWUuIiksCiAgICAgU1FTTE9UKCJfX2dldGl0ZW1fXyIsIHNxX2l0ZW0sIHNsb3Rfc3FfaXRlbSwgd3JhcF9zcV9pdGVtLAotICAgICAgICAgICAieC5fX2dldGl0ZW1fXyh5KSA8PT0+IHhbeV0iKSwKKyAgICAgICAgICAgIl9fZ2V0aXRlbV9fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5SZXR1cm4gc2VsZltrZXldLiIpLAogICAgIFNRU0xPVCgiX19zZXRpdGVtX18iLCBzcV9hc3NfaXRlbSwgc2xvdF9zcV9hc3NfaXRlbSwgd3JhcF9zcV9zZXRpdGVtLAotICAgICAgICAgICAieC5fX3NldGl0ZW1fXyhpLCB5KSA8PT0+IHhbaV09eSIpLAorICAgICAgICAgICAiX19zZXRpdGVtX18oJHNlbGYsIGtleSwgdmFsdWUsIC8pXG4tLVxuXG5TZXQgc2VsZltrZXldIHRvIHZhbHVlLiIpLAogICAgIFNRU0xPVCgiX19kZWxpdGVtX18iLCBzcV9hc3NfaXRlbSwgc2xvdF9zcV9hc3NfaXRlbSwgd3JhcF9zcV9kZWxpdGVtLAotICAgICAgICAgICAieC5fX2RlbGl0ZW1fXyh5KSA8PT0+IGRlbCB4W3ldIiksCisgICAgICAgICAgICJfX2RlbGl0ZW1fXygkc2VsZiwga2V5LCAvKVxuLS1cblxuRGVsZXRlIHNlbGZba2V5XS4iKSwKICAgICBTUVNMT1QoIl9fY29udGFpbnNfXyIsIHNxX2NvbnRhaW5zLCBzbG90X3NxX2NvbnRhaW5zLCB3cmFwX29iam9ianByb2MsCi0gICAgICAgICAgICJ4Ll9fY29udGFpbnNfXyh5KSA8PT0+IHkgaW4geCIpLAorICAgICAgICAgICAiX19jb250YWluc19fKCRzZWxmLCBrZXksIC8pXG4tLVxuXG5SZXR1cm4ga2V5IGluIHNlbGYuIiksCiAgICAgU1FTTE9UKCJfX2lhZGRfXyIsIHNxX2lucGxhY2VfY29uY2F0LCBOVUxMLAotICAgICAgd3JhcF9iaW5hcnlmdW5jLCAieC5fX2lhZGRfXyh5KSA8PT0+IHgrPXkiKSwKKyAgICAgICAgICAgd3JhcF9iaW5hcnlmdW5jLAorICAgICAgICAgICAiX19pYWRkX18oJHNlbGYsIHZhbHVlLCAvKVxuLS1cblxuSW1wbGVtZW50IHNlbGYrPXZhbHVlLiIpLAogICAgIFNRU0xPVCgiX19pbXVsX18iLCBzcV9pbnBsYWNlX3JlcGVhdCwgTlVMTCwKLSAgICAgIHdyYXBfaW5kZXhhcmdmdW5jLCAieC5fX2ltdWxfXyh5KSA8PT0+IHgqPXkiKSwKKyAgICAgICAgICAgd3JhcF9pbmRleGFyZ2Z1bmMsCisgICAgICAgICAgICJfX2ltdWxfXygkc2VsZiwgdmFsdWUsIC8pXG4tLVxuXG5JbXBsZW1lbnQgc2VsZio9dmFsdWUuIiksCiAKICAgICB7TlVMTH0KIH07CkBAIC02MTg0LDE1ICs2NzcxLDE0IEBACiB7CiAgICAgUHlUeXBlT2JqZWN0ICpzdWJjbGFzczsKICAgICBQeU9iamVjdCAqcmVmLCAqc3ViY2xhc3NlcywgKmRpY3Q7Ci0gICAgUHlfc3NpemVfdCBpLCBuOworICAgIFB5X3NzaXplX3QgaTsKIAogICAgIHN1YmNsYXNzZXMgPSB0eXBlLT50cF9zdWJjbGFzc2VzOwogICAgIGlmIChzdWJjbGFzc2VzID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIGFzc2VydChQeUxpc3RfQ2hlY2soc3ViY2xhc3NlcykpOwotICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUoc3ViY2xhc3Nlcyk7Ci0gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICByZWYgPSBQeUxpc3RfR0VUX0lURU0oc3ViY2xhc3NlcywgaSk7CisgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KHN1YmNsYXNzZXMpKTsKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoUHlEaWN0X05leHQoc3ViY2xhc3NlcywgJmksIE5VTEwsICZyZWYpKSB7CiAgICAgICAgIGFzc2VydChQeVdlYWtyZWZfQ2hlY2tSZWYocmVmKSk7CiAgICAgICAgIHN1YmNsYXNzID0gKFB5VHlwZU9iamVjdCAqKVB5V2Vha3JlZl9HRVRfT0JKRUNUKHJlZik7CiAgICAgICAgIGFzc2VydChzdWJjbGFzcyAhPSBOVUxMKTsKQEAgLTYzMzIsNzAgKzY5MTgsNzQgQEAKIHN1cGVyX2dldGF0dHJvKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbmFtZSkKIHsKICAgICBzdXBlcm9iamVjdCAqc3UgPSAoc3VwZXJvYmplY3QgKilzZWxmOwotICAgIGludCBza2lwID0gc3UtPm9ial90eXBlID09IE5VTEw7CisgICAgUHlUeXBlT2JqZWN0ICpzdGFydHR5cGU7CisgICAgUHlPYmplY3QgKm1ybzsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAKLSAgICBpZiAoIXNraXApIHsKLSAgICAgICAgLyogV2Ugd2FudCBfX2NsYXNzX18gdG8gcmV0dXJuIHRoZSBjbGFzcyBvZiB0aGUgc3VwZXIgb2JqZWN0Ci0gICAgICAgICAgIChpLmUuIHN1cGVyLCBvciBhIHN1YmNsYXNzKSwgbm90IHRoZSBjbGFzcyBvZiBzdS0+b2JqLiAqLwotICAgICAgICBza2lwID0gKFB5VW5pY29kZV9DaGVjayhuYW1lKSAmJgotICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgobmFtZSkgPT0gOSAmJgotICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIl9fY2xhc3NfXyIpID09IDApOworICAgIHN0YXJ0dHlwZSA9IHN1LT5vYmpfdHlwZTsKKyAgICBpZiAoc3RhcnR0eXBlID09IE5VTEwpCisgICAgICAgIGdvdG8gc2tpcDsKKworICAgIC8qIFdlIHdhbnQgX19jbGFzc19fIHRvIHJldHVybiB0aGUgY2xhc3Mgb2YgdGhlIHN1cGVyIG9iamVjdAorICAgICAgIChpLmUuIHN1cGVyLCBvciBhIHN1YmNsYXNzKSwgbm90IHRoZSBjbGFzcyBvZiBzdS0+b2JqLiAqLworICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobmFtZSkgJiYKKyAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgobmFtZSkgPT0gOSAmJgorICAgICAgICBfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobmFtZSwgJlB5SWRfX19jbGFzc19fKSA9PSAwKQorICAgICAgICBnb3RvIHNraXA7CisKKyAgICBtcm8gPSBzdGFydHR5cGUtPnRwX21ybzsKKyAgICBpZiAobXJvID09IE5VTEwpCisgICAgICAgIGdvdG8gc2tpcDsKKworICAgIGFzc2VydChQeVR1cGxlX0NoZWNrKG1ybykpOworICAgIG4gPSBQeVR1cGxlX0dFVF9TSVpFKG1ybyk7CisKKyAgICAvKiBObyBuZWVkIHRvIGNoZWNrIHRoZSBsYXN0IG9uZTogaXQncyBnb25uYSBiZSBza2lwcGVkIGFueXdheS4gICovCisgICAgZm9yIChpID0gMDsgaSsxIDwgbjsgaSsrKSB7CisgICAgICAgIGlmICgoUHlPYmplY3QgKikoc3UtPnR5cGUpID09IFB5VHVwbGVfR0VUX0lURU0obXJvLCBpKSkKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBpKys7ICAvKiBza2lwIHN1LT50eXBlIChpZiBhbnkpICAqLworICAgIGlmIChpID49IG4pCisgICAgICAgIGdvdG8gc2tpcDsKIAotICAgIGlmICghc2tpcCkgewotICAgICAgICBQeU9iamVjdCAqbXJvLCAqcmVzLCAqdG1wLCAqZGljdDsKLSAgICAgICAgUHlUeXBlT2JqZWN0ICpzdGFydHR5cGU7CisgICAgLyoga2VlcCBhIHN0cm9uZyByZWZlcmVuY2UgdG8gbXJvIGJlY2F1c2Ugc3RhcnR0eXBlLT50cF9tcm8gY2FuIGJlCisgICAgICAgcmVwbGFjZWQgZHVyaW5nIFB5RGljdF9HZXRJdGVtKGRpY3QsIG5hbWUpICAqLworICAgIFB5X0lOQ1JFRihtcm8pOworICAgIGRvIHsKKyAgICAgICAgUHlPYmplY3QgKnJlcywgKnRtcCwgKmRpY3Q7CiAgICAgICAgIGRlc2NyZ2V0ZnVuYyBmOwotICAgICAgICBQeV9zc2l6ZV90IGksIG47CiAKLSAgICAgICAgc3RhcnR0eXBlID0gc3UtPm9ial90eXBlOwotICAgICAgICBtcm8gPSBzdGFydHR5cGUtPnRwX21ybzsKKyAgICAgICAgdG1wID0gUHlUdXBsZV9HRVRfSVRFTShtcm8sIGkpOworICAgICAgICBhc3NlcnQoUHlUeXBlX0NoZWNrKHRtcCkpOwogCi0gICAgICAgIGlmIChtcm8gPT0gTlVMTCkKLSAgICAgICAgICAgIG4gPSAwOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGFzc2VydChQeVR1cGxlX0NoZWNrKG1ybykpOwotICAgICAgICAgICAgbiA9IFB5VHVwbGVfR0VUX1NJWkUobXJvKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoKFB5T2JqZWN0ICopKHN1LT50eXBlKSA9PSBQeVR1cGxlX0dFVF9JVEVNKG1ybywgaSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaSsrOwotICAgICAgICByZXMgPSBOVUxMOwotICAgICAgICAvKiBrZWVwIGEgc3Ryb25nIHJlZmVyZW5jZSB0byBtcm8gYmVjYXVzZSBzdGFydHR5cGUtPnRwX21ybyBjYW4gYmUKLSAgICAgICAgICAgcmVwbGFjZWQgZHVyaW5nIFB5RGljdF9HZXRJdGVtKGRpY3QsIG5hbWUpICAqLwotICAgICAgICBQeV9JTkNSRUYobXJvKTsKLSAgICAgICAgZm9yICg7IGkgPCBuOyBpKyspIHsKLSAgICAgICAgICAgIHRtcCA9IFB5VHVwbGVfR0VUX0lURU0obXJvLCBpKTsKLSAgICAgICAgICAgIGlmIChQeVR5cGVfQ2hlY2sodG1wKSkKLSAgICAgICAgICAgICAgICBkaWN0ID0gKChQeVR5cGVPYmplY3QgKil0bXApLT50cF9kaWN0OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgcmVzID0gUHlEaWN0X0dldEl0ZW0oZGljdCwgbmFtZSk7Ci0gICAgICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYocmVzKTsKLSAgICAgICAgICAgICAgICBmID0gUHlfVFlQRShyZXMpLT50cF9kZXNjcl9nZXQ7Ci0gICAgICAgICAgICAgICAgaWYgKGYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICB0bXAgPSBmKHJlcywKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgcGFzcyAnb2JqJyBwYXJhbSBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpcyBpbnN0YW5jZS1tb2RlIHN1cGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoU2VlIFNGIElEICM3NDM2MjcpCi0gICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgKHN1LT5vYmogPT0gKFB5T2JqZWN0ICopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdS0+b2JqX3R5cGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IChQeU9iamVjdCAqKU5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN1LT5vYmopLAotICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopc3RhcnR0eXBlKTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgICAgICAgICAgICAgICAgIHJlcyA9IHRtcDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKG1ybyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAgZGljdCA9ICgoUHlUeXBlT2JqZWN0ICopdG1wKS0+dHBfZGljdDsKKyAgICAgICAgYXNzZXJ0KGRpY3QgIT0gTlVMTCAmJiBQeURpY3RfQ2hlY2soZGljdCkpOworCisgICAgICAgIHJlcyA9IFB5RGljdF9HZXRJdGVtKGRpY3QsIG5hbWUpOworICAgICAgICBpZiAocmVzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihyZXMpOworCisgICAgICAgICAgICBmID0gUHlfVFlQRShyZXMpLT50cF9kZXNjcl9nZXQ7CisgICAgICAgICAgICBpZiAoZiAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdG1wID0gZihyZXMsCisgICAgICAgICAgICAgICAgICAgIC8qIE9ubHkgcGFzcyAnb2JqJyBwYXJhbSBpZiB0aGlzIGlzIGluc3RhbmNlLW1vZGUgc3VwZXIKKyAgICAgICAgICAgICAgICAgICAgICAgKFNlZSBTRiBJRCAjNzQzNjI3KSAgKi8KKyAgICAgICAgICAgICAgICAgICAgKHN1LT5vYmogPT0gKFB5T2JqZWN0ICopc3RhcnR0eXBlKSA/IE5VTEwgOiBzdS0+b2JqLAorICAgICAgICAgICAgICAgICAgICAoUHlPYmplY3QgKilzdGFydHR5cGUpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICAgICAgICAgIHJlcyA9IHRtcDsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUHlfREVDUkVGKG1ybyk7CisgICAgICAgICAgICByZXR1cm4gcmVzOwogICAgICAgICB9Ci0gICAgICAgIFB5X0RFQ1JFRihtcm8pOwotICAgIH0KKworICAgICAgICBpKys7CisgICAgfSB3aGlsZSAoaSA8IG4pOworICAgIFB5X0RFQ1JFRihtcm8pOworCisgIHNraXA6CiAgICAgcmV0dXJuIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyKHNlbGYsIG5hbWUpOwogfQogCkBAIC02NTA1LDkgKzcwOTUsMTYgQEAKICAgICBpZiAodHlwZSA9PSBOVUxMKSB7CiAgICAgICAgIC8qIENhbGwgc3VwZXIoKSwgd2l0aG91dCBhcmdzIC0tIGZpbGwgaW4gZnJvbSBfX2NsYXNzX18KICAgICAgICAgICAgYW5kIGZpcnN0IGxvY2FsIHZhcmlhYmxlIG9uIHRoZSBzdGFjay4gKi8KLSAgICAgICAgUHlGcmFtZU9iamVjdCAqZiA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmZyYW1lOwotICAgICAgICBQeUNvZGVPYmplY3QgKmNvID0gZi0+Zl9jb2RlOworICAgICAgICBQeUZyYW1lT2JqZWN0ICpmOworICAgICAgICBQeUNvZGVPYmplY3QgKmNvOwogICAgICAgICBQeV9zc2l6ZV90IGksIG47CisgICAgICAgIGYgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5mcmFtZTsKKyAgICAgICAgaWYgKGYgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwZXIoKTogbm8gY3VycmVudCBmcmFtZSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGNvID0gZi0+Zl9jb2RlOwogICAgICAgICBpZiAoY28gPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwZXIoKTogbm8gY29kZSBvYmplY3QiKTsKQEAgLTY1NDUsOCArNzE0Miw3IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gUHlUdXBsZV9HRVRfSVRFTShjby0+Y29fZnJlZXZhcnMsIGkpOwogICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhuYW1lKSk7Ci0gICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2NsYXNzX18iKSkgeworICAgICAgICAgICAgaWYgKCFfUHlVbmljb2RlX0NvbXBhcmVXaXRoSWQobmFtZSwgJlB5SWRfX19jbGFzc19fKSkgewogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXggPSBjby0+Y29fbmxvY2FscyArCiAgICAgICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKSArIGk7CiAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmLT5mX2xvY2Fsc3BsdXNbaW5kZXhdOwpkaWZmIC0tZ2l0IGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYyBiL09iamVjdHMvdW5pY29kZWN0eXBlLmMKaW5kZXggYTU3MmMxMi4uZWE1NDBkNiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RlY3R5cGUuYworKysgYi9PYmplY3RzL3VuaWNvZGVjdHlwZS5jCkBAIC02MSw3ICs2MSw3IEBACiAvKiBSZXR1cm5zIHRoZSB0aXRsZWNhc2UgVW5pY29kZSBjaGFyYWN0ZXJzIGNvcnJlc3BvbmRpbmcgdG8gY2ggb3IganVzdAogICAgY2ggaWYgbm8gdGl0bGVjYXNlIG1hcHBpbmcgaXMga25vd24uICovCiAKLVB5X1VDUzQgX1B5VW5pY29kZV9Ub1RpdGxlY2FzZShyZWdpc3RlciBQeV9VQ1M0IGNoKQorUHlfVUNTNCBfUHlVbmljb2RlX1RvVGl0bGVjYXNlKFB5X1VDUzQgY2gpCiB7CiAgICAgY29uc3QgX1B5VW5pY29kZV9UeXBlUmVjb3JkICpjdHlwZSA9IGdldHR5cGVyZWNvcmQoY2gpOwogCmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGVvYmplY3QuYyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCmluZGV4IDI0ZWRhNmIuLmVlNmVhYzMgMTAwNjQ0Ci0tLSBhL09iamVjdHMvdW5pY29kZW9iamVjdC5jCisrKyBiL09iamVjdHMvdW5pY29kZW9iamVjdC5jCkBAIC00NywxMyArNDcsMTAgQEAKICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAjZW5kaWYKIAotLyogRW5kaWFubmVzcyBzd2l0Y2hlczsgZGVmYXVsdHMgdG8gbGl0dGxlIGVuZGlhbiAqLwotCi0jaWZkZWYgV09SRFNfQklHRU5ESUFOCi0jIGRlZmluZSBCWVRFT1JERVJfSVNfQklHX0VORElBTgotI2Vsc2UKLSMgZGVmaW5lIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCi0jZW5kaWYKKy8qW2NsaW5pYyBpbnB1dF0KK2NsYXNzIHN0ciAiUHlVbmljb2RlT2JqZWN0ICoiICImUHlVbmljb2RlX1R5cGUiCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD02MDRlOTE2ODU0ODAwZmE4XSovCiAKIC8qIC0tLSBHbG9iYWxzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC0xMzAsMTYgKzEyNywxNCBAQAogLyogdHJ1ZSBpZiB0aGUgVW5pY29kZSBvYmplY3QgaGFzIGFuIGFsbG9jYXRlZCBVVEYtOCBtZW1vcnkgYmxvY2sKICAgIChub3Qgc2hhcmVkIHdpdGggb3RoZXIgZGF0YSkgKi8KICNkZWZpbmUgX1B5VW5pY29kZV9IQVNfVVRGOF9NRU1PUlkob3ApICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyhvcCkpLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICghUHlVbmljb2RlX0lTX0NPTVBBQ1RfQVNDSUkob3ApICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKCFQeVVuaWNvZGVfSVNfQ09NUEFDVF9BU0NJSShvcCkgICAgICAgICAgICAgICAgICAgXAogICAgICAgJiYgX1B5VW5pY29kZV9VVEY4KG9wKSAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAmJiBfUHlVbmljb2RlX1VURjgob3ApICE9IFB5VW5pY29kZV9EQVRBKG9wKSkpCiAKIC8qIHRydWUgaWYgdGhlIFVuaWNvZGUgb2JqZWN0IGhhcyBhbiBhbGxvY2F0ZWQgd3N0ciBtZW1vcnkgYmxvY2sKICAgIChub3Qgc2hhcmVkIHdpdGggb3RoZXIgZGF0YSkgKi8KICNkZWZpbmUgX1B5VW5pY29kZV9IQVNfV1NUUl9NRU1PUlkob3ApICAgICAgICAgICAgICAgICAgXAotICAgIChhc3NlcnQoX1B5VW5pY29kZV9DSEVDSyhvcCkpLCAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgIChfUHlVbmljb2RlX1dTVFIob3ApICYmICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoKF9QeVVuaWNvZGVfV1NUUihvcCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgKCFQeVVuaWNvZGVfSVNfUkVBRFkob3ApIHx8ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgX1B5VW5pY29kZV9XU1RSKG9wKSAhPSBQeVVuaWNvZGVfREFUQShvcCkpKSkKIApAQCAtMTUwLDkgKzE0NSw5IEBACiAgICBidWZmZXIgd2hlcmUgdGhlIHJlc3VsdCBjaGFyYWN0ZXJzIGFyZSB3cml0dGVuIHRvLiAqLwogI2RlZmluZSBfUHlVbmljb2RlX0NPTlZFUlRfQllURVMoZnJvbV90eXBlLCB0b190eXBlLCBiZWdpbiwgZW5kLCB0bykgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHRvX3R5cGUgKl90byA9ICh0b190eXBlICopIHRvOyAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgZnJvbV90eXBlICpfaXRlciA9IChiZWdpbik7ICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9lbmQgPSAoZW5kKTsgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRvX3R5cGUgKl90byA9ICh0b190eXBlICopKHRvKTsgICAgICAgICAgICAgICAgXAorICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl9pdGVyID0gKGZyb21fdHlwZSAqKShiZWdpbik7ICBcCisgICAgICAgIGNvbnN0IGZyb21fdHlwZSAqX2VuZCA9IChmcm9tX3R5cGUgKikoZW5kKTsgICAgIFwKICAgICAgICAgUHlfc3NpemVfdCBuID0gKF9lbmQpIC0gKF9pdGVyKTsgICAgICAgICAgICAgICAgXAogICAgICAgICBjb25zdCBmcm9tX3R5cGUgKl91bnJvbGxlZF9lbmQgPSAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBfaXRlciArIF9QeV9TSVpFX1JPVU5EX0RPV04obiwgNCk7ICAgICAgICAgIFwKQEAgLTE5OSw2ICsxOTQsMTAgQEAKICAgICAgICAgcmV0dXJuIHVuaWNvZGVfZW1wdHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUgKDApCiAKKy8qIEZvcndhcmQgZGVjbGFyYXRpb24gKi8KK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpOworCiAvKiBMaXN0IG9mIHN0YXRpYyBzdHJpbmdzLiAqLwogc3RhdGljIF9QeV9JZGVudGlmaWVyICpzdGF0aWNfc3RyaW5ncyA9IE5VTEw7CiAKQEAgLTQyNyw4ICs0MjYsNiBAQAogI2lmbmRlZiBQeV9ERUJVRwogICAgIFB5X3NzaXplX3QgbGVuOwogCi0gICAgYXNzZXJ0KFB5X1JFRkNOVCh1bmljb2RlKSA9PSAxKTsKLQogICAgIGxlbiA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSk7CiAgICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKQEAgLTQ0NSwxMCArNDQyLDEyIEBACiAgICAgfQogCiAgICAgaWYgKF9QeVVuaWNvZGVfUmVhZHkodW5pY29kZSkgPCAwKSB7Ci0gICAgICAgIFB5X1hERUNSRUYodW5pY29kZSk7CisgICAgICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2Vsc2UKKyAgICBhc3NlcnQoUHlfUkVGQ05UKHVuaWNvZGUpID09IDEpOworCiAgICAgLyogZG9uJ3QgbWFrZSB0aGUgcmVzdWx0IHJlYWR5IGluIGRlYnVnIG1vZGUgdG8gZW5zdXJlIHRoYXQgdGhlIGNhbGxlcgogICAgICAgIG1ha2VzIHRoZSBzdHJpbmcgcmVhZHkgYmVmb3JlIHVzaW5nIGl0ICovCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7CkBAIC00NzEsNyArNDcwLDkgQEAKICAgICB9CiAKICAgICBpZiAobGVuZ3RoID09IDEpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgMCk7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmljb2RlKTsKKyAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIDApOwogICAgICAgICBpZiAoY2ggPCAyNTYpIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpsYXRpbjFfY2hhciA9IHVuaWNvZGVfbGF0aW4xW2NoXTsKICAgICAgICAgICAgIGlmIChsYXRpbjFfY2hhciAhPSBOVUxMKSB7CkBAIC01NDQsNyArNTQ1LDYgQEAKIAogc3RhdGljIEJMT09NX01BU0sgYmxvb21fbGluZWJyZWFrID0gfihCTE9PTV9NQVNLKTA7CiAKLSNkZWZpbmUgQkxPT01fQUREKG1hc2ssIGNoKSAoKG1hc2sgfD0gKDFVTCA8PCAoKGNoKSAmIChCTE9PTV9XSURUSCAtIDEpKSkpKQogI2RlZmluZSBCTE9PTShtYXNrLCBjaCkgICAgICgobWFzayAmICAoMVVMIDw8ICgoY2gpICYgKEJMT09NX1dJRFRIIC0gMSkpKSkpCiAKICNkZWZpbmUgQkxPT01fTElORUJSRUFLKGNoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTU1NCwyMSArNTU0LDQwIEBACiBQeV9MT0NBTF9JTkxJTkUoQkxPT01fTUFTSykKIG1ha2VfYmxvb21fbWFzayhpbnQga2luZCwgdm9pZCogcHRyLCBQeV9zc2l6ZV90IGxlbikKIHsKKyNkZWZpbmUgQkxPT01fVVBEQVRFKFRZUEUsIE1BU0ssIFBUUiwgTEVOKSAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBUWVBFICpkYXRhID0gKFRZUEUgKilQVFI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgVFlQRSAqZW5kID0gZGF0YSArIExFTjsgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFB5X1VDUzQgY2g7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmb3IgKDsgZGF0YSAhPSBlbmQ7IGRhdGErKykgeyAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGNoID0gKmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBNQVNLIHw9ICgxVUwgPDwgKGNoICYgKEJMT09NX1dJRFRIIC0gMSkpKTsgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoMCkKKwogICAgIC8qIGNhbGN1bGF0ZSBzaW1wbGUgYmxvb20tc3R5bGUgYml0bWFzayBmb3IgYSBnaXZlbiB1bmljb2RlIHN0cmluZyAqLwogCiAgICAgQkxPT01fTUFTSyBtYXNrOwotICAgIFB5X3NzaXplX3QgaTsKIAogICAgIG1hc2sgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLSAgICAgICAgQkxPT01fQUREKG1hc2ssIFB5VW5pY29kZV9SRUFEKGtpbmQsIHB0ciwgaSkpOwotCisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzEsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzIsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgQkxPT01fVVBEQVRFKFB5X1VDUzQsIG1hc2ssIHB0ciwgbGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KDApOworICAgIH0KICAgICByZXR1cm4gbWFzazsKLX0KIAotI2RlZmluZSBCTE9PTV9NRU1CRVIobWFzaywgY2hyLCBzdHIpIFwKLSAgICAoQkxPT00obWFzaywgY2hyKSBcCi0gICAgICYmIChQeVVuaWNvZGVfRmluZENoYXIoc3RyLCBjaHIsIDAsIFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0ciksIDEpID49IDApKQorI3VuZGVmIEJMT09NX1VQREFURQorfQogCiAvKiBDb21waWxhdGlvbiBvZiB0ZW1wbGF0ZWQgcm91dGluZXMgKi8KIApAQCAtNTg4LDYgKzYwNyw3IEBACiAjaW5jbHVkZSAic3RyaW5nbGliL3NwbGl0LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2NvdW50LmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmQuaCIKKyNpbmNsdWRlICJzdHJpbmdsaWIvcmVwbGFjZS5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kX21heF9jaGFyLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2xvY2FsZXV0aWwuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvdW5kZWYuaCIKQEAgLTU5OCw2ICs2MTgsNyBAQAogI2luY2x1ZGUgInN0cmluZ2xpYi9zcGxpdC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9jb3VudC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9maW5kLmgiCisjaW5jbHVkZSAic3RyaW5nbGliL3JlcGxhY2UuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZF9tYXhfY2hhci5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi9sb2NhbGV1dGlsLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL3VuZGVmLmgiCkBAIC02MDgsNiArNjI5LDcgQEAKICNpbmNsdWRlICJzdHJpbmdsaWIvc3BsaXQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvY291bnQuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvZmluZC5oIgorI2luY2x1ZGUgInN0cmluZ2xpYi9yZXBsYWNlLmgiCiAjaW5jbHVkZSAic3RyaW5nbGliL2ZpbmRfbWF4X2NoYXIuaCIKICNpbmNsdWRlICJzdHJpbmdsaWIvbG9jYWxldXRpbC5oIgogI2luY2x1ZGUgInN0cmluZ2xpYi91bmRlZi5oIgpAQCAtNjU0LDYgKzY3NiwyNSBAQAogICAgIH0KIH0KIAorI2lmZGVmIFB5X0RFQlVHCisvKiBGaWxsIHRoZSBkYXRhIG9mIGFuIFVuaWNvZGUgc3RyaW5nIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIHRvIGRldGVjdCBidWdzCisgICBlYXJsaWVyLgorCisgICBfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koc3RyLCAxKSBkZXRlY3RzIGludmFsaWQgY2hhcmFjdGVycywgYXQgbGVhc3QgZm9yCisgICBBU0NJSSBhbmQgVUNTLTQgc3RyaW5ncy4gVSswMEZGIGlzIGludmFsaWQgaW4gQVNDSUkgYW5kIFUrRkZGRkZGRkYgaXMgYW4KKyAgIGludmFsaWQgY2hhcmFjdGVyIGluIFVuaWNvZGUgNi4wLiAqLworc3RhdGljIHZvaWQKK3VuaWNvZGVfZmlsbF9pbnZhbGlkKFB5T2JqZWN0ICp1bmljb2RlLCBQeV9zc2l6ZV90IG9sZF9sZW5ndGgpCit7CisgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICBQeV9VQ1MxICpkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSk7CisgICAgUHlfc3NpemVfdCBsZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyAgICBpZiAobGVuZ3RoIDw9IG9sZF9sZW5ndGgpCisgICAgICAgIHJldHVybjsKKyAgICBtZW1zZXQoZGF0YSArIG9sZF9sZW5ndGggKiBraW5kLCAweGZmLCAobGVuZ3RoIC0gb2xkX2xlbmd0aCkgKiBraW5kKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgUHlPYmplY3QqCiByZXNpemVfY29tcGFjdChQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBsZW5ndGgpCiB7CkBAIC02NjIsNiArNzAzLDEwIEBACiAgICAgUHlfc3NpemVfdCBuZXdfc2l6ZTsKICAgICBpbnQgc2hhcmVfd3N0cjsKICAgICBQeU9iamVjdCAqbmV3X3VuaWNvZGU7CisjaWZkZWYgUHlfREVCVUcKKyAgICBQeV9zc2l6ZV90IG9sZF9sZW5ndGggPSBfUHlVbmljb2RlX0xFTkdUSCh1bmljb2RlKTsKKyNlbmRpZgorCiAgICAgYXNzZXJ0KHVuaWNvZGVfbW9kaWZpYWJsZSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19SRUFEWSh1bmljb2RlKSk7CiAgICAgYXNzZXJ0KFB5VW5pY29kZV9JU19DT01QQUNUKHVuaWNvZGUpKTsKQEAgLTcwNiw2ICs3NTEsOSBAQAogICAgICAgICBQeU9iamVjdF9ERUwoX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpKTsKICAgICAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpID0gTlVMTDsKICAgICB9CisjaWZkZWYgUHlfREVCVUcKKyAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgUHlVbmljb2RlX0RBVEEodW5pY29kZSksCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgMCk7CiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CkBAIC03MjQsNiArNzcyLDkgQEAKICAgICAgICAgUHlfc3NpemVfdCBjaGFyX3NpemU7CiAgICAgICAgIGludCBzaGFyZV93c3RyLCBzaGFyZV91dGY4OwogICAgICAgICB2b2lkICpkYXRhOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgIFB5X3NzaXplX3Qgb2xkX2xlbmd0aCA9IF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpOworI2VuZGlmCiAKICAgICAgICAgZGF0YSA9IF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSk7CiAgICAgICAgIGNoYXJfc2l6ZSA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOwpAQCAtNzU5LDYgKzgxMCw5IEBACiAgICAgICAgIH0KICAgICAgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7CiAgICAgICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh1bmljb2RlKSwgZGF0YSwgbGVuZ3RoLCAwKTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICB1bmljb2RlX2ZpbGxfaW52YWxpZCh1bmljb2RlLCBvbGRfbGVuZ3RoKTsKKyNlbmRpZgogICAgICAgICBpZiAoc2hhcmVfd3N0ciB8fCBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPT0gTlVMTCkgewogICAgICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAwKSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTgxMSw4ICs4NjUsOCBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGNvcHlfbGVuZ3RoID0gX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKTsKICAgICAgICAgY29weV9sZW5ndGggPSBQeV9NSU4oY29weV9sZW5ndGgsIGxlbmd0aCk7Ci0gICAgICAgIFB5X1VOSUNPREVfQ09QWShfUHlVbmljb2RlX1dTVFIodyksIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfbGVuZ3RoKTsKKyAgICAgICAgUHlfTUVNQ1BZKF9QeVVuaWNvZGVfV1NUUih3KSwgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpLAorICAgICAgICAgICAgICAgICAgY29weV9sZW5ndGggKiBzaXplb2Yod2NoYXJfdCkpOwogICAgICAgICByZXR1cm4gdzsKICAgICB9CiB9CkBAIC04MjksNyArODgzLDcgQEAKIHN0YXRpYyBQeVVuaWNvZGVPYmplY3QgKgogX1B5VW5pY29kZV9OZXcoUHlfc3NpemVfdCBsZW5ndGgpCiB7Ci0gICAgcmVnaXN0ZXIgUHlVbmljb2RlT2JqZWN0ICp1bmljb2RlOworICAgIFB5VW5pY29kZU9iamVjdCAqdW5pY29kZTsKICAgICBzaXplX3QgbmV3X3NpemU7CiAKICAgICAvKiBPcHRpbWl6YXRpb24gZm9yIGVtcHR5IHN0cmluZ3MgKi8KQEAgLTg1Miw2ICs5MDYsMTkgQEAKICAgICBpZiAodW5pY29kZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuZXdfc2l6ZSA9IHNpemVvZihQeV9VTklDT0RFKSAqICgoc2l6ZV90KWxlbmd0aCArIDEpOworCisgICAgX1B5VW5pY29kZV9XU1RSX0xFTkdUSCh1bmljb2RlKSA9IGxlbmd0aDsKKyAgICBfUHlVbmljb2RlX0hBU0godW5pY29kZSkgPSAtMTsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmludGVybmVkID0gMDsKKyAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmtpbmQgPSAwOworICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuY29tcGFjdCA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5yZWFkeSA9IDA7CisgICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5hc2NpaSA9IDA7CisgICAgX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgPSAwOworICAgIF9QeVVuaWNvZGVfVVRGOCh1bmljb2RlKSA9IE5VTEw7CisgICAgX1B5VW5pY29kZV9VVEY4X0xFTkdUSCh1bmljb2RlKSA9IDA7CisKICAgICBfUHlVbmljb2RlX1dTVFIodW5pY29kZSkgPSAoUHlfVU5JQ09ERSopIFB5T2JqZWN0X01BTExPQyhuZXdfc2l6ZSk7CiAgICAgaWYgKCFfUHlVbmljb2RlX1dTVFIodW5pY29kZSkpIHsKICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwpAQCAtODY4LDE3ICs5MzUsNyBAQAogICAgICAqLwogICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKVswXSA9IDA7CiAgICAgX1B5VW5pY29kZV9XU1RSKHVuaWNvZGUpW2xlbmd0aF0gPSAwOwotICAgIF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSkgPSBsZW5ndGg7Ci0gICAgX1B5VW5pY29kZV9IQVNIKHVuaWNvZGUpID0gLTE7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5pbnRlcm5lZCA9IDA7Ci0gICAgX1B5VW5pY29kZV9TVEFURSh1bmljb2RlKS5raW5kID0gMDsKLSAgICBfUHlVbmljb2RlX1NUQVRFKHVuaWNvZGUpLmNvbXBhY3QgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkucmVhZHkgPSAwOwotICAgIF9QeVVuaWNvZGVfU1RBVEUodW5pY29kZSkuYXNjaWkgPSAwOwotICAgIF9QeVVuaWNvZGVfREFUQV9BTlkodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpID0gMDsKLSAgICBfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPSBOVUxMOwotICAgIF9QeVVuaWNvZGVfVVRGOF9MRU5HVEgodW5pY29kZSkgPSAwOworCiAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSgoUHlPYmplY3QgKil1bmljb2RlLCAwKSk7CiAgICAgcmV0dXJuIHVuaWNvZGU7CiB9CkBAIC05NTksMTcgKzEwMTYsMTkgQEAKICAgICB9CiAgICAgZWxzZQogICAgICAgICBkYXRhID0gdW5pY29kZS0+ZGF0YS5hbnk7Ci0gICAgcHJpbnRmKCIlczogbGVuPSV6dSwgIix1bmljb2RlX2tpbmRfbmFtZShvcCksIGFzY2lpLT5sZW5ndGgpOworICAgIHByaW50ZigiJXM6IGxlbj0lIiBQWV9GT1JNQVRfU0laRV9UICJ1LCAiLAorICAgICAgICAgICB1bmljb2RlX2tpbmRfbmFtZShvcCksIGFzY2lpLT5sZW5ndGgpOwogCiAgICAgaWYgKGFzY2lpLT53c3RyID09IGRhdGEpCiAgICAgICAgIHByaW50Zigic2hhcmVkICIpOwogICAgIHByaW50Zigid3N0cj0lcCIsIGFzY2lpLT53c3RyKTsKIAogICAgIGlmICghKGFzY2lpLT5zdGF0ZS5hc2NpaSA9PSAxICYmIGFzY2lpLT5zdGF0ZS5jb21wYWN0ID09IDEpKSB7Ci0gICAgICAgIHByaW50ZigiICglenUpLCAiLCBjb21wYWN0LT53c3RyX2xlbmd0aCk7CisgICAgICAgIHByaW50ZigiICglIiBQWV9GT1JNQVRfU0laRV9UICJ1KSwgIiwgY29tcGFjdC0+d3N0cl9sZW5ndGgpOwogICAgICAgICBpZiAoIWFzY2lpLT5zdGF0ZS5jb21wYWN0ICYmIGNvbXBhY3QtPnV0ZjggPT0gdW5pY29kZS0+ZGF0YS5hbnkpCiAgICAgICAgICAgICBwcmludGYoInNoYXJlZCAiKTsKLSAgICAgICAgcHJpbnRmKCJ1dGY4PSVwICglenUpIiwgY29tcGFjdC0+dXRmOCwgY29tcGFjdC0+dXRmOF9sZW5ndGgpOworICAgICAgICBwcmludGYoInV0Zjg9JXAgKCUiIFBZX0ZPUk1BVF9TSVpFX1QgInUpIiwKKyAgICAgICAgICAgICAgIGNvbXBhY3QtPnV0ZjgsIGNvbXBhY3QtPnV0ZjhfbGVuZ3RoKTsKICAgICB9CiAgICAgcHJpbnRmKCIsIGRhdGE9JXBcbiIsIGRhdGEpOwogfQpAQCAtMTA4MywxMSArMTE0Miw3IEBACiAgICAgICAgIH0KICAgICB9CiAjaWZkZWYgUHlfREVCVUcKLSAgICAvKiBGaWxsIHRoZSBkYXRhIHdpdGggaW52YWxpZCBjaGFyYWN0ZXJzIHRvIGRldGVjdCBidWdzIGVhcmxpZXIuCi0gICAgICAgX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkgZGV0ZWN0cyBpbnZhbGlkIGNoYXJhY3RlcnMsCi0gICAgICAgYXQgbGVhc3QgZm9yIEFTQ0lJIGFuZCBVQ1MtNCBzdHJpbmdzLiBVKzAwRkYgaXMgaW52YWxpZCBpbiBBU0NJSQotICAgICAgIGFuZCBVK0ZGRkZGRkZGIGlzIGFuIGludmFsaWQgY2hhcmFjdGVyIGluIFVuaWNvZGUgNi4wLiAqLwotICAgIG1lbXNldChkYXRhLCAweGZmLCBzaXplICoga2luZCk7CisgICAgdW5pY29kZV9maWxsX2ludmFsaWQoKFB5T2JqZWN0Kil1bmljb2RlLCAwKTsKICNlbmRpZgogICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3koKFB5T2JqZWN0Kil1bmljb2RlLCAwKSk7CiAgICAgcmV0dXJuIG9iajsKQEAgLTE0ODUsNiArMTU0MCwxMCBAQAogICAgICAgICAvKiBpbiBjYXNlIHRoZSBuYXRpdmUgcmVwcmVzZW50YXRpb24gaXMgMi1ieXRlcywgd2UgbmVlZCB0byBhbGxvY2F0ZSBhCiAgICAgICAgICAgIG5ldyBub3JtYWxpemVkIDQtYnl0ZSB2ZXJzaW9uLiAqLwogICAgICAgICBsZW5ndGhfd29fc3Vycm9nYXRlcyA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgodW5pY29kZSkgLSBudW1fc3Vycm9nYXRlczsKKyAgICAgICAgaWYgKGxlbmd0aF93b19zdXJyb2dhdGVzID4gUFlfU1NJWkVfVF9NQVggLyA0IC0gMSkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQogICAgICAgICBfUHlVbmljb2RlX0RBVEFfQU5ZKHVuaWNvZGUpID0gUHlPYmplY3RfTUFMTE9DKDQgKiAobGVuZ3RoX3dvX3N1cnJvZ2F0ZXMgKyAxKSk7CiAgICAgICAgIGlmICghX1B5VW5pY29kZV9EQVRBX0FOWSh1bmljb2RlKSkgewogICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKQEAgLTE1MTcsNyArMTU3Niw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi11bmljb2RlX2RlYWxsb2MocmVnaXN0ZXIgUHlPYmplY3QgKnVuaWNvZGUpCit1bmljb2RlX2RlYWxsb2MoUHlPYmplY3QgKnVuaWNvZGUpCiB7CiAgICAgc3dpdGNoIChQeVVuaWNvZGVfQ0hFQ0tfSU5URVJORUQodW5pY29kZSkpIHsKICAgICBjYXNlIFNTVEFURV9OT1RfSU5URVJORUQ6CkBAIC0xNjQ5LDM5ICsxNzA4LDcgQEAKICAgICByZXR1cm4gdW5pY29kZV9yZXNpemUocF91bmljb2RlLCBsZW5ndGgpOwogfQogCi1zdGF0aWMgaW50Ci11bmljb2RlX3dpZGVuKFB5T2JqZWN0ICoqcF91bmljb2RlLCBQeV9zc2l6ZV90IGxlbmd0aCwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heGNoYXIpCi17Ci0gICAgUHlPYmplY3QgKnJlc3VsdDsKLSAgICBhc3NlcnQoUHlVbmljb2RlX0lTX1JFQURZKCpwX3VuaWNvZGUpKTsKLSAgICBhc3NlcnQobGVuZ3RoIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpwX3VuaWNvZGUpKTsKLSAgICBpZiAobWF4Y2hhciA8PSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoKnBfdW5pY29kZSkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJlc3VsdCA9IFB5VW5pY29kZV9OZXcoUHlVbmljb2RlX0dFVF9MRU5HVEgoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhjaGFyKTsKLSAgICBpZiAocmVzdWx0ID09IE5VTEwpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXN1bHQsIDAsICpwX3VuaWNvZGUsIDAsIGxlbmd0aCk7Ci0gICAgUHlfREVDUkVGKCpwX3VuaWNvZGUpOwotICAgICpwX3VuaWNvZGUgPSByZXN1bHQ7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXVuaWNvZGVfcHV0Y2hhcihQeU9iamVjdCAqKnBfdW5pY29kZSwgUHlfc3NpemVfdCAqcG9zLAotICAgICAgICAgICAgICAgIFB5X1VDUzQgY2gpCi17Ci0gICAgYXNzZXJ0KGNoIDw9IE1BWF9VTklDT0RFKTsKLSAgICBpZiAodW5pY29kZV93aWRlbihwX3VuaWNvZGUsICpwb3MsIGNoKSA8IDApCi0gICAgICAgIHJldHVybiAtMTsKLSAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQoKnBfdW5pY29kZSksCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9EQVRBKCpwX3VuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAoKnBvcykrKywgY2gpOwotICAgIHJldHVybiAwOwotfQotCi0vKiBDb3B5IGEgQVNDSUkgb3IgbGF0aW4xIGNoYXIqIHN0cmluZyBpbnRvIGEgUHl0aG9uIFVuaWNvZGUgc3RyaW5nLgorLyogQ29weSBhbiBBU0NJSSBvciBsYXRpbjEgY2hhciogc3RyaW5nIGludG8gYSBQeXRob24gVW5pY29kZSBzdHJpbmcuCiAKICAgIFdBUk5JTkc6IFRoZSBmdW5jdGlvbiBkb2Vzbid0IGNvcHkgdGhlIHRlcm1pbmF0aW5nIG51bGwgY2hhcmFjdGVyIGFuZAogICAgZG9lc24ndCBjaGVjayB0aGUgbWF4aW11bSBjaGFyYWN0ZXIgKG1heSB3cml0ZSBhIGxhdGluMSBjaGFyYWN0ZXIgaW4gYW4KQEAgLTE2OTcsNiArMTcyNCwxNCBAQAogICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6IHsKICAgICAgICAgYXNzZXJ0KGluZGV4ICsgbGVuIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaWNvZGUpKTsKKyNpZmRlZiBQeV9ERUJVRworICAgICAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHVuaWNvZGUpKSB7CisgICAgICAgICAgICBQeV9VQ1M0IG1heGNoYXIgPSB1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoCisgICAgICAgICAgICAgICAgKGNvbnN0IFB5X1VDUzEqKXN0ciwKKyAgICAgICAgICAgICAgICAoY29uc3QgUHlfVUNTMSopc3RyICsgbGVuKTsKKyAgICAgICAgICAgIGFzc2VydChtYXhjaGFyIDwgMTI4KTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIG1lbWNweSgoY2hhciAqKSBkYXRhICsgaW5kZXgsIHN0ciwgbGVuKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTcyNSw3ICsxNzYwLDYgQEAKICAgICB9CiB9CiAKLQogc3RhdGljIFB5T2JqZWN0KgogZ2V0X2xhdGluMV9jaGFyKHVuc2lnbmVkIGNoYXIgY2gpCiB7CkBAIC0xNzQyLDYgKzE3NzYsMzQgQEAKICAgICByZXR1cm4gdW5pY29kZTsKIH0KIAorc3RhdGljIFB5T2JqZWN0KgordW5pY29kZV9jaGFyKFB5X1VDUzQgY2gpCit7CisgICAgUHlPYmplY3QgKnVuaWNvZGU7CisKKyAgICBhc3NlcnQoY2ggPD0gTUFYX1VOSUNPREUpOworCisgICAgaWYgKGNoIDwgMjU2KQorICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKGNoKTsKKworICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KDEsIGNoKTsKKyAgICBpZiAodW5pY29kZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBzd2l0Y2ggKFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpKSB7CisgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSlbMF0gPSAoUHlfVUNTMSljaDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEodW5pY29kZSlbMF0gPSAoUHlfVUNTMiljaDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpID09IFB5VW5pY29kZV80QllURV9LSU5EKTsKKyAgICAgICAgUHlVbmljb2RlXzRCWVRFX0RBVEEodW5pY29kZSlbMF0gPSBjaDsKKyAgICB9CisgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7CisgICAgcmV0dXJuIHVuaWNvZGU7Cit9CisKIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9Gcm9tVW5pY29kZShjb25zdCBQeV9VTklDT0RFICp1LCBQeV9zc2l6ZV90IHNpemUpCiB7CkBAIC0xOTM5LDE4ICsyMDAxLDggQEAKICAgICBpZiAoc2l6ZSA9PSAwKQogICAgICAgICBfUHlfUkVUVVJOX1VOSUNPREVfRU1QVFkoKTsKICAgICBhc3NlcnQoc2l6ZSA+IDApOwotICAgIGlmIChzaXplID09IDEpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IHVbMF07Ci0gICAgICAgIGlmIChjaCA8IDI1NikKLSAgICAgICAgICAgIHJldHVybiBnZXRfbGF0aW4xX2NoYXIoKHVuc2lnbmVkIGNoYXIpY2gpOwotCi0gICAgICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoMSwgY2gpOwotICAgICAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV9LSU5EKHJlcyksIFB5VW5pY29kZV9EQVRBKHJlcyksIDAsIGNoKTsKLSAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXMsIDEpKTsKLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICB9CisgICAgaWYgKHNpemUgPT0gMSkKKyAgICAgICAgcmV0dXJuIHVuaWNvZGVfY2hhcih1WzBdKTsKIAogICAgIG1heF9jaGFyID0gdWNzMmxpYl9maW5kX21heF9jaGFyKHUsIHUgKyBzaXplKTsKICAgICByZXMgPSBQeVVuaWNvZGVfTmV3KHNpemUsIG1heF9jaGFyKTsKQEAgLTE5NzUsMTggKzIwMjcsOCBAQAogICAgIGlmIChzaXplID09IDApCiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIGFzc2VydChzaXplID4gMCk7Ci0gICAgaWYgKHNpemUgPT0gMSkgewotICAgICAgICBQeV9VQ1M0IGNoID0gdVswXTsKLSAgICAgICAgaWYgKGNoIDwgMjU2KQotICAgICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhciljaCk7Ci0KLSAgICAgICAgcmVzID0gUHlVbmljb2RlX05ldygxLCBjaCk7Ci0gICAgICAgIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlX0tJTkQocmVzKSwgUHlVbmljb2RlX0RBVEEocmVzKSwgMCwgY2gpOwotICAgICAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHJlcywgMSkpOwotICAgICAgICByZXR1cm4gcmVzOwotICAgIH0KKyAgICBpZiAoc2l6ZSA9PSAxKQorICAgICAgICByZXR1cm4gdW5pY29kZV9jaGFyKHVbMF0pOwogCiAgICAgbWF4X2NoYXIgPSB1Y3M0bGliX2ZpbmRfbWF4X2NoYXIodSwgdSArIHNpemUpOwogICAgIHJlcyA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgbWF4X2NoYXIpOwpAQCAtMjE1Myw3ICsyMTk1LDcgQEAKICAgICB9CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKLSAgICAgICAgcmVzdWx0ID0gUHlNZW1fTWFsbG9jKGxlbiAqIHNpemVvZihQeV9VQ1MyKSk7CisgICAgICAgIHJlc3VsdCA9IFB5TWVtX05ldyhQeV9VQ1MyLCBsZW4pOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBhc3NlcnQoc2tpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpOwpAQCAtMjE2NCw3ICsyMjA2LDcgQEAKICAgICAgICAgICAgIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKLSAgICAgICAgcmVzdWx0ID0gUHlNZW1fTWFsbG9jKGxlbiAqIHNpemVvZihQeV9VQ1M0KSk7CisgICAgICAgIHJlc3VsdCA9IFB5TWVtX05ldyhQeV9VQ1M0LCBsZW4pOwogICAgICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICBpZiAoc2tpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKQEAgLTIyMDYsMTEgKzIyNDgsNyBAQAogICAgIGlmIChjb3B5X251bGwpCiAgICAgICAgIHRhcmdldGxlbisrOwogICAgIGlmICghdGFyZ2V0KSB7Ci0gICAgICAgIGlmIChQWV9TU0laRV9UX01BWCAvIHNpemVvZihQeV9VQ1M0KSA8IHRhcmdldGxlbikgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHRhcmdldCA9IFB5TWVtX01hbGxvYyh0YXJnZXRsZW4gKiBzaXplb2YoUHlfVUNTNCkpOworICAgICAgICB0YXJnZXQgPSBQeU1lbV9OZXcoUHlfVUNTNCwgdGFyZ2V0bGVuKTsKICAgICAgICAgaWYgKCF0YXJnZXQpIHsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIyNjIsNyArMjMwMCw3IEBACiAjaWZkZWYgSEFWRV9XQ0hBUl9ICiAKIFB5T2JqZWN0ICoKLVB5VW5pY29kZV9Gcm9tV2lkZUNoYXIocmVnaXN0ZXIgY29uc3Qgd2NoYXJfdCAqdywgUHlfc3NpemVfdCBzaXplKQorUHlVbmljb2RlX0Zyb21XaWRlQ2hhcihjb25zdCB3Y2hhcl90ICp3LCBQeV9zc2l6ZV90IHNpemUpCiB7CiAgICAgaWYgKHcgPT0gTlVMTCkgewogICAgICAgICBpZiAoc2l6ZSA9PSAwKQpAQCAtMjI4MiwxNiArMjMyMCw5IEBACiAKIHN0YXRpYyB2b2lkCiBtYWtlZm10KGNoYXIgKmZtdCwgaW50IGxvbmdmbGFnLCBpbnQgbG9uZ2xvbmdmbGFnLCBpbnQgc2l6ZV90ZmxhZywKLSAgICAgICAgaW50IHplcm9wYWQsIGludCB3aWR0aCwgaW50IHByZWNpc2lvbiwgY2hhciBjKQorICAgICAgICBjaGFyIGMpCiB7CiAgICAgKmZtdCsrID0gJyUnOwotICAgIGlmICh3aWR0aCkgewotICAgICAgICBpZiAoemVyb3BhZCkKLSAgICAgICAgICAgICpmbXQrKyA9ICcwJzsKLSAgICAgICAgZm10ICs9IHNwcmludGYoZm10LCAiJWQiLCB3aWR0aCk7Ci0gICAgfQotICAgIGlmIChwcmVjaXNpb24pCi0gICAgICAgIGZtdCArPSBzcHJpbnRmKGZtdCwgIi4lZCIsIHByZWNpc2lvbik7CiAgICAgaWYgKGxvbmdmbGFnKQogICAgICAgICAqZm10KysgPSAnbCc7CiAgICAgZWxzZSBpZiAobG9uZ2xvbmdmbGFnKSB7CkBAIC0yMzE2LDQ2ICsyMzQ3LDEzOSBAQAogICAgICpmbXQgPSAnXDAnOwogfQogCi0vKiBoZWxwZXIgZm9yIFB5VW5pY29kZV9Gcm9tRm9ybWF0VigpICovCisvKiBtYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIHJlcXVpcmVkIGZvciBvdXRwdXQgb2YgJWxsZCBvciAlcC4KKyAgIFdlIG5lZWQgYXQgbW9zdCBjZWlsKGxvZzEwKDI1NikqU0laRU9GX0xPTkdfTE9ORykgZGlnaXRzLAorICAgcGx1cyAxIGZvciB0aGUgc2lnbi4gIDUzLzIyIGlzIGFuIHVwcGVyIGJvdW5kIGZvciBsb2cxMCgyNTYpLiAqLworI2RlZmluZSBNQVhfTE9OR19MT05HX0NIQVJTICgyICsgKFNJWkVPRl9MT05HX0xPTkcqNTMtMSkgLyAyMikKKworc3RhdGljIGludAordW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5T2JqZWN0ICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgd2lkdGgsIFB5X3NzaXplX3QgcHJlY2lzaW9uKQoreworICAgIFB5X3NzaXplX3QgbGVuZ3RoLCBmaWxsLCBhcmdsZW47CisgICAgUHlfVUNTNCBtYXhjaGFyOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBsZW5ndGggPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOworICAgIGlmICgocHJlY2lzaW9uID09IC0xIHx8IHByZWNpc2lvbiA+PSBsZW5ndGgpCisgICAgICAgICYmIHdpZHRoIDw9IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBzdHIpOworCisgICAgaWYgKHByZWNpc2lvbiAhPSAtMSkKKyAgICAgICAgbGVuZ3RoID0gUHlfTUlOKHByZWNpc2lvbiwgbGVuZ3RoKTsKKworICAgIGFyZ2xlbiA9IFB5X01BWChsZW5ndGgsIHdpZHRoKTsKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiB3cml0ZXItPm1heGNoYXIpCisgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHN0ciwgMCwgbGVuZ3RoKTsKKyAgICBlbHNlCisgICAgICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgYXJnbGVuLCBtYXhjaGFyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKHdpZHRoID4gbGVuZ3RoKSB7CisgICAgICAgIGZpbGwgPSB3aWR0aCAtIGxlbmd0aDsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgJyAnKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICB9CisKKyAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCAwLCBsZW5ndGgpOworICAgIHdyaXRlci0+cG9zICs9IGxlbmd0aDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAordW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX2NzdHIoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBjb25zdCBjaGFyICpzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHdpZHRoLCBQeV9zc2l6ZV90IHByZWNpc2lvbikKK3sKKyAgICAvKiBVVEYtOCAqLworICAgIFB5X3NzaXplX3QgbGVuZ3RoOworICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIGludCByZXM7CisKKyAgICBsZW5ndGggPSBzdHJsZW4oc3RyKTsKKyAgICBpZiAocHJlY2lzaW9uICE9IC0xKQorICAgICAgICBsZW5ndGggPSBQeV9NSU4obGVuZ3RoLCBwcmVjaXNpb24pOworICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHN0ciwgbGVuZ3RoLCAicmVwbGFjZSIsIE5VTEwpOworICAgIGlmICh1bmljb2RlID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJlcyA9IHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCB1bmljb2RlLCB3aWR0aCwgLTEpOworICAgIFB5X0RFQ1JFRih1bmljb2RlKTsKKyAgICByZXR1cm4gcmVzOworfQogCiBzdGF0aWMgY29uc3QgY2hhcioKLXBhcnNlX2Zvcm1hdF9mbGFncyhjb25zdCBjaGFyICpmLAotICAgICAgICAgICAgICAgICAgIGludCAqcF93aWR0aCwgaW50ICpwX3ByZWNpc2lvbiwKLSAgICAgICAgICAgICAgICAgICBpbnQgKnBfbG9uZ2ZsYWcsIGludCAqcF9sb25nbG9uZ2ZsYWcsIGludCAqcF9zaXplX3RmbGFnKQordW5pY29kZV9mcm9tZm9ybWF0X2FyZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmYsIHZhX2xpc3QgKnZhcmdzKQogewotICAgIGludCB3aWR0aCwgcHJlY2lzaW9uLCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnOworICAgIGNvbnN0IGNoYXIgKnA7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgaW50IHplcm9wYWQ7CisgICAgUHlfc3NpemVfdCB3aWR0aDsKKyAgICBQeV9zc2l6ZV90IHByZWNpc2lvbjsKKyAgICBpbnQgbG9uZ2ZsYWc7CisgICAgaW50IGxvbmdsb25nZmxhZzsKKyAgICBpbnQgc2l6ZV90ZmxhZzsKKyAgICBQeV9zc2l6ZV90IGZpbGw7CisKKyAgICBwID0gZjsKKyAgICBmKys7CisgICAgemVyb3BhZCA9IDA7CisgICAgaWYgKCpmID09ICcwJykgeworICAgICAgICB6ZXJvcGFkID0gMTsKKyAgICAgICAgZisrOworICAgIH0KIAogICAgIC8qIHBhcnNlIHRoZSB3aWR0aC5wcmVjaXNpb24gcGFydCwgZS5nLiAiJTIuNXMiID0+IHdpZHRoPTIsIHByZWNpc2lvbj01ICovCi0gICAgZisrOwotICAgIHdpZHRoID0gMDsKLSAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKQotICAgICAgICB3aWR0aCA9ICh3aWR0aCoxMCkgKyAqZisrIC0gJzAnOwotICAgIHByZWNpc2lvbiA9IDA7CisgICAgd2lkdGggPSAtMTsKKyAgICBpZiAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgIHdpZHRoID0gKmYgLSAnMCc7CisgICAgICAgIGYrKzsKKyAgICAgICAgd2hpbGUgKFB5X0lTRElHSVQoKHVuc2lnbmVkKSpmKSkgeworICAgICAgICAgICAgaWYgKHdpZHRoID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpKmYgLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aWR0aCA9ICh3aWR0aCAqIDEwKSArICgqZiAtICcwJyk7CisgICAgICAgICAgICBmKys7CisgICAgICAgIH0KKyAgICB9CisgICAgcHJlY2lzaW9uID0gLTE7CiAgICAgaWYgKCpmID09ICcuJykgewogICAgICAgICBmKys7Ci0gICAgICAgIHdoaWxlIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpCi0gICAgICAgICAgICBwcmVjaXNpb24gPSAocHJlY2lzaW9uKjEwKSArICpmKysgLSAnMCc7CisgICAgICAgIGlmIChQeV9JU0RJR0lUKCh1bnNpZ25lZCkqZikpIHsKKyAgICAgICAgICAgIHByZWNpc2lvbiA9ICgqZiAtICcwJyk7CisgICAgICAgICAgICBmKys7CisgICAgICAgICAgICB3aGlsZSAoUHlfSVNESUdJVCgodW5zaWduZWQpKmYpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWNpc2lvbiA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KSpmIC0gJzAnKSkgLyAxMCkgeworICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwcmVjaXNpb24gdG9vIGJpZyIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gKHByZWNpc2lvbiAqIDEwKSArICgqZiAtICcwJyk7CisgICAgICAgICAgICAgICAgZisrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGlmICgqZiA9PSAnJScpIHsKICAgICAgICAgICAgIC8qICIlLjMlcyIgPT4gZiBwb2ludHMgdG8gIjMiICovCiAgICAgICAgICAgICBmLS07CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHdpZHRoIDwgcHJlY2lzaW9uKQotICAgICAgICB3aWR0aCA9IHByZWNpc2lvbjsKICAgICBpZiAoKmYgPT0gJ1wwJykgewotICAgICAgICAvKiBib2d1cyBmb3JtYXQgIiUuMSIgPT4gZ28gYmFja3dhcmQsIGYgcG9pbnRzIHRvICIxIiAqLworICAgICAgICAvKiBib2d1cyBmb3JtYXQgIiUuMTIzIiA9PiBnbyBiYWNrd2FyZCwgZiBwb2ludHMgdG8gIjMiICovCiAgICAgICAgIGYtLTsKICAgICB9Ci0gICAgaWYgKHBfd2lkdGggIT0gTlVMTCkKLSAgICAgICAgKnBfd2lkdGggPSB3aWR0aDsKLSAgICBpZiAocF9wcmVjaXNpb24gIT0gTlVMTCkKLSAgICAgICAgKnBfcHJlY2lzaW9uID0gcHJlY2lzaW9uOwogCiAgICAgLyogSGFuZGxlICVsZCwgJWx1LCAlbGxkIGFuZCAlbGx1LiAqLwogICAgIGxvbmdmbGFnID0gMDsKICAgICBsb25nbG9uZ2ZsYWcgPSAwOwogICAgIHNpemVfdGZsYWcgPSAwOwotCiAgICAgaWYgKCpmID09ICdsJykgewogICAgICAgICBpZiAoZlsxXSA9PSAnZCcgfHwgZlsxXSA9PSAndScgfHwgZlsxXSA9PSAnaScpIHsKICAgICAgICAgICAgIGxvbmdmbGFnID0gMTsKQEAgLTIzNzQsNDk5ICsyNDk4LDI4NCBAQAogICAgICAgICBzaXplX3RmbGFnID0gMTsKICAgICAgICAgKytmOwogICAgIH0KLSAgICBpZiAocF9sb25nZmxhZyAhPSBOVUxMKQotICAgICAgICAqcF9sb25nZmxhZyA9IGxvbmdmbGFnOwotICAgIGlmIChwX2xvbmdsb25nZmxhZyAhPSBOVUxMKQotICAgICAgICAqcF9sb25nbG9uZ2ZsYWcgPSBsb25nbG9uZ2ZsYWc7Ci0gICAgaWYgKHBfc2l6ZV90ZmxhZyAhPSBOVUxMKQotICAgICAgICAqcF9zaXplX3RmbGFnID0gc2l6ZV90ZmxhZzsKKworICAgIGlmIChmWzFdID09ICdcMCcpCisgICAgICAgIHdyaXRlci0+b3ZlcmFsbG9jYXRlID0gMDsKKworICAgIHN3aXRjaCAoKmYpIHsKKyAgICBjYXNlICdjJzoKKyAgICB7CisgICAgICAgIGludCBvcmRpbmFsID0gdmFfYXJnKCp2YXJncywgaW50KTsKKyAgICAgICAgaWYgKG9yZGluYWwgPCAwIHx8IG9yZGluYWwgPiBNQVhfVU5JQ09ERSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBhcmd1bWVudCBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCBvcmRpbmFsKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnaSc6CisgICAgY2FzZSAnZCc6CisgICAgY2FzZSAndSc6CisgICAgY2FzZSAneCc6CisgICAgeworICAgICAgICAvKiB1c2VkIGJ5IHNwcmludGYgKi8KKyAgICAgICAgY2hhciBmbXRbMTBdOyAvKiBzaG91bGQgYmUgZW5vdWdoIGZvciAiJTBsbGRcMCIgKi8KKyAgICAgICAgY2hhciBidWZmZXJbTUFYX0xPTkdfTE9OR19DSEFSU107CisgICAgICAgIFB5X3NzaXplX3QgYXJnbGVuOworCisgICAgICAgIGlmICgqZiA9PSAndScpIHsKKyAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCAqZik7CisKKyAgICAgICAgICAgIGlmIChsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgdW5zaWduZWQgbG9uZykpOworI2lmZGVmIEhBVkVfTE9OR19MT05HCisgICAgICAgICAgICBlbHNlIGlmIChsb25nbG9uZ2ZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIHVuc2lnbmVkIFBZX0xPTkdfTE9ORykpOworI2VuZGlmCisgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBzaXplX3QpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgdW5zaWduZWQgaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKmYgPT0gJ3gnKSB7CisgICAgICAgICAgICBtYWtlZm10KGZtdCwgMCwgMCwgMCwgJ3gnKTsKKyAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsIHZhX2FyZygqdmFyZ3MsIGludCkpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWFrZWZtdChmbXQsIGxvbmdmbGFnLCBsb25nbG9uZ2ZsYWcsIHNpemVfdGZsYWcsICpmKTsKKworICAgICAgICAgICAgaWYgKGxvbmdmbGFnKQorICAgICAgICAgICAgICAgIGxlbiA9IHNwcmludGYoYnVmZmVyLCBmbXQsCisgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoKnZhcmdzLCBsb25nKSk7CisjaWZkZWYgSEFWRV9MT05HX0xPTkcKKyAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgUFlfTE9OR19MT05HKSk7CisjZW5kaWYKKyAgICAgICAgICAgIGVsc2UgaWYgKHNpemVfdGZsYWcpCisgICAgICAgICAgICAgICAgbGVuID0gc3ByaW50ZihidWZmZXIsIGZtdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZygqdmFyZ3MsIFB5X3NzaXplX3QpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgZm10LAorICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKCp2YXJncywgaW50KSk7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KGxlbiA+PSAwKTsKKworICAgICAgICBpZiAocHJlY2lzaW9uIDwgbGVuKQorICAgICAgICAgICAgcHJlY2lzaW9uID0gbGVuOworCisgICAgICAgIGFyZ2xlbiA9IFB5X01BWChwcmVjaXNpb24sIHdpZHRoKTsKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGFyZ2xlbiwgMTI3KSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGlmICh3aWR0aCA+IHByZWNpc2lvbikgeworICAgICAgICAgICAgUHlfVUNTNCBmaWxsY2hhcjsKKyAgICAgICAgICAgIGZpbGwgPSB3aWR0aCAtIHByZWNpc2lvbjsKKyAgICAgICAgICAgIGZpbGxjaGFyID0gemVyb3BhZD8nMCc6JyAnOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgZmlsbGNoYXIpID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gZmlsbDsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJlY2lzaW9uID4gbGVuKSB7CisgICAgICAgICAgICBmaWxsID0gcHJlY2lzaW9uIC0gbGVuOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaWxsKHdyaXRlci0+YnVmZmVyLCB3cml0ZXItPnBvcywgZmlsbCwgJzAnKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IGZpbGw7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKHdyaXRlciwgYnVmZmVyLCBsZW4pIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdwJzoKKyAgICB7CisgICAgICAgIGNoYXIgbnVtYmVyW01BWF9MT05HX0xPTkdfQ0hBUlNdOworCisgICAgICAgIGxlbiA9IHNwcmludGYobnVtYmVyLCAiJXAiLCB2YV9hcmcoKnZhcmdzLCB2b2lkKikpOworICAgICAgICBhc3NlcnQobGVuID49IDApOworCisgICAgICAgIC8qICVwIGlzIGlsbC1kZWZpbmVkOiAgZW5zdXJlIGxlYWRpbmcgMHguICovCisgICAgICAgIGlmIChudW1iZXJbMV0gPT0gJ1gnKQorICAgICAgICAgICAgbnVtYmVyWzFdID0gJ3gnOworICAgICAgICBlbHNlIGlmIChudW1iZXJbMV0gIT0gJ3gnKSB7CisgICAgICAgICAgICBtZW1tb3ZlKG51bWJlciArIDIsIG51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgc3RybGVuKG51bWJlcikgKyAxKTsKKyAgICAgICAgICAgIG51bWJlclswXSA9ICcwJzsKKyAgICAgICAgICAgIG51bWJlclsxXSA9ICd4JzsKKyAgICAgICAgICAgIGxlbiArPSAyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVBU0NJSVN0cmluZyh3cml0ZXIsIG51bWJlciwgbGVuKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAncyc6CisgICAgeworICAgICAgICAvKiBVVEYtOCAqLworICAgICAgICBjb25zdCBjaGFyICpzID0gdmFfYXJnKCp2YXJncywgY29uc3QgY2hhciopOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX2NzdHIod3JpdGVyLCBzLCB3aWR0aCwgcHJlY2lzaW9uKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnVSc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIGFzc2VydChvYmogJiYgX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKKworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIG9iaiwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnVic6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IHZhX2FyZygqdmFyZ3MsIGNvbnN0IGNoYXIgKik7CisgICAgICAgIGlmIChvYmopIHsKKyAgICAgICAgICAgIGFzc2VydChfUHlVbmljb2RlX0NIRUNLKG9iaikpOworICAgICAgICAgICAgaWYgKHVuaWNvZGVfZnJvbWZvcm1hdF93cml0ZV9zdHIod3JpdGVyLCBvYmosIHdpZHRoLCBwcmVjaXNpb24pID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKKyAgICAgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfY3N0cih3cml0ZXIsIHN0ciwgd2lkdGgsIHByZWNpc2lvbikgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJ1MnOgorICAgIHsKKyAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZygqdmFyZ3MsIFB5T2JqZWN0ICopOworICAgICAgICBQeU9iamVjdCAqc3RyOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgc3RyID0gUHlPYmplY3RfU3RyKG9iaik7CisgICAgICAgIGlmICghc3RyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgc3RyLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnUic6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICpyZXByOworICAgICAgICBhc3NlcnQob2JqKTsKKyAgICAgICAgcmVwciA9IFB5T2JqZWN0X1JlcHIob2JqKTsKKyAgICAgICAgaWYgKCFyZXByKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICh1bmljb2RlX2Zyb21mb3JtYXRfd3JpdGVfc3RyKHdyaXRlciwgcmVwciwgd2lkdGgsIHByZWNpc2lvbikgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSAnQSc6CisgICAgeworICAgICAgICBQeU9iamVjdCAqb2JqID0gdmFfYXJnKCp2YXJncywgUHlPYmplY3QgKik7CisgICAgICAgIFB5T2JqZWN0ICphc2NpaTsKKyAgICAgICAgYXNzZXJ0KG9iaik7CisgICAgICAgIGFzY2lpID0gUHlPYmplY3RfQVNDSUkob2JqKTsKKyAgICAgICAgaWYgKCFhc2NpaSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAodW5pY29kZV9mcm9tZm9ybWF0X3dyaXRlX3N0cih3cml0ZXIsIGFzY2lpLCB3aWR0aCwgcHJlY2lzaW9uKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGFzY2lpKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihhc2NpaSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGNhc2UgJyUnOgorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCAnJScpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIGlmIHdlIHN0dW1ibGUgdXBvbiBhbiB1bmtub3duIGZvcm1hdHRpbmcgY29kZSwgY29weSB0aGUgcmVzdAorICAgICAgICAgICBvZiB0aGUgZm9ybWF0IHN0cmluZyB0byB0aGUgb3V0cHV0IHN0cmluZy4gKHdlIGNhbm5vdCBqdXN0CisgICAgICAgICAgIHNraXAgdGhlIGNvZGUsIHNpbmNlIHRoZXJlJ3Mgbm8gd2F5IHRvIGtub3cgd2hhdCdzIGluIHRoZQorICAgICAgICAgICBhcmd1bWVudCBsaXN0KSAqLworICAgICAgICBsZW4gPSBzdHJsZW4ocCk7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlTGF0aW4xU3RyaW5nKHdyaXRlciwgcCwgbGVuKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBmID0gcCtsZW47CisgICAgICAgIHJldHVybiBmOworICAgIH0KKworICAgIGYrKzsKICAgICByZXR1cm4gZjsKIH0KIAotLyogbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyByZXF1aXJlZCBmb3Igb3V0cHV0IG9mICVsZC4gIDIxIGNoYXJhY3RlcnMKLSAgIGFsbG93cyBmb3IgNjQtYml0IGludGVnZXJzIChpbiBkZWNpbWFsKSBhbmQgYW4gb3B0aW9uYWwgc2lnbi4gKi8KLSNkZWZpbmUgTUFYX0xPTkdfQ0hBUlMgMjEKLS8qIG1heGltdW0gbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgZm9yIG91dHB1dCBvZiAlbGxkLgotICAgV2UgbmVlZCBhdCBtb3N0IGNlaWwobG9nMTAoMjU2KSpTSVpFT0ZfTE9OR19MT05HKSBkaWdpdHMsCi0gICBwbHVzIDEgZm9yIHRoZSBzaWduLiAgNTMvMjIgaXMgYW4gdXBwZXIgYm91bmQgZm9yIGxvZzEwKDI1NikuICovCi0jZGVmaW5lIE1BWF9MT05HX0xPTkdfQ0hBUlMgKDIgKyAoU0laRU9GX0xPTkdfTE9ORyo1My0xKSAvIDIyKQotCiBQeU9iamVjdCAqCiBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhcmdzKQogewotICAgIHZhX2xpc3QgY291bnQ7Ci0gICAgUHlfc3NpemVfdCBjYWxsY291bnQgPSAwOwotICAgIFB5T2JqZWN0ICoqY2FsbHJlc3VsdHMgPSBOVUxMOwotICAgIFB5T2JqZWN0ICoqY2FsbHJlc3VsdCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBuID0gMDsKLSAgICBpbnQgd2lkdGggPSAwOwotICAgIGludCBwcmVjaXNpb24gPSAwOwotICAgIGludCB6ZXJvcGFkOwotICAgIGNvbnN0IGNoYXIqIGY7Ci0gICAgUHlPYmplY3QgKnN0cmluZzsKLSAgICAvKiB1c2VkIGJ5IHNwcmludGYgKi8KLSAgICBjaGFyIGZtdFs2MV07IC8qIHNob3VsZCBiZSBlbm91Z2ggZm9yICUwd2lkdGgucHJlY2lzaW9ubGxkICovCi0gICAgUHlfVUNTNCBtYXhjaGFyID0gMTI3OyAvKiByZXN1bHQgaXMgQVNDSUkgYnkgZGVmYXVsdCAqLwotICAgIFB5X1VDUzQgYXJnbWF4Y2hhcjsKLSAgICBQeV9zc2l6ZV90IG51bWJlcnNpemUgPSAwOwotICAgIGNoYXIgKm51bWJlcnJlc3VsdHMgPSBOVUxMOwotICAgIGNoYXIgKm51bWJlcnJlc3VsdCA9IE5VTEw7Ci0gICAgUHlfc3NpemVfdCBpOwotICAgIGludCBraW5kOwotICAgIHZvaWQgKmRhdGE7CisgICAgdmFfbGlzdCB2YXJnczI7CisgICAgY29uc3QgY2hhciAqZjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAotICAgIFB5X1ZBX0NPUFkoY291bnQsIHZhcmdzKTsKLSAgICAvKiBzdGVwIDE6IGNvdW50IHRoZSBudW1iZXIgb2YgJVMvJVIvJUEvJXMgZm9ybWF0IHNwZWNpZmljYXRpb25zCi0gICAgICogKHdlIGNhbGwgUHlPYmplY3RfU3RyKCkvUHlPYmplY3RfUmVwcigpL1B5T2JqZWN0X0FTQ0lJKCkvCi0gICAgICogUHlVbmljb2RlX0RlY29kZVVURjgoKSBmb3IgdGhlc2Ugb2JqZWN0cyBvbmNlIGR1cmluZyBzdGVwIDMgYW5kIHB1dCB0aGUKLSAgICAgKiByZXN1bHQgaW4gYW4gYXJyYXkpCi0gICAgICogYWxzbyBlc3RpbWF0ZSBhIHVwcGVyIGJvdW5kIGZvciBhbGwgdGhlIG51bWJlciBmb3JtYXRzIGluIHRoZSBzdHJpbmcsCi0gICAgICogbnVtYmVycyB3aWxsIGJlIGZvcm1hdHRlZCBpbiBzdGVwIDMgYW5kIGJlIGtlcHQgaW4gYSAnXDAnLXNlcGFyYXRlZAotICAgICAqIGJ1ZmZlciBiZWZvcmUgcHV0dGluZyBldmVyeXRoaW5nIHRvZ2V0aGVyLiAqLwotICAgIGZvciAoZiA9IGZvcm1hdDsgKmY7IGYrKykgeworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHN0cmxlbihmb3JtYXQpICsgMTAwOworICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAxOworCisgICAgLyogdmFfbGlzdCBtYXkgYmUgYW4gYXJyYXkgKG9mIDEgaXRlbSkgb24gc29tZSBwbGF0Zm9ybXMgKGV4OiBBTUQ2NCkuCisgICAgICAgQ29weSBpdCB0byBiZSBhYmxlIHRvIHBhc3MgYSByZWZlcmVuY2UgdG8gYSBzdWJmdW5jdGlvbi4gKi8KKyAgICBQeV9WQV9DT1BZKHZhcmdzMiwgdmFyZ3MpOworCisgICAgZm9yIChmID0gZm9ybWF0OyAqZjsgKSB7CiAgICAgICAgIGlmICgqZiA9PSAnJScpIHsKLSAgICAgICAgICAgIGludCBsb25nbG9uZ2ZsYWc7Ci0gICAgICAgICAgICAvKiBza2lwIHdpZHRoIG9yIHdpZHRoLnByZWNpc2lvbiAoZWcuICIxLjIiIG9mICIlMS4yZiIpICovCi0gICAgICAgICAgICBmID0gcGFyc2VfZm9ybWF0X2ZsYWdzKGYsICZ3aWR0aCwgTlVMTCwgTlVMTCwgJmxvbmdsb25nZmxhZywgTlVMTCk7Ci0gICAgICAgICAgICBpZiAoKmYgPT0gJ3MnIHx8ICpmPT0nUycgfHwgKmY9PSdSJyB8fCAqZj09J0EnIHx8ICpmPT0nVicpCi0gICAgICAgICAgICAgICAgKytjYWxsY291bnQ7Ci0KLSAgICAgICAgICAgIGVsc2UgaWYgKCpmID09ICdkJyB8fCAqZj09J3UnIHx8ICpmPT0naScgfHwgKmY9PSd4JyB8fCAqZj09J3AnKSB7Ci0jaWZkZWYgSEFWRV9MT05HX0xPTkcKLSAgICAgICAgICAgICAgICBpZiAobG9uZ2xvbmdmbGFnKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IE1BWF9MT05HX0xPTkdfQ0hBUlMpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1BWF9MT05HX0xPTkdfQ0hBUlM7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAvKiBNQVhfTE9OR19DSEFSUyBpcyBlbm91Z2ggdG8gaG9sZCBhIDY0LWJpdCBpbnRlZ2VyLAotICAgICAgICAgICAgICAgICAgICAgICBpbmNsdWRpbmcgc2lnbi4gIERlY2ltYWwgdGFrZXMgdGhlIG1vc3Qgc3BhY2UuICBUaGlzCi0gICAgICAgICAgICAgICAgICAgICAgIGlzbid0IGVub3VnaCBmb3Igb2N0YWwuICBJZiBhIHdpZHRoIGlzIHNwZWNpZmllZCB3ZQotICAgICAgICAgICAgICAgICAgICAgICBuZWVkIG1vcmUgKHdoaWNoIHdlIGFsbG9jYXRlIGxhdGVyKS4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoIDwgTUFYX0xPTkdfQ0hBUlMpCi0gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCA9IE1BWF9MT05HX0NIQVJTOwotCi0gICAgICAgICAgICAgICAgLyogYWNjb3VudCBmb3IgdGhlIHNpemUgKyAnXDAnIHRvIHNlcGFyYXRlIG51bWJlcnMKLSAgICAgICAgICAgICAgICAgICBpbnNpZGUgb2YgdGhlIG51bWJlcnJlc3VsdHMgYnVmZmVyICovCi0gICAgICAgICAgICAgICAgbnVtYmVyc2l6ZSArPSAod2lkdGggKyAxKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgodW5zaWduZWQgY2hhcikqZiA+IDEyNykgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgIlB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIGV4cGVjdHMgYW4gQVNDSUktZW5jb2RlZCBmb3JtYXQgIgotICAgICAgICAgICAgICAgICJzdHJpbmcsIGdvdCBhIG5vbi1BU0NJSSBieXRlOiAweCUwMngiLAotICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyKSpmKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIC8qIHN0ZXAgMjogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcmVzdWx0cyBvZgotICAgICAqIFB5T2JqZWN0X1N0cigpL1B5T2JqZWN0X1JlcHIoKS9QeVVuaWNvZGVfRGVjb2RlVVRGOCgpIGNhbGxzICovCi0gICAgaWYgKGNhbGxjb3VudCkgewotICAgICAgICBjYWxscmVzdWx0cyA9IFB5T2JqZWN0X01hbGxvYyhzaXplb2YoUHlPYmplY3QgKikgKiBjYWxsY291bnQpOwotICAgICAgICBpZiAoIWNhbGxyZXN1bHRzKSB7Ci0gICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgY2FsbHJlc3VsdCA9IGNhbGxyZXN1bHRzOwotICAgIH0KLSAgICAvKiBzdGVwIDIuNTogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcmVzdWx0cyBvZiBmb3JtYXRpbmcgbnVtYmVycyAqLwotICAgIGlmIChudW1iZXJzaXplKSB7Ci0gICAgICAgIG51bWJlcnJlc3VsdHMgPSBQeU9iamVjdF9NYWxsb2MobnVtYmVyc2l6ZSk7Ci0gICAgICAgIGlmICghbnVtYmVycmVzdWx0cykgewotICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgfQotICAgICAgICBudW1iZXJyZXN1bHQgPSBudW1iZXJyZXN1bHRzOwotICAgIH0KLQotICAgIC8qIHN0ZXAgMzogZm9ybWF0IG51bWJlcnMgYW5kIGZpZ3VyZSBvdXQgaG93IGxhcmdlIGEgYnVmZmVyIHdlIG5lZWQgKi8KLSAgICBmb3IgKGYgPSBmb3JtYXQ7ICpmOyBmKyspIHsKLSAgICAgICAgaWYgKCpmID09ICclJykgewotICAgICAgICAgICAgY29uc3QgY2hhciogcDsKLSAgICAgICAgICAgIGludCBsb25nZmxhZzsKLSAgICAgICAgICAgIGludCBsb25nbG9uZ2ZsYWc7Ci0gICAgICAgICAgICBpbnQgc2l6ZV90ZmxhZzsKLSAgICAgICAgICAgIGludCBudW1wcmludGVkOwotCi0gICAgICAgICAgICBwID0gZjsKLSAgICAgICAgICAgIHplcm9wYWQgPSAoZlsxXSA9PSAnMCcpOwotICAgICAgICAgICAgZiA9IHBhcnNlX2Zvcm1hdF9mbGFncyhmLCAmd2lkdGgsICZwcmVjaXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb25nZmxhZywgJmxvbmdsb25nZmxhZywgJnNpemVfdGZsYWcpOwotICAgICAgICAgICAgc3dpdGNoICgqZikgewotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaW50IG9yZGluYWwgPSB2YV9hcmcoY291bnQsIGludCk7Ci0gICAgICAgICAgICAgICAgaWYgKG9yZGluYWwgPCAwIHx8IG9yZGluYWwgPiBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfT3ZlcmZsb3dFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlYyBhcmcgbm90IGluIHJhbmdlKDB4MTEwMDAwKSIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgKFB5X1VDUzQpb3JkaW5hbCk7Ci0gICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgICAgbisrOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgICBtYWtlZm10KGZtdCwgbG9uZ2ZsYWcsIGxvbmdsb25nZmxhZywgc2l6ZV90ZmxhZywgemVyb3BhZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLCBwcmVjaXNpb24sICpmKTsKLSAgICAgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIGxvbmcpKTsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgUFlfTE9OR19MT05HKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBQeV9zc2l6ZV90KSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBpbnQpKTsKLSAgICAgICAgICAgICAgICBuICs9IG51bXByaW50ZWQ7Ci0gICAgICAgICAgICAgICAgLyogYWR2YW5jZSBieSArMSB0byBza2lwIG92ZXIgdGhlICdcMCcgKi8KLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCBsb25nZmxhZywgbG9uZ2xvbmdmbGFnLCBzaXplX3RmbGFnLCB6ZXJvcGFkLAotICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIHByZWNpc2lvbiwgJ3UnKTsKLSAgICAgICAgICAgICAgICBpZiAobG9uZ2ZsYWcpCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHVuc2lnbmVkIGxvbmcpKTsKLSNpZmRlZiBIQVZFX0xPTkdfTE9ORwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxvbmdsb25nZmxhZykKLSAgICAgICAgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IHNwcmludGYobnVtYmVycmVzdWx0LCBmbXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhX2FyZyhjb3VudCwgdW5zaWduZWQgUFlfTE9OR19MT05HKSk7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChzaXplX3RmbGFnKQotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkID0gc3ByaW50ZihudW1iZXJyZXN1bHQsIGZtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfYXJnKGNvdW50LCBzaXplX3QpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YV9hcmcoY291bnQsIHVuc2lnbmVkIGludCkpOwotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICAgIG1ha2VmbXQoZm10LCAwLCAwLCAwLCB6ZXJvcGFkLCB3aWR0aCwgcHJlY2lzaW9uLCAneCcpOwotICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgZm10LCB2YV9hcmcoY291bnQsIGludCkpOwotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAgICAgIG51bXByaW50ZWQgPSBzcHJpbnRmKG51bWJlcnJlc3VsdCwgIiVwIiwgdmFfYXJnKGNvdW50LCB2b2lkKikpOwotICAgICAgICAgICAgICAgIC8qICVwIGlzIGlsbC1kZWZpbmVkOiAgZW5zdXJlIGxlYWRpbmcgMHguICovCi0gICAgICAgICAgICAgICAgaWYgKG51bWJlcnJlc3VsdFsxXSA9PSAnWCcpCi0gICAgICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdFsxXSA9ICd4JzsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChudW1iZXJyZXN1bHRbMV0gIT0gJ3gnKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1lbW1vdmUobnVtYmVycmVzdWx0ICsgMiwgbnVtYmVycmVzdWx0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihudW1iZXJyZXN1bHQpICsgMSk7Ci0gICAgICAgICAgICAgICAgICAgIG51bWJlcnJlc3VsdFswXSA9ICcwJzsKLSAgICAgICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0WzFdID0gJ3gnOwotICAgICAgICAgICAgICAgICAgICBudW1wcmludGVkICs9IDI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG4gKz0gbnVtcHJpbnRlZDsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQgKz0gKG51bXByaW50ZWQgKyAxKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAxKSA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKihudW1iZXJyZXN1bHQgLSAyKSAhPSAnXDAnKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtcHJpbnRlZCA+PSAwKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIFVURi04ICovCi0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcyA9IHZhX2FyZyhjb3VudCwgY29uc3QgY2hhciopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHIgPSBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsKHMsIHN0cmxlbihzKSwgInJlcGxhY2UiLCBOVUxMKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cikKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIC8qIHNpbmNlIFB5VW5pY29kZV9EZWNvZGVVVEY4IHJldHVybnMgYWxyZWFkeSBmbGV4aWJsZQotICAgICAgICAgICAgICAgICAgIHVuaWNvZGUgb2JqZWN0cywgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxsIHJlYWR5IG9uIHRoZW0gKi8KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHN0ciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gc3RyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaiAmJiBfUHlVbmljb2RlX0NIRUNLKG9iaikpOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob2JqKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGFyZ21heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUob2JqKTsKLSAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgIG4gKz0gUHlVbmljb2RlX0dFVF9MRU5HVEgob2JqKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ1YnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciA9IHZhX2FyZyhjb3VudCwgY29uc3QgY2hhciAqKTsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqc3RyX29iajsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqIHx8IHN0cik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCFvYmogfHwgX1B5VW5pY29kZV9DSEVDSyhvYmopKTsKLSAgICAgICAgICAgICAgICBpZiAob2JqKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkob2JqKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShvYmopOwotICAgICAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGFyZ21heGNoYXIpOwotICAgICAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgICAgICpjYWxscmVzdWx0KysgPSBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3RyX29iaiA9IFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwoc3RyLCBzdHJsZW4oc3RyKSwgInJlcGxhY2UiLCBOVUxMKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJfb2JqKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cl9vYmopID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyX29iaik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHJfb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJfb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgKmNhbGxyZXN1bHQrKyA9IHN0cl9vYmo7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnUyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnN0cjsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqKTsKLSAgICAgICAgICAgICAgICBzdHIgPSBQeU9iamVjdF9TdHIob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoIXN0cikKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cik7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cik7Ci0gICAgICAgICAgICAgICAgLyogUmVtZW1iZXIgdGhlIHN0ciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gc3RyOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnUic6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyhjb3VudCwgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnJlcHI7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KG9iaik7Ci0gICAgICAgICAgICAgICAgcmVwciA9IFB5T2JqZWN0X1JlcHIob2JqKTsKLSAgICAgICAgICAgICAgICBpZiAoIXJlcHIpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHJlcHIpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXByKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhcmdtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHJlcHIpOwotICAgICAgICAgICAgICAgIG1heGNoYXIgPSBQeV9NQVgobWF4Y2hhciwgYXJnbWF4Y2hhcik7Ci0gICAgICAgICAgICAgICAgbiArPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXByKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgcmVwciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gcmVwcjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvYmogPSB2YV9hcmcoY291bnQsIFB5T2JqZWN0ICopOwotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphc2NpaTsKLSAgICAgICAgICAgICAgICBhc3NlcnQob2JqKTsKLSAgICAgICAgICAgICAgICBhc2NpaSA9IFB5T2JqZWN0X0FTQ0lJKG9iaik7Ci0gICAgICAgICAgICAgICAgaWYgKCFhc2NpaSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoYXNjaWkpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhc2NpaSk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShhc2NpaSk7Ci0gICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBhcmdtYXhjaGFyKTsKLSAgICAgICAgICAgICAgICBuICs9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGFzY2lpKTsKLSAgICAgICAgICAgICAgICAvKiBSZW1lbWJlciB0aGUgcmVwciBhbmQgc3dpdGNoIHRvIHRoZSBuZXh0IHNsb3QgKi8KLSAgICAgICAgICAgICAgICAqY2FsbHJlc3VsdCsrID0gYXNjaWk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIC8qIGlmIHdlIHN0dW1ibGUgdXBvbiBhbiB1bmtub3duCi0gICAgICAgICAgICAgICAgICAgZm9ybWF0dGluZyBjb2RlLCBjb3B5IHRoZSByZXN0IG9mCi0gICAgICAgICAgICAgICAgICAgdGhlIGZvcm1hdCBzdHJpbmcgdG8gdGhlIG91dHB1dAotICAgICAgICAgICAgICAgICAgIHN0cmluZy4gKHdlIGNhbm5vdCBqdXN0IHNraXAgdGhlCi0gICAgICAgICAgICAgICAgICAgY29kZSwgc2luY2UgdGhlcmUncyBubyB3YXkgdG8ga25vdwotICAgICAgICAgICAgICAgICAgIHdoYXQncyBpbiB0aGUgYXJndW1lbnQgbGlzdCkgKi8KLSAgICAgICAgICAgICAgICBuICs9IHN0cmxlbihwKTsKLSAgICAgICAgICAgICAgICBnb3RvIGV4cGFuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBuKys7Ci0gICAgfQotICBleHBhbmQ6Ci0gICAgLyogc3RlcCA0OiBmaWxsIHRoZSBidWZmZXIgKi8KLSAgICAvKiBTaW5jZSB3ZSd2ZSBhbmFseXplZCBob3cgbXVjaCBzcGFjZSB3ZSBuZWVkLAotICAgICAgIHdlIGRvbid0IGhhdmUgdG8gcmVzaXplIHRoZSBzdHJpbmcuCi0gICAgICAgVGhlcmUgY2FuIGJlIG5vIGVycm9ycyBiZXlvbmQgdGhpcyBwb2ludC4gKi8KLSAgICBzdHJpbmcgPSBQeVVuaWNvZGVfTmV3KG4sIG1heGNoYXIpOwotICAgIGlmICghc3RyaW5nKQotICAgICAgICBnb3RvIGZhaWw7Ci0gICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHN0cmluZyk7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHN0cmluZyk7Ci0gICAgY2FsbHJlc3VsdCA9IGNhbGxyZXN1bHRzOwotICAgIG51bWJlcnJlc3VsdCA9IG51bWJlcnJlc3VsdHM7Ci0KLSAgICBmb3IgKGkgPSAwLCBmID0gZm9ybWF0OyAqZjsgZisrKSB7Ci0gICAgICAgIGlmICgqZiA9PSAnJScpIHsKLSAgICAgICAgICAgIGNvbnN0IGNoYXIqIHA7Ci0KLSAgICAgICAgICAgIHAgPSBmOwotICAgICAgICAgICAgZiA9IHBhcnNlX2Zvcm1hdF9mbGFncyhmLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKLSAgICAgICAgICAgIC8qIGNoZWNraW5nIGZvciA9PSBiZWNhdXNlIHRoZSBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIGEgZW1wdHkKLSAgICAgICAgICAgICAgIHN0cmluZywgd2hpY2ggY2F1c2VzIGkgdG8gcG9pbnQgdG8gZW5kLCB0aGUgYXNzZXJ0IGF0IHRoZSBlbmQgb2YKLSAgICAgICAgICAgICAgIHRoZSBsb29wICovCi0gICAgICAgICAgICBhc3NlcnQoaSA8PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKLQotICAgICAgICAgICAgc3dpdGNoICgqZikgewotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgY29uc3QgaW50IG9yZGluYWwgPSB2YV9hcmcodmFyZ3MsIGludCk7Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIGkrKywgb3JkaW5hbCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgIGNhc2UgJ3AnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwotICAgICAgICAgICAgICAgIC8qIHVudXNlZCwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICBpZiAoKmYgPT0gJ3AnKQotICAgICAgICAgICAgICAgICAgICAodm9pZCkgdmFfYXJnKHZhcmdzLCB2b2lkICopOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgaW50KTsKLSAgICAgICAgICAgICAgICAvKiBleHRyYWN0IHRoZSByZXN1bHQgZnJvbSBudW1iZXJyZXN1bHRzIGFuZCBhcHBlbmQuICovCi0gICAgICAgICAgICAgICAgbGVuID0gc3RybGVuKG51bWJlcnJlc3VsdCk7Ci0gICAgICAgICAgICAgICAgdW5pY29kZV93cml0ZV9jc3RyKHN0cmluZywgaSwgbnVtYmVycmVzdWx0LCBsZW4pOwotICAgICAgICAgICAgICAgIC8qIHNraXAgb3ZlciB0aGUgc2VwYXJhdGluZyAnXDAnICovCi0gICAgICAgICAgICAgICAgaSArPSBsZW47Ci0gICAgICAgICAgICAgICAgbnVtYmVycmVzdWx0ICs9IGxlbjsKLSAgICAgICAgICAgICAgICBhc3NlcnQoKm51bWJlcnJlc3VsdCA9PSAnXDAnKTsKLSAgICAgICAgICAgICAgICBudW1iZXJyZXN1bHQrKzsKLSAgICAgICAgICAgICAgICBhc3NlcnQobnVtYmVycmVzdWx0IDw9IG51bWJlcnJlc3VsdHMgKyBudW1iZXJzaXplKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8qIHVudXNlZCwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSByZXN1bHQgKi8KLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgY2hhciAqKTsKLSAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORCgqY2FsbHJlc3VsdCkgPD0gUHlVbmljb2RlX0tJTkQoc3RyaW5nKSk7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCAqY2FsbHJlc3VsdCwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGUgdW5pY29kZSgpL3JlcHIoKSA9PiBmb3JnZXQgaXQgKi8KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIC8qIHN3aXRjaCB0byBuZXh0IHVuaWNvZGUoKS9yZXByKCkgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgKytjYWxscmVzdWx0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnVSc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyh2YXJncywgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzaXplOwotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChvYmopIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgIHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChvYmopOwotICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHN0cmluZywgaSwgb2JqLCAwLCBzaXplKTsKLSAgICAgICAgICAgICAgICBpICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjYXNlICdWJzoKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemU7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKm9iaiA9IHZhX2FyZyh2YXJncywgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgdmFfYXJnKHZhcmdzLCBjb25zdCBjaGFyICopOwotICAgICAgICAgICAgICAgIGlmIChvYmopIHsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKG9iaik7Ci0gICAgICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChvYmopIDw9IFB5VW5pY29kZV9LSU5EKHN0cmluZykpOwotICAgICAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksIG9iaiwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoKmNhbGxyZXN1bHQpIDw9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoc3RyaW5nLCBpLCAqY2FsbHJlc3VsdCwgMCwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytjYWxscmVzdWx0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnUyc6Ci0gICAgICAgICAgICBjYXNlICdSJzoKLSAgICAgICAgICAgIGNhc2UgJ0EnOgotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qgc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpjYWxscmVzdWx0KTsKLSAgICAgICAgICAgICAgICAvKiB1bnVzZWQsIHNpbmNlIHdlIGFscmVhZHkgaGF2ZSB0aGUgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgKHZvaWQpIHZhX2FyZyh2YXJncywgUHlPYmplY3QgKik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKCpjYWxscmVzdWx0KSA8PSBQeVVuaWNvZGVfS0lORChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhzdHJpbmcsIGksICpjYWxscmVzdWx0LCAwLCAgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgaSArPSBzaXplOwotICAgICAgICAgICAgICAgIC8qIFdlJ3JlIGRvbmUgd2l0aCB0aGUgdW5pY29kZSgpL3JlcHIoKSA9PiBmb3JnZXQgaXQgKi8KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoKmNhbGxyZXN1bHQpOwotICAgICAgICAgICAgICAgIC8qIHN3aXRjaCB0byBuZXh0IHVuaWNvZGUoKS9yZXByKCkgcmVzdWx0ICovCi0gICAgICAgICAgICAgICAgKytjYWxscmVzdWx0OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2FzZSAnJSc6Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIGkrKywgJyUnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBsZW4gPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICAgICAgdW5pY29kZV93cml0ZV9jc3RyKHN0cmluZywgaSwgcCwgbGVuKTsKLSAgICAgICAgICAgICAgICBpICs9IGxlbjsKLSAgICAgICAgICAgICAgICBhc3NlcnQoaSA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHJpbmcpKTsKLSAgICAgICAgICAgICAgICBnb3RvIGVuZDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGYgPSB1bmljb2RlX2Zyb21mb3JtYXRfYXJnKCZ3cml0ZXIsIGYsICZ2YXJnczIpOworICAgICAgICAgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhc3NlcnQoaSA8IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKGtpbmQsIGRhdGEsIGkrKywgKmYpOwotICAgICAgICB9Ci0gICAgfQotICAgIGFzc2VydChpID09IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cmluZykpOworICAgICAgICAgICAgY29uc3QgY2hhciAqcDsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgbGVuOwogCi0gIGVuZDoKLSAgICBpZiAoY2FsbHJlc3VsdHMpCi0gICAgICAgIFB5T2JqZWN0X0ZyZWUoY2FsbHJlc3VsdHMpOwotICAgIGlmIChudW1iZXJyZXN1bHRzKQotICAgICAgICBQeU9iamVjdF9GcmVlKG51bWJlcnJlc3VsdHMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdChzdHJpbmcpOwotICBmYWlsOgotICAgIGlmIChjYWxscmVzdWx0cykgewotICAgICAgICBQeU9iamVjdCAqKmNhbGxyZXN1bHQyID0gY2FsbHJlc3VsdHM7Ci0gICAgICAgIHdoaWxlIChjYWxscmVzdWx0MiA8IGNhbGxyZXN1bHQpIHsKLSAgICAgICAgICAgIFB5X1hERUNSRUYoKmNhbGxyZXN1bHQyKTsKLSAgICAgICAgICAgICsrY2FsbHJlc3VsdDI7CisgICAgICAgICAgICBwID0gZjsKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25lZCBjaGFyKSpwID4gMTI3KSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIlB5VW5pY29kZV9Gcm9tRm9ybWF0VigpIGV4cGVjdHMgYW4gQVNDSUktZW5jb2RlZCBmb3JtYXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgZ290IGEgbm9uLUFTQ0lJIGJ5dGU6IDB4JTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgY2hhcikqcCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAqcCAhPSAnJScpOworICAgICAgICAgICAgbGVuID0gcCAtIGY7CisKKyAgICAgICAgICAgIGlmICgqcCA9PSAnXDAnKQorICAgICAgICAgICAgICAgIHdyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKCZ3cml0ZXIsIGYsIGxlbikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKworICAgICAgICAgICAgZiA9IHA7CiAgICAgICAgIH0KLSAgICAgICAgUHlPYmplY3RfRnJlZShjYWxscmVzdWx0cyk7CiAgICAgfQotICAgIGlmIChudW1iZXJyZXN1bHRzKQotICAgICAgICBQeU9iamVjdF9GcmVlKG51bWJlcnJlc3VsdHMpOworICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKworICBmYWlsOgorICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMjk0OCwxMiArMjg1Nyw3IEBACiAgICAgYnVmbGVuID0gdW5pY29kZV9hc3dpZGVjaGFyKHVuaWNvZGUsIE5VTEwsIDApOwogICAgIGlmIChidWZsZW4gPT0gLTEpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQWV9TU0laRV9UX01BWCAvIHNpemVvZih3Y2hhcl90KSA8IGJ1ZmxlbikgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBidWZmZXIgPSBQeU1lbV9NQUxMT0MoYnVmbGVuICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBidWZmZXIgPSBQeU1lbV9ORVcod2NoYXJfdCwgYnVmbGVuKTsKICAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0yOTczLDI2ICsyODc3LDE3IEBACiBQeU9iamVjdCAqCiBQeVVuaWNvZGVfRnJvbU9yZGluYWwoaW50IG9yZGluYWwpCiB7Ci0gICAgUHlPYmplY3QgKnY7CiAgICAgaWYgKG9yZGluYWwgPCAwIHx8IG9yZGluYWwgPiBNQVhfVU5JQ09ERSkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJjaHIoKSBhcmcgbm90IGluIHJhbmdlKDB4MTEwMDAwKSIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoKFB5X1VDUzQpb3JkaW5hbCA8IDI1NikKLSAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhcilvcmRpbmFsKTsKLQotICAgIHYgPSBQeVVuaWNvZGVfTmV3KDEsIG9yZGluYWwpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIFB5VW5pY29kZV9XUklURShQeVVuaWNvZGVfS0lORCh2KSwgUHlVbmljb2RlX0RBVEEodiksIDAsIG9yZGluYWwpOwotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kodiwgMSkpOwotICAgIHJldHVybiB2OworICAgIHJldHVybiB1bmljb2RlX2NoYXIoKFB5X1VDUzQpb3JkaW5hbCk7CiB9CiAKIFB5T2JqZWN0ICoKLVB5VW5pY29kZV9Gcm9tT2JqZWN0KHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmopCitQeVVuaWNvZGVfRnJvbU9iamVjdChQeU9iamVjdCAqb2JqKQogewogICAgIC8qIFhYWCBQZXJoYXBzIHdlIHNob3VsZCBtYWtlIHRoaXMgQVBJIGFuIGFsaWFzIG9mCiAgICAgICAgUHlPYmplY3RfU3RyKCkgaW5zdGVhZCA/ISAqLwpAQCAtMzAxNCw3ICsyOTA5LDcgQEAKIH0KIAogUHlPYmplY3QgKgotUHlVbmljb2RlX0Zyb21FbmNvZGVkT2JqZWN0KHJlZ2lzdGVyIFB5T2JqZWN0ICpvYmosCitQeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QoUHlPYmplY3QgKm9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplbmNvZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7CkBAIC0zMDQ1LDggKzI5NDAsNyBAQAogICAgIC8qIFJldHJpZXZlIGEgYnl0ZXMgYnVmZmVyIHZpZXcgdGhyb3VnaCB0aGUgUEVQIDMxMTggYnVmZmVyIGludGVyZmFjZSAqLwogICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIob2JqLCAmYnVmZmVyLCBQeUJVRl9TSU1QTEUpIDwgMCkgewogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgImNvZXJjaW5nIHRvIHN0cjogbmVlZCBieXRlcywgYnl0ZWFycmF5ICIKLSAgICAgICAgICAgICAgICAgICAgICJvciBidWZmZXItbGlrZSBvYmplY3QsICUuODBzIGZvdW5kIiwKKyAgICAgICAgICAgICAgICAgICAgICJjb2VyY2luZyB0byBzdHI6IG5lZWQgYSBieXRlcy1saWtlIG9iamVjdCwgJS44MHMgZm91bmQiLAogICAgICAgICAgICAgICAgICAgICAgUHlfVFlQRShvYmopLT50cF9uYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMzA2NiwxNCArMjk2MCwxNyBAQAogICAgMSBvbiBzdWNjZXNzLiAqLwogaW50CiBfUHlfbm9ybWFsaXplX2VuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLAotICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvd2VyLAotICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb3dlcl9sZW4pCisgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxvd2VyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG93ZXJfbGVuKQogewogICAgIGNvbnN0IGNoYXIgKmU7CiAgICAgY2hhciAqbDsKICAgICBjaGFyICpsX2VuZDsKIAogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKSB7CisgICAgICAgIC8qIDYgPT0gc3RybGVuKCJ1dGYtOCIpICsgMSAqLworICAgICAgICBpZiAobG93ZXJfbGVuIDwgNikKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdHJjcHkobG93ZXIsICJ1dGYtOCIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9CkBAIC0zMTE1LDcgKzMwMTIsOCBAQAogICAgICAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwocywgc2l6ZSwgZXJyb3JzLCBOVUxMKTsKICAgICAgICAgZWxzZSBpZiAoKHN0cmNtcChsb3dlciwgImxhdGluLTEiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAibGF0aW4xIikgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvODg1OS0xIikgPT0gMCkpCiAgICAgICAgICAgICByZXR1cm4gUHlVbmljb2RlX0RlY29kZUxhdGluMShzLCBzaXplLCBlcnJvcnMpOwogI2lmZGVmIEhBVkVfTUJDUwogICAgICAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJtYmNzIikgPT0gMCkKQEAgLTMxNDEsOCArMzAzOSwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodW5pY29kZSkpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVyIGRpZCBub3QgcmV0dXJuIGEgc3RyIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGRlY29kZXIgcmV0dXJuZWQgJyUuNDAwcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlKCkgdG8gZGVjb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUsIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYodW5pY29kZSk7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CkBAIC0zMTU5LDI0ICszMDU5LDE2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMpCiB7Ci0gICAgUHlPYmplY3QgKnY7Ci0KICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayh1bmljb2RlKSkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwotICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmIChlbmNvZGluZyA9PSBOVUxMKQogICAgICAgICBlbmNvZGluZyA9IFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2RpbmcoKTsKIAogICAgIC8qIERlY29kZSB2aWEgdGhlIGNvZGVjIHJlZ2lzdHJ5ICovCi0gICAgdiA9IFB5Q29kZWNfRGVjb2RlKHVuaWNvZGUsIGVuY29kaW5nLCBlcnJvcnMpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7Ci0KLSAgb25FcnJvcjoKLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gUHlDb2RlY19EZWNvZGUodW5pY29kZSwgZW5jb2RpbmcsIGVycm9ycyk7CiB9CiAKIFB5T2JqZWN0ICoKQEAgLTMyMDAsOCArMzA5MiwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJkZWNvZGVyIGRpZCBub3QgcmV0dXJuIGEgc3RyIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGRlY29kZXIgcmV0dXJuZWQgJyUuNDAwcycgaW5zdGVhZCBvZiAnc3RyJzsgIgorICAgICAgICAgICAgICAgICAgICAgInVzZSBjb2RlY3MuZGVjb2RlKCkgdG8gZGVjb2RlIHRvIGFyYml0cmFyeSB0eXBlcyIsCisgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUsIFB5X1RZUEUodW5pY29kZSktPnRwX25hbWUpOwogICAgICAgICBQeV9ERUNSRUYodik7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CkBAIC0zMzQ5LDcgKzMyNDMsNyBAQAogICAgIH0KIAogICAgIGlmIChzdXJyb2dhdGVlc2NhcGUpIHsKLSAgICAgICAgLyogbG9jYWxlIGVuY29kaW5nIHdpdGggc3Vycm9nYXRlZXNjYXBlICovCisgICAgICAgIC8qICJzdXJyb2dhdGVlc2NhcGUiIGVycm9yIGhhbmRsZXIgKi8KICAgICAgICAgY2hhciAqc3RyOwogCiAgICAgICAgIHN0ciA9IF9QeV93Y2hhcjJjaGFyKHdzdHIsICZlcnJvcl9wb3MpOwpAQCAtMzM2OSw2ICszMjYzLDcgQEAKICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogICAgIH0KICAgICBlbHNlIHsKKyAgICAgICAgLyogc3RyaWN0IG1vZGUgKi8KICAgICAgICAgc2l6ZV90IGxlbiwgbGVuMjsKIAogICAgICAgICBsZW4gPSB3Y3N0b21icyhOVUxMLCB3c3RyLCAwKTsKQEAgLTM0MDcsNyArMzMwMiw3IEBACiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihlcnJtc2csICZlcnJsZW4pOwogICAgICAgICBpZiAod3N0ciAhPSBOVUxMKSB7CiAgICAgICAgICAgICByZWFzb24gPSBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHdzdHIsIGVycmxlbik7Ci0gICAgICAgICAgICBQeU1lbV9GcmVlKHdzdHIpOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSh3c3RyKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBlcnJtc2cgPSBOVUxMOwogICAgIH0KQEAgLTM0ODUsNyArMzM4MCw4IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoKHN0cmNtcChsb3dlciwgImxhdGluLTEiKSA9PSAwKSB8fAogICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAibGF0aW4xIikgPT0gMCkgfHwKLSAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSkKKyAgICAgICAgICAgICAgICAgKHN0cmNtcChsb3dlciwgImlzby04ODU5LTEiKSA9PSAwKSB8fAorICAgICAgICAgICAgICAgICAoc3RyY21wKGxvd2VyLCAiaXNvODg1OS0xIikgPT0gMCkpCiAgICAgICAgICAgICByZXR1cm4gX1B5VW5pY29kZV9Bc0xhdGluMVN0cmluZyh1bmljb2RlLCBlcnJvcnMpOwogI2lmZGVmIEhBVkVfTUJDUwogICAgICAgICBlbHNlIGlmIChzdHJjbXAobG93ZXIsICJtYmNzIikgPT0gMCkKQEAgLTM1MTAsNyArMzQwNiw4IEBACiAgICAgICAgIFB5T2JqZWN0ICpiOwogCiAgICAgICAgIGVycm9yID0gUHlFcnJfV2FybkZvcm1hdChQeUV4Y19SdW50aW1lV2FybmluZywgMSwKLSAgICAgICAgICAgICJlbmNvZGVyICVzIHJldHVybmVkIGJ5dGVhcnJheSBpbnN0ZWFkIG9mIGJ5dGVzIiwKKyAgICAgICAgICAgICJlbmNvZGVyICVzIHJldHVybmVkIGJ5dGVhcnJheSBpbnN0ZWFkIG9mIGJ5dGVzOyAiCisgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKICAgICAgICAgICAgIGVuY29kaW5nKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CkBAIC0zNTIzLDggKzM0MjAsMTAgQEAKICAgICB9CiAKICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAiZW5jb2RlciBkaWQgbm90IHJldHVybiBhIGJ5dGVzIG9iamVjdCAodHlwZT0lLjQwMHMpIiwKLSAgICAgICAgICAgICAgICAgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgICAgICAgICAgICAgICInJS40MDBzJyBlbmNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ2J5dGVzJzsgIgorICAgICAgICAgICAgICAgICAidXNlIGNvZGVjcy5lbmNvZGUoKSB0byBlbmNvZGUgdG8gYXJiaXRyYXJ5IHR5cGVzIiwKKyAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgIFB5X1RZUEUodiktPnRwX25hbWUsIFB5X1RZUEUodiktPnRwX25hbWUpOwogICAgIFB5X0RFQ1JFRih2KTsKICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTM1NTAsOCArMzQ0OSwxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodikpIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJlbmNvZGVyIGRpZCBub3QgcmV0dXJuIGFuIHN0ciBvYmplY3QgKHR5cGU9JS40MDBzKSIsCi0gICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBlbmNvZGVyIHJldHVybmVkICclLjQwMHMnIGluc3RlYWQgb2YgJ3N0cic7ICIKKyAgICAgICAgICAgICAgICAgICAgICJ1c2UgY29kZWNzLmVuY29kZSgpIHRvIGVuY29kZSB0byBhcmJpdHJhcnkgdHlwZXMiLAorICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICBQeV9UWVBFKHYpLT50cF9uYW1lLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKICAgICAgICAgUHlfREVDUkVGKHYpOwogICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQpAQCAtMzYxNCw4ICszNTE1LDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkKLSAgICB7CisgICAgaWYgKHN1cnJvZ2F0ZWVzY2FwZSkgeworICAgICAgICAvKiAic3Vycm9nYXRlZXNjYXBlIiBlcnJvciBoYW5kbGVyICovCiAgICAgICAgIHdzdHIgPSBfUHlfY2hhcjJ3Y2hhcihzdHIsICZ3bGVuKTsKICAgICAgICAgaWYgKHdzdHIgPT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHdsZW4gPT0gKHNpemVfdCktMSkKQEAgLTM2MjYsOSArMzUyNywxMCBAQAogICAgICAgICB9CiAKICAgICAgICAgdW5pY29kZSA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3N0ciwgd2xlbik7Ci0gICAgICAgIFB5TWVtX0ZyZWUod3N0cik7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CiAgICAgfQogICAgIGVsc2UgeworICAgICAgICAvKiBzdHJpY3QgbW9kZSAqLwogI2lmbmRlZiBIQVZFX0JST0tFTl9NQlNUT1dDUwogICAgICAgICB3bGVuID0gbWJzdG93Y3MoTlVMTCwgc3RyLCAwKTsKICNlbHNlCkBAIC0zNjQwLDE1ICszNTQyLDExIEBACiAgICAgICAgICAgICB3c3RyID0gc21hbGxidWY7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpZiAod2xlbiA+IFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpIC0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKLQotICAgICAgICAgICAgd3N0ciA9IFB5TWVtX01hbGxvYygod2xlbisxKSAqIHNpemVvZih3Y2hhcl90KSk7CisgICAgICAgICAgICB3c3RyID0gUHlNZW1fTmV3KHdjaGFyX3QsIHdsZW4rMSk7CiAgICAgICAgICAgICBpZiAoIXdzdHIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIH0KIAotICAgICAgICAvKiBUaGlzIHNob3VsZG4ndCBmYWlsIG5vdyAqLwogICAgICAgICB3bGVuMiA9IG1ic3Rvd2NzKHdzdHIsIHN0ciwgd2xlbisxKTsKICAgICAgICAgaWYgKHdsZW4yID09IChzaXplX3QpLTEpIHsKICAgICAgICAgICAgIGlmICh3c3RyICE9IHNtYWxsYnVmKQpAQCAtMzY2NSw2ICszNTYzLDcgQEAKICAgICByZXR1cm4gdW5pY29kZTsKIAogZGVjb2RlX2Vycm9yOgorICAgIHJlYXNvbiA9IE5VTEw7CiAgICAgZXJybXNnID0gc3RyZXJyb3IoZXJybm8pOwogICAgIGFzc2VydChlcnJtc2cgIT0gTlVMTCk7CiAKQEAgLTM2NzQsMTEgKzM1NzMsMTAgQEAKICAgICAgICAgd3N0ciA9IF9QeV9jaGFyMndjaGFyKGVycm1zZywgJmVycmxlbik7CiAgICAgICAgIGlmICh3c3RyICE9IE5VTEwpIHsKICAgICAgICAgICAgIHJlYXNvbiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIod3N0ciwgZXJybGVuKTsKLSAgICAgICAgICAgIFB5TWVtX0ZyZWUod3N0cik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgZXJybXNnID0gTlVMTDsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUod3N0cik7CisgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKGVycm1zZyA9PSBOVUxMKQorICAgIGlmIChyZWFzb24gPT0gTlVMTCkKICAgICAgICAgcmVhc29uID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoCiAgICAgICAgICAgICAibWJzdG93Y3MoKSBlbmNvdW50ZXJlZCBhbiBpbnZhbGlkIG11bHRpYnl0ZSBzZXF1ZW5jZSIpOwogICAgIGlmIChyZWFzb24gPT0gTlVMTCkKQEAgLTM3NDIsMTggKzM2NDAsMjAgQEAKIAogCiBpbnQKLV9QeVVuaWNvZGVfSGFzTlVMQ2hhcnMoUHlPYmplY3QqIHMpCitfUHlVbmljb2RlX0hhc05VTENoYXJzKFB5T2JqZWN0KiBzdHIpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpudWwgPSBOVUxMOworICAgIFB5X3NzaXplX3QgcG9zOwogCi0gICAgaWYgKG51bCA9PSBOVUxMKQotICAgICAgICBudWwgPSBQeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUoIlwwIiwgMSk7Ci0gICAgaWYgKG51bCA9PSBOVUxMKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBQeVVuaWNvZGVfQ29udGFpbnMocywgbnVsKTsKKyAgICBwb3MgPSBmaW5kY2hhcihQeVVuaWNvZGVfREFUQShzdHIpLCBQeVVuaWNvZGVfS0lORChzdHIpLAorICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0ciksICdcMCcsIDEpOworICAgIGlmIChwb3MgPT0gLTEpCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7CiB9CiAKLQogaW50CiBQeVVuaWNvZGVfRlNDb252ZXJ0ZXIoUHlPYmplY3QqIGFyZywgdm9pZCogYWRkcikKIHsKQEAgLTM4NTcsNiArMzc1Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgX1B5VW5pY29kZV9VVEY4KHVuaWNvZGUpID0gUHlPYmplY3RfTUFMTE9DKFB5Qnl0ZXNfR0VUX1NJWkUoYnl0ZXMpICsgMSk7CiAgICAgICAgIGlmIChfUHlVbmljb2RlX1VURjgodW5pY29kZSkgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihieXRlcyk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMzk0Niw2ICszODQ3LDExIEBACiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmICgoc2l6ZV90KV9QeVVuaWNvZGVfTEVOR1RIKHVuaWNvZGUpID4KKyAgICAgICAgICAgICAgICAgICAgUFlfU1NJWkVfVF9NQVggLyBzaXplb2Yod2NoYXJfdCkgLSAxKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIF9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSA9ICh3Y2hhcl90ICopIFB5T2JqZWN0X01BTExPQyhzaXplb2Yod2NoYXJfdCkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX1B5VW5pY29kZV9MRU5HVEgodW5pY29kZSkgKyAxKSk7CiAgICAgICAgICAgICBpZiAoIV9QeVVuaWNvZGVfV1NUUih1bmljb2RlKSkgewpAQCAtNDAyNSw2ICszOTMxLDkgQEAKIFB5X1VDUzQKIFB5VW5pY29kZV9SZWFkQ2hhcihQeU9iamVjdCAqdW5pY29kZSwgUHlfc3NpemVfdCBpbmRleCkKIHsKKyAgICB2b2lkICpkYXRhOworICAgIGludCBraW5kOworCiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sodW5pY29kZSkgfHwgUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKSB7CiAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgIHJldHVybiAoUHlfVUNTNCktMTsKQEAgLTQwMzMsNyArMzk0Miw5IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbmRleEVycm9yLCAic3RyaW5nIGluZGV4IG91dCBvZiByYW5nZSIpOwogICAgICAgICByZXR1cm4gKFB5X1VDUzQpLTE7CiAgICAgfQotICAgIHJldHVybiBQeVVuaWNvZGVfUkVBRF9DSEFSKHVuaWNvZGUsIGluZGV4KTsKKyAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHVuaWNvZGUpOworICAgIHJldHVybiBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpbmRleCk7CiB9CiAKIGludApAQCAtNDA5MSw2ICs0MDAyLDcgQEAKICAgICBQeV9DTEVBUigqZXhjZXB0aW9uT2JqZWN0KTsKIH0KIAorI2lmZGVmIEhBVkVfTUJDUwogLyogZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgaGVscGVyOgogICAgYnVpbGQgYXJndW1lbnRzLCBjYWxsIHRoZSBjYWxsYmFjayBhbmQgY2hlY2sgdGhlIGFyZ3VtZW50cywKICAgIGlmIG5vIGV4Y2VwdGlvbiBvY2N1cnJlZCwgY29weSB0aGUgcmVwbGFjZW1lbnQgdG8gdGhlIG91dHB1dApAQCAtNDA5OSwxMSArNDAxMSwxMiBAQAogKi8KIAogc3RhdGljIGludAotdW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoY29uc3QgY2hhciAqZXJyb3JzLCBQeU9iamVjdCAqKmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICpyZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmVuZGlucG9zLCBQeU9iamVjdCAqKmV4Y2VwdGlvbk9iamVjdCwgY29uc3QgY2hhciAqKmlucHRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcykKK3VuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3djaGFyKAorICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKnJlYXNvbiwKKyAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKKyAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKKyAgICBQeU9iamVjdCAqKm91dHB1dCwgUHlfc3NpemVfdCAqb3V0cG9zKQogewogICAgIHN0YXRpYyBjaGFyICphcmdwYXJzZSA9ICJPIW47ZGVjb2RpbmcgZXJyb3IgaGFuZGxlciBtdXN0IHJldHVybiAoc3RyLCBpbnQpIHR1cGxlIjsKIApAQCAtNDExNCwxMiArNDAyNywxMSBAQAogICAgIFB5X3NzaXplX3QgcmVxdWlyZWRzaXplOwogICAgIFB5X3NzaXplX3QgbmV3cG9zOwogICAgIFB5T2JqZWN0ICppbnB1dG9iaiA9IE5VTEw7Ci0gICAgaW50IHJlcyA9IC0xOworICAgIHdjaGFyX3QgKnJlcHdzdHI7CisgICAgUHlfc3NpemVfdCByZXB3bGVuOwogCi0gICAgaWYgKF9QeVVuaWNvZGVfS0lORCgqb3V0cHV0KSAhPSBQeVVuaWNvZGVfV0NIQVJfS0lORCkKLSAgICAgICAgb3V0c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKCpvdXRwdXQpOwotICAgIGVsc2UKLSAgICAgICAgb3V0c2l6ZSA9IF9QeVVuaWNvZGVfV1NUUl9MRU5HVEgoKm91dHB1dCk7CisgICAgYXNzZXJ0IChfUHlVbmljb2RlX0tJTkQoKm91dHB1dCkgPT0gUHlVbmljb2RlX1dDSEFSX0tJTkQpOworICAgIG91dHNpemUgPSBfUHlVbmljb2RlX1dTVFJfTEVOR1RIKCpvdXRwdXQpOwogCiAgICAgaWYgKCplcnJvckhhbmRsZXIgPT0gTlVMTCkgewogICAgICAgICAqZXJyb3JIYW5kbGVyID0gUHlDb2RlY19Mb29rdXBFcnJvcihlcnJvcnMpOwpAQCAtNDE0NCw3ICs0MDU2LDEwNyBAQAogICAgIH0KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUocmVzdHVwbGUsIGFyZ3BhcnNlLCAmUHlVbmljb2RlX1R5cGUsICZyZXB1bmljb2RlLCAmbmV3cG9zKSkKICAgICAgICAgZ290byBvbkVycm9yOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwdW5pY29kZSkgPT0gLTEpCisKKyAgICAvKiBDb3B5IGJhY2sgdGhlIGJ5dGVzIHZhcmlhYmxlcywgd2hpY2ggbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkIGJ5IHRoZQorICAgICAgIGNhbGxiYWNrICovCisgICAgaW5wdXRvYmogPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QoKmV4Y2VwdGlvbk9iamVjdCk7CisgICAgaWYgKCFpbnB1dG9iaikKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIGlmICghUHlCeXRlc19DaGVjayhpbnB1dG9iaikpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwgImV4Y2VwdGlvbiBhdHRyaWJ1dGUgb2JqZWN0IG11c3QgYmUgYnl0ZXMiKTsKKyAgICB9CisgICAgKmlucHV0ID0gUHlCeXRlc19BU19TVFJJTkcoaW5wdXRvYmopOworICAgIGluc2l6ZSA9IFB5Qnl0ZXNfR0VUX1NJWkUoaW5wdXRvYmopOworICAgICppbmVuZCA9ICppbnB1dCArIGluc2l6ZTsKKyAgICAvKiB3ZSBjYW4gREVDUkVGIHNhZmVseSwgYXMgdGhlIGV4Y2VwdGlvbiBoYXMgYW5vdGhlciByZWZlcmVuY2UsCisgICAgICAgc28gdGhlIG9iamVjdCB3b24ndCBnbyBhd2F5LiAqLworICAgIFB5X0RFQ1JFRihpbnB1dG9iaik7CisKKyAgICBpZiAobmV3cG9zPDApCisgICAgICAgIG5ld3BvcyA9IGluc2l6ZStuZXdwb3M7CisgICAgaWYgKG5ld3BvczwwIHx8IG5ld3Bvcz5pbnNpemUpIHsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0luZGV4RXJyb3IsICJwb3NpdGlvbiAlemQgZnJvbSBlcnJvciBoYW5kbGVyIG91dCBvZiBib3VuZHMiLCBuZXdwb3MpOworICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgfQorCisgICAgcmVwd3N0ciA9IFB5VW5pY29kZV9Bc1VuaWNvZGVBbmRTaXplKHJlcHVuaWNvZGUsICZyZXB3bGVuKTsKKyAgICBpZiAocmVwd3N0ciA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgLyogbmVlZCBtb3JlIHNwYWNlPyAoYXQgbGVhc3QgZW5vdWdoIGZvciB3aGF0IHdlCisgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKKyAgICAgICBhdCB0aGUgbmV3IGlucHV0IHBvc2l0aW9uKSwgc28gd2Ugd29uJ3QgaGF2ZSB0byBjaGVjayBzcGFjZQorICAgICAgIHdoZW4gdGhlcmUgYXJlIG5vIGVycm9ycyBpbiB0aGUgcmVzdCBvZiB0aGUgc3RyaW5nKSAqLworICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3M7CisgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gcmVwd2xlbikKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICByZXF1aXJlZHNpemUgKz0gcmVwd2xlbjsKKyAgICBpZiAocmVxdWlyZWRzaXplID4gUFlfU1NJWkVfVF9NQVggLSAoaW5zaXplIC0gbmV3cG9zKSkKKyAgICAgICAgZ290byBvdmVyZmxvdzsKKyAgICByZXF1aXJlZHNpemUgKz0gaW5zaXplIC0gbmV3cG9zOworICAgIGlmIChyZXF1aXJlZHNpemUgPiBvdXRzaXplKSB7CisgICAgICAgIGlmIChvdXRzaXplIDw9IFBZX1NTSVpFX1RfTUFYLzIgJiYgcmVxdWlyZWRzaXplIDwgMipvdXRzaXplKQorICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOworICAgICAgICBpZiAodW5pY29kZV9yZXNpemUob3V0cHV0LCByZXF1aXJlZHNpemUpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgd2NzbmNweShfUHlVbmljb2RlX1dTVFIoKm91dHB1dCkgKyAqb3V0cG9zLCByZXB3c3RyLCByZXB3bGVuKTsKKyAgICAqb3V0cG9zICs9IHJlcHdsZW47CisgICAgKmVuZGlucG9zID0gbmV3cG9zOworICAgICppbnB0ciA9ICppbnB1dCArIG5ld3BvczsKKworICAgIC8qIHdlIG1hZGUgaXQhICovCisgICAgUHlfWERFQ1JFRihyZXN0dXBsZSk7CisgICAgcmV0dXJuIDA7CisKKyAgb3ZlcmZsb3c6CisgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICJkZWNvZGVkIHJlc3VsdCBpcyB0b28gbG9uZyBmb3IgYSBQeXRob24gc3RyaW5nIik7CisKKyAgb25FcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gLTE7Cit9CisjZW5kaWYgICAvKiBIQVZFX01CQ1MgKi8KKworc3RhdGljIGludAordW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgIGNvbnN0IGNoYXIgKmVycm9ycywgUHlPYmplY3QgKiplcnJvckhhbmRsZXIsCisgICAgY29uc3QgY2hhciAqZW5jb2RpbmcsIGNvbnN0IGNoYXIgKnJlYXNvbiwKKyAgICBjb25zdCBjaGFyICoqaW5wdXQsIGNvbnN0IGNoYXIgKippbmVuZCwgUHlfc3NpemVfdCAqc3RhcnRpbnBvcywKKyAgICBQeV9zc2l6ZV90ICplbmRpbnBvcywgUHlPYmplY3QgKipleGNlcHRpb25PYmplY3QsIGNvbnN0IGNoYXIgKippbnB0ciwKKyAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIgLyogUHlPYmplY3QgKipvdXRwdXQsIFB5X3NzaXplX3QgKm91dHBvcyAqLykKK3sKKyAgICBzdGF0aWMgY2hhciAqYXJncGFyc2UgPSAiTyFuO2RlY29kaW5nIGVycm9yIGhhbmRsZXIgbXVzdCByZXR1cm4gKHN0ciwgaW50KSB0dXBsZSI7CisKKyAgICBQeU9iamVjdCAqcmVzdHVwbGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpyZXB1bmljb2RlID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IGluc2l6ZTsKKyAgICBQeV9zc2l6ZV90IG5ld3BvczsKKyAgICBQeV9zc2l6ZV90IHJlcGxlbjsKKyAgICBQeU9iamVjdCAqaW5wdXRvYmogPSBOVUxMOworCisgICAgaWYgKCplcnJvckhhbmRsZXIgPT0gTlVMTCkgeworICAgICAgICAqZXJyb3JIYW5kbGVyID0gUHlDb2RlY19Mb29rdXBFcnJvcihlcnJvcnMpOworICAgICAgICBpZiAoKmVycm9ySGFuZGxlciA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKworICAgIG1ha2VfZGVjb2RlX2V4Y2VwdGlvbihleGNlcHRpb25PYmplY3QsCisgICAgICAgIGVuY29kaW5nLAorICAgICAgICAqaW5wdXQsICppbmVuZCAtICppbnB1dCwKKyAgICAgICAgKnN0YXJ0aW5wb3MsICplbmRpbnBvcywKKyAgICAgICAgcmVhc29uKTsKKyAgICBpZiAoKmV4Y2VwdGlvbk9iamVjdCA9PSBOVUxMKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICByZXN0dXBsZSA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoKmVycm9ySGFuZGxlciwgKmV4Y2VwdGlvbk9iamVjdCwgTlVMTCk7CisgICAgaWYgKHJlc3R1cGxlID09IE5VTEwpCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVzdHVwbGUpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICZhcmdwYXJzZVs0XSk7CisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKHJlc3R1cGxlLCBhcmdwYXJzZSwgJlB5VW5pY29kZV9UeXBlLCAmcmVwdW5pY29kZSwgJm5ld3BvcykpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKIAogICAgIC8qIENvcHkgYmFjayB0aGUgYnl0ZXMgdmFyaWFibGVzLCB3aGljaCBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQgYnkgdGhlCkBAIC00MTY5LDcxICs0MTgxLDI5IEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKLSAgICBpZiAoX1B5VW5pY29kZV9LSU5EKCpvdXRwdXQpICE9IFB5VW5pY29kZV9XQ0hBUl9LSU5EKSB7Ci0gICAgICAgIC8qIG5lZWQgbW9yZSBzcGFjZT8gKGF0IGxlYXN0IGVub3VnaCBmb3Igd2hhdCB3ZQotICAgICAgICAgICBoYXZlK3RoZSByZXBsYWNlbWVudCt0aGUgcmVzdCBvZiB0aGUgc3RyaW5nIChzdGFydGluZwotICAgICAgICAgICBhdCB0aGUgbmV3IGlucHV0IHBvc2l0aW9uKSwgc28gd2Ugd29uJ3QgaGF2ZSB0byBjaGVjayBzcGFjZQotICAgICAgICAgICB3aGVuIHRoZXJlIGFyZSBubyBlcnJvcnMgaW4gdGhlIHJlc3Qgb2YgdGhlIHN0cmluZykgKi8KLSAgICAgICAgUHlfc3NpemVfdCByZXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXB1bmljb2RlKTsKLSAgICAgICAgcmVxdWlyZWRzaXplID0gKm91dHBvczsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gcmVwbGVuKQotICAgICAgICAgICAgZ290byBvdmVyZmxvdzsKLSAgICAgICAgcmVxdWlyZWRzaXplICs9IHJlcGxlbjsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gKGluc2l6ZSAtIG5ld3BvcykpCi0gICAgICAgICAgICBnb3RvIG92ZXJmbG93OwotICAgICAgICByZXF1aXJlZHNpemUgKz0gaW5zaXplIC0gbmV3cG9zOwotICAgICAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgewotICAgICAgICAgICAgaWYgKG91dHNpemUgPD0gUFlfU1NJWkVfVF9NQVgvMiAmJiByZXF1aXJlZHNpemUgPCAyKm91dHNpemUpCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKG91dHB1dCwgcmVxdWlyZWRzaXplKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICB9Ci0gICAgICAgIGlmICh1bmljb2RlX3dpZGVuKG91dHB1dCwgKm91dHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHJlcHVuaWNvZGUpKSA8IDApCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXB1bmljb2RlKSA8IDApCisgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICByZXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXB1bmljb2RlKTsKKyAgICBpZiAocmVwbGVuID4gMSkgeworICAgICAgICB3cml0ZXItPm1pbl9sZW5ndGggKz0gcmVwbGVuIC0gMTsKKyAgICAgICAgd3JpdGVyLT5vdmVyYWxsb2NhdGUgPSAxOworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgd3JpdGVyLT5taW5fbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShyZXB1bmljb2RlKSkgPT0gLTEpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKCpvdXRwdXQsICpvdXRwb3MsIHJlcHVuaWNvZGUsIDAsIHJlcGxlbik7Ci0gICAgICAgICpvdXRwb3MgKz0gcmVwbGVuOwogICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgd2NoYXJfdCAqcmVwd3N0cjsKLSAgICAgICAgUHlfc3NpemVfdCByZXB3bGVuOwotICAgICAgICByZXB3c3RyID0gUHlVbmljb2RlX0FzVW5pY29kZUFuZFNpemUocmVwdW5pY29kZSwgJnJlcHdsZW4pOwotICAgICAgICBpZiAocmVwd3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAvKiBuZWVkIG1vcmUgc3BhY2U/IChhdCBsZWFzdCBlbm91Z2ggZm9yIHdoYXQgd2UKLSAgICAgICAgICAgaGF2ZSt0aGUgcmVwbGFjZW1lbnQrdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyAoc3RhcnRpbmcKLSAgICAgICAgICAgYXQgdGhlIG5ldyBpbnB1dCBwb3NpdGlvbiksIHNvIHdlIHdvbid0IGhhdmUgdG8gY2hlY2sgc3BhY2UKLSAgICAgICAgICAgd2hlbiB0aGVyZSBhcmUgbm8gZXJyb3JzIGluIHRoZSByZXN0IG9mIHRoZSBzdHJpbmcpICovCi0gICAgICAgIHJlcXVpcmVkc2l6ZSA9ICpvdXRwb3M7Ci0gICAgICAgIGlmIChyZXF1aXJlZHNpemUgPiBQWV9TU0laRV9UX01BWCAtIHJlcHdsZW4pCi0gICAgICAgICAgICBnb3RvIG92ZXJmbG93OwotICAgICAgICByZXF1aXJlZHNpemUgKz0gcmVwd2xlbjsKLSAgICAgICAgaWYgKHJlcXVpcmVkc2l6ZSA+IFBZX1NTSVpFX1RfTUFYIC0gKGluc2l6ZSAtIG5ld3BvcykpCi0gICAgICAgICAgICBnb3RvIG92ZXJmbG93OwotICAgICAgICByZXF1aXJlZHNpemUgKz0gaW5zaXplIC0gbmV3cG9zOwotICAgICAgICBpZiAocmVxdWlyZWRzaXplID4gb3V0c2l6ZSkgewotICAgICAgICAgICAgaWYgKG91dHNpemUgPD0gUFlfU1NJWkVfVF9NQVgvMiAmJiByZXF1aXJlZHNpemUgPCAyKm91dHNpemUpCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRzaXplID0gMipvdXRzaXplOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKG91dHB1dCwgcmVxdWlyZWRzaXplKSA8IDApCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICB9Ci0gICAgICAgIHdjc25jcHkoX1B5VW5pY29kZV9XU1RSKCpvdXRwdXQpICsgKm91dHBvcywgcmVwd3N0ciwgcmVwd2xlbik7Ci0gICAgICAgICpvdXRwb3MgKz0gcmVwd2xlbjsKLSAgICB9CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCByZXB1bmljb2RlKSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOworCiAgICAgKmVuZGlucG9zID0gbmV3cG9zOwogICAgICppbnB0ciA9ICppbnB1dCArIG5ld3BvczsKIAogICAgIC8qIHdlIG1hZGUgaXQhICovCi0gICAgcmVzID0gMDsKKyAgICBQeV9YREVDUkVGKHJlc3R1cGxlKTsKKyAgICByZXR1cm4gMDsKIAogICBvbkVycm9yOgogICAgIFB5X1hERUNSRUYocmVzdHVwbGUpOwotICAgIHJldHVybiByZXM7Ci0KLSAgb3ZlcmZsb3c6Ci0gICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX092ZXJmbG93RXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJkZWNvZGVkIHJlc3VsdCBpcyB0b28gbG9uZyBmb3IgYSBQeXRob24gc3RyaW5nIik7Ci0gICAgZ290byBvbkVycm9yOworICAgIHJldHVybiAtMTsKIH0KIAogLyogLS0tIFVURi03IENvZGVjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MzQxLDkgKzQzMTEsOCBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7CiAgICAgY29uc3QgY2hhciAqZTsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKICAgICBpbnQgaW5TaGlmdCA9IDA7CiAgICAgUHlfc3NpemVfdCBzaGlmdE91dFN0YXJ0OwpAQCAtNDM1MywxNyArNDMyMiwxNyBAQAogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCi0gICAgLyogU3RhcnQgb2ZmIGFzc3VtaW5nIGl0J3MgYWxsIEFTQ0lJLiBXaWRlbiBsYXRlciBhcyBuZWNlc3NhcnkuICovCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplID09IDApIHsKICAgICAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAgICAgKmNvbnN1bWVkID0gMDsKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7CisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KIAotICAgIHNoaWZ0T3V0U3RhcnQgPSBvdXRwb3MgPSAwOworICAgIC8qIFN0YXJ0IG9mZiBhc3N1bWluZyBpdCdzIGFsbCBBU0NJSS4gV2lkZW4gbGF0ZXIgYXMgbmVjZXNzYXJ5LiAqLworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CisKKyAgICBzaGlmdE91dFN0YXJ0ID0gMDsKICAgICBlID0gcyArIHNpemU7CiAKICAgICB3aGlsZSAocyA8IGUpIHsKQEAgLTQzODYsMTMgKzQzNTUsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4cGVjdGluZyBhIHNlY29uZCBzdXJyb2dhdGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQeV9VTklDT0RFX0lTX0xPV19TVVJST0dBVEUob3V0Q2gpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCBjaDIgPSBQeV9VTklDT0RFX0pPSU5fU1VSUk9HQVRFUyhzdXJyb2dhdGUsIG91dENoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaDIpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gyKSA8IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgc3Vycm9nYXRlKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHN1cnJvZ2F0ZSkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ0MDIsMzggKzQzNzEsMzggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IG91dENoOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgb3V0Q2gpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCBvdXRDaCkgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgeyAvKiBub3cgbGVhdmluZyBhIGJhc2UtNjQgc2VjdGlvbiAqLwogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAwOwotICAgICAgICAgICAgICAgIHMrKzsKLSAgICAgICAgICAgICAgICBpZiAoc3Vycm9nYXRlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnVuaWNvZGUsICZvdXRwb3MsIHN1cnJvZ2F0ZSkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSAwOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoYmFzZTY0Yml0cyA+IDApIHsgLyogbGVmdC1vdmVyIGJpdHMgKi8KICAgICAgICAgICAgICAgICAgICAgaWYgKGJhc2U2NGJpdHMgPj0gNikgewogICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UndmUgc2VlbiBhdCBsZWFzdCBvbmUgYmFzZS02NCBjaGFyYWN0ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgIGVycm1zZyA9ICJwYXJ0aWFsIGNoYXJhY3RlciBpbiBzaGlmdCBzZXF1ZW5jZSI7CiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNvbWUgYml0cyByZW1haW47IHRoZXkgc2hvdWxkIGJlIHplcm8gKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiYXNlNjRidWZmZXIgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJtc2cgPSAibm9uLXplcm8gcGFkZGluZyBiaXRzIGluIHNoaWZ0IHNlcXVlbmNlIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHV0ZjdFcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJy0nKSB7CisgICAgICAgICAgICAgICAgaWYgKHN1cnJvZ2F0ZSAmJiBERUNPREVfRElSRUNUKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgc3Vycm9nYXRlKSA8IDApCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICctJykgewogICAgICAgICAgICAgICAgICAgICAvKiAnLScgaXMgYWJzb3JiZWQ7IG90aGVyIHRlcm1pbmF0aW5nCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMgYXJlIHByZXNlcnZlZCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgICAgICBzKys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NDQyLDIwICs0NDExLDIxIEBACiAgICAgICAgICAgICBzKys7IC8qIGNvbnN1bWUgJysnICovCiAgICAgICAgICAgICBpZiAocyA8IGUgJiYgKnMgPT0gJy0nKSB7IC8qICcrLScgZW5jb2RlcyAnKycgKi8KICAgICAgICAgICAgICAgICBzKys7Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgJysnKSA8IDApCisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsICcrJykgPCAwKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsgLyogYmVnaW4gYmFzZTY0LWVuY29kZWQgc2VjdGlvbiAqLwogICAgICAgICAgICAgICAgIGluU2hpZnQgPSAxOwotICAgICAgICAgICAgICAgIHNoaWZ0T3V0U3RhcnQgPSBvdXRwb3M7CisgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gMDsKKyAgICAgICAgICAgICAgICBzaGlmdE91dFN0YXJ0ID0gd3JpdGVyLnBvczsKICAgICAgICAgICAgICAgICBiYXNlNjRiaXRzID0gMDsKICAgICAgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKERFQ09ERV9ESVJFQ1QoY2gpKSB7IC8qIGNoYXJhY3RlciBkZWNvZGVzIGFzIGl0c2VsZiAqLwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CkBAIC00NDY2LDExICs0NDM2LDExIEBACiAgICAgICAgIGNvbnRpbnVlOwogdXRmN0Vycm9yOgogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGY3IiwgZXJybXNnLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCkBAIC00NDc4LDE1ICs0NDQ4LDE2IEBACiAKICAgICBpZiAoaW5TaGlmdCAmJiAhY29uc3VtZWQpIHsgLyogaW4gc2hpZnQgc2VxdWVuY2UsIG5vIG1vcmUgdG8gZm9sbG93ICovCiAgICAgICAgIC8qIGlmIHdlJ3JlIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSwgdGhhdCdzIGFuIGVycm9yICovCisgICAgICAgIGluU2hpZnQgPSAwOwogICAgICAgICBpZiAoc3Vycm9nYXRlIHx8CiAgICAgICAgICAgICAgICAgKGJhc2U2NGJpdHMgPj0gNikgfHwKICAgICAgICAgICAgICAgICAoYmFzZTY0Yml0cyA+IDAgJiYgYmFzZTY0YnVmZmVyICE9IDApKSB7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHNpemU7Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICJ1dGY3IiwgInVudGVybWluYXRlZCBzaGlmdCBzZXF1ZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBpZiAocyA8IGUpCiAgICAgICAgICAgICAgICAgZ290byByZXN0YXJ0OwpAQCAtNDQ5NywzMiArNDQ2OCwyOSBAQAogICAgIGlmIChjb25zdW1lZCkgewogICAgICAgICBpZiAoaW5TaGlmdCkgewogICAgICAgICAgICAgKmNvbnN1bWVkID0gc3RhcnRpbnBvczsKLSAgICAgICAgICAgIGlmIChvdXRwb3MgIT0gc2hpZnRPdXRTdGFydCAmJgotICAgICAgICAgICAgICAgIFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh1bmljb2RlKSA+IDEyNykgeworICAgICAgICAgICAgaWYgKHdyaXRlci5wb3MgIT0gc2hpZnRPdXRTdGFydCAmJiB3cml0ZXIubWF4Y2hhciA+IDEyNykgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeVVuaWNvZGVfRnJvbUtpbmRBbmREYXRhKAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0tJTkQodW5pY29kZSksIFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpLAotICAgICAgICAgICAgICAgICAgICAgICAgc2hpZnRPdXRTdGFydCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHVuaWNvZGUpOwotICAgICAgICAgICAgICAgIHVuaWNvZGUgPSByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHNoaWZ0T3V0U3RhcnQpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKKyAgICAgICAgICAgICAgICBQeV9YREVDUkVGKGV4Yyk7CisgICAgICAgICAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOworICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBvdXRwb3MgPSBzaGlmdE91dFN0YXJ0OyAvKiBiYWNrIG9mZiBvdXRwdXQgKi8KKyAgICAgICAgICAgIHdyaXRlci5wb3MgPSBzaGlmdE91dFN0YXJ0OyAvKiBiYWNrIG9mZiBvdXRwdXQgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICpjb25zdW1lZCA9IHMtc3RhcnRzOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodW5pY29kZSk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00NjA1LDcgKzQ1NzMsNyBAQAogCiAgICAgICAgICAgICAvKiBjb2RlIGZpcnN0IHN1cnJvZ2F0ZSAqLwogICAgICAgICAgICAgYmFzZTY0Yml0cyArPSAxNjsKLSAgICAgICAgICAgIGJhc2U2NGJ1ZmZlciA9IChiYXNlNjRidWZmZXIgPDwgMTYpIHwgMHhkODAwIHwgKChjaC0weDEwMDAwKSA+PiAxMCk7CisgICAgICAgICAgICBiYXNlNjRidWZmZXIgPSAoYmFzZTY0YnVmZmVyIDw8IDE2KSB8IFB5X1VOSUNPREVfSElHSF9TVVJST0dBVEUoY2gpOwogICAgICAgICAgICAgd2hpbGUgKGJhc2U2NGJpdHMgPj0gNikgewogICAgICAgICAgICAgICAgICpvdXQrKyA9IFRPX0JBU0U2NChiYXNlNjRidWZmZXIgPj4gKGJhc2U2NGJpdHMtNikpOwogICAgICAgICAgICAgICAgIGJhc2U2NGJpdHMgLT0gNjsKQEAgLTQ3MDYsOSArNDY3NCw5IEBACiAgICAgaWYgKF9QeV9JU19BTElHTkVEKHAsIFNJWkVPRl9MT05HKSkgewogICAgICAgICAvKiBGYXN0IHBhdGgsIHNlZSBpbiBTVFJJTkdMSUIodXRmOF9kZWNvZGUpIGZvcgogICAgICAgICAgICBhbiBleHBsYW5hdGlvbi4gKi8KLSAgICAgICAgLyogSGVscCByZWdpc3RlciBhbGxvY2F0aW9uICovCi0gICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9wID0gcDsKLSAgICAgICAgcmVnaXN0ZXIgUHlfVUNTMSAqIHEgPSBkZXN0OworICAgICAgICAvKiBIZWxwIGFsbG9jYXRpb24gKi8KKyAgICAgICAgY29uc3QgY2hhciAqX3AgPSBwOworICAgICAgICBQeV9VQ1MxICogcSA9IGRlc3Q7CiAgICAgICAgIHdoaWxlIChfcCA8IGFsaWduZWRfZW5kKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKihjb25zdCB1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgaWYgKHZhbHVlICYgQVNDSUlfQ0hBUl9NQVNLKQpAQCAtNDczMSw4ICs0Njk5LDggQEAKICAgICAgICAgLyogRmFzdCBwYXRoLCBzZWUgaW4gU1RSSU5HTElCKHV0ZjhfZGVjb2RlKSBpbiBzdHJpbmdsaWIvY29kZWNzLmgKICAgICAgICAgICAgZm9yIGFuIGV4cGxhbmF0aW9uLiAqLwogICAgICAgICBpZiAoX1B5X0lTX0FMSUdORUQocCwgU0laRU9GX0xPTkcpKSB7Ci0gICAgICAgICAgICAvKiBIZWxwIHJlZ2lzdGVyIGFsbG9jYXRpb24gKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGNoYXIgKl9wID0gcDsKKyAgICAgICAgICAgIC8qIEhlbHAgYWxsb2NhdGlvbiAqLworICAgICAgICAgICAgY29uc3QgY2hhciAqX3AgPSBwOwogICAgICAgICAgICAgd2hpbGUgKF9wIDwgYWxpZ25lZF9lbmQpIHsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhbHVlID0gKih1bnNpZ25lZCBsb25nICopIF9wOwogICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmIEFTQ0lJX0NIQVJfTUFTSykKQEAgLTQ3NTcsMTAgKzQ3MjUsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgKmNvbnN1bWVkKQogewotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgY29uc3QgY2hhciAqZW5kID0gcyArIHNpemU7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7CiAKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKQEAgLTQ3ODEsMjkgKzQ3NDgsMjYgQEAKICAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcigodW5zaWduZWQgY2hhcilzWzBdKTsKICAgICB9CiAKLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICBvdXRwb3MgPSBhc2NpaV9kZWNvZGUocywgZW5kLCBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSk7Ci0gICAgcyArPSBvdXRwb3M7CisgICAgd3JpdGVyLnBvcyA9IGFzY2lpX2RlY29kZShzLCBlbmQsIHdyaXRlci5kYXRhKTsKKyAgICBzICs9IHdyaXRlci5wb3M7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgUHlfVUNTNCBjaDsKLSAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgaW50IGtpbmQgPSB3cml0ZXIua2luZDsKICAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpCi0gICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGY4X2RlY29kZSgmcywgZW5kLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh3cml0ZXIuYnVmZmVyKSkKKyAgICAgICAgICAgICAgICBjaCA9IGFzY2lpbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcyk7CisgICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsIHdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcyk7CiAgICAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgewotICAgICAgICAgICAgY2ggPSB1Y3MybGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV8yQllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGNoID0gdWNzMmxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOwotICAgICAgICAgICAgY2ggPSB1Y3M0bGliX3V0ZjhfZGVjb2RlKCZzLCBlbmQsCi0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV80QllURV9EQVRBKHVuaWNvZGUpLCAmb3V0cG9zKTsKKyAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGY4X2RlY29kZSgmcywgZW5kLCB3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MpOwogICAgICAgICB9CiAKICAgICAgICAgc3dpdGNoIChjaCkgewpAQCAtNDgyNywzNSArNDc5MSwzMSBAQAogICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zICsgY2ggLSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1dGYtOCIsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwgJm91dHBvcykpCisgICAgICAgICAgICAgICAgJndyaXRlcikpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgfQogCiBFbmQ6Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgaWYgKGNvbnN1bWVkKQogICAgICAgICAqY29uc3VtZWQgPSBzIC0gc3RhcnRzOwogCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHVuaWNvZGUsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKIG9uRXJyb3I6CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9YREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDg2NSw3ICs0ODI1LDcgQEAKICAgIHVzZWQgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIG9uIE1hYyBPUyBYLgogCiAgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyAodXNlCi0gICBQeU1lbV9GcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSwgb3IgTlVMTCBvbiBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4gKi8KKyAgIFB5TWVtX1Jhd0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpLCBvciBOVUxMIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yLiAqLwogCiB3Y2hhcl90KgogX1B5X0RlY29kZVVURjhfc3Vycm9nYXRlZXNjYXBlKGNvbnN0IGNoYXIgKnMsIFB5X3NzaXplX3Qgc2l6ZSkKQEAgLTQ4NzgsNyArNDgzOCw3IEBACiAgICAgICAgY2hhcmFjdGVyIGNvdW50ICovCiAgICAgaWYgKFBZX1NTSVpFX1RfTUFYIC8gc2l6ZW9mKHdjaGFyX3QpIDwgKHNpemUgKyAxKSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgdW5pY29kZSA9IFB5TWVtX01hbGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICB1bmljb2RlID0gUHlNZW1fUmF3TWFsbG9jKChzaXplICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghdW5pY29kZSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTUwMDEsMTcgKzQ5NjEsMTEgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp1bmljb2RlOworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEsICplOwotICAgIGludCBibyA9IDA7ICAgICAgIC8qIGFzc3VtZSBuYXRpdmUgb3JkZXJpbmcgYnkgZGVmYXVsdCAqLworICAgIGludCBsZSwgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KKyAgICBjb25zdCBjaGFyICplbmNvZGluZzsKICAgICBjb25zdCBjaGFyICplcnJtc2cgPSAiIjsKLSAgICAvKiBPZmZzZXRzIGZyb20gcSBmb3IgcmV0cmlldmluZyBieXRlcyBpbiB0aGUgcmlnaHQgb3JkZXIuICovCi0jaWZkZWYgQllURU9SREVSX0lTX0xJVFRMRV9FTkRJQU4KLSAgICBpbnQgaW9yZGVyW10gPSB7MCwgMSwgMiwgM307Ci0jZWxzZQotICAgIGludCBpb3JkZXJbXSA9IHszLCAyLCAxLCAwfTsKLSNlbmRpZgogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCkBAIC01MDI1LDEwNyArNDk3OSwxMTggQEAKICAgICAgICBieXRlIG9yZGVyIHNldHRpbmcgYWNjb3JkaW5nbHkuIEluIG5hdGl2ZSBtb2RlLCB0aGUgbGVhZGluZyBCT00KICAgICAgICBtYXJrIGlzIHNraXBwZWQsIGluIGFsbCBvdGhlciBtb2RlcywgaXQgaXMgY29waWVkIHRvIHRoZSBvdXRwdXQKICAgICAgICBzdHJlYW0gYXMtaXMgKGdpdmluZyBhIFpXTkJTUCBjaGFyYWN0ZXIpLiAqLwotICAgIGlmIChibyA9PSAwKSB7Ci0gICAgICAgIGlmIChzaXplID49IDQpIHsKLSAgICAgICAgICAgIGNvbnN0IFB5X1VDUzQgYm9tID0gKHFbaW9yZGVyWzNdXSA8PCAyNCkgfCAocVtpb3JkZXJbMl1dIDw8IDE2KSB8Ci0gICAgICAgICAgICAgICAgKHFbaW9yZGVyWzFdXSA8PCA4KSB8IHFbaW9yZGVyWzBdXTsKLSNpZmRlZiBCWVRFT1JERVJfSVNfTElUVExFX0VORElBTgotICAgICAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChib20gPT0gMHhGRkZFMDAwMCkgewotICAgICAgICAgICAgICAgIHEgKz0gNDsKLSAgICAgICAgICAgICAgICBibyA9IDE7Ci0gICAgICAgICAgICB9CisgICAgaWYgKGJvID09IDAgJiYgc2l6ZSA+PSA0KSB7CisgICAgICAgIFB5X1VDUzQgYm9tID0gKHFbM10gPDwgMjQpIHwgKHFbMl0gPDwgMTYpIHwgKHFbMV0gPDwgOCkgfCBxWzBdOworICAgICAgICBpZiAoYm9tID09IDB4MDAwMEZFRkYpIHsKKyAgICAgICAgICAgIGJvID0gLTE7CisgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYm9tID09IDB4RkZGRTAwMDApIHsKKyAgICAgICAgICAgIGJvID0gMTsKKyAgICAgICAgICAgIHEgKz0gNDsKKyAgICAgICAgfQorICAgICAgICBpZiAoYnl0ZW9yZGVyKQorICAgICAgICAgICAgKmJ5dGVvcmRlciA9IGJvOworICAgIH0KKworICAgIGlmIChxID09IGUpIHsKKyAgICAgICAgaWYgKGNvbnN1bWVkKQorICAgICAgICAgICAgKmNvbnN1bWVkID0gc2l6ZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisgICAgfQorCisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgbGUgPSBibyA8IDA7CiAjZWxzZQotICAgICAgICAgICAgaWYgKGJvbSA9PSAweDAwMDBGRUZGKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGJvbSA9PSAweEZGRkUwMDAwKSB7Ci0gICAgICAgICAgICAgICAgcSArPSA0OwotICAgICAgICAgICAgICAgIGJvID0gLTE7Ci0gICAgICAgICAgICB9CisgICAgbGUgPSBibyA8PSAwOwogI2VuZGlmCisgICAgZW5jb2RpbmcgPSBsZSA/ICJ1dGYtMzItbGUiIDogInV0Zi0zMi1iZSI7CisKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSAoZSAtIHEgKyAzKSAvIDQ7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCB3cml0ZXIubWluX2xlbmd0aCwgMTI3KSA9PSAtMSkKKyAgICAgICAgZ290byBvbkVycm9yOworCisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgUHlfVUNTNCBjaCA9IDA7CisgICAgICAgIFB5X1VDUzQgbWF4Y2ggPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUod3JpdGVyLmJ1ZmZlcik7CisKKyAgICAgICAgaWYgKGUgLSBxID49IDQpIHsKKyAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQga2luZCA9IHdyaXRlci5raW5kOworICAgICAgICAgICAgdm9pZCAqZGF0YSA9IHdyaXRlci5kYXRhOworICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGFzdCA9IGUgLSA0OworICAgICAgICAgICAgUHlfc3NpemVfdCBwb3MgPSB3cml0ZXIucG9zOworICAgICAgICAgICAgaWYgKGxlKSB7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBjaCA9IChxWzNdIDw8IDI0KSB8IChxWzJdIDw8IDE2KSB8IChxWzFdIDw8IDgpIHwgcVswXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoID4gbWF4Y2gpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGtpbmQgIT0gUHlVbmljb2RlXzFCWVRFX0tJTkQgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgcG9zKyssIGNoKTsKKyAgICAgICAgICAgICAgICAgICAgcSArPSA0OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHEgPD0gbGFzdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKHFbMF0gPDwgMjQpIHwgKHFbMV0gPDwgMTYpIHwgKHFbMl0gPDwgOCkgfCBxWzNdOworICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPiBtYXhjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBpZiAoa2luZCAhPSBQeVVuaWNvZGVfMUJZVEVfS0lORCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoY2gpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBwb3MrKywgY2gpOworICAgICAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAocSA8PSBsYXN0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlci5wb3MgPSBwb3M7CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICBpZiAoYm8gPT0gLTEpIHsKLSAgICAgICAgLyogZm9yY2UgTEUgKi8KLSAgICAgICAgaW9yZGVyWzBdID0gMDsKLSAgICAgICAgaW9yZGVyWzFdID0gMTsKLSAgICAgICAgaW9yZGVyWzJdID0gMjsKLSAgICAgICAgaW9yZGVyWzNdID0gMzsKLSAgICB9Ci0gICAgZWxzZSBpZiAoYm8gPT0gMSkgewotICAgICAgICAvKiBmb3JjZSBCRSAqLwotICAgICAgICBpb3JkZXJbMF0gPSAzOwotICAgICAgICBpb3JkZXJbMV0gPSAyOwotICAgICAgICBpb3JkZXJbMl0gPSAxOwotICAgICAgICBpb3JkZXJbM10gPSAwOwotICAgIH0KLQotICAgIC8qIFRoaXMgbWlnaHQgYmUgb25lIHRvIG11Y2gsIGJlY2F1c2Ugb2YgYSBCT00gKi8KLSAgICB1bmljb2RlID0gUHlVbmljb2RlX05ldygoc2l6ZSszKS80LCAxMjcpOwotICAgIGlmICghdW5pY29kZSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHVuaWNvZGU7Ci0gICAgb3V0cG9zID0gMDsKLQotICAgIHdoaWxlIChxIDwgZSkgewotICAgICAgICBQeV9VQ1M0IGNoOwotICAgICAgICAvKiByZW1haW5pbmcgYnl0ZXMgYXQgdGhlIGVuZD8gKHNpemUgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA0KSAqLwotICAgICAgICBpZiAoZS1xPDQpIHsKLSAgICAgICAgICAgIGlmIChjb25zdW1lZCkKKyAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgZXJybXNnID0gImNvZGUgcG9pbnQgaW4gc3Vycm9nYXRlIGNvZGUgcG9pbnQgcmFuZ2UoMHhkODAwLCAweGUwMDApIjsKKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoY2ggPD0gbWF4Y2gpIHsKKyAgICAgICAgICAgIGlmIChxID09IGUgfHwgY29uc3VtZWQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiByZW1haW5pbmcgYnl0ZXMgYXQgdGhlIGVuZD8gKHNpemUgc2hvdWxkIGJlIGRpdmlzaWJsZSBieSA0KSAqLwogICAgICAgICAgICAgZXJybXNnID0gInRydW5jYXRlZCBkYXRhIjsKLSAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKS1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9ICgoY29uc3QgY2hhciAqKWUpLXN0YXJ0czsKLSAgICAgICAgICAgIGdvdG8gdXRmMzJFcnJvcjsKLSAgICAgICAgICAgIC8qIFRoZSByZW1haW5pbmcgaW5wdXQgY2hhcnMgYXJlIGlnbm9yZWQgaWYgdGhlIGNhbGxiYWNrCi0gICAgICAgICAgICAgICBjaG9vc2VzIHRvIHNraXAgdGhlIGlucHV0ICovCisgICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSkgLSBzdGFydHM7CisgICAgICAgICAgICBlbmRpbnBvcyA9ICgoY29uc3QgY2hhciAqKWUpIC0gc3RhcnRzOwogICAgICAgICB9Ci0gICAgICAgIGNoID0gKHFbaW9yZGVyWzNdXSA8PCAyNCkgfCAocVtpb3JkZXJbMl1dIDw8IDE2KSB8Ci0gICAgICAgICAgICAocVtpb3JkZXJbMV1dIDw8IDgpIHwgcVtpb3JkZXJbMF1dOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGlmIChjaCA8IDB4MTEwMDAwKSB7CisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgICAgICBxICs9IDQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlcnJtc2cgPSAiY29kZSBwb2ludCBub3QgaW4gcmFuZ2UoMHgxMTAwMDApIjsKKyAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSAoKGNvbnN0IGNoYXIgKilxKSAtIHN0YXJ0czsKKyAgICAgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcyArIDQ7CisgICAgICAgIH0KIAotICAgICAgICBpZiAoY2ggPj0gMHgxMTAwMDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGVycm1zZyA9ICJjb2RlcG9pbnQgbm90IGluIHJhbmdlKDB4MTEwMDAwKSI7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gKChjb25zdCBjaGFyICopcSktc3RhcnRzOwotICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzQ7Ci0gICAgICAgICAgICBnb3RvIHV0ZjMyRXJyb3I7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdW5pY29kZSwgJm91dHBvcywgY2gpIDwgMCkKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgcSArPSA0OwotICAgICAgICBjb250aW51ZTsKLSAgICAgIHV0ZjMyRXJyb3I6Ci0gICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgLyogVGhlIHJlbWFpbmluZyBpbnB1dCBjaGFycyBhcmUgaWdub3JlZCBpZiB0aGUgY2FsbGJhY2sKKyAgICAgICAgICAgY2hvb3NlcyB0byBza2lwIHRoZSBpbnB1dCAqLworICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAogICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKLSAgICAgICAgICAgICAgICAidXRmMzIiLCBlcnJtc2csCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsIGVycm1zZywKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAoY29uc3QgY2hhciAqKikmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgKGNvbnN0IGNoYXIgKiopJnEsCi0gICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChieXRlb3JkZXIpCi0gICAgICAgICpieXRlb3JkZXIgPSBibzsKLQogICAgIGlmIChjb25zdW1lZCkKICAgICAgICAgKmNvbnN1bWVkID0gKGNvbnN0IGNoYXIgKilxLXN0YXJ0czsKIAotICAgIC8qIEFkanVzdCBsZW5ndGggKi8KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnVuaWNvZGUsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0KICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh1bmljb2RlKTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9ERUNSRUYodW5pY29kZSk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CkBAIC01MTQzLDExICs1MTA4LDE1IEBACiAgICAgdW5zaWduZWQgY2hhciAqcDsKICAgICBQeV9zc2l6ZV90IG5zaXplLCBpOwogICAgIC8qIE9mZnNldHMgZnJvbSBwIGZvciBzdG9yaW5nIGJ5dGUgcGFpcnMgaW4gdGhlIHJpZ2h0IG9yZGVyLiAqLwotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIGludCBpb3JkZXJbXSA9IHswLCAxLCAyLCAzfTsKICNlbHNlCiAgICAgaW50IGlvcmRlcltdID0gezMsIDIsIDEsIDB9OwogI2VuZGlmCisgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7CisgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CisgICAgUHlPYmplY3QgKmV4YyA9IE5VTEw7CisgICAgUHlPYmplY3QgKnJlcCA9IE5VTEw7CiAKICNkZWZpbmUgU1RPUkVDSEFSKENIKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTUxNzksNyArNTE0OCw3IEBACiAgICAgaWYgKGJ5dGVvcmRlciA9PSAwKQogICAgICAgICBTVE9SRUNIQVIoMHhGRUZGKTsKICAgICBpZiAobGVuID09IDApCi0gICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgcmV0dXJuIHY7CiAKICAgICBpZiAoYnl0ZW9yZGVyID09IC0xKSB7CiAgICAgICAgIC8qIGZvcmNlIExFICovCkBAIC01MTg3LDYgKzUxNTYsNyBAQAogICAgICAgICBpb3JkZXJbMV0gPSAxOwogICAgICAgICBpb3JkZXJbMl0gPSAyOwogICAgICAgICBpb3JkZXJbM10gPSAzOworICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzItbGUiOwogICAgIH0KICAgICBlbHNlIGlmIChieXRlb3JkZXIgPT0gMSkgewogICAgICAgICAvKiBmb3JjZSBCRSAqLwpAQCAtNTE5NCwxMyArNTE2NCwxMDMgQEAKICAgICAgICAgaW9yZGVyWzFdID0gMjsKICAgICAgICAgaW9yZGVyWzJdID0gMTsKICAgICAgICAgaW9yZGVyWzNdID0gMDsKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTMyLWJlIjsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBlbmNvZGluZyA9ICJ1dGYtMzIiOworCisgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAgICAgU1RPUkVDSEFSKFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKTsKKyAgICAgICAgcmV0dXJuIHY7CiAgICAgfQogCi0gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotICAgICAgICBTVE9SRUNIQVIoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSkpOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47KSB7CisgICAgICAgIFB5X3NzaXplX3QgcmVwc2l6ZSwgbW9yZXVuaXRzOworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7CisgICAgICAgIGkrKzsKKyAgICAgICAgYXNzZXJ0KGNoIDw9IE1BWF9VTklDT0RFKTsKKyAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKKyAgICAgICAgICAgIFNUT1JFQ0hBUihjaCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQogCi0gIGRvbmU6CisgICAgICAgIHJlcCA9IHVuaWNvZGVfZW5jb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICBlbmNvZGluZywgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiLAorICAgICAgICAgICAgICAgIHN0ciwgJmV4YywgaS0xLCBpLCAmaSk7CisKKyAgICAgICAgaWYgKCFyZXApCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGlmIChQeUJ5dGVzX0NoZWNrKHJlcCkpIHsKKyAgICAgICAgICAgIHJlcHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKHJlcCk7CisgICAgICAgICAgICBpZiAocmVwc2l6ZSAmIDMpIHsKKyAgICAgICAgICAgICAgICByYWlzZV9lbmNvZGVfZXhjZXB0aW9uKCZleGMsIGVuY29kaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBpIC0gMSwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIik7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgLyA0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9DaGVjayhyZXApKTsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkocmVwKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIG1vcmV1bml0cyA9IHJlcHNpemUgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXApOworICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfSVNfQVNDSUkocmVwKSkgeworICAgICAgICAgICAgICAgIHJhaXNlX2VuY29kZV9leGNlcHRpb24oJmV4YywgZW5jb2RpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIGkgLSAxLCBpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogZm91ciBieXRlcyBhcmUgcmVzZXJ2ZWQgZm9yIGVhY2ggc3Vycm9nYXRlICovCisgICAgICAgIGlmIChtb3JldW5pdHMgPiAxKSB7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG91dHBvcyA9IHAgLSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpOworICAgICAgICAgICAgUHlfc3NpemVfdCBtb3JlYnl0ZXMgPSA0ICogKG1vcmV1bml0cyAtIDEpOworICAgICAgICAgICAgaWYgKFB5Qnl0ZXNfR0VUX1NJWkUodikgPiBQWV9TU0laRV9UX01BWCAtIG1vcmVieXRlcykgeworICAgICAgICAgICAgICAgIC8qIGludGVnZXIgb3ZlcmZsb3cgKi8KKyAgICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoX1B5Qnl0ZXNfUmVzaXplKCZ2LCBQeUJ5dGVzX0dFVF9TSVpFKHYpICsgbW9yZWJ5dGVzKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHAgPSAodW5zaWduZWQgY2hhciopIFB5Qnl0ZXNfQVNfU1RSSU5HKHYpICsgb3V0cG9zOworICAgICAgICB9CisKKyAgICAgICAgaWYgKFB5Qnl0ZXNfQ2hlY2socmVwKSkgeworICAgICAgICAgICAgUHlfTUVNQ1BZKHAsIFB5Qnl0ZXNfQVNfU1RSSU5HKHJlcCksIHJlcHNpemUpOworICAgICAgICAgICAgcCArPSByZXBzaXplOworICAgICAgICB9IGVsc2UgLyogcmVwIGlzIHVuaWNvZGUgKi8geworICAgICAgICAgICAgY29uc3QgUHlfVUNTMSAqcmVwZGF0YTsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfS0lORChyZXApID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgICAgIHJlcGRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXApOworICAgICAgICAgICAgd2hpbGUgKHJlcHNpemUtLSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSAqcmVwZGF0YSsrOworICAgICAgICAgICAgICAgIFNUT1JFQ0hBUihjaCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBQeV9DTEVBUihyZXApOworICAgIH0KKworICAgIC8qIEN1dCBiYWNrIHRvIHNpemUgYWN0dWFsbHkgbmVlZGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3IsIGZvciBleGFtcGxlLAorICAgICAgIGVuY29kaW5nIG9mIGEgc3RyaW5nIGNvbnRhaW5pbmcgaXNvbGF0ZWQgc3Vycm9nYXRlcyBhbmQgdGhlICdpZ25vcmUnCisgICAgICAgaGFuZGxlciBpcyB1c2VkLiAqLworICAgIG5zaXplID0gcCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgaWYgKG5zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUodikpCisgICAgICBfUHlCeXRlc19SZXNpemUoJnYsIG5zaXplKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiB2OworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlcCk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICBQeV9YREVDUkVGKHYpOworICAgIHJldHVybiBOVUxMOwogI3VuZGVmIFNUT1JFQ0hBUgogfQogCkBAIC01MjQ2LDE0ICs1MzA2LDE0IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeV9zc2l6ZV90IG91dHBvczsKLSAgICBQeU9iamVjdCAqdW5pY29kZTsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpxLCAqZTsKICAgICBpbnQgYm8gPSAwOyAgICAgICAvKiBhc3N1bWUgbmF0aXZlIG9yZGVyaW5nIGJ5IGRlZmF1bHQgKi8KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nOwogICAgIGNvbnN0IGNoYXIgKmVycm1zZyA9ICIiOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOwogCiAgICAgcSA9ICh1bnNpZ25lZCBjaGFyICopczsKICAgICBlID0gcSArIHNpemU7CkBAIC01Mjg1LDQwICs1MzQ1LDQyIEBACiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KIAotI2lmZGVmIEJZVEVPUkRFUl9JU19MSVRUTEVfRU5ESUFOCisjaWYgUFlfTElUVExFX0VORElBTgogICAgIG5hdGl2ZV9vcmRlcmluZyA9IGJvIDw9IDA7CisgICAgZW5jb2RpbmcgPSBibyA8PSAwID8gInV0Zi0xNi1sZSIgOiAidXRmLTE2LWJlIjsKICNlbHNlCiAgICAgbmF0aXZlX29yZGVyaW5nID0gYm8gPj0gMDsKKyAgICBlbmNvZGluZyA9IGJvID49IDAgPyAidXRmLTE2LWJlIiA6ICJ1dGYtMTYtbGUiOwogI2VuZGlmCiAKICAgICAvKiBOb3RlOiBzaXplIHdpbGwgYWx3YXlzIGJlIGxvbmdlciB0aGFuIHRoZSByZXN1bHRpbmcgVW5pY29kZQogICAgICAgIGNoYXJhY3RlciBjb3VudCAqLwotICAgIHVuaWNvZGUgPSBQeVVuaWNvZGVfTmV3KChlIC0gcSArIDEpIC8gMiwgMTI3KTsKLSAgICBpZiAoIXVuaWNvZGUpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgIF9QeVVuaWNvZGVXcml0ZXJfSW5pdCgmd3JpdGVyKTsKKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChlIC0gcSArIDEpIC8gMjsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICBvdXRwb3MgPSAwOwogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIFB5X1VDUzQgY2ggPSAwOwogICAgICAgICBpZiAoZSAtIHEgPj0gMikgewotICAgICAgICAgICAgaW50IGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKKyAgICAgICAgICAgIGludCBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgICAgICAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkodW5pY29kZSkpCisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh3cml0ZXIuYnVmZmVyKSkKICAgICAgICAgICAgICAgICAgICAgY2ggPSBhc2NpaWxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzEqKXdyaXRlci5kYXRhLCAmd3JpdGVyLnBvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY2ggPSB1Y3MxbGliX3V0ZjE2X2RlY29kZSgmcSwgZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfMUJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMSopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdGl2ZV9vcmRlcmluZyk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKICAgICAgICAgICAgICAgICBjaCA9IHVjczJsaWJfdXRmMTZfZGVjb2RlKCZxLCBlLAotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlXzJCWVRFX0RBVEEodW5pY29kZSksICZvdXRwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAoUHlfVUNTMiopd3JpdGVyLmRhdGEsICZ3cml0ZXIucG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgbmF0aXZlX29yZGVyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOwogICAgICAgICAgICAgICAgIGNoID0gdWNzNGxpYl91dGYxNl9kZWNvZGUoJnEsIGUsCi0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfNEJZVEVfREFUQSh1bmljb2RlKSwgJm91dHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1M0Kil3cml0ZXIuZGF0YSwgJndyaXRlci5wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBuYXRpdmVfb3JkZXJpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MzU0LDIzICs1NDE2LDIyIEBACiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAyOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ1bmljb2RlLCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIGNoKSA8IDApCiAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLAogICAgICAgICAgICAgICAgICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgInV0ZjE2IiwgZXJybXNnLAorICAgICAgICAgICAgICAgIGVuY29kaW5nLCBlcnJtc2csCiAgICAgICAgICAgICAgICAgJnN0YXJ0cywKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKikmZSwKICAgICAgICAgICAgICAgICAmc3RhcnRpbnBvcywKICAgICAgICAgICAgICAgICAmZW5kaW5wb3MsCiAgICAgICAgICAgICAgICAgJmV4YywKICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqKikmcSwKLSAgICAgICAgICAgICAgICAmdW5pY29kZSwKLSAgICAgICAgICAgICAgICAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKQEAgLTUzNzgsMTYgKzU0MzksMTIgQEAKICAgICBpZiAoY29uc3VtZWQpCiAgICAgICAgICpjb25zdW1lZCA9IChjb25zdCBjaGFyICopcS1zdGFydHM7CiAKLSAgICAvKiBBZGp1c3QgbGVuZ3RoICovCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwotCiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodW5pY29kZSk7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfREVDUkVGKHVuaWNvZGUpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTQwMywxMyArNTQ2MCwxNyBAQAogICAgIFB5X3NzaXplX3QgbGVuOwogICAgIFB5T2JqZWN0ICp2OwogICAgIHVuc2lnbmVkIHNob3J0ICpvdXQ7Ci0gICAgUHlfc3NpemVfdCBieXRlc2l6ZTsKICAgICBQeV9zc2l6ZV90IHBhaXJzOwotI2lmZGVmIFdPUkRTX0JJR0VORElBTgorI2lmIFBZX0JJR19FTkRJQU4KICAgICBpbnQgbmF0aXZlX29yZGVyaW5nID0gYnl0ZW9yZGVyID49IDA7CiAjZWxzZQogICAgIGludCBuYXRpdmVfb3JkZXJpbmcgPSBieXRlb3JkZXIgPD0gMDsKICNlbmRpZgorICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nOworICAgIFB5X3NzaXplX3QgbnNpemUsIHBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKKyAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmVwID0gTlVMTDsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHN0cikpIHsKICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKQEAgLTU0MzEsOCArNTQ5Miw4IEBACiAgICAgfQogICAgIGlmIChsZW4gPiBQWV9TU0laRV9UX01BWCAvIDIgLSBwYWlycyAtIChieXRlb3JkZXIgPT0gMCkpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwotICAgIGJ5dGVzaXplID0gKGxlbiArIHBhaXJzICsgKGJ5dGVvcmRlciA9PSAwKSkgKiAyOwotICAgIHYgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVzaXplKTsKKyAgICBuc2l6ZSA9IGxlbiArIHBhaXJzICsgKGJ5dGVvcmRlciA9PSAwKTsKKyAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBuc2l6ZSAqIDIpOwogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC01NDQ0LDI1ICs1NTA1LDEwNyBAQAogICAgIGlmIChsZW4gPT0gMCkKICAgICAgICAgZ290byBkb25lOwogCi0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDogewotICAgICAgICB1Y3MxbGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1MxICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDogewotICAgICAgICB1Y3MybGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1MyICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDogewotICAgICAgICB1Y3M0bGliX3V0ZjE2X2VuY29kZShvdXQsIChjb25zdCBQeV9VQ1M0ICopZGF0YSwgbGVuLCBuYXRpdmVfb3JkZXJpbmcpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYXNzZXJ0KDApOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIHVjczFsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1MxICopZGF0YSwgbGVuLCAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICBnb3RvIGRvbmU7CiAgICAgfQogCisgICAgaWYgKGJ5dGVvcmRlciA8IDApCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0xNi1sZSI7CisgICAgZWxzZSBpZiAoYnl0ZW9yZGVyID4gMCkKKyAgICAgICAgZW5jb2RpbmcgPSAidXRmLTE2LWJlIjsKKyAgICBlbHNlCisgICAgICAgIGVuY29kaW5nID0gInV0Zi0xNiI7CisKKyAgICBwb3MgPSAwOworICAgIHdoaWxlIChwb3MgPCBsZW4pIHsKKyAgICAgICAgUHlfc3NpemVfdCByZXBzaXplLCBtb3JldW5pdHM7CisKKyAgICAgICAgaWYgKGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgIHBvcyArPSB1Y3MybGliX3V0ZjE2X2VuY29kZSgoY29uc3QgUHlfVUNTMiAqKWRhdGEgKyBwb3MsIGxlbiAtIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0LCBuYXRpdmVfb3JkZXJpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYXNzZXJ0KGtpbmQgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQpOworICAgICAgICAgICAgcG9zICs9IHVjczRsaWJfdXRmMTZfZW5jb2RlKChjb25zdCBQeV9VQ1M0ICopZGF0YSArIHBvcywgbGVuIC0gcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvdXQsIG5hdGl2ZV9vcmRlcmluZyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBvcyA9PSBsZW4pCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICByZXAgPSB1bmljb2RlX2VuY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKKyAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgZW5jb2RpbmcsICJzdXJyb2dhdGVzIG5vdCBhbGxvd2VkIiwKKyAgICAgICAgICAgICAgICBzdHIsICZleGMsIHBvcywgcG9zICsgMSwgJnBvcyk7CisgICAgICAgIGlmICghcmVwKQorICAgICAgICAgICAgZ290byBlcnJvcjsKKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICByZXBzaXplID0gUHlCeXRlc19HRVRfU0laRShyZXApOworICAgICAgICAgICAgaWYgKHJlcHNpemUgJiAxKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcG9zIC0gMSwgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSAvIDI7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0NoZWNrKHJlcCkpOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShyZXApIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgbW9yZXVuaXRzID0gcmVwc2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcCk7CisgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9JU19BU0NJSShyZXApKSB7CisgICAgICAgICAgICAgICAgcmFpc2VfZW5jb2RlX2V4Y2VwdGlvbigmZXhjLCBlbmNvZGluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcG9zIC0gMSwgcG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cnJvZ2F0ZXMgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogdHdvIGJ5dGVzIGFyZSByZXNlcnZlZCBmb3IgZWFjaCBzdXJyb2dhdGUgKi8KKyAgICAgICAgaWYgKG1vcmV1bml0cyA+IDEpIHsKKyAgICAgICAgICAgIFB5X3NzaXplX3Qgb3V0cG9zID0gb3V0IC0gKHVuc2lnbmVkIHNob3J0KikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgICAgICAgICBQeV9zc2l6ZV90IG1vcmVieXRlcyA9IDIgKiAobW9yZXVuaXRzIC0gMSk7CisgICAgICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRSh2KSA+IFBZX1NTSVpFX1RfTUFYIC0gbW9yZWJ5dGVzKSB7CisgICAgICAgICAgICAgICAgLyogaW50ZWdlciBvdmVyZmxvdyAqLworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChfUHlCeXRlc19SZXNpemUoJnYsIFB5Qnl0ZXNfR0VUX1NJWkUodikgKyBtb3JlYnl0ZXMpIDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgb3V0ID0gKHVuc2lnbmVkIHNob3J0KikgUHlCeXRlc19BU19TVFJJTkcodikgKyBvdXRwb3M7CisgICAgICAgIH0KKworICAgICAgICBpZiAoUHlCeXRlc19DaGVjayhyZXApKSB7CisgICAgICAgICAgICBQeV9NRU1DUFkob3V0LCBQeUJ5dGVzX0FTX1NUUklORyhyZXApLCByZXBzaXplKTsKKyAgICAgICAgICAgIG91dCArPSBtb3JldW5pdHM7CisgICAgICAgIH0gZWxzZSAvKiByZXAgaXMgdW5pY29kZSAqLyB7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQocmVwKSA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCk7CisgICAgICAgICAgICB1Y3MxbGliX3V0ZjE2X2VuY29kZShQeVVuaWNvZGVfMUJZVEVfREFUQShyZXApLCByZXBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm91dCwgbmF0aXZlX29yZGVyaW5nKTsKKyAgICAgICAgfQorCisgICAgICAgIFB5X0NMRUFSKHJlcCk7CisgICAgfQorCisgICAgLyogQ3V0IGJhY2sgdG8gc2l6ZSBhY3R1YWxseSBuZWVkZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IGZvciwgZm9yIGV4YW1wbGUsCisgICAgZW5jb2Rpbmcgb2YgYSBzdHJpbmcgY29udGFpbmluZyBpc29sYXRlZCBzdXJyb2dhdGVzIGFuZCB0aGUgJ2lnbm9yZScgaGFuZGxlcgorICAgIGlzIHVzZWQuICovCisgICAgbnNpemUgPSAodW5zaWduZWQgY2hhciopIG91dCAtICh1bnNpZ25lZCBjaGFyKikgUHlCeXRlc19BU19TVFJJTkcodik7CisgICAgaWYgKG5zaXplICE9IFB5Qnl0ZXNfR0VUX1NJWkUodikpCisgICAgICBfUHlCeXRlc19SZXNpemUoJnYsIG5zaXplKTsKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOwogICBkb25lOgogICAgIHJldHVybiB2OworICBlcnJvcjoKKyAgICBQeV9YREVDUkVGKHJlcCk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICBQeV9YREVDUkVGKHYpOworICAgIHJldHVybiBOVUxMOworI3VuZGVmIFNUT1JFQ0hBUgogfQogCiBQeU9iamVjdCAqCkBAIC01NTUzLDI3ICs1Njk2LDI2IEBACiAgICAgY29uc3QgY2hhciAqc3RhcnRzID0gczsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CiAgICAgUHlfc3NpemVfdCBlbmRpbnBvczsKLSAgICBQeU9iamVjdCAqdjsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKICAgICBjb25zdCBjaGFyICplbmQ7CiAgICAgY2hhciogbWVzc2FnZTsKICAgICBQeV9VQ1M0IGNociA9IDB4ZmZmZmZmZmY7IC8qIGluIGNhc2UgJ2dldGNvZGUnIG1lc3NlcyB1cCAqLwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogICAgIFB5X3NzaXplX3QgbGVuOwotICAgIFB5X3NzaXplX3QgaTsKIAogICAgIGxlbiA9IGxlbmd0aF9vZl9lc2NhcGVkX2FzY2lpX3N0cmluZyhzLCBzaXplKTsKKyAgICBpZiAobGVuID09IDApCisgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogCiAgICAgLyogQWZ0ZXIgbGVuZ3RoX29mX2VzY2FwZWRfYXNjaWlfc3RyaW5nKCkgdGhlcmUgYXJlIHR3byBhbHRlcm5hdGl2ZXMsCiAgICAgICAgZWl0aGVyIHRoZSBzdHJpbmcgaXMgcHVyZSBBU0NJSSB3aXRoIG5hbWVkIGVzY2FwZXMgbGlrZSBcbiwgZXRjLgogICAgICAgIGFuZCB3ZSBkZXRlcm1pbmVkIGl0J3MgZXhhY3Qgc2l6ZSAoY29tbW9uIGNhc2UpCiAgICAgICAgb3IgaXQgY29udGFpbnMgXHgsIFx1LCAuLi4gZXNjYXBlIHNlcXVlbmNlcy4gIHRoZW4gd2UgY3JlYXRlIGEKICAgICAgICBsZWdhY3kgd2NoYXIgc3RyaW5nIGFuZCByZXNpemUgaXQgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLiAqLwotICAgIGlmIChsZW4gPj0gMCkgewotICAgICAgICB2ID0gUHlVbmljb2RlX05ldyhsZW4sIDEyNyk7Ci0gICAgICAgIGlmICghdikKLSAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9LSU5EKHYpID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgaWYgKGxlbiA+IDApIHsKKyAgICAgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBsZW47CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICAvKiBFc2NhcGVkIHN0cmluZ3Mgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZwpAQCAtNTU4MSwxNSArNTcyMywxMSBAQAogICAgICAgICAgICBsZW5ndGggYWZ0ZXIgY29udmVyc2lvbiB0byB0aGUgdHJ1ZSB2YWx1ZS4KICAgICAgICAgICAgKGJ1dCBpZiB0aGUgZXJyb3IgY2FsbGJhY2sgcmV0dXJucyBhIGxvbmcgcmVwbGFjZW1lbnQgc3RyaW5nCiAgICAgICAgICAgIHdlJ2xsIGhhdmUgdG8gYWxsb2NhdGUgbW9yZSBzcGFjZSkgKi8KLSAgICAgICAgdiA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICAgICAgaWYgKCF2KQotICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBsZW4gPSBzaXplOworICAgICAgICB3cml0ZXIubWluX2xlbmd0aCA9IHNpemU7CiAgICAgfQogCiAgICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgaSA9IDA7CisgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKICAgICBlbmQgPSBzICsgc2l6ZTsKIAogICAgIHdoaWxlIChzIDwgZW5kKSB7CkBAIC01NTk3LDEzICs1NzM1LDExIEBACiAgICAgICAgIFB5X1VDUzQgeDsKICAgICAgICAgaW50IGRpZ2l0czsKIAotICAgICAgICAvKiBUaGUgb25seSBjYXNlIGluIHdoaWNoIGkgPT0gYXNjaWlfbGVuZ3RoIGlzIGEgYmFja3NsYXNoCi0gICAgICAgICAgIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gKi8KLSAgICAgICAgYXNzZXJ0KGkgPD0gbGVuKTsKLQogICAgICAgICAvKiBOb24tZXNjYXBlIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIFVuaWNvZGUgb3JkaW5hbHMgKi8KICAgICAgICAgaWYgKCpzICE9ICdcXCcpIHsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZpLCAodW5zaWduZWQgY2hhcikgKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzOworICAgICAgICAgICAgcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTYxNSwxOCArNTc1MSwxNCBAQAogICAgICAgICBpZiAocyA+IGVuZCkKICAgICAgICAgICAgIGMgPSAnXDAnOyAvKiBJbnZhbGlkIGFmdGVyIFwgKi8KIAotICAgICAgICAvKiBUaGUgb25seSBjYXNlIGluIHdoaWNoIGkgPT0gYXNjaWlfbGVuZ3RoIGlzIGEgYmFja3NsYXNoCi0gICAgICAgICAgIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4gKi8KLSAgICAgICAgYXNzZXJ0KGkgPCBsZW4gfHwgKGkgPT0gbGVuICYmIGMgPT0gJ1xuJykpOwotCiAgICAgICAgIHN3aXRjaCAoYykgewogCiAgICAgICAgICAgICAvKiBceCBlc2NhcGVzICovCi0jZGVmaW5lIFdSSVRFQ0hBUihjaCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZpLCBjaCkgPCAwKSAgICBcCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIH13aGlsZSgwKQorI2RlZmluZSBXUklURUNIQVIoY2gpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSgmd3JpdGVyLCAoY2gpKSA8IDApICAgIFwKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gd2hpbGUoMCkKIAogICAgICAgICBjYXNlICdcbic6IGJyZWFrOwogICAgICAgICBjYXNlICdcXCc6IFdSSVRFQ0hBUignXFwnKTsgYnJlYWs7CkBAIC01NzUwLDM1ICs1ODgyLDMyIEBACiAKICAgICAgIGVycm9yOgogICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1bmljb2RlZXNjYXBlIiwgbWVzc2FnZSwKICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAmdiwgJmkpKQorICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KTsKICAgICAgICAgY29udGludWU7CiAgICAgfQogI3VuZGVmIFdSSVRFQ0hBUgogCi0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ2LCBpKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgdWNuaGFzaEVycm9yOgogICAgIFB5RXJyX1NldFN0cmluZygKICAgICAgICAgUHlFeGNfVW5pY29kZUVycm9yLAogICAgICAgICAiXFxOIGVzY2FwZXMgbm90IHN1cHBvcnRlZCAoY2FuJ3QgbG9hZCB1bmljb2RlZGF0YSBtb2R1bGUpIgogICAgICAgICApOwotICAgIFB5X1hERUNSRUYodik7CisgICAgX1B5VW5pY29kZVdyaXRlcl9EZWFsbG9jKCZ3cml0ZXIpOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7CiAgICAgcmV0dXJuIE5VTEw7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNTkzMSwyMyArNjA2MCwyMiBAQAogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7CiAgICAgUHlfc3NpemVfdCBzdGFydGlucG9zOwogICAgIFB5X3NzaXplX3QgZW5kaW5wb3M7Ci0gICAgUHlfc3NpemVfdCBvdXRwb3M7Ci0gICAgUHlPYmplY3QgKnY7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgY29uc3QgY2hhciAqZW5kOwogICAgIGNvbnN0IGNoYXIgKmJzOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogCisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisKICAgICAvKiBFc2NhcGVkIHN0cmluZ3Mgd2lsbCBhbHdheXMgYmUgbG9uZ2VyIHRoYW4gdGhlIHJlc3VsdGluZwogICAgICAgIFVuaWNvZGUgc3RyaW5nLCBzbyB3ZSBzdGFydCB3aXRoIHNpemUgaGVyZSBhbmQgdGhlbiByZWR1Y2UgdGhlCiAgICAgICAgbGVuZ3RoIGFmdGVyIGNvbnZlcnNpb24gdG8gdGhlIHRydWUgdmFsdWUuIChCdXQgZGVjb2RpbmcgZXJyb3IKICAgICAgICBoYW5kbGVyIG1pZ2h0IGhhdmUgdG8gcmVzaXplIHRoZSBzdHJpbmcpICovCi0gICAgdiA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKHNpemUgPT0gMCkKLSAgICAgICAgcmV0dXJuIHY7Ci0gICAgb3V0cG9zID0gMDsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgd3JpdGVyLm1pbl9sZW5ndGggPSBzaXplOworCiAgICAgZW5kID0gcyArIHNpemU7CiAgICAgd2hpbGUgKHMgPCBlbmQpIHsKICAgICAgICAgdW5zaWduZWQgY2hhciBjOwpAQCAtNTk1Nyw3ICs2MDg1LDggQEAKIAogICAgICAgICAvKiBOb24tZXNjYXBlIGNoYXJhY3RlcnMgYXJlIGludGVycHJldGVkIGFzIFVuaWNvZGUgb3JkaW5hbHMgKi8KICAgICAgICAgaWYgKCpzICE9ICdcXCcpIHsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsICh1bnNpZ25lZCBjaGFyKSpzKyspIDwgMCkKKyAgICAgICAgICAgIHggPSAodW5zaWduZWQgY2hhcikqcysrOworICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtNTk2OSw3ICs2MDk4LDggQEAKICAgICAgICAgZm9yICg7cyA8IGVuZDspIHsKICAgICAgICAgICAgIGlmICgqcyAhPSAnXFwnKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgKHVuc2lnbmVkIGNoYXIpKnMrKykgPCAwKQorICAgICAgICAgICAgeCA9ICh1bnNpZ25lZCBjaGFyKSpzKys7CisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgeCkgPCAwKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgICBpZiAoKChzIC0gYnMpICYgMSkgPT0gMCB8fApAQCAtNTk3Nyw3ICs2MTA3LDcgQEAKICAgICAgICAgICAgICgqcyAhPSAndScgJiYgKnMgIT0gJ1UnKSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgb3V0cG9zLS07CisgICAgICAgIHdyaXRlci5wb3MtLTsKICAgICAgICAgY291bnQgPSAqcz09J3UnID8gNCA6IDg7CiAgICAgICAgIHMrKzsKIApAQCAtNTk4NiwxMSArNjExNiwxMSBAQAogICAgICAgICAgICAgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOwogICAgICAgICAgICAgaWYgKCFQeV9JU1hESUdJVChjKSkgewogICAgICAgICAgICAgICAgIGVuZGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAicmF3dW5pY29kZWVzY2FwZSIsICJ0cnVuY2F0ZWQgXFx1WFhYWCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0ZXIpKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICAgICAgZ290byBuZXh0Qnl0ZTsKICAgICAgICAgICAgIH0KQEAgLTYwMDMsMjggKzYxMzMsMjcgQEAKICAgICAgICAgICAgICAgICB4ICs9IDEwICsgYyAtICdBJzsKICAgICAgICAgfQogICAgICAgICBpZiAoeCA8PSBNQVhfVU5JQ09ERSkgewotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgeCkgPCAwKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKCZ3cml0ZXIsIHgpIDwgMCkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgIH0gZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHMtc3RhcnRzOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAicmF3dW5pY29kZWVzY2FwZSIsICJcXFV4eHh4eHh4eCBvdXQgb2YgcmFuZ2UiLAogICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZW5kLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgIH0KICAgICAgIG5leHRCeXRlOgogICAgICAgICA7CiAgICAgfQotICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwgb3V0cG9zKSA8IDApCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwotICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdCh2KTsKKyAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9GaW5pc2goJndyaXRlcik7CiAKICAgb25FcnJvcjoKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CiAgICAgUHlfWERFQ1JFRihleGMpOwogICAgIHJldHVybiBOVUxMOwpAQCAtNjEyNCw4ICs2MjUzLDcgQEAKICAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwogICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKICAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwogICAgIGNvbnN0IGNoYXIgKmVuZDsKICAgICBjb25zdCBjaGFyICpyZWFzb247CiAgICAgUHlPYmplY3QgKmVycm9ySGFuZGxlciA9IE5VTEw7CkBAIC02MTM2LDE1ICs2MjY0LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAxKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICAvKiBYWFggb3ZlcmZsb3cgZGV0ZWN0aW9uIG1pc3NpbmcgKi8KLSAgICB2ID0gUHlVbmljb2RlX05ldygoc2l6ZStQeV9VTklDT0RFX1NJWkUtMSkvIFB5X1VOSUNPREVfU0laRSwgMTI3KTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpID09IDApCi0gICAgICAgIHJldHVybiB2OwotICAgIG91dHBvcyA9IDA7Ci0gICAgZW5kID0gcyArIHNpemU7CisgICAgaWYgKHNpemUgPT0gMCkKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CiAKKyAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlcik7CisgICAgaWYgKHNpemUgLyBQeV9VTklDT0RFX1NJWkUgPiBQWV9TU0laRV9UX01BWCAtIDEpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgZ290byBvbkVycm9yOworICAgIH0KKyAgICB3cml0ZXIubWluX2xlbmd0aCA9IChzaXplICsgKFB5X1VOSUNPREVfU0laRSAtIDEpKSAvIFB5X1VOSUNPREVfU0laRTsKKworICAgIGVuZCA9IHMgKyBzaXplOwogICAgIHdoaWxlIChzIDwgZW5kKSB7CiAgICAgICAgIFB5X1VOSUNPREUgdWNoOwogICAgICAgICBQeV9VQ1M0IGNoOwpAQCAtNjE4NiwyOCArNjMxNiwyNiBAQAogICAgICAgICB9CiAjZW5kaWYKIAotICAgICAgICBpZiAodW5pY29kZV9wdXRjaGFyKCZ2LCAmb3V0cG9zLCBjaCkgPCAwKQorICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUoJndyaXRlciwgY2gpIDwgMCkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgY29udGludWU7CiAKICAgZXJyb3I6CiAgICAgICAgIHN0YXJ0aW5wb3MgPSBzIC0gc3RhcnRzOwotICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCisgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcl93cml0ZXIoCiAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICJ1bmljb2RlX2ludGVybmFsIiwgcmVhc29uLAogICAgICAgICAgICAgICAgICZzdGFydHMsICZlbmQsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAotICAgICAgICAgICAgICAgICZ2LCAmb3V0cG9zKSkKKyAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAKLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih2KTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTY1OTEsNyArNjcxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzKQogewogICAgIGNvbnN0IGNoYXIgKnN0YXJ0cyA9IHM7Ci0gICAgUHlPYmplY3QgKnVuaWNvZGU7CisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7CiAgICAgaW50IGtpbmQ7CiAgICAgdm9pZCAqZGF0YTsKICAgICBQeV9zc2l6ZV90IHN0YXJ0aW5wb3M7CkBAIC02NjA4LDQ2ICs2NzM2LDQ2IEBACiAgICAgaWYgKHNpemUgPT0gMSAmJiAodW5zaWduZWQgY2hhcilzWzBdIDwgMTI4KQogICAgICAgICByZXR1cm4gZ2V0X2xhdGluMV9jaGFyKCh1bnNpZ25lZCBjaGFyKXNbMF0pOwogCi0gICAgdW5pY29kZSA9IFB5VW5pY29kZV9OZXcoc2l6ZSwgMTI3KTsKLSAgICBpZiAodW5pY29kZSA9PSBOVUxMKQotICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlID0gcyArIHNpemU7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV8xQllURV9EQVRBKHVuaWNvZGUpOworICAgIGRhdGEgPSB3cml0ZXIuZGF0YTsKICAgICBvdXRwb3MgPSBhc2NpaV9kZWNvZGUocywgZSwgKFB5X1VDUzEgKilkYXRhKTsKLSAgICBpZiAob3V0cG9zID09IHNpemUpCi0gICAgICAgIHJldHVybiB1bmljb2RlOworICAgIHdyaXRlci5wb3MgPSBvdXRwb3M7CisgICAgaWYgKHdyaXRlci5wb3MgPT0gc2l6ZSkKKyAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCi0gICAgcyArPSBvdXRwb3M7Ci0gICAga2luZCA9IFB5VW5pY29kZV8xQllURV9LSU5EOworICAgIHMgKz0gd3JpdGVyLnBvczsKKyAgICBraW5kID0gd3JpdGVyLmtpbmQ7CiAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgYyA9ICh1bnNpZ25lZCBjaGFyKSpzOworICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAodW5zaWduZWQgY2hhcikqczsKICAgICAgICAgaWYgKGMgPCAxMjgpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCBvdXRwb3MrKywgYyk7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoa2luZCwgZGF0YSwgd3JpdGVyLnBvcywgYyk7CisgICAgICAgICAgICB3cml0ZXIucG9zKys7CiAgICAgICAgICAgICArK3M7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAxOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3dyaXRlcigKICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAiYXNjaWkiLCAib3JkaW5hbCBub3QgaW4gcmFuZ2UoMTI4KSIsCiAgICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnVuaWNvZGUsICZvdXRwb3MpKQorICAgICAgICAgICAgICAgICAgICAmd3JpdGVyKSkKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7Ci0gICAgICAgICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEodW5pY29kZSk7CisgICAgICAgICAgICBraW5kID0gd3JpdGVyLmtpbmQ7CisgICAgICAgICAgICBkYXRhID0gd3JpdGVyLmRhdGE7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHVuaWNvZGVfcmVzaXplKCZ1bmljb2RlLCBvdXRwb3MpIDwgMCkKLSAgICAgICAgZ290byBvbkVycm9yOwogICAgIFB5X1hERUNSRUYoZXJyb3JIYW5kbGVyKTsKICAgICBQeV9YREVDUkVGKGV4Yyk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeSh1bmljb2RlLCAxKSk7Ci0gICAgcmV0dXJuIHVuaWNvZGU7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRih1bmljb2RlKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7CiAgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwogICAgIFB5X1hERUNSRUYoZXhjKTsKICAgICByZXR1cm4gTlVMTDsKQEAgLTY2NzksNyArNjgwNyw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIEZhc3QgcGF0aDogaWYgaXQgaXMgYW4gQVNDSUktb25seSBzdHJpbmcsIGNvbnN0cnVjdCBieXRlcyBvYmplY3QKICAgICAgICBkaXJlY3RseS4gRWxzZSBkZWZlciB0byBhYm92ZSBmdW5jdGlvbiB0byByYWlzZSB0aGUgZXhjZXB0aW9uLiAqLwotICAgIGlmIChQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUodW5pY29kZSkgPCAxMjgpCisgICAgaWYgKFB5VW5pY29kZV9JU19BU0NJSSh1bmljb2RlKSkKICAgICAgICAgcmV0dXJuIFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoUHlVbmljb2RlX0RBVEEodW5pY29kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaWNvZGUpKTsKICAgICByZXR1cm4gdW5pY29kZV9lbmNvZGVfdWNzMSh1bmljb2RlLCBlcnJvcnMsIDEyOCk7CkBAIC02NzU3LDggKzY4ODUsOCBAQAogICogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgZnJvbSBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gdW5pY29kZSBvYmplY3QgaW4gc3RyaWN0CiAgKiBtb2RlLgogICoKLSAqIFJldHVybnMgY29uc3VtZWQgc2l6ZSBpZiBzdWNjZWVkLCByZXR1cm5zIC0yIG9uIGRlY29kZSBlcnJvciwgb3IgcmFpc2UgYQotICogV2luZG93c0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgorICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIHJldHVybnMgLTIgb24gZGVjb2RlIGVycm9yLCBvciByYWlzZSBhbgorICogT1NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludAogZGVjb2RlX2NvZGVfcGFnZV9zdHJpY3QoVUlOVCBjb2RlX3BhZ2UsCkBAIC02ODA5LDcgKzY5MzcsNyBAQAogICogRGVjb2RlIGEgYnl0ZSBzdHJpbmcgZnJvbSBhIGNvZGUgcGFnZSBpbnRvIHVuaWNvZGUgb2JqZWN0IHdpdGggYW4gZXJyb3IKICAqIGhhbmRsZXIuCiAgKgotICogUmV0dXJucyBjb25zdW1lZCBzaXplIGlmIHN1Y2NlZWQsIG9yIHJhaXNlIGEgV2luZG93c0Vycm9yIG9yCisgKiBSZXR1cm5zIGNvbnN1bWVkIHNpemUgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYW4gT1NFcnJvciBvcgogICogVW5pY29kZURlY29kZUVycm9yIGV4Y2VwdGlvbiBhbmQgcmV0dXJucyAtMSBvbiBlcnJvci4KICAqLwogc3RhdGljIGludApAQCAtNjgyOCw3ICs2OTU2LDggQEAKICAgICAvKiBlYWNoIHN0ZXAgY2Fubm90IGRlY29kZSBtb3JlIHRoYW4gMSBjaGFyYWN0ZXIsIGJ1dCBhIGNoYXJhY3RlciBjYW4gYmUKICAgICAgICByZXByZXNlbnRlZCBhcyBhIHN1cnJvZ2F0ZSBwYWlyICovCiAgICAgd2NoYXJfdCBidWZmZXJbMl0sICpzdGFydG91dCwgKm91dDsKLSAgICBpbnQgaW5zaXplLCBvdXRzaXplOworICAgIGludCBpbnNpemU7CisgICAgUHlfc3NpemVfdCBvdXRzaXplOwogICAgIFB5T2JqZWN0ICplcnJvckhhbmRsZXIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpleGMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICplbmNvZGluZ19vYmogPSBOVUxMOwpAQCAtNjkwOCw3ICs3MDM3LDcgQEAKICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBpbiAtIHN0YXJ0aW47CiAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MgKyAxOwogICAgICAgICAgICAgb3V0cG9zID0gb3V0IC0gUHlVbmljb2RlX0FTX1VOSUNPREUoKnYpOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyKAorICAgICAgICAgICAgaWYgKHVuaWNvZGVfZGVjb2RlX2NhbGxfZXJyb3JoYW5kbGVyX3djaGFyKAogICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nLCByZWFzb24sCiAgICAgICAgICAgICAgICAgICAgICZzdGFydGluLCAmZW5kaW4sICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZpbiwKQEAgLTcwNjQsNyArNzE5Myw3IEBACiAgKiBtb2RlLgogICoKICAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCByZXR1cm5zIC0yIG9uIGVuY29kZSBlcnJvciwgb3IgcmFpc2UKLSAqIGEgV2luZG93c0Vycm9yIGFuZCByZXR1cm5zIC0xIG9uIG90aGVyIGVycm9yLgorICogYW4gT1NFcnJvciBhbmQgcmV0dXJucyAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludAogZW5jb2RlX2NvZGVfcGFnZV9zdHJpY3QoVUlOVCBjb2RlX3BhZ2UsIFB5T2JqZWN0ICoqb3V0Ynl0ZXMsCkBAIC03MDk4LDEwICs3MjI3LDExIEBACiAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgIGFzc2VydChzaXplIDw9IElOVF9NQVgpOwogCiAgICAgLyogRmlyc3QgZ2V0IHRoZSBzaXplIG9mIHRoZSByZXN1bHQgKi8KICAgICBvdXRzaXplID0gV2lkZUNoYXJUb011bHRpQnl0ZShjb2RlX3BhZ2UsIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAsIHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgKGludClzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgcHVzZWREZWZhdWx0Q2hhcik7CiAgICAgaWYgKG91dHNpemUgPD0gMCkKQEAgLTcxMzgsNyArNzI2OCw3IEBACiAKICAgICAvKiBEbyB0aGUgY29udmVyc2lvbiAqLwogICAgIG91dHNpemUgPSBXaWRlQ2hhclRvTXVsdGlCeXRlKGNvZGVfcGFnZSwgZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcCwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLCAoaW50KXNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0LCBvdXRzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHB1c2VkRGVmYXVsdENoYXIpOwogICAgIFB5X0NMRUFSKHN1YnN0cmluZyk7CkBAIC03MTU3LDEwICs3Mjg3LDEwIEBACiB9CiAKIC8qCi0gKiBFbmNvZGUgYSBVbmljb2RlIHN0cmluZyB0byBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gYSBieXRlIHN0cmluZyB1c2luZyBhCisgKiBFbmNvZGUgYSBVbmljb2RlIHN0cmluZyB0byBhIFdpbmRvd3MgY29kZSBwYWdlIGludG8gYSBieXRlIHN0cmluZyB1c2luZyBhbgogICogZXJyb3IgaGFuZGxlci4KICAqCi0gKiBSZXR1cm5zIGNvbnN1bWVkIGNoYXJhY3RlcnMgaWYgc3VjY2VlZCwgb3IgcmFpc2UgYSBXaW5kb3dzRXJyb3IgYW5kIHJldHVybnMKKyAqIFJldHVybnMgY29uc3VtZWQgY2hhcmFjdGVycyBpZiBzdWNjZWVkLCBvciByYWlzZSBhbiBPU0Vycm9yIGFuZCByZXR1cm5zCiAgKiAtMSBvbiBvdGhlciBlcnJvci4KICAqLwogc3RhdGljIGludApAQCAtNzI0Niw5ICs3Mzc2LDggQEAKICAgICAgICAgICAgIGNoYXJzaXplID0gMTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoIC09IDB4MTAwMDA7Ci0gICAgICAgICAgICBjaGFyc1swXSA9IDB4ZDgwMCArIChjaCA+PiAxMCk7Ci0gICAgICAgICAgICBjaGFyc1sxXSA9IDB4ZGMwMCArIChjaCAmIDB4M2ZmKTsKKyAgICAgICAgICAgIGNoYXJzWzBdID0gUHlfVU5JQ09ERV9ISUdIX1NVUlJPR0FURShjaCk7CisgICAgICAgICAgICBjaGFyc1sxXSA9IFB5X1VOSUNPREVfTE9XX1NVUlJPR0FURShjaCk7CiAgICAgICAgICAgICBjaGFyc2l6ZSA9IDI7CiAgICAgICAgIH0KIApAQCAtNzQ0MSwyMjAgKzc1NzAsMjU4IEBACiAKIC8qIC0tLSBDaGFyYWN0ZXIgTWFwcGluZyBDb2RlYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgaW50CitjaGFybWFwX2RlY29kZV9zdHJpbmcoY29uc3QgY2hhciAqcywKKyAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm1hcHBpbmcsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyb3JzLAorICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgUHlfc3NpemVfdCBzdGFydGlucG9zLCBlbmRpbnBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTCwgKmV4YyA9IE5VTEw7CisgICAgUHlfc3NpemVfdCBtYXBsZW47CisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBtYXBraW5kOworICAgIHZvaWQgKm1hcGRhdGE7CisgICAgUHlfVUNTNCB4OworICAgIHVuc2lnbmVkIGNoYXIgY2g7CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKG1hcHBpbmcpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBtYXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChtYXBwaW5nKTsKKyAgICBtYXBkYXRhID0gUHlVbmljb2RlX0RBVEEobWFwcGluZyk7CisgICAgbWFwa2luZCA9IFB5VW5pY29kZV9LSU5EKG1hcHBpbmcpOworCisgICAgZSA9IHMgKyBzaXplOworCisgICAgaWYgKG1hcGtpbmQgPT0gUHlVbmljb2RlXzFCWVRFX0tJTkQgJiYgbWFwbGVuID49IDI1NikgeworICAgICAgICAvKiBmYXN0LXBhdGggZm9yIGNwMDM3LCBjcDUwMCBhbmQgaXNvODg1OV8xIGVuY29kaW5ncy4gaXNvODg1OV8xCisgICAgICAgICAqIGlzIGRpc2FibGVkIGluIGVuY29kaW5nIGFsaWFzZXMsIGxhdGluMSBpcyBwcmVmZXJyZWQgYmVjYXVzZQorICAgICAgICAgKiBpdHMgaW1wbGVtZW50YXRpb24gaXMgZmFzdGVyLiAqLworICAgICAgICBQeV9VQ1MxICptYXBkYXRhX3VjczEgPSAoUHlfVUNTMSAqKW1hcGRhdGE7CisgICAgICAgIFB5X1VDUzEgKm91dGRhdGEgPSAoUHlfVUNTMSAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgUHlfVUNTNCBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworCisgICAgICAgIGFzc2VydCAod3JpdGVyLT5raW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKTsKKyAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICBjaCA9ICpzOworICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMVtjaF07CisgICAgICAgICAgICBpZiAoeCA+IG1heGNoYXIpIHsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgMSwgMHhmZikgPT0gLTEpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgICAgICAgICAgICAgIG91dGRhdGEgPSAoUHlfVUNTMSAqKXdyaXRlci0+ZGF0YTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zKys7CisgICAgICAgICAgICArK3M7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgIGlmIChtYXBraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EICYmIG1hcGxlbiA+PSAyNTYpIHsKKyAgICAgICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgb3V0a2luZCA9IHdyaXRlci0+a2luZDsKKyAgICAgICAgICAgIFB5X1VDUzIgKm1hcGRhdGFfdWNzMiA9IChQeV9VQ1MyICopbWFwZGF0YTsKKyAgICAgICAgICAgIGlmIChvdXRraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgICAgICAgICAgUHlfVUNTMSAqb3V0ZGF0YSA9IChQeV9VQ1MxICopd3JpdGVyLT5kYXRhOworICAgICAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IHdyaXRlci0+bWF4Y2hhcjsKKyAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2ggPSAqczsKKyAgICAgICAgICAgICAgICAgICAgeCA9IG1hcGRhdGFfdWNzMltjaF07CisgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7CisgICAgICAgICAgICAgICAgICAgIG91dGRhdGFbd3JpdGVyLT5wb3NdID0geDsKKyAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5wb3MrKzsKKyAgICAgICAgICAgICAgICAgICAgKytzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1MyICpvdXRkYXRhID0gKFB5X1VDUzIgKil3cml0ZXItPmRhdGE7CisgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKnM7CisgICAgICAgICAgICAgICAgICAgIHggPSBtYXBkYXRhX3VjczJbY2hdOworICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSAweEZGRkUpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOworICAgICAgICAgICAgICAgICAgICBvdXRkYXRhW3dyaXRlci0+cG9zXSA9IHg7CisgICAgICAgICAgICAgICAgICAgIHdyaXRlci0+cG9zKys7CisgICAgICAgICAgICAgICAgICAgICsrczsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2ggPSAqczsKKworICAgICAgICBpZiAoY2ggPCBtYXBsZW4pCisgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQobWFwa2luZCwgbWFwZGF0YSwgY2gpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB4ID0gMHhmZmZlOyAvKiBpbnZhbGlkIHZhbHVlICovCitFcnJvcjoKKyAgICAgICAgaWYgKHggPT0gMHhmZmZlKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLworICAgICAgICAgICAgc3RhcnRpbnBvcyA9IHMtc3RhcnRzOworICAgICAgICAgICAgZW5kaW5wb3MgPSBzdGFydGlucG9zKzE7CisgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICJjaGFybWFwIiwgImNoYXJhY3RlciBtYXBzIHRvIDx1bmRlZmluZWQ+IiwKKyAgICAgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAorICAgICAgICAgICAgICAgICAgICB3cml0ZXIpKSB7CisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB4KSA8IDApCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICsrczsKKyAgICB9CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gMDsKKworb25FcnJvcjoKKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAorY2hhcm1hcF9kZWNvZGVfbWFwcGluZyhjb25zdCBjaGFyICpzLAorICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICptYXBwaW5nLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICplcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK3sKKyAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOworICAgIGNvbnN0IGNoYXIgKmU7CisgICAgUHlfc3NpemVfdCBzdGFydGlucG9zLCBlbmRpbnBvczsKKyAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTCwgKmV4YyA9IE5VTEw7CisgICAgdW5zaWduZWQgY2hhciBjaDsKKyAgICBQeU9iamVjdCAqa2V5LCAqaXRlbSA9IE5VTEw7CisKKyAgICBlID0gcyArIHNpemU7CisKKyAgICB3aGlsZSAocyA8IGUpIHsKKyAgICAgICAgY2ggPSAqczsKKworICAgICAgICAvKiBHZXQgbWFwcGluZyAoY2hhciBvcmRpbmFsIC0+IGludGVnZXIsIFVuaWNvZGUgY2hhciBvciBOb25lKSAqLworICAgICAgICBrZXkgPSBQeUxvbmdfRnJvbUxvbmcoKGxvbmcpY2gpOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisKKyAgICAgICAgaXRlbSA9IFB5T2JqZWN0X0dldEl0ZW0obWFwcGluZywga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmIChpdGVtID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0xvb2t1cEVycm9yKSkgeworICAgICAgICAgICAgICAgIC8qIE5vIG1hcHBpbmcgZm91bmQgbWVhbnM6IG1hcHBpbmcgaXMgdW5kZWZpbmVkLiAqLworICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgIH0KKworICAgICAgICAvKiBBcHBseSBtYXBwaW5nICovCisgICAgICAgIGlmIChpdGVtID09IFB5X05vbmUpCisgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgaWYgKFB5TG9uZ19DaGVjayhpdGVtKSkgeworICAgICAgICAgICAgbG9uZyB2YWx1ZSA9IFB5TG9uZ19BU19MT05HKGl0ZW0pOworICAgICAgICAgICAgaWYgKHZhbHVlID09IDB4RkZGRSkKKyAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA8IDAgfHwgdmFsdWUgPiBNQVhfVU5JQ09ERSkgeworICAgICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JWx4KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKU1BWF9VTklDT0RFICsgMSk7CisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soaXRlbSkpIHsKKyAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoaXRlbSkgPT0gLTEpCisgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pID09IDEpIHsKKyAgICAgICAgICAgICAgICBQeV9VQ1M0IHZhbHVlID0gUHlVbmljb2RlX1JFQURfQ0hBUihpdGVtLCAwKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQorICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUNoYXJJbmxpbmUod3JpdGVyLCB2YWx1ZSkgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IDE7CisgICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdHIod3JpdGVyLCBpdGVtKSA9PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLyogd3JvbmcgcmV0dXJuIHZhbHVlICovCisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IHJldHVybiBpbnRlZ2VyLCBOb25lIG9yIHN0ciIpOworICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKGl0ZW0pOworICAgICAgICArK3M7CisgICAgICAgIGNvbnRpbnVlOworCitVbmRlZmluZWQ6CisgICAgICAgIC8qIHVuZGVmaW5lZCBtYXBwaW5nICovCisgICAgICAgIFB5X0NMRUFSKGl0ZW0pOworICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7CisgICAgICAgIGVuZGlucG9zID0gc3RhcnRpbnBvcysxOworICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXJfd3JpdGVyKAorICAgICAgICAgICAgICAgIGVycm9ycywgJmVycm9ySGFuZGxlciwKKyAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCisgICAgICAgICAgICAgICAgJnN0YXJ0cywgJmUsICZzdGFydGlucG9zLCAmZW5kaW5wb3MsICZleGMsICZzLAorICAgICAgICAgICAgICAgIHdyaXRlcikpIHsKKyAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICAgICAgfQorICAgIH0KKyAgICBQeV9YREVDUkVGKGVycm9ySGFuZGxlcik7CisgICAgUHlfWERFQ1JFRihleGMpOworICAgIHJldHVybiAwOworCitvbkVycm9yOgorICAgIFB5X1hERUNSRUYoaXRlbSk7CisgICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOworICAgIFB5X1hERUNSRUYoZXhjKTsKKyAgICByZXR1cm4gLTE7Cit9CisKIFB5T2JqZWN0ICoKIFB5VW5pY29kZV9EZWNvZGVDaGFybWFwKGNvbnN0IGNoYXIgKnMsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbWFwcGluZywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVycm9ycykKIHsKLSAgICBjb25zdCBjaGFyICpzdGFydHMgPSBzOwotICAgIFB5X3NzaXplX3Qgc3RhcnRpbnBvczsKLSAgICBQeV9zc2l6ZV90IGVuZGlucG9zOwotICAgIFB5X3NzaXplX3Qgb3V0cG9zOwotICAgIGNvbnN0IGNoYXIgKmU7Ci0gICAgUHlPYmplY3QgKnY7Ci0gICAgUHlfc3NpemVfdCBleHRyYWNoYXJzID0gMDsKLSAgICBQeU9iamVjdCAqZXJyb3JIYW5kbGVyID0gTlVMTDsKLSAgICBQeU9iamVjdCAqZXhjID0gTlVMTDsKKyAgICBfUHlVbmljb2RlV3JpdGVyIHdyaXRlcjsKIAogICAgIC8qIERlZmF1bHQgdG8gTGF0aW4tMSAqLwogICAgIGlmIChtYXBwaW5nID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeVVuaWNvZGVfRGVjb2RlTGF0aW4xKHMsIHNpemUsIGVycm9ycyk7CiAKLSAgICB2ID0gUHlVbmljb2RlX05ldyhzaXplLCAxMjcpOwotICAgIGlmICh2ID09IE5VTEwpCi0gICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBpZiAoc2l6ZSA9PSAwKQotICAgICAgICByZXR1cm4gdjsKLSAgICBvdXRwb3MgPSAwOwotICAgIGUgPSBzICsgc2l6ZTsKKyAgICAgICAgX1B5X1JFVFVSTl9VTklDT0RFX0VNUFRZKCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOworICAgIHdyaXRlci5taW5fbGVuZ3RoID0gc2l6ZTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIHdyaXRlci5taW5fbGVuZ3RoLCAxMjcpID09IC0xKQorICAgICAgICBnb3RvIG9uRXJyb3I7CisKICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobWFwcGluZykpIHsKLSAgICAgICAgUHlfc3NpemVfdCBtYXBsZW47Ci0gICAgICAgIGVudW0gUHlVbmljb2RlX0tpbmQgbWFwa2luZDsKLSAgICAgICAgdm9pZCAqbWFwZGF0YTsKLSAgICAgICAgUHlfVUNTNCB4OwotCi0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRFkobWFwcGluZykgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgICAgICBtYXBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChtYXBwaW5nKTsKLSAgICAgICAgbWFwZGF0YSA9IFB5VW5pY29kZV9EQVRBKG1hcHBpbmcpOwotICAgICAgICBtYXBraW5kID0gUHlVbmljb2RlX0tJTkQobWFwcGluZyk7Ci0gICAgICAgIHdoaWxlIChzIDwgZSkgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBjaDsKLSAgICAgICAgICAgIGlmIChtYXBraW5kID09IFB5VW5pY29kZV8yQllURV9LSU5EICYmIG1hcGxlbiA+PSAyNTYpIHsKLSAgICAgICAgICAgICAgICBlbnVtIFB5VW5pY29kZV9LaW5kIG91dGtpbmQgPSBQeVVuaWNvZGVfS0lORCh2KTsKLSAgICAgICAgICAgICAgICBpZiAob3V0a2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgewotICAgICAgICAgICAgICAgICAgICB2b2lkICpvdXRkYXRhID0gUHlVbmljb2RlX0RBVEEodik7Ci0gICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgbWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh2KTsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gKnM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlVbmljb2RlX1JFQUQoUHlVbmljb2RlXzJCWVRFX0tJTkQsIG1hcGRhdGEsIGNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4ID4gbWF4Y2hhcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIEVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKFB5VW5pY29kZV8xQllURV9LSU5ELCBvdXRkYXRhLCBvdXRwb3MrKywgeCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICArK3M7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dGtpbmQgPT0gUHlVbmljb2RlXzJCWVRFX0tJTkQpIHsKLSAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3V0ZGF0YSA9IFB5VW5pY29kZV9EQVRBKHYpOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAocyA8IGUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSAqczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfUkVBRChQeVVuaWNvZGVfMkJZVEVfS0lORCwgbWFwZGF0YSwgY2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUoUHlVbmljb2RlXzJCWVRFX0tJTkQsIG91dGRhdGEsIG91dHBvcysrLCB4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjaCA9ICpzOwotCi0gICAgICAgICAgICBpZiAoY2ggPCBtYXBsZW4pCi0gICAgICAgICAgICAgICAgeCA9IFB5VW5pY29kZV9SRUFEKG1hcGtpbmQsIG1hcGRhdGEsIGNoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB4ID0gMHhmZmZlOyAvKiBpbnZhbGlkIHZhbHVlICovCi1FcnJvcjoKLSAgICAgICAgICAgIGlmICh4ID09IDB4ZmZmZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiB1bmRlZmluZWQgbWFwcGluZyAqLwotICAgICAgICAgICAgICAgIHN0YXJ0aW5wb3MgPSBzLXN0YXJ0czsKLSAgICAgICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKLSAgICAgICAgICAgICAgICBpZiAodW5pY29kZV9kZWNvZGVfY2FsbF9lcnJvcmhhbmRsZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMsICZlcnJvckhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnRzLCAmZSwgJnN0YXJ0aW5wb3MsICZlbmRpbnBvcywgJmV4YywgJnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAmdiwgJm91dHBvcykpIHsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgeCkgPCAwKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICsrczsKLSAgICAgICAgfQorICAgICAgICBpZiAoY2hhcm1hcF9kZWNvZGVfc3RyaW5nKHMsIHNpemUsIG1hcHBpbmcsIGVycm9ycywgJndyaXRlcikgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHMgPCBlKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGNoID0gKnM7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdywgKng7Ci0KLSAgICAgICAgICAgIC8qIEdldCBtYXBwaW5nIChjaGFyIG9yZGluYWwgLT4gaW50ZWdlciwgVW5pY29kZSBjaGFyIG9yIE5vbmUpICovCi0gICAgICAgICAgICB3ID0gUHlMb25nX0Zyb21Mb25nKChsb25nKWNoKTsKLSAgICAgICAgICAgIGlmICh3ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0obWFwcGluZywgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfTG9va3VwRXJyb3IpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIE5vIG1hcHBpbmcgZm91bmQgbWVhbnM6IG1hcHBpbmcgaXMgdW5kZWZpbmVkLiAqLwotICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBBcHBseSBtYXBwaW5nICovCi0gICAgICAgICAgICBpZiAoeCA9PSBQeV9Ob25lKQotICAgICAgICAgICAgICAgIGdvdG8gVW5kZWZpbmVkOwotICAgICAgICAgICAgaWYgKFB5TG9uZ19DaGVjayh4KSkgewotICAgICAgICAgICAgICAgIGxvbmcgdmFsdWUgPSBQeUxvbmdfQVNfTE9ORyh4KTsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICBnb3RvIFVuZGVmaW5lZDsKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4gTUFYX1VOSUNPREUpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjaGFyYWN0ZXIgbWFwcGluZyBtdXN0IGJlIGluIHJhbmdlKDB4JWx4KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylNQVhfVU5JQ09ERSArIDEpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfcHV0Y2hhcigmdiwgJm91dHBvcywgdmFsdWUpIDwgMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soeCkpIHsKLSAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHRhcmdldHNpemU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHgpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0YXJnZXRzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoeCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAodGFyZ2V0c2l6ZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIDEtMSBtYXBwaW5nICovCi0gICAgICAgICAgICAgICAgICAgIFB5X1VDUzQgdmFsdWUgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHgsIDApOwotICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gMHhGRkZFKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBVbmRlZmluZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3B1dGNoYXIoJnYsICZvdXRwb3MsIHZhbHVlKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmICh0YXJnZXRzaXplID4gMSkgewotICAgICAgICAgICAgICAgICAgICAvKiAxLW4gbWFwcGluZyAqLwotICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0c2l6ZSA+IGV4dHJhY2hhcnMpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlc2l6ZSBmaXJzdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuZWVkZWQgPSAodGFyZ2V0c2l6ZSAtIGV4dHJhY2hhcnMpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0YXJnZXRzaXplIDw8IDIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjaGFycyArPSBuZWVkZWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBYWFggb3ZlcmZsb3cgZGV0ZWN0aW9uIG1pc3NpbmcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1bmljb2RlX3Jlc2l6ZSgmdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSCh2KSArIG5lZWRlZCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHVuaWNvZGVfd2lkZW4oJnYsIG91dHBvcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHgpKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ29weUNoYXJhY3RlcnModiwgb3V0cG9zLCB4LCAwLCB0YXJnZXRzaXplKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0cG9zICs9IHRhcmdldHNpemU7Ci0gICAgICAgICAgICAgICAgICAgIGV4dHJhY2hhcnMgLT0gdGFyZ2V0c2l6ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogMS0wIG1hcHBpbmc6IHNraXAgdGhlIGNoYXJhY3RlciAqLwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogd3JvbmcgcmV0dXJuIHZhbHVlICovCi0gICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNoYXJhY3RlciBtYXBwaW5nIG11c3QgcmV0dXJuIGludGVnZXIsIE5vbmUgb3Igc3RyIik7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICsrczsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotVW5kZWZpbmVkOgotICAgICAgICAgICAgLyogdW5kZWZpbmVkIG1hcHBpbmcgKi8KLSAgICAgICAgICAgIFB5X1hERUNSRUYoeCk7Ci0gICAgICAgICAgICBzdGFydGlucG9zID0gcy1zdGFydHM7Ci0gICAgICAgICAgICBlbmRpbnBvcyA9IHN0YXJ0aW5wb3MrMTsKLSAgICAgICAgICAgIGlmICh1bmljb2RlX2RlY29kZV9jYWxsX2Vycm9yaGFuZGxlcigKLSAgICAgICAgICAgICAgICAgICAgZXJyb3JzLCAmZXJyb3JIYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAiY2hhcm1hcCIsICJjaGFyYWN0ZXIgbWFwcyB0byA8dW5kZWZpbmVkPiIsCi0gICAgICAgICAgICAgICAgICAgICZzdGFydHMsICZlLCAmc3RhcnRpbnBvcywgJmVuZGlucG9zLCAmZXhjLCAmcywKLSAgICAgICAgICAgICAgICAgICAgJnYsICZvdXRwb3MpKSB7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgICAgIGlmIChjaGFybWFwX2RlY29kZV9tYXBwaW5nKHMsIHNpemUsIG1hcHBpbmcsIGVycm9ycywgJndyaXRlcikgPCAwKQorICAgICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KLSAgICBpZiAodW5pY29kZV9yZXNpemUoJnYsIG91dHBvcykgPCAwKQotICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwotICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHQodik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZ3cml0ZXIpOwogCiAgIG9uRXJyb3I6Ci0gICAgUHlfWERFQ1JFRihlcnJvckhhbmRsZXIpOwotICAgIFB5X1hERUNSRUYoZXhjKTsKLSAgICBQeV9YREVDUkVGKHYpOworICAgIF9QeVVuaWNvZGVXcml0ZXJfRGVhbGxvYygmd3JpdGVyKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtODE2OCwxMCArODMzNSwxNCBAQAogICAgICAqIC0xPW5vdCBpbml0aWFsaXplZCwgMD11bmtub3duLCAxPXN0cmljdCwgMj1yZXBsYWNlLAogICAgICAqIDM9aWdub3JlLCA0PXhtbGNoYXJyZWZyZXBsYWNlICovCiAgICAgaW50IGtub3duX2Vycm9ySGFuZGxlciA9IC0xOworICAgIHZvaWQgKmRhdGE7CisgICAgaW50IGtpbmQ7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzaXplID0gUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pY29kZSk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHVuaWNvZGUpOworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmljb2RlKTsKIAogICAgIC8qIERlZmF1bHQgdG8gTGF0aW4tMSAqLwogICAgIGlmIChtYXBwaW5nID09IE5VTEwpCkBAIC04MTg2LDcgKzgzNTcsNyBAQAogICAgICAgICByZXR1cm4gcmVzOwogCiAgICAgd2hpbGUgKGlucG9zPHNpemUpIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIodW5pY29kZSwgaW5wb3MpOworICAgICAgICBQeV9VQ1M0IGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5wb3MpOwogICAgICAgICAvKiB0cnkgdG8gZW5jb2RlIGl0ICovCiAgICAgICAgIGNoYXJtYXBlbmNvZGVfcmVzdWx0IHggPSBjaGFybWFwZW5jb2RlX291dHB1dChjaCwgbWFwcGluZywgJnJlcywgJnJlc3Bvcyk7CiAgICAgICAgIGlmICh4PT1lbmNfRVhDRVBUSU9OKSAvKiBlcnJvciAqLwpAQCAtODI3MSwxOSArODQ0Miw2IEBACiAgICAgfQogfQogCi0vKiByYWlzZXMgYSBVbmljb2RlVHJhbnNsYXRlRXJyb3IgKi8KLXN0YXRpYyB2b2lkCi1yYWlzZV90cmFuc2xhdGVfZXhjZXB0aW9uKFB5T2JqZWN0ICoqZXhjZXB0aW9uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdW5pY29kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBzdGFydHBvcywgUHlfc3NpemVfdCBlbmRwb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJlYXNvbikKLXsKLSAgICBtYWtlX3RyYW5zbGF0ZV9leGNlcHRpb24oZXhjZXB0aW9uT2JqZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmljb2RlLCBzdGFydHBvcywgZW5kcG9zLCByZWFzb24pOwotICAgIGlmICgqZXhjZXB0aW9uT2JqZWN0ICE9IE5VTEwpCi0gICAgICAgIFB5Q29kZWNfU3RyaWN0RXJyb3JzKCpleGNlcHRpb25PYmplY3QpOwotfQotCiAvKiBlcnJvciBoYW5kbGluZyBjYWxsYmFjayBoZWxwZXI6CiAgICBidWlsZCBhcmd1bWVudHMsIGNhbGwgdGhlIGNhbGxiYWNrIGFuZCBjaGVjayB0aGUgYXJndW1lbnRzLAogICAgcHV0IHRoZSByZXN1bHQgaW50byBuZXdwb3MgYW5kIHJldHVybiB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nLCB3aGljaApAQCAtODU1OSw4ICs4NzE3LDEwIEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBzd2l0Y2ggKGtub3duX2Vycm9ySGFuZGxlcikgewogICAgICAgICAgICAgY2FzZSAxOiAvKiBzdHJpY3QgKi8KLSAgICAgICAgICAgICAgICByYWlzZV90cmFuc2xhdGVfZXhjZXB0aW9uKCZleGMsIGlucHV0LCBjb2xsc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZW5kLCByZWFzb24pOworICAgICAgICAgICAgICAgIG1ha2VfdHJhbnNsYXRlX2V4Y2VwdGlvbigmZXhjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCwgY29sbHN0YXJ0LCBjb2xsZW5kLCByZWFzb24pOworICAgICAgICAgICAgICAgIGlmIChleGMgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgUHlDb2RlY19TdHJpY3RFcnJvcnMoZXhjKTsKICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAgICAgICAgICAgICBjYXNlIDI6IC8qIHJlcGxhY2UgKi8KICAgICAgICAgICAgICAgICAvKiBObyBuZWVkIHRvIGNoZWNrIGZvciBzcGFjZSwgdGhpcyBpcyBhIDE6MSByZXBsYWNlbWVudCAqLwpAQCAtOTE1Miw3ICs5MzEyLDcgQEAKIAogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEgfHwKICAgICAgICAgUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gLTE7CiAKICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3Vic3RyaW5nKSA9PSAwKQogICAgICAgICByZXR1cm4gMTsKQEAgLTkxOTAsNyArOTM1MCw2IEBACiAgICAgICAgICAgICAvKiBXZSBkbyBub3QgbmVlZCB0byBjb21wYXJlIDAgYW5kIGxlbihzdWJzdHJpbmcpLTEgYmVjYXVzZQogICAgICAgICAgICAgICAgdGhlIGlmIHN0YXRlbWVudCBhYm92ZSBlbnN1cmVkIGFscmVhZHkgdGhhdCB0aGV5IGFyZSBlcXVhbAogICAgICAgICAgICAgICAgd2hlbiB3ZSBlbmQgdXAgaGVyZS4gKi8KLSAgICAgICAgICAgIC8qIFRPRE86IGhvbm9yIGRpcmVjdGlvbiBhbmQgZG8gYSBmb3J3YXJkIG9yIGJhY2t3YXJkcyBzZWFyY2ggKi8KICAgICAgICAgICAgIGZvciAoaSA9IDE7IGkgPCBlbmRfc3ViOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX1JFQUQoa2luZF9zZWxmLCBkYXRhX3NlbGYsIG9mZnNldCArIGkpICE9CiAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmRfc3ViLCBkYXRhX3N1YiwgaSkpCkBAIC05MzE0LDcgKzk0NzMsNyBAQAogewogICAgIFB5X3NzaXplX3QgajsKICAgICBpbnQgZmluYWxfc2lnbWE7Ci0gICAgUHlfVUNTNCBjOworICAgIFB5X1VDUzQgYyA9IDA7CiAgICAgLyogVSswM0EzIGlzIGluIHRoZSBGaW5hbF9TaWdtYSBjb250ZXh0IHdoZW4sIGl0IGlzIGZvdW5kIGxpa2UgdGhpczoKIAogICAgICBccHtjYXNlZH1ccHtjYXNlLWlnbm9yYWJsZX0qVSswM0EzIShccHtjYXNlLWlnbm9yYWJsZX0qXHB7Y2FzZWR9KQpAQCAtOTY1Niw0MSArOTgxNSw0OSBAQAogICAgICAgICAgICAgc2VwX2RhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZXApOwogICAgIH0KICNlbmRpZgotICAgIGZvciAoaSA9IDAsIHJlc19vZmZzZXQgPSAwOyBpIDwgc2VxbGVuOyArK2kpIHsKLSAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOwotICAgICAgICBpdGVtID0gaXRlbXNbaV07Ci0gICAgICAgIC8qIENvcHkgaXRlbSwgYW5kIG1heWJlIHRoZSBzZXBhcmF0b3IuICovCi0gICAgICAgIGlmIChpICYmIHNlcGxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAodXNlX21lbWNweSkgeworICAgIGlmICh1c2VfbWVtY3B5KSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXFsZW47ICsraSkgeworICAgICAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOworICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAgICAgICAvKiBDb3B5IGl0ZW0sIGFuZCBtYXliZSB0aGUgc2VwYXJhdG9yLiAqLworICAgICAgICAgICAgaWYgKGkgJiYgc2VwbGVuICE9IDApIHsKICAgICAgICAgICAgICAgICBQeV9NRU1DUFkocmVzX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcF9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kICogc2VwbGVuKTsKICAgICAgICAgICAgICAgICByZXNfZGF0YSArPSBraW5kICogc2VwbGVuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMocmVzLCByZXNfb2Zmc2V0LCBzZXAsIDAsIHNlcGxlbik7Ci0gICAgICAgICAgICAgICAgcmVzX29mZnNldCArPSBzZXBsZW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaXRlbWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pOwotICAgICAgICBpZiAoaXRlbWxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBpZiAodXNlX21lbWNweSkgeworCisgICAgICAgICAgICBpdGVtbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoaXRlbSk7CisgICAgICAgICAgICBpZiAoaXRlbWxlbiAhPSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfTUVNQ1BZKHJlc19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfREFUQShpdGVtKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZCAqIGl0ZW1sZW4pOwogICAgICAgICAgICAgICAgIHJlc19kYXRhICs9IGtpbmQgKiBpdGVtbGVuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHJlc19kYXRhID09IFB5VW5pY29kZV8xQllURV9EQVRBKHJlcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsga2luZCAqIFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlcykpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgZm9yIChpID0gMCwgcmVzX29mZnNldCA9IDA7IGkgPCBzZXFsZW47ICsraSkgeworICAgICAgICAgICAgUHlfc3NpemVfdCBpdGVtbGVuOworICAgICAgICAgICAgaXRlbSA9IGl0ZW1zW2ldOworCisgICAgICAgICAgICAvKiBDb3B5IGl0ZW0sIGFuZCBtYXliZSB0aGUgc2VwYXJhdG9yLiAqLworICAgICAgICAgICAgaWYgKGkgJiYgc2VwbGVuICE9IDApIHsKKyAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyhyZXMsIHJlc19vZmZzZXQsIHNlcCwgMCwgc2VwbGVuKTsKKyAgICAgICAgICAgICAgICByZXNfb2Zmc2V0ICs9IHNlcGxlbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlbWxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKGl0ZW0pOworICAgICAgICAgICAgaWYgKGl0ZW1sZW4gIT0gMCkgewogICAgICAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcywgcmVzX29mZnNldCwgaXRlbSwgMCwgaXRlbWxlbik7CiAgICAgICAgICAgICAgICAgcmVzX29mZnNldCArPSBpdGVtbGVuOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfQotICAgIGlmICh1c2VfbWVtY3B5KQotICAgICAgICBhc3NlcnQocmVzX2RhdGEgPT0gUHlVbmljb2RlXzFCWVRFX0RBVEEocmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBraW5kICogUHlVbmljb2RlX0dFVF9MRU5HVEgocmVzKSk7Ci0gICAgZWxzZQogICAgICAgICBhc3NlcnQocmVzX29mZnNldCA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChyZXMpKTsKKyAgICB9CiAKICAgICBQeV9ERUNSRUYoZnNlcSk7CiAgICAgUHlfWERFQ1JFRihzZXApOwpAQCAtOTcyMyw4ICs5ODkwLDggQEAKICAgICAgICAgICAgIFB5X1VDUzQgKiB0b18gPSAoUHlfVUNTNCAqKSgoZGF0YSkpICsgKHN0YXJ0KTsgXAogICAgICAgICAgICAgZm9yICg7IGlfIDwgKGxlbmd0aCk7ICsraV8sICsrdG9fKSAqdG9fID0gKHZhbHVlKTsgXAogICAgICAgICAgICAgYnJlYWs7IFwKLSAgICAgICAgZGVmYXVsdDogYXNzZXJ0KDApOyBcCiAgICAgICAgIH0gXAorICAgICAgICBkZWZhdWx0OiBhc3NlcnQoMCk7IFwKICAgICAgICAgfSBcCiAgICAgfSB3aGlsZSAoMCkKIApAQCAtMTAwODIsNiArMTAyNDksMzEgQEAKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQKK3JlcGxhY2VfMWNoYXJfaW5wbGFjZShQeU9iamVjdCAqdSwgUHlfc3NpemVfdCBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgUHlfVUNTNCB1MSwgUHlfVUNTNCB1MiwgUHlfc3NpemVfdCBtYXhjb3VudCkKK3sKKyAgICBpbnQga2luZCA9IFB5VW5pY29kZV9LSU5EKHUpOworICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1KTsKKyAgICBQeV9zc2l6ZV90IGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHUpOworICAgIGlmIChraW5kID09IFB5VW5pY29kZV8xQllURV9LSU5EKSB7CisgICAgICAgIHVjczFsaWJfcmVwbGFjZV8xY2hhcl9pbnBsYWNlKChQeV9VQ1MxICopZGF0YSArIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzEgKilkYXRhICsgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MSwgdTIsIG1heGNvdW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMkJZVEVfS0lORCkgeworICAgICAgICB1Y3MybGliX3JlcGxhY2VfMWNoYXJfaW5wbGFjZSgoUHlfVUNTMiAqKWRhdGEgKyBwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChQeV9VQ1MyICopZGF0YSArIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEsIHUyLCBtYXhjb3VudCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBhc3NlcnQoa2luZCA9PSBQeVVuaWNvZGVfNEJZVEVfS0lORCk7CisgICAgICAgIHVjczRsaWJfcmVwbGFjZV8xY2hhcl9pbnBsYWNlKChQeV9VQ1M0ICopZGF0YSArIHBvcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5X1VDUzQgKilkYXRhICsgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MSwgdTIsIG1heGNvdW50KTsKKyAgICB9Cit9CisKIHN0YXRpYyBQeU9iamVjdCAqCiByZXBsYWNlKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqc3RyMSwKICAgICAgICAgUHlPYmplY3QgKnN0cjIsIFB5X3NzaXplX3QgbWF4Y291bnQpCkBAIC0xMDA5OCw3ICsxMDI5MCw3IEBACiAgICAgUHlfc3NpemVfdCBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMSk7CiAgICAgUHlfc3NpemVfdCBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMik7CiAgICAgaW50IG1heXNocmluazsKLSAgICBQeV9VQ1M0IG1heGNoYXIsIG1heGNoYXJfc3RyMjsKKyAgICBQeV9VQ1M0IG1heGNoYXIsIG1heGNoYXJfc3RyMSwgbWF4Y2hhcl9zdHIyOwogCiAgICAgaWYgKG1heGNvdW50IDwgMCkKICAgICAgICAgbWF4Y291bnQgPSBQWV9TU0laRV9UX01BWDsKQEAgLTEwMTA3LDE1ICsxMDI5OSwxNiBAQAogCiAgICAgaWYgKHN0cjEgPT0gc3RyMikKICAgICAgICAgZ290byBub3RoaW5nOwotICAgIGlmIChza2luZCA8IGtpbmQxKQotICAgICAgICAvKiBzdWJzdHJpbmcgdG9vIHdpZGUgdG8gYmUgcHJlc2VudCAqLwotICAgICAgICBnb3RvIG5vdGhpbmc7CiAKICAgICBtYXhjaGFyID0gUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHNlbGYpOworICAgIG1heGNoYXJfc3RyMSA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIxKTsKKyAgICBpZiAobWF4Y2hhciA8IG1heGNoYXJfc3RyMSkKKyAgICAgICAgLyogc3Vic3RyaW5nIHRvbyB3aWRlIHRvIGJlIHByZXNlbnQgKi8KKyAgICAgICAgZ290byBub3RoaW5nOwogICAgIG1heGNoYXJfc3RyMiA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRShzdHIyKTsKICAgICAvKiBSZXBsYWNpbmcgc3RyMSB3aXRoIHN0cjIgbWF5IGNhdXNlIGEgbWF4Y2hhciByZWR1Y3Rpb24gaW4gdGhlCiAgICAgICAgcmVzdWx0IHN0cmluZy4gKi8KLSAgICBtYXlzaHJpbmsgPSAobWF4Y2hhcl9zdHIyIDwgbWF4Y2hhcik7CisgICAgbWF5c2hyaW5rID0gKG1heGNoYXJfc3RyMiA8IG1heGNoYXJfc3RyMSkgJiYgKG1heGNoYXIgPT0gbWF4Y2hhcl9zdHIxKTsKICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIG1heGNoYXJfc3RyMik7CiAKICAgICBpZiAobGVuMSA9PSBsZW4yKSB7CkBAIC0xMDEyNSwzNSArMTAzMTgsMTkgQEAKICAgICAgICAgaWYgKGxlbjEgPT0gMSkgewogICAgICAgICAgICAgLyogcmVwbGFjZSBjaGFyYWN0ZXJzICovCiAgICAgICAgICAgICBQeV9VQ1M0IHUxLCB1MjsKLSAgICAgICAgICAgIGludCBya2luZDsKLSAgICAgICAgICAgIFB5X3NzaXplX3QgaW5kZXgsIHBvczsKLSAgICAgICAgICAgIGNoYXIgKnNyYzsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgcG9zOwogCi0gICAgICAgICAgICB1MSA9IFB5VW5pY29kZV9SRUFEX0NIQVIoc3RyMSwgMCk7Ci0gICAgICAgICAgICBwb3MgPSBmaW5kY2hhcihzYnVmLCBQeVVuaWNvZGVfS0lORChzZWxmKSwgc2xlbiwgdTEsIDEpOworICAgICAgICAgICAgdTEgPSBQeVVuaWNvZGVfUkVBRChraW5kMSwgYnVmMSwgMCk7CisgICAgICAgICAgICBwb3MgPSBmaW5kY2hhcihzYnVmLCBza2luZCwgc2xlbiwgdTEsIDEpOwogICAgICAgICAgICAgaWYgKHBvcyA8IDApCiAgICAgICAgICAgICAgICAgZ290byBub3RoaW5nOwotICAgICAgICAgICAgdTIgPSBQeVVuaWNvZGVfUkVBRF9DSEFSKHN0cjIsIDApOworICAgICAgICAgICAgdTIgPSBQeVVuaWNvZGVfUkVBRChraW5kMiwgYnVmMiwgMCk7CiAgICAgICAgICAgICB1ID0gUHlVbmljb2RlX05ldyhzbGVuLCBtYXhjaGFyKTsKICAgICAgICAgICAgIGlmICghdSkKICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnModSwgMCwgc2VsZiwgMCwgc2xlbik7Ci0gICAgICAgICAgICBya2luZCA9IFB5VW5pY29kZV9LSU5EKHUpOwogCi0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUocmtpbmQsIFB5VW5pY29kZV9EQVRBKHUpLCBwb3MsIHUyKTsKLSAgICAgICAgICAgIGluZGV4ID0gMDsKLSAgICAgICAgICAgIHNyYyA9IHNidWY7Ci0gICAgICAgICAgICB3aGlsZSAoLS1tYXhjb3VudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwb3MrKzsKLSAgICAgICAgICAgICAgICBzcmMgKz0gcG9zICogUHlVbmljb2RlX0tJTkQoc2VsZik7Ci0gICAgICAgICAgICAgICAgc2xlbiAtPSBwb3M7Ci0gICAgICAgICAgICAgICAgaW5kZXggKz0gcG9zOwotICAgICAgICAgICAgICAgIHBvcyA9IGZpbmRjaGFyKHNyYywgUHlVbmljb2RlX0tJTkQoc2VsZiksIHNsZW4sIHUxLCAxKTsKLSAgICAgICAgICAgICAgICBpZiAocG9zIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHJraW5kLCBQeVVuaWNvZGVfREFUQSh1KSwgaW5kZXggKyBwb3MsIHUyKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHUsIDAsIHNlbGYsIDAsIHNsZW4pOworICAgICAgICAgICAgcmVwbGFjZV8xY2hhcl9pbnBsYWNlKHUsIHBvcywgdTEsIHUyLCBtYXhjb3VudCk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpbnQgcmtpbmQgPSBza2luZDsKQEAgLTEwNDY1LDkgKzEwNjQyLDI0IEBACiBzdGF0aWMgaW50CiB1bmljb2RlX2NvbXBhcmUoUHlPYmplY3QgKnN0cjEsIFB5T2JqZWN0ICpzdHIyKQogeworI2RlZmluZSBDT01QQVJFKFRZUEUxLCBUWVBFMikgXAorICAgIGRvIHsgXAorICAgICAgICBUWVBFMSogcDEgPSAoVFlQRTEgKilkYXRhMTsgXAorICAgICAgICBUWVBFMiogcDIgPSAoVFlQRTIgKilkYXRhMjsgXAorICAgICAgICBUWVBFMSogZW5kID0gcDEgKyBsZW47IFwKKyAgICAgICAgUHlfVUNTNCBjMSwgYzI7IFwKKyAgICAgICAgZm9yICg7IHAxICE9IGVuZDsgcDErKywgcDIrKykgeyBcCisgICAgICAgICAgICBjMSA9ICpwMTsgXAorICAgICAgICAgICAgYzIgPSAqcDI7IFwKKyAgICAgICAgICAgIGlmIChjMSAhPSBjMikgXAorICAgICAgICAgICAgICAgIHJldHVybiAoYzEgPCBjMikgPyAtMSA6IDE7IFwKKyAgICAgICAgfSBcCisgICAgfSBcCisgICAgd2hpbGUgKDApCisKICAgICBpbnQga2luZDEsIGtpbmQyOwogICAgIHZvaWQgKmRhdGExLCAqZGF0YTI7Ci0gICAgUHlfc3NpemVfdCBsZW4xLCBsZW4yLCBpOworICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMiwgbGVuOwogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzdHIxKTsKICAgICBraW5kMiA9IFB5VW5pY29kZV9LSU5EKHN0cjIpOwpAQCAtMTA0NzUsMTkgKzEwNjY3LDExNiBAQAogICAgIGRhdGEyID0gUHlVbmljb2RlX0RBVEEoc3RyMik7CiAgICAgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjEpOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIyKTsKKyAgICBsZW4gPSBQeV9NSU4obGVuMSwgbGVuMik7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuMSAmJiBpIDwgbGVuMjsgKytpKSB7Ci0gICAgICAgIFB5X1VDUzQgYzEsIGMyOwotICAgICAgICBjMSA9IFB5VW5pY29kZV9SRUFEKGtpbmQxLCBkYXRhMSwgaSk7Ci0gICAgICAgIGMyID0gUHlVbmljb2RlX1JFQUQoa2luZDIsIGRhdGEyLCBpKTsKLQotICAgICAgICBpZiAoYzEgIT0gYzIpCi0gICAgICAgICAgICByZXR1cm4gKGMxIDwgYzIpID8gLTEgOiAxOworICAgIHN3aXRjaChraW5kMSkgeworICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CisgICAgeworICAgICAgICBzd2l0Y2goa2luZDIpIHsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMUJZVEVfS0lORDoKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGNtcCA9IG1lbWNtcChkYXRhMSwgZGF0YTIsIGxlbik7CisgICAgICAgICAgICAvKiBub3JtYWxpemUgcmVzdWx0IG9mIG1lbWNtcCgpIGludG8gdGhlIHJhbmdlIFstMTsgMV0gKi8KKyAgICAgICAgICAgIGlmIChjbXAgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChjbXAgPiAwKQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMSwgUHlfVUNTMik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMSwgUHlfVUNTNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfMkJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1MyLCBQeV9VQ1MxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICB7CisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzIsIFB5X1VDUzIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICAgICAgICAgIENPTVBBUkUoUHlfVUNTMiwgUHlfVUNTNCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIHN3aXRjaChraW5kMikgeworICAgICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1MxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgICAgICAgICAgQ09NUEFSRShQeV9VQ1M0LCBQeV9VQ1MyKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFB5VW5pY29kZV80QllURV9LSU5EOgorICAgICAgICB7CisjaWYgZGVmaW5lZChIQVZFX1dNRU1DTVApICYmIFNJWkVPRl9XQ0hBUl9UID09IDQKKyAgICAgICAgICAgIGludCBjbXAgPSB3bWVtY21wKCh3Y2hhcl90ICopZGF0YTEsICh3Y2hhcl90ICopZGF0YTIsIGxlbik7CisgICAgICAgICAgICAvKiBub3JtYWxpemUgcmVzdWx0IG9mIHdtZW1jbXAoKSBpbnRvIHRoZSByYW5nZSBbLTE7IDFdICovCisgICAgICAgICAgICBpZiAoY21wIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoY21wID4gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyNlbHNlCisgICAgICAgICAgICBDT01QQVJFKFB5X1VDUzQsIFB5X1VDUzQpOworI2VuZGlmCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYXNzZXJ0KDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoMCk7CiAgICAgfQogCi0gICAgcmV0dXJuIChsZW4xIDwgbGVuMikgPyAtMSA6IChsZW4xICE9IGxlbjIpOworICAgIGlmIChsZW4xID09IGxlbjIpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChsZW4xIDwgbGVuMikKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7CisKKyN1bmRlZiBDT01QQVJFCiB9CiAKK1B5X0xPQ0FMKGludCkKK3VuaWNvZGVfY29tcGFyZV9lcShQeU9iamVjdCAqc3RyMSwgUHlPYmplY3QgKnN0cjIpCit7CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTEsICpkYXRhMjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgY21wOworCisgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyMSk7CisgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cjIpICE9IGxlbikKKyAgICAgICAgcmV0dXJuIDA7CisgICAga2luZCA9IFB5VW5pY29kZV9LSU5EKHN0cjEpOworICAgIGlmIChQeVVuaWNvZGVfS0lORChzdHIyKSAhPSBraW5kKQorICAgICAgICByZXR1cm4gMDsKKyAgICBkYXRhMSA9IFB5VW5pY29kZV9EQVRBKHN0cjEpOworICAgIGRhdGEyID0gUHlVbmljb2RlX0RBVEEoc3RyMik7CisKKyAgICBjbXAgPSBtZW1jbXAoZGF0YTEsIGRhdGEyLCBsZW4gKiBraW5kKTsKKyAgICByZXR1cm4gKGNtcCA9PSAwKTsKK30KKworCiBpbnQKIFB5VW5pY29kZV9Db21wYXJlKFB5T2JqZWN0ICpsZWZ0LCBQeU9iamVjdCAqcmlnaHQpCiB7CkBAIC0xMDQ5NSw2ICsxMDc4NCwxMSBAQAogICAgICAgICBpZiAoUHlVbmljb2RlX1JFQURZKGxlZnQpID09IC0xIHx8CiAgICAgICAgICAgICBQeVVuaWNvZGVfUkVBRFkocmlnaHQpID09IC0xKQogICAgICAgICAgICAgcmV0dXJuIC0xOworCisgICAgICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLworICAgICAgICBpZiAobGVmdCA9PSByaWdodCkKKyAgICAgICAgICAgIHJldHVybiAwOworCiAgICAgICAgIHJldHVybiB1bmljb2RlX2NvbXBhcmUobGVmdCwgcmlnaHQpOwogICAgIH0KICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLApAQCAtMTA1MDUsMjkgKzEwNzk5LDU5IEBACiB9CiAKIGludAorX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKFB5T2JqZWN0ICpsZWZ0LCBfUHlfSWRlbnRpZmllciAqcmlnaHQpCit7CisgICAgUHlPYmplY3QgKnJpZ2h0X3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKHJpZ2h0KTsgICAvKiBib3Jyb3dlZCAqLworICAgIGlmIChyaWdodF9zdHIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHJldHVybiBQeVVuaWNvZGVfQ29tcGFyZShsZWZ0LCByaWdodF9zdHIpOworfQorCitpbnQKIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKFB5T2JqZWN0KiB1bmksIGNvbnN0IGNoYXIqIHN0cikKIHsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgaW50IGtpbmQ7Ci0gICAgdm9pZCAqZGF0YTsKICAgICBQeV9VQ1M0IGNocjsKIAogICAgIGFzc2VydChfUHlVbmljb2RlX0NIRUNLKHVuaSkpOwogICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodW5pKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1bmkpOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmkpOwotICAgIC8qIENvbXBhcmUgVW5pY29kZSBzdHJpbmcgYW5kIHNvdXJjZSBjaGFyYWN0ZXIgc2V0IHN0cmluZyAqLwotICAgIGZvciAoaSA9IDA7IChjaHIgPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkgJiYgc3RyW2ldOyBpKyspCi0gICAgICAgIGlmIChjaHIgIT0gc3RyW2ldKQotICAgICAgICAgICAgcmV0dXJuIChjaHIgPCAodW5zaWduZWQgY2hhcikoc3RyW2ldKSkgPyAtMSA6IDE7Ci0gICAgLyogVGhpcyBjaGVjayBrZWVwcyBQeXRob24gc3RyaW5ncyB0aGF0IGVuZCBpbiAnXDAnIGZyb20gY29tcGFyaW5nIGVxdWFsCi0gICAgIHRvIEMgc3RyaW5ncyBpZGVudGljYWwgdXAgdG8gdGhhdCBwb2ludC4gKi8KLSAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgodW5pKSAhPSBpIHx8IGNocikKLSAgICAgICAgcmV0dXJuIDE7IC8qIHVuaSBpcyBsb25nZXIgKi8KLSAgICBpZiAoc3RyW2ldKQotICAgICAgICByZXR1cm4gLTE7IC8qIHN0ciBpcyBsb25nZXIgKi8KLSAgICByZXR1cm4gMDsKKyAgICBpZiAoa2luZCA9PSBQeVVuaWNvZGVfMUJZVEVfS0lORCkgeworICAgICAgICBjb25zdCB2b2lkICpkYXRhID0gUHlVbmljb2RlXzFCWVRFX0RBVEEodW5pKTsKKyAgICAgICAgc2l6ZV90IGxlbjEgPSAoc2l6ZV90KVB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaSk7CisgICAgICAgIHNpemVfdCBsZW4sIGxlbjIgPSBzdHJsZW4oc3RyKTsKKyAgICAgICAgaW50IGNtcDsKKworICAgICAgICBsZW4gPSBQeV9NSU4obGVuMSwgbGVuMik7CisgICAgICAgIGNtcCA9IG1lbWNtcChkYXRhLCBzdHIsIGxlbik7CisgICAgICAgIGlmIChjbXAgIT0gMCkgeworICAgICAgICAgICAgaWYgKGNtcCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgIGlmIChsZW4xID4gbGVuMikKKyAgICAgICAgICAgIHJldHVybiAxOyAvKiB1bmkgaXMgbG9uZ2VyICovCisgICAgICAgIGlmIChsZW4yID4gbGVuMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsgLyogc3RyIGlzIGxvbmdlciAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQSh1bmkpOworICAgICAgICAvKiBDb21wYXJlIFVuaWNvZGUgc3RyaW5nIGFuZCBzb3VyY2UgY2hhcmFjdGVyIHNldCBzdHJpbmcgKi8KKyAgICAgICAgZm9yIChpID0gMDsgKGNociA9IFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGkpKSAmJiBzdHJbaV07IGkrKykKKyAgICAgICAgICAgIGlmIChjaHIgIT0gc3RyW2ldKQorICAgICAgICAgICAgICAgIHJldHVybiAoY2hyIDwgKHVuc2lnbmVkIGNoYXIpKHN0cltpXSkpID8gLTEgOiAxOworICAgICAgICAvKiBUaGlzIGNoZWNrIGtlZXBzIFB5dGhvbiBzdHJpbmdzIHRoYXQgZW5kIGluICdcMCcgZnJvbSBjb21wYXJpbmcgZXF1YWwKKyAgICAgICAgIHRvIEMgc3RyaW5ncyBpZGVudGljYWwgdXAgdG8gdGhhdCBwb2ludC4gKi8KKyAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKHVuaSkgIT0gaSB8fCBjaHIpCisgICAgICAgICAgICByZXR1cm4gMTsgLyogdW5pIGlzIGxvbmdlciAqLworICAgICAgICBpZiAoc3RyW2ldKQorICAgICAgICAgICAgcmV0dXJuIC0xOyAvKiBzdHIgaXMgbG9uZ2VyICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KIH0KIAogCkBAIC0xMDUzOCwzNiArMTA4NjIsNDMgQEAKIFB5VW5pY29kZV9SaWNoQ29tcGFyZShQeU9iamVjdCAqbGVmdCwgUHlPYmplY3QgKnJpZ2h0LCBpbnQgb3ApCiB7CiAgICAgaW50IHJlc3VsdDsKKyAgICBQeU9iamVjdCAqdjsKIAotICAgIGlmIChQeVVuaWNvZGVfQ2hlY2sobGVmdCkgJiYgUHlVbmljb2RlX0NoZWNrKHJpZ2h0KSkgewotICAgICAgICBQeU9iamVjdCAqdjsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShsZWZ0KSA9PSAtMSB8fAotICAgICAgICAgICAgUHlVbmljb2RlX1JFQURZKHJpZ2h0KSA9PSAtMSkKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhsZWZ0KSB8fCAhUHlVbmljb2RlX0NoZWNrKHJpZ2h0KSkKKyAgICAgICAgUHlfUkVUVVJOX05PVElNUExFTUVOVEVEOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShsZWZ0KSA9PSAtMSB8fAorICAgICAgICBQeVVuaWNvZGVfUkVBRFkocmlnaHQpID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChsZWZ0ID09IHJpZ2h0KSB7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBQeV9FUToKKyAgICAgICAgY2FzZSBQeV9MRToKKyAgICAgICAgY2FzZSBQeV9HRToKKyAgICAgICAgICAgIC8qIGEgc3RyaW5nIGlzIGVxdWFsIHRvIGl0c2VsZiAqLworICAgICAgICAgICAgdiA9IFB5X1RydWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQeV9ORToKKyAgICAgICAgY2FzZSBQeV9MVDoKKyAgICAgICAgY2FzZSBQeV9HVDoKKyAgICAgICAgICAgIHYgPSBQeV9GYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUHlFcnJfQmFkQXJndW1lbnQoKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICBpZiAoUHlVbmljb2RlX0dFVF9MRU5HVEgobGVmdCkgIT0gUHlVbmljb2RlX0dFVF9MRU5HVEgocmlnaHQpIHx8Ci0gICAgICAgICAgICBQeVVuaWNvZGVfS0lORChsZWZ0KSAhPSBQeVVuaWNvZGVfS0lORChyaWdodCkpIHsKLSAgICAgICAgICAgIGlmIChvcCA9PSBQeV9FUSkgewotICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9GYWxzZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFB5X0ZhbHNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKG9wID09IFB5X05FKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOwotICAgICAgICAgICAgICAgIHJldHVybiBQeV9UcnVlOwotICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlmIChsZWZ0ID09IHJpZ2h0KQotICAgICAgICAgICAgcmVzdWx0ID0gMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0ID0gdW5pY29kZV9jb21wYXJlKGxlZnQsIHJpZ2h0KTsKKyAgICB9CisgICAgZWxzZSBpZiAob3AgPT0gUHlfRVEgfHwgb3AgPT0gUHlfTkUpIHsKKyAgICAgICAgcmVzdWx0ID0gdW5pY29kZV9jb21wYXJlX2VxKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgcmVzdWx0IF49IChvcCA9PSBQeV9ORSk7CisgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0KTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHJlc3VsdCA9IHVuaWNvZGVfY29tcGFyZShsZWZ0LCByaWdodCk7CiAKICAgICAgICAgLyogQ29udmVydCB0aGUgcmV0dXJuIHZhbHVlIHRvIGEgQm9vbGVhbiAqLwogICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgUHlfRVE6Ci0gICAgICAgICAgICB2ID0gVEVTVF9DT05EKHJlc3VsdCA9PSAwKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFB5X05FOgotICAgICAgICAgICAgdiA9IFRFU1RfQ09ORChyZXN1bHQgIT0gMCk7Ci0gICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQeV9MRToKICAgICAgICAgICAgIHYgPSBURVNUX0NPTkQocmVzdWx0IDw9IDApOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMDU4NCwxOCArMTA5MTUsMTYgQEAKICAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYodik7Ci0gICAgICAgIHJldHVybiB2OwogICAgIH0KLQotICAgIFB5X1JFVFVSTl9OT1RJTVBMRU1FTlRFRDsKKyAgICBQeV9JTkNSRUYodik7CisgICAgcmV0dXJuIHY7CiB9CiAKIGludAogUHlVbmljb2RlX0NvbnRhaW5zKFB5T2JqZWN0ICpjb250YWluZXIsIFB5T2JqZWN0ICplbGVtZW50KQogewogICAgIFB5T2JqZWN0ICpzdHIsICpzdWI7Ci0gICAgaW50IGtpbmQxLCBraW5kMiwga2luZDsKKyAgICBpbnQga2luZDEsIGtpbmQyOwogICAgIHZvaWQgKmJ1ZjEsICpidWYyOwogICAgIFB5X3NzaXplX3QgbGVuMSwgbGVuMjsKICAgICBpbnQgcmVzdWx0OwpAQCAtMTA2MTQsMjMgKzEwOTQzLDE4IEBACiAgICAgICAgIFB5X0RFQ1JFRihzdWIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3ViKSA9PSAtMSB8fCBQeVVuaWNvZGVfUkVBRFkoc3RyKSA9PSAtMSkgewotICAgICAgICBQeV9ERUNSRUYoc3ViKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgfQogCiAgICAga2luZDEgPSBQeVVuaWNvZGVfS0lORChzdHIpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3ViKTsKLSAgICBraW5kID0ga2luZDE7CiAgICAgYnVmMSA9IFB5VW5pY29kZV9EQVRBKHN0cik7CiAgICAgYnVmMiA9IFB5VW5pY29kZV9EQVRBKHN1Yik7Ci0gICAgaWYgKGtpbmQyICE9IGtpbmQpIHsKLSAgICAgICAgaWYgKGtpbmQyID4ga2luZCkgeworICAgIGlmIChraW5kMiAhPSBraW5kMSkgeworICAgICAgICBpZiAoa2luZDIgPiBraW5kMSkgewogICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9Ci0gICAgICAgIGJ1ZjIgPSBfUHlVbmljb2RlX0FzS2luZChzdWIsIGtpbmQpOworICAgICAgICBidWYyID0gX1B5VW5pY29kZV9Bc0tpbmQoc3ViLCBraW5kMSk7CiAgICAgfQogICAgIGlmICghYnVmMikgewogICAgICAgICBQeV9ERUNSRUYoc3ViKTsKQEAgLTEwNjQwLDcgKzEwOTY0LDcgQEAKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKTsKICAgICBsZW4yID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3ViKTsKIAotICAgIHN3aXRjaCAoa2luZCkgeworICAgIHN3aXRjaCAoa2luZDEpIHsKICAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgogICAgICAgICByZXN1bHQgPSB1Y3MxbGliX2ZpbmQoYnVmMSwgbGVuMSwgYnVmMiwgbGVuMiwgMCkgIT0gLTE7CiAgICAgICAgIGJyZWFrOwpAQCAtMTA2NTgsNyArMTA5ODIsNyBAQAogICAgIFB5X0RFQ1JFRihzdHIpOwogICAgIFB5X0RFQ1JFRihzdWIpOwogCi0gICAgaWYgKGtpbmQyICE9IGtpbmQpCisgICAgaWYgKGtpbmQyICE9IGtpbmQxKQogICAgICAgICBQeU1lbV9GcmVlKGJ1ZjIpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEwNzM0LDcgKzExMDU4LDggQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBsZWZ0ID0gKnBfbGVmdDsKLSAgICBpZiAocmlnaHQgPT0gTlVMTCB8fCBsZWZ0ID09IE5VTEwgfHwgIVB5VW5pY29kZV9DaGVjayhsZWZ0KSkgeworICAgIGlmIChyaWdodCA9PSBOVUxMIHx8IGxlZnQgPT0gTlVMTAorICAgICAgICB8fCAhUHlVbmljb2RlX0NoZWNrKGxlZnQpIHx8ICFQeVVuaWNvZGVfQ2hlY2socmlnaHQpKSB7CiAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICBnb3RvIGVycm9yOwpAQCAtMTA3NzQsMTUgKzExMDk5LDkgQEAKICAgICAgICAgJiYgIShQeVVuaWNvZGVfSVNfQVNDSUkobGVmdCkgJiYgIVB5VW5pY29kZV9JU19BU0NJSShyaWdodCkpKQogICAgIHsKICAgICAgICAgLyogYXBwZW5kIGlucGxhY2UgKi8KLSAgICAgICAgaWYgKHVuaWNvZGVfcmVzaXplKHBfbGVmdCwgbmV3X2xlbikgIT0gMCkgewotICAgICAgICAgICAgLyogWFhYIGlmIF9QeVVuaWNvZGVfUmVzaXplKCkgZmFpbHMsICdsZWZ0JyBoYXMgYmVlbgotICAgICAgICAgICAgICogZGVhbGxvY2F0ZWQgc28gaXQgY2Fubm90IGJlIHB1dCBiYWNrIGludG8KLSAgICAgICAgICAgICAqICd2YXJpYWJsZScuICBUaGUgTWVtb3J5RXJyb3IgaXMgcmFpc2VkIHdoZW4gdGhlcmUKLSAgICAgICAgICAgICAqIGlzIG5vIHZhbHVlIGluICd2YXJpYWJsZScsIHdoaWNoIG1pZ2h0ICh2ZXJ5Ci0gICAgICAgICAgICAgKiByZW1vdGVseSkgYmUgYSBjYXVzZSBvZiBpbmNvbXBhdGliaWxpdGllcy4KLSAgICAgICAgICAgICAqLworICAgICAgICBpZiAodW5pY29kZV9yZXNpemUocF9sZWZ0LCBuZXdfbGVuKSAhPSAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICAgICAgfQorCiAgICAgICAgIC8qIGNvcHkgJ3JpZ2h0JyBpbnRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgYXJlYSBvZiAnbGVmdCcgKi8KICAgICAgICAgX1B5VW5pY29kZV9GYXN0Q29weUNoYXJhY3RlcnMoKnBfbGVmdCwgbGVmdF9sZW4sIHJpZ2h0LCAwLCByaWdodF9sZW4pOwogICAgIH0KQEAgLTEwODI0LDcgKzExMTQzLDcgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiB1bmljb2RlX2NvdW50KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqc3Vic3RyaW5nOworICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOwogICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOwogICAgIFB5X3NzaXplX3QgZW5kID0gUFlfU1NJWkVfVF9NQVg7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKQEAgLTEwODM4LDggKzExMTU3LDEwIEBACiAKICAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHNlbGYpOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc3Vic3RyaW5nKTsKLSAgICBpZiAoa2luZDIgPiBraW5kMSkKKyAgICBpZiAoa2luZDIgPiBraW5kMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICB9CiAgICAga2luZCA9IGtpbmQxOwogICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKICAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc3Vic3RyaW5nKTsKQEAgLTEwOTEwLDIzICsxMTIzMSwyNSBAQAogfQogCiBQeURvY19TVFJWQVIoZXhwYW5kdGFic19fZG9jX18sCi0gICAgICAgICAgICAgIlMuZXhwYW5kdGFicyhbdGFic2l6ZV0pIC0+IHN0clxuXAorICAgICAgICAgICAgICJTLmV4cGFuZHRhYnModGFic2l6ZT04KSAtPiBzdHJcblwKIFxuXAogUmV0dXJuIGEgY29weSBvZiBTIHdoZXJlIGFsbCB0YWIgY2hhcmFjdGVycyBhcmUgZXhwYW5kZWQgdXNpbmcgc3BhY2VzLlxuXAogSWYgdGFic2l6ZSBpcyBub3QgZ2l2ZW4sIGEgdGFiIHNpemUgb2YgOCBjaGFyYWN0ZXJzIGlzIGFzc3VtZWQuIik7CiAKIHN0YXRpYyBQeU9iamVjdCoKLXVuaWNvZGVfZXhwYW5kdGFicyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit1bmljb2RlX2V4cGFuZHRhYnMoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKICAgICBQeV9zc2l6ZV90IGksIGosIGxpbmVfcG9zLCBzcmNfbGVuLCBpbmNyOwogICAgIFB5X1VDUzQgY2g7CiAgICAgUHlPYmplY3QgKnU7CiAgICAgdm9pZCAqc3JjX2RhdGEsICpkZXN0X2RhdGE7CisgICAgc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJ0YWJzaXplIiwgMH07CiAgICAgaW50IHRhYnNpemUgPSA4OwogICAgIGludCBraW5kOwogICAgIGludCBmb3VuZDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAifGk6ZXhwYW5kdGFicyIsICZ0YWJzaXplKSkKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAifGk6ZXhwYW5kdGFicyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmdGFic2l6ZSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKQEAgLTExMDA4LDE5ICsxMTMzMSwyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfZmluZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKnN1YnN0cmluZzsKLSAgICBQeV9zc2l6ZV90IHN0YXJ0OwotICAgIFB5X3NzaXplX3QgZW5kOworICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOworICAgIFB5X3NzaXplX3QgZW5kID0gMDsKICAgICBQeV9zc2l6ZV90IHJlc3VsdDsKIAogICAgIGlmICghc3RyaW5nbGliX3BhcnNlX2FyZ3NfZmluZHNfdW5pY29kZSgiZmluZCIsIGFyZ3MsICZzdWJzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTEwMzgsNyArMTEzNjUsNiBAQAogICAgIHZvaWQgKmRhdGE7CiAgICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kOwogICAgIFB5X1VDUzQgY2g7Ci0gICAgUHlPYmplY3QgKnJlczsKIAogICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHNlbGYpIHx8IFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgewogICAgICAgICBQeUVycl9CYWRBcmd1bWVudCgpOwpAQCAtMTEwNTEsMTcgKzExMzc3LDcgQEAKICAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CiAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaW5kZXgpOwotICAgIGlmIChjaCA8IDI1NikKLSAgICAgICAgcmV0dXJuIGdldF9sYXRpbjFfY2hhcihjaCk7Ci0KLSAgICByZXMgPSBQeVVuaWNvZGVfTmV3KDEsIGNoKTsKLSAgICBpZiAocmVzID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChyZXMpOwotICAgIGRhdGEgPSBQeVVuaWNvZGVfREFUQShyZXMpOwotICAgIFB5VW5pY29kZV9XUklURShraW5kLCBkYXRhLCAwLCBjaCk7Ci0gICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXMsIDEpKTsKLSAgICByZXR1cm4gcmVzOworICAgIHJldHVybiB1bmljb2RlX2NoYXIoY2gpOwogfQogCiAvKiBCZWxpZXZlIGl0IG9yIG5vdCwgdGhpcyBwcm9kdWNlcyB0aGUgc2FtZSB2YWx1ZSBmb3IgQVNDSUkgc3RyaW5ncwpAQCAtMTEwODgsNDMgKzExNDA0LDExIEBACiAgICAgICAgIF9QeVVuaWNvZGVfSEFTSChzZWxmKSA9IDA7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLQotICAgIC8qIFRoZSBoYXNoIGZ1bmN0aW9uIGFzIGEgbWFjcm8sIGdldHMgZXhwYW5kZWQgdGhyZWUgdGltZXMgYmVsb3cuICovCi0jZGVmaW5lIEhBU0goUCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB4IF49IChQeV91aGFzaF90KSAqUCA8PCA3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIHdoaWxlICgtLWxlbiA+PSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKlArKzsgIFwKLQotICAgIHggPSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQucHJlZml4OwotICAgIHN3aXRjaCAoUHlVbmljb2RlX0tJTkQoc2VsZikpIHsKLSAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOiB7Ci0gICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmMgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZWxmKTsKLSAgICAgICAgSEFTSChjKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgUHlVbmljb2RlXzJCWVRFX0tJTkQ6IHsKLSAgICAgICAgY29uc3QgUHlfVUNTMiAqcyA9IFB5VW5pY29kZV8yQllURV9EQVRBKHNlbGYpOwotICAgICAgICBIQVNIKHMpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDogewotICAgICAgICBQeV9VQ1M0ICpsOwotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0tJTkQoc2VsZikgPT0gUHlVbmljb2RlXzRCWVRFX0tJTkQgJiYKLSAgICAgICAgICAgICAgICJJbXBvc3NpYmxlIHN3aXRjaCBjYXNlIGluIHVuaWNvZGVfaGFzaCIpOwotICAgICAgICBsID0gUHlVbmljb2RlXzRCWVRFX0RBVEEoc2VsZik7Ci0gICAgICAgIEhBU0gobCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7Ci0gICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuc3VmZml4OwotCi0gICAgaWYgKHggPT0gLTEpCi0gICAgICAgIHggPSAtMjsKKyAgICB4ID0gX1B5X0hhc2hCeXRlcyhQeVVuaWNvZGVfREFUQShzZWxmKSwKKyAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZWxmKSAqIFB5VW5pY29kZV9LSU5EKHNlbGYpKTsKICAgICBfUHlVbmljb2RlX0hBU0goc2VsZikgPSB4OwogICAgIHJldHVybiB4OwogfQotI3VuZGVmIEhBU0gKIAogUHlEb2NfU1RSVkFSKGluZGV4X19kb2NfXywKICAgICAgICAgICAgICAiUy5pbmRleChzdWJbLCBzdGFydFssIGVuZF1dKSAtPiBpbnRcblwKQEAgLTExMTM1LDE4ICsxMTQxOSwyMiBAQAogdW5pY29kZV9pbmRleChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgUHlfc3NpemVfdCByZXN1bHQ7Ci0gICAgUHlPYmplY3QgKnN1YnN0cmluZzsKLSAgICBQeV9zc2l6ZV90IHN0YXJ0OwotICAgIFB5X3NzaXplX3QgZW5kOworICAgIFB5T2JqZWN0ICpzdWJzdHJpbmcgPSBOVUxMOworICAgIFB5X3NzaXplX3Qgc3RhcnQgPSAwOworICAgIFB5X3NzaXplX3QgZW5kID0gMDsKIAogICAgIGlmICghc3RyaW5nbGliX3BhcnNlX2FyZ3NfZmluZHNfdW5pY29kZSgiaW5kZXgiLCBhcmdzLCAmc3Vic3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RhcnQsICZlbmQpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHJlc3VsdCA9IGFueV9maW5kX3NsaWNlKDEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTExNjc2LDYgKzExOTY0LDcgQEAKICAgICBpbnQga2luZDsKICAgICBQeV9zc2l6ZV90IGksIGosIGxlbjsKICAgICBCTE9PTV9NQVNLIHNlcG1hc2s7CisgICAgUHlfc3NpemVfdCBzZXBsZW47CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xIHx8IFB5VW5pY29kZV9SRUFEWShzZXBvYmopID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTExNjgzLDI0ICsxMTk3MiwzNSBAQAogICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzZWxmKTsKICAgICBkYXRhID0gUHlVbmljb2RlX0RBVEEoc2VsZik7CiAgICAgbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2VsZik7CisgICAgc2VwbGVuID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKTsKICAgICBzZXBtYXNrID0gbWFrZV9ibG9vbV9tYXNrKFB5VW5pY29kZV9LSU5EKHNlcG9iaiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfREFUQShzZXBvYmopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoc2Vwb2JqKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXBsZW4pOwogCiAgICAgaSA9IDA7CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmCi0gICAgICAgICAgICAgICBCTE9PTV9NRU1CRVIoc2VwbWFzaywgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSksIHNlcG9iaikpIHsKKyAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGkrKzsKICAgICAgICAgfQogICAgIH0KIAogICAgIGogPSBsZW47CiAgICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBqLS07CisgICAgICAgIHdoaWxlIChqID49IGkpIHsKKyAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgIGlmICghQkxPT00oc2VwbWFzaywgY2gpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9GaW5kQ2hhcihzZXBvYmosIGNoLCAwLCBzZXBsZW4sIDEpIDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGotLTsKLSAgICAgICAgfSB3aGlsZSAoaiA+PSBpICYmCi0gICAgICAgICAgICAgICAgIEJMT09NX01FTUJFUihzZXBtYXNrLCBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKSwgc2Vwb2JqKSk7CisgICAgICAgIH0KKwogICAgICAgICBqKys7CiAgICAgfQogCkBAIC0xMTc0NywzMCArMTIwNDcsNjMgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkb19zdHJpcChQeU9iamVjdCAqc2VsZiwgaW50IHN0cmlwdHlwZSkKIHsKLSAgICBpbnQga2luZDsKLSAgICB2b2lkICpkYXRhOwogICAgIFB5X3NzaXplX3QgbGVuLCBpLCBqOwogCiAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7Ci0gICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNlbGYpOwogICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlbGYpOwogCi0gICAgaSA9IDA7Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7Ci0gICAgICAgIHdoaWxlIChpIDwgbGVuICYmIFB5X1VOSUNPREVfSVNTUEFDRShQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKSkpIHsKLSAgICAgICAgICAgIGkrKzsKKyAgICBpZiAoUHlVbmljb2RlX0lTX0FTQ0lJKHNlbGYpKSB7CisgICAgICAgIFB5X1VDUzEgKmRhdGEgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShzZWxmKTsKKworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2ldOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBqID0gbGVuOworICAgICAgICBpZiAoc3RyaXB0eXBlICE9IExFRlRTVFJJUCkgeworICAgICAgICAgICAgai0tOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzEgY2ggPSBkYXRhW2pdOworICAgICAgICAgICAgICAgIGlmICghX1B5X2FzY2lpX3doaXRlc3BhY2VbY2hdKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBqLS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBqKys7CiAgICAgICAgIH0KICAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGludCBraW5kID0gUHlVbmljb2RlX0tJTkQoc2VsZik7CisgICAgICAgIHZvaWQgKmRhdGEgPSBQeVVuaWNvZGVfREFUQShzZWxmKTsKIAotICAgIGogPSBsZW47Ci0gICAgaWYgKHN0cmlwdHlwZSAhPSBMRUZUU1RSSVApIHsKLSAgICAgICAgZG8geworICAgICAgICBpID0gMDsKKyAgICAgICAgaWYgKHN0cmlwdHlwZSAhPSBSSUdIVFNUUklQKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IGxlbikgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBpKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGogPSBsZW47CisgICAgICAgIGlmIChzdHJpcHR5cGUgIT0gTEVGVFNUUklQKSB7CiAgICAgICAgICAgICBqLS07Ci0gICAgICAgIH0gd2hpbGUgKGogPj0gaSAmJiBQeV9VTklDT0RFX0lTU1BBQ0UoUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaikpKTsKLSAgICAgICAgaisrOworICAgICAgICAgICAgd2hpbGUgKGogPj0gaSkgeworICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBqKTsKKyAgICAgICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNTUEFDRShjaCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGotLTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGorKzsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBQeVVuaWNvZGVfU3Vic3RyaW5nKHNlbGYsIGksIGopOwpAQCAtMTE3ODIsNyArMTIxMTUsNyBAQAogewogICAgIFB5T2JqZWN0ICpzZXAgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIChjaGFyICopc3RyaXBmb3JtYXRbc3RyaXB0eXBlXSwgJnNlcCkpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIHN0cmlwZm9ybWF0W3N0cmlwdHlwZV0sICZzZXApKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlmIChzZXAgIT0gTlVMTCAmJiBzZXAgIT0gUHlfTm9uZSkgewpAQCAtMTE5OTQsNyArMTIzMjcsNyBAQAogICAgIFB5X3NzaXplX3QgaXNpemU7CiAgICAgUHlfc3NpemVfdCBvc2l6ZSwgc3F1b3RlLCBkcXVvdGUsIGksIG87CiAgICAgUHlfVUNTNCBtYXgsIHF1b3RlOwotICAgIGludCBpa2luZCwgb2tpbmQ7CisgICAgaW50IGlraW5kLCBva2luZCwgdW5jaGFuZ2VkOwogICAgIHZvaWQgKmlkYXRhLCAqb2RhdGE7CiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHVuaWNvZGUpID09IC0xKQpAQCAtMTIwMDUsNyArMTIzMzgsNyBAQAogCiAgICAgLyogQ29tcHV0ZSBsZW5ndGggb2Ygb3V0cHV0LCBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQKICAgICAgICBtYXhpbXVtIGNoYXJhY3RlciAqLwotICAgIG9zaXplID0gMjsgLyogcXVvdGVzICovCisgICAgb3NpemUgPSAwOwogICAgIG1heCA9IDEyNzsKICAgICBzcXVvdGUgPSBkcXVvdGUgPSAwOwogICAgIGlraW5kID0gUHlVbmljb2RlX0tJTkQodW5pY29kZSk7CkBAIC0xMjA0Miw3ICsxMjM3NSw5IEBACiAgICAgfQogCiAgICAgcXVvdGUgPSAnXCcnOworICAgIHVuY2hhbmdlZCA9IChvc2l6ZSA9PSBpc2l6ZSk7CiAgICAgaWYgKHNxdW90ZSkgeworICAgICAgICB1bmNoYW5nZWQgPSAwOwogICAgICAgICBpZiAoZHF1b3RlKQogICAgICAgICAgICAgLyogQm90aCBzcXVvdGUgYW5kIGRxdW90ZSBwcmVzZW50LiBVc2Ugc3F1b3RlLAogICAgICAgICAgICAgICAgYW5kIGVzY2FwZSB0aGVtICovCkBAIC0xMjA1MCw2ICsxMjM4NSw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHF1b3RlID0gJyInOwogICAgIH0KKyAgICBvc2l6ZSArPSAyOyAgIC8qIHF1b3RlcyAqLwogCiAgICAgcmVwciA9IFB5VW5pY29kZV9OZXcob3NpemUsIG1heCk7CiAgICAgaWYgKHJlcHIgPT0gTlVMTCkKQEAgLTEyMDU5LDgxICsxMjM5NSw4NyBAQAogCiAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgMCwgcXVvdGUpOwogICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG9zaXplLTEsIHF1b3RlKTsKKyAgICBpZiAodW5jaGFuZ2VkKSB7CisgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHJlcHIsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWNvZGUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzaXplKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDAsIG8gPSAxOyBpIDwgaXNpemU7IGkrKykgeworICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7CiAKLSAgICBmb3IgKGkgPSAwLCBvID0gMTsgaSA8IGlzaXplOyBpKyspIHsKLSAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEKGlraW5kLCBpZGF0YSwgaSk7Ci0KLSAgICAgICAgLyogRXNjYXBlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgKi8KLSAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBzcGVjaWFsIHdoaXRlc3BhY2UgdG8gJ1x0JywgXG4nLCAnXHInICovCi0gICAgICAgIGlmIChjaCA9PSAnXHQnKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndCcpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKGNoID09ICdcbicpIHsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoY2ggPT0gJ1xyJykgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3InKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLwotICAgICAgICBlbHNlIGlmIChjaCA8ICcgJyB8fCBjaCA9PSAweDdGKSB7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOwotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHgwMDBGXSk7Ci0gICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgIGVsc2UgaWYgKGNoIDwgMHg3RikgewotICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBOb24tQVNDSUkgY2hhcmFjdGVycyAqLwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIE1hcCBVbmljb2RlIHdoaXRlc3BhY2UgYW5kIGNvbnRyb2wgY2hhcmFjdGVycwotICAgICAgICAgICAgICAgKGNhdGVnb3JpZXMgWiogYW5kIEMqIGV4Y2VwdCBBU0NJSSBzcGFjZSkKLSAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNQUklOVEFCTEUoY2gpKSB7CisgICAgICAgICAgICAvKiBFc2NhcGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyAqLworICAgICAgICAgICAgaWYgKChjaCA9PSBxdW90ZSkgfHwgKGNoID09ICdcXCcpKSB7CiAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKLSAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KLSAgICAgICAgICAgICAgICBpZiAoY2ggPD0gMHhmZikgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd4Jyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1tjaCAmIDB4MDAwRl0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjaCA8PSAweGZmZmYpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAndScpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA4KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLyogTWFwIDIxLWJpdCBjaGFyYWN0ZXJzIHRvICdcVTAweHh4eHh4JyAqLwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdVJyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAyOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMjApICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiAxNikgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDQpICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCi0gICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIGNoKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogTWFwIHNwZWNpYWwgd2hpdGVzcGFjZSB0byAnXHQnLCBcbicsICdccicgKi8KKyAgICAgICAgICAgIGlmIChjaCA9PSAnXHQnKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd0Jyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICduJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjaCA9PSAnXHInKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnXFwnKTsKKyAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdyJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE1hcCBub24tcHJpbnRhYmxlIFVTIEFTQ0lJIHRvICdceGhoJyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAnICcgfHwgY2ggPT0gMHg3RikgeworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ1xcJyk7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAneCcpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHgwMDBGXSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIENvcHkgQVNDSUkgY2hhcmFjdGVycyBhcy1pcyAqLworICAgICAgICAgICAgZWxzZSBpZiAoY2ggPCAweDdGKSB7CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBjaCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIE5vbi1BU0NJSSBjaGFyYWN0ZXJzICovCisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBNYXAgVW5pY29kZSB3aGl0ZXNwYWNlIGFuZCBjb250cm9sIGNoYXJhY3RlcnMKKyAgICAgICAgICAgICAgICAgICAoY2F0ZWdvcmllcyBaKiBhbmQgQyogZXhjZXB0IEFTQ0lJIHNwYWNlKQorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTUFJJTlRBQkxFKGNoKSkgeworICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICdcXCcpOworICAgICAgICAgICAgICAgICAgICAvKiBNYXAgOC1iaXQgY2hhcmFjdGVycyB0byAnXHhoaCcgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoIDw9IDB4ZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgJ3gnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4MDAwRl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweDAwMEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMTYtYml0IGNoYXJhY3RlcnMgdG8gJ1x1eHh4eCcgKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY2ggPD0gMHhmZmZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssICd1Jyk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gMTIpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gOCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzWyhjaCA+PiA0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbY2ggJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBNYXAgMjEtYml0IGNoYXJhY3RlcnMgdG8gJ1xVMDB4eHh4eHgnICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCAnVScpOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI4KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDI0KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDIwKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDE2KSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDEyKSAmIDB4Rl0pOworICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKG9raW5kLCBvZGF0YSwgbysrLCBQeV9oZXhkaWdpdHNbKGNoID4+IDgpICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUob2tpbmQsIG9kYXRhLCBvKyssIFB5X2hleGRpZ2l0c1soY2ggPj4gNCkgJiAweEZdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgUHlfaGV4ZGlnaXRzW2NoICYgMHhGXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogQ29weSBjaGFyYWN0ZXJzIGFzLWlzICovCisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURShva2luZCwgb2RhdGEsIG8rKywgY2gpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTEyMTU0LDE5ICsxMjQ5NiwyMyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIHVuaWNvZGVfcmZpbmQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpzdWJzdHJpbmc7Ci0gICAgUHlfc3NpemVfdCBzdGFydDsKLSAgICBQeV9zc2l6ZV90IGVuZDsKKyAgICBQeU9iamVjdCAqc3Vic3RyaW5nID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICBQeV9zc2l6ZV90IGVuZCA9IDA7CiAgICAgUHlfc3NpemVfdCByZXN1bHQ7CiAKICAgICBpZiAoIXN0cmluZ2xpYl9wYXJzZV9hcmdzX2ZpbmRzX3VuaWNvZGUoInJmaW5kIiwgYXJncywgJnN1YnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0LCAmZW5kKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc2VsZikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkKKyAgICB9CisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdWJzdHJpbmcpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAKICAgICByZXN1bHQgPSBhbnlfZmluZF9zbGljZSgtMSwgc2VsZiwgc3Vic3RyaW5nLCBzdGFydCwgZW5kKTsKIApAQCAtMTIxODYsMTkgKzEyNTMyLDIzIEBACiBzdGF0aWMgUHlPYmplY3QgKgogdW5pY29kZV9yaW5kZXgoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpzdWJzdHJpbmc7Ci0gICAgUHlfc3NpemVfdCBzdGFydDsKLSAgICBQeV9zc2l6ZV90IGVuZDsKKyAgICBQeU9iamVjdCAqc3Vic3RyaW5nID0gTlVMTDsKKyAgICBQeV9zc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICBQeV9zc2l6ZV90IGVuZCA9IDA7CiAgICAgUHlfc3NpemVfdCByZXN1bHQ7CiAKICAgICBpZiAoIXN0cmluZ2xpYl9wYXJzZV9hcmdzX2ZpbmRzX3VuaWNvZGUoInJpbmRleCIsIGFyZ3MsICZzdWJzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGFydCwgJmVuZCkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgaWYgKFB5VW5pY29kZV9SRUFEWShzZWxmKSA9PSAtMSkKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN1YnN0cmluZykgPT0gLTEpCisgICAgfQorICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoc3Vic3RyaW5nKSA9PSAtMSkgeworICAgICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgcmVzdWx0ID0gYW55X2ZpbmRfc2xpY2UoLTEsIHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCk7CiAKQEAgLTEyMzMwLDcgKzEyNjgwLDcgQEAKICAgICBsZW4xID0gUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyX29iaik7CiAgICAgbGVuMiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHNlcF9vYmopOwogCi0gICAgc3dpdGNoIChQeVVuaWNvZGVfS0lORChzdHJfb2JqKSkgeworICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CiAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkoc3RyX29iaikgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHNlcF9vYmopKQogICAgICAgICAgICAgb3V0ID0gYXNjaWlsaWJfcGFydGl0aW9uKHN0cl9vYmosIGJ1ZjEsIGxlbjEsIHNlcF9vYmosIGJ1ZjIsIGxlbjIpOwpAQCAtMTIzODYsMTIgKzEyNzM2LDEyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGtpbmQxID0gUHlVbmljb2RlX0tJTkQoc3RyX2luKTsKKyAgICBraW5kMSA9IFB5VW5pY29kZV9LSU5EKHN0cl9vYmopOwogICAgIGtpbmQyID0gUHlVbmljb2RlX0tJTkQoc2VwX29iaik7CiAgICAga2luZCA9IFB5X01BWChraW5kMSwga2luZDIpOwotICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzdHJfaW4pOworICAgIGJ1ZjEgPSBQeVVuaWNvZGVfREFUQShzdHJfb2JqKTsKICAgICBpZiAoa2luZDEgIT0ga2luZCkKLSAgICAgICAgYnVmMSA9IF9QeVVuaWNvZGVfQXNLaW5kKHN0cl9pbiwga2luZCk7CisgICAgICAgIGJ1ZjEgPSBfUHlVbmljb2RlX0FzS2luZChzdHJfb2JqLCBraW5kKTsKICAgICBpZiAoIWJ1ZjEpCiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICBidWYyID0gUHlVbmljb2RlX0RBVEEoc2VwX29iaik7CkBAIC0xMjQwMiw3ICsxMjc1Miw3IEBACiAgICAgbGVuMSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cl9vYmopOwogICAgIGxlbjIgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzZXBfb2JqKTsKIAotICAgIHN3aXRjaCAoUHlVbmljb2RlX0tJTkQoc3RyX2luKSkgeworICAgIHN3aXRjaCAoa2luZCkgewogICAgIGNhc2UgUHlVbmljb2RlXzFCWVRFX0tJTkQ6CiAgICAgICAgIGlmIChQeVVuaWNvZGVfSVNfQVNDSUkoc3RyX29iaikgJiYgUHlVbmljb2RlX0lTX0FTQ0lJKHNlcF9vYmopKQogICAgICAgICAgICAgb3V0ID0gYXNjaWlsaWJfcnBhcnRpdGlvbihzdHJfb2JqLCBidWYxLCBsZW4xLCBzZXBfb2JqLCBidWYyLCBsZW4yKTsKQEAgLTEyNTU1LDI4ICsxMjkwNSw3NiBAQAogICAgIHJldHVybiBjYXNlX29wZXJhdGlvbihzZWxmLCBkb19zd2FwY2FzZSk7CiB9CiAKLVB5RG9jX1NUUlZBUihtYWtldHJhbnNfX2RvY19fLAotICAgICAgICAgICAgICJzdHIubWFrZXRyYW5zKHhbLCB5Wywgel1dKSAtPiBkaWN0IChzdGF0aWMgbWV0aG9kKVxuXAotXG5cCi1SZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS5cblwKLUlmIHRoZXJlIGlzIG9ubHkgb25lIGFyZ3VtZW50LCBpdCBtdXN0IGJlIGEgZGljdGlvbmFyeSBtYXBwaW5nIFVuaWNvZGVcblwKLW9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIE5vbmUuXG5cCi1DaGFyYWN0ZXIga2V5cyB3aWxsIGJlIHRoZW4gY29udmVydGVkIHRvIG9yZGluYWxzLlxuXAotSWYgdGhlcmUgYXJlIHR3byBhcmd1bWVudHMsIHRoZXkgbXVzdCBiZSBzdHJpbmdzIG9mIGVxdWFsIGxlbmd0aCwgYW5kXG5cCi1pbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWQgdG8gdGhlXG5cCi1jaGFyYWN0ZXIgYXQgdGhlIHNhbWUgcG9zaXRpb24gaW4geS4gSWYgdGhlcmUgaXMgYSB0aGlyZCBhcmd1bWVudCwgaXRcblwKLW11c3QgYmUgYSBzdHJpbmcsIHdob3NlIGNoYXJhY3RlcnMgd2lsbCBiZSBtYXBwZWQgdG8gTm9uZSBpbiB0aGUgcmVzdWx0LiIpOworLypbY2xpbmljIGlucHV0XQogCi1zdGF0aWMgUHlPYmplY3QqCi11bmljb2RlX21ha2V0cmFucyhQeU9iamVjdCAqbnVsbCwgUHlPYmplY3QgKmFyZ3MpCitAc3RhdGljbWV0aG9kCitzdHIubWFrZXRyYW5zIGFzIHVuaWNvZGVfbWFrZXRyYW5zCisKKyAgeDogb2JqZWN0CisKKyAgeTogdW5pY29kZT1OVUxMCisKKyAgejogdW5pY29kZT1OVUxMCisKKyAgLworCitSZXR1cm4gYSB0cmFuc2xhdGlvbiB0YWJsZSB1c2FibGUgZm9yIHN0ci50cmFuc2xhdGUoKS4KKworSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgVW5pY29kZQorb3JkaW5hbHMgKGludGVnZXJzKSBvciBjaGFyYWN0ZXJzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3Mgb3IgTm9uZS4KK0NoYXJhY3RlciBrZXlzIHdpbGwgYmUgdGhlbiBjb252ZXJ0ZWQgdG8gb3JkaW5hbHMuCitJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLCBhbmQKK2luIHRoZSByZXN1bHRpbmcgZGljdGlvbmFyeSwgZWFjaCBjaGFyYWN0ZXIgaW4geCB3aWxsIGJlIG1hcHBlZCB0byB0aGUKK2NoYXJhY3RlciBhdCB0aGUgc2FtZSBwb3NpdGlvbiBpbiB5LiBJZiB0aGVyZSBpcyBhIHRoaXJkIGFyZ3VtZW50LCBpdAorbXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0byBOb25lIGluIHRoZSByZXN1bHQuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUih1bmljb2RlX21ha2V0cmFuc19fZG9jX18sCisibWFrZXRyYW5zKHgsIHk9Tm9uZSwgej1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJuIGEgdHJhbnNsYXRpb24gdGFibGUgdXNhYmxlIGZvciBzdHIudHJhbnNsYXRlKCkuXG4iCisiXG4iCisiSWYgdGhlcmUgaXMgb25seSBvbmUgYXJndW1lbnQsIGl0IG11c3QgYmUgYSBkaWN0aW9uYXJ5IG1hcHBpbmcgVW5pY29kZVxuIgorIm9yZGluYWxzIChpbnRlZ2Vycykgb3IgY2hhcmFjdGVycyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzIG9yIE5vbmUuXG4iCisiQ2hhcmFjdGVyIGtleXMgd2lsbCBiZSB0aGVuIGNvbnZlcnRlZCB0byBvcmRpbmFscy5cbiIKKyJJZiB0aGVyZSBhcmUgdHdvIGFyZ3VtZW50cywgdGhleSBtdXN0IGJlIHN0cmluZ3Mgb2YgZXF1YWwgbGVuZ3RoLCBhbmRcbiIKKyJpbiB0aGUgcmVzdWx0aW5nIGRpY3Rpb25hcnksIGVhY2ggY2hhcmFjdGVyIGluIHggd2lsbCBiZSBtYXBwZWQgdG8gdGhlXG4iCisiY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluIHkuIElmIHRoZXJlIGlzIGEgdGhpcmQgYXJndW1lbnQsIGl0XG4iCisibXVzdCBiZSBhIHN0cmluZywgd2hvc2UgY2hhcmFjdGVycyB3aWxsIGJlIG1hcHBlZCB0byBOb25lIGluIHRoZSByZXN1bHQuIik7CisKKyNkZWZpbmUgVU5JQ09ERV9NQUtFVFJBTlNfTUVUSE9EREVGICAgIFwKKyAgICB7Im1ha2V0cmFucyIsIChQeUNGdW5jdGlvbil1bmljb2RlX21ha2V0cmFucywgTUVUSF9WQVJBUkdTfE1FVEhfU1RBVElDLCB1bmljb2RlX21ha2V0cmFuc19fZG9jX199LAorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9tYWtldHJhbnNfaW1wbChQeU9iamVjdCAqeCwgUHlPYmplY3QgKnksIFB5T2JqZWN0ICp6KTsKKworc3RhdGljIFB5T2JqZWN0ICoKK3VuaWNvZGVfbWFrZXRyYW5zKHZvaWQgKm51bGwsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICp4LCAqeSA9IE5VTEwsICp6ID0gTlVMTDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqeDsKKyAgICBQeU9iamVjdCAqeSA9IE5VTEw7CisgICAgUHlPYmplY3QgKnogPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPfFVVOm1ha2V0cmFucyIsCisgICAgICAgICZ4LCAmeSwgJnopKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gdW5pY29kZV9tYWtldHJhbnNfaW1wbCh4LCB5LCB6KTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgordW5pY29kZV9tYWtldHJhbnNfaW1wbChQeU9iamVjdCAqeCwgUHlPYmplY3QgKnksIFB5T2JqZWN0ICp6KQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTU2NmVkZjYzMGY3NzQzNmEgaW5wdXQ9N2JmYmY1MjlhMjkzYzZjNV0qLworewogICAgIFB5T2JqZWN0ICpuZXcgPSBOVUxMLCAqa2V5LCAqdmFsdWU7CiAgICAgUHlfc3NpemVfdCBpID0gMDsKICAgICBpbnQgcmVzOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPfFVVOm1ha2V0cmFucyIsICZ4LCAmeSwgJnopKQotICAgICAgICByZXR1cm4gTlVMTDsKICAgICBuZXcgPSBQeURpY3RfTmV3KCk7CiAgICAgaWYgKCFuZXcpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTI2NzgsMTEgKzEzMDc2LDEyIEBACiBQeURvY19TVFJWQVIodHJhbnNsYXRlX19kb2NfXywKICAgICAgICAgICAgICAiUy50cmFuc2xhdGUodGFibGUpIC0+IHN0clxuXAogXG5cCi1SZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgUywgd2hlcmUgYWxsIGNoYXJhY3RlcnMgaGF2ZSBiZWVuIG1hcHBlZFxuXAotdGhyb3VnaCB0aGUgZ2l2ZW4gdHJhbnNsYXRpb24gdGFibGUsIHdoaWNoIG11c3QgYmUgYSBtYXBwaW5nIG9mXG5cCi1Vbmljb2RlIG9yZGluYWxzIHRvIFVuaWNvZGUgb3JkaW5hbHMsIHN0cmluZ3MsIG9yIE5vbmUuXG5cCi1Vbm1hcHBlZCBjaGFyYWN0ZXJzIGFyZSBsZWZ0IHVudG91Y2hlZC4gQ2hhcmFjdGVycyBtYXBwZWQgdG8gTm9uZVxuXAotYXJlIGRlbGV0ZWQuIik7CitSZXR1cm4gYSBjb3B5IG9mIHRoZSBzdHJpbmcgUyBpbiB3aGljaCBlYWNoIGNoYXJhY3RlciBoYXMgYmVlbiBtYXBwZWRcblwKK3Rocm91Z2ggdGhlIGdpdmVuIHRyYW5zbGF0aW9uIHRhYmxlLiBUaGUgdGFibGUgbXVzdCBpbXBsZW1lbnRcblwKK2xvb2t1cC9pbmRleGluZyB2aWEgX19nZXRpdGVtX18sIGZvciBpbnN0YW5jZSBhIGRpY3Rpb25hcnkgb3IgbGlzdCxcblwKK21hcHBpbmcgVW5pY29kZSBvcmRpbmFscyB0byBVbmljb2RlIG9yZGluYWxzLCBzdHJpbmdzLCBvciBOb25lLiBJZlxuXAordGhpcyBvcGVyYXRpb24gcmFpc2VzIExvb2t1cEVycm9yLCB0aGUgY2hhcmFjdGVyIGlzIGxlZnQgdW50b3VjaGVkLlxuXAorQ2hhcmFjdGVycyBtYXBwZWQgdG8gTm9uZSBhcmUgZGVsZXRlZC4iKTsKIAogc3RhdGljIFB5T2JqZWN0KgogdW5pY29kZV90cmFuc2xhdGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICp0YWJsZSkKQEAgLTEyNzg3LDYgKzEzMTg2LDggQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsIC0xKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgICAgICAgICBQeV9SRVRVUk5fVFJVRTsKICAgICAgICAgICAgIH0KQEAgLTEyODAzLDYgKzEzMjA0LDggQEAKICAgICB9CiAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgLTEpOwogICAgIFB5X0RFQ1JFRihzdWJzdHJpbmcpOworICAgIGlmIChyZXN1bHQgPT0gLTEpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcocmVzdWx0KTsKIH0KIApAQCAtMTI4MzYsNiArMTMyMzksOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgcmVzdWx0ID0gdGFpbG1hdGNoKHNlbGYsIHN1YnN0cmluZywgc3RhcnQsIGVuZCwgKzEpOwogICAgICAgICAgICAgUHlfREVDUkVGKHN1YnN0cmluZyk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgaWYgKHJlc3VsdCkgewogICAgICAgICAgICAgICAgIFB5X1JFVFVSTl9UUlVFOwogICAgICAgICAgICAgfQpAQCAtMTI4NTEsMzMgKzEzMjU2LDQ4IEBACiAgICAgfQogICAgIHJlc3VsdCA9IHRhaWxtYXRjaChzZWxmLCBzdWJzdHJpbmcsIHN0YXJ0LCBlbmQsICsxKTsKICAgICBQeV9ERUNSRUYoc3Vic3RyaW5nKTsKKyAgICBpZiAocmVzdWx0ID09IC0xKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKHJlc3VsdCk7CiB9CiAKIFB5X0xPQ0FMX0lOTElORSh2b2lkKQogX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyKQogewotICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBpZiAoIXdyaXRlci0+cmVhZG9ubHkpCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHdyaXRlci0+YnVmZmVyKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLyogQ29weS1vbi13cml0ZSBtb2RlOiBzZXQgYnVmZmVyIHNpemUgdG8gMCBzbworICAgICAgICAgKiBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoKSB3aWxsIGNvcHkgKGFuZCBlbmxhcmdlKSB0aGUgYnVmZmVyIG9uCisgICAgICAgICAqIG5leHQgd3JpdGUuICovCisgICAgICAgIHdyaXRlci0+c2l6ZSA9IDA7CisgICAgfQogICAgIHdyaXRlci0+bWF4Y2hhciA9IFB5VW5pY29kZV9NQVhfQ0hBUl9WQUxVRSh3cml0ZXItPmJ1ZmZlcik7CiAgICAgd3JpdGVyLT5kYXRhID0gUHlVbmljb2RlX0RBVEEod3JpdGVyLT5idWZmZXIpOwogICAgIHdyaXRlci0+a2luZCA9IFB5VW5pY29kZV9LSU5EKHdyaXRlci0+YnVmZmVyKTsKIH0KIAogdm9pZAotX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwgUHlfc3NpemVfdCBtaW5fbGVuZ3RoKQorX1B5VW5pY29kZVdyaXRlcl9Jbml0KF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKICAgICBtZW1zZXQod3JpdGVyLCAwLCBzaXplb2YoKndyaXRlcikpOwogI2lmZGVmIFB5X0RFQlVHCiAgICAgd3JpdGVyLT5raW5kID0gNTsgICAgLyogaW52YWxpZCBraW5kICovCiAjZW5kaWYKLSAgICB3cml0ZXItPm1pbl9sZW5ndGggPSBQeV9NQVgobWluX2xlbmd0aCwgMTAwKTsKLSAgICB3cml0ZXItPm92ZXJhbGxvY2F0ZSA9IChtaW5fbGVuZ3RoID4gMCk7CisgICAgd3JpdGVyLT5taW5fY2hhciA9IDEyNzsKIH0KIAogaW50CiBfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmVJbnRlcm5hbChfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IGxlbmd0aCwgUHlfVUNTNCBtYXhjaGFyKQogeworI2lmZGVmIE1TX1dJTkRPV1MKKyAgIC8qIE9uIFdpbmRvd3MsIG92ZXJhbGxvY2F0ZSBieSA1MCUgaXMgdGhlIGJlc3QgZmFjdG9yICovCisjICBkZWZpbmUgT1ZFUkFMTE9DQVRFX0ZBQ1RPUiAyCisjZWxzZQorICAgLyogT24gTGludXgsIG92ZXJhbGxvY2F0ZSBieSAyNSUgaXMgdGhlIGJlc3QgZmFjdG9yICovCisjICBkZWZpbmUgT1ZFUkFMTE9DQVRFX0ZBQ1RPUiA0CisjZW5kaWYKICAgICBQeV9zc2l6ZV90IG5ld2xlbjsKICAgICBQeU9iamVjdCAqbmV3YnVmZmVyOwogCkBAIC0xMjg4OSwzMiArMTMzMDksMzQgQEAKICAgICB9CiAgICAgbmV3bGVuID0gd3JpdGVyLT5wb3MgKyBsZW5ndGg7CiAKKyAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHdyaXRlci0+bWluX2NoYXIpOworCiAgICAgaWYgKHdyaXRlci0+YnVmZmVyID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHdyaXRlci0+b3ZlcmFsbG9jYXRlKSB7Ci0gICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgMjUlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVzaXplICovCi0gICAgICAgICAgICBpZiAobmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIDQpKQotICAgICAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyA0OwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8IHdyaXRlci0+bWluX2xlbmd0aCkKLSAgICAgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisgICAgICAgIGFzc2VydCghd3JpdGVyLT5yZWFkb25seSk7CisgICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZQorICAgICAgICAgICAgJiYgbmV3bGVuIDw9IChQWV9TU0laRV9UX01BWCAtIG5ld2xlbiAvIE9WRVJBTExPQ0FURV9GQUNUT1IpKSB7CisgICAgICAgICAgICAvKiBvdmVyYWxsb2NhdGUgdG8gbGltaXQgdGhlIG51bWJlciBvZiByZWFsbG9jKCkgKi8KKyAgICAgICAgICAgIG5ld2xlbiArPSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SOwogICAgICAgICB9CisgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCisgICAgICAgICAgICBuZXdsZW4gPSB3cml0ZXItPm1pbl9sZW5ndGg7CisKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBQeVVuaWNvZGVfTmV3KG5ld2xlbiwgbWF4Y2hhcik7CiAgICAgICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOwotICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBpZiAobmV3bGVuID4gd3JpdGVyLT5zaXplKSB7Ci0gICAgICAgIGlmICh3cml0ZXItPm92ZXJhbGxvY2F0ZSkgewotICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIDI1JSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHJlc2l6ZSAqLwotICAgICAgICAgICAgaWYgKG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyA0KSkKLSAgICAgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gNDsKLSAgICAgICAgICAgIGlmIChuZXdsZW4gPCB3cml0ZXItPm1pbl9sZW5ndGgpCi0gICAgICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOworICAgIGVsc2UgaWYgKG5ld2xlbiA+IHdyaXRlci0+c2l6ZSkgeworICAgICAgICBpZiAod3JpdGVyLT5vdmVyYWxsb2NhdGUKKyAgICAgICAgICAgICYmIG5ld2xlbiA8PSAoUFlfU1NJWkVfVF9NQVggLSBuZXdsZW4gLyBPVkVSQUxMT0NBVEVfRkFDVE9SKSkgeworICAgICAgICAgICAgLyogb3ZlcmFsbG9jYXRlIHRvIGxpbWl0IHRoZSBudW1iZXIgb2YgcmVhbGxvYygpICovCisgICAgICAgICAgICBuZXdsZW4gKz0gbmV3bGVuIC8gT1ZFUkFMTE9DQVRFX0ZBQ1RPUjsKICAgICAgICAgfQorICAgICAgICBpZiAobmV3bGVuIDwgd3JpdGVyLT5taW5fbGVuZ3RoKQorICAgICAgICAgICAgbmV3bGVuID0gd3JpdGVyLT5taW5fbGVuZ3RoOwogCiAgICAgICAgIGlmIChtYXhjaGFyID4gd3JpdGVyLT5tYXhjaGFyIHx8IHdyaXRlci0+cmVhZG9ubHkpIHsKICAgICAgICAgICAgIC8qIHJlc2l6ZSArIHdpZGVuICovCisgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIHdyaXRlci0+bWF4Y2hhcik7CiAgICAgICAgICAgICBuZXdidWZmZXIgPSBQeVVuaWNvZGVfTmV3KG5ld2xlbiwgbWF4Y2hhcik7CiAgICAgICAgICAgICBpZiAobmV3YnVmZmVyID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTI5MjksNyArMTMzNTEsNiBAQAogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IG5ld2J1ZmZlcjsKLSAgICAgICAgX1B5VW5pY29kZVdyaXRlcl9VcGRhdGUod3JpdGVyKTsKICAgICB9CiAgICAgZWxzZSBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhcikgewogICAgICAgICBhc3NlcnQoIXdyaXRlci0+cmVhZG9ubHkpOwpAQCAtMTI5NDAsOSArMTMzNjEsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVyLT5idWZmZXIsIDAsIHdyaXRlci0+cG9zKTsKICAgICAgICAgUHlfREVDUkVGKHdyaXRlci0+YnVmZmVyKTsKICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7Ci0gICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgfQorICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7CiAgICAgcmV0dXJuIDA7CisKKyN1bmRlZiBPVkVSQUxMT0NBVEVfRkFDVE9SCit9CisKK1B5X0xPQ0FMX0lOTElORShpbnQpCitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZShfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIDEsIGNoKSA8IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCBjaCk7CisgICAgd3JpdGVyLT5wb3MrKzsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcihfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsIFB5X1VDUzQgY2gpCit7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfV3JpdGVDaGFySW5saW5lKHdyaXRlciwgY2gpOwogfQogCiBpbnQKQEAgLTEyOTU5LDExICsxMzM5OCwxMCBAQAogICAgIG1heGNoYXIgPSBQeVVuaWNvZGVfTUFYX0NIQVJfVkFMVUUoc3RyKTsKICAgICBpZiAobWF4Y2hhciA+IHdyaXRlci0+bWF4Y2hhciB8fCBsZW4gPiB3cml0ZXItPnNpemUgLSB3cml0ZXItPnBvcykgewogICAgICAgICBpZiAod3JpdGVyLT5idWZmZXIgPT0gTlVMTCAmJiAhd3JpdGVyLT5vdmVyYWxsb2NhdGUpIHsKKyAgICAgICAgICAgIHdyaXRlci0+cmVhZG9ubHkgPSAxOwogICAgICAgICAgICAgUHlfSU5DUkVGKHN0cik7CiAgICAgICAgICAgICB3cml0ZXItPmJ1ZmZlciA9IHN0cjsKICAgICAgICAgICAgIF9QeVVuaWNvZGVXcml0ZXJfVXBkYXRlKHdyaXRlcik7Ci0gICAgICAgICAgICB3cml0ZXItPnJlYWRvbmx5ID0gMTsKLSAgICAgICAgICAgIHdyaXRlci0+c2l6ZSA9IDA7CiAgICAgICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpAQCAtMTI5NzYsMjggKzEzNDE0LDE0MiBAQAogICAgIHJldHVybiAwOwogfQogCitpbnQKK19QeVVuaWNvZGVXcml0ZXJfV3JpdGVTdWJzdHJpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLCBQeU9iamVjdCAqc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IHN0YXJ0LCBQeV9zc2l6ZV90IGVuZCkKK3sKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisgICAgUHlfc3NpemVfdCBsZW47CisKKyAgICBpZiAoUHlVbmljb2RlX1JFQURZKHN0cikgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKKyAgICBhc3NlcnQoZW5kIDw9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHN0cikpOworICAgIGFzc2VydChzdGFydCA8PSBlbmQpOworCisgICAgaWYgKGVuZCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChzdGFydCA9PSAwICYmIGVuZCA9PSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpKQorICAgICAgICByZXR1cm4gX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cih3cml0ZXIsIHN0cik7CisKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiB3cml0ZXItPm1heGNoYXIpCisgICAgICAgIG1heGNoYXIgPSBfUHlVbmljb2RlX0ZpbmRNYXhDaGFyKHN0ciwgc3RhcnQsIGVuZCk7CisgICAgZWxzZQorICAgICAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOworICAgIGxlbiA9IGVuZCAtIHN0YXJ0OworCisgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSh3cml0ZXIsIGxlbiwgbWF4Y2hhcikgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyLCBzdGFydCwgbGVuKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUFTQ0lJU3RyaW5nKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphc2NpaSwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgaWYgKGxlbiA9PSAtMSkKKyAgICAgICAgbGVuID0gc3RybGVuKGFzY2lpKTsKKworICAgIGFzc2VydCh1Y3MxbGliX2ZpbmRfbWF4X2NoYXIoKFB5X1VDUzEqKWFzY2lpLCAoUHlfVUNTMSopYXNjaWkgKyBsZW4pIDwgMTI4KTsKKworICAgIGlmICh3cml0ZXItPmJ1ZmZlciA9PSBOVUxMICYmICF3cml0ZXItPm92ZXJhbGxvY2F0ZSkgeworICAgICAgICBQeU9iamVjdCAqc3RyOworCisgICAgICAgIHN0ciA9IF9QeVVuaWNvZGVfRnJvbUFTQ0lJKGFzY2lpLCBsZW4pOworICAgICAgICBpZiAoc3RyID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisKKyAgICAgICAgd3JpdGVyLT5yZWFkb25seSA9IDE7CisgICAgICAgIHdyaXRlci0+YnVmZmVyID0gc3RyOworICAgICAgICBfUHlVbmljb2RlV3JpdGVyX1VwZGF0ZSh3cml0ZXIpOworICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBsZW4sIDEyNykgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN3aXRjaCAod3JpdGVyLT5raW5kKQorICAgIHsKKyAgICBjYXNlIFB5VW5pY29kZV8xQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgY29uc3QgUHlfVUNTMSAqc3RyID0gKGNvbnN0IFB5X1VDUzEgKilhc2NpaTsKKyAgICAgICAgUHlfVUNTMSAqZGF0YSA9IHdyaXRlci0+ZGF0YTsKKworICAgICAgICBQeV9NRU1DUFkoZGF0YSArIHdyaXRlci0+cG9zLCBzdHIsIGxlbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFB5VW5pY29kZV8yQllURV9LSU5EOgorICAgIHsKKyAgICAgICAgX1B5VW5pY29kZV9DT05WRVJUX0JZVEVTKAorICAgICAgICAgICAgUHlfVUNTMSwgUHlfVUNTMiwKKyAgICAgICAgICAgIGFzY2lpLCBhc2NpaSArIGxlbiwKKyAgICAgICAgICAgIChQeV9VQ1MyICopd3JpdGVyLT5kYXRhICsgd3JpdGVyLT5wb3MpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQeVVuaWNvZGVfNEJZVEVfS0lORDoKKyAgICB7CisgICAgICAgIF9QeVVuaWNvZGVfQ09OVkVSVF9CWVRFUygKKyAgICAgICAgICAgIFB5X1VDUzEsIFB5X1VDUzQsCisgICAgICAgICAgICBhc2NpaSwgYXNjaWkgKyBsZW4sCisgICAgICAgICAgICAoUHlfVUNTNCAqKXdyaXRlci0+ZGF0YSArIHdyaXRlci0+cG9zKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGFzc2VydCgwKTsKKyAgICB9CisKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX1B5VW5pY29kZVdyaXRlcl9Xcml0ZUxhdGluMVN0cmluZyhfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBsZW4pCit7CisgICAgUHlfVUNTNCBtYXhjaGFyOworCisgICAgbWF4Y2hhciA9IHVjczFsaWJfZmluZF9tYXhfY2hhcigoUHlfVUNTMSopc3RyLCAoUHlfVUNTMSopc3RyICsgbGVuKTsKKyAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCBtYXhjaGFyKSA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIHVuaWNvZGVfd3JpdGVfY3N0cih3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsIHN0ciwgbGVuKTsKKyAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgcmV0dXJuIDA7Cit9CisKIFB5T2JqZWN0ICoKIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKIHsKKyAgICBQeU9iamVjdCAqc3RyOwogICAgIGlmICh3cml0ZXItPnBvcyA9PSAwKSB7Ci0gICAgICAgIFB5X1hERUNSRUYod3JpdGVyLT5idWZmZXIpOworICAgICAgICBQeV9DTEVBUih3cml0ZXItPmJ1ZmZlcik7CiAgICAgICAgIF9QeV9SRVRVUk5fVU5JQ09ERV9FTVBUWSgpOwogICAgIH0KICAgICBpZiAod3JpdGVyLT5yZWFkb25seSkgewotICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0dFVF9MRU5HVEgod3JpdGVyLT5idWZmZXIpID09IHdyaXRlci0+cG9zKTsKLSAgICAgICAgcmV0dXJuIHdyaXRlci0+YnVmZmVyOworICAgICAgICBzdHIgPSB3cml0ZXItPmJ1ZmZlcjsKKyAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBOVUxMOworICAgICAgICBhc3NlcnQoUHlVbmljb2RlX0dFVF9MRU5HVEgoc3RyKSA9PSB3cml0ZXItPnBvcyk7CisgICAgICAgIHJldHVybiBzdHI7CiAgICAgfQogICAgIGlmIChQeVVuaWNvZGVfR0VUX0xFTkdUSCh3cml0ZXItPmJ1ZmZlcikgIT0gd3JpdGVyLT5wb3MpIHsKICAgICAgICAgUHlPYmplY3QgKm5ld2J1ZmZlcjsKICAgICAgICAgbmV3YnVmZmVyID0gcmVzaXplX2NvbXBhY3Qod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zKTsKICAgICAgICAgaWYgKG5ld2J1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYod3JpdGVyLT5idWZmZXIpOworICAgICAgICAgICAgUHlfQ0xFQVIod3JpdGVyLT5idWZmZXIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgd3JpdGVyLT5idWZmZXIgPSBuZXdidWZmZXI7CiAgICAgfQotICAgIGFzc2VydChfUHlVbmljb2RlX0NoZWNrQ29uc2lzdGVuY3kod3JpdGVyLT5idWZmZXIsIDEpKTsKLSAgICByZXR1cm4gdW5pY29kZV9yZXN1bHRfcmVhZHkod3JpdGVyLT5idWZmZXIpOworICAgIHN0ciA9IHdyaXRlci0+YnVmZmVyOworICAgIHdyaXRlci0+YnVmZmVyID0gTlVMTDsKKyAgICBhc3NlcnQoX1B5VW5pY29kZV9DaGVja0NvbnNpc3RlbmN5KHN0ciwgMSkpOworICAgIHJldHVybiB1bmljb2RlX3Jlc3VsdF9yZWFkeShzdHIpOwogfQogCiB2b2lkCkBAIC0xMzAzMiw3ICsxMzU4NCw3IEBACiAKICAgICBpZiAoUHlVbmljb2RlX1JFQURZKHNlbGYpID09IC0xKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0luaXQoJndyaXRlciwgMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIpOwogICAgIHJldCA9IF9QeVVuaWNvZGVfRm9ybWF0QWR2YW5jZWRXcml0ZXIoJndyaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYsIGZvcm1hdF9zcGVjLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgoZm9ybWF0X3NwZWMpKTsKQEAgLTEzMTAxLDcgKzEzNjUzLDggQEAKICAgICB7InRpdGxlIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3RpdGxlLCBNRVRIX05PQVJHUywgdGl0bGVfX2RvY19ffSwKICAgICB7ImNlbnRlciIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9jZW50ZXIsIE1FVEhfVkFSQVJHUywgY2VudGVyX19kb2NfX30sCiAgICAgeyJjb3VudCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9jb3VudCwgTUVUSF9WQVJBUkdTLCBjb3VudF9fZG9jX199LAotICAgIHsiZXhwYW5kdGFicyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9leHBhbmR0YWJzLCBNRVRIX1ZBUkFSR1MsIGV4cGFuZHRhYnNfX2RvY19ffSwKKyAgICB7ImV4cGFuZHRhYnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfZXhwYW5kdGFicywKKyAgICAgTUVUSF9WQVJBUkdTIHwgTUVUSF9LRVlXT1JEUywgZXhwYW5kdGFic19fZG9jX199LAogICAgIHsiZmluZCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9maW5kLCBNRVRIX1ZBUkFSR1MsIGZpbmRfX2RvY19ffSwKICAgICB7InBhcnRpdGlvbiIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9wYXJ0aXRpb24sIE1FVEhfTywgcGFydGl0aW9uX19kb2NfX30sCiAgICAgeyJpbmRleCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9pbmRleCwgTUVUSF9WQVJBUkdTLCBpbmRleF9fZG9jX199LApAQCAtMTMxMTMsNyArMTM2NjYsOCBAQAogICAgIHsicmp1c3QiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfcmp1c3QsIE1FVEhfVkFSQVJHUywgcmp1c3RfX2RvY19ffSwKICAgICB7InJzdHJpcCIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9yc3RyaXAsIE1FVEhfVkFSQVJHUywgcnN0cmlwX19kb2NfX30sCiAgICAgeyJycGFydGl0aW9uIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3JwYXJ0aXRpb24sIE1FVEhfTywgcnBhcnRpdGlvbl9fZG9jX199LAotICAgIHsic3BsaXRsaW5lcyIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zcGxpdGxpbmVzLCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBzcGxpdGxpbmVzX19kb2NfX30sCisgICAgeyJzcGxpdGxpbmVzIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3NwbGl0bGluZXMsCisgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHNwbGl0bGluZXNfX2RvY19ffSwKICAgICB7InN0cmlwIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX3N0cmlwLCBNRVRIX1ZBUkFSR1MsIHN0cmlwX19kb2NfX30sCiAgICAgeyJzd2FwY2FzZSIsIChQeUNGdW5jdGlvbikgdW5pY29kZV9zd2FwY2FzZSwgTUVUSF9OT0FSR1MsIHN3YXBjYXNlX19kb2NfX30sCiAgICAgeyJ0cmFuc2xhdGUiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfdHJhbnNsYXRlLCBNRVRIX08sIHRyYW5zbGF0ZV9fZG9jX199LApAQCAtMTMxMzUsOCArMTM2ODksNyBAQAogICAgIHsiZm9ybWF0IiwgKFB5Q0Z1bmN0aW9uKSBkb19zdHJpbmdfZm9ybWF0LCBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCBmb3JtYXRfX2RvY19ffSwKICAgICB7ImZvcm1hdF9tYXAiLCAoUHlDRnVuY3Rpb24pIGRvX3N0cmluZ19mb3JtYXRfbWFwLCBNRVRIX08sIGZvcm1hdF9tYXBfX2RvY19ffSwKICAgICB7Il9fZm9ybWF0X18iLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfX2Zvcm1hdF9fLCBNRVRIX1ZBUkFSR1MsIHBfZm9ybWF0X19kb2NfX30sCi0gICAgeyJtYWtldHJhbnMiLCAoUHlDRnVuY3Rpb24pIHVuaWNvZGVfbWFrZXRyYW5zLAotICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX1NUQVRJQywgbWFrZXRyYW5zX19kb2NfX30sCisgICAgVU5JQ09ERV9NQUtFVFJBTlNfTUVUSE9EREVGCiAgICAgeyJfX3NpemVvZl9fIiwgKFB5Q0Z1bmN0aW9uKSB1bmljb2RlX19zaXplb2ZfXywgTUVUSF9OT0FSR1MsIHNpemVvZl9fZG9jX199LAogI2lmIDAKICAgICAvKiBUaGVzZSBtZXRob2RzIGFyZSBqdXN0IHVzZWQgZm9yIGRlYnVnZ2luZyB0aGUgaW1wbGVtZW50YXRpb24uICovCkBAIC0xMzI1MSwxNiArMTM4MDQsMzkgQEAKIAogLyogSGVscGVycyBmb3IgUHlVbmljb2RlX0Zvcm1hdCgpICovCiAKK3N0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90IHsKKyAgICBQeU9iamVjdCAqYXJnczsKKyAgICBpbnQgYXJnc19vd25lZDsKKyAgICBQeV9zc2l6ZV90IGFyZ2xlbiwgYXJnaWR4OworICAgIFB5T2JqZWN0ICpkaWN0OworCisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBmbXRraW5kOworICAgIFB5X3NzaXplX3QgZm10Y250LCBmbXRwb3M7CisgICAgdm9pZCAqZm10ZGF0YTsKKyAgICBQeU9iamVjdCAqZm10c3RyOworCisgICAgX1B5VW5pY29kZVdyaXRlciB3cml0ZXI7Cit9OworCitzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgeworICAgIFB5X1VDUzQgY2g7CisgICAgaW50IGZsYWdzOworICAgIFB5X3NzaXplX3Qgd2lkdGg7CisgICAgaW50IHByZWM7CisgICAgaW50IHNpZ247Cit9OworCiBzdGF0aWMgUHlPYmplY3QgKgotZ2V0bmV4dGFyZyhQeU9iamVjdCAqYXJncywgUHlfc3NpemVfdCBhcmdsZW4sIFB5X3NzaXplX3QgKnBfYXJnaWR4KQordW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCAqY3R4KQogewotICAgIFB5X3NzaXplX3QgYXJnaWR4ID0gKnBfYXJnaWR4OwotICAgIGlmIChhcmdpZHggPCBhcmdsZW4pIHsKLSAgICAgICAgKCpwX2FyZ2lkeCkrKzsKLSAgICAgICAgaWYgKGFyZ2xlbiA8IDApCi0gICAgICAgICAgICByZXR1cm4gYXJnczsKKyAgICBQeV9zc2l6ZV90IGFyZ2lkeCA9IGN0eC0+YXJnaWR4OworCisgICAgaWYgKGFyZ2lkeCA8IGN0eC0+YXJnbGVuKSB7CisgICAgICAgIGN0eC0+YXJnaWR4Kys7CisgICAgICAgIGlmIChjdHgtPmFyZ2xlbiA8IDApCisgICAgICAgICAgICByZXR1cm4gY3R4LT5hcmdzOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGFyZ3MsIGFyZ2lkeCk7CisgICAgICAgICAgICByZXR1cm4gUHlUdXBsZV9HZXRJdGVtKGN0eC0+YXJncywgYXJnaWR4KTsKICAgICB9CiAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgIm5vdCBlbm91Z2ggYXJndW1lbnRzIGZvciBmb3JtYXQgc3RyaW5nIik7CkBAIC0xMzI2OSwzMyArMTM4NDUsNDIgQEAKIAogLyogUmV0dXJucyBhIG5ldyByZWZlcmVuY2UgdG8gYSBQeVVuaWNvZGUgb2JqZWN0LCBvciBOVUxMIG9uIGZhaWx1cmUuICovCiAKKy8qIEZvcm1hdCBhIGZsb2F0IGludG8gdGhlIHdyaXRlciBpZiB0aGUgd3JpdGVyIGlzIG5vdCBOVUxMLCBvciBpbnRvICpwX291dHB1dAorICAgb3RoZXJ3aXNlLgorCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4gKi8KIHN0YXRpYyBpbnQKLWZvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBpbnQgZmxhZ3MsIGludCBwcmVjLCBpbnQgdHlwZSwKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlcikKK2Zvcm1hdGZsb2F0KFB5T2JqZWN0ICp2LCBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCiB7CiAgICAgY2hhciAqcDsKICAgICBkb3VibGUgeDsKICAgICBQeV9zc2l6ZV90IGxlbjsKKyAgICBpbnQgcHJlYzsKKyAgICBpbnQgZHRvYV9mbGFnczsKIAogICAgIHggPSBQeUZsb2F0X0FzRG91YmxlKHYpOwogICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgcHJlYyA9IGFyZy0+cHJlYzsKICAgICBpZiAocHJlYyA8IDApCiAgICAgICAgIHByZWMgPSA2OwogCi0gICAgcCA9IFB5T1NfZG91YmxlX3RvX3N0cmluZyh4LCB0eXBlLCBwcmVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgRl9BTFQpID8gUHlfRFRTRl9BTFQgOiAwLCBOVUxMKTsKKyAgICBpZiAoYXJnLT5mbGFncyAmIEZfQUxUKQorICAgICAgICBkdG9hX2ZsYWdzID0gUHlfRFRTRl9BTFQ7CisgICAgZWxzZQorICAgICAgICBkdG9hX2ZsYWdzID0gMDsKKyAgICBwID0gUHlPU19kb3VibGVfdG9fc3RyaW5nKHgsIGFyZy0+Y2gsIHByZWMsIGR0b2FfZmxhZ3MsIE5VTEwpOwogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBsZW4gPSBzdHJsZW4ocCk7CiAgICAgaWYgKHdyaXRlcikgewotICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKHdyaXRlciwgbGVuLCAxMjcpID09IC0xKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBwLCBsZW4pIDwgMCkgewogICAgICAgICAgICAgUHlNZW1fRnJlZShwKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQotICAgICAgICB1bmljb2RlX3dyaXRlX2NzdHIod3JpdGVyLT5idWZmZXIsIHdyaXRlci0+cG9zLCBwLCBsZW4pOwotICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CiAgICAgfQogICAgIGVsc2UKICAgICAgICAgKnBfb3V0cHV0ID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkocCwgbGVuKTsKQEAgLTEzMzIyLDcgKzEzOTA3LDcgQEAKICAqIHByb2R1Y2UgYSAnLScgc2lnbiwgYnV0IGNhbiBmb3IgUHl0aG9uJ3MgdW5ib3VuZGVkIGludHMuCiAgKi8KIHN0YXRpYyBQeU9iamVjdCoKLWZvcm1hdGxvbmcoUHlPYmplY3QgKnZhbCwgaW50IGZsYWdzLCBpbnQgcHJlYywgaW50IHR5cGUpCitmb3JtYXRsb25nKFB5T2JqZWN0ICp2YWwsIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBOVUxMOwogICAgIGNoYXIgKmJ1ZjsKQEAgLTEzMzMyLDYgKzEzOTE3LDggQEAKICAgICBQeV9zc2l6ZV90IGxsZW47CiAgICAgaW50IG51bWRpZ2l0czsgICAgICAvKiBsZW4gPT0gbnVtbm9uZGlnaXRzICsgbnVtZGlnaXRzICovCiAgICAgaW50IG51bW5vbmRpZ2l0cyA9IDA7CisgICAgaW50IHByZWMgPSBhcmctPnByZWM7CisgICAgaW50IHR5cGUgPSBhcmctPmNoOwogCiAgICAgLyogQXZvaWQgZXhjZWVkaW5nIFNTSVpFX1RfTUFYICovCiAgICAgaWYgKHByZWMgPiBJTlRfTUFYLTMpIHsKQEAgLTEzMzQzLDEzICsxMzkzMCwxNCBAQAogICAgIGFzc2VydChQeUxvbmdfQ2hlY2sodmFsKSk7CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBhc3NlcnQoISIndHlwZScgbm90IGluIFtkaXVveFhdIik7CiAgICAgY2FzZSAnZCc6CisgICAgY2FzZSAnaSc6CiAgICAgY2FzZSAndSc6Ci0gICAgICAgIC8qIFNwZWNpYWwtY2FzZSBib29sZWFuOiB3ZSB3YW50IDAvMSAqLwotICAgICAgICBpZiAoUHlCb29sX0NoZWNrKHZhbCkpCi0gICAgICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlc3VsdCA9IFB5X1RZUEUodmFsKS0+dHBfc3RyKHZhbCk7CisgICAgICAgIC8qIGludCBhbmQgaW50IHN1YmNsYXNzZXMgc2hvdWxkIHByaW50IG51bWVyaWNhbGx5IHdoZW4gYSBudW1lcmljICovCisgICAgICAgIC8qIGZvcm1hdCBjb2RlIGlzIHVzZWQgKHNlZSBpc3N1ZTE4NzgwKSAqLworICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgJ28nOgogICAgICAgICBudW1ub25kaWdpdHMgPSAyOwpAQCAtMTMzNjAsOCArMTM5NDgsNiBAQAogICAgICAgICBudW1ub25kaWdpdHMgPSAyOwogICAgICAgICByZXN1bHQgPSBQeU51bWJlcl9Ub0Jhc2UodmFsLCAxNik7CiAgICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGFzc2VydCghIid0eXBlJyBub3QgaW4gW2R1b3hYXSIpOwogICAgIH0KICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzM3MiwxMiArMTM5NTgsMTQgQEAKIAogICAgIC8qIFRvIG1vZGlmeSB0aGUgc3RyaW5nIGluLXBsYWNlLCB0aGVyZSBjYW4gb25seSBiZSBvbmUgcmVmZXJlbmNlLiAqLwogICAgIGlmIChQeV9SRUZDTlQocmVzdWx0KSAhPSAxKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGJ1ZiA9IFB5VW5pY29kZV9EQVRBKHJlc3VsdCk7CiAgICAgbGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCk7CiAgICAgaWYgKGxsZW4gPiBJTlRfTUFYKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXN1bHQpOwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJpbmcgdG9vIGxhcmdlIGluIF9QeUJ5dGVzX0Zvcm1hdExvbmciKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMzM4OSw3ICsxMzk3Nyw3IEBACiAgICAgYXNzZXJ0KG51bWRpZ2l0cyA+IDApOwogCiAgICAgLyogR2V0IHJpZCBvZiBiYXNlIG1hcmtlciB1bmxlc3MgRl9BTFQgKi8KLSAgICBpZiAoKChmbGFncyAmIEZfQUxUKSA9PSAwICYmCisgICAgaWYgKCgoYXJnLT5mbGFncyAmIEZfQUxUKSA9PSAwICYmCiAgICAgICAgICh0eXBlID09ICdvJyB8fCB0eXBlID09ICd4JyB8fCB0eXBlID09ICdYJykpKSB7CiAgICAgICAgIGFzc2VydChidWZbc2lnbl0gPT0gJzAnKTsKICAgICAgICAgYXNzZXJ0KGJ1ZltzaWduKzFdID09ICd4JyB8fCBidWZbc2lnbisxXSA9PSAnWCcgfHwKQEAgLTEzNDM0LDE1ICsxNDAyMiwxMjEgQEAKICAgICAgICAgICAgIGlmIChidWZbaV0gPj0gJ2EnICYmIGJ1ZltpXSA8PSAneCcpCiAgICAgICAgICAgICAgICAgYnVmW2ldIC09ICdhJy0nQSc7CiAgICAgfQotICAgIGlmICghUHlVbmljb2RlX0NoZWNrKHJlc3VsdCkgfHwgbGVuICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCkpIHsKKyAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhyZXN1bHQpCisgICAgICAgIHx8IGJ1ZiAhPSBQeVVuaWNvZGVfREFUQShyZXN1bHQpKSB7CiAgICAgICAgIFB5T2JqZWN0ICp1bmljb2RlOwogICAgICAgICB1bmljb2RlID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBsZW4pOwogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICAgICAgcmVzdWx0ID0gdW5pY29kZTsKICAgICB9CisgICAgZWxzZSBpZiAobGVuICE9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHJlc3VsdCkpIHsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SZXNpemUoJnJlc3VsdCwgbGVuKSA8IDApCisgICAgICAgICAgICBQeV9DTEVBUihyZXN1bHQpOworICAgIH0KICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvKiBGb3JtYXQgYW4gaW50ZWdlciBvciBhIGZsb2F0IGFzIGFuIGludGVnZXIuCisgKiBSZXR1cm4gMSBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIHRoZSB3cml0ZXIsCisgKiAgICAgICAgMCBpZiB0aGUgbnVtYmVyIGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvICpwX291dHB1dAorICogICAgICAgLTEgYW5kIHJhaXNlIGFuIGV4Y2VwdGlvbiBvbiBlcnJvciAqLworc3RhdGljIGludAorbWFpbmZvcm1hdGxvbmcoUHlPYmplY3QgKnYsCisgICAgICAgICAgICAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgKmFyZywKKyAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqcF9vdXRwdXQsCisgICAgICAgICAgICAgICBfUHlVbmljb2RlV3JpdGVyICp3cml0ZXIpCit7CisgICAgUHlPYmplY3QgKmlvYmosICpyZXM7CisgICAgY2hhciB0eXBlID0gKGNoYXIpYXJnLT5jaDsKKworICAgIGlmICghUHlOdW1iZXJfQ2hlY2sodikpCisgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworCisgICAgLyogbWFrZSBzdXJlIG51bWJlciBpcyBhIHR5cGUgb2YgaW50ZWdlciAqLworICAgIC8qIGlmIG5vdCwgaXNzdWUgZGVwcmVjYXRpb24gd2FybmluZyBmb3Igbm93ICovCisgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgaWYgKHR5cGUgPT0gJ28nIHx8IHR5cGUgPT0gJ3gnIHx8IHR5cGUgPT0gJ1gnKSB7CisgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfSW5kZXgodik7CisgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlFcnJfV2FybkV4KFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvbWF0aWMgaW50IGNvbnZlcnNpb25zIGhhdmUgYmVlbiBkZXByZWNhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7CisgICAgICAgICAgICAgICAgaWYgKGlvYmogPT0gTlVMTCApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW9iaiA9IFB5TnVtYmVyX0xvbmcodik7CisgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMICkgeworICAgICAgICAgICAgICAgIGlmIChQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gd3Jvbmd0eXBlOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoUHlMb25nX0NoZWNrKGlvYmopKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGlvYmogPSB2OworICAgICAgICBQeV9JTkNSRUYoaW9iaik7CisgICAgfQorCisgICAgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpCisgICAgICAgICYmIGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xCisgICAgICAgICYmICEoYXJnLT5mbGFncyAmIChGX1NJR04gfCBGX0JMQU5LKSkKKyAgICAgICAgJiYgdHlwZSAhPSAnWCcpCisgICAgeworICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgaW50IGFsdGVybmF0ZSA9IGFyZy0+ZmxhZ3MgJiBGX0FMVDsKKyAgICAgICAgaW50IGJhc2U7CisKKyAgICAgICAgc3dpdGNoKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYXNzZXJ0KDAgJiYgIid0eXBlJyBub3QgaW4gW2RpdW94WF0iKTsKKyAgICAgICAgICAgIGNhc2UgJ2QnOgorICAgICAgICAgICAgY2FzZSAnaSc6CisgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICBiYXNlID0gMTA7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdvJzoKKyAgICAgICAgICAgICAgICBiYXNlID0gODsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ3gnOgorICAgICAgICAgICAgY2FzZSAnWCc6CisgICAgICAgICAgICAgICAgYmFzZSA9IDE2OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKHdyaXRlciwgdiwgYmFzZSwgYWx0ZXJuYXRlKSA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcmVzID0gZm9ybWF0bG9uZyhpb2JqLCBhcmcpOworICAgIFB5X0RFQ1JFRihpb2JqKTsKKyAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAqcF9vdXRwdXQgPSByZXM7CisgICAgcmV0dXJuIDA7CisKK3dyb25ndHlwZToKKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgIiUlJWMgZm9ybWF0OiBhIG51bWJlciBpcyByZXF1aXJlZCwgIgorICAgICAgICAgICAgIm5vdCAlLjIwMHMiLAorICAgICAgICAgICAgdHlwZSwgUHlfVFlQRSh2KS0+dHBfbmFtZSk7CisgICAgcmV0dXJuIC0xOworfQorCiBzdGF0aWMgUHlfVUNTNAogZm9ybWF0Y2hhcihQeU9iamVjdCAqdikKIHsKQEAgLTEzNDU0LDggKzE0MTQ4LDMwIEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIC8qIEludGVnZXIgaW5wdXQgdHJ1bmNhdGVkIHRvIGEgY2hhcmFjdGVyICovCisgICAgICAgIFB5T2JqZWN0ICppb2JqOwogICAgICAgICBsb25nIHg7CisgICAgICAgIC8qIG1ha2Ugc3VyZSBudW1iZXIgaXMgYSB0eXBlIG9mIGludGVnZXIgKi8KKyAgICAgICAgLyogaWYgbm90LCBpc3N1ZSBkZXByZWNhdGlvbiB3YXJuaW5nIGZvciBub3cgKi8KKyAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgIGlvYmogPSBQeU51bWJlcl9JbmRleCh2KTsKKyAgICAgICAgICAgIGlmIChpb2JqID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICAgICAgICAgIGlmIChQeUVycl9XYXJuRXgoUHlFeGNfRGVwcmVjYXRpb25XYXJuaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1dG9tYXRpYyBpbnQgY29udmVyc2lvbnMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpb2JqID0gUHlOdW1iZXJfTG9uZyh2KTsKKyAgICAgICAgICAgICAgICBpZiAoaW9iaiA9PSBOVUxMICkgeworICAgICAgICAgICAgICAgICAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19UeXBlRXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgdiA9IGlvYmo7CisgICAgICAgICAgICBQeV9ERUNSRUYoaW9iaik7CisgICAgICAgIH0KKyAgICAgICAgLyogSW50ZWdlciBpbnB1dCB0cnVuY2F0ZWQgdG8gYSBjaGFyYWN0ZXIgKi8KICAgICAgICAgeCA9IFB5TG9uZ19Bc0xvbmcodik7CiAgICAgICAgIGlmICh4ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CkBAIC0xMzQ3NSw1NDAgKzE0MTkxLDU4OCBAQAogICAgIHJldHVybiAoUHlfVUNTNCkgLTE7CiB9CiAKKy8qIFBhcnNlIG9wdGlvbnMgb2YgYW4gYXJndW1lbnQ6IGZsYWdzLCB3aWR0aCwgcHJlY2lzaW9uLgorICAgSGFuZGxlIGFsc28gIiUobmFtZSkiIHN5bnRheC4KKworICAgUmV0dXJuIDAgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIGZvcm1hdHRlZCBpbnRvIGFyZy0+c3RyLgorICAgUmV0dXJuIDEgaWYgdGhlIGFyZ3VtZW50IGhhcyBiZWVuIHdyaXR0ZW4gaW50byBjdHgtPndyaXRlciwKKyAgIFJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAordW5pY29kZV9mb3JtYXRfYXJnX3BhcnNlKHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcpCit7CisjZGVmaW5lIEZPUk1BVF9SRUFEKGN0eCkgXAorICAgICAgICBQeVVuaWNvZGVfUkVBRCgoY3R4KS0+Zm10a2luZCwgKGN0eCktPmZtdGRhdGEsIChjdHgpLT5mbXRwb3MpCisKKyAgICBQeU9iamVjdCAqdjsKKworICAgIGlmIChhcmctPmNoID09ICcoJykgeworICAgICAgICAvKiBHZXQgYXJndW1lbnQgdmFsdWUgZnJvbSBhIGRpY3Rpb25hcnkuIEV4YW1wbGU6ICIlKG5hbWUpcyIuICovCisgICAgICAgIFB5X3NzaXplX3Qga2V5c3RhcnQ7CisgICAgICAgIFB5X3NzaXplX3Qga2V5bGVuOworICAgICAgICBQeU9iamVjdCAqa2V5OworICAgICAgICBpbnQgcGNvdW50ID0gMTsKKworICAgICAgICBpZiAoY3R4LT5kaWN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCByZXF1aXJlcyBhIG1hcHBpbmciKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICArK2N0eC0+Zm10cG9zOworICAgICAgICAtLWN0eC0+Zm10Y250OworICAgICAgICBrZXlzdGFydCA9IGN0eC0+Zm10cG9zOworICAgICAgICAvKiBTa2lwIG92ZXIgYmFsYW5jZWQgcGFyZW50aGVzZXMgKi8KKyAgICAgICAgd2hpbGUgKHBjb3VudCA+IDAgJiYgLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGlmIChhcmctPmNoID09ICcpJykKKyAgICAgICAgICAgICAgICAtLXBjb3VudDsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPT0gJygnKQorICAgICAgICAgICAgICAgICsrcGNvdW50OworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgfQorICAgICAgICBrZXlsZW4gPSBjdHgtPmZtdHBvcyAtIGtleXN0YXJ0IC0gMTsKKyAgICAgICAgaWYgKGN0eC0+Zm10Y250IDwgMCB8fCBwY291bnQgPiAwKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5jb21wbGV0ZSBmb3JtYXQga2V5Iik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAga2V5ID0gUHlVbmljb2RlX1N1YnN0cmluZyhjdHgtPmZtdHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzdGFydCwga2V5c3RhcnQgKyBrZXlsZW4pOworICAgICAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmIChjdHgtPmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjdHgtPmFyZ3MpOworICAgICAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMDsKKyAgICAgICAgfQorICAgICAgICBjdHgtPmFyZ3MgPSBQeU9iamVjdF9HZXRJdGVtKGN0eC0+ZGljdCwga2V5KTsKKyAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgIGlmIChjdHgtPmFyZ3MgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgY3R4LT5hcmdzX293bmVkID0gMTsKKyAgICAgICAgY3R4LT5hcmdsZW4gPSAtMTsKKyAgICAgICAgY3R4LT5hcmdpZHggPSAtMjsKKyAgICB9CisKKyAgICAvKiBQYXJzZSBmbGFncy4gRXhhbXBsZTogIiUraSIgPT4gZmxhZ3M9Rl9TSUdOLiAqLworICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIHN3aXRjaCAoYXJnLT5jaCkgeworICAgICAgICBjYXNlICctJzogYXJnLT5mbGFncyB8PSBGX0xKVVNUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnKyc6IGFyZy0+ZmxhZ3MgfD0gRl9TSUdOOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnICc6IGFyZy0+ZmxhZ3MgfD0gRl9CTEFOSzsgY29udGludWU7CisgICAgICAgIGNhc2UgJyMnOiBhcmctPmZsYWdzIHw9IEZfQUxUOyBjb250aW51ZTsKKyAgICAgICAgY2FzZSAnMCc6IGFyZy0+ZmxhZ3MgfD0gRl9aRVJPOyBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKiBQYXJzZSB3aWR0aC4gRXhhbXBsZTogIiUxMHMiID0+IHdpZHRoPTEwICovCisgICAgaWYgKGFyZy0+Y2ggPT0gJyonKSB7CisgICAgICAgIHYgPSB1bmljb2RlX2Zvcm1hdF9nZXRuZXh0YXJnKGN0eCk7CisgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGlmICghUHlMb25nX0NoZWNrKHYpKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFyZy0+d2lkdGggPSBQeUxvbmdfQXNTc2l6ZV90KHYpOworICAgICAgICBpZiAoYXJnLT53aWR0aCA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoYXJnLT53aWR0aCA8IDApIHsKKyAgICAgICAgICAgIGFyZy0+ZmxhZ3MgfD0gRl9MSlVTVDsKKyAgICAgICAgICAgIGFyZy0+d2lkdGggPSAtYXJnLT53aWR0aDsKKyAgICAgICAgfQorICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoYXJnLT5jaCA+PSAnMCcgJiYgYXJnLT5jaCA8PSAnOScpIHsKKyAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+Y2ggLSAnMCc7CisgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAvKiBTaW5jZSBhcmctPmNoIGlzIHVuc2lnbmVkLCB0aGUgUkhTIHdvdWxkIGVuZCB1cCBhcyB1bnNpZ25lZCwKKyAgICAgICAgICAgICAgIG1peGluZyBzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24uIFNpbmNlIGFyZy0+Y2ggaXMgYmV0d2VlbgorICAgICAgICAgICAgICAgJzAnIGFuZCAnOScsIGNhc3RpbmcgdG8gaW50IGlzIHNhZmUuICovCisgICAgICAgICAgICBpZiAoYXJnLT53aWR0aCA+IChQWV9TU0laRV9UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXJnLT53aWR0aCA9IGFyZy0+d2lkdGgqMTAgKyAoYXJnLT5jaCAtICcwJyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBQYXJzZSBwcmVjaXNpb24uIEV4YW1wbGU6ICIlLjNmIiA9PiBwcmVjPTMgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAnLicpIHsKKyAgICAgICAgYXJnLT5wcmVjID0gMDsKKyAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICB9CisgICAgICAgIGlmIChhcmctPmNoID09ICcqJykgeworICAgICAgICAgICAgdiA9IHVuaWNvZGVfZm9ybWF0X2dldG5leHRhcmcoY3R4KTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhcmctPnByZWMgPSBfUHlMb25nX0FzSW50KHYpOworICAgICAgICAgICAgaWYgKGFyZy0+cHJlYyA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIGlmIChhcmctPnByZWMgPCAwKQorICAgICAgICAgICAgICAgIGFyZy0+cHJlYyA9IDA7CisgICAgICAgICAgICBpZiAoLS1jdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgICAgICAgICAgYXJnLT5jaCA9IEZPUk1BVF9SRUFEKGN0eCk7CisgICAgICAgICAgICAgICAgY3R4LT5mbXRwb3MrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChhcmctPmNoID49ICcwJyAmJiBhcmctPmNoIDw9ICc5JykgeworICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5jaCAtICcwJzsKKyAgICAgICAgICAgIHdoaWxlICgtLWN0eC0+Zm10Y250ID49IDApIHsKKyAgICAgICAgICAgICAgICBhcmctPmNoID0gRk9STUFUX1JFQUQoY3R4KTsKKyAgICAgICAgICAgICAgICBjdHgtPmZtdHBvcysrOworICAgICAgICAgICAgICAgIGlmIChhcmctPmNoIDwgJzAnIHx8IGFyZy0+Y2ggPiAnOScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmIChhcmctPnByZWMgPiAoSU5UX01BWCAtICgoaW50KWFyZy0+Y2ggLSAnMCcpKSAvIDEwKSB7CisgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWNpc2lvbiB0b28gYmlnIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXJnLT5wcmVjID0gYXJnLT5wcmVjKjEwICsgKGFyZy0+Y2ggLSAnMCcpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLyogSWdub3JlICJoIiwgImwiIGFuZCAiTCIgZm9ybWF0IHByZWZpeCAoZXg6ICIlaGkiIG9yICIlbHMiKSAqLworICAgIGlmIChjdHgtPmZtdGNudCA+PSAwKSB7CisgICAgICAgIGlmIChhcmctPmNoID09ICdoJyB8fCBhcmctPmNoID09ICdsJyB8fCBhcmctPmNoID09ICdMJykgeworICAgICAgICAgICAgaWYgKC0tY3R4LT5mbXRjbnQgPj0gMCkgeworICAgICAgICAgICAgICAgIGFyZy0+Y2ggPSBGT1JNQVRfUkVBRChjdHgpOworICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGN0eC0+Zm10Y250IDwgMCkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbmNvbXBsZXRlIGZvcm1hdCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworCisjdW5kZWYgRk9STUFUX1JFQUQKK30KKworLyogRm9ybWF0IG9uZSBhcmd1bWVudC4gU3VwcG9ydGVkIGNvbnZlcnNpb24gc3BlY2lmaWVyczoKKworICAgLSAicyIsICJyIiwgImEiOiBhbnkgdHlwZQorICAgLSAiaSIsICJkIiwgInUiOiBpbnQgb3IgZmxvYXQKKyAgIC0gIm8iLCAieCIsICJYIjogaW50CisgICAtICJlIiwgIkUiLCAiZiIsICJGIiwgImciLCAiRyI6IGZsb2F0CisgICAtICJjIjogaW50IG9yIHN0ciAoMSBjaGFyYWN0ZXIpCisKKyAgIFdoZW4gcG9zc2libGUsIHRoZSBvdXRwdXQgaXMgd3JpdHRlbiBkaXJlY3RseSBpbnRvIHRoZSBVbmljb2RlIHdyaXRlcgorICAgKGN0eC0+d3JpdGVyKS4gQSBzdHJpbmcgaXMgY3JlYXRlZCB3aGVuIHBhZGRpbmcgaXMgcmVxdWlyZWQuCisKKyAgIFJldHVybiAwIGlmIHRoZSBhcmd1bWVudCBoYXMgYmVlbiBmb3JtYXR0ZWQgaW50byAqcF9zdHIsCisgICAgICAgICAgMSBpZiB0aGUgYXJndW1lbnQgaGFzIGJlZW4gd3JpdHRlbiBpbnRvIGN0eC0+d3JpdGVyLAorICAgICAgICAgLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50Cit1bmljb2RlX2Zvcm1hdF9hcmdfZm9ybWF0KHN0cnVjdCB1bmljb2RlX2Zvcm1hdHRlcl90ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1bmljb2RlX2Zvcm1hdF9hcmdfdCAqYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqKnBfc3RyKQoreworICAgIFB5T2JqZWN0ICp2OworICAgIF9QeVVuaWNvZGVXcml0ZXIgKndyaXRlciA9ICZjdHgtPndyaXRlcjsKKworICAgIGlmIChjdHgtPmZtdGNudCA9PSAwKQorICAgICAgICBjdHgtPndyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworCisgICAgaWYgKGFyZy0+Y2ggPT0gJyUnKSB7CisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsICclJykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICB2ID0gdW5pY29kZV9mb3JtYXRfZ2V0bmV4dGFyZyhjdHgpOworICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKworCisgICAgc3dpdGNoIChhcmctPmNoKSB7CisgICAgY2FzZSAncyc6CisgICAgY2FzZSAncic6CisgICAgY2FzZSAnYSc6CisgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSAmJiBhcmctPndpZHRoID09IC0xICYmIGFyZy0+cHJlYyA9PSAtMSkgeworICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIod3JpdGVyLCB2LCAxMCwgYXJnLT5mbGFncyAmIEZfQUxUKSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJiBhcmctPmNoID09ICdzJykgeworICAgICAgICAgICAgKnBfc3RyID0gdjsKKyAgICAgICAgICAgIFB5X0lOQ1JFRigqcF9zdHIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGFyZy0+Y2ggPT0gJ3MnKQorICAgICAgICAgICAgICAgICpwX3N0ciA9IFB5T2JqZWN0X1N0cih2KTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFyZy0+Y2ggPT0gJ3InKQorICAgICAgICAgICAgICAgICpwX3N0ciA9IFB5T2JqZWN0X1JlcHIodik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKnBfc3RyID0gUHlPYmplY3RfQVNDSUkodik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdpJzoKKyAgICBjYXNlICdkJzoKKyAgICBjYXNlICd1JzoKKyAgICBjYXNlICdvJzoKKyAgICBjYXNlICd4JzoKKyAgICBjYXNlICdYJzoKKyAgICB7CisgICAgICAgIGludCByZXQgPSBtYWluZm9ybWF0bG9uZyh2LCBhcmcsIHBfc3RyLCB3cml0ZXIpOworICAgICAgICBpZiAocmV0ICE9IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICBhcmctPnNpZ24gPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlICdlJzoKKyAgICBjYXNlICdFJzoKKyAgICBjYXNlICdmJzoKKyAgICBjYXNlICdGJzoKKyAgICBjYXNlICdnJzoKKyAgICBjYXNlICdHJzoKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xCisgICAgICAgICAgICAmJiAhKGFyZy0+ZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBhcmcsIE5VTEwsIHdyaXRlcikgPT0gLTEpCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgICBhcmctPnNpZ24gPSAxOworICAgICAgICBpZiAoZm9ybWF0ZmxvYXQodiwgYXJnLCBwX3N0ciwgTlVMTCkgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAnYyc6CisgICAgeworICAgICAgICBQeV9VQ1M0IGNoID0gZm9ybWF0Y2hhcih2KTsKKyAgICAgICAgaWYgKGNoID09IChQeV9VQ1M0KSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKGFyZy0+d2lkdGggPT0gLTEgJiYgYXJnLT5wcmVjID09IC0xKSB7CisgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KKyAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlQ2hhcklubGluZSh3cml0ZXIsIGNoKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgKnBfc3RyID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgZm9ybWF0IGNoYXJhY3RlciAnJWMnICgweCV4KSAiCisgICAgICAgICAgICAgICAgICAgICAiYXQgaW5kZXggJXpkIiwKKyAgICAgICAgICAgICAgICAgICAgICgzMTw9YXJnLT5jaCAmJiBhcmctPmNoPD0xMjYpID8gKGNoYXIpYXJnLT5jaCA6ICc/JywKKyAgICAgICAgICAgICAgICAgICAgIChpbnQpYXJnLT5jaCwKKyAgICAgICAgICAgICAgICAgICAgIGN0eC0+Zm10cG9zIC0gMSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKCpwX3N0ciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgYXNzZXJ0IChQeVVuaWNvZGVfQ2hlY2soKnBfc3RyKSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VuaWNvZGVfZm9ybWF0X2FyZ19vdXRwdXQoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVuaWNvZGVfZm9ybWF0X2FyZ190ICphcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpzdHIpCit7CisgICAgUHlfc3NpemVfdCBsZW47CisgICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kOworICAgIHZvaWQgKnBidWY7CisgICAgUHlfc3NpemVfdCBwaW5kZXg7CisgICAgUHlfVUNTNCBzaWduY2hhcjsKKyAgICBQeV9zc2l6ZV90IGJ1ZmxlbjsKKyAgICBQeV9VQ1M0IG1heGNoYXI7CisgICAgUHlfc3NpemVfdCBzdWJsZW47CisgICAgX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyID0gJmN0eC0+d3JpdGVyOworICAgIFB5X1VDUzQgZmlsbDsKKworICAgIGZpbGwgPSAnICc7CisgICAgaWYgKGFyZy0+c2lnbiAmJiBhcmctPmZsYWdzICYgRl9aRVJPKQorICAgICAgICBmaWxsID0gJzAnOworCisgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzdHIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzdHIpOworICAgIGlmICgoYXJnLT53aWR0aCA9PSAtMSB8fCBhcmctPndpZHRoIDw9IGxlbikKKyAgICAgICAgJiYgKGFyZy0+cHJlYyA9PSAtMSB8fCBhcmctPnByZWMgPj0gbGVuKQorICAgICAgICAmJiAhKGFyZy0+ZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQorICAgIHsKKyAgICAgICAgLyogRmFzdCBwYXRoICovCisgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgc3RyKSA9PSAtMSkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogVHJ1bmNhdGUgdGhlIHN0cmluZyBmb3IgInMiLCAiciIgYW5kICJhIiBmb3JtYXRzCisgICAgICAgaWYgdGhlIHByZWNpc2lvbiBpcyBzZXQgKi8KKyAgICBpZiAoYXJnLT5jaCA9PSAncycgfHwgYXJnLT5jaCA9PSAncicgfHwgYXJnLT5jaCA9PSAnYScpIHsKKyAgICAgICAgaWYgKGFyZy0+cHJlYyA+PSAwICYmIGxlbiA+IGFyZy0+cHJlYykKKyAgICAgICAgICAgIGxlbiA9IGFyZy0+cHJlYzsKKyAgICB9CisKKyAgICAvKiBBZGp1c3Qgc2lnbiBhbmQgd2lkdGggKi8KKyAgICBraW5kID0gUHlVbmljb2RlX0tJTkQoc3RyKTsKKyAgICBwYnVmID0gUHlVbmljb2RlX0RBVEEoc3RyKTsKKyAgICBwaW5kZXggPSAwOworICAgIHNpZ25jaGFyID0gJ1wwJzsKKyAgICBpZiAoYXJnLT5zaWduKSB7CisgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpOworICAgICAgICBpZiAoY2ggPT0gJy0nIHx8IGNoID09ICcrJykgeworICAgICAgICAgICAgc2lnbmNoYXIgPSBjaDsKKyAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgcGluZGV4Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoYXJnLT5mbGFncyAmIEZfU0lHTikKKyAgICAgICAgICAgIHNpZ25jaGFyID0gJysnOworICAgICAgICBlbHNlIGlmIChhcmctPmZsYWdzICYgRl9CTEFOSykKKyAgICAgICAgICAgIHNpZ25jaGFyID0gJyAnOworICAgICAgICBlbHNlCisgICAgICAgICAgICBhcmctPnNpZ24gPSAwOworICAgIH0KKyAgICBpZiAoYXJnLT53aWR0aCA8IGxlbikKKyAgICAgICAgYXJnLT53aWR0aCA9IGxlbjsKKworICAgIC8qIFByZXBhcmUgdGhlIHdyaXRlciAqLworICAgIG1heGNoYXIgPSB3cml0ZXItPm1heGNoYXI7CisgICAgaWYgKCEoYXJnLT5mbGFncyAmIEZfTEpVU1QpKSB7CisgICAgICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgICAgIGlmICgoYXJnLT53aWR0aC0xKSA+IGxlbikKKyAgICAgICAgICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGZpbGwpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGFyZy0+d2lkdGggPiBsZW4pCisgICAgICAgICAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBmaWxsKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHN0cikgPiBtYXhjaGFyKSB7CisgICAgICAgIFB5X1VDUzQgc3RybWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIoc3RyLCAwLCBwaW5kZXgrbGVuKTsKKyAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCBzdHJtYXhjaGFyKTsKKyAgICB9CisKKyAgICBidWZsZW4gPSBhcmctPndpZHRoOworICAgIGlmIChhcmctPnNpZ24gJiYgbGVuID09IGFyZy0+d2lkdGgpCisgICAgICAgIGJ1ZmxlbisrOworICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCBidWZsZW4sIG1heGNoYXIpID09IC0xKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBXcml0ZSB0aGUgc2lnbiBpZiBuZWVkZWQgKi8KKyAgICBpZiAoYXJnLT5zaWduKSB7CisgICAgICAgIGlmIChmaWxsICE9ICcgJykgeworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgc2lnbmNoYXIpOworICAgICAgICAgICAgd3JpdGVyLT5wb3MgKz0gMTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJnLT53aWR0aCA+IGxlbikKKyAgICAgICAgICAgIGFyZy0+d2lkdGgtLTsKKyAgICB9CisKKyAgICAvKiBXcml0ZSB0aGUgbnVtZXJpYyBwcmVmaXggZm9yICJ4IiwgIlgiIGFuZCAibyIgZm9ybWF0cworICAgICAgIGlmIHRoZSBhbHRlcm5hdGUgZm9ybSBpcyB1c2VkLgorICAgICAgIEZvciBleGFtcGxlLCB3cml0ZSAiMHgiIGZvciB0aGUgIiUjeCIgZm9ybWF0LiAqLworICAgIGlmICgoYXJnLT5mbGFncyAmIEZfQUxUKSAmJiAoYXJnLT5jaCA9PSAneCcgfHwgYXJnLT5jaCA9PSAnWCcgfHwgYXJnLT5jaCA9PSAnbycpKSB7CisgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7CisgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXggKyAxKSA9PSBhcmctPmNoKTsKKyAgICAgICAgaWYgKGZpbGwgIT0gJyAnKSB7CisgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsIHdyaXRlci0+cG9zLCAnMCcpOworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcysxLCBhcmctPmNoKTsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IDI7CisgICAgICAgICAgICBwaW5kZXggKz0gMjsKKyAgICAgICAgfQorICAgICAgICBhcmctPndpZHRoIC09IDI7CisgICAgICAgIGlmIChhcmctPndpZHRoIDwgMCkKKyAgICAgICAgICAgIGFyZy0+d2lkdGggPSAwOworICAgICAgICBsZW4gLT0gMjsKKyAgICB9CisKKyAgICAvKiBQYWQgbGVmdCB3aXRoIHRoZSBmaWxsIGNoYXJhY3RlciBpZiBuZWVkZWQgKi8KKyAgICBpZiAoYXJnLT53aWR0aCA+IGxlbiAmJiAhKGFyZy0+ZmxhZ3MgJiBGX0xKVVNUKSkgeworICAgICAgICBzdWJsZW4gPSBhcmctPndpZHRoIC0gbGVuOworICAgICAgICBGSUxMKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCBmaWxsLCB3cml0ZXItPnBvcywgc3VibGVuKTsKKyAgICAgICAgd3JpdGVyLT5wb3MgKz0gc3VibGVuOworICAgICAgICBhcmctPndpZHRoID0gbGVuOworICAgIH0KKworICAgIC8qIElmIHBhZGRpbmcgd2l0aCBzcGFjZXM6IHdyaXRlIHNpZ24gaWYgbmVlZGVkIGFuZC9vciBudW1lcmljIHByZWZpeCBpZgorICAgICAgIHRoZSBhbHRlcm5hdGUgZm9ybSBpcyB1c2VkICovCisgICAgaWYgKGZpbGwgPT0gJyAnKSB7CisgICAgICAgIGlmIChhcmctPnNpZ24pIHsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MsIHNpZ25jaGFyKTsKKyAgICAgICAgICAgIHdyaXRlci0+cG9zICs9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChhcmctPmZsYWdzICYgRl9BTFQpICYmIChhcmctPmNoID09ICd4JyB8fCBhcmctPmNoID09ICdYJyB8fCBhcmctPmNoID09ICdvJykpIHsKKyAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7CisgICAgICAgICAgICBhc3NlcnQoUHlVbmljb2RlX1JFQUQoa2luZCwgcGJ1ZiwgcGluZGV4KzEpID09IGFyZy0+Y2gpOworICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci0+a2luZCwgd3JpdGVyLT5kYXRhLCB3cml0ZXItPnBvcywgJzAnKTsKKyAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXItPmtpbmQsIHdyaXRlci0+ZGF0YSwgd3JpdGVyLT5wb3MrMSwgYXJnLT5jaCk7CisgICAgICAgICAgICB3cml0ZXItPnBvcyArPSAyOworICAgICAgICAgICAgcGluZGV4ICs9IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXcml0ZSBjaGFyYWN0ZXJzICovCisgICAgaWYgKGxlbikgeworICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXItPmJ1ZmZlciwgd3JpdGVyLT5wb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciwgcGluZGV4LCBsZW4pOworICAgICAgICB3cml0ZXItPnBvcyArPSBsZW47CisgICAgfQorCisgICAgLyogUGFkIHJpZ2h0IHdpdGggdGhlIGZpbGwgY2hhcmFjdGVyIGlmIG5lZWRlZCAqLworICAgIGlmIChhcmctPndpZHRoID4gbGVuKSB7CisgICAgICAgIHN1YmxlbiA9IGFyZy0+d2lkdGggLSBsZW47CisgICAgICAgIEZJTEwod3JpdGVyLT5raW5kLCB3cml0ZXItPmRhdGEsICcgJywgd3JpdGVyLT5wb3MsIHN1Ymxlbik7CisgICAgICAgIHdyaXRlci0+cG9zICs9IHN1YmxlbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIEhlbHBlciBvZiBQeVVuaWNvZGVfRm9ybWF0KCk6IGZvcm1hdCBvbmUgYXJnLgorICAgUmV0dXJuIDAgb24gc3VjY2VzcywgcmFpc2UgYW4gZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuICovCitzdGF0aWMgaW50Cit1bmljb2RlX2Zvcm1hdF9hcmcoc3RydWN0IHVuaWNvZGVfZm9ybWF0dGVyX3QgKmN0eCkKK3sKKyAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXRfYXJnX3QgYXJnOworICAgIFB5T2JqZWN0ICpzdHI7CisgICAgaW50IHJldDsKKworICAgIGFyZy5jaCA9IFB5VW5pY29kZV9SRUFEKGN0eC0+Zm10a2luZCwgY3R4LT5mbXRkYXRhLCBjdHgtPmZtdHBvcyk7CisgICAgYXJnLmZsYWdzID0gMDsKKyAgICBhcmcud2lkdGggPSAtMTsKKyAgICBhcmcucHJlYyA9IC0xOworICAgIGFyZy5zaWduID0gMDsKKyAgICBzdHIgPSBOVUxMOworCisgICAgcmV0ID0gdW5pY29kZV9mb3JtYXRfYXJnX3BhcnNlKGN0eCwgJmFyZyk7CisgICAgaWYgKHJldCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0ID0gdW5pY29kZV9mb3JtYXRfYXJnX2Zvcm1hdChjdHgsICZhcmcsICZzdHIpOworICAgIGlmIChyZXQgPT0gLTEpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChyZXQgIT0gMSkgeworICAgICAgICByZXQgPSB1bmljb2RlX2Zvcm1hdF9hcmdfb3V0cHV0KGN0eCwgJmFyZywgc3RyKTsKKyAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgIGlmIChyZXQgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGN0eC0+ZGljdCAmJiAoY3R4LT5hcmdpZHggPCBjdHgtPmFyZ2xlbikgJiYgYXJnLmNoICE9ICclJykgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKwogUHlPYmplY3QgKgogUHlVbmljb2RlX0Zvcm1hdChQeU9iamVjdCAqZm9ybWF0LCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeV9zc2l6ZV90IGZtdGNudCwgZm10cG9zLCBhcmdsZW4sIGFyZ2lkeDsKLSAgICBpbnQgYXJnc19vd25lZCA9IDA7Ci0gICAgUHlPYmplY3QgKmRpY3QgPSBOVUxMOwotICAgIFB5T2JqZWN0ICp0ZW1wID0gTlVMTDsKLSAgICBQeU9iamVjdCAqc2Vjb25kID0gTlVMTDsKLSAgICBQeU9iamVjdCAqdWZvcm1hdDsKLSAgICB2b2lkICpmbXQ7Ci0gICAgZW51bSBQeVVuaWNvZGVfS2luZCBraW5kLCBmbXRraW5kOwotICAgIF9QeVVuaWNvZGVXcml0ZXIgd3JpdGVyOwotICAgIFB5X3NzaXplX3Qgc3VibGVuOwotICAgIFB5X1VDUzQgbWF4Y2hhcjsKKyAgICBzdHJ1Y3QgdW5pY29kZV9mb3JtYXR0ZXJfdCBjdHg7CiAKICAgICBpZiAoZm9ybWF0ID09IE5VTEwgfHwgYXJncyA9PSBOVUxMKSB7CiAgICAgICAgIFB5RXJyX0JhZEludGVybmFsQ2FsbCgpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgdWZvcm1hdCA9IFB5VW5pY29kZV9Gcm9tT2JqZWN0KGZvcm1hdCk7Ci0gICAgaWYgKHVmb3JtYXQgPT0gTlVMTCkKKworICAgIGN0eC5mbXRzdHIgPSBQeVVuaWNvZGVfRnJvbU9iamVjdChmb3JtYXQpOworICAgIGlmIChjdHguZm10c3RyID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChQeVVuaWNvZGVfUkVBRFkodWZvcm1hdCkgPT0gLTEpIHsKLSAgICAgICAgUHlfREVDUkVGKHVmb3JtYXQpOworICAgIGlmIChQeVVuaWNvZGVfUkVBRFkoY3R4LmZtdHN0cikgPT0gLTEpIHsKKyAgICAgICAgUHlfREVDUkVGKGN0eC5mbXRzdHIpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CisgICAgY3R4LmZtdGRhdGEgPSBQeVVuaWNvZGVfREFUQShjdHguZm10c3RyKTsKKyAgICBjdHguZm10a2luZCA9IFB5VW5pY29kZV9LSU5EKGN0eC5mbXRzdHIpOworICAgIGN0eC5mbXRjbnQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChjdHguZm10c3RyKTsKKyAgICBjdHguZm10cG9zID0gMDsKIAotICAgIGZtdCA9IFB5VW5pY29kZV9EQVRBKHVmb3JtYXQpOwotICAgIGZtdGtpbmQgPSBQeVVuaWNvZGVfS0lORCh1Zm9ybWF0KTsKLSAgICBmbXRjbnQgPSBQeVVuaWNvZGVfR0VUX0xFTkdUSCh1Zm9ybWF0KTsKLSAgICBmbXRwb3MgPSAwOwotCi0gICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZ3cml0ZXIsIGZtdGNudCArIDEwMCk7CisgICAgX1B5VW5pY29kZVdyaXRlcl9Jbml0KCZjdHgud3JpdGVyKTsKKyAgICBjdHgud3JpdGVyLm1pbl9sZW5ndGggPSBjdHguZm10Y250ICsgMTAwOworICAgIGN0eC53cml0ZXIub3ZlcmFsbG9jYXRlID0gMTsKIAogICAgIGlmIChQeVR1cGxlX0NoZWNrKGFyZ3MpKSB7Ci0gICAgICAgIGFyZ2xlbiA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKLSAgICAgICAgYXJnaWR4ID0gMDsKKyAgICAgICAgY3R4LmFyZ2xlbiA9IFB5VHVwbGVfU2l6ZShhcmdzKTsKKyAgICAgICAgY3R4LmFyZ2lkeCA9IDA7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBhcmdsZW4gPSAtMTsKLSAgICAgICAgYXJnaWR4ID0gLTI7CisgICAgICAgIGN0eC5hcmdsZW4gPSAtMTsKKyAgICAgICAgY3R4LmFyZ2lkeCA9IC0yOwogICAgIH0KKyAgICBjdHguYXJnc19vd25lZCA9IDA7CiAgICAgaWYgKFB5TWFwcGluZ19DaGVjayhhcmdzKSAmJiAhUHlUdXBsZV9DaGVjayhhcmdzKSAmJiAhUHlVbmljb2RlX0NoZWNrKGFyZ3MpKQotICAgICAgICBkaWN0ID0gYXJnczsKKyAgICAgICAgY3R4LmRpY3QgPSBhcmdzOworICAgIGVsc2UKKyAgICAgICAgY3R4LmRpY3QgPSBOVUxMOworICAgIGN0eC5hcmdzID0gYXJnczsKIAotICAgIHdoaWxlICgtLWZtdGNudCA+PSAwKSB7Ci0gICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcykgIT0gJyUnKSB7CisgICAgd2hpbGUgKC0tY3R4LmZtdGNudCA+PSAwKSB7CisgICAgICAgIGlmIChQeVVuaWNvZGVfUkVBRChjdHguZm10a2luZCwgY3R4LmZtdGRhdGEsIGN0eC5mbXRwb3MpICE9ICclJykgewogICAgICAgICAgICAgUHlfc3NpemVfdCBub25mbXRwb3M7Ci0gICAgICAgICAgICBub25mbXRwb3MgPSBmbXRwb3MrKzsKLSAgICAgICAgICAgIHdoaWxlIChmbXRjbnQgPj0gMCAmJgotICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKSAhPSAnJScpIHsKLSAgICAgICAgICAgICAgICBmbXRwb3MrKzsKLSAgICAgICAgICAgICAgICBmbXRjbnQtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPCAwKQotICAgICAgICAgICAgICAgIGZtdHBvcy0tOwotICAgICAgICAgICAgc3VibGVuID0gZm10cG9zIC0gbm9uZm10cG9zOwotICAgICAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodWZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmZtdHBvcywgbm9uZm10cG9zICsgc3VibGVuKTsKLSAgICAgICAgICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUoJndyaXRlciwgc3VibGVuLCBtYXhjaGFyKSA9PSAtMSkKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7CiAKLSAgICAgICAgICAgIF9QeVVuaWNvZGVfRmFzdENvcHlDaGFyYWN0ZXJzKHdyaXRlci5idWZmZXIsIHdyaXRlci5wb3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1Zm9ybWF0LCBub25mbXRwb3MsIHN1Ymxlbik7Ci0gICAgICAgICAgICB3cml0ZXIucG9zICs9IHN1YmxlbjsKKyAgICAgICAgICAgIG5vbmZtdHBvcyA9IGN0eC5mbXRwb3MrKzsKKyAgICAgICAgICAgIHdoaWxlIChjdHguZm10Y250ID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfUkVBRChjdHguZm10a2luZCwgY3R4LmZtdGRhdGEsIGN0eC5mbXRwb3MpICE9ICclJykgeworICAgICAgICAgICAgICAgIGN0eC5mbXRwb3MrKzsKKyAgICAgICAgICAgICAgICBjdHguZm10Y250LS07CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY3R4LmZtdGNudCA8IDApIHsKKyAgICAgICAgICAgICAgICBjdHguZm10cG9zLS07CisgICAgICAgICAgICAgICAgY3R4LndyaXRlci5vdmVyYWxsb2NhdGUgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN1YnN0cmluZygmY3R4LndyaXRlciwgY3R4LmZtdHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbmZtdHBvcywgY3R4LmZtdHBvcykgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIEdvdCBhIGZvcm1hdCBzcGVjaWZpZXIgKi8KLSAgICAgICAgICAgIGludCBmbGFncyA9IDA7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHdpZHRoID0gLTE7Ci0gICAgICAgICAgICBpbnQgcHJlYyA9IC0xOwotICAgICAgICAgICAgUHlfVUNTNCBjID0gJ1wwJzsKLSAgICAgICAgICAgIFB5X1VDUzQgZmlsbDsKLSAgICAgICAgICAgIGludCBzaWduOwotICAgICAgICAgICAgUHlfVUNTNCBzaWduY2hhcjsKLSAgICAgICAgICAgIGludCBpc251bW9rOwotICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBOVUxMOwotICAgICAgICAgICAgdm9pZCAqcGJ1ZiA9IE5VTEw7Ci0gICAgICAgICAgICBQeV9zc2l6ZV90IHBpbmRleCwgbGVuOwotICAgICAgICAgICAgUHlfVUNTNCBidWZtYXhjaGFyOwotICAgICAgICAgICAgUHlfc3NpemVfdCBidWZsZW47Ci0KLSAgICAgICAgICAgIGZtdHBvcysrOwotICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKTsKLSAgICAgICAgICAgIGlmIChjID09ICcoJykgewotICAgICAgICAgICAgICAgIFB5X3NzaXplX3Qga2V5c3RhcnQ7Ci0gICAgICAgICAgICAgICAgUHlfc3NpemVfdCBrZXlsZW47Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKmtleTsKLSAgICAgICAgICAgICAgICBpbnQgcGNvdW50ID0gMTsKLQotICAgICAgICAgICAgICAgIGlmIChkaWN0ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3JtYXQgcmVxdWlyZXMgYSBtYXBwaW5nIik7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgKytmbXRwb3M7Ci0gICAgICAgICAgICAgICAgLS1mbXRjbnQ7Ci0gICAgICAgICAgICAgICAga2V5c3RhcnQgPSBmbXRwb3M7Ci0gICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIGJhbGFuY2VkIHBhcmVudGhlc2VzICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKHBjb3VudCA+IDAgJiYgLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MpOwotICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAnKScpCi0gICAgICAgICAgICAgICAgICAgICAgICAtLXBjb3VudDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAnKCcpCi0gICAgICAgICAgICAgICAgICAgICAgICArK3Bjb3VudDsKLSAgICAgICAgICAgICAgICAgICAgZm10cG9zKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGtleWxlbiA9IGZtdHBvcyAtIGtleXN0YXJ0IC0gMTsKLSAgICAgICAgICAgICAgICBpZiAoZm10Y250IDwgMCB8fCBwY291bnQgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0IGtleSIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGtleSA9IFB5VW5pY29kZV9TdWJzdHJpbmcodWZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXN0YXJ0LCBrZXlzdGFydCArIGtleWxlbik7Ci0gICAgICAgICAgICAgICAgaWYgKGtleSA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFyZ3MpOwotICAgICAgICAgICAgICAgICAgICBhcmdzX293bmVkID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJncyA9IFB5T2JqZWN0X0dldEl0ZW0oZGljdCwga2V5KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKLSAgICAgICAgICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYXJnc19vd25lZCA9IDE7Ci0gICAgICAgICAgICAgICAgYXJnbGVuID0gLTE7Ci0gICAgICAgICAgICAgICAgYXJnaWR4ID0gLTI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKGMpIHsKLSAgICAgICAgICAgICAgICBjYXNlICctJzogZmxhZ3MgfD0gRl9MSlVTVDsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnKyc6IGZsYWdzIHw9IEZfU0lHTjsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnICc6IGZsYWdzIHw9IEZfQkxBTks7IGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGNhc2UgJyMnOiBmbGFncyB8PSBGX0FMVDsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgY2FzZSAnMCc6IGZsYWdzIHw9IEZfWkVSTzsgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGMgPT0gJyonKSB7Ci0gICAgICAgICAgICAgICAgdiA9IGdldG5leHRhcmcoYXJncywgYXJnbGVuLCAmYXJnaWR4KTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgaWYgKCFQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIqIHdhbnRzIGludCIpOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHdpZHRoID0gUHlMb25nX0FzU3NpemVfdCh2KTsKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZmxhZ3MgfD0gRl9MSlVTVDsKLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSAtd2lkdGg7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICgtLWZtdGNudCA+PSAwKQotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgewotICAgICAgICAgICAgICAgIHdpZHRoID0gYyAtICcwJzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoLS1mbXRjbnQgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgLyogU2luY2UgYyBpcyB1bnNpZ25lZCwgdGhlIFJIUyB3b3VsZCBlbmQgdXAgYXMgdW5zaWduZWQsCi0gICAgICAgICAgICAgICAgICAgICAgIG1peGluZyBzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24uIFNpbmNlIGMgaXMgYmV0d2VlbgotICAgICAgICAgICAgICAgICAgICAgICAnMCcgYW5kICc5JywgY2FzdGluZyB0byBpbnQgaXMgc2FmZS4gKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKHdpZHRoID4gKFBZX1NTSVpFX1RfTUFYIC0gKChpbnQpYyAtICcwJykpIC8gMTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aWR0aCB0b28gYmlnIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgd2lkdGggPSB3aWR0aCoxMCArIChjIC0gJzAnKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoYyA9PSAnLicpIHsKLSAgICAgICAgICAgICAgICBwcmVjID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoLS1mbXRjbnQgPj0gMCkKLSAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgIGlmIChjID09ICcqJykgewotICAgICAgICAgICAgICAgICAgICB2ID0gZ2V0bmV4dGFyZyhhcmdzLCBhcmdsZW4sICZhcmdpZHgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBpZiAoIVB5TG9uZ19DaGVjayh2KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKiB3YW50cyBpbnQiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBwcmVjID0gX1B5TG9uZ19Bc0ludCh2KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByZWMgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcHJlYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgtLWZtdGNudCA+PSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgYyA9IFB5VW5pY29kZV9SRUFEKGZtdGtpbmQsIGZtdCwgZm10cG9zKyspOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykgewotICAgICAgICAgICAgICAgICAgICBwcmVjID0gYyAtICcwJzsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tZm10Y250ID49IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBQeVVuaWNvZGVfUkVBRChmbXRraW5kLCBmbXQsIGZtdHBvcysrKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjIDwgJzAnIHx8IGMgPiAnOScpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlYyA+IChJTlRfTUFYIC0gKChpbnQpYyAtICcwJykpIC8gMTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByZWMgdG9vIGJpZyIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWMgPSBwcmVjKjEwICsgKGMgLSAnMCcpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSAvKiBwcmVjICovCi0gICAgICAgICAgICBpZiAoZm10Y250ID49IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoYyA9PSAnaCcgfHwgYyA9PSAnbCcgfHwgYyA9PSAnTCcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKC0tZm10Y250ID49IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQUQoZm10a2luZCwgZm10LCBmbXRwb3MrKyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGZtdGNudCA8IDApIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImluY29tcGxldGUgZm9ybWF0Iik7CisgICAgICAgICAgICBjdHguZm10cG9zKys7CisgICAgICAgICAgICBpZiAodW5pY29kZV9mb3JtYXRfYXJnKCZjdHgpID09IC0xKQogICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmbXRjbnQgPT0gMCkKLSAgICAgICAgICAgICAgICB3cml0ZXIub3ZlcmFsbG9jYXRlID0gMDsKKyAgICAgICAgfQorICAgIH0KIAotICAgICAgICAgICAgaWYgKGMgPT0gJyUnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCAxLCAnJScpID09IC0xKQotICAgICAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgJyUnKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHYgPSBnZXRuZXh0YXJnKGFyZ3MsIGFyZ2xlbiwgJmFyZ2lkeCk7Ci0gICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgICAgICAgICAgc2lnbiA9IDA7Ci0gICAgICAgICAgICBzaWduY2hhciA9ICdcMCc7Ci0gICAgICAgICAgICBmaWxsID0gJyAnOwotICAgICAgICAgICAgc3dpdGNoIChjKSB7Ci0KLSAgICAgICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICBjYXNlICdhJzoKLSAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrRXhhY3QodikgJiYgd2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMSkgewotICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRm9ybWF0V3JpdGVyKCZ3cml0ZXIsIHYsIDEwLCBmbGFncyAmIEZfQUxUKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSAmJiBjID09ICdzJykgewotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gdjsKLSAgICAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHRlbXApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ3MnKQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFB5T2JqZWN0X1N0cih2KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYyA9PSAncicpCi0gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUHlPYmplY3RfUmVwcih2KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFB5T2JqZWN0X0FTQ0lJKHYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnaSc6Ci0gICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgY2FzZSAnbyc6Ci0gICAgICAgICAgICBjYXNlICd4JzoKLSAgICAgICAgICAgIGNhc2UgJ1gnOgotICAgICAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KQotICAgICAgICAgICAgICAgICAgICAmJiB3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xCi0gICAgICAgICAgICAgICAgICAgICYmICEoZmxhZ3MgJiAoRl9TSUdOIHwgRl9CTEFOSykpKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgLyogRmFzdCBwYXRoICovCi0gICAgICAgICAgICAgICAgICAgIHN3aXRjaChjKQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgMTAsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAneCc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgMTYsIGZsYWdzICYgRl9BTFQpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAnbyc6Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19Gb3JtYXRXcml0ZXIoJndyaXRlciwgdiwgOCwgZmxhZ3MgJiBGX0FMVCkgPT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBuZXh0YXJnOwotICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpc251bW9rID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoUHlOdW1iZXJfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmlvYmo9TlVMTDsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpb2JqID0gdjsKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpb2JqKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvYmogPSBQeU51bWJlcl9Mb25nKHYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpb2JqIT1OVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoUHlMb25nX0NoZWNrKGlvYmopKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNudW1vayA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGZvcm1hdGxvbmcoaW9iaiwgZmxhZ3MsIHByZWMsIChjID09ICdpJz8gJ2QnOiBjKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGlvYmopOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICghaXNudW1vaykgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUlJWMgZm9ybWF0OiBhIG51bWJlciBpcyByZXF1aXJlZCwgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCAlLjIwMHMiLCAoY2hhciljLCBQeV9UWVBFKHYpLT50cF9uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGX1pFUk8pCi0gICAgICAgICAgICAgICAgICAgIGZpbGwgPSAnMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGNhc2UgJ2UnOgotICAgICAgICAgICAgY2FzZSAnRSc6Ci0gICAgICAgICAgICBjYXNlICdmJzoKLSAgICAgICAgICAgIGNhc2UgJ0YnOgotICAgICAgICAgICAgY2FzZSAnZyc6Ci0gICAgICAgICAgICBjYXNlICdHJzoKLSAgICAgICAgICAgICAgICBpZiAod2lkdGggPT0gLTEgJiYgcHJlYyA9PSAtMQotICAgICAgICAgICAgICAgICAgICAmJiAhKGZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybWF0ZmxvYXQodiwgZmxhZ3MsIHByZWMsIGMsIE5VTEwsICZ3cml0ZXIpID09IC0xKQotICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgICAgICBnb3RvIG5leHRhcmc7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgc2lnbiA9IDE7Ci0gICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRl9aRVJPKQotICAgICAgICAgICAgICAgICAgICBmaWxsID0gJzAnOwotICAgICAgICAgICAgICAgIGlmIChmb3JtYXRmbG9hdCh2LCBmbGFncywgcHJlYywgYywgJnRlbXAsIE5VTEwpID09IC0xKQotICAgICAgICAgICAgICAgICAgICB0ZW1wID0gTlVMTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgY2FzZSAnYyc6Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlfVUNTNCBjaCA9IGZvcm1hdGNoYXIodik7Ci0gICAgICAgICAgICAgICAgaWYgKGNoID09IChQeV9VQ1M0KSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA9PSAtMSAmJiBwcmVjID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9QcmVwYXJlKCZ3cml0ZXIsIDEsIGNoKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgY2gpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdGVtcCA9IFB5VW5pY29kZV9Gcm9tT3JkaW5hbChjaCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1ZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICclYycgKDB4JXgpICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF0IGluZGV4ICV6ZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgzMTw9YyAmJiBjPD0xMjYpID8gKGNoYXIpYyA6ICc/JywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbXRwb3MgLSAxKTsKLSAgICAgICAgICAgICAgICBnb3RvIG9uRXJyb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIGFzc2VydCAoUHlVbmljb2RlX0NoZWNrKHRlbXApKTsKLQotICAgICAgICAgICAgaWYgKHdpZHRoID09IC0xICYmIHByZWMgPT0gLTEKLSAgICAgICAgICAgICAgICAmJiAhKGZsYWdzICYgKEZfU0lHTiB8IEZfQkxBTkspKSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvKiBGYXN0IHBhdGggKi8KLSAgICAgICAgICAgICAgICBpZiAoX1B5VW5pY29kZVdyaXRlcl9Xcml0ZVN0cigmd3JpdGVyLCB0ZW1wKSA9PSAtMSkKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgICAgIGdvdG8gbmV4dGFyZzsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWSh0ZW1wKSA9PSAtMSkgewotICAgICAgICAgICAgICAgIFB5X0NMRUFSKHRlbXApOwotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORCh0ZW1wKTsKLSAgICAgICAgICAgIHBidWYgPSBQeVVuaWNvZGVfREFUQSh0ZW1wKTsKLSAgICAgICAgICAgIGxlbiA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHRlbXApOwotCi0gICAgICAgICAgICBpZiAoYyA9PSAncycgfHwgYyA9PSAncicgfHwgYyA9PSAnYScpIHsKLSAgICAgICAgICAgICAgICBpZiAocHJlYyA+PSAwICYmIGxlbiA+IHByZWMpCi0gICAgICAgICAgICAgICAgICAgIGxlbiA9IHByZWM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIHBidWYgaXMgaW5pdGlhbGl6ZWQgaGVyZS4gKi8KLSAgICAgICAgICAgIHBpbmRleCA9IDA7Ci0gICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgIFB5X1VDUzQgY2ggPSBQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpOwotICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnLScgfHwgY2ggPT0gJysnKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNpZ25jaGFyID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgIGxlbi0tOwotICAgICAgICAgICAgICAgICAgICBwaW5kZXgrKzsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBGX1NJR04pCi0gICAgICAgICAgICAgICAgICAgIHNpZ25jaGFyID0gJysnOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgRl9CTEFOSykKLSAgICAgICAgICAgICAgICAgICAgc2lnbmNoYXIgPSAnICc7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBzaWduID0gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWR0aCA8IGxlbikKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGxlbjsKLQotICAgICAgICAgICAgLyogQ29tcHV0ZSB0aGUgbGVuZ3RoIGFuZCBtYXhpbXVtIGNoYXJhY3RlciBvZiB0aGUKLSAgICAgICAgICAgICAgIHdyaXR0ZW4gY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgYnVmbWF4Y2hhciA9IDEyNzsKLSAgICAgICAgICAgIGlmICghKGZsYWdzICYgRl9MSlVTVCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoc2lnbikgewotICAgICAgICAgICAgICAgICAgICBpZiAoKHdpZHRoLTEpID4gbGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgYnVmbWF4Y2hhciA9IFB5X01BWChidWZtYXhjaGFyLCBmaWxsKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zm1heGNoYXIgPSBQeV9NQVgoYnVmbWF4Y2hhciwgZmlsbCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWF4Y2hhciA9IF9QeVVuaWNvZGVfRmluZE1heENoYXIodGVtcCwgMCwgcGluZGV4K2xlbik7Ci0gICAgICAgICAgICBidWZtYXhjaGFyID0gUHlfTUFYKGJ1Zm1heGNoYXIsIG1heGNoYXIpOwotCi0gICAgICAgICAgICBidWZsZW4gPSB3aWR0aDsKLSAgICAgICAgICAgIGlmIChzaWduICYmIGxlbiA9PSB3aWR0aCkKLSAgICAgICAgICAgICAgICBidWZsZW4rKzsKLQotICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVXcml0ZXJfUHJlcGFyZSgmd3JpdGVyLCBidWZsZW4sIGJ1Zm1heGNoYXIpID09IC0xKQotICAgICAgICAgICAgICAgIGdvdG8gb25FcnJvcjsKLQotICAgICAgICAgICAgLyogV3JpdGUgY2hhcmFjdGVycyAqLwotICAgICAgICAgICAgaWYgKHNpZ24pIHsKLSAgICAgICAgICAgICAgICBpZiAoZmlsbCAhPSAnICcpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgc2lnbmNoYXIpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbikKLSAgICAgICAgICAgICAgICAgICAgd2lkdGgtLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICgoZmxhZ3MgJiBGX0FMVCkgJiYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnIHx8IGMgPT0gJ28nKSkgewotICAgICAgICAgICAgICAgIGFzc2VydChQeVVuaWNvZGVfUkVBRChraW5kLCBwYnVmLCBwaW5kZXgpID09ICcwJyk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCArIDEpID09IGMpOwotICAgICAgICAgICAgICAgIGlmIChmaWxsICE9ICcgJykgewotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zLCAnMCcpOwotICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfV1JJVEUod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCB3cml0ZXIucG9zKzEsIGMpOwotICAgICAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IDI7Ci0gICAgICAgICAgICAgICAgICAgIHBpbmRleCArPSAyOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aWR0aCAtPSAyOwotICAgICAgICAgICAgICAgIGlmICh3aWR0aCA8IDApCi0gICAgICAgICAgICAgICAgICAgIHdpZHRoID0gMDsKLSAgICAgICAgICAgICAgICBsZW4gLT0gMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbiAmJiAhKGZsYWdzICYgRl9MSlVTVCkpIHsKLSAgICAgICAgICAgICAgICBzdWJsZW4gPSB3aWR0aCAtIGxlbjsKLSAgICAgICAgICAgICAgICBGSUxMKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgZmlsbCwgd3JpdGVyLnBvcywgc3VibGVuKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IHN1YmxlbjsKLSAgICAgICAgICAgICAgICB3aWR0aCA9IGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChmaWxsID09ICcgJykgewotICAgICAgICAgICAgICAgIGlmIChzaWduKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9XUklURSh3cml0ZXIua2luZCwgd3JpdGVyLmRhdGEsIHdyaXRlci5wb3MsIHNpZ25jaGFyKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRl9BTFQpICYmIChjID09ICd4JyB8fCBjID09ICdYJyB8fCBjID09ICdvJykpIHsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCkgPT0gJzAnKTsKLSAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KFB5VW5pY29kZV9SRUFEKGtpbmQsIHBidWYsIHBpbmRleCsxKSA9PSBjKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcywgJzAnKTsKLSAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX1dSSVRFKHdyaXRlci5raW5kLCB3cml0ZXIuZGF0YSwgd3JpdGVyLnBvcysxLCBjKTsKLSAgICAgICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSAyOwotICAgICAgICAgICAgICAgICAgICBwaW5kZXggKz0gMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChsZW4pIHsKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0Zhc3RDb3B5Q2hhcmFjdGVycyh3cml0ZXIuYnVmZmVyLCB3cml0ZXIucG9zLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAsIHBpbmRleCwgbGVuKTsKLSAgICAgICAgICAgICAgICB3cml0ZXIucG9zICs9IGxlbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3aWR0aCA+IGxlbikgewotICAgICAgICAgICAgICAgIHN1YmxlbiA9IHdpZHRoIC0gbGVuOwotICAgICAgICAgICAgICAgIEZJTEwod3JpdGVyLmtpbmQsIHdyaXRlci5kYXRhLCAnICcsIHdyaXRlci5wb3MsIHN1Ymxlbik7Ci0gICAgICAgICAgICAgICAgd3JpdGVyLnBvcyArPSBzdWJsZW47Ci0gICAgICAgICAgICB9Ci0KLW5leHRhcmc6Ci0gICAgICAgICAgICBpZiAoZGljdCAmJiAoYXJnaWR4IDwgYXJnbGVuKSAmJiBjICE9ICclJykgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYWxsIGFyZ3VtZW50cyBjb252ZXJ0ZWQgZHVyaW5nIHN0cmluZyBmb3JtYXR0aW5nIik7Ci0gICAgICAgICAgICAgICAgZ290byBvbkVycm9yOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlfQ0xFQVIodGVtcCk7Ci0gICAgICAgIH0gLyogJyUnICovCi0gICAgfSAvKiB1bnRpbCBlbmQgKi8KLSAgICBpZiAoYXJnaWR4IDwgYXJnbGVuICYmICFkaWN0KSB7CisgICAgaWYgKGN0eC5hcmdpZHggPCBjdHguYXJnbGVuICYmICFjdHguZGljdCkgewogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIm5vdCBhbGwgYXJndW1lbnRzIGNvbnZlcnRlZCBkdXJpbmcgc3RyaW5nIGZvcm1hdHRpbmciKTsKICAgICAgICAgZ290byBvbkVycm9yOwogICAgIH0KIAotICAgIGlmIChhcmdzX293bmVkKSB7Ci0gICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICBpZiAoY3R4LmFyZ3Nfb3duZWQpIHsKKyAgICAgICAgUHlfREVDUkVGKGN0eC5hcmdzKTsKICAgICB9Ci0gICAgUHlfREVDUkVGKHVmb3JtYXQpOwotICAgIFB5X1hERUNSRUYodGVtcCk7Ci0gICAgUHlfWERFQ1JFRihzZWNvbmQpOwotICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX0ZpbmlzaCgmd3JpdGVyKTsKKyAgICBQeV9ERUNSRUYoY3R4LmZtdHN0cik7CisgICAgcmV0dXJuIF9QeVVuaWNvZGVXcml0ZXJfRmluaXNoKCZjdHgud3JpdGVyKTsKIAogICBvbkVycm9yOgotICAgIFB5X0RFQ1JFRih1Zm9ybWF0KTsKLSAgICBQeV9YREVDUkVGKHRlbXApOwotICAgIFB5X1hERUNSRUYoc2Vjb25kKTsKLSAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJndyaXRlcik7Ci0gICAgaWYgKGFyZ3Nfb3duZWQpIHsKLSAgICAgICAgUHlfREVDUkVGKGFyZ3MpOworICAgIFB5X0RFQ1JFRihjdHguZm10c3RyKTsKKyAgICBfUHlVbmljb2RlV3JpdGVyX0RlYWxsb2MoJmN0eC53cml0ZXIpOworICAgIGlmIChjdHguYXJnc19vd25lZCkgeworICAgICAgICBQeV9ERUNSRUYoY3R4LmFyZ3MpOwogICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KQEAgLTE0MjY4LDcgKzE1MDMyLDcgQEAKIHZvaWQKIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKFB5T2JqZWN0ICoqcCkKIHsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcyA9ICpwOworICAgIFB5T2JqZWN0ICpzID0gKnA7CiAgICAgUHlPYmplY3QgKnQ7CiAjaWZkZWYgUHlfREVCVUcKICAgICBhc3NlcnQocyAhPSBOVUxMKTsKQEAgLTE0Mjk3LDEyICsxNTA2MSwxMiBAQAogICAgIHQgPSBQeURpY3RfR2V0SXRlbShpbnRlcm5lZCwgcyk7CiAgICAgUHlfRU5EX0FMTE9XX1JFQ1VSU0lPTgogCi0gICAgICAgIGlmICh0KSB7Ci0gICAgICAgICAgICBQeV9JTkNSRUYodCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYoKnApOwotICAgICAgICAgICAgKnAgPSB0OwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CisgICAgaWYgKHQpIHsKKyAgICAgICAgUHlfSU5DUkVGKHQpOworICAgICAgICBQeV9ERUNSRUYoKnApOworICAgICAgICAqcCA9IHQ7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBQeVRocmVhZFN0YXRlX0dFVCgpLT5yZWN1cnNpb25fY3JpdGljYWwgPSAxOwogICAgIGlmIChQeURpY3RfU2V0SXRlbShpbnRlcm5lZCwgcywgcykgPCAwKSB7CkBAIC0xNDYwNSw3ICsxNTM2OSw3IEBACiBpbnQKIFB5X1VOSUNPREVfc3RybmNtcChjb25zdCBQeV9VTklDT0RFICpzMSwgY29uc3QgUHlfVU5JQ09ERSAqczIsIHNpemVfdCBuKQogewotICAgIHJlZ2lzdGVyIFB5X1VOSUNPREUgdTEsIHUyOworICAgIFB5X1VOSUNPREUgdTEsIHUyOwogICAgIGZvciAoOyBuICE9IDA7IG4tLSkgewogICAgICAgICB1MSA9ICpzMTsKICAgICAgICAgdTIgPSAqczI7CmRpZmYgLS1naXQgYS9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmggYi9PYmplY3RzL3VuaWNvZGV0eXBlX2RiLmgKaW5kZXggNDZhOTJiYi4uMWZkYzA5MiAxMDA2NDQKLS0tIGEvT2JqZWN0cy91bmljb2RldHlwZV9kYi5oCisrKyBiL09iamVjdHMvdW5pY29kZXR5cGVfZGIuaApAQCAtMTU4OSw3ICsxNTg5LDcgQEAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDAsIDAsIAogICAgIDAsIDAsIDAsIDU1LCA1NSwgNTUsIDUsIDYsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDIxLCAyMSwgMjEsIAogICAgIDIxLCAyMSwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAKLSAgICAyNSwgMjUsIDI1LCA1LCAwLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAorICAgIDI1LCAyNSwgMjUsIDUsIDIxLCAwLCA1LCA1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDk2LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNywgOCwgCkBAIC0xODAxLDcgKzE4MDEsNyBAQAogICAgIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgNSwgNSwgNSwgOTYsIDUsIDUsIDUsIDUsIDU1LCAyNSwgMCwgMCwgNywgCiAgICAgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDAsIDAsIDAsIDAsIDAsIDAsIDI3LCAyNywgMjcsIDI3LCAyNywgCiAgICAgMjcsIDI3LCAyNywgMjcsIDI3LCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICAyNSwgMjUsIDI1LCAyLCAwLCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMCwgMCwgMCwgMCwgMCwgMCwgCisgICAgMjUsIDI1LCAyNSwgMjEsIDAsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDk2LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKQEAgLTE4MjgsNyArMTgyOCw3IEBACiAgICAgNywgOCwgOSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDEzMiwgMCwgMCwgMCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAotICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDE4LCAxOCwgMTgsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIAorICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAyNSwgMjUsIDE4LCAxOCwgMjUsIDAsIDAsIDUsIDUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIAogICAgIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgMTgsIDI1LCAxOCwgMjUsIApAQCAtMTkxNSwxMSArMTkxNSwxMSBAQAogICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDYsIDUsIDUsIDYsIDMsIDMsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMiwgNSwgNSwgCiAgICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMTgsIDE4LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKICAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAxOCwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgMiwgMjEsIAotICAgIDIxLCAyMSwgMjEsIDIxLCAwLCAwLCAwLCAwLCAwLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyNDUsIDk1LCAwLCAwLCAKKyAgICAyMSwgMjEsIDIxLCAyMSwgMCwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDIxLCAyMSwgMjEsIDI0NSwgOTUsIDAsIDAsIAogICAgIDI0NiwgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDUsIDUsIDUsIDUsIDUsIDk1LCAyNDUsIDI2LCAyMiwgMjMsIDI0NiwgCiAgICAgMjQ3LCAyNDgsIDI0OSwgMjUwLCAyNTEsIDUsIDUsIDUsIDUsIDUsIDAsIDk1LCA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAKICAgICA5NSwgOTUsIDk1LCA5NSwgOTUsIDk1LCAwLCAwLCAwLCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAKLSAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKKyAgICA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgCiAgICAgMjUsIDI1LCAyNSwgNiwgNiwgNiwgNiwgMjUsIDYsIDYsIDYsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIDI1LCAyNSwgMjUsIAogICAgIDI1LCAyNSwgMjUsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDUsIDUsIDExMywgNSwgNSwgCkBAIC0yNTkzLDEwICsyNTkzLDEwIEBACiAgICAgMCwgMCwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDI1MiwgMjUyLCAxNDEsIDE0MSwgMTQxLCAKICAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCiAgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAotICAgIDE0MSwgMTQxLCAxNDEsIDI1MiwgMjUyLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAKKyAgICAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgCisgICAgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIDE0MSwgMTQxLCAxNDEsIAogICAgIDE0MSwgMTQxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1LCA1LCA1LCA1LCAwLCAwLCAwLCAwLCAKICAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKICAgICA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCA1NSwgNTUsIDU1LCAKQEAgLTMzODAsNiArMzM4MCw3IEBACiAgICAgY2FzZSAweDEyNDM1OgogICAgIGNhc2UgMHgxMjQ0QToKICAgICBjYXNlIDB4MTI0NTA6CisgICAgY2FzZSAweDEyNDU2OgogICAgIGNhc2UgMHgxMjQ1OToKICAgICBjYXNlIDB4MUQzNjE6CiAgICAgY2FzZSAweDFEN0QwOgpAQCAtMzQyNyw2ICszNDI4LDggQEAKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDIwMDAwLjA7CiAgICAgY2FzZSAweDMyNTE6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSAyMS4wOworICAgIGNhc2UgMHgxMjQzMjoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDIxNjAwMC4wOwogICAgIGNhc2UgMHgzMjUyOgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgMjIuMDsKICAgICBjYXNlIDB4MzI1MzoKQEAgLTM1MzQsNiArMzUzNyw3IEBACiAgICAgY2FzZSAweDEyNDNCOgogICAgIGNhc2UgMHgxMjQ0QjoKICAgICBjYXNlIDB4MTI0NTE6CisgICAgY2FzZSAweDEyNDU3OgogICAgIGNhc2UgMHgxRDM2MjoKICAgICBjYXNlIDB4MUQ3RDE6CiAgICAgY2FzZSAweDFEN0RCOgpAQCAtMzcyMSw2ICszNzI1LDggQEAKICAgICAgICAgcmV0dXJuIChkb3VibGUpIDQyLjA7CiAgICAgY2FzZSAweDMyQjg6CiAgICAgICAgIHJldHVybiAoZG91YmxlKSA0My4wOworICAgIGNhc2UgMHgxMjQzMzoKKyAgICAgICAgcmV0dXJuIChkb3VibGUpIDQzMjAwMC4wOwogICAgIGNhc2UgMHgzMkI5OgogICAgICAgICByZXR1cm4gKGRvdWJsZSkgNDQuMDsKICAgICBjYXNlIDB4MzJCQToKQEAgLTQyNzEsNyArNDI3Nyw3IEBACiAvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwKICAqIHR5cGUgJ1dTJywgJ0InIG9yICdTJyBvciB0aGUgY2F0ZWdvcnkgJ1pzJywgMCBvdGhlcndpc2UuCiAgKi8KLWludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKQoraW50IF9QeVVuaWNvZGVfSXNXaGl0ZXNwYWNlKGNvbnN0IFB5X1VDUzQgY2gpCiB7CiAgICAgc3dpdGNoIChjaCkgewogICAgIGNhc2UgMHgwMDA5OgpAQCAtNDI4Nyw3ICs0MjkzLDYgQEAKICAgICBjYXNlIDB4MDA4NToKICAgICBjYXNlIDB4MDBBMDoKICAgICBjYXNlIDB4MTY4MDoKLSAgICBjYXNlIDB4MTgwRToKICAgICBjYXNlIDB4MjAwMDoKICAgICBjYXNlIDB4MjAwMToKICAgICBjYXNlIDB4MjAwMjoKQEAgLTQzMTMsNyArNDMxOCw3IEBACiAgKiBwcm9wZXJ0eSAnQksnLCAnQ1InLCAnTEYnIG9yICdOTCcgb3IgaGF2aW5nIGJpZGlyZWN0aW9uYWwKICAqIHR5cGUgJ0InLCAwIG90aGVyd2lzZS4KICAqLwotaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCkKK2ludCBfUHlVbmljb2RlX0lzTGluZWJyZWFrKGNvbnN0IFB5X1VDUzQgY2gpCiB7CiAgICAgc3dpdGNoIChjaCkgewogICAgIGNhc2UgMHgwMDBBOgpkaWZmIC0tZ2l0IGEvT2JqZWN0cy93ZWFrcmVmb2JqZWN0LmMgYi9PYmplY3RzL3dlYWtyZWZvYmplY3QuYwppbmRleCBiNDlkY2VlLi5kNGQ1MmU2IDEwMDY0NAotLS0gYS9PYmplY3RzL3dlYWtyZWZvYmplY3QuYworKysgYi9PYmplY3RzL3dlYWtyZWZvYmplY3QuYwpAQCAtMzM4LDYgKzMzOCwxMSBAQAogfQogCiAKK3N0YXRpYyBQeU1lbWJlckRlZiB3ZWFrcmVmX21lbWJlcnNbXSA9IHsKKyAgICB7Il9fY2FsbGJhY2tfXyIsIFRfT0JKRUNULCBvZmZzZXRvZihQeVdlYWtSZWZlcmVuY2UsIHdyX2NhbGxiYWNrKSwgUkVBRE9OTFl9LAorICAgIHtOVUxMfSAvKiBTZW50aW5lbCAqLworfTsKKwogUHlUeXBlT2JqZWN0CiBfUHlXZWFrcmVmX1JlZlR5cGUgPSB7CiAgICAgUHlWYXJPYmplY3RfSEVBRF9JTklUKCZQeVR5cGVfVHlwZSwgMCkKQEAgLTM2OSw3ICszNzQsNyBAQAogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXIqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2l0ZXJuZXh0Ki8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZXRob2RzKi8KLSAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KKyAgICB3ZWFrcmVmX21lbWJlcnMsICAgICAgICAgICAgLyp0cF9tZW1iZXJzKi8KICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyp0cF9nZXRzZXQqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2Jhc2UqLwogICAgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKnRwX2RpY3QqLwpAQCAtODk1LDExICs5MDAsOSBAQAogICAgIGlmICgqbGlzdCAhPSBOVUxMKSB7CiAgICAgICAgIFB5V2Vha1JlZmVyZW5jZSAqY3VycmVudCA9ICpsaXN0OwogICAgICAgICBQeV9zc2l6ZV90IGNvdW50ID0gX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQoY3VycmVudCk7Ci0gICAgICAgIGludCByZXN0b3JlX2Vycm9yID0gUHlFcnJfT2NjdXJyZWQoKSA/IDEgOiAwOwogICAgICAgICBQeU9iamVjdCAqZXJyX3R5cGUsICplcnJfdmFsdWUsICplcnJfdGI7CiAKLSAgICAgICAgaWYgKHJlc3RvcmVfZXJyb3IpCi0gICAgICAgICAgICBQeUVycl9GZXRjaCgmZXJyX3R5cGUsICZlcnJfdmFsdWUsICZlcnJfdGIpOworICAgICAgICBQeUVycl9GZXRjaCgmZXJyX3R5cGUsICZlcnJfdmFsdWUsICZlcnJfdGIpOwogICAgICAgICBpZiAoY291bnQgPT0gMSkgewogICAgICAgICAgICAgUHlPYmplY3QgKmNhbGxiYWNrID0gY3VycmVudC0+d3JfY2FsbGJhY2s7CiAKQEAgLTkxNyw4ICs5MjAsNyBAQAogCiAgICAgICAgICAgICB0dXBsZSA9IFB5VHVwbGVfTmV3KGNvdW50ICogMik7CiAgICAgICAgICAgICBpZiAodHVwbGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChyZXN0b3JlX2Vycm9yKQotICAgICAgICAgICAgICAgICAgICBQeUVycl9GZXRjaCgmZXJyX3R5cGUsICZlcnJfdmFsdWUsICZlcnJfdGIpOworICAgICAgICAgICAgICAgIF9QeUVycl9DaGFpbkV4Y2VwdGlvbnMoZXJyX3R5cGUsIGVycl92YWx1ZSwgZXJyX3RiKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKQEAgLTk0OSw3ICs5NTEsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKHR1cGxlKTsKICAgICAgICAgfQotICAgICAgICBpZiAocmVzdG9yZV9lcnJvcikKLSAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXJyX3R5cGUsIGVycl92YWx1ZSwgZXJyX3RiKTsKKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKyAgICAgICAgUHlFcnJfUmVzdG9yZShlcnJfdHlwZSwgZXJyX3ZhbHVlLCBlcnJfdGIpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fY3R5cGVzLmRzcCBiL1BDL1ZDNi9fY3R5cGVzLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5OGVhYy4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX2N0eXBlcy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMzEgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfY3R5cGVzIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9jdHlwZXMgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlcy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlcy5tYWsiIENGRz0iX2N0eXBlcyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfY3R5cGVzIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXMgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXMucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfY3R5cGVzIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9jdHlwZXMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fY3R5cGVzX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfY3R5cGVzIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9jdHlwZXMgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxiYWNrcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXHN0Z2RpY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fY3R5cGVzX3Rlc3QuZHNwIGIvUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZWIyMTcuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19jdHlwZXNfdGVzdC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9jdHlwZXNfdGVzdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fY3R5cGVzX3Rlc3QgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2N0eXBlc190ZXN0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfY3R5cGVzX3Rlc3QubWFrIiBDRkc9Il9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfY3R5cGVzX3Rlc3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2N0eXBlc190ZXN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2N0eXBlc190ZXN0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19jdHlwZXNfdGVzdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX2N0eXBlc190ZXN0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9jdHlwZXNfdGVzdCAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19lbGVtZW50dHJlZS5kc3AgYi9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGRjMGNkZC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX2VsZW1lbnR0cmVlLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9lbGVtZW50dHJlZSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX2VsZW1lbnR0cmVlLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfZWxlbWVudHRyZWUubWFrIiBDRkc9Il9lbGVtZW50dHJlZSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfZWxlbWVudHRyZWUgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX2VsZW1lbnR0cmVlIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9lbGVtZW50dHJlZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxNb2R1bGVzXGV4cGF0IiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvRCAiWE1MX05TIiAvRCAiWE1MX0RURCIgL0QgIkJZVEVPUkRFUj0xMjM0IiAvRCAiWE1MX0NPTlRFWFRfQllURVM9MTAyNCIgL0QgIlVTRV9QWUVYUEFUX0NBUEkiIC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX2VsZW1lbnR0cmVlLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX2VsZW1lbnR0cmVlIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9lbGVtZW50dHJlZSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCAiQllURU9SREVSPTEyMzQiIC9EICJYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IiAvRCAiVVNFX1BZRVhQQVRfQ0FQSSIgL0QgIlhNTF9TVEFUSUMiIC9EICJIQVZFX01FTU1PVkUiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDEwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fZWxlbWVudHRyZWVfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl9lbGVtZW50dHJlZSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfZWxlbWVudHRyZWUgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2VsZW1lbnR0cmVlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX21zaS5kc3AgYi9QQy9WQzYvX21zaS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2YTYxYmMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L19tc2kuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsOTkgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXNpIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9tc2kgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX21zaS5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX21zaS5tYWsiIENGRz0iX21zaSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfbXNpIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9tc2kgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfbXNpIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9tc2kgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfbXNpIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMWEwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19tc2kucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfbXNpIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXF9tc2kiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDFhMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fbXNpX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfbXNpIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9tc2kgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBDXF9tc2kuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcCBiL1BDL1ZDNi9fbXVsdGlwcm9jZXNzaW5nLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTFiODQ3MC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX211bHRpcHJvY2Vzc2luZy5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJfbXVsdGlwcm9jZXNzaW5nIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPV9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX211bHRpcHJvY2Vzc2luZy5tYWsiIENGRz0iX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfbXVsdGlwcm9jZXNzaW5nIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX211bHRpcHJvY2Vzc2luZy5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl9tdWx0aXByb2Nlc3NpbmcgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX211bHRpcHJvY2Vzc2luZyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiX0RFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3czJfMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxZDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX211bHRpcHJvY2Vzc2luZ19kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAiX211bHRpcHJvY2Vzc2luZyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfbXVsdGlwcm9jZXNzaW5nIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfbXVsdGlwcm9jZXNzaW5nXHNlbWFwaG9yZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1x3aW4zMl9mdW5jdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9fc29ja2V0LmRzcCBiL1BDL1ZDNi9fc29ja2V0LmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTVlZThmMi4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NvY2tldC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il9zb2NrZXQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3NvY2tldCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc29ja2V0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc29ja2V0Lm1hayIgQ0ZHPSJfc29ja2V0IC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9zb2NrZXQgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9zb2NrZXQiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF9zb2NrZXQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJOREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc29ja2V0LnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NvY2tldCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc29ja2V0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzMl8zMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZTFEMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fc29ja2V0X2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfc29ja2V0IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9zb2NrZXQgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3NxbGl0ZTMuZHNwIGIvUEMvVkM2L19zcWxpdGUzLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg2OTkzOC4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3NxbGl0ZTMuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTMxICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NxbGl0ZTMiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3NxbGl0ZTMgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3NxbGl0ZTMubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIl9zcWxpdGUzLm1hayIgQ0ZHPSJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIl9zcWxpdGUzIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl9zcWxpdGUzIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgTU9EVUxFX05BTUU9XCJzcWxpdGUzXCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XHNxbGl0ZTMubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxODAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vX3NxbGl0ZTMucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3FsaXRlMyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EIE1PRFVMRV9OQU1FPVwic3FsaXRlM1wiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTgwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL19zcWxpdGUzX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfc3FsaXRlMyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfc3FsaXRlMyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXGNvbm5lY3Rpb24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxzdGF0ZW1lbnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zc2wuZHNwIGIvUEMvVkM2L19zc2wuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOGJiOTkzLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc3NsLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDg5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3NzbCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRXh0ZXJuYWwgVGFyZ2V0IiAweDAxMDYNCi0NCi1DRkc9X3NzbCAtIFdpbjMyIERlYnVnDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3NsLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfc3NsLm1hayIgQ0ZHPSJfc3NsIC0gV2luMzIgRGVidWciDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIl9zc2wgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEV4dGVybmFsIFRhcmdldCIpDQotIU1FU1NBR0UgIl9zc2wgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBFeHRlcm5hbCBUYXJnZXQiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotDQotIUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIENtZF9MaW5lICJOTUFLRSAvZiBfc3NsLm1hayINCi0jIFBST1AgQkFTRSBSZWJ1aWxkX09wdCAiL2EiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0ZpbGUgIl9zc2wuZXhlIg0KLSMgUFJPUCBCQVNFIEJzY19OYW1lICJfc3NsLmJzYyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxfc3NsIg0KLSMgUFJPUCBDbWRfTGluZSAicHl0aG9uIGJ1aWxkX3NzbC5weSINCi0jIFBST1AgUmVidWlsZF9PcHQgIi1hIg0KLSMgUFJPUCBUYXJnZXRfRmlsZSAiX3NzbC5weWQiDQotIyBQUk9QIEJzY19OYW1lICIiDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIng4Ni10ZW1wLWRlYnVnXF9zc2wiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcX3NzbCINCi0jIFBST1AgQkFTRSBDbWRfTGluZSAiTk1BS0UgL2YgX3NzbC5tYWsiDQotIyBQUk9QIEJBU0UgUmVidWlsZF9PcHQgIi9hIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9GaWxlICJfc3NsX2QucHlkIg0KLSMgUFJPUCBCQVNFIEJzY19OYW1lICJfc3NsX2QuYnNjIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfc3NsIg0KLSMgUFJPUCBDbWRfTGluZSAicHl0aG9uX2QgLXUgYnVpbGRfc3NsLnB5IC1kIg0KLSMgUFJPUCBSZWJ1aWxkX09wdCAiLWEiDQotIyBQUk9QIFRhcmdldF9GaWxlICJfc3NsX2QucHlkIg0KLSMgUFJPUCBCc2NfTmFtZSAiIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJfc3NsIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl9zc2wgLSBXaW4zMiBEZWJ1ZyINCi0NCi0hSUYgICIkKENGRykiID09ICJfc3NsIC0gV2luMzIgUmVsZWFzZSINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiX3NzbCAtIFdpbjMyIERlYnVnIg0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3NzbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L19zc2wubWFrIGIvUEMvVkM2L19zc2wubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NzdhNjE0Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9fc3NsLm1haworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLQotIUlGREVGIERFQlVHCi1NT0RVTEU9X3NzbF9kLnB5ZAotVEVNUF9ESVI9eDg2LXRlbXAtZGVidWcvX3NzbAotQ0ZMQUdTPS9PZCAvWmkgL01EZCAvTERkIC9EREVCVUcgL0RfREVCVUcgL0RXSU4zMgotTEZMQUdTPS9ub2RlZmF1bHRsaWI6Im1zdmNydCIKLSFFTFNFCi1NT0RVTEU9X3NzbC5weWQKLVRFTVBfRElSPXg4Ni10ZW1wLXJlbGVhc2UvX3NzbAotQ0ZMQUdTPS9PeCAvTUQgL0xEIC9EV0lOMzIKLUxGTEFHUz0KLSFFTkRJRgotCi1JTkNMVURFUz0tSSAuLi8uLi9JbmNsdWRlIC1JIC4uIC1JICQoU1NMX0RJUikvaW5jMzIKLVNTTF9MSUJfRElSPSQoU1NMX0RJUikvb3V0MzIKLUxJQlM9Z2RpMzIubGliIHdzb2NrMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9saWJwYXRoOiQoU1NMX0xJQl9ESVIpIGxpYmVheTMyLmxpYiBzc2xlYXkzMi5saWIKLQotU09VUkNFPS4uLy4uL01vZHVsZXMvX3NzbC5jICQoU1NMX0xJQl9ESVIpL2xpYmVheTMyLmxpYiAkKFNTTF9MSUJfRElSKS9zc2xlYXkzMi5saWIKLQotJChNT0RVTEUpOiAkKFNPVVJDRSkgLi4vKi5oIC4uLy4uL0luY2x1ZGUvKi5oCi0gICAgQGlmIG5vdCBleGlzdCAiJChURU1QX0RJUikvLiIgbWtkaXIgIiQoVEVNUF9ESVIpIgotICAgIGNsIC9ub2xvZ28gJChTT1VSQ0UpICQoQ0ZMQUdTKSAvRm8kKFRFTVBfRElSKVwkKi5vYmogJChJTkNMVURFUykgL2xpbmsgL291dDokKE1PRFVMRSkgJChMSUJTKSAkKExGTEFHUykKZGlmZiAtLWdpdCBhL1BDL1ZDNi9fdGVzdGNhcGkuZHNwIGIvUEMvVkM2L190ZXN0Y2FwaS5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlYWEyNWEuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L190ZXN0Y2FwaS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Il90ZXN0Y2FwaSIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1fdGVzdGNhcGkgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3Rlc3RjYXBpLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGVzdGNhcGkubWFrIiBDRkc9Il90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJfdGVzdGNhcGkgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3Rlc3RjYXBpIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiX3Rlc3RjYXBpIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXF90ZXN0Y2FwaSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRjAwMDAiIC9kbGwgL21hY2hpbmU6STM4NiAvb3V0OiIuL190ZXN0Y2FwaS5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl90ZXN0Y2FwaSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfdGVzdGNhcGkiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1pJIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUxRjAwMDAiIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9fdGVzdGNhcGlfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl90ZXN0Y2FwaSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJfdGVzdGNhcGkgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvX3RraW50ZXIuZHNwIGIvUEMvVkM2L190a2ludGVyLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ2OWY1OS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvX3RraW50ZXIuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMTAzICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0iX3RraW50ZXIiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9X3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJfdGtpbnRlci5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiX3RraW50ZXIubWFrIiBDRkc9Il90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiX3RraW50ZXIgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJfdGtpbnRlciINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi5cLi5cLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJfdGtpbnRlciAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xfdGtpbnRlciINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXC4uXHRjbHRrXGluY2x1ZGUiIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJXSVRIX0FQUElOSVQiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cdGNsdGtcbGliXHRrODVnLmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODVnLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTkwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190a2ludGVyX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIldJVEhfQVBQSU5JVCIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGs4NS5saWIgLi5cLi5cLi5cdGNsdGtcbGliXHRjbDg1LmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB1c2VyMzIubGliIGtlcm5lbDMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMTkwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL190a2ludGVyLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIl90a2ludGVyIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIl90a2ludGVyIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF90a2ludGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9idWlsZF9zc2wucHkgYi9QQy9WQzYvYnVpbGRfc3NsLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NWFmMDg0Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9idWlsZF9zc2wucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyMjggKzAsMCBAQAotIyBTY3JpcHQgZm9yIGJ1aWxkaW5nIHRoZSBfc3NsIG1vZHVsZSBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIF9zc2wucHlkIGl0c2VsZi4KLQotIyBUSEVPUkVUSUNBTExZLCB5b3UgY2FuOgotIyAqIFVucGFjayB0aGUgbGF0ZXN0IFNTTCByZWxlYXNlIG9uZSBsZXZlbCBhYm92ZSB5b3VyIG1haW4gUHl0aG9uIHNvdXJjZQotIyAgIGRpcmVjdG9yeS4gIEl0IGlzIGxpa2VseSB5b3Ugd2lsbCBhbHJlYWR5IGZpbmQgdGhlIHpsaWIgbGlicmFyeSBhbmQKLSMgICBhbnkgb3RoZXIgZXh0ZXJuYWwgcGFja2FnZXMgdGhlcmUuCi0jICogSW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgaXMgc29tZXdoZXJlIG9uIHlvdXIgcGF0aC4KLSMgKiBSdW4gdGhpcyBzY3JpcHQgZnJvbSB0aGUgUEMvVkM2IGRpcmVjdG9yeS4KLSMKLSMgaXQgc2hvdWxkIGNvbmZpZ3VyZSBhbmQgYnVpbGQgU1NMLCB0aGVuIGJ1aWxkIHRoZSBzc2wgUHl0aG9uIGV4dGVuc2lvbgotIyB3aXRob3V0IGludGVydmVudGlvbi4KLQotIyBNb2RpZmllZCBieSBDaHJpc3RpYW4gSGVpbWVzCi0jIE5vdyB0aGlzIHNjcmlwdCBzdXBwb3J0cyBwcmUtZ2VuZXJhdGVkIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCi0jIERldmVsb3BlcnMgZG9uJ3QgbmVlZCBhbiBpbnN0YWxsYXRpb24gb2YgUGVybCBhbnltb3JlIHRvIGJ1aWxkIFB5dGhvbi4gQSBzdm4KLSMgY2hlY2tvdXQgZnJvbSBvdXIgc3ZuIHJlcG9zaXRvcnkgaXMgZW5vdWdoLgotCi1pbXBvcnQgb3MsIHN5cywgcmUsIHNodXRpbAotCi0jIEZpbmQgYWxsICJmb28uZXhlIiBmaWxlcyBvbiB0aGUgUEFUSC4KLWRlZiBmaW5kX2FsbF9vbl9wYXRoKGZpbGVuYW1lLCBleHRyYXMgPSBOb25lKToKLSAgICBlbnRyaWVzID0gb3MuZW52aXJvblsiUEFUSCJdLnNwbGl0KG9zLnBhdGhzZXApCi0gICAgcmV0ID0gW10KLSAgICBmb3IgcCBpbiBlbnRyaWVzOgotICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmbmFtZSkgYW5kIGZuYW1lIG5vdCBpbiByZXQ6Ci0gICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIGlmIGV4dHJhczoKLSAgICAgICAgZm9yIHAgaW4gZXh0cmFzOgotICAgICAgICAgICAgZm5hbWUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKHAsIGZpbGVuYW1lKSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgICAgICByZXQuYXBwZW5kKGZuYW1lKQotICAgIHJldHVybiByZXQKLQotIyBGaW5kIGEgc3VpdGFibGUgUGVybCBpbnN0YWxsYXRpb24gZm9yIE9wZW5TU0wuCi0jIGN5Z3dpbiBwZXJsIGRvZXMgKm5vdCogd29yay4gIEFjdGl2ZVBlcmwgZG9lcy4KLSMgQmVpbmcgYSBQZXJsIGR1bW15LCB0aGUgc2ltcGxlc3Qgd2F5IEkgY2FuIGNoZWNrIGlzIGlmIHRoZSAiV2luMzIiIHBhY2thZ2UKLSMgaXMgYXZhaWxhYmxlLgotZGVmIGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKToKLSAgICBmb3IgcGVybCBpbiBwZXJsczoKLSAgICAgICAgZmggPSBvcy5wb3BlbignIiVzIiAtZSAidXNlIFdpbjMyOyInICUgcGVybCkKLSAgICAgICAgZmgucmVhZCgpCi0gICAgICAgIHJjID0gZmguY2xvc2UoKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIHJldHVybiBwZXJsCi0gICAgcHJpbnQoIkNhbiBub3QgZmluZCBhIHN1aXRhYmxlIFBFUkw6IikKLSAgICBpZiBwZXJsczoKLSAgICAgICAgcHJpbnQoIiB0aGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IikKLSAgICAgICAgZm9yIHAgaW4gcGVybHM6Ci0gICAgICAgICAgICBwcmludCgiICIsIHApCi0gICAgICAgIHByaW50KCIgTm9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhcHBlYXIgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIE9wZW5TU0wiKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCi0gICAgcHJpbnQoIiBQbGVhc2UgaW5zdGFsbCBBY3RpdmVQZXJsIGFuZCBlbnN1cmUgaXQgYXBwZWFycyBvbiB5b3VyIHBhdGgiKQotICAgIHJldHVybiBOb25lCi0KLSMgTG9jYXRlIHRoZSBiZXN0IFNTTCBkaXJlY3RvcnkgZ2l2ZW4gYSBmZXcgcm9vdHMgdG8gbG9vayBpbnRvLgotZGVmIGZpbmRfYmVzdF9zc2xfZGlyKHNvdXJjZXMpOgotICAgIGNhbmRpZGF0ZXMgPSBbXQotICAgIGZvciBzIGluIHNvdXJjZXM6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICAgICMgbm90ZTogZG8gbm90IGFic3BhdGggczsgdGhlIGJ1aWxkIHdpbGwgZmFpbCBpZiBhbnkKLSAgICAgICAgICAgICMgaGlnaGVyIHVwIGRpcmVjdG9yeSBuYW1lIGhhcyBzcGFjZXMgaW4gaXQuCi0gICAgICAgICAgICBmbmFtZXMgPSBvcy5saXN0ZGlyKHMpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKLSAgICAgICAgICAgIGZuYW1lcyA9IFtdCi0gICAgICAgIGZvciBmbmFtZSBpbiBmbmFtZXM6Ci0gICAgICAgICAgICBmcW4gPSBvcy5wYXRoLmpvaW4ocywgZm5hbWUpCi0gICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZxbikgYW5kIGZuYW1lLnN0YXJ0c3dpdGgoIm9wZW5zc2wtIik6Ci0gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoZnFuKQotICAgICMgTm93IHdlIGhhdmUgYWxsIHRoZSBjYW5kaWRhdGVzLCBsb2NhdGUgdGhlIGJlc3QuCi0gICAgYmVzdF9wYXJ0cyA9IFtdCi0gICAgYmVzdF9uYW1lID0gTm9uZQotICAgIGZvciBjIGluIGNhbmRpZGF0ZXM6Ci0gICAgICAgIHBhcnRzID0gcmUuc3BsaXQoIlsuLV0iLCBvcy5wYXRoLmJhc2VuYW1lKGMpKVsxOl0KLSAgICAgICAgIyBlZyAtIG9wZW5zc2wtMC45LjctYmV0YTEgLSBpZ25vcmUgYWxsICJiZXRhIiBvciBhbnkgb3RoZXIgcXVhbGlmaWVycwotICAgICAgICBpZiBsZW4ocGFydHMpID49IDQ6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBpZiBwYXJ0cyA+IGJlc3RfcGFydHM6Ci0gICAgICAgICAgICBiZXN0X3BhcnRzID0gcGFydHMKLSAgICAgICAgICAgIGJlc3RfbmFtZSA9IGMKLSAgICBpZiBiZXN0X25hbWUgaXMgbm90IE5vbmU6Ci0gICAgICAgIHByaW50KCJGb3VuZCBhbiBTU0wgZGlyZWN0b3J5IGF0ICclcyciICUgKGJlc3RfbmFtZSwpKQotICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCJDb3VsZCBub3QgZmluZCBhbiBTU0wgZGlyZWN0b3J5IGluICclcyciICUgKHNvdXJjZXMsKSkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gYmVzdF9uYW1lCi0KLWRlZiBmaXhfbWFrZWZpbGUobWFrZWZpbGUpOgotICAgICIiIkZpeCBzb21lIHN0dWZmIGluIGFsbCBtYWtlZmlsZXMKLSAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpOgotICAgICAgICByZXR1cm4KLSAgICB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbjoKLSAgICAgICAgbGluZXMgPSBmaW4ucmVhZGxpbmVzKCkKLSAgICB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBFUkw9Iik6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ1A9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJDUD1jb3B5XG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk1LRElSPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiTUtESVI9bWtkaXJcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ0ZMQUc9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIGZvciBhbGdvIGluICgiUkM1IiwgIk1EQzIiLCAiSURFQSIpOgotICAgICAgICAgICAgICAgICAgICBub2FsZ28gPSAiIC1ET1BFTlNTTF9OT18lcyIgJSBhbGdvCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vYWxnbyBub3QgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgbm9hbGdvCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnXG4nCi0gICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBwcmludCgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUpCi0gICAgb3Muc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAiK2NvbmZpZ3VyZSkKLSAgICBwcmludChkb19zY3JpcHQpCi0gICAgb3Muc3lzdGVtKGRvX3NjcmlwdCkKLQotZGVmIGNtcChmMSwgZjIpOgotICAgIGJ1ZnNpemUgPSAxMDI0ICogOAotICAgIHdpdGggb3BlbihmMSwgJ3JiJykgYXMgZnAxLCBvcGVuKGYyLCAncmInKSBhcyBmcDI6Ci0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAgICBiMSA9IGZwMS5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBiMiA9IGZwMi5yZWFkKGJ1ZnNpemUpCi0gICAgICAgICAgICBpZiBiMSAhPSBiMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAgICAgICAgICAgIGlmIG5vdCBiMToKLSAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQotCi1kZWYgY29weShzcmMsIGRzdCk6Ci0gICAgaWYgb3MucGF0aC5pc2ZpbGUoZHN0KSBhbmQgY21wKHNyYywgZHN0KToKLSAgICAgICAgcmV0dXJuCi0gICAgc2h1dGlsLmNvcHkoc3JjLCBkc3QpCi0KLWRlZiBtYWluKCk6Ci0gICAgZGVidWcgPSAiLWQiIGluIHN5cy5hcmd2Ci0gICAgYnVpbGRfYWxsID0gIi1hIiBpbiBzeXMuYXJndgotICAgIGlmIDE6ICMgV2luMzIKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19uYXNtIgotICAgICAgICBtYWtlZmlsZT0ibXNcXG50Lm1hayIKLSAgICAgICAgbTMyID0gbWFrZWZpbGUKLSAgICAgICAgZGlyc3VmZml4ID0gIjMyIgotICAgIGNvbmZpZ3VyZSArPSAiIG5vLWlkZWEgbm8tcmM1IG5vLW1kYzIiCi0gICAgbWFrZV9mbGFncyA9ICIiCi0gICAgaWYgYnVpbGRfYWxsOgotICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgotICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgotICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybDoKLSAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIikKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIFBDL1ZDNiAtIGllLCBzYW1lIHBsYWNlIHpsaWIgZXRjIGFsbCBsaXZlLgotICAgIHNzbF9kaXIgPSBmaW5kX2Jlc3Rfc3NsX2RpcigoIi4uXFwuLlxcLi4iLCkpCi0gICAgaWYgc3NsX2RpciBpcyBOb25lOgotICAgICAgICBzeXMuZXhpdCgxKQotCi0gICAgb2xkX2NkID0gb3MuZ2V0Y3dkKCkKLSAgICB0cnk6Ci0gICAgICAgIG9zLmNoZGlyKHNzbF9kaXIpCi0gICAgICAgICMgSWYgdGhlIHNzbCBtYWtlZmlsZXMgZG8gbm90IGV4aXN0LCB3ZSBpbnZva2UgUGVybCB0byBnZW5lcmF0ZSB0aGVtLgotICAgICAgICAjIER1ZSB0byBhIGJ1ZyBpbiB0aGlzIHNjcmlwdCwgdGhlIG1ha2VmaWxlIHNvbWV0aW1lcyBlbmRlZCB1cCBlbXB0eQotICAgICAgICAjIEZvcmNlIGEgcmVnZW5lcmF0aW9uIGlmIGl0IGlzLgotICAgICAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpIG9yIG9zLnBhdGguZ2V0c2l6ZShtYWtlZmlsZSk9PTA6Ci0gICAgICAgICAgICBpZiBwZXJsIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgcHJpbnQoIlBlcmwgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlIG1ha2VmaWxlcyEiKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICAgICAgICAgIHByaW50KCJDcmVhdGluZyB0aGUgbWFrZWZpbGVzLi4uIikKLSAgICAgICAgICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgICAgICAgICAgIyBQdXQgb3VyIHdvcmtpbmcgUGVybCBhdCB0aGUgZnJvbnQgb2Ygb3VyIHBhdGgKLSAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXSA9IG9zLnBhdGguZGlybmFtZShwZXJsKSArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLnBhdGhzZXAgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0KLSAgICAgICAgICAgIHJ1bl9jb25maWd1cmUoY29uZmlndXJlLCBkb19zY3JpcHQpCi0gICAgICAgICAgICBpZiBkZWJ1ZzoKLSAgICAgICAgICAgICAgICBwcmludCgiT3BlblNTTCBkZWJ1ZyBidWlsZHMgYXJlbid0IHN1cHBvcnRlZC4iKQotICAgICAgICAgICAgI2lmIGFyY2g9PSJ4ODYiIGFuZCBkZWJ1ZzoKLSAgICAgICAgICAgICMgICAgIyB0aGUgZG9fbWFzbSBzY3JpcHQgaW4gb3BlbnNzbCBkb2Vzbid0IGdlbmVyYXRlIGEgZGVidWcKLSAgICAgICAgICAgICMgICAgIyBidWlsZCBtYWtlZmlsZSBzbyB3ZSBnZW5lcmF0ZSBpdCBoZXJlOgotICAgICAgICAgICAgIyAgICBvcy5zeXN0ZW0oInBlcmwgdXRpbFxtazFtZi5wbCBkZWJ1ZyAiK2NvbmZpZ3VyZSsiID4iK21ha2VmaWxlKQotCi0gICAgICAgICAgICBmaXhfbWFrZWZpbGUobWFrZWZpbGUpCi0gICAgICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mLmgiLCByImNyeXB0b1xidWlsZGluZl8lcy5oIiAlIGFyY2gpCi0gICAgICAgICAgICBjb3B5KHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiLCByImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gpCi0KLSAgICAgICAgIyBJZiB0aGUgYXNzZW1ibGVyIGZpbGVzIGRvbid0IGV4aXN0IGluIHRtcFhYLCBjb3B5IHRoZW0gdGhlcmUKLSAgICAgICAgaWYgcGVybCBpcyBOb25lIGFuZCBvcy5wYXRoLmV4aXN0cygiYXNtIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCJ0bXAiK2RpcnN1ZmZpeCk6Ci0gICAgICAgICAgICAgICAgb3MubWtkaXIoInRtcCIrZGlyc3VmZml4KQotICAgICAgICAgICAgZm9yIGYgaW4gb3MubGlzdGRpcigiYXNtIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIGlmIG5vdCBmLmVuZHN3aXRoKCIuYXNtIik6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUociJ0bXAlc1wlcyIgJSAoZGlyc3VmZml4LCBmKSk6IGNvbnRpbnVlCi0gICAgICAgICAgICAgICAgc2h1dGlsLmNvcHkociJhc20lc1wlcyIgJSAoZGlyc3VmZml4LCBmKSwgInRtcCIrZGlyc3VmZml4KQotCi0gICAgICAgICMgTm93IHJ1biBtYWtlLgotICAgICAgICBjb3B5KHIiY3J5cHRvXGJ1aWxkaW5mXyVzLmgiICUgYXJjaCwgciJjcnlwdG9cYnVpbGRpbmYuaCIpCi0gICAgICAgIGNvcHkociJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xvcGVuc3NsY29uZi5oIikKLQotICAgICAgICAjbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyBQRVJMPVwiJXNcIiAtZiBcIiVzXCIiICUocGVybCwgbWFrZWZpbGUpCi0gICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gLWYgXCIlc1wiIiAlIG1ha2VmaWxlCi0gICAgICAgIHByaW50KCJFeGVjdXRpbmcgc3NsIG1ha2VmaWxlczoiLCBtYWtlQ29tbWFuZCkKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIHByaW50KCJFeGVjdXRpbmcgIittYWtlZmlsZSsiIGZhaWxlZCIpCi0gICAgICAgICAgICBwcmludChyYykKLSAgICAgICAgICAgIHN5cy5leGl0KHJjKQotICAgIGZpbmFsbHk6Ci0gICAgICAgIG9zLmNoZGlyKG9sZF9jZCkKLSAgICAjIEFuZCBmaW5hbGx5LCB3ZSBjYW4gYnVpbGQgdGhlIF9zc2wgbW9kdWxlIGl0c2VsZiBmb3IgUHl0aG9uLgotICAgIGRlZnMgPSAiU1NMX0RJUj0lcyIgJSAoc3NsX2RpciwpCi0gICAgaWYgZGVidWc6Ci0gICAgICAgIGRlZnMgPSBkZWZzICsgIiAiICsgIkRFQlVHPTEiCi0gICAgcmMgPSBvcy5zeXN0ZW0oJ25tYWtlIC9ub2xvZ28gLWYgX3NzbC5tYWsgJyArIGRlZnMgKyAiICIgKyBtYWtlX2ZsYWdzKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZDNi9idWlsZF90a2ludGVyLnB5IGIvUEMvVkM2L2J1aWxkX3RraW50ZXIucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU1Y2E5MmMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L2J1aWxkX3RraW50ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4MSArMCwwIEBACi1pbXBvcnQgb3MKLWltcG9ydCBzeXMKLWltcG9ydCBzdWJwcm9jZXNzCi0KLVRDTF9NQUpPUiA9IDgKLVRDTF9NSU5PUiA9IDUKLVRDTF9QQVRDSCA9IDIKLQotVElYX01BSk9SID0gOAotVElYX01JTk9SID0gNAotVElYX1BBVENIID0gMwotCi1kZWYgYWJzcGF0aChuYW1lKToKLSAgICBwYXIgPSBvcy5wYXRoLnBhcmRpcgotICAgIHJldHVybiBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKF9fZmlsZV9fLCBwYXIsIHBhciwgcGFyLCBwYXIsIG5hbWUpKQotCi1UQ0xfRElSID0gYWJzcGF0aCgidGNsJWQuJWQuJWQiICUgKFRDTF9NQUpPUiwgVENMX01JTk9SLCBUQ0xfUEFUQ0gpKQotVEtfRElSICA9IGFic3BhdGgoInRrJWQuJWQuJWQiICAlIChUQ0xfTUFKT1IsIFRDTF9NSU5PUiwgVENMX1BBVENIKSkKLVRJWF9ESVIgPSBhYnNwYXRoKCJ0aXglZC4lZC4lZCIgJSAoVElYX01BSk9SLCBUSVhfTUlOT1IsIFRJWF9QQVRDSCkpCi1PVVRfRElSID0gYWJzcGF0aCgidGNsdGsiKQotCi1kZWYgaGF2ZV9hcmdzKCphKToKLSAgICByZXR1cm4gYW55KHMgaW4gc3lzLmFyZ3ZbMTpdIGZvciBzIGluIGEpCi0KLWRlZiBlbnRlcihkaXIpOgotICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihkaXIsICJ3aW4iKSkKLQotZGVmIG1haW4oKToKLSAgICBkZWJ1ZyA9IGhhdmVfYXJncygiLWQiLCAiLS1kZWJ1ZyIpCi0gICAgY2xlYW4gPSBoYXZlX2FyZ3MoImNsZWFuIikKLSAgICBpbnN0YWxsID0gaGF2ZV9hcmdzKCJpbnN0YWxsIikKLSAgICB0Y2wgPSBoYXZlX2FyZ3MoInRjbCIpCi0gICAgdGsgPSBoYXZlX2FyZ3MoInRrIikKLSAgICB0aXggPSBoYXZlX2FyZ3MoInRpeCIpCi0gICAgaWYgbm90KHRjbCkgYW5kIG5vdCh0aykgYW5kIG5vdCh0aXgpOgotICAgICAgICB0Y2wgPSB0ayA9IHRpeCA9IFRydWUKLQotICAgIGRlZiBubWFrZShtYWtlZmlsZSwgKmEpOgotICAgICAgICBhcmdzID0gWyJubWFrZSIsICIvbm9sb2dvIiwgIi9mIiwgbWFrZWZpbGUsICJERUJVRz0lZCIgJSBkZWJ1Z10KLSAgICAgICAgYXJncy5leHRlbmQoYSkKLSAgICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKGFyZ3MpCi0KLSAgICBpZiB0Y2w6Ci0gICAgICAgIGVudGVyKFRDTF9ESVIpCi0gICAgICAgIGRlZiBubWFrZV90Y2woKmEpOgotICAgICAgICAgICAgbm1ha2UoIm1ha2VmaWxlLnZjIiwgKmEpCi0gICAgICAgIGlmIGNsZWFuOgotICAgICAgICAgICAgbm1ha2VfdGNsKCJjbGVhbiIpCi0gICAgICAgIGVsaWYgaW5zdGFsbDoKLSAgICAgICAgICAgIG5tYWtlX3RjbCgiaW5zdGFsbCIsICJJTlNUQUxMRElSPSIgKyBPVVRfRElSKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm1ha2VfdGNsKCkKLQotICAgIGlmIHRrOgotICAgICAgICBlbnRlcihUS19ESVIpCi0gICAgICAgIGRlZiBubWFrZV90aygqYSk6Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiVENMRElSPSIgKyBUQ0xfRElSLCAqYSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZV90aygiY2xlYW4iKQotICAgICAgICBlbGlmIGluc3RhbGw6Ci0gICAgICAgICAgICBubWFrZV90aygiaW5zdGFsbCIsICJJTlNUQUxMRElSPSIgKyBPVVRfRElSKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm1ha2VfdGsoKQotCi0gICAgaWYgdGl4OgotICAgICAgICBlbnRlcihUSVhfRElSKQotICAgICAgICBkZWYgbm1ha2VfdGl4KCphKToKLSAgICAgICAgICAgIG5tYWtlKCJweXRob24ubWFrIiwKLSAgICAgICAgICAgICAgICAgICJUQ0xfTUFKT1I9JWQiICUgVENMX01BSk9SLAotICAgICAgICAgICAgICAgICAgIlRDTF9NSU5PUj0lZCIgJSBUQ0xfTUlOT1IsCi0gICAgICAgICAgICAgICAgICAiVENMX1BBVENIPSVkIiAlIFRDTF9QQVRDSCwKLSAgICAgICAgICAgICAgICAgICJNQUNISU5FPUlYODYiLCAqYSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZV90aXgoImNsZWFuIikKLSAgICAgICAgZWxpZiBpbnN0YWxsOgotICAgICAgICAgICAgbm1ha2VfdGl4KCJpbnN0YWxsIiwgIklOU1RBTExfRElSPSIgKyBPVVRfRElSKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgbm1ha2VfdGl4KCkKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZDNi9iejIuZHNwIGIvUEMvVkM2L2J6Mi5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1MmNiYWQuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L2J6Mi5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9ImJ6MiIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1iejIgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAiYnoyLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJiejIubWFrIiBDRkc9ImJ6MiAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJiejIgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAiYnoyIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiYnoyIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gImJ6MiAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXGJ6MiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlwuLlxiemlwMi0xLjAuNiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiAuLlwuLlwuLlxiemlwMi0xLjAuNlxsaWJiejIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxNzAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyLnB5ZCINCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUgL25vZGVmYXVsdGxpYg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJiejIgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcYnoyIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvSSAiLi5cLi5cLi5cYnppcDItMS4wLjYiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgLi5cLi5cLi5cYnppcDItMS4wLjZcbGliYnoyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTcwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJtc3ZjcnQiIC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vYnoyX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJiejIgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAiYnoyIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGJ6Mm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwIGIvUEMvVkM2L21ha2VfdmVyc2lvbmluZm8uZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNzM1ZTEyLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9tYWtlX3ZlcnNpb25pbmZvLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9Im1ha2VfdmVyc2lvbmluZm8iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KLQ0KLUNGRz1tYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgUmVsZWFzZQ0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiLg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFlvdSBjYW4gc3BlY2lmeSBhIGNvbmZpZ3VyYXRpb24gd2hlbiBydW5uaW5nIE5NQUtFDQotIU1FU1NBR0UgYnkgZGVmaW5pbmcgdGhlIG1hY3JvIENGRyBvbiB0aGUgY29tbWFuZCBsaW5lLiBGb3IgZXhhbXBsZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibWFrZV92ZXJzaW9uaW5mby5tYWsiIENGRz0ibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgUG9zc2libGUgY2hvaWNlcyBmb3IgY29uZmlndXJhdGlvbiBhcmU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxtYWtlX3ZlcnNpb25pbmZvIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotIyBCZWdpbiBDdXN0b20gQnVpbGQNCi1JbnB1dFBhdGg9LlxtYWtlX3ZlcnNpb25pbmZvLmV4ZQ0KLVNPVVJDRT0iJChJbnB1dFBhdGgpIg0KLQ0KLSIuLlxweXRob25udF9yYy5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KLQkuXG1ha2VfdmVyc2lvbmluZm8uZXhlID4uLlxweXRob25udF9yYy5oDQotDQotIyBFbmQgQ3VzdG9tIEJ1aWxkDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIm1ha2VfdmVyc2lvbmluZm8gLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcbWFrZV92ZXJzaW9uaW5mbyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWQwMDAwMDAiIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL21ha2VfdmVyc2lvbmluZm9fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0jIEJlZ2luIEN1c3RvbSBCdWlsZA0KLUlucHV0UGF0aD0uXG1ha2VfdmVyc2lvbmluZm9fZC5leGUNCi1TT1VSQ0U9IiQoSW5wdXRQYXRoKSINCi0NCi0iLi5ccHl0aG9ubnRfcmNfZC5oIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIiAiJChPVVRESVIpIg0KLQkuXG1ha2VfdmVyc2lvbmluZm9fZC5leGUgPi4uXHB5dGhvbm50X3JjX2QuaA0KLQ0KLSMgRW5kIEN1c3RvbSBCdWlsZA0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAibWFrZV92ZXJzaW9uaW5mbyAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJtYWtlX3ZlcnNpb25pbmZvIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxtYWtlX3ZlcnNpb25pbmZvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvcGNidWlsZC5kc3cgYi9QQy9WQzYvcGNidWlsZC5kc3cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg3YjJlYmMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3BjYnVpbGQuZHN3CisrKyAvZGV2L251bGwKQEAgLTEsMzA2ICswLDAgQEAKLU1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFdvcmtzcGFjZSBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyBXQVJOSU5HOiBETyBOT1QgRURJVCBPUiBERUxFVEUgVEhJUyBXT1JLU1BBQ0UgRklMRSENCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9jdHlwZXMiPSIuXF9jdHlwZXMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9jdHlwZXNfdGVzdCI9Ii5cX2N0eXBlc190ZXN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9lbGVtZW50dHJlZSI9Ii5cX2VsZW1lbnR0cmVlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9tc2kiPSIuXF9tc2kuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9tdWx0aXByb2Nlc3NpbmciPSIuXF9tdWx0aXByb2Nlc3NpbmcuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zb2NrZXQiPSIuXF9zb2NrZXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl9zcWxpdGUzIj0iLlxfc3FsaXRlMy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfc3NsIj0iLlxfc3NsLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbg0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHc5eHBvcGVuDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIl90ZXN0Y2FwaSI9Ii5cX3Rlc3RjYXBpLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJfdGtpbnRlciI9Ii5cX3RraW50ZXIuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImJ6MiI9Ii5cYnoyLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogIm1ha2VfdmVyc2lvbmluZm8iPSIuXG1ha2VfdmVyc2lvbmluZm8uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHlleHBhdCI9Ii5ccHlleHBhdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgICBQcm9qZWN0X0RlcF9OYW1lIHB5dGhvbmNvcmUNCi0gICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAicHl0aG9uIj0iLlxweXRob24uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbmNvcmUiPSIuXHB5dGhvbmNvcmUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBtYWtlX3ZlcnNpb25pbmZvDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInB5dGhvbnciPSIuXHB5dGhvbncuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNlbGVjdCI9Ii5cc2VsZWN0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICAgIFByb2plY3RfRGVwX05hbWUgcHl0aG9uY29yZQ0KLSAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ1bmljb2RlZGF0YSI9Ii5cdW5pY29kZWRhdGEuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInc5eHBvcGVuIj0iLlx3OXhwb3Blbi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJ3aW5zb3VuZCI9Ii5cd2luc291bmQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gICAgUHJvamVjdF9EZXBfTmFtZSBweXRob25jb3JlDQotICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotR2xvYmFsOg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08Mz4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotDQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5ZXhwYXQuZHNwIGIvUEMvVkM2L3B5ZXhwYXQuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjFjOWVmLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weWV4cGF0LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5ZXhwYXQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9cHlleHBhdCAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5ZXhwYXQubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5ZXhwYXQubWFrIiBDRkc9InB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweWV4cGF0IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweWV4cGF0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5ZXhwYXQgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHlleHBhdC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5ZXhwYXQgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHlleHBhdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXE1vZHVsZXNcZXhwYXQiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIkhBVkVfRVhQQVRfSCIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9EICJYTUxfTlMiIC9EICJYTUxfRFREIiAvRCBCWVRFT1JERVI9MTIzNCAvRCBYTUxfQ09OVEVYVF9CWVRFUz0xMDI0IC9EICJYTUxfU1RBVElDIiAvRCAiSEFWRV9NRU1NT1ZFIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHlleHBhdF9kLnB5ZCIgL3BkYnR5cGU6c2VwdA0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAicHlleHBhdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJweWV4cGF0IC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWxyb2xlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9weXRob24uZHNwIGIvUEMvVkM2L3B5dGhvbi5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOGI3NzIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3B5dGhvbi5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSwxMDAgKzAsMCBAQAotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBQcm9qZWN0IEZpbGUgLSBOYW1lPSJweXRob24iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIENvbnNvbGUgQXBwbGljYXRpb24iIDB4MDEwMw0KLQ0KLUNGRz1weXRob24gLSBXaW4zMiBSZWxlYXNlDQotIU1FU1NBR0UgVGhpcyBpcyBub3QgYSB2YWxpZCBtYWtlZmlsZS4gVG8gYnVpbGQgdGhpcyBwcm9qZWN0IHVzaW5nIE5NQUtFLA0KLSFNRVNTQUdFIHVzZSB0aGUgRXhwb3J0IE1ha2VmaWxlIGNvbW1hbmQgYW5kIHJ1bg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJweXRob24ubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbi5tYWsiIENGRz0icHl0aG9uIC0gV2luMzIgUmVsZWFzZSINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSAicHl0aG9uIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob24iDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIi4uIg0KLUNQUD1jbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAicHl0aG9uIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1xweXRob24iDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GUiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIl9ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2kgIi4uLi5cXEluY2x1ZGUiIC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3RhY2s6MHgyMDAwMDAgL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vcHl0aG9uX2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob24gLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAicHl0aG9uIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweWNvbi5pY28NCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xweXRob24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweXRob25fZXhlLnJjDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbmNvcmUuZHNwIGIvUEMvVkM2L3B5dGhvbmNvcmUuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2U5OGQxLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weXRob25jb3JlLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDc4MCArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbmNvcmUiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9cHl0aG9uY29yZSAtIFdpbjMyIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbmNvcmUubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbmNvcmUubWFrIiBDRkc9InB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob25jb3JlIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbmNvcmUgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4uXC4uXEluY2x1ZGUiIC9JICIuLiIgL0kgIi4uXC4uXG1vZHVsZXNcemxpYiIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiTkRFQlVHIiAvRCAiV0lOMzIiIC9EICJfV0lORE9XUyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9ZWCAvRkQgL1ptMjAwIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gL3dpbjMyICJOVUwiDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9pICIuLlwuLlxJbmNsdWRlIiAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBsYXJnZWludC5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MWUwMDAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9vdXQ6Ii4vcHl0aG9uMzMuZGxsIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJweXRob25jb3JlIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHB5dGhvbmNvcmUiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9JICIuLlwuLlxtb2R1bGVzXHpsaWIiIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIl9ERUJVRyIgL0QgIlVTRV9ETF9FWFBPUlQiIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9abTIwMCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vIC93aW4zMiAiTlVMIg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvbyAvd2luMzIgIk5VTCINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvaSAiLi5cLi5cSW5jbHVkZSIgL2QgIl9ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbGFyZ2VpbnQubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFlMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvbm9kZWZhdWx0bGliOiJsaWJjIiAvb3V0OiIuL3B5dGhvbjMzX2QuZGxsIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob25jb3JlIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbmNvcmUgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Jpc2VjdG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfY24uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19pc28yMDIyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19qcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX3R3LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY29kZWNzbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9jc3YuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9kYXRldGltZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2hlYXBxbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfanNvbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2xzcHJvZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX21hdGguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9waWNrbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9yYW5kb21tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zcmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQQ1xfc3VicHJvY2Vzcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3RocmVhZG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX3RpbWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cX3dhcm5pbmdzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfd2Vha3JlZi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcYWJzdHJhY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGFjY3UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcYWNjZWxlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxhc2RsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGFzdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xhdWRpb29wLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xiaW5hc2NpaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxiaXRzZXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cYmx0aW5tb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xidWZmZXJlZGlvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xieXRlc2lvLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xieXRlc29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY2Fwc3VsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY2VsbG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxjZXZhbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY2xhc3NvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGNtYXRobW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGNvZGVjcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcY29kZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxjb21waWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xjb21wbGV4b2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cY29uZmlnLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGRpY3RvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxkbF9udC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxkdG9hLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGR5bmxvYWRfd2luLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xlcnJub21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxlcnJvcnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xmaWxlaW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZpbGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZmlsZXV0aWxzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZmxvYXRvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZm9ybWF0dGVyX3VuaWNvZGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGZyYW1lb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGZyb3plbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcZnVuY29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxmdXR1cmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cZ2V0YXJncy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMNCi0jIEFERCBDUFAgL0QgQlVJTEQ9NDYNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdldGNvcHlyaWdodC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRvcHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxnZXRwYXRocC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXRwbGF0Zm9ybS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXGdyYW1pbml0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXGdyYW1tYXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcZ3JhbW1hcjEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxpbXBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25caW1wb3J0ZGwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlxpbmZmYXN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxsaXN0bm9kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbGlzdG9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcbWFpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxtYXJzaGFsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtYXRobW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtZDVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG1lbW9yeW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFBhcnNlclxtZXRhZ3JhbW1hci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xtbWFwbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXG1zdmNydG1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUGFyc2VyXG15cmVhZGxpbmUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cbXlzbnByaW50Zi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxteXN0cnRvdWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcbm9kZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xvYm1hbGxvYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2VyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJccGFyc2V0b2suYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccGVlcGhvbGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5YXJlbmEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHljdHlwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweWZwZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweW1hdGguYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccHlzdGF0ZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0cmNtcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXN0cnRvZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlxweXRob25fbnQucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblxweXRpbWUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25ccmFuZG9tLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTFtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHNoYTI1Nm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xzaWduYWxtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHNsaWNlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cc3RydWN0bWVtYmVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1xzdHJ1Y3RzZXEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQeXRob25cc3ltdGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHN5c21vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXFB5dGhvblx0aHJlYWQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cUHl0aG9uXHRyYWNlYmFjay5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdHVwbGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxPYmplY3RzXHR5cGVvYmplY3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE9iamVjdHNcdW5pY29kZWN0eXBlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cT2JqZWN0c1x3ZWFrcmVmb2JqZWN0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cd2lucmVnLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYm1vZHVsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3B5dGhvbncuZHNwIGIvUEMvVkM2L3B5dGhvbncuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWMzMjVjLi4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9weXRob253LmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InB5dGhvbnciIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIiAweDAxMDENCi0NCi1DRkc9cHl0aG9udyAtIFdpbjMyIEFscGhhIFJlbGVhc2UNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInB5dGhvbncubWFrIiBDRkc9InB5dGhvbncgLSBXaW4zMiBBbHBoYSBSZWxlYXNlIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJweXRob253IC0gV2luMzIgUmVsZWFzZSIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJweXRob253Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlxwYyINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxZDAwMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdccHl0aG9udyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFkMDAwMDAwIiAvc3Vic3lzdGVtOndpbmRvd3MgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi9weXRob253X2QuZXhlIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJweXRob253IC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInB5dGhvbncgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXHB5dGhvbl9leGUucmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cV2luTWFpbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3JlYWRtZS50eHQgYi9QQy9WQzYvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk3OGY4NS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE5MiArMCwwIEBACi1CdWlsZGluZyBQeXRob24gdXNpbmcgVkMrKyA2LjAgb3IgNS4wCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzIGRpcmVjdG9yeSBpcyB1c2VkIHRvIGJ1aWxkIFB5dGhvbiBmb3IgV2luMzIgcGxhdGZvcm1zLCBlLmcuIFdpbmRvd3MKLTIwMDAgYW5kIFhQLiAgSXQgcmVxdWlyZXMgTWljcm9zb2Z0IFZpc3VhbCBDKysgNi54IG9yIDUueCBhbmQgUGxhdGZvcm0KLVNESyBGZWJydWFyeSAyMDAzIEVkaXRpb24gKENvcmUgU0RLKS4KLShGb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL3JlYWRtZS50eHQuKQotCi1BbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLmRzdyIgaW4gTVNWQysrLCBzZWxlY3QKLXRoZSBEZWJ1ZyBvciBSZWxlYXNlIHNldHRpbmcgKHVzaW5nIEJ1aWxkIC0+IFNldCBBY3RpdmUgQ29uZmlndXJhdGlvbi4uLiksCi1hbmQgYnVpbGQgdGhlIHByb2plY3RzLgotCi1UaGUgcHJvcGVyIG9yZGVyIHRvIGJ1aWxkIHN1YnByb2plY3RzOgotCi0xKSBweXRob25jb3JlICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gRExMIGFuZCBsaWJyYXJ5IGZpbGVzLAotICAgICAgICAgICAgICAgcHl0aG9uMzMue2RsbCwgbGlifSBpbiBSZWxlYXNlIG1vZGUpCi0KLTIpIHB5dGhvbiAodGhpcyBidWlsZHMgdGhlIG1haW4gUHl0aG9uIGV4ZWN1dGFibGUsCi0gICAgICAgICAgIHB5dGhvbi5leGUgaW4gUmVsZWFzZSBtb2RlKQotCi0zKSB0aGUgb3RoZXIgc3VicHJvamVjdHMsIGFzIGRlc2lyZWQgb3IgbmVlZGVkIChub3RlOiAgeW91IHByb2JhYmx5IGRvbid0Ci0gICB3YW50IHRvIGJ1aWxkIG1vc3Qgb2YgdGhlIG90aGVyIHN1YnByb2plY3RzLCB1bmxlc3MgeW91J3JlIGJ1aWxkaW5nIGFuCi0gICBlbnRpcmUgUHl0aG9uIGRpc3RyaWJ1dGlvbiBmcm9tIHNjcmF0Y2gsIG9yIHNwZWNpZmljYWxseSBtYWtpbmcgY2hhbmdlcwotICAgdG8gdGhlIHN1YnN5c3RlbXMgdGhleSBpbXBsZW1lbnQ7IHNlZSBTVUJQUk9KRUNUUyBiZWxvdykKLQotV2hlbiB1c2luZyB0aGUgRGVidWcgc2V0dGluZywgdGhlIG91dHB1dCBmaWxlcyBoYXZlIGEgX2QgYWRkZWQgdG8KLXRoZWlyIG5hbWU6ICBweXRob24zM19kLmRsbCwgcHl0aG9uX2QuZXhlLCBweWV4cGF0X2QucHlkLCBhbmQgc28gb24uCi0KLVNVQlBST0pFQ1RTCi0tLS0tLS0tLS0tLQotVGhlc2Ugc3VicHJvamVjdHMgc2hvdWxkIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgU3VicHJvamVjdHMgb3RoZXIgdGhhbiB0aGUKLW1haW4gb25lcyAocHl0aG9uY29yZSwgcHl0aG9uLCBweXRob253KSBnZW5lcmFsbHkgYnVpbGQgYSBETEwgKHJlbmFtZWQgdG8KLS5weWQpIGZyb20gYSBzcGVjaWZpYyBtb2R1bGUgc28gdGhhdCB1c2VycyBkb24ndCBoYXZlIHRvIGxvYWQgdGhlIGNvZGUKLXN1cHBvcnRpbmcgdGhhdCBtb2R1bGUgdW5sZXNzIHRoZXkgaW1wb3J0IHRoZSBtb2R1bGUuCi0KLXB5dGhvbmNvcmUKLSAgICAuZGxsIGFuZCAubGliCi1weXRob24KLSAgICAuZXhlCi1weXRob253Ci0gICAgcHl0aG9udy5leGUsIGEgdmFyaWFudCBvZiBweXRob24uZXhlIHRoYXQgZG9lc24ndCBwb3AgdXAgYSBET1MgYm94Ci1fbXNpCi0gICAgX21zaS5jLiBZb3UgbmVlZCB0byBpbnN0YWxsIFdpbmRvd3MgSW5zdGFsbGVyIFNESyB0byBidWlsZCB0aGlzIG1vZHVsZS4KLV9zb2NrZXQKLSAgICBzb2NrZXRtb2R1bGUuYwotX3Rlc3RjYXBpCi0gICAgdGVzdHMgb2YgdGhlIFB5dGhvbiBDIEFQSSwgcnVuIHZpYSBMaWIvdGVzdC90ZXN0X2NhcGkucHksIGFuZAotICAgIGltcGxlbWVudGVkIGJ5IG1vZHVsZSBNb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCi1weWV4cGF0Ci0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIGFjY2VsZXJhdGVkIFhNTCBwYXJzaW5nLCB3aGljaCBpbmNvcnBvcmF0ZXMgc3RhYmxlCi0gICAgY29kZSBmcm9tIHRoZSBFeHBhdCBwcm9qZWN0OiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBhdC8KLXNlbGVjdAotICAgIHNlbGVjdG1vZHVsZS5jCi11bmljb2RlZGF0YQotICAgIGxhcmdlIHRhYmxlcyBvZiBVbmljb2RlIGRhdGEKLXdpbnNvdW5kCi0gICAgcGxheSBzb3VuZHMgKHR5cGljYWxseSAud2F2IGZpbGVzKSB1bmRlciBXaW5kb3dzCi0KLVRoZSBmb2xsb3dpbmcgc3VicHJvamVjdHMgd2lsbCBnZW5lcmFsbHkgTk9UIGJ1aWxkIG91dCBvZiB0aGUgYm94LiAgVGhleQotd3JhcCBjb2RlIFB5dGhvbiBkb2Vzbid0IGNvbnRyb2wsIGFuZCB5b3UnbGwgbmVlZCB0byBkb3dubG9hZCB0aGUgYmFzZQotcGFja2FnZXMgZmlyc3QgYW5kIHVucGFjayB0aGVtIGludG8gc2libGluZ3Mgb2YgUENidWlsZHMncyBwYXJlbnQKLWRpcmVjdG9yeTsgZm9yIGV4YW1wbGUsIGlmIHlvdXIgUENidWlsZCBpcyAgLi4uLi4uLlxkaXN0XHNyY1xQQ2J1aWxkXCwKLXVucGFjayBpbnRvIG5ldyBzdWJkaXJlY3RvcmllcyBvZiBkaXN0XC4KLQotX3RraW50ZXIKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBSZXF1aXJlcyBidWlsZGluZwotICAgIFRjbC9UayBmaXJzdC4gIEZvbGxvd2luZyBhcmUgaW5zdHJ1Y3Rpb25zIGZvciBUY2wvVGsgOC41LjIuCi0KLSAgICBHZXQgc291cmNlCi0gICAgLS0tLS0tLS0tLQotICAgIEluIHRoZSBkaXN0IGRpcmVjdG9yeSwgcnVuCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsLTguNS4yLjEgdGNsOC41LjIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90ay04LjUuMi4wIHRrOC41LjIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90aXgtOC40LjMuMSB0aXg4LjQuMwotCi0gICAgRGVidWcgQnVpbGQKLSAgICAtLS0tLS0tLS0tLQotICAgIFRvIGJ1aWxkIGRlYnVnIHZlcnNpb24sIGFkZCBERUJVRz0xIHRvIGFsbCBubWFrZSBjYWxsIGJlbGxvdy4KLQotICAgIEJ1aWxkIFRjbCBmaXJzdCAoZG9uZSBoZXJlIHcvIE1TVkMgNiBvbiBXaW4ySykKLSAgICAtLS0tLS0tLS0tLS0tLS0KLSAgICBJZiB5b3VyIGVudmlyb25tZW50IGRvZXNuJ3QgaGF2ZSBzdHJ1Y3QgX3N0YXQ2NCwgeW91IG5lZWQgdG8gYXBwbHkKLSAgICB0Y2w4NTIucGF0Y2ggaW4gdGhpcyBkaXJlY3RvcnkgdG8gZGlzdFx0Y2w4LjUuMlxnZW5lcmljXHRjbC5oLgotCi0gICAgY2QgZGlzdFx0Y2w4LjUuMlx3aW4KLSAgICBydW4gdmN2YXJzMzIuYmF0Ci0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLQotICAgIE9wdGlvbmFsOiAgcnVuIHRlc3RzLCB2aWEKLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgdGVzdAotCi0gICAgICAgIGFsbC50Y2w6ICAgICAgICBUb3RhbCAgIDI0MjQyICAgUGFzc2VkICAyMzM1OCAgIFNraXBwZWQgODc3ICAgICBGYWlsZWQgIDcKLSAgICAgICAgU291cmNlZCAxMzcgVGVzdCBGaWxlcy4KLSAgICAgICAgRmlsZXMgd2l0aCBmYWlsaW5nIHRlc3RzOiBleGVjLnRlc3QgaHR0cC50ZXN0IGlvLnRlc3QgbWFpbi50ZXN0IHN0cmluZy50ZXN0IHN0cmkKLSAgICAgICAgbmdPYmoudGVzdAotCi0gICAgQnVpbGQgVGsKLSAgICAtLS0tLS0tLQotICAgIGNkIGRpc3RcdGs4LjUuMlx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC41LjIKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBUQ0xESVI9Li5cLi5cdGNsOC41LjIgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBYWFggSSBoYXZlIG5vIGlkZWEgd2hldGhlciAibm1ha2UgLWYgbWFrZWZpbGUudmMgdGVzdCIgcGFzc2VkIG9yCi0gICAgWFhYIGZhaWxlZC4gIEl0IHBvcHBlZCB1cCB0b25zIG9mIGxpdHRsZSB3aW5kb3dzLCBhbmQgZGlkIGxvdHMgb2YKLSAgICBYWFggc3R1ZmYsIGFuZCBub3RoaW5nIGJsZXcgdXAuCi0KLSAgICBCdWlsZCBUaXgKLSAgICAtLS0tLS0tLS0KLSAgICBjZCBkaXN0XHRpeDguNC4zXHdpbgotICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgVENMX01BSk9SPTggVENMX01JTk9SPTUgVENMX1BBVENIPTIgTUFDSElORT1JWDg2IERFQlVHPTAKLSAgICBubWFrZSAtZiBweXRob24ubWFrIFRDTF9NQUpPUj04IFRDTF9NSU5PUj01IFRDTF9QQVRDSD0yIE1BQ0hJTkU9SVg4NiBERUJVRz0wIElOU1RBTExfRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLQotYnoyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJiejIgY29tcHJlc3Npb24gbGlicmFyeS4gIEhvbWVwYWdlCi0gICAgICAgIGh0dHA6Ly93d3cuYnppcC5vcmcvCi0gICAgRG93bmxvYWQgdGhlIHNvdXJjZSBmcm9tIHRoZSBweXRob24ub3JnIGNvcHkgaW50byB0aGUgZGlzdAotICAgIGRpcmVjdG9yeToKLQotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2J6aXAyLTEuMC42Ci0KLSAgICBBbmQgcmVxdWlyZXMgYnVpbGRpbmcgYnoyIGZpcnN0LgotCi0gICAgY2QgZGlzdFxiemlwMi0xLjAuNgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLm1zYwotCi0gICAgQWxsIG9mIHRoaXMgbWFuYWdlZCB0byBidWlsZCBiemlwMi0xLjAuNlxsaWJiejIubGliLCB3aGljaCB0aGUgUHl0aG9uCi0gICAgcHJvamVjdCBsaW5rcyBpbi4KLQotCi1fc3FsaXRlMwotICAgIFB5dGhvbiB3cmFwcGVyIGZvciBTUUxpdGUgbGlicmFyeS4KLSAgICAKLSAgICBHZXQgdGhlIHNvdXJjZSBjb2RlIHRocm91Z2gKLSAgICAKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9zcWxpdGUtc291cmNlLTMuMy40Ci0gICAgCi0gICAgVG8gdXNlIHRoZSBleHRlbnNpb24gbW9kdWxlIGluIGEgUHl0aG9uIGJ1aWxkIHRyZWUsIGNvcHkgc3FsaXRlMy5kbGwgaW50bwotICAgIHRoZSBQQy9WQzYgZm9sZGVyLgotCi0KLV9zc2wKLSAgICBQeXRob24gd3JhcHBlciBmb3IgdGhlIHNlY3VyZSBzb2NrZXRzIGxpYnJhcnkuCi0KLSAgICBHZXQgdGhlIGxhdGVzdCBzb3VyY2UgY29kZSBmb3IgT3BlblNTTCBmcm9tCi0gICAgICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcKLQotICAgIFlvdSAocHJvYmFibHkpIGRvbid0IHdhbnQgdGhlICJlbmdpbmUiIGNvZGUuICBGb3IgZXhhbXBsZSwgZG9uJ3QgZ2V0Ci0gICAgICAgIG9wZW5zc2wtZW5naW5lLTAuOS42Zy50YXIuZ3oKLQotICAgIFVucGFjayBpbnRvIHRoZSAiZGlzdCIgZGlyZWN0b3J5LCByZXRhaW5pbmcgdGhlIGZvbGRlciBuYW1lIGZyb20KLSAgICB0aGUgYXJjaGl2ZSAtIGZvciBleGFtcGxlLCB0aGUgbGF0ZXN0IHN0YWJsZSBPcGVuU1NMIHdpbGwgaW5zdGFsbCBhcwotICAgICAgICBkaXN0L29wZW5zc2wtMS4wLjFlCi0KLSAgICBZb3UgbmVlZCB0byB1c2UgdmVyc2lvbiAxLjAuMWUgb2YgT3BlblNTTC4KLQotICAgIFlvdSBjYW4gaW5zdGFsbCB0aGUgTkFTTSBhc3NlbWJsZXIgZnJvbQotICAgICAgICBodHRwOi8vd3d3Lm5hc20udXMvCi0gICAgZm9yIHg4NiBidWlsZHMuICBQdXQgbmFzbXcuZXhlIGFueXdoZXJlIGluIHlvdXIgUEFUSC4KLSAgICBOb3RlOiByZWNlbnQgcmVsZWFzZXMgb2YgbmFzbSBvbmx5IGhhdmUgbmFzbS5leGUuIEp1c3QgcmVuYW1lIGl0IHRvIAotICAgIG5hc213LmV4ZS4KLQotICAgIFlvdSBjYW4gYWxzbyBpbnN0YWxsIEFjdGl2ZVBlcmwgZnJvbQotICAgICAgICBodHRwOi8vd3d3LmFjdGl2ZXN0YXRlLmNvbS9hY3RpdmVwZXJsLwotICAgIGlmIHlvdSBsaWtlIHRvIHVzZSB0aGUgb2ZmaWNpYWwgc291cmNlcyBpbnN0ZWFkIG9mIHRoZSBmaWxlcyBmcm9tIAotICAgIHB5dGhvbidzIHN1YnZlcnNpb24gcmVwb3NpdG9yeS4gVGhlIHN2biB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsZAotICAgIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCi0KLSAgICBUaGUgTVNWQyBwcm9qZWN0IHNpbXBseSBpbnZva2VzIFBDL1ZDNi9idWlsZF9zc2wucHkgdG8gcGVyZm9ybQotICAgIHRoZSBidWlsZC4gIFRoaXMgUHl0aG9uIHNjcmlwdCBsb2NhdGVzIGFuZCBidWlsZHMgeW91ciBPcGVuU1NMCi0gICAgaW5zdGFsbGF0aW9uLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbWFrZWZpbGUgdG8gYnVpbGQgdGhlIGZpbmFsIC5weWQuCi0KLSAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QKLSAgICBiZWluZyBhYmxlIHRvIGZpbmQgT3BlblNTTCBzb3VyY2VzLCBvciBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgUGVybAotICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4KLSAgICBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkKLSAgICAoZWcsIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZQotICAgIGEgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKLSAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLgotCi0gICAgYnVpbGRfc3NsLnB5L01TVkMgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBjbGVhbiBPcGVuU1NMIC0geW91IG11c3QgZG8KLSAgICB0aGlzIGJ5IGhhbmQuCi0KLQotWU9VUiBPV04gRVhURU5TSU9OIERMTHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JZiB5b3Ugd2FudCB0byBjcmVhdGUgeW91ciBvd24gZXh0ZW5zaW9uIG1vZHVsZSBETEwsIHRoZXJlJ3MgYW4gZXhhbXBsZQotd2l0aCBlYXN5LXRvLWZvbGxvdyBpbnN0cnVjdGlvbnMgaW4gLi4vUEMvZXhhbXBsZS87IHJlYWQgdGhlIGZpbGUKLXJlYWRtZS50eHQgdGhlcmUgZmlyc3QuCmRpZmYgLS1naXQgYS9QQy9WQzYvcm1weWMucHkgYi9QQy9WQzYvcm1weWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZDY4MjMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3JtcHljLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyBSZW1vdmUgYWxsIHRoZSAucHljIGFuZCAucHlvIGZpbGVzIHVuZGVyIC4uL0xpYi4KLQotCi1kZWYgZGVsdHJlZShyb290KToKLSAgICBpbXBvcnQgb3MKLSAgICBmcm9tIG9zLnBhdGggaW1wb3J0IGpvaW4KLQotICAgIG5weWMgPSBucHlvID0gMAotICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHJvb3QpOgotICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKLSAgICAgICAgICAgIGRlbGV0ZSA9IEZhbHNlCi0gICAgICAgICAgICBpZiBuYW1lLmVuZHN3aXRoKCcucHljJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weWMgKz0gMQotICAgICAgICAgICAgZWxpZiBuYW1lLmVuZHN3aXRoKCcucHlvJyk6Ci0gICAgICAgICAgICAgICAgZGVsZXRlID0gVHJ1ZQotICAgICAgICAgICAgICAgIG5weW8gKz0gMQotCi0gICAgICAgICAgICBpZiBkZWxldGU6Ci0gICAgICAgICAgICAgICAgb3MucmVtb3ZlKGpvaW4ocm9vdCwgbmFtZSkpCi0KLSAgICByZXR1cm4gbnB5YywgbnB5bwotCi1ucHljLCBucHlvID0gZGVsdHJlZSgiLi4vLi4vTGliIikKLXByaW50IG5weWMsICIucHljIGRlbGV0ZWQsIiwgbnB5bywgIi5weW8gZGVsZXRlZCIKZGlmZiAtLWdpdCBhL1BDL1ZDNi9ydC5iYXQgYi9QQy9WQzYvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhOWVhZGQ3Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi9ydC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi1AcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotQHJlbSBVc2FnZTogIHJ0IFstZF0gWy1PXSBbLXFdIHJlZ3J0ZXN0X2FyZ3MKLUByZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi1AcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1AcmVtIC1xICAgInF1aWNrIiAtLSBub3JtYWxseSB0aGUgdGVzdHMgYXJlIHJ1biB0d2ljZSwgdGhlIGZpcnN0IHRpbWUKLUByZW0gICAgICBhZnRlciBkZWxldGluZyBhbGwgdGhlIC5weVtjb10gZmlsZXMgcmVhY2hhYmxlIGZyb20gTGliLy4KLUByZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1AcmVtIEFsbCBsZWFkaW5nIGluc3RhbmNlcyBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgc2hpZnRlZCBvZmYsIGFuZAotQHJlbSB3aGF0ZXZlciByZW1haW5zIGlzIHBhc3NlZCB0byByZWdydGVzdC5weS4gIEZvciBleGFtcGxlLAotQHJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLUByZW0gcnVucwotQHJlbSAgICAgcHl0aG9uX2QgLU8gLi4vLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLXggdGVzdF90aHJlYWQKLUByZW0gdHdpY2UsIGFuZAotQHJlbSAgICAgcnQgLXEgLWcgdGVzdF9iaW5hc2NpaQotQHJlbSBydW5zCi1AcmVtICAgICBweXRob25fZCAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1AcmVtIHRvIGdlbmVyYXRlIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBmb3IgYmluYXNjaWkgcXVpY2tseS4KLUBzZXQgX2V4ZT1weXRob24KLUBzZXQgX3Ftb2RlPW5vCi1Ac2V0IF9kYXNoTz0KLUBnb3RvIENoZWNrT3B0cwotOkFnYWluCi1Ac2hpZnQKLTpDaGVja09wdHMKLUBpZiAiJTEiPT0iLU8iIHNldCBfZGFzaE89LU8KLUBpZiAiJTEiPT0iLU8iIGdvdG8gQWdhaW4KLUBpZiAiJTEiPT0iLXEiIHNldCBfcW1vZGU9eWVzCi1AaWYgIiUxIj09Ii1xIiBnb3RvIEFnYWluCi1AaWYgIiUxIj09Ii1kIiBzZXQgX2V4ZT1weXRob25fZAotQGlmICIlMSI9PSItZCIgZ290byBBZ2FpbgotQGlmICIlX3Ftb2RlJSI9PSJ5ZXMiIGdvdG8gUW1vZGUKLUBlY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KLUAlX2V4ZSUgcm1weWMucHkKLSVfZXhlJSAlX2Rhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotQGVjaG8gQWJvdXQgdG8gcnVuIGFnYWluIHdpdGhvdXQgZGVsZXRpbmcgLnB5Yy8ucHlvIGZpcnN0OgotQHBhdXNlCi06UW1vZGUKLSVfZXhlJSAlX2Rhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotQHNldCBfZXhlPQotQHNldCBfcW1vZGU9Ci1Ac2V0IF9kYXNoTz0KZGlmZiAtLWdpdCBhL1BDL1ZDNi9zZWxlY3QuZHNwIGIvUEMvVkM2L3NlbGVjdC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwZTUyOGMuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3NlbGVjdC5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InNlbGVjdCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiIDB4MDEwMg0KLQ0KLUNGRz1zZWxlY3QgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAic2VsZWN0Lm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJzZWxlY3QubWFrIiBDRkc9InNlbGVjdCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJzZWxlY3QgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAic2VsZWN0IC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAic2VsZWN0Ig0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLiINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UIC9XMyAvR1ggL08yIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIk5ERUJVRyIgL0QgIldJTjMyIiAvRCAiX1dJTkRPV1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzINCi0jIEFERCBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi0jIEFERCBSU0MgL2wgMHg0MDkgL2QgIk5ERUJVRyINCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSU5LMzI9bGluay5leGUNCi0jIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBnZGkzMi5saWIgd2luc3Bvb2wubGliIGNvbWRsZzMyLmxpYiBhZHZhcGkzMi5saWIgc2hlbGwzMi5saWIgb2xlMzIubGliIG9sZWF1dDMyLmxpYiB1dWlkLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiBrZXJuZWwzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgd3NvY2szMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDExMDAwMCIgL3N1YnN5c3RlbTp3aW5kb3dzIC9kbGwgL2RlYnVnIC9tYWNoaW5lOkkzODYgL25vZGVmYXVsdGxpYjoibGliYyIgL291dDoiLi9zZWxlY3QucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDENCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtZGVidWdcc2VsZWN0Ig0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJfREVCVUciIC9EICJXSU4zMiIgL0QgIl9XSU5ET1dTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC9vICJOVUwiIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzb2NrMzIubGliIC9ub2xvZ28gL2Jhc2U6IjB4MUQxMTAwMDAiIC9zdWJzeXN0ZW06d2luZG93cyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9ub2RlZmF1bHRsaWI6ImxpYmMiIC9ub2RlZmF1bHRsaWI6Im1zdmNydCIgL291dDoiLi9zZWxlY3RfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInNlbGVjdCAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJzZWxlY3QgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXE1vZHVsZXNcc2VsZWN0bW9kdWxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS9QQy9WQzYvdGNsODUyLnBhdGNoIGIvUEMvVkM2L3RjbDg1Mi5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWQ2NzgwYS4uMDAwMDAwMAotLS0gYS9QQy9WQzYvdGNsODUyLnBhdGNoCisrKyAvZGV2L251bGwKQEAgLTEsMTEgKzAsMCBAQAotLS0tIHRjbDguNS4yXGdlbmVyaWNcdGNsLmgJRnJpIEp1biAxMyAwMzozNTozOSAyMDA4Ci0rKysgdGNsOC41LjJcZ2VuZXJpY1x0Y2wuaAlTdW4gSmFuICA0IDE2OjUyOjMwIDIwMDkKLUBAIC0zNjcsNyArMzY3LDcgQEAKLSB0eXBlZGVmIHN0cnVjdCBzdGF0aTY0IFRjbF9TdGF0QnVmOwotICMgICAgICAgICBkZWZpbmUgVENMX0xMX01PRElGSUVSCSJMIgotICMgICAgICBlbHNlIC8qIF9fQk9STEFORENfXyAqLwotLSMgICAgICAgICBpZiBfTVNDX1ZFUiA8IDE0MDAgJiYgIWRlZmluZWQoX01fSVg4NikKLSsjICAgICAgICAgaWYgX01TQ19WRVIgPCAxNDAwIC8qJiYgIWRlZmluZWQoX01fSVg4NikqLwotIHR5cGVkZWYgc3RydWN0IF9zdGF0aTY0CVRjbF9TdGF0QnVmOwotICMgICAgICAgICBlbHNlCi0gdHlwZWRlZiBzdHJ1Y3QgX3N0YXQ2NAlUY2xfU3RhdEJ1ZjsKZGlmZiAtLWdpdCBhL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AgYi9QQy9WQzYvdW5pY29kZWRhdGEuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMDRkYjY3Li4wMDAwMDAwCi0tLSBhL1BDL1ZDNi91bmljb2RlZGF0YS5kc3AKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InVuaWNvZGVkYXRhIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIgMHgwMTAyDQotDQotQ0ZHPXVuaWNvZGVkYXRhIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInVuaWNvZGVkYXRhLm1hayIuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgWW91IGNhbiBzcGVjaWZ5IGEgY29uZmlndXJhdGlvbiB3aGVuIHJ1bm5pbmcgTk1BS0UNCi0hTUVTU0FHRSBieSBkZWZpbmluZyB0aGUgbWFjcm8gQ0ZHIG9uIHRoZSBjb21tYW5kIGxpbmUuIEZvciBleGFtcGxlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIE5NQUtFIC9mICJ1bmljb2RlZGF0YS5tYWsiIENGRz0idW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAidW5pY29kZWRhdGEgLSBXaW4zMiBSZWxlYXNlIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSAidW5pY29kZWRhdGEgLSBXaW4zMiBEZWJ1ZyIgKGJhc2VkIG9uICJXaW4zMiAoeDg2KSBEeW5hbWljLUxpbmsgTGlicmFyeSIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICJ1bmljb2RlZGF0YSINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiLi4iDQotQ1BQPWNsLmV4ZQ0KLU1UTD1taWRsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIk1NQVBfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiTU1BUF9FWFBPUlRTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEyMDAwMCIgL2RsbCAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdW5pY29kZWRhdGEucHlkIg0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x1bmljb2RlZGF0YSINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotRjkwPWRmLmV4ZQ0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL01UZCAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJNTUFQX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvYmFzZToiMHgxRDEyMDAwMCIgL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuL3VuaWNvZGVkYXRhX2QucHlkIiAvcGRidHlwZTpzZXB0DQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVORElGIA0KLQ0KLSMgQmVnaW4gVGFyZ2V0DQotDQotIyBOYW1lICJ1bmljb2RlZGF0YSAtIFdpbjMyIFJlbGVhc2UiDQotIyBOYW1lICJ1bmljb2RlZGF0YSAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cTW9kdWxlc1x1bmljb2RlZGF0YS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3c5eHBvcGVuLmRzcCBiL1BDL1ZDNi93OXhwb3Blbi5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhNjQwM2MuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3c5eHBvcGVuLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0idzl4cG9wZW4iIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIiAweDAxMDENCi0NCi1DRkc9dzl4cG9wZW4gLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAidzl4cG9wZW4ubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInc5eHBvcGVuLm1hayIgQ0ZHPSJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJ3OXhwb3BlbiAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQXBwbGljYXRpb24iKQ0KLSFNRVNTQUdFICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIEFwcGxpY2F0aW9uIikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KLUNQUD1jbC5leGUNCi1NVEw9bWlkbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAidzl4cG9wZW4gLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLiINCi0jIFBST1AgSW50ZXJtZWRpYXRlX0RpciAieDg2LXRlbXAtcmVsZWFzZVx3OXhwb3BlbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBNVEwgL25vbG9nbyAvRCAiTkRFQlVHIiAvbWt0eXBsaWIyMDMgL3dpbjMyDQotIyBBREQgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIEJBU0UgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotIyBBREQgUlNDIC9sIDB4YzA5IC9kICJOREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgZ2RpMzIubGliIHdpbnNwb29sLmxpYiBjb21kbGczMi5saWIgYWR2YXBpMzIubGliIHNoZWxsMzIubGliIG9sZTMyLmxpYiBvbGVhdXQzMi5saWIgdXVpZC5saWIgb2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOndpbmRvd3MgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiB1c2VyMzIubGliIC9ub2xvZ28gL21hY2hpbmU6STM4Ng0KLSMgU1VCVFJBQ1QgTElOSzMyIC9wZGI6bm9uZQ0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJ3OXhwb3BlbiAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJ4ODYtdGVtcC1kZWJ1Z1x3OXhwb3BlbiINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWkkgL09kIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvR1ogL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTp3aW5kb3dzIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgdXNlcjMyLmxpYiAvbm9sb2dvIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vdzl4cG9wZW5fZC5leGUiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgInc5eHBvcGVuIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgInc5eHBvcGVuIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3OXhwb3Blbi5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVkM2L3dpbnNvdW5kLmRzcCBiL1BDL1ZDNi93aW5zb3VuZC5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlMDliOWIuLjAwMDAwMDAKLS0tIGEvUEMvVkM2L3dpbnNvdW5kLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0id2luc291bmQiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IiAweDAxMDINCi0NCi1DRkc9d2luc291bmQgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAid2luc291bmQubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIndpbnNvdW5kLm1hayIgQ0ZHPSJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJ3aW5zb3VuZCAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgRHluYW1pYy1MaW5rIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJ3aW5zb3VuZCAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIER5bmFtaWMtTGluayBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIndpbnNvdW5kIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIuLlxwYyINCi1DUFA9Y2wuZXhlDQotTVRMPW1pZGwuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLXJlbGVhc2Vcd2luc291bmQiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLUY5MD1kZi5leGUNCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9NVCAvVzMgL0dYIC9PMiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLi5cLi5cSW5jbHVkZSIgL0kgIi4uIiAvRCAiUHlfQlVJTERfQ09SRV9NT0RVTEUiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9XSU5ET1dTIiAvRCAiX01CQ1MiIC9EICJfVVNSRExMIiAvRCAiV0lOU09VTkRfRVhQT1JUUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIk5ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIGtlcm5lbDMyLmxpYiB3aW5tbS5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTYwMDAwIiAvZGxsIC9tYWNoaW5lOkkzODYgL291dDoiLi93aW5zb3VuZC5weWQiDQotIyBTVUJUUkFDVCBMSU5LMzIgL3BkYjpub25lDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gIndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIi4iDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIng4Ni10ZW1wLWRlYnVnXHdpbnNvdW5kIg0KLSMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi1GOTA9ZGYuZXhlDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvTVRkIC9XMyAvR20gL0dYIC9aSSAvT2QgL0QgIlB5X0JVSUxEX0NPUkVfTU9EVUxFIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfV0lORE9XUyIgL0QgIl9NQkNTIiAvRCAiX1VTUkRMTCIgL0QgIldJTlNPVU5EX0VYUE9SVFMiIC9ZWCAvRkQgL0daIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuLlwuLlxJbmNsdWRlIiAvSSAiLi4iIC9EICJQeV9CVUlMRF9DT1JFX01PRFVMRSIgL0QgIldJTjMyIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9VU1JETEwiIC9EICJXSU5TT1VORF9FWFBPUlRTIiAvWVggL0ZEIC9HWiAvYw0KLSMgQUREIEJBU0UgTVRMIC9ub2xvZ28gL0QgIl9ERUJVRyIgL21rdHlwbGliMjAzIC93aW4zMg0KLSMgQUREIE1UTCAvbm9sb2dvIC9EICJfREVCVUciIC9ta3R5cGxpYjIwMyAvd2luMzINCi0jIEFERCBCQVNFIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLSMgQUREIFJTQyAvbCAweGMwOSAvZCAiX0RFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGdkaTMyLmxpYiB3aW5zcG9vbC5saWIgY29tZGxnMzIubGliIGFkdmFwaTMyLmxpYiBzaGVsbDMyLmxpYiBvbGUzMi5saWIgb2xlYXV0MzIubGliIHV1aWQubGliIG9kYmMzMi5saWIgb2RiY2NwMzIubGliIC9ub2xvZ28gL2RsbCAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIHVzZXIzMi5saWIga2VybmVsMzIubGliIHdpbm1tLmxpYiAvbm9sb2dvIC9iYXNlOiIweDFEMTYwMDAwIiAvZGxsIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4vd2luc291bmRfZC5weWQiIC9wZGJ0eXBlOnNlcHQNCi0jIFNVQlRSQUNUIExJTkszMiAvcGRiOm5vbmUNCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIndpbnNvdW5kIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlx3aW5zb3VuZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBUYXJnZXQNCi0jIEVuZCBQcm9qZWN0DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvVW5pbnN0YWwud3NlIGIvUEMvVlM3LjEvVW5pbnN0YWwud3NlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMTZkZDMwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL1VuaW5zdGFsLndzZQorKysgL2Rldi9udWxsCkBAIC0xLDUxNCArMCwwIEBACi1Eb2N1bWVudCBUeXBlOiBXU0UKLWl0ZW06IEdsb2JhbAotICBWZXJzaW9uPTguMTQKLSAgRmxhZ3M9MDAwMDAxMDAKLSAgU3BsaXQ9MTQyMAotICBMYW5ndWFnZXM9NjUgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAKLSAgQ29weSBEZWZhdWx0PTEKLSAgSmFwYW5lc2UgRm9udCBOYW1lPU1TIEdvdGhpYwotICBKYXBhbmVzZSBGb250IFNpemU9MTAKLSAgU3RhcnQgR3JhZGllbnQ9MCAwIDI1NQotICBFbmQgR3JhZGllbnQ9MCAwIDAKLSAgV2luZG93cyBGbGFncz0wMDAwMDAwMDAwMDAwMDAwMDAwMDEwMTAwMDAwMTAwMAotICBNZXNzYWdlIEZvbnQ9TVMgU2FucyBTZXJpZgotICBGb250IFNpemU9OAotICBEaXNrIExhYmVsPUdMQlMKLSAgRGlzayBGaWxlbmFtZT1JTlNUQUxMCi0gIFBhdGNoIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgUGF0Y2ggVGhyZXNob2xkPTIwMAotICBQYXRjaCBNZW1vcnk9NDA5NgotICBQZXItVXNlciBWZXJzaW9uIElEPTEKLSAgQ3J5c3RhbCBGb3JtYXQ9MTAxMTExMDAxMDExMDAwMDAwMTAwMDEwMDEwMDEwMDEKLSAgU3RlcCBWaWV3PSZQcm9wZXJ0aWVzCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICBUaGlzIGlzIGEgdmVyYmF0aW0gY29weSBvZiBXaXNlJ3MgVW5pbnN0YWwud3NlLCBhbHRlcmVkIGF0IHRoZSBlbmQgdG8gd3JpdGUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9dW5pbnN0YWxsIGluZm8gdW5kZXIgSEtDVSBpbnN0ZWFkIG9mIEhLTE0gaWYgb3VyIERPQURNSU4gdmFyIGlzIGZhbHNlLgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICBJbnN0YWxsIFN1cHBvcnQgZm9yIHVuaW5zdGFsbGluZyB0aGUgYXBwbGljYXRpb24uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX1BBVEgKLSAgVmFsdWU9JV9MT0dGSUxFX1BBVEhfJQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX1BBVEgKLSAgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJVxVTldJU0UuRVhFCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9FWEVfT1NfVFlQRV8KLSAgVmFsdWU9V0lOMzIKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxVTldJU0UzMi5FWEUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVsc2UKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxVTldJU0UuRVhFCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfUEFUSCUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICAgSW5zdGFsbCBTdXBwb3J0IGZvciBtdWx0aXBsZSBsYW5ndWFnZXMKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfTEFORwotICBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VTklOU1RBTExfTEFORwotICBWYWx1ZT0lVU5JTlNUQUxMX0xBTkclXFVOV0lTRS5JTkkKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19DX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GUkEKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUQKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZSQQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfRF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRlJBCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1FCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5ERVUKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0VfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRFVQotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9RgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuUFRHCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19GX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5QVEcKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUcKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfR19OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuRVNQCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1ICi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5FU1AKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0hfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkVTUAotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9SQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVRBCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19JX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JVEEKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPUoKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkRBTgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfSl9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuREFOCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1LCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5GSU4KLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX0tfTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkZJTgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TAotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSVNMCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19MX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5JU0wKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPU0KLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5MRAotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfTV9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuTkxECi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYXJpYWJsZT1fTEFOR19MSVNUXwotICBWYWx1ZT1OCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhbHVlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5OT1IKLSAgRmxhZ3M9MDAwMDAwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUxBTkcKLSAgVmFsdWU9JV9MQU5HX05fTkFNRV8lCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLk5PUgotICBEZXN0aW5hdGlvbj0lVU5JTlNUQUxMX0xBTkclCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFyaWFibGU9X0xBTkdfTElTVF8KLSAgVmFsdWU9TwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBJZgotICBWYWx1ZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuU1ZFCi0gIEZsYWdzPTAwMDAwMDExCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1MQU5HCi0gIFZhbHVlPSVfTEFOR19PX05BTUVfJQotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPSVfV0lTRV8lXExBTkdVQUdFXFVOV0lTRS5TVkUKLSAgRGVzdGluYXRpb249JVVOSU5TVEFMTF9MQU5HJQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBDb21waWxlciBWYXJpYWJsZSBFbmQKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIElmCi0gIFZhcmlhYmxlPV9MQU5HX0xJU1RfCi0gIFZhbHVlPVAKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgSWYKLSAgVmFsdWU9JV9XSVNFXyVcTEFOR1VBR0VcVU5XSVNFLkpQTgotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9TEFORwotICBWYWx1ZT0lX0xBTkdfUF9OQU1FXyUKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1dJU0VfJVxMQU5HVUFHRVxVTldJU0UuSlBOCi0gIERlc3RpbmF0aW9uPSVVTklOU1RBTExfTEFORyUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogQ29tcGlsZXIgVmFyaWFibGUgRW5kCi1lbmQKLWl0ZW06IENvbXBpbGVyIFZhcmlhYmxlIEVuZAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICBJbnN0YWxsIHRoZSBhZGQvcmVtb3ZlIG9yIHVuaW5zdGFsbCBpY29uCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9VU5JTlNUQUxMX1BBVEgKLSAgVmFsdWU9JVVOSU5TVEFMTF9QQVRIJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9SU5TVF9MT0dfUEFUSAotICBWYWx1ZT0lX0xPR0ZJTEVfUEFUSF8lCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAxMTEwMTEKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Xcml0ZSB1bmluc3RhbGwgaW5mbyB1bmRlciBIS0xNLiAgVGhpcyBpZi9lbHNlL2VuZCBibG9jayBhZGRlZCBieSBUaW0uCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JUFQUFRJVExFJQotICBWYWx1ZSBOYW1lPURpc3BsYXlOYW1lCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVVTklOU1RBTExfUEFUSCUgJUlOU1RfTE9HX1BBVEglCi0gIE5ldyBWYWx1ZT0KLSAgVmFsdWUgTmFtZT1Vbmluc3RhbGxTdHJpbmcKLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZSBzYW1lLCBidXQgd3JpdGUgdW5kZXIgSEtDVSBpbnN0ZWFkLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVBUFBUSVRMRSUKLSAgVmFsdWUgTmFtZT1EaXNwbGF5TmFtZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lVU5JTlNUQUxMX1BBVEglICVJTlNUX0xPR19QQVRIJQotICBOZXcgVmFsdWU9Ci0gIFZhbHVlIE5hbWU9VW5pbnN0YWxsU3RyaW5nCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogQWRkIFByb2dNYW4gSWNvbgotICBHcm91cD0lR1JPVVAlCi0gIEljb24gTmFtZT1Vbmluc3RhbGwgJUFQUFRJVExFJQotICBDb21tYW5kIExpbmU9JVVOSU5TVEFMTF9QQVRIJSAlSU5TVF9MT0dfUEFUSCUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTExMTAwMTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQlJBTkQKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MgotICBpdGVtOiBLZXkKLSAgICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgICBOZXcgVmFsdWU9JUNPTVBBTlklCi0gICAgVmFsdWUgTmFtZT1SZWdDb21wYW55Ci0gICAgUm9vdD0yCi0gIGVuZAotICBpdGVtOiBLZXkKLSAgICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgICBOZXcgVmFsdWU9JU5BTUUlCi0gICAgVmFsdWUgTmFtZT1SZWdPd25lcgotICAgIFJvb3Q9MgotICBlbmQKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fY3R5cGVzLnZjcHJvaiBiL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMzU5ZDg4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19jdHlwZXMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzExICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfY3R5cGVzIg0KLQlQcm9qZWN0R1VJRD0ie0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0iDQotCVJvb3ROYW1lc3BhY2U9Il9jdHlwZXMiDQotCUtleXdvcmQ9IldpbjMyUHJvaiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX2N0eXBlcyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJGQUxTRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlc19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJGQUxTRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMCINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlcy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMCINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyAvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlPcHRpbWl6ZVJlZmVyZW5jZXM9IjAiDQotCQkJCUVuYWJsZUNPTURBVEZvbGRpbmc9IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlcy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJpYTY0LXRlbXAtcmVsZWFzZVxfY3R5cGVzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsgL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlcy5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IkZBTFNFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2N0eXBlcy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXMubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNhbGxwcm9jLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjZmllbGQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbWFsbG9jX2Nsb3N1cmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXHByZXBfY2lmLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1x3aW4zMi5jIj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCQlFeGNsdWRlZEZyb21CdWlsZD0iVFJVRSI+DQotCQkJCTxUb29sDQotCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luNjQuYXNtIj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJUUlVFIj4NCi0JCQkJPFRvb2wNCi0JCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQlDb21tYW5kTGluZT0iYW1kNjRfbWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90Ow0KLSINCi0JCQkJCU91dHB1dHM9IiZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQkJRXhjbHVkZWRGcm9tQnVpbGQ9IlRSVUUiPg0KLQkJCQk8VG9vbA0KLQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qIGIvUEMvVlM3LjEvX2N0eXBlc190ZXN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZThlOGEyYy4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fY3R5cGVzX3Rlc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfY3R5cGVzX3Rlc3QiDQotCVByb2plY3RHVUlEPSJ7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfSINCi0JS2V5d29yZD0iV2luMzJQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfY3R5cGVzX3Rlc3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1MiDQotCQkJCU1pbmltYWxSZWJ1aWxkPSJGQUxTRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3RfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIwIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJGQUxTRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19jdHlwZXNfdGVzdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJT3B0aW1pemVSZWZlcmVuY2VzPSIwIg0KLQkJCQlFbmFibGVDT01EQVRGb2xkaW5nPSIwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2N0eXBlc190ZXN0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImlhNjQtdGVtcC1yZWxlYXNlXF9jdHlwZXNfdGVzdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0iDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUyINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IkZBTFNFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fY3R5cGVzX3Rlc3RfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3RfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX2N0eXBlc190ZXN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2N0eXBlc190ZXN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iRkFMU0UiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fY3R5cGVzX3Rlc3QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMCINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19jdHlwZXNfdGVzdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXNfdGVzdC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvaiBiL1BDL1ZTNy4xL19lbGVtZW50dHJlZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJhMmI5ZDkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX2VsZW1lbnR0cmVlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI2NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlQcm9qZWN0R1VJRD0iezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0iDQotCVNjY1Byb2plY3ROYW1lPSJfZWxlbWVudHRyZWUiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9lbGVtZW50dHJlZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO0hBVkVfRVhQQVRfSDtXSU4zMjtfV0lORE9XUztYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX2VsZW1lbnR0cmVlX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfZWxlbWVudHRyZWUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWUucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19lbGVtZW50dHJlZS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fZWxlbWVudHRyZWUucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX2VsZW1lbnR0cmVlLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX2VsZW1lbnR0cmVlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fZWxlbWVudHRyZWUucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX2VsZW1lbnR0cmVlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19lbGVtZW50dHJlZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWxwYXJzZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL19tc2kudmNwcm9qIGIvUEMvVlM3LjEvX21zaS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ0ZmQ0NDcuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX21zaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTIgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Il9tc2kiDQotCVByb2plY3RHVUlEPSJ7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fSINCi0JU2NjUHJvamVjdE5hbWU9Il9tc2kiDQotCVNjY0xvY2FsUGF0aD0iLi5cLi5ccGMiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2lfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fbXNpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2lfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2kucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2kucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXF9tc2kiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEwiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiBidWZmZXJvdmVyZmxvd1UubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19tc2kucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19tc2kucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19tc2kubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfbXNpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIGJ1ZmZlcm92ZXJmbG93VS5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX21zaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX21zaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX21zaS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcX21zaS5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NvY2tldC52Y3Byb2ogYi9QQy9WUzcuMS9fc29ja2V0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZlZDhlNC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc29ja2V0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iX3NvY2tldCINCi0JU2NjUHJvamVjdE5hbWU9Il9zb2NrZXQiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9zb2NrZXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL19zb2NrZXRfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldF9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc29ja2V0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL19zb2NrZXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3NvY2tldC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3NvY2tldCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxfc29ja2V0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NvY2tldC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc29ja2V0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL19zb2NrZXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc29ja2V0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2ogYi9QQy9WUzcuMS9fc3FsaXRlMy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlmN2Q5OTEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3NxbGl0ZTMudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfc3FsaXRlMyINCi0JUHJvamVjdEdVSUQ9InsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9Ig0KLQlTY2NQcm9qZWN0TmFtZT0iX3NxbGl0ZTMiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNFxzcWxpdGUzLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fc3FsaXRlM19kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3NxbGl0ZTNfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlM19kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcX3NxbGl0ZTMiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGU7Li5cLi5cUEM7Li5cLi5cLi5cc3FsaXRlLXNvdXJjZS0zLjMuNCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOklBNjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxzcWxpdGUtc291cmNlLTMuMy40XGlhNjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXF9zcWxpdGUzIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlOy4uXC4uXFBDOy4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7TU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHNxbGl0ZS1zb3VyY2UtMy4zLjRcYW1kNjRcc3FsaXRlMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3NxbGl0ZTMucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9fc3FsaXRlMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fc3FsaXRlMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjdXJzb3IuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHByZXBhcmVfcHJvdG9jb2wuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVx1dGlsLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fc3NsLm1hayBiL1BDL1ZTNy4xL19zc2wubWFrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NDc2YTYzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL19zc2wubWFrCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotRVhUUkFfTElCUz0KLQotIUlGREVGIERFQlVHCi1TVUZGSVg9X2QucHlkCi1URU1QPXg4Ni10ZW1wLWRlYnVnLwotQ0ZMQUdTPS9PZCAvWmkgL01EZCAvTERkIC9EREVCVUcgL0RfREVCVUcgL0RXSU4zMgotU1NMX0xJQl9ESVI9JChTU0xfRElSKS9vdXQzMi5kYmcKLSFFTFNFCi1TVUZGSVg9LnB5ZAotVEVNUD14ODYtdGVtcC1yZWxlYXNlLwotQ0ZMQUdTPS9PeCAvTUQgL0xEIC9EV0lOMzIKLVNTTF9MSUJfRElSPSQoU1NMX0RJUikvb3V0MzIKLSFFTkRJRgotCi1JTkNMVURFUz0tSSAuLi8uLi9JbmNsdWRlIC1JIC4uLy4uL1BDIC1JICQoU1NMX0RJUikvaW5jMzIKLQotU1NMX0xJQlM9Z2RpMzIubGliIHdzb2NrMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9MSUJQQVRIOiQoU1NMX0xJQl9ESVIpIGxpYmVheTMyLmxpYiBzc2xlYXkzMi5saWIKLVNTTF9TT1VSQ0U9Li4vLi4vTW9kdWxlcy9fc3NsLmMgCi0KLUhBU0hfTElCUz1nZGkzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL2xpYnBhdGg6JChTU0xfTElCX0RJUikgbGliZWF5MzIubGliCi1IQVNIX1NPVVJDRT0uLi8uLi9Nb2R1bGVzL19oYXNob3BlbnNzbC5jIAotCi1hbGw6IF9zc2wkKFNVRkZJWCkgX2hhc2hsaWIkKFNVRkZJWCkKLQotIyBTcGxpdCBjb21waWxlL2xpbmsgaW50byB0d28gc3RlcHMgdG8gYmV0dGVyIHN1cHBvcnQgVlNFeHRDb21wCi1fc3NsJChTVUZGSVgpOiAkKFNTTF9TT1VSQ0UpICQoU1NMX0xJQl9ESVIpL2xpYmVheTMyLmxpYiAkKFNTTF9MSUJfRElSKS9zc2xlYXkzMi5saWIgLi4vLi4vUEMvKi5oIC4uLy4uL0luY2x1ZGUvKi5oCi0JQGlmIG5vdCBleGlzdCAiJChURU1QKS9fc3NsLy4iIG1rZGlyICIkKFRFTVApL19zc2wiCi0JY2wgL25vbG9nbyAvYyAkKFNTTF9TT1VSQ0UpICQoQ0ZMQUdTKSAvRm8kKFRFTVApXF9zc2xcJCoub2JqICQoSU5DTFVERVMpCi0JbGluayAvbm9sb2dvIEA8PAotICAgICAgICAgICAgIC9kbGwgL291dDpfc3NsJChTVUZGSVgpICQoVEVNUClcX3NzbFwkKi5vYmogJChTU0xfTElCUykgJChFWFRSQV9MSUJTKQotPDwKLQotX2hhc2hsaWIkKFNVRkZJWCk6ICQoSEFTSF9TT1VSQ0UpICQoU1NMX0xJQl9ESVIpL2xpYmVheTMyLmxpYiAuLi8uLi9QQy8qLmggLi4vLi4vSW5jbHVkZS8qLmgKLSAgICBAaWYgbm90IGV4aXN0ICIkKFRFTVApL19oYXNobGliLy4iIG1rZGlyICIkKFRFTVApL19oYXNobGliIgotICAgIGNsIC9ub2xvZ28gL2MgJChIQVNIX1NPVVJDRSkgJChDRkxBR1MpICQoRVhUUkFfQ0ZMQUdTKSAvRm8kKFRFTVApXF9oYXNobGliXCQqLm9iaiAkKElOQ0xVREVTKSAKLSAgICBsaW5rIC9ub2xvZ28gQDw8Ci0JL2RsbCAvb3V0Ol9oYXNobGliJChTVUZGSVgpICQoSEFTSF9MSUJTKSAkKEVYVFJBX0xJQlMpICQoVEVNUClcX2hhc2hsaWJcJCoub2JqCi08PApkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvX3NzbC52Y3Byb2ogYi9QQy9WUzcuMS9fc3NsLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZkNjVmZS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fc3NsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfc3NsIg0KLQlSb290TmFtZXNwYWNlPSJfc3NsIg0KLQlTY2NQcm9qZWN0TmFtZT0iIg0KLQlTY2NMb2NhbFBhdGg9IiINCi0JS2V5d29yZD0iTWFrZUZpbGVQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsX2QucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfc3NsIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iYnVpbGRfc3NsLmJhdCAkKENvbmZpZ3VyYXRpb25OYW1lKSAtYSINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iZWNobyBOb3RoaW5nIHRvIGRvIg0KLQkJCQlPdXRwdXQ9Il9zc2wucHlkIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3NzbCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJidWlsZF9zc2wuYmF0ICQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9ImJ1aWxkX3NzbC5iYXQgJChDb25maWd1cmF0aW9uTmFtZSkgLWEiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9ImVjaG8gTm90aGluZyB0byBkbyINCi0JCQkJT3V0cHV0PSJfc3NsLnB5ZCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3NsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2hhc2hvcGVuc3NsLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qIGIvUEMvVlM3LjEvX3Rlc3RjYXBpLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDE5Nzg0Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9fdGVzdGNhcGkudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfdGVzdGNhcGkiDQotCVNjY1Byb2plY3ROYW1lPSJfdGVzdGNhcGkiDQotCVNjY0xvY2FsUGF0aD0iLi4iPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXF90ZXN0Y2FwaSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtfREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtNTUFQX0VYUE9SVFMiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9Ii4vX3Rlc3RjYXBpX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFGMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190ZXN0Y2FwaV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfdGVzdGNhcGkiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTO19VU1JETEw7TU1BUF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGVzdGNhcGkucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190ZXN0Y2FwaS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3Rlc3RjYXBpLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3Rlc3RjYXBpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190ZXN0Y2FwaS5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3Rlc3RjYXBpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGVzdGNhcGkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2ogYi9QQy9WUzcuMS9fdGtpbnRlci52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmNzM0MTYuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvX3RraW50ZXIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjYxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJfdGtpbnRlciINCi0JU2NjUHJvamVjdE5hbWU9Il90a2ludGVyIg0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXC4uXC4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlx0Y2x0a1xpbmNsdWRlLC4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7V0lUSF9BUFBJTklUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlci5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlcl9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXJfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxOTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9fdGtpbnRlcl9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxfdGtpbnRlciINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cdGNsdGtcaW5jbHVkZSwuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1dJVEhfQVBQSU5JVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXHRjbHRrXGxpYlx0azg0LmxpYiAuLlwuLlwuLlx0Y2x0a1xsaWJcdGNsODQubGliIG9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9fdGtpbnRlci5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL190a2ludGVyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE5MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL190a2ludGVyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcX3RraW50ZXIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHRjbHRrXGluY2x1ZGUsLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztXSVRIX0FQUElOSVQiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMCINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUJ1ZmZlclNlY3VyaXR5Q2hlY2s9IkZBTFNFIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZXRlY3Q2NEJpdFBvcnRhYmlsaXR5UHJvYmxlbXM9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9NQUNISU5FOkFNRDY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cdGNsdGtcbGliXHRrODQubGliIC4uXC4uXC4uXHRjbHRrXGxpYlx0Y2w4NC5saWIgb2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL190a2ludGVyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9IiINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vX3RraW50ZXIucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTkwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vX3RraW50ZXIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RraW50ZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2FtZDY0X21sNjQuYmF0IGIvUEMvVlM3LjEvYW1kNjRfbWw2NC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZhOWFjZjEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYW1kNjRfbWw2NC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBUcnkgdG8gZmluZCB0aGUgQU1ENjQgYXNzZW1ibGVyIGFuZCBjYWxsIGl0IHdpdGggdGhlIHN1cHBsaWVkIGFyZ3VtZW50cy4KLQotc2V0IE1MRVhFPU1pY3Jvc29mdCBQbGF0Zm9ybSBTREtcQmluXFdpbjY0XHg4NlxBTUQ2NFxtbDY0LkVYRQotCi1yZW0gRm9yIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgc2VlIGFsc28KLXJlbSBodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2xpYnJhcnkvZW4tdXMvd2luNjQvd2luNjQvd293NjRfaW1wbGVtZW50YXRpb25fZGV0YWlscy5hc3AKLQotaWYgZXhpc3QgIiVQcm9ncmFtRmlsZXMlXCVNTEVYRSUiICgKLSAgc2V0IE1MNjQ9IiVQcm9ncmFtRmlsZXMlXCVNTEVYRSUiCi0pIGVsc2UgaWYgZXhpc3QgIiVQcm9ncmFtVzY0MzIlXCVNTEVYRSUiICgKLSAgc2V0IE1MNjQ9IiVQcm9ncmFtVzY0MzIlXCVNTEVYRSUiCi0pIGVsc2UgKAotICBzZXQgTUw2ND1tbDY0LmV4ZQotKQotCi0lTUw2NCUgJSoKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5iYXQgYi9QQy9WUzcuMS9idWlsZF9zc2wuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmJlM2MwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2J1aWxkX3NzbC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxMiArMCwwIEBACi1pZiAiJTEiID09ICJSZWxlYXNlQU1ENjQiIGNhbGwgIiVNU1NkayVcU2V0RW52IiAvWFA2NCAvUkVUQUlMCi0KLUBlY2hvIG9mZgotaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAotICBpZiAlMSBFUVUgRGVidWcgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgKSBFTFNFICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICApCi0pCi0lSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMgotCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9idWlsZF9zc2wucHkgYi9QQy9WUzcuMS9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlOWY0ZTMuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvYnVpbGRfc3NsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLSMgU2NyaXB0IGZvciBidWlsZGluZyB0aGUgX3NzbCBhbmQgX2hhc2hsaWIgbW9kdWxlcyBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIHRoZSBhY3R1YWwgX3NzbC5weWQgYW5kIF9oYXNobGliLnB5ZCBETExzLgotCi0jIFRIRU9SRVRJQ0FMTFksIHlvdSBjYW46Ci0jICogVW5wYWNrIHRoZSBsYXRlc3QgU1NMIHJlbGVhc2Ugb25lIGxldmVsIGFib3ZlIHlvdXIgbWFpbiBQeXRob24gc291cmNlCi0jICAgZGlyZWN0b3J5LiAgSXQgaXMgbGlrZWx5IHlvdSB3aWxsIGFscmVhZHkgZmluZCB0aGUgemxpYiBsaWJyYXJ5IGFuZAotIyAgIGFueSBvdGhlciBleHRlcm5hbCBwYWNrYWdlcyB0aGVyZS4KLSMgKiBJbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBpcyBzb21ld2hlcmUgb24geW91ciBwYXRoLgotIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQ0J1aWxkIGRpcmVjdG9yeS4KLSMKLSMgaXQgc2hvdWxkIGNvbmZpZ3VyZSBhbmQgYnVpbGQgU1NMLCB0aGVuIGJ1aWxkIHRoZSBfc3NsIGFuZCBfaGFzaGxpYgotIyBQeXRob24gZXh0ZW5zaW9ucyB3aXRob3V0IGludGVydmVudGlvbi4KLQotaW1wb3J0IG9zLCBzeXMsIHJlCi0KLSMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgotZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgotICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKLSAgICByZXQgPSBbXQotICAgIGZvciBwIGluIGVudHJpZXM6Ci0gICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgaWYgZXh0cmFzOgotICAgICAgICBmb3IgcCBpbiBleHRyYXM6Ci0gICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgcmV0dXJuIHJldAotCi0jIEZpbmQgYSBzdWl0YWJsZSBQZXJsIGluc3RhbGxhdGlvbiBmb3IgT3BlblNTTC4KLSMgY3lnd2luIHBlcmwgZG9lcyAqbm90KiB3b3JrLiAgQWN0aXZlUGVybCBkb2VzLgotIyBCZWluZyBhIFBlcmwgZHVtbXksIHRoZSBzaW1wbGVzdCB3YXkgSSBjYW4gY2hlY2sgaXMgaWYgdGhlICJXaW4zMiIgcGFja2FnZQotIyBpcyBhdmFpbGFibGUuCi1kZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgotICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKHBlcmwgKyAnIC1lICJ1c2UgV2luMzI7IicpCi0gICAgICAgIGZoLnJlYWQoKQotICAgICAgICByYyA9IGZoLmNsb3NlKCkKLSAgICAgICAgaWYgcmM6Ci0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICByZXR1cm4gcGVybAotICAgIHByaW50ICJDYW4gbm90IGZpbmQgYSBzdWl0YWJsZSBQRVJMOiIKLSAgICBpZiBwZXJsczoKLSAgICAgICAgcHJpbnQgIiB0aGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IgotICAgICAgICBmb3IgcCBpbiBwZXJsczoKLSAgICAgICAgICAgIHByaW50ICIgIiwgcAotICAgICAgICBwcmludCAiIE5vbmUgb2YgdGhlc2UgdmVyc2lvbnMgYXBwZWFyIHN1aXRhYmxlIGZvciBidWlsZGluZyBPcGVuU1NMIgotICAgIGVsc2U6Ci0gICAgICAgIHByaW50ICIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIKLSAgICBwcmludCAiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIKLSAgICBwcmludCAiVGhlIFB5dGhvbiBTU0wgbW9kdWxlIHdhcyBub3QgYnVpbHQiCi0gICAgcmV0dXJuIE5vbmUKLQotIyBMb2NhdGUgdGhlIGJlc3QgU1NMIGRpcmVjdG9yeSBnaXZlbiBhIGZldyByb290cyB0byBsb29rIGludG8uCi1kZWYgZmluZF9iZXN0X3NzbF9kaXIoc291cmNlcyk6Ci0gICAgY2FuZGlkYXRlcyA9IFtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiBkbyBub3QgYWJzcGF0aCBzOyB0aGUgYnVpbGQgd2lsbCBmYWlsIGlmIGFueQotICAgICAgICAgICAgIyBoaWdoZXIgdXAgZGlyZWN0b3J5IG5hbWUgaGFzIHNwYWNlcyBpbiBpdC4KLSAgICAgICAgICAgIGZuYW1lcyA9IG9zLmxpc3RkaXIocykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgZm5hbWVzID0gW10KLSAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKLSAgICAgICAgICAgIGZxbiA9IG9zLnBhdGguam9pbihzLCBmbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnFuKSBhbmQgZm5hbWUuc3RhcnRzd2l0aCgib3BlbnNzbC0iKToKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChmcW4pCi0gICAgIyBOb3cgd2UgaGF2ZSBhbGwgdGhlIGNhbmRpZGF0ZXMsIGxvY2F0ZSB0aGUgYmVzdC4KLSAgICBiZXN0X3BhcnRzID0gW10KLSAgICBiZXN0X25hbWUgPSBOb25lCi0gICAgZm9yIGMgaW4gY2FuZGlkYXRlczoKLSAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiWy4tXSIsIG9zLnBhdGguYmFzZW5hbWUoYykpWzE6XQotICAgICAgICAjIGVnIC0gb3BlbnNzbC0wLjkuNy1iZXRhMSAtIGlnbm9yZSBhbGwgImJldGEiIG9yIGFueSBvdGhlciBxdWFsaWZpZXJzCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPj0gNDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHBhcnRzID4gYmVzdF9wYXJ0czoKLSAgICAgICAgICAgIGJlc3RfcGFydHMgPSBwYXJ0cwotICAgICAgICAgICAgYmVzdF9uYW1lID0gYwotICAgIGlmIGJlc3RfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJpbnQgIkZvdW5kIGFuIFNTTCBkaXJlY3RvcnkgYXQgJyVzJyIgJSAoYmVzdF9uYW1lLCkKLSAgICBlbHNlOgotICAgICAgICBwcmludCAiQ291bGQgbm90IGZpbmQgYW4gU1NMIGRpcmVjdG9yeSBpbiAnJXMnIiAlIChzb3VyY2VzLCkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICByZXR1cm4gYmVzdF9uYW1lCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBvcy5zeXN0ZW0oInBlcmwgQ29uZmlndXJlICIrY29uZmlndXJlKQotICAgIG9zLnN5c3RlbShkb19zY3JpcHQpCi0KLWRlZiBtYWluKCk6Ci0gICAgYnVpbGRfYWxsID0gIi1hIiBpbiBzeXMuYXJndgotICAgIGlmIHN5cy5hcmd2WzFdID09ICJSZWxlYXNlIjoKLSAgICAgICAgYXJjaCA9ICJ4ODYiCi0gICAgICAgIGRlYnVnID0gRmFsc2UKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX21hc20iCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudC5tYWsiCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiRGVidWciOgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgZGVidWcgPSBUcnVlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU4zMiIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb19tYXNtIgotICAgICAgICBtYWtlZmlsZT0ibXNcXGQzMi5tYWsiCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZUl0YW5pdW0iOgotICAgICAgICBhcmNoID0gImlhNjQiCi0gICAgICAgIGRlYnVnID0gRmFsc2UKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjY0SSIKLSAgICAgICAgZG9fc2NyaXB0ID0gIm1zXFxkb193aW42NGkiCi0gICAgICAgIG1ha2VmaWxlID0gIm1zXFxudC5tYWsiCi0gICAgICAgIG9zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX0lUQU5JVU0iCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiUmVsZWFzZUFNRDY0IjoKLSAgICAgICAgYXJjaD0iYW1kNjQiCi0gICAgICAgIGRlYnVnPUZhbHNlCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEEiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRhIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQubWFrIgotICAgICAgICBvcy5lbnZpcm9uWyJWU0VYVENPTVBfVVNFQ0wiXSA9ICJNU19PUFRFUk9OIgotICAgIG1ha2VfZmxhZ3MgPSAiIgotICAgIGlmIGJ1aWxkX2FsbDoKLSAgICAgICAgbWFrZV9mbGFncyA9ICItYSIKLSAgICAjIHBlcmwgc2hvdWxkIGJlIG9uIHRoZSBwYXRoLCBidXQgd2UgYWxzbyBsb29rIGluICJccGVybCIgYW5kICJjOlxccGVybCIKLSAgICAjIGFzICJ3ZWxsIGtub3duIiBsb2NhdGlvbnMKLSAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgWyJcXHBlcmxcXGJpbiIsICJDOlxccGVybFxcYmluIl0pCi0gICAgcGVybCA9IGZpbmRfd29ya2luZ19wZXJsKHBlcmxzKQotICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIHByaW50ICJGb3VuZCBhIHdvcmtpbmcgcGVybCBhdCAnJXMnIiAlIChwZXJsLCkKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAyIGxldmVscyB1cCBmcm9tIHBjYnVpbGQgLSBpZSwgc2FtZSBwbGFjZSB6bGliIGV0YyBhbGwgbGl2ZS4KLSAgICBzc2xfZGlyID0gZmluZF9iZXN0X3NzbF9kaXIoKCIuLlxcLi5cXC4uIiwpKQotICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIG9sZF9jZCA9IG9zLmdldGN3ZCgpCi0gICAgdHJ5OgotICAgICAgICBvcy5jaGRpcihzc2xfZGlyKQotICAgICAgICAjIElmIHRoZSBzc2wgbWFrZWZpbGVzIGRvIG5vdCBleGlzdCwgd2UgaW52b2tlIFBlcmwgdG8gZ2VuZXJhdGUgdGhlbS4KLSAgICAgICAgIyBEdWUgdG8gYSBidWcgaW4gdGhpcyBzY3JpcHQsIHRoZSBtYWtlZmlsZSBzb21ldGltZXMgZW5kZWQgdXAgZW1wdHkKLSAgICAgICAgIyBGb3JjZSBhIHJlZ2VuZXJhdGlvbiBpZiBpdCBpcy4KLSAgICAgICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKSBvciBvcy5wYXRoLmdldHNpemUobWFrZWZpbGUpPT0wOgotICAgICAgICAgICAgcHJpbnQgIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iCi0gICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgICAgICMgUHV0IG91ciB3b3JraW5nIFBlcmwgYXQgdGhlIGZyb250IG9mIG91ciBwYXRoCi0gICAgICAgICAgICBvcy5lbnZpcm9uWyJQQVRIIl0gPSBvcy5wYXRoLmRpcm5hbWUocGVybCkgKyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoc2VwICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdCi0gICAgICAgICAgICBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KQotICAgICAgICAgICAgaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgICAgICMgdGhlIGRvX21hc20gc2NyaXB0IGluIG9wZW5zc2wgZG9lc24ndCBnZW5lcmF0ZSBhIGRlYnVnCi0gICAgICAgICAgICAgICAgIyBidWlsZCBtYWtlZmlsZSBzbyB3ZSBnZW5lcmF0ZSBpdCBoZXJlOgotICAgICAgICAgICAgICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgIyBOb3cgcnVuIG1ha2UuCi0gICAgICAgIG1ha2VDb21tYW5kID0gIm5tYWtlIC9ub2xvZ28gUEVSTD1cIiVzXCIgLWYgXCIlc1wiIiAlKHBlcmwsIG1ha2VmaWxlKQotICAgICAgICBwcmludCAiRXhlY3V0aW5nIHNzbCBtYWtlZmlsZXM6IiwgbWFrZUNvbW1hbmQKLSAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgICAgICBpZiByYzoKLSAgICAgICAgICAgIHByaW50ICJFeGVjdXRpbmcgIittYWtlZmlsZSsiIGZhaWxlZCIKLSAgICAgICAgICAgIHByaW50IHJjCi0gICAgICAgICAgICBzeXMuZXhpdChyYykKLSAgICBmaW5hbGx5OgotICAgICAgICBvcy5jaGRpcihvbGRfY2QpCi0gICAgIyBBbmQgZmluYWxseSwgd2UgY2FuIGJ1aWxkIHRoZSBfc3NsIG1vZHVsZSBpdHNlbGYgZm9yIFB5dGhvbi4KLSAgICBkZWZzID0gIlNTTF9ESVI9XCIlc1wiIiAlIChzc2xfZGlyLCkKLSAgICBpZiBkZWJ1ZzoKLSAgICAgICAgZGVmcyA9IGRlZnMgKyAiICIgKyAiREVCVUc9MSIKLSAgICBpZiBhcmNoIGluICgnYW1kNjQnLCAnaWE2NCcpOgotICAgICAgICBkZWZzID0gZGVmcyArICIgRVhUUkFfQ0ZMQUdTPS9HUy0gRVhUUkFfTElCUz1idWZmZXJvdmVyZmxvd1UubGliIgotICAgIG1ha2VDb21tYW5kID0gJ25tYWtlIC9ub2xvZ28gLWYgX3NzbC5tYWsgJyArIGRlZnMgKyAiICIgKyBtYWtlX2ZsYWdzCi0gICAgcHJpbnQgIkV4ZWN1dGluZzoiLCBtYWtlQ29tbWFuZAotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJjID0gb3Muc3lzdGVtKG1ha2VDb21tYW5kKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2J6Mi52Y3Byb2ogYi9QQy9WUzcuMS9iejIudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYjAwNWExLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2J6Mi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9ImJ6MiINCi0JUm9vdE5hbWVzcGFjZT0iYnoyIg0KLQlTY2NQcm9qZWN0TmFtZT0iYnoyIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMsLi5cLi5cLi5cYnppcDItMS4wLjMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIuLlwuLlwuLlxiemlwMi0xLjAuM1xsaWJiejIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL2J6Ml9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9Im1zdmNydCxsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9iejJfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejJfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYw0KLSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxiejIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Mi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4vLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iLi5cLi5cLi5cYnppcDItMS4wLjNcbGliYnoyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9iejIucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vYnoyLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL2J6Mi5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgLi5cLi5cLi5cYnppcDItMS4wLjMNCi1ubWFrZSAvbm9sb2dvIC9mIG1ha2VmaWxlLm1zYyBsaWINCi0iLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VBTUQ2NHxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSJhbWQ2NC10ZW1wLXJlbGVhc2VcYnoyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXC4uXGJ6aXAyLTEuMC4zIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Ii4uXC4uXC4uXGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vYnoyLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL2J6Mi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9iejIubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkIC4uXC4uXC4uXGJ6aXAyLTEuMC4zDQotbm1ha2UgL25vbG9nbyAvZiBtYWtlZmlsZS5tc2MgbGliDQotIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL2RiLmJ1aWxkIGIvUEMvVlM3LjEvZGIuYnVpbGQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhODdmNzQuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvZGIuYnVpbGQKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiPz4KLTxwcm9qZWN0PgotIDx0YXJnZXQgbmFtZT0iYWxsIiBkZXNjcmlwdGlvbj0iQnVpbGQgYWxsIHRhcmdldHMuIj4KLSAgIDxzb2x1dGlvbiBjb25maWd1cmF0aW9uPSJyZWxlYXNlIj4KLSAgICAgPHByb2plY3RzPgotICAgICAgIDxpbmNsdWRlIG5hbWU9ImRiX3N0YXRpYy52Y3Byb2oiIC8+Ci0gICAgIDwvcHJvamVjdHM+Ci0gICA8L3NvbHV0aW9uPgotIDwvdGFyZ2V0PgotPC9wcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvZmllbGQzLnB5IGIvUEMvVlM3LjEvZmllbGQzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2YyNGNhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL2ZpZWxkMy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQW4gYWJzdXJkIHdvcmthcm91bmQgZm9yIHRoZSBsYWNrIG9mIGFyaXRobWV0aWMgaW4gTVMncyByZXNvdXJjZSBjb21waWxlci4KLSMgQWZ0ZXIgYnVpbGRpbmcgUHl0aG9uLCBydW4gdGhpcywgdGhlbiBwYXN0ZSB0aGUgb3V0cHV0IGludG8gdGhlIGFwcHJvcHJpYXRlCi0jIHBhcnQgb2YgUENccHl0aG9uX250LnJjLgotIyBFeGFtcGxlIG91dHB1dDoKLSMKLSMgKiBGb3IgMi4zYTAsCi0jICogUFlfTUlDUk9fVkVSU0lPTiA9IDAKLSMgKiBQWV9SRUxFQVNFX0xFVkVMID0gJ2FscGhhJyA9IDB4QQotIyAqIFBZX1JFTEVBU0VfU0VSSUFMID0gMQotIyAqCi0jICogYW5kIDAqMTAwMCArIDEwKjEwICsgMSA9IDEwMS4KLSMgKi8KLSMgI2RlZmluZSBGSUVMRDMgMTAxCi0KLWltcG9ydCBzeXMKLQotbWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCA9IHN5cy52ZXJzaW9uX2luZm8KLWxldmVsbnVtID0geydhbHBoYSc6IDB4QSwKLSAgICAgICAgICAgICdiZXRhJzogMHhCLAotICAgICAgICAgICAgJ2NhbmRpZGF0ZSc6IDB4QywKLSAgICAgICAgICAgICdmaW5hbCc6IDB4RiwKLSAgICAgICAgICAgfVtsZXZlbF0KLXN0cmluZyA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0gIyBsaWtlICcyLjNhMCcKLQotcHJpbnQgIiAqIEZvciAlcywiICUgc3RyaW5nCi1wcmludCAiICogUFlfTUlDUk9fVkVSU0lPTiA9ICVkIiAlIG1pY3JvCi1wcmludCAiICogUFlfUkVMRUFTRV9MRVZFTCA9ICVyID0gJXMiICUgKGxldmVsLCBoZXgobGV2ZWxudW0pKQotcHJpbnQgIiAqIFBZX1JFTEVBU0VfU0VSSUFMID0gJWQiICUgc2VyaWFsCi1wcmludCAiICoiCi0KLWZpZWxkMyA9IG1pY3JvICogMTAwMCArIGxldmVsbnVtICogMTAgKyBzZXJpYWwKLQotcHJpbnQgIiAqIGFuZCAlZCoxMDAwICsgJWQqMTAgKyAlZCA9ICVkIiAlIChtaWNybywgbGV2ZWxudW0sIHNlcmlhbCwgZmllbGQzKQotcHJpbnQgIiAqLyIKLXByaW50ICIjZGVmaW5lIEZJRUxEMyIsIGZpZWxkMwpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvaW5zdGFsbGVyLmJtcCBiL1BDL1ZTNy4xL2luc3RhbGxlci5ibXAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NzVlMTkuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvaW5zdGFsbGVyLmJtcAorKysgL2Rldi9udWxsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLmMgYi9QQy9WUzcuMS9tYWtlX2J1aWxkaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYWEyYjY2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLQotLyogVGhpcyBmaWxlIGNyZWF0ZXMgdGhlIGdldGJ1aWxkaW5mby5vIG9iamVjdCwgYnkgZmlyc3QKLSAgIGludm9raW5nIHN1YndjcmV2LmV4ZSAoaWYgZm91bmQpLCBhbmQgdGhlbiBpbnZva2luZyBjbC5leGUuCi0gICBBcyBhIHNpZGUgZWZmZWN0LCBpdCBtaWdodCBnZW5lcmF0ZSBQQ1xWUzcuMVxnZXRidWlsZGluZm8yLmMKLSAgIGFsc28uIElmIHRoaXMgaXNuJ3QgYSBzdWJ2ZXJzaW9uIGNoZWNrb3V0LCBvciBzdWJ3Y3JldiBpc24ndAotICAgZm91bmQsIGl0IGNvbXBpbGVzIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgaW5zdGVhZC4KLQotICAgQ3VycmVudGx5LCBzdWJ3Y3Jldi5leGUgaXMgZm91bmQgZnJvbSB0aGUgcmVnaXN0cnkgZW50cmllcwotICAgb2YgVG9ydG9pc2VTVk4uCi0KLSAgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBwbGFjZSBnZXRidWlsZGluZm8ubyBpbnRvIHRoZSBwcm9wZXIKLSAgIGJpbmFyeSBkaXJlY3RvcnkuIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBhcyB0aGlzIHRvb2wgaXMKLSAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKLSAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KLQotKi8KLQotaW50IG1ha2VfYnVpbGRpbmZvMigpCi17Ci0gICAgc3RydWN0IF9zdGF0IHN0OwotICAgIEhLRVkgaFRvcnRvaXNlOwotICAgIGNoYXIgY29tbWFuZFs1MDBdOwotICAgIERXT1JEIHR5cGUsIHNpemU7Ci0gICAgaWYgKF9zdGF0KCIuc3ZuIiwgJnN0KSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIC8qIEFsbG93IHN1cHByZXNzaW9uIG9mIHN1YndjcmV2LmV4ZSBpbnZvY2F0aW9uIGlmIGEgbm9fc3Vid2NyZXYgZmlsZSBpcyBwcmVzZW50LiAqLwotICAgIGlmIChfc3RhdCgibm9fc3Vid2NyZXYiLCAmc3QpID09IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGlmIChSZWdPcGVuS2V5KEhLRVlfTE9DQUxfTUFDSElORSwgIlNvZnR3YXJlXFxUb3J0b2lzZVNWTiIsICZoVG9ydG9pc2UpICE9IEVSUk9SX1NVQ0NFU1MgJiYKLSAgICAgICAgUmVnT3BlbktleShIS0VZX0NVUlJFTlRfVVNFUiwgIlNvZnR3YXJlXFxUb3J0b2lzZVNWTiIsICZoVG9ydG9pc2UpICE9IEVSUk9SX1NVQ0NFU1MpCi0gICAgICAgIC8qIFRvcnRvaXNlIG5vdCBpbnN0YWxsZWQgKi8KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgY29tbWFuZFswXSA9ICciJzsgIC8qIHF1b3RlIHRoZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlICovCi0gICAgc2l6ZSA9IHNpemVvZihjb21tYW5kKSAtIDE7Ci0gICAgaWYgKFJlZ1F1ZXJ5VmFsdWVFeChoVG9ydG9pc2UsICJEaXJlY3RvcnkiLCAwLCAmdHlwZSwgY29tbWFuZCsxLCAmc2l6ZSkgIT0gRVJST1JfU1VDQ0VTUyB8fAotICAgICAgICB0eXBlICE9IFJFR19TWikKLSAgICAgICAgLyogUmVnaXN0cnkgY29ycnVwdGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIHN0cmNhdChjb21tYW5kLCAiYmluXFxzdWJ3Y3Jldi5leGUiKTsKLSAgICBpZiAoX3N0YXQoY29tbWFuZCsxLCAmc3QpIDwgMCkKLSAgICAgICAgLyogc3Vid2NyZXYuZXhlIG5vdCBwYXJ0IG9mIHRoZSByZWxlYXNlICovCi0gICAgICAgIHJldHVybiAwOwotICAgIHN0cmNhdChjb21tYW5kLCAiXCIgLi5cXC4uIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgZ2V0YnVpbGRpbmZvMi5jIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgaWYgKHN5c3RlbShjb21tYW5kKSA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAxOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciphcmd2W10pCi17Ci0gICAgY2hhciBjb21tYW5kWzUwMF0gPSAiY2wuZXhlIC1jIC1EX1dJTjMyIC1EVVNFX0RMX0VYUE9SVCAtRF9XSU5ET1dTIC1EV0lOMzIgLURfV0lORExMICI7Ci0gICAgaW50IGRvX3VubGluaywgcmVzdWx0OwotICAgIGlmIChhcmdjICE9IDIpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKVxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2UiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIkRlYnVnIikgPT0gMCkgewotICAgICAgICBzdHJjYXQoY29tbWFuZCwgIi1EX0RFQlVHIC1NRGQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUl0YW5pdW0iKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EIC9VU0VDTDpNU19JVEFOSVVNICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VBTUQ2NCIpID09IDApIHsKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICItTUQgIik7Ci0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLU1EIC9VU0VDTDpNU19PUFRFUk9OICIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uICVzXG4iLCBhcmd2WzFdKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0KLSAgICBpZiAoKGRvX3VubGluayA9IG1ha2VfYnVpbGRpbmZvMigpKSkKLSAgICAgICAgc3RyY2F0KGNvbW1hbmQsICJnZXRidWlsZGluZm8yLmMgLURTVUJXQ1JFViAiKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cmNhdChjb21tYW5kLCAiLi5cXC4uXFxNb2R1bGVzXFxnZXRidWlsZGluZm8uYyIpOwotICAgIHN0cmNhdChjb21tYW5kLCAiIC1Gb2dldGJ1aWxkaW5mby5vIC1JLi5cXC4uXFxJbmNsdWRlIC1JLi5cXC4uXFxQQyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIHJlc3VsdCA9IHN5c3RlbShjb21tYW5kKTsKLSAgICBpZiAoZG9fdW5saW5rKQotICAgICAgICB1bmxpbmsoImdldGJ1aWxkaW5mbzIuYyIpOwotICAgIGlmIChyZXN1bHQgPCAwKQotICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwotICAgIHJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8udmNwcm9qIGIvUEMvVlM3LjEvbWFrZV9idWlsZGluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMGM4YTVkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL21ha2VfYnVpbGRpbmZvLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDEyMiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0ibWFrZV9idWlsZGluZm8iDQotCVByb2plY3RHVUlEPSJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCi0JS2V5d29yZD0iV2luMzJQcm9qIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxtYWtlX2J1aWxkaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRSINCi0JCQkJTWluaW1hbFJlYnVpbGQ9IlRSVUUiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIwIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iNCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcikvbWFrZV9idWlsZGluZm8uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpL21ha2VfYnVpbGRpbmZvLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcbWFrZV9idWlsZGluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iNCINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjAiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCi0JCQkJRW5hYmxlQ09NREFURm9sZGluZz0iMiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJRmlsdGVyPSJjcHA7YztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteCINCi0JCQlVbmlxdWVJZGVudGlmaWVyPSJ7NEZDNzM3RjEtQzdBNS00Mzc2LUEwNjYtMkEzMkQ3NTJBMkZGfSI+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuXG1ha2VfYnVpbGRpbmZvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiBiL1BDL1ZTNy4xL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZmZhNGViLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTQyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlSb290TmFtZXNwYWNlPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlTY2NQcm9qZWN0TmFtZT0ibWFrZV92ZXJzaW9uaW5mbyINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXG1ha2VfdmVyc2lvbmluZm8iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iLlxtYWtlX3ZlcnNpb25pbmZvLmV4ZSAmZ3Q7Li5cLi5cUENccHl0aG9ubnRfcmMuaA0KLSINCi0JCQkJT3V0cHV0cz0iLi5cLi5cUENccHl0aG9ubnRfcmMuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vbWFrZV92ZXJzaW9uaW5mby5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9tYWtlX3ZlcnNpb25pbmZvLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiQoVGFyZ2V0RmlsZU5hbWUpICZndDsgLi5cLi5cUENccHl0aG9uX250LmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcbWFrZV92ZXJzaW9uaW5mbyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfREVCVUc7X0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJQnJvd3NlSW5mb3JtYXRpb249IjEiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJQ29tbWFuZExpbmU9Ii5cbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSAmZ3Q7Li5cLi5cUENccHl0aG9ubnRfcmNfZC5oDQotIg0KLQkJCQlPdXRwdXRzPSIuLlwuLlxQQ1xweXRob25udF9yY19kLmgiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9tYWtlX3ZlcnNpb25pbmZvX2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vbWFrZV92ZXJzaW9uaW5mb19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiQoVGFyZ2V0RmlsZU5hbWUpICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtYWtlX3ZlcnNpb25pbmZvLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9wY2J1aWxkLnNsbiBiL1BDL1ZTNy4xL3BjYnVpbGQuc2xuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MjBmMTljLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3BjYnVpbGQuc2xuCisrKyAvZGV2L251bGwKQEAgLTEsMjc1ICswLDAgQEAKLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDguMDANCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zb2NrZXQiLCAiX3NvY2tldC52Y3Byb2oiLCAiezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3NsIiwgIl9zc2wudmNwcm9qIiwgIns4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSA9IHtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3Byb2oiLCAiezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiejIiLCAiYnoyLnZjcHJvaiIsICJ7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfdmVyc2lvbmluZm8iLCAibWFrZV92ZXJzaW9uaW5mby52Y3Byb2oiLCAie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweWV4cGF0IiwgInB5ZXhwYXQudmNwcm9qIiwgIns3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uIiwgInB5dGhvbi52Y3Byb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob25jb3JlIiwgInB5dGhvbmNvcmUudmNwcm9qIiwgIntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfSA9IHtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9DQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSA9IHtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjcHJvaiIsICJ7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNlbGVjdCIsICJzZWxlY3QudmNwcm9qIiwgIns5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidW5pY29kZWRhdGEiLCAidW5pY29kZWRhdGEudmNwcm9qIiwgIntGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmNwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAid2luc291bmQiLCAid2luc291bmQudmNwcm9qIiwgIns1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2VsZW1lbnR0cmVlIiwgIl9lbGVtZW50dHJlZS52Y3Byb2oiLCAiezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3Byb2oiLCAie0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfbXNpIiwgIl9tc2kudmNwcm9qIiwgInsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2N0eXBlcyIsICJfY3R5cGVzLnZjcHJvaiIsICJ7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXNfdGVzdCIsICJfY3R5cGVzX3Rlc3QudmNwcm9qIiwgIns4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fSA9IHtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3NxbGl0ZTMiLCAiX3NxbGl0ZTMudmNwcm9qIiwgInsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLUdsb2JhbA0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uQ29uZmlndXJhdGlvbikgPSBwcmVTb2x1dGlvbg0KLQkJRGVidWcgPSBEZWJ1Zw0KLQkJUmVsZWFzZSA9IFJlbGVhc2UNCi0JCVJlbGVhc2VBTUQ2NCA9IFJlbGVhc2VBTUQ2NA0KLQkJUmVsZWFzZUl0YW5pdW0gPSBSZWxlYXNlSXRhbml1bQ0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oUHJvamVjdENvbmZpZ3VyYXRpb24pID0gcG9zdFNvbHV0aW9uDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXszMjRGNjZDMi00NEQwLTRENTAtQjk3OS1GOURBRTdGRDM2REJ9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MzI0RjY2QzItNDREMC00RDUwLUI5NzktRjlEQUU3RkQzNkRCfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezMyNEY2NkMyLTQ0RDAtNEQ1MC1COTc5LUY5REFFN0ZEMzZEQn0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs4RTg1QkE1NC04QTQ3LTRDOEItQjcyRS04RTE3NTc5Q0M2RDd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OEU4NUJBNTQtOEE0Ny00QzhCLUI3MkUtOEUxNzU3OUNDNkQ3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezhFODVCQTU0LThBNDctNEM4Qi1CNzJFLThFMTc1NzlDQzZEN30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1OUNCRjQ3NC05RTA2LTRDNTAtOTE0Mi1DNDRBMTE4QkI0NDd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTlDQkY0NzQtOUUwNi00QzUwLTkxNDItQzQ0QTExOEJCNDQ3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezU5Q0JGNDc0LTlFMDYtNEM1MC05MTQyLUM0NEExMThCQjQ0N30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1QjUxREZGNy01REMwLTQxRjgtODc5MS1BNEFCNzExNEExNTF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NUI1MURGRjctNURDMC00MUY4LTg3OTEtQTRBQjcxMTRBMTUxfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezVCNTFERkY3LTVEQzAtNDFGOC04NzkxLUE0QUI3MTE0QTE1MX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtBQzU1Nzc4OC02MzU0LTQzRjctQkUwNS1DOUM4QzU5QTM0NEF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QUM1NTc3ODgtNjM1NC00M0Y3LUJFMDUtQzlDOEM1OUEzNDRBfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0FDNTU3Nzg4LTYzNTQtNDNGNy1CRTA1LUM5QzhDNTlBMzQ0QX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs3RTU1MTM5My0zQzQzLTQ3RjgtOUYzRi01QkMzNjhBNkM0ODd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7N0U1NTEzOTMtM0M0My00N0Y4LTlGM0YtNUJDMzY4QTZDNDg3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezdFNTUxMzkzLTNDNDMtNDdGOC05RjNGLTVCQzM2OEE2QzQ4N30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs5NzIzOUE1Ni1EQkMwLTQxRDItQkMxNC1DODdEOUI5N0Q2M0J9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OTcyMzlBNTYtREJDMC00MUQyLUJDMTQtQzg3RDlCOTdENjNCfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezk3MjM5QTU2LURCQzAtNDFEMi1CQzE0LUM4N0Q5Qjk3RDYzQn0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGQTVGQzdFQi1DNzJGLTQxNUYtQUU0Mi05MURENjA1QUJEREF9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RkE1RkM3RUItQzcyRi00MTVGLUFFNDItOTFERDYwNUFCRERBfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJe0ZBNUZDN0VCLUM3MkYtNDE1Ri1BRTQyLTkxREQ2MDVBQkREQX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXs1MUYzNUZBRS1GQjkyLTRCMkMtOTE4Ny0xNTQyQzA2NUFENzd9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7NTFGMzVGQUUtRkI5Mi00QjJDLTkxODctMTU0MkMwNjVBRDc3fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezUxRjM1RkFFLUZCOTItNEIyQy05MTg3LTE1NDJDMDY1QUQ3N30uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsxOTY2RERFMi00QUI3LTRFNEUtQUNDOS1DMTIxRTREMzdGOEV9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MTk2NkRERTItNEFCNy00RTRFLUFDQzktQzEyMUU0RDM3RjhFfS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezE5NjZEREUyLTRBQjctNEU0RS1BQ0M5LUMxMjFFNEQzN0Y4RX0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2VJdGFuaXVtLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyQzBCRUZCOS03MEUyLTRGODAtQUM1Qi00QUI4RUUwMjM1NzR9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7MkMwQkVGQjktNzBFMi00RjgwLUFDNUItNEFCOEVFMDIzNTc0fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezJDMEJFRkI5LTcwRTItNEY4MC1BQzVCLTRBQjhFRTAyMzU3NH0uUmVsZWFzZUl0YW5pdW0uQnVpbGQuMCA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5EZWJ1Zy5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YyMkY0MEY0LUQzMTgtNDBEQy05NkIzLTg4REM4MUNFMDg5NH0uRGVidWcuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2UuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2VBTUQ2NC5BY3RpdmVDZmcgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXtGMjJGNDBGNC1EMzE4LTQwREMtOTZCMy04OERDODFDRTA4OTR9LlJlbGVhc2VBTUQ2NC5CdWlsZC4wID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7RjIyRjQwRjQtRDMxOC00MERDLTk2QjMtODhEQzgxQ0UwODk0fS5SZWxlYXNlSXRhbml1bS5BY3RpdmVDZmcgPSBSZWxlYXNlSXRhbml1bXxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uRGVidWcuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs4Q0YzMzREOS00RjgyLTQyRUItOTdBRi04MzU5MkM1QUZEMkZ9LkRlYnVnLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZS5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlQU1ENjQuQWN0aXZlQ2ZnID0gUmVsZWFzZUFNRDY0fFdpbjMyDQotCQl7OENGMzM0RDktNEY4Mi00MkVCLTk3QUYtODM1OTJDNUFGRDJGfS5SZWxlYXNlQU1ENjQuQnVpbGQuMCA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezhDRjMzNEQ5LTRGODItNDJFQi05N0FGLTgzNTkyQzVBRkQyRn0uUmVsZWFzZUl0YW5pdW0uQWN0aXZlQ2ZnID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUFNRDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2VBTUQ2NHxXaW4zMg0KLQkJezJGRjBBMzEyLTIyRjktNEMzNC1CMDcwLTg0MjkxNkRFMjdBOX0uUmVsZWFzZUFNRDY0LkJ1aWxkLjAgPSBSZWxlYXNlQU1ENjR8V2luMzINCi0JCXsyRkYwQTMxMi0yMkY5LTRDMzQtQjA3MC04NDI5MTZERTI3QTl9LlJlbGVhc2VJdGFuaXVtLkFjdGl2ZUNmZyA9IFJlbGVhc2VJdGFuaXVtfFdpbjMyDQotCQl7MkZGMEEzMTItMjJGOS00QzM0LUIwNzAtODQyOTE2REUyN0E5fS5SZWxlYXNlSXRhbml1bS5CdWlsZC4wID0gUmVsZWFzZUl0YW5pdW18V2luMzINCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uSXRlbXMpID0gcG9zdFNvbHV0aW9uDQotCQkuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jID0gLi5cTW9kdWxlc1xnZXRidWlsZGluZm8uYw0KLQkJcmVhZG1lLnR4dCA9IHJlYWRtZS50eHQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKEV4dGVuc2liaWxpdHlHbG9iYWxzKSA9IHBvc3RTb2x1dGlvbg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUFkZElucykgPSBwb3N0U29sdXRpb24NCi0JRW5kR2xvYmFsU2VjdGlvbg0KLUVuZEdsb2JhbA0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5ZXhwYXQudmNwcm9qIGIvUEMvVlM3LjEvcHlleHBhdC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwNzM5ZmEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHlleHBhdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5ZXhwYXQiDQotCVNjY1Byb2plY3ROYW1lPSJweWV4cGF0Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtfREVCVUc7SEFWRV9FWFBBVF9IO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdF9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXRfZC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQywuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5ZXhwYXQucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHlleHBhdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weWV4cGF0LmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLi8uIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVxweWV4cGF0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfSVRBTklVTSAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9weWV4cGF0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5ZXhwYXQucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vcHlleHBhdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHB5ZXhwYXQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OICAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDLC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHlleHBhdC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weWV4cGF0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5ZXhwYXQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHlleHBhdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHBhcnNlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHRvay5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uLmJ1aWxkIGIvUEMvVlM3LjEvcHl0aG9uLmJ1aWxkCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzExMDFkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbi5idWlsZAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCI/PgotPHByb2plY3Q+Ci0gPHRhcmdldCBuYW1lPSJhbGwiIGRlc2NyaXB0aW9uPSJCdWlsZCBhbGwgdGFyZ2V0cy4iPgotICAgPHNvbHV0aW9uIGNvbmZpZ3VyYXRpb249InJlbGVhc2UiPgotICAgICA8cHJvamVjdHM+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0ibWFrZV92ZXJzaW9uaW5mby52Y3Byb2oiIC8+Ci0gICAgIDwvcHJvamVjdHM+Ci0gICA8L3NvbHV0aW9uPgotICAgPGV4ZWMgcHJvZ3JhbT0ibWFrZV92ZXJzaW9uaW5mbyIgb3V0cHV0PSJweXRob25udF9yYy5oIiAvPgotCi0gICA8c29sdXRpb24gY29uZmlndXJhdGlvbj0icmVsZWFzZSIgc29sdXRpb25maWxlPSJwY2J1aWxkLnNsbiI+Ci0gICAgIDxleGNsdWRlcHJvamVjdHM+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iX3RraW50ZXIudmNwcm9qIiAvPgotICAgICAgIDxpbmNsdWRlIG5hbWU9ImJ6Mi52Y3Byb2oiIC8+Ci0gICAgICAgPGluY2x1ZGUgbmFtZT0iX3NxbGl0ZTMudmNwcm9qIiAvPgotICAgICAgIDxpbmNsdWRlIG5hbWU9Il9zc2wudmNwcm9qIiAvPgotICAgICA8L2V4Y2x1ZGVwcm9qZWN0cz4KLSAgIDwvc29sdXRpb24+Ci0gPC90YXJnZXQ+Ci08L3Byb2plY3Q+CmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24uaXNzIGIvUEMvVlM3LjEvcHl0aG9uLmlzcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2E2YTNjMC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob24uaXNzCisrKyAvZGV2L251bGwKQEAgLTEsMzQxICswLDAgQEAKLTsgU2NyaXB0IGdlbmVyYXRlZCBieSB0aGUgSW5ubyBTZXR1cCBTY3JpcHQgV2l6YXJkLgotOyBTRUUgVEhFIERPQ1VNRU5UQVRJT04gRk9SIERFVEFJTFMgT04gQ1JFQVRJTkcgSU5OTyBTRVRVUCBTQ1JJUFQgRklMRVMhCi0KLTsgVGhpcyBpcyB0aGUgd2hvbGUgYmFsbCBvZiB3YXggZm9yIGFuIElubm8gaW5zdGFsbGVyIGZvciBQeXRob24uCi07IFRvIHVzZSwgZG93bmxvYWQgSW5ubyBTZXR1cCBmcm9tIGh0dHA6Ly93d3cuanJzb2Z0d2FyZS5vcmcvaXNkbC5odG0vLAotOyBpbnN0YWxsIGl0LCBhbmQgZG91YmxlLWNsaWNrIG9uIHRoaXMgZmlsZS4gIFRoYXQgbGF1bmNoZXMgdGhlIElubm8KLTsgc2NyaXB0IGNvbXBpbGVyLiAgVGhlIEdVSSBpcyBleHRlbWVseSBzaW1wbGUsIGFuZCBoYXMgb25seSBvbmUgYnV0dG9uCi07IHlvdSBtYXkgbm90IHJlY29nbml6ZSBpbnN0YW50bHk6ICBjbGljayBpdC4gIFlvdSdyZSBkb25lLiAgSXQgYnVpbGRzCi07IHRoZSBpbnN0YWxsZXIgaW50byBQQ0J1aWxkL1B5dGhvbi0yLjJhMS5leGUuICBTaXplIGFuZCBzcGVlZCBvZiB0aGUKLTsgaW5zdGFsbGVyIGFyZSBjb21wZXRpdGl2ZSB3aXRoIHRoZSBXaXNlIGluc3RhbGxlcjsgSW5ubyB1bmluc3RhbGwKLTsgc2VlbXMgbXVjaCBxdWlja2VyIHRoYW4gV2lzZSAoYnV0IGFsc28gZmVlYmxlciwgYW5kIHRoZSB1bmluc3RhbGwKLTsgbG9nIGlzIGluIHNvbWUgdW4oaHVtYW4pcmVhZGFibGUgYmluYXJ5IGZvcm1hdCkuCi07Ci07IFdoYXQncyBEb25lCi07IC0tLS0tLS0tLS0tCi07IEFsbCB0aGUgdXN1YWwgV2luZG93cyBQeXRob24gZmlsZXMgYXJlIGluc3RhbGxlZCBieSB0aGlzIG5vdy4KLTsgQWxsIHRoZSB1c3VhbCBXaW5kb3dzIFB5dGhvbiBTdGFydCBtZW51IGVudHJpZXMgYXJlIGNyZWF0ZWQgYW5kCi07IHdvcmsgZmluZS4KLTsgLnB5LCAucHl3LCAucHljIGFuZCAucHlvIGV4dGVuc2lvbnMgYXJlIHJlZ2lzdGVyZWQuCi07ICAgICBQUk9CTEVNOiAgSW5ubyB1bmluc3RhbGwgZG9lcyBub3QgcmVzdG9yZSB0aGVpciBwcmV2aW91cyByZWdpc3RyeQotOyAgICAgICAgICAgICAgIGFzc29jaWF0aW9ucyAoaWYgYW55KS4gIFdpc2UgZGlkLiAgVGhpcyB3aWxsIG1ha2UgbGlmZQotOyAgICAgICAgICAgICAgIGRpZmZpY3VsdCBmb3IgYWxwaGEgKGV0YykgdGVzdGVycy4KLTsgVGhlIFB5dGhvbiBpbnN0YWxsIGlzIGZ1bGx5IGZ1bmN0aW9uYWwgZm9yICJ0eXBpY2FsIiB1c2VzLgotOwotOyBXaGF0J3MgTm90IERvbmUKLTsgLS0tLS0tLS0tLS0tLS0tCi07IE5vbmUgb2YgIk1hcmsgSGFtbW9uZCdzIiByZWdpc3RyeSBlbnRyaWVzIGFyZSB3cml0dGVuLgotOyBObyBpbnN0YWxsYXRpb24gb2YgZmlsZXMgaXMgZG9uZSBpbnRvIHRoZSBzeXN0ZW0gZGlyOgotOyAgICAgVGhlIE1TIERMTHMgYXJlbid0IGhhbmRsZWQgYXQgYWxsIGJ5IHRoaXMgeWV0LgotOyAgICAgUHl0aG9uMjIuZGxsIGlzIHVucGFja2VkIGludG8gdGhlIG1haW4gUHl0aG9uIGRpci4KLTsKLTsgSW5ubyBjYW4ndCBkbyBkaWZmZXJlbnQgdGhpbmdzIG9uIE5ULzIwMDAgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHVzZXIKLTsgaGFzIEFkbWluIHByaXZpbGVnZXMsIHNvIEkgZG9uJ3Qga25vdyBob3cgdG8gInNvbHZlIiBlaXRoZXIgb2YgdGhvc2UsCi07IHNob3J0IG9mIGJ1aWxkaW5nIHR3byBpbnN0YWxsZXJzIChvbmUgKnJlcXVpcmluZyogQWRtaW4gcHJpdnMsIHRoZQotOyBvdGhlciBub3QgZG9pbmcgYW55dGhpbmcgdGhhdCBuZWVkcyBBZG1pbiBwcml2cykuCi07Ci07IElubm8gaGFzIG5vIGNvbmNlcHQgb2YgdmFyaWFibGVzLCBzbyBsb3RzIG9mIGxpbmVzIGluIHRoaXMgZmlsZSBuZWVkCi07IHRvIGJlIGZpZGRsZWQgYnkgaGFuZCBhY3Jvc3MgcmVsZWFzZXMuICBTaW1wbGVzdCB3YXkgb3V0OiAgc3RpY2sgdGhpcwotOyBmaWxlIGluIGEgZ2lhbnQgdHJpcGxlLXF1b3RlZCByLXN0cmluZyAobm90ZSB0aGF0IGJhY2tzbGFzaGVzIGFyZQotOyByZXF1aXJlZCBhbGwgb3ZlciB0aGUgcGxhY2UgaGVyZSAtLSBmb3J3YXJkIHNsYXNoZXMgRE9OJ1QgV09SSyBpbgotOyBJbm5vKSwgYW5kIHVzZSAlKHlhZGRhKXMgc3RyaW5nIGludGVycG9sYXRpb24gdG8gZG8gc3Vic3RpdHV0aW9uczsgaS5lLiwKLTsgd3JpdGUgYSB2ZXJ5IHNpbXBsZSBQeXRob24gcHJvZ3JhbSB0byAqcHJvZHVjZSogdGhpcyBzY3JpcHQuCi0KLVtTZXR1cF0KLUFwcE5hbWU9UHl0aG9uIGFuZCBjb21iaW5lZCBXaW4zMiBFeHRlbnNpb25zCi1BcHBWZXJOYW1lPVB5dGhvbiAyLjIuMiBhbmQgY29tYmluZWQgV2luMzIgRXh0ZW5zaW9ucyAxNTAKLUFwcElkPVB5dGhvbiAyLjIuMi4xNTAKLUFwcFZlcnNpb249Mi4yLjIuMTUwCi1BcHBDb3B5cmlnaHQ9UHl0aG9uIGlzIENvcHlyaWdodCCpIDIwMDEgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24uIFdpbjMyIEV4dGVuc2lvbnMgYXJlIENvcHlyaWdodCCpIDE5OTYtMjAwMSBHcmVnIFN0ZWluIGFuZCBNYXJrIEhhbW1vbmQuCi0KLTsgRGVmYXVsdCBpbnN0YWxsIGRpcjsgdmFsdWUgb2Yge2FwcH0gbGF0ZXIgKHVubGVzcyB1c2VyIG92ZXJyaWRlcykuCi07IHtzZH0gPSBzeXN0ZW0gcm9vdCBkcml2ZSwgcHJvYmFibHkgIkM6Ii4KLURlZmF1bHREaXJOYW1lPXtzZH1cUHl0aG9uMjIKLTtEZWZhdWx0RGlyTmFtZT17cGZ9XFB5dGhvbgotCi07IFN0YXJ0IG1lbnUgZm9sZGVyIG5hbWU7IHZhbHVlIG9mIHtncm91cH0gbGF0ZXIgKHVubGVzcyB1c2VyIG92ZXJyaWRlcykuCi1EZWZhdWx0R3JvdXBOYW1lPVB5dGhvbiAyLjIKLQotOyBQb2ludCBTb3VyY2VEaXIgdG8gb25lIGFib3ZlIFBDQnVpbGQgPSBzcmMuCi07IG1lYW5zIHRoaXMgc2NyaXB0IGNhbiBydW4gdW5jaGFuZ2VkIGZyb20gYW55b25lJ3MgQ1ZTIHRyZWUsIG5vIG1hdHRlcgotOyB3aGF0IHRoZXkgY2FsbGVkIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3JpZXMuCi1Tb3VyY2VEaXI9LgotT3V0cHV0RGlyPS4uCi1PdXRwdXRCYXNlRmlsZW5hbWU9UHl0aG9uLTIuMi4yLVdpbjMyLTE1MC1TZXR1cAotCi1BcHBQdWJsaXNoZXI9UHl0aG9uTGFicyBhdCBEaWdpdGFsIENyZWF0aW9ucwotQXBwUHVibGlzaGVyVVJMPWh0dHA6Ly93d3cucHl0aG9uLm9yZwotQXBwU3VwcG9ydFVSTD1odHRwOi8vd3d3LnB5dGhvbi5vcmcKLUFwcFVwZGF0ZXNVUkw9aHR0cDovL3d3dy5weXRob24ub3JnCi0KLUFsd2F5c0NyZWF0ZVVuaW5zdGFsbEljb249dHJ1ZQotQ2hhbmdlc0Fzc29jaWF0aW9ucz10cnVlCi1Vbmluc3RhbGxMb2dNb2RlPW5ldwotQWxsb3dOb0ljb25zPXRydWUKLUFkbWluUHJpdmlsZWdlc1JlcXVpcmVkPXRydWUKLVVuaW5zdGFsbERpc3BsYXlJY29uPXthcHB9XHB5Yy5pY28KLVdpemFyZERlYnVnPWZhbHNlCi0KLTsgVGhlIGZld2VyIHNjcmVlbnMgdGhlIGJldHRlcjsgbGVhdmUgdGhlc2UgY29tbWVudGVkLgotCi1Db21wcmVzc2lvbj1iemlwCi1JbmZvQmVmb3JlRmlsZT1MSUNFTlNFLnR4dAotO0luZm9CZWZvcmVGaWxlPU1pc2NcTkVXUwotCi07IHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmUgaWYgeW91IHdhbnQgeW91ciBpbnN0YWxsYXRpb24gdG8gcnVuIG9uIE5UIDMuNTEgdG9vLgotOyBNaW5WZXJzaW9uPTQsMy41MQotCi1bVHlwZXNdCi1OYW1lOiBub3JtYWw7IERlc2NyaXB0aW9uOiBTZWxlY3QgZGVzaXJlZCBjb21wb25lbnRzOyBGbGFnczogaXNjdXN0b20KLQotW0NvbXBvbmVudHNdCi1OYW1lOiBtYWluOyBEZXNjcmlwdGlvbjogUHl0aG9uIGFuZCBXaW4zMiBFeHRlbnNpb25zOyBUeXBlczogbm9ybWFsCi1OYW1lOiBkb2NzOyBEZXNjcmlwdGlvbjogUHl0aG9uIGRvY3VtZW50YXRpb24gKEhUTUwpOyBUeXBlczogbm9ybWFsCi1OYW1lOiB0azsgRGVzY3JpcHRpb246IFRDTC9USywgdGtpbnRlciwgYW5kIElkbGU7IFR5cGVzOiBub3JtYWwKLU5hbWU6IHRvb2xzOyBEZXNjcmlwdGlvbjogUHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHNcKTsgVHlwZXM6IG5vcm1hbAotTmFtZTogdGVzdDsgRGVzY3JpcHRpb246IFB5dGhvbiB0ZXN0IHN1aXRlIChMaWJcdGVzdFwpOyBUeXBlczogbm9ybWFsCi0KLVtUYXNrc10KLU5hbWU6IGV4dGVuc2lvbnM7IERlc2NyaXB0aW9uOiBSZWdpc3RlciBmaWxlIGFzc29jaWF0aW9ucyAoLnB5LCAucHl3LCAucHljLCAucHlvKTsgQ29tcG9uZW50czogbWFpbjsgQ2hlY2s6IElzQWRtaW5Mb2dnZWRPbgotCi1bRmlsZXNdCi07IENhdXRpb246ICBVc2luZyBmb3J3YXJkIHNsYXNoZXMgaW5zdGVhZCBzY3Jld3MgdXAgaW4gYW1hemluZyB3YXlzLgotOyBVbmtub3duOiAgQnkgdGhlIHRpbWUgQ29tcG9uZW50cyAoYW5kIG90aGVyIGF0dHJzKSBhcmUgYWRkZWQgdG8gdGhlc2UgbGluZXMsIHRoZXkncmUKLTsgZ29pbmcgdG8gZ2V0IGF3ZnVsbHkgbG9uZy4gIEJ1dCBkb24ndCBzZWUgYSB3YXkgdG8gY29udGludWUgbG9naWNhbCBsaW5lcyBhY3Jvc3MKLTsgcGh5c2ljYWwgbGluZXMuCi0KLVNvdXJjZTogTElDRU5TRS50eHQ7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlCi1Tb3VyY2U6IFJFQURNRS50eHQ7IERlc3REaXI6IHthcHB9OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlCi1Tb3VyY2U6IE5ld3MudHh0OyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZQotU291cmNlOiAqLmljbzsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBweXRob24uZXhlOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBweXRob253LmV4ZTsgRGVzdERpcjoge2FwcH07IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogdzl4cG9wZW4uZXhlOyBEZXN0RGlyOiB7YXBwfTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi0KLVNvdXJjZTogRExMc1x0Y2w4My5kbGw7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi1Tb3VyY2U6IERMTHNcdGs4My5kbGw7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi1Tb3VyY2U6IHRjbFwqLio7IERlc3REaXI6IHthcHB9XHRjbDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGs7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IHN5c2RpclxweXRob24yMi5kbGw7IERlc3REaXI6IHtzeXN9OyBDb3B5TW9kZTogYWx3YXlzc2tpcGlmc2FtZW9yb2xkZXI7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiBzaGFyZWRmaWxlIHJlc3RhcnRyZXBsYWNlCi1Tb3VyY2U6IHN5c2RpclxQeVdpblR5cGVzMjIuZGxsOyBEZXN0RGlyOiB7c3lzfTsgQ29weU1vZGU6IGFsd2F5c3NraXBpZnNhbWVvcm9sZGVyOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVzdGFydHJlcGxhY2Ugc2hhcmVkZmlsZQotU291cmNlOiBzeXNkaXJccHl0aG9uY29tMjIuZGxsOyBEZXN0RGlyOiB7c3lzfTsgQ29weU1vZGU6IGFsd2F5c3NraXBpZnNhbWVvcm9sZGVyOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVzdGFydHJlcGxhY2Ugc2hhcmVkZmlsZQotCi1Tb3VyY2U6IERMTHNcX3NvY2tldC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfc29ja2V0LmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3NyZS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfc3JlLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcX3N5bXRhYmxlLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXF9zeW10YWJsZS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXF90ZXN0Y2FwaS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xfdGVzdGNhcGkubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1xfdGtpbnRlci5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IHRrCi1Tb3VyY2U6IGxpYnNcX3RraW50ZXIubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0awotCi1Tb3VyY2U6IERMTHNcbW1hcC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xtbWFwLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNccGFyc2VyLnB5ZDsgRGVzdERpcjoge2FwcH1cRExMczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotU291cmNlOiBsaWJzXHBhcnNlci5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHB5ZXhwYXQucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNccHlleHBhdC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHNlbGVjdC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1xzZWxlY3QubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x1bmljb2RlZGF0YS5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x1bmljb2RlZGF0YS5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHdpbnJlZy5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x3aW5yZWcubGliOyBEZXN0RGlyOiB7YXBwfVxsaWJzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLVNvdXJjZTogRExMc1x3aW5zb3VuZC5weWQ7IERlc3REaXI6IHthcHB9XERMTHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogbGlic1x3aW5zb3VuZC5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBETExzXHpsaWIucHlkOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi1Tb3VyY2U6IGxpYnNcemxpYi5saWI7IERlc3REaXI6IHthcHB9XGxpYnM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBsaWJzXHB5dGhvbjIyLmxpYjsgRGVzdERpcjoge2FwcH1cbGliczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IERMTHNcZXhwYXQuZGxsOyBEZXN0RGlyOiB7YXBwfVxETExzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluCi0KLQotCi1Tb3VyY2U6IExpYlwqLnB5OyBEZXN0RGlyOiB7YXBwfVxMaWI7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLVNvdXJjZTogTGliXGNvbXBpbGVyXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGNvbXBpbGVyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXGRpc3R1dGlsc1wqLio7IERlc3REaXI6IHthcHB9XExpYlxkaXN0dXRpbHM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcZW1haWxcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcZW1haWw7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcZW5jb2RpbmdzXCouKjsgRGVzdERpcjoge2FwcH1cTGliXGVuY29kaW5nczsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxob3RzaG90XCouKjsgRGVzdERpcjoge2FwcH1cTGliXGhvdHNob3Q7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcbGliLW9sZFwqLio7IERlc3REaXI6IHthcHB9XExpYlxsaWItb2xkOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHhtbFwqLio7IERlc3REaXI6IHthcHB9XExpYlx4bWw7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcaG90c2hvdFwqLio7IERlc3REaXI6IHthcHB9XExpYlxob3RzaG90OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLVNvdXJjZTogTGliXHRlc3RcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcdGVzdDsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdGVzdDsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlx0a2ludGVyXCoucHk7IERlc3REaXI6IHthcHB9XExpYlx0a2ludGVyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0azsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcUkVBRE1FLnR4dDsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW4KLQotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1xQeVdpbjMyLmNobTsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IGRvY3MKLVNvdXJjZTogTGliXHNpdGUtcGFja2FnZXNcd2luMzJcKi4qOyBEZXN0RGlyOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMjsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbjsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tXCouKjsgRGVzdERpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb207IENvcHlNb2RlOiBhbHdheXNvdmVyd3JpdGU7IENvbXBvbmVudHM6IG1haW47IEZsYWdzOiByZWN1cnNlc3ViZGlycwotU291cmNlOiBMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMmNvbWV4dFwqLio7IERlc3REaXI6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tZXh0OyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiBtYWluOyBGbGFnczogcmVjdXJzZXN1YmRpcnMKLQotU291cmNlOiBpbmNsdWRlXCouaDsgRGVzdERpcjoge2FwcH1caW5jbHVkZTsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogbWFpbgotCi1Tb3VyY2U6IFRvb2xzXGlkbGVcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1xpZGxlOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0azsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi0KLVNvdXJjZTogVG9vbHNccHluY2hlXCouKjsgRGVzdERpcjoge2FwcH1cVG9vbHNccHluY2hlOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IFRvb2xzXHNjcmlwdHNcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1xTY3JpcHRzOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IFRvb2xzXHdlYmNoZWNrZXJcKi4qOyBEZXN0RGlyOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyOyBDb3B5TW9kZTogYWx3YXlzb3ZlcndyaXRlOyBDb21wb25lbnRzOiB0b29sczsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzCi1Tb3VyY2U6IFRvb2xzXHZlcnNpb25jaGVja1wqLio7IERlc3REaXI6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVjazsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgQ29tcG9uZW50czogdG9vbHM7IEZsYWdzOiByZWN1cnNlc3ViZGlycwotCi1Tb3VyY2U6IERvY1wqLio7IERlc3REaXI6IHthcHB9XERvYzsgQ29weU1vZGU6IGFsd2F5c292ZXJ3cml0ZTsgRmxhZ3M6IHJlY3Vyc2VzdWJkaXJzOyBDb21wb25lbnRzOiBkb2NzCi0KLQotW0ljb25zXQotTmFtZToge2dyb3VwfVxQeXRob24gKGNvbW1hbmQgbGluZSk7IEZpbGVuYW1lOiB7YXBwfVxweXRob24uZXhlOyBXb3JraW5nRGlyOiB7YXBwfTsgQ29tcG9uZW50czogbWFpbgotTmFtZToge2dyb3VwfVxQeXRob24gTWFudWFsczsgRmlsZW5hbWU6IHthcHB9XERvY1xpbmRleC5odG1sOyBXb3JraW5nRGlyOiB7YXBwfTsgQ29tcG9uZW50czogZG9jcwotTmFtZToge2dyb3VwfVxXaW4zMiBFeHRlbnNpb25zIEhlbHA7IEZpbGVuYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1xQeVdpbjMyLmNobTsgV29ya2luZ0Rpcjoge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IENvbXBvbmVudHM6IGRvY3MKLU5hbWU6IHtncm91cH1cTW9kdWxlIERvY3M7IEZpbGVuYW1lOiB7YXBwfVxweXRob253LmV4ZTsgV29ya2luZ0Rpcjoge2FwcH07IFBhcmFtZXRlcnM6ICIiInthcHB9XFRvb2xzXFNjcmlwdHNccHlkb2MucHl3IiIiOyBDb21wb25lbnRzOiB0b29scwotTmFtZToge2dyb3VwfVxJRExFIChQeXRob24gR1VJKTsgRmlsZW5hbWU6IHthcHB9XHB5dGhvbncuZXhlOyBXb3JraW5nRGlyOiB7YXBwfTsgUGFyYW1ldGVyczogIiIie2FwcH1cVG9vbHNcaWRsZVxpZGxlLnB5dyIiIjsgQ29tcG9uZW50czogdG9vbHMKLQotW1JlZ2lzdHJ5XQotOyBSZWdpc3RlciAucHkKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBGaWxlOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiBDb250ZW50IFR5cGU7IFZhbHVlRGF0YTogdGV4dC9wbGFpbjsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBGaWxlOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIEZpbGVcRGVmYXVsdEljb247IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IDsgVmFsdWVEYXRhOiB7YXBwfVxQeS5pY28KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBGaWxlXHNoZWxsXG9wZW5cY29tbWFuZDsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6ICIiInthcHB9XHB5dGhvbi5leGUiIiAiIiUxIiIgJSoiCi0KLTsgUmVnaXN0ZXIgLnB5YwotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogLnB5YzsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBDb21waWxlZEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZXZhbHVlCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gQ29tcGlsZWRGaWxlOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogQ29tcGlsZWQgUHl0aG9uIEZpbGU7IEZsYWdzOiB1bmluc2RlbGV0ZWtleQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIENvbXBpbGVkRmlsZVxEZWZhdWx0SWNvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IHthcHB9XHB5Yy5pY28KLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IFB5dGhvbiBDb21waWxlZEZpbGVcc2hlbGxcb3Blblxjb21tYW5kOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogIiIie2FwcH1ccHl0aG9uLmV4ZSIiICIiJTEiIiAlKiIKLQotOyBSZWdpc3RlciAucHlvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHlvOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIENvbXBpbGVkRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLQotOyBSZWdpc3RlciAucHl3Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiAucHl3OyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YTogUHl0aG9uIE5vQ29uRmlsZTsgRmxhZ3M6IHVuaW5zZGVsZXRldmFsdWUKLVRhc2tzOiBleHRlbnNpb25zOyBSb290OiBIS0NSOyBTdWJrZXk6IC5weXc7IFZhbHVlVHlwZTogc3RyaW5nOyBWYWx1ZU5hbWU6IENvbnRlbnQgVHlwZTsgVmFsdWVEYXRhOiB0ZXh0L3BsYWluOyBGbGFnczogdW5pbnNkZWxldGV2YWx1ZQotVGFza3M6IGV4dGVuc2lvbnM7IFJvb3Q6IEhLQ1I7IFN1YmtleTogUHl0aG9uIE5vQ29uRmlsZTsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6IFB5dGhvbiBGaWxlIChubyBjb25zb2xlKTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gTm9Db25GaWxlXERlZmF1bHRJY29uOyBWYWx1ZVR5cGU6IHN0cmluZzsgVmFsdWVOYW1lOiA7IFZhbHVlRGF0YToge2FwcH1cUHkuaWNvCi1UYXNrczogZXh0ZW5zaW9uczsgUm9vdDogSEtDUjsgU3Via2V5OiBQeXRob24gTm9Db25GaWxlXHNoZWxsXG9wZW5cY29tbWFuZDsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlTmFtZTogOyBWYWx1ZURhdGE6ICIiInthcHB9XHB5dGhvbncuZXhlIiIgIiIlMSIiICUqIgotCi0KLTsgUHl0aG9uIFJlZ2lzdHJ5IEtleXMKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5OyBDaGVjazogSXNBZG1pbkxvZ2dlZE9uCi1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMjsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eQotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcUHl0aG9uUGF0aDsgVmFsdWVEYXRhOiAie2FwcH1cTGliO3thcHB9XERMTHMiOyBGbGFnczogdW5pbnNkZWxldGVrZXlpZmVtcHR5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxQeXRob25QYXRoXHdpbjMyOyBWYWx1ZURhdGE6ICJ7YXBwfVxsaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMjt7YXBwfVxsaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMlxsaWIiOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXFB5dGhvblBhdGhcd2luMzJjb207IFZhbHVlRGF0YTogQzpcUHl0aG9uXGxpYlxzaXRlLXBhY2thZ2VzOyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXE1vZHVsZXM7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXE1vZHVsZXNccHl0aG9uY29tOyBWYWx1ZURhdGE6IHtzeXN9XHB5dGhvbmNvbTIyLmRsbDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxNb2R1bGVzXHB5d2ludHlwZXM7IFZhbHVlRGF0YToge3N5c31cUHlXaW5UeXBlczIyLmRsbDsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5Ci1Sb290OiBIS0xNOyBTdWJrZXk6IFNPRlRXQVJFXFB5dGhvblxQeXRob25Db3JlXDIuMlxJbnN0YWxsUGF0aDsgVmFsdWVEYXRhOiB7YXBwfTsgRmxhZ3M6IHVuaW5zZGVsZXRla2V5aWZlbXB0eTsgVmFsdWVUeXBlOiBzdHJpbmcKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEluc3RhbGxQYXRoXEluc3RhbGxHcm91cDsgVmFsdWVEYXRhOiB7Z3JvdXB9OyBGbGFnczogdW5pbnNkZWxldGVrZXkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEhlbHA7IEZsYWdzOiB1bmluc2RlbGV0ZWtleWlmZW1wdHkKLVJvb3Q6IEhLTE07IFN1YmtleTogU09GVFdBUkVcUHl0aG9uXFB5dGhvbkNvcmVcMi4yXEhlbHBcTWFpbiBQeXRob24gRG9jdW1lbnRhdGlvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlRGF0YToge2FwcH1cRG9jXGluZGV4Lmh0bWw7IEZsYWdzOiB1bmluc2RlbGV0ZWtleTsgQ29tcG9uZW50czogZG9jcwotUm9vdDogSEtMTTsgU3Via2V5OiBTT0ZUV0FSRVxQeXRob25cUHl0aG9uQ29yZVwyLjJcSGVscFxQeXRob24gV2luMzIgRG9jdW1lbnRhdGlvbjsgVmFsdWVUeXBlOiBzdHJpbmc7IFZhbHVlRGF0YToge2FwcH1cbGliXHNpdGUtcGFja2FnZXNcUHlXaW4zMi5jaG07IEZsYWdzOiB1bmluc2RlbGV0ZWtleTsgQ29tcG9uZW50czogZG9jcwotCi1bX0lTVG9vbF0KLUVuYWJsZUlTWD10cnVlCi0KLQotW0NvZGVdCi1Qcm9ncmFtIFNldHVwOwotCi1GdW5jdGlvbiBJc0FkbWluTm90TG9nZ2VkT24oKTogQm9vbGVhbjsKLWJlZ2luCi0gIFJlc3VsdCA6PSBOb3QgSXNBZG1pbkxvZ2dlZE9uKCk7Ci1lbmQ7Ci0KLWJlZ2luCi1lbmQuCi0KLQotCi0KLVtVbmluc3RhbGxEZWxldGVdCi1OYW1lOiB7YXBwfVxMaWJcY29tcGlsZXJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcY29tcGlsZXJcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcY29tcGlsZXI7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcY29tbWFuZFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcY29tbWFuZFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcY29tbWFuZDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGRpc3R1dGlsc1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxkaXN0dXRpbHNcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZGlzdHV0aWxzOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcZW1haWxcdGVzdFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbFx0ZXN0XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGVtYWlsXHRlc3Q7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxlbWFpbFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbFwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbWFpbDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXGVuY29kaW5nc1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxlbmNvZGluZ3NcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcZW5jb2RpbmdzOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcaG90c2hvdFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlxob3RzaG90XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGhvdHNob3Q7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlxsaWItb2xkXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXGxpYi1vbGRcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcbGliLW9sZDsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHRraW50ZXJcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJcdGtpbnRlclwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0a2ludGVyOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJcdGVzdFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx0ZXN0XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHRlc3Q7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxcZG9tXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxkb21cKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXGRvbTsgVHlwZTogZGlyaWZlbXB0eQotTmFtZToge2FwcH1cTGliXHhtbFxwYXJzZXJzXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxwYXJzZXJzXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxwYXJzZXJzOyBUeXBlOiBkaXJpZmVtcHR5Ci1OYW1lOiB7YXBwfVxMaWJceG1sXHNheFwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XExpYlx4bWxcc2F4XCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbFxzYXg7IFR5cGU6IGRpcmlmZW1wdHkKLU5hbWU6IHthcHB9XExpYlx4bWxcKi5weWM7IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxMaWJceG1sXCoucHlvOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHhtbDsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1x3aW4zMjsgVHlwZTogZmlsZXNhbmRvcmRpcnMKLU5hbWU6IHthcHB9XExpYlxzaXRlLXBhY2thZ2VzXHdpbjMyY29tOyBUeXBlOiBmaWxlc2FuZG9yZGlycwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXNcd2luMzJjb21leHQ7IFR5cGU6IGZpbGVzYW5kb3JkaXJzCi1OYW1lOiB7YXBwfVxMaWJcc2l0ZS1wYWNrYWdlc1xweXRob25jb20ucHkqOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliXHNpdGUtcGFja2FnZXM7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cTGliXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cTGliOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHB5bmNoZVwqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHB5bmNoZVwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHB5bmNoZTsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1xpZGxlXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcaWRsZVwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXGlkbGU7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHNcc2NyaXB0c1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHNjcmlwdHNcKi5weW87IFR5cGU6IGZpbGVzCi1OYW1lOiB7YXBwfVxUb29sc1xzY3JpcHRzOyBUeXBlOiBkaXJpZmVtcHR5Ci0KLU5hbWU6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVja1wqLnB5YzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVja1wqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHZlcnNpb25jaGVjazsgVHlwZTogZGlyaWZlbXB0eQotCi1OYW1lOiB7YXBwfVxUb29sc1x3ZWJjaGVja2VyXCoucHljOyBUeXBlOiBmaWxlcwotTmFtZToge2FwcH1cVG9vbHNcd2ViY2hlY2tlclwqLnB5bzsgVHlwZTogZmlsZXMKLU5hbWU6IHthcHB9XFRvb2xzXHdlYmNoZWNrZXI7IFR5cGU6IGRpcmlmZW1wdHkKLQotTmFtZToge2FwcH1cVG9vbHM7IFR5cGU6IGRpcmlmZW1wdHkKLQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uLnZjcHJvaiBiL1BDL1ZTNy4xL3B5dGhvbi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwYjQ0MDEuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9uLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3NCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHl0aG9uIg0KLQlTY2NQcm9qZWN0TmFtZT0icHl0aG9uIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiY2NwMzIubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9uLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbi5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdccHl0aG9uIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uX2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNICAvR1MtIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7TkRFQlVHO19DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyAvVlNFWFRDT01QX1ZFUkJPU0UiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmNjcDMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbi5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24ucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxweXRob24iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjY3AzMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob24uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9uLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbi5pY28iPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHl0aG9uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9leGUucmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9weXRob24yMC53c2UgYi9QQy9WUzcuMS9weXRob24yMC53c2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlN2Y2YWQzLi4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3B5dGhvbjIwLndzZQorKysgL2Rldi9udWxsCkBAIC0xLDMxMTcgKzAsMCBAQAotRG9jdW1lbnQgVHlwZTogV1NFCi1pdGVtOiBHbG9iYWwKLSAgVmVyc2lvbj05LjAKLSAgVGl0bGU9UHl0aG9uIDIuNGExCi0gIEZsYWdzPTAwMDEwMTAwCi0gIExhbmd1YWdlcz02NSAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMAotICBKYXBhbmVzZSBGb250IE5hbWU9TVMgR290aGljCi0gIEphcGFuZXNlIEZvbnQgU2l6ZT0xMAotICBTdGFydCBHcmFkaWVudD0wIDI1NSAwCi0gIEVuZCBHcmFkaWVudD0wIDEyOCAwCi0gIFdpbmRvd3MgRmxhZ3M9MDAwMDAxMDAwMDAwMTEwMTAwMTAwMTAxMDAwMDEwMTAKLSAgTG9nIFBhdGhuYW1lPSVNQUlORElSJVxJTlNUQUxMLkxPRwotICBNZXNzYWdlIEZvbnQ9TVMgU2FucyBTZXJpZgotICBGb250IFNpemU9OAotICBQYWdlcyBNb2RpZmllZD0wMDAxMDAwMDAxMTEwMTAwMDAwMDAwMDEwMDAwMDExMQotICBFeHRyYSBQYWdlcz0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDExMDAxMAotICBEaXNrIEZpbGVuYW1lPVNFVFVQCi0gIFBhdGNoIEZsYWdzPTAwMDAwMDAwMDAwMDEwMDEKLSAgUGF0Y2ggVGhyZXNob2xkPTg1Ci0gIFBhdGNoIE1lbW9yeT00MDAwCi0gIE1JRiBQREYgVmVyc2lvbj0xLjAKLSAgTUlGIFNNUyBWZXJzaW9uPTIuMAotICBFWEUgRmlsZW5hbWU9UHl0aG9uLTIuNGExLmV4ZQotICBEaWFsb2dzIFZlcnNpb249OAotICBWZXJzaW9uIEZpbGU9Mi40YTEKLSAgVmVyc2lvbiBEZXNjcmlwdGlvbj1QeXRob24gUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UKLSAgVmVyc2lvbiBDb3B5cmlnaHQ9qTIwMDEtMjAwNyBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgotICBWZXJzaW9uIENvbXBhbnk9UHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KLSAgQ3J5c3RhbCBGb3JtYXQ9MTAxMTExMDAxMDExMDAwMDAwMTAwMDEwMDEwMDEwMDEKLSAgU3RlcCBWaWV3PSZBbGwKLSAgVmFyaWFibGUgTmFtZTE9X1dJU0VfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMT1XSVNFIHJvb3QgZGlyZWN0b3J5Ci0gIFZhcmlhYmxlIERlZmF1bHQxPUM6XFByb2dyYW1tZVxXaXNlIEluc3RhbGxhdGlvbiBTeXN0ZW0KLSAgVmFyaWFibGUgRmxhZ3MxPTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWUyPV9UQ0xESVJfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMj1UaGUgZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBUY2wvVGsgaW5zdGFsbGF0aW9uCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uMj1saXZlcy4gIFRoaXMgbXVzdCBiZSBhIHNpYmxpbmcgb2YgdGhlIFB5dGhvbgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjI9ZGlyZWN0b3J5LgotICBWYXJpYWJsZSBEZWZhdWx0Mj10Y2w4NAotICBWYXJpYWJsZSBGbGFnczI9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTM9X0RPQ18KLSAgVmFyaWFibGUgRGVzY3JpcHRpb24zPVRoZSB1bnBhY2tlZCBIVE1MIGRvYyBkaXJlY3RvcnkuCi0gIFZhcmlhYmxlIERlZmF1bHQzPS4uXGh0bWwKLSAgVmFyaWFibGUgRmxhZ3MzPTAwMDAxMDAxCi0gIFZhcmlhYmxlIE5hbWU0PV9TWVNfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uND1TeXN0ZW0gZGlyZWN0b3J5ICh3aGVyZSB0byBmaW5kIE1TVkNSVC5ETEwpCi0gIFZhcmlhYmxlIERlZmF1bHQ0PUM6XFdpbmRvd3NcU3lzdGVtCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcV2luZG93c1xTeXN0ZW0KLSAgVmFyaWFibGUgVmFsdWVzND1DOlxXSU5OVFxTeXN0ZW0zMgotICBWYXJpYWJsZSBWYWx1ZXM0PUM6XENvZGVcTVNETExzCi0gIFZhcmlhYmxlIFZhbHVlczQ9QzpcV2luZG93c1xTeXN0ZW0zMgotICBWYXJpYWJsZSBGbGFnczQ9MDAwMDAwMTAKLSAgVmFyaWFibGUgTmFtZTU9X1BZTUFKT1JfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNT1QeXRob24gbWFqb3IgdmVyc2lvbiBudW1iZXI7IHRoZSAyIGluIDIuMy4KLSAgVmFyaWFibGUgRGVmYXVsdDU9MgotICBWYXJpYWJsZSBGbGFnczU9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTY9X1BZTUlOT1JfCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNj1QeXRob24gbWlub3IgdmVyc2lvbiBudW1iZXI7IHRoZSAzIGluIDIuMwotICBWYXJpYWJsZSBEZWZhdWx0Nj0zCi0gIFZhcmlhYmxlIEZsYWdzNj0wMDAwMTAwMAotICBWYXJpYWJsZSBOYW1lNz1fRE9BRE1JTl8KLSAgVmFyaWFibGUgRGVzY3JpcHRpb243PVRoZSBpbml0aWFsIHZhbHVlIGZvciAlRE9BRE1JTiUuCi0gIFZhcmlhYmxlIERlc2NyaXB0aW9uNz1XaGVuIDAsIHdlIG5ldmVyIHRyeSB0byB3cml0ZSB1bmRlciBIS0xNLAotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9YW5kIGluc3RhbGwgdGhlIFB5dGhvbiArIE1TIHJ1bnRpbWUgRExMcyBpbgotICBWYXJpYWJsZSBEZXNjcmlwdGlvbjc9dGhlIFB5dGhvbiBkaXJlY3RvcnkgaW5zdGVhZCBvZiB0aGUgc3lzdGVtIGRpci4KLSAgVmFyaWFibGUgRGVmYXVsdDc9MQotICBWYXJpYWJsZSBWYWx1ZXM3PTEKLSAgVmFyaWFibGUgVmFsdWVzNz0wCi0gIFZhcmlhYmxlIEZsYWdzNz0wMDAwMTAxMAotICBWYXJpYWJsZSBOYW1lOD1fQUxJQVNOQU1FXwotICBWYXJpYWJsZSBGbGFnczg9MDAwMDEwMDAKLSAgVmFyaWFibGUgTmFtZTk9X0FMSUFTUEFUSF8KLSAgVmFyaWFibGUgRmxhZ3M5PTAwMDAxMDAwCi0gIFZhcmlhYmxlIE5hbWUxMD1fQUxJQVNUWVBFXwotICBWYXJpYWJsZSBGbGFnczEwPTAwMDAxMDAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1QWVZFUl9TVFJJTkcKLSAgVmFsdWU9Mi4zCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1XaGVuIHRoZSB2ZXJzaW9uIG51bWJlciBjaGFuZ2VzLCBzZXQgdGhlIGNvbXBpbGVyCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PXZyYmxzIF9QWU1BSk9SXyBhbmQgIF9QWU1JTk9SXy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90aGluZyBpbiB0aGUgc2NyaXB0IGJlbG93IHNob3VsZCBuZWVkIGZpZGRsaW5nIHRoZW4uCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU90aGVyIHRoaW5ncyB0aGF0IG5lZWQgZmlkZGxpbmc6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICBQWVZFUl9TVFJJTkcgYWJvdmUuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICBUaGUgIlRpdGxlOiIgaW4gdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBHVUkuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PSAgICBCdWlsZCBTZXR0aW5ncyBhbmQgVmVyc2lvbiBSZXNvdXJjZSBvbiBzdGVwIDYgKEZpbmlzaCkgb2YgdGhlIEluc3RhbGxhdGlvbiBFeHBlcnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9ICAgICAgICBCZSBzdXJlIHRvIHNlbGVjdCBTdGVwcy0+QWxsIG9yIHlvdSBtYXkgbm90IHNlZSB0aGVzZSEKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdoZW4gdGhlIHZlcnNpb24gb2YgVGNsL1RrIGNoYW5nZXMsIHRoZSBjb21waWxlciB2cmJsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PV9UQ0xESVJfIG1heSBhbHNvIG5lZWQgdG8gYmUgY2hhbmdlZC4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1BUFBUSVRMRQotICBWYWx1ZT1QeXRob24gJVBZVkVSX1NUUklORyUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UFlfVkVSU0lPTiBzaG91bGQgYmUgbWFqb3IubWlub3Igb25seTsgdXNlZCB0byBjcmVhdGUgdGhlIHJlZ2lzdHJ5IGtleTsgbXVzdCBtYXRjaCBNU19ETExfSUQgaW4gcHl0aG9uX250LnJjCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1QWV9WRVJTSU9OCi0gIFZhbHVlPSVfUFlNQUpPUl8lLiVfUFlNSU5PUl8lCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUdST1VQIGlzIHRoZSBTdGFydCBtZW51IGdyb3VwIG5hbWU7IHVzZXIgY2FuIG92ZXJyaWRlLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9R1JPVVAKLSAgVmFsdWU9UHl0aG9uICVQWV9WRVJTSU9OJQotICBGbGFncz0xMDAwMDAwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NQUlORElSIGlzIHRoZSBhcHAgZGlyZWN0b3J5OyB1c2VyIGNhbiBvdmVycmlkZS4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPU1BSU5ESVIKLSAgVmFsdWU9UHl0aG9uJV9QWU1BSk9SXyUlX1BZTUlOT1JfJQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9JV9ET0FETUlOXyUKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9R2l2ZSBub24tYWRtaW4gdXNlcnMgYSBjaGFuY2UgdG8gYWJvcnQuCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAwMTExMTEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBEaXNwbGF5IE1lc3NhZ2UKLSAgVGl0bGU9RG9pbmcgbm9uLWFkbWluIGluc3RhbGwKLSAgVGV4dD1UaGUgY3VycmVudCBsb2dpbiBkb2VzIG5vdCBoYXZlIEFkbWluaXN0cmF0b3IgUHJpdmlsZWdlcyBvbiB0aGlzIG1hY2hpbmUuICBQeXRob24gd2lsbCBpbnN0YWxsIGl0cyByZWdpc3RyeSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBwZXItdXNlciBhcmVhIG9ubHkgZm9yIHRoZSBjdXJyZW50IGxvZ2luLCBpbnN0ZWFkIG9mIGludG8gdGhlIHBlci1tYWNoaW5lIGFyZWEgZm9yIGV2ZXJ5IGFjY291bnQgb24gdGhpcyBtYWNoaW5lLiAgU29tZSBhZHZhbmNlZCB1c2VzIG9mIFB5dGhvbiBtYXkgbm90IHdvcmsgYXMgYSByZXN1bHQgKGZvciBleGFtcGxlLCBydW5uaW5nIGEgUHl0aG9uIHNjcmlwdCBhcyBhIHNlcnZpY2UpLgotICBUZXh0PQotICBUZXh0PUlmIHRoaXMgaXMgbm90IHdoYXQgeW91IHdhbnQsIHBsZWFzZSBjbGljayBDYW5jZWwgdG8gYWJvcnQgdGhpcyBpbnN0YWxsYXRpb24sIGxvZyBvbiBhcyBhbiBBZG1pbmlzdHJhdG9yLCBhbmQgc3RhcnQgdGhlIGluc3RhbGxhdGlvbiBhZ2Fpbi4KLSAgRmxhZ3M9MDAwMDEwMDAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CRUdJTiBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogdGhlICJzdG9wIiBvbiB0aGUgbmV4dCBsaW5lIGlzIGFjdHVhbGx5ICJwYXVzZSIuCi1lbmQKLWl0ZW06IE9wZW4vQ2xvc2UgSU5TVEFMTC5MT0cKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SWYgdGhlIGRlc3RpbmF0aW9uIHN5c3RlbSBkb2VzIG5vdCBoYXZlIGEgd3JpdGFibGUgV2luZG93c1xTeXN0ZW0gZGlyZWN0b3J5LCBzeXN0ZW0gZmlsZXMgd2lsbCBiZSB3cml0dGVuIHRvIHRoZSBXaW5kb3dzXCBkaXJlY3RvcnkKLWVuZAotaXRlbTogQ2hlY2sgaWYgRmlsZS9EaXIgRXhpc3RzCi0gIFBhdGhuYW1lPSVTWVMlCi0gIEZsYWdzPTEwMDAwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TWVMKLSAgVmFsdWU9JVdJTiUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IENoZWNrIENvbmZpZ3VyYXRpb24KLSAgRmxhZ3M9MTAxMTEwMTEKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DT01NT04KLSAgS2V5PVNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uCi0gIERlZmF1bHQ9QzpcUHJvZ3JhbSBGaWxlc1xDb21tb24gRmlsZXMKLSAgVmFsdWUgTmFtZT1Db21tb25GaWxlc0RpcgotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPVBST0dSQU1fRklMRVMKLSAgS2V5PVNPRlRXQVJFXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uCi0gIERlZmF1bHQ9QzpcUHJvZ3JhbSBGaWxlcwotICBWYWx1ZSBOYW1lPVByb2dyYW1GaWxlc0RpcgotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RVhQTE9SRVIKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIFRoZSBXaXphcmQgaGFyZGNvZCAiQzoiIGF0IHRoZSBzdGFydCBvZiB0aGUgcmVwbGFjZW1lbnQgdGV4dCBmb3IgTUFJTkRJUi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhhdCdzIG5vdCBhcHByb3ByaWF0ZSBpZiB0aGUgc3lzdGVtIGRyaXZlIGRvZXNuJ3QgaGFwcGVuIHRvIGJlIEM6LgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JIHJlbW92ZWQgdGhlICJDOiIsIGFuZCB0aGF0IGRpZCB0aGUgcmlnaHQgdGhpbmcgZm9yIHR3byBwZW9wbGUgd2hvIHRlc3RlZCBpdCBvbiBub24tQzogbWFjaGluZXMsCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PWJ1dCBpdCdzIHVuY2xlYXIgd2hldGhlciBpdCB3aWxsIGFsd2F5cyBkbyB0aGUgcmlnaHQgdGhpbmcuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1NQUlORElSCi0gIFZhbHVlPVwlTUFJTkRJUiUKLSAgRmxhZ3M9MDAwMDExMDAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QkFDS1VQIGlzIHRoZSB2YXJpYWJsZSB0aGF0IGhvbGRzIHRoZSBwYXRoIHRoYXQgYWxsIGJhY2t1cCBmaWxlcyB3aWxsIGJlIGNvcGllZCB0byB3aGVuIG92ZXJ3cml0dGVuCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CQUNLVVAKLSAgVmFsdWU9JU1BSU5ESVIlXEJBQ0tVUAotICBGbGFncz0xMDAwMDAwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1ET0JBQ0tVUCBkZXRlcm1pbmVzIGlmIGEgYmFja3VwIHdpbGwgYmUgcGVyZm9ybWVkLiAgVGhlIHBvc3NpYmxlIHZhbHVlcyBhcmUgQSAoZG8gYmFja3VwKSBvciBCIChkbyBub3QgZG8gYmFja3VwKQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RE9CQUNLVVAKLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1CUkFORElORyBkZXRlcm1pbmVzIGlmIHRoZSBpbnN0YWxsYXRpb24gd2lsbCBiZSBicmFuZGVkIHdpdGggYSBuYW1lIGFuZCBjb21wYW55LiAgQnkgZGVmYXVsdCwgdGhpcyBpcyB3cml0dGVuIHRvIHRoZSBJTlNUIGRpcmVjdG9yeSAoaW5zdGFsbGF0aW9uIG1lZGlhKS4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJSQU5ESU5HCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUJSQU5ESU5HCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogUmVhZCBJTkkgVmFsdWUKLSAgVmFyaWFibGU9TkFNRQotICBQYXRobmFtZT0lSU5TVCVcQ1VTVERBVEEuSU5JCi0gIFNlY3Rpb249UmVnaXN0cmF0aW9uCi0gIEl0ZW09TmFtZQotZW5kCi1pdGVtOiBSZWFkIElOSSBWYWx1ZQotICBWYXJpYWJsZT1DT01QQU5ZCi0gIFBhdGhuYW1lPSVJTlNUJVxDVVNUREFUQS5JTkkKLSAgU2VjdGlvbj1SZWdpc3RyYXRpb24KLSAgSXRlbT1Db21wYW55Ci1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1OQU1FCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1ET0JSQU5ECi0gIFZhbHVlPTEKLWVuZAotaXRlbTogR2V0IFN5c3RlbSBJbmZvcm1hdGlvbgotICBWYXJpYWJsZT1OQU1FCi0gIEZsYWdzPTAwMDAwMTEwCi1lbmQKLWl0ZW06IEdldCBTeXN0ZW0gSW5mb3JtYXRpb24KLSAgVmFyaWFibGU9Q09NUEFOWQotICBGbGFncz0wMDAwMDExMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUVORCBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVNldCB2cmJscyBmb3IgdGhlICJBZHZhbmNlZCBPcHRpb25zIiBzdWJkaWFsb2cgb2YgQ29tcG9uZW50cy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1BCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNFTEVDVF9BRE1JTgotICBWYWx1ZT1CCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VEFTS1MgdmFsdWVzOgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1BOiBSZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QjogQ3JlYXRlIFN0YXJ0IE1lbnUgc2hvcnRjdXRzCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1BQgotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Q09NUE9ORU5UUyB2YWx1ZXM6Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUE6IGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QjogVGNsL1RrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUM6IGRvY3MKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RDogdG9vbHMKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RTogdGVzdCBzdWl0ZQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BQkNERQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TWFyY2ggdGhydSB0aGUgdXNlciBHVUkuCi1lbmQKLWl0ZW06IFdpemFyZCBCbG9jawotICBEaXJlY3Rpb24gVmFyaWFibGU9RElSRUNUSU9OCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBCaXRtYXAgUGF0aG5hbWU9LlxpbnN0YWxsZXIuYm1wCi0gIFggUG9zaXRpb249OQotICBZIFBvc2l0aW9uPTEwCi0gIEZpbGxlciBDb2xvcj0xMTE3Mzc1OQotICBEaWFsb2c9U2VsZWN0IERlc3RpbmF0aW9uIERpcmVjdG9yeQotICBEaWFsb2c9QmFja3VwIFJlcGxhY2VkIEZpbGVzCi0gIERpYWxvZz1TZWxlY3QgQ29tcG9uZW50cwotICBEaWFsb2c9U2VsZWN0IFByb2dyYW0gTWFuYWdlciBHcm91cAotICBWYXJpYWJsZT0KLSAgVmFyaWFibGU9Ci0gIFZhcmlhYmxlPQotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT0KLSAgVmFsdWU9Ci0gIFZhbHVlPQotICBWYWx1ZT1CCi0gIENvbXBhcmU9MAotICBDb21wYXJlPTAKLSAgQ29tcGFyZT0wCi0gIENvbXBhcmU9MwotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RElTUExBWQotICBWYWx1ZT1TdGFydCBJbnN0YWxsYXRpb24KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9SW5zdGFsbCBkaXJlY3Rvcnk6ICAlTUFJTkRJUiUlQ1JMRiUKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb2luZyBhZG1pbiBpbnN0YWxsLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVEb2luZyBub24tYWRtaW4gaW5zdGFsbC4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9CQUNLVVAKLSAgVmFsdWU9QQotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVNYWtlIGJhY2t1cHMsIGludG8gJUJBQ0tVUCUlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9JUNSTEYlRG9uJ3QgbWFrZSBiYWNrdXBzLiVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJUNvbXBvbmVudHM6JUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUEKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFB5dGhvbiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSAgICBUY2wvVGsgKFRraW50ZXIsIElETEUsIHB5ZG9jKSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QwotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgUHl0aG9uIGRvY3VtZW50YXRpb24lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUQKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVNVTU1BUlkKLSAgVmFsdWU9ICAgIFRvb2wgYW5kIHV0aWxpdHkgc2NyaXB0cyVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9RQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0gICAgUHl0aG9uIHRlc3Qgc3VpdGUlQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVSZWdpc3RlciBmaWxlIGV4dGVuc2lvbnMuJUNSTEYlCi0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1TVU1NQVJZCi0gIFZhbHVlPSVDUkxGJURvbid0IHJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VEFTS1MKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVTdGFydCBNZW51IGdyb3VwOiAgJUdST1VQJSVDUkxGJQotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9U1VNTUFSWQotICBWYWx1ZT0lQ1JMRiVObyBTdGFydCBNZW51IHNob3J0Y3V0cy4lQ1JMRiUKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogQ3VzdG9tIERpYWxvZyBTZXQKLSAgTmFtZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTAgMjI1IDMyMCAyMjYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTEgMzIzIDMzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIE5hbWU9VGltZXMgTmV3IFJvbWFuCi0gICAgICBGb250IFN0eWxlPS0yNCAwIDAgMCA3MDAgMjU1IDAgMCAwIDMgMiAxIDE4Ci0gICAgICBUZXh0PVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZSBy6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uCi0gICAgICBUZXh0IEdlcm1hbj1aaWVsdmVyemVpY2huaXMgd+RobGVuCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBlbCBkaXJlY3RvcmlvIGRlIGRlc3Rpbm8KLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBEaXJlY3RvcnkgZGkgZGVzdGluYXppb25lCi0gICAgZW5kCi0gICAgaXRlbTogTGlzdGJveAotICAgICAgUmVjdGFuZ2xlPTEwOCA1OCAzMjEgMjE5Ci0gICAgICBWYXJpYWJsZT1NQUlORElSCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAxMDAwMDAwMTAwMDAwMDAxMDEwMDAwMDEKLSAgICAgIEZsYWdzPTAwMDAxMTAwMDAwMDEwMTAKLSAgICAgIFRleHQ9JU1BSU5ESVIlCi0gICAgICBUZXh0PQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0MCAzMTMgNTgKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1QbGVhc2Ugc2VsZWN0IGEgZGlyZWN0b3J5IGZvciB0aGUgJUFQUFRJVExFJSBmaWxlcy4KLSAgICBlbmQKLSAgZW5kCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPVNlbGVjdCBEZXN0aW5hdGlvbiBEaXJlY3RvcnkKLSAgICBUaXRsZSBGcmVuY2g9U+lsZWN0aW9ubmVyIGxlIHLpcGVydG9pcmUgZGUgZGVzdGluYXRpb24KLSAgICBUaXRsZSBHZXJtYW49WmllbHZlcnplaWNobmlzIHfkaGxlbgotICAgIFRpdGxlIFNwYW5pc2g9U2VsZWNjaW9uZSBlbCBkaXJlY3RvcmlvIGRlIGRlc3Rpbm8KLSAgICBUaXRsZSBJdGFsaWFuPVNlbGV6aW9uYXJlIERpcmVjdG9yeSBkaSBkZXN0aW5hemlvbmUKLSAgICBXaWR0aD0yNzYKLSAgICBIZWlnaHQ9MjE2Ci0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IExpc3Rib3gKLSAgICAgIFJlY3RhbmdsZT02IDYgMjA0IDE4NgotICAgICAgVmFyaWFibGU9TUFJTkRJUgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMTAwMDAwMDEwMDAwMDAwMTAxMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMTEwMDAwMTAwMDEwCi0gICAgICBUZXh0PSVNQUlORElSJQotICAgICAgVGV4dCBGcmVuY2g9JU1BSU5ESVIlCi0gICAgICBUZXh0IEdlcm1hbj0lTUFJTkRJUiUKLSAgICAgIFRleHQgU3BhbmlzaD0lTUFJTkRJUiUKLSAgICAgIFRleHQgSXRhbGlhbj0lTUFJTkRJUiUKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSA4IDI2NSAyNgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PU9LCi0gICAgICBUZXh0IEZyZW5jaD1PSwotICAgICAgVGV4dCBHZXJtYW49T0sKLSAgICAgIFRleHQgU3BhbmlzaD1BY2VwdGFyCi0gICAgICBUZXh0IEl0YWxpYW49T0sKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSAzMSAyNjUgNTAKLSAgICAgIFZhcmlhYmxlPU1BSU5ESVIKLSAgICAgIFZhbHVlPSVNQUlORElSX1NBVkUlCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIEZsYWdzPTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Q2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD1Bbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj1BYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD1DYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPUFubnVsbGEKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9QmFja3VwIFJlcGxhY2VkIEZpbGVzCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1GaWNoaWVycyBkZSBTYXV2ZWdhcmRlIFJlbXBsYWPpcwotICAgIFRpdGxlIEdlcm1hbj1TaWNoZXJ1bmdza29waWUgdm9uIGVyc2V0enRlbiBEYXRlaWVuIGVyc3RlbGxlbgotICAgIFRpdGxlIFBvcnR1Z3Vlc2U9RmljaGVpcm9zIHN1YnN0aXR17WRvcyBkZSBzZWd1cmFu52EKLSAgICBUaXRsZSBTcGFuaXNoPUNvcGlhcyBkZSBzZWd1cmlkYWQgZGUgbG9zIGFyY2hpdm9zIHJlZW1wbGF6YWRvcwotICAgIFRpdGxlIEl0YWxpYW49QmFja3VwIGZpbGUgc29zdGl0dWl0aQotICAgIFRpdGxlIERhbmlzaD1TaWtrZXJoZWRza29waWVyaW5nIGFmIGVyc3RhdHRlZGUgZmlsZXIKLSAgICBUaXRsZSBEdXRjaD1WZXJ2YW5nZW4gYmVzdGFuZGVuIGtvcGnrcmVuCi0gICAgVGl0bGUgTm9yd2VnaWFuPVNpa2tlcmhldHNrb3BpZXJlIGVyc3RhdHRlZGUgZmlsZXIKLSAgICBUaXRsZSBTd2VkaXNoPVPka2VyaGV0c2tvcGllcmEgdXRieXR0YSBmaWxlcgotICAgIFdpZHRoPTM1MAotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTEKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl2YW50PgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlcj4KLSAgICAgIFRleHQgUG9ydHVndWVzZT0mUHLzeGltbz4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICAgIFRleHQgRGFuaXNoPSZO5nN0ZT4KLSAgICAgIFRleHQgRHV0Y2g9JlZvbGdlbmRlPgotICAgICAgVGV4dCBOb3J3ZWdpYW49Jk5lc3RlPgotICAgICAgVGV4dCBTd2VkaXNoPSZO5HN0YSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTEKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08Jlp1cvxjawotICAgICAgVGV4dCBQb3J0dWd1ZXNlPTwmUmV0b3JuYXIKLSAgICAgIFRleHQgU3BhbmlzaD08JlJldHJvY2VkZXIKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgICAgVGV4dCBEYW5pc2g9PCZUaWxiYWdlCi0gICAgICBUZXh0IER1dGNoPTwmVGVydWcKLSAgICAgIFRleHQgTm9yd2VnaWFuPTwmVGlsYmFrZQotICAgICAgVGV4dCBTd2VkaXNoPTwgJlRpbGxiYWthCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNzggMjM0IDMzMCAyNTEKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD1Bbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj1BYmJyZWNoZW4KLSAgICAgIFRleHQgUG9ydHVndWVzZT1DYW5jZWxhcgotICAgICAgVGV4dCBTcGFuaXNoPUNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49QW5udWxsYQotICAgICAgVGV4dCBEYW5pc2g9QW5udWxsZXIKLSAgICAgIFRleHQgRHV0Y2g9QW5udWxlcmVuCi0gICAgICBUZXh0IE5vcndlZ2lhbj1BdmJyeXQKLSAgICAgIFRleHQgU3dlZGlzaD1BdmJyeXQKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMSAyMjEgMzI5IDIyMwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCA0NiAzMjAgOTgKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1UaGlzIGluc3RhbGxhdGlvbiBwcm9ncmFtIGNhbiBjcmVhdGUgYmFja3VwIGNvcGllcyBvZiBhbGwgZmlsZXMgcmVwbGFjZWQgZHVyaW5nIHRoZSBpbnN0YWxsYXRpb24uIFRoZXNlIGZpbGVzIHdpbGwgYmUgdXNlZCB3aGVuIHRoZSBzb2Z0d2FyZSBpcyB1bmluc3RhbGxlZCBhbmQgYSByb2xsYmFjayBpcyByZXF1ZXN0ZWQuICBJZiBiYWNrdXAgY29waWVzIGFyZSBub3QgY3JlYXRlZCwgeW91IHdpbGwgb25seSBiZSBhYmxlIHRvIHVuaW5zdGFsbCB0aGUgc29mdHdhcmUgYW5kIG5vdCByb2xsIHRoZSBzeXN0ZW0gYmFjayB0byBhIHByZXZpb3VzIHN0YXRlLgotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9RG8geW91IHdhbnQgdG8gY3JlYXRlIGJhY2t1cHMgb2YgcmVwbGFjZWQgZmlsZXM/Ci0gICAgICBUZXh0IEZyZW5jaD1MZSBwcm9ncmFtbWUgZCdpbnN0YWxsYXRpb24gcGV1dCBjcullciBkZXMgY29waWVzIGRlIHNhdXZlZ2FyZGUgZGUgdG91cyBsZXMgZmljaGllcnMgcmVtcGxhY+lzIHBlbmRhbnQgbCdpbnN0YWxsYXRpb24uIENlcyBmaWNoaWVycyBzb250IHV0aWxpc+lzIGF1IGNhcyBv+SBsZSBsb2dpY2llbCBlc3QgZOlzaW5zdGFsbOkgZXQgcXVlIGwnb24gcHJvY+hkZSDgIGxhIHJlcHJpc2UgZHUgc3lzdOhtZS4gU2kgbGVzIGNvcGllcyBkZSBzYXV2ZWdhcmRlIG5lIHNvbnQgcGFzIGNy6ellcywgb24gbmUgcG91cnJhIHF1ZSBk6XNpbnN0YWxsZXIgbGUgbG9naWNpZWwgc2FucyByZXByZW5kcmUgbGUgc3lzdOhtZSDgIHVuIOl0YXQgcHLpY+lkZW50LiBWb3VsZXotdm91cyBjcullciB1bmUgc2F1dmVnYXJkZSBkZXMgZmljaGllcnMgcmVtcGxhY+lzID8KLSAgICAgIFRleHQgR2VybWFuPURpZXNlcyBJbnN0YWxsYXRpb25zcHJvZ3JhbW0ga2FubiBTaWNoZXJ1bmdza29waWVuIHZvbiBhbGxlbiB35GhyZW5kIGRlciBJbnN0YWxsYXRpb24gZXJzZXR6dGVuIERhdGVpZW4gZXJzdGVsbGVuLiBEaWVzZSBEYXRlaWVuIHdlcmRlbiB6dXIgUvxja2fkbmdpZ21hY2h1bmcgZGVyIEluc3RhbGxhdGlvbiB1bmQgYmVpIEFuZm9yZGVydW5nIGVpbmVzIFJvbGxiYWNrcyB2ZXJ3ZW5kZXQuIE9obmUgU2ljaGVydW5nc2tvcGllbiBpc3QgbnVyIGVpbmUgUvxja2fkbmdpZ21hY2h1bmcgZGVyIEluc3RhbGxhdGlvbiBt9mdsaWNoLCBuaWNodCBhYmVyIGVpbiBSb2xsYmFjayBkZXMgU3lzdGVtcy4gU2ljaGVydW5nc2tvcGllbiBkZXIgZXJzZXR6dGVuIERhdGVpZW4gZXJzdGVsbGVuPwotICAgICAgVGV4dCBQb3J0dWd1ZXNlPUVzdGUgcHJvZ3JhbWEgZGUgaW5zdGFsYefjbyBwb2RlIGNyaWFyIGPzcGlhcyBkZSBzZWd1cmFu52EgZGUgdG9kb3Mgb3MgZmljaGVpcm9zIHN1YnN0aXR17WRvcyBkdXJhbnRlIGEgaW5zdGFsYefjby4gRXN0ZXMgZmljaGVpcm9zIHNlcuNvIHV0aWxpemFkb3MgcXVhbmRvIG8gcHJvZ3JhbWEgZm9yIGRlc2luc3RhbGFkbyAgZSBmb3IgcmVxdWlzaXRhZGEgdW1hIHJldG9tYWRhLiBTZSBhcyBj83BpYXMgZGUgc2VndXJhbudhIG7jbyBmb3JlbSBjcmlhZGFzLCBz8yBwb2RlcuEgZGVzaW5zdGFsYXIgbyBwcm9ncmFtYSBlIG7jbyBwb2RlIHJldG9tYXIgIHVtIGVzdGFkbyBhbnRlcmlvciBkbyBzaXN0ZW1hLiBEZXNlamEgY3JpYXIgY/NwaWFzIGRlIHNlZ3VyYW7nYSBkb3MgZmljaGVpcm9zIHN1YnN0aXR17WRvcz8KLSAgICAgIFRleHQgU3BhbmlzaD1Fc3RlIHByb2dyYW1hIGRlIGluc3RhbGFjafNuIHB1ZWRlIGNyZWFyIGNvcGlhcyBkZSBzZWd1cmlkYWQgZGUgdG9kb3MgbG9zIGFyY2hpdm9zIHJlZW1wbGF6YWRvcyBkdXJhbnRlIGxhIGluc3RhbGFjafNuLiBFc3RvcyBhcmNoaXZvcyBzZSB1dGlsaXphcuFuIGN1YW5kbyBzZSBkZXNpbnN0YWxlIGVsIHNvZnR3YXJlIHkgc2Ugc29saWNpdGUgdm9sdmVyIGFsIGVzdGFkbyBhbnRlcmlvci4gU2kgbm8gc2UgY3JlYW4gY29waWFzIGRlIHNlZ3VyaWRhZCwg+m5pY2FtZW50ZSBwb2Ry4SBkZXNpbnN0YWxhciBlbCBzb2Z0d2FyZSB5IG5vIHBvZHLhIGRldm9sdmVyIGVsIHNpc3RlbWEgYWwgZXN0YWRvIGFudGVyaW9yLiC/RGVzZWEgY3JlYXIgYXJjaGl2b3MgZGUgc2VndXJpZGFkIGRlIGxvcyBhcmNoaXZvcyByZWVtcGxhemFkb3M/Ci0gICAgICBUZXh0IEl0YWxpYW49UXVlc3RvIHByb2dyYW1tYSBkaSBpbnN0YWxsYXppb25lIHB18iBjcmVhcmUgY29waWUgZGkgYmFja3VwIGRpIHR1dHRpIGkgZmlsZSBzb3N0aXR1aXRpIGR1cmFudGUgbJJpbnN0YWxsYXppb25lLiBRdWVzdGkgZmlsZSBzYXJhbm5vIHVzYXRpIHF1YW5kbyBpbCBzb2Z0d2FyZSBzYXLgIGRpc2luc3RhbGxhdG8gZSBzYXLgIHJpY2hpZXN0byB1biByaXRvcm5vIGFsbG8gc3RhdG8gcHJlY2VkZW50ZS4gU2Ugbm9uIGNyZWkgbGUgY29waWUgZGkgYmFja3VwLCBwb3RyYWkgc29sbyBkaXNpbnN0YWxsYXJlIGlsIHNvZnR3YXJlLCBtYSBub24gcG90cmFpIHJpcG9ydGFyZSBpbCBzaXN0ZW1hIGFsbG8gc3RhdG8gcHJlY2VkZW50ZS4gVnVvaSBjcmVhcmUgaSBmaWxlIGRpIGJhY2t1cCBkZWkgZmlsZSBzb3N0aXR1aXRpPwotICAgICAgVGV4dCBEYW5pc2g9RGV0dGUgaW5zdGFsbGF0aW9uc3Byb2dyYW0ga2FuIG9wcmV0dGUgc2lra2VyaGVkc2tvcGllciBhZiBhbGxlIGZpbGVyLCBzb20gZXJzdGF0dGVzIHVuZGVyIGluc3RhbGxhdGlvbmVuLiBEaXNzZSBmaWxlciBiZW55dHRlcywgbuVyIHNvZnR3YXJlbiBmamVybmVzLCBvZyBkZW4gdGlkbGlnZXJlIHN5c3RlbWtvbmZpZ3VyYXRpb24gZ2VuZXRhYmxlcmVzLiBIdmlzIGRlciBpa2tlIG9wcmV0dGVzIHNpa2tlcmhlZHNrb3BpZXIsIGthbiBkdSBrdW4gZmplcm5lIGRlbiBpbnN0YWxsZXJlZGUgc29mdHdhcmUgb2cgaWtrZSBnZW5ldGFibGVyZSBkZW4gdGlkbGlnZXJlIHN5c3RlbWtvbmZpZ3VyYXRpb24uIFZpbCBkdSBvcHJldHRlIHNpa2tlcmhlZHNrb3BpZXIgYWYgZmlsZXIsIHNvbSBlcnN0YXR0ZXM/Ci0gICAgICBUZXh0IER1dGNoPURpdCBpbnN0YWxsYXRpZXByb2dyYW1tYSBrYW4ga29waWXrbiBtYWtlbiB2YW4gYWxsZSBiZXN0YW5kZW4gZGllIHRpamRlbnMgZGUgaW5zdGFsbGF0aWUgd29yZGVuIHZlcnZhbmdlbi4gRGV6ZSB3b3JkZW4gZGFuIGdlYnJ1aWt0IGFscyBkZSBzb2Z0d2FyZS1pbnN0YWxsYXRpZSBvbmdlZGFhbiB3b3JkdCBnZW1hYWt0IGVuIHUgaGV0IHN5c3RlZW0gd2lsdCBsYXRlbiB0ZXJ1Z2tlcmVuIG5hYXIgZGUgb29yc3Byb25rZWxpamtlIHN0YWF0LiBBbHMgZXIgZ2VlbiBiYWNrLXVwIGtvcGll624gd29yZGVuIGdlbWFha3QsIGt1bnQgdSBkZSBzb2Z0d2FyZSBlbmtlbCB2ZXJ3aWpkZXJlbiBtYWFyIGhldCBzeXN0ZWVtIG5pZXQgaW4gZGUgb29yc3Byb25rZWxpamtlIHN0YWF0IHRlcnVnYnJlbmdlbi4gV2lsdCB1IGVlbiBiYWNrLXVwIG1ha2VuIHZhbiBkZSB2ZXJ2YW5nZW4gYmVzdGFuZGVuPwotICAgICAgVGV4dCBOb3J3ZWdpYW49RGV0dGUgaW5zdGFsbGFzam9uc3Byb2dyYW1tZXQga2FuIGxhZ2Ugc2lra2VyaGV0c2tvcGllciBhdiBhbGxlIGZpbGVyIHNvbSBibGlyIGVyc3RhdHRldCB1bmRlciBpbnN0YWxsYXNqb25lbi4gRGlzc2UgZmlsZW5lIHZpbCB0YXMgaSBicnVrIG7lciBwcm9ncmFtdmFyZW4gZXIgYXZpbnN0YWxsZXJ0IG9nIGRldCBlciBiZWhvdiBmb3IgdGlsYmFrZXN0aWxsaW5nLiBIdmlzIGRldCBpa2tlIGVyIGxhZ2V0IHNpa2tlcmhldHNrb3BpZXIsIGthbiBkdSBrdW4gYXZpbnN0YWxsZXJlIHByb2dyYW12YXJlbiBvZyBpa2tlIHN0aWxsZSBzeXN0ZW1ldCB0aWxiYWtlIHRpbCB0aWRsaWdlcmUgc3RhdHVzLiDYbnNrZXIgZHUg5SBsYWdlIHNpa2tlcmhldHNrb3BpZXIgYXYgZGUgZmlsZW5lIHNvbSBibGlyIGVyc3RhdHRldCBu5T8KLSAgICAgIFRleHQgU3dlZGlzaD1JbnN0YWxsYXRpb25zcHJvZ3JhbW1ldCBrYW4gc2thcGEgc+RrZXJoZXRza29waW9yIGF2IGFsbGEgZmlsZXIgc29tIGJ5dHMgdXQgdW5kZXIgaW5zdGFsbGF0aW9uZW4uIERlc3NhIGZpbGVyIGthbiBzZWRhbiBhbnbkbmRhcyBu5HIgcHJvZ3JhbXZhcmFuIGF2aW5zdGFsbGVyYXMgb2NoIGR1IGJlZ+RyIHJvbGxiYWNrLiBPbSBkdSBk5SBpbnRlIGhhciBu5WdyYSBz5GtlcmhldHNrb3Bpb3Iga2FuIGR1IGJhcmEgYXZpbnN0YWxsZXJhIHByb2dyYW12YXJhbiwgaW50ZSDldGVyc2thcGEgc3lzdGVtZXQgaSBkZXNzIHRpZGlnYXJlIHNraWNrLiBWaWxsIGR1IGf2cmEgc+RrZXJoZXRza29waW9yIGF2IGRlIGVyc2F0dGEgZmlsZXJuYT8KLSAgICBlbmQKLSAgICBpdGVtOiBSYWRpbyBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xNDEgMTA2IDI2NSAxMzYKLSAgICAgIFZhcmlhYmxlPURPQkFDS1VQCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDEwMDEKLSAgICAgIFRleHQ9JlllcywgbWFrZSBiYWNrdXBzCi0gICAgICBUZXh0PU4mbywgZG8gbm90IG1ha2UgYmFja3VwcwotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPSZPdWkKLSAgICAgIFRleHQgRnJlbmNoPU4mb24KLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBHZXJtYW49JkphCi0gICAgICBUZXh0IEdlcm1hbj1OJmVpbgotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JlNpbQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPU7jJm8KLSAgICAgIFRleHQgUG9ydHVndWVzZT0KLSAgICAgIFRleHQgU3BhbmlzaD0mU+0KLSAgICAgIFRleHQgU3BhbmlzaD1OJm8KLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgSXRhbGlhbj0mU+wKLSAgICAgIFRleHQgSXRhbGlhbj1OJm8KLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgRGFuaXNoPSZKYQotICAgICAgVGV4dCBEYW5pc2g9Jk5lagotICAgICAgVGV4dCBEYW5pc2g9Ci0gICAgICBUZXh0IER1dGNoPSZKYQotICAgICAgVGV4dCBEdXRjaD1OJmVlCi0gICAgICBUZXh0IER1dGNoPQotICAgICAgVGV4dCBOb3J3ZWdpYW49JkphCi0gICAgICBUZXh0IE5vcndlZ2lhbj0mTmVpCi0gICAgICBUZXh0IE5vcndlZ2lhbj0KLSAgICAgIFRleHQgU3dlZGlzaD0mSmEKLSAgICAgIFRleHQgU3dlZGlzaD1OJmVqCi0gICAgICBUZXh0IFN3ZWRpc2g9Ci0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzIKLSAgICAgIFJlY3RhbmdsZT0xMDggMTczIDMyMCAyMDgKLSAgICAgIEFjdGlvbj0xCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICAgIFRleHQ9QmFja3VwIEZpbGUgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgICBUZXh0IEZyZW5jaD1S6XBlcnRvaXJlIGRlIGRlc3RpbmF0aW9uIGRlcyBmaWNoaWVycyBkZSBzYXV2ZWdhcmRlCi0gICAgICBUZXh0IEdlcm1hbj1aaWVsdmVyemVpY2huaXMgZvxyIGRpZSBTaWNoZXJ1bmdzZGF0ZWkKLSAgICAgIFRleHQgUG9ydHVndWVzZT1EaXJlY3TzcmlvIGRlIGRlc3Rpbm8gZGUgZmljaGVpcm8gZGUgc2VndXJhbudhCi0gICAgICBUZXh0IFNwYW5pc2g9RGlyZWN0b3JpbyBkZSBEZXN0aW5vIGRlIGxvcyBBcmNoaXZvcyBkZSBTZWd1cmlkYWQKLSAgICAgIFRleHQgSXRhbGlhbj1EaXJlY3RvcnkgZGkgZGVzdGluYXppb25lIGRlaSBmaWxlIGRpIGJhY2t1cAotICAgICAgVGV4dCBEYW5pc2g9RGVzdGluYXRpb25zYmlibGlvdGVrIHRpbCBzaWtrZXJoZWRza29waWVyCi0gICAgICBUZXh0IER1dGNoPURvZWxkaXJlY3RvcnkgYmFja3VwLWJlc3RhbmQKLSAgICAgIFRleHQgTm9yd2VnaWFuPU3lbGthdGFsb2cgZm9yIHNpa2tlcmhldHNrb3BpZXIKLSAgICAgIFRleHQgU3dlZGlzaD1LYXRhbG9nIGb2ciBz5GtlcmhldHNrb3BpZXJhZGUgZmlsZXIKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgQ29udHJvbCBOYW1lPUJBQ0szCi0gICAgICBSZWN0YW5nbGU9MjY1IDE4NSAzMTggMjAzCi0gICAgICBWYXJpYWJsZT1CQUNLVVBfU0FWRQotICAgICAgVmFsdWU9JUJBQ0tVUCUKLSAgICAgIERlc3RpbmF0aW9uIERpYWxvZz0xCi0gICAgICBBY3Rpb249MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUImcm93c2UuLi4KLSAgICAgIFRleHQgRnJlbmNoPVAmYXJjb3VyaXIKLSAgICAgIFRleHQgR2VybWFuPUImbOR0dGVybi4uLgotICAgICAgVGV4dCBQb3J0dWd1ZXNlPVAmcm9jdXJhcgotICAgICAgVGV4dCBTcGFuaXNoPVYmaXN1YWxpemFyLi4uCi0gICAgICBUZXh0IEl0YWxpYW49U2ZvZ2xpYS4uLgotICAgICAgVGV4dCBEYW5pc2g9Jkdlbm5lbXNlLi4uCi0gICAgICBUZXh0IER1dGNoPUImbGFkZXJlbi4uLgotICAgICAgVGV4dCBOb3J3ZWdpYW49QmxhIGlnamVubm9tCi0gICAgICBUZXh0IFN3ZWRpc2g9JkJs5GRkcmEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLNAotICAgICAgUmVjdGFuZ2xlPTEyOSAxODggMjU0IDIwMAotICAgICAgRGVzdGluYXRpb24gRGlhbG9nPTIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0lQkFDS1VQJQotICAgICAgVGV4dCBGcmVuY2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgR2VybWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9JUJBQ0tVUCUKLSAgICAgIFRleHQgU3BhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBJdGFsaWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IERhbmlzaD0lQkFDS1VQJQotICAgICAgVGV4dCBEdXRjaD0lQkFDS1VQJQotICAgICAgVGV4dCBOb3J3ZWdpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgU3dlZGlzaD0lQkFDS1VQJQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMSAzMjMgMzYKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9QmFja3VwIFJlcGxhY2VkIEZpbGVzCi0gICAgICBUZXh0IEZyZW5jaD1T6WxlY3Rpb25uZXIgbGVzIGNvbXBvc2FudHMKLSAgICAgIFRleHQgR2VybWFuPUtvbXBvbmVudGVuIGF1c3fkaGxlbgotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgY29tcG9uZW50ZXMKLSAgICAgIFRleHQgSXRhbGlhbj1TZWxlemlvbmFyZSBpIGNvbXBvbmVudGkKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURPQkFDS1VQCi0gICAgICBWYWx1ZT1CCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzMKLSAgICAgIE9wZXJhdGlvbj0xCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QkFDSzQKLSAgICAgIE9wZXJhdGlvbj0xCi0gICAgZW5kCi0gICAgaXRlbTogRWxzZSBTdGF0ZW1lbnQKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBBdHRyaWJ1dGUKLSAgICAgIENvbnRyb2wgTmFtZT1CQUNLMwotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUJBQ0s0Ci0gICAgZW5kCi0gICAgaXRlbTogRW5kIEJsb2NrCi0gICAgZW5kCi0gIGVuZAotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci0gICAgVGl0bGUgRnJlbmNoPUNob2lzaXNzZXogbGUgculwZXJ0b2lyZSBkZSBkZXN0aW5hdGlvbgotICAgIFRpdGxlIEdlcm1hbj1aaWVsdmVyemVpY2huaXMgd+RobGVuCi0gICAgVGl0bGUgUG9ydHVndWVzZT1TZWxlY2Npb25hciBEaXJlY3TzcmlvIGRlIERlc3Rpbm8KLSAgICBUaXRsZSBTcGFuaXNoPVNlbGVjY2lvbmUgZWwgRGlyZWN0b3JpbyBkZSBEZXN0aW5vCi0gICAgVGl0bGUgSXRhbGlhbj1TZWxlemlvbmEgRGlyZWN0b3J5IGRpIGRlc3RpbmF6aW9uZQotICAgIFRpdGxlIERhbmlzaD1W5mxnIERlc3RpbmF0aW9uc2JpYmxpb3RlawotICAgIFRpdGxlIER1dGNoPUtpZXMgRG9lbGRpcmVjdG9yeQotICAgIFRpdGxlIE5vcndlZ2lhbj1WZWxnIG3lbGthdGFsb2cKLSAgICBUaXRsZSBTd2VkaXNoPVbkbGogZGVzdGluYXRpb25za2FsYXRvZwotICAgIFdpZHRoPTI3NgotICAgIEhlaWdodD0yMTYKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogTGlzdGJveAotICAgICAgUmVjdGFuZ2xlPTYgMyAyMDAgMTg2Ci0gICAgICBWYXJpYWJsZT1CQUNLVVAKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAxMDAwMDAwMDEwMTAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDExMDAwMDEwMDAxMAotICAgICAgVGV4dD0lQkFDS1VQJQotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPSVCQUNLVVAlCi0gICAgICBUZXh0IEZyZW5jaD0KLSAgICAgIFRleHQgR2VybWFuPSVCQUNLVVAlCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgUG9ydHVndWVzZT0lQkFDS1VQJQotICAgICAgVGV4dCBQb3J0dWd1ZXNlPQotICAgICAgVGV4dCBTcGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IFNwYW5pc2g9Ci0gICAgICBUZXh0IEl0YWxpYW49JUJBQ0tVUCUKLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICAgIFRleHQgRGFuaXNoPSVCQUNLVVAlCi0gICAgICBUZXh0IERhbmlzaD0KLSAgICAgIFRleHQgRHV0Y2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgRHV0Y2g9Ci0gICAgICBUZXh0IE5vcndlZ2lhbj0lQkFDS1VQJQotICAgICAgVGV4dCBOb3J3ZWdpYW49Ci0gICAgICBUZXh0IFN3ZWRpc2g9JUJBQ0tVUCUKLSAgICAgIFRleHQgU3dlZGlzaD0KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSA4IDI2NSAyNgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PU9LCi0gICAgICBUZXh0IEZyZW5jaD1PSwotICAgICAgVGV4dCBHZXJtYW49T0sKLSAgICAgIFRleHQgUG9ydHVndWVzZT1PSwotICAgICAgVGV4dCBTcGFuaXNoPUFDRVBUQVIKLSAgICAgIFRleHQgSXRhbGlhbj1PSwotICAgICAgVGV4dCBEYW5pc2g9T0sKLSAgICAgIFRleHQgRHV0Y2g9T0sKLSAgICAgIFRleHQgTm9yd2VnaWFuPU9LCi0gICAgICBUZXh0IFN3ZWRpc2g9T0sKLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTIwOSAzMSAyNjUgNTAKLSAgICAgIFZhcmlhYmxlPUJBQ0tVUAotICAgICAgVmFsdWU9JUJBQ0tVUF9TQVZFJQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PUNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9QW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49QWJicmVjaGVuCi0gICAgICBUZXh0IFBvcnR1Z3Vlc2U9Q2FuY2VsYXIKLSAgICAgIFRleHQgU3BhbmlzaD1DYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPUFubnVsbGEKLSAgICAgIFRleHQgRGFuaXNoPVNsZXQKLSAgICAgIFRleHQgRHV0Y2g9QW5udWxlcmVuCi0gICAgICBUZXh0IE5vcndlZ2lhbj1BdmJyeXQKLSAgICAgIFRleHQgU3dlZGlzaD1BdmJyeXQKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U2VsZWN0IENvbXBvbmVudHMKLSAgRGlzcGxheSBWYXJpYWJsZT1ESVNQTEFZCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPSVBUFBUSVRMRSUgSW5zdGFsbGF0aW9uCi0gICAgVGl0bGUgRnJlbmNoPUluc3RhbGxhdGlvbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgR2VybWFuPUluc3RhbGxhdGlvbiB2b24gJUFQUFRJVExFJQotICAgIFRpdGxlIFNwYW5pc2g9SW5zdGFsYWNp824gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEl0YWxpYW49SW5zdGFsbGF6aW9uZSBkaSAlQVBQVElUTEUlCi0gICAgV2lkdGg9MzM5Ci0gICAgSGVpZ2h0PTI4MAotICAgIEZvbnQgTmFtZT1IZWx2Ci0gICAgRm9udCBTaXplPTgKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMzQgMjQ0IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9Jk5leHQgPgotICAgICAgVGV4dCBGcmVuY2g9JlN1aXRlID4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIgPgotICAgICAgVGV4dCBTcGFuaXNoPSZTaWd1aWVudGUgPgotICAgICAgVGV4dCBJdGFsaWFuPSZBdmFudGkgPgotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTMxIDIzNCAxODggMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPUIKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD08ICZCYWNrCi0gICAgICBUZXh0IEZyZW5jaD08ICZSZXRvdXIKLSAgICAgIFRleHQgR2VybWFuPTwgJlp1cvxjawotICAgICAgVGV4dCBTcGFuaXNoPTwgJkF0cuFzCi0gICAgICBUZXh0IEl0YWxpYW49PCAmSW5kaWV0cm8KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTI2NCAyMzQgMzIwIDI1MwotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogQ2hlY2tib3gKLSAgICAgIFJlY3RhbmdsZT0xMDggNjYgMzEzIDE1NgotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDExCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMTEwCi0gICAgICBUZXh0PVB5dGhvbiBpbnRlcnByZXRlciBhbmQgbGlicmFyaWVzCi0gICAgICBUZXh0PVRjbC9UayAoVGtpbnRlciwgSURMRSwgcHlkb2MpCi0gICAgICBUZXh0PVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQ9UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dD1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dD0KLSAgICAgIFRleHQgRnJlbmNoPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIHV0aWxpdHkgc2NyaXB0cyAoVG9vbHMvKQotICAgICAgVGV4dCBGcmVuY2g9UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBHZXJtYW49UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gSFRNTCBkb2NzCi0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IEdlcm1hbj1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBHZXJtYW49Ci0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIGludGVycHJldGVyLCBsaWJyYXJ5IGFuZCBJRExFCi0gICAgICBUZXh0IFNwYW5pc2g9UHl0aG9uIEhUTUwgZG9jcwotICAgICAgVGV4dCBTcGFuaXNoPVB5dGhvbiB1dGlsaXR5IHNjcmlwdHMgKFRvb2xzLykKLSAgICAgIFRleHQgU3BhbmlzaD1QeXRob24gdGVzdCBzdWl0ZSAoTGliL3Rlc3QvKQotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiBpbnRlcnByZXRlciwgbGlicmFyeSBhbmQgSURMRQotICAgICAgVGV4dCBJdGFsaWFuPVB5dGhvbiBIVE1MIGRvY3MKLSAgICAgIFRleHQgSXRhbGlhbj1QeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pCi0gICAgICBUZXh0IEl0YWxpYW49UHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykKLSAgICAgIFRleHQgSXRhbGlhbj0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDUgMzIwIDYzCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2hvb3NlIHdoaWNoIGNvbXBvbmVudHMgdG8gaW5zdGFsbCBieSBjaGVja2luZyB0aGUgYm94ZXMgYmVsb3cuCi0gICAgICBUZXh0IEZyZW5jaD1DaG9pc2lzc2V6IGxlcyBjb21wb3NhbnRzIHF1ZSB2b3VzIHZvdWxleiBpbnN0YWxsZXIgZW4gY29jaGFudCBsZXMgY2FzZXMgY2ktZGVzc291cy4KLSAgICAgIFRleHQgR2VybWFuPVfkaGxlbiBTaWUgZGllIHp1IGluc3RhbGxpZXJlbmRlbiBLb21wb25lbnRlbiwgaW5kZW0gU2llIGluIGRpZSBlbnRzcHJlY2hlbmRlbiBL5HN0Y2hlbiBrbGlja2VuLgotICAgICAgVGV4dCBTcGFuaXNoPUVsaWphIGxvcyBjb21wb25lbnRlcyBxdWUgZGVzZWUgaW5zdGFsYXIgbWFyY2FuZG8gbG9zIGN1YWRyb3MgZGUgYWJham8uCi0gICAgICBUZXh0IEl0YWxpYW49U2NlZ2xpZXJlIHF1YWxpIGNvbXBvbmVudGkgaW5zdGFsbGFyZSBzZWxlemlvbmFuZG8gbGUgY2FzZWxsZSBzb3R0b3N0YW50aS4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAyMDMgMjY5IDIyMAotICAgICAgRGVzdGluYXRpb24gRGlhbG9nPTEKLSAgICAgIEFjdGlvbj0yCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9QWR2YW5jZWQgT3B0aW9ucyAuLi4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNDMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9U2VsZWN0IENvbXBvbmVudHMKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZXMgY29tcG9zYW50cwotICAgICAgVGV4dCBHZXJtYW49S29tcG9uZW50ZW4gYXVzd+RobGVuCi0gICAgICBUZXh0IFNwYW5pc2g9U2VsZWNjaW9uZSBjb21wb25lbnRlcwotICAgICAgVGV4dCBJdGFsaWFuPVNlbGV6aW9uYXJlIGkgY29tcG9uZW50aQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTI1MSAxODAgMzExIDE5MwotICAgICAgVmFyaWFibGU9Q09NUE9ORU5UUwotICAgICAgVmFsdWU9TUFJTkRJUgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MjUxIDE2OCAzMTEgMTc5Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMjMgMTY4IDIzNCAxODEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1EaXNrIFNwYWNlIFJlcXVpcmVkOgotICAgICAgVGV4dCBGcmVuY2g9RXNwYWNlIGRpc3F1ZSByZXF1aXMgOgotICAgICAgVGV4dCBHZXJtYW49Tm90d2VuZGlnZXIgU3BlaWNoZXJwbGF0ejoKLSAgICAgIFRleHQgU3BhbmlzaD1Fc3BhY2lvIHJlcXVlcmlkbyBlbiBlbCBkaXNjbzoKLSAgICAgIFRleHQgSXRhbGlhbj1TcGF6aW8gc3UgZGlzY28gbmVjZXNzYXJpbzoKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMjMgMTgwIDIzNCAxOTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD1EaXNrIFNwYWNlIFJlbWFpbmluZzoKLSAgICAgIFRleHQgRnJlbmNoPUVzcGFjZSBkaXNxdWUgZGlzcG9uaWJsZSA6Ci0gICAgICBUZXh0IEdlcm1hbj1WZXJibGVpYmVuZGVyIFNwZWljaGVycGxhdHo6Ci0gICAgICBUZXh0IFNwYW5pc2g9RXNwYWNpbyBlbiBkaXNjbyBkaXNwb25pYmxlOgotICAgICAgVGV4dCBJdGFsaWFuPVNwYXppbyBzdSBkaXNjbyBkaXNwb25pYmlsZToKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMTU4IDMyMCAxOTYKLSAgICAgIEFjdGlvbj0xCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMTEKLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURMR19FVkVOVF9UWVBFCi0gICAgICBWYWx1ZT1WRVJJRlkKLSAgICBlbmQKLSAgICBpdGVtOiBSZW1hcmsKLSAgICAgIFRleHQ9SWYgdGhleSdyZSBpbnN0YWxsaW5nIFRjbC9UaywgVG9vbHMsIG9yIHRoZSB0ZXN0IHN1aXRlLCBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSB1bmxlc3MgdGhleSdyZSBpbnN0YWxsaW5nIFB5dGhvbiB0b28uCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBWYWx1ZT1CREUKLSAgICAgIEZsYWdzPTAwMDAxMDEwCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1DT01QT05FTlRTCi0gICAgICBWYWx1ZT1BCi0gICAgICBGbGFncz0wMDAwMDAxMQotICAgIGVuZAotICAgIGl0ZW06IERpc3BsYXkgTWVzc2FnZQotICAgICAgVGl0bGU9QXJlIHlvdSBzdXJlPwotICAgICAgVGV4dD1JbnN0YWxsaW5nIFRjbC9UaywgVG9vbHMgb3IgdGhlIHRlc3Qgc3VpdGUgZG9lc24ndCBtYWtlIG11Y2ggc2Vuc2UgdW5sZXNzIHlvdSBpbnN0YWxsIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgYW5kIGxpYnJhcmllcyB0b28uCi0gICAgICBUZXh0PQotICAgICAgVGV4dD1DbGljayBZZXMgaWYgdGhhdCdzIHJlYWxseSB3aGF0IHlvdSB3YW50LgotICAgICAgRmxhZ3M9MDAxMDExMDEKLSAgICBlbmQKLSAgICBpdGVtOiBSZW1hcmsKLSAgICAgIFRleHQ9Tm90aGluZyAtLSBqdXN0IHByb2NlZWQgdG8gdGhlIG5leHQgZGlhbG9nLgotICAgIGVuZAotICAgIGl0ZW06IEVsc2UgU3RhdGVtZW50Ci0gICAgZW5kCi0gICAgaXRlbTogUmVtYXJrCi0gICAgICBUZXh0PVJldHVybiB0byB0aGUgZGlhbG9nLgotICAgIGVuZAotICAgIGl0ZW06IFNldCBWYXJpYWJsZQotICAgICAgVmFyaWFibGU9RExHX0VWRU5UX1RZUEUKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgZW5kCi0gIGl0ZW06IERpYWxvZwotICAgIFRpdGxlPUFkdmFuY2VkIE9wdGlvbnMKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjEzCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFJhZGlvIEJ1dHRvbgotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMgotICAgICAgUmVjdGFuZ2xlPTExIDQ2IDkwIDc2Ci0gICAgICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMTAwMQotICAgICAgVGV4dD1BZG1pbiBpbnN0YWxsCi0gICAgICBUZXh0PU5vbi1BZG1pbiBpbnN0YWxsbAotICAgICAgVGV4dD0KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTE4OCAxNzAgMjQ0IDE4OQotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1OCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDEKLSAgICAgIFRleHQ9T0sKLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT01IDMgMzI2IDgzCi0gICAgICBBY3Rpb249MQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4xCi0gICAgICBSZWN0YW5nbGU9MTEgMTEgMzIxIDQ1Ci0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9QnkgZGVmYXVsdCwgdGhlIGluc3RhbGwgcmVjb3JkcyBzZXR0aW5ncyBpbiB0aGUgcGVyLW1hY2hpbmUgYXJlYSBvZiB0aGUgcmVnaXN0cnkgKEhLTE0pLCBhbmQgaW5zdGFsbHMgdGhlIFB5dGhvbiBhbmQgQyBydW50aW1lIERMTHMgdG8gJVNZUzMyJS4gIENob29zZSAiTm9uLUFkbWluIGluc3RhbGwiIGlmIHlvdSB3b3VsZCBwcmVmZXIgc2V0dGluZ3MgbWFkZSBpbiB0aGUgcGVyLXVzZXIgcmVnaXN0cnkgKEhLQ1UpLCBhbmQgRExMcyBpbnN0YWxsZWQgaW4gJU1BSU5ESVIlLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTUgOTAgMzI2IDE1NwotICAgICAgQWN0aW9uPTEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IENoZWNrYm94Ci0gICAgICBSZWN0YW5nbGU9MTEgMTIxIDI0MyAxNTEKLSAgICAgIFZhcmlhYmxlPVRBU0tTCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMTEKLSAgICAgIFRleHQ9UmVnaXN0ZXIgZmlsZSBleHRlbnNpb25zICgucHksIC5weXcsIC5weWMsIC5weW8pCi0gICAgICBUZXh0PUNyZWF0ZSBTdGFydCBNZW51IHNob3J0Y3V0cwotICAgICAgVGV4dD0KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMSAxMDMgMzIwIDEyMQotICAgICAgRW5hYmxlZCBDb2xvcj0wMDAwMDAwMDAwMDAwMDAwMTExMTExMTExMTExMTExMQotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PUNob29zZSB0YXNrcyB0byBwZXJmb3JtIGJ5IGNoZWNraW5nIHRoZSBib3hlcyBiZWxvdy4KLSAgICBlbmQKLSAgICBpdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgICAgIFZhcmlhYmxlPURMR19FVkVOVF9UWVBFCi0gICAgICBWYWx1ZT1JTklUCi0gICAgZW5kCi0gICAgaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gICAgICBWYXJpYWJsZT1ET0FETUlOCi0gICAgICBWYWx1ZT0xCi0gICAgZW5kCi0gICAgaXRlbTogU2V0IENvbnRyb2wgQXR0cmlidXRlCi0gICAgICBDb250cm9sIE5hbWU9QURNSU4yCi0gICAgZW5kCi0gICAgaXRlbTogRWxzZSBTdGF0ZW1lbnQKLSAgICBlbmQKLSAgICBpdGVtOiBTZXQgQ29udHJvbCBUZXh0Ci0gICAgICBDb250cm9sIE5hbWU9QURNSU4xCi0gICAgICBDb250cm9sIFRleHQ9VGhpcyBzZWN0aW9uIGlzIGF2YWlsYWJsZSBvbmx5IGlmIGxvZ2dlZCBpbiB0byBhbiBhY2NvdW50IHdpdGggQWRtaW5pc3RyYXRvciBwcml2aWxlZ2VzLgotICAgIGVuZAotICAgIGl0ZW06IFNldCBDb250cm9sIEF0dHJpYnV0ZQotICAgICAgQ29udHJvbCBOYW1lPUFETUlOMgotICAgICAgT3BlcmF0aW9uPTEKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgICBpdGVtOiBFbmQgQmxvY2sKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U2VsZWN0IFByb2dyYW0gTWFuYWdlciBHcm91cAotICBEaXNwbGF5IFZhcmlhYmxlPURJU1BMQVkKLSAgaXRlbTogRGlhbG9nCi0gICAgVGl0bGU9JUFQUFRJVExFJSBJbnN0YWxsYXRpb24KLSAgICBUaXRsZSBGcmVuY2g9SW5zdGFsbGF0aW9uIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBHZXJtYW49SW5zdGFsbGF0aW9uIHZvbiAlQVBQVElUTEUlCi0gICAgVGl0bGUgU3BhbmlzaD1JbnN0YWxhY2nzbiBkZSAlQVBQVElUTEUlCi0gICAgVGl0bGUgSXRhbGlhbj1JbnN0YWxsYXppb25lIGRpICVBUFBUSVRMRSUKLSAgICBXaWR0aD0zMzkKLSAgICBIZWlnaHQ9MjgwCi0gICAgRm9udCBOYW1lPUhlbHYKLSAgICBGb250IFNpemU9OAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MTg4IDIzNCAyNDQgMjUzCi0gICAgICBWYXJpYWJsZT1ESVJFQ1RJT04KLSAgICAgIFZhbHVlPU4KLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMQotICAgICAgVGV4dD0mTmV4dCA+Ci0gICAgICBUZXh0IEZyZW5jaD0mU3VpdGUgPgotICAgICAgVGV4dCBHZXJtYW49JldlaXRlciA+Ci0gICAgICBUZXh0IFNwYW5pc2g9JlNpZ3VpZW50ZSA+Ci0gICAgICBUZXh0IEl0YWxpYW49JkF2YW50aSA+Ci0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xMzEgMjM0IDE4OCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9QgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PTwgJkJhY2sKLSAgICAgIFRleHQgRnJlbmNoPTwgJlJldG91cgotICAgICAgVGV4dCBHZXJtYW49PCAmWnVy/GNrCi0gICAgICBUZXh0IFNwYW5pc2g9PCAmQXRy4XMKLSAgICAgIFRleHQgSXRhbGlhbj08ICZJbmRpZXRybwotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSZDYW5jZWwKLSAgICAgIFRleHQgRnJlbmNoPSZBbm51bGVyCi0gICAgICBUZXh0IEdlcm1hbj0mQWJicmVjaGVuCi0gICAgICBUZXh0IFNwYW5pc2g9JkNhbmNlbGFyCi0gICAgICBUZXh0IEl0YWxpYW49JkFubnVsbGEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMCAyMjUgMzIwIDIyNgotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwOCAxMCAzMjMgNTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotICAgICAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAwMQotICAgICAgTmFtZT1UaW1lcyBOZXcgUm9tYW4KLSAgICAgIEZvbnQgU3R5bGU9LTI0IDAgMCAwIDcwMCAyNTUgMCAwIDAgMyAyIDEgMTgKLSAgICAgIFRleHQ9U2VsZWN0IFN0YXJ0IE1lbnUgR3JvdXAKLSAgICAgIFRleHQgRnJlbmNoPVPpbGVjdGlvbm5lciBsZSBncm91cGUgZHUgR2VzdGlvbm5haXJlIGRlIHByb2dyYW1tZQotICAgICAgVGV4dCBHZXJtYW49QmVzdGltbXVuZyBkZXIgUHJvZ3JhbW0tTWFuYWdlcmdydXBwZQotICAgICAgVGV4dCBTcGFuaXNoPVNlbGVjY2lvbmUgZ3J1cG8gZGVsIEFkbWluaXN0cmFkb3IgZGUgcHJvZ3JhbWFzCi0gICAgICBUZXh0IEl0YWxpYW49U2VsZXppb25hcmUgaWwgZ3J1cHBvIFByb2dNYW4KLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggMzUgMzIwIDY1Ci0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9RW50ZXIgdGhlIG5hbWUgb2YgdGhlIFN0YXJ0IE1lbnUgcHJvZ3JhbSBncm91cCB0byB3aGljaCB0byBhZGQgdGhlICVBUFBUSVRMRSUgaWNvbnM6Ci0gICAgICBUZXh0IEZyZW5jaD1FbnRyZXogbGUgbm9tIGR1IGdyb3VwZSBkdSBHZXN0aW9ubmFpcmUgZGUgcHJvZ3JhbW1lIGRhbnMgbGVxdWVsIHZvdXMgc291aGFpdGV6IGFqb3V0ZXIgbGVzIGlj9G5lcyBkZSAlQVBQVElUTEUlIDoKLSAgICAgIFRleHQgR2VybWFuPUdlYmVuIFNpZSBkZW4gTmFtZW4gZGVyIFByb2dyYW1tZ3J1cHBlIGVpbiwgZGVyIGRhcyBTeW1ib2wgJUFQUFRJVExFJSBoaW56dWdlZvxndCB3ZXJkZW4gc29sbDoKLSAgICAgIFRleHQgU3BhbmlzaD1Fc2NyaWJhIGVsIG5vbWJyZSBkZWwgZ3J1cG8gZGVsIEFkbWluaXN0cmFkb3IgZGUgcHJvZ3JhbWFzIGVuIGVsIHF1ZSBkZXNlYSBhZ3JlZ2FyIGxvcyBpY29ub3MgZGUgJUFQUFRJVExFJToKLSAgICAgIFRleHQgSXRhbGlhbj1JbnNlcmlyZSBpbCBub21lIGRlbCBncnVwcG8gUHJvZ3JhbSBNYW5hZ2VyIHBlciBhZ2dpdW5nZXJlIGxlIGljb25lICVBUFBUSVRMRSUgYToKLSAgICBlbmQKLSAgICBpdGVtOiBDb21ib2JveAotICAgICAgUmVjdGFuZ2xlPTEwOCA1NiAzMjAgMjE5Ci0gICAgICBWYXJpYWJsZT1HUk9VUAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAxMDAwMDEwMDAwMDAxMTAwMDAwMDAxCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSVHUk9VUCUKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0IEZyZW5jaD0lR1JPVVAlCi0gICAgICBUZXh0IEdlcm1hbj0lR1JPVVAlCi0gICAgICBUZXh0IFNwYW5pc2g9JUdST1VQJQotICAgICAgVGV4dCBJdGFsaWFuPSVHUk9VUCUKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEN1c3RvbSBEaWFsb2cgU2V0Ci0gIE5hbWU9U3RhcnQgSW5zdGFsbGF0aW9uCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZOZXh0ID4KLSAgICAgIFRleHQgRnJlbmNoPSZTdWl0ZSA+Ci0gICAgICBUZXh0IEdlcm1hbj0mV2VpdGVyID4KLSAgICAgIFRleHQgU3BhbmlzaD0mU2lndWllbnRlID4KLSAgICAgIFRleHQgSXRhbGlhbj0mQXZhbnRpID4KLSAgICBlbmQKLSAgICBpdGVtOiBQdXNoIEJ1dHRvbgotICAgICAgUmVjdGFuZ2xlPTEzMSAyMzQgMTg4IDI1MwotICAgICAgVmFyaWFibGU9RElSRUNUSU9OCi0gICAgICBWYWx1ZT1CCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9PCAmQmFjawotICAgICAgVGV4dCBGcmVuY2g9PCAmUmV0b3VyCi0gICAgICBUZXh0IEdlcm1hbj08ICZadXL8Y2sKLSAgICAgIFRleHQgU3BhbmlzaD08ICZBdHLhcwotICAgICAgVGV4dCBJdGFsaWFuPTwgJkluZGlldHJvCi0gICAgZW5kCi0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0yNjQgMjM0IDMyMCAyNTMKLSAgICAgIEFjdGlvbj0zCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9JkNhbmNlbAotICAgICAgVGV4dCBGcmVuY2g9JkFubnVsZXIKLSAgICAgIFRleHQgR2VybWFuPSZBYmJyZWNoZW4KLSAgICAgIFRleHQgU3BhbmlzaD0mQ2FuY2VsYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mQW5udWxsYQotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA1MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1SZWFkeSB0byBJbnN0YWxsIQotICAgICAgVGV4dCBGcmVuY2g9UHLqdCDgIGluc3RhbGxlciAhCi0gICAgICBUZXh0IEdlcm1hbj1JbnN0YWxsYXRpb25zYmVyZWl0IQotICAgICAgVGV4dCBTcGFuaXNoPaFQcmVwYXJhZG8gcGFyYSBsYSBpbnN0YWxhY2nzbiEKLSAgICAgIFRleHQgSXRhbGlhbj1Qcm9udG8gcGVyIGwnaW5zdGFsbGF6aW9uZSEKLSAgICBlbmQKLSAgICBpdGVtOiBTdGF0aWMKLSAgICAgIFJlY3RhbmdsZT0xMDggNDAgMzIwIDYyCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9Q2xpY2sgdGhlIE5leHQgYnV0dG9uIHRvIGluc3RhbGwgJUFQUFRJVExFJSwgb3IgdGhlIEJhY2sgYnV0dG9uIHRvIGNoYW5nZSBjaG9pY2VzOgotICAgICAgVGV4dCBGcmVuY2g9Vm91cyDqdGVzIG1haW50ZW5hbnQgcHLqdCDgIGluc3RhbGxlciBsZXMgZmljaGllcnMgJUFQUFRJVExFJS4KLSAgICAgIFRleHQgRnJlbmNoPQotICAgICAgVGV4dCBGcmVuY2g9Q2xpcXVleiBzdXIgbGUgYm91dG9uIFN1aXRlIHBvdXIgY29tbWVuY2VyIGwnaW5zdGFsbGF0aW9uIG91IHN1ciBsZSBib3V0b24gUmV0b3VyIHBvdXIgZW50cmVyIGxlcyBpbmZvcm1hdGlvbnMgZCdpbnN0YWxsYXRpb24g4CBub3V2ZWF1LgotICAgICAgVGV4dCBHZXJtYW49U2llIGv2bm5lbiAlQVBQVElUTEUlIG51biBpbnN0YWxsaWVyZW4uCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgR2VybWFuPUtsaWNrZW4gU2llIGF1ZiAiV2VpdGVyIiwgdW0gbWl0IGRlciBJbnN0YWxsYXRpb24genUgYmVnaW5uZW4uIEtsaWNrZW4gU2llIGF1ZiAiWnVy/GNrIiwgdW0gZGllIEluc3RhbGxhdGlvbnNpbmZvcm1hdGlvbmVuIG5ldSBlaW56dWdlYmVuLgotICAgICAgVGV4dCBTcGFuaXNoPVlhIGVzdOEgbGlzdG8gcGFyYSBpbnN0YWxhciAlQVBQVElUTEUlLgotICAgICAgVGV4dCBTcGFuaXNoPQotICAgICAgVGV4dCBTcGFuaXNoPVByZXNpb25lIGVsIGJvdPNuIFNpZ3VpZW50ZSBwYXJhIGNvbWVuemFyIGxhIGluc3RhbGFjafNuIG8gcHJlc2lvbmUgQXRy4XMgcGFyYSB2b2x2ZXIgYSBpbmdyZXNhciBsYSBpbmZvcm1hY2nzbiBwYXJhIGxhIGluc3RhbGFjafNuLgotICAgICAgVGV4dCBJdGFsaWFuPU9yYSDoIHBvc3NpYmlsZSBpbnN0YWxsYXJlICVBUFBUSVRMRSUuCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IEl0YWxpYW49UHJlbWVyZSBpbCBwdWxzYW50ZSBBdmFudGkgcGVyIGF2dmlhcmUgbCdpbnN0YWxsYXppb25lIG8gaWwgcHVsc2FudGUgSW5kaWV0cm8gcGVyIHJlaW5zZXJpcmUgbGUgaW5mb3JtYXppb25pIGRpIGluc3RhbGxhemlvbmUuCi0gICAgZW5kCi0gICAgaXRlbTogRWRpdGJveAotICAgICAgUmVjdGFuZ2xlPTEwOCA2NiAzMjQgMjE5Ci0gICAgICBIZWxwIENvbnRleHQ9MTY3MTE2ODEKLSAgICAgIEVuYWJsZWQgQ29sb3I9MDAwMDAwMDAwMDAwMDAwMDExMTExMTExMTExMTExMTEKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDEwMDAwMDAwMDAwMTEwMDAxMTAwMDEwMAotICAgICAgVGV4dD0lU1VNTUFSWSUKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RElTUExBWQotICBWYWx1ZT1TZWxlY3QgRGVzdGluYXRpb24gRGlyZWN0b3J5Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVVzZXIgbWF5IGhhdmUgY2hhbmdlZCBNQUlORElSLCBzbyByZXNldCBCQUNLVVAgdG8gbWF0Y2guCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1CQUNLVVAKLSAgVmFsdWU9JU1BSU5ESVIlXEJBQ0tVUAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QkVHSU4gV0laQVJEIFNUVUZGIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdoZW4gdGhlIEJBQ0tVUCBmZWF0dXJlIGlzIGVuYWJsZWQsIHRoZSBCQUNLVVBESVIgaXMgaW5pdGlhbGl6ZWQKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPURPQkFDS1VQCi0gIFZhbHVlPUEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUJBQ0tVUERJUgotICBWYWx1ZT0lQkFDS1VQJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIEJSQU5ESU5HIGluZm9ybWF0aW9uIGlzIHdyaXR0ZW4gdG8gdGhlIElOSSBmaWxlIG9uIHRoZSBpbnN0YWxsYXRpb24gbWVkaWEuCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1CUkFORElORwotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0JSQU5ECi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBJTkkgRmlsZQotICBQYXRobmFtZT0lSU5TVCVcQ1VTVERBVEEuSU5JCi0gIFNldHRpbmdzPVtSZWdpc3RyYXRpb25dCi0gIFNldHRpbmdzPU5BTUU9JU5BTUUlCi0gIFNldHRpbmdzPUNPTVBBTlk9JUNPTVBBTlklCi0gIFNldHRpbmdzPQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUJlZ2luIHdyaXRpbmcgdG8gdGhlIElOU1RBTEwuTE9HCi1lbmQKLWl0ZW06IE9wZW4vQ2xvc2UgSU5TVEFMTC5MT0cKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Q2hlY2sgZnJlZSBkaXNrIHNwYWNlIGNhbGN1bGF0ZXMgZnJlZSBkaXNrIHNwYWNlIGFzIHdlbGwgYXMgY29tcG9uZW50IHNpemVzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JdCBzaG91bGQgYmUgbG9jYXRlZCBiZWZvcmUgYWxsIEluc3RhbGwgRmlsZSBhY3Rpb25zLgotZW5kCi1pdGVtOiBDaGVjayBEaXNrIFNwYWNlCi0gIENvbXBvbmVudD1DT01QT05FTlRTCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoaXMgaW5jbHVkZSBzY3JpcHQgYWxsb3dzIHVuaW5zdGFsbCBzdXBwb3J0Ci1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06ICB0aGlzIGlzIG91ciBvd24gVW5pbnN0YWwud3NlLCBhIGNvcHkgb2YgV2lzZSdzIGV4Y2VwdAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1pdCB3cml0ZXMgdG8gSEtDVSAoaW5zdGVhZCBvZiBIS0xNKSBpZiB0aGUgdXNlciBkb2Vzbid0IGhhdmUgYWRtaW4gcHJpdnMuCi1lbmQKLWl0ZW06IEluY2x1ZGUgU2NyaXB0Ci0gIFBhdGhuYW1lPS5cVW5pbnN0YWwud3NlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU5vdGUgZnJvbSBUaW06IHRoZXNlIHNlZW1pbmcgbm8tb3BzIGFjdHVhbGx5IGNvbnZlcnQgdG8gc2hvcnQgZmlsZW5hbWVzLgotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9Q09NTU9OCi0gIFZhbHVlPSVDT01NT04lCi0gIEZsYWdzPTAwMDEwMTAwCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1NQUlORElSCi0gIFZhbHVlPSVNQUlORElSJQotICBGbGFncz0wMDAxMDEwMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzIElGL1RIRU4vRUxTRSByZWFkcyB0aGUgY29ycmVjdCByZWdpc3RyeSBlbnRyaWVzIGZvciBzaG9ydGN1dC9pY29uIHBsYWNlbWVudAotZW5kCi1pdGVtOiBDaGVjayBDb25maWd1cmF0aW9uCi0gIEZsYWdzPTEwMTExMDExCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9U1RBUlRVUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVXSU4lXFN0YXJ0IE1lbnVcUHJvZ3JhbXNcU3RhcnRVcAotICBWYWx1ZSBOYW1lPVN0YXJ0VXAKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1ERVNLVE9QRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcRGVza3RvcAotICBWYWx1ZSBOYW1lPURlc2t0b3AKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1TVEFSVE1FTlVESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lV0lOJVxTdGFydCBNZW51Ci0gIFZhbHVlIE5hbWU9U3RhcnQgTWVudQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUdST1VQRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVdJTiVcU3RhcnQgTWVudVxQcm9ncmFtcwotICBWYWx1ZSBOYW1lPVByb2dyYW1zCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEdldCBSZWdpc3RyeSBLZXkgVmFsdWUKLSAgVmFyaWFibGU9Q1NUQVJUVVBESVIKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEV4cGxvcmVyXFNoZWxsIEZvbGRlcnMKLSAgRGVmYXVsdD0lU1RBUlRVUERJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gU3RhcnR1cAotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNERVNLVE9QRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JURFU0tUT1BESVIlCi0gIFZhbHVlIE5hbWU9Q29tbW9uIERlc2t0b3AKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogR2V0IFJlZ2lzdHJ5IEtleSBWYWx1ZQotICBWYXJpYWJsZT1DU1RBUlRNRU5VRElSCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxFeHBsb3JlclxTaGVsbCBGb2xkZXJzCi0gIERlZmF1bHQ9JVNUQVJUTUVOVURJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gU3RhcnQgTWVudQotICBGbGFncz0wMDAwMDEwMAotZW5kCi1pdGVtOiBHZXQgUmVnaXN0cnkgS2V5IFZhbHVlCi0gIFZhcmlhYmxlPUNHUk9VUERJUgotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cRXhwbG9yZXJcU2hlbGwgRm9sZGVycwotICBEZWZhdWx0PSVHUk9VUERJUiUKLSAgVmFsdWUgTmFtZT1Db21tb24gUHJvZ3JhbXMKLSAgRmxhZ3M9MDAwMDAxMDAKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9Tm90ZSBmcm9tIFRpbTogIHRoZSBXaXphcmQgbGVmdCB0aGlzIGJsb2NrIGVtcHR5IQotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1QZXJoYXBzIGl0J3Mgb25seSByZWxldmFudCBvbiBXaW5kb3dzIDMuMS4KLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUVORCBXSVpBUkQgU1RVRkYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1TRUxFQ1RfQURNSU4KLSAgVmFsdWU9QgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGUgdXNlciBjaG9zZSBhIG5vbi1hZG1pbiBpbnN0YWxsIGluICJBZHZhbmNlZCBPcHRpb25zIi4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBzaG91bGQgY29tZSBhZnRlciB0aGUgaW5jbHVkZSBvZiBVbmluc3RhbC53c2UgYWJvdmUsIGJlY2F1c2UKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9d3JpdGluZyB1bmluc3RhbGwgaW5mbyB0byBIS0NVIGlzIGluZWZmZWN0aXZlIGV4Y2VwdCB1bmRlciBXaW4ySy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURPQURNSU4KLSAgVmFsdWU9MAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1DR1JPVVBfU0FWRQotICBWYWx1ZT0lR1JPVVAlCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUdST1VQCi0gIFZhbHVlPSVDR1JPVVBESVIlXCVHUk9VUCUKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPUdST1VQCi0gIFZhbHVlPSVHUk9VUERJUiVcJUdST1VQJQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Mb25nIHNlY3Rpb24gdG8gaW5zdGFsbCBmaWxlcy4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPURMTERFU1QKLSAgVmFsdWU9JVNZUzMyJQotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBTZXQgVmFyaWFibGUKLSAgVmFyaWFibGU9RExMREVTVAotICBWYWx1ZT0lTUFJTkRJUiUKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JbnN0YWxsIHRoZSBsaWNlbnNlIGV2ZW4gaWYgdGhleSBkZXNlbGVjdCBldmVyeXRoaW5nIDx3aW5rPi4KLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWNlbnNlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMSUNFTlNFLnR4dAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxSRUFETUUudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxtaXNjXG5ld3MKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXE5FV1MudHh0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SWNvbnMgLS0gYWx3YXlzIGluc3RhbGwgc28gdGhhdCB0aGUgdW5pbnN0YWxsZXIgY2FuIHVzZSB0aGVtIGZvciBpdHMgb3duIGRpc3BsYXkuCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHljb24uaWNvCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxweWNvbi5pY28KLSAgRmxhZ3M9MDAwMDAwMDAxMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5Yy5pY28KLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHB5Yy5pY28KLSAgRmxhZ3M9MDAwMDAwMDAxMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHBjXHB5LmljbwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHkuaWNvCi0gIEZsYWdzPTAwMDAwMDAwMTAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRoZXNlIGFycmFuZ2UgdG8gKHJlY3Vyc2l2ZWx5ISkgZGVsZXRlIGFsbCAucHljIGFuZCAucHlvIGZpbGVzIGF0IHVuaW5zdGFsbCB0aW1lLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1UaGlzICJkb2VzIHRoZSByaWdodCB0aGluZyI6ICBhbnkgZGlyZWN0b3JpZXMgbGVmdCBlbXB0eSBhdCB0aGUgZW5kIGFyZSByZW1vdmVkLgotZW5kCi1pdGVtOiBBZGQgVGV4dCB0byBJTlNUQUxMLkxPRwotICBUZXh0PUZpbGUgVHJlZTogJU1BSU5ESVIlXCoucHljCi1lbmQKLWl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9RmlsZSBUcmVlOiAlTUFJTkRJUiVcKi5weW8KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUE6IGludGVycHJldGVyIGFuZCBsaWJyYXJpZXMKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QQotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FeGVjdXRhYmxlcwotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9uLmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHl0aG9uLmV4ZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob253LmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVccHl0aG9udy5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cdzl4cG9wZW4uZXhlCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVx3OXhwb3Blbi5leGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RXh0ZW5zaW9uIG1vZHVsZSBETExzICgucHlkKTsga2VlcCBpbiBzeW5jaCB3aXRoIGxpYnMgZGlyZWN0b3J5IG5leHQKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnJlZy5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcd2lucmVnLnB5ZAotICBEZXNjcmlwdGlvbj1FeHRlbnNpb24gbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfY3N2LnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfY3N2LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3JlLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc3JlLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3NsLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfc3NsLnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llxfc3ltdGFibGUucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXF9zeW10YWJsZS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3Rlc3RjYXBpLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfdGVzdGNhcGkucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90a2ludGVyLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xfdGtpbnRlci5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NvY2tldC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcX3NvY2tldC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cYnoyLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xiejIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGRhdGV0aW1lLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xkYXRldGltZS5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cbW1hcC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcbW1hcC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccGFyc2VyLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1xwYXJzZXIucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHB5ZXhwYXQucHlkCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzXHB5ZXhwYXQucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHNlbGVjdC5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcc2VsZWN0LnB5ZAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx1bmljb2RlZGF0YS5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcdW5pY29kZWRhdGEucHlkCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnNvdW5kLnB5ZAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcRExMc1x3aW5zb3VuZC5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cemxpYi5weWQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERMTHNcemxpYi5weWQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TGluayBsaWJyYXJpZXMgKC5saWIpOyBrZWVwIGluIHN5bmNoIHdpdGggRExMcyBhYm92ZSwgZXhjZXB0IHRoYXQgdGhlIFB5dGhvbiBsaWIgbGl2ZXMgaGVyZS4KLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHdpbnJlZy5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcd2lucmVnLmxpYgotICBEZXNjcmlwdGlvbj1MaW5rIGxpYnJhcnkgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX2Nzdi5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX2Nzdi5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NyZS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3NyZS5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3NzbC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3NzbC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cX3N5bXRhYmxlLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xfc3ltdGFibGUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF90ZXN0Y2FwaS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3Rlc3RjYXBpLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxfdGtpbnRlci5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcX3RraW50ZXIubGliCi0gIERlc2NyaXB0aW9uPUV4dGVuc2lvbiBtb2R1bGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXF9zb2NrZXQubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXF9zb2NrZXQubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXGJ6Mi5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcYnoyLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxkYXRldGltZS5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcZGF0ZXRpbWUubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXG1tYXAubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXG1tYXAubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHBhcnNlci5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNccGFyc2VyLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweWV4cGF0LmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xweWV4cGF0LmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxzZWxlY3QubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHNlbGVjdC5saWIKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5cdW5pY29kZWRhdGEubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHVuaWNvZGVkYXRhLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Llx3aW5zb3VuZC5saWIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXGxpYnNcd2luc291bmQubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uXHpsaWIubGliCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxsaWJzXHpsaWIubGliCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9LlxweXRob24lX3B5bWFqb3JfJSVfcHltaW5vcl8lLmxpYgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcbGlic1xweXRob24lX1BZTUFKT1JfJSVfUFlNSU5PUl8lLmxpYgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1NYWluIFB5dGhvbiBETEwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGVsbCBXaXNlIGl0J3MgT0sgdG8gZGVsZXRlIHRoZSBQeXRob24gRExMIGF0IHVuaW5zdGFsbCB0aW1lLAotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1kZXNwaXRlIHRoYXQgd2UgKG1heSkgd3JpdGUgaXQgaW50byBhIHN5c3RlbSBkaXJlY3RvcnkuCi1lbmQKLWl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9Tm9uLVN5c3RlbSBGaWxlOgotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS5ccHl0aG9uJV9weW1ham9yXyUlX3B5bWlub3JfJS5kbGwKLSAgRGVzdGluYXRpb249JURMTERFU1QlXHB5dGhvbiVfUFlNQUpPUl8lJV9QWU1JTk9SXyUuZGxsCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUxpYnJhcmllcyAoTGliLykKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliCi0gIERlc2NyaXB0aW9uPUxpYnJhcnkgTW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxjb21waWxlclwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcY29tcGlsZXIKLSAgRGVzY3JpcHRpb249UHl0aG9uIGNvbXBpbGVyIHdyaXR0ZW4gaW4gUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGRpc3R1dGlsc1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzCi0gIERlc2NyaXB0aW9uPURpc3RyaWJ1dGlvbiB1dGlsaXR5IG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNccmVhZG1lCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXFJFQURNRS50eHQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZGlzdHV0aWxzXGNvbW1hbmQKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LmV4ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QuZXhlCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcY29tbWFuZF90ZW1wbGF0ZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGRpc3R1dGlsc1xjb21tYW5kXGNvbW1hbmRfdGVtcGxhdGUKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsCi0gIERlc2NyaXB0aW9uPUxpYnJhcnkgZW1haWwgcGFja2FnZQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVtYWlsXHRlc3QKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbWFpbFx0ZXN0XGRhdGFcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxlbWFpbFx0ZXN0XGRhdGEKLSAgRGVzY3JpcHRpb249ZW1haWwgdGVzdCBkYXRhCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcZW1haWxcdGVzdFxkYXRhXCouZ2lmCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdFxkYXRhCi0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3QgZGF0YQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGVtYWlsXHRlc3RcZGF0YVwqLmF1Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcZW1haWxcdGVzdFxkYXRhCi0gIERlc2NyaXB0aW9uPWVtYWlsIHRlc3QgZGF0YQotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxlbmNvZGluZ3NcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGVuY29kaW5ncwotICBEZXNjcmlwdGlvbj1Vbmljb2RlIGVuY29kaW5nIHRhYmxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlxob3RzaG90XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxob3RzaG90Ci0gIERlc2NyaXB0aW9uPUZhc3QgUHl0aG9uIHByb2ZpbGVyCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXGxpYi1vbGRcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGxpYi1vbGQKLSAgRGVzY3JpcHRpb249T2Jzb2xldGUgbW9kdWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0a2ludGVyXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0a2ludGVyCi0gIERlc2NyaXB0aW9uPVRraW50ZXIgcmVsYXRlZCBsaWJyYXJ5IG1vZHVsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcbG9nZ2luZ1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcbG9nZ2luZwotICBEZXNjcmlwdGlvbj1Mb2dnaW5nIHBhY2thZ2UKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcc2l0ZS1wYWNrYWdlc1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlxzaXRlLXBhY2thZ2VzXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249U2l0ZSBwYWNrYWdlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbAotICBEZXNjcmlwdGlvbj1YTUwgc3VwcG9ydCBwYWNrYWdlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHhtbFxkb21cKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHhtbFxkb20KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxccGFyc2Vyc1wqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJceG1sXHBhcnNlcnMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx4bWxcc2F4XCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx4bWxcc2F4Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUMgSW5jbHVkZSBmaWxlcwotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGluY2x1ZGVcKi5oCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxpbmNsdWRlCi0gIERlc2NyaXB0aW9uPUhlYWRlciBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5ccGNccHljb25maWcuaAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcaW5jbHVkZVxweWNvbmZpZy5oCi0gIERlc2NyaXB0aW9uPUhlYWRlciBmaWxlcyAocHljb25maWcuaCkKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9TWljcm9zb2Z0IEMgcnVudGltZSBsaWJyYXJpZXMKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0lX1NZU18lXE1TVkNJUlQuRExMCi0gIERlc3RpbmF0aW9uPSVETExERVNUJVxNU1ZDSVJULkRMTAotICBEZXNjcmlwdGlvbj1WaXN1YWwgQysrIFJ1bnRpbWUgRExMcwotICBGbGFncz0wMDAwMDExMDAwMDEwMDExCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9TWVNfJVxNU1ZDUlQuRExMCi0gIERlc3RpbmF0aW9uPSVETExERVNUJVxNU1ZDUlQuRExMCi0gIERlc2NyaXB0aW9uPVZpc3VhbCBDKysgUnVudGltZSBETExzCi0gIEZsYWdzPTAwMDAwMTEwMDAwMTAwMTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1COiBUY2wvVGsgKFRraW50ZXIsIElETEUsIHB5ZG9jKQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVRjbC9UawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXC4uXCVfdGNsZGlyXyVcYmluXCouZGxsCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxETExzCi0gIERlc2NyaXB0aW9uPVRjbC9UayBiaW5hcmllcyBhbmQgbGlicmFyaWVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlwuLlwlX3RjbGRpcl8lXGxpYlwqLioKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXHRjbAotICBEZXNjcmlwdGlvbj1UY2wvVGsgYmluYXJpZXMgYW5kIGxpYnJhcmllcwotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JRExFCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cTGliXGlkbGVsaWJcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWIKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWIKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlwqLmRlZgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWIKLSAgRGVzY3JpcHRpb249SW50ZWdyYXRlZCBEZXZlTG9wbWVudCBFbnZpcm9ubWVudCBmb3IgUHl0aG9uCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxMaWJcaWRsZWxpYlxJY29uc1wqCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcaWRsZWxpYlxJY29ucwotICBEZXNjcmlwdGlvbj1JbnRlZ3JhdGVkIERldmVMb3BtZW50IEVudmlyb25tZW50IGZvciBQeXRob24KLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXFRvb2xzXHNjcmlwdHNcaWRsZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXcKLSAgRGVzY3JpcHRpb249SURMRSBib290c3RyYXAgc2NyaXB0Ci0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdpbmRvd3MgcHlkb2MgZHJpdmVyCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1wqLnB5dwotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcU2NyaXB0cwotICBEZXNjcmlwdGlvbj1XaW5kb3dzIHB5ZG9jIGRyaXZlcgotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QzogZG9jcwotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9JV9ET0NfJVwqLioKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXERvYwotICBEZXNjcmlwdGlvbj1QeXRob24gRG9jdW1lbnRhdGlvbiAoSFRNTCkKLSAgRmxhZ3M9MDAwMDAwMDEwMDAwMDAxMAotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUQ6IHRvb2xzCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUQKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHMKLSAgRGVzY3JpcHRpb249VXRpbGl0eSBTY3JpcHRzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xzY3JpcHRzXCouZG9jCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xTY3JpcHRzCi0gIERlc2NyaXB0aW9uPVV0aWxpdHkgU2NyaXB0cwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcc2NyaXB0c1xyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXFNjcmlwdHNcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1VdGlsaXR5IFNjcmlwdHMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1x3ZWJjaGVja2VyXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHdlYmNoZWNrZXIKLSAgRGVzY3JpcHRpb249V2ViIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcd2ViY2hlY2tlclxyZWFkbWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHdlYmNoZWNrZXJcUkVBRE1FLnR4dAotICBEZXNjcmlwdGlvbj1XZWIgY2hlY2tlciB0b29sCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcdmVyc2lvbmNoZWNrXCoucHkKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHZlcnNpb25jaGVjawotICBEZXNjcmlwdGlvbj1WZXJzaW9uIGNoZWNrZXIgdG9vbAotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNcdmVyc2lvbmNoZWNrXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcdmVyc2lvbmNoZWNrXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249VmVyc2lvbiBjaGVja2VyIHRvb2wKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlx0b29sc1xweW5jaGVcKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlCi0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVwqLnR4dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlCi0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXHB5bmNoZVx4XCoudHh0Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxUb29sc1xweW5jaGVcWAotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gWCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHJlYWRtZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXFJFQURNRS50eHQKLSAgRGVzY3JpcHRpb249cHluY2hlIGNvbG9yIGVkaXRvciAtIFJFQURNRQotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHB5bmNoZQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNccHluY2hlXHB5bmNoZS5weQotICBEZXNjcmlwdGlvbj1weW5jaGUgY29sb3IgZWRpdG9yIC0gbWFpbgotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cdG9vbHNccHluY2hlXHB5bmNoZS5weXcKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXFRvb2xzXHB5bmNoZVxweW5jaGUucHl3Ci0gIERlc2NyaXB0aW9uPXB5bmNoZSBjb2xvciBlZGl0b3IgLSBub2NvbnNvbGUgbWFpbgotICBGbGFncz0wMDAwMDAwMTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXHRvb2xzXGkxOG5cKi5weQotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcVG9vbHNcaTE4bgotICBEZXNjcmlwdGlvbj1JbnRlcm5hdGlvbmFsaXphdGlvbiBoZWxwZXJzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1FOiB0ZXN0IHN1aXRlCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUUKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFxhdWRpb3Rlc3QuYXUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0XGF1ZGlvdGVzdC5hdQotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi51dWUKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLnB5Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi54bWwKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLm91dAotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3QKLSAgRGVzY3JpcHRpb249UHl0aG9uIFRlc3QgZmlsZXMKLSAgRmxhZ3M9MDAwMDAwMDAwMDAwMDAxMAotZW5kCi1pdGVtOiBJbnN0YWxsIEZpbGUKLSAgU291cmNlPS4uXGxpYlx0ZXN0XCouYnoyCi0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi50YXIKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogSW5zdGFsbCBGaWxlCi0gIFNvdXJjZT0uLlxsaWJcdGVzdFwqLmd6Ci0gIERlc3RpbmF0aW9uPSVNQUlORElSJVxMaWJcdGVzdAotICBEZXNjcmlwdGlvbj1QeXRob24gVGVzdCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3RcKi50eHQKLSAgRGVzdGluYXRpb249JU1BSU5ESVIlXExpYlx0ZXN0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IGZpbGVzCi0gIEZsYWdzPTAwMDAwMDAwMDAwMDAwMTAKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IEluc3RhbGwgRmlsZQotICBTb3VyY2U9Li5cbGliXHRlc3Rcb3V0cHV0XCouKgotICBEZXN0aW5hdGlvbj0lTUFJTkRJUiVcTGliXHRlc3Rcb3V0cHV0Ci0gIERlc2NyaXB0aW9uPVB5dGhvbiBUZXN0IG91dHB1dCBmaWxlcwotICBGbGFncz0wMDAwMDAwMDAwMDAwMDEwCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RE9ORSB3aXRoIGZpbGUgY29weWluZy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhlIHJlc3QgaXMgcmVnaXN0cnkgYW5kIFN0YXJ0IE1lbnUgZmlkZGxpbmcuCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVJlZ2lzdGVyIGZpbGUgZXh0ZW5zaW9ucy4gIEFzIHVzdWFsLCBBZG1pbiBwcml2cyBnZXQgaW4gdGhlIHdheSwgYnV0IHdpdGggYSB0d2lzdDoKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9WW91IGRvbid0IG5lZWQgYWRtaW4gcHJpdnMgdG8gd3JpdGUgdG8gSEtFWV9DTEFTU0VTX1JPT1QgKmV4Y2VwdCogdW5kZXIgV2luMksuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PU9uIFdpbjJLLCBhIHVzZXIgd2l0aG91dCBBZG1pbiBwcml2cyBoYXMgdG8gcmVnaXN0ZXIgZXh0ZW5zaW9ucyB1bmRlciBIS0NVXFNvZnR3YXJlXENMQVNTRVMgaW5zdGVhZC4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9QnV0IHdoaWxlIHlvdSBjYW4gKmRvKiB0aGF0IHVuZGVyIG90aGVyIGZsYXZvcnMgb2YgV2luZG93cyB0b28sIGl0IGhhcyBubyB1c2VmdWwgZWZmZWN0IGV4Y2VwdCBpbiBXaW4ySy4KLWVuZAotaXRlbTogU2V0IFZhcmlhYmxlCi0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogQ2hlY2sgQ29uZmlndXJhdGlvbgotICBGbGFncz0xMTExMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IFNldCBWYXJpYWJsZQotICBWYXJpYWJsZT1VU0VfSEtDUgotICBWYWx1ZT0wCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPVVTRV9IS0NSCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSB0eXBlcy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZQotICBOZXcgVmFsdWU9UHl0aG9uIEZpbGUgKG5vIGNvbnNvbGUpCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uTm9Db25GaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICIlJTEiICUlKgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZVxEZWZhdWx0SWNvbgotICBOZXcgVmFsdWU9JU1BSU5ESVIlXFB5LmljbwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVB5dGhvbi5Db21waWxlZEZpbGUKLSAgTmV3IFZhbHVlPUNvbXBpbGVkIFB5dGhvbiBGaWxlCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uQ29tcGlsZWRGaWxlXHNoZWxsXG9wZW5cY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbi5leGUgIiUlMSIgJSUqCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uQ29tcGlsZWRGaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHljLmljbwotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSBleHRlbnNpb25zLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5Ci0gIE5ldyBWYWx1ZT1QeXRob24uRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5dwotICBOZXcgVmFsdWU9UHl0aG9uLk5vQ29uRmlsZQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9LnB5dwotICBOZXcgVmFsdWU9dGV4dC9wbGFpbgotICBWYWx1ZSBOYW1lPUNvbnRlbnQgVHlwZQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weWMKLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PS5weW8KLSAgTmV3IFZhbHVlPVB5dGhvbi5Db21waWxlZEZpbGUKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSB0eXBlcy4KLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGUKLSAgTmV3IFZhbHVlPVB5dGhvbiBGaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uRmlsZVxzaGVsbFxvcGVuXGNvbW1hbmQKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweXRob24uZXhlICIlJTEiICUlKgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxQeS5pY28KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlCi0gIE5ldyBWYWx1ZT1QeXRob24gRmlsZSAobm8gY29uc29sZSkKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgIiUlMSIgJSUqCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1xQeXRob24uTm9Db25GaWxlXERlZmF1bHRJY29uCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHkuaWNvCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkNvbXBpbGVkRmlsZQotICBOZXcgVmFsdWU9Q29tcGlsZWQgUHl0aG9uIEZpbGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Db21waWxlZEZpbGVcc2hlbGxcb3Blblxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9uLmV4ZSAiJSUxIiAlJSoKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Db21waWxlZEZpbGVcRGVmYXVsdEljb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweWMuaWNvCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9RmlsZSBleHRlbnNpb25zLgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHkKLSAgTmV3IFZhbHVlPVB5dGhvbi5GaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHkKLSAgTmV3IFZhbHVlPXRleHQvcGxhaW4KLSAgVmFsdWUgTmFtZT1Db250ZW50IFR5cGUKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHl3Ci0gIE5ldyBWYWx1ZT1QeXRob24uTm9Db25GaWxlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcQ0xBU1NFU1wucHl3Ci0gIE5ldyBWYWx1ZT10ZXh0L3BsYWluCi0gIFZhbHVlIE5hbWU9Q29udGVudCBUeXBlCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5YwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcLnB5bwotICBOZXcgVmFsdWU9UHl0aG9uLkNvbXBpbGVkRmlsZQotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1JZiB3ZSdyZSBpbnN0YWxsaW5nIElETEUsIGFsc28gc2V0IGFuIEVkaXQgY29udGV4dCBtZW51IGFjdGlvbiB0byB1c2UgSURMRSwgZm9yIC5weSBhbmQgLnB5dyBmaWxlcy4KLWVuZAotaXRlbTogSWYvV2hpbGUgU3RhdGVtZW50Ci0gIFZhcmlhYmxlPUNPTVBPTkVOVFMKLSAgVmFsdWU9QgotICBGbGFncz0wMDAwMDAxMAotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9VVNFX0hLQ1IKLSAgVmFsdWU9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9UHl0aG9uLk5vQ29uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1QeXRob24uRmlsZVxzaGVsbFxFZGl0IHdpdGggSURMRVxjb21tYW5kCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVccHl0aG9udy5leGUgJU1BSU5ESVIlXExpYlxpZGxlbGliXGlkbGUucHl3IC1uIC1lICIlJTEiCi1lbmQKLWl0ZW06IEVsc2UgU3RhdGVtZW50Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxDTEFTU0VTXFB5dGhvbi5Ob0NvbkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXENMQVNTRVNcUHl0aG9uLkZpbGVcc2hlbGxcRWRpdCB3aXRoIElETEVcY29tbWFuZAotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5dGhvbncuZXhlICVNQUlORElSJVxMaWJcaWRsZWxpYlxpZGxlLnB5dyAtbiAtZSAiJSUxIgotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVJlZ2lzdGVyIFB5dGhvbiBwYXRocy4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9V3JpdGUgdG8gSEtMTSBmb3IgYWRtaW4sIGVsc2UgSEtDVS4gIEtlZXAgdGhlc2UgYmxvY2tzIG90aGVyd2lzZSBpZGVudGljYWwhCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXEN1cnJlbnRWZXJzaW9uCi0gIFJvb3Q9MTMwCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aFxJbnN0YWxsR3JvdXAKLSAgTmV3IFZhbHVlPSVDR1JPVVBfU0FWRSUKLSAgTmV3IFZhbHVlPQotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxQeXRob25QYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcTGliOyVNQUlORElSJVxETExzCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcTW9kdWxlcwotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEFwcCBQYXRoc1xQeXRob24uZXhlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHl0aG9uLmV4ZQotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXEN1cnJlbnRWZXJzaW9uCi0gIFJvb3Q9MTI5Ci1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcSW5zdGFsbFBhdGgKLSAgTmV3IFZhbHVlPSVNQUlORElSJQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxJbnN0YWxsUGF0aFxJbnN0YWxsR3JvdXAKLSAgTmV3IFZhbHVlPSVDR1JPVVBfU0FWRSUKLSAgTmV3IFZhbHVlPQotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxQeXRob25QYXRoCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcTGliOyVNQUlORElSJVxETExzCi0gIE5ldyBWYWx1ZT0KLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxQeXRob25cUHl0aG9uQ29yZVwlUFlfVkVSU0lPTiVcTW9kdWxlcwotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXEFwcCBQYXRoc1xQeXRob24uZXhlCi0gIE5ldyBWYWx1ZT0lTUFJTkRJUiVcUHl0aG9uLmV4ZQotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9UmVnaXN0cnkgZmlkZGxpbmcgZm9yIGRvY3MuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVdyaXRlIHRvIEhLTE0gZm9yIGFkbWluLCBlbHNlIEhLQ1UuICBLZWVwIHRoZXNlIGJsb2NrcyBvdGhlcndpc2UgaWRlbnRpY2FsIQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1DCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1ET0FETUlOCi0gIFZhbHVlPTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxIZWxwXE1haW4gUHl0aG9uIERvY3VtZW50YXRpb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxEb2NcaW5kZXguaHRtbAotICBSb290PTIKLWVuZAotaXRlbTogRWxzZSBTdGF0ZW1lbnQKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXFB5dGhvblxQeXRob25Db3JlXCVQWV9WRVJTSU9OJVxIZWxwXE1haW4gUHl0aG9uIERvY3VtZW50YXRpb24KLSAgTmV3IFZhbHVlPSVNQUlORElSJVxEb2NcaW5kZXguaHRtbAotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9U2V0IHRoZSBhcHAgcHVibGlzaGVyIGFuZCBVUkwgZW50cmllcyBmb3IgV2luMksgYWRkL3JlbW92ZS4KLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SXQgZG9lc24ndCBodXJ0IG9uIG90aGVyIHN5c3RlbXMuCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUFzIHVzdWFsLCB3cml0ZSB0byBIS0xNIG9yIEhLQ1UgZGVwZW5kaW5nIG9uIEFkbWluIHByaXZzLgotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1DQVVUSU9OOiAgSWYgeW91IHNldCB0aGlzIGluZm8gb24gdGhlICJXaW5kb3dzIDIwMDAiIHBhZ2UgKHN0ZXAgNikgb2YgdGhlCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PUluc3RhbGxhdGlvbiBFeHBlcnQsIGl0IG9ubHkgc2hvd3MgdXAgaW4gdGhlICJJZiIgYmxvY2sgYmVsb3cuICBLZWVwIGluIHN5bmNoIQotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9RE9BRE1JTgotICBWYWx1ZT0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPUhlbHBMaW5rCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPVB5dGhvbkxhYnMgYXQgWm9wZSBDb3Jwb3JhdGlvbgotICBWYWx1ZSBOYW1lPVB1Ymxpc2hlcgotICBSb290PTIKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1odHRwOi8vd3d3LnB5dGhvbi5vcmcvCi0gIFZhbHVlIE5hbWU9VVJMSW5mb0Fib3V0Ci0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVQWVZFUl9TVFJJTkclCi0gIFZhbHVlIE5hbWU9RGlzcGxheVZlcnNpb24KLSAgUm9vdD0yCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9JU1BSU5ESVIlXHB5LmljbywtMAotICBWYWx1ZSBOYW1lPURpc3BsYXlJY29uCi0gIFJvb3Q9MgotZW5kCi1pdGVtOiBFbHNlIFN0YXRlbWVudAotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPWh0dHA6Ly93d3cucHl0aG9uLm9yZy8KLSAgVmFsdWUgTmFtZT1IZWxwTGluawotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT1QeXRob25MYWJzIGF0IFpvcGUgQ29ycG9yYXRpb24KLSAgVmFsdWUgTmFtZT1QdWJsaXNoZXIKLSAgUm9vdD0xCi1lbmQKLWl0ZW06IEVkaXQgUmVnaXN0cnkKLSAgVG90YWwgS2V5cz0xCi0gIEtleT1Tb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJUFQUFRJVExFJQotICBOZXcgVmFsdWU9aHR0cDovL3d3dy5weXRob24ub3JnLwotICBWYWx1ZSBOYW1lPVVSTEluZm9BYm91dAotICBSb290PTEKLWVuZAotaXRlbTogRWRpdCBSZWdpc3RyeQotICBUb3RhbCBLZXlzPTEKLSAgS2V5PVNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlQVBQVElUTEUlCi0gIE5ldyBWYWx1ZT0lUFlWRVJfU1RSSU5HJQotICBWYWx1ZSBOYW1lPURpc3BsYXlWZXJzaW9uCi0gIFJvb3Q9MQotZW5kCi1pdGVtOiBFZGl0IFJlZ2lzdHJ5Ci0gIFRvdGFsIEtleXM9MQotICBLZXk9U29mdHdhcmVcTWljcm9zb2Z0XFdpbmRvd3NcQ3VycmVudFZlcnNpb25cVW5pbnN0YWxsXCVBUFBUSVRMRSUKLSAgTmV3IFZhbHVlPSVNQUlORElSJVxweS5pY28sLTAKLSAgVmFsdWUgTmFtZT1EaXNwbGF5SWNvbgotICBSb290PTEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBSZW1hcmsKLSAgVGV4dD1Qb3B1bGF0ZSBTdGFydCBNZW51IGdyb3VwCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1UQVNLUwotICBWYWx1ZT1CCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IFJlbWFyawotICBUZXh0PVNob3J0Y3V0IHRvIGluc3RhbGxlciBubyBtYXR0ZXIgd2hhdC4KLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVcdW53aXNlLmV4ZQotICBEZXN0aW5hdGlvbj0lR1JPVVAlXFVuaW5zdGFsbCBQeXRob24ubG5rCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IFJlbWFyawotZW5kCi1pdGVtOiBJZi9XaGlsZSBTdGF0ZW1lbnQKLSAgVmFyaWFibGU9Q09NUE9ORU5UUwotICBWYWx1ZT1BCi0gIEZsYWdzPTAwMDAwMDEwCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHB5dGhvbi5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxQeXRob24gKGNvbW1hbmQgbGluZSkubG5rCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBJY29uIFBhdGhuYW1lPSVNQUlORElSJVxweWNvbi5pY28KLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUIKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVccHl0aG9udy5leGUKLSAgRGVzdGluYXRpb249JUdST1VQJVxJRExFIChQeXRob24gR1VJKS5sbmsKLSAgQ29tbWFuZCBPcHRpb25zPSIlTUFJTkRJUiVcTGliXGlkbGVsaWJcaWRsZS5weXciCi0gIFdvcmtpbmcgRGlyZWN0b3J5PSVNQUlORElSJQotICBLZXkgVHlwZT0xNTM2Ci0gIEZsYWdzPTAwMDAwMDAxCi1lbmQKLWl0ZW06IENyZWF0ZSBTaG9ydGN1dAotICBTb3VyY2U9JU1BSU5ESVIlXHB5dGhvbncuZXhlCi0gIERlc3RpbmF0aW9uPSVHUk9VUCVcTW9kdWxlIERvY3MubG5rCi0gIENvbW1hbmQgT3B0aW9ucz0iJU1BSU5ESVIlXFRvb2xzXFNjcmlwdHNccHlkb2NndWkucHl3IgotICBXb3JraW5nIERpcmVjdG9yeT0lTUFJTkRJUiUKLSAgS2V5IFR5cGU9MTUzNgotICBGbGFncz0wMDAwMDAwMQotZW5kCi1pdGVtOiBFbmQgQmxvY2sKLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IElmL1doaWxlIFN0YXRlbWVudAotICBWYXJpYWJsZT1DT01QT05FTlRTCi0gIFZhbHVlPUMKLSAgRmxhZ3M9MDAwMDAwMTAKLWVuZAotaXRlbTogQ3JlYXRlIFNob3J0Y3V0Ci0gIFNvdXJjZT0lTUFJTkRJUiVcRG9jXGluZGV4Lmh0bWwKLSAgRGVzdGluYXRpb249JUdST1VQJVxQeXRob24gTWFudWFscy5sbmsKLSAgV29ya2luZyBEaXJlY3Rvcnk9JU1BSU5ESVIlCi0gIEtleSBUeXBlPTE1MzYKLSAgRmxhZ3M9MDAwMDAwMDEKLWVuZAotaXRlbTogRW5kIEJsb2NrCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBSZW1hcmsKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9SSBkb24ndCB0aGluayB3ZSBuZWVkIHRoaXMsIGJ1dCBoYXZlIGFsd2F5cyBkb25lIGl0LgotZW5kCi1pdGVtOiBTZWxmLVJlZ2lzdGVyIE9DWHMvRExMcwotICBEZXNjcmlwdGlvbj1VcGRhdGluZyBTeXN0ZW0gQ29uZmlndXJhdGlvbiwgUGxlYXNlIFdhaXQuLi4KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLXJlbWFya2VkIGl0ZW06IFJlbWFyawotICBUZXh0PURvbid0IGVuYWJsZSAiRGVsZXRlIGluLXVzZSBmaWxlcyIuICBIZXJlJ3Mgd2hhdCBoYXBwZW5zOgotZW5kCi1yZW1hcmtlZCBpdGVtOiBSZW1hcmsKLSAgVGV4dD1JbnN0YWxsIFB5dGhvbjsgdW5pbnN0YWxsIFB5dGhvbjsgaW5zdGFsbCBQeXRob24gYWdhaW4uICBSZWJvb3QgdGhlIG1hY2hpbmUuCi1lbmQKLXJlbWFya2VkIGl0ZW06IFJlbWFyawotICBUZXh0PU5vdyBVTldJU0UuRVhFIGlzIG1pc3NpbmcuICBJIHRoaW5rIHRoaXMgaXMgYSBXaXNlIGJ1ZywgYnV0IHNvIGl0IGdvZXMuCi1lbmQKLXJlbWFya2VkIGl0ZW06IEFkZCBUZXh0IHRvIElOU1RBTEwuTE9HCi0gIFRleHQ9RGVsZXRlIGluLXVzZSBmaWxlczogT24KLWVuZAotaXRlbTogUmVtYXJrCi1lbmQKLWl0ZW06IFdpemFyZCBCbG9jawotICBEaXJlY3Rpb24gVmFyaWFibGU9RElSRUNUSU9OCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBCaXRtYXAgUGF0aG5hbWU9LlxpbnN0YWxsZXIuYm1wCi0gIFggUG9zaXRpb249OQotICBZIFBvc2l0aW9uPTEwCi0gIEZpbGxlciBDb2xvcj0xMTE3Mzc1OQotICBGbGFncz0wMDAwMDAxMQotZW5kCi1pdGVtOiBDdXN0b20gRGlhbG9nIFNldAotICBOYW1lPUZpbmlzaGVkCi0gIERpc3BsYXkgVmFyaWFibGU9RElTUExBWQotICBpdGVtOiBEaWFsb2cKLSAgICBUaXRsZT0lQVBQVElUTEUlIEluc3RhbGxhdGlvbgotICAgIFRpdGxlIEZyZW5jaD1JbnN0YWxsYXRpb24gZGUgJUFQUFRJVExFJQotICAgIFRpdGxlIEdlcm1hbj1JbnN0YWxsYXRpb24gdm9uICVBUFBUSVRMRSUKLSAgICBUaXRsZSBTcGFuaXNoPUluc3RhbGFjafNuIGRlICVBUFBUSVRMRSUKLSAgICBUaXRsZSBJdGFsaWFuPUluc3RhbGxhemlvbmUgZGkgJUFQUFRJVExFJQotICAgIFdpZHRoPTMzOQotICAgIEhlaWdodD0yODAKLSAgICBGb250IE5hbWU9SGVsdgotICAgIEZvbnQgU2l6ZT04Ci0gICAgaXRlbTogUHVzaCBCdXR0b24KLSAgICAgIFJlY3RhbmdsZT0xODggMjM0IDI0NCAyNTMKLSAgICAgIFZhcmlhYmxlPURJUkVDVElPTgotICAgICAgVmFsdWU9TgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAxCi0gICAgICBUZXh0PSZGaW5pc2gKLSAgICAgIFRleHQgRnJlbmNoPSZGaW4KLSAgICAgIFRleHQgR2VybWFuPSZXZWl0ZXIKLSAgICAgIFRleHQgU3BhbmlzaD0mVGVybWluYXIKLSAgICAgIFRleHQgSXRhbGlhbj0mRmluZQotICAgIGVuZAotICAgIGl0ZW06IFB1c2ggQnV0dG9uCi0gICAgICBSZWN0YW5nbGU9MjY0IDIzNCAzMjAgMjUzCi0gICAgICBWYXJpYWJsZT1ESVNBQkxFRAotICAgICAgVmFsdWU9IQotICAgICAgQWN0aW9uPTMKLSAgICAgIENyZWF0ZSBGbGFncz0wMTAxMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAotICAgICAgVGV4dD0mQ2FuY2VsCi0gICAgICBUZXh0IEZyZW5jaD0mQW5udWxlcgotICAgICAgVGV4dCBHZXJtYW49JkFiYnJlY2hlbgotICAgICAgVGV4dCBTcGFuaXNoPSZDYW5jZWxhcgotICAgICAgVGV4dCBJdGFsaWFuPSZBbm51bGxhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDEwIDMyMyA0OAotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBGbGFncz0wMDAwMDAwMDAwMDAwMDAxCi0gICAgICBOYW1lPVRpbWVzIE5ldyBSb21hbgotICAgICAgRm9udCBTdHlsZT0tMjQgMCAwIDAgNzAwIDI1NSAwIDAgMCAzIDIgMSAxOAotICAgICAgVGV4dD1JbnN0YWxsYXRpb24gQ29tcGxldGVkIQotICAgICAgVGV4dCBGcmVuY2g9SW5zdGFsbGF0aW9uIHRlcm1pbullICEKLSAgICAgIFRleHQgR2VybWFuPURpZSBJbnN0YWxsYXRpb24gaXN0IGFiZ2VzY2hsb3NzZW4hCi0gICAgICBUZXh0IFNwYW5pc2g9oUluc3RhbGFjafNuIHRlcm1pbmFkYSEKLSAgICAgIFRleHQgSXRhbGlhbj1JbnN0YWxsYXppb25lIGNvbXBsZXRhdGEhCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA4IDQ0IDMyMCA4MgotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0gICAgICBUZXh0PSVBUFBUSVRMRSUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZC4KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PVByZXNzIHRoZSBGaW5pc2ggYnV0dG9uIHRvIGV4aXQgdGhpcyBpbnN0YWxsYXRpb24uCi0gICAgICBUZXh0IEZyZW5jaD0lQVBQVElUTEUlIGVzdCBtYWludGVuYW50IGluc3RhbGzpLgotICAgICAgVGV4dCBGcmVuY2g9Ci0gICAgICBUZXh0IEZyZW5jaD1DbGlxdWV6IHN1ciBsZSBib3V0b24gRmluIHBvdXIgcXVpdHRlciBsJ2luc3RhbGxhdGlvbi4KLSAgICAgIFRleHQgR2VybWFuPSVBUFBUSVRMRSUgd3VyZGUgZXJmb2xncmVpY2ggaW5zdGFsbGllcnQuCi0gICAgICBUZXh0IEdlcm1hbj0KLSAgICAgIFRleHQgR2VybWFuPUtsaWNrZW4gU2llIGF1ZiAiV2VpdGVyIiwgdW0gZGllIEluc3RhbGxhdGlvbiB6dSBiZWVuZGVuLgotICAgICAgVGV4dCBTcGFuaXNoPSVBUFBUSVRMRSUgc2UgaGEgaW5zdGFsYWRvIGNvbiDpeGl0by4KLSAgICAgIFRleHQgU3BhbmlzaD0KLSAgICAgIFRleHQgU3BhbmlzaD1QcmVzaW9uZSBlbCBib3TzbiBUZXJtaW5hciBwYXJhIHNhbGlyIGRlIGVzdGEgaW5zdGFsYWNp824uCi0gICAgICBUZXh0IEl0YWxpYW49TCdpbnN0YWxsYXppb25lICVBUFBUSVRMRSUg6CBzdGF0YSBwb3J0YXRhIGEgdGVybWluZSBjb24gc3VjY2Vzc28uCi0gICAgICBUZXh0IEl0YWxpYW49Ci0gICAgICBUZXh0IEl0YWxpYW49UHJlbWVyZSBpbCBwdWxzYW50ZSBGaW5lIHBlciB1c2NpcmUgZGFsbCdpbnN0YWxsYXppb25lLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwIDIyNSAzMjAgMjI2Ci0gICAgICBBY3Rpb249MwotICAgICAgQ3JlYXRlIEZsYWdzPTAxMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTExCi0gICAgZW5kCi0gICAgaXRlbTogU3RhdGljCi0gICAgICBSZWN0YW5nbGU9MTA2IDEwNSAzMTIgMjEwCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLSAgICAgIFRleHQ9U3BlY2lhbCBXaW5kb3dzIHRoYW5rcyB0bzoKLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PVdpc2UgU29sdXRpb25zLCBmb3IgdGhlIHVzZSBvZiBJbnN0YWxsTWFzdGVyIDguMS4KLSAgICAgIFRleHQ9ICAgIGh0dHA6Ly93d3cud2lzZXNvbHV0aW9ucy5jb20vCi0gICAgICBUZXh0PQotICAgICAgVGV4dD0KLSAgICAgIFRleHQ9TGV0dEVycm9yLCBFcmlrIHZhbiBCbG9rbGFuZCwgZm9yIHRoZSBQeXRob24gZm9yIFdpbmRvd3MgZ3JhcGhpYy4KLSAgICAgIFRleHQ9ICAgIGh0dHA6Ly93d3cubGV0dGVycm9yLmNvbS8KLSAgICAgIFRleHQ9Ci0gICAgICBUZXh0PQotICAgICAgVGV4dD1NYXJrIEhhbW1vbmQsIHdpdGhvdXQgd2hvc2UgeWVhcnMgb2YgZnJlZWx5IHNoYXJlZCBXaW5kb3dzIGV4cGVydGlzZSwgUHl0aG9uIGZvciBXaW5kb3dzIHdvdWxkIHN0aWxsIGJlIFB5dGhvbiBmb3IgRE9TLgotICAgIGVuZAotICAgIGl0ZW06IFN0YXRpYwotICAgICAgUmVjdGFuZ2xlPTEwNiA5NSAzMTIgOTYKLSAgICAgIEFjdGlvbj0zCi0gICAgICBFbmFibGVkIENvbG9yPTAwMDAwMDAwMDAwMDAwMDAxMTExMTExMTExMTExMTExCi0gICAgICBDcmVhdGUgRmxhZ3M9MDEwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDEKLSAgICBlbmQKLSAgZW5kCi1lbmQKLWl0ZW06IEVuZCBCbG9jawotZW5kCi1pdGVtOiBOZXcgRXZlbnQKLSAgTmFtZT1DYW5jZWwKLWVuZAotaXRlbTogUmVtYXJrCi0gIFRleHQ9VGhpcyBpbmNsdWRlIHNjcmlwdCBzdXBwb3J0cyBhIHJvbGxiYWNrIHRvIHByZWluc3RhbGxhdGlvbiBzdGF0ZSBpZiB0aGUgdXNlciBjaG9vc2VzIHRvIGNhbmNlbCBiZWZvcmUgdGhlIGluc3RhbGxhdGlvbiBpcyBjb21wbGV0ZS4KLWVuZAotaXRlbTogSW5jbHVkZSBTY3JpcHQKLSAgUGF0aG5hbWU9JV9XSVNFXyVcSU5DTFVERVxyb2xsYmFjay53c2UKLWVuZApkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVjNDE4NC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9weXRob25jb3JlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDgyNiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0icHl0aG9uY29yZSINCi0JUHJvamVjdEdVSUQ9IntDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMzB9Ig0KLQlSb290TmFtZXNwYWNlPSJweXRob25jb3JlIg0KLQlTY2NQcm9qZWN0TmFtZT0icHl0aG9uY29yZSINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO19ERUJVRztVU0VfRExfRVhQT1JUO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9Ii4vcHl0aG9uMzNfZC5kbGwiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zM19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249ImdlbmVyYXRlIGJ1aWxkaW5mbyINCi0JCQkJQ29tbWFuZExpbmU9Im1ha2VfYnVpbGRpbmZvLmV4ZSAkKENvbmZpZ3VyYXRpb25OYW1lKSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHB5dGhvbmNvcmUiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1M7VVNFX0RMX0VYUE9SVCINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IkZBTFNFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob24zMy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9weXRob24zMy5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iZ2VuZXJhdGUgYnVpbGRpbmZvIg0KLQkJCQlDb21tYW5kTGluZT0ibWFrZV9idWlsZGluZm8uZXhlICQoQ29uZmlndXJhdGlvbk5hbWUpIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLy4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGFtZDY0LXRlbXAtcmVsZWFzZVxweXRob25jb3JlIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUztVU0VfRExfRVhQT1JUIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3B5dGhvbjMzLmRsbCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbjMzLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3B5dGhvbjMzLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJnZW5lcmF0ZSBidWlsZGluZm8iDQotCQkJCUNvbW1hbmRMaW5lPSJtYWtlX2J1aWxkaW5mby5leGUgJChDb25maWd1cmF0aW9uTmFtZSkiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJfaW8iDQotICAgICAgICAgICAgRmlsdGVyPSIiPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGJ5dGVzaW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cc3RyaW5naW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJICAgIFJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9pb1xpb2Jhc2UuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cdGV4dGlvLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jIj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJ6bGliIg0KLQkJCUZpbHRlcj0iIj4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxjb21wcmVzcy5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGd6aW8uYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmJhY2suYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuYyI+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx0cmVlcy5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jIj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJtb2R1bGUuYyI+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiI+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1x6bGliIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXHpsaWIiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcemxpYiIvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6dXRpbC5jIj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19jbi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2hrLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2pwLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3Nfa3IuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY29sbGVjdGlvbnNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3N2LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RhdGV0aW1lbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oZWFwcW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9qc29uLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9sc3Byb2YuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbWF0aC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9waWNrbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfcmFuZG9tbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NyZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGNcX3N1YnByb2Nlc3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGltZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cX3dhcm5pbmdzLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGFjY3UuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGFjY2VsZXIuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xhcnJheW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXNkbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cYXN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXVkaW9vcC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGJpbmFzY2lpLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxiaXRzZXQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGJsdGlubW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYm9vbG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJ5dGVzX21ldGhvZHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlc29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNhcHN1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxjZXZhbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvZGVjcy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNvbXBpbGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjb21wbGV4b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGNvbmZpZy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHluYW1pY19hbm5vdGF0aW9ucy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGRlc2Nyb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xkbF9udC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHRvYS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZHlubG9hZF93aW4uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXJybm9tb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGVycm9ycy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmaWxlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmaWxldXRpbHMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZsb2F0b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGZyYW1lb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxmb3JtYXR0ZXJfdW5pY29kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnJvemVuLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZnVuY29iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnV0dXJlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZ2Ntb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xnZW5vYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGFyZ3MuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXRjb3B5cmlnaHQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldG9wdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xnZXRwYXRocC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldHZlcnNpb24uYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdyYW1pbml0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyMS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25caW1wb3J0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnRkbC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGl0ZXJvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xpdGVydG9vbHNtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGxpc3Rub2RlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbGlzdG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxvbmdvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYWluLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxtYXJzaGFsLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0gCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtZDVtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG1ldGFncmFtbWFyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWVtb3J5b2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbW9kc3VwcG9ydC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtc3ZjcnRtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbXVsdGlieXRlY29kZWMuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXG15cmVhZGxpbmUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c25wcmludGYuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG15c3RydG91bC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbm9kZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG9ibWFsbG9jLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJccGFyc2V0b2suYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHBlZXBob2xlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5YXJlbmEuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5Y3R5cGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5ZnBlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweW1hdGguYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RhdGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RyY21wLmMiDQotCQkJPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweXN0cnRvZC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aW1lLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxQeXRob24tYXN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5dGhvbl9udC5yYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccmFuZG9tLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNccmFuZ2VvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGE1MTJtb2R1bGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGExbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3ltdGFibGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3lzbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0aHJlYWQuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdGltZW1vZHVsZS5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblx0cmFjZWJhY2suYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHR5cGVvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2RlY3R5cGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMiPg0KLQkJPC9GaWxlPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBjXHdpbnJlZy5jIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x4eHN1YnR5cGUuYyI+DQotCQk8L0ZpbGU+DQotCQk8RmlsZQ0KLQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6aXBpbXBvcnQuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3B5dGhvbncudmNwcm9qIGIvUEMvVlM3LjEvcHl0aG9udy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ZDdmNTAuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcHl0aG9udy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InB5dGhvbnciDQotCVNjY1Byb2plY3ROYW1lPSJweXRob253Ig0KLQlTY2NMb2NhbFBhdGg9Ii4uXC4uXHBjIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1kZWJ1Z1xweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi9weXRob253X2QuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9ud19kLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLlwuL3B5dGhvbncuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vcHl0aG9udy5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlSXRhbml1bXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5caWE2NC10ZW1wLXJlbGVhc2VccHl0aG9udyINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii5cLi9weXRob253LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3B5dGhvbncucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxweXRob253Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvVVNFQ0w6TVNfT1BURVJPTiINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO05ERUJVRztfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vcHl0aG9udy5leGUiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi9weXRob253LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIj4NCi0JCTwvRmlsZT4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xXaW5NYWluLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS9yZWFkbWUudHh0IGIvUEMvVlM3LjEvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmZkOGE3MC4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS9yZWFkbWUudHh0CisrKyAvZGV2L251bGwKQEAgLTEsMzM3ICswLDAgQEAKLUJ1aWxkaW5nIFB5dGhvbiB1c2luZyBWQysrIDcuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIHBsYXRmb3JtcywgZS5nLiBXaW5kb3dzCi05NSwgOTggYW5kIE5ULiAgSXQgcmVxdWlyZXMgTWljcm9zb2Z0IFZpc3VhbCBDKysgNy4xCi0oYS5rLmEuIFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzKS4KLShGb3Igb3RoZXIgV2luZG93cyBwbGF0Zm9ybXMgYW5kIGNvbXBpbGVycywgc2VlIC4uL1BDL3JlYWRtZS50eHQuKQotCi1BbGwgeW91IG5lZWQgdG8gZG8gaXMgb3BlbiB0aGUgd29ya3NwYWNlICJwY2J1aWxkLnNsbiIgaW4gTVNWQysrLCBzZWxlY3QKLXRoZSBEZWJ1ZyBvciBSZWxlYXNlIHNldHRpbmcgKHVzaW5nICJTb2x1dGlvbiBDb25maWd1cmF0aW9uIiBmcm9tCi10aGUgIlN0YW5kYXJkIiB0b29sYmFyIiksIGFuZCBidWlsZCB0aGUgcHJvamVjdHMuCi0KLVRoZSBwcm9wZXIgb3JkZXIgdG8gYnVpbGQgc3VicHJvamVjdHM6Ci0KLTEpIHB5dGhvbmNvcmUgKHRoaXMgYnVpbGRzIHRoZSBtYWluIFB5dGhvbiBETEwgYW5kIGxpYnJhcnkgZmlsZXMsCi0gICAgICAgICAgICAgICBweXRob24zMy57ZGxsLCBsaWJ9IGluIFJlbGVhc2UgbW9kZSkKLSAgICAgICAgICAgICAgTk9URTogIGluIHByZXZpb3VzIHJlbGVhc2VzLCB0aGlzIHN1YnByb2plY3Qgd2FzCi0gICAgICAgICAgICAgIG5hbWVkIGFmdGVyIHRoZSByZWxlYXNlIG51bWJlciwgZS5nLiBweXRob24yMC4KLQotMikgcHl0aG9uICh0aGlzIGJ1aWxkcyB0aGUgbWFpbiBQeXRob24gZXhlY3V0YWJsZSwKLSAgICAgICAgICAgcHl0aG9uLmV4ZSBpbiBSZWxlYXNlIG1vZGUpCi0KLTMpIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgYXMgZGVzaXJlZCBvciBuZWVkZWQgKG5vdGU6ICB5b3UgcHJvYmFibHkgZG9uJ3QKLSAgIHdhbnQgdG8gYnVpbGQgbW9zdCBvZiB0aGUgb3RoZXIgc3VicHJvamVjdHMsIHVubGVzcyB5b3UncmUgYnVpbGRpbmcgYW4KLSAgIGVudGlyZSBQeXRob24gZGlzdHJpYnV0aW9uIGZyb20gc2NyYXRjaCwgb3Igc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzCi0gICB0byB0aGUgc3Vic3lzdGVtcyB0aGV5IGltcGxlbWVudCwgb3IgYXJlIHJ1bm5pbmcgYSBQeXRob24gY29yZSBidWlsZGJvdAotICAgdGVzdCBzbGF2ZTsgc2VlIFNVQlBST0pFQ1RTIGJlbG93KQotCi1XaGVuIHVzaW5nIHRoZSBEZWJ1ZyBzZXR0aW5nLCB0aGUgb3V0cHV0IGZpbGVzIGhhdmUgYSBfZCBhZGRlZCB0bwotdGhlaXIgbmFtZTogIHB5dGhvbjMzX2QuZGxsLCBweXRob25fZC5leGUsIHBhcnNlcl9kLnB5ZCwgYW5kIHNvIG9uLgotCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgotCi1weXRob25jb3JlCi0gICAgLmRsbCBhbmQgLmxpYgotcHl0aG9uCi0gICAgLmV4ZQotcHl0aG9udwotICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3QgcG9wIHVwIGEgRE9TIGJveAotX3NvY2tldAotICAgIHNvY2tldG1vZHVsZS5jCi1fdGVzdGNhcGkKLSAgICB0ZXN0cyBvZiB0aGUgUHl0aG9uIEMgQVBJLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKLXB5ZXhwYXQKLSAgICBQeXRob24gd3JhcHBlciBmb3IgYWNjZWxlcmF0ZWQgWE1MIHBhcnNpbmcsIHdoaWNoIGluY29ycG9yYXRlcyBzdGFibGUKLSAgICBjb2RlIGZyb20gdGhlIEV4cGF0IHByb2plY3Q6ICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2V4cGF0Lwotc2VsZWN0Ci0gICAgc2VsZWN0bW9kdWxlLmMKLXVuaWNvZGVkYXRhCi0gICAgbGFyZ2UgdGFibGVzIG9mIFVuaWNvZGUgZGF0YQotd2luc291bmQKLSAgICBwbGF5IHNvdW5kcyAodHlwaWNhbGx5IC53YXYgZmlsZXMpIHVuZGVyIFdpbmRvd3MKLQotVGhlIGZvbGxvd2luZyBzdWJwcm9qZWN0cyB3aWxsIGdlbmVyYWxseSBOT1QgYnVpbGQgb3V0IG9mIHRoZSBib3guICBUaGV5Ci13cmFwIGNvZGUgUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIHlvdSdsbCBuZWVkIHRvIGRvd25sb2FkIHRoZSBiYXNlCi1wYWNrYWdlcyBmaXJzdCBhbmQgdW5wYWNrIHRoZW0gaW50byBzaWJsaW5ncyBvZiBQQydzIHBhcmVudAotZGlyZWN0b3J5OyBmb3IgZXhhbXBsZSwgaWYgdGhpcyBkaXJlY3RvcnkgaXMgLi4uLlxkaXN0XHRydW5rXFBDXFZTNy4xLAotdW5wYWNrIGludG8gbmV3IHN1YmRpcmVjdG9yaWVzIG9mIGRpc3RcLgotCi1fdGtpbnRlcgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgVGsgd2luZG93aW5nIHN5c3RlbS4gIFJlcXVpcmVzIGJ1aWxkaW5nCi0gICAgVGNsL1RrIGZpcnN0LiAgRm9sbG93aW5nIGFyZSBpbnN0cnVjdGlvbnMgZm9yIFRjbC9UayA4LjQuMTIuCi0KLSAgICBHZXQgc291cmNlCi0gICAgLS0tLS0tLS0tLQotICAgIEluIHRoZSBkaXN0IGRpcmVjdG9yeSwgcnVuCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsOC40LjEyCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGs4LjQuMTIKLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90aXgtOC40LjAKLQotICAgIEJ1aWxkIFRjbCBmaXJzdCAoZG9uZSBoZXJlIHcvIE1TVkMgNy4xIG9uIFdpbmRvd3MgWFApCi0gICAgLS0tLS0tLS0tLS0tLS0tCi0gICAgVXNlICJTdGFydCAtPiBBbGwgUHJvZ3JhbXMgLT4gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzCi0gICAgICAgICAtPiBWaXN1YWwgU3R1ZGlvIC5ORVQgVG9vbHMgLT4gVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMgQ29tbWFuZCBQcm9tcHQiCi0gICAgdG8gZ2V0IGEgc2hlbGwgd2luZG93IHdpdGggdGhlIGNvcnJlY3QgZW52aXJvbm1lbnQgc2V0dGluZ3MKLSAgICBjZCBkaXN0XHRjbDguNC4xMlx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YwotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotCi0gICAgWFhYIFNob3VsZCB3ZSBjb21waWxlIHdpdGggT1BUUz10aHJlYWRzPwotCi0gICAgT3B0aW9uYWw6ICBydW4gdGVzdHMsIHZpYQotICAgICAgICBubWFrZSAtZiBtYWtlZmlsZS52YyB0ZXN0Ci0KLSAgICAgICAgT24gV2luWFAgUHJvLCB3aG9sbHkgdXAgdG8gZGF0ZSBhcyBvZiAzMC1BdWctMjAwNDoKLSAgICAgICAgYWxsLnRjbDogICAgICAgIFRvdGFsICAgMTA2NzggICBQYXNzZWQgIDk5NjkgICAgU2tpcHBlZCA3MDkgICAgIEZhaWxlZCAgMAotICAgICAgICBTb3VyY2VkIDEyOSBUZXN0IEZpbGVzLgotCi0gICAgQnVpbGQgVGsKLSAgICAtLS0tLS0tLQotICAgIGNkIGRpc3RcdGs4LjQuMTJcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBpbnN0YWxsCi0KLSAgICBYWFggU2hvdWxkIHdlIGNvbXBpbGUgd2l0aCBPUFRTPXRocmVhZHM/Ci0KLSAgICBYWFggT3VyIGluc3RhbGxlciBjb3BpZXMgYSBsb3Qgb2Ygc3R1ZmYgb3V0IG9mIHRoZSBUY2wvVGsgaW5zdGFsbAotICAgIFhYWCBkaXJlY3RvcnkuICBJcyBhbGwgb2YgdGhhdCByZWFsbHkgbmVlZGVkIGZvciBQeXRob24gdXNlIG9mIFRjbC9Uaz8KLQotICAgIE9wdGlvbmFsOiAgcnVuIHRlc3RzLCB2aWEKLSAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMiB0ZXN0Ci0KLSAgICAgICAgT24gV2luWFAgUHJvLCB3aG9sbHkgdXAgdG8gZGF0ZSBhcyBvZiAzMC1BdWctMjAwNDoKLSAgICAgICAgYWxsLnRjbDogICAgICAgIFRvdGFsICAgODQyMCAgICBQYXNzZWQgIDY4MjYgICAgU2tpcHBlZCAxNTgxICAgIEZhaWxlZCAgMTMKLSAgICAgICAgU291cmNlZCA5MSBUZXN0IEZpbGVzLgotICAgICAgICBGaWxlcyB3aXRoIGZhaWxpbmcgdGVzdHM6IGNhbnZJbWcudGVzdCBzY3JvbGxiYXIudGVzdCB0ZXh0V2luZC50ZXN0IHdpbldtLnRlc3QKLQotICAgQnVpbHQgVGl4Ci0gICAtLS0tLS0tLS0KLSAgIGNkIGRpc3RcdGl4LTguNC4wXHdpbgotICAgbm1ha2UgLWYgcHl0aG9uLm1hawotICAgbm1ha2UgLWYgcHl0aG9uLm1hayBpbnN0YWxsCi0KLWJ6MgotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGliYnoyIGNvbXByZXNzaW9uIGxpYnJhcnkuICBIb21lcGFnZQotICAgICAgICBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2J6aXAyLwotICAgIERvd25sb2FkIHRoZSBzb3VyY2UgZnJvbSB0aGUgcHl0aG9uLm9yZyBjb3B5IGludG8gdGhlIGRpc3QKLSAgICBkaXJlY3Rvcnk6Ci0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9iemlwMi0xLjAuMwotCi0gICAgQSBjdXN0b20gcHJlLWxpbmsgc3RlcCBpbiB0aGUgYnoyIHByb2plY3Qgc2V0dGluZ3Mgc2hvdWxkIG1hbmFnZSB0bwotICAgIGJ1aWxkIGJ6aXAyLTEuMC4zXGxpYmJ6Mi5saWIgYnkgbWFnaWMgYmVmb3JlIGJ6Mi5weWQgKG9yIGJ6Ml9kLnB5ZCkgaXMKLSAgICBsaW5rZWQgaW4gVlM3LjFcLgotICAgIEhvd2V2ZXIsIHRoZSBiejIgcHJvamVjdCBpcyBub3Qgc21hcnQgZW5vdWdoIHRvIHJlbW92ZSBhbnl0aGluZyB1bmRlcgotICAgIGJ6aXAyLTEuMC4zXCB3aGVuIHlvdSBkbyBhIGNsZWFuLCBzbyBpZiB5b3Ugd2FudCB0byByZWJ1aWxkIGJ6aXAyLmxpYgotICAgIHlvdSBuZWVkIHRvIGNsZWFuIHVwIGJ6aXAyLTEuMC4zXCBieSBoYW5kLgotCi0gICAgVGhlIGJ1aWxkIHN0ZXAgc2hvdWxkbid0IHlpZWxkIGFueSB3YXJuaW5ncyBvciBlcnJvcnMsIGFuZCBzaG91bGQgZW5kCi0gICAgYnkgZGlzcGxheWluZyA2IGJsb2NrcyBlYWNoIHRlcm1pbmF0ZWQgd2l0aAotICAgICAgICBGQzogbm8gZGlmZmVyZW5jZXMgZW5jb3VudGVyZWQKLQotICAgIEFsbCBvZiB0aGlzIG1hbmFnZWQgdG8gYnVpbGQgYnppcDItMS4wLjNcbGliYnoyLmxpYiwgd2hpY2ggdGhlIFB5dGhvbgotICAgIHByb2plY3QgbGlua3MgaW4uCi0KLV9zcWxpdGUzCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIFNRTGl0ZSBsaWJyYXJ5LgotICAgIAotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAotICAgIAotICAgIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS1zb3VyY2UtMy4zLjQKLSAgICAKLSAgICBUbyB1c2UgdGhlIGV4dGVuc2lvbiBtb2R1bGUgaW4gYSBQeXRob24gYnVpbGQgdHJlZSwgY29weSBzcWxpdGUzLmRsbCBpbnRvCi0gICAgdGhlIFZTNy4xIGZvbGRlci4KLQotX3NzbAotICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgc2VjdXJlIHNvY2tldHMgbGlicmFyeS4KLQotICAgIEdldCB0aGUgc291cmNlIGNvZGUgdGhyb3VnaAotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0wLjkuOGEKLQotICAgIEFsdGVybmF0aXZlbHksIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnLgotICAgIFlvdSBjYW4gKHRoZW9yZXRpY2FsbHkpIHVzZSBhbnkgdmVyc2lvbiBvZiBPcGVuU1NMIHlvdSBsaWtlIC0gdGhlCi0gICAgYnVpbGQgcHJvY2VzcyB3aWxsIGF1dG9tYXRpY2FsbHkgc2VsZWN0IHRoZSBsYXRlc3QgdmVyc2lvbi4KLQotICAgIFlvdSBtdXN0IGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vUHJvZHVjdHMvQWN0aXZlUGVybC8KLSAgICBhcyB0aGlzIGlzIHVzZWQgYnkgdGhlIE9wZW5TU0wgYnVpbGQgcHJvY2Vzcy4gIENvbXBsYWluIHRvIHRoZW0gPHdpbms+LgotCi0gICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBidWlsZF9zc2wucHkgdG8gcGVyZm9ybQotICAgIHRoZSBidWlsZC4gIFRoaXMgUHl0aG9uIHNjcmlwdCBsb2NhdGVzIGFuZCBidWlsZHMgeW91ciBPcGVuU1NMCi0gICAgaW5zdGFsbGF0aW9uLCB0aGVuIGludm9rZXMgYSBzaW1wbGUgbWFrZWZpbGUgdG8gYnVpbGQgdGhlIGZpbmFsIC5weWQuCi0KLSAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QKLSAgICBiZWluZyBhYmxlIHRvIGZpbmQgT3BlblNTTCBzb3VyY2VzLCBvciBub3QgYmVpbmcgYWJsZSB0byBmaW5kIGEgUGVybAotICAgIHRoYXQgd29ya3Mgd2l0aCBPcGVuU1NMKSBhbmQgZ2l2ZSBhIHJlYXNvbmFibGUgZXJyb3IgbWVzc2FnZS4KLSAgICBJZiB5b3UgaGF2ZSBhIHByb2JsZW0gdGhhdCBkb2Vzbid0IHNlZW0gdG8gYmUgaGFuZGxlZCBjb3JyZWN0bHkKLSAgICAoZWcsIHlvdSBrbm93IHlvdSBoYXZlIEFjdGl2ZVBlcmwgYnV0IHdlIGNhbid0IGZpbmQgaXQpLCBwbGVhc2UgdGFrZQotICAgIGEgcGVlayBhdCBidWlsZF9zc2wucHkgYW5kIHN1Z2dlc3QgcGF0Y2hlcy4gIE5vdGUgdGhhdCBidWlsZF9zc2wucHkKLSAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLgotCi0gICAgYnVpbGRfc3NsLnB5L01TVkMgaXNuJ3QgY2xldmVyIGVub3VnaCB0byBjbGVhbiBPcGVuU1NMIC0geW91IG11c3QgZG8KLSAgICB0aGlzIGJ5IGhhbmQuCi0KLUJ1aWxkaW5nIGZvciBJdGFuaXVtCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgcHJvamVjdCBmaWxlcyBzdXBwb3J0IGEgUmVsZWFzZUl0YW5pdW0gY29uZmlndXJhdGlvbiB3aGljaCBjcmVhdGVzCi1XaW42NC9JdGFuaXVtIGJpbmFyaWVzLiBGb3IgdGhpcyB0byB3b3JrLCB5b3UgbmVlZCB0byBpbnN0YWxsIHRoZSBQbGF0Zm9ybQotU0RLLCBpbiBwYXJ0aWN1bGFyIHRoZSA2NC1iaXQgc3VwcG9ydC4gVGhpcyBpbmNsdWRlcyBhbiBJdGFuaXVtIGNvbXBpbGVyCi0oZnV0dXJlIHJlbGVhc2VzIG9mIHRoZSBTREsgbGlrZWx5IGluY2x1ZGUgYW4gQU1ENjQgY29tcGlsZXIgYXMgd2VsbCkuCi1JbiBhZGRpdGlvbiwgeW91IG5lZWQgdGhlIFZpc3VhbCBTdHVkaW8gcGx1Z2luIGZvciBleHRlcm5hbCBDIGNvbXBpbGVycywKLWZyb20gaHR0cDovL3NmLm5ldC9wcm9qZWN0cy92c2V4dGNvbXAuIFRoZSBwbHVnaW4gd2lsbCB3cmFwIGNsLmV4ZSwgdG8KLWxvY2F0ZSB0aGUgcHJvcGVyIHRhcmdldCBjb21waWxlciwgYW5kIGNvbnZlcnQgY29tcGlsZXIgb3B0aW9ucwotYWNjb3JkaW5nbHkuIFRoZSBwcm9qZWN0IGZpbGVzIHJlcXVpcmUgYXRsZWFzdCB2ZXJzaW9uIDAuOS4KLQotQnVpbGRpbmcgZm9yIEFNRDY0Ci0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIHRoZSBSZWxlYXNlQU1ENjQgY29uZmlndXJhdGlvbiBpcyB2ZXJ5IHNpbWlsYXIKLXRvIHRoZSBJdGFuaXVtIGNvbmZpZ3VyYXRpb247IG1ha2Ugc3VyZSB5b3UgdXNlIHRoZSBsYXRlc3QgdmVyc2lvbiBvZgotdnNleHRjb21wLgotCi1CdWlsZGluZyBQeXRob24gVXNpbmcgdGhlIGZyZWUgTVMgVG9vbGtpdCBDb21waWxlcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIFZpc3VhbCBDKysgY2FuIGJlIHVzZWQgYWxtb3N0IHVuY2hhbmdlZCB3aXRoIHRoZSBmcmVlIE1TCi1Ub29sa2l0IENvbXBpbGVyLiBUaGlzIHByb3ZpZGVzIGEgd2F5IG9mIGJ1aWxkaW5nIFB5dGhvbiB1c2luZyBmcmVlbHkKLWF2YWlsYWJsZSBzb2Z0d2FyZS4KLQotTm90ZSB0aGF0IE1pY3Jvc29mdCBoYXZlIHdpdGhkcmF3biB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyLCBzbyB0aGlzIGNhbgotbm8gbG9uZ2VyIGJlIGNvbnNpZGVyZWQgYSBzdXBwb3J0ZWQgb3B0aW9uLiBUaGUgaW5zdHJ1Y3Rpb25zIGFyZSBzdGlsbAotY29ycmVjdCwgYnV0IHlvdSBuZWVkIHRvIGFscmVhZHkgaGF2ZSBhIGNvcHkgb2YgdGhlIGNvbXBpbGVyIGluIG9yZGVyIHRvIHVzZQotdGhlbS4gTWljcm9zb2Z0IG5vdyBzdXBwbHkgVmlzdWFsIEMrKyAyMDA4IEV4cHJlc3MgRWRpdGlvbiBmb3IgZnJlZSwgYnV0IHRoaXMKLWlzIE5PVCBjb21wYXRpYmxlIHdpdGggVmlzdWFsIEMrKyA3LjEgKGl0IHVzZXMgYSBkaWZmZXJlbnQgQyBydW50aW1lKSwgYW5kIHNvCi1jYW5ub3QgYmUgdXNlZCB0byBidWlsZCBhIHZlcnNpb24gb2YgUHl0aG9uIGNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQKLXB5dGhvbi5vcmcgYnVpbGQuIElmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiB1c2luZyBWaXN1YWwgQysrIDIwMDggRXhwcmVzcwotRWRpdGlvbiwgaG93ZXZlciwgeW91IHNob3VsZCBsb29rIGF0IHRoZSBQQ0J1aWxkIGRpcmVjdG9yeS4KLQotUmVxdWlyZW1lbnRzCi0KLSAgICBUbyBidWlsZCBQeXRob24sIHRoZSBmb2xsb3dpbmcgdG9vbHMgYXJlIHJlcXVpcmVkOgotCi0gICAgKiBUaGUgVmlzdWFsIEMrKyBUb29sa2l0IENvbXBpbGVyCi0gICAgICAgIG5vIGxvbmdlciBhdmFpbGFibGUgZm9yIGRvd25sb2FkIC0gc2VlIGFib3ZlCi0gICAgKiBBIHJlY2VudCBQbGF0Zm9ybSBTREsKLSAgICAgICAgZnJvbSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZG93bmxvYWRzL2RldGFpbHMuYXNweD9GYW1pbHlJRD00ODQyNjllMi0zYjg5LTQ3ZTMtOGViNy0xZjJiZTZkNzEyM2EKLSAgICAqIFRoZSAuTkVUIDEuMSBTREsKLSAgICAgICAgZnJvbSBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vZG93bmxvYWRzL2RldGFpbHMuYXNweD9GYW1pbHlJRD05YjNhMmNhNi0zNjQ3LTQwNzAtOWY0MS1hMzMzYzZiOTE4MWQKLQotICAgIFtEb2VzIGFueW9uZSBoYXZlIGJldHRlciBVUkxzIGZvciB0aGUgbGFzdCAyIG9mIHRoZXNlP10KLQotICAgIFRoZSB0b29sa2l0IGNvbXBpbGVyIGlzIG5lZWRlZCBhcyBpdCBpcyBhbiBvcHRpbWlzaW5nIGNvbXBpbGVyICh0aGUKLSAgICBjb21waWxlciBzdXBwbGllZCB3aXRoIHRoZSAuTkVUIFNESyBpcyBhIG5vbi1vcHRpbWlzaW5nIHZlcnNpb24pLiBUaGUKLSAgICBwbGF0Zm9ybSBTREsgaXMgbmVlZGVkIHRvIHByb3ZpZGUgdGhlIFdpbmRvd3MgaGVhZGVyIGZpbGVzIGFuZCBsaWJyYXJpZXMKLSAgICAodGhlIFdpbmRvd3MgMjAwMyBTZXJ2ZXIgU1AxIGVkaXRpb24sIHR5cGljYWwgaW5zdGFsbCwgaXMga25vd24gdG8gd29yayAtCi0gICAgb3RoZXIgY29uZmlndXJhdGlvbnMgb3IgdmVyc2lvbnMgYXJlIHByb2JhYmx5IGZpbmUgYXMgd2VsbCkuIFRoZSAuTkVUIDEuMQotICAgIFNESyBpcyBuZWVkZWQgYmVjYXVzZSBpdCBjb250YWlucyBhIHZlcnNpb24gb2YgbXN2Y3J0LmRsbCB3aGljaCBsaW5rcyB0bwotICAgIHRoZSBtc3ZjcjcxLmRsbCBDUlQuIE5vdGUgdGhhdCB0aGUgLk5FVCAyLjAgU0RLIGlzIE5PVCBhY2NlcHRhYmxlLCBhcyBpdAotICAgIHJlZmVyZW5jZXMgbXN2Y3I4MC5kbGwuCi0KLSAgICBBbGwgb2YgdGhlIGFib3ZlIGl0ZW1zIHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgbm9ybWFsLgotCi0gICAgSWYgeW91IGludGVuZCB0byBidWlsZCB0aGUgb3BlbnNzbCAobmVlZGVkIGZvciB0aGUgX3NzbCBleHRlbnNpb24pIHlvdQotICAgIHdpbGwgbmVlZCB0aGUgQyBydW50aW1lIHNvdXJjZXMgaW5zdGFsbGVkIGFzIHBhcnQgb2YgdGhlIHBsYXRmb3JtIFNESy4KLQotICAgIEluIGFkZGl0aW9uLCB5b3Ugd2lsbCBuZWVkIE5hbnQsIGF2YWlsYWJsZSBmcm9tCi0gICAgaHR0cDovL25hbnQuc291cmNlZm9yZ2UubmV0LiBUaGUgMC44NSByZWxlYXNlIGNhbmRpZGF0ZSAzIHZlcnNpb24gaXMga25vd24KLSAgICB0byB3b3JrLiBUaGlzIGlzIHRoZSBsYXRlc3QgcmVsZWFzZWQgdmVyc2lvbiBhdCB0aGUgdGltZSBvZiB3cml0aW5nLiBMYXRlcgotICAgICJuaWdodGx5IGJ1aWxkIiB2ZXJzaW9ucyBhcmUga25vd24gTk9UIHRvIHdvcmsgLSBpdCBpcyBub3QgY2xlYXIgYXQKLSAgICBwcmVzZW50IHdoZXRoZXIgZnV0dXJlIHJlbGVhc2VkIHZlcnNpb25zIHdpbGwgd29yay4KLQotU2V0dGluZyB1cCB0aGUgZW52aXJvbm1lbnQKLQotICAgIFN0YXJ0IGEgcGxhdGZvcm0gU0RLICJidWlsZCBlbnZpcm9ubWVudCB3aW5kb3ciIGZyb20gdGhlIHN0YXJ0IG1lbnUuIFRoZQotICAgICJXaW5kb3dzIFhQIDMyLWJpdCByZXRhaWwiIHZlcnNpb24gaXMga25vd24gdG8gd29yay4KLQotICAgIEFkZCB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzIHRvIHlvdXIgUEFUSDoKLSAgICAgICAgKiBUaGUgdG9vbGtpdCBjb21waWxlciBkaXJlY3RvcnkKLSAgICAgICAgKiBUaGUgU0RLICJXaW42NCIgYmluYXJpZXMgZGlyZWN0b3J5Ci0JKiBUaGUgTmFudCBkaXJlY3RvcnkKLSAgICBBZGQgdG8geW91ciBJTkNMVURFIGVudmlyb25tZW50IHZhcmlhYmxlOgotICAgICAgICAqIFRoZSB0b29sa2l0IGNvbXBpbGVyIElOQ0xVREUgZGlyZWN0b3J5Ci0gICAgQWRkIHRvIHlvdXIgTElCIGVudmlyb25tZW50IHZhcmlhYmxlOgotICAgICAgICAqIFRoZSB0b29sa2l0IGNvbXBpbGVyIExJQiBkaXJlY3RvcnkKLQkqIFRoZSAuTkVUIFNESyBWaXN1YWwgU3R1ZGlvIDIwMDMgVkM3XGxpYiBkaXJlY3RvcnkKLQotICAgIFRoZSBmb2xsb3dpbmcgY29tbWFuZHMgc2hvdWxkIHNldCB0aGluZ3MgdXAgYXMgeW91IG5lZWQgdGhlbToKLQotICAgICAgICByZW0gU2V0IHRoZXNlIHZhbHVlcyBhY2NvcmRpbmcgdG8gd2hlcmUgeW91IGluc3RhbGxlZCB0aGUgc29mdHdhcmUKLSAgICAgICAgc2V0IFRPT0xLSVQ9QzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIEMrKyBUb29sa2l0IDIwMDMKLSAgICAgICAgc2V0IFNESz1DOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBQbGF0Zm9ybSBTREsKLSAgICAgICAgc2V0IE5FVD1DOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwMwotICAgICAgICBzZXQgTkFOVD1DOlxVdGlsc1xOYW50Ci0KLSAgICAgICAgc2V0IFBBVEg9JVRPT0xLSVQlXGJpbjslUEFUSCU7JVNESyVcQmluXHdpbjY0OyVOQU5UJVxiaW4KLSAgICAgICAgc2V0IElOQ0xVREU9JVRPT0xLSVQlXGluY2x1ZGU7JUlOQ0xVREUlCi0gICAgICAgIHNldCBMSUI9JVRPT0xLSVQlXGxpYjslTkVUJVxWQzdcbGliOyVMSUIlCi0KLSAgICBUaGUgIndpbjY0IiBkaXJlY3RvcnkgZnJvbSB0aGUgU0RLIGlzIGFkZGVkIHRvIHN1cHBseSBleGVjdXRhYmxlcyBzdWNoIGFzCi0gICAgImN2dHJlcyIgYW5kICJsaWIiLCB3aGljaCBhcmUgbm90IGF2YWlsYWJsZSBlbHNld2hlcmUuIFRoZSB2ZXJzaW9ucyBpbiB0aGUKLSAgICAid2luNjQiIGRpcmVjdG9yeSBhcmUgMzItYml0IHByb2dyYW1zLCBzbyB0aGV5IGFyZSBmaW5lIHRvIHVzZSBoZXJlLgotCi0gICAgVGhhdCdzIGl0LiBUbyBidWlsZCBQeXRob24gKHRoZSBjb3JlIG9ubHksIG5vIGJpbmFyeSBleHRlbnNpb25zIHdoaWNoCi0gICAgZGVwZW5kIG9uIGV4dGVybmFsIGxpYnJhcmllcykgeW91IGp1c3QgbmVlZCB0byBpc3N1ZSB0aGUgY29tbWFuZAotCi0gICAgICAgIG5hbnQgLWJ1aWxkZmlsZTpweXRob24uYnVpbGQgYWxsCi0KLSAgICBmcm9tIHdpdGhpbiB0aGUgVlM3LjEgZGlyZWN0b3J5LgotCi1FeHRlbnNpb24gbW9kdWxlcwotCi0gICAgVG8gYnVpbGQgdGhvc2UgZXh0ZW5zaW9uIG1vZHVsZXMgd2hpY2ggcmVxdWlyZSBleHRlcm5hbCBsaWJyYXJpZXMKLSAgICAoX3RraW50ZXIsIGJ6MiwgX3NxbGl0ZTMsIF9zc2wpIHlvdSBjYW4gZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMKLSAgICBmb3IgdGhlIFZpc3VhbCBTdHVkaW8gYnVpbGQgYWJvdmUsIHdpdGggYSBmZXcgbWlub3IgbW9kaWZpY2F0aW9ucy4gVGhlc2UKLSAgICBpbnN0cnVjdGlvbnMgaGF2ZSBvbmx5IGJlZW4gdGVzdGVkIHVzaW5nIHRoZSBzb3VyY2VzIGluIHRoZSBQeXRob24KLSAgICBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnkgLSBidWlsZGluZyBmcm9tIG9yaWdpbmFsIHNvdXJjZXMgc2hvdWxkIHdvcmssIGJ1dAotICAgIGhhcyBub3QgYmVlbiB0ZXN0ZWQuCi0KLSAgICBGb3IgZWFjaCBleHRlbnNpb24gbW9kdWxlIHlvdSB3aXNoIHRvIGJ1aWxkLCB5b3Ugc2hvdWxkIHJlbW92ZSB0aGUKLSAgICBhc3NvY2lhdGVkIGluY2x1ZGUgbGluZSBmcm9tIHRoZSBleGNsdWRlcHJvamVjdHMgc2VjdGlvbiBvZiBwYy5idWlsZC4KLQotICAgIFRoZSBjaGFuZ2VzIHJlcXVpcmVkIGFyZToKLQotICAgIF90a2ludGVyCi0gICAgICAgIFRoZSB0aXggbWFrZWZpbGUgKHRpeC04LjQuMFx3aW5cbWFrZWZpbGUudmMpIG11c3QgYmUgbW9kaWZpZWQgdG8KLQlyZW1vdmUgcmVmZXJlbmNlcyB0byBUT09MUzMyLiBUaGUgcmVsZXZhbnQgbGluZXMgc2hvdWxkIGJlIGNoYW5nZWQgdG8KLQlyZWFkOgotICAgICAgICAgICAgY2MzMiA9IGNsLmV4ZQotICAgICAgICAgICAgbGluazMyID0gbGluay5leGUKLSAgICAgICAgICAgIGluY2x1ZGUzMiA9IAotCVRoZSByZW1haW5kZXIgb2YgdGhlIGJ1aWxkIGluc3RydWN0aW9ucyB3aWxsIHdvcmsgYXMgZ2l2ZW4uCi0KLSAgICBiejIKLSAgICAgICAgTm8gY2hhbmdlcyBhcmUgbmVlZGVkCi0KLSAgICBfc3FsaXRlMwotICAgICAgICBObyBjaGFuZ2VzIGFyZSBuZWVkZWQuIEhvd2V2ZXIsIGluIG9yZGVyIGZvciB0aGUgdGVzdHMgdG8gc3VjY2VlZCwgYQotCWNvcHkgb2Ygc3FsaXRlMy5kbGwgbXVzdCBiZSBkb3dubG9hZGVkLCBhbmQgcGxhY2VkIGFsb25nc2lkZQotCXB5dGhvbi5leGUuCi0KLSAgICBfc3NsCi0gICAgICAgIFRoZSBkb2N1bWVudGVkIGJ1aWxkIHByb2Nlc3Mgd29ya3MgYXMgd3JpdHRlbi4gSG93ZXZlciwgaXQgbmVlZHMgYQotCWNvcHkgb2YgdGhlIGZpbGUgc2V0YXJndi5vYmosIHdoaWNoIGlzIG5vdCBzdXBwbGllZCBpbiB0aGUgcGxhdGZvcm0KLQlTREsuIEhvd2V2ZXIsIHRoZSBzb3VyY2VzIGFyZSBhdmFpbGFibGUgKGluIHRoZSBjcnQgc291cmNlIGNvZGUpLiBUbwotCWJ1aWxkIHNldGFyZ3Yub2JqLCBwcm9jZWVkIGFzIGZvbGxvd3M6Ci0KLSAgICAgICAgQ29weSBzZXRhcmd2LmMsIGNydW50aW1lLmggYW5kIGludGVybmFsLmggZnJvbSAlU0RLJVxzcmNcY3J0IHRvIGEKLQl0ZW1wb3JhcnkgZGlyZWN0b3J5LgotCUNvbXBpbGUgdXNpbmcgImNsIC9jIC9JLiAvTUQgL0RfQ1JUQkxEIHNldGFyZ3YuYyIKLQlDb3B5IHRoZSByZXN1bHRpbmcgc2V0YXJndi5vYmogdG8gc29tZXdoZXJlIG9uIHlvdXIgTElCIGVudmlyb25tZW50Ci0JKCVTREslXGxpYiBpcyBhIHJlYXNvbmFibGUgcGxhY2UpLgotCi0JV2l0aCBzZXRhcmd2Lm9iaiBpbiBwbGFjZSwgdGhlIHN0YW5kYXJkIGJ1aWxkIHByb2Nlc3Mgc2hvdWxkIHdvcmsKLQlmaW5lLgotCi1ZT1VSIE9XTiBFWFRFTlNJT04gRExMcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUlmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBleHRlbnNpb24gbW9kdWxlIERMTCwgdGhlcmUncyBhbiBleGFtcGxlCi13aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLi9QQy9leGFtcGxlLzsgcmVhZCB0aGUgZmlsZQotcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3JtcHljLnB5IGIvUEMvVlM3LjEvcm1weWMucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzYzg1NzYuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvcm1weWMucHkKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIFJlbW92ZSBhbGwgdGhlIC5weWMgYW5kIC5weW8gZmlsZXMgdW5kZXIgLi4vTGliLgotCi0KLWRlZiBkZWx0cmVlKHJvb3QpOgotICAgIGltcG9ydCBvcwotICAgIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgotCi0gICAgbnB5YyA9IG5weW8gPSAwCi0gICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocm9vdCk6Ci0gICAgICAgIGZvciBuYW1lIGluIGZpbGVzOgotICAgICAgICAgICAgZGVsZXRlID0gRmFsc2UKLSAgICAgICAgICAgIGlmIG5hbWUuZW5kc3dpdGgoJy5weWMnKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5YyArPSAxCi0gICAgICAgICAgICBlbGlmIG5hbWUuZW5kc3dpdGgoJy5weW8nKToKLSAgICAgICAgICAgICAgICBkZWxldGUgPSBUcnVlCi0gICAgICAgICAgICAgICAgbnB5byArPSAxCi0KLSAgICAgICAgICAgIGlmIGRlbGV0ZToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUoam9pbihyb290LCBuYW1lKSkKLQotICAgIHJldHVybiBucHljLCBucHlvCi0KLW5weWMsIG5weW8gPSBkZWx0cmVlKCIuLi9MaWIiKQotcHJpbnQgbnB5YywgIi5weWMgZGVsZXRlZCwiLCBucHlvLCAiLnB5byBkZWxldGVkIgpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvcnQuYmF0IGIvUEMvVlM3LjEvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCBhOTEwYTc5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3J0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gcmVncnRlc3RfYXJncwotcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1yZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotcmVtICAgICAgYWZ0ZXIgZGVsZXRpbmcgYWxsIHRoZSAucHlbY29dIGZpbGVzIHJlYWNoYWJsZSBmcm9tIExpYi8uCi1yZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1yZW0gQWxsIGxlYWRpbmcgaW5zdGFuY2VzIG9mIHRoZXNlIHN3aXRjaGVzIGFyZSBzaGlmdGVkIG9mZiwgYW5kCi1yZW0gd2hhdGV2ZXIgcmVtYWlucyBpcyBwYXNzZWQgdG8gcmVncnRlc3QucHkuICBGb3IgZXhhbXBsZSwKLXJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC1PIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC14IHRlc3RfdGhyZWFkCi1yZW0gdHdpY2UsIGFuZAotcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5LgotcmVtCi1yZW0gQ29uZnVzaW5nOiAgaWYgeW91IHdhbnQgdG8gcGFzcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBsaWtlCi1yZW0gICAgIC11IG5ldHdvcmssbGFyZ2VmaWxlCi1yZW0gdGhlbiB5b3UgaGF2ZSB0byBxdW90ZSBpdCBvbiB0aGUgcnQgbGluZSwgbGlrZQotcmVtICAgICBydCAtdSAibmV0d29yayxsYXJnZWZpbGUiCi0KLXNldGxvY2FsCi0KLXNldCBleGU9cHl0aG9uCi1zZXQgcW1vZGU9Ci1zZXQgZGFzaE89Ci1QQVRIICVQQVRIJTslfmRwMC4uXC4uXC4uXHRjbHRrXGJpbgotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItcSIgKHNldCBxbW9kZT15ZXMpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi0KLXNldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlCi0KLWVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotJWV4ZSUgcm1weWMucHkKLQotZWNobyBvbgotJWNtZCUKLUBlY2hvIG9mZgotCi1lY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLXBhdXNlCi0KLTpRbW9kZQotZWNobyBvbgotJWNtZCUKZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2ogYi9QQy9WUzcuMS9zZWxlY3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MjUyZDQ1Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3NlbGVjdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwyNTggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9InNlbGVjdCINCi0JU2NjUHJvamVjdE5hbWU9InNlbGVjdCINCi0JU2NjTG9jYWxQYXRoPSIuLiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtOREVCVUc7V0lOMzI7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0LnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3NlbGVjdC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcc2VsZWN0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7X0RFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi9zZWxlY3RfZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjLG1zdmNydCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vc2VsZWN0X2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vc2VsZWN0X2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHNlbGVjdCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO05ERUJVRztXSU4zMjtfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVxzZWxlY3QiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7TkRFQlVHO1dJTjMyO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii4vc2VsZWN0LnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3NlbGVjdC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi9zZWxlY3QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2VsZWN0bW9kdWxlLmMiPg0KLQkJPC9GaWxlPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2ogYi9QQy9WUzcuMS91bmljb2RlZGF0YS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmNDdmOWIuLjAwMDAwMDAKLS0tIGEvUEMvVlM3LjEvdW5pY29kZWRhdGEudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjQ3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI3LjEwIg0KLQlOYW1lPSJ1bmljb2RlZGF0YSINCi0JU2NjUHJvamVjdE5hbWU9InVuaWNvZGVkYXRhIg0KLQlTY2NMb2NhbFBhdGg9Ii4uIj4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIi8+DQotCTwvUGxhdGZvcm1zPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLXJlbGVhc2VcdW5pY29kZWRhdGEiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGEubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXHg4Ni10ZW1wLWRlYnVnXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO19ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi91bmljb2RlZGF0YV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhX2QucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3VuaWNvZGVkYXRhX2QubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUl0YW5pdW18V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuXC4iDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXGlhNjQtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX0lUQU5JVU0gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6SUE2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCU91dHB1dEZpbGU9Ii4vdW5pY29kZWRhdGEucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3VuaWNvZGVkYXRhLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cLi91bmljb2RlZGF0YS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlQU1ENjR8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iYW1kNjQtdGVtcC1yZWxlYXNlXHVuaWNvZGVkYXRhIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSwuLlwuLlxQQyINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlB5X0JVSUxEX0NPUkVfTU9EVUxFO1dJTjMyO05ERUJVRztfV0lORE9XUztfVVNSRExMO01NQVBfRVhQT1JUUyINCi0JCQkJU3RyaW5nUG9vbGluZz0iVFJVRSINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIwIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJQnVmZmVyU2VjdXJpdHlDaGVjaz0iRkFMU0UiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJUUlVFIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURldGVjdDY0Qml0UG9ydGFiaWxpdHlQcm9ibGVtcz0iVFJVRSINCi0JCQkJRGVidWdJbmZvcm1hdGlvbkZvcm1hdD0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIgL01BQ0hJTkU6QU1ENjQgL1VTRUxJTks6TVNfU0RLIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3VuaWNvZGVkYXRhLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi91bmljb2RlZGF0YS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vdW5pY29kZWRhdGEubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbGUNCi0JCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGEuYyI+DQotCQk8L0ZpbGU+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvaiBiL1BDL1ZTNy4xL3c5eHBvcGVuLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjlmM2I0ZS4uMDAwMDAwMAotLS0gYS9QQy9WUzcuMS93OXhwb3Blbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSwxMjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjcuMTAiDQotCU5hbWU9Inc5eHBvcGVuIg0KLQlTY2NQcm9qZWN0TmFtZT0iIg0KLQlTY2NMb2NhbFBhdGg9IiI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcdzl4cG9wZW4iDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjMiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlVc2VQcmVjb21waWxlZEhlYWRlcj0iMiINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iLi93OXhwb3Blbl9kLmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3c5eHBvcGVuX2QucGRiIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtcmVsZWFzZVx3OXhwb3BlbiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7TkRFQlVHO19XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIuXC4vdzl4cG9wZW4uZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuL3c5eHBvcGVuLnBkYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM3LjEvd2luc291bmQudmNwcm9qIGIvUEMvVlM3LjEvd2luc291bmQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzRjZjM5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTNy4xL3dpbnNvdW5kLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0id2luc291bmQiDQotCVNjY1Byb2plY3ROYW1lPSJ3aW5zb3VuZCINCi0JU2NjTG9jYWxQYXRoPSIuLlwuLlxwYyI+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiIvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5ceDg2LXRlbXAtZGVidWdcd2luc291bmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9IkZBTFNFIg0KLQkJCUNoYXJhY3RlclNldD0iMiI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlLC4uXC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEU7V0lOMzI7X0RFQlVHO19XSU5ET1dTO19VU1JETEw7V0lOU09VTkRfRVhQT1JUUyINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVdhcm5pbmdMZXZlbD0iMyINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kX2QucHlkIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmRfZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmRfZC5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlx4ODYtdGVtcC1yZWxlYXNlXHdpbnNvdW5kIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmQucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2VJdGFuaXVtfFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLlwuIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxpYTY0LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19JVEFOSVVNIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpJQTY0IC9VU0VMSU5LOk1TX1NESyINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuL3dpbnNvdW5kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cLi93aW5zb3VuZC5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXC4vd2luc291bmQubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBdXhpbGlhcnlNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZUFNRDY0fFdpbjMyIg0KLQkJCU91dHB1dERpcmVjdG9yeT0iLiINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9ImFtZDY0LXRlbXAtcmVsZWFzZVx3aW5zb3VuZCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIj4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iIC9VU0VDTDpNU19PUFRFUk9OIC9HUy0iDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUsLi5cLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQeV9CVUlMRF9DT1JFX01PRFVMRTtXSU4zMjtOREVCVUc7X1dJTkRPV1M7X1VTUkRMTDtXSU5TT1VORF9FWFBPUlRTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJUUlVFIg0KLQkJCQlCYXNpY1J1bnRpbWVDaGVja3M9IjAiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJGQUxTRSINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9IlRSVUUiDQotCQkJCVVzZVByZWNvbXBpbGVkSGVhZGVyPSIyIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJRGV0ZWN0NjRCaXRQb3J0YWJpbGl0eVByb2JsZW1zPSJUUlVFIg0KLQkJCQlEZWJ1Z0luZm9ybWF0aW9uRm9ybWF0PSIzIg0KLQkJCQlDb21waWxlQXM9IjAiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9IiAvTUFDSElORTpBTUQ2NCAvVVNFTElOSzpNU19TREsiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi93aW5zb3VuZC5weWQiDQotCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIuXC4vd2luc291bmQucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iLlwuL3dpbnNvdW5kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViRGVwbG95bWVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXV4aWxpYXJ5TWFuYWdlZFdyYXBwZXJHZW5lcmF0b3JUb29sIi8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3aW5zb3VuZC5jIj4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2N0eXBlcy52Y3Byb2ogYi9QQy9WUzguMC9fY3R5cGVzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODk3MzIzMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fY3R5cGVzLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDcwNSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2N0eXBlcyINCi0JUHJvamVjdEdVSUQ9InswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9Ig0KLQlSb290TmFtZXNwYWNlPSJfY3R5cGVzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvRVhQT1JUOkRsbEdldENsYXNzT2JqZWN0LFBSSVZBVEUgL0VYUE9SVDpEbGxDYW5VbmxvYWROb3csUFJJVkFURSINCi0JCQkJU3ViU3lzdGVtPSIwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDFBMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL0VYUE9SVDpEbGxHZXRDbGFzc09iamVjdCxQUklWQVRFIC9FWFBPUlQ6RGxsQ2FuVW5sb2FkTm93LFBSSVZBVEUiDQotCQkJCVN1YlN5c3RlbT0iMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxQTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2YyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9FWFBPUlQ6RGxsR2V0Q2xhc3NPYmplY3QsUFJJVkFURSAvRVhQT1JUOkRsbENhblVubG9hZE5vdyxQUklWQVRFIg0KLQkJCQlTdWJTeXN0ZW09IjAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMUEwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjdHlwZXMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjdHlwZXNfZGxmY24uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmkuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xsaWJmZmlfbXN2Y1xmZmlfY29tbW9uLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcZmZpdGFyZ2V0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXF9jdHlwZXMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxsYmFja3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xjYWxscHJvYy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGNmaWVsZC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXGxpYmZmaV9tc3ZjXGZmaS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfY3R5cGVzXG1hbGxvY19jbG9zdXJlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNccHJlcF9jaWYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xzdGdkaWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luMzIuYyINCi0JCQkJPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIg0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcbGliZmZpX21zdmNcd2luNjQuYXNtIg0KLQkJCQk+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkJQ29tbWFuZExpbmU9Im1sNjQgL25vbG9nbyAvYyAvWmkgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCQkJPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkJCQlDb21tYW5kTGluZT0ibWw2NCAvbm9sb2dvIC9jIC9GbyAmcXVvdDskKEludERpcilcd2luNjQub2JqJnF1b3Q7ICZxdW90OyQoSW5wdXRQYXRoKSZxdW90OyYjeDBEOyYjeDBBOyINCi0JCQkJCQlPdXRwdXRzPSIkKEludERpcilcd2luNjQub2JqIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSINCi0JCQkJCT4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJCQk+DQotCQkJCQk8VG9vbA0KLQkJCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQkJCUNvbW1hbmRMaW5lPSJtbDY0IC9ub2xvZ28gL2MgL0ZvICZxdW90OyQoSW50RGlyKVx3aW42NC5vYmomcXVvdDsgJnF1b3Q7JChJbnB1dFBhdGgpJnF1b3Q7JiN4MEQ7JiN4MEE7Ig0KLQkJCQkJCU91dHB1dHM9IiQoSW50RGlyKVx3aW42NC5vYmoiDQotCQkJCQkvPg0KLQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fY3R5cGVzX3Rlc3QudmNwcm9qIGIvUEMvVlM4LjAvX2N0eXBlc190ZXN0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDk3MjQxZS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fY3R5cGVzX3Rlc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTIxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfY3R5cGVzX3Rlc3QiDQotCVByb2plY3RHVUlEPSJ7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfSINCi0JUm9vdE5hbWVzcGFjZT0iX2N0eXBlc190ZXN0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2N0eXBlc1xfY3R5cGVzX3Rlc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jdHlwZXNcX2N0eXBlc190ZXN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvaiBiL1BDL1ZTOC4wL19lbGVtZW50dHJlZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1N2RhNzIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2VsZW1lbnR0cmVlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxMyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX2VsZW1lbnR0cmVlIg0KLQlQcm9qZWN0R1VJRD0iezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0iDQotCVJvb3ROYW1lc3BhY2U9Il9lbGVtZW50dHJlZSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iWE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtVU0VfUFlFWFBBVF9DQVBJO1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlhNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7VVNFX1BZRVhQQVRfQ0FQSTtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1VTRV9QWUVYUEFUX0NBUEk7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTAwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWkuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcYXNjaWl0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcZXhwYXRfY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGV4cGF0X2V4dGVybmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XGlhc2NpaXRhYi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxpbnRlcm5hbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFxsYXRpbjF0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcbWFjY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XG5hbWV0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRccHlleHBhdG5zLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHV0Zjh0YWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRcd2luY29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGV4cGF0XHhtbHJvbGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1sdG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfZWxlbWVudHRyZWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2ogYi9QQy9WUzguMC9faGFzaGxpYi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwMzFlMmUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX2hhc2hsaWIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfaGFzaGxpYiINCi0JUHJvamVjdEdVSUQ9Ins0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9Ig0KLQlSb290TmFtZXNwYWNlPSJfaGFzaGxpYiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9oYXNob3BlbnNzbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19tc2kudmNwcm9qIGIvUEMvVlM4LjAvX21zaS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk5OTcxYzYuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX21zaS52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjkgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9tc2kiDQotCVByb2plY3RHVUlEPSJ7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfSINCi0JUm9vdE5hbWVzcGFjZT0iX21zaSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9ImZjaS5saWIgbXNpLmxpYiBycGNydDQubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE2MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iZmNpLmxpYiBtc2kubGliIHJwY3J0NC5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTYwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJmY2kubGliIG1zaS5saWIgcnBjcnQ0LmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNjAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcX21zaS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19tdWx0aXByb2Nlc3NpbmcudmNwcm9qIGIvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmMWNhZmMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX211bHRpcHJvY2Vzc2luZy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1NDUgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9tdWx0aXByb2Nlc3NpbmciDQotCVByb2plY3RHVUlEPSJ7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fSINCi0JUm9vdE5hbWVzcGFjZT0iX211bHRpcHJvY2Vzc2luZyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX211bHRpcHJvY2Vzc2luZ1xtdWx0aXByb2Nlc3NpbmcuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3NpbmdcbXVsdGlwcm9jZXNzaW5nLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcc2VtYXBob3JlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tdWx0aXByb2Nlc3Npbmdcd2luMzJfZnVuY3Rpb25zLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvX3NvY2tldC52Y3Byb2ogYi9QQy9WUzguMC9fc29ja2V0LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGFiZDk4Mi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fc29ja2V0LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDUzNyArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3NvY2tldCINCi0JUHJvamVjdEdVSUQ9Ins4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9Ig0KLQlSb290TmFtZXNwYWNlPSJfc29ja2V0Ig0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMUQwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTFEMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxRDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzb2NrZXRtb2R1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNvY2tldG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvaiBiL1BDL1ZTOC4wL19zcWxpdGUzLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjRmMTlmMS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9fc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MTMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zcWxpdGUzIg0KLQlQcm9qZWN0R1VJRD0iezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0iDQotCVJvb3ROYW1lc3BhY2U9Il9zcWxpdGUzIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJNT0RVTEVfTkFNRT1cJnF1b3Q7c3FsaXRlM1wmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMTgwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTU9EVUxFX05BTUU9XCZxdW90O3NxbGl0ZTNcJnF1b3Q7Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTE4MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik1PRFVMRV9OQU1FPVwmcXVvdDtzcWxpdGUzXCZxdW90OyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUxODAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGNhY2hlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY29ubmVjdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXGN1cnNvci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXG1pY3JvcHJvdG9jb2xzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY2FjaGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxjb25uZWN0aW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcY3Vyc29yLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcbWljcm9wcm90b2NvbHMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3NxbGl0ZVxwcmVwYXJlX3Byb3RvY29sLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVccm93LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcc3RhdGVtZW50LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zcWxpdGVcdXRpbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL19zc2wudmNwcm9qIGIvUEMvVlM4LjAvX3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5MjY3YTQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3NzbC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9Il9zc2wiDQotCVByb2plY3RHVUlEPSJ7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfSINCi0JUm9vdE5hbWVzcGFjZT0iX3NzbCINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzY0Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKG9wZW5zc2xEaXIpXGluYzMyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQob3BlbnNzbERpcilcaW5jMzIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmMzMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChvcGVuc3NsRGlyKVxpbmM2NCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zc2wuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9fdGtpbnRlci52Y3Byb2ogYi9QQy9WUzguMC9fdGtpbnRlci52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk3MDBiZGUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvX3RraW50ZXIudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTQxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJfdGtpbnRlciINCi0JUHJvamVjdEdVSUQ9Ins0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9Ig0KLQlSb290TmFtZXNwYWNlPSJfdGtpbnRlciINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliRGVidWcpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYkRlYnVnKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJCh0Y2x0a0RpcilcaW5jbHVkZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJVEhfQVBQSU5JVCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJCh0Y2x0a0xpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrRGlyKVxpbmNsdWRlIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lUSF9BUFBJTklUIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKHRjbHRrTGliKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQodGNsdGtEaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGtMaWIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKHRjbHRrNjREaXIpXGluY2x1ZGUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSVRIX0FQUElOSVQiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQodGNsdGs2NExpYikiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGtpbnRlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x0a2FwcGluaXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9iZGlzdF93aW5pbnN0LnZjcHJvaiBiL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMTFlZGYyLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2JkaXN0X3dpbmluc3QudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMjcwICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJiZGlzdF93aW5pbnN0Ig0KLQlQcm9qZWN0R1VJRD0ie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQotCVJvb3ROYW1lc3BhY2U9Indpbmluc3QiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJT3V0cHV0RGlyZWN0b3J5PSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0idHJ1ZSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LnRsYiINCi0JCQkJSGVhZGVyRmlsZU5hbWU9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMSINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZTsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUEM7Li5cLi5cUENcYmRpc3Rfd2luaW5zdDsuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJjb21jdGwzMi5saWIgaW1hZ2VobHAubGliIg0KLQkJCQlPdXRwdXRGaWxlPSIuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC04LjAuZXhlIg0KLQkJCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0iTElCQyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlSYW5kb21pemVkQmFzZUFkZHJlc3M9IjEiDQotCQkJCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCU91dHB1dERpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChQbGF0Zm9ybU5hbWUpXCQoQ29uZmlndXJhdGlvbk5hbWUpIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlNa1R5cExpYkNvbXBhdGlibGU9InRydWUiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0idHJ1ZSINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlwuLlwuLlxsaWJcZGlzdHV0aWxzXGNvbW1hbmRcd2luaW5zdC50bGIiDQotCQkJCUhlYWRlckZpbGVOYW1lPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjEiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0Oy4uXC4uXEluY2x1ZGU7Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFBDOy4uXC4uXFBDXGJkaXN0X3dpbmluc3Q7Li5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iY29tY3RsMzIubGliIGltYWdlaGxwLmxpYiINCi0JCQkJT3V0cHV0RmlsZT0iLi5cLi5cbGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtOC4wLWFtZDY0LmV4ZSINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9IkxJQkMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii4uXC4uXGxpYlxkaXN0dXRpbHNcY29tbWFuZFx3aW5pbnN0LTguMC1hbWQ2NC5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMiINCi0JCQkJUmFuZG9taXplZEJhc2VBZGRyZXNzPSIxIg0KLQkJCQlEYXRhRXhlY3V0aW9uUHJldmVudGlvbj0iMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxleHRyYWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9InpsaWIiDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGFkbGVyMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcY3JjMzIuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZnRyZWVzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IkhlYWRlciBGaWxlcyINCi0JCQlGaWx0ZXI9Img7aHBwO2h4eDtobTtpbmwiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcYmRpc3Rfd2luaW5zdFxhcmNoaXZlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImljbztjdXI7Ym1wO2RsZztyYzI7cmN0O2JpbjtyZ3M7Z2lmO2pwZztqcGVnO2pwZSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XGluc3RhbGwucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xiZGlzdF93aW5pbnN0XFB5dGhvblBvd2VyZWQuYm1wIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkLmJhdCBiL1BDL1ZTOC4wL2J1aWxkLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWJjODE4Ni4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZC5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi1AZWNobyBvZmYKLXJlbSBBIGJhdGNoIHByb2dyYW0gdG8gYnVpbGQgb3IgcmVidWlsZCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbi4KLXJlbSBqdXN0IGZvciBjb252ZW5pZW5jZS4KLQotc2V0bG9jYWwKLXNldCBwbGF0Zj1XaW4zMgotc2V0IGNvbmY9UmVsZWFzZQotc2V0IGJ1aWxkPS9idWlsZAotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLWMiIChzZXQgY29uZj0lMikgICAgICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXAiIChzZXQgcGxhdGY9JTIpICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLXIiIChzZXQgYnVpbGQ9L3JlYnVpbGQpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgY21kPWRldmVudiBwY2J1aWxkLnNsbiAlYnVpbGQlICIlY29uZiV8JXBsYXRmJSIKLWVjaG8gJWNtZCUKLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9lbnYuYmF0IGIvUEMvVlM4LjAvYnVpbGRfZW52LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGM2N2FlMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9lbnYuYmF0CisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotQCVjb21zcGVjJSAvayBlbnYuYmF0ICUqCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9wZ28uYmF0IGIvUEMvVlM4LjAvYnVpbGRfcGdvLmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTM3YjViZi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9idWlsZF9wZ28uYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gQSBiYXRjaCBwcm9ncmFtIHRvIGJ1aWxkIFBHTyAoUHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uKSBieSBmaXJzdAotcmVtIGJ1aWxkaW5nIGluc3RydW1lbnRlZCBiaW5hcmllcywgdGhlbiBydW5uaW5nIHRoZSB0ZXN0c3VpdGUsIGFuZAotcmVtIGZpbmFsbHkgYnVpbGRpbmcgdGhlIG9wdGltaXplZCBjb2RlLgotcmVtIE5vdGUsIGFmdGVyIHRoZSBmaXJzdCBpbnN0cnVtZW50ZWQgcnVuLCBvbmUgY2FuIGp1c3Qga2VlcCBvbgotcmVtIGJ1aWxkaW5nIHRoZSBQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHdoaWxlIGRldmVsb3BpbmcuCi0KLXNldGxvY2FsCi1zZXQgcGxhdGY9V2luMzIKLQotcmVtIHVzZSB0aGUgcGVyZm9ybWFuY2UgdGVzdHN1aXRlLiAgVGhpcyBpcyBxdWljayBhbmQgc2ltcGxlCi1zZXQgam9iMT0uLlwuLlx0b29sc1xweWJlbmNoXHB5YmVuY2gucHkgLW4gMSAtQyAxIC0td2l0aC1nYwotc2V0IHBhdGgxPS4uXC4uXHRvb2xzXHB5YmVuY2gKLQotcmVtIG9yIHRoZSB3aG9sZSB0ZXN0c3VpdGUgZm9yIG1vcmUgdGhvcm91Z2ggdGVzdGluZwotc2V0IGpvYjI9Li5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLXNldCBwYXRoMj0uLlwuLlxsaWIKLQotc2V0IGpvYj0lam9iMSUKLXNldCBjbHJwYXRoPSVwYXRoMSUKLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii0yIiAoc2V0IGpvYj0lam9iMiUpICYgKHNldCBjbHJwYXRoPSVwYXRoMiUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgUEdJPSVwbGF0ZiUtcGdpCi1zZXQgUEdPPSVwbGF0ZiUtcGdvCi0KLUBlY2hvIG9uCi1yZW0gYnVpbGQgdGhlIGluc3RydW1lbnRlZCB2ZXJzaW9uCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdJbnN0cnVtZW50Ci0KLXJlbSByZW1vdmUgLnB5YyBmaWxlcywgLnBnYyBmaWxlcyBhbmQgZXhlY3V0ZSB0aGUgam9iCi0lUEdJJVxweXRob24uZXhlIHJtcHljLnB5ICVjbHJwYXRoJQotZGVsICVQR0klXCoucGdjCi0lUEdJJVxweXRob24uZXhlICVqb2IlCi0KLXJlbSBmaW5hbGx5IGJ1aWxkIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbgotaWYgZXhpc3QgJVBHTyUgZGVsIC9zIC9xICVQR08lCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdVcGRhdGUKLQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdCBiL1BDL1ZTOC4wL2J1aWxkX3NzbC5iYXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM1N2IwOGIuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDEyICswLDAgQEAKLUBlY2hvIG9mZgotaWYgbm90IGRlZmluZWQgSE9TVF9QWVRIT04gKAotICBpZiAlMSBFUVUgRGVidWcgKAotICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzNfZC5kbGwgZXhpdCAxCi0gICkgRUxTRSAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUKLSAgICBpZiBub3QgZXhpc3QgcHl0aG9uMzMuZGxsIGV4aXQgMQotICApCi0pCi0lSE9TVF9QWVRIT04lIGJ1aWxkX3NzbC5weSAlMSAlMiAlMwotCmRpZmYgLS1naXQgYS9QQy9WUzguMC9idWlsZF9zc2wucHkgYi9QQy9WUzguMC9idWlsZF9zc2wucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjMTNlZjUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnVpbGRfc3NsLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjc3ICswLDAgQEAKLSMgU2NyaXB0IGZvciBidWlsZGluZyB0aGUgX3NzbCBhbmQgX2hhc2hsaWIgbW9kdWxlcyBmb3IgV2luZG93cy4KLSMgVXNlcyBQZXJsIHRvIHNldHVwIHRoZSBPcGVuU1NMIGVudmlyb25tZW50IGNvcnJlY3RseQotIyBhbmQgYnVpbGQgT3BlblNTTCwgdGhlbiBpbnZva2VzIGEgc2ltcGxlIG5tYWtlIHNlc3Npb24KLSMgZm9yIHRoZSBhY3R1YWwgX3NzbC5weWQgYW5kIF9oYXNobGliLnB5ZCBETExzLgotCi0jIFRIRU9SRVRJQ0FMTFksIHlvdSBjYW46Ci0jICogVW5wYWNrIHRoZSBsYXRlc3QgU1NMIHJlbGVhc2Ugb25lIGxldmVsIGFib3ZlIHlvdXIgbWFpbiBQeXRob24gc291cmNlCi0jICAgZGlyZWN0b3J5LiAgSXQgaXMgbGlrZWx5IHlvdSB3aWxsIGFscmVhZHkgZmluZCB0aGUgemxpYiBsaWJyYXJ5IGFuZAotIyAgIGFueSBvdGhlciBleHRlcm5hbCBwYWNrYWdlcyB0aGVyZS4KLSMgKiBJbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBpcyBzb21ld2hlcmUgb24geW91ciBwYXRoLgotIyAqIFJ1biB0aGlzIHNjcmlwdCBmcm9tIHRoZSBQQy9WUzguMCBkaXJlY3RvcnkuCi0jCi0jIGl0IHNob3VsZCBjb25maWd1cmUgYW5kIGJ1aWxkIFNTTCwgdGhlbiBidWlsZCB0aGUgX3NzbCBhbmQgX2hhc2hsaWIKLSMgUHl0aG9uIGV4dGVuc2lvbnMgd2l0aG91dCBpbnRlcnZlbnRpb24uCi0KLSMgTW9kaWZpZWQgYnkgQ2hyaXN0aWFuIEhlaW1lcwotIyBOb3cgdGhpcyBzY3JpcHQgc3VwcG9ydHMgcHJlLWdlbmVyYXRlZCBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLgotIyBEZXZlbG9wZXJzIGRvbid0IG5lZWQgYW4gaW5zdGFsbGF0aW9uIG9mIFBlcmwgYW55bW9yZSB0byBidWlsZCBQeXRob24uIEEgc3ZuCi0jIGNoZWNrb3V0IGZyb20gb3VyIHN2biByZXBvc2l0b3J5IGlzIGVub3VnaC4KLSMKLSMgSW4gT3JkZXIgdG8gY3JlYXRlIHRoZSBmaWxlcyBpbiB0aGUgY2FzZSBvZiBhbiB1cGRhdGUgeW91IHN0aWxsIG5lZWQgUGVybC4KLSMgUnVuIGJ1aWxkX3NzbCBpbiB0aGlzIG9yZGVyOgotIyBweXRob24uZXhlIGJ1aWxkX3NzbC5weSBSZWxlYXNlIHg2NAotIyBweXRob24uZXhlIGJ1aWxkX3NzbC5weSBSZWxlYXNlIFdpbjMyCi0KLWltcG9ydCBvcywgc3lzLCByZSwgc2h1dGlsCi0KLSMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgotZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgotICAgIGVudHJpZXMgPSBvcy5lbnZpcm9uWyJQQVRIIl0uc3BsaXQob3MucGF0aHNlcCkKLSAgICByZXQgPSBbXQotICAgIGZvciBwIGluIGVudHJpZXM6Ci0gICAgICAgIGZuYW1lID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguam9pbihwLCBmaWxlbmFtZSkpCi0gICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZuYW1lKSBhbmQgZm5hbWUgbm90IGluIHJldDoKLSAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgaWYgZXh0cmFzOgotICAgICAgICBmb3IgcCBpbiBleHRyYXM6Ci0gICAgICAgICAgICBmbmFtZSA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4ocCwgZmlsZW5hbWUpKQotICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZm5hbWUpIGFuZCBmbmFtZSBub3QgaW4gcmV0OgotICAgICAgICAgICAgICAgIHJldC5hcHBlbmQoZm5hbWUpCi0gICAgcmV0dXJuIHJldAotCi0jIEZpbmQgYSBzdWl0YWJsZSBQZXJsIGluc3RhbGxhdGlvbiBmb3IgT3BlblNTTC4KLSMgY3lnd2luIHBlcmwgZG9lcyAqbm90KiB3b3JrLiAgQWN0aXZlUGVybCBkb2VzLgotIyBCZWluZyBhIFBlcmwgZHVtbXksIHRoZSBzaW1wbGVzdCB3YXkgSSBjYW4gY2hlY2sgaXMgaWYgdGhlICJXaW4zMiIgcGFja2FnZQotIyBpcyBhdmFpbGFibGUuCi1kZWYgZmluZF93b3JraW5nX3BlcmwocGVybHMpOgotICAgIGZvciBwZXJsIGluIHBlcmxzOgotICAgICAgICBmaCA9IG9zLnBvcGVuKCciJXMiIC1lICJ1c2UgV2luMzI7IicgJSBwZXJsKQotICAgICAgICBmaC5yZWFkKCkKLSAgICAgICAgcmMgPSBmaC5jbG9zZSgpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgcmV0dXJuIHBlcmwKLSAgICBwcmludCgiQ2FuIG5vdCBmaW5kIGEgc3VpdGFibGUgUEVSTDoiKQotICAgIGlmIHBlcmxzOgotICAgICAgICBwcmludCgiIHRoZSBmb2xsb3dpbmcgcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZDoiKQotICAgICAgICBmb3IgcCBpbiBwZXJsczoKLSAgICAgICAgICAgIHByaW50KCIgIiwgcCkKLSAgICAgICAgcHJpbnQoIiBOb25lIG9mIHRoZXNlIHZlcnNpb25zIGFwcGVhciBzdWl0YWJsZSBmb3IgYnVpbGRpbmcgT3BlblNTTCIpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIiBOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIikKLSAgICBwcmludCgiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIpCi0gICAgcmV0dXJuIE5vbmUKLQotIyBMb2NhdGUgdGhlIGJlc3QgU1NMIGRpcmVjdG9yeSBnaXZlbiBhIGZldyByb290cyB0byBsb29rIGludG8uCi1kZWYgZmluZF9iZXN0X3NzbF9kaXIoc291cmNlcyk6Ci0gICAgY2FuZGlkYXRlcyA9IFtdCi0gICAgZm9yIHMgaW4gc291cmNlczoKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgIyBub3RlOiBkbyBub3QgYWJzcGF0aCBzOyB0aGUgYnVpbGQgd2lsbCBmYWlsIGlmIGFueQotICAgICAgICAgICAgIyBoaWdoZXIgdXAgZGlyZWN0b3J5IG5hbWUgaGFzIHNwYWNlcyBpbiBpdC4KLSAgICAgICAgICAgIGZuYW1lcyA9IG9zLmxpc3RkaXIocykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgotICAgICAgICAgICAgZm5hbWVzID0gW10KLSAgICAgICAgZm9yIGZuYW1lIGluIGZuYW1lczoKLSAgICAgICAgICAgIGZxbiA9IG9zLnBhdGguam9pbihzLCBmbmFtZSkKLSAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnFuKSBhbmQgZm5hbWUuc3RhcnRzd2l0aCgib3BlbnNzbC0iKToKLSAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLmFwcGVuZChmcW4pCi0gICAgIyBOb3cgd2UgaGF2ZSBhbGwgdGhlIGNhbmRpZGF0ZXMsIGxvY2F0ZSB0aGUgYmVzdC4KLSAgICBiZXN0X3BhcnRzID0gW10KLSAgICBiZXN0X25hbWUgPSBOb25lCi0gICAgZm9yIGMgaW4gY2FuZGlkYXRlczoKLSAgICAgICAgcGFydHMgPSByZS5zcGxpdCgiWy4tXSIsIG9zLnBhdGguYmFzZW5hbWUoYykpWzE6XQotICAgICAgICAjIGVnIC0gb3BlbnNzbC0wLjkuNy1iZXRhMSAtIGlnbm9yZSBhbGwgImJldGEiIG9yIGFueSBvdGhlciBxdWFsaWZpZXJzCi0gICAgICAgIGlmIGxlbihwYXJ0cykgPj0gNDoKLSAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAgIGlmIHBhcnRzID4gYmVzdF9wYXJ0czoKLSAgICAgICAgICAgIGJlc3RfcGFydHMgPSBwYXJ0cwotICAgICAgICAgICAgYmVzdF9uYW1lID0gYwotICAgIGlmIGJlc3RfbmFtZSBpcyBub3QgTm9uZToKLSAgICAgICAgcHJpbnQoIkZvdW5kIGFuIFNTTCBkaXJlY3RvcnkgYXQgJyVzJyIgJSAoYmVzdF9uYW1lLCkpCi0gICAgZWxzZToKLSAgICAgICAgcHJpbnQoIkNvdWxkIG5vdCBmaW5kIGFuIFNTTCBkaXJlY3RvcnkgaW4gJyVzJyIgJSAoc291cmNlcywpKQotICAgIHN5cy5zdGRvdXQuZmx1c2goKQotICAgIHJldHVybiBiZXN0X25hbWUKLQotZGVmIGNyZWF0ZV9tYWtlZmlsZTY0KG1ha2VmaWxlLCBtMzIpOgotICAgICIiIkNyZWF0ZSBhbmQgZml4IG1ha2VmaWxlIGZvciA2NGJpdAotCi0gICAgUmVwbGFjZSAzMiB3aXRoIDY0Yml0IGRpcmVjdG9yaWVzCi0gICAgIiIiCi0gICAgaWYgbm90IG9zLnBhdGguaXNmaWxlKG0zMik6Ci0gICAgICAgIHJldHVybgotICAgIHdpdGggb3BlbihtMzIpIGFzIGZpbjoKLSAgICAgICAgd2l0aCBvcGVuKG1ha2VmaWxlLCAndycpIGFzIGZvdXQ6Ci0gICAgICAgICAgICBmb3IgbGluZSBpbiBmaW46Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPXRtcDMyIiwgIj10bXA2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPW91dDMyIiwgIj1vdXQ2NCIpCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUucmVwbGFjZSgiPWluYzMyIiwgIj1pbmM2NCIpCi0gICAgICAgICAgICAgICAgIyBmb3JjZSA2NCBiaXQgbWFjaGluZQotICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoIk1LTElCPWxpYiIsICJNS0xJQj1saWIgL01BQ0hJTkU6WDY0IikKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJMRkxBR1M9IiwgIkxGTEFHUz0vTUFDSElORTpYNjQgIikKLSAgICAgICAgICAgICAgICAjIGRvbid0IGxpbmsgYWdhaW5zdCB0aGUgbGliIG9uIDY0Yml0IHN5c3RlbXMKLSAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCJidWZmZXJvdmVyZmxvd3UubGliIiwgIiIpCi0gICAgICAgICAgICAgICAgZm91dC53cml0ZShsaW5lKQotICAgIG9zLnVubGluayhtMzIpCi0KLWRlZiBmaXhfbWFrZWZpbGUobWFrZWZpbGUpOgotICAgICIiIkZpeCBzb21lIHN0dWZmIGluIGFsbCBtYWtlZmlsZXMKLSAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2ZpbGUobWFrZWZpbGUpOgotICAgICAgICByZXR1cm4KLSAgICB3aXRoIG9wZW4obWFrZWZpbGUpIGFzIGZpbjoKLSAgICAgICAgbGluZXMgPSBmaW4ucmVhZGxpbmVzKCkKLSAgICB3aXRoIG9wZW4obWFrZWZpbGUsICd3JykgYXMgZm91dDoKLSAgICAgICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIlBFUkw9Iik6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ1A9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICJDUD1jb3B5XG4iCi0gICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoIk1LRElSPSIpOgotICAgICAgICAgICAgICAgIGxpbmUgPSAiTUtESVI9bWtkaXJcbiIKLSAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiQ0ZMQUc9Iik6Ci0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQotICAgICAgICAgICAgICAgIGZvciBhbGdvIGluICgiUkM1IiwgIk1EQzIiLCAiSURFQSIpOgotICAgICAgICAgICAgICAgICAgICBub2FsZ28gPSAiIC1ET1BFTlNTTF9OT18lcyIgJSBhbGdvCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vYWxnbyBub3QgaW4gbGluZToKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lICsgbm9hbGdvCi0gICAgICAgICAgICAgICAgbGluZSA9IGxpbmUgKyAnXG4nCi0gICAgICAgICAgICBmb3V0LndyaXRlKGxpbmUpCi0KLWRlZiBydW5fY29uZmlndXJlKGNvbmZpZ3VyZSwgZG9fc2NyaXB0KToKLSAgICBwcmludCgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQotICAgIG9zLnN5c3RlbSgicGVybCBDb25maWd1cmUgIitjb25maWd1cmUrIiBuby1pZGVhIG5vLW1kYzIiKQotICAgIHByaW50KGRvX3NjcmlwdCkKLSAgICBvcy5zeXN0ZW0oZG9fc2NyaXB0KQotCi1kZWYgY21wKGYxLCBmMik6Ci0gICAgYnVmc2l6ZSA9IDEwMjQgKiA4Ci0gICAgd2l0aCBvcGVuKGYxLCAncmInKSBhcyBmcDEsIG9wZW4oZjIsICdyYicpIGFzIGZwMjoKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGIxID0gZnAxLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGIyID0gZnAyLnJlYWQoYnVmc2l6ZSkKLSAgICAgICAgICAgIGlmIGIxICE9IGIyOgotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgaWYgbm90IGIxOgotICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLWRlZiBjb3B5KHNyYywgZHN0KToKLSAgICBpZiBvcy5wYXRoLmlzZmlsZShkc3QpIGFuZCBjbXAoc3JjLCBkc3QpOgotICAgICAgICByZXR1cm4KLSAgICBzaHV0aWwuY29weShzcmMsIGRzdCkKLQotZGVmIG1haW4oKToKLSAgICBidWlsZF9hbGwgPSAiLWEiIGluIHN5cy5hcmd2Ci0gICAgaWYgc3lzLmFyZ3ZbMV0gPT0gIlJlbGVhc2UiOgotICAgICAgICBkZWJ1ZyA9IEZhbHNlCi0gICAgZWxpZiBzeXMuYXJndlsxXSA9PSAiRGVidWciOgotICAgICAgICBkZWJ1ZyA9IFRydWUKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHN0cihzeXMuYXJndikpCi0KLSAgICBpZiBzeXMuYXJndlsyXSA9PSAiV2luMzIiOgotICAgICAgICBhcmNoID0gIng4NiIKLSAgICAgICAgY29uZmlndXJlID0gIlZDLVdJTjMyIgotICAgICAgICBkb19zY3JpcHQgPSAibXNcXGRvX25hc20iCi0gICAgICAgIG1ha2VmaWxlPSJtc1xcbnQubWFrIgotICAgICAgICBtMzIgPSBtYWtlZmlsZQotICAgICAgICBkaXJzdWZmaXggPSAiMzIiCi0gICAgZWxpZiBzeXMuYXJndlsyXSA9PSAieDY0IjoKLSAgICAgICAgYXJjaD0iYW1kNjQiCi0gICAgICAgIGNvbmZpZ3VyZSA9ICJWQy1XSU42NEEiCi0gICAgICAgIGRvX3NjcmlwdCA9ICJtc1xcZG9fd2luNjRhIgotICAgICAgICBtYWtlZmlsZSA9ICJtc1xcbnQ2NC5tYWsiCi0gICAgICAgIG0zMiA9IG1ha2VmaWxlLnJlcGxhY2UoJzY0JywgJycpCi0gICAgICAgIGRpcnN1ZmZpeCA9ICI2NCIKLSAgICAgICAgI29zLmVudmlyb25bIlZTRVhUQ09NUF9VU0VDTCJdID0gIk1TX09QVEVST04iCi0gICAgZWxzZToKLSAgICAgICAgcmFpc2UgVmFsdWVFcnJvcihzdHIoc3lzLmFyZ3YpKQotCi0gICAgbWFrZV9mbGFncyA9ICIiCi0gICAgaWYgYnVpbGRfYWxsOgotICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgotICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgotICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKLSAgICBwZXJsID0gZmluZF93b3JraW5nX3BlcmwocGVybHMpCi0gICAgaWYgcGVybDoKLSAgICAgICAgcHJpbnQoIkZvdW5kIGEgd29ya2luZyBwZXJsIGF0ICclcyciICUgKHBlcmwsKSkKLSAgICBlbHNlOgotICAgICAgICBwcmludCgiTm8gUGVybCBpbnN0YWxsYXRpb24gd2FzIGZvdW5kLiBFeGlzdGluZyBNYWtlZmlsZXMgYXJlIHVzZWQuIikKLSAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAjIExvb2sgZm9yIFNTTCAzIGxldmVscyB1cCBmcm9tIFBDL1ZTOC4wIC0gaWUsIHNhbWUgcGxhY2UgemxpYiBldGMgYWxsIGxpdmUuCi0gICAgc3NsX2RpciA9IGZpbmRfYmVzdF9zc2xfZGlyKCgiLi5cXC4uXFwuLiIsKSkKLSAgICBpZiBzc2xfZGlyIGlzIE5vbmU6Ci0gICAgICAgIHN5cy5leGl0KDEpCi0KLSAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQotICAgIHRyeToKLSAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKLSAgICAgICAgIyByZWJ1aWxkIG1ha2VmaWxlIHdoZW4gd2UgZG8gdGhlIHJvbGUgb3ZlciBmcm9tIDMyIHRvIDY0IGJ1aWxkCi0gICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IiBhbmQgb3MucGF0aC5pc2ZpbGUobTMyKSBhbmQgbm90IG9zLnBhdGguaXNmaWxlKG1ha2VmaWxlKToKLSAgICAgICAgICAgIG9zLnVubGluayhtMzIpCi0KLSAgICAgICAgIyBJZiB0aGUgc3NsIG1ha2VmaWxlcyBkbyBub3QgZXhpc3QsIHdlIGludm9rZSBQZXJsIHRvIGdlbmVyYXRlIHRoZW0uCi0gICAgICAgICMgRHVlIHRvIGEgYnVnIGluIHRoaXMgc2NyaXB0LCB0aGUgbWFrZWZpbGUgc29tZXRpbWVzIGVuZGVkIHVwIGVtcHR5Ci0gICAgICAgICMgRm9yY2UgYSByZWdlbmVyYXRpb24gaWYgaXQgaXMuCi0gICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShtYWtlZmlsZSkgb3Igb3MucGF0aC5nZXRzaXplKG1ha2VmaWxlKT09MDoKLSAgICAgICAgICAgIGlmIHBlcmwgaXMgTm9uZToKLSAgICAgICAgICAgICAgICBwcmludCgiUGVybCBpcyByZXF1aXJlZCB0byBidWlsZCB0aGUgbWFrZWZpbGVzISIpCi0gICAgICAgICAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgICAgICAgICAgcHJpbnQoIkNyZWF0aW5nIHRoZSBtYWtlZmlsZXMuLi4iKQotICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVzaCgpCi0gICAgICAgICAgICAjIFB1dCBvdXIgd29ya2luZyBQZXJsIGF0IHRoZSBmcm9udCBvZiBvdXIgcGF0aAotICAgICAgICAgICAgb3MuZW52aXJvblsiUEFUSCJdID0gb3MucGF0aC5kaXJuYW1lKHBlcmwpICsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3MucGF0aHNlcCArIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLmVudmlyb25bIlBBVEgiXQotICAgICAgICAgICAgcnVuX2NvbmZpZ3VyZShjb25maWd1cmUsIGRvX3NjcmlwdCkKLSAgICAgICAgICAgIGlmIGRlYnVnOgotICAgICAgICAgICAgICAgIHByaW50KCJPcGVuU1NMIGRlYnVnIGJ1aWxkcyBhcmVuJ3Qgc3VwcG9ydGVkLiIpCi0gICAgICAgICAgICAjaWYgYXJjaD09Ing4NiIgYW5kIGRlYnVnOgotICAgICAgICAgICAgIyAgICAjIHRoZSBkb19tYXNtIHNjcmlwdCBpbiBvcGVuc3NsIGRvZXNuJ3QgZ2VuZXJhdGUgYSBkZWJ1ZwotICAgICAgICAgICAgIyAgICAjIGJ1aWxkIG1ha2VmaWxlIHNvIHdlIGdlbmVyYXRlIGl0IGhlcmU6Ci0gICAgICAgICAgICAjICAgIG9zLnN5c3RlbSgicGVybCB1dGlsXG1rMW1mLnBsIGRlYnVnICIrY29uZmlndXJlKyIgPiIrbWFrZWZpbGUpCi0KLSAgICAgICAgICAgIGlmIGFyY2ggPT0gImFtZDY0IjoKLSAgICAgICAgICAgICAgICBjcmVhdGVfbWFrZWZpbGU2NChtYWtlZmlsZSwgbTMyKQotICAgICAgICAgICAgZml4X21ha2VmaWxlKG1ha2VmaWxlKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xidWlsZGluZi5oIiwgciJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoKQotICAgICAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZi5oIiwgciJjcnlwdG9cb3BlbnNzbGNvbmZfJXMuaCIgJSBhcmNoKQotCi0gICAgICAgICMgSWYgdGhlIGFzc2VtYmxlciBmaWxlcyBkb24ndCBleGlzdCBpbiB0bXBYWCwgY29weSB0aGVtIHRoZXJlCi0gICAgICAgIGlmIHBlcmwgaXMgTm9uZSBhbmQgb3MucGF0aC5leGlzdHMoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cygidG1wIitkaXJzdWZmaXgpOgotICAgICAgICAgICAgICAgIG9zLm1rZGlyKCJ0bXAiK2RpcnN1ZmZpeCkKLSAgICAgICAgICAgIGZvciBmIGluIG9zLmxpc3RkaXIoImFzbSIrZGlyc3VmZml4KToKLSAgICAgICAgICAgICAgICBpZiBub3QgZi5lbmRzd2l0aCgiLmFzbSIpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKHIidG1wJXNcJXMiICUgKGRpcnN1ZmZpeCwgZikpOiBjb250aW51ZQotICAgICAgICAgICAgICAgIHNodXRpbC5jb3B5KHIiYXNtJXNcJXMiICUgKGRpcnN1ZmZpeCwgZiksICJ0bXAiK2RpcnN1ZmZpeCkKLQotICAgICAgICAjIE5vdyBydW4gbWFrZS4KLSAgICAgICAgaWYgYXJjaCA9PSAiYW1kNjQiOgotICAgICAgICAgICAgcmMgPSBvcy5zeXN0ZW0oIm1sNjQgLWMgLUZvbXNcXHVwdGFibGUub2JqIG1zXFx1cHRhYmxlLmFzbSIpCi0gICAgICAgICAgICBpZiByYzoKLSAgICAgICAgICAgICAgICBwcmludCgibWw2NCBhc3NlbWJsZXIgaGFzIGZhaWxlZC4iKQotICAgICAgICAgICAgICAgIHN5cy5leGl0KHJjKQotCi0gICAgICAgIGNvcHkociJjcnlwdG9cYnVpbGRpbmZfJXMuaCIgJSBhcmNoLCByImNyeXB0b1xidWlsZGluZi5oIikKLSAgICAgICAgY29weShyImNyeXB0b1xvcGVuc3NsY29uZl8lcy5oIiAlIGFyY2gsIHIiY3J5cHRvXG9wZW5zc2xjb25mLmgiKQotCi0gICAgICAgICNtYWtlQ29tbWFuZCA9ICJubWFrZSAvbm9sb2dvIFBFUkw9XCIlc1wiIC1mIFwiJXNcIiIgJShwZXJsLCBtYWtlZmlsZSkKLSAgICAgICAgbWFrZUNvbW1hbmQgPSAibm1ha2UgL25vbG9nbyAtZiBcIiVzXCIiICUgbWFrZWZpbGUKLSAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyBzc2wgbWFrZWZpbGVzOiIsIG1ha2VDb21tYW5kKQotICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKLSAgICAgICAgcmMgPSBvcy5zeXN0ZW0obWFrZUNvbW1hbmQpCi0gICAgICAgIGlmIHJjOgotICAgICAgICAgICAgcHJpbnQoIkV4ZWN1dGluZyAiK21ha2VmaWxlKyIgZmFpbGVkIikKLSAgICAgICAgICAgIHByaW50KHJjKQotICAgICAgICAgICAgc3lzLmV4aXQocmMpCi0gICAgZmluYWxseToKLSAgICAgICAgb3MuY2hkaXIob2xkX2NkKQotICAgIHN5cy5leGl0KHJjKQotCi1pZiBfX25hbWVfXz09J19fbWFpbl9fJzoKLSAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL2J1aWxkX3RraW50ZXIucHkgYi9QQy9WUzguMC9idWlsZF90a2ludGVyLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYTU5MDM5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2J1aWxkX3RraW50ZXIucHkKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0iIiJTY3JpcHQgdG8gY29tcGlsZSB0aGUgZGVwZW5kZW5jaWVzIG9mIF90a2ludGVyCi0KLUNvcHlyaWdodCAoYykgMjAwNyBieSBDaHJpc3RpYW4gSGVpbWVzIDxjaHJpc3RpYW5AY2hlaW1lcy5kZT4KLQotTGljZW5zZWQgdG8gUFNGIHVuZGVyIGEgQ29udHJpYnV0b3IgQWdyZWVtZW50LgotIiIiCi0KLWltcG9ydCBvcwotaW1wb3J0IHN5cwotCi1oZXJlID0gb3MucGF0aC5hYnNwYXRoKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCi1wYXIgPSBvcy5wYXRoLnBhcmRpcgotCi1pZiAxOgotICAgIFRDTCA9ICJ0Y2w4LjQuMTYiCi0gICAgVEsgPSAidGs4LjQuMTYiCi0gICAgVElYID0gInRpeC04LjQuMCIKLWVsc2U6Ci0gICAgVENMID0gInRjbDguNWIzIgotICAgIFRLID0gInRjbDguNWIzIgotICAgIFRJWCA9ICJUaXg4LjQuMiIKLQotUk9PVCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4oaGVyZSwgcGFyLCBwYXIsIHBhcikpCi0jIFdpbmRvd3MgMjAwMCBjb21wYXRpYmlsaXR5OiBXSU5WRVIgMHgwNTAwCi0jIGh0dHA6Ly9tc2RuMi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvYWEzODM3NDUuYXNweAotTk1BS0UgPSAibm1ha2UgL25vbG9nbyAvZiAlcyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCAlcyAlcyIKLQotZGVmIG5tYWtlKG1ha2VmaWxlLCBjb21tYW5kPSIiLCAqKmt3KToKLSAgICBkZWZpbmVzID0gJyAnLmpvaW4oaysnPScrdiBmb3IgaywgdiBpbiBrdy5pdGVtcygpKQotICAgIGNtZCA9IE5NQUtFICUgKG1ha2VmaWxlLCBkZWZpbmVzLCBjb21tYW5kKQotICAgIHByaW50KCJcblxuIitjbWQrIlxuIikKLSAgICBpZiBvcy5zeXN0ZW0oY21kKSAhPSAwOgotICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoY21kKQotCi1kZWYgYnVpbGQocGxhdGZvcm0sIGNsZWFuKToKLSAgICBpZiBwbGF0Zm9ybSA9PSAiV2luMzIiOgotICAgICAgICBkZXN0ID0gb3MucGF0aC5qb2luKFJPT1QsICJ0Y2x0ayIpCi0gICAgICAgIG1hY2hpbmUgPSAiWDg2IgotICAgIGVsaWYgcGxhdGZvcm0gPT0gIng2NCI6Ci0gICAgICAgIGRlc3QgPSBvcy5wYXRoLmpvaW4oUk9PVCwgInRjbHRrNjQiKQotICAgICAgICBtYWNoaW5lID0gIlg2NCIKLSAgICBlbHNlOgotICAgICAgICByYWlzZSBWYWx1ZUVycm9yKHBsYXRmb3JtKQotCi0gICAgIyBUQ0wKLSAgICB0Y2xkaXIgPSBvcy5wYXRoLmpvaW4oUk9PVCwgVENMKQotICAgIGlmIDE6Ci0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbih0Y2xkaXIsICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIElOU1RBTExESVI9ZGVzdCkKLQotICAgICMgVEsKLSAgICBpZiAxOgotICAgICAgICBvcy5jaGRpcihvcy5wYXRoLmpvaW4oUk9PVCwgVEssICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiY2xlYW4iLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCBUQ0xESVI9dGNsZGlyKQotICAgICAgICBubWFrZSgibWFrZWZpbGUudmMiLCAiaW5zdGFsbCIsIFRDTERJUj10Y2xkaXIsIElOU1RBTExESVI9ZGVzdCkKLQotICAgICMgVElYCi0gICAgaWYgMToKLSAgICAgICAgIyBweXRob245Lm1hayBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3N2bi5weXRob24ub3JnCi0gICAgICAgIG9zLmNoZGlyKG9zLnBhdGguam9pbihST09ULCBUSVgsICJ3aW4iKSkKLSAgICAgICAgaWYgY2xlYW46Ci0gICAgICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCAiY2xlYW4iKQotICAgICAgICBubWFrZSgicHl0aG9uOS5tYWsiLCBNQUNISU5FPW1hY2hpbmUpCi0gICAgICAgIG5tYWtlKCJweXRob245Lm1hayIsICJpbnN0YWxsIikKLQotZGVmIG1haW4oKToKLSAgICBpZiBsZW4oc3lzLmFyZ3YpIDwgMiBvciBzeXMuYXJndlsxXSBub3QgaW4gKCJXaW4zMiIsICJ4NjQiKToKLSAgICAgICAgcHJpbnQoIiVzIFdpbjMyfHg2NCIgJSBzeXMuYXJndlswXSkKLSAgICAgICAgc3lzLmV4aXQoMSkKLQotICAgIGlmICItYyIgaW4gc3lzLmFyZ3Y6Ci0gICAgICAgIGNsZWFuID0gVHJ1ZQotICAgIGVsc2U6Ci0gICAgICAgIGNsZWFuID0gRmFsc2UKLQotICAgIGJ1aWxkKHN5cy5hcmd2WzFdLCBjbGVhbikKLQotCi1pZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgotICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvYnoyLnZjcHJvaiBiL1BDL1ZTOC4wL2J6Mi52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMTE5NzkuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvYnoyLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU4MSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iYnoyIg0KLQlQcm9qZWN0R1VJRD0iezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQotCVJvb3ROYW1lc3BhY2U9ImJ6MiINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiQoYnoyRGlyKSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19GSUxFX09GRlNFVF9CSVRTPTY0O19DUlRfU0VDVVJFX05PX0RFUFJFQ0FURTtfQ1JUX05PTlNURENfTk9fREVQUkVDQVRFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDE3MDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iJChiejJEaXIpIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0ZJTEVfT0ZGU0VUX0JJVFM9NjQ7X0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFO19DUlRfTk9OU1REQ19OT19ERVBSRUNBVEUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTcwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIkKGJ6MkRpcikiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtfRklMRV9PRkZTRVRfQklUUz02NDtfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEU7X0NSVF9OT05TVERDX05PX0RFUFJFQ0FURSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxNzAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xiejJtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9ImJ6aXAyIDEuMC42IEhlYWRlciBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcYnpsaWIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxiemxpYl9wcml2YXRlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJiemlwMiAxLjAuNiBTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJsb2Nrc29ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGJ6bGliLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilcY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxjcmN0YWJsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iJChiejJEaXIpXGRlY29tcHJlc3MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9IiQoYnoyRGlyKVxodWZmbWFuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIkKGJ6MkRpcilccmFuZHRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcyBiL1BDL1ZTOC4wL2RlYnVnLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjQzY2IuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvZGVidWcudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJkZWJ1ZyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IktpbGxQeXRob25FeGUiDQotCQlWYWx1ZT0iJChPdXREaXIpXGtpbGxfcHl0aG9uX2QuZXhlIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9lbnYuYmF0IGIvUEMvVlM4LjAvZW52LmJhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTQ5OTBhOC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9lbnYuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1AZWNobyBvZmYKLXNldCBWUzg9JVByb2dyYW1GaWxlcyVcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gOAotZWNobyBCdWlsZCBlbnZpcm9ubWVudHM6IHg4NiwgaWE2NCwgYW1kNjQsIHg4Nl9hbWQ2NCwgeDg2X2lhNjQKLWVjaG8uCi1jYWxsICIlVlM4JVxWQ1x2Y3ZhcnNhbGwuYmF0IiAlMQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvZmllbGQzLnB5IGIvUEMvVlM4LjAvZmllbGQzLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGNiZTM2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2ZpZWxkMy5weQorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLSMgQW4gYWJzdXJkIHdvcmthcm91bmQgZm9yIHRoZSBsYWNrIG9mIGFyaXRobWV0aWMgaW4gTVMncyByZXNvdXJjZSBjb21waWxlci4KLSMgQWZ0ZXIgYnVpbGRpbmcgUHl0aG9uLCBydW4gdGhpcywgdGhlbiBwYXN0ZSB0aGUgb3V0cHV0IGludG8gdGhlIGFwcHJvcHJpYXRlCi0jIHBhcnQgb2YgUENccHl0aG9uX250LnJjLgotIyBFeGFtcGxlIG91dHB1dDoKLSMKLSMgKiBGb3IgMi4zYTAsCi0jICogUFlfTUlDUk9fVkVSU0lPTiA9IDAKLSMgKiBQWV9SRUxFQVNFX0xFVkVMID0gJ2FscGhhJyA9IDB4QQotIyAqIFBZX1JFTEVBU0VfU0VSSUFMID0gMQotIyAqCi0jICogYW5kIDAqMTAwMCArIDEwKjEwICsgMSA9IDEwMS4KLSMgKi8KLSMgI2RlZmluZSBGSUVMRDMgMTAxCi0KLWltcG9ydCBzeXMKLQotbWFqb3IsIG1pbm9yLCBtaWNybywgbGV2ZWwsIHNlcmlhbCA9IHN5cy52ZXJzaW9uX2luZm8KLWxldmVsbnVtID0geydhbHBoYSc6IDB4QSwKLSAgICAgICAgICAgICdiZXRhJzogMHhCLAotICAgICAgICAgICAgJ2NhbmRpZGF0ZSc6IDB4QywKLSAgICAgICAgICAgICdmaW5hbCc6IDB4RiwKLSAgICAgICAgICAgfVtsZXZlbF0KLXN0cmluZyA9IHN5cy52ZXJzaW9uLnNwbGl0KClbMF0gIyBsaWtlICcyLjNhMCcKLQotcHJpbnQoIiAqIEZvciAlcywiICUgc3RyaW5nKQotcHJpbnQoIiAqIFBZX01JQ1JPX1ZFUlNJT04gPSAlZCIgJSBtaWNybykKLXByaW50KCIgKiBQWV9SRUxFQVNFX0xFVkVMID0gJXIgPSAlcyIgJSAobGV2ZWwsIGhleChsZXZlbG51bSkpKQotcHJpbnQoIiAqIFBZX1JFTEVBU0VfU0VSSUFMID0gJWQiICUgc2VyaWFsKQotcHJpbnQoIiAqIikKLQotZmllbGQzID0gbWljcm8gKiAxMDAwICsgbGV2ZWxudW0gKiAxMCArIHNlcmlhbAotCi1wcmludCgiICogYW5kICVkKjEwMDAgKyAlZCoxMCArICVkID0gJWQiICUgKG1pY3JvLCBsZXZlbG51bSwgc2VyaWFsLCBmaWVsZDMpKQotcHJpbnQoIiAqLyIpCi1wcmludCgiI2RlZmluZSBGSUVMRDMiLCBmaWVsZDMpCmRpZmYgLS1naXQgYS9QQy9WUzguMC9pZGxlLmJhdCBiL1BDL1ZTOC4wL2lkbGUuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjNlNzA0Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2lkbGUuYmF0CisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotQGVjaG8gb2ZmCi1yZW0gc3RhcnQgaWRsZQotcmVtIFVzYWdlOiAgaWRsZSBbLWRdCi1yZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi0KLXNldGxvY2FsCi1zZXQgZXhlPXB5dGhvbgotUEFUSCAlUEFUSCU7Li5cLi5cLi5cdGNsdGtcYmluCi0KLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQKLQotc2V0IGNtZD0lZXhlJSAuLi8uLi9MaWIvaWRsZWxpYi9pZGxlLnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci0KLWVjaG8gb24KLSVjbWQlCmRpZmYgLS1naXQgYS9QQy9WUzguMC9raWxsX3B5dGhvbi5jIGIvUEMvVlM4LjAva2lsbF9weXRob24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmIzMjNkMy4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9raWxsX3B5dGhvbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc4ICswLDAgQEAKLS8qCi0gKiBIZWxwZXIgcHJvZ3JhbSBmb3Iga2lsbGluZyBsaW5nZXJpbmcgcHl0aG9uW19kXS5leGUgcHJvY2Vzc2VzIGJlZm9yZQotICogYnVpbGRpbmcsIHRodXMgYXR0ZW1wdGluZyB0byBhdm9pZCBidWlsZCBmYWlsdXJlcyBkdWUgdG8gZmlsZXMgYmVpbmcKLSAqIGxvY2tlZC4KLSAqLwotCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHdjaGFyLmg+Ci0jaW5jbHVkZSA8dGxoZWxwMzIuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotCi0jcHJhZ21hIGNvbW1lbnQobGliLCAicHNhcGkiKQotCi0jaWZkZWYgX0RFQlVHCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uX2QuZXhlIikKLSNkZWZpbmUgUFlUSE9OX0VYRV9MRU4gICAgICAoMTIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRSAgICAgKEwia2lsbF9weXRob25fZC5leGUiKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEVfTEVOICgxNykKLSNlbHNlCi0jZGVmaW5lIFBZVEhPTl9FWEUgICAgICAgICAgKEwicHl0aG9uLmV4ZSIpCi0jZGVmaW5lIFBZVEhPTl9FWEVfTEVOICAgICAgKDEwKQotI2RlZmluZSBLSUxMX1BZVEhPTl9FWEUgICAgIChMImtpbGxfcHl0aG9uLmV4ZSIpCi0jZGVmaW5lIEtJTExfUFlUSE9OX0VYRV9MRU4gKDE1KQotI2VuZGlmCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgSEFORExFICAgaHAsIGhzcCwgaHNtOyAvKiBwcm9jZXNzLCBzbmFwc2hvdCBwcm9jZXNzZXMsIHNuYXBzaG90IG1vZHVsZXMgKi8KLSAgICBEV09SRCAgICBkYWMsIG91cl9waWQ7Ci0gICAgc2l6ZV90ICAgbGVuOwotICAgIHdjaGFyX3QgIHBhdGhbTUFYX1BBVEgrMV07Ci0KLSAgICBNT0RVTEVFTlRSWTMyVyAgbWU7Ci0gICAgUFJPQ0VTU0VOVFJZMzJXIHBlOwotCi0gICAgbWUuZHdTaXplID0gc2l6ZW9mKE1PRFVMRUVOVFJZMzJXKTsKLSAgICBwZS5kd1NpemUgPSBzaXplb2YoUFJPQ0VTU0VOVFJZMzJXKTsKLQotICAgIG1lbXNldChwYXRoLCAwLCBNQVhfUEFUSCsxKTsKLQotICAgIG91cl9waWQgPSBHZXRDdXJyZW50UHJvY2Vzc0lkKCk7Ci0KLSAgICBoc20gPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsIG91cl9waWQpOwotICAgIGlmIChoc20gPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKLSAgICAgICAgcHJpbnRmKCJDcmVhdGVUb29saGVscDMyU25hcHNob3RbMV0gZmFpbGVkOiAlZFxuIiwgR2V0TGFzdEVycm9yKCkpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0KLSAgICBpZiAoIU1vZHVsZTMyRmlyc3RXKGhzbSwgJm1lKSkgewotICAgICAgICBwcmludGYoIk1vZHVsZTMyRmlyc3RXWzFdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBFbnVtZXJhdGUgb3ZlciB0aGUgbW9kdWxlcyBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcyBpbiBvcmRlciB0byBmaW5kCi0gICAgICoga2lsbF9wcm9jZXNzW19kXS5leGUsIHRoZW4gdGFrZSBhIG5vdGUgb2YgdGhlIGRpcmVjdG9yeSBpdCBsaXZlcyBpbi4KLSAgICAgKi8KLSAgICBkbyB7Ci0gICAgICAgIGlmIChfd2NzbmljbXAobWUuc3pNb2R1bGUsIEtJTExfUFlUSE9OX0VYRSwgS0lMTF9QWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBsZW4gPSB3Y3NubGVuX3MobWUuc3pFeGVQYXRoLCBNQVhfUEFUSCkgLSBLSUxMX1BZVEhPTl9FWEVfTEVOOwotICAgICAgICB3Y3NuY3B5X3MocGF0aCwgTUFYX1BBVEgrMSwgbWUuc3pFeGVQYXRoLCBsZW4pOyAKLQotICAgICAgICBicmVhazsKLQotICAgIH0gd2hpbGUgKE1vZHVsZTMyTmV4dFcoaHNtLCAmbWUpKTsKLQotICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0KLSAgICBpZiAocGF0aCA9PSBOVUxMKSB7Ci0gICAgICAgIHByaW50ZigiZmFpbGVkIHRvIGRpc2Nlcm4gZGlyZWN0b3J5IG9mIHJ1bm5pbmcgcHJvY2Vzc1xuIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogVGFrZSBhIHNuYXBzaG90IG9mIHN5c3RlbSBwcm9jZXNzZXMuICBFbnVtZXJhdGUgb3ZlciB0aGUgc25hcHNob3QsCi0gICAgICogbG9va2luZyBmb3IgcHl0aG9uIHByb2Nlc3Nlcy4gIFdoZW4gd2UgZmluZCBvbmUsIHZlcmlmeSBpdCBsaXZlcwotICAgICAqIGluIHRoZSBzYW1lIGRpcmVjdG9yeSB3ZSBsaXZlIGluLiAgSWYgaXQgZG9lcywga2lsbCBpdC4gIElmIHdlJ3JlCi0gICAgICogdW5hYmxlIHRvIGtpbGwgaXQsIHRyZWF0IHRoaXMgYXMgYSBmYXRhbCBlcnJvciBhbmQgcmV0dXJuIDEuCi0gICAgICogCi0gICAgICogVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0aGF0IHdlJ3JlIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgdGhlIAotICAgICAqIGJ1aWxkIHByb2Nlc3Mgb24gdGhlIGJhc2lzIHRoYXQgd2UnbGwgdGFrZSBjYXJlIG9mIGtpbGxpbmcgYW55Ci0gICAgICogcnVubmluZyBpbnN0YW5jZXMsIHN1Y2ggdGhhdCB0aGUgYnVpbGQgd29uJ3QgZW5jb3VudGVyIHBlcm1pc3Npb24KLSAgICAgKiBkZW5pZWQgZXJyb3JzIGR1cmluZyBsaW5raW5nLiBJZiB3ZSBjYW4ndCBraWxsIG9uZSBvZiB0aGUgcHJvY2Vzc2VzLAotICAgICAqIHdlIGNhbid0IHByb3ZpZGUgdGhpcyBhc3N1cmFuY2UsIGFuZCB0aGUgYnVpbGQgc2hvdWxkbid0IHN0YXJ0LgotICAgICAqLwotCi0gICAgaHNwID0gQ3JlYXRlVG9vbGhlbHAzMlNuYXBzaG90KFRIMzJDU19TTkFQUFJPQ0VTUywgMCk7Ci0gICAgaWYgKGhzcCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICBwcmludGYoIkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdFsyXSBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGlmICghUHJvY2VzczMyRmlyc3RXKGhzcCwgJnBlKSkgewotICAgICAgICBwcmludGYoIlByb2Nlc3MzMkZpcnN0VyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIGRhYyA9IFBST0NFU1NfUVVFUllfSU5GT1JNQVRJT04gfCBQUk9DRVNTX1ZNX1JFQUQgfCBQUk9DRVNTX1RFUk1JTkFURTsKLSAgICBkbyB7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKLSAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCi0gICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgotICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCi0gICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KLSAgICAgICAgICovCi0KLSAgICAgICAgaWYgKF93Y3NuaWNtcChwZS5zekV4ZUZpbGUsIFBZVEhPTl9FWEUsIFBZVEhPTl9FWEVfTEVOKSkKLSAgICAgICAgICAgIC8qIFRoaXMgaXNuJ3QgYSBweXRob24gcHJvY2Vzcy4gKi8KLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIC8qIEl0J3MgYSBweXRob24gcHJvY2Vzcywgc28gZmlndXJlIG91dCB3aGljaCBkaXJlY3RvcnkgaXQncyBpbi4uLiAqLwotICAgICAgICBoc20gPSBDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBNT0RVTEUsIHBlLnRoMzJQcm9jZXNzSUQpOwotICAgICAgICBpZiAoaHNtID09IElOVkFMSURfSEFORExFX1ZBTFVFKQotICAgICAgICAgICAgLyogCi0gICAgICAgICAgICAgKiBJZiBvdXIgbW9kdWxlIHNuYXBzaG90IGZhaWxzICh3aGljaCB3aWxsIGhhcHBlbiBpZiB3ZSBkb24ndCBvd24KLSAgICAgICAgICAgICAqIHRoZSBwcm9jZXNzKSwganVzdCBpZ25vcmUgaXQgYW5kIGNvbnRpbnVlLiAgKEl0IHNlZW1zIGRpZmZlcmVudAotICAgICAgICAgICAgICogdmVyc2lvbnMgb2YgV2luZG93cyByZXR1cm4gZGlmZmVyZW50IHZhbHVlcyBmb3IgR2V0TGFzdEVycm9yKCkKLSAgICAgICAgICAgICAqIGluIHRoaXMgc2l0dWF0aW9uOyBpdCdzIGVhc2llciB0byBqdXN0IGlnbm9yZSBpdCBhbmQgbW92ZSBvbiB2cy4KLSAgICAgICAgICAgICAqIHN0b3BwaW5nIHRoZSBidWlsZCBmb3Igd2hhdCBjb3VsZCBiZSBhIGZhbHNlIHBvc2l0aXZlLikKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghTW9kdWxlMzJGaXJzdFcoaHNtLCAmbWUpKSB7Ci0gICAgICAgICAgICBwcmludGYoIk1vZHVsZTMyRmlyc3RXWzJdIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzcCk7Ci0gICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBpZiAoX3djc25pY21wKG1lLnN6TW9kdWxlLCBQWVRIT05fRVhFLCBQWVRIT05fRVhFX0xFTikpCi0gICAgICAgICAgICAgICAgLyogV3JvbmcgbW9kdWxlLCB3ZSdyZSBsb29raW5nIGZvciBweXRob25bX2RdLmV4ZS4uLiAqLwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBpZiAoX3djc25pY21wKHBhdGgsIG1lLnN6RXhlUGF0aCwgbGVuKSkKLSAgICAgICAgICAgICAgICAvKiBQcm9jZXNzIGRvZXNuJ3QgbGl2ZSBpbiBvdXIgZGlyZWN0b3J5LiAqLwotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAvKiBQeXRob24gcHJvY2VzcyByZXNpZGluZyBpbiB0aGUgcmlnaHQgZGlyZWN0b3J5LCBraWxsIGl0ISAgKi8KLSAgICAgICAgICAgIGhwID0gT3BlblByb2Nlc3MoZGFjLCBGQUxTRSwgcGUudGgzMlByb2Nlc3NJRCk7Ci0gICAgICAgICAgICBpZiAoIWhwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJPcGVuUHJvY2VzcyBmYWlsZWQ6ICVkXG4iLCBHZXRMYXN0RXJyb3IoKSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHNwKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc20pOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIVRlcm1pbmF0ZVByb2Nlc3MoaHAsIDEpKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJUZXJtaW5hdGVQcm9jZXNzIGZhaWxlZDogJWRcbiIsIEdldExhc3RFcnJvcigpKTsKLSAgICAgICAgICAgICAgICBDbG9zZUhhbmRsZShoc3ApOwotICAgICAgICAgICAgICAgIENsb3NlSGFuZGxlKGhzbSk7Ci0gICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaHApOwotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBDbG9zZUhhbmRsZShocCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICB9IHdoaWxlIChNb2R1bGUzMk5leHRXKGhzbSwgJm1lKSk7Ci0KLSAgICAgICAgQ2xvc2VIYW5kbGUoaHNtKTsKLQotICAgIH0gd2hpbGUgKFByb2Nlc3MzMk5leHRXKGhzcCwgJnBlKSk7Ci0KLSAgICBDbG9zZUhhbmRsZShoc3ApOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIHZpOiBzZXQgdHM9OCBzdz00IHN0cz00IGV4cGFuZHRhYiAqLwpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAva2lsbF9weXRob24udmNwcm9qIGIvUEMvVlM4LjAva2lsbF9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWJlMzMwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL2tpbGxfcHl0aG9uLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDI3OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ia2lsbF9weXRob24iDQotCVByb2plY3RHVUlEPSJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCi0JUm9vdE5hbWVzcGFjZT0ia2lsbF9weXRob24iDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJTb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLlxraWxsX3B5dGhvbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMgYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZWZhMDdhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfYnVpbGRpbmZvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYgKzAsMCBAQAotI2luY2x1ZGUgPHdpbmRvd3MuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNkZWZpbmUgQ01EX1NJWkUgNTAwCi0KLS8qIFRoaXMgZmlsZSBjcmVhdGVzIHRoZSBnZXRidWlsZGluZm8ubyBvYmplY3QsIGJ5IGZpcnN0Ci0gICBpbnZva2luZyBzdWJ3Y3Jldi5leGUgKGlmIGZvdW5kKSwgYW5kIHRoZW4gaW52b2tpbmcgY2wuZXhlLgotICAgQXMgYSBzaWRlIGVmZmVjdCwgaXQgbWlnaHQgZ2VuZXJhdGUgUENCdWlsZFxnZXRidWlsZGluZm8yLmMKLSAgIGFsc28uIElmIHRoaXMgaXNuJ3QgYSBzdWJ2ZXJzaW9uIGNoZWNrb3V0LCBvciBzdWJ3Y3JldiBpc24ndAotICAgZm91bmQsIGl0IGNvbXBpbGVzIC4uXFwuLlxcTW9kdWxlc1xcZ2V0YnVpbGRpbmZvLmMgaW5zdGVhZC4KLQotICAgQ3VycmVudGx5LCBzdWJ3Y3Jldi5leGUgaXMgZm91bmQgZnJvbSB0aGUgcmVnaXN0cnkgZW50cmllcwotICAgb2YgVG9ydG9pc2VTVk4uCi0KLSAgIE5vIGF0dGVtcHQgaXMgbWFkZSB0byBwbGFjZSBnZXRidWlsZGluZm8ubyBpbnRvIHRoZSBwcm9wZXIKLSAgIGJpbmFyeSBkaXJlY3RvcnkuIFRoaXMgaXNuJ3QgbmVjZXNzYXJ5LCBhcyB0aGlzIHRvb2wgaXMKLSAgIGludm9rZWQgYXMgYSBwcmUtbGluayBzdGVwIGZvciBweXRob25jb3JlLCBzbyB0aGF0IG92ZXJ3cml0ZXMKLSAgIGFueSBwcmV2aW91cyBnZXRidWlsZGluZm8uby4KLQotICAgSG93ZXZlciwgaWYgYSBzZWNvbmQgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoaXMgd2lsbCBiZSB1c2VkCi0gICBhcyBhIHRlbXBvcmFyeSBkaXJlY3Rvcnkgd2hlcmUgYW55IGdldGJ1aWxkaW5mbzIuYyBhbmQKLSAgIGdldGJ1aWxkaW5mby5vIGZpbGVzIGFyZSBwdXQuICBUaGlzIGlzIHVzZWZ1bCBpZiBtdWx0aXBsZQotICAgY29uZmlndXJhdGlvbnMgYXJlIGJlaW5nIGJ1aWx0IGluIHBhcmFsbGVsLCB0byBhdm9pZCB0aGVtCi0gICB0cmFtcGxpbmcgZWFjaCBvdGhlcidzIGZpbGVzLgotCi0qLwotCi1pbnQgbWFrZV9idWlsZGluZm8yKGNvbnN0IGNoYXIgKnRtcHBhdGgpCi17Ci0gICAgc3RydWN0IF9zdGF0IHN0OwotICAgIEhLRVkgaFRvcnRvaXNlOwotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRSsxXTsKLSAgICBEV09SRCB0eXBlLCBzaXplOwotICAgIGlmIChfc3RhdCgiLnN2biIsICZzdCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICAvKiBBbGxvdyBzdXBwcmVzc2lvbiBvZiBzdWJ3Y3Jldi5leGUgaW52b2NhdGlvbiBpZiBhIG5vX3N1YndjcmV2IGZpbGUgaXMgcHJlc2VudC4gKi8KLSAgICBpZiAoX3N0YXQoIm5vX3N1YndjcmV2IiwgJnN0KSA9PSAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoUmVnT3BlbktleShIS0VZX0xPQ0FMX01BQ0hJTkUsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTICYmCi0gICAgICAgIFJlZ09wZW5LZXkoSEtFWV9DVVJSRU5UX1VTRVIsICJTb2Z0d2FyZVxcVG9ydG9pc2VTVk4iLCAmaFRvcnRvaXNlKSAhPSBFUlJPUl9TVUNDRVNTKQotICAgICAgICAvKiBUb3J0b2lzZSBub3QgaW5zdGFsbGVkICovCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbW1hbmRbMF0gPSAnIic7ICAvKiBxdW90ZSB0aGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZSAqLwotICAgIHNpemUgPSBzaXplb2YoY29tbWFuZCkgLSAxOwotICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaFRvcnRvaXNlLCAiRGlyZWN0b3J5IiwgMCwgJnR5cGUsIGNvbW1hbmQrMSwgJnNpemUpICE9IEVSUk9SX1NVQ0NFU1MgfHwKLSAgICAgICAgdHlwZSAhPSBSRUdfU1opCi0gICAgICAgIC8qIFJlZ2lzdHJ5IGNvcnJ1cHRlZCAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImJpblxcc3Vid2NyZXYuZXhlIik7Ci0gICAgaWYgKF9zdGF0KGNvbW1hbmQrMSwgJnN0KSA8IDApCi0gICAgICAgIC8qIHN1YndjcmV2LmV4ZSBub3QgcGFydCBvZiB0aGUgcmVsZWFzZSAqLwotICAgICAgICByZXR1cm4gMDsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIlwiIC4uXFwuLiAuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jICIpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgImdldGJ1aWxkaW5mbzIuYyIpOwotICAgIHB1dHMoY29tbWFuZCk7IGZmbHVzaChzdGRvdXQpOwotICAgIGlmIChzeXN0ZW0oY29tbWFuZCkgPCAwKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqYXJndltdKQotewotICAgIGNoYXIgY29tbWFuZFtDTURfU0laRV0gPSAiY2wuZXhlIC1jIC1EX1dJTjMyIC1EVVNFX0RMX0VYUE9SVCAtRF9XSU5ET1dTIC1EV0lOMzIgLURfV0lORExMICI7Ci0gICAgY2hhciB0bXBwYXRoW0NNRF9TSVpFXSA9ICIiOwotICAgIGludCBkb191bmxpbmssIHJlc3VsdDsKLSAgICBjaGFyICp0bXBkaXIgPSBOVUxMOwotICAgIGlmIChhcmdjIDw9IDIgfHwgYXJnYyA+IDMpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWtlX2J1aWxkaW5mbyAkKENvbmZpZ3VyYXRpb25OYW1lKSBbdG1wZGlyXVxuIik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotICAgIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2UiKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIkRlYnVnIikgPT0gMCkgewotICAgICAgICBzdHJjYXRfcyhjb21tYW5kLCBDTURfU0laRSwgIi1EX0RFQlVHIC1NRGQgIik7Ci0gICAgfQotICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2WzFdLCAiUmVsZWFzZUl0YW5pdW0iKSA9PSAwKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19JVEFOSVVNICIpOwotICAgIH0KLSAgICBlbHNlIGlmIChzdHJjbXAoYXJndlsxXSwgIlJlbGVhc2VBTUQ2NCIpID09IDApIHsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICItTUQgIik7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiLU1EIC9VU0VDTDpNU19PUFRFUk9OICIpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJ1bnN1cHBvcnRlZCBjb25maWd1cmF0aW9uICVzXG4iLCBhcmd2WzFdKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0gICAgaWYgKGFyZ2MgPiAyKSB7Ci0gICAgICAgIHRtcGRpciA9IGFyZ3ZbMl07Ci0gICAgICAgIHN0cmNhdF9zKHRtcHBhdGgsIF9jb3VudG9mKHRtcHBhdGgpLCB0bXBkaXIpOwotICAgICAgICBzdHJjYXRfcyh0bXBwYXRoLCBfY291bnRvZih0bXBwYXRoKSwgIlxcIik7Ci0gICAgfQotCi0gICAgaWYgKChkb191bmxpbmsgPSBtYWtlX2J1aWxkaW5mbzIodG1wcGF0aCkpKSB7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMgLURTVUJXQ1JFViAiKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIuLlxcLi5cXE1vZHVsZXNcXGdldGJ1aWxkaW5mby5jIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICIgLUZvIik7Ci0gICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsIHRtcHBhdGgpOwotICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCAiZ2V0YnVpbGRpbmZvLm8gLUkuLlxcLi5cXEluY2x1ZGUgLUkuLlxcLi5cXFBDIik7Ci0gICAgcHV0cyhjb21tYW5kKTsgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcmVzdWx0ID0gc3lzdGVtKGNvbW1hbmQpOwotICAgIGlmIChkb191bmxpbmspIHsKLSAgICAgICAgY29tbWFuZFswXSA9ICdcMCc7Ci0gICAgICAgIHN0cmNhdF9zKGNvbW1hbmQsIENNRF9TSVpFLCB0bXBwYXRoKTsKLSAgICAgICAgc3RyY2F0X3MoY29tbWFuZCwgQ01EX1NJWkUsICJnZXRidWlsZGluZm8yLmMiKTsKLSAgICAgICAgX3VubGluayhjb21tYW5kKTsKLSAgICB9Ci0gICAgaWYgKHJlc3VsdCA8IDApCi0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2ogYi9QQy9WUzguMC9tYWtlX2J1aWxkaW5mby52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNWNjY2QuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvbWFrZV9idWlsZGluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMTAxICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IndpbmRvd3MtMTI1MCI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJtYWtlX2J1aWxkaW5mbyINCi0JUHJvamVjdEdVSUQ9IntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLQlSb290TmFtZXNwYWNlPSJtYWtlX2J1aWxkaW5mbyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKS9tYWtlX2J1aWxkaW5mby5leGUiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoVGFyZ2V0RGlyKSQoVGFyZ2V0TmFtZSkucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii5cbWFrZV9idWlsZGluZm8uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9tYWtlX3ZlcnNpb25pbmZvLnZjcHJvaiBiL1BDL1ZTOC4wL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZGJmMTBkLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL21ha2VfdmVyc2lvbmluZm8udmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsMzI0ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJtYWtlX3ZlcnNpb25pbmZvIg0KLQlQcm9qZWN0R1VJRD0ie0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0iDQotCVJvb3ROYW1lc3BhY2U9Im1ha2VfdmVyc2lvbmluZm8iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmMuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yYy5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250LmgmI3gwRDsmI3gwQTsiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm8uZXhlICZndDsgLi5cLi5cUENccHl0aG9ubnRfcmMuaCYjeDBEOyYjeDBBOyINCi0JCQkJT3V0cHV0cz0iJChTb2x1dGlvbkRpcikuLlwuLlxQQ1xweXRob25udF9yYy5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9InRydWUiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChTb2x1dGlvbkRpciltYWtlX3ZlcnNpb25pbmZvLmV4ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkJQ29tbWFuZExpbmU9ImNkICQoU29sdXRpb25EaXIpJiN4MEQ7JiN4MEE7bWFrZV92ZXJzaW9uaW5mby5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnQuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yY19kLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoU29sdXRpb25EaXIpbWFrZV92ZXJzaW9uaW5mb19kLmV4ZSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChUYXJnZXREaXIpJChUYXJnZXROYW1lKS5wZGIiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25fbnRfZC5oJiN4MEQ7JiN4MEE7Ig0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iQnVpbGQgUEMvcHl0aG9ubnRfcmMoX2QpLmgiDQotCQkJCUNvbW1hbmRMaW5lPSJjZCAkKFNvbHV0aW9uRGlyKSYjeDBEOyYjeDBBO21ha2VfdmVyc2lvbmluZm9fZC5leGUgJmd0OyAuLlwuLlxQQ1xweXRob25udF9yY19kLmgmI3gwRDsmI3gwQTsiDQotCQkJCU91dHB1dHM9IiQoU29sdXRpb25EaXIpLi5cLi5cUENccHl0aG9ubnRfcmNfZC5oIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKFNvbHV0aW9uRGlyKW1ha2VfdmVyc2lvbmluZm9fZC5leGUiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCQlDb21tYW5kTGluZT0iY2QgJChTb2x1dGlvbkRpcikmI3gwRDsmI3gwQTttYWtlX3ZlcnNpb25pbmZvX2QuZXhlICZndDsgLi5cLi5cUENccHl0aG9uX250X2QuaCYjeDBEOyYjeDBBOyINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXG1ha2VfdmVyc2lvbmluZm8uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wY2J1aWxkLnNsbiBiL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWNhNGFhLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3BjYnVpbGQuc2xuCisrKyAvZGV2L251bGwKQEAgLTEsNTYwICswLDAgQEAKLU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFNvbHV0aW9uIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDkuMDANCi0jIFZpc3VhbCBTdHVkaW8gMjAwNQ0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9uIiwgInB5dGhvbi52Y3Byb2oiLCAie0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9ID0ge0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX3ZlcnNpb25pbmZvIiwgIm1ha2VfdmVyc2lvbmluZm8udmNwcm9qIiwgIntGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInB5dGhvbmNvcmUiLCAicHl0aG9uY29yZS52Y3Byb2oiLCAie0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9ID0ge0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0NCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9ID0gezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0NCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9ID0ge0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJweXRob253IiwgInB5dGhvbncudmNwcm9qIiwgIntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmNwcm9qIiwgIntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSA9IHs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAibWFrZV9idWlsZGluZm8iLCAibWFrZV9idWlsZGluZm8udmNwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7MjE1MEUzMzMtOEZEQy00MkEzLTk0NzQtMUEzOTU2RDQ2REU4fSIpID0gIlNvbHV0aW9uIEl0ZW1zIiwgIlNvbHV0aW9uIEl0ZW1zIiwgIns1NTNFQzMzRS05ODE2LTQ5OTYtQTY2MC01RDYxODZBMEIwQjN9Ig0KLQlQcm9qZWN0U2VjdGlvbihTb2x1dGlvbkl0ZW1zKSA9IHByZVByb2plY3QNCi0JCS4uXC4uXE1vZHVsZXNcZ2V0YnVpbGRpbmZvLmMgPSAuLlwuLlxNb2R1bGVzXGdldGJ1aWxkaW5mby5jDQotCQlyZWFkbWUudHh0ID0gcmVhZG1lLnR4dA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjcHJvaiIsICJ7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9jdHlwZXMiLCAiX2N0eXBlcy52Y3Byb2oiLCAiezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfY3R5cGVzX3Rlc3QiLCAiX2N0eXBlc190ZXN0LnZjcHJvaiIsICJ7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9lbGVtZW50dHJlZSIsICJfZWxlbWVudHRyZWUudmNwcm9qIiwgInsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX21zaSIsICJfbXNpLnZjcHJvaiIsICJ7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9zb2NrZXQiLCAiX3NvY2tldC52Y3Byb2oiLCAiezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3FsaXRlMyIsICJfc3FsaXRlMy52Y3Byb2oiLCAiezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9ID0ge0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfc3NsIiwgIl9zc2wudmNwcm9qIiwgIntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfSA9IHs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3Byb2oiLCAiezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGtpbnRlciIsICJfdGtpbnRlci52Y3Byb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJiejIiLCAiYnoyLnZjcHJvaiIsICJ7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInNlbGVjdCIsICJzZWxlY3QudmNwcm9qIiwgInsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidW5pY29kZWRhdGEiLCAidW5pY29kZWRhdGEudmNwcm9qIiwgIntFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHlleHBhdCIsICJweWV4cGF0LnZjcHJvaiIsICJ7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImJkaXN0X3dpbmluc3QiLCAiYmRpc3Rfd2luaW5zdC52Y3Byb2oiLCAie0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30iDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2hhc2hsaWIiLCAiX2hhc2hsaWIudmNwcm9qIiwgIns0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9Ig0KLQlQcm9qZWN0U2VjdGlvbihQcm9qZWN0RGVwZW5kZW5jaWVzKSA9IHBvc3RQcm9qZWN0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fSA9IHtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSA9IHtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9DQotCUVuZFByb2plY3RTZWN0aW9uDQotRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAic3FsaXRlMyIsICJzcWxpdGUzLnZjcHJvaiIsICJ7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9tdWx0aXByb2Nlc3NpbmciLCAiX211bHRpcHJvY2Vzc2luZy52Y3Byb2oiLCAiezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0iDQotCVByb2plY3RTZWN0aW9uKFByb2plY3REZXBlbmRlbmNpZXMpID0gcG9zdFByb2plY3QNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9ID0ge0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0NCi0JRW5kUHJvamVjdFNlY3Rpb24NCi1FbmRQcm9qZWN0DQotUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJzc2wiLCAic3NsLnZjcHJvaiIsICJ7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0gPSB7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gImtpbGxfcHl0aG9uIiwgImtpbGxfcHl0aG9uLnZjcHJvaiIsICJ7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfSINCi1FbmRQcm9qZWN0DQotR2xvYmFsDQotCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQotCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQotCQlEZWJ1Z3x4NjQgPSBEZWJ1Z3x4NjQNCi0JCVBHSW5zdHJ1bWVudHxXaW4zMiA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJUEdJbnN0cnVtZW50fHg2NCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCVBHVXBkYXRlfFdpbjMyID0gUEdVcGRhdGV8V2luMzINCi0JCVBHVXBkYXRlfHg2NCA9IFBHVXBkYXRlfHg2NA0KLQkJUmVsZWFzZXxXaW4zMiA9IFJlbGVhc2V8V2luMzINCi0JCVJlbGVhc2V8eDY0ID0gUmVsZWFzZXx4NjQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0IxMUQ3NTBGLUNEMUYtNEE5Ni04NUNFLUU2OUE1QzUyNTlGOX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QjExRDc1MEYtQ0QxRi00QTk2LTg1Q0UtRTY5QTVDNTI1OUY5fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtGMEUwNTQxRS1GMTdELTQzMEItOTdDNC05M0FERjBERDI4NEV9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0YwRTA1NDFFLUYxN0QtNDMwQi05N0M0LTkzQURGMEREMjg0RX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjBFMDU0MUUtRjE3RC00MzBCLTk3QzQtOTNBREYwREQyODRFfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsyOEI1RDc3Ny1EREYyLTRCNkItQjM0Ri0zMUQ5Mzg4MTM4NTZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MjhCNUQ3NzctRERGMi00QjZCLUIzNEYtMzFEOTM4ODEzODU2fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MEU5NzkxREItNTkzQS00NjVGLTk4QkMtNjgxMDExMzExNjE4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezBFOTc5MURCLTU5M0EtNDY1Ri05OEJDLTY4MTAxMTMxMTYxOH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXswRTk3OTFEQi01OTNBLTQ2NUYtOThCQy02ODEwMTEzMTE2MTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezlFQzcxOTBBLTI0OUYtNDE4MC1BOTAwLTU0OEZEQ0YzMDU1Rn0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs5RUM3MTkwQS0yNDlGLTQxODAtQTkwMC01NDhGRENGMzA1NUZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7OUVDNzE5MEEtMjQ5Ri00MTgwLUE5MDAtNTQ4RkRDRjMwNTVGfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxN0UxRTA0OS1DMzA5LTRENzktODQzRi1BRTQ4M0MyNjRBRUF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTdFMUUwNDktQzMwOS00RDc5LTg0M0YtQUU0ODNDMjY0QUVBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezE3RTFFMDQ5LUMzMDktNEQ3OS04NDNGLUFFNDgzQzI2NEFFQX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7MzFGRkM0NzgtN0I0QS00M0U4LTk5NTQtOEQwM0UyMTg3RTlDfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezMxRkZDNDc4LTdCNEEtNDNFOC05OTU0LThEMDNFMjE4N0U5Q30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXszMUZGQzQ3OC03QjRBLTQzRTgtOTk1NC04RDAzRTIxODdFOUN9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezg2OTM3RjUzLUMxODktNDBFRi04Q0U4LTg3NTlEOEU3RDQ4MH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs4NjkzN0Y1My1DMTg5LTQwRUYtOENFOC04NzU5RDhFN0Q0ODB9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7ODY5MzdGNTMtQzE4OS00MEVGLThDRTgtODc1OUQ4RTdENDgwfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXsxM0NFQ0I5Ny00MTE5LTQzMTYtOUQ0Mi04NTM0MDE5QTVBNDR9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7MTNDRUNCOTctNDExOS00MzE2LTlENDItODUzNDAxOUE1QTQ0fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezEzQ0VDQjk3LTQxMTktNDMxNi05RDQyLTg1MzQwMTlBNUE0NH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7QzZFMjBGODQtMzI0Ny00QUQ2LUIwNTEtQjA3MzI2OEY3M0JBfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0M2RTIwRjg0LTMyNDctNEFENi1CMDUxLUIwNzMyNjhGNzNCQX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NzNGQ0QyQkQtRjEzMy00NkI3LThFQzEtMTQ0Q0Q4MkE1OUQ1fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs3M0ZDRDJCRC1GMTMzLTQ2QjctOEVDMS0xNDRDRDgyQTU5RDV9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezE4Q0FFMjhDLUI0NTQtNDZDMS04N0EwLTQ5M0Q5MUQ5N0YwM30uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7MThDQUUyOEMtQjQ1NC00NkMxLTg3QTAtNDkzRDkxRDk3RjAzfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXtFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7RUNDN0NFQUMtQTVFNS00NThFLUJCOUUtMjQxM0NDODQ3ODgxfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VDQzdDRUFDLUE1RTUtNDU4RS1CQjlFLTI0MTNDQzg0Nzg4MX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RDA2QjY0MjYtNDc2Mi00NENDLThCQUQtRDc5MDUyNTA3RjJGfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtEMDZCNjQyNi00NzYyLTQ0Q0MtOEJBRC1ENzkwNTI1MDdGMkZ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0VCMUMxOUMxLTFGMTgtNDIxRS05NzM1LUNBRUU2OURDNkEzQ30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7RUIxQzE5QzEtMUYxOC00MjFFLTk3MzUtQ0FFRTY5REM2QTNDfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtFQjFDMTlDMS0xRjE4LTQyMUUtOTczNS1DQUVFNjlEQzZBM0N9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7NDQ3RjA1QTgtRjU4MS00Q0FDLUE0NjYtNUFDNzkzNkUyMDdFfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezQ0N0YwNUE4LUY1ODEtNENBQy1BNDY2LTVBQzc5MzZFMjA3RX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs0NDdGMDVBOC1GNTgxLTRDQUMtQTQ2Ni01QUM3OTM2RTIwN0V9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJe0ExQTI5NUU1LTQ2M0MtNDM3Ri04MUNBLTFGMzIzNjc2ODVEQX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXtBMUEyOTVFNS00NjNDLTQzN0YtODFDQS0xRjMyMzY3Njg1REF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCi0JCXs5RTQ4QjMwMC0zN0QxLTExREQtOEM0MS0wMDUwNTZDMDAwMDh9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQotCQl7OUU0OEIzMDAtMzdEMS0xMURELThDNDEtMDA1MDU2QzAwMDA4fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KLQkJezlFNDhCMzAwLTM3RDEtMTFERC04QzQxLTAwNTA1NkMwMDAwOH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTVCMDRDQzAtRUI0Qy00MkFCLUI0REMtMThFRjk1Rjg2NEIwfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFNUIwNENDMC1FQjRDLTQyQUItQjREQy0xOEVGOTVGODY0QjB9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCi0JCXs2REUxMDc0NC1FMzk2LTQwQTUtQjRFMi0xQjY5QUE3QzhEMzF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQotCQl7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCi0JRW5kR2xvYmFsU2VjdGlvbg0KLQlHbG9iYWxTZWN0aW9uKFNvbHV0aW9uUHJvcGVydGllcykgPSBwcmVTb2x1dGlvbg0KLQkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFDQotCUVuZEdsb2JhbFNlY3Rpb24NCi1FbmRHbG9iYWwNCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ2luc3RydW1lbnQudnNwcm9wcyBiL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzOGM1ZjE4Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3BnaW5zdHJ1bWVudC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InBnaW5zdHJ1bWVudCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKE91dERpclBHSSkiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC1wZ2lcJChQcm9qZWN0TmFtZSlcIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJRmF2b3JTaXplT3JTcGVlZD0iMiINCi0JCU9taXRGcmFtZVBvaW50ZXJzPSJ0cnVlIg0KLQkJRW5hYmxlRmliZXJTYWZlT3B0aW1pemF0aW9ucz0iZmFsc2UiDQotCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249InRydWUiDQotCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJRXhjZXB0aW9uSGFuZGxpbmc9IjAiDQotCQlCdWZmZXJTZWN1cml0eUNoZWNrPSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU9wdGltaXplUmVmZXJlbmNlcz0iMiINCi0JCUVuYWJsZUNPTURBVEZvbGRpbmc9IjIiDQotCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSIyIg0KLQkJUHJvZmlsZUd1aWRlZERhdGFiYXNlPSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ2lcJChUYXJnZXROYW1lKS5wZ2QiDQotCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSlcJChUYXJnZXROYW1lKS5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Ik91dERpclBHSSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS1wZ2lcIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzIGIvUEMvVlM4LjAvcGd1cGRhdGUudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjZjZmMyZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9wZ3VwZGF0ZS52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InBndXBkYXRlIg0KLQlPdXRwdXREaXJlY3Rvcnk9IiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXBnb1wiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFNvbHV0aW9uRGlyKVxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJQWRkaXRpb25hbE1hbmlmZXN0RGVwZW5kZW5jaWVzPSIiDQotCQlMaW5rVGltZUNvZGVHZW5lcmF0aW9uPSI0Ig0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWQudnNwcm9wcyBiL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNGMyMWUxLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5ZC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZCINCi0JSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiDQotCQlSdW50aW1lTGlicmFyeT0iMiINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5weWQiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkucGRiIg0KLQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpXCQoVGFyZ2V0TmFtZSkubGliIg0KLQkJR2VuZXJhdGVNYW5pZmVzdD0iZmFsc2UiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCUVtYmVkTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQlDb21tYW5kTGluZT0iIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWRfZC52c3Byb3BzIGIvUEMvVlM4LjAvcHlkX2QudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzEzYTMwYi4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weWRfZC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5ZF9kIg0KLQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlPcHRpbWl6YXRpb249IjAiDQotCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUHlfQlVJTERfQ09SRV9NT0RVTEUiDQotCQlSdW50aW1lTGlicmFyeT0iMyINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLnB5ZCINCi0JCUxpbmtJbmNyZW1lbnRhbD0iMSINCi0JCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLnBkYiINCi0JCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKVwkKFRhcmdldE5hbWUpLmxpYiINCi0JCUdlbmVyYXRlTWFuaWZlc3Q9ImZhbHNlIg0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQlFbWJlZE1hbmlmZXN0PSJmYWxzZSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJQ29tbWFuZExpbmU9IiINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iUHl0aG9uRXhlIg0KLQkJVmFsdWU9IiQoU29sdXRpb25EaXIpcHl0aG9uX2QuZXhlIg0KLQkvPg0KLTwvVmlzdWFsU3R1ZGlvUHJvcGVydHlTaGVldD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weWV4cGF0LnZjcHJvaiBiL1BDL1ZTOC4wL3B5ZXhwYXQudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTllNGVjLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5ZXhwYXQudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTUzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJweWV4cGF0Ig0KLQlQcm9qZWN0R1VJRD0ie0QwNkI2NDI2LTQ3NjItNDRDQy04QkFELUQ3OTA1MjUwN0YyRn0iDQotCVJvb3ROYW1lc3BhY2U9InB5ZXhwYXQiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuXC4uXC4uXE1vZHVsZXNcZXhwYXQiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJQWUVYUEFUX0VYUE9SVFM7SEFWRV9FWFBBVF9IO1hNTF9OUztYTUxfRFREO0JZVEVPUkRFUj0xMjM0O1hNTF9DT05URVhUX0JZVEVTPTEwMjQ7WE1MX1NUQVRJQztIQVZFX01FTU1PVkUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii5cLi5cLi5cTW9kdWxlc1xleHBhdCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IlBZRVhQQVRfRVhQT1JUUztIQVZFX0VYUEFUX0g7WE1MX05TO1hNTF9EVEQ7QllURU9SREVSPTEyMzQ7WE1MX0NPTlRFWFRfQllURVM9MTAyNDtYTUxfU1RBVElDO0hBVkVfTUVNTU9WRSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLlwuLlwuLlxNb2R1bGVzXGV4cGF0Ig0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iUFlFWFBBVF9FWFBPUlRTO0hBVkVfRVhQQVRfSDtYTUxfTlM7WE1MX0RURDtCWVRFT1JERVI9MTIzNDtYTUxfQ09OVEVYVF9CWVRFUz0xMDI0O1hNTF9TVEFUSUM7SEFWRV9NRU1NT1ZFIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHB5ZXhwYXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scGFyc2UuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcZXhwYXRceG1scm9sZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xleHBhdFx4bWx0b2suYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9weXByb2plY3QudnNwcm9wcyBiL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMzFiZDNmLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5cHJvamVjdC52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5cHJvamVjdCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSINCi0JSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKSQoUGxhdGZvcm1OYW1lKS10ZW1wLSQoQ29uZmlndXJhdGlvbk5hbWUpXCQoUHJvamVjdE5hbWUpXCINCi0JPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCU9wdGltaXphdGlvbj0iMiINCi0JCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJ0cnVlIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZTsgLi5cLi5cUEMiDQotCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTjMyIg0KLQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCUV4Y2VwdGlvbkhhbmRsaW5nPSIwIg0KLQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCVdhcm5pbmdMZXZlbD0iMyINCi0JCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjMiDQotCQlDb21waWxlQXM9IjAiDQotCS8+DQotCTxUb29sDQotCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQlMaW5rSW5jcmVtZW50YWw9IjEiDQotCQlBZGRpdGlvbmFsTGlicmFyeURpcmVjdG9yaWVzPSIkKE91dERpcikiDQotCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiDQotCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFRhcmdldE5hbWUpLnBkYiINCi0JCVN1YlN5c3RlbT0iMiINCi0JCVJhbmRvbWl6ZWRCYXNlQWRkcmVzcz0iMSINCi0JCURhdGFFeGVjdXRpb25QcmV2ZW50aW9uPSIwIg0KLQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JLz4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQQzsuLlwuLlxJbmNsdWRlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJQeURsbE5hbWUiDQotCQlWYWx1ZT0icHl0aG9uMzMiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKFNvbHV0aW9uRGlyKVxweXRob24uZXhlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJleHRlcm5hbHNEaXIiDQotCQlWYWx1ZT0iLi5cLi5cLi4iDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InNxbGl0ZTNEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHNxbGl0ZS0zLjYuMjEiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9ImJ6MkRpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcYnppcDItMS4wLjYiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0RpcilcdGNsdGsiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjREaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXHRjbHRrNjQiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrTGliIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NS5saWIgJCh0Y2x0a0RpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0a0xpYkRlYnVnIg0KLQkJVmFsdWU9IiQodGNsdGtEaXIpXGxpYlx0Y2w4NWcubGliICQodGNsdGtEaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9InRjbHRrNjRMaWIiDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODUubGliICQodGNsdGs2NERpcilcbGliXHRrODUubGliIg0KLQkvPg0KLQk8VXNlck1hY3JvDQotCQlOYW1lPSJ0Y2x0azY0TGliRGVidWciDQotCQlWYWx1ZT0iJCh0Y2x0azY0RGlyKVxsaWJcdGNsODVnLmxpYiAkKHRjbHRrNjREaXIpXGxpYlx0azg1Zy5saWIiDQotCS8+DQotPC9WaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3B5dGhvbi52Y3Byb2ogYi9QQy9WUzguMC9weXRob24udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZjQ3YzBlLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3B5dGhvbi52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw2MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbiINCi0JUHJvamVjdEdVSUQ9IntCMTFENzUwRi1DRDFGLTRBOTYtODVDRS1FNjlBNUM1MjU5Rjl9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUJyb3dzZUluZm9ybWF0aW9uPSIxIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob25fZC5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIzIg0KLQkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uX2QuZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIxMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DT05TT0xFIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbi5leGUiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NPTlNPTEUiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9uLmV4ZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ09OU09MRSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob24uZXhlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweWNvbi5pY28iDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fZXhlLnJjIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccHl0aG9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc1YmI5ZC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob25jb3JlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE5MjEgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InB5dGhvbmNvcmUiDQotCVByb2plY3RHVUlEPSJ7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSINCi0JUm9vdE5hbWVzcGFjZT0icHl0aG9uY29yZSINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTMxMDcyIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXIpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSlfZC5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMCINCi0JCQkJRW5hYmxlSW50cmluc2ljRnVuY3Rpb25zPSJmYWxzZSINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgRGVidWcgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSlfZC5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKV9kLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgJChJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvWm0yMDAgIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxQeXRob247Li5cLi5cTW9kdWxlc1x6bGliIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1VTUkRMTDtQeV9CVUlMRF9DT1JFO1B5X0VOQUJMRV9TSEFSRUQ7V0lOMzIiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlwuLlxJbmNsdWRlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCQlEZXNjcmlwdGlvbj0iR2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi4iDQotCQkJCUNvbW1hbmRMaW5lPSImcXVvdDskKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSZxdW90OyBSZWxlYXNlICQoSW50RGlyKSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0iJChJbnREaXIpXGdldGJ1aWxkaW5mby5vIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQeURsbE5hbWUpLmRsbCINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iJChPdXREaXIpJChQeURsbE5hbWUpLnBkYiINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWUwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiQoT3V0RGlyUEdJKSQoUHlEbGxOYW1lKS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbE9wdGlvbnM9Ii9abTIwMCAiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXFB5dGhvbjsuLlwuLlxNb2R1bGVzXHpsaWIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfVVNSRExMO1B5X0JVSUxEX0NPUkU7UHlfRU5BQkxFX1NIQVJFRDtXSU4zMiINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXC4uXEluY2x1ZGUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJCURlc2NyaXB0aW9uPSJHZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLiINCi0JCQkJQ29tbWFuZExpbmU9IiZxdW90OyQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlJnF1b3Q7IFJlbGVhc2UgKCRJbnREaXIpIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSIkKEludERpcilcZ2V0YnVpbGRpbmZvLm8iDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFB5RGxsTmFtZSkuZGxsIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlQcm9ncmFtRGF0YWJhc2VGaWxlPSIkKE91dERpcikkKFB5RGxsTmFtZSkucGRiIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZTAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iJChPdXREaXJQR0kpJChQeURsbE5hbWUpLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1ptMjAwICINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cUHl0aG9uOy4uXC4uXE1vZHVsZXNcemxpYiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9VU1JETEw7UHlfQlVJTERfQ09SRTtQeV9FTkFCTEVfU0hBUkVEO1dJTjMyIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cSW5jbHVkZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkJRGVzY3JpcHRpb249IkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uIg0KLQkJCQlDb21tYW5kTGluZT0iJnF1b3Q7JChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUmcXVvdDsgUmVsZWFzZSAkKEludERpcikiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IiQoSW50RGlyKVxnZXRidWlsZGluZm8ubyINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXCQoUHlEbGxOYW1lKS5kbGwiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9IiQoT3V0RGlyKSQoUHlEbGxOYW1lKS5wZGIiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFlMDAwMDAwIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIkKE91dERpclBHSSkkKFB5RGxsTmFtZSkubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSW5jbHVkZSINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFic3RyYWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGFjY3UuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYXNkbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxhc3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYml0c2V0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGJvb2xvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZXNfbWV0aG9kcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxieXRlYXJyYXlvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcYnl0ZXNvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcY2VsbG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjZXZhbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjbGFzc29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvZGVjcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxjb21waWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGNvbXBsZXhvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGF0ZXRpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGVzY3JvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZGljdG9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxkeW5hbWljX2Fubm90YXRpb25zLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGVudW1vYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZXJyY29kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxldmFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZpbGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZmlsZXV0aWxzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZsb2F0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZvcm1hdHRlcl91bmljb2RlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZyYW1lb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGZ1bmNvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZ2Vub2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdyYW1pbml0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGdyYW1tYXIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcaW1wb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGludHJjaGVjay5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxpdGVyb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXGxpc3RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbG9uZ2ludHJlcHIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbG9uZ29iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtYXJzaGFsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXG1lbW9yeW9iamVjdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZXRhZ3JhbW1hci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtZXRob2RvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbW9kc3VwcG9ydC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxtb2R1bGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcbm9kZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb2JqaW1wbC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxvcGNvZGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcb3NkZWZzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhcnNldG9rLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHBhdGNobGV2ZWwuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccGdlbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxwZ2VuaGVhZGVycy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweV9jdXJzZXMuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlhcmVuYS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWNhcHN1bGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHljdHlwZS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweWRlYnVnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXJyb3JzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5ZXhwYXQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlmcGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlnZXRvcHQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltYWN0b29sYm94LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5bWF0aC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHltZW0uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlwb3J0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHB5c3RhdGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdHJjbXAuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHlzdHJ0b2QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcZHRvYS5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxQeXRob24tYXN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXFB5dGhvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxweXRob25ydW4uaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccHl0aHJlYWQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVccmFuZ2VvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc2V0b2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHNsaWNlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHN0cnVjdG1lbWJlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVxzdHJ1Y3RzZXEuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3ltdGFibGUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcc3lzbW9kdWxlLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHRpbWVmdW5jcy5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0b2tlbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx0cmFjZWJhY2suaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdHVwbGVvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXEluY2x1ZGVcdWNuaGFzaC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cSW5jbHVkZVx1bmljb2Rlb2JqZWN0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxJbmNsdWRlXHdlYWtyZWZvYmplY3QuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Ik1vZHVsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfYmlzZWN0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jb2RlY3Ntb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2NvbGxlY3Rpb25zbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9jc3YuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2Z1bmN0b29sc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaGVhcHFtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2pzb24uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2xvY2FsZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfbHNwcm9mLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9tYXRoLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9waWNrbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3JlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdHJ1Y3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3RpbWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3dlYWtyZWYuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYXRleGl0bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGF1ZGlvb3AuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcYmluYXNjaWkuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY21hdGhtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2RhdGV0aW1lbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGdjbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGl0ZXJ0b29sc21vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xtYWluLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1hdGhtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcbWQ1bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXG1tYXBtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcb3BlcmF0b3IuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNccGFyc2VybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHBvc2l4bW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhMW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzaGEyNTZtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc2hhNTEybW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNpZ25hbG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzeW10YWJsZW1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGhyZWFkbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHppcGltcG9ydC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGlibW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJfaW8iDQotCQkJCT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cZmlsZWlvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnl0ZXNpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHN0cmluZ2lvLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfaW9cYnVmZmVyZWRpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXGlvYmFzZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXHRleHRpby5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX2lvXF9pb21vZHVsZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJPC9GaWx0ZXI+DQotCQkJPEZpbHRlcg0KLQkJCQlOYW1lPSJ6bGliIg0KLQkJCQk+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxhZGxlcjMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNvbXByZXNzLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGNyYzMyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZGVmbGF0ZS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxnemlvLmMiDQotCQkJCQk+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iRGVidWd8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR0luc3RydW1lbnR8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlBHVXBkYXRlfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZiYWNrLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmZhc3QuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mZmFzdC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZmaXhlZC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlxpbmZsYXRlLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXGluZmxhdGUuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mdHJlZXMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdHJlZXMuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcdW5jb21wci5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6Y29uZi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6Y29uZi5pbi5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcemxpYlx6bGliLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1x6bGliXHp1dGlsLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCQk8RmlsdGVyDQotCQkJCU5hbWU9ImNqa2NvZGVjcyINCi0JCQkJPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2NuLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc19oay5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfaXNvMjAyMi5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXF9jb2RlY3NfanAuYyINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xfY29kZWNzX2tyLmMiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcX2NvZGVjc190dy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGFsZ19qaXN4MDIwMS5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGNqa2NvZGVjcy5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXGVtdV9qaXN4MDIxM18yMDAwLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfY24uaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19oay5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2ppc3gwMjEzX3BhaXIuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtYXBwaW5nc19qcC5oIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG1hcHBpbmdzX2tyLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQkJPEZpbGUNCi0JCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xjamtjb2RlY3NcbWFwcGluZ3NfdHcuaCINCi0JCQkJCT4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXGNqa2NvZGVjc1xtdWx0aWJ5dGVjb2RlYy5jIg0KLQkJCQkJPg0KLQkJCQk8L0ZpbGU+DQotCQkJCTxGaWxlDQotCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcY2prY29kZWNzXG11bHRpYnl0ZWNvZGVjLmgiDQotCQkJCQk+DQotCQkJCTwvRmlsZT4NCi0JCQk8L0ZpbHRlcj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9Ik9iamVjdHMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhYnN0cmFjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xhY2N1LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGJvb2xvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNfbWV0aG9kcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xieXRlYXJyYXlvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcYnl0ZXNvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY2Fwc3VsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xjZWxsb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNsYXNzb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGNvZGVvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcY29tcGxleG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcY291bnQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGVzY3JvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZGljdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xlbnVtb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGV4Y2VwdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXGZhc3RzZWFyY2guaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcZmlsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmluZC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmbG9hdG9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmcmFtZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xmdW5jb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGdlbm9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xpdGVyb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXGxpc3RvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbG9uZ29iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xtZW1vcnlvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcbWV0aG9kb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXG1vZHVsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcb2JtYWxsb2MuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHBhcnRpdGlvbi5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xyYW5nZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1xzZXRvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2xpY2VvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHN0cnVjdHNlcS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0dXBsZW9iamVjdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x0eXBlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGVjdHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cT2JqZWN0c1x1bmljb2Rlb2JqZWN0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHVuaWNvZGV0eXBlX2RiLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxPYmplY3RzXHdlYWtyZWZvYmplY3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlBhcnNlciINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcYWNjZWxlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGJpdHNldC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGZpcnN0c2V0cy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxncmFtbWFyMS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXGxpc3Rub2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbWV0YWdyYW1tYXIuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBhcnNlclxteXJlYWRsaW5lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcbm9kZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNlci5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUGFyc2VyXHBhcnNldG9rLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQYXJzZXJcdG9rZW5pemVyLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQQyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xfc3VicHJvY2Vzcy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENcd2lucmVnLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xjb25maWcuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGRsX250LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xlcnJtYXAuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXGdldHBhdGhwLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xtc3ZjcnRtb2R1bGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHB5Y29uZmlnLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJQeXRob24iDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXF93YXJuaW5ncy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGFzZGwuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxhc3QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxibHRpbm1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGNldmFsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29kZWNzLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cY29tcGlsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGR5bmFtaWNfYW5ub3RhdGlvbnMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkeW5sb2FkX3dpbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGVycm9ycy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZpbGV1dGlscy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGZvcm1hdHRlcl91bmljb2RlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnJvemVuLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZnV0dXJlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0YXJncy5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGdldGNvbXBpbGVyLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0Y29weXJpZ2h0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0b3B0LmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ2V0cGxhdGZvcm0uYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxnZXR2ZXJzaW9uLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cZ3JhbWluaXQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxpbXBvcnRkbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXGltcG9ydGRsLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbWFyc2hhbC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXG1vZHN1cHBvcnQuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxteXNucHJpbnRmLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cbXlzdHJ0b3VsLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccGVlcGhvbGUuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxweWFyZW5hLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHljdHlwZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5ZnBlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHltYXRoLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHl0aW1lLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdGF0ZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5c3RyY21wLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25ccHlzdHJ0b2QuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFB5dGhvblxkdG9hLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cUHl0aG9uLWFzdC5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHB5dGhvbnJ1bi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHJhbmRvbS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN0cnVjdG1lbWJlci5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUHl0aG9uXHN5bXRhYmxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cc3lzbW9kdWxlLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdGhyZWFkX250LmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQeXRob25cdHJhY2ViYWNrLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJSZXNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xweXRob25fbnQucmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcHl0aG9udy52Y3Byb2ogYi9QQy9WUzguMC9weXRob253LnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTAzN2I3OC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9weXRob253LnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDYxOCArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0icHl0aG9udyINCi0JUHJvamVjdEdVSUQ9IntGNDIyOUNDMy04NzNDLTQ5QUUtOTcyOS1ERDMwOEVENENENEF9Ig0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxMzEwNzIiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXGRlYnVnLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUVuYWJsZUludHJpbnNpY0Z1bmN0aW9ucz0iZmFsc2UiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0RFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9ud19kLmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlFbmFibGVJbnRyaW5zaWNGdW5jdGlvbnM9ImZhbHNlIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjMiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbndfZC5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkJQ29tcGlsZUFzPSIwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlDdWx0dXJlPSIxMDMzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilccHl0aG9udy5leGUiDQotCQkJCVN0YWNrUmVzZXJ2ZVNpemU9IjIwMDAwMDAiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFkMDAwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lORE9XUyINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjIiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCQlDb21waWxlQXM9IjAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUciDQotCQkJCUN1bHR1cmU9IjEwMzMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVxweXRob253LmV4ZSINCi0JCQkJU3RhY2tSZXNlcnZlU2l6ZT0iMjAwMDAwMCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MWQwMDAwMDAiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9XSU5ET1dTIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMiINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJCUNvbXBpbGVBcz0iMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJT3V0cHV0RmlsZT0iJChPdXREaXIpXHB5dGhvbncuZXhlIg0KLQkJCQlTdGFja1Jlc2VydmVTaXplPSIyMDAwMDAwIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxZDAwMDAwMCINCi0JCQkJSW1wb3J0TGlicmFyeT0iIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iUmVzb3VyY2UgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cUENccHl0aG9uX2V4ZS5yYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1xXaW5NYWluLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzIGIvUEMvVlM4LjAvcmVsZWFzZS52c3Byb3BzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOGRlZjkwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3JlbGVhc2UudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJyZWxlYXNlIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JLz4NCi0JPFVzZXJNYWNybw0KLQkJTmFtZT0iS2lsbFB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKE91dERpcilca2lsbF9weXRob24uZXhlIg0KLQkvPgkNCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcm1weWMucHkgYi9QQy9WUzguMC9ybXB5Yy5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMThlMTcwNS4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC9ybXB5Yy5weQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMgUmVtb3ZlIGFsbCB0aGUgLnB5YyBhbmQgLnB5byBmaWxlcyB1bmRlciAuLi9MaWIuCi0KLQotZGVmIGRlbHRyZWUocm9vdCk6Ci0gICAgaW1wb3J0IG9zCi0gICAgZnJvbSBvcy5wYXRoIGltcG9ydCBqb2luCi0KLSAgICBucHljID0gbnB5byA9IDAKLSAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayhyb290KToKLSAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6Ci0gICAgICAgICAgICBkZWxldGUgPSBGYWxzZQotICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aCgnLnB5YycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHljICs9IDEKLSAgICAgICAgICAgIGVsaWYgbmFtZS5lbmRzd2l0aCgnLnB5bycpOgotICAgICAgICAgICAgICAgIGRlbGV0ZSA9IFRydWUKLSAgICAgICAgICAgICAgICBucHlvICs9IDEKLQotICAgICAgICAgICAgaWYgZGVsZXRlOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShqb2luKHJvb3QsIG5hbWUpKQotCi0gICAgcmV0dXJuIG5weWMsIG5weW8KLQotbnB5YywgbnB5byA9IGRlbHRyZWUoIi4uLy4uL0xpYiIpCi1wcmludChucHljLCAiLnB5YyBkZWxldGVkLCIsIG5weW8sICIucHlvIGRlbGV0ZWQiKQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvcnQuYmF0IGIvUEMvVlM4LjAvcnQuYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNDI5ZTE5Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3J0LmJhdAorKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLUBlY2hvIG9mZgotcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gcmVncnRlc3RfYXJncwotcmVtIC1kICAgUnVuIERlYnVnIGJ1aWxkIChweXRob25fZC5leGUpLiAgRWxzZSByZWxlYXNlIGJ1aWxkLgotcmVtIC1PICAgUnVuIHB5dGhvbi5leGUgb3IgcHl0aG9uX2QuZXhlIChzZWUgLWQpIHdpdGggLU8uCi1yZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQotcmVtICAgICAgYWZ0ZXIgZGVsZXRpbmcgYWxsIHRoZSAucHlbY29dIGZpbGVzIHJlYWNoYWJsZSBmcm9tIExpYi8uCi1yZW0gICAgICAtcSBydW5zIHRoZSB0ZXN0cyBqdXN0IG9uY2UsIGFuZCB3aXRob3V0IGRlbGV0aW5nIC5weVtjb10gZmlsZXMuCi1yZW0gQWxsIGxlYWRpbmcgaW5zdGFuY2VzIG9mIHRoZXNlIHN3aXRjaGVzIGFyZSBzaGlmdGVkIG9mZiwgYW5kCi1yZW0gd2hhdGV2ZXIgcmVtYWlucyBpcyBwYXNzZWQgdG8gcmVncnRlc3QucHkuICBGb3IgZXhhbXBsZSwKLXJlbSAgICAgcnQgLU8gLWQgLXggdGVzdF90aHJlYWQKLXJlbSBydW5zCi1yZW0gICAgIHB5dGhvbl9kIC1PIC4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC14IHRlc3RfdGhyZWFkCi1yZW0gdHdpY2UsIGFuZAotcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAtZyB0ZXN0X2JpbmFzY2lpCi1yZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5LgotcmVtCi1yZW0gQ29uZnVzaW5nOiAgaWYgeW91IHdhbnQgdG8gcGFzcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0LCBsaWtlCi1yZW0gICAgIC11IG5ldHdvcmssbGFyZ2VmaWxlCi1yZW0gdGhlbiB5b3UgaGF2ZSB0byBxdW90ZSBpdCBvbiB0aGUgcnQgbGluZSwgbGlrZQotcmVtICAgICBydCAtdSAibmV0d29yayxsYXJnZWZpbGUiCi0KLXNldGxvY2FsCi0KLXNldCBleGU9cHl0aG9uCi1zZXQgcW1vZGU9Ci1zZXQgZGFzaE89Ci1QQVRIICVQQVRIJTslfmRwMC4uXC4uXC4uXHRjbHRrXGJpbgotCi06Q2hlY2tPcHRzCi1pZiAiJTEiPT0iLU8iIChzZXQgZGFzaE89LU8pICAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItcSIgKHNldCBxbW9kZT15ZXMpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi0KLXNldCBjbWQ9JWV4ZSUgJWRhc2hPJSAtRSAuLi8uLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlCi0KLWVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotJWV4ZSUgcm1weWMucHkKLQotZWNobyBvbgotJWNtZCUKLUBlY2hvIG9mZgotCi1lY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLXBhdXNlCi0KLTpRbW9kZQotZWNobyBvbgotJWNtZCUKZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2ogYi9QQy9WUzguMC9zZWxlY3QudmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzFmYzE2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3NlbGVjdC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNlbGVjdCINCi0JUHJvamVjdEdVSUQ9InsxOENBRTI4Qy1CNDU0LTQ2QzEtODdBMC00OTNEOTFEOTdGMDN9Ig0KLQlSb290TmFtZXNwYWNlPSJzZWxlY3QiDQotCUtleXdvcmQ9IldpbjMyUHJvaiINCi0JVGFyZ2V0RnJhbWV3b3JrVmVyc2lvbj0iMTk2NjEzIg0KLQk+DQotCTxQbGF0Zm9ybXM+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJXaW4zMiINCi0JCS8+DQotCQk8UGxhdGZvcm0NCi0JCQlOYW1lPSJ4NjQiDQotCQkvPg0KLQk8L1BsYXRmb3Jtcz4NCi0JPFRvb2xGaWxlcz4NCi0JPC9Ub29sRmlsZXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iRGVidWd8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiINCi0JCQkJSWdub3JlRGVmYXVsdExpYnJhcnlOYW1lcz0ibGliYyINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMTAwMDAiDQotCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIiDQotCQkJCUlnbm9yZURlZmF1bHRMaWJyYXJ5TmFtZXM9ImxpYmMiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTEwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIg0KLQkJCQlJZ25vcmVEZWZhdWx0TGlicmFyeU5hbWVzPSJsaWJjIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDExMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHNlbGVjdG1vZHVsZS5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlhZmJlNWQuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MzcgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNxbGl0ZTMiDQotCVByb2plY3RHVUlEPSJ7QTFBMjk1RTUtNDYzQy00MzdGLTgxQ0EtMUYzMjM2NzY4NURBfSINCi0JUm9vdE5hbWVzcGFjZT0ic3FsaXRlMyINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxkZWJ1Zy52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKV9kLmRsbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5cZGVidWcudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSlfZC5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5cc3FsaXRlMy52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiZxdW90Oy4uXC4uXC4uXHNxbGl0ZS0zLjYuMjEmcXVvdDsiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCU91dHB1dEZpbGU9IiQoT3V0RGlyKVwkKFByb2plY3ROYW1lKS5kbGwiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlPdXRwdXRGaWxlPSIkKE91dERpcilcJChQcm9qZWN0TmFtZSkuZGxsIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxzcWxpdGUzLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCTwvQ29uZmlndXJhdGlvbnM+DQotCTxSZWZlcmVuY2VzPg0KLQk8L1JlZmVyZW5jZXM+DQotCTxGaWxlcz4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMVxzcWxpdGUzLmgiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTNleHQuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlwuLlxzcWxpdGUtMy42LjIxXHNxbGl0ZTMuYyINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMgYi9QQy9WUzguMC9zcWxpdGUzLnZzcHJvcHMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzMDAzMjguLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3FsaXRlMy52c3Byb3BzCisrKyAvZGV2L251bGwKQEAgLTEsMTQgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9InNxbGl0ZTMiDQotCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzIg0KLQk+DQotCTxUb29sDQotCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iLi5cLi5cLi5cc3FsaXRlLTMuNi4yMSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJTUUxJVEVfQVBJPV9fZGVjbHNwZWMoZGxsZXhwb3J0KSINCi0JCVdhcm5pbmdMZXZlbD0iMSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvc3NsLnZjcHJvaiBiL1BDL1ZTOC4wL3NzbC52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZDYzNWUuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvc3NsLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0ic3NsIg0KLQlQcm9qZWN0R1VJRD0ie0U1QjA0Q0MwLUVCNEMtNDJBQi1CNERDLTE4RUY5NUY4NjRCMH0iDQotCVJvb3ROYW1lc3BhY2U9InNzbCINCi0JS2V5d29yZD0iTWFrZUZpbGVQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMCINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHSW5zdHJ1bWVudHx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBnaW5zdHJ1bWVudC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNOTWFrZVRvb2wiDQotCQkJCUJ1aWxkQ29tbWFuZExpbmU9ImNkICZxdW90OyQoU29sdXRpb25EaXIpJnF1b3Q7JiN4MEQ7JiN4MEE7JnF1b3Q7JChQeXRob25FeGUpJnF1b3Q7IGJ1aWxkX3NzbC5weSBSZWxlYXNlICQoUGxhdGZvcm1OYW1lKSAtYSYjeDBEOyYjeDBBOyINCi0JCQkJUmVCdWlsZENvbW1hbmRMaW5lPSIiDQotCQkJCUNsZWFuQ29tbWFuZExpbmU9IiINCi0JCQkJT3V0cHV0PSIiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiDQotCQkJCUluY2x1ZGVTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZEluY2x1ZGVzPSIiDQotCQkJCUFzc2VtYmx5U2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRVc2luZ0Fzc2VtYmxpZXM9IiINCi0JCQkJQ29tcGlsZUFzTWFuYWdlZD0iIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlBHVXBkYXRlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIwIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGd1cGRhdGUudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTk1ha2VUb29sIg0KLQkJCQlCdWlsZENvbW1hbmRMaW5lPSJjZCAmcXVvdDskKFNvbHV0aW9uRGlyKSZxdW90OyYjeDBEOyYjeDBBOyZxdW90OyQoUHl0aG9uRXhlKSZxdW90OyBidWlsZF9zc2wucHkgUmVsZWFzZSAkKFBsYXRmb3JtTmFtZSkgLWEmI3gwRDsmI3gwQTsiDQotCQkJCVJlQnVpbGRDb21tYW5kTGluZT0iIg0KLQkJCQlDbGVhbkNvbW1hbmRMaW5lPSIiDQotCQkJCU91dHB1dD0iIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIg0KLQkJCQlJbmNsdWRlU2VhcmNoUGF0aD0iIg0KLQkJCQlGb3JjZWRJbmNsdWRlcz0iIg0KLQkJCQlBc3NlbWJseVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkVXNpbmdBc3NlbWJsaWVzPSIiDQotCQkJCUNvbXBpbGVBc01hbmFnZWQ9IiINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjAiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ05NYWtlVG9vbCINCi0JCQkJQnVpbGRDb21tYW5kTGluZT0iY2QgJnF1b3Q7JChTb2x1dGlvbkRpcikmcXVvdDsmI3gwRDsmI3gwQTsmcXVvdDskKFB5dGhvbkV4ZSkmcXVvdDsgYnVpbGRfc3NsLnB5IFJlbGVhc2UgJChQbGF0Zm9ybU5hbWUpIC1hJiN4MEQ7JiN4MEE7Ig0KLQkJCQlSZUJ1aWxkQ29tbWFuZExpbmU9IiINCi0JCQkJQ2xlYW5Db21tYW5kTGluZT0iIg0KLQkJCQlPdXRwdXQ9IiINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiINCi0JCQkJSW5jbHVkZVNlYXJjaFBhdGg9IiINCi0JCQkJRm9yY2VkSW5jbHVkZXM9IiINCi0JCQkJQXNzZW1ibHlTZWFyY2hQYXRoPSIiDQotCQkJCUZvcmNlZFVzaW5nQXNzZW1ibGllcz0iIg0KLQkJCQlDb21waWxlQXNNYW5hZ2VkPSIiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQk8L0ZpbGVzPg0KLQk8R2xvYmFscz4NCi0JPC9HbG9iYWxzPg0KLTwvVmlzdWFsU3R1ZGlvUHJvamVjdD4NCmRpZmYgLS1naXQgYS9QQy9WUzguMC91bmljb2RlZGF0YS52Y3Byb2ogYi9QQy9WUzguMC91bmljb2RlZGF0YS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjZjdkMjMuLjAwMDAwMDAKLS0tIGEvUEMvVlM4LjAvdW5pY29kZWRhdGEudmNwcm9qCisrKyAvZGV2L251bGwKQEAgLTEsNTMzICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9qZWN0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJ1bmljb2RlZGF0YSINCi0JUHJvamVjdEdVSUQ9IntFQ0M3Q0VBQy1BNUU1LTQ1OEUtQkI5RS0yNDEzQ0M4NDc4ODF9Ig0KLQlSb290TmFtZXNwYWNlPSJ1bmljb2RlZGF0YSINCi0JS2V5d29yZD0iV2luMzJQcm9qIg0KLQlUYXJnZXRGcmFtZXdvcmtWZXJzaW9uPSIxOTY2MTMiDQotCT4NCi0JPFBsYXRmb3Jtcz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9IldpbjMyIg0KLQkJLz4NCi0JCTxQbGF0Zm9ybQ0KLQkJCU5hbWU9Ing2NCINCi0JCS8+DQotCTwvUGxhdGZvcm1zPg0KLQk8VG9vbEZpbGVzPg0KLQk8L1Rvb2xGaWxlcz4NCi0JPENvbmZpZ3VyYXRpb25zPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWRfZC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlCYXNlQWRkcmVzcz0iMHgxRDEyMDAwMCINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQmFzZUFkZHJlc3M9IjB4MUQxMjAwMDAiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUJhc2VBZGRyZXNzPSIweDFEMTIwMDAwIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iSGVhZGVyIEZpbGVzIg0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZWRhdGFfZGIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcdW5pY29kZW5hbWVfZGIuaCINCi0JCQkJPg0KLQkJCTwvRmlsZT4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHVuaWNvZGVkYXRhLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM4LjAvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMTRkMjA2Li4wMDAwMDAwCi0tLSBhL1BDL1ZTOC4wL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVByb2plY3RHVUlEPSJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUm9vdE5hbWVzcGFjZT0idzl4cG9wZW4iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL3dpbnNvdW5kLnZjcHJvaiBiL1BDL1ZTOC4wL3dpbnNvdW5kLnZjcHJvagpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDM3OTM1Ny4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC93aW5zb3VuZC52Y3Byb2oKKysrIC9kZXYvbnVsbApAQCAtMSw1MjMgKzAsMCBAQAotPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iV2luZG93cy0xMjUyIj8+DQotPFZpc3VhbFN0dWRpb1Byb2plY3QNCi0JUHJvamVjdFR5cGU9IlZpc3VhbCBDKysiDQotCVZlcnNpb249IjguMDAiDQotCU5hbWU9IndpbnNvdW5kIg0KLQlQcm9qZWN0R1VJRD0iezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQotCVJvb3ROYW1lc3BhY2U9IndpbnNvdW5kIg0KLQlLZXl3b3JkPSJXaW4zMlByb2oiDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZF9kLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3x4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkX2QudnNwcm9wczsuXHg2NC52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjIiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlkLnZzcHJvcHM7Llx4NjQudnNwcm9wcyINCi0JCQlDaGFyYWN0ZXJTZXQ9IjAiDQotCQkJV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPSIxIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id2lubW0ubGliIg0KLQkJCQlUYXJnZXRNYWNoaW5lPSIxNyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXxXaW4zMiINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweWQudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCVdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj0iMSINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3aW5tbS5saWIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8eDY0Ig0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5ZC52c3Byb3BzOy5ceDY0LnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCUNoYXJhY3RlclNldD0iMCINCi0JCQlXaG9sZVByb2dyYW1PcHRpbWl6YXRpb249IjEiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMyINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Indpbm1tLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQlGaWx0ZXI9ImNwcDtjO2NjO2N4eDtkZWY7b2RsO2lkbDtocGo7YmF0O2FzbTthc214Ig0KLQkJCVVuaXF1ZUlkZW50aWZpZXI9Ins0RkM3MzdGMS1DN0E1LTQzNzYtQTA2Ni0yQTMyRDc1MkEyRkZ9Ig0KLQkJCT4NCi0JCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXFBDXHdpbnNvdW5kLmMiDQotCQkJCT4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvVlM4LjAveDY0LnZzcHJvcHMgYi9QQy9WUzguMC94NjQudnNwcm9wcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWY4OGQ0NC4uMDAwMDAwMAotLS0gYS9QQy9WUzguMC94NjQudnNwcm9wcworKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLTw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/Pg0KLTxWaXN1YWxTdHVkaW9Qcm9wZXJ0eVNoZWV0DQotCVByb2plY3RUeXBlPSJWaXN1YWwgQysrIg0KLQlWZXJzaW9uPSI4LjAwIg0KLQlOYW1lPSJhbWQ2NCINCi0JT3V0cHV0RGlyZWN0b3J5PSIkKFNvbHV0aW9uRGlyKVxhbWQ2NFwiDQotCUludGVybWVkaWF0ZURpcmVjdG9yeT0iJChTb2x1dGlvbkRpcikkKFBsYXRmb3JtTmFtZSktdGVtcC0kKENvbmZpZ3VyYXRpb25OYW1lKVwkKFByb2plY3ROYW1lKVwiDQotCT4NCi0JPFRvb2wNCi0JCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQlBZGRpdGlvbmFsT3B0aW9ucz0iL1VTRUNMOk1TX09QVEVST04gL0dTLSINCi0JCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfV0lONjQ7X01fWDY0Ig0KLQkvPg0KLQk8VG9vbA0KLQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCS8+DQotCTxVc2VyTWFjcm8NCi0JCU5hbWU9IlB5dGhvbkV4ZSINCi0JCVZhbHVlPSIkKEhPU1RfUFlUSE9OKSINCi0JLz4NCi08L1Zpc3VhbFN0dWRpb1Byb3BlcnR5U2hlZXQ+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qIGIvUEMvVlM5LjAvX3NxbGl0ZTMudmNwcm9qCmluZGV4IGY3MTAwZjEuLjgyYzU3YWUgMTAwNjQ0Ci0tLSBhL1BDL1ZTOS4wL19zcWxpdGUzLnZjcHJvagorKysgYi9QQy9WUzkuMC9fc3FsaXRlMy52Y3Byb2oKQEAgLTU1NSwxMCArNTU1LDYgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL19zc2wudmNwcm9qIGIvUEMvVlM5LjAvX3NzbC52Y3Byb2oKaW5kZXggOTdhYTI5NC4uYjQ3ZGMyNyAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvX3NzbC52Y3Byb2oKKysrIGIvUEMvVlM5LjAvX3NzbC52Y3Byb2oKQEAgLTEsNyArMSw3IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCisJVmVyc2lvbj0iOSwwMCINCiAJTmFtZT0iX3NzbCINCiAJUHJvamVjdEdVSUQ9IntDNkUyMEY4NC0zMjQ3LTRBRDYtQjA1MS1CMDczMjY4RjczQkF9Ig0KIAlSb290TmFtZXNwYWNlPSJfc3NsIg0KQEAgLTU2LDcgKzU2LDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMTE4LDcgKzExOCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTE4MCw3ICsxODAsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWIiDQogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCkBAIC0yNDMsNyArMjQzLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtMzA1LDcgKzMwNSw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYiINCiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KQEAgLTM2OCw3ICszNjgsNyBAQAogCQkJLz4NCiAJCQk8VG9vbA0KIAkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndzMl8zMi5saWIgY3J5cHQzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWIgJChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWIiDQogCQkJCVRhcmdldE1hY2hpbmU9IjE3Ig0KIAkJCS8+DQogCQkJPFRvb2wNCkBAIC00MzEsNyArNDMxLDcgQEAKIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KKwkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJ3czJfMzIubGliIGNyeXB0MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcbGliZWF5MzIubGliICQob3BlbnNzbERpcilcb3V0MzJcc3NsZWF5MzIubGliIg0KIAkJCS8+DQogCQkJPFRvb2wNCiAJCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQpAQCAtNDk0LDcgKzQ5NCw3IEBACiAJCQkvPg0KIAkJCTxUb29sDQogCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCisJCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0id3MyXzMyLmxpYiBjcnlwdDMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYiAkKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYiINCiAJCQkJVGFyZ2V0TWFjaGluZT0iMTciDQogCQkJLz4NCiAJCQk8VG9vbA0KZGlmZiAtLWdpdCBhL1BDL1ZTOC4wL190ZXN0Y2FwaS52Y3Byb2ogYi9QQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBQQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qCnJlbmFtZSB0byBQQy9WUzkuMC9fdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvagppbmRleCA3NmFkMmQ4Li4xNGQ5MTBkIDEwMDY0NAotLS0gYS9QQy9WUzguMC9fdGVzdGNhcGkudmNwcm9qCisrKyBiL1BDL1ZTOS4wL190ZXN0aW1wb3J0bXVsdGlwbGUudmNwcm9qCkBAIC0xLDEwICsxLDEwIEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCiA8VmlzdWFsU3R1ZGlvUHJvamVjdA0KIAlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOC4wMCINCi0JTmFtZT0iX3Rlc3RjYXBpIg0KLQlQcm9qZWN0R1VJRD0iezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0iDQotCVJvb3ROYW1lc3BhY2U9Il90ZXN0Y2FwaSINCisJVmVyc2lvbj0iOS4wMCINCisJTmFtZT0iX3Rlc3RpbXBvcnRtdWx0aXBsZSINCisJUHJvamVjdEdVSUQ9InszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KKwlSb290TmFtZXNwYWNlPSJfdGVzdGltcG9ydG11bHRpcGxlIg0KIAlLZXl3b3JkPSJXaW4zMlByb2oiDQogCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjE5NjYxMyINCiAJPg0KQEAgLTUxMSw3ICs1MTEsNyBAQAogCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KIAkJCT4NCiAJCQk8RmlsZQ0KLQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX3Rlc3RjYXBpbW9kdWxlLmMiDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQk8L0ZpbHRlcj4NCmRpZmYgLS1naXQgYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jIGIvUEMvVlM5LjAva2lsbF9weXRob24uYwppbmRleCBiYjMyM2QzLi42NjZlMWIwIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9raWxsX3B5dGhvbi5jCisrKyBiL1BDL1ZTOS4wL2tpbGxfcHl0aG9uLmMKQEAgLTEwNiw5ICsxMDYsOSBAQAogICAgICAgICAvKgogICAgICAgICAgKiBYWFggVE9ETzogaWYgd2UgcmVhbGx5IHdhbnRlZCB0byBiZSBmYW5jeSwgd2UgY291bGQgY2hlY2sgdGhlIAogICAgICAgICAgKiBtb2R1bGVzIGZvciBhbGwgcHJvY2Vzc2VzIChub3QganVzdCB0aGUgcHl0aG9uW19kXS5leGUgb25lcykKLSAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zM1tfZF0uZGxsKSwKKyAgICAgICAgICogYW5kIHNlZSBpZiBhbnkgb2Ygb3VyIERMTHMgYXJlIGxvYWRlZCAoaS5lLiBweXRob24zNFtfZF0uZGxsKSwKICAgICAgICAgICogYXMgdGhhdCB3b3VsZCBhbHNvIGluaGliaXQgb3VyIGFiaWxpdHkgdG8gcmVidWlsZCB0aGUgc29sdXRpb24uCi0gICAgICAgICAqIE5vdCB3b3J0aCBsb29zaW5nIHNsZWVwIG92ZXIgdGhvdWdoOyBmb3Igbm93LCBhIHNpbXBsZSBjaGVjayAKKyAgICAgICAgICogTm90IHdvcnRoIGxvc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sKICAgICAgICAgICogZm9yIGp1c3QgdGhlIHB5dGhvbiBleGVjdXRhYmxlIHNob3VsZCBiZSBzdWZmaWNpZW50LgogICAgICAgICAgKi8KIApkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcGNidWlsZC5zbG4gYi9QQy9WUzkuMC9wY2J1aWxkLnNsbgppbmRleCA4ZjhjYmI2Li5iYTdmNjljIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9wY2J1aWxkLnNsbgorKysgYi9QQy9WUzkuMC9wY2J1aWxkLnNsbgpAQCAtMjAsMTEgKzIwLDYgQEAKIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KIAlFbmRQcm9qZWN0U2VjdGlvbg0KIEVuZFByb2plY3QNCi1Qcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gInc5eHBvcGVuIiwgInc5eHBvcGVuLnZjcHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQkJezZERTEwNzQ0LUUzOTYtNDBBNS1CNEUyLTFCNjlBQTdDOEQzMX0gPSB7NkRFMTA3NDQtRTM5Ni00MEE1LUI0RTItMUI2OUFBN0M4RDMxfQ0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIm1ha2VfYnVpbGRpbmZvIiwgIm1ha2VfYnVpbGRpbmZvLnZjcHJvaiIsICJ7QzczRjBFQzEtMzU4Qi00MTc3LTk0MEYtMDg0NkFDOEIwNENEfSINCiBFbmRQcm9qZWN0DQogUHJvamVjdCgiezIxNTBFMzMzLThGREMtNDJBMy05NDc0LTFBMzk1NkQ0NkRFOH0iKSA9ICJTb2x1dGlvbiBJdGVtcyIsICJTb2x1dGlvbiBJdGVtcyIsICJ7NTUzRUMzM0UtOTgxNi00OTk2LUE2NjAtNUQ2MTg2QTBCMEIzfSINCkBAIC04Nyw2ICs4MiwxMSBAQAogCQl7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fSA9IHtDRjdBQzNEMS1FMkRGLTQxRDItQkVBNi0xRTI1NTZDREVBMjZ9DQogCUVuZFByb2plY3RTZWN0aW9uDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RpbXBvcnRtdWx0aXBsZSIsICJfdGVzdGltcG9ydG11bHRpcGxlLnZjcHJvaiIsICJ7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfSINCisJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KKwkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KKwlFbmRQcm9qZWN0U2VjdGlvbg0KK0VuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjcHJvaiIsICJ7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfSINCiAJUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KIAkJe0NGN0FDM0QxLUUyREYtNDFEMi1CRUE2LTFFMjU1NkNERUEyNn0gPSB7Q0Y3QUMzRDEtRTJERi00MUQyLUJFQTYtMUUyNTU2Q0RFQTI2fQ0KQEAgLTQyMCw2ICs0MjAsMjIgQEAKIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCiAJCXs2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8eDY0LkJ1aWxkLjAgPSBEZWJ1Z3x4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHxXaW4zMi5CdWlsZC4wID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR0luc3RydW1lbnR8eDY0LkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5QR1VwZGF0ZXxXaW4zMi5CdWlsZC4wID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5BY3RpdmVDZmcgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUEdVcGRhdGV8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQogCQl7NDk0NkVDQUMtMkU2OS00QkY4LUE5MEEtRjUxMzZGNTA5NERGfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCkBAIC02NTEsNiArNjY3LDIyIEBACiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtBMjY5N0JEMy0yOEMxLTRBRUMtOTEwNi04Qjc0ODYzOUZEMTZ9LlJlbGVhc2V8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8eDY0DQogCQl7QTI2OTdCRDMtMjhDMS00QUVDLTkxMDYtOEI3NDg2MzlGRDE2fS5SZWxlYXNlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXswNEYzNzQwMC04ODNDLTQyRDctQUUyOC02Q0Y5OTUzQkY5NzV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7MDRGMzc0MDAtODgzQy00MkQ3LUFFMjgtNkNGOTk1M0JGOTc1fS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJezA0RjM3NDAwLTg4M0MtNDJENy1BRTI4LTZDRjk5NTNCRjk3NX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQogCUVuZEdsb2JhbFNlY3Rpb24NCiAJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24NCiAJCUhpZGVTb2x1dGlvbk5vZGUgPSBGQUxTRQ0KZGlmZiAtLWdpdCBhL1BDL1ZTOS4wL3B5cHJvamVjdC52c3Byb3BzIGIvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMKaW5kZXggZmYzNzU5ZS4uYTkwOTg3NSAxMDA2NDQKLS0tIGEvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMKKysrIGIvUEMvVlM5LjAvcHlwcm9qZWN0LnZzcHJvcHMKQEAgLTM4LDcgKzM4LDcgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJQeURsbE5hbWUiDQotCQlWYWx1ZT0icHl0aG9uMzMiDQorCQlWYWx1ZT0icHl0aG9uMzQiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9IlB5dGhvbkV4ZSINCkBAIC01MCw3ICs1MCw3IEBACiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0ic3FsaXRlM0RpciINCi0JCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNy4xMiINCisJCVZhbHVlPSIkKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuOC4zLjEiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9ImJ6MkRpciINCkBAIC01OCwxMSArNTgsMTEgQEAKIAkvPg0KIAk8VXNlck1hY3JvDQogCQlOYW1lPSJsem1hRGlyIg0KLQkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuMyINCisJCVZhbHVlPSIkKGV4dGVybmFsc0RpcilceHotNS4wLjUiDQogCS8+DQogCTxVc2VyTWFjcm8NCiAJCU5hbWU9Im9wZW5zc2xEaXIiDQotCQlWYWx1ZT0iJChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlIg0KKwkJVmFsdWU9IiQoZXh0ZXJuYWxzRGlyKVxvcGVuc3NsLTEuMC4xZyINCiAJLz4NCiAJPFVzZXJNYWNybw0KIAkJTmFtZT0idGNsdGtEaXIiDQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvcHl0aG9uY29yZS52Y3Byb2ogYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagppbmRleCA5ZmI2M2ZmLi5jZjYwNDcwIDEwMDY0NAotLS0gYS9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagorKysgYi9QQy9WUzkuMC9weXRob25jb3JlLnZjcHJvagpAQCAtMTExOSw3ICsxMTE5LDcgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xvcGVyYXRvci5jIg0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcX29wZXJhdG9yLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCkBAIC0xMTU1LDYgKzExNTUsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE1vZHVsZXNcc3JlX2NvbnN0YW50cy5oIg0KKwkJCQk+DQorCQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cTW9kdWxlc1xzcmVfbGliLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXF9zdGF0LmMiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTI0Miw3NCArMTI1OCw2IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KLQkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcZ3ppby5jIg0KLQkJCQkJPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IlJlbGVhc2V8V2luNjQiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJCU5hbWU9IkRlYnVnfFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjMyIg0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdJbnN0cnVtZW50fFdpbjY0Ig0KLQkJCQkJCT4NCi0JCQkJCQk8VG9vbA0KLQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iX0NSVF9TRUNVUkVfTk9fREVQUkVDQVRFIg0KLQkJCQkJCS8+DQotCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPg0KLQkJCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJCQkJPg0KLQkJCQkJCTxUb29sDQotCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUiDQotCQkJCQkJLz4NCi0JCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24NCi0JCQkJCQlOYW1lPSJQR1VwZGF0ZXxXaW42NCINCi0JCQkJCQk+DQotCQkJCQkJPFRvb2wNCi0JCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9DUlRfU0VDVVJFX05PX0RFUFJFQ0FURSINCi0JCQkJCQkvPg0KLQkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQkJPC9GaWxlPg0KLQkJCQk8RmlsZQ0KIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxNb2R1bGVzXHpsaWJcaW5mYmFjay5jIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpAQCAtMTU4Nyw2ICsxNTM1LDEwIEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXE9iamVjdHNcc2V0b2JqZWN0LmMiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvUEMvVlM5LjAvdzl4cG9wZW4udmNwcm9qIGIvUEMvVlM5LjAvdzl4cG9wZW4udmNwcm9qCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTg1YjAwLi4wMDAwMDAwCi0tLSBhL1BDL1ZTOS4wL3c5eHBvcGVuLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDU3NiArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJXaW5kb3dzLTEyNTIiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iOS4wMCINCi0JTmFtZT0idzl4cG9wZW4iDQotCVByb2plY3RHVUlEPSJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi0JUm9vdE5hbWVzcGFjZT0idzl4cG9wZW4iDQotCVRhcmdldEZyYW1ld29ya1ZlcnNpb249IjEzMTA3MiINCi0JPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiDQotCQkvPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0ieDY0Ig0KLQkJLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxUb29sRmlsZXM+DQotCTwvVG9vbEZpbGVzPg0KLQk8Q29uZmlndXJhdGlvbnM+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIwIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJQmFzaWNSdW50aW1lQ2hlY2tzPSIzIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBTGlua1Rvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmlmZXN0VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWERDTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0JzY01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNGeENvcFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FwcFZlcmlmaWVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQk8L0NvbmZpZ3VyYXRpb24+DQotCQk8Q29uZmlndXJhdGlvbg0KLQkJCU5hbWU9IkRlYnVnfHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5cZGVidWcudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjAiDQotCQkJCUJhc2ljUnVudGltZUNoZWNrcz0iMyINCi0JCQkJUnVudGltZUxpYnJhcnk9IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJSZWxlYXNlfFdpbjMyIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIxIg0KLQkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIuXHB5cHJvamVjdC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjMiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCUlubGluZUZ1bmN0aW9uRXhwYW5zaW9uPSIxIg0KLQkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMCINCi0JCQkJRW5hYmxlRnVuY3Rpb25MZXZlbExpbmtpbmc9InRydWUiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUxpbmtFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iZmFsc2UiDQotCQkJCVN1YlN5c3RlbT0iMSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR0luc3RydW1lbnR8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ2luc3RydW1lbnQudnNwcm9wcyINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iZmFsc2UiDQotCQkJQ2hhcmFjdGVyU2V0PSIyIg0KLQkJCT4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNSURMVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCVN0cmluZ1Bvb2xpbmc9InRydWUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0idHJ1ZSINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuYWdlZFJlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlTGlua0V2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTGlua2VyVG9vbCINCi0JCQkJR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPSJmYWxzZSINCi0JCQkJU3ViU3lzdGVtPSIxIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdJbnN0cnVtZW50fHg2NCINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMSINCi0JCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iLlxweXByb2plY3QudnNwcm9wczsuXHg2NC52c3Byb3BzOy5ccmVsZWFzZS52c3Byb3BzOy5ccGdpbnN0cnVtZW50LnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUEdVcGRhdGV8V2luMzIiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7LlxyZWxlYXNlLnZzcHJvcHM7LlxwZ3VwZGF0ZS52c3Byb3BzIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSINCi0JCQlDaGFyYWN0ZXJTZXQ9IjIiDQotCQkJPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDUHJlQnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0N1c3RvbUJ1aWxkVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYlNlcnZpY2VQcm94eUdlbmVyYXRvclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQUxpbmtUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDRnhDb3BUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Bvc3RCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJQR1VwZGF0ZXx4NjQiDQotCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiDQotCQkJSW5oZXJpdGVkUHJvcGVydHlTaGVldHM9Ii5ccHlwcm9qZWN0LnZzcHJvcHM7Llx4NjQudnNwcm9wczsuXHJlbGVhc2UudnNwcm9wczsuXHBndXBkYXRlLnZzcHJvcHMiDQotCQkJVXNlT2ZNRkM9IjAiDQotCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIg0KLQkJCUNoYXJhY3RlclNldD0iMiINCi0JCQk+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVRhcmdldEVudmlyb25tZW50PSIzIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIyIg0KLQkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSINCi0JCQkJU3RyaW5nUG9vbGluZz0idHJ1ZSINCi0JCQkJUnVudGltZUxpYnJhcnk9IjAiDQotCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkUmVzb3VyY2VDb21waWxlclRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1Jlc291cmNlQ29tcGlsZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249ImZhbHNlIg0KLQkJCQlTdWJTeXN0ZW09IjEiDQotCQkJCUltcG9ydExpYnJhcnk9IiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMTciDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0FMaW5rVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNYRENNYWtlVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiDQotCQkJLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCINCi0JCQkvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIg0KLQkJCS8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiDQotCQkJLz4NCi0JCTwvQ29uZmlndXJhdGlvbj4NCi0JPC9Db25maWd1cmF0aW9ucz4NCi0JPFJlZmVyZW5jZXM+DQotCTwvUmVmZXJlbmNlcz4NCi0JPEZpbGVzPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlNvdXJjZSBGaWxlcyINCi0JCQk+DQotCQkJPEZpbGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxQQ1x3OXhwb3Blbi5jIg0KLQkJCQk+DQotCQkJPC9GaWxlPg0KLQkJPC9GaWx0ZXI+DQotCTwvRmlsZXM+DQotCTxHbG9iYWxzPg0KLQk8L0dsb2JhbHM+DQotPC9WaXN1YWxTdHVkaW9Qcm9qZWN0Pg0KZGlmZiAtLWdpdCBhL1BDL19tc2kuYyBiL1BDL19tc2kuYwppbmRleCAwYjViOTRlLi44NmE1OTQzIDEwMDY0NAotLS0gYS9QQy9fbXNpLmMKKysrIGIvUEMvX21zaS5jCkBAIC01NSw3ICs1NSw3IEBACiAKIHN0YXRpYyBGTkZDSU9QRU4oY2Jfb3BlbikKIHsKLSAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcsIHBtb2RlKTsKKyAgICBpbnQgcmVzdWx0ID0gX29wZW4ocHN6RmlsZSwgb2ZsYWcgfCBPX05PSU5IRVJJVCwgcG1vZGUpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNjMsNyArNjMsNyBAQAogCiBzdGF0aWMgRk5GQ0lSRUFEKGNiX3JlYWQpCiB7Ci0gICAgVUlOVCByZXN1bHQgPSAoVUlOVClfcmVhZChoZiwgbWVtb3J5LCBjYik7CisgICAgVUlOVCByZXN1bHQgPSAoVUlOVClfcmVhZCgoaW50KWhmLCBtZW1vcnksIGNiKTsKICAgICBpZiAocmVzdWx0ICE9IGNiKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTcxLDcgKzcxLDcgQEAKIAogc3RhdGljIEZORkNJV1JJVEUoY2Jfd3JpdGUpCiB7Ci0gICAgVUlOVCByZXN1bHQgPSAoVUlOVClfd3JpdGUoaGYsIG1lbW9yeSwgY2IpOworICAgIFVJTlQgcmVzdWx0ID0gKFVJTlQpX3dyaXRlKChpbnQpaGYsIG1lbW9yeSwgY2IpOwogICAgIGlmIChyZXN1bHQgIT0gY2IpCiAgICAgICAgICplcnIgPSBlcnJubzsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtNzksNyArNzksNyBAQAogCiBzdGF0aWMgRk5GQ0lDTE9TRShjYl9jbG9zZSkKIHsKLSAgICBpbnQgcmVzdWx0ID0gX2Nsb3NlKGhmKTsKKyAgICBpbnQgcmVzdWx0ID0gX2Nsb3NlKChpbnQpaGYpOwogICAgIGlmIChyZXN1bHQgIT0gMCkKICAgICAgICAgKmVyciA9IGVycm5vOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC04Nyw3ICs4Nyw3IEBACiAKIHN0YXRpYyBGTkZDSVNFRUsoY2Jfc2VlaykKIHsKLSAgICBsb25nIHJlc3VsdCA9IChsb25nKV9sc2VlayhoZiwgZGlzdCwgc2Vla3R5cGUpOworICAgIGxvbmcgcmVzdWx0ID0gKGxvbmcpX2xzZWVrKChpbnQpaGYsIGRpc3QsIHNlZWt0eXBlKTsKICAgICBpZiAocmVzdWx0ID09IC0xKQogICAgICAgICAqZXJyID0gZXJybm87CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAgICAgQ2xvc2VIYW5kbGUoaGFuZGxlKTsKIAotICAgIHJldHVybiBfb3Blbihwc3pOYW1lLCBfT19SRE9OTFkgfCBfT19CSU5BUlkpOworICAgIHJldHVybiBfb3Blbihwc3pOYW1lLCBfT19SRE9OTFkgfCBfT19CSU5BUlkgfCBPX05PSU5IRVJJVCk7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCogZmNpY3JlYXRlKFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0KiBhcmdzKQpAQCAtMjQzLDggKzI0MywxMyBAQAogICAgIGZvciAoaT0wOyBpIDwgUHlMaXN0X0dFVF9TSVpFKGZpbGVzKTsgaSsrKSB7CiAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUHlMaXN0X0dFVF9JVEVNKGZpbGVzLCBpKTsKICAgICAgICAgY2hhciAqZmlsZW5hbWUsICpjYWJuYW1lOwotICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoaXRlbSwgInNzIiwgJmZpbGVuYW1lLCAmY2FibmFtZSkpCi0gICAgICAgICAgICBnb3RvIGVycjsKKworICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoaXRlbSwgInNzIiwgJmZpbGVuYW1lLCAmY2FibmFtZSkpIHsKKyAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJGQ0lDcmVhdGUgZXhwZWN0cyBhIGxpc3Qgb2YgdHVwbGVzIGNvbnRhaW5pbmcgdHdvIHN0cmluZ3MiKTsKKyAgICAgICAgICAgIEZDSURlc3Ryb3koaGZjaSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCiAgICAgICAgIGlmICghRkNJQWRkRmlsZShoZmNpLCBmaWxlbmFtZSwgY2FibmFtZSwgRkFMU0UsCiAgICAgICAgICAgICBjYl9nZXRuZXh0Y2FiaW5ldCwgY2Jfc3RhdHVzLCBjYl9nZXRvcGVuaW5mbywKICAgICAgICAgICAgIHRjb21wVFlQRV9NU1pJUCkpCkBAIC0yNjAsNyArMjY1LDExIEBACiAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgIHJldHVybiBQeV9Ob25lOwogZXJyOgotICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLCAiRkNJIGVycm9yICVkIiwgZXJmLmVyZk9wZXIpOyAvKiBYWFggYmV0dGVyIGVycm9yIHR5cGUgKi8KKyAgICBpZihlcmYuZkVycm9yKQorICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwgIkZDSSBlcnJvciAlZCIsIGVyZi5lcmZPcGVyKTsgLyogWFhYIGJldHRlciBlcnJvciB0eXBlICovCisgICAgZWxzZQorICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgIkZDSSBnZW5lcmFsIGVycm9yIik7CisKICAgICBGQ0lEZXN0cm95KGhmY2kpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMTAzMCw0MCArMTAzOSw0MCBAQAogICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lEQk9QRU5fVFJBTlNBQ1QiLCAoaW50KU1TSURCT1BFTl9UUkFOU0FDVCk7CiAgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSURCT1BFTl9QQVRDSEZJTEUiLCAoaW50KU1TSURCT1BFTl9QQVRDSEZJTEUpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSUNPTElORk9fTkFNRVMiLCBNU0lDT0xJTkZPX05BTUVTKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJQ09MSU5GT19UWVBFUyIsIE1TSUNPTElORk9fVFlQRVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSUNPTElORk9fTkFNRVMpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSUNPTElORk9fVFlQRVMpOwogCi0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9TRUVLIiwgTVNJTU9ESUZZX1NFRUspOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfUkVGUkVTSCIsIE1TSU1PRElGWV9SRUZSRVNIKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0lOU0VSVCIsIE1TSU1PRElGWV9JTlNFUlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJNU0lNT0RJRllfVVBEQVRFIiwgTVNJTU9ESUZZX1VQREFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9BU1NJR04iLCBNU0lNT0RJRllfQVNTSUdOKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1JFUExBQ0UiLCBNU0lNT0RJRllfUkVQTEFDRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9NRVJHRSIsIE1TSU1PRElGWV9NRVJHRSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9ERUxFVEUiLCBNU0lNT0RJRllfREVMRVRFKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX0lOU0VSVF9URU1QT1JBUlkiLCBNU0lNT0RJRllfSU5TRVJUX1RFTVBPUkFSWSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURSIsIE1TSU1PRElGWV9WQUxJREFURSk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIk1TSU1PRElGWV9WQUxJREFURV9ORVciLCBNU0lNT0RJRllfVkFMSURBVEVfTkVXKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEIiwgTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiTVNJTU9ESUZZX1ZBTElEQVRFX0RFTEVURSIsIE1TSU1PRElGWV9WQUxJREFURV9ERUxFVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9TRUVLKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfUkVGUkVTSCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0lOU0VSVCk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1VQREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0FTU0lHTik7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1JFUExBQ0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9NRVJHRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0RFTEVURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX0lOU0VSVF9URU1QT1JBUlkpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIE1TSU1PRElGWV9WQUxJREFURSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFX05FVyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgTVNJTU9ESUZZX1ZBTElEQVRFX0ZJRUxEKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBNU0lNT0RJRllfVkFMSURBVEVfREVMRVRFKTsKIAotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ09ERVBBR0UiLCBQSURfQ09ERVBBR0UpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfVElUTEUiLCBQSURfVElUTEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfU1VCSkVDVCIsIFBJRF9TVUJKRUNUKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0FVVEhPUiIsIFBJRF9BVVRIT1IpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfS0VZV09SRFMiLCBQSURfS0VZV09SRFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ09NTUVOVFMiLCBQSURfQ09NTUVOVFMpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfVEVNUExBVEUiLCBQSURfVEVNUExBVEUpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVEFVVEhPUiIsIFBJRF9MQVNUQVVUSE9SKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1JFVk5VTUJFUiIsIFBJRF9SRVZOVU1CRVIpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfTEFTVFBSSU5URUQiLCBQSURfTEFTVFBSSU5URUQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQ1JFQVRFX0RUTSIsIFBJRF9DUkVBVEVfRFRNKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0xBU1RTQVZFX0RUTSIsIFBJRF9MQVNUU0FWRV9EVE0pOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfUEFHRUNPVU5UIiwgUElEX1BBR0VDT1VOVCk7Ci0gICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlBJRF9XT1JEQ09VTlQiLCBQSURfV09SRENPVU5UKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX0NIQVJDT1VOVCIsIFBJRF9DSEFSQ09VTlQpOwotICAgIFB5TW9kdWxlX0FkZEludENvbnN0YW50KG0sICJQSURfQVBQTkFNRSIsIFBJRF9BUFBOQU1FKTsKLSAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUElEX1NFQ1VSSVRZIiwgUElEX1NFQ1VSSVRZKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ09ERVBBR0UpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9USVRMRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1NVQkpFQ1QpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9BVVRIT1IpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9LRVlXT1JEUyk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX0NPTU1FTlRTKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfVEVNUExBVEUpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9MQVNUQVVUSE9SKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfUkVWTlVNQkVSKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfTEFTVFBSSU5URUQpOworICAgIFB5TW9kdWxlX0FkZEludE1hY3JvKG0sIFBJRF9DUkVBVEVfRFRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfTEFTVFNBVkVfRFRNKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfUEFHRUNPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfV09SRENPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQ0hBUkNPVU5UKTsKKyAgICBQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQSURfQVBQTkFNRSk7CisgICAgUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUElEX1NFQ1VSSVRZKTsKIAogICAgIE1TSUVycm9yID0gUHlFcnJfTmV3RXhjZXB0aW9uICgiX21zaS5NU0lFcnJvciIsIE5VTEwsIE5VTEwpOwogICAgIGlmICghTVNJRXJyb3IpCmRpZmYgLS1naXQgYS9QQy9iZGlzdF93aW5pbnN0L2luc3RhbGwuYyBiL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCmluZGV4IGMxMWQ0NWQuLmY0Y2YzNDggMTAwNjQ0Ci0tLSBhL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCisrKyBiL1BDL2JkaXN0X3dpbmluc3QvaW5zdGFsbC5jCkBAIC03NDMsNyArNzQzLDcgQEAKICAgICBpZiAocGF0aG5hbWUgPT0gTlVMTCB8fCBwYXRobmFtZVswXSA9PSAnXDAnKQogICAgICAgICByZXR1cm4gMjsKIAotICAgIGZoID0gb3BlbihwYXRobmFtZSwgX09fUkRPTkxZKTsKKyAgICBmaCA9IG9wZW4ocGF0aG5hbWUsIF9PX1JET05MWSB8IE9fTk9JTkhFUklUKTsKICAgICBpZiAoLTEgPT0gZmgpIHsKICAgICAgICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgb3BlbiBwb3N0aW5zdGFsbC1zY3JpcHQgJXNcbiIsCiAgICAgICAgICAgICBwYXRobmFtZSk7CkBAIC0xNzc0LDYgKzE3NzQsMTYgQEAKIAogICAgIHNwcmludGYoYnVmZmVyLCAiJXNcXCVzLXdpbmluc3QubG9nIiwgZGlyLCBtZXRhX25hbWUpOwogICAgIGxvZ2ZpbGUgPSBmb3BlbihidWZmZXIsICJhIik7CisgICAgaWYgKCFsb2dmaWxlKSB7CisgICAgICAgIGNoYXIgZXJyb3JbMTAyNF07CisKKyAgICAgICAgc3ByaW50ZihlcnJvciwgIkNhbid0IGNyZWF0ZSBcIiVzXCIgKCVzKS5cblxuIgorICAgICAgICAgICAgICAgICJUcnkgdG8gZXhlY3V0ZSB0aGUgaW5zdGFsbGVyIGFzIGFkbWluaXN0cmF0b3IuIiwKKyAgICAgICAgICAgICAgICBidWZmZXIsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIE1lc3NhZ2VCb3goR2V0Rm9jdXMoKSwgZXJyb3IsIE5VTEwsIE1CX09LIHwgTUJfSUNPTlNUT1ApOworICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgfQorCiAgICAgdGltZSgmbHRpbWUpOwogICAgIG5vdyA9IGxvY2FsdGltZSgmbHRpbWUpOwogICAgIHN0cmZ0aW1lKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksCkBAIC0xOTMxLDIxICsxOTQxLDIxIEBACiAvKgogICogVGhlIHNjaGVtZSB3ZSBoYXZlIHRvIHVzZSBkZXBlbmRzIG9uIHRoZSBQeXRob24gdmVyc2lvbi4uLgogIGlmIHN5cy52ZXJzaW9uIDwgIjIuMiI6Ci0gV0lORE9XU19TQ0hFTUUgPSB7Ci0gJ3B1cmVsaWInOiAnJGJhc2UnLAotICdwbGF0bGliJzogJyRiYXNlJywKLSAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAotICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAotICdkYXRhJyAgIDogJyRiYXNlJywKLSB9CisgICAgV0lORE9XU19TQ0hFTUUgPSB7CisgICAgJ3B1cmVsaWInOiAnJGJhc2UnLAorICAgICdwbGF0bGliJzogJyRiYXNlJywKKyAgICAnaGVhZGVycyc6ICckYmFzZS9JbmNsdWRlLyRkaXN0X25hbWUnLAorICAgICdzY3JpcHRzJzogJyRiYXNlL1NjcmlwdHMnLAorICAgICdkYXRhJyAgIDogJyRiYXNlJywKKyAgICB9CiAgZWxzZToKLSBXSU5ET1dTX1NDSEVNRSA9IHsKLSAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCi0gJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAotICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCi0gJ3NjcmlwdHMnOiAnJGJhc2UvU2NyaXB0cycsCi0gJ2RhdGEnICAgOiAnJGJhc2UnLAotIH0KKyAgICBXSU5ET1dTX1NDSEVNRSA9IHsKKyAgICAncHVyZWxpYic6ICckYmFzZS9MaWIvc2l0ZS1wYWNrYWdlcycsCisgICAgJ3BsYXRsaWInOiAnJGJhc2UvTGliL3NpdGUtcGFja2FnZXMnLAorICAgICdoZWFkZXJzJzogJyRiYXNlL0luY2x1ZGUvJGRpc3RfbmFtZScsCisgICAgJ3NjcmlwdHMnOiAnJGJhc2UvU2NyaXB0cycsCisgICAgJ2RhdGEnICAgOiAnJGJhc2UnLAorICAgIH0KICovCiAgICAgICAgICAgICBzY2hlbWUgPSBHZXRTY2hlbWUocHlfbWFqb3IsIHB5X21pbm9yKTsKICAgICAgICAgICAgIC8qIFJ1biB0aGUgcHJlLWluc3RhbGwgc2NyaXB0LiAqLwpkaWZmIC0tZ2l0IGEvUEMvY29uZmlnLmMgYi9QQy9jb25maWcuYwppbmRleCA1N2I1MDczLi43MmM5MzgxIDEwMDY0NAotLS0gYS9QQy9jb25maWcuYworKysgYi9QQy9jb25maWcuYwpAQCAtMTMsMTEgKzEzLDEyIEBACiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9jbWF0aCh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X2Vycm5vKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZmF1bHRoYW5kbGVyKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3RyYWNlbWFsbG9jKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfZ2Modm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9tYXRoKHZvaWQpOwogZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX21kNSh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X250KHZvaWQpOwotZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfb3BlcmF0b3Iodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3BlcmF0b3Iodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9zaWduYWwodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc2hhMSh2b2lkKTsKIGV4dGVybiBQeU9iamVjdCogUHlJbml0X19zaGEyNTYodm9pZCk7CkBAIC02NCw2ICs2NSw4IEBACiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9hdGV4aXQodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIF9QeVdhcm5pbmdzX0luaXQodm9pZCk7CiBleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fc3RyaW5nKHZvaWQpOworZXh0ZXJuIFB5T2JqZWN0KiBQeUluaXRfX3N0YXQodm9pZCk7CitleHRlcm4gUHlPYmplY3QqIFB5SW5pdF9fb3Bjb2RlKHZvaWQpOwogCiAvKiB0b29scy9mcmVlemUvbWFrZWNvbmZpZy5weSBtYXJrZXIgZm9yIGFkZGl0aW9uYWwgImV4dGVybiIgKi8KIC8qIC0tIEFERE1PRFVMRSBNQVJLRVIgMSAtLSAqLwpAQCAtODcsNyArOTAsNyBAQAogICAgIHsiZ2MiLCBQeUluaXRfZ2N9LAogICAgIHsibWF0aCIsIFB5SW5pdF9tYXRofSwKICAgICB7Im50IiwgUHlJbml0X250fSwgLyogVXNlIHRoZSBOVCBvcyBmdW5jdGlvbnMsIG5vdCBwb3NpeCAqLwotICAgIHsib3BlcmF0b3IiLCBQeUluaXRfb3BlcmF0b3J9LAorICAgIHsiX29wZXJhdG9yIiwgUHlJbml0X19vcGVyYXRvcn0sCiAgICAgeyJzaWduYWwiLCBQeUluaXRfc2lnbmFsfSwKICAgICB7Il9tZDUiLCBQeUluaXRfX21kNX0sCiAgICAgeyJfc2hhMSIsIFB5SW5pdF9fc2hhMX0sCkBAIC0xMDEsNiArMTA0LDcgQEAKICAgICB7Im1zdmNydCIsIFB5SW5pdF9tc3ZjcnR9LAogICAgIHsiX2xvY2FsZSIsIFB5SW5pdF9fbG9jYWxlfSwKICNlbmRpZgorICAgIHsiX3RyYWNlbWFsbG9jIiwgUHlJbml0X190cmFjZW1hbGxvY30sCiAgICAgLyogWFhYIFNob3VsZCBfd2luYXBpIGdvIGluIGEgV0lOMzIgYmxvY2s/ICBub3QgV0lONjQ/ICovCiAgICAgeyJfd2luYXBpIiwgUHlJbml0X193aW5hcGl9LAogCkBAIC0xNTQsNiArMTU4LDggQEAKICAgICB7Il9pbyIsIFB5SW5pdF9faW99LAogICAgIHsiX3BpY2tsZSIsIFB5SW5pdF9fcGlja2xlfSwKICAgICB7ImF0ZXhpdCIsIFB5SW5pdF9hdGV4aXR9LAorICAgIHsiX3N0YXQiLCBQeUluaXRfX3N0YXR9LAorICAgIHsiX29wY29kZSIsIFB5SW5pdF9fb3Bjb2RlfSwKIAogICAgIC8qIFNlbnRpbmVsICovCiAgICAgezAsIDB9CmRpZmYgLS1naXQgYS9QQy9leGFtcGxlX250L2V4YW1wbGUuYyBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjlkMTFiLi4wMDAwMDAwCi0tLSBhL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotI2luY2x1ZGUgIlB5dGhvbi5oIgotCi1zdGF0aWMgUHlPYmplY3QgKgotZXhfZm9vKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKLXsKLSAgICBwcmludGYoIkhlbGxvLCB3b3JsZFxuIik7Ci0gICAgUHlfSU5DUkVGKFB5X05vbmUpOwotICAgIHJldHVybiBQeV9Ob25lOwotfQotCi1zdGF0aWMgUHlNZXRob2REZWYgZXhhbXBsZV9tZXRob2RzW10gPSB7Ci0gICAgeyJmb28iLCBleF9mb28sIE1FVEhfVkFSQVJHUywgImZvbygpIGRvYyBzdHJpbmcifSwKLSAgICB7TlVMTCwgTlVMTH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgUHlNb2R1bGVEZWYgZXhhbXBsZW1vZHVsZSA9IHsKLSAgICBQeU1vZHVsZURlZl9IRUFEX0lOSVQsCi0gICAgImV4YW1wbGUiLAotICAgICJleGFtcGxlIG1vZHVsZSBkb2Mgc3RyaW5nIiwKLSAgICAtMSwKLSAgICBleGFtcGxlX21ldGhvZHMsCi0gICAgTlVMTCwKLSAgICBOVUxMLAotICAgIE5VTEwsCi0gICAgTlVMTAotfTsKLQotUHlNT0RJTklUX0ZVTkMKLVB5SW5pdF9leGFtcGxlKHZvaWQpCi17Ci0gICAgcmV0dXJuIFB5TW9kdWxlX0NyZWF0ZSgmZXhhbXBsZW1vZHVsZSk7Ci19CmRpZmYgLS1naXQgYS9QQy9leGFtcGxlX250L2V4YW1wbGUuc2xuIGIvUEMvZXhhbXBsZV9udC9leGFtcGxlLnNsbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDhhMzExOS4uMDAwMDAwMAotLS0gYS9QQy9leGFtcGxlX250L2V4YW1wbGUuc2xuCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gU29sdXRpb24gRmlsZSwgRm9ybWF0IFZlcnNpb24gOC4wMA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiZXhhbXBsZSIsICJleGFtcGxlLnZjcHJvaiIsICJ7QTA2MDhENkYtODRFRC00NEFFLUEyQTYtQTNDQzdGNEE0MDMwfSINCi0JUHJvamVjdFNlY3Rpb24oUHJvamVjdERlcGVuZGVuY2llcykgPSBwb3N0UHJvamVjdA0KLQlFbmRQcm9qZWN0U2VjdGlvbg0KLUVuZFByb2plY3QNCi1HbG9iYWwNCi0JR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb24pID0gcHJlU29sdXRpb24NCi0JCURlYnVnID0gRGVidWcNCi0JCVJlbGVhc2UgPSBSZWxlYXNlDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihQcm9qZWN0Q29uZmlndXJhdGlvbikgPSBwb3N0U29sdXRpb24NCi0JCXtBMDYwOEQ2Ri04NEVELTQ0QUUtQTJBNi1BM0NDN0Y0QTQwMzB9LkRlYnVnLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQotCQl7QTA2MDhENkYtODRFRC00NEFFLUEyQTYtQTNDQzdGNEE0MDMwfS5EZWJ1Zy5CdWlsZC4wID0gRGVidWd8V2luMzINCi0JCXtBMDYwOEQ2Ri04NEVELTQ0QUUtQTJBNi1BM0NDN0Y0QTQwMzB9LlJlbGVhc2UuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0EwNjA4RDZGLTg0RUQtNDRBRS1BMkE2LUEzQ0M3RjRBNDAzMH0uUmVsZWFzZS5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotCUdsb2JhbFNlY3Rpb24oRXh0ZW5zaWJpbGl0eUdsb2JhbHMpID0gcG9zdFNvbHV0aW9uDQotCUVuZEdsb2JhbFNlY3Rpb24NCi0JR2xvYmFsU2VjdGlvbihFeHRlbnNpYmlsaXR5QWRkSW5zKSA9IHBvc3RTb2x1dGlvbg0KLQlFbmRHbG9iYWxTZWN0aW9uDQotRW5kR2xvYmFsDQpkaWZmIC0tZ2l0IGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvaiBiL1BDL2V4YW1wbGVfbnQvZXhhbXBsZS52Y3Byb2oKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiYTAwYjYuLjAwMDAwMDAKLS0tIGEvUEMvZXhhbXBsZV9udC9leGFtcGxlLnZjcHJvagorKysgL2Rldi9udWxsCkBAIC0xLDE4OSArMCwwIEBACi08P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ3aW5kb3dzLTEyNTAiPz4NCi08VmlzdWFsU3R1ZGlvUHJvamVjdA0KLQlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyINCi0JVmVyc2lvbj0iNy4xMCINCi0JTmFtZT0iZXhhbXBsZSINCi0JU2NjUHJvamVjdE5hbWU9IiINCi0JU2NjTG9jYWxQYXRoPSIiPg0KLQk8UGxhdGZvcm1zPg0KLQkJPFBsYXRmb3JtDQotCQkJTmFtZT0iV2luMzIiLz4NCi0JPC9QbGF0Zm9ybXM+DQotCTxDb25maWd1cmF0aW9ucz4NCi0JCTxDb25maWd1cmF0aW9uDQotCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cUmVsZWFzZSINCi0JCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cUmVsZWFzZSINCi0JCQlDb25maWd1cmF0aW9uVHlwZT0iMiINCi0JCQlVc2VPZk1GQz0iMCINCi0JCQlBVExNaW5pbWl6ZXNDUnVuVGltZUxpYnJhcnlVc2FnZT0iRkFMU0UiPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiDQotCQkJCU9wdGltaXphdGlvbj0iMiINCi0JCQkJSW5saW5lRnVuY3Rpb25FeHBhbnNpb249IjEiDQotCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uXEluY2x1ZGUsLi5cUEMiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1MiDQotCQkJCVN0cmluZ1Bvb2xpbmc9IlRSVUUiDQotCQkJCVJ1bnRpbWVMaWJyYXJ5PSIyIg0KLQkJCQlFbmFibGVGdW5jdGlvbkxldmVsTGlua2luZz0iVFJVRSINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlxSZWxlYXNlL2V4YW1wbGUucGNoIg0KLQkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cUmVsZWFzZS8iDQotCQkJCU9iamVjdEZpbGU9Ii5cUmVsZWFzZS8iDQotCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXFJlbGVhc2UvIg0KLQkJCQlXYXJuaW5nTGV2ZWw9IjMiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJQ29tcGlsZUFzPSIwIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0xpbmtlclRvb2wiDQotCQkJCUFkZGl0aW9uYWxPcHRpb25zPSIvZXhwb3J0OmluaXRleGFtcGxlIg0KLQkJCQlBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPSJvZGJjMzIubGliIG9kYmNjcDMyLmxpYiBweXRob24zMy5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cUmVsZWFzZS9leGFtcGxlLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9Ii4uXFBDYnVpbGQiDQotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIiDQotCQkJCVByb2dyYW1EYXRhYmFzZUZpbGU9Ii5cUmVsZWFzZS9leGFtcGxlLnBkYiINCi0JCQkJU3ViU3lzdGVtPSIyIg0KLQkJCQlJbXBvcnRMaWJyYXJ5PSIuXFJlbGVhc2UvZXhhbXBsZS5saWIiDQotCQkJCVRhcmdldE1hY2hpbmU9IjEiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ01JRExUb29sIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iTkRFQlVHIg0KLQkJCQlNa1R5cExpYkNvbXBhdGlibGU9IlRSVUUiDQotCQkJCVN1cHByZXNzU3RhcnR1cEJhbm5lcj0iVFJVRSINCi0JCQkJVGFyZ2V0RW52aXJvbm1lbnQ9IjEiDQotCQkJCVR5cGVMaWJyYXJ5TmFtZT0iLlxSZWxlYXNlL2V4YW1wbGUudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQkJPENvbmZpZ3VyYXRpb24NCi0JCQlOYW1lPSJEZWJ1Z3xXaW4zMiINCi0JCQlPdXRwdXREaXJlY3Rvcnk9Ii5cRGVidWciDQotCQkJSW50ZXJtZWRpYXRlRGlyZWN0b3J5PSIuXERlYnVnIg0KLQkJCUNvbmZpZ3VyYXRpb25UeXBlPSIyIg0KLQkJCVVzZU9mTUZDPSIwIg0KLQkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJGQUxTRSI+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJT3B0aW1pemF0aW9uPSIwIg0KLQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLlxJbmNsdWRlLC4uXFBDIg0KLQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iV0lOMzI7X0RFQlVHO19XSU5ET1dTIg0KLQkJCQlSdW50aW1lTGlicmFyeT0iMyINCi0JCQkJVXNlUHJlY29tcGlsZWRIZWFkZXI9IjIiDQotCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlxEZWJ1Zy9leGFtcGxlLnBjaCINCi0JCQkJQXNzZW1ibGVyTGlzdGluZ0xvY2F0aW9uPSIuXERlYnVnLyINCi0JCQkJT2JqZWN0RmlsZT0iLlxEZWJ1Zy8iDQotCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXERlYnVnLyINCi0JCQkJV2FybmluZ0xldmVsPSIzIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiDQotCQkJCUNvbXBpbGVBcz0iMCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNMaW5rZXJUb29sIg0KLQkJCQlBZGRpdGlvbmFsT3B0aW9ucz0iL2V4cG9ydDppbml0ZXhhbXBsZSINCi0JCQkJQWRkaXRpb25hbERlcGVuZGVuY2llcz0ib2RiYzMyLmxpYiBvZGJjY3AzMi5saWIgcHl0aG9uMzNfZC5saWIiDQotCQkJCU91dHB1dEZpbGU9Ii5cRGVidWcvZXhhbXBsZV9kLnB5ZCINCi0JCQkJTGlua0luY3JlbWVudGFsPSIxIg0KLQkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9IlRSVUUiDQotCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9Ii4uXFBDYnVpbGQiDQotCQkJCU1vZHVsZURlZmluaXRpb25GaWxlPSIiDQotCQkJCUdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj0iVFJVRSINCi0JCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlxEZWJ1Zy9leGFtcGxlX2QucGRiIg0KLQkJCQlTdWJTeXN0ZW09IjIiDQotCQkJCUltcG9ydExpYnJhcnk9Ii5cRGVidWcvZXhhbXBsZV9kLmxpYiINCi0JCQkJVGFyZ2V0TWFjaGluZT0iMSIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDTUlETFRvb2wiDQotCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJfREVCVUciDQotCQkJCU1rVHlwTGliQ29tcGF0aWJsZT0iVFJVRSINCi0JCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJUUlVFIg0KLQkJCQlUYXJnZXRFbnZpcm9ubWVudD0iMSINCi0JCQkJVHlwZUxpYnJhcnlOYW1lPSIuXERlYnVnL2V4YW1wbGUudGxiIg0KLQkJCQlIZWFkZXJGaWxlTmFtZT0iIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNSZXNvdXJjZUNvbXBpbGVyVG9vbCINCi0JCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyINCi0JCQkJQ3VsdHVyZT0iMTAzMyIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIvPg0KLQkJCTxUb29sDQotCQkJCU5hbWU9IlZDWE1MRGF0YUdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIi8+DQotCQkJPFRvb2wNCi0JCQkJTmFtZT0iVkNNYW5hZ2VkV3JhcHBlckdlbmVyYXRvclRvb2wiLz4NCi0JCQk8VG9vbA0KLQkJCQlOYW1lPSJWQ0F1eGlsaWFyeU1hbmFnZWRXcmFwcGVyR2VuZXJhdG9yVG9vbCIvPg0KLQkJPC9Db25maWd1cmF0aW9uPg0KLQk8L0NvbmZpZ3VyYXRpb25zPg0KLQk8UmVmZXJlbmNlcz4NCi0JPC9SZWZlcmVuY2VzPg0KLQk8RmlsZXM+DQotCQk8RmlsdGVyDQotCQkJTmFtZT0iU291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iY3BwO2M7Y3h4O3JjO2RlZjtyO29kbDtocGo7YmF0O2ZvcjtmOTAiPg0KLQkJCTxGaWxlDQotCQkJCVJlbGF0aXZlUGF0aD0iZXhhbXBsZS5jIj4NCi0JCQkJPEZpbGVDb25maWd1cmF0aW9uDQotCQkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIj4NCi0JCQkJCTxUb29sDQotCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCINCi0JCQkJCQlPcHRpbWl6YXRpb249IjIiDQotCQkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIg0KLQkJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJXSU4zMjtOREVCVUc7X1dJTkRPV1M7JChOb0luaGVyaXQpIi8+DQotCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+DQotCQkJCTxGaWxlQ29uZmlndXJhdGlvbg0KLQkJCQkJTmFtZT0iRGVidWd8V2luMzIiPg0KLQkJCQkJPFRvb2wNCi0JCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIg0KLQkJCQkJCU9wdGltaXphdGlvbj0iMCINCi0JCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiDQotCQkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IldJTjMyO19ERUJVRztfV0lORE9XUzskKE5vSW5oZXJpdCkiLz4NCi0JCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4NCi0JCQk8L0ZpbGU+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWx0ZXINCi0JCQlOYW1lPSJIZWFkZXIgRmlsZXMiDQotCQkJRmlsdGVyPSJoO2hwcDtoeHg7aG07aW5sO2ZpO2ZkIj4NCi0JCTwvRmlsdGVyPg0KLQkJPEZpbHRlcg0KLQkJCU5hbWU9IlJlc291cmNlIEZpbGVzIg0KLQkJCUZpbHRlcj0iaWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO2NudDtydGY7Z2lmO2pwZztqcGVnO2pwZSI+DQotCQk8L0ZpbHRlcj4NCi0JCTxGaWxlDQotCQkJUmVsYXRpdmVQYXRoPSJyZWFkbWUudHh0Ij4NCi0JCTwvRmlsZT4NCi0JPC9GaWxlcz4NCi0JPEdsb2JhbHM+DQotCTwvR2xvYmFscz4NCi08L1Zpc3VhbFN0dWRpb1Byb2plY3Q+DQpkaWZmIC0tZ2l0IGEvUEMvZXhhbXBsZV9udC9yZWFkbWUudHh0IGIvUEMvZXhhbXBsZV9udC9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiODM4ODhjLi4wMDAwMDAwCi0tLSBhL1BDL2V4YW1wbGVfbnQvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE4MyArMCwwIEBACi1FeGFtcGxlIFB5dGhvbiBleHRlbnNpb24gZm9yIFdpbmRvd3MgTlQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIGRpcmVjdG9yeSBjb250YWlucyBldmVyeXRoaW5nIG5lZWRlZCAoZXhjZXB0IGZvciB0aGUgUHl0aG9uCi1kaXN0cmlidXRpb24hKSB0byBidWlsZCBhIFB5dGhvbiBleHRlbnNpb24gbW9kdWxlIHVzaW5nIE1pY3Jvc29mdCBWQysrLgotTm90aWNlIHRoYXQgeW91IG5lZWQgdG8gdXNlIHRoZSBzYW1lIGNvbXBpbGVyIHZlcnNpb24gdGhhdCB3YXMgdXNlZCB0byBidWlsZCAKLVB5dGhvbiBpdHNlbGYuCi0KLVRoZSBzaW1wbGVzdCB3YXkgdG8gYnVpbGQgdGhpcyBleGFtcGxlIGlzIHRvIHVzZSB0aGUgZGlzdHV0aWxzIHNjcmlwdAotJ3NldHVwLnB5Jy4gIFRvIGRvIHRoaXMsIHNpbXBseSBleGVjdXRlOgotCi0gICUgcHl0aG9uIHNldHVwLnB5IGluc3RhbGwKLQotYWZ0ZXIgZXZlcnl0aGluZyBidWlsZHMgYW5kIGluc3RhbGxzLCB5b3UgY2FuIHRlc3QgaXQ6Ci0KLSAgJSBweXRob24gLWMgImltcG9ydCBleGFtcGxlOyBleGFtcGxlLmZvbygpIgotICBIZWxsbywgd29ybGQKLQotU2VlIHNldHVwLnB5IGZvciBtb3JlIGRldGFpbHMuICBhbHRlcm5hdGl2ZWx5LCBzZWUgYmVsb3cgZm9yIGluc3RydWN0aW9ucyBvbiAKLWhvdyB0byBidWlsZCBpbnNpZGUgdGhlIFZpc3VhbCBTdHVkaW8gZW52aXJvbm1lbnQuCi0KLVZpc3VhbCBTdHVkaW8gQnVpbGQgSW5zdHJ1Y3Rpb25zCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGVzZSBhcmUgaW5zdHJ1Y3Rpb25zIGhvdyB0byBidWlsZCBhbiBleHRlbnNpb24gdXNpbmcgVmlzdWFsIEMrKy4gIFRoZQotaW5zdHJ1Y3Rpb25zIGFuZCBwcm9qZWN0IGZpbGVzIGhhdmUgbm90IGJlZW4gdXBkYXRlZCB0byB0aGUgbGF0ZXN0IFZDCi12ZXJzaW9uLiAgSW4gZ2VuZXJhbCwgaXQgaXMgcmVjb21tZW5kZWQgeW91IHVzZSB0aGUgJ3NldHVwLnB5JyBpbnN0cnVjdGlvbnMKLWFib3ZlLgotCi1JdCBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBWQysrIDcuMSBvbiBQeXRob24gMi40LiAgWW91IGNhbiBhbHNvIHVzZSBlYXJsaWVyIAotdmVyc2lvbnMgb2YgVkMgdG8gYnVpbGQgUHl0aG9uIGV4dGVuc2lvbnMsIGJ1dCB0aGUgc2FtcGxlIFZDIHByb2plY3QgZmlsZSAKLShleGFtcGxlLmRzdyBpbiB0aGlzIGRpcmVjdG9yeSkgaXMgaW4gVkMgNy4xIGZvcm1hdC4KLQotQ09QWSBUSElTIERJUkVDVE9SWSEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UaGlzICJleGFtcGxlX250IiBkaXJlY3RvcnkgaXMgYSBzdWJkaXJlY3Rvcnkgb2YgdGhlIFBDIGRpcmVjdG9yeSwgaW4gb3JkZXIKLXRvIGtlZXAgYWxsIHRoZSBQQy1zcGVjaWZpYyBmaWxlcyB1bmRlciB0aGUgc2FtZSBkaXJlY3RvcnkuICBIb3dldmVyLCB0aGUKLWV4YW1wbGVfbnQgZGlyZWN0b3J5IGNhbid0IGFjdHVhbGx5IGJlIHVzZWQgZnJvbSB0aGlzIGxvY2F0aW9uLiAgWW91IGZpcnN0Ci1uZWVkIHRvIGNvcHkgb3IgbW92ZSBpdCB1cCBvbmUgbGV2ZWwsIHNvIHRoYXQgZXhhbXBsZV9udCBpcyBhIGRpcmVjdAotc2libGluZyBvZiB0aGUgUENcIGFuZCBJbmNsdWRlXCBkaXJlY3Rvcmllcy4gIERvIGFsbCB5b3VyIHdvcmsgZnJvbSB3aXRoaW4KLXRoaXMgbmV3IGxvY2F0aW9uIC0tIHNvcnJ5LCBidXQgeW91J2xsIGJlIHNvcnJ5IGlmIHlvdSBkb24ndC4KLQotT1BFTiBUSEUgUFJPSkVDVAotLS0tLS0tLS0tLS0tLS0tLQotRnJvbSBWQyA3LjEsIHVzZSB0aGUKLSAgICBGaWxlIC0+IE9wZW4gU29sdXRpb24uLi4KLWRpYWxvZyAoKm5vdCogdGhlICJGaWxlIC0+IE9wZW4uLi4iIGRpYWxvZyEpLiAgTmF2aWdhdGUgdG8gYW5kIHNlbGVjdCB0aGUKLWZpbGUgImV4YW1wbGUuc2xuIiwgaW4gdGhlICpjb3B5KiBvZiB0aGUgZXhhbXBsZV9udCBkaXJlY3RvcnkgeW91IG1hZGUKLWFib3ZlLgotQ2xpY2sgT3Blbi4KLQotQlVJTEQgVEhFIEVYQU1QTEUgRExMCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUluIG9yZGVyIHRvIGNoZWNrIHRoYXQgZXZlcnl0aGluZyBpcyBzZXQgdXAgcmlnaHQsIHRyeSBidWlsZGluZzoKLQotMS4gU2VsZWN0IGEgY29uZmlndXJhdGlvbi4gIFRoaXMgc3RlcCBpcyBvcHRpb25hbC4gIERvCi0gICAgICAgQnVpbGQgLT4gQ29uZmlndXJhdGlvbiBNYW5hZ2VyLi4uIC0+IEFjdGl2ZSBTb2x1dGlvbiBDb25maWd1cmF0aW9uCi0gICBhbmQgc2VsZWN0IGVpdGhlciAiUmVsZWFzZSIgb3IgIkRlYnVnIi4KLSAgIElmIHlvdSBza2lwIHRoaXMgc3RlcCwgeW91J2xsIHVzZSB0aGUgRGVidWcgY29uZmlndXJhdGlvbiBieSBkZWZhdWx0LgotCi0yLiBCdWlsZCB0aGUgRExMLiAgRG8KLSAgICAgICBCdWlsZCAtPiBCdWlsZCBTb2x1dGlvbgotICAgVGhpcyBjcmVhdGVzIGFsbCBpbnRlcm1lZGlhdGUgYW5kIHJlc3VsdCBmaWxlcyBpbiBhIHN1YmRpcmVjdG9yeSB3aGljaAotICAgaXMgY2FsbGVkIGVpdGhlciBEZWJ1ZyBvciBSZWxlYXNlLCBkZXBlbmRpbmcgb24gd2hpY2ggY29uZmlndXJhdGlvbiB5b3UKLSAgIHBpY2tlZCBpbiB0aGUgcHJlY2VkaW5nIHN0ZXAuCi0KLVRFU1RJTkcgVEhFIERFQlVHLU1PREUgRExMCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotT25jZSB0aGUgRGVidWcgYnVpbGQgaGFzIHN1Y2NlZWRlZCwgYnJpbmcgdXAgYSBET1MgYm94LCBhbmQgY2QgdG8KLWV4YW1wbGVfbnRcRGVidWcuICBZb3Ugc2hvdWxkIG5vdyBiZSBhYmxlIHRvIHJlcGVhdCB0aGUgZm9sbG93aW5nIHNlc3Npb24KLSgiQz4iIGlzIHRoZSBET1MgcHJvbXB0LCAiPj4+IiBpcyB0aGUgUHl0aG9uIHByb21wdCkgKG5vdGUgdGhhdCB2YXJpb3VzCi1kZWJ1ZyBvdXRwdXQgZnJvbSBQeXRob24gbWF5IG5vdCBtYXRjaCB0aGlzIHNjcmVlbiBkdW1wIGV4YWN0bHkpOgotCi0gICAgQz4uLlwuLlxQQ2J1aWxkXHB5dGhvbl9kCi0gICAgQWRkaW5nIHBhcnNlciBhY2NlbGVyYXRvcnMgLi4uCi0gICAgRG9uZS4KLSAgICBQeXRob24gMi4yYzErICgjMjgsIERlYyAxNCAyMDAxLCAxODowNjozOSkgW01TQyAzMiBiaXQgKEludGVsKV0gb24gd2luMzIKLSAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgPj4+IGltcG9ydCBleGFtcGxlCi0gICAgWzcwNTIgcmVmc10KLSAgICA+Pj4gZXhhbXBsZS5mb28oKQotICAgIEhlbGxvLCB3b3JsZAotICAgIFs3MDUyIHJlZnNdCi0gICAgPj4+Ci0KLVRFU1RJTkcgVEhFIFJFTEVBU0UtTU9ERSBETEwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLU9uY2UgdGhlIFJlbGVhc2UgYnVpbGQgaGFzIHN1Y2NlZWRlZCwgYnJpbmcgdXAgYSBET1MgYm94LCBhbmQgY2QgdG8KLWV4YW1wbGVfbnRcUmVsZWFzZS4gIFlvdSBzaG91bGQgbm93IGJlIGFibGUgdG8gcmVwZWF0IHRoZSBmb2xsb3dpbmcgc2Vzc2lvbgotKCJDPiIgaXMgdGhlIERPUyBwcm9tcHQsICI+Pj4iIGlzIHRoZSBQeXRob24gcHJvbXB0KToKLQotICAgIEM+Li5cLi5cUENidWlsZFxweXRob24KLSAgICBQeXRob24gMi4yYzErICgjMjgsIERlYyAxNCAyMDAxLCAxODowNjowNCkgW01TQyAzMiBiaXQgKEludGVsKV0gb24gd2luMzIKLSAgICBUeXBlICJoZWxwIiwgImNvcHlyaWdodCIsICJjcmVkaXRzIiBvciAibGljZW5zZSIgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gICAgPj4+IGltcG9ydCBleGFtcGxlCi0gICAgPj4+IGV4YW1wbGUuZm9vKCkKLSAgICBIZWxsbywgd29ybGQKLSAgICA+Pj4KLQotQ29uZ3JhdHVsYXRpb25zISAgWW91J3ZlIHN1Y2Nlc3NmdWxseSBidWlsdCB5b3VyIGZpcnN0IFB5dGhvbiBleHRlbnNpb24KLW1vZHVsZS4KLQotQ1JFQVRJTkcgWU9VUiBPV04gUFJPSkVDVAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2hvb3NlIGEgbmFtZSAoInNwYW0iIGlzIGFsd2F5cyBhIHdpbm5lciA6LSkgYW5kIGNyZWF0ZSBhIGRpcmVjdG9yeSBmb3IKLWl0LiAgQ29weSB5b3VyIEMgc291cmNlcyBpbnRvIGl0LiAgTm90ZSB0aGF0IHRoZSBtb2R1bGUgc291cmNlIGZpbGUgbmFtZQotZG9lcyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBtYXRjaCB0aGUgbW9kdWxlIG5hbWUsIGJ1dCB0aGUgImluaXQiIGZ1bmN0aW9uCi1uYW1lIHNob3VsZCBtYXRjaCB0aGUgbW9kdWxlIG5hbWUgLS0gaS5lLiB5b3UgY2FuIG9ubHkgaW1wb3J0IGEgbW9kdWxlCi0ic3BhbSIgaWYgaXRzIGluaXQgZnVuY3Rpb24gaXMgY2FsbGVkICJpbml0c3BhbSgpIiwgYW5kIGl0IHNob3VsZCBjYWxsCi1QeV9Jbml0TW9kdWxlIHdpdGggdGhlIHN0cmluZyAic3BhbSIgYXMgaXRzIGZpcnN0IGFyZ3VtZW50ICh1c2UgdGhlIG1pbmltYWwKLWV4YW1wbGUuYyBpbiB0aGlzIGRpcmVjdG9yeSBhcyBhIGd1aWRlKS4gIEJ5IGNvbnZlbnRpb24sIGl0IGxpdmVzIGluIGEgZmlsZQotY2FsbGVkICJzcGFtLmMiIG9yICJzcGFtbW9kdWxlLmMiLiAgVGhlIG91dHB1dCBmaWxlIHNob3VsZCBiZSBjYWxsZWQKLSJzcGFtLmRsbCIgb3IgInNwYW0ucHlkIiAodGhlIGxhdHRlciBpcyBzdXBwb3J0ZWQgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGggYQotc3lzdGVtIGxpYnJhcnkgInNwYW0uZGxsIiB0byB3aGljaCB5b3VyIG1vZHVsZSBjb3VsZCBiZSBhIFB5dGhvbiBpbnRlcmZhY2UpCi1pbiBSZWxlYXNlIG1vZGUsIG9yIHNwYW1fZC5kbGwgb3Igc3BhbV9kLnB5ZCBpbiBEZWJ1ZyBtb2RlLgotCi1Ob3cgeW91ciBvcHRpb25zIGFyZToKLQotMSkgQ29weSBleGFtcGxlLnNsbiBhbmQgZXhhbXBsZS52Y3Byb2osIHJlbmFtZSB0aGVtIHRvIHNwYW0uKiwgYW5kIGVkaXQgdGhlbQotYnkgaGFuZC4KLQotb3IKLQotMikgQ3JlYXRlIGEgYnJhbmQgbmV3IHByb2plY3Q7IGluc3RydWN0aW9ucyBhcmUgYmVsb3cuCi0KLUluIGVpdGhlciBjYXNlLCBjb3B5IGV4YW1wbGVfbnRcZXhhbXBsZS5kZWYgdG8gc3BhbVxzcGFtLmRlZiwgYW5kIGVkaXQgdGhlCi1uZXcgc3BhbS5kZWYgc28gaXRzIHNlY29uZCBsaW5lIGNvbnRhaW5zIHRoZSBzdHJpbmcgImluaXRzcGFtIi4gIElmIHlvdQotY3JlYXRlZCBhIG5ldyBwcm9qZWN0IHlvdXJzZWxmLCBhZGQgdGhlIGZpbGUgc3BhbS5kZWYgdG8gdGhlIHByb2plY3Qgbm93LgotKFRoaXMgaXMgYW4gYW5ub3lpbmcgbGl0dGxlIGZpbGUgd2l0aCBvbmx5IHR3byBsaW5lcy4gIEFuIGFsdGVybmF0aXZlCi1hcHByb2FjaCBpcyB0byBmb3JnZXQgYWJvdXQgdGhlIC5kZWYgZmlsZSwgYW5kIGFkZCB0aGUgb3B0aW9uCi0iL2V4cG9ydDppbml0c3BhbSIgc29tZXdoZXJlIHRvIHRoZSBMaW5rIHNldHRpbmdzLCBieSBtYW51YWxseSBlZGl0aW5nIHRoZQotIlByb2plY3QgLT4gUHJvcGVydGllcyAtPiBMaW5rZXIgLT4gQ29tbWFuZCBMaW5lIC0+IEFkZGl0aW9uYWwgT3B0aW9ucyIgCi1ib3gpLgotCi1Zb3UgYXJlIG5vdyBhbGwgc2V0IHRvIGJ1aWxkIHlvdXIgZXh0ZW5zaW9uLCB1bmxlc3MgaXQgcmVxdWlyZXMgb3RoZXIKLWV4dGVybmFsIGxpYnJhcmllcywgaW5jbHVkZSBmaWxlcywgZXRjLiAgU2VlIFB5dGhvbidzIEV4dGVuZGluZyBhbmQKLUVtYmVkZGluZyBtYW51YWwgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gd3JpdGUgYW4gZXh0ZW5zaW9uLgotCi0KLUNSRUFUSU5HIEEgQlJBTkQgTkVXIFBST0pFQ1QKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVVzZSB0aGUKLSAgICBGaWxlIC0+IE5ldyAtPiBQcm9qZWN0Li4uCi1kaWFsb2cgdG8gY3JlYXRlIGEgbmV3IFByb2plY3QgV29ya3NwYWNlLiAgU2VsZWN0ICJWaXN1YWwgQysrIFByb2plY3RzL1dpbjMyLwotV2luMzIgUHJvamVjdCIsIGVudGVyIHRoZSBuYW1lICgic3BhbSIpLCBhbmQgbWFrZSBzdXJlIHRoZSAiTG9jYXRpb24iIGlzIAotc2V0IHRvIHBhcmVudCBvZiB0aGUgc3BhbSBkaXJlY3RvcnkgeW91IGhhdmUgY3JlYXRlZCAod2hpY2ggc2hvdWxkIGJlIGEgZGlyZWN0IAotc3ViZGlyZWN0b3J5IG9mIHRoZSBQeXRob24gYnVpbGQgdHJlZSwgYSBzaWJsaW5nIG9mIEluY2x1ZGUgYW5kIFBDKS4gIAotSW4gIkFwcGxpY2F0aW9uIFNldHRpbmdzIiwgc2VsZWN0ICJETEwiLCBhbmQgIkVtcHR5IFByb2plY3QiLiAgQ2xpY2sgT0suCi0KLVlvdSBzaG91bGQgbm93IGNyZWF0ZSB0aGUgZmlsZSBzcGFtLmRlZiBhcyBpbnN0cnVjdGVkIGluIHRoZSBwcmV2aW91cwotc2VjdGlvbi4gQWRkIHRoZSBzb3VyY2UgZmlsZXMgKGluY2x1ZGluZyB0aGUgLmRlZiBmaWxlKSB0byB0aGUgcHJvamVjdCwgCi11c2luZyAiUHJvamVjdCIsICJBZGQgRXhpc3RpbmcgSXRlbSIuCi0KLU5vdyBvcGVuIHRoZQotICAgIFByb2plY3QgLT4gc3BhbSBwcm9wZXJ0aWVzLi4uCi1kaWFsb2cuICAoSW1wcmVzc2l2ZSwgaXNuJ3QgaXQ/IDotKSBZb3Ugb25seSBuZWVkIHRvIGNoYW5nZSBhIGZldwotc2V0dGluZ3MuICBNYWtlIHN1cmUgIkFsbCBDb25maWd1cmF0aW9ucyIgaXMgc2VsZWN0ZWQgZnJvbSB0aGUgIlNldHRpbmdzCi1mb3I6IiBkcm9wZG93biBsaXN0LiAgU2VsZWN0IHRoZSAiQy9DKysiIHRhYi4gIENob29zZSB0aGUgIkdlbmVyYWwiCi1jYXRlZ29yeSBpbiB0aGUgcG9wdXAgbWVudSBhdCB0aGUgdG9wLiAgVHlwZSB0aGUgZm9sbG93aW5nIHRleHQgaW4gdGhlCi1lbnRyeSBib3ggbGFiZWxlZCAiQWRkZGl0aW9uYWwgSW5jbHVkZSBEaXJlY3RvcmllczoiCi0KLSAgICAuLlxJbmNsdWRlLC4uXFBDCi0KLVRoZW4sIGNob29zZSB0aGUgIkdlbmVyYWwiIGNhdGVnb3J5IGluIHRoZSAiTGlua2VyIiB0YWIsIGFuZCBlbnRlcgotICAgIC4uXFBDYnVpbGQKLWluIHRoZSAiQWRkaXRpb25hbCBsaWJyYXJ5IERpcmVjdG9yaWVzIiBib3guCi0KLU5vdyB5b3UgbmVlZCB0byBhZGQgc29tZSBtb2RlLXNwZWNpZmljIHNldHRpbmdzIChzZWxlY3QgIkFjY2VwdCIKLXdoZW4gYXNrZWQgdG8gY29uZmlybSB5b3VyIGNoYW5nZXMpOgotCi1TZWxlY3QgIlJlbGVhc2UiIGluIHRoZSAiQ29uZmlndXJhdGlvbiIgZHJvcGRvd24gbGlzdC4gIENsaWNrIHRoZQotIkxpbmsiIHRhYiwgY2hvb3NlIHRoZSAiSW5wdXQiIENhdGVnb3J5LCBhbmQgYXBwZW5kICJweXRob24yNC5saWIiIHRvIHRoZQotbGlzdCBpbiB0aGUgIkFkZGl0aW9uYWwgRGVwZW5kZW5jaWVzIiBib3guCi0KLVNlbGVjdCAiRGVidWciIGluIHRoZSAiU2V0dGluZ3MgZm9yOiIgZHJvcGRvd24gbGlzdCwgYW5kIGFwcGVuZAotInB5dGhvbjI0X2QubGliIiB0byB0aGUgbGlzdCBpbiB0aGUgQWRkaXRpb25hbCBEZXBlbmRlbmNpZXMiIGJveC4gIFRoZW4KLWNsaWNrIG9uIHRoZSBDL0MrKyB0YWIsIHNlbGVjdCAiQ29kZSBHZW5lcmF0aW9uIiwgYW5kIHNlbGVjdCAKLSJNdWx0aS10aHJlYWRlZCBEZWJ1ZyBETEwiIGZyb20gdGhlICJSdW50aW1lIGxpYnJhcnkiIGRyb3Bkb3duIGxpc3QuCi0KLVNlbGVjdCAiUmVsZWFzZSIgYWdhaW4gZnJvbSB0aGUgIlNldHRpbmdzIGZvcjoiIGRyb3Bkb3duIGxpc3QuCi1TZWxlY3QgIk11bHRpLXRocmVhZGVkIERMTCIgZnJvbSB0aGUgIlVzZSBydW4tdGltZSBsaWJyYXJ5OiIgZHJvcGRvd24gbGlzdC4KLQotVGhhdCdzIGFsbCA8d2luaz4uCmRpZmYgLS1naXQgYS9QQy9leGFtcGxlX250L3NldHVwLnB5IGIvUEMvZXhhbXBsZV9udC9zZXR1cC5weQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ0M2JjNy4uMDAwMDAwMAotLS0gYS9QQy9leGFtcGxlX250L3NldHVwLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMjIgKzAsMCBAQAotIyBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBkaXN0dXRpbHMgJ3NldHVwJyBzY3JpcHQgZm9yIHRoZSBleGFtcGxlX250Ci0jIHNhbXBsZS4gIFRoaXMgcHJvdmlkZXMgYSBzaW1wbGVyIHdheSBvZiBidWlsZGluZyB5b3VyIGV4dGVuc2lvbgotIyBhbmQgbWVhbnMgeW91IGNhbiBhdm9pZCBrZWVwaW5nIE1TVkMgc29sdXRpb24gZmlsZXMgZXRjIGluIHNvdXJjZS1jb250cm9sLgotIyBJdCBhbHNvIG1lYW5zIGl0IHNob3VsZCBtYWdpY2FsbHkgYnVpbGQgd2l0aCBhbGwgY29tcGlsZXJzIHN1cHBvcnRlZCBieQotIyBweXRob24uCi0KLSMgVVNBR0U6IHlvdSBwcm9iYWJseSB3YW50ICdzZXR1cC5weSBpbnN0YWxsJyAtIGJ1dCBleGVjdXRlICdzZXR1cC5weSAtLWhlbHAnCi0jIGZvciBhbGwgdGhlIGRldGFpbHMuCi0KLSMgTk9URTogVGhpcyBpcyAqbm90KiBhIHNhbXBsZSBmb3IgZGlzdHV0aWxzIC0gaXQgaXMganVzdCB0aGUgc21hbGxlc3QKLSMgc2NyaXB0IHRoYXQgY2FuIGJ1aWxkIHRoaXMuICBTZWUgZGlzdHV0aWxzIGRvY3MgZm9yIG1vcmUgaW5mby4KLQotZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgc2V0dXAsIEV4dGVuc2lvbgotCi1leGFtcGxlX21vZCA9IEV4dGVuc2lvbignZXhhbXBsZScsIHNvdXJjZXMgPSBbJ2V4YW1wbGUuYyddKQotCi0KLXNldHVwKG5hbWUgPSAiZXhhbXBsZSIsCi0gICAgdmVyc2lvbiA9ICIxLjAiLAotICAgIGRlc2NyaXB0aW9uID0gIkEgc2FtcGxlIGV4dGVuc2lvbiBtb2R1bGUiLAotICAgIGV4dF9tb2R1bGVzID0gW2V4YW1wbGVfbW9kXSwKLSkKZGlmZiAtLWdpdCBhL1BDL2dldHBhdGhwLmMgYi9QQy9nZXRwYXRocC5jCmluZGV4IGI1YmYzMjUuLmRlYjQwZTcgMTAwNjQ0Ci0tLSBhL1BDL2dldHBhdGhwLmMKKysrIGIvUEMvZ2V0cGF0aHAuYwpAQCAtMSw2ICsxLDYgQEAKIAogLyogUmV0dXJuIHRoZSBpbml0aWFsIG1vZHVsZSBzZWFyY2ggcGF0aC4gKi8KLS8qIFVzZWQgYnkgRE9TLCBPUy8yLCBXaW5kb3dzIDMuMSwgV2luZG93cyA5NS85OCwgV2luZG93cyBOVC4gKi8KKy8qIFVzZWQgYnkgRE9TLCBXaW5kb3dzIDMuMSwgV2luZG93cyA5NS85OCwgV2luZG93cyBOVC4gKi8KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgUEFUSCBSVUxFUyBGT1IgV0lORE9XUzoKQEAgLTI0NSw5ICsyNDUsOSBAQAogICAgIC8qIFRyaWVkIHRvIHVzZSBzeXNnZXQoIndpbnZlciIpIGJ1dCBoZXJlIGlzIHRvbyBlYXJseSA6LSggKi8KICAgICB2ZXJzaW9uTGVuID0gc3RybGVuKFB5V2luX0RMTFZlcnNpb25TdHJpbmcpOwogICAgIC8qIFNwYWNlIGZvciBhbGwgdGhlIGNoYXJzLCBwbHVzIG9uZSBcMCAqLwotICAgIGtleUJ1ZiA9IGtleUJ1ZlB0ciA9IG1hbGxvYyhzaXplb2Yoa2V5UHJlZml4KSArCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihXQ0hBUikqKHZlcnNpb25MZW4tMSkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoa2V5U3VmZml4KSk7CisgICAga2V5QnVmID0ga2V5QnVmUHRyID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZihrZXlQcmVmaXgpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKFdDSEFSKSoodmVyc2lvbkxlbi0xKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihrZXlTdWZmaXgpKTsKICAgICBpZiAoa2V5QnVmPT1OVUxMKSBnb3RvIGRvbmU7CiAKICAgICBtZW1jcHkoa2V5QnVmUHRyLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLXNpemVvZihXQ0hBUikpOwpAQCAtMjcxLDcgKzI3MSw3IEBACiAgICAgLyogQWxsb2NhdGUgYSB0ZW1wIGFycmF5IG9mIGNoYXIgYnVmZmVycywgc28gd2Ugb25seSBuZWVkIHRvIGxvb3AKICAgICAgICByZWFkaW5nIHRoZSByZWdpc3RyeSBvbmNlCiAgICAgKi8KLSAgICBwcFBhdGhzID0gbWFsbG9jKCBzaXplb2YoV0NIQVIgKikgKiBudW1LZXlzICk7CisgICAgcHBQYXRocyA9IFB5TWVtX1Jhd01hbGxvYyggc2l6ZW9mKFdDSEFSICopICogbnVtS2V5cyApOwogICAgIGlmIChwcFBhdGhzPT1OVUxMKSBnb3RvIGRvbmU7CiAgICAgbWVtc2V0KHBwUGF0aHMsIDAsIHNpemVvZihXQ0hBUiAqKSAqIG51bUtleXMpOwogICAgIC8qIExvb3Agb3ZlciBhbGwgc3Via2V5cywgYWxsb2NhdGluZyBhIHRlbXAgc3ViLWJ1ZmZlci4gKi8KQEAgLTI5Myw3ICsyOTMsNyBAQAogICAgICAgICAvKiBGaW5kIHRoZSB2YWx1ZSBvZiB0aGUgYnVmZmVyIHNpemUsIG1hbGxvYywgdGhlbiByZWFkIGl0ICovCiAgICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeFcoc3ViS2V5LCBOVUxMLCAwLCBOVUxMLCBOVUxMLCAmcmVxZFNpemUpOwogICAgICAgICBpZiAocmVxZFNpemUpIHsKLSAgICAgICAgICAgIHBwUGF0aHNbaW5kZXhdID0gbWFsbG9jKHJlcWRTaXplKTsKKyAgICAgICAgICAgIHBwUGF0aHNbaW5kZXhdID0gUHlNZW1fUmF3TWFsbG9jKHJlcWRTaXplKTsKICAgICAgICAgICAgIGlmIChwcFBhdGhzW2luZGV4XSkgewogICAgICAgICAgICAgICAgIFJlZ1F1ZXJ5VmFsdWVFeFcoc3ViS2V5LCBOVUxMLCAwLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBCWVRFKXBwUGF0aHNbaW5kZXhdLApAQCAtMzA4LDcgKzMwOCw3IEBACiAgICAgaWYgKGRhdGFTaXplID09IDApIGdvdG8gZG9uZTsKIAogICAgIC8qIG9yaWdpbmFsIGRhdGFzaXplIGZyb20gUmVnUXVlcnlJbmZvIGRvZXNuJ3QgaW5jbHVkZSB0aGUgXDAgKi8KLSAgICBkYXRhQnVmID0gbWFsbG9jKChkYXRhU2l6ZSsxKSAqIHNpemVvZihXQ0hBUikpOworICAgIGRhdGFCdWYgPSBQeU1lbV9SYXdNYWxsb2MoKGRhdGFTaXplKzEpICogc2l6ZW9mKFdDSEFSKSk7CiAgICAgaWYgKGRhdGFCdWYpIHsKICAgICAgICAgV0NIQVIgKnN6Q3VyID0gZGF0YUJ1ZjsKICAgICAgICAgRFdPUkQgcmVxZFNpemUgPSBkYXRhU2l6ZTsKQEAgLTM0NiwxNCArMzQ2LDEzIEBACiBkb25lOgogICAgIC8qIExvb3AgZnJlZWluZyBteSB0ZW1wIGJ1ZmZlcnMgKi8KICAgICBpZiAocHBQYXRocykgewotICAgICAgICBmb3IoaW5kZXg9MDtpbmRleDxudW1LZXlzO2luZGV4KyspCi0gICAgICAgICAgICBpZiAocHBQYXRoc1tpbmRleF0pIGZyZWUocHBQYXRoc1tpbmRleF0pOwotICAgICAgICBmcmVlKHBwUGF0aHMpOworICAgICAgICBmb3IoaW5kZXg9MDsgaW5kZXg8bnVtS2V5czsgaW5kZXgrKykKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUocHBQYXRoc1tpbmRleF0pOworICAgICAgICBQeU1lbV9SYXdGcmVlKHBwUGF0aHMpOwogICAgIH0KICAgICBpZiAobmV3S2V5KQogICAgICAgICBSZWdDbG9zZUtleShuZXdLZXkpOwotICAgIGlmIChrZXlCdWYpCi0gICAgICAgIGZyZWUoa2V5QnVmKTsKKyAgICBQeU1lbV9SYXdGcmVlKGtleUJ1Zik7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KICNlbmRpZiAvKiBQeV9FTkFCTEVfU0hBUkVEICovCkBAIC00MzQsNyArNDMzLDcgQEAKICAgICAgICAgY2hhciAqIHAgPSBmZ2V0cyhidWZmZXIsIE1BWFBBVEhMRU4qMiwgZW52X2ZpbGUpOwogICAgICAgICB3Y2hhcl90IHRtcGJ1ZmZlcltNQVhQQVRITEVOKjIrMV07CiAgICAgICAgIFB5T2JqZWN0ICogZGVjb2RlZDsKLSAgICAgICAgaW50IG47CisgICAgICAgIHNpemVfdCBuOwogCiAgICAgICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKQEAgLTYxNiw3ICs2MTUsNyBAQAogICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCiAgICAgICAgIGJ1ZnN6ICs9IHdjc2xlbihlbnZwYXRoKSArIDE7CiAKLSAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBtYWxsb2MoYnVmc3oqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBQeU1lbV9SYXdNYWxsb2MoYnVmc3oqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICBpZiAoYnVmID09IE5VTEwpIHsKICAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwpAQCAtNjI5LDEwICs2MjgsOCBAQAogICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gUFlUSE9OUEFUSDsKICAgICAgICAgfQogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICAgICAgaWYgKG1hY2hpbmVwYXRoKQotICAgICAgICAgICAgZnJlZShtYWNoaW5lcGF0aCk7Ci0gICAgICAgIGlmICh1c2VycGF0aCkKLSAgICAgICAgICAgIGZyZWUodXNlcnBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1hY2hpbmVwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh1c2VycGF0aCk7CiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjUyLDEzICs2NDksMTMgQEAKICAgICAgICAgd2NzY3B5KGJ1ZiwgdXNlcnBhdGgpOwogICAgICAgICBidWYgPSB3Y3NjaHIoYnVmLCBMJ1wwJyk7CiAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICBmcmVlKHVzZXJwYXRoKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh1c2VycGF0aCk7CiAgICAgfQogICAgIGlmIChtYWNoaW5lcGF0aCkgewogICAgICAgICB3Y3NjcHkoYnVmLCBtYWNoaW5lcGF0aCk7CiAgICAgICAgIGJ1ZiA9IHdjc2NocihidWYsIEwnXDAnKTsKICAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgICAgIGZyZWUobWFjaGluZXBhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1hY2hpbmVwYXRoKTsKICAgICB9CiAgICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewogICAgICAgICBpZiAoIXNraXBkZWZhdWx0KSB7CkBAIC03NDUsNyArNzQyLDcgQEAKIFB5X1NldFBhdGgoY29uc3Qgd2NoYXJfdCAqcGF0aCkKIHsKICAgICBpZiAobW9kdWxlX3NlYXJjaF9wYXRoICE9IE5VTEwpIHsKLSAgICAgICAgZnJlZShtb2R1bGVfc2VhcmNoX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG1vZHVsZV9zZWFyY2hfcGF0aCk7CiAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7CiAgICAgfQogICAgIGlmIChwYXRoICE9IE5VTEwpIHsKQEAgLTc1MywxMCArNzUwLDEwIEBACiAgICAgICAgIHdjaGFyX3QgKnByb2cgPSBQeV9HZXRQcm9ncmFtTmFtZSgpOwogICAgICAgICB3Y3NuY3B5KHByb2dwYXRoLCBwcm9nLCBNQVhQQVRITEVOKTsKICAgICAgICAgcHJlZml4WzBdID0gTCdcMCc7Ci0gICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IG1hbGxvYygod2NzbGVuKHBhdGgpICsgMSkgKiBzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQeU1lbV9SYXdNYWxsb2MoKHdjc2xlbihwYXRoKSArIDEpICogc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKG1vZHVsZV9zZWFyY2hfcGF0aCAhPSBOVUxMKQogICAgICAgICAgICAgd2NzY3B5KG1vZHVsZV9zZWFyY2hfcGF0aCwgcGF0aCk7Ci0JfQorICAgIH0KIH0KIAogd2NoYXJfdCAqCmRpZmYgLS1naXQgYS9QQy9sYXVuY2hlci5jIGIvUEMvbGF1bmNoZXIuYwppbmRleCAyMTZhNTYyLi5iYmIyOGRhIDEwMDY0NAotLS0gYS9QQy9sYXVuY2hlci5jCisrKyBiL1BDL2xhdW5jaGVyLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgVmluYXkgU2FqaXAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBWaW5heSBTYWppcC4KICAqIExpY2Vuc2VkIHRvIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KICAqCiAgKiBCYXNlZCBvbiB0aGUgd29yayBvZjoKQEAgLTE4LDcgKzE4LDI4IEBACiAKIC8qIEJ1aWxkIG9wdGlvbnMuICovCiAjZGVmaW5lIFNLSVBfUFJFRklYCi0vKiAjZGVmaW5lIFNFQVJDSF9QQVRIICovCisjZGVmaW5lIFNFQVJDSF9QQVRICisKKy8qIEVycm9yIGNvZGVzICovCisKKyNkZWZpbmUgUkNfTk9fU1REX0hBTkRMRVMgICAxMDAKKyNkZWZpbmUgUkNfQ1JFQVRFX1BST0NFU1MgICAxMDEKKyNkZWZpbmUgUkNfQkFEX1ZJUlRVQUxfUEFUSCAxMDIKKyNkZWZpbmUgUkNfTk9fUFlUSE9OICAgICAgICAxMDMKKyNkZWZpbmUgUkNfTk9fTUVNT1JZICAgICAgICAxMDQKKy8qCisgKiBTQ1JJUFRfV1JBUFBFUiBpcyB1c2VkIHRvIGNob29zZSBiZXR3ZWVuIHR3byB2YXJpYW50cyBvZiBhbiBleGVjdXRhYmxlIGJ1aWx0CisgKiBmcm9tIHRoaXMgc291cmNlIGZpbGUuIElmIG5vdCBkZWZpbmVkLCB0aGUgUEVQIDM5NyBQeXRob24gbGF1bmNoZXIgaXMgYnVpbHQ7CisgKiBpZiBkZWZpbmVkLCBhIHNjcmlwdCBsYXVuY2hlciBvZiB0aGUgdHlwZSB1c2VkIGJ5IHNldHVwdG9vbHMgaXMgYnVpbHQsIHdoaWNoCisgKiBsb29rcyBmb3IgYSBzY3JpcHQgbmFtZSByZWxhdGVkIHRvIHRoZSBleGVjdXRhYmxlIG5hbWUgYW5kIHJ1bnMgdGhhdCBzY3JpcHQKKyAqIHdpdGggdGhlIGFwcHJvcHJpYXRlIFB5dGhvbiBpbnRlcnByZXRlci4KKyAqCisgKiBTQ1JJUFRfV1JBUFBFUiBzaG91bGQgYmUgdW5kZWZpbmVkIGluIHRoZSBzb3VyY2UsIGFuZCBkZWZpbmVkIGluIGEgVlMgcHJvamVjdAorICogd2hpY2ggYnVpbGRzIHRoZSBzZXR1cHRvb2xzLXN0eWxlIGxhdW5jaGVyLgorICovCisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKyNkZWZpbmUgUkNfTk9fU0NSSVBUICAgICAgICAxMDUKKyNlbmRpZgogCiAvKiBKdXN0IGZvciBub3cgLSBzdGF0aWMgZGVmaW5pdGlvbiAqLwogCkBAIC0zMiwzMiArNTMsNiBAQAogICAgIHJldHVybiBwOwogfQogCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyBoZXJlIHRvIHNpbXBsaWZ5IG1lbW9yeSBtYW5hZ2VtZW50Ci0gKiBhbmQgdG8gdHJlYXQgYmxhbmsgdmFsdWVzIGFzIGlmIHRoZXkgYXJlIGFic2VudC4KLSAqLwotc3RhdGljIHdjaGFyX3QgKiBnZXRfZW52KHdjaGFyX3QgKiBrZXkpCi17Ci0gICAgLyogVGhpcyBpcyBub3QgdGhyZWFkLXNhZmUsIGp1c3QgbGlrZSBnZXRlbnYgKi8KLSAgICBzdGF0aWMgd2NoYXJfdCBidWZbMjU2XTsKLSAgICBEV09SRCByZXN1bHQgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZiwgMjU2KTsKLQotICAgIGlmIChyZXN1bHQgPiAyNTUpIHsKLSAgICAgICAgLyogTGFyZ2UgZW52aXJvbm1lbnQgdmFyaWFibGUuIEFjY2VwdCBzb21lIGxlYWthZ2UgKi8KLSAgICAgICAgd2NoYXJfdCAqYnVmMiA9ICh3Y2hhcl90KiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogKHJlc3VsdCsxKSk7Ci0gICAgICAgIEdldEVudmlyb25tZW50VmFyaWFibGVXKGtleSwgYnVmMiwgcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIGJ1ZjI7Ci0gICAgfQotCi0gICAgaWYgKHJlc3VsdCA9PSAwKQotICAgICAgICAvKiBFaXRoZXIgc29tZSBlcnJvciwgZS5nLiBFUlJPUl9FTlZWQVJfTk9UX0ZPVU5ELAotICAgICAgICAgICBvciBhbiBlbXB0eSBlbnZpcm9ubWVudCB2YXJpYWJsZS4gKi8KLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICByZXR1cm4gYnVmOwotfQotCi0KIHN0YXRpYyB2b2lkCiBkZWJ1Zyh3Y2hhcl90ICogZm9ybWF0LCAuLi4pCiB7CkBAIC0xMDAsMTEgKzk1LDQwIEBACiAjaWYgIWRlZmluZWQoX1dJTkRPV1MpCiAgICAgZndwcmludGYoc3RkZXJyLCBMIiVzXG4iLCBtZXNzYWdlKTsKICNlbHNlCi0gICAgTWVzc2FnZUJveChOVUxMLCBtZXNzYWdlLCBURVhUKCJQeXRob24gTGF1bmNoZXIgaXMgc29ycnkgdG8gc2F5IC4uLiIpLCBNQl9PSyk7IAorICAgIE1lc3NhZ2VCb3goTlVMTCwgbWVzc2FnZSwgVEVYVCgiUHl0aG9uIExhdW5jaGVyIGlzIHNvcnJ5IHRvIHNheSAuLi4iKSwKKyAgICAgICAgICAgICAgIE1CX09LKTsgCiAjZW5kaWYKICAgICBFeGl0UHJvY2VzcyhyYyk7CiB9CiAKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGhlcmUgdG8gc2ltcGxpZnkgbWVtb3J5IG1hbmFnZW1lbnQKKyAqIGFuZCB0byB0cmVhdCBibGFuayB2YWx1ZXMgYXMgaWYgdGhleSBhcmUgYWJzZW50LgorICovCitzdGF0aWMgd2NoYXJfdCAqIGdldF9lbnYod2NoYXJfdCAqIGtleSkKK3sKKyAgICAvKiBUaGlzIGlzIG5vdCB0aHJlYWQtc2FmZSwganVzdCBsaWtlIGdldGVudiAqLworICAgIHN0YXRpYyB3Y2hhcl90IGJ1ZltCVUZTSVpFXTsKKyAgICBEV09SRCByZXN1bHQgPSBHZXRFbnZpcm9ubWVudFZhcmlhYmxlVyhrZXksIGJ1ZiwgQlVGU0laRSk7CisKKyAgICBpZiAocmVzdWx0ID49IEJVRlNJWkUpIHsKKyAgICAgICAgLyogTGFyZ2UgZW52aXJvbm1lbnQgdmFyaWFibGUuIEFjY2VwdCBzb21lIGxlYWthZ2UgKi8KKyAgICAgICAgd2NoYXJfdCAqYnVmMiA9ICh3Y2hhcl90KiltYWxsb2Moc2l6ZW9mKHdjaGFyX3QpICogKHJlc3VsdCsxKSk7CisgICAgICAgIGlmIChidWYyID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycm9yKFJDX05PX01FTU9SWSwgTCJDb3VsZCBub3QgYWxsb2NhdGUgZW52aXJvbm1lbnQgYnVmZmVyIik7CisgICAgICAgIH0KKyAgICAgICAgR2V0RW52aXJvbm1lbnRWYXJpYWJsZVcoa2V5LCBidWYyLCByZXN1bHQpOworICAgICAgICByZXR1cm4gYnVmMjsKKyAgICB9CisKKyAgICBpZiAocmVzdWx0ID09IDApCisgICAgICAgIC8qIEVpdGhlciBzb21lIGVycm9yLCBlLmcuIEVSUk9SX0VOVlZBUl9OT1RfRk9VTkQsCisgICAgICAgICAgIG9yIGFuIGVtcHR5IGVudmlyb25tZW50IHZhcmlhYmxlLiAqLworICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBidWY7Cit9CisKICNpZiBkZWZpbmVkKF9XSU5ET1dTKQogCiAjZGVmaW5lIFBZVEhPTl9FWEVDVVRBQkxFIEwicHl0aG9udy5leGUiCkBAIC0xMTUsMTEgKzEzOSw2IEBACiAKICNlbmRpZgogCi0jZGVmaW5lIFJDX05PX1NURF9IQU5ETEVTICAgMTAwCi0jZGVmaW5lIFJDX0NSRUFURV9QUk9DRVNTICAgMTAxCi0jZGVmaW5lIFJDX0JBRF9WSVJUVUFMX1BBVEggMTAyCi0jZGVmaW5lIFJDX05PX1BZVEhPTiAgICAgICAgMTAzCi0KICNkZWZpbmUgTUFYX1ZFUlNJT05fU0laRSAgICA0CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTI0MSw3ICsyNjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZmluZF9leGlzdGluZ19weXRob24oaXAtPmV4ZWN1dGFibGUpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWcoTCJsb2NhdGVfcHl0aG9uc19mb3Jfa2V5OiAlczogYWxyZWFkeSBcCi1mb3VuZDogJXNcbiIsIGlwLT5leGVjdXRhYmxlKTsKK2ZvdW5kXG4iLCBpcC0+ZXhlY3V0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGVjayB0aGUgZXhlY3V0YWJsZSB0eXBlLiAqLwpAQCAtNDU3LDYgKzQ3Niw1MSBAQAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKyNpZiBkZWZpbmVkKFNDUklQVF9XUkFQUEVSKQorLyoKKyAqIENoZWNrIGZvciBhIHNjcmlwdCBsb2NhdGVkIGFsb25nc2lkZSB0aGUgZXhlY3V0YWJsZQorICovCisKKyNpZiBkZWZpbmVkKF9XSU5ET1dTKQorI2RlZmluZSBTQ1JJUFRfU1VGRklYIEwiLXNjcmlwdC5weXciCisjZWxzZQorI2RlZmluZSBTQ1JJUFRfU1VGRklYIEwiLXNjcmlwdC5weSIKKyNlbmRpZgorCitzdGF0aWMgd2NoYXJfdCB3cmFwcGVkX3NjcmlwdF9wYXRoW01BWF9QQVRIXTsKKworLyogTG9jYXRlIHRoZSBzY3JpcHQgYmVpbmcgd3JhcHBlZC4KKyAqCisgKiBUaGlzIGNvZGUgc2hvdWxkIHN0b3JlIHRoZSBuYW1lIG9mIHRoZSB3cmFwcGVkIHNjcmlwdCBpbgorICogd3JhcHBlZF9zY3JpcHRfcGF0aCwgb3IgdGVybWluYXRlIHRoZSBwcm9ncmFtIHdpdGggYW4gZXJyb3IgaWYgdGhlcmUgaXMgbm8KKyAqIHZhbGlkIHdyYXBwZWQgc2NyaXB0IGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkCitsb2NhdGVfd3JhcHBlZF9zY3JpcHQoKQoreworICAgIHdjaGFyX3QgKiBwOworICAgIHNpemVfdCBwbGVuOworICAgIERXT1JEIGF0dHJzOworCisgICAgcGxlbiA9IEdldE1vZHVsZUZpbGVOYW1lVyhOVUxMLCB3cmFwcGVkX3NjcmlwdF9wYXRoLCBNQVhfUEFUSCk7CisgICAgcCA9IHdjc3JjaHIod3JhcHBlZF9zY3JpcHRfcGF0aCwgTCcuJyk7CisgICAgaWYgKHAgPT0gTlVMTCkgeworICAgICAgICBkZWJ1ZyhMIkdldE1vZHVsZUZpbGVOYW1lVyByZXR1cm5lZCB2YWx1ZSBoYXMgbm8gZXh0ZW5zaW9uOiAlc1xuIiwKKyAgICAgICAgICAgICAgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIGVycm9yKFJDX05PX1NDUklQVCwgTCJXcmFwcGVyIG5hbWUgJyVzJyBpcyBub3QgdmFsaWQuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgfQorCisgICAgd2NzbmNweV9zKHAsIE1BWF9QQVRIIC0gKHAgLSB3cmFwcGVkX3NjcmlwdF9wYXRoKSArIDEsIFNDUklQVF9TVUZGSVgsIF9UUlVOQ0FURSk7CisgICAgYXR0cnMgPSBHZXRGaWxlQXR0cmlidXRlc1cod3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgaWYgKGF0dHJzID09IElOVkFMSURfRklMRV9BVFRSSUJVVEVTKSB7CisgICAgICAgIGRlYnVnKEwiRmlsZSAnJXMnIG5vbi1leGlzdGVudFxuIiwgd3JhcHBlZF9zY3JpcHRfcGF0aCk7CisgICAgICAgIGVycm9yKFJDX05PX1NDUklQVCwgTCJTY3JpcHQgZmlsZSAnJXMnIGlzIG5vdCBwcmVzZW50LiIsIHdyYXBwZWRfc2NyaXB0X3BhdGgpOworICAgIH0KKworICAgIGRlYnVnKEwiVXNpbmcgd3JhcHBlZCBzY3JpcHQgZmlsZSAnJXMnXG4iLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKK30KKyNlbmRpZgorCiAvKgogICogUHJvY2VzcyBjcmVhdGlvbiBjb2RlCiAgKi8KQEAgLTU1MCw3ICs2MTQsNyBAQAogICAgICAgICBlcnJvcihSQ19DUkVBVEVfUFJPQ0VTUywgTCJVbmFibGUgdG8gY3JlYXRlIHByb2Nlc3MgdXNpbmcgJyVzJyIsIGNtZGxpbmUpOwogICAgIEFzc2lnblByb2Nlc3NUb0pvYk9iamVjdChqb2IsIHBpLmhQcm9jZXNzKTsKICAgICBDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLSAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KHBpLmhQcm9jZXNzLCBJTkZJTklURSk7CisgICAgV2FpdEZvclNpbmdsZU9iamVjdEV4KHBpLmhQcm9jZXNzLCBJTkZJTklURSwgRkFMU0UpOwogICAgIG9rID0gR2V0RXhpdENvZGVQcm9jZXNzKHBpLmhQcm9jZXNzLCAmcmMpOwogICAgIGlmICghb2spCiAgICAgICAgIGVycm9yKFJDX0NSRUFURV9QUk9DRVNTLCBMIkZhaWxlZCB0byBnZXQgZXhpdCBjb2RlIG9mIHByb2Nlc3MiKTsKQEAgLTU5NSwxMiArNjU5LDE3IEBACiAgICAgfQogfQogCi1zdGF0aWMgd2NoYXJfdCAqIGJ1aWx0aW5fdmlydHVhbF9wYXRocyBbXSA9IHsKLSAgICBMIi91c3IvYmluL2VudiBweXRob24iLAotICAgIEwiL3Vzci9iaW4vcHl0aG9uIiwKLSAgICBMIi91c3IvbG9jYWwvYmluL3B5dGhvbiIsCi0gICAgTCJweXRob24iLAotICAgIE5VTEwKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB3Y2hhcl90ICpzaGViYW5nOworICAgIEJPT0wgc2VhcmNoOworfSBTSEVCQU5HOworCitzdGF0aWMgU0hFQkFORyBidWlsdGluX3ZpcnR1YWxfcGF0aHMgW10gPSB7CisgICAgeyBMIi91c3IvYmluL2VudiBweXRob24iLCBUUlVFIH0sCisgICAgeyBMIi91c3IvYmluL3B5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBMIi91c3IvbG9jYWwvYmluL3B5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBMInB5dGhvbiIsIEZBTFNFIH0sCisgICAgeyBOVUxMLCBGQUxTRSB9LAogfTsKIAogLyogRm9yIG5vdywgYSBzdGF0aWMgYXJyYXkgb2YgY29tbWFuZHMuICovCkBAIC03NzYsMTAgKzg0NSwxMCBAQAogCiBzdGF0aWMgQk9PTAogcGFyc2Vfc2hlYmFuZyh3Y2hhcl90ICogc2hlYmFuZ19saW5lLCBpbnQgbmNoYXJzLCB3Y2hhcl90ICoqIGNvbW1hbmQsCi0gICAgICAgICAgICAgIHdjaGFyX3QgKiogc3VmZml4KQorICAgICAgICAgICAgICB3Y2hhcl90ICoqIHN1ZmZpeCwgQk9PTCAqc2VhcmNoKQogewogICAgIEJPT0wgcmMgPSBGQUxTRTsKLSAgICB3Y2hhcl90ICoqIHZwcDsKKyAgICBTSEVCQU5HICogdnBwOwogICAgIHNpemVfdCBwbGVuOwogICAgIHdjaGFyX3QgKiBwOwogICAgIHdjaGFyX3QgemFwcGVkOwpAQCAtNzg5LDE1ICs4NTgsMTcgQEAKIAogICAgICpjb21tYW5kID0gTlVMTDsgICAgLyogZmFpbHVyZSByZXR1cm4gKi8KICAgICAqc3VmZml4ID0gTlVMTDsKKyAgICAqc2VhcmNoID0gRkFMU0U7CiAKICAgICBpZiAoKCpzaGViYW5nX2xpbmUrKyA9PSBMJyMnKSAmJiAoKnNoZWJhbmdfbGluZSsrID09IEwnIScpKSB7CiAgICAgICAgIHNoZWJhbmdfbGluZSA9IHNraXBfd2hpdGVzcGFjZShzaGViYW5nX2xpbmUpOwogICAgICAgICBpZiAoKnNoZWJhbmdfbGluZSkgewogICAgICAgICAgICAgKmNvbW1hbmQgPSBzaGViYW5nX2xpbmU7Ci0gICAgICAgICAgICBmb3IgKHZwcCA9IGJ1aWx0aW5fdmlydHVhbF9wYXRoczsgKnZwcDsgKyt2cHApIHsKLSAgICAgICAgICAgICAgICBwbGVuID0gd2NzbGVuKCp2cHApOwotICAgICAgICAgICAgICAgIGlmICh3Y3NuY21wKHNoZWJhbmdfbGluZSwgKnZwcCwgcGxlbikgPT0gMCkgeworICAgICAgICAgICAgZm9yICh2cHAgPSBidWlsdGluX3ZpcnR1YWxfcGF0aHM7IHZwcC0+c2hlYmFuZzsgKyt2cHApIHsKKyAgICAgICAgICAgICAgICBwbGVuID0gd2NzbGVuKHZwcC0+c2hlYmFuZyk7CisgICAgICAgICAgICAgICAgaWYgKHdjc25jbXAoc2hlYmFuZ19saW5lLCB2cHAtPnNoZWJhbmcsIHBsZW4pID09IDApIHsKICAgICAgICAgICAgICAgICAgICAgcmMgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICAqc2VhcmNoID0gdnBwLT5zZWFyY2g7CiAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGNhbiBkbyB0aGlzIGJlY2F1c2UgYWxsIGJ1aWx0aW4gY29tbWFuZHMgY29udGFpbgogICAgICAgICAgICAgICAgICAgICAgKiAicHl0aG9uIi4KICAgICAgICAgICAgICAgICAgICAgICovCkBAIC04MDUsNyArODc2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCp2cHAgPT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKHZwcC0+c2hlYmFuZyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBOb3QgZm91bmQgaW4gYnVpbHRpbnMgLSBsb29rIGluIGN1c3RvbWl6ZWQgY29tbWFuZHMuCiAgICAgICAgICAgICAgICAgICoKQEAgLTg1Niw3ICs5MjcsNyBAQAogfSBCT007CiAKIC8qCi0gKiBTdHJpY3RseSwgd2UgZG9uJ3QgbmVlZCB0byBoYW5kbGUgVVRGLTE2IGFuZiBVVEYtMzIsIHNpbmNlIFB5dGhvbiBpdHNlbGYKKyAqIFN0cmljdGx5LCB3ZSBkb24ndCBuZWVkIHRvIGhhbmRsZSBVVEYtMTYgYW5kIFVURi0zMiwgc2luY2UgUHl0aG9uIGl0c2VsZgogICogZG9lc24ndC4gTmV2ZXIgbWluZCwgb25lIGRheSBpdCBtaWdodCAtIHRoZXJlJ3Mgbm8gaGFybSBsZWF2aW5nIGl0IGluLgogICovCiBzdGF0aWMgQk9NIEJPTXNbXSA9IHsKQEAgLTEwMTIsOCArMTA4MywxMCBAQAogICAgIGludCBpLCBqLCBuY2hhcnMgPSAwOwogICAgIGludCBoZWFkZXJfbGVuOwogICAgIEJPT0wgaXNfdmlydDsKKyAgICBCT09MIHNlYXJjaDsKICAgICB3Y2hhcl90ICogY29tbWFuZDsKICAgICB3Y2hhcl90ICogc3VmZml4OworICAgIENPTU1BTkQgKmNtZCA9IE5VTEw7CiAgICAgSU5TVEFMTEVEX1BZVEhPTiAqIGlwOwogCiAgICAgaWYgKHJjID09IDApIHsKQEAgLTExMjUsNyArMTE5OCw3IEBACiAgICAgICAgICAgICBpZiAobmNoYXJzID4gMCkgewogICAgICAgICAgICAgICAgIHNoZWJhbmdfbGluZVstLW5jaGFyc10gPSBMJ1wwJzsKICAgICAgICAgICAgICAgICBpc192aXJ0ID0gcGFyc2Vfc2hlYmFuZyhzaGViYW5nX2xpbmUsIG5jaGFycywgJmNvbW1hbmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1ZmZpeCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN1ZmZpeCwgJnNlYXJjaCk7CiAgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmQgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMInBhcnNlX3NoZWJhbmc6IGZvdW5kIGNvbW1hbmQ6ICVzXG4iLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc192aXJ0KSB7CkBAIC0xMTQxLDYgKzEyMTQsMjMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihSQ19CQURfVklSVFVBTF9QQVRILCBMIlVua25vd24gdmlydHVhbCBcCiBwYXRoICclcyciLCBjb21tYW5kKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgKz0gNjsgICAvKiBza2lwIHBhc3QgInB5dGhvbiIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2ggJiYgKCgqY29tbWFuZCA9PSBMJ1wwJykgfHwgaXNzcGFjZSgqY29tbWFuZCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29tbWFuZCBpcyBlbGlnaWJsZSBmb3IgcGF0aCBzZWFyY2gsIGFuZCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlzIG5vIHZlcnNpb24gc3BlY2lmaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMInNlYXJjaGluZyBQQVRIIGZvciBweXRob24gZXhlY3V0YWJsZVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID0gZmluZF9vbl9wYXRoKFBZVEhPTl9FWEVDVVRBQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1ZyhMIlB5dGhvbiBvbiBwYXRoOiAlc1xuIiwgY21kID8gY21kLT52YWx1ZSA6IEwiPG5vdCBmb3VuZD4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY21kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwibG9jYXRlZCBweXRob24gb24gUEFUSDogJXNcbiIsIGNtZC0+dmFsdWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZva2VfY2hpbGQoY21kLT52YWx1ZSwgc3VmZml4LCBjbWRsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRXhpdCBoZXJlLCBhcyB3ZSBoYXZlIGZvdW5kIHRoZSBjb21tYW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRkFMTCBUSFJPVUdIOiBObyBweXRob24gZm91bmQgb24gUEFUSCwgc28gZmFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJhY2sgdG8gbG9jYXRpbmcgdGhlIGNvcnJlY3QgaW5zdGFsbGVkIHB5dGhvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqY29tbWFuZCAmJiAhdmFsaWRhdGVfdmVyc2lvbihjb21tYW5kKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcihSQ19CQURfVklSVFVBTF9QQVRILCBMIkludmFsaWQgdmVyc2lvbiBcCiBzcGVjaWZpY2F0aW9uOiAnJXMnLlxuSW4gdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHNjcmlwdCwgJ3B5dGhvbicgbmVlZHMgdG8gYmUgXApAQCAtMTIyMyw2ICsxMzEzLDEyIEBACiAgICAgdm9pZCAqIHZlcnNpb25fZGF0YTsKICAgICBWU19GSVhFREZJTEVJTkZPICogZmlsZV9pbmZvOwogICAgIFVJTlQgYmxvY2tfc2l6ZTsKKyAgICBpbnQgaW5kZXg7CisjaWYgZGVmaW5lZChTQ1JJUFRfV1JBUFBFUikKKyAgICBpbnQgbmV3bGVuOworICAgIHdjaGFyX3QgKiBuZXdjb21tYW5kOworICAgIHdjaGFyX3QgKiBhdlsyXTsKKyNlbmRpZgogCiAgICAgd3AgPSBnZXRfZW52KEwiUFlMQVVOQ0hfREVCVUciKTsKICAgICBpZiAoKHdwICE9IE5VTEwpICYmICgqd3AgIT0gTCdcMCcpKQpAQCAtMTI3MSw4ICsxMzY3LDggQEAKICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgZGVidWcoTCJHZXRGaWxlVmVyc2lvbkluZm8gZmFpbGVkOiAlWFxuIiwgR2V0TGFzdEVycm9yKCkpOwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgdmFsaWQgPSBWZXJRdWVyeVZhbHVlVyh2ZXJzaW9uX2RhdGEsIEwiXFwiLCAmZmlsZV9pbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJsb2NrX3NpemUpOworICAgICAgICAgICAgICAgIHZhbGlkID0gVmVyUXVlcnlWYWx1ZVcodmVyc2lvbl9kYXRhLCBMIlxcIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChMUFZPSUQgKikgJmZpbGVfaW5mbywgJmJsb2NrX3NpemUpOwogICAgICAgICAgICAgICAgIGlmICghdmFsaWQpCiAgICAgICAgICAgICAgICAgICAgIGRlYnVnKEwiVmVyUXVlcnlWYWx1ZSBmYWlsZWQ6ICVYXG4iLCBHZXRMYXN0RXJyb3IoKSk7CiAgICAgICAgICAgICAgICAgZWxzZSB7CkBAIC0xMzAyLDcgKzEzOTgsNDAgQEAKICAgICB9CiAKICAgICBjb21tYW5kID0gc2tpcF9tZShHZXRDb21tYW5kTGluZVcoKSk7Ci0gICAgZGVidWcoTCJDYWxsZWQgd2l0aCBjb21tYW5kIGxpbmU6ICVzIiwgY29tbWFuZCk7CisgICAgZGVidWcoTCJDYWxsZWQgd2l0aCBjb21tYW5kIGxpbmU6ICVzXG4iLCBjb21tYW5kKTsKKworI2lmIGRlZmluZWQoU0NSSVBUX1dSQVBQRVIpCisgICAgLyogVGhlIGxhdW5jaGVyIGlzIGJlaW5nIHVzZWQgaW4gInNjcmlwdCB3cmFwcGVyIiBtb2RlLgorICAgICAqIFRoZXJlIHNob3VsZCB0aGVyZWZvcmUgYmUgYSBQeXRob24gc2NyaXB0IG5hbWVkIDxleGVuYW1lPi1zY3JpcHQucHkgaW4KKyAgICAgKiB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgdGhlIGxhdW5jaGVyIGV4ZWN1dGFibGUuCisgICAgICogUHV0IHRoZSBzY3JpcHQgbmFtZSBpbnRvIGFyZ3YgYXMgdGhlIGZpcnN0IChzY3JpcHQgbmFtZSkgYXJndW1lbnQuCisgICAgICovCisKKyAgICAvKiBHZXQgdGhlIHdyYXBwZWQgc2NyaXB0IG5hbWUgLSBpZiB0aGUgc2NyaXB0IGlzIG5vdCBwcmVzZW50LCB0aGlzIHdpbGwKKyAgICAgKiB0ZXJtaW5hdGUgdGhlIHByb2dyYW0gd2l0aCBhbiBlcnJvci4KKyAgICAgKi8KKyAgICBsb2NhdGVfd3JhcHBlZF9zY3JpcHQoKTsKKworICAgIC8qIEFkZCB0aGUgd3JhcHBlZCBzY3JpcHQgdG8gdGhlIHN0YXJ0IG9mIGNvbW1hbmQgKi8KKyAgICBuZXdsZW4gPSB3Y3NsZW4od3JhcHBlZF9zY3JpcHRfcGF0aCkgKyB3Y3NsZW4oY29tbWFuZCkgKyAyOyAvKiAnICcgKyBOVUwgKi8KKyAgICBuZXdjb21tYW5kID0gbWFsbG9jKHNpemVvZih3Y2hhcl90KSAqIG5ld2xlbik7CisgICAgaWYgKCFuZXdjb21tYW5kKSB7CisgICAgICAgIGVycm9yKFJDX05PX01FTU9SWSwgTCJDb3VsZCBub3QgYWxsb2NhdGUgbmV3IGNvbW1hbmQgbGluZSIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgd2NzY3B5X3MobmV3Y29tbWFuZCwgbmV3bGVuLCB3cmFwcGVkX3NjcmlwdF9wYXRoKTsKKyAgICAgICAgd2NzY2F0X3MobmV3Y29tbWFuZCwgbmV3bGVuLCBMIiAiKTsKKyAgICAgICAgd2NzY2F0X3MobmV3Y29tbWFuZCwgbmV3bGVuLCBjb21tYW5kKTsKKyAgICAgICAgZGVidWcoTCJSdW5uaW5nIHdyYXBwZWQgc2NyaXB0IHdpdGggY29tbWFuZCBsaW5lICclcydcbiIsIG5ld2NvbW1hbmQpOworICAgICAgICByZWFkX2NvbW1hbmRzKCk7CisgICAgICAgIGF2WzBdID0gd3JhcHBlZF9zY3JpcHRfcGF0aDsKKyAgICAgICAgYXZbMV0gPSBOVUxMOworICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZyhhdiwgbmV3Y29tbWFuZCk7CisgICAgICAgIC8qIFJldHVybnMgaWYgbm8gc2hlYmFuZyBsaW5lIC0gcGFzcyB0byBkZWZhdWx0IHByb2Nlc3NpbmcgKi8KKyAgICAgICAgY29tbWFuZCA9IG5ld2NvbW1hbmQ7CisgICAgICAgIHZhbGlkID0gRkFMU0U7CisgICAgfQorI2Vsc2UKICAgICBpZiAoYXJnYyA8PSAxKSB7CiAgICAgICAgIHZhbGlkID0gRkFMU0U7CiAgICAgICAgIHAgPSBOVUxMOwpAQCAtMTMxMCwxMyArMTQzOSw2IEBACiAgICAgZWxzZSB7CiAgICAgICAgIHAgPSBhcmd2WzFdOwogICAgICAgICBwbGVuID0gd2NzbGVuKHApOwotICAgICAgICBpZiAocFswXSAhPSBMJy0nKSB7Ci0gICAgICAgICAgICByZWFkX2NvbW1hbmRzKCk7Ci0gICAgICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZygmYXJndlsxXSwgY29tbWFuZCk7Ci0gICAgICAgIH0KLSAgICAgICAgLyogTm8gZmlsZSB3aXRoIHNoZWJhbmcsIG9yIGFuIHVucmVjb2duaXNlZCBzaGViYW5nLgotICAgICAgICAgKiBJcyB0aGUgZmlyc3QgYXJnIGEgc3BlY2lhbCB2ZXJzaW9uIHF1YWxpZmllcj8KLSAgICAgICAgICovCiAgICAgICAgIHZhbGlkID0gKCpwID09IEwnLScpICYmIHZhbGlkYXRlX3ZlcnNpb24oJnBbMV0pOwogICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbigmcFsxXSk7CkBAIC0xMzI2LDcgKzE0NDgsMTkgQEAKICAgICAgICAgICAgIGNvbW1hbmQgKz0gd2NzbGVuKHApOwogICAgICAgICAgICAgY29tbWFuZCA9IHNraXBfd2hpdGVzcGFjZShjb21tYW5kKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGZvciAoaW5kZXggPSAxOyBpbmRleCA8IGFyZ2M7ICsraW5kZXgpIHsKKyAgICAgICAgICAgICAgICBpZiAoKmFyZ3ZbaW5kZXhdICE9IEwnLScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGluZGV4IDwgYXJnYykgeworICAgICAgICAgICAgICAgIHJlYWRfY29tbWFuZHMoKTsKKyAgICAgICAgICAgICAgICBtYXliZV9oYW5kbGVfc2hlYmFuZygmYXJndltpbmRleF0sIGNvbW1hbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQorI2VuZGlmCisKICAgICBpZiAoIXZhbGlkKSB7CiAgICAgICAgIGlwID0gbG9jYXRlX3B5dGhvbihMIiIpOwogICAgICAgICBpZiAoaXAgPT0gTlVMTCkKQEAgLTEzNDQsNyArMTQ3OCw3IEBACiAgICAgICAgICAgICBmd3ByaW50ZihzdGRvdXQsIEwiXAogUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzIFZlcnNpb24gJXNcblxuIiwgdmVyc2lvbl90ZXh0KTsKICAgICAgICAgICAgIGZ3cHJpbnRmKHN0ZG91dCwgTCJcCi11c2FnZTogJXMgWyBsYXVuY2hlci1hcmd1bWVudHMgXSBzY3JpcHQgWyBzY3JpcHQtYXJndW1lbnRzIF1cblxuIiwgYXJndlswXSk7Cit1c2FnZTogJXMgWyBsYXVuY2hlci1hcmd1bWVudHMgXSBbIHB5dGhvbi1hcmd1bWVudHMgXSBzY3JpcHQgWyBzY3JpcHQtYXJndW1lbnRzIF1cblxuIiwgYXJndlswXSk7CiAgICAgICAgICAgICBmcHV0d3MoTCJcCiBMYXVuY2hlciBhcmd1bWVudHM6XG5cblwKIC0yICAgICA6IExhdW5jaCB0aGUgbGF0ZXN0IFB5dGhvbiAyLnggdmVyc2lvblxuXApkaWZmIC0tZ2l0IGEvUEMvbXN2Y3J0bW9kdWxlLmMgYi9QQy9tc3ZjcnRtb2R1bGUuYwppbmRleCAwNGQyMDg4Li4xOGRlYzZkIDEwMDY0NAotLS0gYS9QQy9tc3ZjcnRtb2R1bGUuYworKysgYi9QQy9tc3ZjcnRtb2R1bGUuYwpAQCAtMTEzLDExICsxMTMsMTIgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBtc3ZjcnRfb3Blbl9vc2ZoYW5kbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIGxvbmcgaGFuZGxlOworICAgIFB5X2ludHB0cl90IGhhbmRsZTsKICAgICBpbnQgZmxhZ3M7CiAgICAgaW50IGZkOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJsaTpvcGVuX29zZmhhbmRsZSIsICZoYW5kbGUsICZmbGFncykpCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsIF9QeV9QQVJTRV9JTlRQVFIgImk6b3Blbl9vc2ZoYW5kbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmaGFuZGxlLCAmZmxhZ3MpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZkID0gX29wZW5fb3NmaGFuZGxlKGhhbmRsZSwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L01ha2VmaWxlIGIvUEMvb3MyZW14L01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDA2MTBlLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDY3MiArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyM9PT09PT09PT09PT09PT09PT0tLS0tLS0tLS0tLS0tLS0tCi0jCi0jIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIDIuNiBmb3IgT1MvMiB1c2luZyBHQ0MvRU1YCi0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBBbmRyZXcgWmFib2xvdG55LCA8Yml0QGVsdGVjaC5ydT4gZm9yIFB5dGhvbiAxLjUuMgotIyBNb2RpZmllZCBieSBBbmRyZXcgTWFjSW50eXJlLCA8YW5keW1hY0BwY3VnLm9yZy5hdT4gZm9yIFB5dGhvbiAyLjYKLSMKLSMgVGhpcyBtYWtlZmlsZSB3YXMgZGV2ZWxvcGVkIGZvciB1c2Ugd2l0aCBbUF1HQ0MvRU1YIGNvbXBpbGVyIGFueQotIyB2ZXJzaW9uIGFuZCBHTlUgTWFrZS4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjI2LkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gV2hlbiBlbWJlZGRpbmcgUHl0aG9uIHdpdGhpbiBhbm90aGVyIHByb2dyYW0sIG9ubHkKLSMgUHl0aG9uMjYuRExMIGlzIG5lZWRlZC4gV2UgYWxzbyBidWlsZCBweXRob25fcy5hIHN0YXRpYyBsaWJyYXJ5ICh3aGljaAotIyBjYW4gYmUgY29udmVydGVkIGludG8gT01GICgubGliKSBmb3JtYXQgdXNpbmcgZW14b21mIHRvb2wpIGFuZCBib3RoCi0jIHB5dGhvbi5hIGFuZCBweXRob24ubGliIGltcG9ydCBsaWJyYXJpZXMuICBUaGVuIHRoZSBvcHRpb25hbCAKLSMgZXh0ZW5zaW9uIG1vZHVsZXMsIHdoaWNoIGFyZSBPUy8yIERMTHMgcmVuYW1lZCB3aXRoIGEgUFlEIGZpbGUgZXh0ZW5zaW9uLgotIwotIyBSZWNvbW1lbmRlZCBidWlsZCBvcmRlcjoKLSMgICBtYWtlIGRlcGVuZAkJKGlmIHlvdSBoYXZlIG1ha2VkZXApCi0jICAgbWFrZSBhbGwKLSMgICBtYWtlIGx4CQkoaWYgeW91IGhhdmUgbHhsaXRlKQotIyAgIG1ha2UgdGVzdAkJKG9wdGlvbmFsKQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjPT09PT09PT09PT09PT09PT09LS0tLS0tLS0tLS0tLS0tLQotCi0jID09PSBDb21waWxhdGlvbiBtb2RlOiBkZWJ1ZyBvciByZWxlYXNlID09PQotTU9ERT0JCW9wdGltaXplCi0jTU9ERT0JCWRlYnVnCi0jID09PSBBc3NlcnQoKSBlbmFibGVkID09PQotQVNTRVJUSU9OUz1ubwotI0FTU0VSVElPTlM9eWVzCi0jID09PSBIYXJkLXdpcmUgaW5zdGFsbGF0aW9uIGxvY2F0aW9uID09PQotRklYRURfUFlIT01FPW5vCi0jRklYRURfUFlIT01FPXllcwotCi0jID09PSBPcHRpb25hbCBtb2R1bGVzID09PQotIyBEbyB5b3UgaGF2ZSB0aGUgSW5mb1ppcCBjb21wcmVzc2lvbiBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfWkxJQj0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIFVsdHJhIEZhc3QgQ3J5cHQgKFVGQykgbGlicmFyeSBpbnN0YWxsZWQ/Ci1IQVZFX1VGQz0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIFRjbC9UayBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfVENMVEs9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBHTlUgcmVhZGxpbmUgbGlicmFyeSBpbnN0YWxsZWQ/Ci0jIE5PVEU6IEknbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgS2FpIFV3ZSBSb21tZWwncyBwb3J0IHRoYXQgCi0jICAgICAgIC0gaXMgY29tcGlsZWQgd2l0aCBtdWx0aXRocmVhZGluZyBlbmFibGVkCi0jICAgICAgIC0gaXMgbGlua2VkIHN0YXRpY2FsbHkKLSMgICAgICAgSSBoYXZlIGhhZCBubyBzdWNjZXNzIHRyeWluZyB0byB1c2UgYSBETEwgdmVyc2lvbiwgZXZlbiB3aGVuCi0jICAgICAgIGNvbXBpbGVkIHdpdGggbXVsdGl0aHJlYWRpbmcgZW5hYmxlZC4KLUhBVkVfR1JFQURMSU5FPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgQlNEIERCIGxpYnJhcnkgKHYxLjg1KSBhcyBpbmNsdWRlZCBpbiB0aGUgRU1YQlNEIHBhY2thZ2U/Ci0jIE5PVEU6IHRoaXMgbGlicmFyeSBuZWVkcyB0byBiZSByZWNvbXBpbGVkIHdpdGggYSBzdHJ1Y3R1cmUgbWVtYmVyCi0jICAgICAgIHJlbmFtZWQgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCB0aGUgbXVsdGl0aHJlYWRlZCBlcnJubyBzdXBwb3J0Ci0jICAgICAgICh0aGVyZSBpcyBhIHN0cnVjdHVyZSBtZW1iZXIgY2FsbGVkIGVycm5vLCB1c2VkIGZvciBzaGFkb3dpbmcgdGhlCi0jICAgICAgIHJlYWwgZXJybm8sIHdoaWNoIGNvbmZsaWN0cyB3aXRoIHRoZSBlcnJubyByZWRlZmluaXRpb24gb2YgLVptdCkKLUhBVkVfQlNEREI9CW5vCi0jIERvIHlvdSBoYXZlIHRoZSBuY3Vyc2VzIGxpYnJhcnkgaW5zdGFsbGVkPyBFTVgncyBCU0QgY3Vyc2VzIGFyZW4ndCBlbm91Z2ghIAotSEFWRV9OQ1VSU0VTPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgR0RCTSBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfR0RCTT0Jbm8KLSMgRG8geW91IGhhdmUgdGhlIEJaMiBjb21wcmVzc2lvbiBsaWJyYXJ5IGluc3RhbGxlZD8KLUhBVkVfQloyPQlubwotIyBEbyB5b3UgaGF2ZSB0aGUgT3BlblNTTCBsaWJyYXJpZXMgaW5zdGFsbGVkCi1IQVZFX09QRU5TU0w9CW5vCi0KLSMgPT09IGluc3RhbGwgbG9jYXRpb25zID09PQotIyBkZWZhdWx0IHZhbHVlIG9mIFBZVEhPTkhPTUUKLUxJQl9ESVI9QzovUHl0aG9uMjYKLSMgZGVmYXVsdCBpcyB0byBoYXZlIGV2ZXJ5dGhpbmcgaW4gb3IgdW5kZXIgUFlUSE9OSE9NRQotRVhFX0RJUj0kKExJQl9ESVIpCi1ETExfRElSPSQoRVhFX0RJUikKLQotCi0jID09PSBUaGUgVG9vbHMgPT09Ci1DQz0JCWdjYwotQ0ZMQUdTPQkJLVptdCAtV2FsbCAkKElOQ0xVREUpCi1DRkxBR1MuTElCPQkkKENGTEFHUykKLUxEPQkJZ2NjCi1MREZMQUdTPQktWm10IC1aY3J0ZGxsIC1MLiAtbGdjYwotTERGTEFHUy5FWEU9CSQoTERGTEFHUykKLUxERkxBR1MuRExMPQkkKExERkxBR1MpIC1aZGxsCi1MREZMQUdTLkE9CSQoTERGTEFHUykgJChMSUJTKQotQVJGTEFHUz0JY3JzCi1JTVBMSUI9CQllbXhpbXAKLUVYUExJQj0JCWVteGV4cAotRVhFT1BUPQkJZW14YmluZAotUFlfREVGPQkJLURQeV9CVUlMRF9DT1JFCi0KLQotIyBhZGp1c3QgQyBjb21waWxlciBzZXR0aW5ncyBiYXNlZCBvbiBidWlsZCBvcHRpb25zCi1pZmVxICgkKE1PREUpLGRlYnVnKQotICBDRkxBR1MrPQktZyAtTwotICBMREZMQUdTKz0JLWcKLWVsc2UKLSAgQ0ZMQUdTKz0JLXMgLU8zIC1mb21pdC1mcmFtZS1wb2ludGVyIC1tcHJvYmUKLSAgTERGTEFHUys9CS1zCi1lbmRpZgotQ0ZMQUdTKz0JJChQWV9ERUYpCi1pZmVxICgkKEFTU0VSVElPTlMpLG5vKQotICBDRkxBR1MrPQktRE5ERUJVRwotZW5kaWYKLWlmZXEgKCQoRklYRURfUFlIT01FKSx5ZXMpCi0gIENGTEFHUys9CS1EUFJFRklYPSQoRFFVT1RFKSQoTElCX0RJUikkKERRVU9URSkKLWVuZGlmCi0KLSMgV2UncmUgdXNpbmcgdGhlIE9NRiBmb3JtYXQgc2luY2UgRU1YJ3MgbGQgaGFzIGEgb2JzY3VyZSBidWcKLSMgYmVjYXVzZSBvZiB3aGljaCBpdCBzb21ldGltZXMgZmFpbHMgdG8gYnVpbGQgcmVsb2NhdGlvbnMKLSMgaW4gLmRhdGEgc2VnbWVudCB0aGF0IHBvaW50IHRvIGFub3RoZXIgLmRhdGEgbG9jYXRpb25zCi0jIChleGNlcHQgZm9yIHRoZSBmaW5hbCBsaW5raW5nIGlmIHRoZSAuRVhFcykKLU9NRj0JCXllcwotCi0jIGlmIGZvcmsoKSBzdXBwb3J0IGlzIHJlcXVpcmVkLCB0aGUgbWFpbiBleGVjdXRhYmxlIG11c3QgYmUgbGlua2VkIHdpdGggbGQKLUVYRU9NRj0JCW5vCi0KLSMgRmlsZSBleHRlbnNpb25zCi1NT0RVTEUuRVhUPQkucHlkCi1NT0RMSUIuRVhUPQkuZGxsCi1pZmVxICgkKE9NRikseWVzKQotICBPPQkJLm9iagotICBBPQkJLmxpYgotICBBUj0JCWVteG9tZmFyCi0gIENGTEFHUys9CS1ab21mCi0gIExERkxBR1MrPQktWm9tZgotICBpZmVxICgkKE1PREUpLGRlYnVnKQotICAgIEFSRkxBR1M9CS1wNjQgY3JzCi0gIGVsc2UKLSAgICBBUkZMQUdTPQktcDMyIGNycwotICBlbmRpZgotZWxzZQotICBPPQkJLm8KLSAgQT0JCS5hCi0gIEFSPQkJYXIKLWVuZGlmCi0KLQotIyA9PT0gQnVpbGQgdGltZSByZXNvdXJjZSBzZXR0aW5ncyA9PT0KLQotIyBFTVgncyBkZWZhdWx0IG51bWJlciBvZiBmaWxlIGhhbmRsZXMgaXMgNDAsIHdoaWNoIGlzIHNvbWV0aW1lcyBpbnN1ZmZpY2llbnQKLSMgKHRoZSB0ZW1wZmlsZSByZWdyZXNzaW9uIHRlc3QgdHJpZXMgdG8gY3JlYXRlIDEwMCB0ZW1wb3JhcnkgZmlsZXMpCi1ORklMRVM9MjUwCi0KLSMgVGhlIGRlZmF1bHQgc3RhY2sgc2l6ZSBmb3IgY2hpbGQgdGhyZWFkcyBpcyA2NGsgYnl0ZXMsIHdoaWNoIGlzCi0jIGluc3VmZmljaWVudCBmb3Igc29tZSBhcHBsaWNhdGlvbnMgd2hpY2ggZG8gYSBsb3Qgb2Ygd29yayBpbiB0aHJlYWRzCi0jIChzdWNoIGFzIFpvcGUsIGVzcGVjaWFsbHkgaW4gY29uanVuY3Rpb24gd2l0aCBQbG9uZSkuCi0jIE5vdGUgdGhhdCB0aGlzIHNldHRpbmcgaXMgZGlzdGluY3QgZnJvbSB0aGUgc3RhY2sgc2l6ZSBmb3IgdGhlIG1haW4KLSMgdGhyZWFkLCB3aGljaCBpcyBzZXQgdmlhIHRoZSAlLmRlZiBydWxlIGJlbG93LgotIyBFTVggZG9jdW1lbnRzIHRoYXQgdGhlIHRocmVhZCBzdGFjayBzaXplIHNob3VsZCBiZSBhdCBsZWFzdCAzMjc2OCBieXRlczsKLSMgZm9yIFpvcGUvUGxvbmUgYXQgbGVhc3QgMTI4ayBieXRlcyBpcyByZWNvbW1lbmRlZC4KLSMgVW5jb21tZW50ICYgYWRqdXN0IHRoZSBuZXh0IGxpbmUgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc3RhY2sgc2l6ZToKLSNDRkxBR1MrPQktRFRIUkVBRF9TVEFDS19TSVpFPTB4MjAwMDAKLQotCi0jID09PSBUaGUgZW52aXJvbm1lbnQgPT09Ci0KLSMgU291cmNlIGZpbGUgcGF0aHMKLVNSQ1BBVEg9LjsuLi8uLi9QeXRob247Li4vLi4vUGFyc2VyOy4uLy4uL09iamVjdHM7Li4vLi4vSW5jbHVkZTsuLi8uLi9Nb2R1bGVzCi0jIFB5dGhvbiBjb250YWlucyB0aGUgY2VudHJhbCBjb3JlLCBjb250YWluaW5nIHRoZSBidWlsdGlucyBhbmQgaW50ZXJwcmV0ZXIuCi0jIFBhcnNlciBjb250YWlucyBQeXRob24ncyBJbnRlcm5hbCBQYXJzZXIgYW5kCi0jICAgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi0jIE9iamVjdHMgY29udGFpbnMgUHl0aG9uIE9iamVjdCBUeXBlcwotIyBNb2R1bGVzIGNvbnRhaW5zIGV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotCi0jIFVuaXggc2hlbGxzIHRlbmQgdG8gdXNlICIkIiBhcyBkZWxpbWl0ZXIgZm9yIHZhcmlhYmxlIG5hbWVzLgotIyBUZXN0IGZvciB0aGlzIGJlaGF2aW91ciBhbmQgc2V0ICQoQlVDSykgdmFyaWFibGUgY29ycmVzcG9uZGlnbHkgLi4uCi1fX1RNUF9fOj0kKHNoZWxsIGVjaG8gJCQkJCkKLWlmZXEgKCQoX19UTVBfXyksJCQkJCkKLSAgQlVDSz0JCSQkCi0gIEJSTz0JCSgKLSAgQlJDPQkJKQotZWxzZQotICBCVUNLPQkJXCQkCi0gIEJSTz0JCVwoCi0gIEJSQz0JCVwpCi1lbmRpZgotIyBDb21wdXRlIHRoZSAiZG91YmxlIHF1b3RlIiB2YXJpYWJsZQotX19UTVBfXzo9JChzaGVsbCBlY2hvICIiKQotaWZlcSAoJChfX1RNUF9fKSwiIikKLSAgRFFVT1RFPQkiCi1lbHNlCi0gIERRVU9URT0JXCIKLWVuZGlmCi0KLSMgSW5jbHVkZSBwYXRocwotI0lOQ0xVREU9CS1JJChzdWJzdCA7LCAtSSwgJChTUkNQQVRIKSkKLUlOQ0xVREU9CS1JLiAtSS4uLy4uL0luY2x1ZGUKLQotIyBQYXRoIHRvIHNlYXJjaCBmb3IgLmMgZmlsZXMKLXZwYXRoICUuYyAuOy4uOyQoU1JDUEFUSCkKLQotIyBUb3Agb2YgdGhlIHBhY2thZ2UgdHJlZQotVE9QPQkJLi4vLi4vCi0KLSMgRGlyZWN0b3J5IGZvciBvdXRwdXQgZmlsZXMKLU9VVEJBU0U9CW91dC8KLU9VVD0JCSQoT1VUQkFTRSkkKE1PREUpLwotCi0jIEFkZGl0aW9uYWwgbGlicmFyaWVzCi1MSUJTPQkJLWxzb2NrZXQKLQotIyBVdGlsaXR5IG1hY3JvOiByZXBsYWNlbWVudCBmb3IgJF4KLV5ePQkJJChmaWx0ZXItb3V0ICUkQSwkXikKLSMgVXNlICQoTF4pIHRvIGxpbmsgd2l0aCBhbGwgbGlicmFyaWVzIHNwZWNpZmllZCBhcyBkZXBlbmRlbmNpZXMKLUxePQkJJChhZGRwcmVmaXggLWwsJChiYXNlbmFtZSAkKG5vdGRpciAkKGZpbHRlciAlJEEsJCspKSkpCi0KLSMgQnVpbGQgcnVsZXMKLSQoT1VUKSUkTzogJS5jCi0JJChDQykgJChDRkxBR1MuTElCKSAtYyAkPCAtbyAkQAotCi0lLmE6Ci0JJChMRCkgJChMREZMQUdTLkEpIC1vICRAICQoXl4pICQoTF4pCi0KLSUuZGxsOgotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykKLQotJS5weWQ6ICQoT1VUKSVtb2R1bGUkTyAkKE9VVCklX20uZGVmCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChQWVRIT04uSU1QTElCKSAkKExJQlMpCi0KLSUuZXhlOgotCSQoTEQpICQoTERGTEFHUy5FWEUpIC1vICRAICQoXl4pICQoTF4pCi0KLSVfbS5kZWY6Ci0JQGVjaG8gQ3JlYXRpbmcgLkRFRiBmaWxlOiAkQAotCUBlY2hvIExJQlJBUlkgJChub3RkaXIgJCopIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UgPiRACi0gICAgICAgIGlmZXEgKCQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopJChNT0RVTEUuRVhUKSksKQotCSAgQGVjaG8gREVTQ1JJUFRJT04gJChEUVVPVEUpUHl0aG9uIHN0YW5kYXJkIG1vZHVsZSAkKG5vdGRpciAkKikkKERRVU9URSkgPj4kQAotICAgICAgICBlbHNlCi0JICBAZWNobyBERVNDUklQVElPTiAkKERRVU9URSkkKERFU0NSSVBUSU9OLiQobm90ZGlyICQqKSQoTU9EVUxFLkVYVCkpJChEUVVPVEUpID4+JEAKLSAgICAgICAgZW5kaWYKLQlAZWNobyBEQVRBIE1VTFRJUExFIE5PTlNIQVJFRCA+PiRACi0JQGVjaG8gRVhQT1JUUyA+PiRACi0JQGVjaG8gCWluaXQkKG5vdGRpciAkKikgPj4kQAotCi0lLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTkFNRSAkKG5vdGRpciAkKikgJChFWEVUWVBFLiQobm90ZGlyICQqKS5leGUpID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKSQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopLmV4ZSkkKERRVU9URSkgPj4kQAotCUBlY2hvIFNUQUNLU0laRSAyMDk3MTUyID4+JEAKLQotIyBPdXRwdXQgZmlsZSBuYW1lcwotUFlUSE9OX1ZFUj0JMi42Ci1QWVRIT05fTElCPQlweXRob24zMwotUFlUSE9OLkxJQj0JJChQWVRIT05fTElCKV9zJEEKLVBZVEhPTi5JTVBMSUI9CSQoUFlUSE9OX0xJQikkQQotaWZlcSAoJChFWEVPTUYpLHllcykKLSAgUFlUSE9OLkVYRUlNUD0JJChQWVRIT04uSU1QTElCKQotICBMRE1PREUuRVhFPQkJLVpvbWYKLWVsc2UKLSAgUFlUSE9OLkVYRUlNUD0JJChQWVRIT05fTElCKS5hCi0gIExETU9ERS5FWEUgPSAKLWVuZGlmCi1QWVRIT04uRExMPQkkKFBZVEhPTl9MSUIpLmRsbAotUFlUSE9OLkRFRj0JJChQWVRIT05fTElCKS5kZWYKLVBZVEhPTi5FWEU9CXB5dGhvbi5leGUKLVBZVEhPTlBNLkVYRT0JcHl0aG9ucG0uZXhlCi1QR0VOLkVYRT0JcGdlbi5leGUKLUxJQlJBUlk9CSQoUFlUSE9OLkxJQikKLUxEX0xJQlJBUlk9CSQoUFlUSE9OLklNUExJQikKLQotIyBBZGRpdGlvbmFsIGV4ZWN1dGFibGUgcGFyYW1ldGVycwotRVhFVFlQRS4kKFBZVEhPTi5FWEUpPQkJV0lORE9XQ09NUEFUCi1FWEVUWVBFLiQoUFlUSE9OUE0uRVhFKT0JV0lORE9XQVBJCi1FWEVUWVBFLiQoUEdFTi5FWEUpPQkJV0lORE9XQ09NUEFUCi1ERVNDUklQVElPTi4kKFBZVEhPTi5FWEUpPQlQeXRob24gb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIGludGVycHJldGVyIGZvciBPUy8yCi1ERVNDUklQVElPTi4kKFBZVEhPTlBNLkVYRSk9CSQoREVTQ1JJUFRJT04uJChQWVRIT04uRVhFKSkKLURFU0NSSVBUSU9OLiQoUEdFTi5FWEUpPQlQeXRob24gb2JqZWN0LW9yaWVudGVkIHByb2dyYW1taW5nIGxhbmd1YWdlIHBhcnNlciBnZW5lcmF0b3IgZm9yIE9TLzIKLQotIyBNb2R1bGUgZGVzY3JpcHRpb25zCi1ERVNDUklQVElPTi56bGliJChNT0RVTEUuRVhUKT0JCVB5dGhvbiBFeHRlbnNpb24gRExMIGZvciBhY2Nlc3NpbmcgdGhlIEluZm9aaXAgY29tcHJlc3Npb24gbGlicmFyeQotREVTQ1JJUFRJT04uY3J5cHQkKE1PRFVMRS5FWFQpPQkJUHl0aG9uIEV4dGVuc2lvbiBETEwgaW1wbGVtZW50aW5nIHRoZSBjcnlwdCQoQlJPKSQoQlJDKSBmdW5jdGlvbgotREVTQ1JJUFRJT04uX3RraW50ZXIkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIFRjbC9UayBFbnZpcm9ubWVudAotREVTQ1JJUFRJT04ucmVhZGxpbmUkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIEdOVSBSZWFkTGluZSBsaWJyYXJ5Ci1ERVNDUklQVElPTi5fY3Vyc2VzJChNT0RMSUIuRVhUKT0JUHl0aG9uIEV4dGVuc2lvbiBETEwgZm9yIGFjY2VzcyB0byBuY3Vyc2VzIGxpYnJhcnkKLURFU0NSSVBUSU9OLnB5ZXhwYXQkKE1PRFVMRS5FWFQpPQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzIHRvIGV4cGF0IGxpYnJhcnkKLURFU0NSSVBUSU9OLmJ6MiQoTU9EVUxFLkVYVCk9CQlQeXRob24gRXh0ZW5zaW9uIERMTCBmb3IgYWNjZXNzaW5nIHRoZSBiejIgY29tcHJlc3Npb24gbGlicmFyeQotCi0jIFNvdXJjZSBmaWxlcwotU1JDLk9TMkVNWD0JY29uZmlnLmMgZGxmY24uYyBnZXRwYXRocC5jCi1TUkMuTUFJTj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCU1vZHVsZXMvZ2V0YnVpbGRpbmZvLmMgXAotCQlNb2R1bGVzL21haW4uYykKLVNSQy5NT0RVTEVTPQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJTW9kdWxlcy9nY21vZHVsZS5jIFwKLQkJTW9kdWxlcy9zaWduYWxtb2R1bGUuYyBcCi0JCU1vZHVsZXMvcG9zaXhtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX3RocmVhZG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9hcnJheW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9iaW5hc2NpaS5jIFwKLQkJTW9kdWxlcy9jbWF0aG1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fY29kZWNzbW9kdWxlLmMgXAotCQlNb2R1bGVzL2NvbGxlY3Rpb25zbW9kdWxlLmMgXAotCQlNb2R1bGVzL19jc3YuYyBcCi0JCU1vZHVsZXMvZGF0ZXRpbWVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvZXJybm9tb2R1bGUuYyBcCi0JCU1vZHVsZXMvZmNudGxtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2Z1bmN0b29sc21vZHVsZS5jIFwKLQkJTW9kdWxlcy9faGVhcHFtb2R1bGUuYyBcCi0JCU1vZHVsZXMvaW1hZ2VvcC5jIFwKLQkJTW9kdWxlcy9pdGVydG9vbHNtb2R1bGUuYyBcCi0JCU1vZHVsZXMvX2xvY2FsZW1vZHVsZS5jIFwKLQkJTW9kdWxlcy9tYXRobW9kdWxlLmMgXAotCQlNb2R1bGVzL29wZXJhdG9yLmMgXAotCQlNb2R1bGVzL19yYW5kb21tb2R1bGUuYyBcCi0JCU1vZHVsZXMvc2hhMjU2bW9kdWxlLmMgXAotCQlNb2R1bGVzL3NoYTUxMm1vZHVsZS5jIFwKLQkJTW9kdWxlcy9fc3JlLmMgXAotCQlNb2R1bGVzL19zdHJ1Y3QuYyBcCi0JCU1vZHVsZXMvc3ltdGFibGVtb2R1bGUuYyBcCi0JCU1vZHVsZXMvdGVybWlvcy5jIFwKLQkJTW9kdWxlcy90aW1lbW9kdWxlLmMgXAotCQlNb2R1bGVzL193ZWFrcmVmLmMgXAotCQlNb2R1bGVzL3h4c3VidHlwZS5jIFwKLQkJTW9kdWxlcy96aXBpbXBvcnQuYykKLVNSQy5QQVJTRTE9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvYWNjZWxlci5jIFwKLQkJUGFyc2VyL2dyYW1tYXIxLmMgXAotCQlQYXJzZXIvbGlzdG5vZGUuYyBcCi0JCVBhcnNlci9ub2RlLmMgXAotCQlQYXJzZXIvcGFyc2VyLmMgXAotCQlQYXJzZXIvcGFyc2V0b2suYyBcCi0JCVBhcnNlci9iaXRzZXQuYyBcCi0JCVBhcnNlci9tZXRhZ3JhbW1hci5jKQotU1JDLlBBUlNFMj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVBhcnNlci90b2tlbml6ZXIuYyBcCi0JCVBhcnNlci9teXJlYWRsaW5lLmMpCi1TUkMuUEFSU0VSPQkkKFNSQy5QQVJTRTEpIFwKLQkJJChTUkMuUEFSU0UyKQotU1JDLlBZVEhPTj0JJChhZGRwcmVmaXggJChUT1ApLCBcCi0JCVB5dGhvbi9QeXRob24tYXN0LmMgXAotCQlQeXRob24vYXNkbC5jIFwKLQkJUHl0aG9uL2FzdC5jIFwKLQkJUHl0aG9uL2JsdGlubW9kdWxlLmMgXAotCQlQeXRob24vZXhjZXB0aW9ucy5jIFwKLQkJUHl0aG9uL2NldmFsLmMgXAotCQlQeXRob24vY29tcGlsZS5jIFwKLQkJUHl0aG9uL2NvZGVjcy5jIFwKLQkJUHl0aG9uL2R5bmFtaWNfYW5ub3RhdGlvbnMuYyBcCi0JCVB5dGhvbi9lcnJvcnMuYyBcCi0JCVB5dGhvbi9mcm96ZW4uYyBcCi0JCVB5dGhvbi9mcm96ZW5tYWluLmMgXAotCQlQeXRob24vZnV0dXJlLmMgXAotCQlQeXRob24vZ2V0YXJncy5jIFwKLQkJUHl0aG9uL2dldGNvbXBpbGVyLmMgXAotCQlQeXRob24vZ2V0Y29weXJpZ2h0LmMgXAotCQlQeXRob24vZ2V0cGxhdGZvcm0uYyBcCi0JCVB5dGhvbi9nZXR2ZXJzaW9uLmMgXAotCQlQeXRob24vZ3JhbWluaXQuYyBcCi0JCVB5dGhvbi9pbXBvcnQuYyBcCi0JCVB5dGhvbi9pbXBvcnRkbC5jIFwKLQkJUHl0aG9uL21hcnNoYWwuYyBcCi0JCVB5dGhvbi9tb2RzdXBwb3J0LmMgXAotCQlQeXRob24vbXlzbnByaW50Zi5jIFwKLQkJUHl0aG9uL215c3RydG91bC5jIFwKLQkJUHl0aG9uL3B5YXJlbmEuYyBcCi0JCVB5dGhvbi9weWN0eXBlLmMgXAotCQlQeXRob24vcHlmcGUuYyBcCi0JCVB5dGhvbi9weXN0YXRlLmMgXAotCQlQeXRob24vcHlzdHJ0b2QuYyBcCi0JCVB5dGhvbi9weXRob25ydW4uYyBcCi0JCVB5dGhvbi9zdHJ1Y3RtZW1iZXIuYyBcCi0JCVB5dGhvbi9zeW10YWJsZS5jIFwKLQkJUHl0aG9uL3N5c21vZHVsZS5jIFwKLQkJUHl0aG9uL3RyYWNlYmFjay5jIFwKLQkJUHl0aG9uL2dldG9wdC5jIFwKLQkJUHl0aG9uL2R5bmxvYWRfc2hsaWIuYyBcCi0JCVB5dGhvbi90aHJlYWQuYykKLVNSQy5PQkpFQ1Q9CSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlPYmplY3RzL2Fic3RyYWN0LmMgXAotCQlPYmplY3RzL2Jvb2xvYmplY3QuYyBcCi0JCU9iamVjdHMvY2VsbG9iamVjdC5jIFwKLQkJT2JqZWN0cy9jbGFzc29iamVjdC5jIFwKLQkJT2JqZWN0cy9jb2JqZWN0LmMgXAotCQlPYmplY3RzL2NvZGVvYmplY3QuYyBcCi0JCU9iamVjdHMvY29tcGxleG9iamVjdC5jIFwKLQkJT2JqZWN0cy9kZXNjcm9iamVjdC5jIFwKLQkJT2JqZWN0cy9kaWN0b2JqZWN0LmMgXAotCQlPYmplY3RzL2VudW1vYmplY3QuYyBcCi0JCU9iamVjdHMvZmlsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9mbG9hdG9iamVjdC5jIFwKLQkJT2JqZWN0cy9mcmFtZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9mdW5jb2JqZWN0LmMgXAotCQlPYmplY3RzL2dlbm9iamVjdC5jIFwKLQkJT2JqZWN0cy9pdGVyb2JqZWN0LmMgXAotCQlPYmplY3RzL2xpc3RvYmplY3QuYyBcCi0JCU9iamVjdHMvbG9uZ29iamVjdC5jIFwKLQkJT2JqZWN0cy9tZXRob2RvYmplY3QuYyBcCi0JCU9iamVjdHMvbW9kdWxlb2JqZWN0LmMgXAotCQlPYmplY3RzL29iamVjdC5jIFwKLQkJT2JqZWN0cy9vYm1hbGxvYy5jIFwKLQkJT2JqZWN0cy9yYW5nZW9iamVjdC5jIFwKLQkJT2JqZWN0cy9zZXRvYmplY3QuYyBcCi0JCU9iamVjdHMvc2xpY2VvYmplY3QuYyBcCi0JCU9iamVjdHMvc3RyaW5nb2JqZWN0LmMgXAotCQlPYmplY3RzL3N0cnVjdHNlcS5jIFwKLQkJT2JqZWN0cy90dXBsZW9iamVjdC5jIFwKLQkJT2JqZWN0cy90eXBlb2JqZWN0LmMgXAotCQlPYmplY3RzL3VuaWNvZGVvYmplY3QuYyBcCi0JCU9iamVjdHMvdW5pY29kZWN0eXBlLmMgXAotCQlPYmplY3RzL3dlYWtyZWZvYmplY3QuYykKLQotU1JDLkxJQj0JJChTUkMuT1MyRU1YKSBcCi0JCSQoU1JDLk1BSU4pIFwKLQkJJChTUkMuUEFSU0VSKSBcCi0JCSQoU1JDLk9CSkVDVCkgXAotCQkkKFNSQy5QWVRIT04pIFwKLQkJJChTUkMuTU9EVUxFUykKLU9CSi5MSUI9CSQoYWRkcHJlZml4ICQoT1VUKSwkKG5vdGRpciAkKFNSQy5MSUI6LmM9JE8pKSkKLQotU1JDLlBHRU49CSQoU1JDLlBBUlNFMSkgXAotCQkkKGFkZHByZWZpeCAkKFRPUCksIFwKLQkJT2JqZWN0cy9vYm1hbGxvYy5jKSBcCi0JCSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQeXRob24vbXlzbnByaW50Zi5jKSBcCi0JCSQoYWRkcHJlZml4ICQoVE9QKSwgXAotCQlQYXJzZXIvdG9rZW5pemVyX3BnZW4uYyBcCi0JCVBhcnNlci9wZ2VubWFpbi5jIFwKLQkJUGFyc2VyL3BnZW4uYyBcCi0JCVBhcnNlci9wcmludGdyYW1tYXIuYyBcCi0JCVBhcnNlci9ncmFtbWFyLmMgXAotCQlQYXJzZXIvZmlyc3RzZXRzLmMpIFwKLQotT0JKLlBHRU49CSQoYWRkcHJlZml4ICQoT1VUKSwkKG5vdGRpciAkKFNSQy5QR0VOOi5jPSRPKSkpCi0KLVNSQy5FWEU9CSQoVE9QKU1vZHVsZXMvcHl0aG9uLmMKLVNSQy5QTUVYRT0JcHl0aG9ucG0uYwotCi0jIFB5dGhvbiBtb2R1bGVzIHRvIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCB0aGF0OgotIyAgIDEpIGhhdmUgb25seSBzaW5nbGUgc291cmNlIGZpbGUgYW5kIHJlcXVpcmUgbm8gZXh0cmEgbGlicwotIyAgIDIpIHVzZSB0aGUgc3RhbmRhcmQgbW9kdWxlIG5hbWluZyBjb252ZW50aW9uCi0jICAgICAgKHRoZSAnbW9kdWxlJyBpbiA/Pz8/P21vZHVsZS5jIGlzIGFzc3VtZWQpCi0jIC0gdGhlc2UgY2FuIGJlIGJ1aWx0IHdpdGggaW1wbGljaXQgcnVsZXMKLUVBU1lFWFRNT0RVTEVTPQlmcGVjdGwgXAotCQlmcGV0ZXN0IFwKLQkJcGFyc2VyIFwKLQkJcHdkIFwKLQkJc2VsZWN0IAotCi0jIFB5dGhvbiBtb2R1bGVzIHRvIGJlIGR5bmFtaWNhbGx5IGxvYWRlZCB0aGF0IG5lZWQgZXhwbGljaXQgYnVpbGQgcnVsZXMKLSMgIChlaXRoZXIgbXVsdGlwbGUgc291cmNlIGZpbGVzIGFuZC9vciBub24tc3RhbmRhcmQgbW9kdWxlIG5hbWluZykKLSMgIChOT1RFOiB1c2Ugc2hvcnRlbmVkIG5hbWVzIGZvciBtb2R1bGVzIGFmZmVjdGVkIGJ5IDggY2hhciBuYW1lIGxpbWl0KQotSEFSREVYVE1PRFVMRVM9CV9zb2NrZXQgXAotCQlfdGVzdGNhcCBcCi0JCXVuaWNvZGVkCi0KLSMgUHl0aG9uIG1vZHVsZXMgdGhhdCBhcmUgdXNlZCBhcyBsaWJyYXJpZXMgYW5kIHRoZXJlZm9yZSBtdXN0IHVzZQotIyBhIC5ETEwgZXh0ZW5zaW9uCi1MSUJFWFRNT0RVTEVTPQotCi0jIFB5dGhvbiBleHRlcm5hbCAoJChNT0RVTEUuRVhUKSkgbW9kdWxlcyAtIGNhbiBiZSBFQVNZIG9yIEhBUkQKLWlmZXEgKCQoSEFWRV9aTElCKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JemxpYgotZW5kaWYKLWlmZXEgKCQoSEFWRV9VRkMpLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQljcnlwdAotZW5kaWYKLWlmZXEgKCQoSEFWRV9UQ0xUSykseWVzKQotICBIQVJERVhUTU9EVUxFUys9CV90a2ludGVyCi0gIENGTEFHUys9CQktREhBU19ESVJFTlQgLUkvVGNsVGs4MC9pbmNsdWRlCi0gIFRLX0xJQlMrPQkJLUwvVGNsVGs4MC9saWIgLWx0Y2w4MCAtbHRrODAKLWVuZGlmCi1pZmVxICgkKEhBVkVfR1JFQURMSU5FKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JcmVhZGxpbmUKLWVuZGlmCi1pZmVxICgkKEhBVkVfTkNVUlNFUykseWVzKQotICBMSUJFWFRNT0RVTEVTKz0JX2N1cnNlcwotICBIQVJERVhUTU9EVUxFUys9CV9jdXJzZXNfCi1lbmRpZgotaWZlcSAoJChIQVZFX0dEQk0pLHllcykKLSAgSEFSREVYVE1PRFVMRVMrPQlfZ2RibSBfZGJtCi1lbmRpZgotaWZlcSAoJChIQVZFX0JaMikseWVzKQotICBIQVJERVhUTU9EVUxFUys9CWJ6MgotZW5kaWYKLWlmZXEgKCQoSEFWRV9PUEVOU1NMKSx5ZXMpCi0gIEhBUkRFWFRNT0RVTEVTKz0JX3NzbAotZW5kaWYKLQotIyBFeHBhdCBpcyBub3cgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgUHl0aG9uIHNvdXJjZQotSEFSREVYVE1PRFVMRVMrPQlweWV4cGF0Ci1FWFBBVC5JTkM9CS1JLi4vLi4vTW9kdWxlcy9leHBhdAotRVhQQVQuREVGPQktREhBVkVfRVhQQVRfSCAtRFhNTF9OUz0xIC1EWE1MX0RURD0xIC1EWE1MX0JZVEVfT1JERVI9MTIgXAotCQktRFhNTF9DT05URU5UX0JZVEVTPTEwMjQgLURIQVZFX01FTU1PVkU9MSAtREhBVkVfQkNPUFk9MQotRVhQQVQuU1JDPQkkKGFkZHByZWZpeCAuLi8uLi9Nb2R1bGVzL2V4cGF0LywgXAotCQl4bWxwYXJzZS5jIFwKLQkJeG1scm9sZS5jIFwKLQkJeG1sdG9rLmMpCi0KLSMgYWxsIHRoZSBleHRlcm5hbCBtb2R1bGVzCi1FWFRFUk5ETExTPQkkKGFkZHN1ZmZpeCAkKE1PRFVMRS5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoRUFTWUVYVE1PRFVMRVMpKSkKLUVYVEVSTkRMTFMrPQkkKGFkZHN1ZmZpeCAkKE1PRFVMRS5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoSEFSREVYVE1PRFVMRVMpKSkKLUVYVEVSTkRMTFMrPQkkKGFkZHN1ZmZpeCAkKE1PRExJQi5FWFQpLCQocGF0c3Vic3QgJW1vZHVsZSwlLCQoTElCRVhUTU9EVUxFUykpKQotCi0jIFRhcmdldHMKLWFsbDogICQoT1VUKSAkKFBZVEhPTi5MSUIpICQoUFlUSE9OLkRFRikgJChQWVRIT04uSU1QTElCKSAkKFBZVEhPTi5ETEwpIFwKLQlweXRob25fbm9uY29yZQotCi1weXRob25fbm9uY29yZToKLQltYWtlIFBZX0RFRj0gJChQWVRIT04uRVhFKSAkKFBZVEhPTlBNLkVYRSkgJChQR0VOLkVYRSkgJChFWFRFUk5ETExTKQotCi1jbGVhbjoKLQlybSAtZiAkKE9VVCkqCi0Jcm0gLWYgJChQWVRIT04uTElCKSAkKFBZVEhPTi5JTVBMSUIpICQoUFlUSE9OLkVYRUlNUCkgJChQWVRIT04uRExMKSBcCi0JICAkKFBZVEhPTi5FWEUpICQoUFlUSE9OUE0uRVhFKSAkKFBHRU4uRVhFKSAqJChNT0RVTEUuRVhUKSAqLmRsbAotCWZpbmQgLi4vLi4vTGliIC1uYW1lICIqLnB5W2NvXSIgLWV4ZWMgcm0ge30gIjsiCi0KLWx4OgotCUBlY2hvIFBhY2tpbmcgZXZlcnl0aGluZyB3aXRoIGx4TGl0ZS4uLgotCWx4bGl0ZSAkKFBZVEhPTi5ETEwpICQoUFlUSE9OLkVYRSkgJChQWVRIT05QTS5FWEUpICQoUEdFTi5FWEUpCi0KLWRlcGVuZDogJChPVVRCQVNFKQotCW1ha2VkZXAgLWYgJChPVVRCQVNFKXB5dGhvbi5kZXAgLW8gJChCVUNLKU8gLXAgJChCVUNLKVwoT1VUXCkgXAotCSAgLXIgLWMgJChJTkNMVURFKSAkKFNSQy5MSUIpICQoU1JDLlBHRU4pCi0KLSQoT1VUKTogJChPVVRCQVNFKQotCi0kKE9VVCkgJChPVVRCQVNFKToKLQlta2Rpci5leGUgJEAKLQotJChQWVRIT04uTElCKTogJChPQkouTElCKQotCXJtLmV4ZSAtZiAkQAotCSQoQVIpICQoQVJGTEFHUykgJEAgJF4KLQotIyB0aGUgUHl0aG9uIGNvcmUgRExMIC5kZWYgZmlsZSBuZWVkcyB0byBoYXZlIGEgbnVtYmVyIG9mIG5vbi1zdGF0aWMKLSMgc3ltYm9scyB0aGF0IGFyZW4ndCBwYXJ0IG9mIHRoZSBQeXRob24gQyBBUEkgcmVtb3ZlZCAoY29tbWVudGVkIG91dCkKLSMgZnJvbSB0aGUgRExMIGV4cG9ydCBsaXN0LgotJChQWVRIT04uREVGKTogJChQWVRIT04uTElCKQotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQoUFlUSE9OX0xJQikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSlQeXRob24gJChQWVRIT05fVkVSKSBDb3JlIERMTCQoRFFVT1RFKSA+PiRACi0JQGVjaG8gUFJPVE1PREUgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQkkKEVYUExJQikgLXUgJChQWVRIT04uTElCKSB8XAotCSBzZWQgLWUgIi9eICAuaW5pdC4qL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLnBjcmVfLiovcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuYXJyYXlfbWV0aG9kcy9zL14gLzsgLyIgXAotCQktZSAiL14gIC5mYXN0X3NhdmVfbGVhdmUvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxvcGVuL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsc3ltL3MvXiAvOyAvIiBcCi0JCS1lICIvXiAgLmRsY2xvc2Uvcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuZGxlcnJvci9zL14gLzsgLyIgXAotCQktZSAiL14gIC5fUHlfcmVfLiovcy9eIC87IC8iIFwKLQkJLWUgIi9eICAuX1B5X01ENS4qL3MvXiAvOyAvIiA+PiRACi0KLSQoUFlUSE9OLklNUExJQik6ICQoUFlUSE9OLkRFRikKLQkkKElNUExJQikgLW8gJEAgJF4KLQotJChQWVRIT04uRVhFSU1QKTogJChQWVRIT04uREVGKQotCSQoSU1QTElCKSAtbyAkQCAkXgotCi0kKFBZVEhPTi5ETEwpOiAkKE9VVClkbGxlbnRyeSRPICQoUFlUSE9OLkxJQikgJChQWVRIT04uREVGKQotCi0jIEV4cGxpY2l0IG1ha2UgdGFyZ2V0cyBmb3IgdGhlIC5FWEVzIHRvIGJlIGFibGUgdG8gdXNlIExEIHRvIGxpbmsKLSMgKHNvIHRoYXQgZm9yaygpIHdpbGwgd29yayBpZiByZXF1aXJlZCkKLQotJChQWVRIT04uRVhFKTogJChTUkMuRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoT1VUKXB5dGhvbi5kZWYKLQkkKENDKSAtWm10ICQoTERNT0RFLkVYRSkgLVpjcnRkbGwgLVdhbGwgJChJTkNMVURFKSAtTC4gLWxnY2MgLW8gJEAgJChTUkMuRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoTElCUykgJChPVVQpcHl0aG9uLmRlZgotCSQoRVhFT1BUKSAtYXEgJChQWVRIT04uRVhFKSAtaCQoTkZJTEVTKQotCi0kKFBZVEhPTlBNLkVYRSk6ICQoU1JDLlBNRVhFKSAkKFBZVEhPTi5FWEVJTVApICQoT1VUKXB5dGhvbnBtLmRlZgotCSQoQ0MpIC1abXQgJChMRE1PREUuRVhFKSAtWmNydGRsbCAtV2FsbCAkKElOQ0xVREUpIC1MLiAtbGdjYyAtbyAkQCAkKFNSQy5QTUVYRSkgJChQWVRIT04uRVhFSU1QKSAkKExJQlMpICQoT1VUKXB5dGhvbnBtLmRlZgotCSQoRVhFT1BUKSAtYXEgJChQWVRIT05QTS5FWEUpIC1oJChORklMRVMpCi0KLSQoUEdFTi5FWEUpOiAkKE9CSi5QR0VOKSAkKE9VVClwZ2VuLmRlZgotCi0jIEV4cGxpY2l0IGJ1aWxkaW5nIGluc3RydWN0aW9ucyBmb3IgdGhvc2UgZXh0ZXJuYWwgbW9kdWxlcyB0aGF0IHJlcXVpcmUgCi0jIGF3a3dhcmQgaGFuZGxpbmcgKGR1ZSBlLmcuIHRvIG5vbi1zdGQgbmFtaW5nLCBvciBtdWx0aXBsZSBzb3VyY2UgZmlsZXMpCi0jIC0gc3RhbmRhcmQgbW9kdWxlcwotCi1fc29ja2V0JChNT0RVTEUuRVhUKTogJChPVVQpc29ja2V0bW9kdWxlJE8gJChPVVQpX3NvY2tldF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi0jIF90ZXN0Y2FwaSBuZWVkcyB0byBiZSByZW5hbWVkIHRvIGJlIHVzZWZ1bAotX3Rlc3RjYXBpJChNT0RVTEUuRVhUKTogJChPVVQpX3Rlc3RjYXBpbW9kdWxlJE8gJChPVVQpX3Rlc3RjYXBpX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpCi0KLV90ZXN0Y2FwJChNT0RVTEUuRVhUKTogX3Rlc3RjYXBpJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLSMgdW5pY29kZWRhdGEgbmVlZHMgdG8gYmUgcmVuYW1lZCB0byBiZSB1c2VmdWwKLXVuaWNvZGVkYXRhJChNT0RVTEUuRVhUKTogJChPVVQpdW5pY29kZWRhdGEkTyAkKE9VVCl1bmljb2RlZGF0YV9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAkKE1PRFVMRV9MSUJTKQotCi11bmljb2RlZCQoTU9EVUxFLkVYVCk6IHVuaWNvZGVkYXRhJChNT0RVTEUuRVhUKQotCWNwICReICRACi0KLWNyeXB0JChNT0RVTEUuRVhUKTogJChPVVQpY3J5cHRtb2R1bGUkTyAkKE9VVCljcnlwdF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgLWx1ZmMgJChMSUJTKQotCi0jIFRoZSBfY3Vyc2VzX3BhbmVsIG1vZHVsZSByZXF1aXJlcyBhIGNvdXBsZSBvZiBuY3Vyc2VzIGxpYnJhcnkgZW50cnkKLSMgcG9pbnRzLCB3aGljaCBhcmUgYmVzdCBleHBvc2VkIGFzIGV4cG9ydHMgZnJvbSB0aGUgX2N1cnNlcyBtb2R1bGUgRExMCi0kKE9VVClfY3Vyc2VzX20uZGVmOgotCUBlY2hvIENyZWF0aW5nIC5ERUYgZmlsZTogJEAKLQlAZWNobyBMSUJSQVJZICQobm90ZGlyICQqKSBJTklUSU5TVEFOQ0UgVEVSTUlOU1RBTkNFID4kQAotCUBlY2hvIERFU0NSSVBUSU9OICQoRFFVT1RFKSQoREVTQ1JJUFRJT04uJChub3RkaXIgJCopJChNT0RMSUIuRVhUKSkkKERRVU9URSkgPj4kQAotCUBlY2hvIERBVEEgTVVMVElQTEUgTk9OU0hBUkVEID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQlAZWNobyAJaW5pdF9jdXJzZXMgPj4kQAotCUBlY2hvIAl3bm91dHJlZnJlc2ggPj4kQAotCUBlY2hvIAlfbmNfcGFuZWxob29rID4+JEAKLQlAZWNobyAJaXNfbGluZXRvdWNoZWQgPj4kQAotCUBlY2hvIAltdndpbiA+PiRACi0JQGVjaG8gCXN0ZHNjciA+PiRACi0JQGVjaG8gCXd0b3VjaGxuID4+JEAKLQotJChPVVQpX2N1cnNlc19wYW5lbF9tLmRlZjoKLQlAZWNobyBDcmVhdGluZyAuREVGIGZpbGU6ICRACi0JQGVjaG8gTElCUkFSWSAkKG5vdGRpciAkKikgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSA+JEAKLQlAZWNobyBERVNDUklQVElPTiAkKERRVU9URSlQeXRob24gc3RhbmRhcmQgbW9kdWxlICQobm90ZGlyICQqKSQoRFFVT1RFKSA+PiRACi0JQGVjaG8gREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgPj4kQAotCUBlY2hvIElNUE9SVFMgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLndub3V0cmVmcmVzaCA+PiRACi0JQGVjaG8gCV9jdXJzZXMuX25jX3BhbmVsaG9vayA+PiRACi0JQGVjaG8gCV9jdXJzZXMuaXNfbGluZXRvdWNoZWQgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLm12d2luID4+JEAKLQlAZWNobyAJX2N1cnNlcy5zdGRzY3IgPj4kQAotCUBlY2hvIAlfY3Vyc2VzLnd0b3VjaGxuID4+JEAKLQlAZWNobyBFWFBPUlRTID4+JEAKLQlAZWNobyAJaW5pdF9jdXJzZXNfcGFuZWwgPj4kQAotCi1fY3Vyc2VzJChNT0RMSUIuRVhUKTogJChPVVQpX2N1cnNlc21vZHVsZSRPICQoT1VUKV9jdXJzZXNfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxuY3Vyc2VzCi0KLSMgY3Vyc2VzX3BhbmVsIG5lZWRzIHRvIGJlIHJlbmFtZWQgdG8gYmUgdXNlZnVsCi1fY3Vyc2VzX3BhbmVsJChNT0RVTEUuRVhUKTogJChPVVQpX2N1cnNlc19wYW5lbCRPICQoT1VUKV9jdXJzZXNfcGFuZWxfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxwYW5lbAotCi1fY3Vyc2VzXyQoTU9EVUxFLkVYVCk6IF9jdXJzZXNfcGFuZWwkKE1PRFVMRS5FWFQpCi0JY3AgJF4gJEAKLQotX2RibSQoTU9EVUxFLkVYVCk6ICQoT1VUKV9kYm1tb2R1bGUkTyAkKE9VVClkYm1fbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxnZGJtCi0KLV9nZGJtJChNT0RVTEUuRVhUKTogJChPVVQpX2dkYm1tb2R1bGUkTyAkKE9VVClnZGJtX20uZGVmICQoUFlUSE9OLklNUExJQikKLQkkKExEKSAkKExERkxBR1MuRExMKSAtbyAkQCAkKF5eKSAkKExeKSAkKExJQlMpIC1sZ2RibQotCi0KLSMgRXhwYXQgaXMgbm93IGRpc3RyaWJ1dGVkIHdpdGggUHl0aG9uLCBzbyB1c2UgdGhlIGluY2x1ZGVkIHZlcnNpb24KLSQoT1VUKXB5ZXhwYXQkTzoJLi4vLi4vTW9kdWxlcy9weWV4cGF0LmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpIC1jIC1vICRAICReCi0kKE9VVCl4bWxwYXJzZSRPOgkuLi8uLi9Nb2R1bGVzL2V4cGF0L3htbHBhcnNlLmMKLQkkKENDKSAkKENGTEFHUykgJChFWFBBVC5JTkMpICQoRVhQQVQuREVGKSAtYyAtbyAkQCAkXgotJChPVVQpeG1scm9sZSRPOgkuLi8uLi9Nb2R1bGVzL2V4cGF0L3htbHJvbGUuYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgJChFWFBBVC5ERUYpIC1jIC1vICRAICReCi0kKE9VVCl4bWx0b2skTzoJLi4vLi4vTW9kdWxlcy9leHBhdC94bWx0b2suYwotCSQoQ0MpICQoQ0ZMQUdTKSAkKEVYUEFULklOQykgJChFWFBBVC5ERUYpIC1jIC1vICRAICReCi1weWV4cGF0JChNT0RVTEUuRVhUKTogJChPVVQpcHlleHBhdCRPICQoT1VUKXhtbHBhcnNlJE8gJChPVVQpeG1scm9sZSRPIFwKLQkJJChPVVQpeG1sdG9rJE8gJChPVVQpcHlleHBhdF9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKQotCi1yZWFkbGluZSQoTU9EVUxFLkVYVCk6ICQoT1VUKXJlYWRsaW5lJE8gJChPVVQpcmVhZGxpbmVfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxyZWFkbGluZSAtbG5jdXJzZXMKLQotI190a2ludGVyJChNT0RVTEUuRVhUKTogJChPVVQpX3RraW50ZXIkTyAkKE9VVCl0Y2xOb3RpZnkkTyAkKE9VVCl0a2FwcGluaXQkTwotX3RraW50ZXIkKE1PRFVMRS5FWFQpOiAkKE9VVClfdGtpbnRlciRPICQoT1VUKXRjbE5vdGlmeSRPIFwKLQkJJChPVVQpX3RraW50ZXJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgJChUS19MSUJTKQotCi16bGliJChNT0RVTEUuRVhUKTogJChPVVQpemxpYm1vZHVsZSRPICQoT1VUKXpsaWJfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWx6Ci0KLWJ6MiQoTU9EVUxFLkVYVCk6ICQoT1VUKWJ6Mm1vZHVsZSRPICQoT1VUKWJ6Ml9tLmRlZiAkKFBZVEhPTi5JTVBMSUIpCi0JJChMRCkgJChMREZMQUdTLkRMTCkgLW8gJEAgJCheXikgJChMXikgJChMSUJTKSAtbGJ6MgotCi1fc3NsJChNT0RVTEUuRVhUKTogJChPVVQpX3NzbCRPICQoT1VUKV9zc2xfbS5kZWYgJChQWVRIT04uSU1QTElCKQotCSQoTEQpICQoTERGTEFHUy5ETEwpIC1vICRAICQoXl4pICQoTF4pICQoTElCUykgLWxzc2wgLWxjcnlwdG8KLQotIyB0aGUgdGVzdCB0YXJnZXQKLXRlc3Q6Ci0JLWZpbmQgLi4vLi4vTGliIC1uYW1lICIqLnB5W2NvXSIgLWV4ZWMgcm0ge30gIjsiCi0JLS4vcHl0aG9uIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1sIC11ICJuZXR3b3JrIgotCS4vcHl0aG9uIC1FIC4uLy4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1sIC11ICJuZXR3b3JrIgotCi0taW5jbHVkZSAkKE9VVEJBU0UpcHl0aG9uLmRlcApkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L1JFQURNRS5vczJlbXggYi9QQy9vczJlbXgvUkVBRE1FLm9zMmVteApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjFjZjZkZi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvUkVBRE1FLm9zMmVteAorKysgL2Rldi9udWxsCkBAIC0xLDY2MyArMCwwIEBACi1UaGlzIGlzIGEgcG9ydCBvZiBQeXRob24gMi42IHRvIE9TLzIgdXNpbmcgdGhlIEVNWCBkZXZlbG9wbWVudCB0b29scwotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1XaGF0J3MgbmV3IHNpbmNlIHRoZSBwcmV2aW91cyByZWxlYXNlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUFub3RoZXIgZGF5LCBhbm90aGVyIHZlcnNpb24uLi4KLQotCi1MaWNlbnNlcyBhbmQgaW5mbyBhYm91dCBQeXRob24gYW5kIEVNWAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGxlYXNlIHJlYWQgdGhlIGZpbGUgUkVBRE1FLlB5dGhvbi0yLjYgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlIGZvciAKLWluZm9ybWF0aW9uIGFib3V0IFB5dGhvbiAyLjYuICBUaGlzIGZpbGUgaXMgdGhlIFJFQURNRSBmaWxlIGZyb20gdGhlIAotUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uIGF2YWlsYWJsZSB2aWEgaHR0cDovL3d3dy5weXRob24ub3JnLyAKLWFuZCBpdHMgbWlycm9ycy4gIFRoZSBmaWxlIExJQ0VOQ0UuUHl0aG9uLTIuNiBpcyB0aGUgdGV4dCBvZiB0aGUgTGljZW5jZSAKLWZyb20gdGhlIFB5dGhvbiAyLjYgc291cmNlIGRpc3RyaWJ1dGlvbi4KLQotTm90ZSB0aGF0IHRoZSBFTVggcGFja2FnZSB0aGF0IHRoaXMgcGFja2FnZSBkZXBlbmRzIG9uIGlzIHJlbGVhc2VkIHVuZGVyIAotdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLiAgUGxlYXNlIHJlZmVyIHRvIHRoZSBkb2N1bWVudGF0aW9uIAotYWNjb21wYW55aW5nIHRoZSBFTVggUnVudGltZSBsaWJyYXJpZXMgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIAotaW1wbGljYXRpb25zIG9mIHRoaXMuICBBIGNvcHkgb2YgdmVyc2lvbiAyIG9mIHRoZSBHUEwgaXMgaW5jbHVkZWQgYXMgdGhlIAotZmlsZSBDT1BZSU5HLmdwbDIuCi0KLVJlYWRsaW5lIGFuZCBHREJNIGFyZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZS4gIEkgdGhpbmsgCi1FYmVyaGFyZCBNYXR0ZXMnIHBvcnRpbmcgY2hhbmdlcyB0byBCU0QgREIgdjEuODUgYXJlIGFsc28gR1BMJ2VkIChCU0QgREIgCi1pdHNlbGYgaXMgQlNEIExpY2VuY2VkKS4gIG5jdXJzZXMgYW5kIGV4cGF0IGFwcGVhciB0byBiZSBjb3ZlcmVkIGJ5IE1JVCAKLXN0eWxlIGxpY2VuY2VzIC0gcGxlYXNlIHJlZmVyIHRvIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9ucyBmb3IgbW9yZSBkZXRhaWwuICAKLXpsaWIgaXMgZGlzdHJpYnV0YWJsZSB1bmRlciBhIHZlcnkgZnJlZSBsaWNlbnNlLiAgR05VIFVGQyBpcyB1bmRlciB0aGUgCi1HTlUgTEdQTCAoc2VlIGZpbGUgQ09QWUlORy5saWIpLgotCi1NeSBwYXRjaGVzIHRvIHRoZSBQeXRob24tMi54IHNvdXJjZSBkaXN0cmlidXRpb25zLCBhbmQgYW55IG90aGVyIHBhY2thZ2VzIAotdXNlZCBpbiB0aGlzIHBvcnQsIGFyZSBwbGFjZWQgaW4gdGhlIHB1YmxpYyBkb21haW4uCi0KLVRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgotSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGZyb20gdGhlIAotdXNlIG9mIHRoZSBzb2Z0d2FyZS4KLQotSSBkbyBob3BlIGhvd2V2ZXIgdGhhdCBpdCBwcm92ZXMgdXNlZnVsIHRvIHNvbWVvbmUuCi0KLQotT3RoZXIgcG9ydHMKLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGhhdmUgYmVlbiBwb3J0cyBvZiBwcmV2aW91cyB2ZXJzaW9ucyBvZiBQeXRob24gdG8gT1MvMi4KLQotVGhlIGJlc3Qga25vd24gd291bGQgYmUgdGhhdCBieSBKZWZmIFJ1c2gsIG1vc3QgcmVjZW50bHkgb2YgdmVyc2lvbiAKLTEuNS4yLiAgSmVmZiB1c2VkIElCTSdzIFZpc3VhbCBBZ2UgQysrICh2MykgZm9yIGhpcyBwb3J0cywgYW5kIGhpcyAKLXBhdGNoZXMgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHRoZSBQeXRob24gMi42IHNvdXJjZSBkaXN0cmlidXRpb24uCi0KLUFuZHkgWmFib2xvdG55IGltcGxlbWVudGVkIGEgcG9ydCBvZiBQeXRob24gdjEuNS4yIHVzaW5nIHRoZSBFTVggCi1kZXZlbG9wbWVudCB0b29scy4gIEhpcyBwYXRjaGVzIGFnYWluc3QgdGhlIFB5dGhvbiB2MS41LjIgc291cmNlIAotZGlzdHJpYnV0aW9uIGhhdmUgYmVjb21lIHRoZSBjb3JlIG9mIHRoaXMgcG9ydCwgYW5kIHdpdGhvdXQgaGlzIGVmZm9ydHMgCi10aGlzIHBvcnQgd291bGRuJ3QgZXhpc3QuICBBbmR5J3MgcG9ydCBhbHNvIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIAotY29tcGlsZWQgd2l0aCBoaXMgcG9ydCBvZiBnY2MgMi45NS4yIHRvIEVNWCwgd2hpY2ggSSBoYXZlIGJ1dCBoYXZlIAotY2hvc2VuIG5vdCB0byB1c2UgZm9yIHRoZSBiaW5hcnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMgcG9ydCAoc2VlIGl0ZW0gMTYgCi1vZiB0aGUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBzZWN0aW9uIGJlbG93KS4KLQotSXQgaXMgcG9zc2libGUgdG8gaGF2ZSB0aGVzZSBlYXJsaWVyIHBvcnRzIHN0aWxsIHVzYWJsZSBhZnRlciBpbnN0YWxsaW5nIAotdGhpcyBwb3J0IC0gc2VlIHRoZSBSRUFETUUub3MyZW14Lm11bHRpcGxlX3ZlcnNpb25zIGZpbGUsIGNvbnRyaWJ1dGVkIGJ5Ci1EciBEYXZpZCBNZXJ0eiwgZm9yIGEgc3VnZ2VzdGVkIGFwcHJvYWNoIHRvIGFjaGlldmluZyB0aGlzLgotCi0KLVNvZnR3YXJlIHJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoaXMgcGFja2FnZSByZXF1aXJlcyB0aGUgRU1YIFJ1bnRpbWUgcGFja2FnZSwgYXZhaWxhYmxlIGZyb20gdGhlIAotSG9iYmVzIChodHRwOi8vaG9iYmVzLm5tc3UuZWR1LykgYW5kIExFTyAoaHR0cDovL2FyY2hpdi5sZW8ub3JnLykgCi1hcmNoaXZlcyBvZiBPUy8yIHNvZnR3YXJlLiAgSSBoYXZlIHVzZWQgRU1YIHZlcnNpb24gMC45ZCBmaXgwNCBpbiAKLWRldmVsb3BpbmcgdGhpcyBwb3J0LgotCi1NeSBkZXZlbG9wbWVudCBzeXN0ZW0gaXMgcnVubmluZyBPUy8yIHY0IHdpdGggZml4cGFjayAxMi4KLQotM3JkIHBhcnR5IHNvZnR3YXJlIHdoaWNoIGhhcyBiZWVuIGxpbmtlZCBpbnRvIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzOgotLSBuY3Vyc2VzICAgICAgKHNlZSBodHRwOi8vZGlja2V5Lmhpcy5jb20vIGZvciBtb3JlIGluZm8sIHY1LjIpCi0tIEdOVSBSZWFkbGluZSAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIEhvYmJlcyBvciBMRU8sIHYyLjEpCi0tIEdOVSBHREJNICAgICAoS2FpIFV3ZSBSb21tZWwncyBwb3J0IGF2YWlsYWJsZSBmcm9tIEhvYmJlcyBvciBMRU8sIHYxLjcuMykKLS0gemxpYiAgICAgICAgIChkZXJpdmVkIGZyb20gSHVuZy1DaGkgQ2h1J3MgcG9ydCBvZiB2MS4xLjMsIHYxLjEuNCkKLS0gZXhwYXQgICAgICAgIChkaXN0cmlidXRlZCB3aXRoIFB5dGhvbiwgdjEuOTUuNikKLS0gR05VIFVGQyAgICAgIChLYWkgVXdlIFJvbW1lbCdzIHBvcnQgYXZhaWxhYmxlIGZyb20gTEVPLCB2Mi4wLjQpCi0KLQotQWJvdXQgdGhpcyBwb3J0Ci0tLS0tLS0tLS0tLS0tLS0KLQotSSBoYXZlIGF0dGVtcHRlZCB0byBtYWtlIHRoaXMgcG9ydCBhcyBjb21wbGV0ZSBhbmQgZnVuY3Rpb25hbCBhcyBJIGNhbiwgCi1ub3R3aXRoc3RhbmRpbmcgdGhlIGlzc3VlcyBpbiB0aGUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBzZWN0aW9uIGJlbG93LgotCi1Db3JlIGNvbXBvbmVudHM6Ci0KLVB5dGhvbi5leGUgaXMgbGlua2VkIGFzIGFuIGEub3V0IGV4ZWN1dGFibGUsIGllIHVzaW5nIEVNWCBtZXRob2QgRTEgCi10byBjb21waWxlICYgbGluayB0aGUgZXhlY3V0YWJsZS4gIFRoaXMgaXMgc28gdGhhdCBmb3JrKCkgd29ya3MgKHNlZSAKLSJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAxKS4KLQotUHl0aG9uMjYuZGxsIGlzIGNyZWF0ZWQgYXMgYSBub3JtYWwgT01GIERMTCwgd2l0aCBhbiBPTUYgaW1wb3J0IAotbGlicmFyeSBhbmQgbW9kdWxlIGRlZmluaXRpb24gZmlsZS4gIFRoZXJlIGlzIGFsc28gYW4gYS5vdXQgKC5hKSBpbXBvcnQgCi1saWJyYXJ5IHRvIHN1cHBvcnQgbGlua2luZyB0aGUgRExMIHRvIGEub3V0IGV4ZWN1dGFibGVzLiAgVGhlIERMTCAKLXJlcXVpcmVzIHRoZSBFTVggcnVudGltZSBETExzLgotCi1UaGlzIHBvcnQgaGFzIGJlZW4gYnVpbHQgd2l0aCBjb21wbGV0ZSBzdXBwb3J0IGZvciBtdWx0aXRocmVhZGluZy4KLQotTW9kdWxlczoKLQotV2l0aCB0aGUgZXhjZXB0aW9uIG9mIG1vZHVsZXMgdGhhdCBoYXZlIGEgc2lnbmlmaWNhbnQgY29kZSBzaXplLCBvciBhcmUgCi1ub3QgcmVjb21tZW5kZWQgb3IgZGVzaXJlZCBmb3Igbm9ybWFsIHVzZSwgdGhlIHN0YW5kYXJkIG1vZHVsZXMgYXJlIG5vdyAKLWJ1aWx0IGludG8gdGhlIGNvcmUgRExMIHJhdGhlciB0aGFuIGNvbmZpZ3VyZWQgYXMgZHluYW1pY2FsbHkgbG9hZGFibGUgCi1tb2R1bGVzLiAgVGhpcyBpcyBmb3IgYm90aCByZWFzb25zIG9mIHBlcmZvcm1hbmNlIChzdGFydHVwIHRpbWUpIGFuZCAKLW1lbW9yeSB1c2UgKGxvdHMgb2Ygc21hbGwgRExMcyBmcmFnbWVudCB0aGUgYWRkcmVzcyBzcGFjZSkuCi0KLUkgaGF2ZW4ndCB5ZXQgY2hhbmdlZCB0aGUgYnVpbGRpbmcgb2YgUHl0aG9uJ3MgZHluYW1pY2FsbHkgbG9hZGFibGUgCi1tb2R1bGVzIG92ZXIgdG8gdXNpbmcgdGhlIERpc3RVdGlscy4KLQotU2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgaXRlbSAzIGZvciBub3RlcyBhYm91dCB0aGUgZmNudGwgbW9kdWxlLCBhbmQgCi0iWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMTAgZm9yIG5vdGVzIGFib3V0IHRoZSBwd2QgYW5kIGdycCBtb2R1bGVzLgotCi1UaGlzIHBvcnQgc3VwcG9ydHMgY2FzZSBzZW5zaXRpdmUgbW9kdWxlIGltcG9ydCBzZW1hbnRpY3MsIG1hdGNoaW5nIAotdGhlIFdpbmRvd3MgcmVsZWFzZS4gIFRoaXMgY2FuIGJlIGRlYWN0aXZhdGVkIGJ5IHNldHRpbmcgdGhlIFBZVEhPTkNBU0VPSyAKLWVudmlyb25tZW50IHZhcmlhYmxlICh0aGUgdmFsdWUgZG9lc24ndCBtYXR0ZXIpIC0gc2VlICJZT1UgSEFWRSBCRUVOIFdBUk5FRCIgCi1pdGVtIDEyLgotCi1PcHRpb25hbCBtb2R1bGVzOgotCi1XaGVyZSBJJ3ZlIGJlZW4gYWJsZSB0byBsb2NhdGUgdGhlIHJlcXVpcmVkIDNyZCBwYXJ0eSBwYWNrYWdlcyBhbHJlYWR5IAotcG9ydGVkIHRvIE9TLzIsIEkndmUgYnVpbHQgYW5kIGluY2x1ZGVkIHRoZW0uCi0KLVRoZXNlIGluY2x1ZGUgbmN1cnNlcyAoX2N1cnNlcywgX2N1cnNlc19wYW5lbCksCi1HTlUgR0RCTSAoZ2RibSwgZGJtKSwgemxpYiAoemxpYiksIEdOVSBSZWFkbGluZSAocmVhZGxpbmUpLCBhbmQgR05VIFVGQyAKLShjcnlwdCkuCi0KLUV4cGF0IGlzIG5vdyBpbmNsdWRlZCBpbiB0aGUgUHl0aG9uIHJlbGVhc2Ugc291cmNlYmFsbCwgYW5kIHRoZSBweWV4cGF0IAotbW9kdWxlIGlzIGFsd2F5cyBidWlsdC4KLQotSSBoYXZlIGJ1aWx0IHRoZXNlIG1vZHVsZXMgc3RhdGljYWxseSBsaW5rZWQgYWdhaW5zdCB0aGUgM3JkIHBhcnR5IAotbGlicmFyaWVzLiAgVW5mb3J0dW5hdGVseSBteSBhdHRlbXB0cyB0byB1c2UgdGhlIGRsbCB2ZXJzaW9uIG9mIEdOVSAKLXJlYWRsaW5lIGhhdmUgYmVlbiBhIGRpc21hbCBmYWlsdXJlLCBpbiB0aGF0IHdoZW4gdGhlIGR5bmFtaWNhbGx5IAotbGlua2VkIHJlYWRsaW5lIG1vZHVsZSBpcyBhY3RpdmUgb3RoZXIgbW9kdWxlcyBpbW1lZGlhdGVseSBwcm92b2tlIGEgCi1jb3JlIGR1bXAgd2hlbiBpbXBvcnRlZC4KLQotT25seSB0aGUgQlNEIERCIHBhY2thZ2UgKHBhcnQgb2YgdGhlIEJTRCBwYWNrYWdlIGRpc3RyaWJ1dGVkIHdpdGggRU1YKSAKLW5lZWRzIHNvdXJjZSBtb2RpZmljYXRpb25zIHRvIGJlIHVzZWQgZm9yIHRoaXMgcG9ydCwgcGVydGFpbmluZyB0byB1c2UgCi1vZiBlcnJubyB3aXRoIG11bHRpdGhyZWFkaW5nLgotCi1UaGUgb3RoZXIgcGFja2FnZXMsIGV4Y2VwdCBmb3IgbmN1cnNlcyBhbmQgemxpYiwgbmVlZGVkIE1ha2VmaWxlIGNoYW5nZXMgCi1mb3IgbXVsdGl0aHJlYWRpbmcgc3VwcG9ydCBidXQgbm8gc291cmNlIGNoYW5nZXMuCi0KLVRoZSBfY3Vyc2VzX3BhbmVsIG1vZHVsZSBpcyBhIHBvdGVudGlhbCBwcm9ibGVtIC0gc2VlICJZT1UgSEFWRSBCRUVOIAotV0FSTkVEIiBpdGVtIDEzLgotCi1VcHN0cmVhbSBzb3VyY2UgcGF0Y2hlczoKLQotTm8gdXBkYXRlcyB0byB0aGUgUHl0aG9uIDIuNiByZWxlYXNlIGhhdmUgYmVjb21lIGF2YWlsYWJsZS4KLQotTGlicmFyeSBhbmQgb3RoZXIgZGlzdHJpYnV0ZWQgUHl0aG9uIGNvZGU6Ci0KLVRoZSBQeXRob24gc3RhbmRhcmQgbGlicmFyeSBsaXZlcyBpbiB0aGUgTGliIGRpcmVjdG9yeS4gIEFsbCB0aGUgc3RhbmRhcmQgCi1saWJyYXJ5IGNvZGUgaW5jbHVkZWQgd2l0aCB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uIGlzIGluY2x1ZGVkIAotaW4gdGhlIGJpbmFyeSBhcmNoaXZlLCB3aXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIGRvcy04eDMgYW5kIHRraW50ZXIgCi1zdWJkaXJlY3RvcmllcyB3aGljaCBoYXZlIGJlZW4gb21pdHRlZCB0byByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGJpbmFyeSAKLWFyY2hpdmUgLSB0aGUgZG9zLTh4MyBjb21wb25lbnRzIGFyZSB1bm5lY2Vzc2FyeSBkdXBsaWNhdGVzIGFuZCBUa2ludGVyIAotaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIHBvcnQgKHlldCkuICBBbGwgdGhlIHBsYXQtKiBzdWJkaXJlY3RvcmllcyBpbiB0aGUgCi1zb3VyY2UgZGlzdHJpYnV0aW9uIGhhdmUgYWxzbyBiZWVuIG9taXR0ZWQsIGV4Y2VwdCBmb3IgdGhlIHBsYXQtb3MyZW14IAotc3ViZGlyZWN0b3J5LgotCi1UaGUgVG9vbHMgYW5kIERlbW8gZGlyZWN0b3JpZXMgY29udGFpbiBhIGNvbGxlY3Rpb24gb2YgUHl0aG9uIHNjcmlwdHMuICAKLVRvIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgYmluYXJ5IGFyY2hpdmUsIHRoZSBEZW1vL3NnaSwgRGVtby9UaXgsIAotRGVtby90a2ludGVyLCBUb29scy9hdWRpb3B5IGFuZCBUb29scy9JRExFIHN1YmRpcmVjdG9yaWVzIGhhdmUgYmVlbiAKLW9taXR0ZWQgYXMgbm90IGJlaW5nIHN1cHBvcnRlZCBieSB0aGlzIHBvcnQuICBUaGUgTWlzYyBkaXJlY3RvcnkgaGFzIAotYWxzbyBiZWVuIG9taXR0ZWQuCi0KLUFsbCBzdWJkaXJlY3RvcmllcyBvbWl0dGVkIGZyb20gdGhlIGJpbmFyeSBhcmNoaXZlIGNhbiBiZSByZWNvbnN0aXR1dGVkIAotZnJvbSB0aGUgUHl0aG9uIDIuNiBzb3VyY2UgZGlzdHJpYnV0aW9uLCBpZiBkZXNpcmVkLgotCi1TdXBwb3J0IGZvciBidWlsZGluZyBQeXRob24gZXh0ZW5zaW9uczoKLQotVGhlIENvbmZpZyBzdWJkaXJlY3RvcnkgY29udGFpbnMgdGhlIGZpbGVzIGRlc2NyaWJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gCi1vZiB0aGUgaW50ZXJwcmV0ZXIgYW5kIHRoZSBNYWtlZmlsZSwgaW1wb3J0IGxpYnJhcmllcyBmb3IgdGhlIFB5dGhvbiBETEwsIAotYW5kIHRoZSBtb2R1bGUgZGVmaW5pdGlvbiBmaWxlIHVzZWQgdG8gY3JlYXRlIHRoZSBQeXRob24gRExMLiAgVGhlIAotSW5jbHVkZSBzdWJkaXJlY3RvcnkgY29udGFpbnMgYWxsIHRoZSBzdGFuZGFyZCBQeXRob24gaGVhZGVyIGZpbGVzIAotbmVlZGVkIGZvciBidWlsZGluZyBleHRlbnNpb25zLgotCi1BcyBJIGRvbid0IGhhdmUgdGhlIFZpc3VhbCBBZ2UgQysrIGNvbXBpbGVyLCBJJ3ZlIG1hZGUgbm8gYXR0ZW1wdCB0byAKLWhhdmUgdGhpcyBwb3J0IHN1cHBvcnQgZXh0ZW5zaW9ucyBidWlsdCB3aXRoIHRoYXQgY29tcGlsZXIuCi0KLQotUGFja2FnaW5nCi0tLS0tLS0tLS0KLQotVGhpcyBwb3J0IGlzIHBhY2thZ2VkIGFzIGZvbGxvd3M6Ci0tIHB5dGhvbi0yLjYtb3MyZW14LWJpbi0wMz8/Pz8uemlwICAoYmluYXJpZXMsIGxpYnJhcnkgbW9kdWxlcykKLS0gcHl0aG9uLTIuNi1vczJlbXgtc3JjLTAzPz8/PyAgICAgIChwYXRjaGVzK21ha2VmaWxlcyBmb3Igbm9uLVB5dGhvbiBjb2RlKQotCi1BcyBhbGwgdGhlIFB5dGhvbiBzcGVjaWZpYyBwYXRjaGVzIGZvciB0aGUgcG9ydCBhcmUgbm93IHBhcnQgb2YgdGhlIAotUHl0aG9uIHJlbGVhc2UgdGFyYmFsbCwgb25seSB0aGUgcGF0Y2hlcyBhbmQgbWFrZWZpbGVzIGludm9sdmVkIGluIAotYnVpbGRpbmcgZXh0ZXJuYWwgbGlicmFyaWVzIGZvciBvcHRpb25hbCBleHRlbnNpb25zIGFyZSBpbmNsdWRlZCBpbiAKLXRoZSBzb3VyY2UgYXJjaGl2ZS4KLQotRG9jdW1lbnRhdGlvbiBmb3IgdGhlIFB5dGhvbiBsYW5ndWFnZSwgYXMgd2VsbCBhcyB0aGUgUHl0aG9uIDIuNiAKLXNvdXJjZSBkaXN0aWJ1dGlvbiwgY2FuIGJlIG9idGFpbmVkIGZyb20gdGhlIFB5dGhvbiB3ZWJzaXRlIAotKGh0dHA6Ly93d3cucHl0aG9uLm9yZy8pIG9yIHRoZSBQeXRob24gcHJvamVjdCBwYWdlcyBhdCBTb3VyY2Vmb3JnZSAKLShodHRwOi8vc2YubmV0L3Byb2plY3RzL3B5dGhvbi8pLgotCi0KLUluc3RhbGxhdGlvbgotLS0tLS0tLS0tLS0tCi0KLU9idGFpbiBhbmQgaW5zdGFsbCwgYXMgcGVyIHRoZSBpbmNsdWRlZCBpbnN0cnVjdGlvbnMsIHRoZSBFTVggcnVudGltZSAKLXBhY2thZ2UuCi0KLVVucGFjayB0aGlzIGFyY2hpdmUsIHByZXNlcnZpbmcgdGhlIHN1YmRpcmVjdG9yaWVzLCBpbiB0aGUgcm9vdCBkaXJlY3RvcnkgCi1vZiB0aGUgZHJpdmUgd2hlcmUgeW91IHdhbnQgUHl0aG9uIHRvIGxpdmUuCi0KLUFkZCB0aGUgUHl0aG9uIGRpcmVjdG9yeSAoZWcgQzpcUHl0aG9uMjYpIHRvIHRoZSBQQVRIIGFuZCBMSUJQQVRIIAotdmFyaWFibGVzIGluIENPTkZJRy5TWVMuCi0KLVlvdSBzaG91bGQgdGhlbiBzZXQgdGhlIFBZVEhPTkhPTUUgYW5kIFBZVEhPTlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGVzIAotaW4gQ09ORklHLlNZUy4KLQotUFlUSE9OSE9NRSBzaG91bGQgYmUgc2V0IHRvIFB5dGhvbidzIHRvcCBsZXZlbCBkaXJlY3RvcnkuICBQWVRIT05QQVRIIAotc2hvdWxkIGJlIHNldCB0byB0aGUgc2VtaWNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIHByaW5jaXBhbCBQeXRob24gbGlicmFyeSAKLWRpcmVjdG9yaWVzLgotSSB1c2U6Ci0gIFNFVCBQWVRIT05IT01FPUY6L1B5dGhvbjI2Ci0gIFNFVCBQWVRIT05QQVRIPUY6L1B5dGhvbjI2L0xpYjtGOi9QeXRob24yNi9MaWIvcGxhdC1vczJlbXg7Ci0gICAgICAgICAgICAgICAgIEY6L1B5dGhvbjI2L0xpYi9saWItZHlubG9hZDtGOi9QeXRob24yNi9MaWIvc2l0ZS1wYWNrYWdlcwotCi1OT1RFITogIHRoZSBQWVRIT05QQVRIIHNldHRpbmcgYWJvdmUgaXMgbGluZXdyYXBwZWQgZm9yIHRoaXMgZG9jdW1lbnQgLSBpdCAKLXNob3VsZCBhbGwgYmUgb24gb25lIGxpbmUgaW4gQ09ORklHLlNZUyEKLQotSWYgeW91IHdpc2ggdG8gdXNlIHRoZSBjdXJzZXMgbW9kdWxlLCB5b3Ugc2hvdWxkIHNldCB0aGUgVEVSTSBhbmQgVEVSTUlORk8gCi1lbnZpcm9ubWVudCB2YXJpYWJsZXMgYXBwcm9wcmlhdGVseS4KLQotSWYgeW91IGRvbid0IGFscmVhZHkgaGF2ZSBuY3Vyc2VzIGluc3RhbGxlZCwgSSBoYXZlIGluY2x1ZGVkIGEgY29weSBvZiB0aGUgCi1FTVggc3Vic2V0IG9mIHRoZSBUZXJtaW5mbyBkYXRhYmFzZSBpbmNsdWRlZCB3aXRoIHRoZSBuY3Vyc2VzLTUuMiBzb3VyY2UgCi1kaXN0cmlidXRpb24uICBUaGlzIGNhbiBiZSB1c2VkIGJ5IHNldHRpbmcgdGhlIFRFUk1JTkZPIGVudmlyb25tZW50IHZhcmlhYmxlIAotdG8gdGhlIHBhdGggb2YgdGhlIFRlcm1pbmZvIHN1YmRpcmVjdG9yeSBiZWxvdyB0aGUgUHl0aG9uIGhvbWUgZGlyZWN0b3J5LgotT24gbXkgc3lzdGVtIHRoaXMgbG9va3MgbGlrZToKLSAgU0VUIFRFUk1JTkZPPUY6L1B5dGhvbjI2L1Rlcm1pbmZvCi0KLUZvciB0aGUgVEVSTSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgSSB3b3VsZCB0cnkgb25lIG9mIHRoZSBmb2xsb3dpbmc6Ci0gIFNFVCBURVJNPWFuc2kKLSAgU0VUIFRFUk09b3MyCi0gIFNFVCBURVJNPXdpbmRvdwotCi1Zb3Ugd2lsbCBoYXZlIHRvIHJlYm9vdCB5b3VyIHN5c3RlbSBmb3IgdGhlc2UgY2hhbmdlcyB0byBDT05GSUcuU1lTIHRvIHRha2UgCi1lZmZlY3QuCi0KLUlmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYWxsIHRoZSBpbmNsdWRlZCBQeXRob24gbGlicmFyeSBtb2R1bGVzIHRvIGJ5dGVjb2RlLCAKLXlvdSBjYW4gY2hhbmdlIGludG8gdGhlIFB5dGhvbiBob21lIGRpcmVjdG9yeSBhbmQgcnVuIHRoZSBDT01QSUxFQUxMLkNNRCAKLWJhdGNoIGZpbGUuCi0KLVlvdSBjYW4gZXhlY3V0ZSB0aGUgcmVncmVzc2lvbiB0ZXN0cyBpbmNsdWRlZCB3aXRoIHRoZSBQeXRob24gMi42IHNvdXJjZSAKLWRpc3RyaWJ1dGlvbiBieSBjaGFuZ2luZyB0byB0aGUgUHl0aG9uIDIuNiBob21lIGRpcmVjdG9yeSBhbmQgZXhlY3V0aW5nIHRoZSAKLVJFR1JURVNULkNNRCBiYXRjaCBmaWxlLiAgVGhlIGZvbGxvd2luZyB0ZXN0cyBhcmUga25vd24gdG8gZmFpbCBhdCB0aGlzIAotdGltZToKLS0gdGVzdF9taGxpYiAoSSBkb24ndCBrbm93IG9mIGFueSBwb3J0IG9mIE1IIHRvIE9TLzIpOwotLSB0ZXN0X3N0cnB0aW1lIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIyKTsKLS0gdGVzdF90aW1lIChzZWUgIllPVSBIQVZFIEJFRU4gV0FSTkVEIiBpdGVtIDIyKTsKLS0gdGVzdF9wb3NpeHBhdGggKHNlZSAiWU9VIEhBVkUgQkVFTiBXQVJORUQiIGl0ZW0gMjMpLgotCi1Ob3RlIHRoYXQgc29tZSBvZiB0aGUgbmV0d29yayByZWxhdGVkIHRlc3RzIGV4cGVjdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlCi0oaW50ZXJmYWNlICJsbyIsIHdpdGggSVAgYWRkcmVzcyAxMjcuMC4wLjEpIHRvIGJlIGVuYWJsZWQsIHdoaWNoIGZyb20gbXkKLWV4cGVyaWVuY2UgaXMgbm90IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uICBBZGRpdGlvbmFsbHksIHRlc3RfcG9wZW4yCi1leHBlY3RzIHRoZSAiY2F0IiB1dGlsaXR5IChzdWNoIGFzIGZvdW5kIGluIHBvcnRzIG9mIHRoZSBHTlUgdG9vbHMpIHRvCi1iZSBpbnN0YWxsZWQuCi0KLQotQnVpbGRpbmcgZnJvbSBzb3VyY2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVdpdGggdGhlIEVNWCBwb3J0IG5vdyBjaGVja2VkIGludG8gUHl0aG9uJ3MgQ1ZTIHJlcG9zaXRvcnksIHRoZSBidWlsZCAKLWluZnJhc3RydWN0dXJlIGlzIHBhcnQgb2YgdGhlIFB5dGhvbiByZWxlYXNlIHNvdXJjZWJhbGwuCi0KLVByZXJlcXVpc2l0ZXMKLQotRmlyc3QgYW5kIGZvcmVtb3N0LCB5b3UgbmVlZCBhbiBvcGVyYXRpb25hbCBFTVggZGV2ZWxvcG1lbnQgaW5zdGFsbGF0aW9uIC0gCi1FTVggdjAuOWQgd2l0aCBmaXgwNCAodGhlIGxhdGVzdCBhdCB0aW1lIG9mIHdyaXRpbmcpICYgdGhlIGdjYyAyLjguMSAKLWNvbXBpbGVyIHJlbGVhc2VkIGJ5IEViZXJoYXJkIE1hdHRlcyBpcyB0aGUgcmVjb21tZW5kZWQgc2V0dXAuCi0KLUlmIHlvdSBoYXZlIGEgZGlmZmVyZW50IHZlcnNpb24gb2YgZ2NjIGluc3RhbGxlZCwgc2VlICJZT1UgSEFWRSBCRUVOIAotV0FSTkVEIiBpdGVtIDE2LgotCi1PdGhlciBpdGVtcyBvZiBzb2Z0d2FyZSByZXF1aXJlZDotCi0KLS0gR05VIG1ha2UgKEknbSB1c2luZyB2My43Ni4xKQotLSBybSwgY3AsIG1rZGlyIGZyb20gdGhlIEdOVSBmaWxlIHV0aWxpdGllcyBwYWNrYWdlCi0tIEdOVSBmaW5kCi0tIEdOVSBzZWQKLQotUHJvY2VkdXJlCi0KLTAuIGFsbCBjaGFuZ2VzIG1lbnRpb25lZCBhcHBseSB0byBmaWxlcyBpbiB0aGUgUEMvb3MyZW14IHN1YmRpcmVjdG9yeSAKLSAgIG9mIHRoZSBQeXRob24gcmVsZWFzZSBzb3VyY2UgdHJlZS4gIG1ha2UgaXMgYWxzbyBleGVjdXRlZCBmcm9tIHRoaXMgCi0gICBkaXJlY3RvcnksIHNvIGNoYW5nZSBpbnRvIHRoaXMgZGlyZWN0b3J5IGJlZm9yZSBwcm9jZWVkaW5nLgotCi0xLiBkZWNpZGUgaWYgeW91IG5lZWQgdG8gY2hhbmdlIHRoZSBsb2NhdGlvbiBvZiB0aGUgUHl0aG9uIGluc3RhbGxhdGlvbi4KLSAgIElmIHlvdSB3aXNoIHRvIGRvIHRoaXMsIHNldCB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIExJQl9ESVIgCi0gICB0byB0aGUgZGlyZWN0b3J5IHlvdSB3aXNoIHRvIHVzZSBmb3IgUFlUSE9OSE9NRSAKLSAgIChlZyAvdXNyL2xvY2FsL2xpYi9weXRob24yLjYpLgotCi0gICBJZiB5b3Ugd2FudCBQeXRob24gdG8gZmluZCBpdHMgbGlicmFyeSB3aXRob3V0IHRoZSBQWVRIT05IT01FIAotICAgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0LCBzZXQgdGhlIHZhbHVlIG9mIHRoZSBNYWtlZmlsZSB2YXJpYWJsZSAKLSAgIEZJWEVEX1BZSE9NRSB0byAieWVzIiAodW5jb21tZW50IHRoZSBhcHByb3ByaWF0ZSBsaW5lKS4KLQotMi4gSWYgeW91IHdpc2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlcyAocHl0aG9uLmV4ZSwgcHl0aG9ucG0uZXhlICYgcGdlbi5leGUpIAotICAgdG8gYmUgaW5zdGFsbGVkIGluIGEgZGlyZWN0b3J5IG90aGVyIHRoYW4gdGhlIFBZVEhPTkhPTUUgZGlyZWN0b3J5LCBzZXQgCi0gICB0aGUgdmFsdWUgb2YgdGhlIE1ha2VmaWxlIHZhcmlhYmxlIEVYRV9ESVIgdG8gdGhlIGFwcHJvcHJpYXRlIGRpcmVjdG9yeS4KLQotMy4gSWYgeW91IHdpc2ggdGhlIFB5dGhvbiBjb3JlIERMTCAocHl0aG9uMzMuZGxsKSB0byBiZSBpbnN0YWxsZWQgaW4gYSAKLSAgIGRpcmVjdG9yeSBvdGhlciB0aGFuIHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIFB5dGhvbiBleGVjdXRhYmxlcyBhcmUgCi0gICBpbnN0YWxsZWQgKGJ5IGRlZmF1bHQsIHRoZSBQWVRIT05IT01FIGRpcmVjdG9yeSksIHNldCB0aGUgdmFsdWUgb2YgdGhlIAotICAgTWFrZWZpbGUgdmFyaWFibGUgRExMX0RJUiB0byB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0b3J5LiAgVGhpcyBETEwgbXVzdCAKLSAgIGJlIHBsYWNlZCBpbiBhIGRpcmVjdG9yeSBvbiB0aGUgc3lzdGVtJ3MgTElCUEFUSCwgb3IgdGhhdCBnZXRzIHNldCAKLSAgIHdpdGggQkVHSU5MSUJQQVRIIG9yIEVORExJQlBBVEguCi0KLTQuIElmIHlvdSBoYXZlIGluc3RhbGxlZCBhbnkgb2YgdGhlIGxpYnJhcmllcyB0aGF0IGNhbiBiZSB1c2VkIHRvIGJ1aWxkIAotICAgb3B0aW9uYWwgUHl0aG9uIG1vZHVsZXMsIHNldCB0aGUgdmFsdWUgb2YgdGhlIHJlbGV2YW50IEhBVkVfPHBhY2thZ2U+IAotICAgTWFrZWZpbGUgdmFyaWFibGUgdG8gInllcyIuICBUaGUgTWFrZWZpbGUgY3VycmVudGx5IHN1cHBvcnRzOgotCi0gICBsaWJyYXJ5ICAgICAgICAgICAgICAgTWFrZWZpbGUgdmFyaWFibGUKLSAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLSAgIHpsaWIgKDEuMS40KSAgICAgICAgICBIQVZFX1pMSUIKLSAgIEdOVSBVbHRyYUZhc3QgQ3J5cHQgICBIQVZFX1VGQwotICAgVGNsL1RrICAgICAgICAgICAgICAgIEhBVkVfVENMVEsgKG5vdCBrbm93biB0byB3b3JrKQotICAgR05VIFJlYWRsaW5lICAgICAgICAgIEhBVkVfR1JFQURMSU5FCi0gICBuY3Vyc2VzICAgICAgICAgICAgICAgSEFWRV9OQ1VSU0VTCi0gICBHTlUgZ2RibSAgICAgICAgICAgICAgSEFWRV9HREJNCi0gICBsaWJiejIgICAgICAgICAgICAgICAgSEFWRV9CWjIKLSAgIE9wZW5TU0wgICAgICAgICAgICAgICBIQVZFX09QRU5TU0wKLQotICAgUGxlYXNlIG5vdGUgdGhhdCB5b3UgbmVlZCB0byBjaGVjayB0aGF0IHdoYXQgeW91IGhhdmUgaW5zdGFsbGVkIAotICAgaXMgY29tcGF0aWJsZSB3aXRoIFB5dGhvbidzIGJ1aWxkIG9wdGlvbnMuICBJbiBwYXJ0aWN1bGFyLCB0aGUgCi0gICBCU0QgREIgdjEuODUgbGlicmFyeSBuZWVkcyB0byBiZSByZWJ1aWx0IHdpdGggYSBzb3VyY2UgcGF0Y2ggZm9yIAotICAgbXVsdGl0aHJlYWQgc3VwcG9ydCAoZG9lc24ndCBjaGFuZ2UgdGhlIGxpYnJhcnkncyByZWVudHJhbnQgc3RhdHVzIAotICAgYnV0IGFsbG93cyBpdCB0byBiZSBsaW5rZWQgdG8gUHl0aG9uIHdoaWNoIGlzIG11bHRpdGhyZWFkZWQpLiAgCi0gICBXaWRlbHkgYXZhaWxhYmxlIGJpbmFyeSBwYWNrYWdlcyBvZiBvdGhlciBsaWJyYXJ5cyAmIERMTHMgYXJlIAotICAgbm90IGJ1aWx0L2xpbmtlZCB3aXRoIG11bHRpdGhyZWFkIHN1cHBvcnQuICBCZXdhcmUhCi0KLSAgIEFsc28gbm90ZSB0aGF0IHRoZSBNYWtlZmlsZSBjdXJyZW50bHkgZXhwZWN0cyBhbnkgbGlicmFyaWVzIHRvIGJlIAotICAgZm91bmQgd2l0aCB0aGUgZGVmYXVsdCBsaWJyYXJ5IHNlYXJjaCBwYXRoLiAgWW91IG1heSBuZWVkIHRvIGFkZCAKLSAgIC1MIHN3aXRjaGVzIHRvIHRoZSBMREZMQUdTIE1ha2VmaWxlIHZhcmlhYmxlIGlmIHlvdSBoYXZlIGluc3RhbGxlZCAKLSAgIGxpYnJhcmllcyBpbiBkaXJlY3RvcmllcyBub3QgaW4gdGhlIGRlZmF1bHQgc2VhcmNoIHBhdGggKHdoaWNoIGNhbiAKLSAgIGJlIGNvbnRyb2xsZWQgYnkgdGhlIExJQlJBUllfUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSB1c2VkIGJ5IEVNWCkuCi0KLTUuIG1ha2UKLQotICAgSXQgaXMgdXN1YWxseSBhIGdvb2QgaWRlYSB0byByZWRpcmVjdCB0aGUgc3Rkb3V0IGFuZCBzdGRlcnIgc3RyZWFtcyAKLSAgIG9mIHRoZSBtYWtlIHByb2Nlc3MgdG8gbG9nIGZpbGVzLCBzbyB0aGF0IHlvdSBjYW4gcmV2aWV3IGFueSBtZXNzYWdlcy4gCi0KLTYuIG1ha2UgdGVzdAotCi0gICBUaGlzIHJ1bnMgdGhlIFB5dGhvbiByZWdyZXNzaW9uIHRlc3RzLCBhbmQgY29tcGxldGlvbiBpcyBhIHNpZ24gb2YgCi0gICBhIHVzYWJsZSBidWlsZC4gIFlvdSBzaG91bGQgY2hlY2sgdGhlIGxpc3Qgb2Ygc2tpcHBlZCBtb2R1bGVzIHRvIAotICAgZW5zdXJlIHRoYXQgYW55IG9wdGlvbmFsIG1vZHVsZXMgeW91IHNlbGVjdGVkIGhhdmUgYmVlbiBidWlsdDsgCi0gICBjaGVja2luZyB0aGUgbGlzdCBvZiBmYWlsdXJlcyBhZ2FpbnN0IHRoZSBsaXN0IG9mIGtub3duIGZhaWx1cmVzIAotICAgZWxzZXdoZXJlIGluIHRoaXMgZG9jdW1lbnQgaXMgYWxzbyBwcnVkZW50LgotCi03LiBtYWtlIGluc3RhbGwKLSAgID4+Pj4+PiBOT1QgWUVUIENPTVBMRVRFIDw8PDw8PCAKLQotOC4gY2hhbmdlIHRvIGEgZGlyZWN0b3J5IG91dHNpZGUgdGhlIFB5dGhvbiBzb3VyY2UgdHJlZSBhbmQgc3RhcnQgUHl0aG9uLiAKLSAgIENoZWNrIHRoZSB2ZXJzaW9uIGFuZCBidWlsZCBkYXRlIHRvIGNvbmZpcm0gc2F0aXNmYWN0b3J5IGluc3RhbGxhdGlvbi4KLQotCi1ZT1UgSEFWRSBCRUVOIFdBUk5FRCEhCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUkga25vdyBhYm91dCBhIG51bWJlciBvZiBuYXN0aWVzIGluIHRoaXMgcG9ydC4KLQotMS4gIEViZXJoYXJkIE1hdHRlcywgYXV0aG9yIG9mIEVNWCwgd3JpdGVzIGluIGhpcyBkb2N1bWVudGF0aW9uIHRoYXQgZm9yaygpIAotaXMgdmVyeSBpbmVmZmljaWVudCBpbiB0aGUgT1MvMiBlbnZpcm9ubWVudC4gIEl0IGFsc28gcmVxdWlyZXMgdGhhdCB0aGUgCi1leGVjdXRhYmxlIGJlIGxpbmtlZCBpbiBhLm91dCBmb3JtYXQgcmF0aGVyIHRoYW4gT01GLiAgVXNlIHRoZSBvcy5leGVjIAotYW5kL29yIHRoZSBvcy5zcGF3biBmYW1pbHkgb2YgZnVuY3Rpb25zIHdoZXJlIHBvc3NpYmxlLgotCi0yLiAgSW4gdGhlIGFic2VuY2Ugb2YgR05VIFJlYWRsaW5lLCB0ZXJtaW5hdGluZyB0aGUgaW50ZXJwcmV0ZXIgcmVxdWlyZXMgYSAKLWNvbnRyb2wtWiAoXlopIGZvbGxvd2VkIGJ5IGEgY2FycmlhZ2UgcmV0dXJuLiAgSmVmZiBSdXNoIGRvY3VtZW50ZWQgdGhpcyAKLXByb2JsZW0gaW4gaGlzIFB5dGhvbiAxLjUuMiBwb3J0LiAgV2l0aCBSZWFkbGluZSwgYSBjb250cm9sLUQgKF5EKSB3b3JrcyAKLWFzIHBlciB0aGUgc3RhbmRhcmQgVW5peCBlbnZpcm9ubWVudC4KLQotMy4gIEVNWCBvbmx5IGhhcyBhIHBhcnRpYWwgaW1wbGVtZW50YXRpb24gb2YgZmNudGwoKS4gIFRoZSBmY250bCBtb2R1bGUgCi1pbiB0aGlzIHBvcnQgc3VwcG9ydHMgd2hhdCBFTVggc3VwcG9ydHMuICBJZiBmY250bCBpcyBpbXBvcnRhbnQgdG8geW91LCAKLXBsZWFzZSByZXZpZXcgdGhlIEVNWCBDIExpYnJhcnkgUmVmZXJlbmNlIChpbmNsdWRlZCBpbiAuSU5GIGZvcm1hdCBpbiB0aGUgCi1FTVhWSUVXLlpJUCBhcmNoaXZlIGFzIHBhcnQgb2YgdGhlIGNvbXBsZXRlIEVNWCBkZXZlbG9wbWVudCB0b29scyBzdWl0ZSkuCi1CZWNhdXNlIG9mIG90aGVyIHNpZGUtZWZmZWN0cyBJIGhhdmUgbW9kaWZpZWQgdGhlIHRlc3RfZmNudGwucHkgdGVzdCAKLXNjcmlwdCB0byBkZWFjdGl2YXRlIHRoZSBleGVyY2lzaW5nIG9mIHRoZSBtaXNzaW5nIGZ1bmN0aW9uYWxpdHkuCi0KLTQuICBUaGUgcmVhZGxpbmUgbW9kdWxlIGhhcyBiZWVuIGxpbmtlZCBhZ2FpbnN0IG5jdXJzZXMgcmF0aGVyIHRoYW4gdGhlIAotdGVybWNhcCBsaWJyYXJ5IHN1cHBsaWVkIHdpdGggRU1YLgotCi01LiAgSSBoYXZlIGNvbmZpZ3VyZWQgdGhpcyBwb3J0IHRvIHVzZSAiLyIgYXMgdGhlIHByZWZlcnJlZCBwYXRoIHNlcGFyYXRvciAKLWNoYXJhY3RlciwgcmF0aGVyIHRoYW4gIlwiICgnXFwnKSwgaW4gbGluZSB3aXRoIHRoZSBjb252ZW50aW9uIHN1cHBvcnRlZCAKLWJ5IEVNWC4gIEJhY2tzbGFzaGVzIGFyZSBzdGlsbCBzdXBwb3J0ZWQgb2YgY291cnNlLCBhbmQgc3RpbGwgYXBwZWFyIGluIAotdW5leHBlY3RlZCBwbGFjZXMgZHVlIHRvIG91dHNpZGUgc291cmNlcyB0aGF0IGRvbid0IGdldCBub3JtYWxpc2VkLgotCi02LiAgV2hpbGUgdGhlIERpc3RVdGlscyBjb21wb25lbnRzIGFyZSBub3cgZnVuY3Rpb25hbCwgb3RoZXIgCi1wYWNrYWdpbmcvYmluYXJ5IGhhbmRsaW5nIHRvb2xzIGFuZCB1dGlsaXRpZXMgc3VjaCBhcyB0aG9zZSBpbmNsdWRlZCBpbgotdGhlIERlbW8gYW5kIFRvb2xzIGRpcmVjdG9yaWVzIC0gZnJlZXplIGluIHBhcnRpY3VsYXIgLSBhcmUgdW5saWtlbHkgdG8gCi13b3JrLiAgSWYgeW91IGRvIGdldCB0aGVtIGdvaW5nLCBJJ2QgbGlrZSB0byBrbm93IGFib3V0IHlvdXIgc3VjY2Vzcy4KLQotNy4gIEkgaGF2ZW4ndCBzZXQgb3V0IHRvIHN1cHBvcnQgdGhlIFtCRUdJTnxFTkRdTElCUEFUSCBmdW5jdGlvbmFsaXR5IAotc3VwcG9ydGVkIGJ5IG9uZSBvZiB0aGUgZWFybGllciBwb3J0cyAoUnVzaCdzPz8pLiAgSWYgaXQgd29ya3MgbGV0IG1lIGtub3cuCi0KLTguIEFzIGEgcmVzdWx0IG9mIHRoZSBsaW1pdGF0aW9ucyBpbXBvc2VkIGJ5IEVNWCdzIGxpYnJhcnkgcm91dGluZXMsIHRoZSAKLXN0YW5kYXJkIGV4dGVuc2lvbiBtb2R1bGUgcHdkIG9ubHkgc3ludGhlc2lzZXMgYSBzaW1wbGUgcGFzc3dkIGRhdGFiYXNlLCAKLWFuZCB0aGUgZ3JwIG1vZHVsZSBjYW5ub3QgYmUgc3VwcG9ydGVkIGF0IGFsbC4KLQotSSBoYXZlIHdyaXR0ZW4gcHVyZSBQeXRob24gc3Vic3RpdHV0ZXMgZm9yIHB3ZCBhbmQgZ3JwLCB3aGljaCBjYW4gcHJvY2VzcyAKLXJlYWwgcGFzc3dkIGFuZCBncm91cCBmaWxlcyBmb3IgdGhvc2UgYXBwbGljYXRpb25zIChzdWNoIGFzIE1haWxNYW4pIHRoYXQgCi1yZXF1aXJlIG1vcmUgdGhhbiBFTVggZW11bGF0ZXMuICBJIGhhdmUgcGxhY2VkIHB3ZC5weSBhbmQgZ3JwLnB5IGluIAotTGliL3BsYXQtb3MyZW14LCB3aGljaCBpcyB1c3VhbGx5IGJlZm9yZSBMaWIvbGliLWR5bmxvYWQgKHdoaWNoIGNvbnRhaW5zIAotcHdkLnB5ZCkgaW4gdGhlIFBZVEhPTlBBVEguICBJZiB5b3UgaGF2ZSBiZWNvbWUgYXR0YWNoZWQgdG8gd2hhdCBwd2QucHlkIAotc3VwcG9ydHMsIHlvdSBjYW4gcHV0IExpYi9saWItZHlubG9hZCBiZWZvcmUgTGliL3BsYXQtb3MyZW14IGluIFBZVEhPTlBBVEggCi1vciBkZWxldGUvcmVuYW1lIHB3ZC5weSAmIGdycC5weS4KLQotcHdkLnB5ICYgZ3JwLnB5IHN1cHBvcnQgbG9jYXRpbmcgdGhlaXIgZGF0YSBmaWxlcyBieSBsb29raW5nIGluIHRoZSAKLWVudmlyb25tZW50IGZvciB0aGVtIGluIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2U6Ci1wd2QucHk6ICAkRVRDX1BBU1NXRCAgICAgICAgICAgICAoJUVUQ19QQVNTV0QlKQotICAgICAgICAgJEVUQy9wYXNzd2QgICAgICAgICAgICAgKCVFVEMlL3Bhc3N3ZCkKLSAgICAgICAgICRQWVRIT05IT01FL0V0Yy9wYXNzd2QgICglUFlUSE9OSE9NRSUvRXRjL3Bhc3N3ZCkKLWdycC5weTogICRFVENfR1JPVVAgICAgICAgICAgICAgICglRVRDX0dST1VQJSkKLSAgICAgICAgICRFVEMvZ3JvdXAgICAgICAgICAgICAgICglRVRDJS9ncm91cCkKLSAgICAgICAgICRQWVRIT05IT01FL0V0Yy9ncm91cCAgICglUFlUSE9OSE9NRSUvRXRjL2dyb3VwKQotCi1UaGUgRVRDX1BBU1NXRCBhbmQgRVRDX0dST1VQIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cgCi1zdXBwb3J0IGZvciBtdWx0aXBsZSBwYXNzd2QvZ3JwIGZpbGVzLCB3aGVyZSBvdGhlciBhcHBsaWNhdGlvbnMgbWF5IG5vdCAKLXN1cHBvcnQgYXMgd2lkZSBhIHZhcmlldHkgb2YgaW5wdXQgdmFyaWF0aW9ucyAoZHJpdmUgcmVtYXBwaW5ncywgCi1zZXBhcmF0b3JzIGV0YykuCi0KLUJvdGggbW9kdWxlcyBzdXBwb3J0IHVzaW5nIGVpdGhlciB0aGUgIjoiIGNoYXJhY3RlciAoVW5peCBzdGFuZGFyZCkgb3IgCi0iOyIgKE9TLzIsIERPUywgV2luZG93cyBzdGFuZGFyZCkgZmllbGQgc2VwYXJhdG9yIGNoYXJhY3RlciwgYW5kIHB3ZC5weSAKLWltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBkcml2ZSBsZXR0ZXIgY29udmVyc2lvbnMgZm9yIHRoZSBob21lX2RpcmVjdG9yeSBhbmQgCi1zaGVsbCBmaWVsZHMgKGZvciB0aGUgIjoiIHNlcGFyYXRvciBvbmx5KToKLSAgICAgICAgICR4ICAtPiAgeDoKLSAgICAgICAgIHg7ICAtPiAgeDoKLQotRXhhbXBsZSB2ZXJzaW9ucyBvZiBwYXNzd2QgYW5kIGdyb3VwIGFyZSBpbiB0aGUgRXRjIHN1YmRpcmVjdG9yeS4gIFRoZSAKLXJlZ3Jlc3Npb24gdGVzdHMgKHRlc3RfcHdkIGFuZCB0ZXN0X2dycCkgd2lsbCBmYWlsIGlmIHZhbGlkIHBhc3N3b3JkIGFuZCAKLWdyb3VwIGZpbGVzIGNhbm5vdCBiZSBmb3VuZCwgYnV0IHNob3VsZCBwYXNzIG90aGVyd2lzZS4KLQotQmUgYXdhcmUgdGhhdCBQeXRob24ncyBwd2QgJiBncm91cCBtb2R1bGVzIGFyZSBmb3IgcmVhZGluZyBwYXNzd29yZCBhbmQgCi1ncm91cCBpbmZvcm1hdGlvbiBvbmx5LgotCi0xMS4gRU1YJ3MgdGVybWlvcyByb3V0aW5lcyBkb24ndCBzdXBwb3J0IGFsbCBvZiB0aGUgZnVuY3Rpb25hbGl0eSBub3cgCi1leHBvc2VkIGJ5IHRoZSB0ZXJtaW9zIG1vZHVsZSAtIHJlZmVyIHRvIHRoZSBFTVggZG9jdW1lbnRhdGlvbiB0byBmaW5kIAotb3V0IHdoYXQgaXMgc3VwcG9ydGVkLgotCi0xMi4gVGhlIGNhc2Ugc2Vuc2l0aXZlIGltcG9ydCBzZW1hbnRpY3MgaW50cm9kdWNlZCBpbiBQeXRob24gMi4xIGZvciBvdGhlciAKLWNhc2UgaW5zZW5zaXRpdmUgYnV0IGNhc2UgcHJlc2VydmluZyBmaWxlL29wZXJhdGluZyBzeXN0ZW1zIChXaW5kb3dzIGV0YyksIAotaGF2ZSBiZWVuIGluY29ycG9yYXRlZCBpbnRvIHRoaXMgcG9ydCwgYW5kIGFyZSBhY3RpdmUgYnkgZGVmYXVsdC4gIFNldHRpbmcgCi10aGUgUFlUSE9OQ0FTRU9LIGVudmlyb25tZW50IHZhcmlhYmxlICh0byBhbnkgdmFsdWUpIHJldmVydHMgdG8gdGhlIAotcHJldmlvdXMgKGNhc2UgaW5zZW5zaXRpdmUpIHNlbWFudGljcy4gIFRoaXMgY2FuIGJlIGFuIGlzc3VlIHdpdGggc29tZSAKLWZpbGUgbWFuYWdlbWVudCB1dGlsaXRpZXMgdGhhdCBkbyBub3QgcHJlc2VydmUgdGhlIGNhc2Ugb2YgZmlsZSBhbmQKLWRpcmVjdG9yeSBuYW1lcy4KLQotMTMuIEJlY2F1c2UgSSBhbSBzdGF0aWNhbGx5IGxpbmtpbmcgbmN1cnNlcywgdGhlIF9jdXJzZXNfcGFuZWwgCi1tb2R1bGUgaGFzIHBvdGVudGlhbCBwcm9ibGVtcyBhcmlzaW5nIGZyb20gc2VwYXJhdGUgbGlicmFyeSBkYXRhIGFyZWFzLgotVG8gYXZvaWQgdGhpcywgSSBoYXZlIGNvbmZpZ3VyZWQgdGhlIF9jdXJzZXNfLnB5ZCAoaW1wb3J0ZWQgYXMgCi0iX2N1cnNlc19wYW5lbCIpIHRvIGltcG9ydCB0aGUgbmN1cnNlcyBzeW1ib2xzIGl0IG5lZWRzIGZyb20gX2N1cnNlcy5kbGwgCi0od2hpY2ggaXMgdGhlIGN1cnNlcyBtb2R1bGUsIGJ1dCB3aXRoIGEgLmRsbCBleHRlbnNpb24gcmF0aGVyIHRoYW4gLnB5ZCAKLXNvIHRoYXQgdGhlIGR5bmFtaWMgbG9hZGVyIGNhbiBhY3R1YWxseSBpbXBvcnQgdGhlIHN5bWJvbHMgZnJvbSBpdCBhcyBhIAotRExMKS4KLQotVGhlIHNpdGUgbW9kdWxlIChMaWIvc2l0ZS5weSkgaGFzIGNvZGUgYWRkZWQgdG8gdHdlYWsgQkVHSU5MSUJQQVRIIHNvCi10aGF0IF9jdXJzZXMuZGxsIGlzIGZvdW5kIHdoZW4gX2N1cnNlc19wYW5lbCBpcyBpbXBvcnRlZC4gIElmIHlvdSBoYXZlCi1wcm9ibGVtcyBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgX2N1cnNlc19wYW5lbCBzdXBwb3J0IHBsZWFzZSBsZXQgbWUga25vdywKLWFuZCBJJ2xsIGhhdmUgYW5vdGhlciBsb29rIGF0IHRoaXMuCi0KLTE0LiBzeXMucGxhdGZvcm0gcmVwb3J0cyAib3MyZW14IiBpbnN0ZWFkIG9mICJvczIiLiAgb3MubmFtZSBzdGlsbCAKLXJlcG9ydHMgIm9zMiIuICBUaGlzIGNoYW5nZSB3YXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiAKLXRoZSBWQUMrKyBidWlsZCAoZm9ybWVybHkgbWFpbnRhaW5lZCBieSBNaWNoYWVsIE11bGxlcikgYW5kIHRoZSBFTVggYnVpbGQgCi0odGhpcyBwb3J0KSwgcHJpbmNpcGFsbHkgZm9yIERpc3RVdGlscy4KLQotMTUuIGl0IGFwcGVhcnMgdGhhdCB0aGUgJVcgc3Vic3RpdHV0aW9uIGluIHRoZSBFTVggc3RyZnRpbWUoKSByb3V0aW5lIGhhcyAKLWFuIG9mZi1ieS1vbmUgYnVnLiAgc3RyZnRpbWUgd2FzIGxpc3RlZCBhcyBwYXNzaW5nIHRoZSByZWdyZXNzaW9uIHRlc3RzIAotaW4gcHJldmlvdXMgcmVsZWFzZXMsIGJ1dCB0aGlzIGZhY3QgYXBwZWFycyB0byBoYXZlIGJlZW4gYW4gb3ZlcnNpZ2h0IGluIAotdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4gIFRvIGZpeCB0aGlzIHJlYWxseSByZXF1aXJlcyBhIHBvcnRhYmxlIAotc3RyZnRpbWUgcm91dGluZSAtIEknbSBsb29raW5nIGludG8gdXNpbmcgb25lIGZyb20gRnJlZUJTRCwgYnV0IGl0cyBub3QgCi1yZWFkeSB5ZXQuCi0KLTE2LiBJIGhhdmUgc3VjY2Vzc2Z1bGx5IGJ1aWx0IHRoaXMgcG9ydCB3aXRoIEFuZHkgWmFib2xvdG55J3MgcG9ydHMgb2YgCi1wZ2NjIDIuOTUgYW5kIGdjYyAzLjIuMSwgaW4gYWRkaXRpb24gdG8gRU0ncyBnY2MgMi44LjEuCi0KLUkgaGF2ZSBub3QgYXR0ZW1wdGVkIHRvIGNvbXBpbGUgUHl0aG9uIHdpdGggYW55IHZlcnNpb24gb2YgZ2NjIHByaW9yIHRvIAotdjIuOC4xLgotCi1UaGlzIHJlbGVhc2Ugc2VlcyB0aGUgZGVmYXVsdCBvcHRpbWlzYXRpb24gY2hhbmdlIHRvIAotIi1PMyAtZm9taXQtZnJhbWUtcG9pbnRlciAtbXByb2JlIi4gIFRoaXMgd29ya3MgZmluZSB0b28gZm9yIHBnY2MgMi45NSAKLWJ1dCBub3QgZm9yIGdjYyAzLjIuMS4KLQotV2l0aCBnY2MgMy4yLjEsIC1PMyBjYXVzZXMgMiB1bmV4cGVjdGVkIHRlc3QgZmFpbHVyZXM6IHRlc3RfZm9ybWF0IGFuZCAKLXRlc3RfdW5pY29kZS4gIEJvdGggdGhlc2UgdGVzdHMgcGFzcyBpZiAtTzIgaXMgaW5zdGVhZCBvZiAtTzMgd2l0aCB0aGlzIAotY29tcGlsZXIsIGFuZCB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBpcyBuZWdsaWdpYmxlIChpbiBjb250cmFzdCB0byAKLWdjYyAyLjguMSBhbmQgcGdjYyAyLjk1LCB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSAKLTIgb3B0aW1pc2F0aW9uIHNldHRpbmdzIGFwcHJvYWNoZXMgMTAlKS4KLQotMTcuICBvcy5zcGF3bnYoKSBhbmQgb3Muc3Bhd252ZSgpIGV4cG9zZSBFTVgncyBsaWJyYXJ5IHJvdXRpbmVzIHJhdGhlciAKLXRoYW4gdXNlIHRoZSBlbXVsYXRpb24gaW4gb3MucHkuCi0KLUluIG9yZGVyIHRvIG1ha2UgdXNlIG9mIHNvbWUgb2YgdGhlIGZlYXR1cmVzIHRoaXMgbWFrZXMgYXZhaWxhYmxlIGluIAotdGhlIE9TLzIgZW52aXJvbm1lbnQsIHlvdSBzaG91bGQgcGVydXNlIHRoZSByZWxldmFudCBFTVggZG9jdW1lbnRhdGlvbiAKLShFTVhMSUIuSU5GIGluIHRoZSBFTVhWSUVXLlpJUCBhcmNoaXZlIGFjY29tcGFueWluZyB0aGUgRU1YIGFyY2hpdmVzIAotb24gSG9iYmVzIG9yIExFTykuICBCZSBhd2FyZSB0aGF0IEkgaGF2ZSBleHBvc2VkIGFsbCB0aGUgIm1vZGUiIG9wdGlvbnMgCi1zdXBwb3J0ZWQgYnkgRU1YLCBidXQgdGhlcmUgYXJlIGNvbWJpbmF0aW9ucyB0aGF0IGVpdGhlciBjYW5ub3QgYmUgCi1wcmFjdGljYWxseSB1c2VkIGJ5L2luIFB5dGhvbiBvciBoYXZlIHRoZSBwb3RlbnRpYWwgdG8gY29tcHJvbWlzZSB5b3VyIAotc3lzdGVtJ3Mgc3RhYmlsaXR5LgotCi0xOC4gIHB5dGhvbnBtLmV4ZSB1c2VkIHRvIGJlIGp1c3QgcHl0aG9uLmV4ZSB3aXRoIHRoZSBXSU5ET1dBUEkgbGlua2VyIAotb3B0aW9uIHNldCBpbiB0aGUgcHl0aG9ucG0uZGVmIGZpbGUuICBJbiBwcmFjdGljZSwgdGhpcyB0dXJucyBvdXQgdG8gZG8gCi1ub3RoaW5nIHVzZWZ1bC4KLQotSSBoYXZlIHdyaXR0ZW4gYSByZXBsYWNlbWVudCB3aGljaCB3cmFwcyB0aGUgUHl0aG9uIERMTCBpbiBhIGdlbnVpbmUgCi1QcmVzZW50YXRpb24gTWFuYWdlciBhcHBsaWNhdGlvbi4gIFRoaXMgdmVyc2lvbiBhY3R1YWxseSBydW5zIHRoZSAKLVB5dGhvbiBpbnRlcnByZXRlciBpbiBhIHNlcGFyYXRlIHRocmVhZCBmcm9tIHRoZSBQTSBzaGVsbCwgaW4gb3JkZXIgCi10aGF0IFB5dGhvblBNIGhhcyBhIGZ1bmN0aW9uaW5nIG1lc3NhZ2UgcXVldWUgYXMgZ29vZCBQTSBhcHBzIHNob3VsZC4KLUluIGl0cyBjdXJyZW50IHN0YXRlLCBQeXRob25QTSdzIHdpbmRvdyBpcyBoaWRkZW4uICBJdCBjYW4gYmUgZGlzcGxheWVkLCAKLWFsdGhvdWdoIGl0IHdpbGwgaGF2ZSBubyBjb250ZW50IGFzIG5vdGhpbmcgaXMgZXZlciB3cml0dGVuIHRvIHRoZSAKLXdpbmRvdy4gIE9ubHkgdGhlICJoaWRlIiBidXR0b24gaXMgYXZhaWxhYmxlLiAgQWx0aG91Z2ggdGhlIGNvZGUgCi1oYXMgc3VwcG9ydCBmb3Igc2h1dHRpbmcgUHl0aG9uUE0gZG93biB3aGVuIHRoZSBQeXRob24gaW50ZXJwcmV0ZXIgaXMgCi1zdGlsbCBidXN5ICh2aWEgdGhlICJjb250cm9sIiBtZW51KSwgdGhpcyBpcyBub3Qgd2VsbCB0ZXN0ZWQgYW5kIGdpdmVuIAotY29tbWVudHMgSSd2ZSBjb21lIGFjcm9zcyBpbiBFTVggZG9jdW1lbnRhdGlvbiBzdWdnZXN0aW5nIHRoYXQgdGhlIAotdGhyZWFkIGtpbGxpbmcgb3BlcmF0aW9uIGhhcyBwcm9ibGVtcyBJIHdvdWxkIHN1Z2dlc3QgY2F1dGlvbiBpbiAKLXJlbHlpbmcgb24gdGhpcyBjYXBhYmlsaXR5LgotCi1QeXRob25QTSBwcm9jZXNzZXMgY29tbWFuZGxpbmUgcGFyYW1ldGVycyBub3JtYWxseS4gIFRoZSBzdGFuZGFyZCBpbnB1dCwgCi1vdXRwdXQgYW5kIGVycm9yIHN0cmVhbXMgYXJlIG9ubHkgdXNlZnVsIGlmIHJlZGlyZWN0ZWQsIGFzIFB5dGhvblBNJ3MgCi13aW5kb3cgaXMgbm90IGEgY29uc29sZSBpbiBhbnkgZm9ybSBhbmQgc28gY2Fubm90IGFjY2VwdCBvciBkaXNwbGF5IAotYW55dGhpbmcuICBUaGlzIG1lYW5zIHRoYXQgdGhlIC1pIG9wdGlvbiBpcyBpbmVmZmVjdGl2ZS4KLQotQmVjYXVzZSB0aGUgUHl0aG9uIHRocmVhZCBkb2Vzbid0IGNyZWF0ZSBpdHMgb3duIG1lc3NhZ2UgcXVldWUsIGNyZWF0aW5nIAotUE0gV2luZG93cyBhbmQgcGVyZm9ybWluZyBtb3N0IFBNIG9wZXJhdGlvbnMgaXMgbm90IHBvc3NpYmxlIGZyb20gd2l0aGluIAotdGhpcyB0aHJlYWQuICBIb3cgdGhpcyB3aWxsIGFmZmVjdCBzdXBwb3J0aW5nIFBNIGV4dGVuc2lvbnMgKHN1Y2ggYXMgCi1Ua2ludGVyIHVzaW5nIGEgUE0gcG9ydCBvZiBUY2wvVGssIG9yIHd4UHl0aG9uIHVzaW5nIHRoZSBQTSBwb3J0IG9mIAotV3hXaW5kb3dzKSBpcyBzdGlsbCBiZWluZyByZXNlYXJjaGVkLgotCi1Ob3RlIHRoYXQgb3MuZm9yaygpIF9ET0VTX05PVF9XT1JLXyBpbiBQeXRob25QTSAtIFNZUzMxNzVzIGFyZSB0aGUgcmVzdWx0IAotb2YgdHJ5aW5nLiAgb3Muc3Bhd252KCkgX2RvZXNfIHdvcmsuICBQeXRob25QTSBwYXNzZXMgYWxsIHJlZ3Jlc3Npb24gdGVzdHMgCi10aGF0IHRoZSBzdGFuZGFyZCBQeXRob24gaW50ZXJwcmV0ZXIgKHB5dGhvbi5leGUpIHBhc3Nlcywgd2l0aCB0aGUgZXhjZXB0aW9uIAotb2YgdGVzdF9mb3JrMSBhbmQgdGVzdF9zb2NrZXQgd2hpY2ggYm90aCBhdHRlbXB0IHRvIHVzZSBvcy5mb3JrKCkuCi0KLUkgdmVyeSBtdWNoIHdhbnQgZmVlZGJhY2sgb24gdGhlIHBlcmZvcm1hbmNlLCBiZWhhdmlvdXIgYW5kIHV0aWxpdHkgb2YgCi1QeXRob25QTS4gIEkgd291bGQgbGlrZSB0byBhZGQgYSBQTSBjb25zb2xlIGNhcGFiaWxpdHkgdG8gaXQsIGJ1dCB0aGF0IAotd2lsbCBiZSBhIG5vbi10cml2aWFsIGVmZm9ydC4gIEkgbWF5IGJlIGFibGUgdG8gbGV2ZXJhZ2UgdGhlIGNvZGUgaW4gCi1JbGx5YSBWYWVzJyBUY2wvVGsgcG9ydCwgd2hpY2ggd291bGQgbWFrZSBpdCBlYXNpZXIuCi0KLTE5LiAgb3MuY2hkaXIoKSB1c2VzIEVNWCdzIF9jaGRpcjIoKSwgd2hpY2ggc3VwcG9ydHMgY2hhbmdpbmcgYm90aCBkcml2ZSAKLWFuZCBkaXJlY3RvcnkgYXQgb25jZS4gIFNpbWlsYXJseSwgb3MuZ2V0Y3dkKCkgdXNlcyBFTVgncyBfZ2V0Y3dkKCkgCi13aGljaCByZXR1cm5zIGRyaXZlIGFzIHdlbGwgYXMgcGF0aC4KLQotMjAuICBweWNvbmZpZy5oIGlzIGluc3RhbGxlZCBpbiB0aGUgSW5jbHVkZSBzdWJkaXJlY3Rvcnkgd2l0aCBhbGwgCi1vdGhlciBpbmNsdWRlIGZpbGVzLgotCi0yMS4gIHRoZSBkZWZhdWx0IGJ1aWxkIGV4cGxpY2l0bHkgc2V0cyB0aGUgbnVtYmVyIG9mIGZpbGUgaGFuZGxlcyAKLWF2YWlsYWJsZSB0byBhIFB5dGhvbiBwcm9jZXNzIHRvIDI1MC4gIEVNWCBkZWZhdWx0IGlzIDQwLCB3aGljaCBpcyAKLWluc3VmZmljaWVudCBmb3IgdGhlIHRlbXBmaWxlIHJlZ3Jlc3Npb24gdGVzdCAodGVzdF90ZW1wZmlsZSkgd2hpY2ggCi10cmllcyB0byBjcmVhdGUgMTAwIHRlbXBvcmFyeSBmaWxlcy4KLQotVGhpcyBzZXR0aW5nIGNhbiBiZSBvdmVycmlkZGVuIHZpYSB0aGUgRU1YT1BUIGVudmlyb25tZW50IHZhcmlhYmxlOgotICBzZXQgRU1YT1BUPS1oMjUwCi1pcyBlcXVpdmFsZW50IHRvIHRoZSBzZXR0aW5nIGN1cnJlbnRseSB1c2VkLiAgVGhlIGVteGJpbmQgdXRpbGl0eSAoaWYgeW91IAotaGF2ZSBpdCBpbnN0YWxsZWQpIGNhbiBhbHNvIGJlIHVzZWQgdG8gcGVybWFuZW50bHkgY2hhbmdlIHRoZSBzZXR0aW5nIGluIAotcHl0aG9uLmV4ZSAtIHBsZWFzZSByZWZlciB0byB0aGUgRU1YIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0KLTIyLiAgYSBwdXJlIHB5dGhvbiBzdHJwdGltZSBtb2R1bGUgaXMgbm93IHBhcnQgb2YgdGhlIFB5dGhvbiBzdGFuZGFyZAotbGlicmFyeSwgc3VwZXJjZWRpbmcgYSBwbGF0Zm9ybSBzcGVjaWZpYyBleHRlbnNpb24gbW9kdWxlLiBUaGlzIG1vZHVsZQotbGV2ZXJhZ2VzIHRoZSBzdHJmdGltZSBtb2R1bGUsIGFuZCBhcyBhIHJlc3VsdCB0ZXN0X3N0cnB0aW1lIGZhaWxzCi1kdWUgdG8gdGhlIEVNWCBzdHJmdGltZSBidWcgaW4gaXRlbSAyMCBhYm92ZS4KLQotMjMuICB0ZXN0X3Bvc2l4cGF0aCBhdHRlbXB0cyB0byBleGVyY2lzZSB2YXJpb3VzIFBvc2l4IHBhdGggcmVsYXRlZAotZnVuY3Rpb25hbGl0eS4gIE1vc3Qgb2YgdGhlIHN1Yi10ZXN0cyBwYXNzLCBidXQgdGhlICJpc21vdW50IiBhbmQKLSJzYW1lc3RhdCIgc3VidGVzdHMgZmFpbDoKLS0gRU1YIHByb3ZpZGVzIG5vdCBzYXRpc2ZhY3RvcnkgbW91bnQgcG9pbnQgZW11bGF0aW9uLCBzbyAiaXNtb3VudCIKLSAgY2Fubm90IHN1Y2NlZWQ7Ci0tIEVNWCBkb2N1bWVudHMgdGhhdCBzdWNjZXNzaXZlIHN0YXQoKSBjYWxscyB3aWxsIHByb2R1Y2UgZGlmZmVyZW50Ci0gIHJlc3VsdHMsIHNvICJzYW1lc3RhdCIgY2Fubm90IHN1Y2NlZWQuCi0KLXRlc3RfcG9zaXhwYXRoIHNob3VsZCBza2lwIHRoZXNlIHRlc3RzIG9uIEVNWC4KLQotMjQuICBJIGhhdmUgcmVwb3J0cyBvZiBCaXRUb3JyZW50IG5vdCB3b3JraW5nLiAgSXQgYXBwZWFycyB0aGF0IHRoZQotRU1YIHNlbGVjdCgpIGVtdWxhdGlvbiwgcG9zc2libHkgaW4gY29uY2VydCB3aXRoIGJ1Z3MgaW4gdGhlIFRDUC9JUAotc3RhY2ssIHJ1bnMgaW50byBwcm9ibGVtcyB1bmRlciB0aGUgc3RyZXNzIGltcG9zZWQgYnkgdGhpcyBhcHBsaWNhdGlvbi4KLUkgdGhpbmsgaXQgc3VmZmljZXMgdG8gc2F5IHRoYXQgQml0VG9ycmVudCBpcyBhIGZhaXIgc3RyZXNzIHRlc3Qgb2YgYQotc3lzdGVtJ3MgbmV0d29ya2luZyBjYXBhYmlsaXR5LgotCi0yNS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIEVNWCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGluaygpIGZ1bmN0aW9uLCBJJ3ZlIAotaW1wbGVtZW50ZWQgYSBjcnVkZSBQeXRob24gZW11bGF0aW9uLCBpbiB0aGUgZmlsZSAKLUxpYi9wbGF0LW9zMmVteC9fZW14X2xpbmsucHkuICBUaGlzIGlzIGltcG9ydGVkIGludG8gdGhlIG9zIG1vZHVsZSwgYW5kIAotYmVjb21lcyBhdmFpbGFibGUgYXMgb3MubGluaygpIGluIHRoZSBub3JtYWwgd2F5LgotCi1UaGUgZW11bGF0aW9uIGNvcGllcyB0aGUgc291cmNlIGZpbGUgaW4gYmluYXJ5IG1vZGUsIGFuZCB3aWxsIGZhaWwgaWYgCi1kaXNrIHNwYWNlIGlzIGV4aGF1c3RlZC4gVGhlIGNhbGwgZmFpbHMgaWYgdGhlIHRhcmdldCBhbHJlYWR5IGV4aXN0cy4gCi1UaGVyZSBhcmUgbm8gZ3VhcmFudGVlcyB0byB0aHJlYWQgc2FmZXR5IHdpdGggdGhpcyBlbXVsYXRpb24gLSBiZXdhcmUhCi0KLVRoZSBlbXVsYXRpb24gd2FzIHdyaXR0ZW4gdG8gc3VwcG9ydCBhIGxpbmsoKSBiYXNlZCBmaWxlIGxvY2tpbmcgc3lzdGVtIAotdXNlZCBpbiBHTlUgTWFpbG1hbi4KLQotMjYuICBBRl9VTklYIHNvY2tldHMsIG90aGVyd2lzZSBrbm93biBhcyBVbml4IGRvbWFpbiBzb2NrZXRzLCBhcmUgbm93Ci1zdXBwb3J0ZWQuICBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgc29tZSB0cmFwcyBhcmlzaW5nIGZyb20gdGhlCi1pbXBsZW1lbnRhdGlvbiBpbiBJQk0ncyBUQ1AvSVAgc3RhY2s6LQotLSB0aGUgcGF0aCBuYW1lIG11c3Qgc3RhcnQgd2l0aCAnXFxzb2NrZXRcXCcgKCcvc29ja2V0Lycgd29uJ3Qgd29yayEpLAotICB3aXRoIHRoZSBsZW5ndGggb2YgdGhlIGZ1bGwgcGF0aCBuYW1lIGxlc3MgdGhhbiAxMDggY2hhcmFjdGVyczsKLS0gdW5saWtlIFVuaXgsIHRoZSBzb2NrZXQgZW5kcG9pbnRzIGRvbid0IGV4aXN0IGluIHRoZSBmaWxlc3lzdGVtOwotLSBieSBkZWZhdWx0LCBzb2NrZXRzIGFyZSBpbiBiaW5hcnkgbW9kZS4KLQotMjcuICBBcyBvZiBQeXRob24gMi40LCB0aGUgbXB6LCByb3RvciBhbmQgeHJlYWRsaW5lcyBtb2R1bGVzIGhhdmUgYmVlbiAKLWRyb3BwZWQgZnJvbSB0aGUgUHl0aG9uIHNvdXJjZSB0cmVlLgotCi0yOC4gIFRoZSBzdWJwcm9jZXNzIG1vZHVsZSB3YXMgYWRkZWQgdG8gdGhlIHN0YW5kYXJkIGxpYnJhcnkgcmVsYXRpdmVseQotbGF0ZSBpbiB0aGUgMi40IGRldmVsb3BtZW50IGN5Y2xlLiAgVW5mb3J0dW5hdGVseSBJIGhhdmVuJ3QgaGFkIHRoZQotcm91bmQgdHVpdHMgdG8gYWRhcHQgdGhlIG1vZHVsZSB0byB0aGUgRU1YIGVudmlyb25tZW50IHlldCwgYW5kCi10ZXN0X3N1YnByb2Nlc3MgaGFzIGEgbnVtYmVyIG9mIGZhaWx1cmVzIGFzIGEgcmVzdWx0LgotCi0yOS4gIFRoZSBkZWZhdWx0IHN0YWNrIHNpemUgZm9yIHRocmVhZHMgaGFzIGJlZW4gNjRrLiAgVGhpcyBpcyBwcm92aW5nCi1pbnN1ZmZpY2llbnQgZm9yIHNvbWUgY29kZWJhc2VzLCBzdWNoIGFzIFpvcGUuICBUaGUgdGhyZWFkIHN0YWNrIHNpemUKLXN0aWxsIGRlZmF1bHRzIHRvIDY0aywgYnV0IHRoaXMgY2FuIG5vdyBiZSBpbmNyZWFzZWQgdmlhIHRoZSBzdGFja19zaXplKCkKLWZ1bmN0aW9uIGV4cG9zZWQgYnkgdGhlIHRocmVhZGluZyAmIHRocmVhZCBtb2R1bGVzIGFzIHdlbGwgYXMgYnkgZGVmaW5pbmcKLVRIUkVBRF9TVEFDS19TSVpFIHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIGluIHRoZSBNYWtlZmlsZSAod2hpY2ggY29udGFpbnMKLWEgY29tbWVudGVkIG91dCBkZWZpbml0aW9uIGZvciAxMjhrQiB0aHJlYWQgc3RhY2tzKS4gIEkgaGF2ZSBzZWVuCi1yZWZlcmVuY2VzIHRvIGhlYXZ5IFpvcGUvUGxvbmUgdXNhZ2UgcmVxdWlyaW5nIDFNQiB0aHJlYWQgc3RhY2tzIG9uCi1GcmVlQlNEIGFuZCBMaW51eCwgYnV0IGRvdWJ0IHRoYXQgZm9yIG1vc3QgbGlrZWx5IHVzYWdlIG9uIE9TLzIgdGhhdAotbW9yZSB0aGFuIDI1NmtCIGlzIG5lY2Vzc2FyeS4gIFRoZSBzaXplIG9mIHRoZSByZXF1aXJlZCBzdGFja3MgKG1haW4gCi1hbmQgdGhyZWFkKSBjYW4gdmFyeSBzaWduaWZpY2FudGx5IGRlcGVuZGluZyBvbiB3aGljaCB2ZXJzaW9uIG9mIGdjYwotaXMgdXNlZCBhbG9uZyB3aXRoIHRoZSBjb21waWxlciBvcHRpbWlzYXRpb25zIHNlbGVjdGVkLiAgTm90ZSB0aGF0IHRoZQotbWFpbiB0aHJlYWQgc3RhY2sgc2l6ZSBpcyBzZXQgZHVyaW5nIGxpbmtpbmcgYW5kIGlzIGN1cnJlbnRseSAyTUIuCi0KLS4uLiBwcm9iYWJseSBvdGhlciBpc3N1ZXMgdGhhdCBJJ3ZlIG5vdCBlbmNvdW50ZXJlZCwgb3IgZG9uJ3QgcmVtZW1iZXIgOi0oCi0KLUlmIHlvdSBlbmNvdW50ZXIgb3RoZXIgZGlmZmljdWx0aWVzIHdpdGggdGhpcyBwb3J0LCB3aGljaCBjYW4gYmUgCi1jaGFyYWN0ZXJpc2VkIGFzIHBlY3VsaWFyIHRvIHRoaXMgcG9ydCByYXRoZXIgdGhhbiB0byB0aGUgUHl0aG9uIHJlbGVhc2UsCi1JIHdvdWxkIGxpa2UgdG8gaGVhciBhYm91dCB0aGVtLiAgSG93ZXZlciBJIGNhbm5vdCBwcm9taXNlIHRvIGJlIGFibGUgdG8gZG8gCi1hbnl0aGluZyB0byByZXNvbHZlIHN1Y2ggcHJvYmxlbXMuICBTZWUgdGhlIENvbnRhY3Qgc2VjdGlvbiBiZWxvdy4uLgotCi0KLVRvIGRvLi4uCi0tLS0tLS0tLQotCi1JbiBubyBwYXJ0aWN1bGFyIG9yZGVyIG9mIGFwcGFyZW50IGltcG9ydGFuY2Ugb3IgbGlrZWxpaG9vZC4uLgotCi0tIHN1cHBvcnQgVGtpbnRlciBhbmQvb3IgYWx0ZXJuYXRpdmUgR1VJICh3eFdpbmRvd3M/PykKLQotCi1DcmVkaXRzCi0tLS0tLS0tCi0KLUluIGFkZGl0aW9uIHRvIHBlb3BsZSBpZGVudGlmaWVkIGFib3ZlLCBJJ2QgbGlrZSB0byB0aGFuazoKLS0gdGhlIEJERkwsIEd1aWRvIHZhbiBSb3NzdW0sIGFuZCBjcmV3IGZvciBQeXRob247Ci0tIERyIERhdmlkIE1lcnR6LCBmb3IgdHJ5aW5nIG91dCBhIHByZS1yZWxlYXNlIG9mIHRoaXMgcG9ydDsKLS0gdGhlIFB5dGhvbi1saXN0L2NvbXAubGFuZy5weXRob24gY29tbXVuaXR5OwotLSBKb2huIFBvbHRvcmFrLCBmb3IgaW5wdXQgYWJvdXQgcHdkL2dycC4KLQotQ29udGFjdAotLS0tLS0tLQotCi1Db25zdHJ1Y3RpdmUgZmVlZGJhY2ssIG5lZ2F0aXZlIG9yIHBvc2l0aXZlLCBhYm91dCB0aGlzIHBvcnQgaXMgd2VsY29tZSAKLWFuZCBzaG91bGQgYmUgYWRkcmVzc2VkIHRvIG1lIGF0IHRoZSBlLW1haWwgYWRkcmVzc2VzIGJlbG93LgotCi1JIGhhdmUgYSBwcml2YXRlIG1haWxpbmcgbGlzdCBmb3IgYW5ub3VuY2VtZW50cyBvZiBmaXhlcyAmIHVwZGF0ZXMgdG8gCi10aGlzIHBvcnQuICBJZiB5b3Ugd2lzaCB0byByZWNlaXZlIHN1Y2ggZS1tYWlsIGFubm91bmNtZW50cywgcGxlYXNlIHNlbmQgCi1tZSBhbiBlLW1haWwgcmVxdWVzdGluZyB0aGF0IHlvdSBiZSBhZGRlZCB0byB0aGlzIGxpc3QuCi0KLUFuZHJldyBNYWNJbnR5cmUKLUUtbWFpbDogYW5keW1hY0BidWxsc2V5ZS5hcGFuYS5vcmcuYXUsIG9yIGFuZHltYWNAcGN1Zy5vcmcuYXUKLVdlYjogICAgaHR0cDovL3d3dy5hbmR5bWFjLm9yZy8KLQotMjggSmFudWFyeSwgMjAwOC4KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9jb25maWcuYyBiL1BDL29zMmVteC9jb25maWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTg3OTExMC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvY29uZmlnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjQgKzAsMCBAQAotLyogLSotIEMgLSotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi1Db3B5cmlnaHQgMTk5MS0xOTk1IGJ5IFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSwgQW1zdGVyZGFtLAotVGhlIE5ldGhlcmxhbmRzLgotCi0gICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkCi0KLVBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cwotZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAotcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAotYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCi1zdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lcyBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCi1DZW50cnVtIG9yIENXSSBvciBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgb3IKLUNOUkkgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KLWRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgotcGVybWlzc2lvbi4KLQotV2hpbGUgQ1dJIGlzIHRoZSBpbml0aWFsIHNvdXJjZSBmb3IgdGhpcyBzb2Z0d2FyZSwgYSBtb2RpZmllZCB2ZXJzaW9uCi1pcyBtYWRlIGF2YWlsYWJsZSBieSB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzCi0oQ05SSSkgYXQgdGhlIEludGVybmV0IGFkZHJlc3MgZnRwOi8vZnRwLnB5dGhvbi5vcmcuCi0KLVNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBBTkQgQ05SSSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRICi1SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSAotQ0VOVFJVTSBPUiBDTlJJIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwKLURBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgotUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKLVRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKLVBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogTW9kdWxlIGNvbmZpZ3VyYXRpb24gKi8KLQotLyogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSB0YWJsZSBvZiBidWlsdC1pbiBtb2R1bGVzLgotICAgU2VlIGluaXRfYnVpbHRpbigpIGluIGltcG9ydC5jLiAqLwotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLWV4dGVybiB2b2lkIGluaXRvczIoKTsKLWV4dGVybiB2b2lkIGluaXRzaWduYWwoKTsKLSNpZmRlZiBXSVRIX1RIUkVBRAotZXh0ZXJuIHZvaWQgaW5pdF90aHJlYWQoKTsKLSNlbmRpZgotZXh0ZXJuIHZvaWQgaW5pdF9jb2RlY3MoKTsKLWV4dGVybiB2b2lkIGluaXRfY3N2KCk7Ci1leHRlcm4gdm9pZCBpbml0X2xvY2FsZSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9yYW5kb20oKTsKLWV4dGVybiB2b2lkIGluaXRfc3JlKCk7Ci1leHRlcm4gdm9pZCBpbml0X3N5bXRhYmxlKCk7Ci1leHRlcm4gdm9pZCBpbml0X3dlYWtyZWYoKTsKLWV4dGVybiB2b2lkIGluaXRhcnJheSgpOwotZXh0ZXJuIHZvaWQgaW5pdGJpbmFzY2lpKCk7Ci1leHRlcm4gdm9pZCBpbml0Y29sbGVjdGlvbnMoKTsKLWV4dGVybiB2b2lkIGluaXRjbWF0aCgpOwotZXh0ZXJuIHZvaWQgaW5pdGRhdGV0aW1lKCk7Ci1leHRlcm4gdm9pZCBpbml0ZGwoKTsKLWV4dGVybiB2b2lkIGluaXRlcnJubygpOwotZXh0ZXJuIHZvaWQgaW5pdGZjbnRsKCk7Ci1leHRlcm4gdm9pZCBpbml0X2Z1bmN0b29scygpOwotZXh0ZXJuIHZvaWQgaW5pdF9oZWFwcSgpOwotZXh0ZXJuIHZvaWQgaW5pdGltYWdlb3AoKTsKLWV4dGVybiB2b2lkIGluaXRpdGVydG9vbHMoKTsKLWV4dGVybiB2b2lkIGluaXRtYXRoKCk7Ci1leHRlcm4gdm9pZCBpbml0X21kNSgpOwotZXh0ZXJuIHZvaWQgaW5pdG9wZXJhdG9yKCk7Ci1leHRlcm4gdm9pZCBpbml0X3NoYSgpOwotZXh0ZXJuIHZvaWQgaW5pdF9zaGEyNTYoKTsKLWV4dGVybiB2b2lkIGluaXRfc2hhNTEyKCk7Ci1leHRlcm4gdm9pZCBpbml0X3N0cnVjdCgpOwotZXh0ZXJuIHZvaWQgaW5pdHRlcm1pb3MoKTsKLWV4dGVybiB2b2lkIGluaXR0aW1lKCk7Ci1leHRlcm4gdm9pZCBpbml0eHhzdWJ0eXBlKCk7Ci1leHRlcm4gdm9pZCBpbml0emlwaW1wb3J0KCk7Ci0jaWYgIUhBVkVfRFlOQU1JQ19MT0FESU5HCi1leHRlcm4gdm9pZCBpbml0X2N1cnNlcygpOwotZXh0ZXJuIHZvaWQgaW5pdF9jdXJzZXNfcGFuZWwoKTsKLWV4dGVybiB2b2lkIGluaXRfdGVzdGNhcGkoKTsKLWV4dGVybiB2b2lkIGluaXRiejIoKTsKLWV4dGVybiB2b2lkIGluaXRmcGVjdGwoKTsKLWV4dGVybiB2b2lkIGluaXRmcGV0ZXN0KCk7Ci1leHRlcm4gdm9pZCBpbml0cGFyc2VyKCk7Ci1leHRlcm4gdm9pZCBpbml0cHdkKCk7Ci1leHRlcm4gdm9pZCBpbml0dW5pY29kZWRhdGEoKTsKLWV4dGVybiB2b2lkIGluaXR6bGliKCk7Ci0jaWZkZWYgVVNFX1NPQ0tFVAotZXh0ZXJuIHZvaWQgaW5pdF9zb2NrZXQoKTsKLWV4dGVybiB2b2lkIGluaXRzZWxlY3QoKTsKLSNlbmRpZgotI2VuZGlmCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDEgLS0gKi8KLQotZXh0ZXJuIHZvaWQgUHlNYXJzaGFsX0luaXQoKTsKLWV4dGVybiB2b2lkIGluaXRpbXAoKTsKLWV4dGVybiB2b2lkIGluaXRnYygpOwotCi1zdHJ1Y3QgX2luaXR0YWIgX1B5SW1wb3J0X0luaXR0YWJbXSA9IHsKLQotICAgIHsib3MyIiwgaW5pdG9zMn0sCi0gICAgeyJzaWduYWwiLCBpbml0c2lnbmFsfSwKLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgIHsiX3RocmVhZCIsIGluaXRfdGhyZWFkfSwKLSNlbmRpZgotICAgIHsiX2NvZGVjcyIsIGluaXRfY29kZWNzfSwKLSAgICB7Il9jc3YiLCBpbml0X2Nzdn0sCi0gICAgeyJfbG9jYWxlIiwgaW5pdF9sb2NhbGV9LAotICAgIHsiX3JhbmRvbSIsIGluaXRfcmFuZG9tfSwKLSAgICB7Il9zcmUiLCBpbml0X3NyZX0sCi0gICAgeyJfc3ltdGFibGUiLCBpbml0X3N5bXRhYmxlfSwKLSAgICB7Il93ZWFrcmVmIiwgaW5pdF93ZWFrcmVmfSwKLSAgICB7ImFycmF5IiwgaW5pdGFycmF5fSwKLSAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwKLSAgICB7ImNvbGxlY3Rpb25zIiwgaW5pdGNvbGxlY3Rpb25zfSwKLSAgICB7ImNtYXRoIiwgaW5pdGNtYXRofSwKLSAgICB7ImRhdGV0aW1lIiwgaW5pdGRhdGV0aW1lfSwKLSAgICB7ImRsIiwgaW5pdGRsfSwKLSAgICB7ImVycm5vIiwgaW5pdGVycm5vfSwKLSAgICB7ImZjbnRsIiwgaW5pdGZjbnRsfSwKLSAgICB7Il9mdW5jdG9vbHMiLCBpbml0X2Z1bmN0b29sc30sCi0gICAgeyJfaGVhcHEiLCBpbml0X2hlYXBxfSwKLSAgICB7ImltYWdlb3AiLCBpbml0aW1hZ2VvcH0sCi0gICAgeyJpdGVydG9vbHMiLCBpbml0aXRlcnRvb2xzfSwKLSAgICB7Im1hdGgiLCBpbml0bWF0aH0sCi0gICAgeyJvcGVyYXRvciIsIGluaXRvcGVyYXRvcn0sCi0gICAgeyJfc2hhMjU2IiwgaW5pdF9zaGEyNTZ9LAotICAgIHsiX3NoYTUxMiIsIGluaXRfc2hhNTEyfSwKLSAgICB7Il9zdHJ1Y3QiLCBpbml0X3N0cnVjdH0sCi0gICAgeyJ0ZXJtaW9zIiwgaW5pdHRlcm1pb3N9LAotICAgIHsidGltZSIsIGluaXR0aW1lfSwKLSAgICB7Inh4c3VidHlwZSIsIGluaXR4eHN1YnR5cGV9LAotICAgIHsiemlwaW1wb3J0IiwgaW5pdHppcGltcG9ydH0sCi0jaWYgIUhBVkVfRFlOQU1JQ19MT0FESU5HCi0gICAgeyJfY3Vyc2VzIiwgaW5pdF9jdXJzZXN9LAotICAgIHsiX2N1cnNlc19wYW5lbCIsIGluaXRfY3Vyc2VzX3BhbmVsfSwKLSAgICB7Il90ZXN0Y2FwaSIsIGluaXRfdGVzdGNhcGl9LAotICAgIHsiYnoyIiwgaW5pdGJ6Mn0sCi0gICAgeyJmcGVjdGwiLCBpbml0ZnBlY3RsfSwKLSAgICB7ImZwZXRlc3QiLCBpbml0ZnBldGVzdH0sCi0gICAgeyJwYXJzZXIiLCBpbml0cGFyc2VyfSwKLSAgICB7InB3ZCIsIGluaXRwd2R9LAotICAgIHsidW5pY29kZWRhdGEiLCBpbml0dW5pY29kZWRhdGF9LAotICAgIHsiemxpYiIsIGluaXR6bGlifSwKLSNpZmRlZiBVU0VfU09DS0VUCi0gICAgeyJfc29ja2V0IiwgaW5pdF9zb2NrZXR9LAotICAgIHsic2VsZWN0IiwgaW5pdHNlbGVjdH0sCi0jZW5kaWYKLSNlbmRpZgotLyogLS0gQURETU9EVUxFIE1BUktFUiAyIC0tICovCi0KLSAgICAvKiBUaGlzIG1vZHVsZSAibGl2ZXMgaW4iIHdpdGggbWFyc2hhbC5jICovCi0gICAgeyJtYXJzaGFsIiwgUHlNYXJzaGFsX0luaXR9LAotCi0gICAgLyogVGhpcyBsaXZlcyBpdCB3aXRoIGltcG9ydC5jICovCi0gICAgeyJfaW1wIiwgaW5pdGltcH0sCi0KLSAgICAvKiBUaGVzZSBlbnRyaWVzIGFyZSBoZXJlIGZvciBzeXMuYnVpbHRpbl9tb2R1bGVfbmFtZXMgKi8KLSAgICB7ImJ1aWx0aW5zIiwgTlVMTH0sCi0gICAgeyJzeXMiLCBOVUxMfSwKLQotICAgIC8qIFRoaXMgbGl2ZXMgaW4gZ2Ntb2R1bGUuYyAqLwotICAgIHsiZ2MiLCBpbml0Z2N9LAotCi0gICAgLyogU2VudGluZWwgKi8KLSAgICB7MCwgMH0KLX07CmRpZmYgLS1naXQgYS9QQy9vczJlbXgvZGxmY24uYyBiL1BDL29zMmVteC9kbGZjbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYmRhOWNkLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9kbGZjbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMjIzICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGRsb3BlbigpIC0gVW5peC1saWtlIGR5bmFtaWMgbGlua2luZwotICogZW11bGF0aW9uIGZ1bmN0aW9ucyBmb3IgT1MvMiB1c2luZyBEb3NMb2FkTW9kdWxlKCkgYW5kIGNvbXBhbnkuCi0gKi8KLQotI2RlZmluZSBJTkNMX0RPUwotI2RlZmluZSBJTkNMX0RPU0VSUk9SUwotI2RlZmluZSBJTkNMX0RPU1NFU01HUgotI2RlZmluZSBJTkNMX1dJTlBST0dSQU1MSVNUCi0jZGVmaW5lIElOQ0xfV0lORlJBTUVNR1IKLSNpbmNsdWRlIDxvczIuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8bWFsbG9jLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF90cmFja19yZWMgewotICAgIGNoYXIgKm5hbWU7Ci0gICAgSE1PRFVMRSBoYW5kbGU7Ci0gICAgdm9pZCAqaWQ7Ci0gICAgc3RydWN0IF90cmFja19yZWMgKm5leHQ7Ci19IHRETExjaGFpbiwgKkRMTGNoYWluOwotCi1zdGF0aWMgRExMY2hhaW4gZGxsb2FkID0gTlVMTDsgIC8qIEEgc2ltcGxlIGNoYWluZWQgbGlzdCBvZiBETEwgbmFtZXMgKi8KLXN0YXRpYyBjaGFyIGRsZXJyIFsyNTZdOyAgICAgICAgLyogbGFzdCBlcnJvciB0ZXh0IHN0cmluZyAqLwotc3RhdGljIHZvaWQgKmxhc3RfaWQ7Ci0KLXN0YXRpYyBETExjaGFpbiBmaW5kX2lkKHZvaWQgKmlkKQotewotICAgIERMTGNoYWluIHRtcDsKLQotICAgIGZvciAodG1wID0gZGxsb2FkOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKLSAgICAgICAgaWYgKGlkID09IHRtcC0+aWQpCi0gICAgICAgICAgICByZXR1cm4gdG1wOwotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qIGxvYWQgYSBkeW5hbWljLWxpbmsgbGlicmFyeSBhbmQgcmV0dXJuIGhhbmRsZSAqLwotdm9pZCAqZGxvcGVuKGNoYXIgKmZpbGVuYW1lLCBpbnQgZmxhZ3MpCi17Ci0gICAgSE1PRFVMRSBobTsKLSAgICBETExjaGFpbiB0bXA7Ci0gICAgY2hhciBlcnJbMjU2XTsKLSAgICBjaGFyICplcnJ0eHQ7Ci0gICAgaW50IHJjID0gMCwgc2V0X2NoYWluID0gMDsKLQotICAgIGZvciAodG1wID0gZGxsb2FkOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKLSAgICAgICAgaWYgKHN0cm5pY21wKHRtcC0+bmFtZSwgZmlsZW5hbWUsIDk5OSkgPT0gMCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgaWYgKCF0bXApCi0gICAgewotICAgICAgICB0bXAgPSAoRExMY2hhaW4pIG1hbGxvYyhzaXplb2YodERMTGNoYWluKSk7Ci0gICAgICAgIGlmICghdG1wKQotICAgICAgICAgICAgZ290byBub21lbTsKLSAgICAgICAgdG1wLT5uYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKLSAgICAgICAgdG1wLT5uZXh0ID0gZGxsb2FkOwotICAgICAgICBzZXRfY2hhaW4gPSAxOwotICAgIH0KLQotICAgIHN3aXRjaCAocmMgPSBEb3NMb2FkTW9kdWxlKChQU1opJmVyciwgc2l6ZW9mKGVyciksIGZpbGVuYW1lLCAmaG0pKQotICAgIHsKLSAgICAgICAgY2FzZSBOT19FUlJPUjoKLSAgICAgICAgICAgIHRtcC0+aGFuZGxlID0gaG07Ci0gICAgICAgICAgICBpZiAoc2V0X2NoYWluKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGRvCi0gICAgICAgICAgICAgICAgICAgIGxhc3RfaWQrKzsKLSAgICAgICAgICAgICAgICB3aGlsZSAoKGxhc3RfaWQgPT0gMCkgfHwgKGZpbmRfaWQobGFzdF9pZCkpKTsKLSAgICAgICAgICAgICAgICB0bXAtPmlkID0gbGFzdF9pZDsKLSAgICAgICAgICAgICAgICBkbGxvYWQgPSB0bXA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdG1wLT5pZDsKLSAgICAgICAgY2FzZSBFUlJPUl9GSUxFX05PVF9GT1VORDoKLSAgICAgICAgY2FzZSBFUlJPUl9QQVRIX05PVF9GT1VORDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJtb2R1bGUgYCVzJyBub3QgZm91bmQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfVE9PX01BTllfT1BFTl9GSUxFUzoKLSAgICAgICAgY2FzZSBFUlJPUl9OT1RfRU5PVUdIX01FTU9SWToKLSAgICAgICAgY2FzZSBFUlJPUl9TSEFSSU5HX0JVRkZFUl9FWENFRURFRDoKLW5vbWVtOgotICAgICAgICAgICAgZXJydHh0ID0gIm91dCBvZiBzeXN0ZW0gcmVzb3VyY2VzIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6Ci0gICAgICAgICAgICBlcnJ0eHQgPSAiYWNjZXNzIGRlbmllZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBFUlJPUl9CQURfRk9STUFUOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfU0VHTUVOVF9OVU1CRVI6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9PUkRJTkFMOgotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfTU9EVUxFVFlQRToKLSAgICAgICAgY2FzZSBFUlJPUl9JTlZBTElEX0VYRV9TSUdOQVRVUkU6Ci0gICAgICAgIGNhc2UgRVJST1JfRVhFX01BUktFRF9JTlZBTElEOgotICAgICAgICBjYXNlIEVSUk9SX0lURVJBVEVEX0RBVEFfRVhDRUVEU182NEs6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9NSU5BTExPQ1NJWkU6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9TRUdEUEw6Ci0gICAgICAgIGNhc2UgRVJST1JfQVVUT0RBVEFTRUdfRVhDRUVEU182NEs6Ci0gICAgICAgIGNhc2UgRVJST1JfUkVMT0NTUkNfQ0hBSU5fRVhDRUVEU19TRUdMSU1JVDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJpbnZhbGlkIG1vZHVsZSBmb3JtYXQiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOgotICAgICAgICAgICAgZXJydHh0ID0gImZpbGVuYW1lIGRvZXNuJ3QgbWF0Y2ggbW9kdWxlIG5hbWUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfU0hBUklOR19WSU9MQVRJT046Ci0gICAgICAgIGNhc2UgRVJST1JfTE9DS19WSU9MQVRJT046Ci0gICAgICAgICAgICBlcnJ0eHQgPSAic2hhcmluZyB2aW9sYXRpb24iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfSU5JVF9ST1VUSU5FX0ZBSUxFRDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJtb2R1bGUgaW5pdGlhbGl6YXRpb24gZmFpbGVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZXJydHh0ID0gImNhdXNlIGAlcycsIGVycm9yIGNvZGUgPSAlZCI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgc25wcmludGYoZGxlcnIsIHNpemVvZihkbGVyciksIGVycnR4dCwgJmVyciwgcmMpOwotICAgIGlmICh0bXApCi0gICAgewotICAgICAgICBpZiAodG1wLT5uYW1lKQotICAgICAgICAgICAgZnJlZSh0bXAtPm5hbWUpOwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi0vKiByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBgc3ltYm9sJyBpbiBETEwgKi8KLXZvaWQgKmRsc3ltKHZvaWQgKmhhbmRsZSwgY2hhciAqc3ltYm9sKQotewotICAgIGludCByYyA9IDA7Ci0gICAgUEZOIGFkZHI7Ci0gICAgY2hhciAqZXJydHh0OwotICAgIGludCBzeW1vcmQgPSAwOwotICAgIERMTGNoYWluIHRtcCA9IGZpbmRfaWQoaGFuZGxlKTsKLQotICAgIGlmICghdG1wKQotICAgICAgICBnb3RvIGludl9oYW5kbGU7Ci0KLSAgICBpZiAoKnN5bWJvbCA9PSAnIycpCi0gICAgICAgIHN5bW9yZCA9IGF0b2koc3ltYm9sICsgMSk7Ci0KLSAgICBzd2l0Y2ggKHJjID0gRG9zUXVlcnlQcm9jQWRkcih0bXAtPmhhbmRsZSwgc3ltb3JkLCBzeW1ib2wsICZhZGRyKSkKLSAgICB7Ci0gICAgICAgIGNhc2UgTk9fRVJST1I6Ci0gICAgICAgICAgICByZXR1cm4gKHZvaWQgKilhZGRyOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOgotaW52X2hhbmRsZToKLSAgICAgICAgICAgIGVycnR4dCA9ICJpbnZhbGlkIG1vZHVsZSBoYW5kbGUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRVJST1JfUFJPQ19OT1RfRk9VTkQ6Ci0gICAgICAgIGNhc2UgRVJST1JfSU5WQUxJRF9OQU1FOgotICAgICAgICAgICAgZXJydHh0ID0gIm5vIHN5bWJvbCBgJXMnIGluIG1vZHVsZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGVycnR4dCA9ICJzeW1ib2wgYCVzJywgZXJyb3IgY29kZSA9ICVkIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBzbnByaW50ZihkbGVyciwgc2l6ZW9mKGRsZXJyKSwgZXJydHh0LCBzeW1ib2wsIHJjKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyogZnJlZSBkeW5hbWljYWxseS1saW5rZWQgbGlicmFyeSAqLwotaW50IGRsY2xvc2Uodm9pZCAqaGFuZGxlKQotewotICAgIGludCByYzsKLSAgICBETExjaGFpbiB0bXAgPSBmaW5kX2lkKGhhbmRsZSk7Ci0KLSAgICBpZiAoIXRtcCkKLSAgICAgICAgZ290byBpbnZfaGFuZGxlOwotCi0gICAgc3dpdGNoIChyYyA9IERvc0ZyZWVNb2R1bGUodG1wLT5oYW5kbGUpKQotICAgIHsKLSAgICAgICAgY2FzZSBOT19FUlJPUjoKLSAgICAgICAgICAgIGZyZWUodG1wLT5uYW1lKTsKLSAgICAgICAgICAgIGRsbG9hZCA9IHRtcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfSEFORExFOgotaW52X2hhbmRsZToKLSAgICAgICAgICAgIHN0cmNweShkbGVyciwgImludmFsaWQgbW9kdWxlIGhhbmRsZSIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBjYXNlIEVSUk9SX0lOVkFMSURfQUNDRVNTOgotICAgICAgICAgICAgc3RyY3B5KGRsZXJyLCAiYWNjZXNzIGRlbmllZCIpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotLyogcmV0dXJuIGEgc3RyaW5nIGRlc2NyaWJpbmcgbGFzdCBvY2N1cnJlZCBkbCBlcnJvciAqLwotY2hhciAqZGxlcnJvcigpCi17Ci0gICAgcmV0dXJuIGRsZXJyOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2RsZmNuLmggYi9QQy9vczJlbXgvZGxmY24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjczYWU2OS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZGxmY24uaAorKysgL2Rldi9udWxsCkBAIC0xLDUxICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IDE5OTEtMTk5NSBieSBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0sIEFtc3RlcmRhbSwKLVRoZSBOZXRoZXJsYW5kcy4KLQotICAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotCi1QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKLWRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKLXByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLWJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgotc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAotQ2VudHJ1bSBvciBDV0kgb3IgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIG9yCi1DTlJJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCi1kaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKLXBlcm1pc3Npb24uCi0KLVdoaWxlIENXSSBpcyB0aGUgaW5pdGlhbCBzb3VyY2UgZm9yIHRoaXMgc29mdHdhcmUsIGEgbW9kaWZpZWQgdmVyc2lvbgotaXMgbWFkZSBhdmFpbGFibGUgYnkgdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcwotKENOUkkpIGF0IHRoZSBJbnRlcm5ldCBhZGRyZXNzIGZ0cDovL2Z0cC5weXRob24ub3JnLgotCi1TVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQU5EIENOUkkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSAotUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCi1NRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0gKLUNFTlRSVU0gT1IgQ05SSSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMCi1EQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKLVBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSCi1UT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCi1QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgotCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGRsb3BlbigpIC0gVW5peC1saWtlIGR5bmFtaWMgbGlua2luZwotICogZW11bGF0aW9uIGZ1bmN0aW9ucyBmb3IgT1MvMiB1c2luZyBEb3NMb2FkTW9kdWxlKCkgYW5kIGNvbXBhbnkuCi0gKi8KLQotI2lmbmRlZiBfRExGQ05fSAotI2RlZmluZSBfRExGQ05fSAotCi0vKiBsb2FkIGEgZHluYW1pYy1saW5rIGxpYnJhcnkgYW5kIHJldHVybiBoYW5kbGUgKi8KLXZvaWQgKmRsb3BlbihjaGFyICpmaWxlbmFtZSwgaW50IGZsYWdzKTsKLQotLyogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYHN5bWJvbCcgaW4gRExMICovCi12b2lkICpkbHN5bSh2b2lkICpoYW5kbGUsIGNoYXIgKnN5bWJvbCk7Ci0KLS8qIGZyZWUgZHluYW1pY2FsbHktbGlua2VkIGxpYnJhcnkgKi8KLWludCBkbGNsb3NlKHZvaWQgKmhhbmRsZSk7Ci0KLS8qIHJldHVybiBhIHN0cmluZyBkZXNjcmliaW5nIGxhc3Qgb2NjdXJyZWQgZGwgZXJyb3IgKi8KLWNoYXIgKmRsZXJyb3Iodm9pZCk7Ci0KLSNlbmRpZiAvKiAhX0RMRkNOX0ggKi8KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9kbGxlbnRyeS5jIGIvUEMvb3MyZW14L2RsbGVudHJ5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljY2NhMWMuLjAwMDAwMDAKLS0tIGEvUEMvb3MyZW14L2RsbGVudHJ5LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBQeXRob24gMi4zIGNvcmUgRExMLgotICovCi0KLSNkZWZpbmUgTlVMTCAwCi0KLSNkZWZpbmUgUkVGKHMpICBleHRlcm4gdm9pZCBzKCk7IHZvaWQgKl9fX19yZWZfIyNzID0gJnM7Ci0KLS8qIE1ha2UgcmVmZXJlbmNlcyB0byBpbXBvcnRlZCBzeW1ib2xzIHRvIHB1bGwgdGhlbSBmcm9tIHN0YXRpYyBsaWJyYXJ5ICovCi1SRUYoUHlfTWFpbik7Ci0KLSNpbmNsdWRlIDxzaWduYWwuaD4KLQotZXh0ZXJuIGludCBfQ1JUX2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBfQ1JUX3Rlcm0odm9pZCk7Ci1leHRlcm4gdm9pZCBfX2N0b3JkdG9ySW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIF9fY3RvcmR0b3JUZXJtKHZvaWQpOwotCi11bnNpZ25lZCBsb25nIF9ETExfSW5pdFRlcm0odW5zaWduZWQgbG9uZyBtb2RfaGFuZGxlLCB1bnNpZ25lZCBsb25nIGZsYWcpCi17Ci0gICAgc3dpdGNoIChmbGFnKQotICAgIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgaWYgKF9DUlRfaW5pdCgpKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgX19jdG9yZHRvckluaXQoKTsKLQotICAgICAgICAgICAgLyogSWdub3JlIGZhdGFsIHNpZ25hbHMgKi8KLSAgICAgICAgICAgIHNpZ25hbChTSUdTRUdWLCBTSUdfSUdOKTsKLSAgICAgICAgICAgIHNpZ25hbChTSUdGUEUsIFNJR19JR04pOwotCi0gICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICBfX2N0b3JkdG9yVGVybSgpOwotICAgICAgICAgICAgX0NSVF90ZXJtKCk7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L2dldHBhdGhwLmMgYi9QQy9vczJlbXgvZ2V0cGF0aHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ3Mzc3NC4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvZ2V0cGF0aHAuYworKysgL2Rldi9udWxsCkBAIC0xLDQxOCArMCwwIEBACi0KLS8qIFJldHVybiB0aGUgaW5pdGlhbCBtb2R1bGUgc2VhcmNoIHBhdGguICovCi0vKiBUaGlzIHZlcnNpb24gdXNlZCBieSBPUy8yK0VNWCAqLwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICBQQVRIIFJVTEVTIEZPUiBPUy8yK0VNWDoKLSAgIFRoaXMgZGVzY3JpYmVzIGhvdyBzeXMucGF0aCBpcyBmb3JtZWQgb24gT1MvMitFTVguICBJdCBkZXNjcmliZXMgdGhlCi0gICBmdW5jdGlvbmFsaXR5LCBub3QgdGhlIGltcGxlbWVudGF0aW9uIChpZSwgdGhlIG9yZGVyIGluIHdoaWNoIHRoZXNlCi0gICBhcmUgYWN0dWFsbHkgZmV0Y2hlZCBpcyBkaWZmZXJlbnQpCi0KLSAgICogUHl0aG9uIGFsd2F5cyBhZGRzIGFuIGVtcHR5IGVudHJ5IGF0IHRoZSBzdGFydCwgd2hpY2ggY29ycmVzcG9uZHMKLSAgICAgdG8gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LgotCi0gICAqIElmIHRoZSBQWVRIT05QQVRIIGVudi4gdmFyLiBleGlzdHMsIGl0cyBlbnRyaWVzIGFyZSBhZGRlZCBuZXh0LgotCi0gICAqIFdlIGF0dGVtcHQgdG8gbG9jYXRlIHRoZSAiUHl0aG9uIEhvbWUiIC0gaWYgdGhlIFBZVEhPTkhPTUUgZW52IHZhcgotICAgICBpcyBzZXQsIHdlIGJlbGlldmUgaXQuICBPdGhlcndpc2UsIHdlIHVzZSB0aGUgcGF0aCBvZiBvdXIgaG9zdCAuRVhFJ3MKLSAgICAgdG8gdHJ5IGFuZCBsb2NhdGUgb3VyICJsYW5kbWFyayIgKGxpYlxcb3MucHkpIGFuZCBkZWR1Y2Ugb3VyIGhvbWUuCi0gICAgIC0gSWYgd2UgRE8gaGF2ZSBhIFB5dGhvbiBIb21lOiBUaGUgcmVsZXZhbnQgc3ViLWRpcmVjdG9yaWVzIChMaWIsCi0gICAgICAgcGxhdC13aW4sIGV0YykgYXJlIGJhc2VkIG9uIHRoZSBQeXRob24gSG9tZQotICAgICAtIElmIHdlIERPIE5PVCBoYXZlIGEgUHl0aG9uIEhvbWUsIHRoZSBjb3JlIFB5dGhvbiBQYXRoIGlzCi0gICAgICAgbG9hZGVkIGZyb20gdGhlIHJlZ2lzdHJ5LiAgVGhpcyBpcyB0aGUgbWFpbiBQeXRob25QYXRoIGtleSwKLSAgICAgICBhbmQgYm90aCBIS0xNIGFuZCBIS0NVIGFyZSBjb21iaW5lZCB0byBmb3JtIHRoZSBwYXRoKQotCi0gICAqIElmZiAtIHdlIGNhbiBub3QgbG9jYXRlIHRoZSBQeXRob24gSG9tZSwgYW5kIGhhdmUgbm90IGhhZCBhIFBZVEhPTlBBVEgKLSAgICAgc3BlY2lmaWVkIChpZSwgd2UgaGF2ZSBfbm90aGluZ18gd2UgY2FuIGFzc3VtZSBpcyBhIGdvb2QgcGF0aCksIGEKLSAgICAgZGVmYXVsdCBwYXRoIHdpdGggcmVsYXRpdmUgZW50cmllcyBpcyB1c2VkIChlZy4gLlxMaWI7LlxwbGF0LXdpbiwgZXRjKQotCi0KLSAgVGhlIGVuZCByZXN1bHQgb2YgYWxsIHRoaXMgaXM6Ci0gICogV2hlbiBydW5uaW5nIHB5dGhvbi5leGUsIG9yIGFueSBvdGhlciAuZXhlIGluIHRoZSBtYWluIFB5dGhvbiBkaXJlY3RvcnkKLSAgICAoZWl0aGVyIGFuIGluc3RhbGxlZCB2ZXJzaW9uLCBvciBkaXJlY3RseSBmcm9tIHRoZSBQQ2J1aWxkIGRpcmVjdG9yeSksCi0gICAgdGhlIGNvcmUgcGF0aCBpcyBkZWR1Y2VkLgotCi0gICogV2hlbiBQeXRob24gaXMgaG9zdGVkIGluIGFub3RoZXIgZXhlIChkaWZmZXJlbnQgZGlyZWN0b3J5LCBlbWJlZGRlZCB2aWEKLSAgICBDT00sIGV0YyksIHRoZSBQeXRob24gSG9tZSB3aWxsIG5vdCBiZSBkZWR1Y2VkLCBzbyB0aGUgY29yZSBwYXRoIGZyb20KLSAgICB0aGUgcmVnaXN0cnkgaXMgdXNlZC4gIE90aGVyICJhcHBsaWNhdGlvbiBwYXRocyAiaW4gdGhlIHJlZ2lzdHJ5IGFyZQotICAgIGFsd2F5cyByZWFkLgotCi0gICogSWYgUHl0aG9uIGNhbid0IGZpbmQgaXRzIGhvbWUgYW5kIHRoZXJlIGlzIG5vIHJlZ2lzdHJ5IChlZywgZnJvemVuCi0gICAgZXhlLCBzb21lIHZlcnkgc3RyYW5nZSBpbnN0YWxsYXRpb24gc2V0dXApIHlvdSBnZXQgYSBwYXRoIHdpdGgKLSAgICBzb21lIGRlZmF1bHQsIGJ1dCByZWxhdGl2ZSwgcGF0aHMuCi0KLSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAib3NkZWZzLmgiCi0KLSNpZm5kZWYgUFlPU19PUzIKLSNlcnJvciBUaGlzIGZpbGUgb25seSBjb21waWxhYmxlIG9uIE9TLzIKLSNlbmRpZgotCi0jZGVmaW5lIElOQ0xfRE9TCi0jaW5jbHVkZSA8b3MyLmg+Ci0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotCi0jaWYgSEFWRV9VTklTVERfSAotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8KLQotLyogU2VhcmNoIGluIHNvbWUgY29tbW9uIGxvY2F0aW9ucyBmb3IgdGhlIGFzc29jaWF0ZWQgUHl0aG9uIGxpYnJhcmllcy4KLSAqCi0gKiBQeV9HZXRQYXRoKCkgdHJpZXMgdG8gcmV0dXJuIGEgc2Vuc2libGUgUHl0aG9uIG1vZHVsZSBzZWFyY2ggcGF0aC4KLSAqCi0gKiBUaGUgYXBwcm9hY2ggaXMgYW4gYWRhcHRhdGlvbiBmb3IgV2luZG93cyBvZiB0aGUgc3RyYXRlZ3kgdXNlZCBpbgotICogLi4vTW9kdWxlcy9nZXRwYXRoLmM7IGl0IHVzZXMgdGhlIFdpbmRvd3MgUmVnaXN0cnkgYXMgb25lIG9mIGl0cwotICogaW5mb3JtYXRpb24gc291cmNlcy4KLSAqLwotCi0jaWZuZGVmIExBTkRNQVJLCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSNkZWZpbmUgTEFORE1BUksgImxpYi9vcy5weSIKLSNlbHNlCi0jZGVmaW5lIExBTkRNQVJLICJsaWJcXG9zLnB5IgotI2VuZGlmCi0jZW5kaWYKLQotc3RhdGljIGNoYXIgcHJlZml4W01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciBwcm9ncGF0aFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgKm1vZHVsZV9zZWFyY2hfcGF0aCA9IE5VTEw7Ci0KLQotc3RhdGljIGludAotaXNfc2VwKGNoYXIgY2gpIC8qIGRldGVybWluZSBpZiAiY2giIGlzIGEgc2VwYXJhdG9yIGNoYXJhY3RlciAqLwotewotI2lmZGVmIEFMVFNFUAotICAgIHJldHVybiBjaCA9PSBTRVAgfHwgY2ggPT0gQUxUU0VQOwotI2Vsc2UKLSAgICByZXR1cm4gY2ggPT0gU0VQOwotI2VuZGlmCi19Ci0KLS8qIGFzc3VtZXMgJ2RpcicgbnVsbCB0ZXJtaW5hdGVkIGluIGJvdW5kcy4KLSAqIE5ldmVyIHdyaXRlcyBiZXlvbmQgZXhpc3RpbmcgdGVybWluYXRvci4KLSAqLwotc3RhdGljIHZvaWQKLXJlZHVjZShjaGFyICpkaXIpCi17Ci0gICAgc2l6ZV90IGkgPSBzdHJsZW4oZGlyKTsKLSAgICB3aGlsZSAoaSA+IDAgJiYgIWlzX3NlcChkaXJbaV0pKQotICAgICAgICAtLWk7Ci0gICAgZGlyW2ldID0gJ1wwJzsKLX0KLQotc3RhdGljIGludAotZXhpc3RzKGNoYXIgKmZpbGVuYW1lKQotewotICAgIHN0cnVjdCBzdGF0IGJ1ZjsKLSAgICByZXR1cm4gc3RhdChmaWxlbmFtZSwgJmJ1ZikgPT0gMDsKLX0KLQotLyogSXMgbW9kdWxlICAoY2hlY2sgZm9yIC5weWMvLnB5byB0b28pCi0gKiBBc3N1bWVzICdmaWxlbmFtZScgTUFYUEFUSExFTisxIGJ5dGVzIGxvbmcgLQotICogbWF5IGV4dGVuZCAnZmlsZW5hbWUnIGJ5IG9uZSBjaGFyYWN0ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWlzbW9kdWxlKGNoYXIgKmZpbGVuYW1lKQotewotICAgIGlmIChleGlzdHMoZmlsZW5hbWUpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIC8qIENoZWNrIGZvciB0aGUgY29tcGlsZWQgdmVyc2lvbiBvZiBwcmVmaXguICovCi0gICAgaWYgKHN0cmxlbihmaWxlbmFtZSkgPCBNQVhQQVRITEVOKSB7Ci0gICAgICAgIHN0cmNhdChmaWxlbmFtZSwgUHlfT3B0aW1pemVGbGFnID8gIm8iIDogImMiKTsKLSAgICAgICAgaWYgKGV4aXN0cyhmaWxlbmFtZSkpCi0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLS8qIEFkZCBhIHBhdGggY29tcG9uZW50LCBieSBhcHBlbmRpbmcgc3R1ZmYgdG8gYnVmZmVyLgotICAgYnVmZmVyIG11c3QgaGF2ZSBhdCBsZWFzdCBNQVhQQVRITEVOICsgMSBieXRlcyBhbGxvY2F0ZWQsIGFuZCBjb250YWluIGEKLSAgIE5VTC10ZXJtaW5hdGVkIHN0cmluZyB3aXRoIG5vIG1vcmUgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgKG5vdCBjb3VudGluZwotICAgdGhlIHRyYWlsaW5nIE5VTCkuICBJdCdzIGEgZmF0YWwgZXJyb3IgaWYgaXQgY29udGFpbnMgYSBzdHJpbmcgbG9uZ2VyIHRoYW4KLSAgIHRoYXQgKGNhbGxlcnMgbXVzdCBiZSBjYXJlZnVsISkuICBJZiB0aGVzZSByZXF1aXJlbWVudHMgYXJlIG1ldCwgaXQncwotICAgZ3VhcmFudGVlZCB0aGF0IGJ1ZmZlciB3aWxsIHN0aWxsIGJlIGEgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZQotICAgdGhhbiBNQVhQQVRITEVOIGNoYXJhY3RlcnMgYXQgZXhpdC4gIElmIHN0dWZmIGlzIHRvbyBsb25nLCBvbmx5IGFzIG11Y2ggb2YKLSAgIHN0dWZmIGFzIGZpdHMgd2lsbCBiZSBhcHBlbmRlZC4KLSovCi0KLXN0YXRpYyB2b2lkCi1qb2luKGNoYXIgKmJ1ZmZlciwgY2hhciAqc3R1ZmYpCi17Ci0gICAgc2l6ZV90IG4sIGs7Ci0gICAgaWYgKGlzX3NlcChzdHVmZlswXSkpCi0gICAgICAgIG4gPSAwOwotICAgIGVsc2UgewotICAgICAgICBuID0gc3RybGVuKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChuID4gMCAmJiAhaXNfc2VwKGJ1ZmZlcltuLTFdKSAmJiBuIDwgTUFYUEFUSExFTikKLSAgICAgICAgICAgIGJ1ZmZlcltuKytdID0gU0VQOwotICAgIH0KLSAgICBpZiAobiA+IE1BWFBBVEhMRU4pCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbnBhdGgoKSIpOwotICAgIGsgPSBzdHJsZW4oc3R1ZmYpOwotICAgIGlmIChuICsgayA+IE1BWFBBVEhMRU4pCi0gICAgICAgIGsgPSBNQVhQQVRITEVOIC0gbjsKLSAgICBzdHJuY3B5KGJ1ZmZlcituLCBzdHVmZiwgayk7Ci0gICAgYnVmZmVyW24ra10gPSAnXDAnOwotfQotCi0vKiBnb3RsYW5kbWFyayBvbmx5IGNhbGxlZCBieSBzZWFyY2hfZm9yX3ByZWZpeCwgd2hpY2ggZW5zdXJlcwotICogJ3ByZWZpeCcgaXMgbnVsbCB0ZXJtaW5hdGVkIGluIGJvdW5kcy4gIGpvaW4oKSBlbnN1cmVzCi0gKiAnbGFuZG1hcmsnIGNhbiBub3Qgb3ZlcmZsb3cgcHJlZml4IGlmIHRvbyBsb25nLgotICovCi1zdGF0aWMgaW50Ci1nb3RsYW5kbWFyayhjaGFyICpsYW5kbWFyaykKLXsKLSAgICBpbnQgbiwgb2s7Ci0KLSAgICBuID0gc3RybGVuKHByZWZpeCk7Ci0gICAgam9pbihwcmVmaXgsIGxhbmRtYXJrKTsKLSAgICBvayA9IGlzbW9kdWxlKHByZWZpeCk7Ci0gICAgcHJlZml4W25dID0gJ1wwJzsKLSAgICByZXR1cm4gb2s7Ci19Ci0KLS8qIGFzc3VtZXMgYXJndjBfcGF0aCBpcyBNQVhQQVRITEVOKzEgYnl0ZXMgbG9uZywgYWxyZWFkeSBcMCB0ZXJtJ2QuCi0gKiBhc3N1bXB0aW9uIHByb3ZpZGVkIGJ5IG9ubHkgY2FsbGVyLCBjYWxjdWxhdGVfcGF0aCgpCi0gKi8KLXN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KGNoYXIgKmFyZ3YwX3BhdGgsIGNoYXIgKmxhbmRtYXJrKQotewotICAgIC8qIFNlYXJjaCBmcm9tIGFyZ3YwX3BhdGgsIHVudGlsIGxhbmRtYXJrIGlzIGZvdW5kICovCi0gICAgc3RyY3B5KHByZWZpeCwgYXJndjBfcGF0aCk7Ci0gICAgZG8gewotICAgICAgICBpZiAoZ290bGFuZG1hcmsobGFuZG1hcmspKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIHJlZHVjZShwcmVmaXgpOwotICAgIH0gd2hpbGUgKHByZWZpeFswXSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQKLWdldF9wcm9ncGF0aCh2b2lkKQotewotICAgIGV4dGVybiBjaGFyICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKLSAgICBjaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIIik7Ci0gICAgY2hhciAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7Ci0KLSAgICBQUElCIHBpYjsKLSAgICBpZiAoKERvc0dldEluZm9CbG9ja3MoTlVMTCwgJnBpYikgPT0gMCkgJiYKLSAgICAgICAgKERvc1F1ZXJ5TW9kdWxlTmFtZShwaWItPnBpYl9obXRlLCBzaXplb2YocHJvZ3BhdGgpLCBwcm9ncGF0aCkgPT0gMCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChwcm9nID09IE5VTEwgfHwgKnByb2cgPT0gJ1wwJykKLSAgICAgICAgcHJvZyA9ICJweXRob24iOwotCi0gICAgLyogSWYgdGhlcmUgaXMgbm8gc2xhc2ggaW4gdGhlIGFyZ3YwIHBhdGgsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAqIGFzc3VtZSBweXRob24gaXMgb24gdGhlIHVzZXIncyAkUEFUSCwgc2luY2UgdGhlcmUncyBubwotICAgICAqIG90aGVyIHdheSB0byBmaW5kIGEgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gIElmCi0gICAgICogJFBBVEggaXNuJ3QgZXhwb3J0ZWQsIHlvdSBsb3NlLgotICAgICAqLwotI2lmZGVmIEFMVFNFUAotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSB8fCBzdHJjaHIocHJvZywgQUxUU0VQKSkKLSNlbHNlCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApKQotI2VuZGlmCi0gICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHByb2csIE1BWFBBVEhMRU4pOwotICAgIGVsc2UgaWYgKHBhdGgpIHsKLSAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgIGNoYXIgKmRlbGltID0gc3RyY2hyKHBhdGgsIERFTElNKTsKLQotICAgICAgICAgICAgaWYgKGRlbGltKSB7Ci0gICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IGRlbGltIC0gcGF0aDsKLSAgICAgICAgICAgICAgICAvKiBlbnN1cmUgd2UgY2FuJ3Qgb3ZlcndyaXRlIGJ1ZmZlciAqLwotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgICAgICAgICAgICAgIGxlbiA9IG1pbihNQVhQQVRITEVOLGxlbik7Ci0jZWxzZQotICAgICAgICAgICAgICAgIGxlbiA9IE1BWFBBVEhMRU4gPCBsZW4gPyBNQVhQQVRITEVOIDogbGVuOwotI2VuZGlmCi0gICAgICAgICAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcGF0aCwgbGVuKTsKLSAgICAgICAgICAgICAgICAqKHByb2dwYXRoICsgbGVuKSA9ICdcMCc7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3RybmNweShwcm9ncGF0aCwgcGF0aCwgTUFYUEFUSExFTik7Ci0KLSAgICAgICAgICAgIC8qIGpvaW4oKSBpcyBzYWZlIGZvciBNQVhQQVRITEVOKzEgc2l6ZSBidWZmZXIgKi8KLSAgICAgICAgICAgIGpvaW4ocHJvZ3BhdGgsIHByb2cpOwotICAgICAgICAgICAgaWYgKGV4aXN0cyhwcm9ncGF0aCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICghZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotfQotCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlX3BhdGgodm9pZCkKLXsKLSAgICBjaGFyIGFyZ3YwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpidWY7Ci0gICAgc2l6ZV90IGJ1ZnN6OwotICAgIGNoYXIgKnB5dGhvbmhvbWUgPSBQeV9HZXRQeXRob25Ib21lKCk7Ci0gICAgY2hhciAqZW52cGF0aCA9IGdldGVudigiUFlUSE9OUEFUSCIpOwotICAgIGNoYXIgemlwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBzaXplX3QgbGVuOwotCi0gICAgZ2V0X3Byb2dwYXRoKCk7Ci0gICAgLyogcHJvZ3BhdGggZ3VhcmFudGVlZCBcMCB0ZXJtaW5hdGVkIGluIE1BWFBBVEgrMSBieXRlcy4gKi8KLSAgICBzdHJjcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgpOwotICAgIHJlZHVjZShhcmd2MF9wYXRoKTsKLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMIHx8ICpweXRob25ob21lID09ICdcMCcpIHsKLSAgICAgICAgaWYgKHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIExBTkRNQVJLKSkKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBwcmVmaXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHN0cm5jcHkocHJlZml4LCBweXRob25ob21lLCBNQVhQQVRITEVOKTsKLQotICAgIGlmIChlbnZwYXRoICYmICplbnZwYXRoID09ICdcMCcpCi0gICAgICAgIGVudnBhdGggPSBOVUxMOwotCi0gICAgLyogQ2FsY3VsYXRlIHppcCBhcmNoaXZlIHBhdGggKi8KLSAgICBzdHJuY3B5KHppcF9wYXRoLCBwcm9ncGF0aCwgTUFYUEFUSExFTik7Ci0gICAgemlwX3BhdGhbTUFYUEFUSExFTl0gPSAnXDAnOwotICAgIGxlbiA9IHN0cmxlbih6aXBfcGF0aCk7Ci0gICAgaWYgKGxlbiA+IDQpIHsKLSAgICAgICAgemlwX3BhdGhbbGVuLTNdID0gJ3onOyAgLyogY2hhbmdlIGVuZGluZyB0byAiemlwIiAqLwotICAgICAgICB6aXBfcGF0aFtsZW4tMl0gPSAnaSc7Ci0gICAgICAgIHppcF9wYXRoW2xlbi0xXSA9ICdwJzsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHppcF9wYXRoWzBdID0gMDsKLSAgICB9Ci0KLSAgICAvKiBXZSBuZWVkIHRvIGNvbnN0cnVjdCBhIHBhdGggZnJvbSB0aGUgZm9sbG93aW5nIHBhcnRzLgotICAgICAqICgxKSB0aGUgUFlUSE9OUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSwgaWYgc2V0OwotICAgICAqICgyKSB0aGUgemlwIGFyY2hpdmUgZmlsZSBwYXRoOwotICAgICAqICgzKSB0aGUgUFlUSE9OUEFUSCBjb25maWcgbWFjcm8sIHdpdGggdGhlIGxlYWRpbmcgIi4iCi0gICAgICogICAgIG9mIGVhY2ggY29tcG9uZW50IHJlcGxhY2VkIHdpdGggcHl0aG9uaG9tZSwgaWYgc2V0OwotICAgICAqICg0KSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgKGFyZ3YwX3BhdGgpLgotICAgICAqIFRoZSBsZW5ndGggY2FsY3VsYXRpb24gY2FsY3VsYXRlcyAjMyBmaXJzdC4KLSAgICAgKi8KLQotICAgIC8qIENhbGN1bGF0ZSBzaXplIG9mIHJldHVybiBidWZmZXIgKi8KLSAgICBpZiAocHl0aG9uaG9tZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNoYXIgKnA7Ci0gICAgICAgIGJ1ZnN6ID0gMTsKLSAgICAgICAgZm9yIChwID0gUFlUSE9OUEFUSDsgKnA7IHArKykgewotICAgICAgICAgICAgaWYgKCpwID09IERFTElNKQotICAgICAgICAgICAgICAgIGJ1ZnN6Kys7IC8qIG51bWJlciBvZiBERUxJTSBwbHVzIG9uZSAqLwotICAgICAgICB9Ci0gICAgICAgIGJ1ZnN6ICo9IHN0cmxlbihweXRob25ob21lKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBidWZzeiA9IDA7Ci0gICAgYnVmc3ogKz0gc3RybGVuKFBZVEhPTlBBVEgpICsgMTsKLSAgICBidWZzeiArPSBzdHJsZW4oYXJndjBfcGF0aCkgKyAxOwotICAgIGJ1ZnN6ICs9IHN0cmxlbih6aXBfcGF0aCkgKyAxOwotICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihlbnZwYXRoKSArIDE7Ci0KLSAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBidWYgPSBtYWxsb2MoYnVmc3opOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotICAgICAgICAvKiBXZSBjYW4ndCBleGl0LCBzbyBwcmludCBhIHdhcm5pbmcgYW5kIGxpbXAgYWxvbmcgKi8KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJDYW4ndCBtYWxsb2MgZHluYW1pYyBQWVRIT05QQVRILlxuIik7Ci0gICAgICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVzaW5nIGVudmlyb25tZW50ICRQWVRIT05QQVRILlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBlbnZwYXRoOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyBwYXRoLlxuIik7Ci0gICAgICAgICAgICBtb2R1bGVfc2VhcmNoX3BhdGggPSBQWVRIT05QQVRIOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCkgewotICAgICAgICBzdHJjcHkoYnVmLCBlbnZwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSAgICBpZiAoemlwX3BhdGhbMF0pIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgemlwX3BhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotCi0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewotICAgICAgICBzdHJjcHkoYnVmLCBQWVRIT05QQVRIKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGFyICpwID0gUFlUSE9OUEFUSDsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgc2l6ZV90IG47Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHEgPSBzdHJjaHIocCwgREVMSU0pOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBuID0gc3RybGVuKHApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG4gPSBxLXA7Ci0gICAgICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgaXNfc2VwKHBbMV0pKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcHl0aG9uaG9tZSk7Ci0gICAgICAgICAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIG4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCBwLCBuKTsKLSAgICAgICAgICAgIGJ1ZiArPSBuOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICAgICAgcCA9IHErMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYXJndjBfcGF0aCkgewotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgYXJndjBfcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICAqYnVmID0gJ1wwJzsKLX0KLQotCi0vKiBFeHRlcm5hbCBpbnRlcmZhY2UgKi8KLQotY2hhciAqCi1QeV9HZXRQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIG1vZHVsZV9zZWFyY2hfcGF0aDsKLX0KLQotY2hhciAqCi1QeV9HZXRQcmVmaXgodm9pZCkKLXsKLSAgICBpZiAoIW1vZHVsZV9zZWFyY2hfcGF0aCkKLSAgICAgICAgY2FsY3VsYXRlX3BhdGgoKTsKLSAgICByZXR1cm4gcHJlZml4OwotfQotCi1jaGFyICoKLVB5X0dldEV4ZWNQcmVmaXgodm9pZCkKLXsKLSAgICByZXR1cm4gUHlfR2V0UHJlZml4KCk7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0gICAgcmV0dXJuIHByb2dwYXRoOwotfQpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5Y29uZmlnLmggYi9QQy9vczJlbXgvcHljb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTU2MTA1YS4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHljb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDMzMiArMCwwIEBACi0jaWZuZGVmIFB5X0NPTkZJR19ICi0jZGVmaW5lIFB5X0NPTkZJR19ICi0KLSNlcnJvciAiUEVQIDExOiBPUy8yIGlzIG5vdyB1bnN1cHBvcnRlZCwgY29kZSB3aWxsIGJlIHJlbW92ZWQgaW4gUHl0aG9uIDMuNCIKLQotLyogY29uZmlnLmguCi0gKiBBdCBzb21lIHRpbWUgaW4gdGhlIHBhc3QsIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5L2Zyb20gY29uZmlndXJlLgotICogbm93IG1haW50YWluZWQgbWFudWFsbHkuCi0gKi8KLQotLyogYnVpbGQgZW52aXJvbm1lbnQgKi8KLSNkZWZpbmUgUExBVEZPUk0JIm9zMmVteCIKLSNkZWZpbmUgQ09NUElMRVIJIltFTVggR0NDICIgX19WRVJTSU9OX18gIl0iCi0jZGVmaW5lIFBZT1NfT1MyCTEKLSNkZWZpbmUgUFlDQ19HQ0MJMQotCi0vKiBkZWZhdWx0IGxvY2F0aW9uKHMpICovCi0jaWZuZGVmIFBSRUZJWAotI2RlZmluZSBQUkVGSVgJCSIiCi0jZW5kaWYKLSNpZm5kZWYgUFlUSE9OUEFUSAotI2RlZmluZSBQWVRIT05QQVRICSIuL0xpYjsuL0xpYi9wbGF0LSIgUExBVEZPUk0gXAotCQkJIjsuL0xpYi9saWItZHlubG9hZDsuL0xpYi9zaXRlLXBhY2thZ2VzIgotI2VuZGlmCi0KLS8qIERlYnVnZ2luZyAqLwotI2lmbmRlZiBQeV9ERUJVRwotLyojZGVmaW5lIFB5X0RFQlVHIDEqLwotI2VuZGlmCi0KLS8qIGlmIGJ1aWxkaW5nIGFuIGV4dGVuc2lvbiBvciB3cmFwcGVyIGV4ZWN1dGFibGUsCi0gKiBtYXJrIFB5dGhvbiBBUEkgc3ltYm9scyAiZXh0ZXJuIiBzbyB0aGF0IHN5bWJvbHMKLSAqIGltcG9ydGVkIGZyb20gdGhlIFB5dGhvbiBjb3JlIERMTCBhcmVuJ3QgZHVwbGljYXRlZC4KLSAqLwotI2lmZGVmIFB5X0JVSUxEX0NPUkUKLSMgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKQlSVFlQRQotI2Vsc2UKLSMgIGRlZmluZSBQeUFQSV9GVU5DKFJUWVBFKQlleHRlcm4gUlRZUEUKLSNlbmRpZgotI2RlZmluZSBQeUFQSV9EQVRBKFJUWVBFKQlleHRlcm4gUlRZUEUKLSNkZWZpbmUgUHlNT0RJTklUX0ZVTkMJdm9pZAotCi0vKiBVc2UgT1MvMiBmbGF2b3VyIG9mIHRocmVhZHMgKi8KLSNkZWZpbmUgV0lUSF9USFJFQUQJMQotI2RlZmluZSBPUzJfVEhSRUFEUwkxCi0KLS8qIFdlIHdhbnQgc29ja2V0cyAqLwotI2RlZmluZSBUQ1BJUFY0CQkxCi0jZGVmaW5lIFVTRV9TT0NLRVQJMQotI2RlZmluZSBzb2NrbGVuX3QJaW50Ci0jZGVmaW5lIEZEX1NFVFNJWkUJMTAyNAotCi0vKiBlbmFibGUgdGhlIFB5dGhvbiBvYmplY3QgYWxsb2NhdG9yICovCi0jZGVmaW5lCVdJVEhfUFlNQUxMT0MJMQotCi0vKiBlbmFibGUgdGhlIEdDIG1vZHVsZSAqLwotI2RlZmluZSBXSVRIX0NZQ0xFX0dDCTEKLQotLyogRGVmaW5lIGlmIHlvdSB3YW50IGRvY3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLwotI2RlZmluZSBXSVRIX0RPQ19TVFJJTkdTIDEKLQotLyogVW5pY29kZSByZWxhdGVkICovCi0jZGVmaW5lIFBZX1VOSUNPREVfVFlQRQl3Y2hhcl90Ci0jZGVmaW5lIFB5X1VOSUNPREVfU0laRSBTSVpFT0ZfU0hPUlQKLQotLyogRU1YIGRlZmluZXMgc3NpemVfdCAqLwotI2RlZmluZSBIQVZFX1NTSVpFX1QJMQotCi0vKiBzeXN0ZW0gY2FwYWJpbGl0aWVzICovCi0jZGVmaW5lIEhBVkVfVFRZTkFNRQkxCi0jZGVmaW5lIEhBVkVfV0FJVAkxCi0jZGVmaW5lIEhBVkVfR0VURUdJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VURVVJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VUR0lEICAgICAxCi0jZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAxCi0jZGVmaW5lIEhBVkVfR0VUVUlEICAgICAxCi0jZGVmaW5lIEhBVkVfT1BFTkRJUiAgICAxCi0jZGVmaW5lIEhBVkVfUElQRSAgICAgICAxCi0jZGVmaW5lIEhBVkVfUE9QRU4gICAgICAxCi0jZGVmaW5lIEhBVkVfU1lTVEVNCTEKLSNkZWZpbmUgSEFWRV9UVFlOQU1FCTEKLSNkZWZpbmUgSEFWRV9EWU5BTUlDX0xPQURJTkcJMQotCi0vKiBpZiBwb3J0IG9mIEdEQk0gaW5zdGFsbGVkLCBpdCBpbmNsdWRlcyBOREJNIGVtdWxhdGlvbiAqLwotI2RlZmluZSBIQVZFX05EQk1fSCAxCi0KLS8qIG5lZWQgdGhpcyBmb3Igc3Bhd252IGNvZGUgaW4gcG9zaXhtb2R1bGUgKGNsb25lZCBmcm9tIFdJTjMyIGRlZiduKSAqLwotdHlwZWRlZiBsb25nIGludHB0cl90OwotCi0vKiB3ZSBkb24ndCBoYXZlIHRtX3pvbmUgYnV0IGRvIGhhdmUgdGhlIGV4dGVybmFsIGFycmF5IHR6bmFtZSAqLwotI2RlZmluZSBIQVZFX1RaTkFNRSAxCi0KLS8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkuICovCi0jZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCi0jZGVmaW5lIFNURENfSEVBREVSUyAxCi0KLS8qIERlZmluZSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KLSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKLQotLyogRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgdGhlIHR5cGUgbG9uZyBsb25nLiAqLwotI2RlZmluZSBIQVZFX0xPTkdfTE9ORyAxCi0KLS8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIGZ1bmN0aW9uIHByb3RvdHlwZXMuICovCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAxCi0KLS8qIERlZmluZSBpZiB5b3VyIGNvbXBpbGVyIHN1cHBvcnRzIHZhcmlhYmxlIGxlbmd0aCBmdW5jdGlvbiBwcm90b3R5cGVzCi0gKiAoZS5nLiB2b2lkIGZwcmludGYoRklMRSAqLCBjaGFyICosIC4uLik7KSAqYW5kKiA8c3RkYXJnLmg+LgotICovCi0jZGVmaW5lIEhBVkVfU1REQVJHX1BST1RPVFlQRVMgMQotCi0vKiBEZWZpbmUgaWYgbWFsbG9jKDApIHJldHVybnMgYSBOVUxMIHBvaW50ZXIuICovCi0jZGVmaW5lIE1BTExPQ19aRVJPX1JFVFVSTlNfTlVMTCAxCi0KLS8qIERlZmluZSB0byBmb3JjZSB1c2Ugb2YgdGhyZWFkLXNhZmUgZXJybm8sIGhfZXJybm8sIGFuZCBvdGhlciBmdW5jdGlvbnMuICovCi0jZGVmaW5lIF9SRUVOVFJBTlQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvc2VsZWN0Lmg+IGFuZCA8c3lzL3RpbWUuaD4KLSAqICh3aGljaCB5b3UgY2FuJ3Qgb24gU0NPIE9EVCAzLjApLgotICovCi0jZGVmaW5lIFNZU19TRUxFQ1RfV0lUSF9TWVNfVElNRSAxCi0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gb2ZmX3QuICovCi0jZGVmaW5lIFNJWkVPRl9PRkZfVCA0Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYW4gdGltZV90LiAqLwotI2RlZmluZSBTSVpFT0ZfVElNRV9UIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIHNob3J0LiAqLwotI2RlZmluZSBTSVpFT0ZfU0hPUlQgMgotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgaW50LiAqLwotI2RlZmluZSBTSVpFT0ZfSU5UIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGxvbmcuICovCi0jZGVmaW5lIFNJWkVPRl9MT05HIDQKLQotLyogVGhlIG51bWJlciBvZiBieXRlcyBpbiBhIGxvbmcgbG9uZy4gKi8KLSNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyA4Ci0KLS8qIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSB2b2lkICouICovCi0jZGVmaW5lIFNJWkVPRl9WT0lEX1AgNAotCi0vKiBUaGUgbnVtYmVyIG9mIGJ5dGVzIGluIGEgc2l6ZV90LiAqLwotI2RlZmluZSBTSVpFT0ZfU0laRV9UIDQKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBhbGFybSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9BTEFSTSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgY2xvY2sgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0sgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGR1cDIgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRFVQMiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZXhlY3YgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfRVhFQ1YgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNwYXdudiBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TUEFXTlYgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZsb2NrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZMT0NLIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmb3JrIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZPUksgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGZzeW5jIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZTWU5DIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBmdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9GVElNRSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZnRydW5jYXRlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0Y3dkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVENXRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGVlcm5hbWUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUEVFUk5BTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUEdSUCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cGlkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFBJRCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0cHdlbnQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUUFdFTlQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHRpbWVvZmRheSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGdldHdkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX0dFVFdEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBoeXBvdCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9IWVBPVCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUga2lsbCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9LSUxMIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBtZW1tb3ZlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01FTU1PVkUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIG1rdGltZSBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NS1RJTUUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHBhdXNlIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1BBVVNFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwdXRlbnYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfUFVURU5WIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZWxlY3QgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VMRUNUIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRnaWQgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUR0lEIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRsb2NhbGUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUTE9DQUxFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzZXRwZ2lkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NFVFBHSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHVpZCBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TRVRVSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHNldHZidWYgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU0VUVkJVRiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc2lnYWN0aW9uIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NJR0FDVElPTiAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc3RyZXJyb3IgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSRVJST1IgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1NUUkZUSU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0Y2dldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVENHRVRQR1JQIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0Y3NldHBncnAgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVENTRVRQR1JQIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0bXBmaWxlIGZ1bmN0aW9uLiAgKi8KLSNkZWZpbmUgSEFWRV9UTVBGSUxFIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB0aW1lcyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9USU1FUyAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgdHJ1bmNhdGUgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfVFJVTkNBVEUgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHVuYW1lIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1VOQU1FIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSB3YWl0cGlkIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX1dBSVRQSUQgMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxjb25pby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0NPTklPX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZWN0Lmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfRElSRUNUX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0RJUkVOVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8ZXJybm8uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfRVJSTk9fSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxpby5oPiBoZWFkZXIgZmlsZS4gKi8KLSN1bmRlZiBIQVZFX0lPX0gKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8bmN1cnNlcy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9OQ1VSU0VTX0ggMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHByb2Nlc3MuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfUFJPQ0VTU19IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c2lnbmFsLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NJR05BTF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2ZpbGUuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX0ZJTEVfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfUEFSQU1fSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9zZWxlY3QuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NFTEVDVF9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RJTUVTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1RZUEVTX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdW4uaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1VOX0ggMQotCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIDxzeXMvdXRzbmFtZS5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TWVNfVVRTTkFNRV9IIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3dhaXQuaD4gaGVhZGVyIGZpbGUuICovCi0jZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9VTklTVERfSCAxCi0KLS8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgPHV0aW1lLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1VUSU1FX0ggMQotCi0vKiBFTVggaGFzIGFuIHNucHJpbnRmKCkuICovCi0jZGVmaW5lIEhBVkVfU05QUklOVEYgMQotCi0jZW5kaWYgLyogIVB5X0NPTkZJR19IICovCi0KZGlmZiAtLWdpdCBhL1BDL29zMmVteC9weXRob24zMy5kZWYgYi9QQy9vczJlbXgvcHl0aG9uMzMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNTY3MjZiLi4wMDAwMDAwCi0tLSBhL1BDL29zMmVteC9weXRob24zMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwxMzE0ICswLDAgQEAKLUxJQlJBUlkgcHl0aG9uMzMgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRSAKLURFU0NSSVBUSU9OICJQeXRob24gMi42IENvcmUgRExMIiAKLVBST1RNT0RFIAotREFUQSBNVUxUSVBMRSBOT05TSEFSRUQgCi1FWFBPUlRTIAotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29uZmlnKQotICAiX1B5SW1wb3J0X0luaXR0YWIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkbGZjbikKLTsgICJkbG9wZW4iCi07ICAiZGxzeW0iCi07ICAiZGxjbG9zZSIKLTsgICJkbGVycm9yIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0cGF0aHApCi0gICJQeV9HZXRQcm9ncmFtRnVsbFBhdGgiCi0gICJQeV9HZXRQcmVmaXgiCi0gICJQeV9HZXRFeGVjUHJlZml4IgotICAiUHlfR2V0UGF0aCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGJ1aWxkaW5mbykKLSAgIlB5X0dldEJ1aWxkSW5mbyIKLSAgIl9QeV9zdm52ZXJzaW9uIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWFpbikKLSAgIlB5X01haW4iCi0gICJQeV9HZXRBcmdjQXJndiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFjY2VsZXIpCi0gICJQeUdyYW1tYXJfQWRkQWNjZWxlcmF0b3JzIgotICAiUHlHcmFtbWFyX1JlbW92ZUFjY2VsZXJhdG9ycyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdyYW1tYXIxKQotICAiUHlHcmFtbWFyX0ZpbmRERkEiCi0gICJQeUdyYW1tYXJfTGFiZWxSZXByIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobGlzdG5vZGUpCi0gICJQeU5vZGVfTGlzdFRyZWUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihub2RlKQotICAiUHlOb2RlX05ldyIKLSAgIlB5Tm9kZV9BZGRDaGlsZCIKLSAgIlB5Tm9kZV9GcmVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocGFyc2VyKQotICAiUHlQYXJzZXJfQWRkVG9rZW4iCi0gICJQeVBhcnNlcl9OZXciCi0gICJQeVBhcnNlcl9EZWxldGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihwYXJzZXRvaykKLSAgIlB5UGFyc2VyX1BhcnNlU3RyaW5nIgotICAiUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfUGFyc2VGaWxlIgotICAiUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3MiCi0gICJQeVBhcnNlcl9QYXJzZVN0cmluZ0ZsYWdzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYml0c2V0KQotICAiX1B5X25ld2JpdHNldCIKLSAgIl9QeV9kZWxiaXRzZXQiCi0gICJfUHlfYWRkYml0IgotICAiX1B5X3NhbWViaXRzZXQiCi0gICJfUHlfbWVyZ2ViaXRzZXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZXRhZ3JhbW1hcikKLSAgIl9QeV9tZXRhX2dyYW1tYXIiCi0gICJQeV9tZXRhX2dyYW1tYXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0b2tlbml6ZXIpCi0gICJQeVRva2VuX09uZUNoYXIiCi0gICJQeVRva2VuX1R3b0NoYXJzIgotICAiUHlUb2tlbl9UaHJlZUNoYXJzIgotICAiUHlUb2tlbml6ZXJfRnJvbVN0cmluZyIKLSAgIlB5VG9rZW5pemVyX0ZyZWUiCi0gICJQeVRva2VuaXplcl9Gcm9tRmlsZSIKLSAgIlB5VG9rZW5pemVyX0dldCIKLSAgIl9QeVBhcnNlcl9Ub2tlbk5hbWVzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobXlyZWFkbGluZSkKLSAgIl9QeU9TX1JlYWRsaW5lVFN0YXRlIgotICAiUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciIKLSAgIlB5T1NfU3RkaW9SZWFkbGluZSIKLSAgIlB5T1NfUmVhZGxpbmUiCi0gICJQeU9TX0lucHV0SG9vayIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFic3RyYWN0KQotICAiX1B5T2JqZWN0X0xlbmd0aEhpbnQiCi0gICJQeU1hcHBpbmdfU2l6ZSIKLSAgIlB5T2JqZWN0X0NhbGxNZXRob2QiCi0gICJQeU9iamVjdF9HZXRJdGVtIgotICAiUHlTZXF1ZW5jZV9HZXRJdGVtIgotICAiUHlPYmplY3RfU2V0SXRlbSIKLSAgIlB5U2VxdWVuY2VfU2V0SXRlbSIKLSAgIlB5T2JqZWN0X0RlbEl0ZW0iCi0gICJQeVNlcXVlbmNlX0RlbEl0ZW0iCi0gICJQeU51bWJlcl9NdWx0aXBseSIKLSAgIlB5TnVtYmVyX0luUGxhY2VBZGQiCi0gICJQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkiCi0gICJQeU51bWJlcl9JbnQiCi0gICJQeU51bWJlcl9Mb25nIgotICAiUHlOdW1iZXJfRmxvYXQiCi0gICJQeVNlcXVlbmNlX0NvbmNhdCIKLSAgIlB5U2VxdWVuY2VfUmVwZWF0IgotICAiUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0IgotICAiUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0IgotICAiUHlTZXF1ZW5jZV9HZXRTbGljZSIKLSAgIlB5U2VxdWVuY2VfU2V0U2xpY2UiCi0gICJQeVNlcXVlbmNlX1R1cGxlIgotICAiUHlPYmplY3RfR2V0SXRlciIKLSAgIlB5SXRlcl9OZXh0IgotICAiUHlTZXF1ZW5jZV9GYXN0IgotICAiX1B5U2VxdWVuY2VfSXRlclNlYXJjaCIKLSAgIlB5T2JqZWN0X0NhbGxGdW5jdGlvbiIKLSAgIl9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQiCi0gICJfUHlPYmplY3RfQ2FsbE1ldGhvZF9TaXplVCIKLSAgIlB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzIgotICAiUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyIKLSAgIlB5T2JqZWN0X0NtcCIKLSAgIlB5T2JqZWN0X0NhbGwiCi0gICJQeU9iamVjdF9DYWxsT2JqZWN0IgotICAiUHlPYmplY3RfVHlwZSIKLSAgIlB5T2JqZWN0X1NpemUiCi0gICJQeU9iamVjdF9MZW5ndGgiCi0gICJQeU9iamVjdF9EZWxJdGVtU3RyaW5nIgotICAiUHlPYmplY3RfQXNDaGFyQnVmZmVyIgotICAiUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyIgotICAiUHlPYmplY3RfQXNSZWFkQnVmZmVyIgotICAiUHlPYmplY3RfQXNXcml0ZUJ1ZmZlciIKLSAgIlB5TnVtYmVyX0NoZWNrIgotICAiUHlOdW1iZXJfQWRkIgotICAiUHlOdW1iZXJfU3VidHJhY3QiCi0gICJQeU51bWJlcl9EaXZpZGUiCi0gICJQeU51bWJlcl9GbG9vckRpdmlkZSIKLSAgIlB5TnVtYmVyX1RydWVEaXZpZGUiCi0gICJQeU51bWJlcl9SZW1haW5kZXIiCi0gICJQeU51bWJlcl9EaXZtb2QiCi0gICJQeU51bWJlcl9Qb3dlciIKLSAgIlB5TnVtYmVyX05lZ2F0aXZlIgotICAiUHlOdW1iZXJfUG9zaXRpdmUiCi0gICJQeU51bWJlcl9BYnNvbHV0ZSIKLSAgIlB5TnVtYmVyX0ludmVydCIKLSAgIlB5TnVtYmVyX0xzaGlmdCIKLSAgIlB5TnVtYmVyX1JzaGlmdCIKLSAgIlB5TnVtYmVyX0FuZCIKLSAgIlB5TnVtYmVyX1hvciIKLSAgIlB5TnVtYmVyX09yIgotICAiUHlOdW1iZXJfSW5kZXgiCi0gICJQeU51bWJlcl9JblBsYWNlU3VidHJhY3QiCi0gICJQeU51bWJlcl9JblBsYWNlRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlIgotICAiUHlOdW1iZXJfSW5QbGFjZVRydWVEaXZpZGUiCi0gICJQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyIgotICAiUHlOdW1iZXJfSW5QbGFjZVBvd2VyIgotICAiUHlOdW1iZXJfSW5QbGFjZUxzaGlmdCIKLSAgIlB5TnVtYmVyX0luUGxhY2VSc2hpZnQiCi0gICJQeU51bWJlcl9JblBsYWNlQW5kIgotICAiUHlOdW1iZXJfSW5QbGFjZVhvciIKLSAgIlB5TnVtYmVyX0luUGxhY2VPciIKLSAgIlB5U2VxdWVuY2VfQ2hlY2siCi0gICJQeVNlcXVlbmNlX1NpemUiCi0gICJQeVNlcXVlbmNlX0xlbmd0aCIKLSAgIlB5U2VxdWVuY2VfRGVsU2xpY2UiCi0gICJQeVNlcXVlbmNlX0xpc3QiCi0gICJQeVNlcXVlbmNlX0NvdW50IgotICAiUHlTZXF1ZW5jZV9Db250YWlucyIKLSAgIlB5U2VxdWVuY2VfSW4iCi0gICJQeVNlcXVlbmNlX0luZGV4IgotICAiUHlNYXBwaW5nX0NoZWNrIgotICAiUHlNYXBwaW5nX0xlbmd0aCIKLSAgIlB5TWFwcGluZ19IYXNLZXlTdHJpbmciCi0gICJQeU1hcHBpbmdfSGFzS2V5IgotICAiUHlNYXBwaW5nX0dldEl0ZW1TdHJpbmciCi0gICJQeU1hcHBpbmdfU2V0SXRlbVN0cmluZyIKLSAgIlB5T2JqZWN0X0lzSW5zdGFuY2UiCi0gICJQeU9iamVjdF9Jc1N1YmNsYXNzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYm9vbG9iamVjdCkKLSAgIlB5Qm9vbF9Gcm9tTG9uZyIKLSAgIlB5Qm9vbF9UeXBlIgotICAiX1B5X1plcm9TdHJ1Y3QiCi0gICJfUHlfVHJ1ZVN0cnVjdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJ1ZmZlcm9iamVjdCkKLSAgIlB5QnVmZmVyX0Zyb21PYmplY3QiCi0gICJQeUJ1ZmZlcl9Gcm9tUmVhZFdyaXRlT2JqZWN0IgotICAiUHlCdWZmZXJfRnJvbU1lbW9yeSIKLSAgIlB5QnVmZmVyX0Zyb21SZWFkV3JpdGVNZW1vcnkiCi0gICJQeUJ1ZmZlcl9OZXciCi0gICJQeUJ1ZmZlcl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2VsbG9iamVjdCkKLSAgIlB5Q2VsbF9OZXciCi0gICJQeUNlbGxfR2V0IgotICAiUHlDZWxsX1NldCIKLSAgIlB5Q2VsbF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2xhc3NvYmplY3QpCi0gICJQeUNsYXNzX05ldyIKLSAgIlB5Q2xhc3NfSXNTdWJjbGFzcyIKLSAgIlB5SW5zdGFuY2VfTmV3IgotICAiUHlJbnN0YW5jZV9OZXdSYXciCi0gICJQeU1ldGhvZF9OZXciCi0gICJQeU1ldGhvZF9GdW5jdGlvbiIKLSAgIlB5TWV0aG9kX1NlbGYiCi0gICJQeU1ldGhvZF9DbGFzcyIKLSAgIl9QeUluc3RhbmNlX0xvb2t1cCIKLSAgIlB5TWV0aG9kX0ZpbmkiCi0gICJQeUNsYXNzX1R5cGUiCi0gICJQeUluc3RhbmNlX1R5cGUiCi0gICJQeU1ldGhvZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY2Fwc3VsZSkKLSAgIlB5Q2Fwc3VsZV9HZXRDb250ZXh0IgotICAiUHlDYXBzdWxlX0dldERlc3RydWN0b3IiCi0gICJQeUNhcHN1bGVfR2V0TmFtZSIKLSAgIlB5Q2Fwc3VsZV9HZXRQb2ludGVyIgotICAiUHlDYXBzdWxlX0ltcG9ydCIKLSAgIlB5Q2Fwc3VsZV9Jc1ZhbGlkIgotICAiUHlDYXBzdWxlX05ldyIKLSAgIlB5Q2Fwc3VsZV9TZXRDb250ZXh0IgotICAiUHlDYXBzdWxlX1NldERlc3RydWN0b3IiCi0gICJQeUNhcHN1bGVfU2V0TmFtZSIKLSAgIlB5Q2Fwc3VsZV9TZXRQb2ludGVyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29iamVjdCkKLSAgIlB5Q09iamVjdF9Gcm9tVm9pZFB0ciIKLSAgIlB5Q09iamVjdF9Gcm9tVm9pZFB0ckFuZERlc2MiCi0gICJQeUNPYmplY3RfQXNWb2lkUHRyIgotICAiUHlDT2JqZWN0X0dldERlc2MiCi0gICJQeUNPYmplY3RfSW1wb3J0IgotICAiUHlDT2JqZWN0X1NldFZvaWRQdHIiCi0gICJQeUNPYmplY3RfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvZGVvYmplY3QpCi0gICJQeUNvZGVfTmV3IgotICAiUHlDb2RlX0FkZHIyTGluZSIKLSAgIlB5Q29kZV9DaGVja0xpbmVOdW1iZXIiCi0gICJQeUNvZGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNvbXBsZXhvYmplY3QpCi0gICJfUHlfY19wb3ciCi0gICJfUHlfY19zdW0iCi0gICJfUHlfY19kaWZmIgotICAiX1B5X2NfbmVnIgotICAiX1B5X2NfcHJvZCIKLSAgIl9QeV9jX3F1b3QiCi0gICJQeUNvbXBsZXhfRnJvbUNDb21wbGV4IgotICAiUHlDb21wbGV4X0Zyb21Eb3VibGVzIgotICAiUHlDb21wbGV4X1JlYWxBc0RvdWJsZSIKLSAgIlB5Q29tcGxleF9JbWFnQXNEb3VibGUiCi0gICJQeUNvbXBsZXhfQXNDQ29tcGxleCIKLSAgIlB5Q29tcGxleF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGVzY3JvYmplY3QpCi0gICJQeVdyYXBwZXJfTmV3IgotICAiUHlEZXNjcl9OZXdNZXRob2QiCi0gICJQeURlc2NyX05ld0NsYXNzTWV0aG9kIgotICAiUHlEZXNjcl9OZXdNZW1iZXIiCi0gICJQeURlc2NyX05ld0dldFNldCIKLSAgIlB5RGVzY3JfTmV3V3JhcHBlciIKLSAgIlB5RGljdFByb3h5X05ldyIKLSAgIlB5V3JhcHBlckRlc2NyX1R5cGUiCi0gICJQeVByb3BlcnR5X1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihkaWN0b2JqZWN0KQotICAiUHlEaWN0X05ldyIKLSAgIlB5RGljdF9HZXRJdGVtIgotICAiUHlEaWN0X1NldEl0ZW0iCi0gICJQeURpY3RfRGVsSXRlbSIKLSAgIlB5RGljdF9DbGVhciIKLSAgIlB5RGljdF9NZXJnZUZyb21TZXEyIgotICAiUHlEaWN0X01lcmdlIgotICAiUHlEaWN0X0tleXMiCi0gICJQeURpY3RfVmFsdWVzIgotICAiUHlEaWN0X0NvbnRhaW5zIgotICAiUHlEaWN0X05leHQiCi0gICJQeURpY3RfSXRlbXMiCi0gICJQeURpY3RfU2l6ZSIKLSAgIlB5RGljdF9Db3B5IgotICAiUHlEaWN0X1VwZGF0ZSIKLSAgIlB5RGljdF9HZXRJdGVtU3RyaW5nIgotICAiUHlEaWN0X1NldEl0ZW1TdHJpbmciCi0gICJQeURpY3RfRGVsSXRlbVN0cmluZyIKLSAgIlB5RGljdF9UeXBlIgotICAiUHlEaWN0SXRlcktleV9UeXBlIgotICAiUHlEaWN0SXRlclZhbHVlX1R5cGUiCi0gICJQeURpY3RJdGVySXRlbV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZW51bW9iamVjdCkKLSAgIlB5RW51bV9UeXBlIgotICAiUHlSZXZlcnNlZF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmlsZW9iamVjdCkKLSAgIlB5RmlsZV9Gcm9tU3RyaW5nIgotICAiUHlfVW5pdmVyc2FsTmV3bGluZUZyZWFkIgotICAiUHlGaWxlX0dldExpbmUiCi0gICJQeUZpbGVfU29mdFNwYWNlIgotICAiUHlGaWxlX1dyaXRlT2JqZWN0IgotICAiUHlGaWxlX1dyaXRlU3RyaW5nIgotICAiUHlPYmplY3RfQXNGaWxlRGVzY3JpcHRvciIKLSAgIlB5X1VuaXZlcnNhbE5ld2xpbmVGZ2V0cyIKLSAgIlB5RmlsZV9TZXRCdWZTaXplIgotICAiUHlGaWxlX1NldEVuY29kaW5nIgotICAiUHlGaWxlX0Zyb21GaWxlIgotICAiUHlGaWxlX0FzRmlsZSIKLSAgIlB5RmlsZV9OYW1lIgotICAiUHlGaWxlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmbG9hdG9iamVjdCkKLSAgIlB5RmxvYXRfRnJvbVN0cmluZyIKLSAgIlB5RmxvYXRfQXNEb3VibGUiCi0gICJQeUZsb2F0X0ZpbmkiCi0gICJfUHlGbG9hdF9QYWNrNCIKLSAgIl9QeUZsb2F0X1BhY2s4IgotICAiX1B5RmxvYXRfVW5wYWNrNCIKLSAgIl9QeUZsb2F0X1VucGFjazgiCi0gICJQeUZsb2F0X0Zyb21Eb3VibGUiCi0gICJQeUZsb2F0X0FzUmVwclN0cmluZyIKLSAgIlB5RmxvYXRfQXNTdHJpbmciCi0gICJfUHlGbG9hdF9Jbml0IgotICAiUHlGbG9hdF9Bc1N0cmluZ0V4IgotICAiUHlGbG9hdF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZnJhbWVvYmplY3QpCi0gICJQeUZyYW1lX05ldyIKLSAgIlB5RnJhbWVfRmFzdFRvTG9jYWxzIgotICAiUHlGcmFtZV9Mb2NhbHNUb0Zhc3QiCi0gICJfUHlGcmFtZV9Jbml0IgotICAiUHlGcmFtZV9GaW5pIgotICAiUHlGcmFtZV9CbG9ja1NldHVwIgotICAiUHlGcmFtZV9CbG9ja1BvcCIKLSAgIlB5RnJhbWVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZ1bmNvYmplY3QpCi0gICJQeUZ1bmN0aW9uX05ldyIKLSAgIlB5RnVuY3Rpb25fR2V0Q29kZSIKLSAgIlB5RnVuY3Rpb25fR2V0R2xvYmFscyIKLSAgIlB5RnVuY3Rpb25fR2V0TW9kdWxlIgotICAiUHlGdW5jdGlvbl9HZXREZWZhdWx0cyIKLSAgIlB5RnVuY3Rpb25fU2V0RGVmYXVsdHMiCi0gICJQeUZ1bmN0aW9uX0dldENsb3N1cmUiCi0gICJQeUZ1bmN0aW9uX1NldENsb3N1cmUiCi0gICJQeUNsYXNzTWV0aG9kX05ldyIKLSAgIlB5U3RhdGljTWV0aG9kX05ldyIKLSAgIlB5RnVuY3Rpb25fVHlwZSIKLSAgIlB5Q2xhc3NNZXRob2RfVHlwZSIKLSAgIlB5U3RhdGljTWV0aG9kX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZW5vYmplY3QpCi0gICJQeUdlbl9OZXciCi0gICJQeUdlbl9OZWVkc0ZpbmFsaXppbmciCi0gICJQeUdlbl9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW50b2JqZWN0KQotICAiUHlJbnRfQXNMb25nIgotICAiUHlJbnRfQXNVbnNpZ25lZExvbmdNYXNrIgotICAiUHlJbnRfQXNVbnNpZ25lZExvbmdMb25nTWFzayIKLSAgIlB5SW50X0Zyb21TdHJpbmciCi0gICJQeUludF9Bc1NzaXplX3QiCi0gICJQeUludF9GaW5pIgotICAiUHlJbnRfRnJvbVVuaWNvZGUiCi0gICJQeUludF9Gcm9tTG9uZyIKLSAgIlB5SW50X0Zyb21TaXplX3QiCi0gICJQeUludF9Gcm9tU3NpemVfdCIKLSAgIlB5SW50X0dldE1heCIKLSAgIl9QeUludF9Jbml0IgotICAiUHlJbnRfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGl0ZXJvYmplY3QpCi0gICJQeVNlcUl0ZXJfTmV3IgotICAiUHlDYWxsSXRlcl9OZXciCi0gICJQeVNlcUl0ZXJfVHlwZSIKLSAgIlB5Q2FsbEl0ZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGxpc3RvYmplY3QpCi0gICJQeUxpc3RfTmV3IgotICAiUHlMaXN0X0FwcGVuZCIKLSAgIlB5TGlzdF9TaXplIgotICAiUHlMaXN0X0dldEl0ZW0iCi0gICJQeUxpc3RfU2V0SXRlbSIKLSAgIlB5TGlzdF9JbnNlcnQiCi0gICJQeUxpc3RfR2V0U2xpY2UiCi0gICJQeUxpc3RfU2V0U2xpY2UiCi0gICJQeUxpc3RfU29ydCIKLSAgIlB5TGlzdF9SZXZlcnNlIgotICAiUHlMaXN0X0FzVHVwbGUiCi0gICJfUHlMaXN0X0V4dGVuZCIKLSAgIlB5TGlzdF9GaW5pIgotICAiUHlMaXN0X1R5cGUiCi0gICJQeUxpc3RJdGVyX1R5cGUiCi0gICJQeUxpc3RSZXZJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihsb25nb2JqZWN0KQotICAiUHlMb25nX0Zyb21Eb3VibGUiCi0gICJQeUxvbmdfQXNMb25nIgotICAiX1B5TG9uZ19Bc1NzaXplX3QiCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmciCi0gICJfUHlMb25nX0Zyb21CeXRlQXJyYXkiCi0gICJfUHlMb25nX0FzQnl0ZUFycmF5IgotICAiUHlMb25nX0FzRG91YmxlIgotICAiUHlMb25nX0Zyb21Mb25nTG9uZyIKLSAgIlB5TG9uZ19Bc0xvbmdMb25nIgotICAiUHlMb25nX0Zyb21TdHJpbmciCi0gICJQeUxvbmdfRnJvbUxvbmciCi0gICJQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZyIKLSAgIlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2siCi0gICJfUHlMb25nX0Zyb21TaXplX3QiCi0gICJfUHlMb25nX0Zyb21Tc2l6ZV90IgotICAiX1B5TG9uZ19Bc1NjYWxlZERvdWJsZSIKLSAgIlB5TG9uZ19Gcm9tVm9pZFB0ciIKLSAgIlB5TG9uZ19Bc1ZvaWRQdHIiCi0gICJQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmciCi0gICJQeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nIgotICAiUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZ01hc2siCi0gICJQeUxvbmdfRnJvbVVuaWNvZGUiCi0gICJfUHlMb25nX1NpZ24iCi0gICJfUHlMb25nX051bUJpdHMiCi0gICJfUHlMb25nX05ldyIKLSAgIl9QeUxvbmdfQ29weSIKLSAgIlB5TG9uZ19UeXBlIgotICAiX1B5TG9uZ19EaWdpdFZhbHVlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWV0aG9kb2JqZWN0KQotICAiUHlDRnVuY3Rpb25fQ2FsbCIKLSAgIlB5X0ZpbmRNZXRob2RJbkNoYWluIgotICAiUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24iCi0gICJQeUNGdW5jdGlvbl9HZXRTZWxmIgotICAiUHlDRnVuY3Rpb25fR2V0RmxhZ3MiCi0gICJQeV9GaW5kTWV0aG9kIgotICAiUHlDRnVuY3Rpb25fTmV3RXgiCi0gICJQeUNGdW5jdGlvbl9GaW5pIgotICAiUHlDRnVuY3Rpb25fTmV3IgotICAiUHlDRnVuY3Rpb25fVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1vZHVsZW9iamVjdCkKLSAgIlB5TW9kdWxlX05ldyIKLSAgIl9QeU1vZHVsZV9DbGVhciIKLSAgIlB5TW9kdWxlX0dldERpY3QiCi0gICJQeU1vZHVsZV9HZXROYW1lIgotICAiUHlNb2R1bGVfR2V0RmlsZW5hbWUiCi0gICJQeU1vZHVsZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob2JqZWN0KQotICAiUHlfRGl2aXNpb25XYXJuaW5nRmxhZyIKLSAgIlB5T2JqZWN0X1N0ciIKLSAgIlB5T2JqZWN0X1JlcHIiCi0gICJfUHlPYmplY3RfU3RyIgotICAiUHlPYmplY3RfVW5pY29kZSIKLSAgIlB5T2JqZWN0X0dldEF0dHIiCi0gICJQeU9iamVjdF9Jc1RydWUiCi0gICJQeU51bWJlcl9Db2VyY2VFeCIKLSAgIlB5T2JqZWN0X0NvbXBhcmUiCi0gICJQeU9iamVjdF9SaWNoQ29tcGFyZSIKLSAgIl9QeV9IYXNoRG91YmxlIgotICAiUHlPYmplY3RfSGFzaCIKLSAgIlB5T2JqZWN0X1NldEF0dHIiCi0gICJQeU9iamVjdF9HZW5lcmljR2V0QXR0ciIKLSAgIlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyIgotICAiUHlDYWxsYWJsZV9DaGVjayIKLSAgIlB5T2JqZWN0X0RpciIKLSAgIlB5TWVtX01hbGxvYyIKLSAgIlB5TWVtX1JlYWxsb2MiCi0gICJQeU1lbV9GcmVlIgotICAiUHlPYmplY3RfUHJpbnQiCi0gICJfUHlPYmplY3RfRHVtcCIKLSAgIlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbCIKLSAgIlB5T2JqZWN0X0dldEF0dHJTdHJpbmciCi0gICJQeU9iamVjdF9TZXRBdHRyU3RyaW5nIgotICAiUHlPYmplY3RfSGFzQXR0clN0cmluZyIKLSAgIlB5T2JqZWN0X0hhc0F0dHIiCi0gICJfUHlPYmplY3RfR2V0RGljdFB0ciIKLSAgIlB5T2JqZWN0X1NlbGZJdGVyIgotICAiUHlPYmplY3RfTm90IgotICAiUHlOdW1iZXJfQ29lcmNlIgotICAiUHlfUmVwckVudGVyIgotICAiUHlfUmVwckxlYXZlIgotICAiX1B5X0hhc2hQb2ludGVyIgotICAiUHlfSW5jUmVmIgotICAiUHlfRGVjUmVmIgotICAiX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QiCi0gICJfUHlUcmFzaF9kZXN0cm95X2NoYWluIgotICAiUHlPYmplY3RfSW5pdCIKLSAgIlB5T2JqZWN0X0luaXRWYXIiCi0gICJfUHlPYmplY3RfTmV3IgotICAiX1B5T2JqZWN0X05ld1ZhciIKLSAgIl9QeU9iamVjdF9EZWwiCi0gICJfUHlfUmVhZHlUeXBlcyIKLSAgIl9QeV9Td2FwcGVkT3AiCi0gICJfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3QiCi0gICJfUHlfTm9uZVN0cnVjdCIKLSAgIl9QeV9jb2JqZWN0X2hhY2siCi0gICJfUHlfYWJzdHJhY3RfaGFjayIKLSAgIl9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIgotICAiX1B5VHJhc2hfZGVsZXRlX2xhdGVyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob2JtYWxsb2MpCi0gICJQeU9iamVjdF9NYWxsb2MiCi0gICJQeU9iamVjdF9GcmVlIgotICAiUHlPYmplY3RfUmVhbGxvYyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHJhbmdlb2JqZWN0KQotICAiUHlSYW5nZV9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2V0b2JqZWN0KQotICAiUHlTZXRfUG9wIgotICAiUHlTZXRfTmV3IgotICAiUHlGcm96ZW5TZXRfTmV3IgotICAiUHlTZXRfU2l6ZSIKLSAgIlB5U2V0X0NsZWFyIgotICAiUHlTZXRfQ29udGFpbnMiCi0gICJQeVNldF9EaXNjYXJkIgotICAiUHlTZXRfQWRkIgotICAiX1B5U2V0X05leHQiCi0gICJfUHlTZXRfVXBkYXRlIgotICAiUHlTZXRfRmluaSIKLSAgIlB5U2V0X1R5cGUiCi0gICJQeUZyb3plblNldF9UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2xpY2VvYmplY3QpCi0gICJfUHlTbGljZV9Gcm9tSW5kaWNlcyIKLSAgIlB5U2xpY2VfR2V0SW5kaWNlcyIKLSAgIlB5U2xpY2VfR2V0SW5kaWNlc0V4IgotICAiUHlTbGljZV9OZXciCi0gICJfUHlfRWxsaXBzaXNPYmplY3QiCi0gICJQeVNsaWNlX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJpbmdvYmplY3QpCi0gICJQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZSIKLSAgIlB5U3RyaW5nX0ludGVybkluUGxhY2UiCi0gICJQeVN0cmluZ19Gcm9tU3RyaW5nIgotICAiUHlTdHJpbmdfRnJvbUZvcm1hdFYiCi0gICJQeVN0cmluZ19Bc1N0cmluZyIKLSAgIl9QeVN0cmluZ19SZXNpemUiCi0gICJQeVN0cmluZ19Gcm9tRm9ybWF0IgotICAiUHlTdHJpbmdfQXNEZWNvZGVkU3RyaW5nIgotICAiUHlTdHJpbmdfQXNFbmNvZGVkU3RyaW5nIgotICAiUHlTdHJpbmdfRGVjb2RlRXNjYXBlIgotICAiUHlTdHJpbmdfUmVwciIKLSAgIlB5U3RyaW5nX0FzU3RyaW5nQW5kU2l6ZSIKLSAgIl9QeVN0cmluZ19Gb3JtYXRMb25nIgotICAiUHlTdHJpbmdfRm9ybWF0IgotICAiX1B5X1JlbGVhc2VJbnRlcm5lZFN0cmluZ3MiCi0gICJQeVN0cmluZ19TaXplIgotICAiUHlTdHJpbmdfQ29uY2F0IgotICAiUHlTdHJpbmdfQ29uY2F0QW5kRGVsIgotICAiX1B5U3RyaW5nX0VxIgotICAiUHlTdHJpbmdfSW50ZXJuSW1tb3J0YWwiCi0gICJQeVN0cmluZ19JbnRlcm5Gcm9tU3RyaW5nIgotICAiX1B5U3RyaW5nX0pvaW4iCi0gICJQeVN0cmluZ19EZWNvZGUiCi0gICJQeVN0cmluZ19FbmNvZGUiCi0gICJQeVN0cmluZ19Bc0VuY29kZWRPYmplY3QiCi0gICJQeVN0cmluZ19Bc0RlY29kZWRPYmplY3QiCi0gICJQeVN0cmluZ19GaW5pIgotICAiUHlTdHJpbmdfVHlwZSIKLSAgIlB5QmFzZVN0cmluZ19UeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc3RydWN0c2VxKQotICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSIKLSAgIlB5U3RydWN0U2VxdWVuY2VfTmV3IgotICAiUHlTdHJ1Y3RTZXF1ZW5jZV9Vbm5hbWVkRmllbGQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0dXBsZW9iamVjdCkKLSAgIlB5VHVwbGVfTmV3IgotICAiUHlUdXBsZV9QYWNrIgotICAiX1B5VHVwbGVfUmVzaXplIgotICAiUHlUdXBsZV9TaXplIgotICAiUHlUdXBsZV9HZXRJdGVtIgotICAiUHlUdXBsZV9TZXRJdGVtIgotICAiUHlUdXBsZV9HZXRTbGljZSIKLSAgIlB5VHVwbGVfRmluaSIKLSAgIlB5VHVwbGVfVHlwZSIKLSAgIlB5VHVwbGVJdGVyX1R5cGUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0eXBlb2JqZWN0KQotICAiUHlUeXBlX0lzU3VidHlwZSIKLSAgIl9QeVR5cGVfTG9va3VwIgotICAiUHlUeXBlX1JlYWR5IgotICAiUHlUeXBlX0dlbmVyaWNBbGxvYyIKLSAgIl9QeU9iamVjdF9TbG90Q29tcGFyZSIKLSAgIlB5VHlwZV9HZW5lcmljTmV3IgotICAiUHlUeXBlX1R5cGUiCi0gICJQeUJhc2VPYmplY3RfVHlwZSIKLSAgIlB5U3VwZXJfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHVuaWNvZGVvYmplY3QpCi0gICJQeVVuaWNvZGVVQ1MyX1Jlc2l6ZSIKLSAgIlB5VW5pY29kZVVDUzJfRnJvbU9yZGluYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21PYmplY3QiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21FbmNvZGVkT2JqZWN0IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldERlZmF1bHRFbmNvZGluZyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOCIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlTGF0aW4xIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVBU0NJSSIKLSAgIlB5VW5pY29kZVVDUzJfQXNFbmNvZGVkU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc1VURjhTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0FzTGF0aW4xU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9Bc0FTQ0lJU3RyaW5nIgotICAiUHlVbmljb2RlX0RlY29kZVVURjciCi0gICJQeVVuaWNvZGVfRW5jb2RlVVRGNyIKLSAgIlB5VW5pY29kZVVDUzJfRGVjb2RlVVRGOFN0YXRlZnVsIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVVEY4IgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVVEYxNlN0YXRlZnVsIgotICAiUHlVbmljb2RlVUNTMl9Bc1VURjE2U3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9EZWNvZGVSYXdVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVSYXdVbmljb2RlRXNjYXBlIgotICAiX1B5VW5pY29kZV9EZWNvZGVVbmljb2RlSW50ZXJuYWwiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZUNoYXJtYXAiCi0gICJQeVVuaWNvZGVfQnVpbGRFbmNvZGluZ01hcCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlQ2hhcm1hcCIKLSAgIlB5VW5pY29kZVVDUzJfVHJhbnNsYXRlQ2hhcm1hcCIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlRGVjaW1hbCIKLSAgIlB5VW5pY29kZVVDUzJfQ291bnQiCi0gICJQeVVuaWNvZGVVQ1MyX0ZpbmQiCi0gICJQeVVuaWNvZGVVQ1MyX0pvaW4iCi0gICJQeVVuaWNvZGVVQ1MyX1NwbGl0bGluZXMiCi0gICJQeVVuaWNvZGVVQ1MyX0NvbXBhcmUiCi0gICJQeVVuaWNvZGVVQ1MyX0NvbnRhaW5zIgotICAiUHlVbmljb2RlVUNTMl9Db25jYXQiCi0gICJfUHlVbmljb2RlX1hTdHJpcCIKLSAgIlB5VW5pY29kZVVDUzJfUmVwbGFjZSIKLSAgIlB5VW5pY29kZVVDUzJfU3BsaXQiCi0gICJQeVVuaWNvZGVVQ1MyX1JTcGxpdCIKLSAgIlB5VW5pY29kZVVDUzJfRm9ybWF0IgotICAiX1B5VW5pY29kZVVDUzJfSW5pdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0ZpbmkiCi0gICJQeVVuaWNvZGVVQ1MyX0Zyb21Vbmljb2RlIgotICAiUHlVbmljb2RlVUNTMl9Bc1VuaWNvZGUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldFNpemUiCi0gICJQeVVuaWNvZGVVQ1MyX0dldE1heCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0FzRGVmYXVsdEVuY29kZWRTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX1NldERlZmF1bHRFbmNvZGluZyIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlIgotICAiUHlVbmljb2RlVUNTMl9Bc0VuY29kZWRPYmplY3QiCi0gICJQeVVuaWNvZGVVQ1MyX0RlY29kZVVURjE2IgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVVEYxNiIKLSAgIlB5VW5pY29kZVVDUzJfQXNVbmljb2RlRXNjYXBlU3RyaW5nIgotICAiUHlVbmljb2RlVUNTMl9FbmNvZGVVbmljb2RlRXNjYXBlIgotICAiUHlVbmljb2RlVUNTMl9Bc1Jhd1VuaWNvZGVFc2NhcGVTdHJpbmciCi0gICJQeVVuaWNvZGVVQ1MyX0VuY29kZUxhdGluMSIKLSAgIlB5VW5pY29kZVVDUzJfRW5jb2RlQVNDSUkiCi0gICJQeVVuaWNvZGVVQ1MyX0FzQ2hhcm1hcFN0cmluZyIKLSAgIlB5VW5pY29kZVVDUzJfUGFydGl0aW9uIgotICAiUHlVbmljb2RlVUNTMl9SUGFydGl0aW9uIgotICAiUHlVbmljb2RlVUNTMl9UcmFuc2xhdGUiCi0gICJQeVVuaWNvZGVVQ1MyX1RhaWxtYXRjaCIKLSAgIlB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3QiCi0gICJQeVVuaWNvZGVfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHVuaWNvZGVjdHlwZSkKLSAgIl9QeVVuaWNvZGVfVHlwZVJlY29yZHMiCi0gICJfUHlVbmljb2RlVUNTMl9Ub051bWVyaWMiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0xvd2VyY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzVXBwZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfSXNUaXRsZWNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc1doaXRlc3BhY2UiCi0gICJfUHlVbmljb2RlVUNTMl9Jc0xpbmVicmVhayIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvTG93ZXJjYXNlIgotICAiX1B5VW5pY29kZVVDUzJfVG9VcHBlcmNhc2UiCi0gICJfUHlVbmljb2RlVUNTMl9Ub1RpdGxlY2FzZSIKLSAgIl9QeVVuaWNvZGVVQ1MyX1RvRGVjaW1hbERpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfVG9EaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzRGVjaW1hbERpZ2l0IgotICAiX1B5VW5pY29kZVVDUzJfSXNEaWdpdCIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzTnVtZXJpYyIKLSAgIl9QeVVuaWNvZGVVQ1MyX0lzQWxwaGEiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih3ZWFrcmVmb2JqZWN0KQotICAiUHlXZWFrcmVmX05ld1JlZiIKLSAgIlB5V2Vha3JlZl9OZXdQcm94eSIKLSAgIlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMiCi0gICJQeVdlYWtyZWZfR2V0T2JqZWN0IgotICAiX1B5V2Vha3JlZl9HZXRXZWFrcmVmQ291bnQiCi0gICJfUHlXZWFrcmVmX0NsZWFyUmVmIgotICAiX1B5V2Vha3JlZl9SZWZUeXBlIgotICAiX1B5V2Vha3JlZl9Qcm94eVR5cGUiCi0gICJfUHlXZWFrcmVmX0NhbGxhYmxlUHJveHlUeXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoUHl0aG9uLWFzdCkKLTsgICJpbml0X2FzdCIKLSAgIk1vZHVsZSIKLSAgIkludGVyYWN0aXZlIgotICAiRXhwcmVzc2lvbiIKLSAgIlN1aXRlIgotICAiRnVuY3Rpb25EZWYiCi0gICJDbGFzc0RlZiIKLSAgIlJldHVybiIKLSAgIkRlbGV0ZSIKLSAgIkFzc2lnbiIKLSAgIkF1Z0Fzc2lnbiIKLSAgIlByaW50IgotICAiRm9yIgotICAiV2hpbGUiCi0gICJJZiIKLSAgIldpdGgiCi0gICJSYWlzZSIKLSAgIlRyeUV4Y2VwdCIKLSAgIlRyeUZpbmFsbHkiCi0gICJBc3NlcnQiCi0gICJJbXBvcnQiCi0gICJJbXBvcnRGcm9tIgotICAiRXhlYyIKLSAgIkdsb2JhbCIKLSAgIkV4cHIiCi0gICJQYXNzIgotICAiQnJlYWsiCi0gICJDb250aW51ZSIKLSAgIkJvb2xPcCIKLSAgIkJpbk9wIgotICAiVW5hcnlPcCIKLSAgIkxhbWJkYSIKLSAgIklmRXhwIgotICAiRGljdCIKLSAgIkxpc3RDb21wIgotICAiR2VuZXJhdG9yRXhwIgotICAiWWllbGQiCi0gICJDb21wYXJlIgotICAiQ2FsbCIKLSAgIlJlcHIiCi0gICJOdW0iCi0gICJTdHIiCi0gICJBdHRyaWJ1dGUiCi0gICJTdWJzY3JpcHQiCi0gICJOYW1lIgotICAiTGlzdCIKLSAgIlR1cGxlIgotICAiRWxsaXBzaXMiCi0gICJTbGljZSIKLSAgIkV4dFNsaWNlIgotICAiSW5kZXgiCi0gICJjb21wcmVoZW5zaW9uIgotICAiZXhjZXB0aGFuZGxlciIKLSAgImFyZ3VtZW50cyIKLSAgImtleXdvcmQiCi0gICJhbGlhcyIKLSAgIlB5QVNUX21vZDJvYmoiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhc2RsKQotICAiYXNkbF9zZXFfbmV3IgotICAiYXNkbF9pbnRfc2VxX25ldyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGFzdCkKLSAgIlB5QVNUX0Zyb21Ob2RlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoYmx0aW5tb2R1bGUpCi0gICJfUHlCdWlsdGluX0luaXQiCi0gICJQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXhjZXB0aW9ucykKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQiCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQiCi0gICJfUHlFeGNfSW5pdCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0NyZWF0ZSIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nIgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmciCi0gICJQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3QiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRTdGFydCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldFN0YXJ0IgotICAiUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0U3RhcnQiCi0gICJQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRTdGFydCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZCIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbiIKLSAgIlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbiIKLSAgIlB5VW5pY29kZURlY29kZUVycm9yX1NldFJlYXNvbiIKLSAgIlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFJlYXNvbiIKLSAgIl9QeUV4Y19GaW5pIgotICAiUHlFeGNfQmFzZUV4Y2VwdGlvbiIKLSAgIlB5RXhjX0V4Y2VwdGlvbiIKLSAgIlB5RXhjX1N0YW5kYXJkRXJyb3IiCi0gICJQeUV4Y19UeXBlRXJyb3IiCi0gICJQeUV4Y19TdG9wSXRlcmF0aW9uIgotICAiUHlFeGNfR2VuZXJhdG9yRXhpdCIKLSAgIlB5RXhjX1N5c3RlbUV4aXQiCi0gICJQeUV4Y19LZXlib2FyZEludGVycnVwdCIKLSAgIlB5RXhjX0ltcG9ydEVycm9yIgotICAiUHlFeGNfRW52aXJvbm1lbnRFcnJvciIKLSAgIlB5RXhjX0lPRXJyb3IiCi0gICJQeUV4Y19PU0Vycm9yIgotICAiUHlFeGNfRU9GRXJyb3IiCi0gICJQeUV4Y19SdW50aW1lRXJyb3IiCi0gICJQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIgotICAiUHlFeGNfTmFtZUVycm9yIgotICAiUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IiCi0gICJQeUV4Y19BdHRyaWJ1dGVFcnJvciIKLSAgIlB5RXhjX0luZGV4RXJyb3IiCi0gICJQeUV4Y19TeW50YXhFcnJvciIKLSAgIlB5RXhjX0luZGVudGF0aW9uRXJyb3IiCi0gICJQeUV4Y19UYWJFcnJvciIKLSAgIlB5RXhjX0xvb2t1cEVycm9yIgotICAiUHlFeGNfS2V5RXJyb3IiCi0gICJQeUV4Y19WYWx1ZUVycm9yIgotICAiUHlFeGNfVW5pY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZUVuY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZURlY29kZUVycm9yIgotICAiUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yIgotICAiUHlFeGNfQXNzZXJ0aW9uRXJyb3IiCi0gICJQeUV4Y19Bcml0aG1ldGljRXJyb3IiCi0gICJQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IiCi0gICJQeUV4Y19PdmVyZmxvd0Vycm9yIgotICAiUHlFeGNfWmVyb0RpdmlzaW9uRXJyb3IiCi0gICJQeUV4Y19TeXN0ZW1FcnJvciIKLSAgIlB5RXhjX1JlZmVyZW5jZUVycm9yIgotICAiUHlFeGNfTWVtb3J5RXJyb3IiCi0gICJQeUV4Y19XYXJuaW5nIgotICAiUHlFeGNfVXNlcldhcm5pbmciCi0gICJQeUV4Y19EZXByZWNhdGlvbldhcm5pbmciCi0gICJQeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIgotICAiUHlFeGNfU3ludGF4V2FybmluZyIKLSAgIlB5RXhjX1J1bnRpbWVXYXJuaW5nIgotICAiUHlFeGNfRnV0dXJlV2FybmluZyIKLSAgIlB5RXhjX0ltcG9ydFdhcm5pbmciCi0gICJQeUV4Y19NZW1vcnlFcnJvckluc3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjZXZhbCkKLSAgIlB5RXZhbF9FdmFsRnJhbWVFeCIKLSAgIlB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzIgotICAiUHlFdmFsX0V2YWxDb2RlRXgiCi0gICJQeUV2YWxfR2V0RnJhbWUiCi0gICJQeUV2YWxfQ2FsbE9iamVjdCIKLSAgIlB5RXZhbF9TZXRQcm9maWxlIgotICAiUHlFdmFsX1NldFRyYWNlIgotICAiUHlFdmFsX0dldEJ1aWx0aW5zIgotICAiUHlFdmFsX0dldEdsb2JhbHMiCi0gICJQeUV2YWxfR2V0TG9jYWxzIgotICAiUHlFdmFsX0dldFJlc3RyaWN0ZWQiCi0gICJQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzIgotICAiUHlfRmx1c2hMaW5lIgotICAiUHlfQWRkUGVuZGluZ0NhbGwiCi0gICJQeV9NYWtlUGVuZGluZ0NhbGxzIgotICAiUHlfU2V0UmVjdXJzaW9uTGltaXQiCi0gICJQeV9HZXRSZWN1cnNpb25MaW1pdCIKLSAgIl9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwiCi0gICJQeUV2YWxfR2V0RnVuY05hbWUiCi0gICJQeUV2YWxfR2V0RnVuY0Rlc2MiCi0gICJQeUV2YWxfR2V0Q2FsbFN0YXRzIgotICAiUHlFdmFsX0V2YWxGcmFtZSIKLSAgIlB5RXZhbF9TYXZlVGhyZWFkIgotICAiUHlFdmFsX1Jlc3RvcmVUaHJlYWQiCi0gICJQeUV2YWxfVGhyZWFkc0luaXRpYWxpemVkIgotICAiUHlFdmFsX0luaXRUaHJlYWRzIgotICAiUHlFdmFsX0FjcXVpcmVMb2NrIgotICAiUHlFdmFsX1JlbGVhc2VMb2NrIgotICAiUHlFdmFsX0FjcXVpcmVUaHJlYWQiCi0gICJQeUV2YWxfUmVsZWFzZVRocmVhZCIKLSAgIlB5RXZhbF9SZUluaXRUaHJlYWRzIgotICAiX1B5RXZhbF9TbGljZUluZGV4IgotICAiUHlFdmFsX0V2YWxDb2RlIgotICAiX1B5RXZhbF9DYWxsVHJhY2luZyIKLSAgIl9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IgotICAiX1B5X0NoZWNrSW50ZXJ2YWwiCi0gICJfUHlfVGlja2VyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY29tcGlsZSkKLSAgIl9QeV9NYW5nbGUiCi0gICJQeUFTVF9Db21waWxlIgotICAiUHlOb2RlX0NvbXBpbGUiCi0gICJQeV9PcHRpbWl6ZUZsYWciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2RlY3MpCi0gICJfUHlDb2RlY19Mb29rdXAiCi0gICJQeUNvZGVjX0VuY29kZSIKLSAgIlB5Q29kZWNfRGVjb2RlIgotICAiUHlDb2RlY19JZ25vcmVFcnJvcnMiCi0gICJQeUNvZGVjX1JlcGxhY2VFcnJvcnMiCi0gICJQeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzIgotICAiUHlDb2RlY19SZWdpc3RlciIKLSAgIlB5Q29kZWNfRW5jb2RlciIKLSAgIlB5Q29kZWNfRGVjb2RlciIKLSAgIlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyIgotICAiUHlDb2RlY19JbmNyZW1lbnRhbERlY29kZXIiCi0gICJQeUNvZGVjX1N0cmVhbVJlYWRlciIKLSAgIlB5Q29kZWNfU3RyZWFtV3JpdGVyIgotICAiUHlDb2RlY19SZWdpc3RlckVycm9yIgotICAiUHlDb2RlY19Mb29rdXBFcnJvciIKLSAgIlB5Q29kZWNfU3RyaWN0RXJyb3JzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXJyb3JzKQotICAiUHlFcnJfU2V0Tm9uZSIKLSAgIlB5RXJyX1NldFN0cmluZyIKLSAgIlB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcyIKLSAgIlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbiIKLSAgIlB5RXJyX0ZldGNoIgotICAiUHlFcnJfQ2xlYXIiCi0gICJQeUVycl9Ob01lbW9yeSIKLSAgIlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdCIKLSAgIlB5RXJyX0Zvcm1hdCIKLSAgIlB5RXJyX05ld0V4Y2VwdGlvbiIKLSAgIlB5RXJyX1dyaXRlVW5yYWlzYWJsZSIKLSAgIlB5RXJyX1N5bnRheExvY2F0aW9uIgotICAiUHlFcnJfUHJvZ3JhbVRleHQiCi0gICJQeUVycl9TZXRPYmplY3QiCi0gICJQeUVycl9PY2N1cnJlZCIKLSAgIlB5RXJyX1Jlc3RvcmUiCi0gICJQeUVycl9FeGNlcHRpb25NYXRjaGVzIgotICAiUHlFcnJfQmFkQXJndW1lbnQiCi0gICJQeUVycl9TZXRGcm9tRXJybm8iCi0gICJQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWUiCi0gICJQeUVycl9CYWRJbnRlcm5hbENhbGwiCi0gICJfUHlFcnJfQmFkSW50ZXJuYWxDYWxsIgotICAiUHlFcnJfV2FybiIKLSAgIlB5RXJyX1dhcm5FeHBsaWNpdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZyb3plbikKLSAgIlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihmcm96ZW5tYWluKQotICAiUHlfRnJvemVuTWFpbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGZ1dHVyZSkKLSAgIlB5RnV0dXJlX0Zyb21BU1QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXRhcmdzKQotICAiUHlBcmdfUGFyc2UiCi0gICJfUHlBcmdfUGFyc2VfU2l6ZVQiCi0gICJQeUFyZ19QYXJzZVR1cGxlIgotICAiX1B5QXJnX1BhcnNlVHVwbGVfU2l6ZVQiCi0gICJQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMiCi0gICJfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUIgotICAiUHlBcmdfVW5wYWNrVHVwbGUiCi0gICJfUHlBcmdfTm9LZXl3b3JkcyIKLSAgIlB5QXJnX1ZhUGFyc2UiCi0gICJQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcyIKLSAgIl9QeUFyZ19WYVBhcnNlX1NpemVUIgotICAiX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZ2V0Y29tcGlsZXIpCi0gICJQeV9HZXRDb21waWxlciIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldGNvcHlyaWdodCkKLSAgIlB5X0dldENvcHlyaWdodCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldHBsYXRmb3JtKQotICAiUHlfR2V0UGxhdGZvcm0iCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihnZXR2ZXJzaW9uKQotICAiUHlfR2V0VmVyc2lvbiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdyYW1pbml0KQotICAiX1B5UGFyc2VyX0dyYW1tYXIiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihpbXBvcnQpCi0gICJfUHlJbXBvcnRfSW5pdCIKLSAgIl9QeUltcG9ydEhvb2tzX0luaXQiCi0gICJQeUltcG9ydF9JbXBvcnRNb2R1bGUiCi0gICJQeUltcG9ydF9DbGVhbnVwIgotICAiX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uIgotICAiUHlJbXBvcnRfQWRkTW9kdWxlIgotICAiUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeCIKLSAgIlB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZSIKLSAgIlB5SW1wb3J0X0ltcG9ydE1vZHVsZUV4IgotICAiUHlJbXBvcnRfSW1wb3J0TW9kdWxlTGV2ZWwiCi0gICJQeUltcG9ydF9SZWxvYWRNb2R1bGUiCi0gICJQeUltcG9ydF9JbXBvcnQiCi07ICAiaW5pdGltcCIKLSAgIl9QeUltcG9ydF9GaW5pIgotICAiUHlJbXBvcnRfR2V0TWFnaWNOdW1iZXIiCi0gICJQeUltcG9ydF9FeGVjQ29kZU1vZHVsZSIKLSAgIlB5SW1wb3J0X0dldE1vZHVsZURpY3QiCi0gICJfUHlJbXBvcnRfRmluZE1vZHVsZSIKLSAgIl9QeUltcG9ydF9Jc1NjcmlwdCIKLSAgIl9QeUltcG9ydF9SZUluaXRMb2NrIgotICAiX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb24iCi0gICJQeUltcG9ydF9BcHBlbmRJbml0dGFiIgotICAiUHlJbXBvcnRfRXh0ZW5kSW5pdHRhYiIKLSAgIlB5SW1wb3J0X0luaXR0YWIiCi0gICJfUHlJbXBvcnRfRmlsZXRhYiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGltcG9ydGRsKQotICAiX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWFyc2hhbCkKLSAgIlB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlIgotICAiUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmciCi0gICJQeU1hcnNoYWxfV3JpdGVMb25nVG9GaWxlIgotICAiUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRTaG9ydEZyb21GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tRmlsZSIKLSAgIlB5TWFyc2hhbF9SZWFkTGFzdE9iamVjdEZyb21GaWxlIgotICAiUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nIgotICAiUHlNYXJzaGFsX0luaXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtb2RzdXBwb3J0KQotICAiUHlfSW5pdE1vZHVsZTQiCi0gICJQeV9CdWlsZFZhbHVlIgotICAiX1B5X0J1aWxkVmFsdWVfU2l6ZVQiCi0gICJQeUV2YWxfQ2FsbEZ1bmN0aW9uIgotICAiUHlFdmFsX0NhbGxNZXRob2QiCi0gICJfUHlfVmFCdWlsZFZhbHVlX1NpemVUIgotICAiUHlfVmFCdWlsZFZhbHVlIgotICAiUHlNb2R1bGVfQWRkT2JqZWN0IgotICAiUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQiCi0gICJQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudCIKLSAgIl9QeV9QYWNrYWdlQ29udGV4dCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG15c25wcmludGYpCi0gICJQeU9TX3NucHJpbnRmIgotICAiUHlPU192c25wcmludGYiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihteXN0cnRvdWwpCi0gICJQeU9TX3N0cnRvdWwiCi0gICJQeU9TX3N0cnRvbCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5YXJlbmEpCi0gICJQeUFyZW5hX05ldyIKLSAgIlB5QXJlbmFfRnJlZSIKLSAgIlB5QXJlbmFfTWFsbG9jIgotICAiUHlBcmVuYV9BZGRQeU9iamVjdCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHB5ZnBlKQotICAiUHlGUEVfZHVtbXkiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihweXN0YXRlKQotICAiUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyIgotICAiUHlUaHJlYWRTdGF0ZV9DbGVhciIKLSAgIl9QeVRocmVhZF9DdXJyZW50RnJhbWVzIgotICAiUHlHSUxTdGF0ZV9FbnN1cmUiCi0gICJQeUdJTFN0YXRlX1JlbGVhc2UiCi0gICJQeUludGVycHJldGVyU3RhdGVfTmV3IgotICAiUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZSIKLSAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlIgotICAiUHlUaHJlYWRTdGF0ZV9OZXciCi0gICJQeVRocmVhZFN0YXRlX0RlbGV0ZUN1cnJlbnQiCi0gICJQeVRocmVhZFN0YXRlX0dldCIKLSAgIlB5VGhyZWFkU3RhdGVfU3dhcCIKLSAgIlB5VGhyZWFkU3RhdGVfR2V0RGljdCIKLSAgIlB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGMiCi0gICJQeUdJTFN0YXRlX0dldFRoaXNUaHJlYWRTdGF0ZSIKLSAgIlB5SW50ZXJwcmV0ZXJTdGF0ZV9IZWFkIgotICAiUHlJbnRlcnByZXRlclN0YXRlX05leHQiCi0gICJQeUludGVycHJldGVyU3RhdGVfVGhyZWFkSGVhZCIKLSAgIlB5VGhyZWFkU3RhdGVfTmV4dCIKLSAgIl9QeUdJTFN0YXRlX0luaXQiCi0gICJfUHlHSUxTdGF0ZV9GaW5pIgotICAiX1B5VGhyZWFkU3RhdGVfQ3VycmVudCIKLSAgIl9QeVRocmVhZFN0YXRlX0dldEZyYW1lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocHl0aG9ucnVuKQotICAiUHlfSWdub3JlRW52aXJvbm1lbnRGbGFnIgotICAiUHlfRGVidWdGbGFnIgotICAiUHlfVmVyYm9zZUZsYWciCi0gICJQeV9Ob1NpdGVGbGFnIgotICAiUHlfSW50ZXJhY3RpdmVGbGFnIgotICAiUHlfRnJvemVuRmxhZyIKLSAgIlB5X0luaXRpYWxpemVFeCIKLSAgIlB5X0ZhdGFsRXJyb3IiCi0gICJQeV9OZXdJbnRlcnByZXRlciIKLSAgIlB5RXJyX1ByaW50IgotICAiUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyIKLSAgIlB5UGFyc2VyX0FTVEZyb21GaWxlIgotICAiUHlSdW5fU2ltcGxlRmlsZUV4RmxhZ3MiCi0gICJQeVJ1bl9GaWxlRXhGbGFncyIKLSAgIlB5X0V4aXQiCi0gICJQeUVycl9QcmludEV4IgotICAiUHlFcnJfRGlzcGxheSIKLSAgIlB5X1NldFByb2dyYW1OYW1lIgotICAiUHlfR2V0UHJvZ3JhbU5hbWUiCi0gICJQeV9TZXRQeXRob25Ib21lIgotICAiUHlfR2V0UHl0aG9uSG9tZSIKLSAgIlB5X0luaXRpYWxpemUiCi0gICJQeV9GaW5hbGl6ZSIKLSAgIlB5X0lzSW5pdGlhbGl6ZWQiCi0gICJQeV9FbmRJbnRlcnByZXRlciIKLSAgIlB5UnVuX0FueUZpbGVGbGFncyIKLSAgIlB5X0ZkSXNJbnRlcmFjdGl2ZSIKLSAgIlB5UnVuX0ludGVyYWN0aXZlTG9vcEZsYWdzIgotICAiUHlSdW5fQW55RmlsZUV4RmxhZ3MiCi0gICJQeVJ1bl9TaW1wbGVTdHJpbmdGbGFncyIKLSAgIlB5UnVuX1N0cmluZ0ZsYWdzIgotICAiUHlQYXJzZXJfQVNURnJvbVN0cmluZyIKLSAgIlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncyIKLSAgIlB5X0NvbXBpbGVTdHJpbmdGbGFncyIKLSAgIlB5X1N5bXRhYmxlU3RyaW5nIgotICAiUHlfQXRFeGl0IgotICAiUHlPU19nZXRzaWciCi0gICJQeU9TX3NldHNpZyIKLSAgIlB5UGFyc2VyX1NldEVycm9yIgotICAiUHlNb2R1bGVfR2V0V2FybmluZ3NNb2R1bGUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzRmlsZW5hbWUiCi0gICJQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZpbGVuYW1lIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlIgotICAiUHlQYXJzZXJfU2ltcGxlUGFyc2VTdHJpbmciCi0gICJQeVJ1bl9BbnlGaWxlIgotICAiUHlSdW5fQW55RmlsZUV4IgotICAiUHlSdW5fRmlsZSIKLSAgIlB5UnVuX0ZpbGVFeCIKLSAgIlB5UnVuX0ZpbGVGbGFncyIKLSAgIlB5UnVuX1NpbXBsZUZpbGUiCi0gICJQeVJ1bl9TaW1wbGVGaWxlRXgiCi0gICJQeVJ1bl9TdHJpbmciCi0gICJQeVJ1bl9TaW1wbGVTdHJpbmciCi0gICJQeV9Db21waWxlU3RyaW5nIgotICAiUHlSdW5fSW50ZXJhY3RpdmVPbmUiCi0gICJQeVJ1bl9JbnRlcmFjdGl2ZUxvb3AiCi0gICJQeV9Vc2VDbGFzc0V4Y2VwdGlvbnNGbGFnIgotICAiUHlfVW5pY29kZUZsYWciCi0gICJfUHlfUW5ld0ZsYWciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzdHJ1Y3RtZW1iZXIpCi0gICJQeU1lbWJlcl9HZXQiCi0gICJQeU1lbWJlcl9HZXRPbmUiCi0gICJQeU1lbWJlcl9TZXRPbmUiCi0gICJQeU1lbWJlcl9TZXQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeW10YWJsZSkKLSAgIlB5U3ltdGFibGVfQnVpbGQiCi0gICJQeVN5bXRhYmxlX0ZyZWUiCi0gICJQeVNUX0dldFNjb3BlIgotICAiUHlTeW10YWJsZV9Mb29rdXAiCi0gICJQeVNURW50cnlfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN5c21vZHVsZSkKLSAgIl9QeVN5c19Jbml0IgotICAiUHlTeXNfV3JpdGVTdGRlcnIiCi0gICJQeVN5c19TZXRQYXRoIgotICAiUHlTeXNfU2V0QXJndiIKLSAgIlB5U3lzX1dyaXRlU3Rkb3V0IgotICAiUHlfU3VidmVyc2lvblJldmlzaW9uIgotICAiUHlfU3VidmVyc2lvblNob3J0QnJhbmNoIgotICAiUHlTeXNfR2V0T2JqZWN0IgotICAiUHlTeXNfU2V0T2JqZWN0IgotICAiUHlTeXNfR2V0RmlsZSIKLSAgIlB5U3lzX1Jlc2V0V2Fybk9wdGlvbnMiCi0gICJQeVN5c19BZGRXYXJuT3B0aW9uIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodHJhY2ViYWNrKQotICAiUHlUcmFjZUJhY2tfSGVyZSIKLSAgIlB5VHJhY2VCYWNrX1ByaW50IgotICAiUHlUcmFjZUJhY2tfVHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdldG9wdCkKLSAgIl9QeU9TX0dldE9wdCIKLSAgIl9QeU9TX29wdGVyciIKLSAgIl9QeU9TX29wdGluZCIKLSAgIl9QeU9TX29wdGFyZyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGR5bmxvYWRfc2hsaWIpCi0gICJfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWIiCi0gICJfUHlJbXBvcnRfR2V0RHluTG9hZEZ1bmMiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih0aHJlYWQpCi0gICJQeVRocmVhZF9kZWxldGVfa2V5X3ZhbHVlIgotICAiUHlUaHJlYWRfaW5pdF90aHJlYWQiCi0gICJQeVRocmVhZF9zdGFydF9uZXdfdGhyZWFkIgotICAiUHlUaHJlYWRfZXhpdF90aHJlYWQiCi0gICJQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50IgotICAiUHlUaHJlYWRfYWxsb2NhdGVfbG9jayIKLSAgIlB5VGhyZWFkX2ZyZWVfbG9jayIKLSAgIlB5VGhyZWFkX2FjcXVpcmVfbG9jayIKLSAgIlB5VGhyZWFkX3JlbGVhc2VfbG9jayIKLSAgIlB5VGhyZWFkX2dldF9zdGFja3NpemUiCi0gICJQeVRocmVhZF9zZXRfc3RhY2tzaXplIgotICAiUHlUaHJlYWRfY3JlYXRlX2tleSIKLSAgIlB5VGhyZWFkX2RlbGV0ZV9rZXkiCi0gICJQeVRocmVhZF9zZXRfa2V5X3ZhbHVlIgotICAiUHlUaHJlYWRfZ2V0X2tleV92YWx1ZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGdjbW9kdWxlKQotOyAgImluaXRnYyIKLSAgIl9QeU9iamVjdF9HQ19OZXciCi0gICJfUHlPYmplY3RfR0NfTmV3VmFyIgotICAiUHlHQ19Db2xsZWN0IgotICAiX1B5T2JqZWN0X0dDX1Jlc2l6ZSIKLSAgIl9QeU9iamVjdF9HQ19NYWxsb2MiCi0gICJQeU9iamVjdF9HQ19UcmFjayIKLSAgIlB5T2JqZWN0X0dDX1VuVHJhY2siCi0gICJQeU9iamVjdF9HQ19EZWwiCi0gICJfUHlHQ19EdW1wIgotICAiX1B5T2JqZWN0X0dDX1RyYWNrIgotICAiX1B5T2JqZWN0X0dDX1VuVHJhY2siCi0gICJfUHlPYmplY3RfR0NfRGVsIgotICAiX1B5R0NfZ2VuZXJhdGlvbjAiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzaWduYWxtb2R1bGUpCi07ICAiaW5pdHNpZ25hbCIKLSAgIlB5RXJyX0NoZWNrU2lnbmFscyIKLSAgIlB5RXJyX1NldEludGVycnVwdCIKLSAgIlB5T1NfRmluaUludGVycnVwdHMiCi0gICJQeU9TX0ludGVycnVwdE9jY3VycmVkIgotICAiUHlPU19Jbml0SW50ZXJydXB0cyIKLSAgIlB5T1NfQWZ0ZXJGb3JrIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIocG9zaXhtb2R1bGUpCi07ICAiaW5pdG9zMiIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF90aHJlYWRtb2R1bGUpCi07ICAiaW5pdF90aHJlYWQiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihhcnJheW1vZHVsZSkKLTsgICJpbml0YXJyYXkiCi07ICAiYXJyYXlfbWV0aG9kcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGJpbmFzY2lpKQotOyAgImluaXRiaW5hc2NpaSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGNtYXRobW9kdWxlKQotOyAgImluaXRjbWF0aCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9jb2RlY3Ntb2R1bGUpCi07ICAiaW5pdF9jb2RlY3MiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihjb2xsZWN0aW9uc21vZHVsZSkKLTsgICJpbml0Y29sbGVjdGlvbnMiCi0gICJkZXF1ZWl0ZXJfdHlwZSIKLSAgImRlcXVlcmV2aXRlcl90eXBlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoY1BpY2tsZSkKLTsgICJpbml0Y1BpY2tsZSIKLTsgICJmYXN0X3NhdmVfbGVhdmUiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfY3N2KQotOyAgImluaXRfY3N2IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGF0ZXRpbWVtb2R1bGUpCi07ICAiaW5pdGRhdGV0aW1lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZGxtb2R1bGUpCi07ICAiaW5pdGRsIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZXJybm9tb2R1bGUpCi07ICAiaW5pdGVycm5vIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoZmNudGxtb2R1bGUpCi07ICAiaW5pdGZjbnRsIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2Z1bmN0b29sc21vZHVsZSkKLTsgICJpbml0X2Z1bmN0b29scyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9oZWFwcW1vZHVsZSkKLTsgICJpbml0X2hlYXBxIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoaW1hZ2VvcCkKLTsgICJpbml0aW1hZ2VvcCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKGl0ZXJ0b29sc21vZHVsZSkKLTsgICJpbml0aXRlcnRvb2xzIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX2xvY2FsZW1vZHVsZSkKLTsgICJpbml0X2xvY2FsZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKG1hdGhtb2R1bGUpCi07ICAiaW5pdG1hdGgiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihtZDUpCi0gICJtZDVfZmluaXNoIgotICAibWQ1X2luaXQiCi0gICJtZDVfYXBwZW5kIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIobWQ1bW9kdWxlKQotOyAgImluaXRfbWQ1IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIob3BlcmF0b3IpCi07ICAiaW5pdG9wZXJhdG9yIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3JhbmRvbW1vZHVsZSkKLTsgICJpbml0X3JhbmRvbSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHJnYmltZ21vZHVsZSkKLTsgICJpbml0cmdiaW1nIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhbW9kdWxlKQotOyAgImluaXRfc2hhIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhMjU2bW9kdWxlKQotOyAgImluaXRfc2hhMjU2IgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoc2hhNTEybW9kdWxlKQotOyAgImluaXRfc2hhNTEyIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIoX3NyZSkKLTsgICJpbml0X3NyZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHN0cm9wbW9kdWxlKQotOyAgImluaXRzdHJvcCIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKF9zdHJ1Y3QpCi07ICAiaW5pdF9zdHJ1Y3QiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihzeW10YWJsZW1vZHVsZSkKLTsgICJpbml0X3N5bXRhYmxlIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGVybWlvcykKLTsgICJpbml0dGVybWlvcyIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHRpbWVtb2R1bGUpCi07ICAiaW5pdHRpbWUiCi0gICJfUHlUaW1lX0RvdWJsZVRvVGltZXQiCi07ICAiaW5pdHRpbWV6b25lIgotCi07IEZyb20gcHl0aG9uMzNfcy5saWIodGltaW5nbW9kdWxlKQotOyAgImluaXR0aW1pbmciCi0KLTsgRnJvbSBweXRob24zM19zLmxpYihfd2Vha3JlZikKLTsgICJpbml0X3dlYWtyZWYiCi0KLTsgRnJvbSBweXRob24zM19zLmxpYih4eHN1YnR5cGUpCi07ICAiaW5pdHh4c3VidHlwZSIKLQotOyBGcm9tIHB5dGhvbjMzX3MubGliKHppcGltcG9ydCkKLTsgICJpbml0emlwaW1wb3J0IgpkaWZmIC0tZ2l0IGEvUEMvb3MyZW14L3B5dGhvbnBtLmMgYi9QQy9vczJlbXgvcHl0aG9ucG0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYmE0N2Y0Yi4uMDAwMDAwMAotLS0gYS9QQy9vczJlbXgvcHl0aG9ucG0uYworKysgL2Rldi9udWxsCkBAIC0xLDEyNCArMCwwIEBACi0vKiBPUy8yIFBNIG1haW4gcHJvZ3JhbSAtIGNyZWF0ZXMgYSBoaWRkZW4gd2luZG93LCBhbmQgc3RhcnRzIFB5dGhvbgotICogaW50ZXJwcmV0ZXIgaW4gYSBzZXBhcmF0ZSB0aHJlYWQsIHNvIHRoYXQgUHl0aG9uIHNjcmlwdHMgY2FuIGJlCi0gKiBydW4gaW4gUE0gcHJvY2VzcyBzcGFjZSB3aXRob3V0IGEgY29uc29sZSBXaW5kb3cuICBUaGUgaW50ZXJwcmV0ZXIKLSAqIGlzIGluY29ycG9yYXRlZCBieSBsaW5raW5nIGluIHRoZSBQeXRob24gRExMLgotICoKLSAqIEFzIGl0IHN0YW5kcywgSSBkb24ndCB0aGluayB0aGlzIGlzIGFkZXF1YXRlIGZvciBzdXBwb3J0aW5nIFB5dGhvbgotICogR1VJIG1vZHVsZXMsIGFzIHRoZSBQeXRob24gdGhyZWFkIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIG1lc3NhZ2UKLSAqIHF1ZXVlIC0gd2hpY2ggaXMgcmVxdWlyZWQgb2YgdGhyZWFkcyB0aGF0IHdhbnQgdG8gY3JlYXRlL3VzZQotICogUE0gd2luZG93cy4KLSAqCi0gKiBUaGlzIGNvZGUgb3dlcyBhIGxvdCB0byAiT1MvMiBQcmVzZW50YXRpb24gTWFuYWdlciBQcm9ncmFtbWluZyIsIGJ5Ci0gKiBDaGFybGVzIFBldHpvbGQuCi0gKgotICogQW5kcmV3IE1hY0ludHlyZSA8YW5keW1hY0BidWxsc2V5ZS5hcGFuYS5vcmcuYXU+LCBBdWd1c3QgMjAwMS4KLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgUHl0aG9uIDIuMS4xIGxpY2VuY2UgLSBzZWUgdGhlIExJQ0VOQ0UKLSAqIGZpbGUgaW4gdGhlIFB5dGhvbiB2Mi4xLjEgKG9yIGxhdGVyKSBzb3VyY2UgZGlzdHJpYnV0aW9uLgotICogQ29weXJpZ2h0IGFzc2lnbmVkIHRvIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbiwgMjAwMS4KLSAqLwotCi0jZGVmaW5lIElOQ0xfRE9TCi0jZGVmaW5lIElOQ0xfV0lOCi0jaW5jbHVkZSA8b3MyLmg+Ci0jaW5jbHVkZSA8cHJvY2Vzcy5oPgotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0KLS8qIHVzZSBzdHJ1Y3R1cmUgdG8gcGFzcyBjb21tYW5kIGxpbmUgdG8gUHl0aG9uIHRocmVhZCAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLSAgICBpbnQgYXJnYzsKLSAgICBjaGFyICoqYXJndjsKLSAgICBIV05EIEZyYW1lOwotICAgIGludCBydW5uaW5nOwotfSBhcmdsaXN0OwotCi0vKiBtYWtlIHRoaXMgYSBnbG9iYWwgdG8gc2ltcGxpZnkgYWNjZXNzLgotICogaXQgc2hvdWxkIG9ubHkgYmUgc2V0IGZyb20gdGhlIFB5dGhvbiB0aHJlYWQsIG9yIGJ5IHRoZSBjb2RlIHRoYXQKLSAqIGluaXRpYXRlcyB0aGUgUHl0aG9uIHRocmVhZCB3aGVuIHRoZSB0aHJlYWQgY2Fubm90IGJlIGNyZWF0ZWQuCi0gKi8KLWludCBQeXRob25SQzsKLQotZXh0ZXJuIERMX0VYUE9SVChpbnQpIFB5X01haW4oaW50LCBjaGFyICoqKTsKLXZvaWQgUHl0aG9uVGhyZWFkKHZvaWQgKik7Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgVUxPTkcgRnJhbWVGbGFncyA9IEZDRl9USVRMRUJBUiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TWVNNRU5VIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1NJWkVCT1JERVIgfAotICAgICAgICAgICAgICAgICAgICAgICBGQ0ZfSElERUJVVFRPTiB8Ci0gICAgICAgICAgICAgICAgICAgICAgIEZDRl9TSEVMTFBPU0lUSU9OIHwKLSAgICAgICAgICAgICAgICAgICAgICAgRkNGX1RBU0tMSVNUOwotICAgIEhBQiBoYWI7Ci0gICAgSE1RIGhtcTsKLSAgICBIV05EIENsaWVudDsKLSAgICBRTVNHIHFtc2c7Ci0gICAgYXJnbGlzdCBhcmdzOwotICAgIGludCBweXRob25fdGlkOwotCi0gICAgLyogaW5pdCBQTSBhbmQgY3JlYXRlIG1lc3NhZ2UgcXVldWUgKi8KLSAgICBoYWIgPSBXaW5Jbml0aWFsaXplKDApOwotICAgIGhtcSA9IFdpbkNyZWF0ZU1zZ1F1ZXVlKGhhYiwgMCk7Ci0KLSAgICAvKiBjcmVhdGUgYSAoaGlkZGVuKSBXaW5kb3cgdG8gaG91c2UgdGhlIHdpbmRvdyBwcm9jZWR1cmUgKi8KLSAgICBhcmdzLkZyYW1lID0gV2luQ3JlYXRlU3RkV2luZG93KEhXTkRfREVTS1RPUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRnJhbWVGbGFncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uUE0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZDbGllbnQpOwotCi0gICAgLyogcnVuIFB5dGhvbiBpbnRlcnByZXRlciBpbiBhIHRocmVhZCAqLwotICAgIGFyZ3MuYXJnYyA9IGFyZ2M7Ci0gICAgYXJncy5hcmd2ID0gYXJndjsKLSAgICBhcmdzLnJ1bm5pbmcgPSAwOwotICAgIGlmICgtMSA9PSAocHl0aG9uX3RpZCA9IF9iZWdpbnRocmVhZChQeXRob25UaHJlYWQsIE5VTEwsIDEwMjQgKiAxMDI0LCAmYXJncykpKQotICAgIHsKLSAgICAgICAgLyogY291bGRuJ3Qgc3RhcnQgdGhyZWFkICovCi0gICAgICAgIFdpbkFsYXJtKEhXTkRfREVTS1RPUCwgV0FfRVJST1IpOwotICAgICAgICBQeXRob25SQyA9IDE7Ci0gICAgfQotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8qIHByb2Nlc3MgUE0gbWVzc2FnZXMsIHVudGlsIFB5dGhvbiBleGl0cyAqLwotICAgICAgICB3aGlsZSAoV2luR2V0TXNnKGhhYiwgJnFtc2csIE5VTExIQU5ETEUsIDAsIDApKQotICAgICAgICAgICAgV2luRGlzcGF0Y2hNc2coaGFiLCAmcW1zZyk7Ci0gICAgICAgIGlmIChhcmdzLnJ1bm5pbmcgPiAwKQotICAgICAgICAgICAgRG9zS2lsbFRocmVhZChweXRob25fdGlkKTsKLSAgICB9Ci0KLSAgICAvKiBkZXN0cm95IHdpbmRvdywgc2h1dGRvd24gbWVzc2FnZSBxdWV1ZSBhbmQgUE0gKi8KLSAgICBXaW5EZXN0cm95V2luZG93KGFyZ3MuRnJhbWUpOwotICAgIFdpbkRlc3Ryb3lNc2dRdWV1ZShobXEpOwotICAgIFdpblRlcm1pbmF0ZShoYWIpOwotCi0gICAgcmV0dXJuIFB5dGhvblJDOwotfQotCi12b2lkIFB5dGhvblRocmVhZCh2b2lkICphcmdsKQotewotICAgIEhBQiBoYWI7Ci0gICAgYXJnbGlzdCAqYXJnczsKLQotICAgIC8qIFBNIGluaXRpYWxpc2F0aW9uICovCi0gICAgaGFiID0gV2luSW5pdGlhbGl6ZSgwKTsKLQotICAgIC8qIHN0YXJ0IFB5dGhvbiAqLwotICAgIGFyZ3MgPSAoYXJnbGlzdCAqKWFyZ2w7Ci0gICAgYXJncy0+cnVubmluZyA9IDE7Ci0gICAgUHl0aG9uUkMgPSBQeV9NYWluKGFyZ3MtPmFyZ2MsIGFyZ3MtPmFyZ3YpOwotCi0gICAgLyogZW50ZXIgYSBjcml0aWNhbCBzZWN0aW9uIGFuZCBzZW5kIHRoZSB0ZXJtaW5hdGlvbiBtZXNzYWdlICovCi0gICAgRG9zRW50ZXJDcml0U2VjKCk7Ci0gICAgYXJncy0+cnVubmluZyA9IDA7Ci0gICAgV2luUG9zdE1zZyhhcmdzLT5GcmFtZSwgV01fUVVJVCwgTlVMTCwgTlVMTCk7Ci0KLSAgICAvKiBzaHV0ZG93biBQTSBhbmQgdGVybWluYXRlIHRocmVhZCAqLwotICAgIFdpblRlcm1pbmF0ZShoYWIpOwotICAgIF9lbmR0aHJlYWQoKTsKLX0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL190a2ludGVyLmRlZiBiL1BDL29zMnZhY3BwL190a2ludGVyLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlkYWI4ZC4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9fdGtpbnRlci5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLUxJQlJBUlkgICAgICAgIF9US0lOVEVSIElOSVRJTlNUQU5DRSBURVJNSU5TVEFOQ0UKLURFU0NSSVBUSU9OICAgICdQeXRob24gRXh0ZW5zaW9uIERMTCB2MS4wIGZvciBBY2Nlc3MgdG8gVGNsL1RrIEVudmlyb25tZW50JwotUFJPVE1PREUKLURBVEEgICAgICAgICAgIE1VTFRJUExFIE5PTlNIQVJFRAotCi1FWFBPUlRTCi0gICAgICAgICAgICAgICBpbml0X3RraW50ZXIKLQpkaWZmIC0tZ2l0IGEvUEMvb3MydmFjcHAvY29uZmlnLmMgYi9QQy9vczJ2YWNwcC9jb25maWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjI2YjUyMS4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9jb25maWcuYworKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLS8qIC0qLSBDIC0qLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotQ29weXJpZ2h0IChjKSAyMDAwLCBCZU9wZW4uY29tLgotQ29weXJpZ2h0IChjKSAxOTk1LTIwMDAsIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlcy4KLUNvcHlyaWdodCAoYykgMTk5MC0xOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0uCi1BbGwgcmlnaHRzIHJlc2VydmVkLgotCi1TZWUgdGhlIGZpbGUgIk1pc2MvQ09QWVJJR0hUIiBmb3IgaW5mb3JtYXRpb24gb24gdXNhZ2UgYW5kCi1yZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpbGUsIGFuZCBmb3IgYSBESVNDTEFJTUVSIE9GIEFMTCBXQVJSQU5USUVTLgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBNb2R1bGUgY29uZmlndXJhdGlvbiAqLwotCi0vKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHRhYmxlIG9mIGJ1aWx0LWluIG1vZHVsZXMuCi0gICBTZWUgaW5pdF9idWlsdGluKCkgaW4gaW1wb3J0LmMuICovCi0KLSNpbmNsdWRlICJQeXRob24uaCIKLQotZXh0ZXJuIHZvaWQgaW5pdGFycmF5KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGF1ZGlvb3Aodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0YmluYXNjaWkodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0Y21hdGgodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0ZXJybm8odm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0aW1hZ2VvcCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRtYXRoKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdG1kNSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRudCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRvczIodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0b3BlcmF0b3Iodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0cG9zaXgodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0cmdiaW1nKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHNpZ25hbCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzZWxlY3Qodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3NvY2tldCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRzdHJ1Y3Qodm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0dGltZSh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfdGhyZWFkKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdHBjcmUodm9pZCk7Ci0jaWZkZWYgV0lOMzIKLWV4dGVybiB2b2lkIGluaXRtc3ZjcnQodm9pZCk7Ci0jZW5kaWYKLQotLyogLS0gQURETU9EVUxFIE1BUktFUiAxIC0tICovCi0KLWV4dGVybiB2b2lkIFB5TWFyc2hhbF9Jbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdGltcCh2b2lkKTsKLQotc3RydWN0IF9pbml0dGFiIF9QeUltcG9ydF9Jbml0dGFiW10gPSB7Ci0KLSAgICAgICAgeyJhcnJheSIsIGluaXRhcnJheX0sCi0jaWZkZWYgTV9JMzg2Ci0gICAgICAgIHsiYXVkaW9vcCIsIGluaXRhdWRpb29wfSwKLSNlbmRpZgotICAgICAgICB7ImJpbmFzY2lpIiwgaW5pdGJpbmFzY2lpfSwKLSAgICAgICAgeyJjbWF0aCIsIGluaXRjbWF0aH0sCi0gICAgICAgIHsiZXJybm8iLCBpbml0ZXJybm99LAotLy8gICAgICAgIHsiaW1hZ2VvcCIsIGluaXRpbWFnZW9wfSwKLSAgICAgICAgeyJtYXRoIiwgaW5pdG1hdGh9LAotICAgICAgICB7Im1kNSIsIGluaXRtZDV9LAotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChfX0JPUkxBTkRDX18pIHx8IGRlZmluZWQoX19XQVRDT01DX18pCi0gICAgICAgIHsibnQiLCBpbml0bnR9LCAvKiBVc2UgdGhlIE5UIG9zIGZ1bmN0aW9ucywgbm90IHBvc2l4ICovCi0jZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpCi0gICAgICAgIHsib3MyIiwgaW5pdG9zMn0sCi0jZWxzZQotICAgICAgICB7InBvc2l4IiwgaW5pdHBvc2l4fSwKLSNlbmRpZgotI2VuZGlmCi0gICAgICAgIHsib3BlcmF0b3IiLCBpbml0b3BlcmF0b3J9LAotLy8gICAgICAgIHsicmdiaW1nIiwgaW5pdHJnYmltZ30sCi0gICAgICAgIHsic2lnbmFsIiwgaW5pdHNpZ25hbH0sCi0jaWZkZWYgVVNFX1NPQ0tFVAotICAgICAgICB7Il9zb2NrZXQiLCBpbml0X3NvY2tldH0sCi0gICAgICAgIHsic2VsZWN0IiwgaW5pdHNlbGVjdH0sCi0jZW5kaWYKLSAgICAgICAgeyJzdHJ1Y3QiLCBpbml0c3RydWN0fSwKLSAgICAgICAgeyJ0aW1lIiwgaW5pdHRpbWV9LAotI2lmZGVmIFdJVEhfVEhSRUFECi0gICAgICAgIHsiX3RocmVhZCIsIGluaXRfdGhyZWFkfSwKLSNlbmRpZgotICAgICAgICB7InBjcmUiLCBpbml0cGNyZX0sCi0jaWZkZWYgV0lOMzIKLSAgICAgICAgeyJtc3ZjcnQiLCBpbml0bXN2Y3J0fSwKLSNlbmRpZgotCi0vKiAtLSBBRERNT0RVTEUgTUFSS0VSIDIgLS0gKi8KLQotICAgICAgICAvKiBUaGlzIG1vZHVsZSAibGl2ZXMgaW4iIHdpdGggbWFyc2hhbC5jICovCi0gICAgICAgIHsibWFyc2hhbCIsIFB5TWFyc2hhbF9Jbml0fSwKLQotICAgICAgICAvKiBUaGlzIGxpdmVzIGl0IHdpdGggaW1wb3J0LmMgKi8KLSAgICAgICAgeyJfaW1wIiwgaW5pdGltcH0sCi0KLSAgICAgICAgLyogVGhlc2UgZW50cmllcyBhcmUgaGVyZSBmb3Igc3lzLmJ1aWx0aW5fbW9kdWxlX25hbWVzICovCi0gICAgICAgIHsiYnVpbHRpbnMiLCBOVUxMfSwKLSAgICAgICAgeyJzeXMiLCBOVUxMfSwKLQotICAgICAgICAvKiBTZW50aW5lbCAqLwotICAgICAgICB7MCwgMH0KLX07CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9nZXRwYXRocC5jIGIvUEMvb3MydmFjcHAvZ2V0cGF0aHAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWJjMjgyNy4uMDAwMDAwMAotLS0gYS9QQy9vczJ2YWNwcC9nZXRwYXRocC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDgyICswLDAgQEAKLQotLyogUmV0dXJuIHRoZSBpbml0aWFsIG1vZHVsZSBzZWFyY2ggcGF0aC4gKi8KLS8qIFVzZWQgYnkgRE9TLCBPUy8yLCBXaW5kb3dzIDMuMS4gIFdvcmtzIG9uIE5UIHRvby4gKi8KLQotI2luY2x1ZGUgIlB5dGhvbi5oIgotI2luY2x1ZGUgIm9zZGVmcy5oIgotCi0jaWZkZWYgTVNfV0lOMzIKLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci1leHRlcm4gQk9PTCBQeVdpbl9Jc1dpbjMycyh2b2lkKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZiAvKiBIQVZFX1VOSVNURF9IICovCi0KLS8qIFNlYXJjaCBpbiBzb21lIGNvbW1vbiBsb2NhdGlvbnMgZm9yIHRoZSBhc3NvY2lhdGVkIFB5dGhvbiBsaWJyYXJpZXMuCi0gKgotICogVHdvIGRpcmVjdG9yaWVzIG11c3QgYmUgZm91bmQsIHRoZSBwbGF0Zm9ybSBpbmRlcGVuZGVudCBkaXJlY3RvcnkKLSAqIChwcmVmaXgpLCBjb250YWluaW5nIHRoZSBjb21tb24gLnB5IGFuZCAucHljIGZpbGVzLCBhbmQgdGhlIHBsYXRmb3JtCi0gKiBkZXBlbmRlbnQgZGlyZWN0b3J5IChleGVjX3ByZWZpeCksIGNvbnRhaW5pbmcgdGhlIHNoYXJlZCBsaWJyYXJ5Ci0gKiBtb2R1bGVzLiAgTm90ZSB0aGF0IHByZWZpeCBhbmQgZXhlY19wcmVmaXggY2FuIGJlIHRoZSBzYW1lIGRpcmVjdG9yeSwKLSAqIGJ1dCBmb3Igc29tZSBpbnN0YWxsYXRpb25zLCB0aGV5IGFyZSBkaWZmZXJlbnQuCi0gKgotICogUHlfR2V0UGF0aCgpIHRyaWVzIHRvIHJldHVybiBhIHNlbnNpYmxlIFB5dGhvbiBtb2R1bGUgc2VhcmNoIHBhdGguCi0gKgotICogRmlyc3QsIHdlIGxvb2sgdG8gc2VlIGlmIHRoZSBleGVjdXRhYmxlIGlzIGluIGEgc3ViZGlyZWN0b3J5IG9mCi0gKiB0aGUgUHl0aG9uIGJ1aWxkIGRpcmVjdG9yeS4gIFdlIGNhbGN1bGF0ZSB0aGUgZnVsbCBwYXRoIG9mIHRoZQotICogZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgYXMgcHJvZ3BhdGguICBXZSB3b3JrIGJhY2t3YXJkcwotICogYWxvbmcgcHJvZ3BhdGggYW5kIGxvb2sgZm9yICRkaXIvTW9kdWxlcy9TZXR1cC5pbiwgYSBkaXN0aW5jdGl2ZQotICogbGFuZG1hcmsuICBJZiBmb3VuZCwgd2UgdXNlICRkaXIvTGliIGFzICRyb290LiAgVGhlIHJldHVybmVkCi0gKiBQeXRob24gcGF0aCBpcyB0aGUgY29tcGlsZWQgI2RlZmluZSBQWVRIT05QQVRIIHdpdGggYWxsIHRoZSBpbml0aWFsCi0gKiAiLi9saWIiIHJlcGxhY2VkIGJ5ICRyb290LgotICoKLSAqIE90aGVyd2lzZSwgaWYgdGhlcmUgaXMgYSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCB3ZSByZXR1cm4gdGhhdC4KLSAqCi0gKiBPdGhlcndpc2Ugd2UgdHJ5IHRvIGZpbmQgJHByb2dwYXRoL2xpYi9vcy5weSwgYW5kIGlmIGZvdW5kLCB0aGVuCi0gKiByb290IGlzICRwcm9ncGF0aC9saWIsIGFuZCB3ZSByZXR1cm4gUHl0aG9uIHBhdGggYXMgY29tcGlsZWQgUFlUSE9OUEFUSAotICogd2l0aCBhbGwgIi4vbGliIiByZXBsYWNlZCBieSAkcm9vdCAoYXMgYWJvdmUpLgotICoKLSAqLwotCi0jaWZuZGVmIExBTkRNQVJLCi0jZGVmaW5lIExBTkRNQVJLICJsaWJcXG9zLnB5IgotI2VuZGlmCi0KLXN0YXRpYyBjaGFyIHByZWZpeFtNQVhQQVRITEVOKzFdOwotc3RhdGljIGNoYXIgZXhlY19wcmVmaXhbTUFYUEFUSExFTisxXTsKLXN0YXRpYyBjaGFyIHByb2dwYXRoW01BWFBBVEhMRU4rMV07Ci1zdGF0aWMgY2hhciAqbW9kdWxlX3NlYXJjaF9wYXRoID0gTlVMTDsKLQotCi1zdGF0aWMgaW50Ci1pc19zZXAoY2hhciBjaCkgLyogZGV0ZXJtaW5lIGlmICJjaCIgaXMgYSBzZXBhcmF0b3IgY2hhcmFjdGVyICovCi17Ci0jaWZkZWYgQUxUU0VQCi0gICAgcmV0dXJuIGNoID09IFNFUCB8fCBjaCA9PSBBTFRTRVA7Ci0jZWxzZQotICAgIHJldHVybiBjaCA9PSBTRVA7Ci0jZW5kaWYKLX0KLQotCi1zdGF0aWMgdm9pZAotcmVkdWNlKGNoYXIgKmRpcikKLXsKLSAgICBpbnQgaSA9IHN0cmxlbihkaXIpOwotICAgIHdoaWxlIChpID4gMCAmJiAhaXNfc2VwKGRpcltpXSkpCi0gICAgICAgIC0taTsKLSAgICBkaXJbaV0gPSAnXDAnOwotfQotCi0KLXN0YXRpYyBpbnQKLWV4aXN0cyhjaGFyICpmaWxlbmFtZSkKLXsKLSAgICBzdHJ1Y3Qgc3RhdCBidWY7Ci0gICAgcmV0dXJuIHN0YXQoZmlsZW5hbWUsICZidWYpID09IDA7Ci19Ci0KLQotLyogQWRkIGEgcGF0aCBjb21wb25lbnQsIGJ5IGFwcGVuZGluZyBzdHVmZiB0byBidWZmZXIuCi0gICBidWZmZXIgbXVzdCBoYXZlIGF0IGxlYXN0IE1BWFBBVEhMRU4gKyAxIGJ5dGVzIGFsbG9jYXRlZCwgYW5kIGNvbnRhaW4gYQotICAgTlVMLXRlcm1pbmF0ZWQgc3RyaW5nIHdpdGggbm8gbW9yZSB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyAobm90IGNvdW50aW5nCi0gICB0aGUgdHJhaWxpbmcgTlVMKS4gIEl0J3MgYSBmYXRhbCBlcnJvciBpZiBpdCBjb250YWlucyBhIHN0cmluZyBsb25nZXIgdGhhbgotICAgdGhhdCAoY2FsbGVycyBtdXN0IGJlIGNhcmVmdWwhKS4gIElmIHRoZXNlIHJlcXVpcmVtZW50cyBhcmUgbWV0LCBpdCdzCi0gICBndWFyYW50ZWVkIHRoYXQgYnVmZmVyIHdpbGwgc3RpbGwgYmUgYSBOVUwtdGVybWluYXRlZCBzdHJpbmcgd2l0aCBubyBtb3JlCi0gICB0aGFuIE1BWFBBVEhMRU4gY2hhcmFjdGVycyBhdCBleGl0LiAgSWYgc3R1ZmYgaXMgdG9vIGxvbmcsIG9ubHkgYXMgbXVjaCBvZgotICAgc3R1ZmYgYXMgZml0cyB3aWxsIGJlIGFwcGVuZGVkLgotKi8KLXN0YXRpYyB2b2lkCi1qb2luKGNoYXIgKmJ1ZmZlciwgY2hhciAqc3R1ZmYpCi17Ci0gICAgaW50IG4sIGs7Ci0gICAgaWYgKGlzX3NlcChzdHVmZlswXSkpCi0gICAgICAgIG4gPSAwOwotICAgIGVsc2UgewotICAgICAgICBuID0gc3RybGVuKGJ1ZmZlcik7Ci0gICAgICAgIGlmIChuID4gMCAmJiAhaXNfc2VwKGJ1ZmZlcltuLTFdKSAmJiBuIDwgTUFYUEFUSExFTikKLSAgICAgICAgICAgIGJ1ZmZlcltuKytdID0gU0VQOwotICAgIH0KLSAgICBpZiAobiA+IE1BWFBBVEhMRU4pCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoImJ1ZmZlciBvdmVyZmxvdyBpbiBnZXRwYXRocC5jJ3Mgam9pbnBhdGgoKSIpOwotICAgIGsgPSBzdHJsZW4oc3R1ZmYpOwotICAgIGlmIChuICsgayA+IE1BWFBBVEhMRU4pCi0gICAgICAgIGsgPSBNQVhQQVRITEVOIC0gbjsKLSAgICBzdHJuY3B5KGJ1ZmZlcituLCBzdHVmZiwgayk7Ci0gICAgYnVmZmVyW24ra10gPSAnXDAnOwotfQotCi0KLXN0YXRpYyBpbnQKLXNlYXJjaF9mb3JfcHJlZml4KGNoYXIgKmFyZ3YwX3BhdGgsIGNoYXIgKmxhbmRtYXJrKQotewotICAgIGludCBuOwotCi0gICAgLyogU2VhcmNoIGZyb20gYXJndjBfcGF0aCwgdW50aWwgcm9vdCBpcyBmb3VuZCAqLwotICAgIHN0cmNweShwcmVmaXgsIGFyZ3YwX3BhdGgpOwotICAgIGRvIHsKLSAgICAgICAgbiA9IHN0cmxlbihwcmVmaXgpOwotICAgICAgICBqb2luKHByZWZpeCwgbGFuZG1hcmspOwotICAgICAgICBpZiAoZXhpc3RzKHByZWZpeCkpIHsKLSAgICAgICAgICAgIHByZWZpeFtuXSA9ICdcMCc7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBwcmVmaXhbbl0gPSAnXDAnOwotICAgICAgICByZWR1Y2UocHJlZml4KTsKLSAgICB9IHdoaWxlIChwcmVmaXhbMF0pOwotICAgIHJldHVybiAwOwotfQotCi0jaWZkZWYgTVNfV0lOMzIKLSNpbmNsdWRlICJtYWxsb2MuaCIgLy8gZm9yIGFsbG9jYSAtIHNlZSBjb21tZW50cyBiZWxvdyEKLWV4dGVybiBjb25zdCBjaGFyICpQeVdpbl9ETExWZXJzaW9uU3RyaW5nOyAvLyBhIHN0cmluZyBsb2FkZWQgZnJvbSB0aGUgRExMIGF0IHN0YXJ0dXAuCi0KLQotLyogTG9hZCBhIFBZVEhPTlBBVEggdmFsdWUgZnJvbSB0aGUgcmVnaXN0cnkuCi0gICBMb2FkIGZyb20gZWl0aGVyIEhLRVlfTE9DQUxfTUFDSElORSBvciBIS0VZX0NVUlJFTlRfVVNFUi4KLQotICAgUmV0dXJucyBOVUxMLCBvciBhIHBvaW50ZXIgdGhhdCBzaG91bGQgYmUgZnJlZWQuCi0qLwotCi1zdGF0aWMgY2hhciAqCi1nZXRweXRob25yZWdwYXRoKEhLRVkga2V5QmFzZSwgQk9PTCBiV2luMzJzKQotewotICAgIEhLRVkgbmV3S2V5ID0gMDsKLSAgICBEV09SRCBuYW1lU2l6ZSA9IDA7Ci0gICAgRFdPUkQgZGF0YVNpemUgPSAwOwotICAgIERXT1JEIG51bUVudHJpZXMgPSAwOwotICAgIExPTkcgcmM7Ci0gICAgY2hhciAqcmV0dmFsID0gTlVMTDsKLSAgICBjaGFyICpkYXRhQnVmOwotICAgIGNvbnN0IGNoYXIga2V5UHJlZml4W10gPSAiU29mdHdhcmVcXFB5dGhvblxcUHl0aG9uQ29yZVxcIjsKLSAgICBjb25zdCBjaGFyIGtleVN1ZmZpeFtdID0gIlxcUHl0aG9uUGF0aCI7Ci0gICAgaW50IHZlcnNpb25MZW47Ci0gICAgY2hhciAqa2V5QnVmOwotCi0gICAgLy8gVHJpZWQgdG8gdXNlIHN5c2dldCgid2ludmVyIikgYnV0IGhlcmUgaXMgdG9vIGVhcmx5IDotKAotICAgIHZlcnNpb25MZW4gPSBzdHJsZW4oUHlXaW5fRExMVmVyc2lvblN0cmluZyk7Ci0gICAgLy8gYWxsb2NhID09IG5vIGZyZWUgcmVxdWlyZWQsIGJ1dCBtZW1vcnkgb25seSBsb2NhbCB0byBmbi4KLSAgICAvLyBhbHNvIG5vIGhlYXAgZnJhZ21lbnRhdGlvbiEgIEFtIEkgYmVpbmcgc2lsbHk/Ci0gICAga2V5QnVmID0gYWxsb2NhKHNpemVvZihrZXlQcmVmaXgpLTEgKyB2ZXJzaW9uTGVuICsgc2l6ZW9mKGtleVN1ZmZpeCkpOyAvLyBjaGFycyBvbmx5LCBwbHVzIDEgTlVMTC4KLSAgICAvLyBsb3RzIG9mIGNvbnN0YW50cyBoZXJlIGZvciB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgYXdheSA6LSkKLSAgICBtZW1jcHkoa2V5QnVmLCBrZXlQcmVmaXgsIHNpemVvZihrZXlQcmVmaXgpLTEpOwotICAgIG1lbWNweShrZXlCdWYrc2l6ZW9mKGtleVByZWZpeCktMSwgUHlXaW5fRExMVmVyc2lvblN0cmluZywgdmVyc2lvbkxlbik7Ci0gICAgbWVtY3B5KGtleUJ1ZitzaXplb2Yoa2V5UHJlZml4KS0xK3ZlcnNpb25MZW4sIGtleVN1ZmZpeCwgc2l6ZW9mKGtleVN1ZmZpeCkpOyAvLyBOVUxMIGNvbWVzIHdpdGggdGhpcyBvbmUhCi0KLSAgICByYz1SZWdPcGVuS2V5KGtleUJhc2UsCi0gICAgICAgICAgICAgICAgICBrZXlCdWYsCi0gICAgICAgICAgICAgICAgICAmbmV3S2V5KTsKLSAgICBpZiAocmM9PUVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgUmVnUXVlcnlJbmZvS2V5KG5ld0tleSwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICZudW1FbnRyaWVzLCAmbmFtZVNpemUsICZkYXRhU2l6ZSwgTlVMTCwgTlVMTCk7Ci0gICAgfQotICAgIGlmIChiV2luMzJzICYmIG51bUVudHJpZXM9PTAgJiYgZGF0YVNpemU9PTApIHsKLSAgICAgICAgLyogbXVzdCBoYXJkY29kZSBmb3IgV2luMzJzICovCi0gICAgICAgIG51bUVudHJpZXMgPSAxOwotICAgICAgICBkYXRhU2l6ZSA9IDUxMTsKLSAgICB9Ci0gICAgaWYgKG51bUVudHJpZXMpIHsKLSAgICAgICAgLyogTG9vcCBvdmVyIGFsbCBzdWJrZXlzLiAqLwotICAgICAgICAvKiBXaW4zMnMgZG9lc250IGtub3cgaG93IG1hbnkgc3Via2V5cywgc28gd2UgZG8KLSAgICAgICAgICAgaXQgdHdpY2UgKi8KLSAgICAgICAgY2hhciBrZXlCdWZbTUFYX1BBVEgrMV07Ci0gICAgICAgIGludCBpbmRleCA9IDA7Ci0gICAgICAgIGludCBvZmYgPSAwOwotICAgICAgICBmb3IoaW5kZXg9MDs7aW5kZXgrKykgewotICAgICAgICAgICAgbG9uZyByZXFkU2l6ZSA9IDA7Ci0gICAgICAgICAgICBEV09SRCByYyA9IFJlZ0VudW1LZXkobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBrZXlCdWYsIE1BWF9QQVRIKzEpOwotICAgICAgICAgICAgaWYgKHJjKSBicmVhazsKLSAgICAgICAgICAgIHJjID0gUmVnUXVlcnlWYWx1ZShuZXdLZXksIGtleUJ1ZiwgTlVMTCwgJnJlcWRTaXplKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoYldpbjMycyAmJiByZXFkU2l6ZT09MCkgcmVxZFNpemUgPSA1MTI7Ci0gICAgICAgICAgICBkYXRhU2l6ZSArPSByZXFkU2l6ZSArIDE7IC8qIDEgZm9yIHRoZSAiOyIgKi8KLSAgICAgICAgfQotICAgICAgICBkYXRhQnVmID0gbWFsbG9jKGRhdGFTaXplKzEpOwotICAgICAgICBpZiAoZGF0YUJ1Zj09TlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOyAvKiBwcmV0dHkgc2VyaW91cz8gIFJhaXNlIGVycm9yPyAqLwotICAgICAgICAvKiBOb3cgbG9vcCBvdmVyLCBncmFiYmluZyB0aGUgcGF0aHMuCi0gICAgICAgICAgIFN1YmtleXMgYmVmb3JlIG1haW4gbGlicmFyeSAqLwotICAgICAgICBmb3IoaW5kZXg9MDs7aW5kZXgrKykgewotICAgICAgICAgICAgaW50IGFkanVzdDsKLSAgICAgICAgICAgIGxvbmcgcmVxZFNpemUgPSBkYXRhU2l6ZTsKLSAgICAgICAgICAgIERXT1JEIHJjID0gUmVnRW51bUtleShuZXdLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIGtleUJ1ZixNQVhfUEFUSCsxKTsKLSAgICAgICAgICAgIGlmIChyYykgYnJlYWs7Ci0gICAgICAgICAgICByYyA9IFJlZ1F1ZXJ5VmFsdWUobmV3S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleUJ1ZiwgZGF0YUJ1ZitvZmYsICZyZXFkU2l6ZSk7Ci0gICAgICAgICAgICBpZiAocmMpIGJyZWFrOwotICAgICAgICAgICAgaWYgKHJlcWRTaXplPjEpIHsKLSAgICAgICAgICAgICAgICAvKiBJZiBOb3RoaW5nLCBvciBvbmx5ICdcMCcgY29waWVkLiAqLwotICAgICAgICAgICAgICAgIGFkanVzdCA9IHN0cmxlbihkYXRhQnVmK29mZik7Ci0gICAgICAgICAgICAgICAgZGF0YVNpemUgLT0gYWRqdXN0OwotICAgICAgICAgICAgICAgIG9mZiArPSBhZGp1c3Q7Ci0gICAgICAgICAgICAgICAgZGF0YUJ1ZltvZmYrK10gPSAnOyc7Ci0gICAgICAgICAgICAgICAgZGF0YUJ1ZltvZmZdID0gJ1wwJzsKLSAgICAgICAgICAgICAgICBkYXRhU2l6ZS0tOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8qIEFkZGl0aW9uYWxseSwgd2luMzJzIGRvZXNudCB3b3JrIGFzIGV4cGVjdGVkLCBzbwotICAgICAgICAgICB0aGUgc3BlY2lmaWMgc3RybGVuKCkgaXMgcmVxdWlyZWQgZm9yIDMuMS4gKi8KLSAgICAgICAgcmMgPSBSZWdRdWVyeVZhbHVlKG5ld0tleSwgIiIsIGRhdGFCdWYrb2ZmLCAmZGF0YVNpemUpOwotICAgICAgICBpZiAocmM9PUVSUk9SX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGlmIChzdHJsZW4oZGF0YUJ1Zik9PTApCi0gICAgICAgICAgICAgICAgZnJlZShkYXRhQnVmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBkYXRhQnVmOyAvKiBjYWxsZXIgd2lsbCBmcmVlICovCi0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZnJlZShkYXRhQnVmKTsKLSAgICB9Ci0KLSAgICBpZiAobmV3S2V5KQotICAgICAgICBSZWdDbG9zZUtleShuZXdLZXkpOwotICAgIHJldHVybiByZXR2YWw7Ci19Ci0jZW5kaWYgLyogTVNfV0lOMzIgKi8KLQotc3RhdGljIHZvaWQKLWdldF9wcm9ncGF0aCh2b2lkKQotewotICAgIGV4dGVybiBjaGFyICpQeV9HZXRQcm9ncmFtTmFtZSh2b2lkKTsKLSAgICBjaGFyICpwYXRoID0gZ2V0ZW52KCJQQVRIIik7Ci0gICAgY2hhciAqcHJvZyA9IFB5X0dldFByb2dyYW1OYW1lKCk7Ci0KLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChHZXRNb2R1bGVGaWxlTmFtZShOVUxMLCBwcm9ncGF0aCwgTUFYUEFUSExFTikpCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotICAgIGlmIChwcm9nID09IE5VTEwgfHwgKnByb2cgPT0gJ1wwJykKLSAgICAgICAgcHJvZyA9ICJweXRob24iOwotCi0gICAgLyogSWYgdGhlcmUgaXMgbm8gc2xhc2ggaW4gdGhlIGFyZ3YwIHBhdGgsIHRoZW4gd2UgaGF2ZSB0bwotICAgICAqIGFzc3VtZSBweXRob24gaXMgb24gdGhlIHVzZXIncyAkUEFUSCwgc2luY2UgdGhlcmUncyBubwotICAgICAqIG90aGVyIHdheSB0byBmaW5kIGEgZGlyZWN0b3J5IHRvIHN0YXJ0IHRoZSBzZWFyY2ggZnJvbS4gIElmCi0gICAgICogJFBBVEggaXNuJ3QgZXhwb3J0ZWQsIHlvdSBsb3NlLgotICAgICAqLwotI2lmZGVmIEFMVFNFUAotICAgIGlmIChzdHJjaHIocHJvZywgU0VQKSB8fCBzdHJjaHIocHJvZywgQUxUU0VQKSkKLSNlbHNlCi0gICAgaWYgKHN0cmNocihwcm9nLCBTRVApKQotI2VuZGlmCi0gICAgICAgIHN0cmNweShwcm9ncGF0aCwgcHJvZyk7Ci0gICAgZWxzZSBpZiAocGF0aCkgewotICAgICAgICB3aGlsZSAoMSkgewotICAgICAgICAgICAgY2hhciAqZGVsaW0gPSBzdHJjaHIocGF0aCwgREVMSU0pOwotCi0gICAgICAgICAgICBpZiAoZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gZGVsaW0gLSBwYXRoOwotICAgICAgICAgICAgICAgIHN0cm5jcHkocHJvZ3BhdGgsIHBhdGgsIGxlbik7Ci0gICAgICAgICAgICAgICAgKihwcm9ncGF0aCArIGxlbikgPSAnXDAnOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0cmNweShwcm9ncGF0aCwgcGF0aCk7Ci0KLSAgICAgICAgICAgIGpvaW4ocHJvZ3BhdGgsIHByb2cpOwotICAgICAgICAgICAgaWYgKGV4aXN0cyhwcm9ncGF0aCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICghZGVsaW0pIHsKLSAgICAgICAgICAgICAgICBwcm9ncGF0aFswXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwYXRoID0gZGVsaW0gKyAxOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UKLSAgICAgICAgcHJvZ3BhdGhbMF0gPSAnXDAnOwotfQotCi1zdGF0aWMgdm9pZAotY2FsY3VsYXRlX3BhdGgodm9pZCkKLXsKLSAgICBjaGFyIGFyZ3YwX3BhdGhbTUFYUEFUSExFTisxXTsKLSAgICBjaGFyICpidWY7Ci0gICAgaW50IGJ1ZnN6OwotICAgIGNoYXIgKnB5dGhvbmhvbWUgPSBQeV9HZXRQeXRob25Ib21lKCk7Ci0gICAgY2hhciAqZW52cGF0aCA9IFB5X0dFVEVOVigiUFlUSE9OUEFUSCIpOwotI2lmZGVmIE1TX1dJTjMyCi0gICAgY2hhciAqbWFjaGluZXBhdGgsICp1c2VycGF0aDsKLQotICAgIC8qIEFyZSB3ZSBydW5uaW5nIHVuZGVyIFdpbmRvd3MgMy4xKDEpIFdpbjMycz8gKi8KLSAgICBpZiAoUHlXaW5fSXNXaW4zMnMoKSkgewotICAgICAgICAvKiBPbmx5IENMQVNTRVNfUk9PVCBpcyBzdXBwb3J0ZWQgKi8KLSAgICAgICAgbWFjaGluZXBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfQ0xBU1NFU19ST09ULCBUUlVFKTsKLSAgICAgICAgdXNlcnBhdGggPSBOVUxMOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1hY2hpbmVwYXRoID0gZ2V0cHl0aG9ucmVncGF0aChIS0VZX0xPQ0FMX01BQ0hJTkUsIEZBTFNFKTsKLSAgICAgICAgdXNlcnBhdGggPSBnZXRweXRob25yZWdwYXRoKEhLRVlfQ1VSUkVOVF9VU0VSLCBGQUxTRSk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBnZXRfcHJvZ3BhdGgoKTsKLSAgICBzdHJjcHkoYXJndjBfcGF0aCwgcHJvZ3BhdGgpOwotICAgIHJlZHVjZShhcmd2MF9wYXRoKTsKLSAgICBpZiAocHl0aG9uaG9tZSA9PSBOVUxMIHx8ICpweXRob25ob21lID09ICdcMCcpIHsKLSAgICAgICAgaWYgKHNlYXJjaF9mb3JfcHJlZml4KGFyZ3YwX3BhdGgsIExBTkRNQVJLKSkKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBwcmVmaXg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHB5dGhvbmhvbWUgPSBOVUxMOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICBjaGFyICpkZWxpbTsKLQotICAgICAgICBzdHJjcHkocHJlZml4LCBweXRob25ob21lKTsKLQotICAgIC8qIEV4dHJhY3QgQW55IE9wdGlvbmFsIFRyYWlsaW5nIEVYRUNfUFJFRklYICovCi0gICAgLyogZS5nLiBQWVRIT05IT01FPTxwcmVmaXg+OjxleGVjX3ByZWZpeD4gICAqLwotICAgIGRlbGltID0gc3RyY2hyKHByZWZpeCwgREVMSU0pOwotICAgIGlmIChkZWxpbSkgewotICAgICAgICAqZGVsaW0gPSAnXDAnOwotICAgICAgICBzdHJjcHkoZXhlY19wcmVmaXgsIGRlbGltKzEpOwotICAgIH0gZWxzZQotICAgICAgICBzdHJjcHkoZXhlY19wcmVmaXgsIEVYRUNfUFJFRklYKTsKLSAgICB9Ci0KLSAgICBpZiAoZW52cGF0aCAmJiAqZW52cGF0aCA9PSAnXDAnKQotICAgICAgICBlbnZwYXRoID0gTlVMTDsKLQotICAgIC8qIFdlIG5lZWQgdG8gY29uc3RydWN0IGEgcGF0aCBmcm9tIHRoZSBmb2xsb3dpbmcgcGFydHM6Ci0gICAgICAgKDEpIHRoZSBQWVRIT05QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlLCBpZiBzZXQ7Ci0gICAgICAgKDIpIGZvciBXaW4zMiwgdGhlIG1hY2hpbmVwYXRoIGFuZCB1c2VycGF0aCwgaWYgc2V0OwotICAgICAgICgzKSB0aGUgUFlUSE9OUEFUSCBjb25maWcgbWFjcm8sIHdpdGggdGhlIGxlYWRpbmcgIi4iCi0gICAgICAgICAgIG9mIGVhY2ggY29tcG9uZW50IHJlcGxhY2VkIHdpdGggcHl0aG9uaG9tZSwgaWYgc2V0OwotICAgICAgICg0KSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGV4ZWN1dGFibGUgKGFyZ3YwX3BhdGgpLgotICAgICAgIFRoZSBsZW5ndGggY2FsY3VsYXRpb24gY2FsY3VsYXRlcyAjMyBmaXJzdC4KLSAgICAqLwotCi0gICAgLyogQ2FsY3VsYXRlIHNpemUgb2YgcmV0dXJuIGJ1ZmZlciAqLwotICAgIGlmIChweXRob25ob21lICE9IE5VTEwpIHsKLSAgICAgICAgY2hhciAqcDsKLSAgICAgICAgYnVmc3ogPSAxOwotICAgICAgICBmb3IgKHAgPSBQWVRIT05QQVRIOyAqcDsgcCsrKSB7Ci0gICAgICAgICAgICBpZiAoKnAgPT0gREVMSU0pCi0gICAgICAgICAgICAgICAgYnVmc3orKzsgLyogbnVtYmVyIG9mIERFTElNIHBsdXMgb25lICovCi0gICAgICAgIH0KLSAgICAgICAgYnVmc3ogKj0gc3RybGVuKHB5dGhvbmhvbWUpOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGJ1ZnN6ID0gMDsKLSAgICBidWZzeiArPSBzdHJsZW4oUFlUSE9OUEFUSCkgKyAxOwotICAgIGlmIChlbnZwYXRoICE9IE5VTEwpCi0gICAgICAgIGJ1ZnN6ICs9IHN0cmxlbihlbnZwYXRoKSArIDE7Ci0gICAgYnVmc3ogKz0gc3RybGVuKGFyZ3YwX3BhdGgpICsgMTsKLSNpZmRlZiBNU19XSU4zMgotICAgIGlmIChtYWNoaW5lcGF0aCkKLSAgICAgICAgYnVmc3ogKz0gc3RybGVuKG1hY2hpbmVwYXRoKSArIDE7Ci0gICAgaWYgKHVzZXJwYXRoKQotICAgICAgICBidWZzeiArPSBzdHJsZW4odXNlcnBhdGgpICsgMTsKLSNlbmRpZgotCi0gICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gYnVmID0gbWFsbG9jKGJ1ZnN6KTsKLSAgICBpZiAoYnVmID09IE5VTEwpIHsKLSAgICAgICAgLyogV2UgY2FuJ3QgZXhpdCwgc28gcHJpbnQgYSB3YXJuaW5nIGFuZCBsaW1wIGFsb25nICovCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgbWFsbG9jIGR5bmFtaWMgUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICBpZiAoZW52cGF0aCkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVc2luZyBkZWZhdWx0IHN0YXRpYyAkUFlUSE9OUEFUSC5cbiIpOwotICAgICAgICAgICAgbW9kdWxlX3NlYXJjaF9wYXRoID0gZW52cGF0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVXNpbmcgZW52aXJvbm1lbnQgJFBZVEhPTlBBVEguXG4iKTsKLSAgICAgICAgICAgIG1vZHVsZV9zZWFyY2hfcGF0aCA9IFBZVEhPTlBBVEg7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChlbnZwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIGVudnBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotI2lmZGVmIE1TX1dJTjMyCi0gICAgaWYgKG1hY2hpbmVwYXRoKSB7Ci0gICAgICAgIHN0cmNweShidWYsIG1hY2hpbmVwYXRoKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICpidWYrKyA9IERFTElNOwotICAgIH0KLSAgICBpZiAodXNlcnBhdGgpIHsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgdXNlcnBhdGgpOwotICAgICAgICBidWYgPSBzdHJjaHIoYnVmLCAnXDAnKTsKLSAgICAgICAgKmJ1ZisrID0gREVMSU07Ci0gICAgfQotI2VuZGlmCi0gICAgaWYgKHB5dGhvbmhvbWUgPT0gTlVMTCkgewotICAgICAgICBzdHJjcHkoYnVmLCBQWVRIT05QQVRIKTsKLSAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgICBjaGFyICpwID0gUFlUSE9OUEFUSDsKLSAgICAgICAgY2hhciAqcTsKLSAgICAgICAgaW50IG47Ci0gICAgICAgIGZvciAoOzspIHsKLSAgICAgICAgICAgIHEgPSBzdHJjaHIocCwgREVMSU0pOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBuID0gc3RybGVuKHApOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG4gPSBxLXA7Ci0gICAgICAgICAgICBpZiAocFswXSA9PSAnLicgJiYgaXNfc2VwKHBbMV0pKSB7Ci0gICAgICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcHl0aG9uaG9tZSk7Ci0gICAgICAgICAgICAgICAgYnVmID0gc3RyY2hyKGJ1ZiwgJ1wwJyk7Ci0gICAgICAgICAgICAgICAgcCsrOwotICAgICAgICAgICAgICAgIG4tLTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0cm5jcHkoYnVmLCBwLCBuKTsKLSAgICAgICAgICAgIGJ1ZiArPSBuOwotICAgICAgICAgICAgaWYgKHEgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICpidWYrKyA9IERFTElNOwotICAgICAgICAgICAgcCA9IHErMTsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoYXJndjBfcGF0aCkgewotICAgICAgICAqYnVmKysgPSBERUxJTTsKLSAgICAgICAgc3RyY3B5KGJ1ZiwgYXJndjBfcGF0aCk7Ci0gICAgICAgIGJ1ZiA9IHN0cmNocihidWYsICdcMCcpOwotICAgIH0KLSAgICAqYnVmID0gJ1wwJzsKLX0KLQotCi0vKiBFeHRlcm5hbCBpbnRlcmZhY2UgKi8KLQotY2hhciAqCi1QeV9HZXRQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gbW9kdWxlX3NlYXJjaF9wYXRoOwotfQotCi1jaGFyICoKLVB5X0dldFByZWZpeCh2b2lkKQotewotICAgIGlmICghbW9kdWxlX3NlYXJjaF9wYXRoKQotICAgICAgICBjYWxjdWxhdGVfcGF0aCgpOwotCi0gICAgcmV0dXJuIHByZWZpeDsKLX0KLQotY2hhciAqCi1QeV9HZXRFeGVjUHJlZml4KHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gZXhlY19wcmVmaXg7Ci19Ci0KLWNoYXIgKgotUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoKHZvaWQpCi17Ci0gICAgaWYgKCFtb2R1bGVfc2VhcmNoX3BhdGgpCi0gICAgICAgIGNhbGN1bGF0ZV9wYXRoKCk7Ci0KLSAgICByZXR1cm4gcHJvZ3BhdGg7Ci19CmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9tYWtlZmlsZSBiL1BDL29zMnZhY3BwL21ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmYwYWRjLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL21ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMTU0OSArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgICAgICAgIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIGZvciBPUy8yCi0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggSUJNJ3MgVmlzdWFsQWdlIEMvQysrCi0jIGZvciBPUy8yIGNvbXBpbGVyLCB2ZXJzaW9uIDMuMCwgd2l0aCBGaXhwYWNrIDggYXBwbGllZC4gIEl0IHVzZXMKLSMgdmVyc2lvbiA0LjAgb2YgdGhlIE5NQUtFIHRvb2wgdGhhdCBjb21lcyB3aXRoIHRoYXQgcGFja2FnZS4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjIzLkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjIzLkRMTCBpcyBuZWVkZWQuCi0jCi0jIFRoZXNlIHR3byBiaW5hcmllcyBjYW4gYmUgc3RhdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgVmlzdWFsQWdlIEMvQysrCi0jIHJ1bnRpbWUgbGlicmFyeSAocHJvZHVjaW5nIGxhcmdlciBiaW5hcmllcyksIG9yIGR5bmFtaWNhbGx5IGxpbmtlZAotIyB0byBtYWtlIHNtYWxsZXIgb25lcyB0aGF0IHJlcXVpcmUgdGhlIGNvbXBpbGVyIHRvIGJlIGluc3RhbGxlZCBvbgotIyBhbnkgc3lzdGVtIFB5dGhvbiBpcyB1c2VkIG9uLiAgUmV2aWV3IHRoZSAvR2QrIGNvbXBpbGVyIG9wdGlvbiBmb3IKLSMgaG93IHRvIGRvIHRoaXMuCi0jCi0jIE5PVEU6IElCTSdzIE5NQUtFIDQuMCBpcyByYXRoZXIgZHVtYiwgcmVxdWlyaW5nIHRoaXMgbWFrZWZpbGUgdG8KLSMgICAgICAgYmUgbXVjaCBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gbmVjZXNzYXJ5LiAgSSB1c2UgT3B1c01BS0UKLSMgICAgICAgbXlzZWxmIGZvciBhIG11Y2ggbW9yZSBwb3dlcmZ1bCBNQUtFIHRvb2wgYnV0IG5vdCBldmVyeW9uZQotIyAgICAgICB3aXNoZXMgdG8gYnV5IGl0LiAgSG93ZXZlciwgYXMgYSByZXN1bHQgSSBkaWRuJ3QgaG9vayBpbgotIyAgICAgICB0aGUgZGVwZW5kZW5jaWVzIG9uIHRoZSBpbmNsdWRlIGZpbGVzIGFzIE5NQUtFIGhhcyBubyBlYXN5Ci0jICAgICAgIHdheSB0byBkbyB0aGlzIHdpdGhvdXQgZXhwbGljaXRseSBzcGVsbGluZyBpdCBhbGwgb3V0LgotIwotIyBIaXN0b3J5IChNb3N0IFJlY2VudCBGaXJzdCkKLSMKLSMgMjYtU2VwLTk4IGpyciBSZXRlc3RlZCBhbmQgYWRqdXN0ZWQgZm9yIGJ1aWxkaW5nIHcvUHl0aG9uIDEuNS4yYTEKLSMgMjAtTm92LTk3IGpyciBDbGVhbmVkIFVwIGZvciBBcHBseWluZyB0byBEaXN0cmlidXRpb24KLSMgMjktT2N0LTk3IGpyciBNb2RpZmllZCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNSBBbHBoYSA0Ci0jIDAzLUF1Zy05NiBqcnIgT3JpZ2luYWwgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjQgUmVsZWFzZQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBsYWNlcyBhbmQgVGhpbmdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1QWV9NT0RVTEVTICAgICAgPSAuLlwuLlxNb2R1bGVzCi1QWV9PQkpFQ1RTICAgICAgPSAuLlwuLlxPYmplY3RzCi1QWV9QQVJTRVIgICAgICAgPSAuLlwuLlxQYXJzZXIKLVBZX1BZVEhPTiAgICAgICA9IC4uXC4uXFB5dGhvbgotUFlfSU5DTFVERSAgICAgID0gLi5cLi5cSW5jbHVkZQotUFlfSU5DTFVERVMgICAgID0gLjskKFBZX0lOQ0xVREUpOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi0KLSMgRmlsZSB0byBDb2xsZWN0IFdvcmR5IENvbXBpbGVyIE91dHB1dCByZSBFcnJvcnMKLUVSUlMJCT0gbWFrZS5vdXQKLQotIyBXaGVyZSB0byBGaW5kIHRoZSBJQk0gVENQL0lQIFNvY2tldCBJbmNsdWRlcyBhbmQgTGlicmFyaWVzCi1PUzJUQ1BJUCAgICAgICAgPSBDOlxNUFROCi0KLSMgV2hlcmUgdG8gRmluZCB0aGUgVGNsL1RrIEJhc2UgRGlyZWN0b3J5IGZvciBMaWJzL0luY2x1ZGVzCi1UQ0xUSwkJPSBEOlxUY2xUawotVENMQkFTRQkJPSBEOlxUY2w3LjZcT1MyCi1US0JBU0UJCT0gRDpcVGs0LjJcT1MyCi0KLSMgV2hlcmUgdG8gUHV0IHRoZSAuT0JKIEZpbGVzLCBUbyBLZWVwIFRoZW0gT3V0IG9mIHRoZSBXYXkKLVBBVEhPQkoJCT0gb2JqCi0KLSMgU2VhcmNoIFBhdGggZm9yIEluY2x1ZGUgRmlsZXMKLVBST0pJTkNMVURFCT0gLjskKFRDTEJBU0UpOyQoVEtCQVNFKTskKE9TMlRDUElQKVxJbmNsdWRlOyQoUFlfSU5DTFVERVMpCi0KLSMgUGxhY2UgdG8gU2VhcmNoIGZvciBTb3VyY2VzIHJlIE9wdXNNQUtFIERlcGVuZGVuY3kgR2VuZXJhdG9yIChDb21tZXJjaWFsKQotTUtNRl9TUkNTCT0gJChQWV9NT0RVTEVTKVwqLmMgJChQWV9PQkpFQ1RTKVwqLmMgJChQWV9QQVJTRVIpXCouYyAkKFBZX1BZVEhPTilcKi5jCi0KLSMuSERSUEFUSC5jCTo9ICQoUFJPSklOQ0xVREUsOz0gKSAkKC5IRFJQQVRILmMpCi0jLlBBVEguYyAgICAgICAgID0gLjskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotT1RIRVJMSUJTCT0gc28zMmRsbC5saWIgdGNwMzJkbGwubGliICMgVGNsNzYubGliIFRrNDIubGliCi0KLSMjIyMjIyMjIyMjIyMjIyMjCi0jIEluZmVyZW5jZSBSdWxlcwotIyMjIyMjIyMjIyMjIyMjIyMKLXskKFBZX01PRFVMRVMpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX09CSkVDVFMpXH0uY3skKFBBVEhPQkopXH0ub2JqOgkjIENvbXBpbGUgQyBDb2RlIGludG8gYSAuT0JKIEZpbGUKLQlAIEVjaG8gQ29tcGlsaW5nICQ8Ci0JQCAkKENDKSAtYyAkKENGTEFHUykgLUZvJEAgJDwgPj4kKEVSUlMpCi0KLXskKFBZX1BBUlNFUilcfS5jeyQoUEFUSE9CSilcfS5vYmo6CSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQoteyQoUFlfUFlUSE9OKVx9LmN7JChQQVRIT0JKKVx9Lm9iajoJIyBDb21waWxlIEMgQ29kZSBpbnRvIGEgLk9CSiBGaWxlCi0JQCBFY2hvIENvbXBpbGluZyAkPAotCUAgJChDQykgLWMgJChDRkxBR1MpIC1GbyRAICQ8ID4+JChFUlJTKQotCi0uY3skKFBBVEhPQkopXH0ub2JqOgkJCSMgQ29tcGlsZSBDIENvZGUgaW50byBhIC5PQkogRmlsZQotCUAgRWNobyBDb21waWxpbmcgJDwKLQlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAtRm8kQCAkPCA+PiQoRVJSUykKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQeXRob24gU3Vic3lzdGVtcwotIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIFBZVEhPTiBpcyB0aGUgY2VudHJhbCBjb3JlLCBjb250YWluaW5nIHRoZSBidWlsdGlucyBhbmQgaW50ZXJwcmV0ZXIuCi1QWVRIT04JCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCbHRpbk1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDRXZhbC5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDb21waWxlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxFcnJvcnMub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcm96ZW4ub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRhcmdzLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRDb21waWxlci5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRDb3B5cmlnaHQub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRNVGltZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRPcHQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRQbGF0Zm9ybS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHZXRWZXJzaW9uLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHcmFtSW5pdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJbXBvcnQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJbXBvcnRETC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYXJzaGFsLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNb2RTdXBwb3J0Lm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNeVN0cnRvdWwub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeVN0YXRlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeXRob25SdW4ub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJ1Y3RNZW1iZXIub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTeXNNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaHJlYWQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUcmFjZUJhY2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGcm96ZW5NYWluLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxleGNlcHRpb25zLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxzeW10YWJsZS5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxjb2RlY3Mub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxmdXR1cmUub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxkeW5sb2FkX29zMi5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxteXNucHJpbnRmLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxpdGVyb2JqZWN0Lm9iagotCi0jIFB5dGhvbidzIEludGVybmFsIFBhcnNlcgotUEFSU0VSCQk9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxBY2NlbGVyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdyYW1tYXIxLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTGlzdE5vZGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxOb2RlLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBhcnNlci5vYmogICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUGFyc2VUb2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCaXRTZXQub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1ldGFHcmFtbWFyLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVG9rZW5pemVyLm9iaiAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNeVJlYWRsaW5lLm9iagotCi0jIFB5dGhvbiBPYmplY3QgVHlwZXMKLU9CSkVDVFMJCT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEFic3RyYWN0Lm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQm9vbE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCdWZmZXJPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENlbGxPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQ2xhc3NPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxDT2JqZWN0Lm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENvbXBsZXhPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRGVzY3JPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxEaWN0T2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEVudW1PYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmlsZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxGbG9hdE9iamVjdC5vYmogICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEZyYW1lT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRnVuY09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxJdGVyT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXExpc3RPYmplY3Qub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTG9uZ09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNZXRob2RPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1vZHVsZU9iamVjdC5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcT2JqZWN0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxPYk1hbGxvYy5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFJhbmdlT2JqZWN0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU2xpY2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTdHJpbmdPYmplY3Qub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cnVjdFNlcS5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVHVwbGVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUeXBlT2JqZWN0Lm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFVuaWNvZGVPYmplY3Qub2JqIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcVW5pY29kZUNUeXBlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxXZWFrcmVmT2JqZWN0Lm9iagotCi0jIEV4dGVuc2lvbiBNb2R1bGVzIChCdWlsdC1JbiBvciBhcyBTZXBhcmF0ZSBETExzKQotTU9EVUxFUwkJPSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcQXJyYXlNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxCaW5Bc2NpaS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXENNYXRoTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRXJybm9Nb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxHQ01vZHVsZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdldEJ1aWxkSW5mby5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcR2V0UGF0aFAub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNYWluLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE1hdGhNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTUQ1Yy5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxNRDVNb2R1bGUub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXE9wZXJhdG9yLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUENSRU1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQeVBDUkUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBvc2l4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcUmVnZXhNb2R1bGUub2JqICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxSZWdFeHByLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFNlbGVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU2lnbmFsTW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxTb2NrZXRNb2R1bGUub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFN0cm9wTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcU3RydWN0TW9kdWxlLm9iaiAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUaW1lTW9kdWxlLm9iaiAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFRocmVhZE1vZHVsZS5vYmoKLQotIyBTdGFuZGFsb25lIFBhcnNlciBHZW5lcmF0b3IgUHJvZ3JhbSAoU2hhcmVzIFNvbWUgb2YgUHl0aG9uJ3MgTW9kdWxlcykKLVBHRU4gICAgICAgICAgICA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQR2VuLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXFBHZW5NYWluLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcTXlTTlByaW50Zi5vYmogICAgXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxUb2tlbml6ZXJfUGdlbi5vYmogXAotICAgICAgICAgICAgICAgICAgJChQQVRIT0JKKVxQcmludEdyYW1tYXIub2JqICBcCi0gICAgICAgICAgICAgICAgICAkKFBBVEhPQkopXEdyYW1tYXIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICQoUEFUSE9CSilcRmlyc3RTZXRzLm9iagotCi0jIyMjIyMjIyMjIyMjIyMjIyMKLSMgTWFjcm9zIGFuZCBGbGFncwotIyMjIyMjIyMjIyMjIyMjIyMjCi1fQkFTRQkJPSAvUSAvVzIgL0kkKFBST0pJTkNMVURFKQotCQkjIC9RICAgPSBPbWl0IElCTSBDb3B5cmlnaHQKLQkJIyAvVzIgID0gU2hvdyBXYXJuaW5ncy9FcnJvcnMgT25seQotCi1fR0VOCQk9IC9HNCAvR20gL0dkLQotCQkjIC9HNCAgPSBHZW5lcmF0ZSBDb2RlIGZvciA0ODYgKFVzZSAzODYgZm9yIERlYnVnZ2VyKQotCQkjIC9HbSAgPSBVc2UgTXVsdGl0aHJlYWQgUnVudGltZQotCQkjIC9HZCAgPSBEeW5hbWljYWxseSBMb2FkIFJ1bnRpbWUKLQkJIyAvTXMgID0gVXNlIF9TeXN0ZW0gQ2FsbGluZyBDb252ZW50aW9uICh2cyBfT3B0bGluaykKLQkJIyAgICAgICAgKHRvIGFsbG93IG5vbi1WQUMrKyBjb2RlIHRvIGNhbGwgaW50byBQeXRob24yMy5kbGwpCi0KLV9PUFQJCT0gL08gL0dsCi0JCSMgL08gICA9IEVuYWJsZSBTcGVlZC1PcHRpbWl6YXRpb25zCi0JCSMgL09sICA9IFBhc3MgQ29kZSBUaHJ1IEludGVybWVkaWF0ZSBMaW5rZXIKLQkJIyAvR3UgID0gQWR2aXNlIExpbmtlciBBbGwgRXh0IERhdGEgaXMgSUQnZAotCQkjIC9HbCAgPSBIYXZlIExpbmtlciBSZW1vdmUgVW51c2VkIEZucwotCi1fREJHCQk9IC9XcHJvLSAvVGktIC9ESEFWRV9DT05GSUdfSCAvRFVTRV9TT0NLRVQKLSAgICAgICAgICAgICAgICAjIC9XcHJvPSBHZW5lcmF0ZSBDb21waWxlciBXYXJuaW5ncyByZSBNaXNzaW5nIFByb3RvdHlwZXMKLQkJIyAvVGkgID0gRW1iZWQgRGVidWdnZXIvQW5hbHl6ZXIgUmVjcwotCQkjIC9UbSAgPSBFbmFibGUgRGVidWcgTWVtb3J5IEZucwotCQkjIC9UeCAgPSBSZXF1ZXN0IEZ1bGwgRHVtcCBVcG9uIEV4Y2VwdGlvbgotCQkjIC9ESEFWRV9DT05GSUdfSCA9IENhdXNlcyBVc2Ugb2YgQ09ORklHLkggU2V0dGluZ3MKLSAgICAgICAgICAgICAgICAjIC9EVVNFX1NPQ0tFVCA9IEVuYWJsZXMgQnVpbGRpbmcgSW4gb2YgU29ja2V0IEFQSQotCi1fT1VUCQk9IAotCQkjIC9GYiAgPSBFbWJlZCBCcm93c2VyIFJlY3MKLQkJIyAvR2ggID0gR2VuZXJhdGUgQ29kZSBmb3IgUHJvZmlsZXIgSG9va3MKLQkJIyAvRmwgID0gT3V0cHV0IEMvQysrIExpc3RpbmcgRmlsZXMKLSAgICAgICAgICAgICAgICAjIC9MZiAgPSBQcm92aWRlIEZ1bGwgKERldGFpbGVkKSBMaXN0aW5nIEZpbGVzCi0JCSMgL0ZtLiA9IE91dHB1dCBMaW5rZXIgTWFwIEZpbGUKLQkJIyAvRnQuID0gT3V0cHV0IEMrKyBUZW1wbGF0ZSBSZXNvbHV0aW9uIEZpbGVzCi0KLV9NQVAJCT0gL0ZtTm9pc2VcJChAUikubWFwCi0KLV9ETEwJCT0gL0dlLQotX0VYRQkJPSAvR2UKLQkJIyAvR2UgPSBDcmVhdGUgYW4gRVhFLCBub3QgRExMCi0KLUNGTEFHUwkJPSAkKF9CQVNFKSAkKF9HRU4pICQoX09QVCkgJChfREJHKSAkKF9PVVQpICQoX0VYRSkgL1NzCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHJpbWFyeSBUYXJnZXQocykKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLUFsbDogIG9iaiBub2lzZSBQeUNvcmUubGliIFB5dGhvbjIzLmxpYiBQR2VuLmV4ZSBcCi0gICAgICBQeXRob24uZXhlIFB5dGhvblBNLmV4ZSBQeXRob24yMy5kbGwgIyBfdGtpbnRlci5kbGwKLQotTW9kdWxlczogJChNT0RVTEVTKQotT2JqZWN0czogJChPQkpFQ1RTKQotUGFyc2VyOiAgJChQQVJTRVIpCi1QeXRob246ICAkKFBZVEhPTikKLQotIyBEaXJlY3RvcnkgdG8gS2VlcCAuT0JKIEZpbGVzIE91dCBvZiB0aGUgV2F5Ci1vYmo6Ci0JQC1ta2RpciBvYmogPj5OVUwKLQotIyBEaXJlY3RvcnkgdG8gS2VlcCAuTUFQIGFuZCBTdWNoIFRleHQgRmlsZXMgT3V0IG9mIHRoZSBXYXkKLW5vaXNlOgotCUAtbWtkaXIgbm9pc2UgPj5OVUwKLQotIyMjIyMjIyMjIyMjIyMKLSMKLSMjIyMjIyMjIyMjIyMjCi0KLSMgUHl0aG9uIEV4dGVuc2lvbiBETEw6IFRjbC9UayBJbnRlcmZhY2UKLSNfdGtpbnRlci5kbGw6ICQoUEFUSE9CSilcX3RraW50ZXIub2JqIFB5dGhvbjIzLmxpYiBfdGtpbnRlci5kZWYKLSMJQCBFY2hvIExpbmtpbmcgJEAgQXMgRExMCi0jCUAgJChDQykgJChDRkxBR1MpIC9CIi9OT0UiICQoX0RMTCkgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi0jJChQQVRIT0JKKVxfdGtpbnRlci5vYmo6ICQoUFlfTU9EVUxFUylcX3RraW50ZXIuYwotIwlAIEVjaG8gQ29tcGlsaW5nICQqKgotIwlAICQoQ0MpIC1jICQoQ0ZMQUdTKSAkKF9ETEwpIC1GbyRAICQqKiA+PiQoRVJSUykKLQotIyBPYmplY3QgTGlicmFyeSBvZiBBbGwgRXNzZW50aWFsIFB5dGhvbiBSb3V0aW5lcwotUHlDb3JlLmxpYjogJChNT0RVTEVTKSAkKE9CSkVDVFMpICQoUEFSU0VSKSAkKFBZVEhPTikgJChQQVRIT0JKKVxDb25maWcub2JqCi0JQCBFY2hvIEFkZGluZyBVcGRhdGVkIE9iamVjdCBGaWxlcyB0byBMaW5rIExpYnJhcnkgJEAKLQlAICEgSUxJQiAkQCAvTk9MT0dPIC9OT0JBQ0tVUCAtKyQ/IDsgPj4kKEVSUlMpCi0KLVB5dGhvbjIzLmRsbDogJChQQVRIT0JKKVxDb21waWxlLm9iaiBQeUNvcmUubGliIFB5dGhvbi5kZWYKLQlAIEVjaG8gTGlua2luZyAkQCBBcyBETEwKLQlAICQoQ0MpICQoQ0ZMQUdTKSAvQiIvTk9FIiAkKF9ETEwpIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLSMJQCBFY2hvIENvbXByZXNzaW5nICRAIHdpdGggTHhMaXRlCi0jCUAgbHhsaXRlICRACi0KLSMgSUJNIExpbmtlciBSZXF1aXJlcyBPbmUgRXhwbGljaXQgLk9CSiBUbyBCdWlsZCBhIC5ETEwgZnJvbSBhIC5MSUIKLSQoUEFUSE9CSilcQ29tcGlsZS5vYmo6ICQoUFlfUFlUSE9OKVxDb21waWxlLmMKLQlAIEVjaG8gQ29tcGlsaW5nICQqKgotCUAgJChDQykgLWMgJChDRkxBR1MpICQoX0RMTCkgLUZvJEAgJCoqID4+JChFUlJTKQotCi0jIEltcG9ydCBMaWJyYXJ5IGZvciBVc2luZyB0aGUgUHl0aG9uMjMuZGxsCi1QeXRob24yMy5saWI6IFB5dGhvbi5kZWYKLQlAIEVjaG8gTWFraW5nICRACi0JQCBJTVBMSUIgL05PTE9HTyAvTk9JR05PUkUgJEAgJCoqID4+JChFUlJTKQotCUAgSUxJQiAvTk9MT0dPIC9DT05WRk9STUFUIC9OT0VYVERJQ1RJT05BUlkgL05PQlJPV1NFIC9OT0JBQ0tVUCAkQDsgPj4kKEVSUlMpCi0KLSMgU21hbGwgQ29tbWFuZC1MaW5lIFByb2dyYW0gdG8gU3RhcnQgSW50ZXJwcmV0ZXIgaW4gUHl0aG9uMjMuZGxsCi1QeXRob24uZXhlOiAkKFBBVEhPQkopXFB5dGhvbi5vYmogUHl0aG9uMjMubGliCi0JQCBFY2hvIExpbmtpbmcgJEAgQXMgRVhFCi0JQCAkKENDKSAkKENGTEFHUykgJChfRVhFKSAvQiIvUE06VklPIC9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotIyBTbWFsbCBQTS1HVUkgUHJvZ3JhbSB0byBTdGFydCBJbnRlcnByZXRlciBpbiBQeXRob24yMy5kbGwKLVB5dGhvblBNLmV4ZTogJChQQVRIT0JKKVxQeXRob24ub2JqIFB5dGhvbjIzLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1BNOlBNIC9TVEFDSzozNjAwMDAiIC9GZSRAICQoX01BUCkgJCoqICQoT1RIRVJMSUJTKSA+PiQoRVJSUykKLQotUEdlbi5leGU6ICQoUEdFTikgUHlDb3JlLmxpYgotCUAgRWNobyBMaW5raW5nICRAIEFzIEVYRQotCUAgJChDQykgJChDRkxBR1MpICQoX0VYRSkgL0IiL1NUQUNLOjM2MDAwMCIgL0ZlJEAgJChfTUFQKSAkKiogJChPVEhFUkxJQlMpID4+JChFUlJTKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBNaXNjZWxsYW5lb3VzIFRhcmdldHMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgUmVtb3ZlIEludGVybWVkaWF0ZSBUYXJnZXRzIGJ1dCBMZWF2ZSBFeGVjdXRhYmxlIEJpbmFyaWVzCi1jbGVhbjoKLQktLSBEZWwgL1EgJChQQVRIT0JKKVwqLm9iagkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RIC9ZIE5vaXNlCQkJPk5VTCAyPiYxCi0JLS0gRGVsIC9RICQoRVJSUykJCQk+TlVMIDI+JjEKLQotIyBSZW1vdmUgQWxsIFRhcmdldHMsIEluY2x1ZGluZyBGaW5hbCBCaW5hcmllcwotZGlzdGNsZWFuOiBjbGVhbgotICAgICAgICAtLSBEZWwgL1EgUHlDb3JlLmxpYiBQeXRob24yMy5saWIgICAgICAgPk5VTCAyPiYxCi0gICAgICAgIC0tIERlbCAvUSBQeXRob24yMy5kbGwgUHl0aG9uLmV4ZSBQR2VuLmV4ZSA+TlVMIDI+JjEKLQotcmVsZWFzZTogUHl0aG9uLmV4ZSBQeXRob24yMy5kbGwgUHl0aG9uMjMubGliCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgUHl0aG9uLmV4ZSAgIEQ6XEVYRXMKLQktLSBARWNobyBZIHwgY29weSAvVSBQeXRob24yMy5kbGwgRDpcRExMcwotCS0tIEBFY2hvIFkgfCBjb3B5IC9VIFB5dGhvbjIzLmxpYiBFOlxUYXVcTGliCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgX3RraW50ZXIuZGxsIEQ6XFB5dGhvbgotCi10ZXN0OgotICAgICAgICBweXRob24gLi5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLQotIyBVcGRhdGUgRGVwZW5kZW5jaWVzIG9uIFRhcmdldHMgKFVzZXMgT3B1c01BS0UgQ29tbWVyY2lhbCBQcm9kdWN0KQotZGVwZW5kOgotCUQ6XE9wdXNNYWtlXG9zMm1rbWYgLWMgLXMKLQotIyMjIE9QVVMgTUtNRjogIERvIG5vdCByZW1vdmUgdGhpcyBsaW5lISAgR2VuZXJhdGVkIGRlcGVuZGVuY2llcyBmb2xsb3cuCi0KLV90a2ludGVyLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hcnJheW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hdWRpb29wLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotYmluYXNjaWkub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNtYXRobW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYXRoLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY3BpY2tsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNyeXB0bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWN1cnNlc21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fZGJtbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1lcnJuby5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZXJybm9tb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmNudGxtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxzeXNcaW9jdGwuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcGVjdGxtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnBldGVzdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1fZ2RibW1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0YnVpbGRpbmZvLm9iajogcHljb25maWcuaAotCi1nZXRwYXRoLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxvc2RlZnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ3JwbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChPUzJUQ1BJUClcSW5jbHVkZVxncnAuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotaW1hZ2VvcC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWFpbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbWF0aG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteW1hdGguaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1wem1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdpbnRyZXByLmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotbmlzbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHRpbWUuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1vcGVyYXRvci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcGFyc2VybW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCBcCi0JICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1pbml0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1wb3NpeC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG15dGltZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXBvc2l4bW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcHdkbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChPUzJUQ1BJUClcSW5jbHVkZVxwd2QuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotcmVhZGxpbmUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJlc291cmNlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHRpbWUuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zZWxlY3Rtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxteXNlbGVjdC5oICQoUFlfSU5DTFVERSlcbXl0aW1lLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotc2lnbmFsbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNvY2tldG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKE9TMlRDUElQKVxJbmNsdWRlXG5ldGluZXRcaW4uaCBcCi0JICQoT1MyVENQSVApXEluY2x1ZGVcc3lzXHNvY2tldC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChPUzJUQ1BJUClcSW5jbHVkZVxuZXRkYi5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN0cnVjdG1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN5c2xvZ21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoT1MyVENQSVApXEluY2x1ZGVcc3lzbG9nLmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXRlcm1pb3Mub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLV90aHJlYWRtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdGhyZWFkLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi10aW1lbW9kdWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbXl0aW1lLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQoteHhtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXpsaWJtb2R1bGUub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWFic3RyYWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jbGFzc29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWNvbXBsZXhvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1kaWN0b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1maWxlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZmxvYXRvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcmFtZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmcmFtZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvcGNvZGUuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzdHJ1Y3RtZW1iZXIuaCBcCi0JICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZnVuY29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWxpc3RvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWxvbmdvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1tZXRob2RvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1vZHVsZW9iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1vYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXJhbmdlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNsaWNlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN0cmluZ29iamVjdC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15bWF0aC5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXR1cGxlb2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCBcCi0JICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXR5cGVvYmplY3Qub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXh4b2JqZWN0Lm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1hY2NlbGVyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9QQVJTRVIpXHBhcnNlci5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlcdG9rZW4uaAotCi1iaXRzZXQub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLWZpcnN0c2V0cy5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotZ3JhbW1hci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotZ3JhbW1hcjEub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLWludHJjaGVjay5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1saXN0bm9kZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLW1ldGFncmFtbWFyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRhZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLW15cmVhZGxpbmUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmgKLQotbm9kZS5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXBhcnNlci5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCBcCi0JICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfUEFSU0VSKVxwYXJzZXIuaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmgKLQotcGFyc2V0b2sub2JqOiAkKFBZX0lOQ0xVREUpXGJpdHNldC5oIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggXAotCSAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX1BBUlNFUilccGFyc2VyLmggJChQWV9JTkNMVURFKVxwYXJzZXRvay5oIFwKLQkgJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlcdG9rZW4uaCBcCi0JICQoUFlfUEFSU0VSKVx0b2tlbml6ZXIuaAotCi1wZ2VuLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRhZ3JhbW1hci5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVx0b2tlbi5oCi0KLXBnZW5tYWluLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlcbm9kZS5oIFwKLQkgJChQWV9JTkNMVURFKVxwYXJzZXRvay5oICQoUFlfUEFSU0VSKVxwZ2VuLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmgKLQotcHJpbnRncmFtbWFyLm9iajogJChQWV9JTkNMVURFKVxiaXRzZXQuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZ3JhbW1hci5oIFwKLQkgJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oICQoUFlfSU5DTFVERSlccGdlbmhlYWRlcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oCi0KLXRva2VuaXplci5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxwZ2VuaGVhZGVycy5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oIFwKLQkgJChQWV9JTkNMVURFKVx0b2tlbi5oICQoUFlfUEFSU0VSKVx0b2tlbml6ZXIuaAotCi1hdG9mLm9iajogcHljb25maWcuaAotCi1ibHRpbm1vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxldmFsLmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15bWF0aC5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotY2V2YWwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGV2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnJhbWVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlcb3Bjb2RlLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1jb21waWxlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBpbGUuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxncmFtaW5pdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcbm9kZS5oICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggXAotCSAkKFBZX0lOQ0xVREUpXG9wY29kZS5oICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCBcCi0JICQoUFlfSU5DTFVERSlccHlmcGUuaCAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob25ydW4uaCAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cnVjdG1lbWJlci5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1lcnJvcnMub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLWZtb2Qub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYXRoLmgKLQotZnJvemVuLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1mcm96ZW5tYWluLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRhcmdzLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRjb21waWxlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1nZXRjb3B5cmlnaHQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0cGxhdGZvcm0ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oIFwKLQkgJChQWV9JTkNMVURFKVxteXByb3RvLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccHlkZWJ1Zy5oICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5c3RhdGUuaCAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggXAotCSAkKFBZX0lOQ0xVREUpXHJhbmdlb2JqZWN0LmggJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzdHJpbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggXAotCSAkKFBZX0lOQ0xVREUpXHR1cGxlb2JqZWN0LmgKLQotZ2V0dmVyc2lvbi5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlccGF0Y2hsZXZlbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3lzbW9kdWxlLmggJChQWV9JTkNMVURFKVx0cmFjZWJhY2suaCBcCi0JICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1ncmFtaW5pdC5vYmo6ICQoUFlfSU5DTFVERSlcYml0c2V0LmggcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGdyYW1tYXIuaCBcCi0JICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXHBnZW5oZWFkZXJzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaAotCi1oeXBvdC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVxteW1hdGguaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1pbXBvcnQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGVycmNvZGUuaCAkKFBZX0lOQ0xVREUpXGV2YWwuaCBcCi0JICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9QWVRIT04pXGltcG9ydGRsLmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1hcnNoYWwuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG5vZGUuaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvc2RlZnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRva2VuLmggXAotCSAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1pbXBvcnRkbC5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9QWVRIT04pXGltcG9ydGRsLmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxvc2RlZnMuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1hcnNoYWwub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxsb25naW50cmVwci5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWFyc2hhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW1vZHN1cHBvcnQub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggXAotCSAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCBcCi0JICQoUFlfSU5DTFVERSlccHllcnJvcnMuaCAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5dGhvbi5oICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzbGljZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLW15c3RydG91bC5vYmo6IHB5Y29uZmlnLmgKLQotcHlmcGUub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlccHlmcGUuaAotCi1weXN0YXRlLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1weXRob25ydW4ub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxiaXRzZXQuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21waWxlLmggXAotCSAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxlcnJjb2RlLmggJChQWV9JTkNMVURFKVxldmFsLmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZsb2F0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxncmFtbWFyLmggXAotCSAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCBcCi0JICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oICQoUFlfSU5DTFVERSlcbWFyc2hhbC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxub2RlLmggJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCBcCi0JICQoUFlfSU5DTFVERSlccGFyc2V0b2suaCAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZnBlLmggJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCBcCi0JICQoUFlfSU5DTFVERSlccHl0aG9ucnVuLmggJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXNpZ2NoZWNrLm9iajogJChQWV9JTkNMVURFKVxhYnN0cmFjdC5oICQoUFlfSU5DTFVERSlcY2V2YWwuaCAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIFwKLQkgJChQWV9JTkNMVURFKVxkaWN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxmaWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmdW5jb2JqZWN0LmggJChQWV9JTkNMVURFKVxpbXBvcnQuaCAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxpbnRyY2hlY2suaCAkKFBZX0lOQ0xVREUpXGxpc3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcbWV0aG9kb2JqZWN0LmggJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1vZHVsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCBcCi0JICQoUFlfSU5DTFVERSlcb2JqZWN0LmggJChQWV9JTkNMVURFKVxvYmppbXBsLmggJChQWV9JTkNMVURFKVxweWRlYnVnLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oICQoUFlfSU5DTFVERSlcdHVwbGVvYmplY3QuaAotCi1zdHJkdXAub2JqOiBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcbXltYWxsb2MuaCAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaAotCi1zdHJ0b2Qub2JqOiBweWNvbmZpZy5oCi0KLXN0cnVjdG1lbWJlci5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggXAotCSAkKFBZX0lOQ0xVREUpXGNsYXNzb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxmbG9hdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludG9iamVjdC5oICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGxvbmdvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2RzdXBwb3J0LmggJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggXAotCSAkKFBZX0lOQ0xVREUpXG15cHJvdG8uaCAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXN5c21vZHVsZS5vYmo6ICQoUFlfSU5DTFVERSlcYWJzdHJhY3QuaCAkKFBZX0lOQ0xVREUpXGNldmFsLmggJChQWV9JTkNMVURFKVxjbGFzc29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxjb2JqZWN0LmggJChQWV9JTkNMVURFKVxjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBcCi0JICQoUFlfSU5DTFVERSlcZGljdG9iamVjdC5oICQoUFlfSU5DTFVERSlcZmlsZW9iamVjdC5oICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZnVuY29iamVjdC5oICQoUFlfSU5DTFVERSlcaW1wb3J0LmggJChQWV9JTkNMVURFKVxpbnRvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcaW50cmNoZWNrLmggJChQWV9JTkNMVURFKVxsaXN0b2JqZWN0LmggJChQWV9JTkNMVURFKVxsb25nb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXG1ldGhvZG9iamVjdC5oICQoUFlfSU5DTFVERSlcbW9kc3VwcG9ydC5oIFwKLQkgJChQWV9JTkNMVURFKVxtb2R1bGVvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG15bWFsbG9jLmggJChQWV9JTkNMVURFKVxteXByb3RvLmggXAotCSAkKFBZX0lOQ0xVREUpXG9iamVjdC5oICQoUFlfSU5DTFVERSlcb2JqaW1wbC5oICQoUFlfSU5DTFVERSlcb3NkZWZzLmggXAotCSAkKFBZX0lOQ0xVREUpXHB5ZGVidWcuaCAkKFBZX0lOQ0xVREUpXHB5ZXJyb3JzLmggJChQWV9JTkNMVURFKVxweWZwZS5oIFwKLQkgJChQWV9JTkNMVURFKVxweXN0YXRlLmggJChQWV9JTkNMVURFKVxweXRob24uaCAkKFBZX0lOQ0xVREUpXHB5dGhvbnJ1bi5oIFwKLQkgJChQWV9JTkNMVURFKVxyYW5nZW9iamVjdC5oICQoUFlfSU5DTFVERSlcc2xpY2VvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcc3RyaW5nb2JqZWN0LmggJChQWV9JTkNMVURFKVxzeXNtb2R1bGUuaCAkKFBZX0lOQ0xVREUpXHRyYWNlYmFjay5oIFwKLQkgJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCi0KLXRocmVhZC5vYmo6IHB5Y29uZmlnLmggJChQWV9JTkNMVURFKVx0aHJlYWQuaAotCi10cmFjZWJhY2sub2JqOiAkKFBZX0lOQ0xVREUpXGFic3RyYWN0LmggJChQWV9JTkNMVURFKVxjZXZhbC5oICQoUFlfSU5DTFVERSlcY2xhc3NvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcY29iamVjdC5oICQoUFlfSU5DTFVERSlcY29tcGlsZS5oICQoUFlfSU5DTFVERSlcY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCAkKFBZX0lOQ0xVREUpXGRpY3RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZpbGVvYmplY3QuaCBcCi0JICQoUFlfSU5DTFVERSlcZmxvYXRvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGZyYW1lb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGZ1bmNvYmplY3QuaCAkKFBZX0lOQ0xVREUpXGltcG9ydC5oICQoUFlfSU5DTFVERSlcaW50b2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXGludHJjaGVjay5oICQoUFlfSU5DTFVERSlcbGlzdG9iamVjdC5oICQoUFlfSU5DTFVERSlcbG9uZ29iamVjdC5oIFwKLQkgJChQWV9JTkNMVURFKVxtZXRob2RvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG1vZHN1cHBvcnQuaCBcCi0JICQoUFlfSU5DTFVERSlcbW9kdWxlb2JqZWN0LmggJChQWV9JTkNMVURFKVxteW1hbGxvYy5oICQoUFlfSU5DTFVERSlcbXlwcm90by5oIFwKLQkgJChQWV9JTkNMVURFKVxvYmplY3QuaCAkKFBZX0lOQ0xVREUpXG9iamltcGwuaCAkKFBZX0lOQ0xVREUpXG9zZGVmcy5oIFwKLQkgJChQWV9JTkNMVURFKVxweWRlYnVnLmggJChQWV9JTkNMVURFKVxweWVycm9ycy5oICQoUFlfSU5DTFVERSlccHlmcGUuaCBcCi0JICQoUFlfSU5DTFVERSlccHlzdGF0ZS5oICQoUFlfSU5DTFVERSlccHl0aG9uLmggJChQWV9JTkNMVURFKVxweXRob25ydW4uaCBcCi0JICQoUFlfSU5DTFVERSlccmFuZ2VvYmplY3QuaCAkKFBZX0lOQ0xVREUpXHNsaWNlb2JqZWN0LmggXAotCSAkKFBZX0lOQ0xVREUpXHN0cmluZ29iamVjdC5oICQoUFlfSU5DTFVERSlcc3RydWN0bWVtYmVyLmggXAotCSAkKFBZX0lOQ0xVREUpXHN5c21vZHVsZS5oICQoUFlfSU5DTFVERSlcdHJhY2ViYWNrLmggJChQWV9JTkNMVURFKVx0dXBsZW9iamVjdC5oCmRpZmYgLS1naXQgYS9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsgYi9QQy9vczJ2YWNwcC9tYWtlZmlsZS5vbWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhMTJjOTYuLjAwMDAwMDAKLS0tIGEvUEMvb3MydmFjcHAvbWFrZWZpbGUub21rCisrKyAvZGV2L251bGwKQEAgLTEsMTA0NyArMCwwIEBACi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jICAgICAgICAgIFRvcC1MZXZlbCBNYWtlZmlsZSBmb3IgQnVpbGRpbmcgUHl0aG9uIGZvciBPUy8yCi0jCi0jIFRoaXMgbWFrZWZpbGUgd2FzIGRldmVsb3BlZCBmb3IgdXNlIHdpdGggSUJNJ3MgVmlzdWFsQWdlIEMvQysrCi0jIGZvciBPUy8yIGNvbXBpbGVyLCB2ZXJzaW9uIDMuMCwgd2l0aCBGaXhwYWNrIDggYXBwbGllZC4gIEl0IHVzZXMKLSMgdGhlIGNvbW1lcmNpYWwgT3B1c01BS0UgdG9vbC4KLSMKLSMgVGhlIG91dHB1dCBvZiB0aGUgYnVpbGQgaXMgYSBsYXJnaXNoIFB5dGhvbjE1LkRMTCBjb250YWluaW5nIHRoZQotIyBlc3NlbnRpYWwgbW9kdWxlcyBvZiBQeXRob24gYW5kIGEgc21hbGwgUHl0aG9uLmV4ZSBwcm9ncmFtIHRvIHN0YXJ0Ci0jIHRoZSBpbnRlcnByZXRlci4gIFdoZW4gZW1iZWRkaW5nIFB5dGhvbiB3aXRoaW4gYW5vdGhlciBwcm9ncmFtLCBvbmx5Ci0jIFB5dGhvbjE1LkRMTCBpcyBuZWVkZWQuCi0jCi0jIFRoZXNlIHR3byBiaW5hcmllcyBjYW4gYmUgc3RhdGljYWxseSBsaW5rZWQgd2l0aCB0aGUgVmlzdWFsQWdlIEMvQysrCi0jIHJ1bnRpbWUgbGlicmFyeSAocHJvZHVjaW5nIGxhcmdlciBiaW5hcmllcyksIG9yIGR5bmFtaWNhbGx5IGxpbmtlZAotIyB0byBtYWtlIHNtYWxsZXIgb25lcyB0aGF0IHJlcXVpcmUgdGhlIGNvbXBpbGVyIHRvIGJlIGluc3RhbGxlZCBvbgotIyBhbnkgc3lzdGVtIFB5dGhvbiBpcyB1c2VkIG9uLgotIwotIyBIaXN0b3J5IChNb3N0IFJlY2VudCBGaXJzdCkKLSMKLSMgMjAtTm92LTk3IGpyciBDbGVhbmVkIFVwIGZvciBBcHBseWluZyB0byBEaXN0cmlidXRpb24KLSMgMjktT2N0LTk3IGpyciBNb2RpZmllZCBmb3IgVXNlIHdpdGggUHl0aG9uIDEuNSBBbHBoYSA0Ci0jIDAzLUF1Zy05NiBqcnIgT3JpZ2luYWwgZm9yIFVzZSB3aXRoIFB5dGhvbiAxLjQgUmVsZWFzZQotIwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBsYWNlcyBhbmQgVGhpbmdzCi0jIyMjIyMjIyMjIyMjIyMjIyMjCi1QWV9NT0RVTEVTICAgICAgPSAuLlwuLlxNb2R1bGVzCi1QWV9PQkpFQ1RTICAgICAgPSAuLlwuLlxPYmplY3RzCi1QWV9QQVJTRVIgICAgICAgPSAuLlwuLlxQYXJzZXIKLVBZX1BZVEhPTiAgICAgICA9IC4uXC4uXFB5dGhvbgotUFlfSU5DTFVERSAgICAgID0gLi5cLi5cSW5jbHVkZQotUFlfSU5DTFVERVMgICAgID0gLjskKFBZX0lOQ0xVREUpOyQoUFlfTU9EVUxFUyk7JChQWV9PQkpFQ1RTKTskKFBZX1BBUlNFUik7JChQWV9QWVRIT04pCi0KLSMgV2hlcmUgdG8gRmluZCB0aGUgSUJNIFRDUC9JUCBTb2NrZXQgSW5jbHVkZXMgYW5kIExpYnJhcmllcwotT1MyVENQSVAgICAgICAgID0gQzpcTVBUTgotCi0jIFdoZXJlIHRvIFB1dCB0aGUgLk9CSiBGaWxlcywgVG8gS2VlcCBUaGVtIE91dCBvZiB0aGUgV2F5Ci0uUEFUSC5vYmoJPSBvYmoKLQotIyBTZWFyY2ggUGF0aCBmb3IgSW5jbHVkZSBGaWxlcwotUFJPSklOQ0xVREUJPSAuOyQoT1MyVENQSVApXEluY2x1ZGU7JChQWV9JTkNMVURFUykKLQotIyBQbGFjZSB0byBTZWFyY2ggZm9yIFNvdXJjZXMgcmUgT3B1c01BS0UgRGVwZW5kZW5jeSBHZW5lcmF0b3IgKENvbW1lcmNpYWwpCi1NS01GX1NSQ1MJPSAkKFBZX01PRFVMRVMpXCouYyAkKFBZX09CSkVDVFMpXCouYyAkKFBZX1BBUlNFUilcKi5jICQoUFlfUFlUSE9OKVwqLmMKLQotLkhEUlBBVEguYwk6PSAkKFBST0pJTkNMVURFLDs9ICkgJCguSERSUEFUSC5jKQotLlBBVEguYyAgICAgICAgID0gLjskKFBZX01PRFVMRVMpOyQoUFlfT0JKRUNUUyk7JChQWV9QQVJTRVIpOyQoUFlfUFlUSE9OKQotT1RIRVJMSUJTCT0gJChPUzJUQ1BJUClcbGliXHNvMzJkbGwubGliICQoT1MyVENQSVApXGxpYlx0Y3AzMmRsbC5saWIKLQotIyMjIyMjIyMjIyMjIyMjIyMKLSMgSW5mZXJlbmNlIFJ1bGVzCi0jIyMjIyMjIyMjIyMjIyMjIwotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUHl0aG9uIFN1YnN5c3RlbXMKLSMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBQWVRIT04gaXMgdGhlIGNlbnRyYWwgY29yZSwgY29udGFpbmluZyB0aGUgYnVpbHRpbnMgYW5kIGludGVycHJldGVyLgotUFlUSE9OCQk9ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBCbHRpbk1vZHVsZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgQ0V2YWwub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENvbXBpbGUub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBFcnJvcnMub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgRnJvemVuLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldGFyZ3Mub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRDb21waWxlci5vYmogICAgXAotICAgICAgICAgICAgICAgICAgR2V0Q29weXJpZ2h0Lm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEdldE1UaW1lLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBHZXRPcHQub2JqICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgR2V0UGxhdGZvcm0ub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIEdldFZlcnNpb24ub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBHcmFtSW5pdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgSW1wb3J0Lm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEltcG9ydERMLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBNYXJzaGFsLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgTW9kU3VwcG9ydC5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIE15U3RydG91bC5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQeVN0YXRlLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUHl0aG9uUnVuLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cnVjdE1lbWJlci5vYmogICBcCi0gICAgICAgICAgICAgICAgICBTeXNNb2R1bGUub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgVGhyZWFkLm9iaiAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFRyYWNlQmFjay5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBGcm96ZW5NYWluLm9iagotCi0jIE9taXR0ZWQgUHl0aG9uIEVsZW1lbnRzIChhbmQgUmVhc29uKToKLSAgIyBhdG9mLmMgICAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGR1cDIuYyAgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgZm1vZC5jICAgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBnZXRjd2QuYyAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIGh5cG90LmMgICAgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgbWVtbW92ZS5jICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLSAgIyBzdHJkdXAuYyAgICAgICAgLS0gSW1wbGVtZW50YXRpb24gZm9yIFBsYXRmb3JtcyB3L28gVGhpcyBGdW5jdGlvbgotICAjIHN0cmVycm9yLmMgICAgICAtLSBJbXBsZW1lbnRhdGlvbiBmb3IgUGxhdGZvcm1zIHcvbyBUaGlzIEZ1bmN0aW9uCi0gICMgc3RydG9kLmMgICAgICAgIC0tIEltcGxlbWVudGF0aW9uIGZvciBQbGF0Zm9ybXMgdy9vIFRoaXMgRnVuY3Rpb24KLQotICAjIHNpZ2NoZWNrLmMgICAgICAtLSBQcmltaXRpdmUgU2lnbmFsIENhdGNoZXIgKFNpZ25hbE1vZHVsZS5jIFVzZWQgSW5zdGVhZCkKLSAgIyBweWZwZS5jICAgICAgICAgLS0gUHJpbWl0aXZlIEZQRSBDYXRjaGVyIChOb3QgUmVmZXJlbmNlZCBieSBBbnlvbmUpCi0gICMgZnJvemVubWFpbi5jCi0KLSMgUHl0aG9uJ3MgSW50ZXJuYWwgUGFyc2VyCi1QQVJTRVIJCT0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQWNjZWxlci5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgR3JhbW1hcjEub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgTXlSZWFkbGluZS5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTm9kZS5vYmogICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUGFyc2VyLm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUGFyc2VUb2sub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgVG9rZW5pemVyLm9iagotCi0jIFB5dGhvbiBPYmplY3QgVHlwZXMKLU9CSkVDVFMJCT0gICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgQWJzdHJhY3Qub2JqICAgICAgXAotICAgICAgICAgICAgICAgICAgQ2xhc3NPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgQ09iamVjdC5vYmogICAgICAgXAotICAgICAgICAgICAgICAgICAgQ29tcGxleE9iamVjdC5vYmogXAotICAgICAgICAgICAgICAgICAgRGljdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgRmlsZU9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgRmxvYXRPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgRnJhbWVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgRnVuY09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTGlzdE9iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTG9uZ09iamVjdC5vYmogICAgXAotICAgICAgICAgICAgICAgICAgTWV0aG9kT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgTW9kdWxlT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgT2JqZWN0Lm9iaiAgICAgICAgXAotICAgICAgICAgICAgICAgICAgUmFuZ2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgU2xpY2VPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgU3RyaW5nT2JqZWN0Lm9iaiAgXAotICAgICAgICAgICAgICAgICAgVHVwbGVPYmplY3Qub2JqICAgXAotICAgICAgICAgICAgICAgICAgVHlwZU9iamVjdC5vYmoKLQotIyBPbWl0dGVkIE9iamVjdHMgKGFuZCBSZWFzb24pOgotICAjIHh4b2JqZWN0LmMgICAgICAtLSBUZW1wbGF0ZSB0byBDcmVhdGUgWW91ciBPd24gT2JqZWN0IFR5cGVzCi0KLSMgRXh0ZW5zaW9uIE1vZHVsZXMgKEJ1aWx0LUluIG9yIGFzIFNlcGFyYXRlIERMTHMpCi1NT0RVTEVTCQk9ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIEFycmF5TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEJpbkFzY2lpLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIENNYXRoTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEVycm5vTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIEdldEJ1aWxkSW5mby5vYmogIFwKLSAgICAgICAgICAgICAgICAgIEdldFBhdGhQLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1haW4ub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1hdGhNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ENWMub2JqICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIE1ENU1vZHVsZS5vYmogICAgIFwKLSAgICAgICAgICAgICAgICAgIE9wZXJhdG9yLm9iaiAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFBvc2l4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFJlZ2V4TW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFJlZ0V4cHIub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFJlb3BNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIFNlbGVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNpZ25hbE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNvY2tldE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFNvdW5kRXgub2JqICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cm9wTW9kdWxlLm9iaiAgIFwKLSAgICAgICAgICAgICAgICAgIFN0cnVjdE1vZHVsZS5vYmogIFwKLSAgICAgICAgICAgICAgICAgIFRpbWVNb2R1bGUub2JqICAgIFwKLSAgICAgICAgICAgICAgICAgIFRocmVhZE1vZHVsZS5vYmoKLQotIyBPbWl0dGVkIE1vZHVsZXMgKGFuZCBEZXNjcmlwdGlvbi9SZWFzb24pOgotICAjCi0gICMgTXVsdGltZWRpYToKLSAgIyBhdWRpb29wLmMgICAgICAgLS0gVmFyaW91cyBDb21wdXRlIE9wZXJhdGlvbnMgb24gQXVkaW8gU2FtcGxlcwotCi0gICMgRGF0YWJhc2U6Ci0gICMgX2RibW1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgREJNIERhdGFiYXNlIEFQSSAoR2VuZXJpYyBGbGF2b3IpCi0gICMgX2dkYm1tb2R1bGUuYyAgIC0tIFdyYXBwZXIgb2YgREJNIERhdGFiYXNlIEFQSSAoR05VIEZsYXZvcikKLQotICAjIENyeXB0b2dyYXBoeToKLSAgIyBjcnlwdG1vZHVsZS5jICAgLS0gU2ltcGxlIFdyYXBwZXIgZm9yIGNyeXB0KCkgRnVuY3Rpb24KLQotIyAgICAgICAgICAgICAgICAgIGZjbnRsbW9kdWxlLm9iaiAgIFwKLSMgICAgICAgICAgICAgICAgICBmcGVjdGxtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgZnBldGVzdG1vZHVsZS5vYmogXAotIyBVbml4LVNwZWNpZmljICAgIGdldHBhdGgub2JqICAgICAgIFwKLSMgICAgICAgICAgICAgICAgICBncnBtb2R1bGUub2JqICAgICBcCi0jICAgICAgICAgICAgICAgICAgbXB6bW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIG5pc21vZHVsZS5vYmogICAgIFwKLSMgICAgICAgICAgICAgICAgICBwYXJzZXJtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgcHdkbW9kdWxlLm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIHJlYWRsaW5lLm9iaiAgICAgIFwKLSMgICAgICAgICAgICAgICAgICByZXNvdXJjZS5vYmogICAgICBcCi0jICAgICAgICAgICAgICAgICAgc3lzbG9nbW9kdWxlLm9iaiAgXAotIyAgICAgICAgICAgICAgICAgIHRlcm1pb3Mub2JqICAgICAgIFwKLQotICAjIFVzZXIgSW50ZXJmYWNlOgotIyAgICAgICAgICAgICAgICAgIF90a2ludGVyLm9iaiAgICAgIFwgICAgIAotIyAgICAgICAgICAgICAgICAgIHN0ZHdpbm1vZHVsZS5vYmogIFwKLSMgICAgICAgICAgICAgICAgICBjdXJzZXNtb2R1bGUub2JqICBcCi0jICAgICAgICAgICAgICAgICAgdGNsTm90aWZ5Lm9iaiAgICAgXAotIyAgICAgICAgICAgICAgICAgIHRrYXBwaW5pdC5vYmogICAgIFwKLSAgIyBmbG1vZHVsZS5jICAgICAgLS0gV3JhcHBlciBvZiBGT1JNUyBMaWJyYXJ5IChTY3JlZW4gRm9ybXMpCi0KLSAgIyB6bGlibW9kdWxlLmMgICAgLS0gV3JhcHBlciBvZiBaTGliIENvbXByZXNzaW9uIEFQSSAoR1ppcCBGb3JtYXQpCi0gICMgcHVyZW1vZHVsZS5jICAgIC0tIFdyYXBwZXIgb2YgUHVyaWZ5IERlYnVnZ2luZyBBUEkgKFByb2JhYmx5IE5vbi1PUy8yKQotICAjIHh4bW9kdWxlLmMgICAgICAtLSBUZW1wbGF0ZSB0byBDcmVhdGUgWW91ciBPd24gTW9kdWxlCi0KLSMKLSMgU3RhbmRhbG9uZSBQYXJzZXIgR2VuZXJhdG9yIFByb2dyYW0gKFNoYXJlcyBTb21lIG9mIFB5dGhvbidzIE1vZHVsZXMpCi1QR0VOICAgICAgICAgICAgPSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQR2VuTWFpbi5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBQR2VuLm9iaiAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBQcmludEdyYW1tYXIub2JqICBcCi0gICAgICAgICAgICAgICAgICBMaXN0Tm9kZS5vYmogICAgICBcCi0gICAgICAgICAgICAgICAgICBHcmFtbWFyLm9iaiAgICAgICBcCi0gICAgICAgICAgICAgICAgICBCaXRTZXQub2JqICAgICAgICBcCi0gICAgICAgICAgICAgICAgICBGaXJzdFNldHMub2JqICAgICBcCi0gICAgICAgICAgICAgICAgICBNZXRhR3JhbW1hci5vYmoKLQotIyBPbWl0dGVkIFBhcnNlciBFbGVtZW50cyAoYW5kIFJlYXNvbik6Ci0gICMgaW50cmNoZWNrLmMgICAgIC0tIE5vdCBSZWZlcmVuY2VkIGJ5IEFueW9uZSAoPykKLQotIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1hY3JvcyBhbmQgRmxhZ3MKLSMjIyMjIyMjIyMjIyMjIyMjIwotX0JBU0UJCT0gL1EgL1cyIC9JJChQUk9KSU5DTFVERSkKLQkJIyAvUSAgID0gT21pdCBJQk0gQ29weXJpZ2h0Ci0JCSMgL1cyICA9IFNob3cgV2FybmluZ3MvRXJyb3JzIE9ubHkKLQkJIyAvRmkgID0gQ3JlYXRlIFByZWNvbXBpbGVkIEhlYWRlcnMKLQkJIyAvU2kgID0gVXRpbGl6ZSBQcmVjb21waWxlZCBIZWFkZXJzCi0KLV9HRU4JCT0gL0c0IC9HbSAvR2QgL0IiL1NUQUNLOjM2MDAwMCIKLQkJIyAvRzQgID0gR2VuZXJhdGUgQ29kZSBmb3IgNDg2IChVc2UgMzg2IGZvciBEZWJ1Z2dlcikKLQkJIyAvR20gID0gVXNlIE11bHRpdGhyZWFkIFJ1bnRpbWUKLQkJIyAvR2QgID0gRHluYW1pY2FsbHkgTG9hZCBSdW50aW1lCi0JCSMgL0dzICA9IFJlbW92ZSBDb2RlIGZvciBTdGFjayBQcm9iZXMKLQkJIyAvR3ggID0gUmVtb3ZlIEMrKyBFeGNlcHRpb24tSGFuZGxpbmcgSW5mbwotCQkjIC9UZHAgPSBHZW5lcmF0ZSBDb2RlIGZvciBDKysgVGVtcGxhdGVzCi0JCSMgL1JuICA9IEdlbmVyYXRlIENvZGUgd2l0aG91dCBhIFJ1bnRpbWUKLQkJIyAvQiIvU1RBQ0s6biIgPSBTZXQgU3RhY2sgU2l6ZQotCi1fT1BUCQk9IC9PIC9HbAotCQkjIC9PICAgPSBFbmFibGUgU3BlZWQtT3B0aW1pemF0aW9ucwotCQkjIC9PbCAgPSBQYXNzIENvZGUgVGhydSBJbnRlcm1lZGlhdGUgTGlua2VyCi0JCSMgL0d1ICA9IEFkdmlzZSBMaW5rZXIgQWxsIEV4dCBEYXRhIGlzIElEJ2QKLQkJIyAvR2wgID0gSGF2ZSBMaW5rZXIgUmVtb3ZlIFVudXNlZCBGbnMKLQotX0RCRwkJPSAvREhBVkVfQ09ORklHX0ggL0RVU0VfU09DS0VUCi0JCSMgL1RpICA9IEVtYmVkIERlYnVnZ2VyL0FuYWx5emVyIFJlY3MKLQkJIyAvVG0gID0gRW5hYmxlIERlYnVnIE1lbW9yeSBGbnMKLQkJIyAvVHggID0gUmVxdWVzdCBGdWxsIER1bXAgVXBvbiBFeGNlcHRpb24KLQkJIyAvRERFQlVHID0gRW5hYmxlIEFwcC1JbnRlcm5hbCBEZWJ1Z2dpbmcgQ29kZQotICAgICAgICAgICAgICAgICMgL0RVU0VfU09DS0VUID0gCi0gICAgICAgICAgICAgICAgIyAvRFVTRV9ETF9FWFBPUlQgPSAKLQotX09VVAkJPSAKLQkJIyAvRmIgID0gRW1iZWQgQnJvd3NlciBSZWNzCi0JCSMgL0doICA9IEdlbmVyYXRlIENvZGUgZm9yIFByb2ZpbGVyIEhvb2tzCi0JCSMgL0ZsICA9IE91dHB1dCBDL0MrKyBMaXN0aW5nIEZpbGVzCi0gICAgICAgICAgICAgICAgIyAvTGYgID0gUHJvdmlkZSBGdWxsIChEZXRhaWxlZCkgTGlzdGluZyBGaWxlcwotCQkjIC9GbS4gPSBPdXRwdXQgTGlua2VyIE1hcCBGaWxlCi0JCSMgL0Z0LiA9IE91dHB1dCBDKysgVGVtcGxhdGUgUmVzb2x1dGlvbiBGaWxlcwotCi1fTUFQCQk9IC9GbU5vaXNlXCQoLlRBUkdFVCxCLD4ubWFwKQotCi1fRExMCQk9IC9HZS0KLV9FWEUJCT0gL0dlCi0JCSMgL0dlID0gQ3JlYXRlIGFuIEVYRSwgbm90IERMTAotCi1DRkxBR1MJCT0gJChfQkFTRSkgJChfR0VOKSAkKF9PUFQpICQoX0RCRykgJChfT1VUKSAkKF9FWEUpIC9TcwotQ1BQRkxBR1MJPSAkKF9CQVNFKSAkKF9HRU4pICQoX09QVCkgJChfREJHKSAkKF9PVVQpICQoX0VYRSkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQcmltYXJ5IFRhcmdldChzKQotIyMjIyMjIyMjIyMjIyMjIyMjIwotQWxsOiAgb2JqIG5vaXNlIFB5Q29yZS5saWIgUHl0aG9uMTUubGliIFB5dGhvbjE1LmRsbCBQeXRob24uZXhlIFBHZW4uZXhlCi0KLSMjIyMjIyMjIyMjIyMjCi0jCi0jIyMjIyMjIyMjIyMjIwotCi0jIE9iamVjdCBMaWJyYXJ5IG9mIEFsbCBFc3NlbnRpYWwgUHl0aG9uIFJvdXRpbmVzCi1QeUNvcmUubGliOiAkKE1PRFVMRVMpICQoT0JKRUNUUykgJChQQVJTRVIpICQoUFlUSE9OKSBDb25maWcub2JqCi0gICAgICAgICVkbyAiJS5saWIiCi0KLVB5dGhvbjE1LmRsbDogQ29tcGlsZS5vYmogUHlDb3JlLmxpYiBQeXRob24uZGVmCi0gICAgICAgICVkbyAiJS5kbGwiIENQUEZMQUdTKz0vQiIvTk9FIiBDUFBGTEFHUys9JChfTUFQKQotCi1Db21waWxlLm9iajogQ29tcGlsZS5jCi0gICAgICAgICVkbyAiLmMub2JqIiBDRkxBR1MrPSQoX0RMTCkKLQotIyBJbXBvcnQgTGlicmFyeSBmb3IgVXNpbmcgdGhlIFB5dGhvbjE1LmRsbAotUHl0aG9uMTUubGliOiBQeXRob24uZGVmCi0gICAgICAgICVkbyAiLmRlZi5saWIiCi0KLSMgU21hbGwgUHJvZ3JhbSB0byBTdGFydCBJbnRlcnByZXRlciBpbiBQeXRob24xNS5kbGwKLVB5dGhvbi5leGU6IFB5dGhvbi5vYmogUHl0aG9uMTUubGliCi0gICAgICAgICVkbyAiJS5leGUiIENQUEZMQUdTKz0kKF9NQVApCi0KLSNQeXRob24ub2JqOiBQeXRob24uYwotIyAgICAgICAgJWRvICIuYy5vYmoiIENGTEFHUys9JChfRVhFKQotCi1QR2VuLmV4ZTogJChQR0VOKSBQeUNvcmUubGliCi0gICAgICAgICVkbyAiJS5leGUiIENQUEZMQUdTKz0kKF9NQVApCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1pc2NlbGxhbmVvdXMgVGFyZ2V0cwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBSZW1vdmUgSW50ZXJtZWRpYXRlIFRhcmdldHMgYnV0IExlYXZlIEV4ZWN1dGFibGUgQmluYXJpZXMKLWNsZWFuOgotCS0tIERlbCAvUSAkKC5QQVRILm9iailcKi5vYmoJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAvWSBOb2lzZQkJCT5OVUwgMj4mMQotCS0tIERlbCAvUSAkKEVSUlMpCQkJPk5VTCAyPiYxCi0KLSMgUmVtb3ZlIEFsbCBUYXJnZXRzLCBJbmNsdWRpbmcgRmluYWwgQmluYXJpZXMKLWRpc3RjbGVhbjogY2xlYW4KLSAgICAgICAgLS0gRGVsIC9RIFB5Q29yZS5saWIgUHl0aG9uMTUubGliICAgICAgID5OVUwgMj4mMQotICAgICAgICAtLSBEZWwgL1EgUHl0aG9uMTUuZGxsIFB5dGhvbi5leGUgICAgICAgPk5VTCAyPiYxCi0KLXJlbGVhc2U6IFB5dGhvbi5leGUgUHl0aG9uMTUuZGxsIFB5dGhvbjE1LmxpYgotCS0tIEBFY2hvIFkgfCBjb3B5IC9VICQoLlNPVVJDRVMsTSIqLmV4ZSIpIEQ6XEVYRXMKLQktLSBARWNobyBZIHwgY29weSAvVSAkKC5TT1VSQ0VTLE0iKi5kbGwiKSBEOlxETExzCi0JLS0gQEVjaG8gWSB8IGNvcHkgL1UgJCguU09VUkNFUyxNIioubGliIikgRTpcVGF1XExpYgotCi10ZXN0OgotICAgICAgICBweXRob24gLi5cLi5cbGliXHRlc3RccmVncnRlc3QucHkKLQotIyBVcGRhdGUgRGVwZW5kZW5jaWVzIG9uIFRhcmdldHMgKFVzZXMgT3B1c01BS0UgQ29tbWVyY2lhbCBQcm9kdWN0KQotZGVwZW5kOgotCUQ6XE9wdXNNYWtlXG9zMm1rbWYgLWMgLXMKLQotIyMjIE9QVVMgTUtNRjogIERvIG5vdCByZW1vdmUgdGhpcyBsaW5lISAgR2VuZXJhdGVkIGRlcGVuZGVuY2llcyBmb2xsb3cuCi0KLV90a2ludGVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFycmF5bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWF1ZGlvb3Aub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYmluYXNjaWkub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY21hdGhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15bWF0aC5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY3BpY2tsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jcnlwdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jdXJzZXNtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX2RibW1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1lcnJuby5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1lcnJub21vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mY250bG1vZHVsZS5vYmo6IGFic3RyYWN0LmggYzpcbXB0blxpbmNsdWRlXHN5c1xpb2N0bC5oIGNldmFsLmggXAotCSBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggXAotCSBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggXAotCSBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZnBlY3RsbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZwZXRlc3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX2dkYm1tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0YnVpbGRpbmZvLm9iajogcHljb25maWcuaAotCi1nZXRwYXRoLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdycG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBncnAuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1pbWFnZW9wLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLW1haW4ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbWF0aG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tcHptb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ2ludHJlcHIuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBcCi0JIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBcCi0JIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1uaXNtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxzeXNcdGltZS5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBcCi0JIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIFwKLQkgZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggXAotCSBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotb3BlcmF0b3Iub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcGFyc2VybW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBncmFtaW5pdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdG9rZW4uaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcG9zaXgub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcG9zaXhtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG15dGltZS5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBcCi0JIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcHdkbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHdkLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJlYWRsaW5lLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJlc291cmNlLm9iajogYWJzdHJhY3QuaCBjOlxtcHRuXGluY2x1ZGVcc3lzXHRpbWUuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggXAotCSBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNlbGVjdG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbXlzZWxlY3QuaCBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIFwKLQkgcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIFwKLQkgc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNpZ25hbG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zb2NrZXRtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGM6XG1wdG5caW5jbHVkZVxuZXRpbmV0XGluLmggXAotCSBjOlxtcHRuXGluY2x1ZGVcc3lzXHNvY2tldC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG15dGltZS5oIG5ldGRiLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIFwKLQkgcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJ1Y3Rtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotc3lzbG9nbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNsb2cuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXRlcm1pb3Mub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotX3RocmVhZG1vZHVsZS5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdGhyZWFkLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10aW1lbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBteXRpbWUuaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXh4bW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXpsaWJtb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotYWJzdHJhY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY2xhc3NvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBcCi0JIHN0cnVjdG1lbWJlci5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotY29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jb21wbGV4b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15bWF0aC5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWRpY3RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZmlsZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIFwKLQkgc3RydWN0bWVtYmVyLmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mbG9hdG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggXAotCSBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcmFtZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmcmFtZW9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9wY29kZS5oIFwKLQkgcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggXAotCSByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3RydWN0bWVtYmVyLmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZ1bmNvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotbGlzdG9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1sb25nb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdpbnRyZXByLmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXltYXRoLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1tZXRob2RvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRva2VuLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1tb2R1bGVvYmplY3Qub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXJhbmdlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXNsaWNlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXN0cmluZ29iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggXAotCSBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggXAotCSBteW1hdGguaCBteXByb3RvLmggb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10dXBsZW9iamVjdC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi10eXBlb2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXh4b2JqZWN0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWFjY2VsZXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggXAotCSBwYXJzZXIuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWJpdHNldC5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotZmlyc3RzZXRzLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLWdyYW1tYXIub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotZ3JhbW1hcjEub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIHRva2VuLmgKLQotaW50cmNoZWNrLm9iajogcHljb25maWcuaCBpbnRyY2hlY2suaCBteW1hbGxvYy5oIG15cHJvdG8uaAotCi1saXN0bm9kZS5vYmo6IHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oIFwKLQkgdG9rZW4uaAotCi1tZXRhZ3JhbW1hci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZ3JhbW1hci5oIG1ldGFncmFtbWFyLmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotbXlyZWFkbGluZS5vYmo6IHB5Y29uZmlnLmggaW50cmNoZWNrLmggbXltYWxsb2MuaCBteXByb3RvLmgKLQotbm9kZS5vYmo6IHB5Y29uZmlnLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIHBnZW5oZWFkZXJzLmggcHlkZWJ1Zy5oCi0KLXBhcnNlci5vYmo6IGJpdHNldC5oIHB5Y29uZmlnLmggZXJyY29kZS5oIGdyYW1tYXIuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG5vZGUuaCBwYXJzZXIuaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLXBhcnNldG9rLm9iajogYml0c2V0LmggcHljb25maWcuaCBlcnJjb2RlLmggZ3JhbW1hci5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIHBhcnNlci5oIHBhcnNldG9rLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmggdG9rZW4uaCBcCi0JIHRva2VuaXplci5oCi0KLXBnZW4ub2JqOiBiaXRzZXQuaCBweWNvbmZpZy5oIGdyYW1tYXIuaCBtZXRhZ3JhbW1hci5oIG15bWFsbG9jLmggXAotCSBteXByb3RvLmggbm9kZS5oIHBnZW4uaCBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaCB0b2tlbi5oCi0KLXBnZW5tYWluLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggbm9kZS5oIFwKLQkgcGFyc2V0b2suaCBwZ2VuLmggcGdlbmhlYWRlcnMuaCBweWRlYnVnLmgKLQotcHJpbnRncmFtbWFyLm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi10b2tlbml6ZXIub2JqOiBweWNvbmZpZy5oIGVycmNvZGUuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBwZ2VuaGVhZGVycy5oIFwKLQkgcHlkZWJ1Zy5oIHRva2VuLmggdG9rZW5pemVyLmgKLQotYXRvZi5vYmo6IHB5Y29uZmlnLmgKLQotYmx0aW5tb2R1bGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGlsZS5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGV2YWwuaCBmaWxlb2JqZWN0LmggXAotCSBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBcCi0JIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIFwKLQkgbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteW1hdGguaCBteXByb3RvLmggbm9kZS5oIG9iamVjdC5oIFwKLQkgb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1jZXZhbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXZhbC5oIGZpbGVvYmplY3QuaCBcCi0JIGZsb2F0b2JqZWN0LmggZnJhbWVvYmplY3QuaCBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggXAotCSBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvcGNvZGUuaCBcCi0JIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIFwKLQkgcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIFwKLQkgdHVwbGVvYmplY3QuaAotCi1jb21waWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZ1bmNvYmplY3QuaCBncmFtaW5pdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIFwKLQkgb3Bjb2RlLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0b2tlbi5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZXJyb3JzLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWZtb2Qub2JqOiBweWNvbmZpZy5oIG15bWF0aC5oCi0KLWZyb3plbi5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1mcm96ZW5tYWluLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldGFyZ3Mub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29tcGlsZXIub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotZ2V0Y29weXJpZ2h0Lm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldHBsYXRmb3JtLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggcHl0aG9uLmggXAotCSBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggXAotCSB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdldHZlcnNpb24ub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBwYXRjaGxldmVsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWdyYW1pbml0Lm9iajogYml0c2V0LmggcHljb25maWcuaCBncmFtbWFyLmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBwZ2VuaGVhZGVycy5oIHB5ZGVidWcuaAotCi1oeXBvdC5vYmo6IHB5Y29uZmlnLmggbXltYXRoLmggbXlwcm90by5oCi0KLWltcG9ydC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZXJyY29kZS5oIGV2YWwuaCBcCi0JIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBpbXBvcnQuaCBpbXBvcnRkbC5oIFwKLQkgaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtYXJzaGFsLmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBub2RlLmggb2JqZWN0Lmggb2JqaW1wbC5oIG9zZGVmcy5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdG9rZW4uaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLWltcG9ydGRsLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGltcG9ydGRsLmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ29iamVjdC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIFwKLQkgbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBvc2RlZnMuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIFwKLQkgcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBcCi0JIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbWFyc2hhbC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21waWxlLmggXAotCSBjb21wbGV4b2JqZWN0LmggcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggXAotCSBmdW5jb2JqZWN0LmggaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIFwKLQkgbG9uZ2ludHJlcHIuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBcCi0JIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggXAotCSBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0LmggXAotCSBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotbW9kc3VwcG9ydC5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1teXN0cnRvdWwub2JqOiBweWNvbmZpZy5oCi0KLXB5ZnBlLm9iajogcHljb25maWcuaCBweWZwZS5oCi0KLXB5c3RhdGUub2JqOiBhYnN0cmFjdC5oIGNldmFsLmggY2xhc3NvYmplY3QuaCBjb2JqZWN0LmggY29tcGxleG9iamVjdC5oIFwKLQkgcHljb25maWcuaCBkaWN0b2JqZWN0LmggZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIFwKLQkgaW1wb3J0LmggaW50b2JqZWN0LmggaW50cmNoZWNrLmggbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBcCi0JIG1ldGhvZG9iamVjdC5oIG1vZHN1cHBvcnQuaCBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBcCi0JIG9iamVjdC5oIG9iamltcGwuaCBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBcCi0JIHB5dGhvbnJ1bi5oIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzeXNtb2R1bGUuaCBcCi0JIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKLQotcHl0aG9ucnVuLm9iajogYWJzdHJhY3QuaCBiaXRzZXQuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGlsZS5oIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBlcnJjb2RlLmggZXZhbC5oIFwKLQkgZmlsZW9iamVjdC5oIGZsb2F0b2JqZWN0LmggZnVuY29iamVjdC5oIGdyYW1tYXIuaCBpbXBvcnQuaCBcCi0JIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggbWFyc2hhbC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgbm9kZS5oIG9iamVjdC5oIG9iamltcGwuaCBwYXJzZXRvay5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggXAotCSBweXN0YXRlLmggcHl0aG9uLmggcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIFwKLQkgc3RyaW5nb2JqZWN0Lmggc3lzbW9kdWxlLmggdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zaWdjaGVjay5vYmo6IGFic3RyYWN0LmggY2V2YWwuaCBjbGFzc29iamVjdC5oIGNvYmplY3QuaCBjb21wbGV4b2JqZWN0LmggXAotCSBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBmdW5jb2JqZWN0LmggXAotCSBpbXBvcnQuaCBpbnRvYmplY3QuaCBpbnRyY2hlY2suaCBsaXN0b2JqZWN0LmggbG9uZ29iamVjdC5oIFwKLQkgbWV0aG9kb2JqZWN0LmggbW9kc3VwcG9ydC5oIG1vZHVsZW9iamVjdC5oIG15bWFsbG9jLmggbXlwcm90by5oIFwKLQkgb2JqZWN0Lmggb2JqaW1wbC5oIHB5ZGVidWcuaCBweWVycm9ycy5oIHB5ZnBlLmggcHlzdGF0ZS5oIHB5dGhvbi5oIFwKLQkgcHl0aG9ucnVuLmggcmFuZ2VvYmplY3QuaCBzbGljZW9iamVjdC5oIHN0cmluZ29iamVjdC5oIHN5c21vZHVsZS5oIFwKLQkgdHJhY2ViYWNrLmggdHVwbGVvYmplY3QuaAotCi1zdHJkdXAub2JqOiBweWNvbmZpZy5oIG15bWFsbG9jLmggbXlwcm90by5oCi0KLXN0cnRvZC5vYmo6IHB5Y29uZmlnLmgKLQotc3RydWN0bWVtYmVyLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIFwKLQkgY29tcGxleG9iamVjdC5oIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIFwKLQkgZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBcCi0JIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBcCi0JIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBcCi0JIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0LmggXAotCSBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCBcCi0JIHR1cGxlb2JqZWN0LmgKLQotc3lzbW9kdWxlLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBsZXhvYmplY3QuaCBcCi0JIHB5Y29uZmlnLmggZGljdG9iamVjdC5oIGZpbGVvYmplY3QuaCBmbG9hdG9iamVjdC5oIGZ1bmNvYmplY3QuaCBcCi0JIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIGxpc3RvYmplY3QuaCBsb25nb2JqZWN0LmggXAotCSBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggbW9kdWxlb2JqZWN0LmggbXltYWxsb2MuaCBteXByb3RvLmggXAotCSBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggcHlkZWJ1Zy5oIHB5ZXJyb3JzLmggcHlmcGUuaCBweXN0YXRlLmggXAotCSBweXRob24uaCBweXRob25ydW4uaCByYW5nZW9iamVjdC5oIHNsaWNlb2JqZWN0Lmggc3RyaW5nb2JqZWN0LmggXAotCSBzeXNtb2R1bGUuaCB0cmFjZWJhY2suaCB0dXBsZW9iamVjdC5oCi0KLXRocmVhZC5vYmo6IHB5Y29uZmlnLmggdGhyZWFkLmgKLQotdHJhY2ViYWNrLm9iajogYWJzdHJhY3QuaCBjZXZhbC5oIGNsYXNzb2JqZWN0LmggY29iamVjdC5oIGNvbXBpbGUuaCBcCi0JIGNvbXBsZXhvYmplY3QuaCBweWNvbmZpZy5oIGRpY3RvYmplY3QuaCBmaWxlb2JqZWN0LmggZmxvYXRvYmplY3QuaCBcCi0JIGZyYW1lb2JqZWN0LmggZnVuY29iamVjdC5oIGltcG9ydC5oIGludG9iamVjdC5oIGludHJjaGVjay5oIFwKLQkgbGlzdG9iamVjdC5oIGxvbmdvYmplY3QuaCBtZXRob2RvYmplY3QuaCBtb2RzdXBwb3J0LmggXAotCSBtb2R1bGVvYmplY3QuaCBteW1hbGxvYy5oIG15cHJvdG8uaCBvYmplY3QuaCBvYmppbXBsLmggb3NkZWZzLmggXAotCSBweWRlYnVnLmggcHllcnJvcnMuaCBweWZwZS5oIHB5c3RhdGUuaCBweXRob24uaCBweXRob25ydW4uaCBcCi0JIHJhbmdlb2JqZWN0Lmggc2xpY2VvYmplY3QuaCBzdHJpbmdvYmplY3QuaCBzdHJ1Y3RtZW1iZXIuaCBcCi0JIHN5c21vZHVsZS5oIHRyYWNlYmFjay5oIHR1cGxlb2JqZWN0LmgKZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3B5Y29uZmlnLmggYi9QQy9vczJ2YWNwcC9weWNvbmZpZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNzY1YjQ0Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3B5Y29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotI2lmbmRlZiBQeV9DT05GSUdfSAotI2RlZmluZSBQeV9DT05GSUdfSAotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogcHljb25maWcuaC4gIE5PVCBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUuCi0gKgotICogVGhpcyBpcyBhIG1hbnVhbGx5IG1haW50YWluZWQgdmVyc2lvbiB1c2VkIGZvciB0aGUgSUJNIFZpc3VhbEFnZQotICogQy9DKysgY29tcGlsZXIgb24gdGhlIE9TLzIgcGxhdGZvcm0uICBJdCBpcyBhIHN0YW5kYXJkIHBhcnQgb2YKLSAqIHRoZSBQeXRob24gZGlzdHJpYnV0aW9uLgotICoKLSAqIEZJTEVTWVNURU0gREVGSU5FUzoKLSAqIFRoZSBjb2RlIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciB3YXkgb2YgbmFtaW5nIGZpbGVzIGFuZAotICogZGlyZWN0b3J5IHBhdGhzIHNob3VsZCBiZSB3cmFwcGVkIGFyb3VuZCBvbmUgb2YgdGhlIGZvbGxvd2luZwotICogI2RlZmluZXM6Ci0gKgotICogICAgIERPU0ZJTEVTWVMgICBQQ0RPUy1TdHlsZSAoZm9yIFBDRE9TLCBXaW5kb3dzIGFuZCBPUy8yKQotICogICAgIE1BQ0ZJTEVTWVMgICBNYWNpbnRvc2gtU3R5bGUKLSAqICAgICBVTklYRklMRVNZUyAgVW5peC1TdHlsZQotICogICAgIEFNSUdBRklMRVNZUyBBbWlnYURPUy1TdHlsZQotICogCi0gKiBCZWNhdXNlIG9mIHRoZSBkaWZmZXJlbnQgY29tcGlsZXJzIGFuZCBvcGVyYXRpbmcgc3lzdGVtcyBpbgotICogdXNlIG9uIHRoZSBJbnRlbCBwbGF0Zm9ybSwgbmVpdGhlciB0aGUgY29tcGlsZXIgbmFtZSBub3IKLSAqIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG5hbWUgaXMgc3VmZmljaWVudC4KLSAqCi0gKiBPUy8yIERFRklORVM6Ci0gKiBUaGUgY29kZSBzcGVjaWZpYyB0byBPUy8yJ3MgUHJvZ3JhbSBBUEkgc2hvdWxkIGJlIHdyYXBwZWQgYXJvdW5kCi0gKgotICogX19UT1NfT1MyX18gICBUYXJnZXQgT3BlcmF0aW5nIFN5c3RlbSwgT1MvMgotICoKLSAqIEFueSBjb2RlIHNwZWNpZmljIHRvIHRoZSBjb21waWxlciBpdHNlbGYgc2hvdWxkIGJlIHdyYXBwZWQgd2l0aAotICoKLSAqIF9fSUJNQ19fICAgICAgSUJNIEMgQ29tcGlsZXIKLSAqIF9fSUJNQ1BQX18gICAgSUJNIEMrKyBDb21waWxlcgotICoKLSAqIE5vdGUgdGhhdCBzaW5jZSB0aGUgVmlzdWFsQWdlIEMvQysrIGNvbXBpbGVyIGlzIGFsc28gYXZhaWxhYmxlCi0gKiBmb3IgdGhlIFdpbmRvd3MgcGxhdGZvcm0sIGl0IG1heSBiZSBuZWNlc3NhcnkgdG8gdXNlIGJvdGggYQotICogX19UT1NfT1MyX18gYW5kIGEgX19JQk1DX18gdG8gc2VsZWN0IGEgdmVyeSBzcGVjaWZpYyBlbnZpcm9ubWVudC4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIFNvbWUgc3lzdGVtcyByZXF1aXJlIHNwZWNpYWwgZGVjbGFyYXRpb25zIGZvciBkYXRhIGl0ZW1zIGltcG9ydGVkCi0gKiBvciBleHBvcnRlZCBmcm9tIGR5bmFtaWMgbGluayBsaWJyYXJpZXMuICBOb3RlIHRoYXQgdGhlIGRlZmluaXRpb24KLSAqIG9mIERMX0lNUE9SVCBjb3ZlcnMgYm90aCBjYXNlcy4gIERlZmluZSBVU0VfRExfSU1QT1JUIGZvciB0aGUgY2xpZW50Ci0gKiBvZiBhIERMTC4gIERlZmluZSBVU0VfRExfRVhQT1JUIHdoZW4gbWFraW5nIGEgRExMLgotICovCi0KLSNpbmNsdWRlIDxpby5oPgotCi0vKiBDb25maWd1cmF0aW9uIE9wdGlvbnMgZm9yIEZpbmRpbmcgTW9kdWxlcyAqLwotI2RlZmluZSBQUkVGSVggICAgICAgICAgICAgICAgICIiCi0jZGVmaW5lIEVYRUNfUFJFRklYICAgICAgICAgICAgIiIKLQotLyogUHJvdmlkZSBhIGRlZmF1bHQgbGlicmFyeSBzbyB3cml0ZXJzIG9mIGV4dGVuc2lvbiBtb2R1bGVzCi0gKiB3b24ndCBoYXZlIHRvIGV4cGxpY2l0bHkgc3BlY2lmeSBpdCBhbnltb3JlCi0gKi8KLSNwcmFnbWEgbGlicmFyeSgiUHl0aG9uMjQubGliIikKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICAgIDMyLUJpdCBJQk0gVmlzdWFsQWdlIEMvQysrIHYzLjAgZm9yIE9TLzIgICAgICovCi0vKiAgKENvbnZlcnQgQ29tcGlsZXIgRmxhZ3MgaW50byBVc2VmdWwgU3dpdGNoZXMpICAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgUExBVEZPUk0gICAgIm9zMiIKLSNkZWZpbmUgQ09NUElMRVIgICAgIltWaXN1YWxBZ2UgQy9DKytdIgotI2RlZmluZSBQWU9TX09TMiAgICAvKiBEZWZpbmUgSW5kaWNhdG9yIG9mIE9wZXJhdGluZyBTeXN0ZW0gKi8KLSNkZWZpbmUgUFlDQ19WQUNQUCAgLyogRGVmaW5lIEluZGljYXRvciBvZiBDIENvbXBpbGVyICovCi0KLSAgLyogUGxhdGZvcm0gRmlsZXN5c3RlbSAqLwotI2RlZmluZSBQWVRIT05QQVRIICAiLjsuXFxsaWI7LlxcbGliXFxwbGF0LXdpbiIKLSNkZWZpbmUgRE9TRklMRVNZUyAgLyogT1MvMiBVc2VzIHRoZSBET1MgRmlsZSBOYW1pbmcgQ29udmVudGlvbnMgKi8KLS8qICNkZWZpbmUgSU1QT1JUXzh4M19OQU1FUyAobGV0J3MgbW92ZSB1cCB0byBsb25nIGZpbGVuYW1lcykgKi8KLQotICAvKiBQbGF0Zm9ybSBDUFUtTW9kZSBEZXBlbmRlbmNpZXMgKi8KLSNkZWZpbmUgV09SRF9CSVQgICAgICAgICAgICAgICAgMzIgLyogT1MvMiBpcyBhIDMyLUJpdCBPcGVyYXRpbmcgU3lzdGVtICovCi0jZGVmaW5lIExPTkdfQklUICAgICAgICAgICAgICAgIDMyCi0jZGVmaW5lIFNJWkVPRl9JTlQgICAgICAgICAgICAgICA0IC8qIENvdW50IG9mIEJ5dGVzIGluIGFuIChpbnQpICAgICAgICAgICAgKi8KLSNkZWZpbmUgU0laRU9GX0xPTkcgICAgICAgICAgICAgIDQgLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAobG9uZykgICAgICAgICAgICAqLwotI2RlZmluZSBTSVpFT0ZfVk9JRF9QICAgICAgICAgICAgNCAvKiBDb3VudCBvZiBCeXRlcyBpbiBhICh2b2lkICopICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfTE9OR19MT05HICAgICAxICovIC8qIFZBQysrIGRvZXMgbm90IHN1cHBvcnQgKGxvbmcgbG9uZykgICAgKi8KLS8qICNkZWZpbmUgU0laRU9GX0xPTkdfTE9ORyAgIDggKi8gLyogQ291bnQgb2YgQnl0ZXMgaW4gYSAobG9uZyBsb25nKSAgICAgICAqLwotCi0vKiB1bmljb2RlIGRlZmluaW5lcyAqLwotI2RlZmluZSBQWV9VTklDT0RFX1RZUEUgICAgd2NoYXJfdAotI2RlZmluZSBQeV9VTklDT0RFX1NJWkUgU0laRU9GX1NIT1JUCi0KLS8qIGR5bmFtaWMgbG9hZGluZyAqLwotI2RlZmluZSBIQVZFX0RZTkFNSUNfTE9BRElORyAxCi0KLS8qIERlZmluZSBpZiB0eXBlIGNoYXIgaXMgdW5zaWduZWQgYW5kIHlvdSBhcmUgbm90IHVzaW5nIGdjYy4gICovCi0jaWZuZGVmIF9fQ0hBUl9VTlNJR05FRF9fCi0vKiAjdW5kZWYgX19DSEFSX1VOU0lHTkVEX18gKi8KLSNlbmRpZgotCi10eXBlZGVmIGludCBtb2RlX3Q7Ci10eXBlZGVmIGludCB1aWRfdDsKLXR5cGVkZWYgaW50IGdpZF90OwotdHlwZWRlZiBpbnQgcGlkX3Q7Ci0KLSNpZiBkZWZpbmVkKF9fTVVMVElfXykgICAgIC8qIElmIENvbXBpbGVyIC9HdCsgTXVsdGl0aHJlYWQgT3B0aW9uIEVuYWJsZWQsICAqLwotICAjZGVmaW5lIFdJVEhfVEhSRUFEICAgICAgICAgICAgMSAvKiBFbmFibGUgVGhyZWFkaW5nIFRocm91Z2hvdXQgUHl0aG9uICAgICovCi0gICNkZWZpbmUgT1MyX1RIUkVBRFMgICAgICAgICAgICAxIC8qIEFuZCBVc2UgdGhlIE9TLzIgRmxhdm9yIG9mIFRocmVhZHMgICAgKi8KLS8qICNkZWZpbmUgX1JFRU5UUkFOVCAxICovIC8qIFVzZSB0aHJlYWQtc2FmZSBlcnJubywgaF9lcnJubywgYW5kIG90aGVyIGZucyAqLwotI2VuZGlmCi0KLSAgLyogQ29tcGlsZXIgUnVudGltZSBMaWJyYXJ5IENhcGFiaWxpdGllcyAqLwotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZGlyZWN0Lmg+Ci0vKiAjdW5kZWYgQkFEX1NUQVRJQ19GT1JXQVJEICovIC8qIGlmIGNvbXBpbGVyIGJvdGNoZXMgc3RhdGljIGZ3ZCBkZWNscyAqLwotCi0jZGVmaW5lIFNURENfSEVBREVSUyAgICAgICAgICAgICAxIC8qIFZBQysrIGlzIGFuIEFOU0kgQyBDb21waWxlciAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9IWVBPVCAgICAgICAgICAgICAgIDEgLyogaHlwb3QoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1BVVEVOViAgICAgICAgICAgICAgMSAvKiBwdXRlbnYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIFZBX0xJU1RfSVNfQVJSQVkgICAxICovIC8qIGlmIHZhX2xpc3QgaXMgYW4gYXJyYXkgb2Ygc29tZSBraW5kICAgKi8KLS8qICNkZWZpbmUgSEFWRV9DT05JT19IICAgICAgIDEgKi8gLyogI2luY2x1ZGUgPGNvbmlvLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0VSUk5PX0ggICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8ZXJybm8uaD4gICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAgICAgICAgICAxIC8qICNpbmNsdWRlIDxzeXMvc3RhdC5oPiAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgICAgICAgICAgICAqLwotCi0gIC8qIFZhcmlhYmxlLUFyZ3VtZW50cy9Qcm90b3R5cGVzICovCi0jZGVmaW5lIEhBVkVfUFJPVE9UWVBFUyAgICAgICAgICAxIC8qIFZBQysrIHN1cHBvcnRzIEMgRnVuY3Rpb24gUHJvdG90eXBlcyAgKi8KLSNkZWZpbmUgSEFWRV9TVERBUkdfUFJPVE9UWVBFUyAgIDEgLyogT3VyIDxzdGRhcmcuaD4gaGFzIHByb3RvdHlwZXMgICAgICAgICAqLwotCi0gIC8qIFN0cmluZy9NZW1vcnkvTG9jYWxlIE9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgSEFWRV9NRU1NT1ZFICAgICAgICAgICAgIDEgLyogbWVtbW92ZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NUUkVSUk9SICAgICAgICAgICAgMSAvKiBzdHJlcnJvcigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU0VUTE9DQUxFICAgICAgICAgICAxIC8qIHNldGxvY2FsZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgTUFMTE9DX1pFUk9fUkVUVVJOU19OVUxMIDEgLyogT3VyIG1hbGxvYygwKSByZXR1cm5zIGEgTlVMTCBwdHIgICAgICAqLwotCi0gIC8qIFNpZ25hbCBIYW5kbGluZyAqLwotI2RlZmluZSBIQVZFX1NJR05BTF9IICAgICAgICAgICAgMSAvKiBzaWduYWwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFJFVFNJR1RZUEUgICAgICAgICAgICB2b2lkIC8qIFJldHVybiB0eXBlIG9mIGhhbmRsZXJzIChpbnQgb3Igdm9pZCkgKi8KLS8qICN1bmRlZiBXQU5UX1NJR0ZQRV9IQU5ETEVSICAgKi8gLyogSGFuZGxlIFNJR0ZQRSAoc2VlIEluY2x1ZGUvcHlmcGUuaCkgICAqLwotLyogI2RlZmluZSBIQVZFX0FMQVJNICAgICAgICAgMSAqLyAvKiBhbGFybSgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU0lHSU5URVJSVVBUICAxICovIC8qIHNpZ2ludGVycnVwdCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TSUdSRUxTRSAgICAgIDEgKi8gLyogc2lncmVsc2UoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBET05UX0hBVkVfU0lHX0FMQVJNICAgICAgMQotI2RlZmluZSBET05UX0hBVkVfU0lHX1BBVVNFICAgICAgMQotCi0gIC8qIENsb2NrL1RpbWUgU3VwcG9ydCAqLwotI2RlZmluZSBIQVZFX0ZUSU1FICAgICAgICAgICAgICAgMSAvKiBXZSBoYXZlIGZ0aW1lKCkgaW4gPHN5cy90aW1lYi5oPiAgICAgICovCi0jZGVmaW5lIEhBVkVfQ0xPQ0sgICAgICAgICAgICAgICAxIC8qIGNsb2NrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TVFJGVElNRSAgICAgICAgICAgIDEgLyogc3RyZnRpbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX01LVElNRSAgICAgICAgICAgICAgMSAvKiBta3RpbWUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfVFpOQU1FICAgICAgICAgICAgICAxIC8qIE5vIHRtX3pvbmUgYnV0IGRvIGhhdmUgdHpuYW1lW10gICAgICAgKi8KLSNkZWZpbmUgSEFWRV9USU1FUyAgICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90aW1lcy5oPiAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU19VVElNRV9IICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3V0aW1lLmg+ICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVVRJTUVfSCAgICAgICAxICovIC8qICNpbmNsdWRlIDx1dGltZS5oPiAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9TWVNfVElNRV9IICAgICAgICAgIDEgLyogI2luY2x1ZGUgPHN5cy90aW1lLmg+ICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUTV9JTl9TWVNfVElNRSAgICAgMSAqLyAvKiA8c3lzL3RpbWUuaD4gZGVjbGFyZXMgc3RydWN0IHRtICAgICAgICovCi0jZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZICAgICAgICAxIC8qIGdldHRpbWVvZmRheSgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgR0VUVElNRU9GREFZX05PX1RaIDEgKi8gLyogZ2V0dGltZW9mZGF5KCkgZG9lcyBub3QgaGF2ZSAybmQgYXJnICAqLwotLyogI2RlZmluZSBIQVZFX1RJTUVHTSAgICAgICAgMSAqLyAvKiB0aW1lZ20oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAgICAgICAxIC8qIE1peCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+ICAgICAgICAgKi8KLSNkZWZpbmUgU1lTX1NFTEVDVF9XSVRIX1NZU19USU1FIDEgLyogTWl4IDxzeXMvc2VsZWN0Lmg+IGFuZCA8c3lzL3RpbWUuaD4gICAqLwotLyogI2RlZmluZSBIQVZFX0FMVFpPTkUgICAgICAgMSAqLyAvKiBpZiA8dGltZS5oPiBkZWZpbmVzIGFsdHpvbmUgICAgICAgICAgICovCi0KLSAgLyogTmV0d29yay9Tb2NrZXRzIFN1cHBvcnQgKi8KLSNkZWZpbmUgSEFWRV9TWVNfU0VMRUNUX0ggICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPiAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBCU0RfU0VMRUNUICAgICAgICAgICAgICAxIC8qIFVzZSBCU0QgdmVyc3VzIE9TLzIgZm9ybSBvZiBzZWxlY3QoKSAgICovCi0jZGVmaW5lIEhBVkVfU0VMRUNUICAgICAgICAgICAgIDEgLyogc2VsZWN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRQRUVSTkFNRSAgICAgICAgMSAvKiBnZXRwZWVybmFtZSgpICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI3VuZGVmIEhBVkVfR0VUSE9TVE5BTUVfUiAxICovIC8qIGdldGhvc3RuYW1lX3IoKSAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogRmlsZSBJL08gKi8KLSNkZWZpbmUgSEFWRV9EVVAyICAgICAgICAgICAgICAgIDEgLyogZHVwMigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0VYRUNWICAgICAgICAgICAgICAgMSAvKiBleGVjdigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfU0VUVkJVRiAgICAgICAgICAgICAxIC8qIHNldHZidWYoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRDV0QgICAgICAgICAgICAgIDEgLyogZ2V0Y3dkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1BJUEUgICAgICAgICAgICAgICAgMSAvKiBwaXBlKCkgICAgIFtPUy8yLXNwZWNpZmljIGNvZGUgYWRkZWRdICovCi0jZGVmaW5lIEhBVkVfSU9fSCAgICAgICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxpby5oPiAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9GQ05UTF9IICAgICAgICAgICAgIDEgLyogI2luY2x1ZGUgPGZjbnRsLmg+ICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX0RJUkVDVF9IICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8ZGlyZWN0Lmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfRkxPQ0sgICAgICAgICAxICovIC8qIGZsb2NrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9UUlVOQ0FURSAgICAgIDEgKi8gLyogdHJ1bmNhdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZUUlVOQ0FURSAgICAgMSAqLyAvKiBmdHJ1bmNhdGUoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfTFNUQVQgICAgICAgICAxICovIC8qIGxzdGF0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9ESVJFTlRfSCAgICAgIDEgKi8gLyogI2luY2x1ZGUgPGRpcmVudC5oPiAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX09QRU5ESVIgICAgICAgMSAqLyAvKiBvcGVuZGlyKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogUHJvY2VzcyBPcGVyYXRpb25zICovCi0jZGVmaW5lIEhBVkVfUFJPQ0VTU19IICAgICAgICAgICAxIC8qICNpbmNsdWRlIDxwcm9jZXNzLmg+ICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9HRVRQSUQgICAgICAgICAgICAgIDEgLyogZ2V0cGlkKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBIQVZFX1NZU1RFTSAgICAgICAgICAgICAgMSAvKiBzeXN0ZW0oKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEhBVkVfV0FJVCAgICAgICAgICAgICAgICAxIC8qIHdhaXQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgSEFWRV9LSUxMICAgICAgICAgICAgICAgIDEgLyoga2lsbCgpICAgICBbT1MvMi1zcGVjaWZpYyBjb2RlIGFkZGVkXSAqLwotI2RlZmluZSBIQVZFX1BPUEVOICAgICAgICAgICAgICAgMSAvKiBwb3BlbigpICAgIFtPUy8yLXNwZWNpZmljIGNvZGUgYWRkZWRdICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUUFBJRCAgICAgICAxICovIC8qIGdldHBwaWQoKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9XQUlUUElEICAgICAgIDEgKi8gLyogd2FpdHBpZCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX0ZPUksgICAgICAgICAgMSAqLyAvKiBmb3JrKCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0KLSAgLyogVXNlci9Hcm91cCBJRCBRdWVyaWVzICovCi0vKiAjZGVmaW5lIEhBVkVfR0VURUdJRCAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VURVVJRCAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUR0lEICAgICAgICAxICovCi0vKiAjZGVmaW5lIEhBVkVfR0VUVUlEICAgICAgICAxICovCi0KLSAgLyogVW5peC1TcGVjaWZpYyAqLwotLyogI2RlZmluZSBIQVZFX1NZU19VTl9IICAgICAgICAgICAgMSAvKiAjaW5jbHVkZSA8c3lzL3VuLmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfU1lTX1VUU05BTUVfSCAxICovIC8qICNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPiAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgSEFWRV9TWVNfV0FJVF9IICAgIDEgKi8gLyogI2luY2x1ZGUgPHN5cy93YWl0Lmg+ICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBIQVZFX1VOSVNURF9IICAgICAgMSAqLyAvKiAjaW5jbHVkZSA8dW5pc3RkLmg+ICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIEhBVkVfVU5BTUUgICAgICAgICAxICovIC8qIHVuYW1lICgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQotLyogRGVmaW5lIGlmIHlvdSB3YW50IGRvY3VtZW50YXRpb24gc3RyaW5ncyBpbiBleHRlbnNpb24gbW9kdWxlcyAqLwotI2RlZmluZSBXSVRIX0RPQ19TVFJJTkdTIDEKLQotI2lmZGVmIFVTRV9ETF9FWFBPUlQKLSAgI2RlZmluZSBETF9JTVBPUlQoUlRZUEUpIFJUWVBFIF9TeXN0ZW0KLSNlbmRpZgotCi0jZW5kaWYgLyogIVB5X0NPTkZJR19IICovCi0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYgYi9QQy9vczJ2YWNwcC9weXRob24uZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNTI1YzJhLi4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3B5dGhvbi5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSw0NzkgKzAsMCBAQAotTElCUkFSWSAgICAgICAgUFlUSE9OMjQgSU5JVElOU1RBTkNFIFRFUk1JTlNUQU5DRQotREVTQ1JJUFRJT04gICAgJ1B5dGhvbiAyLjQgQ29yZSBETEwnCi1QUk9UTU9ERQotREFUQSAgICAgICAgICAgTVVMVElQTEUgTk9OU0hBUkVECi0KLUVYUE9SVFMKLSAgICAgICAgICAgICAgIDsgRGF0YQotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fVHlwZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q09iamVjdF9UeXBlCi0gICAgICAgICAgICAgICBQeUNsYXNzX1R5cGUKLSAgICAgICAgICAgICAgIFB5Q29kZV9UeXBlCi0gICAgICAgICAgICAgICBQeUNvbXBsZXhfVHlwZQotICAgICAgICAgICAgICAgUHlEaWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5RXhjX0FyaXRobWV0aWNFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfQXNzZXJ0aW9uRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0F0dHJpYnV0ZUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19FT0ZFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRW52aXJvbm1lbnRFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfRXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0lPRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX0ltcG9ydEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19JbmRleEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19LZXlFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfS2V5Ym9hcmRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgIFB5RXhjX0xvb2t1cEVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19NZW1vcnlFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfTWVtb3J5RXJyb3JJbnN0Ci0gICAgICAgICAgICAgICBQeUV4Y19OYW1lRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX09TRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX092ZXJmbG93RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1J1bnRpbWVFcnJvcgotICAgICAgICAgICAgICAgUHlFeGNfU3ludGF4RXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1N5c3RlbUVycm9yCi0gICAgICAgICAgICAgICBQeUV4Y19TeXN0ZW1FeGl0Ci0gICAgICAgICAgICAgICBQeUV4Y19UeXBlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1ZhbHVlRXJyb3IKLSAgICAgICAgICAgICAgIFB5RXhjX1plcm9EaXZpc2lvbkVycm9yCi0gICAgICAgICAgICAgICBQeUZpbGVfVHlwZQotICAgICAgICAgICAgICAgUHlGbG9hdF9UeXBlCi0gICAgICAgICAgICAgICBQeUZyYW1lX1R5cGUKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fVHlwZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfRnJvemVuTW9kdWxlcwotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW5pdHRhYgotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9UeXBlCi0gICAgICAgICAgICAgICBQeUludF9UeXBlCi0gICAgICAgICAgICAgICBQeUxpc3RfVHlwZQotICAgICAgICAgICAgICAgUHlMb25nX1R5cGUKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX1R5cGUKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX1R5cGUKLSAgICAgICAgICAgICAgIFB5T1NfSW5wdXRIb29rCi0gICAgICAgICAgICAgICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyCi0gICAgICAgICAgICAgICBQeVJhbmdlX1R5cGUKLSAgICAgICAgICAgICAgIFB5U2xpY2VfVHlwZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfVHlwZQotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfVHlwZQotICAgICAgICAgICAgICAgUHlUdXBsZV9UeXBlCi0gICAgICAgICAgICAgICBQeVR5cGVfVHlwZQotICAgICAgICAgICAgICAgUHlfRGVidWdGbGFnCi0gICAgICAgICAgICAgICBQeV9Gcm96ZW5GbGFnCi0gICAgICAgICAgICAgICBQeV9JbnRlcmFjdGl2ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X05vU2l0ZUZsYWcKLSAgICAgICAgICAgICAgIFB5X09wdGltaXplRmxhZwotICAgICAgICAgICAgICAgUHlfVXNlQ2xhc3NFeGNlcHRpb25zRmxhZwotICAgICAgICAgICAgICAgUHlfVmVyYm9zZUZsYWcKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaWxldGFiCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfSW5pdHRhYgotICAgICAgICAgICAgICAgX1B5UGFyc2VyX0dyYW1tYXIKLSAgICAgICAgICAgICAgIF9QeVBhcnNlcl9Ub2tlbk5hbWVzCi0gICAgICAgICAgICAgICBfUHlfRWxsaXBzaXNPYmplY3QKLSAgICAgICAgICAgICAgIF9QeV9Ob25lU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfUGFja2FnZUNvbnRleHQKLSAgICAgICAgICAgICAgIF9QeV9UcnVlU3RydWN0Ci0gICAgICAgICAgICAgICBfUHlfWmVyb1N0cnVjdAotICAgICAgICAgICAgICAgX1B5X2Fic3RyYWN0X2hhY2sKLSAgICAgICAgICAgICAgIF9QeV9jYXBzdWxlX2hhY2sKLSAgICAgICAgICAgICAgIF9QeV9yZV9zeW50YXgKLSAgICAgICAgICAgICAgIF9QeV9yZV9zeW50YXhfdGFibGUKLQotICAgICAgICAgICAgICAgOyBDb2RlCi0gICAgICAgICAgICAgICBQeUFyZ19QYXJzZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2VUdXBsZQotICAgICAgICAgICAgICAgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gICAgICAgICAgICAgICBQeUFyZ19WYVBhcnNlCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9GaW5pCi0gICAgICAgICAgICAgICBQeUNGdW5jdGlvbl9HZXRGbGFncwotICAgICAgICAgICAgICAgUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX0dldFNlbGYKLSAgICAgICAgICAgICAgIFB5Q0Z1bmN0aW9uX05ldwotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldENvbnRleHQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfR2V0TmFtZQotICAgICAgICAgICAgICAgUHlDYXBzdWxlX0dldFBvaW50ZXIKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9JbXBvcnQKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9Jc1ZhbGlkCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfTmV3Ci0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0Q29udGV4dAotICAgICAgICAgICAgICAgUHlDYXBzdWxlX1NldERlc3RydWN0b3IKLSAgICAgICAgICAgICAgIFB5Q2Fwc3VsZV9TZXROYW1lCi0gICAgICAgICAgICAgICBQeUNhcHN1bGVfU2V0UG9pbnRlcgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0FzVm9pZFB0cgotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyQW5kRGVzYwotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0Zyb21Wb2lkUHRyCi0gICAgICAgICAgICAgICBQeUNPYmplY3RfR2V0RGVzYwotICAgICAgICAgICAgICAgUHlDT2JqZWN0X0ltcG9ydAotICAgICAgICAgICAgICAgUHlDYWxsYWJsZV9DaGVjawotICAgICAgICAgICAgICAgUHlDbGFzc19Jc1N1YmNsYXNzCi0gICAgICAgICAgICAgICBQeUNsYXNzX05ldwotICAgICAgICAgICAgICAgUHlDb2RlX0FkZHIyTGluZQotICAgICAgICAgICAgICAgUHlDb2RlX05ldwotICAgICAgICAgICAgICAgUHlDb21wbGV4X0FzQ0NvbXBsZXgKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Gcm9tQ0NvbXBsZXgKLSAgICAgICAgICAgICAgIFB5Q29tcGxleF9Gcm9tRG91YmxlcwotICAgICAgICAgICAgICAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZQotICAgICAgICAgICAgICAgUHlDb21wbGV4X1JlYWxBc0RvdWJsZQotICAgICAgICAgICAgICAgUHlEaWN0X0NsZWFyCi0gICAgICAgICAgICAgICBQeURpY3RfRGVsSXRlbQotICAgICAgICAgICAgICAgUHlEaWN0X0RlbEl0ZW1TdHJpbmcKLSAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfR2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X0l0ZW1zCi0gICAgICAgICAgICAgICBQeURpY3RfS2V5cwotICAgICAgICAgICAgICAgUHlEaWN0X05ldwotICAgICAgICAgICAgICAgUHlEaWN0X05leHQKLSAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlEaWN0X1NpemUKLSAgICAgICAgICAgICAgIFB5RGljdF9WYWx1ZXMKLSAgICAgICAgICAgICAgIFB5RXJyX0JhZEFyZ3VtZW50Ci0gICAgICAgICAgICAgICBQeUVycl9CYWRJbnRlcm5hbENhbGwKLSAgICAgICAgICAgICAgIFB5RXJyX0NoZWNrU2lnbmFscwotICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMKLSAgICAgICAgICAgICAgIFB5RXJyX0ZldGNoCi0gICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQKLSAgICAgICAgICAgICAgIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcwotICAgICAgICAgICAgICAgUHlFcnJfTmV3RXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUVycl9Ob01lbW9yeQotICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uCi0gICAgICAgICAgICAgICBQeUVycl9PY2N1cnJlZAotICAgICAgICAgICAgICAgUHlFcnJfUHJpbnQKLSAgICAgICAgICAgICAgIFB5RXJyX1ByaW50RXgKLSAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubwotICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lCi0gICAgICAgICAgICAgICBQeUVycl9TZXRJbnRlcnJ1cHQKLSAgICAgICAgICAgICAgIFB5RXJyX1NldE5vbmUKLSAgICAgICAgICAgICAgIFB5RXJyX1NldE9iamVjdAotICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nCi0gICAgICAgICAgICAgICBQeUV2YWxfQWNxdWlyZUxvY2sKLSAgICAgICAgICAgICAgIFB5RXZhbF9BY3F1aXJlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeUV2YWxfQ2FsbE1ldGhvZAotICAgICAgICAgICAgICAgUHlFdmFsX0NhbGxPYmplY3QKLSAgICAgICAgICAgICAgIFB5RXZhbF9DYWxsT2JqZWN0V2l0aEtleXdvcmRzCi0gICAgICAgICAgICAgICBQeUV2YWxfRXZhbENvZGUKLSAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucwotICAgICAgICAgICAgICAgUHlFdmFsX0dldEZyYW1lCi0gICAgICAgICAgICAgICBQeUV2YWxfR2V0R2xvYmFscwotICAgICAgICAgICAgICAgUHlFdmFsX0dldExvY2FscwotICAgICAgICAgICAgICAgUHlFdmFsX0dldFJlc3RyaWN0ZWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9Jbml0VGhyZWFkcwotICAgICAgICAgICAgICAgUHlFdmFsX1JlbGVhc2VMb2NrCi0gICAgICAgICAgICAgICBQeUV2YWxfUmVsZWFzZVRocmVhZAotICAgICAgICAgICAgICAgUHlFdmFsX1Jlc3RvcmVUaHJlYWQKLSAgICAgICAgICAgICAgIFB5RXZhbF9TYXZlVGhyZWFkCi0gICAgICAgICAgICAgICBQeUZpbGVfQXNGaWxlCi0gICAgICAgICAgICAgICBQeUZpbGVfRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5RmlsZV9Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeUZpbGVfR2V0TGluZQotICAgICAgICAgICAgICAgUHlGaWxlX05hbWUKLSAgICAgICAgICAgICAgIFB5RmlsZV9TZXRCdWZTaXplCi0gICAgICAgICAgICAgICBQeUZpbGVfU29mdFNwYWNlCi0gICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QKLSAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZwotICAgICAgICAgICAgICAgUHlGbG9hdF9Bc0RvdWJsZQotICAgICAgICAgICAgICAgUHlGbG9hdF9Bc1N0cmluZwotICAgICAgICAgICAgICAgUHlGbG9hdF9GaW5pCi0gICAgICAgICAgICAgICBQeUZsb2F0X0Zyb21Eb3VibGUKLSAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tQb3AKLSAgICAgICAgICAgICAgIFB5RnJhbWVfQmxvY2tTZXR1cAotICAgICAgICAgICAgICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMKLSAgICAgICAgICAgICAgIFB5RnJhbWVfRmluaQotICAgICAgICAgICAgICAgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QKLSAgICAgICAgICAgICAgIFB5RnJhbWVfTmV3Ci0gICAgICAgICAgICAgICBQeUZ1bmN0aW9uX0dldENvZGUKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0RGVmYXVsdHMKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fR2V0R2xvYmFscwotICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9OZXcKLSAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9BZGRBY2NlbGVyYXRvcnMKLSAgICAgICAgICAgICAgIFB5R3JhbW1hcl9GaW5kREZBCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfTGFiZWxSZXByCi0gICAgICAgICAgICAgICBQeUdyYW1tYXJfUmVtb3ZlQWNjZWxlcmF0b3JzCi0gICAgICAgICAgICAgICBQeUltcG9ydF9BZGRNb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0FwcGVuZEluaXR0YWIKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0NsZWFudXAKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCi0gICAgICAgICAgICAgICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZUV4Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9FeHRlbmRJbml0dGFiCi0gICAgICAgICAgICAgICBQeUltcG9ydF9HZXRNYWdpY051bWJlcgotICAgICAgICAgICAgICAgUHlJbXBvcnRfR2V0TW9kdWxlRGljdAotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0Ci0gICAgICAgICAgICAgICBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X0ltcG9ydE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlRXgKLSAgICAgICAgICAgICAgIFB5SW1wb3J0X1JlbG9hZE1vZHVsZQotICAgICAgICAgICAgICAgUHlJbnN0YW5jZV9Eb0Jpbk9wCi0gICAgICAgICAgICAgICBQeUluc3RhbmNlX05ldwotICAgICAgICAgICAgICAgUHlJbnRfQXNMb25nCi0gICAgICAgICAgICAgICBQeUludF9GaW5pCi0gICAgICAgICAgICAgICBQeUludF9Gcm9tTG9uZwotICAgICAgICAgICAgICAgUHlJbnRfR2V0TWF4Ci0gICAgICAgICAgICAgICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXIKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUKLSAgICAgICAgICAgICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKLSAgICAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQKLSAgICAgICAgICAgICAgIFB5TGlzdF9Bc1R1cGxlCi0gICAgICAgICAgICAgICBQeUxpc3RfR2V0SXRlbQotICAgICAgICAgICAgICAgUHlMaXN0X0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeUxpc3RfSW5zZXJ0Ci0gICAgICAgICAgICAgICBQeUxpc3RfTmV3Ci0gICAgICAgICAgICAgICBQeUxpc3RfUmV2ZXJzZQotICAgICAgICAgICAgICAgUHlMaXN0X1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5TGlzdF9TZXRTbGljZQotICAgICAgICAgICAgICAgUHlMaXN0X1NpemUKLSAgICAgICAgICAgICAgIFB5TGlzdF9Tb3J0Ci0gICAgICAgICAgICAgICBQeUxvbmdfQXNEb3VibGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcKLTsgICAgICAgICAgICAgICBQeUxvbmdfQXNMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0FzVW5zaWduZWRMb25nCi07ICAgICAgICAgICAgICAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0FzVm9pZFB0cgotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Eb3VibGUKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZ0xvbmcKLSAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZwotOyAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tVW5zaWduZWRMb25nTG9uZwotICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Wb2lkUHRyCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfSGFzS2V5Ci0gICAgICAgICAgICAgICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeU1hcHBpbmdfU2V0SXRlbVN0cmluZwotICAgICAgICAgICAgICAgUHlNYXJzaGFsX0luaXQKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21GaWxlCi0gICAgICAgICAgICAgICBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZUxvbmdUb0ZpbGUKLSAgICAgICAgICAgICAgIFB5TWFyc2hhbF9Xcml0ZU9iamVjdFRvRmlsZQotICAgICAgICAgICAgICAgUHlNYXJzaGFsX1dyaXRlT2JqZWN0VG9TdHJpbmcKLSAgICAgICAgICAgICAgIFB5TWVtX0ZyZWUKLSAgICAgICAgICAgICAgIFB5TWVtX01hbGxvYwotICAgICAgICAgICAgICAgUHlNZW1fUmVhbGxvYwotICAgICAgICAgICAgICAgUHlNZXRob2RfQ2xhc3MKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0ZpbmkKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX0Z1bmN0aW9uCi0gICAgICAgICAgICAgICBQeU1ldGhvZF9OZXcKLSAgICAgICAgICAgICAgIFB5TWV0aG9kX1NlbGYKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX0dldERpY3QKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX0dldE5hbWUKLSAgICAgICAgICAgICAgIFB5TW9kdWxlX05ldwotICAgICAgICAgICAgICAgUHlOb2RlX0FkZENoaWxkCi0gICAgICAgICAgICAgICBQeU5vZGVfQ29tcGlsZQotICAgICAgICAgICAgICAgUHlOb2RlX0ZyZWUKLTsgICAgICAgICAgICAgICBQeU5vZGVfTGlzdFRyZWUKLSAgICAgICAgICAgICAgIFB5Tm9kZV9OZXcKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0Fic29sdXRlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9BZGQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0FuZAotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ2hlY2sKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0NvZXJjZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfQ29lcmNlRXgKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0RpdmlkZQotICAgICAgICAgICAgICAgUHlOdW1iZXJfRGl2bW9kCi0gICAgICAgICAgICAgICBQeU51bWJlcl9GbG9hdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfSW50Ci0gICAgICAgICAgICAgICBQeU51bWJlcl9JbnZlcnQKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0xvbmcKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX0xzaGlmdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfTXVsdGlwbHkKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX05lZ2F0aXZlCi0gICAgICAgICAgICAgICBQeU51bWJlcl9PcgotICAgICAgICAgICAgICAgUHlOdW1iZXJfUG9zaXRpdmUKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1Bvd2VyCi0gICAgICAgICAgICAgICBQeU51bWJlcl9SZW1haW5kZXIKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1JzaGlmdAotICAgICAgICAgICAgICAgUHlOdW1iZXJfU3VidHJhY3QKLSAgICAgICAgICAgICAgIFB5TnVtYmVyX1hvcgotICAgICAgICAgICAgICAgUHlPU19BZnRlckZvcmsKLSAgICAgICAgICAgICAgIFB5T1NfRmluaUludGVycnVwdHMKLSAgICAgICAgICAgICAgIFB5T1NfSW5pdEludGVycnVwdHMKLSAgICAgICAgICAgICAgIFB5T1NfSW50ZXJydXB0T2NjdXJyZWQKLSAgICAgICAgICAgICAgIFB5T1NfUmVhZGxpbmUKLSAgICAgICAgICAgICAgIFB5T1NfU3RkaW9SZWFkbGluZQotICAgICAgICAgICAgICAgUHlPU19zdHJ0b2wKLSAgICAgICAgICAgICAgIFB5T1Nfc3RydG91bAotICAgICAgICAgICAgICAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsTWV0aG9kCi0gICAgICAgICAgICAgICBQeU9iamVjdF9DYWxsT2JqZWN0Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9DbXAKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0NvbXBhcmUKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0RlbEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEF0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEF0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc0F0dHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc0F0dHJTdHJpbmcKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0hhc2gKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X0lzVHJ1ZQotICAgICAgICAgICAgICAgUHlPYmplY3RfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeU9iamVjdF9Ob3QKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1ByaW50Ci0gICAgICAgICAgICAgICBQeU9iamVjdF9SZXByCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRBdHRyCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRBdHRyU3RyaW5nCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeU9iamVjdF9TdHIKLSAgICAgICAgICAgICAgIFB5T2JqZWN0X1R5cGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX0FkZFRva2VuCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9EZWxldGUKLSAgICAgICAgICAgICAgIFB5UGFyc2VyX05ldwotICAgICAgICAgICAgICAgUHlQYXJzZXJfUGFyc2VGaWxlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9QYXJzZVN0cmluZwotICAgICAgICAgICAgICAgUHlQYXJzZXJfU2ltcGxlUGFyc2VGaWxlCi0gICAgICAgICAgICAgICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZwotICAgICAgICAgICAgICAgUHlSYW5nZV9OZXcKLSAgICAgICAgICAgICAgIFB5UnVuX0FueUZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX0ZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX0ludGVyYWN0aXZlTG9vcAotICAgICAgICAgICAgICAgUHlSdW5fSW50ZXJhY3RpdmVPbmUKLSAgICAgICAgICAgICAgIFB5UnVuX1NpbXBsZUZpbGUKLSAgICAgICAgICAgICAgIFB5UnVuX1NpbXBsZVN0cmluZwotICAgICAgICAgICAgICAgUHlSdW5fU3RyaW5nCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NoZWNrCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0NvbmNhdAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db250YWlucwotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9Db3VudAotICAgICAgICAgICAgICAgUHlTZXF1ZW5jZV9EZWxJdGVtCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0RlbFNsaWNlCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0dldEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfR2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfSW4KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfSW5kZXgKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfTGVuZ3RoCi0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX0xpc3QKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfUmVwZWF0Ci0gICAgICAgICAgICAgICBQeVNlcXVlbmNlX1NldEl0ZW0KLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfU2V0U2xpY2UKLSAgICAgICAgICAgICAgIFB5U2VxdWVuY2VfVHVwbGUKLSAgICAgICAgICAgICAgIFB5U2xpY2VfR2V0SW5kaWNlcwotICAgICAgICAgICAgICAgUHlTbGljZV9OZXcKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0FzU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Db25jYXQKLSAgICAgICAgICAgICAgIFB5U3RyaW5nX0NvbmNhdEFuZERlbAotICAgICAgICAgICAgICAgUHlTdHJpbmdfRmluaQotICAgICAgICAgICAgICAgUHlTdHJpbmdfRm9ybWF0Ci0gICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nCi0gICAgICAgICAgICAgICBQeVN0cmluZ19Gcm9tU3RyaW5nQW5kU2l6ZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuRnJvbVN0cmluZwotICAgICAgICAgICAgICAgUHlTdHJpbmdfSW50ZXJuSW5QbGFjZQotICAgICAgICAgICAgICAgUHlTdHJpbmdfU2l6ZQotICAgICAgICAgICAgICAgUHlTeXNfR2V0RmlsZQotICAgICAgICAgICAgICAgUHlTeXNfR2V0T2JqZWN0Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRBcmd2Ci0gICAgICAgICAgICAgICBQeVN5c19TZXRPYmplY3QKLSAgICAgICAgICAgICAgIFB5U3lzX1NldFBhdGgKLSAgICAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyCi0gICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZG91dAotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9DbGVhcgotICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZV9EZWxldGUKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfR2V0Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX0dldERpY3QKLSAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGVfTmV3Ci0gICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlX1N3YXAKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfbG9jawotICAgICAgICAgICAgICAgUHlUaHJlYWRfYWxsb2NhdGVfc2VtYQotICAgICAgICAgICAgICAgUHlUaHJlYWRfZG93bl9zZW1hCi0gICAgICAgICAgICAgICBQeVRocmVhZF9leGl0X3RocmVhZAotICAgICAgICAgICAgICAgUHlUaHJlYWRfZnJlZV9sb2NrCi0gICAgICAgICAgICAgICBQeVRocmVhZF9mcmVlX3NlbWEKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkCi0gICAgICAgICAgICAgICBQeVRocmVhZF9yZWxlYXNlX2xvY2sKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQKLSAgICAgICAgICAgICAgIFB5VGhyZWFkX3VwX3NlbWEKLSAgICAgICAgICAgICAgIFB5VG9rZW5fT25lQ2hhcgotICAgICAgICAgICAgICAgUHlUb2tlbl9Ud29DaGFycwotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZQotICAgICAgICAgICAgICAgUHlUb2tlbml6ZXJfRnJvbUZpbGUKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0Zyb21TdHJpbmcKLSAgICAgICAgICAgICAgIFB5VG9rZW5pemVyX0dldAotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfSGVyZQotICAgICAgICAgICAgICAgUHlUcmFjZUJhY2tfUHJpbnQKLSAgICAgICAgICAgICAgIFB5VHVwbGVfRmluaQotICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtCi0gICAgICAgICAgICAgICBQeVR1cGxlX0dldFNsaWNlCi0gICAgICAgICAgICAgICBQeVR1cGxlX05ldwotICAgICAgICAgICAgICAgUHlUdXBsZV9TZXRJdGVtCi0gICAgICAgICAgICAgICBQeVR1cGxlX1NpemUKLSAgICAgICAgICAgICAgIFB5X0FkZFBlbmRpbmdDYWxsCi0gICAgICAgICAgICAgICBQeV9BdEV4aXQKLSAgICAgICAgICAgICAgIFB5X0J1aWxkVmFsdWUKLSAgICAgICAgICAgICAgIFB5X0NvbXBpbGVTdHJpbmcKLSAgICAgICAgICAgICAgIFB5X0VuZEludGVycHJldGVyCi0gICAgICAgICAgICAgICBQeV9FeGl0Ci0gICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yCi0gICAgICAgICAgICAgICBQeV9GZElzSW50ZXJhY3RpdmUKLSAgICAgICAgICAgICAgIFB5X0ZpbmFsaXplCi0gICAgICAgICAgICAgICBQeV9GaW5kTWV0aG9kCi0gICAgICAgICAgICAgICBQeV9GaW5kTWV0aG9kSW5DaGFpbgotICAgICAgICAgICAgICAgUHlfRmx1c2hMaW5lCi0gICAgICAgICAgICAgICBQeV9GcmVlCi0gICAgICAgICAgICAgICBQeV9HZXRBcmdjQXJndgotICAgICAgICAgICAgICAgUHlfR2V0QnVpbGRJbmZvCi0gICAgICAgICAgICAgICBQeV9HZXRDb21waWxlcgotICAgICAgICAgICAgICAgUHlfR2V0Q29weXJpZ2h0Ci0gICAgICAgICAgICAgICBQeV9HZXRFeGVjUHJlZml4Ci0gICAgICAgICAgICAgICBQeV9HZXRQYXRoCi0gICAgICAgICAgICAgICBQeV9HZXRQbGF0Zm9ybQotICAgICAgICAgICAgICAgUHlfR2V0UHJlZml4Ci0gICAgICAgICAgICAgICBQeV9HZXRQcm9ncmFtRnVsbFBhdGgKLSAgICAgICAgICAgICAgIFB5X0dldFByb2dyYW1OYW1lCi0gICAgICAgICAgICAgICBQeV9HZXRQeXRob25Ib21lCi0gICAgICAgICAgICAgICBQeV9HZXRWZXJzaW9uCi0gICAgICAgICAgICAgICBQeV9Jbml0TW9kdWxlNAotICAgICAgICAgICAgICAgUHlfSW5pdGlhbGl6ZQotICAgICAgICAgICAgICAgUHlfSXNJbml0aWFsaXplZAotICAgICAgICAgICAgICAgUHlfTWFpbgotICAgICAgICAgICAgICAgUHlfTWFrZVBlbmRpbmdDYWxscwotICAgICAgICAgICAgICAgUHlfTWFsbG9jCi0gICAgICAgICAgICAgICBQeV9OZXdJbnRlcnByZXRlcgotICAgICAgICAgICAgICAgUHlfUmVhbGxvYwotICAgICAgICAgICAgICAgUHlfUmVwckVudGVyCi0gICAgICAgICAgICAgICBQeV9SZXByTGVhdmUKLSAgICAgICAgICAgICAgIFB5X1NldFByb2dyYW1OYW1lCi0gICAgICAgICAgICAgICBQeV9TZXRQeXRob25Ib21lCi0gICAgICAgICAgICAgICBQeV9WYUJ1aWxkVmFsdWUKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fRmluaV8xCi0gICAgICAgICAgICAgICBfUHlCdWlsdGluX0ZpbmlfMgotICAgICAgICAgICAgICAgX1B5QnVpbHRpbl9Jbml0XzEKLSAgICAgICAgICAgICAgIF9QeUJ1aWx0aW5fSW5pdF8yCi0gICAgICAgICAgICAgICBfUHlJbXBvcnRfRmluZEV4dGVuc2lvbgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0ZpbmkKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9GaXh1cEV4dGVuc2lvbgotICAgICAgICAgICAgICAgX1B5SW1wb3J0X0luaXQKLSAgICAgICAgICAgICAgIF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZQotICAgICAgICAgICAgICAgX1B5TG9uZ19OZXcKLSAgICAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcgotICAgICAgICAgICAgICAgX1B5T2JqZWN0X05ldwotICAgICAgICAgICAgICAgX1B5T2JqZWN0X05ld1ZhcgotICAgICAgICAgICAgICAgX1B5U3RyaW5nX1Jlc2l6ZQotICAgICAgICAgICAgICAgX1B5U3lzX0luaXQKLSAgICAgICAgICAgICAgIF9QeVR1cGxlX1Jlc2l6ZQotICAgICAgICAgICAgICAgX1B5X01ENUZpbmFsCi0gICAgICAgICAgICAgICBfUHlfTUQ1SW5pdAotICAgICAgICAgICAgICAgX1B5X01ENVVwZGF0ZQotOyAgICAgICAgICAgICAgIF9QeV9hZGRiaXQKLSAgICAgICAgICAgICAgIF9QeV9jX2RpZmYKLSAgICAgICAgICAgICAgIF9QeV9jX25lZwotICAgICAgICAgICAgICAgX1B5X2NfcG93Ci0gICAgICAgICAgICAgICBfUHlfY19wcm9kCi0gICAgICAgICAgICAgICBfUHlfY19xdW90Ci0gICAgICAgICAgICAgICBfUHlfY19zdW0KLTsgICAgICAgICAgICAgICBfUHlfZGVsYml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X21lcmdlYml0c2V0Ci07ICAgICAgICAgICAgICAgX1B5X21ldGFfZ3JhbW1hcgotOyAgICAgICAgICAgICAgIF9QeV9uZXdiaXRzZXQKLTsgICAgICAgICAgICAgICBfUHlfc2FtZWJpdHNldAotICAgICAgICAgICAgICAgUHlCdWZmZXJfVHlwZQotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbU9iamVjdAotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbU1lbW9yeQotICAgICAgICAgICAgICAgUHlCdWZmZXJfRnJvbVJlYWRXcml0ZU1lbW9yeQotICAgICAgICAgICAgICAgUHlCdWZmZXJfTmV3Ci0KZGlmZiAtLWdpdCBhL1BDL29zMnZhY3BwL3JlYWRtZS50eHQgYi9QQy9vczJ2YWNwcC9yZWFkbWUudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYzU4NjA0Li4wMDAwMDAwCi0tLSBhL1BDL29zMnZhY3BwL3JlYWRtZS50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotSUJNIFZpc3VhbEFnZSBDL0MrKyBmb3IgT1MvMgotPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1UbyBidWlsZCBQeXRob24gZm9yIE9TLzIsIGNoYW5nZSBpbnRvIC4vb3MydmFjcHAgYW5kIGlzc3VlIGFuICdOTUFLRScKLWNvbW1hbmQuICBUaGlzIHdpbGwgYnVpbGQgYSBQWVRIT04xNS5ETEwgY29udGFpbmluZyB0aGUgc2V0IG9mIFB5dGhvbgotbW9kdWxlcyBsaXN0ZWQgaW4gY29uZmlnLmMgYW5kIGEgc21hbGwgUFlUSE9OLkVYRSB0byBzdGFydCB0aGUKLWludGVycHJldGVyLgotCi1CeSBjaGFuZ2luZyB0aGUgQyBjb21waWxlciBmbGFnIC9HZC0gaW4gdGhlIG1ha2VmaWxlIHRvIC9HZCssIHlvdSBjYW4KLXJlZHVjZSB0aGUgc2l6ZSBvZiB0aGVzZSBieSBjYXVzaW5nIFB5dGhvbiB0byBkeW5hbWljYWxseSBsaW5rIHRvIHRoZQotQyBydW50aW1lIERMTHMgaW5zdGVhZCBvZiBpbmNsdWRpbmcgdGhlaXIgYnVsayBpbiB5b3VyIGJpbmFyaWVzLiAKLUhvd2V2ZXIsIHRoaXMgbWVhbnMgdGhhdCBhbnkgc3lzdGVtIG9uIHdoaWNoIHlvdSBydW4gUHl0aG9uIG11c3QgaGF2ZQotdGhlIFZBQysrIGNvbXBpbGVyIGluc3RhbGxlZCBpbiBvcmRlciB0byBoYXZlIHRob3NlIERMTHMgYXZhaWxhYmxlLgotCi1EdXJpbmcgdGhlIGJ1aWxkIHByb2Nlc3MgeW91IG1heSBzZWUgYSBjb3VwbGUgb2YgaGFybWxlc3Mgd2FybmluZ3M6Ci0KLSAgRnJvbSB0aGUgQyBDb21waWxlciwgIk5vIGZ1bmN0aW9uIHByb3RvdHlwZSBnaXZlbiBmb3IgWFhYIiwgd2hpY2gKLSAgY29tZXMgZnJvbSB0aGUgdXNlIG9mIEsmUiBwYXJhbWV0ZXJzIHdpdGhpbiBQeXRob24gZm9yIHBvcnRhYmlsaXR5LgotCi0gIEZyb20gdGhlIElMSUIgbGlicmFyaWFuLCAiTW9kdWxlIE5vdCBGb3VuZCAoWFhYKSIsIHdoaWNoIGNvbWVzCi0gIGZyb20gaXRzIGF0dGVtcHQgdG8gcGVyZm9ybSB0aGUgKC0rKSBvcGVyYXRpb24sIHdoaWNoIHJlbW92ZXMgYW5kCi0gIHRoZW4gYWRkcyBhIC5PQkogdG8gdGhlIGxpYnJhcnkuICBUaGUgZmlyc3QgdGltZSBhIGJ1aWxkIGlzIGRvbmUsCi0gIGl0IG9idmlvdXNseSBjYW5ub3QgcmVtb3ZlIHdoYXQgaXMgbm90IHlldCBidWlsdC4KLQotVGhpcyBidWlsZCBpbmNsdWRlcyBzdXBwb3J0IGZvciBtb3N0IFB5dGhvbiBmdW5jdGlvbmFsaXR5IGFzIHdlbGwgYXMKLVRDUC9JUCBzb2NrZXRzLiAgSXQgb21pdHMgdGhlIFBvc2l4IGFiaWxpdHkgdG8gJ2ZvcmsnIGEgcHJvY2VzcyBidXQKLXN1cHBvcnRzIHRocmVhZHMgdXNpbmcgT1MvMiBuYXRpdmUgY2FwYWJpbGl0aWVzLiAgSSBoYXZlIHRyaWVkIHRvCi1zdXBwb3J0IGV2ZXJ5dGhpbmcgcG9zc2libGUgYnV0IGhlcmUgYXJlIGEgZmV3IHVzYWdlIG5vdGVzLgotCi0KLS0tIG9zLnBvcGVuKCkgVXNhZ2UgV2FybmluZ3MKLQotV2l0aCByZXNwZWN0IHRvIG15IGltcGxlbWVudGF0aW9uIG9mIHBvcGVuKCkgdW5kZXIgT1MvMjoKLQotICAgIGltcG9ydCBvcwotCi0gICAgZmQgPSBvcy5wb3BlbigicGt6aXAuZXhlIC1AIGp1bmsuemlwIiwgJ3diJykKLSAgICBmZC53cml0ZSgiZmlsZTEudHh0XG4iKQotICAgIGZkLndyaXRlKCJmaWxlMi50eHRcbiIpCi0gICAgZmQud3JpdGUoImZpbGUzLnR4dFxuIikKLSAgICBmZC53cml0ZSgiXHgxYSIpICAjIFNob3VsZCBOb3QgQmUgTmVjZXNzYXJ5IEJ1dCBJcwotICAgIGZkLmNsb3NlKCkKLQotVGhlcmUgaXMgYSBidWcsIGVpdGhlciBpbiB0aGUgVkFDKysgY29tcGlsZXIgb3IgT1MvMiBpdHNlbGYsIHdoZXJlIHRoZQotc2ltcGxlIGNsb3N1cmUgb2YgdGhlIHdyaXRlLXNpZGUgb2YgYSBwaXBlIC10by0gYSBwcm9jZXNzIGRvZXMgbm90Ci1zZW5kIGFuIEVPRiB0byB0aGF0IHByb2Nlc3MuICBJIGZpbmQgSSBtdXN0IGV4cGxpY2l0bHkgd3JpdGUgYQotY29udHJvbC1aIChFT0YpIGJlZm9yZSBjbG9zaW5nIHRoZSBwaXBlLiAgVGhpcyBpcyBub3QgYSBwcm9ibGVtIHdoZW4KLXVzaW5nIHBvcGVuKCkgaW4gcmVhZCBtb2RlLgotCi1PbmUgb3RoZXIgc2xpZ2h0IGRpZmZlcmVuY2Ugd2l0aCBteSBwb3BlbigpIGlzIHRoYXQgSSByZXR1cm4gTm9uZQotZnJvbSB0aGUgY2xvc2UoKSwgaW5zdGVhZCBvZiB0aGUgVW5peCBjb252ZW50aW9uIG9mIHRoZSByZXR1cm4gY29kZQotb2YgdGhlIHNwYXduZWQgcHJvZ3JhbS4gIEkgY291bGQgZmluZCBubyBlYXN5IHdheSB0byBkbyB0aGlzIHVuZGVyCi1PUy8yLgotCi0KLS0tIEJFR0lOTElCUEFUSC9FTkRMSUJQQVRICi0KLVdpdGggcmVzcGVjdCB0byBlbnZpcm9ubWVudCB2YXJpYWJsZXMsIHRoaXMgT1MvMiBwb3J0IHN1cHBvcnRzIHRoZQotc3BlY2lhbC10by1PUy8yIG1hZ2ljIG5hbWVzIG9mICdCRUdJTkxJQlBBVEgnIGFuZCAnRU5ETElCUEFUSCcgdG8KLWNvbnRyb2wgd2hlcmUgdG8gbG9hZCBjb252ZW50aW9uYWwgRExMcyBmcm9tLiAgVGhvc2UgbmFtZXMgYXJlCi1pbnRlcmNlcHRlZCBhbmQgY29udmVydGVkIHRvIGNhbGxzIG9uIHRoZSBPUy8yIGtlcm5lbCBBUElzIGFuZAotYXJlIGluaGVyaXRlZCBieSBjaGlsZCBwcm9jZXNzZXMsIHdoZXRoZXIgUHl0aG9uLWJhc2VkIG9yIG5vdC4KLQotQSBmZXcgbmV3IGF0dHJpYnV0ZXMgaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBvcyBtb2R1bGU6Ci0KLSAgICBvcy5tZW1pbnN0YWxsZWQgICMgQ291bnQgb2YgQnl0ZXMgb2YgUkFNIEluc3RhbGxlZCBvbiBNYWNoaW5lCi0gICAgb3MubWVta2VybmVsICAgICAjIENvdW50IG9mIEJ5dGVzIG9mIFJBTSBSZXNlcnZlZCAoTm9uLVN3YXBwYWJsZSkKLSAgICBvcy5tZW12aXJ0dWFsICAgICMgQ291bnQgb2YgQnl0ZXMgb2YgVmlydHVhbCBSQU0gUG9zc2libGUKLSAgICBvcy50aW1lc2xpY2UgICAgICMgRHVyYXRpb24gb2YgU2NoZWR1bGVyIFRpbWVzbGljZSwgaW4gTWlsbGlzZWNvbmRzCi0gICAgb3MubWF4cGF0aGxlbiAgICAjIE1heGltdW0gTGVuZ3RoIG9mIGEgUGF0aCBTcGVjaWZpY2F0aW9uLCBpbiBjaGFycwotICAgIG9zLm1heG5hbWVsZW4gICAgIyBNYXhpbXVtIExlbmd0aCBvZiBhIFNpbmdsZSBEaXIvRmlsZSBOYW1lLCBpbiBjaGFycwotICAgIG9zLnZlcnNpb24gICAgICAgIyBWZXJzaW9uIG9mIE9TLzIgQmVpbmcgUnVuIGUuZy4gIjQuMDAiCi0gICAgb3MucmV2aXNpb24gICAgICAjIFJldmlzaW9uIG9mIE9TLzIgQmVpbmcgUnVuICh1c3VhbGx5IHplcm8pCi0gICAgb3MuYm9vdGRyaXZlICAgICAjIERyaXZlIHRoYXQgU3lzdGVtIEJvb3RlZCBGcm9tIGUuZy4gIkM6IgotICAgICAgICAgICAgICAgICAgICAgIyAodXNlZnVsIHRvIGZpbmQgdGhlIENPTkZJRy5TWVMgdXNlZCB0byBib290IHdpdGgpCi0KLQotLS0gVXNpbmcgUHl0aG9uIGFzIHRoZSBEZWZhdWx0IE9TLzIgQmF0Y2ggTGFuZ3VhZ2UKLQotTm90ZSB0aGF0IE9TLzIgc3VwcG9ydHMgdGhlIFVuaXggdGVjaG5pcXVlIG9mIHB1dHRpbmcgdGhlIHNwZWNpYWwKLWNvbW1lbnQgbGluZSBhdCB0aGUgdGltZSBvZiBzY3JpcHRzIGUuZy4gIiMhL3Vzci9iaW4vcHl0aG9uIiBpbgotYSBkaWZmZXJlbnQgc3ludGFjdGljIGZvcm0uICBUbyBkbyB0aGlzLCBwdXQgeW91ciBzY3JpcHQgaW50byBhIGZpbGUKLXdpdGggYSAuQ01EIGV4dGVuc2lvbiBhbmQgYWRkZWQgJ2V4dHByb2MnIHRvIHRoZSB0b3AgYXMgZm9sbG93czoKLQotICAgIGV4dHByb2MgQzpcUHl0aG9uXFB5dGhvbi5leGUgLXgKLSAgICBpbXBvcnQgb3MKLSAgICBwcmludCAiSGVsbG8gZnJvbSBQeXRob24iCi0KLVRoZSAnLXgnIG9wdGlvbiB0ZWxscyBQeXRob24gdG8gc2tpcCB0aGUgZmlyc3QgbGluZSBvZiB0aGUgZmlsZQotd2hpbGUgcHJvY2Vzc2luZyB0aGUgcmVzdCBhcyBub3JtYWwgUHl0aG9uIHNvdXJjZS4KLQotCi0tLSBTdWdnZXN0ZWQgRW52aXJvbm1lbnQgVmFyaWFibGUgU2V0dXAKLQotV2l0aCByZXNwZWN0IHRvIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIFB5dGhvbiwgSSB1c2UgdGhlCi1mb2xsb3dpbmcgc2V0dXA6Ci0KLSAgICBTZXQgUFlUSE9OSE9NRT1FOlxUYXVcUHJvamVjdHNcUHl0aG9uO0Q6XERMTHMKLSAgICBTZXQgUFlUSE9OUEFUSD0uO0U6XFRhdVxQcm9qZWN0c1xQeXRob25cTGliOyBcCi0gICAgICAgICAgICAgICAgICAgICBFOlxUYXVcUHJvamVjdHNcUHl0aG9uXExpYlxwbGF0LXdpbgotCi1UaGUgRVhFQ19QUkVGSVggKG9wdGlvbmFsIHNlY29uZCBwYXRoc3BlYyBvbiBQWVRIT05IT01FKSBpcyB3aGVyZQoteW91IHB1dCBhbnkgUHl0aG9uIGV4dGVuc2lvbiBETExzIHlvdSBtYXkgY3JlYXRlL29idGFpbi4gIFRoZXJlCi1hcmUgbm9uZSBwcm92aWRlZCB3aXRoIHRoaXMgcmVsZWFzZS4KLQotCi0tLSBDb250YWN0IEluZm8KLQotSmVmZiBSdXNoIGlzIG5vIGxvbmdlciBzdXBwb3J0aW5nIHRoZSBWQUNQUCBwb3J0IDotKAotCi1JIGRvbid0IGhhdmUgdGhlIFZBQ1BQIGNvbXBpbGVyLCBzbyBjYW4ndCByZWxpYWJseSBtYWludGFpbiB0aGlzIHBvcnQuIAotCi1BbnlvbmUgd2l0aCBWQUNQUCB3aG8gY2FuIGNvbnRyaWJ1dGUgcGF0Y2hlcyB0byBrZWVwIHRoaXMgcG9ydCBidWlsZGFibGUKLXNob3VsZCB1cGxvYWQgdGhlbSB0byB0aGUgUHl0aG9uIFBhdGNoIE1hbmFnZXIgYXQgU291cmNlZm9yZ2UgYW5kIAotYXNzaWduIHRoZW0gdG8gbWUgZm9yIHJldmlldy9jaGVja2luLgotCi1BbmRyZXcgTWFjSW50eXJlCi1haW1hY2ludHlyZSBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKLUF1Z3VzdCAxOCwgMjAwMi4KZGlmZiAtLWdpdCBhL1BDL3B5Y29uZmlnLmggYi9QQy9weWNvbmZpZy5oCmluZGV4IDBiOTY1MzkuLmUxYzE5ODggMTAwNjQ0Ci0tLSBhL1BDL3B5Y29uZmlnLmgKKysrIGIvUEMvcHljb25maWcuaApAQCAtNzQsOCArNzQsNiBAQAogI2RlZmluZSBET05UX0hBVkVfU0lHX1BBVVNFCiAjZGVmaW5lIExPTkdfQklUCTMyCiAjZGVmaW5lIFdPUkRfQklUIDMyCi0jZGVmaW5lIFBSRUZJWCAiIgotI2RlZmluZSBFWEVDX1BSRUZJWCAiIgogCiAjZGVmaW5lIE1TX1dJTjMyIC8qIG9ubHkgc3VwcG9ydCB3aW4zMiBhbmQgZ3JlYXRlci4gKi8KICNkZWZpbmUgTVNfV0lORE9XUwpAQCAtMTU2LDE1ICsxNTQsOSBAQAogI2VuZGlmIC8qIE1TX1dJTjY0ICovCiAKIC8qIHNldCB0aGUgdmVyc2lvbiBtYWNyb3MgZm9yIHRoZSB3aW5kb3dzIGhlYWRlcnMgKi8KLSNpZmRlZiBNU19XSU5YNjQKLS8qIDY0IGJpdCBvbmx5IHJ1bnMgb24gWFAgb3IgZ3JlYXRlciAqLworLyogUHl0aG9uIDMuNCsgcmVxdWlyZXMgV2luZG93cyBYUCBvciBncmVhdGVyICovCiAjZGVmaW5lIFB5X1dJTlZFUiAweDA1MDEgLyogX1dJTjMyX1dJTk5UX1dJTlhQICovCiAjZGVmaW5lIFB5X05URERJIE5URERJX1dJTlhQCi0jZWxzZQotLyogUHl0aG9uIDIuNisgcmVxdWlyZXMgV2luZG93cyAyMDAwIG9yIGdyZWF0ZXIgKi8KLSNkZWZpbmUgUHlfV0lOVkVSIDB4MDUwMCAvKiBfV0lOMzJfV0lOTlRfV0lOMksgKi8KLSNkZWZpbmUgUHlfTlREREkgTlRERElfV0lOMktTUDQKLSNlbmRpZgogCiAvKiBXZSBvbmx5IHNldCB0aGVzZSB2YWx1ZXMgd2hlbiBidWlsZGluZyBQeXRob24gLSB3ZSBkb24ndCB3YW50IHRvIGZvcmNlCiAgICB0aGVzZSB2YWx1ZXMgb24gZXh0ZW5zaW9ucywgYXMgdGhhdCB3aWxsIGFmZmVjdCB0aGUgcHJvdG90eXBlcyBhbmQKQEAgLTE5OSw4ICsxOTEsMTAgQEAKICNkZWZpbmUgSEFWRV9TU0laRV9UIDEKIAogI2lmIGRlZmluZWQoTVNfV0lOMzIpICYmICFkZWZpbmVkKE1TX1dJTjY0KQotI2lmZGVmIF9NX0lYODYKKyNpZiBkZWZpbmVkKF9NX0lYODYpCiAjZGVmaW5lIENPTVBJTEVSIF9QeV9QQVNURV9WRVJTSU9OKCIzMiBiaXQgKEludGVsKSIpCisjZWxpZiBkZWZpbmVkKF9NX0FSTSkKKyNkZWZpbmUgQ09NUElMRVIgX1B5X1BBU1RFX1ZFUlNJT04oIjMyIGJpdCAoQVJNKSIpCiAjZWxzZQogI2RlZmluZSBDT01QSUxFUiBfUHlfUEFTVEVfVkVSU0lPTigiMzIgYml0IChVbmtub3duKSIpCiAjZW5kaWYKQEAgLTMyOCwxMSArMzIyLDExIEBACiAJCQl0aGVpciBNYWtlZmlsZSAob3RoZXIgY29tcGlsZXJzIGFyZSBnZW5lcmFsbHkKIAkJCXRha2VuIGNhcmUgb2YgYnkgZGlzdHV0aWxzLikgKi8KICMJCQlpZiBkZWZpbmVkKF9ERUJVRykKLSMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zM19kLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzRfZC5saWIiKQogIwkJCWVsaWYgZGVmaW5lZChQeV9MSU1JVEVEX0FQSSkKICMJCQkJcHJhZ21hIGNvbW1lbnQobGliLCJweXRob24zLmxpYiIpCiAjCQkJZWxzZQotIwkJCQlwcmFnbWEgY29tbWVudChsaWIsInB5dGhvbjMzLmxpYiIpCisjCQkJCXByYWdtYSBjb21tZW50KGxpYiwicHl0aG9uMzQubGliIikKICMJCQllbmRpZiAvKiBfREVCVUcgKi8KICMJCWVuZGlmIC8qIF9NU0NfVkVSICovCiAjCWVuZGlmIC8qIFB5X0JVSUxEX0NPUkUgKi8KQEAgLTM5Niw3ICszOTAsNyBAQAogI2Vsc2UKIC8qIFZDNiwgVlMgMjAwMiBhbmQgZVZDNCBkb24ndCBzdXBwb3J0IHRoZSBDOTkgTEwgc3VmZml4IGZvciA2NC1iaXQgaW50ZWdlciBsaXRlcmFscyAqLwogI2RlZmluZSBQeV9MTCh4KSB4IyNJNjQKLSNlbmRpZiAgLyogX01TQ19WRVIgPiAxMjAwICAqLworI2VuZGlmICAvKiBfTVNDX1ZFUiA+IDEzMDAgICovCiAjZW5kaWYgIC8qIF9NU0NfVkVSICovCiAKICNlbmRpZgpAQCAtNDQyLDYgKzQzNiwxMSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjb3B5c2lnbicgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfQ09QWVNJR04gMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJvdW5kJyBmdW5jdGlvbi4gKi8KKyNpZiBfTVNDX1ZFUiA+PSAxODAwCisjZGVmaW5lIEhBVkVfUk9VTkQgMQorI2VuZGlmCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNpbmYnIG1hY3JvLiAqLwogI2RlZmluZSBIQVZFX0RFQ0xfSVNJTkYgMQogCkBAIC03MzEsNiArNzMwLDkgQEAKIC8qIFRoZSBzaXplIG9mIGB3Y2hhcl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfV0NIQVJfVCAyCiAKKy8qIFRoZSBzaXplIG9mIGBwaWRfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX1BJRF9UIFNJWkVPRl9JTlQKKwogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBkbCBsaWJyYXJ5ICgtbGRsKS4gICovCiAvKiAjdW5kZWYgSEFWRV9MSUJETCAqLwogCmRpZmYgLS1naXQgYS9QQy9weXRob24ubWsgYi9QQy9weXRob24ubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE3NjUxMDYuLjAwMDAwMDAKLS0tIGEvUEMvcHl0aG9uLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCwwIEBACi1wcm9qZWN0IDogbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfb3MyXHB5dGhfb3MyLmV4ZSBuOlxweXRob25ccHl0aG9uLTEuJg0KLTUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLmV4ZSAuU1lNQk9MSUMNCi0NCi0haW5jbHVkZSBuOlxweXRob25ccHl0aG9uLTEuNS4xXHBjXHdhdF9vczJccHl0aF9vczIubWsxDQotIWluY2x1ZGUgbjpccHl0aG9uXHB5dGhvbi0xLjUuMVxwY1x3YXRfZG9zXHB5dGhfZG9zLm1rMQ0KZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMuZGVmIGIvUEMvcHl0aG9uMy5kZWYKaW5kZXggOTY2ZTZjOS4uMzdlNDU0YiAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMy5kZWYKKysrIGIvUEMvcHl0aG9uMy5kZWYKQEAgLTEsNjk5ICsxLDcwMSBAQAotOyBXaGVuIGNoYW5naW5nIHRoaXMgZmlsZSwgcnVuIHB5dGhvbjMzZ2VuLnB5Cis7IFdoZW4gY2hhbmdpbmcgdGhpcyBmaWxlLCBydW4gcHl0aG9uMzRnZW4ucHkKIExJQlJBUlkJInB5dGhvbjMiCiBFWFBPUlRTCi0gIFB5QXJnX1BhcnNlPXB5dGhvbjMzLlB5QXJnX1BhcnNlCi0gIFB5QXJnX1BhcnNlVHVwbGU9cHl0aG9uMzMuUHlBcmdfUGFyc2VUdXBsZQotICBQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzMuUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzCi0gIFB5QXJnX1VucGFja1R1cGxlPXB5dGhvbjMzLlB5QXJnX1VucGFja1R1cGxlCi0gIFB5QXJnX1ZhUGFyc2U9cHl0aG9uMzMuUHlBcmdfVmFQYXJzZQotICBQeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkcz1weXRob24zMy5QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3JkcwotICBQeUFyZ19WYWxpZGF0ZUtleXdvcmRBcmd1bWVudHM9cHl0aG9uMzMuUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzCi0gIFB5QmFzZU9iamVjdF9UeXBlPXB5dGhvbjMzLlB5QmFzZU9iamVjdF9UeXBlIERBVEEKLSAgUHlCb29sX0Zyb21Mb25nPXB5dGhvbjMzLlB5Qm9vbF9Gcm9tTG9uZwotICBQeUJvb2xfVHlwZT1weXRob24zMy5QeUJvb2xfVHlwZSBEQVRBCi0gIFB5Qnl0ZUFycmF5SXRlcl9UeXBlPXB5dGhvbjMzLlB5Qnl0ZUFycmF5SXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlQXJyYXlfQXNTdHJpbmc9cHl0aG9uMzMuUHlCeXRlQXJyYXlfQXNTdHJpbmcKLSAgUHlCeXRlQXJyYXlfQ29uY2F0PXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0NvbmNhdAotICBQeUJ5dGVBcnJheV9Gcm9tT2JqZWN0PXB5dGhvbjMzLlB5Qnl0ZUFycmF5X0Zyb21PYmplY3QKLSAgUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemU9cHl0aG9uMzMuUHlCeXRlQXJyYXlfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlQXJyYXlfUmVzaXplPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1Jlc2l6ZQotICBQeUJ5dGVBcnJheV9TaXplPXB5dGhvbjMzLlB5Qnl0ZUFycmF5X1NpemUKLSAgUHlCeXRlQXJyYXlfVHlwZT1weXRob24zMy5QeUJ5dGVBcnJheV9UeXBlIERBVEEKLSAgUHlCeXRlc0l0ZXJfVHlwZT1weXRob24zMy5QeUJ5dGVzSXRlcl9UeXBlIERBVEEKLSAgUHlCeXRlc19Bc1N0cmluZz1weXRob24zMy5QeUJ5dGVzX0FzU3RyaW5nCi0gIFB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5Qnl0ZXNfQXNTdHJpbmdBbmRTaXplCi0gIFB5Qnl0ZXNfQ29uY2F0PXB5dGhvbjMzLlB5Qnl0ZXNfQ29uY2F0Ci0gIFB5Qnl0ZXNfQ29uY2F0QW5kRGVsPXB5dGhvbjMzLlB5Qnl0ZXNfQ29uY2F0QW5kRGVsCi0gIFB5Qnl0ZXNfRGVjb2RlRXNjYXBlPXB5dGhvbjMzLlB5Qnl0ZXNfRGVjb2RlRXNjYXBlCi0gIFB5Qnl0ZXNfRnJvbUZvcm1hdD1weXRob24zMy5QeUJ5dGVzX0Zyb21Gb3JtYXQKLSAgUHlCeXRlc19Gcm9tRm9ybWF0Vj1weXRob24zMy5QeUJ5dGVzX0Zyb21Gb3JtYXRWCi0gIFB5Qnl0ZXNfRnJvbU9iamVjdD1weXRob24zMy5QeUJ5dGVzX0Zyb21PYmplY3QKLSAgUHlCeXRlc19Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbVN0cmluZwotICBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjMzLlB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlCeXRlc19SZXByPXB5dGhvbjMzLlB5Qnl0ZXNfUmVwcgotICBQeUJ5dGVzX1NpemU9cHl0aG9uMzMuUHlCeXRlc19TaXplCi0gIFB5Qnl0ZXNfVHlwZT1weXRob24zMy5QeUJ5dGVzX1R5cGUgREFUQQotICBQeUNGdW5jdGlvbl9DYWxsPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0NhbGwKLSAgUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdD1weXRob24zMy5QeUNGdW5jdGlvbl9DbGVhckZyZWVMaXN0Ci0gIFB5Q0Z1bmN0aW9uX0dldEZsYWdzPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0dldEZsYWdzCi0gIFB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX0dldEZ1bmN0aW9uCi0gIFB5Q0Z1bmN0aW9uX0dldFNlbGY9cHl0aG9uMzMuUHlDRnVuY3Rpb25fR2V0U2VsZgotICBQeUNGdW5jdGlvbl9OZXdFeD1weXRob24zMy5QeUNGdW5jdGlvbl9OZXdFeAotICBQeUNGdW5jdGlvbl9UeXBlPXB5dGhvbjMzLlB5Q0Z1bmN0aW9uX1R5cGUgREFUQQotICBQeUNhbGxJdGVyX05ldz1weXRob24zMy5QeUNhbGxJdGVyX05ldwotICBQeUNhbGxJdGVyX1R5cGU9cHl0aG9uMzMuUHlDYWxsSXRlcl9UeXBlIERBVEEKLSAgUHlDYWxsYWJsZV9DaGVjaz1weXRob24zMy5QeUNhbGxhYmxlX0NoZWNrCi0gIFB5Q2Fwc3VsZV9HZXRDb250ZXh0PXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXRDb250ZXh0Ci0gIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCi0gIFB5Q2Fwc3VsZV9HZXROYW1lPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXROYW1lCi0gIFB5Q2Fwc3VsZV9HZXRQb2ludGVyPXB5dGhvbjMzLlB5Q2Fwc3VsZV9HZXRQb2ludGVyCi0gIFB5Q2Fwc3VsZV9JbXBvcnQ9cHl0aG9uMzMuUHlDYXBzdWxlX0ltcG9ydAotICBQeUNhcHN1bGVfSXNWYWxpZD1weXRob24zMy5QeUNhcHN1bGVfSXNWYWxpZAotICBQeUNhcHN1bGVfTmV3PXB5dGhvbjMzLlB5Q2Fwc3VsZV9OZXcKLSAgUHlDYXBzdWxlX1NldENvbnRleHQ9cHl0aG9uMzMuUHlDYXBzdWxlX1NldENvbnRleHQKLSAgUHlDYXBzdWxlX1NldERlc3RydWN0b3I9cHl0aG9uMzMuUHlDYXBzdWxlX1NldERlc3RydWN0b3IKLSAgUHlDYXBzdWxlX1NldE5hbWU9cHl0aG9uMzMuUHlDYXBzdWxlX1NldE5hbWUKLSAgUHlDYXBzdWxlX1NldFBvaW50ZXI9cHl0aG9uMzMuUHlDYXBzdWxlX1NldFBvaW50ZXIKLSAgUHlDYXBzdWxlX1R5cGU9cHl0aG9uMzMuUHlDYXBzdWxlX1R5cGUgREFUQQotICBQeUNsYXNzTWV0aG9kRGVzY3JfVHlwZT1weXRob24zMy5QeUNsYXNzTWV0aG9kRGVzY3JfVHlwZSBEQVRBCi0gIFB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMKLSAgUHlDb2RlY19EZWNvZGU9cHl0aG9uMzMuUHlDb2RlY19EZWNvZGUKLSAgUHlDb2RlY19EZWNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfRGVjb2RlcgotICBQeUNvZGVjX0VuY29kZT1weXRob24zMy5QeUNvZGVjX0VuY29kZQotICBQeUNvZGVjX0VuY29kZXI9cHl0aG9uMzMuUHlDb2RlY19FbmNvZGVyCi0gIFB5Q29kZWNfSWdub3JlRXJyb3JzPXB5dGhvbjMzLlB5Q29kZWNfSWdub3JlRXJyb3JzCi0gIFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyCi0gIFB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyPXB5dGhvbjMzLlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyCi0gIFB5Q29kZWNfS25vd25FbmNvZGluZz1weXRob24zMy5QeUNvZGVjX0tub3duRW5jb2RpbmcKLSAgUHlDb2RlY19Mb29rdXBFcnJvcj1weXRob24zMy5QeUNvZGVjX0xvb2t1cEVycm9yCi0gIFB5Q29kZWNfUmVnaXN0ZXI9cHl0aG9uMzMuUHlDb2RlY19SZWdpc3RlcgotICBQeUNvZGVjX1JlZ2lzdGVyRXJyb3I9cHl0aG9uMzMuUHlDb2RlY19SZWdpc3RlckVycm9yCi0gIFB5Q29kZWNfUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX1JlcGxhY2VFcnJvcnMKLSAgUHlDb2RlY19TdHJlYW1SZWFkZXI9cHl0aG9uMzMuUHlDb2RlY19TdHJlYW1SZWFkZXIKLSAgUHlDb2RlY19TdHJlYW1Xcml0ZXI9cHl0aG9uMzMuUHlDb2RlY19TdHJlYW1Xcml0ZXIKLSAgUHlDb2RlY19TdHJpY3RFcnJvcnM9cHl0aG9uMzMuUHlDb2RlY19TdHJpY3RFcnJvcnMKLSAgUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycz1weXRob24zMy5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzCi0gIFB5Q29tcGxleF9Gcm9tRG91Ymxlcz1weXRob24zMy5QeUNvbXBsZXhfRnJvbURvdWJsZXMKLSAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZT1weXRob24zMy5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlCi0gIFB5Q29tcGxleF9SZWFsQXNEb3VibGU9cHl0aG9uMzMuUHlDb21wbGV4X1JlYWxBc0RvdWJsZQotICBQeUNvbXBsZXhfVHlwZT1weXRob24zMy5QeUNvbXBsZXhfVHlwZSBEQVRBCi0gIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2Q9cHl0aG9uMzMuUHlEZXNjcl9OZXdDbGFzc01ldGhvZAotICBQeURlc2NyX05ld0dldFNldD1weXRob24zMy5QeURlc2NyX05ld0dldFNldAotICBQeURlc2NyX05ld01lbWJlcj1weXRob24zMy5QeURlc2NyX05ld01lbWJlcgotICBQeURlc2NyX05ld01ldGhvZD1weXRob24zMy5QeURlc2NyX05ld01ldGhvZAotICBQeURpY3RJdGVtc19UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZW1zX1R5cGUgREFUQQotICBQeURpY3RJdGVySXRlbV9UeXBlPXB5dGhvbjMzLlB5RGljdEl0ZXJJdGVtX1R5cGUgREFUQQotICBQeURpY3RJdGVyS2V5X1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlcktleV9UeXBlIERBVEEKLSAgUHlEaWN0SXRlclZhbHVlX1R5cGU9cHl0aG9uMzMuUHlEaWN0SXRlclZhbHVlX1R5cGUgREFUQQotICBQeURpY3RLZXlzX1R5cGU9cHl0aG9uMzMuUHlEaWN0S2V5c19UeXBlIERBVEEKLSAgUHlEaWN0UHJveHlfTmV3PXB5dGhvbjMzLlB5RGljdFByb3h5X05ldwotICBQeURpY3RQcm94eV9UeXBlPXB5dGhvbjMzLlB5RGljdFByb3h5X1R5cGUgREFUQQotICBQeURpY3RWYWx1ZXNfVHlwZT1weXRob24zMy5QeURpY3RWYWx1ZXNfVHlwZSBEQVRBCi0gIFB5RGljdF9DbGVhcj1weXRob24zMy5QeURpY3RfQ2xlYXIKLSAgUHlEaWN0X0NvbnRhaW5zPXB5dGhvbjMzLlB5RGljdF9Db250YWlucwotICBQeURpY3RfQ29weT1weXRob24zMy5QeURpY3RfQ29weQotICBQeURpY3RfRGVsSXRlbT1weXRob24zMy5QeURpY3RfRGVsSXRlbQotICBQeURpY3RfRGVsSXRlbVN0cmluZz1weXRob24zMy5QeURpY3RfRGVsSXRlbVN0cmluZwotICBQeURpY3RfR2V0SXRlbT1weXRob24zMy5QeURpY3RfR2V0SXRlbQotICBQeURpY3RfR2V0SXRlbVN0cmluZz1weXRob24zMy5QeURpY3RfR2V0SXRlbVN0cmluZwotICBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcj1weXRob24zMy5QeURpY3RfR2V0SXRlbVdpdGhFcnJvcgotICBQeURpY3RfSXRlbXM9cHl0aG9uMzMuUHlEaWN0X0l0ZW1zCi0gIFB5RGljdF9LZXlzPXB5dGhvbjMzLlB5RGljdF9LZXlzCi0gIFB5RGljdF9NZXJnZT1weXRob24zMy5QeURpY3RfTWVyZ2UKLSAgUHlEaWN0X01lcmdlRnJvbVNlcTI9cHl0aG9uMzMuUHlEaWN0X01lcmdlRnJvbVNlcTIKLSAgUHlEaWN0X05ldz1weXRob24zMy5QeURpY3RfTmV3Ci0gIFB5RGljdF9OZXh0PXB5dGhvbjMzLlB5RGljdF9OZXh0Ci0gIFB5RGljdF9TZXRJdGVtPXB5dGhvbjMzLlB5RGljdF9TZXRJdGVtCi0gIFB5RGljdF9TZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5RGljdF9TZXRJdGVtU3RyaW5nCi0gIFB5RGljdF9TaXplPXB5dGhvbjMzLlB5RGljdF9TaXplCi0gIFB5RGljdF9UeXBlPXB5dGhvbjMzLlB5RGljdF9UeXBlIERBVEEKLSAgUHlEaWN0X1VwZGF0ZT1weXRob24zMy5QeURpY3RfVXBkYXRlCi0gIFB5RGljdF9WYWx1ZXM9cHl0aG9uMzMuUHlEaWN0X1ZhbHVlcwotICBQeUVsbGlwc2lzX1R5cGU9cHl0aG9uMzMuUHlFbGxpcHNpc19UeXBlIERBVEEKLSAgUHlFbnVtX1R5cGU9cHl0aG9uMzMuUHlFbnVtX1R5cGUgREFUQQotICBQeUVycl9CYWRBcmd1bWVudD1weXRob24zMy5QeUVycl9CYWRBcmd1bWVudAotICBQeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzMuUHlFcnJfQmFkSW50ZXJuYWxDYWxsCi0gIFB5RXJyX0NoZWNrU2lnbmFscz1weXRob24zMy5QeUVycl9DaGVja1NpZ25hbHMKLSAgUHlFcnJfQ2xlYXI9cHl0aG9uMzMuUHlFcnJfQ2xlYXIKLSAgUHlFcnJfRGlzcGxheT1weXRob24zMy5QeUVycl9EaXNwbGF5Ci0gIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzMuUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcwotICBQeUVycl9GZXRjaD1weXRob24zMy5QeUVycl9GZXRjaAotICBQeUVycl9Gb3JtYXQ9cHl0aG9uMzMuUHlFcnJfRm9ybWF0Ci0gIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zMy5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKLSAgUHlFcnJfTmV3RXhjZXB0aW9uPXB5dGhvbjMzLlB5RXJyX05ld0V4Y2VwdGlvbgotICBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jPXB5dGhvbjMzLlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKLSAgUHlFcnJfTm9NZW1vcnk9cHl0aG9uMzMuUHlFcnJfTm9NZW1vcnkKLSAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uPXB5dGhvbjMzLlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgotICBQeUVycl9PY2N1cnJlZD1weXRob24zMy5QeUVycl9PY2N1cnJlZAotICBQeUVycl9QcmludD1weXRob24zMy5QeUVycl9QcmludAotICBQeUVycl9QcmludEV4PXB5dGhvbjMzLlB5RXJyX1ByaW50RXgKLSAgUHlFcnJfUHJvZ3JhbVRleHQ9cHl0aG9uMzMuUHlFcnJfUHJvZ3JhbVRleHQKLSAgUHlFcnJfUmVzdG9yZT1weXRob24zMy5QeUVycl9SZXN0b3JlCi0gIFB5RXJyX1NldEZyb21FcnJubz1weXRob24zMy5QeUVycl9TZXRGcm9tRXJybm8KLSAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lPXB5dGhvbjMzLlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQotICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3Q9cHl0aG9uMzMuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0Ci0gIFB5RXJyX1NldEludGVycnVwdD1weXRob24zMy5QeUVycl9TZXRJbnRlcnJ1cHQKLSAgUHlFcnJfU2V0Tm9uZT1weXRob24zMy5QeUVycl9TZXROb25lCi0gIFB5RXJyX1NldE9iamVjdD1weXRob24zMy5QeUVycl9TZXRPYmplY3QKLSAgUHlFcnJfU2V0U3RyaW5nPXB5dGhvbjMzLlB5RXJyX1NldFN0cmluZwotICBQeUVycl9TeW50YXhMb2NhdGlvbj1weXRob24zMy5QeUVycl9TeW50YXhMb2NhdGlvbgotICBQeUVycl9XYXJuRXg9cHl0aG9uMzMuUHlFcnJfV2FybkV4Ci0gIFB5RXJyX1dhcm5FeHBsaWNpdD1weXRob24zMy5QeUVycl9XYXJuRXhwbGljaXQKLSAgUHlFcnJfV2FybkZvcm1hdD1weXRob24zMy5QeUVycl9XYXJuRm9ybWF0Ci0gIFB5RXJyX1dyaXRlVW5yYWlzYWJsZT1weXRob24zMy5QeUVycl9Xcml0ZVVucmFpc2FibGUKLSAgUHlFdmFsX0FjcXVpcmVMb2NrPXB5dGhvbjMzLlB5RXZhbF9BY3F1aXJlTG9jawotICBQeUV2YWxfQWNxdWlyZVRocmVhZD1weXRob24zMy5QeUV2YWxfQWNxdWlyZVRocmVhZAotICBQeUV2YWxfQ2FsbEZ1bmN0aW9uPXB5dGhvbjMzLlB5RXZhbF9DYWxsRnVuY3Rpb24KLSAgUHlFdmFsX0NhbGxNZXRob2Q9cHl0aG9uMzMuUHlFdmFsX0NhbGxNZXRob2QKLSAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHM9cHl0aG9uMzMuUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKLSAgUHlFdmFsX0V2YWxDb2RlPXB5dGhvbjMzLlB5RXZhbF9FdmFsQ29kZQotICBQeUV2YWxfRXZhbENvZGVFeD1weXRob24zMy5QeUV2YWxfRXZhbENvZGVFeAotICBQeUV2YWxfRXZhbEZyYW1lPXB5dGhvbjMzLlB5RXZhbF9FdmFsRnJhbWUKLSAgUHlFdmFsX0V2YWxGcmFtZUV4PXB5dGhvbjMzLlB5RXZhbF9FdmFsRnJhbWVFeAotICBQeUV2YWxfR2V0QnVpbHRpbnM9cHl0aG9uMzMuUHlFdmFsX0dldEJ1aWx0aW5zCi0gIFB5RXZhbF9HZXRDYWxsU3RhdHM9cHl0aG9uMzMuUHlFdmFsX0dldENhbGxTdGF0cwotICBQeUV2YWxfR2V0RnJhbWU9cHl0aG9uMzMuUHlFdmFsX0dldEZyYW1lCi0gIFB5RXZhbF9HZXRGdW5jRGVzYz1weXRob24zMy5QeUV2YWxfR2V0RnVuY0Rlc2MKLSAgUHlFdmFsX0dldEZ1bmNOYW1lPXB5dGhvbjMzLlB5RXZhbF9HZXRGdW5jTmFtZQotICBQeUV2YWxfR2V0R2xvYmFscz1weXRob24zMy5QeUV2YWxfR2V0R2xvYmFscwotICBQeUV2YWxfR2V0TG9jYWxzPXB5dGhvbjMzLlB5RXZhbF9HZXRMb2NhbHMKLSAgUHlFdmFsX0luaXRUaHJlYWRzPXB5dGhvbjMzLlB5RXZhbF9Jbml0VGhyZWFkcwotICBQeUV2YWxfUmVJbml0VGhyZWFkcz1weXRob24zMy5QeUV2YWxfUmVJbml0VGhyZWFkcwotICBQeUV2YWxfUmVsZWFzZUxvY2s9cHl0aG9uMzMuUHlFdmFsX1JlbGVhc2VMb2NrCi0gIFB5RXZhbF9SZWxlYXNlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9SZWxlYXNlVGhyZWFkCi0gIFB5RXZhbF9SZXN0b3JlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9SZXN0b3JlVGhyZWFkCi0gIFB5RXZhbF9TYXZlVGhyZWFkPXB5dGhvbjMzLlB5RXZhbF9TYXZlVGhyZWFkCi0gIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQ9cHl0aG9uMzMuUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZAotICBQeUV4Y19Bcml0aG1ldGljRXJyb3I9cHl0aG9uMzMuUHlFeGNfQXJpdGhtZXRpY0Vycm9yIERBVEEKLSAgUHlFeGNfQXNzZXJ0aW9uRXJyb3I9cHl0aG9uMzMuUHlFeGNfQXNzZXJ0aW9uRXJyb3IgREFUQQotICBQeUV4Y19BdHRyaWJ1dGVFcnJvcj1weXRob24zMy5QeUV4Y19BdHRyaWJ1dGVFcnJvciBEQVRBCi0gIFB5RXhjX0Jhc2VFeGNlcHRpb249cHl0aG9uMzMuUHlFeGNfQmFzZUV4Y2VwdGlvbiBEQVRBCi0gIFB5RXhjX0J1ZmZlckVycm9yPXB5dGhvbjMzLlB5RXhjX0J1ZmZlckVycm9yIERBVEEKLSAgUHlFeGNfQnl0ZXNXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0J5dGVzV2FybmluZyBEQVRBCi0gIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMy5QeUV4Y19EZXByZWNhdGlvbldhcm5pbmcgREFUQQotICBQeUV4Y19FT0ZFcnJvcj1weXRob24zMy5QeUV4Y19FT0ZFcnJvciBEQVRBCi0gIFB5RXhjX0Vudmlyb25tZW50RXJyb3I9cHl0aG9uMzMuUHlFeGNfRW52aXJvbm1lbnRFcnJvciBEQVRBCi0gIFB5RXhjX0V4Y2VwdGlvbj1weXRob24zMy5QeUV4Y19FeGNlcHRpb24gREFUQQotICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3I9cHl0aG9uMzMuUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIERBVEEKLSAgUHlFeGNfRnV0dXJlV2FybmluZz1weXRob24zMy5QeUV4Y19GdXR1cmVXYXJuaW5nIERBVEEKLSAgUHlFeGNfR2VuZXJhdG9yRXhpdD1weXRob24zMy5QeUV4Y19HZW5lcmF0b3JFeGl0IERBVEEKLSAgUHlFeGNfSU9FcnJvcj1weXRob24zMy5QeUV4Y19JT0Vycm9yIERBVEEKLSAgUHlFeGNfSW1wb3J0RXJyb3I9cHl0aG9uMzMuUHlFeGNfSW1wb3J0RXJyb3IgREFUQQotICBQeUV4Y19JbXBvcnRXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX0ltcG9ydFdhcm5pbmcgREFUQQotICBQeUV4Y19JbmRlbnRhdGlvbkVycm9yPXB5dGhvbjMzLlB5RXhjX0luZGVudGF0aW9uRXJyb3IgREFUQQotICBQeUV4Y19JbmRleEVycm9yPXB5dGhvbjMzLlB5RXhjX0luZGV4RXJyb3IgREFUQQotICBQeUV4Y19LZXlFcnJvcj1weXRob24zMy5QeUV4Y19LZXlFcnJvciBEQVRBCi0gIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0PXB5dGhvbjMzLlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IERBVEEKLSAgUHlFeGNfTG9va3VwRXJyb3I9cHl0aG9uMzMuUHlFeGNfTG9va3VwRXJyb3IgREFUQQotICBQeUV4Y19NZW1vcnlFcnJvcj1weXRob24zMy5QeUV4Y19NZW1vcnlFcnJvciBEQVRBCi0gIFB5RXhjX01lbW9yeUVycm9ySW5zdD1weXRob24zMy5QeUV4Y19NZW1vcnlFcnJvckluc3QgREFUQQotICBQeUV4Y19OYW1lRXJyb3I9cHl0aG9uMzMuUHlFeGNfTmFtZUVycm9yIERBVEEKLSAgUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcj1weXRob24zMy5QeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIERBVEEKLSAgUHlFeGNfT1NFcnJvcj1weXRob24zMy5QeUV4Y19PU0Vycm9yIERBVEEKLSAgUHlFeGNfT3ZlcmZsb3dFcnJvcj1weXRob24zMy5QeUV4Y19PdmVyZmxvd0Vycm9yIERBVEEKLSAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zMy5QeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKLSAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0PXB5dGhvbjMzLlB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCBEQVRBCi0gIFB5RXhjX1JlZmVyZW5jZUVycm9yPXB5dGhvbjMzLlB5RXhjX1JlZmVyZW5jZUVycm9yIERBVEEKLSAgUHlFeGNfUnVudGltZUVycm9yPXB5dGhvbjMzLlB5RXhjX1J1bnRpbWVFcnJvciBEQVRBCi0gIFB5RXhjX1J1bnRpbWVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1J1bnRpbWVXYXJuaW5nIERBVEEKLSAgUHlFeGNfU3RvcEl0ZXJhdGlvbj1weXRob24zMy5QeUV4Y19TdG9wSXRlcmF0aW9uIERBVEEKLSAgUHlFeGNfU3ludGF4RXJyb3I9cHl0aG9uMzMuUHlFeGNfU3ludGF4RXJyb3IgREFUQQotICBQeUV4Y19TeW50YXhXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1N5bnRheFdhcm5pbmcgREFUQQotICBQeUV4Y19TeXN0ZW1FcnJvcj1weXRob24zMy5QeUV4Y19TeXN0ZW1FcnJvciBEQVRBCi0gIFB5RXhjX1N5c3RlbUV4aXQ9cHl0aG9uMzMuUHlFeGNfU3lzdGVtRXhpdCBEQVRBCi0gIFB5RXhjX1RhYkVycm9yPXB5dGhvbjMzLlB5RXhjX1RhYkVycm9yIERBVEEKLSAgUHlFeGNfVHlwZUVycm9yPXB5dGhvbjMzLlB5RXhjX1R5cGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yPXB5dGhvbjMzLlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZURlY29kZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcj1weXRob24zMy5QeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IgREFUQQotICBQeUV4Y19Vbmljb2RlRXJyb3I9cHl0aG9uMzMuUHlFeGNfVW5pY29kZUVycm9yIERBVEEKLSAgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciBEQVRBCi0gIFB5RXhjX1VuaWNvZGVXYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1VuaWNvZGVXYXJuaW5nIERBVEEKLSAgUHlFeGNfVXNlcldhcm5pbmc9cHl0aG9uMzMuUHlFeGNfVXNlcldhcm5pbmcgREFUQQotICBQeUV4Y19WYWx1ZUVycm9yPXB5dGhvbjMzLlB5RXhjX1ZhbHVlRXJyb3IgREFUQQotICBQeUV4Y19XYXJuaW5nPXB5dGhvbjMzLlB5RXhjX1dhcm5pbmcgREFUQQotICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcj1weXRob24zMy5QeUV4Y19aZXJvRGl2aXNpb25FcnJvciBEQVRBCi0gIFB5RXhjZXB0aW9uX0dldENhdXNlPXB5dGhvbjMzLlB5RXhjZXB0aW9uX0dldENhdXNlCi0gIFB5RXhjZXB0aW9uX0dldENvbnRleHQ9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0Q29udGV4dAotICBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2s9cHl0aG9uMzMuUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCi0gIFB5RXhjZXB0aW9uX1NldENhdXNlPXB5dGhvbjMzLlB5RXhjZXB0aW9uX1NldENhdXNlCi0gIFB5RXhjZXB0aW9uX1NldENvbnRleHQ9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0Q29udGV4dAotICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2s9cHl0aG9uMzMuUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCi0gIFB5RmlsZV9Gcm9tRmQ9cHl0aG9uMzMuUHlGaWxlX0Zyb21GZAotICBQeUZpbGVfR2V0TGluZT1weXRob24zMy5QeUZpbGVfR2V0TGluZQotICBQeUZpbGVfV3JpdGVPYmplY3Q9cHl0aG9uMzMuUHlGaWxlX1dyaXRlT2JqZWN0Ci0gIFB5RmlsZV9Xcml0ZVN0cmluZz1weXRob24zMy5QeUZpbGVfV3JpdGVTdHJpbmcKLSAgUHlGaWx0ZXJfVHlwZT1weXRob24zMy5QeUZpbHRlcl9UeXBlIERBVEEKLSAgUHlGbG9hdF9Bc0RvdWJsZT1weXRob24zMy5QeUZsb2F0X0FzRG91YmxlCi0gIFB5RmxvYXRfRnJvbURvdWJsZT1weXRob24zMy5QeUZsb2F0X0Zyb21Eb3VibGUKLSAgUHlGbG9hdF9Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5RmxvYXRfRnJvbVN0cmluZwotICBQeUZsb2F0X0dldEluZm89cHl0aG9uMzMuUHlGbG9hdF9HZXRJbmZvCi0gIFB5RmxvYXRfR2V0TWF4PXB5dGhvbjMzLlB5RmxvYXRfR2V0TWF4Ci0gIFB5RmxvYXRfR2V0TWluPXB5dGhvbjMzLlB5RmxvYXRfR2V0TWluCi0gIFB5RmxvYXRfVHlwZT1weXRob24zMy5QeUZsb2F0X1R5cGUgREFUQQotICBQeUZyb3plblNldF9OZXc9cHl0aG9uMzMuUHlGcm96ZW5TZXRfTmV3Ci0gIFB5RnJvemVuU2V0X1R5cGU9cHl0aG9uMzMuUHlGcm96ZW5TZXRfVHlwZSBEQVRBCi0gIFB5R0NfQ29sbGVjdD1weXRob24zMy5QeUdDX0NvbGxlY3QKLSAgUHlHSUxTdGF0ZV9FbnN1cmU9cHl0aG9uMzMuUHlHSUxTdGF0ZV9FbnN1cmUKLSAgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGU9cHl0aG9uMzMuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUKLSAgUHlHSUxTdGF0ZV9SZWxlYXNlPXB5dGhvbjMzLlB5R0lMU3RhdGVfUmVsZWFzZQotICBQeUdldFNldERlc2NyX1R5cGU9cHl0aG9uMzMuUHlHZXRTZXREZXNjcl9UeXBlIERBVEEKLSAgUHlJbXBvcnRfQWRkTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0FkZE1vZHVsZQotICBQeUltcG9ydF9BcHBlbmRJbml0dGFiPXB5dGhvbjMzLlB5SW1wb3J0X0FwcGVuZEluaXR0YWIKLSAgUHlJbXBvcnRfQ2xlYW51cD1weXRob24zMy5QeUltcG9ydF9DbGVhbnVwCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCi0gIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAotICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXM9cHl0aG9uMzMuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCi0gIFB5SW1wb3J0X0dldEltcG9ydGVyPXB5dGhvbjMzLlB5SW1wb3J0X0dldEltcG9ydGVyCi0gIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyPXB5dGhvbjMzLlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCi0gIFB5SW1wb3J0X0dldE1hZ2ljVGFnPXB5dGhvbjMzLlB5SW1wb3J0X0dldE1hZ2ljVGFnCi0gIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q9cHl0aG9uMzMuUHlJbXBvcnRfR2V0TW9kdWxlRGljdAotICBQeUltcG9ydF9JbXBvcnQ9cHl0aG9uMzMuUHlJbXBvcnRfSW1wb3J0Ci0gIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZT1weXRob24zMy5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKLSAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZQotICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbD1weXRob24zMy5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAotICBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrPXB5dGhvbjMzLlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKLSAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlPXB5dGhvbjMzLlB5SW1wb3J0X1JlbG9hZE1vZHVsZQotICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXI9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCi0gIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU9cHl0aG9uMzMuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQotICBQeUludGVycHJldGVyU3RhdGVfTmV3PXB5dGhvbjMzLlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKLSAgUHlJdGVyX05leHQ9cHl0aG9uMzMuUHlJdGVyX05leHQKLSAgUHlMaXN0SXRlcl9UeXBlPXB5dGhvbjMzLlB5TGlzdEl0ZXJfVHlwZSBEQVRBCi0gIFB5TGlzdFJldkl0ZXJfVHlwZT1weXRob24zMy5QeUxpc3RSZXZJdGVyX1R5cGUgREFUQQotICBQeUxpc3RfQXBwZW5kPXB5dGhvbjMzLlB5TGlzdF9BcHBlbmQKLSAgUHlMaXN0X0FzVHVwbGU9cHl0aG9uMzMuUHlMaXN0X0FzVHVwbGUKLSAgUHlMaXN0X0dldEl0ZW09cHl0aG9uMzMuUHlMaXN0X0dldEl0ZW0KLSAgUHlMaXN0X0dldFNsaWNlPXB5dGhvbjMzLlB5TGlzdF9HZXRTbGljZQotICBQeUxpc3RfSW5zZXJ0PXB5dGhvbjMzLlB5TGlzdF9JbnNlcnQKLSAgUHlMaXN0X05ldz1weXRob24zMy5QeUxpc3RfTmV3Ci0gIFB5TGlzdF9SZXZlcnNlPXB5dGhvbjMzLlB5TGlzdF9SZXZlcnNlCi0gIFB5TGlzdF9TZXRJdGVtPXB5dGhvbjMzLlB5TGlzdF9TZXRJdGVtCi0gIFB5TGlzdF9TZXRTbGljZT1weXRob24zMy5QeUxpc3RfU2V0U2xpY2UKLSAgUHlMaXN0X1NpemU9cHl0aG9uMzMuUHlMaXN0X1NpemUKLSAgUHlMaXN0X1NvcnQ9cHl0aG9uMzMuUHlMaXN0X1NvcnQKLSAgUHlMaXN0X1R5cGU9cHl0aG9uMzMuUHlMaXN0X1R5cGUgREFUQQotICBQeUxvbmdSYW5nZUl0ZXJfVHlwZT1weXRob24zMy5QeUxvbmdSYW5nZUl0ZXJfVHlwZSBEQVRBCi0gIFB5TG9uZ19Bc0RvdWJsZT1weXRob24zMy5QeUxvbmdfQXNEb3VibGUKLSAgUHlMb25nX0FzTG9uZz1weXRob24zMy5QeUxvbmdfQXNMb25nCi0gIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdz1weXRob24zMy5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKLSAgUHlMb25nX0FzTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0FzTG9uZ0xvbmcKLSAgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdz1weXRob24zMy5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93Ci0gIFB5TG9uZ19Bc1NpemVfdD1weXRob24zMy5QeUxvbmdfQXNTaXplX3QKLSAgUHlMb25nX0FzU3NpemVfdD1weXRob24zMy5QeUxvbmdfQXNTc2l6ZV90Ci0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmcKLSAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZz1weXRob24zMy5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCi0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrPXB5dGhvbjMzLlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCi0gIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2s9cHl0aG9uMzMuUHlMb25nX0FzVW5zaWduZWRMb25nTWFzawotICBQeUxvbmdfQXNWb2lkUHRyPXB5dGhvbjMzLlB5TG9uZ19Bc1ZvaWRQdHIKLSAgUHlMb25nX0Zyb21Eb3VibGU9cHl0aG9uMzMuUHlMb25nX0Zyb21Eb3VibGUKLSAgUHlMb25nX0Zyb21Mb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tTG9uZwotICBQeUxvbmdfRnJvbUxvbmdMb25nPXB5dGhvbjMzLlB5TG9uZ19Gcm9tTG9uZ0xvbmcKLSAgUHlMb25nX0Zyb21TaXplX3Q9cHl0aG9uMzMuUHlMb25nX0Zyb21TaXplX3QKLSAgUHlMb25nX0Zyb21Tc2l6ZV90PXB5dGhvbjMzLlB5TG9uZ19Gcm9tU3NpemVfdAotICBQeUxvbmdfRnJvbVN0cmluZz1weXRob24zMy5QeUxvbmdfRnJvbVN0cmluZwotICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZz1weXRob24zMy5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZwotICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzMuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCi0gIFB5TG9uZ19Gcm9tVm9pZFB0cj1weXRob24zMy5QeUxvbmdfRnJvbVZvaWRQdHIKLSAgUHlMb25nX0dldEluZm89cHl0aG9uMzMuUHlMb25nX0dldEluZm8KLSAgUHlMb25nX1R5cGU9cHl0aG9uMzMuUHlMb25nX1R5cGUgREFUQQotICBQeU1hcF9UeXBlPXB5dGhvbjMzLlB5TWFwX1R5cGUgREFUQQotICBQeU1hcHBpbmdfQ2hlY2s9cHl0aG9uMzMuUHlNYXBwaW5nX0NoZWNrCi0gIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nPXB5dGhvbjMzLlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCi0gIFB5TWFwcGluZ19IYXNLZXk9cHl0aG9uMzMuUHlNYXBwaW5nX0hhc0tleQotICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nPXB5dGhvbjMzLlB5TWFwcGluZ19IYXNLZXlTdHJpbmcKLSAgUHlNYXBwaW5nX0l0ZW1zPXB5dGhvbjMzLlB5TWFwcGluZ19JdGVtcwotICBQeU1hcHBpbmdfS2V5cz1weXRob24zMy5QeU1hcHBpbmdfS2V5cwotICBQeU1hcHBpbmdfTGVuZ3RoPXB5dGhvbjMzLlB5TWFwcGluZ19MZW5ndGgKLSAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKLSAgUHlNYXBwaW5nX1NpemU9cHl0aG9uMzMuUHlNYXBwaW5nX1NpemUKLSAgUHlNYXBwaW5nX1ZhbHVlcz1weXRob24zMy5QeU1hcHBpbmdfVmFsdWVzCi0gIFB5TWVtX0ZyZWU9cHl0aG9uMzMuUHlNZW1fRnJlZQotICBQeU1lbV9NYWxsb2M9cHl0aG9uMzMuUHlNZW1fTWFsbG9jCi0gIFB5TWVtX1JlYWxsb2M9cHl0aG9uMzMuUHlNZW1fUmVhbGxvYwotICBQeU1lbWJlckRlc2NyX1R5cGU9cHl0aG9uMzMuUHlNZW1iZXJEZXNjcl9UeXBlIERBVEEKLSAgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Q9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKLSAgUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXM9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXMKLSAgUHlNZW1vcnlWaWV3X1R5cGU9cHl0aG9uMzMuUHlNZW1vcnlWaWV3X1R5cGUgREFUQQotICBQeU1ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzMuUHlNZXRob2REZXNjcl9UeXBlIERBVEEKLSAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQ9cHl0aG9uMzMuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKLSAgUHlNb2R1bGVfQWRkT2JqZWN0PXB5dGhvbjMzLlB5TW9kdWxlX0FkZE9iamVjdAotICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudD1weXRob24zMy5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAotICBQeU1vZHVsZV9DcmVhdGUyPXB5dGhvbjMzLlB5TW9kdWxlX0NyZWF0ZTIKLSAgUHlNb2R1bGVfR2V0RGVmPXB5dGhvbjMzLlB5TW9kdWxlX0dldERlZgotICBQeU1vZHVsZV9HZXREaWN0PXB5dGhvbjMzLlB5TW9kdWxlX0dldERpY3QKLSAgUHlNb2R1bGVfR2V0RmlsZW5hbWU9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RmlsZW5hbWUKLSAgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3Q9cHl0aG9uMzMuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKLSAgUHlNb2R1bGVfR2V0TmFtZT1weXRob24zMy5QeU1vZHVsZV9HZXROYW1lCi0gIFB5TW9kdWxlX0dldFN0YXRlPXB5dGhvbjMzLlB5TW9kdWxlX0dldFN0YXRlCi0gIFB5TW9kdWxlX05ldz1weXRob24zMy5QeU1vZHVsZV9OZXcKLSAgUHlNb2R1bGVfVHlwZT1weXRob24zMy5QeU1vZHVsZV9UeXBlIERBVEEKLSAgUHlOdWxsSW1wb3J0ZXJfVHlwZT1weXRob24zMy5QeU51bGxJbXBvcnRlcl9UeXBlIERBVEEKLSAgUHlOdW1iZXJfQWJzb2x1dGU9cHl0aG9uMzMuUHlOdW1iZXJfQWJzb2x1dGUKLSAgUHlOdW1iZXJfQWRkPXB5dGhvbjMzLlB5TnVtYmVyX0FkZAotICBQeU51bWJlcl9BbmQ9cHl0aG9uMzMuUHlOdW1iZXJfQW5kCi0gIFB5TnVtYmVyX0FzU3NpemVfdD1weXRob24zMy5QeU51bWJlcl9Bc1NzaXplX3QKLSAgUHlOdW1iZXJfQ2hlY2s9cHl0aG9uMzMuUHlOdW1iZXJfQ2hlY2sKLSAgUHlOdW1iZXJfRGl2bW9kPXB5dGhvbjMzLlB5TnVtYmVyX0Rpdm1vZAotICBQeU51bWJlcl9GbG9hdD1weXRob24zMy5QeU51bWJlcl9GbG9hdAotICBQeU51bWJlcl9GbG9vckRpdmlkZT1weXRob24zMy5QeU51bWJlcl9GbG9vckRpdmlkZQotICBQeU51bWJlcl9JblBsYWNlQWRkPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VBZGQKLSAgUHlOdW1iZXJfSW5QbGFjZUFuZD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlQW5kCi0gIFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUKLSAgUHlOdW1iZXJfSW5QbGFjZUxzaGlmdD1weXRob24zMy5QeU51bWJlcl9JblBsYWNlTHNoaWZ0Ci0gIFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlTXVsdGlwbHkKLSAgUHlOdW1iZXJfSW5QbGFjZU9yPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VPcgotICBQeU51bWJlcl9JblBsYWNlUG93ZXI9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVBvd2VyCi0gIFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXI9cHl0aG9uMzMuUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcgotICBQeU51bWJlcl9JblBsYWNlUnNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VSc2hpZnQKLSAgUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0PXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdAotICBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZT1weXRob24zMy5QeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZQotICBQeU51bWJlcl9JblBsYWNlWG9yPXB5dGhvbjMzLlB5TnVtYmVyX0luUGxhY2VYb3IKLSAgUHlOdW1iZXJfSW5kZXg9cHl0aG9uMzMuUHlOdW1iZXJfSW5kZXgKLSAgUHlOdW1iZXJfSW52ZXJ0PXB5dGhvbjMzLlB5TnVtYmVyX0ludmVydAotICBQeU51bWJlcl9Mb25nPXB5dGhvbjMzLlB5TnVtYmVyX0xvbmcKLSAgUHlOdW1iZXJfTHNoaWZ0PXB5dGhvbjMzLlB5TnVtYmVyX0xzaGlmdAotICBQeU51bWJlcl9NdWx0aXBseT1weXRob24zMy5QeU51bWJlcl9NdWx0aXBseQotICBQeU51bWJlcl9OZWdhdGl2ZT1weXRob24zMy5QeU51bWJlcl9OZWdhdGl2ZQotICBQeU51bWJlcl9Pcj1weXRob24zMy5QeU51bWJlcl9PcgotICBQeU51bWJlcl9Qb3NpdGl2ZT1weXRob24zMy5QeU51bWJlcl9Qb3NpdGl2ZQotICBQeU51bWJlcl9Qb3dlcj1weXRob24zMy5QeU51bWJlcl9Qb3dlcgotICBQeU51bWJlcl9SZW1haW5kZXI9cHl0aG9uMzMuUHlOdW1iZXJfUmVtYWluZGVyCi0gIFB5TnVtYmVyX1JzaGlmdD1weXRob24zMy5QeU51bWJlcl9Sc2hpZnQKLSAgUHlOdW1iZXJfU3VidHJhY3Q9cHl0aG9uMzMuUHlOdW1iZXJfU3VidHJhY3QKLSAgUHlOdW1iZXJfVG9CYXNlPXB5dGhvbjMzLlB5TnVtYmVyX1RvQmFzZQotICBQeU51bWJlcl9UcnVlRGl2aWRlPXB5dGhvbjMzLlB5TnVtYmVyX1RydWVEaXZpZGUKLSAgUHlOdW1iZXJfWG9yPXB5dGhvbjMzLlB5TnVtYmVyX1hvcgotICBQeU9TX0FmdGVyRm9yaz1weXRob24zMy5QeU9TX0FmdGVyRm9yawotICBQeU9TX0luaXRJbnRlcnJ1cHRzPXB5dGhvbjMzLlB5T1NfSW5pdEludGVycnVwdHMKLSAgUHlPU19JbnB1dEhvb2s9cHl0aG9uMzMuUHlPU19JbnB1dEhvb2sgREFUQQotICBQeU9TX0ludGVycnVwdE9jY3VycmVkPXB5dGhvbjMzLlB5T1NfSW50ZXJydXB0T2NjdXJyZWQKLSAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcj1weXRob24zMy5QeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIERBVEEKLSAgUHlPU19kb3VibGVfdG9fc3RyaW5nPXB5dGhvbjMzLlB5T1NfZG91YmxlX3RvX3N0cmluZwotICBQeU9TX2dldHNpZz1weXRob24zMy5QeU9TX2dldHNpZwotICBQeU9TX215c3RyaWNtcD1weXRob24zMy5QeU9TX215c3RyaWNtcAotICBQeU9TX215c3RybmljbXA9cHl0aG9uMzMuUHlPU19teXN0cm5pY21wCi0gIFB5T1Nfc2V0c2lnPXB5dGhvbjMzLlB5T1Nfc2V0c2lnCi0gIFB5T1Nfc25wcmludGY9cHl0aG9uMzMuUHlPU19zbnByaW50ZgotICBQeU9TX3N0cmluZ190b19kb3VibGU9cHl0aG9uMzMuUHlPU19zdHJpbmdfdG9fZG91YmxlCi0gIFB5T1Nfc3RydG9sPXB5dGhvbjMzLlB5T1Nfc3RydG9sCi0gIFB5T1Nfc3RydG91bD1weXRob24zMy5QeU9TX3N0cnRvdWwKLSAgUHlPU192c25wcmludGY9cHl0aG9uMzMuUHlPU192c25wcmludGYKLSAgUHlPYmplY3RfQVNDSUk9cHl0aG9uMzMuUHlPYmplY3RfQVNDSUkKLSAgUHlPYmplY3RfQXNDaGFyQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzQ2hhckJ1ZmZlcgotICBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yPXB5dGhvbjMzLlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IKLSAgUHlPYmplY3RfQXNSZWFkQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzUmVhZEJ1ZmZlcgotICBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIKLSAgUHlPYmplY3RfQnl0ZXM9cHl0aG9uMzMuUHlPYmplY3RfQnl0ZXMKLSAgUHlPYmplY3RfQ2FsbD1weXRob24zMy5QeU9iamVjdF9DYWxsCi0gIFB5T2JqZWN0X0NhbGxGdW5jdGlvbj1weXRob24zMy5QeU9iamVjdF9DYWxsRnVuY3Rpb24KLSAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncz1weXRob24zMy5QeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzCi0gIFB5T2JqZWN0X0NhbGxNZXRob2Q9cHl0aG9uMzMuUHlPYmplY3RfQ2FsbE1ldGhvZAotICBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncz1weXRob24zMy5QeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncwotICBQeU9iamVjdF9DYWxsT2JqZWN0PXB5dGhvbjMzLlB5T2JqZWN0X0NhbGxPYmplY3QKLSAgUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyPXB5dGhvbjMzLlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcgotICBQeU9iamVjdF9DbGVhcldlYWtSZWZzPXB5dGhvbjMzLlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMKLSAgUHlPYmplY3RfRGVsSXRlbT1weXRob24zMy5QeU9iamVjdF9EZWxJdGVtCi0gIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzMuUHlPYmplY3RfRGVsSXRlbVN0cmluZwotICBQeU9iamVjdF9EaXI9cHl0aG9uMzMuUHlPYmplY3RfRGlyCi0gIFB5T2JqZWN0X0Zvcm1hdD1weXRob24zMy5QeU9iamVjdF9Gb3JtYXQKLSAgUHlPYmplY3RfRnJlZT1weXRob24zMy5QeU9iamVjdF9GcmVlCi0gIFB5T2JqZWN0X0dDX0RlbD1weXRob24zMy5QeU9iamVjdF9HQ19EZWwKLSAgUHlPYmplY3RfR0NfVHJhY2s9cHl0aG9uMzMuUHlPYmplY3RfR0NfVHJhY2sKLSAgUHlPYmplY3RfR0NfVW5UcmFjaz1weXRob24zMy5QeU9iamVjdF9HQ19VblRyYWNrCi0gIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyCi0gIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyCi0gIFB5T2JqZWN0X0dldEF0dHI9cHl0aG9uMzMuUHlPYmplY3RfR2V0QXR0cgotICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nPXB5dGhvbjMzLlB5T2JqZWN0X0dldEF0dHJTdHJpbmcKLSAgUHlPYmplY3RfR2V0SXRlbT1weXRob24zMy5QeU9iamVjdF9HZXRJdGVtCi0gIFB5T2JqZWN0X0dldEl0ZXI9cHl0aG9uMzMuUHlPYmplY3RfR2V0SXRlcgotICBQeU9iamVjdF9IYXNBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X0hhc0F0dHIKLSAgUHlPYmplY3RfSGFzQXR0clN0cmluZz1weXRob24zMy5QeU9iamVjdF9IYXNBdHRyU3RyaW5nCi0gIFB5T2JqZWN0X0hhc2g9cHl0aG9uMzMuUHlPYmplY3RfSGFzaAotICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQ9cHl0aG9uMzMuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkCi0gIFB5T2JqZWN0X0luaXQ9cHl0aG9uMzMuUHlPYmplY3RfSW5pdAotICBQeU9iamVjdF9Jbml0VmFyPXB5dGhvbjMzLlB5T2JqZWN0X0luaXRWYXIKLSAgUHlPYmplY3RfSXNJbnN0YW5jZT1weXRob24zMy5QeU9iamVjdF9Jc0luc3RhbmNlCi0gIFB5T2JqZWN0X0lzU3ViY2xhc3M9cHl0aG9uMzMuUHlPYmplY3RfSXNTdWJjbGFzcwotICBQeU9iamVjdF9Jc1RydWU9cHl0aG9uMzMuUHlPYmplY3RfSXNUcnVlCi0gIFB5T2JqZWN0X0xlbmd0aD1weXRob24zMy5QeU9iamVjdF9MZW5ndGgKLSAgUHlPYmplY3RfTWFsbG9jPXB5dGhvbjMzLlB5T2JqZWN0X01hbGxvYwotICBQeU9iamVjdF9Ob3Q9cHl0aG9uMzMuUHlPYmplY3RfTm90Ci0gIFB5T2JqZWN0X1JlYWxsb2M9cHl0aG9uMzMuUHlPYmplY3RfUmVhbGxvYwotICBQeU9iamVjdF9SZXByPXB5dGhvbjMzLlB5T2JqZWN0X1JlcHIKLSAgUHlPYmplY3RfUmljaENvbXBhcmU9cHl0aG9uMzMuUHlPYmplY3RfUmljaENvbXBhcmUKLSAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sPXB5dGhvbjMzLlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbAotICBQeU9iamVjdF9TZWxmSXRlcj1weXRob24zMy5QeU9iamVjdF9TZWxmSXRlcgotICBQeU9iamVjdF9TZXRBdHRyPXB5dGhvbjMzLlB5T2JqZWN0X1NldEF0dHIKLSAgUHlPYmplY3RfU2V0QXR0clN0cmluZz1weXRob24zMy5QeU9iamVjdF9TZXRBdHRyU3RyaW5nCi0gIFB5T2JqZWN0X1NldEl0ZW09cHl0aG9uMzMuUHlPYmplY3RfU2V0SXRlbQotICBQeU9iamVjdF9TaXplPXB5dGhvbjMzLlB5T2JqZWN0X1NpemUKLSAgUHlPYmplY3RfU3RyPXB5dGhvbjMzLlB5T2JqZWN0X1N0cgotICBQeU9iamVjdF9UeXBlPXB5dGhvbjMzLlB5T2JqZWN0X1R5cGUgREFUQQotICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncz1weXRob24zMy5QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncwotICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzPXB5dGhvbjMzLlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MKLSAgUHlQcm9wZXJ0eV9UeXBlPXB5dGhvbjMzLlB5UHJvcGVydHlfVHlwZSBEQVRBCi0gIFB5UmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzMuUHlSYW5nZUl0ZXJfVHlwZSBEQVRBCi0gIFB5UmFuZ2VfVHlwZT1weXRob24zMy5QeVJhbmdlX1R5cGUgREFUQQotICBQeVJldmVyc2VkX1R5cGU9cHl0aG9uMzMuUHlSZXZlcnNlZF9UeXBlIERBVEEKLSAgUHlTZXFJdGVyX05ldz1weXRob24zMy5QeVNlcUl0ZXJfTmV3Ci0gIFB5U2VxSXRlcl9UeXBlPXB5dGhvbjMzLlB5U2VxSXRlcl9UeXBlIERBVEEKLSAgUHlTZXF1ZW5jZV9DaGVjaz1weXRob24zMy5QeVNlcXVlbmNlX0NoZWNrCi0gIFB5U2VxdWVuY2VfQ29uY2F0PXB5dGhvbjMzLlB5U2VxdWVuY2VfQ29uY2F0Ci0gIFB5U2VxdWVuY2VfQ29udGFpbnM9cHl0aG9uMzMuUHlTZXF1ZW5jZV9Db250YWlucwotICBQeVNlcXVlbmNlX0NvdW50PXB5dGhvbjMzLlB5U2VxdWVuY2VfQ291bnQKLSAgUHlTZXF1ZW5jZV9EZWxJdGVtPXB5dGhvbjMzLlB5U2VxdWVuY2VfRGVsSXRlbQotICBQeVNlcXVlbmNlX0RlbFNsaWNlPXB5dGhvbjMzLlB5U2VxdWVuY2VfRGVsU2xpY2UKLSAgUHlTZXF1ZW5jZV9GYXN0PXB5dGhvbjMzLlB5U2VxdWVuY2VfRmFzdAotICBQeVNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzMuUHlTZXF1ZW5jZV9HZXRJdGVtCi0gIFB5U2VxdWVuY2VfR2V0U2xpY2U9cHl0aG9uMzMuUHlTZXF1ZW5jZV9HZXRTbGljZQotICBQeVNlcXVlbmNlX0luPXB5dGhvbjMzLlB5U2VxdWVuY2VfSW4KLSAgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0PXB5dGhvbjMzLlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAotICBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQ9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0Ci0gIFB5U2VxdWVuY2VfSW5kZXg9cHl0aG9uMzMuUHlTZXF1ZW5jZV9JbmRleAotICBQeVNlcXVlbmNlX0xlbmd0aD1weXRob24zMy5QeVNlcXVlbmNlX0xlbmd0aAotICBQeVNlcXVlbmNlX0xpc3Q9cHl0aG9uMzMuUHlTZXF1ZW5jZV9MaXN0Ci0gIFB5U2VxdWVuY2VfUmVwZWF0PXB5dGhvbjMzLlB5U2VxdWVuY2VfUmVwZWF0Ci0gIFB5U2VxdWVuY2VfU2V0SXRlbT1weXRob24zMy5QeVNlcXVlbmNlX1NldEl0ZW0KLSAgUHlTZXF1ZW5jZV9TZXRTbGljZT1weXRob24zMy5QeVNlcXVlbmNlX1NldFNsaWNlCi0gIFB5U2VxdWVuY2VfU2l6ZT1weXRob24zMy5QeVNlcXVlbmNlX1NpemUKLSAgUHlTZXF1ZW5jZV9UdXBsZT1weXRob24zMy5QeVNlcXVlbmNlX1R1cGxlCi0gIFB5U2V0SXRlcl9UeXBlPXB5dGhvbjMzLlB5U2V0SXRlcl9UeXBlIERBVEEKLSAgUHlTZXRfQWRkPXB5dGhvbjMzLlB5U2V0X0FkZAotICBQeVNldF9DbGVhcj1weXRob24zMy5QeVNldF9DbGVhcgotICBQeVNldF9Db250YWlucz1weXRob24zMy5QeVNldF9Db250YWlucwotICBQeVNldF9EaXNjYXJkPXB5dGhvbjMzLlB5U2V0X0Rpc2NhcmQKLSAgUHlTZXRfTmV3PXB5dGhvbjMzLlB5U2V0X05ldwotICBQeVNldF9Qb3A9cHl0aG9uMzMuUHlTZXRfUG9wCi0gIFB5U2V0X1NpemU9cHl0aG9uMzMuUHlTZXRfU2l6ZQotICBQeVNldF9UeXBlPXB5dGhvbjMzLlB5U2V0X1R5cGUgREFUQQotICBQeVNsaWNlX0dldEluZGljZXM9cHl0aG9uMzMuUHlTbGljZV9HZXRJbmRpY2VzCi0gIFB5U2xpY2VfR2V0SW5kaWNlc0V4PXB5dGhvbjMzLlB5U2xpY2VfR2V0SW5kaWNlc0V4Ci0gIFB5U2xpY2VfTmV3PXB5dGhvbjMzLlB5U2xpY2VfTmV3Ci0gIFB5U2xpY2VfVHlwZT1weXRob24zMy5QeVNsaWNlX1R5cGUgREFUQQotICBQeVNvcnRXcmFwcGVyX1R5cGU9cHl0aG9uMzMuUHlTb3J0V3JhcHBlcl9UeXBlIERBVEEKLSAgUHlTdGF0ZV9GaW5kTW9kdWxlPXB5dGhvbjMzLlB5U3RhdGVfRmluZE1vZHVsZQotICBQeVN0YXRlX0FkZE1vZHVsZT1weXRob24zMy5QeVN0YXRlX0FkZE1vZHVsZQotICBQeVN0YXRlX1JlbW92ZU1vZHVsZT1weXRob24zMy5QeVN0YXRlX1JlbW92ZU1vZHVsZQotICBQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzMuUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtCi0gIFB5U3RydWN0U2VxdWVuY2VfTmV3PXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfTmV3Ci0gIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZT1weXRob24zMy5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKLSAgUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjMzLlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQotICBQeVN1cGVyX1R5cGU9cHl0aG9uMzMuUHlTdXBlcl9UeXBlIERBVEEKLSAgUHlTeXNfQWRkV2Fybk9wdGlvbj1weXRob24zMy5QeVN5c19BZGRXYXJuT3B0aW9uCi0gIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlPXB5dGhvbjMzLlB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlCi0gIFB5U3lzX0Zvcm1hdFN0ZGVycj1weXRob24zMy5QeVN5c19Gb3JtYXRTdGRlcnIKLSAgUHlTeXNfRm9ybWF0U3Rkb3V0PXB5dGhvbjMzLlB5U3lzX0Zvcm1hdFN0ZG91dAotICBQeVN5c19HZXRPYmplY3Q9cHl0aG9uMzMuUHlTeXNfR2V0T2JqZWN0Ci0gIFB5U3lzX0hhc1dhcm5PcHRpb25zPXB5dGhvbjMzLlB5U3lzX0hhc1dhcm5PcHRpb25zCi0gIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnM9cHl0aG9uMzMuUHlTeXNfUmVzZXRXYXJuT3B0aW9ucwotICBQeVN5c19TZXRBcmd2PXB5dGhvbjMzLlB5U3lzX1NldEFyZ3YKLSAgUHlTeXNfU2V0QXJndkV4PXB5dGhvbjMzLlB5U3lzX1NldEFyZ3ZFeAotICBQeVN5c19TZXRPYmplY3Q9cHl0aG9uMzMuUHlTeXNfU2V0T2JqZWN0Ci0gIFB5U3lzX1NldFBhdGg9cHl0aG9uMzMuUHlTeXNfU2V0UGF0aAotICBQeVN5c19Xcml0ZVN0ZGVycj1weXRob24zMy5QeVN5c19Xcml0ZVN0ZGVycgotICBQeVN5c19Xcml0ZVN0ZG91dD1weXRob24zMy5QeVN5c19Xcml0ZVN0ZG91dAotICBQeVRocmVhZFN0YXRlX0NsZWFyPXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfQ2xlYXIKLSAgUHlUaHJlYWRTdGF0ZV9EZWxldGU9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9EZWxldGUKLSAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudAotICBQeVRocmVhZFN0YXRlX0dldD1weXRob24zMy5QeVRocmVhZFN0YXRlX0dldAotICBQeVRocmVhZFN0YXRlX0dldERpY3Q9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9HZXREaWN0Ci0gIFB5VGhyZWFkU3RhdGVfTmV3PXB5dGhvbjMzLlB5VGhyZWFkU3RhdGVfTmV3Ci0gIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGM9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YwotICBQeVRocmVhZFN0YXRlX1N3YXA9cHl0aG9uMzMuUHlUaHJlYWRTdGF0ZV9Td2FwCi0gIFB5VHJhY2VCYWNrX0hlcmU9cHl0aG9uMzMuUHlUcmFjZUJhY2tfSGVyZQotICBQeVRyYWNlQmFja19QcmludD1weXRob24zMy5QeVRyYWNlQmFja19QcmludAotICBQeVRyYWNlQmFja19UeXBlPXB5dGhvbjMzLlB5VHJhY2VCYWNrX1R5cGUgREFUQQotICBQeVR1cGxlSXRlcl9UeXBlPXB5dGhvbjMzLlB5VHVwbGVJdGVyX1R5cGUgREFUQQotICBQeVR1cGxlX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzMuUHlUdXBsZV9DbGVhckZyZWVMaXN0Ci0gIFB5VHVwbGVfR2V0SXRlbT1weXRob24zMy5QeVR1cGxlX0dldEl0ZW0KLSAgUHlUdXBsZV9HZXRTbGljZT1weXRob24zMy5QeVR1cGxlX0dldFNsaWNlCi0gIFB5VHVwbGVfTmV3PXB5dGhvbjMzLlB5VHVwbGVfTmV3Ci0gIFB5VHVwbGVfUGFjaz1weXRob24zMy5QeVR1cGxlX1BhY2sKLSAgUHlUdXBsZV9TZXRJdGVtPXB5dGhvbjMzLlB5VHVwbGVfU2V0SXRlbQotICBQeVR1cGxlX1NpemU9cHl0aG9uMzMuUHlUdXBsZV9TaXplCi0gIFB5VHVwbGVfVHlwZT1weXRob24zMy5QeVR1cGxlX1R5cGUgREFUQQotICBQeVR5cGVfQ2xlYXJDYWNoZT1weXRob24zMy5QeVR5cGVfQ2xlYXJDYWNoZQotICBQeVR5cGVfRnJvbVNwZWM9cHl0aG9uMzMuUHlUeXBlX0Zyb21TcGVjCi0gIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcz1weXRob24zMy5QeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMKLSAgUHlUeXBlX0dlbmVyaWNBbGxvYz1weXRob24zMy5QeVR5cGVfR2VuZXJpY0FsbG9jCi0gIFB5VHlwZV9HZW5lcmljTmV3PXB5dGhvbjMzLlB5VHlwZV9HZW5lcmljTmV3Ci0gIFB5VHlwZV9HZXRGbGFncz1weXRob24zMy5QeVR5cGVfR2V0RmxhZ3MKLSAgUHlUeXBlX0lzU3VidHlwZT1weXRob24zMy5QeVR5cGVfSXNTdWJ0eXBlCi0gIFB5VHlwZV9Nb2RpZmllZD1weXRob24zMy5QeVR5cGVfTW9kaWZpZWQKLSAgUHlUeXBlX1JlYWR5PXB5dGhvbjMzLlB5VHlwZV9SZWFkeQotICBQeVR5cGVfVHlwZT1weXRob24zMy5QeVR5cGVfVHlwZSBEQVRBCi0gIFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZT1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdAotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uCi0gIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0Ci0gIFB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQKLSAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjMzLlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbgotICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zMy5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAotICBQeVVuaWNvZGVJdGVyX1R5cGU9cHl0aG9uMzMuUHlVbmljb2RlSXRlcl9UeXBlIERBVEEKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0Ci0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbj1weXRob24zMy5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24KLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQKLSAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kPXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZAotICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzMuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uCi0gIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0PXB5dGhvbjMzLlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0Ci0gIFB5VW5pY29kZV9BcHBlbmQ9cHl0aG9uMzMuUHlVbmljb2RlX0FwcGVuZAotICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsPXB5dGhvbjMzLlB5VW5pY29kZV9BcHBlbmRBbmREZWwKLSAgUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcKLSAgUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nCi0gIFB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3Q9cHl0aG9uMzMuUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdAotICBQeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZT1weXRob24zMy5QeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZQotICBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0PXB5dGhvbjMzLlB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3QKLSAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nCi0gIFB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlPXB5dGhvbjMzLlB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlCi0gIFB5VW5pY29kZV9Bc0xhdGluMVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcKLSAgUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zMy5QeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjE2U3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc1VURjE2U3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjMyU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc1VURjMyU3RyaW5nCi0gIFB5VW5pY29kZV9Bc1VURjhTdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0FzVVRGOFN0cmluZwotICBQeVVuaWNvZGVfQXNVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcKLSAgUHlVbmljb2RlX0FzV2lkZUNoYXI9cHl0aG9uMzMuUHlVbmljb2RlX0FzV2lkZUNoYXIKLSAgUHlVbmljb2RlX0NsZWFyRnJlZWxpc3Q9cHl0aG9uMzMuUHlVbmljb2RlX0NsZWFyRnJlZWxpc3QKLSAgUHlVbmljb2RlX0NvbXBhcmU9cHl0aG9uMzMuUHlVbmljb2RlX0NvbXBhcmUKLSAgUHlVbmljb2RlX0NvbmNhdD1weXRob24zMy5QeVVuaWNvZGVfQ29uY2F0Ci0gIFB5VW5pY29kZV9Db250YWlucz1weXRob24zMy5QeVVuaWNvZGVfQ29udGFpbnMKLSAgUHlVbmljb2RlX0NvdW50PXB5dGhvbjMzLlB5VW5pY29kZV9Db3VudAotICBQeVVuaWNvZGVfRGVjb2RlPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGUKLSAgUHlVbmljb2RlX0RlY29kZUFTQ0lJPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVBU0NJSQotICBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcAotICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0PXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQKLSAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemU9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUKLSAgUHlVbmljb2RlX0RlY29kZUxhdGluMT1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlTGF0aW4xCi0gIFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlCi0gIFB5VW5pY29kZV9EZWNvZGVVVEYxNj1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGMTYKLSAgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwKLSAgUHlVbmljb2RlX0RlY29kZVVURjMyPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEYzMgotICBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRGVjb2RlVVRGOD1weXRob24zMy5QeVVuaWNvZGVfRGVjb2RlVVRGOAotICBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsPXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwKLSAgUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGU9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGUKLSAgUHlVbmljb2RlX0ZTQ29udmVydGVyPXB5dGhvbjMzLlB5VW5pY29kZV9GU0NvbnZlcnRlcgotICBQeVVuaWNvZGVfRlNEZWNvZGVyPXB5dGhvbjMzLlB5VW5pY29kZV9GU0RlY29kZXIKLSAgUHlVbmljb2RlX0ZpbmQ9cHl0aG9uMzMuUHlVbmljb2RlX0ZpbmQKLSAgUHlVbmljb2RlX0Zvcm1hdD1weXRob24zMy5QeVVuaWNvZGVfRm9ybWF0Ci0gIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdD1weXRob24zMy5QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QKLSAgUHlVbmljb2RlX0Zyb21Gb3JtYXQ9cHl0aG9uMzMuUHlVbmljb2RlX0Zyb21Gb3JtYXQKLSAgUHlVbmljb2RlX0Zyb21Gb3JtYXRWPXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tRm9ybWF0VgotICBQeVVuaWNvZGVfRnJvbU9iamVjdD1weXRob24zMy5QeVVuaWNvZGVfRnJvbU9iamVjdAotICBQeVVuaWNvZGVfRnJvbU9yZGluYWw9cHl0aG9uMzMuUHlVbmljb2RlX0Zyb21PcmRpbmFsCi0gIFB5VW5pY29kZV9Gcm9tU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Gcm9tU3RyaW5nCi0gIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zMy5QeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUKLSAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcj1weXRob24zMy5QeVVuaWNvZGVfRnJvbVdpZGVDaGFyCi0gIFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZwotICBQeVVuaWNvZGVfR2V0U2l6ZT1weXRob24zMy5QeVVuaWNvZGVfR2V0U2l6ZQotICBQeVVuaWNvZGVfSXNJZGVudGlmaWVyPXB5dGhvbjMzLlB5VW5pY29kZV9Jc0lkZW50aWZpZXIKLSAgUHlVbmljb2RlX0pvaW49cHl0aG9uMzMuUHlVbmljb2RlX0pvaW4KLSAgUHlVbmljb2RlX1BhcnRpdGlvbj1weXRob24zMy5QeVVuaWNvZGVfUGFydGl0aW9uCi0gIFB5VW5pY29kZV9SUGFydGl0aW9uPXB5dGhvbjMzLlB5VW5pY29kZV9SUGFydGl0aW9uCi0gIFB5VW5pY29kZV9SU3BsaXQ9cHl0aG9uMzMuUHlVbmljb2RlX1JTcGxpdAotICBQeVVuaWNvZGVfUmVwbGFjZT1weXRob24zMy5QeVVuaWNvZGVfUmVwbGFjZQotICBQeVVuaWNvZGVfUmVzaXplPXB5dGhvbjMzLlB5VW5pY29kZV9SZXNpemUKLSAgUHlVbmljb2RlX1JpY2hDb21wYXJlPXB5dGhvbjMzLlB5VW5pY29kZV9SaWNoQ29tcGFyZQotICBQeVVuaWNvZGVfU2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2RpbmcKLSAgUHlVbmljb2RlX1NwbGl0PXB5dGhvbjMzLlB5VW5pY29kZV9TcGxpdAotICBQeVVuaWNvZGVfU3BsaXRsaW5lcz1weXRob24zMy5QeVVuaWNvZGVfU3BsaXRsaW5lcwotICBQeVVuaWNvZGVfVGFpbG1hdGNoPXB5dGhvbjMzLlB5VW5pY29kZV9UYWlsbWF0Y2gKLSAgUHlVbmljb2RlX1RyYW5zbGF0ZT1weXRob24zMy5QeVVuaWNvZGVfVHJhbnNsYXRlCi0gIFB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwPXB5dGhvbjMzLlB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwCi0gIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nPXB5dGhvbjMzLlB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCi0gIFB5VW5pY29kZV9EZWNvZGVVVEY3PXB5dGhvbjMzLlB5VW5pY29kZV9EZWNvZGVVVEY3Ci0gIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWw9cHl0aG9uMzMuUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bAotICBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0PXB5dGhvbjMzLlB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQKLSAgUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmc9cHl0aG9uMzMuUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcKLSAgUHlVbmljb2RlX0ludGVybkltbW9ydGFsPXB5dGhvbjMzLlB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbAotICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZT1weXRob24zMy5QeVVuaWNvZGVfSW50ZXJuSW5QbGFjZQotICBQeVVuaWNvZGVfVHlwZT1weXRob24zMy5QeVVuaWNvZGVfVHlwZSBEQVRBCi0gIFB5V2Vha3JlZl9HZXRPYmplY3Q9cHl0aG9uMzMuUHlXZWFrcmVmX0dldE9iamVjdCBEQVRBCi0gIFB5V2Vha3JlZl9OZXdQcm94eT1weXRob24zMy5QeVdlYWtyZWZfTmV3UHJveHkKLSAgUHlXZWFrcmVmX05ld1JlZj1weXRob24zMy5QeVdlYWtyZWZfTmV3UmVmCi0gIFB5V3JhcHBlckRlc2NyX1R5cGU9cHl0aG9uMzMuUHlXcmFwcGVyRGVzY3JfVHlwZSBEQVRBCi0gIFB5V3JhcHBlcl9OZXc9cHl0aG9uMzMuUHlXcmFwcGVyX05ldwotICBQeVppcF9UeXBlPXB5dGhvbjMzLlB5WmlwX1R5cGUgREFUQQotICBQeV9BZGRQZW5kaW5nQ2FsbD1weXRob24zMy5QeV9BZGRQZW5kaW5nQ2FsbAotICBQeV9BdEV4aXQ9cHl0aG9uMzMuUHlfQXRFeGl0Ci0gIFB5X0J1aWxkVmFsdWU9cHl0aG9uMzMuUHlfQnVpbGRWYWx1ZQotICBQeV9Db21waWxlU3RyaW5nPXB5dGhvbjMzLlB5X0NvbXBpbGVTdHJpbmcKLSAgUHlfRGVjUmVmPXB5dGhvbjMzLlB5X0RlY1JlZgotICBQeV9FbmRJbnRlcnByZXRlcj1weXRob24zMy5QeV9FbmRJbnRlcnByZXRlcgotICBQeV9FeGl0PXB5dGhvbjMzLlB5X0V4aXQKLSAgUHlfRmF0YWxFcnJvcj1weXRob24zMy5QeV9GYXRhbEVycm9yCi0gIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCi0gIFB5X0ZpbmFsaXplPXB5dGhvbjMzLlB5X0ZpbmFsaXplCi0gIFB5X0dldEJ1aWxkSW5mbz1weXRob24zMy5QeV9HZXRCdWlsZEluZm8KLSAgUHlfR2V0Q29tcGlsZXI9cHl0aG9uMzMuUHlfR2V0Q29tcGlsZXIKLSAgUHlfR2V0Q29weXJpZ2h0PXB5dGhvbjMzLlB5X0dldENvcHlyaWdodAotICBQeV9HZXRFeGVjUHJlZml4PXB5dGhvbjMzLlB5X0dldEV4ZWNQcmVmaXgKLSAgUHlfR2V0UGF0aD1weXRob24zMy5QeV9HZXRQYXRoCi0gIFB5X0dldFBsYXRmb3JtPXB5dGhvbjMzLlB5X0dldFBsYXRmb3JtCi0gIFB5X0dldFByZWZpeD1weXRob24zMy5QeV9HZXRQcmVmaXgKLSAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoPXB5dGhvbjMzLlB5X0dldFByb2dyYW1GdWxsUGF0aAotICBQeV9HZXRQcm9ncmFtTmFtZT1weXRob24zMy5QeV9HZXRQcm9ncmFtTmFtZQotICBQeV9HZXRQeXRob25Ib21lPXB5dGhvbjMzLlB5X0dldFB5dGhvbkhvbWUKLSAgUHlfR2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzMuUHlfR2V0UmVjdXJzaW9uTGltaXQKLSAgUHlfR2V0VmVyc2lvbj1weXRob24zMy5QeV9HZXRWZXJzaW9uCi0gIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzMuUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCi0gIFB5X0luY1JlZj1weXRob24zMy5QeV9JbmNSZWYKLSAgUHlfSW5pdGlhbGl6ZT1weXRob24zMy5QeV9Jbml0aWFsaXplCi0gIFB5X0luaXRpYWxpemVFeD1weXRob24zMy5QeV9Jbml0aWFsaXplRXgKLSAgUHlfSXNJbml0aWFsaXplZD1weXRob24zMy5QeV9Jc0luaXRpYWxpemVkCi0gIFB5X01haW49cHl0aG9uMzMuUHlfTWFpbgotICBQeV9NYWtlUGVuZGluZ0NhbGxzPXB5dGhvbjMzLlB5X01ha2VQZW5kaW5nQ2FsbHMKLSAgUHlfTmV3SW50ZXJwcmV0ZXI9cHl0aG9uMzMuUHlfTmV3SW50ZXJwcmV0ZXIKLSAgUHlfUmVwckVudGVyPXB5dGhvbjMzLlB5X1JlcHJFbnRlcgotICBQeV9SZXByTGVhdmU9cHl0aG9uMzMuUHlfUmVwckxlYXZlCi0gIFB5X1NldFByb2dyYW1OYW1lPXB5dGhvbjMzLlB5X1NldFByb2dyYW1OYW1lCi0gIFB5X1NldFB5dGhvbkhvbWU9cHl0aG9uMzMuUHlfU2V0UHl0aG9uSG9tZQotICBQeV9TZXRSZWN1cnNpb25MaW1pdD1weXRob24zMy5QeV9TZXRSZWN1cnNpb25MaW1pdAotICBQeV9TeW10YWJsZVN0cmluZz1weXRob24zMy5QeV9TeW10YWJsZVN0cmluZwotICBQeV9WYUJ1aWxkVmFsdWU9cHl0aG9uMzMuUHlfVmFCdWlsZFZhbHVlCi0gIF9QeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzMuX1B5RXJyX0JhZEludGVybmFsQ2FsbAotICBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUPXB5dGhvbjMzLl9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQKLSAgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQ9cHl0aG9uMzMuX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQKLSAgX1B5T2JqZWN0X0dDX01hbGxvYz1weXRob24zMy5fUHlPYmplY3RfR0NfTWFsbG9jCi0gIF9QeU9iamVjdF9HQ19OZXc9cHl0aG9uMzMuX1B5T2JqZWN0X0dDX05ldwotICBfUHlPYmplY3RfR0NfTmV3VmFyPXB5dGhvbjMzLl9QeU9iamVjdF9HQ19OZXdWYXIKLSAgX1B5T2JqZWN0X0dDX1Jlc2l6ZT1weXRob24zMy5fUHlPYmplY3RfR0NfUmVzaXplCi0gIF9QeU9iamVjdF9OZXc9cHl0aG9uMzMuX1B5T2JqZWN0X05ldwotICBfUHlPYmplY3RfTmV3VmFyPXB5dGhvbjMzLl9QeU9iamVjdF9OZXdWYXIKLSAgX1B5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjMzLl9QeVN0YXRlX0FkZE1vZHVsZQotICBfUHlUaHJlYWRTdGF0ZV9Jbml0PXB5dGhvbjMzLl9QeVRocmVhZFN0YXRlX0luaXQKLSAgX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2M9cHl0aG9uMzMuX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2MKLSAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyPXB5dGhvbjMzLl9QeVRyYXNoX2RlbGV0ZV9sYXRlciBEQVRBCi0gIF9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nPXB5dGhvbjMzLl9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIERBVEEKLSAgX1B5VHJhc2hfZGVwb3NpdF9vYmplY3Q9cHl0aG9uMzMuX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QKLSAgX1B5VHJhc2hfZGVzdHJveV9jaGFpbj1weXRob24zMy5fUHlUcmFzaF9kZXN0cm95X2NoYWluCi0gIF9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGU9cHl0aG9uMzMuX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSBEQVRBCi0gIF9QeVdlYWtyZWZfUHJveHlUeXBlPXB5dGhvbjMzLl9QeVdlYWtyZWZfUHJveHlUeXBlIERBVEEKLSAgX1B5V2Vha3JlZl9SZWZUeXBlPXB5dGhvbjMzLl9QeVdlYWtyZWZfUmVmVHlwZSBEQVRBCi0gIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9CdWlsZFZhbHVlX1NpemVUCi0gIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0PXB5dGhvbjMzLl9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IERBVEEKLSAgX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbD1weXRob24zMy5fUHlfQ2hlY2tSZWN1cnNpdmVDYWxsCi0gIF9QeV9EZWFsbG9jPXB5dGhvbjMzLl9QeV9EZWFsbG9jCi0gIF9QeV9FbGxpcHNpc09iamVjdD1weXRob24zMy5fUHlfRWxsaXBzaXNPYmplY3QgREFUQQotICBfUHlfRmFsc2VTdHJ1Y3Q9cHl0aG9uMzMuX1B5X0ZhbHNlU3RydWN0IERBVEEKLSAgX1B5X05vbmVTdHJ1Y3Q9cHl0aG9uMzMuX1B5X05vbmVTdHJ1Y3QgREFUQQotICBfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3Q9cHl0aG9uMzMuX1B5X05vdEltcGxlbWVudGVkU3RydWN0IERBVEEKLSAgX1B5X1N3YXBwZWRPcD1weXRob24zMy5fUHlfU3dhcHBlZE9wIERBVEEKLSAgX1B5X1RydWVTdHJ1Y3Q9cHl0aG9uMzMuX1B5X1RydWVTdHJ1Y3QgREFUQQotICBfUHlfVmFCdWlsZFZhbHVlX1NpemVUPXB5dGhvbjMzLl9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQKLSAgX1B5QXJnX1BhcnNlX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZV9TaXplVAotICBfUHlBcmdfUGFyc2VUdXBsZV9TaXplVD1weXRob24zMy5fUHlBcmdfUGFyc2VUdXBsZV9TaXplVAotICBfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKLSAgX1B5QXJnX1ZhUGFyc2VfU2l6ZVQ9cHl0aG9uMzMuX1B5QXJnX1ZhUGFyc2VfU2l6ZVQKLSAgX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjMzLl9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAotICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zMy5fUHlfQnVpbGRWYWx1ZV9TaXplVAorICBQeUFyZ19QYXJzZT1weXRob24zNC5QeUFyZ19QYXJzZQorICBQeUFyZ19QYXJzZVR1cGxlPXB5dGhvbjM0LlB5QXJnX1BhcnNlVHVwbGUKKyAgUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzPXB5dGhvbjM0LlB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcworICBQeUFyZ19VbnBhY2tUdXBsZT1weXRob24zNC5QeUFyZ19VbnBhY2tUdXBsZQorICBQeUFyZ19WYVBhcnNlPXB5dGhvbjM0LlB5QXJnX1ZhUGFyc2UKKyAgUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHM9cHl0aG9uMzQuUHlBcmdfVmFQYXJzZVR1cGxlQW5kS2V5d29yZHMKKyAgUHlBcmdfVmFsaWRhdGVLZXl3b3JkQXJndW1lbnRzPXB5dGhvbjM0LlB5QXJnX1ZhbGlkYXRlS2V5d29yZEFyZ3VtZW50cworICBQeUJhc2VPYmplY3RfVHlwZT1weXRob24zNC5QeUJhc2VPYmplY3RfVHlwZSBEQVRBCisgIFB5Qm9vbF9Gcm9tTG9uZz1weXRob24zNC5QeUJvb2xfRnJvbUxvbmcKKyAgUHlCb29sX1R5cGU9cHl0aG9uMzQuUHlCb29sX1R5cGUgREFUQQorICBQeUJ5dGVBcnJheUl0ZXJfVHlwZT1weXRob24zNC5QeUJ5dGVBcnJheUl0ZXJfVHlwZSBEQVRBCisgIFB5Qnl0ZUFycmF5X0FzU3RyaW5nPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0FzU3RyaW5nCisgIFB5Qnl0ZUFycmF5X0NvbmNhdD1weXRob24zNC5QeUJ5dGVBcnJheV9Db25jYXQKKyAgUHlCeXRlQXJyYXlfRnJvbU9iamVjdD1weXRob24zNC5QeUJ5dGVBcnJheV9Gcm9tT2JqZWN0CisgIFB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplPXB5dGhvbjM0LlB5Qnl0ZUFycmF5X0Zyb21TdHJpbmdBbmRTaXplCisgIFB5Qnl0ZUFycmF5X1Jlc2l6ZT1weXRob24zNC5QeUJ5dGVBcnJheV9SZXNpemUKKyAgUHlCeXRlQXJyYXlfU2l6ZT1weXRob24zNC5QeUJ5dGVBcnJheV9TaXplCisgIFB5Qnl0ZUFycmF5X1R5cGU9cHl0aG9uMzQuUHlCeXRlQXJyYXlfVHlwZSBEQVRBCisgIFB5Qnl0ZXNJdGVyX1R5cGU9cHl0aG9uMzQuUHlCeXRlc0l0ZXJfVHlwZSBEQVRBCisgIFB5Qnl0ZXNfQXNTdHJpbmc9cHl0aG9uMzQuUHlCeXRlc19Bc1N0cmluZworICBQeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeUJ5dGVzX0FzU3RyaW5nQW5kU2l6ZQorICBQeUJ5dGVzX0NvbmNhdD1weXRob24zNC5QeUJ5dGVzX0NvbmNhdAorICBQeUJ5dGVzX0NvbmNhdEFuZERlbD1weXRob24zNC5QeUJ5dGVzX0NvbmNhdEFuZERlbAorICBQeUJ5dGVzX0RlY29kZUVzY2FwZT1weXRob24zNC5QeUJ5dGVzX0RlY29kZUVzY2FwZQorICBQeUJ5dGVzX0Zyb21Gb3JtYXQ9cHl0aG9uMzQuUHlCeXRlc19Gcm9tRm9ybWF0CisgIFB5Qnl0ZXNfRnJvbUZvcm1hdFY9cHl0aG9uMzQuUHlCeXRlc19Gcm9tRm9ybWF0VgorICBQeUJ5dGVzX0Zyb21PYmplY3Q9cHl0aG9uMzQuUHlCeXRlc19Gcm9tT2JqZWN0CisgIFB5Qnl0ZXNfRnJvbVN0cmluZz1weXRob24zNC5QeUJ5dGVzX0Zyb21TdHJpbmcKKyAgUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplCisgIFB5Qnl0ZXNfUmVwcj1weXRob24zNC5QeUJ5dGVzX1JlcHIKKyAgUHlCeXRlc19TaXplPXB5dGhvbjM0LlB5Qnl0ZXNfU2l6ZQorICBQeUJ5dGVzX1R5cGU9cHl0aG9uMzQuUHlCeXRlc19UeXBlIERBVEEKKyAgUHlDRnVuY3Rpb25fQ2FsbD1weXRob24zNC5QeUNGdW5jdGlvbl9DYWxsCisgIFB5Q0Z1bmN0aW9uX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzQuUHlDRnVuY3Rpb25fQ2xlYXJGcmVlTGlzdAorICBQeUNGdW5jdGlvbl9HZXRGbGFncz1weXRob24zNC5QeUNGdW5jdGlvbl9HZXRGbGFncworICBQeUNGdW5jdGlvbl9HZXRGdW5jdGlvbj1weXRob24zNC5QeUNGdW5jdGlvbl9HZXRGdW5jdGlvbgorICBQeUNGdW5jdGlvbl9HZXRTZWxmPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX0dldFNlbGYKKyAgUHlDRnVuY3Rpb25fTmV3PXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX05ldworICBQeUNGdW5jdGlvbl9OZXdFeD1weXRob24zNC5QeUNGdW5jdGlvbl9OZXdFeAorICBQeUNGdW5jdGlvbl9UeXBlPXB5dGhvbjM0LlB5Q0Z1bmN0aW9uX1R5cGUgREFUQQorICBQeUNhbGxJdGVyX05ldz1weXRob24zNC5QeUNhbGxJdGVyX05ldworICBQeUNhbGxJdGVyX1R5cGU9cHl0aG9uMzQuUHlDYWxsSXRlcl9UeXBlIERBVEEKKyAgUHlDYWxsYWJsZV9DaGVjaz1weXRob24zNC5QeUNhbGxhYmxlX0NoZWNrCisgIFB5Q2Fwc3VsZV9HZXRDb250ZXh0PXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXRDb250ZXh0CisgIFB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yPXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXREZXN0cnVjdG9yCisgIFB5Q2Fwc3VsZV9HZXROYW1lPXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXROYW1lCisgIFB5Q2Fwc3VsZV9HZXRQb2ludGVyPXB5dGhvbjM0LlB5Q2Fwc3VsZV9HZXRQb2ludGVyCisgIFB5Q2Fwc3VsZV9JbXBvcnQ9cHl0aG9uMzQuUHlDYXBzdWxlX0ltcG9ydAorICBQeUNhcHN1bGVfSXNWYWxpZD1weXRob24zNC5QeUNhcHN1bGVfSXNWYWxpZAorICBQeUNhcHN1bGVfTmV3PXB5dGhvbjM0LlB5Q2Fwc3VsZV9OZXcKKyAgUHlDYXBzdWxlX1NldENvbnRleHQ9cHl0aG9uMzQuUHlDYXBzdWxlX1NldENvbnRleHQKKyAgUHlDYXBzdWxlX1NldERlc3RydWN0b3I9cHl0aG9uMzQuUHlDYXBzdWxlX1NldERlc3RydWN0b3IKKyAgUHlDYXBzdWxlX1NldE5hbWU9cHl0aG9uMzQuUHlDYXBzdWxlX1NldE5hbWUKKyAgUHlDYXBzdWxlX1NldFBvaW50ZXI9cHl0aG9uMzQuUHlDYXBzdWxlX1NldFBvaW50ZXIKKyAgUHlDYXBzdWxlX1R5cGU9cHl0aG9uMzQuUHlDYXBzdWxlX1R5cGUgREFUQQorICBQeUNsYXNzTWV0aG9kRGVzY3JfVHlwZT1weXRob24zNC5QeUNsYXNzTWV0aG9kRGVzY3JfVHlwZSBEQVRBCisgIFB5Q29kZWNfQmFja3NsYXNoUmVwbGFjZUVycm9ycz1weXRob24zNC5QeUNvZGVjX0JhY2tzbGFzaFJlcGxhY2VFcnJvcnMKKyAgUHlDb2RlY19EZWNvZGU9cHl0aG9uMzQuUHlDb2RlY19EZWNvZGUKKyAgUHlDb2RlY19EZWNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfRGVjb2RlcgorICBQeUNvZGVjX0VuY29kZT1weXRob24zNC5QeUNvZGVjX0VuY29kZQorICBQeUNvZGVjX0VuY29kZXI9cHl0aG9uMzQuUHlDb2RlY19FbmNvZGVyCisgIFB5Q29kZWNfSWdub3JlRXJyb3JzPXB5dGhvbjM0LlB5Q29kZWNfSWdub3JlRXJyb3JzCisgIFB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfSW5jcmVtZW50YWxEZWNvZGVyCisgIFB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyPXB5dGhvbjM0LlB5Q29kZWNfSW5jcmVtZW50YWxFbmNvZGVyCisgIFB5Q29kZWNfS25vd25FbmNvZGluZz1weXRob24zNC5QeUNvZGVjX0tub3duRW5jb2RpbmcKKyAgUHlDb2RlY19Mb29rdXBFcnJvcj1weXRob24zNC5QeUNvZGVjX0xvb2t1cEVycm9yCisgIFB5Q29kZWNfUmVnaXN0ZXI9cHl0aG9uMzQuUHlDb2RlY19SZWdpc3RlcgorICBQeUNvZGVjX1JlZ2lzdGVyRXJyb3I9cHl0aG9uMzQuUHlDb2RlY19SZWdpc3RlckVycm9yCisgIFB5Q29kZWNfUmVwbGFjZUVycm9ycz1weXRob24zNC5QeUNvZGVjX1JlcGxhY2VFcnJvcnMKKyAgUHlDb2RlY19TdHJlYW1SZWFkZXI9cHl0aG9uMzQuUHlDb2RlY19TdHJlYW1SZWFkZXIKKyAgUHlDb2RlY19TdHJlYW1Xcml0ZXI9cHl0aG9uMzQuUHlDb2RlY19TdHJlYW1Xcml0ZXIKKyAgUHlDb2RlY19TdHJpY3RFcnJvcnM9cHl0aG9uMzQuUHlDb2RlY19TdHJpY3RFcnJvcnMKKyAgUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycz1weXRob24zNC5QeUNvZGVjX1hNTENoYXJSZWZSZXBsYWNlRXJyb3JzCisgIFB5Q29tcGxleF9Gcm9tRG91Ymxlcz1weXRob24zNC5QeUNvbXBsZXhfRnJvbURvdWJsZXMKKyAgUHlDb21wbGV4X0ltYWdBc0RvdWJsZT1weXRob24zNC5QeUNvbXBsZXhfSW1hZ0FzRG91YmxlCisgIFB5Q29tcGxleF9SZWFsQXNEb3VibGU9cHl0aG9uMzQuUHlDb21wbGV4X1JlYWxBc0RvdWJsZQorICBQeUNvbXBsZXhfVHlwZT1weXRob24zNC5QeUNvbXBsZXhfVHlwZSBEQVRBCisgIFB5RGVzY3JfTmV3Q2xhc3NNZXRob2Q9cHl0aG9uMzQuUHlEZXNjcl9OZXdDbGFzc01ldGhvZAorICBQeURlc2NyX05ld0dldFNldD1weXRob24zNC5QeURlc2NyX05ld0dldFNldAorICBQeURlc2NyX05ld01lbWJlcj1weXRob24zNC5QeURlc2NyX05ld01lbWJlcgorICBQeURlc2NyX05ld01ldGhvZD1weXRob24zNC5QeURlc2NyX05ld01ldGhvZAorICBQeURpY3RJdGVtc19UeXBlPXB5dGhvbjM0LlB5RGljdEl0ZW1zX1R5cGUgREFUQQorICBQeURpY3RJdGVySXRlbV9UeXBlPXB5dGhvbjM0LlB5RGljdEl0ZXJJdGVtX1R5cGUgREFUQQorICBQeURpY3RJdGVyS2V5X1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlcktleV9UeXBlIERBVEEKKyAgUHlEaWN0SXRlclZhbHVlX1R5cGU9cHl0aG9uMzQuUHlEaWN0SXRlclZhbHVlX1R5cGUgREFUQQorICBQeURpY3RLZXlzX1R5cGU9cHl0aG9uMzQuUHlEaWN0S2V5c19UeXBlIERBVEEKKyAgUHlEaWN0UHJveHlfTmV3PXB5dGhvbjM0LlB5RGljdFByb3h5X05ldworICBQeURpY3RQcm94eV9UeXBlPXB5dGhvbjM0LlB5RGljdFByb3h5X1R5cGUgREFUQQorICBQeURpY3RWYWx1ZXNfVHlwZT1weXRob24zNC5QeURpY3RWYWx1ZXNfVHlwZSBEQVRBCisgIFB5RGljdF9DbGVhcj1weXRob24zNC5QeURpY3RfQ2xlYXIKKyAgUHlEaWN0X0NvbnRhaW5zPXB5dGhvbjM0LlB5RGljdF9Db250YWlucworICBQeURpY3RfQ29weT1weXRob24zNC5QeURpY3RfQ29weQorICBQeURpY3RfRGVsSXRlbT1weXRob24zNC5QeURpY3RfRGVsSXRlbQorICBQeURpY3RfRGVsSXRlbVN0cmluZz1weXRob24zNC5QeURpY3RfRGVsSXRlbVN0cmluZworICBQeURpY3RfR2V0SXRlbT1weXRob24zNC5QeURpY3RfR2V0SXRlbQorICBQeURpY3RfR2V0SXRlbVN0cmluZz1weXRob24zNC5QeURpY3RfR2V0SXRlbVN0cmluZworICBQeURpY3RfR2V0SXRlbVdpdGhFcnJvcj1weXRob24zNC5QeURpY3RfR2V0SXRlbVdpdGhFcnJvcgorICBQeURpY3RfSXRlbXM9cHl0aG9uMzQuUHlEaWN0X0l0ZW1zCisgIFB5RGljdF9LZXlzPXB5dGhvbjM0LlB5RGljdF9LZXlzCisgIFB5RGljdF9NZXJnZT1weXRob24zNC5QeURpY3RfTWVyZ2UKKyAgUHlEaWN0X01lcmdlRnJvbVNlcTI9cHl0aG9uMzQuUHlEaWN0X01lcmdlRnJvbVNlcTIKKyAgUHlEaWN0X05ldz1weXRob24zNC5QeURpY3RfTmV3CisgIFB5RGljdF9OZXh0PXB5dGhvbjM0LlB5RGljdF9OZXh0CisgIFB5RGljdF9TZXRJdGVtPXB5dGhvbjM0LlB5RGljdF9TZXRJdGVtCisgIFB5RGljdF9TZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5RGljdF9TZXRJdGVtU3RyaW5nCisgIFB5RGljdF9TaXplPXB5dGhvbjM0LlB5RGljdF9TaXplCisgIFB5RGljdF9UeXBlPXB5dGhvbjM0LlB5RGljdF9UeXBlIERBVEEKKyAgUHlEaWN0X1VwZGF0ZT1weXRob24zNC5QeURpY3RfVXBkYXRlCisgIFB5RGljdF9WYWx1ZXM9cHl0aG9uMzQuUHlEaWN0X1ZhbHVlcworICBQeUVsbGlwc2lzX1R5cGU9cHl0aG9uMzQuUHlFbGxpcHNpc19UeXBlIERBVEEKKyAgUHlFbnVtX1R5cGU9cHl0aG9uMzQuUHlFbnVtX1R5cGUgREFUQQorICBQeUVycl9CYWRBcmd1bWVudD1weXRob24zNC5QeUVycl9CYWRBcmd1bWVudAorICBQeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzQuUHlFcnJfQmFkSW50ZXJuYWxDYWxsCisgIFB5RXJyX0NoZWNrU2lnbmFscz1weXRob24zNC5QeUVycl9DaGVja1NpZ25hbHMKKyAgUHlFcnJfQ2xlYXI9cHl0aG9uMzQuUHlFcnJfQ2xlYXIKKyAgUHlFcnJfRGlzcGxheT1weXRob24zNC5QeUVycl9EaXNwbGF5CisgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXM9cHl0aG9uMzQuUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcworICBQeUVycl9GZXRjaD1weXRob24zNC5QeUVycl9GZXRjaAorICBQeUVycl9Gb3JtYXQ9cHl0aG9uMzQuUHlFcnJfRm9ybWF0CisgIFB5RXJyX0dpdmVuRXhjZXB0aW9uTWF0Y2hlcz1weXRob24zNC5QeUVycl9HaXZlbkV4Y2VwdGlvbk1hdGNoZXMKKyAgUHlFcnJfTmV3RXhjZXB0aW9uPXB5dGhvbjM0LlB5RXJyX05ld0V4Y2VwdGlvbgorICBQeUVycl9OZXdFeGNlcHRpb25XaXRoRG9jPXB5dGhvbjM0LlB5RXJyX05ld0V4Y2VwdGlvbldpdGhEb2MKKyAgUHlFcnJfTm9NZW1vcnk9cHl0aG9uMzQuUHlFcnJfTm9NZW1vcnkKKyAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uPXB5dGhvbjM0LlB5RXJyX05vcm1hbGl6ZUV4Y2VwdGlvbgorICBQeUVycl9PY2N1cnJlZD1weXRob24zNC5QeUVycl9PY2N1cnJlZAorICBQeUVycl9QcmludD1weXRob24zNC5QeUVycl9QcmludAorICBQeUVycl9QcmludEV4PXB5dGhvbjM0LlB5RXJyX1ByaW50RXgKKyAgUHlFcnJfUHJvZ3JhbVRleHQ9cHl0aG9uMzQuUHlFcnJfUHJvZ3JhbVRleHQKKyAgUHlFcnJfUmVzdG9yZT1weXRob24zNC5QeUVycl9SZXN0b3JlCisgIFB5RXJyX1NldEZyb21FcnJubz1weXRob24zNC5QeUVycl9TZXRGcm9tRXJybm8KKyAgUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lPXB5dGhvbjM0LlB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZQorICBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3Q9cHl0aG9uMzQuUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0CisgIFB5RXJyX1NldEludGVycnVwdD1weXRob24zNC5QeUVycl9TZXRJbnRlcnJ1cHQKKyAgUHlFcnJfU2V0Tm9uZT1weXRob24zNC5QeUVycl9TZXROb25lCisgIFB5RXJyX1NldE9iamVjdD1weXRob24zNC5QeUVycl9TZXRPYmplY3QKKyAgUHlFcnJfU2V0U3RyaW5nPXB5dGhvbjM0LlB5RXJyX1NldFN0cmluZworICBQeUVycl9TeW50YXhMb2NhdGlvbj1weXRob24zNC5QeUVycl9TeW50YXhMb2NhdGlvbgorICBQeUVycl9XYXJuRXg9cHl0aG9uMzQuUHlFcnJfV2FybkV4CisgIFB5RXJyX1dhcm5FeHBsaWNpdD1weXRob24zNC5QeUVycl9XYXJuRXhwbGljaXQKKyAgUHlFcnJfV2FybkZvcm1hdD1weXRob24zNC5QeUVycl9XYXJuRm9ybWF0CisgIFB5RXJyX1dyaXRlVW5yYWlzYWJsZT1weXRob24zNC5QeUVycl9Xcml0ZVVucmFpc2FibGUKKyAgUHlFdmFsX0FjcXVpcmVMb2NrPXB5dGhvbjM0LlB5RXZhbF9BY3F1aXJlTG9jaworICBQeUV2YWxfQWNxdWlyZVRocmVhZD1weXRob24zNC5QeUV2YWxfQWNxdWlyZVRocmVhZAorICBQeUV2YWxfQ2FsbEZ1bmN0aW9uPXB5dGhvbjM0LlB5RXZhbF9DYWxsRnVuY3Rpb24KKyAgUHlFdmFsX0NhbGxNZXRob2Q9cHl0aG9uMzQuUHlFdmFsX0NhbGxNZXRob2QKKyAgUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHM9cHl0aG9uMzQuUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMKKyAgUHlFdmFsX0V2YWxDb2RlPXB5dGhvbjM0LlB5RXZhbF9FdmFsQ29kZQorICBQeUV2YWxfRXZhbENvZGVFeD1weXRob24zNC5QeUV2YWxfRXZhbENvZGVFeAorICBQeUV2YWxfRXZhbEZyYW1lPXB5dGhvbjM0LlB5RXZhbF9FdmFsRnJhbWUKKyAgUHlFdmFsX0V2YWxGcmFtZUV4PXB5dGhvbjM0LlB5RXZhbF9FdmFsRnJhbWVFeAorICBQeUV2YWxfR2V0QnVpbHRpbnM9cHl0aG9uMzQuUHlFdmFsX0dldEJ1aWx0aW5zCisgIFB5RXZhbF9HZXRDYWxsU3RhdHM9cHl0aG9uMzQuUHlFdmFsX0dldENhbGxTdGF0cworICBQeUV2YWxfR2V0RnJhbWU9cHl0aG9uMzQuUHlFdmFsX0dldEZyYW1lCisgIFB5RXZhbF9HZXRGdW5jRGVzYz1weXRob24zNC5QeUV2YWxfR2V0RnVuY0Rlc2MKKyAgUHlFdmFsX0dldEZ1bmNOYW1lPXB5dGhvbjM0LlB5RXZhbF9HZXRGdW5jTmFtZQorICBQeUV2YWxfR2V0R2xvYmFscz1weXRob24zNC5QeUV2YWxfR2V0R2xvYmFscworICBQeUV2YWxfR2V0TG9jYWxzPXB5dGhvbjM0LlB5RXZhbF9HZXRMb2NhbHMKKyAgUHlFdmFsX0luaXRUaHJlYWRzPXB5dGhvbjM0LlB5RXZhbF9Jbml0VGhyZWFkcworICBQeUV2YWxfUmVJbml0VGhyZWFkcz1weXRob24zNC5QeUV2YWxfUmVJbml0VGhyZWFkcworICBQeUV2YWxfUmVsZWFzZUxvY2s9cHl0aG9uMzQuUHlFdmFsX1JlbGVhc2VMb2NrCisgIFB5RXZhbF9SZWxlYXNlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9SZWxlYXNlVGhyZWFkCisgIFB5RXZhbF9SZXN0b3JlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9SZXN0b3JlVGhyZWFkCisgIFB5RXZhbF9TYXZlVGhyZWFkPXB5dGhvbjM0LlB5RXZhbF9TYXZlVGhyZWFkCisgIFB5RXZhbF9UaHJlYWRzSW5pdGlhbGl6ZWQ9cHl0aG9uMzQuUHlFdmFsX1RocmVhZHNJbml0aWFsaXplZAorICBQeUV4Y19Bcml0aG1ldGljRXJyb3I9cHl0aG9uMzQuUHlFeGNfQXJpdGhtZXRpY0Vycm9yIERBVEEKKyAgUHlFeGNfQXNzZXJ0aW9uRXJyb3I9cHl0aG9uMzQuUHlFeGNfQXNzZXJ0aW9uRXJyb3IgREFUQQorICBQeUV4Y19BdHRyaWJ1dGVFcnJvcj1weXRob24zNC5QeUV4Y19BdHRyaWJ1dGVFcnJvciBEQVRBCisgIFB5RXhjX0Jhc2VFeGNlcHRpb249cHl0aG9uMzQuUHlFeGNfQmFzZUV4Y2VwdGlvbiBEQVRBCisgIFB5RXhjX0J1ZmZlckVycm9yPXB5dGhvbjM0LlB5RXhjX0J1ZmZlckVycm9yIERBVEEKKyAgUHlFeGNfQnl0ZXNXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0J5dGVzV2FybmluZyBEQVRBCisgIFB5RXhjX0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zNC5QeUV4Y19EZXByZWNhdGlvbldhcm5pbmcgREFUQQorICBQeUV4Y19FT0ZFcnJvcj1weXRob24zNC5QeUV4Y19FT0ZFcnJvciBEQVRBCisgIFB5RXhjX0Vudmlyb25tZW50RXJyb3I9cHl0aG9uMzQuUHlFeGNfRW52aXJvbm1lbnRFcnJvciBEQVRBCisgIFB5RXhjX0V4Y2VwdGlvbj1weXRob24zNC5QeUV4Y19FeGNlcHRpb24gREFUQQorICBQeUV4Y19GbG9hdGluZ1BvaW50RXJyb3I9cHl0aG9uMzQuUHlFeGNfRmxvYXRpbmdQb2ludEVycm9yIERBVEEKKyAgUHlFeGNfRnV0dXJlV2FybmluZz1weXRob24zNC5QeUV4Y19GdXR1cmVXYXJuaW5nIERBVEEKKyAgUHlFeGNfR2VuZXJhdG9yRXhpdD1weXRob24zNC5QeUV4Y19HZW5lcmF0b3JFeGl0IERBVEEKKyAgUHlFeGNfSU9FcnJvcj1weXRob24zNC5QeUV4Y19JT0Vycm9yIERBVEEKKyAgUHlFeGNfSW1wb3J0RXJyb3I9cHl0aG9uMzQuUHlFeGNfSW1wb3J0RXJyb3IgREFUQQorICBQeUV4Y19JbXBvcnRXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX0ltcG9ydFdhcm5pbmcgREFUQQorICBQeUV4Y19JbmRlbnRhdGlvbkVycm9yPXB5dGhvbjM0LlB5RXhjX0luZGVudGF0aW9uRXJyb3IgREFUQQorICBQeUV4Y19JbmRleEVycm9yPXB5dGhvbjM0LlB5RXhjX0luZGV4RXJyb3IgREFUQQorICBQeUV4Y19LZXlFcnJvcj1weXRob24zNC5QeUV4Y19LZXlFcnJvciBEQVRBCisgIFB5RXhjX0tleWJvYXJkSW50ZXJydXB0PXB5dGhvbjM0LlB5RXhjX0tleWJvYXJkSW50ZXJydXB0IERBVEEKKyAgUHlFeGNfTG9va3VwRXJyb3I9cHl0aG9uMzQuUHlFeGNfTG9va3VwRXJyb3IgREFUQQorICBQeUV4Y19NZW1vcnlFcnJvcj1weXRob24zNC5QeUV4Y19NZW1vcnlFcnJvciBEQVRBCisgIFB5RXhjX01lbW9yeUVycm9ySW5zdD1weXRob24zNC5QeUV4Y19NZW1vcnlFcnJvckluc3QgREFUQQorICBQeUV4Y19OYW1lRXJyb3I9cHl0aG9uMzQuUHlFeGNfTmFtZUVycm9yIERBVEEKKyAgUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvcj1weXRob24zNC5QeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yIERBVEEKKyAgUHlFeGNfT1NFcnJvcj1weXRob24zNC5QeUV4Y19PU0Vycm9yIERBVEEKKyAgUHlFeGNfT3ZlcmZsb3dFcnJvcj1weXRob24zNC5QeUV4Y19PdmVyZmxvd0Vycm9yIERBVEEKKyAgUHlFeGNfUGVuZGluZ0RlcHJlY2F0aW9uV2FybmluZz1weXRob24zNC5QeUV4Y19QZW5kaW5nRGVwcmVjYXRpb25XYXJuaW5nIERBVEEKKyAgUHlFeGNfUmVjdXJzaW9uRXJyb3JJbnN0PXB5dGhvbjM0LlB5RXhjX1JlY3Vyc2lvbkVycm9ySW5zdCBEQVRBCisgIFB5RXhjX1JlZmVyZW5jZUVycm9yPXB5dGhvbjM0LlB5RXhjX1JlZmVyZW5jZUVycm9yIERBVEEKKyAgUHlFeGNfUnVudGltZUVycm9yPXB5dGhvbjM0LlB5RXhjX1J1bnRpbWVFcnJvciBEQVRBCisgIFB5RXhjX1J1bnRpbWVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1J1bnRpbWVXYXJuaW5nIERBVEEKKyAgUHlFeGNfU3RvcEl0ZXJhdGlvbj1weXRob24zNC5QeUV4Y19TdG9wSXRlcmF0aW9uIERBVEEKKyAgUHlFeGNfU3ludGF4RXJyb3I9cHl0aG9uMzQuUHlFeGNfU3ludGF4RXJyb3IgREFUQQorICBQeUV4Y19TeW50YXhXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1N5bnRheFdhcm5pbmcgREFUQQorICBQeUV4Y19TeXN0ZW1FcnJvcj1weXRob24zNC5QeUV4Y19TeXN0ZW1FcnJvciBEQVRBCisgIFB5RXhjX1N5c3RlbUV4aXQ9cHl0aG9uMzQuUHlFeGNfU3lzdGVtRXhpdCBEQVRBCisgIFB5RXhjX1RhYkVycm9yPXB5dGhvbjM0LlB5RXhjX1RhYkVycm9yIERBVEEKKyAgUHlFeGNfVHlwZUVycm9yPXB5dGhvbjM0LlB5RXhjX1R5cGVFcnJvciBEQVRBCisgIFB5RXhjX1VuYm91bmRMb2NhbEVycm9yPXB5dGhvbjM0LlB5RXhjX1VuYm91bmRMb2NhbEVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZURlY29kZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcj1weXRob24zNC5QeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IgREFUQQorICBQeUV4Y19Vbmljb2RlRXJyb3I9cHl0aG9uMzQuUHlFeGNfVW5pY29kZUVycm9yIERBVEEKKyAgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvciBEQVRBCisgIFB5RXhjX1VuaWNvZGVXYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1VuaWNvZGVXYXJuaW5nIERBVEEKKyAgUHlFeGNfVXNlcldhcm5pbmc9cHl0aG9uMzQuUHlFeGNfVXNlcldhcm5pbmcgREFUQQorICBQeUV4Y19WYWx1ZUVycm9yPXB5dGhvbjM0LlB5RXhjX1ZhbHVlRXJyb3IgREFUQQorICBQeUV4Y19XYXJuaW5nPXB5dGhvbjM0LlB5RXhjX1dhcm5pbmcgREFUQQorICBQeUV4Y19aZXJvRGl2aXNpb25FcnJvcj1weXRob24zNC5QeUV4Y19aZXJvRGl2aXNpb25FcnJvciBEQVRBCisgIFB5RXhjZXB0aW9uX0dldENhdXNlPXB5dGhvbjM0LlB5RXhjZXB0aW9uX0dldENhdXNlCisgIFB5RXhjZXB0aW9uX0dldENvbnRleHQ9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9HZXRUcmFjZWJhY2s9cHl0aG9uMzQuUHlFeGNlcHRpb25fR2V0VHJhY2ViYWNrCisgIFB5RXhjZXB0aW9uX1NldENhdXNlPXB5dGhvbjM0LlB5RXhjZXB0aW9uX1NldENhdXNlCisgIFB5RXhjZXB0aW9uX1NldENvbnRleHQ9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0Q29udGV4dAorICBQeUV4Y2VwdGlvbl9TZXRUcmFjZWJhY2s9cHl0aG9uMzQuUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrCisgIFB5RmlsZV9Gcm9tRmQ9cHl0aG9uMzQuUHlGaWxlX0Zyb21GZAorICBQeUZpbGVfR2V0TGluZT1weXRob24zNC5QeUZpbGVfR2V0TGluZQorICBQeUZpbGVfV3JpdGVPYmplY3Q9cHl0aG9uMzQuUHlGaWxlX1dyaXRlT2JqZWN0CisgIFB5RmlsZV9Xcml0ZVN0cmluZz1weXRob24zNC5QeUZpbGVfV3JpdGVTdHJpbmcKKyAgUHlGaWx0ZXJfVHlwZT1weXRob24zNC5QeUZpbHRlcl9UeXBlIERBVEEKKyAgUHlGbG9hdF9Bc0RvdWJsZT1weXRob24zNC5QeUZsb2F0X0FzRG91YmxlCisgIFB5RmxvYXRfRnJvbURvdWJsZT1weXRob24zNC5QeUZsb2F0X0Zyb21Eb3VibGUKKyAgUHlGbG9hdF9Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5RmxvYXRfRnJvbVN0cmluZworICBQeUZsb2F0X0dldEluZm89cHl0aG9uMzQuUHlGbG9hdF9HZXRJbmZvCisgIFB5RmxvYXRfR2V0TWF4PXB5dGhvbjM0LlB5RmxvYXRfR2V0TWF4CisgIFB5RmxvYXRfR2V0TWluPXB5dGhvbjM0LlB5RmxvYXRfR2V0TWluCisgIFB5RmxvYXRfVHlwZT1weXRob24zNC5QeUZsb2F0X1R5cGUgREFUQQorICBQeUZyb3plblNldF9OZXc9cHl0aG9uMzQuUHlGcm96ZW5TZXRfTmV3CisgIFB5RnJvemVuU2V0X1R5cGU9cHl0aG9uMzQuUHlGcm96ZW5TZXRfVHlwZSBEQVRBCisgIFB5R0NfQ29sbGVjdD1weXRob24zNC5QeUdDX0NvbGxlY3QKKyAgUHlHSUxTdGF0ZV9FbnN1cmU9cHl0aG9uMzQuUHlHSUxTdGF0ZV9FbnN1cmUKKyAgUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGU9cHl0aG9uMzQuUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUKKyAgUHlHSUxTdGF0ZV9SZWxlYXNlPXB5dGhvbjM0LlB5R0lMU3RhdGVfUmVsZWFzZQorICBQeUdldFNldERlc2NyX1R5cGU9cHl0aG9uMzQuUHlHZXRTZXREZXNjcl9UeXBlIERBVEEKKyAgUHlJbXBvcnRfQWRkTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0FkZE1vZHVsZQorICBQeUltcG9ydF9BcHBlbmRJbml0dGFiPXB5dGhvbjM0LlB5SW1wb3J0X0FwcGVuZEluaXR0YWIKKyAgUHlJbXBvcnRfQ2xlYW51cD1weXRob24zNC5QeUltcG9ydF9DbGVhbnVwCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlCisgIFB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXg9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVFeAorICBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXM9cHl0aG9uMzQuUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzCisgIFB5SW1wb3J0X0dldEltcG9ydGVyPXB5dGhvbjM0LlB5SW1wb3J0X0dldEltcG9ydGVyCisgIFB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyPXB5dGhvbjM0LlB5SW1wb3J0X0dldE1hZ2ljTnVtYmVyCisgIFB5SW1wb3J0X0dldE1hZ2ljVGFnPXB5dGhvbjM0LlB5SW1wb3J0X0dldE1hZ2ljVGFnCisgIFB5SW1wb3J0X0dldE1vZHVsZURpY3Q9cHl0aG9uMzQuUHlJbXBvcnRfR2V0TW9kdWxlRGljdAorICBQeUltcG9ydF9JbXBvcnQ9cHl0aG9uMzQuUHlJbXBvcnRfSW1wb3J0CisgIFB5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZT1weXRob24zNC5QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUKKyAgUHlJbXBvcnRfSW1wb3J0TW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZQorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbD1weXRob24zNC5QeUltcG9ydF9JbXBvcnRNb2R1bGVMZXZlbAorICBQeUltcG9ydF9JbXBvcnRNb2R1bGVOb0Jsb2NrPXB5dGhvbjM0LlB5SW1wb3J0X0ltcG9ydE1vZHVsZU5vQmxvY2sKKyAgUHlJbXBvcnRfUmVsb2FkTW9kdWxlPXB5dGhvbjM0LlB5SW1wb3J0X1JlbG9hZE1vZHVsZQorICBQeUludGVycHJldGVyU3RhdGVfQ2xlYXI9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX0NsZWFyCisgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU9cHl0aG9uMzQuUHlJbnRlcnByZXRlclN0YXRlX0RlbGV0ZQorICBQeUludGVycHJldGVyU3RhdGVfTmV3PXB5dGhvbjM0LlB5SW50ZXJwcmV0ZXJTdGF0ZV9OZXcKKyAgUHlJdGVyX05leHQ9cHl0aG9uMzQuUHlJdGVyX05leHQKKyAgUHlMaXN0SXRlcl9UeXBlPXB5dGhvbjM0LlB5TGlzdEl0ZXJfVHlwZSBEQVRBCisgIFB5TGlzdFJldkl0ZXJfVHlwZT1weXRob24zNC5QeUxpc3RSZXZJdGVyX1R5cGUgREFUQQorICBQeUxpc3RfQXBwZW5kPXB5dGhvbjM0LlB5TGlzdF9BcHBlbmQKKyAgUHlMaXN0X0FzVHVwbGU9cHl0aG9uMzQuUHlMaXN0X0FzVHVwbGUKKyAgUHlMaXN0X0dldEl0ZW09cHl0aG9uMzQuUHlMaXN0X0dldEl0ZW0KKyAgUHlMaXN0X0dldFNsaWNlPXB5dGhvbjM0LlB5TGlzdF9HZXRTbGljZQorICBQeUxpc3RfSW5zZXJ0PXB5dGhvbjM0LlB5TGlzdF9JbnNlcnQKKyAgUHlMaXN0X05ldz1weXRob24zNC5QeUxpc3RfTmV3CisgIFB5TGlzdF9SZXZlcnNlPXB5dGhvbjM0LlB5TGlzdF9SZXZlcnNlCisgIFB5TGlzdF9TZXRJdGVtPXB5dGhvbjM0LlB5TGlzdF9TZXRJdGVtCisgIFB5TGlzdF9TZXRTbGljZT1weXRob24zNC5QeUxpc3RfU2V0U2xpY2UKKyAgUHlMaXN0X1NpemU9cHl0aG9uMzQuUHlMaXN0X1NpemUKKyAgUHlMaXN0X1NvcnQ9cHl0aG9uMzQuUHlMaXN0X1NvcnQKKyAgUHlMaXN0X1R5cGU9cHl0aG9uMzQuUHlMaXN0X1R5cGUgREFUQQorICBQeUxvbmdSYW5nZUl0ZXJfVHlwZT1weXRob24zNC5QeUxvbmdSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5TG9uZ19Bc0RvdWJsZT1weXRob24zNC5QeUxvbmdfQXNEb3VibGUKKyAgUHlMb25nX0FzTG9uZz1weXRob24zNC5QeUxvbmdfQXNMb25nCisgIFB5TG9uZ19Bc0xvbmdBbmRPdmVyZmxvdz1weXRob24zNC5QeUxvbmdfQXNMb25nQW5kT3ZlcmZsb3cKKyAgUHlMb25nX0FzTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0FzTG9uZ0xvbmcKKyAgUHlMb25nX0FzTG9uZ0xvbmdBbmRPdmVyZmxvdz1weXRob24zNC5QeUxvbmdfQXNMb25nTG9uZ0FuZE92ZXJmbG93CisgIFB5TG9uZ19Bc1NpemVfdD1weXRob24zNC5QeUxvbmdfQXNTaXplX3QKKyAgUHlMb25nX0FzU3NpemVfdD1weXRob24zNC5QeUxvbmdfQXNTc2l6ZV90CisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmcKKyAgUHlMb25nX0FzVW5zaWduZWRMb25nTG9uZz1weXRob24zNC5QeUxvbmdfQXNVbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrPXB5dGhvbjM0LlB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ0xvbmdNYXNrCisgIFB5TG9uZ19Bc1Vuc2lnbmVkTG9uZ01hc2s9cHl0aG9uMzQuUHlMb25nX0FzVW5zaWduZWRMb25nTWFzaworICBQeUxvbmdfQXNWb2lkUHRyPXB5dGhvbjM0LlB5TG9uZ19Bc1ZvaWRQdHIKKyAgUHlMb25nX0Zyb21Eb3VibGU9cHl0aG9uMzQuUHlMb25nX0Zyb21Eb3VibGUKKyAgUHlMb25nX0Zyb21Mb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tTG9uZworICBQeUxvbmdfRnJvbUxvbmdMb25nPXB5dGhvbjM0LlB5TG9uZ19Gcm9tTG9uZ0xvbmcKKyAgUHlMb25nX0Zyb21TaXplX3Q9cHl0aG9uMzQuUHlMb25nX0Zyb21TaXplX3QKKyAgUHlMb25nX0Zyb21Tc2l6ZV90PXB5dGhvbjM0LlB5TG9uZ19Gcm9tU3NpemVfdAorICBQeUxvbmdfRnJvbVN0cmluZz1weXRob24zNC5QeUxvbmdfRnJvbVN0cmluZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZz1weXRob24zNC5QeUxvbmdfRnJvbVVuc2lnbmVkTG9uZworICBQeUxvbmdfRnJvbVVuc2lnbmVkTG9uZ0xvbmc9cHl0aG9uMzQuUHlMb25nX0Zyb21VbnNpZ25lZExvbmdMb25nCisgIFB5TG9uZ19Gcm9tVm9pZFB0cj1weXRob24zNC5QeUxvbmdfRnJvbVZvaWRQdHIKKyAgUHlMb25nX0dldEluZm89cHl0aG9uMzQuUHlMb25nX0dldEluZm8KKyAgUHlMb25nX1R5cGU9cHl0aG9uMzQuUHlMb25nX1R5cGUgREFUQQorICBQeU1hcF9UeXBlPXB5dGhvbjM0LlB5TWFwX1R5cGUgREFUQQorICBQeU1hcHBpbmdfQ2hlY2s9cHl0aG9uMzQuUHlNYXBwaW5nX0NoZWNrCisgIFB5TWFwcGluZ19HZXRJdGVtU3RyaW5nPXB5dGhvbjM0LlB5TWFwcGluZ19HZXRJdGVtU3RyaW5nCisgIFB5TWFwcGluZ19IYXNLZXk9cHl0aG9uMzQuUHlNYXBwaW5nX0hhc0tleQorICBQeU1hcHBpbmdfSGFzS2V5U3RyaW5nPXB5dGhvbjM0LlB5TWFwcGluZ19IYXNLZXlTdHJpbmcKKyAgUHlNYXBwaW5nX0l0ZW1zPXB5dGhvbjM0LlB5TWFwcGluZ19JdGVtcworICBQeU1hcHBpbmdfS2V5cz1weXRob24zNC5QeU1hcHBpbmdfS2V5cworICBQeU1hcHBpbmdfTGVuZ3RoPXB5dGhvbjM0LlB5TWFwcGluZ19MZW5ndGgKKyAgUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlNYXBwaW5nX1NldEl0ZW1TdHJpbmcKKyAgUHlNYXBwaW5nX1NpemU9cHl0aG9uMzQuUHlNYXBwaW5nX1NpemUKKyAgUHlNYXBwaW5nX1ZhbHVlcz1weXRob24zNC5QeU1hcHBpbmdfVmFsdWVzCisgIFB5TWVtX0ZyZWU9cHl0aG9uMzQuUHlNZW1fRnJlZQorICBQeU1lbV9NYWxsb2M9cHl0aG9uMzQuUHlNZW1fTWFsbG9jCisgIFB5TWVtX1JlYWxsb2M9cHl0aG9uMzQuUHlNZW1fUmVhbGxvYworICBQeU1lbWJlckRlc2NyX1R5cGU9cHl0aG9uMzQuUHlNZW1iZXJEZXNjcl9UeXBlIERBVEEKKyAgUHlNZW1vcnlWaWV3X0Zyb21PYmplY3Q9cHl0aG9uMzQuUHlNZW1vcnlWaWV3X0Zyb21PYmplY3QKKyAgUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXM9cHl0aG9uMzQuUHlNZW1vcnlWaWV3X0dldENvbnRpZ3VvdXMKKyAgUHlNZW1vcnlWaWV3X1R5cGU9cHl0aG9uMzQuUHlNZW1vcnlWaWV3X1R5cGUgREFUQQorICBQeU1ldGhvZERlc2NyX1R5cGU9cHl0aG9uMzQuUHlNZXRob2REZXNjcl9UeXBlIERBVEEKKyAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQ9cHl0aG9uMzQuUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQKKyAgUHlNb2R1bGVfQWRkT2JqZWN0PXB5dGhvbjM0LlB5TW9kdWxlX0FkZE9iamVjdAorICBQeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudD1weXRob24zNC5QeU1vZHVsZV9BZGRTdHJpbmdDb25zdGFudAorICBQeU1vZHVsZV9DcmVhdGUyPXB5dGhvbjM0LlB5TW9kdWxlX0NyZWF0ZTIKKyAgUHlNb2R1bGVfR2V0RGVmPXB5dGhvbjM0LlB5TW9kdWxlX0dldERlZgorICBQeU1vZHVsZV9HZXREaWN0PXB5dGhvbjM0LlB5TW9kdWxlX0dldERpY3QKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWU9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RmlsZW5hbWUKKyAgUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3Q9cHl0aG9uMzQuUHlNb2R1bGVfR2V0RmlsZW5hbWVPYmplY3QKKyAgUHlNb2R1bGVfR2V0TmFtZT1weXRob24zNC5QeU1vZHVsZV9HZXROYW1lCisgIFB5TW9kdWxlX0dldFN0YXRlPXB5dGhvbjM0LlB5TW9kdWxlX0dldFN0YXRlCisgIFB5TW9kdWxlX05ldz1weXRob24zNC5QeU1vZHVsZV9OZXcKKyAgUHlNb2R1bGVfVHlwZT1weXRob24zNC5QeU1vZHVsZV9UeXBlIERBVEEKKyAgUHlOdWxsSW1wb3J0ZXJfVHlwZT1weXRob24zNC5QeU51bGxJbXBvcnRlcl9UeXBlIERBVEEKKyAgUHlOdW1iZXJfQWJzb2x1dGU9cHl0aG9uMzQuUHlOdW1iZXJfQWJzb2x1dGUKKyAgUHlOdW1iZXJfQWRkPXB5dGhvbjM0LlB5TnVtYmVyX0FkZAorICBQeU51bWJlcl9BbmQ9cHl0aG9uMzQuUHlOdW1iZXJfQW5kCisgIFB5TnVtYmVyX0FzU3NpemVfdD1weXRob24zNC5QeU51bWJlcl9Bc1NzaXplX3QKKyAgUHlOdW1iZXJfQ2hlY2s9cHl0aG9uMzQuUHlOdW1iZXJfQ2hlY2sKKyAgUHlOdW1iZXJfRGl2bW9kPXB5dGhvbjM0LlB5TnVtYmVyX0Rpdm1vZAorICBQeU51bWJlcl9GbG9hdD1weXRob24zNC5QeU51bWJlcl9GbG9hdAorICBQeU51bWJlcl9GbG9vckRpdmlkZT1weXRob24zNC5QeU51bWJlcl9GbG9vckRpdmlkZQorICBQeU51bWJlcl9JblBsYWNlQWRkPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VBZGQKKyAgUHlOdW1iZXJfSW5QbGFjZUFuZD1weXRob24zNC5QeU51bWJlcl9JblBsYWNlQW5kCisgIFB5TnVtYmVyX0luUGxhY2VGbG9vckRpdmlkZT1weXRob24zNC5QeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUKKyAgUHlOdW1iZXJfSW5QbGFjZUxzaGlmdD1weXRob24zNC5QeU51bWJlcl9JblBsYWNlTHNoaWZ0CisgIFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseT1weXRob24zNC5QeU51bWJlcl9JblBsYWNlTXVsdGlwbHkKKyAgUHlOdW1iZXJfSW5QbGFjZU9yPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VPcgorICBQeU51bWJlcl9JblBsYWNlUG93ZXI9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVBvd2VyCisgIFB5TnVtYmVyX0luUGxhY2VSZW1haW5kZXI9cHl0aG9uMzQuUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcgorICBQeU51bWJlcl9JblBsYWNlUnNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VSc2hpZnQKKyAgUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0PXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VTdWJ0cmFjdAorICBQeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZT1weXRob24zNC5QeU51bWJlcl9JblBsYWNlVHJ1ZURpdmlkZQorICBQeU51bWJlcl9JblBsYWNlWG9yPXB5dGhvbjM0LlB5TnVtYmVyX0luUGxhY2VYb3IKKyAgUHlOdW1iZXJfSW5kZXg9cHl0aG9uMzQuUHlOdW1iZXJfSW5kZXgKKyAgUHlOdW1iZXJfSW52ZXJ0PXB5dGhvbjM0LlB5TnVtYmVyX0ludmVydAorICBQeU51bWJlcl9Mb25nPXB5dGhvbjM0LlB5TnVtYmVyX0xvbmcKKyAgUHlOdW1iZXJfTHNoaWZ0PXB5dGhvbjM0LlB5TnVtYmVyX0xzaGlmdAorICBQeU51bWJlcl9NdWx0aXBseT1weXRob24zNC5QeU51bWJlcl9NdWx0aXBseQorICBQeU51bWJlcl9OZWdhdGl2ZT1weXRob24zNC5QeU51bWJlcl9OZWdhdGl2ZQorICBQeU51bWJlcl9Pcj1weXRob24zNC5QeU51bWJlcl9PcgorICBQeU51bWJlcl9Qb3NpdGl2ZT1weXRob24zNC5QeU51bWJlcl9Qb3NpdGl2ZQorICBQeU51bWJlcl9Qb3dlcj1weXRob24zNC5QeU51bWJlcl9Qb3dlcgorICBQeU51bWJlcl9SZW1haW5kZXI9cHl0aG9uMzQuUHlOdW1iZXJfUmVtYWluZGVyCisgIFB5TnVtYmVyX1JzaGlmdD1weXRob24zNC5QeU51bWJlcl9Sc2hpZnQKKyAgUHlOdW1iZXJfU3VidHJhY3Q9cHl0aG9uMzQuUHlOdW1iZXJfU3VidHJhY3QKKyAgUHlOdW1iZXJfVG9CYXNlPXB5dGhvbjM0LlB5TnVtYmVyX1RvQmFzZQorICBQeU51bWJlcl9UcnVlRGl2aWRlPXB5dGhvbjM0LlB5TnVtYmVyX1RydWVEaXZpZGUKKyAgUHlOdW1iZXJfWG9yPXB5dGhvbjM0LlB5TnVtYmVyX1hvcgorICBQeU9TX0FmdGVyRm9yaz1weXRob24zNC5QeU9TX0FmdGVyRm9yaworICBQeU9TX0luaXRJbnRlcnJ1cHRzPXB5dGhvbjM0LlB5T1NfSW5pdEludGVycnVwdHMKKyAgUHlPU19JbnB1dEhvb2s9cHl0aG9uMzQuUHlPU19JbnB1dEhvb2sgREFUQQorICBQeU9TX0ludGVycnVwdE9jY3VycmVkPXB5dGhvbjM0LlB5T1NfSW50ZXJydXB0T2NjdXJyZWQKKyAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcj1weXRob24zNC5QeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyIERBVEEKKyAgUHlPU19kb3VibGVfdG9fc3RyaW5nPXB5dGhvbjM0LlB5T1NfZG91YmxlX3RvX3N0cmluZworICBQeU9TX2dldHNpZz1weXRob24zNC5QeU9TX2dldHNpZworICBQeU9TX215c3RyaWNtcD1weXRob24zNC5QeU9TX215c3RyaWNtcAorICBQeU9TX215c3RybmljbXA9cHl0aG9uMzQuUHlPU19teXN0cm5pY21wCisgIFB5T1Nfc2V0c2lnPXB5dGhvbjM0LlB5T1Nfc2V0c2lnCisgIFB5T1Nfc25wcmludGY9cHl0aG9uMzQuUHlPU19zbnByaW50ZgorICBQeU9TX3N0cmluZ190b19kb3VibGU9cHl0aG9uMzQuUHlPU19zdHJpbmdfdG9fZG91YmxlCisgIFB5T1Nfc3RydG9sPXB5dGhvbjM0LlB5T1Nfc3RydG9sCisgIFB5T1Nfc3RydG91bD1weXRob24zNC5QeU9TX3N0cnRvdWwKKyAgUHlPU192c25wcmludGY9cHl0aG9uMzQuUHlPU192c25wcmludGYKKyAgUHlPYmplY3RfQVNDSUk9cHl0aG9uMzQuUHlPYmplY3RfQVNDSUkKKyAgUHlPYmplY3RfQXNDaGFyQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0FzQ2hhckJ1ZmZlcgorICBQeU9iamVjdF9Bc0ZpbGVEZXNjcmlwdG9yPXB5dGhvbjM0LlB5T2JqZWN0X0FzRmlsZURlc2NyaXB0b3IKKyAgUHlPYmplY3RfQXNSZWFkQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0FzUmVhZEJ1ZmZlcgorICBQeU9iamVjdF9Bc1dyaXRlQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0FzV3JpdGVCdWZmZXIKKyAgUHlPYmplY3RfQnl0ZXM9cHl0aG9uMzQuUHlPYmplY3RfQnl0ZXMKKyAgUHlPYmplY3RfQ2FsbD1weXRob24zNC5QeU9iamVjdF9DYWxsCisgIFB5T2JqZWN0X0NhbGxGdW5jdGlvbj1weXRob24zNC5QeU9iamVjdF9DYWxsRnVuY3Rpb24KKyAgUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncz1weXRob24zNC5QeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzCisgIFB5T2JqZWN0X0NhbGxNZXRob2Q9cHl0aG9uMzQuUHlPYmplY3RfQ2FsbE1ldGhvZAorICBQeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncz1weXRob24zNC5QeU9iamVjdF9DYWxsTWV0aG9kT2JqQXJncworICBQeU9iamVjdF9DYWxsT2JqZWN0PXB5dGhvbjM0LlB5T2JqZWN0X0NhbGxPYmplY3QKKyAgUHlPYmplY3RfQ2hlY2tSZWFkQnVmZmVyPXB5dGhvbjM0LlB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcgorICBQeU9iamVjdF9DbGVhcldlYWtSZWZzPXB5dGhvbjM0LlB5T2JqZWN0X0NsZWFyV2Vha1JlZnMKKyAgUHlPYmplY3RfRGVsSXRlbT1weXRob24zNC5QeU9iamVjdF9EZWxJdGVtCisgIFB5T2JqZWN0X0RlbEl0ZW1TdHJpbmc9cHl0aG9uMzQuUHlPYmplY3RfRGVsSXRlbVN0cmluZworICBQeU9iamVjdF9EaXI9cHl0aG9uMzQuUHlPYmplY3RfRGlyCisgIFB5T2JqZWN0X0Zvcm1hdD1weXRob24zNC5QeU9iamVjdF9Gb3JtYXQKKyAgUHlPYmplY3RfRnJlZT1weXRob24zNC5QeU9iamVjdF9GcmVlCisgIFB5T2JqZWN0X0dDX0RlbD1weXRob24zNC5QeU9iamVjdF9HQ19EZWwKKyAgUHlPYmplY3RfR0NfVHJhY2s9cHl0aG9uMzQuUHlPYmplY3RfR0NfVHJhY2sKKyAgUHlPYmplY3RfR0NfVW5UcmFjaz1weXRob24zNC5QeU9iamVjdF9HQ19VblRyYWNrCisgIFB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0dlbmVyaWNHZXRBdHRyCisgIFB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0dlbmVyaWNTZXRBdHRyCisgIFB5T2JqZWN0X0dldEF0dHI9cHl0aG9uMzQuUHlPYmplY3RfR2V0QXR0cgorICBQeU9iamVjdF9HZXRBdHRyU3RyaW5nPXB5dGhvbjM0LlB5T2JqZWN0X0dldEF0dHJTdHJpbmcKKyAgUHlPYmplY3RfR2V0SXRlbT1weXRob24zNC5QeU9iamVjdF9HZXRJdGVtCisgIFB5T2JqZWN0X0dldEl0ZXI9cHl0aG9uMzQuUHlPYmplY3RfR2V0SXRlcgorICBQeU9iamVjdF9IYXNBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X0hhc0F0dHIKKyAgUHlPYmplY3RfSGFzQXR0clN0cmluZz1weXRob24zNC5QeU9iamVjdF9IYXNBdHRyU3RyaW5nCisgIFB5T2JqZWN0X0hhc2g9cHl0aG9uMzQuUHlPYmplY3RfSGFzaAorICBQeU9iamVjdF9IYXNoTm90SW1wbGVtZW50ZWQ9cHl0aG9uMzQuUHlPYmplY3RfSGFzaE5vdEltcGxlbWVudGVkCisgIFB5T2JqZWN0X0luaXQ9cHl0aG9uMzQuUHlPYmplY3RfSW5pdAorICBQeU9iamVjdF9Jbml0VmFyPXB5dGhvbjM0LlB5T2JqZWN0X0luaXRWYXIKKyAgUHlPYmplY3RfSXNJbnN0YW5jZT1weXRob24zNC5QeU9iamVjdF9Jc0luc3RhbmNlCisgIFB5T2JqZWN0X0lzU3ViY2xhc3M9cHl0aG9uMzQuUHlPYmplY3RfSXNTdWJjbGFzcworICBQeU9iamVjdF9Jc1RydWU9cHl0aG9uMzQuUHlPYmplY3RfSXNUcnVlCisgIFB5T2JqZWN0X0xlbmd0aD1weXRob24zNC5QeU9iamVjdF9MZW5ndGgKKyAgUHlPYmplY3RfTWFsbG9jPXB5dGhvbjM0LlB5T2JqZWN0X01hbGxvYworICBQeU9iamVjdF9Ob3Q9cHl0aG9uMzQuUHlPYmplY3RfTm90CisgIFB5T2JqZWN0X1JlYWxsb2M9cHl0aG9uMzQuUHlPYmplY3RfUmVhbGxvYworICBQeU9iamVjdF9SZXByPXB5dGhvbjM0LlB5T2JqZWN0X1JlcHIKKyAgUHlPYmplY3RfUmljaENvbXBhcmU9cHl0aG9uMzQuUHlPYmplY3RfUmljaENvbXBhcmUKKyAgUHlPYmplY3RfUmljaENvbXBhcmVCb29sPXB5dGhvbjM0LlB5T2JqZWN0X1JpY2hDb21wYXJlQm9vbAorICBQeU9iamVjdF9TZWxmSXRlcj1weXRob24zNC5QeU9iamVjdF9TZWxmSXRlcgorICBQeU9iamVjdF9TZXRBdHRyPXB5dGhvbjM0LlB5T2JqZWN0X1NldEF0dHIKKyAgUHlPYmplY3RfU2V0QXR0clN0cmluZz1weXRob24zNC5QeU9iamVjdF9TZXRBdHRyU3RyaW5nCisgIFB5T2JqZWN0X1NldEl0ZW09cHl0aG9uMzQuUHlPYmplY3RfU2V0SXRlbQorICBQeU9iamVjdF9TaXplPXB5dGhvbjM0LlB5T2JqZWN0X1NpemUKKyAgUHlPYmplY3RfU3RyPXB5dGhvbjM0LlB5T2JqZWN0X1N0cgorICBQeU9iamVjdF9UeXBlPXB5dGhvbjM0LlB5T2JqZWN0X1R5cGUgREFUQQorICBQeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncz1weXRob24zNC5QeVBhcnNlcl9TaW1wbGVQYXJzZUZpbGVGbGFncworICBQeVBhcnNlcl9TaW1wbGVQYXJzZVN0cmluZ0ZsYWdzPXB5dGhvbjM0LlB5UGFyc2VyX1NpbXBsZVBhcnNlU3RyaW5nRmxhZ3MKKyAgUHlQcm9wZXJ0eV9UeXBlPXB5dGhvbjM0LlB5UHJvcGVydHlfVHlwZSBEQVRBCisgIFB5UmFuZ2VJdGVyX1R5cGU9cHl0aG9uMzQuUHlSYW5nZUl0ZXJfVHlwZSBEQVRBCisgIFB5UmFuZ2VfVHlwZT1weXRob24zNC5QeVJhbmdlX1R5cGUgREFUQQorICBQeVJldmVyc2VkX1R5cGU9cHl0aG9uMzQuUHlSZXZlcnNlZF9UeXBlIERBVEEKKyAgUHlTZXFJdGVyX05ldz1weXRob24zNC5QeVNlcUl0ZXJfTmV3CisgIFB5U2VxSXRlcl9UeXBlPXB5dGhvbjM0LlB5U2VxSXRlcl9UeXBlIERBVEEKKyAgUHlTZXF1ZW5jZV9DaGVjaz1weXRob24zNC5QeVNlcXVlbmNlX0NoZWNrCisgIFB5U2VxdWVuY2VfQ29uY2F0PXB5dGhvbjM0LlB5U2VxdWVuY2VfQ29uY2F0CisgIFB5U2VxdWVuY2VfQ29udGFpbnM9cHl0aG9uMzQuUHlTZXF1ZW5jZV9Db250YWlucworICBQeVNlcXVlbmNlX0NvdW50PXB5dGhvbjM0LlB5U2VxdWVuY2VfQ291bnQKKyAgUHlTZXF1ZW5jZV9EZWxJdGVtPXB5dGhvbjM0LlB5U2VxdWVuY2VfRGVsSXRlbQorICBQeVNlcXVlbmNlX0RlbFNsaWNlPXB5dGhvbjM0LlB5U2VxdWVuY2VfRGVsU2xpY2UKKyAgUHlTZXF1ZW5jZV9GYXN0PXB5dGhvbjM0LlB5U2VxdWVuY2VfRmFzdAorICBQeVNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzQuUHlTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U2VxdWVuY2VfR2V0U2xpY2U9cHl0aG9uMzQuUHlTZXF1ZW5jZV9HZXRTbGljZQorICBQeVNlcXVlbmNlX0luPXB5dGhvbjM0LlB5U2VxdWVuY2VfSW4KKyAgUHlTZXF1ZW5jZV9JblBsYWNlQ29uY2F0PXB5dGhvbjM0LlB5U2VxdWVuY2VfSW5QbGFjZUNvbmNhdAorICBQeVNlcXVlbmNlX0luUGxhY2VSZXBlYXQ9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JblBsYWNlUmVwZWF0CisgIFB5U2VxdWVuY2VfSW5kZXg9cHl0aG9uMzQuUHlTZXF1ZW5jZV9JbmRleAorICBQeVNlcXVlbmNlX0xlbmd0aD1weXRob24zNC5QeVNlcXVlbmNlX0xlbmd0aAorICBQeVNlcXVlbmNlX0xpc3Q9cHl0aG9uMzQuUHlTZXF1ZW5jZV9MaXN0CisgIFB5U2VxdWVuY2VfUmVwZWF0PXB5dGhvbjM0LlB5U2VxdWVuY2VfUmVwZWF0CisgIFB5U2VxdWVuY2VfU2V0SXRlbT1weXRob24zNC5QeVNlcXVlbmNlX1NldEl0ZW0KKyAgUHlTZXF1ZW5jZV9TZXRTbGljZT1weXRob24zNC5QeVNlcXVlbmNlX1NldFNsaWNlCisgIFB5U2VxdWVuY2VfU2l6ZT1weXRob24zNC5QeVNlcXVlbmNlX1NpemUKKyAgUHlTZXF1ZW5jZV9UdXBsZT1weXRob24zNC5QeVNlcXVlbmNlX1R1cGxlCisgIFB5U2V0SXRlcl9UeXBlPXB5dGhvbjM0LlB5U2V0SXRlcl9UeXBlIERBVEEKKyAgUHlTZXRfQWRkPXB5dGhvbjM0LlB5U2V0X0FkZAorICBQeVNldF9DbGVhcj1weXRob24zNC5QeVNldF9DbGVhcgorICBQeVNldF9Db250YWlucz1weXRob24zNC5QeVNldF9Db250YWlucworICBQeVNldF9EaXNjYXJkPXB5dGhvbjM0LlB5U2V0X0Rpc2NhcmQKKyAgUHlTZXRfTmV3PXB5dGhvbjM0LlB5U2V0X05ldworICBQeVNldF9Qb3A9cHl0aG9uMzQuUHlTZXRfUG9wCisgIFB5U2V0X1NpemU9cHl0aG9uMzQuUHlTZXRfU2l6ZQorICBQeVNldF9UeXBlPXB5dGhvbjM0LlB5U2V0X1R5cGUgREFUQQorICBQeVNsaWNlX0dldEluZGljZXM9cHl0aG9uMzQuUHlTbGljZV9HZXRJbmRpY2VzCisgIFB5U2xpY2VfR2V0SW5kaWNlc0V4PXB5dGhvbjM0LlB5U2xpY2VfR2V0SW5kaWNlc0V4CisgIFB5U2xpY2VfTmV3PXB5dGhvbjM0LlB5U2xpY2VfTmV3CisgIFB5U2xpY2VfVHlwZT1weXRob24zNC5QeVNsaWNlX1R5cGUgREFUQQorICBQeVNvcnRXcmFwcGVyX1R5cGU9cHl0aG9uMzQuUHlTb3J0V3JhcHBlcl9UeXBlIERBVEEKKyAgUHlTdGF0ZV9GaW5kTW9kdWxlPXB5dGhvbjM0LlB5U3RhdGVfRmluZE1vZHVsZQorICBQeVN0YXRlX0FkZE1vZHVsZT1weXRob24zNC5QeVN0YXRlX0FkZE1vZHVsZQorICBQeVN0YXRlX1JlbW92ZU1vZHVsZT1weXRob24zNC5QeVN0YXRlX1JlbW92ZU1vZHVsZQorICBQeVN0cnVjdFNlcXVlbmNlX0dldEl0ZW09cHl0aG9uMzQuUHlTdHJ1Y3RTZXF1ZW5jZV9HZXRJdGVtCisgIFB5U3RydWN0U2VxdWVuY2VfTmV3PXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfTmV3CisgIFB5U3RydWN0U2VxdWVuY2VfTmV3VHlwZT1weXRob24zNC5QeVN0cnVjdFNlcXVlbmNlX05ld1R5cGUKKyAgUHlTdHJ1Y3RTZXF1ZW5jZV9TZXRJdGVtPXB5dGhvbjM0LlB5U3RydWN0U2VxdWVuY2VfU2V0SXRlbQorICBQeVN1cGVyX1R5cGU9cHl0aG9uMzQuUHlTdXBlcl9UeXBlIERBVEEKKyAgUHlTeXNfQWRkV2Fybk9wdGlvbj1weXRob24zNC5QeVN5c19BZGRXYXJuT3B0aW9uCisgIFB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlPXB5dGhvbjM0LlB5U3lzX0FkZFdhcm5PcHRpb25Vbmljb2RlCisgIFB5U3lzX0Zvcm1hdFN0ZGVycj1weXRob24zNC5QeVN5c19Gb3JtYXRTdGRlcnIKKyAgUHlTeXNfRm9ybWF0U3Rkb3V0PXB5dGhvbjM0LlB5U3lzX0Zvcm1hdFN0ZG91dAorICBQeVN5c19HZXRPYmplY3Q9cHl0aG9uMzQuUHlTeXNfR2V0T2JqZWN0CisgIFB5U3lzX0hhc1dhcm5PcHRpb25zPXB5dGhvbjM0LlB5U3lzX0hhc1dhcm5PcHRpb25zCisgIFB5U3lzX1Jlc2V0V2Fybk9wdGlvbnM9cHl0aG9uMzQuUHlTeXNfUmVzZXRXYXJuT3B0aW9ucworICBQeVN5c19TZXRBcmd2PXB5dGhvbjM0LlB5U3lzX1NldEFyZ3YKKyAgUHlTeXNfU2V0QXJndkV4PXB5dGhvbjM0LlB5U3lzX1NldEFyZ3ZFeAorICBQeVN5c19TZXRPYmplY3Q9cHl0aG9uMzQuUHlTeXNfU2V0T2JqZWN0CisgIFB5U3lzX1NldFBhdGg9cHl0aG9uMzQuUHlTeXNfU2V0UGF0aAorICBQeVN5c19Xcml0ZVN0ZGVycj1weXRob24zNC5QeVN5c19Xcml0ZVN0ZGVycgorICBQeVN5c19Xcml0ZVN0ZG91dD1weXRob24zNC5QeVN5c19Xcml0ZVN0ZG91dAorICBQeVRocmVhZFN0YXRlX0NsZWFyPXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfQ2xlYXIKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGU9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9EZWxldGUKKyAgUHlUaHJlYWRTdGF0ZV9EZWxldGVDdXJyZW50PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfRGVsZXRlQ3VycmVudAorICBQeVRocmVhZFN0YXRlX0dldD1weXRob24zNC5QeVRocmVhZFN0YXRlX0dldAorICBQeVRocmVhZFN0YXRlX0dldERpY3Q9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9HZXREaWN0CisgIFB5VGhyZWFkU3RhdGVfTmV3PXB5dGhvbjM0LlB5VGhyZWFkU3RhdGVfTmV3CisgIFB5VGhyZWFkU3RhdGVfU2V0QXN5bmNFeGM9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9TZXRBc3luY0V4YworICBQeVRocmVhZFN0YXRlX1N3YXA9cHl0aG9uMzQuUHlUaHJlYWRTdGF0ZV9Td2FwCisgIFB5VHJhY2VCYWNrX0hlcmU9cHl0aG9uMzQuUHlUcmFjZUJhY2tfSGVyZQorICBQeVRyYWNlQmFja19QcmludD1weXRob24zNC5QeVRyYWNlQmFja19QcmludAorICBQeVRyYWNlQmFja19UeXBlPXB5dGhvbjM0LlB5VHJhY2VCYWNrX1R5cGUgREFUQQorICBQeVR1cGxlSXRlcl9UeXBlPXB5dGhvbjM0LlB5VHVwbGVJdGVyX1R5cGUgREFUQQorICBQeVR1cGxlX0NsZWFyRnJlZUxpc3Q9cHl0aG9uMzQuUHlUdXBsZV9DbGVhckZyZWVMaXN0CisgIFB5VHVwbGVfR2V0SXRlbT1weXRob24zNC5QeVR1cGxlX0dldEl0ZW0KKyAgUHlUdXBsZV9HZXRTbGljZT1weXRob24zNC5QeVR1cGxlX0dldFNsaWNlCisgIFB5VHVwbGVfTmV3PXB5dGhvbjM0LlB5VHVwbGVfTmV3CisgIFB5VHVwbGVfUGFjaz1weXRob24zNC5QeVR1cGxlX1BhY2sKKyAgUHlUdXBsZV9TZXRJdGVtPXB5dGhvbjM0LlB5VHVwbGVfU2V0SXRlbQorICBQeVR1cGxlX1NpemU9cHl0aG9uMzQuUHlUdXBsZV9TaXplCisgIFB5VHVwbGVfVHlwZT1weXRob24zNC5QeVR1cGxlX1R5cGUgREFUQQorICBQeVR5cGVfQ2xlYXJDYWNoZT1weXRob24zNC5QeVR5cGVfQ2xlYXJDYWNoZQorICBQeVR5cGVfRnJvbVNwZWM9cHl0aG9uMzQuUHlUeXBlX0Zyb21TcGVjCisgIFB5VHlwZV9Gcm9tU3BlY1dpdGhCYXNlcz1weXRob24zNC5QeVR5cGVfRnJvbVNwZWNXaXRoQmFzZXMKKyAgUHlUeXBlX0dlbmVyaWNBbGxvYz1weXRob24zNC5QeVR5cGVfR2VuZXJpY0FsbG9jCisgIFB5VHlwZV9HZW5lcmljTmV3PXB5dGhvbjM0LlB5VHlwZV9HZW5lcmljTmV3CisgIFB5VHlwZV9HZXRGbGFncz1weXRob24zNC5QeVR5cGVfR2V0RmxhZ3MKKyAgUHlUeXBlX0dldFNsb3Q9cHl0aG9uMzQuUHlUeXBlX0dldFNsb3QKKyAgUHlUeXBlX0lzU3VidHlwZT1weXRob24zNC5QeVR5cGVfSXNTdWJ0eXBlCisgIFB5VHlwZV9Nb2RpZmllZD1weXRob24zNC5QeVR5cGVfTW9kaWZpZWQKKyAgUHlUeXBlX1JlYWR5PXB5dGhvbjM0LlB5VHlwZV9SZWFkeQorICBQeVR5cGVfVHlwZT1weXRob24zNC5QeVR5cGVfVHlwZSBEQVRBCisgIFB5VW5pY29kZURlY29kZUVycm9yX0NyZWF0ZT1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9DcmVhdGUKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5jb2RpbmcKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZURlY29kZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVEZWNvZGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRGVjb2RlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZURlY29kZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuY29kaW5nCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0T2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdAorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0UmVhc29uCisgIFB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX0dldFN0YXJ0CisgIFB5VW5pY29kZUVuY29kZUVycm9yX1NldEVuZD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRFbmQKKyAgUHlVbmljb2RlRW5jb2RlRXJyb3JfU2V0UmVhc29uPXB5dGhvbjM0LlB5VW5pY29kZUVuY29kZUVycm9yX1NldFJlYXNvbgorICBQeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydD1weXRob24zNC5QeVVuaWNvZGVFbmNvZGVFcnJvcl9TZXRTdGFydAorICBQeVVuaWNvZGVJdGVyX1R5cGU9cHl0aG9uMzQuUHlVbmljb2RlSXRlcl9UeXBlIERBVEEKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldEVuZAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0T2JqZWN0CisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX0dldFJlYXNvbj1weXRob24zNC5QeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRSZWFzb24KKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQ9cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfR2V0U3RhcnQKKyAgUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0RW5kPXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldEVuZAorICBQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9TZXRSZWFzb249cHl0aG9uMzQuUHlVbmljb2RlVHJhbnNsYXRlRXJyb3JfU2V0UmVhc29uCisgIFB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0PXB5dGhvbjM0LlB5VW5pY29kZVRyYW5zbGF0ZUVycm9yX1NldFN0YXJ0CisgIFB5VW5pY29kZV9BcHBlbmQ9cHl0aG9uMzQuUHlVbmljb2RlX0FwcGVuZAorICBQeVVuaWNvZGVfQXBwZW5kQW5kRGVsPXB5dGhvbjM0LlB5VW5pY29kZV9BcHBlbmRBbmREZWwKKyAgUHlVbmljb2RlX0FzQVNDSUlTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzQVNDSUlTdHJpbmcKKyAgUHlVbmljb2RlX0FzQ2hhcm1hcFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNDaGFybWFwU3RyaW5nCisgIFB5VW5pY29kZV9Bc0RlY29kZWRPYmplY3Q9cHl0aG9uMzQuUHlVbmljb2RlX0FzRGVjb2RlZE9iamVjdAorICBQeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZT1weXRob24zNC5QeVVuaWNvZGVfQXNEZWNvZGVkVW5pY29kZQorICBQeVVuaWNvZGVfQXNFbmNvZGVkT2JqZWN0PXB5dGhvbjM0LlB5VW5pY29kZV9Bc0VuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNFbmNvZGVkU3RyaW5nCisgIFB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlPXB5dGhvbjM0LlB5VW5pY29kZV9Bc0VuY29kZWRVbmljb2RlCisgIFB5VW5pY29kZV9Bc0xhdGluMVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNMYXRpbjFTdHJpbmcKKyAgUHlVbmljb2RlX0FzUmF3VW5pY29kZUVzY2FwZVN0cmluZz1weXRob24zNC5QeVVuaWNvZGVfQXNSYXdVbmljb2RlRXNjYXBlU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjE2U3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc1VURjE2U3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjMyU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc1VURjMyU3RyaW5nCisgIFB5VW5pY29kZV9Bc1VURjhTdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0FzVVRGOFN0cmluZworICBQeVVuaWNvZGVfQXNVbmljb2RlRXNjYXBlU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Bc1VuaWNvZGVFc2NhcGVTdHJpbmcKKyAgUHlVbmljb2RlX0FzV2lkZUNoYXI9cHl0aG9uMzQuUHlVbmljb2RlX0FzV2lkZUNoYXIKKyAgUHlVbmljb2RlX0NsZWFyRnJlZWxpc3Q9cHl0aG9uMzQuUHlVbmljb2RlX0NsZWFyRnJlZWxpc3QKKyAgUHlVbmljb2RlX0NvbXBhcmU9cHl0aG9uMzQuUHlVbmljb2RlX0NvbXBhcmUKKyAgUHlVbmljb2RlX0NvbmNhdD1weXRob24zNC5QeVVuaWNvZGVfQ29uY2F0CisgIFB5VW5pY29kZV9Db250YWlucz1weXRob24zNC5QeVVuaWNvZGVfQ29udGFpbnMKKyAgUHlVbmljb2RlX0NvdW50PXB5dGhvbjM0LlB5VW5pY29kZV9Db3VudAorICBQeVVuaWNvZGVfRGVjb2RlPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGUKKyAgUHlVbmljb2RlX0RlY29kZUFTQ0lJPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVBU0NJSQorICBQeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlQ2hhcm1hcAorICBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdEFuZFNpemUKKyAgUHlVbmljb2RlX0RlY29kZUxhdGluMT1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlTGF0aW4xCisgIFB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVSYXdVbmljb2RlRXNjYXBlCisgIFB5VW5pY29kZV9EZWNvZGVVVEYxNj1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGMTYKKyAgUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjE2U3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVURjMyPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEYzMgorICBQeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGMzJTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRGVjb2RlVVRGOD1weXRob24zNC5QeVVuaWNvZGVfRGVjb2RlVVRGOAorICBQeVVuaWNvZGVfRGVjb2RlVVRGOFN0YXRlZnVsPXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY4U3RhdGVmdWwKKyAgUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGU9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVuaWNvZGVFc2NhcGUKKyAgUHlVbmljb2RlX0ZTQ29udmVydGVyPXB5dGhvbjM0LlB5VW5pY29kZV9GU0NvbnZlcnRlcgorICBQeVVuaWNvZGVfRlNEZWNvZGVyPXB5dGhvbjM0LlB5VW5pY29kZV9GU0RlY29kZXIKKyAgUHlVbmljb2RlX0ZpbmQ9cHl0aG9uMzQuUHlVbmljb2RlX0ZpbmQKKyAgUHlVbmljb2RlX0Zvcm1hdD1weXRob24zNC5QeVVuaWNvZGVfRm9ybWF0CisgIFB5VW5pY29kZV9Gcm9tRW5jb2RlZE9iamVjdD1weXRob24zNC5QeVVuaWNvZGVfRnJvbUVuY29kZWRPYmplY3QKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXQ9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21Gb3JtYXQKKyAgUHlVbmljb2RlX0Zyb21Gb3JtYXRWPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tRm9ybWF0VgorICBQeVVuaWNvZGVfRnJvbU9iamVjdD1weXRob24zNC5QeVVuaWNvZGVfRnJvbU9iamVjdAorICBQeVVuaWNvZGVfRnJvbU9yZGluYWw9cHl0aG9uMzQuUHlVbmljb2RlX0Zyb21PcmRpbmFsCisgIFB5VW5pY29kZV9Gcm9tU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Gcm9tU3RyaW5nCisgIFB5VW5pY29kZV9Gcm9tU3RyaW5nQW5kU2l6ZT1weXRob24zNC5QeVVuaWNvZGVfRnJvbVN0cmluZ0FuZFNpemUKKyAgUHlVbmljb2RlX0Zyb21XaWRlQ2hhcj1weXRob24zNC5QeVVuaWNvZGVfRnJvbVdpZGVDaGFyCisgIFB5VW5pY29kZV9HZXREZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0dldERlZmF1bHRFbmNvZGluZworICBQeVVuaWNvZGVfR2V0U2l6ZT1weXRob24zNC5QeVVuaWNvZGVfR2V0U2l6ZQorICBQeVVuaWNvZGVfSXNJZGVudGlmaWVyPXB5dGhvbjM0LlB5VW5pY29kZV9Jc0lkZW50aWZpZXIKKyAgUHlVbmljb2RlX0pvaW49cHl0aG9uMzQuUHlVbmljb2RlX0pvaW4KKyAgUHlVbmljb2RlX1BhcnRpdGlvbj1weXRob24zNC5QeVVuaWNvZGVfUGFydGl0aW9uCisgIFB5VW5pY29kZV9SUGFydGl0aW9uPXB5dGhvbjM0LlB5VW5pY29kZV9SUGFydGl0aW9uCisgIFB5VW5pY29kZV9SU3BsaXQ9cHl0aG9uMzQuUHlVbmljb2RlX1JTcGxpdAorICBQeVVuaWNvZGVfUmVwbGFjZT1weXRob24zNC5QeVVuaWNvZGVfUmVwbGFjZQorICBQeVVuaWNvZGVfUmVzaXplPXB5dGhvbjM0LlB5VW5pY29kZV9SZXNpemUKKyAgUHlVbmljb2RlX1JpY2hDb21wYXJlPXB5dGhvbjM0LlB5VW5pY29kZV9SaWNoQ29tcGFyZQorICBQeVVuaWNvZGVfU2V0RGVmYXVsdEVuY29kaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9TZXREZWZhdWx0RW5jb2RpbmcKKyAgUHlVbmljb2RlX1NwbGl0PXB5dGhvbjM0LlB5VW5pY29kZV9TcGxpdAorICBQeVVuaWNvZGVfU3BsaXRsaW5lcz1weXRob24zNC5QeVVuaWNvZGVfU3BsaXRsaW5lcworICBQeVVuaWNvZGVfVGFpbG1hdGNoPXB5dGhvbjM0LlB5VW5pY29kZV9UYWlsbWF0Y2gKKyAgUHlVbmljb2RlX1RyYW5zbGF0ZT1weXRob24zNC5QeVVuaWNvZGVfVHJhbnNsYXRlCisgIFB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwPXB5dGhvbjM0LlB5VW5pY29kZV9CdWlsZEVuY29kaW5nTWFwCisgIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nPXB5dGhvbjM0LlB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nCisgIFB5VW5pY29kZV9EZWNvZGVVVEY3PXB5dGhvbjM0LlB5VW5pY29kZV9EZWNvZGVVVEY3CisgIFB5VW5pY29kZV9EZWNvZGVVVEY3U3RhdGVmdWw9cHl0aG9uMzQuUHlVbmljb2RlX0RlY29kZVVURjdTdGF0ZWZ1bAorICBQeVVuaWNvZGVfRW5jb2RlRlNEZWZhdWx0PXB5dGhvbjM0LlB5VW5pY29kZV9FbmNvZGVGU0RlZmF1bHQKKyAgUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmc9cHl0aG9uMzQuUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcKKyAgUHlVbmljb2RlX0ludGVybkltbW9ydGFsPXB5dGhvbjM0LlB5VW5pY29kZV9JbnRlcm5JbW1vcnRhbAorICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZT1weXRob24zNC5QeVVuaWNvZGVfSW50ZXJuSW5QbGFjZQorICBQeVVuaWNvZGVfVHlwZT1weXRob24zNC5QeVVuaWNvZGVfVHlwZSBEQVRBCisgIFB5V2Vha3JlZl9HZXRPYmplY3Q9cHl0aG9uMzQuUHlXZWFrcmVmX0dldE9iamVjdCBEQVRBCisgIFB5V2Vha3JlZl9OZXdQcm94eT1weXRob24zNC5QeVdlYWtyZWZfTmV3UHJveHkKKyAgUHlXZWFrcmVmX05ld1JlZj1weXRob24zNC5QeVdlYWtyZWZfTmV3UmVmCisgIFB5V3JhcHBlckRlc2NyX1R5cGU9cHl0aG9uMzQuUHlXcmFwcGVyRGVzY3JfVHlwZSBEQVRBCisgIFB5V3JhcHBlcl9OZXc9cHl0aG9uMzQuUHlXcmFwcGVyX05ldworICBQeVppcF9UeXBlPXB5dGhvbjM0LlB5WmlwX1R5cGUgREFUQQorICBQeV9BZGRQZW5kaW5nQ2FsbD1weXRob24zNC5QeV9BZGRQZW5kaW5nQ2FsbAorICBQeV9BdEV4aXQ9cHl0aG9uMzQuUHlfQXRFeGl0CisgIFB5X0J1aWxkVmFsdWU9cHl0aG9uMzQuUHlfQnVpbGRWYWx1ZQorICBQeV9Db21waWxlU3RyaW5nPXB5dGhvbjM0LlB5X0NvbXBpbGVTdHJpbmcKKyAgUHlfRGVjUmVmPXB5dGhvbjM0LlB5X0RlY1JlZgorICBQeV9FbmRJbnRlcnByZXRlcj1weXRob24zNC5QeV9FbmRJbnRlcnByZXRlcgorICBQeV9FeGl0PXB5dGhvbjM0LlB5X0V4aXQKKyAgUHlfRmF0YWxFcnJvcj1weXRob24zNC5QeV9GYXRhbEVycm9yCisgIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0ZpbmFsaXplPXB5dGhvbjM0LlB5X0ZpbmFsaXplCisgIFB5X0dldEJ1aWxkSW5mbz1weXRob24zNC5QeV9HZXRCdWlsZEluZm8KKyAgUHlfR2V0Q29tcGlsZXI9cHl0aG9uMzQuUHlfR2V0Q29tcGlsZXIKKyAgUHlfR2V0Q29weXJpZ2h0PXB5dGhvbjM0LlB5X0dldENvcHlyaWdodAorICBQeV9HZXRFeGVjUHJlZml4PXB5dGhvbjM0LlB5X0dldEV4ZWNQcmVmaXgKKyAgUHlfR2V0UGF0aD1weXRob24zNC5QeV9HZXRQYXRoCisgIFB5X0dldFBsYXRmb3JtPXB5dGhvbjM0LlB5X0dldFBsYXRmb3JtCisgIFB5X0dldFByZWZpeD1weXRob24zNC5QeV9HZXRQcmVmaXgKKyAgUHlfR2V0UHJvZ3JhbUZ1bGxQYXRoPXB5dGhvbjM0LlB5X0dldFByb2dyYW1GdWxsUGF0aAorICBQeV9HZXRQcm9ncmFtTmFtZT1weXRob24zNC5QeV9HZXRQcm9ncmFtTmFtZQorICBQeV9HZXRQeXRob25Ib21lPXB5dGhvbjM0LlB5X0dldFB5dGhvbkhvbWUKKyAgUHlfR2V0UmVjdXJzaW9uTGltaXQ9cHl0aG9uMzQuUHlfR2V0UmVjdXJzaW9uTGltaXQKKyAgUHlfR2V0VmVyc2lvbj1weXRob24zNC5QeV9HZXRWZXJzaW9uCisgIFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2Rpbmc9cHl0aG9uMzQuUHlfSGFzRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyBEQVRBCisgIFB5X0luY1JlZj1weXRob24zNC5QeV9JbmNSZWYKKyAgUHlfSW5pdGlhbGl6ZT1weXRob24zNC5QeV9Jbml0aWFsaXplCisgIFB5X0luaXRpYWxpemVFeD1weXRob24zNC5QeV9Jbml0aWFsaXplRXgKKyAgUHlfSXNJbml0aWFsaXplZD1weXRob24zNC5QeV9Jc0luaXRpYWxpemVkCisgIFB5X01haW49cHl0aG9uMzQuUHlfTWFpbgorICBQeV9NYWtlUGVuZGluZ0NhbGxzPXB5dGhvbjM0LlB5X01ha2VQZW5kaW5nQ2FsbHMKKyAgUHlfTmV3SW50ZXJwcmV0ZXI9cHl0aG9uMzQuUHlfTmV3SW50ZXJwcmV0ZXIKKyAgUHlfUmVwckVudGVyPXB5dGhvbjM0LlB5X1JlcHJFbnRlcgorICBQeV9SZXByTGVhdmU9cHl0aG9uMzQuUHlfUmVwckxlYXZlCisgIFB5X1NldFByb2dyYW1OYW1lPXB5dGhvbjM0LlB5X1NldFByb2dyYW1OYW1lCisgIFB5X1NldFB5dGhvbkhvbWU9cHl0aG9uMzQuUHlfU2V0UHl0aG9uSG9tZQorICBQeV9TZXRSZWN1cnNpb25MaW1pdD1weXRob24zNC5QeV9TZXRSZWN1cnNpb25MaW1pdAorICBQeV9TeW10YWJsZVN0cmluZz1weXRob24zNC5QeV9TeW10YWJsZVN0cmluZworICBQeV9WYUJ1aWxkVmFsdWU9cHl0aG9uMzQuUHlfVmFCdWlsZFZhbHVlCisgIF9QeUVycl9CYWRJbnRlcm5hbENhbGw9cHl0aG9uMzQuX1B5RXJyX0JhZEludGVybmFsQ2FsbAorICBfUHlPYmplY3RfQ2FsbEZ1bmN0aW9uX1NpemVUPXB5dGhvbjM0Ll9QeU9iamVjdF9DYWxsRnVuY3Rpb25fU2l6ZVQKKyAgX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQ9cHl0aG9uMzQuX1B5T2JqZWN0X0NhbGxNZXRob2RfU2l6ZVQKKyAgX1B5T2JqZWN0X0dDX01hbGxvYz1weXRob24zNC5fUHlPYmplY3RfR0NfTWFsbG9jCisgIF9QeU9iamVjdF9HQ19OZXc9cHl0aG9uMzQuX1B5T2JqZWN0X0dDX05ldworICBfUHlPYmplY3RfR0NfTmV3VmFyPXB5dGhvbjM0Ll9QeU9iamVjdF9HQ19OZXdWYXIKKyAgX1B5T2JqZWN0X0dDX1Jlc2l6ZT1weXRob24zNC5fUHlPYmplY3RfR0NfUmVzaXplCisgIF9QeU9iamVjdF9OZXc9cHl0aG9uMzQuX1B5T2JqZWN0X05ldworICBfUHlPYmplY3RfTmV3VmFyPXB5dGhvbjM0Ll9QeU9iamVjdF9OZXdWYXIKKyAgX1B5U3RhdGVfQWRkTW9kdWxlPXB5dGhvbjM0Ll9QeVN0YXRlX0FkZE1vZHVsZQorICBfUHlUaHJlYWRTdGF0ZV9Jbml0PXB5dGhvbjM0Ll9QeVRocmVhZFN0YXRlX0luaXQKKyAgX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2M9cHl0aG9uMzQuX1B5VGhyZWFkU3RhdGVfUHJlYWxsb2MKKyAgX1B5VHJhc2hfZGVsZXRlX2xhdGVyPXB5dGhvbjM0Ll9QeVRyYXNoX2RlbGV0ZV9sYXRlciBEQVRBCisgIF9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nPXB5dGhvbjM0Ll9QeVRyYXNoX2RlbGV0ZV9uZXN0aW5nIERBVEEKKyAgX1B5VHJhc2hfZGVwb3NpdF9vYmplY3Q9cHl0aG9uMzQuX1B5VHJhc2hfZGVwb3NpdF9vYmplY3QKKyAgX1B5VHJhc2hfZGVzdHJveV9jaGFpbj1weXRob24zNC5fUHlUcmFzaF9kZXN0cm95X2NoYWluCisgIF9QeVdlYWtyZWZfQ2FsbGFibGVQcm94eVR5cGU9cHl0aG9uMzQuX1B5V2Vha3JlZl9DYWxsYWJsZVByb3h5VHlwZSBEQVRBCisgIF9QeVdlYWtyZWZfUHJveHlUeXBlPXB5dGhvbjM0Ll9QeVdlYWtyZWZfUHJveHlUeXBlIERBVEEKKyAgX1B5V2Vha3JlZl9SZWZUeXBlPXB5dGhvbjM0Ll9QeVdlYWtyZWZfUmVmVHlwZSBEQVRBCisgIF9QeV9CdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9CdWlsZFZhbHVlX1NpemVUCisgIF9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0PXB5dGhvbjM0Ll9QeV9DaGVja1JlY3Vyc2lvbkxpbWl0IERBVEEKKyAgX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbD1weXRob24zNC5fUHlfQ2hlY2tSZWN1cnNpdmVDYWxsCisgIF9QeV9EZWFsbG9jPXB5dGhvbjM0Ll9QeV9EZWFsbG9jCisgIF9QeV9FbGxpcHNpc09iamVjdD1weXRob24zNC5fUHlfRWxsaXBzaXNPYmplY3QgREFUQQorICBfUHlfRmFsc2VTdHJ1Y3Q9cHl0aG9uMzQuX1B5X0ZhbHNlU3RydWN0IERBVEEKKyAgX1B5X05vbmVTdHJ1Y3Q9cHl0aG9uMzQuX1B5X05vbmVTdHJ1Y3QgREFUQQorICBfUHlfTm90SW1wbGVtZW50ZWRTdHJ1Y3Q9cHl0aG9uMzQuX1B5X05vdEltcGxlbWVudGVkU3RydWN0IERBVEEKKyAgX1B5X1N3YXBwZWRPcD1weXRob24zNC5fUHlfU3dhcHBlZE9wIERBVEEKKyAgX1B5X1RydWVTdHJ1Y3Q9cHl0aG9uMzQuX1B5X1RydWVTdHJ1Y3QgREFUQQorICBfUHlfVmFCdWlsZFZhbHVlX1NpemVUPXB5dGhvbjM0Ll9QeV9WYUJ1aWxkVmFsdWVfU2l6ZVQKKyAgX1B5QXJnX1BhcnNlX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZV9TaXplVAorICBfUHlBcmdfUGFyc2VUdXBsZV9TaXplVD1weXRob24zNC5fUHlBcmdfUGFyc2VUdXBsZV9TaXplVAorICBfUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHNfU2l6ZVQKKyAgX1B5QXJnX1ZhUGFyc2VfU2l6ZVQ9cHl0aG9uMzQuX1B5QXJnX1ZhUGFyc2VfU2l6ZVQKKyAgX1B5QXJnX1ZhUGFyc2VUdXBsZUFuZEtleXdvcmRzX1NpemVUPXB5dGhvbjM0Ll9QeUFyZ19WYVBhcnNlVHVwbGVBbmRLZXl3b3Jkc19TaXplVAorICBfUHlfQnVpbGRWYWx1ZV9TaXplVD1weXRob24zNC5fUHlfQnVpbGRWYWx1ZV9TaXplVApkaWZmIC0tZ2l0IGEvUEMvcHl0aG9uMy5tYWsgYi9QQy9weXRob24zLm1hawppbmRleCA5Y2YxODA3Li5mYjhlN2FhIDEwMDY0NAotLS0gYS9QQy9weXRob24zLm1haworKysgYi9QQy9weXRob24zLm1hawpAQCAtMSwxNCArMSwxNCBAQAotJChPdXREaXIpcHl0aG9uMy5kbGw6CXB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIKLQljbCAvTEQgL0ZlJChPdXREaXIpcHl0aG9uMy5kbGwgcHl0aG9uM2RsbC5jIHB5dGhvbjMuZGVmICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWIKKyQoT3V0RGlyKXB5dGhvbjMuZGxsOglweXRob24zLmRlZiAkKE91dERpcilweXRob24zNHN0dWIubGliCisJY2wgL0xEIC9GZSQoT3V0RGlyKXB5dGhvbjMuZGxsIHB5dGhvbjNkbGwuYyBweXRob24zLmRlZiAkKE91dERpcilweXRob24zNHN0dWIubGliCiAKLSQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5saWI6CXB5dGhvbjMzc3R1Yi5kZWYKLQlsaWIgL2RlZjpweXRob24zM3N0dWIuZGVmIC9vdXQ6JChPdXREaXIpcHl0aG9uMzNzdHViLmxpYiAvTUFDSElORTokKE1BQ0hJTkUpCiskKE91dERpcilweXRob24zNHN0dWIubGliOglweXRob24zNHN0dWIuZGVmCisJbGliIC9kZWY6cHl0aG9uMzRzdHViLmRlZiAvb3V0OiQoT3V0RGlyKXB5dGhvbjM0c3R1Yi5saWIgL01BQ0hJTkU6JChNQUNISU5FKQogCiBjbGVhbjoKIAlJRiBFWElTVCAkKE91dERpcilweXRob24zLmRsbCBkZWwgJChPdXREaXIpcHl0aG9uMy5kbGwKIAlJRiBFWElTVCAkKE91dERpcilweXRob24zLmxpYiBkZWwgJChPdXREaXIpcHl0aG9uMy5saWIKLQlJRiBFWElTVCAkKE91dERpcilweXRob24zM3N0dWIubGliIGRlbCAkKE91dERpcilweXRob24zM3N0dWIubGliCisJSUYgRVhJU1QgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYiBkZWwgJChPdXREaXIpcHl0aG9uMzRzdHViLmxpYgogCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMuZXhwIGRlbCAkKE91dERpcilweXRob24zLmV4cAotCUlGIEVYSVNUICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5leHAgZGVsICQoT3V0RGlyKXB5dGhvbjMzc3R1Yi5leHAKKwlJRiBFWElTVCAkKE91dERpcilweXRob24zNHN0dWIuZXhwIGRlbCAkKE91dERpcilweXRob24zNHN0dWIuZXhwCiAKIHJlYnVpbGQ6IGNsZWFuICQoT3V0RGlyKXB5dGhvbjMuZGxsCmRpZmYgLS1naXQgYS9QQy9weXRob24zM2dlbi5weSBiL1BDL3B5dGhvbjM0Z2VuLnB5CnNpbWlsYXJpdHkgaW5kZXggNzclCnJlbmFtZSBmcm9tIFBDL3B5dGhvbjMzZ2VuLnB5CnJlbmFtZSB0byBQQy9weXRob24zNGdlbi5weQppbmRleCAyMWI5ZjU2Li4xODBjZTExIDEwMDY0NAotLS0gYS9QQy9weXRob24zM2dlbi5weQorKysgYi9QQy9weXRob24zNGdlbi5weQpAQCAtMSw5ICsxLDkgQEAKLSMgR2VuZXJhdGUgcHl0aG9uMzNzdHViLmRlZiBvdXQgb2YgcHl0aG9uMy5kZWYKKyMgR2VuZXJhdGUgcHl0aG9uMzRzdHViLmRlZiBvdXQgb2YgcHl0aG9uMy5kZWYKICMgVGhlIHJlZ3VsYXIgaW1wb3J0IGxpYnJhcnkgY2Fubm90IGJlIHVzZWQsCiAjIHNpbmNlIGl0IGRvZXNuJ3QgcHJvdmlkZSB0aGUgcmlnaHQgc3ltYm9scyBmb3IKICMgZGF0YSBmb3J3YXJkaW5nCi1vdXQgPSBvcGVuKCJweXRob24zM3N0dWIuZGVmIiwgInciKQotb3V0LndyaXRlKCdMSUJSQVJZICJweXRob24zMyJcbicpCitvdXQgPSBvcGVuKCJweXRob24zNHN0dWIuZGVmIiwgInciKQorb3V0LndyaXRlKCdMSUJSQVJZICJweXRob24zNCJcbicpCiBvdXQud3JpdGUoJ0VYUE9SVFNcbicpCiAKIGlucCA9IG9wZW4oInB5dGhvbjMuZGVmIikKQEAgLTE0LDcgKzE0LDcgQEAKIGFzc2VydCBsaW5lLnN0cmlwKCk9PSdFWFBPUlRTJwogCiBmb3IgbGluZSBpbiBpbnA6Ci0gICAgIyBTWU0xPXB5dGhvbjMzLlNZTTJbIERBVEFdCisgICAgIyBTWU0xPXB5dGhvbjM0LlNZTTJbIERBVEFdCiAgICAgaGVhZCwgdGFpbCA9IGxpbmUuc3BsaXQoJy4nKQogICAgIGlmICdEQVRBJyBpbiB0YWlsOgogICAgICAgICBzeW1ib2wsIHRhaWwgPSB0YWlsLnNwbGl0KCcgJykKZGlmZiAtLWdpdCBhL1BDL3B5dGhvbjMzc3R1Yi5kZWYgYi9QQy9weXRob24zNHN0dWIuZGVmCnNpbWlsYXJpdHkgaW5kZXggOTklCnJlbmFtZSBmcm9tIFBDL3B5dGhvbjMzc3R1Yi5kZWYKcmVuYW1lIHRvIFBDL3B5dGhvbjM0c3R1Yi5kZWYKaW5kZXggZGIxYTU0Ni4uMzA3NGNmMyAxMDA2NDQKLS0tIGEvUEMvcHl0aG9uMzNzdHViLmRlZgorKysgYi9QQy9weXRob24zNHN0dWIuZGVmCkBAIC0xLDQgKzEsNCBAQAotTElCUkFSWSAicHl0aG9uMzMiCitMSUJSQVJZICJweXRob24zNCIKIEVYUE9SVFMKIFB5QXJnX1BhcnNlCiBQeUFyZ19QYXJzZVR1cGxlCkBAIC0zNyw2ICszNyw3IEBACiBQeUNGdW5jdGlvbl9HZXRGbGFncwogUHlDRnVuY3Rpb25fR2V0RnVuY3Rpb24KIFB5Q0Z1bmN0aW9uX0dldFNlbGYKK1B5Q0Z1bmN0aW9uX05ldwogUHlDRnVuY3Rpb25fTmV3RXgKIFB5Q0Z1bmN0aW9uX1R5cGUKIFB5Q2FsbEl0ZXJfTmV3CkBAIC01MTcsNiArNTE4LDcgQEAKIFB5VHlwZV9HZW5lcmljQWxsb2MKIFB5VHlwZV9HZW5lcmljTmV3CiBQeVR5cGVfR2V0RmxhZ3MKK1B5VHlwZV9HZXRTbG90CiBQeVR5cGVfSXNTdWJ0eXBlCiBQeVR5cGVfTW9kaWZpZWQKIFB5VHlwZV9SZWFkeQpkaWZmIC0tZ2l0IGEvUEMvcmVhZG1lLnR4dCBiL1BDL3JlYWRtZS50eHQKaW5kZXggZmRjMDlhYi4uOTkwMDZiZiAxMDA2NDQKLS0tIGEvUEMvcmVhZG1lLnR4dAorKysgYi9QQy9yZWFkbWUudHh0CkBAIC03MSwyNyArNzEsMTIgQEAKIGRsbGJhc2VfbnQudHh0IEEgKG1hbnVhbGx5IG1haW50YWluZWQpIGxpc3Qgb2YgYmFzZSBhZGRyZXNzZXMgZm9yCiAgICAgICAgICAgICAgICB2YXJpb3VzIERMTHMsIHRvIGF2b2lkIHJ1bi10aW1lIHJlbG9jYXRpb24uCiAKLWV4YW1wbGVfbnQgICAgIEEgc3ViZGlyZWN0b3J5IHNob3dpbmcgaG93IHRvIGJ1aWxkIGFuIGV4dGVuc2lvbiBhcyBhCi0gICAgICAgICAgICAgICBETEwuCiAKIExlZ2FjeSBzdXBwb3J0IGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogVGhlIHN1YmRpcmVjdG9yaWVzIFZDNiwgVlM3LjEgYW5kIFZTOC4wIGNvbnRhaW4gbGVnYWN5IHN1cHBvcnQgb2xkZXIKIHZlcnNpb25zIG9mIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBTZWUgUENidWlsZC9yZWFkbWUudHh0LgogCi1FTVggZGV2ZWxvcG1lbnQgdG9vbHMgZm9yIE9TLzIKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1TZWUgb3MyZW14L3JlYWRtZS50eHQuIFRoaXMgcGxhdGZvcm0gaXMgbWFpbnRhaW5lZCBieSBBbmRyZXcgTWFjSW50eXJlLgotCi1JQk0gVmlzdWFsQWdlIEMvQysrIGZvciBPUy8yCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLVNlZSBvczJ2YWNwcC9yZWFkbWUudHh0LiAgVGhpcyBwbGF0Zm9ybSBpcyBzdXBwb3J0ZWQgYnkgSmVmZiBSdXNoLgotCi1OT1RFOiBTdXBwb3J0IGZvciBvczJ2YWNwcCBtYXkgYmUgZHJvcHBlZCBpbiB0aGUgbmVhciBmdXR1cmUuIFBsZWFzZSBtb3ZlCi0gICAgICB0byBFTVguCi0KIE5vdGUgZm9yIFdpbmRvd3MgMy54IGFuZCBET1MgdXNlcnMKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvUEMvdzl4cG9wZW4uYyBiL1BDL3c5eHBvcGVuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzOTc4ZGQuLjAwMDAwMDAKLS0tIGEvUEMvdzl4cG9wZW4uYworKysgL2Rldi9udWxsCkBAIC0xLDExMiArMCwwIEBACi0vKgotICogdzl4cG9wZW4uYwotICoKLSAqIFNlcnZlcyBhcyBhbiBpbnRlcm1lZGlhdGUgc3R1YiBXaW4zMiBjb25zb2xlIGFwcGxpY2F0aW9uIHRvCi0gKiBhdm9pZCBhIGhhbmdpbmcgcGlwZSB3aGVuIHJlZGlyZWN0aW5nIDE2LWJpdCBjb25zb2xlIGJhc2VkCi0gKiBwcm9ncmFtcyAoaW5jbHVkaW5nIE1TLURPUyBjb25zb2xlIGJhc2VkIHByb2dyYW1zIGFuZCBiYXRjaAotICogZmlsZXMpIG9uIFdpbmRvdyA5NSBhbmQgV2luZG93cyA5OC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgdG8gYmUgbGF1bmNoZWQgd2l0aCByZWRpcmVjdGVkIHN0YW5kYXJkCi0gKiBoYW5kbGVzLiBJdCB3aWxsIGxhdW5jaCB0aGUgY29tbWFuZCBsaW5lIHNwZWNpZmllZCAxNi1iaXQKLSAqIGNvbnNvbGUgYmFzZWQgYXBwbGljYXRpb24gaW4gdGhlIHNhbWUgY29uc29sZSwgZm9yd2FyZGluZwotICogaXRzIG93biByZWRpcmVjdGVkIHN0YW5kYXJkIGhhbmRsZXMgdG8gdGhlIDE2LWJpdCBjaGlsZC4KLQotICogQUtBIHNvbHV0aW9uIHRvIHRoZSBwcm9ibGVtIGRlc2NyaWJlZCBpbiBLQjogUTE1MDk1Ni4KLSAqLyAgICAKLQotI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+ICAvKiBmb3IgbWFsbG9jIGFuZCBpdHMgZnJpZW5kcyAqLwotCi1jb25zdCBjaGFyICp1c2FnZSA9Ci0iVGhpcyBwcm9ncmFtIGlzIHVzZWQgYnkgUHl0aG9uJ3Mgb3MucG9wZW4gZnVuY3Rpb25cbiIKLSJ0byB3b3JrIGFyb3VuZCBhIGxpbWl0YXRpb24gaW4gV2luZG93cyA5NS85OC4gIEl0IGlzXG4iCi0ibm90IGRlc2lnbmVkIHRvIGJlIHVzZWQgYXMgYSBzdGFuZC1hbG9uZSBwcm9ncmFtLiI7Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAgQk9PTCBiUmV0OwotICAgIFNUQVJUVVBJTkZPIHNpOwotICAgIFBST0NFU1NfSU5GT1JNQVRJT04gcGk7Ci0gICAgRFdPUkQgZXhpdF9jb2RlPTA7Ci0gICAgc2l6ZV90IGNtZGxlbiA9IDA7Ci0gICAgaW50IGk7Ci0gICAgY2hhciAqY21kbGluZSwgKmNtZGxpbmVmaWxsOwotCi0gICAgaWYgKGFyZ2MgPCAyKSB7Ci0gICAgICAgIGlmIChHZXRGaWxlVHlwZShHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSkpPT1GSUxFX1RZUEVfQ0hBUikKLSAgICAgICAgICAgIC8qIEF0dGFjaGVkIHRvIGEgY29uc29sZSwgYW5kIHRoZXJlZm9yZSBub3QgZXhlY3V0ZWQgYnkgUHl0aG9uCi0gICAgICAgICAgICAgICBEaXNwbGF5IGEgbWVzc2FnZSBib3ggZm9yIHRoZSBpbnF1aXNpdGl2ZSB1c2VyCi0gICAgICAgICAgICAqLwotICAgICAgICAgICAgTWVzc2FnZUJveChOVUxMLCB1c2FnZSwgYXJndlswXSwgTUJfT0spOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIC8qIEVlZWsgLSBleGVjdXRlZCBieSBQeXRob24sIGJ1dCBhcmdzIGFyZSBzY3Jld2VkIQotICAgICAgICAgICAgICAgV3JpdGUgYW4gZXJyb3IgbWVzc2FnZSB0byBzdGRvdXQgc28gdGhlcmUgaXMgYXQKLSAgICAgICAgICAgICAgIGxlYXN0IHNvbWUgY2x1ZSBmb3IgdGhlIGVuZCB1c2VyIHdoZW4gaXQgYXBwZWFycwotICAgICAgICAgICAgICAgaW4gdGhlaXIgb3V0cHV0LgotICAgICAgICAgICAgICAgQSBtZXNzYWdlIGJveCB3b3VsZCBiZSBoaWRkZW4gYW5kIGJsb2NrcyB0aGUgYXBwLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIkludGVybmFsIHBvcGVuIGVycm9yIC0gbm8gYXJncyBzcGVjaWZpZWRcbiVzXG4iLCB1c2FnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIC8qIEJ1aWxkIHVwIHRoZSBjb21tYW5kLWxpbmUgZnJvbSB0aGUgYXJncy4KLSAgICAgICBBcmdzIHdpdGggYSBzcGFjZSBhcmUgcXVvdGVkLCBleGlzdGluZyBxdW90ZXMgYXJlIGVzY2FwZWQuCi0gICAgICAgVG8ga2VlcCB0aGluZ3Mgc2ltcGxlIGNhbGN1bGF0aW5nIHRoZSBidWZmZXIgc2l6ZSwgd2UgYXNzdW1lCi0gICAgICAgZXZlcnkgY2hhcmFjdGVyIGlzIGEgcXVvdGUgLSBpZSwgd2UgYWxsb2NhdGUgZG91YmxlIHdoYXQgd2UgbmVlZAotICAgICAgIGluIHRoZSB3b3JzdCBjYXNlLiAgQXMgdGhpcyBpcyBvbmx5IGRvdWJsZSB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZAotICAgICAgIHRvIHVzLCB0aGVyZSBpcyBhIGdvb2QgY2hhbmNlIHRoaXMgaXMgcmVhc29uYWJseSBzbWFsbCwgc28gdGhlIHRvdGFsIAotICAgICAgIGFsbG9jYXRpb24gd2lsbCBhbG1vc3QgYWx3YXlzIGJlIDwgNTEyIGJ5dGVzLgotICAgICovCi0gICAgZm9yIChpPTE7aTxhcmdjO2krKykKLSAgICAgICAgY21kbGVuICs9IHN0cmxlbihhcmd2W2ldKSoyICsgMzsgLyogb25lIHNwYWNlLCBtYXliZSAyIHF1b3RlcyAqLwotICAgIGNtZGxpbmUgPSBjbWRsaW5lZmlsbCA9IChjaGFyICopbWFsbG9jKGNtZGxlbisxKTsKLSAgICBpZiAoY21kbGluZSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgZm9yIChpPTE7aTxhcmdjO2krKykgewotICAgICAgICBjb25zdCBjaGFyICphcmdsb29rOwotICAgICAgICBpbnQgYlF1b3RlID0gc3RyY2hyKGFyZ3ZbaV0sICcgJykgIT0gTlVMTDsKLSAgICAgICAgaWYgKGJRdW90ZSkKLSAgICAgICAgICAgICpjbWRsaW5lZmlsbCsrID0gJyInOwotICAgICAgICAvKiBlc2NhcGUgcXVvdGVzICovCi0gICAgICAgIGZvciAoYXJnbG9vaz1hcmd2W2ldOyphcmdsb29rO2FyZ2xvb2srKykgewotICAgICAgICAgICAgaWYgKCphcmdsb29rPT0nIicpCi0gICAgICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnXFwnOwotICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAqYXJnbG9vazsKLSAgICAgICAgfQotICAgICAgICBpZiAoYlF1b3RlKQotICAgICAgICAgICAgKmNtZGxpbmVmaWxsKysgPSAnIic7Ci0gICAgICAgICpjbWRsaW5lZmlsbCsrID0gJyAnOwotICAgIH0KLSAgICAqY21kbGluZWZpbGwgPSAnXDAnOwotCi0gICAgLyogTWFrZSBjaGlsZCBwcm9jZXNzIHVzZSB0aGlzIGFwcCdzIHN0YW5kYXJkIGZpbGVzLiAqLwotICAgIFplcm9NZW1vcnkoJnNpLCBzaXplb2Ygc2kpOwotICAgIHNpLmNiID0gc2l6ZW9mIHNpOwotICAgIHNpLmR3RmxhZ3MgPSBTVEFSVEZfVVNFU1RESEFORExFUzsKLSAgICBzaS5oU3RkSW5wdXQgPSBHZXRTdGRIYW5kbGUoU1REX0lOUFVUX0hBTkRMRSk7Ci0gICAgc2kuaFN0ZE91dHB1dCA9IEdldFN0ZEhhbmRsZShTVERfT1VUUFVUX0hBTkRMRSk7Ci0gICAgc2kuaFN0ZEVycm9yID0gR2V0U3RkSGFuZGxlKFNURF9FUlJPUl9IQU5ETEUpOwotCi0gICAgYlJldCA9IENyZWF0ZVByb2Nlc3MoCi0gICAgICAgIE5VTEwsIGNtZGxpbmUsCi0gICAgICAgIE5VTEwsIE5VTEwsCi0gICAgICAgIFRSVUUsIDAsCi0gICAgICAgIE5VTEwsIE5VTEwsCi0gICAgICAgICZzaSwgJnBpCi0gICAgICAgICk7Ci0KLSAgICBmcmVlKGNtZGxpbmUpOwotCi0gICAgaWYgKGJSZXQpIHsKLSAgICAgICAgaWYgKFdhaXRGb3JTaW5nbGVPYmplY3QocGkuaFByb2Nlc3MsIElORklOSVRFKSAhPSBXQUlUX0ZBSUxFRCkgewotCSAgICBHZXRFeGl0Q29kZVByb2Nlc3MocGkuaFByb2Nlc3MsICZleGl0X2NvZGUpOwotCX0KLSAgICAgICAgQ2xvc2VIYW5kbGUocGkuaFByb2Nlc3MpOwotICAgICAgICBDbG9zZUhhbmRsZShwaS5oVGhyZWFkKTsKLSAgICAgICAgcmV0dXJuIGV4aXRfY29kZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMTsKLX0KZGlmZiAtLWdpdCBhL1BDL3dpbnJlZy5jIGIvUEMvd2lucmVnLmMKaW5kZXggMzM0N2ViNy4uMTlkNWE3MCAxMDA2NDQKLS0tIGEvUEMvd2lucmVnLmMKKysrIGIvUEMvd2lucmVnLmMKQEAgLTg3MSw4ICs4NzEsMTAgQEAKICAgICAgICAgLyogQUxTTyBoYW5kbGUgQUxMIHVua25vd24gZGF0YSB0eXBlcyBoZXJlLiAgRXZlbiBpZiB3ZSBjYW4ndAogICAgICAgICAgICBzdXBwb3J0IGl0IG5hdGl2ZWx5LCB3ZSBzaG91bGQgaGFuZGxlIHRoZSBiaXRzLiAqLwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgaWYgKHZhbHVlID09IFB5X05vbmUpCisgICAgICAgICAgICBpZiAodmFsdWUgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgICpyZXREYXRhU2l6ZSA9IDA7CisgICAgICAgICAgICAgICAgKnJldERhdGFCdWYgPSBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgUHlfYnVmZmVyIHZpZXc7CiAKQEAgLTkzNywxNCArOTM5LDE0IEBACiAgICAgICAgICAgICAgICAgd2NoYXJfdCAqZGF0YSA9ICh3Y2hhcl90ICopcmV0RGF0YUJ1ZjsKICAgICAgICAgICAgICAgICBpbnQgbGVuID0gcmV0RGF0YVNpemUgLyAyOwogICAgICAgICAgICAgICAgIGludCBzID0gY291bnRTdHJpbmdzKGRhdGEsIGxlbik7Ci0gICAgICAgICAgICAgICAgd2NoYXJfdCAqKnN0ciA9ICh3Y2hhcl90ICoqKW1hbGxvYyhzaXplb2Yod2NoYXJfdCAqKSpzKTsKKyAgICAgICAgICAgICAgICB3Y2hhcl90ICoqc3RyID0gUHlNZW1fTmV3KHdjaGFyX3QgKiwgcyk7CiAgICAgICAgICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKIAogICAgICAgICAgICAgICAgIGZpeHVwTXVsdGlTWihzdHIsIGRhdGEsIGxlbik7CiAgICAgICAgICAgICAgICAgb2JEYXRhID0gUHlMaXN0X05ldyhzKTsKICAgICAgICAgICAgICAgICBpZiAob2JEYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHN0cik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBzOyBpbmRleCsrKQpAQCAtOTU0LDE0ICs5NTYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdpc3RyeSBzdHJpbmcgaXMgdG9vIGxvbmcgZm9yIGEgUHl0aG9uIHN0cmluZyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG9iRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBQeU1lbV9GcmVlKHN0cik7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBQeUxpc3RfU2V0SXRlbShvYkRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVdpZGVDaGFyKHN0cltpbmRleF0sIGxlbikpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICAgICAgUHlNZW1fRnJlZShzdHIpOwogCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC0xMjA0LDcgKzEyMDYsNyBAQAogICAgICsrcmV0RGF0YVNpemU7CiAgICAgYnVmRGF0YVNpemUgPSByZXREYXRhU2l6ZTsKICAgICBidWZWYWx1ZVNpemUgPSByZXRWYWx1ZVNpemU7Ci0gICAgcmV0VmFsdWVCdWYgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCkgKiByZXRWYWx1ZVNpemUpOworICAgIHJldFZhbHVlQnVmID0gUHlNZW1fTmV3KHdjaGFyX3QsIHJldFZhbHVlU2l6ZSk7CiAgICAgaWYgKHJldFZhbHVlQnVmID09IE5VTEwpCiAgICAgICAgIHJldHVybiBQeUVycl9Ob01lbW9yeSgpOwogICAgIHJldERhdGFCdWYgPSAoQllURSAqKVB5TWVtX01hbGxvYyhyZXREYXRhU2l6ZSk7CkBAIC0xMjc1LDcgKzEyNzcsNyBAQAogICAgICAgICByZXR1cm4gUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRnVuY3Rpb24ocmV0VmFsdWVTaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFeHBhbmRFbnZpcm9ubWVudFN0cmluZ3MiKTsKICAgICB9Ci0gICAgcmV0VmFsdWUgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhyZXRWYWx1ZVNpemUgKiBzaXplb2Yod2NoYXJfdCkpOworICAgIHJldFZhbHVlID0gUHlNZW1fTmV3KHdjaGFyX3QsIHJldFZhbHVlU2l6ZSk7CiAgICAgaWYgKHJldFZhbHVlID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgfQpAQCAtMTc5Niw5ICsxNzk4LDkgQEAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkhLRVlUeXBlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFB5T2JqZWN0ICopJlB5SEtFWV9UeXBlKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBQeV9JTkNSRUYoUHlFeGNfV2luZG93c0Vycm9yKTsKKyAgICBQeV9JTkNSRUYoUHlFeGNfT1NFcnJvcik7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJlcnJvciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvcikgIT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvcikgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKiBBZGQgdGhlIHJlbGV2YW50IGNvbnN0YW50cyAqLwpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCnNpbWlsYXJpdHkgaW5kZXggNjUlCnJlbmFtZSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpyZW5hbWUgdG8gUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLmQwZWU3MmYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2oKQEAgLTEsNCArMSw0IEBACi3vu788P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJ1dGYtOCI/PgorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KIDxQcm9qZWN0IERlZmF1bHRUYXJnZXRzPSJCdWlsZCIgVG9vbHNWZXJzaW9uPSI0LjAiIHhtbG5zPSJodHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL2RldmVsb3Blci9tc2J1aWxkLzIwMDMiPgogICA8SXRlbUdyb3VwIExhYmVsPSJQcm9qZWN0Q29uZmlndXJhdGlvbnMiPgogICAgIDxQcm9qZWN0Q29uZmlndXJhdGlvbiBJbmNsdWRlPSJEZWJ1Z3xXaW4zMiI+CkBAIC0zNSwxMDQgKzM1LDk1IEBACiAgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KICAgPC9JdGVtR3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIExhYmVsPSJHbG9iYWxzIj4KLSAgICA8UHJvamVjdEd1aWQ+e0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH08L1Byb2plY3RHdWlkPgotICAgIDxSb290TmFtZXNwYWNlPnc5eHBvcGVuPC9Sb290TmFtZXNwYWNlPgorICAgIDxQcm9qZWN0R3VpZD57RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfTwvUHJvamVjdEd1aWQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X292ZXJsYXBwZWQ8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CiAgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjcgKzE1MCw4MyBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+bGliYzslKElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcyk8L0lnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFEMTEwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8SWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPmxpYmM7JShJZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXMpPC9JZ25vcmVTcGVjaWZpY0RlZmF1bHRMaWJyYXJpZXM+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxRDExMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPElnbm9yZVNwZWNpZmljRGVmYXVsdExpYnJhcmllcz5saWJjOyUoSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzKTwvSWdub3JlU3BlY2lmaWNEZWZhdWx0TGlicmFyaWVzPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MUQxMTAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG92ZXJsYXBwZWQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL19vdmVybGFwcGVkLnZjeHByb2ouZmlsdGVycwpzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBQQ2J1aWxkL3c5eHBvcGVuLnZjeHByb2ouZmlsdGVycwpyZW5hbWUgdG8gUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qLmZpbHRlcnMKaW5kZXggZGVjNjdhZC4uNzhkZTg5NSAxMDA2NDQKLS0tIGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9fb3ZlcmxhcHBlZC52Y3hwcm9qLmZpbHRlcnMKQEAgLTIsMTEgKzIsMTEgQEAKIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cD4KICAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YWJjMmRmZmQtM2YyYS00N2JkLWI4OWItMDMxNGM5OWVmMjFlfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2ZjY3YzhkYi03ZGU3LTQ3MTQtYTk2Ny0yYjBkNGJjNzFmMmV9PC9VbmlxdWVJZGVudGlmaWVyPgogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvdmVybGFwcGVkLmMiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ogYi9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2oKaW5kZXggMzkyZGFkMS4uZWQzNWQ1YiAxMDA2NDQKLS0tIGEvUENidWlsZC9fc3FsaXRlMy52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvagpAQCAtMjQzLDcgKzI0Myw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVcbW9kdWxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccHJlcGFyZV9wcm90b2NvbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHJvdy5oIiAvPgotICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHNxbGl0ZWNvbXBhdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHV0aWwuaCIgLz4KICAgPC9JdGVtR3JvdXA+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zcWxpdGUzLnZjeHByb2ouZmlsdGVycyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCmluZGV4IDg4ZTVmZGIuLmRjZTc3YzkgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvX3NxbGl0ZTMudmN4cHJvai5maWx0ZXJzCkBAIC0zMCw5ICszMCw2IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zcWxpdGVccm93LmgiPgogICAgICAgPEZpbHRlcj5IZWFkZXIgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3NxbGl0ZVxzcWxpdGVjb21wYXQuaCI+Ci0gICAgICA8RmlsdGVyPkhlYWRlciBGaWxlczwvRmlsdGVyPgotICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3FsaXRlXHN0YXRlbWVudC5oIj4KICAgICAgIDxGaWx0ZXI+SGVhZGVyIEZpbGVzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9QQ2J1aWxkL19zc2wudmN4cHJvaiBiL1BDYnVpbGQvX3NzbC52Y3hwcm9qCmluZGV4IGFlNzFkMTkuLjczNzg3OTQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvX3NzbC52Y3hwcm9qCisrKyBiL1BDYnVpbGQvX3NzbC52Y3hwcm9qCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQzMlxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgIDwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KLSAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KKyAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzMl8zMi5saWI7Y3J5cHQzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxsaWJlYXkzMi5saWI7JChvcGVuc3NsRGlyKVxvdXQ2NFxzc2xlYXkzMi5saWI7JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KQEAgLTIxMiw3ICsyMTIsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHSW5zdHJ1bWVudHx4NjQnIj4KQEAgLTIyNyw3ICsyMjcsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDY0XHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KQEAgLTI0MCw3ICsyNDAsNyBAQAogICAgICAgPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgotICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgorICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+d3MyXzMyLmxpYjtjcnlwdDMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXGxpYmVheTMyLmxpYjskKG9wZW5zc2xEaXIpXG91dDMyXHNzbGVheTMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgpAQCAtMjU1LDcgKzI1NSw3IEBACiAgICAgICA8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+Ci0gICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CisgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53czJfMzIubGliO2NyeXB0MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcbGliZWF5MzIubGliOyQob3BlbnNzbERpcilcb3V0NjRcc3NsZWF5MzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CiAgICAgICA8VGFyZ2V0TWFjaGluZT5NYWNoaW5lWDY0PC9UYXJnZXRNYWNoaW5lPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpkaWZmIC0tZ2l0IGEvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2ogYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvagpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2M3YWQyCi0tLSAvZGV2L251bGwKKysrIGIvUENidWlsZC9fdGVzdGVtYmVkLnZjeHByb2oKQEAgLTAsMCArMSwxNjEgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBEZWZhdWx0VGFyZ2V0cz0iQnVpbGQiIFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KKyAgPEl0ZW1Hcm91cCBMYWJlbD0iUHJvamVjdENvbmZpZ3VyYXRpb25zIj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iRGVidWd8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+RGVidWc8L0NvbmZpZ3VyYXRpb24+CisgICAgICA8UGxhdGZvcm0+V2luMzI8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IkRlYnVnfHg2NCI+CisgICAgICA8Q29uZmlndXJhdGlvbj5EZWJ1ZzwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgICAgPFByb2plY3RDb25maWd1cmF0aW9uIEluY2x1ZGU9IlJlbGVhc2V8V2luMzIiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT5XaW4zMjwvUGxhdGZvcm0+CisgICAgPC9Qcm9qZWN0Q29uZmlndXJhdGlvbj4KKyAgICA8UHJvamVjdENvbmZpZ3VyYXRpb24gSW5jbHVkZT0iUmVsZWFzZXx4NjQiPgorICAgICAgPENvbmZpZ3VyYXRpb24+UmVsZWFzZTwvQ29uZmlndXJhdGlvbj4KKyAgICAgIDxQbGF0Zm9ybT54NjQ8L1BsYXRmb3JtPgorICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CisgIDwvSXRlbUdyb3VwPgorICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+CisgICAgPFByb2plY3RHdWlkPns2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9PC9Qcm9qZWN0R3VpZD4KKyAgICA8S2V5d29yZD5XaW4zMlByb2o8L0tleXdvcmQ+CisgICAgPFJvb3ROYW1lc3BhY2U+X3Rlc3RlbWJlZDwvUm9vdE5hbWVzcGFjZT4KKyAgPC9Qcm9wZXJ0eUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC5EZWZhdWx0LnByb3BzIiAvPgorICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPFVzZURlYnVnTGlicmFyaWVzPnRydWU8L1VzZURlYnVnTGlicmFyaWVzPgorICAgIDxDaGFyYWN0ZXJTZXQ+VW5pY29kZTwvQ2hhcmFjdGVyU2V0PgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxVc2VEZWJ1Z0xpYnJhcmllcz5mYWxzZTwvVXNlRGVidWdMaWJyYXJpZXM+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CisgICAgPENoYXJhY3RlclNldD5Vbmljb2RlPC9DaGFyYWN0ZXJTZXQ+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgorICA8L0ltcG9ydEdyb3VwPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IlByb3BlcnR5U2hlZXRzIiBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CisgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0iZGVidWcucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+CisgIDwvSW1wb3J0R3JvdXA+CisgIDxJbXBvcnRHcm91cCBMYWJlbD0iUHJvcGVydHlTaGVldHMiIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgorICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KKyAgPC9JbXBvcnRHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdSZWxlYXNlfFdpbjMyJyI+CisgICAgPExpbmtJbmNyZW1lbnRhbD5mYWxzZTwvTGlua0luY3JlbWVudGFsPgorICA8L1Byb3BlcnR5R3JvdXA+CisgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KKyAgICA8TGlua0luY3JlbWVudGFsPmZhbHNlPC9MaW5rSW5jcmVtZW50YWw+CisgIDwvUHJvcGVydHlHcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPFdhcm5pbmdMZXZlbD5MZXZlbDM8L1dhcm5pbmdMZXZlbD4KKyAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5XSU4zMjtfREVCVUc7X0NPTlNPTEU7JShQcmVwcm9jZXNzb3JEZWZpbml0aW9ucyk8L1ByZXByb2Nlc3NvckRlZmluaXRpb25zPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxMaW5rPgorICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPnRydWU8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KKyAgICA8L0xpbms+CisgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KKyAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8T3B0aW1pemF0aW9uPkRpc2FibGVkPC9PcHRpbWl6YXRpb24+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7X0RFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgorICAgIDxDbENvbXBpbGU+CisgICAgICA8V2FybmluZ0xldmVsPkxldmVsMzwvV2FybmluZ0xldmVsPgorICAgICAgPFByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPC9QcmVjb21waWxlZEhlYWRlcj4KKyAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KKyAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KKyAgICAgIDxJbnRyaW5zaWNGdW5jdGlvbnM+dHJ1ZTwvSW50cmluc2ljRnVuY3Rpb25zPgorICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPldJTjMyO05ERUJVRztfQ09OU09MRTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgPC9DbENvbXBpbGU+CisgICAgPExpbms+CisgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+dHJ1ZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgorICAgICAgPEVuYWJsZUNPTURBVEZvbGRpbmc+dHJ1ZTwvRW5hYmxlQ09NREFURm9sZGluZz4KKyAgICAgIDxPcHRpbWl6ZVJlZmVyZW5jZXM+dHJ1ZTwvT3B0aW1pemVSZWZlcmVuY2VzPgorICAgIDwvTGluaz4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxXYXJuaW5nTGV2ZWw+TGV2ZWwzPC9XYXJuaW5nTGV2ZWw+CisgICAgICA8UHJlY29tcGlsZWRIZWFkZXI+CisgICAgICA8L1ByZWNvbXBpbGVkSGVhZGVyPgorICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgorICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgorICAgICAgPEludHJpbnNpY0Z1bmN0aW9ucz50cnVlPC9JbnRyaW5zaWNGdW5jdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+V0lOMzI7TkRFQlVHO19DT05TT0xFOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8TGluaz4KKyAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CisgICAgICA8RW5hYmxlQ09NREFURm9sZGluZz50cnVlPC9FbmFibGVDT01EQVRGb2xkaW5nPgorICAgICAgPE9wdGltaXplUmVmZXJlbmNlcz50cnVlPC9PcHRpbWl6ZVJlZmVyZW5jZXM+CisgICAgPC9MaW5rPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0ZW1iZWQuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFByaXZhdGU+dHJ1ZTwvUHJpdmF0ZT4KKyAgICAgIDxSZWZlcmVuY2VPdXRwdXRBc3NlbWJseT50cnVlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICAgIDxDb3B5TG9jYWxTYXRlbGxpdGVBc3NlbWJsaWVzPmZhbHNlPC9Db3B5TG9jYWxTYXRlbGxpdGVBc3NlbWJsaWVzPgorICAgICAgPExpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPnRydWU8L0xpbmtMaWJyYXJ5RGVwZW5kZW5jaWVzPgorICAgICAgPFVzZUxpYnJhcnlEZXBlbmRlbmN5SW5wdXRzPmZhbHNlPC9Vc2VMaWJyYXJ5RGVwZW5kZW5jeUlucHV0cz4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CisgIDwvSXRlbUdyb3VwPgorICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgorICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgorICA8L0ltcG9ydEdyb3VwPgorPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1BDYnVpbGQvX3Rlc3RlbWJlZC52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYTU0ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL190ZXN0ZW1iZWQudmN4cHJvai5maWx0ZXJzCkBAIC0wLDAgKzEsMjIgQEAKK++7vzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+Cis8UHJvamVjdCBUb29sc1ZlcnNpb249IjQuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtR3JvdXA+CisgICAgPEZpbHRlciBJbmNsdWRlPSJTb3VyY2UgRmlsZXMiPgorICAgICAgPFVuaXF1ZUlkZW50aWZpZXI+ezRGQzczN0YxLUM3QTUtNDM3Ni1BMDY2LTJBMzJENzUyQTJGRn08L1VuaXF1ZUlkZW50aWZpZXI+CisgICAgICA8RXh0ZW5zaW9ucz5jcHA7YztjYztjeHg7ZGVmO29kbDtpZGw7aHBqO2JhdDthc207YXNteDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IkhlYWRlciBGaWxlcyI+CisgICAgICA8VW5pcXVlSWRlbnRpZmllcj57OTM5OTUzODAtODlCRC00YjA0LTg4RUItNjI1RkJFNTJFQkZCfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxFeHRlbnNpb25zPmg7aHBwO2h4eDtobTtpbmw7aW5jO3hzZDwvRXh0ZW5zaW9ucz4KKyAgICA8L0ZpbHRlcj4KKyAgICA8RmlsdGVyIEluY2x1ZGU9IlJlc291cmNlIEZpbGVzIj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPns2N0RBNkFCNi1GODAwLTRjMDgtOEI3QS04M0JCMTIxQUFEMDF9PC9VbmlxdWVJZGVudGlmaWVyPgorICAgICAgPEV4dGVuc2lvbnM+cmM7aWNvO2N1cjtibXA7ZGxnO3JjMjtyY3Q7YmluO3JncztnaWY7anBnO2pwZWc7anBlO3Jlc3g7dGlmZjt0aWY7cG5nO3dhdjttZmNyaWJib24tbXM8L0V4dGVuc2lvbnM+CisgICAgPC9GaWx0ZXI+CisgIDwvSXRlbUdyb3VwPgorICA8SXRlbUdyb3VwPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGVtYmVkLmMiPgorICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtR3JvdXA+Cis8L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUENidWlsZC93OXhwb3Blbi52Y3hwcm9qIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2oKc2ltaWxhcml0eSBpbmRleCA2NSUKY29weSBmcm9tIFBDYnVpbGQvdzl4cG9wZW4udmN4cHJvagpjb3B5IHRvIFBDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qCmluZGV4IGQxYWZlMjIuLjg0OTg0ZmYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvagorKysgYi9QQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvagpAQCAtMzUsMTA0ICszNSw5NSBAQAogICAgIDwvUHJvamVjdENvbmZpZ3VyYXRpb24+CiAgIDwvSXRlbUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iR2xvYmFscyI+Ci0gICAgPFByb2plY3RHdWlkPntFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9PC9Qcm9qZWN0R3VpZD4KLSAgICA8Um9vdE5hbWVzcGFjZT53OXhwb3BlbjwvUm9vdE5hbWVzcGFjZT4KKyAgICA8UHJvamVjdEd1aWQ+ezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX08L1Byb2plY3RHdWlkPgorICAgIDxSb290TmFtZXNwYWNlPl90ZXN0aW1wb3J0bXVsdGlwbGU8L1Jvb3ROYW1lc3BhY2U+CisgICAgPEtleXdvcmQ+V2luMzJQcm9qPC9LZXl3b3JkPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLkRlZmF1bHQucHJvcHMiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdVcGRhdGV8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgotICAgIDxDaGFyYWN0ZXJTZXQ+TXVsdGlCeXRlPC9DaGFyYWN0ZXJTZXQ+CisgICAgPENvbmZpZ3VyYXRpb25UeXBlPkR5bmFtaWNMaWJyYXJ5PC9Db25maWd1cmF0aW9uVHlwZT4KKyAgICA8Q2hhcmFjdGVyU2V0Pk5vdFNldDwvQ2hhcmFjdGVyU2V0PgorICAgIDxXaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+dHJ1ZTwvV2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPgogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxQcm9wZXJ0eUdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiBMYWJlbD0iQ29uZmlndXJhdGlvbiI+Ci0gICAgPENvbmZpZ3VyYXRpb25UeXBlPkFwcGxpY2F0aW9uPC9Db25maWd1cmF0aW9uVHlwZT4KLSAgICA8VXNlT2ZNZmM+ZmFsc2U8L1VzZU9mTWZjPgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CiAgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CisgICAgPFdob2xlUHJvZ3JhbU9wdGltaXphdGlvbj50cnVlPC9XaG9sZVByb2dyYW1PcHRpbWl6YXRpb24+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgTGFiZWw9IkNvbmZpZ3VyYXRpb24iPgotICAgIDxDb25maWd1cmF0aW9uVHlwZT5BcHBsaWNhdGlvbjwvQ29uZmlndXJhdGlvblR5cGU+Ci0gICAgPFVzZU9mTWZjPmZhbHNlPC9Vc2VPZk1mYz4KLSAgICA8Q2hhcmFjdGVyU2V0Pk11bHRpQnl0ZTwvQ2hhcmFjdGVyU2V0PgorICAgIDxDb25maWd1cmF0aW9uVHlwZT5EeW5hbWljTGlicmFyeTwvQ29uZmlndXJhdGlvblR5cGU+CisgICAgPENoYXJhY3RlclNldD5Ob3RTZXQ8L0NoYXJhY3RlclNldD4KKyAgICA8V2hvbGVQcm9ncmFtT3B0aW1pemF0aW9uPnRydWU8L1dob2xlUHJvZ3JhbU9wdGltaXphdGlvbj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJDb25maWd1cmF0aW9uIj4KLSAgICA8Q29uZmlndXJhdGlvblR5cGU+QXBwbGljYXRpb248L0NvbmZpZ3VyYXRpb25UeXBlPgotICAgIDxVc2VPZk1mYz5mYWxzZTwvVXNlT2ZNZmM+Ci0gICAgPENoYXJhY3RlclNldD5NdWx0aUJ5dGU8L0NoYXJhY3RlclNldD4KKyAgICA8Q29uZmlndXJhdGlvblR5cGU+RHluYW1pY0xpYnJhcnk8L0NvbmZpZ3VyYXRpb25UeXBlPgorICAgIDxDaGFyYWN0ZXJTZXQ+Tm90U2V0PC9DaGFyYWN0ZXJTZXQ+CiAgIDwvUHJvcGVydHlHcm91cD4KICAgPEltcG9ydCBQcm9qZWN0PSIkKFZDVGFyZ2V0c1BhdGgpXE1pY3Jvc29mdC5DcHAucHJvcHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uU2V0dGluZ3MiPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBndXBkYXRlLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ2luc3RydW1lbnQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CisgICAgPEltcG9ydCBQcm9qZWN0PSJweWQucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgTGFiZWw9IlByb3BlcnR5U2hlZXRzIj4KICAgICA8SW1wb3J0IFByb2plY3Q9IiQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcyIgQ29uZGl0aW9uPSJleGlzdHMoJyQoVXNlclJvb3REaXIpXE1pY3Jvc29mdC5DcHAuJChQbGF0Zm9ybSkudXNlci5wcm9wcycpIiBMYWJlbD0iTG9jYWxBcHBEYXRhUGxhdGZvcm0iIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJweXByb2plY3QucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZF9kLnByb3BzIiAvPgogICA8L0ltcG9ydEdyb3VwPgogICA8SW1wb3J0R3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJwZ3VwZGF0ZS5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkLnByb3BzIiAvPgogICAgIDxJbXBvcnQgUHJvamVjdD0ieDY0LnByb3BzIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icmVsZWFzZS5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9InBnaW5zdHJ1bWVudC5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPEltcG9ydEdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIiBMYWJlbD0iUHJvcGVydHlTaGVldHMiPgogICAgIDxJbXBvcnQgUHJvamVjdD0iJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzIiBDb25kaXRpb249ImV4aXN0cygnJChVc2VyUm9vdERpcilcTWljcm9zb2Z0LkNwcC4kKFBsYXRmb3JtKS51c2VyLnByb3BzJykiIExhYmVsPSJMb2NhbEFwcERhdGFQbGF0Zm9ybSIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InB5cHJvamVjdC5wcm9wcyIgLz4KKyAgICA8SW1wb3J0IFByb2plY3Q9InB5ZC5wcm9wcyIgLz4KICAgICA8SW1wb3J0IFByb2plY3Q9Ing2NC5wcm9wcyIgLz4KLSAgICA8SW1wb3J0IFByb2plY3Q9InJlbGVhc2UucHJvcHMiIC8+CiAgIDwvSW1wb3J0R3JvdXA+CiAgIDxJbXBvcnRHcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfHg2NCciIExhYmVsPSJQcm9wZXJ0eVNoZWV0cyI+CiAgICAgPEltcG9ydCBQcm9qZWN0PSIkKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMiIENvbmRpdGlvbj0iZXhpc3RzKCckKFVzZXJSb290RGlyKVxNaWNyb3NvZnQuQ3BwLiQoUGxhdGZvcm0pLnVzZXIucHJvcHMnKSIgTGFiZWw9IkxvY2FsQXBwRGF0YVBsYXRmb3JtIiAvPgotICAgIDxJbXBvcnQgUHJvamVjdD0icHlwcm9qZWN0LnByb3BzIiAvPgorICAgIDxJbXBvcnQgUHJvamVjdD0icHlkX2QucHJvcHMiIC8+CiAgICAgPEltcG9ydCBQcm9qZWN0PSJ4NjQucHJvcHMiIC8+Ci0gICAgPEltcG9ydCBQcm9qZWN0PSJkZWJ1Zy5wcm9wcyIgLz4KICAgPC9JbXBvcnRHcm91cD4KICAgPFByb3BlcnR5R3JvdXAgTGFiZWw9IlVzZXJNYWNyb3MiIC8+CiAgIDxQcm9wZXJ0eUdyb3VwPgotICAgIDxfUHJvamVjdEZpbGVWZXJzaW9uPjEwLjAuNDAyMTkuMTwvX1Byb2plY3RGaWxlVmVyc2lvbj4KKyAgICA8X1Byb2plY3RGaWxlVmVyc2lvbj4xMC4wLjMwMzE5LjE8L19Qcm9qZWN0RmlsZVZlcnNpb24+CiAgICAgPENvZGVBbmFseXNpc1J1bGVTZXQgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3xXaW4zMiciPkFsbFJ1bGVzLnJ1bGVzZXQ8L0NvZGVBbmFseXNpc1J1bGVTZXQ+CiAgICAgPENvZGVBbmFseXNpc1J1bGVzIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8V2luMzInIiAvPgogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyIgLz4KQEAgLTE1OSwxMjkgKzE1MCw2OSBAQAogICAgIDxDb2RlQW5hbHlzaXNSdWxlQXNzZW1ibGllcyBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyIgLz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+RGlzYWJsZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxCYXNpY1J1bnRpbWVDaGVja3M+RW5hYmxlRmFzdENoZWNrczwvQmFzaWNSdW50aW1lQ2hlY2tzPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWREZWJ1ZzwvUnVudGltZUxpYnJhcnk+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KKyAgICAgIDxCYXNlQWRkcmVzcz4weDFlMUYwMDAwPC9CYXNlQWRkcmVzcz4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdEZWJ1Z3x4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5EaXNhYmxlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPEJhc2ljUnVudGltZUNoZWNrcz5FbmFibGVGYXN0Q2hlY2tzPC9CYXNpY1J1bnRpbWVDaGVja3M+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZERlYnVnPC9SdW50aW1lTGlicmFyeT4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXx4NjQnIj4KICAgICA8TWlkbD4KICAgICAgIDxUYXJnZXRFbnZpcm9ubWVudD5YNjQ8L1RhcmdldEVudmlyb25tZW50PgogICAgIDwvTWlkbD4KLSAgICA8Q2xDb21waWxlPgotICAgICAgPE9wdGltaXphdGlvbj5NYXhTcGVlZDwvT3B0aW1pemF0aW9uPgotICAgICAgPElubGluZUZ1bmN0aW9uRXhwYW5zaW9uPk9ubHlFeHBsaWNpdElubGluZTwvSW5saW5lRnVuY3Rpb25FeHBhbnNpb24+Ci0gICAgICA8U3RyaW5nUG9vbGluZz50cnVlPC9TdHJpbmdQb29saW5nPgotICAgICAgPFJ1bnRpbWVMaWJyYXJ5Pk11bHRpVGhyZWFkZWQ8L1J1bnRpbWVMaWJyYXJ5PgotICAgICAgPEZ1bmN0aW9uTGV2ZWxMaW5raW5nPnRydWU8L0Z1bmN0aW9uTGV2ZWxMaW5raW5nPgotICAgIDwvQ2xDb21waWxlPgogICAgIDxMaW5rPgotICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj5mYWxzZTwvR2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPgotICAgICAgPFN1YlN5c3RlbT5Db25zb2xlPC9TdWJTeXN0ZW0+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fFdpbjMyJyI+Ci0gICAgPENsQ29tcGlsZT4KLSAgICAgIDxPcHRpbWl6YXRpb24+TWF4U3BlZWQ8L09wdGltaXphdGlvbj4KLSAgICAgIDxJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj5Pbmx5RXhwbGljaXRJbmxpbmU8L0lubGluZUZ1bmN0aW9uRXhwYW5zaW9uPgotICAgICAgPFN0cmluZ1Bvb2xpbmc+dHJ1ZTwvU3RyaW5nUG9vbGluZz4KLSAgICAgIDxSdW50aW1lTGlicmFyeT5NdWx0aVRocmVhZGVkPC9SdW50aW1lTGlicmFyeT4KLSAgICAgIDxGdW5jdGlvbkxldmVsTGlua2luZz50cnVlPC9GdW5jdGlvbkxldmVsTGlua2luZz4KLSAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KLSAgICAgIDxHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+ZmFsc2U8L0dlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj4KLSAgICAgIDxTdWJTeXN0ZW0+Q29uc29sZTwvU3ViU3lzdGVtPgotICAgICAgPEltcG9ydExpYnJhcnk+Ci0gICAgICA8L0ltcG9ydExpYnJhcnk+CisgICAgICA8QmFzZUFkZHJlc3M+MHgxZTFGMDAwMDwvQmFzZUFkZHJlc3M+CiAgICAgPC9MaW5rPgogICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUEdJbnN0cnVtZW50fHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR1VwZGF0ZXxXaW4zMiciPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfHg2NCciPgogICAgIDxNaWRsPgogICAgICAgPFRhcmdldEVudmlyb25tZW50Plg2NDwvVGFyZ2V0RW52aXJvbm1lbnQ+CiAgICAgPC9NaWRsPgotICAgIDxDbENvbXBpbGU+Ci0gICAgICA8T3B0aW1pemF0aW9uPk1heFNwZWVkPC9PcHRpbWl6YXRpb24+Ci0gICAgICA8SW5saW5lRnVuY3Rpb25FeHBhbnNpb24+T25seUV4cGxpY2l0SW5saW5lPC9JbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj4KLSAgICAgIDxTdHJpbmdQb29saW5nPnRydWU8L1N0cmluZ1Bvb2xpbmc+Ci0gICAgICA8UnVudGltZUxpYnJhcnk+TXVsdGlUaHJlYWRlZDwvUnVudGltZUxpYnJhcnk+Ci0gICAgICA8RnVuY3Rpb25MZXZlbExpbmtpbmc+dHJ1ZTwvRnVuY3Rpb25MZXZlbExpbmtpbmc+Ci0gICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+Ci0gICAgICA8R2VuZXJhdGVEZWJ1Z0luZm9ybWF0aW9uPmZhbHNlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+Ci0gICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxJbXBvcnRMaWJyYXJ5PgotICAgICAgPC9JbXBvcnRMaWJyYXJ5PgorICAgICAgPEJhc2VBZGRyZXNzPjB4MWUxRjAwMDA8L0Jhc2VBZGRyZXNzPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg2NDwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90ZXN0aW1wb3J0bXVsdGlwbGUuYyIgLz4KKyAgPC9JdGVtR3JvdXA+CisgIDxJdGVtR3JvdXA+CisgICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KKyAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgorICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KKyAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzIGIvUENidWlsZC9fdGVzdGltcG9ydG11bHRpcGxlLnZjeHByb2ouZmlsdGVycwpzaW1pbGFyaXR5IGluZGV4IDcyJQpjb3B5IGZyb20gUENidWlsZC93OXhwb3Blbi52Y3hwcm9qLmZpbHRlcnMKY29weSB0byBQQ2J1aWxkL190ZXN0aW1wb3J0bXVsdGlwbGUudmN4cHJvai5maWx0ZXJzCmluZGV4IGRlYzY3YWQuLmRiMGQwYTYgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvdzl4cG9wZW4udmN4cHJvai5maWx0ZXJzCisrKyBiL1BDYnVpbGQvX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTIsMTIgKzIsMTIgQEAKIDxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iNC4wIiB4bWxucz0iaHR0cDovL3NjaGVtYXMubWljcm9zb2Z0LmNvbS9kZXZlbG9wZXIvbXNidWlsZC8yMDAzIj4KICAgPEl0ZW1Hcm91cD4KICAgICA8RmlsdGVyIEluY2x1ZGU9IlNvdXJjZSBGaWxlcyI+Ci0gICAgICA8VW5pcXVlSWRlbnRpZmllcj57YWJjMmRmZmQtM2YyYS00N2JkLWI4OWItMDMxNGM5OWVmMjFlfTwvVW5pcXVlSWRlbnRpZmllcj4KKyAgICAgIDxVbmlxdWVJZGVudGlmaWVyPnsxZWMzOGFkOS0xYWJmLTRiODAtODYyOC1hYzQzY2NiYTMyNGJ9PC9VbmlxdWVJZGVudGlmaWVyPgogICAgIDwvRmlsdGVyPgogICA8L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXHc5eHBvcGVuLmMiPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdGVzdGltcG9ydG11bHRpcGxlLmMiPgogICAgICAgPEZpbHRlcj5Tb3VyY2UgRmlsZXM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KICAgPC9JdGVtR3JvdXA+Ci08L1Byb2plY3Q+ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorPC9Qcm9qZWN0PgpkaWZmIC0tZ2l0IGEvUENidWlsZC9idWlsZC5iYXQgYi9QQ2J1aWxkL2J1aWxkLmJhdAppbmRleCBmYTBkOTViLi4wYzQ4MmY1IDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkLmJhdAorKysgYi9QQ2J1aWxkL2J1aWxkLmJhdApAQCAtMSwxOSArMSwxMTMgQEAKLUBlY2hvIG9mZgotcmVtIEEgYmF0Y2ggcHJvZ3JhbSB0byBidWlsZCBvciByZWJ1aWxkIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uLgotcmVtIGp1c3QgZm9yIGNvbnZlbmllbmNlLgotCi1zZXRsb2NhbAotc2V0IHBsYXRmPVdpbjMyCi1zZXQgY29uZj1SZWxlYXNlCi1zZXQgdGFyZ2V0PWJ1aWxkCi1zZXQgZGlyPSV+ZHAwCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItYyIgKHNldCBjb25mPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1yIiAoc2V0IHRhcmdldD1yZWJ1aWxkKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSItZCIgKHNldCBjb25mPURlYnVnKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLQotc2V0IGNtZD1tc2J1aWxkIC9wOnVzZWVudj10cnVlICVkaXIlcGNidWlsZC5zbG4gL3Q6JXRhcmdldCUgL3A6Q29uZmlndXJhdGlvbj0lY29uZiUgL3A6UGxhdGZvcm09JXBsYXRmJQotZWNobyAlY21kJQotJWNtZCUKK0BlY2hvIG9mZg0KK3JlbSBBIGJhdGNoIHByb2dyYW0gdG8gYnVpbGQgb3IgcmVidWlsZCBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiwNCityZW0ganVzdCBmb3IgY29udmVuaWVuY2UuDQorDQorcmVtIEFyZ3VtZW50czoNCityZW0gIC1jICBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHQ6IFJlbGVhc2UpDQorcmVtICAtcCAgU2V0IHRoZSBwbGF0Zm9ybSAoeDY0IG9yIFdpbjMyLCBkZWZhdWx0OiBXaW4zMikNCityZW0gIC1yICBUYXJnZXQgUmVidWlsZCBpbnN0ZWFkIG9mIEJ1aWxkDQorcmVtICAtdCAgU2V0IHRoZSB0YXJnZXQgbWFudWFsbHkgKEJ1aWxkLCBSZWJ1aWxkLCBvciBDbGVhbikNCityZW0gIC1kICBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gdG8gRGVidWcNCityZW0gIC1lICBQdWxsIGluIGV4dGVybmFsIGxpYnJhcmllcyB1c2luZyBnZXRfZXh0ZXJuYWxzLmJhdA0KK3JlbSAgLW0gIEVuYWJsZSBwYXJhbGxlbCBidWlsZA0KK3JlbSAgLU0gIERpc2FibGUgcGFyYWxsZWwgYnVpbGQgKGRpc2FibGVkIGJ5IGRlZmF1bHQpDQorcmVtICAtdiAgSW5jcmVhc2VkIG91dHB1dCBtZXNzYWdlcw0KK3JlbSAgLWsgIEF0dGVtcHQgdG8ga2lsbCBhbnkgcnVubmluZyBQeXRob25zIGJlZm9yZSBidWlsZGluZw0KKw0KK3NldGxvY2FsDQorc2V0IHBsYXRmPVdpbjMyDQorc2V0IHZzX3BsYXRmPXg4Ng0KK3NldCBjb25mPVJlbGVhc2UNCitzZXQgdGFyZ2V0PUJ1aWxkDQorc2V0IGRpcj0lfmRwMA0KK3NldCBwYXJhbGxlbD0NCitzZXQgdmVyYm9zZT0vbm9sb2dvIC92Om0NCitzZXQga2lsbD0NCitzZXQgYnVpbGRfdGtpbnRlcj0NCisNCis6Q2hlY2tPcHRzDQoraWYgJyUxJz09Jy1jJyAoc2V0IGNvbmY9JTIpICYgc2hpZnQgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgJyUxJz09Jy1wJyAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICclMSc9PSctcicgKHNldCB0YXJnZXQ9UmVidWlsZCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgJyUxJz09Jy10JyAoc2V0IHRhcmdldD0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAnJTEnPT0nLWQnIChzZXQgY29uZj1EZWJ1ZykgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQoraWYgJyUxJz09Jy1lJyBjYWxsICIlZGlyJWdldF9leHRlcm5hbHMuYmF0IiAmIChzZXQgYnVpbGRfdGtpbnRlcj10cnVlKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAnJTEnPT0nLW0nIChzZXQgcGFyYWxsZWw9L20pICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICclMSc9PSctTScgKHNldCBwYXJhbGxlbD0pICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICclMSc9PSctdicgKHNldCB2ZXJib3NlPS92Om4pICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICclMSc9PSctaycgKHNldCBraWxsPXRydWUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KKw0KK2lmICclY29uZiUnPT0nRGVidWcnIChzZXQgZGJnX2V4dD1fZCkgZWxzZSAoc2V0IGRiZ19leHQ9KQ0KK2lmICclcGxhdGYlJz09J3g2NCcgKA0KKyAgICBzZXQgdnNfcGxhdGY9eDg2X2FtZDY0DQorICAgIHNldCBidWlsZGRpcj0lZGlyJWFtZDY0XA0KKykgZWxzZSAoDQorICAgIHNldCBidWlsZGRpcj0lZGlyJQ0KKykNCisNCityZW0gU2V0dXAgdGhlIGVudmlyb25tZW50DQorY2FsbCAiJWRpciVlbnYuYmF0IiAldnNfcGxhdGYlDQorDQoraWYgJyVraWxsJSc9PSd0cnVlJyAoDQorICAgIG1zYnVpbGQgIiVkaXIla2lsbF9weXRob24udmN4cHJvaiIgJXZlcmJvc2UlIC9wOkNvbmZpZ3VyYXRpb249JWNvbmYlIC9wOlBsYXRmb3JtPSVwbGF0ZiUgJiYgIiVidWlsZGRpciVraWxsX3B5dGhvbiVkYmdfZXh0JS5leGUiDQorKQ0KKw0KK3NldCBleHRlcm5hbHNfZGlyPSVkaXIlLi5cZXh0ZXJuYWxzDQoraWYgJyVidWlsZF90a2ludGVyJSc9PSd0cnVlJyAoDQorICAgIGlmICclcGxhdGYlJz09J3g2NCcgKA0KKyAgICAgICAgc2V0IHRjbHRrZGlyPSVleHRlcm5hbHNfZGlyJVx0Y2x0azY0DQorICAgICAgICBzZXQgbWFjaGluZT1BTUQ2NA0KKyAgICApIGVsc2UgKA0KKyAgICAgICAgc2V0IHRjbHRrZGlyPSVleHRlcm5hbHNfZGlyJVx0Y2x0aw0KKyAgICAgICAgc2V0IG1hY2hpbmU9SVg4Ng0KKyAgICApDQorICAgIGlmICclY29uZiUnPT0nRGVidWcnICgNCisgICAgICAgIHNldCB0Y2xfZGJnX2V4dD1nDQorICAgICAgICBzZXQgZGVidWdfZmxhZz0xDQorICAgICAgICBzZXQgb3B0aW9ucz1zeW1ib2xzDQorICAgICkgZWxzZSAoDQorICAgICAgICBzZXQgdGNsX2RiZ19leHQ9DQorICAgICAgICBzZXQgZGVidWdfZmxhZz0wDQorICAgICAgICBzZXQgb3B0aW9ucz0NCisgICAgKQ0KKyAgICBzZXQgdGNsZGlyPSVleHRlcm5hbHNfZGlyJVx0Y2wtOC42LjEuMA0KKyAgICBzZXQgdGtkaXI9JWV4dGVybmFsc19kaXIlXHRrLTguNi4xLjANCisgICAgc2V0IHRpeGRpcj0lZXh0ZXJuYWxzX2RpciVcdGl4LTguNC4zLjQNCispDQoraWYgJyVidWlsZF90a2ludGVyJSc9PSd0cnVlJyAoDQorICAgIGlmIG5vdCBleGlzdCAiJXRjbHRrZGlyJVxiaW5cdGNsODZ0JXRjbF9kYmdfZXh0JS5kbGwiICgNCisgICAgICAgIEByZW0gYWxsIGFuZCBpbnN0YWxsIG5lZWQgdG8gYmUgc2VwYXJhdGUgaW52b2NhdGlvbnMsIG90aGVyd2lzZSBubWFrZWhscCBpcyBub3QgZm91bmQgb24gaW5zdGFsbA0KKyAgICAgICAgcHVzaGQgIiV0Y2xkaXIlXHdpbiINCisgICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE1BQ0hJTkU9JW1hY2hpbmUlIE9QVFM9JW9wdGlvbnMlIElOU1RBTExESVI9IiV0Y2x0a2RpciUiIGNsZWFuIGFsbA0KKyAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0lbWFjaGluZSUgT1BUUz0lb3B0aW9ucyUgSU5TVEFMTERJUj0iJXRjbHRrZGlyJSIgaW5zdGFsbC1iaW5hcmllcyBpbnN0YWxsLWxpYnJhcmllcw0KKyAgICAgICAgcG9wZA0KKyAgICApDQorICAgIGlmIG5vdCBleGlzdCAiJWJ1aWxkZGlyJXRjbDg2dCV0Y2xfZGJnX2V4dCUuZGxsIiAoDQorICAgICAgICB4Y29weSAiJXRjbHRrZGlyJVxiaW5cdGNsODZ0JXRjbF9kYmdfZXh0JS5kbGwiICIlYnVpbGRkaXIlIg0KKyAgICApDQorDQorICAgIGlmIG5vdCBleGlzdCAiJXRjbHRrZGlyJVxiaW5cdGs4NnQldGNsX2RiZ19leHQlLmRsbCIgKA0KKyAgICAgICAgcHVzaGQgIiV0a2RpciVcd2luIg0KKyAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0lbWFjaGluZSUgT1BUUz0lb3B0aW9ucyUgSU5TVEFMTERJUj0iJXRjbHRrZGlyJSIgVENMRElSPSIldGNsZGlyJSIgY2xlYW4NCisgICAgICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIE1BQ0hJTkU9JW1hY2hpbmUlIE9QVFM9JW9wdGlvbnMlIElOU1RBTExESVI9IiV0Y2x0a2RpciUiIFRDTERJUj0iJXRjbGRpciUiIGFsbA0KKyAgICAgICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT0lbWFjaGluZSUgT1BUUz0lb3B0aW9ucyUgSU5TVEFMTERJUj0iJXRjbHRrZGlyJSIgVENMRElSPSIldGNsZGlyJSIgaW5zdGFsbC1iaW5hcmllcyBpbnN0YWxsLWxpYnJhcmllcw0KKyAgICAgICAgcG9wZA0KKyAgICApDQorICAgIGlmIG5vdCBleGlzdCAiJWJ1aWxkZGlyJXRrODZ0JXRjbF9kYmdfZXh0JS5kbGwiICgNCisgICAgICAgIHhjb3B5ICIldGNsdGtkaXIlXGJpblx0azg2dCV0Y2xfZGJnX2V4dCUuZGxsIiAiJWJ1aWxkZGlyJSINCisgICAgKQ0KKw0KKyAgICBpZiBub3QgZXhpc3QgIiV0Y2x0a2RpciVcbGliXHRpeDguNC4zXHRpeDg0JXRjbF9kYmdfZXh0JS5kbGwiICgNCisgICAgICAgIHB1c2hkICIldGl4ZGlyJVx3aW4iDQorICAgICAgICBubWFrZSAtZiBweXRob24ubWFrIERFQlVHPSVkZWJ1Z19mbGFnJSBNQUNISU5FPSVtYWNoaW5lJSBUQ0xfRElSPSIldGNsZGlyJSIgVEtfRElSPSIldGtkaXIlIiBJTlNUQUxMX0RJUj0iJXRjbHRrZGlyJSIgY2xlYW4NCisgICAgICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgREVCVUc9JWRlYnVnX2ZsYWclIE1BQ0hJTkU9JW1hY2hpbmUlIFRDTF9ESVI9IiV0Y2xkaXIlIiBUS19ESVI9IiV0a2RpciUiIElOU1RBTExfRElSPSIldGNsdGtkaXIlIiBhbGwNCisgICAgICAgIG5tYWtlIC1mIHB5dGhvbi5tYWsgREVCVUc9JWRlYnVnX2ZsYWclIE1BQ0hJTkU9JW1hY2hpbmUlIFRDTF9ESVI9IiV0Y2xkaXIlIiBUS19ESVI9IiV0a2RpciUiIElOU1RBTExfRElSPSIldGNsdGtkaXIlIiBpbnN0YWxsDQorICAgICAgICBwb3BkDQorICAgICkNCispDQorDQorcmVtIENhbGwgb24gTVNCdWlsZCB0byBkbyB0aGUgd29yaywgZWNobyB0aGUgY29tbWFuZC4NCityZW0gUGFzc2luZyAlMS05IGlzIG5vdCB0aGUgcHJlZmVycmVkIG9wdGlvbiwgYnV0IGFyZ3VtZW50IHBhcnNpbmcgaW4NCityZW0gYmF0Y2ggaXMsIHNoYWxsIHdlIHNheSwgImxhY2tsdXN0ZXIiDQorZWNobyBvbg0KK21zYnVpbGQgIiVkaXIlcGNidWlsZC5zbG4iIC90OiV0YXJnZXQlICVwYXJhbGxlbCUgJXZlcmJvc2UlIC9wOkNvbmZpZ3VyYXRpb249JWNvbmYlIC9wOlBsYXRmb3JtPSVwbGF0ZiUgJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX2Vudi5iYXQgYi9QQ2J1aWxkL2J1aWxkX2Vudi5iYXQKaW5kZXggNGM2N2FlMy4uMDEwMjRjZiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9lbnYuYmF0CisrKyBiL1BDYnVpbGQvYnVpbGRfZW52LmJhdApAQCAtMSArMSBAQAotQCVjb21zcGVjJSAvayBlbnYuYmF0ICUqCitAJWNvbXNwZWMlIC9rIGVudi5iYXQgJSoNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3Bnby5iYXQgYi9QQ2J1aWxkL2J1aWxkX3Bnby5iYXQKaW5kZXggMGMwYTQ3My4uZDdlNGU4YiAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9wZ28uYmF0CisrKyBiL1BDYnVpbGQvYnVpbGRfcGdvLmJhdApAQCAtMSw0MSArMSw0MSBAQAotQGVjaG8gb2ZmCi1yZW0gQSBiYXRjaCBwcm9ncmFtIHRvIGJ1aWxkIFBHTyAoUHJvZmlsZSBndWlkZWQgb3B0aW1pemF0aW9uKSBieSBmaXJzdAotcmVtIGJ1aWxkaW5nIGluc3RydW1lbnRlZCBiaW5hcmllcywgdGhlbiBydW5uaW5nIHRoZSB0ZXN0c3VpdGUsIGFuZAotcmVtIGZpbmFsbHkgYnVpbGRpbmcgdGhlIG9wdGltaXplZCBjb2RlLgotcmVtIE5vdGUsIGFmdGVyIHRoZSBmaXJzdCBpbnN0cnVtZW50ZWQgcnVuLCBvbmUgY2FuIGp1c3Qga2VlcCBvbgotcmVtIGJ1aWxkaW5nIHRoZSBQR1VwZGF0ZSBjb25maWd1cmF0aW9uIHdoaWxlIGRldmVsb3BpbmcuCi0KLXNldGxvY2FsCi1zZXQgcGxhdGY9V2luMzIKLQotcmVtIHVzZSB0aGUgcGVyZm9ybWFuY2UgdGVzdHN1aXRlLiAgVGhpcyBpcyBxdWljayBhbmQgc2ltcGxlCi1zZXQgam9iMT0uLlx0b29sc1xweWJlbmNoXHB5YmVuY2gucHkgLW4gMSAtQyAxIC0td2l0aC1nYwotc2V0IHBhdGgxPS4uXHRvb2xzXHB5YmVuY2gKLQotcmVtIG9yIHRoZSB3aG9sZSB0ZXN0c3VpdGUgZm9yIG1vcmUgdGhvcm91Z2ggdGVzdGluZwotc2V0IGpvYjI9Li5cbGliXHRlc3RccmVncnRlc3QucHkKLXNldCBwYXRoMj0uLlxsaWIKLQotc2V0IGpvYj0lam9iMSUKLXNldCBjbHJwYXRoPSVwYXRoMSUKLQotOkNoZWNrT3B0cwotaWYgIiUxIj09Ii1wIiAoc2V0IHBsYXRmPSUyKSAmIHNoaWZ0ICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii0yIiAoc2V0IGpvYj0lam9iMiUpICYgKHNldCBjbHJwYXRoPSVwYXRoMiUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1zZXQgUEdJPSVwbGF0ZiUtcGdpCi1zZXQgUEdPPSVwbGF0ZiUtcGdvCi0KLUBlY2hvIG9uCi1yZW0gYnVpbGQgdGhlIGluc3RydW1lbnRlZCB2ZXJzaW9uCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdJbnN0cnVtZW50Ci0KLXJlbSByZW1vdmUgLnB5YyBmaWxlcywgLnBnYyBmaWxlcyBhbmQgZXhlY3V0ZSB0aGUgam9iCi0lUEdJJVxweXRob24uZXhlIHJtcHljLnB5ICVjbHJwYXRoJQotZGVsICVQR0klXCoucGdjCi0lUEdJJVxweXRob24uZXhlICVqb2IlCi0KLXJlbSBmaW5hbGx5IGJ1aWxkIHRoZSBvcHRpbWl6ZWQgdmVyc2lvbgotaWYgZXhpc3QgJVBHTyUgZGVsIC9zIC9xICVQR08lCi1jYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdVcGRhdGUKLQorQGVjaG8gb2ZmDQorcmVtIEEgYmF0Y2ggcHJvZ3JhbSB0byBidWlsZCBQR08gKFByb2ZpbGUgZ3VpZGVkIG9wdGltaXphdGlvbikgYnkgZmlyc3QNCityZW0gYnVpbGRpbmcgaW5zdHJ1bWVudGVkIGJpbmFyaWVzLCB0aGVuIHJ1bm5pbmcgdGhlIHRlc3RzdWl0ZSwgYW5kDQorcmVtIGZpbmFsbHkgYnVpbGRpbmcgdGhlIG9wdGltaXplZCBjb2RlLg0KK3JlbSBOb3RlLCBhZnRlciB0aGUgZmlyc3QgaW5zdHJ1bWVudGVkIHJ1biwgb25lIGNhbiBqdXN0IGtlZXAgb24NCityZW0gYnVpbGRpbmcgdGhlIFBHVXBkYXRlIGNvbmZpZ3VyYXRpb24gd2hpbGUgZGV2ZWxvcGluZy4NCisNCitzZXRsb2NhbA0KK3NldCBwbGF0Zj1XaW4zMg0KKw0KK3JlbSB1c2UgdGhlIHBlcmZvcm1hbmNlIHRlc3RzdWl0ZS4gIFRoaXMgaXMgcXVpY2sgYW5kIHNpbXBsZQ0KK3NldCBqb2IxPS4uXHRvb2xzXHB5YmVuY2hccHliZW5jaC5weSAtbiAxIC1DIDEgLS13aXRoLWdjDQorc2V0IHBhdGgxPS4uXHRvb2xzXHB5YmVuY2gNCisNCityZW0gb3IgdGhlIHdob2xlIHRlc3RzdWl0ZSBmb3IgbW9yZSB0aG9yb3VnaCB0ZXN0aW5nDQorc2V0IGpvYjI9Li5cbGliXHRlc3RccmVncnRlc3QucHkNCitzZXQgcGF0aDI9Li5cbGliDQorDQorc2V0IGpvYj0lam9iMSUNCitzZXQgY2xycGF0aD0lcGF0aDElDQorDQorOkNoZWNrT3B0cw0KK2lmICIlMSI9PSItcCIgKHNldCBwbGF0Zj0lMikgJiBzaGlmdCAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitpZiAiJTEiPT0iLTIiIChzZXQgam9iPSVqb2IyJSkgJiAoc2V0IGNscnBhdGg9JXBhdGgyJSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQorDQorc2V0IFBHST0lcGxhdGYlLXBnaQ0KK3NldCBQR089JXBsYXRmJS1wZ28NCisNCitAZWNobyBvbg0KK3JlbSBidWlsZCB0aGUgaW5zdHJ1bWVudGVkIHZlcnNpb24NCitjYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdJbnN0cnVtZW50DQorDQorcmVtIHJlbW92ZSAucHljIGZpbGVzLCAucGdjIGZpbGVzIGFuZCBleGVjdXRlIHRoZSBqb2INCislUEdJJVxweXRob24uZXhlIHJtcHljLnB5ICVjbHJwYXRoJQ0KK2RlbCAlUEdJJVwqLnBnYw0KKyVQR0klXHB5dGhvbi5leGUgJWpvYiUNCisNCityZW0gZmluYWxseSBidWlsZCB0aGUgb3B0aW1pemVkIHZlcnNpb24NCitpZiBleGlzdCAlUEdPJSBkZWwgL3MgL3EgJVBHTyUNCitjYWxsIGJ1aWxkIC1wICVwbGF0ZiUgLWMgUEdVcGRhdGUNCisNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQgYi9QQ2J1aWxkL2J1aWxkX3NzbC5iYXQKaW5kZXggMzU3YjA4Yi4uMjk3NWI4ZCAxMDA2NDQKLS0tIGEvUENidWlsZC9idWlsZF9zc2wuYmF0CisrKyBiL1BDYnVpbGQvYnVpbGRfc3NsLmJhdApAQCAtMSwxMiArMSwxMiBAQAotQGVjaG8gb2ZmCi1pZiBub3QgZGVmaW5lZCBIT1NUX1BZVEhPTiAoCi0gIGlmICUxIEVRVSBEZWJ1ZyAoCi0gICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbl9kLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zM19kLmRsbCBleGl0IDEKLSAgKSBFTFNFICgKLSAgICBzZXQgSE9TVF9QWVRIT049cHl0aG9uLmV4ZQotICAgIGlmIG5vdCBleGlzdCBweXRob24zMy5kbGwgZXhpdCAxCi0gICkKLSkKLSVIT1NUX1BZVEhPTiUgYnVpbGRfc3NsLnB5ICUxICUyICUzCi0KK0BlY2hvIG9mZg0KK2lmIG5vdCBkZWZpbmVkIEhPU1RfUFlUSE9OICgNCisgIGlmICUxIEVRVSBEZWJ1ZyAoDQorICAgIHNldCBIT1NUX1BZVEhPTj1weXRob25fZC5leGUNCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjM0X2QuZGxsIGV4aXQgMQ0KKyAgKSBFTFNFICgNCisgICAgc2V0IEhPU1RfUFlUSE9OPXB5dGhvbi5leGUNCisgICAgaWYgbm90IGV4aXN0IHB5dGhvbjM0LmRsbCBleGl0IDENCisgICkNCispDQorJUhPU1RfUFlUSE9OJSBidWlsZF9zc2wucHkgJTEgJTIgJTMNCisNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL2J1aWxkX3NzbC5weSBiL1BDYnVpbGQvYnVpbGRfc3NsLnB5CmluZGV4IDVhN2E4OWUuLjdhZWU3MTUgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvYnVpbGRfc3NsLnB5CisrKyBiL1BDYnVpbGQvYnVpbGRfc3NsLnB5CkBAIC0yNCw2ICsyNCw3IEBACiAjIHB5dGhvbi5leGUgYnVpbGRfc3NsLnB5IFJlbGVhc2UgV2luMzIKIAogaW1wb3J0IG9zLCBzeXMsIHJlLCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCiAKICMgRmluZCBhbGwgImZvby5leGUiIGZpbGVzIG9uIHRoZSBQQVRILgogZGVmIGZpbmRfYWxsX29uX3BhdGgoZmlsZW5hbWUsIGV4dHJhcyA9IE5vbmUpOgpAQCAtNDYsMjkgKzQ3LDI4IEBACiAjIGlzIGF2YWlsYWJsZS4KIGRlZiBmaW5kX3dvcmtpbmdfcGVybChwZXJscyk6CiAgICAgZm9yIHBlcmwgaW4gcGVybHM6Ci0gICAgICAgIGZoID0gb3MucG9wZW4oJyIlcyIgLWUgInVzZSBXaW4zMjsiJyAlIHBlcmwpCi0gICAgICAgIGZoLnJlYWQoKQotICAgICAgICByYyA9IGZoLmNsb3NlKCkKLSAgICAgICAgaWYgcmM6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFtwZXJsLCAiLWUiLCAidXNlIFdpbjMyOyJdKQorICAgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CiAgICAgICAgICAgICBjb250aW51ZQotICAgICAgICByZXR1cm4gcGVybAotICAgIHByaW50KCJDYW4gbm90IGZpbmQgYSBzdWl0YWJsZSBQRVJMOiIpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gcGVybAorCiAgICAgaWYgcGVybHM6Ci0gICAgICAgIHByaW50KCIgdGhlIGZvbGxvd2luZyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kOiIpCisgICAgICAgIHByaW50KCJUaGUgZm9sbG93aW5nIHBlcmwgaW50ZXJwcmV0ZXJzIHdlcmUgZm91bmQ6IikKICAgICAgICAgZm9yIHAgaW4gcGVybHM6CiAgICAgICAgICAgICBwcmludCgiICIsIHApCiAgICAgICAgIHByaW50KCIgTm9uZSBvZiB0aGVzZSB2ZXJzaW9ucyBhcHBlYXIgc3VpdGFibGUgZm9yIGJ1aWxkaW5nIE9wZW5TU0wiKQogICAgIGVsc2U6Ci0gICAgICAgIHByaW50KCIgTk8gcGVybCBpbnRlcnByZXRlcnMgd2VyZSBmb3VuZCBvbiB0aGlzIG1hY2hpbmUgYXQgYWxsISIpCisgICAgICAgIHByaW50KCJOTyBwZXJsIGludGVycHJldGVycyB3ZXJlIGZvdW5kIG9uIHRoaXMgbWFjaGluZSBhdCBhbGwhIikKICAgICBwcmludCgiIFBsZWFzZSBpbnN0YWxsIEFjdGl2ZVBlcmwgYW5kIGVuc3VyZSBpdCBhcHBlYXJzIG9uIHlvdXIgcGF0aCIpCi0gICAgcmV0dXJuIE5vbmUKIAogIyBGZXRjaCBTU0wgZGlyZWN0b3J5IGZyb20gVkMgcHJvcGVydGllcwogZGVmIGdldF9zc2xfZGlyKCk6CiAgICAgcHJvcGZpbGUgPSAob3MucGF0aC5qb2luKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXyksICdweXByb2plY3QucHJvcHMnKSkKLSAgICB3aXRoIG9wZW4ocHJvcGZpbGUpIGFzIGY6CisgICAgd2l0aCBvcGVuKHByb3BmaWxlLCBlbmNvZGluZz0ndXRmLTgtc2lnJykgYXMgZjoKICAgICAgICAgbSA9IHJlLnNlYXJjaCgnb3BlbnNzbC0oW148XSspPCcsIGYucmVhZCgpKQotICAgICAgICByZXR1cm4gIi4uXC4uXG9wZW5zc2wtIittLmdyb3VwKDEpCisgICAgICAgIHJldHVybiAiLi5cZXh0ZXJuYWxzXG9wZW5zc2wtIittLmdyb3VwKDEpCiAKIAogZGVmIGNyZWF0ZV9tYWtlZmlsZTY0KG1ha2VmaWxlLCBtMzIpOgpAQCAtMTcwLDcgKzE3MCwxMSBAQAogICAgICAgICBtYWtlX2ZsYWdzID0gIi1hIgogICAgICMgcGVybCBzaG91bGQgYmUgb24gdGhlIHBhdGgsIGJ1dCB3ZSBhbHNvIGxvb2sgaW4gIlxwZXJsIiBhbmQgImM6XFxwZXJsIgogICAgICMgYXMgIndlbGwga25vd24iIGxvY2F0aW9ucwotICAgIHBlcmxzID0gZmluZF9hbGxfb25fcGF0aCgicGVybC5leGUiLCBbIlxccGVybFxcYmluIiwgIkM6XFxwZXJsXFxiaW4iXSkKKyAgICBwZXJscyA9IGZpbmRfYWxsX29uX3BhdGgoInBlcmwuZXhlIiwgW3IiXHBlcmxcYmluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIiQzpccGVybFxiaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgciJccGVybDY0XGJpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByIkM6XHBlcmw2NFxiaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdKQogICAgIHBlcmwgPSBmaW5kX3dvcmtpbmdfcGVybChwZXJscykKICAgICBpZiBwZXJsOgogICAgICAgICBwcmludCgiRm91bmQgYSB3b3JraW5nIHBlcmwgYXQgJyVzJyIgJSAocGVybCwpKQpAQCAtMTgyLDYgKzE4NiwxOCBAQAogICAgIGlmIHNzbF9kaXIgaXMgTm9uZToKICAgICAgICAgc3lzLmV4aXQoMSkKIAorICAgICMgYWRkIG91ciBjb3B5IG9mIE5BU00gdG8gUEFUSC4gIEl0IHdpbGwgYmUgb24gdGhlIHNhbWUgbGV2ZWwgYXMgb3BlbnNzbAorICAgIGZvciBkaXIgaW4gb3MubGlzdGRpcihvcy5wYXRoLmpvaW4oc3NsX2Rpciwgb3MucGFyZGlyKSk6CisgICAgICAgIGlmIGRpci5zdGFydHN3aXRoKCduYXNtJyk6CisgICAgICAgICAgICBuYXNtX2RpciA9IG9zLnBhdGguam9pbihzc2xfZGlyLCBvcy5wYXJkaXIsIGRpcikKKyAgICAgICAgICAgIG5hc21fZGlyID0gb3MucGF0aC5hYnNwYXRoKG5hc21fZGlyKQorICAgICAgICAgICAgb2xkX3BhdGggPSBvcy5lbnZpcm9uWydQQVRIJ10KKyAgICAgICAgICAgIG9zLmVudmlyb25bJ1BBVEgnXSA9IG9zLnBhdGhzZXAuam9pbihbbmFzbV9kaXIsIG9sZF9wYXRoXSkKKyAgICAgICAgICAgIGJyZWFrCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoJ05BU00gd2FzIG5vdCBmb3VuZCwgbWFrZSBzdXJlIGl0IGlzIG9uIFBBVEgnKQorCisKICAgICBvbGRfY2QgPSBvcy5nZXRjd2QoKQogICAgIHRyeToKICAgICAgICAgb3MuY2hkaXIoc3NsX2RpcikKZGlmZiAtLWdpdCBhL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weSBiL1BDYnVpbGQvYnVpbGRfdGtpbnRlci5weQppbmRleCA0MTk2Y2YzLi5jODA3ZTdiIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2J1aWxkX3RraW50ZXIucHkKKysrIGIvUENidWlsZC9idWlsZF90a2ludGVyLnB5CkBAIC0xMSwxNiArMTEsMTIgQEAKIGhlcmUgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKIHBhciA9IG9zLnBhdGgucGFyZGlyCiAKLVRDTCA9ICJ0Y2w4LjUuMTEiCi1USyA9ICJ0azguNS4xMSIKLVRJWCA9ICJ0aXgtOC40LjMueCIKK1RDTCA9ICJ0Y2w4LjYuMSIKK1RLID0gInRrOC42LjEiCitUSVggPSAidGl4LTguNC4zLjMiCiAKIFJPT1QgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKGhlcmUsIHBhciwgcGFyKSkKLSMgV2luZG93cyAyMDAwIGNvbXBhdGliaWxpdHk6IFdJTlZFUiAweDA1MDAKLSMgaHR0cDovL21zZG4yLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9hYTM4Mzc0NS5hc3B4Ci1OTUFLRSA9ICgnbm1ha2UgL25vbG9nbyAvZiAlcyAnCi0gICAgJ0NPTVBJTEVSRkxBR1M9XCItRFdJTlZFUj0weDA1MDAgLURfV0lOMzJfV0lOTlQ9MHgwNTAwIC1ETlRERElfVkVSU0lPTj1OVERESV9XSU4yS1NQNFwiICcKLSAgICAnJXMgJXMnKQorTk1BS0UgPSAoJ25tYWtlIC9ub2xvZ28gL2YgJXMgJXMgJXMnKQogCiBkZWYgbm1ha2UobWFrZWZpbGUsIGNvbW1hbmQ9IiIsICoqa3cpOgogICAgIGRlZmluZXMgPSAnICcuam9pbihrKyc9JytzdHIodikgZm9yIGssIHYgaW4ga3cuaXRlbXMoKSkKZGlmZiAtLWdpdCBhL1BDYnVpbGQvZW52LmJhdCBiL1BDYnVpbGQvZW52LmJhdAppbmRleCAwOGRjOGVmLi4wMTcwYmNlIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2Vudi5iYXQKKysrIGIvUENidWlsZC9lbnYuYmF0CkBAIC0xLDkgKzEsNCBAQAotQGVjaG8gb2ZmCi1zZXQgVlMxMD0lUHJvZ3JhbUZpbGVzKHg4NiklXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDEwLjAKLUlGIEVYSVNUICIlVlMxMCUiIEdPVE8gb2sKLXNldCBWUzEwPSVQcm9ncmFtRmlsZXMlXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDEwLjAKLTpvawotCi1lY2hvIEJ1aWxkIGVudmlyb25tZW50czogeDg2LCBpYTY0LCBhbWQ2NCwgeDg2X2FtZDY0LCB4ODZfaWE2NAotZWNoby4KLWNhbGwgIiVWUzEwJVxWQ1x2Y3ZhcnNhbGwuYmF0IiAlMQorQGVjaG8gb2ZmDQorZWNobyBCdWlsZCBlbnZpcm9ubWVudHM6IHg4NiwgaWE2NCwgYW1kNjQsIHg4Nl9hbWQ2NCwgeDg2X2lhNjQNCitlY2hvLg0KK2NhbGwgIiVWUzEwMENPTU5UT09MUyUuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiAlKg0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvZ2V0X2V4dGVybmFscy5iYXQgYi9QQ2J1aWxkL2dldF9leHRlcm5hbHMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOGQ2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9QQ2J1aWxkL2dldF9leHRlcm5hbHMuYmF0CkBAIC0wLDAgKzEsMTAzIEBACitAZWNobyBvZmYNCitzZXRsb2NhbA0KK3JlbSBTaW1wbGUgc2NyaXB0IHRvIGZldGNoIHNvdXJjZSBmb3IgZXh0ZXJuYWwgbGlicmFyaWVzDQorDQoraWYgbm90IGV4aXN0ICIlfmRwMC4uXGV4dGVybmFscyIgbWtkaXIgIiV+ZHAwLi5cZXh0ZXJuYWxzIg0KK3B1c2hkICIlfmRwMC4uXGV4dGVybmFscyINCisNCitpZiAiJVNWTlJPT1QlIj09IiIgc2V0IFNWTlJPT1Q9aHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsLw0KKw0KK3JlbSBPcHRpb25hbGx5IGNsZWFuIHVwIGZpcnN0LiAgQmUgd2FybmVkIHRoYXQgdGhpcyBjYW4gYmUgdmVyeSBkZXN0cnVjdGl2ZSENCitpZiBub3QgIiUxIj09IiIgKA0KKyAgICBmb3IgJSVjIGluICgtYyAtLWNsZWFuIC0tY2xlYW4tb25seSkgZG8gKA0KKyAgICAgICAgaWYgIiUxIj09IiUlYyIgZ290byBjbGVhbg0KKyAgICApDQorICAgIGdvdG8gdXNhZ2UNCispDQorZ290byBmZXRjaA0KKw0KKzpjbGVhbg0KK2VjaG8uQ2xlYW5pbmcgdXAgZXh0ZXJuYWwgbGlicmFyaWVzLg0KK2ZvciAvRCAlJWQgaW4gKA0KKyAgICAgICAgICAgICAgIGJ6aXAyLSoNCisgICAgICAgICAgICAgICBkYi0qDQorICAgICAgICAgICAgICAgbmFzbS0qDQorICAgICAgICAgICAgICAgb3BlbnNzbC0qDQorICAgICAgICAgICAgICAgdGNsLSoNCisgICAgICAgICAgICAgICB0Y2x0ayoNCisgICAgICAgICAgICAgICB0ay0qDQorICAgICAgICAgICAgICAgdGl4LSoNCisgICAgICAgICAgICAgICBzcWxpdGUtKg0KKyAgICAgICAgICAgICAgIHh6LSoNCisgICAgICAgICAgICAgICApIGRvICgNCisgICAgZWNoby5SZW1vdmluZyAlJWQNCisgICAgcm1kaXIgL3MgL3EgJSVkDQorKQ0KK2lmICIlMSI9PSItLWNsZWFuLW9ubHkiICgNCisgICAgZ290byBlbmQNCispDQorDQorOmZldGNoDQorcmVtIEZldGNoIGN1cnJlbnQgdmVyc2lvbnMNCisNCitzdm4gLS12ZXJzaW9uID4gbnVsIDI+JjENCitpZiBFUlJPUkxFVkVMIDkwMDkgKA0KKyAgICBlY2hvLnN2bi5leGUgbXVzdCBiZSBvbiB5b3VyIFBBVEguDQorICAgIGVjaG8uVHJ5IFRvcnRvaXNlU1ZOIChodHRwOi8vdG9ydG9pc2Vzdm4ubmV0L14pIGFuZCBiZSBzdXJlIHRvIGNoZWNrIHRoZQ0KKyAgICBlY2hvLmNvbW1hbmQgbGluZSB0b29scyBvcHRpb24uDQorICAgIHBvcGQNCisgICAgZXhpdCAvYiAxDQorKQ0KKw0KK2VjaG8uRmV0Y2hpbmcgZXh0ZXJuYWwgbGlicmFyaWVzLi4uDQorDQorZm9yICUlZSBpbiAoDQorICAgICAgICAgICAgYnppcDItMS4wLjYNCisgICAgICAgICAgICBuYXNtLTIuMTEuMDYNCisgICAgICAgICAgICBvcGVuc3NsLTEuMC4yag0KKyAgICAgICAgICAgIHRjbC04LjYuMS4wDQorICAgICAgICAgICAgdGstOC42LjEuMA0KKyAgICAgICAgICAgIHRpeC04LjQuMy40DQorICAgICAgICAgICAgc3FsaXRlLTMuOC4xMS4wDQorICAgICAgICAgICAgeHotNS4wLjUNCisgICAgICAgICAgICApIGRvICgNCisgICAgaWYgZXhpc3QgJSVlICgNCisgICAgICAgIGVjaG8uJSVlIGFscmVhZHkgZXhpc3RzLCBza2lwcGluZy4NCisgICAgKSBlbHNlICgNCisgICAgICAgIGVjaG8uRmV0Y2hpbmcgJSVlLi4uDQorICAgICAgICBzdm4gZXhwb3J0ICVTVk5ST09UJSUlZQ0KKyAgICApDQorKQ0KKw0KK2dvdG8gZW5kDQorDQorOnVzYWdlDQorZWNoby5pbnZhbGlkIGFyZ3VtZW50OiAlMQ0KK2VjaG8udXNhZ2U6ICV+bjAgW1sgLWMgXnwgLS1jbGVhbiBdIF58IC0tY2xlYW4tb25seSBdDQorZWNoby4NCitlY2hvLlB1bGwgYWxsIHNvdXJjZXMgbmVjZXNzYXJ5IGZvciBjb21waWxpbmcgb3B0aW9uYWwgZXh0ZW5zaW9uIG1vZHVsZXMNCitlY2hvLnRoYXQgcmVseSBvbiBleHRlcm5hbCBsaWJyYXJpZXMuICBSZXF1aXJlcyBzdm4uZXhlIHRvIGJlIG9uIHlvdXIgUEFUSA0KK2VjaG8uYW5kIHB1bGxzIHNvdXJjZXMgZnJvbSAlU1ZOUk9PVCUuDQorZWNoby4NCitlY2hvLlVzZSB0aGUgLWMgb3IgLS1jbGVhbiBvcHRpb24gdG8gY2xlYW4gdXAgYWxsIGV4dGVybmFsIGxpYnJhcnkgc291cmNlcw0KK2VjaG8uYmVmb3JlIHB1bGxpbmcgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbnMuDQorZWNoby4NCitlY2hvLlVzZSB0aGUgLS1jbGVhbi1vbmx5IG9wdGlvbiB0byBkbyB0aGUgc2FtZSBjbGVhbmluZywgd2l0aG91dCBwdWxsaW5nIGluDQorZWNoby5hbnl0aGluZyBuZXcuDQorZWNoby4NCitlY2hvLk9ubHkgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIGNoZWNrZWQsIGFsbCBvdGhlcnMgYXJlIGlnbm9yZWQuDQorZWNoby4NCitlY2hvLioqV0FSTklORyoqOiB0aGUgY2xlYW5pbmcgb3B0aW9ucyB1bmNvbmRpdGlvbmFsbHkgcmVtb3ZlIGFueSBkaXJlY3RvcnkNCitlY2hvLnRoYXQgaXMgYSBjaGlsZCBvZg0KK2VjaG8uICAgJUNEJQ0KK2VjaG8uYW5kIG1hdGNoZXMgd2lsZGNhcmQgcGF0dGVybnMgYmVnaW5uaW5nIHdpdGggYnppcDItLCBkYi0sIG5hc20tLCBvcGVuc3NsLSwNCitlY2hvLnRjbC0sIHRjbHRrLCB0ay0sIHRpeC0sIHNxbGl0ZS0sIG9yIHh6LSwgYW5kIGFzIHN1Y2ggaGFzIHRoZSBwb3RlbnRpYWwNCitlY2hvLnRvIGJlIHZlcnkgZGVzdHJ1Y3RpdmUgaWYgeW91IGFyZSBub3QgYXdhcmUgb2Ygd2hhdCBpdCBpcyBkb2luZy4gIFVzZSB3aXRoDQorZWNoby5jYXV0aW9uIQ0KK3BvcGQNCitleGl0IC9iIC0xDQorDQorDQorOmVuZA0KK2VjaG8gRmluaXNoZWQuDQorcG9wZA0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvaWRsZS5iYXQgYi9QQ2J1aWxkL2lkbGUuYmF0CmluZGV4IGRjYjA0ODUuLjVhYjE1ZjUgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvaWRsZS5iYXQKKysrIGIvUENidWlsZC9pZGxlLmJhdApAQCAtMSwxNSArMSwxNSBAQAotQGVjaG8gb2ZmCi1yZW0gc3RhcnQgaWRsZQotcmVtIFVzYWdlOiAgaWRsZSBbLWRdCi1yZW0gLWQgICBSdW4gRGVidWcgYnVpbGQgKHB5dGhvbl9kLmV4ZSkuICBFbHNlIHJlbGVhc2UgYnVpbGQuCi0KLXNldGxvY2FsCi1zZXQgZXhlPXB5dGhvbgotUEFUSCAlUEFUSCU7Li5cLi5cdGNsdGtcYmluCi0KLWlmICIlMSI9PSItZCIgKHNldCBleGU9cHl0aG9uX2QpICYgc2hpZnQKLQotc2V0IGNtZD0lZXhlJSAuLi9MaWIvaWRsZWxpYi9pZGxlLnB5ICUxICUyICUzICU0ICU1ICU2ICU3ICU4ICU5Ci0KLWVjaG8gb24KLSVjbWQlCitAZWNobyBvZmYNCityZW0gc3RhcnQgaWRsZQ0KK3JlbSBVc2FnZTogIGlkbGUgWy1kXQ0KK3JlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4NCisNCitzZXRsb2NhbA0KK3NldCBleGU9cHl0aG9uDQorUEFUSCAlUEFUSCU7Li5cLi5cdGNsdGtcYmluDQorDQoraWYgIiUxIj09Ii1kIiAoc2V0IGV4ZT1weXRob25fZCkgJiBzaGlmdA0KKw0KK3NldCBjbWQ9JWV4ZSUgLi4vTGliL2lkbGVsaWIvaWRsZS5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQ0KKw0KK2VjaG8gb24NCislY21kJQ0KZGlmZiAtLWdpdCBhL1BDYnVpbGQva2lsbF9weXRob24uYyBiL1BDYnVpbGQva2lsbF9weXRob24uYwppbmRleCBiYjMyM2QzLi42NjZlMWIwIDEwMDY0NAotLS0gYS9QQ2J1aWxkL2tpbGxfcHl0aG9uLmMKKysrIGIvUENidWlsZC9raWxsX3B5dGhvbi5jCkBAIC0xMDYsOSArMTA2LDkgQEAKICAgICAgICAgLyoKICAgICAgICAgICogWFhYIFRPRE86IGlmIHdlIHJlYWxseSB3YW50ZWQgdG8gYmUgZmFuY3ksIHdlIGNvdWxkIGNoZWNrIHRoZSAKICAgICAgICAgICogbW9kdWxlcyBmb3IgYWxsIHByb2Nlc3NlcyAobm90IGp1c3QgdGhlIHB5dGhvbltfZF0uZXhlIG9uZXMpCi0gICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzNbX2RdLmRsbCksCisgICAgICAgICAqIGFuZCBzZWUgaWYgYW55IG9mIG91ciBETExzIGFyZSBsb2FkZWQgKGkuZS4gcHl0aG9uMzRbX2RdLmRsbCksCiAgICAgICAgICAqIGFzIHRoYXQgd291bGQgYWxzbyBpbmhpYml0IG91ciBhYmlsaXR5IHRvIHJlYnVpbGQgdGhlIHNvbHV0aW9uLgotICAgICAgICAgKiBOb3Qgd29ydGggbG9vc2luZyBzbGVlcCBvdmVyIHRob3VnaDsgZm9yIG5vdywgYSBzaW1wbGUgY2hlY2sgCisgICAgICAgICAqIE5vdCB3b3J0aCBsb3Npbmcgc2xlZXAgb3ZlciB0aG91Z2g7IGZvciBub3csIGEgc2ltcGxlIGNoZWNrCiAgICAgICAgICAqIGZvciBqdXN0IHRoZSBweXRob24gZXhlY3V0YWJsZSBzaG91bGQgYmUgc3VmZmljaWVudC4KICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL1BDYnVpbGQvcGNidWlsZC5zbG4gYi9QQ2J1aWxkL3BjYnVpbGQuc2xuCmluZGV4IGQ2YTAyMmYuLmEzNDZlMTAgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcGNidWlsZC5zbG4KKysrIGIvUENidWlsZC9wY2J1aWxkLnNsbgpAQCAtMTQsOCArMTQsNiBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAicHl0aG9udyIsICJweXRob253LnZjeHByb2oiLCAie0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0iDQogRW5kUHJvamVjdA0KLVByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAidzl4cG9wZW4iLCAidzl4cG9wZW4udmN4cHJvaiIsICJ7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fSINCi1FbmRQcm9qZWN0DQogUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJtYWtlX2J1aWxkaW5mbyIsICJtYWtlX2J1aWxkaW5mby52Y3hwcm9qIiwgIntDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9Ig0KIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIndpbnNvdW5kIiwgIndpbnNvdW5kLnZjeHByb2oiLCAiezI4QjVENzc3LURERjItNEI2Qi1CMzRGLTMxRDkzODgxMzg1Nn0iDQpAQCAtMzgsNiArMzYsOCBAQAogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX3Rlc3RjYXBpIiwgIl90ZXN0Y2FwaS52Y3hwcm9qIiwgIns2OTAxRDkxQy02RTQ4LTRCQjctOUZFQy03MDBDODEzMURGMUR9Ig0KIEVuZFByb2plY3QNCitQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90ZXN0aW1wb3J0bXVsdGlwbGUiLCAiX3Rlc3RpbXBvcnRtdWx0aXBsZS52Y3hwcm9qIiwgInszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9Ig0KK0VuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl90a2ludGVyIiwgIl90a2ludGVyLnZjeHByb2oiLCAiezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0iDQogRW5kUHJvamVjdA0KIFByb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX2J6MiIsICJfYnoyLnZjeHByb2oiLCAiezczRkNEMkJELUYxMzMtNDZCNy04RUMxLTE0NENEODJBNTlENX0iDQpAQCAtNzQsNiArNzQsMTAgQEAKIEVuZFByb2plY3QNCiBQcm9qZWN0KCJ7OEJDOUNFQjgtOEI0QS0xMUQwLThEMTEtMDBBMEM5MUJDOTQyfSIpID0gIl9mcmVlemVfaW1wb3J0bGliIiwgIl9mcmVlemVfaW1wb3J0bGliLnZjeHByb2oiLCAiezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30iDQogRW5kUHJvamVjdA0KK1Byb2plY3QoIns4QkM5Q0VCOC04QjRBLTExRDAtOEQxMS0wMEEwQzkxQkM5NDJ9IikgPSAiX292ZXJsYXBwZWQiLCAiX292ZXJsYXBwZWQudmN4cHJvaiIsICJ7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfSINCitFbmRQcm9qZWN0DQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJfdGVzdGVtYmVkIiwgIl90ZXN0ZW1iZWQudmN4cHJvaiIsICJ7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfSINCitFbmRQcm9qZWN0DQogR2xvYmFsDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Db25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHByZVNvbHV0aW9uDQogCQlEZWJ1Z3xXaW4zMiA9IERlYnVnfFdpbjMyDQpAQCAtMTUwLDIyICsxNTQsNiBAQAogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7RjQyMjlDQzMtODczQy00OUFFLTk3MjktREQzMDhFRDRDRDRBfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJe0Y0MjI5Q0MzLTg3M0MtNDlBRS05NzI5LUREMzA4RUQ0Q0Q0QX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQotCQl7RTlFMEExRjYtMDAwOS00RThDLUI4RjgtMUI4RjVENDlBMDU4fS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KLQkJe0U5RTBBMUY2LTAwMDktNEU4Qy1COEY4LTFCOEY1RDQ5QTA1OH0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCi0JCXtFOUUwQTFGNi0wMDA5LTRFOEMtQjhGOC0xQjhGNUQ0OUEwNTh9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJe0M3M0YwRUMxLTM1OEItNDE3Ny05NDBGLTA4NDZBQzhCMDRDRH0uRGVidWd8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzINCiAJCXtDNzNGMEVDMS0zNThCLTQxNzctOTQwRi0wODQ2QUM4QjA0Q0R9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQpAQCAtMzQyLDYgKzMzMCwyMiBAQAogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQogCQl7NjkwMUQ5MUMtNkU0OC00QkI3LTlGRUMtNzAwQzgxMzFERjFEfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KIAkJezY5MDFEOTFDLTZFNDgtNEJCNy05RkVDLTcwMEM4MTMxREYxRH0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7MzZEMEM1MkMtREY0RS00NUQwLThCQzctRTI5NEMzQUJDNzgxfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fFdpbjMyLkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdJbnN0cnVtZW50fHg2NC5CdWlsZC4wID0gUEdJbnN0cnVtZW50fHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8V2luMzIuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8V2luMzINCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFBHVXBkYXRlfHg2NA0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUEdVcGRhdGV8eDY0LkJ1aWxkLjAgPSBQR1VwZGF0ZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezM2RDBDNTJDLURGNEUtNDVEMC04QkM3LUUyOTRDM0FCQzc4MX0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXszNkQwQzUyQy1ERjRFLTQ1RDAtOEJDNy1FMjk0QzNBQkM3ODF9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8V2luMzIuQWN0aXZlQ2ZnID0gRGVidWd8V2luMzINCiAJCXs0OTQ2RUNBQy0yRTY5LTRCRjgtQTkwQS1GNTEzNkY1MDk0REZ9LkRlYnVnfFdpbjMyLkJ1aWxkLjAgPSBEZWJ1Z3xXaW4zMg0KIAkJezQ5NDZFQ0FDLTJFNjktNEJGOC1BOTBBLUY1MTM2RjUwOTRERn0uRGVidWd8eDY0LkFjdGl2ZUNmZyA9IERlYnVnfHg2NA0KQEAgLTYxMSw2ICs2MTUsMzYgQEAKIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uUEdVcGRhdGV8eDY0LkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCiAJCXsxOUMwQzEzRi00N0NBLTQ0MzItQUZGMy03OTlBMjk2QTREREN9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KIAkJezE5QzBDMTNGLTQ3Q0EtNDQzMi1BRkYzLTc5OUEyOTZBNEREQ30uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfFdpbjMyLkFjdGl2ZUNmZyA9IERlYnVnfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzINCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfHg2NC5BY3RpdmVDZmcgPSBEZWJ1Z3x4NjQNCisJCXtFQjZFNjlERC0wNEJGLTQ1NDMtOUI5Mi00OUZBQUJDRUFDMkV9LkRlYnVnfHg2NC5CdWlsZC4wID0gRGVidWd8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8V2luMzIuQWN0aXZlQ2ZnID0gUEdJbnN0cnVtZW50fFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8V2luMzIuQnVpbGQuMCA9IFBHSW5zdHJ1bWVudHxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdJbnN0cnVtZW50fHg2NC5BY3RpdmVDZmcgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR0luc3RydW1lbnR8eDY0LkJ1aWxkLjAgPSBQR0luc3RydW1lbnR8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXxXaW4zMi5BY3RpdmVDZmcgPSBQR1VwZGF0ZXxXaW4zMg0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUEdVcGRhdGV8V2luMzIuQnVpbGQuMCA9IFBHVXBkYXRlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUEdVcGRhdGV8eDY0DQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5QR1VwZGF0ZXx4NjQuQnVpbGQuMCA9IFBHVXBkYXRlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7RUI2RTY5REQtMDRCRi00NTQzLTlCOTItNDlGQUFCQ0VBQzJFfS5SZWxlYXNlfHg2NC5BY3RpdmVDZmcgPSBSZWxlYXNlfHg2NA0KKwkJe0VCNkU2OURELTA0QkYtNDU0My05QjkyLTQ5RkFBQkNFQUMyRX0uUmVsZWFzZXx4NjQuQnVpbGQuMCA9IFJlbGVhc2V8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uRGVidWd8V2luMzIuQnVpbGQuMCA9IERlYnVnfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3x4NjQuQWN0aXZlQ2ZnID0gRGVidWd8eDY0DQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5EZWJ1Z3x4NjQuQnVpbGQuMCA9IERlYnVnfHg2NA0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUEdJbnN0cnVtZW50fFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHSW5zdHJ1bWVudHx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfFdpbjMyLkFjdGl2ZUNmZyA9IFJlbGVhc2V8V2luMzINCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfFdpbjMyLkJ1aWxkLjAgPSBSZWxlYXNlfFdpbjMyDQorCQl7NkRBQzY2RDktRTcwMy00NjI0LUJFMDMtNDkxMTJBQjVBQTYyfS5QR1VwZGF0ZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlBHVXBkYXRlfHg2NC5CdWlsZC4wID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8V2luMzIuQWN0aXZlQ2ZnID0gUmVsZWFzZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXxXaW4zMi5CdWlsZC4wID0gUmVsZWFzZXxXaW4zMg0KKwkJezZEQUM2NkQ5LUU3MDMtNDYyNC1CRTAzLTQ5MTEyQUI1QUE2Mn0uUmVsZWFzZXx4NjQuQWN0aXZlQ2ZnID0gUmVsZWFzZXx4NjQNCisJCXs2REFDNjZEOS1FNzAzLTQ2MjQtQkUwMy00OTExMkFCNUFBNjJ9LlJlbGVhc2V8eDY0LkJ1aWxkLjAgPSBSZWxlYXNlfHg2NA0KIAlFbmRHbG9iYWxTZWN0aW9uDQogCUdsb2JhbFNlY3Rpb24oU29sdXRpb25Qcm9wZXJ0aWVzKSA9IHByZVNvbHV0aW9uDQogCQlIaWRlU29sdXRpb25Ob2RlID0gRkFMU0UNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3B5cHJvamVjdC5wcm9wcyBiL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzCmluZGV4IDgxNTUyMzEuLjc5YjQ5NTIgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzCisrKyBiL1BDYnVpbGQvcHlwcm9qZWN0LnByb3BzCkBAIC0xMywyMCArMTMsMjAgQEAKICAgICA8SW50RGlyPiQoU29sdXRpb25EaXIpJChQbGF0Zm9ybU5hbWUpLXRlbXAtJChDb25maWd1cmF0aW9uKVwkKFByb2plY3ROYW1lKVw8L0ludERpcj4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8UHJvcGVydHlHcm91cCBMYWJlbD0iVXNlck1hY3JvcyI+Ci0gICAgPFB5RGxsTmFtZT5weXRob24zMyQoUHlEZWJ1Z0V4dCk8L1B5RGxsTmFtZT4KKyAgICA8UHlEbGxOYW1lPnB5dGhvbjM0JChQeURlYnVnRXh0KTwvUHlEbGxOYW1lPgogICAgIDxQeXRob25FeGU+JChPdXREaXIpcHl0aG9uJChQeURlYnVnRXh0KS5leGU8L1B5dGhvbkV4ZT4KICAgICA8S2lsbFB5dGhvbkV4ZT4kKE91dERpcilraWxsX3B5dGhvbiQoUHlEZWJ1Z0V4dCkuZXhlPC9LaWxsUHl0aG9uRXhlPgotICAgIDxleHRlcm5hbHNEaXI+Li5cLi48L2V4dGVybmFsc0Rpcj4KLSAgICA8c3FsaXRlM0Rpcj4kKGV4dGVybmFsc0Rpcilcc3FsaXRlLTMuNy4xMjwvc3FsaXRlM0Rpcj4KKyAgICA8ZXh0ZXJuYWxzRGlyPi4uXGV4dGVybmFsczwvZXh0ZXJuYWxzRGlyPgorICAgIDxzcWxpdGUzRGlyPiQoZXh0ZXJuYWxzRGlyKVxzcWxpdGUtMy44LjExLjA8L3NxbGl0ZTNEaXI+CiAgICAgPGJ6MkRpcj4kKGV4dGVybmFsc0RpcilcYnppcDItMS4wLjY8L2J6MkRpcj4KLSAgICA8bHptYURpcj4kKGV4dGVybmFsc0RpcilceHotNS4wLjM8L2x6bWFEaXI+Ci0gICAgPG9wZW5zc2xEaXI+JChleHRlcm5hbHNEaXIpXG9wZW5zc2wtMS4wLjFlPC9vcGVuc3NsRGlyPgorICAgIDxsem1hRGlyPiQoZXh0ZXJuYWxzRGlyKVx4ei01LjAuNTwvbHptYURpcj4KKyAgICA8b3BlbnNzbERpcj4kKGV4dGVybmFsc0Rpcilcb3BlbnNzbC0xLjAuMmo8L29wZW5zc2xEaXI+CiAgICAgPHRjbHRrRGlyPiQoZXh0ZXJuYWxzRGlyKVx0Y2x0azwvdGNsdGtEaXI+CiAgICAgPHRjbHRrNjREaXI+JChleHRlcm5hbHNEaXIpXHRjbHRrNjQ8L3RjbHRrNjREaXI+Ci0gICAgPHRjbHRrTGliPiQodGNsdGtEaXIpXGxpYlx0Y2w4NS5saWI7JCh0Y2x0a0RpcilcbGliXHRrODUubGliPC90Y2x0a0xpYj4KLSAgICA8dGNsdGtMaWJEZWJ1Zz4kKHRjbHRrRGlyKVxsaWJcdGNsODVnLmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NWcubGliPC90Y2x0a0xpYkRlYnVnPgotICAgIDx0Y2x0azY0TGliPiQodGNsdGs2NERpcilcbGliXHRjbDg1LmxpYjskKHRjbHRrNjREaXIpXGxpYlx0azg1LmxpYjwvdGNsdGs2NExpYj4KLSAgICA8dGNsdGs2NExpYkRlYnVnPiQodGNsdGs2NERpcilcbGliXHRjbDg1Zy5saWI7JCh0Y2x0azY0RGlyKVxsaWJcdGs4NWcubGliPC90Y2x0azY0TGliRGVidWc+CisgICAgPHRjbHRrTGliPiQodGNsdGtEaXIpXGxpYlx0Y2w4NnQubGliOyQodGNsdGtEaXIpXGxpYlx0azg2dC5saWI8L3RjbHRrTGliPgorICAgIDx0Y2x0a0xpYkRlYnVnPiQodGNsdGtEaXIpXGxpYlx0Y2w4NnRnLmxpYjskKHRjbHRrRGlyKVxsaWJcdGs4NnRnLmxpYjwvdGNsdGtMaWJEZWJ1Zz4KKyAgICA8dGNsdGs2NExpYj4kKHRjbHRrNjREaXIpXGxpYlx0Y2w4NnQubGliOyQodGNsdGs2NERpcilcbGliXHRrODZ0LmxpYjwvdGNsdGs2NExpYj4KKyAgICA8dGNsdGs2NExpYkRlYnVnPiQodGNsdGs2NERpcilcbGliXHRjbDg2dGcubGliOyQodGNsdGs2NERpcilcbGliXHRrODZ0Zy5saWI8L3RjbHRrNjRMaWJEZWJ1Zz4KICAgPC9Qcm9wZXJ0eUdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cD4KICAgICA8Q2xDb21waWxlPgpAQCAtNDksOSArNDksOCBAQAogICAgICAgPEdlbmVyYXRlRGVidWdJbmZvcm1hdGlvbj50cnVlPC9HZW5lcmF0ZURlYnVnSW5mb3JtYXRpb24+CiAgICAgICA8UHJvZ3JhbURhdGFiYXNlRmlsZT4kKE91dERpcikkKFRhcmdldE5hbWUpLnBkYjwvUHJvZ3JhbURhdGFiYXNlRmlsZT4KICAgICAgIDxTdWJTeXN0ZW0+V2luZG93czwvU3ViU3lzdGVtPgotICAgICAgPFJhbmRvbWl6ZWRCYXNlQWRkcmVzcz5mYWxzZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgotICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgotICAgICAgPC9EYXRhRXhlY3V0aW9uUHJldmVudGlvbj4KKyAgICAgIDxSYW5kb21pemVkQmFzZUFkZHJlc3M+dHJ1ZTwvUmFuZG9taXplZEJhc2VBZGRyZXNzPgorICAgICAgPERhdGFFeGVjdXRpb25QcmV2ZW50aW9uPnRydWU8L0RhdGFFeGVjdXRpb25QcmV2ZW50aW9uPgogICAgICAgPFRhcmdldE1hY2hpbmU+TWFjaGluZVg4NjwvVGFyZ2V0TWFjaGluZT4KICAgICA8L0xpbms+CiAgICAgPFJlc291cmNlQ29tcGlsZT4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uLnZjeHByb2ogYi9QQ2J1aWxkL3B5dGhvbi52Y3hwcm9qCmluZGV4IGQwYTlkZTAuLmJkMTI2MjQgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uLnZjeHByb2oKKysrIGIvUENidWlsZC9weXRob24udmN4cHJvagpAQCAtMjQzLDcgKzI0Myw3IEBACiAgICAgPExpbms+CiAgICAgICA8T3V0cHV0RmlsZT4kKE91dERpcilweXRob25fZC5leGU8L091dHB1dEZpbGU+CiAgICAgICA8U3ViU3lzdGVtPkNvbnNvbGU8L1N1YlN5c3RlbT4KLSAgICAgIDxTdGFja1Jlc2VydmVTaXplPjIxMDAwMDA8L1N0YWNrUmVzZXJ2ZVNpemU+CisgICAgICA8U3RhY2tSZXNlcnZlU2l6ZT40MTk0MzA0PC9TdGFja1Jlc2VydmVTaXplPgogICAgICAgPEJhc2VBZGRyZXNzPjB4MWQwMDAwMDA8L0Jhc2VBZGRyZXNzPgogICAgIDwvTGluaz4KICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgpAQCAtMzU3LDEyICszNTcsOCBAQAogICAgICAgPFByb2plY3Q+e2NmN2FjM2QxLWUyZGYtNDFkMi1iZWE2LTFlMjU1NmNkZWEyNn08L1Byb2plY3Q+CiAgICAgICA8UmVmZXJlbmNlT3V0cHV0QXNzZW1ibHk+ZmFsc2U8L1JlZmVyZW5jZU91dHB1dEFzc2VtYmx5PgogICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgICA8UHJvamVjdFJlZmVyZW5jZSBJbmNsdWRlPSJ3OXhwb3Blbi52Y3hwcm9qIj4KLSAgICAgIDxQcm9qZWN0PntlOWUwYTFmNi0wMDA5LTRlOGMtYjhmOC0xYjhmNWQ0OWEwNTh9PC9Qcm9qZWN0PgotICAgICAgPFJlZmVyZW5jZU91dHB1dEFzc2VtYmx5PmZhbHNlPC9SZWZlcmVuY2VPdXRwdXRBc3NlbWJseT4KLSAgICA8L1Byb2plY3RSZWZlcmVuY2U+CiAgIDwvSXRlbUdyb3VwPgogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2oKaW5kZXggOGI1YzQyZi4uNjAyMWNkNyAxMDA2NDQKLS0tIGEvUENidWlsZC9weXRob25jb3JlLnZjeHByb2oKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2oKQEAgLTE3Myw3ICsxNzMsNyBAQAogICAgIDwvUmVzb3VyY2VDb21waWxlPgogICAgIDxQcmVMaW5rRXZlbnQ+CiAgICAgICA8TWVzc2FnZT5HZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLjwvTWVzc2FnZT4KLSAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpIjwvQ29tbWFuZD4KKyAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpXCI8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKEludERpcilnZXRidWlsZGluZm8ubzslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMTg0LDcgKzE4NCw3IEBACiAgICAgPFByZUJ1aWxkRXZlbnQ+CiAgICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCiBJRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQorICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKICAgICBleGl0IC9iIDAKICk8L0NvbW1hbmQ+CiAgICAgPC9QcmVCdWlsZEV2ZW50PgpAQCAtMjA5LDcgKzIwOSw3IEBACiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+CiAgICAgPFByZUxpbmtFdmVudD4KICAgICAgIDxNZXNzYWdlPkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uPC9NZXNzYWdlPgotICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcikiPC9Db21tYW5kPgorICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcilcIjwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoSW50RGlyKWdldGJ1aWxkaW5mby5vOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CkBAIC0yMTksNyArMjE5LDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC0yNTQsNyArMjU0LDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC0zMTQsNyArMzE0LDcgQEAKICAgICA8L1Jlc291cmNlQ29tcGlsZT4KICAgICA8UHJlTGlua0V2ZW50PgogICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKSI8L0NvbW1hbmQ+CisgICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KQEAgLTMyNSw3ICszMjUsNyBAQAogICAgIDxQcmVCdWlsZEV2ZW50PgogICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQogSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJuaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKKyAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCiAgICAgZXhpdCAvYiAwCiApPC9Db21tYW5kPgogICAgIDwvUHJlQnVpbGRFdmVudD4KQEAgLTM1MCw3ICszNTAsNyBAQAogICAgIDwvUmVzb3VyY2VDb21waWxlPgogICAgIDxQcmVMaW5rRXZlbnQ+CiAgICAgICA8TWVzc2FnZT5HZW5lcmF0ZSBidWlsZCBpbmZvcm1hdGlvbi4uLjwvTWVzc2FnZT4KLSAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpIjwvQ29tbWFuZD4KKyAgICAgIDxDb21tYW5kPiIkKFNvbHV0aW9uRGlyKW1ha2VfYnVpbGRpbmZvLmV4ZSIgUmVsZWFzZSAiJChJbnREaXIpXCI8L0NvbW1hbmQ+CiAgICAgPC9QcmVMaW5rRXZlbnQ+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz4kKEludERpcilnZXRidWlsZGluZm8ubzslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMzYxLDcgKzM2MSw3IEBACiAgICAgPFByZUJ1aWxkRXZlbnQ+CiAgICAgICA8Q29tbWFuZD4kKEtpbGxQeXRob25FeGUpCiBJRiAlRVJST1JMRVZFTCUgTkVRIDAgKAotICAgIGVjaG8ga2lsbF9weXRob246IHdhcm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQorICAgIGVjaG8ga2lsbF9weXRob246IHdhcl5uaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKICAgICBleGl0IC9iIDAKICk8L0NvbW1hbmQ+CiAgICAgPC9QcmVCdWlsZEV2ZW50PgpAQCAtMzgzLDcgKzM4Myw3IEBACiAgICAgPC9SZXNvdXJjZUNvbXBpbGU+CiAgICAgPFByZUxpbmtFdmVudD4KICAgICAgIDxNZXNzYWdlPkdlbmVyYXRlIGJ1aWxkIGluZm9ybWF0aW9uLi4uPC9NZXNzYWdlPgotICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcikiPC9Db21tYW5kPgorICAgICAgPENvbW1hbmQ+IiQoU29sdXRpb25EaXIpbWFrZV9idWlsZGluZm8uZXhlIiBSZWxlYXNlICIkKEludERpcilcIjwvQ29tbWFuZD4KICAgICA8L1ByZUxpbmtFdmVudD4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPiQoSW50RGlyKWdldGJ1aWxkaW5mby5vOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CkBAIC0zOTQsNyArMzk0LDcgQEAKICAgICA8UHJlQnVpbGRFdmVudD4KICAgICAgIDxDb21tYW5kPiQoS2lsbFB5dGhvbkV4ZSkKIElGICVFUlJPUkxFVkVMJSBORVEgMCAoCi0gICAgZWNobyBraWxsX3B5dGhvbjogd2FybmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCisgICAgZWNobyBraWxsX3B5dGhvbjogd2FyXm5pbmc6IGNvdWxkIG5vdCBraWxsIHJ1bm5pbmcgUHl0aG9ucywgZXhpdCBjb2RlICVFUlJPUkxFVkVMJQogICAgIGV4aXQgL2IgMAogKTwvQ29tbWFuZD4KICAgICA8L1ByZUJ1aWxkRXZlbnQ+CkBAIC00MTksNyArNDE5LDcgQEAKICAgICA8L1Jlc291cmNlQ29tcGlsZT4KICAgICA8UHJlTGlua0V2ZW50PgogICAgICAgPE1lc3NhZ2U+R2VuZXJhdGUgYnVpbGQgaW5mb3JtYXRpb24uLi48L01lc3NhZ2U+Ci0gICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKSI8L0NvbW1hbmQ+CisgICAgICA8Q29tbWFuZD4iJChTb2x1dGlvbkRpciltYWtlX2J1aWxkaW5mby5leGUiIFJlbGVhc2UgIiQoSW50RGlyKVwiPC9Db21tYW5kPgogICAgIDwvUHJlTGlua0V2ZW50PgogICAgIDxMaW5rPgogICAgICAgPEFkZGl0aW9uYWxEZXBlbmRlbmNpZXM+JChJbnREaXIpZ2V0YnVpbGRpbmZvLm87JShBZGRpdGlvbmFsRGVwZW5kZW5jaWVzKTwvQWRkaXRpb25hbERlcGVuZGVuY2llcz4KQEAgLTQzMCw3ICs0MzAsNyBAQAogICAgIDxQcmVCdWlsZEV2ZW50PgogICAgICAgPENvbW1hbmQ+JChLaWxsUHl0aG9uRXhlKQogSUYgJUVSUk9STEVWRUwlIE5FUSAwICgKLSAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJuaW5nOiBjb3VsZCBub3Qga2lsbCBydW5uaW5nIFB5dGhvbnMsIGV4aXQgY29kZSAlRVJST1JMRVZFTCUKKyAgICBlY2hvIGtpbGxfcHl0aG9uOiB3YXJebmluZzogY291bGQgbm90IGtpbGwgcnVubmluZyBQeXRob25zLCBleGl0IGNvZGUgJUVSUk9STEVWRUwlCiAgICAgZXhpdCAvYiAwCiApPC9Db21tYW5kPgogICAgIDwvUHJlQnVpbGRFdmVudD4KQEAgLTQ5Miw2ICs0OTIsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxwYXRjaGxldmVsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHBnZW4uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccGdlbmhlYWRlcnMuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHloYXNoLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5X2N1cnNlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVxweWFyZW5hLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHB5Y2Fwc3VsZS5oIiAvPgpAQCAtNTI4LDcgKzUyOSwxMSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cSW5jbHVkZVx1bmljb2Rlb2JqZWN0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXHdlYWtyZWZvYmplY3QuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX21hdGguaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHJvdGF0aW5ndHJlZS5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmUuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2NvbnN0YW50cy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xzcmVfbGliLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9pb1xfaW9tb2R1bGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcemxpYlxjcmMzMi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x6bGliXGRlZmxhdGUuaCIgLz4KQEAgLTU1NSw2ICs1NjAsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmFzdHNlYXJjaC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJcZmluZC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xzdHJpbmdsaWJccGFydGl0aW9uLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxyZXBsYWNlLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxzcGxpdC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cT2JqZWN0c1x1bmljb2RldHlwZV9kYi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cUGFyc2VyXHBhcnNlci5oIiAvPgpAQCAtNTgwLDYgKzU4Niw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9waWNrbGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3JhbmRvbW1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfc3JlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zdGF0LmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9zdHJ1Y3QuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3dlYWtyZWYuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcYXJyYXltb2R1bGUuYyIgLz4KQEAgLTU5MSwxMiArNTk4LDE0IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGVycm5vbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXGZhdWx0aGFuZGxlci5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xnY21vZHVsZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xoYXNodGFibGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaXRlcnRvb2xzbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXG1haW4uYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbWF0aG1vZHVsZS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xtZDVtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIiAvPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvcGVyYXRvci5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfb3Bjb2RlLmMiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9vcGVyYXRvci5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xwYXJzZXJtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccG9zaXhtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNccm90YXRpbmd0cmVlLmMiIC8+CkBAIC02MDYsNiArNjE1LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc2lnbmFsbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHN5bXRhYmxlbW9kdWxlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF90aHJlYWRtb2R1bGUuYyIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3RyYWNlbWFsbG9jLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHRpbWVtb2R1bGUuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNceHhzdWJ0eXBlLmMiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHppcGltcG9ydC5jIiAvPgpAQCAtNjkxLDYgKzcwMSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxQQ1xkbF9udC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUENcZ2V0cGF0aHAuYyIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFBDXG1zdmNydG1vZHVsZS5jIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHB5aGFzaC5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXHJhbmRvbS5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXF93YXJuaW5ncy5jIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cUHl0aG9uXGFzZGwuYyIgLz4KQEAgLTc1Nyw0ICs3NjgsNCBAQAogICA8SW1wb3J0IFByb2plY3Q9IiQoVkNUYXJnZXRzUGF0aClcTWljcm9zb2Z0LkNwcC50YXJnZXRzIiAvPgogICA8SW1wb3J0R3JvdXAgTGFiZWw9IkV4dGVuc2lvblRhcmdldHMiPgogICA8L0ltcG9ydEdyb3VwPgotPC9Qcm9qZWN0PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvUHJvamVjdD4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMgYi9QQ2J1aWxkL3B5dGhvbmNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDU2NDdmZWIuLjhjNjUyNDcgMTAwNjQ0Ci0tLSBhL1BDYnVpbGQvcHl0aG9uY29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvUENidWlsZC9weXRob25jb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtMzAwLDYgKzMwMCwxNSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xyb3RhdGluZ3RyZWUuaCI+CiAgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlLmgiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHNyZV9jb25zdGFudHMuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcc3JlX2xpYi5oIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfaW9cX2lvbW9kdWxlLmgiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzXF9pbzwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMzc4LDYgKzM4Nyw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxPYmplY3RzXHN0cmluZ2xpYlxwYXJ0aXRpb24uaCI+CiAgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHJlcGxhY2UuaCI+CisgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXE9iamVjdHNcc3RyaW5nbGliXHNwbGl0LmgiPgogICAgICAgPEZpbHRlcj5PYmplY3RzPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC00MDgsOSArNDIwLDE1IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxQeXRob25cY2V2YWxfZ2lsLmgiPgogICAgICAgPEZpbHRlcj5QeXRob248L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXEluY2x1ZGVccHloYXNoLmgiPgorICAgICAgPEZpbHRlcj5JbmNsdWRlPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxJbmNsdWRlXG5hbWVzcGFjZW9iamVjdC5oIj4KICAgICAgIDxGaWx0ZXI+SW5jbHVkZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xoYXNodGFibGUuaCI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXF9iaXNlY3Rtb2R1bGUuYyI+CkBAIC01MDAsNyArNTE4LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcbW1hcG1vZHVsZS5jIj4KICAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgotICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xvcGVyYXRvci5jIj4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wZXJhdG9yLmMiPgogICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxNb2R1bGVzXHBhcnNlcm1vZHVsZS5jIj4KQEAgLTkxNyw5ICs5MzUsMjQgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3dpbmFwaS5jIj4KICAgICAgIDxGaWx0ZXI+UEM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX3N0YXQuYyI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXFB5dGhvblxweWhhc2guYyI+CisgICAgICA8RmlsdGVyPlB5dGhvbjwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cT2JqZWN0c1xuYW1lc3BhY2VvYmplY3QuYyI+CiAgICAgICA8RmlsdGVyPk9iamVjdHM8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcX29wY29kZS5jIj4KKyAgICAgIDxGaWx0ZXI+TW9kdWxlczwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1xfdHJhY2VtYWxsb2MuYyI+CisgICAgICA8RmlsdGVyPk1vZHVsZXM8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXE1vZHVsZXNcaGFzaHRhYmxlLmMiPgorICAgICAgPEZpbHRlcj5Nb2R1bGVzPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxSZXNvdXJjZUNvbXBpbGUgSW5jbHVkZT0iLi5cUENccHl0aG9uX250LnJjIj4KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcmVhZG1lLnR4dCBiL1BDYnVpbGQvcmVhZG1lLnR4dAppbmRleCA2ZjA3Njg5Li4xNDhhMzA1IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3JlYWRtZS50eHQKKysrIGIvUENidWlsZC9yZWFkbWUudHh0CkBAIC0xLDMxOSArMSwzMjAgQEAKLUJ1aWxkaW5nIFB5dGhvbiB1c2luZyBWQysrIDEwLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhpcyBkaXJlY3RvcnkgaXMgdXNlZCB0byBidWlsZCBQeXRob24gZm9yIFdpbjMyIGFuZCB4NjQgcGxhdGZvcm1zLCBlLmcuCi1XaW5kb3dzIFhQLCBWaXN0YSBhbmQgV2luZG93cyBTZXJ2ZXIgMjAwOC4gIEluIG9yZGVyIHRvIGJ1aWxkIDMyLWJpdAotZGVidWcgYW5kIHJlbGVhc2UgZXhlY3V0YWJsZXMsIE1pY3Jvc29mdCBWaXN1YWwgQysrIDIwMTAgRXhwcmVzcyBFZGl0aW9uIGlzCi1yZXF1aXJlZCBhdCB0aGUgdmVyeSBsZWFzdC4gIEluIG9yZGVyIHRvIGJ1aWxkIDY0LWJpdCBkZWJ1ZyBhbmQgcmVsZWFzZQotZXhlY3V0YWJsZXMsIFZpc3VhbCBTdHVkaW8gMjAxMCBTdGFuZGFyZCBFZGl0aW9uIGlzIHJlcXVpcmVkIGF0IHRoZSB2ZXJ5Ci1sZWFzdC4gIEluIG9yZGVyIHRvIGJ1aWxkIGFsbCBvZiB0aGUgYWJvdmUsIGFzIHdlbGwgYXMgZ2VuZXJhdGUgcmVsZWFzZSBidWlsZHMKLXRoYXQgbWFrZSB1c2Ugb2YgUHJvZmlsZSBHdWlkZWQgT3B0aW1pc2F0aW9uIChQRzApLCBWaXN1YWwgU3R1ZGlvIDIwMTAKLVByb2Zlc3Npb25hbCBFZGl0aW9uIGlzIHJlcXVpcmVkIGF0IHRoZSB2ZXJ5IGxlYXN0LiAgVGhlIG9mZmljaWFsIFB5dGhvbgotcmVsZWFzZXMgYXJlIGJ1aWx0IHdpdGggdGhpcyB2ZXJzaW9uIG9mIFZpc3VhbCBTdHVkaW8uCi0KLUZvciBvdGhlciBXaW5kb3dzIHBsYXRmb3JtcyBhbmQgY29tcGlsZXJzLCBzZWUgLi4vUEMvcmVhZG1lLnR4dC4KLQotQWxsIHlvdSBuZWVkIHRvIGRvIGlzIG9wZW4gdGhlIHdvcmtzcGFjZSAicGNidWlsZC5zbG4iIGluIFZpc3VhbCBTdHVkaW8sCi1zZWxlY3QgdGhlIGRlc2lyZWQgY29tYmluYXRpb24gb2YgY29uZmlndXJhdGlvbiBhbmQgcGxhdGZvcm0gYW5kIGV2ZW50dWFsbHkKLWJ1aWxkIHRoZSBzb2x1dGlvbi4gVW5sZXNzIHlvdSBhcmUgZ29pbmcgdG8gZGVidWcgYSBwcm9ibGVtIGluIHRoZSBjb3JlIG9yCi15b3UgYXJlIGdvaW5nIHRvIGNyZWF0ZSBhbiBvcHRpbWl6ZWQgYnVpbGQgeW91IHdhbnQgdG8gc2VsZWN0ICJSZWxlYXNlIiBhcwotY29uZmlndXJhdGlvbi4KLQotVGhlIFBDYnVpbGQgZGlyZWN0b3J5IGlzIGNvbXBhdGlibGUgd2l0aCBhbGwgdmVyc2lvbnMgb2YgVmlzdWFsIFN0dWRpbyBmcm9tCi1WUyBDKysgRXhwcmVzcyBFZGl0aW9uIG92ZXIgdGhlIHN0YW5kYXJkIGVkaXRpb24gdXAgdG8gdGhlIHByb2Zlc3Npb25hbAotZWRpdGlvbi4gSG93ZXZlciB0aGUgZXhwcmVzcyBlZGl0aW9uIGRvZXMgbm90IHN1cHBvcnQgZmVhdHVyZXMgbGlrZSBzb2x1dGlvbgotZm9sZGVycyBvciBwcm9maWxlIGd1aWRlZCBvcHRpbWl6YXRpb24gKFBHTykuIFRoZSBtaXNzaW5nIGJpdHMgYW5kIHBpZWNlcwotd29uJ3Qgc3RvcCB5b3UgZnJvbSBidWlsZGluZyBQeXRob24uCi0KLVRoZSBzb2x1dGlvbiBpcyBjb25maWd1cmVkIHRvIGJ1aWxkIHRoZSBwcm9qZWN0cyBpbiB0aGUgY29ycmVjdCBvcmRlci4gIkJ1aWxkCi1Tb2x1dGlvbiIgb3IgRjcgdGFrZXMgY2FyZSBvZiBkZXBlbmRlbmNpZXMgZXhjZXB0IGZvciB4NjQgYnVpbGRzLiBUbyBtYWtlCi1jcm9zcyBjb21waWxpbmcgeDY0IGJ1aWxkcyBvbiBhIDMyYml0IE9TIHBvc3NpYmxlIHRoZSB4NjQgYnVpbGRzIHJlcXVpcmUgYQotMzJiaXQgdmVyc2lvbiBvZiBQeXRob24uCi0KLU5PVEU6Ci0gICBZb3UgcHJvYmFibHkgZG9uJ3Qgd2FudCB0byBidWlsZCBtb3N0IG9mIHRoZSBvdGhlciBzdWJwcm9qZWN0cywgdW5sZXNzCi0gICB5b3UncmUgYnVpbGRpbmcgYW4gZW50aXJlIFB5dGhvbiBkaXN0cmlidXRpb24gZnJvbSBzY3JhdGNoLCBvcgotICAgc3BlY2lmaWNhbGx5IG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBzdWJzeXN0ZW1zIHRoZXkgaW1wbGVtZW50LCBvciBhcmUKLSAgIHJ1bm5pbmcgYSBQeXRob24gY29yZSBidWlsZGJvdCB0ZXN0IHNsYXZlOyBzZWUgU1VCUFJPSkVDVFMgYmVsb3cpCi0KLVdoZW4gdXNpbmcgdGhlIERlYnVnIHNldHRpbmcsIHRoZSBvdXRwdXQgZmlsZXMgaGF2ZSBhIF9kIGFkZGVkIHRvCi10aGVpciBuYW1lOiAgcHl0aG9uMzNfZC5kbGwsIHB5dGhvbl9kLmV4ZSwgcGFyc2VyX2QucHlkLCBhbmQgc28gb24uIEJvdGgKLXRoZSBidWlsZCBhbmQgcnQgYmF0Y2ggZmlsZXMgYWNjZXB0IGEgLWQgb3B0aW9uIGZvciBkZWJ1ZyBidWlsZHMuCi0KLVRoZSAzMmJpdCBidWlsZHMgZW5kIHVwIGluIHRoZSBzb2x1dGlvbiBmb2xkZXIgUENidWlsZCB3aGlsZSB0aGUgeDY0IGJ1aWxkcwotbGFuZCBpbiB0aGUgYW1kNjQgc3ViZm9sZGVyLiBUaGUgUEdJIGFuZCBQR08gYnVpbGRzIGZvciBwcm9maWxlIGd1aWRlZAotb3B0aW1pemF0aW9uIGVuZCB1cCBpbiB0aGVpciBvd24gZm9sZGVycywgdG9vLgotCi1MZWdhY3kgc3VwcG9ydAotLS0tLS0tLS0tLS0tLS0KLQotWW91IGNhbiBmaW5kIGJ1aWxkIGRpcmVjdG9yaWVzIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGFuZAotVmlzdWFsIEMrKyBpbiB0aGUgUEMgZGlyZWN0b3J5LiBUaGUgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yaWVzIGFyZSBubyBsb25nZXIKLWFjdGl2ZWx5IG1haW50YWluZWQgYW5kIG1heSBub3Qgd29yayBvdXQgb2YgdGhlIGJveC4KLQotUEMvVkM2LwotICAgIFZpc3VhbCBDKysgNi4wCi1QQy9WUzcuMS8KLSAgICBWaXN1YWwgU3R1ZGlvIDIwMDMgKDcuMSkKLVBDL1ZTOC4wLwotICAgIFZpc3VhbCBTdHVkaW8gMjAwNSAoOC4wKQotUEMvVlM5LjAvCi0gICAgVmlzdWFsIFN0dWRpbyAyMDA4ICg5LjApCi0KLQotQyBSVU5USU1FCi0tLS0tLS0tLS0KLQotVmlzdWFsIFN0dWRpbyAyMDEwIHVzZXMgdmVyc2lvbiAxMCBvZiB0aGUgQyBydW50aW1lIChNU1ZDUlQxMCkuICBUaGUgZXhlY3V0YWJsZXMKLW5vIGxvbmdlciB1c2UgdGhlICJTaWRlIGJ5IFNpZGUiIGFzc2VtYmxpZXMgdXNlZCBpbiBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUKLWNvbXBpbGVyLiAgVGhpcyBzaW1wbGlmaWVzIGRpc3RyaWJ1dGlvbiBvZiBhcHBsaWNhdGlvbnMuCi1UaGUgcnVuIHRpbWUgbGlicmFyaWVzIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIFZDL1JlZGlzdCBmb2xkZXIgb2YgeW91ciB2aXN1YWwgc3R1ZGlvCi1kaXN0cmlidXRpb24uIEZvciBtb3JlIGluZm8sIHNlZSB0aGUgUmVhZG1lIGluIHRoZSBWQy9SZWRpc3QgZm9sZGVyLgotCi1TVUJQUk9KRUNUUwotLS0tLS0tLS0tLS0KLVRoZXNlIHN1YnByb2plY3RzIHNob3VsZCBidWlsZCBvdXQgb2YgdGhlIGJveC4gIFN1YnByb2plY3RzIG90aGVyIHRoYW4gdGhlCi1tYWluIG9uZXMgKHB5dGhvbmNvcmUsIHB5dGhvbiwgcHl0aG9udykgZ2VuZXJhbGx5IGJ1aWxkIGEgRExMIChyZW5hbWVkIHRvCi0ucHlkKSBmcm9tIGEgc3BlY2lmaWMgbW9kdWxlIHNvIHRoYXQgdXNlcnMgZG9uJ3QgaGF2ZSB0byBsb2FkIHRoZSBjb2RlCi1zdXBwb3J0aW5nIHRoYXQgbW9kdWxlIHVubGVzcyB0aGV5IGltcG9ydCB0aGUgbW9kdWxlLgotCi1weXRob25jb3JlCi0gICAgLmRsbCBhbmQgLmxpYgotcHl0aG9uCi0gICAgLmV4ZQotcHl0aG9udwotICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3QgcG9wIHVwIGEgRE9TIGJveAotX3NvY2tldAotICAgIHNvY2tldG1vZHVsZS5jCi1fdGVzdGNhcGkKLSAgICB0ZXN0cyBvZiB0aGUgUHl0aG9uIEMgQVBJLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfY2FwaS5weSwgYW5kCi0gICAgaW1wbGVtZW50ZWQgYnkgbW9kdWxlIE1vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKLV90ZXN0YnVmZmVyCi0gICAgYnVmZmVyIHByb3RvY29sIHRlc3RzLCBydW4gdmlhIExpYi90ZXN0L3Rlc3RfYnVmZmVyLnB5LCBhbmQKLSAgICBpbXBsZW1lbnRlZCBieSBtb2R1bGUgTW9kdWxlcy9fdGVzdGJ1ZmZlci5jCi1weWV4cGF0Ci0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIGFjY2VsZXJhdGVkIFhNTCBwYXJzaW5nLCB3aGljaCBpbmNvcnBvcmF0ZXMgc3RhYmxlCi0gICAgY29kZSBmcm9tIHRoZSBFeHBhdCBwcm9qZWN0OiAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9leHBhdC8KLXNlbGVjdAotICAgIHNlbGVjdG1vZHVsZS5jCi11bmljb2RlZGF0YQotICAgIGxhcmdlIHRhYmxlcyBvZiBVbmljb2RlIGRhdGEKLXdpbnNvdW5kCi0gICAgcGxheSBzb3VuZHMgKHR5cGljYWxseSAud2F2IGZpbGVzKSB1bmRlciBXaW5kb3dzCi0KLVB5dGhvbi1jb250cm9sbGVkIHN1YnByb2plY3RzIHRoYXQgd3JhcCBleHRlcm5hbCBwcm9qZWN0czoKLV9zcWxpdGUzCi0gICAgV3JhcHMgU1FMaXRlIDMuNy4xMiwgd2hpY2ggaXMgY3VycmVudGx5IGJ1aWx0IGJ5IHNxbGl0ZTMudmN4cHJvai4KLV90a2ludGVyCi0gICAgV3JhcHMgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uICBVbmxpa2UgX3NxbGl0ZTMsIHRoZXJlJ3Mgbm8KLSAgICBjb3JyZXNwb25kaW5nIHRjbHRrLnZjeHByb2otdHlwZSBwcm9qZWN0IHRoYXQgYnVpbGRzIFRjbC9UayBmcm9tIHZjeHByb2oncwotICAgIHdpdGhpbiBvdXIgcGNidWlsZC5zbG4sIHdoaWNoIG1lYW5zIHRoaXMgbW9kdWxlIGV4cGVjdHMgdG8gZmluZCBhCi0gICAgcHJlLWJ1aWx0IFRjbC9UayBpbiBlaXRoZXIgLi5cLi5cdGNsdGsgZm9yIDMyLWJpdCBvciAuLlwuLlx0Y2x0azY0IGZvcgotICAgIDY0LWJpdCAocmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkpLiAgU2VlIGJlbG93IGZvciBpbnN0cnVjdGlvbnMgdG8gYnVpbGQKLSAgICBUY2wvVGsuCi1fYnoyCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJiemlwMiBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgSG9tZXBhZ2UKLSAgICAgICAgaHR0cDovL3d3dy5iemlwLm9yZy8KLSAgICBEb3dubG9hZCB0aGUgc291cmNlIGZyb20gdGhlIHB5dGhvbi5vcmcgY29weSBpbnRvIHRoZSBkaXN0Ci0gICAgZGlyZWN0b3J5OgotCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvYnppcDItMS4wLjYKLQotICAgICoqIE5PVEU6IGlmIHlvdSB1c2UgdGhlIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsKC1hbWQ2NCkuYmF0IGFwcHJvYWNoIGZvcgotICAgIG9idGFpbmluZyBleHRlcm5hbCBzb3VyY2VzIHRoZW4geW91IGRvbid0IG5lZWQgdG8gbWFudWFsbHkgZ2V0IHRoZSBzb3VyY2UKLSAgICBhYm92ZSB2aWEgc3VidmVyc2lvbi4gKioKLV9sem1hCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBsaWJsem1hIGNvbXByZXNzaW9uIGxpYnJhcnkuCi0KLSAgICBEb3dubG9hZCB0aGUgcHJlLWJ1aWx0IFdpbmRvd3MgYmluYXJpZXMgZnJvbSBodHRwOi8vdHVrYWFuaS5vcmcveHovLCBhbmQKLSAgICBleHRyYWN0IHRvIC4uXHh6LTUuMC4zLiBJZiB5b3UgYXJlIHVzaW5nIGEgbW9yZSByZWNlbnQgdmVyc2lvbiBvZiBsaWJsem1hLAotICAgIGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRvIHJlbmFtZSB0aGUgZGlyZWN0b3J5IGZyb20geHotPFZFUlNJT04+IHRvIHh6LTUuMC4zLgotCi1fc3NsCi0gICAgUHl0aG9uIHdyYXBwZXIgZm9yIHRoZSBzZWN1cmUgc29ja2V0cyBsaWJyYXJ5LgotCi0gICAgR2V0IHRoZSBzb3VyY2UgY29kZSB0aHJvdWdoCi0KLSAgICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC9vcGVuc3NsLTEuMC4xZQotCi0gICAgKiogTk9URTogaWYgeW91IHVzZSB0aGUgVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwoLWFtZDY0KS5iYXQgYXBwcm9hY2ggZm9yCi0gICAgb2J0YWluaW5nIGV4dGVybmFsIHNvdXJjZXMgdGhlbiB5b3UgZG9uJ3QgbmVlZCB0byBtYW51YWxseSBnZXQgdGhlIHNvdXJjZQotICAgIGFib3ZlIHZpYSBzdWJ2ZXJzaW9uLiAqKgotCi0gICAgQWx0ZXJuYXRpdmVseSwgZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcuCi0gICAgWW91IGNhbiAodGhlb3JldGljYWxseSkgdXNlIGFueSB2ZXJzaW9uIG9mIE9wZW5TU0wgeW91IGxpa2UgLSB0aGUKLSAgICBidWlsZCBwcm9jZXNzIHdpbGwgYXV0b21hdGljYWxseSBzZWxlY3QgdGhlIGxhdGVzdCB2ZXJzaW9uLgotCi0gICAgWW91IG11c3QgaW5zdGFsbCB0aGUgTkFTTSBhc3NlbWJsZXIgMi4xMCBvciBuZXdlciBmcm9tCi0gICAgICAgIGh0dHA6Ly9uYXNtLnNmLm5ldAotICAgIGZvciB4ODYgYnVpbGRzLiAgUHV0IG5hc20uZXhlIGFueXdoZXJlIGluIHlvdXIgUEFUSC4gTW9yZSByZWNlbnQKLSAgICB2ZXJzaW9ucyBvZiBPcGVuU1NMIG1heSBuZWVkIGEgbGF0ZXIgdmVyc2lvbiBvZiBOQVNNLiBJZiBPcGVuU1NMJ3Mgc2VsZgotICAgIHRlc3RzIGRvbid0IHBhc3MsIHlvdSBzaG91bGQgZmlyc3QgdHJ5IHRvIHVwZGF0ZSBOQVNNIGFuZCBkbyBhIGZ1bGwKLSAgICByZWJ1aWxkIG9mIE9wZW5TU0wuCi0KLSAgICBZb3UgY2FuIGFsc28gaW5zdGFsbCBBY3RpdmVQZXJsIGZyb20KLSAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8KLSAgICBpZiB5b3UgbGlrZSB0byB1c2UgdGhlIG9mZmljaWFsIHNvdXJjZXMgaW5zdGVhZCBvZiB0aGUgZmlsZXMgZnJvbQotICAgIHB5dGhvbidzIHN1YnZlcnNpb24gcmVwb3NpdG9yeS4gVGhlIHN2biB2ZXJzaW9uIGNvbnRhaW5zIHByZS1idWlsZAotICAgIG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkgZmlsZXMuCi0KLSAgICBUaGUgYnVpbGQgcHJvY2VzcyBtYWtlcyBzdXJlIHRoYXQgbm8gcGF0ZW50ZWQgYWxnb3JpdGhtcyBhcmUgaW5jbHVkZWQuCi0gICAgRm9yIG5vdyBSQzUsIE1EQzIgYW5kIElERUEgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGJ1aWxkLiBZb3UgbWF5IGhhdmUKLSAgICB0byBtYW51YWxseSByZW1vdmUgJChPQkpfRClcaV8qLm9iaiBmcm9tIG1zXG50Lm1hayBpZiB0aGUgYnVpbGQgcHJvY2VzcwotICAgIGNvbXBsYWlucyBhYm91dCBtaXNzaW5nIGZpbGVzIG9yIGZvcmJpZGRlbiBJREVBLiBBZ2FpbiB0aGUgZmlsZXMgcHJvdmlkZWQKLSAgICBpbiB0aGUgc3VidmVyc2lvbiByZXBvc2l0b3J5IGFyZSBhbHJlYWR5IGZpeGVkLgotCi0gICAgVGhlIE1TVkMgcHJvamVjdCBzaW1wbHkgaW52b2tlcyBQQ0J1aWxkL2J1aWxkX3NzbC5weSB0byBwZXJmb3JtCi0gICAgdGhlIGJ1aWxkLiAgVGhpcyBQeXRob24gc2NyaXB0IGxvY2F0ZXMgYW5kIGJ1aWxkcyB5b3VyIE9wZW5TU0wKLSAgICBpbnN0YWxsYXRpb24sIHRoZW4gaW52b2tlcyBhIHNpbXBsZSBtYWtlZmlsZSB0byBidWlsZCB0aGUgZmluYWwgLnB5ZC4KLQotICAgIGJ1aWxkX3NzbC5weSBhdHRlbXB0cyB0byBjYXRjaCB0aGUgbW9zdCBjb21tb24gZXJyb3JzIChzdWNoIGFzIG5vdAotICAgIGJlaW5nIGFibGUgdG8gZmluZCBPcGVuU1NMIHNvdXJjZXMsIG9yIG5vdCBiZWluZyBhYmxlIHRvIGZpbmQgYSBQZXJsCi0gICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLgotICAgIElmIHlvdSBoYXZlIGEgcHJvYmxlbSB0aGF0IGRvZXNuJ3Qgc2VlbSB0byBiZSBoYW5kbGVkIGNvcnJlY3RseQotICAgIChlZywgeW91IGtub3cgeW91IGhhdmUgQWN0aXZlUGVybCBidXQgd2UgY2FuJ3QgZmluZCBpdCksIHBsZWFzZSB0YWtlCi0gICAgYSBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQotICAgIHNob3VsZCBiZSBhYmxlIHRvIGJlIHJ1biBkaXJlY3RseSBmcm9tIHRoZSBjb21tYW5kLWxpbmUuCi0KLSAgICBidWlsZF9zc2wucHkvTVNWQyBpc24ndCBjbGV2ZXIgZW5vdWdoIHRvIGNsZWFuIE9wZW5TU0wgLSB5b3UgbXVzdCBkbwotICAgIHRoaXMgYnkgaGFuZC4KLQotVGhlIHN1YnByb2plY3RzIGFib3ZlIHdyYXAgZXh0ZXJuYWwgcHJvamVjdHMgUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIGFzCi1zdWNoLCBhIGxpdHRsZSBtb3JlIHdvcmsgaXMgcmVxdWlyZWQgaW4gb3JkZXIgdG8gZG93bmxvYWQgdGhlIHJlbGV2YW50IHNvdXJjZQotZmlsZXMgZm9yIGVhY2ggcHJvamVjdCBiZWZvcmUgdGhleSBjYW4gYmUgYnVpbHQuICBUaGUgYnVpbGRib3RzIGRvIHRoaXMgZWFjaAotdGltZSB0aGV5J3JlIGJ1aWx0LCBzbyB0aGUgZWFzaWVzdCBhcHByb2FjaCBpcyB0byBydW4gZWl0aGVyIGV4dGVybmFsLmJhdCBvcgotZXh0ZXJuYWwtYW1kNjQuYmF0IGluIHRoZSAuLlxUb29sc1xidWlsZGJvdCBkaXJlY3RvcnkgZnJvbSAuLlwsIGkuZS46Ci0KLSAgICBDOlwuLlxzdm4ucHl0aG9uLm9yZ1xwcm9qZWN0c1xweXRob25cdHJ1bmtcUENidWlsZD5jZCAuLgotICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblx0cnVuaz5Ub29sc1xidWlsZGJvdFxleHRlcm5hbC5iYXQKLQotVGhpcyBleHRyYWN0cyBhbGwgdGhlIGV4dGVybmFsIHN1YnByb2plY3RzIGZyb20gaHR0cDovL3N2bi5weXRob24ub3JnL2V4dGVybmFsCi12aWEgU3VidmVyc2lvbiAoc28geW91J2xsIG5lZWQgYW4gc3ZuLmV4ZSBvbiB5b3VyIFBBVEgpIGFuZCBwbGFjZXMgdGhlbSBpbgotLi5cLi4gKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KS4gIFRoZSBleHRlcm5hbCgtYW1kNjQpLmJhdCBzY3JpcHRzIHdpbGwKLWFsc28gYnVpbGQgYSBkZWJ1ZyBidWlsZCBvZiBUY2wvVGs7IHRoZXJlIGFyZW4ndCBhbnkgZXF1aXZhbGVudCBiYXRjaCBmaWxlcwotZm9yIGJ1aWxkaW5nIHJlbGVhc2UgdmVyc2lvbnMgb2YgVGNsL1RrIGx5aW5nIGFyb3VuZCBpbiB0aGUgVG9vbHNcYnVpbGRib3QKLWRpcmVjdG9yeS4gIElmIHlvdSBuZWVkIHRvIGJ1aWxkIGEgcmVsZWFzZSB2ZXJzaW9uIG9mIFRjbC9UayBpdCBpc24ndCBoYXJkCi10aG91Z2gsIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBleHRlcm5hbCgtYW1kNjQpLmJhdCBmaWxlIGFuZCBmaW5kIHRoZQotdHdvIG5tYWtlIGxpbmVzLCB0aGVuIGNhbGwgZWFjaCBvbmUgd2l0aG91dCB0aGUgJ0RFQlVHPTEnIHBhcmFtZXRlciwgaS5lLjoKLQotVGhlIGV4dGVybmFsLWFtZDY0LmJhdCBmaWxlIGNvbnRhaW5zIHRoaXMgZm9yIHRjbDoKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IGNsZWFuIGFsbCBpbnN0YWxsCi0KLVNvIGZvciBhIHJlbGVhc2UgYnVpbGQsIHlvdSdkIGNhbGwgaXQgYXM6Ci0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsIGluc3RhbGwKLQotICAgIFhYWCBTaG91bGQgd2UgY29tcGlsZSB3aXRoIE9QVFM9dGhyZWFkcz8KLSAgICBYWFggT3VyIGluc3RhbGxlciBjb3BpZXMgYSBsb3Qgb2Ygc3R1ZmYgb3V0IG9mIHRoZSBUY2wvVGsgaW5zdGFsbAotICAgIFhYWCBkaXJlY3RvcnkuICBJcyBhbGwgb2YgdGhhdCByZWFsbHkgbmVlZGVkIGZvciBQeXRob24gdXNlIG9mIFRjbC9Uaz8KLQotVGhpcyB3aWxsIGJlIGNsZWFuZWQgdXAgaW4gdGhlIGZ1dHVyZTsgaWRlYWxseSBUY2wvVGsgd2lsbCBiZSBicm91Z2h0IGludG8gb3VyCi1wY2J1aWxkLnNsbiBhcyBjdXN0b20gLnZjeHByb2ogZmlsZXMsIGp1c3QgYXMgd2UndmUgcmVjZW50bHkgZG9uZSB3aXRoIHRoZQotc3FsaXRlMy52Y3hwcm9qIGZpbGUsIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBuZWVkIGZvciBUY2wvVGsgdG8gYmUgYnVpbHQKLXNlcGFyYXRlbHkgdmlhIGEgYmF0Y2ggZmlsZS4KLQotWFhYIHRyZW50Lm5lbHNvbiAwMi1BcHItMDg6Ci0gICAgSGF2aW5nIHRoZSBleHRlcm5hbCBzdWJwcm9qZWN0cyBpbiAuLlwuLiByZWxhdGl2ZSB0byB0aGlzIGRpcmVjdG9yeSBpcyBhCi0gICAgYml0IG9mIGEgbnVpc2FuY2Ugd2hlbiB5b3UncmUgd29ya2luZyBvbiBweTNrIGFuZCB0cnVuayBpbiBwYXJhbGxlbCBhbmQKLSAgICB5b3VyIGRpcmVjdG9yeSBsYXlvdXQgbWltaWNzIHRoYXQgb2YgUHl0aG9uJ3Mgc3VidmVyc2lvbiBsYXlvdXQsIGUuZy46Ci0KLSAgICAgICAgQzpcLi5cc3ZuLnB5dGhvbi5vcmdccHJvamVjdHNccHl0aG9uXHRydW5rCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblxicmFuY2hlc1xweTNrCi0gICAgICAgIEM6XC4uXHN2bi5weXRob24ub3JnXHByb2plY3RzXHB5dGhvblxicmFuY2hlc1xyZWxlYXNlMjUtbWFpbnQKLQotICAgIEknZCBsaWtlIHRvIGNoYW5nZSB0aGluZ3Mgc28gdGhhdCBleHRlcm5hbCBzdWJwcm9qZWN0cyBhcmUgZmV0Y2hlZCBmcm9tCi0gICAgLi5cZXh0ZXJuYWwgaW5zdGVhZCBvZiAuLlwuLiwgdGhlbiBwcm92aWRlIHNvbWUgaGVscGVyIHNjcmlwdHMgb3IgYmF0Y2gKLSAgICBmaWxlcyB0aGF0IHdvdWxkIHNldCB1cCBhIG5ldyAuLlxleHRlcm5hbCBkaXJlY3Rvcnkgd2l0aCBzdm4gY2hlY2tvdXRzIG9mCi0gICAgdGhlIHJlbGV2YW50IGJyYW5jaGVzIGluIGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC8sIG9yCi0gICAgYWx0ZXJuYXRpdmVseSwgdXNlIGp1bmN0aW9ucyB0byBsaW5rIC4uXGV4dGVybmFsIHdpdGggYSBwcmUtZXhpc3RpbmcKLSAgICBleHRlcm5hbHMgZGlyZWN0b3J5IGJlaW5nIHVzZWQgYnkgYW5vdGhlciBicmFuY2guICBpLmUuIGlmIEknbSB1c3VhbGx5Ci0gICAgd29ya2luZyBvbiB0cnVuayAoYW5kIGhhdmUgcHJldmlvdXNseSBjcmVhdGVkIHRydW5rXGV4dGVybmFsIHZpYSB0aGUKLSAgICBwcm92aWRlZCBiYXRjaCBmaWxlKSwgYW5kIHdhbnQgdG8gZG8gc29tZSB3b3JrIG9uIHB5M2ssIEknZCBzZXQgdXAgYQotICAgIGp1bmN0aW9uIGFzIGZvbGxvd3MgKHVzaW5nIHRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGFib3ZlIGFzIGFuIGV4YW1wbGUpOgotCi0gICAgICAgIEM6XC4uXHB5dGhvblx0cnVua1xleHRlcm5hbCA8LSBhbHJlYWR5IGV4aXN0cyBhbmQgaGFzIGJ1aWx0IHZlcnNpb25zCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZXh0ZXJuYWwgc3VicHJvamVjdHMKLQotICAgICAgICBDOlwuLlxweXRob25cYnJhbmNoZXNccHkzaz5saW5rZC5leGUgZXh0ZXJuYWwgLi5cLi5cdHJ1bmtcZXh0ZXJuYWwKLSAgICAgICAgTGluayBjcmVhdGVkIGF0OiBleHRlcm5hbAotCi0gICAgT25seSBhIHNsaWdodCB0d2VhayB3b3VsZCBiZSBuZWVkZWQgdG8gdGhlIGJ1aWxkYm90cyBzdWNoIHRoYXQgYm90cwotICAgIGJ1aWxkaW5nIHRydW5rIGFuZCBweTNrIGNvdWxkIG1ha2UgdXNlIG9mIHRoZSBzYW1lIGZhY2lsaXR5LiAgKDIuNS54Ci0gICAgYnVpbGRzIG5lZWQgdG8gYmUga2VwdCBzZXBhcmF0ZSBhcyB0aGV5J3JlIHVzaW5nIFZpc3VhbCBTdHVkaW8gNy4xLikKLS9YWFggdHJlbnQubmVsc29uIDAyLUFwci0wOAotCi1CdWlsZGluZyBmb3IgSXRhbml1bQotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotT2ZmaWNpYWwgc3VwcG9ydCBmb3IgSXRhbml1bSBidWlsZHMgaGF2ZSBiZWVuIGRyb3BwZWQgZnJvbSB0aGUgYnVpbGQuIFBsZWFzZQotY29udGFjdCB1cyBhbmQgcHJvdmlkZSBwYXRjaGVzIGlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBJdGFuaXVtIGJ1aWxkcy4KLQotQnVpbGRpbmcgZm9yIEFNRDY0Ci0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIGJ1aWxkIHByb2Nlc3MgZm9yIEFNRDY0IC8geDY0IGlzIHZlcnkgc2ltaWxhciB0byBzdGFuZGFyZCBidWlsZHMuIFlvdSBqdXN0Ci1oYXZlIHRvIHNldCB4NjQgYXMgcGxhdGZvcm0uIEluIGFkZGl0aW9uLCB0aGUgSE9TVF9QWVRIT04gZW52aXJvbm1lbnQgdmFyaWFibGUKLW11c3QgcG9pbnQgdG8gYSBQeXRob24gaW50ZXJwcmV0ZXIgKGF0IGxlYXN0IDIuNCksIHRvIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24uCi0KLUJ1aWxkaW5nIFB5dGhvbiBVc2luZyB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1NaWNyb3NvZnQgaGFzIHdpdGhkcmF3biB0aGUgZnJlZSBNUyBUb29sa2l0IENvbXBpbGVyLCBzbyB0aGlzIGNhbiBubyBsb25nZXIKLWJlIGNvbnNpZGVyZWQgYSBzdXBwb3J0ZWQgb3B0aW9uLiBJbnN0ZWFkIHlvdSBjYW4gdXNlIHRoZSBmcmVlIFZTIEMrKyBFeHByZXNzCi1FZGl0aW9uLgotCi1Qcm9maWxlIEd1aWRlZCBPcHRpbWl6YXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgc29sdXRpb24gaGFzIHR3byBjb25maWd1cmF0aW9ucyBmb3IgUEdPLiBUaGUgUEdJbnN0cnVtZW50Ci1jb25maWd1cmF0aW9uIG11c3QgYmUgYnVpbGQgZmlyc3QuIFRoZSBQR0luc3RydW1lbnQgYmluYXJpZXMgYXJlCi1saW5rZWQgYWdhaW5zdCBhIHByb2ZpbGluZyBsaWJyYXJ5IGFuZCBjb250YWluIGV4dHJhIGRlYnVnCi1pbmZvcm1hdGlvbi4gVGhlIFBHVXBkYXRlIGNvbmZpZ3VyYXRpb24gdGFrZXMgdGhlIHByb2ZpbGluZyBkYXRhIGFuZAotZ2VuZXJhdGVzIG9wdGltaXplZCBiaW5hcmllcy4KLQotVGhlIGJ1aWxkX3Bnby5iYXQgc2NyaXB0IGF1dG9tYXRlcyB0aGUgY3JlYXRpb24gb2Ygb3B0aW1pemVkIGJpbmFyaWVzLiBJdAotY3JlYXRlcyB0aGUgUEdJIGZpbGVzLCBydW5zIHRoZSB1bml0IHRlc3Qgc3VpdGUgb3IgUHlCZW5jaCB3aXRoIHRoZSBQR0kKLXB5dGhvbiBhbmQgZmluYWxseSBjcmVhdGVzIHRoZSBvcHRpbWl6ZWQgZmlsZXMuCi0KLWh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9lN2szMmY0ayhWUy4xMDApLmFzcHgKLQotU3RhdGljIGxpYnJhcnkKLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBzb2x1dGlvbiBoYXMgbm8gY29uZmlndXJhdGlvbiBmb3Igc3RhdGljIGxpYnJhcmllcy4gSG93ZXZlciBpdCBpcyBlYXN5Ci1pdCBidWlsZCBhIHN0YXRpYyBsaWJyYXJ5IGluc3RlYWQgb2YgYSBETEwuIFlvdSBzaW1wbHkgaGF2ZSB0byBzZXQgdGhlCi0iQ29uZmlndXJhdGlvbiBUeXBlIiB0byAiU3RhdGljIExpYnJhcnkgKC5saWIpIiBhbmQgYWx0ZXIgdGhlIHByZXByb2Nlc3NvcgotbWFjcm8gIlB5X0VOQUJMRV9TSEFSRUQiIHRvICJQeV9OT19FTkFCTEVfU0hBUkVEIi4gWW91IG1heSBhbHNvIGhhdmUgdG8KLWNoYW5nZSB0aGUgIlJ1bnRpbWUgTGlicmFyeSIgZnJvbSAiTXVsdGktdGhyZWFkZWQgRExMICgvTUQpIiB0bwotIk11bHRpLXRocmVhZGVkICgvTVQpIi4KLQotVmlzdWFsIFN0dWRpbyBwcm9wZXJ0aWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIFBDYnVpbGQgc29sdXRpb24gbWFrZXMgaGVhdnkgdXNlIG9mIFZpc3VhbCBTdHVkaW8gcHJvcGVydHkgZmlsZXMKLSgqLnByb3BzKS4gVGhlIHByb3BlcnRpZXMgY2FuIGJlIHZpZXdlZCBhbmQgYWx0ZXJlZCBpbiB0aGUgUHJvcGVydHkKLU1hbmFnZXIgKFZpZXcgLT4gT3RoZXIgV2luZG93cyAtPiBQcm9wZXJ0eSBNYW5hZ2VyKS4KLQotICogZGVidWcgKGRlYnVnIG1hY3JvOiBfREVCVUcpCi0gKiBwZ2luc3RydW1lbnQgKFBHTykKLSAqIHBndXBkYXRlIChQR08pCi0gICAgKy0tIHBnaW5zdHJ1bWVudAotICogcHlkIChweXRob24gZXh0ZW5zaW9uLCByZWxlYXNlIGJ1aWxkKQotICAgICstLSByZWxlYXNlCi0gICAgKy0tIHB5cHJvamVjdAotICogcHlkX2QgKHB5dGhvbiBleHRlbnNpb24sIGRlYnVnIGJ1aWxkKQotICAgICstLSBkZWJ1ZwotICAgICstLSBweXByb2plY3QKLSAqIHB5cHJvamVjdCAoYmFzZSBzZXR0aW5ncyBmb3IgYWxsIHByb2plY3RzLCB1c2VyIG1hY3JvcyBsaWtlIFB5RGxsTmFtZSkKLSAqIHJlbGVhc2UgKHJlbGVhc2UgbWFjcm86IE5ERUJVRykKLSAqIHg2NCAoQU1ENjQgLyB4NjQgcGxhdGZvcm0gc3BlY2lmaWMgc2V0dGluZ3MpCi0KLVRoZSBweXByb2plY3QgcHJvcGVydHlmaWxlIGRlZmluZXMgX1dJTjMyIGFuZCB4NjQgZGVmaW5lcyBfV0lONjQgYW5kIF9NX1g2NAotYWx0aG91Z2ggdGhlIG1hY3JvcyBhcmUgc2V0IGJ5IHRoZSBjb21waWxlciwgdG9vLiBUaGUgR1VJIGRvZXNuJ3QgYWx3YXlzIGtub3cKLWFib3V0IHRoZSBtYWNyb3MgYW5kIGNvbmZ1c2UgdGhlIHVzZXIgd2l0aCBmYWxzZSBpbmZvcm1hdGlvbi4KLQotWU9VUiBPV04gRVhURU5TSU9OIERMTHMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUlmIHlvdSB3YW50IHRvIGNyZWF0ZSB5b3VyIG93biBleHRlbnNpb24gbW9kdWxlIERMTCwgdGhlcmUncyBhbiBleGFtcGxlCi13aXRoIGVhc3ktdG8tZm9sbG93IGluc3RydWN0aW9ucyBpbiAuLi9QQy9leGFtcGxlLzsgcmVhZCB0aGUgZmlsZQotcmVhZG1lLnR4dCB0aGVyZSBmaXJzdC4KK0J1aWxkaW5nIFB5dGhvbiB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIEMrKw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoaXMgZGlyZWN0b3J5IGlzIHVzZWQgdG8gYnVpbGQgQ1B5dGhvbiBmb3IgTWljcm9zb2Z0IFdpbmRvd3MgTlQgdmVyc2lvbg0KKzUuMSBvciBoaWdoZXIgKFdpbmRvd3MgWFAsIFdpbmRvd3MgU2VydmVyIDIwMDMsIG9yIGxhdGVyKSBvbiAzMiBhbmQgNjQNCitiaXQgcGxhdGZvcm1zLiAgVXNpbmcgdGhpcyBkaXJlY3RvcnkgcmVxdWlyZXMgYW4gaW5zdGFsbGF0aW9uIG9mDQorTWljcm9zb2Z0IFZpc3VhbCBDKysgMjAxMCAoTVNWQyAxMC4wKSBvZiBhbnkgZWRpdGlvbi4gIFRoZSBzcGVjaWZpYw0KK3JlcXVpcmVtZW50cyBhcmUgYXMgZm9sbG93czoNCisNCitWaXN1YWwgQysrIDIwMTAgRXhwcmVzcyBFZGl0aW9uDQorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyAzMi1iaXQgRGVidWcgYW5kIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMuDQorICAgIFRoZSBQeXRob24gYnVpbGQgc29sdXRpb24gcGNidWlsZC5zbG4gbWFrZXMgdXNlIG9mIFNvbHV0aW9uIEZvbGRlcnMsDQorICAgIHdoaWNoIHRoaXMgZWRpdGlvbiBkb2VzIG5vdCBzdXBwb3J0LiAgQW55IHRpbWUgcGNidWlsZC5zbG4gaXMgb3BlbmVkDQorICAgIG9yIHJlbG9hZGVkIGJ5IFZpc3VhbCBDKyssIGEgd2FybmluZyBhYm91dCBTb2x1dGlvbiBGb2xkZXJzIHdpbGwgYmUNCisgICAgZGlzcGxheWVkIHdoaWNoIGNhbiBiZSBzYWZlbHkgZGlzbWlzc2VkIHdpdGggbm8gaW1wYWN0IG9uIHlvdXINCisgICAgYWJpbGl0eSB0byBidWlsZCBQeXRob24uDQorVmlzdWFsIFN0dWRpbyAyMDEwIFByb2Zlc3Npb25hbCBFZGl0aW9uDQorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyA2NC1iaXQgRGVidWcgYW5kIFJlbGVhc2UgY29uZmlndXJhdGlvbiBidWlsZHMNCitWaXN1YWwgU3R1ZGlvIDIwMTAgUHJlbWl1bSBFZGl0aW9uDQorICAgIFJlcXVpcmVkIGZvciBidWlsZGluZyBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gYnVpbGRzIHRoYXQgbWFrZSB1c2Ugb2YNCisgICAgUHJvZmlsZSBHdWlkZWQgT3B0aW1pemF0aW9uIChQR08pLCBvbiBlaXRoZXIgcGxhdGZvcm0uDQorDQorSW5zdGFsbGluZyBTZXJ2aWNlIFBhY2sgMSBmb3IgVmlzdWFsIFN0dWRpbyAyMDEwIGlzIGhpZ2hseSByZWNvbW1lbmRlZA0KK3RvIGF2b2lkIExOSzExMjMgZXJyb3JzLg0KKw0KK0FsbCB5b3UgbmVlZCB0byBkbyB0byBidWlsZCBpcyBvcGVuIHRoZSBzb2x1dGlvbiAicGNidWlsZC5zbG4iIGluIFZpc3VhbA0KK1N0dWRpbywgc2VsZWN0IHRoZSBkZXNpcmVkIGNvbWJpbmF0aW9uIG9mIGNvbmZpZ3VyYXRpb24gYW5kIHBsYXRmb3JtLA0KK3RoZW4gYnVpbGQgd2l0aCAiQnVpbGQgU29sdXRpb24iIG9yIHRoZSBGNyBrZXlib2FyZCBzaG9ydGN1dC4gIFlvdSBjYW4NCithbHNvIGJ1aWxkIGZyb20gdGhlIGNvbW1hbmQgbGluZSB1c2luZyB0aGUgImJ1aWxkLmJhdCIgc2NyaXB0IGluIHRoaXMNCitkaXJlY3RvcnkuICBUaGUgc29sdXRpb24gaXMgY29uZmlndXJlZCB0byBidWlsZCB0aGUgcHJvamVjdHMgaW4gdGhlDQorY29ycmVjdCBvcmRlci4NCisNCitUaGUgc29sdXRpb24gY3VycmVudGx5IHN1cHBvcnRzIHR3byBwbGF0Zm9ybXMuICBUaGUgV2luMzIgcGxhdGZvcm0gaXMNCit1c2VkIHRvIGJ1aWxkIHN0YW5kYXJkIHg4Ni1jb21wYXRpYmxlIDMyLWJpdCBiaW5hcmllcywgb3V0cHV0IGludG8gdGhpcw0KK2RpcmVjdG9yeS4gIFRoZSB4NjQgcGxhdGZvcm0gaXMgdXNlZCBmb3IgYnVpbGRpbmcgNjQtYml0IEFNRDY0IChha2ENCit4ODZfNjQgb3IgRU02NFQpIGJpbmFyaWVzLCBvdXRwdXQgaW50byB0aGUgYW1kNjQgc3ViLWRpcmVjdG9yeSB3aGljaA0KK3dpbGwgYmUgY3JlYXRlZCBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhpc3QuICBUaGUgSXRhbml1bSAoSUEtNjQpDQorcGxhdGZvcm0gaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIFNlZSB0aGUgIkJ1aWxkaW5nIGZvciBBTUQ2NCIgc2VjdGlvbg0KK2JlbG93IGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IDY0LWJpdCBidWlsZHMuDQorDQorRm91ciBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc29sdXRpb246DQorRGVidWcNCisgICAgVXNlZCB0byBidWlsZCBQeXRob24gd2l0aCBleHRyYSBkZWJ1Z2dpbmcgY2FwYWJpbGl0aWVzLCBlcXVpdmFsZW50DQorICAgIHRvIHVzaW5nIC4vY29uZmlndXJlIC0td2l0aC1weWRlYnVnIG9uIFVOSVguICBBbGwgYmluYXJpZXMgYnVpbHQNCisgICAgdXNpbmcgdGhpcyBjb25maWd1cmF0aW9uIGhhdmUgIl9kIiBhZGRlZCB0byB0aGVpciBuYW1lOg0KKyAgICBweXRob24zNF9kLmRsbCwgcHl0aG9uX2QuZXhlLCBwYXJzZXJfZC5weWQsIGFuZCBzbyBvbi4gIEJvdGggdGhlDQorICAgIGJ1aWxkIGFuZCBydCAocnVuIHRlc3QpIGJhdGNoIGZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGFjY2VwdCBhIC1kDQorICAgIG9wdGlvbiBmb3IgZGVidWcgYnVpbGRzLiAgSWYgeW91IGFyZSBidWlsZGluZyBQeXRob24gdG8gaGVscCB3aXRoDQorICAgIGRldmVsb3BtZW50IG9mIENQeXRob24sIHlvdSB3aWxsIG1vc3QgbGlrZWx5IHVzZSB0aGlzIGNvbmZpZ3VyYXRpb24uDQorUEdJbnN0cnVtZW50LCBQR1VwZGF0ZQ0KKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiBpbiBSZWxlYXNlIGNvbmZpZ3VyYXRpb24gdXNpbmcgUEdPLCB3aGljaA0KKyAgICByZXF1aXJlcyBQcmVtaXVtIEVkaXRpb24gb2YgVmlzdWFsIFN0dWRpby4gIFNlZSB0aGUgIlByb2ZpbGUNCisgICAgR3VpZGVkIE9wdGltaXphdGlvbiIgc2VjdGlvbiBiZWxvdyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gIEJ1aWxkDQorICAgIG91dHB1dCBmcm9tIGVhY2ggb2YgdGhlc2UgY29uZmlndXJhdGlvbnMgbGFuZHMgaW4gaXRzIG93bg0KKyAgICBzdWItZGlyZWN0b3J5IG9mIHRoaXMgZGlyZWN0b3J5LiAgVGhlIG9mZmljaWFsIFB5dGhvbiByZWxlYXNlcyBhcmUNCisgICAgYnVpbHQgdXNpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMuDQorUmVsZWFzZQ0KKyAgICBVc2VkIHRvIGJ1aWxkIFB5dGhvbiBhcyBpdCBpcyBtZWFudCB0byBiZSB1c2VkIGluIHByb2R1Y3Rpb24NCisgICAgc2V0dGluZ3MsIHRob3VnaCB3aXRob3V0IFBHTy4NCisNCisNCitMZWdhY3kgc3VwcG9ydA0KKy0tLS0tLS0tLS0tLS0tDQorDQorWW91IGNhbiBmaW5kIGJ1aWxkIGRpcmVjdG9yaWVzIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvIGFuZA0KK1Zpc3VhbCBDKysgaW4gdGhlIFBDIGRpcmVjdG9yeS4gVGhlIGxlZ2FjeSBidWlsZCBkaXJlY3RvcmllcyBhcmUgbm8NCitsb25nZXIgYWN0aXZlbHkgbWFpbnRhaW5lZCBhbmQgbWF5IG5vdCB3b3JrIG91dCBvZiB0aGUgYm94Lg0KKw0KK0N1cnJlbnRseSwgdGhlIG9ubHkgbGVnYWN5IGJ1aWxkIGRpcmVjdG9yeSBpcyBQQ1xWUzkuMCwgZm9yIFZpc3VhbA0KK1N0dWRpbyAyMDA4ICg5LjApLg0KKw0KKw0KK0MgUnVudGltZQ0KKy0tLS0tLS0tLQ0KKw0KK1Zpc3VhbCBTdHVkaW8gMjAxMCB1c2VzIHZlcnNpb24gMTAgb2YgdGhlIEMgcnVudGltZSAoTVNWQ1JUMTApLiAgVGhlDQorZXhlY3V0YWJsZXMgbm8gbG9uZ2VyIHVzZSB0aGUgIlNpZGUgYnkgU2lkZSIgYXNzZW1ibGllcyB1c2VkIGluIHByZXZpb3VzDQordmVyc2lvbnMgb2YgdGhlIGNvbXBpbGVyLiAgVGhpcyBzaW1wbGlmaWVzIGRpc3RyaWJ1dGlvbiBvZiBhcHBsaWNhdGlvbnMuDQorDQorVGhlIHJ1biB0aW1lIGxpYnJhcmllcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSBWQy9SZWRpc3QgZm9sZGVyIG9mIHlvdXINCitWaXN1YWwgU3R1ZGlvIGRpc3RyaWJ1dGlvbi4gRm9yIG1vcmUgaW5mbywgc2VlIHRoZSBSZWFkbWUgaW4gdGhlDQorVkMvUmVkaXN0IGZvbGRlci4NCisNCisNCitTdWItUHJvamVjdHMNCistLS0tLS0tLS0tLS0NCisNCitUaGUgQ1B5dGhvbiBwcm9qZWN0IGlzIHNwbGl0IHVwIGludG8gc2V2ZXJhbCBzbWFsbGVyIHN1Yi1wcm9qZWN0cyB3aGljaA0KK2FyZSBtYW5hZ2VkIGJ5IHRoZSBwY2J1aWxkLnNsbiBzb2x1dGlvbiBmaWxlLiAgRWFjaCBzdWItcHJvamVjdCBpcw0KK3JlcHJlc2VudGVkIGJ5IGEgLnZjeHByb2ogYW5kIGEgLnZjeHByb2ouZmlsdGVycyBmaWxlIHN0YXJ0aW5nIHdpdGggdGhlDQorbmFtZSBvZiB0aGUgc3ViLXByb2plY3QuICBUaGVzZSBzdWItcHJvamVjdHMgZmFsbCBpbnRvIGEgZmV3IGdlbmVyYWwNCitjYXRlZ29yaWVzOg0KKw0KK1RoZSBmb2xsb3dpbmcgc3ViLXByb2plY3RzIHJlcHJlc2VudCB0aGUgYmFyZSBtaW5pbXVtIHJlcXVpcmVkIHRvIGJ1aWxkDQorYSBmdW5jdGlvbmluZyBDUHl0aG9uIGludGVycHJldGVyLiAgSWYgbm90aGluZyBlbHNlIGJ1aWxkcyBidXQgdGhlc2UsDQoreW91J2xsIGhhdmUgYSB2ZXJ5IGxpbWl0ZWQgYnV0IHVzYWJsZSBweXRob24uZXhlOg0KK3B5dGhvbmNvcmUNCisgICAgLmRsbCBhbmQgLmxpYg0KK3B5dGhvbg0KKyAgICAuZXhlDQora2lsbF9weXRob24NCisgICAga2lsbF9weXRob24uZXhlLCBhIHNtYWxsIHByb2dyYW0gZGVzaWduZWQgdG8ga2lsbCBhbnkgaW5zdGFuY2VzIG9mDQorICAgIHB5dGhvbihfZCkuZXhlIHRoYXQgYXJlIHJ1bm5pbmcgYW5kIGxpdmUgaW4gdGhlIGJ1aWxkIG91dHB1dA0KKyAgICBkaXJlY3Rvcnk7IHRoaXMgaXMgbWVhbnQgdG8gYXZvaWQgYnVpbGQgaXNzdWVzIGR1ZSB0byBsb2NrZWQgZmlsZXMNCittYWtlX2J1aWxkaW5mbywgbWFrZV92ZXJzaW9uaW5mbw0KKyAgICBoZWxwZXJzIHRvIHByb3ZpZGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIHRoZSBidWlsZCBwcm9jZXNzDQorDQorVGhlc2Ugc3ViLXByb2plY3RzIHByb3ZpZGUgZXh0cmEgZXhlY3V0YWJsZXMgdGhhdCBhcmUgdXNlZnVsIGZvciBydW5uaW5nDQorQ1B5dGhvbiBpbiBkaWZmZXJlbnQgd2F5czoNCitweXRob253DQorICAgIHB5dGhvbncuZXhlLCBhIHZhcmlhbnQgb2YgcHl0aG9uLmV4ZSB0aGF0IGRvZXNuJ3Qgb3BlbiBhIENvbW1hbmQNCisgICAgUHJvbXB0IHdpbmRvdw0KK3B5bGF1bmNoZXINCisgICAgcHkuZXhlLCB0aGUgUHl0aG9uIExhdW5jaGVyIGZvciBXaW5kb3dzLCBzZWUNCisgICAgICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy91c2luZy93aW5kb3dzLmh0bWwjbGF1bmNoZXINCitweXdsYXVuY2hlcg0KKyAgICBweXcuZXhlLCBhIHZhcmlhbnQgb2YgcHkuZXhlIHRoYXQgZG9lc24ndCBvcGVuIGEgQ29tbWFuZCBQcm9tcHQNCisgICAgd2luZG93DQorX3Rlc3RlbWJlZA0KKyAgICBfdGVzdGVtYmVkLmV4ZSwgYSBzbWFsbCBwcm9ncmFtIHRoYXQgZW1iZWRzIFB5dGhvbiBmb3IgdGVzdGluZw0KKyAgICBwdXJwb3NlcywgdXNlZCBieSB0ZXN0X2NhcGkucHkNCisNCitUaGVzZSBhcmUgbWlzY2VsbGFuZW91cyBzdWItcHJvamVjdHMgdGhhdCBkb24ndCByZWFsbHkgZml0IHRoZSBvdGhlcg0KK2NhdGVnb3JpZXMuICBCeSBkZWZhdWx0LCB0aGVzZSBwcm9qZWN0cyBkbyBub3QgYnVpbGQgaW4gRGVidWcNCitjb25maWd1cmF0aW9uOg0KK19mcmVlemVfaW1wb3J0bGliDQorICAgIF9mcmVlemVfaW1wb3J0bGliLmV4ZSwgdXNlZCB0byByZWdlbmVyYXRlIFB5dGhvblxpbXBvcnRsaWIuaCBhZnRlcg0KKyAgICBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHRvIExpYlxpbXBvcnRsaWJcX2Jvb3RzdHJhcC5weQ0KK2JkaXN0X3dpbmluc3QNCisgICAgLi5cTGliXGRpc3R1dGlsc1xjb21tYW5kXHdpbmluc3QtMTAuMFstYW1kNjRdLmV4ZSwgdGhlIGJhc2UNCisgICAgZXhlY3V0YWJsZSB1c2VkIGJ5IHRoZSBkaXN0dXRpbHMgYmRpc3Rfd2luaW5zdCBjb21tYW5kDQorcHl0aG9uM2RsbA0KKyAgICBweXRob24zLmRsbCwgdGhlIFBFUCAzODQgU3RhYmxlIEFCSSBkbGwNCit4eGxpbWl0ZWQNCisgICAgYnVpbGRzIGFuIGV4YW1wbGUgbW9kdWxlIHRoYXQgbWFrZXMgdXNlIG9mIHRoZSBQRVAgMzg0IFN0YWJsZSBBQkksDQorICAgIHNlZSBNb2R1bGVzXHh4bGltaXRlZC5jDQorDQorVGhlIGZvbGxvd2luZyBzdWItcHJvamVjdHMgYXJlIGZvciBpbmRpdmlkdWFsIG1vZHVsZXMgb2YgdGhlIHN0YW5kYXJkDQorbGlicmFyeSB3aGljaCBhcmUgaW1wbGVtZW50ZWQgaW4gQzsgZWFjaCBvbmUgYnVpbGRzIGEgRExMIChyZW5hbWVkIHRvDQorLnB5ZCkgb2YgdGhlIHNhbWUgbmFtZSBhcyB0aGUgcHJvamVjdDoNCitfY3R5cGVzDQorX2N0eXBlc190ZXN0DQorX2RlY2ltYWwNCitfZWxlbWVudHRyZWUNCitfaGFzaGxpYg0KK19tc2kNCitfbXVsdGlwcm9jZXNzaW5nDQorX292ZXJsYXBwZWQNCitfc29ja2V0DQorX3Rlc3RjYXBpDQorX3Rlc3RidWZmZXINCitfdGVzdGltcG9ydG11bHRpcGxlDQorcHlleHBhdA0KK3NlbGVjdA0KK3VuaWNvZGVkYXRhDQord2luc291bmQNCisNCitUaGUgZm9sbG93aW5nIFB5dGhvbi1jb250cm9sbGVkIHN1Yi1wcm9qZWN0cyB3cmFwIGV4dGVybmFsIHByb2plY3RzLg0KK05vdGUgdGhhdCB0aGVzZSBleHRlcm5hbCBsaWJyYXJpZXMgYXJlIG5vdCBuZWNlc3NhcnkgZm9yIGEgd29ya2luZw0KK2ludGVycHJldGVyLCBidXQgdGhleSBkbyBpbXBsZW1lbnQgc2V2ZXJhbCBtYWpvciBmZWF0dXJlcy4gIFNlZSB0aGUNCisiR2V0dGluZyBFeHRlcm5hbCBTb3VyY2VzIiBzZWN0aW9uIGJlbG93IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uDQorYWJvdXQgZ2V0dGluZyB0aGUgc291cmNlIGZvciBidWlsZGluZyB0aGVzZSBsaWJyYXJpZXMuICBUaGUgc3ViLXByb2plY3RzDQorYXJlOg0KK19iejINCisgICAgUHl0aG9uIHdyYXBwZXIgZm9yIHZlcnNpb24gMS4wLjYgb2YgdGhlIGxpYmJ6aXAyIGNvbXByZXNzaW9uIGxpYnJhcnkNCisgICAgSG9tZXBhZ2U6DQorICAgICAgICBodHRwOi8vd3d3LmJ6aXAub3JnLw0KK19sem1hDQorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB0aGUgbGlibHptYSBjb21wcmVzc2lvbiBsaWJyYXJ5LCB1c2luZyBwcmUtYnVpbHQNCisgICAgYmluYXJpZXMgb2YgWFogVXRpbHMgdmVyc2lvbiA1LjAuNQ0KKyAgICBIb21lcGFnZToNCisgICAgICAgIGh0dHA6Ly90dWthYW5pLm9yZy94ei8NCitfc3NsDQorICAgIFB5dGhvbiB3cmFwcGVyIGZvciB2ZXJzaW9uIDEuMC4yaiBvZiB0aGUgT3BlblNTTCBzZWN1cmUgc29ja2V0cw0KKyAgICBsaWJyYXJ5LCB3aGljaCBpcyBidWlsdCBieSBzc2wudmN4cHJvag0KKyAgICBIb21lcGFnZToNCisgICAgICAgIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvDQorDQorICAgIEJ1aWxkaW5nIE9wZW5TU0wgcmVxdWlyZXMgbmFzbS5leGUgKHRoZSBOZXR3aWRlIEFzc2VtYmxlciksIHZlcnNpb24NCisgICAgMi4xMCBvciBuZXdlciBmcm9tDQorICAgICAgICBodHRwOi8vd3d3Lm5hc20udXMvDQorICAgIHRvIGJlIHNvbWV3aGVyZSBvbiB5b3VyIFBBVEguICBNb3JlIHJlY2VudCB2ZXJzaW9ucyBvZiBPcGVuU1NMIG1heQ0KKyAgICBuZWVkIGEgbGF0ZXIgdmVyc2lvbiBvZiBOQVNNLiBJZiBPcGVuU1NMJ3Mgc2VsZiB0ZXN0cyBkb24ndCBwYXNzLA0KKyAgICB5b3Ugc2hvdWxkIGZpcnN0IHRyeSB0byB1cGRhdGUgTkFTTSBhbmQgZG8gYSBmdWxsIHJlYnVpbGQgb2YNCisgICAgT3BlblNTTC4gIElmIHlvdSB1c2UgdGhlIFBDYnVpbGRcZ2V0X2V4dGVybmFscy5iYXQgbWV0aG9kDQorICAgIGZvciBnZXR0aW5nIHNvdXJjZXMsIGl0IGFsc28gZG93bmxvYWRzIGEgdmVyc2lvbiBvZiBOQVNNIHdoaWNoIHRoZQ0KKyAgICBzc2wgYnVpbGQgc2NyaXB0IHdpbGwgYWRkIHRvIFBBVEguDQorDQorICAgIElmIHlvdSBsaWtlIHRvIHVzZSB0aGUgb2ZmaWNpYWwgc291cmNlcyBpbnN0ZWFkIG9mIHRoZSBmaWxlcyBmcm9tDQorICAgIHB5dGhvbi5vcmcncyBzdWJ2ZXJzaW9uIHJlcG9zaXRvcnksIFBlcmwgaXMgcmVxdWlyZWQgdG8gYnVpbGQgdGhlDQorICAgIG5lY2Vzc2FyeSBtYWtlZmlsZXMgYW5kIGFzc2VtYmx5IGZpbGVzLiAgQWN0aXZlUGVybCBpcyBhdmFpbGFibGUNCisgICAgZnJvbQ0KKyAgICAgICAgaHR0cDovL3d3dy5hY3RpdmVzdGF0ZS5jb20vYWN0aXZlcGVybC8NCisgICAgVGhlIHN2bi5weXRob24ub3JnIHZlcnNpb24gY29udGFpbnMgcHJlLWJ1aWx0IG1ha2VmaWxlcyBhbmQgYXNzZW1ibHkNCisgICAgZmlsZXMuDQorDQorICAgIFRoZSBidWlsZCBwcm9jZXNzIG1ha2VzIHN1cmUgdGhhdCBubyBwYXRlbnRlZCBhbGdvcml0aG1zIGFyZQ0KKyAgICBpbmNsdWRlZC4gIEZvciBub3cgUkM1LCBNREMyIGFuZCBJREVBIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBidWlsZC4NCisgICAgWW91IG1heSBoYXZlIHRvIG1hbnVhbGx5IHJlbW92ZSAkKE9CSl9EKVxpXyoub2JqIGZyb20gbXNcbnQubWFrIGlmDQorICAgIHVzaW5nIG9mZmljaWFsIHNvdXJjZXM7IHRoZSBzdm4ucHl0aG9uLm9yZy1ob3N0ZWQgdmVyc2lvbiBpcyBhbHJlYWR5DQorICAgIGZpeGVkLg0KKw0KKyAgICBUaGUgc3NsLnZjeHByb2ogc3ViLXByb2plY3Qgc2ltcGx5IGludm9rZXMgUENidWlsZC9idWlsZF9zc2wucHksDQorICAgIHdoaWNoIGxvY2F0ZXMgYW5kIGJ1aWxkcyBPcGVuU1NMLg0KKw0KKyAgICBidWlsZF9zc2wucHkgYXR0ZW1wdHMgdG8gY2F0Y2ggdGhlIG1vc3QgY29tbW9uIGVycm9ycyAoc3VjaCBhcyBub3QNCisgICAgYmVpbmcgYWJsZSB0byBmaW5kIE9wZW5TU0wgc291cmNlcywgb3Igbm90IGJlaW5nIGFibGUgdG8gZmluZCBhIFBlcmwNCisgICAgdGhhdCB3b3JrcyB3aXRoIE9wZW5TU0wpIGFuZCBnaXZlIGEgcmVhc29uYWJsZSBlcnJvciBtZXNzYWdlLiAgSWYNCisgICAgeW91IGhhdmUgYSBwcm9ibGVtIHRoYXQgZG9lc24ndCBzZWVtIHRvIGJlIGhhbmRsZWQgY29ycmVjdGx5IChlLmcuLA0KKyAgICB5b3Uga25vdyB5b3UgaGF2ZSBBY3RpdmVQZXJsIGJ1dCB3ZSBjYW4ndCBmaW5kIGl0KSwgcGxlYXNlIHRha2UgYQ0KKyAgICBwZWVrIGF0IGJ1aWxkX3NzbC5weSBhbmQgc3VnZ2VzdCBwYXRjaGVzLiAgTm90ZSB0aGF0IGJ1aWxkX3NzbC5weQ0KKyAgICBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gZGlyZWN0bHkgZnJvbSB0aGUgY29tbWFuZC1saW5lLg0KKw0KKyAgICBUaGUgc3NsIHN1Yi1wcm9qZWN0IGRvZXMgbm90IGhhdmUgdGhlIGFiaWxpdHkgdG8gY2xlYW4gdGhlIE9wZW5TU0wNCisgICAgYnVpbGQ7IGlmIHlvdSBuZWVkIHRvIHJlYnVpbGQsIHlvdSdsbCBoYXZlIHRvIGNsZWFuIGl0IGJ5IGhhbmQuDQorX3NxbGl0ZTMNCisgICAgV3JhcHMgU1FMaXRlIDMuOC4xMS4wLCB3aGljaCBpcyBpdHNlbGYgYnVpbHQgYnkgc3FsaXRlMy52Y3hwcm9qDQorICAgIEhvbWVwYWdlOg0KKyAgICAgICAgaHR0cDovL3d3dy5zcWxpdGUub3JnLw0KK190a2ludGVyDQorICAgIFdyYXBzIHZlcnNpb24gOC42LjEgb2YgdGhlIFRrIHdpbmRvd2luZyBzeXN0ZW0uDQorICAgIEhvbWVwYWdlOg0KKyAgICAgICAgaHR0cDovL3d3dy50Y2wudGsvDQorDQorICAgIFVubGlrZSB0aGUgb3RoZXIgZXh0ZXJuYWwgbGlicmFyaWVzIGxpc3RlZCBhYm92ZSwgVGsgbXVzdCBiZSBidWlsdA0KKyAgICBzZXBhcmF0ZWx5IGJlZm9yZSB0aGUgX3RraW50ZXIgbW9kdWxlIGNhbiBiZSBidWlsdC4gVGhpcyBtZWFucyB0aGF0DQorICAgIGEgcHJlLWJ1aWx0IFRjbC9UayBpbnN0YWxsYXRpb24gaXMgZXhwZWN0ZWQgaW4gLi5cZXh0ZXJuYWxzXHRjbHRrDQorICAgICh0Y2x0azY0IGZvciA2NC1iaXQpIHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5OyB0aGUgZWFzaWVzdCB3YXkgdG8NCisgICAgZG8gc28gaXMgdG8gYnVpbGQgUHl0aG9uIHVzaW5nIGBidWlsZC5iYXQgLWVgLCB3aGljaCB3aWxsIGJ1aWxkDQorICAgIFRjbCwgVGssIGFuZCBUaXggYW5kIGluc3RhbGwgdGhlbSBhcyBleHBlY3RlZC4gIE5vdGUgdGhhdCB0bw0KKyAgICBpbXBvcnQgYW5kIHVzZSB0a2ludGVyLCB0aGUgVGNsIGFuZCBUayBETExzIG11c3QgYmUgc29tZXdoZXJlIHRoYXQNCisgICAgcHl0aG9uLmV4ZSBjYW4gZmluZCB0aGVtLCB3aGljaCBtZWFucyB0aGF0IGVpdGhlcg0KKyAgICAuLlxleHRlcm5hbHNcdGNsdGtbNjRdXGJpbiBtdXN0IGJlIGFkZGVkIHRvIFBBVEgsIG9yIHRoZSBETExzIG11c3QNCisgICAgYmUgY29waWVkIGZyb20gdGhhdCBmb2xkZXIgdG8gYmUgYWxvbmdzaWRlIHB5dGhvbi5leGUuICBgYnVpbGQuYmF0YA0KKyAgICB0YWtlcyBjYXJlIG9mIGl0IGZvciB5b3UgYnkgY29weWluZyB0aGUgRExMcyBpbnRvIHRoZSBidWlsZA0KKyAgICBkaXJlY3RvcnkuDQorDQorDQorR2V0dGluZyBFeHRlcm5hbCBTb3VyY2VzDQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorVGhlIGxhc3QgY2F0ZWdvcnkgb2Ygc3ViLXByb2plY3RzIGxpc3RlZCBhYm92ZSB3cmFwIGV4dGVybmFsIHByb2plY3RzDQorUHl0aG9uIGRvZXNuJ3QgY29udHJvbCwgYW5kIGFzIHN1Y2ggYSBsaXR0bGUgbW9yZSB3b3JrIGlzIHJlcXVpcmVkIGluDQorb3JkZXIgdG8gZG93bmxvYWQgdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBmb3IgZWFjaCBwcm9qZWN0IGJlZm9yZSB0aGV5DQorY2FuIGJlIGJ1aWx0LiAgVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoaXMgaXMgdG8gdXNlIHRoZSBgYnVpbGQuYmF0YA0KK3NjcmlwdCBpbiB0aGlzIGRpcmVjdG9yeSB0byBidWlsZCBQeXRob24sIGFuZCBwYXNzIHRoZSAnLWUnIHN3aXRjaCB0bw0KK3RlbGwgaXQgdG8gdXNlIGdldF9leHRlcm5hbHMuYmF0IHRvIGZldGNoIGV4dGVybmFsIHNvdXJjZXMgYW5kIGJ1aWxkDQorVGNsL1RrIGFuZCBUaXguICBUbyB1c2UgZ2V0X2V4dGVybmFscy5iYXQsIHlvdSdsbCBuZWVkIHRvIGhhdmUNCitTdWJ2ZXJzaW9uIGluc3RhbGxlZCBhbmQgc3ZuLmV4ZSBvbiB5b3VyIFBBVEguICBUaGUgc2NyaXB0IHdpbGwgZmV0Y2gNCitleHRlcm5hbCBsaWJyYXJ5IHNvdXJjZXMgZnJvbSBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvZXh0ZXJuYWwgYW5kIHBsYWNlDQordGhlbSBpbiAuLlxleHRlcm5hbHMgKHJlbGF0aXZlIHRvIHRoaXMgZGlyZWN0b3J5KS4NCisNCisNCitCdWlsZGluZyBmb3IgQU1ENjQNCistLS0tLS0tLS0tLS0tLS0tLS0NCisNCitUaGUgYnVpbGQgcHJvY2VzcyBmb3IgQU1ENjQgLyB4NjQgaXMgdmVyeSBzaW1pbGFyIHRvIHN0YW5kYXJkIGJ1aWxkcywNCit5b3UganVzdCBoYXZlIHRvIHNldCB4NjQgYXMgcGxhdGZvcm0uIEluIGFkZGl0aW9uLCB0aGUgSE9TVF9QWVRIT04NCitlbnZpcm9ubWVudCB2YXJpYWJsZSBtdXN0IHBvaW50IHRvIGEgUHl0aG9uIGludGVycHJldGVyIChhdCBsZWFzdCAyLjQpLA0KK3RvIHN1cHBvcnQgY3Jvc3MtY29tcGlsYXRpb24gZnJvbSBXaW4zMi4gIE5vdGUgdGhhdCBWaXN1YWwgU3R1ZGlvDQorcmVxdWlyZXMgUHJvZmVzc2lvbmFsIEVkaXRpb24gb3IgYmV0dGVyIGluIG9yZGVyIHRvIGJ1aWxkIDY0LWJpdA0KK2JpbmFyaWVzLg0KKw0KKw0KK1Byb2ZpbGUgR3VpZGVkIE9wdGltaXphdGlvbg0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoZSBzb2x1dGlvbiBoYXMgdHdvIGNvbmZpZ3VyYXRpb25zIGZvciBQR08uIFRoZSBQR0luc3RydW1lbnQNCitjb25maWd1cmF0aW9uIG11c3QgYmUgYnVpbHQgZmlyc3QuIFRoZSBQR0luc3RydW1lbnQgYmluYXJpZXMgYXJlIGxpbmtlZA0KK2FnYWluc3QgYSBwcm9maWxpbmcgbGlicmFyeSBhbmQgY29udGFpbiBleHRyYSBkZWJ1ZyBpbmZvcm1hdGlvbi4gVGhlDQorUEdVcGRhdGUgY29uZmlndXJhdGlvbiB0YWtlcyB0aGUgcHJvZmlsaW5nIGRhdGEgYW5kIGdlbmVyYXRlcyBvcHRpbWl6ZWQNCitiaW5hcmllcy4NCisNCitUaGUgYnVpbGRfcGdvLmJhdCBzY3JpcHQgYXV0b21hdGVzIHRoZSBjcmVhdGlvbiBvZiBvcHRpbWl6ZWQgYmluYXJpZXMuDQorSXQgY3JlYXRlcyB0aGUgUEdJIGZpbGVzLCBydW5zIHRoZSB1bml0IHRlc3Qgc3VpdGUgb3IgUHlCZW5jaCB3aXRoIHRoZQ0KK1BHSSBweXRob24sIGFuZCBmaW5hbGx5IGNyZWF0ZXMgdGhlIG9wdGltaXplZCBmaWxlcy4NCisNCitTZWUNCisgICAgaHR0cDovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2U3azMyZjRrKFZTLjEwMCkuYXNweA0KK2ZvciBtb3JlIG9uIHRoaXMgdG9waWMuDQorDQorDQorU3RhdGljIGxpYnJhcnkNCistLS0tLS0tLS0tLS0tLQ0KKw0KK1RoZSBzb2x1dGlvbiBoYXMgbm8gY29uZmlndXJhdGlvbiBmb3Igc3RhdGljIGxpYnJhcmllcy4gSG93ZXZlciBpdCBpcw0KK2Vhc3kgdG8gYnVpbGQgYSBzdGF0aWMgbGlicmFyeSBpbnN0ZWFkIG9mIGEgRExMLiBZb3Ugc2ltcGx5IGhhdmUgdG8gc2V0DQordGhlICJDb25maWd1cmF0aW9uIFR5cGUiIHRvICJTdGF0aWMgTGlicmFyeSAoLmxpYikiIGFuZCBhbHRlciB0aGUNCitwcmVwcm9jZXNzb3IgbWFjcm8gIlB5X0VOQUJMRV9TSEFSRUQiIHRvICJQeV9OT19FTkFCTEVfU0hBUkVEIi4gWW91IG1heQ0KK2Fsc28gaGF2ZSB0byBjaGFuZ2UgdGhlICJSdW50aW1lIExpYnJhcnkiIGZyb20gIk11bHRpLXRocmVhZGVkIERMTA0KKygvTUQpIiB0byAiTXVsdGktdGhyZWFkZWQgKC9NVCkiLg0KKw0KKw0KK1Zpc3VhbCBTdHVkaW8gcHJvcGVydGllcw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK1RoZSBQQ2J1aWxkIHNvbHV0aW9uIG1ha2VzIGhlYXZ5IHVzZSBvZiBWaXN1YWwgU3R1ZGlvIHByb3BlcnR5IGZpbGVzDQorKCoucHJvcHMpLiBUaGUgcHJvcGVydGllcyBjYW4gYmUgdmlld2VkIGFuZCBhbHRlcmVkIGluIHRoZSBQcm9wZXJ0eQ0KK01hbmFnZXIgKFZpZXcgLT4gT3RoZXIgV2luZG93cyAtPiBQcm9wZXJ0eSBNYW5hZ2VyKS4NCisNCitUaGUgcHJvcGVydHkgZmlsZXMgdXNlZCBhcmUgKCstLSA9ICJhbHNvIGltcG9ydHMiKToNCisgKiBkZWJ1ZyAoZGVidWcgbWFjcm86IF9ERUJVRykNCisgKiBwZ2luc3RydW1lbnQgKFBHTykNCisgKiBwZ3VwZGF0ZSAoUEdPKQ0KKyAgICArLS0gcGdpbnN0cnVtZW50DQorICogcHlkIChweXRob24gZXh0ZW5zaW9uLCByZWxlYXNlIGJ1aWxkKQ0KKyAgICArLS0gcmVsZWFzZQ0KKyAgICArLS0gcHlwcm9qZWN0DQorICogcHlkX2QgKHB5dGhvbiBleHRlbnNpb24sIGRlYnVnIGJ1aWxkKQ0KKyAgICArLS0gZGVidWcNCisgICAgKy0tIHB5cHJvamVjdA0KKyAqIHB5cHJvamVjdCAoYmFzZSBzZXR0aW5ncyBmb3IgYWxsIHByb2plY3RzLCB1c2VyIG1hY3JvcyBsaWtlIFB5RGxsTmFtZSkNCisgKiByZWxlYXNlIChyZWxlYXNlIG1hY3JvOiBOREVCVUcpDQorICogc3FsaXRlMyAodXNlZCBvbmx5IGJ5IHNxbGl0ZTMudmN4cHJvaikNCisgKiB4NjQgKEFNRDY0IC8geDY0IHBsYXRmb3JtIHNwZWNpZmljIHNldHRpbmdzKQ0KKw0KK1RoZSBweXByb2plY3QgcHJvcGVydHkgZmlsZSBkZWZpbmVzIF9XSU4zMiBhbmQgeDY0IGRlZmluZXMgX1dJTjY0IGFuZA0KK19NX1g2NCBhbHRob3VnaCB0aGUgbWFjcm9zIGFyZSBzZXQgYnkgdGhlIGNvbXBpbGVyLCB0b28uIFRoZSBHVUkgZG9lc24ndA0KK2Fsd2F5cyBrbm93IGFib3V0IHRoZSBtYWNyb3MgYW5kIGNvbmZ1c2UgdGhlIHVzZXIgd2l0aCBmYWxzZQ0KK2luZm9ybWF0aW9uLg0KZGlmZiAtLWdpdCBhL1BDYnVpbGQvcnQuYmF0IGIvUENidWlsZC9ydC5iYXQKaW5kZXggNzEyOWUyMC4uMTNjOWQ2MiAxMDA2NDQKLS0tIGEvUENidWlsZC9ydC5iYXQKKysrIGIvUENidWlsZC9ydC5iYXQKQEAgLTEsNTggKzEsNjAgQEAKLUBlY2hvIG9mZgotcmVtIFJ1biBUZXN0cy4gIFJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0IHN1aXRlLgotcmVtIFVzYWdlOiAgcnQgWy1kXSBbLU9dIFstcV0gWy14NjRdIHJlZ3J0ZXN0X2FyZ3MKLXJlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4KLXJlbSAtTyAgIFJ1biBweXRob24uZXhlIG9yIHB5dGhvbl9kLmV4ZSAoc2VlIC1kKSB3aXRoIC1PLgotcmVtIC1xICAgInF1aWNrIiAtLSBub3JtYWxseSB0aGUgdGVzdHMgYXJlIHJ1biB0d2ljZSwgdGhlIGZpcnN0IHRpbWUKLXJlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLgotcmVtICAgICAgLXEgcnVucyB0aGUgdGVzdHMganVzdCBvbmNlLCBhbmQgd2l0aG91dCBkZWxldGluZyAucHlbY29dIGZpbGVzLgotcmVtIC14NjQgUnVuIHRoZSA2NC1iaXQgYnVpbGQgb2YgcHl0aG9uIChvciBweXRob25fZCBpZiAtZCB3YXMgc3BlY2lmaWVkKQotcmVtICAgICAgZnJvbSB0aGUgJ2FtZDY0JyBkaXIgaW5zdGVhZCBvZiB0aGUgMzItYml0IGJ1aWxkIGluIHRoaXMgZGlyLgotcmVtIEFsbCBsZWFkaW5nIGluc3RhbmNlcyBvZiB0aGVzZSBzd2l0Y2hlcyBhcmUgc2hpZnRlZCBvZmYsIGFuZAotcmVtIHdoYXRldmVyIHJlbWFpbnMgaXMgcGFzc2VkIHRvIHJlZ3J0ZXN0LnB5LiAgRm9yIGV4YW1wbGUsCi1yZW0gICAgIHJ0IC1PIC1kIC14IHRlc3RfdGhyZWFkCi1yZW0gcnVucwotcmVtICAgICBweXRob25fZCAtTyAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZAotcmVtIHR3aWNlLCBhbmQKLXJlbSAgICAgcnQgLXEgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHJ1bnMKLXJlbSAgICAgcHl0aG9uX2QgLi4vbGliL3Rlc3QvcmVncnRlc3QucHkgLWcgdGVzdF9iaW5hc2NpaQotcmVtIHRvIGdlbmVyYXRlIHRoZSBleHBlY3RlZC1vdXRwdXQgZmlsZSBmb3IgYmluYXNjaWkgcXVpY2tseS4KLXJlbQotcmVtIENvbmZ1c2luZzogIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgbGlrZQotcmVtICAgICAtdSBuZXR3b3JrLGxhcmdlZmlsZQotcmVtIHRoZW4geW91IGhhdmUgdG8gcXVvdGUgaXQgb24gdGhlIHJ0IGxpbmUsIGxpa2UKLXJlbSAgICAgcnQgLXUgIm5ldHdvcmssbGFyZ2VmaWxlIgotCi1zZXRsb2NhbAotCi1zZXQgcHJlZml4PS5cCi1zZXQgc3VmZml4PQotc2V0IHFtb2RlPQotc2V0IGRhc2hPPQotc2V0IHRjbHRrPXRjbHRrCi0KLTpDaGVja09wdHMKLWlmICIlMSI9PSItTyIgKHNldCBkYXNoTz0tTykgICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotaWYgIiUxIj09Ii1xIiAoc2V0IHFtb2RlPXllcykgICAgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzCi1pZiAiJTEiPT0iLWQiIChzZXQgc3VmZml4PV9kKSAgICAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMKLWlmICIlMSI9PSIteDY0IiAoc2V0IHByZWZpeD1hbWQ2NCkgJiAoc2V0IHRjbHRrPXRjbHRrNjQpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cwotCi1QQVRIICVQQVRIJTslfmRwMC4uXC4uXCV0Y2x0ayVcYmluCi1zZXQgZXhlPSVwcmVmaXglXHB5dGhvbiVzdWZmaXglCi1zZXQgY21kPSVleGUlICVkYXNoTyUgLVdkIC1FIC1iYiAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQotaWYgZGVmaW5lZCBxbW9kZSBnb3RvIFFtb2RlCi0KLWVjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLgotJWV4ZSUgcm1weWMucHkKLQotZWNobyBvbgotJWNtZCUKLUBlY2hvIG9mZgotCi1lY2hvIEFib3V0IHRvIHJ1biBhZ2FpbiB3aXRob3V0IGRlbGV0aW5nIC5weWMvLnB5byBmaXJzdDoKLXBhdXNlCi0KLTpRbW9kZQotZWNobyBvbgotJWNtZCUKK0BlY2hvIG9mZg0KK3JlbSBSdW4gVGVzdHMuICBSdW4gdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZS4NCityZW0gVXNhZ2U6ICBydCBbLWRdIFstT10gWy1xXSBbLXg2NF0gcmVncnRlc3RfYXJncw0KK3JlbSAtZCAgIFJ1biBEZWJ1ZyBidWlsZCAocHl0aG9uX2QuZXhlKS4gIEVsc2UgcmVsZWFzZSBidWlsZC4NCityZW0gLU8gICBSdW4gcHl0aG9uLmV4ZSBvciBweXRob25fZC5leGUgKHNlZSAtZCkgd2l0aCAtTy4NCityZW0gLXEgICAicXVpY2siIC0tIG5vcm1hbGx5IHRoZSB0ZXN0cyBhcmUgcnVuIHR3aWNlLCB0aGUgZmlyc3QgdGltZQ0KK3JlbSAgICAgIGFmdGVyIGRlbGV0aW5nIGFsbCB0aGUgLnB5W2NvXSBmaWxlcyByZWFjaGFibGUgZnJvbSBMaWIvLg0KK3JlbSAgICAgIC1xIHJ1bnMgdGhlIHRlc3RzIGp1c3Qgb25jZSwgYW5kIHdpdGhvdXQgZGVsZXRpbmcgLnB5W2NvXSBmaWxlcy4NCityZW0gLXg2NCBSdW4gdGhlIDY0LWJpdCBidWlsZCBvZiBweXRob24gKG9yIHB5dGhvbl9kIGlmIC1kIHdhcyBzcGVjaWZpZWQpDQorcmVtICAgICAgZnJvbSB0aGUgJ2FtZDY0JyBkaXIgaW5zdGVhZCBvZiB0aGUgMzItYml0IGJ1aWxkIGluIHRoaXMgZGlyLg0KK3JlbSBBbGwgbGVhZGluZyBpbnN0YW5jZXMgb2YgdGhlc2Ugc3dpdGNoZXMgYXJlIHNoaWZ0ZWQgb2ZmLCBhbmQNCityZW0gd2hhdGV2ZXIgcmVtYWlucyAodXAgdG8gOSBhcmd1bWVudHMpIGlzIHBhc3NlZCB0byByZWdydGVzdC5weS4NCityZW0gRm9yIGV4YW1wbGUsDQorcmVtICAgICBydCAtTyAtZCAteCB0ZXN0X3RocmVhZA0KK3JlbSBydW5zDQorcmVtICAgICBweXRob25fZCAtTyAuLi9saWIvdGVzdC9yZWdydGVzdC5weSAteCB0ZXN0X3RocmVhZA0KK3JlbSB0d2ljZSwgYW5kDQorcmVtICAgICBydCAtcSAtZyB0ZXN0X2JpbmFzY2lpDQorcmVtIHJ1bnMNCityZW0gICAgIHB5dGhvbl9kIC4uL2xpYi90ZXN0L3JlZ3J0ZXN0LnB5IC1nIHRlc3RfYmluYXNjaWkNCityZW0gdG8gZ2VuZXJhdGUgdGhlIGV4cGVjdGVkLW91dHB1dCBmaWxlIGZvciBiaW5hc2NpaSBxdWlja2x5Lg0KK3JlbQ0KK3JlbSBDb25mdXNpbmc6ICBpZiB5b3Ugd2FudCB0byBwYXNzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3QsIGxpa2UNCityZW0gICAgIC11IG5ldHdvcmssbGFyZ2VmaWxlDQorcmVtIHRoZW4geW91IGhhdmUgdG8gcXVvdGUgaXQgb24gdGhlIHJ0IGxpbmUsIGxpa2UNCityZW0gICAgIHJ0IC11ICJuZXR3b3JrLGxhcmdlZmlsZSINCisNCitzZXRsb2NhbA0KKw0KK3NldCBwY2J1aWxkPSV+ZHAwDQorc2V0IHByZWZpeD0lcGNidWlsZCUNCitzZXQgc3VmZml4PQ0KK3NldCBxbW9kZT0NCitzZXQgZGFzaE89DQorc2V0IHRjbHRrPXRjbHRrDQorDQorOkNoZWNrT3B0cw0KK2lmICIlMSI9PSItTyIgKHNldCBkYXNoTz0tTykgICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSI9PSItcSIgKHNldCBxbW9kZT15ZXMpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSI9PSItZCIgKHNldCBzdWZmaXg9X2QpICAgICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KK2lmICIlMSI9PSIteDY0IiAoc2V0IHByZWZpeD0lcHJlZml4JWFtZDY0KSAmIChzZXQgdGNsdGs9dGNsdGs2NCkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQorDQorUEFUSCAlUEFUSCU7JXBjYnVpbGQlLi5cZXh0ZXJuYWxzXCV0Y2x0ayVcYmluDQorc2V0IGV4ZT0iJXByZWZpeCVccHl0aG9uJXN1ZmZpeCUiDQorc2V0IGNtZD0lZXhlJSAlZGFzaE8lIC1XZCAtRSAtYmIgIiVwY2J1aWxkJS4uXGxpYlx0ZXN0XHJlZ3J0ZXN0LnB5IiAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQ0KK2lmIGRlZmluZWQgcW1vZGUgZ290byBRbW9kZQ0KKw0KK2VjaG8gRGVsZXRpbmcgLnB5Yy8ucHlvIGZpbGVzIC4uLg0KKyVleGUlICIlcGNidWlsZCVccm1weWMucHkiDQorDQorZWNobyBvbg0KKyVjbWQlDQorQGVjaG8gb2ZmDQorDQorZWNobyBBYm91dCB0byBydW4gYWdhaW4gd2l0aG91dCBkZWxldGluZyAucHljLy5weW8gZmlyc3Q6DQorcGF1c2UNCisNCis6UW1vZGUNCitlY2hvIG9uDQorJWNtZCUNCmRpZmYgLS1naXQgYS9QQ2J1aWxkL3h4bGltaXRlZC52Y3hwcm9qIGIvUENidWlsZC94eGxpbWl0ZWQudmN4cHJvagppbmRleCAyNmJjMjBkLi5hYmY0MWY5IDEwMDY0NAotLS0gYS9QQ2J1aWxkL3h4bGltaXRlZC52Y3hwcm9qCisrKyBiL1BDYnVpbGQveHhsaW1pdGVkLnZjeHByb2oKQEAgLTEyMCw3ICsxMjAsNyBAQAogICA8L1Byb3BlcnR5R3JvdXA+CiAgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nUmVsZWFzZXxXaW4zMiciPgogICAgIDxDbENvbXBpbGU+Ci0gICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+TkRFQlVHO19XSU4zMjtfV0lORExMO1B5X0xJTUlURURfQVBJPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5OREVCVUc7X1dJTjMyO19XSU5ETEw7UHlfTElNSVRFRF9BUEk9MHgwMzA0MDAwMDwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53c29jazMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMTQwLDcgKzE0MCw3IEBACiAgIDwvSXRlbURlZmluaXRpb25Hcm91cD4KICAgPEl0ZW1EZWZpbml0aW9uR3JvdXAgQ29uZGl0aW9uPSInJChDb25maWd1cmF0aW9uKXwkKFBsYXRmb3JtKSc9PSdQR0luc3RydW1lbnR8V2luMzInIj4KICAgICA8Q2xDb21waWxlPgotICAgICAgPFByZXByb2Nlc3NvckRlZmluaXRpb25zPlB5X0xJTUlURURfQVBJOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KKyAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5QeV9MSU1JVEVEX0FQST0weDAzMDQwMDAwOyUoUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnMpPC9QcmVwcm9jZXNzb3JEZWZpbml0aW9ucz4KICAgICA8L0NsQ29tcGlsZT4KICAgICA8TGluaz4KICAgICAgIDxBZGRpdGlvbmFsRGVwZW5kZW5jaWVzPndzb2NrMzIubGliOyUoQWRkaXRpb25hbERlcGVuZGVuY2llcyk8L0FkZGl0aW9uYWxEZXBlbmRlbmNpZXM+CkBAIC0xNjEsNyArMTYxLDcgQEAKICAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgogICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1BHVXBkYXRlfFdpbjMyJyI+CiAgICAgPENsQ29tcGlsZT4KLSAgICAgIDxQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz5QeV9MSU1JVEVEX0FQSTslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CisgICAgICA8UHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+UHlfTElNSVRFRF9BUEk9MHgwMzA0MDAwMDslKFByZXByb2Nlc3NvckRlZmluaXRpb25zKTwvUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM+CiAgICAgPC9DbENvbXBpbGU+CiAgICAgPExpbms+CiAgICAgICA8QWRkaXRpb25hbERlcGVuZGVuY2llcz53c29jazMyLmxpYjslKEFkZGl0aW9uYWxEZXBlbmRlbmNpZXMpPC9BZGRpdGlvbmFsRGVwZW5kZW5jaWVzPgpAQCAtMTgzLDExICsxODMsNiBAQAogICA8SXRlbUdyb3VwPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cTW9kdWxlc1x4eGxpbWl0ZWQuYyIgLz4KICAgPC9JdGVtR3JvdXA+Ci0gIDxJdGVtR3JvdXA+Ci0gICAgPFByb2plY3RSZWZlcmVuY2UgSW5jbHVkZT0icHl0aG9uY29yZS52Y3hwcm9qIj4KLSAgICAgIDxQcm9qZWN0PntjZjdhYzNkMS1lMmRmLTQxZDItYmVhNi0xZTI1NTZjZGVhMjZ9PC9Qcm9qZWN0PgotICAgIDwvUHJvamVjdFJlZmVyZW5jZT4KLSAgPC9JdGVtR3JvdXA+CiAgIDxJbXBvcnQgUHJvamVjdD0iJChWQ1RhcmdldHNQYXRoKVxNaWNyb3NvZnQuQ3BwLnRhcmdldHMiIC8+CiAgIDxJbXBvcnRHcm91cCBMYWJlbD0iRXh0ZW5zaW9uVGFyZ2V0cyI+CiAgIDwvSW1wb3J0R3JvdXA+CmRpZmYgLS1naXQgYS9QYXJzZXIvUHl0aG9uLmFzZGwgYi9QYXJzZXIvUHl0aG9uLmFzZGwKaW5kZXggYzI0ZDg0MC4uZGViZDg5ZSAxMDA2NDQKLS0tIGEvUGFyc2VyL1B5dGhvbi5hc2RsCisrKyBiL1BhcnNlci9QeXRob24uYXNkbApAQCAtMSw0ICsxLDQgQEAKLS0tIEFTREwncyBmaXZlIGJ1aWx0aW4gdHlwZXMgYXJlIGlkZW50aWZpZXIsIGludCwgc3RyaW5nLCBieXRlcywgb2JqZWN0CistLSBBU0RMJ3Mgc2l4IGJ1aWx0aW4gdHlwZXMgYXJlIGlkZW50aWZpZXIsIGludCwgc3RyaW5nLCBieXRlcywgb2JqZWN0LCBzaW5nbGV0b24KIAogbW9kdWxlIFB5dGhvbgogewpAQCAtNjksOCArNjksOCBAQAogICAgICAgICAgfCBOdW0ob2JqZWN0IG4pIC0tIGEgbnVtYmVyIGFzIGEgUHlPYmplY3QuCiAgICAgICAgICB8IFN0cihzdHJpbmcgcykgLS0gbmVlZCB0byBzcGVjaWZ5IHJhdywgdW5pY29kZSwgZXRjPwogICAgICAgICAgfCBCeXRlcyhieXRlcyBzKQorICAgICAgICAgfCBOYW1lQ29uc3RhbnQoc2luZ2xldG9uIHZhbHVlKQogICAgICAgICAgfCBFbGxpcHNpcwotICAgICAgICAgLS0gb3RoZXIgbGl0ZXJhbHM/IGJvb2xzPwogCiAgICAgICAgICAtLSB0aGUgZm9sbG93aW5nIGV4cHJlc3Npb24gY2FuIGFwcGVhciBpbiBhc3NpZ25tZW50IGNvbnRleHQKICAgICAgICAgIHwgQXR0cmlidXRlKGV4cHIgdmFsdWUsIGlkZW50aWZpZXIgYXR0ciwgZXhwcl9jb250ZXh0IGN0eCkKQEAgLTEwMywxMSArMTAzLDExIEBACiAgICAgZXhjZXB0aGFuZGxlciA9IEV4Y2VwdEhhbmRsZXIoZXhwcj8gdHlwZSwgaWRlbnRpZmllcj8gbmFtZSwgc3RtdCogYm9keSkKICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlcyAoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKLSAgICBhcmd1bWVudHMgPSAoYXJnKiBhcmdzLCBpZGVudGlmaWVyPyB2YXJhcmcsIGV4cHI/IHZhcmFyZ2Fubm90YXRpb24sCi0gICAgICAgICAgICAgICAgICAgICBhcmcqIGt3b25seWFyZ3MsIGlkZW50aWZpZXI/IGt3YXJnLAotICAgICAgICAgICAgICAgICAgICAgZXhwcj8ga3dhcmdhbm5vdGF0aW9uLCBleHByKiBkZWZhdWx0cywKLSAgICAgICAgICAgICAgICAgICAgIGV4cHIqIGt3X2RlZmF1bHRzKQorICAgIGFyZ3VtZW50cyA9IChhcmcqIGFyZ3MsIGFyZz8gdmFyYXJnLCBhcmcqIGt3b25seWFyZ3MsIGV4cHIqIGt3X2RlZmF1bHRzLAorICAgICAgICAgICAgICAgICBhcmc/IGt3YXJnLCBleHByKiBkZWZhdWx0cykKKwogICAgIGFyZyA9IChpZGVudGlmaWVyIGFyZywgZXhwcj8gYW5ub3RhdGlvbikKKyAgICAgICAgICAgYXR0cmlidXRlcyAoaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiAKICAgICAtLSBrZXl3b3JkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBjYWxsCiAgICAga2V5d29yZCA9IChpZGVudGlmaWVyIGFyZywgZXhwciB2YWx1ZSkKZGlmZiAtLWdpdCBhL1BhcnNlci9hc2RsLnB5IGIvUGFyc2VyL2FzZGwucHkKaW5kZXggMDhhYTA1Yi4uZmMxYjE2YyAxMDA2NDQKLS0tIGEvUGFyc2VyL2FzZGwucHkKKysrIGIvUGFyc2VyL2FzZGwucHkKQEAgLTE2LDggKzE2LDkgQEAKIAogaW1wb3J0IHNwYXJrCiAKLWRlZiBvdXRwdXQoc3RyaW5nKToKLSAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cmluZyArICJcbiIpCitkZWYgb3V0cHV0KCpzdHJpbmdzKToKKyAgICBmb3IgcyBpbiBzdHJpbmdzOgorICAgICAgICBzeXMuc3Rkb3V0LndyaXRlKHN0cihzKSArICJcbiIpCiAKIAogY2xhc3MgVG9rZW4ob2JqZWN0KToKQEAgLTE1OCwxMSArMTU5LDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnPSJleHBlY3RlZCBhdHRyaWJ1dGVzLCBmb3VuZCAlcyIgJSBpZCkKICAgICAgICAgcmV0dXJuIFN1bShzdW0sIGF0dHJpYnV0ZXMpCiAKLSAgICBkZWYgcF9wcm9kdWN0KHNlbGYsIGluZm8pOgorICAgIGRlZiBwX3Byb2R1Y3RfMChzZWxmLCBpbmZvKToKICAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApICIKICAgICAgICAgXzAsIGZpZWxkcywgXzEgPSBpbmZvCiAgICAgICAgIHJldHVybiBQcm9kdWN0KGZpZWxkcykKIAorICAgIGRlZiBwX3Byb2R1Y3RfMShzZWxmLCBpbmZvKToKKyAgICAgICAgIiBwcm9kdWN0IDo6PSAoIGZpZWxkcyApIElkICggZmllbGRzICkgIgorICAgICAgICBfMCwgZmllbGRzLCBfMSwgaWQsIF8yLCBhdHRyaWJ1dGVzLCBfMyA9IGluZm8KKyAgICAgICAgaWYgaWQudmFsdWUgIT0gImF0dHJpYnV0ZXMiOgorICAgICAgICAgICAgcmFpc2UgQVNETFN5bnRheEVycm9yKGlkLmxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2c9ImV4cGVjdGVkIGF0dHJpYnV0ZXMsIGZvdW5kICVzIiAlIGlkKQorICAgICAgICByZXR1cm4gUHJvZHVjdChmaWVsZHMsIGF0dHJpYnV0ZXMpCisKICAgICBkZWYgcF9zdW1fMChzZWxmLCBjb25zdHJ1Y3Rvcik6CiAgICAgICAgICIgc3VtIDo6PSBjb25zdHJ1Y3RvciAiCiAgICAgICAgIHJldHVybiBbY29uc3RydWN0b3JbMF1dCkBAIC0yMjIsNyArMjMxLDcgQEAKICAgICAgICAgIiBmaWVsZCA6Oj0gSWQgPyAiCiAgICAgICAgIHJldHVybiBGaWVsZCh0eXBlWzBdLCBvcHQ9VHJ1ZSkKIAotYnVpbHRpbl90eXBlcyA9ICgiaWRlbnRpZmllciIsICJzdHJpbmciLCAiYnl0ZXMiLCAiaW50IiwgIm9iamVjdCIpCitidWlsdGluX3R5cGVzID0gKCJpZGVudGlmaWVyIiwgInN0cmluZyIsICJieXRlcyIsICJpbnQiLCAib2JqZWN0IiwgInNpbmdsZXRvbiIpCiAKICMgYmVsb3cgaXMgYSBjb2xsZWN0aW9uIG9mIGNsYXNzZXMgdG8gY2FwdHVyZSB0aGUgQVNUIG9mIGFuIEFTVCA6LSkKICMgbm90IHN1cmUgaWYgYW55IG9mIHRoZSBtZXRob2RzIGFyZSB1c2VmdWwgeWV0LCBidXQgSSdtIGFkZGluZyB0aGVtCkBAIC0yODksMTEgKzI5OCwxNSBAQAogICAgICAgICAgICAgcmV0dXJuICJTdW0oJXMsICVzKSIgJSAoc2VsZi50eXBlcywgc2VsZi5hdHRyaWJ1dGVzKQogCiBjbGFzcyBQcm9kdWN0KEFTVCk6Ci0gICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpZWxkcyk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpZWxkcywgYXR0cmlidXRlcz1Ob25lKToKICAgICAgICAgc2VsZi5maWVsZHMgPSBmaWVsZHMKKyAgICAgICAgc2VsZi5hdHRyaWJ1dGVzID0gYXR0cmlidXRlcyBvciBbXQogCiAgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgotICAgICAgICByZXR1cm4gIlByb2R1Y3QoJXMpIiAlIHNlbGYuZmllbGRzCisgICAgICAgIGlmIHNlbGYuYXR0cmlidXRlcyBpcyBOb25lOgorICAgICAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzKSIgJSBzZWxmLmZpZWxkcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuICJQcm9kdWN0KCVzLCAlcykiICUgKHNlbGYuZmllbGRzLCBzZWxmLmF0dHJpYnV0ZXMpCiAKIGNsYXNzIFZpc2l0b3JCYXNlKG9iamVjdCk6CiAKQEAgLTM4NSw3ICszOTgsMTEgQEAKICAgICBzY2FubmVyID0gQVNETFNjYW5uZXIoKQogICAgIHBhcnNlciA9IEFTRExQYXJzZXIoKQogCi0gICAgYnVmID0gb3BlbihmaWxlKS5yZWFkKCkKKyAgICBmID0gb3BlbihmaWxlKQorICAgIHRyeToKKyAgICAgICAgYnVmID0gZi5yZWFkKCkKKyAgICBmaW5hbGx5OgorICAgICAgICBmLmNsb3NlKCkKICAgICB0b2tlbnMgPSBzY2FubmVyLnRva2VuaXplKGJ1ZikKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBwYXJzZXIucGFyc2UodG9rZW5zKQpAQCAtNDE2LDQgKzQzMyw0IEBACiAgICAgICAgICAgICBvdXRwdXQoIkNoZWNrIGZhaWxlZCIpCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBmb3IgZGZuIGluIG1vZC5kZm5zOgotICAgICAgICAgICAgICAgIG91dHB1dChkZm4udHlwZSkKKyAgICAgICAgICAgICAgICBvdXRwdXQoZGZuLm5hbWUsIGRmbi52YWx1ZSkKZGlmZiAtLWdpdCBhL1BhcnNlci9hc2RsX2MucHkgYi9QYXJzZXIvYXNkbF9jLnB5CmluZGV4IDRiODRlMGYuLmQ2MDg2ZTYgMTAwNzU1Ci0tLSBhL1BhcnNlci9hc2RsX2MucHkKKysrIGIvUGFyc2VyL2FzZGxfYy5weQpAQCAtMjA5LDYgKzIwOSwxMSBAQAogICAgICAgICBzZWxmLmVtaXQoInN0cnVjdCBfJShuYW1lKXMgeyIgJSBsb2NhbHMoKSwgZGVwdGgpCiAgICAgICAgIGZvciBmIGluIHByb2R1Y3QuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdChmLCBkZXB0aCArIDEpCisgICAgICAgIGZvciBmaWVsZCBpbiBwcm9kdWN0LmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAjIHJ1ZGltZW50YXJ5IGF0dHJpYnV0ZSBoYW5kbGluZworICAgICAgICAgICAgdHlwZSA9IHN0cihmaWVsZC50eXBlKQorICAgICAgICAgICAgYXNzZXJ0IHR5cGUgaW4gYXNkbC5idWlsdGluX3R5cGVzLCB0eXBlCisgICAgICAgICAgICBzZWxmLmVtaXQoIiVzICVzOyIgJSAodHlwZSwgZmllbGQubmFtZSksIGRlcHRoICsgMSk7CiAgICAgICAgIHNlbGYuZW1pdCgifTsiLCBkZXB0aCkKICAgICAgICAgc2VsZi5lbWl0KCIiLCBkZXB0aCkKIApAQCAtNDkzLDcgKzQ5OCwxMSBAQAogCiAgICAgZGVmIHZpc2l0RmllbGQoc2VsZiwgZmllbGQsIG5hbWUsIHN1bT1Ob25lLCBwcm9kPU5vbmUsIGRlcHRoPTApOgogICAgICAgICBjdHlwZSA9IGdldF9jX3R5cGUoZmllbGQudHlwZSkKLSAgICAgICAgc2VsZi5lbWl0KCJpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkXyVzKSkgeyIgJSBmaWVsZC5uYW1lLCBkZXB0aCkKKyAgICAgICAgaWYgZmllbGQub3B0OgorICAgICAgICAgICAgY2hlY2sgPSAiZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfJXMpIiAlIChmaWVsZC5uYW1lLCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNoZWNrID0gIl9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF8lcykiICUgKGZpZWxkLm5hbWUsKQorICAgICAgICBzZWxmLmVtaXQoImlmICglcykgeyIgJSAoY2hlY2ssKSwgZGVwdGgsIHJlZmxvdz1GYWxzZSkKICAgICAgICAgc2VsZi5lbWl0KCJpbnQgcmVzOyIsIGRlcHRoKzEpCiAgICAgICAgIGlmIGZpZWxkLnNlcToKICAgICAgICAgICAgIHNlbGYuZW1pdCgiUHlfc3NpemVfdCBsZW47IiwgZGVwdGgrMSkKQEAgLTUxMCw5ICs1MTksOSBAQAogICAgICAgICAgICAgc2VsZi5lbWl0KCJ9IiwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgibGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7IiwgZGVwdGgrMSkKICAgICAgICAgICAgIGlmIHNlbGYuaXNTaW1wbGVUeXBlKGZpZWxkKToKLSAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKKyAgICAgICAgICAgICAgICBzZWxmLmVtaXQoIiVzID0gX1B5X2FzZGxfaW50X3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCisgICAgICAgICAgICAgICAgc2VsZi5lbWl0KCIlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7IiAlIGZpZWxkLm5hbWUsIGRlcHRoKzEpCiAgICAgICAgICAgICBzZWxmLmVtaXQoImlmICglcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsiICUgZmllbGQubmFtZSwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7IiwgZGVwdGgrMSkKICAgICAgICAgICAgIHNlbGYuZW1pdCgiJXMgdmFsdWU7IiAlIGN0eXBlLCBkZXB0aCsyKQpAQCAtNTU4LDYgKzU2NywxMyBAQAogICAgIGRlZiB2aXNpdFByb2R1Y3Qoc2VsZiwgcHJvZCwgbmFtZSk6CiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIFB5VHlwZU9iamVjdCAqJXNfdHlwZTsiICUgbmFtZSwgMCkKICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfJXModm9pZCopOyIgJSBuYW1lLCAwKQorICAgICAgICBpZiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICAgICAgc2VsZi5lbWl0X2lkZW50aWZpZXIoYS5uYW1lKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJzdGF0aWMgY2hhciAqJXNfYXR0cmlidXRlc1tdID0geyIgJSBuYW1lLCAwKQorICAgICAgICAgICAgZm9yIGEgaW4gcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgICAgIHNlbGYuZW1pdCgnIiVzIiwnICUgYS5uYW1lLCAxKQorICAgICAgICAgICAgc2VsZi5lbWl0KCJ9OyIsIDApCiAgICAgICAgIGlmIHByb2QuZmllbGRzOgogICAgICAgICAgICAgZm9yIGYgaW4gcHJvZC5maWVsZHM6CiAgICAgICAgICAgICAgICAgc2VsZi5lbWl0X2lkZW50aWZpZXIoZi5uYW1lKQpAQCAtODE5LDYgKzgzNSw3IEBACiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopbyk7CiAgICAgcmV0dXJuIChQeU9iamVjdCopbzsKIH0KKyNkZWZpbmUgYXN0Mm9ial9zaW5nbGV0b24gYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9pZGVudGlmaWVyIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfc3RyaW5nIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfYnl0ZXMgYXN0Mm9ial9vYmplY3QKQEAgLTgzMCw2ICs4NDcsMTcgQEAKIAogLyogQ29udmVyc2lvbiBQeXRob24gLT4gQVNUICovCiAKK3N0YXRpYyBpbnQgb2JqMmFzdF9zaW5nbGV0b24oUHlPYmplY3QgKm9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQoreworICAgIGlmIChvYmogIT0gUHlfTm9uZSAmJiBvYmogIT0gUHlfVHJ1ZSAmJiBvYmogIT0gUHlfRmFsc2UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQVNUIHNpbmdsZXRvbiBtdXN0IGJlIFRydWUsIEZhbHNlLCBvciBOb25lIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAqb3V0ID0gb2JqOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9iajJhc3Rfb2JqZWN0KFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKIHsKICAgICBpZiAob2JqID09IFB5X05vbmUpCkBAIC05MDQsNiArOTMyLDE5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXhpc3RzX25vdF9ub25lKFB5T2JqZWN0ICpvYmosIF9QeV9JZGVudGlmaWVyICppZCkKK3sKKyAgICBpbnQgaXNub25lOworICAgIFB5T2JqZWN0ICphdHRyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosIGlkKTsKKyAgICBpZiAoIWF0dHIpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlzbm9uZSA9IGF0dHIgPT0gUHlfTm9uZTsKKyAgICBQeV9ERUNSRUYoYXR0cik7CisgICAgcmV0dXJuICFpc25vbmU7Cit9CisKICIiIiwgMCwgcmVmbG93PUZhbHNlKQogCiAgICAgICAgIHNlbGYuZW1pdCgic3RhdGljIGludCBpbml0X3R5cGVzKHZvaWQpIiwwKQpAQCAtOTI1LDYgKzk2NiwxMSBAQAogICAgICAgICBzZWxmLmVtaXQoJyVzX3R5cGUgPSBtYWtlX3R5cGUoIiVzIiwgJkFTVF90eXBlLCAlcywgJWQpOycgJQogICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIG5hbWUsIGZpZWxkcywgbGVuKHByb2QuZmllbGRzKSksIDEpCiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCElc190eXBlKSByZXR1cm4gMDsiICUgbmFtZSwgMSkKKyAgICAgICAgaWYgcHJvZC5hdHRyaWJ1dGVzOgorICAgICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIWFkZF9hdHRyaWJ1dGVzKCVzX3R5cGUsICVzX2F0dHJpYnV0ZXMsICVkKSkgcmV0dXJuIDA7IiAlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5hbWUsIG5hbWUsIGxlbihwcm9kLmF0dHJpYnV0ZXMpKSwgMSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFhZGRfYXR0cmlidXRlcyglc190eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7IiAlIG5hbWUsIDEpCiAKICAgICBkZWYgdmlzaXRTdW0oc2VsZiwgc3VtLCBuYW1lKToKICAgICAgICAgc2VsZi5lbWl0KCclc190eXBlID0gbWFrZV90eXBlKCIlcyIsICZBU1RfdHlwZSwgTlVMTCwgMCk7JyAlCkBAIC05NjgsNyArMTAxNCw3IEBACiAgICAgICAgIHNlbGYuZW1pdCgiaWYgKCFtKSByZXR1cm4gTlVMTDsiLCAxKQogICAgICAgICBzZWxmLmVtaXQoImQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOyIsIDEpCiAgICAgICAgIHNlbGYuZW1pdCgnaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJBU1QiLCAoUHlPYmplY3QqKSZBU1RfdHlwZSkgPCAwKSByZXR1cm4gTlVMTDsnLCAxKQotICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlDRl9PTkxZX0FTVCIsIFB5Q0ZfT05MWV9BU1QpIDwgMCknLCAxKQorICAgICAgICBzZWxmLmVtaXQoJ2lmIChQeU1vZHVsZV9BZGRJbnRNYWNybyhtLCBQeUNGX09OTFlfQVNUKSA8IDApJywgMSkKICAgICAgICAgc2VsZi5lbWl0KCJyZXR1cm4gTlVMTDsiLCAyKQogICAgICAgICBmb3IgZGZuIGluIG1vZC5kZm5zOgogICAgICAgICAgICAgc2VsZi52aXNpdChkZm4pCkBAIC0xMDgwLDYgKzExMjYsMTIgQEAKICAgICAgICAgc2VsZi5lbWl0KCJpZiAoIXJlc3VsdCkgcmV0dXJuIE5VTEw7IiwgMSkKICAgICAgICAgZm9yIGZpZWxkIGluIHByb2QuZmllbGRzOgogICAgICAgICAgICAgc2VsZi52aXNpdEZpZWxkKGZpZWxkLCBuYW1lLCAxLCBUcnVlKQorICAgICAgICBmb3IgYSBpbiBwcm9kLmF0dHJpYnV0ZXM6CisgICAgICAgICAgICBzZWxmLmVtaXQoInZhbHVlID0gYXN0Mm9ial8lcyhvLT4lcyk7IiAlIChhLnR5cGUsIGEubmFtZSksIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoImlmICghdmFsdWUpIGdvdG8gZmFpbGVkOyIsIDEpCisgICAgICAgICAgICBzZWxmLmVtaXQoJ2lmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfJXMsIHZhbHVlKSA8IDApJyAlIGEubmFtZSwgMSkKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnZ290byBmYWlsZWQ7JywgMikKKyAgICAgICAgICAgIHNlbGYuZW1pdCgnUHlfREVDUkVGKHZhbHVlKTsnLCAxKQogICAgICAgICBzZWxmLmZ1bmNfZW5kKCkKIAogICAgIGRlZiB2aXNpdENvbnN0cnVjdG9yKHNlbGYsIGNvbnMsIGVudW0sIG5hbWUpOgpAQCAtMTE0Miw3ICsxMTk0LDggQEAKICAgICBDT0RFID0gIiIiCiBQeU9iamVjdCogUHlBU1RfbW9kMm9iaihtb2RfdHkgdCkKIHsKLSAgICBpbml0X3R5cGVzKCk7CisgICAgaWYgKCFpbml0X3R5cGVzKCkpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiBhc3Qyb2JqX21vZCh0KTsKIH0KIApAQCAtMTE2MCw3ICsxMjEzLDggQEAKIAogICAgIGFzc2VydCgwIDw9IG1vZGUgJiYgbW9kZSA8PSAyKTsKIAotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpc2luc3RhbmNlID0gUHlPYmplY3RfSXNJbnN0YW5jZShhc3QsIHJlcV90eXBlW21vZGVdKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkKQEAgLTExNzgsNyArMTIzMiw4IEBACiAKIGludCBQeUFTVF9DaGVjayhQeU9iamVjdCogb2JqKQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIC0xOwogICAgIHJldHVybiBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KikmQVNUX3R5cGUpOwogfQogIiIiCmRpZmYgLS1naXQgYS9QYXJzZXIvZ3JhbW1hci5jIGIvUGFyc2VyL2dyYW1tYXIuYwppbmRleCBmMmEyNWNhLi5iNTk4Mjk0IDEwMDY0NAotLS0gYS9QYXJzZXIvZ3JhbW1hci5jCisrKyBiL1BhcnNlci9ncmFtbWFyLmMKQEAgLTI5LDcgKzI5LDcgQEAKIH0KIAogZGZhICoKLWFkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY2hhciAqbmFtZSkKK2FkZGRmYShncmFtbWFyICpnLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKICAgICBkZmEgKmQ7CiAKQEAgLTYzLDcgKzYzLDcgQEAKICAgICBzLT5zX3VwcGVyID0gMDsKICAgICBzLT5zX2FjY2VsID0gTlVMTDsKICAgICBzLT5zX2FjY2VwdCA9IDA7Ci0gICAgcmV0dXJuIHMgLSBkLT5kX3N0YXRlOworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKHMgLSBkLT5kX3N0YXRlLCBQeV9pbnRwdHJfdCwgaW50KTsKIH0KIAogdm9pZApAQCAtODUsNyArODUsNyBAQAogfQogCiBpbnQKLWFkZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjaGFyICpzdHIpCithZGRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqc3RyKQogewogICAgIGludCBpOwogICAgIGxhYmVsICpsYjsKQEAgLTEwNSwxMyArMTA1LDEzIEBACiAgICAgaWYgKFB5X0RlYnVnRmxhZykKICAgICAgICAgcHJpbnRmKCJMYWJlbCBAICU4cCwgJWQ6ICVzXG4iLCBsbCwgbGwtPmxsX25sYWJlbHMsCiAgICAgICAgICAgICAgICBQeUdyYW1tYXJfTGFiZWxSZXByKGxiKSk7Ci0gICAgcmV0dXJuIGxiIC0gbGwtPmxsX2xhYmVsOworICAgIHJldHVybiBQeV9TQUZFX0RPV05DQVNUKGxiIC0gbGwtPmxsX2xhYmVsLCBQeV9pbnRwdHJfdCwgaW50KTsKIH0KIAogLyogU2FtZSwgYnV0IHJhdGhlciBkaWVzIHRoYW4gYWRkcyAqLwogCiBpbnQKLWZpbmRsYWJlbChsYWJlbGxpc3QgKmxsLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorZmluZGxhYmVsKGxhYmVsbGlzdCAqbGwsIGludCB0eXBlLCBjb25zdCBjaGFyICpzdHIpCiB7CiAgICAgaW50IGk7CiAKZGlmZiAtLWdpdCBhL1BhcnNlci9ncmFtbWFyMS5jIGIvUGFyc2VyL2dyYW1tYXIxLmMKaW5kZXggNDQwYmE0NC4uMzBhNmYwNyAxMDA2NDQKLS0tIGEvUGFyc2VyL2dyYW1tYXIxLmMKKysrIGIvUGFyc2VyL2dyYW1tYXIxLmMKQEAgLTksOSArOSw5IEBACiAvKiBSZXR1cm4gdGhlIERGQSBmb3IgdGhlIGdpdmVuIHR5cGUgKi8KIAogZGZhICoKLVB5R3JhbW1hcl9GaW5kREZBKGdyYW1tYXIgKmcsIHJlZ2lzdGVyIGludCB0eXBlKQorUHlHcmFtbWFyX0ZpbmRERkEoZ3JhbW1hciAqZywgaW50IHR5cGUpCiB7Ci0gICAgcmVnaXN0ZXIgZGZhICpkOworICAgIGRmYSAqZDsKICNpZiAxCiAgICAgLyogTWFzc2l2ZSBzcGVlZC11cCAqLwogICAgIGQgPSAmZy0+Z19kZmFbdHlwZSAtIE5UX09GRlNFVF07CkBAIC0xOSw3ICsxOSw3IEBACiAgICAgcmV0dXJuIGQ7CiAjZWxzZQogICAgIC8qIE9sZCwgc2xvdyB2ZXJzaW9uICovCi0gICAgcmVnaXN0ZXIgaW50IGk7CisgICAgaW50IGk7CiAKICAgICBmb3IgKGkgPSBnLT5nX25kZmFzLCBkID0gZy0+Z19kZmE7IC0taSA+PSAwOyBkKyspIHsKICAgICAgICAgaWYgKGQtPmRfdHlwZSA9PSB0eXBlKQpAQCAtMzAsNyArMzAsNyBAQAogI2VuZGlmCiB9CiAKLWNoYXIgKgorY29uc3QgY2hhciAqCiBQeUdyYW1tYXJfTGFiZWxSZXByKGxhYmVsICpsYikKIHsKICAgICBzdGF0aWMgY2hhciBidWZbMTAwXTsKZGlmZiAtLWdpdCBhL1BhcnNlci9teXJlYWRsaW5lLmMgYi9QYXJzZXIvbXlyZWFkbGluZS5jCmluZGV4IDlmMWZjMWUuLjI4YzdiNmQgMTAwNjQ0Ci0tLSBhL1BhcnNlci9teXJlYWRsaW5lLmMKKysrIGIvUGFyc2VyL215cmVhZGxpbmUuYwpAQCAtMTUsMTAgKzE1LDYgQEAKICNpbmNsdWRlICJ3aW5kb3dzLmgiCiAjZW5kaWYgLyogTVNfV0lORE9XUyAqLwogCi0jaWZkZWYgX19WTVMKLWV4dGVybiBjaGFyKiB2bXNfX1N0ZGlvUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjaGFyICpwcm9tcHQpOwotI2VuZGlmCi0KIAogUHlUaHJlYWRTdGF0ZSogX1B5T1NfUmVhZGxpbmVUU3RhdGU7CiAKQEAgLTY4LDcgKzY0LDcgQEAKICAgICAgICAgKi8KICAgICAgICAgaWYgKEdldExhc3RFcnJvcigpPT1FUlJPUl9PUEVSQVRJT05fQUJPUlRFRCkgewogICAgICAgICAgICAgaEludGVycnVwdEV2ZW50ID0gX1B5T1NfU2lnaW50RXZlbnQoKTsKLSAgICAgICAgICAgIHN3aXRjaCAoV2FpdEZvclNpbmdsZU9iamVjdChoSW50ZXJydXB0RXZlbnQsIDEwKSkgeworICAgICAgICAgICAgc3dpdGNoIChXYWl0Rm9yU2luZ2xlT2JqZWN0RXgoaEludGVycnVwdEV2ZW50LCAxMCwgRkFMU0UpKSB7CiAgICAgICAgICAgICBjYXNlIFdBSVRfT0JKRUNUXzA6CiAgICAgICAgICAgICAgICAgUmVzZXRFdmVudChoSW50ZXJydXB0RXZlbnQpOwogICAgICAgICAgICAgICAgIHJldHVybiAxOyAvKiBJbnRlcnJ1cHQgKi8KQEAgLTEwOSwyMiArMTA1LDI2IEBACiAvKiBSZWFkbGluZSBpbXBsZW1lbnRhdGlvbiB1c2luZyBmZ2V0cygpICovCiAKIGNoYXIgKgotUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY2hhciAqcHJvbXB0KQorUHlPU19TdGRpb1JlYWRsaW5lKEZJTEUgKnN5c19zdGRpbiwgRklMRSAqc3lzX3N0ZG91dCwgY29uc3QgY2hhciAqcHJvbXB0KQogewogICAgIHNpemVfdCBuOwogICAgIGNoYXIgKnAsICpwcjsKKwogICAgIG4gPSAxMDA7Ci0gICAgaWYgKChwID0gKGNoYXIgKilQeU1lbV9NQUxMT0MobikpID09IE5VTEwpCisgICAgcCA9IChjaGFyICopUHlNZW1fUmF3TWFsbG9jKG4pOworICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworCiAgICAgZmZsdXNoKHN5c19zdGRvdXQpOwogICAgIGlmIChwcm9tcHQpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXMiLCBwcm9tcHQpOwogICAgIGZmbHVzaChzdGRlcnIpOworCiAgICAgc3dpdGNoIChteV9mZ2V0cyhwLCAoaW50KW4sIHN5c19zdGRpbikpIHsKICAgICBjYXNlIDA6IC8qIE5vcm1hbCBjYXNlICovCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMTogLyogSW50ZXJydXB0ICovCi0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGNhc2UgLTE6IC8qIEVPRiAqLwogICAgIGNhc2UgLTI6IC8qIEVycm9yICovCkBAIC0xMzYsMTMgKzEzNiwxMyBAQAogICAgIHdoaWxlIChuID4gMCAmJiBwW24tMV0gIT0gJ1xuJykgewogICAgICAgICBzaXplX3QgaW5jciA9IG4rMjsKICAgICAgICAgaWYgKGluY3IgPiBJTlRfTUFYKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19PdmVyZmxvd0Vycm9yLCAiaW5wdXQgbGluZSB0b28gbG9uZyIpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbiArIGluY3IpOworICAgICAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuICsgaW5jcik7CiAgICAgICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBQeU1lbV9GUkVFKHApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQpAQCAtMTUxLDkgKzE1MSw5IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbiArPSBzdHJsZW4ocCtuKTsKICAgICB9Ci0gICAgcHIgPSAoY2hhciAqKVB5TWVtX1JFQUxMT0MocCwgbisxKTsKKyAgICBwciA9IChjaGFyICopUHlNZW1fUmF3UmVhbGxvYyhwLCBuKzEpOwogICAgIGlmIChwciA9PSBOVUxMKSB7Ci0gICAgICAgIFB5TWVtX0ZSRUUocCk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocCk7CiAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTE2NiwxNSArMTY2LDE2IEBACiAKICAgIE5vdGU6IFB5dGhvbiBleHBlY3RzIGluIHJldHVybiBhIGJ1ZmZlciBhbGxvY2F0ZWQgd2l0aCBQeU1lbV9NYWxsb2MuICovCiAKLWNoYXIgKigqUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlcikoRklMRSAqLCBGSUxFICosIGNoYXIgKik7CitjaGFyICooKlB5T1NfUmVhZGxpbmVGdW5jdGlvblBvaW50ZXIpKEZJTEUgKiwgRklMRSAqLCBjb25zdCBjaGFyICopOwogCiAKIC8qIEludGVyZmFjZSB1c2VkIGJ5IHRva2VuaXplci5jIGFuZCBibHRpbm1vZHVsZS5jICovCiAKIGNoYXIgKgotUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7Ci0gICAgY2hhciAqcnY7CisgICAgY2hhciAqcnYsICpyZXM7CisgICAgc2l6ZV90IGxlbjsKIAogICAgIGlmIChfUHlPU19SZWFkbGluZVRTdGF0ZSA9PSBQeVRocmVhZFN0YXRlX0dFVCgpKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCkBAIC0xODQsMTEgKzE4NSw3IEBACiAKIAogICAgIGlmIChQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyID09IE5VTEwpIHsKLSNpZmRlZiBfX1ZNUwotICAgICAgICBQeU9TX1JlYWRsaW5lRnVuY3Rpb25Qb2ludGVyID0gdm1zX19TdGRpb1JlYWRsaW5lOwotI2Vsc2UKICAgICAgICAgUHlPU19SZWFkbGluZUZ1bmN0aW9uUG9pbnRlciA9IFB5T1NfU3RkaW9SZWFkbGluZTsKLSNlbmRpZgogICAgIH0KIAogI2lmZGVmIFdJVEhfVEhSRUFECkBAIC0yMjEsNSArMjE4LDE0IEBACiAKICAgICBfUHlPU19SZWFkbGluZVRTdGF0ZSA9IE5VTEw7CiAKLSAgICByZXR1cm4gcnY7CisgICAgaWYgKHJ2ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbGVuID0gc3RybGVuKHJ2KSArIDE7CisgICAgcmVzID0gUHlNZW1fTWFsbG9jKGxlbik7CisgICAgaWYgKHJlcyAhPSBOVUxMKQorICAgICAgICBtZW1jcHkocmVzLCBydiwgbGVuKTsKKyAgICBQeU1lbV9SYXdGcmVlKHJ2KTsKKworICAgIHJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS9QYXJzZXIvbm9kZS5jIGIvUGFyc2VyL25vZGUuYwppbmRleCAxZTRmMGRhLi41NjRiZDkxIDEwMDY0NAotLS0gYS9QYXJzZXIvbm9kZS5jCisrKyBiL1BhcnNlci9ub2RlLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogCiBpbnQKLVB5Tm9kZV9BZGRDaGlsZChyZWdpc3RlciBub2RlICpuMSwgaW50IHR5cGUsIGNoYXIgKnN0ciwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCitQeU5vZGVfQWRkQ2hpbGQobm9kZSAqbjEsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQogewogICAgIGNvbnN0IGludCBuY2ggPSBuMS0+bl9uY2hpbGRyZW47CiAgICAgaW50IGN1cnJlbnRfY2FwYWNpdHk7CkBAIC05MSw3ICs5MSw3IEBACiAgICAgaWYgKGN1cnJlbnRfY2FwYWNpdHkgPCAwIHx8IHJlcXVpcmVkX2NhcGFjaXR5IDwgMCkKICAgICAgICAgcmV0dXJuIEVfT1ZFUkZMT1c7CiAgICAgaWYgKGN1cnJlbnRfY2FwYWNpdHkgPCByZXF1aXJlZF9jYXBhY2l0eSkgewotICAgICAgICBpZiAocmVxdWlyZWRfY2FwYWNpdHkgPiBQWV9TSVpFX01BWCAvIHNpemVvZihub2RlKSkgeworICAgICAgICBpZiAoKHNpemVfdClyZXF1aXJlZF9jYXBhY2l0eSA+IFBZX1NJWkVfTUFYIC8gc2l6ZW9mKG5vZGUpKSB7CiAgICAgICAgICAgICByZXR1cm4gRV9OT01FTTsKICAgICAgICAgfQogICAgICAgICBuID0gbjEtPm5fY2hpbGQ7CmRpZmYgLS1naXQgYS9QYXJzZXIvcGFyc2VyLmMgYi9QYXJzZXIvcGFyc2VyLmMKaW5kZXggYjUwNWZlMC4uNTZlYzUxNCAxMDA2NDQKLS0tIGEvUGFyc2VyL3BhcnNlci5jCisrKyBiL1BhcnNlci9wYXJzZXIuYwpAQCAtMzUsOSArMzUsOSBAQAogI2RlZmluZSBzX2VtcHR5KHMpICgocyktPnNfdG9wID09ICYocyktPnNfYmFzZVtNQVhTVEFDS10pCiAKIHN0YXRpYyBpbnQKLXNfcHVzaChyZWdpc3RlciBzdGFjayAqcywgZGZhICpkLCBub2RlICpwYXJlbnQpCitzX3B1c2goc3RhY2sgKnMsIGRmYSAqZCwgbm9kZSAqcGFyZW50KQogewotICAgIHJlZ2lzdGVyIHN0YWNrZW50cnkgKnRvcDsKKyAgICBzdGFja2VudHJ5ICp0b3A7CiAgICAgaWYgKHMtPnNfdG9wID09IHMtPnNfYmFzZSkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNfcHVzaDogcGFyc2VyIHN0YWNrIG92ZXJmbG93XG4iKTsKICAgICAgICAgcmV0dXJuIEVfTk9NRU07CkBAIC01Miw3ICs1Miw3IEBACiAjaWZkZWYgUHlfREVCVUcKIAogc3RhdGljIHZvaWQKLXNfcG9wKHJlZ2lzdGVyIHN0YWNrICpzKQorc19wb3Aoc3RhY2sgKnMpCiB7CiAgICAgaWYgKHNfZW1wdHkocykpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoInNfcG9wOiBwYXJzZXIgc3RhY2sgdW5kZXJmbG93IC0tIEZBVEFMIik7CkBAIC0xMDUsNyArMTA1LDcgQEAKIC8qIFBBUlNFUiBTVEFDSyBPUEVSQVRJT05TICovCiAKIHN0YXRpYyBpbnQKLXNoaWZ0KHJlZ2lzdGVyIHN0YWNrICpzLCBpbnQgdHlwZSwgY2hhciAqc3RyLCBpbnQgbmV3c3RhdGUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorc2hpZnQoc3RhY2sgKnMsIGludCB0eXBlLCBjaGFyICpzdHIsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwpAQCAtMTE3LDEwICsxMTcsMTAgQEAKIH0KIAogc3RhdGljIGludAotcHVzaChyZWdpc3RlciBzdGFjayAqcywgaW50IHR5cGUsIGRmYSAqZCwgaW50IG5ld3N0YXRlLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKK3B1c2goc3RhY2sgKnMsIGludCB0eXBlLCBkZmEgKmQsIGludCBuZXdzdGF0ZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCiB7CiAgICAgaW50IGVycjsKLSAgICByZWdpc3RlciBub2RlICpuOworICAgIG5vZGUgKm47CiAgICAgbiA9IHMtPnNfdG9wLT5zX3BhcmVudDsKICAgICBhc3NlcnQoIXNfZW1wdHkocykpOwogICAgIGVyciA9IFB5Tm9kZV9BZGRDaGlsZChuLCB0eXBlLCAoY2hhciAqKU5VTEwsIGxpbmVubywgY29sX29mZnNldCk7CkBAIC0xMzQsMTUgKzEzNCwxNSBAQAogLyogUEFSU0VSIFBST1BFUiAqLwogCiBzdGF0aWMgaW50Ci1jbGFzc2lmeShwYXJzZXJfc3RhdGUgKnBzLCBpbnQgdHlwZSwgY2hhciAqc3RyKQorY2xhc3NpZnkocGFyc2VyX3N0YXRlICpwcywgaW50IHR5cGUsIGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBncmFtbWFyICpnID0gcHMtPnBfZ3JhbW1hcjsKLSAgICByZWdpc3RlciBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKKyAgICBpbnQgbiA9IGctPmdfbGwubGxfbmxhYmVsczsKIAogICAgIGlmICh0eXBlID09IE5BTUUpIHsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciAqcyA9IHN0cjsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgY29uc3QgY2hhciAqcyA9IHN0cjsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSAhPSBOQU1FIHx8IGwtPmxiX3N0ciA9PSBOVUxMIHx8CiAgICAgICAgICAgICAgICAgbC0+bGJfc3RyWzBdICE9IHNbMF0gfHwKQEAgLTE2NSw4ICsxNjUsOCBAQAogICAgIH0KIAogICAgIHsKLSAgICAgICAgcmVnaXN0ZXIgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOwotICAgICAgICByZWdpc3RlciBpbnQgaTsKKyAgICAgICAgbGFiZWwgKmwgPSBnLT5nX2xsLmxsX2xhYmVsOworICAgICAgICBpbnQgaTsKICAgICAgICAgZm9yIChpID0gbjsgaSA+IDA7IGktLSwgbCsrKSB7CiAgICAgICAgICAgICBpZiAobC0+bGJfdHlwZSA9PSB0eXBlICYmIGwtPmxiX3N0ciA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgRChwcmludGYoIkl0J3MgYSB0b2tlbiB3ZSBrbm93XG4iKSk7CkBAIC0yMjUsMTAgKzIyNSwxMCBAQAogI2VuZGlmIC8qIGZ1dHVyZSBrZXl3b3JkICovCiAKIGludAotUHlQYXJzZXJfQWRkVG9rZW4ocmVnaXN0ZXIgcGFyc2VyX3N0YXRlICpwcywgcmVnaXN0ZXIgaW50IHR5cGUsIGNoYXIgKnN0ciwKK1B5UGFyc2VyX0FkZFRva2VuKHBhcnNlcl9zdGF0ZSAqcHMsIGludCB0eXBlLCBjaGFyICpzdHIsCiAgICAgICAgICAgICAgICAgICBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgaW50ICpleHBlY3RlZF9yZXQpCiB7Ci0gICAgcmVnaXN0ZXIgaW50IGlsYWJlbDsKKyAgICBpbnQgaWxhYmVsOwogICAgIGludCBlcnI7CiAKICAgICBEKHByaW50ZigiVG9rZW4gJXMvJyVzJyAuLi4gIiwgX1B5UGFyc2VyX1Rva2VuTmFtZXNbdHlwZV0sIHN0cikpOwpAQCAtMjQxLDE1ICsyNDEsMTUgQEAKICAgICAvKiBMb29wIHVudGlsIHRoZSB0b2tlbiBpcyBzaGlmdGVkIG9yIGFuIGVycm9yIG9jY3VycmVkICovCiAgICAgZm9yICg7OykgewogICAgICAgICAvKiBGZXRjaCB0aGUgY3VycmVudCBkZmEgYW5kIHN0YXRlICovCi0gICAgICAgIHJlZ2lzdGVyIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKLSAgICAgICAgcmVnaXN0ZXIgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CisgICAgICAgIGRmYSAqZCA9IHBzLT5wX3N0YWNrLnNfdG9wLT5zX2RmYTsKKyAgICAgICAgc3RhdGUgKnMgPSAmZC0+ZF9zdGF0ZVtwcy0+cF9zdGFjay5zX3RvcC0+c19zdGF0ZV07CiAKICAgICAgICAgRChwcmludGYoIiBERkEgJyVzJywgc3RhdGUgJWQ6IiwKICAgICAgICAgICAgIGQtPmRfbmFtZSwgcHMtPnBfc3RhY2suc190b3AtPnNfc3RhdGUpKTsKIAogICAgICAgICAvKiBDaGVjayBhY2NlbGVyYXRvciAqLwogICAgICAgICBpZiAocy0+c19sb3dlciA8PSBpbGFiZWwgJiYgaWxhYmVsIDwgcy0+c191cHBlcikgewotICAgICAgICAgICAgcmVnaXN0ZXIgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOworICAgICAgICAgICAgaW50IHggPSBzLT5zX2FjY2VsW2lsYWJlbCAtIHMtPnNfbG93ZXJdOwogICAgICAgICAgICAgaWYgKHggIT0gLTEpIHsKICAgICAgICAgICAgICAgICBpZiAoeCAmICgxPDw3KSkgewogICAgICAgICAgICAgICAgICAgICAvKiBQdXNoIG5vbi10ZXJtaW5hbCAqLwpkaWZmIC0tZ2l0IGEvUGFyc2VyL3BhcnNldG9rLmMgYi9QYXJzZXIvcGFyc2V0b2suYwppbmRleCA3YmViNzM1Li42MjlkZWU1IDEwMDY0NAotLS0gYS9QYXJzZXIvcGFyc2V0b2suYworKysgYi9QYXJzZXIvcGFyc2V0b2suYwpAQCAtMTMsNyArMTMsNyBAQAogCiAvKiBGb3J3YXJkICovCiBzdGF0aWMgbm9kZSAqcGFyc2V0b2soc3RydWN0IHRva19zdGF0ZSAqLCBncmFtbWFyICosIGludCwgcGVycmRldGFpbCAqLCBpbnQgKik7Ci1zdGF0aWMgaW50IGluaXRlcnIocGVycmRldGFpbCAqZXJyX3JldCwgY29uc3QgY2hhciogZmlsZW5hbWUpOworc3RhdGljIGludCBpbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIFB5T2JqZWN0ICogZmlsZW5hbWUpOwogCiAvKiBQYXJzZSBpbnB1dCBjb21pbmcgZnJvbSBhIHN0cmluZy4gIFJldHVybiBlcnJvciBjb2RlLCBwcmludCBzb21lIGVycm9ycy4gKi8KIG5vZGUgKgpAQCAtNDEsOSArNDEsOSBAQAogfQogCiBub2RlICoKLVB5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCitQeVBhcnNlcl9QYXJzZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzLCBQeU9iamVjdCAqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQogewogICAgIHN0cnVjdCB0b2tfc3RhdGUgKnRvazsKICAgICBpbnQgZXhlY19pbnB1dCA9IHN0YXJ0ID09IGZpbGVfaW5wdXQ7CkBAIC02NywxMSArNjcsMzUgQEAKICAgICByZXR1cm4gcGFyc2V0b2sodG9rLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOwogfQogCitub2RlICoKK1B5UGFyc2VyX1BhcnNlU3RyaW5nRmxhZ3NGaWxlbmFtZUV4KGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVuYW1lID0gTlVMTDsKKyNpZm5kZWYgUEdFTgorICAgIGlmIChmaWxlbmFtZV9zdHIgIT0gTlVMTCkgeworICAgICAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLCBnLCBzdGFydCwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlbmFtZSk7CisjZW5kaWYKKyAgICByZXR1cm4gbjsKK30KKwogLyogUGFyc2UgaW5wdXQgY29taW5nIGZyb20gYSBmaWxlLiAgUmV0dXJuIGVycm9yIGNvZGUsIHByaW50IHNvbWUgZXJyb3JzLiAqLwogCiBub2RlICoKIFB5UGFyc2VyX1BhcnNlRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0KQogewogICAgIHJldHVybiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhmcCwgZmlsZW5hbWUsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGcsIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgMCk7CkBAIC04MCw3ICsxMDQsOCBAQAogbm9kZSAqCiBQeVBhcnNlcl9QYXJzZUZpbGVGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmVuYywKICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXIgKmcsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMSwgY2hhciAqcHMyLCBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwczEsIGNvbnN0IGNoYXIgKnBzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCBmbGFncykKIHsKICAgICBpbnQgaWZsYWdzID0gZmxhZ3M7CiAgICAgcmV0dXJuIFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoZnAsIGZpbGVuYW1lLCBlbmMsIGcsIHN0YXJ0LCBwczEsCkBAIC04OCwxNiArMTEzLDE3IEBACiB9CiAKIG5vZGUgKgotUHlQYXJzZXJfUGFyc2VGaWxlRmxhZ3NFeChGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczEsIGNoYXIgKnBzMiwgcGVycmRldGFpbCAqZXJyX3JldCwgaW50ICpmbGFncykKK1B5UGFyc2VyX1BhcnNlRmlsZU9iamVjdChGSUxFICpmcCwgUHlPYmplY3QgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuYywgZ3JhbW1hciAqZywgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnJkZXRhaWwgKmVycl9yZXQsIGludCAqZmxhZ3MpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rOwogCiAgICAgaWYgKGluaXRlcnIoZXJyX3JldCwgZmlsZW5hbWUpIDwgMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoKHRvayA9IFB5VG9rZW5pemVyX0Zyb21GaWxlKGZwLCAoY2hhciAqKWVuYywgcHMxLCBwczIpKSA9PSBOVUxMKSB7CisgICAgaWYgKCh0b2sgPSBQeVRva2VuaXplcl9Gcm9tRmlsZShmcCwgZW5jLCBwczEsIHBzMikpID09IE5VTEwpIHsKICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX05PTUVNOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CkBAIC0xMDgsNiArMTM0LDMxIEBACiAgICAgcmV0dXJuIHBhcnNldG9rKHRvaywgZywgc3RhcnQsIGVycl9yZXQsIGZsYWdzKTsKIH0KIAorbm9kZSAqCitQeVBhcnNlcl9QYXJzZUZpbGVGbGFnc0V4KEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZW5jLCBncmFtbWFyICpnLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBzMSwgY29uc3QgY2hhciAqcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJyZGV0YWlsICplcnJfcmV0LCBpbnQgKmZsYWdzKQoreworICAgIG5vZGUgKm47CisgICAgUHlPYmplY3QgKmZpbGVvYmogPSBOVUxMOworI2lmbmRlZiBQR0VOCisgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW9iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgICAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKSB7CisgICAgICAgICAgICBlcnJfcmV0LT5lcnJvciA9IEVfRVJST1I7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIG4gPSBQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoZnAsIGZpbGVvYmosIGVuYywgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0LCBwczEsIHBzMiwgZXJyX3JldCwgZmxhZ3MpOworI2lmbmRlZiBQR0VOCisgICAgUHlfWERFQ1JFRihmaWxlb2JqKTsKKyNlbmRpZgorICAgIHJldHVybiBuOworfQorCiAjaWZkZWYgUFlfUEFSU0VSX1JFUVVJUkVTX0ZVVFVSRV9LRVlXT1JECiAjaWYgMAogc3RhdGljIGNoYXIgd2l0aF9tc2dbXSA9CkBAIC0xMzgsNyArMTg5LDYgQEAKICAgICBpbnQgc3RhcnRlZCA9IDA7CiAKICAgICBpZiAoKHBzID0gUHlQYXJzZXJfTmV3KGcsIHN0YXJ0KSkgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm5vIG1lbSBmb3IgbmV3IHBhcnNlclxuIik7CiAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgUHlUb2tlbml6ZXJfRnJlZSh0b2spOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3OCw3ICsyMjgsNiBAQAogICAgICAgICBsZW4gPSBiIC0gYTsgLyogWFhYIHRoaXMgbWF5IGNvbXB1dGUgTlVMTCAtIE5VTEwgKi8KICAgICAgICAgc3RyID0gKGNoYXIgKikgUHlPYmplY3RfTUFMTE9DKGxlbiArIDEpOwogICAgICAgICBpZiAoc3RyID09IE5VTEwpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gbWVtIGZvciBuZXh0IHRva2VuXG4iKTsKICAgICAgICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9OT01FTTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC0yMDUsNyArMjU0LDggQEAKICAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGlmIChhID49IHRvay0+bGluZV9zdGFydCkKLSAgICAgICAgICAgIGNvbF9vZmZzZXQgPSBhIC0gdG9rLT5saW5lX3N0YXJ0OworICAgICAgICAgICAgY29sX29mZnNldCA9IFB5X1NBRkVfRE9XTkNBU1QoYSAtIHRvay0+bGluZV9zdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X2ludHB0cl90LCBpbnQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjb2xfb2Zmc2V0ID0gLTE7CiAKQEAgLTMwOCw3ICszNTgsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1pbml0ZXJyKHBlcnJkZXRhaWwgKmVycl9yZXQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoraW5pdGVycihwZXJyZGV0YWlsICplcnJfcmV0LCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX09LOwogICAgIGVycl9yZXQtPmxpbmVubyA9IDA7CkBAIC0zMTcsMTMgKzM2NywxNiBAQAogICAgIGVycl9yZXQtPnRva2VuID0gLTE7CiAgICAgZXJyX3JldC0+ZXhwZWN0ZWQgPSAtMTsKICNpZm5kZWYgUEdFTgotICAgIGlmIChmaWxlbmFtZSkKLSAgICAgICAgZXJyX3JldC0+ZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICBlbHNlCisgICAgaWYgKGZpbGVuYW1lKSB7CisgICAgICAgIFB5X0lOQ1JFRihmaWxlbmFtZSk7CisgICAgICAgIGVycl9yZXQtPmZpbGVuYW1lID0gZmlsZW5hbWU7CisgICAgfQorICAgIGVsc2UgewogICAgICAgICBlcnJfcmV0LT5maWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8c3RyaW5nPiIpOwotICAgIGlmIChlcnJfcmV0LT5maWxlbmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgIGVycl9yZXQtPmVycm9yID0gRV9FUlJPUjsKLSAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoZXJyX3JldC0+ZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyX3JldC0+ZXJyb3IgPSBFX0VSUk9SOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CiAgICAgfQogI2VuZGlmCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9QYXJzZXIvcGdlbm1haW4uYyBiL1BhcnNlci9wZ2VubWFpbi5jCmluZGV4IDUyYjgzODAuLjAxN2E0ZjkgMTAwNjQ0Ci0tLSBhL1BhcnNlci9wZ2VubWFpbi5jCisrKyBiL1BhcnNlci9wZ2VubWFpbi5jCkBAIC0xMTMsNiArMTEzLDcgQEAKICAgICAgICAgUHlfRXhpdCgxKTsKICAgICB9CiAgICAgZyA9IHBnZW4obik7CisgICAgUHlOb2RlX0ZyZWUobik7CiAgICAgaWYgKGcgPT0gTlVMTCkgewogICAgICAgICBwcmludGYoIkJhZCBncmFtbWFyLlxuIik7CiAgICAgICAgIFB5X0V4aXQoMSk7CkBAIC0xMzcsNyArMTM4LDcgQEAKIC8qIE5vLW5vbnNlbnNlIG15X3JlYWRsaW5lKCkgZm9yIHRva2VuaXplci5jICovCiAKIGNoYXIgKgotUHlPU19SZWFkbGluZShGSUxFICpzeXNfc3RkaW4sIEZJTEUgKnN5c19zdGRvdXQsIGNoYXIgKnByb21wdCkKK1B5T1NfUmVhZGxpbmUoRklMRSAqc3lzX3N0ZGluLCBGSUxFICpzeXNfc3Rkb3V0LCBjb25zdCBjaGFyICpwcm9tcHQpCiB7CiAgICAgc2l6ZV90IG4gPSAxMDAwOwogICAgIGNoYXIgKnAgPSAoY2hhciAqKVB5TWVtX01BTExPQyhuKTsKZGlmZiAtLWdpdCBhL1BhcnNlci90b2tlbml6ZXIuYyBiL1BhcnNlci90b2tlbml6ZXIuYwppbmRleCA2NjBjMGYwLi4xYThjZjQwIDEwMDY0NAotLS0gYS9QYXJzZXIvdG9rZW5pemVyLmMKKysrIGIvUGFyc2VyL3Rva2VuaXplci5jCkBAIC0zMSw3ICszMSw3IEBACiAgICAgICAgICAgICAgICB8fCBjID09ICdfJ1wKICAgICAgICAgICAgICAgIHx8IChjID49IDEyOCkpCiAKLWV4dGVybiBjaGFyICpQeU9TX1JlYWRsaW5lKEZJTEUgKiwgRklMRSAqLCBjaGFyICopOworZXh0ZXJuIGNoYXIgKlB5T1NfUmVhZGxpbmUoRklMRSAqLCBGSUxFICosIGNvbnN0IGNoYXIgKik7CiAvKiBSZXR1cm4gbWFsbG9jJ2VkIHN0cmluZyBpbmNsdWRpbmcgdHJhaWxpbmcgXG47CiAgICBlbXB0eSBtYWxsb2MnZWQgc3RyaW5nIGZvciBFT0Y7CiAgICBOVUxMIGlmIGludGVycnVwdGVkICovCkBAIC00Nyw3ICs0Nyw3IEBACiAKIC8qIFRva2VuIG5hbWVzICovCiAKLWNoYXIgKl9QeVBhcnNlcl9Ub2tlbk5hbWVzW10gPSB7Citjb25zdCBjaGFyICpfUHlQYXJzZXJfVG9rZW5OYW1lc1tdID0gewogICAgICJFTkRNQVJLRVIiLAogICAgICJOQU1FIiwKICAgICAiTlVNQkVSIiwKQEAgLTE4Nyw3ICsxODcsOCBAQAogICAgIHRvay0+ZGVjb2RpbmdfZXJyZWQgPSAxOwogICAgIGlmICh0b2stPmZwICE9IE5VTEwgJiYgdG9rLT5idWYgIT0gTlVMTCkgLyogc2VlIFB5VG9rZW5pemVyX0ZyZWUgKi8KICAgICAgICAgUHlNZW1fRlJFRSh0b2stPmJ1Zik7Ci0gICAgdG9rLT5idWYgPSBOVUxMOworICAgIHRvay0+YnVmID0gdG9rLT5jdXIgPSB0b2stPmVuZCA9IHRvay0+aW5wID0gdG9rLT5zdGFydCA9IE5VTEw7CisgICAgdG9rLT5kb25lID0gRV9ERUNPREU7CiAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgIC8qIGFzIGlmIGl0IHdlcmUgRU9GICovCiB9CiAKQEAgLTY5MSw3ICs2OTIsOCBAQAogCiBzdGF0aWMgY2hhciAqCiB0cmFuc2xhdGVfbmV3bGluZXMoY29uc3QgY2hhciAqcywgaW50IGV4ZWNfaW5wdXQsIHN0cnVjdCB0b2tfc3RhdGUgKnRvaykgewotICAgIGludCBza2lwX25leHRfbGYgPSAwLCBuZWVkZWRfbGVuZ3RoID0gc3RybGVuKHMpICsgMiwgZmluYWxfbGVuZ3RoOworICAgIGludCBza2lwX25leHRfbGYgPSAwOworICAgIHNpemVfdCBuZWVkZWRfbGVuZ3RoID0gc3RybGVuKHMpICsgMiwgZmluYWxfbGVuZ3RoOwogICAgIGNoYXIgKmJ1ZiwgKmN1cnJlbnQ7CiAgICAgY2hhciBjID0gJ1wwJzsKICAgICBidWYgPSBQeU1lbV9NQUxMT0MobmVlZGVkX2xlbmd0aCk7CkBAIC03OTksNyArODAxLDcgQEAKICAgICBzdHJ1Y3QgdG9rX3N0YXRlICp0b2sgPSB0b2tfbmV3KCk7CiAgICAgaWYgKHRvayA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBzdHIgPSAoY2hhciAqKWRlY29kZV9zdHIoc3RyLCBleGVjX2lucHV0LCB0b2spOworICAgIHN0ciA9IGRlY29kZV9zdHIoc3RyLCBleGVjX2lucHV0LCB0b2spOwogICAgIGlmIChzdHIgPT0gTlVMTCkgewogICAgICAgICBQeVRva2VuaXplcl9GcmVlKHRvayk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtODQyLDcgKzg0NCw4IEBACiAvKiBTZXQgdXAgdG9rZW5pemVyIGZvciBmaWxlICovCiAKIHN0cnVjdCB0b2tfc3RhdGUgKgotUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqZnAsIGNoYXIqIGVuYywgY2hhciAqcHMxLCBjaGFyICpwczIpCitQeVRva2VuaXplcl9Gcm9tRmlsZShGSUxFICpmcCwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcHMxLCBjb25zdCBjaGFyICpwczIpCiB7CiAgICAgc3RydWN0IHRva19zdGF0ZSAqdG9rID0gdG9rX25ldygpOwogICAgIGlmICh0b2sgPT0gTlVMTCkKQEAgLTg5Myw3ICs4OTYsNyBAQAogLyogR2V0IG5leHQgY2hhciwgdXBkYXRpbmcgc3RhdGU7IGVycm9yIGNvZGUgZ29lcyBpbnRvIHRvay0+ZG9uZSAqLwogCiBzdGF0aWMgaW50Ci10b2tfbmV4dGMocmVnaXN0ZXIgc3RydWN0IHRva19zdGF0ZSAqdG9rKQordG9rX25leHRjKHN0cnVjdCB0b2tfc3RhdGUgKnRvaykKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGlmICh0b2stPmN1ciAhPSB0b2stPmlucCkgewpAQCAtOTQxLDExICs5NDQsNiBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBidWZsZW4gPSBQeUJ5dGVzX0dFVF9TSVpFKHUpOwogICAgICAgICAgICAgICAgIGJ1ZiA9IFB5Qnl0ZXNfQVNfU1RSSU5HKHUpOwotICAgICAgICAgICAgICAgIGlmICghYnVmKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgICAgICAgICAgdG9rLT5kb25lID0gRV9ERUNPREU7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ld3RvayA9IFB5TWVtX01BTExPQyhidWZsZW4rMSk7CiAgICAgICAgICAgICAgICAgc3RyY3B5KG5ld3RvaywgYnVmKTsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CkBAIC05ODcsNyArOTg1LDYgQEAKICAgICAgICAgICAgICAgICBpZiAodG9rLT5idWYgIT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgUHlNZW1fRlJFRSh0b2stPmJ1Zik7CiAgICAgICAgICAgICAgICAgdG9rLT5idWYgPSBuZXd0b2s7Ci0gICAgICAgICAgICAgICAgdG9rLT5saW5lX3N0YXJ0ID0gdG9rLT5idWY7CiAgICAgICAgICAgICAgICAgdG9rLT5jdXIgPSB0b2stPmJ1ZjsKICAgICAgICAgICAgICAgICB0b2stPmxpbmVfc3RhcnQgPSB0b2stPmJ1ZjsKICAgICAgICAgICAgICAgICB0b2stPmlucCA9IHN0cmNocih0b2stPmJ1ZiwgJ1wwJyk7CkBAIC0xMDEwLDEzICsxMDA3LDE0IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChkZWNvZGluZ19mZ2V0cyh0b2stPmJ1ZiwgKGludCkodG9rLT5lbmQgLSB0b2stPmJ1ZiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvaykgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICB0b2stPmRvbmUgPSBFX0VPRjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF0b2stPmRlY29kaW5nX2VycmVkKQorICAgICAgICAgICAgICAgICAgICAgICAgdG9rLT5kb25lID0gRV9FT0Y7CiAgICAgICAgICAgICAgICAgICAgIGRvbmUgPSAxOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgdG9rLT5kb25lID0gRV9PSzsKICAgICAgICAgICAgICAgICAgICAgdG9rLT5pbnAgPSBzdHJjaHIodG9rLT5idWYsICdcMCcpOwotICAgICAgICAgICAgICAgICAgICBkb25lID0gdG9rLT5pbnBbLTFdID09ICdcbic7CisgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB0b2stPmlucCA9PSB0b2stPmJ1ZiB8fCB0b2stPmlucFstMV0gPT0gJ1xuJzsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTEwNDQsNiArMTA0Miw4IEBACiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFT0Y7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRvay0+YnVmID0gbmV3YnVmOworICAgICAgICAgICAgICAgIHRvay0+Y3VyID0gdG9rLT5idWYgKyBjdXI7CisgICAgICAgICAgICAgICAgdG9rLT5saW5lX3N0YXJ0ID0gdG9rLT5jdXI7CiAgICAgICAgICAgICAgICAgdG9rLT5pbnAgPSB0b2stPmJ1ZiArIGN1cnZhbGlkOwogICAgICAgICAgICAgICAgIHRvay0+ZW5kID0gdG9rLT5idWYgKyBuZXdzaXplOwogICAgICAgICAgICAgICAgIHRvay0+c3RhcnQgPSBjdXJzdGFydCA8IDAgPyBOVUxMIDoKQEAgLTEwOTAsNyArMTA5MCw3IEBACiAvKiBCYWNrLXVwIG9uZSBjaGFyYWN0ZXIgKi8KIAogc3RhdGljIHZvaWQKLXRva19iYWNrdXAocmVnaXN0ZXIgc3RydWN0IHRva19zdGF0ZSAqdG9rLCByZWdpc3RlciBpbnQgYykKK3Rva19iYWNrdXAoc3RydWN0IHRva19zdGF0ZSAqdG9rLCBpbnQgYykKIHsKICAgICBpZiAoYyAhPSBFT0YpIHsKICAgICAgICAgaWYgKC0tdG9rLT5jdXIgPCB0b2stPmJ1ZikKQEAgLTEyOTksNiArMTI5OSw4IEBACiB7CiAgICAgUHlPYmplY3QgKnM7CiAgICAgaW50IHJlc3VsdDsKKyAgICBpZiAodG9rLT5kZWNvZGluZ19lcnJlZCkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgcyA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KHRvay0+c3RhcnQsIHRvay0+Y3VyIC0gdG9rLT5zdGFydCwgTlVMTCk7CiAgICAgaWYgKHMgPT0gTlVMTCB8fCBQeVVuaWNvZGVfUkVBRFkocykgPT0gLTEpIHsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVW5pY29kZURlY29kZUVycm9yKSkgewpAQCAtMTMyMCw5ICsxMzIyLDkgQEAKIC8qIEdldCBuZXh0IHRva2VuLCBhZnRlciBzcGFjZSBzdHJpcHBpbmcgZXRjLiAqLwogCiBzdGF0aWMgaW50Ci10b2tfZ2V0KHJlZ2lzdGVyIHN0cnVjdCB0b2tfc3RhdGUgKnRvaywgY2hhciAqKnBfc3RhcnQsIGNoYXIgKipwX2VuZCkKK3Rva19nZXQoc3RydWN0IHRva19zdGF0ZSAqdG9rLCBjaGFyICoqcF9zdGFydCwgY2hhciAqKnBfZW5kKQogewotICAgIHJlZ2lzdGVyIGludCBjOworICAgIGludCBjOwogICAgIGludCBibGFua2xpbmUsIG5vbmFzY2lpOwogCiAgICAgKnBfc3RhcnQgPSAqcF9lbmQgPSBOVUxMOwpAQCAtMTMzMiw4ICsxMzM0LDggQEAKIAogICAgIC8qIEdldCBpbmRlbnRhdGlvbiBsZXZlbCAqLwogICAgIGlmICh0b2stPmF0Ym9sKSB7Ci0gICAgICAgIHJlZ2lzdGVyIGludCBjb2wgPSAwOwotICAgICAgICByZWdpc3RlciBpbnQgYWx0Y29sID0gMDsKKyAgICAgICAgaW50IGNvbCA9IDA7CisgICAgICAgIGludCBhbHRjb2wgPSAwOwogICAgICAgICB0b2stPmF0Ym9sID0gMDsKICAgICAgICAgZm9yICg7OykgewogICAgICAgICAgICAgYyA9IHRva19uZXh0Yyh0b2spOwpAQCAtMTQ2NywxMSArMTQ2OSw4IEBACiAgICAgICAgICAgICBjID0gdG9rX25leHRjKHRvayk7CiAgICAgICAgIH0KICAgICAgICAgdG9rX2JhY2t1cCh0b2ssIGMpOwotICAgICAgICBpZiAobm9uYXNjaWkgJiYKLSAgICAgICAgICAgICF2ZXJpZnlfaWRlbnRpZmllcih0b2spKSB7Ci0gICAgICAgICAgICB0b2stPmRvbmUgPSBFX0lERU5USUZJRVI7CisgICAgICAgIGlmIChub25hc2NpaSAmJiAhdmVyaWZ5X2lkZW50aWZpZXIodG9rKSkKICAgICAgICAgICAgIHJldHVybiBFUlJPUlRPS0VOOwotICAgICAgICB9CiAgICAgICAgICpwX3N0YXJ0ID0gdG9rLT5zdGFydDsKICAgICAgICAgKnBfZW5kID0gdG9rLT5jdXI7CiAgICAgICAgIHJldHVybiBOQU1FOwpAQCAtMTU5NSwxNSArMTU5NCwyNCBAQAogICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChpc2RpZ2l0KGMpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ2UnIHx8IGMgPT0gJ0UnKSB7Ci0gICAgICAgIGV4cG9uZW50OgorICAgICAgICAgICAgICAgICAgICBpbnQgZTsKKyAgICAgICAgICAgICAgICAgIGV4cG9uZW50OgorICAgICAgICAgICAgICAgICAgICBlID0gYzsKICAgICAgICAgICAgICAgICAgICAgLyogRXhwb25lbnQgcGFydCAqLwogICAgICAgICAgICAgICAgICAgICBjID0gdG9rX25leHRjKHRvayk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjID09ICcrJyB8fCBjID09ICctJykKKyAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT0gJysnIHx8IGMgPT0gJy0nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjID0gdG9rX25leHRjKHRvayk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNkaWdpdChjKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG9rLT5kb25lID0gRV9UT0tFTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNkaWdpdChjKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvay0+ZG9uZSA9IEVfVE9LRU47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rX2JhY2t1cCh0b2ssIGMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFUlJPUlRPS0VOOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpc2RpZ2l0KGMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB0b2tfYmFja3VwKHRvaywgYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1JUT0tFTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva19iYWNrdXAodG9rLCBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwX3N0YXJ0ID0gdG9rLT5zdGFydDsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwX2VuZCA9IHRvay0+Y3VyOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTUJFUjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjID0gdG9rX25leHRjKHRvayk7CkBAIC0xNzQ5LDEwICsxNzU3LDE1IEBACiAgICAgRklMRSAqZnA7CiAgICAgY2hhciAqcF9zdGFydCA9TlVMTCAsICpwX2VuZCA9TlVMTCAsICplbmNvZGluZyA9IE5VTEw7CiAKKyNpZm5kZWYgUEdFTgorICAgIGZkID0gX1B5X2R1cChmZCk7CisjZWxzZQogICAgIGZkID0gZHVwKGZkKTsKKyNlbmRpZgogICAgIGlmIChmZCA8IDApIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQorCiAgICAgZnAgPSBmZG9wZW4oZmQsICJyIik7CiAgICAgaWYgKGZwID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9QYXJzZXIvdG9rZW5pemVyLmggYi9QYXJzZXIvdG9rZW5pemVyLmgKaW5kZXggZWQxZjNhYS4uMWNlNmVlYiAxMDA2NDQKLS0tIGEvUGFyc2VyL3Rva2VuaXplci5oCisrKyBiL1BhcnNlci90b2tlbml6ZXIuaApAQCAtMzUsNyArMzUsNyBAQAogICAgIGludCBpbmRzdGFja1tNQVhJTkRFTlRdOyAgICAgICAgICAgIC8qIFN0YWNrIG9mIGluZGVudHMgKi8KICAgICBpbnQgYXRib2w7ICAgICAgICAgIC8qIE5vbnplcm8gaWYgYXQgYmVnaW4gb2YgbmV3IGxpbmUgKi8KICAgICBpbnQgcGVuZGluOyAgICAgICAgIC8qIFBlbmRpbmcgaW5kZW50cyAoaWYgPiAwKSBvciBkZWRlbnRzIChpZiA8IDApICovCi0gICAgY2hhciAqcHJvbXB0LCAqbmV4dHByb21wdDsgICAgICAgICAgLyogRm9yIGludGVyYWN0aXZlIHByb21wdGluZyAqLworICAgIGNvbnN0IGNoYXIgKnByb21wdCwgKm5leHRwcm9tcHQ7ICAgICAgICAgIC8qIEZvciBpbnRlcmFjdGl2ZSBwcm9tcHRpbmcgKi8KICAgICBpbnQgbGluZW5vOyAgICAgICAgIC8qIEN1cnJlbnQgbGluZSBudW1iZXIgKi8KICAgICBpbnQgbGV2ZWw7ICAgICAgICAgIC8qICgpIFtdIHt9IFBhcmVudGhlc2VzIG5lc3RpbmcgbGV2ZWwgKi8KICAgICAgICAgICAgIC8qIFVzZWQgdG8gYWxsb3cgZnJlZSBjb250aW51YXRpb25zIGluc2lkZSB0aGVtICovCkBAIC02OSw4ICs2OSw4IEBACiAKIGV4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tU3RyaW5nKGNvbnN0IGNoYXIgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgdG9rX3N0YXRlICpQeVRva2VuaXplcl9Gcm9tVVRGOChjb25zdCBjaGFyICosIGludCk7Ci1leHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqLCBjaGFyKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKik7CitleHRlcm4gc3RydWN0IHRva19zdGF0ZSAqUHlUb2tlbml6ZXJfRnJvbUZpbGUoRklMRSAqLCBjb25zdCBjaGFyKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gdm9pZCBQeVRva2VuaXplcl9GcmVlKHN0cnVjdCB0b2tfc3RhdGUgKik7CiBleHRlcm4gaW50IFB5VG9rZW5pemVyX0dldChzdHJ1Y3QgdG9rX3N0YXRlICosIGNoYXIgKiosIGNoYXIgKiopOwogZXh0ZXJuIGNoYXIgKiBQeVRva2VuaXplcl9SZXN0b3JlRW5jb2Rpbmcoc3RydWN0IHRva19zdGF0ZSogdG9rLApkaWZmIC0tZ2l0IGEvUHl0aG9uL1B5dGhvbi1hc3QuYyBiL1B5dGhvbi9QeXRob24tYXN0LmMKaW5kZXggODU0M2I2Ni4uNDRmZGFmYyAxMDA2NDQKLS0tIGEvUHl0aG9uL1B5dGhvbi1hc3QuYworKysgYi9QeXRob24vUHl0aG9uLWFzdC5jCkBAIC0yNzEsNiArMjcxLDEwIEBACiBzdGF0aWMgY2hhciAqQnl0ZXNfZmllbGRzW109ewogICAgICJzIiwKIH07CitzdGF0aWMgUHlUeXBlT2JqZWN0ICpOYW1lQ29uc3RhbnRfdHlwZTsKK3N0YXRpYyBjaGFyICpOYW1lQ29uc3RhbnRfZmllbGRzW109eworICAgICJ2YWx1ZSIsCit9Owogc3RhdGljIFB5VHlwZU9iamVjdCAqRWxsaXBzaXNfdHlwZTsKIHN0YXRpYyBQeVR5cGVPYmplY3QgKkF0dHJpYnV0ZV90eXBlOwogX1B5X0lERU5USUZJRVIoYXR0cik7CkBAIC00MDgsMjQgKzQxMiwyNCBAQAogc3RhdGljIFB5VHlwZU9iamVjdCAqYXJndW1lbnRzX3R5cGU7CiBzdGF0aWMgUHlPYmplY3QqIGFzdDJvYmpfYXJndW1lbnRzKHZvaWQqKTsKIF9QeV9JREVOVElGSUVSKHZhcmFyZyk7Ci1fUHlfSURFTlRJRklFUih2YXJhcmdhbm5vdGF0aW9uKTsKIF9QeV9JREVOVElGSUVSKGt3b25seWFyZ3MpOwotX1B5X0lERU5USUZJRVIoa3dhcmcpOwotX1B5X0lERU5USUZJRVIoa3dhcmdhbm5vdGF0aW9uKTsKLV9QeV9JREVOVElGSUVSKGRlZmF1bHRzKTsKIF9QeV9JREVOVElGSUVSKGt3X2RlZmF1bHRzKTsKK19QeV9JREVOVElGSUVSKGt3YXJnKTsKK19QeV9JREVOVElGSUVSKGRlZmF1bHRzKTsKIHN0YXRpYyBjaGFyICphcmd1bWVudHNfZmllbGRzW109ewogICAgICJhcmdzIiwKICAgICAidmFyYXJnIiwKLSAgICAidmFyYXJnYW5ub3RhdGlvbiIsCiAgICAgImt3b25seWFyZ3MiLAotICAgICJrd2FyZyIsCi0gICAgImt3YXJnYW5ub3RhdGlvbiIsCi0gICAgImRlZmF1bHRzIiwKICAgICAia3dfZGVmYXVsdHMiLAorICAgICJrd2FyZyIsCisgICAgImRlZmF1bHRzIiwKIH07CiBzdGF0aWMgUHlUeXBlT2JqZWN0ICphcmdfdHlwZTsKIHN0YXRpYyBQeU9iamVjdCogYXN0Mm9ial9hcmcodm9pZCopOworc3RhdGljIGNoYXIgKmFyZ19hdHRyaWJ1dGVzW10gPSB7CisgICAgImxpbmVubyIsCisgICAgImNvbF9vZmZzZXQiLAorfTsKIF9QeV9JREVOVElGSUVSKGFyZyk7CiBfUHlfSURFTlRJRklFUihhbm5vdGF0aW9uKTsKIHN0YXRpYyBjaGFyICphcmdfZmllbGRzW109ewpAQCAtNjczLDYgKzY3Nyw3IEBACiAgICAgUHlfSU5DUkVGKChQeU9iamVjdCopbyk7CiAgICAgcmV0dXJuIChQeU9iamVjdCopbzsKIH0KKyNkZWZpbmUgYXN0Mm9ial9zaW5nbGV0b24gYXN0Mm9ial9vYmplY3QKICNkZWZpbmUgYXN0Mm9ial9pZGVudGlmaWVyIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfc3RyaW5nIGFzdDJvYmpfb2JqZWN0CiAjZGVmaW5lIGFzdDJvYmpfYnl0ZXMgYXN0Mm9ial9vYmplY3QKQEAgLTY4NCw2ICs2ODksMTcgQEAKIAogLyogQ29udmVyc2lvbiBQeXRob24gLT4gQVNUICovCiAKK3N0YXRpYyBpbnQgb2JqMmFzdF9zaW5nbGV0b24oUHlPYmplY3QgKm9iaiwgUHlPYmplY3QqKiBvdXQsIFB5QXJlbmEqIGFyZW5hKQoreworICAgIGlmIChvYmogIT0gUHlfTm9uZSAmJiBvYmogIT0gUHlfVHJ1ZSAmJiBvYmogIT0gUHlfRmFsc2UpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQVNUIHNpbmdsZXRvbiBtdXN0IGJlIFRydWUsIEZhbHNlLCBvciBOb25lIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAqb3V0ID0gb2JqOworICAgIHJldHVybiAwOworfQorCiBzdGF0aWMgaW50IG9iajJhc3Rfb2JqZWN0KFB5T2JqZWN0KiBvYmosIFB5T2JqZWN0Kiogb3V0LCBQeUFyZW5hKiBhcmVuYSkKIHsKICAgICBpZiAob2JqID09IFB5X05vbmUpCkBAIC03NTgsNiArNzc0LDE5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZXhpc3RzX25vdF9ub25lKFB5T2JqZWN0ICpvYmosIF9QeV9JZGVudGlmaWVyICppZCkKK3sKKyAgICBpbnQgaXNub25lOworICAgIFB5T2JqZWN0ICphdHRyID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosIGlkKTsKKyAgICBpZiAoIWF0dHIpIHsKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlzbm9uZSA9IGF0dHIgPT0gUHlfTm9uZTsKKyAgICBQeV9ERUNSRUYoYXR0cik7CisgICAgcmV0dXJuICFpc25vbmU7Cit9CisKIAogc3RhdGljIGludCBpbml0X3R5cGVzKHZvaWQpCiB7CkBAIC04NjIsNiArODkxLDkgQEAKICAgICBpZiAoIVN0cl90eXBlKSByZXR1cm4gMDsKICAgICBCeXRlc190eXBlID0gbWFrZV90eXBlKCJCeXRlcyIsIGV4cHJfdHlwZSwgQnl0ZXNfZmllbGRzLCAxKTsKICAgICBpZiAoIUJ5dGVzX3R5cGUpIHJldHVybiAwOworICAgIE5hbWVDb25zdGFudF90eXBlID0gbWFrZV90eXBlKCJOYW1lQ29uc3RhbnQiLCBleHByX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZUNvbnN0YW50X2ZpZWxkcywgMSk7CisgICAgaWYgKCFOYW1lQ29uc3RhbnRfdHlwZSkgcmV0dXJuIDA7CiAgICAgRWxsaXBzaXNfdHlwZSA9IG1ha2VfdHlwZSgiRWxsaXBzaXMiLCBleHByX3R5cGUsIE5VTEwsIDApOwogICAgIGlmICghRWxsaXBzaXNfdHlwZSkgcmV0dXJuIDA7CiAgICAgQXR0cmlidXRlX3R5cGUgPSBtYWtlX3R5cGUoIkF0dHJpYnV0ZSIsIGV4cHJfdHlwZSwgQXR0cmlidXRlX2ZpZWxkcywgMyk7CkBAIC0xMDM5LDYgKzEwNzEsNyBAQAogICAgIGNvbXByZWhlbnNpb25fdHlwZSA9IG1ha2VfdHlwZSgiY29tcHJlaGVuc2lvbiIsICZBU1RfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHJlaGVuc2lvbl9maWVsZHMsIDMpOwogICAgIGlmICghY29tcHJlaGVuc2lvbl90eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGNvbXByZWhlbnNpb25fdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIGV4Y2VwdGhhbmRsZXJfdHlwZSA9IG1ha2VfdHlwZSgiZXhjZXB0aGFuZGxlciIsICZBU1RfdHlwZSwgTlVMTCwgMCk7CiAgICAgaWYgKCFleGNlcHRoYW5kbGVyX3R5cGUpIHJldHVybiAwOwogICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoZXhjZXB0aGFuZGxlcl90eXBlLCBleGNlcHRoYW5kbGVyX2F0dHJpYnV0ZXMsIDIpKQpAQCAtMTA0NiwxNiArMTA3OSwyMSBAQAogICAgIEV4Y2VwdEhhbmRsZXJfdHlwZSA9IG1ha2VfdHlwZSgiRXhjZXB0SGFuZGxlciIsIGV4Y2VwdGhhbmRsZXJfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0SGFuZGxlcl9maWVsZHMsIDMpOwogICAgIGlmICghRXhjZXB0SGFuZGxlcl90eXBlKSByZXR1cm4gMDsKLSAgICBhcmd1bWVudHNfdHlwZSA9IG1ha2VfdHlwZSgiYXJndW1lbnRzIiwgJkFTVF90eXBlLCBhcmd1bWVudHNfZmllbGRzLCA4KTsKKyAgICBhcmd1bWVudHNfdHlwZSA9IG1ha2VfdHlwZSgiYXJndW1lbnRzIiwgJkFTVF90eXBlLCBhcmd1bWVudHNfZmllbGRzLCA2KTsKICAgICBpZiAoIWFyZ3VtZW50c190eXBlKSByZXR1cm4gMDsKKyAgICBpZiAoIWFkZF9hdHRyaWJ1dGVzKGFyZ3VtZW50c190eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgYXJnX3R5cGUgPSBtYWtlX3R5cGUoImFyZyIsICZBU1RfdHlwZSwgYXJnX2ZpZWxkcywgMik7CiAgICAgaWYgKCFhcmdfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhhcmdfdHlwZSwgYXJnX2F0dHJpYnV0ZXMsIDIpKSByZXR1cm4gMDsKICAgICBrZXl3b3JkX3R5cGUgPSBtYWtlX3R5cGUoImtleXdvcmQiLCAmQVNUX3R5cGUsIGtleXdvcmRfZmllbGRzLCAyKTsKICAgICBpZiAoIWtleXdvcmRfdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyhrZXl3b3JkX3R5cGUsIE5VTEwsIDApKSByZXR1cm4gMDsKICAgICBhbGlhc190eXBlID0gbWFrZV90eXBlKCJhbGlhcyIsICZBU1RfdHlwZSwgYWxpYXNfZmllbGRzLCAyKTsKICAgICBpZiAoIWFsaWFzX3R5cGUpIHJldHVybiAwOworICAgIGlmICghYWRkX2F0dHJpYnV0ZXMoYWxpYXNfdHlwZSwgTlVMTCwgMCkpIHJldHVybiAwOwogICAgIHdpdGhpdGVtX3R5cGUgPSBtYWtlX3R5cGUoIndpdGhpdGVtIiwgJkFTVF90eXBlLCB3aXRoaXRlbV9maWVsZHMsIDIpOwogICAgIGlmICghd2l0aGl0ZW1fdHlwZSkgcmV0dXJuIDA7CisgICAgaWYgKCFhZGRfYXR0cmlidXRlcyh3aXRoaXRlbV90eXBlLCBOVUxMLCAwKSkgcmV0dXJuIDA7CiAgICAgaW5pdGlhbGl6ZWQgPSAxOwogICAgIHJldHVybiAxOwogfQpAQCAtMTkyMyw2ICsxOTYxLDI1IEBACiB9CiAKIGV4cHJfdHkKK05hbWVDb25zdGFudChzaW5nbGV0b24gdmFsdWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0LCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBleHByX3R5IHA7CisgICAgaWYgKCF2YWx1ZSkgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICJmaWVsZCB2YWx1ZSBpcyByZXF1aXJlZCBmb3IgTmFtZUNvbnN0YW50Iik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBwID0gKGV4cHJfdHkpUHlBcmVuYV9NYWxsb2MoYXJlbmEsIHNpemVvZigqcCkpOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcC0+a2luZCA9IE5hbWVDb25zdGFudF9raW5kOworICAgIHAtPnYuTmFtZUNvbnN0YW50LnZhbHVlID0gdmFsdWU7CisgICAgcC0+bGluZW5vID0gbGluZW5vOworICAgIHAtPmNvbF9vZmZzZXQgPSBjb2xfb2Zmc2V0OworICAgIHJldHVybiBwOworfQorCitleHByX3R5CiBFbGxpcHNpcyhpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgZXhwcl90eSBwOwpAQCAtMjE3Nyw5ICsyMjM0LDggQEAKIH0KIAogYXJndW1lbnRzX3R5Ci1hcmd1bWVudHMoYXNkbF9zZXEgKiBhcmdzLCBpZGVudGlmaWVyIHZhcmFyZywgZXhwcl90eSB2YXJhcmdhbm5vdGF0aW9uLAotICAgICAgICAgIGFzZGxfc2VxICoga3dvbmx5YXJncywgaWRlbnRpZmllciBrd2FyZywgZXhwcl90eSBrd2FyZ2Fubm90YXRpb24sCi0gICAgICAgICAgYXNkbF9zZXEgKiBkZWZhdWx0cywgYXNkbF9zZXEgKiBrd19kZWZhdWx0cywgUHlBcmVuYSAqYXJlbmEpCithcmd1bWVudHMoYXNkbF9zZXEgKiBhcmdzLCBhcmdfdHkgdmFyYXJnLCBhc2RsX3NlcSAqIGt3b25seWFyZ3MsIGFzZGxfc2VxICoKKyAgICAgICAgICBrd19kZWZhdWx0cywgYXJnX3R5IGt3YXJnLCBhc2RsX3NlcSAqIGRlZmF1bHRzLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBhcmd1bWVudHNfdHkgcDsKICAgICBwID0gKGFyZ3VtZW50c190eSlQeUFyZW5hX01hbGxvYyhhcmVuYSwgc2l6ZW9mKCpwKSk7CkBAIC0yMTg3LDEyICsyMjQzLDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHAtPmFyZ3MgPSBhcmdzOwogICAgIHAtPnZhcmFyZyA9IHZhcmFyZzsKLSAgICBwLT52YXJhcmdhbm5vdGF0aW9uID0gdmFyYXJnYW5ub3RhdGlvbjsKICAgICBwLT5rd29ubHlhcmdzID0ga3dvbmx5YXJnczsKLSAgICBwLT5rd2FyZyA9IGt3YXJnOwotICAgIHAtPmt3YXJnYW5ub3RhdGlvbiA9IGt3YXJnYW5ub3RhdGlvbjsKLSAgICBwLT5kZWZhdWx0cyA9IGRlZmF1bHRzOwogICAgIHAtPmt3X2RlZmF1bHRzID0ga3dfZGVmYXVsdHM7CisgICAgcC0+a3dhcmcgPSBrd2FyZzsKKyAgICBwLT5kZWZhdWx0cyA9IGRlZmF1bHRzOwogICAgIHJldHVybiBwOwogfQogCkBAIC0yOTQzLDYgKzI5OTcsMTUgQEAKICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgorICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhOYW1lQ29uc3RhbnRfdHlwZSwgTlVMTCwgTlVMTCk7CisgICAgICAgIGlmICghcmVzdWx0KSBnb3RvIGZhaWxlZDsKKyAgICAgICAgdmFsdWUgPSBhc3Qyb2JqX3NpbmdsZXRvbihvLT52Lk5hbWVDb25zdGFudC52YWx1ZSk7CisgICAgICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOworICAgICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX3ZhbHVlLCB2YWx1ZSkgPT0gLTEpCisgICAgICAgICAgICBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICByZXN1bHQgPSBQeVR5cGVfR2VuZXJpY05ldyhFbGxpcHNpc190eXBlLCBOVUxMLCBOVUxMKTsKICAgICAgICAgaWYgKCFyZXN1bHQpIGdvdG8gZmFpbGVkOwpAQCAtMzM2MSwyOSArMzQyNCwyNCBAQAogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfYXJncywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9pZGVudGlmaWVyKG8tPnZhcmFyZyk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2FyZyhvLT52YXJhcmcpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfdmFyYXJnLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2V4cHIoby0+dmFyYXJnYW5ub3RhdGlvbik7Ci0gICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF92YXJhcmdhbm5vdGF0aW9uLCB2YWx1ZSkgPT0gLTEpCi0gICAgICAgIGdvdG8gZmFpbGVkOwotICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+a3dvbmx5YXJncywgYXN0Mm9ial9hcmcpOwogICAgIGlmICghdmFsdWUpIGdvdG8gZmFpbGVkOwogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHJlc3VsdCwgJlB5SWRfa3dvbmx5YXJncywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9pZGVudGlmaWVyKG8tPmt3YXJnKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfbGlzdChvLT5rd19kZWZhdWx0cywgYXN0Mm9ial9leHByKTsKICAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKLSAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3YXJnLCB2YWx1ZSkgPT0gLTEpCisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd19kZWZhdWx0cywgdmFsdWUpID09IC0xKQogICAgICAgICBnb3RvIGZhaWxlZDsKICAgICBQeV9ERUNSRUYodmFsdWUpOwotICAgIHZhbHVlID0gYXN0Mm9ial9leHByKG8tPmt3YXJnYW5ub3RhdGlvbik7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2FyZyhvLT5rd2FyZyk7CiAgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd2FyZ2Fubm90YXRpb24sIHZhbHVlKSA9PSAtMSkKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2t3YXJnLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+ZGVmYXVsdHMsIGFzdDJvYmpfZXhwcik7CkBAIC0zMzkxLDExICszNDQ5LDYgQEAKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2RlZmF1bHRzLCB2YWx1ZSkgPT0gLTEpCiAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgIFB5X0RFQ1JFRih2YWx1ZSk7Ci0gICAgdmFsdWUgPSBhc3Qyb2JqX2xpc3Qoby0+a3dfZGVmYXVsdHMsIGFzdDJvYmpfZXhwcik7Ci0gICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7Ci0gICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9rd19kZWZhdWx0cywgdmFsdWUpID09IC0xKQotICAgICAgICBnb3RvIGZhaWxlZDsKLSAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgIHJldHVybiByZXN1bHQ7CiBmYWlsZWQ6CiAgICAgUHlfWERFQ1JFRih2YWx1ZSk7CkBAIC0zNDI1LDYgKzM0NzgsMTYgQEAKICAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2Fubm90YXRpb24sIHZhbHVlKSA9PSAtMSkKICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICB2YWx1ZSA9IGFzdDJvYmpfaW50KG8tPmxpbmVubyk7CisgICAgaWYgKCF2YWx1ZSkgZ290byBmYWlsZWQ7CisgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQocmVzdWx0LCAmUHlJZF9saW5lbm8sIHZhbHVlKSA8IDApCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgdmFsdWUgPSBhc3Qyb2JqX2ludChvLT5jb2xfb2Zmc2V0KTsKKyAgICBpZiAoIXZhbHVlKSBnb3RvIGZhaWxlZDsKKyAgICBpZiAoX1B5T2JqZWN0X1NldEF0dHJJZChyZXN1bHQsICZQeUlkX2NvbF9vZmZzZXQsIHZhbHVlKSA8IDApCisgICAgICAgIGdvdG8gZmFpbGVkOworICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIGZhaWxlZDoKICAgICBQeV9YREVDUkVGKHZhbHVlKTsKQEAgLTM1NDksNyArMzYxMiw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM1ODQsNyArMzY0Nyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM2NDEsNyArMzcwNCw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM3NDQsNyArMzgwNyw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM3NjgsNyArMzgzMSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZGVjb3JhdG9yX2xpc3QgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGRlY29yYXRvcl9saXN0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTM3ODEsNyArMzg0NCw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJkZWNvcmF0b3JfbGlzdFwiIG1pc3NpbmcgZnJvbSBGdW5jdGlvbkRlZiIpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9yZXR1cm5zKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfcmV0dXJucykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfcmV0dXJucyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtMzgzMSw3ICszODk0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYmFzZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBiYXNlcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYmFzZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtMzg1NSw3ICszOTE4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAga2V5d29yZHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBrZXl3b3JkcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoa2V5d29yZHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBrZXl3b3JkX3R5IHZhbHVlOwpAQCAtMzg2OCw3ICszOTMxLDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImtleXdvcmRzXCIgbWlzc2luZyBmcm9tIENsYXNzRGVmIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3N0YXJhcmdzKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zODc4LDcgKzM5NDEsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3RhcmFyZ3MgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfa3dhcmdzKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfa3dhcmdzKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTM4OTksNyArMzk2Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGJvZHkgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChib2R5ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgc3RtdF90eSB2YWx1ZTsKQEAgLTM5MjMsNyArMzk4Niw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGRlY29yYXRvcl9saXN0ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZGVjb3JhdG9yX2xpc3QgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGRlY29yYXRvcl9saXN0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTM5NDgsNyArNDAxMSw3IEBACiAgICAgaWYgKGlzaW5zdGFuY2UpIHsKICAgICAgICAgZXhwcl90eSB2YWx1ZTsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhbHVlKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdmFsdWUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhbHVlKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC0zOTgwLDcgKzQwNDMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICB0YXJnZXRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdGFyZ2V0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAodGFyZ2V0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC00MDE2LDcgKzQwNzksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICB0YXJnZXRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgdGFyZ2V0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAodGFyZ2V0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC00MTMzLDcgKzQxOTYsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MTU3LDcgKzQyMjAsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9yZWxzZSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MjA1LDcgKzQyNjgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MjI5LDcgKzQyOTIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9yZWxzZSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00Mjc3LDcgKzQzNDAsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MzAxLDcgKzQzNjQsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9yZWxzZSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC00MzM3LDcgKzQ0MDAsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBpdGVtcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGl0ZW1zID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChpdGVtcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHdpdGhpdGVtX3R5IHZhbHVlOwpAQCAtNDM2MSw3ICs0NDI0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDM4Niw3ICs0NDQ5LDcgQEAKICAgICAgICAgZXhwcl90eSBleGM7CiAgICAgICAgIGV4cHJfdHkgY2F1c2U7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9leGMpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9leGMpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2V4Yyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDM5Niw3ICs0NDU5LDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGV4YyA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9jYXVzZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2NhdXNlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9jYXVzZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDQzMSw3ICs0NDk0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYm9keSA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGJvZHkgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDQ1NSw3ICs0NTE4LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgaGFuZGxlcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBoYW5kbGVycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoaGFuZGxlcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleGNlcHRoYW5kbGVyX3R5IHZhbHVlOwpAQCAtNDQ3OSw3ICs0NTQyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3JlbHNlID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgb3JlbHNlID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChvcmVsc2UgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDUwMyw3ICs0NTY2LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZmluYWxib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZmluYWxib2R5ID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChmaW5hbGJvZHkgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzdG10X3R5IHZhbHVlOwpAQCAtNDU0MCw3ICs0NjAzLDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcInRlc3RcIiBtaXNzaW5nIGZyb20gQXNzZXJ0Iik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX21zZykpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX21zZykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfbXNnKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00NTcyLDcgKzQ2MzUsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBuYW1lcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG5hbWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGFsaWFzX3R5IHZhbHVlOwpAQCAtNDU5OCw3ICs0NjYxLDcgQEAKICAgICAgICAgYXNkbF9zZXEqIG5hbWVzOwogICAgICAgICBpbnQgbGV2ZWw7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9tb2R1bGUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9tb2R1bGUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX21vZHVsZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNDYxOSw3ICs0NjgyLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgbmFtZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBuYW1lcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAobmFtZXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBhbGlhc190eSB2YWx1ZTsKQEAgLTQ2MzIsNyArNDY5NSw3IEBACiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJuYW1lc1wiIG1pc3NpbmcgZnJvbSBJbXBvcnRGcm9tIik7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2xldmVsKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbGV2ZWwpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2xldmVsKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC00NjY0LDcgKzQ3MjcsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBuYW1lcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG5hbWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgdmFsdWU7CkBAIC00Njk5LDcgKzQ3NjIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBuYW1lcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG5hbWVzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChuYW1lcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgdmFsdWU7CkBAIC00ODQwLDcgKzQ5MDMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICB2YWx1ZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICB2YWx1ZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHZhbHVlcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01MDM2LDcgKzUwOTksNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBrZXlzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAga2V5cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoa2V5cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01MDYwLDcgKzUxMjMsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICB2YWx1ZXMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICB2YWx1ZXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKHZhbHVlcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01MDk1LDcgKzUxNTgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBlbHRzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZWx0cyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZWx0cyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC01MTQyLDcgKzUyMDUsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CkBAIC01MTg5LDcgKzUyNTIsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CkBAIC01MjQ4LDcgKzUzMTEsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CkBAIC01Mjk1LDcgKzUzNTgsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBnZW5lcmF0b3JzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgZ2VuZXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoZ2VuZXJhdG9ycyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNvbXByZWhlbnNpb25fdHkgdmFsdWU7CkBAIC01MzE5LDcgKzUzODIsNyBAQAogICAgIGlmIChpc2luc3RhbmNlKSB7CiAgICAgICAgIGV4cHJfdHkgdmFsdWU7CiAKLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF92YWx1ZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3ZhbHVlKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YWx1ZSk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTM4Niw3ICs1NDQ5LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgb3BzID0gYXNkbF9pbnRfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIG9wcyA9IF9QeV9hc2RsX2ludF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKG9wcyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGNtcG9wX3R5IHZhbHVlOwpAQCAtNTQxMCw3ICs1NDczLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgY29tcGFyYXRvcnMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBjb21wYXJhdG9ycyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoY29tcGFyYXRvcnMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTQ2MCw3ICs1NTIzLDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgYXJncyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGFyZ3MgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBleHByX3R5IHZhbHVlOwpAQCAtNTQ4NCw3ICs1NTQ3LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAga2V5d29yZHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBrZXl3b3JkcyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoa2V5d29yZHMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBrZXl3b3JkX3R5IHZhbHVlOwpAQCAtNTQ5Nyw3ICs1NTYwLDcgQEAKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImtleXdvcmRzXCIgbWlzc2luZyBmcm9tIENhbGwiKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfc3RhcmFyZ3MpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9zdGFyYXJncykpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfc3RhcmFyZ3MpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU1MDcsNyArNTU3MCw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzdGFyYXJncyA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZ3MpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9rd2FyZ3MpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJncyk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTU4OCw2ICs1NjUxLDI4IEBACiAgICAgICAgIGlmICgqb3V0ID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaXNpbnN0YW5jZSA9IFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKU5hbWVDb25zdGFudF90eXBlKTsKKyAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgaWYgKGlzaW5zdGFuY2UpIHsKKyAgICAgICAgc2luZ2xldG9uIHZhbHVlOworCisgICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdmFsdWUpKSB7CisgICAgICAgICAgICBpbnQgcmVzOworICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3ZhbHVlKTsKKyAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgICAgICByZXMgPSBvYmoyYXN0X3NpbmdsZXRvbih0bXAsICZ2YWx1ZSwgYXJlbmEpOworICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJ2YWx1ZVwiIG1pc3NpbmcgZnJvbSBOYW1lQ29uc3RhbnQiKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisgICAgICAgICpvdXQgPSBOYW1lQ29uc3RhbnQodmFsdWUsIGxpbmVubywgY29sX29mZnNldCwgYXJlbmEpOworICAgICAgICBpZiAoKm91dCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKG9iaiwgKFB5T2JqZWN0KilFbGxpcHNpc190eXBlKTsKICAgICBpZiAoaXNpbnN0YW5jZSA9PSAtMSkgewogICAgICAgICByZXR1cm4gMTsKQEAgLTU3NzcsNyArNTg2Miw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChlbHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU4MjQsNyArNTkwOSw3IEBACiAgICAgICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgICAgIGVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgICAgIGlmIChlbHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgZXhwcl90eSB2YWx1ZTsKQEAgLTU5MzcsNyArNjAyMiw3IEBACiAgICAgICAgIGV4cHJfdHkgdXBwZXI7CiAgICAgICAgIGV4cHJfdHkgc3RlcDsKIAotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2xvd2VyKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfbG93ZXIpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2xvd2VyKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC01OTQ3LDcgKzYwMzIsNyBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbG93ZXIgPSBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdXBwZXIpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF91cHBlcikpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdXBwZXIpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTU5NTcsNyArNjA0Miw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB1cHBlciA9IE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9zdGVwKSkgeworICAgICAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfc3RlcCkpIHsKICAgICAgICAgICAgIGludCByZXM7CiAgICAgICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfc3RlcCk7CiAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNTk4OSw3ICs2MDc0LDcgQEAKICAgICAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICAgICAgZGltcyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgICAgIGRpbXMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKGRpbXMgPT0gTlVMTCkgZ290byBmYWlsZWQ7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBzbGljZV90eSB2YWx1ZTsKQEAgLTYzNDAsNyArNjQyNSw3IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAgaWZzID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICBpZnMgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoaWZzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC02NDA0LDcgKzY0ODksNyBAQAogICAgICAgICBpZGVudGlmaWVyIG5hbWU7CiAgICAgICAgIGFzZGxfc2VxKiBib2R5OwogCi0gICAgICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfdHlwZSkpIHsKKyAgICAgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX3R5cGUpKSB7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX3R5cGUpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY0MTQsNyArNjQ5OSw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0eXBlID0gTlVMTDsKICAgICAgICAgfQotICAgICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX25hbWUpKSB7CisgICAgICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9uYW1lKSkgewogICAgICAgICAgICAgaW50IHJlczsKICAgICAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9uYW1lKTsKICAgICAgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CkBAIC02NDM1LDcgKzY1MjAsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZmFpbGVkOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgICAgICBib2R5ID0gYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOworICAgICAgICAgICAgYm9keSA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgICAgICBpZiAoYm9keSA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIHN0bXRfdHkgdmFsdWU7CkBAIC02NDY0LDEzICs2NTQ5LDExIEBACiB7CiAgICAgUHlPYmplY3QqIHRtcCA9IE5VTEw7CiAgICAgYXNkbF9zZXEqIGFyZ3M7Ci0gICAgaWRlbnRpZmllciB2YXJhcmc7Ci0gICAgZXhwcl90eSB2YXJhcmdhbm5vdGF0aW9uOworICAgIGFyZ190eSB2YXJhcmc7CiAgICAgYXNkbF9zZXEqIGt3b25seWFyZ3M7Ci0gICAgaWRlbnRpZmllciBrd2FyZzsKLSAgICBleHByX3R5IGt3YXJnYW5ub3RhdGlvbjsKLSAgICBhc2RsX3NlcSogZGVmYXVsdHM7CiAgICAgYXNkbF9zZXEqIGt3X2RlZmF1bHRzOworICAgIGFyZ190eSBrd2FyZzsKKyAgICBhc2RsX3NlcSogZGVmYXVsdHM7CiAKICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2FyZ3MpKSB7CiAgICAgICAgIGludCByZXM7CkBAIC02NDgzLDcgKzY1NjYsNyBAQAogICAgICAgICAgICAgZ290byBmYWlsZWQ7CiAgICAgICAgIH0KICAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7Ci0gICAgICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGFyZ3MgPSBfUHlfYXNkbF9zZXFfbmV3KGxlbiwgYXJlbmEpOwogICAgICAgICBpZiAoYXJncyA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICBhcmdfdHkgdmFsdWU7CkBAIC02NDk2LDI2ICs2NTc5LDE2IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcImFyZ3NcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhcmFyZykpIHsKKyAgICBpZiAoZXhpc3RzX25vdF9ub25lKG9iaiwgJlB5SWRfdmFyYXJnKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfdmFyYXJnKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgcmVzID0gb2JqMmFzdF9pZGVudGlmaWVyKHRtcCwgJnZhcmFyZywgYXJlbmEpOworICAgICAgICByZXMgPSBvYmoyYXN0X2FyZyh0bXAsICZ2YXJhcmcsIGFyZW5hKTsKICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKICAgICAgICAgUHlfQ0xFQVIodG1wKTsKICAgICB9IGVsc2UgewogICAgICAgICB2YXJhcmcgPSBOVUxMOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX3ZhcmFyZ2Fubm90YXRpb24pKSB7Ci0gICAgICAgIGludCByZXM7Ci0gICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF92YXJhcmdhbm5vdGF0aW9uKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgcmVzID0gb2JqMmFzdF9leHByKHRtcCwgJnZhcmFyZ2Fubm90YXRpb24sIGFyZW5hKTsKLSAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgUHlfQ0xFQVIodG1wKTsKLSAgICB9IGVsc2UgewotICAgICAgICB2YXJhcmdhbm5vdGF0aW9uID0gTlVMTDsKLSAgICB9CiAgICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd29ubHlhcmdzKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICBQeV9zc2l6ZV90IGxlbjsKQEAgLTY1MjcsNyArNjYwMCw3IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAga3dvbmx5YXJncyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAga3dvbmx5YXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CiAgICAgICAgIGlmIChrd29ubHlhcmdzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIGFyZ190eSB2YWx1ZTsKQEAgLTY1NDAsNTAgKzY2MTMsNiBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJrd29ubHlhcmdzXCIgbWlzc2luZyBmcm9tIGFyZ3VtZW50cyIpOwogICAgICAgICByZXR1cm4gMTsKICAgICB9Ci0gICAgaWYgKF9QeU9iamVjdF9IYXNBdHRySWQob2JqLCAmUHlJZF9rd2FyZykpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJnKTsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgcmVzID0gb2JqMmFzdF9pZGVudGlmaWVyKHRtcCwgJmt3YXJnLCBhcmVuYSk7Ci0gICAgICAgIGlmIChyZXMgIT0gMCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAga3dhcmcgPSBOVUxMOwotICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3YXJnYW5ub3RhdGlvbikpIHsKLSAgICAgICAgaW50IHJlczsKLSAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJnYW5ub3RhdGlvbik7Ci0gICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7Ci0gICAgICAgIHJlcyA9IG9iajJhc3RfZXhwcih0bXAsICZrd2FyZ2Fubm90YXRpb24sIGFyZW5hKTsKLSAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgUHlfQ0xFQVIodG1wKTsKLSAgICB9IGVsc2UgewotICAgICAgICBrd2FyZ2Fubm90YXRpb24gPSBOVUxMOwotICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2RlZmF1bHRzKSkgewotICAgICAgICBpbnQgcmVzOwotICAgICAgICBQeV9zc2l6ZV90IGxlbjsKLSAgICAgICAgUHlfc3NpemVfdCBpOwotICAgICAgICB0bXAgPSBfUHlPYmplY3RfR2V0QXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICBpZiAoIVB5TGlzdF9DaGVjayh0bXApKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLCAiYXJndW1lbnRzIGZpZWxkIFwiZGVmYXVsdHNcIiBtdXN0IGJlIGEgbGlzdCwgbm90IGEgJS4yMDBzIiwgdG1wLT5vYl90eXBlLT50cF9uYW1lKTsKLSAgICAgICAgICAgIGdvdG8gZmFpbGVkOwotICAgICAgICB9Ci0gICAgICAgIGxlbiA9IFB5TGlzdF9HRVRfU0laRSh0bXApOwotICAgICAgICBkZWZhdWx0cyA9IGFzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKLSAgICAgICAgaWYgKGRlZmF1bHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7Ci0gICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIoUHlMaXN0X0dFVF9JVEVNKHRtcCwgaSksICZ2YWx1ZSwgYXJlbmEpOwotICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKLSAgICAgICAgICAgIGFzZGxfc2VxX1NFVChkZWZhdWx0cywgaSwgdmFsdWUpOwotICAgICAgICB9Ci0gICAgICAgIFB5X0NMRUFSKHRtcCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVmYXVsdHNcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KICAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2t3X2RlZmF1bHRzKSkgewogICAgICAgICBpbnQgcmVzOwogICAgICAgICBQeV9zc2l6ZV90IGxlbjsKQEAgLTY1OTUsNyArNjYyNCw3IEBACiAgICAgICAgICAgICBnb3RvIGZhaWxlZDsKICAgICAgICAgfQogICAgICAgICBsZW4gPSBQeUxpc3RfR0VUX1NJWkUodG1wKTsKLSAgICAgICAga3dfZGVmYXVsdHMgPSBhc2RsX3NlcV9uZXcobGVuLCBhcmVuYSk7CisgICAgICAgIGt3X2RlZmF1bHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKICAgICAgICAgaWYgKGt3X2RlZmF1bHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CkBAIC02NjA4LDggKzY2MzcsNDIgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwia3dfZGVmYXVsdHNcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICAqb3V0ID0gYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywgdmFyYXJnYW5ub3RhdGlvbiwga3dvbmx5YXJncywga3dhcmcsCi0gICAgICAgICAgICAgICAgICAgICBrd2FyZ2Fubm90YXRpb24sIGRlZmF1bHRzLCBrd19kZWZhdWx0cywgYXJlbmEpOworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9rd2FyZykpIHsKKyAgICAgICAgaW50IHJlczsKKyAgICAgICAgdG1wID0gX1B5T2JqZWN0X0dldEF0dHJJZChvYmosICZQeUlkX2t3YXJnKTsKKyAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgcmVzID0gb2JqMmFzdF9hcmcodG1wLCAma3dhcmcsIGFyZW5hKTsKKyAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgUHlfQ0xFQVIodG1wKTsKKyAgICB9IGVsc2UgeworICAgICAgICBrd2FyZyA9IE5VTEw7CisgICAgfQorICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfZGVmYXVsdHMpKSB7CisgICAgICAgIGludCByZXM7CisgICAgICAgIFB5X3NzaXplX3QgbGVuOworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9kZWZhdWx0cyk7CisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgZ290byBmYWlsZWQ7CisgICAgICAgIGlmICghUHlMaXN0X0NoZWNrKHRtcCkpIHsKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICJhcmd1bWVudHMgZmllbGQgXCJkZWZhdWx0c1wiIG11c3QgYmUgYSBsaXN0LCBub3QgYSAlLjIwMHMiLCB0bXAtPm9iX3R5cGUtPnRwX25hbWUpOworICAgICAgICAgICAgZ290byBmYWlsZWQ7CisgICAgICAgIH0KKyAgICAgICAgbGVuID0gUHlMaXN0X0dFVF9TSVpFKHRtcCk7CisgICAgICAgIGRlZmF1bHRzID0gX1B5X2FzZGxfc2VxX25ldyhsZW4sIGFyZW5hKTsKKyAgICAgICAgaWYgKGRlZmF1bHRzID09IE5VTEwpIGdvdG8gZmFpbGVkOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgICAgIGV4cHJfdHkgdmFsdWU7CisgICAgICAgICAgICByZXMgPSBvYmoyYXN0X2V4cHIoUHlMaXN0X0dFVF9JVEVNKHRtcCwgaSksICZ2YWx1ZSwgYXJlbmEpOworICAgICAgICAgICAgaWYgKHJlcyAhPSAwKSBnb3RvIGZhaWxlZDsKKyAgICAgICAgICAgIGFzZGxfc2VxX1NFVChkZWZhdWx0cywgaSwgdmFsdWUpOworICAgICAgICB9CisgICAgICAgIFB5X0NMRUFSKHRtcCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiZGVmYXVsdHNcIiBtaXNzaW5nIGZyb20gYXJndW1lbnRzIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKyAgICAqb3V0ID0gYXJndW1lbnRzKGFyZ3MsIHZhcmFyZywga3dvbmx5YXJncywga3dfZGVmYXVsdHMsIGt3YXJnLCBkZWZhdWx0cywKKyAgICAgICAgICAgICAgICAgICAgIGFyZW5hKTsKICAgICByZXR1cm4gMDsKIGZhaWxlZDoKICAgICBQeV9YREVDUkVGKHRtcCk7CkBAIC02NjM0LDcgKzY2OTcsNyBAQAogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLCAicmVxdWlyZWQgZmllbGQgXCJhcmdcIiBtaXNzaW5nIGZyb20gYXJnIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX2Fubm90YXRpb24pKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX2Fubm90YXRpb24pKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9hbm5vdGF0aW9uKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY3MDUsNyArNjc2OCw3IEBACiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJyZXF1aXJlZCBmaWVsZCBcIm5hbWVcIiBtaXNzaW5nIGZyb20gYWxpYXMiKTsKICAgICAgICAgcmV0dXJuIDE7CiAgICAgfQotICAgIGlmIChfUHlPYmplY3RfSGFzQXR0cklkKG9iaiwgJlB5SWRfYXNuYW1lKSkgeworICAgIGlmIChleGlzdHNfbm90X25vbmUob2JqLCAmUHlJZF9hc25hbWUpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9hc25hbWUpOwogICAgICAgICBpZiAodG1wID09IE5VTEwpIGdvdG8gZmFpbGVkOwpAQCAtNjc0MCw3ICs2ODAzLDcgQEAKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgInJlcXVpcmVkIGZpZWxkIFwiY29udGV4dF9leHByXCIgbWlzc2luZyBmcm9tIHdpdGhpdGVtIik7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KLSAgICBpZiAoX1B5T2JqZWN0X0hhc0F0dHJJZChvYmosICZQeUlkX29wdGlvbmFsX3ZhcnMpKSB7CisgICAgaWYgKGV4aXN0c19ub3Rfbm9uZShvYmosICZQeUlkX29wdGlvbmFsX3ZhcnMpKSB7CiAgICAgICAgIGludCByZXM7CiAgICAgICAgIHRtcCA9IF9QeU9iamVjdF9HZXRBdHRySWQob2JqLCAmUHlJZF9vcHRpb25hbF92YXJzKTsKICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKSBnb3RvIGZhaWxlZDsKQEAgLTY3NzAsNyArNjgzMyw3IEBACiAgICAgaWYgKCFtKSByZXR1cm4gTlVMTDsKICAgICBkID0gUHlNb2R1bGVfR2V0RGljdChtKTsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkFTVCIsIChQeU9iamVjdCopJkFTVF90eXBlKSA8IDApIHJldHVybiBOVUxMOwotICAgIGlmIChQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiUHlDRl9PTkxZX0FTVCIsIFB5Q0ZfT05MWV9BU1QpIDwgMCkKKyAgICBpZiAoUHlNb2R1bGVfQWRkSW50TWFjcm8obSwgUHlDRl9PTkxZX0FTVCkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIm1vZCIsIChQeU9iamVjdCopbW9kX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJNb2R1bGUiLCAoUHlPYmplY3QqKU1vZHVsZV90eXBlKSA8IDApIHJldHVybgpAQCAtNjg1MCw2ICs2OTEzLDggQEAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIlN0ciIsIChQeU9iamVjdCopU3RyX3R5cGUpIDwgMCkgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJCeXRlcyIsIChQeU9iamVjdCopQnl0ZXNfdHlwZSkgPCAwKSByZXR1cm4KICAgICAgICAgTlVMTDsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIk5hbWVDb25zdGFudCIsIChQeU9iamVjdCopTmFtZUNvbnN0YW50X3R5cGUpIDwKKyAgICAgICAgMCkgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJFbGxpcHNpcyIsIChQeU9iamVjdCopRWxsaXBzaXNfdHlwZSkgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoZCwgIkF0dHJpYnV0ZSIsIChQeU9iamVjdCopQXR0cmlidXRlX3R5cGUpIDwgMCkKQEAgLTY5NDksNyArNzAxNCw4IEBACiAKIFB5T2JqZWN0KiBQeUFTVF9tb2Qyb2JqKG1vZF90eSB0KQogewotICAgIGluaXRfdHlwZXMoKTsKKyAgICBpZiAoIWluaXRfdHlwZXMoKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIGFzdDJvYmpfbW9kKHQpOwogfQogCkBAIC02OTY3LDcgKzcwMzMsOCBAQAogCiAgICAgYXNzZXJ0KDAgPD0gbW9kZSAmJiBtb2RlIDw9IDIpOwogCi0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGlzaW5zdGFuY2UgPSBQeU9iamVjdF9Jc0luc3RhbmNlKGFzdCwgcmVxX3R5cGVbbW9kZV0pOwogICAgIGlmIChpc2luc3RhbmNlID09IC0xKQpAQCAtNjk4NSw3ICs3MDUyLDggQEAKIAogaW50IFB5QVNUX0NoZWNrKFB5T2JqZWN0KiBvYmopCiB7Ci0gICAgaW5pdF90eXBlcygpOworICAgIGlmICghaW5pdF90eXBlcygpKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIFB5T2JqZWN0X0lzSW5zdGFuY2Uob2JqLCAoUHlPYmplY3QqKSZBU1RfdHlwZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1B5dGhvbi9fd2FybmluZ3MuYyBiL1B5dGhvbi9fd2FybmluZ3MuYwppbmRleCBkMjc0Nzg5Li42ZGZmMGEyIDEwMDY0NAotLS0gYS9QeXRob24vX3dhcm5pbmdzLmMKKysrIGIvUHl0aG9uL193YXJuaW5ncy5jCkBAIC0xMiw3ICsxMiwxMCBAQAogc3RhdGljIFB5T2JqZWN0ICpfZmlsdGVyczsgIC8qIExpc3QgKi8KIHN0YXRpYyBQeU9iamVjdCAqX29uY2VfcmVnaXN0cnk7ICAvKiBEaWN0ICovCiBzdGF0aWMgUHlPYmplY3QgKl9kZWZhdWx0X2FjdGlvbjsgLyogU3RyaW5nICovCitzdGF0aWMgbG9uZyBfZmlsdGVyc192ZXJzaW9uOwogCitfUHlfSURFTlRJRklFUihhcmd2KTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CiAKIHN0YXRpYyBpbnQKIGNoZWNrX21hdGNoZWQoUHlPYmplY3QgKm9iaiwgUHlPYmplY3QgKmFyZykKQEAgLTk5LDcgKzEwMiw3IEBACiAKIAogLyogVGhlIGl0ZW0gaXMgYSBuZXcgcmVmZXJlbmNlLiAqLwotc3RhdGljIGNvbnN0IGNoYXIgKgorc3RhdGljIFB5T2JqZWN0KgogZ2V0X2ZpbHRlcihQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICp0ZXh0LCBQeV9zc2l6ZV90IGxpbmVubywKICAgICAgICAgICAgUHlPYmplY3QgKm1vZHVsZSwgUHlPYmplY3QgKippdGVtKQogewpAQCAtMTQ1LDE4ICsxNDgsMzIgQEAKICAgICAgICAgbG5fb2JqID0gUHlUdXBsZV9HRVRfSVRFTSh0bXBfaXRlbSwgNCk7CiAKICAgICAgICAgZ29vZF9tc2cgPSBjaGVja19tYXRjaGVkKG1zZywgdGV4dCk7CisgICAgICAgIGlmIChnb29kX21zZyA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHRtcF9pdGVtKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKICAgICAgICAgZ29vZF9tb2QgPSBjaGVja19tYXRjaGVkKG1vZCwgbW9kdWxlKTsKKyAgICAgICAgaWYgKGdvb2RfbW9kID09IC0xKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodG1wX2l0ZW0pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKwogICAgICAgICBpc19zdWJjbGFzcyA9IFB5T2JqZWN0X0lzU3ViY2xhc3MoY2F0ZWdvcnksIGNhdCk7CisgICAgICAgIGlmIChpc19zdWJjbGFzcyA9PSAtMSkgeworICAgICAgICAgICAgUHlfREVDUkVGKHRtcF9pdGVtKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKICAgICAgICAgbG4gPSBQeUxvbmdfQXNTc2l6ZV90KGxuX29iaik7Ci0gICAgICAgIGlmIChnb29kX21zZyA9PSAtMSB8fCBnb29kX21vZCA9PSAtMSB8fCBpc19zdWJjbGFzcyA9PSAtMSB8fAotICAgICAgICAgICAgKGxuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpKSB7CisgICAgICAgIGlmIChsbiA9PSAtMSAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodG1wX2l0ZW0pOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZ29vZF9tc2cgJiYgaXNfc3ViY2xhc3MgJiYgZ29vZF9tb2QgJiYgKGxuID09IDAgfHwgbGluZW5vID09IGxuKSkgewogICAgICAgICAgICAgKml0ZW0gPSB0bXBfaXRlbTsKLSAgICAgICAgICAgIHJldHVybiBfUHlVbmljb2RlX0FzU3RyaW5nKGFjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gYWN0aW9uOwogICAgICAgICB9CiAKICAgICAgICAgUHlfREVDUkVGKHRtcF9pdGVtKTsKQEAgLTE2Niw3ICsxODMsNyBAQAogICAgIGlmIChhY3Rpb24gIT0gTlVMTCkgewogICAgICAgICBQeV9JTkNSRUYoUHlfTm9uZSk7CiAgICAgICAgICppdGVtID0gUHlfTm9uZTsKLSAgICAgICAgcmV0dXJuIF9QeVVuaWNvZGVfQXNTdHJpbmcoYWN0aW9uKTsKKyAgICAgICAgcmV0dXJuIGFjdGlvbjsKICAgICB9CiAKICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwKQEAgLTE3OCwxNiArMTk1LDMzIEBACiBzdGF0aWMgaW50CiBhbHJlYWR5X3dhcm5lZChQeU9iamVjdCAqcmVnaXN0cnksIFB5T2JqZWN0ICprZXksIGludCBzaG91bGRfc2V0KQogewotICAgIFB5T2JqZWN0ICphbHJlYWR5X3dhcm5lZDsKKyAgICBQeU9iamVjdCAqdmVyc2lvbl9vYmosICphbHJlYWR5X3dhcm5lZDsKKyAgICBfUHlfSURFTlRJRklFUih2ZXJzaW9uKTsKIAogICAgIGlmIChrZXkgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgYWxyZWFkeV93YXJuZWQgPSBQeURpY3RfR2V0SXRlbShyZWdpc3RyeSwga2V5KTsKLSAgICBpZiAoYWxyZWFkeV93YXJuZWQgIT0gTlVMTCkgewotICAgICAgICBpbnQgcmMgPSBQeU9iamVjdF9Jc1RydWUoYWxyZWFkeV93YXJuZWQpOwotICAgICAgICBpZiAocmMgIT0gMCkKLSAgICAgICAgICAgIHJldHVybiByYzsKKyAgICB2ZXJzaW9uX29iaiA9IF9QeURpY3RfR2V0SXRlbUlkKHJlZ2lzdHJ5LCAmUHlJZF92ZXJzaW9uKTsKKyAgICBpZiAodmVyc2lvbl9vYmogPT0gTlVMTAorICAgICAgICB8fCAhUHlMb25nX0NoZWNrRXhhY3QodmVyc2lvbl9vYmopCisgICAgICAgIHx8IFB5TG9uZ19Bc0xvbmcodmVyc2lvbl9vYmopICE9IF9maWx0ZXJzX3ZlcnNpb24pIHsKKyAgICAgICAgUHlEaWN0X0NsZWFyKHJlZ2lzdHJ5KTsKKyAgICAgICAgdmVyc2lvbl9vYmogPSBQeUxvbmdfRnJvbUxvbmcoX2ZpbHRlcnNfdmVyc2lvbik7CisgICAgICAgIGlmICh2ZXJzaW9uX29iaiA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQocmVnaXN0cnksICZQeUlkX3ZlcnNpb24sIHZlcnNpb25fb2JqKSA8IDApIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2ZXJzaW9uX29iaik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHZlcnNpb25fb2JqKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGFscmVhZHlfd2FybmVkID0gUHlEaWN0X0dldEl0ZW0ocmVnaXN0cnksIGtleSk7CisgICAgICAgIGlmIChhbHJlYWR5X3dhcm5lZCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpbnQgcmMgPSBQeU9iamVjdF9Jc1RydWUoYWxyZWFkeV93YXJuZWQpOworICAgICAgICAgICAgaWYgKHJjICE9IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CiAgICAgfQogCiAgICAgLyogVGhpcyB3YXJuaW5nIHdhc24ndCBmb3VuZCBpbiB0aGUgcmVnaXN0cnksIHNldCBpdC4gKi8KQEAgLTIwMSwyMyArMjM1LDI2IEBACiBub3JtYWxpemVfbW9kdWxlKFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbW9kdWxlOwotICAgIGNvbnN0IGNoYXIgKm1vZF9zdHI7CisgICAgaW50IGtpbmQ7CisgICAgdm9pZCAqZGF0YTsKICAgICBQeV9zc2l6ZV90IGxlbjsKIAotICAgIGludCByYyA9IFB5T2JqZWN0X0lzVHJ1ZShmaWxlbmFtZSk7Ci0gICAgaWYgKHJjID09IC0xKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbHNlIGlmIChyYyA9PSAwKQotICAgICAgICByZXR1cm4gUHlVbmljb2RlX0Zyb21TdHJpbmcoIjx1bmtub3duPiIpOwotCi0gICAgbW9kX3N0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoZmlsZW5hbWUpOwotICAgIGlmIChtb2Rfc3RyID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwogICAgIGxlbiA9IFB5VW5pY29kZV9HZXRMZW5ndGgoZmlsZW5hbWUpOwogICAgIGlmIChsZW4gPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI8dW5rbm93bj4iKTsKKworICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChmaWxlbmFtZSk7CisgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKGZpbGVuYW1lKTsKKworICAgIC8qIGlmIGZpbGVuYW1lLmVuZHN3aXRoKCIucHkiKTogKi8KICAgICBpZiAobGVuID49IDMgJiYKLSAgICAgICAgc3RybmNtcChtb2Rfc3RyICsgKGxlbiAtIDMpLCAiLnB5IiwgMykgPT0gMCkgeworICAgICAgICBQeVVuaWNvZGVfUkVBRChraW5kLCBkYXRhLCBsZW4tMykgPT0gJy4nICYmCisgICAgICAgIFB5VW5pY29kZV9SRUFEKGtpbmQsIGRhdGEsIGxlbi0yKSA9PSAncCcgJiYKKyAgICAgICAgUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgbGVuLTEpID09ICd5JykKKyAgICB7CiAgICAgICAgIG1vZHVsZSA9IFB5VW5pY29kZV9TdWJzdHJpbmcoZmlsZW5hbWUsIDAsIGxlbi0zKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yNjIsMzkgKzI5OSw2MyBAQAogCiAgICAgbmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoY2F0ZWdvcnksICZQeUlkX19fbmFtZV9fKTsKICAgICBpZiAobmFtZSA9PSBOVUxMKSAgLyogWFhYIENhbiBhbiBvYmplY3QgbGFjayBhICdfX25hbWVfXycgYXR0cmlidXRlPyAqLwotICAgICAgICByZXR1cm47CisgICAgICAgIGdvdG8gZXJyb3I7CiAKLSAgICBmX3N0ZGVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgZl9zdGRlcnIgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICBpZiAoZl9zdGRlcnIgPT0gTlVMTCkgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxvc3Qgc3lzLnN0ZGVyclxuIik7Ci0gICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIC8qIFByaW50ICJmaWxlbmFtZTpsaW5lbm86IGNhdGVnb3J5OiB0ZXh0XG4iICovCi0gICAgUHlGaWxlX1dyaXRlT2JqZWN0KGZpbGVuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKTsKLSAgICBQeUZpbGVfV3JpdGVTdHJpbmcobGluZW5vX3N0ciwgZl9zdGRlcnIpOwotICAgIFB5RmlsZV9Xcml0ZU9iamVjdChuYW1lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKTsKLSAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjogIiwgZl9zdGRlcnIpOwotICAgIFB5RmlsZV9Xcml0ZU9iamVjdCh0ZXh0LCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKTsKLSAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgZl9zdGRlcnIpOwotICAgIFB5X1hERUNSRUYobmFtZSk7CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdChmaWxlbmFtZSwgZl9zdGRlcnIsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcobGluZW5vX3N0ciwgZl9zdGRlcnIpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KG5hbWUsIGZfc3RkZXJyLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGZfc3RkZXJyKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdCh0ZXh0LCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmX3N0ZGVycikgPCAwKQorICAgICAgICBnb3RvIGVycm9yOworICAgIFB5X0NMRUFSKG5hbWUpOwogCiAgICAgLyogUHJpbnQgIiAgc291cmNlX2xpbmVcbiIgKi8KICAgICBpZiAoc291cmNlbGluZSkgewotICAgICAgICBjaGFyICpzb3VyY2VfbGluZV9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKHNvdXJjZWxpbmUpOwotICAgICAgICBpZiAoc291cmNlX2xpbmVfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3aGlsZSAoKnNvdXJjZV9saW5lX3N0ciA9PSAnICcgfHwgKnNvdXJjZV9saW5lX3N0ciA9PSAnXHQnIHx8Ci0gICAgICAgICAgICAgICAgKnNvdXJjZV9saW5lX3N0ciA9PSAnXDAxNCcpCi0gICAgICAgICAgICBzb3VyY2VfbGluZV9zdHIrKzsKKyAgICAgICAgaW50IGtpbmQ7CisgICAgICAgIHZvaWQgKmRhdGE7CisgICAgICAgIFB5X3NzaXplX3QgaSwgbGVuOworICAgICAgICBQeV9VQ1M0IGNoOworICAgICAgICBQeU9iamVjdCAqdHJ1bmNhdGVkOwogCi0gICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhzb3VyY2VfbGluZV9zdHIsIGZfc3RkZXJyKTsKKyAgICAgICAgaWYgKFB5VW5pY29kZV9SRUFEWShzb3VyY2VsaW5lKSA8IDEpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIGtpbmQgPSBQeVVuaWNvZGVfS0lORChzb3VyY2VsaW5lKTsKKyAgICAgICAgZGF0YSA9IFB5VW5pY29kZV9EQVRBKHNvdXJjZWxpbmUpOworICAgICAgICBsZW4gPSBQeVVuaWNvZGVfR0VUX0xFTkdUSChzb3VyY2VsaW5lKTsKKyAgICAgICAgZm9yIChpPTA7IGk8bGVuOyBpKyspIHsKKyAgICAgICAgICAgIGNoID0gUHlVbmljb2RlX1JFQUQoa2luZCwgZGF0YSwgaSk7CisgICAgICAgICAgICBpZiAoY2ggIT0gJyAnICYmIGNoICE9ICdcdCcgJiYgY2ggIT0gJ1wwMTQnKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgdHJ1bmNhdGVkID0gUHlVbmljb2RlX1N1YnN0cmluZyhzb3VyY2VsaW5lLCBpLCBsZW4pOworICAgICAgICBpZiAodHJ1bmNhdGVkID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdChzb3VyY2VsaW5lLCBmX3N0ZGVyciwgUHlfUFJJTlRfUkFXKTsKKyAgICAgICAgUHlfREVDUkVGKHRydW5jYXRlZCk7CiAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmX3N0ZGVycik7CiAgICAgfQotICAgIGVsc2UKLSAgICAgICAgaWYgKF9QeV9EaXNwbGF5U291cmNlTGluZShmX3N0ZGVyciwgZmlsZW5hbWUsIGxpbmVubywgMikgPCAwKQotICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICBlbHNlIHsKKyAgICAgICAgX1B5X0Rpc3BsYXlTb3VyY2VMaW5lKGZfc3RkZXJyLCBmaWxlbmFtZSwgbGluZW5vLCAyKTsKKyAgICB9CisKK2Vycm9yOgorICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgUHlFcnJfQ2xlYXIoKTsKIH0KIApAQCAtMzA1LDkgKzM2NiwxNiBAQAogewogICAgIFB5T2JqZWN0ICprZXkgPSBOVUxMLCAqdGV4dCA9IE5VTEwsICpyZXN1bHQgPSBOVUxMLCAqbGluZW5vX29iaiA9IE5VTEw7CiAgICAgUHlPYmplY3QgKml0ZW0gPSBOVUxMOwotICAgIGNvbnN0IGNoYXIgKmFjdGlvbjsKKyAgICBQeU9iamVjdCAqYWN0aW9uOwogICAgIGludCByYzsKIAorICAgIC8qIG1vZHVsZSBjYW4gYmUgTm9uZSBpZiBhIHdhcm5pbmcgaXMgZW1pdHRlZCBsYXRlIGR1cmluZyBQeXRob24gc2h1dGRvd24uCisgICAgICAgSW4gdGhpcyBjYXNlLCB0aGUgUHl0aG9uIHdhcm5pbmdzIG1vZHVsZSB3YXMgcHJvYmFibHkgdW5sb2FkZWQsIGZpbHRlcnMKKyAgICAgICBhcmUgbm8gbW9yZSBhdmFpbGFibGUgdG8gY2hvb3NlIGFzIGFjdGlvbi4gSXQgaXMgc2FmZXIgdG8gaWdub3JlIHRoZQorICAgICAgIHdhcm5pbmcgYW5kIGRvIG5vdGhpbmcuICovCisgICAgaWYgKG1vZHVsZSA9PSBQeV9Ob25lKQorICAgICAgICBQeV9SRVRVUk5fTk9ORTsKKwogICAgIGlmIChyZWdpc3RyeSAmJiAhUHlEaWN0X0NoZWNrKHJlZ2lzdHJ5KSAmJiAocmVnaXN0cnkgIT0gUHlfTm9uZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwgIidyZWdpc3RyeScgbXVzdCBiZSBhIGRpY3QiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zNjMsNyArNDMxLDcgQEAKICAgICBpZiAoYWN0aW9uID09IE5VTEwpCiAgICAgICAgIGdvdG8gY2xlYW51cDsKIAotICAgIGlmIChzdHJjbXAoYWN0aW9uLCAiZXJyb3IiKSA9PSAwKSB7CisgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImVycm9yIikgPT0gMCkgewogICAgICAgICBQeUVycl9TZXRPYmplY3QoY2F0ZWdvcnksIG1lc3NhZ2UpOwogICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgfQpAQCAtMzcxLDEzICs0MzksMTMgQEAKICAgICAvKiBTdG9yZSBpbiB0aGUgcmVnaXN0cnkgdGhhdCB3ZSd2ZSBiZWVuIGhlcmUsICpleGNlcHQqIHdoZW4gdGhlIGFjdGlvbgogICAgICAgIGlzICJhbHdheXMiLiAqLwogICAgIHJjID0gMDsKLSAgICBpZiAoc3RyY21wKGFjdGlvbiwgImFsd2F5cyIpICE9IDApIHsKKyAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAiYWx3YXlzIikgIT0gMCkgewogICAgICAgICBpZiAocmVnaXN0cnkgIT0gTlVMTCAmJiByZWdpc3RyeSAhPSBQeV9Ob25lICYmCiAgICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0ocmVnaXN0cnksIGtleSwgUHlfVHJ1ZSkgPCAwKQogICAgICAgICAgICAgZ290byBjbGVhbnVwOwotICAgICAgICBlbHNlIGlmIChzdHJjbXAoYWN0aW9uLCAiaWdub3JlIikgPT0gMCkKKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAiaWdub3JlIikgPT0gMCkKICAgICAgICAgICAgIGdvdG8gcmV0dXJuX25vbmU7Ci0gICAgICAgIGVsc2UgaWYgKHN0cmNtcChhY3Rpb24sICJvbmNlIikgPT0gMCkgeworICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhhY3Rpb24sICJvbmNlIikgPT0gMCkgewogICAgICAgICAgICAgaWYgKHJlZ2lzdHJ5ID09IE5VTEwgfHwgcmVnaXN0cnkgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgICAgIHJlZ2lzdHJ5ID0gZ2V0X29uY2VfcmVnaXN0cnkoKTsKICAgICAgICAgICAgICAgICBpZiAocmVnaXN0cnkgPT0gTlVMTCkKQEAgLTM4NiwyNCArNDU0LDE1IEBACiAgICAgICAgICAgICAvKiBfb25jZV9yZWdpc3RyeVsodGV4dCwgY2F0ZWdvcnkpXSA9IDEgKi8KICAgICAgICAgICAgIHJjID0gdXBkYXRlX3JlZ2lzdHJ5KHJlZ2lzdHJ5LCB0ZXh0LCBjYXRlZ29yeSwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgIm1vZHVsZSIpID09IDApIHsKKyAgICAgICAgZWxzZSBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoYWN0aW9uLCAibW9kdWxlIikgPT0gMCkgewogICAgICAgICAgICAgLyogcmVnaXN0cnlbKHRleHQsIGNhdGVnb3J5LCAwKV0gPSAxICovCiAgICAgICAgICAgICBpZiAocmVnaXN0cnkgIT0gTlVMTCAmJiByZWdpc3RyeSAhPSBQeV9Ob25lKQogICAgICAgICAgICAgICAgIHJjID0gdXBkYXRlX3JlZ2lzdHJ5KHJlZ2lzdHJ5LCB0ZXh0LCBjYXRlZ29yeSwgMCk7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAoc3RyY21wKGFjdGlvbiwgImRlZmF1bHQiKSAhPSAwKSB7Ci0gICAgICAgICAgICBQeU9iamVjdCAqdG9fc3RyID0gUHlPYmplY3RfU3RyKGl0ZW0pOwotICAgICAgICAgICAgY29uc3QgY2hhciAqZXJyX3N0ciA9ICI/Pz8iOwotCi0gICAgICAgICAgICBpZiAodG9fc3RyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBlcnJfc3RyID0gX1B5VW5pY29kZV9Bc1N0cmluZyh0b19zdHIpOwotICAgICAgICAgICAgICAgIGlmIChlcnJfc3RyID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGNsZWFudXA7Ci0gICAgICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGFjdGlvbiwgImRlZmF1bHQiKSAhPSAwKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIlVucmVjb2duaXplZCBhY3Rpb24gKCVzKSBpbiB3YXJuaW5ncy5maWx0ZXJzOlxuICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgZXJyX3N0cik7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHRvX3N0cik7CisgICAgICAgICAgICAgICAgICAgICAgICAiVW5yZWNvZ25pemVkIGFjdGlvbiAoJVIpIGluIHdhcm5pbmdzLmZpbHRlcnM6XG4gJVIiLAorICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBpdGVtKTsKICAgICAgICAgICAgIGdvdG8gY2xlYW51cDsKICAgICAgICAgfQogICAgIH0KQEAgLTUzOCwxMyArNTk3LDEyIEBACiAgICAgICAgICAgICBQeV9JTkNSRUYoKmZpbGVuYW1lKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKm1vZHVsZV9zdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKCptb2R1bGUpOwogICAgICAgICAqZmlsZW5hbWUgPSBOVUxMOwotICAgICAgICBpZiAobW9kdWxlX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwotICAgICAgICBpZiAoc3RyY21wKG1vZHVsZV9zdHIsICJfX21haW5fXyIpID09IDApIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICphcmd2ID0gUHlTeXNfR2V0T2JqZWN0KCJhcmd2Iik7Ci0gICAgICAgICAgICBpZiAoYXJndiAhPSBOVUxMICYmIFB5TGlzdF9TaXplKGFyZ3YpID4gMCkgeworICAgICAgICBpZiAoKm1vZHVsZSAhPSBQeV9Ob25lICYmIFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKCptb2R1bGUsICJfX21haW5fXyIpID09IDApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICphcmd2ID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX2FyZ3YpOworICAgICAgICAgICAgLyogUHlMaXN0X0NoZWNrKCkgaXMgbmVlZGVkIGJlY2F1c2Ugc3lzLmFyZ3YgaXMgc2V0IHRvIE5vbmUgZHVyaW5nCisgICAgICAgICAgICAgICBQeXRob24gZmluYWxpemF0aW9uICovCisgICAgICAgICAgICBpZiAoYXJndiAhPSBOVUxMICYmIFB5TGlzdF9DaGVjayhhcmd2KSAmJiBQeUxpc3RfU2l6ZShhcmd2KSA+IDApIHsKICAgICAgICAgICAgICAgICBpbnQgaXNfdHJ1ZTsKICAgICAgICAgICAgICAgICAqZmlsZW5hbWUgPSBQeUxpc3RfR2V0SXRlbShhcmd2LCAwKTsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoKmZpbGVuYW1lKTsKQEAgLTU2NCw4ICs2MjIsOCBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogZW1iZWRkZWQgaW50ZXJwcmV0ZXJzIGRvbid0IGhhdmUgc3lzLmFyZ3YsIHNlZSBidWcgIzgzOTE1MSAqLwogICAgICAgICAgICAgICAgICpmaWxlbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJfX21haW5fXyIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhbmRsZV9lcnJvcjsKKyAgICAgICAgICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gaGFuZGxlX2Vycm9yOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICgqZmlsZW5hbWUgPT0gTlVMTCkgewpAQCAtNjU5LDcgKzcxNyw3IEBACiAgICAgUHlPYmplY3QgKnJlZ2lzdHJ5ID0gTlVMTDsKICAgICBQeU9iamVjdCAqbW9kdWxlX2dsb2JhbHMgPSBOVUxMOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk9PT2l8T09POndhcm5fZXhwbGljaXQiLAorICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPT1VpfE9PTzp3YXJuX2V4cGxpY2l0IiwKICAgICAgICAgICAgICAgICBrd2RfbGlzdCwgJm1lc3NhZ2UsICZjYXRlZ29yeSwgJmZpbGVuYW1lLCAmbGluZW5vLCAmbW9kdWxlLAogICAgICAgICAgICAgICAgICZyZWdpc3RyeSwgJm1vZHVsZV9nbG9iYWxzKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC03MTcsMTQgKzc3NSwyMSBAQAogCiAgICAgICAgIC8qIEhhbmRsZSB0aGUgd2FybmluZy4gKi8KICAgICAgICAgcmV0dXJuZWQgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0cnksIHNvdXJjZV9saW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBzb3VyY2VfbGluZSk7CiAgICAgICAgIFB5X0RFQ1JFRihzb3VyY2VfbGlzdCk7CiAgICAgICAgIHJldHVybiByZXR1cm5lZDsKICAgICB9CiAKICBzdGFuZGFyZF9jYWxsOgogICAgIHJldHVybiB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdHJ5LCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RyeSwgTlVMTCk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCit3YXJuaW5nc19maWx0ZXJzX211dGF0ZWQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQoreworICAgIF9maWx0ZXJzX3ZlcnNpb24rKzsKKyAgICBQeV9SRVRVUk5fTk9ORTsKIH0KIAogCkBAIC03OTYsMTEgKzg2MSwyNiBAQAogCiAvKiBXYXJuaW5nIHdpdGggZXhwbGljaXQgb3JpZ2luICovCiBpbnQKK1B5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeU9iamVjdCAqY2F0ZWdvcnksIFB5T2JqZWN0ICptZXNzYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubywKKyAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbW9kdWxlLCBQeU9iamVjdCAqcmVnaXN0cnkpCit7CisgICAgUHlPYmplY3QgKnJlczsKKyAgICBpZiAoY2F0ZWdvcnkgPT0gTlVMTCkKKyAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKKyAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSwgTlVMTCk7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludAogUHlFcnJfV2FybkV4cGxpY2l0KFB5T2JqZWN0ICpjYXRlZ29yeSwgY29uc3QgY2hhciAqdGV4dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBsaW5lbm8sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciwgUHlPYmplY3QgKnJlZ2lzdHJ5KQogewotICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyh0ZXh0KTsKICAgICBQeU9iamVjdCAqZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CiAgICAgUHlPYmplY3QgKm1vZHVsZSA9IE5VTEw7CkBAIC04MTAsMTggKzg5MCwxMiBAQAogICAgICAgICBnb3RvIGV4aXQ7CiAgICAgaWYgKG1vZHVsZV9zdHIgIT0gTlVMTCkgewogICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2R1bGVfc3RyKTsKLSAgICAgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgIGlmIChtb2R1bGUgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAKLSAgICBpZiAoY2F0ZWdvcnkgPT0gTlVMTCkKLSAgICAgICAgY2F0ZWdvcnkgPSBQeUV4Y19SdW50aW1lV2FybmluZzsKLSAgICByZXMgPSB3YXJuX2V4cGxpY2l0KGNhdGVnb3J5LCBtZXNzYWdlLCBmaWxlbmFtZSwgbGluZW5vLCBtb2R1bGUsIHJlZ2lzdHJ5LAotICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgaWYgKHJlcyA9PSBOVUxMKQotICAgICAgICBnb3RvIGV4aXQ7Ci0gICAgUHlfREVDUkVGKHJlcyk7Ci0gICAgcmV0ID0gMDsKKyAgICByZXQgPSBQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSwgcmVnaXN0cnkpOwogCiAgZXhpdDoKICAgICBQeV9YREVDUkVGKG1lc3NhZ2UpOwpAQCAtODMwLDYgKzkwNCw0OSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKK2ludAorUHlFcnJfV2FybkV4cGxpY2l0Rm9ybWF0KFB5T2JqZWN0ICpjYXRlZ29yeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbW9kdWxlX3N0ciwgUHlPYmplY3QgKnJlZ2lzdHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworICAgIFB5T2JqZWN0ICptZXNzYWdlOworICAgIFB5T2JqZWN0ICptb2R1bGUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpbnQgcmV0ID0gLTE7CisgICAgdmFfbGlzdCB2YXJnczsKKworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgaWYgKG1vZHVsZV9zdHIgIT0gTlVMTCkgeworICAgICAgICBtb2R1bGUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtb2R1bGVfc3RyKTsKKyAgICAgICAgaWYgKG1vZHVsZSA9PSBOVUxMKQorICAgICAgICAgICAgZ290byBleGl0OworICAgIH0KKworI2lmZGVmIEhBVkVfU1REQVJHX1BST1RPVFlQRVMKKyAgICB2YV9zdGFydCh2YXJncywgZm9ybWF0KTsKKyNlbHNlCisgICAgdmFfc3RhcnQodmFyZ3MpOworI2VuZGlmCisgICAgbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0Vihmb3JtYXQsIHZhcmdzKTsKKyAgICBpZiAobWVzc2FnZSAhPSBOVUxMKSB7CisgICAgICAgIFB5T2JqZWN0ICpyZXM7CisgICAgICAgIHJlcyA9IHdhcm5fZXhwbGljaXQoY2F0ZWdvcnksIG1lc3NhZ2UsIGZpbGVuYW1lLCBsaW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlLCByZWdpc3RyeSwgTlVMTCk7CisgICAgICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKKyAgICAgICAgaWYgKHJlcyAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgICAgIHJldCA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgdmFfZW5kKHZhcmdzKTsKK2V4aXQ6CisgICAgUHlfWERFQ1JFRihtb2R1bGUpOworICAgIFB5X1hERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiByZXQ7Cit9CisKIAogUHlEb2NfU1RSVkFSKHdhcm5fZG9jLAogIklzc3VlIGEgd2FybmluZywgb3IgbWF5YmUgaWdub3JlIGl0IG9yIHJhaXNlIGFuIGV4Y2VwdGlvbi4iKTsKQEAgLTg0Miw2ICs5NTksOCBAQAogICAgICAgICB3YXJuX2RvY30sCiAgICAgeyJ3YXJuX2V4cGxpY2l0IiwgKFB5Q0Z1bmN0aW9uKXdhcm5pbmdzX3dhcm5fZXhwbGljaXQsCiAgICAgICAgIE1FVEhfVkFSQVJHUyB8IE1FVEhfS0VZV09SRFMsIHdhcm5fZXhwbGljaXRfZG9jfSwKKyAgICB7Il9maWx0ZXJzX211dGF0ZWQiLCAoUHlDRnVuY3Rpb24pd2FybmluZ3NfZmlsdGVyc19tdXRhdGVkLCBNRVRIX05PQVJHUywKKyAgICAgICAgTlVMTH0sCiAgICAgLyogWFhYKGJyZXR0LmNhbm5vbik6IGFkZCBzaG93d2FybmluZz8gKi8KICAgICAvKiBYWFgoYnJldHQuY2Fubm9uKTogUmVhc29uYWJsZSB0byBhZGQgZm9ybWF0d2FybmluZz8gKi8KICAgICB7TlVMTCwgTlVMTH0gICAgICAgICAgICAgICAgLyogc2VudGluZWwgKi8KQEAgLTk5NCw1ICsxMTEzLDcgQEAKICAgICBQeV9JTkNSRUYoX2RlZmF1bHRfYWN0aW9uKTsKICAgICBpZiAoUHlNb2R1bGVfQWRkT2JqZWN0KG0sICJfZGVmYXVsdGFjdGlvbiIsIF9kZWZhdWx0X2FjdGlvbikgPCAwKQogICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIF9maWx0ZXJzX3ZlcnNpb24gPSAwOwogICAgIHJldHVybiBtOwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2FzZGwuYyBiL1B5dGhvbi9hc2RsLmMKaW5kZXggZTdlMzI4MC4uNzRmYTk0MSAxMDA2NDQKLS0tIGEvUHl0aG9uL2FzZGwuYworKysgYi9QeXRob24vYXNkbC5jCkBAIC0yLDcgKzIsNyBAQAogI2luY2x1ZGUgImFzZGwuaCIKIAogYXNkbF9zZXEgKgotYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCitfUHlfYXNkbF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgYXNkbF9zZXEgKnNlcSA9IE5VTEw7CiAgICAgc2l6ZV90IG4gPSAoc2l6ZSA/IChzaXplb2Yodm9pZCAqKSAqIChzaXplIC0gMSkpIDogMCk7CkBAIC0zMyw3ICszMyw3IEBACiB9CiAKIGFzZGxfaW50X3NlcSAqCi1hc2RsX2ludF9zZXFfbmV3KFB5X3NzaXplX3Qgc2l6ZSwgUHlBcmVuYSAqYXJlbmEpCitfUHlfYXNkbF9pbnRfc2VxX25ldyhQeV9zc2l6ZV90IHNpemUsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIGFzZGxfaW50X3NlcSAqc2VxID0gTlVMTDsKICAgICBzaXplX3QgbiA9IChzaXplID8gKHNpemVvZih2b2lkICopICogKHNpemUgLSAxKSkgOiAwKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9hc3QuYyBiL1B5dGhvbi9hc3QuYwppbmRleCA5YTBiMDY0Li5kNTBjYjgwIDEwMDY0NAotLS0gYS9QeXRob24vYXN0LmMKKysrIGIvUHl0aG9uL2FzdC5jCkBAIC0xMDksMjIgKzEwOSwxNCBAQAogewogICAgIGlmICghdmFsaWRhdGVfYXJncyhhcmdzLT5hcmdzKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24pIHsKLSAgICAgICAgaWYgKCFhcmdzLT52YXJhcmcpIHsKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAidmFyYXJnYW5ub3RhdGlvbiBidXQgbm8gdmFyYXJnIG9uIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZV9leHByKGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24sIExvYWQpKQorICAgIGlmIChhcmdzLT52YXJhcmcgJiYgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uCisgICAgICAgICYmICF2YWxpZGF0ZV9leHByKGFyZ3MtPnZhcmFyZy0+YW5ub3RhdGlvbiwgTG9hZCkpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAoIXZhbGlkYXRlX2FyZ3MoYXJncy0+a3dvbmx5YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhcmdzLT5rd2FyZ2Fubm90YXRpb24pIHsKLSAgICAgICAgaWYgKCFhcmdzLT5rd2FyZykgewotICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJrd2FyZ2Fubm90YXRpb24gYnV0IG5vIGt3YXJnIG9uIGFyZ3VtZW50cyIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCF2YWxpZGF0ZV9leHByKGFyZ3MtPmt3YXJnYW5ub3RhdGlvbiwgTG9hZCkpCisgICAgaWYgKGFyZ3MtPmt3YXJnICYmIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uIAorICAgICAgICAmJiAhdmFsaWRhdGVfZXhwcihhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiwgTG9hZCkpIHsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBpZiAoYXNkbF9zZXFfTEVOKGFyZ3MtPmRlZmF1bHRzKSA+IGFzZGxfc2VxX0xFTihhcmdzLT5hcmdzKSkgewpAQCAtMjgyLDYgKzI3NCw3IEBACiAgICAgICAgIHJldHVybiB2YWxpZGF0ZV9leHBycyhleHAtPnYuVHVwbGUuZWx0cywgY3R4LCAwKTsKICAgICAvKiBUaGVzZSBsYXN0IGNhc2VzIGRvbid0IGhhdmUgYW55IGNoZWNraW5nLiAqLwogICAgIGNhc2UgTmFtZV9raW5kOgorICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CiAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICByZXR1cm4gMTsKICAgICBkZWZhdWx0OgpAQCAtNDk4LDcgKzQ5MSw3IEBACiBzdHJ1Y3QgY29tcGlsaW5nIHsKICAgICBjaGFyICpjX2VuY29kaW5nOyAvKiBzb3VyY2UgZW5jb2RpbmcgKi8KICAgICBQeUFyZW5hICpjX2FyZW5hOyAvKiBhcmVuYSBmb3IgYWxsb2NhdGluZyBtZW1lb3J5ICovCi0gICAgY29uc3QgY2hhciAqY19maWxlbmFtZTsgLyogZmlsZW5hbWUgKi8KKyAgICBQeU9iamVjdCAqY19maWxlbmFtZTsgLyogZmlsZW5hbWUgKi8KICAgICBQeU9iamVjdCAqY19ub3JtYWxpemU7IC8qIE5vcm1hbGl6YXRpb24gZnVuY3Rpb24gZnJvbSB1bmljb2RlZGF0YS4gKi8KICAgICBQeU9iamVjdCAqY19ub3JtYWxpemVfYXJnczsgLyogTm9ybWFsaXphdGlvbiBhcmd1bWVudCB0dXBsZS4gKi8KIH07CkBAIC01NjcsNyArNTYwLDEwIEBACiAgICAgICAgIGlkID0gaWQyOwogICAgIH0KICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmaWQpOwotICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgaWQpOworICAgIGlmIChQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIGlkKSA8IDApIHsKKyAgICAgICAgUHlfREVDUkVGKGlkKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHJldHVybiBpZDsKIH0KIApAQCAtNTc3LDI0ICs1NzMsMTMgQEAKIGFzdF9lcnJvcihzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBub2RlICpuLCBjb25zdCBjaGFyICplcnJtc2cpCiB7CiAgICAgUHlPYmplY3QgKnZhbHVlLCAqZXJyc3RyLCAqbG9jLCAqdG1wOwotICAgIFB5T2JqZWN0ICpmaWxlbmFtZV9vYmo7CiAKLSAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dChjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obikpOworICAgIGxvYyA9IFB5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KGMtPmNfZmlsZW5hbWUsIExJTkVOTyhuKSk7CiAgICAgaWYgKCFsb2MpIHsKICAgICAgICAgUHlfSU5DUkVGKFB5X05vbmUpOwogICAgICAgICBsb2MgPSBQeV9Ob25lOwogICAgIH0KLSAgICBpZiAoYy0+Y19maWxlbmFtZSkgewotICAgICAgICBmaWxlbmFtZV9vYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGMtPmNfZmlsZW5hbWUpOwotICAgICAgICBpZiAoIWZpbGVuYW1lX29iaikgewotICAgICAgICAgICAgUHlfREVDUkVGKGxvYyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKLSAgICAgICAgZmlsZW5hbWVfb2JqID0gUHlfTm9uZTsKLSAgICB9Ci0gICAgdG1wID0gUHlfQnVpbGRWYWx1ZSgiKE5paU4pIiwgZmlsZW5hbWVfb2JqLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgbG9jKTsKKyAgICB0bXAgPSBQeV9CdWlsZFZhbHVlKCIoT2lpTikiLCBjLT5jX2ZpbGVuYW1lLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgbG9jKTsKICAgICBpZiAoIXRtcCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZXJyc3RyID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZXJybXNnKTsKQEAgLTY3Nyw4ICs2NjIsOCBAQAogKi8KIAogbW9kX3R5Ci1QeUFTVF9Gcm9tTm9kZShjb25zdCBub2RlICpuLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKLSAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQorUHlBU1RfRnJvbU5vZGVPYmplY3QoY29uc3Qgbm9kZSAqbiwgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgaW50IGksIGosIGssIG51bTsKICAgICBhc2RsX3NlcSAqc3RtdHMgPSBOVUxMOwpAQCAtNjg4LDYgKzY3Myw3IEBACiAgICAgbW9kX3R5IHJlcyA9IE5VTEw7CiAKICAgICBjLmNfYXJlbmEgPSBhcmVuYTsKKyAgICAvKiBib3Jyb3dlZCByZWZlcmVuY2UgKi8KICAgICBjLmNfZmlsZW5hbWUgPSBmaWxlbmFtZTsKICAgICBjLmNfbm9ybWFsaXplID0gYy5jX25vcm1hbGl6ZV9hcmdzID0gTlVMTDsKICAgICBpZiAoZmxhZ3MgJiYgZmxhZ3MtPmNmX2ZsYWdzICYgUHlDRl9TT1VSQ0VfSVNfVVRGOCkgewpAQCAtNzEwLDcgKzY5Niw3IEBACiAgICAgayA9IDA7CiAgICAgc3dpdGNoIChUWVBFKG4pKSB7CiAgICAgICAgIGNhc2UgZmlsZV9pbnB1dDoKLSAgICAgICAgICAgIHN0bXRzID0gYXNkbF9zZXFfbmV3KG51bV9zdG10cyhuKSwgYXJlbmEpOworICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KG51bV9zdG10cyhuKSwgYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobikgLSAxOyBpKyspIHsKQEAgLTc1MCw3ICs3MzYsNyBAQAogICAgICAgICB9CiAgICAgICAgIGNhc2Ugc2luZ2xlX2lucHV0OgogICAgICAgICAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IE5FV0xJTkUpIHsKLSAgICAgICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldygxLCBhcmVuYSk7CisgICAgICAgICAgICAgICAgc3RtdHMgPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGFyZW5hKTsKICAgICAgICAgICAgICAgICBpZiAoIXN0bXRzKQogICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAgICAgICBhc2RsX3NlcV9TRVQoc3RtdHMsIDAsIFBhc3Mobi0+bl9saW5lbm8sIG4tPm5fY29sX29mZnNldCwKQEAgLTc2Miw3ICs3NDgsNyBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgICAgICAgICAgICAgIG51bSA9IG51bV9zdG10cyhuKTsKLSAgICAgICAgICAgICAgICBzdG10cyA9IGFzZGxfc2VxX25ldyhudW0sIGFyZW5hKTsKKyAgICAgICAgICAgICAgICBzdG10cyA9IF9QeV9hc2RsX3NlcV9uZXcobnVtLCBhcmVuYSk7CiAgICAgICAgICAgICAgICAgaWYgKCFzdG10cykKICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7CiAgICAgICAgICAgICAgICAgaWYgKG51bSA9PSAxKSB7CkBAIC04MDEsNiArNzg3LDIxIEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAorbW9kX3R5CitQeUFTVF9Gcm9tTm9kZShjb25zdCBub2RlICpuLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsCisgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBtb2RfdHkgbW9kOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3QobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gbW9kOworCit9CisKIC8qIFJldHVybiB0aGUgQVNUIHJlcHIuIG9mIHRoZSBvcGVyYXRvciByZXByZXNlbnRlZCBhcyBzeW50YXggKHwsIF4sIGV0Yy4pCiAqLwogCkBAIC05MDMsNyArOTA0LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE5hbWVfa2luZDoKICAgICAgICAgICAgIGlmIChjdHggPT0gU3RvcmUpIHsKLSAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgZS0+di5OYW1lLmlkLCBuLCAxKSkKKyAgICAgICAgICAgICAgICBpZiAoZm9yYmlkZGVuX25hbWUoYywgZS0+di5OYW1lLmlkLCBuLCAwKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7IC8qIGZvcmJpZGRlbl9uYW1lKCkgY2FsbHMgYXN0X2Vycm9yKCkgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGUtPnYuTmFtZS5jdHggPSBjdHg7CkBAIC05NTUsNiArOTU2LDkgQEAKICAgICAgICAgY2FzZSBCeXRlc19raW5kOgogICAgICAgICAgICAgZXhwcl9uYW1lID0gImxpdGVyYWwiOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CisgICAgICAgICAgICBleHByX25hbWUgPSAia2V5d29yZCI7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBFbGxpcHNpc19raW5kOgogICAgICAgICAgICAgZXhwcl9uYW1lID0gIkVsbGlwc2lzIjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTA5NSw3ICsxMDk5LDcgQEAKICAgICBpbnQgaTsKICAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZXN0bGlzdCB8fCBUWVBFKG4pID09IHRlc3RsaXN0X3N0YXJfZXhwciB8fCBUWVBFKG4pID09IHRlc3RsaXN0X2NvbXApOwogCi0gICAgc2VxID0gYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOworICAgIHNlcSA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMTE5LDYgKzExMjMsNyBAQAogICAgIGlkZW50aWZpZXIgbmFtZTsKICAgICBleHByX3R5IGFubm90YXRpb24gPSBOVUxMOwogICAgIG5vZGUgKmNoOworICAgIGFyZ190eSByZXQ7CiAKICAgICBhc3NlcnQoVFlQRShuKSA9PSB0ZnBkZWYgfHwgVFlQRShuKSA9PSB2ZnBkZWYpOwogICAgIGNoID0gQ0hJTEQobiwgMCk7CkBAIC0xMTM0LDcgKzExMzksMTIgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHJldHVybiBhcmcobmFtZSwgYW5ub3RhdGlvbiwgYy0+Y19hcmVuYSk7CisgICAgcmV0ID0gYXJnKG5hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOworICAgIGlmICghcmV0KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICByZXQtPmxpbmVubyA9IExJTkVOTyhuKTsKKyAgICByZXQtPmNvbF9vZmZzZXQgPSBuLT5uX2NvbF9vZmZzZXQ7CisgICAgcmV0dXJuIHJldDsKIH0KIAogLyogcmV0dXJucyAtMSBpZiBmYWlsZWQgdG8gaGFuZGxlIGtleXdvcmQgb25seSBhcmd1bWVudHMKQEAgLTExOTIsNiArMTIwMiw4IEBACiAgICAgICAgICAgICAgICAgYXJnID0gYXJnKGFyZ25hbWUsIGFubm90YXRpb24sIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghYXJnKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIGFyZy0+bGluZW5vID0gTElORU5PKGNoKTsKKyAgICAgICAgICAgICAgICBhcmctPmNvbF9vZmZzZXQgPSBjaC0+bl9jb2xfb2Zmc2V0OwogICAgICAgICAgICAgICAgIGFzZGxfc2VxX1NFVChrd29ubHlhcmdzLCBqKyssIGFyZyk7CiAgICAgICAgICAgICAgICAgaSArPSAyOyAvKiB0aGUgbmFtZSBhbmQgdGhlIGNvbW1hICovCiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjMwLDE1ICsxMjQyLDEzIEBACiAgICAgaW50IGksIGosIGssIG5wb3NhcmdzID0gMCwgbmt3b25seWFyZ3MgPSAwOwogICAgIGludCBucG9zZGVmYXVsdHMgPSAwLCBmb3VuZF9kZWZhdWx0ID0gMDsKICAgICBhc2RsX3NlcSAqcG9zYXJncywgKnBvc2RlZmF1bHRzLCAqa3dvbmx5YXJncywgKmt3ZGVmYXVsdHM7Ci0gICAgaWRlbnRpZmllciB2YXJhcmcgPSBOVUxMLCBrd2FyZyA9IE5VTEw7CisgICAgYXJnX3R5IHZhcmFyZyA9IE5VTEwsIGt3YXJnID0gTlVMTDsKICAgICBhcmdfdHkgYXJnOwotICAgIGV4cHJfdHkgdmFyYXJnYW5ub3RhdGlvbiA9IE5VTEwsIGt3YXJnYW5ub3RhdGlvbiA9IE5VTEw7CiAgICAgbm9kZSAqY2g7CiAKICAgICBpZiAoVFlQRShuKSA9PSBwYXJhbWV0ZXJzKSB7CiAgICAgICAgIGlmIChOQ0gobikgPT0gMikgLyogKCkgYXMgYXJndW1lbnQgbGlzdCAqLwotICAgICAgICAgICAgcmV0dXJuIGFyZ3VtZW50cyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHJldHVybiBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIG4gPSBDSElMRChuLCAxKTsKICAgICB9CiAgICAgYXNzZXJ0KFRZUEUobikgPT0gdHlwZWRhcmdzbGlzdCB8fCBUWVBFKG4pID09IHZhcmFyZ3NsaXN0KTsKQEAgLTEyNzAsMjIgKzEyODAsMjIgQEAKICAgICAgICAgaWYgKFRZUEUoY2gpID09IERPVUJMRVNUQVIpIGJyZWFrOwogICAgICAgICBpZiAoVFlQRShjaCkgPT0gdGZwZGVmIHx8IFRZUEUoY2gpID09IHZmcGRlZikgbmt3b25seWFyZ3MrKzsKICAgICB9Ci0gICAgcG9zYXJncyA9IChucG9zYXJncyA/IGFzZGxfc2VxX25ldyhucG9zYXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICBwb3NhcmdzID0gKG5wb3NhcmdzID8gX1B5X2FzZGxfc2VxX25ldyhucG9zYXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIXBvc2FyZ3MgJiYgbnBvc2FyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGt3b25seWFyZ3MgPSAobmt3b25seWFyZ3MgPwotICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICBfUHlfYXNkbF9zZXFfbmV3KG5rd29ubHlhcmdzLCBjLT5jX2FyZW5hKSA6IE5VTEwpOwogICAgIGlmICgha3dvbmx5YXJncyAmJiBua3dvbmx5YXJncykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcG9zZGVmYXVsdHMgPSAobnBvc2RlZmF1bHRzID8KLSAgICAgICAgICAgICAgICAgICAgYXNkbF9zZXFfbmV3KG5wb3NkZWZhdWx0cywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgX1B5X2FzZGxfc2VxX25ldyhucG9zZGVmYXVsdHMsIGMtPmNfYXJlbmEpIDogTlVMTCk7CiAgICAgaWYgKCFwb3NkZWZhdWx0cyAmJiBucG9zZGVmYXVsdHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIC8qIFRoZSBsZW5ndGggb2Yga3dvbmx5YXJncyBhbmQga3dkZWZhdWx0cyBhcmUgc2FtZQogICAgICAgIHNpbmNlIHdlIHNldCBOVUxMIGFzIGRlZmF1bHQgZm9yIGtleXdvcmQgb25seSBhcmd1bWVudCB3L28gZGVmYXVsdAogICAgICAgIC0gd2UgaGF2ZSBzZXF1ZW5jZSBkYXRhIHN0cnVjdHVyZSwgYnV0IG5vIGRpY3Rpb25hcnkgKi8KICAgICBrd2RlZmF1bHRzID0gKG5rd29ubHlhcmdzID8KLSAgICAgICAgICAgICAgICAgICBhc2RsX3NlcV9uZXcobmt3b25seWFyZ3MsIGMtPmNfYXJlbmEpIDogTlVMTCk7CisgICAgICAgICAgICAgICAgICAgX1B5X2FzZGxfc2VxX25ldyhua3dvbmx5YXJncywgYy0+Y19hcmVuYSkgOiBOVUxMKTsKICAgICBpZiAoIWt3ZGVmYXVsdHMgJiYgbmt3b25seWFyZ3MpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xMzQ0LDE3ICsxMzU0LDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGkgPSByZXM7IC8qIHJlcyBoYXMgbmV3IHBvc2l0aW9uIHRvIHByb2Nlc3MgKi8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHZhcmFyZyA9IE5FV19JREVOVElGSUVSKENISUxEKGNoLCAwKSk7CisgICAgICAgICAgICAgICAgICAgIHZhcmFyZyA9IGFzdF9mb3JfYXJnKGMsIGNoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJhcmcpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIHZhcmFyZywgQ0hJTEQoY2gsIDApLCAwKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICBpZiAoTkNIKGNoKSA+IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRoZXJlIGlzIGFuIGFubm90YXRpb24gb24gdGhlIHZhcmFyZyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdmFyYXJnYW5ub3RhdGlvbiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChjaCwgMikpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YXJhcmdhbm5vdGF0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICAgICAgaSArPSAzOwogICAgICAgICAgICAgICAgICAgICBpZiAoaSA8IE5DSChuKSAmJiAoVFlQRShDSElMRChuLCBpKSkgPT0gdGZwZGVmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBUWVBFKENISUxEKG4sIGkpKSA9PSB2ZnBkZWYpKSB7CkBAIC0xMzY5LDE3ICsxMzcyLDkgQEAKICAgICAgICAgICAgIGNhc2UgRE9VQkxFU1RBUjoKICAgICAgICAgICAgICAgICBjaCA9IENISUxEKG4sIGkrMSk7ICAvKiB0ZnBkZWYgKi8KICAgICAgICAgICAgICAgICBhc3NlcnQoVFlQRShjaCkgPT0gdGZwZGVmIHx8IFRZUEUoY2gpID09IHZmcGRlZik7Ci0gICAgICAgICAgICAgICAga3dhcmcgPSBORVdfSURFTlRJRklFUihDSElMRChjaCwgMCkpOworICAgICAgICAgICAgICAgIGt3YXJnID0gYXN0X2Zvcl9hcmcoYywgY2gpOwogICAgICAgICAgICAgICAgIGlmICgha3dhcmcpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIGlmIChOQ0goY2gpID4gMSkgewotICAgICAgICAgICAgICAgICAgICAvKiB0aGVyZSBpcyBhbiBhbm5vdGF0aW9uIG9uIHRoZSBrd2FyZyAqLwotICAgICAgICAgICAgICAgICAgICBrd2FyZ2Fubm90YXRpb24gPSBhc3RfZm9yX2V4cHIoYywgQ0hJTEQoY2gsIDIpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFrd2FyZ2Fubm90YXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGZvcmJpZGRlbl9uYW1lKGMsIGt3YXJnLCBDSElMRChjaCwgMCksIDApKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBpICs9IDM7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTM4OSw4ICsxMzg0LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gYXJndW1lbnRzKHBvc2FyZ3MsIHZhcmFyZywgdmFyYXJnYW5ub3RhdGlvbiwga3dvbmx5YXJncywga3dhcmcsCi0gICAgICAgICAgICAgICAgICAgIGt3YXJnYW5ub3RhdGlvbiwgcG9zZGVmYXVsdHMsIGt3ZGVmYXVsdHMsIGMtPmNfYXJlbmEpOworICAgIHJldHVybiBhcmd1bWVudHMocG9zYXJncywgdmFyYXJnLCBrd29ubHlhcmdzLCBrd2RlZmF1bHRzLCBrd2FyZywgcG9zZGVmYXVsdHMsIGMtPmNfYXJlbmEpOwogfQogCiBzdGF0aWMgZXhwcl90eQpAQCAtMTQ2OSw3ICsxNDYzLDcgQEAKICAgICBpbnQgaTsKIAogICAgIFJFUShuLCBkZWNvcmF0b3JzKTsKLSAgICBkZWNvcmF0b3Jfc2VxID0gYXNkbF9zZXFfbmV3KE5DSChuKSwgYy0+Y19hcmVuYSk7CisgICAgZGVjb3JhdG9yX3NlcSA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWRlY29yYXRvcl9zZXEpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNTU1LDggKzE1NDksNyBAQAogICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKIAogICAgIGlmIChOQ0gobikgPT0gMykgewotICAgICAgICBhcmdzID0gYXJndW1lbnRzKE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFyZ3MgPSBhcmd1bWVudHMoTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghYXJncykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIDIpKTsKQEAgLTE2NjYsNyArMTY1OSw3IEBACiAgICAgaWYgKG5fZm9ycyA9PSAtMSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBjb21wcyA9IGFzZGxfc2VxX25ldyhuX2ZvcnMsIGMtPmNfYXJlbmEpOworICAgIGNvbXBzID0gX1B5X2FzZGxfc2VxX25ldyhuX2ZvcnMsIGMtPmNfYXJlbmEpOwogICAgIGlmICghY29tcHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCkBAIC0xNzA3LDcgKzE3MDAsNyBAQAogICAgICAgICAgICAgaWYgKG5faWZzID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICBpZnMgPSBhc2RsX3NlcV9uZXcobl9pZnMsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgaWZzID0gX1B5X2FzZGxfc2VxX25ldyhuX2lmcywgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWlmcykKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTgxOSwxMSArMTgxMiwyMSBAQAogCiAgICAgc3dpdGNoIChUWVBFKGNoKSkgewogICAgIGNhc2UgTkFNRTogewotICAgICAgICAvKiBBbGwgbmFtZXMgc3RhcnQgaW4gTG9hZCBjb250ZXh0LCBidXQgbWF5IGxhdGVyIGJlCi0gICAgICAgICAgIGNoYW5nZWQuICovCi0gICAgICAgIFB5T2JqZWN0ICpuYW1lID0gTkVXX0lERU5USUZJRVIoY2gpOworICAgICAgICBQeU9iamVjdCAqbmFtZTsKKyAgICAgICAgY29uc3QgY2hhciAqcyA9IFNUUihjaCk7CisgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4ocyk7CisgICAgICAgIGlmIChsZW4gPj0gNCAmJiBsZW4gPD0gNSkgeworICAgICAgICAgICAgaWYgKCFzdHJjbXAocywgIk5vbmUiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnN0YW50KFB5X05vbmUsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGlmICghc3RyY21wKHMsICJUcnVlIikpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5hbWVDb25zdGFudChQeV9UcnVlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBpZiAoIXN0cmNtcChzLCAiRmFsc2UiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTmFtZUNvbnN0YW50KFB5X0ZhbHNlLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CisgICAgICAgIH0KKyAgICAgICAgbmFtZSA9IG5ld19pZGVudGlmaWVyKHMsIGMpOwogICAgICAgICBpZiAoIW5hbWUpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgLyogQWxsIG5hbWVzIHN0YXJ0IGluIExvYWQgY29udGV4dCwgYnV0IG1heSBsYXRlciBiZSBjaGFuZ2VkLiAqLwogICAgICAgICByZXR1cm4gTmFtZShuYW1lLCBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgfQogICAgIGNhc2UgU1RSSU5HOiB7CkBAIC0xODQ4LDEyICsxODUxLDE1IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFzdF9lcnJvcihjLCBuLCBidWYpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih0eXBlKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgICAgIFB5X1hERUNSRUYodGJhY2spOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpOworICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgUHlfREVDUkVGKHN0cik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBpZiAoYnl0ZXNtb2RlKQogICAgICAgICAgICAgcmV0dXJuIEJ5dGVzKHN0ciwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgICAgICBlbHNlCkBAIC0xODY0LDcgKzE4NzAsMTAgQEAKICAgICAgICAgaWYgKCFweW51bSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgcHludW0pOworICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBweW51bSkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYocHludW0pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIE51bShweW51bSwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICBjYXNlIEVMTElQU0lTOiAvKiBFbGxpcHNpcyAqLwpAQCAtMTkxMyw3ICsxOTIyLDcgQEAKICAgICAgICAgICAgIC8qIGl0J3MgYSBzaW1wbGUgc2V0ICovCiAgICAgICAgICAgICBhc2RsX3NlcSAqZWx0czsKICAgICAgICAgICAgIHNpemUgPSAoTkNIKGNoKSArIDEpIC8gMjsgLyogKzEgaW4gY2FzZSBubyB0cmFpbGluZyBjb21tYSAqLwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGVsdHMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFlbHRzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5DSChjaCk7IGkgKz0gMikgewpAQCAtMTkzMiwxMSArMTk0MSwxMSBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyogaXQncyBhIGRpY3QgKi8KICAgICAgICAgICAgIHNpemUgPSAoTkNIKGNoKSArIDEpIC8gNDsgLyogKzEgaW4gY2FzZSBubyB0cmFpbGluZyBjb21tYSAqLwotICAgICAgICAgICAga2V5cyA9IGFzZGxfc2VxX25ldyhzaXplLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGtleXMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFrZXlzKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgICAgICAgICB2YWx1ZXMgPSBhc2RsX3NlcV9uZXcoc2l6ZSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICB2YWx1ZXMgPSBfUHlfYXNkbF9zZXFfbmV3KHNpemUsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCF2YWx1ZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTIwOTYsNyArMjEwNSw3IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJldHVybiBhc3RfZm9yX2NhbGwoYywgQ0hJTEQobiwgMSksIGxlZnRfZXhwcik7CiAgICAgfQotICAgIGVsc2UgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IERPVCApIHsKKyAgICBlbHNlIGlmIChUWVBFKENISUxEKG4sIDApKSA9PSBET1QpIHsKICAgICAgICAgUHlPYmplY3QgKmF0dHJfaWQgPSBORVdfSURFTlRJRklFUihDSElMRChuLCAxKSk7CiAgICAgICAgIGlmICghYXR0cl9pZCkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjEyNCw3ICsyMTMzLDcgQEAKICAgICAgICAgICAgIGV4cHJfdHkgZTsKICAgICAgICAgICAgIGludCBzaW1wbGUgPSAxOwogICAgICAgICAgICAgYXNkbF9zZXEgKnNsaWNlcywgKmVsdHM7Ci0gICAgICAgICAgICBzbGljZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBzbGljZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFzbGljZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgTkNIKG4pOyBqICs9IDIpIHsKQEAgLTIxNDAsNyArMjE0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2FkLCBMSU5FTk8obiksIG4tPm5fY29sX29mZnNldCwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBleHRyYWN0IEluZGV4IHZhbHVlcyBhbmQgcHV0IHRoZW0gaW4gYSBUdXBsZSAqLwotICAgICAgICAgICAgZWx0cyA9IGFzZGxfc2VxX25ldyhhc2RsX3NlcV9MRU4oc2xpY2VzKSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBlbHRzID0gX1B5X2FzZGxfc2VxX25ldyhhc2RsX3NlcV9MRU4oc2xpY2VzKSwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIWVsdHMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXNkbF9zZXFfTEVOKHNsaWNlcyk7ICsraikgewpAQCAtMjIxMCwxMCArMjIxOSw3IEBACiAgICAgICAgIGV4cHJfdHkgZiA9IGFzdF9mb3JfZXhwcihjLCBDSElMRChuLCBOQ0gobikgLSAxKSk7CiAgICAgICAgIGlmICghZikKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB0bXAgPSBCaW5PcChlLCBQb3csIGYsIExJTkVOTyhuKSwgbi0+bl9jb2xfb2Zmc2V0LCBjLT5jX2FyZW5hKTsKLSAgICAgICAgaWYgKCF0bXApCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgZSA9IHRtcDsKKyAgICAgICAgZSA9IEJpbk9wKGUsIFBvdywgZiwgTElORU5PKG4pLCBuLT5uX2NvbF9vZmZzZXQsIGMtPmNfYXJlbmEpOwogICAgIH0KICAgICByZXR1cm4gZTsKIH0KQEAgLTIyNzUsNyArMjI4MSw3IEBACiAgICAgICAgICAgICAgICAgbiA9IENISUxEKG4sIDApOwogICAgICAgICAgICAgICAgIGdvdG8gbG9vcDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIHNlcSA9IF9QeV9hc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgICAgICBpZiAoIXNlcSkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMjMxMSwxMCArMjMxNywxMCBAQAogICAgICAgICAgICAgICAgIGV4cHJfdHkgZXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICBhc2RsX2ludF9zZXEgKm9wczsKICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqY21wczsKLSAgICAgICAgICAgICAgICBvcHMgPSBhc2RsX2ludF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIG9wcyA9IF9QeV9hc2RsX2ludF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghb3BzKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgICAgICBjbXBzID0gYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOworICAgICAgICAgICAgICAgIGNtcHMgPSBfUHlfYXNkbF9zZXFfbmV3KE5DSChuKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgICAgIGlmICghY21wcykgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICB9CkBAIC0yNDQwLDEwICsyNDQ2LDEwIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGFyZ3MgPSBhc2RsX3NlcV9uZXcobmFyZ3MgKyBuZ2VucywgYy0+Y19hcmVuYSk7CisgICAgYXJncyA9IF9QeV9hc2RsX3NlcV9uZXcobmFyZ3MgKyBuZ2VucywgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFhcmdzKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBrZXl3b3JkcyA9IGFzZGxfc2VxX25ldyhua2V5d29yZHMsIGMtPmNfYXJlbmEpOworICAgIGtleXdvcmRzID0gX1B5X2FzZGxfc2VxX25ldyhua2V5d29yZHMsIGMtPmNfYXJlbmEpOwogICAgIGlmICgha2V5d29yZHMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5hcmdzID0gMDsKQEAgLTI2MjAsNyArMjYyNiw3IEBACiAKICAgICAgICAgLyogYSBub3JtYWwgYXNzaWdubWVudCAqLwogICAgICAgICBSRVEoQ0hJTEQobiwgMSksIEVRVUFMKTsKLSAgICAgICAgdGFyZ2V0cyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgdGFyZ2V0cyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGlmICghdGFyZ2V0cykKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pIC0gMjsgaSArPSAyKSB7CkBAIC0yNjYxLDcgKzI2NjcsNyBAQAogCiAgICAgUkVRKG4sIGV4cHJsaXN0KTsKIAotICAgIHNlcSA9IGFzZGxfc2VxX25ldygoTkNIKG4pICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgIGlmICghc2VxKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTI4NDYsMTMgKzI4NTIsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAgICAgc3RyID0gdW5pOwogICAgICAgICAgICAgICAgIFB5VW5pY29kZV9JbnRlcm5JblBsYWNlKCZzdHIpOwotICAgICAgICAgICAgICAgIFB5QXJlbmFfQWRkUHlPYmplY3QoYy0+Y19hcmVuYSwgc3RyKTsKKyAgICAgICAgICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBhbGlhcyhzdHIsIE5VTEwsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU1RBUjoKICAgICAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCIqIik7Ci0gICAgICAgICAgICBQeUFyZW5hX0FkZFB5T2JqZWN0KGMtPmNfYXJlbmEsIHN0cik7CisgICAgICAgICAgICBpZiAoUHlBcmVuYV9BZGRQeU9iamVjdChjLT5jX2FyZW5hLCBzdHIpIDwgMCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFsaWFzKHN0ciwgTlVMTCwgYy0+Y19hcmVuYSk7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC0yODg1LDcgKzI4OTcsNyBAQAogICAgIGlmIChUWVBFKG4pID09IGltcG9ydF9uYW1lKSB7CiAgICAgICAgIG4gPSBDSElMRChuLCAxKTsKICAgICAgICAgUkVRKG4sIGRvdHRlZF9hc19uYW1lcyk7Ci0gICAgICAgIGFsaWFzZXMgPSBhc2RsX3NlcV9uZXcoKE5DSChuKSArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFsaWFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChOQ0gobikgKyAxKSAvIDIsIGMtPmNfYXJlbmEpOwogICAgICAgICBpZiAoIWFsaWFzZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMjk0Nyw3ICsyOTU5LDcgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAgICAgYWxpYXNlcyA9IGFzZGxfc2VxX25ldygobl9jaGlsZHJlbiArIDEpIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgICAgIGFsaWFzZXMgPSBfUHlfYXNkbF9zZXFfbmV3KChuX2NoaWxkcmVuICsgMSkgLyAyLCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKCFhbGlhc2VzKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTI5ODYsNyArMjk5OCw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgZ2xvYmFsX3N0bXQpOwotICAgIHMgPSBhc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CisgICAgcyA9IF9QeV9hc2RsX3NlcV9uZXcoTkNIKG4pIC8gMiwgYy0+Y19hcmVuYSk7CiAgICAgaWYgKCFzKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pOyBpICs9IDIpIHsKQEAgLTMwMDcsNyArMzAxOSw3IEBACiAgICAgaW50IGk7CiAKICAgICBSRVEobiwgbm9ubG9jYWxfc3RtdCk7Ci0gICAgcyA9IGFzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKKyAgICBzID0gX1B5X2FzZGxfc2VxX25ldyhOQ0gobikgLyAyLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXMpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGZvciAoaSA9IDE7IGkgPCBOQ0gobik7IGkgKz0gMikgewpAQCAtMzA2MCw3ICszMDcyLDcgQEAKICAgICBSRVEobiwgc3VpdGUpOwogCiAgICAgdG90YWwgPSBudW1fc3RtdHMobik7Ci0gICAgc2VxID0gYXNkbF9zZXFfbmV3KHRvdGFsLCBjLT5jX2FyZW5hKTsKKyAgICBzZXEgPSBfUHlfYXNkbF9zZXFfbmV3KHRvdGFsLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIXNlcSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFRZUEUoQ0hJTEQobiwgMCkpID09IHNpbXBsZV9zdG10KSB7CkBAIC0zMTc5LDcgKzMxOTEsNyBAQAogICAgICAgICBpZiAoaGFzX2Vsc2UpIHsKICAgICAgICAgICAgIGFzZGxfc2VxICpzdWl0ZV9zZXEyOwogCi0gICAgICAgICAgICBvcmVsc2UgPSBhc2RsX3NlcV9uZXcoMSwgYy0+Y19hcmVuYSk7CisgICAgICAgICAgICBvcmVsc2UgPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFvcmVsc2UpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIE5DSChuKSAtIDYpKTsKQEAgLTMyMDMsNyArMzIxNSw3IEBACiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5fZWxpZjsgaSsrKSB7CiAgICAgICAgICAgICBpbnQgb2ZmID0gNSArIChuX2VsaWYgLSBpIC0gMSkgKiA0OwotICAgICAgICAgICAgYXNkbF9zZXEgKm5ld29iaiA9IGFzZGxfc2VxX25ldygxLCBjLT5jX2FyZW5hKTsKKyAgICAgICAgICAgIGFzZGxfc2VxICpuZXdvYmogPSBfUHlfYXNkbF9zZXFfbmV3KDEsIGMtPmNfYXJlbmEpOwogICAgICAgICAgICAgaWYgKCFuZXdvYmopCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBleHByZXNzaW9uID0gYXN0X2Zvcl9leHByKGMsIENISUxEKG4sIG9mZikpOwpAQCAtMzQxNSw3ICszNDI3LDcgQEAKICAgICBpZiAobl9leGNlcHQgPiAwKSB7CiAgICAgICAgIGludCBpOwogICAgICAgICAvKiBwcm9jZXNzIGV4Y2VwdCBzdGF0ZW1lbnRzIHRvIGNyZWF0ZSBhIHRyeSAuLi4gZXhjZXB0ICovCi0gICAgICAgIGhhbmRsZXJzID0gYXNkbF9zZXFfbmV3KG5fZXhjZXB0LCBjLT5jX2FyZW5hKTsKKyAgICAgICAgaGFuZGxlcnMgPSBfUHlfYXNkbF9zZXFfbmV3KG5fZXhjZXB0LCBjLT5jX2FyZW5hKTsKICAgICAgICAgaWYgKGhhbmRsZXJzID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMzQ2Niw3ICszNDc4LDcgQEAKICAgICBSRVEobiwgd2l0aF9zdG10KTsKIAogICAgIG5faXRlbXMgPSAoTkNIKG4pIC0gMikgLyAyOwotICAgIGl0ZW1zID0gYXNkbF9zZXFfbmV3KG5faXRlbXMsIGMtPmNfYXJlbmEpOworICAgIGl0ZW1zID0gX1B5X2FzZGxfc2VxX25ldyhuX2l0ZW1zLCBjLT5jX2FyZW5hKTsKICAgICBpZiAoIWl0ZW1zKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAxOyBpIDwgTkNIKG4pIC0gMjsgaSArPSAyKSB7CkBAIC0zNjMyLDE4ICszNjQ0LDE2IEBACiAgICAgZW5kID0gcyArIHN0cmxlbihzKSAtIDE7CiAgICAgaW1mbGFnID0gKmVuZCA9PSAnaicgfHwgKmVuZCA9PSAnSic7CiAgICAgaWYgKHNbMF0gPT0gJzAnKSB7Ci0gICAgICAgIHggPSAobG9uZykgUHlPU19zdHJ0b3VsKChjaGFyICopcywgKGNoYXIgKiopJmVuZCwgMCk7CisgICAgICAgIHggPSAobG9uZykgUHlPU19zdHJ0b3VsKHMsIChjaGFyICoqKSZlbmQsIDApOwogICAgICAgICBpZiAoeCA8IDAgJiYgZXJybm8gPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKHMsIChjaGFyICoqKTAsIDApOwogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UKLSAgICAgICAgeCA9IFB5T1Nfc3RydG9sKChjaGFyICopcywgKGNoYXIgKiopJmVuZCwgMCk7CisgICAgICAgIHggPSBQeU9TX3N0cnRvbChzLCAoY2hhciAqKikmZW5kLCAwKTsKICAgICBpZiAoKmVuZCA9PSAnXDAnKSB7CiAgICAgICAgIGlmIChlcnJubyAhPSAwKQotICAgICAgICAgICAgcmV0dXJuIFB5TG9uZ19Gcm9tU3RyaW5nKChjaGFyICopcywgKGNoYXIgKiopMCwgMCk7CisgICAgICAgICAgICByZXR1cm4gUHlMb25nX0Zyb21TdHJpbmcocywgKGNoYXIgKiopMCwgMCk7CiAgICAgICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoeCk7CiAgICAgfQogICAgIC8qIFhYWCBIdWdlIGZsb2F0cyBtYXkgc2lsZW50bHkgZmFpbCAqLwpAQCAtMzY2Niw4ICszNjc2LDggQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBkZWNvZGVfdXRmOChzdHJ1Y3QgY29tcGlsaW5nICpjLCBjb25zdCBjaGFyICoqc1B0ciwgY29uc3QgY2hhciAqZW5kKQogewotICAgIGNoYXIgKnMsICp0OwotICAgIHQgPSBzID0gKGNoYXIgKikqc1B0cjsKKyAgICBjb25zdCBjaGFyICpzLCAqdDsKKyAgICB0ID0gcyA9ICpzUHRyOwogICAgIC8qIHdoaWxlIChzIDwgZW5kICYmICpzICE9ICdcXCcpIHMrKzsgKi8gLyogaW5lZmZpY2llbnQgZm9yIHUiLi4iICovCiAgICAgd2hpbGUgKHMgPCBlbmQgJiYgKCpzICYgMHg4MCkpIHMrKzsKICAgICAqc1B0ciA9IHM7CmRpZmYgLS1naXQgYS9QeXRob24vYmx0aW5tb2R1bGUuYyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCmluZGV4IGM5NGRhZWEuLjUzMDA5ZTMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9ibHRpbm1vZHVsZS5jCisrKyBiL1B5dGhvbi9ibHRpbm1vZHVsZS5jCkBAIC0zMiw4ICszMiwxOSBAQAogaW50IFB5X0hhc0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcgPSAwOwogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKF9fYnVpbHRpbnNfXyk7CitfUHlfSURFTlRJRklFUihfX2RpY3RfXyk7CitfUHlfSURFTlRJRklFUihfX3ByZXBhcmVfXyk7CitfUHlfSURFTlRJRklFUihfX3JvdW5kX18pOworX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOworX1B5X0lERU5USUZJRVIoZXJyb3JzKTsKIF9QeV9JREVOVElGSUVSKGZpbGVubyk7CiBfUHlfSURFTlRJRklFUihmbHVzaCk7CitfUHlfSURFTlRJRklFUihtZXRhY2xhc3MpOworX1B5X0lERU5USUZJRVIoc29ydCk7CitfUHlfSURFTlRJRklFUihzdGRpbik7CitfUHlfSURFTlRJRklFUihzdGRvdXQpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKIAogc3RhdGljIFB5T2JqZWN0ICoKIGJ1aWx0aW5fX19idWlsZF9jbGFzc19fKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCkBAIC00Miw3ICs1Myw2IEBACiAgICAgUHlPYmplY3QgKmNscyA9IE5VTEw7CiAgICAgUHlfc3NpemVfdCBuYXJnczsKICAgICBpbnQgaXNjbGFzczsKLSAgICBfUHlfSURFTlRJRklFUihfX3ByZXBhcmVfXyk7CiAKICAgICBhc3NlcnQoYXJncyAhPSBOVUxMKTsKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2soYXJncykpIHsKQEAgLTU3LDYgKzY3LDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBmdW5jID0gUHlUdXBsZV9HRVRfSVRFTShhcmdzLCAwKTsgLyogQmV0dGVyIGJlIGNhbGxhYmxlICovCisgICAgaWYgKCFQeUZ1bmN0aW9uX0NoZWNrKGZ1bmMpKSB7CisgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiX19idWlsZF9jbGFzc19fOiBmdW5jIG11c3QgYmUgYSBmdW5jdGlvbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oYXJncywgMSk7CiAgICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2sobmFtZSkpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKQEAgLTc3LDEwICs5MiwxMCBAQAogICAgICAgICAgICAgUHlfREVDUkVGKGJhc2VzKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIG1ldGEgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhta3csICJtZXRhY2xhc3MiKTsKKyAgICAgICAgbWV0YSA9IF9QeURpY3RfR2V0SXRlbUlkKG1rdywgJlB5SWRfbWV0YWNsYXNzKTsKICAgICAgICAgaWYgKG1ldGEgIT0gTlVMTCkgewogICAgICAgICAgICAgUHlfSU5DUkVGKG1ldGEpOwotICAgICAgICAgICAgaWYgKFB5RGljdF9EZWxJdGVtU3RyaW5nKG1rdywgIm1ldGFjbGFzcyIpIDwgMCkgeworICAgICAgICAgICAgaWYgKF9QeURpY3RfRGVsSXRlbUlkKG1rdywgJlB5SWRfbWV0YWNsYXNzKSA8IDApIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYobWV0YSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKG1rdyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGJhc2VzKTsKQEAgLTE1NSw3ICsxNzAsOSBAQAogICAgICAgICBQeV9ERUNSRUYoYmFzZXMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgY2VsbCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZnVuYywgbnMsIE5VTEwpOworICAgIGNlbGwgPSBQeUV2YWxfRXZhbENvZGVFeChQeUZ1bmN0aW9uX0dFVF9DT0RFKGZ1bmMpLCBQeUZ1bmN0aW9uX0dFVF9HTE9CQUxTKGZ1bmMpLCBucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwgMCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9HRVRfQ0xPU1VSRShmdW5jKSk7CiAgICAgaWYgKGNlbGwgIT0gTlVMTCkgewogICAgICAgICBQeU9iamVjdCAqbWFyZ3M7CiAgICAgICAgIG1hcmdzID0gUHlUdXBsZV9QYWNrKDMsIG5hbWUsIGJhc2VzLCBucyk7CkBAIC0zMzMsNyArMzUwLDExIEBACiBQeURvY19TVFJWQVIoYmluX2RvYywKICJiaW4obnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBiaW5hcnkgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4iKTsKK1JldHVybiB0aGUgYmluYXJ5IHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuXG5cCitcblwKKyAgID4+PiBiaW4oMjc5NjIwMilcblwKKyAgICcwYjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAnXG5cCisiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNTM4LDMxICs1NTksNTAgQEAKIFJldHVybiBhIFVuaWNvZGUgc3RyaW5nIG9mIG9uZSBjaGFyYWN0ZXIgd2l0aCBvcmRpbmFsIGk7IDAgPD0gaSA8PSAweDEwZmZmZi4iKTsKIAogCi1zdGF0aWMgY2hhciAqCi1zb3VyY2VfYXNfc3RyaW5nKFB5T2JqZWN0ICpjbWQsIGNoYXIgKmZ1bmNuYW1lLCBjaGFyICp3aGF0LCBQeUNvbXBpbGVyRmxhZ3MgKmNmKQorc3RhdGljIGNvbnN0IGNoYXIgKgorc291cmNlX2FzX3N0cmluZyhQeU9iamVjdCAqY21kLCBjb25zdCBjaGFyICpmdW5jbmFtZSwgY29uc3QgY2hhciAqd2hhdCwgUHlDb21waWxlckZsYWdzICpjZiwgUHlPYmplY3QgKipjbWRfY29weSkKIHsKLSAgICBjaGFyICpzdHI7CisgICAgY29uc3QgY2hhciAqc3RyOwogICAgIFB5X3NzaXplX3Qgc2l6ZTsKKyAgICBQeV9idWZmZXIgdmlldzsKIAorICAgICpjbWRfY29weSA9IE5VTEw7CiAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhjbWQpKSB7CiAgICAgICAgIGNmLT5jZl9mbGFncyB8PSBQeUNGX0lHTk9SRV9DT09LSUU7CiAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9Bc1VURjhBbmRTaXplKGNtZCwgJnNpemUpOwogICAgICAgICBpZiAoc3RyID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgZWxzZSBpZiAoIVB5T2JqZWN0X0NoZWNrUmVhZEJ1ZmZlcihjbWQpKSB7CisgICAgZWxzZSBpZiAoUHlCeXRlc19DaGVjayhjbWQpKSB7CisgICAgICAgIHN0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGNtZCk7CisgICAgICAgIHNpemUgPSBQeUJ5dGVzX0dFVF9TSVpFKGNtZCk7CisgICAgfQorICAgIGVsc2UgaWYgKFB5Qnl0ZUFycmF5X0NoZWNrKGNtZCkpIHsKKyAgICAgICAgc3RyID0gUHlCeXRlQXJyYXlfQVNfU1RSSU5HKGNtZCk7CisgICAgICAgIHNpemUgPSBQeUJ5dGVBcnJheV9HRVRfU0laRShjbWQpOworICAgIH0KKyAgICBlbHNlIGlmIChQeU9iamVjdF9HZXRCdWZmZXIoY21kLCAmdmlldywgUHlCVUZfU0lNUExFKSA9PSAwKSB7CisgICAgICAgIC8qIENvcHkgdG8gTlVMLXRlcm1pbmF0ZWQgYnVmZmVyLiAqLworICAgICAgICAqY21kX2NvcHkgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKAorICAgICAgICAgICAgKGNvbnN0IGNoYXIgKil2aWV3LmJ1Ziwgdmlldy5sZW4pOworICAgICAgICBQeUJ1ZmZlcl9SZWxlYXNlKCZ2aWV3KTsKKyAgICAgICAgaWYgKCpjbWRfY29weSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBzdHIgPSBQeUJ5dGVzX0FTX1NUUklORygqY21kX2NvcHkpOworICAgICAgICBzaXplID0gUHlCeXRlc19HRVRfU0laRSgqY21kX2NvcHkpOworICAgIH0KKyAgICBlbHNlIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAiJXMoKSBhcmcgMSBtdXN0IGJlIGEgJXMgb2JqZWN0IiwKICAgICAgICAgICBmdW5jbmFtZSwgd2hhdCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Bc1JlYWRCdWZmZXIoY21kLCAoY29uc3Qgdm9pZCAqKikmc3RyLCAmc2l6ZSkgPCAwKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KIAogICAgIGlmIChzdHJsZW4oc3RyKSAhPSBzaXplKSB7CiAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAic291cmNlIGNvZGUgc3RyaW5nIGNhbm5vdCBjb250YWluIG51bGwgYnl0ZXMiKTsKKyAgICAgICAgUHlfQ0xFQVIoKmNtZF9jb3B5KTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIHJldHVybiBzdHI7CkBAIC01NzEsOSArNjExLDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX2NvbXBpbGUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcykKIHsKLSAgICBjaGFyICpzdHI7Ci0gICAgUHlPYmplY3QgKmZpbGVuYW1lX29iajsKLSAgICBjaGFyICpmaWxlbmFtZTsKKyAgICBQeU9iamVjdCAqY21kX2NvcHk7CisgICAgY29uc3QgY2hhciAqc3RyOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKICAgICBjaGFyICpzdGFydHN0cjsKICAgICBpbnQgbW9kZSA9IC0xOwogICAgIGludCBkb250X2luaGVyaXQgPSAwOwpAQCAtNTg5LDEyICs2MjksMTEgQEAKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPTyZzfGlpaTpjb21waWxlIiwgIGt3bGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY21kLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9GU0NvbnZlcnRlciwgJmZpbGVuYW1lX29iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0YXJ0c3RyLCAmc3VwcGxpZWRfZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRvbnRfaW5oZXJpdCwgJm9wdGltaXplKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmaWxlbmFtZSA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGZpbGVuYW1lX29iaik7CiAgICAgY2YuY2ZfZmxhZ3MgPSBzdXBwbGllZF9mbGFncyB8IFB5Q0ZfU09VUkNFX0lTX1VURjg7CiAKICAgICBpZiAoc3VwcGxpZWRfZmxhZ3MgJgpAQCAtNjUyLDI0ICs2OTEsMjUgQEAKICAgICAgICAgICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXN1bHQgPSAoUHlPYmplY3QqKVB5QVNUX0NvbXBpbGVFeChtb2QsIGZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNmLCBvcHRpbWl6ZSwgYXJlbmEpOworICAgICAgICAgICAgcmVzdWx0ID0gKFB5T2JqZWN0KilQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNmLCBvcHRpbWl6ZSwgYXJlbmEpOwogICAgICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgfQogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgfQogCi0gICAgc3RyID0gc291cmNlX2FzX3N0cmluZyhjbWQsICJjb21waWxlIiwgInN0cmluZywgYnl0ZXMsIEFTVCBvciBjb2RlIiwgJmNmKTsKKyAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKGNtZCwgImNvbXBpbGUiLCAic3RyaW5nLCBieXRlcyBvciBBU1QiLCAmY2YsICZjbWRfY29weSk7CiAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCi0gICAgcmVzdWx0ID0gUHlfQ29tcGlsZVN0cmluZ0V4RmxhZ3Moc3RyLCBmaWxlbmFtZSwgc3RhcnRbbW9kZV0sICZjZiwgb3B0aW1pemUpOworICAgIHJlc3VsdCA9IFB5X0NvbXBpbGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnRbbW9kZV0sICZjZiwgb3B0aW1pemUpOworICAgIFB5X1hERUNSRUYoY21kX2NvcHkpOwogICAgIGdvdG8gZmluYWxseTsKIAogZXJyb3I6CiAgICAgcmVzdWx0ID0gTlVMTDsKIGZpbmFsbHk6Ci0gICAgUHlfREVDUkVGKGZpbGVuYW1lX29iaik7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC03MzEsOSArNzcxLDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX2V2YWwoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewotICAgIFB5T2JqZWN0ICpjbWQsICpyZXN1bHQsICp0bXAgPSBOVUxMOworICAgIFB5T2JqZWN0ICpjbWQsICpyZXN1bHQsICpjbWRfY29weTsKICAgICBQeU9iamVjdCAqZ2xvYmFscyA9IFB5X05vbmUsICpsb2NhbHMgPSBQeV9Ob25lOwotICAgIGNoYXIgKnN0cjsKKyAgICBjb25zdCBjaGFyICpzdHI7CiAgICAgUHlDb21waWxlckZsYWdzIGNmOwogCiAgICAgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAiZXZhbCIsIDEsIDMsICZjbWQsICZnbG9iYWxzLCAmbG9jYWxzKSkKQEAgLTc1MCw4ICs3OTAsMTEgQEAKICAgICB9CiAgICAgaWYgKGdsb2JhbHMgPT0gUHlfTm9uZSkgewogICAgICAgICBnbG9iYWxzID0gUHlFdmFsX0dldEdsb2JhbHMoKTsKLSAgICAgICAgaWYgKGxvY2FscyA9PSBQeV9Ob25lKQorICAgICAgICBpZiAobG9jYWxzID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIGxvY2FscyA9IFB5RXZhbF9HZXRMb2NhbHMoKTsKKyAgICAgICAgICAgIGlmIChsb2NhbHMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkKICAgICAgICAgbG9jYWxzID0gZ2xvYmFsczsKQEAgLTc2Myw5ICs4MDYsOSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fYnVpbHRpbnNfXyIpID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCisgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXykgPT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTc3OSw3ICs4MjIsNyBAQAogICAgIH0KIAogICAgIGNmLmNmX2ZsYWdzID0gUHlDRl9TT1VSQ0VfSVNfVVRGODsKLSAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKGNtZCwgImV2YWwiLCAic3RyaW5nLCBieXRlcyBvciBjb2RlIiwgJmNmKTsKKyAgICBzdHIgPSBzb3VyY2VfYXNfc3RyaW5nKGNtZCwgImV2YWwiLCAic3RyaW5nLCBieXRlcyBvciBjb2RlIiwgJmNmLCAmY21kX2NvcHkpOwogICAgIGlmIChzdHIgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKQEAgLTc4OCw3ICs4MzEsNyBAQAogCiAgICAgKHZvaWQpUHlFdmFsX01lcmdlQ29tcGlsZXJGbGFncygmY2YpOwogICAgIHJlc3VsdCA9IFB5UnVuX1N0cmluZ0ZsYWdzKHN0ciwgUHlfZXZhbF9pbnB1dCwgZ2xvYmFscywgbG9jYWxzLCAmY2YpOwotICAgIFB5X1hERUNSRUYodG1wKTsKKyAgICBQeV9YREVDUkVGKGNtZF9jb3B5KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC04MTUsNiArODU4LDggQEAKICAgICAgICAgZ2xvYmFscyA9IFB5RXZhbF9HZXRHbG9iYWxzKCk7CiAgICAgICAgIGlmIChsb2NhbHMgPT0gUHlfTm9uZSkgewogICAgICAgICAgICAgbG9jYWxzID0gUHlFdmFsX0dldExvY2FscygpOworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGlmICghZ2xvYmFscyB8fCAhbG9jYWxzKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCkBAIC04MzYsOSArODgxLDkgQEAKICAgICAgICAgICAgIGxvY2Fscy0+b2JfdHlwZS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcoZ2xvYmFscywgIl9fYnVpbHRpbnNfXyIpID09IE5VTEwpIHsKLSAgICAgICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGdsb2JhbHMsICJfX2J1aWx0aW5zX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCisgICAgaWYgKF9QeURpY3RfR2V0SXRlbUlkKGdsb2JhbHMsICZQeUlkX19fYnVpbHRpbnNfXykgPT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5RGljdF9TZXRJdGVtSWQoZ2xvYmFscywgJlB5SWRfX19idWlsdGluc19fLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFdmFsX0dldEJ1aWx0aW5zKCkpICE9IDApCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTg1MiwxMSArODk3LDEzIEBACiAgICAgICAgIHYgPSBQeUV2YWxfRXZhbENvZGUocHJvZywgZ2xvYmFscywgbG9jYWxzKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGNoYXIgKnN0cjsKKyAgICAgICAgUHlPYmplY3QgKnByb2dfY29weTsKKyAgICAgICAgY29uc3QgY2hhciAqc3RyOwogICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgY2Y7CiAgICAgICAgIGNmLmNmX2ZsYWdzID0gUHlDRl9TT1VSQ0VfSVNfVVRGODsKICAgICAgICAgc3RyID0gc291cmNlX2FzX3N0cmluZyhwcm9nLCAiZXhlYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgYnl0ZXMgb3IgY29kZSIsICZjZik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZywgYnl0ZXMgb3IgY29kZSIsICZjZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvZ19jb3B5KTsKICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmIChQeUV2YWxfTWVyZ2VDb21waWxlckZsYWdzKCZjZikpCkBAIC04NjQsNiArOTExLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbHMsICZjZik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHYgPSBQeVJ1bl9TdHJpbmcoc3RyLCBQeV9maWxlX2lucHV0LCBnbG9iYWxzLCBsb2NhbHMpOworICAgICAgICBQeV9YREVDUkVGKHByb2dfY29weSk7CiAgICAgfQogICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTI1Niw3ICsxMzA0LDExIEBACiBQeURvY19TVFJWQVIoaGV4X2RvYywKICJoZXgobnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiIpOworUmV0dXJuIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAorXG5cCisgICA+Pj4gaGV4KDM3MzU5Mjg1NTkpXG5cCisgICAnMHhkZWFkYmVlZidcblwKKyIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMjk3LDkgKzEzNDksOSBAQAogfQogCiBQeURvY19TVFJWQVIobGVuX2RvYywKLSJsZW4ob2JqZWN0KSAtPiBpbnRlZ2VyXG5cCisibGVuKG9iamVjdClcblwKIFxuXAotUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgb2YgYSBzZXF1ZW5jZSBvciBtYXBwaW5nLiIpOworUmV0dXJuIHRoZSBudW1iZXIgb2YgaXRlbXMgb2YgYSBzZXF1ZW5jZSBvciBjb2xsZWN0aW9uLiIpOwogCiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC0xMzIyLDI2ICsxMzc0LDM1IEBACiBtaW5fbWF4KFB5T2JqZWN0ICphcmdzLCBQeU9iamVjdCAqa3dkcywgaW50IG9wKQogewogICAgIFB5T2JqZWN0ICp2LCAqaXQsICppdGVtLCAqdmFsLCAqbWF4aXRlbSwgKm1heHZhbCwgKmtleWZ1bmM9TlVMTDsKKyAgICBQeU9iamVjdCAqZW1wdHl0dXBsZSwgKmRlZmF1bHR2YWwgPSBOVUxMOworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsia2V5IiwgImRlZmF1bHQiLCBOVUxMfTsKICAgICBjb25zdCBjaGFyICpuYW1lID0gb3AgPT0gUHlfTFQgPyAibWluIiA6ICJtYXgiOworICAgIGNvbnN0IGludCBwb3NpdGlvbmFsID0gUHlUdXBsZV9TaXplKGFyZ3MpID4gMTsKKyAgICBpbnQgcmV0OwogCi0gICAgaWYgKFB5VHVwbGVfU2l6ZShhcmdzKSA+IDEpCisgICAgaWYgKHBvc2l0aW9uYWwpCiAgICAgICAgIHYgPSBhcmdzOwotICAgIGVsc2UgaWYgKCFQeUFyZ19VbnBhY2tUdXBsZShhcmdzLCAoY2hhciAqKW5hbWUsIDEsIDEsICZ2KSkKKyAgICBlbHNlIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgbmFtZSwgMSwgMSwgJnYpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmIChrd2RzICE9IE5VTEwgJiYgUHlEaWN0X0NoZWNrKGt3ZHMpICYmIFB5RGljdF9TaXplKGt3ZHMpKSB7Ci0gICAgICAgIGtleWZ1bmMgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhrd2RzLCAia2V5Iik7Ci0gICAgICAgIGlmIChQeURpY3RfU2l6ZShrd2RzKSE9MSAgfHwgIGtleWZ1bmMgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAiJXMoKSBnb3QgYW4gdW5leHBlY3RlZCBrZXl3b3JkIGFyZ3VtZW50IiwgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBQeV9JTkNSRUYoa2V5ZnVuYyk7CisgICAgZW1wdHl0dXBsZSA9IFB5VHVwbGVfTmV3KDApOworICAgIGlmIChlbXB0eXR1cGxlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHJldCA9IFB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhlbXB0eXR1cGxlLCBrd2RzLCAifCRPTyIsIGt3bGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmtleWZ1bmMsICZkZWZhdWx0dmFsKTsKKyAgICBQeV9ERUNSRUYoZW1wdHl0dXBsZSk7CisgICAgaWYgKCFyZXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHBvc2l0aW9uYWwgJiYgZGVmYXVsdHZhbCAhPSBOVUxMKSB7CisgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNwZWNpZnkgYSBkZWZhdWx0IGZvciAlcygpIHdpdGggbXVsdGlwbGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgInBvc2l0aW9uYWwgYXJndW1lbnRzIiwgbmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGl0ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKICAgICBpZiAoaXQgPT0gTlVMTCkgewotICAgICAgICBQeV9YREVDUkVGKGtleWZ1bmMpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTEzODUsMTQgKzE0NDYsMTggQEAKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgZ290byBGYWlsX2l0OwogICAgIGlmIChtYXh2YWwgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICIlcygpIGFyZyBpcyBhbiBlbXB0eSBzZXF1ZW5jZSIsIG5hbWUpOwogICAgICAgICBhc3NlcnQobWF4aXRlbSA9PSBOVUxMKTsKKyAgICAgICAgaWYgKGRlZmF1bHR2YWwgIT0gTlVMTCkgeworICAgICAgICAgICAgUHlfSU5DUkVGKGRlZmF1bHR2YWwpOworICAgICAgICAgICAgbWF4aXRlbSA9IGRlZmF1bHR2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJXMoKSBhcmcgaXMgYW4gZW1wdHkgc2VxdWVuY2UiLCBuYW1lKTsKKyAgICAgICAgfQogICAgIH0KICAgICBlbHNlCiAgICAgICAgIFB5X0RFQ1JFRihtYXh2YWwpOwogICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICByZXR1cm4gbWF4aXRlbTsKIAogRmFpbF9pdF9pdGVtX2FuZF92YWw6CkBAIC0xNDAzLDcgKzE0NjgsNiBAQAogICAgIFB5X1hERUNSRUYobWF4dmFsKTsKICAgICBQeV9YREVDUkVGKG1heGl0ZW0pOwogICAgIFB5X0RFQ1JFRihpdCk7Ci0gICAgUHlfWERFQ1JFRihrZXlmdW5jKTsKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMTQxNCwxMCArMTQ3OCwxMiBAQAogfQogCiBQeURvY19TVFJWQVIobWluX2RvYywKLSJtaW4oaXRlcmFibGVbLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCi1taW4oYSwgYiwgYywgLi4uWywga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAorIm1pbihpdGVyYWJsZSwgKlssIGRlZmF1bHQ9b2JqLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCittaW4oYXJnMSwgYXJnMiwgKmFyZ3MsICpbLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCiBcblwKLVdpdGggYSBzaW5nbGUgaXRlcmFibGUgYXJndW1lbnQsIHJldHVybiBpdHMgc21hbGxlc3QgaXRlbS5cblwKK1dpdGggYSBzaW5nbGUgaXRlcmFibGUgYXJndW1lbnQsIHJldHVybiBpdHMgc21hbGxlc3QgaXRlbS4gVGhlXG5cCitkZWZhdWx0IGtleXdvcmQtb25seSBhcmd1bWVudCBzcGVjaWZpZXMgYW4gb2JqZWN0IHRvIHJldHVybiBpZlxuXAordGhlIHByb3ZpZGVkIGl0ZXJhYmxlIGlzIGVtcHR5LlxuXAogV2l0aCB0d28gb3IgbW9yZSBhcmd1bWVudHMsIHJldHVybiB0aGUgc21hbGxlc3QgYXJndW1lbnQuIik7CiAKIApAQCAtMTQyOCwxMCArMTQ5NCwxMiBAQAogfQogCiBQeURvY19TVFJWQVIobWF4X2RvYywKLSJtYXgoaXRlcmFibGVbLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCi1tYXgoYSwgYiwgYywgLi4uWywga2V5PWZ1bmNdKSAtPiB2YWx1ZVxuXAorIm1heChpdGVyYWJsZSwgKlssIGRlZmF1bHQ9b2JqLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCittYXgoYXJnMSwgYXJnMiwgKmFyZ3MsICpbLCBrZXk9ZnVuY10pIC0+IHZhbHVlXG5cCiBcblwKLVdpdGggYSBzaW5nbGUgaXRlcmFibGUgYXJndW1lbnQsIHJldHVybiBpdHMgbGFyZ2VzdCBpdGVtLlxuXAorV2l0aCBhIHNpbmdsZSBpdGVyYWJsZSBhcmd1bWVudCwgcmV0dXJuIGl0cyBiaWdnZXN0IGl0ZW0uIFRoZVxuXAorZGVmYXVsdCBrZXl3b3JkLW9ubHkgYXJndW1lbnQgc3BlY2lmaWVzIGFuIG9iamVjdCB0byByZXR1cm4gaWZcblwKK3RoZSBwcm92aWRlZCBpdGVyYWJsZSBpcyBlbXB0eS5cblwKIFdpdGggdHdvIG9yIG1vcmUgYXJndW1lbnRzLCByZXR1cm4gdGhlIGxhcmdlc3QgYXJndW1lbnQuIik7CiAKIApAQCAtMTQ0NCw3ICsxNTEyLDExIEBACiBQeURvY19TVFJWQVIob2N0X2RvYywKICJvY3QobnVtYmVyKSAtPiBzdHJpbmdcblwKIFxuXAotUmV0dXJuIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLiIpOworUmV0dXJuIHRoZSBvY3RhbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLlxuXAorXG5cCisgICA+Pj4gb2N0KDM0MjM5MSlcblwKKyAgICcwbzEyMzQ1NjcnXG5cCisiKTsKIAogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtMTUzMCw3ICsxNjAyLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga3dsaXN0LCAmc2VwLCAmZW5kLCAmZmlsZSwgJmZsdXNoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKGZpbGUgPT0gTlVMTCB8fCBmaWxlID09IFB5X05vbmUpIHsKLSAgICAgICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3Rkb3V0KTsKKyAgICAgICAgaWYgKGZpbGUgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImxvc3Qgc3lzLnN0ZG91dCIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKwogICAgICAgICAvKiBzeXMuc3Rkb3V0IG1heSBiZSBOb25lIHdoZW4gRklMRSogc3Rkb3V0IGlzbid0IGNvbm5lY3RlZCAqLwogICAgICAgICBpZiAoZmlsZSA9PSBQeV9Ob25lKQogICAgICAgICAgICAgUHlfUkVUVVJOX05PTkU7CkBAIC0xNTg0LDcgKzE2NjEsNyBAQAogICAgICAgICBpZiAoZG9fZmx1c2ggPT0gLTEpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgZWxzZSBpZiAoZG9fZmx1c2gpIHsKLSAgICAgICAgICAgIHRtcCA9IFB5T2JqZWN0X0NhbGxNZXRob2QoZmlsZSwgImZsdXNoIiwgIiIpOworICAgICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmaWxlLCAmUHlJZF9mbHVzaCwgIiIpOwogICAgICAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgZWxzZQpAQCAtMTYxMCw5ICsxNjg3LDkgQEAKIGJ1aWx0aW5faW5wdXQoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQogewogICAgIFB5T2JqZWN0ICpwcm9tcHRhcmcgPSBOVUxMOwotICAgIFB5T2JqZWN0ICpmaW4gPSBQeVN5c19HZXRPYmplY3QoInN0ZGluIik7Ci0gICAgUHlPYmplY3QgKmZvdXQgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOwotICAgIFB5T2JqZWN0ICpmZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBQeU9iamVjdCAqZmluID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGluKTsKKyAgICBQeU9iamVjdCAqZm91dCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOworICAgIFB5T2JqZWN0ICpmZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgUHlPYmplY3QgKnRtcDsKICAgICBsb25nIGZkOwogICAgIGludCB0dHk7CkBAIC0xNjYyLDggKzE3MzksMTAgQEAKICAgICB9CiAgICAgaWYgKHR0eSkgewogICAgICAgICB0bXAgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGZvdXQsICZQeUlkX2ZpbGVubywgIiIpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgIGlmICh0bXAgPT0gTlVMTCkgewogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgICAgIHR0eSA9IDA7CisgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBmZCA9IFB5TG9uZ19Bc0xvbmcodG1wKTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih0bXApOwpAQCAtMTY4Myw4ICsxNzYyLDYgQEAKICAgICAgICAgY2hhciAqc3RkaW5fZW5jb2Rpbmdfc3RyLCAqc3RkaW5fZXJyb3JzX3N0cjsKICAgICAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICAgICAgc2l6ZV90IGxlbjsKLSAgICAgICAgX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOwotICAgICAgICBfUHlfSURFTlRJRklFUihlcnJvcnMpOwogCiAgICAgICAgIHN0ZGluX2VuY29kaW5nID0gX1B5T2JqZWN0X0dldEF0dHJJZChmaW4sICZQeUlkX2VuY29kaW5nKTsKICAgICAgICAgc3RkaW5fZXJyb3JzID0gX1B5T2JqZWN0X0dldEF0dHJJZChmaW4sICZQeUlkX2Vycm9ycyk7CkBAIC0xODEwLDEwICsxODg3LDkgQEAKIHN0YXRpYyBQeU9iamVjdCAqCiBidWlsdGluX3JvdW5kKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncywgUHlPYmplY3QgKmt3ZHMpCiB7Ci0gICAgc3RhdGljIFB5T2JqZWN0ICpyb3VuZF9zdHIgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuZGlnaXRzID0gTlVMTDsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im51bWJlciIsICJuZGlnaXRzIiwgMH07Ci0gICAgUHlPYmplY3QgKm51bWJlciwgKnJvdW5kOworICAgIFB5T2JqZWN0ICpudW1iZXIsICpyb3VuZCwgKnJlc3VsdDsKIAogICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3ZHMsICJPfE86cm91bmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm51bWJlciwgJm5kaWdpdHMpKQpAQCAtMTgyNCwyNCArMTkwMCwyMSBAQAogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgaWYgKHJvdW5kX3N0ciA9PSBOVUxMKSB7Ci0gICAgICAgIHJvdW5kX3N0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX3JvdW5kX18iKTsKLSAgICAgICAgaWYgKHJvdW5kX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcm91bmQgPSBfUHlUeXBlX0xvb2t1cChQeV9UWVBFKG51bWJlciksIHJvdW5kX3N0cik7CisgICAgcm91bmQgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChudW1iZXIsICZQeUlkX19fcm91bmRfXyk7CiAgICAgaWYgKHJvdW5kID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJ0eXBlICUuMTAwcyBkb2Vzbid0IGRlZmluZSBfX3JvdW5kX18gbWV0aG9kIiwKLSAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobnVtYmVyKS0+dHBfbmFtZSk7CisgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUgJS4xMDBzIGRvZXNuJ3QgZGVmaW5lIF9fcm91bmRfXyBtZXRob2QiLAorICAgICAgICAgICAgICAgICAgICAgICAgIFB5X1RZUEUobnVtYmVyKS0+dHBfbmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGlmIChuZGlnaXRzID09IE5VTEwpCi0gICAgICAgIHJldHVybiBQeU9iamVjdF9DYWxsRnVuY3Rpb24ocm91bmQsICJPIiwgbnVtYmVyKTsKKyAgICAgICAgcmVzdWx0ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhyb3VuZCwgTlVMTCk7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uKHJvdW5kLCAiT08iLCBudW1iZXIsIG5kaWdpdHMpOworICAgICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsRnVuY3Rpb25PYmpBcmdzKHJvdW5kLCBuZGlnaXRzLCBOVUxMKTsKKyAgICBQeV9ERUNSRUYocm91bmQpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5RG9jX1NUUlZBUihyb3VuZF9kb2MsCkBAIC0xODU5LDcgKzE5MzIsNiBAQAogICAgIFB5T2JqZWN0ICpjYWxsYWJsZTsKICAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Iml0ZXJhYmxlIiwgImtleSIsICJyZXZlcnNlIiwgMH07CiAgICAgaW50IHJldmVyc2U7Ci0gICAgX1B5X0lERU5USUZJRVIoc29ydCk7CiAKICAgICAvKiBhcmdzIDEtMyBzaG91bGQgbWF0Y2ggbGlzdHNvcnQgaW4gT2JqZWN0cy9saXN0b2JqZWN0LmMgKi8KICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2RzLCAiT3xPaTpzb3J0ZWQiLApAQCAtMTkwNywxNiArMTk3OSwxMSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgIGQgPSBQeUV2YWxfR2V0TG9jYWxzKCk7Ci0gICAgICAgIGlmIChkID09IE5VTEwpIHsKLSAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YXJzKCk6IG5vIGxvY2FscyE/Iik7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgUHlfSU5DUkVGKGQpOworICAgICAgICBpZiAoZCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIFB5X0lOQ1JFRihkKTsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIF9QeV9JREVOVElGSUVSKF9fZGljdF9fKTsKICAgICAgICAgZCA9IF9QeU9iamVjdF9HZXRBdHRySWQodiwgJlB5SWRfX19kaWN0X18pOwogICAgICAgICBpZiAoZCA9PSBOVUxMKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLApAQCAtMjQxMyw2ICsyNDgwLDEyIEBACiBfUHlCdWlsdGluX0luaXQodm9pZCkKIHsKICAgICBQeU9iamVjdCAqbW9kLCAqZGljdCwgKmRlYnVnOworCisgICAgaWYgKFB5VHlwZV9SZWFkeSgmUHlGaWx0ZXJfVHlwZSkgPCAwIHx8CisgICAgICAgIFB5VHlwZV9SZWFkeSgmUHlNYXBfVHlwZSkgPCAwIHx8CisgICAgICAgIFB5VHlwZV9SZWFkeSgmUHlaaXBfVHlwZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIG1vZCA9IFB5TW9kdWxlX0NyZWF0ZSgmYnVpbHRpbnNtb2R1bGUpOwogICAgIGlmIChtb2QgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9QeXRob24vY2V2YWwuYyBiL1B5dGhvbi9jZXZhbC5jCmluZGV4IDJiMTYxOTEuLjdhMGNiN2YgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jZXZhbC5jCisrKyBiL1B5dGhvbi9jZXZhbC5jCkBAIC0zNyw3ICszNyw3IEBACiBzdGF0aWMgdm9pZAogcHBjX2dldGNvdW50ZXIodWludDY0ICp2KQogewotICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdGJ1LCB0YiwgdGJ1MjsKKyAgICB1bnNpZ25lZCBsb25nIHRidSwgdGIsIHRidTI7CiAKICAgbG9vcDoKICAgICBhc20gdm9sYXRpbGUgKCJtZnRidSAlMCIgOiAiPXIiICh0YnUpICk7CkBAIC02NSw5ICs2NSwxMSBAQAogICAgZXZlbiBpbiA2NC1iaXQgbW9kZSwgd2UgbmVlZCB0byB1c2UgImEiIGFuZCAiZCIgZm9yIHRoZSBsb3dlciBhbmQgdXBwZXIKICAgIDMyLWJpdCBwaWVjZXMgb2YgdGhlIHJlc3VsdC4gKi8KIAotI2RlZmluZSBSRUFEX1RJTUVTVEFNUCh2YWwpIFwKLSAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmR0c2MiIDogXAotICAgICAgICAgICAgICAgICAgICAgICAgICI9YSIgKCgoaW50KikmKHZhbCkpWzBdKSwgIj1kIiAoKChpbnQqKSYodmFsKSlbMV0pKTsKKyNkZWZpbmUgUkVBRF9USU1FU1RBTVAodmFsKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVuc2lnbmVkIGludCBoLCBsOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9YSIgKGwpLCAiPWQiIChoKSk7IFwKKyAgICAodmFsKSA9ICgodWludDY0KWwpIHwgKCgodWludDY0KWgpIDw8IDMyKTsgICAgICAgICAgXAorICAgIH0gd2hpbGUoMCkKIAogCiAjZWxzZQpAQCAtMTIzLDEzICsxMjUsMTYgQEAKIHN0YXRpYyBpbnQgbGx0cmFjZTsKIHN0YXRpYyBpbnQgcHJ0cmFjZShQeU9iamVjdCAqLCBjaGFyICopOwogI2VuZGlmCi1zdGF0aWMgaW50IGNhbGxfdHJhY2UoUHlfdHJhY2VmdW5jLCBQeU9iamVjdCAqLCBQeUZyYW1lT2JqZWN0ICosCitzdGF0aWMgaW50IGNhbGxfdHJhY2UoUHlfdHJhY2VmdW5jLCBQeU9iamVjdCAqLAorICAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgIGludCwgUHlPYmplY3QgKik7CiBzdGF0aWMgaW50IGNhbGxfdHJhY2VfcHJvdGVjdGVkKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlGcmFtZU9iamVjdCAqLCBpbnQsIFB5T2JqZWN0ICopOwotc3RhdGljIHZvaWQgY2FsbF9leGNfdHJhY2UoUHlfdHJhY2VmdW5jLCBQeU9iamVjdCAqLCBQeUZyYW1lT2JqZWN0ICopOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBQeU9iamVjdCAqKTsKK3N0YXRpYyB2b2lkIGNhbGxfZXhjX3RyYWNlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKiwgUHlGcmFtZU9iamVjdCAqKTsKIHN0YXRpYyBpbnQgbWF5YmVfY2FsbF9saW5lX3RyYWNlKFB5X3RyYWNlZnVuYywgUHlPYmplY3QgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RnJhbWVPYmplY3QgKiwgaW50ICosIGludCAqLCBpbnQgKik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKiwgaW50ICosIGludCAqLCBpbnQgKik7CiAKIHN0YXRpYyBQeU9iamVjdCAqIGNtcF9vdXRjb21lKGludCwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CiBzdGF0aWMgUHlPYmplY3QgKiBpbXBvcnRfZnJvbShQeU9iamVjdCAqLCBQeU9iamVjdCAqKTsKQEAgLTE0Miw4ICsxNDcsNiBAQAogCiAjZGVmaW5lIE5BTUVfRVJST1JfTVNHIFwKICAgICAibmFtZSAnJS4yMDBzJyBpcyBub3QgZGVmaW5lZCIKLSNkZWZpbmUgR0xPQkFMX05BTUVfRVJST1JfTVNHIFwKLSAgICAiZ2xvYmFsIG5hbWUgJyUuMjAwcycgaXMgbm90IGRlZmluZWQiCiAjZGVmaW5lIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0cgXAogICAgICJsb2NhbCB2YXJpYWJsZSAnJS4yMDBzJyByZWZlcmVuY2VkIGJlZm9yZSBhc3NpZ25tZW50IgogI2RlZmluZSBVTkJPVU5ERlJFRV9FUlJPUl9NU0cgXApAQCAtMzY0LDI5ICszNjcsMjggQEAKICAgICBkcm9wX2dpbCh0c3RhdGUpOwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFB5T1NfQWZ0ZXJGb3JrIHRvIGVuc3VyZSB0aGF0IG5ld2x5Ci0gICBjcmVhdGVkIGNoaWxkIHByb2Nlc3NlcyBkb24ndCBob2xkIGxvY2tzIHJlZmVycmluZyB0byB0aHJlYWRzIHdoaWNoCi0gICBhcmUgbm90IHJ1bm5pbmcgaW4gdGhlIGNoaWxkIHByb2Nlc3MuICAoVGhpcyBjb3VsZCBhbHNvIGJlIGRvbmUgdXNpbmcKLSAgIHB0aHJlYWRfYXRmb3JrIG1lY2hhbmlzbSwgYXQgbGVhc3QgZm9yIHRoZSBwdGhyZWFkcyBpbXBsZW1lbnRhdGlvbi4pICovCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFB5T1NfQWZ0ZXJGb3JrIHRvIGRlc3Ryb3kgYWxsIHRocmVhZHMgd2hpY2ggYXJlCisgKiBub3QgcnVubmluZyBpbiB0aGUgY2hpbGQgcHJvY2VzcywgYW5kIGNsZWFyIGludGVybmFsIGxvY2tzIHdoaWNoIG1pZ2h0IGJlCisgKiBoZWxkIGJ5IHRob3NlIHRocmVhZHMuIChUaGlzIGNvdWxkIGFsc28gYmUgZG9uZSB1c2luZyBwdGhyZWFkX2F0Zm9yaworICogbWVjaGFuaXNtLCBhdCBsZWFzdCBmb3IgdGhlIHB0aHJlYWRzIGltcGxlbWVudGF0aW9uLikgKi8KIAogdm9pZAogUHlFdmFsX1JlSW5pdFRocmVhZHModm9pZCkKIHsKICAgICBfUHlfSURFTlRJRklFUihfYWZ0ZXJfZm9yayk7CiAgICAgUHlPYmplY3QgKnRocmVhZGluZywgKnJlc3VsdDsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOworICAgIFB5VGhyZWFkU3RhdGUgKmN1cnJlbnRfdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKIAogICAgIGlmICghZ2lsX2NyZWF0ZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIHJlY3JlYXRlX2dpbCgpOwogICAgIHBlbmRpbmdfbG9jayA9IFB5VGhyZWFkX2FsbG9jYXRlX2xvY2soKTsKLSAgICB0YWtlX2dpbCh0c3RhdGUpOworICAgIHRha2VfZ2lsKGN1cnJlbnRfdHN0YXRlKTsKICAgICBtYWluX3RocmVhZCA9IFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKTsKIAogICAgIC8qIFVwZGF0ZSB0aGUgdGhyZWFkaW5nIG1vZHVsZSB3aXRoIHRoZSBuZXcgc3RhdGUuCiAgICAgICovCi0gICAgdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKLSAgICB0aHJlYWRpbmcgPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyh0c3RhdGUtPmludGVycC0+bW9kdWxlcywKKyAgICB0aHJlYWRpbmcgPSBQeU1hcHBpbmdfR2V0SXRlbVN0cmluZyhjdXJyZW50X3RzdGF0ZS0+aW50ZXJwLT5tb2R1bGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aHJlYWRpbmciKTsKICAgICBpZiAodGhyZWFkaW5nID09IE5VTEwpIHsKICAgICAgICAgLyogdGhyZWFkaW5nIG5vdCBpbXBvcnRlZCAqLwpAQCAtMzk5LDYgKzQwMSw5IEBACiAgICAgZWxzZQogICAgICAgICBQeV9ERUNSRUYocmVzdWx0KTsKICAgICBQeV9ERUNSRUYodGhyZWFkaW5nKTsKKworICAgIC8qIERlc3Ryb3kgYWxsIHRocmVhZHMgZXhjZXB0IHRoZSBjdXJyZW50IG9uZSAqLworICAgIF9QeVRocmVhZFN0YXRlX0RlbGV0ZUV4Y2VwdChjdXJyZW50X3RzdGF0ZSk7CiB9CiAKICNlbHNlCkBAIC03MDUsNyArNzEwLDcgQEAKICAgIHRvIGd1YXJhbnRlZSB0aGF0IF9QeV9DaGVja1JlY3Vyc2l2ZUNhbGwoKSBpcyByZWd1bGFybHkgY2FsbGVkLgogICAgV2l0aG91dCBVU0VfU1RBQ0tDSEVDSywgdGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhpcy4gKi8KIGludAotX1B5X0NoZWNrUmVjdXJzaXZlQ2FsbChjaGFyICp3aGVyZSkKK19QeV9DaGVja1JlY3Vyc2l2ZUNhbGwoY29uc3QgY2hhciAqd2hlcmUpCiB7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKIApAQCAtNzQyLDcgKzc0Nyw2IEBACiBlbnVtIHdoeV9jb2RlIHsKICAgICAgICAgV0hZX05PVCA9ICAgICAgIDB4MDAwMSwgLyogTm8gZXJyb3IgKi8KICAgICAgICAgV0hZX0VYQ0VQVElPTiA9IDB4MDAwMiwgLyogRXhjZXB0aW9uIG9jY3VycmVkICovCi0gICAgICAgIFdIWV9SRVJBSVNFID0gICAweDAwMDQsIC8qIEV4Y2VwdGlvbiByZS1yYWlzZWQgYnkgJ2ZpbmFsbHknICovCiAgICAgICAgIFdIWV9SRVRVUk4gPSAgICAweDAwMDgsIC8qICdyZXR1cm4nIHN0YXRlbWVudCAqLwogICAgICAgICBXSFlfQlJFQUsgPSAgICAgMHgwMDEwLCAvKiAnYnJlYWsnIHN0YXRlbWVudCAqLwogICAgICAgICBXSFlfQ09OVElOVUUgPSAgMHgwMDIwLCAvKiAnY29udGludWUnIHN0YXRlbWVudCAqLwpAQCAtNzUzLDcgKzc1Nyw3IEBACiBzdGF0aWMgdm9pZCBzYXZlX2V4Y19zdGF0ZShQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKik7CiBzdGF0aWMgdm9pZCBzd2FwX2V4Y19zdGF0ZShQeVRocmVhZFN0YXRlICosIFB5RnJhbWVPYmplY3QgKik7CiBzdGF0aWMgdm9pZCByZXN0b3JlX2FuZF9jbGVhcl9leGNfc3RhdGUoUHlUaHJlYWRTdGF0ZSAqLCBQeUZyYW1lT2JqZWN0ICopOwotc3RhdGljIGVudW0gd2h5X2NvZGUgZG9fcmFpc2UoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CitzdGF0aWMgaW50IGRvX3JhaXNlKFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOwogc3RhdGljIGludCB1bnBhY2tfaXRlcmFibGUoUHlPYmplY3QgKiwgaW50LCBpbnQsIFB5T2JqZWN0ICoqKTsKIAogLyogUmVjb3JkcyB3aGV0aGVyIHRyYWNpbmcgaXMgb24gZm9yIGFueSB0aHJlYWQuICBDb3VudHMgdGhlIG51bWJlciBvZgpAQCAtNzkzLDE4ICs3OTcsMTIgQEAKICNpZmRlZiBEWFBBSVJTCiAgICAgaW50IGxhc3RvcGNvZGUgPSAwOwogI2VuZGlmCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipzdGFja19wb2ludGVyOyAgLyogTmV4dCBmcmVlIHNsb3QgaW4gdmFsdWUgc3RhY2sgKi8KLSAgICByZWdpc3RlciB1bnNpZ25lZCBjaGFyICpuZXh0X2luc3RyOwotICAgIHJlZ2lzdGVyIGludCBvcGNvZGU7ICAgICAgICAvKiBDdXJyZW50IG9wY29kZSAqLwotICAgIHJlZ2lzdGVyIGludCBvcGFyZzsgICAgICAgICAvKiBDdXJyZW50IG9wY29kZSBhcmd1bWVudCwgaWYgYW55ICovCi0gICAgcmVnaXN0ZXIgZW51bSB3aHlfY29kZSB3aHk7IC8qIFJlYXNvbiBmb3IgYmxvY2sgc3RhY2sgdW53aW5kICovCi0gICAgcmVnaXN0ZXIgaW50IGVycjsgICAgICAgICAgIC8qIEVycm9yIHN0YXR1cyAtLSBub256ZXJvIGlmIGVycm9yICovCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKng7ICAgICAgIC8qIFJlc3VsdCBvYmplY3QgLS0gTlVMTCBpZiBlcnJvciAqLwotICAgIHJlZ2lzdGVyIFB5T2JqZWN0ICp2OyAgICAgICAvKiBUZW1wb3Jhcnkgb2JqZWN0cyBwb3BwZWQgb2ZmIHN0YWNrICovCi0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnc7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnU7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKnQ7Ci0gICAgcmVnaXN0ZXIgUHlPYmplY3QgKipmYXN0bG9jYWxzLCAqKmZyZWV2YXJzOworICAgIFB5T2JqZWN0ICoqc3RhY2tfcG9pbnRlcjsgIC8qIE5leHQgZnJlZSBzbG90IGluIHZhbHVlIHN0YWNrICovCisgICAgdW5zaWduZWQgY2hhciAqbmV4dF9pbnN0cjsKKyAgICBpbnQgb3Bjb2RlOyAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgKi8KKyAgICBpbnQgb3Bhcmc7ICAgICAgICAgLyogQ3VycmVudCBvcGNvZGUgYXJndW1lbnQsIGlmIGFueSAqLworICAgIGVudW0gd2h5X2NvZGUgd2h5OyAvKiBSZWFzb24gZm9yIGJsb2NrIHN0YWNrIHVud2luZCAqLworICAgIFB5T2JqZWN0ICoqZmFzdGxvY2FscywgKipmcmVldmFyczsKICAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsgICAgICAgICAgICAvKiBSZXR1cm4gdmFsdWUgKi8KICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIFB5Q29kZU9iamVjdCAqY287CkBAIC0xMTQzLDcgKzExNDEsNyBAQAogICAgICAgICAgICAgICAgd2hlbmV2ZXIgYW4gZXhjZXB0aW9uIGlzIGRldGVjdGVkLiAqLwogICAgICAgICAgICAgaWYgKGNhbGxfdHJhY2VfcHJvdGVjdGVkKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsIFB5VHJhY2VfQ0FMTCwgUHlfTm9uZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIGYsIFB5VHJhY2VfQ0FMTCwgUHlfTm9uZSkpIHsKICAgICAgICAgICAgICAgICAvKiBUcmFjZSBmdW5jdGlvbiByYWlzZWQgYW4gZXJyb3IgKi8KICAgICAgICAgICAgICAgICBnb3RvIGV4aXRfZXZhbF9mcmFtZTsKICAgICAgICAgICAgIH0KQEAgLTExNTMsNyArMTE1MSw3IEBACiAgICAgICAgICAgICAgICByZXR1cm4gaXRzZWxmIGFuZCBpc24ndCBjYWxsZWQgZm9yICJsaW5lIiBldmVudHMgKi8KICAgICAgICAgICAgIGlmIChjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZiwgUHlUcmFjZV9DQUxMLCBQeV9Ob25lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzdGF0ZSwgZiwgUHlUcmFjZV9DQUxMLCBQeV9Ob25lKSkgewogICAgICAgICAgICAgICAgIC8qIFByb2ZpbGUgZnVuY3Rpb24gcmFpc2VkIGFuIGVycm9yICovCiAgICAgICAgICAgICAgICAgZ290byBleGl0X2V2YWxfZnJhbWU7CiAgICAgICAgICAgICB9CkBAIC0xMTg5LDkgKzExODcsMTAgQEAKICAgICBzdGFja19wb2ludGVyID0gZi0+Zl9zdGFja3RvcDsKICAgICBhc3NlcnQoc3RhY2tfcG9pbnRlciAhPSBOVUxMKTsKICAgICBmLT5mX3N0YWNrdG9wID0gTlVMTDsgICAgICAgLyogcmVtYWlucyBOVUxMIHVubGVzcyB5aWVsZCBzdXNwZW5kcyBmcmFtZSAqLworICAgIGYtPmZfZXhlY3V0aW5nID0gMTsKIAotICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IgJiYgIXRocm93ZmxhZykgewotICAgICAgICBpZiAoZi0+Zl9leGNfdHlwZSAhPSBOVUxMICYmIGYtPmZfZXhjX3R5cGUgIT0gUHlfTm9uZSkgeworICAgIGlmIChjby0+Y29fZmxhZ3MgJiBDT19HRU5FUkFUT1IpIHsKKyAgICAgICAgaWYgKCF0aHJvd2ZsYWcgJiYgZi0+Zl9leGNfdHlwZSAhPSBOVUxMICYmIGYtPmZfZXhjX3R5cGUgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgLyogV2Ugd2VyZSBpbiBhbiBleGNlcHQgaGFuZGxlciB3aGVuIHdlIGxlZnQsCiAgICAgICAgICAgICAgICByZXN0b3JlIHRoZSBleGNlcHRpb24gc3RhdGUgd2hpY2ggd2FzIHB1dCBhc2lkZQogICAgICAgICAgICAgICAgKHNlZSBZSUVMRF9WQUxVRSkuICovCkBAIC0xMjA2LDE0ICsxMjA1LDE2IEBACiAjZW5kaWYKIAogICAgIHdoeSA9IFdIWV9OT1Q7Ci0gICAgZXJyID0gMDsKLSAgICB4ID0gUHlfTm9uZTsgICAgICAgIC8qIE5vdCBhIHJlZmVyZW5jZSwganVzdCBhbnl0aGluZyBub24tTlVMTCAqLwotICAgIHcgPSBOVUxMOwogCi0gICAgaWYgKHRocm93ZmxhZykgeyAvKiBzdXBwb3J0IGZvciBnZW5lcmF0b3IudGhyb3coKSAqLwotICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICBnb3RvIG9uX2Vycm9yOwotICAgIH0KKyAgICBpZiAodGhyb3dmbGFnKSAvKiBzdXBwb3J0IGZvciBnZW5lcmF0b3IudGhyb3coKSAqLworICAgICAgICBnb3RvIGVycm9yOworCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBQeUV2YWxfRXZhbEZyYW1lRXgoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24gc2V0LAorICAgICAgIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KSBhbmQgc28gdGhlCisgICAgICAgY2FsbGVyIGxvc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworI2VuZGlmCiAKICAgICBmb3IgKDs7KSB7CiAjaWZkZWYgV0lUSF9UU0MKQEAgLTEyMzUsNiArMTIzNiw3IEBACiAjZW5kaWYKICAgICAgICAgYXNzZXJ0KHN0YWNrX3BvaW50ZXIgPj0gZi0+Zl92YWx1ZXN0YWNrKTsgLyogZWxzZSB1bmRlcmZsb3cgKi8KICAgICAgICAgYXNzZXJ0KFNUQUNLX0xFVkVMKCkgPD0gY28tPmNvX3N0YWNrc2l6ZSk7ICAvKiBlbHNlIG92ZXJmbG93ICovCisgICAgICAgIGFzc2VydCghUHlFcnJfT2NjdXJyZWQoKSk7CiAKICAgICAgICAgLyogRG8gcGVyaW9kaWMgdGhpbmdzLiAgRG9pbmcgdGhpcyBldmVyeSB0aW1lIHRocm91Z2gKICAgICAgICAgICAgdGhlIGxvb3Agd291bGQgYWRkIHRvbyBtdWNoIG92ZXJoZWFkLCBzbyB3ZSBkbyBpdApAQCAtMTI1MCwxNSArMTI1MiwxMiBAQAogICAgICAgICAgICAgICAgICAgIGEgdHJ5OiBmaW5hbGx5OiBibG9jayB1bmludGVycnVwdGlibGUuICovCiAgICAgICAgICAgICAgICAgZ290byBmYXN0X25leHRfb3Bjb2RlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgdHN0YXRlLT50aWNrX2NvdW50ZXIrKzsKICNpZmRlZiBXSVRIX1RTQwogICAgICAgICAgICAgdGlja2VkID0gMTsKICNlbmRpZgogICAgICAgICAgICAgaWYgKF9QeV9hdG9taWNfbG9hZF9yZWxheGVkKCZwZW5kaW5nY2FsbHNfdG9fZG8pKSB7Ci0gICAgICAgICAgICAgICAgaWYgKFB5X01ha2VQZW5kaW5nQ2FsbHMoKSA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKFB5X01ha2VQZW5kaW5nQ2FsbHMoKSA8IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICAgICAgICAgIGlmIChfUHlfYXRvbWljX2xvYWRfcmVsYXhlZCgmZ2lsX2Ryb3BfcmVxdWVzdCkpIHsKQEAgLTEyNzAsMTkgKzEyNjksMjUgQEAKICAgICAgICAgICAgICAgICAvKiBPdGhlciB0aHJlYWRzIG1heSBydW4gbm93ICovCiAKICAgICAgICAgICAgICAgICB0YWtlX2dpbCh0c3RhdGUpOworCisgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgd2Ugc2hvdWxkIG1ha2UgYSBxdWljayBleGl0LiAqLworICAgICAgICAgICAgICAgIGlmIChfUHlfRmluYWxpemluZyAmJiBfUHlfRmluYWxpemluZyAhPSB0c3RhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgZHJvcF9naWwodHN0YXRlKTsKKyAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZXhpdF90aHJlYWQoKTsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBpZiAoUHlUaHJlYWRTdGF0ZV9Td2FwKHRzdGF0ZSkgIT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiY2V2YWw6IG9ycGhhbiB0c3RhdGUiKTsKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICAgICAgLyogQ2hlY2sgZm9yIGFzeW5jaHJvbm91cyBleGNlcHRpb25zLiAqLwogICAgICAgICAgICAgaWYgKHRzdGF0ZS0+YXN5bmNfZXhjICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB4ID0gdHN0YXRlLT5hc3luY19leGM7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmV4YyA9IHRzdGF0ZS0+YXN5bmNfZXhjOwogICAgICAgICAgICAgICAgIHRzdGF0ZS0+YXN5bmNfZXhjID0gTlVMTDsKICAgICAgICAgICAgICAgICBVTlNJR05BTF9BU1lOQ19FWEMoKTsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXROb25lKHgpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgIGdvdG8gb25fZXJyb3I7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0Tm9uZShleGMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihleGMpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTI5MywyNCArMTI5OCwyNCBAQAogCiAgICAgICAgIGlmIChfUHlfVHJhY2luZ1Bvc3NpYmxlICYmCiAgICAgICAgICAgICB0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwgJiYgIXRzdGF0ZS0+dHJhY2luZykgeworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIC8qIHNlZSBtYXliZV9jYWxsX2xpbmVfdHJhY2UKICAgICAgICAgICAgICAgIGZvciBleHBvc2l0b3J5IGNvbW1lbnRzICovCiAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gc3RhY2tfcG9pbnRlcjsKIAogICAgICAgICAgICAgZXJyID0gbWF5YmVfY2FsbF9saW5lX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYsICZpbnN0cl9sYiwgJmluc3RyX3ViLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnN0cl9wcmV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluc3RyX2xiLCAmaW5zdHJfdWIsICZpbnN0cl9wcmV2KTsKICAgICAgICAgICAgIC8qIFJlbG9hZCBwb3NzaWJseSBjaGFuZ2VkIGZyYW1lIGZpZWxkcyAqLwogICAgICAgICAgICAgSlVNUFRPKGYtPmZfbGFzdGkpOwogICAgICAgICAgICAgaWYgKGYtPmZfc3RhY2t0b3AgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgPSBmLT5mX3N0YWNrdG9wOwogICAgICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgaWYgKGVycikKICAgICAgICAgICAgICAgICAvKiB0cmFjZSBmdW5jdGlvbiByYWlzZWQgYW4gZXhjZXB0aW9uICovCi0gICAgICAgICAgICAgICAgZ290byBvbl9lcnJvcjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICB9CiAKICAgICAgICAgLyogRXh0cmFjdCBvcGNvZGUgYW5kIGFyZ3VtZW50ICovCkBAIC0xMzU3LDg3ICsxMzYyLDk5IEBACiAgICAgICAgIFRBUkdFVChOT1ApCiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAKLSAgICAgICAgVEFSR0VUKExPQURfRkFTVCkKLSAgICAgICAgICAgIHggPSBHRVRMT0NBTChvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgUHlfSU5DUkVGKHgpOwotICAgICAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOworICAgICAgICBUQVJHRVQoTE9BRF9GQVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBHRVRMT0NBTChvcGFyZyk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX1VuYm91bmRMb2NhbEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOQk9VTkRMT0NBTF9FUlJPUl9NU0csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9HZXRJdGVtKGNvLT5jb192YXJuYW1lcywgb3BhcmcpKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoUHlFeGNfVW5ib3VuZExvY2FsRXJyb3IsCi0gICAgICAgICAgICAgICAgVU5CT1VORExPQ0FMX0VSUk9SX01TRywKLSAgICAgICAgICAgICAgICBQeVR1cGxlX0dldEl0ZW0oY28tPmNvX3Zhcm5hbWVzLCBvcGFyZykpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKExPQURfQ09OU1QpCi0gICAgICAgICAgICB4ID0gR0VUSVRFTShjb25zdHMsIG9wYXJnKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQeV9JTkNSRUYodmFsdWUpOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTE9BRF9DT05TVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gR0VUSVRFTShjb25zdHMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKKyAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhTVE9SRV9GQVNUKTsKLSAgICAgICAgVEFSR0VUKFNUT1JFX0ZBU1QpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBTRVRMT0NBTChvcGFyZywgdik7CisgICAgICAgIFRBUkdFVChTVE9SRV9GQVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgIFNFVExPQ0FMKG9wYXJnLCB2YWx1ZSk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUE9QX1RPUCkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgVEFSR0VUKFBPUF9UT1ApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFBPUCgpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChST1RfVFdPKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgdyA9IFNFQ09ORCgpOwotICAgICAgICAgICAgU0VUX1RPUCh3KTsKLSAgICAgICAgICAgIFNFVF9TRUNPTkQodik7CisgICAgICAgIFRBUkdFVChST1RfVFdPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2Vjb25kID0gU0VDT05EKCk7CisgICAgICAgICAgICBTRVRfVE9QKHNlY29uZCk7CisgICAgICAgICAgICBTRVRfU0VDT05EKHRvcCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoUk9UX1RIUkVFKQotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgdyA9IFNFQ09ORCgpOwotICAgICAgICAgICAgeCA9IFRISVJEKCk7Ci0gICAgICAgICAgICBTRVRfVE9QKHcpOwotICAgICAgICAgICAgU0VUX1NFQ09ORCh4KTsKLSAgICAgICAgICAgIFNFVF9USElSRCh2KTsKKyAgICAgICAgVEFSR0VUKFJPVF9USFJFRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnRvcCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNlY29uZCA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnRoaXJkID0gVEhJUkQoKTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc2Vjb25kKTsKKyAgICAgICAgICAgIFNFVF9TRUNPTkQodGhpcmQpOworICAgICAgICAgICAgU0VUX1RISVJEKHRvcCk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoRFVQX1RPUCkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKLSAgICAgICAgICAgIFBVU0godik7CisgICAgICAgIFRBUkdFVChEVVBfVE9QKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeV9JTkNSRUYodG9wKTsKKyAgICAgICAgICAgIFBVU0godG9wKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChEVVBfVE9QX1RXTykKLSAgICAgICAgICAgIHggPSBUT1AoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKLSAgICAgICAgICAgIHcgPSBTRUNPTkQoKTsKLSAgICAgICAgICAgIFB5X0lOQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKERVUF9UT1BfVFdPKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdG9wID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc2Vjb25kID0gU0VDT05EKCk7CisgICAgICAgICAgICBQeV9JTkNSRUYodG9wKTsKKyAgICAgICAgICAgIFB5X0lOQ1JFRihzZWNvbmQpOwogICAgICAgICAgICAgU1RBQ0tBREooMik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgU0VUX1NFQ09ORCh3KTsKKyAgICAgICAgICAgIFNFVF9UT1AodG9wKTsKKyAgICAgICAgICAgIFNFVF9TRUNPTkQoc2Vjb25kKTsKICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9QT1NJVElWRSkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Qb3NpdGl2ZSh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChVTkFSWV9QT1NJVElWRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfUG9zaXRpdmUodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9ORUdBVElWRSkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9OZWdhdGl2ZSh2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChVTkFSWV9ORUdBVElWRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfTmVnYXRpdmUodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTkFSWV9OT1QpCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgIFRBUkdFVChVTkFSWV9OT1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFRPUCgpOworICAgICAgICAgICAgaW50IGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOwogICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKFB5X1RydWUpOwogICAgICAgICAgICAgICAgIFNFVF9UT1AoUHlfVHJ1ZSk7CkBAIC0xNDUwLDQxNiArMTQ2Nyw0NjQgQEAKICAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFVOQVJZX0lOVkVSVCkKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JbnZlcnQodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoVU5BUllfSU5WRVJUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JbnZlcnQodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfUE9XRVIpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfUG93ZXIodiwgdywgUHlfTm9uZSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX1BPV0VSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhwID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1Bvd2VyKGJhc2UsIGV4cCwgUHlfTm9uZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXhwKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfTVVMVElQTFkpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfTXVsdGlwbHkodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX01VTFRJUExZKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfTXVsdGlwbHkobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfVFJVRV9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfVHJ1ZURpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfVFJVRV9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX1RydWVEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0ZMT09SX0RJVklERSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9GbG9vckRpdmlkZSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChCSU5BUllfRkxPT1JfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9GbG9vckRpdmlkZShkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlzb3IpOworICAgICAgICAgICAgU0VUX1RPUChxdW90aWVudCk7CisgICAgICAgICAgICBpZiAocXVvdGllbnQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfTU9EVUxPKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpKQotICAgICAgICAgICAgICAgIHggPSBQeVVuaWNvZGVfRm9ybWF0KHYsIHcpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHggPSBQeU51bWJlcl9SZW1haW5kZXIodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoQklOQVJZX01PRFVMTykgeworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlzb3IgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpZGVuZCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5VW5pY29kZV9DaGVja0V4YWN0KGRpdmlkZW5kKSA/CisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zvcm1hdChkaXZpZGVuZCwgZGl2aXNvcikgOgorICAgICAgICAgICAgICAgIFB5TnVtYmVyX1JlbWFpbmRlcihkaXZpZGVuZCwgZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aWRlbmQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9BREQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QodikgJiYKLSAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9DaGVja0V4YWN0KHcpKSB7Ci0gICAgICAgICAgICAgICAgeCA9IHVuaWNvZGVfY29uY2F0ZW5hdGUodiwgdywgZiwgbmV4dF9pbnN0cik7CisgICAgICAgIFRBUkdFVChCSU5BUllfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqc3VtOworICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KGxlZnQpICYmCisgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdChyaWdodCkpIHsKKyAgICAgICAgICAgICAgICBzdW0gPSB1bmljb2RlX2NvbmNhdGVuYXRlKGxlZnQsIHJpZ2h0LCBmLCBuZXh0X2luc3RyKTsKICAgICAgICAgICAgICAgICAvKiB1bmljb2RlX2NvbmNhdGVuYXRlIGNvbnN1bWVkIHRoZSByZWYgdG8gdiAqLwotICAgICAgICAgICAgICAgIGdvdG8gc2tpcF9kZWNyZWZfdng7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlOdW1iZXJfQWRkKHYsIHcpOworICAgICAgICAgICAgICAgIHN1bSA9IFB5TnVtYmVyX0FkZChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc3VtKTsKKyAgICAgICAgICAgIGlmIChzdW0gPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfU1VCVFJBQ1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaWZmID0gUHlOdW1iZXJfU3VidHJhY3QobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFNFVF9UT1AoZGlmZik7CisgICAgICAgICAgICBpZiAoZGlmZiA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJTQ1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdWIgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9HZXRJdGVtKGNvbnRhaW5lciwgc3ViKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX0xTSElGVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0xzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9SU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9Sc2hpZnQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCSU5BUllfQU5EKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfQW5kKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQklOQVJZX1hPUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX1hvcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKEJJTkFSWV9PUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX09yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoTElTVF9BUFBFTkQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCA9IFBFRUsob3BhcmcpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5TGlzdF9BcHBlbmQobGlzdCwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgc2tpcF9kZWNyZWZfdng6Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCSU5BUllfU1VCVFJBQ1QpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfU3VidHJhY3Qodiwgdyk7CisgICAgICAgIFRBUkdFVChTRVRfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnNldCA9IHN0YWNrX3BvaW50ZXJbLW9wYXJnXTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoc2V0LCB2KTsKICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9TVUJTQ1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX1BPV0VSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhwID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqYmFzZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VQb3dlcihiYXNlLCBleHAsIFB5X05vbmUpOworICAgICAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICAgICAgUHlfREVDUkVGKGV4cCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX0xTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Mc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9NVUxUSVBMWSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VNdWx0aXBseShsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9SU0hJRlQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfUnNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfVFJVRV9ESVZJREUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaXZpc29yID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aWRlbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpxdW90aWVudCA9IFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlKGRpdmlkZW5kLCBkaXZpc29yKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpZGVuZCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZGl2aXNvcik7CisgICAgICAgICAgICBTRVRfVE9QKHF1b3RpZW50KTsKKyAgICAgICAgICAgIGlmIChxdW90aWVudCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJJTkFSWV9BTkQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfQW5kKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfRkxPT1JfRElWSURFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqZGl2aXNvciA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmRpdmlkZW5kID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVvdGllbnQgPSBQeU51bWJlcl9JblBsYWNlRmxvb3JEaXZpZGUoZGl2aWRlbmQsIGRpdmlzb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKGRpdmlkZW5kKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihkaXZpc29yKTsKKyAgICAgICAgICAgIFNFVF9UT1AocXVvdGllbnQpOworICAgICAgICAgICAgaWYgKHF1b3RpZW50ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX1hPUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9Yb3Iodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9NT0RVTE8pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptb2QgPSBQeU51bWJlcl9JblBsYWNlUmVtYWluZGVyKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKG1vZCk7CisgICAgICAgICAgICBpZiAobW9kID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQklOQVJZX09SKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX09yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoTElTVF9BUFBFTkQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gUEVFSyhvcGFyZyk7Ci0gICAgICAgICAgICBlcnIgPSBQeUxpc3RfQXBwZW5kKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKFNFVF9BREQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOwotICAgICAgICAgICAgZXJyID0gUHlTZXRfQWRkKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgUFJFRElDVChKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfUE9XRVIpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVBvd2VyKHYsIHcsIFB5X05vbmUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9NVUxUSVBMWSkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlTXVsdGlwbHkodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1RSVUVfRElWSURFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VUcnVlRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9GTE9PUl9ESVZJREUpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUZsb29yRGl2aWRlKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoSU5QTEFDRV9NT0RVTE8pCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVJlbWFpbmRlcih2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKElOUExBQ0VfQUREKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfQ2hlY2tFeGFjdCh3KSkgewotICAgICAgICAgICAgICAgIHggPSB1bmljb2RlX2NvbmNhdGVuYXRlKHYsIHcsIGYsIG5leHRfaW5zdHIpOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9BREQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdW07CisgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NoZWNrRXhhY3QobGVmdCkgJiYgUHlVbmljb2RlX0NoZWNrRXhhY3QocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgc3VtID0gdW5pY29kZV9jb25jYXRlbmF0ZShsZWZ0LCByaWdodCwgZiwgbmV4dF9pbnN0cik7CiAgICAgICAgICAgICAgICAgLyogdW5pY29kZV9jb25jYXRlbmF0ZSBjb25zdW1lZCB0aGUgcmVmIHRvIHYgKi8KLSAgICAgICAgICAgICAgICBnb3RvIHNraXBfZGVjcmVmX3Y7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUFkZCh2LCB3KTsKKyAgICAgICAgICAgICAgICBzdW0gPSBQeU51bWJlcl9JblBsYWNlQWRkKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgc2tpcF9kZWNyZWZfdjoKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChzdW0pOworICAgICAgICAgICAgaWYgKHN1bSA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfU1VCVFJBQ1QpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfU1VCVFJBQ1QpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpkaWZmID0gUHlOdW1iZXJfSW5QbGFjZVN1YnRyYWN0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKGRpZmYpOworICAgICAgICAgICAgaWYgKGRpZmYgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX0xTSElGVCkKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlTHNoaWZ0KHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfTFNISUZUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZUxzaGlmdChsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfUlNISUZUKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5TnVtYmVyX0luUGxhY2VSc2hpZnQodiwgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBUQVJHRVQoSU5QTEFDRV9SU0hJRlQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlUnNoaWZ0KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihsZWZ0KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyaWdodCk7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU5QTEFDRV9BTkQpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZUFuZCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIFRBUkdFVChJTlBMQUNFX0FORCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IFB5TnVtYmVyX0luUGxhY2VBbmQobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTlBMQUNFX1hPUikKLSAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU51bWJlcl9JblBsYWNlWG9yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfWE9SKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqcmlnaHQgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpsZWZ0ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzID0gUHlOdW1iZXJfSW5QbGFjZVhvcihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKElOUExBQ0VfT1IpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlOdW1iZXJfSW5QbGFjZU9yKHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgU0VUX1RPUCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKElOUExBQ0VfT1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyaWdodCA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmxlZnQgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU51bWJlcl9JblBsYWNlT3IobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgUHlfREVDUkVGKGxlZnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHJpZ2h0KTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9TVUJTQ1IpCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICB2ID0gU0VDT05EKCk7Ci0gICAgICAgICAgICB1ID0gVEhJUkQoKTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX1NVQlNDUikgeworICAgICAgICAgICAgUHlPYmplY3QgKnN1YiA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKmNvbnRhaW5lciA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBUSElSRCgpOworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIFNUQUNLQURKKC0zKTsKICAgICAgICAgICAgIC8qIHZbd10gPSB1ICovCi0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKHYsIHcsIHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfU2V0SXRlbShjb250YWluZXIsIHN1Yiwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihjb250YWluZXIpOworICAgICAgICAgICAgUHlfREVDUkVGKHN1Yik7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX1NVQlNDUikKLSAgICAgICAgICAgIHcgPSBUT1AoKTsKLSAgICAgICAgICAgIHYgPSBTRUNPTkQoKTsKKyAgICAgICAgVEFSR0VUKERFTEVURV9TVUJTQ1IpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdWIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb250YWluZXIgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIGludCBlcnI7CiAgICAgICAgICAgICBTVEFDS0FESigtMik7CiAgICAgICAgICAgICAvKiBkZWwgdlt3XSAqLwotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfRGVsSXRlbSh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfRGVsSXRlbShjb250YWluZXIsIHN1Yik7CisgICAgICAgICAgICBQeV9ERUNSRUYoY29udGFpbmVyKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzdWIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBSSU5UX0VYUFIpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICB3ID0gUHlTeXNfR2V0T2JqZWN0KCJkaXNwbGF5aG9vayIpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgeworICAgICAgICBUQVJHRVQoUFJJTlRfRVhQUikgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoZGlzcGxheWhvb2spOworICAgICAgICAgICAgUHlPYmplY3QgKnZhbHVlID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqaG9vayA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9kaXNwbGF5aG9vayk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICAgICAgaWYgKGhvb2sgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsb3N0IHN5cy5kaXNwbGF5aG9vayIpOwotICAgICAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgICAgIHggPSBOVUxMOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgewotICAgICAgICAgICAgICAgIHggPSBQeVR1cGxlX1BhY2soMSwgdik7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICB3ID0gUHlFdmFsX0NhbGxPYmplY3QodywgeCk7Ci0gICAgICAgICAgICAgICAgUHlfWERFQ1JFRih3KTsKLSAgICAgICAgICAgICAgICBpZiAodyA9PSBOVUxMKQotICAgICAgICAgICAgICAgICAgICBlcnIgPSAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYoeCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoaG9vaywgdmFsdWUsIE5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKHZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICNpZmRlZiBDQVNFX1RPT19CSUcKICAgICAgICAgZGVmYXVsdDogc3dpdGNoIChvcGNvZGUpIHsKICNlbmRpZgotICAgICAgICBUQVJHRVQoUkFJU0VfVkFSQVJHUykKLSAgICAgICAgICAgIHYgPSB3ID0gTlVMTDsKKyAgICAgICAgVEFSR0VUKFJBSVNFX1ZBUkFSR1MpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjYXVzZSA9IE5VTEwsICpleGMgPSBOVUxMOwogICAgICAgICAgICAgc3dpdGNoIChvcGFyZykgewogICAgICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgICAgIHYgPSBQT1AoKTsgLyogY2F1c2UgKi8KKyAgICAgICAgICAgICAgICBjYXVzZSA9IFBPUCgpOyAvKiBjYXVzZSAqLwogICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsgLyogZXhjICovCisgICAgICAgICAgICAgICAgZXhjID0gUE9QKCk7IC8qIGV4YyAqLwogICAgICAgICAgICAgY2FzZSAwOiAvKiBGYWxsdGhyb3VnaCAqLwotICAgICAgICAgICAgICAgIHdoeSA9IGRvX3JhaXNlKHcsIHYpOworICAgICAgICAgICAgICAgIGlmIChkb19yYWlzZShleGMsIGNhdXNlKSkgeworICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCBSQUlTRV9WQVJBUkdTIG9wYXJnIik7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9MT0NBTFMpCi0gICAgICAgICAgICB4ID0gUE9QKCk7Ci0gICAgICAgICAgICB2ID0gZi0+Zl9sb2NhbHM7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKHYpOwotICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPSB4OwotICAgICAgICAgICAgRElTUEFUQ0goKTsKLQotICAgICAgICBUQVJHRVQoUkVUVVJOX1ZBTFVFKQorICAgICAgICBUQVJHRVQoUkVUVVJOX1ZBTFVFKSB7CiAgICAgICAgICAgICByZXR2YWwgPSBQT1AoKTsKICAgICAgICAgICAgIHdoeSA9IFdIWV9SRVRVUk47CiAgICAgICAgICAgICBnb3RvIGZhc3RfYmxvY2tfZW5kOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFlJRUxEX0ZST00pCi0gICAgICAgICAgICB1ID0gUE9QKCk7Ci0gICAgICAgICAgICB4ID0gVE9QKCk7Ci0gICAgICAgICAgICAvKiBzZW5kIHUgdG8geCAqLwotICAgICAgICAgICAgaWYgKFB5R2VuX0NoZWNrRXhhY3QoeCkpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBfUHlHZW5fU2VuZCgoUHlHZW5PYmplY3QgKil4LCB1KTsKKyAgICAgICAgVEFSR0VUKFlJRUxEX0ZST00pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVjaWV2ZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoUHlHZW5fQ2hlY2tFeGFjdChyZWNpZXZlcikpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSBfUHlHZW5fU2VuZCgoUHlHZW5PYmplY3QgKilyZWNpZXZlciwgdik7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKHNlbmQpOwotICAgICAgICAgICAgICAgIGlmICh1ID09IFB5X05vbmUpCi0gICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IFB5X1RZUEUoeCktPnRwX2l0ZXJuZXh0KHgpOworICAgICAgICAgICAgICAgIGlmICh2ID09IFB5X05vbmUpCisgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IFB5X1RZUEUocmVjaWV2ZXIpLT50cF9pdGVybmV4dChyZWNpZXZlcik7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHgsICZQeUlkX3NlbmQsICJPIiwgdSk7CisgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKHJlY2lldmVyLCAmUHlJZF9zZW5kLCB2LCBOVUxMKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih1KTsKLSAgICAgICAgICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBpZiAocmV0dmFsID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBQeU9iamVjdCAqdmFsOwotICAgICAgICAgICAgICAgIHggPSBQT1AoKTsgLyogUmVtb3ZlIGl0ZXIgZnJvbSBzdGFjayAqLwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgICAgICAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1N0b3BJdGVyYXRpb24pKQorICAgICAgICAgICAgICAgICAgICBjYWxsX2V4Y190cmFjZSh0c3RhdGUtPmNfdHJhY2VmdW5jLCB0c3RhdGUtPmNfdHJhY2VvYmosIHRzdGF0ZSwgZik7CiAgICAgICAgICAgICAgICAgZXJyID0gX1B5R2VuX0ZldGNoU3RvcEl0ZXJhdGlvblZhbHVlKCZ2YWwpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgeCA9IHZhbDsKLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZWNpZXZlcik7CisgICAgICAgICAgICAgICAgU0VUX1RPUCh2YWwpOworICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiB4IHJlbWFpbnMgb24gc3RhY2ssIHJldHZhbCBpcyB2YWx1ZSB0byBiZSB5aWVsZGVkICovCiAgICAgICAgICAgICBmLT5mX3N0YWNrdG9wID0gc3RhY2tfcG9pbnRlcjsKQEAgLTE4NjcsMzkgKzE5MzIsMzggQEAKICAgICAgICAgICAgIC8qIGFuZCByZXBlYXQuLi4gKi8KICAgICAgICAgICAgIGYtPmZfbGFzdGktLTsKICAgICAgICAgICAgIGdvdG8gZmFzdF95aWVsZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChZSUVMRF9WQUxVRSkKKyAgICAgICAgVEFSR0VUKFlJRUxEX1ZBTFVFKSB7CiAgICAgICAgICAgICByZXR2YWwgPSBQT1AoKTsKICAgICAgICAgICAgIGYtPmZfc3RhY2t0b3AgPSBzdGFja19wb2ludGVyOwogICAgICAgICAgICAgd2h5ID0gV0hZX1lJRUxEOwogICAgICAgICAgICAgZ290byBmYXN0X3lpZWxkOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBPUF9FWENFUFQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7Ci0gICAgICAgICAgICAgICAgaWYgKGItPmJfdHlwZSAhPSBFWENFUFRfSEFORExFUikgewotICAgICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAicG9wcGVkIGJsb2NrIGlzIG5vdCBhbiBleGNlcHQgaGFuZGxlciIpOwotICAgICAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgVU5XSU5EX0VYQ0VQVF9IQU5ETEVSKGIpOworICAgICAgICBUQVJHRVQoUE9QX0VYQ0VQVCkgeworICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9IFB5RnJhbWVfQmxvY2tQb3AoZik7CisgICAgICAgICAgICBpZiAoYi0+Yl90eXBlICE9IEVYQ0VQVF9IQU5ETEVSKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9wcGVkIGJsb2NrIGlzIG5vdCBhbiBleGNlcHQgaGFuZGxlciIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBVTldJTkRfRVhDRVBUX0hBTkRMRVIoYik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFBPUF9CTE9DSykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBQeVRyeUJsb2NrICpiID0gUHlGcmFtZV9CbG9ja1BvcChmKTsKLSAgICAgICAgICAgICAgICBVTldJTkRfQkxPQ0soYik7Ci0gICAgICAgICAgICB9CisgICAgICAgIFRBUkdFVChQT1BfQkxPQ0spIHsKKyAgICAgICAgICAgIFB5VHJ5QmxvY2sgKmIgPSBQeUZyYW1lX0Jsb2NrUG9wKGYpOworICAgICAgICAgICAgVU5XSU5EX0JMT0NLKGIpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRChFTkRfRklOQUxMWSk7Ci0gICAgICAgIFRBUkdFVChFTkRfRklOQUxMWSkKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2sodikpIHsKLSAgICAgICAgICAgICAgICB3aHkgPSAoZW51bSB3aHlfY29kZSkgUHlMb25nX0FTX0xPTkcodik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KHdoeSAhPSBXSFlfWUlFTEQpOworICAgICAgICBUQVJHRVQoRU5EX0ZJTkFMTFkpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdGF0dXMgPSBQT1AoKTsKKyAgICAgICAgICAgIGlmIChQeUxvbmdfQ2hlY2soc3RhdHVzKSkgeworICAgICAgICAgICAgICAgIHdoeSA9IChlbnVtIHdoeV9jb2RlKSBQeUxvbmdfQVNfTE9ORyhzdGF0dXMpOworICAgICAgICAgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX1lJRUxEICYmIHdoeSAhPSBXSFlfRVhDRVBUSU9OKTsKICAgICAgICAgICAgICAgICBpZiAod2h5ID09IFdIWV9SRVRVUk4gfHwKICAgICAgICAgICAgICAgICAgICAgd2h5ID09IFdIWV9DT05USU5VRSkKICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gUE9QKCk7CkBAIC0xOTEyLDI0OCArMTk3NiwyODAgQEAKICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGItPmJfdHlwZSA9PSBFWENFUFRfSEFORExFUik7CiAgICAgICAgICAgICAgICAgICAgIFVOV0lORF9FWENFUFRfSEFORExFUihiKTsKICAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX05PVDsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzdGF0dXMpOworICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHYpKSB7Ci0gICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBQeUVycl9SZXN0b3JlKHYsIHcsIHUpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9SRVJBSVNFOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZWxzZSBpZiAoUHlFeGNlcHRpb25DbGFzc19DaGVjayhzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKmV4YyA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp0YiA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoc3RhdHVzLCBleGMsIHRiKTsKKyAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICh2ICE9IFB5X05vbmUpIHsKKyAgICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyAhPSBQeV9Ob25lKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAiJ2ZpbmFsbHknIHBvcHMgYmFkIGV4Y2VwdGlvbiIpOwotICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUHlfREVDUkVGKHN0YXR1cyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfQlVJTERfQ0xBU1MpCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKExPQURfQlVJTERfQ0xBU1MpIHsKICAgICAgICAgICAgIF9QeV9JREVOVElGSUVSKF9fYnVpbGRfY2xhc3NfXyk7CiAKKyAgICAgICAgICAgIFB5T2JqZWN0ICpiYzsKICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2J1aWx0aW5zKSkgewotICAgICAgICAgICAgICAgIHggPSBfUHlEaWN0X0dldEl0ZW1JZChmLT5mX2J1aWx0aW5zLCAmUHlJZF9fX2J1aWxkX2NsYXNzX18pOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBiYyA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19fYnVpbGRfY2xhc3NfXyk7CisgICAgICAgICAgICAgICAgaWYgKGJjID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05hbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2J1aWxkX2NsYXNzX18gbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGJjKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpidWlsZF9jbGFzc19zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX2J1aWxkX2NsYXNzX18pOwogICAgICAgICAgICAgICAgIGlmIChidWlsZF9jbGFzc19zdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgYnVpbGRfY2xhc3Nfc3RyKTsKLSAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgYmMgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIGJ1aWxkX2NsYXNzX3N0cik7CisgICAgICAgICAgICAgICAgaWYgKGJjID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX05hbWVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19idWlsZF9jbGFzc19fIG5vdCBmb3VuZCIpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQVVNIKGJjKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfTkFNRSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAoKHggPSBmLT5mX2xvY2FscykgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdCh4KSkKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oeCwgdywgdik7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9TZXRJdGVtKHgsIHcsIHYpOworICAgICAgICBUQVJHRVQoU1RPUkVfTkFNRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFBPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm5zID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKG5zID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgZm91bmQgd2hlbiBzdG9yaW5nICVSIiwgbmFtZSk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIGlmIChlcnIgPT0gMCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgZm91bmQgd2hlbiBzdG9yaW5nICVSIiwgdyk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChucykpCisgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obnMsIG5hbWUsIHYpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEl0ZW0obnMsIG5hbWUsIHYpOworICAgICAgICAgICAgUHlfREVDUkVGKHYpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9OQU1FKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIGlmICgoeCA9IGYtPmZfbG9jYWxzKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChlcnIgPSBQeU9iamVjdF9EZWxJdGVtKHgsIHcpKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZyhQeUV4Y19OYW1lRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3KTsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgVEFSR0VUKERFTEVURV9OQU1FKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpucyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChucyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIHdoZW4gZGVsZXRpbmcgJVIiLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5c3RlbUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBkZWxldGluZyAlUiIsIHcpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9EZWxJdGVtKG5zLCBuYW1lKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX05hbWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhVTlBBQ0tfU0VRVUVOQ0UpOwotICAgICAgICBUQVJHRVQoVU5QQUNLX1NFUVVFTkNFKQotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKFB5VHVwbGVfQ2hlY2tFeGFjdCh2KSAmJgotICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUodikgPT0gb3BhcmcpIHsKLSAgICAgICAgICAgICAgICBQeU9iamVjdCAqKml0ZW1zID0gXAotICAgICAgICAgICAgICAgICAgICAoKFB5VHVwbGVPYmplY3QgKil2KS0+b2JfaXRlbTsKKyAgICAgICAgVEFSR0VUKFVOUEFDS19TRVFVRU5DRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKnNlcSA9IFBPUCgpLCAqaXRlbSwgKippdGVtczsKKyAgICAgICAgICAgIGlmIChQeVR1cGxlX0NoZWNrRXhhY3Qoc2VxKSAmJgorICAgICAgICAgICAgICAgIFB5VHVwbGVfR0VUX1NJWkUoc2VxKSA9PSBvcGFyZykgeworICAgICAgICAgICAgICAgIGl0ZW1zID0gKChQeVR1cGxlT2JqZWN0ICopc2VxKS0+b2JfaXRlbTsKICAgICAgICAgICAgICAgICB3aGlsZSAob3BhcmctLSkgewotICAgICAgICAgICAgICAgICAgICB3ID0gaXRlbXNbb3BhcmddOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodyk7Ci0gICAgICAgICAgICAgICAgICAgIFBVU0godyk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tvcGFyZ107CisgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgUFVTSChpdGVtKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHYpICYmCi0gICAgICAgICAgICAgICAgICAgICAgIFB5TGlzdF9HRVRfU0laRSh2KSA9PSBvcGFyZykgewotICAgICAgICAgICAgICAgIFB5T2JqZWN0ICoqaXRlbXMgPSBcCi0gICAgICAgICAgICAgICAgICAgICgoUHlMaXN0T2JqZWN0ICopdiktPm9iX2l0ZW07CisgICAgICAgICAgICB9IGVsc2UgaWYgKFB5TGlzdF9DaGVja0V4YWN0KHNlcSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgUHlMaXN0X0dFVF9TSVpFKHNlcSkgPT0gb3BhcmcpIHsKKyAgICAgICAgICAgICAgICBpdGVtcyA9ICgoUHlMaXN0T2JqZWN0ICopc2VxKS0+b2JfaXRlbTsKICAgICAgICAgICAgICAgICB3aGlsZSAob3BhcmctLSkgewotICAgICAgICAgICAgICAgICAgICB3ID0gaXRlbXNbb3BhcmddOwotICAgICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodyk7Ci0gICAgICAgICAgICAgICAgICAgIFBVU0godyk7CisgICAgICAgICAgICAgICAgICAgIGl0ZW0gPSBpdGVtc1tvcGFyZ107CisgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRihpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgUFVTSChpdGVtKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHVucGFja19pdGVyYWJsZSh2LCBvcGFyZywgLTEsCisgICAgICAgICAgICB9IGVsc2UgaWYgKHVucGFja19pdGVyYWJsZShzZXEsIG9wYXJnLCAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKyBvcGFyZykpIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESihvcGFyZyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qIHVucGFja19pdGVyYWJsZSgpIHJhaXNlZCBhbiBleGNlcHRpb24gKi8KLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChVTlBBQ0tfRVgpCi0gICAgICAgIHsKKyAgICAgICAgVEFSR0VUKFVOUEFDS19FWCkgewogICAgICAgICAgICAgaW50IHRvdGFsYXJncyA9IDEgKyAob3BhcmcgJiAweEZGKSArIChvcGFyZyA+PiA4KTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXEgPSBQT1AoKTsKIAotICAgICAgICAgICAgaWYgKHVucGFja19pdGVyYWJsZSh2LCBvcGFyZyAmIDB4RkYsIG9wYXJnID4+IDgsCisgICAgICAgICAgICBpZiAodW5wYWNrX2l0ZXJhYmxlKHNlcSwgb3BhcmcgJiAweEZGLCBvcGFyZyA+PiA4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFja19wb2ludGVyICsgdG90YWxhcmdzKSkgewogICAgICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgKz0gdG90YWxhcmdzOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzZXEpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTVE9SRV9BVFRSKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsKKyAgICAgICAgVEFSR0VUKFNUT1JFX0FUVFIpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKm93bmVyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFNFQ09ORCgpOworICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIodiwgdywgdSk7IC8qIHYudyA9IHUgKi8KKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIob3duZXIsIG5hbWUsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeV9ERUNSRUYob3duZXIpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKERFTEVURV9BVFRSKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIodiwgdywgKFB5T2JqZWN0ICopTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRlbCB2LncgKi8KKyAgICAgICAgVEFSR0VUKERFTEVURV9BVFRSKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpvd25lciA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X1NldEF0dHIob3duZXIsIG5hbWUsIChQeU9iamVjdCAqKU5VTEwpOworICAgICAgICAgICAgUHlfREVDUkVGKG93bmVyKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChTVE9SRV9HTE9CQUwpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBQT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbShmLT5mX2dsb2JhbHMsIG5hbWUsIHYpOwogICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoU1RPUkVfR0xPQkFMKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBQT1AoKTsKLSAgICAgICAgICAgIGVyciA9IFB5RGljdF9TZXRJdGVtKGYtPmZfZ2xvYmFscywgdywgdik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoREVMRVRFX0dMT0JBTCkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoKGVyciA9IFB5RGljdF9EZWxJdGVtKGYtPmZfZ2xvYmFscywgdykpICE9IDApCisgICAgICAgIFRBUkdFVChERUxFVEVfR0xPQkFMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBlcnIgPSBQeURpY3RfRGVsSXRlbShmLT5mX2dsb2JhbHMsIG5hbWUpOworICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7CiAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCi0gICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwgR0xPQkFMX05BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMT0FEX05BTUUpCi0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgaWYgKCh2ID0gZi0+Zl9sb2NhbHMpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBsb2FkaW5nICVSIiwgdyk7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLCBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICAgICAgICAgIHggPSBQeURpY3RfR2V0SXRlbSh2LCB3KTsKLSAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHgpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChMT0FEX05BTUUpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpuYW1lID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOworICAgICAgICAgICAgUHlPYmplY3QgKmxvY2FscyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgUHlPYmplY3QgKnY7CisgICAgICAgICAgICBpZiAobG9jYWxzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3lzdGVtRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBsb2NhbHMgd2hlbiBsb2FkaW5nICVSIiwgbmFtZSk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChQeURpY3RfQ2hlY2tFeGFjdChsb2NhbHMpKSB7CisgICAgICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfWElOQ1JFRih2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKHYsIHcpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwgJiYgX1B5RXJyX09DQ1VSUkVEKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFQeUVycl9FeGNlcHRpb25NYXRjaGVzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfS2V5RXJyb3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0obG9jYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMICYmIF9QeUVycl9PQ0NVUlJFRCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19LZXlFcnJvcikpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICB4ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCB3KTsKLSAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHgpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9nbG9iYWxzLCBuYW1lKTsKKyAgICAgICAgICAgICAgICBQeV9YSU5DUkVGKHYpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGYtPmZfYnVpbHRpbnMpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB4ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y19jaGVja19hcmcoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0lOQ1JFRih2KTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfYnVpbHRpbnMsIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdiA9IFB5T2JqZWN0X0dldEl0ZW0oZi0+Zl9idWlsdGlucywgbmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfZXhjX2NoZWNrX2FyZygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfTmFtZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5BTUVfRVJST1JfTVNHLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKKyAgICAgICAgICAgIFBVU0godik7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfR0xPQkFMKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgVEFSR0VUKExPQURfR0xPQkFMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2OwogICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGYtPmZfZ2xvYmFscykKICAgICAgICAgICAgICAgICAmJiBQeURpY3RfQ2hlY2tFeGFjdChmLT5mX2J1aWx0aW5zKSkgewotICAgICAgICAgICAgICAgIHggPSBfUHlEaWN0X0xvYWRHbG9iYWwoKFB5RGljdE9iamVjdCAqKWYtPmZfZ2xvYmFscywKKyAgICAgICAgICAgICAgICB2ID0gX1B5RGljdF9Mb2FkR2xvYmFsKChQeURpY3RPYmplY3QgKilmLT5mX2dsb2JhbHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHlEaWN0T2JqZWN0ICopZi0+Zl9idWlsdGlucywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcpOwotICAgICAgICAgICAgICAgIGlmICh4ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFfUHlFcnJfT0NDVVJSRUQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMT0JBTF9OQU1FX0VSUk9SX01TRywgdyk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9JTkNSRUYoeCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHYpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogU2xvdy1wYXRoIGlmIGdsb2JhbHMgb3IgYnVpbHRpbnMgaXMgbm90IGEgZGljdCAqLwotICAgICAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgdyk7Ci0gICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCB3KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHYgPSBQeU9iamVjdF9HZXRJdGVtKGYtPmZfZ2xvYmFscywgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICB2ID0gUHlPYmplY3RfR2V0SXRlbShmLT5mX2J1aWx0aW5zLCBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfY2hlY2tfYXJnKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX05hbWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTE9CQUxfTkFNRV9FUlJPUl9NU0csIHcpOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkFNRV9FUlJPUl9NU0csIG5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQVVNIKHYpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChERUxFVEVfRkFTVCkKLSAgICAgICAgICAgIHggPSBHRVRMT0NBTChvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7CisgICAgICAgIFRBUkdFVChERUxFVEVfRkFTVCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnYgPSBHRVRMT0NBTChvcGFyZyk7CisgICAgICAgICAgICBpZiAodiAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgU0VUTE9DQUwob3BhcmcsIE5VTEwpOwogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CkBAIC0yMTYyLDI1MiArMjI1OCwzMTIgQEAKICAgICAgICAgICAgICAgICBVTkJPVU5ETE9DQUxfRVJST1JfTVNHLAogICAgICAgICAgICAgICAgIFB5VHVwbGVfR2V0SXRlbShjby0+Y29fdmFybmFtZXMsIG9wYXJnKQogICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoREVMRVRFX0RFUkVGKQotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIGlmIChQeUNlbGxfR0VUKHgpICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBQeUNlbGxfU2V0KHgsIE5VTEwpOworICAgICAgICBUQVJHRVQoREVMRVRFX0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIGlmIChQeUNlbGxfR0VUKGNlbGwpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUNlbGxfU2V0KGNlbGwsIE5VTEwpOwogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSAtMTsKICAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKExPQURfQ0xPU1VSRSkKLSAgICAgICAgICAgIHggPSBmcmVldmFyc1tvcGFyZ107Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIFRBUkdFVChMT0FEX0RFUkVGKQotICAgICAgICAgICAgeCA9IGZyZWV2YXJzW29wYXJnXTsKLSAgICAgICAgICAgIHcgPSBQeUNlbGxfR2V0KHgpOwotICAgICAgICAgICAgaWYgKHcgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFBVU0godyk7Ci0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IC0xOwotICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoU1RPUkVfREVSRUYpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICB4ID0gZnJlZXZhcnNbb3BhcmddOwotICAgICAgICAgICAgUHlDZWxsX1NldCh4LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgVEFSR0VUKExPQURfQ0xPU1VSRSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNlbGwgPSBmcmVldmFyc1tvcGFyZ107CisgICAgICAgICAgICBQeV9JTkNSRUYoY2VsbCk7CisgICAgICAgICAgICBQVVNIKGNlbGwpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCVUlMRF9UVVBMRSkKLSAgICAgICAgICAgIHggPSBQeVR1cGxlX05ldyhvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHgsIG9wYXJnLCB3KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICBUQVJHRVQoTE9BRF9DTEFTU0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSwgKnZhbHVlLCAqbG9jYWxzID0gZi0+Zl9sb2NhbHM7CisgICAgICAgICAgICBQeV9zc2l6ZV90IGlkeDsKKyAgICAgICAgICAgIGFzc2VydChsb2NhbHMpOworICAgICAgICAgICAgYXNzZXJ0KG9wYXJnID49IFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKSk7CisgICAgICAgICAgICBpZHggPSBvcGFyZyAtIFB5VHVwbGVfR0VUX1NJWkUoY28tPmNvX2NlbGx2YXJzKTsKKyAgICAgICAgICAgIGFzc2VydChpZHggPj0gMCAmJiBpZHggPCBQeVR1cGxlX0dFVF9TSVpFKGNvLT5jb19mcmVldmFycykpOworICAgICAgICAgICAgbmFtZSA9IFB5VHVwbGVfR0VUX0lURU0oY28tPmNvX2ZyZWV2YXJzLCBpZHgpOworICAgICAgICAgICAgaWYgKFB5RGljdF9DaGVja0V4YWN0KGxvY2FscykpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgUHlfWElOQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBUQVJHRVQoQlVJTERfTElTVCkKLSAgICAgICAgICAgIHggPSAgUHlMaXN0X05ldyhvcGFyZyk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBQeUxpc3RfU0VUX0lURU0oeCwgb3BhcmcsIHcpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBQeU9iamVjdF9HZXRJdGVtKGxvY2FscywgbmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIVB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKEJVSUxEX1NFVCkKLSAgICAgICAgICAgIHggPSBQeVNldF9OZXcoTlVMTCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yICg7IC0tb3BhcmcgPj0gMDspIHsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZXJyID09IDApCi0gICAgICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoeCwgdyk7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IFB5Q2VsbF9HRVQoY2VsbCk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2V4Y191bmJvdW5kKGNvLCBvcGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQVVNIKHgpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHZhbHVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSCh2YWx1ZSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJVSUxEX01BUCkKLSAgICAgICAgICAgIHggPSBfUHlEaWN0X05ld1ByZXNpemVkKChQeV9zc2l6ZV90KW9wYXJnKTsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKFNUT1JFX01BUCkKLSAgICAgICAgICAgIHcgPSBUT1AoKTsgICAgIC8qIGtleSAqLwotICAgICAgICAgICAgdSA9IFNFQ09ORCgpOyAgLyogdmFsdWUgKi8KLSAgICAgICAgICAgIHYgPSBUSElSRCgpOyAgIC8qIGRpY3QgKi8KLSAgICAgICAgICAgIFNUQUNLQURKKC0yKTsKLSAgICAgICAgICAgIGFzc2VydCAoUHlEaWN0X0NoZWNrRXhhY3QodikpOwotICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0odiwgdywgdSk7ICAvKiB2W3ddID0gdSAqLwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgaWYgKGVyciA9PSAwKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgVEFSR0VUKE1BUF9BREQpCi0gICAgICAgICAgICB3ID0gVE9QKCk7ICAgICAvKiBrZXkgKi8KLSAgICAgICAgICAgIHUgPSBTRUNPTkQoKTsgIC8qIHZhbHVlICovCi0gICAgICAgICAgICBTVEFDS0FESigtMik7Ci0gICAgICAgICAgICB2ID0gc3RhY2tfcG9pbnRlclstb3BhcmddOyAgLyogZGljdCAqLwotICAgICAgICAgICAgYXNzZXJ0IChQeURpY3RfQ2hlY2tFeGFjdCh2KSk7Ci0gICAgICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbSh2LCB3LCB1KTsgIC8qIHZbd10gPSB1ICovCi0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIHsKLSAgICAgICAgICAgICAgICBQUkVESUNUKEpVTVBfQUJTT0xVVEUpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIFRBUkdFVChMT0FEX0RFUkVGKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFB5Q2VsbF9HRVQoY2VsbCk7CisgICAgICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGZvcm1hdF9leGNfdW5ib3VuZChjbywgb3BhcmcpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0lOQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQVVNIKHZhbHVlKTsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoTE9BRF9BVFRSKQotICAgICAgICAgICAgdyA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKLSAgICAgICAgICAgIHYgPSBUT1AoKTsKLSAgICAgICAgICAgIHggPSBQeU9iamVjdF9HZXRBdHRyKHYsIHcpOworICAgICAgICBUQVJHRVQoU1RPUkVfREVSRUYpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqY2VsbCA9IGZyZWV2YXJzW29wYXJnXTsKKyAgICAgICAgICAgIFB5Q2VsbF9TZXQoY2VsbCwgdik7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChDT01QQVJFX09QKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IGNtcF9vdXRjb21lKG9wYXJnLCB2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSBicmVhazsKKyAgICAgICAgVEFSR0VUKEJVSUxEX1RVUExFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqdHVwID0gUHlUdXBsZV9OZXcob3BhcmcpOworICAgICAgICAgICAgaWYgKHR1cCA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB3aGlsZSAoLS1vcGFyZyA+PSAwKSB7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKml0ZW0gPSBQT1AoKTsKKyAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKHR1cCwgb3BhcmcsIGl0ZW0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSCh0dXApOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCVUlMRF9MSVNUKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqbGlzdCA9ICBQeUxpc3RfTmV3KG9wYXJnKTsKKyAgICAgICAgICAgIGlmIChsaXN0ID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIHdoaWxlICgtLW9wYXJnID49IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqaXRlbSA9IFBPUCgpOworICAgICAgICAgICAgICAgIFB5TGlzdF9TRVRfSVRFTShsaXN0LCBvcGFyZywgaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQVVNIKGxpc3QpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCVUlMRF9TRVQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzZXQgPSBQeVNldF9OZXcoTlVMTCk7CisgICAgICAgICAgICBpbnQgZXJyID0gMDsKKyAgICAgICAgICAgIGlmIChzZXQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgd2hpbGUgKC0tb3BhcmcgPj0gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICppdGVtID0gUE9QKCk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA9PSAwKQorICAgICAgICAgICAgICAgICAgICBlcnIgPSBQeVNldF9BZGQoc2V0LCBpdGVtKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoaXRlbSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoc2V0KTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgUFVTSChzZXQpOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChCVUlMRF9NQVApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptYXAgPSBfUHlEaWN0X05ld1ByZXNpemVkKChQeV9zc2l6ZV90KW9wYXJnKTsKKyAgICAgICAgICAgIGlmIChtYXAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFVTSChtYXApOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChTVE9SRV9NQVApIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICprZXkgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp2YWx1ZSA9IFNFQ09ORCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm1hcCA9IFRISVJEKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgU1RBQ0tBREooLTIpOworICAgICAgICAgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KG1hcCkpOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obWFwLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChNQVBfQUREKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqa2V5ID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBTRUNPTkQoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptYXA7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgU1RBQ0tBREooLTIpOworICAgICAgICAgICAgbWFwID0gc3RhY2tfcG9pbnRlclstb3BhcmddOyAgLyogZGljdCAqLworICAgICAgICAgICAgYXNzZXJ0KFB5RGljdF9DaGVja0V4YWN0KG1hcCkpOworICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0obWFwLCBrZXksIHZhbHVlKTsgIC8qIHZbd10gPSB1ICovCisgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICBpZiAoZXJyICE9IDApCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIFBSRURJQ1QoSlVNUF9BQlNPTFVURSk7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CisKKyAgICAgICAgVEFSR0VUKExPQURfQVRUUikgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqb3duZXIgPSBUT1AoKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpyZXMgPSBQeU9iamVjdF9HZXRBdHRyKG93bmVyLCBuYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvd25lcik7CisgICAgICAgICAgICBTRVRfVE9QKHJlcyk7CisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KKworICAgICAgICBUQVJHRVQoQ09NUEFSRV9PUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKnJpZ2h0ID0gUE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbGVmdCA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlcyA9IGNtcF9vdXRjb21lKG9wYXJnLCBsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBQeV9ERUNSRUYobGVmdCk7CisgICAgICAgICAgICBQeV9ERUNSRUYocmlnaHQpOworICAgICAgICAgICAgU0VUX1RPUChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBQUkVESUNUKFBPUF9KVU1QX0lGX0ZBTFNFKTsKICAgICAgICAgICAgIFBSRURJQ1QoUE9QX0pVTVBfSUZfVFJVRSk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOwotCi0gICAgICAgIFRBUkdFVChJTVBPUlRfTkFNRSkKLSAgICAgICAgewotICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19pbXBvcnRfXyk7Ci0gICAgICAgICAgICB3ID0gR0VUSVRFTShuYW1lcywgb3BhcmcpOwotICAgICAgICAgICAgeCA9IF9QeURpY3RfR2V0SXRlbUlkKGYtPmZfYnVpbHRpbnMsICZQeUlkX19faW1wb3J0X18pOwotICAgICAgICAgICAgaWYgKHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIl9faW1wb3J0X18gbm90IGZvdW5kIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9JTkNSRUYoeCk7Ci0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICB1ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAoUHlMb25nX0FzTG9uZyh1KSAhPSAtMSB8fCBQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgICAgIHcgPSBQeVR1cGxlX1BhY2soNSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfZ2xvYmFscywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2xvY2FscyA9PSBOVUxMID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9Ob25lIDogZi0+Zl9sb2NhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1KTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICB3ID0gUHlUdXBsZV9QYWNrKDQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgaWYgKHcgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHUgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYoeCk7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICB2ID0geDsKLSAgICAgICAgICAgIHggPSBQeUV2YWxfQ2FsbE9iamVjdCh2LCB3KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSU1QT1JUX1NUQVIpCi0gICAgICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBQeUZyYW1lX0Zhc3RUb0xvY2FscyhmKTsKLSAgICAgICAgICAgIGlmICgoeCA9IGYtPmZfbG9jYWxzKSA9PSBOVUxMKSB7CisgICAgICAgIFRBUkdFVChJTVBPUlRfTkFNRSkgeworICAgICAgICAgICAgX1B5X0lERU5USUZJRVIoX19pbXBvcnRfXyk7CisgICAgICAgICAgICBQeU9iamVjdCAqbmFtZSA9IEdFVElURU0obmFtZXMsIG9wYXJnKTsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gX1B5RGljdF9HZXRJdGVtSWQoZi0+Zl9idWlsdGlucywgJlB5SWRfX19pbXBvcnRfXyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnJvbSwgKmxldmVsLCAqYXJncywgKnJlczsKKyAgICAgICAgICAgIGlmIChmdW5jID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfSW1wb3J0RXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfX2ltcG9ydF9fIG5vdCBmb3VuZCIpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CisgICAgICAgICAgICBmcm9tID0gUE9QKCk7CisgICAgICAgICAgICBsZXZlbCA9IFRPUCgpOworICAgICAgICAgICAgaWYgKFB5TG9uZ19Bc0xvbmcobGV2ZWwpICE9IC0xIHx8IFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgYXJncyA9IFB5VHVwbGVfUGFjayg1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9nbG9iYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGYtPmZfbG9jYWxzID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5X05vbmUgOiBmLT5mX2xvY2FscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBsZV9QYWNrKDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5mX2dsb2JhbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Zl9sb2NhbHMgPT0gTlVMTCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfTm9uZSA6IGYtPmZfbG9jYWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20pOworICAgICAgICAgICAgUHlfREVDUkVGKGxldmVsKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcm9tKTsKKyAgICAgICAgICAgIGlmIChhcmdzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7CisgICAgICAgICAgICByZXMgPSBQeUV2YWxfQ2FsbE9iamVjdChmdW5jLCBhcmdzKTsKKyAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIxKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihhcmdzKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgIFNFVF9UT1AocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQorCisgICAgICAgIFRBUkdFVChJTVBPUlRfU1RBUikgeworICAgICAgICAgICAgUHlPYmplY3QgKmZyb20gPSBQT1AoKSwgKmxvY2FsczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoUHlGcmFtZV9GYXN0VG9Mb2NhbHNXaXRoRXJyb3IoZikgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKKyAgICAgICAgICAgIGxvY2FscyA9IGYtPmZfbG9jYWxzOworICAgICAgICAgICAgaWYgKGxvY2FscyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAogICAgICAgICAgICAgICAgICAgICAibm8gbG9jYWxzIGZvdW5kIGR1cmluZyAnaW1wb3J0IConIik7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIGVyciA9IGltcG9ydF9hbGxfZnJvbSh4LCB2KTsKKyAgICAgICAgICAgIGVyciA9IGltcG9ydF9hbGxfZnJvbShsb2NhbHMsIGZyb20pOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwogICAgICAgICAgICAgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QoZiwgMCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBpZiAoZXJyID09IDApIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihmcm9tKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChJTVBPUlRfRlJPTSkKLSAgICAgICAgICAgIHcgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7Ci0gICAgICAgICAgICB2ID0gVE9QKCk7CisgICAgICAgIFRBUkdFVChJTVBPUlRfRlJPTSkgeworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBHRVRJVEVNKG5hbWVzLCBvcGFyZyk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnJvbSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKnJlczsKICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKGludHIwKTsKLSAgICAgICAgICAgIHggPSBpbXBvcnRfZnJvbSh2LCB3KTsKKyAgICAgICAgICAgIHJlcyA9IGltcG9ydF9mcm9tKGZyb20sIG5hbWUpOwogICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoaW50cjEpOwotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChKVU1QX0ZPUldBUkQpCisgICAgICAgIFRBUkdFVChKVU1QX0ZPUldBUkQpIHsKICAgICAgICAgICAgIEpVTVBCWShvcGFyZyk7CiAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoUE9QX0pVTVBfSUZfRkFMU0UpOwotICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfRkFMU0UpCi0gICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICBUQVJHRVQoUE9QX0pVTVBfSUZfRkFMU0UpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb25kID0gUE9QKCk7CisgICAgICAgICAgICBpbnQgZXJyOworICAgICAgICAgICAgaWYgKGNvbmQgPT0gUHlfVHJ1ZSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgewotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApCiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgIGVsc2UgaWYgKGVyciA9PSAwKQogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAogICAgICAgICBQUkVESUNURURfV0lUSF9BUkcoUE9QX0pVTVBfSUZfVFJVRSk7Ci0gICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9UUlVFKQotICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgIFRBUkdFVChQT1BfSlVNUF9JRl9UUlVFKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29uZCA9IFBPUCgpOworICAgICAgICAgICAgaW50IGVycjsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKGNvbmQpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgaWYgKGVyciA+IDApIHsKICAgICAgICAgICAgICAgICBlcnIgPSAwOwogICAgICAgICAgICAgICAgIEpVTVBUTyhvcGFyZyk7CkBAIC0yNDE1LDU4ICsyNTcxLDYzIEBACiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoSlVNUF9JRl9GQUxTRV9PUl9QT1ApCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9UcnVlKSB7CisgICAgICAgIFRBUkdFVChKVU1QX0lGX0ZBTFNFX09SX1BPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9UcnVlKSB7CiAgICAgICAgICAgICAgICAgU1RBQ0tBREooLTEpOwotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY29uZCk7CiAgICAgICAgICAgICAgICAgRkFTVF9ESVNQQVRDSCgpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHcgPT0gUHlfRmFsc2UpIHsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X0ZhbHNlKSB7CiAgICAgICAgICAgICAgICAgSlVNUFRPKG9wYXJnKTsKICAgICAgICAgICAgICAgICBGQVNUX0RJU1BBVENIKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUodyk7CisgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoY29uZCk7CiAgICAgICAgICAgICBpZiAoZXJyID4gMCkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIGVyciA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPT0gMCkKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEpVTVBfSUZfVFJVRV9PUl9QT1ApCi0gICAgICAgICAgICB3ID0gVE9QKCk7Ci0gICAgICAgICAgICBpZiAodyA9PSBQeV9GYWxzZSkgeworICAgICAgICBUQVJHRVQoSlVNUF9JRl9UUlVFX09SX1BPUCkgeworICAgICAgICAgICAgUHlPYmplY3QgKmNvbmQgPSBUT1AoKTsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoY29uZCA9PSBQeV9GYWxzZSkgewogICAgICAgICAgICAgICAgIFNUQUNLQURKKC0xKTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvbmQpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh3ID09IFB5X1RydWUpIHsKKyAgICAgICAgICAgIGlmIChjb25kID09IFB5X1RydWUpIHsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgICAgIEZBU1RfRElTUEFUQ0goKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZSh3KTsKKyAgICAgICAgICAgIGVyciA9IFB5T2JqZWN0X0lzVHJ1ZShjb25kKTsKICAgICAgICAgICAgIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoZXJyID09IDApIHsKICAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihjb25kKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCiAgICAgICAgIFBSRURJQ1RFRF9XSVRIX0FSRyhKVU1QX0FCU09MVVRFKTsKLSAgICAgICAgVEFSR0VUKEpVTVBfQUJTT0xVVEUpCisgICAgICAgIFRBUkdFVChKVU1QX0FCU09MVVRFKSB7CiAgICAgICAgICAgICBKVU1QVE8ob3BhcmcpOwogI2lmIEZBU1RfTE9PUFMKICAgICAgICAgICAgIC8qIEVuYWJsaW5nIHRoaXMgcGF0aCBzcGVlZHMtdXAgYWxsIHdoaWxlIGFuZCBmb3ItbG9vcHMgYnkgYnlwYXNzaW5nCkBAIC0yNDgwLDYwICsyNjQxLDYyIEBACiAjZWxzZQogICAgICAgICAgICAgRElTUEFUQ0goKTsKICNlbmRpZgorICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEdFVF9JVEVSKQorICAgICAgICBUQVJHRVQoR0VUX0lURVIpIHsKICAgICAgICAgICAgIC8qIGJlZm9yZTogW29ial07IGFmdGVyIFtnZXRpdGVyKG9iaildICovCi0gICAgICAgICAgICB2ID0gVE9QKCk7Ci0gICAgICAgICAgICB4ID0gUHlPYmplY3RfR2V0SXRlcih2KTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBTRVRfVE9QKHgpOwotICAgICAgICAgICAgICAgIFBSRURJQ1QoRk9SX0lURVIpOwotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBTVEFDS0FESigtMSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFB5T2JqZWN0ICppdGVyYWJsZSA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKml0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKGl0ZXJhYmxlKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihpdGVyYWJsZSk7CisgICAgICAgICAgICBTRVRfVE9QKGl0ZXIpOworICAgICAgICAgICAgaWYgKGl0ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgUFJFRElDVChGT1JfSVRFUik7CisgICAgICAgICAgICBESVNQQVRDSCgpOworICAgICAgICB9CiAKICAgICAgICAgUFJFRElDVEVEX1dJVEhfQVJHKEZPUl9JVEVSKTsKLSAgICAgICAgVEFSR0VUKEZPUl9JVEVSKQorICAgICAgICBUQVJHRVQoRk9SX0lURVIpIHsKICAgICAgICAgICAgIC8qIGJlZm9yZTogW2l0ZXJdOyBhZnRlcjogW2l0ZXIsIGl0ZXIoKV0gKm9yKiBbXSAqLwotICAgICAgICAgICAgdiA9IFRPUCgpOwotICAgICAgICAgICAgeCA9ICgqdi0+b2JfdHlwZS0+dHBfaXRlcm5leHQpKHYpOwotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQeU9iamVjdCAqaXRlciA9IFRPUCgpOworICAgICAgICAgICAgUHlPYmplY3QgKm5leHQgPSAoKml0ZXItPm9iX3R5cGUtPnRwX2l0ZXJuZXh0KShpdGVyKTsKKyAgICAgICAgICAgIGlmIChuZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQVVNIKG5leHQpOwogICAgICAgICAgICAgICAgIFBSRURJQ1QoU1RPUkVfRkFTVCk7CiAgICAgICAgICAgICAgICAgUFJFRElDVChVTlBBQ0tfU0VRVUVOQ0UpOwogICAgICAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcygKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfU3RvcEl0ZXJhdGlvbikpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGlmICghUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19TdG9wSXRlcmF0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGNhbGxfZXhjX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwgdHN0YXRlLCBmKTsKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyogaXRlcmF0b3IgZW5kZWQgbm9ybWFsbHkgKi8KLSAgICAgICAgICAgIHggPSB2ID0gUE9QKCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICBQeV9ERUNSRUYoaXRlcik7CiAgICAgICAgICAgICBKVU1QQlkob3BhcmcpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChCUkVBS19MT09QKQorICAgICAgICBUQVJHRVQoQlJFQUtfTE9PUCkgewogICAgICAgICAgICAgd2h5ID0gV0hZX0JSRUFLOwogICAgICAgICAgICAgZ290byBmYXN0X2Jsb2NrX2VuZDsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChDT05USU5VRV9MT09QKQorICAgICAgICBUQVJHRVQoQ09OVElOVUVfTE9PUCkgewogICAgICAgICAgICAgcmV0dmFsID0gUHlMb25nX0Zyb21Mb25nKG9wYXJnKTsKLSAgICAgICAgICAgIGlmICghcmV0dmFsKSB7Ci0gICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmV0dmFsID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIHdoeSA9IFdIWV9DT05USU5VRTsKICAgICAgICAgICAgIGdvdG8gZmFzdF9ibG9ja19lbmQ7CisgICAgICAgIH0KIAogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKFNFVFVQX0xPT1AsIF9zZXR1cF9maW5hbGx5KQogICAgICAgICBUQVJHRVRfV0lUSF9JTVBMKFNFVFVQX0VYQ0VQVCwgX3NldHVwX2ZpbmFsbHkpCiAgICAgICAgIFRBUkdFVChTRVRVUF9GSU5BTExZKQotICAgICAgICBfc2V0dXBfZmluYWxseToKKyAgICAgICAgX3NldHVwX2ZpbmFsbHk6IHsKICAgICAgICAgICAgIC8qIE5PVEU6IElmIHlvdSBhZGQgYW55IG5ldyBibG9jay1zZXR1cCBvcGNvZGVzIHRoYXQKICAgICAgICAgICAgICAgIGFyZSBub3QgdHJ5L2V4Y2VwdC9maW5hbGx5IGhhbmRsZXJzLCB5b3UgbWF5IG5lZWQKICAgICAgICAgICAgICAgIHRvIHVwZGF0ZSB0aGUgUHlHZW5fTmVlZHNGaW5hbGl6aW5nKCkgZnVuY3Rpb24uCkBAIC0yNTQyLDM3ICsyNzA1LDM1IEBACiAgICAgICAgICAgICBQeUZyYW1lX0Jsb2NrU2V0dXAoZiwgb3Bjb2RlLCBJTlNUUl9PRkZTRVQoKSArIG9wYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQUNLX0xFVkVMKCkpOwogICAgICAgICAgICAgRElTUEFUQ0goKTsKKyAgICAgICAgfQogCi0gICAgICAgIFRBUkdFVChTRVRVUF9XSVRIKQotICAgICAgICB7CisgICAgICAgIFRBUkdFVChTRVRVUF9XSVRIKSB7CiAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2V4aXRfXyk7CiAgICAgICAgICAgICBfUHlfSURFTlRJRklFUihfX2VudGVyX18pOwotICAgICAgICAgICAgdyA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IHNwZWNpYWxfbG9va3VwKHcsICZQeUlkX19fZXhpdF9fKTsKLSAgICAgICAgICAgIGlmICgheCkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICB1ID0gc3BlY2lhbF9sb29rdXAodywgJlB5SWRfX19lbnRlcl9fKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih3KTsKLSAgICAgICAgICAgIGlmICghdSkgewotICAgICAgICAgICAgICAgIHggPSBOVUxMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgeCA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3ModSwgTlVMTCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodSk7Ci0gICAgICAgICAgICBpZiAoIXgpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeU9iamVjdCAqbWdyID0gVE9QKCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZXhpdCA9IHNwZWNpYWxfbG9va3VwKG1nciwgJlB5SWRfX19leGl0X18pLCAqZW50ZXI7CisgICAgICAgICAgICBQeU9iamVjdCAqcmVzOworICAgICAgICAgICAgaWYgKGV4aXQgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgU0VUX1RPUChleGl0KTsKKyAgICAgICAgICAgIGVudGVyID0gc3BlY2lhbF9sb29rdXAobWdyLCAmUHlJZF9fX2VudGVyX18pOworICAgICAgICAgICAgUHlfREVDUkVGKG1ncik7CisgICAgICAgICAgICBpZiAoZW50ZXIgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgcmVzID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhlbnRlciwgTlVMTCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoZW50ZXIpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAvKiBTZXR1cCB0aGUgZmluYWxseSBibG9jayBiZWZvcmUgcHVzaGluZyB0aGUgcmVzdWx0CiAgICAgICAgICAgICAgICBvZiBfX2VudGVyX18gb24gdGhlIHN0YWNrLiAqLwogICAgICAgICAgICAgUHlGcmFtZV9CbG9ja1NldHVwKGYsIFNFVFVQX0ZJTkFMTFksIElOU1RSX09GRlNFVCgpICsgb3BhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RBQ0tfTEVWRUwoKSk7CiAKLSAgICAgICAgICAgIFBVU0goeCk7CisgICAgICAgICAgICBQVVNIKHJlcyk7CiAgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKFdJVEhfQ0xFQU5VUCkKLSAgICAgICAgeworICAgICAgICBUQVJHRVQoV0lUSF9DTEVBTlVQKSB7CiAgICAgICAgICAgICAvKiBBdCB0aGUgdG9wIG9mIHRoZSBzdGFjayBhcmUgMS02IHZhbHVlcyBpbmRpY2F0aW5nCiAgICAgICAgICAgICAgICBob3cvd2h5IHdlIGVudGVyZWQgdGhlIGZpbmFsbHkgY2xhdXNlOgogICAgICAgICAgICAgICAgLSBUT1AgPSBOb25lCkBAIC0yNTk5LDQyICsyNzYwLDQyIEBACiAgICAgICAgICAgICAqLwogCiAgICAgICAgICAgICBQeU9iamVjdCAqZXhpdF9mdW5jOwotICAgICAgICAgICAgdSA9IFRPUCgpOwotICAgICAgICAgICAgaWYgKHUgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlPYmplY3QgKmV4YyA9IFRPUCgpLCAqdmFsID0gUHlfTm9uZSwgKnRiID0gUHlfTm9uZSwgKnJlczsKKyAgICAgICAgICAgIGludCBlcnI7CisgICAgICAgICAgICBpZiAoZXhjID09IFB5X05vbmUpIHsKICAgICAgICAgICAgICAgICAodm9pZClQT1AoKTsKICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBUT1AoKTsKLSAgICAgICAgICAgICAgICBTRVRfVE9QKHUpOwotICAgICAgICAgICAgICAgIHYgPSB3ID0gUHlfTm9uZTsKKyAgICAgICAgICAgICAgICBTRVRfVE9QKGV4Yyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChQeUxvbmdfQ2hlY2sodSkpIHsKLSAgICAgICAgICAgICAgICAodm9pZClQT1AoKTsKLSAgICAgICAgICAgICAgICBzd2l0Y2goUHlMb25nX0FzTG9uZyh1KSkgeworICAgICAgICAgICAgZWxzZSBpZiAoUHlMb25nX0NoZWNrKGV4YykpIHsKKyAgICAgICAgICAgICAgICBTVEFDS0FESigtMSk7CisgICAgICAgICAgICAgICAgc3dpdGNoIChQeUxvbmdfQXNMb25nKGV4YykpIHsKICAgICAgICAgICAgICAgICBjYXNlIFdIWV9SRVRVUk46CiAgICAgICAgICAgICAgICAgY2FzZSBXSFlfQ09OVElOVUU6CiAgICAgICAgICAgICAgICAgICAgIC8qIFJldHZhbCBpbiBUT1AuICovCiAgICAgICAgICAgICAgICAgICAgIGV4aXRfZnVuYyA9IFNFQ09ORCgpOwogICAgICAgICAgICAgICAgICAgICBTRVRfU0VDT05EKFRPUCgpKTsKLSAgICAgICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKKyAgICAgICAgICAgICAgICAgICAgU0VUX1RPUChleGMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICBleGl0X2Z1bmMgPSBUT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgU0VUX1RPUCh1KTsKKyAgICAgICAgICAgICAgICAgICAgU0VUX1RPUChleGMpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdSA9IHYgPSB3ID0gUHlfTm9uZTsKKyAgICAgICAgICAgICAgICBleGMgPSBQeV9Ob25lOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgUHlPYmplY3QgKnRwLCAqZXhjLCAqdGI7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKnRwMiwgKmV4YzIsICp0YjI7CiAgICAgICAgICAgICAgICAgUHlUcnlCbG9jayAqYmxvY2s7Ci0gICAgICAgICAgICAgICAgdiA9IFNFQ09ORCgpOwotICAgICAgICAgICAgICAgIHcgPSBUSElSRCgpOwotICAgICAgICAgICAgICAgIHRwID0gRk9VUlRIKCk7Ci0gICAgICAgICAgICAgICAgZXhjID0gUEVFSyg1KTsKLSAgICAgICAgICAgICAgICB0YiA9IFBFRUsoNik7CisgICAgICAgICAgICAgICAgdmFsID0gU0VDT05EKCk7CisgICAgICAgICAgICAgICAgdGIgPSBUSElSRCgpOworICAgICAgICAgICAgICAgIHRwMiA9IEZPVVJUSCgpOworICAgICAgICAgICAgICAgIGV4YzIgPSBQRUVLKDUpOworICAgICAgICAgICAgICAgIHRiMiA9IFBFRUsoNik7CiAgICAgICAgICAgICAgICAgZXhpdF9mdW5jID0gUEVFSyg3KTsKLSAgICAgICAgICAgICAgICBTRVRfVkFMVUUoNywgdGIpOwotICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg2LCBleGMpOwotICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg1LCB0cCk7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDcsIHRiMik7CisgICAgICAgICAgICAgICAgU0VUX1ZBTFVFKDYsIGV4YzIpOworICAgICAgICAgICAgICAgIFNFVF9WQUxVRSg1LCB0cDIpOwogICAgICAgICAgICAgICAgIC8qIFVOV0lORF9FWENFUFRfSEFORExFUiB3aWxsIHBvcCB0aGlzIG9mZi4gKi8KICAgICAgICAgICAgICAgICBTRVRfRk9VUlRIKE5VTEwpOwogICAgICAgICAgICAgICAgIC8qIFdlIGp1c3Qgc2hpZnRlZCB0aGUgc3RhY2sgZG93biwgc28gd2UgaGF2ZQpAQCAtMjY0NSw1NiArMjgwNiw1MyBAQAogICAgICAgICAgICAgICAgIGJsb2NrLT5iX2xldmVsLS07CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKiBYWFggTm90IHRoZSBmYXN0ZXN0IHdheSB0byBjYWxsIGl0Li4uICovCi0gICAgICAgICAgICB4ID0gUHlPYmplY3RfQ2FsbEZ1bmN0aW9uT2JqQXJncyhleGl0X2Z1bmMsIHUsIHYsIHcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgICAgIHJlcyA9IFB5T2JqZWN0X0NhbGxGdW5jdGlvbk9iakFyZ3MoZXhpdF9mdW5jLCBleGMsIHZhbCwgdGIsIE5VTEwpOwogICAgICAgICAgICAgUHlfREVDUkVGKGV4aXRfZnVuYyk7Ci0gICAgICAgICAgICBpZiAoeCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBHbyB0byBlcnJvciBleGl0ICovCisgICAgICAgICAgICBpZiAocmVzID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKIAotICAgICAgICAgICAgaWYgKHUgIT0gUHlfTm9uZSkKLSAgICAgICAgICAgICAgICBlcnIgPSBQeU9iamVjdF9Jc1RydWUoeCk7CisgICAgICAgICAgICBpZiAoZXhjICE9IFB5X05vbmUpCisgICAgICAgICAgICAgICAgZXJyID0gUHlPYmplY3RfSXNUcnVlKHJlcyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZXJyID0gMDsKLSAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogCiAgICAgICAgICAgICBpZiAoZXJyIDwgMCkKLSAgICAgICAgICAgICAgICBicmVhazsgLyogR28gdG8gZXJyb3IgZXhpdCAqLworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICBlbHNlIGlmIChlcnIgPiAwKSB7CiAgICAgICAgICAgICAgICAgZXJyID0gMDsKICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgYW4gZXhjZXB0aW9uIGFuZCBhIFRydWUgcmV0dXJuICovCiAgICAgICAgICAgICAgICAgUFVTSChQeUxvbmdfRnJvbUxvbmcoKGxvbmcpIFdIWV9TSUxFTkNFRCkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgUFJFRElDVChFTkRfRklOQUxMWSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CiAgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoQ0FMTF9GVU5DVElPTikKLSAgICAgICAgewotICAgICAgICAgICAgUHlPYmplY3QgKipzcDsKKyAgICAgICAgVEFSR0VUKENBTExfRlVOQ1RJT04pIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICoqc3AsICpyZXM7CiAgICAgICAgICAgICBQQ0FMTChQQ0FMTF9BTEwpOwogICAgICAgICAgICAgc3AgPSBzdGFja19wb2ludGVyOwogI2lmZGVmIFdJVEhfVFNDCi0gICAgICAgICAgICB4ID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnLCAmaW50cjAsICZpbnRyMSk7CisgICAgICAgICAgICByZXMgPSBjYWxsX2Z1bmN0aW9uKCZzcCwgb3BhcmcsICZpbnRyMCwgJmludHIxKTsKICNlbHNlCi0gICAgICAgICAgICB4ID0gY2FsbF9mdW5jdGlvbigmc3AsIG9wYXJnKTsKKyAgICAgICAgICAgIHJlcyA9IGNhbGxfZnVuY3Rpb24oJnNwLCBvcGFyZyk7CiAjZW5kaWYKICAgICAgICAgICAgIHN0YWNrX3BvaW50ZXIgPSBzcDsKLSAgICAgICAgICAgIFBVU0goeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKQotICAgICAgICAgICAgICAgIERJU1BBVENIKCk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFBVU0gocmVzKTsKKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgRElTUEFUQ0goKTsKICAgICAgICAgfQogCiAgICAgICAgIFRBUkdFVF9XSVRIX0lNUEwoQ0FMTF9GVU5DVElPTl9WQVIsIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdykKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChDQUxMX0ZVTkNUSU9OX0tXLCBfY2FsbF9mdW5jdGlvbl92YXJfa3cpCiAgICAgICAgIFRBUkdFVChDQUxMX0ZVTkNUSU9OX1ZBUl9LVykKLSAgICAgICAgX2NhbGxfZnVuY3Rpb25fdmFyX2t3OgotICAgICAgICB7CisgICAgICAgIF9jYWxsX2Z1bmN0aW9uX3Zhcl9rdzogewogICAgICAgICAgICAgaW50IG5hID0gb3BhcmcgJiAweGZmOwogICAgICAgICAgICAgaW50IG5rID0gKG9wYXJnPj44KSAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQgZmxhZ3MgPSAob3Bjb2RlIC0gQ0FMTF9GVU5DVElPTikgJiAzOwogICAgICAgICAgICAgaW50IG4gPSBuYSArIDIgKiBuazsKLSAgICAgICAgICAgIFB5T2JqZWN0ICoqcGZ1bmMsICpmdW5jLCAqKnNwOworICAgICAgICAgICAgUHlPYmplY3QgKipwZnVuYywgKmZ1bmMsICoqc3AsICpyZXM7CiAgICAgICAgICAgICBQQ0FMTChQQ0FMTF9BTEwpOwogICAgICAgICAgICAgaWYgKGZsYWdzICYgQ0FMTF9GTEFHX1ZBUikKICAgICAgICAgICAgICAgICBuKys7CkBAIC0yNzE3LDEzNyArMjg3NSwxNTYgQEAKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYoZnVuYyk7CiAgICAgICAgICAgICBzcCA9IHN0YWNrX3BvaW50ZXI7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMCk7Ci0gICAgICAgICAgICB4ID0gZXh0X2RvX2NhbGwoZnVuYywgJnNwLCBmbGFncywgbmEsIG5rKTsKKyAgICAgICAgICAgIHJlcyA9IGV4dF9kb19jYWxsKGZ1bmMsICZzcCwgZmxhZ3MsIG5hLCBuayk7CiAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnRyMSk7CiAgICAgICAgICAgICBzdGFja19wb2ludGVyID0gc3A7CiAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CiAKICAgICAgICAgICAgIHdoaWxlIChzdGFja19wb2ludGVyID4gcGZ1bmMpIHsKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7Ci0gICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvID0gUE9QKCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKG8pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgRElTUEFUQ0goKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgUFVTSChyZXMpOworICAgICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKICAgICAgICAgVEFSR0VUX1dJVEhfSU1QTChNQUtFX0NMT1NVUkUsIF9tYWtlX2Z1bmN0aW9uKQogICAgICAgICBUQVJHRVQoTUFLRV9GVU5DVElPTikKLSAgICAgICAgX21ha2VfZnVuY3Rpb246Ci0gICAgICAgIHsKKyAgICAgICAgX21ha2VfZnVuY3Rpb246IHsKICAgICAgICAgICAgIGludCBwb3NkZWZhdWx0cyA9IG9wYXJnICYgMHhmZjsKICAgICAgICAgICAgIGludCBrd2RlZmF1bHRzID0gKG9wYXJnPj44KSAmIDB4ZmY7CiAgICAgICAgICAgICBpbnQgbnVtX2Fubm90YXRpb25zID0gKG9wYXJnID4+IDE2KSAmIDB4N2ZmZjsKIAotICAgICAgICAgICAgdyA9IFBPUCgpOyAvKiBxdWFsbmFtZSAqLwotICAgICAgICAgICAgdiA9IFBPUCgpOyAvKiBjb2RlIG9iamVjdCAqLwotICAgICAgICAgICAgeCA9IFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKHYsIGYtPmZfZ2xvYmFscywgdyk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICBQeU9iamVjdCAqcXVhbG5hbWUgPSBQT1AoKTsgLyogcXVhbG5hbWUgKi8KKyAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlID0gUE9QKCk7IC8qIGNvZGUgb2JqZWN0ICovCisgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IFB5RnVuY3Rpb25fTmV3V2l0aFF1YWxOYW1lKGNvZGUsIGYtPmZfZ2xvYmFscywgcXVhbG5hbWUpOworICAgICAgICAgICAgUHlfREVDUkVGKGNvZGUpOworICAgICAgICAgICAgUHlfREVDUkVGKHF1YWxuYW1lKTsKIAotICAgICAgICAgICAgaWYgKHggIT0gTlVMTCAmJiBvcGNvZGUgPT0gTUFLRV9DTE9TVVJFKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldENsb3N1cmUoeCwgdikgIT0gMCkgeworICAgICAgICAgICAgaWYgKGZ1bmMgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworCisgICAgICAgICAgICBpZiAob3Bjb2RlID09IE1BS0VfQ0xPU1VSRSkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpjbG9zdXJlID0gUE9QKCk7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0Q2xvc3VyZShmdW5jLCBjbG9zdXJlKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MgYnl0ZWNvZGUgaXMgY29ycnVwdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY2xvc3VyZSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoY2xvc3VyZSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYgbnVtX2Fubm90YXRpb25zID4gMCkgeworICAgICAgICAgICAgaWYgKG51bV9hbm5vdGF0aW9ucyA+IDApIHsKICAgICAgICAgICAgICAgICBQeV9zc2l6ZV90IG5hbWVfaXg7Ci0gICAgICAgICAgICAgICAgdSA9IFBPUCgpOyAvKiBuYW1lcyBvZiBhcmdzIHdpdGggYW5ub3RhdGlvbnMgKi8KLSAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X05ldygpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWVzID0gUE9QKCk7IC8qIG5hbWVzIG9mIGFyZ3Mgd2l0aCBhbm5vdGF0aW9ucyAqLworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICphbm5zID0gUHlEaWN0X05ldygpOworICAgICAgICAgICAgICAgIGlmIChhbm5zID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBuYW1lX2l4ID0gUHlUdXBsZV9TaXplKHUpOworICAgICAgICAgICAgICAgIG5hbWVfaXggPSBQeVR1cGxlX1NpemUobmFtZXMpOwogICAgICAgICAgICAgICAgIGFzc2VydChudW1fYW5ub3RhdGlvbnMgPT0gbmFtZV9peCsxKTsKICAgICAgICAgICAgICAgICB3aGlsZSAobmFtZV9peCA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUsICp2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgaW50IGVycjsKICAgICAgICAgICAgICAgICAgICAgLS1uYW1lX2l4OwotICAgICAgICAgICAgICAgICAgICB0ID0gUHlUdXBsZV9HRVRfSVRFTSh1LCBuYW1lX2l4KTsKLSAgICAgICAgICAgICAgICAgICAgdyA9IFBPUCgpOwotICAgICAgICAgICAgICAgICAgICAvKiBYWFgobm5vcndpdHopOiBjaGVjayBmb3IgZXJyb3JzICovCi0gICAgICAgICAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKHYsIHQsIHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodyk7CisgICAgICAgICAgICAgICAgICAgIG5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKG5hbWVzLCBuYW1lX2l4KTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBQT1AoKTsKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gUHlEaWN0X1NldEl0ZW0oYW5ucywgbmFtZSwgdmFsdWUpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihhbm5zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoUHlGdW5jdGlvbl9TZXRBbm5vdGF0aW9ucyh4LCB2KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMoZnVuYywgYW5ucykgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCiAgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0QW5ub3RhdGlvbnMgY2hhbmdlcy4gKi8KLSAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFubnMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGFubnMpOworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lcyk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qIFhYWCBNYXliZSB0aGlzIHNob3VsZCBiZSBhIHNlcGFyYXRlIG9wY29kZT8gKi8KLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYgcG9zZGVmYXVsdHMgPiAwKSB7Ci0gICAgICAgICAgICAgICAgdiA9IFB5VHVwbGVfTmV3KHBvc2RlZmF1bHRzKTsKLSAgICAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih4KTsKLSAgICAgICAgICAgICAgICAgICAgeCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB3aGlsZSAoLS1wb3NkZWZhdWx0cyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsKLSAgICAgICAgICAgICAgICAgICAgUHlUdXBsZV9TRVRfSVRFTSh2LCBwb3NkZWZhdWx0cywgdyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChQeUZ1bmN0aW9uX1NldERlZmF1bHRzKHgsIHYpICE9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgLyogQ2FuJ3QgaGFwcGVuIHVubGVzcwotICAgICAgICAgICAgICAgICAgICAgICBQeUZ1bmN0aW9uX1NldERlZmF1bHRzIGNoYW5nZXMuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh4ICE9IE5VTEwgJiYga3dkZWZhdWx0cyA+IDApIHsKLSAgICAgICAgICAgICAgICB2ID0gUHlEaWN0X05ldygpOwotICAgICAgICAgICAgICAgIGlmICh2ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOwotICAgICAgICAgICAgICAgICAgICB4ID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoa3dkZWZhdWx0cyA+IDApIHsKKyAgICAgICAgICAgICAgICBQeU9iamVjdCAqZGVmcyA9IFB5RGljdF9OZXcoKTsKKyAgICAgICAgICAgICAgICBpZiAoZGVmcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgd2hpbGUgKC0ta3dkZWZhdWx0cyA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIHcgPSBQT1AoKTsgLyogZGVmYXVsdCB2YWx1ZSAqLwotICAgICAgICAgICAgICAgICAgICB1ID0gUE9QKCk7IC8qIGt3IG9ubHkgYXJnIG5hbWUgKi8KLSAgICAgICAgICAgICAgICAgICAgLyogWFhYKG5ub3J3aXR6KTogY2hlY2sgZm9yIGVycm9ycyAqLwotICAgICAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbSh2LCB1LCB3KTsKLSAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHcpOwotICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodSk7CisgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICp2ID0gUE9QKCk7IC8qIGRlZmF1bHQgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmtleSA9IFBPUCgpOyAvKiBrdyBvbmx5IGFyZyBuYW1lICovCisgICAgICAgICAgICAgICAgICAgIGludCBlcnIgPSBQeURpY3RfU2V0SXRlbShkZWZzLCBrZXksIHYpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihrZXkpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0S3dEZWZhdWx0cyh4LCB2KSAhPSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0S3dEZWZhdWx0cyhmdW5jLCBkZWZzKSAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIENhbid0IGhhcHBlbiB1bmxlc3MKICAgICAgICAgICAgICAgICAgICAgICAgUHlGdW5jdGlvbl9TZXRLd0RlZmF1bHRzIGNoYW5nZXMuICovCi0gICAgICAgICAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047CisgICAgICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBQeV9ERUNSRUYodik7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgUFVTSCh4KTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKHBvc2RlZmF1bHRzID4gMCkgeworICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpkZWZzID0gUHlUdXBsZV9OZXcocG9zZGVmYXVsdHMpOworICAgICAgICAgICAgICAgIGlmIChkZWZzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoLS1wb3NkZWZhdWx0cyA+PSAwKQorICAgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NFVF9JVEVNKGRlZnMsIHBvc2RlZmF1bHRzLCBQT1AoKSk7CisgICAgICAgICAgICAgICAgaWYgKFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMoZnVuYywgZGVmcykgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAvKiBDYW4ndCBoYXBwZW4gdW5sZXNzCisgICAgICAgICAgICAgICAgICAgICAgIFB5RnVuY3Rpb25fU2V0RGVmYXVsdHMgY2hhbmdlcy4gKi8KKyAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlZnMpOworICAgICAgICAgICAgICAgICAgICBQeV9ERUNSRUYoZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihkZWZzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFBVU0goZnVuYyk7CisgICAgICAgICAgICBESVNQQVRDSCgpOwogICAgICAgICB9CiAKLSAgICAgICAgVEFSR0VUKEJVSUxEX1NMSUNFKQorICAgICAgICBUQVJHRVQoQlVJTERfU0xJQ0UpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpzdGFydCwgKnN0b3AsICpzdGVwLCAqc2xpY2U7CiAgICAgICAgICAgICBpZiAob3BhcmcgPT0gMykKLSAgICAgICAgICAgICAgICB3ID0gUE9QKCk7CisgICAgICAgICAgICAgICAgc3RlcCA9IFBPUCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHcgPSBOVUxMOwotICAgICAgICAgICAgdiA9IFBPUCgpOwotICAgICAgICAgICAgdSA9IFRPUCgpOwotICAgICAgICAgICAgeCA9IFB5U2xpY2VfTmV3KHUsIHYsIHcpOwotICAgICAgICAgICAgUHlfREVDUkVGKHUpOwotICAgICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAgICAgUHlfWERFQ1JFRih3KTsKLSAgICAgICAgICAgIFNFVF9UT1AoeCk7Ci0gICAgICAgICAgICBpZiAoeCAhPSBOVUxMKSBESVNQQVRDSCgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc3RlcCA9IE5VTEw7CisgICAgICAgICAgICBzdG9wID0gUE9QKCk7CisgICAgICAgICAgICBzdGFydCA9IFRPUCgpOworICAgICAgICAgICAgc2xpY2UgPSBQeVNsaWNlX05ldyhzdGFydCwgc3RvcCwgc3RlcCk7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RhcnQpOworICAgICAgICAgICAgUHlfREVDUkVGKHN0b3ApOworICAgICAgICAgICAgUHlfWERFQ1JFRihzdGVwKTsKKyAgICAgICAgICAgIFNFVF9UT1Aoc2xpY2UpOworICAgICAgICAgICAgaWYgKHNsaWNlID09IE5VTEwpCisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIERJU1BBVENIKCk7CisgICAgICAgIH0KIAotICAgICAgICBUQVJHRVQoRVhURU5ERURfQVJHKQorICAgICAgICBUQVJHRVQoRVhURU5ERURfQVJHKSB7CiAgICAgICAgICAgICBvcGNvZGUgPSBORVhUT1AoKTsKICAgICAgICAgICAgIG9wYXJnID0gb3Bhcmc8PDE2IHwgTkVYVEFSRygpOwogICAgICAgICAgICAgZ290byBkaXNwYXRjaF9vcGNvZGU7CisgICAgICAgIH0KIAogI2lmIFVTRV9DT01QVVRFRF9HT1RPUwogICAgICAgICBfdW5rbm93bl9vcGNvZGU6CkBAIC0yODU4LDggKzMwMzUsNyBAQAogICAgICAgICAgICAgICAgIFB5RnJhbWVfR2V0TGluZU51bWJlcihmKSwKICAgICAgICAgICAgICAgICBvcGNvZGUpOwogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAidW5rbm93biBvcGNvZGUiKTsKLSAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAKICNpZmRlZiBDQVNFX1RPT19CSUcKICAgICAgICAgfQpAQCAtMjg2Nyw3MSArMzA0MywzNiBAQAogCiAgICAgICAgIH0gLyogc3dpdGNoICovCiAKLSAgICAgICAgb25fZXJyb3I6CisgICAgICAgIC8qIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWQuIEV2ZXJ5IG9wY29kZSBzaG91bGQgZW5kIHdpdGggRElTUEFUQ0goKQorICAgICAgICAgICBvciBnb3RvIGVycm9yLiAqLworICAgICAgICBhc3NlcnQoMCk7CiAKK2Vycm9yOgogICAgICAgICBSRUFEX1RJTUVTVEFNUChpbnN0MSk7CiAKLSAgICAgICAgLyogUXVpY2tseSBjb250aW51ZSBpZiBubyBlcnJvciBvY2N1cnJlZCAqLworICAgICAgICBhc3NlcnQod2h5ID09IFdIWV9OT1QpOworICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwogCi0gICAgICAgIGlmICh3aHkgPT0gV0hZX05PVCkgewotICAgICAgICAgICAgaWYgKGVyciA9PSAwICYmIHggIT0gTlVMTCkgewotI2lmZGVmIENIRUNLRVhDCi0gICAgICAgICAgICAgICAgLyogVGhpcyBjaGVjayBpcyBleHBlbnNpdmUhICovCi0gICAgICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgIlhYWCB1bmRldGVjdGVkIGVycm9yXG4iKTsKLSAgICAgICAgICAgICAgICBlbHNlIHsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICBSRUFEX1RJTUVTVEFNUChsb29wMSk7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBOb3JtYWwsIGZhc3QgcGF0aCAqLwotI2lmZGVmIENIRUNLRVhDCi0gICAgICAgICAgICAgICAgfQotI2VuZGlmCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aHkgPSBXSFlfRVhDRVBUSU9OOwotICAgICAgICAgICAgeCA9IFB5X05vbmU7Ci0gICAgICAgICAgICBlcnIgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogRG91YmxlLWNoZWNrIGV4Y2VwdGlvbiBzdGF0dXMgKi8KLQotICAgICAgICBpZiAod2h5ID09IFdIWV9FWENFUFRJT04gfHwgd2h5ID09IFdIWV9SRVJBSVNFKSB7Ci0gICAgICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICJlcnJvciByZXR1cm4gd2l0aG91dCBleGNlcHRpb24gc2V0Iik7Ci0gICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2lmZGVmIENIRUNLRVhDCi0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgLyogVGhpcyBjaGVjayBpcyBleHBlbnNpdmUhICovCi0gICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzEyOF07Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihidWYsICJTdGFjayB1bndpbmQgd2l0aCBleGNlcHRpb24gIgotICAgICAgICAgICAgICAgICAgICAic2V0IGFuZCB3aHk9JWQiLCB3aHkpOwotICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoYnVmKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQorICAgICAgICAvKiBEb3VibGUtY2hlY2sgZXhjZXB0aW9uIHN0YXR1cy4gKi8KKyNpZmRlZiBOREVCVUcKKyAgICAgICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciByZXR1cm4gd2l0aG91dCBleGNlcHRpb24gc2V0Iik7CisjZWxzZQorICAgICAgICBhc3NlcnQoUHlFcnJfT2NjdXJyZWQoKSk7CiAjZW5kaWYKIAotICAgICAgICAvKiBMb2cgdHJhY2ViYWNrIGluZm8gaWYgdGhpcyBpcyBhIHJlYWwgZXhjZXB0aW9uICovCisgICAgICAgIC8qIExvZyB0cmFjZWJhY2sgaW5mby4gKi8KKyAgICAgICAgUHlUcmFjZUJhY2tfSGVyZShmKTsKIAotICAgICAgICBpZiAod2h5ID09IFdIWV9FWENFUFRJT04pIHsKLSAgICAgICAgICAgIFB5VHJhY2VCYWNrX0hlcmUoZik7Ci0KLSAgICAgICAgICAgIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmNfdHJhY2VvYmosIGYpOwotICAgICAgICB9Ci0KLSAgICAgICAgLyogRm9yIHRoZSByZXN0LCB0cmVhdCBXSFlfUkVSQUlTRSBhcyBXSFlfRVhDRVBUSU9OICovCi0KLSAgICAgICAgaWYgKHdoeSA9PSBXSFlfUkVSQUlTRSkKLSAgICAgICAgICAgIHdoeSA9IFdIWV9FWENFUFRJT047Ci0KLSAgICAgICAgLyogVW53aW5kIHN0YWNrcyBpZiBhIChwc2V1ZG8pIGV4Y2VwdGlvbiBvY2N1cnJlZCAqLworICAgICAgICBpZiAodHN0YXRlLT5jX3RyYWNlZnVuYyAhPSBOVUxMKQorICAgICAgICAgICAgY2FsbF9leGNfdHJhY2UodHN0YXRlLT5jX3RyYWNlZnVuYywgdHN0YXRlLT5jX3RyYWNlb2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmKTsKIAogZmFzdF9ibG9ja19lbmQ6CisgICAgICAgIGFzc2VydCh3aHkgIT0gV0hZX05PVCk7CisKKyAgICAgICAgLyogVW53aW5kIHN0YWNrcyBpZiBhIChwc2V1ZG8pIGV4Y2VwdGlvbiBvY2N1cnJlZCAqLwogICAgICAgICB3aGlsZSAod2h5ICE9IFdIWV9OT1QgJiYgZi0+Zl9pYmxvY2sgPiAwKSB7CiAgICAgICAgICAgICAvKiBQZWVrIGF0IHRoZSBjdXJyZW50IGJsb2NrLiAqLwogICAgICAgICAgICAgUHlUcnlCbG9jayAqYiA9ICZmLT5mX2Jsb2Nrc3RhY2tbZi0+Zl9pYmxvY2sgLSAxXTsKQEAgLTI5NzgsNyArMzExOSwxMCBAQAogICAgICAgICAgICAgICAgICAgIFB5dGhvbiBtYWluIGxvb3AuICovCiAgICAgICAgICAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICAmZXhjLCAmdmFsLCAmdGIpOwotICAgICAgICAgICAgICAgIFB5RXhjZXB0aW9uX1NldFRyYWNlYmFjayh2YWwsIHRiKTsKKyAgICAgICAgICAgICAgICBpZiAodGIgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgdGIpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHZhbCwgUHlfTm9uZSk7CiAgICAgICAgICAgICAgICAgUHlfSU5DUkVGKGV4Yyk7CiAgICAgICAgICAgICAgICAgdHN0YXRlLT5leGNfdHlwZSA9IGV4YzsKICAgICAgICAgICAgICAgICBQeV9JTkNSRUYodmFsKTsKQEAgLTMwMTAsMjAgKzMxNTQsMjYgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBSRUFEX1RJTUVTVEFNUChsb29wMSk7CiAKKyAgICAgICAgYXNzZXJ0KCFQeUVycl9PY2N1cnJlZCgpKTsKKwogICAgIH0gLyogbWFpbiBsb29wICovCiAKICAgICBhc3NlcnQod2h5ICE9IFdIWV9ZSUVMRCk7CiAgICAgLyogUG9wIHJlbWFpbmluZyBzdGFjayBlbnRyaWVzLiAqLwogICAgIHdoaWxlICghRU1QVFkoKSkgewotICAgICAgICB2ID0gUE9QKCk7Ci0gICAgICAgIFB5X1hERUNSRUYodik7CisgICAgICAgIFB5T2JqZWN0ICpvID0gUE9QKCk7CisgICAgICAgIFB5X1hERUNSRUYobyk7CiAgICAgfQogCiAgICAgaWYgKHdoeSAhPSBXSFlfUkVUVVJOKQogICAgICAgICByZXR2YWwgPSBOVUxMOwogCisgICAgYXNzZXJ0KChyZXR2YWwgIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIHx8IChyZXR2YWwgPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CisKIGZhc3RfeWllbGQ6Ci0gICAgaWYgKGNvLT5jb19mbGFncyAmIENPX0dFTkVSQVRPUiAmJiAod2h5ID09IFdIWV9ZSUVMRCB8fCB3aHkgPT0gV0hZX1JFVFVSTikpIHsKKyAgICBpZiAoY28tPmNvX2ZsYWdzICYgQ09fR0VORVJBVE9SKSB7CisKICAgICAgICAgLyogVGhlIHB1cnBvc2Ugb2YgdGhpcyBibG9jayBpcyB0byBwdXQgYXNpZGUgdGhlIGdlbmVyYXRvcidzIGV4Y2VwdGlvbgogICAgICAgICAgICBzdGF0ZSBhbmQgcmVzdG9yZSB0aGF0IG9mIHRoZSBjYWxsaW5nIGZyYW1lLiBJZiB0aGUgY3VycmVudAogICAgICAgICAgICBleGNlcHRpb24gc3RhdGUgaXMgZnJvbSB0aGUgY2FsbGVyLCB3ZSBjbGVhciB0aGUgZXhjZXB0aW9uIHZhbHVlcwpAQCAtMzA0NiwyNiArMzE5NiwyNyBAQAogICAgIGlmICh0c3RhdGUtPnVzZV90cmFjaW5nKSB7CiAgICAgICAgIGlmICh0c3RhdGUtPmNfdHJhY2VmdW5jKSB7CiAgICAgICAgICAgICBpZiAod2h5ID09IFdIWV9SRVRVUk4gfHwgd2h5ID09IFdIWV9ZSUVMRCkgewotICAgICAgICAgICAgICAgIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLCBmLAorICAgICAgICAgICAgICAgIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUcmFjZV9SRVRVUk4sIHJldHZhbCkpIHsKICAgICAgICAgICAgICAgICAgICAgUHlfQ0xFQVIocmV0dmFsKTsKICAgICAgICAgICAgICAgICAgICAgd2h5ID0gV0hZX0VYQ0VQVElPTjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlIGlmICh3aHkgPT0gV0hZX0VYQ0VQVElPTikgewotICAgICAgICAgICAgICAgIGNhbGxfdHJhY2VfcHJvdGVjdGVkKHRzdGF0ZS0+Y190cmFjZWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3RyYWNlb2JqLCBmLAorICAgICAgICAgICAgICAgIGNhbGxfdHJhY2VfcHJvdGVjdGVkKHRzdGF0ZS0+Y190cmFjZWZ1bmMsIHRzdGF0ZS0+Y190cmFjZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIGYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlUcmFjZV9SRVRVUk4sIE5VTEwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMpIHsKICAgICAgICAgICAgIGlmICh3aHkgPT0gV0hZX0VYQ0VQVElPTikKICAgICAgICAgICAgICAgICBjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosIGYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfUkVUVVJOLCBOVUxMKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGNhbGxfdHJhY2UodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmNfcHJvZmlsZW9iaiwgZiwKKyAgICAgICAgICAgIGVsc2UgaWYgKGNhbGxfdHJhY2UodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLCB0c3RhdGUtPmNfcHJvZmlsZW9iaiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCBmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVRyYWNlX1JFVFVSTiwgcmV0dmFsKSkgewogICAgICAgICAgICAgICAgIFB5X0NMRUFSKHJldHZhbCk7CiAgICAgICAgICAgICAgICAgLyogd2h5ID0gV0hZX0VYQ0VQVElPTjsgKi8KQEAgLTMwNzYsNiArMzIyNyw3IEBACiAgICAgLyogcG9wIGZyYW1lICovCiBleGl0X2V2YWxfZnJhbWU6CiAgICAgUHlfTGVhdmVSZWN1cnNpdmVDYWxsKCk7CisgICAgZi0+Zl9leGVjdXRpbmcgPSAwOwogICAgIHRzdGF0ZS0+ZnJhbWUgPSBmLT5mX2JhY2s7CiAKICAgICByZXR1cm4gcmV0dmFsOwpAQCAtMzI0MSw5ICszMzkzLDkgQEAKICAgICAgICAgICAgUHlPYmplY3QgKipkZWZzLCBpbnQgZGVmY291bnQsIFB5T2JqZWN0ICprd2RlZnMsIFB5T2JqZWN0ICpjbG9zdXJlKQogewogICAgIFB5Q29kZU9iamVjdCogY28gPSAoUHlDb2RlT2JqZWN0KilfY287Ci0gICAgcmVnaXN0ZXIgUHlGcmFtZU9iamVjdCAqZjsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKLSAgICByZWdpc3RlciBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CisgICAgUHlGcmFtZU9iamVjdCAqZjsKKyAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKKyAgICBQeU9iamVjdCAqKmZhc3Rsb2NhbHMsICoqZnJlZXZhcnM7CiAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKICAgICBQeU9iamVjdCAqeCwgKnU7CiAgICAgaW50IHRvdGFsX2FyZ3MgPSBjby0+Y29fYXJnY291bnQgKyBjby0+Y29fa3dvbmx5YXJnY291bnQ7CkBAIC0zNTE5LDcgKzM2NzEsNyBAQAogCiAvKiBMb2dpYyBmb3IgdGhlIHJhaXNlIHN0YXRlbWVudCAodG9vIGNvbXBsaWNhdGVkIGZvciBpbmxpbmluZykuCiAgICBUaGlzICpjb25zdW1lcyogYSByZWZlcmVuY2UgY291bnQgdG8gZWFjaCBvZiBpdHMgYXJndW1lbnRzLiAqLwotc3RhdGljIGVudW0gd2h5X2NvZGUKK3N0YXRpYyBpbnQKIGRvX3JhaXNlKFB5T2JqZWN0ICpleGMsIFB5T2JqZWN0ICpjYXVzZSkKIHsKICAgICBQeU9iamVjdCAqdHlwZSA9IE5VTEwsICp2YWx1ZSA9IE5VTEw7CkBAIC0zNTM0LDEzICszNjg2LDEzIEBACiAgICAgICAgIGlmICh0eXBlID09IFB5X05vbmUpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19SdW50aW1lRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vIGFjdGl2ZSBleGNlcHRpb24gdG8gcmVyYWlzZSIpOwotICAgICAgICAgICAgcmV0dXJuIFdIWV9FWENFUFRJT047Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgICAgICBQeV9YSU5DUkVGKHR5cGUpOwogICAgICAgICBQeV9YSU5DUkVGKHZhbHVlKTsKICAgICAgICAgUHlfWElOQ1JFRih0Yik7CiAgICAgICAgIFB5RXJyX1Jlc3RvcmUodHlwZSwgdmFsdWUsIHRiKTsKLSAgICAgICAgcmV0dXJuIFdIWV9SRVJBSVNFOworICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKICAgICAvKiBXZSBzdXBwb3J0IHRoZSBmb2xsb3dpbmcgZm9ybXMgb2YgcmFpc2U6CkBAIC0zNjAzLDEzICszNzU1LDEzIEBACiAgICAgLyogUHlFcnJfU2V0T2JqZWN0IGluY3JlZidzIGl0cyBhcmd1bWVudHMgKi8KICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICBQeV9YREVDUkVGKHR5cGUpOwotICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOworICAgIHJldHVybiAwOwogCiByYWlzZV9lcnJvcjoKICAgICBQeV9YREVDUkVGKHZhbHVlKTsKICAgICBQeV9YREVDUkVGKHR5cGUpOwogICAgIFB5X1hERUNSRUYoY2F1c2UpOwotICAgIHJldHVybiBXSFlfRVhDRVBUSU9OOworICAgIHJldHVybiAwOwogfQogCiAvKiBJdGVyYXRlIHYgYXJnY250IHRpbWVzIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBvbiB0aGUgc3RhY2sgKHZpYSBkZWNyZWFzaW5nCkBAIC0zNzA2LDQwICszODU4LDQzIEBACiAjZW5kaWYKIAogc3RhdGljIHZvaWQKLWNhbGxfZXhjX3RyYWNlKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqc2VsZiwgUHlGcmFtZU9iamVjdCAqZikKK2NhbGxfZXhjX3RyYWNlKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlGcmFtZU9iamVjdCAqZikKIHsKLSAgICBQeU9iamVjdCAqdHlwZSwgKnZhbHVlLCAqdHJhY2ViYWNrLCAqYXJnOworICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2ssICpvcmlnX3RyYWNlYmFjaywgKmFyZzsKICAgICBpbnQgZXJyOwotICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZ0cmFjZWJhY2spOworICAgIFB5RXJyX0ZldGNoKCZ0eXBlLCAmdmFsdWUsICZvcmlnX3RyYWNlYmFjayk7CiAgICAgaWYgKHZhbHVlID09IE5VTEwpIHsKICAgICAgICAgdmFsdWUgPSBQeV9Ob25lOwogICAgICAgICBQeV9JTkNSRUYodmFsdWUpOwogICAgIH0KLSAgICBQeUVycl9Ob3JtYWxpemVFeGNlcHRpb24oJnR5cGUsICZ2YWx1ZSwgJnRyYWNlYmFjayk7CisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZ0eXBlLCAmdmFsdWUsICZvcmlnX3RyYWNlYmFjayk7CisgICAgdHJhY2ViYWNrID0gKG9yaWdfdHJhY2ViYWNrICE9IE5VTEwpID8gb3JpZ190cmFjZWJhY2sgOiBQeV9Ob25lOwogICAgIGFyZyA9IFB5VHVwbGVfUGFjaygzLCB0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKICAgICBpZiAoYXJnID09IE5VTEwpIHsKLSAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKKyAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgb3JpZ190cmFjZWJhY2spOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGVyciA9IGNhbGxfdHJhY2UoZnVuYywgc2VsZiwgZiwgUHlUcmFjZV9FWENFUFRJT04sIGFyZyk7CisgICAgZXJyID0gY2FsbF90cmFjZShmdW5jLCBzZWxmLCB0c3RhdGUsIGYsIFB5VHJhY2VfRVhDRVBUSU9OLCBhcmcpOwogICAgIFB5X0RFQ1JFRihhcmcpOwogICAgIGlmIChlcnIgPT0gMCkKLSAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKKyAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgb3JpZ190cmFjZWJhY2spOwogICAgIGVsc2UgewogICAgICAgICBQeV9YREVDUkVGKHR5cGUpOwogICAgICAgICBQeV9YREVDUkVGKHZhbHVlKTsKLSAgICAgICAgUHlfWERFQ1JFRih0cmFjZWJhY2spOworICAgICAgICBQeV9YREVDUkVGKG9yaWdfdHJhY2ViYWNrKTsKICAgICB9CiB9CiAKIHN0YXRpYyBpbnQKLWNhbGxfdHJhY2VfcHJvdGVjdGVkKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqb2JqLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKK2NhbGxfdHJhY2VfcHJvdGVjdGVkKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqb2JqLAorICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewogICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2s7CiAgICAgaW50IGVycjsKICAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKLSAgICBlcnIgPSBjYWxsX3RyYWNlKGZ1bmMsIG9iaiwgZnJhbWUsIHdoYXQsIGFyZyk7CisgICAgZXJyID0gY2FsbF90cmFjZShmdW5jLCBvYmosIHRzdGF0ZSwgZnJhbWUsIHdoYXQsIGFyZyk7CiAgICAgaWYgKGVyciA9PSAwKQogICAgIHsKICAgICAgICAgUHlFcnJfUmVzdG9yZSh0eXBlLCB2YWx1ZSwgdHJhY2ViYWNrKTsKQEAgLTM3NTQsMTAgKzM5MDksMTAgQEAKIH0KIAogc3RhdGljIGludAotY2FsbF90cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCitjYWxsX3RyYWNlKFB5X3RyYWNlZnVuYyBmdW5jLCBQeU9iamVjdCAqb2JqLAorICAgICAgICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUsIFB5RnJhbWVPYmplY3QgKmZyYW1lLAogICAgICAgICAgICBpbnQgd2hhdCwgUHlPYmplY3QgKmFyZykKIHsKLSAgICByZWdpc3RlciBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBmcmFtZS0+Zl90c3RhdGU7CiAgICAgaW50IHJlc3VsdDsKICAgICBpZiAodHN0YXRlLT50cmFjaW5nKQogICAgICAgICByZXR1cm4gMDsKQEAgLTM3NzMsOCArMzkyOCw3IEBACiBQeU9iamVjdCAqCiBfUHlFdmFsX0NhbGxUcmFjaW5nKFB5T2JqZWN0ICpmdW5jLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeUZyYW1lT2JqZWN0ICpmcmFtZSA9IFB5RXZhbF9HZXRGcmFtZSgpOwotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IGZyYW1lLT5mX3RzdGF0ZTsKKyAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwogICAgIGludCBzYXZlX3RyYWNpbmcgPSB0c3RhdGUtPnRyYWNpbmc7CiAgICAgaW50IHNhdmVfdXNlX3RyYWNpbmcgPSB0c3RhdGUtPnVzZV90cmFjaW5nOwogICAgIFB5T2JqZWN0ICpyZXN1bHQ7CkBAIC0zNzkxLDggKzM5NDUsOCBAQAogLyogU2VlIE9iamVjdHMvbG5vdGFiX25vdGVzLnR4dCBmb3IgYSBkZXNjcmlwdGlvbiBvZiBob3cgdHJhY2luZyB3b3Jrcy4gKi8KIHN0YXRpYyBpbnQKIG1heWJlX2NhbGxfbGluZV90cmFjZShQeV90cmFjZWZ1bmMgZnVuYywgUHlPYmplY3QgKm9iaiwKLSAgICAgICAgICAgICAgICAgICAgICBQeUZyYW1lT2JqZWN0ICpmcmFtZSwgaW50ICppbnN0cl9sYiwgaW50ICppbnN0cl91YiwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKmluc3RyX3ByZXYpCisgICAgICAgICAgICAgICAgICAgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlLCBQeUZyYW1lT2JqZWN0ICpmcmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKmluc3RyX2xiLCBpbnQgKmluc3RyX3ViLCBpbnQgKmluc3RyX3ByZXYpCiB7CiAgICAgaW50IHJlc3VsdCA9IDA7CiAgICAgaW50IGxpbmUgPSBmcmFtZS0+Zl9saW5lbm87CkBAIC0zODEyLDcgKzM5NjYsNyBAQAogICAgICAgIG51bWJlciBhbmQgY2FsbCB0aGUgdHJhY2UgZnVuY3Rpb24uICovCiAgICAgaWYgKGZyYW1lLT5mX2xhc3RpID09ICppbnN0cl9sYiB8fCBmcmFtZS0+Zl9sYXN0aSA8ICppbnN0cl9wcmV2KSB7CiAgICAgICAgIGZyYW1lLT5mX2xpbmVubyA9IGxpbmU7Ci0gICAgICAgIHJlc3VsdCA9IGNhbGxfdHJhY2UoZnVuYywgb2JqLCBmcmFtZSwgUHlUcmFjZV9MSU5FLCBQeV9Ob25lKTsKKyAgICAgICAgcmVzdWx0ID0gY2FsbF90cmFjZShmdW5jLCBvYmosIHRzdGF0ZSwgZnJhbWUsIFB5VHJhY2VfTElORSwgUHlfTm9uZSk7CiAgICAgfQogICAgICppbnN0cl9wcmV2ID0gZnJhbWUtPmZfbGFzdGk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTM4NjgsOSArNDAyMiwxNSBAQAogUHlFdmFsX0dldExvY2Fscyh2b2lkKQogewogICAgIFB5RnJhbWVPYmplY3QgKmN1cnJlbnRfZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKLSAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKQorICAgIGlmIChjdXJyZW50X2ZyYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5c3RlbUVycm9yLCAiZnJhbWUgZG9lcyBub3QgZXhpc3QiKTsKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgUHlGcmFtZV9GYXN0VG9Mb2NhbHMoY3VycmVudF9mcmFtZSk7CisgICAgfQorCisgICAgaWYgKFB5RnJhbWVfRmFzdFRvTG9jYWxzV2l0aEVycm9yKGN1cnJlbnRfZnJhbWUpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhc3NlcnQoY3VycmVudF9mcmFtZS0+Zl9sb2NhbHMgIT0gTlVMTCk7CiAgICAgcmV0dXJuIGN1cnJlbnRfZnJhbWUtPmZfbG9jYWxzOwogfQogCkBAIC0zODgwLDggKzQwNDAsOSBAQAogICAgIFB5RnJhbWVPYmplY3QgKmN1cnJlbnRfZnJhbWUgPSBQeUV2YWxfR2V0RnJhbWUoKTsKICAgICBpZiAoY3VycmVudF9mcmFtZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2dsb2JhbHM7CisKKyAgICBhc3NlcnQoY3VycmVudF9mcmFtZS0+Zl9nbG9iYWxzICE9IE5VTEwpOworICAgIHJldHVybiBjdXJyZW50X2ZyYW1lLT5mX2dsb2JhbHM7CiB9CiAKIFB5RnJhbWVPYmplY3QgKgpAQCAtMzkyMyw2ICs0MDg0LDEzIEBACiB7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIAorI2lmZGVmIFB5X0RFQlVHCisgICAgLyogUHlFdmFsX0NhbGxPYmplY3RXaXRoS2V5d29yZHMoKSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBhbiBleGNlcHRpb24KKyAgICAgICBzZXQsIGJlY2F1c2UgaXQgbWF5IGNsZWFyIGl0IChkaXJlY3RseSBvciBpbmRpcmVjdGx5KQorICAgICAgIGFuZCBzbyB0aGUgY2FsbGVyIGxvc2VzIGl0cyBleGNlcHRpb24gKi8KKyAgICBhc3NlcnQoIVB5RXJyX09jY3VycmVkKCkpOworI2VuZGlmCisKICAgICBpZiAoYXJnID09IE5VTEwpIHsKICAgICAgICAgYXJnID0gUHlUdXBsZV9OZXcoMCk7CiAgICAgICAgIGlmIChhcmcgPT0gTlVMTCkKQEAgLTM5NDUsNiArNDExMyw5IEBACiAKICAgICByZXN1bHQgPSBQeU9iamVjdF9DYWxsKGZ1bmMsIGFyZywga3cpOwogICAgIFB5X0RFQ1JFRihhcmcpOworCisgICAgYXNzZXJ0KChyZXN1bHQgIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgfHwgKHJlc3VsdCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zOTkxLDEwICs0MTYyLDkgQEAKIAogI2RlZmluZSBDX1RSQUNFKHgsIGNhbGwpIFwKIGlmICh0c3RhdGUtPnVzZV90cmFjaW5nICYmIHRzdGF0ZS0+Y19wcm9maWxlZnVuYykgeyBcCi0gICAgaWYgKGNhbGxfdHJhY2UodHN0YXRlLT5jX3Byb2ZpbGVmdW5jLCBcCi0gICAgICAgIHRzdGF0ZS0+Y19wcm9maWxlb2JqLCBcCi0gICAgICAgIHRzdGF0ZS0+ZnJhbWUsIFB5VHJhY2VfQ19DQUxMLCBcCi0gICAgICAgIGZ1bmMpKSB7IFwKKyAgICBpZiAoY2FsbF90cmFjZSh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMsIHRzdGF0ZS0+Y19wcm9maWxlb2JqLCBcCisgICAgICAgIHRzdGF0ZSwgdHN0YXRlLT5mcmFtZSwgXAorICAgICAgICBQeVRyYWNlX0NfQ0FMTCwgZnVuYykpIHsgXAogICAgICAgICB4ID0gTlVMTDsgXAogICAgIH0gXAogICAgIGVsc2UgeyBcCkBAIC00MDAzLDE0ICs0MTczLDE0IEBACiAgICAgICAgICAgICBpZiAoeCA9PSBOVUxMKSB7IFwKICAgICAgICAgICAgICAgICBjYWxsX3RyYWNlX3Byb3RlY3RlZCh0c3RhdGUtPmNfcHJvZmlsZWZ1bmMsIFwKICAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5jX3Byb2ZpbGVvYmosIFwKLSAgICAgICAgICAgICAgICAgICAgdHN0YXRlLT5mcmFtZSwgUHlUcmFjZV9DX0VYQ0VQVElPTiwgXAotICAgICAgICAgICAgICAgICAgICBmdW5jKTsgXAorICAgICAgICAgICAgICAgICAgICB0c3RhdGUsIHRzdGF0ZS0+ZnJhbWUsIFwKKyAgICAgICAgICAgICAgICAgICAgUHlUcmFjZV9DX0VYQ0VQVElPTiwgZnVuYyk7IFwKICAgICAgICAgICAgICAgICAvKiBYWFggc2hvdWxkIHBhc3MgKHR5cGUsIHZhbHVlLCB0YikgKi8gXAogICAgICAgICAgICAgfSBlbHNlIHsgXAogICAgICAgICAgICAgICAgIGlmIChjYWxsX3RyYWNlKHRzdGF0ZS0+Y19wcm9maWxlZnVuYywgXAogICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmNfcHJvZmlsZW9iaiwgXAotICAgICAgICAgICAgICAgICAgICB0c3RhdGUtPmZyYW1lLCBQeVRyYWNlX0NfUkVUVVJOLCBcCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMpKSB7IFwKKyAgICAgICAgICAgICAgICAgICAgdHN0YXRlLCB0c3RhdGUtPmZyYW1lLCBcCisgICAgICAgICAgICAgICAgICAgIFB5VHJhY2VfQ19SRVRVUk4sIGZ1bmMpKSB7IFwKICAgICAgICAgICAgICAgICAgICAgUHlfREVDUkVGKHgpOyBcCiAgICAgICAgICAgICAgICAgICAgIHggPSBOVUxMOyBcCiAgICAgICAgICAgICAgICAgfSBcCkBAIC00MDYyLDEwICs0MjMyLDE1IEBACiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgUHlPYmplY3QgKmNhbGxhcmdzOwogICAgICAgICAgICAgY2FsbGFyZ3MgPSBsb2FkX2FyZ3MocHBfc3RhY2ssIG5hKTsKLSAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjApOwotICAgICAgICAgICAgQ19UUkFDRSh4LCBQeUNGdW5jdGlvbl9DYWxsKGZ1bmMsY2FsbGFyZ3MsTlVMTCkpOwotICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMSk7Ci0gICAgICAgICAgICBQeV9YREVDUkVGKGNhbGxhcmdzKTsKKyAgICAgICAgICAgIGlmIChjYWxsYXJncyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMCk7CisgICAgICAgICAgICAgICAgQ19UUkFDRSh4LCBQeUNGdW5jdGlvbl9DYWxsKGZ1bmMsY2FsbGFyZ3MsTlVMTCkpOworICAgICAgICAgICAgICAgIFJFQURfVElNRVNUQU1QKCpwaW50cjEpOworICAgICAgICAgICAgICAgIFB5X1hERUNSRUYoY2FsbGFyZ3MpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgeCA9IE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAoUHlNZXRob2RfQ2hlY2soZnVuYykgJiYgUHlNZXRob2RfR0VUX1NFTEYoZnVuYykgIT0gTlVMTCkgewpAQCAtNDA5MCw2ICs0MjY1LDggQEAKICAgICAgICAgUkVBRF9USU1FU1RBTVAoKnBpbnRyMSk7CiAgICAgICAgIFB5X0RFQ1JFRihmdW5jKTsKICAgICB9CisgICAgYXNzZXJ0KCh4ICE9IE5VTEwgJiYgIVB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgIHx8ICh4ID09IE5VTEwgJiYgUHlFcnJfT2NjdXJyZWQoKSkpOwogCiAgICAgLyogQ2xlYXIgdGhlIHN0YWNrIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuICBBbHNvIHJlbW92ZXMKICAgICAgICB0aGUgYXJndW1lbnRzIGluIGNhc2UgdGhleSB3ZXJlbid0IGNvbnN1bWVkIGFscmVhZHkKQEAgLTQxMDAsNiArNDI3Nyw5IEBACiAgICAgICAgIFB5X0RFQ1JFRih3KTsKICAgICAgICAgUENBTEwoUENBTExfUE9QKTsKICAgICB9CisKKyAgICBhc3NlcnQoKHggIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgfHwgKHggPT0gTlVMTCAmJiBQeUVycl9PY2N1cnJlZCgpKSk7CiAgICAgcmV0dXJuIHg7CiB9CiAKQEAgLTQzODMsNiArNDU2Myw4IEBACiAgICAgUHlfWERFQ1JFRihjYWxsYXJncyk7CiAgICAgUHlfWERFQ1JFRihrd2RpY3QpOwogICAgIFB5X1hERUNSRUYoc3RhcmFyZyk7CisgICAgYXNzZXJ0KChyZXN1bHQgIT0gTlVMTCAmJiAhUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgfHwgKHJlc3VsdCA9PSBOVUxMICYmIFB5RXJyX09jY3VycmVkKCkpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NDIxLDcgKzQ2MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICJCYXNlRXhjZXB0aW9uIGlzIG5vdCBhbGxvd2VkIgogCiBzdGF0aWMgUHlPYmplY3QgKgotY21wX291dGNvbWUoaW50IG9wLCByZWdpc3RlciBQeU9iamVjdCAqdiwgcmVnaXN0ZXIgUHlPYmplY3QgKncpCitjbXBfb3V0Y29tZShpbnQgb3AsIFB5T2JqZWN0ICp2LCBQeU9iamVjdCAqdykKIHsKICAgICBpbnQgcmVzID0gMDsKICAgICBzd2l0Y2ggKG9wKSB7CkBAIC00NDc5LDcgKzQ2NjEsNyBAQAogCiAgICAgeCA9IFB5T2JqZWN0X0dldEF0dHIodiwgbmFtZSk7CiAgICAgaWYgKHggPT0gTlVMTCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0F0dHJpYnV0ZUVycm9yKSkgewotICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfSW1wb3J0RXJyb3IsICJjYW5ub3QgaW1wb3J0IG5hbWUgJVMiLCBuYW1lKTsKKyAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0ltcG9ydEVycm9yLCAiY2Fubm90IGltcG9ydCBuYW1lICVSIiwgbmFtZSk7CiAgICAgfQogICAgIHJldHVybiB4OwogfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvZGVjcy5jIGIvUHl0aG9uL2NvZGVjcy5jCmluZGV4IGVhMzNjNDkuLjI3ZjJhZWIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jb2RlY3MuYworKysgYi9QeXRob24vY29kZWNzLmMKQEAgLTUzLDcgKzUzLDcgQEAKIHN0YXRpYwogUHlPYmplY3QgKm5vcm1hbGl6ZXN0cmluZyhjb25zdCBjaGFyICpzdHJpbmcpCiB7Ci0gICAgcmVnaXN0ZXIgc2l6ZV90IGk7CisgICAgc2l6ZV90IGk7CiAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihzdHJpbmcpOwogICAgIGNoYXIgKnA7CiAgICAgUHlPYmplY3QgKnY7CkBAIC02NSw5ICs2NSw5IEBACiAKICAgICBwID0gUHlNZW1fTWFsbG9jKGxlbiArIDEpOwogICAgIGlmIChwID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOworICAgICAgICByZXR1cm4gUHlFcnJfTm9NZW1vcnkoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgcmVnaXN0ZXIgY2hhciBjaCA9IHN0cmluZ1tpXTsKKyAgICAgICAgY2hhciBjaCA9IHN0cmluZ1tpXTsKICAgICAgICAgaWYgKGNoID09ICcgJykKICAgICAgICAgICAgIGNoID0gJy0nOwogICAgICAgICBlbHNlCkBAIC0xODUsNiArMTg1LDMyIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK2ludCBfUHlDb2RlY19Gb3JnZXQoY29uc3QgY2hhciAqZW5jb2RpbmcpCit7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnA7CisgICAgUHlPYmplY3QgKnY7CisgICAgaW50IHJlc3VsdDsKKworICAgIGludGVycCA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKKyAgICBpZiAoaW50ZXJwLT5jb2RlY19zZWFyY2hfcGF0aCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBDb252ZXJ0IHRoZSBlbmNvZGluZyB0byBhIG5vcm1hbGl6ZWQgUHl0aG9uIHN0cmluZzogYWxsCisgICAgICAgY2hhcmFjdGVycyBhcmUgY29udmVydGVkIHRvIGxvd2VyIGNhc2UsIHNwYWNlcyBhbmQgaHlwaGVucyBhcmUKKyAgICAgICByZXBsYWNlZCB3aXRoIHVuZGVyc2NvcmVzLiAqLworICAgIHYgPSBub3JtYWxpemVzdHJpbmcoZW5jb2RpbmcpOworICAgIGlmICh2ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIERyb3AgdGhlIG5hbWVkIGNvZGVjIGZyb20gdGhlIGludGVybmFsIGNhY2hlICovCisgICAgcmVzdWx0ID0gUHlEaWN0X0RlbEl0ZW0oaW50ZXJwLT5jb2RlY19zZWFyY2hfY2FjaGUsIHYpOworICAgIFB5X0RFQ1JFRih2KTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIC8qIENvZGVjIHJlZ2lzdHJ5IGVuY29kaW5nIGNoZWNrIEFQSS4gKi8KIAogaW50IFB5Q29kZWNfS25vd25FbmNvZGluZyhjb25zdCBjaGFyICplbmNvZGluZykKQEAgLTM2MCw2ICszODYsMjIgQEAKICAgICByZXR1cm4gY29kZWNfZ2V0c3RyZWFtY29kZWMoZW5jb2RpbmcsIHN0cmVhbSwgZXJyb3JzLCAzKTsKIH0KIAorLyogSGVscGVyIHRoYXQgdHJpZXMgdG8gZW5zdXJlIHRoZSByZXBvcnRlZCBleGNlcHRpb24gY2hhaW4gaW5kaWNhdGVzIHRoZQorICogY29kZWMgdGhhdCB3YXMgaW52b2tlZCB0byB0cmlnZ2VyIHRoZSBmYWlsdXJlIHdpdGhvdXQgY2hhbmdpbmcgdGhlIHR5cGUKKyAqIG9mIHRoZSBleGNlcHRpb24gcmFpc2VkLgorICovCitzdGF0aWMgdm9pZAord3JhcF9jb2RlY19lcnJvcihjb25zdCBjaGFyICpvcGVyYXRpb24sCisgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5nKQoreworICAgIC8qIFRyeVNldEZyb21DYXVzZSB3aWxsIHJlcGxhY2UgdGhlIGFjdGl2ZSBleGNlcHRpb24gd2l0aCBhIHN1aXRhYmx5CisgICAgICogdXBkYXRlZCBjbG9uZSBpZiBpdCBjYW4sIG90aGVyd2lzZSBpdCB3aWxsIGxlYXZlIHRoZSBvcmlnaW5hbAorICAgICAqIGV4Y2VwdGlvbiBhbG9uZS4KKyAgICAgKi8KKyAgICBfUHlFcnJfVHJ5U2V0RnJvbUNhdXNlKCIlcyB3aXRoICclcycgY29kZWMgZmFpbGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiwgZW5jb2RpbmcpOworfQorCiAvKiBFbmNvZGUgYW4gb2JqZWN0IChlLmcuIGFuIFVuaWNvZGUgb2JqZWN0KSB1c2luZyB0aGUgZ2l2ZW4gZW5jb2RpbmcKICAgIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBlbmNvZGVkIG9iamVjdCAodXN1YWxseSBhIFB5dGhvbiBzdHJpbmcpLgogCkBAIC0zNzksOCArNDIxLDEwIEBACiAgICAgICAgIGdvdG8gb25FcnJvcjsKIAogICAgIHJlc3VsdCA9IFB5RXZhbF9DYWxsT2JqZWN0KGVuY29kZXIsIGFyZ3MpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgd3JhcF9jb2RlY19lcnJvcigiZW5jb2RpbmciLCBlbmNvZGluZyk7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CiAKICAgICBpZiAoIVB5VHVwbGVfQ2hlY2socmVzdWx0KSB8fAogICAgICAgICBQeVR1cGxlX0dFVF9TSVpFKHJlc3VsdCkgIT0gMikgewpAQCAtNDIzLDggKzQ2NywxMCBAQAogICAgICAgICBnb3RvIG9uRXJyb3I7CiAKICAgICByZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChkZWNvZGVyLGFyZ3MpOwotICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKyAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKKyAgICAgICAgd3JhcF9jb2RlY19lcnJvcigiZGVjb2RpbmciLCBlbmNvZGluZyk7CiAgICAgICAgIGdvdG8gb25FcnJvcjsKKyAgICB9CiAgICAgaWYgKCFQeVR1cGxlX0NoZWNrKHJlc3VsdCkgfHwKICAgICAgICAgUHlUdXBsZV9HRVRfU0laRShyZXN1bHQpICE9IDIpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKQEAgLTUwMywxMiArNTQ5LDEzIEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpc190ZXh0X2NvZGVjID0gUHlPYmplY3RfSXNUcnVlKGF0dHIpOwogICAgICAgICAgICAgUHlfREVDUkVGKGF0dHIpOwotICAgICAgICAgICAgaWYgKCFpc190ZXh0X2NvZGVjKSB7CisgICAgICAgICAgICBpZiAoaXNfdGV4dF9jb2RlYyA8PSAwKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGNvZGVjKTsKLSAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTG9va3VwRXJyb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICInJS40MDBzJyBpcyBub3QgYSB0ZXh0IGVuY29kaW5nOyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgJXMgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGluZywgYWx0ZXJuYXRlX2NvbW1hbmQpOworICAgICAgICAgICAgICAgIGlmICghaXNfdGV4dF9jb2RlYykKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX0xvb2t1cEVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiclLjQwMHMnIGlzIG5vdCBhIHRleHQgZW5jb2Rpbmc7ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1c2UgJXMgdG8gaGFuZGxlIGFyYml0cmFyeSBjb2RlY3MiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RpbmcsIGFsdGVybmF0ZV9jb21tYW5kKTsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNTg5LDcgKzYzNiw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgcmV0dXJuIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+Y29kZWNfZXJyb3JfcmVnaXN0cnksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopbmFtZSwgZXJyb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBlcnJvcik7CiB9CiAKIC8qIExvb2t1cCB0aGUgZXJyb3IgaGFuZGxpbmcgY2FsbGJhY2sgZnVuY3Rpb24gcmVnaXN0ZXJlZCB1bmRlciB0aGUKQEAgLTYwNSw3ICs2NTIsNyBAQAogCiAgICAgaWYgKG5hbWU9PU5VTEwpCiAgICAgICAgIG5hbWUgPSAic3RyaWN0IjsKLSAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgKGNoYXIgKiluYW1lKTsKKyAgICBoYW5kbGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSwgbmFtZSk7CiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfTG9va3VwRXJyb3IsICJ1bmtub3duIGVycm9yIGhhbmRsZXIgbmFtZSAnJS40MDBzJyIsIG5hbWUpOwogICAgIGVsc2UKQEAgLTYxNSwxOCArNjYyLDkgQEAKIAogc3RhdGljIHZvaWQgd3JvbmdfZXhjZXB0aW9uX3R5cGUoUHlPYmplY3QgKmV4YykKIHsKLSAgICBfUHlfSURFTlRJRklFUihfX2NsYXNzX18pOwotICAgIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKLSAgICBQeU9iamVjdCAqdHlwZSA9IF9QeU9iamVjdF9HZXRBdHRySWQoZXhjLCAmUHlJZF9fX2NsYXNzX18pOwotICAgIGlmICh0eXBlICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBfUHlPYmplY3RfR2V0QXR0cklkKHR5cGUsICZQeUlkX19fbmFtZV9fKTsKLSAgICAgICAgUHlfREVDUkVGKHR5cGUpOwotICAgICAgICBpZiAobmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgJVMgaW4gZXJyb3IgY2FsbGJhY2siLCBuYW1lKTsKLSAgICAgICAgICAgIFB5X0RFQ1JFRihuYW1lKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVHlwZUVycm9yLAorICAgICAgICAgICAgICAgICAiZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlICUuMjAwcyBpbiBlcnJvciBjYWxsYmFjayIsCisgICAgICAgICAgICAgICAgIGV4Yy0+b2JfdHlwZS0+dHBfbmFtZSk7CiB9CiAKIFB5T2JqZWN0ICpQeUNvZGVjX1N0cmljdEVycm9ycyhQeU9iamVjdCAqZXhjKQpAQCAtNjQyLDE1ICs2ODAsMTYgQEAKIFB5T2JqZWN0ICpQeUNvZGVjX0lnbm9yZUVycm9ycyhQeU9iamVjdCAqZXhjKQogewogICAgIFB5X3NzaXplX3QgZW5kOwotICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgeworCisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhleGMsIChQeVR5cGVPYmplY3QgKilQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKSB7CiAgICAgICAgIGlmIChQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZURlY29kZUVycm9yKSkgeworICAgIGVsc2UgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhleGMsIChQeVR5cGVPYmplY3QgKilQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3IpKSB7CiAgICAgICAgIGlmIChQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yKSkgeworICAgIGVsc2UgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhleGMsIChQeVR5cGVPYmplY3QgKilQeUV4Y19Vbmljb2RlVHJhbnNsYXRlRXJyb3IpKSB7CiAgICAgICAgIGlmIChQeVVuaWNvZGVUcmFuc2xhdGVFcnJvcl9HZXRFbmQoZXhjLCAmZW5kKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTY2Niw3ICs3MDUsNyBAQAogewogICAgIFB5X3NzaXplX3Qgc3RhcnQsIGVuZCwgaSwgbGVuOwogCi0gICAgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2UoZXhjLCBQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKSB7CisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhleGMsIChQeVR5cGVPYmplY3QgKilQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyZXM7CiAgICAgICAgIGludCBraW5kOwogICAgICAgICB2b2lkICpkYXRhOwpAQCAtNjg1LDE0ICs3MjQsMTQgQEAKICAgICAgICAgYXNzZXJ0KF9QeVVuaWNvZGVfQ2hlY2tDb25zaXN0ZW5jeShyZXMsIDEpKTsKICAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihObikiLCByZXMsIGVuZCk7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2UoZXhjLCBQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3IpKSB7CisgICAgZWxzZSBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKGV4YywgKFB5VHlwZU9iamVjdCAqKVB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcikpIHsKICAgICAgICAgaWYgKFB5VW5pY29kZURlY29kZUVycm9yX0dldEVuZChleGMsICZlbmQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoQ24pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClQeV9VTklDT0RFX1JFUExBQ0VNRU5UX0NIQVJBQ1RFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVUcmFuc2xhdGVFcnJvcikpIHsKKyAgICBlbHNlIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZVRyYW5zbGF0ZUVycm9yKSkgewogICAgICAgICBQeU9iamVjdCAqcmVzOwogICAgICAgICBpbnQga2luZDsKICAgICAgICAgdm9pZCAqZGF0YTsKQEAgLTcxOSw3ICs3NTgsNyBAQAogCiBQeU9iamVjdCAqUHlDb2RlY19YTUxDaGFyUmVmUmVwbGFjZUVycm9ycyhQeU9iamVjdCAqZXhjKQogewotICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgeworICAgIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgewogICAgICAgICBQeU9iamVjdCAqcmVzdHVwbGU7CiAgICAgICAgIFB5T2JqZWN0ICpvYmplY3Q7CiAgICAgICAgIFB5X3NzaXplX3QgaTsKQEAgLTgxNyw3ICs4NTYsNyBAQAogCiBQeU9iamVjdCAqUHlDb2RlY19CYWNrc2xhc2hSZXBsYWNlRXJyb3JzKFB5T2JqZWN0ICpleGMpCiB7Ci0gICAgaWYgKFB5T2JqZWN0X0lzSW5zdGFuY2UoZXhjLCBQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKSB7CisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhleGMsIChQeVR5cGVPYmplY3QgKilQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKSB7CiAgICAgICAgIFB5T2JqZWN0ICpyZXN0dXBsZTsKICAgICAgICAgUHlPYmplY3QgKm9iamVjdDsKICAgICAgICAgUHlfc3NpemVfdCBpOwpAQCAtODQ4LDggKzg4NywxMCBAQAogICAgICAgICAgICAgICAgIHJlc3NpemUgKz0gMSsxKzI7CiAgICAgICAgIH0KICAgICAgICAgcmVzID0gUHlVbmljb2RlX05ldyhyZXNzaXplLCAxMjcpOwotICAgICAgICBpZiAocmVzPT1OVUxMKQorICAgICAgICBpZiAocmVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgZm9yIChpID0gc3RhcnQsIG91dHAgPSBQeVVuaWNvZGVfMUJZVEVfREFUQShyZXMpOwogICAgICAgICAgICAgaSA8IGVuZDsgKytpKSB7CiAgICAgICAgICAgICBjID0gUHlVbmljb2RlX1JFQURfQ0hBUihvYmplY3QsIGkpOwpAQCAtODg1LDYgKzkyNiw2NSBAQAogICAgIH0KIH0KIAorI2RlZmluZSBFTkNfVVRGOCAgICAgICAgMAorI2RlZmluZSBFTkNfVVRGMTZCRSAgICAgMQorI2RlZmluZSBFTkNfVVRGMTZMRSAgICAgMgorI2RlZmluZSBFTkNfVVRGMzJCRSAgICAgMworI2RlZmluZSBFTkNfVVRGMzJMRSAgICAgNAorCitzdGF0aWMgaW50CitnZXRfc3RhbmRhcmRfZW5jb2RpbmcoY29uc3QgY2hhciAqZW5jb2RpbmcsIGludCAqYnl0ZWxlbmd0aCkKK3sKKyAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ3UnICYmCisgICAgICAgIFB5X1RPTE9XRVIoZW5jb2RpbmdbMV0pID09ICd0JyAmJgorICAgICAgICBQeV9UT0xPV0VSKGVuY29kaW5nWzJdKSA9PSAnZicpIHsKKyAgICAgICAgZW5jb2RpbmcgKz0gMzsKKyAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnLScgfHwgKmVuY29kaW5nID09ICdfJyApCisgICAgICAgICAgICBlbmNvZGluZysrOworICAgICAgICBpZiAoZW5jb2RpbmdbMF0gPT0gJzEnICYmIGVuY29kaW5nWzFdID09ICc2JykgeworICAgICAgICAgICAgZW5jb2RpbmcgKz0gMjsKKyAgICAgICAgICAgICpieXRlbGVuZ3RoID0gMjsKKyAgICAgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJ1wwJykgeworI2lmZGVmIFdPUkRTX0JJR0VORElBTgorICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZCRTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYxNkxFOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoKmVuY29kaW5nID09ICctJyB8fCAqZW5jb2RpbmcgPT0gJ18nICkKKyAgICAgICAgICAgICAgICBlbmNvZGluZysrOworICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMV0pID09ICdlJyAmJiBlbmNvZGluZ1syXSA9PSAnXDAnKSB7CisgICAgICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICdiJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYxNkJFOworICAgICAgICAgICAgICAgIGlmIChQeV9UT0xPV0VSKGVuY29kaW5nWzBdKSA9PSAnbCcpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTkNfVVRGMTZMRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChlbmNvZGluZ1swXSA9PSAnMycgJiYgZW5jb2RpbmdbMV0gPT0gJzInKSB7CisgICAgICAgICAgICBlbmNvZGluZyArPSAyOworICAgICAgICAgICAgKmJ5dGVsZW5ndGggPSA0OworICAgICAgICAgICAgaWYgKCplbmNvZGluZyA9PSAnXDAnKSB7CisjaWZkZWYgV09SRFNfQklHRU5ESUFOCisgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkJFOworI2Vsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjMyTEU7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgqZW5jb2RpbmcgPT0gJy0nIHx8ICplbmNvZGluZyA9PSAnXycgKQorICAgICAgICAgICAgICAgIGVuY29kaW5nKys7CisgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1sxXSkgPT0gJ2UnICYmIGVuY29kaW5nWzJdID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlfVE9MT1dFUihlbmNvZGluZ1swXSkgPT0gJ2InKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU5DX1VURjMyQkU7CisgICAgICAgICAgICAgICAgaWYgKFB5X1RPTE9XRVIoZW5jb2RpbmdbMF0pID09ICdsJykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVOQ19VVEYzMkxFOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIC8qIHV0Zi04ICovCisgICAgKmJ5dGVsZW5ndGggPSAzOworICAgIHJldHVybiBFTkNfVVRGODsKK30KKwogLyogVGhpcyBoYW5kbGVyIGlzIGRlY2xhcmVkIHN0YXRpYyB1bnRpbCBzb21lb25lIGRlbW9uc3RyYXRlcwogICAgYSBuZWVkIHRvIGNhbGwgaXQgZGlyZWN0bHkuICovCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtODkyLDc2ICs5OTIsMTQ5IEBACiB7CiAgICAgUHlPYmplY3QgKnJlc3R1cGxlOwogICAgIFB5T2JqZWN0ICpvYmplY3Q7CisgICAgUHlPYmplY3QgKmVuY29kZTsKKyAgICBjaGFyICplbmNvZGluZzsKKyAgICBpbnQgY29kZTsKKyAgICBpbnQgYnl0ZWxlbmd0aDsKICAgICBQeV9zc2l6ZV90IGk7CiAgICAgUHlfc3NpemVfdCBzdGFydDsKICAgICBQeV9zc2l6ZV90IGVuZDsKICAgICBQeU9iamVjdCAqcmVzOwotICAgIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgewotICAgICAgICBjaGFyICpvdXRwOworCisgICAgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhleGMsIChQeVR5cGVPYmplY3QgKilQeUV4Y19Vbmljb2RlRW5jb2RlRXJyb3IpKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHA7CiAgICAgICAgIGlmIChQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRTdGFydChleGMsICZzdGFydCkpCiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKFB5VW5pY29kZUVuY29kZUVycm9yX0dldEVuZChleGMsICZlbmQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmICghKG9iamVjdCA9IFB5VW5pY29kZUVuY29kZUVycm9yX0dldE9iamVjdChleGMpKSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIDMqKGVuZC1zdGFydCkpOworICAgICAgICBpZiAoIShlbmNvZGUgPSBQeVVuaWNvZGVFbmNvZGVFcnJvcl9HZXRFbmNvZGluZyhleGMpKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGluZyA9IFB5VW5pY29kZV9Bc1VURjgoZW5jb2RlKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBjb2RlID0gZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGVuY29kaW5nLCAmYnl0ZWxlbmd0aCk7CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworCisgICAgICAgIGlmIChlbmQgLSBzdGFydCA+IFBZX1NTSVpFX1RfTUFYIC8gYnl0ZWxlbmd0aCkKKyAgICAgICAgICAgIGVuZCA9IHN0YXJ0ICsgUFlfU1NJWkVfVF9NQVggLyBieXRlbGVuZ3RoOworICAgICAgICByZXMgPSBQeUJ5dGVzX0Zyb21TdHJpbmdBbmRTaXplKE5VTEwsIGJ5dGVsZW5ndGgqKGVuZC1zdGFydCkpOwogICAgICAgICBpZiAoIXJlcykgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQotICAgICAgICBvdXRwID0gUHlCeXRlc19Bc1N0cmluZyhyZXMpOworICAgICAgICBvdXRwID0gKHVuc2lnbmVkIGNoYXIqKVB5Qnl0ZXNfQXNTdHJpbmcocmVzKTsKICAgICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgICAgICAgLyogb2JqZWN0IGlzIGd1YXJhbnRlZWQgdG8gYmUgInJlYWR5IiAqLwogICAgICAgICAgICAgUHlfVUNTNCBjaCA9IFB5VW5pY29kZV9SRUFEX0NIQVIob2JqZWN0LCBpKTsKLSAgICAgICAgICAgIGlmIChjaCA8IDB4ZDgwMCB8fCBjaCA+IDB4ZGZmZikgeworICAgICAgICAgICAgaWYgKCFQeV9VTklDT0RFX0lTX1NVUlJPR0FURShjaCkpIHsKICAgICAgICAgICAgICAgICAvKiBOb3QgYSBzdXJyb2dhdGUsIGZhaWwgd2l0aCBvcmlnaW5hbCBleGNlcHRpb24gKi8KICAgICAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhleGMpLCBleGMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihyZXMpOwogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweGUwIHwgKGNoID4+IDEyKSk7Ci0gICAgICAgICAgICAqb3V0cCsrID0gKGNoYXIpKDB4ODAgfCAoKGNoID4+IDYpICYgMHgzZikpOwotICAgICAgICAgICAgKm91dHArKyA9IChjaGFyKSgweDgwIHwgKGNoICYgMHgzZikpOworICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEY4OgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHhlMCB8IChjaCA+PiAxMikpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoMHg4MCB8ICgoY2ggPj4gNikgJiAweDNmKSk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSgweDgwIHwgKGNoICYgMHgzZikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZMRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpIGNoOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYxNkJFOgorICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gOCk7CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjMyTEU6CisgICAgICAgICAgICAgICAgKm91dHArKyA9ICh1bnNpZ25lZCBjaGFyKSBjaDsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMTYpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikoY2ggPj4gMjQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJCRToKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDI0KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDE2KTsKKyAgICAgICAgICAgICAgICAqb3V0cCsrID0gKHVuc2lnbmVkIGNoYXIpKGNoID4+IDgpOworICAgICAgICAgICAgICAgICpvdXRwKysgPSAodW5zaWduZWQgY2hhcikgY2g7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmVzdHVwbGUgPSBQeV9CdWlsZFZhbHVlKCIoT24pIiwgcmVzLCBlbmQpOwogICAgICAgICBQeV9ERUNSRUYocmVzKTsKICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgIHJldHVybiByZXN0dXBsZTsKICAgICB9Ci0gICAgZWxzZSBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVEZWNvZGVFcnJvcikpIHsKKyAgICBlbHNlIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZURlY29kZUVycm9yKSkgewogICAgICAgICB1bnNpZ25lZCBjaGFyICpwOwogICAgICAgICBQeV9VQ1M0IGNoID0gMDsKICAgICAgICAgaWYgKFB5VW5pY29kZURlY29kZUVycm9yX0dldFN0YXJ0KGV4YywgJnN0YXJ0KSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBpZiAoUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0RW5kKGV4YywgJmVuZCkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgaWYgKCEob2JqZWN0ID0gUHlVbmljb2RlRGVjb2RlRXJyb3JfR2V0T2JqZWN0KGV4YykpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGlmICghKHAgPSAodW5zaWduZWQgY2hhciopUHlCeXRlc19Bc1N0cmluZyhvYmplY3QpKSkgewogICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGUgPSBQeVVuaWNvZGVEZWNvZGVFcnJvcl9HZXRFbmNvZGluZyhleGMpKSkgeworICAgICAgICAgICAgUHlfREVDUkVGKG9iamVjdCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShlbmNvZGluZyA9IFB5VW5pY29kZV9Bc1VURjgoZW5jb2RlKSkpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOworICAgICAgICAgICAgUHlfREVDUkVGKGVuY29kZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBjb2RlID0gZ2V0X3N0YW5kYXJkX2VuY29kaW5nKGVuY29kaW5nLCAmYnl0ZWxlbmd0aCk7CisgICAgICAgIFB5X0RFQ1JFRihlbmNvZGUpOworCiAgICAgICAgIC8qIFRyeSBkZWNvZGluZyBhIHNpbmdsZSBzdXJyb2dhdGUgY2hhcmFjdGVyLiBJZgogICAgICAgICAgICB0aGVyZSBhcmUgbW9yZSwgbGV0IHRoZSBjb2RlYyBjYWxsIHVzIGFnYWluLiAqLwogICAgICAgICBwICs9IHN0YXJ0OwotICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmplY3QpIC0gc3RhcnQgPj0gMyAmJgotICAgICAgICAgICAgKHBbMF0gJiAweGYwKSA9PSAweGUwICYmCi0gICAgICAgICAgICAocFsxXSAmIDB4YzApID09IDB4ODAgJiYKLSAgICAgICAgICAgIChwWzJdICYgMHhjMCkgPT0gMHg4MCkgewotICAgICAgICAgICAgLyogaXQncyBhIHRocmVlLWJ5dGUgY29kZSAqLwotICAgICAgICAgICAgY2ggPSAoKHBbMF0gJiAweDBmKSA8PCAxMikgKyAoKHBbMV0gJiAweDNmKSA8PCA2KSArIChwWzJdICYgMHgzZik7Ci0gICAgICAgICAgICBpZiAoY2ggPCAweGQ4MDAgfHwgY2ggPiAweGRmZmYpCi0gICAgICAgICAgICAgICAgLyogaXQncyBub3QgYSBzdXJyb2dhdGUgLSBmYWlsICovCi0gICAgICAgICAgICAgICAgY2ggPSAwOworICAgICAgICBpZiAoUHlCeXRlc19HRVRfU0laRShvYmplY3QpIC0gc3RhcnQgPj0gYnl0ZWxlbmd0aCkgeworICAgICAgICAgICAgc3dpdGNoIChjb2RlKSB7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEY4OgorICAgICAgICAgICAgICAgIGlmICgocFswXSAmIDB4ZjApID09IDB4ZTAgJiYKKyAgICAgICAgICAgICAgICAgICAgKHBbMV0gJiAweGMwKSA9PSAweDgwICYmCisgICAgICAgICAgICAgICAgICAgIChwWzJdICYgMHhjMCkgPT0gMHg4MCkgeworICAgICAgICAgICAgICAgICAgICAvKiBpdCdzIGEgdGhyZWUtYnl0ZSBjb2RlICovCisgICAgICAgICAgICAgICAgICAgIGNoID0gKChwWzBdICYgMHgwZikgPDwgMTIpICsgKChwWzFdICYgMHgzZikgPDwgNikgKyAocFsyXSAmIDB4M2YpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRU5DX1VURjE2TEU6CisgICAgICAgICAgICAgICAgY2ggPSBwWzFdIDw8IDggfCBwWzBdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMTZCRToKKyAgICAgICAgICAgICAgICBjaCA9IHBbMF0gPDwgOCB8IHBbMV07CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEVOQ19VVEYzMkxFOgorICAgICAgICAgICAgICAgIGNoID0gKHBbM10gPDwgMjQpIHwgKHBbMl0gPDwgMTYpIHwgKHBbMV0gPDwgOCkgfCBwWzBdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFTkNfVVRGMzJCRToKKyAgICAgICAgICAgICAgICBjaCA9IChwWzBdIDw8IDI0KSB8IChwWzFdIDw8IDE2KSB8IChwWzJdIDw8IDgpIHwgcFszXTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIFB5X0RFQ1JFRihvYmplY3QpOwotICAgICAgICBpZiAoY2ggPT0gMCkgeworICAgICAgICBpZiAoIVB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKGNoKSkgeworICAgICAgICAgICAgLyogaXQncyBub3QgYSBzdXJyb2dhdGUgLSBmYWlsICovCiAgICAgICAgICAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNlcHRpb25JbnN0YW5jZV9DbGFzcyhleGMpLCBleGMpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgcmVzID0gUHlVbmljb2RlX0Zyb21PcmRpbmFsKGNoKTsKICAgICAgICAgaWYgKHJlcyA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIHJldHVybiBQeV9CdWlsZFZhbHVlKCIoTm4pIiwgcmVzLCBzdGFydCszKTsKKyAgICAgICAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoIihObikiLCByZXMsIHN0YXJ0ICsgYnl0ZWxlbmd0aCk7CiAgICAgfQogICAgIGVsc2UgewogICAgICAgICB3cm9uZ19leGNlcHRpb25fdHlwZShleGMpOwpAQCAtOTc4LDcgKzExNTEsOCBAQAogICAgIFB5X3NzaXplX3Qgc3RhcnQ7CiAgICAgUHlfc3NpemVfdCBlbmQ7CiAgICAgUHlPYmplY3QgKnJlczsKLSAgICBpZiAoUHlPYmplY3RfSXNJbnN0YW5jZShleGMsIFB5RXhjX1VuaWNvZGVFbmNvZGVFcnJvcikpIHsKKworICAgIGlmIChQeU9iamVjdF9UeXBlQ2hlY2soZXhjLCAoUHlUeXBlT2JqZWN0ICopUHlFeGNfVW5pY29kZUVuY29kZUVycm9yKSkgewogICAgICAgICBjaGFyICpvdXRwOwogICAgICAgICBpZiAoUHlVbmljb2RlRW5jb2RlRXJyb3JfR2V0U3RhcnQoZXhjLCAmc3RhcnQpKQogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xMDA5LDcgKzExODMsNyBAQAogICAgICAgICBQeV9ERUNSRUYob2JqZWN0KTsKICAgICAgICAgcmV0dXJuIHJlc3R1cGxlOwogICAgIH0KLSAgICBlbHNlIGlmIChQeU9iamVjdF9Jc0luc3RhbmNlKGV4YywgUHlFeGNfVW5pY29kZURlY29kZUVycm9yKSkgeworICAgIGVsc2UgaWYgKFB5T2JqZWN0X1R5cGVDaGVjayhleGMsIChQeVR5cGVPYmplY3QgKilQeUV4Y19Vbmljb2RlRGVjb2RlRXJyb3IpKSB7CiAgICAgICAgIFB5T2JqZWN0ICpzdHI7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnA7CiAgICAgICAgIFB5X1VDUzIgY2hbNF07IC8qIGRlY29kZSB1cCB0byA0IGJhZCBieXRlcy4gKi8KQEAgLTExNzgsNyArMTM1Miw3IEBACiAKICAgICBpZiAoaW50ZXJwLT5jb2RlY19lcnJvcl9yZWdpc3RyeSkgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgUHlfQVJSQVlfTEVOR1RIKG1ldGhvZHMpOyArK2kpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpmdW5jID0gUHlDRnVuY3Rpb25fTmV3KCZtZXRob2RzW2ldLmRlZiwgTlVMTCk7CisgICAgICAgICAgICBQeU9iamVjdCAqZnVuYyA9IFB5Q0Z1bmN0aW9uX05ld0V4KCZtZXRob2RzW2ldLmRlZiwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICBpbnQgcmVzOwogICAgICAgICAgICAgaWYgKCFmdW5jKQogICAgICAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGluaXRpYWxpemUgY29kZWMgZXJyb3IgcmVnaXN0cnkiKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9jb21waWxlLmMgYi9QeXRob24vY29tcGlsZS5jCmluZGV4IDZkNjYyNTUuLmZmNjI0ODcgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9jb21waWxlLmMKKysrIGIvUHl0aG9uL2NvbXBpbGUuYwpAQCAtOTQsNiArOTQsNyBAQAogICAgIENPTVBJTEVSX1NDT1BFX01PRFVMRSwKICAgICBDT01QSUxFUl9TQ09QRV9DTEFTUywKICAgICBDT01QSUxFUl9TQ09QRV9GVU5DVElPTiwKKyAgICBDT01QSUxFUl9TQ09QRV9MQU1CREEsCiAgICAgQ09NUElMRVJfU0NPUEVfQ09NUFJFSEVOU0lPTiwKIH07CiAKQEAgLTExOSw4ICsxMjAsOCBAQAogCiAgICAgUHlPYmplY3QgKnVfcHJpdmF0ZTsgICAgICAgIC8qIGZvciBwcml2YXRlIG5hbWUgbWFuZ2xpbmcgKi8KIAotICAgIGludCB1X2FyZ2NvdW50OyAgICAgICAgLyogbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KLSAgICBpbnQgdV9rd29ubHlhcmdjb3VudDsgLyogbnVtYmVyIG9mIGtleXdvcmQgb25seSBhcmd1bWVudHMgZm9yIGJsb2NrICovCisgICAgUHlfc3NpemVfdCB1X2FyZ2NvdW50OyAgICAgICAgLyogbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYmxvY2sgKi8KKyAgICBQeV9zc2l6ZV90IHVfa3dvbmx5YXJnY291bnQ7IC8qIG51bWJlciBvZiBrZXl3b3JkIG9ubHkgYXJndW1lbnRzIGZvciBibG9jayAqLwogICAgIC8qIFBvaW50ZXIgdG8gdGhlIG1vc3QgcmVjZW50bHkgYWxsb2NhdGVkIGJsb2NrLiAgQnkgZm9sbG93aW5nIGJfbGlzdAogICAgICAgIG1lbWJlcnMsIHlvdSBjYW4gcmVhY2ggYWxsIGVhcmx5IGFsbG9jYXRlZCBibG9ja3MuICovCiAgICAgYmFzaWNibG9jayAqdV9ibG9ja3M7CkBAIC0xNDksOCArMTUwLDcgQEAKICovCiAKIHN0cnVjdCBjb21waWxlciB7Ci0gICAgY29uc3QgY2hhciAqY19maWxlbmFtZTsKLSAgICBQeU9iamVjdCAqY19maWxlbmFtZV9vYmo7CisgICAgUHlPYmplY3QgKmNfZmlsZW5hbWU7CiAgICAgc3RydWN0IHN5bXRhYmxlICpjX3N0OwogICAgIFB5RnV0dXJlRmVhdHVyZXMgKmNfZnV0dXJlOyAvKiBwb2ludGVyIHRvIG1vZHVsZSdzIF9fZnV0dXJlX18gKi8KICAgICBQeUNvbXBpbGVyRmxhZ3MgKmNfZmxhZ3M7CkBAIC0xNzAsNyArMTcwLDcgQEAKIHN0YXRpYyBpbnQgY29tcGlsZXJfbmV4dF9pbnN0cihzdHJ1Y3QgY29tcGlsZXIgKiwgYmFzaWNibG9jayAqKTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3Aoc3RydWN0IGNvbXBpbGVyICosIGludCk7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wX28oc3RydWN0IGNvbXBpbGVyICosIGludCwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7Ci1zdGF0aWMgaW50IGNvbXBpbGVyX2FkZG9wX2koc3RydWN0IGNvbXBpbGVyICosIGludCwgaW50KTsKK3N0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBQeV9zc2l6ZV90KTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfYWRkb3BfaihzdHJ1Y3QgY29tcGlsZXIgKiwgaW50LCBiYXNpY2Jsb2NrICosIGludCk7CiBzdGF0aWMgYmFzaWNibG9jayAqY29tcGlsZXJfdXNlX25ld19ibG9jayhzdHJ1Y3QgY29tcGlsZXIgKik7CiBzdGF0aWMgaW50IGNvbXBpbGVyX2Vycm9yKHN0cnVjdCBjb21waWxlciAqLCBjb25zdCBjaGFyICopOwpAQCAtMTk1LDE3ICsxOTUsMTggQEAKIHN0YXRpYyBpbnQgZXhwcl9jb25zdGFudChzdHJ1Y3QgY29tcGlsZXIgKiwgZXhwcl90eSk7CiAKIHN0YXRpYyBpbnQgY29tcGlsZXJfd2l0aChzdHJ1Y3QgY29tcGlsZXIgKiwgc3RtdF90eSwgaW50KTsKLXN0YXRpYyBpbnQgY29tcGlsZXJfY2FsbF9oZWxwZXIoc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgbiwKK3N0YXRpYyBpbnQgY29tcGlsZXJfY2FsbF9oZWxwZXIoc3RydWN0IGNvbXBpbGVyICpjLCBQeV9zc2l6ZV90IG4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICphcmdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqa2V5d29yZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgc3RhcmFyZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkga3dhcmdzKTsKIHN0YXRpYyBpbnQgY29tcGlsZXJfdHJ5X2V4Y2VwdChzdHJ1Y3QgY29tcGlsZXIgKiwgc3RtdF90eSk7CitzdGF0aWMgaW50IGNvbXBpbGVyX3NldF9xdWFsbmFtZShzdHJ1Y3QgY29tcGlsZXIgKik7CiAKIHN0YXRpYyBQeUNvZGVPYmplY3QgKmFzc2VtYmxlKHN0cnVjdCBjb21waWxlciAqLCBpbnQgYWRkTm9uZSk7CiBzdGF0aWMgUHlPYmplY3QgKl9fZG9jX187CiAKLSNkZWZpbmUgQ09NUElMRVJfQ0FQU1VMRV9OQU1FX0NPTVBJTEVSX1VOSVQgImNvbXBpbGUuYyBjb21waWxlciB1bml0IgorI2RlZmluZSBDQVBTVUxFX05BTUUgImNvbXBpbGUuYyBjb21waWxlciB1bml0IgogCiBQeU9iamVjdCAqCiBfUHlfTWFuZ2xlKFB5T2JqZWN0ICpwcml2YXRlb2JqLCBQeU9iamVjdCAqaWRlbnQpCkBAIC0yODgsOCArMjg5LDggQEAKIH0KIAogUHlDb2RlT2JqZWN0ICoKLVB5QVNUX0NvbXBpbGVFeChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncywKLSAgICAgICAgICAgICAgICBpbnQgb3B0aW1pemUsIFB5QXJlbmEgKmFyZW5hKQorUHlBU1RfQ29tcGlsZU9iamVjdChtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgaW50IG9wdGltaXplLCBQeUFyZW5hICphcmVuYSkKIHsKICAgICBzdHJ1Y3QgY29tcGlsZXIgYzsKICAgICBQeUNvZGVPYmplY3QgKmNvID0gTlVMTDsKQEAgLTMwNCwxMiArMzA1LDEwIEBACiAKICAgICBpZiAoIWNvbXBpbGVyX2luaXQoJmMpKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOwogICAgIGMuY19maWxlbmFtZSA9IGZpbGVuYW1lOwotICAgIGMuY19maWxlbmFtZV9vYmogPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lKTsKLSAgICBpZiAoIWMuY19maWxlbmFtZV9vYmopCi0gICAgICAgIGdvdG8gZmluYWxseTsKICAgICBjLmNfYXJlbmEgPSBhcmVuYTsKLSAgICBjLmNfZnV0dXJlID0gUHlGdXR1cmVfRnJvbUFTVChtb2QsIGZpbGVuYW1lKTsKKyAgICBjLmNfZnV0dXJlID0gUHlGdXR1cmVfRnJvbUFTVE9iamVjdChtb2QsIGZpbGVuYW1lKTsKICAgICBpZiAoYy5jX2Z1dHVyZSA9PSBOVUxMKQogICAgICAgICBnb3RvIGZpbmFsbHk7CiAgICAgaWYgKCFmbGFncykgewpAQCAtMzIzLDcgKzMyMiw3IEBACiAgICAgYy5jX29wdGltaXplID0gKG9wdGltaXplID09IC0xKSA/IFB5X09wdGltaXplRmxhZyA6IG9wdGltaXplOwogICAgIGMuY19uZXN0bGV2ZWwgPSAwOwogCi0gICAgYy5jX3N0ID0gUHlTeW10YWJsZV9CdWlsZChtb2QsIGZpbGVuYW1lLCBjLmNfZnV0dXJlKTsKKyAgICBjLmNfc3QgPSBQeVN5bXRhYmxlX0J1aWxkT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGMuY19mdXR1cmUpOwogICAgIGlmIChjLmNfc3QgPT0gTlVMTCkgewogICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3lzdGVtRXJyb3IsICJubyBzeW10YWJsZSIpOwpAQCAtMzM5LDYgKzMzOCwyMSBAQAogfQogCiBQeUNvZGVPYmplY3QgKgorUHlBU1RfQ29tcGlsZUV4KG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgUHlDb21waWxlckZsYWdzICpmbGFncywKKyAgICAgICAgICAgICAgICBpbnQgb3B0aW1pemUsIFB5QXJlbmEgKmFyZW5hKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBQeUNvZGVPYmplY3QgKmNvOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBjbyA9IFB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIG9wdGltaXplLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gY287CisKK30KKworUHlDb2RlT2JqZWN0ICoKIFB5Tm9kZV9Db21waWxlKHN0cnVjdCBfbm9kZSAqbiwgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAgICAgUHlDb2RlT2JqZWN0ICpjbyA9IE5VTEw7CkBAIC0zNjAsOCArMzc0LDcgQEAKICAgICAgICAgUHlTeW10YWJsZV9GcmVlKGMtPmNfc3QpOwogICAgIGlmIChjLT5jX2Z1dHVyZSkKICAgICAgICAgUHlPYmplY3RfRnJlZShjLT5jX2Z1dHVyZSk7Ci0gICAgaWYgKGMtPmNfZmlsZW5hbWVfb2JqKQotICAgICAgICBQeV9ERUNSRUYoYy0+Y19maWxlbmFtZV9vYmopOworICAgIFB5X1hERUNSRUYoYy0+Y19maWxlbmFtZSk7CiAgICAgUHlfREVDUkVGKGMtPmNfc3RhY2spOwogfQogCkBAIC0zNzUsNyArMzg4LDcgQEAKIAogICAgIG4gPSBQeUxpc3RfU2l6ZShsaXN0KTsKICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0gICAgICAgIHYgPSBQeUxvbmdfRnJvbUxvbmcoaSk7CisgICAgICAgIHYgPSBQeUxvbmdfRnJvbVNzaXplX3QoaSk7CiAgICAgICAgIGlmICghdikgewogICAgICAgICAgICAgUHlfREVDUkVGKGRpY3QpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC00MDMsNyArNDE2LDcgQEAKICovCiAKIHN0YXRpYyBQeU9iamVjdCAqCi1kaWN0Ynl0eXBlKFB5T2JqZWN0ICpzcmMsIGludCBzY29wZV90eXBlLCBpbnQgZmxhZywgaW50IG9mZnNldCkKK2RpY3RieXR5cGUoUHlPYmplY3QgKnNyYywgaW50IHNjb3BlX3R5cGUsIGludCBmbGFnLCBQeV9zc2l6ZV90IG9mZnNldCkKIHsKICAgICBQeV9zc2l6ZV90IGkgPSBvZmZzZXQsIHNjb3BlLCBudW1fa2V5cywga2V5X2k7CiAgICAgUHlPYmplY3QgKmssICp2LCAqZGVzdCA9IFB5RGljdF9OZXcoKTsKQEAgLTQzNyw3ICs0NTAsNyBAQAogICAgICAgICBzY29wZSA9ICh2aSA+PiBTQ09QRV9PRkZTRVQpICYgU0NPUEVfTUFTSzsKIAogICAgICAgICBpZiAoc2NvcGUgPT0gc2NvcGVfdHlwZSB8fCB2aSAmIGZsYWcpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICp0dXBsZSwgKml0ZW0gPSBQeUxvbmdfRnJvbUxvbmcoaSk7CisgICAgICAgICAgICBQeU9iamVjdCAqdHVwbGUsICppdGVtID0gUHlMb25nX0Zyb21Tc2l6ZV90KGkpOwogICAgICAgICAgICAgaWYgKGl0ZW0gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihzb3J0ZWRfa2V5cyk7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGRlc3QpOwpAQCAtNTM1LDYgKzU0OCwzNyBAQAogICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAodS0+dV9zdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlKSB7CisgICAgICAgIC8qIENvb2sgdXAgYW4gaW1wbGljaXQgX19jbGFzc19fIGNlbGwuICovCisgICAgICAgIF9QeV9JREVOVElGSUVSKF9fY2xhc3NfXyk7CisgICAgICAgIFB5T2JqZWN0ICp0dXBsZSwgKm5hbWUsICp6ZXJvOworICAgICAgICBpbnQgcmVzOworICAgICAgICBhc3NlcnQodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0NMQVNTKTsKKyAgICAgICAgYXNzZXJ0KFB5RGljdF9TaXplKHUtPnVfY2VsbHZhcnMpID09IDApOworICAgICAgICBuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfX19jbGFzc19fKTsKKyAgICAgICAgaWYgKCFuYW1lKSB7CisgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB0dXBsZSA9IFB5VHVwbGVfUGFjaygyLCBuYW1lLCBQeV9UWVBFKG5hbWUpKTsKKyAgICAgICAgaWYgKCF0dXBsZSkgeworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgemVybyA9IFB5TG9uZ19Gcm9tTG9uZygwKTsKKyAgICAgICAgaWYgKCF6ZXJvKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYodHVwbGUpOworICAgICAgICAgICAgY29tcGlsZXJfdW5pdF9mcmVlKHUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW0odS0+dV9jZWxsdmFycywgdHVwbGUsIHplcm8pOworICAgICAgICBQeV9ERUNSRUYodHVwbGUpOworICAgICAgICBQeV9ERUNSRUYoemVybyk7CisgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICBjb21waWxlcl91bml0X2ZyZWUodSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KIAogICAgIHUtPnVfZnJlZXZhcnMgPSBkaWN0Ynl0eXBlKHUtPnVfc3RlLT5zdGVfc3ltYm9scywgRlJFRSwgREVGX0ZSRUVfQ0xBU1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlEaWN0X1NpemUodS0+dV9jZWxsdmFycykpOwpAQCAtNTY0LDcgKzYwOCw3IEBACiAKICAgICAvKiBQdXNoIHRoZSBvbGQgY29tcGlsZXJfdW5pdCBvbiB0aGUgc3RhY2suICovCiAgICAgaWYgKGMtPnUpIHsKLSAgICAgICAgUHlPYmplY3QgKmNhcHN1bGUgPSBQeUNhcHN1bGVfTmV3KGMtPnUsIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklULCBOVUxMKTsKKyAgICAgICAgUHlPYmplY3QgKmNhcHN1bGUgPSBQeUNhcHN1bGVfTmV3KGMtPnUsIENBUFNVTEVfTkFNRSwgTlVMTCk7CiAgICAgICAgIGlmICghY2Fwc3VsZSB8fCBQeUxpc3RfQXBwZW5kKGMtPmNfc3RhY2ssIGNhcHN1bGUpIDwgMCkgewogICAgICAgICAgICAgUHlfWERFQ1JFRihjYXBzdWxlKTsKICAgICAgICAgICAgIGNvbXBpbGVyX3VuaXRfZnJlZSh1KTsKQEAgLTU4MCwxMyArNjI0LDE4IEBACiAgICAgaWYgKGNvbXBpbGVyX3VzZV9uZXdfYmxvY2soYykgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIDA7CiAKKyAgICBpZiAodS0+dV9zY29wZV90eXBlICE9IENPTVBJTEVSX1NDT1BFX01PRFVMRSkgeworICAgICAgICBpZiAoIWNvbXBpbGVyX3NldF9xdWFsbmFtZShjKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgdm9pZAogY29tcGlsZXJfZXhpdF9zY29wZShzdHJ1Y3QgY29tcGlsZXIgKmMpCiB7Ci0gICAgaW50IG47CisgICAgUHlfc3NpemVfdCBuOwogICAgIFB5T2JqZWN0ICpjYXBzdWxlOwogCiAgICAgYy0+Y19uZXN0bGV2ZWwtLTsKQEAgLTU5NSw3ICs2NDQsNyBAQAogICAgIG4gPSBQeUxpc3RfR0VUX1NJWkUoYy0+Y19zdGFjaykgLSAxOwogICAgIGlmIChuID49IDApIHsKICAgICAgICAgY2Fwc3VsZSA9IFB5TGlzdF9HRVRfSVRFTShjLT5jX3N0YWNrLCBuKTsKLSAgICAgICAgYy0+dSA9IChzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsIENPTVBJTEVSX0NBUFNVTEVfTkFNRV9DT01QSUxFUl9VTklUKTsKKyAgICAgICAgYy0+dSA9IChzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsIENBUFNVTEVfTkFNRSk7CiAgICAgICAgIGFzc2VydChjLT51KTsKICAgICAgICAgLyogd2UgYXJlIGRlbGV0aW5nIGZyb20gYSBsaXN0IHNvIHRoaXMgcmVhbGx5IHNob3VsZG4ndCBmYWlsICovCiAgICAgICAgIGlmIChQeVNlcXVlbmNlX0RlbEl0ZW0oYy0+Y19zdGFjaywgbikgPCAwKQpAQCAtNjA3LDU3ICs2NTYsNzcgQEAKIAogfQogCi1zdGF0aWMgUHlPYmplY3QgKgotY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoc3RydWN0IGNvbXBpbGVyICpjKQorc3RhdGljIGludAorY29tcGlsZXJfc2V0X3F1YWxuYW1lKHN0cnVjdCBjb21waWxlciAqYykKIHsKLSAgICBQeV9zc2l6ZV90IHN0YWNrX3NpemUsIGk7CiAgICAgX1B5X3N0YXRpY19zdHJpbmcoZG90LCAiLiIpOwotICAgIF9QeV9zdGF0aWNfc3RyaW5nKGxvY2FscywgIjxsb2NhbHM+Iik7Ci0gICAgc3RydWN0IGNvbXBpbGVyX3VuaXQgKnU7Ci0gICAgUHlPYmplY3QgKmNhcHN1bGUsICpuYW1lLCAqc2VxLCAqZG90X3N0ciwgKmxvY2Fsc19zdHI7CisgICAgX1B5X3N0YXRpY19zdHJpbmcoZG90X2xvY2FscywgIi48bG9jYWxzPiIpOworICAgIFB5X3NzaXplX3Qgc3RhY2tfc2l6ZTsKKyAgICBzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqdSA9IGMtPnU7CisgICAgUHlPYmplY3QgKm5hbWUsICpiYXNlLCAqZG90X3N0ciwgKmRvdF9sb2NhbHNfc3RyOwogCi0gICAgdSA9IGMtPnU7Ci0gICAgaWYgKHUtPnVfcXVhbG5hbWUgIT0gTlVMTCkgewotICAgICAgICBQeV9JTkNSRUYodS0+dV9xdWFsbmFtZSk7Ci0gICAgICAgIHJldHVybiB1LT51X3F1YWxuYW1lOwotICAgIH0KLQotICAgIHNlcSA9IFB5TGlzdF9OZXcoMCk7Ci0gICAgaWYgKHNlcSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKLQorICAgIGJhc2UgPSBOVUxMOwogICAgIHN0YWNrX3NpemUgPSBQeUxpc3RfR0VUX1NJWkUoYy0+Y19zdGFjayk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHN0YWNrX3NpemU7IGkrKykgewotICAgICAgICBjYXBzdWxlID0gUHlMaXN0X0dFVF9JVEVNKGMtPmNfc3RhY2ssIGkpOwotICAgICAgICB1ID0gKHN0cnVjdCBjb21waWxlcl91bml0ICopUHlDYXBzdWxlX0dldFBvaW50ZXIoY2Fwc3VsZSwgQ09NUElMRVJfQ0FQU1VMRV9OQU1FX0NPTVBJTEVSX1VOSVQpOwotICAgICAgICBhc3NlcnQodSk7Ci0gICAgICAgIGlmICh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfTU9EVUxFKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHNlcSwgdS0+dV9uYW1lKSkKLSAgICAgICAgICAgIGdvdG8gX2Vycm9yOwotICAgICAgICBpZiAodS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OKSB7Ci0gICAgICAgICAgICBsb2NhbHNfc3RyID0gX1B5VW5pY29kZV9Gcm9tSWQoJmxvY2Fscyk7Ci0gICAgICAgICAgICBpZiAobG9jYWxzX3N0ciA9PSBOVUxMKQotICAgICAgICAgICAgICAgIGdvdG8gX2Vycm9yOwotICAgICAgICAgICAgaWYgKFB5TGlzdF9BcHBlbmQoc2VxLCBsb2NhbHNfc3RyKSkKLSAgICAgICAgICAgICAgICBnb3RvIF9lcnJvcjsKKyAgICBhc3NlcnQoc3RhY2tfc2l6ZSA+PSAxKTsKKyAgICBpZiAoc3RhY2tfc2l6ZSA+IDEpIHsKKyAgICAgICAgaW50IHNjb3BlLCBmb3JjZV9nbG9iYWwgPSAwOworICAgICAgICBzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqcGFyZW50OworICAgICAgICBQeU9iamVjdCAqbWFuZ2xlZCwgKmNhcHN1bGU7CisKKyAgICAgICAgY2Fwc3VsZSA9IFB5TGlzdF9HRVRfSVRFTShjLT5jX3N0YWNrLCBzdGFja19zaXplIC0gMSk7CisgICAgICAgIHBhcmVudCA9IChzdHJ1Y3QgY29tcGlsZXJfdW5pdCAqKVB5Q2Fwc3VsZV9HZXRQb2ludGVyKGNhcHN1bGUsIENBUFNVTEVfTkFNRSk7CisgICAgICAgIGFzc2VydChwYXJlbnQpOworCisgICAgICAgIGlmICh1LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfRlVOQ1RJT04gfHwgdS0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0NMQVNTKSB7CisgICAgICAgICAgICBhc3NlcnQodS0+dV9uYW1lKTsKKyAgICAgICAgICAgIG1hbmdsZWQgPSBfUHlfTWFuZ2xlKHBhcmVudC0+dV9wcml2YXRlLCB1LT51X25hbWUpOworICAgICAgICAgICAgaWYgKCFtYW5nbGVkKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKHBhcmVudC0+dV9zdGUsIG1hbmdsZWQpOworICAgICAgICAgICAgUHlfREVDUkVGKG1hbmdsZWQpOworICAgICAgICAgICAgYXNzZXJ0KHNjb3BlICE9IEdMT0JBTF9JTVBMSUNJVCk7CisgICAgICAgICAgICBpZiAoc2NvcGUgPT0gR0xPQkFMX0VYUExJQ0lUKQorICAgICAgICAgICAgICAgIGZvcmNlX2dsb2JhbCA9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWZvcmNlX2dsb2JhbCkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+dV9zY29wZV90eXBlID09IENPTVBJTEVSX1NDT1BFX0ZVTkNUSU9OCisgICAgICAgICAgICAgICAgfHwgcGFyZW50LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfTEFNQkRBKSB7CisgICAgICAgICAgICAgICAgZG90X2xvY2Fsc19zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90X2xvY2Fscyk7CisgICAgICAgICAgICAgICAgaWYgKGRvdF9sb2NhbHNfc3RyID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGJhc2UgPSBQeVVuaWNvZGVfQ29uY2F0KHBhcmVudC0+dV9xdWFsbmFtZSwgZG90X2xvY2Fsc19zdHIpOworICAgICAgICAgICAgICAgIGlmIChiYXNlID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgUHlfSU5DUkVGKHBhcmVudC0+dV9xdWFsbmFtZSk7CisgICAgICAgICAgICAgICAgYmFzZSA9IHBhcmVudC0+dV9xdWFsbmFtZTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICB1ID0gYy0+dTsKLSAgICBpZiAoUHlMaXN0X0FwcGVuZChzZXEsIHUtPnVfbmFtZSkpCi0gICAgICAgIGdvdG8gX2Vycm9yOwotICAgIGRvdF9zdHIgPSBfUHlVbmljb2RlX0Zyb21JZCgmZG90KTsKLSAgICBpZiAoZG90X3N0ciA9PSBOVUxMKQotICAgICAgICBnb3RvIF9lcnJvcjsKLSAgICBuYW1lID0gUHlVbmljb2RlX0pvaW4oZG90X3N0ciwgc2VxKTsKLSAgICBQeV9ERUNSRUYoc2VxKTsKLSAgICB1LT51X3F1YWxuYW1lID0gbmFtZTsKLSAgICBQeV9YSU5DUkVGKG5hbWUpOwotICAgIHJldHVybiBuYW1lOwogCi1fZXJyb3I6Ci0gICAgUHlfWERFQ1JFRihzZXEpOwotICAgIHJldHVybiBOVUxMOworICAgIGlmIChiYXNlICE9IE5VTEwpIHsKKyAgICAgICAgZG90X3N0ciA9IF9QeVVuaWNvZGVfRnJvbUlkKCZkb3QpOworICAgICAgICBpZiAoZG90X3N0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoYmFzZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBuYW1lID0gUHlVbmljb2RlX0NvbmNhdChiYXNlLCBkb3Rfc3RyKTsKKyAgICAgICAgUHlfREVDUkVGKGJhc2UpOworICAgICAgICBpZiAobmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFB5VW5pY29kZV9BcHBlbmQoJm5hbWUsIHUtPnVfbmFtZSk7CisgICAgICAgIGlmIChuYW1lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIFB5X0lOQ1JFRih1LT51X25hbWUpOworICAgICAgICBuYW1lID0gdS0+dV9uYW1lOworICAgIH0KKyAgICB1LT51X3F1YWxuYW1lID0gbmFtZTsKKworICAgIHJldHVybiAxOwogfQogCiAvKiBBbGxvY2F0ZSBhIG5ldyBibG9jayBhbmQgcmV0dXJuIGEgcG9pbnRlciB0byBpdC4KQEAgLTc4NCw4ICs4NTMsOCBAQAogICAgIGItPmJfaW5zdHJbb2ZmXS5pX2xpbmVubyA9IGMtPnUtPnVfbGluZW5vOwogfQogCi1zdGF0aWMgaW50Ci1vcGNvZGVfc3RhY2tfZWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZykKK2ludAorUHlDb21waWxlX09wY29kZVN0YWNrRWZmZWN0KGludCBvcGNvZGUsIGludCBvcGFyZykKIHsKICAgICBzd2l0Y2ggKG9wY29kZSkgewogICAgICAgICBjYXNlIFBPUF9UT1A6CkBAIC04NjIsOCArOTMxLDYgQEAKICAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICBjYXNlIFdJVEhfQ0xFQU5VUDoKICAgICAgICAgICAgIHJldHVybiAtMTsgLyogWFhYIFNvbWV0aW1lcyBtb3JlICovCi0gICAgICAgIGNhc2UgU1RPUkVfTE9DQUxTOgotICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBjYXNlIFJFVFVSTl9WQUxVRToKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgY2FzZSBJTVBPUlRfU1RBUjoKQEAgLTk3MCwxNyArMTAzNywxNiBAQAogICAgICAgICBjYXNlIExPQURfQ0xPU1VSRToKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICBjYXNlIExPQURfREVSRUY6CisgICAgICAgIGNhc2UgTE9BRF9DTEFTU0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIGNhc2UgU1RPUkVfREVSRUY6CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGNhc2UgREVMRVRFX0RFUkVGOgogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9wY29kZSA9ICVkXG4iLCBvcGNvZGUpOwotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigib3Bjb2RlX3N0YWNrX2VmZmVjdCgpIik7Ci0KKyAgICAgICAgICAgIHJldHVybiBQWV9JTlZBTElEX1NUQUNLX0VGRkVDVDsKICAgICB9Ci0gICAgcmV0dXJuIDA7IC8qIG5vdCByZWFjaGFibGUgKi8KKyAgICByZXR1cm4gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1Q7IC8qIG5vdCByZWFjaGFibGUgKi8KIH0KIAogLyogQWRkIGFuIG9wY29kZSB3aXRoIG5vIGFyZ3VtZW50LgpAQCAtMTAwNiw3ICsxMDcyLDcgQEAKICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAorc3RhdGljIFB5X3NzaXplX3QKIGNvbXBpbGVyX2FkZF9vKHN0cnVjdCBjb21waWxlciAqYywgUHlPYmplY3QgKmRpY3QsIFB5T2JqZWN0ICpvKQogewogICAgIFB5T2JqZWN0ICp0LCAqdjsKQEAgLTEwNjAsNyArMTEyNiw3IEBACiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICBhcmcgPSBQeURpY3RfU2l6ZShkaWN0KTsKLSAgICAgICAgdiA9IFB5TG9uZ19Gcm9tTG9uZyhhcmcpOworICAgICAgICB2ID0gUHlMb25nX0Zyb21Tc2l6ZV90KGFyZyk7CiAgICAgICAgIGlmICghdikgewogICAgICAgICAgICAgUHlfREVDUkVGKHQpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTA4Miw3ICsxMTQ4LDcgQEAKIGNvbXBpbGVyX2FkZG9wX28oc3RydWN0IGNvbXBpbGVyICpjLCBpbnQgb3Bjb2RlLCBQeU9iamVjdCAqZGljdCwKICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpvKQogewotICAgIGludCBhcmcgPSBjb21waWxlcl9hZGRfbyhjLCBkaWN0LCBvKTsKKyAgICBQeV9zc2l6ZV90IGFyZyA9IGNvbXBpbGVyX2FkZF9vKGMsIGRpY3QsIG8pOwogICAgIGlmIChhcmcgPCAwKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gY29tcGlsZXJfYWRkb3BfaShjLCBvcGNvZGUsIGFyZyk7CkBAIC0xMDkyLDcgKzExNTgsNyBAQAogY29tcGlsZXJfYWRkb3BfbmFtZShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIFB5T2JqZWN0ICpkaWN0LAogICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbykKIHsKLSAgICBpbnQgYXJnOworICAgIFB5X3NzaXplX3QgYXJnOwogICAgIFB5T2JqZWN0ICptYW5nbGVkID0gX1B5X01hbmdsZShjLT51LT51X3ByaXZhdGUsIG8pOwogICAgIGlmICghbWFuZ2xlZCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xMTA4LDE2ICsxMTc0LDIyIEBACiAqLwogCiBzdGF0aWMgaW50Ci1jb21waWxlcl9hZGRvcF9pKHN0cnVjdCBjb21waWxlciAqYywgaW50IG9wY29kZSwgaW50IG9wYXJnKQorY29tcGlsZXJfYWRkb3BfaShzdHJ1Y3QgY29tcGlsZXIgKmMsIGludCBvcGNvZGUsIFB5X3NzaXplX3Qgb3BhcmcpCiB7CiAgICAgc3RydWN0IGluc3RyICppOwogICAgIGludCBvZmY7CisKKyAgICAvKiBJbnRlZ2VyIGFyZ3VtZW50cyBhcmUgbGltaXQgdG8gMTYtYml0LiBUaGVyZSBpcyBhbiBleHRlbnNpb24gZm9yIDMyLWJpdAorICAgICAgIGludGVnZXIgYXJndW1lbnRzLiAqLworICAgIGFzc2VydCgoLTIxNDc0ODM2NDctMSkgPD0gb3BhcmcpOworICAgIGFzc2VydChvcGFyZyA8PSAyMTQ3NDgzNjQ3KTsKKwogICAgIG9mZiA9IGNvbXBpbGVyX25leHRfaW5zdHIoYywgYy0+dS0+dV9jdXJibG9jayk7CiAgICAgaWYgKG9mZiA8IDApCiAgICAgICAgIHJldHVybiAwOwogICAgIGkgPSAmYy0+dS0+dV9jdXJibG9jay0+Yl9pbnN0cltvZmZdOwogICAgIGktPmlfb3Bjb2RlID0gb3Bjb2RlOwotICAgIGktPmlfb3BhcmcgPSBvcGFyZzsKKyAgICBpLT5pX29wYXJnID0gUHlfU0FGRV9ET1dOQ0FTVChvcGFyZywgUHlfc3NpemVfdCwgaW50KTsKICAgICBpLT5pX2hhc2FyZyA9IDE7CiAgICAgY29tcGlsZXJfc2V0X2xpbmVubyhjLCBvZmYpOwogICAgIHJldHVybiAxOwpAQCAtMTMzMCwxOSArMTQwMiwyMiBAQAogc3RhdGljIGludAogZ2V0X3JlZl90eXBlKHN0cnVjdCBjb21waWxlciAqYywgUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgaW50IHNjb3BlID0gUHlTVF9HZXRTY29wZShjLT51LT51X3N0ZSwgbmFtZSk7CisgICAgaW50IHNjb3BlOworICAgIGlmIChjLT51LT51X3Njb3BlX3R5cGUgPT0gQ09NUElMRVJfU0NPUEVfQ0xBU1MgJiYKKyAgICAgICAgIVB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJfX2NsYXNzX18iKSkKKyAgICAgICAgcmV0dXJuIENFTEw7CisgICAgc2NvcGUgPSBQeVNUX0dldFNjb3BlKGMtPnUtPnVfc3RlLCBuYW1lKTsKICAgICBpZiAoc2NvcGUgPT0gMCkgewogICAgICAgICBjaGFyIGJ1ZlszNTBdOwogICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpIGluICVzXG4iCisgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc2NvcGUgZm9yICUuMTAwcyBpbiAlLjEwMHMoJXMpXG4iCiAgICAgICAgICAgICAgICAgICAgICAgInN5bWJvbHM6ICVzXG5sb2NhbHM6ICVzXG5nbG9iYWxzOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcobmFtZSksCi0gICAgICAgICAgICAgICAgICAgICAgUHlCeXRlc19BU19TVFJJTkcoYy0+dS0+dV9uYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGMtPnUtPnVfc3RlLT5zdGVfaWQpLAotICAgICAgICAgICAgICAgICAgICAgIGMtPmNfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X3N0ZS0+c3RlX3N5bWJvbHMpLAotICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0X1JFUFIoYy0+dS0+dV92YXJuYW1lcyksCi0gICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihjLT51LT51X25hbWVzKQorICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgobmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FzVVRGOChjLT51LT51X25hbWUpLAorICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgoUHlPYmplY3RfUmVwcihjLT51LT51X3N0ZS0+c3RlX2lkKSksCisgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FzVVRGOChQeU9iamVjdF9SZXByKGMtPnUtPnVfc3RlLT5zdGVfc3ltYm9scykpLAorICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgoUHlPYmplY3RfUmVwcihjLT51LT51X3Zhcm5hbWVzKSksCisgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FzVVRGOChQeU9iamVjdF9SZXByKGMtPnUtPnVfbmFtZXMpKQogICAgICAgICApOwogICAgICAgICBQeV9GYXRhbEVycm9yKGJ1Zik7CiAgICAgfQpAQCAtMTM2NSw5ICsxNDQwLDkgQEAKIH0KIAogc3RhdGljIGludAotY29tcGlsZXJfbWFrZV9jbG9zdXJlKHN0cnVjdCBjb21waWxlciAqYywgUHlDb2RlT2JqZWN0ICpjbywgaW50IGFyZ3MsIFB5T2JqZWN0ICpxdWFsbmFtZSkKK2NvbXBpbGVyX21ha2VfY2xvc3VyZShzdHJ1Y3QgY29tcGlsZXIgKmMsIFB5Q29kZU9iamVjdCAqY28sIFB5X3NzaXplX3QgYXJncywgUHlPYmplY3QgKnF1YWxuYW1lKQogewotICAgIGludCBpLCBmcmVlID0gUHlDb2RlX0dldE51bUZyZWUoY28pOworICAgIFB5X3NzaXplX3QgaSwgZnJlZSA9IFB5Q29kZV9HZXROdW1GcmVlKGNvKTsKICAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCkKICAgICAgICAgcXVhbG5hbWUgPSBjby0+Y29fbmFtZTsKIApAQCAtMTM5OSwxMSArMTQ3NCwxMSBAQAogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgImxvb2t1cCAlcyBpbiAlcyAlZCAlZFxuIgogICAgICAgICAgICAgICAgICJmcmVldmFycyBvZiAlczogJXNcbiIsCi0gICAgICAgICAgICAgICAgUHlPYmplY3RfUkVQUihuYW1lKSwKLSAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjLT51LT51X25hbWUpLAorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgoUHlPYmplY3RfUmVwcihuYW1lKSksCisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0FzVVRGOChjLT51LT51X25hbWUpLAogICAgICAgICAgICAgICAgIHJlZnR5cGUsIGFyZywKLSAgICAgICAgICAgICAgICBfUHlVbmljb2RlX0FzU3RyaW5nKGNvLT5jb19uYW1lKSwKLSAgICAgICAgICAgICAgICBQeU9iamVjdF9SRVBSKGNvLT5jb19mcmVldmFycykpOworICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgoY28tPmNvX25hbWUpLAorICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Bc1VURjgoUHlPYmplY3RfUmVwcihjby0+Y29fZnJlZXZhcnMpKSk7CiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJjb21waWxlcl9tYWtlX2Nsb3N1cmUoKSIpOwogICAgICAgICB9CiAgICAgICAgIEFERE9QX0koYywgTE9BRF9DTE9TVVJFLCBhcmcpOwpAQCAtMTQ1Nyw5ICsxNTMyLDE2IEBACiAgICAgZXhwcl90eSBhbm5vdGF0aW9uLCBQeU9iamVjdCAqbmFtZXMpCiB7CiAgICAgaWYgKGFubm90YXRpb24pIHsKKyAgICAgICAgUHlPYmplY3QgKm1hbmdsZWQ7CiAgICAgICAgIFZJU0lUKGMsIGV4cHIsIGFubm90YXRpb24pOwotICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChuYW1lcywgaWQpKQorICAgICAgICBtYW5nbGVkID0gX1B5X01hbmdsZShjLT51LT51X3ByaXZhdGUsIGlkKTsKKyAgICAgICAgaWYgKCFtYW5nbGVkKQogICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBpZiAoUHlMaXN0X0FwcGVuZChuYW1lcywgbWFuZ2xlZCkgPCAwKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYobWFuZ2xlZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG1hbmdsZWQpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTE0OTQsMjIgKzE1NzYsMjIgQEAKICAgICAgICAqLwogICAgIHN0YXRpYyBpZGVudGlmaWVyIHJldHVybl9zdHI7CiAgICAgUHlPYmplY3QgKm5hbWVzOwotICAgIGludCBsZW47CisgICAgUHlfc3NpemVfdCBsZW47CiAgICAgbmFtZXMgPSBQeUxpc3RfTmV3KDApOwogICAgIGlmICghbmFtZXMpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIGlmIChjb21waWxlcl92aXNpdF9hcmdhbm5vdGF0aW9ucyhjLCBhcmdzLT5hcmdzLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7Ci0gICAgaWYgKGFyZ3MtPnZhcmFyZ2Fubm90YXRpb24gJiYKLSAgICAgICAgY29tcGlsZXJfdmlzaXRfYXJnYW5ub3RhdGlvbihjLCBhcmdzLT52YXJhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+dmFyYXJnYW5ub3RhdGlvbiwgbmFtZXMpKQorICAgIGlmIChhcmdzLT52YXJhcmcgJiYgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uICYmCisgICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+dmFyYXJnLT5hcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+dmFyYXJnLT5hbm5vdGF0aW9uLCBuYW1lcykpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgaWYgKGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb25zKGMsIGFyZ3MtPmt3b25seWFyZ3MsIG5hbWVzKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoYXJncy0+a3dhcmdhbm5vdGF0aW9uICYmCi0gICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+a3dhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy0+a3dhcmdhbm5vdGF0aW9uLCBuYW1lcykpCisgICAgaWYgKGFyZ3MtPmt3YXJnICYmIGFyZ3MtPmt3YXJnLT5hbm5vdGF0aW9uICYmCisgICAgICAgIGNvbXBpbGVyX3Zpc2l0X2FyZ2Fubm90YXRpb24oYywgYXJncy0+a3dhcmctPmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzLT5rd2FyZy0+YW5ub3RhdGlvbiwgbmFtZXMpKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKCFyZXR1cm5fc3RyKSB7CkBAIC0xNTMxLDcgKzE2MTMsNyBAQAogICAgIGlmIChsZW4pIHsKICAgICAgICAgLyogY29udmVydCBuYW1lcyB0byBhIHR1cGxlIGFuZCBwbGFjZSBvbiBzdGFjayAqLwogICAgICAgICBQeU9iamVjdCAqZWx0OwotICAgICAgICBpbnQgaTsKKyAgICAgICAgUHlfc3NpemVfdCBpOwogICAgICAgICBQeU9iamVjdCAqcyA9IFB5VHVwbGVfTmV3KGxlbik7CiAgICAgICAgIGlmICghcykKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CkBAIC0xNTQ1LDcgKzE2MjcsOSBAQAogICAgICAgICBsZW4rKzsgLyogaW5jbHVkZSB0aGUganVzdC1wdXNoZWQgdHVwbGUgKi8KICAgICB9CiAgICAgUHlfREVDUkVGKG5hbWVzKTsKLSAgICByZXR1cm4gbGVuOworCisgICAgLyogV2UganVzdCBjaGVja2VkIHRoYXQgbGVuIDw9IDY1NTM1LCBzZWUgYWJvdmUgKi8KKyAgICByZXR1cm4gUHlfU0FGRV9ET1dOQ0FTVChsZW4sIFB5X3NzaXplX3QsIGludCk7CiAKIGVycm9yOgogICAgIFB5X0RFQ1JFRihuYW1lcyk7CkBAIC0xNTYxLDEzICsxNjQ1LDE2IEBACiAgICAgZXhwcl90eSByZXR1cm5zID0gcy0+di5GdW5jdGlvbkRlZi5yZXR1cm5zOwogICAgIGFzZGxfc2VxKiBkZWNvcyA9IHMtPnYuRnVuY3Rpb25EZWYuZGVjb3JhdG9yX2xpc3Q7CiAgICAgc3RtdF90eSBzdDsKLSAgICBpbnQgaSwgbiwgZG9jc3RyaW5nLCBrd19kZWZhdWx0X2NvdW50ID0gMCwgYXJnbGVuZ3RoOworICAgIFB5X3NzaXplX3QgaSwgbiwgYXJnbGVuZ3RoOworICAgIGludCBkb2NzdHJpbmcsIGt3X2RlZmF1bHRfY291bnQgPSAwOwogICAgIGludCBudW1fYW5ub3RhdGlvbnM7CiAKICAgICBhc3NlcnQocy0+a2luZCA9PSBGdW5jdGlvbkRlZl9raW5kKTsKIAogICAgIGlmICghY29tcGlsZXJfZGVjb3JhdG9ycyhjLCBkZWNvcykpCiAgICAgICAgIHJldHVybiAwOworICAgIGlmIChhcmdzLT5kZWZhdWx0cykKKyAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKICAgICBpZiAoYXJncy0+a3dvbmx5YXJncykgewogICAgICAgICBpbnQgcmVzID0gY29tcGlsZXJfdmlzaXRfa3dvbmx5ZGVmYXVsdHMoYywgYXJncy0+a3dvbmx5YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3X2RlZmF1bHRzKTsKQEAgLTE1NzUsOCArMTY2Miw2IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAga3dfZGVmYXVsdF9jb3VudCA9IHJlczsKICAgICB9Ci0gICAgaWYgKGFyZ3MtPmRlZmF1bHRzKQotICAgICAgICBWSVNJVF9TRVEoYywgZXhwciwgYXJncy0+ZGVmYXVsdHMpOwogICAgIG51bV9hbm5vdGF0aW9ucyA9IGNvbXBpbGVyX3Zpc2l0X2Fubm90YXRpb25zKGMsIGFyZ3MsIHJldHVybnMpOwogICAgIGlmIChudW1fYW5ub3RhdGlvbnMgPCAwKQogICAgICAgICByZXR1cm4gMDsKQEAgLTE2MDUsOSArMTY5MCwxMCBAQAogICAgICAgICBWSVNJVF9JTl9TQ09QRShjLCBzdG10LCBzdCk7CiAgICAgfQogICAgIGNvID0gYXNzZW1ibGUoYywgMSk7Ci0gICAgcXVhbG5hbWUgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKKyAgICBxdWFsbmFtZSA9IGMtPnUtPnVfcXVhbG5hbWU7CisgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgIGlmIChxdWFsbmFtZSA9PSBOVUxMIHx8IGNvID09IE5VTEwpIHsKKyAgICBpZiAoY28gPT0gTlVMTCkgewogICAgICAgICBQeV9YREVDUkVGKHF1YWxuYW1lKTsKICAgICAgICAgUHlfWERFQ1JFRihjbyk7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTY2MSwxMiArMTc0Nyw2IEBACiAgICAgICAgIFB5X0lOQ1JFRihzLT52LkNsYXNzRGVmLm5hbWUpOwogICAgICAgICBQeV9YREVDUkVGKGMtPnUtPnVfcHJpdmF0ZSk7CiAgICAgICAgIGMtPnUtPnVfcHJpdmF0ZSA9IHMtPnYuQ2xhc3NEZWYubmFtZTsKLSAgICAgICAgLyogZm9yY2UgaXQgdG8gaGF2ZSBvbmUgbWFuZGF0b3J5IGFyZ3VtZW50ICovCi0gICAgICAgIGMtPnUtPnVfYXJnY291bnQgPSAxOwotICAgICAgICAvKiBsb2FkIHRoZSBmaXJzdCBhcmd1bWVudCAoX19sb2NhbHNfXykgLi4uICovCi0gICAgICAgIEFERE9QX0koYywgTE9BRF9GQVNULCAwKTsKLSAgICAgICAgLyogLi4uIGFuZCBzdG9yZSBpdCBpbnRvIGZfbG9jYWxzICovCi0gICAgICAgIEFERE9QX0lOX1NDT1BFKGMsIFNUT1JFX0xPQ0FMUyk7CiAgICAgICAgIC8qIGxvYWQgKGdsb2JhbCkgX19uYW1lX18gLi4uICovCiAgICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX25hbWVfXyIpOwogICAgICAgICBpZiAoIXN0ciB8fCAhY29tcGlsZXJfbmFtZW9wKGMsIHN0ciwgTG9hZCkpIHsKQEAgLTE2ODMsMTQgKzE3NjMsOCBAQAogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgIC8qIHN0b3JlIHRoZSBfX3F1YWxuYW1lX18gKi8KLSAgICAgICAgc3RyID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7Ci0gICAgICAgIGlmICghc3RyKSB7Ci0gICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgQURET1BfTyhjLCBMT0FEX0NPTlNULCBzdHIsIGNvbnN0cyk7Ci0gICAgICAgIFB5X0RFQ1JFRihzdHIpOworICAgICAgICBhc3NlcnQoYy0+dS0+dV9xdWFsbmFtZSk7CisgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgYy0+dS0+dV9xdWFsbmFtZSwgY29uc3RzKTsKICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fcXVhbG5hbWVfXyIpOwogICAgICAgICBpZiAoIXN0ciB8fCAhY29tcGlsZXJfbmFtZW9wKGMsIHN0ciwgU3RvcmUpKSB7CiAgICAgICAgICAgICBQeV9YREVDUkVGKHN0cik7CkBAIC0xNzAzLDI0ICsxNzc3LDI4IEBACiAgICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KLSAgICAgICAgLyogcmV0dXJuIHRoZSAoZW1wdHkpIF9fY2xhc3NfXyBjZWxsICovCi0gICAgICAgIHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2NsYXNzX18iKTsKLSAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgaSA9IGNvbXBpbGVyX2xvb2t1cF9hcmcoYy0+dS0+dV9jZWxsdmFycywgc3RyKTsKLSAgICAgICAgUHlfREVDUkVGKHN0cik7Ci0gICAgICAgIGlmIChpID09IC0xKSB7Ci0gICAgICAgICAgICAvKiBUaGlzIGhhcHBlbnMgd2hlbiBub2JvZHkgcmVmZXJlbmNlcyB0aGUgY2VsbCAqLwotICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKLSAgICAgICAgICAgIC8qIFJldHVybiBOb25lICovCi0gICAgICAgICAgICBBRERPUF9PKGMsIExPQURfQ09OU1QsIFB5X05vbmUsIGNvbnN0cyk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIGlmIChjLT51LT51X3N0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUpIHsKKyAgICAgICAgICAgIC8qIHJldHVybiB0aGUgKGVtcHR5KSBfX2NsYXNzX18gY2VsbCAqLworICAgICAgICAgICAgc3RyID0gUHlVbmljb2RlX0ludGVybkZyb21TdHJpbmcoIl9fY2xhc3NfXyIpOworICAgICAgICAgICAgaWYgKHN0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSBjb21waWxlcl9sb29rdXBfYXJnKGMtPnUtPnVfY2VsbHZhcnMsIHN0cik7CisgICAgICAgICAgICBQeV9ERUNSRUYoc3RyKTsKKyAgICAgICAgICAgIGlmIChpIDwgMCkgeworICAgICAgICAgICAgICAgIGNvbXBpbGVyX2V4aXRfc2NvcGUoYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQoaSA9PSAwKTsKICAgICAgICAgICAgIC8qIFJldHVybiB0aGUgY2VsbCB3aGVyZSB0byBzdG9yZSBfX2NsYXNzX18gKi8KICAgICAgICAgICAgIEFERE9QX0koYywgTE9BRF9DTE9TVVJFLCBpKTsKICAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFzc2VydChQeURpY3RfU2l6ZShjLT51LT51X2NlbGx2YXJzKSA9PSAwKTsKKyAgICAgICAgICAgIC8qIFRoaXMgaGFwcGVucyB3aGVuIG5vYm9keSByZWZlcmVuY2VzIHRoZSBjZWxsLiBSZXR1cm4gTm9uZS4gKi8KKyAgICAgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfTm9uZSwgY29uc3RzKTsKKyAgICAgICAgfQogICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBSRVRVUk5fVkFMVUUpOwogICAgICAgICAvKiBjcmVhdGUgdGhlIGNvZGUgb2JqZWN0ICovCiAgICAgICAgIGNvID0gYXNzZW1ibGUoYywgMSk7CkBAIC0xNzg3LDcgKzE4NjUsOCBAQAogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgUHlPYmplY3QgKnF1YWxuYW1lOwogICAgIHN0YXRpYyBpZGVudGlmaWVyIG5hbWU7Ci0gICAgaW50IGt3X2RlZmF1bHRfY291bnQgPSAwLCBhcmdsZW5ndGg7CisgICAgaW50IGt3X2RlZmF1bHRfY291bnQgPSAwOworICAgIFB5X3NzaXplX3QgYXJnbGVuZ3RoOwogICAgIGFyZ3VtZW50c190eSBhcmdzID0gZS0+di5MYW1iZGEuYXJnczsKICAgICBhc3NlcnQoZS0+a2luZCA9PSBMYW1iZGFfa2luZCk7CiAKQEAgLTE3OTcsMTUgKzE4NzYsMTUgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAorICAgIGlmIChhcmdzLT5kZWZhdWx0cykKKyAgICAgICAgVklTSVRfU0VRKGMsIGV4cHIsIGFyZ3MtPmRlZmF1bHRzKTsKICAgICBpZiAoYXJncy0+a3dvbmx5YXJncykgewogICAgICAgICBpbnQgcmVzID0gY29tcGlsZXJfdmlzaXRfa3dvbmx5ZGVmYXVsdHMoYywgYXJncy0+a3dvbmx5YXJncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MtPmt3X2RlZmF1bHRzKTsKICAgICAgICAgaWYgKHJlcyA8IDApIHJldHVybiAwOwogICAgICAgICBrd19kZWZhdWx0X2NvdW50ID0gcmVzOwogICAgIH0KLSAgICBpZiAoYXJncy0+ZGVmYXVsdHMpCi0gICAgICAgIFZJU0lUX1NFUShjLCBleHByLCBhcmdzLT5kZWZhdWx0cyk7Ci0gICAgaWYgKCFjb21waWxlcl9lbnRlcl9zY29wZShjLCBuYW1lLCBDT01QSUxFUl9TQ09QRV9GVU5DVElPTiwKKyAgICBpZiAoIWNvbXBpbGVyX2VudGVyX3Njb3BlKGMsIG5hbWUsIENPTVBJTEVSX1NDT1BFX0xBTUJEQSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZSwgZS0+bGluZW5vKSkKICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTE4MTgsMTUgKzE4OTcsMTYgQEAKICAgICBjLT51LT51X2t3b25seWFyZ2NvdW50ID0gYXNkbF9zZXFfTEVOKGFyZ3MtPmt3b25seWFyZ3MpOwogICAgIFZJU0lUX0lOX1NDT1BFKGMsIGV4cHIsIGUtPnYuTGFtYmRhLmJvZHkpOwogICAgIGlmIChjLT51LT51X3N0ZS0+c3RlX2dlbmVyYXRvcikgewotICAgICAgICBBRERPUF9JTl9TQ09QRShjLCBQT1BfVE9QKTsKKyAgICAgICAgY28gPSBhc3NlbWJsZShjLCAwKTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIEFERE9QX0lOX1NDT1BFKGMsIFJFVFVSTl9WQUxVRSk7CisgICAgICAgIGNvID0gYXNzZW1ibGUoYywgMSk7CiAgICAgfQotICAgIGNvID0gYXNzZW1ibGUoYywgMSk7Ci0gICAgcXVhbG5hbWUgPSBjb21waWxlcl9zY29wZV9xdWFsbmFtZShjKTsKKyAgICBxdWFsbmFtZSA9IGMtPnUtPnVfcXVhbG5hbWU7CisgICAgUHlfSU5DUkVGKHF1YWxuYW1lKTsKICAgICBjb21waWxlcl9leGl0X3Njb3BlKGMpOwotICAgIGlmIChxdWFsbmFtZSA9PSBOVUxMIHx8IGNvID09IE5VTEwpCisgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgYXJnbGVuZ3RoID0gYXNkbF9zZXFfTEVOKGFyZ3MtPmRlZmF1bHRzKTsKQEAgLTE5NDksMTAgKzIwMjksOSBAQAogICAgICAgIGlmIHRoZXJlIGlzIG5vIGVsc2UgY2xhdXNlID8KICAgICAqLwogCi0gICAgaWYgKGNvbnN0YW50ID09IC0xKSB7CisgICAgaWYgKGNvbnN0YW50ID09IC0xKQogICAgICAgICBjb21waWxlcl91c2VfbmV4dF9ibG9jayhjLCBhbmNob3IpOwotICAgICAgICBBRERPUChjLCBQT1BfQkxPQ0spOwotICAgIH0KKyAgICBBRERPUChjLCBQT1BfQkxPQ0spOwogICAgIGNvbXBpbGVyX3BvcF9mYmxvY2soYywgTE9PUCwgbG9vcCk7CiAgICAgaWYgKG9yZWxzZSAhPSBOVUxMKSAvKiB3aGF0IGlmIG9yZWxzZSBpcyBqdXN0IHBhc3M/ICovCiAgICAgICAgIFZJU0lUX1NFUShjLCBzdG10LCBzLT52LldoaWxlLm9yZWxzZSk7CkBAIC0yMDk3LDcgKzIxNzYsNyBAQAogY29tcGlsZXJfdHJ5X2V4Y2VwdChzdHJ1Y3QgY29tcGlsZXIgKmMsIHN0bXRfdHkgcykKIHsKICAgICBiYXNpY2Jsb2NrICpib2R5LCAqb3JlbHNlLCAqZXhjZXB0LCAqZW5kOwotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIGJvZHkgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CiAgICAgZXhjZXB0ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwpAQCAtMjI2Myw3ICsyMzQyLDcgQEAKICAgICAgICBtb2R1bGUgbmFtZXMuCiAgICAgICAgWFhYIFBlcmhhcHMgY2hhbmdlIHRoZSByZXByZXNlbnRhdGlvbiB0byBtYWtlIHRoaXMgY2FzZSBzaW1wbGVyPwogICAgICAqLwotICAgIGludCBpLCBuID0gYXNkbF9zZXFfTEVOKHMtPnYuSW1wb3J0Lm5hbWVzKTsKKyAgICBQeV9zc2l6ZV90IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5JbXBvcnQubmFtZXMpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICBhbGlhc190eSBhbGlhcyA9IChhbGlhc190eSlhc2RsX3NlcV9HRVQocy0+di5JbXBvcnQubmFtZXMsIGkpOwpAQCAtMjI4OCw4ICsyMzY3LDExIEBACiAgICAgICAgICAgICBpZGVudGlmaWVyIHRtcCA9IGFsaWFzLT5uYW1lOwogICAgICAgICAgICAgUHlfc3NpemVfdCBkb3QgPSBQeVVuaWNvZGVfRmluZENoYXIoCiAgICAgICAgICAgICAgICAgYWxpYXMtPm5hbWUsICcuJywgMCwgUHlVbmljb2RlX0dFVF9MRU5HVEgoYWxpYXMtPm5hbWUpLCAxKTsKLSAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpCisgICAgICAgICAgICBpZiAoZG90ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgdG1wID0gUHlVbmljb2RlX1N1YnN0cmluZyhhbGlhcy0+bmFtZSwgMCwgZG90KTsKKyAgICAgICAgICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgciA9IGNvbXBpbGVyX25hbWVvcChjLCB0bXAsIFN0b3JlKTsKICAgICAgICAgICAgIGlmIChkb3QgIT0gLTEpIHsKICAgICAgICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKQEAgLTIzMDQsNyArMjM4Niw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9mcm9tX2ltcG9ydChzdHJ1Y3QgY29tcGlsZXIgKmMsIHN0bXRfdHkgcykKIHsKLSAgICBpbnQgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydEZyb20ubmFtZXMpOworICAgIFB5X3NzaXplX3QgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkltcG9ydEZyb20ubmFtZXMpOwogCiAgICAgUHlPYmplY3QgKm5hbWVzID0gUHlUdXBsZV9OZXcobik7CiAgICAgUHlPYmplY3QgKmxldmVsOwpAQCAtMjM4MCw2ICsyNDYyLDcgQEAKIHsKICAgICBzdGF0aWMgUHlPYmplY3QgKmFzc2VydGlvbl9lcnJvciA9IE5VTEw7CiAgICAgYmFzaWNibG9jayAqZW5kOworICAgIFB5T2JqZWN0KiBtc2c7CiAKICAgICBpZiAoYy0+Y19vcHRpbWl6ZSkKICAgICAgICAgcmV0dXJuIDE7CkBAIC0yMzkwLDExICsyNDczLDE3IEBACiAgICAgfQogICAgIGlmIChzLT52LkFzc2VydC50ZXN0LT5raW5kID09IFR1cGxlX2tpbmQgJiYKICAgICAgICAgYXNkbF9zZXFfTEVOKHMtPnYuQXNzZXJ0LnRlc3QtPnYuVHVwbGUuZWx0cykgPiAwKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIG1zZyA9Ci0gICAgICAgICAgICAiYXNzZXJ0aW9uIGlzIGFsd2F5cyB0cnVlLCBwZXJoYXBzIHJlbW92ZSBwYXJlbnRoZXNlcz8iOwotICAgICAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1zZywgYy0+Y19maWxlbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjLT51LT51X2xpbmVubywgTlVMTCwgTlVMTCkgPT0gLTEpCisgICAgICAgIG1zZyA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJhc3NlcnRpb24gaXMgYWx3YXlzIHRydWUsICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcmhhcHMgcmVtb3ZlIHBhcmVudGhlc2VzPyIpOworICAgICAgICBpZiAobXNnID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKFB5RXJyX1dhcm5FeHBsaWNpdE9iamVjdChQeUV4Y19TeW50YXhXYXJuaW5nLCBtc2csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCkgPT0gLTEpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtc2cpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKG1zZyk7CiAgICAgfQogICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuQXNzZXJ0LnRlc3QpOwogICAgIGVuZCA9IGNvbXBpbGVyX25ld19ibG9jayhjKTsKQEAgLTI0MTQsNyArMjUwMyw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl92aXNpdF9zdG10KHN0cnVjdCBjb21waWxlciAqYywgc3RtdF90eSBzKQogewotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIC8qIEFsd2F5cyBhc3NpZ24gYSBsaW5lbm8gdG8gdGhlIG5leHQgaW5zdHJ1Y3Rpb24gZm9yIGEgc3RtdC4gKi8KICAgICBjLT51LT51X2xpbmVubyA9IHMtPmxpbmVubzsKQEAgLTI0NjIsMTIgKzI1NTEsMTIgQEAKICAgICAgICAgaWYgKHMtPnYuUmFpc2UuZXhjKSB7CiAgICAgICAgICAgICBWSVNJVChjLCBleHByLCBzLT52LlJhaXNlLmV4Yyk7CiAgICAgICAgICAgICBuKys7Ci0gICAgICAgIGlmIChzLT52LlJhaXNlLmNhdXNlKSB7Ci0gICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuUmFpc2UuY2F1c2UpOwotICAgICAgICBuKys7CisgICAgICAgICAgICBpZiAocy0+di5SYWlzZS5jYXVzZSkgeworICAgICAgICAgICAgICAgIFZJU0lUKGMsIGV4cHIsIHMtPnYuUmFpc2UuY2F1c2UpOworICAgICAgICAgICAgICAgIG4rKzsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIEFERE9QX0koYywgUkFJU0VfVkFSQVJHUywgbik7CisgICAgICAgIEFERE9QX0koYywgUkFJU0VfVkFSQVJHUywgKGludCluKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUcnlfa2luZDoKICAgICAgICAgcmV0dXJuIGNvbXBpbGVyX3RyeShjLCBzKTsKQEAgLTI2MjcsNyArMjcxNiw4IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl9uYW1lb3Aoc3RydWN0IGNvbXBpbGVyICpjLCBpZGVudGlmaWVyIG5hbWUsIGV4cHJfY29udGV4dF90eSBjdHgpCiB7Ci0gICAgaW50IG9wLCBzY29wZSwgYXJnOworICAgIGludCBvcCwgc2NvcGU7CisgICAgUHlfc3NpemVfdCBhcmc7CiAgICAgZW51bSB7IE9QX0ZBU1QsIE9QX0dMT0JBTCwgT1BfREVSRUYsIE9QX05BTUUgfSBvcHR5cGU7CiAKICAgICBQeU9iamVjdCAqZGljdCA9IGMtPnUtPnVfbmFtZXM7CkBAIC0yNjM4LDYgKzI3MjgsMTAgQEAKICAgICBpZiAoIW1hbmdsZWQpCiAgICAgICAgIHJldHVybiAwOwogCisgICAgYXNzZXJ0KFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKG5hbWUsICJOb25lIikgJiYKKyAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgIlRydWUiKSAmJgorICAgICAgICAgICBQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiRmFsc2UiKSk7CisKICAgICBvcCA9IDA7CiAgICAgb3B0eXBlID0gT1BfTkFNRTsKICAgICBzY29wZSA9IFB5U1RfR2V0U2NvcGUoYy0+dS0+dV9zdGUsIG1hbmdsZWQpOwpAQCAtMjY3Myw3ICsyNzY3LDkgQEAKICAgICBzd2l0Y2ggKG9wdHlwZSkgewogICAgIGNhc2UgT1BfREVSRUY6CiAgICAgICAgIHN3aXRjaCAoY3R4KSB7Ci0gICAgICAgIGNhc2UgTG9hZDogb3AgPSBMT0FEX0RFUkVGOyBicmVhazsKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgb3AgPSAoYy0+dS0+dV9zdGUtPnN0ZV90eXBlID09IENsYXNzQmxvY2spID8gTE9BRF9DTEFTU0RFUkVGIDogTE9BRF9ERVJFRjsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFN0b3JlOiBvcCA9IFNUT1JFX0RFUkVGOyBicmVhazsKICAgICAgICAgY2FzZSBBdWdMb2FkOgogICAgICAgICBjYXNlIEF1Z1N0b3JlOgpAQCAtMjc0Nyw3ICsyODQzLDggQEAKIGNvbXBpbGVyX2Jvb2xvcChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKICAgICBiYXNpY2Jsb2NrICplbmQ7Ci0gICAgaW50IGp1bXBpLCBpLCBuOworICAgIGludCBqdW1waTsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAgICAgYXNkbF9zZXEgKnM7CiAKICAgICBhc3NlcnQoZS0+a2luZCA9PSBCb29sT3Bfa2luZCk7CkBAIC0yNzczLDcgKzI4NzAsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfbGlzdChzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgbiA9IGFzZGxfc2VxX0xFTihlLT52Lkxpc3QuZWx0cyk7CisgICAgUHlfc3NpemVfdCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuTGlzdC5lbHRzKTsKICAgICBpZiAoZS0+di5MaXN0LmN0eCA9PSBTdG9yZSkgewogICAgICAgICBpbnQgaSwgc2Vlbl9zdGFyID0gMDsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewpAQCAtMjgwNiw3ICsyOTAzLDcgQEAKIHN0YXRpYyBpbnQKIGNvbXBpbGVyX3R1cGxlKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGludCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuVHVwbGUuZWx0cyk7CisgICAgUHlfc3NpemVfdCBuID0gYXNkbF9zZXFfTEVOKGUtPnYuVHVwbGUuZWx0cyk7CiAgICAgaWYgKGUtPnYuVHVwbGUuY3R4ID09IFN0b3JlKSB7CiAgICAgICAgIGludCBpLCBzZWVuX3N0YXIgPSAwOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CkBAIC0yODM5LDcgKzI5MzYsNyBAQAogc3RhdGljIGludAogY29tcGlsZXJfY29tcGFyZShzdHJ1Y3QgY29tcGlsZXIgKmMsIGV4cHJfdHkgZSkKIHsKLSAgICBpbnQgaSwgbjsKKyAgICBQeV9zc2l6ZV90IGksIG47CiAgICAgYmFzaWNibG9jayAqY2xlYW51cCA9IE5VTEw7CiAKICAgICAvKiBYWFggdGhlIGxvZ2ljIGNhbiBiZSBjbGVhbmVkIHVwIGZvciAxIG9yIG11bHRpcGxlIGNvbXBhcmlzb25zICovCkBAIC0yODk1LDExICsyOTkyLDExIEBACiAvKiBzaGFyZWQgY29kZSBiZXR3ZWVuIGNvbXBpbGVyX2NhbGwgYW5kIGNvbXBpbGVyX2NsYXNzICovCiBzdGF0aWMgaW50CiBjb21waWxlcl9jYWxsX2hlbHBlcihzdHJ1Y3QgY29tcGlsZXIgKmMsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgbiwgLyogQXJncyBhbHJlYWR5IHB1c2hlZCAqLwotICAgICAgICAgICAgIGFzZGxfc2VxICphcmdzLAotICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkcywKLSAgICAgICAgICAgICBleHByX3R5IHN0YXJhcmdzLAotICAgICAgICAgICAgIGV4cHJfdHkga3dhcmdzKQorICAgICAgICAgICAgICAgICAgICAgUHlfc3NpemVfdCBuLCAvKiBBcmdzIGFscmVhZHkgcHVzaGVkICovCisgICAgICAgICAgICAgICAgICAgICBhc2RsX3NlcSAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgIGFzZGxfc2VxICprZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAgIGV4cHJfdHkgc3RhcmFyZ3MsCisgICAgICAgICAgICAgICAgICAgICBleHByX3R5IGt3YXJncykKIHsKICAgICBpbnQgY29kZSA9IDA7CiAKQEAgLTI5NjAsNyArMzA1Nyw3IEBACiAKICAgICBjb21wcmVoZW5zaW9uX3R5IGdlbjsKICAgICBiYXNpY2Jsb2NrICpzdGFydCwgKmFuY2hvciwgKnNraXAsICppZl9jbGVhbnVwOwotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIHN0YXJ0ID0gY29tcGlsZXJfbmV3X2Jsb2NrKGMpOwogICAgIHNraXAgPSBjb21waWxlcl9uZXdfYmxvY2soYyk7CkBAIC0zMDg1LDkgKzMxODIsMTAgQEAKICAgICB9CiAKICAgICBjbyA9IGFzc2VtYmxlKGMsIDEpOwotICAgIHF1YWxuYW1lID0gY29tcGlsZXJfc2NvcGVfcXVhbG5hbWUoYyk7CisgICAgcXVhbG5hbWUgPSBjLT51LT51X3F1YWxuYW1lOworICAgIFB5X0lOQ1JFRihxdWFsbmFtZSk7CiAgICAgY29tcGlsZXJfZXhpdF9zY29wZShjKTsKLSAgICBpZiAocXVhbG5hbWUgPT0gTlVMTCB8fCBjbyA9PSBOVUxMKQorICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgaWYgKCFjb21waWxlcl9tYWtlX2Nsb3N1cmUoYywgY28sIDAsIHF1YWxuYW1lKSkKQEAgLTMxOTcsMTIgKzMyOTUsMTggQEAKICAgICBjYXNlIE5hbWVfa2luZDoKICAgICAgICAgLyogb3B0aW1pemUgYXdheSBuYW1lcyB0aGF0IGNhbid0IGJlIHJlYXNzaWduZWQgKi8KICAgICAgICAgaWQgPSBQeVVuaWNvZGVfQXNVVEY4KGUtPnYuTmFtZS5pZCk7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJUcnVlIikgPT0gMCkgcmV0dXJuIDE7Ci0gICAgICAgIGlmIChzdHJjbXAoaWQsICJGYWxzZSIpID09IDApIHJldHVybiAwOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiTm9uZSIpID09IDApIHJldHVybiAwOwotICAgICAgICBpZiAoc3RyY21wKGlkLCAiX19kZWJ1Z19fIikgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAhIGMtPmNfb3B0aW1pemU7Ci0gICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLworICAgICAgICBpZiAoaWQgJiYgc3RyY21wKGlkLCAiX19kZWJ1Z19fIikgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAhYy0+Y19vcHRpbWl6ZTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6IHsKKyAgICAgICAgUHlPYmplY3QgKm8gPSBlLT52Lk5hbWVDb25zdGFudC52YWx1ZTsKKyAgICAgICAgaWYgKG8gPT0gUHlfTm9uZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlIGlmIChvID09IFB5X1RydWUpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgZWxzZSBpZiAobyA9PSBQeV9GYWxzZSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMzIyNiw5ICszMzMwLDkgQEAKICAgICAgICBCTE9DSwogICAgZmluYWxseToKICAgICAgICBpZiBhbiBleGNlcHRpb24gd2FzIHJhaXNlZDoKLSAgICAgICBleGMgPSBjb3B5IG9mIChleGNlcHRpb24sIGluc3RhbmNlLCB0cmFjZWJhY2spCisgICAgICAgICAgIGV4YyA9IGNvcHkgb2YgKGV4Y2VwdGlvbiwgaW5zdGFuY2UsIHRyYWNlYmFjaykKICAgICAgICBlbHNlOgotICAgICAgIGV4YyA9IChOb25lLCBOb25lLCBOb25lKQorICAgICAgICAgICBleGMgPSAoTm9uZSwgTm9uZSwgTm9uZSkKICAgICAgICBleGl0KCpleGMpCiAgKi8KIHN0YXRpYyBpbnQKQEAgLTMyOTIsNyArMzM5Niw3IEBACiBzdGF0aWMgaW50CiBjb21waWxlcl92aXNpdF9leHByKHN0cnVjdCBjb21waWxlciAqYywgZXhwcl90eSBlKQogewotICAgIGludCBpLCBuOworICAgIFB5X3NzaXplX3QgaSwgbjsKIAogICAgIC8qIElmIGV4cHIgZSBoYXMgYSBkaWZmZXJlbnQgbGluZSBudW1iZXIgdGhhbiB0aGUgbGFzdCBleHByL3N0bXQsCiAgICAgICAgc2V0IGEgbmV3IGxpbmUgbnVtYmVyIGZvciB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KQEAgLTMzMjEsNiArMzQyNSw4IEBACiAgICAgICAgIHJldHVybiBjb21waWxlcl9pZmV4cChjLCBlKTsKICAgICBjYXNlIERpY3Rfa2luZDoKICAgICAgICAgbiA9IGFzZGxfc2VxX0xFTihlLT52LkRpY3QudmFsdWVzKTsKKyAgICAgICAgLyogQlVJTERfTUFQIHBhcmFtZXRlciBpcyBvbmx5IHVzZWQgdG8gcHJlYWxsb2NhdGUgdGhlIGRpY3Rpb25hcnksCisgICAgICAgICAgIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBleGFjdCAqLwogICAgICAgICBBRERPUF9JKGMsIEJVSUxEX01BUCwgKG4+MHhGRkZGID8gMHhGRkZGIDogbikpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICBWSVNJVChjLCBleHByLApAQCAtMzM3OCw2ICszNDg0LDkgQEAKICAgICBjYXNlIEVsbGlwc2lzX2tpbmQ6CiAgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgUHlfRWxsaXBzaXMsIGNvbnN0cyk7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTmFtZUNvbnN0YW50X2tpbmQ6CisgICAgICAgIEFERE9QX08oYywgTE9BRF9DT05TVCwgZS0+di5OYW1lQ29uc3RhbnQudmFsdWUsIGNvbnN0cyk7CisgICAgICAgIGJyZWFrOwogICAgIC8qIFRoZSBmb2xsb3dpbmcgZXhwcnMgY2FuIGJlIGFzc2lnbm1lbnQgdGFyZ2V0cy4gKi8KICAgICBjYXNlIEF0dHJpYnV0ZV9raW5kOgogICAgICAgICBpZiAoZS0+di5BdHRyaWJ1dGUuY3R4ICE9IEF1Z1N0b3JlKQpAQCAtMzU0NywxMiArMzY1NiwxMiBAQAogICAgIFB5T2JqZWN0ICpsb2M7CiAgICAgUHlPYmplY3QgKnUgPSBOVUxMLCAqdiA9IE5VTEw7CiAKLSAgICBsb2MgPSBQeUVycl9Qcm9ncmFtVGV4dChjLT5jX2ZpbGVuYW1lLCBjLT51LT51X2xpbmVubyk7CisgICAgbG9jID0gUHlFcnJfUHJvZ3JhbVRleHRPYmplY3QoYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8pOwogICAgIGlmICghbG9jKSB7CiAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKICAgICAgICAgbG9jID0gUHlfTm9uZTsKICAgICB9Ci0gICAgdSA9IFB5X0J1aWxkVmFsdWUoIihPaWlPKSIsIGMtPmNfZmlsZW5hbWVfb2JqLCBjLT51LT51X2xpbmVubywKKyAgICB1ID0gUHlfQnVpbGRWYWx1ZSgiKE9paU8pIiwgYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9saW5lbm8sCiAgICAgICAgICAgICAgICAgICAgICAgYy0+dS0+dV9jb2xfb2Zmc2V0LCBsb2MpOwogICAgIGlmICghdSkKICAgICAgICAgZ290byBleGl0OwpAQCAtMzY2NSw3ICszNzc0LDcgQEAKICAgICBjYXNlIEV4dFNsaWNlX2tpbmQ6CiAgICAgICAgIGtpbmRuYW1lID0gImV4dGVuZGVkIHNsaWNlIjsKICAgICAgICAgaWYgKGN0eCAhPSBBdWdTdG9yZSkgewotICAgICAgICAgICAgaW50IGksIG4gPSBhc2RsX3NlcV9MRU4ocy0+di5FeHRTbGljZS5kaW1zKTsKKyAgICAgICAgICAgIFB5X3NzaXplX3QgaSwgbiA9IGFzZGxfc2VxX0xFTihzLT52LkV4dFNsaWNlLmRpbXMpOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgICAgIHNsaWNlX3R5IHN1YiA9IChzbGljZV90eSlhc2RsX3NlcV9HRVQoCiAgICAgICAgICAgICAgICAgICAgIHMtPnYuRXh0U2xpY2UuZGltcywgaSk7CkBAIC0zNzI0LDcgKzM4MzMsNyBAQAogc3RhdGljIGludAogc3RhY2tkZXB0aF93YWxrKHN0cnVjdCBjb21waWxlciAqYywgYmFzaWNibG9jayAqYiwgaW50IGRlcHRoLCBpbnQgbWF4ZGVwdGgpCiB7Ci0gICAgaW50IGksIHRhcmdldF9kZXB0aDsKKyAgICBpbnQgaSwgdGFyZ2V0X2RlcHRoLCBlZmZlY3Q7CiAgICAgc3RydWN0IGluc3RyICppbnN0cjsKICAgICBpZiAoYi0+Yl9zZWVuIHx8IGItPmJfc3RhcnRkZXB0aCA+PSBkZXB0aCkKICAgICAgICAgcmV0dXJuIG1heGRlcHRoOwpAQCAtMzczMiw3ICszODQxLDEzIEBACiAgICAgYi0+Yl9zdGFydGRlcHRoID0gZGVwdGg7CiAgICAgZm9yIChpID0gMDsgaSA8IGItPmJfaXVzZWQ7IGkrKykgewogICAgICAgICBpbnN0ciA9ICZiLT5iX2luc3RyW2ldOwotICAgICAgICBkZXB0aCArPSBvcGNvZGVfc3RhY2tfZWZmZWN0KGluc3RyLT5pX29wY29kZSwgaW5zdHItPmlfb3BhcmcpOworICAgICAgICBlZmZlY3QgPSBQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3QoaW5zdHItPmlfb3Bjb2RlLCBpbnN0ci0+aV9vcGFyZyk7CisgICAgICAgIGlmIChlZmZlY3QgPT0gUFlfSU5WQUxJRF9TVEFDS19FRkZFQ1QpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3Bjb2RlID0gJWRcbiIsIGluc3RyLT5pX29wY29kZSk7CisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJQeUNvbXBpbGVfT3Bjb2RlU3RhY2tFZmZlY3QoKSIpOworICAgICAgICB9CisgICAgICAgIGRlcHRoICs9IGVmZmVjdDsKKwogICAgICAgICBpZiAoZGVwdGggPiBtYXhkZXB0aCkKICAgICAgICAgICAgIG1heGRlcHRoID0gZGVwdGg7CiAgICAgICAgIGFzc2VydChkZXB0aCA+PSAwKTsgLyogaW52YWxpZCBjb2RlIG9yIGJ1ZyBpbiBzdGFja2RlcHRoKCkgKi8KQEAgLTM3NDAsMTIgKzM4NTUsMTYgQEAKICAgICAgICAgICAgIHRhcmdldF9kZXB0aCA9IGRlcHRoOwogICAgICAgICAgICAgaWYgKGluc3RyLT5pX29wY29kZSA9PSBGT1JfSVRFUikgewogICAgICAgICAgICAgICAgIHRhcmdldF9kZXB0aCA9IGRlcHRoLTI7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGluc3RyLT5pX29wY29kZSA9PSBTRVRVUF9GSU5BTExZIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIGluc3RyLT5pX29wY29kZSA9PSBTRVRVUF9FWENFUFQpIHsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGluc3RyLT5pX29wY29kZSA9PSBTRVRVUF9GSU5BTExZIHx8CisgICAgICAgICAgICAgICAgICAgICBpbnN0ci0+aV9vcGNvZGUgPT0gU0VUVVBfRVhDRVBUKSB7CiAgICAgICAgICAgICAgICAgdGFyZ2V0X2RlcHRoID0gZGVwdGgrMzsKICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0X2RlcHRoID4gbWF4ZGVwdGgpCiAgICAgICAgICAgICAgICAgICAgIG1heGRlcHRoID0gdGFyZ2V0X2RlcHRoOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoaW5zdHItPmlfb3Bjb2RlID09IEpVTVBfSUZfVFJVRV9PUl9QT1AgfHwKKyAgICAgICAgICAgICAgICAgICAgIGluc3RyLT5pX29wY29kZSA9PSBKVU1QX0lGX0ZBTFNFX09SX1BPUCkKKyAgICAgICAgICAgICAgICBkZXB0aCA9IGRlcHRoIC0gMTsKICAgICAgICAgICAgIG1heGRlcHRoID0gc3RhY2tkZXB0aF93YWxrKGMsIGluc3RyLT5pX3RhcmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9kZXB0aCwgbWF4ZGVwdGgpOwogICAgICAgICAgICAgaWYgKGluc3RyLT5pX29wY29kZSA9PSBKVU1QX0FCU09MVVRFIHx8CkBAIC0zNzkwLDcgKzM5MDksNyBAQAogICAgIGEtPmFfbG5vdGFiID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZShOVUxMLCBERUZBVUxUX0xOT1RBQl9TSVpFKTsKICAgICBpZiAoIWEtPmFfbG5vdGFiKQogICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAobmJsb2NrcyA+IFBZX1NJWkVfTUFYIC8gc2l6ZW9mKGJhc2ljYmxvY2sgKikpIHsKKyAgICBpZiAoKHNpemVfdCluYmxvY2tzID4gUFlfU0laRV9NQVggLyBzaXplb2YoYmFzaWNibG9jayAqKSkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0zODQzLDcgKzM5NjIsNyBAQAogYXNzZW1ibGVfbG5vdGFiKHN0cnVjdCBhc3NlbWJsZXIgKmEsIHN0cnVjdCBpbnN0ciAqaSkKIHsKICAgICBpbnQgZF9ieXRlY29kZSwgZF9saW5lbm87Ci0gICAgaW50IGxlbjsKKyAgICBQeV9zc2l6ZV90IGxlbjsKICAgICB1bnNpZ25lZCBjaGFyICpsbm90YWI7CiAKICAgICBkX2J5dGVjb2RlID0gYS0+YV9vZmZzZXQgLSBhLT5hX2xpbmVub19vZmY7CkBAIC00MDM0LDcgKzQxNTMsNyBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgotZGljdF9rZXlzX2lub3JkZXIoUHlPYmplY3QgKmRpY3QsIGludCBvZmZzZXQpCitkaWN0X2tleXNfaW5vcmRlcihQeU9iamVjdCAqZGljdCwgUHlfc3NpemVfdCBvZmZzZXQpCiB7CiAgICAgUHlPYmplY3QgKnR1cGxlLCAqaywgKnY7CiAgICAgUHlfc3NpemVfdCBpLCBwb3MgPSAwLCBzaXplID0gUHlEaWN0X1NpemUoZGljdCk7CkBAIC00MDU5LDEwICs0MTc4LDEwIEBACiBjb21wdXRlX2NvZGVfZmxhZ3Moc3RydWN0IGNvbXBpbGVyICpjKQogewogICAgIFB5U1RFbnRyeU9iamVjdCAqc3RlID0gYy0+dS0+dV9zdGU7Ci0gICAgaW50IGZsYWdzID0gMCwgbjsKLSAgICBpZiAoc3RlLT5zdGVfdHlwZSAhPSBNb2R1bGVCbG9jaykKLSAgICAgICAgZmxhZ3MgfD0gQ09fTkVXTE9DQUxTOworICAgIGludCBmbGFncyA9IDA7CisgICAgUHlfc3NpemVfdCBuOwogICAgIGlmIChzdGUtPnN0ZV90eXBlID09IEZ1bmN0aW9uQmxvY2spIHsKKyAgICAgICAgZmxhZ3MgfD0gQ09fTkVXTE9DQUxTOwogICAgICAgICBpZiAoIXN0ZS0+c3RlX3Vub3B0aW1pemVkKQogICAgICAgICAgICAgZmxhZ3MgfD0gQ09fT1BUSU1JWkVEOwogICAgICAgICBpZiAoc3RlLT5zdGVfbmVzdGVkKQpAQCAtNDA4NCw5ICs0MjAzLDkgQEAKICAgICBpZiAobiA9PSAwKSB7CiAgICAgICAgIG4gPSBQeURpY3RfU2l6ZShjLT51LT51X2NlbGx2YXJzKTsKICAgICAgICAgaWYgKG4gPCAwKQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIGlmIChuID09IDApIHsKLSAgICAgICAgZmxhZ3MgfD0gQ09fTk9GUkVFOworICAgICAgICAgICAgZmxhZ3MgfD0gQ09fTk9GUkVFOwogICAgICAgICB9CiAgICAgfQogCkBAIC00MTA1LDcgKzQyMjQsMTAgQEAKICAgICBQeU9iamVjdCAqZnJlZXZhcnMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpjZWxsdmFycyA9IE5VTEw7CiAgICAgUHlPYmplY3QgKmJ5dGVjb2RlID0gTlVMTDsKLSAgICBpbnQgbmxvY2FscywgZmxhZ3M7CisgICAgUHlfc3NpemVfdCBubG9jYWxzOworICAgIGludCBubG9jYWxzX2ludDsKKyAgICBpbnQgZmxhZ3M7CisgICAgaW50IGFyZ2NvdW50LCBrd29ubHlhcmdjb3VudDsKIAogICAgIHRtcCA9IGRpY3Rfa2V5c19pbm9yZGVyKGMtPnUtPnVfY29uc3RzLCAwKTsKICAgICBpZiAoIXRtcCkKQEAgLTQxMjQsNyArNDI0NiwxMSBAQAogICAgIGZyZWV2YXJzID0gZGljdF9rZXlzX2lub3JkZXIoYy0+dS0+dV9mcmVldmFycywgUHlUdXBsZV9TaXplKGNlbGx2YXJzKSk7CiAgICAgaWYgKCFmcmVldmFycykKICAgICAgICAgZ290byBlcnJvcjsKKwogICAgIG5sb2NhbHMgPSBQeURpY3RfU2l6ZShjLT51LT51X3Zhcm5hbWVzKTsKKyAgICBhc3NlcnQobmxvY2FscyA8IElOVF9NQVgpOworICAgIG5sb2NhbHNfaW50ID0gUHlfU0FGRV9ET1dOQ0FTVChubG9jYWxzLCBQeV9zc2l6ZV90LCBpbnQpOworCiAgICAgZmxhZ3MgPSBjb21wdXRlX2NvZGVfZmxhZ3MoYyk7CiAgICAgaWYgKGZsYWdzIDwgMCkKICAgICAgICAgZ290byBlcnJvcjsKQEAgLTQxMzksMTEgKzQyNjUsMTMgQEAKICAgICBQeV9ERUNSRUYoY29uc3RzKTsKICAgICBjb25zdHMgPSB0bXA7CiAKLSAgICBjbyA9IFB5Q29kZV9OZXcoYy0+dS0+dV9hcmdjb3VudCwgYy0+dS0+dV9rd29ubHlhcmdjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgbmxvY2Fscywgc3RhY2tkZXB0aChjKSwgZmxhZ3MsCisgICAgYXJnY291bnQgPSBQeV9TQUZFX0RPV05DQVNUKGMtPnUtPnVfYXJnY291bnQsIFB5X3NzaXplX3QsIGludCk7CisgICAga3dvbmx5YXJnY291bnQgPSBQeV9TQUZFX0RPV05DQVNUKGMtPnUtPnVfa3dvbmx5YXJnY291bnQsIFB5X3NzaXplX3QsIGludCk7CisgICAgY28gPSBQeUNvZGVfTmV3KGFyZ2NvdW50LCBrd29ubHlhcmdjb3VudCwKKyAgICAgICAgICAgICAgICAgICAgbmxvY2Fsc19pbnQsIHN0YWNrZGVwdGgoYyksIGZsYWdzLAogICAgICAgICAgICAgICAgICAgICBieXRlY29kZSwgY29uc3RzLCBuYW1lcywgdmFybmFtZXMsCiAgICAgICAgICAgICAgICAgICAgIGZyZWV2YXJzLCBjZWxsdmFycywKLSAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZV9vYmosIGMtPnUtPnVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgYy0+Y19maWxlbmFtZSwgYy0+dS0+dV9uYW1lLAogICAgICAgICAgICAgICAgICAgICBjLT51LT51X2ZpcnN0bGluZW5vLAogICAgICAgICAgICAgICAgICAgICBhLT5hX2xub3RhYik7CiAgZXJyb3I6CkBAIC00MjU5LDQgKzQzODcsMyBAQAogICAgIHJldHVybiBQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIC0xLCBhcmVuYSk7CiB9CiAKLQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2NvbmR2YXIuaCBiL1B5dGhvbi9jb25kdmFyLmgKaW5kZXggMTk0NzRlZi4uZWY4MThjNCAxMDA2NDQKLS0tIGEvUHl0aG9uL2NvbmR2YXIuaAorKysgYi9QeXRob24vY29uZHZhci5oCkBAIC0yNDEsNyArMjQxLDcgQEAKICAgICAgKiBidXQgd2UgYXJlIHNhZmUgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgYSBzZW1hcGhvcmUgd2ljaCBoYXMgYW4gaW50ZXJuYWwKICAgICAgKiBjb3VudC4KICAgICAgKi8KLSAgICB3YWl0ID0gV2FpdEZvclNpbmdsZU9iamVjdChjdi0+c2VtLCBtcyk7CisgICAgd2FpdCA9IFdhaXRGb3JTaW5nbGVPYmplY3RFeChjdi0+c2VtLCBtcywgRkFMU0UpOwogICAgIFB5TVVURVhfTE9DSyhjcyk7CiAgICAgaWYgKHdhaXQgIT0gV0FJVF9PQkpFQ1RfMCkKICAgICAgICAgLS1jdi0+d2FpdGluZzsKZGlmZiAtLWdpdCBhL1B5dGhvbi9keW5sb2FkX2FpeC5jIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKaW5kZXggZjQwYTBiZS4uNWFjMzBlZCAxMDA2NDQKLS0tIGEvUHl0aG9uL2R5bmxvYWRfYWl4LmMKKysrIGIvUHl0aG9uL2R5bmxvYWRfYWl4LmMKQEAgLTMwLDExICszMCwxMSBAQAogc3RhdGljIGludAogYWl4X2dldG9sZG1vZHVsZXModm9pZCAqKm1vZGxpc3RwdHIpCiB7Ci0gICAgcmVnaXN0ZXIgTW9kdWxlUHRyICAgICAgIG1vZHB0ciwgcHJldm1vZHB0cjsKLSAgICByZWdpc3RlciBzdHJ1Y3QgbGRfaW5mbyAgKmxkaXB0cjsKLSAgICByZWdpc3RlciBjaGFyICAgICAgICAgICAgKmxkaWJ1ZjsKLSAgICByZWdpc3RlciBpbnQgICAgICAgICAgICAgZXJyZmxhZywgYnVmc2l6ZSA9IDEwMjQ7Ci0gICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50ICAgIG9mZnNldDsKKyAgICBNb2R1bGVQdHIgICAgICAgbW9kcHRyLCBwcmV2bW9kcHRyOworICAgIHN0cnVjdCBsZF9pbmZvICAqbGRpcHRyOworICAgIGNoYXIgICAgICAgICAgICAqbGRpYnVmOworICAgIGludCAgICAgICAgICAgICBlcnJmbGFnLCBidWZzaXplID0gMTAyNDsKKyAgICB1bnNpZ25lZCBpbnQgICAgb2Zmc2V0OwogICAgIGNoYXIgKnByb2duYW1lID0gUHlfR2V0UHJvZ3JhbU5hbWUoKTsKIAogICAgIC8qCkBAIC0xMDYsNyArMTA2LDcgQEAKICAgICBjaGFyICptZXNzYWdlWzEwMjRdLCBlcnJidWZbMTAyNF07CiAgICAgUHlPYmplY3QgKnBhdGhuYW1lX29iID0gTlVMTDsKICAgICBQeU9iamVjdCAqZXJyYnVmX29iID0gTlVMTDsKLSAgICByZWdpc3RlciBpbnQgaSxqOworICAgIGludCBpLGo7CiAKICAgICBzdHJ1Y3QgZXJydGFiIHsKICAgICAgICAgaW50IGVyck5vOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2R5bmxvYWRfb3MyLmMgYi9QeXRob24vZHlubG9hZF9vczIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGUxYjkwNy4uMDAwMDAwMAotLS0gYS9QeXRob24vZHlubG9hZF9vczIuYworKysgL2Rldi9udWxsCkBAIC0xLDQyICswLDAgQEAKLQotLyogU3VwcG9ydCBmb3IgZHluYW1pYyBsb2FkaW5nIG9mIGV4dGVuc2lvbiBtb2R1bGVzICovCi0KLSNkZWZpbmUgIElOQ0xfRE9TRVJST1JTCi0jZGVmaW5lICBJTkNMX0RPU01PRFVMRU1HUgotI2luY2x1ZGUgPG9zMi5oPgotCi0jaW5jbHVkZSAiUHl0aG9uLmgiCi0jaW5jbHVkZSAiaW1wb3J0ZGwuaCIKLQotCi1jb25zdCBjaGFyICpfUHlJbXBvcnRfRHluTG9hZEZpbGV0YWJbXSA9IHsiLnB5ZCIsICIuZGxsIiwgTlVMTH07Ci0KLWRsX2Z1bmNwdHIgX1B5SW1wb3J0X0dldER5bkxvYWRGdW5jKGNvbnN0IGNoYXIgKnNob3J0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnBhdGhuYW1lLCBGSUxFICpmcCkKLXsKLSAgICBkbF9mdW5jcHRyIHA7Ci0gICAgQVBJUkVUICByYzsKLSAgICBITU9EVUxFIGhETEw7Ci0gICAgY2hhciBmYWlscmVhc29uWzI1Nl07Ci0gICAgY2hhciBmdW5jbmFtZVsyNThdOwotCi0gICAgcmMgPSBEb3NMb2FkTW9kdWxlKGZhaWxyZWFzb24sCi0gICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmYWlscmVhc29uKSwKLSAgICAgICAgICAgICAgICAgICAgICAgcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICZoRExMKTsKLQotICAgIGlmIChyYyAhPSBOT19FUlJPUikgewotICAgICAgICBjaGFyIGVyckJ1ZlsyNTZdOwotICAgICAgICBQeU9TX3NucHJpbnRmKGVyckJ1Ziwgc2l6ZW9mKGVyckJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgIkRMTCBsb2FkIGZhaWxlZCwgcmMgPSAlZDogJS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICByYywgZmFpbHJlYXNvbik7Ci0gICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19JbXBvcnRFcnJvciwgZXJyQnVmKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgUHlPU19zbnByaW50ZihmdW5jbmFtZSwgc2l6ZW9mKGZ1bmNuYW1lKSwgIlB5SW5pdF8lLjIwMHMiLCBzaG9ydG5hbWUpOwotICAgIHJjID0gRG9zUXVlcnlQcm9jQWRkcihoRExMLCAwTCwgZnVuY25hbWUsICZwKTsKLSAgICBpZiAocmMgIT0gTk9fRVJST1IpCi0gICAgICAgIHAgPSBOVUxMOyAvKiBTaWduaWZ5IEZhaWx1cmUgdG8gQWNxdWlyZSBFbnRyeXBvaW50ICovCi0gICAgcmV0dXJuIHA7Ci19CmRpZmYgLS1naXQgYS9QeXRob24vZHlubG9hZF9zaGxpYi5jIGIvUHl0aG9uL2R5bmxvYWRfc2hsaWIuYwppbmRleCA3NTU0NGVkLi41Y2QxZWZkIDEwMDY0NAotLS0gYS9QeXRob24vZHlubG9hZF9zaGxpYi5jCisrKyBiL1B5dGhvbi9keW5sb2FkX3NobGliLmMKQEAgLTE4LDEwICsxOCw2IEBACiAKICNpZmRlZiBIQVZFX0RMRkNOX0gKICNpbmNsdWRlIDxkbGZjbi5oPgotI2Vsc2UKLSNpZiBkZWZpbmVkKFBZT1NfT1MyKSAmJiBkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgImRsZmNuLmgiCi0jZW5kaWYKICNlbmRpZgogCiAjaWYgKGRlZmluZWQoX19PcGVuQlNEX18pIHx8IGRlZmluZWQoX19OZXRCU0RfXykpICYmICFkZWZpbmVkKF9fRUxGX18pCkBAIC00MCwzMCArMzYsMTYgQEAKICNpZmRlZiBfX0NZR1dJTl9fCiAgICAgIi5kbGwiLAogI2Vsc2UgIC8qICFfX0NZR1dJTl9fICovCi0jaWYgZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykKLSAgICAiLnB5ZCIsCi0gICAgIi5kbGwiLAotI2Vsc2UgIC8qICEoZGVmaW5lZChQWU9TX09TMikgJiYgZGVmaW5lZChQWUNDX0dDQykpICovCi0jaWZkZWYgX19WTVMKLSAgICAiLmV4ZSIsCi0gICAgIi5FWEUiLAotI2Vsc2UgIC8qICFfX1ZNUyAqLwogICAgICIuIiBTT0FCSSAiLnNvIiwKICAgICAiLmFiaSIgUFlUSE9OX0FCSV9TVFJJTkcgIi5zbyIsCiAgICAgIi5zbyIsCi0jZW5kaWYgIC8qIF9fVk1TICovCi0jZW5kaWYgIC8qIGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpICovCiAjZW5kaWYgIC8qIF9fQ1lHV0lOX18gKi8KICAgICBOVUxMLAogfTsKIAogc3RhdGljIHN0cnVjdCB7CiAgICAgZGV2X3QgZGV2OwotI2lmZGVmIF9fVk1TCi0gICAgaW5vX3QgaW5vWzNdOwotI2Vsc2UKICAgICBpbm9fdCBpbm87Ci0jZW5kaWYKICAgICB2b2lkICpoYW5kbGU7CiB9IGhhbmRsZXNbMTI4XTsKIHN0YXRpYyBpbnQgbmhhbmRsZXMgPSAwOwpAQCAtMTA0LDQ3ICs4NiwzOSBAQAogICAgICAgICB9CiAgICAgICAgIGlmIChuaGFuZGxlcyA8IDEyOCkgewogICAgICAgICAgICAgaGFuZGxlc1tuaGFuZGxlc10uZGV2ID0gc3RhdGIuc3RfZGV2OwotI2lmZGVmIF9fVk1TCi0gICAgICAgICAgICBoYW5kbGVzW25oYW5kbGVzXS5pbm9bMF0gPSBzdGF0Yi5zdF9pbm9bMF07Ci0gICAgICAgICAgICBoYW5kbGVzW25oYW5kbGVzXS5pbm9bMV0gPSBzdGF0Yi5zdF9pbm9bMV07Ci0gICAgICAgICAgICBoYW5kbGVzW25oYW5kbGVzXS5pbm9bMl0gPSBzdGF0Yi5zdF9pbm9bMl07Ci0jZWxzZQogICAgICAgICAgICAgaGFuZGxlc1tuaGFuZGxlc10uaW5vID0gc3RhdGIuc3RfaW5vOwotI2VuZGlmCiAgICAgICAgIH0KICAgICB9CiAKLSNpZiAhKGRlZmluZWQoUFlPU19PUzIpICYmIGRlZmluZWQoUFlDQ19HQ0MpKQogICAgIGRsb3BlbmZsYWdzID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwLT5kbG9wZW5mbGFnczsKLSNlbmRpZgotCi0jaWZkZWYgX19WTVMKLSAgICAvKiBWTVMgY3VycmVudGx5IGRvbid0IGFsbG93IGEgcGF0aG5hbWUsIHVzZSBhIGxvZ2ljYWwgbmFtZSBpbnN0ZWFkICovCi0gICAgLyogQ29uY2F0ZW5hdGUgJ3B5dGhvbl9tb2R1bGVfJyBhbmQgc2hvcnRuYW1lICovCi0gICAgLyogc28gImltcG9ydCB2bXMuYmFyIiB3aWxsIHVzZSB0aGUgbG9naWNhbCBweXRob25fbW9kdWxlX2JhciAqLwotICAgIC8qIEFzIEMgbW9kdWxlIHVzZSBvbmx5IG9uZSBuYW1lIHNwYWNlIHRoaXMgaXMgcHJvYmFibHkgbm90IGEgKi8KLSAgICAvKiBpbXBvcnRhbnQgbGltaXRhdGlvbiAqLwotICAgIFB5T1Nfc25wcmludGYocGF0aGJ1Ziwgc2l6ZW9mKHBhdGhidWYpLCAicHl0aG9uX21vZHVsZV8lLS4yMDBzIiwKLSAgICAgICAgICAgICAgICAgIHNob3J0bmFtZSk7Ci0gICAgcGF0aG5hbWUgPSBwYXRoYnVmOwotI2VuZGlmCiAKICAgICBoYW5kbGUgPSBkbG9wZW4ocGF0aG5hbWUsIGRsb3BlbmZsYWdzKTsKIAogICAgIGlmIChoYW5kbGUgPT0gTlVMTCkgewotICAgICAgICBQeU9iamVjdCAqbW9kX25hbWUgPSBOVUxMOwotICAgICAgICBQeU9iamVjdCAqcGF0aCA9IE5VTEw7Ci0gICAgICAgIFB5T2JqZWN0ICplcnJvcl9vYiA9IE5VTEw7CisgICAgICAgIFB5T2JqZWN0ICptb2RfbmFtZTsKKyAgICAgICAgUHlPYmplY3QgKnBhdGg7CisgICAgICAgIFB5T2JqZWN0ICplcnJvcl9vYjsKICAgICAgICAgY29uc3QgY2hhciAqZXJyb3IgPSBkbGVycm9yKCk7CiAgICAgICAgIGlmIChlcnJvciA9PSBOVUxMKQogICAgICAgICAgICAgZXJyb3IgPSAidW5rbm93biBkbG9wZW4oKSBlcnJvciI7CiAgICAgICAgIGVycm9yX29iID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoZXJyb3IpOwotICAgICAgICBwYXRoID0gUHlVbmljb2RlX0Zyb21TdHJpbmcocGF0aG5hbWUpOworICAgICAgICBpZiAoZXJyb3Jfb2IgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBtb2RfbmFtZSA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHNob3J0bmFtZSk7CisgICAgICAgIGlmIChtb2RfbmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYoZXJyb3Jfb2IpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcGF0aCA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKHBhdGhuYW1lKTsKKyAgICAgICAgaWYgKHBhdGggPT0gTlVMTCkgeworICAgICAgICAgICAgUHlfREVDUkVGKGVycm9yX29iKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihtb2RfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgICAgICBQeUVycl9TZXRJbXBvcnRFcnJvcihlcnJvcl9vYiwgbW9kX25hbWUsIHBhdGgpOwotICAgICAgICBQeV9YREVDUkVGKGVycm9yX29iKTsKLSAgICAgICAgUHlfWERFQ1JFRihwYXRoKTsKLSAgICAgICAgUHlfWERFQ1JFRihtb2RfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihlcnJvcl9vYik7CisgICAgICAgIFB5X0RFQ1JFRihtb2RfbmFtZSk7CisgICAgICAgIFB5X0RFQ1JFRihwYXRoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGlmIChmcCAhPSBOVUxMICYmIG5oYW5kbGVzIDwgMTI4KQpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Vycm9ycy5jIGIvUHl0aG9uL2Vycm9ycy5jCmluZGV4IDYyNmIxNmUuLmIwYWQ5YWEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9lcnJvcnMuYworKysgYi9QeXRob24vZXJyb3JzLmMKQEAgLTIwLDYgKzIwLDkgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKGJ1aWx0aW5zKTsKK19QeV9JREVOVElGSUVSKHN0ZGVycik7CisKIAogdm9pZAogUHlFcnJfUmVzdG9yZShQeU9iamVjdCAqdHlwZSwgUHlPYmplY3QgKnZhbHVlLCBQeU9iamVjdCAqdHJhY2ViYWNrKQpAQCAtNzEsNiArNzQsMTEgQEAKICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwgfHwgIVB5RXhjZXB0aW9uSW5zdGFuY2VfQ2hlY2sodmFsdWUpKSB7CiAgICAgICAgICAgICAvKiBXZSBtdXN0IG5vcm1hbGl6ZSB0aGUgdmFsdWUgcmlnaHQgbm93ICovCiAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywgKmZpeGVkX3ZhbHVlOworI2lmZGVmIFB5X0RFQlVHCisgICAgICAgICAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBQeUV2YWxfRXZhbEZyYW1lRXgoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbgorICAgICAgICAgICAgICAgZXJyb3IgaWYgYW4gZXhjZXB0aW9uIGlzIHNldCB3aGVuIGl0IGlzIGNhbGxlZCAqLworICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyNlbmRpZgogICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwgfHwgdmFsdWUgPT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICBhcmdzID0gUHlUdXBsZV9OZXcoMCk7CiAgICAgICAgICAgICBlbHNlIGlmIChQeVR1cGxlX0NoZWNrKHZhbHVlKSkgewpAQCAtMTEyLDYgKzEyMCwyMCBAQAogICAgIFB5RXJyX1Jlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOwogfQogCisvKiBTZXQgYSBrZXkgZXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50LCB3cmFwcGluZyBpdCBpbiBhCisgKiB0dXBsZSBhdXRvbWF0aWNhbGx5IHNvIHRoYXQgdHVwbGUga2V5cyBhcmUgbm90IHVucGFja2VkIGFzIHRoZQorICogZXhjZXB0aW9uIGFyZ3VtZW50cy4gKi8KK3ZvaWQKK19QeUVycl9TZXRLZXlFcnJvcihQeU9iamVjdCAqYXJnKQoreworICAgIFB5T2JqZWN0ICp0dXA7CisgICAgdHVwID0gUHlUdXBsZV9QYWNrKDEsIGFyZyk7CisgICAgaWYgKCF0dXApCisgICAgICAgIHJldHVybjsgLyogY2FsbGVyIHdpbGwgZXhwZWN0IGVycm9yIHRvIGJlIHNldCBhbnl3YXkgKi8KKyAgICBQeUVycl9TZXRPYmplY3QoUHlFeGNfS2V5RXJyb3IsIHR1cCk7CisgICAgUHlfREVDUkVGKHR1cCk7Cit9CisKIHZvaWQKIFB5RXJyX1NldE5vbmUoUHlPYmplY3QgKmV4Y2VwdGlvbikKIHsKQEAgLTIyNywxMiArMjQ5LDIxIEBACiAgICAgICAgdmFsdWUgd2lsbCBiZSBhbiBpbnN0YW5jZS4KICAgICAqLwogICAgIGlmIChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHR5cGUpKSB7CisgICAgICAgIGludCBpc19zdWJjbGFzczsKKyAgICAgICAgaWYgKGluY2xhc3MpIHsKKyAgICAgICAgICAgIGlzX3N1YmNsYXNzID0gUHlPYmplY3RfSXNTdWJjbGFzcyhpbmNsYXNzLCB0eXBlKTsKKyAgICAgICAgICAgIGlmIChpc19zdWJjbGFzcyA8IDApCisgICAgICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzX3N1YmNsYXNzID0gMDsKKwogICAgICAgICAvKiBpZiB0aGUgdmFsdWUgd2FzIG5vdCBhbiBpbnN0YW5jZSwgb3IgaXMgbm90IGFuIGluc3RhbmNlCiAgICAgICAgICAgIHdob3NlIGNsYXNzIGlzIChvciBpcyBkZXJpdmVkIGZyb20pIHR5cGUsIHRoZW4gdXNlIHRoZQogICAgICAgICAgICB2YWx1ZSBhcyBhbiBhcmd1bWVudCB0byBpbnN0YW50aWF0aW9uIG9mIHRoZSB0eXBlCiAgICAgICAgICAgIGNsYXNzLgogICAgICAgICAqLwotICAgICAgICBpZiAoIWluY2xhc3MgfHwgIVB5T2JqZWN0X0lzU3ViY2xhc3MoaW5jbGFzcywgdHlwZSkpIHsKKyAgICAgICAgaWYgKCFpbmNsYXNzIHx8ICFpc19zdWJjbGFzcykgewogICAgICAgICAgICAgUHlPYmplY3QgKmFyZ3MsICpyZXM7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBQeV9Ob25lKQpAQCAtMzUzLDYgKzM4NCwzMCBAQAogICAgIFB5X1hERUNSRUYob2xkdHJhY2ViYWNrKTsKIH0KIAorLyogTGlrZSBQeUVycl9SZXN0b3JlKCksIGJ1dCBpZiBhbiBleGNlcHRpb24gaXMgYWxyZWFkeSBzZXQsCisgICBzZXQgdGhlIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGl0LgorICovCit2b2lkCitfUHlFcnJfQ2hhaW5FeGNlcHRpb25zKFB5T2JqZWN0ICpleGMsIFB5T2JqZWN0ICp2YWwsIFB5T2JqZWN0ICp0YikKK3sKKyAgICBpZiAoZXhjID09IE5VTEwpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5T2JqZWN0ICpleGMyLCAqdmFsMiwgKnRiMjsKKyAgICAgICAgUHlFcnJfRmV0Y2goJmV4YzIsICZ2YWwyLCAmdGIyKTsKKyAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMsICZ2YWwsICZ0Yik7CisgICAgICAgIFB5X0RFQ1JFRihleGMpOworICAgICAgICBQeV9YREVDUkVGKHRiKTsKKyAgICAgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGMyLCAmdmFsMiwgJnRiMik7CisgICAgICAgIFB5RXhjZXB0aW9uX1NldENvbnRleHQodmFsMiwgdmFsKTsKKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGMyLCB2YWwyLCB0YjIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgUHlFcnJfUmVzdG9yZShleGMsIHZhbCwgdGIpOworICAgIH0KK30KKwogLyogQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIHNldCBhIHR5cGUgZXJyb3IgZXhjZXB0aW9uIGFuZCByZXR1cm4gMCAqLwogCiBpbnQKQEAgLTM2Niw2ICs0MjEsMTIgQEAKIFB5T2JqZWN0ICoKIFB5RXJyX05vTWVtb3J5KHZvaWQpCiB7CisgICAgaWYgKFB5X1RZUEUoUHlFeGNfTWVtb3J5RXJyb3IpID09IE5VTEwpIHsKKyAgICAgICAgLyogUHlFcnJfTm9NZW1vcnkoKSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlIFB5RXhjX01lbW9yeUVycm9yIGhhcyBiZWVuCisgICAgICAgICAgIGluaXRpYWxpemVkIGJ5IF9QeUV4Y19Jbml0KCkgKi8KKyAgICAgICAgUHlfRmF0YWxFcnJvcigiT3V0IG9mIG1lbW9yeSBhbmQgUHlFeGNfTWVtb3J5RXJyb3IgaXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbGl6ZWQgeWV0Iik7CisgICAgfQogICAgIFB5RXJyX1NldE5vbmUoUHlFeGNfTWVtb3J5RXJyb3IpOwogICAgIHJldHVybiBOVUxMOwogfQpAQCAtMzczLDYgKzQzNCwxMiBAQAogUHlPYmplY3QgKgogUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KFB5T2JqZWN0ICpleGMsIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdCkKIHsKKyAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0cyhleGMsIGZpbGVuYW1lT2JqZWN0LCBOVUxMKTsKK30KKworUHlPYmplY3QgKgorUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0cyhQeU9iamVjdCAqZXhjLCBQeU9iamVjdCAqZmlsZW5hbWVPYmplY3QsIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdDIpCit7CiAgICAgUHlPYmplY3QgKm1lc3NhZ2U7CiAgICAgUHlPYmplY3QgKnYsICphcmdzOwogICAgIGludCBpID0gZXJybm87CkBAIC00MjQsNyArNDkxLDcgQEAKICAgICAgICAgICAgICAgICAvKiBPbmx5IGV2ZXIgc2VlbiB0aGlzIGluIG91dC1vZi1tZW0KICAgICAgICAgICAgICAgICAgICBzaXR1YXRpb25zICovCiAgICAgICAgICAgICAgICAgc19idWYgPSBOVUxMOwotICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiV2luZG93cyBFcnJvciAweCVYIiwgaSk7CisgICAgICAgICAgICAgICAgbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJXaW5kb3dzIEVycm9yIDB4JXgiLCBpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLyogcmVtb3ZlIHRyYWlsaW5nIGNyL2xmIGFuZCBkb3RzICovCiAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbiA+IDAgJiYgKHNfYnVmW2xlbi0xXSA8PSBMJyAnIHx8IHNfYnVmW2xlbi0xXSA9PSBMJy4nKSkKQEAgLTQ0MywxMCArNTEwLDE1IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChmaWxlbmFtZU9iamVjdCAhPSBOVUxMKQotICAgICAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKGlPTykiLCBpLCBtZXNzYWdlLCBmaWxlbmFtZU9iamVjdCk7Ci0gICAgZWxzZQorICAgIGlmIChmaWxlbmFtZU9iamVjdCAhPSBOVUxMKSB7CisgICAgICAgIGlmIChmaWxlbmFtZU9iamVjdDIgIT0gTlVMTCkKKyAgICAgICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlKCIoaU9PaU8pIiwgaSwgbWVzc2FnZSwgZmlsZW5hbWVPYmplY3QsIDAsIGZpbGVuYW1lT2JqZWN0Mik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlKCIoaU9PKSIsIGksIG1lc3NhZ2UsIGZpbGVuYW1lT2JqZWN0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBhc3NlcnQoZmlsZW5hbWVPYmplY3QyID09IE5VTEwpOwogICAgICAgICBhcmdzID0gUHlfQnVpbGRWYWx1ZSgiKGlPKSIsIGksIG1lc3NhZ2UpOworICAgIH0KICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAKICAgICBpZiAoYXJncyAhPSBOVUxMKSB7CkBAIC00NjMsMTIgKzUzNSwxMSBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0KIFB5T2JqZWN0ICoKIFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZShQeU9iamVjdCAqZXhjLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKIHsKICAgICBQeU9iamVjdCAqbmFtZSA9IGZpbGVuYW1lID8gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZSkgOiBOVUxMOwotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoZXhjLCBuYW1lKTsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0cyhleGMsIG5hbWUsIE5VTEwpOwogICAgIFB5X1hERUNSRUYobmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTQ4MCw3ICs1NTEsNyBAQAogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPwogICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlKGZpbGVuYW1lLCB3Y3NsZW4oZmlsZW5hbWUpKSA6CiAgICAgICAgICAgICAgTlVMTDsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0KGV4YywgbmFtZSk7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEZyb21FcnJub1dpdGhGaWxlbmFtZU9iamVjdHMoZXhjLCBuYW1lLCBOVUxMKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC00ODksNyArNTYwLDcgQEAKIFB5T2JqZWN0ICoKIFB5RXJyX1NldEZyb21FcnJubyhQeU9iamVjdCAqZXhjKQogewotICAgIHJldHVybiBQeUVycl9TZXRGcm9tRXJybm9XaXRoRmlsZW5hbWVPYmplY3QoZXhjLCBOVUxMKTsKKyAgICByZXR1cm4gUHlFcnJfU2V0RnJvbUVycm5vV2l0aEZpbGVuYW1lT2JqZWN0cyhleGMsIE5VTEwsIE5VTEwpOwogfQogCiAjaWZkZWYgTVNfV0lORE9XUwpAQCAtNDk5LDYgKzU3MCwxNiBAQAogICAgIGludCBpZXJyLAogICAgIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdCkKIHsKKyAgICByZXR1cm4gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKGV4YywgaWVyciwKKyAgICAgICAgZmlsZW5hbWVPYmplY3QsIE5VTEwpOworfQorCitQeU9iamVjdCAqUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKAorICAgIFB5T2JqZWN0ICpleGMsCisgICAgaW50IGllcnIsCisgICAgUHlPYmplY3QgKmZpbGVuYW1lT2JqZWN0LAorICAgIFB5T2JqZWN0ICpmaWxlbmFtZU9iamVjdDIpCit7CiAgICAgaW50IGxlbjsKICAgICBXQ0hBUiAqc19idWYgPSBOVUxMOyAvKiBGcmVlIHZpYSBMb2NhbEZyZWUgKi8KICAgICBQeU9iamVjdCAqbWVzc2FnZTsKQEAgLTUxOSw3ICs2MDAsNyBAQAogICAgICAgICBOVUxMKTsgICAgICAgICAgLyogbm8gYXJncyAqLwogICAgIGlmIChsZW49PTApIHsKICAgICAgICAgLyogT25seSBzZWVuIHRoaXMgaW4gb3V0IG9mIG1lbSBzaXR1YXRpb25zICovCi0gICAgICAgIG1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiV2luZG93cyBFcnJvciAweCVYIiwgZXJyKTsKKyAgICAgICAgbWVzc2FnZSA9IFB5VW5pY29kZV9Gcm9tRm9ybWF0KCJXaW5kb3dzIEVycm9yIDB4JXgiLCBlcnIpOwogICAgICAgICBzX2J1ZiA9IE5VTEw7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogcmVtb3ZlIHRyYWlsaW5nIGNyL2xmIGFuZCBkb3RzICovCkBAIC01MzQsMTEgKzYxNSwxNSBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoZmlsZW5hbWVPYmplY3QgPT0gTlVMTCkKLSAgICAgICAgZmlsZW5hbWVPYmplY3QgPSBQeV9Ob25lOwotICAgIC8qIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmb3IgcGFzc2luZyBhIFdpbmRvd3MgZXJyb3IgY29kZS4KKyAgICBpZiAoZmlsZW5hbWVPYmplY3QgPT0gTlVMTCkgeworICAgICAgICBhc3NlcnQoZmlsZW5hbWVPYmplY3QyID09IE5VTEwpOworICAgICAgICBmaWxlbmFtZU9iamVjdCA9IGZpbGVuYW1lT2JqZWN0MiA9IFB5X05vbmU7CisgICAgfQorICAgIGVsc2UgaWYgKGZpbGVuYW1lT2JqZWN0MiA9PSBOVUxMKQorICAgICAgICBmaWxlbmFtZU9iamVjdDIgPSBQeV9Ob25lOworICAgIC8qIFRoaXMgaXMgdGhlIGNvbnN0cnVjdG9yIHNpZ25hdHVyZSBmb3IgT1NFcnJvci4KICAgICAgICBUaGUgUE9TSVggdHJhbnNsYXRpb24gd2lsbCBiZSBmaWd1cmVkIG91dCBieSB0aGUgY29uc3RydWN0b3IuICovCi0gICAgYXJncyA9IFB5X0J1aWxkVmFsdWUoIihpT09pKSIsIDAsIG1lc3NhZ2UsIGZpbGVuYW1lT2JqZWN0LCBlcnIpOworICAgIGFyZ3MgPSBQeV9CdWlsZFZhbHVlKCIoaU9PaU8pIiwgMCwgbWVzc2FnZSwgZmlsZW5hbWVPYmplY3QsIGVyciwgZmlsZW5hbWVPYmplY3QyKTsKICAgICBQeV9ERUNSRUYobWVzc2FnZSk7CiAKICAgICBpZiAoYXJncyAhPSBOVUxMKSB7CkBAIC01NTksOSArNjQ0LDEwIEBACiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpIDogTlVMTDsKLSAgICBQeU9iamVjdCAqcmV0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoZXhjLAorICAgIFB5T2JqZWN0ICpyZXQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoZXhjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmV0OwogfQpAQCAtNTc0LDkgKzY2MCwxMCBAQAogICAgIFB5T2JqZWN0ICpuYW1lID0gZmlsZW5hbWUgPwogICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0Zyb21Vbmljb2RlKGZpbGVuYW1lLCB3Y3NsZW4oZmlsZW5hbWUpKSA6CiAgICAgICAgICAgICAgTlVMTDsKLSAgICBQeU9iamVjdCAqcmV0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoZXhjLAorICAgIFB5T2JqZWN0ICpyZXQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdHMoZXhjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmV0OwogfQpAQCAtNTg4LDE3ICs2NzUsMTggQEAKIAogUHlPYmplY3QgKlB5RXJyX1NldEZyb21XaW5kb3dzRXJyKGludCBpZXJyKQogewotICAgIHJldHVybiBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZShQeUV4Y19XaW5kb3dzRXJyb3IsCisgICAgcmV0dXJuIFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lKFB5RXhjX09TRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGllcnIsIE5VTEwpOwogfQorCiBQeU9iamVjdCAqUHlFcnJfU2V0RnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWUoCiAgICAgaW50IGllcnIsCiAgICAgY29uc3QgY2hhciAqZmlsZW5hbWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpIDogTlVMTDsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3QoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXhjX1dpbmRvd3NFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgbmFtZSk7CisgICAgUHlPYmplY3QgKnJlc3VsdCA9IFB5RXJyX1NldEV4Y0Zyb21XaW5kb3dzRXJyV2l0aEZpbGVuYW1lT2JqZWN0cygKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfT1NFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWVyciwgbmFtZSwgTlVMTCk7CiAgICAgUHlfWERFQ1JFRihuYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtNjEwLDkgKzY5OCw5IEBACiAgICAgUHlPYmplY3QgKm5hbWUgPSBmaWxlbmFtZSA/CiAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVVuaWNvZGUoZmlsZW5hbWUsIHdjc2xlbihmaWxlbmFtZSkpIDoKICAgICAgICAgICAgICBOVUxMOwotICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUVycl9TZXRFeGNGcm9tV2luZG93c0VycldpdGhGaWxlbmFtZU9iamVjdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlFeGNfV2luZG93c0Vycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBuYW1lKTsKKyAgICBQeU9iamVjdCAqcmVzdWx0ID0gUHlFcnJfU2V0RXhjRnJvbVdpbmRvd3NFcnJXaXRoRmlsZW5hbWVPYmplY3RzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUV4Y19PU0Vycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZXJyLCBuYW1lLCBOVUxMKTsKICAgICBQeV9YREVDUkVGKG5hbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC02NDYsOCArNzM0LDExIEBACiAKICAgICBQeV9JTkNSRUYobXNnKTsKICAgICBQeVR1cGxlX1NFVF9JVEVNKGFyZ3MsIDAsIG1zZyk7Ci0gICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAibmFtZSIsIG5hbWUpOwotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGt3YXJncywgInBhdGgiLCBwYXRoKTsKKworICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhrd2FyZ3MsICJuYW1lIiwgbmFtZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoUHlEaWN0X1NldEl0ZW1TdHJpbmcoa3dhcmdzLCAicGF0aCIsIHBhdGgpIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBlcnJvciA9IFB5T2JqZWN0X0NhbGwoUHlFeGNfSW1wb3J0RXJyb3IsIGFyZ3MsIGt3YXJncyk7CiAgICAgaWYgKGVycm9yICE9IE5VTEwpIHsKQEAgLTY3NSw2ICs3NjYsNyBAQAogdm9pZAogUHlFcnJfQmFkSW50ZXJuYWxDYWxsKHZvaWQpCiB7CisgICAgYXNzZXJ0KDAgJiYgImJhZCBhcmd1bWVudCB0byBpbnRlcm5hbCBmdW5jdGlvbiIpOwogICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeXN0ZW1FcnJvciwKICAgICAgICAgICAgICAgICAgImJhZCBhcmd1bWVudCB0byBpbnRlcm5hbCBmdW5jdGlvbiIpOwogfQpAQCAtNjk0LDYgKzc4NiwxMiBAQAogICAgIHZhX3N0YXJ0KHZhcmdzKTsKICNlbmRpZgogCisjaWZkZWYgUHlfREVCVUcKKyAgICAvKiBpbiBkZWJ1ZyBtb2RlLCBQeUV2YWxfRXZhbEZyYW1lRXgoKSBmYWlscyB3aXRoIGFuIGFzc2VydGlvbiBlcnJvcgorICAgICAgIGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQgd2hlbiBpdCBpcyBjYWxsZWQgKi8KKyAgICBQeUVycl9DbGVhcigpOworI2VuZGlmCisKICAgICBzdHJpbmcgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdFYoZm9ybWF0LCB2YXJncyk7CiAgICAgUHlFcnJfU2V0T2JqZWN0KGV4Y2VwdGlvbiwgc3RyaW5nKTsKICAgICBQeV9YREVDUkVGKHN0cmluZyk7CkBAIC03OTUsNjAgKzg5Myw4NCBAQAogewogICAgIF9QeV9JREVOVElGSUVSKF9fbW9kdWxlX18pOwogICAgIFB5T2JqZWN0ICpmLCAqdCwgKnYsICp0YjsKLSAgICBQeUVycl9GZXRjaCgmdCwgJnYsICZ0Yik7Ci0gICAgZiA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7Ci0gICAgaWYgKGYgIT0gTlVMTCAmJiBmICE9IFB5X05vbmUpIHsKLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCJFeGNlcHRpb24gIiwgZik7Ci0gICAgICAgIGlmICh0KSB7Ci0gICAgICAgICAgICBQeU9iamVjdCogbW9kdWxlTmFtZTsKLSAgICAgICAgICAgIGNoYXIqIGNsYXNzTmFtZTsKLSAgICAgICAgICAgIGFzc2VydChQeUV4Y2VwdGlvbkNsYXNzX0NoZWNrKHQpKTsKLSAgICAgICAgICAgIGNsYXNzTmFtZSA9IFB5RXhjZXB0aW9uQ2xhc3NfTmFtZSh0KTsKLSAgICAgICAgICAgIGlmIChjbGFzc05hbWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNoYXIgKmRvdCA9IHN0cnJjaHIoY2xhc3NOYW1lLCAnLicpOwotICAgICAgICAgICAgICAgIGlmIChkb3QgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lID0gZG90KzE7Ci0gICAgICAgICAgICB9CisgICAgUHlPYmplY3QgKm1vZHVsZU5hbWUgPSBOVUxMOworICAgIGNoYXIqIGNsYXNzTmFtZTsKIAotICAgICAgICAgICAgbW9kdWxlTmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQodCwgJlB5SWRfX19tb2R1bGVfXyk7Ci0gICAgICAgICAgICBpZiAobW9kdWxlTmFtZSA9PSBOVUxMKQotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiPHVua25vd24+IiwgZik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBjaGFyKiBtb2RzdHIgPSBfUHlVbmljb2RlX0FzU3RyaW5nKG1vZHVsZU5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChtb2RzdHIgJiYKLSAgICAgICAgICAgICAgICAgICAgc3RyY21wKG1vZHN0ciwgImJ1aWx0aW5zIikgIT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZyhtb2RzdHIsIGYpOwotICAgICAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIi4iLCBmKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09IE5VTEwpCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoY2xhc3NOYW1lLCBmKTsKLSAgICAgICAgICAgIGlmICh2ICYmIHYgIT0gUHlfTm9uZSkgewotICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiOiAiLCBmKTsKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QodiwgZiwgMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9YREVDUkVGKG1vZHVsZU5hbWUpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChvYmopIHsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiIGluICIsIGYpOwotICAgICAgICAgICAgUHlGaWxlX1dyaXRlT2JqZWN0KG9iaiwgZiwgMCk7Ci0gICAgICAgIH0KLSAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKCIgaWdub3JlZFxuIiwgZik7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7IC8qIEp1c3QgaW4gY2FzZSAqLworICAgIFB5RXJyX0ZldGNoKCZ0LCAmdiwgJnRiKTsKKworICAgIGYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKKyAgICBpZiAoZiA9PSBOVUxMIHx8IGYgPT0gUHlfTm9uZSkKKyAgICAgICAgZ290byBkb25lOworCisgICAgaWYgKG9iaikgeworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJFeGNlcHRpb24gaWdub3JlZCBpbjogIiwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KG9iaiwgZiwgMCkgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCJcbiIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CisKKyAgICBpZiAoUHlUcmFjZUJhY2tfUHJpbnQodGIsIGYpIDwgMCkKKyAgICAgICAgZ290byBkb25lOworCisgICAgaWYgKCF0KQorICAgICAgICBnb3RvIGRvbmU7CisKKyAgICBhc3NlcnQoUHlFeGNlcHRpb25DbGFzc19DaGVjayh0KSk7CisgICAgY2xhc3NOYW1lID0gUHlFeGNlcHRpb25DbGFzc19OYW1lKHQpOworICAgIGlmIChjbGFzc05hbWUgIT0gTlVMTCkgeworICAgICAgICBjaGFyICpkb3QgPSBzdHJyY2hyKGNsYXNzTmFtZSwgJy4nKTsKKyAgICAgICAgaWYgKGRvdCAhPSBOVUxMKQorICAgICAgICAgICAgY2xhc3NOYW1lID0gZG90KzE7CisgICAgfQorCisgICAgbW9kdWxlTmFtZSA9IF9QeU9iamVjdF9HZXRBdHRySWQodCwgJlB5SWRfX19tb2R1bGVfXyk7CisgICAgaWYgKG1vZHVsZU5hbWUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoX1B5VW5pY29kZV9Db21wYXJlV2l0aElkKG1vZHVsZU5hbWUsICZQeUlkX2J1aWx0aW5zKSAhPSAwKSB7CisgICAgICAgICAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KG1vZHVsZU5hbWUsIGYsIFB5X1BSSU5UX1JBVykgPCAwKQorICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIi4iLCBmKSA8IDApCisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjbGFzc05hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKSA8IDApCisgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKGNsYXNzTmFtZSwgZikgPCAwKQorICAgICAgICAgICAgZ290byBkb25lOworICAgIH0KKworICAgIGlmICh2ICYmIHYgIT0gUHlfTm9uZSkgeworICAgICAgICBpZiAoUHlGaWxlX1dyaXRlU3RyaW5nKCI6ICIsIGYpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgaWYgKFB5RmlsZV9Xcml0ZU9iamVjdCh2LCBmLCBQeV9QUklOVF9SQVcpIDwgMCkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisgICAgaWYgKFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKSA8IDApCisgICAgICAgIGdvdG8gZG9uZTsKKworZG9uZToKKyAgICBQeV9YREVDUkVGKG1vZHVsZU5hbWUpOwogICAgIFB5X1hERUNSRUYodCk7CiAgICAgUHlfWERFQ1JFRih2KTsKICAgICBQeV9YREVDUkVGKHRiKTsKKyAgICBQeUVycl9DbGVhcigpOyAvKiBKdXN0IGluIGNhc2UgKi8KIH0KIAogZXh0ZXJuIFB5T2JqZWN0ICpQeU1vZHVsZV9HZXRXYXJuaW5nc01vZHVsZSh2b2lkKTsKIAogCiB2b2lkCi1QeUVycl9TeW50YXhMb2NhdGlvbihjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubykgeworUHlFcnJfU3ludGF4TG9jYXRpb24oY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCit7CiAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgbGluZW5vLCAtMSk7CiB9CiAKQEAgLTg1OCw3ICs5ODAsNyBAQAogICAgdG8gbWFrZSBwcmludGluZyBvZiBleGNlcHRpb25zIGJlbGlldmUgaXQgaXMgYSBzeW50YXggZXJyb3IuICovCiAKIHZvaWQKLVB5RXJyX1N5bnRheExvY2F0aW9uRXgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8sIGludCBjb2xfb2Zmc2V0KQorUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgbGluZW5vLCBpbnQgY29sX29mZnNldCkKIHsKICAgICBQeU9iamVjdCAqZXhjLCAqdiwgKnRiLCAqdG1wOwogICAgIF9QeV9JREVOVElGSUVSKGZpbGVuYW1lKTsKQEAgLTg5MiwxNiArMTAxNCwxMCBAQAogICAgICAgICB9CiAgICAgfQogICAgIGlmIChmaWxlbmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgIHRtcCA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOwotICAgICAgICBpZiAodG1wID09IE5VTEwpCisgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX2ZpbGVuYW1lLCBmaWxlbmFtZSkpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKHYsICZQeUlkX2ZpbGVuYW1lLCB0bXApKQotICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodG1wKTsKLSAgICAgICAgfQogCi0gICAgICAgIHRtcCA9IFB5RXJyX1Byb2dyYW1UZXh0KGZpbGVuYW1lLCBsaW5lbm8pOworICAgICAgICB0bXAgPSBQeUVycl9Qcm9ncmFtVGV4dE9iamVjdChmaWxlbmFtZSwgbGluZW5vKTsKICAgICAgICAgaWYgKHRtcCkgewogICAgICAgICAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQodiwgJlB5SWRfdGV4dCwgdG1wKSkKICAgICAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtOTMxLDIyICsxMDQ3LDMzIEBACiAgICAgUHlFcnJfUmVzdG9yZShleGMsIHYsIHRiKTsKIH0KIAordm9pZAorUHlFcnJfU3ludGF4TG9jYXRpb25FeChjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGxpbmVubywgaW50IGNvbF9vZmZzZXQpCit7CisgICAgUHlPYmplY3QgKmZpbGVvYmo7CisgICAgaWYgKGZpbGVuYW1lICE9IE5VTEwpIHsKKyAgICAgICAgZmlsZW9iaiA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWUpOworICAgICAgICBpZiAoZmlsZW9iaiA9PSBOVUxMKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBmaWxlb2JqID0gTlVMTDsKKyAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlb2JqLCBsaW5lbm8sIGNvbF9vZmZzZXQpOworICAgIFB5X1hERUNSRUYoZmlsZW9iaik7Cit9CisKIC8qIEF0dGVtcHQgdG8gbG9hZCB0aGUgbGluZSBvZiB0ZXh0IHRoYXQgdGhlIGV4Y2VwdGlvbiByZWZlcnMgdG8uICBJZiBpdAogICAgZmFpbHMsIGl0IHdpbGwgcmV0dXJuIE5VTEwgYnV0IHdpbGwgbm90IHNldCBhbiBleGNlcHRpb24uCiAKICAgIFhYWCBUaGUgZnVuY3Rpb25hbGl0eSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHF1aXRlIHNpbWlsYXIgdG8gdGhlCiAgICBmdW5jdGlvbmFsaXR5IGluIHRiX2Rpc3BsYXlsaW5lKCkgaW4gdHJhY2ViYWNrLmMuICovCiAKLVB5T2JqZWN0ICoKLVB5RXJyX1Byb2dyYW1UZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQorc3RhdGljIFB5T2JqZWN0ICoKK2Vycl9wcm9ncmFtdGV4dChGSUxFICpmcCwgaW50IGxpbmVubykKIHsKLSAgICBGSUxFICpmcDsKICAgICBpbnQgaTsKICAgICBjaGFyIGxpbmVidWZbMTAwMF07CiAKLSAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCAqZmlsZW5hbWUgPT0gJ1wwJyB8fCBsaW5lbm8gPD0gMCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZnAgPSBmb3BlbihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOwogICAgIGlmIChmcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZW5vOyBpKyspIHsKQEAgLTk3Nyw2ICsxMTA0LDI2IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK1B5T2JqZWN0ICoKK1B5RXJyX1Byb2dyYW1UZXh0KGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZW5vKQoreworICAgIEZJTEUgKmZwOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMIHx8ICpmaWxlbmFtZSA9PSAnXDAnIHx8IGxpbmVubyA8PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBmcCA9IF9QeV9mb3BlbihmaWxlbmFtZSwgInIiIFBZX1NURElPVEVYVE1PREUpOworICAgIHJldHVybiBlcnJfcHJvZ3JhbXRleHQoZnAsIGxpbmVubyk7Cit9CisKK1B5T2JqZWN0ICoKK1B5RXJyX1Byb2dyYW1UZXh0T2JqZWN0KFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IGxpbmVubykKK3sKKyAgICBGSUxFICpmcDsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCB8fCBsaW5lbm8gPD0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZnAgPSBfUHlfZm9wZW5fb2JqKGZpbGVuYW1lLCAiciIgUFlfU1RESU9URVhUTU9ERSk7CisgICAgcmV0dXJuIGVycl9wcm9ncmFtdGV4dChmcCwgbGluZW5vKTsKK30KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi9maWxldXRpbHMuYyBiL1B5dGhvbi9maWxldXRpbHMuYwppbmRleCA1YzY2ZWNmLi4zMTY4OWMwIDEwMDY0NAotLS0gYS9QeXRob24vZmlsZXV0aWxzLmMKKysrIGIvUHl0aG9uL2ZpbGV1dGlscy5jCkBAIC0xMCwyMCArMTAsMzkgQEAKICNpbmNsdWRlIDxsYW5naW5mby5oPgogI2VuZGlmCiAKKyNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogSEFWRV9GQ05UTF9IICovCisKICNpZmRlZiBfX0FQUExFX18KIGV4dGVybiB3Y2hhcl90KiBfUHlfRGVjb2RlVVRGOF9zdXJyb2dhdGVlc2NhcGUoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBzaXplKTsKICNlbmRpZgogCisjaWZkZWYgT19DTE9FWEVDCisvKiBEb2VzIG9wZW4oKSBzdXBwb3J0IHRoZSBPX0NMT0VYRUMgZmxhZz8gUG9zc2libGUgdmFsdWVzOgorCisgICAtMTogdW5rbm93bgorICAgIDA6IG9wZW4oKSBpZ25vcmVzIE9fQ0xPRVhFQyBmbGFnLCBleDogTGludXgga2VybmVsIG9sZGVyIHRoYW4gMi42LjIzCisgICAgMTogb3BlbigpIHN1cHBvcnRzIE9fQ0xPRVhFQyBmbGFnLCBjbG9zZS1vbi1leGVjIGlzIHNldAorCisgICBUaGUgZmxhZyBpcyB1c2VkIGJ5IF9QeV9vcGVuKCksIGlvLkZpbGVJTyBhbmQgb3Mub3BlbigpICovCitpbnQgX1B5X29wZW5fY2xvZXhlY193b3JrcyA9IC0xOworI2VuZGlmCisKIFB5T2JqZWN0ICoKIF9QeV9kZXZpY2VfZW5jb2RpbmcoaW50IGZkKQogewotI2lmIGRlZmluZWQoTVNfV0lORE9XUykgfHwgZGVmaW5lZChNU19XSU42NCkKKyNpZiBkZWZpbmVkKE1TX1dJTkRPV1MpCiAgICAgVUlOVCBjcDsKICNlbmRpZgogICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSB8fCAhaXNhdHR5KGZkKSkgewogICAgICAgICBQeV9SRVRVUk5fTk9ORTsKICAgICB9Ci0jaWYgZGVmaW5lZChNU19XSU5ET1dTKSB8fCBkZWZpbmVkKE1TX1dJTjY0KQorI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICAgICBpZiAoZmQgPT0gMCkKICAgICAgICAgY3AgPSBHZXRDb25zb2xlQ1AoKTsKICAgICBlbHNlIGlmIChmZCA9PSAxIHx8IGZkID09IDIpCkBAIC02MSw3ICs4MCw3IEBACiAgICB3b3JrYXJvdW5kIGlzIGFsc28gZW5hYmxlZCBvbiBlcnJvciwgZm9yIGV4YW1wbGUgaWYgZ2V0dGluZyB0aGUgbG9jYWxlCiAgICBmYWlsZWQuCiAKLSAgIFZhbHVlcyBvZiBsb2NhbGVfaXNfYXNjaWk6CisgICBWYWx1ZXMgb2YgZm9yY2VfYXNjaWk6CiAKICAgICAgICAxOiB0aGUgd29ya2Fyb3VuZCBpcyB1c2VkOiBfUHlfd2NoYXIyY2hhcigpIHVzZXMKICAgICAgICAgICBlbmNvZGVfYXNjaWlfc3Vycm9nYXRlZXNjYXBlKCkgYW5kIF9QeV9jaGFyMndjaGFyKCkgdXNlcwpAQCAtMjA1LDcgKzIyNCw3IEBACiAKICAgICBpZiAoYXJnc2l6ZSA+IFBZX1NTSVpFX1RfTUFYL3NpemVvZih3Y2hhcl90KSkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmVzID0gUHlNZW1fTWFsbG9jKGFyZ3NpemUqc2l6ZW9mKHdjaGFyX3QpKTsKKyAgICByZXMgPSBQeU1lbV9SYXdNYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghcmVzKQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMjMzLDcgKzI1Miw3IEBACiAgICBVc2UgX1B5X3djaGFyMmNoYXIoKSB0byBlbmNvZGUgdGhlIGNoYXJhY3RlciBzdHJpbmcgYmFjayB0byBhIGJ5dGUgc3RyaW5nLgogCiAgICBSZXR1cm4gYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIHdpZGUgY2hhcmFjdGVyIHN0cmluZyAodXNlCi0gICBQeU1lbV9GcmVlKCkgdG8gZnJlZSB0aGUgbWVtb3J5KSBhbmQgd3JpdGUgdGhlIG51bWJlciBvZiB3cml0dGVuIHdpZGUKKyAgIFB5TWVtX1Jhd0ZyZWUoKSB0byBmcmVlIHRoZSBtZW1vcnkpIGFuZCB3cml0ZSB0aGUgbnVtYmVyIG9mIHdyaXR0ZW4gd2lkZQogICAgY2hhcmFjdGVycyBleGNsdWRpbmcgdGhlIG51bGwgY2hhcmFjdGVyIGludG8gKnNpemUgaWYgc2l6ZSBpcyBub3QgTlVMTCwgb3IKICAgIE5VTEwgb24gZXJyb3IgKGRlY29kaW5nIG9yIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yKS4gSWYgc2l6ZSBpcyBub3QgTlVMTCwKICAgICpzaXplIGlzIHNldCB0byAoc2l6ZV90KS0xIG9uIG1lbW9yeSBlcnJvciBhbmQgKHNpemVfdCktMiBvbiBkZWNvZGluZwpAQCAtMjU4LDkgKzI3Nyw5IEBACiAgICAgd2NoYXJfdCAqcmVzOwogICAgIHNpemVfdCBhcmdzaXplOwogICAgIHNpemVfdCBjb3VudDsKKyNpZmRlZiBIQVZFX01CUlRPV0MKICAgICB1bnNpZ25lZCBjaGFyICppbjsKICAgICB3Y2hhcl90ICpvdXQ7Ci0jaWZkZWYgSEFWRV9NQlJUT1dDCiAgICAgbWJzdGF0ZV90IG1iczsKICNlbmRpZgogCkBAIC0yOTIsNyArMzExLDcgQEAKICAgICAgICAgYXJnc2l6ZSArPSAxOwogICAgICAgICBpZiAoYXJnc2l6ZSA+IFBZX1NTSVpFX1RfTUFYL3NpemVvZih3Y2hhcl90KSkKICAgICAgICAgICAgIGdvdG8gb29tOwotICAgICAgICByZXMgPSAod2NoYXJfdCAqKVB5TWVtX01hbGxvYyhhcmdzaXplKnNpemVvZih3Y2hhcl90KSk7CisgICAgICAgIHJlcyA9ICh3Y2hhcl90ICopUHlNZW1fUmF3TWFsbG9jKGFyZ3NpemUqc2l6ZW9mKHdjaGFyX3QpKTsKICAgICAgICAgaWYgKCFyZXMpCiAgICAgICAgICAgICBnb3RvIG9vbTsKICAgICAgICAgY291bnQgPSBtYnN0b3djcyhyZXMsIGFyZywgYXJnc2l6ZSk7CkBAIC0zMDEsNyArMzIwLDcgQEAKICAgICAgICAgICAgIC8qIE9ubHkgdXNlIHRoZSByZXN1bHQgaWYgaXQgY29udGFpbnMgbm8KICAgICAgICAgICAgICAgIHN1cnJvZ2F0ZSBjaGFyYWN0ZXJzLiAqLwogICAgICAgICAgICAgZm9yICh0bXAgPSByZXM7ICp0bXAgIT0gMCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICgqdG1wIDwgMHhkODAwIHx8ICp0bXAgPiAweGRmZmYpOyB0bXArKykKKyAgICAgICAgICAgICAgICAgICAgICAgICAhUHlfVU5JQ09ERV9JU19TVVJST0dBVEUoKnRtcCk7IHRtcCsrKQogICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgIGlmICgqdG1wID09IDApIHsKICAgICAgICAgICAgICAgICBpZiAoc2l6ZSAhPSBOVUxMKQpAQCAtMzA5LDcgKzMyOCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlczsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBQeU1lbV9GcmVlKHJlcyk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUocmVzKTsKICAgICB9CiAgICAgLyogQ29udmVyc2lvbiBmYWlsZWQuIEZhbGwgYmFjayB0byBlc2NhcGluZyB3aXRoIHN1cnJvZ2F0ZWVzY2FwZS4gKi8KICNpZmRlZiBIQVZFX01CUlRPV0MKQEAgLTMyMCw3ICszMzksNyBAQAogICAgIGFyZ3NpemUgPSBzdHJsZW4oYXJnKSArIDE7CiAgICAgaWYgKGFyZ3NpemUgPiBQWV9TU0laRV9UX01BWC9zaXplb2Yod2NoYXJfdCkpCiAgICAgICAgIGdvdG8gb29tOwotICAgIHJlcyA9ICh3Y2hhcl90KilQeU1lbV9NYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOworICAgIHJlcyA9ICh3Y2hhcl90KilQeU1lbV9SYXdNYWxsb2MoYXJnc2l6ZSpzaXplb2Yod2NoYXJfdCkpOwogICAgIGlmICghcmVzKQogICAgICAgICBnb3RvIG9vbTsKICAgICBpbiA9ICh1bnNpZ25lZCBjaGFyKilhcmc7CkBAIC0zMzYsNyArMzU1LDcgQEAKICAgICAgICAgICAgICAgIHNpbmNlIHdlIHByb3ZpZGUgZXZlcnl0aGluZyB0aGF0IHdlIGhhdmUgLQogICAgICAgICAgICAgICAgdW5sZXNzIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBDIGxpYnJhcnksIG9yIEkKICAgICAgICAgICAgICAgIG1pc3VuZGVyc3Rvb2QgaG93IG1icnRvd2Mgd29ya3MuICovCi0gICAgICAgICAgICBQeU1lbV9GcmVlKHJlcyk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKHJlcyk7CiAgICAgICAgICAgICBpZiAoc2l6ZSAhPSBOVUxMKQogICAgICAgICAgICAgICAgICpzaXplID0gKHNpemVfdCktMjsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzQ5LDcgKzM2OCw3IEBACiAgICAgICAgICAgICBtZW1zZXQoJm1icywgMCwgc2l6ZW9mIG1icyk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoKm91dCA+PSAweGQ4MDAgJiYgKm91dCA8PSAweGRmZmYpIHsKKyAgICAgICAgaWYgKFB5X1VOSUNPREVfSVNfU1VSUk9HQVRFKCpvdXQpKSB7CiAgICAgICAgICAgICAvKiBTdXJyb2dhdGUgY2hhcmFjdGVyLiAgRXNjYXBlIHRoZSBvcmlnaW5hbAogICAgICAgICAgICAgICAgYnl0ZSBzZXF1ZW5jZSB3aXRoIHN1cnJvZ2F0ZWVzY2FwZS4gKi8KICAgICAgICAgICAgIGFyZ3NpemUgLT0gY29udmVydGVkOwpAQCAtNTU4LDE0ICs1NzcsMjM1IEBACiAKICNlbmRpZgogCi0vKiBPcGVuIGEgZmlsZS4gVXNlIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGxvY2FsZQotICAgZW5jb2RpbmcgYW5kIHVzZSBmb3BlbigpIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbnQKK2dldF9pbmhlcml0YWJsZShpbnQgZmQsIGludCByYWlzZSkKK3sKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgSEFORExFIGhhbmRsZTsKKyAgICBEV09SRCBmbGFnczsKIAorICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBoYW5kbGUgPSAoSEFORExFKV9nZXRfb3NmaGFuZGxlKGZkKTsKKyAgICBpZiAoaGFuZGxlID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICghR2V0SGFuZGxlSW5mb3JtYXRpb24oaGFuZGxlLCAmZmxhZ3MpKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21XaW5kb3dzRXJyKDApOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIChmbGFncyAmIEhBTkRMRV9GTEFHX0lOSEVSSVQpOworI2Vsc2UKKyAgICBpbnQgZmxhZ3M7CisKKyAgICBmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZELCAwKTsKKyAgICBpZiAoZmxhZ3MgPT0gLTEpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAhKGZsYWdzICYgRkRfQ0xPRVhFQyk7CisjZW5kaWYKK30KKworLyogR2V0IHRoZSBpbmhlcml0YWJsZSBmbGFnIG9mIHRoZSBzcGVjaWZpZWQgZmlsZSBkZXNjcmlwdG9yLgorICAgUmV0dXJuIDEgaWYgdGhlIGZpbGUgZGVzY3JpcHRvciBjYW4gYmUgaW5oZXJpdGVkLCAwIGlmIGl0IGNhbm5vdCwKKyAgIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworaW50CitfUHlfZ2V0X2luaGVyaXRhYmxlKGludCBmZCkKK3sKKyAgICByZXR1cm4gZ2V0X2luaGVyaXRhYmxlKGZkLCAxKTsKK30KKworc3RhdGljIGludAorc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLCBpbnQgcmFpc2UsIGludCAqYXRvbWljX2ZsYWdfd29ya3MpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgZmxhZ3M7CisjZWxzZQorI2lmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9DTEVYKSAmJiBkZWZpbmVkKEZJT05DTEVYKQorICAgIHN0YXRpYyBpbnQgaW9jdGxfd29ya3MgPSAtMTsKKyAgICBpbnQgcmVxdWVzdDsKKyAgICBpbnQgZXJyOworI2VuZGlmCisgICAgaW50IGZsYWdzOworICAgIGludCByZXM7CisjZW5kaWYKKworICAgIC8qIGF0b21pY19mbGFnX3dvcmtzIGNhbiBvbmx5IGJlIHVzZWQgdG8gbWFrZSB0aGUgZmlsZSBkZXNjcmlwdG9yCisgICAgICAgbm9uLWluaGVyaXRhYmxlICovCisgICAgYXNzZXJ0KCEoYXRvbWljX2ZsYWdfd29ya3MgIT0gTlVMTCAmJiBpbmhlcml0YWJsZSkpOworCisgICAgaWYgKGF0b21pY19mbGFnX3dvcmtzICE9IE5VTEwgJiYgIWluaGVyaXRhYmxlKSB7CisgICAgICAgIGlmICgqYXRvbWljX2ZsYWdfd29ya3MgPT0gLTEpIHsKKyAgICAgICAgICAgIGludCBpc0luaGVyaXRhYmxlID0gZ2V0X2luaGVyaXRhYmxlKGZkLCByYWlzZSk7CisgICAgICAgICAgICBpZiAoaXNJbmhlcml0YWJsZSA9PSAtMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAqYXRvbWljX2ZsYWdfd29ya3MgPSAhaXNJbmhlcml0YWJsZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgqYXRvbWljX2ZsYWdfd29ya3MpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaWYgKCFfUHlWZXJpZnlfZmQoZmQpKSB7CisgICAgICAgIGlmIChyYWlzZSkKKyAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGhhbmRsZSA9IChIQU5ETEUpX2dldF9vc2ZoYW5kbGUoZmQpOworICAgIGlmIChoYW5kbGUgPT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyA9IEhBTkRMRV9GTEFHX0lOSEVSSVQ7CisgICAgZWxzZQorICAgICAgICBmbGFncyA9IDA7CisgICAgaWYgKCFTZXRIYW5kbGVJbmZvcm1hdGlvbihoYW5kbGUsIEhBTkRMRV9GTEFHX0lOSEVSSVQsIGZsYWdzKSkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tV2luZG93c0VycigwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gMDsKKworI2Vsc2UKKworI2lmIGRlZmluZWQoSEFWRV9TWVNfSU9DVExfSCkgJiYgZGVmaW5lZChGSU9DTEVYKSAmJiBkZWZpbmVkKEZJT05DTEVYKQorICAgIGlmIChpb2N0bF93b3JrcyAhPSAwKSB7CisgICAgICAgIC8qIGZhc3QtcGF0aDogaW9jdGwoKSBvbmx5IHJlcXVpcmVzIG9uZSBzeXNjYWxsICovCisgICAgICAgIGlmIChpbmhlcml0YWJsZSkKKyAgICAgICAgICAgIHJlcXVlc3QgPSBGSU9OQ0xFWDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVxdWVzdCA9IEZJT0NMRVg7CisgICAgICAgIGVyciA9IGlvY3RsKGZkLCByZXF1ZXN0LCBOVUxMKTsKKyAgICAgICAgaWYgKCFlcnIpIHsKKyAgICAgICAgICAgIGlvY3RsX3dvcmtzID0gMTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycm5vICE9IEVOT1RUWSkgeworICAgICAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8qIElzc3VlICMyMjI1ODogSGVyZSwgRU5PVFRZIG1lYW5zICJJbmFwcHJvcHJpYXRlIGlvY3RsIGZvcgorICAgICAgICAgICAgICAgZGV2aWNlIi4gVGhlIGlvY3RsIGlzIGRlY2xhcmVkIGJ1dCBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBrZXJuZWwuCisgICAgICAgICAgICAgICBSZW1lbWJlciB0aGF0IGlvY3RsKCkgZG9lc24ndCB3b3JrLiBJdCBpcyB0aGUgY2FzZSBvbgorICAgICAgICAgICAgICAgSWxsdW1vcy1iYXNlZCBPUyBmb3IgZXhhbXBsZS4gKi8KKyAgICAgICAgICAgIGlvY3RsX3dvcmtzID0gMDsKKyAgICAgICAgfQorICAgICAgICAvKiBmYWxsYmFjayB0byBmY250bCgpIGlmIGlvY3RsKCkgZG9lcyBub3Qgd29yayAqLworICAgIH0KKyNlbmRpZgorCisgICAgLyogc2xvdy1wYXRoOiBmY250bCgpIHJlcXVpcmVzIHR3byBzeXNjYWxscyAqLworICAgIGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkQpOworICAgIGlmIChmbGFncyA8IDApIHsKKyAgICAgICAgaWYgKHJhaXNlKQorICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGluaGVyaXRhYmxlKQorICAgICAgICBmbGFncyAmPSB+RkRfQ0xPRVhFQzsKKyAgICBlbHNlCisgICAgICAgIGZsYWdzIHw9IEZEX0NMT0VYRUM7CisgICAgcmVzID0gZmNudGwoZmQsIEZfU0VURkQsIGZsYWdzKTsKKyAgICBpZiAocmVzIDwgMCkgeworICAgICAgICBpZiAocmFpc2UpCisgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworLyogTWFrZSB0aGUgZmlsZSBkZXNjcmlwdG9yIG5vbi1pbmhlcml0YWJsZS4KKyAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHNldCBlcnJubyBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLworc3RhdGljIGludAorbWFrZV9ub25faW5oZXJpdGFibGUoaW50IGZkKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIE5VTEwpOworfQorCisvKiBTZXQgdGhlIGluaGVyaXRhYmxlIGZsYWcgb2YgdGhlIHNwZWNpZmllZCBmaWxlIGRlc2NyaXB0b3IuCisgICBPbiBzdWNjZXNzOiByZXR1cm4gMCwgb24gZXJyb3I6IHJhaXNlIGFuIGV4Y2VwdGlvbiBpZiByYWlzZSBpcyBub256ZXJvCisgICBhbmQgcmV0dXJuIC0xLgorCisgICBJZiBhdG9taWNfZmxhZ193b3JrcyBpcyBub3QgTlVMTDoKKworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0tMSwgY2hlY2sgaWYgdGhlIGluaGVyaXRhYmxlIGlzIHNldCBvbiB0aGUgZmlsZQorICAgICAgZGVzY3JpcHRvcjogaWYgeWVzLCBzZXQgKmF0b21pY19mbGFnX3dvcmtzIHRvIDEsIG90aGVyd2lzZSBzZXQgdG8gMCBhbmQKKyAgICAgIHNldCB0aGUgaW5oZXJpdGFibGUgZmxhZworICAgICogaWYgKmF0b21pY19mbGFnX3dvcmtzPT0xOiBkbyBub3RoaW5nCisgICAgKiBpZiAqYXRvbWljX2ZsYWdfd29ya3M9PTA6IHNldCBpbmhlcml0YWJsZSBmbGFnIHRvIEZhbHNlCisKKyAgIFNldCBhdG9taWNfZmxhZ193b3JrcyB0byBOVUxMIGlmIG5vIGF0b21pYyBmbGFnIHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUKKyAgIGZpbGUgZGVzY3JpcHRvci4KKworICAgYXRvbWljX2ZsYWdfd29ya3MgY2FuIG9ubHkgYmUgdXNlZCB0byBtYWtlIGEgZmlsZSBkZXNjcmlwdG9yCisgICBub24taW5oZXJpdGFibGU6IGF0b21pY19mbGFnX3dvcmtzIG11c3QgYmUgTlVMTCBpZiBpbmhlcml0YWJsZT0xLiAqLworaW50CitfUHlfc2V0X2luaGVyaXRhYmxlKGludCBmZCwgaW50IGluaGVyaXRhYmxlLCBpbnQgKmF0b21pY19mbGFnX3dvcmtzKQoreworICAgIHJldHVybiBzZXRfaW5oZXJpdGFibGUoZmQsIGluaGVyaXRhYmxlLCAxLCBhdG9taWNfZmxhZ193b3Jrcyk7Cit9CisKKy8qIE9wZW4gYSBmaWxlIHdpdGggdGhlIHNwZWNpZmllZCBmbGFncyAod3JhcHBlciB0byBvcGVuKCkgZnVuY3Rpb24pLgorICAgVGhlIGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIG5vbi1pbmhlcml0YWJsZS4gKi8KK2ludAorX1B5X29wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncykKK3sKKyAgICBpbnQgZmQ7CisjaWZkZWYgTVNfV0lORE9XUworICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MgfCBPX05PSU5IRVJJVCk7CisgICAgaWYgKGZkIDwgMCkKKyAgICAgICAgcmV0dXJuIGZkOworI2Vsc2UKKworICAgIGludCAqYXRvbWljX2ZsYWdfd29ya3M7CisjaWZkZWYgT19DTE9FWEVDCisgICAgYXRvbWljX2ZsYWdfd29ya3MgPSAmX1B5X29wZW5fY2xvZXhlY193b3JrczsKKyAgICBmbGFncyB8PSBPX0NMT0VYRUM7CisjZWxzZQorICAgIGF0b21pY19mbGFnX3dvcmtzID0gTlVMTDsKKyNlbmRpZgorICAgIGZkID0gb3BlbihwYXRobmFtZSwgZmxhZ3MpOworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiBmZDsKKworICAgIGlmIChzZXRfaW5oZXJpdGFibGUoZmQsIDAsIDAsIGF0b21pY19mbGFnX3dvcmtzKSA8IDApIHsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmICAgLyogIU1TX1dJTkRPV1MgKi8KKyAgICByZXR1cm4gZmQ7Cit9CisKKy8qIE9wZW4gYSBmaWxlLiBVc2UgX3dmb3BlbigpIG9uIFdpbmRvd3MsIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgbG9jYWxlCisgICBlbmNvZGluZyBhbmQgdXNlIGZvcGVuKCkgb3RoZXJ3aXNlLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQKKyAgIG5vbi1pbmhlcml0YWJsZS4gKi8KIEZJTEUgKgogX1B5X3dmb3Blbihjb25zdCB3Y2hhcl90ICpwYXRoLCBjb25zdCB3Y2hhcl90ICptb2RlKQogewotI2lmbmRlZiBNU19XSU5ET1dTCiAgICAgRklMRSAqZjsKKyNpZm5kZWYgTVNfV0lORE9XUwogICAgIGNoYXIgKmNwYXRoOwogICAgIGNoYXIgY21vZGVbMTBdOwogICAgIHNpemVfdCByOwpAQCAtNTc5LDIxICs4MTksNDIgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgZiA9IGZvcGVuKGNwYXRoLCBjbW9kZSk7CiAgICAgUHlNZW1fRnJlZShjcGF0aCk7Ci0gICAgcmV0dXJuIGY7CiAjZWxzZQotICAgIHJldHVybiBfd2ZvcGVuKHBhdGgsIG1vZGUpOworICAgIGYgPSBfd2ZvcGVuKHBhdGgsIG1vZGUpOwogI2VuZGlmCisgICAgaWYgKGYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKG1ha2Vfbm9uX2luaGVyaXRhYmxlKGZpbGVubyhmKSkgPCAwKSB7CisgICAgICAgIGZjbG9zZShmKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBmOwogfQogCi0vKiBDYWxsIF93Zm9wZW4oKSBvbiBXaW5kb3dzLCBvciBlbmNvZGUgdGhlIHBhdGggdG8gdGhlIGZpbGVzeXN0ZW0gZW5jb2RpbmcgYW5kCi0gICBjYWxsIGZvcGVuKCkgb3RoZXJ3aXNlLgorLyogV3JhcHBlciB0byBmb3BlbigpLiBUaGUgZmlsZSBkZXNjcmlwdG9yIGlzIGNyZWF0ZWQgbm9uLWluaGVyaXRhYmxlLiAqLworRklMRSoKK19QeV9mb3Blbihjb25zdCBjaGFyICpwYXRobmFtZSwgY29uc3QgY2hhciAqbW9kZSkKK3sKKyAgICBGSUxFICpmID0gZm9wZW4ocGF0aG5hbWUsIG1vZGUpOworICAgIGlmIChmID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChtYWtlX25vbl9pbmhlcml0YWJsZShmaWxlbm8oZikpIDwgMCkgeworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByZXR1cm4gZjsKK30KKworLyogT3BlbiBhIGZpbGUuIENhbGwgX3dmb3BlbigpIG9uIFdpbmRvd3MsIG9yIGVuY29kZSB0aGUgcGF0aCB0byB0aGUgZmlsZXN5c3RlbQorICAgZW5jb2RpbmcgYW5kIGNhbGwgZm9wZW4oKSBvdGhlcndpc2UuIFRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgY3JlYXRlZAorICAgbm9uLWluaGVyaXRhYmxlLgogCiAgICBSZXR1cm4gdGhlIG5ldyBmaWxlIG9iamVjdCBvbiBzdWNjZXNzLCBvciBOVUxMIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBvcGVuIG9yCi0gICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvciAqLwotCisgICAoaWYgUHlFcnJfT2NjdXJyZWQoKSkgb24gdW5pY29kZSBlcnJvci4gKi8KIEZJTEUqCi1fUHlfZm9wZW4oUHlPYmplY3QgKnBhdGgsIGNvbnN0IGNoYXIgKm1vZGUpCitfUHlfZm9wZW5fb2JqKFB5T2JqZWN0ICpwYXRoLCBjb25zdCBjaGFyICptb2RlKQogeworICAgIEZJTEUgKmY7CiAjaWZkZWYgTVNfV0lORE9XUwogICAgIHdjaGFyX3QgKndwYXRoOwogICAgIHdjaGFyX3Qgd21vZGVbMTBdOwpAQCAtNjEzLDE2ICs4NzQsMjEgQEAKICAgICBpZiAodXNpemUgPT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByZXR1cm4gX3dmb3Blbih3cGF0aCwgd21vZGUpOworICAgIGYgPSBfd2ZvcGVuKHdwYXRoLCB3bW9kZSk7CiAjZWxzZQotICAgIEZJTEUgKmY7CiAgICAgUHlPYmplY3QgKmJ5dGVzOwogICAgIGlmICghUHlVbmljb2RlX0ZTQ29udmVydGVyKHBhdGgsICZieXRlcykpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGYgPSBmb3BlbihQeUJ5dGVzX0FTX1NUUklORyhieXRlcyksIG1vZGUpOwogICAgIFB5X0RFQ1JFRihieXRlcyk7Ci0gICAgcmV0dXJuIGY7CiAjZW5kaWYKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAobWFrZV9ub25faW5oZXJpdGFibGUoZmlsZW5vKGYpKSA8IDApIHsKKyAgICAgICAgZmNsb3NlKGYpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIGY7CiB9CiAKICNpZmRlZiBIQVZFX1JFQURMSU5LCkBAIC02NTksMTIgKzkyNSwxMiBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICAgIGlmIChidWZzaXogPD0gcjEpIHsKLSAgICAgICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3YnVmKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAgICAgd2NzbmNweShidWYsIHdidWYsIGJ1ZnNpeik7Ci0gICAgUHlNZW1fRnJlZSh3YnVmKTsKKyAgICBQeU1lbV9SYXdGcmVlKHdidWYpOwogICAgIHJldHVybiAoaW50KXIxOwogfQogI2VuZGlmCkBAIC03MDAsMTIgKzk2NiwxMiBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKHJlc29sdmVkX3BhdGhfc2l6ZSA8PSByKSB7Ci0gICAgICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKHdyZXNvbHZlZF9wYXRoKTsKICAgICAgICAgZXJybm8gPSBFSU5WQUw7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICB3Y3NuY3B5KHJlc29sdmVkX3BhdGgsIHdyZXNvbHZlZF9wYXRoLCByZXNvbHZlZF9wYXRoX3NpemUpOwotICAgIFB5TWVtX0ZyZWUod3Jlc29sdmVkX3BhdGgpOworICAgIFB5TWVtX1Jhd0ZyZWUod3Jlc29sdmVkX3BhdGgpOwogICAgIHJldHVybiByZXNvbHZlZF9wYXRoOwogfQogI2VuZGlmCkBAIC03MTgsNyArOTg0LDggQEAKIF9QeV93Z2V0Y3dkKHdjaGFyX3QgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAjaWZkZWYgTVNfV0lORE9XUwotICAgIHJldHVybiBfd2dldGN3ZChidWYsIHNpemUpOworICAgIGludCBpc2l6ZSA9IChpbnQpUHlfTUlOKHNpemUsIElOVF9NQVgpOworICAgIHJldHVybiBfd2dldGN3ZChidWYsIGlzaXplKTsKICNlbHNlCiAgICAgY2hhciBmbmFtZVtNQVhQQVRITEVOXTsKICAgICB3Y2hhcl90ICp3bmFtZTsKQEAgLTczMCwxMiArOTk3LDgxIEBACiAgICAgaWYgKHduYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIGlmIChzaXplIDw9IGxlbikgewotICAgICAgICBQeU1lbV9GcmVlKHduYW1lKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZSh3bmFtZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICB3Y3NuY3B5KGJ1Ziwgd25hbWUsIHNpemUpOwotICAgIFB5TWVtX0ZyZWUod25hbWUpOworICAgIFB5TWVtX1Jhd0ZyZWUod25hbWUpOwogICAgIHJldHVybiBidWY7CiAjZW5kaWYKIH0KIAorLyogRHVwbGljYXRlIGEgZmlsZSBkZXNjcmlwdG9yLiBUaGUgbmV3IGZpbGUgZGVzY3JpcHRvciBpcyBjcmVhdGVkIGFzCisgICBub24taW5oZXJpdGFibGUuIFJldHVybiBhIG5ldyBmaWxlIGRlc2NyaXB0b3Igb24gc3VjY2VzcywgcmFpc2UgYW4gT1NFcnJvcgorICAgZXhjZXB0aW9uIGFuZCByZXR1cm4gLTEgb24gZXJyb3IuCisKKyAgIFRoZSBHSUwgaXMgcmVsZWFzZWQgdG8gY2FsbCBkdXAoKS4gVGhlIGNhbGxlciBtdXN0IGhvbGQgdGhlIEdJTC4gKi8KK2ludAorX1B5X2R1cChpbnQgZmQpCit7CisjaWZkZWYgTVNfV0lORE9XUworICAgIEhBTkRMRSBoYW5kbGU7CisgICAgRFdPUkQgZnR5cGU7CisjZW5kaWYKKworICAgIGlmICghX1B5VmVyaWZ5X2ZkKGZkKSkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZmRlZiBNU19XSU5ET1dTCisgICAgaGFuZGxlID0gKEhBTkRMRSlfZ2V0X29zZmhhbmRsZShmZCk7CisgICAgaWYgKGhhbmRsZSA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBnZXQgdGhlIGZpbGUgdHlwZSwgaWdub3JlIHRoZSBlcnJvciBpZiBpdCBmYWlsZWQgKi8KKyAgICBmdHlwZSA9IEdldEZpbGVUeXBlKGhhbmRsZSk7CisKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZmQgPSBkdXAoZmQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBDaGFyYWN0ZXIgZmlsZXMgbGlrZSBjb25zb2xlIGNhbm5vdCBiZSBtYWtlIG5vbi1pbmhlcml0YWJsZSAqLworICAgIGlmIChmdHlwZSAhPSBGSUxFX1RZUEVfQ0hBUikgeworICAgICAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisjZWxpZiBkZWZpbmVkKEhBVkVfRkNOVExfSCkgJiYgZGVmaW5lZChGX0RVUEZEX0NMT0VYRUMpCisgICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgIGZkID0gZmNudGwoZmQsIEZfRFVQRkRfQ0xPRVhFQywgMCk7CisgICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIFB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2Vsc2UKKyAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgZmQgPSBkdXAoZmQpOworICAgIFB5X0VORF9BTExPV19USFJFQURTCisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoX1B5X3NldF9pbmhlcml0YWJsZShmZCwgMCwgTlVMTCkgPCAwKSB7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBmZDsKK30KKwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zvcm1hdHRlcl91bmljb2RlLmMgYi9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYwppbmRleCBhNjUxNmRjLi5lM2E4MTQ5IDEwMDY0NAotLS0gYS9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYworKysgYi9QeXRob24vZm9ybWF0dGVyX3VuaWNvZGUuYwpAQCAtMTU2LDggKzE1Niw5IEBACiAKICAgICBQeV9zc2l6ZV90IGNvbnN1bWVkOwogICAgIGludCBhbGlnbl9zcGVjaWZpZWQgPSAwOworICAgIGludCBmaWxsX2NoYXJfc3BlY2lmaWVkID0gMDsKIAotICAgIGZvcm1hdC0+ZmlsbF9jaGFyID0gJ1wwJzsKKyAgICBmb3JtYXQtPmZpbGxfY2hhciA9ICcgJzsKICAgICBmb3JtYXQtPmFsaWduID0gZGVmYXVsdF9hbGlnbjsKICAgICBmb3JtYXQtPmFsdGVybmF0ZSA9IDA7CiAgICAgZm9ybWF0LT5zaWduID0gJ1wwJzsKQEAgLTE3MSw2ICsxNzIsNyBAQAogICAgIGlmIChlbmQtcG9zID49IDIgJiYgaXNfYWxpZ25tZW50X3Rva2VuKFJFQURfc3BlYyhwb3MrMSkpKSB7CiAgICAgICAgIGZvcm1hdC0+YWxpZ24gPSBSRUFEX3NwZWMocG9zKzEpOwogICAgICAgICBmb3JtYXQtPmZpbGxfY2hhciA9IFJFQURfc3BlYyhwb3MpOworICAgICAgICBmaWxsX2NoYXJfc3BlY2lmaWVkID0gMTsKICAgICAgICAgYWxpZ25fc3BlY2lmaWVkID0gMTsKICAgICAgICAgcG9zICs9IDI7CiAgICAgfQpAQCAtMTk0LDcgKzE5Niw3IEBACiAgICAgfQogCiAgICAgLyogVGhlIHNwZWNpYWwgY2FzZSBmb3IgMC1wYWRkaW5nIChiYWNrd2FyZHMgY29tcGF0KSAqLwotICAgIGlmIChmb3JtYXQtPmZpbGxfY2hhciA9PSAnXDAnICYmIGVuZC1wb3MgPj0gMSAmJiBSRUFEX3NwZWMocG9zKSA9PSAnMCcpIHsKKyAgICBpZiAoIWZpbGxfY2hhcl9zcGVjaWZpZWQgJiYgZW5kLXBvcyA+PSAxICYmIFJFQURfc3BlYyhwb3MpID09ICcwJykgewogICAgICAgICBmb3JtYXQtPmZpbGxfY2hhciA9ICcwJzsKICAgICAgICAgaWYgKCFhbGlnbl9zcGVjaWZpZWQpIHsKICAgICAgICAgICAgIGZvcm1hdC0+YWxpZ24gPSAnPSc7CkBAIC0zMTUsNyArMzE3LDcgQEAKIAogLyogRG8gdGhlIHBhZGRpbmcsIGFuZCByZXR1cm4gYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBjYWxsZXItc3VwcGxpZWQKICAgIGNvbnRlbnQgZ29lcy4gKi8KLXN0YXRpYyBQeV9zc2l6ZV90CitzdGF0aWMgaW50CiBmaWxsX3BhZGRpbmcoX1B5VW5pY29kZVdyaXRlciAqd3JpdGVyLAogICAgICAgICAgICAgIFB5X3NzaXplX3QgbmNoYXJzLAogICAgICAgICAgICAgIFB5X1VDUzQgZmlsbF9jaGFyLCBQeV9zc2l6ZV90IG5fbHBhZGRpbmcsCkBAIC01NTYsNyArNTU4LDcgQEAKIHsKICAgICAvKiBVc2VkIHRvIGtlZXAgdHJhY2sgb2YgZGlnaXRzLCBkZWNpbWFsLCBhbmQgcmVtYWluZGVyLiAqLwogICAgIFB5X3NzaXplX3QgZF9wb3MgPSBkX3N0YXJ0OwotICAgIGNvbnN0IGVudW0gUHlVbmljb2RlX0tpbmQga2luZCA9IHdyaXRlci0+a2luZDsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQga2luZCA9IHdyaXRlci0+a2luZDsKICAgICBjb25zdCB2b2lkICpkYXRhID0gd3JpdGVyLT5kYXRhOwogICAgIFB5X3NzaXplX3QgcjsKIApAQCAtNzU3LDcgKzc1OSw4IEBACiAgICAgICAgIGdvdG8gZG9uZTsKICAgICB9CiAKLSAgICBpZiAoZm9ybWF0LT53aWR0aCA9PSAtMSAmJiBmb3JtYXQtPnByZWNpc2lvbiA9PSAtMSkgeworICAgIGlmICgoZm9ybWF0LT53aWR0aCA9PSAtMSB8fCBmb3JtYXQtPndpZHRoIDw9IGxlbikKKyAgICAgICAgJiYgKGZvcm1hdC0+cHJlY2lzaW9uID09IC0xIHx8IGZvcm1hdC0+cHJlY2lzaW9uID49IGxlbikpIHsKICAgICAgICAgLyogRmFzdCBwYXRoICovCiAgICAgICAgIHJldHVybiBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgdmFsdWUpOwogICAgIH0KQEAgLTc3MCwxOCArNzczLDIwIEBACiAKICAgICBjYWxjX3BhZGRpbmcobGVuLCBmb3JtYXQtPndpZHRoLCBmb3JtYXQtPmFsaWduLCAmbHBhZCwgJnJwYWQsICZ0b3RhbCk7CiAKLSAgICBtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih2YWx1ZSwgMCwgbGVuKTsKKyAgICBtYXhjaGFyID0gd3JpdGVyLT5tYXhjaGFyOwogICAgIGlmIChscGFkICE9IDAgfHwgcnBhZCAhPSAwKQogICAgICAgICBtYXhjaGFyID0gUHlfTUFYKG1heGNoYXIsIGZvcm1hdC0+ZmlsbF9jaGFyKTsKKyAgICBpZiAoUHlVbmljb2RlX01BWF9DSEFSX1ZBTFVFKHZhbHVlKSA+IG1heGNoYXIpIHsKKyAgICAgICAgUHlfVUNTNCB2YWxtYXhjaGFyID0gX1B5VW5pY29kZV9GaW5kTWF4Q2hhcih2YWx1ZSwgMCwgbGVuKTsKKyAgICAgICAgbWF4Y2hhciA9IFB5X01BWChtYXhjaGFyLCB2YWxtYXhjaGFyKTsKKyAgICB9CiAKICAgICAvKiBhbGxvY2F0ZSB0aGUgcmVzdWx0aW5nIHN0cmluZyAqLwogICAgIGlmIChfUHlVbmljb2RlV3JpdGVyX1ByZXBhcmUod3JpdGVyLCB0b3RhbCwgbWF4Y2hhcikgPT0gLTEpCiAgICAgICAgIGdvdG8gZG9uZTsKIAogICAgIC8qIFdyaXRlIGludG8gdGhhdCBzcGFjZS4gRmlyc3QgdGhlIHBhZGRpbmcuICovCi0gICAgcmVzdWx0ID0gZmlsbF9wYWRkaW5nKHdyaXRlciwgbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhcj09J1wwJz8nICc6Zm9ybWF0LT5maWxsX2NoYXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGxwYWQsIHJwYWQpOworICAgIHJlc3VsdCA9IGZpbGxfcGFkZGluZyh3cml0ZXIsIGxlbiwgZm9ybWF0LT5maWxsX2NoYXIsIGxwYWQsIHJwYWQpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgIGdvdG8gZG9uZTsKIApAQCAtOTUxLDggKzk1Niw3IEBACiAgICAgLyogUG9wdWxhdGUgdGhlIG1lbW9yeS4gKi8KICAgICByZXN1bHQgPSBmaWxsX251bWJlcih3cml0ZXIsICZzcGVjLAogICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgaW51bWVyaWNfY2hhcnMsIGludW1lcmljX2NoYXJzICsgbl9kaWdpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdG1wLCBwcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXIgPT0gJ1wwJyA/ICcgJyA6IGZvcm1hdC0+ZmlsbF9jaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRtcCwgcHJlZml4LCBmb3JtYXQtPmZpbGxfY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9jYWxlLCBmb3JtYXQtPnR5cGUgPT0gJ1gnKTsKIAogZG9uZToKQEAgLTk3Nyw4ICs5ODEsNyBAQAogICAgIFB5X3NzaXplX3Qgbl90b3RhbDsKICAgICBpbnQgaGFzX2RlY2ltYWw7CiAgICAgZG91YmxlIHZhbDsKLSAgICBQeV9zc2l6ZV90IHByZWNpc2lvbjsKLSAgICBQeV9zc2l6ZV90IGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKKyAgICBpbnQgcHJlY2lzaW9uLCBkZWZhdWx0X3ByZWNpc2lvbiA9IDY7CiAgICAgUHlfVUNTNCB0eXBlID0gZm9ybWF0LT50eXBlOwogICAgIGludCBhZGRfcGN0ID0gMDsKICAgICBQeV9zc2l6ZV90IGluZGV4OwpAQCAtMTA0OSwyNCArMTA1MiwyNCBAQAogICAgICAgICBuX2RpZ2l0cyArPSAxOwogICAgIH0KIAotICAgIC8qIFNpbmNlIHRoZXJlIGlzIG5vIHVuaWNvZGUgdmVyc2lvbiBvZiBQeU9TX2RvdWJsZV90b19zdHJpbmcsCi0gICAgICAganVzdCB1c2UgdGhlIDggYml0IHZlcnNpb24gYW5kIHRoZW4gY29udmVydCB0byB1bmljb2RlLiAqLwotICAgIHVuaWNvZGVfdG1wID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBuX2RpZ2l0cyk7Ci0gICAgUHlNZW1fRnJlZShidWYpOwotICAgIGlmICh1bmljb2RlX3RtcCA9PSBOVUxMKQotICAgICAgICBnb3RvIGRvbmU7Ci0KICAgICBpZiAoZm9ybWF0LT5zaWduICE9ICcrJyAmJiBmb3JtYXQtPnNpZ24gIT0gJyAnCiAgICAgICAgICYmIGZvcm1hdC0+d2lkdGggPT0gLTEKICAgICAgICAgJiYgZm9ybWF0LT50eXBlICE9ICduJwogICAgICAgICAmJiAhZm9ybWF0LT50aG91c2FuZHNfc2VwYXJhdG9ycykKICAgICB7CiAgICAgICAgIC8qIEZhc3QgcGF0aCAqLwotICAgICAgICByZXN1bHQgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlU3RyKHdyaXRlciwgdW5pY29kZV90bXApOwotICAgICAgICBQeV9ERUNSRUYodW5pY29kZV90bXApOworICAgICAgICByZXN1bHQgPSBfUHlVbmljb2RlV3JpdGVyX1dyaXRlQVNDSUlTdHJpbmcod3JpdGVyLCBidWYsIG5fZGlnaXRzKTsKKyAgICAgICAgUHlNZW1fRnJlZShidWYpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KIAorICAgIC8qIFNpbmNlIHRoZXJlIGlzIG5vIHVuaWNvZGUgdmVyc2lvbiBvZiBQeU9TX2RvdWJsZV90b19zdHJpbmcsCisgICAgICAganVzdCB1c2UgdGhlIDggYml0IHZlcnNpb24gYW5kIHRoZW4gY29udmVydCB0byB1bmljb2RlLiAqLworICAgIHVuaWNvZGVfdG1wID0gX1B5VW5pY29kZV9Gcm9tQVNDSUkoYnVmLCBuX2RpZ2l0cyk7CisgICAgUHlNZW1fRnJlZShidWYpOworICAgIGlmICh1bmljb2RlX3RtcCA9PSBOVUxMKQorICAgICAgICBnb3RvIGRvbmU7CisKICAgICAvKiBJcyBhIHNpZ24gY2hhcmFjdGVyIHByZXNlbnQgaW4gdGhlIG91dHB1dD8gIElmIHNvLCByZW1lbWJlciBpdAogICAgICAgIGFuZCBza2lwIGl0ICovCiAgICAgaW5kZXggPSAwOwpAQCAtMTEwMCw4ICsxMTAzLDcgQEAKICAgICAvKiBQb3B1bGF0ZSB0aGUgbWVtb3J5LiAqLwogICAgIHJlc3VsdCA9IGZpbGxfbnVtYmVyKHdyaXRlciwgJnNwZWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pY29kZV90bXAsIGluZGV4LCBpbmRleCArIG5fZGlnaXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXIgPT0gJ1wwJyA/ICcgJyA6IGZvcm1hdC0+ZmlsbF9jaGFyLAorICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIGZvcm1hdC0+ZmlsbF9jaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICZsb2NhbGUsIDApOwogCiBkb25lOgpAQCAtMTEzMyw4ICsxMTM1LDcgQEAKICAgICBQeV9zc2l6ZV90IG5faW1fdG90YWw7CiAgICAgaW50IHJlX2hhc19kZWNpbWFsOwogICAgIGludCBpbV9oYXNfZGVjaW1hbDsKLSAgICBpbnQgcHJlY2lzaW9uOwotICAgIFB5X3NzaXplX3QgZGVmYXVsdF9wcmVjaXNpb24gPSA2OworICAgIGludCBwcmVjaXNpb24sIGRlZmF1bHRfcHJlY2lzaW9uID0gNjsKICAgICBQeV9VQ1M0IHR5cGUgPSBmb3JtYXQtPnR5cGU7CiAgICAgUHlfc3NpemVfdCBpX3JlOwogICAgIFB5X3NzaXplX3QgaV9pbTsKQEAgLTEzMDgsOCArMTMwOSw3IEBACiAgICAgLyogUG9wdWxhdGUgdGhlIG1lbW9yeS4gRmlyc3QsIHRoZSBwYWRkaW5nLiAqLwogICAgIHJlc3VsdCA9IGZpbGxfcGFkZGluZyh3cml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fcmVfdG90YWwgKyBuX2ltX3RvdGFsICsgMSArIGFkZF9wYXJlbnMgKiAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQtPmZpbGxfY2hhcj09J1wwJyA/ICcgJyA6IGZvcm1hdC0+ZmlsbF9jaGFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBscGFkLCBycGFkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0LT5maWxsX2NoYXIsIGxwYWQsIHJwYWQpOwogICAgIGlmIChyZXN1bHQgPT0gLTEpCiAgICAgICAgIGdvdG8gZG9uZTsKIApkaWZmIC0tZ2l0IGEvUHl0aG9uL2Zyb3plbi5jIGIvUHl0aG9uL2Zyb3plbi5jCmluZGV4IDI1ZmRjMTcuLjliYzY2MmIgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mcm96ZW4uYworKysgYi9QeXRob24vZnJvemVuLmMKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2RlZmluZSBTSVpFIChpbnQpc2l6ZW9mKE1fX19oZWxsb19fKQogCi1zdGF0aWMgc3RydWN0IF9mcm96ZW4gX1B5SW1wb3J0X0Zyb3plbk1vZHVsZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX2Zyb3plbiBfUHlJbXBvcnRfRnJvemVuTW9kdWxlc1tdID0gewogICAgIC8qIGltcG9ydGxpYiAqLwogICAgIHsiX2Zyb3plbl9pbXBvcnRsaWIiLCBfUHlfTV9faW1wb3J0bGliLCAoaW50KXNpemVvZihfUHlfTV9faW1wb3J0bGliKX0sCiAgICAgLyogVGVzdCBtb2R1bGUgKi8KQEAgLTQyLDQgKzQyLDQgQEAKIC8qIEVtYmVkZGluZyBhcHBzIG1heSBjaGFuZ2UgdGhpcyBwb2ludGVyIHRvIHBvaW50IHRvIHRoZWlyIGZhdm9yaXRlCiAgICBjb2xsZWN0aW9uIG9mIGZyb3plbiBtb2R1bGVzOiAqLwogCi1zdHJ1Y3QgX2Zyb3plbiAqUHlJbXBvcnRfRnJvemVuTW9kdWxlcyA9IF9QeUltcG9ydF9Gcm96ZW5Nb2R1bGVzOworY29uc3Qgc3RydWN0IF9mcm96ZW4gKlB5SW1wb3J0X0Zyb3plbk1vZHVsZXMgPSBfUHlJbXBvcnRfRnJvemVuTW9kdWxlczsKZGlmZiAtLWdpdCBhL1B5dGhvbi9mcm96ZW5tYWluLmMgYi9QeXRob24vZnJvemVubWFpbi5jCmluZGV4IDhiMWYyZDQuLmIwNWM5NGEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9mcm96ZW5tYWluLmMKKysrIGIvUHl0aG9uL2Zyb3plbm1haW4uYwpAQCAtMTYsMTkgKzE2LDIxIEBACiBQeV9Gcm96ZW5NYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAgICBjaGFyICpwOwotICAgIGludCBpLCBuLCBzdHM7CisgICAgaW50IGksIG4sIHN0cyA9IDE7CiAgICAgaW50IGluc3BlY3QgPSAwOwogICAgIGludCB1bmJ1ZmZlcmVkID0gMDsKLSAgICBjaGFyICpvbGRsb2M7Ci0gICAgd2NoYXJfdCAqKmFyZ3ZfY29weTsKKyAgICBjaGFyICpvbGRsb2MgPSBOVUxMOworICAgIHdjaGFyX3QgKiphcmd2X2NvcHkgPSBOVUxMOwogICAgIC8qIFdlIG5lZWQgYSBzZWNvbmQgY29waWVzLCBhcyBQeXRob24gbWlnaHQgbW9kaWZ5IHRoZSBmaXJzdCBvbmUuICovCi0gICAgd2NoYXJfdCAqKmFyZ3ZfY29weTI7CisgICAgd2NoYXJfdCAqKmFyZ3ZfY29weTIgPSBOVUxMOwogCi0gICAgYXJndl9jb3B5ID0gUHlNZW1fTWFsbG9jKHNpemVvZih3Y2hhcl90KikqYXJnYyk7Ci0gICAgYXJndl9jb3B5MiA9IFB5TWVtX01hbGxvYyhzaXplb2Yod2NoYXJfdCopKmFyZ2MpOwotICAgIGlmICghYXJndl9jb3B5IHx8ICFhcmd2X2NvcHkyKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7Ci0gICAgICAgIHJldHVybiAxOworICAgIGlmIChhcmdjID4gMCkgeworICAgICAgICBhcmd2X2NvcHkgPSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHdjaGFyX3QqKSAqIGFyZ2MpOworICAgICAgICBhcmd2X2NvcHkyID0gUHlNZW1fUmF3TWFsbG9jKHNpemVvZih3Y2hhcl90KikgKiBhcmdjKTsKKyAgICAgICAgaWYgKCFhcmd2X2NvcHkgfHwgIWFyZ3ZfY29weTIpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CiAgICAgfQogCiAgICAgUHlfRnJvemVuRmxhZyA9IDE7IC8qIFN1cHByZXNzIGVycm9ycyBmcm9tIGdldHBhdGguYyAqLwpAQCAtNDQsMzcgKzQ2LDMyIEBACiAgICAgICAgIHNldGJ1ZihzdGRlcnIsIChjaGFyICopTlVMTCk7CiAgICAgfQogCi0gICAgb2xkbG9jID0gc2V0bG9jYWxlKExDX0FMTCwgTlVMTCk7CisgICAgb2xkbG9jID0gX1B5TWVtX1Jhd1N0cmR1cChzZXRsb2NhbGUoTENfQUxMLCBOVUxMKSk7CisgICAgaWYgKCFvbGRsb2MpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisKICAgICBzZXRsb2NhbGUoTENfQUxMLCAiIik7CiAgICAgZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewotI2lmZGVmIEhBVkVfQlJPS0VOX01CU1RPV0NTCi0gICAgICAgIHNpemVfdCBhcmdzaXplID0gc3RybGVuKGFyZ3ZbaV0pOwotI2Vsc2UKLSAgICAgICAgc2l6ZV90IGFyZ3NpemUgPSBtYnN0b3djcyhOVUxMLCBhcmd2W2ldLCAwKTsKLSNlbmRpZgotICAgICAgICBzaXplX3QgY291bnQ7Ci0gICAgICAgIGlmIChhcmdzaXplID09IChzaXplX3QpLTEpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgJWQgdG8gc3RyaW5nXG4iLCBpKTsKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICB9Ci0gICAgICAgIGFyZ3ZfY29weVtpXSA9IFB5TWVtX01hbGxvYygoYXJnc2l6ZSsxKSpzaXplb2Yod2NoYXJfdCkpOworICAgICAgICBhcmd2X2NvcHlbaV0gPSBfUHlfY2hhcjJ3Y2hhcihhcmd2W2ldLCBOVUxMKTsKICAgICAgICAgYXJndl9jb3B5MltpXSA9IGFyZ3ZfY29weVtpXTsKICAgICAgICAgaWYgKCFhcmd2X2NvcHlbaV0pIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAib3V0IG9mIG1lbW9yeVxuIik7Ci0gICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgICAgICBjb3VudCA9IG1ic3Rvd2NzKGFyZ3ZfY29weVtpXSwgYXJndltpXSwgYXJnc2l6ZSsxKTsKLSAgICAgICAgaWYgKGNvdW50ID09IChzaXplX3QpLTEpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgJWQgdG8gc3RyaW5nXG4iLCBpKTsKLSAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmFibGUgdG8gZGVjb2RlIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgIyVpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKyAxKTsKKyAgICAgICAgICAgIGFyZ2MgPSBpOworICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgIH0KICAgICBzZXRsb2NhbGUoTENfQUxMLCBvbGRsb2MpOworICAgIFB5TWVtX1Jhd0ZyZWUob2xkbG9jKTsKKyAgICBvbGRsb2MgPSBOVUxMOwogCiAjaWZkZWYgTVNfV0lORE9XUwogICAgIFB5SW5pdEZyb3plbkV4dGVuc2lvbnMoKTsKICNlbmRpZiAvKiBNU19XSU5ET1dTICovCi0gICAgUHlfU2V0UHJvZ3JhbU5hbWUoYXJndl9jb3B5WzBdKTsKKyAgICBpZiAoYXJnYyA+PSAxKQorICAgICAgICBQeV9TZXRQcm9ncmFtTmFtZShhcmd2X2NvcHlbMF0pOwogICAgIFB5X0luaXRpYWxpemUoKTsKICNpZmRlZiBNU19XSU5ET1dTCiAgICAgUHlXaW5GcmVlemVfRXhlSW5pdCgpOwpAQCAtMTAzLDEwICsxMDAsMTQgQEAKICAgICBQeVdpbkZyZWV6ZV9FeGVUZXJtKCk7CiAjZW5kaWYKICAgICBQeV9GaW5hbGl6ZSgpOwotICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyW2ldKTsKKworZXJyb3I6CisgICAgUHlNZW1fUmF3RnJlZShhcmd2X2NvcHkpOworICAgIGlmIChhcmd2X2NvcHkyKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKGFyZ3ZfY29weTJbaV0pOworICAgICAgICBQeU1lbV9SYXdGcmVlKGFyZ3ZfY29weTIpOwogICAgIH0KLSAgICBQeU1lbV9GcmVlKGFyZ3ZfY29weSk7Ci0gICAgUHlNZW1fRnJlZShhcmd2X2NvcHkyKTsKKyAgICBQeU1lbV9SYXdGcmVlKG9sZGxvYyk7CiAgICAgcmV0dXJuIHN0czsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi9mdXR1cmUuYyBiL1B5dGhvbi9mdXR1cmUuYwppbmRleCBkMjRhZTQxLi44MWVhYjU0IDEwMDY0NAotLS0gYS9QeXRob24vZnV0dXJlLmMKKysrIGIvUHl0aG9uL2Z1dHVyZS5jCkBAIC0xMSw3ICsxMSw3IEBACiAiZnJvbSBfX2Z1dHVyZV9fIGltcG9ydHMgbXVzdCBvY2N1ciBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlIgogCiBzdGF0aWMgaW50Ci1mdXR1cmVfY2hlY2tfZmVhdHVyZXMoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIHN0bXRfdHkgcywgY29uc3QgY2hhciAqZmlsZW5hbWUpCitmdXR1cmVfY2hlY2tfZmVhdHVyZXMoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIHN0bXRfdHkgcywgUHlPYmplY3QgKmZpbGVuYW1lKQogewogICAgIGludCBpOwogICAgIGFzZGxfc2VxICpuYW1lczsKQEAgLTQzLDEyICs0MywxMiBAQAogICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChmZWF0dXJlLCAiYnJhY2VzIikgPT0gMCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgYSBjaGFuY2UiKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgIFVOREVGSU5FRF9GVVRVUkVfRkVBVFVSRSwgZmVhdHVyZSk7Ci0gICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbkV4KGZpbGVuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTU2LDEzICs1NiwxNyBAQAogfQogCiBzdGF0aWMgaW50Ci1mdXR1cmVfcGFyc2UoUHlGdXR1cmVGZWF0dXJlcyAqZmYsIG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorZnV0dXJlX3BhcnNlKFB5RnV0dXJlRmVhdHVyZXMgKmZmLCBtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7Ci0gICAgaW50IGksIGZvdW5kX2RvY3N0cmluZyA9IDAsIGRvbmUgPSAwLCBwcmV2X2xpbmUgPSAwOworICAgIGludCBpLCBkb25lID0gMCwgcHJldl9saW5lID0gMDsKKyAgICBzdG10X3R5IGZpcnN0OwogCiAgICAgaWYgKCEobW9kLT5raW5kID09IE1vZHVsZV9raW5kIHx8IG1vZC0+a2luZCA9PSBJbnRlcmFjdGl2ZV9raW5kKSkKICAgICAgICAgcmV0dXJuIDE7CiAKKyAgICBpZiAoYXNkbF9zZXFfTEVOKG1vZC0+di5Nb2R1bGUuYm9keSkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDE7CisKICAgICAvKiBBIHN1YnNlcXVlbnQgcGFzcyB3aWxsIGRldGVjdCBmdXR1cmUgaW1wb3J0cyB0aGF0IGRvbid0CiAgICAgICAgYXBwZWFyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUuICBUaGVyZSdzIG9uZSBjYXNlLAogICAgICAgIGhvd2V2ZXIsIHRoYXQgaXMgZWFzaWVyIHRvIGhhbmRsZSBoZXJlOiBBIHNlcmllcyBvZiBpbXBvcnRzCkBAIC03MSw4ICs3NSwxMyBAQAogICAgICAgIGJ1dCBpcyBwcmVjZWRlZCBieSBhIHJlZ3VsYXIgaW1wb3J0LgogICAgICovCiAKKyAgICBpID0gMDsKKyAgICBmaXJzdCA9IChzdG10X3R5KWFzZGxfc2VxX0dFVChtb2QtPnYuTW9kdWxlLmJvZHksIGkpOworICAgIGlmIChmaXJzdC0+a2luZCA9PSBFeHByX2tpbmQgJiYgZmlyc3QtPnYuRXhwci52YWx1ZS0+a2luZCA9PSBTdHJfa2luZCkKKyAgICAgICAgaSsrOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGFzZGxfc2VxX0xFTihtb2QtPnYuTW9kdWxlLmJvZHkpOyBpKyspIHsKKworICAgIGZvciAoOyBpIDwgYXNkbF9zZXFfTEVOKG1vZC0+di5Nb2R1bGUuYm9keSk7IGkrKykgewogICAgICAgICBzdG10X3R5IHMgPSAoc3RtdF90eSlhc2RsX3NlcV9HRVQobW9kLT52Lk1vZHVsZS5ib2R5LCBpKTsKIAogICAgICAgICBpZiAoZG9uZSAmJiBzLT5saW5lbm8gPiBwcmV2X2xpbmUpCkBAIC05MiwzMiArMTAxLDI3IEBACiAgICAgICAgICAgICAgICAgaWYgKGRvbmUpIHsKICAgICAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVJSX0xBVEVfRlVUVVJFKTsKLSAgICAgICAgICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChmaWxlbmFtZSwgcy0+bGluZW5vLCBzLT5jb2xfb2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3QoZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIWZ1dHVyZV9jaGVja19mZWF0dXJlcyhmZiwgcywgZmlsZW5hbWUpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICBmZi0+ZmZfbGluZW5vID0gcy0+bGluZW5vOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocy0+a2luZCA9PSBFeHByX2tpbmQgJiYgIWZvdW5kX2RvY3N0cmluZykgewotICAgICAgICAgICAgZXhwcl90eSBlID0gcy0+di5FeHByLnZhbHVlOwotICAgICAgICAgICAgaWYgKGUtPmtpbmQgIT0gU3RyX2tpbmQpCi0gICAgICAgICAgICAgICAgZG9uZSA9IDE7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgZm91bmRfZG9jc3RyaW5nID0gMTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCisgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZG9uZSA9IDE7CisgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIDE7CiB9CiAKIAogUHlGdXR1cmVGZWF0dXJlcyAqCi1QeUZ1dHVyZV9Gcm9tQVNUKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lKQorUHlGdXR1cmVfRnJvbUFTVE9iamVjdChtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUpCiB7CiAgICAgUHlGdXR1cmVGZWF0dXJlcyAqZmY7CiAKQEAgLTEzNSwzICsxMzksMTggQEAKICAgICB9CiAgICAgcmV0dXJuIGZmOwogfQorCisKK1B5RnV0dXJlRmVhdHVyZXMgKgorUHlGdXR1cmVfRnJvbUFTVChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIpCit7CisgICAgUHlGdXR1cmVGZWF0dXJlcyAqZmY7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGZmID0gUHlGdXR1cmVfRnJvbUFTVE9iamVjdChtb2QsIGZpbGVuYW1lKTsKKyAgICBQeV9ERUNSRUYoZmlsZW5hbWUpOworICAgIHJldHVybiBmZjsKK30KZGlmZiAtLWdpdCBhL1B5dGhvbi9nZXRhcmdzLmMgYi9QeXRob24vZ2V0YXJncy5jCmluZGV4IGFlOTMxYjkuLjY5MDJkMTMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9nZXRhcmdzLmMKKysrIGIvUHl0aG9uL2dldGFyZ3MuYwpAQCAtNDYsMTQgKzQ2LDE2IEBACiB9IGZyZWVsaXN0ZW50cnlfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgewotICBpbnQgZmlyc3RfYXZhaWxhYmxlOwogICBmcmVlbGlzdGVudHJ5X3QgKmVudHJpZXM7CisgIGludCBmaXJzdF9hdmFpbGFibGU7CisgIGludCBlbnRyaWVzX21hbGxvY2VkOwogfSBmcmVlbGlzdF90OwogCisjZGVmaW5lIFNUQVRJQ19GUkVFTElTVF9FTlRSSUVTIDgKIAogLyogRm9yd2FyZCAqLwogc3RhdGljIGludCB2Z2V0YXJnczEoUHlPYmplY3QgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0ICosIGludCk7Ci1zdGF0aWMgdm9pZCBzZXRlcnJvcihpbnQsIGNvbnN0IGNoYXIgKiwgaW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK3N0YXRpYyB2b2lkIHNldGVycm9yKFB5X3NzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50ICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIHN0YXRpYyBjaGFyICpjb252ZXJ0aXRlbShQeU9iamVjdCAqLCBjb25zdCBjaGFyICoqLCB2YV9saXN0ICosIGludCwgaW50ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBzaXplX3QsIGZyZWVsaXN0X3QgKik7CiBzdGF0aWMgY2hhciAqY29udmVydHR1cGxlKFB5T2JqZWN0ICosIGNvbnN0IGNoYXIgKiosIHZhX2xpc3QgKiwgaW50LApAQCAtMTg3LDcgKzE4OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZWxpc3QtPmVudHJpZXNbaW5kZXhdLml0ZW0pOwogICAgICAgfQogICAgIH0KLSAgICBQeU1lbV9GUkVFKGZyZWVsaXN0LT5lbnRyaWVzKTsKKyAgICBpZiAoZnJlZWxpc3QtPmVudHJpZXNfbWFsbG9jZWQpCisgICAgICAgIFB5TWVtX0ZSRUUoZnJlZWxpc3QtPmVudHJpZXMpOwogICAgIHJldHVybiByZXR2YWw7CiB9CiAKQEAgLTIwNiw4ICsyMDksMTMgQEAKICAgICBjb25zdCBjaGFyICpmb3JtYXRzYXZlID0gZm9ybWF0OwogICAgIFB5X3NzaXplX3QgaSwgbGVuOwogICAgIGNoYXIgKm1zZzsKLSAgICBmcmVlbGlzdF90IGZyZWVsaXN0ID0gezAsIE5VTEx9OwogICAgIGludCBjb21wYXQgPSBmbGFncyAmIEZMQUdfQ09NUEFUOworICAgIGZyZWVsaXN0ZW50cnlfdCBzdGF0aWNfZW50cmllc1tTVEFUSUNfRlJFRUxJU1RfRU5UUklFU107CisgICAgZnJlZWxpc3RfdCBmcmVlbGlzdDsKKworICAgIGZyZWVsaXN0LmVudHJpZXMgPSBzdGF0aWNfZW50cmllczsKKyAgICBmcmVlbGlzdC5maXJzdF9hdmFpbGFibGUgPSAwOworICAgIGZyZWVsaXN0LmVudHJpZXNfbWFsbG9jZWQgPSAwOwogCiAgICAgYXNzZXJ0KGNvbXBhdCB8fCAoYXJncyAhPSAoUHlPYmplY3QqKU5VTEwpKTsKICAgICBmbGFncyA9IGZsYWdzICYgfkZMQUdfQ09NUEFUOwpAQCAtMjQwLDE1ICsyNDgsMTUgQEAKICAgICAgICAgICAgIG1lc3NhZ2UgPSBmb3JtYXQ7CiAgICAgICAgICAgICBlbmRmbXQgPSAxOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3wnOgorICAgICAgICAgICAgaWYgKGxldmVsID09IDApCisgICAgICAgICAgICAgICAgbWluID0gbWF4OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAobGV2ZWwgPT0gMCkgewotICAgICAgICAgICAgICAgIGlmIChjID09ICdPJykKLSAgICAgICAgICAgICAgICAgICAgbWF4Kys7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoUHlfSVNBTFBIQShQeV9DSEFSTUFTSyhjKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUHlfSVNBTFBIQShQeV9DSEFSTUFTSyhjKSkpCiAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9ICdlJykgLyogc2tpcCBlbmNvZGVkICovCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXgrKzsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gJ3wnKQotICAgICAgICAgICAgICAgICAgICBtaW4gPSBtYXg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMjYyLDEwICsyNzAsMTMgQEAKIAogICAgIGZvcm1hdCA9IGZvcm1hdHNhdmU7CiAKLSAgICBmcmVlbGlzdC5lbnRyaWVzID0gUHlNZW1fTkVXKGZyZWVsaXN0ZW50cnlfdCwgbWF4KTsKLSAgICBpZiAoZnJlZWxpc3QuZW50cmllcyA9PSBOVUxMKSB7Ci0gICAgICAgIFB5RXJyX05vTWVtb3J5KCk7Ci0gICAgICAgIHJldHVybiAwOworICAgIGlmIChtYXggPiBTVEFUSUNfRlJFRUxJU1RfRU5UUklFUykgeworICAgICAgICBmcmVlbGlzdC5lbnRyaWVzID0gUHlNZW1fTkVXKGZyZWVsaXN0ZW50cnlfdCwgbWF4KTsKKyAgICAgICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIGZyZWVsaXN0LmVudHJpZXNfbWFsbG9jZWQgPSAxOwogICAgIH0KIAogICAgIGlmIChjb21wYXQpIHsKQEAgLTM1MCw3ICszNjEsNyBAQAogCiAKIHN0YXRpYyB2b2lkCi1zZXRlcnJvcihpbnQgaWFyZywgY29uc3QgY2hhciAqbXNnLCBpbnQgKmxldmVscywgY29uc3QgY2hhciAqZm5hbWUsCitzZXRlcnJvcihQeV9zc2l6ZV90IGlhcmcsIGNvbnN0IGNoYXIgKm1zZywgaW50ICpsZXZlbHMsIGNvbnN0IGNoYXIgKmZuYW1lLAogICAgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKICAgICBjaGFyIGJ1Zls1MTJdOwpAQCAtMzY2LDEwICszNzcsMTAgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoaWFyZyAhPSAwKSB7CiAgICAgICAgICAgICBQeU9TX3NucHJpbnRmKHAsIHNpemVvZihidWYpIC0gKHAgLSBidWYpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJndW1lbnQgJWQiLCBpYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3VtZW50ICUiIFBZX0ZPUk1BVF9TSVpFX1QgImQiLCBpYXJnKTsKICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgcCArPSBzdHJsZW4ocCk7Ci0gICAgICAgICAgICB3aGlsZSAobGV2ZWxzW2ldID4gMCAmJiBpIDwgMzIgJiYgKGludCkocC1idWYpIDwgMjIwKSB7CisgICAgICAgICAgICB3aGlsZSAoaSA8IDMyICYmIGxldmVsc1tpXSA+IDAgJiYgKGludCkocC1idWYpIDwgMjIwKSB7CiAgICAgICAgICAgICAgICAgUHlPU19zbnByaW50ZihwLCBzaXplb2YoYnVmKSAtIChwIC0gYnVmKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIGl0ZW0gJWQiLCBsZXZlbHNbaV0tMSk7CiAgICAgICAgICAgICAgICAgcCArPSBzdHJsZW4ocCk7CkBAIC00MTQsNiArNDI1LDcgQEAKICAgICBpbnQgbiA9IDA7CiAgICAgY29uc3QgY2hhciAqZm9ybWF0ID0gKnBfZm9ybWF0OwogICAgIGludCBpOworICAgIFB5X3NzaXplX3QgbGVuOwogCiAgICAgZm9yICg7OykgewogICAgICAgICBpbnQgYyA9ICpmb3JtYXQrKzsKQEAgLTQ0MywxMiArNDU1LDIwIEBACiAgICAgICAgIHJldHVybiBtc2didWY7CiAgICAgfQogCi0gICAgaWYgKChpID0gUHlTZXF1ZW5jZV9TaXplKGFyZykpICE9IG4pIHsKKyAgICBsZW4gPSBQeVNlcXVlbmNlX1NpemUoYXJnKTsKKyAgICBpZiAobGVuICE9IG4pIHsKICAgICAgICAgbGV2ZWxzWzBdID0gMDsKLSAgICAgICAgUHlPU19zbnByaW50Zihtc2didWYsIGJ1ZnNpemUsCi0gICAgICAgICAgICAgICAgICAgICAgdG9wbGV2ZWwgPyAiZXhwZWN0ZWQgJWQgYXJndW1lbnRzLCBub3QgJWQiIDoKLSAgICAgICAgICAgICAgICAgICAgICJtdXN0IGJlIHNlcXVlbmNlIG9mIGxlbmd0aCAlZCwgbm90ICVkIiwKLSAgICAgICAgICAgICAgICAgIG4sIGkpOworICAgICAgICBpZiAodG9wbGV2ZWwpIHsKKyAgICAgICAgICAgIFB5T1Nfc25wcmludGYobXNnYnVmLCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJWQgYXJndW1lbnRzLCBub3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIGxlbik7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBQeU9TX3NucHJpbnRmKG1zZ2J1ZiwgYnVmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc2VxdWVuY2Ugb2YgbGVuZ3RoICVkLCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgJSIgUFlfRk9STUFUX1NJWkVfVCAiZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIGxlbik7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuIG1zZ2J1ZjsKICAgICB9CiAKQEAgLTU2Myw3ICs1ODMsNyBAQAogICAgICAgICAgICAgICAgICJzaXplIGRvZXMgbm90IGZpdCBpbiBhbiBpbnQiKTsgXAogICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRlcnIoIiIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsgXAogICAgICAgICB9IFwKLSAgICAgICAgKnE9czsgXAorICAgICAgICAqcSA9IChpbnQpczsgXAogICAgIH0KICNkZWZpbmUgQlVGRkVSX0xFTiAgICAgICgoZmxhZ3MgJiBGTEFHX1NJWkVfVCkgPyAqcTI6KnEpCiAjZGVmaW5lIFJFVFVSTl9FUlJfT0NDVVJSRUQgcmV0dXJuIG1zZ2J1ZgpAQCAtODI5LDcgKzg0OSw3IEBACiAgICAgLyogWFhYIFdBQUFBSCEgICdzJywgJ3knLCAneicsICd1JywgJ1onLCAnZScsICd3JyBjb2RlcyBhbGwKICAgICAgICBuZWVkIHRvIGJlIGNsZWFuZWQgdXAhICovCiAKLSAgICBjYXNlICd5Jzogey8qIGFueSBidWZmZXItbGlrZSBvYmplY3QsIGJ1dCBub3QgUHlVbmljb2RlICovCisgICAgY2FzZSAneSc6IHsvKiBhbnkgYnl0ZXMtbGlrZSBvYmplY3QgKi8KICAgICAgICAgdm9pZCAqKnAgPSAodm9pZCAqKil2YV9hcmcoKnBfdmEsIGNoYXIgKiopOwogICAgICAgICBjaGFyICpidWY7CiAgICAgICAgIFB5X3NzaXplX3QgY291bnQ7CkBAIC04NjAsOCArODgwLDggQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSAncyc6IC8qIHRleHQgc3RyaW5nICovCi0gICAgY2FzZSAneic6IC8qIHRleHQgc3RyaW5nIG9yIE5vbmUgKi8KKyAgICBjYXNlICdzJzogLyogdGV4dCBzdHJpbmcgb3IgYnl0ZXMtbGlrZSBvYmplY3QgKi8KKyAgICBjYXNlICd6JzogLyogdGV4dCBzdHJpbmcsIGJ5dGVzLWxpa2Ugb2JqZWN0IG9yIE5vbmUgKi8KICAgICB7CiAgICAgICAgIGlmICgqZm9ybWF0ID09ICcqJykgewogICAgICAgICAgICAgLyogInMqIiBvciAieioiICovCkBAIC04NzcsNyArODk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwogICAgICAgICAgICAgICAgIFB5QnVmZmVyX0ZpbGxJbmZvKHAsIGFyZywgc2FyZywgbGVuLCAxLCAwKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgeyAvKiBhbnkgYnVmZmVyLWxpa2Ugb2JqZWN0ICovCisgICAgICAgICAgICBlbHNlIHsgLyogYW55IGJ5dGVzLWxpa2Ugb2JqZWN0ICovCiAgICAgICAgICAgICAgICAgY2hhciAqYnVmOwogICAgICAgICAgICAgICAgIGlmIChnZXRidWZmZXIoYXJnLCBwLCAmYnVmKSA8IDApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKGJ1ZiwgYXJnLCBtc2didWYsIGJ1ZnNpemUpOwpAQCAtODg4LDcgKzkwOCw3IEBACiAgICAgICAgICAgICAgICAgICAgIGFyZywgbXNnYnVmLCBidWZzaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGZvcm1hdCsrOwotICAgICAgICB9IGVsc2UgaWYgKCpmb3JtYXQgPT0gJyMnKSB7IC8qIGFueSBidWZmZXItbGlrZSBvYmplY3QgKi8KKyAgICAgICAgfSBlbHNlIGlmICgqZm9ybWF0ID09ICcjJykgeyAvKiBhIHN0cmluZyBvciByZWFkLW9ubHkgYnl0ZXMtbGlrZSBvYmplY3QgKi8KICAgICAgICAgICAgIC8qICJzIyIgb3IgInojIiAqLwogICAgICAgICAgICAgdm9pZCAqKnAgPSAodm9pZCAqKil2YV9hcmcoKnBfdmEsIGNoYXIgKiopOwogICAgICAgICAgICAgRkVUQ0hfU0laRTsKQEAgLTkwNiw3ICs5MjYsNyBAQAogICAgICAgICAgICAgICAgICpwID0gc2FyZzsKICAgICAgICAgICAgICAgICBTVE9SRV9TSVpFKGxlbik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsgLyogYW55IGJ1ZmZlci1saWtlIG9iamVjdCAqLworICAgICAgICAgICAgZWxzZSB7IC8qIHJlYWQtb25seSBieXRlcy1saWtlIG9iamVjdCAqLwogICAgICAgICAgICAgICAgIC8qIFhYWCBSZWFsbHk/ICovCiAgICAgICAgICAgICAgICAgY2hhciAqYnVmOwogICAgICAgICAgICAgICAgIFB5X3NzaXplX3QgY291bnQgPSBjb252ZXJ0YnVmZmVyKGFyZywgcCwgJmJ1Zik7CkBAIC05NDcsOCArOTY3LDggQEAKICAgICB7CiAgICAgICAgIFB5X1VOSUNPREUgKipwID0gdmFfYXJnKCpwX3ZhLCBQeV9VTklDT0RFICoqKTsKIAotICAgICAgICBpZiAoKmZvcm1hdCA9PSAnIycpIHsgLyogYW55IGJ1ZmZlci1saWtlIG9iamVjdCAqLwotICAgICAgICAgICAgLyogInMjIiBvciAiWiMiICovCisgICAgICAgIGlmICgqZm9ybWF0ID09ICcjJykgeworICAgICAgICAgICAgLyogInUjIiBvciAiWiMiICovCiAgICAgICAgICAgICBGRVRDSF9TSVpFOwogCiAgICAgICAgICAgICBpZiAoYyA9PSAnWicgJiYgYXJnID09IFB5X05vbmUpIHsKQEAgLTk2MywxMCArOTgzLDExIEBACiAgICAgICAgICAgICAgICAgU1RPUkVfU0laRShsZW4pOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0ZXJyKCJzdHIgb3IgTm9uZSIsIGFyZywgbXNnYnVmLCBidWZzaXplKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29udmVydGVycihjID09ICdaJyA/ICJzdHIgb3IgTm9uZSIgOiAic3RyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcsIG1zZ2J1ZiwgYnVmc2l6ZSk7CiAgICAgICAgICAgICBmb3JtYXQrKzsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qICJzIiBvciAiWiIgKi8KKyAgICAgICAgICAgIC8qICJ1IiBvciAiWiIgKi8KICAgICAgICAgICAgIGlmIChjID09ICdaJyAmJiBhcmcgPT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICAqcCA9IE5VTEw7CiAgICAgICAgICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2soYXJnKSkgewpAQCAtMTQxOSw5ICsxNDQwLDE1IEBACiAgICAgY29uc3QgY2hhciAqZm5hbWUsICptc2csICpjdXN0b21fbXNnLCAqa2V5d29yZDsKICAgICBpbnQgbWluID0gSU5UX01BWDsKICAgICBpbnQgbWF4ID0gSU5UX01BWDsKLSAgICBpbnQgaSwgbGVuLCBuYXJncywgbmtleXdvcmRzOworICAgIGludCBpLCBsZW47CisgICAgUHlfc3NpemVfdCBuYXJncywgbmtleXdvcmRzOwogICAgIFB5T2JqZWN0ICpjdXJyZW50X2FyZzsKLSAgICBmcmVlbGlzdF90IGZyZWVsaXN0ID0gezAsIE5VTEx9OworICAgIGZyZWVsaXN0ZW50cnlfdCBzdGF0aWNfZW50cmllc1tTVEFUSUNfRlJFRUxJU1RfRU5UUklFU107CisgICAgZnJlZWxpc3RfdCBmcmVlbGlzdDsKKworICAgIGZyZWVsaXN0LmVudHJpZXMgPSBzdGF0aWNfZW50cmllczsKKyAgICBmcmVlbGlzdC5maXJzdF9hdmFpbGFibGUgPSAwOworICAgIGZyZWVsaXN0LmVudHJpZXNfbWFsbG9jZWQgPSAwOwogCiAgICAgYXNzZXJ0KGFyZ3MgIT0gTlVMTCAmJiBQeVR1cGxlX0NoZWNrKGFyZ3MpKTsKICAgICBhc3NlcnQoa2V5d29yZHMgPT0gTlVMTCB8fCBQeURpY3RfQ2hlY2soa2V5d29yZHMpKTsKQEAgLTE0NDUsMTcgKzE0NzIsMjAgQEAKICAgICBmb3IgKGxlbj0wOyBrd2xpc3RbbGVuXTsgbGVuKyspCiAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIGxlbik7Ci0gICAgaWYgKGZyZWVsaXN0LmVudHJpZXMgPT0gTlVMTCkgewotICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobGVuID4gU1RBVElDX0ZSRUVMSVNUX0VOVFJJRVMpIHsKKyAgICAgICAgZnJlZWxpc3QuZW50cmllcyA9IFB5TWVtX05FVyhmcmVlbGlzdGVudHJ5X3QsIGxlbik7CisgICAgICAgIGlmIChmcmVlbGlzdC5lbnRyaWVzID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBmcmVlbGlzdC5lbnRyaWVzX21hbGxvY2VkID0gMTsKICAgICB9CiAKICAgICBuYXJncyA9IFB5VHVwbGVfR0VUX1NJWkUoYXJncyk7CiAgICAgbmtleXdvcmRzID0gKGtleXdvcmRzID09IE5VTEwpID8gMCA6IFB5RGljdF9TaXplKGtleXdvcmRzKTsKICAgICBpZiAobmFyZ3MgKyBua2V5d29yZHMgPiBsZW4pIHsKICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICIlcyVzIHRha2VzIGF0IG1vc3QgJWQgYXJndW1lbnQlcyAoJWQgZ2l2ZW4pIiwKKyAgICAgICAgICAgICAgICAgICAgICIlcyVzIHRha2VzIGF0IG1vc3QgJWQgYXJndW1lbnQlcyAoJXpkIGdpdmVuKSIsCiAgICAgICAgICAgICAgICAgICAgICAoZm5hbWUgPT0gTlVMTCkgPyAiZnVuY3Rpb24iIDogZm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAoZm5hbWUgPT0gTlVMTCkgPyAiIiA6ICIoKSIsCiAgICAgICAgICAgICAgICAgICAgICBsZW4sCkBAIC0xNTc0LDIwICsxNjA0LDE1IEBACiAgICAgICAgIFB5X3NzaXplX3QgcG9zID0gMDsKICAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KGtleXdvcmRzLCAmcG9zLCAma2V5LCAmdmFsdWUpKSB7CiAgICAgICAgICAgICBpbnQgbWF0Y2ggPSAwOwotICAgICAgICAgICAgY2hhciAqa3M7CiAgICAgICAgICAgICBpZiAoIVB5VW5pY29kZV9DaGVjayhrZXkpKSB7CiAgICAgICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImtleXdvcmRzIG11c3QgYmUgc3RyaW5ncyIpOwogICAgICAgICAgICAgICAgIHJldHVybiBjbGVhbnJldHVybigwLCAmZnJlZWxpc3QpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgLyogY2hlY2sgdGhhdCBfUHlVbmljb2RlX0FzU3RyaW5nKCkgcmVzdWx0IGlzIG5vdCBOVUxMICovCi0gICAgICAgICAgICBrcyA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoa2V5KTsKLSAgICAgICAgICAgIGlmIChrcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3RyY21wKGtzLCBrd2xpc3RbaV0pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaCA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksIGt3bGlzdFtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2ggPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIW1hdGNoKSB7CkBAIC0xNzg5LDcgKzE4MTQsNyBAQAogCiAvKiBGb3IgdHlwZSBjb25zdHJ1Y3RvcnMgdGhhdCBkb24ndCB0YWtlIGtleXdvcmQgYXJncwogICoKLSAqIFNldHMgYSBUeXBlRXJyb3IgYW5kIHJldHVybnMgMCBpZiB0aGUga3dkcyBkaWN0IGlzCisgKiBTZXRzIGEgVHlwZUVycm9yIGFuZCByZXR1cm5zIDAgaWYgdGhlIGFyZ3Mva3dhcmdzIGlzCiAgKiBub3QgZW1wdHksIHJldHVybnMgMSBvdGhlcndpc2UKICAqLwogaW50CkBAIC0xODA4LDYgKzE4MzMsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgZnVuY25hbWUpOwogICAgIHJldHVybiAwOwogfQorCisKK2ludAorX1B5QXJnX05vUG9zaXRpb25hbChjb25zdCBjaGFyICpmdW5jbmFtZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgaWYgKGFyZ3MgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgaWYgKCFQeVR1cGxlX0NoZWNrRXhhY3QoYXJncykpIHsKKyAgICAgICAgUHlFcnJfQmFkSW50ZXJuYWxDYWxsKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAoUHlUdXBsZV9HRVRfU0laRShhcmdzKSA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKworICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19UeXBlRXJyb3IsICIlcyBkb2VzIG5vdCB0YWtlIHBvc2l0aW9uYWwgYXJndW1lbnRzIiwKKyAgICAgICAgICAgICAgICAgICAgZnVuY25hbWUpOworICAgIHJldHVybiAwOworfQorCiAjaWZkZWYgX19jcGx1c3BsdXMKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1B5dGhvbi9nZXRjd2QuYyBiL1B5dGhvbi9nZXRjd2QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGJlZGJkMS4uMDAwMDAwMAotLS0gYS9QeXRob24vZ2V0Y3dkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MyArMCwwIEBACi0KLS8qIFR3byBQRCBnZXRjd2QoKSBpbXBsZW1lbnRhdGlvbnMuCi0gICBBdXRob3I6IEd1aWRvIHZhbiBSb3NzdW0sIENXSSBBbXN0ZXJkYW0sIEphbiAxOTkxLCA8Z3VpZG9AY3dpLm5sPi4gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmZGVmIEhBVkVfR0VUV0QKLQotLyogVmVyc2lvbiBmb3IgQlNEIHN5c3RlbXMgLS0gdXNlIGdldHdkKCkgKi8KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotCi0jaWZuZGVmIE1BWFBBVEhMRU4KLSNpZiBkZWZpbmVkKFBBVEhfTUFYKSAmJiBQQVRIX01BWCA+IDEwMjQKLSNkZWZpbmUgTUFYUEFUSExFTiBQQVRIX01BWAotI2Vsc2UKLSNkZWZpbmUgTUFYUEFUSExFTiAxMDI0Ci0jZW5kaWYKLSNlbmRpZgotCi1leHRlcm4gY2hhciAqZ2V0d2QoY2hhciAqKTsKLQotY2hhciAqCi1nZXRjd2QoY2hhciAqYnVmLCBpbnQgc2l6ZSkKLXsKLSAgICBjaGFyIGxvY2FsYnVmW01BWFBBVEhMRU4rMV07Ci0gICAgY2hhciAqcmV0OwotCi0gICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgICBlcnJubyA9IEVJTlZBTDsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHJldCA9IGdldHdkKGxvY2FsYnVmKTsKLSAgICBpZiAocmV0ICE9IE5VTEwgJiYgc3RybGVuKGxvY2FsYnVmKSA+PSAoc2l6ZV90KXNpemUpIHsKLSAgICAgICAgZXJybm8gPSBFUkFOR0U7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBpZiAocmV0ID09IE5VTEwpIHsKLSAgICAgICAgZXJybm8gPSBFQUNDRVM7IC8qIE1vc3QgbGlrZWx5IGVycm9yICovCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBzdHJuY3B5KGJ1ZiwgbG9jYWxidWYsIHNpemUpOwotICAgIHJldHVybiBidWY7Ci19Ci0KLSNlbHNlIC8qICFIQVZFX0dFVFdEICovCi0KLS8qIFZlcnNpb24gZm9yIHJlYWxseSBvbGQgVU5JWCBzeXN0ZW1zIC0tIHVzZSBwaXBlIGZyb20gcHdkICovCi0KLSNpZm5kZWYgUFdEX0NNRAotI2RlZmluZSBQV0RfQ01EICIvYmluL3B3ZCIKLSNlbmRpZgotCi1jaGFyICoKLWdldGN3ZChjaGFyICpidWYsIGludCBzaXplKQotewotICAgIEZJTEUgKmZwOwotICAgIGNoYXIgKnA7Ci0gICAgaW50IHN0czsKLSAgICBpZiAoc2l6ZSA8PSAwKSB7Ci0gICAgICAgIGVycm5vID0gRUlOVkFMOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgaWYgKChmcCA9IHBvcGVuKFBXRF9DTUQsICJyIikpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChmZ2V0cyhidWYsIHNpemUsIGZwKSA9PSBOVUxMIHx8IChzdHMgPSBwY2xvc2UoZnApKSAhPSAwKSB7Ci0gICAgICAgIGVycm5vID0gRUFDQ0VTOyAvKiBNb3N0IGxpa2VseSBlcnJvciAqLwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgZm9yIChwID0gYnVmOyAqcCAhPSAnXG4nOyBwKyspIHsKLSAgICAgICAgaWYgKCpwID09ICdcMCcpIHsKLSAgICAgICAgICAgIGVycm5vID0gRVJBTkdFOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgKnAgPSAnXDAnOwotICAgIHJldHVybiBidWY7Ci19Ci0KLSNlbmRpZiAvKiAhSEFWRV9HRVRXRCAqLwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydC5jIGIvUHl0aG9uL2ltcG9ydC5jCmluZGV4IGIwYjI0MDUuLjRmMDc2NWEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9pbXBvcnQuYworKysgYi9QeXRob24vaW1wb3J0LmMKQEAgLTE5LDIyICsxOSwxMSBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2lmZGVmIE1TX1dJTkRPV1MKLS8qIGZvciBzdGF0LnN0X21vZGUgKi8KLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbW9kZV90OwotLyogZm9yIF9ta2RpciAqLwotI2luY2x1ZGUgPGRpcmVjdC5oPgotI2VuZGlmCi0KLQogI2RlZmluZSBDQUNIRURJUiAiX19weWNhY2hlX18iCiAKIC8qIFNlZSBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoKSBiZWxvdyAqLwogc3RhdGljIFB5T2JqZWN0ICpleHRlbnNpb25zID0gTlVMTDsKIAotLyogRnVuY3Rpb24gZnJvbSBQYXJzZXIvdG9rZW5pemVyLmMgKi8KLWV4dGVybiBjaGFyICogUHlUb2tlbml6ZXJfRmluZEVuY29kaW5nRmlsZW5hbWUoaW50LCBQeU9iamVjdCAqKTsKLQogLyogVGhpcyB0YWJsZSBpcyBkZWZpbmVkIGluIGNvbmZpZy5jOiAqLwogZXh0ZXJuIHN0cnVjdCBfaW5pdHRhYiBfUHlJbXBvcnRfSW5pdHRhYltdOwogCkBAIC00MiwxNCArMzEsMzEgQEAKIAogc3RhdGljIFB5T2JqZWN0ICppbml0c3RyID0gTlVMTDsKIAorLypbY2xpbmljIGlucHV0XQorbW9kdWxlIF9pbXAKK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kYTM5YTNlZTVlNmI0YjBkIGlucHV0PTljMzMyNDc1ZDg2ODYyODRdKi8KKworLypbcHl0aG9uIGlucHV0XQorY2xhc3MgZnNfdW5pY29kZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGNvbnZlcnRlciA9ICdQeVVuaWNvZGVfRlNEZWNvZGVyJworCitbcHl0aG9uIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisvKltweXRob24gZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGEzOWEzZWU1ZTZiNGIwZCBpbnB1dD05ZDY3ODYyMzAxNjYwMDZlXSovCisKIC8qIEluaXRpYWxpemUgdGhpbmdzICovCiAKIHZvaWQKIF9QeUltcG9ydF9Jbml0KHZvaWQpCiB7CisgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dldCgpLT5pbnRlcnA7CiAgICAgaW5pdHN0ciA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCJfX2luaXRfXyIpOwogICAgIGlmIChpbml0c3RyID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNhbid0IGluaXRpYWxpemUgaW1wb3J0IHZhcmlhYmxlcyIpOworICAgIGludGVycC0+YnVpbHRpbnNfY29weSA9IFB5RGljdF9Db3B5KGludGVycC0+YnVpbHRpbnMpOworICAgIGlmIChpbnRlcnAtPmJ1aWx0aW5zX2NvcHkgPT0gTlVMTCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiQ2FuJ3QgYmFja3VwIGJ1aWx0aW5zIGRpY3QiKTsKIH0KIAogdm9pZApAQCAtOTMsOCArOTksMTAgQEAKICAgICBpbnQgZXJyID0gMDsKIAogICAgIHBhdGhfaG9va3MgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaG9va3MiKTsKLSAgICBpZiAocGF0aF9ob29rcyA9PSBOVUxMKQorICAgIGlmIChwYXRoX2hvb2tzID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgInVuYWJsZSB0byBnZXQgc3lzLnBhdGhfaG9va3MiKTsKICAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CiAKICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCiAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGluc3RhbGxpbmcgemlwaW1wb3J0IGhvb2tcbiIpOwpAQCAtMjA4LDggKzIxNiwxMSBAQAogICAgIGlmIChpbXBvcnRfbG9ja19sZXZlbCA+IDEpIHsKICAgICAgICAgLyogRm9ya2VkIGFzIGEgc2lkZSBlZmZlY3Qgb2YgaW1wb3J0ICovCiAgICAgICAgIGxvbmcgbWUgPSBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCk7Ci0gICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhpbXBvcnRfbG9jaywgMCk7Ci0gICAgICAgIC8qIFhYWDogY2FuIHRoZSBwcmV2aW91cyBsaW5lIGZhaWw/ICovCisgICAgICAgIC8qIFRoZSBmb2xsb3dpbmcgY291bGQgZmFpbCBpZiB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGQsIGJ1dCBmb3JraW5nIGFzCisgICAgICAgICAgIGEgc2lkZS1lZmZlY3Qgb2YgYW4gaW1wb3J0IGlzIGEpIHJhcmUsIGIpIG51dHMsIGFuZCBjKSBkaWZmaWN1bHQgdG8KKyAgICAgICAgICAgZG8gdGhhbmtzIHRvIHRoZSBsb2NrIG9ubHkgYmVpbmcgaGVsZCB3aGVuIGRvaW5nIGluZGl2aWR1YWwgbW9kdWxlCisgICAgICAgICAgIGxvY2tzIHBlciBpbXBvcnQuICovCisgICAgICAgIFB5VGhyZWFkX2FjcXVpcmVfbG9jayhpbXBvcnRfbG9jaywgTk9XQUlUX0xPQ0spOwogICAgICAgICBpbXBvcnRfbG9ja190aHJlYWQgPSBtZTsKICAgICAgICAgaW1wb3J0X2xvY2tfbGV2ZWwtLTsKICAgICB9IGVsc2UgewpAQCAtMjIwLDggKzIzMSwzNyBAQAogCiAjZW5kaWYKIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5sb2NrX2hlbGQKKworUmV0dXJuIFRydWUgaWYgdGhlIGltcG9ydCBsb2NrIGlzIGN1cnJlbnRseSBoZWxkLCBlbHNlIEZhbHNlLgorCitPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCByZXR1cm4gRmFsc2UuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2xvY2tfaGVsZF9fZG9jX18sCisibG9ja19oZWxkKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJSZXR1cm4gVHJ1ZSBpZiB0aGUgaW1wb3J0IGxvY2sgaXMgY3VycmVudGx5IGhlbGQsIGVsc2UgRmFsc2UuXG4iCisiXG4iCisiT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgcmV0dXJuIEZhbHNlLiIpOworCisjZGVmaW5lIF9JTVBfTE9DS19IRUxEX01FVEhPRERFRiAgICBcCisgICAgeyJsb2NrX2hlbGQiLCAoUHlDRnVuY3Rpb24pX2ltcF9sb2NrX2hlbGQsIE1FVEhfTk9BUkdTLCBfaW1wX2xvY2tfaGVsZF9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2xvY2tfaGVsZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK19pbXBfbG9ja19oZWxkX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2xvY2tfaGVsZChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW1wX2xvY2tfaGVsZF9pbXBsKG1vZHVsZSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2xvY2tfaGVsZF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ZGFlNjU2NzQ5NjZiYWE2NSBpbnB1dD05YjA4OGY5YjIxN2Q5YmRmXSovCiB7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICByZXR1cm4gUHlCb29sX0Zyb21Mb25nKGltcG9ydF9sb2NrX3RocmVhZCAhPSAtMSk7CkBAIC0yMzAsOCArMjcwLDM5IEBACiAjZW5kaWYKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5hY3F1aXJlX2xvY2sKKworQWNxdWlyZXMgdGhlIGludGVycHJldGVyJ3MgaW1wb3J0IGxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZC4KKworVGhpcyBsb2NrIHNob3VsZCBiZSB1c2VkIGJ5IGltcG9ydCBob29rcyB0byBlbnN1cmUgdGhyZWFkLXNhZmV0eSB3aGVuIGltcG9ydGluZworbW9kdWxlcy4gT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2FjcXVpcmVfbG9ja19fZG9jX18sCisiYWNxdWlyZV9sb2NrKCRtb2R1bGUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJBY3F1aXJlcyB0aGUgaW50ZXJwcmV0ZXJcJ3MgaW1wb3J0IGxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZC5cbiIKKyJcbiIKKyJUaGlzIGxvY2sgc2hvdWxkIGJlIHVzZWQgYnkgaW1wb3J0IGhvb2tzIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5IHdoZW4gaW1wb3J0aW5nXG4iCisibW9kdWxlcy4gT24gcGxhdGZvcm1zIHdpdGhvdXQgdGhyZWFkcywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcuIik7CisKKyNkZWZpbmUgX0lNUF9BQ1FVSVJFX0xPQ0tfTUVUSE9EREVGICAgIFwKKyAgICB7ImFjcXVpcmVfbG9jayIsIChQeUNGdW5jdGlvbilfaW1wX2FjcXVpcmVfbG9jaywgTUVUSF9OT0FSR1MsIF9pbXBfYWNxdWlyZV9sb2NrX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfYWNxdWlyZV9sb2NrKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqbm9hcmdzKQorX2ltcF9hY3F1aXJlX2xvY2tfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlKTsKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfYWNxdWlyZV9sb2NrKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpQeV9VTlVTRUQoaWdub3JlZCkpCit7CisgICAgcmV0dXJuIF9pbXBfYWNxdWlyZV9sb2NrX2ltcGwobW9kdWxlKTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfYWNxdWlyZV9sb2NrX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD00NzhmMWZhMDg5ZmRiOWE0IGlucHV0PTRhMmQ0MzgxODY2ZDVmZGNdKi8KIHsKICNpZmRlZiBXSVRIX1RIUkVBRAogICAgIF9QeUltcG9ydF9BY3F1aXJlTG9jaygpOwpAQCAtMjQwLDggKzMxMSwzNyBAQAogICAgIHJldHVybiBQeV9Ob25lOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLnJlbGVhc2VfbG9jaworCitSZWxlYXNlIHRoZSBpbnRlcnByZXRlcidzIGltcG9ydCBsb2NrLgorCitPbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfcmVsZWFzZV9sb2NrX19kb2NfXywKKyJyZWxlYXNlX2xvY2soJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJlbGVhc2UgdGhlIGludGVycHJldGVyXCdzIGltcG9ydCBsb2NrLlxuIgorIlxuIgorIk9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiIpOworCisjZGVmaW5lIF9JTVBfUkVMRUFTRV9MT0NLX01FVEhPRERFRiAgICBcCisgICAgeyJyZWxlYXNlX2xvY2siLCAoUHlDRnVuY3Rpb24pX2ltcF9yZWxlYXNlX2xvY2ssIE1FVEhfTk9BUkdTLCBfaW1wX3JlbGVhc2VfbG9ja19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX3JlbGVhc2VfbG9jayhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK19pbXBfcmVsZWFzZV9sb2NrX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX3JlbGVhc2VfbG9jayhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW1wX3JlbGVhc2VfbG9ja19pbXBsKG1vZHVsZSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX3JlbGVhc2VfbG9ja19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9MzZjNzdhNjgzMmZkYWZkNCBpbnB1dD05MzRmYjExNTE2ZGQ3NzhiXSovCiB7CiAjaWZkZWYgV0lUSF9USFJFQUQKICAgICBpZiAoX1B5SW1wb3J0X1JlbGVhc2VMb2NrKCkgPCAwKSB7CkBAIC0yODMsNiArMzgzLDcgQEAKICAgICAicGF0aCIsICJhcmd2IiwgInBzMSIsICJwczIiLAogICAgICJsYXN0X3R5cGUiLCAibGFzdF92YWx1ZSIsICJsYXN0X3RyYWNlYmFjayIsCiAgICAgInBhdGhfaG9va3MiLCAicGF0aF9pbXBvcnRlcl9jYWNoZSIsICJtZXRhX3BhdGgiLAorICAgICJfX2ludGVyYWN0aXZlaG9va19fIiwKICAgICAvKiBtaXNjIHN0dWZmICovCiAgICAgImZsYWdzIiwgImZsb2F0X2luZm8iLAogICAgIE5VTEwKQEAgLTI5NSwxNiArMzk2LDE3IEBACiAgICAgTlVMTAogfTsKIAotCiAvKiBVbi1pbml0aWFsaXplIHRoaW5ncywgYXMgZ29vZCBhcyB3ZSBjYW4gKi8KIAogdm9pZAogUHlJbXBvcnRfQ2xlYW51cCh2b2lkKQogewotICAgIFB5X3NzaXplX3QgcG9zLCBuZG9uZTsKKyAgICBQeV9zc2l6ZV90IHBvczsKICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWUsICpkaWN0OwogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOwogICAgIFB5T2JqZWN0ICptb2R1bGVzID0gaW50ZXJwLT5tb2R1bGVzOworICAgIFB5T2JqZWN0ICp3ZWFrbGlzdCA9IE5VTEw7CisgICAgY2hhciAqKnA7CiAKICAgICBpZiAobW9kdWxlcyA9PSBOVUxMKQogICAgICAgICByZXR1cm47IC8qIEFscmVhZHkgZG9uZSAqLwpAQCAtMzE1LDExNCArNDE3LDEyOSBAQAogICAgICAgIGRlbGV0ZWQgKmxhc3QqIG9mIGFsbCwgdGhleSB3b3VsZCBjb21lIHRvbyBsYXRlIGluIHRoZSBub3JtYWwKICAgICAgICBkZXN0cnVjdGlvbiBvcmRlci4gIFNpZ2guICovCiAKLSAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJidWlsdGlucyIpOwotICAgIGlmICh2YWx1ZSAhPSBOVUxMICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBkaWN0ID0gUHlNb2R1bGVfR2V0RGljdCh2YWx1ZSk7CisgICAgLyogWFhYIFBlcmhhcHMgdGhlc2UgcHJlY2F1dGlvbnMgYXJlIG9ic29sZXRlLiBXaG8ga25vd3M/ICovCisKKyAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCisgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFyIGJ1aWx0aW5zLl9cbiIpOworICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+YnVpbHRpbnMsICJfIiwgUHlfTm9uZSk7CisKKyAgICBmb3IgKHAgPSBzeXNfZGVsZXRlczsgKnAgIT0gTlVMTDsgcCsrKSB7CiAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFyIGJ1aWx0aW5zLl9cbiIpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhkaWN0LCAiXyIsIFB5X05vbmUpOworICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYXIgc3lzLiVzXG4iLCAqcCk7CisgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+c3lzZGljdCwgKnAsIFB5X05vbmUpOwogICAgIH0KLSAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJzeXMiKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgY2hhciAqKnA7Ci0gICAgICAgIFB5T2JqZWN0ICp2OwotICAgICAgICBkaWN0ID0gUHlNb2R1bGVfR2V0RGljdCh2YWx1ZSk7Ci0gICAgICAgIGZvciAocCA9IHN5c19kZWxldGVzOyAqcCAhPSBOVUxMOyBwKyspIHsKLSAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyBjbGVhciBzeXMuJXNcbiIsICpwKTsKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGRpY3QsICpwLCBQeV9Ob25lKTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKHAgPSBzeXNfZmlsZXM7ICpwICE9IE5VTEw7IHArPTIpIHsKLSAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyByZXN0b3JlIHN5cy4lc1xuIiwgKnApOwotICAgICAgICAgICAgdiA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGRpY3QsICoocCsxKSk7Ci0gICAgICAgICAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHYgPSBQeV9Ob25lOwotICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoZGljdCwgKnAsIHYpOworICAgIGZvciAocCA9IHN5c19maWxlczsgKnAgIT0gTlVMTDsgcCs9MikgeworICAgICAgICBpZiAoUHlfVmVyYm9zZUZsYWcpCisgICAgICAgICAgICBQeVN5c19Xcml0ZVN0ZGVycigiIyByZXN0b3JlIHN5cy4lc1xuIiwgKnApOworICAgICAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKGludGVycC0+c3lzZGljdCwgKihwKzEpKTsKKyAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCisgICAgICAgICAgICB2YWx1ZSA9IFB5X05vbmU7CisgICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKGludGVycC0+c3lzZGljdCwgKnAsIHZhbHVlKTsKKyAgICB9CisKKyAgICAvKiBXZSBwcmVwYXJlIGEgbGlzdCB3aGljaCB3aWxsIHJlY2VpdmUgKG5hbWUsIHdlYWtyZWYpIHR1cGxlcyBvZgorICAgICAgIG1vZHVsZXMgd2hlbiB0aGV5IGFyZSByZW1vdmVkIGZyb20gc3lzLm1vZHVsZXMuICBUaGUgbmFtZSBpcyB1c2VkCisgICAgICAgZm9yIGRpYWdub3NpcyBtZXNzYWdlcyAoaW4gdmVyYm9zZSBtb2RlKSwgd2hpbGUgdGhlIHdlYWtyZWYgaGVscHMKKyAgICAgICBkZXRlY3QgdGhvc2UgbW9kdWxlcyB3aGljaCBoYXZlIGJlZW4gaGVsZCBhbGl2ZS4gKi8KKyAgICB3ZWFrbGlzdCA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHdlYWtsaXN0ID09IE5VTEwpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CisKKyNkZWZpbmUgU1RPUkVfTU9EVUxFX1dFQUtSRUYobmFtZSwgbW9kKSBcCisgICAgaWYgKHdlYWtsaXN0ICE9IE5VTEwpIHsgXAorICAgICAgICBQeU9iamVjdCAqd3IgPSBQeVdlYWtyZWZfTmV3UmVmKG1vZCwgTlVMTCk7IFwKKyAgICAgICAgaWYgKG5hbWUgJiYgd3IpIHsgXAorICAgICAgICAgICAgUHlPYmplY3QgKnR1cCA9IFB5VHVwbGVfUGFjaygyLCBuYW1lLCB3cik7IFwKKyAgICAgICAgICAgIFB5TGlzdF9BcHBlbmQod2Vha2xpc3QsIHR1cCk7IFwKKyAgICAgICAgICAgIFB5X1hERUNSRUYodHVwKTsgXAorICAgICAgICB9IFwKKyAgICAgICAgUHlfWERFQ1JFRih3cik7IFwKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIFwKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7IFwKKyAgICB9CisKKyAgICAvKiBSZW1vdmUgYWxsIG1vZHVsZXMgZnJvbSBzeXMubW9kdWxlcywgaG9waW5nIHRoYXQgZ2FyYmFnZSBjb2xsZWN0aW9uCisgICAgICAgY2FuIHJlY2xhaW0gbW9zdCBvZiB0aGVtLiAqLworICAgIHBvcyA9IDA7CisgICAgd2hpbGUgKFB5RGljdF9OZXh0KG1vZHVsZXMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKKyAgICAgICAgaWYgKFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgeworICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnICYmIFB5VW5pY29kZV9DaGVjayhrZXkpKQorICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzJdIHJlbW92aW5nICVVXG4iLCBrZXkpOworICAgICAgICAgICAgU1RPUkVfTU9EVUxFX1dFQUtSRUYoa2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBQeURpY3RfU2V0SXRlbShtb2R1bGVzLCBrZXksIFB5X05vbmUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLyogRmlyc3QsIGRlbGV0ZSBfX21haW5fXyAqLwotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgIl9fbWFpbl9fIik7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFudXAgX19tYWluX19cbiIpOwotICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiX19tYWluX18iLCBQeV9Ob25lKTsKLSAgICB9CisgICAgLyogQ2xlYXIgdGhlIG1vZHVsZXMgZGljdC4gKi8KKyAgICBQeURpY3RfQ2xlYXIobW9kdWxlcyk7CisgICAgLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgYnVpbHRpbnMgZGljdCwgdG8gZW5zdXJlIHRoYXQgYW55CisgICAgICAgdXNlciBkYXRhIGdldHMgY2xlYXJlZC4gKi8KKyAgICBkaWN0ID0gUHlEaWN0X0NvcHkoaW50ZXJwLT5idWlsdGlucyk7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBQeURpY3RfQ2xlYXIoaW50ZXJwLT5idWlsdGlucyk7CisgICAgaWYgKFB5RGljdF9VcGRhdGUoaW50ZXJwLT5idWlsdGlucywgaW50ZXJwLT5idWlsdGluc19jb3B5KSkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBQeV9YREVDUkVGKGRpY3QpOworICAgIC8qIENsZWFyIG1vZHVsZSBkaWN0IGNvcGllcyBzdG9yZWQgaW4gdGhlIGludGVycHJldGVyIHN0YXRlICovCisgICAgX1B5U3RhdGVfQ2xlYXJNb2R1bGVzKCk7CisgICAgLyogQ29sbGVjdCByZWZlcmVuY2VzICovCisgICAgX1B5R0NfQ29sbGVjdE5vRmFpbCgpOworICAgIC8qIER1bXAgR0Mgc3RhdHMgYmVmb3JlIGl0J3MgdG9vIGxhdGUsIHNpbmNlIGl0IHVzZXMgdGhlIHdhcm5pbmdzCisgICAgICAgbWFjaGluZXJ5LiAqLworICAgIF9QeUdDX0R1bXBTaHV0ZG93blN0YXRzKCk7CiAKLSAgICAvKiBUaGUgc3BlY2lhbCB0cmVhdG1lbnQgb2YgImJ1aWx0aW5zIiBoZXJlIGlzIGJlY2F1c2UgZXZlbgorICAgIC8qIE5vdywgaWYgdGhlcmUgYXJlIGFueSBtb2R1bGVzIGxlZnQgYWxpdmUsIGNsZWFyIHRoZWlyIGdsb2JhbHMgdG8KKyAgICAgICBtaW5pbWl6ZSBwb3RlbnRpYWwgbGVha3MuICBBbGwgQyBleHRlbnNpb24gbW9kdWxlcyBhY3R1YWxseSBlbmQKKyAgICAgICB1cCBoZXJlLCBzaW5jZSB0aGV5IGFyZSBrZXB0IGFsaXZlIGluIHRoZSBpbnRlcnByZXRlciBzdGF0ZS4KKworICAgICAgIFRoZSBzcGVjaWFsIHRyZWF0bWVudCBvZiAiYnVpbHRpbnMiIGhlcmUgaXMgYmVjYXVzZSBldmVuCiAgICAgICAgd2hlbiBpdCdzIG5vdCByZWZlcmVuY2VkIGFzIGEgbW9kdWxlLCBpdHMgZGljdGlvbmFyeSBpcwogICAgICAgIHJlZmVyZW5jZWQgYnkgYWxtb3N0IGV2ZXJ5IG1vZHVsZSdzIF9fYnVpbHRpbnNfXy4gIFNpbmNlCiAgICAgICAgZGVsZXRpbmcgYSBtb2R1bGUgY2xlYXJzIGl0cyBkaWN0aW9uYXJ5IChldmVuIGlmIHRoZXJlIGFyZQogICAgICAgIHJlZmVyZW5jZXMgbGVmdCB0byBpdCksIHdlIG5lZWQgdG8gZGVsZXRlIHRoZSAiYnVpbHRpbnMiCiAgICAgICAgbW9kdWxlIGxhc3QuICBMaWtld2lzZSwgd2UgZG9uJ3QgZGVsZXRlIHN5cyB1bnRpbCB0aGUgdmVyeQotICAgICAgIGVuZCBiZWNhdXNlIGl0IGlzIGltcGxpY2l0bHkgcmVmZXJlbmNlZCAoZS5nLiBieSBwcmludCkuCi0KLSAgICAgICBBbHNvIG5vdGUgdGhhdCB3ZSAnZGVsZXRlJyBtb2R1bGVzIGJ5IHJlcGxhY2luZyB0aGVpciBlbnRyeQotICAgICAgIGluIHRoZSBtb2R1bGVzIGRpY3Qgd2l0aCBOb25lLCByYXRoZXIgdGhhbiByZWFsbHkgZGVsZXRpbmcKLSAgICAgICB0aGVtOyB0aGlzIGF2b2lkcyBhIHJlaGFzaCBvZiB0aGUgbW9kdWxlcyBkaWN0aW9uYXJ5IGFuZAotICAgICAgIGFsc28gbWFya3MgdGhlbSBhcyAibm9uIGV4aXN0ZW50IiBzbyB0aGV5IHdvbid0IGJlCi0gICAgICAgcmUtaW1wb3J0ZWQuICovCi0KLSAgICAvKiBOZXh0LCByZXBlYXRlZGx5IGRlbGV0ZSBtb2R1bGVzIHdpdGggYSByZWZlcmVuY2UgY291bnQgb2YKLSAgICAgICBvbmUgKHNraXBwaW5nIGJ1aWx0aW5zIGFuZCBzeXMpIGFuZCBkZWxldGUgdGhlbSAqLwotICAgIGRvIHsKLSAgICAgICAgbmRvbmUgPSAwOwotICAgICAgICBwb3MgPSAwOwotICAgICAgICB3aGlsZSAoUHlEaWN0X05leHQobW9kdWxlcywgJnBvcywgJmtleSwgJnZhbHVlKSkgewotICAgICAgICAgICAgaWYgKHZhbHVlLT5vYl9yZWZjbnQgIT0gMSkKKyAgICAgICBlbmQgYmVjYXVzZSBpdCBpcyBpbXBsaWNpdGx5IHJlZmVyZW5jZWQgKGUuZy4gYnkgcHJpbnQpLiAqLworICAgIGlmICh3ZWFrbGlzdCAhPSBOVUxMKSB7CisgICAgICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICAgICAgbiA9IFB5TGlzdF9HRVRfU0laRSh3ZWFrbGlzdCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICp0dXAgPSBQeUxpc3RfR0VUX0lURU0od2Vha2xpc3QsIGkpOworICAgICAgICAgICAgUHlPYmplY3QgKm5hbWUgPSBQeVR1cGxlX0dFVF9JVEVNKHR1cCwgMCk7CisgICAgICAgICAgICBQeU9iamVjdCAqbW9kID0gUHlXZWFrcmVmX0dFVF9PQkpFQ1QoUHlUdXBsZV9HRVRfSVRFTSh0dXAsIDEpKTsKKyAgICAgICAgICAgIGlmIChtb2QgPT0gUHlfTm9uZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ2hlY2soa2V5KSAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAiYnVpbHRpbnMiKSA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZiAoUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcoa2V5LCAic3lzIikgPT0gMCkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoCi0gICAgICAgICAgICAgICAgICAgICAgICAiIyBjbGVhbnVwWzFdICVVXG4iLCBrZXkpOwotICAgICAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcih2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgUHlEaWN0X1NldEl0ZW0obW9kdWxlcywga2V5LCBQeV9Ob25lKTsKLSAgICAgICAgICAgICAgICBuZG9uZSsrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0KFB5TW9kdWxlX0NoZWNrKG1vZCkpOworICAgICAgICAgICAgZGljdCA9IFB5TW9kdWxlX0dldERpY3QobW9kKTsKKyAgICAgICAgICAgIGlmIChkaWN0ID09IGludGVycC0+YnVpbHRpbnMgfHwgZGljdCA9PSBpbnRlcnAtPnN5c2RpY3QpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBQeV9JTkNSRUYobW9kKTsKKyAgICAgICAgICAgIGlmIChQeV9WZXJib3NlRmxhZyAmJiBQeVVuaWNvZGVfQ2hlY2sobmFtZSkpCisgICAgICAgICAgICAgICAgUHlTeXNfRm9ybWF0U3RkZXJyKCIjIGNsZWFudXBbM10gd2lwaW5nICVVXG4iLCBuYW1lKTsKKyAgICAgICAgICAgIF9QeU1vZHVsZV9DbGVhcihtb2QpOworICAgICAgICAgICAgUHlfREVDUkVGKG1vZCk7CiAgICAgICAgIH0KLSAgICB9IHdoaWxlIChuZG9uZSA+IDApOwotCi0gICAgLyogTmV4dCwgZGVsZXRlIGFsbCBtb2R1bGVzIChzdGlsbCBza2lwcGluZyBidWlsdGlucyBhbmQgc3lzKSAqLwotICAgIHBvcyA9IDA7Ci0gICAgd2hpbGUgKFB5RGljdF9OZXh0KG1vZHVsZXMsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5VW5pY29kZV9DaGVjayhrZXkpICYmIFB5TW9kdWxlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9Db21wYXJlV2l0aEFTQ0lJU3RyaW5nKGtleSwgImJ1aWx0aW5zIikgPT0gMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmIChQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhrZXksICJzeXMiKSA9PSAwKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgICAgIFB5U3lzX0Zvcm1hdFN0ZGVycigiIyBjbGVhbnVwWzJdICVVXG4iLCBrZXkpOwotICAgICAgICAgICAgX1B5TW9kdWxlX0NsZWFyKHZhbHVlKTsKLSAgICAgICAgICAgIFB5RGljdF9TZXRJdGVtKG1vZHVsZXMsIGtleSwgUHlfTm9uZSk7Ci0gICAgICAgIH0KKyAgICAgICAgUHlfREVDUkVGKHdlYWtsaXN0KTsKICAgICB9CiAKICAgICAvKiBOZXh0LCBkZWxldGUgc3lzIGFuZCBidWlsdGlucyAoaW4gdGhhdCBvcmRlcikgKi8KLSAgICB2YWx1ZSA9IFB5RGljdF9HZXRJdGVtU3RyaW5nKG1vZHVsZXMsICJzeXMiKTsKLSAgICBpZiAodmFsdWUgIT0gTlVMTCAmJiBQeU1vZHVsZV9DaGVjayh2YWx1ZSkpIHsKLSAgICAgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQotICAgICAgICAgICAgUHlTeXNfV3JpdGVTdGRlcnIoIiMgY2xlYW51cCBzeXNcbiIpOwotICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhtb2R1bGVzLCAic3lzIiwgUHlfTm9uZSk7Ci0gICAgfQotICAgIHZhbHVlID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcobW9kdWxlcywgImJ1aWx0aW5zIik7Ci0gICAgaWYgKHZhbHVlICE9IE5VTEwgJiYgUHlNb2R1bGVfQ2hlY2sodmFsdWUpKSB7Ci0gICAgICAgIGlmIChQeV9WZXJib3NlRmxhZykKLSAgICAgICAgICAgIFB5U3lzX1dyaXRlU3RkZXJyKCIjIGNsZWFudXAgYnVpbHRpbnNcbiIpOwotICAgICAgICBfUHlNb2R1bGVfQ2xlYXIodmFsdWUpOwotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiLCBQeV9Ob25lKTsKLSAgICB9CisgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQorICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFszXSB3aXBpbmcgc3lzXG4iKTsKKyAgICBfUHlNb2R1bGVfQ2xlYXJEaWN0KGludGVycC0+c3lzZGljdCk7CisgICAgaWYgKFB5X1ZlcmJvc2VGbGFnKQorICAgICAgICBQeVN5c19Gb3JtYXRTdGRlcnIoIiMgY2xlYW51cFszXSB3aXBpbmcgYnVpbHRpbnNcbiIpOworICAgIF9QeU1vZHVsZV9DbGVhckRpY3QoaW50ZXJwLT5idWlsdGlucyk7CiAKLSAgICAvKiBGaW5hbGx5LCBjbGVhciBhbmQgZGVsZXRlIHRoZSBtb2R1bGVzIGRpcmVjdG9yeSAqLwotICAgIFB5RGljdF9DbGVhcihtb2R1bGVzKTsKKyAgICAvKiBDbGVhciBhbmQgZGVsZXRlIHRoZSBtb2R1bGVzIGRpcmVjdG9yeS4gIEFjdHVhbCBtb2R1bGVzIHdpbGwKKyAgICAgICBzdGlsbCBiZSB0aGVyZSBvbmx5IGlmIGltcG9ydGVkIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIHNvbWUKKyAgICAgICBkZXN0cnVjdG9yLiAqLwogICAgIGludGVycC0+bW9kdWxlcyA9IE5VTEw7CiAgICAgUHlfREVDUkVGKG1vZHVsZXMpOworCisgICAgLyogT25jZSBtb3JlICovCisgICAgX1B5R0NfQ29sbGVjdE5vRmFpbCgpOworCisjdW5kZWYgU1RPUkVfTU9EVUxFX1dFQUtSRUYKIH0KIAogCkBAIC00NTQsMTIgKzU3MSwxMiBAQAogCiAvKiBNYWdpYyBmb3IgZXh0ZW5zaW9uIG1vZHVsZXMgKGJ1aWx0LWluIGFzIHdlbGwgYXMgZHluYW1pY2FsbHkKICAgIGxvYWRlZCkuICBUbyBwcmV2ZW50IGluaXRpYWxpemluZyBhbiBleHRlbnNpb24gbW9kdWxlIG1vcmUgdGhhbgotICAgb25jZSwgd2Uga2VlcCBhIHN0YXRpYyBkaWN0aW9uYXJ5ICdleHRlbnNpb25zJyBrZXllZCBieSBtb2R1bGUgbmFtZQotICAgKGZvciBidWlsdC1pbiBtb2R1bGVzKSBvciBieSBmaWxlbmFtZSAoZm9yIGR5bmFtaWNhbGx5IGxvYWRlZAotICAgbW9kdWxlcyksIGNvbnRhaW5pbmcgdGhlc2UgbW9kdWxlcy4gIEEgY29weSBvZiB0aGUgbW9kdWxlJ3MKLSAgIGRpY3Rpb25hcnkgaXMgc3RvcmVkIGJ5IGNhbGxpbmcgX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KCkKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gc3VjY2VlZHMuICBBCi0gICBjb3B5IGNhbiBiZSByZXRyaWV2ZWQgZnJvbSB0aGVyZSBieSBjYWxsaW5nCisgICBvbmNlLCB3ZSBrZWVwIGEgc3RhdGljIGRpY3Rpb25hcnkgJ2V4dGVuc2lvbnMnIGtleWVkIGJ5IHRoZSB0dXBsZQorICAgKG1vZHVsZSBuYW1lLCBtb2R1bGUgbmFtZSkgIChmb3IgYnVpbHQtaW4gbW9kdWxlcykgb3IgYnkKKyAgIChmaWxlbmFtZSwgbW9kdWxlIG5hbWUpIChmb3IgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMpLCBjb250YWluaW5nIHRoZXNlCisgICBtb2R1bGVzLiAgQSBjb3B5IG9mIHRoZSBtb2R1bGUncyBkaWN0aW9uYXJ5IGlzIHN0b3JlZCBieSBjYWxsaW5nCisgICBfUHlJbXBvcnRfRml4dXBFeHRlbnNpb25PYmplY3QoKSBpbW1lZGlhdGVseSBhZnRlciB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uCisgICBmdW5jdGlvbiBzdWNjZWVkcy4gIEEgY29weSBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlcmUgYnkgY2FsbGluZwogICAgX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QoKS4KIAogICAgTW9kdWxlcyB3aGljaCBkbyBzdXBwb3J0IG11bHRpcGxlIGluaXRpYWxpemF0aW9uIHNldCB0aGVpciBtX3NpemUKQEAgLTQ3Miw4ICs1ODksOSBAQAogX1B5SW1wb3J0X0ZpeHVwRXh0ZW5zaW9uT2JqZWN0KFB5T2JqZWN0ICptb2QsIFB5T2JqZWN0ICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbW9kdWxlcywgKmRpY3Q7CisgICAgUHlPYmplY3QgKm1vZHVsZXMsICpkaWN0LCAqa2V5OwogICAgIHN0cnVjdCBQeU1vZHVsZURlZiAqZGVmOworICAgIGludCByZXM7CiAgICAgaWYgKGV4dGVuc2lvbnMgPT0gTlVMTCkgewogICAgICAgICBleHRlbnNpb25zID0gUHlEaWN0X05ldygpOwogICAgICAgICBpZiAoZXh0ZW5zaW9ucyA9PSBOVUxMKQpAQCAtNTA5LDEyICs2MjcsMTggQEAKICAgICAgICAgaWYgKGRlZi0+bV9iYXNlLm1fY29weSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBQeURpY3RfU2V0SXRlbShleHRlbnNpb25zLCBmaWxlbmFtZSwgKFB5T2JqZWN0KilkZWYpOworICAgIGtleSA9IFB5VHVwbGVfUGFjaygyLCBmaWxlbmFtZSwgbmFtZSk7CisgICAgaWYgKGtleSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7CisgICAgcmVzID0gUHlEaWN0X1NldEl0ZW0oZXh0ZW5zaW9ucywga2V5LCAoUHlPYmplY3QgKilkZWYpOworICAgIFB5X0RFQ1JFRihrZXkpOworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gLTE7CiAgICAgcmV0dXJuIDA7CiB9CiAKIGludAotX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbihQeU9iamVjdCAqbW9kLCBjaGFyICpuYW1lKQorX1B5SW1wb3J0X0ZpeHVwQnVpbHRpbihQeU9iamVjdCAqbW9kLCBjb25zdCBjaGFyICpuYW1lKQogewogICAgIGludCByZXM7CiAgICAgUHlPYmplY3QgKm5hbWVvYmo7CkBAIC01MjksMTEgKzY1MywxNSBAQAogUHlPYmplY3QgKgogX1B5SW1wb3J0X0ZpbmRFeHRlbnNpb25PYmplY3QoUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpmaWxlbmFtZSkKIHsKLSAgICBQeU9iamVjdCAqbW9kLCAqbWRpY3Q7CisgICAgUHlPYmplY3QgKm1vZCwgKm1kaWN0LCAqa2V5OwogICAgIFB5TW9kdWxlRGVmKiBkZWY7CiAgICAgaWYgKGV4dGVuc2lvbnMgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgZGVmID0gKFB5TW9kdWxlRGVmKilQeURpY3RfR2V0SXRlbShleHRlbnNpb25zLCBmaWxlbmFtZSk7CisgICAga2V5ID0gUHlUdXBsZV9QYWNrKDIsIGZpbGVuYW1lLCBuYW1lKTsKKyAgICBpZiAoa2V5ID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGRlZiA9IChQeU1vZHVsZURlZiAqKVB5RGljdF9HZXRJdGVtKGV4dGVuc2lvbnMsIGtleSk7CisgICAgUHlfREVDUkVGKGtleSk7CiAgICAgaWYgKGRlZiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBpZiAoZGVmLT5tX3NpemUgPT0gLTEpIHsKQEAgLTY0OSwyMiArNzc3LDIzIEBACiAgKiBpbnRlcmZhY2UuICBUaGUgb3RoZXIgdHdvIGV4aXN0IHByaW1hcmlseSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAqLwogUHlPYmplY3QgKgotUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGUoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvKQogewogICAgIHJldHVybiBQeUltcG9ydF9FeGVjQ29kZU1vZHVsZVdpdGhQYXRobmFtZXMoCiAgICAgICAgIG5hbWUsIGNvLCAoY2hhciAqKU5VTEwsIChjaGFyICopTlVMTCk7CiB9CiAKIFB5T2JqZWN0ICoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjaGFyICpwYXRobmFtZSkKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlRXgoY29uc3QgY2hhciAqbmFtZSwgUHlPYmplY3QgKmNvLCBjb25zdCBjaGFyICpwYXRobmFtZSkKIHsKICAgICByZXR1cm4gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVXaXRoUGF0aG5hbWVzKAogICAgICAgICBuYW1lLCBjbywgcGF0aG5hbWUsIChjaGFyICopTlVMTCk7CiB9CiAKIFB5T2JqZWN0ICoKLVB5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcyhjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sIGNoYXIgKnBhdGhuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwYXRobmFtZSkKK1B5SW1wb3J0X0V4ZWNDb2RlTW9kdWxlV2l0aFBhdGhuYW1lcyhjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqY28sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGF0aG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY3BhdGhuYW1lKQogewogICAgIFB5T2JqZWN0ICptID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZW9iaiwgKnBhdGhvYmogPSBOVUxMLCAqY3BhdGhvYmogPSBOVUxMOwpAQCAtNjk1LDcgKzgyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBpbnRlcnByZXRlciEiKTsKICAgICAgICAgfQogCi0gICAgICAgIHBhdGhvYmogPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgcGF0aG9iaiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWRPYmpBcmdzKGludGVycC0+aW1wb3J0bGliLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2dldF9zb3VyY2VmaWxlLCBjcGF0aG9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICBpZiAocGF0aG9iaiA9PSBOVUxMKQpAQCAtNzEyLDEyICs4NDEsMTAgQEAKICAgICByZXR1cm4gbTsKIH0KIAotUHlPYmplY3QqCi1QeUltcG9ydF9FeGVjQ29kZU1vZHVsZU9iamVjdChQeU9iamVjdCAqbmFtZSwgUHlPYmplY3QgKmNvLCBQeU9iamVjdCAqcGF0aG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqY3BhdGhuYW1lKQorc3RhdGljIFB5T2JqZWN0ICoKK21vZHVsZV9kaWN0X2Zvcl9leGVjKFB5T2JqZWN0ICpuYW1lKQogewotICAgIFB5T2JqZWN0ICptb2R1bGVzID0gUHlJbXBvcnRfR2V0TW9kdWxlRGljdCgpOwotICAgIFB5T2JqZWN0ICptLCAqZCwgKnY7CisgICAgUHlPYmplY3QgKm0sICpkID0gTlVMTDsKIAogICAgIG0gPSBQeUltcG9ydF9BZGRNb2R1bGVPYmplY3QobmFtZSk7CiAgICAgaWYgKG0gPT0gTlVMTCkKQEAgLTcyNywzMSArODU0LDI2IEBACiAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7CiAgICAgaWYgKFB5RGljdF9HZXRJdGVtU3RyaW5nKGQsICJfX2J1aWx0aW5zX18iKSA9PSBOVUxMKSB7CiAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19idWlsdGluc19fIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKQotICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RXZhbF9HZXRCdWlsdGlucygpKSAhPSAwKSB7CisgICAgICAgICAgICByZW1vdmVfbW9kdWxlKG5hbWUpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHBhdGhuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgdiA9IHBhdGhuYW1lOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgdiA9ICgoUHlDb2RlT2JqZWN0ICopY28pLT5jb19maWxlbmFtZTsKLSAgICB9Ci0gICAgUHlfSU5DUkVGKHYpOwotICAgIGlmIChQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19maWxlX18iLCB2KSAhPSAwKQotICAgICAgICBQeUVycl9DbGVhcigpOyAvKiBOb3QgaW1wb3J0YW50IGVub3VnaCB0byByZXBvcnQgKi8KLSAgICBQeV9ERUNSRUYodik7CiAKLSAgICAvKiBSZW1lbWJlciB0aGUgcHljIHBhdGggbmFtZSBhcyB0aGUgX19jYWNoZWRfXyBhdHRyaWJ1dGUuICovCi0gICAgaWYgKGNwYXRobmFtZSAhPSBOVUxMKQotICAgICAgICB2ID0gY3BhdGhuYW1lOwotICAgIGVsc2UKLSAgICAgICAgdiA9IFB5X05vbmU7Ci0gICAgaWYgKFB5RGljdF9TZXRJdGVtU3RyaW5nKGQsICJfX2NhY2hlZF9fIiwgdikgIT0gMCkKLSAgICAgICAgUHlFcnJfQ2xlYXIoKTsgLyogTm90IGltcG9ydGFudCBlbm91Z2ggdG8gcmVwb3J0ICovCisgICAgcmV0dXJuIGQ7ICAvKiBSZXR1cm4gYSBib3Jyb3dlZCByZWZlcmVuY2UuICovCit9CiAKLSAgICB2ID0gUHlFdmFsX0V2YWxDb2RlKGNvLCBkLCBkKTsKLSAgICBpZiAodiA9PSBOVUxMKQotICAgICAgICBnb3RvIGVycm9yOworc3RhdGljIFB5T2JqZWN0ICoKK2V4ZWNfY29kZV9pbl9tb2R1bGUoUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICptb2R1bGVfZGljdCwgUHlPYmplY3QgKmNvZGVfb2JqZWN0KQoreworICAgIFB5T2JqZWN0ICptb2R1bGVzID0gUHlJbXBvcnRfR2V0TW9kdWxlRGljdCgpOworICAgIFB5T2JqZWN0ICp2LCAqbTsKKworICAgIHYgPSBQeUV2YWxfRXZhbENvZGUoY29kZV9vYmplY3QsIG1vZHVsZV9kaWN0LCBtb2R1bGVfZGljdCk7CisgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICByZW1vdmVfbW9kdWxlKG5hbWUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgUHlfREVDUkVGKHYpOwogCiAgICAgaWYgKChtID0gUHlEaWN0X0dldEl0ZW0obW9kdWxlcywgbmFtZSkpID09IE5VTEwpIHsKQEAgLTc2NCwxMCArODg2LDMyIEBACiAgICAgUHlfSU5DUkVGKG0pOwogCiAgICAgcmV0dXJuIG07Cit9CiAKLSAgZXJyb3I6Ci0gICAgcmVtb3ZlX21vZHVsZShuYW1lKTsKLSAgICByZXR1cm4gTlVMTDsKK1B5T2JqZWN0KgorUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QoUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpjbywgUHlPYmplY3QgKnBhdGhuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlPYmplY3QgKmNwYXRobmFtZSkKK3sKKyAgICBQeU9iamVjdCAqZCwgKnJlczsKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKKyAgICBfUHlfSURFTlRJRklFUihfZml4X3VwX21vZHVsZSk7CisKKyAgICBkID0gbW9kdWxlX2RpY3RfZm9yX2V4ZWMobmFtZSk7CisgICAgaWYgKGQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAocGF0aG5hbWUgPT0gTlVMTCkgeworICAgICAgICBwYXRobmFtZSA9ICgoUHlDb2RlT2JqZWN0ICopY28pLT5jb19maWxlbmFtZTsKKyAgICB9CisgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2ZpeF91cF9tb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCwgbmFtZSwgcGF0aG5hbWUsIGNwYXRobmFtZSwgTlVMTCk7CisgICAgaWYgKHJlcyAhPSBOVUxMKSB7CisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworICAgICAgICByZXMgPSBleGVjX2NvZGVfaW5fbW9kdWxlKG5hbWUsIGQsIGNvKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKIH0KIAogCkBAIC04MDksMzUgKzk1Myw2NiBAQAogICAgIFB5X0RFQ1JFRihvbGRuYW1lKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5fZml4X2NvX2ZpbGVuYW1lCisKKyAgICBjb2RlOiBvYmplY3QodHlwZT0iUHlDb2RlT2JqZWN0ICoiLCBzdWJjbGFzc19vZj0iJlB5Q29kZV9UeXBlIikKKyAgICAgICAgQ29kZSBvYmplY3QgdG8gY2hhbmdlLgorCisgICAgcGF0aDogdW5pY29kZQorICAgICAgICBGaWxlIHBhdGggdG8gdXNlLgorICAgIC8KKworQ2hhbmdlcyBjb2RlLmNvX2ZpbGVuYW1lIHRvIHNwZWNpZnkgdGhlIHBhc3NlZC1pbiBmaWxlIHBhdGguCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX19maXhfY29fZmlsZW5hbWVfX2RvY19fLAorIl9maXhfY29fZmlsZW5hbWUoJG1vZHVsZSwgY29kZSwgcGF0aCwgLylcbiIKKyItLVxuIgorIlxuIgorIkNoYW5nZXMgY29kZS5jb19maWxlbmFtZSB0byBzcGVjaWZ5IHRoZSBwYXNzZWQtaW4gZmlsZSBwYXRoLlxuIgorIlxuIgorIiAgY29kZVxuIgorIiAgICBDb2RlIG9iamVjdCB0byBjaGFuZ2UuXG4iCisiICBwYXRoXG4iCisiICAgIEZpbGUgcGF0aCB0byB1c2UuIik7CisKKyNkZWZpbmUgX0lNUF9fRklYX0NPX0ZJTEVOQU1FX01FVEhPRERFRiAgICBcCisgICAgeyJfZml4X2NvX2ZpbGVuYW1lIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfX2ZpeF9jb19maWxlbmFtZSwgTUVUSF9WQVJBUkdTLCBfaW1wX19maXhfY29fZmlsZW5hbWVfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9maXhfY29fZmlsZW5hbWUoUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2ltcF9fZml4X2NvX2ZpbGVuYW1lX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlDb2RlT2JqZWN0ICpjb2RlLCBQeU9iamVjdCAqcGF0aCk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX19maXhfY29fZmlsZW5hbWUoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7Ci0gICAgUHlPYmplY3QgKmNvOwotICAgIFB5T2JqZWN0ICpmaWxlX3BhdGg7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CisgICAgUHlDb2RlT2JqZWN0ICpjb2RlOworICAgIFB5T2JqZWN0ICpwYXRoOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJPTzpfZml4X2NvX2ZpbGVuYW1lIiwgJmNvLCAmZmlsZV9wYXRoKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJPIVU6X2ZpeF9jb19maWxlbmFtZSIsCisgICAgICAgICZQeUNvZGVfVHlwZSwgJmNvZGUsICZwYXRoKSkKKyAgICAgICAgZ290byBleGl0OworICAgIHJldHVybl92YWx1ZSA9IF9pbXBfX2ZpeF9jb19maWxlbmFtZV9pbXBsKG1vZHVsZSwgY29kZSwgcGF0aCk7CiAKLSAgICBpZiAoIVB5Q29kZV9DaGVjayhjbykpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICJmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29kZSBvYmplY3QiKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQogCi0gICAgaWYgKCFQeVVuaWNvZGVfQ2hlY2soZmlsZV9wYXRoKSkgewotICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVHlwZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgInNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX19maXhfY29fZmlsZW5hbWVfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeUNvZGVPYmplY3QgKmNvZGUsIFB5T2JqZWN0ICpwYXRoKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTZiNGIxZWRlYjBkNTVjNWQgaW5wdXQ9ODk1YmE1MGU3OGI4MmYwNV0qLwogCi0gICAgdXBkYXRlX2NvbXBpbGVkX21vZHVsZSgoUHlDb2RlT2JqZWN0KiljbywgZmlsZV9wYXRoKTsKK3sKKyAgICB1cGRhdGVfY29tcGlsZWRfbW9kdWxlKGNvZGUsIHBhdGgpOwogCiAgICAgUHlfUkVUVVJOX05PTkU7CiB9CiAKIAogLyogRm9yd2FyZCAqLwotc3RhdGljIHN0cnVjdCBfZnJvemVuICogZmluZF9mcm96ZW4oUHlPYmplY3QgKik7CitzdGF0aWMgY29uc3Qgc3RydWN0IF9mcm96ZW4gKiBmaW5kX2Zyb3plbihQeU9iamVjdCAqKTsKIAogCiAvKiBIZWxwZXIgdG8gdGVzdCBmb3IgYnVpbHQtaW4gbW9kdWxlICovCkBAIC05MTksMTEgKzEwOTQsMTEgQEAKIFB5SW1wb3J0X0dldEltcG9ydGVyKFB5T2JqZWN0ICpwYXRoKSB7CiAgICAgUHlPYmplY3QgKmltcG9ydGVyPU5VTEwsICpwYXRoX2ltcG9ydGVyX2NhY2hlPU5VTEwsICpwYXRoX2hvb2tzPU5VTEw7CiAKLSAgICBpZiAoKHBhdGhfaW1wb3J0ZXJfY2FjaGUgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaW1wb3J0ZXJfY2FjaGUiKSkpIHsKLSAgICAgICAgaWYgKChwYXRoX2hvb2tzID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoX2hvb2tzIikpKSB7Ci0gICAgICAgICAgICBpbXBvcnRlciA9IGdldF9wYXRoX2ltcG9ydGVyKHBhdGhfaW1wb3J0ZXJfY2FjaGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhfaG9va3MsIHBhdGgpOwotICAgICAgICB9CisgICAgcGF0aF9pbXBvcnRlcl9jYWNoZSA9IFB5U3lzX0dldE9iamVjdCgicGF0aF9pbXBvcnRlcl9jYWNoZSIpOworICAgIHBhdGhfaG9va3MgPSBQeVN5c19HZXRPYmplY3QoInBhdGhfaG9va3MiKTsKKyAgICBpZiAocGF0aF9pbXBvcnRlcl9jYWNoZSAhPSBOVUxMICYmIHBhdGhfaG9va3MgIT0gTlVMTCkgeworICAgICAgICBpbXBvcnRlciA9IGdldF9wYXRoX2ltcG9ydGVyKHBhdGhfaW1wb3J0ZXJfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aF9ob29rcywgcGF0aCk7CiAgICAgfQogICAgIFB5X1hJTkNSRUYoaW1wb3J0ZXIpOyAvKiBnZXRfcGF0aF9pbXBvcnRlciByZXR1cm5zIGEgYm9ycm93ZWQgcmVmZXJlbmNlICovCiAgICAgcmV0dXJuIGltcG9ydGVyOwpAQCAtOTQwLDggKzExMTUsMTIgQEAKIGluaXRfYnVpbHRpbihQeU9iamVjdCAqbmFtZSkKIHsKICAgICBzdHJ1Y3QgX2luaXR0YWIgKnA7CisgICAgUHlPYmplY3QgKm1vZDsKIAotICAgIGlmIChfUHlJbXBvcnRfRmluZEV4dGVuc2lvbk9iamVjdChuYW1lLCBuYW1lKSAhPSBOVUxMKQorICAgIG1vZCA9IF9QeUltcG9ydF9GaW5kRXh0ZW5zaW9uT2JqZWN0KG5hbWUsIG5hbWUpOworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1vZCAhPSBOVUxMKQogICAgICAgICByZXR1cm4gMTsKIAogICAgIGZvciAocCA9IFB5SW1wb3J0X0luaXR0YWI7IHAtPm5hbWUgIT0gTlVMTDsgcCsrKSB7CkBAIC05NzQsMTAgKzExNTMsMTAgQEAKIAogLyogRnJvemVuIG1vZHVsZXMgKi8KIAotc3RhdGljIHN0cnVjdCBfZnJvemVuICoKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqCiBmaW5kX2Zyb3plbihQeU9iamVjdCAqbmFtZSkKIHsKLSAgICBzdHJ1Y3QgX2Zyb3plbiAqcDsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcDsKIAogICAgIGlmIChuYW1lID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtOTk0LDcgKzExNzMsNyBAQAogc3RhdGljIFB5T2JqZWN0ICoKIGdldF9mcm96ZW5fb2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwID0gZmluZF9mcm96ZW4obmFtZSk7CisgICAgY29uc3Qgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKICAgICBpbnQgc2l6ZTsKIAogICAgIGlmIChwID09IE5VTEwpIHsKQEAgLTEwMTIsMTMgKzExOTEsMTMgQEAKICAgICBzaXplID0gcC0+c2l6ZTsKICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgIHNpemUgPSAtc2l6ZTsKLSAgICByZXR1cm4gUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKChjaGFyICopcC0+Y29kZSwgc2l6ZSk7CisgICAgcmV0dXJuIFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY29uc3QgY2hhciAqKXAtPmNvZGUsIHNpemUpOwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgogaXNfZnJvemVuX3BhY2thZ2UoUHlPYmplY3QgKm5hbWUpCiB7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnAgPSBmaW5kX2Zyb3plbihuYW1lKTsKKyAgICBjb25zdCBzdHJ1Y3QgX2Zyb3plbiAqcCA9IGZpbmRfZnJvemVuKG5hbWUpOwogICAgIGludCBzaXplOwogCiAgICAgaWYgKHAgPT0gTlVMTCkgewpAQCAtMTA0NSw4ICsxMjI0LDggQEAKIGludAogUHlJbXBvcnRfSW1wb3J0RnJvemVuTW9kdWxlT2JqZWN0KFB5T2JqZWN0ICpuYW1lKQogewotICAgIHN0cnVjdCBfZnJvemVuICpwOwotICAgIFB5T2JqZWN0ICpjbywgKm0sICpwYXRoOworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOworICAgIFB5T2JqZWN0ICpjbywgKm0sICpkOwogICAgIGludCBpc3BhY2thZ2U7CiAgICAgaW50IHNpemU7CiAKQEAgLTEwNjQsNyArMTI0Myw3IEBACiAgICAgaXNwYWNrYWdlID0gKHNpemUgPCAwKTsKICAgICBpZiAoaXNwYWNrYWdlKQogICAgICAgICBzaXplID0gLXNpemU7Ci0gICAgY28gPSBQeU1hcnNoYWxfUmVhZE9iamVjdEZyb21TdHJpbmcoKGNoYXIgKilwLT5jb2RlLCBzaXplKTsKKyAgICBjbyA9IFB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZygoY29uc3QgY2hhciAqKXAtPmNvZGUsIHNpemUpOwogICAgIGlmIChjbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CiAgICAgaWYgKCFQeUNvZGVfQ2hlY2soY28pKSB7CkBAIC0xMDc0LDI5ICsxMjUzLDI3IEBACiAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICB9CiAgICAgaWYgKGlzcGFja2FnZSkgewotICAgICAgICAvKiBTZXQgX19wYXRoX18gdG8gdGhlIHBhY2thZ2UgbmFtZSAqLwotICAgICAgICBQeU9iamVjdCAqZCwgKmw7CisgICAgICAgIC8qIFNldCBfX3BhdGhfXyB0byB0aGUgZW1wdHkgbGlzdCAqLworICAgICAgICBQeU9iamVjdCAqbDsKICAgICAgICAgaW50IGVycjsKICAgICAgICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZU9iamVjdChuYW1lKTsKICAgICAgICAgaWYgKG0gPT0gTlVMTCkKICAgICAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICAgICAgZCA9IFB5TW9kdWxlX0dldERpY3QobSk7Ci0gICAgICAgIGwgPSBQeUxpc3RfTmV3KDEpOworICAgICAgICBsID0gUHlMaXN0X05ldygwKTsKICAgICAgICAgaWYgKGwgPT0gTlVMTCkgewogICAgICAgICAgICAgZ290byBlcnJfcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIFB5X0lOQ1JFRihuYW1lKTsKLSAgICAgICAgUHlMaXN0X1NFVF9JVEVNKGwsIDAsIG5hbWUpOwogICAgICAgICBlcnIgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhkLCAiX19wYXRoX18iLCBsKTsKICAgICAgICAgUHlfREVDUkVGKGwpOwogICAgICAgICBpZiAoZXJyICE9IDApCiAgICAgICAgICAgICBnb3RvIGVycl9yZXR1cm47CiAgICAgfQotICAgIHBhdGggPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiPGZyb3plbj4iKTsKLSAgICBpZiAocGF0aCA9PSBOVUxMKQorICAgIGQgPSBtb2R1bGVfZGljdF9mb3JfZXhlYyhuYW1lKTsKKyAgICBpZiAoZCA9PSBOVUxMKSB7CiAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKLSAgICBtID0gUHlJbXBvcnRfRXhlY0NvZGVNb2R1bGVPYmplY3QobmFtZSwgY28sIHBhdGgsIE5VTEwpOwotICAgIFB5X0RFQ1JFRihwYXRoKTsKKyAgICB9CisgICAgbSA9IGV4ZWNfY29kZV9pbl9tb2R1bGUobmFtZSwgZCwgY28pOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIGdvdG8gZXJyX3JldHVybjsKICAgICBQeV9ERUNSRUYoY28pOwpAQCAtMTEwOCw3ICsxMjg1LDcgQEAKIH0KIAogaW50Ci1QeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGUoY2hhciAqbmFtZSkKK1B5SW1wb3J0X0ltcG9ydEZyb3plbk1vZHVsZShjb25zdCBjaGFyICpuYW1lKQogewogICAgIFB5T2JqZWN0ICpuYW1lb2JqOwogICAgIGludCByZXQ7CkBAIC0xMjIyLDcgKzEzOTksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxldmVsKQogewogICAgIF9QeV9JREVOVElGSUVSKF9faW1wb3J0X18pOwotICAgIF9QeV9JREVOVElGSUVSKF9faW5pdGlhbGl6aW5nX18pOworICAgIF9QeV9JREVOVElGSUVSKF9fc3BlY19fKTsKKyAgICBfUHlfSURFTlRJRklFUihfaW5pdGlhbGl6aW5nKTsKICAgICBfUHlfSURFTlRJRklFUihfX3BhY2thZ2VfXyk7CiAgICAgX1B5X0lERU5USUZJRVIoX19wYXRoX18pOwogICAgIF9QeV9JREVOVElGSUVSKF9fbmFtZV9fKTsKQEAgLTEyMzgsNiArMTQxNiw3IEBACiAgICAgUHlPYmplY3QgKmdsb2JhbHMgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpmcm9tbGlzdCA9IE5VTEw7CiAgICAgUHlJbnRlcnByZXRlclN0YXRlICppbnRlcnAgPSBQeVRocmVhZFN0YXRlX0dFVCgpLT5pbnRlcnA7CisgICAgaW50IGhhc19mcm9tOwogCiAgICAgLyogTWFrZSBzdXJlIHRvIHVzZSBkZWZhdWx0IHZhbHVlcyBzbyBhcyB0byBub3QgaGF2ZQogICAgICAgIFB5T2JqZWN0X0NhbGxNZXRob2RPYmpBcmdzKCkgdHJ1bmNhdGUgdGhlIHBhcmFtZXRlciBsaXN0IGJlY2F1c2Ugb2YgYQpAQCAtMTM1OCw3ICsxNTM3LDExIEBACiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIGJhc2UgPSBQeVVuaWNvZGVfU3Vic3RyaW5nKHBhY2thZ2UsIDAsIGxhc3RfZG90KTsKKyAgICAgICAgaWYgKGJhc2UgPT0gTlVMTCkKKyAgICAgICAgICAgIGdvdG8gZXJyb3I7CisKICAgICAgICAgaWYgKFB5VW5pY29kZV9HRVRfTEVOR1RIKG5hbWUpID4gMCkgewogICAgICAgICAgICAgUHlPYmplY3QgKmJvcnJvd2VkX2RvdCwgKnNlcSA9IE5VTEw7CiAKQEAgLTE0MTIsMTYgKzE1OTUsMjEgQEAKICAgICAgICAgZ290byBlcnJvcl93aXRoX3VubG9jazsKICAgICB9CiAgICAgZWxzZSBpZiAobW9kICE9IE5VTEwpIHsKLSAgICAgICAgUHlPYmplY3QgKnZhbHVlOworICAgICAgICBQeU9iamVjdCAqdmFsdWUgPSBOVUxMOworICAgICAgICBQeU9iamVjdCAqc3BlYzsKICAgICAgICAgaW50IGluaXRpYWxpemluZyA9IDA7CiAKICAgICAgICAgUHlfSU5DUkVGKG1vZCk7CiAgICAgICAgIC8qIE9wdGltaXphdGlvbjogb25seSBjYWxsIF9ib290c3RyYXAuX2xvY2tfdW5sb2NrX21vZHVsZSgpIGlmCi0gICAgICAgICAgIF9faW5pdGlhbGl6aW5nX18gaXMgdHJ1ZS4KLSAgICAgICAgICAgTk9URTogYmVjYXVzZSBvZiB0aGlzLCBfX2luaXRpYWxpemluZ19fIG11c3QgYmUgc2V0ICpiZWZvcmUqCisgICAgICAgICAgIF9fc3BlY19fLl9pbml0aWFsaXppbmcgaXMgdHJ1ZS4KKyAgICAgICAgICAgTk9URTogYmVjYXVzZSBvZiB0aGlzLCBpbml0aWFsaXppbmcgbXVzdCBiZSBzZXQgKmJlZm9yZSoKICAgICAgICAgICAgc3R1ZmZpbmcgdGhlIG5ldyBtb2R1bGUgaW4gc3lzLm1vZHVsZXMuCiAgICAgICAgICAqLwotICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9HZXRBdHRySWQobW9kLCAmUHlJZF9fX2luaXRpYWxpemluZ19fKTsKKyAgICAgICAgc3BlYyA9IF9QeU9iamVjdF9HZXRBdHRySWQobW9kLCAmUHlJZF9fX3NwZWNfXyk7CisgICAgICAgIGlmIChzcGVjICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gX1B5T2JqZWN0X0dldEF0dHJJZChzcGVjLCAmUHlJZF9faW5pdGlhbGl6aW5nKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihzcGVjKTsKKyAgICAgICAgfQogICAgICAgICBpZiAodmFsdWUgPT0gTlVMTCkKICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTQzMiw3ICsxNjIwLDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoaW5pdGlhbGl6aW5nID4gMCkgewogICAgICAgICAgICAgLyogX2Jvb3RzdHJhcC5fbG9ja191bmxvY2tfbW9kdWxlKCkgcmVsZWFzZXMgdGhlIGltcG9ydCBsb2NrICovCi0gICAgICAgICAgICB2YWx1ZSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICAgICAgdmFsdWUgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2xvY2tfdW5sb2NrX21vZHVsZSwgYWJzX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09IE5VTEwpCkBAIC0xNDUwLDcgKzE2MzgsNyBAQAogICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLyogX2Jvb3RzdHJhcC5fZmluZF9hbmRfbG9hZCgpIHJlbGVhc2VzIHRoZSBpbXBvcnQgbG9jayAqLwotICAgICAgICBtb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZE9iaklkQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKKyAgICAgICAgbW9kID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZE9iakFyZ3MoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQeUlkX19maW5kX2FuZF9sb2FkLCBhYnNfbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRpbnNfaW1wb3J0LCBOVUxMKTsKICAgICAgICAgaWYgKG1vZCA9PSBOVUxMKSB7CkBAIC0xNDU5LDcgKzE2NDcsMTAgQEAKICAgICB9CiAgICAgLyogRnJvbSBub3cgb24gd2UgZG9uJ3QgaG9sZCB0aGUgaW1wb3J0IGxvY2sgYW55bW9yZS4gKi8KIAotICAgIGlmIChQeU9iamVjdF9Ob3QoZnJvbWxpc3QpKSB7CisgICAgaGFzX2Zyb20gPSBQeU9iamVjdF9Jc1RydWUoZnJvbWxpc3QpOworICAgIGlmIChoYXNfZnJvbSA8IDApCisgICAgICAgIGdvdG8gZXJyb3I7CisgICAgaWYgKCFoYXNfZnJvbSkgewogICAgICAgICBpZiAobGV2ZWwgPT0gMCB8fCBQeVVuaWNvZGVfR0VUX0xFTkdUSChuYW1lKSA+IDApIHsKICAgICAgICAgICAgIFB5T2JqZWN0ICpmcm9udCA9IE5VTEw7CiAgICAgICAgICAgICBQeU9iamVjdCAqcGFydGl0aW9uID0gTlVMTDsKQEAgLTE1MTksNyArMTcxMCw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgIGZpbmFsX21vZCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kT2JqSWRBcmdzKGludGVycC0+aW1wb3J0bGliLAorICAgICAgICBmaW5hbF9tb2QgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkT2JqQXJncyhpbnRlcnAtPmltcG9ydGxpYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlB5SWRfX2hhbmRsZV9mcm9tbGlzdCwgbW9kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tbGlzdCwgYnVpbHRpbnNfaW1wb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKQEAgLTE2NzEsOCArMTg2MiwzMyBAQAogICAgIHJldHVybiByOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmV4dGVuc2lvbl9zdWZmaXhlcworCitSZXR1cm5zIHRoZSBsaXN0IG9mIGZpbGUgc3VmZml4ZXMgdXNlZCB0byBpZGVudGlmeSBleHRlbnNpb24gbW9kdWxlcy4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzX19kb2NfXywKKyJleHRlbnNpb25fc3VmZml4ZXMoJG1vZHVsZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgdGhlIGxpc3Qgb2YgZmlsZSBzdWZmaXhlcyB1c2VkIHRvIGlkZW50aWZ5IGV4dGVuc2lvbiBtb2R1bGVzLiIpOworCisjZGVmaW5lIF9JTVBfRVhURU5TSU9OX1NVRkZJWEVTX01FVEhPRERFRiAgICBcCisgICAgeyJleHRlbnNpb25fc3VmZml4ZXMiLCAoUHlDRnVuY3Rpb24pX2ltcF9leHRlbnNpb25fc3VmZml4ZXMsIE1FVEhfTk9BUkdTLCBfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2V4dGVuc2lvbl9zdWZmaXhlcyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKm5vYXJncykKK19pbXBfZXh0ZW5zaW9uX3N1ZmZpeGVzX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2V4dGVuc2lvbl9zdWZmaXhlcyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqUHlfVU5VU0VEKGlnbm9yZWQpKQoreworICAgIHJldHVybiBfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19pbXBsKG1vZHVsZSk7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2V4dGVuc2lvbl9zdWZmaXhlc19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9YmIzMGEyNDM4MTY3Nzk4YyBpbnB1dD1lY2RlZWVjZmNiNmY4MzllXSovCiB7CiAgICAgUHlPYmplY3QgKmxpc3Q7CiAgICAgY29uc3QgY2hhciAqc3VmZml4OwpAQCAtMTcwMCwxNCArMTkxNiw1MCBAQAogICAgIHJldHVybiBsaXN0OwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmluaXRfYnVpbHRpbgorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworSW5pdGlhbGl6ZXMgYSBidWlsdC1pbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2luaXRfYnVpbHRpbl9fZG9jX18sCisiaW5pdF9idWlsdGluKCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJJbml0aWFsaXplcyBhIGJ1aWx0LWluIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0lOSVRfQlVJTFRJTl9NRVRIT0RERUYgICAgXAorICAgIHsiaW5pdF9idWlsdGluIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaW5pdF9idWlsdGluLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaW5pdF9idWlsdGluX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfaW5pdF9idWlsdGluKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pbXBfaW5pdF9idWlsdGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pbml0X2J1aWx0aW4oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCiB7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5hbWU7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIlU6aW5pdF9idWlsdGluIiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pbml0X2J1aWx0aW5faW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2luaXRfYnVpbHRpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWEwMjQ0OTQ4YTQzZjhlMjYgaW5wdXQ9ZjkzNGQyMjMxZWM1MmEyZV0qLworewogICAgIGludCByZXQ7CiAgICAgUHlPYmplY3QgKm07Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmluaXRfYnVpbHRpbiIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXQgPSBpbml0X2J1aWx0aW4obmFtZSk7CiAgICAgaWYgKHJldCA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTcyMCwxNCArMTk3Miw1MCBAQAogICAgIHJldHVybiBtOwogfQogCisvKltjbGluaWMgaW5wdXRdCitfaW1wLmluaXRfZnJvemVuCisKKyAgICBuYW1lOiB1bmljb2RlCisgICAgLworCitJbml0aWFsaXplcyBhIGZyb3plbiBtb2R1bGUuCitbY2xpbmljIHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovCisKK1B5RG9jX1NUUlZBUihfaW1wX2luaXRfZnJvemVuX19kb2NfXywKKyJpbml0X2Zyb3plbigkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiSW5pdGlhbGl6ZXMgYSBmcm96ZW4gbW9kdWxlLiIpOworCisjZGVmaW5lIF9JTVBfSU5JVF9GUk9aRU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImluaXRfZnJvemVuIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfaW5pdF9mcm96ZW4sIE1FVEhfVkFSQVJHUywgX2ltcF9pbml0X2Zyb3plbl9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2luaXRfZnJvemVuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pbXBfaW5pdF9mcm96ZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2luaXRfZnJvemVuKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmluaXRfZnJvemVuIiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pbml0X2Zyb3plbl9pbXBsKG1vZHVsZSwgbmFtZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaW5pdF9mcm96ZW5faW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1lNGJjMmJmZjI5NmY4ZjIyIGlucHV0PTEzMDE5YWRmYzA0ZjNmYjNdKi8KK3sKICAgICBpbnQgcmV0OwogICAgIFB5T2JqZWN0ICptOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppbml0X2Zyb3plbiIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisKICAgICByZXQgPSBQeUltcG9ydF9JbXBvcnRGcm96ZW5Nb2R1bGVPYmplY3QobmFtZSk7CiAgICAgaWYgKHJldCA8IDApCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTc0MCw2MSArMjAyOCwyMzkgQEAKICAgICByZXR1cm4gbTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5nZXRfZnJvemVuX29iamVjdAorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworQ3JlYXRlIGEgY29kZSBvYmplY3QgZm9yIGEgZnJvemVuIG1vZHVsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfZ2V0X2Zyb3plbl9vYmplY3RfX2RvY19fLAorImdldF9mcm96ZW5fb2JqZWN0KCRtb2R1bGUsIG5hbWUsIC8pXG4iCisiLS1cbiIKKyJcbiIKKyJDcmVhdGUgYSBjb2RlIG9iamVjdCBmb3IgYSBmcm96ZW4gbW9kdWxlLiIpOworCisjZGVmaW5lIF9JTVBfR0VUX0ZST1pFTl9PQkpFQ1RfTUVUSE9EREVGICAgIFwKKyAgICB7ImdldF9mcm96ZW5fb2JqZWN0IiwgKFB5Q0Z1bmN0aW9uKV9pbXBfZ2V0X2Zyb3plbl9vYmplY3QsIE1FVEhfVkFSQVJHUywgX2ltcF9nZXRfZnJvemVuX29iamVjdF9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2dldF9mcm96ZW5fb2JqZWN0KFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pbXBfZ2V0X2Zyb3plbl9vYmplY3RfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2dldF9mcm96ZW5fb2JqZWN0KFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lOwogCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmdldF9mcm96ZW5fb2JqZWN0IiwgJm5hbWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIlU6Z2V0X2Zyb3plbl9vYmplY3QiLAorICAgICAgICAmbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW1wX2dldF9mcm96ZW5fb2JqZWN0X2ltcGwobW9kdWxlLCBuYW1lKTsKKworZXhpdDoKKyAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9nZXRfZnJvemVuX29iamVjdF9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTQwODllYzcwMmE5ZDcwYzUgaW5wdXQ9ZWQ2ODliYzA1MzU4ZmRiZF0qLworewogICAgIHJldHVybiBnZXRfZnJvemVuX29iamVjdChuYW1lKTsKIH0KIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5pc19mcm96ZW5fcGFja2FnZQorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBpcyBvZiBhIGZyb3plbiBwYWNrYWdlLgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworCitQeURvY19TVFJWQVIoX2ltcF9pc19mcm96ZW5fcGFja2FnZV9fZG9jX18sCisiaXNfZnJvemVuX3BhY2thZ2UoJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgaXMgb2YgYSBmcm96ZW4gcGFja2FnZS4iKTsKKworI2RlZmluZSBfSU1QX0lTX0ZST1pFTl9QQUNLQUdFX01FVEhPRERFRiAgICBcCisgICAgeyJpc19mcm96ZW5fcGFja2FnZSIsIChQeUNGdW5jdGlvbilfaW1wX2lzX2Zyb3plbl9wYWNrYWdlLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaXNfZnJvemVuX3BhY2thZ2VfX2RvY19ffSwKKwogc3RhdGljIFB5T2JqZWN0ICoKLWltcF9pc19mcm96ZW5fcGFja2FnZShQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCitfaW1wX2lzX2Zyb3plbl9wYWNrYWdlX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pc19mcm96ZW5fcGFja2FnZShQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKICAgICBQeU9iamVjdCAqbmFtZTsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppc19mcm96ZW5fcGFja2FnZSIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmlzX2Zyb3plbl9wYWNrYWdlIiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pc19mcm96ZW5fcGFja2FnZV9pbXBsKG1vZHVsZSwgbmFtZSk7CisKK2V4aXQ6CisgICAgcmV0dXJuIHJldHVybl92YWx1ZTsKK30KKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfZnJvemVuX3BhY2thZ2VfaW1wbChQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqbmFtZSkKKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD04NmFhYjE0ZGNkNGI5NTliIGlucHV0PTgxYjZjZGVjZDA4MGZiYjhdKi8KK3sKICAgICByZXR1cm4gaXNfZnJvemVuX3BhY2thZ2UobmFtZSk7CiB9CiAKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuaXNfYnVpbHRpbgorCisgICAgbmFtZTogdW5pY29kZQorICAgIC8KKworUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBjb3JyZXNwb25kcyB0byBhIGJ1aWx0LWluIG1vZHVsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfaXNfYnVpbHRpbl9fZG9jX18sCisiaXNfYnVpbHRpbigkbW9kdWxlLCBuYW1lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiUmV0dXJucyBUcnVlIGlmIHRoZSBtb2R1bGUgbmFtZSBjb3JyZXNwb25kcyB0byBhIGJ1aWx0LWluIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0lTX0JVSUxUSU5fTUVUSE9EREVGICAgIFwKKyAgICB7ImlzX2J1aWx0aW4iLCAoUHlDRnVuY3Rpb24pX2ltcF9pc19idWlsdGluLCBNRVRIX1ZBUkFSR1MsIF9pbXBfaXNfYnVpbHRpbl9fZG9jX199LAorCiBzdGF0aWMgUHlPYmplY3QgKgotaW1wX2lzX2J1aWx0aW4oUHlPYmplY3QgKnNlbGYsIFB5T2JqZWN0ICphcmdzKQorX2ltcF9pc19idWlsdGluX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pc19idWlsdGluKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICphcmdzKQogeworICAgIFB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOwogICAgIFB5T2JqZWN0ICpuYW1lOwotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVTppc19idWlsdGluIiwgJm5hbWUpKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICByZXR1cm4gUHlMb25nX0Zyb21Mb25nKGlzX2J1aWx0aW4obmFtZSkpOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsCisgICAgICAgICJVOmlzX2J1aWx0aW4iLAorICAgICAgICAmbmFtZSkpCisgICAgICAgIGdvdG8gZXhpdDsKKyAgICByZXR1cm5fdmFsdWUgPSBfaW1wX2lzX2J1aWx0aW5faW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7CiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfaXNfZnJvemVuKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pbXBfaXNfYnVpbHRpbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PWQ1ODQ3ZjhjYWM1MDk0NmUgaW5wdXQ9ODZiZWZkYWMwMjFkZDFjN10qLwogeworICAgIHJldHVybiBQeUxvbmdfRnJvbUxvbmcoaXNfYnVpbHRpbihuYW1lKSk7Cit9CisKKy8qW2NsaW5pYyBpbnB1dF0KK19pbXAuaXNfZnJvemVuCisKKyAgICBuYW1lOiB1bmljb2RlCisgICAgLworCitSZXR1cm5zIFRydWUgaWYgdGhlIG1vZHVsZSBuYW1lIGNvcnJlc3BvbmRzIHRvIGEgZnJvemVuIG1vZHVsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfaXNfZnJvemVuX19kb2NfXywKKyJpc19mcm96ZW4oJG1vZHVsZSwgbmFtZSwgLylcbiIKKyItLVxuIgorIlxuIgorIlJldHVybnMgVHJ1ZSBpZiB0aGUgbW9kdWxlIG5hbWUgY29ycmVzcG9uZHMgdG8gYSBmcm96ZW4gbW9kdWxlLiIpOworCisjZGVmaW5lIF9JTVBfSVNfRlJPWkVOX01FVEhPRERFRiAgICBcCisgICAgeyJpc19mcm96ZW4iLCAoUHlDRnVuY3Rpb24pX2ltcF9pc19mcm96ZW4sIE1FVEhfVkFSQVJHUywgX2ltcF9pc19mcm96ZW5fX2RvY19ffSwKKworc3RhdGljIFB5T2JqZWN0ICoKK19pbXBfaXNfZnJvemVuX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUpOworCitzdGF0aWMgUHlPYmplY3QgKgorX2ltcF9pc19mcm96ZW4oUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKmFyZ3MpCit7CisgICAgUHlPYmplY3QgKnJldHVybl92YWx1ZSA9IE5VTEw7CiAgICAgUHlPYmplY3QgKm5hbWU7Ci0gICAgc3RydWN0IF9mcm96ZW4gKnA7Ci0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJVOmlzX2Zyb3plbiIsICZuYW1lKSkKLSAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIlU6aXNfZnJvemVuIiwKKyAgICAgICAgJm5hbWUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9pc19mcm96ZW5faW1wbChtb2R1bGUsIG5hbWUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2lzX2Zyb3plbl9pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lKQorLypbY2xpbmljIGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTY2OTFhZjg4NGJhNDk4N2QgaW5wdXQ9NzMwMWRiY2ExODk3ZDY2Yl0qLworeworICAgIGNvbnN0IHN0cnVjdCBfZnJvemVuICpwOworCiAgICAgcCA9IGZpbmRfZnJvemVuKG5hbWUpOwogICAgIHJldHVybiBQeUJvb2xfRnJvbUxvbmcoKGxvbmcpIChwID09IE5VTEwgPyAwIDogcC0+c2l6ZSkpOwogfQogCiAjaWZkZWYgSEFWRV9EWU5BTUlDX0xPQURJTkcKIAorLypbY2xpbmljIGlucHV0XQorX2ltcC5sb2FkX2R5bmFtaWMKKworICAgIG5hbWU6IHVuaWNvZGUKKyAgICBwYXRoOiBmc191bmljb2RlCisgICAgZmlsZTogb2JqZWN0ID0gTlVMTAorICAgIC8KKworTG9hZHMgYW4gZXh0ZW5zaW9uIG1vZHVsZS4KK1tjbGluaWMgc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8KKworUHlEb2NfU1RSVkFSKF9pbXBfbG9hZF9keW5hbWljX19kb2NfXywKKyJsb2FkX2R5bmFtaWMoJG1vZHVsZSwgbmFtZSwgcGF0aCwgZmlsZT1Ob25lLCAvKVxuIgorIi0tXG4iCisiXG4iCisiTG9hZHMgYW4gZXh0ZW5zaW9uIG1vZHVsZS4iKTsKKworI2RlZmluZSBfSU1QX0xPQURfRFlOQU1JQ19NRVRIT0RERUYgICAgXAorICAgIHsibG9hZF9keW5hbWljIiwgKFB5Q0Z1bmN0aW9uKV9pbXBfbG9hZF9keW5hbWljLCBNRVRIX1ZBUkFSR1MsIF9pbXBfbG9hZF9keW5hbWljX19kb2NfX30sCisKIHN0YXRpYyBQeU9iamVjdCAqCi1pbXBfbG9hZF9keW5hbWljKFB5T2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK19pbXBfbG9hZF9keW5hbWljX2ltcGwoUHlNb2R1bGVEZWYgKm1vZHVsZSwgUHlPYmplY3QgKm5hbWUsIFB5T2JqZWN0ICpwYXRoLCBQeU9iamVjdCAqZmlsZSk7CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2xvYWRfZHluYW1pYyhQeU1vZHVsZURlZiAqbW9kdWxlLCBQeU9iamVjdCAqYXJncykKIHsKLSAgICBQeU9iamVjdCAqbmFtZSwgKnBhdGhuYW1lLCAqZm9iID0gTlVMTCwgKm1vZDsKKyAgICBQeU9iamVjdCAqcmV0dXJuX3ZhbHVlID0gTlVMTDsKKyAgICBQeU9iamVjdCAqbmFtZTsKKyAgICBQeU9iamVjdCAqcGF0aDsKKyAgICBQeU9iamVjdCAqZmlsZSA9IE5VTEw7CisKKyAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywKKyAgICAgICAgIlVPJnxPOmxvYWRfZHluYW1pYyIsCisgICAgICAgICZuYW1lLCBQeVVuaWNvZGVfRlNEZWNvZGVyLCAmcGF0aCwgJmZpbGUpKQorICAgICAgICBnb3RvIGV4aXQ7CisgICAgcmV0dXJuX3ZhbHVlID0gX2ltcF9sb2FkX2R5bmFtaWNfaW1wbChtb2R1bGUsIG5hbWUsIHBhdGgsIGZpbGUpOworCitleGl0OgorICAgIHJldHVybiByZXR1cm5fdmFsdWU7Cit9CisKK3N0YXRpYyBQeU9iamVjdCAqCitfaW1wX2xvYWRfZHluYW1pY19pbXBsKFB5TW9kdWxlRGVmICptb2R1bGUsIFB5T2JqZWN0ICpuYW1lLCBQeU9iamVjdCAqcGF0aCwgUHlPYmplY3QgKmZpbGUpCisvKltjbGluaWMgZW5kIGdlbmVyYXRlZCBjb2RlOiBvdXRwdXQ9ODFkMTFhMWZiZDFlYTBhOCBpbnB1dD1hZjY0ZjA2ZTRiYWQzNTI2XSovCit7CisgICAgUHlPYmplY3QgKm1vZDsKICAgICBGSUxFICpmcDsKIAotICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAiVU8mfE86bG9hZF9keW5hbWljIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWUsIFB5VW5pY29kZV9GU0RlY29kZXIsICZwYXRobmFtZSwgJmZvYikpCi0gICAgICAgIHJldHVybiBOVUxMOwotICAgIGlmIChmb2IgIT0gTlVMTCkgewotICAgICAgICBmcCA9IF9QeV9mb3BlbihwYXRobmFtZSwgInIiKTsKKyAgICBpZiAoZmlsZSAhPSBOVUxMKSB7CisgICAgICAgIGZwID0gX1B5X2ZvcGVuX29iaihwYXRoLCAiciIpOwogICAgICAgICBpZiAoZnAgPT0gTlVMTCkgewotICAgICAgICAgICAgUHlfREVDUkVGKHBhdGhuYW1lKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRihwYXRoKTsKICAgICAgICAgICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfSU9FcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE4MDIsOCArMjI2OCw4IEBACiAgICAgfQogICAgIGVsc2UKICAgICAgICAgZnAgPSBOVUxMOwotICAgIG1vZCA9IF9QeUltcG9ydF9Mb2FkRHluYW1pY01vZHVsZShuYW1lLCBwYXRobmFtZSwgZnApOwotICAgIFB5X0RFQ1JFRihwYXRobmFtZSk7CisgICAgbW9kID0gX1B5SW1wb3J0X0xvYWREeW5hbWljTW9kdWxlKG5hbWUsIHBhdGgsIGZwKTsKKyAgICBQeV9ERUNSRUYocGF0aCk7CiAgICAgaWYgKGZwKQogICAgICAgICBmY2xvc2UoZnApOwogICAgIHJldHVybiBtb2Q7CkBAIC0xODExLDUwICsyMjc3LDMzIEBACiAKICNlbmRpZiAvKiBIQVZFX0RZTkFNSUNfTE9BRElORyAqLwogCisvKltjbGluaWMgaW5wdXRdCitkdW1wIGJ1ZmZlcgorW2NsaW5pYyBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLwogCi0vKiBEb2Mgc3RyaW5ncyAqLworI2lmbmRlZiBfSU1QX0xPQURfRFlOQU1JQ19NRVRIT0RERUYKKyAgICAjZGVmaW5lIF9JTVBfTE9BRF9EWU5BTUlDX01FVEhPRERFRgorI2VuZGlmIC8qICFkZWZpbmVkKF9JTVBfTE9BRF9EWU5BTUlDX01FVEhPRERFRikgKi8KKy8qW2NsaW5pYyBlbmQgZ2VuZXJhdGVkIGNvZGU6IG91dHB1dD1kMDdjMWQ0YTM0M2E5NTc5IGlucHV0PTUyNGNlMmUwMjFlNGViYTZdKi8KKwogCiBQeURvY19TVFJWQVIoZG9jX2ltcCwKICIoRXh0cmVtZWx5KSBsb3ctbGV2ZWwgaW1wb3J0IG1hY2hpbmVyeSBiaXRzIGFzIHVzZWQgYnkgaW1wb3J0bGliIGFuZCBpbXAuIik7CiAKLVB5RG9jX1NUUlZBUihkb2NfZXh0ZW5zaW9uX3N1ZmZpeGVzLAotImV4dGVuc2lvbl9zdWZmaXhlcygpIC0+IGxpc3Qgb2Ygc3RyaW5nc1xuXAotUmV0dXJucyB0aGUgbGlzdCBvZiBmaWxlIHN1ZmZpeGVzIHVzZWQgdG8gaWRlbnRpZnkgZXh0ZW5zaW9uIG1vZHVsZXMuIik7Ci0KLVB5RG9jX1NUUlZBUihkb2NfbG9ja19oZWxkLAotImxvY2tfaGVsZCgpIC0+IGJvb2xlYW5cblwKLVJldHVybiBUcnVlIGlmIHRoZSBpbXBvcnQgbG9jayBpcyBjdXJyZW50bHkgaGVsZCwgZWxzZSBGYWxzZS5cblwKLU9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHJldHVybiBGYWxzZS4iKTsKLQotUHlEb2NfU1RSVkFSKGRvY19hY3F1aXJlX2xvY2ssCi0iYWNxdWlyZV9sb2NrKCkgLT4gTm9uZVxuXAotQWNxdWlyZXMgdGhlIGludGVycHJldGVyJ3MgaW1wb3J0IGxvY2sgZm9yIHRoZSBjdXJyZW50IHRocmVhZC5cblwKLVRoaXMgbG9jayBzaG91bGQgYmUgdXNlZCBieSBpbXBvcnQgaG9va3MgdG8gZW5zdXJlIHRocmVhZC1zYWZldHlcblwKLXdoZW4gaW1wb3J0aW5nIG1vZHVsZXMuXG5cCi1PbiBwbGF0Zm9ybXMgd2l0aG91dCB0aHJlYWRzLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZy4iKTsKLQotUHlEb2NfU1RSVkFSKGRvY19yZWxlYXNlX2xvY2ssCi0icmVsZWFzZV9sb2NrKCkgLT4gTm9uZVxuXAotUmVsZWFzZSB0aGUgaW50ZXJwcmV0ZXIncyBpbXBvcnQgbG9jay5cblwKLU9uIHBsYXRmb3JtcyB3aXRob3V0IHRocmVhZHMsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiIpOwotCiBzdGF0aWMgUHlNZXRob2REZWYgaW1wX21ldGhvZHNbXSA9IHsKLSAgICB7ImV4dGVuc2lvbl9zdWZmaXhlcyIsIGltcF9leHRlbnNpb25fc3VmZml4ZXMsIE1FVEhfTk9BUkdTLAotICAgICAgICBkb2NfZXh0ZW5zaW9uX3N1ZmZpeGVzfSwKLSAgICB7ImxvY2tfaGVsZCIsICAgICAgICBpbXBfbG9ja19oZWxkLCAgICBNRVRIX05PQVJHUywgIGRvY19sb2NrX2hlbGR9LAotICAgIHsiYWNxdWlyZV9sb2NrIiwgaW1wX2FjcXVpcmVfbG9jaywgTUVUSF9OT0FSR1MsICBkb2NfYWNxdWlyZV9sb2NrfSwKLSAgICB7InJlbGVhc2VfbG9jayIsIGltcF9yZWxlYXNlX2xvY2ssIE1FVEhfTk9BUkdTLCAgZG9jX3JlbGVhc2VfbG9ja30sCi0gICAgeyJnZXRfZnJvemVuX29iamVjdCIsICAgICAgIGltcF9nZXRfZnJvemVuX29iamVjdCwgIE1FVEhfVkFSQVJHU30sCi0gICAgeyJpc19mcm96ZW5fcGFja2FnZSIsICAgaW1wX2lzX2Zyb3plbl9wYWNrYWdlLCAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImluaXRfYnVpbHRpbiIsICAgICAgICAgICAgaW1wX2luaXRfYnVpbHRpbiwgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImluaXRfZnJvemVuIiwgICAgICAgICAgICAgaW1wX2luaXRfZnJvemVuLCAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImlzX2J1aWx0aW4iLCAgICAgICAgICAgICAgaW1wX2lzX2J1aWx0aW4sICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSAgICB7ImlzX2Zyb3plbiIsICAgICAgICAgICAgICAgaW1wX2lzX2Zyb3plbiwgICAgICAgICAgTUVUSF9WQVJBUkdTfSwKLSNpZmRlZiBIQVZFX0RZTkFNSUNfTE9BRElORwotICAgIHsibG9hZF9keW5hbWljIiwgICAgICAgICAgICBpbXBfbG9hZF9keW5hbWljLCAgICAgICBNRVRIX1ZBUkFSR1N9LAotI2VuZGlmCi0gICAgeyJfZml4X2NvX2ZpbGVuYW1lIiwgICAgICAgIGltcF9maXhfY29fZmlsZW5hbWUsICAgIE1FVEhfVkFSQVJHU30sCi0gICAge05VTEwsICAgICAgICAgICAgICAgICAgICAgIE5VTEx9ICAgICAgICAgICAvKiBzZW50aW5lbCAqLworICAgIF9JTVBfRVhURU5TSU9OX1NVRkZJWEVTX01FVEhPRERFRgorICAgIF9JTVBfTE9DS19IRUxEX01FVEhPRERFRgorICAgIF9JTVBfQUNRVUlSRV9MT0NLX01FVEhPRERFRgorICAgIF9JTVBfUkVMRUFTRV9MT0NLX01FVEhPRERFRgorICAgIF9JTVBfR0VUX0ZST1pFTl9PQkpFQ1RfTUVUSE9EREVGCisgICAgX0lNUF9JU19GUk9aRU5fUEFDS0FHRV9NRVRIT0RERUYKKyAgICBfSU1QX0lOSVRfQlVJTFRJTl9NRVRIT0RERUYKKyAgICBfSU1QX0lOSVRfRlJPWkVOX01FVEhPRERFRgorICAgIF9JTVBfSVNfQlVJTFRJTl9NRVRIT0RERUYKKyAgICBfSU1QX0lTX0ZST1pFTl9NRVRIT0RERUYKKyAgICBfSU1QX0xPQURfRFlOQU1JQ19NRVRIT0RERUYKKyAgICBfSU1QX19GSVhfQ09fRklMRU5BTUVfTUVUSE9EREVGCisgICAge05VTEwsIE5VTEx9ICAvKiBzZW50aW5lbCAqLwogfTsKIAogCkBAIC0xOTQ0LDMgKzIzOTMsNCBAQAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvUHl0aG9uL2ltcG9ydGRsLmMgYi9QeXRob24vaW1wb3J0ZGwuYwppbmRleCAwZWE5NTRjLi5iNjBmMWM3IDEwMDY0NAotLS0gYS9QeXRob24vaW1wb3J0ZGwuYworKysgYi9QeXRob24vaW1wb3J0ZGwuYwpAQCAtNzcsNiArNzcsOCBAQAogICAgICAgICBQeU9iamVjdCAqbXNnID0gUHlVbmljb2RlX0Zyb21Gb3JtYXQoImR5bmFtaWMgbW9kdWxlIGRvZXMgbm90IGRlZmluZSAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5pdCBmdW5jdGlvbiAoUHlJbml0XyVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG9ydG5hbWUpOworICAgICAgICBpZiAobXNnID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAgICBQeUVycl9TZXRJbXBvcnRFcnJvcihtc2csIG5hbWUsIHBhdGgpOwogICAgICAgICBQeV9ERUNSRUYobXNnKTsKICAgICAgICAgZ290byBlcnJvcjsKZGlmZiAtLWdpdCBhL1B5dGhvbi9pbXBvcnRkbC5oIGIvUHl0aG9uL2ltcG9ydGRsLmgKaW5kZXggNmI5Y2Y3NS4uNmE1MWE5MSAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGRsLmgKKysrIGIvUHl0aG9uL2ltcG9ydGRsLmgKQEAgLTE4LDEzICsxOCw4IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogdHlwZWRlZiBGQVJQUk9DIGRsX2Z1bmNwdHI7CiAjZWxzZQotI2lmIGRlZmluZWQoUFlPU19PUzIpICYmICFkZWZpbmVkKFBZQ0NfR0NDKQotI2luY2x1ZGUgPG9zMmRlZi5oPgotdHlwZWRlZiBpbnQgKCogQVBJRU5UUlkgZGxfZnVuY3B0cikoKTsKLSNlbHNlCiB0eXBlZGVmIHZvaWQgKCpkbF9mdW5jcHRyKSh2b2lkKTsKICNlbmRpZgotI2VuZGlmCiAKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9QeXRob24vaW1wb3J0bGliLmggYi9QeXRob24vaW1wb3J0bGliLmgKaW5kZXggY2I2YWZjNS4uNzViZmNhNCAxMDA2NDQKLS0tIGEvUHl0aG9uL2ltcG9ydGxpYi5oCisrKyBiL1B5dGhvbi9pbXBvcnRsaWIuaApAQCAtMSwxMjAyICsxLDkxNSBAQAogLyogQXV0by1nZW5lcmF0ZWQgYnkgTW9kdWxlcy9fZnJlZXplX2ltcG9ydGxpYi5jICovCi11bnNpZ25lZCBjaGFyIF9QeV9NX19pbXBvcnRsaWJbXSA9IHsKLSAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw2LDAsMCwKLSAgICAwLDY0LDAsMCwwLDExNSwyMDYsMywwLDAsMTAwLDAsMCw5MCwwLDAsCi0gICAgMTAwLDEzMSwwLDkwLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCwKK2NvbnN0IHVuc2lnbmVkIGNoYXIgX1B5X01fX2ltcG9ydGxpYltdID0geworICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDcsMCwwLAorICAgIDAsNjQsMCwwLDAsMTE1LDIyOCw0LDAsMCwxMDAsMCwwLDkwLDAsMCwKKyAgICAxMDAsMTYzLDAsOTAsMSwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLAogICAgIDIsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCwzLDAsMTAwLDgsCiAgICAgMCwxMDAsOSwwLDEzMiwwLDAsOTAsNCwwLDEwMCwxMCwwLDEwMCwxMSwwLAogICAgIDEzMiwwLDAsOTAsNSwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsCiAgICAgNiwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxNiwKICAgICAwLDEwMCwxNywwLDEzMiwwLDAsOTAsOCwwLDEwMCwxOCwwLDEwMCwxOSwwLAotICAgIDEzMiwwLDAsOTAsOSwwLDEwMCwyMCwwLDEwMCwyMSwwLDEwMCwyMiwwLDEzMiwKLSAgICAxLDAsOTAsMTAsMCwxMDAsMjMsMCwxMDAsMjQsMCwxMzIsMCwwLDkwLDExLAotICAgIDAsMTAxLDEyLDAsMTAxLDExLDAsMTA2LDEzLDAsMTMxLDEsMCw5MCwxNCwwLAotICAgIDEwMCwyNSwwLDEwMCwyNiwwLDEzMiwwLDAsOTAsMTUsMCwxMDUsMCwwLDkwLAotICAgIDE2LDAsMTA1LDAsMCw5MCwxNywwLDcxLDEwMCwyNywwLDEwMCwyOCwwLDEzMiwKLSAgICAwLDAsMTAwLDI4LDAsMTAxLDE4LDAsMTMxLDMsMCw5MCwxOSwwLDcxLDEwMCwKLSAgICAyOSwwLDEwMCwzMCwwLDEzMiwwLDAsMTAwLDMwLDAsMTMxLDIsMCw5MCwyMCwKLSAgICAwLDcxLDEwMCwzMSwwLDEwMCwzMiwwLDEzMiwwLDAsMTAwLDMyLDAsMTMxLDIsCi0gICAgMCw5MCwyMSwwLDEwMCwzMywwLDEwMCwzNCwwLDEzMiwwLDAsOTAsMjIsMCwKLSAgICAxMDAsMzUsMCwxMDAsMzYsMCwxMzIsMCwwLDkwLDIzLDAsMTAwLDM3LDAsMTAwLAotICAgIDM4LDAsMTMyLDAsMCw5MCwyNCwwLDEwMCwzOSwwLDEwMSwyNSwwLDEwMCw0MCwKLSAgICAwLDEzMSwxLDAsMTAwLDQxLDAsNjIsNjYsMTAxLDI1LDAsMTAwLDQyLDAsMTMxLAotICAgIDEsMCwxMDAsNDMsMCw2Miw2Niw5MCwyNiwwLDEwMSwyNywwLDEwMCw0NCwwLAotICAgIDEwMCw0NSwwLDEzMiwwLDAsMTAxLDI4LDAsMTAwLDQ2LDAsMTAwLDQ3LDAsMTAwLAotICAgIDQ4LDAsMTMxLDMsMCw2OCwxMzEsMSwwLDEzMSwxLDAsOTAsMjksMCwxMDAsCi0gICAgNDksMCw5MCwzMCwwLDEwMCw1MCwwLDEwMywxLDAsOTAsMzEsMCwxMDAsNTEsCi0gICAgMCwxMDMsMSwwLDkwLDMyLDAsMTAwLDUyLDAsMTAzLDEsMCw5MCwzMywwLAotICAgIDEwMCwxMzAsMCwxMDAsNTMsMCwxMDAsNTQsMCwxMzIsMSwwLDkwLDM1LDAsMTAwLAotICAgIDU1LDAsMTAwLDU2LDAsMTMyLDAsMCw5MCwzNiwwLDEwMCw1NywwLDEwMCw1OCwKLSAgICAwLDEzMiwwLDAsOTAsMzcsMCwxMDAsNTksMCwxMDAsNjAsMCwxMDAsNjEsMCwKLSAgICAxMDAsNjIsMCwxMzIsMCwxLDkwLDM4LDAsMTAwLDYzLDAsMTAwLDY0LDAsMTMyLAotICAgIDAsMCw5MCwzOSwwLDEwMCw2NSwwLDEwMCw2NiwwLDEzMiwwLDAsOTAsNDAsCi0gICAgMCwxMDAsNjcsMCwxMDAsNjgsMCwxMzIsMCwwLDkwLDQxLDAsMTAwLDY5LDAsCi0gICAgMTAwLDcwLDAsMTMyLDAsMCw5MCw0MiwwLDEwMCw3MSwwLDEwMCw3MiwwLDEzMiwKLSAgICAwLDAsOTAsNDMsMCwxMDAsNzMsMCwxMDAsNzQsMCwxMzIsMCwwLDkwLDQ0LAotICAgIDAsMTAwLDc1LDAsMTAwLDc2LDAsMTMyLDAsMCw5MCw0NSwwLDcxLDEwMCw3NywKLSAgICAwLDEwMCw3OCwwLDEzMiwwLDAsMTAwLDc4LDAsMTMxLDIsMCw5MCw0NiwwLAotICAgIDcxLDEwMCw3OSwwLDEwMCw4MCwwLDEzMiwwLDAsMTAwLDgwLDAsMTMxLDIsMCwKLSAgICA5MCw0NywwLDcxLDEwMCw4MSwwLDEwMCw4MiwwLDEzMiwwLDAsMTAwLDgyLDAsCi0gICAgMTMxLDIsMCw5MCw0OCwwLDcxLDEwMCw4MywwLDEwMCw4NCwwLDEzMiwwLDAsCi0gICAgMTAwLDg0LDAsMTMxLDIsMCw5MCw0OSwwLDcxLDEwMCw4NSwwLDEwMCw4NiwwLAotICAgIDEzMiwwLDAsMTAwLDg2LDAsMTAxLDQ5LDAsMTMxLDMsMCw5MCw1MCwwLDcxLAotICAgIDEwMCw4NywwLDEwMCw4OCwwLDEzMiwwLDAsMTAwLDg4LDAsMTMxLDIsMCw5MCwKLSAgICA1MSwwLDcxLDEwMCw4OSwwLDEwMCw5MCwwLDEzMiwwLDAsMTAwLDkwLDAsMTAxLAotICAgIDUxLDAsMTAxLDUwLDAsMTMxLDQsMCw5MCw1MiwwLDcxLDEwMCw5MSwwLDEwMCwKLSAgICA5MiwwLDEzMiwwLDAsMTAwLDkyLDAsMTAxLDUxLDAsMTAxLDQ5LDAsMTMxLDQsCi0gICAgMCw5MCw1MywwLDEwMywwLDAsOTAsNTQsMCw3MSwxMDAsOTMsMCwxMDAsOTQsCi0gICAgMCwxMzIsMCwwLDEwMCw5NCwwLDEzMSwyLDAsOTAsNTUsMCw3MSwxMDAsOTUsCi0gICAgMCwxMDAsOTYsMCwxMzIsMCwwLDEwMCw5NiwwLDEzMSwyLDAsOTAsNTYsMCwKLSAgICA3MSwxMDAsOTcsMCwxMDAsOTgsMCwxMzIsMCwwLDEwMCw5OCwwLDEzMSwyLDAsCi0gICAgOTAsNTcsMCw3MSwxMDAsOTksMCwxMDAsMTAwLDAsMTMyLDAsMCwxMDAsMTAwLDAsCi0gICAgMTMxLDIsMCw5MCw1OCwwLDcxLDEwMCwxMDEsMCwxMDAsMTAyLDAsMTMyLDAsMCwKLSAgICAxMDAsMTAyLDAsMTMxLDIsMCw5MCw1OSwwLDcxLDEwMCwxMDMsMCwxMDAsMTA0LDAsCi0gICAgMTMyLDAsMCwxMDAsMTA0LDAsMTMxLDIsMCw5MCw2MCwwLDEwMCwxMDUsMCwxMDAsCi0gICAgMTA2LDAsMTMyLDAsMCw5MCw2MSwwLDEwMCwxMDcsMCwxMDAsMTA4LDAsMTMyLDAsCi0gICAgMCw5MCw2MiwwLDEwMCwxMDksMCwxMDAsMTEwLDAsMTMyLDAsMCw5MCw2MywwLAotICAgIDEwMCwxMTEsMCw5MCw2NCwwLDEwMCwxMTIsMCwxMDAsMTEzLDAsMTMyLDAsMCw5MCwKLSAgICA2NSwwLDEwMCwxMTQsMCwxMDAsMTE1LDAsMTMyLDAsMCw5MCw2NiwwLDEwMCwxMzAsCi0gICAgMCwxMDAsNDYsMCwxMDAsMTE2LDAsMTAwLDExNywwLDEzMiwyLDAsOTAsNjcsMCwKLSAgICAxMDAsMTE4LDAsMTAwLDExOSwwLDEzMiwwLDAsOTAsNjgsMCwxMDAsMTIwLDAsMTAwLAotICAgIDEyMSwwLDEzMiwwLDAsOTAsNjksMCwxMDAsMTIyLDAsMTAwLDEyMywwLDEzMiwwLAotICAgIDAsOTAsNzAsMCwxMDAsMTMwLDAsMTAwLDEzMCwwLDEwMiwwLDAsMTAwLDQ2LDAsCi0gICAgMTAwLDEyNCwwLDEwMCwxMjUsMCwxMzIsNCwwLDkwLDcxLDAsMTAwLDEyNiwwLDEwMCwKLSAgICAxMjcsMCwxMzIsMCwwLDkwLDcyLDAsMTAwLDEyOCwwLDEwMCwxMjksMCwxMzIsMCwKLSAgICAwLDkwLDczLDAsMTAwLDEzMCwwLDgzLDQwLDEzMiwwLDAsMCwxMTcsODMsMSwKLSAgICAwLDAsNjcsMTExLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsCi0gICAgMTAsMTAsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiw3OCw3OSw4NCwzMiwxMDksMTAxLDk3LDExMCwxMTYsMzIsMTE2LDExMSwzMiw5OCwxMDEsCi0gICAgMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMDgsMTIxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMDAsMzMsMzIsNzMsMTE2LDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsMzIsCi0gICAgMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTUsMTE3LDk5LDEwNCwxMCwxMTYsMTA0LAotICAgIDk3LDExNiwzMiwxMDUsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDExMiwxMDEsMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiw4MCwKLSAgICAxMjEsMTE2LDEwNCwxMTEsMTEwLDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwKLSAgICAxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw0NiwzMiw2NSwxMTUsMTAsMTE1LDExNyw5OSwxMDQsMzIsMTA1LAotICAgIDExNiwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwKLSAgICAxMTAsMTA2LDEwMSw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMTUsMTEyLDEwMSw5OSwKLSAgICAxMDUsMTAyLDEwNSw5OSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwKLSAgICAzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTExLAotICAgIDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDEwLDExOSwxMTEsMTE0LDEwNyw0NiwzMiw3OSwxMTAsCi0gICAgMTAxLDMyLDExNSwxMDQsMTExLDExNywxMDgsMTAwLDMyLDExNywxMTUsMTAxLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTcsCi0gICAgOTgsMTA4LDEwNSw5OSw0NSwxMDIsOTcsOTksMTA1LDExMCwxMDMsMzIsMTE4LDEwMSwxMTQsMTE1LAotICAgIDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDQ2LDEwLDEwLDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNyw2LDAsCi0gICAgMCwwLDk5LDEyMSwxMDMsMTE5LDEwNSwxMTAsMTE3LDYsMCwwLDAsMTAwLDk3LDExNCwKLSAgICAxMTksMTA1LDExMCw5OSwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwKLSAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSw0OSwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTA2LDIsMCwxMTYsMywwLDEzMSwxLDAsMTE0LDMzLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzMiwwLDAsMTI1LDAsMCwxMTAsMTIsMCwxMDAsMywKLSAgICAwLDEwMCwyLDAsMTMyLDAsMCwxMjUsMCwwLDEyNCwwLDAsODMsNDAsNCwKLSAgICAwLDAsMCw3OCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsCi0gICAgMCwyLDAsMCwwLDgzLDAsMCwwLDExNSwxMywwLDAsMCwxMDAsMSwKLSAgICAwLDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDgzLDQwLDIsMCwwLDAsCi0gICAgMTE3LDUzLDAsMCwwLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTAyLDEwNSwxMDgsCi0gICAgMTAxLDExMCw5NywxMDksMTAxLDExNSwzMiwxMDksMTE3LDExNSwxMTYsMzIsOTgsMTAxLDMyLDk5LAotICAgIDEwNCwxMDEsOTksMTA3LDEwMSwxMDAsMzIsOTksOTcsMTE1LDEwMSw0NSwxMDUsMTEwLDExNSwxMDEsCi0gICAgMTEwLDExNSwxMDUsMTE2LDEwNSwxMTgsMTAxLDEwOCwxMjEsNDYsMTE1LDEyLDAsMCwwLDgwLAotICAgIDg5LDg0LDcyLDc5LDc4LDY3LDY1LDgzLDY5LDc5LDc1LDQwLDIsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsOTUsMTExLDExNSwxMTcsNywwLDAsMCwxMDEsMTEwLDExOCwKLSAgICAxMDUsMTE0LDExMSwxMTAsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsCi0gICAgOTUsOTksOTcsMTE1LDEwMSwzNCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsCi0gICAgMTE3LDM3LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCwKLSAgICA5NSw5OSw5NywxMTUsMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwKLSAgICAxMTQsMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwwLDAsMCwwLDAsCi0gICAgMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDgzLDAsMCwwLDExNSwKLSAgICA0LDAsMCwwLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNTMsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsOTksMTA0LDEwMSw5OSwKLSAgICAxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwxMTAsMTE1LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0Niw3MCw0MCwxLDAsMCwwLDExNyw1LDAsCi0gICAgMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwKLSAgICAxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwxMDEsMzgsMCwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwyLDQwLDQsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsCi0gICAgMTE3LDgsMCwwLDAsMTEyLDEwOCw5NywxMTYsMTAyLDExMSwxMTQsMTA5LDExNywxMCwwLAotICAgIDAsMCwxMTUsMTE2LDk3LDExNCwxMTYsMTE1LDExOSwxMDUsMTE2LDEwNCwxMTcsMjcsMCwwLAotICAgIDAsOTUsNjcsNjUsODMsNjksOTUsNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsCi0gICAgODYsNjksOTUsODAsNzYsNjUsODQsNzAsNzksODIsNzcsODMsNDAsMSwwLDAsCi0gICAgMCwxMTcsMTEsMCwwLDAsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LDExNSwKLSAgICAxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwKLSAgICAwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LDk5LDk3LAotICAgIDExNSwxMDEsMzIsMCwwLDAsMTE1LDgsMCwwLDAsMCwxLDE4LDEsMTUsCi0gICAgNCwxMiwzLDExNywxNiwwLDAsMCw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsMTAxLAotICAgIDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMDgsMCwKLSAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDAsMCwxMDMsMCwKLSAgICAwLDEyNSwxLDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDEsMCwKLSAgICA2NCwxMzEsMSwwLDEsMTI0LDEsMCwxMDYsMSwwLDEyNCwwLDAsMTAwLDIsCi0gICAgMCw2MywxMDAsMSwwLDY0LDEzMSwxLDAsMSwxMjQsMSwwLDEwNiwxLDAsCi0gICAgMTI0LDAsMCwxMDAsMywwLDYzLDEwMCwxLDAsNjQsMTMxLDEsMCwxLDEyNCwKLSAgICAxLDAsMTA2LDEsMCwxMjQsMCwwLDEwMCw0LDAsNjMsMTAwLDEsMCw2NCwKLSAgICAxMzEsMSwwLDEsMTE2LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsNSwKLSAgICAwLDAsMCwxMTcsMTExLDAsMCwwLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LDMyLAotICAgIDk3LDMyLDUxLDUwLDQ1LDk4LDEwNSwxMTYsMzIsMTA1LDExMCwxMTYsMTAxLDEwMywxMDEsMTE0LAotICAgIDMyLDExNiwxMTEsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LAotICAgIDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4OCw4OCw4OCwzMiw4NCwxMDEsMTA5LDExMiwKLSAgICAxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTE3LDExMCwxMTYsMTA1LDEwOCwzMiwxMDksOTcsMTE0LDExNSwKLSAgICAxMDQsOTcsMTA4LDM5LDExNSwzMiwxMDgsMTExLDExMCwxMDMsMzIsMTAyLDExNywxMTAsOTksMTE2LAotICAgIDEwNSwxMTEsMTEwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMjAsMTEyLDExMSwxMTUsMTAxLDEwMCwKLSAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMDUsMjU1LDAsMCwwLDEwNSw4LDAsMCwKLSAgICAwLDEwNSwxNiwwLDAsMCwxMDUsMjQsMCwwLDAsNDAsMywwLDAsMCwKLSAgICAxMTcsMywwLDAsMCwxMDUsMTEwLDExNiwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLAotICAgIDEwMSwxMTAsMTAwLDExNyw5LDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk3LDExNCwxMTQsOTcsCi0gICAgMTIxLDQwLDIsMCwwLDAsMTE3LDEsMCwwLDAsMTIwLDExNyw5LDAsMCwKLSAgICAwLDEwNSwxMTAsMTE2LDk1LDk4LDEyMSwxMTYsMTAxLDExNSw0MCwwLDAsMCwwLDQwLAotICAgIDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsCi0gICAgMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw3LDAsMCwwLDk1LDExOSw5NSwxMDgsMTExLAotICAgIDExMCwxMDMsNDUsMCwwLDAsMTE1LDE0LDAsMCwwLDAsNiwxMiwxLDYsCi0gICAgMSwxNywxLDIxLDEsMjEsMSwyMSwxLDExNyw3LDAsMCwwLDk1LDExOSwKLSAgICA5NSwxMDgsMTExLDExMCwxMDMsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNjgsMCwwLDAsMTI0LAotICAgIDAsMCwxMDAsMSwwLDI1LDEyNSwxLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwKLSAgICAyLDAsMjUsMTAwLDMsMCw2Miw3OSwxMjUsMSwwLDEyNCwxLDAsMTI0LDAsCi0gICAgMCwxMDAsNCwwLDI1LDEwMCw1LDAsNjIsNzksMTI1LDEsMCwxMjQsMSwwLAotICAgIDEyNCwwLDAsMTAwLDYsMCwyNSwxMDAsNywwLDYyLDc5LDEyNSwxLDAsMTI0LAotICAgIDEsMCw4Myw0MCw4LDAsMCwwLDExNywxMTUsMCwwLDAsNjcsMTExLDExMCwKLSAgICAxMTgsMTAxLDExNCwxMTYsMzIsNTIsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsCi0gICAgMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLDExMCwxMDAsMTA1LDk3LDExMCwzMiwxMTYsMTExLAotICAgIDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNiwxMDEsMTAzLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsODgsODgsODgsMzIsODQsMTAxLDEwOSwxMTIsMTExLDExNCw5NywxMTQsMTIxLDMyLAotICAgIDExNywxMTAsMTE2LDEwNSwxMDgsMzIsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCwzOSwxMTUsMzIsCi0gICAgMTA4LDExMSwxMTAsMTAzLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDEwMSwxMjAsMTEyLDExMSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAxMDUsMCwwLDAsMCwxMDUsMSwwLDAsMCwxMDUsOCwwLDAsMCwxMDUsCi0gICAgMiwwLDAsMCwxMDUsMTYsMCwwLDAsMTA1LDMsMCwwLDAsMTA1LDI0LAotICAgIDAsMCwwLDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsOSwwLAotICAgIDAsMCwxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE3LDEsMCwwLDAsCi0gICAgMTIwLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDcsMCwKLSAgICAwLDAsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw2MSwwLDAsMCwxMTUsMTAsMCwKLSAgICAwLDAsMCw2LDEwLDEsMTgsMSwxOCwxLDE4LDEsMTE3LDcsMCwwLAotICAgIDAsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw5OSwwLDAsMCwwLDAsMCwwLAotICAgIDAsMywwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLDExNSwxMDMsMCwKLSAgICAwLDAsMTAzLDAsMCwxMjUsMSwwLDEyMCw3MSwwLDEyNCwwLDAsNjgsOTMsCi0gICAgNjMsMCwxMjUsMiwwLDEyNCwyLDAsMTE1LDMxLDAsMTEzLDEzLDAsMTEwLDAsCi0gICAgMCwxMjQsMSwwLDEwNiwwLDAsMTI0LDIsMCwxMzEsMSwwLDEsMTI0LDIsCi0gICAgMCwxMDAsNCwwLDI1LDExNiwxLDAsMTA3LDcsMCwxMTQsMTMsMCwxMjQsMSwKLSAgICAwLDEwNiwwLDAsMTE2LDIsMCwxMzEsMSwwLDEsMTEzLDEzLDAsMTEzLDEzLAotICAgIDAsODcsMTAwLDIsMCwxMDYsMywwLDEyNCwxLDAsMTAwLDMsMCwxMDAsNSwKLSAgICAwLDEzMywyLDAsMjUsMTMxLDEsMCw4Myw0MCw2LDAsMCwwLDExNywzMSwKLSAgICAwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwKLSAgICAxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA2LDExMSwxMDUsMTEwLDQwLAotICAgIDQxLDQ2LDEwNSwxLDAsMCwwLDExNywwLDAsMCwwLDc4LDEwNSwyNTUsMjU1LAotICAgIDI1NSwyNTUsMTA1LDI1NSwyNTUsMjU1LDI1NSw0MCw0LDAsMCwwLDExNyw2LDAsMCwKLSAgICAwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsMTE3LDE1LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDgsMCwwLDAsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDQsMCwwLDAsMTA2LDExMSwxMDUsCi0gICAgMTEwLDQwLDMsMCwwLDAsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LAotICAgIDExMiw5NywxMTQsMTE2LDExNSwxMTcsOSwwLDAsMCwxMTAsMTAxLDExOSw5NSwxMTIsOTcsCi0gICAgMTE0LDExNiwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNCwxMTYsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDc0LDAsMCwwLDExNSwxNiwwLDAsMCwKLSAgICAwLDIsNiwxLDEzLDEsNiwxLDYsMSwxMywxLDE2LDEsMjAsMSwKLSAgICAxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsMTEwLDk5LAotICAgIDEsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDg1LDAsMCwwLDEyMCw0OCwwLDExNiwwLDAsMTI0LAotICAgIDAsMCwxMzEsMSwwLDY4LDkzLDI4LDAsMTI1LDEsMCwxMjQsMSwwLDExNiwKLSAgICAxLDAsMTA3LDYsMCwxMTQsMTMsMCwxMjQsMSwwLDEyNSwyLDAsODAsMTEzLAotICAgIDEzLDAsMTEzLDEzLDAsODcsMTE2LDIsMCwxMjUsMiwwLDEyNCwwLDAsMTA2LAotICAgIDMsMCwxMjQsMiwwLDEzMSwxLDAsOTIsMywwLDEyNSwzLDAsMTI1LDQsCi0gICAgMCwxMjUsNSwwLDEyNCwzLDAsMTI0LDUsMCwxMDIsMiwwLDgzLDQwLDEsCi0gICAgMCwwLDAsMTE3LDMyLDAsMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsMzIsMTAyLDExMSwxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwKLSAgICAxMTUsMTEyLDEwOCwxMDUsMTE2LDQwLDQxLDQ2LDQwLDQsMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsMTE0LDEwMSwxMTgsMTAxLDExNCwxMTUsMTAxLDEwMCwxMTcsMTUsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwxMTcsMTAsMCwwLDAsCi0gICAgMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsNDAsNiwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMSwwLDAsMCwxMjAsMTE3LDMsCi0gICAgMCwwLDAsMTE1LDEwMSwxMTIsMTE3LDUsMCwwLDAsMTAyLDExNCwxMTEsMTEwLDExNiwKLSAgICAxMTcsMSwwLDAsMCw5NSwxMTcsNCwwLDAsMCwxMTYsOTcsMTA1LDEwOCw0MCwKLSAgICAwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsCi0gICAgOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDg2LDAsMCwwLDExNSwKLSAgICAxNCwwLDAsMCwwLDIsMTksMSwxMiwxLDYsMSw4LDIsNiwxLAotICAgIDI0LDEsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LAotICAgIDEwNSwxMTYsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMTEsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDYxLDAsMCwwLDEyMSwxOSwwLDExNiwKLSAgICAwLDAsMTA2LDEsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDIsMCw4NywxMTAsCi0gICAgMjIsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQzLDAsMSwxLDEsMTAwLAotICAgIDIsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTA2LDQsMCwxMDAsMSwKLSAgICAwLDY0LDEyNCwxLDAsMTA3LDIsMCw4Myw0MCwzLDAsMCwwLDExNyw0OSwKLSAgICAwLDAsMCw4NCwxMDEsMTE1LDExNiwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwxMTQsMzIsCi0gICAgMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTYsCi0gICAgMTIxLDExMiwxMDEsNDYsMTA1LDAsMjQwLDAsMCw3MCw0MCw1LDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsCi0gICAgMTE3LDcsMCwwLDAsNzksODMsNjksMTE0LDExNCwxMTEsMTE0LDExNyw1LDAsMCwKLSAgICAwLDcwLDk3LDEwOCwxMTUsMTAxLDExNyw3LDAsMCwwLDExNSwxMTYsOTUsMTA5LDExMSwKLSAgICAxMDAsMTAxLDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgMTE3LDQsMCwwLDAsMTA5LDExMSwxMDAsMTAxLDExNyw5LDAsMCwwLDExNSwxMTYsCi0gICAgOTcsMTE2LDk1LDEwNSwxMTAsMTAyLDExMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxOCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LAotICAgIDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsOTgsMCwwLDAsMTE1LDEwLAotICAgIDAsMCwwLDAsMiwzLDEsMTksMSwxMywxLDksMSwxMTcsMTgsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsCi0gICAgMTE2LDEyMSwxMTIsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKKyAgICAxMzIsMCwwLDkwLDksMCwxMDAsMjAsMCwxMDAsMjEsMCwxMzIsMCwwLDkwLAorICAgIDEwLDAsMTAwLDIyLDAsMTAwLDIzLDAsMTAwLDI0LDAsMTMyLDEsMCw5MCwxMSwKKyAgICAwLDEwMCwyNSwwLDEwMCwyNiwwLDEzMiwwLDAsOTAsMTIsMCwxMDAsMjcsMCwKKyAgICAxMDAsMjgsMCwxMzIsMCwwLDkwLDEzLDAsMTAxLDE0LDAsMTAxLDEyLDAsMTA2LAorICAgIDE1LDAsMTMxLDEsMCw5MCwxNiwwLDcxLDEwMCwyOSwwLDEwMCwzMCwwLDEzMiwKKyAgICAwLDAsMTAwLDMwLDAsMTMxLDIsMCw5MCwxNywwLDEwNSwwLDAsOTAsMTgsCisgICAgMCwxMDUsMCwwLDkwLDE5LDAsNzEsMTAwLDMxLDAsMTAwLDMyLDAsMTMyLDAsCisgICAgMCwxMDAsMzIsMCwxMDEsMjAsMCwxMzEsMywwLDkwLDIxLDAsNzEsMTAwLDMzLAorICAgIDAsMTAwLDM0LDAsMTMyLDAsMCwxMDAsMzQsMCwxMzEsMiwwLDkwLDIyLDAsCisgICAgNzEsMTAwLDM1LDAsMTAwLDM2LDAsMTMyLDAsMCwxMDAsMzYsMCwxMzEsMiwwLAorICAgIDkwLDIzLDAsNzEsMTAwLDM3LDAsMTAwLDM4LDAsMTMyLDAsMCwxMDAsMzgsMCwKKyAgICAxMzEsMiwwLDkwLDI0LDAsMTAwLDM5LDAsMTAwLDQwLDAsMTMyLDAsMCw5MCwKKyAgICAyNSwwLDEwMCw0MSwwLDEwMCw0MiwwLDEzMiwwLDAsOTAsMjYsMCwxMDAsNDMsCisgICAgMCwxMDAsNDQsMCwxMzIsMCwwLDkwLDI3LDAsMTAwLDQ1LDAsMTA2LDI4LDAsCisgICAgMTAwLDQ2LDAsMTAwLDQ3LDAsMTMxLDIsMCwxMDAsNDgsMCwyMyw5MCwyOSwwLAorICAgIDEwMSwzMCwwLDEwNiwzMSwwLDEwMSwyOSwwLDEwMCw0NywwLDEzMSwyLDAsOTAsCisgICAgMzIsMCwxMDAsNDksMCw5MCwzMywwLDEwMCw1MCwwLDEwMywxLDAsOTAsMzQsCisgICAgMCwxMDAsNTEsMCwxMDMsMSwwLDkwLDM1LDAsMTAwLDUyLDAsMTAzLDEsMCwKKyAgICA5MCwzNiwwLDEwMCw1MywwLDEwMCw1NCwwLDEwMCw1NSwwLDEzMiwxLDAsOTAsCisgICAgMzcsMCwxMDAsNTYsMCwxMDAsNTcsMCwxMzIsMCwwLDkwLDM4LDAsMTAwLDU4LAorICAgIDAsMTAwLDU5LDAsMTMyLDAsMCw5MCwzOSwwLDEwMCw2MCwwLDEwMCw2MSwwLAorICAgIDEzMiwwLDAsOTAsNDAsMCwxMDAsNjIsMCwxMDAsNjMsMCwxMDAsNjQsMCwxMDAsCisgICAgNjUsMCwxMzIsMCwxLDkwLDQxLDAsMTAwLDY2LDAsMTAwLDY3LDAsMTMyLDAsCisgICAgMCw5MCw0MiwwLDEwMCw2OCwwLDEwMCw2OSwwLDEzMiwwLDAsOTAsNDMsMCwKKyAgICAxMDAsNzAsMCwxMDAsNzEsMCwxMzIsMCwwLDkwLDQ0LDAsMTAwLDcyLDAsMTAwLAorICAgIDczLDAsMTMyLDAsMCw5MCw0NSwwLDEwMCw3NCwwLDEwMCw3NSwwLDEzMiwwLAorICAgIDAsOTAsNDYsMCwxMDAsNTMsMCwxMDAsNTMsMCwxMDAsNTMsMCwxMDAsNzYsMCwKKyAgICAxMDAsNzcsMCwxMzIsMywwLDkwLDQ3LDAsMTAwLDUzLDAsMTAwLDUzLDAsMTAwLAorICAgIDUzLDAsMTAwLDc4LDAsMTAwLDc5LDAsMTMyLDMsMCw5MCw0OCwwLDEwMCw4MCwKKyAgICAwLDEwMCw4MCwwLDEwMCw4MSwwLDEwMCw4MiwwLDEzMiwyLDAsOTAsNDksMCwKKyAgICAxMDAsODMsMCwxMDAsODQsMCwxMzIsMCwwLDkwLDUwLDAsMTAwLDg1LDAsMTAwLAorICAgIDg2LDAsMTMyLDAsMCw5MCw1MSwwLDcxLDEwMCw4NywwLDEwMCw4OCwwLDEzMiwKKyAgICAwLDAsMTAwLDg4LDAsMTMxLDIsMCw5MCw1MiwwLDcxLDEwMCw4OSwwLDEwMCwKKyAgICA5MCwwLDEzMiwwLDAsMTAwLDkwLDAsMTMxLDIsMCw5MCw1MywwLDEwMCw5MSwKKyAgICAwLDEwMCw1MywwLDEwMCw5MiwwLDEwMCw1MywwLDEwMCw5MywwLDEwMCw5NCwwLAorICAgIDEzMiwwLDIsOTAsNTQsMCwxMDEsNTUsMCwxMzEsMCwwLDkwLDU2LDAsMTAwLAorICAgIDUzLDAsMTAwLDk1LDAsMTAwLDUzLDAsMTAwLDk2LDAsMTAxLDU2LDAsMTAwLDk3LAorICAgIDAsMTAwLDk4LDAsMTMyLDEsMiw5MCw1NywwLDEwMCw1MywwLDEwMCw1MywwLAorICAgIDEwMCw5OSwwLDEwMCwxMDAsMCwxMzIsMiwwLDkwLDU4LDAsNzEsMTAwLDEwMSwwLAorICAgIDEwMCwxMDIsMCwxMzIsMCwwLDEwMCwxMDIsMCwxMzEsMiwwLDkwLDU5LDAsMTAwLAorICAgIDUzLDAsMTAwLDEwMywwLDEwMCwxMDQsMCwxMzIsMSwwLDkwLDYwLDAsNzEsMTAwLAorICAgIDEwNSwwLDEwMCwxMDYsMCwxMzIsMCwwLDEwMCwxMDYsMCwxMzEsMiwwLDkwLDYxLAorICAgIDAsNzEsMTAwLDEwNywwLDEwMCwxMDgsMCwxMzIsMCwwLDEwMCwxMDgsMCwxMzEsMiwKKyAgICAwLDkwLDYyLDAsNzEsMTAwLDEwOSwwLDEwMCwxMTAsMCwxMzIsMCwwLDEwMCwxMTAsCisgICAgMCwxMzEsMiwwLDkwLDYzLDAsNzEsMTAwLDExMSwwLDEwMCwxMTIsMCwxMzIsMCwKKyAgICAwLDEwMCwxMTIsMCwxMzEsMiwwLDkwLDY0LDAsNzEsMTAwLDExMywwLDEwMCwxMTQsCisgICAgMCwxMzIsMCwwLDEwMCwxMTQsMCwxMDEsNjQsMCwxMzEsMywwLDkwLDY1LDAsCisgICAgNzEsMTAwLDExNSwwLDEwMCwxMTYsMCwxMzIsMCwwLDEwMCwxMTYsMCwxMzEsMiwwLAorICAgIDkwLDY2LDAsNzEsMTAwLDExNywwLDEwMCwxMTgsMCwxMzIsMCwwLDEwMCwxMTgsMCwKKyAgICAxMDEsNjYsMCwxMDEsNjUsMCwxMzEsNCwwLDkwLDY3LDAsNzEsMTAwLDExOSwwLAorICAgIDEwMCwxMjAsMCwxMzIsMCwwLDEwMCwxMjAsMCwxMDEsNjYsMCwxMDEsNjQsMCwxMzEsCisgICAgNCwwLDkwLDY4LDAsMTAzLDAsMCw5MCw2OSwwLDcxLDEwMCwxMjEsMCwxMDAsCisgICAgMTIyLDAsMTMyLDAsMCwxMDAsMTIyLDAsMTMxLDIsMCw5MCw3MCwwLDcxLDEwMCwKKyAgICAxMjMsMCwxMDAsMTI0LDAsMTMyLDAsMCwxMDAsMTI0LDAsMTMxLDIsMCw5MCw3MSwKKyAgICAwLDcxLDEwMCwxMjUsMCwxMDAsMTI2LDAsMTMyLDAsMCwxMDAsMTI2LDAsMTMxLDIsCisgICAgMCw5MCw3MiwwLDcxLDEwMCwxMjcsMCwxMDAsMTI4LDAsMTMyLDAsMCwxMDAsMTI4LAorICAgIDAsMTMxLDIsMCw5MCw3MywwLDcxLDEwMCwxMjksMCwxMDAsMTMwLDAsMTMyLDAsCisgICAgMCwxMDAsMTMwLDAsMTMxLDIsMCw5MCw3NCwwLDcxLDEwMCwxMzEsMCwxMDAsMTMyLAorICAgIDAsMTMyLDAsMCwxMDAsMTMyLDAsMTMxLDIsMCw5MCw3NSwwLDEwMCwxMzMsMCwKKyAgICAxMDAsMTM0LDAsMTMyLDAsMCw5MCw3NiwwLDEwMCwxMzUsMCwxMDAsMTM2LDAsMTMyLAorICAgIDAsMCw5MCw3NywwLDEwMCw1MywwLDEwMCwxMzcsMCwxMDAsMTM4LDAsMTMyLDEsCisgICAgMCw5MCw3OCwwLDEwMCwxMzksMCwxMDAsMTQwLDAsMTMyLDAsMCw5MCw3OSwwLAorICAgIDEwMCwxNDEsMCw5MCw4MCwwLDEwMSw4MCwwLDEwMCwxNDIsMCwyMyw5MCw4MSwwLAorICAgIDEwMCwxNDMsMCwxMDAsMTQ0LDAsMTMyLDAsMCw5MCw4MiwwLDEwMCwxNDUsMCwxMDAsCisgICAgMTQ2LDAsMTMyLDAsMCw5MCw4MywwLDEwMCw1MywwLDEwMCw4MCwwLDEwMCwxNDcsCisgICAgMCwxMDAsMTQ4LDAsMTMyLDIsMCw5MCw4NCwwLDEwMCwxNDksMCwxMDAsMTUwLDAsCisgICAgMTMyLDAsMCw5MCw4NSwwLDEwMCwxNTEsMCwxMDAsMTUyLDAsMTMyLDAsMCw5MCwKKyAgICA4NiwwLDEwMCwxNTMsMCwxMDAsMTU0LDAsMTMyLDAsMCw5MCw4NywwLDEwMCw1MywKKyAgICAwLDEwMCw1MywwLDEwMiwwLDAsMTAwLDgwLDAsMTAwLDE1NSwwLDEwMCwxNTYsMCwKKyAgICAxMzIsNCwwLDkwLDg4LDAsMTAwLDE1NywwLDEwMCwxNTgsMCwxMzIsMCwwLDkwLAorICAgIDg5LDAsMTAwLDE1OSwwLDEwMCwxNjAsMCwxMzIsMCwwLDkwLDkwLDAsMTAwLDE2MSwKKyAgICAwLDEwMCwxNjIsMCwxMzIsMCwwLDkwLDkxLDAsMTAwLDUzLDAsODMsNDEsMTY0LAorICAgIDk3LDgzLDEsMCwwLDY3LDExMSwxMTQsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LAorICAgIDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDQ2LDEwLDEwLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDMyLDEwNSwxMTUsMzIsNzgsNzksODQsMzIsMTA5LDEwMSw5NywxMTAsMTE2LDMyLDExNiwxMTEsCisgICAgMzIsOTgsMTAxLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMTEsMTE0LDExNiwxMDEsMTAwLDMzLDMyLDczLDExNiwzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwKKyAgICAxMDEsMTEwLDMyLDEwMCwxMDEsMTE1LDEwNSwxMDMsMTEwLDEwMSwxMDAsMzIsMTE1LDExNyw5OSwxMDQsCisgICAgMTAsMTE2LDEwNCw5NywxMTYsMzIsMTA1LDExNiwzMiw5OSw5NywxMTAsMzIsOTgsMTAxLDMyLAorICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwxMTIsMTAxLDEwMCwzMiwxMDUsMTEwLDExNiwKKyAgICAxMTEsMzIsODAsMTIxLDExNiwxMDQsMTExLDExMCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwKKyAgICAxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsNDYsMzIsNjUsMTE1LDEwLDExNSwxMTcsOTksCisgICAgMTA0LDMyLDEwNSwxMTYsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDUsMTEwLDEwNiwxMDEsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE1LAorICAgIDExMiwxMDEsOTksMTA1LDEwMiwxMDUsOTksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLAorICAgIDk3LDExMCwxMDAsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSwzMiwxMDUsCisgICAgMTEwLDMyLDExMSwxMTQsMTAwLDEwMSwxMTQsMzIsMTE2LDExMSwxMCwxMTksMTExLDExNCwxMDcsNDYsCisgICAgMzIsNzksMTEwLDEwMSwzMiwxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTcsMTE1LDEwMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsMTE3LDk4LDEwOCwxMDUsOTksNDUsMTAyLDk3LDk5LDEwNSwxMTAsMTAzLDMyLDExOCwKKyAgICAxMDEsMTE0LDExNSwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwyMTgsMywxMTksMTA1LDExMCwyMTgsNiw5OSwKKyAgICAxMjEsMTAzLDExOSwxMDUsMTEwLDIxOCw2LDEwMCw5NywxMTQsMTE5LDEwNSwxMTAsOTksMCwwLAorICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsNDksMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsCisgICAgMTE2LDMsMCwxMzEsMSwwLDExNCwzMywwLDEwMCwxLDAsMTAwLDIsMCwxMzIsCisgICAgMCwwLDEyNSwwLDAsMTEwLDEyLDAsMTAwLDMsMCwxMDAsMiwwLDEzMiwwLAorICAgIDAsMTI1LDAsMCwxMjQsMCwwLDgzLDQxLDQsNzgsOTksMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw4MywwLDAsMCwKKyAgICAxMTUsMTMsMCwwLDAsMTAwLDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDYsCisgICAgMCw4Myw0MSwyLDEyMiw1Myw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLDEwMiwxMDUsCisgICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiwKKyAgICA5OSwxMDQsMTAxLDk5LDEwNywxMDEsMTAwLDMyLDk5LDk3LDExNSwxMDEsNDUsMTA1LDExMCwxMTUsCisgICAgMTAxLDExMCwxMTUsMTA1LDExNiwxMDUsMTE4LDEwMSwxMDgsMTIxLDQ2LDExNSwxMiwwLDAsMCwKKyAgICA4MCw4OSw4NCw3Miw3OSw3OCw2Nyw2NSw4Myw2OSw3OSw3NSw0MSwyLDIxOCwzLAorICAgIDk1LDExMSwxMTUsOTAsNywxMDEsMTEwLDExOCwxMDUsMTE0LDExMSwxMTAsMTY5LDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMjUwLDI5LDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCisgICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKKyAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDIxOCwxMSw5NSwxMTQsMTAxLDEwOCw5NywxMjAsOTUsCisgICAgOTksOTcsMTE1LDEwMSwzMCwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLAorICAgIDM3LDk1LDEwOSw5NywxMDcsMTAxLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsCisgICAgMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSwxMTQsMTAxLDEwOCw5NywKKyAgICAxMjAsOTUsOTksOTcsMTE1LDEwMSw5OSwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwxLDAsMCwwLDgzLDAsMCwwLDExNSw0LDAsMCwwLAorICAgIDEwMCwxLDAsODMsNDEsMiwxMjIsNTMsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE1LDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwKKyAgICAxMDEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTAxLDEwMCwzMiw5OSw5NywxMTUsMTAxLDQ1LDEwNSwKKyAgICAxMTAsMTE1LDEwMSwxMTAsMTE1LDEwNSwxMTYsMTA1LDExOCwxMDEsMTA4LDEyMSw0Niw3MCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNiwwLDAsMCwzNCwwLDAsMCwKKyAgICAxMTUsMiwwLDAsMCwwLDIsNDEsNCwyMTgsMywxMTUsMTIxLDExNSwyMTgsOCwKKyAgICAxMTIsMTA4LDk3LDExNiwxMDIsMTExLDExNCwxMDksMjE4LDEwLDExNSwxMTYsOTcsMTE0LDExNiwxMTUsCisgICAgMTE5LDEwNSwxMTYsMTA0LDIxOCwyNyw5NSw2Nyw2NSw4Myw2OSw5NSw3Myw3OCw4Myw2OSwKKyAgICA3OCw4Myw3Myw4NCw3Myw4Niw2OSw5NSw4MCw3Niw2NSw4NCw3MCw3OSw4Miw3NywKKyAgICA4Myw0MSwxLDExNCw2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwxMDksOTcsMTA3LDEwMSw5NSwxMTQsCisgICAgMTAxLDEwOCw5NywxMjAsOTUsOTksOTcsMTE1LDEwMSwyOCwwLDAsMCwxMTUsOCwwLAorICAgIDAsMCwwLDEsMTgsMSwxNSw0LDEyLDMsMTE0LDExLDAsMCwwLDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsCisgICAgMSwwLDEwMCwxLDAsNjQsMTA2LDEsMCwxMDAsMiwwLDEwMCwzLDAsMTMxLAorICAgIDIsMCw4Myw0MSw0LDEyMiw0Miw2NywxMTEsMTEwLDExOCwxMDEsMTE0LDExNiwzMiw5NywKKyAgICAzMiw1MSw1MCw0NSw5OCwxMDUsMTE2LDMyLDEwNSwxMTAsMTE2LDEwMSwxMDMsMTAxLDExNCwzMiwKKyAgICAxMTYsMTExLDMyLDEwOCwxMDUsMTE2LDExNiwxMDgsMTAxLDQ1LDEwMSwxMTAsMTAwLDEwNSw5NywxMTAsCisgICAgNDYsMTA4LDMsMCwwLDAsMjU1LDEyNywyNTUsMTI3LDMsMCwyMzMsNCwwLDAsCisgICAgMCwyMTgsNiwxMDgsMTA1LDExNiwxMTYsMTA4LDEwMSw0MSwyLDIxOCwzLDEwNSwxMTAsMTE2LAorICAgIDIxOCw4LDExNiwxMTEsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDEsMjE4LDEsMTIwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw3LAorICAgIDk1LDExOSw5NSwxMDgsMTExLDExMCwxMDMsNDAsMCwwLDAsMTE1LDIsMCwwLDAsCisgICAgMCwyLDExNCwxNywwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsCisgICAgMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsCisgICAgODMsNDEsMiwxMjIsNDcsNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsMzIsNTIsMzIsOTgsCisgICAgMTIxLDExNiwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTA4LDEwNSwxMTYsMTE2LDEwOCwxMDEsNDUsMTAxLAorICAgIDExMCwxMDAsMTA1LDk3LDExMCwzMiwxMTYsMTExLDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNiwxMDEsCisgICAgMTAzLDEwMSwxMTQsNDYsMTE0LDEzLDAsMCwwLDQxLDIsMTE0LDE0LDAsMCwwLAorICAgIDIxOCwxMCwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwxMDEsMTE1LDQxLDEsOTAsOSwKKyAgICAxMDUsMTEwLDExNiw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsMTE0LDQsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDcsOTUsMTE0LDk1LDEwOCwxMTEsMTEwLAorICAgIDEwMyw0NSwwLDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE0LDE5LDAsMCwKKyAgICAwLDk5LDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsMCwKKyAgICAwLDAsNzEsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLDAsMTA2LDEsCisgICAgMCwxMDAsMSwwLDEwMCwyLDAsMTMyLDAsMCwxMjQsMCwwLDY4LDEzMSwxLAorICAgIDAsMTMxLDEsMCw4Myw0MSwzLDEyMiwzMSw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsCisgICAgMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsCisgICAgNDYsMTA2LDExMSwxMDUsMTEwLDQwLDQxLDQ2LDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDQsMCwwLDAsODMsMCwwLDAsMTE1LDM3LDAsCisgICAgMCwwLDEwMywwLDAsMTI0LDAsMCw5MywyNywwLDEyNSwxLDAsMTI0LDEsCisgICAgMCwxMTQsNiwwLDEyNCwxLDAsMTA2LDAsMCwxMTYsMSwwLDEzMSwxLDAsCisgICAgMTQ1LDIsMCwxMTMsNiwwLDgzLDExNCw0LDAsMCwwLDQxLDIsMjE4LDYsCisgICAgMTE0LDExNSwxMTYsMTE0LDEwNSwxMTIsMjE4LDE1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLAorICAgIDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsNDEsMiwyMTgsMiw0Niw0OCwyMTgsNCwxMTIsCisgICAgOTcsMTE0LDExNiwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyNTAsMTAsNjAsMTA4LDEwNSwxMTUsMTE2LDk5LDExMSwxMDksMTEyLDYyLDUyLDAsCisgICAgMCwwLDExNSwyLDAsMCwwLDksMSwxMjIsMzAsOTUsMTEyLDk3LDExNiwxMDQsCisgICAgOTUsMTA2LDExMSwxMDUsMTEwLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwKKyAgICAxMDgsMTA1LDExNSwxMTYsOTksMTExLDEwOSwxMTIsNjIsNDEsMiwyMTgsOCwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMTUsMTAxLDExMiwyMTgsNCwxMDYsMTExLDEwNSwxMTAsNDEsMSwyMTgsMTAsMTEyLAorICAgIDk3LDExNiwxMDQsOTUsMTEyLDk3LDExNCwxMTYsMTE1LDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDYsMTExLDEwNSwxMTAsNTAsMCwwLDAsMTE1LDQsMCwwLDAsMCwyLDE1LAorICAgIDEsMTE0LDI4LDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsMCw1LAorICAgIDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDEzNCwwLDAsMCwKKyAgICAxMTYsMCwwLDExNiwxLDAsMTMxLDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LAorICAgIDUyLDAsMTI0LDAsMCwxMDYsMiwwLDExNiwzLDAsMTMxLDEsMCw5MiwzLAorICAgIDAsMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDEsMCwxMjQsMywwLAorICAgIDEwMiwyLDAsODMsMTIwLDY5LDAsMTE2LDQsMCwxMjQsMCwwLDEzMSwxLDAsCisgICAgNjgsOTMsNTUsMCwxMjUsNCwwLDEyNCw0LDAsMTE2LDEsMCwxMDcsNiwwLAorICAgIDExNCw2NSwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsNCwwLDEwMCwyLDAsMTAwLAorICAgIDEsMCwxMzEsMSwxLDkyLDIsMCwxMjUsMSwwLDEyNSwzLDAsMTI0LDEsCisgICAgMCwxMjQsMywwLDEwMiwyLDAsODMsMTEzLDY1LDAsODcsMTAwLDMsMCwxMjQsCisgICAgMCwwLDEwMiwyLDAsODMsNDEsNCwxMjIsMzIsODIsMTAxLDExMiwxMDgsOTcsOTksCisgICAgMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsMTE1LDQ2LDExMiw5NywxMTYsCisgICAgMTA0LDQ2LDExNSwxMTIsMTA4LDEwNSwxMTYsNDAsNDEsNDYsMjMzLDEsMCwwLDAsOTAsCisgICAgOCwxMDksOTcsMTIwLDExNSwxMTIsMTA4LDEwNSwxMTYsMjE4LDAsNDEsNiwyMTgsMywxMDgsCisgICAgMTAxLDExMCwxMTQsMjEsMCwwLDAsMjE4LDEwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LAorICAgIDEwNSwxMTEsMTEwLDExNCwyNSwwLDAsMCwyMTgsOCwxMTQsMTAxLDExOCwxMDEsMTE0LDExNSwKKyAgICAxMDEsMTAwLDIxOCw2LDExNCwxMTUsMTEyLDEwOCwxMDUsMTE2LDQxLDUsMjE4LDQsMTEyLDk3LAorICAgIDExNiwxMDQsOTAsNSwxMDIsMTE0LDExMSwxMTAsMTE2LDIxOCwxLDk1LDIxOCw0LDExNiw5NywKKyAgICAxMDUsMTA4LDExNCwxNiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwKKyAgICAxMDgsMTA1LDExNiw1NiwwLDAsMCwxMTUsMTYsMCwwLDAsMCwyLDE4LDEsCisgICAgMjQsMSwxMCwxLDE5LDEsMTIsMSwyNywxLDE0LDEsMTE0LDM4LDAsMCwKKyAgICAwLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDExNiwwLDAsMTA2LDEsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsODMsNDEsMSwxMjIsMTI2LDgzLDExNiw5NywxMTYsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgNzcsOTcsMTAwLDEwMSwzMiw5NywzMiwxMTUsMTAxLDExMiw5NywxMTQsOTcsMTE2LDEwMSwzMiwKKyAgICAxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMDksOTcsMTA3LDEwMSwKKyAgICAzMiwxMDUsMTE2LDMyLDEwMSw5NywxMTUsMTA1LDEwMSwxMTQsMzIsMTE2LDExMSwzMiwxMTEsMTE4LAorICAgIDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDMyLDEwNSwxMTAsMzIsMTAxLDEyMCwxMTIsMTAxLDExNCwxMDUsCisgICAgMTA5LDEwMSwxMTAsMTE2LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLAorICAgIDk5LDk3LDk5LDEwNCwxMDEsMzIsMTE1LDExNiw5NywxMTYsMzIsMTE0LDEwMSwxMTUsMTE3LDEwOCwKKyAgICAxMTYsMTE1LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDQxLDIsMTE0LDMsMCwwLAorICAgIDAsOTAsNCwxMTUsMTE2LDk3LDExNiw0MSwxLDExNCwzNSwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsNjgsMCwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCw3LDExNCwzOSwwLDAsMCw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMywwLDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsNTgsCisgICAgMCwwLDAsMTIxLDE2LDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LAorICAgIDIsMCw4NywxMTAsMjIsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDQwLDAsCisgICAgMSwxLDEsMTAwLDEsMCw4Myw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTA2LAorICAgIDIsMCwxMDAsMiwwLDY0LDEyNCwxLDAsMTA3LDIsMCw4Myw0MSwzLDEyMiwKKyAgICA0OSw4NCwxMDEsMTE1LDExNiwzMiwxMTksMTA0LDEwMSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAorICAgIDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTYsMTIxLDExMiwKKyAgICAxMDEsNDYsNzAsMTA1LDAsMjQwLDAsMCw0MSwzLDExNCwzOSwwLDAsMCwyMTgsCisgICAgNyw3OSw4Myw2OSwxMTQsMTE0LDExMSwxMTQsMjE4LDcsMTE1LDExNiw5NSwxMDksMTExLDEwMCwKKyAgICAxMDEsNDEsMywxMTQsMzUsMCwwLDAsMjE4LDQsMTA5LDExMSwxMDAsMTAxLDkwLDksCisgICAgMTE1LDExNiw5NywxMTYsOTUsMTA1LDExMCwxMDIsMTExLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxOCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsNzgsMCwwLDAsCisgICAgMTE1LDEwLDAsMCwwLDAsMiwzLDEsMTYsMSwxMywxLDksMSwxMTQsCisgICAgNDMsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAogICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MCwyLDAsMCwwLAotICAgIDExNywzMSwwLDAsMCw4MiwxMDEsMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LAotICAgIDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsNDYsMTA1LDAsMTI4LDAsMCw0MCwxLDAsMCwwLDExNywxOCwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwxMTEsMTAwLDEwMSwKLSAgICA5NSwxMTYsMTIxLDExMiwxMDEsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxMiwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSwKLSAgICAxMDgsMCwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywxMiwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw5OSwxLDAsMCwKLSAgICAwLDAsMCwwLDAsMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwzNCwwLDAsMCwxMjQsMCwwLDExNSwyMSwwLDExNiwwLDAsMTA2LAotICAgIDEsMCwxMzEsMCwwLDEyNSwwLDAsMTEwLDAsMCwxMTYsMiwwLDEyNCwwLAotICAgIDAsMTAwLDEsMCwxMzEsMiwwLDgzLDQwLDIsMCwwLDAsMTE3LDMwLDAsCi0gICAgMCwwLDgyLDEwMSwxMTIsMTA4LDk3LDk5LDEwMSwxMDksMTAxLDExMCwxMTYsMzIsMTAyLDExMSwKLSAgICAxMTQsMzIsMTExLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw0NiwxMDUsMTE1LDEwMCwxMDUsMTE0LDQ2LAotICAgIDEwNSwwLDY0LDAsMCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDk1LAotICAgIDExMSwxMTUsMTE3LDYsMCwwLDAsMTAzLDEwMSwxMTYsOTksMTE5LDEwMCwxMTcsMTgsMCwKLSAgICAwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSw5NSwxMDksMTExLDEwMCwxMDEsOTUsCi0gICAgMTE2LDEyMSwxMTIsMTAxLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTQsMCwKLSAgICAwLDAsMTE1LDYsMCwwLDAsMCwyLDYsMSwxNSwxLDExNywxMSwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDEwNSwxODIsMSwKLSAgICAwLDAsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTcsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDE5MiwwLDAsMCwxMDAsMSwwLDEwNiwKLSAgICAwLDAsMTI0LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMiwKLSAgICAwLDEyNSwzLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMTE2LDIsMCwKLSAgICAxMDYsNCwwLDExNiwyLDAsMTA2LDUsMCw2NiwxMTYsMiwwLDEwNiw2LDAsCi0gICAgNjYsMTI0LDIsMCwxMDAsMiwwLDY0LDEzMSwzLDAsMTI1LDQsMCwxMjEsNjAsCi0gICAgMCwxMTYsNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsMywwLDEzMSwyLDAsCi0gICAgMTQzLDIwLDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw5LDAsMTI0LDEsMCwxMzEsCi0gICAgMSwwLDEsODcsMTAwLDQsMCw4MSw4OCwxMTYsMiwwLDEwNiwxMCwwLDEyNCwKLSAgICAzLDAsMTI0LDAsMCwxMzEsMiwwLDEsODcsMTEwLDU5LDAsNCwxMTYsMTEsCi0gICAgMCwxMDcsMTAsMCwxMTQsMTg3LDAsMSwxLDEsMTIxLDE3LDAsMTE2LDIsMCwKLSAgICAxMDYsMTIsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsMTgsMCw0LDExNiwKLSAgICAxMSwwLDEwNywxMCwwLDExNCwxNzksMCwxLDEsMSw4OSwxMTAsMSwwLDg4LAotICAgIDEzMCwwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLDgzLDQwLDUsMCwwLAotICAgIDAsMTE3LDE2MiwwLDAsMCw2NiwxMDEsMTE1LDExNiw0NSwxMDEsMTAyLDEwMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMTksMTE0LAotICAgIDEwNSwxMTYsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiw5NywxMTYsMTExLDEwOSwxMDUsOTksOTcsMTA4LDEwOCwxMjEsNDYsMTAsMzIsCi0gICAgMzIsMzIsMzIsNjYsMTAxLDMyLDExMiwxMTQsMTAxLDExMiw5NywxMTQsMTAxLDEwMCwzMiwxMTYsCi0gICAgMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMzIsOTcsMzIsNzAsMTA1LDEwOCwxMDEsNjksCi0gICAgMTIwLDEwNSwxMTUsMTE2LDExNSw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDEwMiwzMiw5OSwxMTEsCi0gICAgMTEwLDk5LDExNywxMTQsMTE0LDEwMSwxMTAsMTE2LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywKLSAgICAzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDExNiwxMDEsMTA5LDExMiwKLSAgICAxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTE2LAotICAgIDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCw0NiwxMTcsNSwwLDAsMCwxMjMsMTI1LDQ2LAotICAgIDEyMywxMjUsMTA1LDE4MiwxLDAsMCwxMTcsMiwwLDAsMCwxMTksOTgsNzgsNDAsCi0gICAgMTMsMCwwLDAsMTE3LDYsMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsCi0gICAgMiwwLDAsMCwxMDUsMTAwLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsCi0gICAgMCwwLDAsMTExLDExMiwxMDEsMTEwLDExNyw2LDAsMCwwLDc5LDk1LDY5LDg4LAotICAgIDY3LDc2LDExNyw3LDAsMCwwLDc5LDk1LDY3LDgyLDY5LDY1LDg0LDExNyw4LAotICAgIDAsMCwwLDc5LDk1LDg3LDgyLDc5LDc4LDc2LDg5LDExNywzLDAsMCwwLAotICAgIDk1LDEwNSwxMTEsMTE3LDYsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzMsNzksMTE3LDUsCi0gICAgMCwwLDAsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTcsNywwLDAsMCwxMTQsMTAxLDExMiwKLSAgICAxMDgsOTcsOTksMTAxLDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsNiwwLDAsMCwxMTcsMTEwLDEwOCwxMDUsMTEwLDEwNyw0MCw2LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMCw5NywKLSAgICAxMTYsOTcsMTE3LDQsMCwwLDAsMTA5LDExMSwxMDAsMTAxLDExNyw4LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDExNiwxMDksMTEyLDExNywyLDAsMCwwLDEwMiwxMDAsMTE3LAotICAgIDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDEzLDAsMCwwLDk1LDExOSwxMTQsMTA1LDExNiwxMDEsOTUsCi0gICAgOTcsMTE2LDExMSwxMDksMTA1LDk5LDEyMSwwLDAsMCwxMTUsMjYsMCwwLDAsMCwKLSAgICA1LDI0LDEsOSwxLDMzLDEsMywzLDIxLDEsMTksMSwyMCwxLDEzLAotICAgIDEsMywxLDE3LDEsMTMsMSw1LDEsMTE3LDEzLDAsMCwwLDk1LDExOSwKLSAgICAxMTQsMTA1LDExNiwxMDEsOTUsOTcsMTE2LDExMSwxMDksMTA1LDk5LDk5LDIsMCwwLDAsCi0gICAgMCwwLDAsMCwzLDAsMCwwLDcsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDk1LDAsMCwwLDEyMCw2OSwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsMywKLSAgICAwLDEwMCw0LDAsMTAzLDQsMCw2OCw5Myw0OSwwLDEyNSwyLDAsMTE2LDAsCi0gICAgMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTQsMTksMCwxMTYsMSwwLAotICAgIDEyNCwwLDAsMTI0LDIsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDIsMCwxMzEsCi0gICAgMiwwLDEzMSwzLDAsMSwxMTMsMTksMCwxMTMsMTksMCw4NywxMjQsMCwwLAotICAgIDEwNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDEsMCwxLAotICAgIDEwMCw1LDAsODMsNDAsNiwwLDAsMCwxMTcsNDcsMCwwLDAsODMsMTA1LAotICAgIDEwOSwxMTIsMTA4LDEwMSwzMiwxMTUsMTE3LDk4LDExNSwxMTYsMTA1LDExNiwxMTcsMTE2LDEwMSwzMiwKLSAgICAxMDIsMTExLDExNCwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTExLDExMSwxMDgsMTE1LDQ2LDExNywxMTIsCi0gICAgMTAwLDk3LDExNiwxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDYsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwKLSAgICAxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSwxMDAsMTExLDk5LDk1LDk1LDc4LDQwLDUsMCwwLDAsMTE3LDcsMCwwLAotICAgIDAsMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsNywwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NywxMTYsMTE2LDExNCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwxMTcsNiwwLAotICAgIDAsMCwxMTcsMTEyLDEwMCw5NywxMTYsMTAxLDQwLDMsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTEwLDEwMSwxMTksMTE3LDMsMCwwLDAsMTExLDEwOCwxMDAsMTE3LDcsMCwKLSAgICAwLDAsMTE0LDEwMSwxMTIsMTA4LDk3LDk5LDEwMSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDE0MywKLSAgICAwLDAsMCwxMTUsOCwwLDAsMCwwLDIsMjUsMSwxNSwxLDMyLDEsCi0gICAgMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywxMTIsOTksMSwwLDAsMCwwLAotICAgIDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCi0gICAgMTYsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEzMSwxLDAsMTI0LDAsMCwKLSAgICAxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDc1LDAsMCwwLDY3LDExNCwKLSAgICAxMDEsOTcsMTE2LDEwMSwzMiw5NywzMiwxMTAsMTAxLDExOSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsMTAxLDExMCwxMTYsMTAxLDExNCwxMDEsCi0gICAgMTAwLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNDAsMiwwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCwxMTYsMTIxLDExMiwxMDEsMTE3LDMsMCwwLDAsOTUsMTA1LDExMSw0MCwKLSAgICAxLDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMCwxMDEsCi0gICAgMTE5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE1NCwwLDAsMCwxMTUsMiwwLDAsCi0gICAgMCwwLDYsMTE3LDEwLDAsMCwwLDExMCwxMDEsMTE5LDk1LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsCi0gICAgMCwwLDAsNjYsMCwwLDAsMTE1LDIwLDAsMCwwLDEyNCwwLDAsNjksCi0gICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw4MywKLSAgICA0MCwyLDAsMCwwLDExNywxNCwwLDAsMCw5NSw2OCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCw3OCw0MCwzLDAsMCwwLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsCi0gICAgOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsNDAsMSwwLDAsMCwKLSAgICAxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE0LDAsMCwwLAotICAgIDk1LDY4LDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsNjksMTE0LDExNCwxMTEsMTE0LDE3MSwwLAotICAgIDAsMCwxMTUsMiwwLDAsMCwxNiwxLDExNywxNCwwLDAsMCw5NSw2OCwKLSAgICAxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCw5OSwxLDAsMCwKLSAgICAwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY2LDAsMCwKLSAgICAwLDExNSw4NiwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLAorICAgIDAsMTI0LDAsMCwxMDAsMSwwLDEzMSwyLDAsODMsNDEsMiwxMjIsMzEsODIsCisgICAgMTAxLDExMiwxMDgsOTcsOTksMTAxLDEwOSwxMDEsMTEwLDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTEsCisgICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwNSwwLAorICAgIDEyOCwwLDAsNDEsMSwxMTQsNDMsMCwwLDAsNDEsMSwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDEyLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDg3LDAsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsMiwxMTQsNDQsMCwwLDAsOTksMSwKKyAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMzQsMCwwLDAsMTI0LDAsMCwxMTUsMjEsMCwxMTYsMCwKKyAgICAwLDEwNiwxLDAsMTMxLDAsMCwxMjUsMCwwLDExMCwwLDAsMTE2LDIsMCwKKyAgICAxMjQsMCwwLDEwMCwxLDAsMTMxLDIsMCw4Myw0MSwyLDEyMiwzMCw4MiwxMDEsCisgICAgMTEyLDEwOCw5Nyw5OSwxMDEsMTA5LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDExMSwxMTUsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsNDYsMTA1LDExNSwxMDAsMTA1LDExNCw0NiwxMDUsMCw2NCwwLAorICAgIDAsNDEsMywxMTQsMywwLDAsMCwyMTgsNiwxMDMsMTAxLDExNiw5OSwxMTksMTAwLAorICAgIDExNCw0MywwLDAsMCw0MSwxLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LAorICAgIDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCw5MiwwLDAsMCwxMTUsNiwwLDAsCisgICAgMCwwLDIsNiwxLDE1LDEsMTE0LDQ2LDAsMCwwLDEwNSwxODIsMSwwLAorICAgIDAsOTksMywwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTcsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDE5MiwwLDAsMCwxMDAsMSwwLDEwNiwwLAorICAgIDAsMTI0LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMiwwLAorICAgIDEyNSwzLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwzLDAsMTE2LDIsMCwxMDYsCisgICAgNCwwLDExNiwyLDAsMTA2LDUsMCw2NiwxMTYsMiwwLDEwNiw2LDAsNjYsCisgICAgMTI0LDIsMCwxMDAsMiwwLDY0LDEzMSwzLDAsMTI1LDQsMCwxMjEsNjAsMCwKKyAgICAxMTYsNywwLDEwNiw4LDAsMTI0LDQsMCwxMDAsMywwLDEzMSwyLDAsMTQzLAorICAgIDIwLDAsMTI1LDUsMCwxMjQsNSwwLDEwNiw5LDAsMTI0LDEsMCwxMzEsMSwKKyAgICAwLDEsODcsMTAwLDQsMCw4MSw4OCwxMTYsMiwwLDEwNiwxMCwwLDEyNCwzLAorICAgIDAsMTI0LDAsMCwxMzEsMiwwLDEsODcsMTEwLDU5LDAsNCwxMTYsMTEsMCwKKyAgICAxMDcsMTAsMCwxMTQsMTg3LDAsMSwxLDEsMTIxLDE3LDAsMTE2LDIsMCwxMDYsCisgICAgMTIsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsMTgsMCw0LDExNiwxMSwKKyAgICAwLDEwNywxMCwwLDExNCwxNzksMCwxLDEsMSw4OSwxMTAsMSwwLDg4LDEzMCwKKyAgICAwLDAsODksMTEwLDEsMCw4OCwxMDAsNCwwLDgzLDQxLDUsMTIyLDE2Miw2NiwKKyAgICAxMDEsMTE1LDExNiw0NSwxMDEsMTAyLDEwMiwxMTEsMTE0LDExNiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsCisgICAgMTA1LDExMSwxMTAsMzIsMTE2LDExMSwzMiwxMTksMTE0LDEwNSwxMTYsMTAxLDMyLDEwMCw5NywxMTYsCisgICAgOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiw5NywxMTYsMTExLDEwOSwKKyAgICAxMDUsOTksOTcsMTA4LDEwOCwxMjEsNDYsMTAsMzIsMzIsMzIsMzIsNjYsMTAxLDMyLDExMiwKKyAgICAxMTQsMTAxLDExMiw5NywxMTQsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwNCw5NywxMTAsMTAwLDEwOCwKKyAgICAxMDEsMzIsOTcsMzIsNzAsMTA1LDEwOCwxMDEsNjksMTIwLDEwNSwxMTUsMTE2LDExNSw2OSwxMTQsCisgICAgMTE0LDExMSwxMTQsMzIsMTA1LDEwMiwzMiw5OSwxMTEsMTEwLDk5LDExNywxMTQsMTE0LDEwMSwxMTAsCisgICAgMTE2LDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLAorICAgIDEwLDMyLDMyLDMyLDMyLDExNiwxMDEsMTA5LDExMiwxMTEsMTE0LDk3LDExNCwxMjEsMzIsMTAyLAorICAgIDEwNSwxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTcsMTE2LDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCwKKyAgICA0NiwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsMTA1LDE4MiwxLDAsMCw5MCwyLDExOSwKKyAgICA5OCw3OCw0MSwxMywyMTgsNiwxMDIsMTExLDExNCwxMDksOTcsMTE2LDIxOCwyLDEwNSwxMDAsCisgICAgMTE0LDMsMCwwLDAsOTAsNCwxMTEsMTEyLDEwMSwxMTAsOTAsNiw3OSw5NSw2OSwKKyAgICA4OCw2Nyw3Niw5MCw3LDc5LDk1LDY3LDgyLDY5LDY1LDg0LDkwLDgsNzksOTUsCisgICAgODcsODIsNzksNzgsNzYsODksMjE4LDMsOTUsMTA1LDExMSwyMTgsNiw3MCwxMDUsMTA4LAorICAgIDEwMSw3Myw3OSwyMTgsNSwxMTksMTE0LDEwNSwxMTYsMTAxLDIxOCw3LDExNCwxMDEsMTEyLDEwOCwKKyAgICA5Nyw5OSwxMDEsMTE0LDQwLDAsMCwwLDkwLDYsMTE3LDExMCwxMDgsMTA1LDExMCwxMDcsCisgICAgNDEsNiwxMTQsMzUsMCwwLDAsMjE4LDQsMTAwLDk3LDExNiw5NywxMTQsNDIsMCwKKyAgICAwLDAsOTAsOCwxMTIsOTcsMTE2LDEwNCw5NSwxMTYsMTA5LDExMiw5MCwyLDEwMiwxMDAsCisgICAgMjE4LDQsMTAyLDEwNSwxMDgsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCwxMyw5NSwxMTksMTE0LDEwNSwxMTYsMTAxLDk1LDk3LDExNiwKKyAgICAxMTEsMTA5LDEwNSw5OSw5OSwwLDAsMCwxMTUsMjYsMCwwLDAsMCw1LDI0LAorICAgIDEsOSwxLDMzLDEsMywzLDIxLDEsMTksMSwyMCwxLDEzLDEsMywKKyAgICAxLDE3LDEsMTMsMSw1LDEsMTE0LDU1LDAsMCwwLDk5LDIsMCwwLAorICAgIDAsMCwwLDAsMCwzLDAsMCwwLDcsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDk1LDAsMCwwLDEyMCw2OSwwLDEwMCwxLDAsMTAwLDIsMCwxMDAsCisgICAgMywwLDEwMCw0LDAsMTAzLDQsMCw2OCw5Myw0OSwwLDEyNSwyLDAsMTE2LAorICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMTQsMTksMCwxMTYsMSwKKyAgICAwLDEyNCwwLDAsMTI0LDIsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDIsMCwKKyAgICAxMzEsMiwwLDEzMSwzLDAsMSwxMTMsMTksMCwxMTMsMTksMCw4NywxMjQsMCwKKyAgICAwLDEwNiwzLDAsMTA2LDQsMCwxMjQsMSwwLDEwNiwzLDAsMTMxLDEsMCwKKyAgICAxLDEwMCw1LDAsODMsNDEsNiwxMjIsNDcsODMsMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiwKKyAgICAxMTUsMTE3LDk4LDExNSwxMTYsMTA1LDExNiwxMTcsMTE2LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMDIsCisgICAgMTE3LDExMCw5OSwxMTYsMTExLDExMSwxMDgsMTE1LDQ2LDExNywxMTIsMTAwLDk3LDExNiwxMDEsOTUsCisgICAgMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDYsMjE4LDEwLDk1LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDk1LDk1LDIxOCw4LDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDIxOCwxMiwKKyAgICA5NSw5NSwxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwyMTgsNyw5NSw5NSwKKyAgICAxMDAsMTExLDk5LDk1LDk1LDc4LDQxLDUsMjE4LDcsMTA0LDk3LDExNSw5NywxMTYsMTE2LAorICAgIDExNCwyMTgsNywxMTUsMTAxLDExNiw5NywxMTYsMTE2LDExNCwyMTgsNywxMDMsMTAxLDExNiw5NywKKyAgICAxMTYsMTE2LDExNCwyMTgsOCw5NSw5NSwxMDAsMTA1LDk5LDExNiw5NSw5NSwyMTgsNiwxMTcsCisgICAgMTEyLDEwMCw5NywxMTYsMTAxLDQxLDMsOTAsMywxMTAsMTAxLDExOSw5MCwzLDExMSwxMDgsCisgICAgMTAwLDExNCw1MiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsNSw5NSwxMTksMTE0LDk3LDExMiwxMjEsMCwwLDAsCisgICAgMTE1LDgsMCwwLDAsMCwyLDI1LDEsMTUsMSwzMiwxLDExNCw2NSwwLAorICAgIDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLAorICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDExNiwKKyAgICAxLDAsMTMxLDEsMCwxMjQsMCwwLDEzMSwxLDAsODMsNDEsMSw3OCw0MSwKKyAgICAyLDIxOCw0LDExNiwxMjEsMTEyLDEwMSwxMTQsNywwLDAsMCw0MSwxLDIxOCw0LAorICAgIDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxMSw5NSwxMTAsMTAxLDExOSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAxMjksMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNCw2OCwwLDAsMCwKKyAgICA5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMCwKKyAgICAwLDY0LDAsMCwwLDExNSw1OCwwLDAsMCwxMDEsMCwwLDkwLDEsMCwKICAgICAxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwKICAgICAzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAogICAgIDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwKLSAgICAxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDEwLDAsMTAwLAotICAgIDExLDAsMTMyLDAsMCw5MCw4LDAsMTAwLDEyLDAsODMsNDAsMTMsMCwwLAotICAgIDAsMTE3LDExLDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LAotICAgIDEwNywxMTcsMTY5LDAsMCwwLDY1LDMyLDExNCwxMDEsOTksMTE3LDExNCwxMTUsMTA1LDExOCwKLSAgICAxMDEsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsCi0gICAgOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTE1LDMyLDk3LAotICAgIDk4LDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDMyLDEwMCwxMDEsCi0gICAgOTcsMTAwLDEwOCwxMTEsOTksMTA3LDExNSwxMCwzMiwzMiwzMiwzMiw0MCwxMDEsNDYsMTAzLAotICAgIDQ2LDMyLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMzIsNDksMzIsMTE2LDExNCwxMjEsMTA1LDExMCwKLSAgICAxMDMsMzIsMTE2LDExMSwzMiwxMTYsOTcsMTA3LDEwMSwzMiwxMDgsMTExLDk5LDEwNywxMTUsMzIsCi0gICAgNjUsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDY2LDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwKLSAgICAxMTQsMTAxLDk3LDEwMCwzMiw1MCwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsMTExLAotICAgIDEwLDMyLDMyLDMyLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDExNSwzMiwKLSAgICA2NiwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsNjUsNDEsNDYsMTAsMzIsMzIsMzIsMzIsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsNzAsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwKLSAgICAwLDAsMTI0LDAsMCw5NSwyLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwwLAotICAgIDAsMTI0LDAsMCw5NSwzLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDQsMCwKLSAgICAxMDAsMCwwLDEyNCwwLDAsOTUsNiwwLDEwMCwxLDAsMTI0LDAsMCw5NSwKLSAgICA3LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDgsMCwxMDAsMCwwLDgzLDQwLAotICAgIDIsMCwwLDAsNzgsMTA1LDAsMCwwLDAsNDAsOSwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNywxMywwLDAsMCwKLSAgICA5NywxMDgsMTA4LDExMSw5OSw5NywxMTYsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNyw0LDAsCi0gICAgMCwwLDEwOCwxMTEsOTksMTA3LDExNyw2LDAsMCwwLDExOSw5NywxMDcsMTAxLDExNywKLSAgICAxMTIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsNzgsCi0gICAgMTExLDExMCwxMDEsMTE3LDUsMCwwLDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsNSwwLAotICAgIDAsMCw5OSwxMTEsMTE3LDExMCwxMTYsMTE3LDcsMCwwLDAsMTE5LDk3LDEwNSwxMTYsCi0gICAgMTAxLDExNCwxMTUsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwKLSAgICAxMTYsOTUsOTUsMTgxLDAsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwKLSAgICAxNSwxLDksMSw5LDEsOSwxLDExNywyMCwwLDAsMCw5NSw3NywxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LAotICAgIDk1LDk5LDEsMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDg3LDAsMCwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDEyNSwyLDAsCi0gICAgMTIwLDU5LDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsCi0gICAgMywwLDEyNCwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCw1NSwwLDEwMCwxLAotICAgIDAsODMsMTI0LDMsMCwxMDYsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMjQsMSwKLSAgICAwLDEwNywyLDAsMTE0LDI0LDAsMTAwLDIsMCw4MywxMTMsMjQsMCwxMDAsMCwKLSAgICAwLDgzLDQwLDMsMCwwLDAsNzgsNzAsODQsNDAsOCwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLDExNyw5LDAsMCwwLAotICAgIDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsMTAxLDExMCwxMTYsMTE3LDUsMCwwLDAsMTExLDExOSwKLSAgICAxMTAsMTAxLDExNCwxMTcsMTIsMCwwLDAsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwKLSAgICAxMDMsOTUsMTExLDExMCwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLDAsCi0gICAgMCw3OCwxMTEsMTEwLDEwMSwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSwxMTcsCi0gICAgNCwwLDAsMCw4NCwxMTQsMTE3LDEwMSw0MCw0LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMiwwLDAsMCwxMDksMTAxLDExNywzLDAsCi0gICAgMCwwLDExNiwxMDUsMTAwLDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDQwLDAsCi0gICAgMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsMCwwLDEwNCwKLSAgICA5NywxMTUsOTUsMTAwLDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMTg5LDAsMCwwLDExNSwKLSAgICAxOCwwLDAsMCwwLDIsMTIsMSw5LDEsMywxLDE1LDEsMTIsMSwKLSAgICA0LDEsOSwxLDEyLDEsMTE3LDI0LDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsOTcsMTAwLDEwOCwKLSAgICAxMTEsOTksMTA3LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAotICAgIDE3LDAsMCwwLDY3LDAsMCwwLDExNSwyMTQsMCwwLDAsMTE2LDAsMCwKLSAgICAxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDExNiwyLDAsMTI0LAotICAgIDEsMCw2MCwxMjIsMTc3LDAsMTIwLDE3MCwwLDEyNCwwLDAsMTA2LDMsMCwxNDMsCi0gICAgMTMwLDAsMSwxMjQsMCwwLDEwNiw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNSwKLSAgICA2OCwwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMSwwLDEwNywyLDAsMTE0LDk2LAotICAgIDAsMTI0LDEsMCwxMjQsMCwwLDk1LDUsMCwxMjQsMCwwLDQsMTA2LDQsCi0gICAgMCwxMDAsMiwwLDU1LDIsOTUsNCwwLDEwMCw1LDAsODMsMTI0LDAsMCwKLSAgICAxMDYsNywwLDEzMSwwLDAsMTE0LDEyNywwLDExNiw4LDAsMTAwLDMsMCwxMjQsCi0gICAgMCwwLDIyLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwwLDAsMTA2LAotICAgIDksMCwxMDYsMTAsMCwxMDAsNiwwLDEzMSwxLDAsMTE0LDE2MywwLDEyNCwwLAotICAgIDAsNCwxMDYsMTIsMCwxMDAsMiwwLDU1LDIsOTUsMTIsMCwxMTAsMCwwLAotICAgIDg3LDEwMCw0LDAsODEsODgsMTI0LDAsMCwxMDYsOSwwLDEwNiwxMCwwLDEzMSwKLSAgICAwLDAsMSwxMjQsMCwwLDEwNiw5LDAsMTA2LDEzLDAsMTMxLDAsMCwxLAotICAgIDExMywyOCwwLDg3LDEwMCw0LDAsMTE2LDIsMCwxMjQsMSwwLDYxLDg4LDEwMCwKLSAgICA0LDAsODMsNDAsNywwLDAsMCwxMTcsMTg1LDAsMCwwLDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsNDYsMzIsMzIsCi0gICAgNzMsMTAyLDMyLDk3LDMyLDExMiwxMTEsMTE2LDEwMSwxMTAsMTE2LDEwNSw5NywxMDgsMzIsMTAwLAotICAgIDEwMSw5NywxMDAsMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNiwxMDEsOTksCi0gICAgMTE2LDEwMSwxMDAsNDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMzIsOTUsCi0gICAgNjgsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwKLSAgICAzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDc5LDExNiwxMDQsMTAxLDExNCwxMTksMTA1LDExNSwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMzIsCi0gICAgMTA4LDExMSw5OSwxMDcsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE5LDk3LDEyMSwxMTUsMzIsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiw4NCwxMTQsMTE3LDEwMSwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsNDYsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDAsMCwwLDAsMTA1LDEsMCwwLDAsCi0gICAgMTE3LDIzLDAsMCwwLDEwMCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDMyLDEwMCwxMDEsCi0gICAgMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsMzcsMTE0LDc4LDg0LDcwLDQwLAotICAgIDE0LDAsMCwwLDExNyw3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsCi0gICAgMTE3LDksMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTA1LDEwMCwxMDEsMTEwLDExNiwxMTcsMTIsCi0gICAgMCwwLDAsOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwxMTcsCi0gICAgNCwwLDAsMCwxMDgsMTExLDk5LDEwNywxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LAotICAgIDExMCwxMTYsMTE3LDUsMCwwLDAsMTExLDExOSwxMTAsMTAxLDExNCwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSwxMTcsMTIsMCwwLDAsMTA0LDk3LDExNSw5NSwxMDAsMTAxLAotICAgIDk3LDEwMCwxMDgsMTExLDk5LDEwNywxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwKLSAgICAxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLDAsMTE5LDk3LAotICAgIDEwNywxMDEsMTE3LDExMiwxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLAotICAgIDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNyw3LDAsMCwwLDExOSwKLSAgICA5NywxMDUsMTE2LDEwMSwxMTQsMTE1LDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywKLSAgICAxMTUsMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLAotICAgIDExNywzLDAsMCwwLDExNiwxMDUsMTAwLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDcsMCwwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwKLSAgICAyMDEsMCwwLDAsMTE1LDMyLDAsMCwwLDAsNiwxMiwxLDEwLDEsMywKLSAgICAxLDMsMSwxMCwxLDMwLDEsOSwxLDE1LDEsNCwxLDEyLDEsMTksCi0gICAgMSwxOCwxLDI0LDIsMTMsMSwyMCwyLDExNywxOSwwLDAsMCw5NSw3NywKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTcsOTksMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMCwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTY1LDAsMCwwLDExNiwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEyNSwxLDAsMTI0LDAsMCwxMDYsMiwwLDE0MywxMzgsMCwKLSAgICAxLDEyNCwwLDAsMTA2LDMsMCwxMjQsMSwwLDEwNywzLDAsMTE0LDUyLDAsCi0gICAgMTE2LDQsMCwxMDAsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDUsMCwxMDAsMiwwLDEwNyw0LDAsMTE1LDczLDAsMTE2LDYsCi0gICAgMCwxMzAsMSwwLDEyNCwwLDAsNCwxMDYsNSwwLDEwMCwzLDAsNTYsMiwKLSAgICA5NSw1LDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDIsMCwxMTQsCi0gICAgMTU1LDAsMTAwLDAsMCwxMjQsMCwwLDk1LDMsMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTE0LDE1NSwwLDEyNCwwLDAsNCwxMDYsOCwwLDEwMCwzLDAsNTYsMiwKLSAgICA5NSw4LDAsMTI0LDAsMCwxMDYsOSwwLDEwNiwxMCwwLDEzMSwwLDAsMSwKLSAgICAxMTMsMTU1LDAsMTEwLDAsMCw4NywxMDAsMCwwLDgxLDg4LDEwMCwwLDAsODMsCi0gICAgNDAsNCwwLDAsMCw3OCwxMTcsMzEsMCwwLDAsOTksOTcsMTEwLDExMCwxMTEsCi0gICAgMTE2LDMyLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNywxMTAsNDUsOTcsOTksMTEzLAotICAgIDExNywxMDUsMTE0LDEwMSwxMDAsMzIsMTA4LDExMSw5OSwxMDcsMTA1LDAsMCwwLDAsMTA1LAotICAgIDEsMCwwLDAsNDAsMTEsMCwwLDAsMTE3LDcsMCwwLDAsOTUsMTE2LAotICAgIDEwNCwxMTQsMTAxLDk3LDEwMCwxMTcsOSwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDUsMTAwLAotICAgIDEwMSwxMTAsMTE2LDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDExNyw1LDAsMCwKLSAgICAwLDExMSwxMTksMTEwLDEwMSwxMTQsMTE3LDEyLDAsMCwwLDgyLDExNywxMTAsMTE2LDEwNSwKLSAgICAxMDksMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNSwwLDAsMCw5OSwxMTEsMTE3LDExMCwKLSAgICAxMTYsMTE3LDE0LDAsMCwwLDY1LDExNSwxMTUsMTAxLDExNCwxMTYsMTA1LDExMSwxMTAsNjksCi0gICAgMTE0LDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsCi0gICAgMCwwLDExOSw5NywxMDUsMTE2LDEwMSwxMTQsMTE1LDExNyw2LDAsMCwwLDExOSw5NywKLSAgICAxMDcsMTAxLDExNywxMTIsMTE3LDcsMCwwLDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsCi0gICAgNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDMsCi0gICAgMCwwLDAsMTE2LDEwNSwxMDAsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsNywwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwyMjYsMCwKLSAgICAwLDAsMTE1LDIyLDAsMCwwLDAsMSwxMiwxLDEwLDEsMTUsMSwxNSwKLSAgICAxLDIxLDEsMTUsMSwxNSwxLDksMSw5LDEsMTUsMSwxMTcsMTksMCwKLSAgICAwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsCi0gICAgMTA4LDEwMSw5NywxMTUsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsCi0gICAgMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLDEwMCwKLSAgICAxLDAsMTI0LDAsMCwxMDYsMCwwLDExNiwxLDAsMTI0LDAsMCwxMzEsMSwKLSAgICAwLDEwMiwyLDAsMjIsODMsNDAsMiwwLDAsMCw3OCwxMTcsMjEsMCwwLAotICAgIDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLDM3LDExNCw0MSwKLSAgICAzMiw5NywxMTYsMzIsMzcsMTAwLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE3LDIsMCwwLDAsMTA1LDEwMCw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDk1LDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICA5NSw5NSwyMzksMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMCwwLAotICAgIDAsMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQwLDksMCwwLDAsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwxMTMsCi0gICAgMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsNywwLDAsMCw5NSw5NSwKLSAgICAxMDAsMTExLDk5LDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwKLSAgICA5NSw5NSwxMTcsMTIsMCwwLDAsMTA0LDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsCi0gICAgMTExLDk5LDEwNywxMTcsNywwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNywKLSAgICA3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDExNyw4LDAsMCwwLAotICAgIDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw0MCwxLDAsMCwwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDE3NSwwLDAsMCwxMTUsMTIsMCwwLAotICAgIDAsMTYsNCw2LDIsMTIsOCwxMiwxMiwxMiwyNSwxMiwxMywxMTcsMTEsMCwKLSAgICAwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwKLSAgICAwLDAsMTE1LDc0LDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLAotICAgIDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwKLSAgICAxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsCi0gICAgMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LAotICAgIDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLAotICAgIDgzLDQwLDExLDAsMCwwLDExNywxNiwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwKLSAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDExNyw4NiwwLDAsMCwKLSAgICA2NSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEwMSwzMiw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDc2LDExMSw5OSwxMDcsMzIsMTAxLDExMywxMTcsMTA1LDExOCw5NywxMDgsMTAxLDExMCwxMTYsMzIsCi0gICAgMTAyLDExMSwxMTQsMzIsODAsMTIxLDExNiwxMDQsMTExLDExMCwzMiw5OCwxMTcsMTA1LDEwOCwxMDAsCi0gICAgMTE1LDMyLDExOSwxMDUsMTE2LDEwNCwxMTEsMTE3LDExNiwxMCwzMiwzMiwzMiwzMiwxMDksMTE3LAotICAgIDEwOCwxMTYsMTA1LDQ1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTE1LDExNywKLSAgICAxMTIsMTEyLDExMSwxMTQsMTE2LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCwyLAorICAgIDEwMCw4LDAsODMsNDEsOSwyMTgsMTMsOTUsNzcsOTcsMTEwLDk3LDEwMywxMDEsODIsCisgICAgMTAxLDEwOCwxMTEsOTcsMTAwLDEyMiw2Myw3Nyw5NywxMTAsOTcsMTAzLDEwMSwxMTUsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTEyLDExMSwxMTUsMTE1LDEwNSw5OCwxMDgsMTAxLDMyLDk5LDEwOCwxMDEsOTcsCisgICAgMTEwLDQ1LDExNywxMTIsMzIsMTExLDEwMiwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsNDAsNDEsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsCisgICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsCisgICAgMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMCwwLDgzLDQxLDEsNzgsCisgICAgNDEsMSwyMTgsNSw5NSwxMTAsOTcsMTA5LDEwMSw0MSwyLDIxOCw0LDExNSwxMDEsMTA4LAorICAgIDEwMiwxMTQsNjcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDE0MSwKKyAgICAwLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIyLDk1LDc3LDk3LDExMCwKKyAgICA5NywxMDMsMTAxLDgyLDEwMSwxMDgsMTExLDk3LDEwMCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsCisgICAgOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMjUsMCwwLDAsMTI0LDAsMCwxMDYsCisgICAgMCwwLDExNiwxLDAsMTA2LDIsMCwxMDcsNiwwLDEyNCwwLDAsOTUsMywKKyAgICAwLDEwMCwwLDAsODMsNDEsMSw3OCw0MSw0LDExNCw3MCwwLDAsMCwxMTQsCisgICAgNywwLDAsMCwyMTgsNywxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMjE4LDEwLDk1LAorICAgIDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCw0MSwxLDExNCw3MSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgOSw5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDE0NCwwLDAsMCwxMTUsMiwKKyAgICAwLDAsMCwwLDEsMTIyLDIzLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLDEwMSwKKyAgICAxMDgsMTExLDk3LDEwMCw0Niw5NSw5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDcxLAorICAgIDAsMCwwLDExNSw4MCwwLDAsMCwxMTYsMCwwLDEwMCwxLDAsMTAwLDIsCisgICAgMCwxMzIsMCwwLDEyNCwxLDAsNjgsMTMxLDEsMCwxMzEsMSwwLDExNCw3NiwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMiwxMTQsNzYsMCwxMjEsMTcsMCwxMTYsMiwKKyAgICAwLDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDYxLDg3LDExMyw3NiwwLDQsCisgICAgMTE2LDUsMCwxMDcsMTAsMCwxMTQsNzIsMCwxLDEsMSw4OSwxMTMsNzYsMCwKKyAgICA4OCwxMTAsMCwwLDEwMCwwLDAsODMsNDEsMyw3OCw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwwLDAsMCwKKyAgICAxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLDAsMTI0LDEsCisgICAgMCwxMDAsMCwwLDEwNyw5LDAsODYsMSwxMTMsMywwLDEwMCwwLDAsODMsCisgICAgNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwyMTgsCisgICAgMyw5NywxMTQsMTAzLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDI1MCw5LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxNDgsMCwKKyAgICAwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiw0MSw5NSw3Nyw5NywxMTAsOTcsCisgICAgMTAzLDEwMSw4MiwxMDEsMTA4LDExMSw5NywxMDAsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LAorICAgIDk1LDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsCisgICAgMTIwLDExMiwxMTQsNjIsNDEsNiwyMTgsMyw5NywxMTAsMTIxLDExNCw3NCwwLDAsMCwKKyAgICAxMTQsNywwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LDcwLDAsMCwwLDIxOCwKKyAgICA4LDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsMTE0LDQxLDIsMTE0LDcxLDAsMCwwLAorICAgIDIxOCw0LDk3LDExNCwxMDMsMTE1LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCw4LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSwxNDcsCisgICAgMCwwLDAsMTE1LDEwLDAsMCwwLDAsMSwzNSwxLDMsMSwxNywxLAorICAgIDEzLDEsMTIyLDIyLDk1LDc3LDk3LDExMCw5NywxMDMsMTAxLDgyLDEwMSwxMDgsMTExLDk3LAorICAgIDEwMCw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNzgsNDEsNywxMTQsNTcsMCwKKyAgICAwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLAorICAgIDAsMTE0LDcyLDAsMCwwLDExNCw3NSwwLDAsMCwxMTQsODEsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDY5LDAsMCwwLDEzNywwLDAsMCwxMTUsOCwwLAorICAgIDAsMCwxMiwyLDYsMiwxMiwzLDEyLDMsMTE0LDY5LDAsMCwwLDk5LAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCisgICAgNjQsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwKKyAgICAwLDAsOTAsMiwwLDEwMCwxLDAsODMsNDEsMiwyMTgsMTQsOTUsNjgsMTAxLAorICAgIDk3LDEwMCwxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsNzgsNDEsMywxMTQsNTcsCisgICAgMCwwLDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsODIsMCwwLDAsMTYyLDAsMCwwLDExNSwyLDAsMCwwLDEyLAorICAgIDEsMTE0LDgyLDAsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsNjQsMCwwLDAsMTE1LDgyLDAsMCwwLAorICAgIDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsCisgICAgMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwKKyAgICAwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLAorICAgIDEzMiwwLDAsOTAsNiwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLAorICAgIDcsMCwxMDAsMTAsMCwxMDAsMTEsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTIsCisgICAgMCw4Myw0MSwxMywyMTgsMTEsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksCisgICAgMTA3LDEyMiwxNjksNjUsMzIsMTE0LDEwMSw5OSwxMTcsMTE0LDExNSwxMDUsMTE4LDEwMSwzMiwxMDgsCisgICAgMTExLDk5LDEwNywzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LAorICAgIDExMSwxMTAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMTUsMzIsOTcsOTgsMTA4LDEwMSwKKyAgICAzMiwxMTYsMTExLDMyLDEwMCwxMDEsMTE2LDEwMSw5OSwxMTYsMzIsMTAwLDEwMSw5NywxMDAsMTA4LAorICAgIDExMSw5OSwxMDcsMTE1LDEwLDMyLDMyLDMyLDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsMTE2LAorICAgIDEwNCwxMTQsMTAxLDk3LDEwMCwzMiw0OSwzMiwxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsCisgICAgMTExLDMyLDExNiw5NywxMDcsMTAxLDMyLDEwOCwxMTEsOTksMTA3LDExNSwzMiw2NSwzMiwxMTYsCisgICAgMTA0LDEwMSwxMTAsMzIsNjYsNDQsMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDExNCwxMDEsOTcsCisgICAgMTAwLDMyLDUwLDMyLDExNiwxMTQsMTIxLDEwNSwxMTAsMTAzLDMyLDExNiwxMTEsMTAsMzIsMzIsCisgICAgMzIsMzIsMTE2LDk3LDEwNywxMDEsMzIsMTA4LDExMSw5OSwxMDcsMTE1LDMyLDY2LDMyLDExNiwKKyAgICAxMDQsMTAxLDExMCwzMiw2NSw0MSw0NiwxMCwzMiwzMiwzMiwzMiw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw3MCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjQsCisgICAgMCwwLDk1LDIsMCwxMTYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMjQsMCwKKyAgICAwLDk1LDMsMCwxMjQsMSwwLDEyNCwwLDAsOTUsNCwwLDEwMCwwLDAsCisgICAgMTI0LDAsMCw5NSw1LDAsMTAwLDEsMCwxMjQsMCwwLDk1LDYsMCwxMDAsCisgICAgMSwwLDEyNCwwLDAsOTUsNywwLDEwMCwwLDAsODMsNDEsMiw3OCwyMzMsCisgICAgMCwwLDAsMCw0MSw4LDIxOCw3LDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsOTAsCisgICAgMTMsOTcsMTA4LDEwOCwxMTEsOTksOTcsMTE2LDEwMSw5NSwxMDgsMTExLDk5LDEwNywyMTgsNCwKKyAgICAxMDgsMTExLDk5LDEwNywyMTgsNiwxMTksOTcsMTA3LDEwMSwxMTcsMTEyLDExNCw2NywwLDAsCisgICAgMCwyMTgsNSwxMTEsMTE5LDExMCwxMDEsMTE0LDIxOCw1LDk5LDExMSwxMTcsMTEwLDExNiwyMTgsCisgICAgNywxMTksOTcsMTA1LDExNiwxMDEsMTE0LDExNSw0MSwyLDExNCw3MSwwLDAsMCwxMTQsCisgICAgNjcsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDcyLDAsMCwwLDE3MiwwLDAsMCwxMTUsMTIsMCwwLAorICAgIDAsMCwxLDE1LDEsMTUsMSw5LDEsOSwxLDksMSwxMjIsMjAsOTUsCisgICAgNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LAorICAgIDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwKKyAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSw4OCwwLDAsMCwxMTYsMCwwLAorICAgIDEwNiwxLDAsMTMxLDAsMCwxMjUsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMjUsCisgICAgMiwwLDEyMCw2MCwwLDExNiwzLDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLAorICAgIDAsMTI1LDMsMCwxMjQsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsNTUsMCwKKyAgICAxMDAsMSwwLDgzLDEyNCwzLDAsMTA2LDIsMCwxMjUsMiwwLDEyNCwyLDAsCisgICAgMTI0LDEsMCwxMDcsMiwwLDExNCwyNCwwLDEwMCwyLDAsODMsMTEzLDI0LDAsCisgICAgODcsMTAwLDAsMCw4Myw0MSwzLDc4LDcwLDg0LDQxLDUsMTE0LDg1LDAsMCwKKyAgICAwLDIxOCw5LDEwMywxMDEsMTE2LDk1LDEwNSwxMDAsMTAxLDExMCwxMTYsMTE0LDg4LDAsMCwKKyAgICAwLDIxOCwxMiw5NSw5OCwxMDgsMTExLDk5LDEwNywxMDUsMTEwLDEwMyw5NSwxMTEsMTEwLDIxOCwKKyAgICAzLDEwMywxMDEsMTE2LDQxLDQsMTE0LDcxLDAsMCwwLDIxOCwyLDEwOSwxMDEsMjE4LAorICAgIDMsMTE2LDEwNSwxMDAsMTE0LDg2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMiwxMDQsOTcsMTE1LDk1LDEwMCwxMDEsCisgICAgOTcsMTAwLDEwOCwxMTEsOTksMTA3LDE4MCwwLDAsMCwxMTUsMTgsMCwwLDAsMCwKKyAgICAyLDEyLDEsOSwxLDMsMSwxNSwxLDEyLDEsNCwxLDksMSwxMiwKKyAgICAxLDEyMiwyNCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsMTA0LAorICAgIDk3LDExNSw5NSwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNyw5OSwxLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwxNiwwLDAsMCw2NywwLDAsMCwKKyAgICAxMTUsMjE1LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEyNSwxLAorICAgIDAsMTI0LDAsMCwxMTYsMiwwLDEyNCwxLDAsNjAsMTIyLDE3OCwwLDEyMCwxNzEsCisgICAgMCwxMjQsMCwwLDEwNiwzLDAsMTQzLDEzMCwwLDEsMTI0LDAsMCwxMDYsNCwKKyAgICAwLDEwMCwxLDAsMTA3LDIsMCwxMTUsNjgsMCwxMjQsMCwwLDEwNiw1LDAsCisgICAgMTI0LDEsMCwxMDcsMiwwLDExNCw5NiwwLDEyNCwxLDAsMTI0LDAsMCw5NSwKKyAgICA1LDAsMTI0LDAsMCw0LDEwNiw0LDAsMTAwLDIsMCw1NSwyLDk1LDQsCisgICAgMCwxMDAsMywwLDgzLDEyNCwwLDAsMTA2LDYsMCwxMzEsMCwwLDExNCwxMjcsCisgICAgMCwxMTYsNywwLDEwMCw0LDAsMTI0LDAsMCwyMiwxMzEsMSwwLDEzMCwxLAorICAgIDAsMTEwLDAsMCwxMjQsMCwwLDEwNiw4LDAsMTA2LDksMCwxMDAsNSwwLAorICAgIDEzMSwxLDAsMTE0LDE2MywwLDEyNCwwLDAsNCwxMDYsMTAsMCwxMDAsMiwwLAorICAgIDU1LDIsOTUsMTAsMCwxMTAsMCwwLDg3LDEwMCw2LDAsODEsODgsMTI0LDAsCisgICAgMCwxMDYsOCwwLDEwNiw5LDAsMTMxLDAsMCwxLDEyNCwwLDAsMTA2LDgsCisgICAgMCwxMDYsMTEsMCwxMzEsMCwwLDEsMTEzLDI4LDAsODcsODcsMTAwLDYsMCwKKyAgICAxMTYsMiwwLDEyNCwxLDAsNjEsODgsMTAwLDYsMCw4Myw0MSw3LDEyMiwxODUsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNjUsOTksMTEzLDExNywxMDUsMTE0LDEwMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywKKyAgICA0NiwzMiwzMiw3MywxMDIsMzIsOTcsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LAorICAgIDEwOCwzMiwxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDEwMCwxMDEsCisgICAgMTE2LDEwMSw5OSwxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA5NywzMiw5NSw2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwKKyAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsNzksMTE2LDEwNCwxMDEsMTE0LDExOSwxMDUsMTE1LDEwMSw0NCwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDUsMTE1LDMyLDk3LDEwOCwxMTksOTcsMTIxLAorICAgIDExNSwzMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDEwMCwzMiw5NywxMTAsMTAwLDMyLDg0LAorICAgIDExNCwxMTcsMTAxLDMyLDEwNSwxMTUsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTAxLDEwMCw0NiwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsODQsMCwwLDAsMTE0LDI5LAorICAgIDAsMCwwLDg0LDEyMiwyMywxMDAsMTAxLDk3LDEwMCwxMDgsMTExLDk5LDEwNywzMiwxMDAsCisgICAgMTAxLDExNiwxMDEsOTksMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDM3LDExNCw3MCw3OCw0MSwKKyAgICAxMiwxMTQsODUsMCwwLDAsMTE0LDkxLDAsMCwwLDExNCw5MiwwLDAsMCwKKyAgICAxMTQsODYsMCwwLDAsMTE0LDg5LDAsMCwwLDExNCw4OCwwLDAsMCwxMTQsCisgICAgOTYsMCwwLDAsMTE0LDgyLDAsMCwwLDExNCw4NywwLDAsMCwyMTgsNywKKyAgICA5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNCw5MCwwLDAsMCwyMTgsNywxMTQsMTAxLAorICAgIDEwOCwxMDEsOTcsMTE1LDEwMSw0MSwyLDExNCw3MSwwLDAsMCwxMTQsOTUsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDk3LDAsMCwwLDE5MiwwLDAsMCwxMTUsMzIsMCwwLDAsMCw2LAorICAgIDEyLDEsMTAsMSwzLDEsMywxLDEwLDEsMzAsMSw5LDEsMTUsMSwKKyAgICA0LDEsMTIsMSwxOSwxLDE4LDEsMjQsMiwxMywxLDIxLDIsMTIyLDE5LAorICAgIDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0Niw5Nyw5OSwxMTMsMTE3LAorICAgIDEwNSwxMTQsMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLAorICAgIDEwLDAsMCwwLDY3LDAsMCwwLDExNSwxNjUsMCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsMSwwLDEzMSwwLDAsMTI1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTQzLAorICAgIDEzOCwwLDEsMTI0LDAsMCwxMDYsMywwLDEyNCwxLDAsMTA3LDMsMCwxMTQsCisgICAgNTIsMCwxMTYsNCwwLDEwMCwxLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLAorICAgIDAsMTI0LDAsMCwxMDYsNSwwLDEwMCwyLDAsMTA3LDQsMCwxMTUsNzMsMCwKKyAgICAxMTYsNiwwLDEzMCwxLDAsMTI0LDAsMCw0LDEwNiw1LDAsMTAwLDMsMCwKKyAgICA1NiwyLDk1LDUsMCwxMjQsMCwwLDEwNiw1LDAsMTAwLDIsMCwxMDcsMiwKKyAgICAwLDExNCwxNTUsMCwxMDAsMCwwLDEyNCwwLDAsOTUsMywwLDEyNCwwLDAsCisgICAgMTA2LDcsMCwxMTQsMTU1LDAsMTI0LDAsMCw0LDEwNiw3LDAsMTAwLDMsMCwKKyAgICA1NiwyLDk1LDcsMCwxMjQsMCwwLDEwNiw4LDAsMTA2LDksMCwxMzEsMCwKKyAgICAwLDEsMTEzLDE1NSwwLDExMCwwLDAsODcsMTAwLDAsMCw4MSw4OCwxMDAsMCwKKyAgICAwLDgzLDQxLDQsNzgsMTIyLDMxLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTQsMTAxLAorICAgIDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsMTEwLDQ1LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsCisgICAgMTAwLDMyLDEwOCwxMTEsOTksMTA3LDExNCw4NCwwLDAsMCwxMTQsMjksMCwwLDAsCisgICAgNDEsMTAsMTE0LDg1LDAsMCwwLDExNCw5MSwwLDAsMCwxMTQsODYsMCwwLAorICAgIDAsMTE0LDg4LDAsMCwwLDIxOCwxMiw4MiwxMTcsMTEwLDExNiwxMDUsMTA5LDEwMSw2OSwKKyAgICAxMTQsMTE0LDExMSwxMTQsMTE0LDg5LDAsMCwwLDIxOCwxNCw2NSwxMTUsMTE1LDEwMSwxMTQsCisgICAgMTE2LDEwNSwxMTEsMTEwLDY5LDExNCwxMTQsMTExLDExNCwxMTQsOTAsMCwwLDAsMTE0LDg3LAorICAgIDAsMCwwLDExNCw5OCwwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsCisgICAgOTUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDk4LDAsMCwwLDIxNywwLDAsMCwxMTUsMjIsMCwwLAorICAgIDAsMCwxLDEyLDEsMTAsMSwxNSwxLDE1LDEsMjEsMSwxNSwxLDE1LAorICAgIDEsOSwxLDksMSwxNSwxLDEyMiwxOSw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDc2LDExMSw5OSwxMDcsNDYsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDEsMCwwLDAsNCwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMjUsMCwwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LAorICAgIDEsMCwxMTYsMiwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMiwwLDgzLDQxLAorICAgIDIsNzgsMTIyLDIzLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0MCwKKyAgICAxMjMsMzMsMTE0LDEyNSw0MSwzMiw5NywxMTYsMzIsMTIzLDEyNSw0MSwzLDExNCw0NywwLAorICAgIDAsMCwxMTQsNjcsMCwwLDAsMTE0LDQ4LDAsMCwwLDQxLDEsMTE0LDcxLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCw4LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSwyMzAsMCwwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwxLDEyMiwyMCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDc2LDExMSw5OSwxMDcsNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQxLDksCisgICAgMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LAorICAgIDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsOTYsMCwwLDAsMTE0LDk3LAorICAgIDAsMCwwLDExNCw5OCwwLDAsMCwxMTQsMTAxLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw4MywwLDAsMCwxNjYsMCwwLDAsMTE1LDEyLDAsMCwwLDEyLAorICAgIDQsNiwyLDEyLDgsMTIsMTIsMTIsMjUsMTIsMTMsMTE0LDgzLDAsMCwwLAorICAgIDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLAorICAgIDAsNjQsMCwwLDAsMTE1LDcwLDAsMCwwLDEwMSwwLDAsOTAsMSwwLAorICAgIDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLAorICAgIDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsCisgICAgMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLAorICAgIDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCw4MywKKyAgICA0MSwxMSwyMTgsMTYsOTUsNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNzYsMTExLDk5LDEwNywxMjIsODYsNjUsMzIsMTE1LDEwNSwxMDksMTEyLDEwOCwxMDEsMzIsOTUsCisgICAgNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDMyLDEwMSwxMTMsMTE3LDEwNSwxMTgsCisgICAgOTcsMTA4LDEwMSwxMTAsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsCisgICAgMzIsOTgsMTE3LDEwNSwxMDgsMTAwLDExNSwzMiwxMTksMTA1LDExNiwxMDQsMTExLDExNywxMTYsMTAsCisgICAgMzIsMzIsMzIsMzIsMTA5LDExNywxMDgsMTE2LDEwNSw0NSwxMTYsMTA0LDExNCwxMDEsOTcsMTAwLAorICAgIDEwNSwxMTAsMTAzLDMyLDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiw0Niw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwyMiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwKKyAgICAxLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MSwyLDc4LDExNCwKKyAgICA4NCwwLDAsMCw0MSwyLDExNCw2NywwLDAsMCwxMTQsODksMCwwLDAsCisgICAgNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3MiwwLDAsMCwKKyAgICAyMzgsMCwwLDAsMTE1LDQsMCwwLDAsMCwxLDksMSwxMjIsMjUsOTUsCisgICAgNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwKKyAgICA5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDEsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTksMCwKKyAgICAwLDAsMTI0LDAsMCw0LDEwNiwwLDAsMTAwLDEsMCw1NSwyLDk1LDAsCisgICAgMCwxMDAsMiwwLDgzLDQxLDMsNzgsMTE0LDI5LDAsMCwwLDg0LDQxLDEsCisgICAgMTE0LDg5LDAsMCwwLDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw5NywwLDAsMCwKKyAgICAyNDIsMCwwLDAsMTE1LDQsMCwwLDAsMCwxLDE1LDEsMTIyLDI0LDk1LAorICAgIDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsNDYsCisgICAgOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSw0OSwwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwzMCwwLAorICAgIDExNiwxLDAsMTAwLDIsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsCisgICAgMCwwLDQsMTA2LDAsMCwxMDAsMywwLDU2LDIsOTUsMCwwLDEwMCwwLAorICAgIDAsODMsNDEsNCw3OCwxMTQsODQsMCwwLDAsMTIyLDMxLDk5LDk3LDExMCwxMTAsCisgICAgMTExLDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsMTEwLDQ1LDk3LDk5LAorICAgIDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDExNCwyOSwwLDAsMCwKKyAgICA0MSwyLDExNCw4OSwwLDAsMCwxMTQsOTksMCwwLDAsNDEsMSwxMTQsNzEsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDk4LDAsMCwwLDI0NiwwLDAsMCwxMTUsNiwwLDAsMCwKKyAgICAwLDEsMTUsMSwxNSwxLDEyMiwyNCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDQsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDI1LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwKKyAgICAxMjQsMCwwLDEwNiwxLDAsMTE2LDIsMCwxMjQsMCwwLDEzMSwxLDAsMTMxLAorICAgIDIsMCw4Myw0MSwyLDc4LDEyMiwyOCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQwLDEyMywzMywxMTQsMTI1LDQxLDMyLDk3LAorICAgIDExNiwzMiwxMjMsMTI1LDQxLDMsMTE0LDQ3LDAsMCwwLDExNCw2NywwLDAsMCwKKyAgICAxMTQsNDgsMCwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMSwwLDAsMCwKKyAgICAyNTEsMCwwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyNSw5NSw2OCwxMTcsCisgICAgMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LAorICAgIDExNCwxMDEsMTEyLDExNCw5NSw5NSw3OCw0MSw4LDExNCw1NywwLDAsMCwxMTQsNTYsCisgICAgMCwwLDAsMTE0LDU4LDAsMCwwLDExNCw1OSwwLDAsMCwxMTQsNzIsMCwKKyAgICAwLDAsMTE0LDk3LDAsMCwwLDExNCw5OCwwLDAsMCwxMTQsMTAxLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwxMDIsMCwwLDAsMjM0LDAsMCwwLDExNSwxMCwKKyAgICAwLDAsMCwxMiwyLDYsMiwxMiw0LDEyLDQsMTIsNSwxMTQsMTAyLDAsCisgICAgMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsCisgICAgMCwwLDAsNjQsMCwwLDAsMTE1LDUyLDAsMCwwLDEwMSwwLDAsOTAsCisgICAgMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwKKyAgICAwLDkwLDMsMCwxMDAsMywwLDEwMCw0LDAsMTMyLDAsMCw5MCw0LDAsCisgICAgMTAwLDUsMCwxMDAsNiwwLDEzMiwwLDAsOTAsNSwwLDEwMCw3LDAsODMsCisgICAgNDEsOCwyMTgsMTgsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDc3LAorICAgIDk3LDExMCw5NywxMDMsMTAxLDExNCw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKICAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwyMiwwLDAsMCwKLSAgICAxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwxLDAsMTI0LDAsMCw5NSwKLSAgICAxLDAsMTAwLDAsMCw4Myw0MCwyLDAsMCwwLDc4LDEwNSwwLDAsMCwKLSAgICAwLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LAotICAgIDUsMCwwLDAsOTksMTExLDExNywxMTAsMTE2LDQwLDIsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDI0NywwLDAsMCwxMTUsNCwwLAotICAgIDAsMCwwLDEsOSwxLDExNywyNSwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwKLSAgICAxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDEwNSwxMTAsCi0gICAgMTA1LDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsCi0gICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxOSwwLDAsMCwxMjQsMCwKLSAgICAwLDQsMTA2LDAsMCwxMDAsMSwwLDU1LDIsOTUsMCwwLDEwMCwyLDAsCi0gICAgODMsNDAsMywwLDAsMCw3OCwxMDUsMSwwLDAsMCw4NCw0MCwyLDAsCi0gICAgMCwwLDExNyw1LDAsMCwwLDk5LDExMSwxMTcsMTEwLDExNiwxMTcsNCwwLDAsCi0gICAgMCw4NCwxMTQsMTE3LDEwMSw0MCwxLDAsMCwwLDExNyw0LDAsMCwwLDExNSwKLSAgICAxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICA3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMjUxLDAsMCwwLDExNSwKLSAgICA0LDAsMCwwLDAsMSwxNSwxLDExNywyNCwwLDAsMCw5NSw2OCwxMTcsCi0gICAgMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk3LDk5LAotICAgIDExMywxMTcsMTA1LDExNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKLSAgICAwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNDksMCwwLDAsMTI0LAotICAgIDAsMCwxMDYsMCwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMzAsMCwxMTYsMSwKLSAgICAwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwKLSAgICA0LDEwNiwwLDAsMTAwLDMsMCw1NiwyLDk1LDAsMCwxMDAsMCwwLDgzLAotICAgIDQwLDQsMCwwLDAsNzgsMTA1LDAsMCwwLDAsMTE3LDMxLDAsMCwwLAotICAgIDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTcsCi0gICAgMTEwLDQ1LDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTAwLDMyLDEwOCwxMTEsOTksMTA3LDEwNSwKLSAgICAxLDAsMCwwLDQwLDIsMCwwLDAsMTE3LDUsMCwwLDAsOTksMTExLAotICAgIDExNywxMTAsMTE2LDExNywxMiwwLDAsMCw4MiwxMTcsMTEwLDExNiwxMDUsMTA5LDEwMSw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywKLSAgICAwLDAsMCwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwyNTUsMCwwLDAsMTE1LDYsCi0gICAgMCwwLDAsMCwxLDE1LDEsMTUsMSwxMTcsMjQsMCwwLDAsOTUsNjgsCi0gICAgMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw0NiwxMTQsCi0gICAgMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKLSAgICAwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwyMywwLDAsMCwKLSAgICAxMDAsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMTYsMSwwLDEyNCwwLDAsMTMxLAotICAgIDEsMCwxMDIsMiwwLDIyLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDI2LDAsCi0gICAgMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKLSAgICA5OSwxMDcsNDAsMzcsMTE0LDQxLDMyLDk3LDExNiwzMiwzNywxMDAsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMiwwLDAsMCwxMDUsCi0gICAgMTAwLDQwLDEsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQsMSwwLDAsMTE1LDIsMCwwLAotICAgIDAsMCwxLDExNywyNSwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSwKLSAgICA5NSw3OCw0MCw4LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LAotICAgIDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDcsMCwKLSAgICAwLDAsOTcsOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsNywwLDAsMCwxMTQsMTAxLAotICAgIDEwOCwxMDEsOTcsMTE1LDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDc2LDExMSw5OSwxMDcsMjQzLDAsMCwwLDExNSwxMCwwLDAsMCwKLSAgICAxNiwyLDYsMiwxMiw0LDEyLDQsMTIsNSwxMTcsMTYsMCwwLDAsOTUsCi0gICAgNjgsMTE3LDEwOSwxMDksMTIxLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw5OSwKLSAgICAxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCwKLSAgICAzLDAsMCwwLDExNSwxNDIsMCwwLDAsMTAwLDMsMCwxMjUsMSwwLDEyMSwKLSAgICAxNywwLDExNiwxLDAsMTM2LDAsMCwyNSwxMzEsMCwwLDEyNSwxLDAsODcsCi0gICAgMTEwLDE4LDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLAotICAgIDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMywwLDEwNyw4LDAsMTE0LDEzOCwKLSAgICAwLDExNiwzLDAsMTAwLDMsMCwxMDcsOCwwLDExNCw4MywwLDExNiw0LDAsCi0gICAgMTM2LDAsMCwxMzEsMSwwLDEyNSwxLDAsMTEwLDEyLDAsMTE2LDUsMCwxMzYsCi0gICAgMCwwLDEzMSwxLDAsMTI1LDEsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDIsMCwxMTYsNiwwLDEwNiw3LDAsCi0gICAgMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTE2LDEsMCwxMzYsMCwwLDYwLAotICAgIDExMCwwLDAsMTI0LDEsMCw4Myw0MCw0LDAsMCwwLDExNywxMDksMCwwLAotICAgIDAsNzEsMTAxLDExNiwzMiwxMTEsMTE0LDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsCi0gICAgMTExLDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsCi0gICAgMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LAotICAgIDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNiw5NywxMDcsMTAxLDExMCw0Niw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDE5LAotICAgIDAsMCwwLDExNSwxMSwwLDAsMCwxMTYsMCwwLDEzNiwwLDAsNjEsMTAwLAotICAgIDAsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLDEsMCwwLDAsMTE3LDEzLAotICAgIDAsMCwwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNSwKLSAgICA0MCwxLDAsMCwwLDExNywxLDAsMCwwLDk1LDQwLDEsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDIsMCwwLDAsOTksOTgsMjQsMSwwLDAsMTE1LDIsMCwwLDAsCi0gICAgMCwxLDExNywyOCwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNyw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsCi0gICAgNDYsOTksOTgsNzgsNDAsOCwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsCi0gICAgMTEwLDEwMSwxMTcsMTMsMCwwLDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LAotICAgIDExMSw5OSwxMDcsMTE1LDExNyw4LDAsMCwwLDc1LDEwMSwxMjEsNjksMTE0LDExNCwxMTEsCi0gICAgMTE0LDExNyw3LDAsMCwwLDk1LDExNiwxMDQsMTE0LDEwMSw5NywxMDAsMTE3LDE2LDAsCi0gICAgMCwwLDk1LDY4LDExNywxMDksMTA5LDEyMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSwKLSAgICA5OSwxMDcsMTE3LDExLDAsMCwwLDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLAotICAgIDk5LDEwNywxMTcsOCwwLDAsMCw5NSwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiwxMTcsCi0gICAgMywwLDAsMCwxMTQsMTAxLDEwMiw0MCwzLDAsMCwwLDExNyw0LDAsMCwKLSAgICAwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDEwOCwxMTEsOTksMTA3LDExNywyLAotICAgIDAsMCwwLDk5LDk4LDQwLDAsMCwwLDAsNDAsMSwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSwKLSAgICA5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwwLDk1LAotICAgIDEwMywxMDEsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDEwLAotICAgIDEsMCwwLDExNSwyNCwwLDAsMCwwLDQsNiwxLDMsMSwxNywxLAotICAgIDEzLDEsNSwxLDEyLDEsMTIsMSwxNSwyLDEyLDEsMTgsMiwyNSwxLAotICAgIDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDgsMTExLDk5LDEwNyw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLAotICAgIDAsMCwxMSwwLDAsMCw2NywwLDAsMCwxMTUsNzEsMCwwLDAsMTE2LAotICAgIDAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDEsMCwxMTYsMSwwLDEwNiwyLAotICAgIDAsMTMxLDAsMCwxLDEyMSwxNCwwLDEyNCwxLDAsMTA2LDMsMCwxMzEsMCwKLSAgICAwLDEsODcsMTEwLDE4LDAsNCwxMTYsNCwwLDEwNywxMCwwLDExNCw1NiwwLAotICAgIDEsMSwxLDg5LDExMCwxMSwwLDg4LDEyNCwxLDAsMTA2LDUsMCwxMzEsMCwKLSAgICAwLDEsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywyMSwxLDAsMCwKLSAgICA4MiwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwMywxMDgsMTExLDk4LAotICAgIDk3LDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDgsMTExLDk5LDEwNyw0NCwzMiwKLSAgICA5NywxMTAsMTAwLDMyLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLAotICAgIDExMCwzMiwxMTQsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsMTExLAotICAgIDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLAotICAgIDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwxMTUsMTE3LDExNCwKLSAgICAxMDEsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5OSwxMTEsCi0gICAgMTA5LDExMiwxMDgsMTAxLDExNiwxMDEsMTA4LDEyMSwzMiwxMDUsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwKLSAgICAxMDUsMTIyLDEwMSwxMDAsNDQsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwKLSAgICAzMiwxMDEsMTE4LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTYsMzIsMTA1LDExNSwzMiw5OCwxMDEsMTA1LAotICAgIDExMCwxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTcsCi0gICAgMTEwLDExMSwxMTYsMTA0LDEwMSwxMTQsMzIsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCw0NiwxMCwxMCwKKyAgICAxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwwLDAsMTI0LDAsMCw5NSwKKyAgICAxLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLDIsMTE0LDcwLDAsMCwwLAorICAgIDIxOCw1LDk1LDEwOCwxMTEsOTksMTA3LDQxLDIsMTE0LDcxLDAsMCwwLDExNCw2NywKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsNzIsMCwwLDAsMSwxLDAsMCwxMTUsNCwwLDAsMCwKKyAgICAwLDEsOSwxLDEyMiwyNyw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LDExMSw5OSwKKyAgICAxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSwKKyAgICA5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwxMCwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsNTMsMCwwLDAsMTIyLDIyLDAsMTE2LDAsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCwxMjQsMCwwLDk1LDIsMCwKKyAgICA4NywxMDAsMCwwLDExNiwzLDAsMTA2LDQsMCwxMzEsMCwwLDEsODgsMTI0LAorICAgIDAsMCwxMDYsMiwwLDEwNiw1LDAsMTMxLDAsMCwxLDEwMCwwLDAsODMsCisgICAgNDEsMSw3OCw0MSw2LDIxOCwxNiw5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsCisgICAgMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTQsNzAsMCwwLDAsMTE0LDEwNCwwLDAsCisgICAgMCwyMTgsNCw5NSwxMDUsMTA5LDExMiwyMTgsMTIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsCisgICAgOTUsMTA4LDExMSw5OSwxMDcsMTE0LDk3LDAsMCwwLDQxLDEsMTE0LDcxLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCw3NSwwLDAsMCw1LDEsMCwwLDExNSw4LDAsMCwwLDAsMSwKKyAgICAzLDEsMjIsMiwxMSwxLDEyMiwyOCw5NSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDc2LAorICAgIDExMSw5OSwxMDcsNzcsOTcsMTEwLDk3LDEwMywxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMTAsMTE2LAorICAgIDEwMSwxMTQsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLAorICAgIDAsMSwwLDAsMCw3OSwwLDAsMCwxMTUsMTcsMCwwLDAsMTI0LDAsCisgICAgMCwxMDYsMCwwLDEwNiwxLDAsMTMxLDAsMCwxLDEwMCwwLDAsODMsNDEsCisgICAgMSw3OCw0MSwyLDExNCwxMDQsMCwwLDAsMTE0LDk4LDAsMCwwLDQxLDMsCisgICAgMTE0LDcxLDAsMCwwLDExNCw4MCwwLDAsMCwyMTgsNiwxMDcsMTE5LDk3LDExNCwKKyAgICAxMDMsMTE1LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCw4MSwwLDAsMCwxMiwxLDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDEsMTIyLDI3LDk1LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsNzYsMTExLDk5LDEwNyw3Nyw5NywKKyAgICAxMTAsOTcsMTAzLDEwMSwxMTQsNDYsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LDk1LDc4LDQxLAorICAgIDYsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsCisgICAgMTE0LDcyLDAsMCwwLDExNCw3NSwwLDAsMCwxMTQsODEsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDEwMywwLDAsMCwyNTUsMCwwLDAsMTE1LDYsMCwwLAorICAgIDAsMTIsMiwxMiw0LDEyLDcsMTE0LDEwMywwLDAsMCw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMywwLDAsMCwxMSwwLDAsMCwzLDAsMCwKKyAgICAwLDExNSwxNDIsMCwwLDAsMTAwLDEsMCwxMjUsMSwwLDEyMSwxNywwLDExNiwKKyAgICAwLDAsMTM2LDAsMCwyNSwxMzEsMCwwLDEyNSwxLDAsODcsMTEwLDE4LDAsCisgICAgNCwxMTYsMSwwLDEwNywxMCwwLDExNCw0MywwLDEsMSwxLDg5LDExMCwxLAorICAgIDAsODgsMTI0LDEsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDEzOCwwLDExNiwyLAorICAgIDAsMTAwLDEsMCwxMDcsOCwwLDExNCw4MywwLDExNiwzLDAsMTM2LDAsMCwKKyAgICAxMzEsMSwwLDEyNSwxLDAsMTEwLDEyLDAsMTE2LDQsMCwxMzYsMCwwLDEzMSwKKyAgICAxLDAsMTI1LDEsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDIsMCwxMDAsMywKKyAgICAwLDEzNCwwLDAsMTI1LDIsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDEsMCwKKyAgICAxMjQsMiwwLDEzMSwyLDAsMTE2LDAsMCwxMzYsMCwwLDYwLDExMCwwLDAsCisgICAgMTI0LDEsMCw4Myw0MSw0LDEyMiwxMDksNzEsMTAxLDExNiwzMiwxMTEsMTE0LDMyLDk5LAorICAgIDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAzMiwxMDgsMTExLDk5LDEwNywzMiwxMDIsMTExLDExNCwzMiw5NywzMiwxMDMsMTA1LDExOCwxMDEsCisgICAgMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDEwLDEwLAogICAgIDMyLDMyLDMyLDMyLDgzLDEwNCwxMTEsMTE3LDEwOCwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLAogICAgIDk4LDEwMSwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwKICAgICAxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNiwKLSAgICA5NywxMDcsMTAxLDExMCw0Niw3OCw0MCw2LDAsMCwwLDExNywxNiwwLDAsMCwKLSAgICA5NSwxMDMsMTAxLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywKLSAgICAxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE3LDcsMCwwLDAsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSwxMTcsMTQsMCwwLDAsOTUsNjgsMTAxLDk3LDEwMCwKLSAgICAxMDgsMTExLDk5LDEwNyw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLDAsMTE0LDEwMSwKLSAgICAxMDgsMTAxLDk3LDExNSwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMDgsMTExLDk5LDEwNyw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOSwwLDAsMCw5NSwxMDgsMTExLAotICAgIDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDI5LDEsMCwwLDExNSwxNCwwLDAsMCwwLDcsMTIsMSwxMCwxLDMsCi0gICAgMSwxNCwxLDEzLDMsNSwyLDExNywxOSwwLDAsMCw5NSwxMDgsMTExLDk5LAotICAgIDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LAotICAgIDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCi0gICAgNzksMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsCi0gICAgMiwwLDE0MiwwLDAsODMsNDAsMSwwLDAsMCwxMTcsNDYsMSwwLDAsCi0gICAgMTE0LDEwMSwxMDksMTExLDExOCwxMDEsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDEwNSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsNDYsOTksMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk3LDEwOCwxMTksOTcsMTIxLDExNSwzMiwKLSAgICAxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwzMiwxMTUsMTAxLDExMywxMTcsMTAxLDExMCw5OSwxMDEsMTE1LAotICAgIDEwLDMyLDMyLDMyLDMyLDExMSwxMDIsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCwzMiwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwMSwxMTAsCi0gICAgMTAwLDMyLDExOSwxMDUsMTE2LDEwNCwzMiw5NywzMiw5OSw5NywxMDgsMTA4LDMyLDExNiwxMTEsCi0gICAgMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwNSwxMTYsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSwKLSAgICA5NywxMDAsMzIsMTExLDEwMiwzMiw5NywzMiwxMTAsMTExLDExNCwxMDksOTcsMTA4LDMyLDk5LAotICAgIDk3LDEwOCwxMDgsMzIsMTA1LDExMCwzMiwxMTIsMTA4LDk3LDk5LDEwMSwxMTUsMzIsMTE5LDEwNCwKLSAgICAxMDEsMTE0LDEwMSwzMiwxMDUsMTEwLDk5LDEwOCwxMTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMTAsMzIsMzIsMzIsMzIsCi0gICAgMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDExNiwxMTQsMTExLDEwMCwxMTcsOTksMTAxLAotICAgIDExNSwzMiwxMTcsMTEwLDExOSw5NywxMTAsMTE2LDEwMSwxMDAsMzIsMTEwLDExMSwxMDUsMTE1LDEwMSwKLSAgICAzMiwxMDUsMTEwLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE2LDExNCw5Nyw5OSwxMDEsOTgsCi0gICAgOTcsOTksMTA3LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDEwMSwKLSAgICAxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMCwxMDMsMTAsMzIsMzIsMzIsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDEsMTAsMzIsMzIsMzIsMzIsNDAsMCwKLSAgICAwLDAsMCw0MCwzLDAsMCwwLDExNywxLDAsMCwwLDEwMiwxMTcsNCwKLSAgICAwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNCwwLDAsMCwxMDcsMTE5LDEwMCwxMTUsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjUsMCwwLAotICAgIDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksCi0gICAgMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsNDksMSwwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCw4LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LAotICAgIDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwKLSAgICAxMTgsMTAxLDEwMCwxMDUsMTU4LDEyLDAsMCwxMTcsMSwwLDAsMCwxMywxMDUsMTYsCi0gICAgMCwwLDAsMTE3LDEsMCwwLDAsMTAsMTA1LDI0LDAsMCwwLDk5LDEsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsOTksCi0gICAgMCwwLDAsMTE1LDI5LDAsMCwwLDEyNCwwLDAsOTMsMTksMCwxMjUsMSwKLSAgICAwLDExNiwwLDAsMTI0LDEsMCw2MywxMDAsMCwwLDY0LDg2LDEsMTEzLDMsCi0gICAgMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTA1LDI1NSwwLDAsMCw3OCwKLSAgICA0MCwxLDAsMCwwLDExNywxNywwLDAsMCw5NSw4Miw2NSw4Nyw5NSw3NywKLSAgICA2NSw3MSw3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4Miw0MCwyLDAsMCwwLAotICAgIDExNywyLDAsMCwwLDQ2LDQ4LDExNywxLDAsMCwwLDExMCw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywKLSAgICAxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxNTAsMSwwLDAsMTE1LDIsMCwwLDAsCi0gICAgNiwwLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwKLSAgICAxMDUsMCwwLDAsMCwxMDUsMjUsMCwwLDAsMTA1LDgsMCwwLDAsMTE3LAotICAgIDExLDAsMCwwLDk1LDk1LDExMiwxMjEsOTksOTcsOTksMTA0LDEwMSw5NSw5NSwxMTcsCi0gICAgMywwLDAsMCw0NiwxMTIsMTIxLDExNyw0LDAsMCwwLDQ2LDExMiwxMjEsOTksCi0gICAgMTE3LDQsMCwwLDAsNDYsMTEyLDEyMSwxMTEsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDExLDAsMCwwLDYsMCwwLDAsNjcsMCwwLDAsMTE1LDE4MCwKLSAgICAwLDAsMCwxMjQsMSwwLDEwMCw1LDAsMTA3LDgsMCwxMTQsMjUsMCwxMTYsCi0gICAgMSwwLDEwNiwyLDAsMTA2LDMsMCwxMiwxMTAsMywwLDEyNCwxLDAsMTI1LAotICAgIDIsMCwxMjQsMiwwLDExNCw0NiwwLDExNiw0LDAsMTI1LDMsMCwxMTAsNiwKLSAgICAwLDExNiw1LDAsMTI1LDMsMCwxMTYsNiwwLDEyNCwwLDAsMTMxLDEsMCwKLSAgICA5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEyNCw1LDAsMTA2LDcsMCwxMDAsCi0gICAgMSwwLDEzMSwxLDAsOTIsMywwLDEyNSw2LDAsMTI1LDcsMCwxMjUsOCwKLSAgICAwLDExNiwxLDAsMTA2LDgsMCwxMDYsOSwwLDEyNSw5LDAsMTI0LDksMCwKLSAgICAxMDAsNSwwLDEwNyw4LDAsMTE0LDEzMywwLDExNiwxMCwwLDEwMCwyLDAsMTMxLAotICAgIDEsMCwxMzAsMSwwLDExMCwwLDAsMTAwLDMsMCwxMDYsMTEsMCwxMjQsNiwKLSAgICAwLDEyNCw3LDAsMTI0LDksMCwxMjQsMywwLDEwMCw0LDAsMjUsMTAzLDQsCi0gICAgMCwxMzEsMSwwLDEyNSwxMCwwLDExNiwxMiwwLDEyNCw0LDAsMTE2LDEzLDAsCi0gICAgMTI0LDEwLDAsMTMxLDMsMCw4Myw0MCw2LDAsMCwwLDExNywyNDQsMSwwLAotICAgIDAsNzEsMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAotICAgIDExNiwxMTEsMzIsOTcsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDQsMzIsMTE0LAotICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LAotICAgIDExMSwzMiwxMDUsMTE2LDExNSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLAotICAgIDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDQ2LAotICAgIDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTAsMTExLDExNiwKLSAgICAzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDU5LDMyLAotICAgIDExNiwxMDQsMTA1LDExNSwzMiwxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMTQsMTAxLDExNiwxMTcsCi0gICAgMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsCi0gICAgMTExLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAotICAgIDEwMCwzMiw5NywxMTUsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDMyLAotICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMTksMTAxLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTAxLDEwMCw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDEwLDMyLDMyLDMyLDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsNDYsCi0gICAgMTEyLDEyMSw5OSwzMiwxMTcsMTEwLDEwOCwxMDEsMTE1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMDIsCi0gICAgMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSwzMiwxMDUsMTE1LAotICAgIDMyLDExMCwxMTEsMTEwLDQ1LDEyMiwxMDEsMTE0LDExMSw0NCwzMiwxMTYsMTA0LDEwMSwxMTAsMzIsCi0gICAgMTA1LDExNiwzMiwxMTksMTA1LDEwOCwxMDgsMzIsOTgsMTAxLDMyLDQ2LDExMiwxMjEsMTExLDQ2LAotICAgIDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMDAsMTAxLDk4LDExNywxMDMsOTUsMTExLAotICAgIDExOCwxMDEsMTE0LDExNCwxMDUsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDc4LAotICAgIDExMSwxMTAsMTAxLDQ0LDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMDUsMTE2LDMyLDEwOSwxMTcsMTE1LAotICAgIDExNiwzMiw5OCwxMDEsMzIsOTcsMzIsOTgsMTExLDExMSwxMDgsMTAxLDk3LDExMCwzMiw5NywKLSAgICAxMTAsMTAwLDMyLDEwNSwxMTUsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsMTAsMzIsMzIsCi0gICAgMzIsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMzIsMTExLDEwMiwzMiwxMTUsMTIxLDExNSw0NiwxMDIsCi0gICAgMTA4LDk3LDEwMywxMTUsNDYsMTExLDExMiwxMTYsMTA1LDEwOSwxMDUsMTIyLDEwMSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLDc4LDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwKLSAgICAzMiw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDExNywxLDAsMCwwLDQ2LDExNywzNiwwLDAsMCwKLSAgICAxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LAotICAgIDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsCi0gICAgNzgsMTExLDExMCwxMDEsMTE3LDAsMCwwLDAsMTA1LDAsMCwwLDAsNzgsNDAsCi0gICAgMTQsMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwKLSAgICAwLDAsMTE1LDEyMSwxMTUsMTE3LDUsMCwwLDAsMTAyLDEwOCw5NywxMDMsMTE1LDExNywKLSAgICA4LDAsMCwwLDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMTE3LDIzLDAsMCwKLSAgICAwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LAotICAgIDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywyNywwLDAsMCw3OSw4MCw4NCwKLSAgICA3Myw3Nyw3Myw5MCw2OSw2OCw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSwKLSAgICA4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsOSwwLDAsMCwxMTIsOTcsMTE0LAotICAgIDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywxNCwwLDAsMCwxMDUsMTA5LDExMiwxMDgsMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMTE3LDksMCwwLDAsOTksOTcsCi0gICAgOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLAotICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LAotICAgIDQsMCwwLDAsMTA2LDExMSwxMDUsMTEwLDExNywxMCwwLDAsMCw5NSwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsMTE3LDgsMCwwLDAsOTUsODAsODksNjcsCi0gICAgNjUsNjcsNzIsNjksNDAsMTEsMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsMTE3LDE0LDAsMCwwLDEwMCwxMDEsOTgsMTE3LDEwMyw5NSwxMTEsMTE4LDEwMSwKLSAgICAxMTQsMTE0LDEwNSwxMDAsMTAxLDExNyw1LDAsMCwwLDEwMCwxMDEsOTgsMTE3LDEwMywxMTcsCi0gICAgOCwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDExNyw0LDAsMCwKLSAgICAwLDEwNCwxMDEsOTcsMTAwLDExNyw0LDAsMCwwLDExNiw5NywxMDUsMTA4LDExNywxMywKLSAgICAwLDAsMCw5OCw5NywxMTUsMTAxLDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsMywwLDAsMCwxMTUsMTAxLDExMiwxMTcsMSwwLDAsMCw5NSwxMTcsMywKLSAgICAwLDAsMCwxMTYsOTcsMTAzLDExNyw4LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSwxMTAsCi0gICAgOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxNywwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDE1OSwxLDAsMCwxMTUsMjIsMCwwLDAsMCwxMywKLSAgICAzMSwxLDYsMSw5LDIsNiwxLDE4LDEsMjQsMSwxMiwxLDEyLDEsCi0gICAgMTUsMSwzMSwxLDExNywxNywwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwMiwKLSAgICAxMTQsMTExLDEwOSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDEsMCwwLDAsMCwKLSAgICAwLDAsMCw1LDAsMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LAotICAgIDE5MywwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMDAsNywwLAotICAgIDEwNyw4LDAsMTE0LDMzLDAsMTE2LDQsMCwxMDAsMSwwLDEzMSwxLDAsMTMwLAotICAgIDEsMCwxMTAsMCwwLDExNiw1LDAsMTI0LDAsMCwxMzEsMSwwLDkyLDIsCi0gICAgMCwxMjUsMSwwLDEyNSwyLDAsMTE2LDUsMCwxMjQsMSwwLDEzMSwxLDAsCi0gICAgOTIsMiwwLDEyNSwxLDAsMTI1LDMsMCwxMjQsMywwLDExNiw2LDAsMTA3LAotICAgIDMsMCwxMTQsMTA4LDAsMTE2LDcsMCwxMDAsMiwwLDEwNiw4LDAsMTE2LDYsCi0gICAgMCwxMjQsMCwwLDEzMSwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsCi0gICAgMTI0LDIsMCwxMDYsOSwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsNCwwLDEwNywKLSAgICAzLDAsMTE0LDE1MywwLDExNiw3LDAsMTAwLDUsMCwxMDYsOCwwLDEyNCwyLAotICAgIDAsMTMxLDEsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLAotICAgIDEwNiwxMCwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsNiwwLDI1LDEyNSw0LDAsCi0gICAgMTE2LDExLDAsMTI0LDEsMCwxMjQsNCwwLDExNiwxMiwwLDEwMCw2LDAsMjUsCi0gICAgMjMsMTMxLDIsMCw4Myw0MCw4LDAsMCwwLDExNywxMjEsMSwwLDAsNzEsCi0gICAgMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsCi0gICAgMzIsOTcsMzIsNDYsMTEyLDEyMSw5OSw0Niw0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LAorICAgIDk3LDEwNywxMDEsMTEwLDQ2LDc4LDk5LDEsMCwwLDAsMCwwLDAsMCwxLAorICAgIDAsMCwwLDIsMCwwLDAsMTksMCwwLDAsMTE1LDExLDAsMCwwLAorICAgIDExNiwwLDAsMTM2LDAsMCw2MSwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMSwKKyAgICAyMTgsMTMsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsMTE1LDQxLAorICAgIDEsMTE0LDM2LDAsMCwwLDQxLDEsMTE0LDY3LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDIxOCwyLDk5LDk4LDMyLDEsMCwwLDExNSwKKyAgICAyLDAsMCwwLDAsMSwxMjIsMjgsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LAorICAgIDYyLDQ2LDk5LDk4LDQxLDcsMTE0LDEwOSwwLDAsMCwxMTQsNzksMCwwLDAsCisgICAgMTE0LDg1LDAsMCwwLDExNCwxMDIsMCwwLDAsMTE0LDgzLDAsMCwwLDIxOCwKKyAgICA4LDk1LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDkwLDMsMTE0LDEwMSwxMDIsNDEsMywKKyAgICAxMTQsNjcsMCwwLDAsMTE0LDg2LDAsMCwwLDExNCwxMTAsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsNDEsMSwxMTQsNjcsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDEwNSwwLDAsMCwxOCwxLDAsMCwxMTUsMjQsMCwwLDAsMCw0LAorICAgIDYsMSwzLDEsMTcsMSwxMywxLDUsMSwxMiwxLDEyLDEsMTUsMiwKKyAgICAxMiwxLDE4LDIsMjUsMSwxMTQsMTA1LDAsMCwwLDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSw3MSwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsMSwKKyAgICAwLDExNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDEsMTIxLDE0LDAsMTI0LDEsCisgICAgMCwxMDYsMywwLDEzMSwwLDAsMSw4NywxMTAsMTgsMCw0LDExNiw0LDAsCisgICAgMTA3LDEwLDAsMTE0LDU2LDAsMSwxLDEsODksMTEwLDExLDAsODgsMTI0LDEsCisgICAgMCwxMDYsNSwwLDEzMSwwLDAsMSwxMDAsMSwwLDgzLDQxLDIsOTcsMjEsCisgICAgMSwwLDAsODIsMTAxLDEwOCwxMDEsOTcsMTE1LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsCisgICAgMTA4LDExMSw5OCw5NywxMDgsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwKKyAgICAxMDcsNDQsMzIsOTcsMTEwLDEwMCwzMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwKKyAgICAxMTYsMTA0LDEwMSwxMTAsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsCisgICAgMTAsMzIsMzIsMzIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5OSwxMDcsCisgICAgMzIsMTAyLDExMSwxMTQsMzIsOTcsMzIsMTAzLDEwNSwxMTgsMTAxLDExMCwzMiwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSw0NiwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsCisgICAgMTA1LDExNSwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMSwxMTAsCisgICAgMTE1LDExNywxMTQsMTAxLDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsCisgICAgMzIsOTksMTExLDEwOSwxMTIsMTA4LDEwMSwxMTYsMTAxLDEwOCwxMjEsMzIsMTA1LDExMCwxMDUsMTE2LAorICAgIDEwNSw5NywxMDgsMTA1LDEyMiwxMDEsMTAwLDQ0LDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMTAsCisgICAgMzIsMzIsMzIsMzIsMTAxLDExOCwxMDEsMTEwLDExNiwzMiwxMDUsMTE2LDMyLDEwNSwxMTUsMzIsCisgICAgOTgsMTAxLDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzIsOTgsCisgICAgMTIxLDMyLDk3LDExMCwxMTEsMTE2LDEwNCwxMDEsMTE0LDMyLDExNiwxMDQsMTE0LDEwMSw5NywxMDAsCisgICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsODMsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMTEsMTEwLAorICAgIDEwOCwxMjEsMzIsOTgsMTAxLDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTksMTA1LDExNiwKKyAgICAxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwKKyAgICAxMDcsMzIsMTE2LDk3LDEwNywxMDEsMTEwLDQ2LDc4LDQxLDYsMTE0LDEwNSwwLDAsMCwKKyAgICAxMTQsMTA2LDAsMCwwLDExNCwxMDcsMCwwLDAsMTE0LDk3LDAsMCwwLDExNCwKKyAgICA4MiwwLDAsMCwxMTQsOTgsMCwwLDAsNDEsMiwxMTQsNjcsMCwwLDAsCisgICAgMTE0LDg2LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxOSw5NSwxMDgsMTExLDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsCisgICAgOTksMTA3LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM3LDEsMCwwLDExNSwxNCwwLAorICAgIDAsMCwwLDcsMTIsMSwxMCwxLDMsMSwxNCwxLDEzLDMsNSwyLAorICAgIDExNCwxMTIsMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwKKyAgICAwLDAsMywwLDAsMCw3OSwwLDAsMCwxMTUsMTMsMCwwLDAsMTI0LAorICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTQyLDAsMCw4Myw0MSwxLDk3LDQ2LAorICAgIDEsMCwwLDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwOCwxMDUsOTgsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMDUsMTEwLDMyLDEwNSwxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDQ2LDk5LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5NywxMDgsMTE5LDk3LAorICAgIDEyMSwxMTUsMzIsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMzIsMTE1LDEwMSwxMTMsMTE3LDEwMSwxMTAsCisgICAgOTksMTAxLDExNSwxMCwzMiwzMiwzMiwzMiwxMTEsMTAyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTE2LDEwOCwxMDUsOTgsMzIsMTAyLDExNCw5NywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwKKyAgICAzMiwxMDEsMTEwLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsOTcsMzIsOTksOTcsMTA4LDEwOCwKKyAgICAzMiwxMTYsMTExLDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwKKyAgICAxMTAsMTAsMTAsMzIsMzIsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTAsCisgICAgMTE1LDExNiwxMDEsOTcsMTAwLDMyLDExMSwxMDIsMzIsOTcsMzIsMTEwLDExMSwxMTQsMTA5LDk3LAorICAgIDEwOCwzMiw5OSw5NywxMDgsMTA4LDMyLDEwNSwxMTAsMzIsMTEyLDEwOCw5Nyw5OSwxMDEsMTE1LAorICAgIDMyLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDUsMTEwLDEwMywKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDEwLDMyLAorICAgIDMyLDMyLDMyLDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsMzIsMTA1LDExMCwxMTYsMTE0LDExMSwxMDAsCisgICAgMTE3LDk5LDEwMSwxMTUsMzIsMTE3LDExMCwxMTksOTcsMTEwLDExNiwxMDEsMTAwLDMyLDExMCwxMTEsCisgICAgMTA1LDExNSwxMDEsMzIsMTA1LDExMCwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDExNiwxMTQsOTcsCisgICAgOTksMTAxLDk4LDk3LDk5LDEwNywzMiw0MCwxMDEsNDYsMTAzLDQ2LDMyLDExOSwxMDQsMTAxLAorICAgIDExMCwzMiwxMDEsMTIwLDEwMSw5OSwxMTcsMTE2LDEwNSwxMTAsMTAzLDEwLDMyLDMyLDMyLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk5LDExMSwxMDAsMTAxLDQxLDEwLDMyLDMyLDMyLAorICAgIDMyLDExNCw0LDAsMCwwLDQxLDMsMjE4LDEsMTAyLDExNCw4MCwwLDAsMCwKKyAgICA5MCw0LDEwNywxMTksMTAwLDExNSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsMjUsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwKKyAgICAxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsCisgICAgNTcsMSwwLDAsMTE1LDIsMCwwLDAsMCw4LDExNCwxMTQsMCwwLDAsCisgICAgMTA1LDIzOCwxMiwwLDAsMjMzLDIsMCwwLDAsMTE0LDEzLDAsMCwwLDExNSwKKyAgICAyLDAsMCwwLDEzLDEwLDkwLDExLDk1LDk1LDExMiwxMjEsOTksOTcsOTksMTA0LAorICAgIDEwMSw5NSw5NSwxMjIsMyw0NiwxMTIsMTIxLDEyMiw0LDQ2LDExMiwxMjEsOTksMTIyLDQsCisgICAgNDYsMTEyLDEyMSwxMTEsNzgsOTksMiwwLDAsMCwwLDAsMCwwLDExLDAsCisgICAgMCwwLDYsMCwwLDAsNjcsMCwwLDAsMTE1LDE5MiwwLDAsMCwxMjQsCisgICAgMSwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjUsMCwxMTYsMCwwLDEwNiwxLAorICAgIDAsMTA2LDIsMCwxMiwxMTAsMywwLDEyNCwxLDAsMTI1LDIsMCwxMjQsMiwKKyAgICAwLDExNCw0NiwwLDExNiwzLDAsMTI1LDMsMCwxMTAsNiwwLDExNiw0LDAsCisgICAgMTI1LDMsMCwxMTYsNSwwLDEyNCwwLDAsMTMxLDEsMCw5MiwyLDAsMTI1LAorICAgIDQsMCwxMjUsNSwwLDEyNCw1LDAsMTA2LDYsMCwxMDAsMiwwLDEzMSwxLAorICAgIDAsOTIsMywwLDEyNSw2LDAsMTI1LDcsMCwxMjUsOCwwLDExNiwwLDAsCisgICAgMTA2LDcsMCwxMDYsOCwwLDEyNSw5LDAsMTI0LDksMCwxMDAsMSwwLDEwNywKKyAgICA4LDAsMTE0LDEzMywwLDExNiw5LDAsMTAwLDMsMCwxMzEsMSwwLDEzMCwxLAorICAgIDAsMTEwLDAsMCwxMDAsNCwwLDEwNiwxMCwwLDEyNCw2LDAsMTE0LDE1MSwwLAorICAgIDEyNCw2LDAsMTEwLDMsMCwxMjQsOCwwLDEyNCw3LDAsMTI0LDksMCwxMjQsCisgICAgMywwLDEwMCw1LDAsMjUsMTAzLDQsMCwxMzEsMSwwLDEyNSwxMCwwLDExNiwKKyAgICAxMSwwLDEyNCw0LDAsMTE2LDEyLDAsMTI0LDEwLDAsMTMxLDMsMCw4Myw0MSwKKyAgICA2LDk3LDI0NCwxLDAsMCw3MSwxMDUsMTE4LDEwMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiw5NywzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsCiAgICAgMTA4LDEwMSw0NCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCi0gICAgOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwxMjEsMzIsMTAyLAotICAgIDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsNDYsMTEyLAotICAgIDEyMSw5OSw0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAwLDExMSwxMDEsCisgICAgOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDEwNSwxMTYsMTE1LDMyLDQ2LDExMiwxMjEsOTksNDcsCisgICAgNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDg0LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTAwLDExMSwxMDEsCiAgICAgMTE1LDMyLDExMCwxMTEsMTE2LDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwMSwxMjAsCiAgICAgMTA1LDExNSwxMTYsNTksMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTIxLAogICAgIDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsCi0gICAgMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMTAwLAotICAgIDMyLDExNiwxMTEsMzIsOTksMTExLDExNCwxMTQsMTAxLDExNSwxMTIsMTExLDExMCwxMDAsMzIsMTE2LAotICAgIDExMSwzMiwxMTYsMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDk5LDQ3LDQ2LDExMiwxMjEsMTExLDMyLAotICAgIDEwMiwxMDUsMTA4LDEwMSw0NiwzMiwzMiw3MywxMDIsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAwLAotICAgIDExMSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsMTE2LDMyLDk5LDExMSwxMTAsMTAyLAotICAgIDExMSwxMTQsMTA5LDMyLDExNiwxMTEsMzIsODAsNjksODAsMzIsNTEsNDksNTIsNTUsMzIsCi0gICAgMTAyLDExMSwxMTQsMTA5LDk3LDExNiw0NCwzMiw4Niw5NywxMDgsMTE3LDEwMSw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDk4LDEwMSwzMiwxMTQsOTcsMTA1LDExNSwxMDEsCi0gICAgMTAwLDQ2LDMyLDczLDEwMiwxMCwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsOTksOTcsOTksCi0gICAgMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMTEwLDMyLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwKLSAgICAxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE3LDM2LDAsMCwwLDExNSwxMjEsMTE1LAotICAgIDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCw0NiwKLSAgICA5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsMzcsMCwwLDAsMTIzLDEyNSwzMiwxMTAsMTExLDExNiwzMiw5OCwxMTEsMTE2LAotICAgIDExNiwxMTEsMTA5LDQ1LDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwKLSAgICAxMTEsMTE0LDEyMSwzMiwxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDExNywxLDAsMCwwLAotICAgIDQ2LDEwNSwyLDAsMCwwLDExNywyOCwwLDAsMCwxMDEsMTIwLDExMiwxMDEsOTksCi0gICAgMTE2LDEwMSwxMDAsMzIsMTExLDExMCwxMDgsMTIxLDMyLDUwLDMyLDEwMCwxMTEsMTE2LDExNSwzMiwKLSAgICAxMDUsMTEwLDMyLDEyMywzMywxMTQsMTI1LDEwNSwwLDAsMCwwLDc4LDQwLDEzLDAsCi0gICAgMCwwLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNywxNCwwLDAsMCwxMDUsCi0gICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMTE3LDksMCwKLSAgICAwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDExNyw0LDAsMCwwLAotICAgIDc4LDExMSwxMTAsMTAxLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDExLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDgsMCwwLAotICAgIDAsOTUsODAsODksNjcsNjUsNjcsNzIsNjksMTE3LDEwLDAsMCwwLDg2LDk3LAotICAgIDEwOCwxMTcsMTAxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwKLSAgICAxMDksOTcsMTE2LDExNyw1LDAsMCwwLDk5LDExMSwxMTcsMTEwLDExNiwxMTcsOSwwLAotICAgIDAsMCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywxMCwwLDAsMCwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDYsMTExLDEwNSwxMTAsMTE3LDE1LDAsMCwwLDgzLAotICAgIDc5LDg1LDgyLDY3LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQwLDUsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLAotICAgIDAsMTA0LDEwMSw5NywxMDAsMTE3LDE2LDAsMCwwLDExMiwxMjEsOTksOTcsOTksMTA0LAotICAgIDEwMSw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLAotICAgIDEyMSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxMywwLDAsMCw5OCw5NywxMTUsMTAxLDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxNywwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LAotICAgIDEwMiwxMTQsMTExLDEwOSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDE4NiwxLDAsMCwxMTUsMjQsCi0gICAgMCwwLDAsMCw5LDE4LDEsMTUsMSwxOCwxLDE4LDEsMTIsMSw5LAotICAgIDEsMTgsMSwyMSwxLDksMSwxNSwxLDE5LDEsMTE3LDE3LDAsMCwwLAotICAgIDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsMTMsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE2NCwwLDAsMCwxMTYsMCwwLDEyNCwwLAotICAgIDAsMTMxLDEsMCwxMDAsMSwwLDEwNywyLDAsMTE0LDIyLDAsMTAwLDYsMCwKLSAgICA4MywxMjQsMCwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwwLDkyLDMsMCwKLSAgICAxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMSwwLDEyLDExNSw4MSwwLAotICAgIDEyNCwzLDAsMTA2LDMsMCwxMzEsMCwwLDEwMCw3LDAsMTAwLDgsMCwxMzMsCi0gICAgMiwwLDI1LDEwMCw1LDAsMTA3LDMsMCwxMTQsODUsMCwxMjQsMCwwLDgzLAotICAgIDEyMSwxNiwwLDExNiw0LDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw0LDAsODcsCi0gICAgMTEwLDQwLDAsNCwxMTYsNSwwLDExNiw2LDAsMTAyLDIsMCwxMDcsMTAsMCwKLSAgICAxMTQsMTQzLDAsMSwxLDEsMTI0LDAsMCwxMDAsNiwwLDEwMCw5LDAsMTMzLAotICAgIDIsMCwyNSwxMjUsNCwwLDg5LDExMCwxLDAsODgsMTE2LDcsMCwxMjQsNCwKLSAgICAwLDEzMSwxLDAsMTE0LDE2MCwwLDEyNCw0LDAsODMsMTI0LDAsMCw4Myw0MCwKLSAgICAxMCwwLDAsMCwxMTcsMTg4LDAsMCwwLDY3LDExMSwxMTAsMTE4LDEwMSwxMTQsMTE2LAotICAgIDMyLDk3LDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwKLSAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsMTA1LDEwMiwzMiwxMTIsMTExLDExNSwxMTUsMTA1LAotICAgIDk4LDEwOCwxMDEsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMTE1LDMyLAotICAgIDExMiwxMTcsMTE0LDEwMSwxMDgsMTIxLDMyLDEwMiwxMTEsMTE0LDMyLDk4LDk3LDk5LDEwNywxMTksCi0gICAgOTcsMTE0LDEwMCwxMTUsNDUsOTksMTExLDEwOSwxMTIsOTcsMTE2LDEwNSw5OCwxMDUsMTA4LDEwNSwKLSAgICAxMTYsMTIxLDMyLDEwMiwxMTEsMTE0LDEwLDMyLDMyLDMyLDMyLDgwLDEyMSw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDk1LDY5LDEyMCwxMDEsOTksNjcsMTExLDEwMCwxMDEsNzcsMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw4NywxMDUsMTE2LDEwNCw3MCwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTUsNDAsCi0gICAgNDEsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw2NywzMiw2NSw4MCw3Myw0NiwxMCwKLSAgICAxMCwzMiwzMiwzMiwzMiwxMDUsMCwwLDAsMCwxMTcsMSwwLDAsMCw0NiwKLSAgICAxMDUsMywwLDAsMCwxMDUsMSwwLDAsMCwxMTcsMiwwLDAsMCwxMTIsCi0gICAgMTIxLDc4LDEwNSwyNTMsMjU1LDI1NSwyNTUsMTA1LDI1NSwyNTUsMjU1LDI1NSwxMDUsMjU1LDI1NSwyNTUsCi0gICAgMjU1LDQwLDgsMCwwLDAsMTE3LDMsMCwwLDAsMTA4LDEwMSwxMTAsMTE3LDQsCi0gICAgMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LAotICAgIDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNyw1LDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsCi0gICAgMTE3LDE3LDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LAotICAgIDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTAsCi0gICAgMCwwLDAsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMiwwLAotICAgIDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMiwxMDUsMTA4LDEwMSw0MCw1LAotICAgIDAsMCwwLDExNywxMywwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwKLSAgICA5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNCwwLDAsMCwxMTQsMTAxLDExNSwxMTYsMTE3LDEsCi0gICAgMCwwLDAsOTUsMTE3LDksMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTUsCi0gICAgMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMDIsMTA1LAotICAgIDEwOCwxMDEsMjA5LDEsMCwwLDExNSwyMCwwLDAsMCwwLDcsMTgsMSw0LAotICAgIDEsMjQsMSwzNSwxLDQsMSwzLDEsMTYsMSwxOSwxLDIxLDEsMTE3LAotICAgIDE1LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAyLAotICAgIDEwNSwxMDgsMTAxLDExNyw5LDAsMCwwLDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTA1LDExNiwKLSAgICAxMjEsMTA1LDEsMCwwLDAsOTksMSwwLDAsMCwxLDAsMCwwLDMsCi0gICAgMCwwLDAsNCwwLDAsMCw3MSwwLDAsMCwxMTUsODEsMCwwLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEwNiwyLDAsMTI0LDEsMCwxMDcsNSwwLDExNCwKLSAgICA3NywwLDEyNCwwLDAsMTA2LDMsMCwxMDAsNiwwLDEzMSwxLDAsMTE1LDQ2LAotICAgIDAsMTAwLDMsMCwxMjQsMCwwLDIzLDEyNSwwLDAsMTEwLDAsMCwxMTYsNCwKLSAgICAwLDEyNCwwLDAsMTA2LDUsMCwxMjQsMiwwLDE0MCwwLDAsMTAwLDQsMCwKLSAgICAxMTYsMCwwLDEwNiw2LDAsMTMxLDEsMSwxLDExMCwwLDAsMTAwLDUsMCwKLSAgICA4Myw0MCw3LDAsMCwwLDExNyw2MSwwLDAsMCw4MCwxMTQsMTA1LDExMCwxMTYsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMzIsMTE2LDExMSwzMiwKLSAgICAxMTUsMTE2LDEwMCwxMDEsMTE0LDExNCwzMiwxMDUsMTAyLDMyLDQ1LDExOCw0Nyw4MCw4OSw4NCwKLSAgICA3Miw3OSw3OCw4Niw2OSw4Miw2Niw3OSw4Myw2OSwzMiwxMDUsMTE1LDMyLDExNiwxMTcsCi0gICAgMTE0LDExMCwxMDEsMTAwLDMyLDExMSwxMTAsNDYsMTE3LDEsMCwwLDAsMzUsMTE3LDcsCi0gICAgMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTE3LDIsMCwwLDAsMzUsCi0gICAgMzIsMTE3LDQsMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDc4LDQwLDIsMCwwLDAsCi0gICAgMTE3LDEsMCwwLDAsMzUsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMzIsNDAsNywwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsCi0gICAgNSwwLDAsMCwxMDIsMTA4LDk3LDEwMywxMTUsMTE3LDcsMCwwLDAsMTE4LDEwMSwKLSAgICAxMTQsOTgsMTExLDExNSwxMDEsMTE3LDEwLDAsMCwwLDExNSwxMTYsOTcsMTE0LDExNiwxMTUsCi0gICAgMTE5LDEwNSwxMTYsMTA0LDExNyw1LDAsMCwwLDExMiwxMTQsMTA1LDExMCwxMTYsMTE3LDYsCi0gICAgMCwwLDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNiwwLDAsMCwxMTUsMTE2LAotICAgIDEwMCwxMDEsMTE0LDExNCw0MCwzLDAsMCwwLDExNyw3LDAsMCwwLDEwOSwxMDEsCi0gICAgMTE1LDExNSw5NywxMDMsMTAxLDExNyw5LDAsMCwwLDExOCwxMDEsMTE0LDk4LDExMSwxMTUsCi0gICAgMTA1LDExNiwxMjEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwKLSAgICAxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMjI4LDEsMCwKLSAgICAwLDExNSw4LDAsMCwwLDAsMiwxOCwxLDE1LDEsMTMsMSwxMTcsMTYsCi0gICAgMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LAotICAgIDk3LDEwMywxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgMywwLDAsMCwzLDAsMCwwLDExNSwzNSwwLDAsMCwxMzUsMCwwLAotICAgIDEwMiwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzNCwwLDAsMTI1LDEsMCwxMTYsCi0gICAgMCwwLDEyNCwxLDAsMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywzOSwwLDAsMCw4MywxMDEsMTE2LDMyLDk1LDk1LAotICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNDYsOTksMCwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsNCwwLAotICAgIDAsMCwzMSwwLDAsMCwxMTUsMTAxLDAsMCwwLDEzNiwwLDAsMTI0LDAsCi0gICAgMCwxMjQsMSwwLDE0MiwwLDAsMTI1LDIsMCwxMTYsMCwwLDEyNCwyLDAsCi0gICAgMTAwLDEsMCwxMDAsMCwwLDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwKLSAgICA5NywwLDEyNCwyLDAsMTA2LDIsMCwxMjQsMiwwLDk1LDMsMCwxMTYsNCwKLSAgICAwLDEyNCwyLDAsMTAwLDIsMCwxMzEsMiwwLDExNSw5NywwLDEyNCwyLDAsCi0gICAgMTA2LDMsMCwxMDYsNSwwLDEwMCwzLDAsMTMxLDEsMCwxMDAsNCwwLDI1LAotICAgIDEyNCwyLDAsOTUsMywwLDExMyw5NywwLDExMCwwLDAsMTI0LDIsMCw4MywKLSAgICA0MCw1LDAsMCwwLDc4LDExNywxMSwwLDAsMCw5NSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsOTUsMTE3LDEsMCwwLDAsNDYsMTA1LDAsMCwwLDAsNDAsNiwKLSAgICAwLDAsMCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNywKLSAgICA5NywxMDMsMTAxLDk1LDk1LDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwKLSAgICAxMTQsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLAotICAgIDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LDYsCi0gICAgMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSwxMTcsNiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsCi0gICAgMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxOSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsCi0gICAgMjM4LDEsMCwwLDExNSwxMiwwLDAsMCwwLDEsMTUsMSwyNCwxLDEyLAotICAgIDEsMTUsMSwzMSwxLDExNyw0MCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsOTcsCi0gICAgOTksMTA3LDk3LDEwMywxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDExNSwKLSAgICAxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsCi0gICAgMTAxLDExNCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsCi0gICAgMTEyLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDE5LAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSwxMTksCi0gICAgMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsCi0gICAgMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMTUsCi0gICAgMTAxLDExNiw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMjM2LDEsMCwwLDExNSw2LAotICAgIDAsMCwwLDAsMiwxOCw3LDEzLDEsMTE3LDExLDAsMCwwLDExNSwxMDEsCi0gICAgMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwxLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LAotICAgIDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LAotICAgIDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLAotICAgIDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsMTE3LDM4LDAsMCwwLAotICAgIDgzLDEwMSwxMTYsMzIsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwzMiwxMTEsCi0gICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTksMSwwLDAsMCwwLDAsMCwwLDQsCi0gICAgMCwwLDAsNCwwLDAsMCwzMSwwLDAsMCwxMTUsNDksMCwwLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTI0LDIsMCwxNDIsMSwwLDEyNSwKLSAgICAzLDAsMTE2LDAsMCwxMjQsMywwLDEwMCwxLDAsMTMxLDIsMCwxMTUsNDUsCi0gICAgMCwxMjQsMCwwLDEyNCwzLDAsOTUsMSwwLDExMCwwLDAsMTI0LDMsMCwKLSAgICA4Myw0MCwyLDAsMCwwLDc4LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk1LDk1LDQwLDIsMCwwLDAsMTE3LDcsMCwwLDAsCi0gICAgMTA0LDk3LDExNSw5NywxMTYsMTE2LDExNCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSw5NSw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLAotICAgIDExNSwxMDEsMTA4LDEwMiwxMTcsNCwwLDAsMCw5NywxMTQsMTAzLDExNSwxMTcsNiwwLAotICAgIDAsMCwxMDcsMTE5LDk3LDExNCwxMDMsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LAotICAgIDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsMjUxLDEsCi0gICAgMCwwLDExNSw4LDAsMCwwLDAsMSwxOCwxLDE1LDEsMTIsMSwxMTcsCi0gICAgMzgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0Niw2MCwKLSAgICAxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwxLDAsMCwwLDExNywKLSAgICA1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDMsCi0gICAgMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDE4LDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLAotICAgIDAsMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICAyNDksMSwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LDUsMTMsMSwxMTcsCi0gICAgMTAsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsCi0gICAgMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMSwKLSAgICAwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwKLSAgICAxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLDgzLDQwLDMsMCwwLDAsCi0gICAgMTE3LDQyLDMsMCwwLDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLDExNiwKLSAgICAxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwxMTUsMTAxLDEwOCwxMDEsOTksMTE2LDEwNSwKLSAgICAxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExMiwxMTQsMTExLDExMiwxMDEsMTE0LDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAwLDEwMSw5OSwxMTEsMTE0LAotICAgIDk3LDExNiwxMDEsMTAwLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDUsMTE1LAotICAgIDMyLDExMiw5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LAotICAgIDEwMCwzMiwxMTEsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEwLAotICAgIDMyLDMyLDMyLDMyLDExMCw5NywxMDksMTAxLDQ2LDMyLDg0LDEwNCwxMDEsMzIsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwKLSAgICAxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwKLSAgICAxMTUsMzIsMTAxLDEwNSwxMTYsMTA0LDEwMSwxMTQsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNSwxMjEsCi0gICAgMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDUsMTAyLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwNSwxMTYsMzIsOTcsMTA4LDExNCwxMDEsOTcsMTAwLDEyMSwzMiwxMDEsMTIwLDEwNSwxMTUsCi0gICAgMTE2LDExNSwzMiwxMTEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDEwMSwxMTksNDQsMzIsMTE2LDEwNCwxMDEsCi0gICAgMTEwLDMyLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDEwLDMyLDMyLDMyLDMyLDEwNSwKLSAgICAxMTUsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMTQsMTE1LDExNiwzMiwKLSAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsMTE2LDExMSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMDksMTAxLDExNiwxMDQsMTExLDEwMCw0NCwzMiw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDk1LDk1LDMyLDEwNSwxMTUsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwzMiwxMTUsMTAxLDEwOCwKLSAgICAxMDIsNDQsMzIsOTcsMTEwLDEwMCwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsOTksCi0gICAgMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwxMTUsMTAxLDExNiwzMiw5Nyw5OSwKLSAgICA5OSwxMTEsMTE0LDEwMCwxMDUsMTEwLDEwMywxMDgsMTIxLDMyLDQwLDEwNSwxMDIsMzIsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQwLDQxLDMyLAotICAgIDEwNSwxMTUsMzIsMTAwLDEwMSwxMDIsMTA1LDExMCwxMDEsMTAwLDQxLDMyLDExOSwxMDUsMTA4LDEwOCwKLSAgICAzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwMiwxMTEsCi0gICAgMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwNSwxMTUsMzIsMTEyLDk3LDExNSwxMTUsMTAxLDEwMCwzMiwKLSAgICAxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywxMTYsMTAxLDEwMCwKLSAgICAzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsNDAsMTA1LDEwMiwzMiwxMTUsMTAxLAotICAgIDEwOCwxMDIsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDAsNDEsMzIsCi0gICAgMTAwLDExMSwxMDEsMTE1LDEwLDMyLDMyLDMyLDMyLDExMCwxMTEsMTE2LDMyLDExOSwxMTEsMTE0LAotICAgIDEwNywzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICAzMiwxMDUsMTE2LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMzIsCi0gICAgMTEyLDExMSwxMTUsMTE2LDQ1LDEwOCwxMTEsOTcsMTAwLDQxLDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDczLDEwMiwzMiw5NywxMTAsMzIsMTAxLDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwKLSAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsMzIsOTcsMTEwLDEwMCwzMiwxMTYsCi0gICAgMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsOTksMTE0LDEwMSwKLSAgICA5NywxMTYsMTAxLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwKLSAgICAxMDUsMTE2LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMTE1LDExNyw5OCwxMTUsMTAxLDExMywKLSAgICAxMTcsMTAxLDExMCwxMTYsMTA4LDEyMSwzMiwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMzIsMTAyLAotICAgIDExNCwxMTEsMTA5LDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwKLSAgICAxMCwxMCwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDExNCw5NywKLSAgICAxMTYsMTExLDExNCwzMiw5NywxMTUsMTE1LDExNywxMDksMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDEwMSwxMDAsMzIsMTAyLAotICAgIDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNiw5NywxMDcsMTAxLDExNSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiw5NywxMTUsCi0gICAgMTAsMzIsMzIsMzIsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwMSw5OSwxMTEsMTEwLDEwMCwzMiwKLSAgICA5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDcsMCwwLDAsMjUsMCwwLDAsCi0gICAgMzEsMCwwLDAsMTE1LDI1NCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LAotICAgIDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDQsMCwxMjQsNCwwLDEwMCwwLAotICAgIDAsMTA3LDksMCwxMjUsNSwwLDEyNCw1LDAsMTE1LDE2OCwwLDExNiw0LDAsCi0gICAgMTI0LDEsMCwxMzEsMSwwLDEyNSw0LDAsMTAwLDMsMCwxMjQsNCwwLDk1LAotICAgIDYsMCwxMjQsNCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDYwLDEyNCwKLSAgICAwLDAsMTI0LDQsMCw5NSw3LDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsOCwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsNiwwLDg3LDExMCwyNCwwLDQsMTE2LAotICAgIDksMCwxMTYsMTAsMCwxMDIsMiwwLDEwNywxMCwwLDExNCwxMjQsMCwxLDEsCi0gICAgMSw4OSwxMTMsMTc3LDAsODgsMTI0LDYsMCwxMTQsMTQzLDAsMTI0LDEsMCwxMjQsCi0gICAgNCwwLDk1LDExLDAsMTEzLDE3NywwLDEyNCwxLDAsMTA2LDEyLDAsMTAwLDEsCi0gICAgMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI0LDQsMCw5NSwxMSwwLDExMCw5LAotICAgIDAsMTAwLDMsMCwxMjQsNCwwLDk1LDYsMCwxMjIsNjAsMCwxMjEsMjMsMCwKLSAgICAxMzYsMCwwLDEyNCwwLDAsMTI0LDQsMCwxMjQsMiwwLDEyNCwzLDAsMTQyLAotICAgIDIsMCw4Myw4NywxMTAsMzAsMCwxLDEsMSwxMjQsNSwwLDExNSwyMjgsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCw2MSwxMTAsMCwwLDEzMCwwLDAsCi0gICAgODksMTEwLDEsMCw4OCw4NywxMDAsMCwwLDEwMCw0LDAsMTI0LDQsMCw5NSwKLSAgICA2LDAsODgsMTAwLDAsMCw4Myw0MCw1LDAsMCwwLDc4LDExNywxLDAsCi0gICAgMCwwLDQ2LDEwNSwwLDAsMCwwLDg0LDcwLDQwLDE0LDAsMCwwLDExNywKLSAgICAzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwxMTcsMywwLDAsMCwxMDMsMTAxLDExNiwxMTcsNCwwLDAsMCwKLSAgICA3OCwxMTEsMTEwLDEwMSwxMTcsMTAsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTA1LDExMCwxMDMsOTUsCi0gICAgOTUsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsCi0gICAgMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywKLSAgICAxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsCi0gICAgMTQsMCwwLDAsNjUsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDk1LDk1LDExNywxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLAotICAgIDExMCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsMTE1LDEwMSw0MCw3LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LAotICAgIDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsMTE3LAotICAgIDYsMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSwxMTcsNiwwLDAsMCwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOSwwLDAsMCwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LAotICAgIDExMSw5NywxMDAsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI1LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDk1LDEwMiwxMTEsMTE0LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsMTEyLDEwMSwxMTQsMjIsMiwwLDAsMTE1LDQ0LDAsMCwwLDAsMSwxOCwKLSAgICAxLDEyLDEsNiw0LDEyLDMsOSwxLDEzLDEsOSwxLDMsMSwxOSwKLSAgICAxLDE5LDEsNSwyLDYsMSwxMiwyLDI1LDIsOSwxLDYsMiwyMywKLSAgICAxLDMsMSw2LDEsMTMsMSwxMiwyLDExNyw1MiwwLDAsMCwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAotICAgIDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExOSwxMTQsOTcsMTEyLDExMiwKLSAgICAxMDEsMTE0LDQwLDEsMCwwLDAsMTE3LDUsMCwwLDAsOTUsMTE5LDExNCw5NywKLSAgICAxMTIsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCwxMDIsMTIwLDExMCwxMTcsMjUsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwwLDAsMCwKLSAgICAwLDQwLDEsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwKLSAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQsMiwwLDAsMTE1LDYsMCwwLDAsMCwKLSAgICAxOCwxOCwzMywxMywxLDExNywxNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwyLDAsMCwwLDQsMCwwLDAsMywwLDAsMCwKLSAgICAxMTUsMzgsMCwwLDAsMTAwLDMsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsCi0gICAgMCwxMDAsMiwwLDEzNCwxLDAsMTI1LDEsMCwxMTYsMSwwLDEyNCwxLDAsCi0gICAgMTM2LDAsMCwxMzEsMiwwLDEsMTI0LDEsMCw4Myw0MCw0LDAsMCwwLAotICAgIDExNywyNTIsMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LAorICAgIDEwNCwzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDQ2LDExMiwxMjEsCisgICAgOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDk5LDk3LDEwOCw5OSwKKyAgICAxMTcsMTA4LDk3LDExNiwxMDEsMTAwLDMyLDk3LDExNSwzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDQ2LDExMiwxMjEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExOSwxMDEsMTE0LDEwMSwzMiwxMDUsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDQ2LDMyLDMyLDg0LDEwNCwxMDEsMzIsMTAxLDEyMCwKKyAgICAxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMTAsMzIsMzIsMzIsMzIsMTE5LDEwNSwxMDgsMTA4LAorICAgIDMyLDk4LDEwMSwzMiw0NiwxMTIsMTIxLDk5LDMyLDExNywxMTAsMTA4LDEwMSwxMTUsMTE1LDMyLAorICAgIDExNSwxMjEsMTE1LDQ2LDEwMiwxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwKKyAgICAxMjIsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTAsNDUsMTIyLDEwMSwxMTQsMTExLDQ0LDMyLAorICAgIDExNiwxMDQsMTAxLDExMCwzMiwxMDUsMTE2LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsCisgICAgNDYsMTEyLDEyMSwxMTEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDEwMCwxMDEsCisgICAgOTgsMTE3LDEwMyw5NSwxMTEsMTE4LDEwMSwxMTQsMTE0LDEwNSwxMDAsMTAxLDMyLDEwNSwxMTUsMzIsCisgICAgMTEwLDExMSwxMTYsMzIsNzgsMTExLDExMCwxMDEsNDQsMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDEwNSwKKyAgICAxMTYsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw5NywzMiw5OCwxMTEsMTExLDEwOCwKKyAgICAxMDEsOTcsMTEwLDMyLDk3LDExMCwxMDAsMzIsMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsCisgICAgMTA1LDExMCwxMCwzMiwzMiwzMiwzMiwxMTIsMTA4LDk3LDk5LDEwMSwzMiwxMTEsMTAyLDMyLAorICAgIDExNSwxMjEsMTE1LDQ2LDEwMiwxMDgsOTcsMTAzLDExNSw0NiwxMTEsMTEyLDExNiwxMDUsMTA5LDEwNSwKKyAgICAxMjIsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTUsMTIxLDExNSw0NiwKKyAgICAxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsNDYsOTksCisgICAgOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsMzIsNzgsMTExLDExMCwxMDEsCisgICAgMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsCisgICAgMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsCisgICAgMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsMjE4LDEsNDYsMTIyLDM2LAorICAgIDExNSwxMjEsMTE1LDQ2LDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsCisgICAgMTExLDExMCw0Niw5OSw5Nyw5OSwxMDQsMTAxLDk1LDExNiw5NywxMDMsMzIsMTA1LDExNSwzMiwKKyAgICA3OCwxMTEsMTEwLDEwMSwxMTQsMzAsMCwwLDAsMTE0LDg0LDAsMCwwLDQxLDEzLAorICAgIDExNCw3LDAsMCwwLDIxOCw1LDEwMiwxMDgsOTcsMTAzLDExNSwyMTgsOCwxMTEsMTEyLAorICAgIDExNiwxMDUsMTA5LDEwNSwxMjIsMTAxLDIxOCwyMyw2OCw2OSw2Niw4NSw3MSw5NSw2Niw4OSwKKyAgICA4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywyMTgsCisgICAgMjcsNzksODAsODQsNzMsNzcsNzMsOTAsNjksNjgsOTUsNjYsODksODQsNjksNjcsCisgICAgNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE0LDM4LDAsMCwKKyAgICAwLDExNCwzMiwwLDAsMCwyMTgsMTQsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwKKyAgICAxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDIxOCw5LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LAorICAgIDEwMywyMTgsMTksNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwKKyAgICAxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNCwyNiwwLDAsMCwxMTQsMjgsMCwwLDAsCisgICAgMjE4LDgsOTUsODAsODksNjcsNjUsNjcsNzIsNjksNDEsMTEsMTE0LDM1LDAsMCwKKyAgICAwLDkwLDE0LDEwMCwxMDEsOTgsMTE3LDEwMyw5NSwxMTEsMTE4LDEwMSwxMTQsMTE0LDEwNSwxMDAsCisgICAgMTAxLDIxOCw1LDEwMCwxMDEsOTgsMTE3LDEwMywyMTgsOCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwKKyAgICAxMDEsMTE1LDIxOCw0LDEwNCwxMDEsOTcsMTAwLDExNCwzNywwLDAsMCwyMTgsNCw5OCwKKyAgICA5NywxMTUsMTAxLDIxOCwzLDExNSwxMDEsMTEyLDIxOCw0LDExNCwxMDEsMTE1LDExNiw5MCwzLAorICAgIDExNiw5NywxMDMsMjE4LDgsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDE4MSwKKyAgICAxLDAsMCwxMTUsMjIsMCwwLDAsMCwxMywzMSwxLDYsMSw5LDIsCisgICAgNiwxLDE4LDEsMjQsMSwxMiwxLDEyLDEsMTUsMSw0MywxLDExNCwxMzIsCisgICAgMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsCisgICAgNSwwLDAsMCw2NywwLDAsMCwxMTUsMTkzLDAsMCwwLDExNiwwLDAsCisgICAgMTA2LDEsMCwxMDYsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzMsMCwxMTYsCisgICAgMywwLDEwMCwyLDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsMTE2LDQsCisgICAgMCwxMjQsMCwwLDEzMSwxLDAsOTIsMiwwLDEyNSwxLDAsMTI1LDIsMCwKKyAgICAxMTYsNCwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDEsMCwxMjUsCisgICAgMywwLDEyNCwzLDAsMTE2LDUsMCwxMDcsMywwLDExNCwxMDgsMCwxMTYsNiwKKyAgICAwLDEwMCwzLDAsMTA2LDcsMCwxMTYsNSwwLDEyNCwwLDAsMTMxLDIsMCwKKyAgICAxMzEsMSwwLDEzMCwxLDAsMTEwLDAsMCwxMjQsMiwwLDEwNiw4LDAsMTAwLAorICAgIDQsMCwxMzEsMSwwLDEwMCw1LDAsMTA3LDMsMCwxMTQsMTUzLDAsMTE2LDYsCisgICAgMCwxMDAsNiwwLDEwNiw3LDAsMTI0LDIsMCwxMzEsMSwwLDEzMSwxLDAsCisgICAgMTMwLDEsMCwxMTAsMCwwLDEyNCwyLDAsMTA2LDksMCwxMDAsNCwwLDEzMSwKKyAgICAxLDAsMTAwLDcsMCwyNSwxMjUsNCwwLDExNiwxMCwwLDEyNCwxLDAsMTI0LAorICAgIDQsMCwxMTYsMTEsMCwxMDAsNywwLDI1LDIzLDEzMSwyLDAsODMsNDEsOCwKKyAgICA5NywxMjEsMSwwLDAsNzEsMTA1LDExOCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiwKKyAgICA5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsOTcsMzIsNDYsMTEyLDEyMSw5OSw0Niw0Nyw0NiwKKyAgICAxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDQsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMDUsMTE2LDExNSwKKyAgICAzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICA4NCwxMDQsMTAxLDMyLDQ2LDExMiwxMjEsOTksNDcsNDYsMTEyLDEyMSwxMTEsMzIsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDMyLDEwMCwxMTEsMTAxLDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTAsMTAxLDEwMSwxMDAsCisgICAgMzIsMTE2LDExMSwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDU5LDMyLDExNiwxMDQsMTA1LDExNSwzMiwKKyAgICAxMTUsMTA1LDEwOSwxMTIsMTA4LDEyMSwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiw0NiwxMTIsMTIxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5OSw5NywxMDgsOTksCisgICAgMTE3LDEwOCw5NywxMTYsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDk5LDExMSwxMTQsMTE0LDEwMSwxMTUsCisgICAgMTEyLDExMSwxMTAsMTAwLDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsNDYsMTEyLDEyMSw5OSwKKyAgICA0Nyw0NiwxMTIsMTIxLDExMSwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsMzIsMzIsNzMsMTAyLDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDEwMCwxMTEsMTAxLDExNSwxMCwzMiwzMiwzMiwzMiwxMTAsMTExLAorICAgIDExNiwzMiw5OSwxMTEsMTEwLDEwMiwxMTEsMTE0LDEwOSwzMiwxMTYsMTExLDMyLDgwLDY5LDgwLAorICAgIDMyLDUxLDQ5LDUyLDU1LDMyLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDQsMzIsODYsOTcsCisgICAgMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsCisgICAgMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCw0NiwzMiw3MywxMDIsMTAsMzIsMzIsMzIsMzIsCisgICAgMTE1LDEyMSwxMTUsNDYsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDQ2LDk5LDk3LDk5LDEwNCwxMDEsOTUsMTE2LDk3LDEwMywzMiwxMDUsMTE1LDMyLAorICAgIDc4LDExMSwxMTAsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwzMiw3OCwxMTEsMTE2LDczLDEwOSwxMTIsCisgICAgMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwKKyAgICAzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDEyMiwKKyAgICAzNiwxMTUsMTIxLDExNSw0NiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsCisgICAgMTA1LDExMSwxMTAsNDYsOTksOTcsOTksMTA0LDEwMSw5NSwxMTYsOTcsMTAzLDMyLDEwNSwxMTUsCisgICAgMzIsNzgsMTExLDExMCwxMDEsMTIyLDM3LDEyMywxMjUsMzIsMTEwLDExMSwxMTYsMzIsOTgsMTExLAorICAgIDExNiwxMTYsMTExLDEwOSw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwKKyAgICAxMTYsMTExLDExNCwxMjEsMzIsMTA1LDExMCwzMiwxMjMsMzMsMTE0LDEyNSwxMTQsMTE2LDAsMCwKKyAgICAwLDExNCwxMTUsMCwwLDAsMTIyLDI4LDEwMSwxMjAsMTEyLDEwMSw5OSwxMTYsMTAxLDEwMCwKKyAgICAzMiwxMTEsMTEwLDEwOCwxMjEsMzIsNTAsMzIsMTAwLDExMSwxMTYsMTE1LDMyLDEwNSwxMTAsMzIsCisgICAgMTIzLDMzLDExNCwxMjUsMTE0LDg0LDAsMCwwLDQxLDEyLDExNCw3LDAsMCwwLAorICAgIDExNCwxMjEsMCwwLDAsMTE0LDEyMiwwLDAsMCwxMTQsMTIzLDAsMCwwLDExNCwKKyAgICAzOCwwLDAsMCwxMTQsMTI0LDAsMCwwLDIxOCwxMCw4Niw5NywxMDgsMTE3LDEwMSwKKyAgICA2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDQ3LDAsMCwwLDExNCw4OSwwLDAsMCwyMTgsCisgICAgOSwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNCwyOCwwLDAsMCwyMTgsCisgICAgMTUsODMsNzksODUsODIsNjcsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsCisgICAgNDEsNSwxMTQsMzUsMCwwLDAsMTE0LDEyNywwLDAsMCw5MCwxNiwxMTIsMTIxLAorICAgIDk5LDk3LDk5LDEwNCwxMDEsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDkwLDcsCisgICAgMTEyLDEyMSw5OSw5Nyw5OSwxMDQsMTAxLDkwLDEzLDk4LDk3LDExNSwxMDEsOTUsMTAyLDEwNSwKKyAgICAxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDIxOCwxNywxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwMiwxMTQsCisgICAgMTExLDEwOSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDIwOCwxLDAsMCwxMTUsMjQsMCwwLAorICAgIDAsMCw5LDE4LDEsMTUsMSwxOCwxLDE4LDEsMTIsMSw5LDEsMTgsCisgICAgMSwyMSwxLDksMSwxNSwxLDE5LDEsMTE0LDEzNiwwLDAsMCw5OSwxLAorICAgIDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwxMiwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMTY0LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwKKyAgICAwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjIsMCwxMDAsMiwwLDgzLDEyNCwwLAorICAgIDAsMTA2LDEsMCwxMDAsMywwLDEzMSwxLDAsOTIsMywwLDEyNSwxLDAsCisgICAgMTI1LDIsMCwxMjUsMywwLDEyNCwxLDAsMTIsMTE1LDgxLDAsMTI0LDMsMCwKKyAgICAxMDYsMiwwLDEzMSwwLDAsMTAwLDcsMCwxMDAsOCwwLDEzMywyLDAsMjUsCisgICAgMTAwLDYsMCwxMDcsMywwLDExNCw4NSwwLDEyNCwwLDAsODMsMTIxLDE2LDAsCisgICAgMTE2LDMsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LDQsMCw4NywxMTAsNDAsMCwKKyAgICA0LDExNiw0LDAsMTE2LDUsMCwxMDIsMiwwLDEwNywxMCwwLDExNCwxNDMsMCwKKyAgICAxLDEsMSwxMjQsMCwwLDEwMCwyLDAsMTAwLDksMCwxMzMsMiwwLDI1LAorICAgIDEyNSw0LDAsODksMTEwLDEsMCw4OCwxMTYsNiwwLDEyNCw0LDAsMTMxLDEsCisgICAgMCwxMTQsMTYwLDAsMTI0LDQsMCw4MywxMjQsMCwwLDgzLDQxLDEwLDEyMiwxODgsCisgICAgNjcsMTExLDExMCwxMTgsMTAxLDExNCwxMTYsMzIsOTcsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLAorICAgIDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsCisgICAgOTcsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiw0MCwxMDUsCisgICAgMTAyLDMyLDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSw0MSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsMzIsCisgICAgMTAxLDEyMCwxMDUsMTE1LDExNiwxMTUsMzIsMTEyLDExNywxMTQsMTAxLDEwOCwxMjEsMzIsMTAyLDExMSwKKyAgICAxMTQsMzIsOTgsOTcsOTksMTA3LDExOSw5NywxMTQsMTAwLDExNSw0NSw5OSwxMTEsMTA5LDExMiwKKyAgICA5NywxMTYsMTA1LDk4LDEwNSwxMDgsMTA1LDExNiwxMjEsMzIsMTAyLDExMSwxMTQsMTAsMzIsMzIsCisgICAgMzIsMzIsODAsMTIxLDczLDEwOSwxMTIsMTExLDExNCwxMTYsOTUsNjksMTIwLDEwMSw5OSw2NywKKyAgICAxMTEsMTAwLDEwMSw3NywxMTEsMTAwLDExNywxMDgsMTAxLDg3LDEwNSwxMTYsMTA0LDcwLDEwNSwxMDgsCisgICAgMTAxLDExMCw5NywxMDksMTAxLDExNSw0MCw0MSwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDY3LDMyLDY1LDgwLDczLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDExNCw4NCwwLDAsCisgICAgMCw3OCwxMTQsMTE2LDAsMCwwLDIzMywzLDAsMCwwLDExNCwyOSwwLDAsCisgICAgMCw5MCwyLDExMiwxMjEsMjMzLDI1MywyNTUsMjU1LDI1NSwyMzMsMjU1LDI1NSwyNTUsMjU1LDExNCwKKyAgICAxMzksMCwwLDAsNDEsNywxMTQsMzEsMCwwLDAsMTE0LDMyLDAsMCwwLAorICAgIDIxOCw1LDEwOCwxMTEsMTE5LDEwMSwxMTQsMTE0LDEzNiwwLDAsMCwxMTQsMTIzLDAsMCwKKyAgICAwLDExNCwxMzMsMCwwLDAsMTE0LDQ0LDAsMCwwLDQxLDUsMjE4LDEzLDk4LAorICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNCwxMzAsMCwwLAorICAgIDAsMTE0LDM2LDAsMCwwLDkwLDksMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKKyAgICAxMTAsMjE4LDExLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE1LDk1LAorICAgIDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAyLDEwNSwxMDgsMTAxLDIzMSwxLAorICAgIDAsMCwxMTUsMjAsMCwwLDAsMCw3LDE4LDEsNCwxLDI0LDEsMzUsCisgICAgMSw0LDEsMywxLDE2LDEsMTksMSwyMSwxLDExNCwxNDMsMCwwLDAsCisgICAgOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLAorICAgIDAsNjcsMCwwLDAsMTE1LDYwLDAsMCwwLDEyMSwxOSwwLDExNiwwLDAsCisgICAgMTI0LDAsMCwxMzEsMSwwLDEwNiwxLDAsMTI1LDEsMCw4NywxMTAsMjQsMCwKKyAgICA0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDQ1LDAsMSwxLDEsMTAwLDEsMCwKKyAgICAxMjUsMSwwLDg5LDExMCwxLDAsODgsMTI0LDEsMCwxMDAsMiwwLDc5LDEyNSwKKyAgICAxLDAsMTI0LDEsMCw4Myw0MSwzLDEyMiw1MSw2Nyw5NywxMDgsOTksMTE3LDEwOCwKKyAgICA5NywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDEwMSwzMiwxMTIsMTAxLDExNCwKKyAgICAxMDksMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDk3LDMyLDk4LAorICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMDUsMTgyLDEsCisgICAgMCwwLDIzMywxMjgsMCwwLDAsNDEsMywxMTQsMzksMCwwLDAsMTE0LDQxLAorICAgIDAsMCwwLDExNCw0MCwwLDAsMCw0MSwyLDExNCwzNSwwLDAsMCwxMTQsCisgICAgNDIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDEwLDk1LDk5LDk3LDEwOCw5OSw5NSwxMDksMTExLDEwMCwxMDEsMjUwLAorICAgIDEsMCwwLDExNSwxMiwwLDAsMCwwLDIsMywxLDE5LDEsMTMsMSwKKyAgICAxMSwzLDEwLDEsMTE0LDE0NSwwLDAsMCwyMTgsOSwxMTgsMTAxLDExNCw5OCwxMTEsCisgICAgMTE1LDEwNSwxMTYsMTIxLDExNCwyOSwwLDAsMCw5OSwxLDAsMCwwLDEsMCwKKyAgICAwLDAsMywwLDAsMCw0LDAsMCwwLDcxLDAsMCwwLDExNSw4MSwKKyAgICAwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDEwNywKKyAgICA1LDAsMTE0LDc3LDAsMTI0LDAsMCwxMDYsMywwLDEwMCw2LDAsMTMxLDEsCisgICAgMCwxMTUsNDYsMCwxMDAsMywwLDEyNCwwLDAsMjMsMTI1LDAsMCwxMTAsMCwKKyAgICAwLDExNiw0LDAsMTI0LDAsMCwxMDYsNSwwLDEyNCwyLDAsMTQwLDAsMCwKKyAgICAxMDAsNCwwLDExNiwwLDAsMTA2LDYsMCwxMzEsMSwxLDEsMTEwLDAsMCwKKyAgICAxMDAsNSwwLDgzLDQxLDcsMTIyLDYxLDgwLDExNCwxMDUsMTEwLDExNiwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwzMiwxMTYsMTExLDMyLDExNSwxMTYsMTAwLAorICAgIDEwMSwxMTQsMTE0LDMyLDEwNSwxMDIsMzIsNDUsMTE4LDQ3LDgwLDg5LDg0LDcyLDc5LDc4LAorICAgIDg2LDY5LDgyLDY2LDc5LDgzLDY5LDMyLDEwNSwxMTUsMzIsMTE2LDExNywxMTQsMTEwLDEwMSwKKyAgICAxMDAsMzIsMTExLDExMCw0NiwyNTAsMSwzNSwyNTAsNywxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAzMiwxMjIsMiwzNSwzMiwxMTQsNTQsMCwwLDAsNzgsNDEsMiwxMTQsMTQ3LDAsCisgICAgMCwwLDExNCwxNDgsMCwwLDAsNDEsNywxMTQsNywwLDAsMCwxMTQsMTE3LAorICAgIDAsMCwwLDIxOCw3LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDExNCw5LDAsMCwKKyAgICAwLDIxOCw1LDExMiwxMTQsMTA1LDExMCwxMTYsMTE0LDQ3LDAsMCwwLDIxOCw2LDExNSwKKyAgICAxMTYsMTAwLDEwMSwxMTQsMTE0LDQxLDMsMjE4LDcsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsCisgICAgMTE0LDE0NiwwLDAsMCwxMTQsODAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE2LDk1LDExOCwxMDEsMTE0LDk4LAorICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDYsMiwwLDAsMTE1LAorICAgIDgsMCwwLDAsMCwyLDE4LDEsMTUsMSwxMywxLDExNCwxNTMsMCwwLAorICAgIDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLAorICAgIDAsMCwzLDAsMCwwLDExNSwzOCwwLDAsMCwxMDAsMSwwLDEzNSwwLAorICAgIDAsMTAyLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTM0LDEsMCwxMjUsMSwwLAorICAgIDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwwLAorICAgIDgzLDQxLDQsMTIyLDI1Miw2OCwxMDEsOTksMTExLDExNCw5NywxMTYsMTExLDExNCwzMiwxMTYsCiAgICAgMTExLDMyLDExOCwxMDEsMTE0LDEwNSwxMDIsMTIxLDMyLDExNiwxMDQsOTcsMTE2LDMyLDExNiwxMDQsCiAgICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwxMTQsCiAgICAgMTAxLDExMywxMTcsMTAxLDExNSwxMTYsMTAxLDEwMCwzMiwxMDksOTcsMTE2LDk5LDEwNCwxMDEsMTE1LApAQCAtMTIxMiwyNTE4ICs5MjUsMjk3NiBAQAogICAgIDExMSwxMDksMTEyLDk3LDExNCwxMDUsMTE1LDExMSwxMTAsMzIsMTAyLDk3LDEwNSwxMDgsMTE1LDMyLAogICAgIDExNiwxMDQsMTAxLDExMCwzMiw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwKICAgICAzMiwxMDUsMTE1LDMyLDExNCw5NywxMDUsMTE1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsCi0gICAgMzIsOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsNSwwLAotICAgIDAsMCwzMSwwLDAsMCwxMTUsODMsMCwwLDAsMTI0LDEsMCwxMDAsMCwKLSAgICAwLDEwNyw4LDAsMTE0LDI0LDAsMTI0LDAsMCwxMDYsMSwwLDEyNSwxLDAsCi0gICAgMTEwLDQwLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTA3LDMsMCwxMTQsCi0gICAgNjQsMCwxMTYsMiwwLDEwMCwxLDAsMTI0LDEsMCwyMiwxMDAsMiwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsMCwxMjQsMCwKLSAgICAwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDE0MiwyLDAsODMsNDAsMywKLSAgICAwLDAsMCw3OCwxMTcsMjMsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwKLSAgICA5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwzNywxMTUsCi0gICAgMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsMywwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsCi0gICAgNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsCi0gICAgMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsOTcsMTE0LDEwMywxMTUsCi0gICAgMTE3LDYsMCwwLDAsMTA3LDExOSw5NywxMTQsMTAzLDExNSw0MCwxLDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNywxOSwwLDAsMCw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw2NywyLDAsMCwxMTUsMTAsCi0gICAgMCwwLDAsMCwxLDEyLDEsMTIsMSwxNSwxLDI1LDEsMTE3LDQwLDAsCi0gICAgMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDQ2LDYwLDEwOCwKLSAgICAxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw3OCw0MCwyLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw1LDAsMCwwLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDYsMCwwLDAsMTA5LDEwMSwxMTYsCi0gICAgMTA0LDExMSwxMDAsMTE3LDE5LDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCwKLSAgICA5NywxMDksMTAxLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDQwLDAsMCwwLDAsCi0gICAgNDAsMSwwLDAsMCwxMTcsNiwwLDAsMCwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywKLSAgICAxMDksMTAxLDU5LDIsMCwwLDExNSw2LDAsMCwwLDAsOCwyMSw2LDEzLAotICAgIDEsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwKLSAgICAwLDAsMywwLDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwKLSAgICAwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwKLSAgICAxMjQsMSwwLDEzNiwwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsMywKLSAgICAwLDAsMCwxMTcsNDksMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwKLSAgICAxMTQsMzIsMTE2LDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwKLSAgICA5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0Niw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwKLSAgICAwLDAsMCwxMjQsMSwwLDExNiwwLDAsMTA2LDEsMCwxMDcsNywwLDExNCwKLSAgICA0NSwwLDExNiwyLDAsMTAwLDEsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCwxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsCi0gICAgMTM2LDAsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MCwzLDAsCi0gICAgMCwwLDc4LDExNywyNywwLDAsMCwxMjMsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwKLSAgICAxMTYsMzIsOTcsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsNDAsNCwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsMjAsMCwwLDAsOTgsMTE3LAotICAgIDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE1LDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQwLDIsMCwKLSAgICAwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDEwMiwxMjAsMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLAotICAgIDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNSwwLDAsCi0gICAgMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwKLSAgICAxMDUsMTEwLDk1LDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDc5LDIsMCwwLDExNSw4LAotICAgIDAsMCwwLDAsMSwxNSwxLDE4LDEsMTIsMSwxMTcsNTIsMCwwLDAsCi0gICAgOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LAotICAgIDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LAotICAgIDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTksMTE0LDk3LAotICAgIDExMiwxMTIsMTAxLDExNCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwKLSAgICAxMTQsOTcsMTEyLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsCi0gICAgMTE3LDI1LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwKLSAgICAwLDAsMCw0MCwxLDAsMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTcsMCwwLDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwKLSAgICA5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3NywyLDAsMCwxMTUsNiwwLDAsCi0gICAgMCwwLDIsMTgsNSwxMywxLDExNywxNywwLDAsMCw5NSwxMTQsMTAxLDExMywKLSAgICAxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMywwLAotICAgIDAsMCwxMTUsMzUsMCwwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsCi0gICAgMTAwLDIsMCwxMzQsMCwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwKLSAgICAwLDAsMTMxLDIsMCwxLDEyNCwxLDAsODMsNDAsMywwLDAsMCwxMTcsCi0gICAgNDcsMCwwLDAsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LDExMSwxMTQsMzIsMTE2LDExMSwKLSAgICAzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwKLSAgICAxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICA0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwwLDAsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNSw0NSwwLDExNiwyLDAsMTAwLAotICAgIDEsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwxMDAsMiwwLDEyNCwxLAotICAgIDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LDAsMCwxMjQsMCwwLAotICAgIDEyNCwxLDAsMTMxLDIsMCw4Myw0MCwzLDAsMCwwLDc4LDExNywyNSwwLAotICAgIDAsMCwxMjMsMTI1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsMTAyLDExNCwKLSAgICAxMTEsMTIyLDEwMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsCi0gICAgMTA5LDExMiwxMTcsOSwwLDAsMCwxMDUsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLAotICAgIDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDQwLDIsMCwwLDAsCi0gICAgMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwxLDAsMCwwLDExNywzLDAsMCwwLAotICAgIDEwMiwxMjAsMTEwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyNCwwLDAsMCw5NSwKLSAgICAxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LAotICAgIDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDkwLDIsMCwwLDExNSw4LDAsMCwwLAotICAgIDAsMSwxNSwxLDE4LDEsMTIsMSwxMTcsNTAsMCwwLDAsOTUsMTE0LDEwMSwKLSAgICAxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0Niw2MCwxMDgsCi0gICAgMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwKLSAgICA5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MCwKLSAgICAxLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExOSwxMTQsOTcsMTEyLDQwLDIsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsMTAyLDEyMCwxMTAsMTE3LDI0LDAsMCwwLAotICAgIDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwxLDAsCi0gICAgMCwwLDExNywzLDAsMCwwLDEwMiwxMjAsMTEwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLAotICAgIDAsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCw4OCwyLDAsMCwxMTUsNiwwLDAsMCwwLDIsMTgsNSwxMywxLAotICAgIDExNywxNiwwLDAsMCw5NSwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDk5LDIsMCwwLDAsMCwwLDAsMCw1LDAsCi0gICAgMCwwLDUsMCwwLDAsNjcsMCwwLDAsMTE1LDg3LDAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsOTIsMiwwLDEyNSwyLAotICAgIDAsMTI1LDMsMCwxMjQsMiwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsODMsMCwKLSAgICAxMTYsMiwwLDEyNCwzLDAsMTMxLDEsMCwxMTQsODMsMCwxMDAsMSwwLDEyNSwKLSAgICA0LDAsMTE2LDMsMCwxMDYsNCwwLDEyNCw0LDAsMTA2LDUsMCwxMjQsMywKLSAgICAwLDEwMCwyLDAsMjUsMTMxLDEsMCwxMTYsNiwwLDEzMSwyLDAsMSwxMTAsCi0gICAgMCwwLDEyNCwyLDAsODMsNDAsNCwwLDAsMCwxMTcsODYsMCwwLDAsCi0gICAgODQsMTE0LDEyMSwzMiwxMTYsMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwzMiw5NywzMiwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLAotICAgIDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTgsMTIxLAotICAgIDMyLDEwMCwxMDEsMTA4LDEwMSwxMDMsOTcsMTE2LDEwNSwxMTAsMTAzLDMyLDExNiwxMTEsMTAsMzIsCi0gICAgMzIsMzIsMzIsMTE1LDEwMSwxMDgsMTAyLDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQwLDQxLDQ2LDExNyw0NCwwLDAsMCw3OCwxMTEsMTE2LDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLAotICAgIDExNCwxMjEsMzIsMTIzLDEyNSw1OCwzMiwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDEwNSwwLDAsMCwwLDc4LDQwLDcsMCwKLSAgICAwLDAsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywzLDAsMCwwLAotICAgIDEwOCwxMDEsMTEwLDExNyw5LDAsMCwwLDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLAotICAgIDExNSwxMTcsNCwwLDAsMCwxMTksOTcsMTE0LDExMCwxMTcsNiwwLDAsMCwxMDIsCi0gICAgMTExLDExNCwxMDksOTcsMTE2LDExNywxMywwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDg3LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsNDAsNSwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSwxMTcsMywwLDAsMCwxMDksCi0gICAgMTE1LDEwMyw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNywKLSAgICAwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgMTE1LDEwNCwxMDUsMTA5LDk5LDIsMCwwLDExNSwxMCwwLDAsMCwwLDYsMjEsCi0gICAgMSwyNCwxLDYsMSwzMiwxLDExNywxNywwLDAsMCw5NSwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwNCwxMDUsMTA5LDk5LDEsMCwKLSAgICAwLDAsMCwwLDAsMCwxLDAsMCwwLDYsMCwwLDAsNjYsMCwKLSAgICAwLDAsMTE1LDE3MywwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwKLSAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsCi0gICAgMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLAotICAgIDQsMCwxMDAsMTQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDEsMCwxMzEsMSwKLSAgICAwLDkwLDcsMCwxMDEsNCwwLDEwMSw4LDAsMTAxLDksMCwxMDEsMTAsMCwKLSAgICAxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDExLDAsMTAxLDQsMCwxMDEsMTAsMCwxMDAsOCwKLSAgICAwLDEwMCw5LDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTIsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDEzLDAsMTAxLDQsMCwxMDEsMTAsMCwxMDAsMTIsCi0gICAgMCwxMDAsMTMsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxNCwwLAotICAgIDEwMCwxNCwwLDgzLDQwLDE1LDAsMCwwLDExNywxNSwwLDAsMCw2NiwxMTcsCi0gICAgMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDE0NCwwLAotICAgIDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDMyLDEwMiwxMTEsMTE0LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw2NSwxMDgsCi0gICAgMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiw5NywxMTQsMTAxLDMyLDEwMSwxMDUsCi0gICAgMTE2LDEwNCwxMDEsMTE0LDMyLDk5LDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMTQsMzIsMTE1LDExNiwKLSAgICA5NywxMTYsMTA1LDk5LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSwzMiwxMTYsMTExLDMyLAotICAgIDk3LDExOCwxMTEsMTA1LDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsMzIsMTE2LAotICAgIDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDExNiwxMDUsOTcsMTE2LAotICAgIDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwxMDgsOTcsMTE1LDExNSw0NiwxMCwxMCwzMiwzMiwKLSAgICAzMiwzMiw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLAotICAgIDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwKLSAgICAwLDAsMTI0LDEsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDAsMiwwLDAsCi0gICAgMCw3OCwxMTcsMjQsMCwwLDAsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMzksCi0gICAgMTIzLDEyNSwzOSwzMiw0MCw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCw0MSw2Miw0MCwKLSAgICAyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LAotICAgIDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsNDAsMiwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw2LDAsMCwwLDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwKLSAgICAxMjUsMiwwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywyNywwLDAsMCwKKyAgICAzMiw3OCw5OSwyLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCw1LAorICAgIDAsMCwwLDMxLDAsMCwwLDExNSw4MywwLDAsMCwxMjQsMSwwLDEwMCwKKyAgICAwLDAsMTA3LDgsMCwxMTQsMjQsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDEsCisgICAgMCwxMTAsNDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMDcsMywwLAorICAgIDExNCw2NCwwLDExNiwxLDAsMTAwLDEsMCwxMjQsMSwwLDIyLDEwMCwyLDAsCisgICAgMTI0LDEsMCwxMzEsMSwxLDEzMCwxLDAsMTEwLDAsMCwxMzYsMCwwLDEyNCwKKyAgICAwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTQyLDIsMCw4Myw0MSwKKyAgICAzLDc4LDEyMiwyMywxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDk3LDExMCwxMTAsMTExLAorICAgIDExNiwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDMyLDM3LDExNSwxMTQsNjcsMCwwLDAsCisgICAgNDEsMiwxMTQsNjcsMCwwLDAsMjE4LDExLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksCisgICAgMTE0LDExNCwxMTEsMTE0LDQxLDQsMTE0LDcxLDAsMCwwLDExNCw2NywwLDAsMCwKKyAgICAxMTQsODAsMCwwLDAsMTE0LDEwOCwwLDAsMCw0MSwxLDIxOCw2LDEwOSwxMDEsCisgICAgMTE2LDEwNCwxMTEsMTAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxOSwKKyAgICA5NSw5OSwxMDQsMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwKKyAgICAxMTIsMTAxLDExNCwyMiwyLDAsMCwxMTUsMTAsMCwwLDAsMCwxLDEyLDEsCisgICAgMTIsMSwxNSwxLDI1LDEsMTIyLDQwLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCwKKyAgICA5NywxMDksMTAxLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw5NSw5OSwxMDQsCisgICAgMTAxLDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCwKKyAgICA0MSwxLDExNCw2NSwwLDAsMCw0MSwyLDExNCwxNTUsMCwwLDAsMTE0LDE1NiwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCw0MSwxLDExNCwxNTUsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDExLDk1LDk5LDEwNCwxMDEsOTksMTA3LDk1LDExMCw5NywxMDksCisgICAgMTAxLDE0LDIsMCwwLDExNSw2LDAsMCwwLDAsOCwyMSw2LDEzLDEsCisgICAgMTE0LDE1NywwLDAsMCw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLAorICAgIDAsMCwzLDAsMCwwLDMsMCwwLDAsMTE1LDM1LDAsMCwwLDEzNSwKKyAgICAwLDAsMTAyLDEsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsMSwKKyAgICAwLDExNiwwLDAsMTI0LDEsMCwxMzYsMCwwLDEzMSwyLDAsMSwxMjQsMSwKKyAgICAwLDgzLDQxLDMsMTIyLDQ5LDY4LDEwMSw5OSwxMTEsMTE0LDk3LDExNiwxMTEsMTE0LDMyLAorICAgIDExNiwxMTEsMzIsMTE4LDEwMSwxMTQsMTA1LDEwMiwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LAorICAgIDEwOSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsOTgsMTE3LAorICAgIDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsNDYsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDIsMCwwLDAsNCwwLDAsMCwxOSwwLDAsMCwxMTUsNTgsMCwwLAorICAgIDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDcsMCwxMTQsNDUsMCwKKyAgICAxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTAwLAorICAgIDIsMCwxMjQsMSwwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLAorICAgIDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsODMsNDEsMyw3OCwxMjIsMjksCisgICAgMTIzLDMzLDExNCwxMjUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiw5OCwxMTcsCisgICAgMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsNjcsMCwKKyAgICAwLDAsNDEsNCwxMTQsNywwLDAsMCwyMTgsMjAsOTgsMTE3LDEwNSwxMDgsMTE2LAorICAgIDEwNSwxMTAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNCwKKyAgICAxNTQsMCwwLDAsMTE0LDQ3LDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLAorICAgIDIxOCw4LDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MSwxLDIxOCwzLDEwMiwxMjAsCisgICAgMTEwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyNSw5NSwxMTQsMTAxLAorICAgIDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExOSwKKyAgICAxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDM0LDIsMCwwLDExNSw4LDAsMCwwLDAsCisgICAgMSwxNSwxLDE4LDEsMTIsMSwxMjIsNTIsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCisgICAgMTAxLDExNSw5NSw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw0Niw2MCwxMDgsMTExLDk5LDk3LAorICAgIDEwOCwxMTUsNjIsNDYsOTUsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSw5NSw5OCwxMTcsCisgICAgMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMTksMTE0LDk3LDExMiwxMTIsMTAxLDExNCw0MSwxLDExNCwKKyAgICA2NSwwLDAsMCw0MSwyLDExNCwxNjAsMCwwLDAsMTE0LDE2MSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCw0MSwxLDExNCwxNjAsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMjE4LDE3LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwKKyAgICAxMDgsMTE2LDEwNSwxMTAsMzIsMiwwLDAsMTE1LDYsMCwwLDAsMCwyLDE4LAorICAgIDUsMTMsMSwxMTQsMTYyLDAsMCwwLDk5LDEsMCwwLDAsMCwwLDAsCisgICAgMCwyLDAsMCwwLDMsMCwwLDAsMywwLDAsMCwxMTUsMzUsMCwKKyAgICAwLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwKKyAgICAwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMSwwLDEzNiwwLDAsMTMxLDIsMCwKKyAgICAxLDEyNCwxLDAsODMsNDEsMywxMjIsNDcsNjgsMTAxLDk5LDExMSwxMTQsOTcsMTE2LAorICAgIDExMSwxMTQsMzIsMTE2LDExMSwzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwKKyAgICAzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0Niw5OSwyLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCw0LDAsMCwwLDE5LDAsMCwwLDExNSw1OCwwLAorICAgIDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNSw0NSwKKyAgICAwLDExNiwyLDAsMTAwLDEsMCwxMDYsMywwLDEyNCwxLDAsMTMxLDEsMCwKKyAgICAxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LAorICAgIDAsMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MSwzLDc4LDEyMiwKKyAgICAyNywxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDEwMiwKKyAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNCw2NywwLDAsCisgICAgMCw0MSw0LDExNCwxMDYsMCwwLDAsMjE4LDksMTA1LDExNSw5NSwxMDIsMTE0LDExMSwKKyAgICAxMjIsMTAxLDExMCwxMTQsMTU0LDAsMCwwLDExNCw0NywwLDAsMCw0MSwyLDExNCwKKyAgICA3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDQxLDEsMTE0LDE2MCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjQsOTUsMTE0LDEwMSwxMTMsCisgICAgMTE3LDEwNSwxMTQsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw5NSwxMTksMTE0LDk3LAorICAgIDExMiwxMTIsMTAxLDExNCw0NSwyLDAsMCwxMTUsOCwwLDAsMCwwLDEsMTUsCisgICAgMSwxOCwxLDEyLDEsMTIyLDUwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsCisgICAgOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAorICAgIDQ2LDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwKKyAgICAxMTAsOTUsMTE5LDExNCw5NywxMTIsMTEyLDEwMSwxMTQsNDEsMSwxMTQsNjUsMCwwLDAsCisgICAgNDEsMiwxMTQsMTYwLDAsMCwwLDExNCwxNjQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsNDEsMSwxMTQsMTYwLDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNiw5NSwKKyAgICAxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDQzLAorICAgIDIsMCwwLDExNSw2LDAsMCwwLDAsMiwxOCw1LDEzLDEsMTE0LDE2NSwKKyAgICAwLDAsMCw5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKKyAgICA0LDAsMCwwLDY3LDAsMCwwLDExNSw4NywwLDAsMCwxMjQsMCwwLAorICAgIDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDkyLDIsMCwxMjUsMiwwLDEyNSwKKyAgICAzLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDgzLDAsMTE2LDEsCisgICAgMCwxMjQsMywwLDEzMSwxLDAsMTE0LDgzLDAsMTAwLDIsMCwxMjUsNCwwLAorICAgIDExNiwyLDAsMTA2LDMsMCwxMjQsNCwwLDEwNiw0LDAsMTI0LDMsMCwxMDAsCisgICAgMywwLDI1LDEzMSwxLDAsMTE2LDUsMCwxMzEsMiwwLDEsMTEwLDAsMCwKKyAgICAxMjQsMiwwLDgzLDQxLDQsMTIyLDE1NSw4NCwxMTQsMTIxLDMyLDExNiwxMTEsMzIsMTAyLAorICAgIDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCwxMjEsMzIsMTAwLDEwMSwxMDgsMTAxLDEwMyw5NywxMTYsCisgICAgMTA1LDExMCwxMDMsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMTUsMTAxLDEwOCwxMDIsNDYsCisgICAgMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsNDEsNDYsMTAsMTAsCisgICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsCisgICAgMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLDMyLDEwNSwxMTAsCisgICAgMzIsMTAyLDk3LDExOCwxMTEsMTE0LDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDQwLDQxLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDc4LDEyMiw0NCw3OCwxMTEsMTE2LDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwNSwxMTAsMTAzLDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsMzIsMTIzLDEyNSwKKyAgICA1OCwzMiwxMDksMTA1LDExNSwxMTUsMTA1LDExMCwxMDMsMzIsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAorICAgIDk1LDk1LDExNCw4NCwwLDAsMCw0MSw2LDIxOCwxMSwxMDIsMTA1LDExMCwxMDAsOTUsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTQsMzEsMCwwLDAsMjE4LDksOTUsMTE5LDk3LAorICAgIDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDIxOCw0LDExOSw5NywxMTQsMTEwLDExNCw0NywwLDAsCisgICAgMCwyMTgsMTMsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw4Nyw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLAorICAgIDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMjE4LDYsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCwyMTgsOCwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDIxOCwzLAorICAgIDEwOSwxMTUsMTAzLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxNyw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgOTUsMTE1LDEwNCwxMDUsMTA5LDU0LDIsMCwwLDExNSwxMCwwLDAsMCwwLDEwLAorICAgIDIxLDEsMjQsMSw2LDEsMzIsMSwxMTQsMTczLDAsMCwwLDk5LDIsMCwKKyAgICAwLDAsMCwwLDAsMCw1LDAsMCwwLDMsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDkzLDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMjQsMCwwLAorICAgIDEzMSwyLDAsMTI1LDIsMCwxMTYsMSwwLDEyNCwyLDAsMTMxLDEsMCwxMjUsCisgICAgMywwLDEyNCwxLDAsMTE2LDIsMCwxMDYsMywwLDEwNyw2LDAsMTE0LDc5LAorICAgIDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMjUsMTI1LDQsMCwxMjQsMywKKyAgICAwLDEwNiw0LDAsMTI0LDQsMCwxMzEsMSwwLDEsMTE2LDIsMCwxMDYsMywKKyAgICAwLDEyNCwxLDAsMjUsODMsMTI0LDMsMCwxMDYsNSwwLDEzMSwwLDAsODMsCisgICAgMTAwLDEsMCw4Myw0MSwyLDEyMiwxMjgsNzYsMTExLDk3LDEwMCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDMyLDEwNSwxMTAsMTE2LDExMSwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMDUsMTE2LAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwKKyAgICAxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCwKKyAgICA0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAxLDEyMCwKKyAgICAxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywKKyAgICAxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzgsNDEsNiwyMTgsMTYsMTE1LDExMiwxMDEsCisgICAgOTksOTUsMTAyLDExNCwxMTEsMTA5LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMjE4LDEyLDk1LAorICAgIDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMTE0LDcsMCwwLDAsCisgICAgMTE0LDczLDAsMCwwLDIxOCw0LDEwMSwxMjAsMTAxLDk5LDIxOCw0LDEwOCwxMTEsOTcsCisgICAgMTAwLDQxLDUsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMjE4LDQsMTE1LAorICAgIDExMiwxMDEsOTksMjE4LDcsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDIxOCw2LDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCwxNyw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksNzEsMiwwLDAsMTE1LDE0LDAsMCwwLDAsCisgICAgNiwxNSwxLDEyLDEsMTUsMSwxMywxLDEzLDEsMTEsMiwxMTQsMTgxLDAsCisgICAgMCwwLDk5LDQsMCwwLDAsMCwwLDAsMCwxMSwwLDAsMCwxOSwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMjU1LDEsMCwwLDEwNSwwLDAsMTI1LAorICAgIDQsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMzEsMCwxMjQsMiwKKyAgICAwLDEyNCw0LDAsMTAwLDIsMCw2MCwxMTAsNiwwLDEwMCwzLDAsMTI1LDIsCisgICAgMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwxMTQsNjIsMCwxMjQsMywwLAorICAgIDEyNCw0LDAsMTAwLDQsMCw2MCwxMTAsMCwwLDEyNCwwLDAsMTAwLDEsMCwKKyAgICAxMDAsNSwwLDEzMywyLDAsMjUsMTI1LDUsMCwxMjQsMCwwLDEwMCw1LDAsCisgICAgMTAwLDYsMCwxMzMsMiwwLDI1LDEyNSw2LDAsMTI0LDAsMCwxMDAsNiwwLAorICAgIDEwMCw3LDAsMTMzLDIsMCwyNSwxMjUsNywwLDEyNCw1LDAsMTE2LDAsMCwKKyAgICAxMDcsMywwLDExNCwxNzEsMCwxMDAsOCwwLDEwNiwxLDAsMTI0LDIsMCwxMjQsCisgICAgNSwwLDEzMSwyLDAsMTI1LDgsMCwxMTYsMiwwLDEwMCw5LDAsMTI0LDgsCisgICAgMCwxMzEsMiwwLDEsMTE2LDMsMCwxMjQsOCwwLDEyNCw0LDAsMTQxLDEsCisgICAgMCwxMzAsMSwwLDExMCwxMjIsMCwxMTYsNCwwLDEyNCw2LDAsMTMxLDEsMCwKKyAgICAxMDAsNSwwLDEwNywzLDAsMTE0LDIzMiwwLDEwMCwxMCwwLDEwNiwxLDAsMTI0LAorICAgIDIsMCwxMzEsMSwwLDEyNSw4LDAsMTE2LDIsMCwxMDAsOSwwLDEyNCw4LAorICAgIDAsMTMxLDIsMCwxLDExNiw1LDAsMTI0LDgsMCwxMzEsMSwwLDEzMCwxLAorICAgIDAsMTEwLDYxLDAsMTE2LDQsMCwxMjQsNywwLDEzMSwxLDAsMTAwLDUsMCwKKyAgICAxMDcsMywwLDExNCwzNywxLDEwMCwxMSwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsCisgICAgMSwwLDEyNSw4LDAsMTE2LDIsMCwxMDAsOSwwLDEyNCw4LDAsMTMxLDIsCisgICAgMCwxLDExNiw1LDAsMTI0LDgsMCwxMzEsMSwwLDEzMCwxLDAsMTEwLDAsCisgICAgMCwxMjQsMSwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMjQxLDEsMTIxLDIwLDAsCisgICAgMTE2LDYsMCwxMjQsMSwwLDEwMCwxMiwwLDI1LDEzMSwxLDAsMTI1LDksMCwKKyAgICA4NywxMTAsMTgsMCw0LDExNiw3LDAsMTA3LDEwLDAsMTE0LDg5LDEsMSwxLAorICAgIDEsODksMTEwLDY1LDAsODgsMTE2LDgsMCwxMjQsNiwwLDEzMSwxLDAsMTI0LAorICAgIDksMCwxMDcsMywwLDExNCwxNTQsMSwxMDAsMTMsMCwxMDYsMSwwLDEyNCwyLAorICAgIDAsMTMxLDEsMCwxMjUsOCwwLDExNiwyLDAsMTAwLDksMCwxMjQsOCwwLAorICAgIDEzMSwyLDAsMSwxMTYsMywwLDEyNCw4LDAsMTI0LDQsMCwxNDEsMSwwLAorICAgIDEzMCwxLDAsMTEwLDAsMCwxMjEsMTgsMCwxMjQsMSwwLDEwMCwxNCwwLDI1LAorICAgIDEwMCwxNSwwLDY0LDEyNSwxMCwwLDg3LDExMCwxOCwwLDQsMTE2LDcsMCwxMDcsCisgICAgMTAsMCwxMTQsMTkyLDEsMSwxLDEsODksMTEzLDI0MSwxLDg4LDExNiw4LDAsCisgICAgMTI0LDcsMCwxMzEsMSwwLDEyNCwxMCwwLDEwNywzLDAsMTE0LDI0MSwxLDExNiwKKyAgICAzLDAsMTAwLDEzLDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDQsCisgICAgMCwxNDEsMSwwLDEzMCwxLDAsMTEzLDI0MSwxLDExMCwwLDAsMTI0LDAsMCwKKyAgICAxMDAsNywwLDEwMCwxLDAsMTMzLDIsMCwyNSw4Myw0MSwxNiw5NywxMjIsMSwKKyAgICAwLDAsODYsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDQsCisgICAgMTAxLDk3LDEwMCwxMDEsMTE0LDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNSwKKyAgICAxMTUsMTAxLDEwMCw0NSwxMDUsMTEwLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLAorICAgIDk3LDEwMyw5NywxMDUsMTEwLDExNSwxMTYsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTUsCisgICAgMTE2LDk3LDExNiwxMTUsMzIsNDAsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMDMsMTA1LDExOCwKKyAgICAxMDEsMTEwLDQxLDMyLDk3LDExMCwxMDAsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMTA1LDExMCwKKyAgICAxMDMsMzIsMTE2LDEwNCwxMDEsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTE2LAorICAgIDEwNCw5NywxMTYsMzIsOTksOTcsMTEwLDMyLDk4LDEwMSwzMiw5OSwxMTEsMTA5LDExMiwxMDUsCisgICAgMTA4LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDQwLDQxLAorICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsMzIsMTExLDExNiwxMDQsMTAxLDExNCwKKyAgICAzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE3LAorICAgIDExNSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAxLDExMCwxMDQsOTcsMTEwLDk5LDEwMSwzMiwxMDEsCisgICAgMTE0LDExNCwxMTEsMTE0LDMyLDExNCwxMDEsMTEyLDExMSwxMTQsMTE2LDEwNSwxMTAsMTAzLDQ2LDEwLAorICAgIDEwLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LAorICAgIDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTA5LDk3LDEwMywxMDUsOTksMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwKKyAgICAzMiwxMDUsMTE1LDMyLDEwNSwxMTAsOTksMTExLDExNCwxMTQsMTAxLDk5LDExNiwzMiwxMTEsMTE0LAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwxMTUsCisgICAgMTAsMzIsMzIsMzIsMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiwxMTYsMTExLDMyLDk4LDEwMSwKKyAgICAzMiwxMTUsMTE2LDk3LDEwOCwxMDEsNDYsMzIsNjksNzksNzAsNjksMTE0LDExNCwxMTEsMTE0LAorICAgIDMyLDEwNSwxMTUsMzIsMTE0LDk3LDEwNSwxMTUsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDUsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwKKyAgICAxMDAsMzIsMTE2LDExMSwzMiw5OCwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExNCwxMTcsMTEwLAorICAgIDk5LDk3LDExNiwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDc4LDExNCw2NywwLAorICAgIDAsMCwxMjIsMTAsNjAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNjIsMTE0LDM1LAorICAgIDAsMCwwLDExNCwxMiwwLDAsMCwyMzMsOCwwLDAsMCwyMzMsMTIsMCwKKyAgICAwLDAsMTIyLDMwLDk4LDk3LDEwMCwzMiwxMDksOTcsMTAzLDEwNSw5OSwzMiwxMTAsMTE3LAorICAgIDEwOSw5OCwxMDEsMTE0LDMyLDEwNSwxMTAsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLAorICAgIDExNCwxMjUsMTIyLDIsMTIzLDEyNSwxMjIsNDMsMTE0LDEwMSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiwKKyAgICA2OSw3OSw3MCwzMiwxMTksMTA0LDEwNSwxMDgsMTAxLDMyLDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsCisgICAgMTAzLDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsMTA1LDExMCwzMiwxMjMsCisgICAgMzMsMTE0LDEyNSwxMjIsNDgsMTE0LDEwMSw5Nyw5OSwxMDQsMTAxLDEwMCwzMiw2OSw3OSw3MCwKKyAgICAzMiwxMTksMTA0LDEwNSwxMDgsMTAxLDMyLDExNCwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExNSwKKyAgICAxMDUsMTIyLDEwMSwzMiwxMTEsMTAyLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTA1LDExMCwKKyAgICAzMiwxMjMsMzMsMTE0LDEyNSwyMTgsNSwxMDksMTE2LDEwNSwxMDksMTAxLDEyMiwyNiw5OCwxMjEsCisgICAgMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDUsMTE1LDMyLDExNSwxMTYsOTcsMTA4LDEwMSwzMiwKKyAgICAxMDIsMTExLDExNCwzMiwxMjMsMzMsMTE0LDEyNSwyMTgsNCwxMTUsMTA1LDEyMiwxMDEsMTA4LDMsCisgICAgMCwwLDAsMjU1LDEyNywyNTUsMTI3LDMsMCw0MSw5LDIxOCwxMiw3Nyw2NSw3MSwKKyAgICA3Myw2Nyw5NSw3OCw4NSw3Nyw2Niw2OSw4MiwxMTQsNDcsMCwwLDAsMTE0LDE1MywKKyAgICAwLDAsMCwxMTQsMTU0LDAsMCwwLDExNCwzMSwwLDAsMCwyMTgsOCw2OSwKKyAgICA3OSw3MCw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDE0LDAsMCwwLDExNCw3OSwwLDAsCisgICAgMCwxMTQsMTksMCwwLDAsNDEsMTEsMTE0LDUzLDAsMCwwLDIxOCwxMiwxMTUsCisgICAgMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTQsNjcsMCwwLDAsCisgICAgMTE0LDM1LDAsMCwwLDkwLDExLDEwMSwxMjAsOTksOTUsMTAwLDEwMSwxMTYsOTcsMTA1LAorICAgIDEwOCwxMTUsOTAsNSwxMDksOTcsMTAzLDEwNSw5OSw5MCwxMywxMTQsOTcsMTE5LDk1LDExNiwKKyAgICAxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsOTAsOCwxMTQsOTcsMTE5LDk1LDExNSwxMDUsCisgICAgMTIyLDEwMSwxMTQsMTUyLDAsMCwwLDIxOCwxMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LAorICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMjE4LDExLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDEwNSwKKyAgICAxMjIsMTAxLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDIxOCwyNSw5NSwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OCwxMjEsMTE2LAorICAgIDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMDQsMTAxLDk3LDEwMCwxMDEsMTE0LDg3LDIsMCwwLAorICAgIDExNSw3NiwwLDAsMCwwLDExLDYsMSwxMiwxLDEzLDMsNiwxLDEyLAorICAgIDEsMTMsMSwxNiwxLDE2LDEsMTYsMSwxMiwxLDE4LDEsMTMsMSwxOCwKKyAgICAxLDE4LDEsMTUsMSwxMywxLDE1LDEsMTgsMSwxNSwxLDEzLDEsMTUsCisgICAgMSwxMiwxLDMsMSwyMCwxLDEzLDEsNSwyLDE4LDEsMTUsMSwxMywKKyAgICAxLDE4LDEsMywxLDE4LDEsMTMsMSw1LDIsMTgsMSwxNSwxLDE1LAorICAgIDEsMTE0LDE5MSwwLDAsMCw5OSw0LDAsMCwwLDAsMCwwLDAsNSwKKyAgICAwLDAsMCw2LDAsMCwwLDY3LDAsMCwwLDExNSwxMTUsMCwwLDAsCisgICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwwLDAsMTMxLDEsMCwxMjUsNCwwLDExNiwKKyAgICAyLDAsMTI0LDQsMCwxMTYsMywwLDEzMSwyLDAsMTE0LDc4LDAsMTE2LDQsCisgICAgMCwxMDAsMSwwLDEyNCwyLDAsMTMxLDIsMCwxLDEyNCwzLDAsMTAwLDIsCisgICAgMCwxMDcsOSwwLDExNCw3NCwwLDExNiw1LDAsMTA2LDYsMCwxMjQsNCwwLAorICAgIDEyNCwzLDAsMTMxLDIsMCwxLDExMCwwLDAsMTI0LDQsMCw4MywxMTYsNywKKyAgICAwLDEwMCwzLDAsMTA2LDgsMCwxMjQsMiwwLDEzMSwxLDAsMTAwLDQsMCwKKyAgICAxMjQsMSwwLDEwMCw1LDAsMTI0LDIsMCwxMzEsMSwyLDEzMCwxLDAsMTAwLAorICAgIDIsMCw4Myw0MSw2LDEyMiw2MCw2NywxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwzMiw5OCwKKyAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiw5NywxMTUsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwKKyAgICAxMTAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTUsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsCisgICAgOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTA0LDEwMSw5NywxMDAsMTAxLDExNCwKKyAgICA0MCw0MSw0NiwxMjIsMjEsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LAorICAgIDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw3OCwxMjIsMjMsNzgsMTExLDExMCwKKyAgICA0NSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTA1LDExMCwzMiwKKyAgICAxMjMsMzMsMTE0LDEyNSwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDQxLDksCisgICAgMjE4LDcsMTA5LDk3LDExNCwxMTUsMTA0LDk3LDEwOCw5MCw1LDEwOCwxMTEsOTcsMTAwLDExNSwKKyAgICAyMTgsMTAsMTA1LDExNSwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwyMTgsMTAsOTUsOTksCisgICAgMTExLDEwMCwxMDEsOTUsMTE2LDEyMSwxMTIsMTAxLDExNCwxNTMsMCwwLDAsMTE0LDEwNiwwLAorICAgIDAsMCw5MCwxNiw5NSwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsOTUsMTAyLDEwNSwxMDgsMTAxLAorICAgIDExMCw5NywxMDksMTAxLDExNCwxNTQsMCwwLDAsMTE0LDQ3LDAsMCwwLDQxLDUsCisgICAgMTE0LDUzLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMTQxLDAsMCwwLDExNCwKKyAgICAxNDIsMCwwLDAsMjE4LDQsOTksMTExLDEwMCwxMDEsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDE3LDk1LDk5LDExMSwxMDksMTEyLAorICAgIDEwNSwxMDgsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDE0MiwyLDAsMCwKKyAgICAxMTUsMTYsMCwwLDAsMCwyLDE1LDEsMTUsMSwxMywxLDEyLDEsMTksCisgICAgMSw0LDIsMTgsMSwxMTQsMTk2LDAsMCwwLDExNCw4NCwwLDAsMCw5OSwKKyAgICAzLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSw3NiwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTMxLAorICAgIDEsMCwxMjUsMywwLDEyNCwzLDAsMTA2LDIsMCwxMTYsMywwLDEyNCwxLAorICAgIDAsMTMxLDEsMCwxMzEsMSwwLDEsMTI0LDMsMCwxMDYsMiwwLDExNiwzLAorICAgIDAsMTI0LDIsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMjQsMywwLDEwNiwyLAorICAgIDAsMTE2LDQsMCwxMDYsNSwwLDEyNCwwLDAsMTMxLDEsMCwxMzEsMSwwLAorICAgIDEsMTI0LDMsMCw4Myw0MSwxLDEyMiw4MCw2NywxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSwKKyAgICAzMiw5NywzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTA1LAorICAgIDExMCwxMTYsMTExLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMTEsMTE0LAorICAgIDMyLDExOSwxMTQsMTA1LDExNiwxMDUsMTEwLDEwMywzMiwxMTEsMTE3LDExNiwzMiwxMTYsMTExLDMyLAorICAgIDk3LDMyLDk4LDEyMSwxMTYsMTAxLDQ1LDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDEwMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwxMDIsMTA1LDEwOCwxMDEsNDYsNDEsNiwyMTgsOSw5OCwxMjEsMTE2LAorICAgIDEwMSw5NywxMTQsMTE0LDk3LDEyMSwxMTQsMTg2LDAsMCwwLDIxOCw2LDEwMSwxMjAsMTE2LAorICAgIDEwMSwxMTAsMTAwLDExNCwxNywwLDAsMCwxMTQsMTkyLDAsMCwwLDkwLDUsMTAwLAorICAgIDExNywxMDksMTEyLDExNSw0MSw0LDExNCwxOTUsMCwwLDAsMTE0LDE4NCwwLDAsMCwKKyAgICAxMTQsMTkwLDAsMCwwLDExNCw1MywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsOTUsOTksMTExLDEwMCwxMDEsCisgICAgOTUsMTE2LDExMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxNTQsMiwwLDAsCisgICAgMTE1LDEwLDAsMCwwLDAsMywxMiwxLDE5LDEsMTksMSwyMiwxLDExNCwKKyAgICAxOTksMCwwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDUsMCwwLAorICAgIDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsODksMCwwLDAsMTAwLDEsCisgICAgMCwxMDAsMiwwLDEwOCwwLDAsMTI1LDEsMCwxMTYsMSwwLDEwNiwyLDAsCisgICAgMTI0LDAsMCwxMzEsMSwwLDEwNiwzLDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwKKyAgICA0LDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsMTE2LDEsMCwxMDYsNSwKKyAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMzEsMiwwLDEyNSw0LDAsMTI0LDQsMCwKKyAgICAxMDYsNiwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMywwLDEwMCwxLDAsMjUsCisgICAgMTMxLDEsMCwxMzEsMSwwLDgzLDQxLDQsMTIyLDEyMSw2OCwxMDEsOTksMTExLDEwMCwKKyAgICAxMDEsMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsCisgICAgMTE2LDEwNSwxMTAsMTAzLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsCisgICAgMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTUsMTE2LDExNCwxMDUsMTEwLDEwMyw0NiwxMCwxMCwzMiwzMiwzMiwzMiw4NSwxMTAsMTA1LAorICAgIDExOCwxMDEsMTE0LDExNSw5NywxMDgsMzIsMTEwLDEwMSwxMTksMTA4LDEwNSwxMTAsMTAxLDMyLDExNSwKKyAgICAxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwzMiwxMDUsMTE1LDMyLDExNywxMTUsMTAxLDEwMCwzMiwxMDUsCisgICAgMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCwxMDEsOTksMTExLDEwMCwxMDUsMTEwLDEwMyw0NiwxMCwKKyAgICAzMiwzMiwzMiwzMiwxMTQsODQsMCwwLDAsNzgsODQsNDEsNywyMTgsOCwxMTYsCisgICAgMTExLDEwNywxMDEsMTEwLDEwNSwxMjIsMTAxLDExNCw0OSwwLDAsMCw5MCw3LDY2LDEyMSwKKyAgICAxMTYsMTAxLDExNSw3Myw3OSw5MCw4LDExNCwxMDEsOTcsMTAwLDEwOCwxMDUsMTEwLDEwMSw5MCwKKyAgICAxNSwxMDAsMTAxLDExNiwxMDEsOTksMTE2LDk1LDEwMSwxMTAsOTksMTExLDEwMCwxMDUsMTEwLDEwMywKKyAgICA5MCwyNSw3MywxMTAsOTksMTE0LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTA4LDc4LDEwMSwxMTksCisgICAgMTA4LDEwNSwxMTAsMTAxLDY4LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsMjE4LDYsMTAwLDEwMSw5OSwKKyAgICAxMTEsMTAwLDEwMSw0MSw1LDIxOCwxMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDk4LDEyMSwKKyAgICAxMTYsMTAxLDExNSwxMTQsMjAwLDAsMCwwLDkwLDIxLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDExNCwxMDEsOTcsMTAwLDEwOCwxMDUsMTEwLDEwMSwyMTgsCisgICAgOCwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsOTAsMTUsMTEwLDEwMSwxMTksMTA4LDEwNSwKKyAgICAxMTAsMTAxLDk1LDEwMCwxMDEsOTksMTExLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMywxMDAsMTAxLDk5LDExMSwxMDAsCisgICAgMTAxLDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTY0LDIsMCwwLDExNSwxMCwwLDAsCisgICAgMCwwLDUsMTIsMSwxOCwxLDE1LDEsMTgsMSwxMTQsMjA0LDAsMCwwLAorICAgIDk5LDEsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDM1LDAsMCwKKyAgICAwLDY3LDAsMCwwLDExNSwxNSwxLDAsMCwxMTYsMCwwLDEyNCwwLDAsCisgICAgMTAwLDEsMCwxMDAsMCwwLDEzMSwzLDAsMTI1LDEsMCwxMTYsMSwwLDEyNCwKKyAgICAxLDAsMTAwLDIsMCwxMzEsMiwwLDExNCw3NCwwLDEyMSwxNywwLDEyNCwxLAorICAgIDAsMTA2LDIsMCwxMjQsMCwwLDEzMSwxLDAsODMsODcsMTEzLDc0LDAsNCwKKyAgICAxMTYsMywwLDEwNywxMCwwLDExNCw3MCwwLDEsMSwxLDg5LDExMyw3NCwwLAorICAgIDg4LDExMCwwLDAsMTIxLDEzLDAsMTI0LDAsMCwxMDYsNCwwLDEyNSwyLDAsCisgICAgODcsMTEwLDE4LDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwxMDcsMCwxLDEsCisgICAgMSw4OSwxMTAsMjksMCw4OCwxMjQsMiwwLDEwMCwwLDAsMTA3LDksMCwxMTQsCisgICAgMTM2LDAsMTE2LDYsMCwxMjQsMiwwLDEzMSwxLDAsMTA2LDIsMCwxMzEsMCwKKyAgICAwLDgzLDEyMSwxMywwLDEyNCwwLDAsMTA2LDcsMCwxMjUsMywwLDg3LDExMCwKKyAgICAyNCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsMTc1LDAsMSwxLDEsMTAwLAorICAgIDMsMCwxMjUsMywwLDg5LDExMCwxLDAsODgsMTIxLDEzLDAsMTI0LDAsMCwKKyAgICAxMDYsOCwwLDEyNSw0LDAsODcsMTEwLDU5LDAsNCwxMTYsNSwwLDEwNywxMCwKKyAgICAwLDExNCwyNTAsMCwxLDEsMSwxMjQsMSwwLDEwMCwwLDAsMTA3LDgsMCwKKyAgICAxMTQsMjMwLDAsMTAwLDQsMCwxMDYsOSwwLDEyNCwzLDAsMTMxLDEsMCw4MywKKyAgICAxMDAsNSwwLDEwNiw5LDAsMTI0LDMsMCwxMjQsMSwwLDEzMSwyLDAsODMsCisgICAgODksMTEwLDE3LDAsODgsMTAwLDYsMCwxMDYsOSwwLDEyNCwzLDAsMTI0LDQsCisgICAgMCwxMzEsMiwwLDgzLDEwMCwwLDAsODMsNDEsNyw3OCwyMTgsMTAsOTUsOTUsCisgICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwyMTgsMTEsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgOTUsMTE0LDEwMSwxMTIsMTE0LDI1MCwxLDYzLDEyMiwxMyw2MCwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMjAsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDMzLDExNCwxMjUsNDEsNjIsMTIyLDIzLDYwLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDEwMiwxMTQsMTExLDEwOSwKKyAgICAzMiwxMjMsMzMsMTE0LDEyNSw2Miw0MSwxMCwxMTQsNjIsMCwwLDAsMTE0LDYwLDAsCisgICAgMCwwLDExNCwyMDYsMCwwLDAsMjE4LDksNjksMTIwLDk5LDEwMSwxMTIsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDIxOCw4LDk1LDk1LDExNSwxMTIsMTAxLDk5LDk1LDk1LDIxOCwxNCw2NSwxMTYsCisgICAgMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNCwxNzUsMCwwLAorICAgIDAsMTE0LDU3LDAsMCwwLDIxOCw4LDk1LDk1LDEwMiwxMDUsMTA4LDEwMSw5NSw5NSwKKyAgICAxMTQsNDcsMCwwLDAsNDEsNSwxMTQsMTgwLDAsMCwwLDExNCwxNzAsMCwwLAorICAgIDAsMTE0LDE3OCwwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDEzMSwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMTIsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDE3OCwyLDAsCisgICAgMCwxMTUsNDYsMCwwLDAsMCwyLDE4LDEsMTUsNCwzLDEsMTcsMSwKKyAgICAxMywxLDgsMSwzLDEsMTMsMSwxMywxLDUsMiwxMiwxLDE2LDQsCisgICAgMywxLDEzLDEsMTMsMSwxMSwxLDMsMSwxMywxLDEzLDEsMTIsMSwKKyAgICAxMywyLDIxLDIsMTE0LDIxMiwwLDAsMCw5OSwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw1MiwKKyAgICAwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCisgICAgMSwwLDEwMCwyLDAsMTMyLDAsMCw5MCwzLDAsMTAwLDMsMCwxMDAsNCwKKyAgICAwLDEzMiwwLDAsOTAsNCwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwwLAorICAgIDkwLDUsMCwxMDAsNywwLDgzLDQxLDgsMjE4LDE3LDk1LDEwNSwxMTAsMTE1LDExNiwKKyAgICA5NywxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw5OSwyLDAsMCwKKyAgICAwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwyNSwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEyNCwKKyAgICAxLDAsMTA2LDEsMCwxMjQsMCwwLDk1LDIsMCwxMDAsMCwwLDgzLDQxLAorICAgIDEsNzgsNDEsMywyMTgsNyw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTQsMjA5LDAsCisgICAgMCwwLDIxOCw1LDk1LDExNSwxMTIsMTAxLDk5LDQxLDIsMTE0LDcxLDAsMCwwLAorICAgIDExNCwxODAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDcyLDAsMCwwLDIxNiwyLDAsMCwxMTUsNCwwLAorICAgIDAsMCwwLDEsOSwxLDEyMiwyNiw5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwKKyAgICAxMDEsMTAwLDk1LDExNSw5NywxMDIsMTAxLDEwOCwxMjEsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LAorICAgIDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDM4LDAsMCwwLDEwMCwxLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDk1LDEsMCwxMjQsMCwwLDEwNiwyLDAsMTE2LDMsCisgICAgMCwxMDYsNCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsNSwwLDYwLDEwMCwwLAorICAgIDAsODMsNDEsMiw3OCw4NCw0MSw2LDExNCwyMTUsMCwwLDAsMjE4LDEzLDk1LAorICAgIDEwNSwxMTAsMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTA1LDExMCwxMDMsMTE0LDIxNCwwLDAsCisgICAgMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwwLDAsMTE0LDY3LDAsMCwwLAorICAgIDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCw3NSwwLDAsMCwyMjAsMiwwLDAsMTE1LAorICAgIDQsMCwwLDAsMCw0LDEyLDEsMTIyLDI3LDk1LDEwNSwxMTAsMTE1LDExNiw5NywKKyAgICAxMDgsMTA4LDEwMSwxMDAsOTUsMTE1LDk3LDEwMiwxMDEsMTA4LDEyMSw0Niw5NSw5NSwxMDEsMTEwLAorICAgIDExNiwxMDEsMTE0LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsCisgICAgMCwwLDE3LDAsMCwwLDcxLDAsMCwwLDExNSwxMjEsMCwwLDAsMTIyLAorICAgIDEwMSwwLDEyNCwwLDAsMTA2LDAsMCwxMjUsMiwwLDExNiwxLDAsMTAwLDEsCisgICAgMCwxMDAsMiwwLDEzMiwwLDAsMTI0LDEsMCw2OCwxMzEsMSwwLDEzMSwxLAorICAgIDAsMTE0LDc4LDAsMTIxLDE3LDAsMTE2LDIsMCwxMDYsMywwLDEyNCwyLDAsCisgICAgMTA2LDQsMCw2MSw4NywxMTMsMTAwLDAsNCwxMTYsNSwwLDEwNywxMCwwLDExNCwKKyAgICA3NCwwLDEsMSwxLDg5LDExMywxMDAsMCw4OCwxMTAsMjIsMCwxMTYsNiwwLAorICAgIDEwMCwzLDAsMTI0LDIsMCwxMDYsNCwwLDEyNCwyLDAsMTA2LDcsMCwxMzEsCisgICAgMywwLDEsODcsMTAwLDAsMCwxMDAsNCwwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICA5NSw4LDAsODgsMTAwLDAsMCw4Myw0MSw1LDc4LDk5LDEsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsMTE1LDAsMCwwLAorICAgIDExNSwyNywwLDAsMCwxMjQsMCwwLDkzLDE3LDAsMTI1LDEsMCwxMjQsMSwKKyAgICAwLDEwMCwwLDAsMTA3LDksMCw4NiwxLDExMywzLDAsMTAwLDAsMCw4MywKKyAgICA0MSwxLDc4LDExNCw0LDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDExNCwKKyAgICA3NiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsNzcsMCwwLDAsMjMwLDIsMCwwLDExNSwyLDAsMCwKKyAgICAwLDYsMCwxMjIsNDUsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsMTAxLDEwMCw5NSwKKyAgICAxMTUsOTcsMTAyLDEwMSwxMDgsMTIxLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiw5NSw5NSw0NiwKKyAgICA2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsCisgICAgMTE0LDYyLDEyMiwxOCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMjMsMzMsMTE0LDEyNSwzMiwKKyAgICAzNSwzMiwxMjMsMzMsMTE0LDEyNSw3MCw0MSw5LDExNCwyMTUsMCwwLDAsMTE0LDc4LAorICAgIDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywwLDAsMCwxMTQsNjcsMCwKKyAgICAwLDAsMTE0LDc5LDAsMCwwLDExNCwxNTMsMCwwLDAsMTE0LDE3MCwwLDAsCisgICAgMCwxMTQsMjE2LDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwwLDExNCw4MCwwLAorICAgIDAsMCwxMTQsMTc4LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw1LDAsMCwwLDExNCw4MSwwLDAsMCwyMjcsMiwwLDAsMTE1LAorICAgIDE4LDAsMCwwLDAsMSwzLDEsOSwxLDI1LDEsMywxLDE3LDEsCisgICAgMTMsMSw4LDIsMjYsMiwxMjIsMjYsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsCisgICAgMTAxLDEwMCw5NSwxMTUsOTcsMTAyLDEwMSwxMDgsMTIxLDQ2LDk1LDk1LDEwMSwxMjAsMTA1LDExNiwKKyAgICA5NSw5NSw3OCw0MSw2LDExNCw1NywwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LAorICAgIDU4LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsNzUsMCwwLDAsMTE0LDgxLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwyMTMsMCwwLDAsMjE0LDIsMCwwLAorICAgIDExNSw2LDAsMCwwLDEyLDIsMTIsNCwxMiw3LDExNCwyMTMsMCwwLDAsCisgICAgOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsOCwwLDAsCisgICAgMCw2NCwwLDAsMCwxMTUsMTcyLDAsMCwwLDEwMSwwLDAsOTAsMSwwLAorICAgIDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLAorICAgIDMsMCwxMDAsNCwwLDEwMCwzLDAsMTAwLDUsMCwxMDAsMywwLDEwMCw2LAorICAgIDAsMTAwLDcsMCwxMzIsMCwzLDkwLDQsMCwxMDAsOCwwLDEwMCw5LDAsCisgICAgMTMyLDAsMCw5MCw1LDAsMTAwLDEwLDAsMTAwLDExLDAsMTMyLDAsMCw5MCwKKyAgICA2LDAsMTAxLDcsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLDEzMSwxLAorICAgIDAsOTAsOCwwLDEwMSw4LDAsMTA2LDksMCwxMDAsMTQsMCwxMDAsMTMsMCwKKyAgICAxMzIsMCwwLDEzMSwxLDAsOTAsOCwwLDEwMSw3LDAsMTAwLDE1LDAsMTAwLAorICAgIDE2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDEwLDAsMTAxLDcsMCwxMDAsMTcsCisgICAgMCwxMDAsMTgsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTEsMCwxMDEsMTEsMCwKKyAgICAxMDYsOSwwLDEwMCwxOSwwLDEwMCwxOCwwLDEzMiwwLDAsMTMxLDEsMCw5MCwKKyAgICAxMSwwLDEwMCwzLDAsODMsNDEsMjAsMjE4LDEwLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgODMsMTEyLDEwMSw5OSw5NywyMDgsNSwwLDAsODQsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSwKKyAgICA5OSwxMDUsMTAyLDEwNSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTAyLDExMSwxMTQsMzIsOTcsCisgICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsMTE3LDExNSwxMDEsMTAwLDMyLDEwMiwxMTEsCisgICAgMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDEwNSwxMTAsMTAzLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDY1LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTUsMTEyLDEwMSw5OSwzMiwKKyAgICAxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTAyLDExMSwKKyAgICAxMTQsMzIsMTA1LDExMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDk3LDk4LAorICAgIDExMSwxMTcsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDMyLAorICAgIDMyLDcwLDExMSwxMTQsMTAsMzIsMzIsMzIsMzIsMTAwLDk3LDExNiw5NywzMiw5NywxMTUsCisgICAgMTE1LDExMSw5OSwxMDUsOTcsMTE2LDEwMSwxMDAsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDEwNSwxMTAsOTksMTA4LDExNywxMDAsCisgICAgMTA1LDExMCwxMDMsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0NCwzMiwxMTcsMTE1LDEwMSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzOSwxMTUsMTAsMzIsMzIsMzIsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NiwxMTAsOTcsMTA5LAorICAgIDEwMSw5NiwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDk3LDk4LDExNSwxMTEsMTA4LDExNywKKyAgICAxMTYsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMzIsMzIsOTYsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NiwKKyAgICAzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTAsMzIsCisgICAgMzIsMzIsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMTksMTA0LDEwMSwxMTAsMzIsMTA4LAorICAgIDExMSw5NywxMDAsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsNDYsMzIsMzIsOTYsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NiwzMiwxMDUsMTE1LDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMTAsCisgICAgMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTA1LDExMCw0NiwzMiwzMiw4NCwKKyAgICAxMDQsMTAxLDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExNCwKKyAgICAxMDUsMTE4LDEwMSwxMDAsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywKKyAgICAxMDksMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDk2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LAorICAgIDEwNyw5NywxMDMsMTAxLDk2LDMyLDEwMCwxMDEsMTE2LDEwMSwxMTQsMTA5LDEwNSwxMTAsMTAxLDExNSwKKyAgICAzMiwxMDUsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwKKyAgICAxMTUsMzIsOTksMTExLDExMCwxMTUsMTA1LDEwMCwxMDEsMTE0LDEwMSwxMDAsMzIsOTcsMzIsMTEyLAorICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExMSwxMTQsMTAsMzIsMzIsMzIsMzIsMTEwLDExMSwKKyAgICAxMTYsNDYsMzIsMzIsNzksMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMTYsCisgICAgMTA0LDEwNSwxMTUsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDEwMiwxMDgsMTAxLDk5LDExNiwxMDEsMTAwLAorICAgIDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwzMiw5Niw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICA5NSw5NiwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsOTYsMTExLDExNCwxMDUsMTAzLDEwNSwxMTAsOTYsMzIsMTA1LDExNSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSw5OSwzMiwxMDgsMTExLDk5LDk3LAorICAgIDExNiwxMDUsMTExLDExMCwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExOSwxMDQsMTA1LAorICAgIDk5LDEwNCwzMiwxMTYsMTExLDEwLDMyLDMyLDMyLDMyLDEwOCwxMTEsOTcsMTAwLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwKKyAgICA5NywxMTYsMzIsMTA1LDExMCwxMDIsMTExLDExNCwxMDksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDEwNSwKKyAgICAxMTUsMzIsOTcsMTE4LDk3LDEwNSwxMDgsOTcsOTgsMTA4LDEwMSw0NiwzMiwzMiw4NywxMDQsCisgICAgMTAxLDExMCwzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTA1LDExNSwxMCwzMiwKKyAgICAzMiwzMiwzMiwxMTUsMTAxLDExNiw0NCwzMiwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwzMiwxMTksCisgICAgMTA1LDEwOCwxMDgsMzIsMTA5LDk3LDExNiw5OSwxMDQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgOTYsMTA0LDk3LDExNSw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCw5NiwzMiwxMDUsCisgICAgMTEwLDEwMCwxMDUsOTksOTcsMTE2LDEwMSwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMzIsOTcsMzIsCisgICAgMTE1LDExMiwxMDEsOTksMzksMTE1LDMyLDM0LDExMSwxMTQsMTA1LDEwMywxMDUsMTEwLDM0LDMyLAorICAgIDExNCwxMDEsMTAyLDEwOCwxMDEsOTksMTE2LDExNSwzMiw5NywzMiwxMDgsMTExLDk5LDk3LDExNiwKKyAgICAxMDUsMTExLDExMCw0NiwxMCwzMiwzMiwzMiwzMiw4NywxMDQsMTAxLDExMCwzMiwxMTYsMTA0LAorICAgIDEwNSwxMTUsMzIsMTA1LDExNSwzMiw4NCwxMTQsMTE3LDEwMSw0NCwzMiw5Niw5NSw5NSwxMDIsCisgICAgMTA1LDEwOCwxMDEsOTUsOTUsOTYsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLAorICAgIDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LAorICAgIDExNSwzMiwxMTUsMTAxLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5Niw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDEwMCw5NiwzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTksOTcsCisgICAgMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsOTksOTcsOTksMTA0LAorICAgIDEwMSwxMDAsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAorICAgIDQ0LDMyLDEwNSwxMDIsMzIsOTcsMTEwLDEyMSw0NiwzMiwzMiw3MywxMTYsMTAsMzIsMzIsCisgICAgMzIsMzIsOTksMTExLDExNCwxMTQsMTAxLDExNSwxMTIsMTExLDExMCwxMDAsMTE1LDMyLDExNiwxMTEsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsOTYsOTUsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsCisgICAgOTYsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDk2LDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywKKyAgICAxMTQsOTksMTA0LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSw5NiwzMiwxMDUsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLDk5LDEwMSwzMiwxMTEsCisgICAgMTAyLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwxMTAsMTE2LDExNCwxMDUsMTAxLDExNSwzMiwxMTYsCisgICAgMTExLDEwLDMyLDMyLDMyLDMyLDExNSwxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMTksMTA0LDEwMSwKKyAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA1LDExMCwxMDMsMzIsMTE1LDExNyw5OCwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMzIsMzIsNzMsMTAyLDMyLDExNSwxMDEsMTE2LDQ0LAorICAgIDMyLDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExNSwxMDQsMTExLDExNywKKyAgICAxMDgsMTAwLDMyLDk4LDEwMSwxMCwzMiwzMiwzMiwzMiw4NCwxMTQsMTE3LDEwMSw0NSw0NSwKKyAgICA5NywxMTAsMTAwLDMyLDcwLDk3LDEwOCwxMTUsMTAxLDMyLDExMSwxMTYsMTA0LDEwMSwxMTQsMTE5LAorICAgIDEwNSwxMTUsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDgwLDk3LDk5LDEwNyw5NywxMDMsCisgICAgMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLDExNSwxMDUsMTA5LDExMiwxMDgsMTIxLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMTYsMTA0LDk3LDExNiwzMiw0MCwxMDksOTcsMTIxLDQxLAorICAgIDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LAorICAgIDQ2LDMyLDMyLDczLDEwMiwzMiw5NywzMiwxMTUsMTEyLDEwMSw5OSwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMDQsOTcsMTE1LDMyLDk3LDMyLDExMCwxMTEsMTEwLDQ1LDc4LDExMSwxMTAsMTAxLDMyLAorICAgIDExOCw5NywxMDgsMTE3LDEwMSwzMiwxMDUsMTEwLDMyLDk2LDExNSwxMTcsOTgsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDEwOCwxMTEsOTksOTcsMTE2LAorICAgIDEwNSwxMTEsMTEwLDExNSw5Niw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiwxMCwzMiwzMiwzMiwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiwxMTksMTA1LDEwOCwKKyAgICAxMDgsMzIsOTksMTExLDExMCwxMTUsMTA1LDEwMCwxMDEsMTE0LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5NywxMTUsMzIsMTEyLDk3LDk5LDEwNyw5NywKKyAgICAxMDMsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OSwxMTAsMTA4LDEyMSwzMiwxMDIsCisgICAgMTA1LDExMCwxMDAsMTAxLDExNCwxMTUsMzIsNDAsMTE1LDEwMSwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5Nyw5OCw5OSw0Niw3NywxMDEsMTE2LDk3LDgwLDk3LAorICAgIDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDEwLDMyLDMyLDMyLAorICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTcsOTgsOTksNDYsODAsCisgICAgOTcsMTE2LDEwNCw2OSwxMTAsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0MSwzMiwKKyAgICAxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMDksMTExLDEwMCwxMDUsMTAyLDEyMSwzMiw3NywxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwKKyAgICAxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDIxOCw2LDExMSwxMTQsMTA1LDEwMywxMDUsCisgICAgMTEwLDc4LDIxOCwxMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDExNSwxMTYsOTcsMTE2LDEwMSwKKyAgICAyMTgsMTAsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTksMywwLDAsCisgICAgMCwzLDAsMCwwLDYsMCwwLDAsMiwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsNzksMCwwLDAsMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMjQsCisgICAgMiwwLDEyNCwwLDAsOTUsMSwwLDEyNCwzLDAsMTI0LDAsMCw5NSwyLAorICAgIDAsMTI0LDQsMCwxMjQsMCwwLDk1LDMsMCwxMjQsNSwwLDExNCw0OCwwLAorICAgIDEwMywwLDAsMTEwLDMsMCwxMDAsMCwwLDEyNCwwLDAsOTUsNCwwLDEwMCwKKyAgICAxLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDAsMCwxMjQsMCwwLDk1LDYsCisgICAgMCwxMDAsMCwwLDgzLDQxLDIsNzgsNzAsNDEsNywxMTQsNjcsMCwwLDAsCisgICAgMTE0LDE3MCwwLDAsMCwxMTQsMjE4LDAsMCwwLDExNCwyMTksMCwwLDAsMjE4LAorICAgIDI2LDExNSwxMTcsOTgsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE1LDEwMSw5NywxMTQsOTksCisgICAgMTA0LDk1LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNSwyMTgsMTMsOTUsMTE1LDEwMSwKKyAgICAxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDk3LDExNiwxMTYsMTE0LDIxOCw3LDk1LDk5LDk3LDk5LAorICAgIDEwNCwxMDEsMTAwLDQxLDYsMTE0LDcxLDAsMCwwLDExNCw2NywwLDAsMCwxMTQsCisgICAgMTcwLDAsMCwwLDExNCwyMTgsMCwwLDAsMTE0LDIxOSwwLDAsMCwxMTQsMjIwLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCw3MiwwLDAsMCwyMiwzLDAsMCwxMTUsMTQsMCwwLDAsCisgICAgMCwyLDksMSw5LDEsOSwxLDksMSwyMSwzLDksMSwxMjIsMTksCisgICAgNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw4MywxMTIsMTAxLDk5LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LAorICAgIDExNiw5NSw5NSw5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKKyAgICA0LDAsMCwwLDY3LDAsMCwwLDExNSwxNTMsMCwwLDAsMTAwLDEsMCwKKyAgICAxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDEwMCwyLDAsMTA2LAorICAgIDAsMCwxMjQsMCwwLDEwNiwyLDAsMTMxLDEsMCwxMDMsMiwwLDEyNSwxLAorICAgIDAsMTI0LDAsMCwxMDYsMywwLDEwMCwwLDAsMTA3LDksMCwxMTQsNzksMCwKKyAgICAxMjQsMSwwLDEwNiw0LDAsMTAwLDMsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LAorICAgIDMsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMTAsMCwwLDEyNCwwLDAsMTA2LAorICAgIDUsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDEyMiwwLDEyNCwxLDAsMTA2LDQsCisgICAgMCwxMDAsNCwwLDEwNiwwLDAsMTI0LDAsMCwxMDYsNSwwLDEzMSwxLDAsCisgICAgMTMxLDEsMCwxLDExMCwwLDAsMTAwLDUsMCwxMDYsMCwwLDEyNCwwLDAsCisgICAgMTA2LDYsMCwxMDYsNywwLDEwMCw2LDAsMTA2LDgsMCwxMjQsMSwwLDEzMSwKKyAgICAxLDAsMTMxLDIsMCw4Myw0MSw3LDc4LDEyMiw5LDExMCw5NywxMDksMTAxLDYxLAorICAgIDEyMywzMywxMTQsMTI1LDEyMiwxMSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDYxLDEyMywzMywxMTQsCisgICAgMTI1LDEyMiwxMSwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCw2MSwxMjMsMzMsMTE0LDEyNSwxMjIsMjksCisgICAgMTE1LDExNyw5OCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsCisgICAgOTUsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE1LDYxLDEyMywxMjUsMTIyLDYsMTIzLAorICAgIDEyNSw0MCwxMjMsMTI1LDQxLDEyMiwyLDQ0LDMyLDQxLDksMTE0LDQ3LDAsMCwwLAorICAgIDExNCw2NywwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwyMTgsMCwwLDAsMjE4LAorICAgIDYsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxMTQsMjIxLDAsMCwwLDIxOCw5LDk1LDk1LAorICAgIDk5LDEwOCw5NywxMTUsMTE1LDk1LDk1LDExNCw1NywwLDAsMCwxMTQsMjYsMCwwLAorICAgIDAsNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDgwLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxMDEsMCwwLAorICAgIDAsMzQsMywwLDAsMTE1LDE2LDAsMCwwLDAsMSwxNSwxLDIxLDEsCisgICAgMTUsMSwyOCwxLDE1LDEsMTIsMSwxNiwxLDEyMiwxOSw3NywxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDk5LAorICAgIDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDExLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxNDUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNSwKKyAgICAyLDAsMTIxLDEwNywwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEwNiwxLAorICAgIDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwxLDAsCisgICAgMTA2LDIsMCwxMDcsMiwwLDExMSwxMTQsMCwxMjQsMCwwLDEwNiwzLDAsMTI0LAorICAgIDEsMCwxMDYsMywwLDEwNywyLDAsMTExLDExNCwwLDEyNCwyLDAsMTI0LDEsCisgICAgMCwxMDYsMCwwLDEwNywyLDAsMTExLDExNCwwLDEyNCwwLDAsMTA2LDQsMCwKKyAgICAxMjQsMSwwLDEwNiw0LDAsMTA3LDIsMCwxMTEsMTE0LDAsMTI0LDAsMCwxMDYsCisgICAgNSwwLDEyNCwxLDAsMTA2LDUsMCwxMDcsMiwwLDgzLDg3LDExMCwyMiwwLAorICAgIDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMTQwLDAsMSwxLDEsMTAwLDEsMCwKKyAgICA4Myw4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDEsMiw3OCw3MCw0MSw3LAorICAgIDExNCwyMjEsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LAorICAgIDIxOCwwLDAsMCwyMTgsNiw5OSw5Nyw5OSwxMDQsMTAxLDEwMCwyMTgsMTIsMTA0LDk3LAorICAgIDExNSw5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTQsMjEwLDAsMCwwLDQxLAorICAgIDMsMTE0LDcxLDAsMCwwLDIxOCw1LDExMSwxMTYsMTA0LDEwMSwxMTQsMjE4LDQsMTE1LAorICAgIDEwOSwxMTUsMTA4LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCw2LDk1LDk1LDEwMSwxMTMsOTUsOTUsNDQsMywwLDAsMTE1LDIwLAorICAgIDAsMCwwLDAsMSw5LDEsMywxLDE4LDEsMTgsMSwxOCwxLDE1LAorICAgIDEsMTgsMSwyMCwxLDEzLDEsMTIyLDE3LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsODMsCisgICAgMTEyLDEwMSw5OSw0Niw5NSw5NSwxMDEsMTEzLDk1LDk1LDk5LDEsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAxNTgsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwwLDAsMTA3LDgsMCwKKyAgICAxMTQsMTUxLDAsMTI0LDAsMCwxMDYsMSwwLDEwMCwwLDAsMTA3LDksMCwxMTQsCisgICAgMTUxLDAsMTI0LDAsMCwxMDYsMiwwLDExNCwxNTEsMCwxMjQsMCwwLDEwNiwxLAorICAgIDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMTYsNSwwLAorICAgIDEzMSwxLDAsMTMxLDEsMCwxMTQsMTEyLDAsMTIxLDE5LDAsMTE2LDYsMCwxMjQsCisgICAgMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwwLDAsODcsMTEzLDE0NSwwLDQsCisgICAgMTE2LDcsMCwxMDcsMTAsMCwxMTQsMTA4LDAsMSwxLDEsODksMTEzLDE0NSwwLAorICAgIDg4LDExMywxNDgsMCwxMjQsMSwwLDEwNiwzLDAsMTE2LDQsMCwxMTYsOCwwLAorICAgIDEzMSwxLDAsMTMxLDEsMCwxMTQsMTQ4LDAsMTI0LDEsMCwxMjQsMCwwLDk1LAorICAgIDAsMCwxMTMsMTQ4LDAsMTEzLDE1MSwwLDExMCwwLDAsMTI0LDAsMCwxMDYsMCwKKyAgICAwLDgzLDQxLDEsNzgsNDEsOSwxMTQsMjIzLDAsMCwwLDExNCwyMTgsMCwwLAorICAgIDAsMTE0LDIyMiwwLDAsMCwyMTgsOCwxMDEsMTEwLDEwMCwxMTUsMTE5LDEwNSwxMTYsMTA0LAorICAgIDIxOCw1LDExNiwxMTcsMTEyLDEwOCwxMDEsMTE0LDEzNSwwLDAsMCwxMTQsMTMyLDAsMCwKKyAgICAwLDExNCwxMjMsMCwwLDAsMjE4LDE3LDY2LDg5LDg0LDY5LDY3LDc5LDY4LDY5LAorICAgIDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQxLDIsMTE0LDcxLDAsMCwwLAorICAgIDExNCwxMzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDIyNiwwLDAsMCw1NiwzLDAsMCwxMTUsMjIsMCwKKyAgICAwLDAsMCwyLDE1LDEsMjQsMSw5LDEsMjEsMSwzLDEsMTksMSwKKyAgICAxMywxLDgsMSwyMSwxLDE4LDEsMTIyLDE3LDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgODMsMTEyLDEwMSw5OSw0Niw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw5OSwyLDAsMCwwLAorICAgIDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSwxMywwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEwMCwwLAorICAgIDAsODMsNDEsMSw3OCw0MSwxLDExNCwyMjMsMCwwLDAsNDEsMiwxMTQsNzEsCisgICAgMCwwLDAsMTE0LDIyNiwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMjI2LDAsMCwwLDcwLDMsMCwwLAorICAgIDExNSwyLDAsMCwwLDAsMiw5OSwxLDAsMCwwLDAsMCwwLDAsCisgICAgMSwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw0NiwwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzNSwwLAorICAgIDEyNCwwLDAsMTA2LDEsMCwxMDYsMiwwLDEwMCwyLDAsMTMxLDEsMCwxMDAsCisgICAgMywwLDI1LDgzLDEyNCwwLDAsMTA2LDEsMCw4MywxMDAsMSwwLDgzLDQxLAorICAgIDQsMTIyLDMyLDg0LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTExLDEwMiwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLDk3LDExNCwxMDEsCisgICAgMTEwLDExNiw0Niw3OCwxMTQsMTE2LDAsMCwwLDExNCw4NCwwLDAsMCw0MSwzLAorICAgIDExNCwyMjEsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwzMiwwLDAsMCw0MSwKKyAgICAxLDExNCw3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNSwwLDAsMCwyMTgsNiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDc0LDMsMCwKKyAgICAwLDExNSw2LDAsMCwwLDAsMywxNSwxLDIwLDIsMTIyLDE3LDc3LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsODMsMTEyLDEwMSw5OSw0NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk5LAorICAgIDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDEsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDgzLAorICAgIDQxLDEsNzgsNDEsMSwxMTQsMjIyLDAsMCwwLDQxLDEsMTE0LDcxLDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwyMjcsMCwwLDAsODIsMywwLDAsMTE1LDIsMCwwLDAsMCwyLAorICAgIDEyMiwyMyw3NywxMTEsMTAwLDExNywxMDgsMTAxLDgzLDExMiwxMDEsOTksNDYsMTA0LDk3LDExNSwKKyAgICA5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxOSwKKyAgICAwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjQsMCwwLDk1LAorICAgIDEsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMiwyMTgsNCw5OCwxMTEsMTExLAorICAgIDEwOCwxMTQsMjIyLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDIxOCw1LDExOCwKKyAgICA5NywxMDgsMTE3LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMjI3LDAsMCwwLDg2LDMsMCwwLDExNSwyLDAsMCwKKyAgICAwLDAsMiw0MSwxMiwxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCwKKyAgICA1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDcyLDAsMCwwLDExNCwxMDEsCisgICAgMCwwLDAsMTE0LDIzMCwwLDAsMCwyMTgsOCwxMTIsMTE0LDExMSwxMTIsMTAxLDExNCwKKyAgICAxMTYsMTIxLDExNCwyMjYsMCwwLDAsMjE4LDYsMTE1LDEwMSwxMTYsMTE2LDEwMSwxMTQsMTE0LAorICAgIDIzNCwwLDAsMCwxMTQsMjI3LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMTcsMCwKKyAgICAwLDAsMjQxLDIsMCwwLDExNSwyMCwwLDAsMCwxMiwzNSw2LDIsMTUsCisgICAgMSwxNSwxMSwxMiwxMCwxMiwxMiwxOCwxNCwyMSw0LDE4LDgsMTgsNCwxMTQsCisgICAgMjE3LDAsMCwwLDExNCwyMTgsMCwwLDAsMTE0LDIyMCwwLDAsMCw5OSwyLAorICAgIDAsMCwwLDIsMCwwLDAsNSwwLDAsMCwxNSwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMTkzLDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMDAsMSwKKyAgICAwLDEzMSwyLDAsMTE0LDgzLDAsMTI0LDMsMCwxMDAsMiwwLDEwNyw4LDAsCisgICAgMTE0LDQzLDAsMTE2LDEsMCwxMjQsMCwwLDEwMCwzLDAsMTI0LDEsMCwxMzEsCisgICAgMSwxLDgzLDEyNCwzLDAsMTE0LDU1LDAsMTAzLDAsMCwxMTAsMywwLDEwMCwKKyAgICAyLDAsMTI1LDQsMCwxMTYsMSwwLDEyNCwwLDAsMTAwLDMsMCwxMjQsMSwKKyAgICAwLDEwMCw0LDAsMTI0LDQsMCwxMzEsMSwyLDgzLDEyNCwzLDAsMTAwLDIsCisgICAgMCwxMDcsOCwwLDExNCwxNjgsMCwxMTYsMCwwLDEyNCwxLDAsMTAwLDUsMCwKKyAgICAxMzEsMiwwLDExNCwxNTksMCwxMjEsMTksMCwxMjQsMSwwLDEwNiwyLDAsMTI0LAorICAgIDAsMCwxMzEsMSwwLDEyNSwzLDAsODcsMTEzLDE2NSwwLDQsMTE2LDMsMCwKKyAgICAxMDcsMTAsMCwxMTQsMTU1LDAsMSwxLDEsMTAwLDIsMCwxMjUsMywwLDg5LAorICAgIDExMywxNjUsMCw4OCwxMTMsMTY4LDAsMTAwLDYsMCwxMjUsMywwLDExMCwwLDAsCisgICAgMTE2LDQsMCwxMjQsMCwwLDEyNCwxLDAsMTAwLDcsMCwxMjQsMiwwLDEwMCwKKyAgICA1LDAsMTI0LDMsMCwxMzEsMiwyLDgzLDQxLDgsMTIyLDUzLDgyLDEwMSwxMTYsCisgICAgMTE3LDExNCwxMTAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTE1LDExMiwxMDEsCisgICAgOTksMzIsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTgsOTcsMTE0LDEwNSwxMTEsCisgICAgMTE3LDExNSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAorICAgIDExNSw0NiwyMTgsMTIsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLAorICAgIDc4LDExNCwxNzAsMCwwLDAsMTE0LDIyMSwwLDAsMCwxMTQsMjIwLDAsMCwwLAorICAgIDcwLDExNCwyMTgsMCwwLDAsNDEsNSwxMTQsNjAsMCwwLDAsMjE4LDIzLDExNSwKKyAgICAxMTIsMTAxLDk5LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSwKKyAgICA5OSw5NywxMTYsMTA1LDExMSwxMTAsMTE0LDIyMCwwLDAsMCwxMTQsMTU0LDAsMCwwLAorICAgIDExNCwyMTcsMCwwLDAsNDEsNSwxMTQsNjcsMCwwLDAsMTE0LDE3MCwwLDAsCisgICAgMCwxMTQsMjE4LDAsMCwwLDExNCwyMjAsMCwwLDAsOTAsNiwxMTUsMTAxLDk3LAorICAgIDExNCw5OSwxMDQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDE3NCwwLDAsMCw5MSwzLDAsMCwxMTUsMjgsMCwwLDAsCisgICAgMCwyLDE1LDEsMTIsMSwxNiwxLDE4LDEsMTUsMSw3LDIsMTIsMSwKKyAgICAxNSwxLDMsMSwxOSwxLDEzLDEsMTQsMyw5LDIsMTE0LDE3NCwwLDAsCisgICAgMCwxMTQsMTcwLDAsMCwwLDExNCwyMjEsMCwwLDAsOTksMiwwLDAsMCwKKyAgICAyLDAsMCwwLDksMCwwLDAsMTksMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDExMCwxLDAsMCwxMjQsMSwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNzksCisgICAgMCwxMDAsMiwwLDEyNSwxLDAsMTE2LDAsMCwxMjQsMiwwLDEwMCwzLDAsCisgICAgMTMxLDIsMCwxMTQsNzksMCwxMjEsMTksMCwxMjQsMiwwLDEwNiwxLDAsMTI0LAorICAgIDAsMCwxMzEsMSwwLDEyNSwxLDAsODcsMTEzLDc2LDAsNCwxMTYsMiwwLAorICAgIDEwNywxMCwwLDExNCw3MiwwLDEsMSwxLDg5LDExMyw3NiwwLDg4LDExMyw3OSwKKyAgICAwLDExMCwwLDAsMTE2LDMsMCwxMjQsMCwwLDEyNCwyLDAsMTAwLDQsMCwKKyAgICAxMjQsMSwwLDEzMSwyLDEsMTI1LDQsMCwxMDAsNSwwLDEyNCw0LDAsOTUsCisgICAgNCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwyMDMsMCwxMjAsNzksCisgICAgMCwxMTYsNSwwLDEzMSwwLDAsNjgsOTMsNjEsMCw5MiwyLDAsMTI1LDUsCisgICAgMCwxMjUsNiwwLDEyNCwxLDAsMTA2LDYsMCwxMTYsNywwLDEyNCw2LDAsCisgICAgMTMxLDEsMCwxMzEsMSwwLDExNCwxMzEsMCwxMjQsNSwwLDEyNCwwLDAsMTI0LAorICAgIDEsMCwxMzEsMiwwLDEyNSwyLDAsMTI0LDIsMCwxMjQsNCwwLDk1LDgsCisgICAgMCw4MCwxMTMsMTMxLDAsMTEzLDEzMSwwLDg3LDEwMCwxLDAsODMsMTEwLDAsMCwKKyAgICAxMjQsMywwLDExNiw5LDAsMTA3LDgsMCwxMTQsMzgsMSwxMTYsMCwwLDEyNCwKKyAgICAyLDAsMTAwLDYsMCwxMzEsMiwwLDExNCw0NywxLDEyMSwxOSwwLDEyNCwyLAorICAgIDAsMTA2LDEwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw3LDAsODcsMTEwLDE4LAorICAgIDAsNCwxMTYsMiwwLDEwNywxMCwwLDExNCwxMywxLDEsMSwxLDg5LDExMywKKyAgICAzNSwxLDg4LDEyNCw3LDAsMTE0LDM1LDEsMTAzLDAsMCwxMjQsNCwwLDk1LAorICAgIDExLDAsMTEzLDM1LDEsMTEzLDQ3LDEsMTEwLDksMCwxMjQsMywwLDEyNCw0LAorICAgIDAsOTUsMTEsMCwxMjQsNCwwLDEwNiwxMSwwLDEwMywwLDAsMTA3LDIsMCwKKyAgICAxMTQsMTA2LDEsMTI0LDEsMCwxMTQsMTA2LDEsMTE2LDEyLDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDEwMCw3LDAsMjUsMTI1LDgsMCwxMjQsNCwwLDEwNiwxMSwwLDEwNiwKKyAgICAxMywwLDEyNCw4LDAsMTMxLDEsMCwxLDExMywxMDYsMSwxMTAsMCwwLDEyNCwKKyAgICA0LDAsODMsNDEsOCw5Nyw2MSwxLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAorICAgIDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDMyLDk4LAorICAgIDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwOCwKKyAgICAxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDExMSwKKyAgICAzMiwxMDUsMTEwLDEwMCwxMDUsOTksOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDMyLDExMiwKKyAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NCwzMiwxMTUsMTAxLDExNiwxMCwzMiwzMiwzMiwzMiwKKyAgICAxMTUsMTE3LDk4LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCwKKyAgICA5NSwxMDgsMTExLDk5LDk3LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE2LDExMSwzMiw5NywzMiwKKyAgICAxMDgsMTA1LDExNSwxMTYsMzIsMTExLDEwMiwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsCisgICAgMTIxLDMyLDExMiw5NywxMTYsMTA0LDExNSw0NiwzMiwzMiw2NSwxMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSwzMiwxMDgsMTA1LDExNSwxMTYsMzIsMTA1LDExNSwzMiwxMTUsCisgICAgMTE3LDEwMiwxMDIsMTA1LDk5LDEwNSwxMDEsMTEwLDExNiw0NCwzMiwxMTYsMTA0LDExMSwxMTcsMTAzLAorICAgIDEwNCwzMiwxMDUsMTE2LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMTEsMTE2LDEwNCwxMDEsMTE0LDExOSwKKyAgICAxMDUsMTE1LDEwMSwzMiwxMTcsMTE1LDEwMSwxMDIsMTE3LDEwOCwzMiwxMTYsMTExLDMyLDExNiwxMDQsCisgICAgMTAxLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDExNSwxMjEsMTE1LAorICAgIDExNiwxMDEsMTA5LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTA4LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCwzMiwxMDksMTE3LDExNSwxMTYsMzIsMTE2LDk3LDEwNywxMDEsMzIsOTcsCisgICAgMzIsMTE1LDExMiwxMDEsOTksMzIsOTcsMTE1LDMyLDEwNSwxMTYsMTE1LDMyLDExMSwxMTAsMTA4LAorICAgIDEyMSwzMiw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDAsNDEsMzIsOTcsMTE0LDEwMywKKyAgICA0NiwxMCwxMCwzMiwzMiwzMiwzMiw3OCwxMjIsOSw2MCwxMTcsMTEwLDEwNywxMTAsMTExLAorICAgIDExOSwxMTAsNjIsMTE0LDIzOSwwLDAsMCwxMTQsMjE4LDAsMCwwLDg0LDExNCwyMjAsCisgICAgMCwwLDAsMTE0LDg0LDAsMCwwLDQxLDE0LDExNCw2MCwwLDAsMCwxMTQsCisgICAgMjM5LDAsMCwwLDExNCwxNTQsMCwwLDAsMTE0LDIxNywwLDAsMCwxMTQsMjIyLAorICAgIDAsMCwwLDIxOCwyNyw5NSwxMDMsMTAxLDExNiw5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwKKyAgICAxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsCisgICAgMTE0LDIzMSwwLDAsMCwxMTQsMjMyLDAsMCwwLDExNCwxNzAsMCwwLDAsMjE4LAorICAgIDksOTUsODAsNzksODAsODUsNzYsNjUsODQsNjksMTE0LDIyMCwwLDAsMCwxMTQsCisgICAgMjIxLDAsMCwwLDExNCwzOCwwLDAsMCwxMTQsMjI0LDAsMCwwLDQxLDksCisgICAgMTE0LDY3LDAsMCwwLDIxOCw4LDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDExNCwKKyAgICAxNzAsMCwwLDAsMTE0LDIyMSwwLDAsMCwxMTQsMTc4LDAsMCwwLDIxOCwxMiwKKyAgICAxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk5LDEwOCw5NywxMTUsMTE1LDExNCwxMjYsMCwwLAorICAgIDAsMTE0LDIyMCwwLDAsMCw5MCw3LDEwMCwxMDUsMTE0LDExMCw5NywxMDksMTAxLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyNDAsCisgICAgMCwwLDAsMTE2LDMsMCwwLDExNSw2MCwwLDAsMCwwLDEyLDEyLDQsCisgICAgNiwxLDE1LDIsMywxLDE5LDEsMTMsMSwxMSw4LDIxLDEsOSwzLAorICAgIDEyLDEsMjIsMSwyMSwxLDE1LDEsOSwxLDgsMiw3LDMsMTIsMiwKKyAgICAxNSwxLDMsMSwxOSwxLDEzLDEsNSwyLDYsMSwxOCwyLDksMSwKKyAgICAxNSwxLDYsMSwxNiwxLDIyLDIsMTE0LDI0MCwwLDAsMCw5OSwzLDAsCisgICAgMCwwLDAsMCwwLDAsOCwwLDAsMCw1MywwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMTI0LDEsMCwwLDEyMSwxMywwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMjUsMywwLDg3LDExMCwxOCwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMzMsCisgICAgMCwxLDEsMSw4OSwxMTAsMTcsMCw4OCwxMjQsMywwLDEwMCwwLDAsMTA3LAorICAgIDksMCwxMTQsNTAsMCwxMjQsMywwLDgzLDEyNCwwLDAsMTA2LDIsMCwxMjUsCisgICAgNCwwLDEyNCwxLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwxMDgsMCwxMjEsMTMsCisgICAgMCwxMjQsMCwwLDEwNiwzLDAsMTI1LDEsMCw4NywxMTMsMTA4LDAsNCwxMTYsCisgICAgMSwwLDEwNywxMCwwLDExNCwxMDQsMCwxLDEsMSw4OSwxMTMsMTA4LDAsODgsCisgICAgMTEwLDAsMCwxMjEsMTMsMCwxMjQsMCwwLDEwNiw0LDAsMTI1LDUsMCw4NywKKyAgICAxMTAsMjQsMCw0LDExNiwxLDAsMTA3LDEwLDAsMTE0LDE0NywwLDEsMSwxLAorICAgIDEwMCwwLDAsMTI1LDUsMCw4OSwxMTAsMSwwLDg4LDEyNCwyLDAsMTAwLDAsCisgICAgMCwxMDcsOCwwLDExNCwyMjQsMCwxMjQsNSwwLDEwMCwwLDAsMTA3LDgsMCwKKyAgICAxMTQsMjE1LDAsMTIxLDEzLDAsMTI0LDEsMCwxMDYsNSwwLDEyNSwyLDAsODcsCisgICAgMTEzLDIyMSwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsMjExLDAsMSwxLDEsCisgICAgMTAwLDAsMCwxMjUsMiwwLDg5LDExMywyMjEsMCw4OCwxMTMsMjI0LDAsMTI0LDUsCisgICAgMCwxMjUsMiwwLDExMCwwLDAsMTIxLDEzLDAsMTI0LDAsMCwxMDYsNiwwLAorICAgIDEyNSw2LDAsODcsMTEwLDI0LDAsNCwxMTYsMSwwLDEwNywxMCwwLDExNCw3LAorICAgIDEsMSwxLDEsMTAwLDAsMCwxMjUsNiwwLDg5LDExMCwxLDAsODgsMTIxLAorICAgIDE5LDAsMTE2LDcsMCwxMjQsMCwwLDEwNiw4LDAsMTMxLDEsMCwxMjUsNywKKyAgICAwLDg3LDExMCwyNCwwLDQsMTE2LDEsMCwxMDcsMTAsMCwxMTQsNTMsMSwxLAorICAgIDEsMSwxMDAsMCwwLDEyNSw3LDAsODksMTEwLDEsMCw4OCwxMTYsOSwwLAorICAgIDEyNCw0LDAsMTI0LDEsMCwxMDAsMSwwLDEyNCwyLDAsMTMxLDIsMSwxMjUsCisgICAgMywwLDEyNCw1LDAsMTAwLDAsMCwxMDcsOCwwLDExNCw5MywxLDEwMCwyLAorICAgIDAsMTEwLDMsMCwxMDAsMywwLDEyNCwzLDAsOTUsMTAsMCwxMjQsNiwwLAorICAgIDEyNCwzLDAsOTUsMTEsMCwxMjQsNywwLDEyNCwzLDAsOTUsMTIsMCwxMjQsCisgICAgMywwLDgzLDQxLDQsNzgsMTE0LDIxOCwwLDAsMCw3MCw4NCw0MSwxMywxMTQsCisgICAgMjA5LDAsMCwwLDExNCwyMTAsMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwyMDUsCisgICAgMCwwLDAsMTE0LDIxMSwwLDAsMCw5MCw3LDk1LDc5LDgyLDczLDcxLDczLAorICAgIDc4LDIxOCwxMCw5NSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDEwMCw5NSw5NSwyMTgsNCwxMDgsCisgICAgMTA1LDExNSwxMTYsMjE4LDgsOTUsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsMTE0LDIxNywwLAorICAgIDAsMCwxMTQsMjIyLDAsMCwwLDExNCwyMjYsMCwwLDAsMTE0LDIyMSwwLDAsCisgICAgMCw0MSw4LDExNCwxODAsMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsMjE4LDAsCisgICAgMCwwLDExNCwxNzgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyNDMsMCwwLAorICAgIDAsMTE0LDIyNiwwLDAsMCwxMTQsMjIxLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxNyw5NSwxMTUsMTEyLDEwMSwKKyAgICA5OSw5NSwxMDIsMTE0LDExMSwxMDksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTgwLDMsMCwKKyAgICAwLDExNSw3MiwwLDAsMCwwLDIsMywxLDEzLDEsMTMsMSw1LDIsCisgICAgMTIsMSw0LDIsOSwxLDEyLDEsMywxLDEzLDEsMTMsMiw4LDEsCisgICAgMywxLDEzLDEsMTMsMSwxMSwxLDEyLDEsMTIsMSwzLDEsMTMsMSwKKyAgICAxMywxLDE0LDIsOSwxLDMsMSwxMywxLDEzLDEsMTEsMSwzLDEsCisgICAgMTksMSwxMywxLDExLDIsMjEsMSwyNywxLDksMSw5LDEsMTE0LDI0OCwKKyAgICAwLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICA2LDAsMCwwLDY0LDAsMCwwLDExNSwxNDIsMCwwLDAsMTAxLDAsMCwKKyAgICA5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLAorICAgIDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsCisgICAgMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCw3LDAsMTAwLDgsMCwKKyAgICAxMDAsOSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDIsOTAsNiwwLDEwMCwKKyAgICAxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsNywwLDEwMCwxNCwwLDEwMCwxNSwKKyAgICAwLDEzMiwwLDAsOTAsOCwwLDEwMCwxNiwwLDEwMCwxNywwLDEzMiwwLDAsCisgICAgOTAsOSwwLDEwMCwxOCwwLDEwMCwxOSwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsCisgICAgMjAsMCwxMDAsMjEsMCwxMzIsMCwwLDkwLDExLDAsMTAwLDIyLDAsMTAwLDIzLAorICAgIDAsMTMyLDAsMCw5MCwxMiwwLDEwMCwyNCwwLDgzLDQxLDI1LDExNCwxNzUsMCwKKyAgICAwLDAsMTIyLDc3LDY3LDExMSwxMTAsMTE4LDEwMSwxMTAsMTA1LDEwMSwxMTAsOTksMTAxLDMyLAorICAgIDExOSwxMTQsOTcsMTEyLDExMiwxMDEsMTE0LDMyLDk3LDExNCwxMTEsMTE3LDExMCwxMDAsMzIsMTE1LAorICAgIDExMiwxMDEsOTksMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNSwzMiwxMTYsMTExLDMyLDExMiwKKyAgICAxMTQsMTExLDExOCwxMDUsMTAwLDEwMSwzMiwxMTUsMTEyLDEwMSw5OSw0NSwxMTUsMTEyLDEwMSw5OSwKKyAgICAxMDUsMTAyLDEwNSw5OSwxMCwzMiwzMiwzMiwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsCisgICAgNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMiwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTI0LDEsMCwxMjQsMCwKKyAgICAwLDk1LDAsMCwxMDAsMCwwLDgzLDQxLDEsNzgsNDEsMSwxMTQsMTc4LDAsCisgICAgMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDcyLDAsCisgICAgMCwwLDIzMiwzLDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIxLDk1LAorICAgIDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsOTUsMTA1LDExMCwKKyAgICAxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwzLDAsMCwKKyAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDE1OCwwLDAsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTI1LDEsMCwxMjQsMSwwLDEwNiwxLDAsMTAwLDEsMCwKKyAgICAxMDcsOCwwLDExNCwzMCwwLDEwMCwyLDAsMTEwLDYsMCwxMjQsMSwwLDEwNiwKKyAgICAxLDAsMTI1LDIsMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDEsMCwxMDcsOCwKKyAgICAwLDExNCwxMDQsMCwxMjQsMSwwLDEwNiwzLDAsMTAwLDEsMCwxMDcsOCwwLAorICAgIDExNCw4MiwwLDEwMCwzLDAsMTA2LDQsMCwxMjQsMiwwLDEzMSwxLDAsODMsCisgICAgMTAwLDQsMCwxMDYsNCwwLDEyNCwyLDAsMTI0LDEsMCwxMDYsMywwLDEzMSwKKyAgICAyLDAsODMsMTEwLDUwLDAsMTI0LDEsMCwxMDYsNSwwLDExNCwxMzIsMCwxMDAsCisgICAgNSwwLDEwNiw0LDAsMTI0LDIsMCwxMjQsMSwwLDEwNiwyLDAsMTMxLDIsCisgICAgMCw4MywxMDAsNiwwLDEwNiw0LDAsMTI0LDEsMCwxMDYsMSwwLDEyNCwxLAorICAgIDAsMTA2LDIsMCwxMzEsMiwwLDgzLDEwMCwxLDAsODMsNDEsNywxMjIsMzgsCisgICAgODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTQsMTAxLDExMiwxMTQsMzIsCisgICAgMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMTQsMjA3LDAsMCwwLDEyMiwxMyw2MCwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMjAsNjAsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDMzLDExNCwxMjUsNDEsCisgICAgNjIsMTIyLDIzLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLAorICAgIDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSw2MiwxMjIsMTgsNjAsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMzIsMTIzLDMzLDExNCwxMjUsMzIsNDAsMTIzLDEyNSw0MSw2Miw0MSw2LAorICAgIDExNCwxNzgsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwyMTgsMCwwLDAsMTE0LAorICAgIDE3MCwwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDIyNywwLDAsMCw0MSwzLAorICAgIDExNCw3MSwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjA2LAorICAgIDAsMCwwLDIzNSwzLDAsMCwxMTUsMTgsMCwwLDAsMCwzLDksMSwKKyAgICAzMCwxLDE1LDEsMTUsMSwxMywyLDIyLDIsOSwxLDE5LDIsMTIyLDI0LAorICAgIDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDIxOCw5LDk1LDExMSwxMTgsMTAxLDExNCwxMTQsCisgICAgMTA1LDEwMCwxMDEsNzAsMjE4LDExLDk1LDEwMiwxMTEsMTE0LDk5LDEwMSw5NSwxMTAsOTcsMTA5LAorICAgIDEwMSw4NCw5OSwyLDAsMCwwLDIsMCwwLDAsNiwwLDAsMCw1OSwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsNzUsMiwwLDAsMTI0LDAsMCwxMDYsCisgICAgMCwwLDEyNSw0LDAsMTI0LDIsMCwxMTUsNDUsMCwxMjQsMywwLDExNSw0NSwKKyAgICAwLDExNiwxLDAsMTI0LDEsMCwxMDAsMSwwLDEwMCwyLDAsMTMxLDMsMCwKKyAgICAxMDAsMiwwLDEwNyw4LDAsMTE0LDg1LDAsMTIxLDE2LDAsMTI0LDQsMCwxMDYsCisgICAgMiwwLDEyNCwxLDAsOTUsMywwLDg3LDExMyw4NSwwLDQsMTE2LDQsMCwKKyAgICAxMDcsMTAsMCwxMTQsODEsMCwxLDEsMSw4OSwxMTMsODUsMCw4OCwxMTAsMCwKKyAgICAwLDEyNCwyLDAsMTE1LDExNSwwLDExNiwxLDAsMTI0LDEsMCwxMDAsMywwLAorICAgIDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDIyMSwwLDEyNCwKKyAgICA0LDAsMTA2LDUsMCwxMjUsNSwwLDEyNCw1LDAsMTAwLDIsMCwxMDcsOCwKKyAgICAwLDExNCwxODQsMCwxMjQsNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsOSwwLAorICAgIDExNCwxODQsMCwxMTYsNywwLDEwNiw4LDAsMTE2LDcsMCwxMzEsMSwwLDEyNSwKKyAgICA1LDAsMTI0LDQsMCwxMDYsNiwwLDEyNCw1LDAsOTUsOSwwLDExMywxODQsCisgICAgMCwxMTAsMCwwLDEyMSwxMywwLDEyNCw1LDAsMTI0LDEsMCw5NSwxMCwwLAorICAgIDg3LDExMywyMjEsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIxNywwLDEsMSwKKyAgICAxLDg5LDExMywyMjEsMCw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDI1MSwwLDExNiwKKyAgICAxLDAsMTI0LDEsMCwxMDAsNCwwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwKKyAgICAwLDEwNyw4LDAsMTE0LDM1LDEsMTIxLDE2LDAsMTI0LDQsMCwxMDYsMTEsMCwKKyAgICAxMjQsMSwwLDk1LDEyLDAsODcsMTEzLDM1LDEsNCwxMTYsNCwwLDEwNywxMCwKKyAgICAwLDExNCwzMSwxLDEsMSwxLDg5LDExMywzNSwxLDg4LDExMCwwLDAsMTIxLAorICAgIDEzLDAsMTI0LDQsMCwxMjQsMSwwLDk1LDEzLDAsODcsMTEwLDE4LDAsNCwKKyAgICAxMTYsNCwwLDEwNywxMCwwLDExNCw2OCwxLDEsMSwxLDg5LDExMCwxLDAsCisgICAgODgsMTI0LDIsMCwxMTUsOTksMSwxMTYsMSwwLDEyNCwxLDAsMTAwLDUsMCwKKyAgICAxMDAsMiwwLDEzMSwzLDAsMTAwLDIsMCwxMDcsOCwwLDExNCwxNTcsMSwxMjQsCisgICAgNCwwLDEwNiw2LDAsMTAwLDIsMCwxMDcsOSwwLDExNCwxNTcsMSwxMjEsMTYsCisgICAgMCwxMjQsNCwwLDEwNiw2LDAsMTI0LDEsMCw5NSwxNCwwLDg3LDExMywxNTQsCisgICAgMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDE1MCwxLDEsMSwxLDg5LDExMywKKyAgICAxNTQsMSw4OCwxMTMsMTU3LDEsMTEwLDAsMCwxMjQsNCwwLDEwNiwxNSwwLDExNCwKKyAgICA3MSwyLDEyNCwyLDAsMTE1LDE5NiwxLDExNiwxLDAsMTI0LDEsMCwxMDAsNiwKKyAgICAwLDEwMCwyLDAsMTMxLDMsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDIzNiwxLAorICAgIDEyMSwxNiwwLDEyNCw0LDAsMTA2LDE2LDAsMTI0LDEsMCw5NSwxNywwLDg3LAorICAgIDExMywyMzYsMSw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDIzMiwxLDEsMSwxLAorICAgIDg5LDExMywyMzYsMSw4OCwxMTAsMCwwLDEyNCwyLDAsMTE1LDEwLDIsMTE2LDEsCisgICAgMCwxMjQsMSwwLDEwMCw3LDAsMTAwLDIsMCwxMzEsMywwLDEwMCwyLDAsCisgICAgMTA3LDgsMCwxMTQsNzEsMiwxMjQsNCwwLDEwNiwxOCwwLDEwMCwyLDAsMTA3LAorICAgIDksMCwxMTQsNjgsMiwxMjEsMTYsMCwxMjQsNCwwLDEwNiwxOCwwLDEyNCwxLAorICAgIDAsOTUsMTksMCw4NywxMTMsNjUsMiw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LAorICAgIDYxLDIsMSwxLDEsODksMTEzLDY1LDIsODgsMTEzLDY4LDIsMTEzLDcxLDIsCisgICAgMTEwLDAsMCwxMDAsMiwwLDgzLDQxLDgsOTcsMjksMiwwLDAsODMsMTAxLAorICAgIDExNiwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsOTcsCisgICAgMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiw2NSwxMDgsMTA4LDMyLDEwOSwxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NSwxMTQsMTAxLDEwOCw5NywxMTYsMTAxLDEwMCwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LAorICAgIDMyLDExOSwxMDUsMTA4LDEwOCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsNDYsMzIsMzIsNzIsCisgICAgMTAxLDExNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwxMDQsCisgICAgMTExLDExOSwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzMiw5NywxMTYsMTE2LDExNCwKKyAgICAxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDEwOSw5NywxMTIsMzIsMTExLDExMCwxMTYsMTExLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDU4LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDExMCw5NywxMDksMTAxLDMyLDQ1LAorICAgIDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMCw5NywxMDksMTAxLDk1LAorICAgIDk1LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMTIsMTAxLDk5LDQ2LDEwOCwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsCisgICAgOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLDQ1LAorICAgIDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSw5NSw5NSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSwKKyAgICA5OSwzMiw0NSw2MiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMTUsMTEyLAorICAgIDEwMSw5OSw5NSw5NSwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OSwxMTIsCisgICAgMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAxMTUsMTEyLDEwMSw5OSw0NiwxMTEsMTE0LDEwNSwxMDMsMTA1LDExMCwzMiw0NSw2MiwzMiwxMDksCisgICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsOTUsMzIsNDAsCisgICAgMTA1LDEwMiwzMiwxMTUsMTEyLDEwMSw5OSw0NiwxMTUsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsCisgICAgOTcsMTE2LDExNiwxMTQsMzIsMTA1LDExNSwzMiwxMTYsMTE0LDExNywxMDEsNDEsMTAsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsOTksOTcsOTksMTA0LDEwMSwKKyAgICAxMDAsMzIsNDUsNjIsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsOTUsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSwxMDAsOTUsOTUsMzIsNDAsMTA1LDEwMiwzMiw5NSw5NSwxMDIsMTA1LDEwOCwKKyAgICAxMDEsOTUsOTUsMzIsOTcsMTA4LDExNSwxMTEsMzIsMTE1LDEwMSwxMTYsNDEsMTAsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksNDYsMTE1LDExNyw5OCwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTA4LDExMSw5OSw5NywKKyAgICAxMTYsMTA1LDExMSwxMTAsMTE1LDMyLDQ1LDYyLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LAorICAgIDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDMyLDQwLDEwNSwxMDIsMzIsMTE1LDEwMSwxMTYsCisgICAgNDEsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDU3LDAsMCwwLAorICAgIDc4LDExNCwyMDUsMCwwLDAsMjE4LDExLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLAorICAgIDEwMSw5NSw5NSwxMTQsMjQ3LDAsMCwwLDExNCwyMTEsMCwwLDAsMTE0LDI0NSwwLAorICAgIDAsMCw0MSwyMCwxMTQsMTc4LDAsMCwwLDExNCw2MiwwLDAsMCwxMTQsNjcsCisgICAgMCwwLDAsMTE0LDU3LDAsMCwwLDExNCwyMTAsMCwwLDAsMTE0LDE3MCwwLAorICAgIDAsMCwxMTQsMjIxLDAsMCwwLDIxOCwxNiw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsCisgICAgOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwyMTgsNyw5NSw5NSwxMTAsMTAxLDExOSwKKyAgICA5NSw5NSwyMTgsNSw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMjA1LDAsMCwwLDExNCwyMzQsCisgICAgMCwwLDAsMTE0LDI1MSwwLDAsMCwxMTQsMjA5LDAsMCwwLDExNCwyNDcsMCwKKyAgICAwLDAsMTE0LDIyNywwLDAsMCwxMTQsMjE4LDAsMCwwLDExNCwyMTEsMCwwLAorICAgIDAsMTE0LDIyNiwwLDAsMCwxMTQsMjQ1LDAsMCwwLDQxLDYsMTE0LDcxLDAsCisgICAgMCwwLDExNCwxODAsMCwwLDAsMTE0LDI0OSwwLDAsMCwxMTQsMjUwLDAsMCwKKyAgICAwLDExNCwxNzgsMCwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTcsMTA1LDExMCwxMDUsMTE2LAorICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk3LDExNiwxMTYsMTE0LDExNSwyNTEsMywwLAorICAgIDAsMTE1LDg4LDAsMCwwLDAsMTcsOSw2LDEyLDEsMjQsMSwzLDEsCisgICAgMTYsMSwxMywxLDgsMywzMCwxLDksMSwxMiwyLDE1LDEsMTUsMSwKKyAgICAxOCwxLDMsMSwxMywxLDEzLDEsOCwzLDMwLDEsMywxLDE2LDEsCisgICAgMTMsMSw4LDMsMywxLDEzLDEsMTMsMSw1LDMsMzAsMSwxNSwxLAorICAgIDMsMSwxNiwxLDEzLDEsMTEsMiw5LDIsMzAsMSwzLDEsMTYsMSwKKyAgICAxMywxLDgsMywzMCwxLDE1LDEsMywxLDE2LDEsMTMsMSwxMjIsMzAsCisgICAgOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0NiwxMDUsMTEwLDEwNSwKKyAgICAxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTcsMTE2LDExNiwxMTQsMTE1LDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDEwMSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDEsCisgICAgMCwxMTYsMSwwLDEyNCwxLDAsMTA2LDIsMCwxMDAsMSwwLDEzMSwyLDAsCisgICAgMTE0LDQ4LDAsMTI0LDEsMCwxMDYsMiwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDEyNSwyLDAsMTEwLDYsMCwxMDAsMiwwLDEyNSwyLDAsMTI0LDIsCisgICAgMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDg0LDAsMTE2LDQsMCwxMjQsMSwwLAorICAgIDEwNiw1LDAsMTMxLDEsMCwxMjUsMiwwLDExMCwwLDAsMTI0LDAsMCwxMDYsCisgICAgNiwwLDEyNCwyLDAsMTMxLDEsMCwxLDEyNCwyLDAsODMsNDEsMywxMjIsCisgICAgMTUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMzIsMTEwLDEwMSwxMTksMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLAorICAgIDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDQ1LDExNCwxMDEsMTA4LDk3LDExNiwxMDEsMTAwLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwxMTUsCisgICAgMzIsOTcsMTE0LDEwMSwzMiw5NywxMDgsMTE1LDExMSwzMiwxMTUsMTAxLDExNiwzMiwxMTksMTA1LAorICAgIDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsCisgICAgMTEyLDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTE4LDk3LDEwOCwxMTcsMTAxLAorICAgIDExNSwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksNDYsCisgICAgMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMjE4LDEzLDk5LDExNCwxMDEsOTcsCisgICAgMTE2LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw3OCw0MSw3LDExNCwxNzgsMCwwLAorICAgIDAsMTE0LDYwLDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDAsMSwwLDAsCisgICAgMTE0LDY4LDAsMCwwLDExNCw2NywwLDAsMCwxMTQsMjU1LDAsMCwwLDQxLAorICAgIDMsMTE0LDcxLDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDE4MCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgNiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsNzUsNCwwLDAsMTE1LDE2LDAsMCwwLAorICAgIDAsNyw5LDIsMTgsMywyMSwyLDYsMSwxMiw0LDE4LDEsMTMsMSwKKyAgICAxMjIsMTksOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0Niw5OSwKKyAgICAxMTQsMTAxLDk3LDExNiwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKKyAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjMsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEwNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwxLAorICAgIDAsMSwxMDAsMSwwLDgzLDQxLDIsMTIyLDE4OSw2OCwxMTEsMzIsMTAxLDExOCwxMDEsCisgICAgMTE0LDEyMSwxMTYsMTA0LDEwNSwxMTAsMTAzLDMyLDExMCwxMDEsOTksMTAxLDExNSwxMTUsOTcsMTE0LAorICAgIDEyMSwzMiwxMTYsMTExLDMyLDEwMSwxMjAsMTAxLDk5LDExNywxMTYsMTAxLDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDg0LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsCisgICAgMTExLDEwMiwzMiw5NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NiwzMiwxMDUsMTE1LDMyLDExNywKKyAgICAxMTUsMTAxLDEwMCwzMiw5NywxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE2LDk3LDExNCwxMDMsMTAxLAorICAgIDExNiwzMiwxMTEsMTAyLDMyLDEwMSwxMjAsMTAxLDk5LDExNywxMTYsMTA1LDExMSwxMTAsNDYsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsCisgICAgMTA0LDExMSwxMDAsMzIsMTE3LDExNSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsCisgICAgMTAwLDEwMSwxMTQsMzksMTE1LDMyLDk2LDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDQwLDQxLDk2LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDQ2LDEwLDEwLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQxLDMsMTE0LDE3OCwwLDAsMCwxMTQsCisgICAgMTcwLDAsMCwwLDIxOCwxMSwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTgwLDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCw1LDk1LDEwMSwKKyAgICAxMjAsMTAxLDk5LDk4LDQsMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsMTgsCisgICAgOTUsODMsMTEyLDEwMSw5OSw3NywxMDEsMTE2LDEwNCwxMTEsMTAwLDExNSw0Niw5NSwxMDEsMTIwLAorICAgIDEwMSw5OSw5OSwyLDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwxMSwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTcsMSwwLDAsMTI0LDAsMCwxMDYsCisgICAgMCwwLDEwNiwxLDAsMTI1LDIsMCwxMTYsMiwwLDEwNiwzLDAsMTMxLDAsCisgICAgMCwxLDExNiw0LDAsMTI0LDIsMCwxMzEsMSwwLDE0MywyMjYsMCwxLDExNiwKKyAgICA1LDAsMTA2LDYsMCwxMDYsNywwLDEyNCwyLDAsMTMxLDEsMCwxMjQsMSwKKyAgICAwLDEwNyw5LDAsMTE0LDk1LDAsMTAwLDEsMCwxMDYsOCwwLDEyNCwyLDAsCisgICAgMTMxLDEsMCwxMjUsMywwLDExNiw5LDAsMTI0LDMsMCwxMDAsMiwwLDEyNCwKKyAgICAyLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwxMDYsMCwKKyAgICAwLDEwNiwxMCwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsMTgxLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEwNiwxMSwwLDEwMCwzLDAsMTA3LDgsMCwxMTQsMTU4LDAsMTE2LAorICAgIDksMCwxMDAsNCwwLDEwMCwyLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLAorICAgIDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTI0LDAsMCwxMDYsMTIsMCwKKyAgICAxMjQsMSwwLDEwMCw1LDAsMTAwLDYsMCwxMzEsMSwxLDEsMTI0LDEsMCwKKyAgICA4MywxMjQsMCwwLDEwNiwxMiwwLDEyNCwxLDAsMTAwLDUsMCwxMDAsNiwwLAorICAgIDEzMSwxLDEsMSwxMTYsMTMsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDEwLDAsCisgICAgMTAwLDcsMCwxMzEsMiwwLDExNSwyNDMsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LAorICAgIDEwLDAsMTA2LDE0LDAsMTI0LDIsMCwxMzEsMSwwLDEsMTEwLDEzLDAsMTI0LAorICAgIDAsMCwxMDYsMTUsMCwxMjQsMSwwLDEzMSwxLDAsMSw4NywxMDAsMywwLAorICAgIDgxLDg4LDExNiw1LDAsMTA2LDYsMCwxMjQsMiwwLDI1LDgzLDQxLDgsMTIyLAorICAgIDUxLDY5LDEyMCwxMDEsOTksMTE3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsCisgICAgOTksMzIsMTA1LDExMCwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwxMDUsMTEwLDEwMywKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiwKKyAgICA5Nyw5OSwxMDEsNDYsMTIyLDMwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsCisgICAgMTI1LDMyLDExMCwxMTEsMTE2LDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsCisgICAgMTE3LDEwOCwxMDEsMTE1LDExNCw2NywwLDAsMCw3OCwxMjIsMTQsMTA5LDEwNSwxMTUsMTE1LAorICAgIDEwNSwxMTAsMTAzLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE0LDI0OSwwLDAsMCw4NCwKKyAgICAxMTQsMiwxLDAsMCw0MSwxNiwxMTQsMTc4LDAsMCwwLDExNCw2NywwLDAsCisgICAgMCwxMTQsMTA2LDAsMCwwLDIxOCwxMiw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk1LAorICAgIDEwOCwxMTEsOTksMTA3LDExNCwxMDMsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDczLAorICAgIDAsMCwwLDExNCw5MywwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDE1NCwwLAorICAgIDAsMCwxMTQsMTcwLDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDI1NSwwLDAsCisgICAgMCwxMTQsNjAsMCwwLDAsMjE4LDExLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLAorICAgIDExNywxMDgsMTAxLDExNCwzLDEsMCwwLDQxLDQsMTE0LDcxLDAsMCwwLDExNCwKKyAgICAxODAsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwxNzIsMCwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE3NiwwLAorICAgIDAsMCwxMDgsNCwwLDAsMTE1LDMyLDAsMCwwLDAsMiwxMiwxLDEwLAorICAgIDEsMTMsMSwyNCwxLDE1LDEsMjEsMSwxOCwxLDE4LDEsMjcsMiwxOSwKKyAgICAxLDQsMSwxOSwxLDIxLDQsMjIsMiwxOSwxLDEyMiwxNyw5NSw4MywxMTIsCisgICAgMTAxLDk5LDc3LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDEwMSwxMjAsMTAxLDk5LDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDI3LDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSwyNCwxLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDEsCisgICAgMCwxMjQsMSwwLDEwNiwxLDAsMTA2LDIsMCwxMjQsMSwwLDEwNiwzLDAsCisgICAgMTMxLDEsMCwxLDExNiw0LDAsMTA2LDUsMCwxMjQsMSwwLDEwNiwzLDAsCisgICAgMjUsMTI1LDIsMCwxMTYsNiwwLDEyNCwyLDAsMTAwLDEsMCwxMDAsMCwwLAorICAgIDEzMSwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwxMDgsMCwxMjEsMTYsMCwxMjQsCisgICAgMSwwLDEwNiwxLDAsMTI0LDIsMCw5NSw3LDAsODcsMTEzLDEwOCwwLDQsCisgICAgMTE2LDgsMCwxMDcsMTAsMCwxMTQsMTA0LDAsMSwxLDEsODksMTEzLDEwOCwwLAorICAgIDg4LDExMCwwLDAsMTE2LDYsMCwxMjQsMiwwLDEwMCwyLDAsMTAwLDAsMCwKKyAgICAxMzEsMywwLDEwMCwwLDAsMTA3LDgsMCwxMTQsMjE1LDAsMTIxLDU5LDAsMTI0LAorICAgIDIsMCwxMDYsOSwwLDEyNCwyLDAsOTUsMTAsMCwxMTYsMTEsMCwxMjQsMiwKKyAgICAwLDEwMCwzLDAsMTMxLDIsMCwxMTUsMTkwLDAsMTI0LDEsMCwxMDYsMywwLAorICAgIDEwNiwxMiwwLDEwMCw0LDAsMTMxLDEsMCwxMDAsNSwwLDI1LDEyNCwyLDAsCisgICAgOTUsMTAsMCwxMTAsMCwwLDg3LDExMywyMTUsMCw0LDExNiw4LDAsMTA3LDEwLAorICAgIDAsMTE0LDIxMSwwLDEsMSwxLDg5LDExMywyMTUsMCw4OCwxMTAsMCwwLDExNiwKKyAgICA2LDAsMTI0LDIsMCwxMDAsNiwwLDEwMCwwLDAsMTMxLDMsMCwxMDAsMCwKKyAgICAwLDEwNyw4LDAsMTE0LDIwLDEsMTIxLDEzLDAsMTI0LDEsMCwxMjQsMiwwLAorICAgIDk1LDEzLDAsODcsMTEzLDIwLDEsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwxNiwKKyAgICAxLDEsMSwxLDg5LDExMywyMCwxLDg4LDExMCwwLDAsMTI0LDIsMCw4MywKKyAgICA0MSw3LDc4LDExNCwyMDUsMCwwLDAsMTE0LDI1MSwwLDAsMCwxMTQsMjQ3LDAsCisgICAgMCwwLDExNCwxMTYsMCwwLDAsMTE0LDg0LDAsMCwwLDExNCwyMDksMCwwLAorICAgIDAsNDEsMTQsMTE0LDE3OCwwLDAsMCwxMTQsMTcwLDAsMCwwLDExNCw1LDEsCisgICAgMCwwLDExNCw2NywwLDAsMCwxMTQsNywwLDAsMCwxMTQsNzMsMCwwLAorICAgIDAsMTE0LDYyLDAsMCwwLDExNCwyMDUsMCwwLDAsMTE0LDIxMCwwLDAsMCwKKyAgICAxMTQsNTcsMCwwLDAsMTE0LDI1MSwwLDAsMCwxMTQsNjAsMCwwLDAsMTE0LAorICAgIDMyLDAsMCwwLDExNCwyMDksMCwwLDAsNDEsMywxMTQsNzEsMCwwLDAsCisgICAgMTE0LDE3OCwwLDAsMCwxMTQsMTgwLDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyNSw5NSwxMDgsMTExLDk3LDEwMCwKKyAgICA5NSw5OCw5Nyw5OSwxMDcsMTE5LDk3LDExNCwxMDAsOTUsOTksMTExLDEwOSwxMTIsOTcsMTE2LAorICAgIDEwNSw5OCwxMDgsMTAxLDEzMiw0LDAsMCwxMTUsNDIsMCwwLDAsMCw0LDksCisgICAgMSwxOSwyLDE2LDEsMjQsMSwzLDEsMTYsMSwxMywxLDgsMSwyNCwKKyAgICAxLDMsNCwxMiwxLDE1LDEsMzIsMSwxMywxLDgsMSwyNCwxLDMsCisgICAgMSwxMywxLDEzLDEsOCwxLDEyMiwzOCw5NSw4MywxMTIsMTAxLDk5LDc3LDEwMSwKKyAgICAxMTYsMTA0LDExMSwxMDAsMTE1LDQ2LDk1LDEwOCwxMTEsOTcsMTAwLDk1LDk4LDk3LDk5LDEwNywKKyAgICAxMTksOTcsMTE0LDEwMCw5NSw5OSwxMTEsMTA5LDExMiw5NywxMTYsMTA1LDk4LDEwOCwxMDEsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMTEsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDE3OSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LAorICAgIDEsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDUyLDAsMTE2LDIsMCwxMjQsMCwKKyAgICAwLDEwNiwwLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTE1LDUyLDAsCisgICAgMTI0LDAsMCwxMDYsMywwLDEzMSwwLDAsODMsMTEwLDAsMCwxMjQsMCwwLAorICAgIDEwNiw0LDAsMTMxLDAsMCwxMjUsMSwwLDExNiw1LDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDE0Myw4NCwwLDEsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTAwLAorICAgIDAsMCwxMDcsOCwwLDExNCwxNDMsMCwxMjQsMCwwLDEwNiwwLDAsMTA2LDYsCisgICAgMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDE1NiwwLDExNiw3LDAsMTAwLDIsMCwKKyAgICAxMDAsMywwLDEyNCwwLDAsMTA2LDAsMCwxMDYsOCwwLDEzMSwxLDEsMTMwLAorICAgIDEsMCwxMTMsMTU2LDAsMTEwLDEzLDAsMTI0LDAsMCwxMDYsOSwwLDEyNCwxLAorICAgIDAsMTMxLDEsMCwxLDg3LDEwMCwwLDAsODEsODgsMTE2LDEwLDAsMTA2LDExLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwNiw4LDAsMjUsODMsNDEsNCw3OCwxMTQsCisgICAgMiwxLDAsMCwxMjIsMTQsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTAsMTAzLDMyLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsMTE0LDY3LDAsMCwwLDQxLDEyLDExNCwxNzgsMCwwLDAsCisgICAgMTE0LDE3MCwwLDAsMCwxMTQsNjAsMCwwLDAsMTE0LDYsMSwwLDAsMTE0LAorICAgIDEsMSwwLDAsMTE0LDIxMywwLDAsMCwxMTQsMjIxLDAsMCwwLDExNCwxNTQsCisgICAgMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwzLDEsMCwwLDExNCw3LDAsCisgICAgMCwwLDExNCw3MywwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTgwLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxNCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LAorICAgIDEwMSwxMDAsMTYyLDQsMCwwLDExNSwyMCwwLDAsMCwwLDIsMTgsMiwyMSwKKyAgICAxLDEzLDIsMTIsMSwxMywxLDE4LDEsMTgsMSwzMCwzLDE5LDUsMTIyLAorICAgIDI3LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsNDYsOTUsMTA4LAorICAgIDExMSw5NywxMDAsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDk5LDEsMCwwLAorICAgIDAsMCwwLDAsMCwxLDAsMCwwLDgsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDQ5LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEsCisgICAgMTE2LDIsMCwxMjQsMCwwLDEwNiwzLDAsMTA2LDQsMCwxMzEsMSwwLDE0MywKKyAgICAxNSwwLDEsMTI0LDAsMCwxMDYsNSwwLDEzMSwwLDAsODMsODcsMTAwLDEsCisgICAgMCw4MSw4OCwxMDAsMSwwLDgzLDQxLDIsMTIyLDIwNyw4MiwxMDEsMTE2LDExNywxMTQsCisgICAgMTEwLDMyLDk3LDMyLDExMCwxMDEsMTE5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMSwKKyAgICA5OCwxMDYsMTAxLDk5LDExNiw0NCwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDMyLDk4LDEyMSwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLDEwMSw5OSwzOSwxMTUsMzIsMTA4LDExMSw5NywxMDAsCisgICAgMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsCisgICAgMTAwLDEwMCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDk3LDExNCwxMDEsCisgICAgMTEwLDExNiw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsCisgICAgOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA1LDExNSwzMiw5NywxMDgsMTE0LDEwMSwKKyAgICA5NywxMDAsMTIxLDMyLDEwNSwxMTAsMzIsMTE1LDEyMSwxMTUsNDYsMTA5LDExMSwxMDAsMTE3LDEwOCwKKyAgICAxMDEsMTE1LDQ0LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwMSwxMjAsMTA1LDExNSwxMTYsMTA1LDExMCwKKyAgICAxMDMsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTAzLDEwMSwxMTYsMTE1LDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDk5LDEwOCwxMTEsOTgsOTgsMTAxLDExNCwxMDEsMTAwLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDQxLDYsMTE0LDEwNiwwLAorICAgIDAsMCwxMTQsNCwxLDAsMCwxMTQsMTAzLDAsMCwwLDExNCwxNzgsMCwwLAorICAgIDAsMTE0LDY3LDAsMCwwLDExNCw3LDEsMCwwLDQxLDEsMTE0LDcxLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCwxNzcsMCwwLDAsMTg1LDQsMCwwLDExNSw2LDAsMCwwLDAsCisgICAgOSwxMCwxLDE5LDEsMTIyLDE3LDk1LDgzLDExMiwxMDEsOTksNzcsMTAxLDExNiwxMDQsCisgICAgMTExLDEwMCwxMTUsNDYsMTA4LDExMSw5NywxMDAsNzgsNDEsMTMsMTE0LDU3LDAsMCwwLAorICAgIDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCwKKyAgICA3MiwwLDAsMCwxMTQsMjA2LDAsMCwwLDExNCwyNTUsMCwwLDAsMTE0LDEsCisgICAgMSwwLDAsMTE0LDMsMSwwLDAsMTE0LDE3NiwwLDAsMCwxMTQsNiwxLAorICAgIDAsMCwxMTQsNywxLDAsMCwxMTQsMTc3LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwxNzUsMCwwLDAsMjI1LDMsMCwwLDExNSwyMCwwLDAsMCwxMiwzLAorICAgIDYsNCwxMiwzLDEyLDE2LDI0LDgwLDEyLDIzLDEyLDEwLDEyLDI0LDEyLDMwLAorICAgIDEyLDIzLDExNCwxNzUsMCwwLDAsOTksNCwwLDAsMCwwLDAsMCwwLAorICAgIDYsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsMTE1LDIwMSwwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMzEsMSwwLDEyNSw0LDAsCisgICAgMTI0LDAsMCwxMDYsMCwwLDEwMCwyLDAsMTMxLDEsMCwxMjUsNSwwLDEyNCwKKyAgICA0LDAsMTE1LDEwMiwwLDEyNCw1LDAsMTE0LDU0LDAsMTI0LDUsMCwxMDYsMSwKKyAgICAwLDEyNSw0LDAsMTEzLDEwMiwwLDEyNCwyLDAsMTI0LDMsMCwxMDcsMiwwLAorICAgIDExNCw4NCwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwyLDAsMTI1LAorICAgIDQsMCwxMTMsMTAyLDAsMTE2LDMsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsCisgICAgMCwxMjUsNCwwLDExMCwwLDAsMTI0LDUsMCwxMTUsMTMyLDAsMTE2LDQsMCwKKyAgICAxMjQsMSwwLDEyNCwyLDAsMTAwLDMsMCwxMjQsNCwwLDEzMSwyLDEsMTI1LAorICAgIDUsMCwxMTAsMCwwLDEyMSw0NCwwLDEyNCw1LDAsMTI0LDAsMCwxMDAsMiwKKyAgICAwLDYwLDEyNCw0LDAsMTI0LDAsMCwxMDAsMSwwLDYwLDEyNCwyLDAsMTI0LAorICAgIDAsMCwxMDAsNCwwLDYwLDEyNCwzLDAsMTI0LDAsMCwxMDAsNSwwLDYwLAorICAgIDg3LDExMCwxOCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsMTk2LDAsMSwxLAorICAgIDEsODksMTEwLDEsMCw4OCwxMDAsMCwwLDgzLDQxLDYsNzgsMTE0LDIwNSwwLAorICAgIDAsMCwxMTQsMjA5LDAsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDIxMSwwLDAsCisgICAgMCwxMTQsMjQ1LDAsMCwwLDQxLDYsMTE0LDkzLDAsMCwwLDExNCwxNzAsMCwKKyAgICAwLDAsMjE4LDIwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAorICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDIxOCwxNiw4MywxMTEsMTE3LDExNCw5OSwxMDEsCisgICAgNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNCwyNDAsMCwwLDAsMTE0LAorICAgIDIwOCwwLDAsMCw0MSw2LDkwLDIsMTEwLDExNSwxMTQsNjcsMCwwLDAsOTAsCisgICAgOCwxMTIsOTcsMTE2LDEwNCwxMTAsOTcsMTA5LDEwMSw5MCw5LDk5LDExMiw5NywxMTYsMTA0LAorICAgIDExMCw5NywxMDksMTAxLDExNCwxNzAsMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTQsOTUsCisgICAgMTAyLDEwNSwxMjAsOTUsMTE3LDExMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxOTksNCwwLAorICAgIDAsMTE1LDM0LDAsMCwwLDAsMiwxNSwxLDE1LDEsNiwxLDYsMSwKKyAgICAxMiwxLDEyLDEsMTgsMiwxOCwxLDYsMSwyNCwxLDMsMSwxMCwxLAorICAgIDEwLDEsMTAsMSwxNCwxLDEzLDIsMTE0LDEwLDEsMCwwLDk5LDAsMCwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNjQsMCwKKyAgICAwLDAsMTE1LDE4MSwwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLAorICAgIDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLAorICAgIDMsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNSwwLDEwMSw2LDAsMTAwLDQsCisgICAgMCwxMDAsNCwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMiwwLDEzMSwxLDAsCisgICAgOTAsNywwLDEwMSw2LDAsMTAwLDQsMCwxMDAsNywwLDEwMCw4LDAsMTMyLAorICAgIDEsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNiwwLDEwMSw5LDAsMTAwLDksCisgICAgMCwxMDAsMTAsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMCwwLAorICAgIDEwMSw2LDAsMTAxLDksMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMCwwLDEzMSwKKyAgICAxLDAsMTMxLDEsMCw5MCwxMSwwLDEwMSw2LDAsMTAxLDksMCwxMDAsMTMsCisgICAgMCwxMDAsMTQsMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxMiwwLAorICAgIDEwMSw2LDAsMTAxLDksMCwxMDAsMTUsMCwxMDAsMTYsMCwxMzIsMCwwLDEzMSwKKyAgICAxLDAsMTMxLDEsMCw5MCwxMywwLDEwMCw0LDAsODMsNDEsMTcsMjE4LDE1LAorICAgIDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMjIsCisgICAgMTQ0LDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsMzIsMTAyLDExMSwxMTQsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwxMTAsMzIsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDY1LDEwOCwxMDgsCisgICAgMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTAxLDEwNSwxMTYsCisgICAgMTA0LDEwMSwxMTQsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTExLDExNCwzMiwxMTUsMTE2LDk3LAorICAgIDExNiwxMDUsOTksMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LDMyLDExNiwxMTEsMzIsOTcsCisgICAgMTE4LDExMSwxMDUsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMCwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLAorICAgIDEwLDMyLDMyLDMyLDMyLDEwNSwxMTAsMTE1LDExNiw5NywxMTAsMTE2LDEwNSw5NywxMTYsMTAxLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDk5LDEwOCw5NywxMTUsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDEyMiwxMTUsODIsCisgICAgMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsCisgICAgMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODQsCisgICAgMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDksOTcsOTksMTA0LDEwNSwxMTAsCisgICAgMTAxLDExNCwxMjEsMzIsMTAwLDExMSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNiwxMTEsOTgsCisgICAgMzIsMTA1LDExNiwxMTUsMTAxLDEwOCwxMDIsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMzIsMTIyLDI0LDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LAorICAgIDMyLDQwLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDQxLDYyLDQxLDIsMTE0LDQ3LAorICAgIDAsMCwwLDExNCw1NywwLDAsMCw0MSwxLDExNCwxODAsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIwNiwKKyAgICAwLDAsMCwyMzMsNCwwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwyNywKICAgICA2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDk5LDMsMCwwLDAsCi0gICAgMCwwLDAsMCwzLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDM5LDAsMCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxNiwKLSAgICAwLDEwMCwxLDAsODMsMTE2LDEsMCwxMDYsMiwwLDEyNCwxLDAsMTMxLDEsCi0gICAgMCwxMTQsMzUsMCwxMjQsMCwwLDgzLDEwMCwxLDAsODMsNDAsMiwwLDAsCi0gICAgMCwxMTcsMTEzLDAsMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDk4LAotICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLAotICAgIDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwzOSwxMTIsOTcsMTE2LAotICAgIDEwNCwzOSwzMiwxMDUsMTE1LDMyLDEwMSwxMTgsMTAxLDExNCwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsCi0gICAgMTAyLDEwNSwxMDEsMTAwLDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTAxLAotICAgIDk3LDExNCw5OSwxMDQsMzIsMTA1LDExNSwzMiw5OSwxMTEsMTEwLDExNSwxMDUsMTAwLDEwMSwxMTQsCi0gICAgMTAxLDEwMCwzMiw5NywzMiwxMDIsOTcsMTA1LDEwOCwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MCwzLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDc4LDExMSwxMTAsMTAxLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxMCwwLDAsMCwxMDUsMTE1LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDQwLDMsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwKLSAgICAwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDEyOSwyLDAsCi0gICAgMCwxMTUsNiwwLDAsMCwwLDcsMTIsMSw0LDEsMTE3LDI3LDAsMCwKLSAgICAwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKLSAgICA0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDMsMCwwLDAsOSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsODgsMCwwLDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LAotICAgIDYsMCwxMjUsMiwwLDEyMSwyMCwwLDExNiwyLDAsMTE2LDMsMCwxMDYsNCwKLSAgICAwLDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMTAsNDYsMCwxLDEsMSwxMjQsCi0gICAgMiwwLDEyLDExNCw3NiwwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNywKLSAgICA2LDAsMTE0LDc2LDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsNjEsMTEwLAotICAgIDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDEsMCw4Myw0MCwyLAotICAgIDAsMCwwLDExNywyMywwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDk4LAotICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LAotICAgIDQwLDUsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwwLDAsMCw5NSw5OSwKLSAgICA5NywxMDgsMTA4LDk1LDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LAotICAgIDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwKLSAgICAxMTcsMTIsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsCi0gICAgMTEwLDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDksMCwwLDAsCi0gICAgMTA1LDExNSw5NSwxMTQsMTAxLDEwOCwxMTEsOTcsMTAwLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDE0MCwyLDAsMCwxMTUsMTQsMCwwLDAsMCw2LAotICAgIDE1LDEsMywxLDIwLDEsMywxLDIyLDEsMTMsMSwxMTcsMjcsMCwwLAotICAgIDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LAotICAgIDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1NywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAotICAgIDk3LDExNSwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LDExMCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTUsMzIsMTAwLDExMSwzMiwxMTAsMTExLDExNiwzMiwxMDQsOTcsMTE4LDEwMSwzMiwKLSAgICA5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMTE1LDQ2LDc4LDQwLDEsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsCi0gICAgMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsCi0gICAgMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDE1NCwKLSAgICAyLDAsMCwxMTUsMiwwLDAsMCwwLDQsMTE3LDI0LDAsMCwwLDY2LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDc4LDk5LDQsMCwwLAorICAgIDAsMCwwLDAsMCw0LDAsMCwwLDUsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDU4LDAsMCwwLDEyNCwyLDAsMTAwLDAsMCwxMDcsOSwwLDExNCwKKyAgICAxNiwwLDEwMCwwLDAsODMsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxMTQsNTAsMCwxMTYsMiwwLDEyNCwxLDAsMTI0LDAsMCwxMDAsMSwKKyAgICAwLDEwMCwyLDAsMTMxLDIsMSw4MywxMDAsMCwwLDgzLDEwMCwwLDAsODMsCisgICAgNDEsMyw3OCwxMTQsMjE4LDAsMCwwLDEyMiw4LDk4LDExNywxMDUsMTA4LDExNiw0NSwKKyAgICAxMDUsMTEwLDQxLDMsMTE0LDEwNiwwLDAsMCw5MCwxMCwxMDUsMTE1LDk1LDk4LDExNywKKyAgICAxMDUsMTA4LDExNiwxMDUsMTEwLDExNCwxNzQsMCwwLDAsNDEsNCwyMTgsMyw5OSwxMDgsCisgICAgMTE1LDExNCwxNTksMCwwLDAsMTE0LDM1LDAsMCwwLDIxOCw2LDExNiw5NywxMTQsCisgICAgMTAzLDEwMSwxMTYsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDksMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDI0Miw0LDAsCisgICAgMCwxMTUsMTAsMCwwLDAsMCwyLDEyLDEsNCwxLDE1LDEsMTksMiwKKyAgICAxMjIsMjUsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsCisgICAgMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwzLDAsMCwwLAorICAgIDAsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLAorICAgIDExNSw0MSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMjQsMiwKKyAgICAwLDEzMSwyLDAsMTI1LDMsMCwxMjQsMywwLDEwMCwxLDAsMTA3LDksMCwKKyAgICAxMTQsMzcsMCwxMjQsMywwLDEwNiwxLDAsODMsMTAwLDEsMCw4Myw0MSwyLAorICAgIDEyMiwxNzUsNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LAorICAgIDQ1LDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDM5LDExMiw5NywxMTYsMTA0LDM5LDMyLDEwNSwKKyAgICAxMTUsMzIsMTAxLDExOCwxMDEsMTE0LDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsCisgICAgMzIsMTE2LDEwNCwxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMDEsOTcsMTE0LDk5LDEwNCwKKyAgICAzMiwxMDUsMTE1LDMyLDk5LDExMSwxMTAsMTE1LDEwNSwxMDAsMTAxLDExNCwxMDEsMTAwLDMyLDk3LAorICAgIDMyLDEwMiw5NywxMDUsMTA4LDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwKKyAgICAxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NSwKKyAgICAxMTUsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw0MCw0MSwzMiwxMDUsCisgICAgMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw3OCw0MSwyLDExNCwxNCwxLDAsMCwxMTQsMTcwLDAsMCwwLDQxLDQsCisgICAgMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICAxNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMjE4LDExLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAyNTEsNCwwLDAsMTE1LDQsMCwwLDAsMCw5LDE4LDEsMTIyLDI3LDY2LAorICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDIsCisgICAgMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDMsMCwwLDAsMTAsMCwwLDAsNjcsMCwwLDAsMTE1LAorICAgIDU5LDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDE0MywyMywwLAorICAgIDEsMTE2LDEsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMiwwLAorICAgIDEyNSwyLDAsODcsMTAwLDEsMCw4MSw4OCwxMjQsMCwwLDEyNCwyLDAsOTUsCisgICAgNCwwLDEwMCwyLDAsMTI0LDIsMCw5NSw1LDAsMTI0LDIsMCw4Myw0MSwKKyAgICAzLDEyMiwyMyw3NiwxMTEsOTcsMTAwLDMyLDk3LDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwKKyAgICAxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LDExNCwzMCwwLDAsMCwKKyAgICA0MSw2LDExNCw2OSwwLDAsMCwxMTQsMTE0LDAsMCwwLDExNCwxMDYsMCwwLAorICAgIDAsOTAsMTIsMTA1LDExMCwxMDUsMTE2LDk1LDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNCwKKyAgICAyMDUsMCwwLDAsMTE0LDI1MSwwLDAsMCw0MSwzLDExNCwxMiwxLDAsMCwKKyAgICAxMTQsMTU5LDAsMCwwLDExNCwxODAsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDUsMSwwLDAsNyw1LAorICAgIDAsMCwxMTUsMTAsMCwwLDAsMCw2LDEzLDEsMjQsMSw5LDEsOSwKKyAgICAxLDEyMiwyNyw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQxLDIsMTIyLDU3LAorICAgIDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk4LAorICAgIDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwKKyAgICAxMDAsMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDk5LDExMSwxMDAsMTAxLAorICAgIDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwxMTUsNDYsNzgsMTE0LDQsMCwwLDAsNDEsCisgICAgMiwxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOCwxMDMsMTAxLDExNiw5NSwKKyAgICA5OSwxMTEsMTAwLDEwMSwxOSw1LDAsMCwxMTUsMiwwLDAsMCwwLDQsMTIyLAorICAgIDI0LDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKKyAgICA0NiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LAorICAgIDAsMCwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTYsODIsMTAxLDExNiwxMTcsMTE0LAorICAgIDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LAorICAgIDEwNSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDEwMCwxMTEsMzIsMTEwLDExMSwKKyAgICAxMTYsMzIsMTA0LDk3LDExOCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsCisgICAgMTAwLDEwMSw0Niw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwxMiwxLDAsMCwKKyAgICAxMTQsMTU5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDIxOCwxMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLAorICAgIDI1LDUsMCwwLDExNSwyLDAsMCwwLDAsNCwxMjIsMjYsNjYsMTE3LDEwNSwKKyAgICAxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LAorICAgIDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAogICAgIDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsCi0gICAgMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDU2LDAsMCwwLDgyLAotICAgIDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywKLSAgICAxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsCi0gICAgMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsNDAsMSwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwyLDAsMCwwLDExNywzLDAsMCwwLAotICAgIDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwKLSAgICAwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTYwLDIsMCwwLDExNSwKLSAgICAyLDAsMCwwLDAsNCwxMTcsMjYsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LAotICAgIDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsCi0gICAgMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDUyLDAsMCwwLDgyLDEwMSwxMTYsCi0gICAgMTE3LDExNCwxMTAsMzIsNzAsOTcsMTA4LDExNSwxMDEsMzIsOTcsMTE1LDMyLDk4LDExNywxMDUsCi0gICAgMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTQsCi0gICAgMTAxLDMyLDExMCwxMDEsMTE4LDEwMSwxMTQsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNSwKLSAgICA0Niw3MCw0MCwxLDAsMCwwLDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsCi0gICAgMTAxLDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTA1LDExNSw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTY2LDIsMCwwLDExNSwyLDAsMCwwLDAsCi0gICAgNCwxMTcsMjYsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDc4LDQwLDE1LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwKLSAgICAxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsCi0gICAgMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LAotICAgIDExLDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsCi0gICAgMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLAotICAgIDExNywxMDUsMTE0LDEwMSwxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE3LDExLDAsCi0gICAgMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsCi0gICAgMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywxMCwwLDAsMCwxMDUsMTE1LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLAotICAgIDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsCi0gICAgMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsCi0gICAgMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwKLSAgICAxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwKLSAgICAxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNiwyLDAsMCwKLSAgICAxMTUsMjgsMCwwLDAsMTYsNyw2LDIsMTgsNCwzLDEsMTgsMTAsMywKLSAgICAxLDMsMSwzLDEsMjcsMTEsMywxLDIxLDUsMywxLDIxLDUsMywKLSAgICAxLDExNywxNSwwLDAsMCw2NiwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwKLSAgICAwLDAsNiwwLDAsMCw2NiwwLDAsMCwxMTUsMTczLDAsMCwwLDEyNCwKLSAgICAwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLAotICAgIDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsCi0gICAgMCwxMzEsMSwwLDkwLDUsMCwxMDEsNCwwLDEwMCwxNCwwLDEwMCw0LDAsCi0gICAgMTAwLDUsMCwxMzIsMSwwLDEzMSwxLDAsOTAsNywwLDEwMSw0LDAsMTAxLAotICAgIDgsMCwxMDEsOSwwLDEwMSwxMCwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwKLSAgICAwLDEzMSwxLDAsMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTEsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDEzMSwKLSAgICAxLDAsMTMxLDEsMCw5MCwxMiwwLDEwMSw0LDAsMTAxLDEwLDAsMTAwLDEwLAotICAgIDAsMTAwLDExLDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTMsMCwKLSAgICAxMDEsNCwwLDEwMSwxMCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDkwLDE0LDAsMTAwLDE0LDAsODMsNDAsMTUsMCwwLAotICAgIDAsMTE3LDE0LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDEsMTE0LDExNywxNDIsMCwwLDAsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsCi0gICAgMTE2LDEwNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsNjUsMTA4LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsCi0gICAgMTE0LDEwMSwzMiwxMDEsMTA1LDExNiwxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwKLSAgICAxMTEsMTE0LDMyLDExNSwxMTYsOTcsMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAxMTUsMzIsMTE2LDExMSwzMiw5NywxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLAotICAgIDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LAotICAgIDExMCwxMTYsMTA1LDk3LDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMiwwLDAsMCwwLDAsMCwwLAotICAgIDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLAotICAgIDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLAotICAgIDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIyLDAsMCwwLDYwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDM5LDEyMywxMjUsMzksMzIsNDAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgNDEsNjIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwxMDksCi0gICAgOTcsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDQwLAotICAgIDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsMSwwLDAsCi0gICAgMCwxMDksNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsCi0gICAgMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE0LDEwMSwxMTIsMTE0LDE4MiwyLAotICAgIDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI2LDAsMCwwLDcwLDExNCwKKyAgICAwLDEwMCwxLDAsODMsNDEsMiwxMjIsNTIsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKKyAgICA3MCw5NywxMDgsMTE1LDEwMSwzMiw5NywxMTUsMzIsOTgsMTE3LDEwNSwxMDgsMTE2LDQ1LDEwNSwKKyAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTEwLDEwMSwKKyAgICAxMTgsMTAxLDExNCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE1LDQ2LDcwLDExNCw0LAorICAgIDAsMCwwLDQxLDIsMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIyMCwKKyAgICAwLDAsMCwzMSw1LDAsMCwxMTUsMiwwLDAsMCwwLDQsMTIyLDI2LAorICAgIDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwKKyAgICAxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MSwxNCwxMTQsNTcsMCwwLAorICAgIDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsCisgICAgMjE4LDEyLDExNSwxMTYsOTcsMTE2LDEwNSw5OSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTQsMjA2LAorICAgIDAsMCwwLDIxOCwxMSw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAxMTQsMTQsMSwwLDAsMTE0LDE1LDEsMCwwLDExNCwxNjIsMCwwLDAsMTE0LAorICAgIDUsMSwwLDAsMTE0LDE2LDEsMCwwLDExNCwxNywxLDAsMCwxMTQsMjIwLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCwxMSwxLDAsMCwyMjQsNCwwLDAsCisgICAgMTE1LDI4LDAsMCwwLDEyLDcsNiwyLDE4LDksMywxLDIxLDgsMywKKyAgICAxLDE4LDExLDMsMSwyMSwxMSwzLDEsMjEsNSwzLDEsMjEsNSwzLAorICAgIDEsMTE0LDExLDEsMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCwwLDUsMCwwLDAsNjQsMCwwLDAsMTE1LDE5MywwLDAsMCwKKyAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAorICAgIDMsMCwxMDEsNCwwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDEzMSwxLAorICAgIDAsOTAsNSwwLDEwMSw2LDAsMTAwLDQsMCwxMDAsNCwwLDEwMCw1LDAsCisgICAgMTAwLDYsMCwxMzIsMiwwLDEzMSwxLDAsOTAsNywwLDEwMSw2LDAsMTAwLAorICAgIDQsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDgsCisgICAgMCwxMDEsNCwwLDEwMCw5LDAsMTAwLDEwLDAsMTMyLDAsMCwxMzEsMSwwLAorICAgIDkwLDksMCwxMDEsNiwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwwLDAsMTMxLAorICAgIDEsMCw5MCwxMCwwLDEwMSw2LDAsMTAxLDExLDAsMTAwLDEzLDAsMTAwLDE0LAorICAgIDAsMTMyLDAsMCwxMzEsMSwwLDEzMSwxLDAsOTAsMTIsMCwxMDEsNiwwLAorICAgIDEwMSwxMSwwLDEwMCwxNSwwLDEwMCwxNiwwLDEzMiwwLDAsMTMxLDEsMCwxMzEsCisgICAgMSwwLDkwLDEzLDAsMTAxLDYsMCwxMDEsMTEsMCwxMDAsMTcsMCwxMDAsMTgsCisgICAgMCwxMzIsMCwwLDEzMSwxLDAsMTMxLDEsMCw5MCwxNCwwLDEwMCw0LDAsCisgICAgODMsNDEsMTksMjE4LDE0LDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LAorICAgIDExNiwxMDEsMTE0LDEyMiwxNDIsNzcsMTAxLDExNiw5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsCisgICAgMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjUsCisgICAgMTA4LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsOTcsMTE0LDEwMSwzMiwxMDEsCisgICAgMTA1LDExNiwxMDQsMTAxLDExNCwzMiw5OSwxMDgsOTcsMTE1LDExNSwzMiwxMTEsMTE0LDMyLDExNSwKKyAgICAxMTYsOTcsMTE2LDEwNSw5OSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTUsMzIsMTE2LDExMSwKKyAgICAzMiw5NywxMTgsMTExLDEwNSwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDEwMSwxMDEsMTAwLDMyLAorICAgIDExNiwxMTEsMTAsMzIsMzIsMzIsMzIsMTA1LDExMCwxMTUsMTE2LDk3LDExMCwxMTYsMTA1LDk3LAorICAgIDExNiwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLDEsMCwKKyAgICAxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQxLDIsMTIyLAorICAgIDExNSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwzMiwxMDIsMTExLDExNCwKKyAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAorICAgIDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwKKyAgICAzMiw4NCwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSw5Nyw5OSwxMDQsCisgICAgMTA1LDExMCwxMDEsMTE0LDEyMSwzMiwxMDAsMTExLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA2LAorICAgIDExMSw5OCwzMiwxMDUsMTE2LDExNSwxMDEsMTA4LDEwMiw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwxMjIsMjIsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTIzLDMzLAorICAgIDExNCwxMjUsMzIsNDAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsNDEsNjIsNDEsMiwxMTQsNDcsCisgICAgMCwwLDAsMTE0LDU3LDAsMCwwLDQxLDEsMjE4LDEsMTA5LDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMDYsMCwwLAorICAgIDAsNDcsNSwwLDAsMTE1LDIsMCwwLDAsMCw3LDEyMiwyNiw3MCwxMTQsCiAgICAgMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsOTksMywwLDAsMCwwLDAsMCwKLSAgICAwLDMsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjMsMCwKLSAgICAwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMTQsMTksCi0gICAgMCwxMjQsMCwwLDgzLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMjEsCi0gICAgMCwwLDAsNzAsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsNzgsNDAsMywwLDAsMCwxMTcsNCwKLSAgICAwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsOSwwLDAsMCwxMDUsMTE1LDk1LDEwMiwKLSAgICAxMTQsMTExLDEyMiwxMDEsMTEwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDMsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsOCwwLDAsMCwKLSAgICAxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwKLSAgICAwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE4NiwyLDAsCi0gICAgMCwxMTUsMiwwLDAsMCwwLDMsMTE3LDI2LDAsMCwwLDcwLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgNCwwLDAsMCw5LDAsMCwwLDY3LDAsMCwwLDExNSwxMDAsMCwwLAotICAgIDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLDAsMTA3LDYsMCwxMjUsMiwwLAotICAgIDEyMSwzMiwwLDExNiwyLDAsMTE2LDMsMCwxMDYsNCwwLDEyNCwxLDAsMTMxLAotICAgIDIsMCwxMjUsMywwLDEyNCwzLDAsOTYsNSwwLDEyNCwzLDAsODMsODcsCi0gICAgMTEwLDQ2LDAsMSwxLDEsMTI0LDIsMCwxMiwxMTQsODgsMCwxMjQsMSwwLAotICAgIDExNiwwLDAsMTA2LDEsMCwxMDcsNiwwLDExNCw4OCwwLDExNiwwLDAsMTA2LAotICAgIDEsMCwxMjQsMSwwLDYxLDExMCwwLDAsMTMwLDAsMCw4OSwxMTAsMSwwLAotICAgIDg4LDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMjEsMCwwLDAsNzYsCi0gICAgMTExLDk3LDEwMCwzMiw5NywzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw0Niw3OCw0MCw2LDAsMCwwLDExNywzLDAsMCwwLDExNSwKLSAgICAxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwxMTcsMjUsCi0gICAgMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwxMDQsOTUsMTAyLDExNCwKLSAgICA5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsMTE3LDQsMCwwLAotICAgIDAsOTUsMTA1LDEwOSwxMTIsMTE3LDExLDAsMCwwLDEwNSwxMTAsMTA1LDExNiw5NSwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwxMTcsOCwwLDAsMCw5NSw5NSwxMDIsMTA1LDEwOCwxMDEsCi0gICAgOTUsOTUsNDAsNCwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNywKLSAgICA4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOSwwLDAsCi0gICAgMCwxMDUsMTE1LDk1LDExNCwxMDEsMTA4LDExMSw5NywxMDAsMTE3LDEsMCwwLDAsMTA5LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDE5MSwyLDAsMCwKLSAgICAxMTUsMTgsMCwwLDAsMCw2LDE1LDEsMywxLDE4LDIsNiwxLDgsCi0gICAgMSwzLDEsMjIsMSwxMywxLDExNywyNiwwLDAsMCw3MCwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKLSAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxMywwLDAsMCwKLSAgICAxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDgzLDQwLDEsMCwKLSAgICAwLDAsMTE3LDQ1LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDQ2LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsOTUsMTA1LAotICAgIDEwOSwxMTIsMTE3LDE3LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDk1LDExMSw5OCwxMDYsMTAxLDk5LDExNiw0MCwyLDAsMCwwLDExNywzLDAsCi0gICAgMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLAotICAgIDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAotICAgIDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsCi0gICAgMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsMjA4LDIsMCwwLDExNSwKLSAgICAyLDAsMCwwLDAsNCwxMTcsMjMsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLAorICAgIDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCw3OCw5OSw0LDAsMCwwLDAsMCwKKyAgICAwLDAsNCwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSw0MiwKKyAgICAwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDExNCwKKyAgICAzNCwwLDExNiwyLDAsMTI0LDEsMCwxMjQsMCwwLDEwMCwxLDAsMTAwLDIsCisgICAgMCwxMzEsMiwxLDgzLDEwMCwwLDAsODMsMTAwLDAsMCw4Myw0MSwzLDc4LAorICAgIDExNCwyMTgsMCwwLDAsOTAsNiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCw0MSwzLDExNCwKKyAgICAxMDYsMCwwLDAsMTE0LDE2MywwLDAsMCwxMTQsMTc0LDAsMCwwLDQxLDQsCisgICAgMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICAxMywxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwxMTQsMTQsMSwwLDAsNTYsNSwwLDAsMTE1LDYsMCwwLAorICAgIDAsMCwyLDE1LDEsMTksMiwxMjIsMjQsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywKKyAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLDk1LDExNSwxMTIsMTAxLAorICAgIDk5LDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDIzLDAsMCwwLDExNiwwLDAsMTA2LDEsCisgICAgMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDE5LDAsMTI0LDAsMCw4MywxMDAsMSwKKyAgICAwLDgzLDQxLDIsMTIyLDkzLDcwLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAorICAgIDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwKKyAgICAzMiw4NSwxMTUsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw0MCw0MSwKKyAgICAzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiw3OCw0MSwyLDExNCwxMDYsMCwwLDAsMTE0LDE2MywwLDAsMCwKKyAgICA0MSwzLDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwKKyAgICAxMTQsMTUsMSwwLDAsNjMsNSwwLDAsMTE1LDIsMCwwLDAsMCw3LAorICAgIDEyMiwyNiw3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwKKyAgICA0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMSwwLDAsCisgICAgMCwwLDAsMCwwLDMsMCwwLDAsNCwwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsOTUsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTI1LAorICAgIDEsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDEsMCwxMzEsMSwwLDExNSw1NywKKyAgICAwLDExNiw0LDAsMTAwLDEsMCwxMDYsNSwwLDEyNCwxLDAsMTMxLDEsMCwKKyAgICAxMDAsMiwwLDEyNCwxLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTE2LAorICAgIDYsMCwxMTYsMiwwLDEwNiw3LDAsMTI0LDEsMCwxMzEsMiwwLDEyNSwyLAorICAgIDAsMTE2LDgsMCwxMjQsMiwwLDEyNCwwLDAsMTA2LDksMCwxMzEsMiwwLAorICAgIDEsMTAwLDAsMCw4Myw0MSwzLDc4LDEyMiwyNywxMjMsMzMsMTE0LDEyNSwzMiwxMDUsCisgICAgMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExNCw2NywwLDAsMCw0MSwxMCwxMTQsMjA5LDAsMCwKKyAgICAwLDExNCw2NywwLDAsMCwxMTQsMTA2LDAsMCwwLDExNCwxNjMsMCwwLDAsCisgICAgMTE0LDE1NCwwLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDExNCwwLDAsMCwyMTgsCisgICAgMTcsMTAzLDEwMSwxMTYsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsOTUsMTExLDk4LDEwNiwxMDEsCisgICAgOTksMTE2LDExNCwxNzYsMCwwLDAsMTE0LDYzLDAsMCwwLDQxLDMsMTE0LDE4MCwKKyAgICAwLDAsMCwxMTQsNjcsMCwwLDAsMTE0LDE5NSwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMiwxLDAsCisgICAgMCw3Miw1LDAsMCwxMTUsMTIsMCwwLDAsMCwyLDEyLDEsMTUsMSwKKyAgICAxOCwxLDEyLDEsMTgsMSwxMjIsMjYsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksCisgICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsMTMsMCwwLDAsMTE2LDAsMCwxMjQsCisgICAgMCwwLDEyNCwxLDAsMTMxLDIsMCw4Myw0MSwxLDEyMiw5NSw3NiwxMTEsOTcsCisgICAgMTAwLDMyLDk3LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LAorICAgIDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSwKKyAgICA5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMSwxMjAsMTAxLDk5LAorICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsCisgICAgMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDQxLDEsMTE0LDE4MSwKKyAgICAwLDAsMCw0MSwyLDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw1LAorICAgIDEsMCwwLDgxLDUsMCwwLDExNSwyLDAsMCwwLDAsNywxMjIsMjYsCisgICAgNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTA4LAorICAgIDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLAorICAgIDAsMCwwLDIsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTMsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwKKyAgICA4Myw0MSwxLDEyMiw0NSw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwzMiwxMDIsMTExLDExNCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAorICAgIDEwMSw0Niw0MSwyLDExNCwxMDYsMCwwLDAsMTE0LDIyLDEsMCwwLDQxLDIsCisgICAgMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE2LDEsMCwwLDkwLDUsCisgICAgMCwwLDExNSwyLDAsMCwwLDAsNCwxMjIsMjMsNzAsMTE0LDExMSwxMjIsMTAxLAogICAgIDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLAogICAgIDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwKICAgICAwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLAotICAgIDQwLDIsMCwwLDAsMTE3LDU0LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMzIsNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwxMDAsMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCwKLSAgICA5NywxMTgsMTAxLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsCi0gICAgNzgsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwKLSAgICAyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwwLAotICAgIDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwMywxMDEsMTE2LDk1LDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMjE0LDIsMCwwLDExNSwyLDAsMCwwLDAsNCwxMTcsCi0gICAgMjUsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsCi0gICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsCi0gICAgMCwwLDExNSwxMywwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDEsMCwKLSAgICAxMzEsMSwwLDgzLDQwLDEsMCwwLDAsMTE3LDQ2LDAsMCwwLDgyLDEwMSwKLSAgICAxMTYsMTE3LDExNCwxMTAsMzIsODQsMTE0LDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsCi0gICAgMTE1LDMyLDk3LDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0Niw0MCwyLDAsMCwKLSAgICAwLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywxNywwLDAsMCwxMDUsCi0gICAgMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICA0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDIyMCwyLDAsMCwxMTUsMiwwLDAsMCwwLDQsCi0gICAgMTE3LDI1LDAsMCwwLDcwLDExNCwxMTEsMTIyLDEwMSwxMTAsNzMsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDc4LDQwLAotICAgIDE1LDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LAotICAgIDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwKLSAgICAxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsCi0gICAgOTUsMTE3LDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsMTEsMCwKLSAgICAwLDAsOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDExLDAsCi0gICAgMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxMTcsNCwwLAotICAgIDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LDk1LDEwOCwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE2LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsCi0gICAgMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDExLDAsMCwwLDEwOCwKLSAgICAxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwKLSAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5NywKLSAgICA5OSwxMDcsOTcsMTAzLDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICA3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTczLDIsMCwwLDExNSwyOCwwLDAsCi0gICAgMCwxNiw3LDYsMiwxOCw0LDMsMSwxOCw0LDMsMSwzLDEsMywKLSAgICAxLDI3LDE0LDMsMSwyMSw1LDMsMSwyMSw1LDMsMSwxMTcsMTQsMCwKLSAgICAwLDAsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsCi0gICAgOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsNCwwLDAsCi0gICAgMCw2NiwwLDAsMCwxMTUsMTAxLDAsMCwwLDEyNCwwLDAsNjksMTAxLDAsCi0gICAgMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsCi0gICAgMTAwLDIsMCw5MCw0LDAsMTAwLDMsMCw5MCw1LDAsMTAwLDExLDAsOTAsCi0gICAgNywwLDEwMSw4LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsMTMxLDEsCi0gICAgMCw5MCw5LDAsMTAxLDgsMCwxMDAsNiwwLDEwMCw3LDAsMTMyLDAsMCwKLSAgICAxMzEsMSwwLDkwLDEwLDAsMTAxLDgsMCwxMDAsMTAsMCwxMDAsOCwwLDEwMCwKLSAgICA5LDAsMTMyLDEsMCwxMzEsMSwwLDkwLDEyLDAsMTAwLDEwLDAsODMsNDAsCi0gICAgMTIsMCwwLDAsMTE3LDIxLDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LAotICAgIDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw2NywKLSAgICAwLDAsMCw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiwKLSAgICAxMDAsMTAxLDk5LDEwOCw5NywxMTQsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLAotICAgIDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDMyLDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsCi0gICAgNDYsMTAsMzIsMzIsMzIsMzIsMTE3LDU5LDAsMCwwLDgzLDExMSwxMDIsMTE2LDExOSwKLSAgICA5NywxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLAotICAgIDExMCw2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwKLSAgICAxMTEsMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDEyNSwxMTcsNjUsMCwwLDAsODMsMTExLDEwMiwxMTYsMTE5LAotICAgIDk3LDExNCwxMDEsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsCi0gICAgMTEwLDY3LDExMSwxMTQsMTAxLDkyLDEyMywxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LAotICAgIDExMSwxMTAsMTI1LDkyLDc3LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDkyLDEyMywxMDIsMTE3LDEwOCwKLSAgICAxMDgsMTEwLDk3LDEwOSwxMDEsMTI1LDkyLDY4LDEwMSw5OCwxMTcsMTAzLDk5LDIsMCwwLAorICAgIDQxLDIsMTIyLDU0LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsCisgICAgOTcsMTE1LDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDExNSwzMiwxMDAsMTExLDMyLDExMCwxMTEsMTE2LDMyLDEwNCw5NywxMTgsMTAxLDMyLDExNSwxMTEsCisgICAgMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsCisgICAgNDEsMiwxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTcsMSwwLDAsCisgICAgOTYsNSwwLDAsMTE1LDIsMCwwLDAsMCw0LDEyMiwyNSw3MCwxMTQsMTExLAorICAgIDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwKKyAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLAorICAgIDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLAorICAgIDExNiwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDEsMSwxMjIsCisgICAgNDYsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw4NCwxMTQsMTE3LDEwMSwzMiwxMDUsMTAyLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDMyLDEwNSwxMTUsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDQ2LDQxLAorICAgIDIsMTE0LDEwNiwwLDAsMCw5MCwxNywxMDUsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsCisgICAgMTEwLDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0MSwyLDExNCwxMiwxLDAsMCwKKyAgICAxMTQsMTU5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCwyMjAsMCwwLDAsMTAyLDUsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsNCwxMjIsMjUsNzAsMTE0LDExMSwxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwMSwxMTQsNDYsMTA1LDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDEsCisgICAgMTUsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsCisgICAgMTE0LDU5LDAsMCwwLDExNCwxOCwxLDAsMCwxMTQsMjA2LDAsMCwwLDExNCwKKyAgICAxOSwxLDAsMCwxMTQsMTQsMSwwLDAsMTE0LDE1LDEsMCwwLDExNCwyLAorICAgIDEsMCwwLDExNCw1LDEsMCwwLDExNCwxNjUsMCwwLDAsMTE0LDE2LDEsCisgICAgMCwwLDExNCwxNywxLDAsMCwxMTQsMjIwLDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwyMCwxLDAsMCwzOCw1LDAsMCwxMTUsMjgsMCwwLDAsMTIsNywKKyAgICA2LDIsMTgsOSwzLDEsMjEsNiwzLDEsMTgsOCwxOCw5LDE4LDksCisgICAgMywxLDIxLDUsMywxLDIxLDUsMywxLDExNCwyMCwxLDAsMCw5OSwKKyAgICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAorICAgIDY0LDAsMCwwLDExNSwxMjEsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLAorICAgIDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCw5MCw0LAorICAgIDAsMTAwLDMsMCw5MCw1LDAsMTAwLDQsMCw5MCw2LDAsMTAxLDcsMCwKKyAgICAxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsCisgICAgNywwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLDEzMSwxLDAsOTAsOSwKKyAgICAwLDEwMSw3LDAsMTAwLDksMCwxMDAsOSwwLDEwMCwxMCwwLDEwMCwxMSwwLAorICAgIDEzMiwyLDAsMTMxLDEsMCw5MCwxMCwwLDEwMSw3LDAsMTAwLDksMCwxMDAsCisgICAgMTIsMCwxMDAsMTMsMCwxMzIsMSwwLDEzMSwxLDAsOTAsMTEsMCwxMDAsOSwKKyAgICAwLDgzLDQxLDE0LDIxOCwyMSw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLAorICAgIDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMjIsNjIsNzcsMTAxLDExNiwKKyAgICA5NywzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLAorICAgIDExNCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTAwLDEwMSw5OSwxMDgsOTcsMTE0LAorICAgIDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LDEwMSwzMiw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LAorICAgIDExNSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDQ2LDEyMiw1OSw4MywxMTEsMTAyLAorICAgIDExNiwxMTksOTcsMTE0LDEwMSw5Miw4MCwxMjEsMTE2LDEwNCwxMTEsMTEwLDkyLDgwLDEyMSwxMTYsCisgICAgMTA0LDExMSwxMTAsNjcsMTExLDExNCwxMDEsOTIsMTIzLDExNSwxMjEsMTE1LDk1LDExOCwxMDEsMTE0LAorICAgIDExNSwxMDUsMTExLDExMCwxMjUsOTIsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsOTIsMTIzLDEwMiwKKyAgICAxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMjUsMTIyLDY1LDgzLDExMSwxMDIsMTE2LDExOSw5NywKKyAgICAxMTQsMTAxLDkyLDgwLDEyMSwxMTYsMTA0LDExMSwxMTAsOTIsODAsMTIxLDExNiwxMDQsMTExLDExMCwKKyAgICA2NywxMTEsMTE0LDEwMSw5MiwxMjMsMTE1LDEyMSwxMTUsOTUsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsCisgICAgMTEwLDEyNSw5Miw3NywxMTEsMTAwLDExNywxMDgsMTAxLDExNSw5MiwxMjMsMTAyLDExNywxMDgsMTA4LAorICAgIDExMCw5NywxMDksMTAxLDEyNSw5Miw2OCwxMDEsOTgsMTE3LDEwMyw3MCw5OSwyLDAsMCwKICAgICAwLDAsMCwwLDAsMiwwLDAsMCwxMSwwLDAsMCw2NywwLDAsCiAgICAgMCwxMTUsNjcsMCwwLDAsMTIxLDIzLDAsMTE2LDAsMCwxMDYsMSwwLDExNiwKICAgICAwLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwyLDAsODMsODcsMTEwLDM3LDAsCiAgICAgNCwxMTYsMywwLDEwNywxMCwwLDExNCw2MiwwLDEsMSwxLDExNiwwLDAsCiAgICAgMTA2LDEsMCwxMTYsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsMiwwLDgzLAotICAgIDg5LDExMCwxLDAsODgsMTAwLDAsMCw4Myw0MCwxLDAsMCwwLDc4LDQwLAotICAgIDUsMCwwLDAsMTE3LDcsMCwwLDAsOTUsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsCi0gICAgMTE3LDcsMCwwLDAsNzksMTEyLDEwMSwxMTAsNzUsMTAxLDEyMSwxMTcsMTcsMCwwLAotICAgIDAsNzIsNzUsNjksODksOTUsNjcsODUsODIsODIsNjksNzgsODQsOTUsODUsODMsCi0gICAgNjksODIsMTE3LDEyLDAsMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDY5LDExNCwKLSAgICAxMTQsMTExLDExNCwxMTcsMTgsMCwwLDAsNzIsNzUsNjksODksOTUsNzYsNzksNjcsCi0gICAgNjUsNzYsOTUsNzcsNjUsNjcsNzIsNzMsNzgsNjksNDAsMiwwLDAsMCwxMTcsCi0gICAgMywwLDAsMCw5OSwxMDgsMTE1LDExNywzLDAsMCwwLDEwNywxMDEsMTIxLDQwLAotICAgIDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE0LDAsMCwwLAotICAgIDk1LDExMSwxMTIsMTAxLDExMCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDI0MCwyLAotICAgIDAsMCwxMTUsOCwwLDAsMCwwLDIsMywxLDIzLDEsMTMsMSwxMTcsCi0gICAgMzYsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LAotICAgIDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTExLDExMiwxMDEsMTEwLDk1LAotICAgIDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTksMiwwLDAsMCwwLDAsMCwKLSAgICAwLDYsMCwwLDAsMTYsMCwwLDAsNjcsMCwwLDAsMTE1LDE0MiwwLAotICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTE0LDIxLDAsMTI0LDAsMCwxMDYsMSwKLSAgICAwLDEyNSwyLDAsMTEwLDksMCwxMjQsMCwwLDEwNiwyLDAsMTI1LDIsMCwKLSAgICAxMjQsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMjQsMSwwLDEwMCwyLDAsMTE2LAotICAgIDQsMCwxMDYsNSwwLDEwMCwwLDAsMTAwLDMsMCwxMzMsMiwwLDI1LDEzMSwKLSAgICAwLDIsMTI1LDMsMCwxMjEsNDYsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LDMsCi0gICAgMCwxMzEsMSwwLDE0MywyNSwwLDEyNSw0LDAsMTE2LDcsMCwxMDYsOCwwLAotICAgIDEyNCw0LDAsMTAwLDQsMCwxMzEsMiwwLDEyNSw1LDAsODcsMTAwLDAsMCwKLSAgICA4MSw4OCw4NywxMTAsMjIsMCw0LDExNiw5LDAsMTA3LDEwLDAsMTE0LDEzNywwLAotICAgIDEsMSwxLDEwMCwwLDAsODMsODksMTEwLDEsMCw4OCwxMjQsNSwwLDgzLAotICAgIDQwLDUsMCwwLDAsNzgsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCwKLSAgICA5NywxMDksMTAxLDExNywxMSwwLDAsMCwxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsCi0gICAgMTA1LDExMSwxMTAsMTA1LDMsMCwwLDAsMTE3LDAsMCwwLDAsNDAsMTEsMCwKLSAgICAwLDAsMTE3LDExLDAsMCwwLDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg1LDczLAotICAgIDc2LDY4LDExNywxOCwwLDAsMCw4Miw2OSw3MSw3Myw4Myw4NCw4Miw4OSw5NSwKLSAgICA3NSw2OSw4OSw5NSw2OCw2OSw2Niw4NSw3MSwxMTcsMTIsMCwwLDAsODIsNjksCi0gICAgNzEsNzMsODMsODQsODIsODksOTUsNzUsNjksODksMTE3LDYsMCwwLDAsMTAyLAotICAgIDExMSwxMTQsMTA5LDk3LDExNiwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLAotICAgIDAsMCwxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMTE3LDE0LDAsMCwwLDk1LDExMSwKLSAgICAxMTIsMTAxLDExMCw5NSwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDExNyw3LDAsMCwKLSAgICAwLDk1LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDExNywxMCwwLDAsMCw4MSwxMTcsMTAxLAotICAgIDExNCwxMjEsODYsOTcsMTA4LDExNywxMDEsMTE3LDEyLDAsMCwwLDg3LDEwNSwxMTAsMTAwLAotICAgIDExMSwxMTksMTE1LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDEwMSw0MCw2LDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNywxMiwwLDAsMCwKLSAgICAxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk1LDEwNywxMDEsMTIxLDExNywzLDAsMCwKLSAgICAwLDEwNywxMDEsMTIxLDExNyw0LDAsMCwwLDEwNCwxMDcsMTAxLDEyMSwxMTcsOCwwLAotICAgIDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsMTE1LDEwMSw5NywxMTQsCi0gICAgOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMjQ3LDIsMCwwLDExNSwKLSAgICAyMiwwLDAsMCwwLDIsOSwxLDEyLDIsOSwxLDE1LDEsMjIsMSwKLSAgICAzLDEsMTgsMSwyOCwxLDEzLDEsOSwxLDExNywzOCwwLDAsMCw4NywKKyAgICA4OSwxMTAsMSwwLDg4LDEwMCwwLDAsODMsNDEsMSw3OCw0MSw1LDIxOCw3LAorICAgIDk1LDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDkwLDcsNzksMTEyLDEwMSwxMTAsNzUsMTAxLDEyMSwKKyAgICA5MCwxNyw3Miw3NSw2OSw4OSw5NSw2Nyw4NSw4Miw4Miw2OSw3OCw4NCw5NSw4NSwKKyAgICA4Myw2OSw4MiwxMTQsNDAsMCwwLDAsOTAsMTgsNzIsNzUsNjksODksOTUsNzYsCisgICAgNzksNjcsNjUsNzYsOTUsNzcsNjUsNjcsNzIsNzMsNzgsNjksNDEsMiwxMTQsMTIsCisgICAgMSwwLDAsMjE4LDMsMTA3LDEwMSwxMjEsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMjE4LDE0LDk1LDExMSwxMTIsMTAxLDExMCw5NSwxMTQsCisgICAgMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDEyMSw1LDAsMCwxMTUsOCwwLDAsMCwKKyAgICAwLDIsMywxLDIzLDEsMTMsMSwxMjIsMzYsODcsMTA1LDExMCwxMDAsMTExLDExOSwKKyAgICAxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCisgICAgOTUsMTExLDExMiwxMDEsMTEwLDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDYsMCwwLDAsMTYsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDE0MiwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTE0LDIxLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEyNSwyLDAsMTEwLDksMCwxMjQsMCwwLAorICAgIDEwNiwyLDAsMTI1LDIsMCwxMjQsMiwwLDEwNiwzLDAsMTAwLDEsMCwxMjQsCisgICAgMSwwLDEwMCwyLDAsMTE2LDQsMCwxMDYsNSwwLDEwMCwwLDAsMTAwLDMsCisgICAgMCwxMzMsMiwwLDI1LDEzMSwwLDIsMTI1LDMsMCwxMjEsNDYsMCwxMjQsMCwKKyAgICAwLDEwNiw2LDAsMTI0LDMsMCwxMzEsMSwwLDE0MywyNSwwLDEyNSw0LDAsCisgICAgMTE2LDcsMCwxMDYsOCwwLDEyNCw0LDAsMTAwLDQsMCwxMzEsMiwwLDEyNSwKKyAgICA1LDAsODcsMTAwLDAsMCw4MSw4OCw4NywxMTAsMjIsMCw0LDExNiw5LDAsCisgICAgMTA3LDEwLDAsMTE0LDEzNywwLDEsMSwxLDEwMCwwLDAsODMsODksMTEwLDEsCisgICAgMCw4OCwxMjQsNSwwLDgzLDQxLDUsNzgsMTE0LDE1OSwwLDAsMCw5MCwxMSwKKyAgICAxMTUsMTIxLDExNSw5NSwxMTgsMTAxLDExNCwxMTUsMTA1LDExMSwxMTAsMTE0LDEzNywwLDAsMCwKKyAgICAxMTQsMzAsMCwwLDAsNDEsMTAsMjE4LDExLDY4LDY5LDY2LDg1LDcxLDk1LDY2LAorICAgIDg1LDczLDc2LDY4LDIxOCwxOCw4Miw2OSw3MSw3Myw4Myw4NCw4Miw4OSw5NSw3NSwKKyAgICA2OSw4OSw5NSw2OCw2OSw2Niw4NSw3MSwyMTgsMTIsODIsNjksNzEsNzMsODMsODQsCisgICAgODIsODksOTUsNzUsNjksODksMTE0LDQ3LDAsMCwwLDExNCw3LDAsMCwwLAorICAgIDIxOCw3LDExOCwxMDEsMTE0LDExNSwxMDUsMTExLDExMCwxMTQsMjYsMSwwLDAsMTE0LDI0LAorICAgIDEsMCwwLDkwLDEwLDgxLDExNywxMDEsMTE0LDEyMSw4Niw5NywxMDgsMTE3LDEwMSwxMTQsCisgICAgNDAsMCwwLDAsNDEsNiwxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwKKyAgICA5MCwxMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDk1LDEwNywxMDEsMTIxLDExNCwyNSwKKyAgICAxLDAsMCw5MCw0LDEwNCwxMDcsMTAxLDEyMSwyMTgsOCwxMDIsMTA1LDEwOCwxMDEsMTEyLAorICAgIDk3LDExNiwxMDQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMjE4LDE2LDk1LDExNSwxMDEsOTcsMTE0LDk5LDEwNCw5NSwxMTQsMTAxLDEwMywxMDUsCisgICAgMTE1LDExNiwxMTQsMTIxLDEyOCw1LDAsMCwxMTUsMjIsMCwwLDAsMCwyLDksCisgICAgMSwxMiwyLDksMSwxNSwxLDIyLDEsMywxLDE4LDEsMjgsMSwxMywKKyAgICAxLDksMSwxMjIsMzgsODcsMTA1LDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsCisgICAgMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTE1LDEwMSw5NywxMTQsCisgICAgOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzgsOTksNCwwLDAsCisgICAgMCwwLDAsMCwwLDgsMCwwLDAsMTQsMCwwLDAsNjcsMCwwLAorICAgIDAsMTE1LDE1NSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsCisgICAgMSwwLDEyNSw0LDAsMTI0LDQsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDMxLAorICAgIDAsMTAwLDAsMCw4MywxMjEsMTQsMCwxMTYsMSwwLDEyNCw0LDAsMTMxLDEsCisgICAgMCwxLDg3LDExMCwyMiwwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNjksMCwKKyAgICAxLDEsMSwxMDAsMCwwLDgzLDg5LDExMCwxLDAsODgsMTIwLDc4LDAsMTE2LAorICAgIDMsMCwxMzEsMCwwLDY4LDkzLDY3LDAsOTIsMiwwLDEyNSw1LDAsMTI1LAorICAgIDYsMCwxMjQsNCwwLDEwNiw0LDAsMTE2LDUsMCwxMjQsNiwwLDEzMSwxLAorICAgIDAsMTMxLDEsMCwxMTQsODAsMCwxMTYsNiwwLDEyNCwxLDAsMTI0LDUsMCwKKyAgICAxMjQsMSwwLDEyNCw0LDAsMTMxLDIsMCwxMDAsMSwwLDEyNCw0LDAsMTMxLAorICAgIDIsMSwxMjUsNywwLDEyNCw3LDAsODMsMTEzLDgwLDAsODcsMTAwLDAsMCwKKyAgICA4Myw0MSwyLDc4LDExNCwyMTgsMCwwLDAsNDEsNywxMTQsMzIsMSwwLDAsCisgICAgMTE0LDM5LDAsMCwwLDExNCw0MCwwLDAsMCwxMTQsMjQxLDAsMCwwLDExNCwKKyAgICAyMzEsMCwwLDAsMTE0LDIzMiwwLDAsMCwxMTQsMTc0LDAsMCwwLDQxLDgsCisgICAgMTE0LDEyLDEsMCwwLDExNCwxNTksMCwwLDAsMTE0LDM1LDAsMCwwLDExNCwKKyAgICAxMywxLDAsMCwxMTQsMzEsMSwwLDAsMTE0LDE3MCwwLDAsMCwxMTQsMTI2LAorICAgIDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDUsMCwwLDAsMTE0LDE0LDEsMCwwLDE0Myw1LDAsMCwKKyAgICAxMTUsMjQsMCwwLDAsMCwyLDE1LDEsMTIsMSw0LDEsMywxLDE0LAorICAgIDEsMTMsMSw5LDEsMjIsMSwyMSwxLDIxLDEsOSwxLDEyMiwzMSw4NywKICAgICAxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTUsMTAxLDk3LDExNCw5OSwxMDQsOTUsMTE0LDEwMSwxMDMsCi0gICAgMTA1LDExNSwxMTYsMTE0LDEyMSw5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLAotICAgIDAsMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsMTM3LDAsMCwwLDEyNCwKLSAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsMywKLSAgICAwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMzEsMCwxMDAsMSwwLDgzLDEyMSwxNywKLSAgICAwLDExNiwyLDAsMTA2LDMsMCwxMjQsMywwLDEzMSwxLDAsMSw4NywxMTAsCi0gICAgMjIsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDcyLDAsMSwxLDEsMTAwLAotICAgIDEsMCw4Myw4OSwxMTAsMSwwLDg4LDEyMCw1NywwLDExNiw1LDAsMTMxLDAsCi0gICAgMCw2OCw5Myw0NiwwLDkyLDIsMCwxMjUsNCwwLDEyNSw1LDAsMTI0LDMsCi0gICAgMCwxMDYsNiwwLDExNiw3LDAsMTI0LDUsMCwxMzEsMSwwLDEzMSwxLDAsCi0gICAgMTE0LDgzLDAsMTI0LDQsMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCw4MywKLSAgICAxMTMsODMsMCw4NywxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDM0LDAsCi0gICAgMCwwLDcwLDEwNSwxMTAsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywKLSAgICAxMDksMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExNCwxMDEsMTAzLDEwNSwxMTUsCi0gICAgMTE2LDExNCwxMjEsNDYsNzgsNDAsOCwwLDAsMCwxMTcsMTYsMCwwLDAsOTUsCi0gICAgMTE1LDEwMSw5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LAotICAgIDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsOTUsMTExLDExNSwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTE2LDk3LDExNiwxMTcsNywwLDAsMCw3OSw4MywKLSAgICA2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDI3LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwKLSAgICAxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsMTA4LDEwMSw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsOCwwLDAsMCwxMDEsMTEwLDEwMCwxMTUsMTE5LDEwNSwKLSAgICAxMTYsMTA0LDExNyw1LDAsMCwwLDExNiwxMTcsMTEyLDEwOCwxMDEsNDAsNiwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgOCwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsOCwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsCi0gICAgMTA1LDEyMCwxMDEsMTE1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKLSAgICA2LDMsMCwwLDExNSwyMCwwLDAsMCwwLDMsMTUsMSwxMiwxLDQsCi0gICAgMSwzLDEsMTcsMSwxMywxLDksMSwyMiwxLDIxLDEsMTE3LDMzLDAsCi0gICAgMCwwLDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LAotICAgIDEyMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSw3OCw3MCw0MCwxMywwLDAsMCwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsCi0gICAgOTksOTUsOTUsMTE3LDEyLDAsMCwwLDgyLDY5LDcxLDczLDgzLDg0LDgyLDg5LAotICAgIDk1LDc1LDY5LDg5LDExNywxOCwwLDAsMCw4Miw2OSw3MSw3Myw4Myw4NCw4MiwKLSAgICA4OSw5NSw3NSw2OSw4OSw5NSw2OCw2OSw2Niw4NSw3MSwxMTcsNSwwLDAsMCwKLSAgICA3MCw5NywxMDgsMTE1LDEwMSwxMTcsMTEsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsCi0gICAgNjYsODUsNzMsNzYsNjgsMTE3LDExLDAsMCwwLDk5LDEwOCw5NywxMTUsMTE1LDEwOSwKLSAgICAxMDEsMTE2LDEwNCwxMTEsMTAwLDExNywxNCwwLDAsMCw5NSwxMTEsMTEyLDEwMSwxMTAsOTUsCi0gICAgMTE0LDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSwxMTcsMTYsMCwwLDAsOTUsMTE1LDEwMSwKLSAgICA5NywxMTQsOTksMTA0LDk1LDExNCwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCwKLSAgICA5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjEsMCwwLDAsODcsMTA1LDExMCwxMDAsMTExLAotICAgIDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgMjI3LDIsMCwwLDExNSwxNiwwLDAsMCwxNiwzLDYsMyw2LDMsNiwKLSAgICAyLDYsMiwxOCw3LDE4LDE1LDMsMSwxMTcsMjEsMCwwLDAsODcsMTA1LAotICAgIDExMCwxMDAsMTExLDExOSwxMTUsODIsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDcwLDEwNSwxMTAsCi0gICAgMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCi0gICAgNSwwLDAsMCw2NiwwLDAsMCwxMTUsNzQsMCwwLDAsMTI0LDAsMCwKLSAgICA2OSwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLAotICAgIDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLAotICAgIDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LDAsMTAwLDYsCi0gICAgMCwxMDAsMTAsMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMSwxMzEsMSwwLAotICAgIDkwLDgsMCwxMDAsOSwwLDgzLDQwLDExLDAsMCwwLDExNywxMywwLDAsCi0gICAgMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsMTE3LDgzLAotICAgIDAsMCwwLDY2LDk3LDExNSwxMDEsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTExLDEwMiwKLSAgICAzMiw5OSwxMTEsMTA5LDEwOSwxMTEsMTEwLDMyLDk5LDExMSwxMDAsMTAxLDMyLDExMCwxMDEsMTAxLAotICAgIDEwMCwxMDEsMTAwLDMyLDk4LDEyMSwzMiw5OCwxMTEsMTE2LDEwNCwzMiw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMTAsMzIsMzIsMzIsCi0gICAgMzIsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDUsCi0gICAgMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsODgsMCwwLDAsCi0gICAgMTE2LDAsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEzMSwKLSAgICAxLDAsMTAwLDEsMCwyNSwxMjUsMiwwLDEyNCwyLDAsMTA2LDIsMCwxMDAsCi0gICAgMiwwLDEwMCwxLDAsMTMxLDIsMCwxMDAsMywwLDI1LDEyNSwzLDAsMTI0LAotICAgIDEsMCwxMDYsMywwLDEwMCwyLDAsMTMxLDEsMCwxMDAsNCwwLDI1LDEyNSwKLSAgICA0LDAsMTI0LDMsMCwxMDAsNSwwLDEwNywyLDAsMTExLDg3LDAsMTI0LDQsCi0gICAgMCwxMDAsNSwwLDEwNywzLDAsODMsNDAsNiwwLDAsMCwxMTcsMTQxLDAsCi0gICAgMCwwLDY3LDExMSwxMTAsOTksMTE0LDEwMSwxMTYsMTAxLDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsCi0gICAgMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMTEsMTAyLDMyLDczLDExMCwxMTUsCi0gICAgMTEyLDEwMSw5OSwxMTYsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDMyLDk4LDEyMSwzMiw5OSwxMDQsMTAxLDk5LDEwNywxMDUsMTEwLAotICAgIDEwMywzMiwxMDUsMTAyLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDExMiw5NywxMTYsMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDEwMSwxMDAsMzIsOTgsCi0gICAgMTIxLDMyLDEwMywxMDEsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMDQsCi0gICAgOTcsMTE1LDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwzMiwxMTEsMTAyLAotICAgIDMyLDM5LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw0NiwxMTIsMTIxLDM5LDQ2LDEwNSwKLSAgICAxLDAsMCwwLDExNywxLDAsMCwwLDQ2LDEwNSwwLDAsMCwwLDEwNSwKLSAgICAyLDAsMCwwLDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSwKLSAgICA5NSw0MCw0LDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSwxMTUsMTEyLDEwOCwxMDUsMTE2LDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsCi0gICAgMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDYsMCwwLDAsMTE0LDExNSwxMTIsMTA4LAotICAgIDEwNSwxMTYsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsCi0gICAgMTEwLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsCi0gICAgMCwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDEzLDAsMCwwLDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSw5NSw5OCw5NywxMTUsMTAxLDExNyw5LDAsMCwwLAotICAgIDExNiw5NywxMDUsMTA4LDk1LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwKLSAgICAwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDI2LDMsMCwwLDExNSw4LDAsMCwwLDAsMywyNSwKLSAgICAxLDIyLDEsMTksMSwxMTcsMjQsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk5LDUsMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCwyMiwKLSAgICAwLDAsMCw2NywwLDAsMCwxMTUsMjA4LDEsMCwwLDEyNCwyLDAsMTAwLAotICAgIDEsMCwxMDAsMiwwLDEzMywyLDAsMjUsMTI1LDUsMCwxMjQsMiwwLDEwMCwKLSAgICAyLDAsMTAwLDMsMCwxMzMsMiwwLDI1LDEyNSw2LDAsMTI0LDIsMCwxMDAsCi0gICAgMywwLDEwMCw0LDAsMTMzLDIsMCwyNSwxMjUsNywwLDEyNCw1LDAsMTE2LAotICAgIDAsMCwxMDcsMywwLDExNCwxMTUsMCwxMDAsNSwwLDEwNiwxLDAsMTI0LDEsCi0gICAgMCwxMjQsNSwwLDEzMSwyLDAsMTI1LDgsMCwxMTYsMiwwLDEyNCw4LDAsCi0gICAgMTMxLDEsMCwxLDExNiwzLDAsMTI0LDgsMCwxMDAsNiwwLDEyNCwxLDAsCi0gICAgMTAwLDcsMCwxMjQsMywwLDEzMSwxLDIsMTMwLDEsMCwxMTAsMTE2LDAsMTE2LAotICAgIDQsMCwxMjQsNiwwLDEzMSwxLDAsMTAwLDIsMCwxMDcsMywwLDExNCwxNzMsCi0gICAgMCwxMDAsOCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSw5LDAsCi0gICAgMTE2LDIsMCwxMjQsOSwwLDEzMSwxLDAsMSwxMTYsNSwwLDEyNCw5LDAsCi0gICAgMTMxLDEsMCwxMzAsMSwwLDExMCw1OCwwLDExNiw0LDAsMTI0LDcsMCwxMzEsCi0gICAgMSwwLDEwMCwyLDAsMTA3LDMsMCwxMTQsMjMxLDAsMTAwLDksMCwxMDYsMSwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxMjUsOSwwLDExNiwyLDAsMTI0LDksMCwKLSAgICAxMzEsMSwwLDEsMTE2LDUsMCwxMjQsOSwwLDEzMSwxLDAsMTMwLDEsMCwKLSAgICAxMTAsMCwwLDEyNCw0LDAsMTAwLDEsMCwxMDcsOSwwLDExNCwxOTQsMSwxMjEsCi0gICAgMjAsMCwxMTYsNywwLDEyNCw0LDAsMTAwLDEwLDAsMjUsMTMxLDEsMCwxMjUsCi0gICAgMTAsMCw4NywxMTAsMTgsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDI3LDEsCi0gICAgMSwxLDEsODksMTEwLDcxLDAsODgsMTE2LDksMCwxMjQsNiwwLDEzMSwxLAotICAgIDAsMTI0LDEwLDAsMTA3LDMsMCwxMTQsOTgsMSwxMDAsMTEsMCwxMDYsMSwwLAotICAgIDEyNCwxLDAsMTMxLDEsMCwxMjUsOSwwLDExNiwyLDAsMTI0LDksMCwxMzEsCi0gICAgMSwwLDEsMTE2LDMsMCwxMjQsOSwwLDEwMCw2LDAsMTI0LDEsMCwxMDAsCi0gICAgNywwLDEyNCwzLDAsMTMxLDEsMiwxMzAsMSwwLDExMCwwLDAsMTIxLDE4LAotICAgIDAsMTI0LDQsMCwxMDAsMTIsMCwyNSwxMDAsMTMsMCw2NCwxMjUsMTEsMCw4NywKLSAgICAxMTAsMTgsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDEzNiwxLDEsMSwxLAotICAgIDg5LDExMywxOTQsMSw4OCwxMTYsOSwwLDEyNCw3LDAsMTMxLDEsMCwxMjQsMTEsCi0gICAgMCwxMDcsMywwLDExNCwxOTQsMSwxMTYsMywwLDEwMCwxMSwwLDEwNiwxLDAsCi0gICAgMTI0LDEsMCwxMzEsMSwwLDEwMCw2LDAsMTI0LDEsMCwxMDAsNywwLDEyNCwKLSAgICAzLDAsMTMxLDEsMiwxMzAsMSwwLDExMywxOTQsMSwxMTAsMCwwLDEyNCwyLAotICAgIDAsMTAwLDQsMCwxMDAsMSwwLDEzMywyLDAsMjUsODMsNDAsMTQsMCwwLAotICAgIDAsMTE3LDE5MywwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLAotICAgIDMyLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMTA4LDEwMSwxMDAsMzIsOTgsMTIxLDExNiwxMDEsCi0gICAgMTE1LDMyLDEwMiwxMTQsMTExLDEwOSwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw0NCwKLSAgICAzMiwxMTgsMTAxLDExNCwxMDUsMTAyLDEyMSwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDksCi0gICAgOTcsMTAzLDEwNSw5OSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTAsMTE3LDEwOSwKLSAgICA5OCwxMDEsMTE0LDQ0LDMyLDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsOTcsCi0gICAgMTEwLDEwMCwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDExNSwxMDUsMTIyLDEwMSwzMiw5NywKLSAgICAxMDgsMTExLDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDk3LDEyMSw0NiwxMCwxMCwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwKLSAgICA5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsMTA1LDExNSwzMiw3OCwxMTEsMTEwLDEwMSwzMiwxMTYsCi0gICAgMTA0LDEwMSwxMTAsMzIsMTE1LDEwNywxMDUsMTEyLDMyLDExNiwxMDQsMTAxLDMyLDExNiwxMDUsMTA5LAotICAgIDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsOTksMTA0LDEwMSw5OSwxMDcsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsMTA1LDQsMCwwLDAsMTA1LDgsMCwKLSAgICAwLDAsMTA1LDEyLDAsMCwwLDExNywzMCwwLDAsMCw5OCw5NywxMDAsMzIsCi0gICAgMTA5LDk3LDEwMywxMDUsOTksMzIsMTEwLDExNywxMDksOTgsMTAxLDExNCwzMiwxMDUsMTEwLDMyLAotICAgIDEyMywzMywxMTQsMTI1LDU4LDMyLDEyMywzMywxMTQsMTI1LDExNyw0LDAsMCwwLDExMCwKLSAgICA5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNywxOSwwLDAsCi0gICAgMCw5OCw5NywxMDAsMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwzMiwxMDUsCi0gICAgMTEwLDMyLDEyMywxMjUsMTE3LDE0LDAsMCwwLDk4LDk3LDEwMCwzMiwxMTUsMTA1LDEyMiwKLSAgICAxMDEsMzIsMTA1LDExMCwzMiwxMjMsMTI1LDExNyw1LDAsMCwwLDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE3LDI0LDAsMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwKLSAgICAxMTUsMzIsMTE1LDExNiw5NywxMDgsMTAxLDMyLDEwMiwxMTEsMTE0LDMyLDEyMywxMjUsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwNSwxMjIsMTAxLDEwOCwzLDAsMCwwLDI1NSwxMjcsMjU1LDEyNywKLSAgICAzLDAsNDAsMTAsMCwwLDAsMTE3LDEyLDAsMCwwLDk1LDc3LDY1LDcxLAotICAgIDczLDY3LDk1LDY2LDg5LDg0LDY5LDgzLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LAotICAgIDEwOSw5NywxMTYsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLAotICAgIDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMSwwLDAsMCw3MywxMDksMTEyLAotICAgIDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwKLSAgICAxMTcsOCwwLDAsMCw2OSw3OSw3MCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDMsMCwwLDAsMTA1LDExMCwxMTYsMTE3LDgsCi0gICAgMCwwLDAsNzUsMTAxLDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDcsMCwwLDAsCi0gICAgOTUsMTE0LDk1LDEwOCwxMTEsMTEwLDEwMyw0MCwxMiwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsMTE3LDEzLDAsMCwwLAotICAgIDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDk1LDExMiw5NywxMTYsMTA0LDExNywxMiwwLAotICAgIDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsNSwKLSAgICAwLDAsMCwxMDksOTcsMTAzLDEwNSw5OSwxMTcsMTMsMCwwLDAsMTE0LDk3LDExOSwKLSAgICA5NSwxMTYsMTA1LDEwOSwxMDEsMTE1LDExNiw5NywxMDksMTEyLDExNyw4LDAsMCwwLDExNCwKLSAgICA5NywxMTksOTUsMTE1LDEwNSwxMjIsMTAxLDExNywzLDAsMCwwLDEwOSwxMTUsMTAzLDExNywKLSAgICA3LDAsMCwwLDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNywxMiwwLDAsMCwKLSAgICAxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsMTE3LDExLDAsMCwKLSAgICAwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsMTE1LDEwNSwxMjIsMTAxLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDIwLDAsMCwwLDk1LDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSw5NSwxMDIsMTE0LDExMSwxMDksOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwKLSAgICAxMDEsMzQsMywwLDAsMTE1LDY4LDAsMCwwLDAsNywxNiwxLDE2LDEsCi0gICAgMTYsMSwxMiwxLDE4LDEsMTAsMSwyNywxLDE4LDEsMTUsMSwxMCwxLAotICAgIDE1LDEsMTgsMSwxNSwxLDEwLDEsMTUsMSwxMiwxLDMsMSwyMCwxLAotICAgIDEzLDEsNSwyLDE4LDEsMTUsMSwxMCwxLDE1LDEsMTIsMSwzLDEsCi0gICAgMTgsMSwxMywxLDUsMiwxOCwxLDMsMSwxNSwxLDIxLDMsMTE3LDM0LAotICAgIDAsMCwwLDk1LDc2LDExMSw5NywxMDAsMTAxLDExNCw2Niw5NywxMTUsMTA1LDk5LDExNSwKLSAgICA0Niw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsCi0gICAgMTAxLDk5LDExMSwxMDAsMTAxLDExNywxMCwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLAotICAgIDEwOCwxMDEsMTE1LDExNSw5OSwyLDAsMCwwLDEsMCwwLDAsNSwwLDAsCi0gICAgMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsMjI3LDAsMCwwLDEyNCwxLAotICAgIDAsMTA2LDAsMCwxMjUsMywwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMywwLAotICAgIDEzMSwxLDAsMTI1LDQsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDMsMCwxMzEsCi0gICAgMSwwLDEyNCwxLDAsOTUsMywwLDEyNCwyLDAsMTE1LDEwNiwwLDEyMSwyMiwKLSAgICAwLDExNiw0LDAsMTI0LDEsMCwxMDYsMywwLDEzMSwxLDAsMTI0LDEsMCwKLSAgICA5NSw1LDAsODcsMTEzLDExOCwwLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMTAyLAotICAgIDAsMSwxLDEsMTI0LDEsMCwxMDYsMywwLDEyNCwxLDAsOTUsNSwwLAotICAgIDg5LDExMywxMTgsMCw4OCwxMTAsMTIsMCwxMjQsMSwwLDEwNiwzLDAsMTI0LDEsCi0gICAgMCw5NSw1LDAsMTI0LDMsMCwxMjQsMSwwLDk1LDcsMCwxMjQsMCwwLAotICAgIDEwNiw4LDAsMTI0LDMsMCwxMzEsMSwwLDExNCwxNzAsMCwxMTYsOSwwLDEyNCwKLSAgICAxLDAsMTA2LDMsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTAzLDEsMCwxMjQsCi0gICAgMSwwLDk1LDEwLDAsMTEwLDI1LDAsMTI0LDEsMCwxMDYsNywwLDEwNiwxMSwKLSAgICAwLDEwMCwyLDAsMTMxLDEsMCwxMDAsMSwwLDI1LDEyNCwxLDAsOTUsNywKLSAgICAwLDEyNCwwLDAsMTI0LDEsMCw5NSwxMiwwLDExNiwxMywwLDExNiwxNCwwLAotICAgIDEyNCw0LDAsMTI0LDEsMCwxMDYsMTUsMCwxMzEsMywwLDEsMTI0LDEsMCwKLSAgICA4Myw0MCwzLDAsMCwwLDExNyw4MiwwLDAsMCw3MiwxMDEsMTA4LDExMiwxMDEsCi0gICAgMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDk3LDk4LDEwOCwxMDEsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLAotICAgIDMyLDEwMSwxMDUsMTE2LDEwNCwxMDEsMTE0LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTExLAotICAgIDExNCwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiwxMDgsMTExLDk3LDEwMCwxMDUsMTEwLDEwMyw0NiwxMDUsMCwwLAotICAgIDAsMCwxMTcsMSwwLDAsMCw0Niw0MCwxNiwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsOCwwLDAsMCwxMDMsCi0gICAgMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxMTcsMTIsMCwwLDAsMTAzLDEwMSwxMTYsOTUsCi0gICAgMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwwLDk1LDk1LDEwMiwKLSAgICAxMDUsMTA4LDEwMSw5NSw5NSwxMTcsMTcsMCwwLDAsOTksOTcsOTksMTA0LDEwMSw5NSwKLSAgICAxMDIsMTE0LDExMSwxMDksOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsOTksOTcsOTksMTA0LDEwMSwxMDAsOTUsOTUsMTE3LDE5LDAsMCwwLDc4LAotICAgIDExMSwxMTYsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDk1LDk1LDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLAotICAgIDEwMSwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LAotICAgIDExNiwxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTcsMTAsCi0gICAgMCwwLDAsMTE0LDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDEwLDAsCi0gICAgMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDI1LDAsMCwKLSAgICAwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsOTcsMTA5LAotICAgIDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNyw0LDAsMCwwLDEwMSwKLSAgICAxMjAsMTAxLDk5LDExNyw4LDAsMCwwLDk1LDk1LDEwMCwxMDUsOTksMTE2LDk1LDk1LAotICAgIDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw2LAotICAgIDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMCwwLDAsMCwxMTUsMTExLAotICAgIDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsMTEsMCwwLDAsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LDEwNiwxMDEsOTksCi0gICAgMTE2LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDgwLDMsCi0gICAgMCwwLDExNSwzMiwwLDAsMCwwLDQsOSwxLDE1LDEsMTgsMSw2LAotICAgIDEsMywxLDIyLDEsMTMsMSwyMCwyLDEyLDEsOSwxLDE1LDEsMjgsCi0gICAgMiwyNSwxLDksMSwxOSwxLDExNywyNiwwLDAsMCw5NSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsOTUsMTA4LDExMSw5NywxMDAsOTUsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNzAsNDAsOSwwLDAsMCwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LAotICAgIDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LAotICAgIDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LAotICAgIDk5LDEwNyw5NywxMDMsMTAxLDExNywyMCwwLDAsMCw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsCi0gICAgOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNywxNywKLSAgICAwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDIsMTExLDExNCw5NSwxMDgsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDExNyw1LDAsMCwwLDcwLDk3LDEwOCwxMTUsMTAxLDExNywxMiwKLSAgICAwLDAsMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwKLSAgICAxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk5LDk3LDEwOCwKLSAgICAxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksCi0gICAgMTE1LDIxLDMsMCwwLDExNSwxMCwwLDAsMCwxNiwzLDYsMiwxMiw4LAotICAgIDEyLDQ2LDYsMSwxMTcsMTMsMCwwLDAsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAotICAgIDY2LDk3LDExNSwxMDUsOTksMTE1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLAotICAgIDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsMTE1LDEwNCwwLDAsMCwKLSAgICAxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLAotICAgIDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLDkwLDMsMCwxMDAsMywwLDEwMCwKLSAgICA0LDAsMTMyLDAsMCw5MCw0LDAsMTAwLDUsMCwxMDAsNiwwLDEzMiwwLAotICAgIDAsOTAsNSwwLDEwMCw3LDAsMTAwLDgsMCwxMzIsMCwwLDkwLDYsMCwKLSAgICAxMDAsOSwwLDEwMCwxMCwwLDEzMiwwLDAsOTAsNywwLDEwMCwxMSwwLDEwMCwKLSAgICAxMiwwLDEzMiwwLDAsOTAsOCwwLDEwMCwxMywwLDEwMCwxNCwwLDEzMiwwLAotICAgIDAsOTAsOSwwLDEwMCwxNSwwLDgzLDQwLDE2LDAsMCwwLDExNywxMiwwLAotICAgIDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDEwLDAsMCwwLDExNiwwLDAsMTMwLDEsMCwxMDAsMSwKLSAgICAwLDgzLDQwLDIsMCwwLDAsMTE3LDEyMSwwLDAsMCw3OSwxMTIsMTE2LDEwNSwKLSAgICAxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTYsMTA0LDk3LDExNiwKLSAgICAzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsCi0gICAgMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMDUsMTA5LDEwMSwzMiw0MCwKLSAgICA5NywxMTAsMzIsMTA1LDExMCwxMTYsNDEsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMTAsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLAotICAgIDEwMCwzMiwxMTIsOTcsMTE2LDEwNCw0NCwzMiwxMTksMTA0LDEwMSwxMTQsMTAxLDMyLDExMiw5NywKLSAgICAxMTYsMTA0LDMyLDEwNSwxMTUsMzIsOTcsMzIsMTE1LDExNiwxMTQsNDYsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNzgsNDAsMSwwLDAsMCwxMTcsMTksMCwwLDAsCi0gICAgNzgsMTExLDExNiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LAotICAgIDEwOSwxMTYsMTA1LDEwOSwxMDEsMTA2LDMsMCwwLDExNSwyLDAsMCwwLDAsNCwKLSAgICAxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDk5LDIsMCwwLAotICAgIDAsMCwwLDAsMCwyLDAsMCwwLDMsMCwwLDAsNjcsMCwwLAotICAgIDAsMTE1LDIwLDAsMCwwLDEwNSwxLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwKLSAgICAxLDAsMTMxLDEsMCwxMDAsMSwwLDU0LDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDExNCwxLDAsMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwKLSAgICAxMDQsMTExLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDUsMTEwLDEwMywzMiw5NywzMiwKLSAgICAxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMCwxMDUsOTksMTE2LDMyLDEwMiwxMTEsCi0gICAgMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsMTA1LDEwMSwxMDAsMzIsCi0gICAgMTEyLDk3LDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwKLSAgICA5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsMTE1LDExNiwxMTQsCi0gICAgNDEsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODAsMTExLDExNSwxMTUsMTA1LAotICAgIDk4LDEwOCwxMDEsMzIsMTA3LDEwMSwxMjEsMTE1LDU4LDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDQ1LDMyLDM5LDEwOSwxMTYsMTA1LDEwOSwxMDEsMzksMzIsNDAsMTA5LDk3LDExMCwKLSAgICAxMDAsOTcsMTE2LDExMSwxMTQsMTIxLDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLAotICAgIDExNywxMDksMTAxLDExNCwxMDUsOTksMzIsMTE2LDEwNSwxMDksMTAxLDExNSwxMTYsOTcsMTA5LDExMiwKLSAgICAzMiwxMTEsMTAyLDMyLDEwOCw5NywxMTUsMTE2LDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTAsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTksMTExLDEwMCwxMDEsMzIsMTA5LAotICAgIDExMSwxMDAsMTA1LDEwMiwxMDUsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDU5LDEwLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDQ1LDMyLDM5LDExNSwxMDUsMTIyLDEwMSwzOSwzMiw0MCwxMTEsCi0gICAgMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsNDEsMzIsMTA1LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICAxMTUsMTA1LDEyMiwxMDEsMzIsMTA1LDExMCwzMiw5OCwxMjEsMTE2LDEwMSwxMTUsMzIsMTExLDEwMiwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDk5LDExMSwxMDAsMTAxLAotICAgIDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwKLSAgICAxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LAotICAgIDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDExNCwxMDEsOTcsMTAwLDMyLDk4LDEyMSwKLSAgICAxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwxMTUsNDYsMTAsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsMzIsMTE3LDUsMCwwLDAsMTA5LDExNiwxMDUsMTA5LDEwMSwKLSAgICA0MCwxLDAsMCwwLDExNywxMCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDksCi0gICAgMTE2LDEwNSwxMDksMTAxLDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTIsMywwLDAsMTE1LDIsMCwwLDAsMCwKLSAgICAxMCwxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksNCwwLAotICAgIDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTYsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwyLDAsCi0gICAgMTI0LDMsMCwxMzEsMiwwLDgzLDQwLDEsMCwwLDAsMTE3LDIyOCwwLDAsCi0gICAgMCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKLSAgICAzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LAotICAgIDExNiw5NywzMiw0MCw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMzIsMTE2LDExMSwzMiw5NywzMiwKLSAgICAxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsOTcsMzIsMTE1LDExNiwxMTQsCi0gICAgNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwKLSAgICAxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMDIsMTExLDExNCwzMiwKLSAgICAxMTYsMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwKLSAgICAxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsCi0gICAgMTAwLDMyLDEwNSwxMTAsMzIsMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDk5LDExMSwKLSAgICAxMTQsMTE0LDEwMSw5OSwxMTYsMTA4LDEyMSwzMiwxMTYsMTE0LDk3LDExMCwxMTUsMTAyLDEwMSwxMTQsCi0gICAgMzIsMTEyLDEwMSwxMTQsMTA5LDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwxMCwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwzMiw0MCwxLDAsMCwwLDExNyw4LDAsMCwwLDExNSwKLSAgICAxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDAsNCwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDExLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEwLDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5Nyw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxNSwwLDAsMCw5NSw5OSwKLSAgICA5Nyw5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDEyNCwzLDAsCi0gICAgMCwxMTUsMiwwLDAsMCwwLDgsMTE3LDI4LDAsMCwwLDgzLDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTksOTcsOTksMTA0LDEwMSwKLSAgICA5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5OSwzLDAsMCwwLDAsMCwKLSAgICAwLDAsMywwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwxMCwKLSAgICAwLDAsMCwxMTYsMCwwLDEzMCwxLDAsMTAwLDEsMCw4Myw0MCwyLDAsCi0gICAgMCwwLDExNywxNTEsMCwwLDAsNzksMTEyLDExNiwxMDUsMTExLDExMCw5NywxMDgsMzIsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDExOSwxMTQsMTA1LAotICAgIDExNiwxMDEsMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsNDAsOTgsMTIxLDExNiwxMDEsMTE1LDQxLAotICAgIDMyLDExNiwxMTEsMzIsOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLAotICAgIDQwLDk3LDMyLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDczLDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTA1LDExMCwxMDMsMzIsMTE2LAotICAgIDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDk3LDEwOCwxMDgsMTExLDExOSwKLSAgICAxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE5LDExNCwxMDUsMTE2LDEwNSwxMTAsCi0gICAgMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMzIsMTAyLDEwNSwKLSAgICAxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MCwKLSAgICAxLDAsMCwwLDExNywxOSwwLDAsMCw3OCwxMTEsMTE2LDczLDEwOSwxMTIsMTA4LAotICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw2OSwxMTQsMTE0LDExMSwxMTQsNDAsMywwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5Nyw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwMCw5NywxMTYsOTcsMTM0LDMsMCwwLDExNSwyLDAsMCwwLDAsNiwKLSAgICAxMTcsMjEsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDk5LDIsMCwwLDAsMCwKLSAgICAwLDAsMCw5LDAsMCwwLDQ0LDAsMCwwLDY3LDAsMCwwLDExNSwKLSAgICA2MiwxLDAsMCwxMDAsMSwwLDEwMCwyLDAsMTA4LDAsMCwxMjUsMiwwLAotICAgIDEyNCwwLDAsMTA2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjEsCi0gICAgMTksMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDMsMCwxMzEsMSwwLDEyNSw0LAotICAgIDAsODcsMTEwLDU4LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCwxMDYsMCwxLAotICAgIDEyNSw1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCwzLDAsMTAwLDQsMCwKLSAgICAxMjQsMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LDEwMCwyLAotICAgIDAsMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCw4OCwxMTYsCi0gICAgNSwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEwNiw3LDAsMTI1LDYsCi0gICAgMCwxMjEsMTksMCwxMjQsMiwwLDEwNiw4LDAsMTI0LDYsMCwxMzEsMSwwLAotICAgIDEyNSw3LDAsODcsMTEwLDU4LDAsNCwxMTYsOSwwLDEwNywxMCwwLDExNCwyMDQsCi0gICAgMCwxLDEyNSw1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCw1LDAsMTAwLAotICAgIDQsMCwxMjQsMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LAotICAgIDEwMCwyLDAsMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCwKLSAgICA4OCwxMTYsNSwwLDEwNiwxMCwwLDEwMCwyLDAsMTAwLDcsMCwxMzEsMiwwLAotICAgIDEyNSw4LDAsMTIxLDMwLDAsMTI0LDgsMCwxMDYsMTMsMCwxMjQsNCwwLDEwNiwKLSAgICAxMywwLDEyNCw3LDAsMTAwLDEsMCwyNSwxMzEsMSwwLDEzMSwxLDAsODMsCi0gICAgODcsMTEwLDU4LDAsNCwxMTYsMTQsMCwxMDcsMTAsMCwxMTQsNTcsMSwxLDEyNSwKLSAgICA1LDAsMSwxMjIsMjYsMCwxMTYsNCwwLDEwMCw2LDAsMTAwLDQsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDEsMTI0LDUsMCwxMzAsMiwwLDg3LDg5LDEwMCwyLDAsCi0gICAgMTAwLDIsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEwLDEsMCw4OCwxMDAsMiwKLSAgICAwLDgzLDQwLDgsMCwwLDAsMTE3LDUyLDAsMCwwLDY3LDExMSwxMTAsOTksCisgICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsMTEyLDEwMSw5OSw5OSwzLAorICAgIDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLDY3LAorICAgIDAsMCwwLDExNSw0NSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsCisgICAgMCwxMjQsMiwwLDEzMSwyLDAsMTI1LDMsMCwxMjQsMywwLDEwMCwxLDAsCisgICAgMTA3LDksMCwxMTQsMzcsMCwxMjQsMywwLDEwNiwxLDAsODMsMTAwLDEsMCwKKyAgICA4MywxMDAsMSwwLDgzLDQxLDIsMTIyLDEwOCw3MCwxMDUsMTEwLDEwMCwzMiwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTQsMTAxLDEwMywxMDUsMTE1LDExNiwxMTQsMTIxLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLAorICAgIDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywxMTYsMTAxLDEwMCw0NiwzMiwKKyAgICAzMiw4NSwxMTUsMTAxLDMyLDEwMSwxMjAsMTAxLDk5LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQwLDQxLDMyLDEwNSwxMTAsMTE1LDExNiwxMDEsOTcsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDc4LDQxLDIsMTE0LDE0LDEsMCwwLDExNCwxNzAsMCwKKyAgICAwLDAsNDEsNCwxMTQsMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsMTUsMSwwLDAsMTU4LDUsMCwwLAorICAgIDExNSw4LDAsMCwwLDAsNywxOCwxLDEyLDEsNywyLDEyMiwzMyw4NywKKyAgICAxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LAorICAgIDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCisgICAgNDEsMTIsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLAorICAgIDAsMTE0LDU5LDAsMCwwLDExNCwyOSwxLDAsMCwxMTQsMjgsMSwwLDAsCisgICAgMTE0LDI3LDEsMCwwLDExNCwxOSwxLDAsMCwxMTQsMjYsMSwwLDAsMTE0LAorICAgIDMyLDEsMCwwLDExNCwxNCwxLDAsMCwxMTQsMTUsMSwwLDAsMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDIzLDEsMCwwLDEwOSw1LDAsMCwxMTUsMjAsMCwwLDAsCisgICAgMTIsMiw2LDMsNiwzLDYsMiw2LDIsMTgsNywxOCwxNSwzLDEsCisgICAgMjEsMTQsMywxLDExNCwyMywxLDAsMCw5OSwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw1MiwKKyAgICAwLDAsMCwxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsCisgICAgMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LAorICAgIDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMSw2LDAsCisgICAgOTAsNywwLDEwMCw2LDAsODMsNDEsNywyMTgsMTMsOTUsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDEyMiw4Myw2Niw5NywxMTUsMTAxLDMyLDk5LAorICAgIDEwOCw5NywxMTUsMTE1LDMyLDExMSwxMDIsMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiw5OSwKKyAgICAxMTEsMTAwLDEwMSwzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiw5OCwxMjEsMzIsOTgsMTExLAorICAgIDExNiwxMDQsMzIsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwKKyAgICA5NywxMTAsMTAwLDEwLDMyLDMyLDMyLDMyLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLAorICAgIDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk5LDIsMCwKKyAgICAwLDAsMCwwLDAsMCw1LDAsMCwwLDMsMCwwLDAsNjcsMCwKKyAgICAwLDAsMTE1LDg4LDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLAorICAgIDEyNCwxLDAsMTMxLDEsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTI1LDIsMCwKKyAgICAxMjQsMiwwLDEwNiwyLDAsMTAwLDIsMCwxMDAsMSwwLDEzMSwyLDAsMTAwLAorICAgIDMsMCwyNSwxMjUsMywwLDEyNCwxLDAsMTA2LDMsMCwxMDAsMiwwLDEzMSwKKyAgICAxLDAsMTAwLDQsMCwyNSwxMjUsNCwwLDEyNCwzLDAsMTAwLDUsMCwxMDcsCisgICAgMiwwLDExMSw4NywwLDEyNCw0LDAsMTAwLDUsMCwxMDcsMywwLDgzLDQxLAorICAgIDYsMTIyLDE0MSw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsCisgICAgMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywxMTAsCisgICAgMTE1LDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiwKKyAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiw5OCwxMjEsMzIsOTksMTA0LDEwMSw5OSwxMDcsMTA1LAorICAgIDExMCwxMDMsMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTYsMTA0LAorICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMDEsMTAwLDMyLAorICAgIDk4LDEyMSwzMiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsCisgICAgMTA0LDk3LDExNSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMzIsMTExLAorICAgIDEwMiwzMiwzOSw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsMTEyLDEyMSwzOSw0NiwKKyAgICAxMTQsMjksMCwwLDAsMTE0LDExNiwwLDAsMCwxMTQsODQsMCwwLDAsMTE0LAorICAgIDExNSwwLDAsMCwxMTQsNzIsMCwwLDAsNDEsNCwxMTQsMzgsMCwwLDAsCisgICAgMTE0LDIzOSwwLDAsMCwxMTQsMzQsMCwwLDAsMTE0LDMyLDAsMCwwLDQxLAorICAgIDUsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDEzMSwwLDAsMCwKKyAgICA5MCwxMywxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTUsOTgsOTcsMTE1LDEwMSw5MCwKKyAgICA5LDExNiw5NywxMDUsMTA4LDk1LDExMCw5NywxMDksMTAxLDExNCw0LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwyMjAsMCwwLDAsMTc3LDUsCisgICAgMCwwLDExNSw4LDAsMCwwLDAsMywyNSwxLDIyLDEsMTksMSwxMjIsCisgICAgMjQsOTUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDY2LDk3LDExNSwxMDUsOTksMTE1LDQ2LDEwNSwKKyAgICAxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLAorICAgIDAsMCwzLDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDgwLAorICAgIDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwxLDAsMTMxLAorICAgIDEsMCwxMjUsMiwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCw1NywKKyAgICAwLDExNiwyLDAsMTAwLDIsMCwxMDYsMywwLDEyNCwxLDAsMTA2LDEsMCwKKyAgICAxMzEsMSwwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDExNiw0LDAsMTE2LAorICAgIDUsMCwxMjQsMiwwLDEyNCwxLDAsMTA2LDYsMCwxMzEsMywwLDEsMTAwLAorICAgIDEsMCw4Myw0MSwzLDEyMiwxOSw2OSwxMjAsMTAxLDk5LDExNywxMTYsMTAxLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ2LDc4LDEyMiw1Miw5OSw5NywxMTAsCisgICAgMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCisgICAgMTIzLDMzLDExNCwxMjUsMzIsMTE5LDEwNCwxMDEsMTEwLDMyLDEwMywxMDEsMTE2LDk1LDk5LDExMSwKKyAgICAxMDAsMTAxLDQwLDQxLDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw3OCwxMTEsMTEwLAorICAgIDEwMSw0MSw3LDExNCwxNiwxLDAsMCwxMTQsNTcsMCwwLDAsMTE0LDE1NCwwLAorICAgIDAsMCwxMTQsNDcsMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTc2LDAsMCwKKyAgICAwLDExNCw2MywwLDAsMCw0MSwzLDExNCw3MSwwLDAsMCwxMTQsMTgwLDAsCisgICAgMCwwLDExNCwxOTUsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMTE0LDIsMSwwLDAsMTg1LDUsMCwwLDExNSwKKyAgICAxMCwwLDAsMCwwLDIsMTgsMSwxMiwxLDksMSwxOCwxLDEyMiwyNSwKKyAgICA5NSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsNDYsMTAxLDEyMCwKKyAgICAxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDEsOCwxMTQsNTcsMCwwLAorICAgIDAsMTE0LDU2LDAsMCwwLDExNCw1OCwwLDAsMCwxMTQsNTksMCwwLDAsCisgICAgMTE0LDIyMCwwLDAsMCwxMTQsMiwxLDAsMCwxMTQsMTgxLDAsMCwwLDExNCwKKyAgICA1LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCwzMywxLDAsMCwxNzIsNSwwLAorICAgIDAsMTE1LDgsMCwwLDAsMTIsMyw2LDIsMTIsOCwxMiw4LDExNCwzMywKKyAgICAxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICA0LDAsMCwwLDY0LDAsMCwwLDExNSwxMDYsMCwwLDAsMTAxLDAsMCwKKyAgICA5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwxMDAsMiwwLDEzMiwKKyAgICAwLDAsOTAsMywwLDEwMCwzLDAsMTAwLDQsMCwxMzIsMCwwLDkwLDQsCisgICAgMCwxMDAsNSwwLDEwMCw2LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDcsMCwKKyAgICAxMDAsOCwwLDEzMiwwLDAsOTAsNiwwLDEwMCw5LDAsMTAwLDEwLDAsMTMyLAorICAgIDAsMCw5MCw3LDAsMTAwLDExLDAsMTAwLDE4LDAsMTAwLDEzLDAsMTAwLDE0LAorICAgIDAsMTMyLDAsMSw5MCw4LDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsMCwKKyAgICA5MCw5LDAsMTAwLDE3LDAsODMsNDEsMTksMjE4LDEyLDgzLDExMSwxMTcsMTE0LDk5LAorICAgIDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsMCwxMTUsMTAsMCwwLAorICAgIDAsMTE2LDAsMCwxMzAsMSwwLDEwMCwxLDAsODMsNDEsMiwxMjIsMTc4LDc5LAorICAgIDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExNiwKKyAgICAxMDQsOTcsMTE2LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMDUsMTAyLDEwNSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTE2LDEwNSwxMDksCisgICAgMTAxLDMyLDQwLDk3LDExMCwzMiwxMDUsMTEwLDExNiw0MSwzMiwxMDIsMTExLDExNCwzMiwxMTYsCisgICAgMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTUsMTEyLDEwMSw5OSwxMDUsCisgICAgMTAyLDEwNSwxMDEsMTAwLDMyLDExMiw5NywxMTYsMTA0LDQ0LDMyLDExOSwxMDQsMTAxLDExNCwxMDEsCisgICAgMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiw5NywzMiwxMTUsMTE2LDExNCw0NiwxMCwKKyAgICAxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4Miw5NywxMDUsMTE1LDEwMSwxMTUsMzIsCisgICAgNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDMyLDExOSwxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwKKyAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsOTgsMTAxLDMyLAorICAgIDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTAwLDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDc4LDQxLDEsMjE4LDcsNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDQxLDIsMTE0LAorICAgIDcxLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsMTEyLDk3LDExNiwxMDQsOTUsMTA5LAorICAgIDExNiwxMDUsMTA5LDEwMSwxOTgsNSwwLDAsMTE1LDIsMCwwLDAsMCw2LDEyMiwKKyAgICAyMyw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExMiw5NywKKyAgICAxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwxMDEsOTksMiwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMjAsMCwKKyAgICAwLDAsMTA1LDEsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwKKyAgICAwLDEwMCwxLDAsNTQsODMsNDEsMiw5NywxNzAsMSwwLDAsNzksMTEyLDExNiwKKyAgICAxMDUsMTExLDExMCw5NywxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE0LDEwMSwxMTYsCisgICAgMTE3LDExNCwxMTAsMTA1LDExMCwxMDMsMzIsOTcsMzIsMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiwKKyAgICA5NywzMiwxMDAsMTA1LDk5LDExNiwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsCisgICAgMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDExMiw5NywxMTYsMTA0LDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDExNiwxMTEsMzIsOTgsMTIxLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDExMiw5NywxMTYsMTA0LDMyLDQwLDExNSwxMTYsMTE0LDQxLDQ2LDEwLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDgwLDExMSwxMTUsMTE1LDEwNSw5OCwxMDgsMTAxLDMyLDEwNywxMDEsMTIxLAorICAgIDExNSw1OCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw0NSwzMiwzOSwxMDksMTE2LAorICAgIDEwNSwxMDksMTAxLDM5LDMyLDQwLDEwOSw5NywxMTAsMTAwLDk3LDExNiwxMTEsMTE0LDEyMSw0MSwKKyAgICAzMiwxMDUsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMCwxMTcsMTA5LDEwMSwxMTQsMTA1LDk5LDMyLAorICAgIDExNiwxMDUsMTA5LDEwMSwxMTUsMTE2LDk3LDEwOSwxMTIsMzIsMTExLDEwMiwzMiwxMDgsOTcsMTE1LAorICAgIDExNiwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDk5LDExMSwxMDAsMTAxLDMyLDEwOSwxMTEsMTAwLDEwNSwxMDIsMTA1LDk5LDk3LAorICAgIDExNiwxMDUsMTExLDExMCw1OSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw0NSwzMiwKKyAgICAzOSwxMTUsMTA1LDEyMiwxMDEsMzksMzIsNDAsMTExLDExMiwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LAorICAgIDQxLDMyLDEwNSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDEwNSwxMjIsMTAxLDMyLDEwNSwxMTAsCisgICAgMzIsOTgsMTIxLDExNiwxMDEsMTE1LDMyLDExMSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwKKyAgICAxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiw3MywxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwNSwxMTAsMTAzLAorICAgIDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiw5NywxMDgsMTA4LAorICAgIDExMSwxMTksMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE2LAorICAgIDExMSwzMiwxMTQsMTAxLDk3LDEwMCwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDgyLAorICAgIDk3LDEwNSwxMTUsMTAxLDExNSwzMiw3Myw3OSw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTE5LDEwNCwKKyAgICAxMDEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDk5LDk3LDExMCwxMTAsCisgICAgMTExLDExNiwzMiw5OCwxMDEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwxMDAsNDYsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDE4NCwwLDAsMCw0MSwxLDExNCwzNiwKKyAgICAxLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEwLAorICAgIDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwyMDYsNSwwLDAsMTE1LDIsCisgICAgMCwwLDAsMCwxMSwxMjIsMjMsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksNCwKKyAgICAwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMywwLDAsMCw2NywKKyAgICAwLDAsMCwxMTUsMTYsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwyLAorICAgIDAsMTI0LDMsMCwxMzEsMiwwLDgzLDQxLDEsMTIyLDIyOCw3OSwxMTIsMTE2LDEwNSwKKyAgICAxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTksMTA0LDEwNSw5OSwKKyAgICAxMDQsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTUsMzIsMTAwLDk3LDExNiw5NywzMiw0MCw5OCwKKyAgICAxMjEsMTE2LDEwMSwxMTUsNDEsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMzIsCisgICAgMTEyLDk3LDExNiwxMDQsMzIsNDAsOTcsMzIsMTE1LDExNiwxMTQsNDEsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwKKyAgICAxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsCisgICAgOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTksCisgICAgMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsCisgICAgMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMTIsOTcsCisgICAgMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExMCwxMDEsMTAxLDEwMCwxMDEsMTAwLDMyLDEwNSwxMTAsMzIsCisgICAgMTExLDExNCwxMDAsMTAxLDExNCwzMiwxMTYsMTExLDMyLDk5LDExMSwxMTQsMTE0LDEwMSw5OSwxMTYsCisgICAgMTA4LDEyMSwzMiwxMTYsMTE0LDk3LDExMCwxMTUsMTAyLDEwMSwxMTQsMzIsMTEyLDEwMSwxMTQsMTA5LAorICAgIDEwNSwxMTUsMTE1LDEwNSwxMTEsMTEwLDExNSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA0MSwxLDIxOCw4LDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDEsNCwxMTQsNzEsCisgICAgMCwwLDAsMTE0LDE0MiwwLDAsMCw5MCwxMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LAorICAgIDExMiw5NywxMTYsMTA0LDExNCw1MywwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTUsOTUsOTksOTcsOTksMTA0LDEwMSwKKyAgICA5NSw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwyMTksNSwwLDAsMTE1LDIsMCwKKyAgICAwLDAsMCw4LDEyMiwyOCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDQ2LDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLAorICAgIDEwMCwxMDEsOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLDAsMSwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLAorICAgIDQxLDIsMTIyLDE1MCw3OSwxMTIsMTE2LDEwNSwxMTEsMTEwLDk3LDEwOCwzMiwxMDksMTAxLDExNiwKKyAgICAxMDQsMTExLDEwMCwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTUsCisgICAgMzIsMTAwLDk3LDExNiw5NywzMiw0MCw5OCwxMjEsMTE2LDEwMSwxMTUsNDEsMzIsMTE2LDExMSwKKyAgICAzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsNDAsOTcsMzIsCisgICAgMTE1LDExNiwxMTQsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsCisgICAgMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwNSwxMTUsCisgICAgMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsOTcsMTA4LDEwOCwxMTEsMTE5LDExNSwzMiwxMDIsCisgICAgMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTksMTE0LDEwNSwxMTYsMTA1LDExMCwxMDMsMzIsMTExLAorICAgIDEwMiwzMiw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMTE1LAorICAgIDQ2LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDc4LDExNCw0LDAsMCwwLAorICAgIDQxLDMsMTE0LDcxLDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsNTMsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMTE0LDM4LDEsMCwwLDIyOSw1LDAsMCwxMTUsMCwwLDAsMCwxMjIsMjEsCisgICAgODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTAxLDExNiwKKyAgICA5NSwxMDAsOTcsMTE2LDk3LDk5LDIsMCwwLDAsMCwwLDAsMCw1LDAsCisgICAgMCwwLDE2LDAsMCwwLDY3LDAsMCwwLDExNSwxMDUsMCwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyMSwxOSwKKyAgICAwLDEyNCwwLDAsMTA2LDEsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDMsMCwKKyAgICA4NywxMTAsNTgsMCw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDk0LDAsMSwxMjUsCisgICAgNCwwLDEsMTIyLDI2LDAsMTE2LDMsMCwxMDAsMSwwLDEwMCwyLDAsMTI0LAorICAgIDEsMCwxMzEsMSwxLDEyNCw0LDAsMTMwLDIsMCw4Nyw4OSwxMDAsMywwLAorICAgIDEwMCwzLDAsMTI1LDQsMCwxMjYsNCwwLDg4LDExMCwxLDAsODgsMTE2LDQsCisgICAgMCwxMjQsMywwLDEzMSwxLDAsODMsNDEsNCwxMjIsNTIsNjcsMTExLDExMCw5OSwKICAgICAxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LAogICAgIDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsNzMsMTEwLDExNSwxMTIsMTAxLDk5LDExNiw3NiwxMTEsCiAgICAgOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0NiwKLSAgICAxMDUsMCwwLDAsMCw3OCwxMTcsMzksMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwzMiwxMTAsMTExLDExNiwzMiw5NywxMTgsOTcsMTA1LDEwOCw5Nyw5OCwxMDgsMTAxLDMyLAotICAgIDExNiwxMDQsMTE0LDExMSwxMTcsMTAzLDEwNCwzMiwxMDMsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDQwLDQxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywyNSwwLDAsMCwKLSAgICA3MCw5NywxMDUsMTA4LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDAsMTAxLDExNiwxMDEsOTksMTE2LAotICAgIDMyLDEwMSwxMTAsOTksMTExLDEwMCwxMDUsMTEwLDEwMywxMTcsMjgsMCwwLDAsNzAsOTcsCi0gICAgMTA1LDEwOCwxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwzMiwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSw4NCw0MCwxNSwwLDAsMCwKLSAgICAxMTcsOCwwLDAsMCwxMTYsMTExLDEwNywxMDEsMTEwLDEwNSwxMjIsMTAxLDExNywxMiwwLAotICAgIDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDgsCi0gICAgMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywxMTcsNywwLDAsMCwKLSAgICA3Myw3OSw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywzLDAsMCwwLDk1LDEwNSwxMTEsMTE3LAotICAgIDcsMCwwLDAsNjYsMTIxLDExNiwxMDEsMTE1LDczLDc5LDExNyw4LDAsMCwwLAotICAgIDExNCwxMDEsOTcsMTAwLDEwOCwxMDUsMTEwLDEwMSwxMTcsMTUsMCwwLDAsMTAwLDEwMSwxMTYsCi0gICAgMTAxLDk5LDExNiw5NSwxMDEsMTEwLDk5LDExMSwxMDAsMTA1LDExMCwxMDMsMTE3LDExLDAsMCwKLSAgICAwLDgzLDEyMSwxMTAsMTE2LDk3LDEyMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDI1LDAsMCwKLSAgICAwLDczLDExMCw5OSwxMTQsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMDgsNzgsMTAxLDExOSwxMDgsCi0gICAgMTA1LDExMCwxMDEsNjgsMTAxLDk5LDExMSwxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw3OCwKLSAgICAxMTEsMTEwLDEwMSwxMTcsNCwwLDAsMCw4NCwxMTQsMTE3LDEwMSwxMTcsNiwwLDAsCi0gICAgMCwxMDAsMTAxLDk5LDExMSwxMDAsMTAxLDExNywxOCwwLDAsMCw4NSwxMTAsMTA1LDk5LAotICAgIDExMSwxMDAsMTAxLDY4LDEwMSw5OSwxMTEsMTAwLDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsNDAsOSwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLAotICAgIDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw4LDAsMCwwLDExNiwxMTEsCi0gICAgMTA3LDEwMSwxMTAsMTA1LDEyMiwxMDEsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDEyLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsOTgsMTIxLDExNiwxMDEsMTE1LAotICAgIDExNywzLDAsMCwwLDEwMSwxMjAsOTksMTE3LDEwLDAsMCwwLDExNCwxMDEsOTcsCi0gICAgMTAwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDgsMCwwLDAsMTAxLDExMCw5OSwxMTEsCi0gICAgMTAwLDEwNSwxMTAsMTAzLDExNywxNSwwLDAsMCwxMTAsMTAxLDExOSwxMDgsMTA1LDExMCwxMDEsCi0gICAgOTUsMTAwLDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwwLDAsCi0gICAgMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsCi0gICAgMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSwxNDMsMywwLDAsMTE1LDM4LDAsMCwwLDAsMiwxMiwxLAotICAgIDE1LDEsMywxLDE5LDEsMTgsMSw5LDEsMzEsMSwxOCwxLDMsMSwKLSAgICAxOSwxLDE4LDEsOSwxLDMxLDEsMTgsMSwzLDEsMzAsMSwxOCwxLAotICAgIDksMSwxMTcsMjMsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCwxMiwwLDAsMCw0NSwwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsNTIsMiwwLDAsMTI0LDAsMCwxMDYsMCwwLDEyNCwxLAotICAgIDAsMTMxLDEsMCwxMjUsMiwwLDEwMCwxMCwwLDEyNSwzLDAsMTIxLDE2LDAsCi0gICAgMTE2LDIsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDQsMCw4NywxMTAsMjQsMCwKLSAgICA0LDExNiwzLDAsMTA3LDEwLDAsMTE0LDYzLDAsMSwxLDEsMTAwLDEwLDAsCi0gICAgMTI1LDQsMCw4OSwxMTAsMTQsMSw4OCwxMjEsMTksMCwxMjQsMCwwLDEwNiw0LAotICAgIDAsMTI0LDIsMCwxMzEsMSwwLDEyNSw1LDAsODcsMTEwLDE4LDAsNCwxMTYsCi0gICAgMywwLDEwNywxMCwwLDExNCwxMDMsMCwxLDEsMSw4OSwxMTAsMjMwLDAsODgsCi0gICAgMTE2LDUsMCwxMjQsNSwwLDEwMCwxLDAsMjUsMTMxLDEsMCwxMjUsMywwLAotICAgIDEyMSwxOSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsNCwwLDEzMSwxLDAsMTI1LAotICAgIDYsMCw4NywxMTAsMTgsMCw0LDExNiw3LDAsMTA3LDEwLDAsMTE0LDE1OSwwLAotICAgIDEsMSwxLDg5LDExMCwxNzQsMCw4OCwxMjEsMjgsMCwxMjQsMCwwLDEwNiw4LAotICAgIDAsMTI0LDEsMCwxMjQsNiwwLDEyNCw0LDAsMTI0LDUsMCwxMzEsNCwwLAotICAgIDEyNSw3LDAsODcsMTEwLDI0LDAsNCwxMTYsOSwwLDExNiwxMCwwLDEwMiwyLAotICAgIDAsMTA3LDEwLDAsMTE0LDIxNCwwLDEsMSwxLDg5LDExMCwxMTksMCw4OCwxMTYsCi0gICAgMTEsMCwxMDAsMiwwLDEyNCw0LDAsMTI0LDIsMCwxMzEsMywwLDEsMTE2LAotICAgIDEyLDAsMTA2LDEzLDAsMTI0LDcsMCwxMzEsMSwwLDEyNSw4LDAsMTE2LDE0LAotICAgIDAsMTI0LDgsMCwxMTYsMTUsMCwxMzEsMiwwLDExNCwzOCwxLDExNiwxNiwwLAotICAgIDEwNiwxNywwLDEyNCw4LDAsMTI0LDIsMCwxMzEsMiwwLDEsMTE2LDExLDAsCi0gICAgMTAwLDMsMCwxMjQsNCwwLDEzMSwyLDAsMSwxMjQsOCwwLDgzLDEwMCw0LAotICAgIDAsMTI1LDksMCwxMTYsOSwwLDEyNCw5LDAsMTA2LDE4LDAsMTI0LDQsMCwKLSAgICAxMzEsMSwwLDEwMCw1LDAsMTI0LDEsMCwxMDAsNiwwLDEyNCw0LDAsMTMxLAotICAgIDEsMiwxMzAsMSwwLDEyNCwwLDAsMTA2LDYsMCwxMjQsMiwwLDEzMSwxLAotICAgIDAsMTI1LDEwLDAsMTE2LDE5LDAsMTE2LDIwLDAsMTI0LDEwLDAsMTI0LDIsMCwKLSAgICAxMDAsNywwLDEwMCw4LDAsMTAwLDExLDAsMTMxLDQsMSwxMjUsMTEsMCwxMTYsCi0gICAgMTEsMCwxMDAsMywwLDEyNCwyLDAsMTMxLDIsMCwxLDExNiwyMiwwLDEwNiwKLSAgICAyMywwLDEyLDExNCw0OCwyLDEyNCw0LDAsMTAwLDEwLDAsMTA3LDksMCwxMTQsCi0gICAgNDgsMiwxMjQsMywwLDEwMCwxMCwwLDEwNyw5LDAsMTE0LDQ4LDIsMTE2LDI0LAotICAgIDAsMTE2LDI1LDAsMTMxLDEsMCwxMjUsNiwwLDEyNCw2LDAsMTA2LDI2LDAsCi0gICAgMTE2LDI3LDAsMTI0LDMsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMjQsNiwwLAotICAgIDEwNiwyNiwwLDExNiwyNywwLDExNiwyOCwwLDEyNCwxMCwwLDEzMSwxLDAsMTMxLAotICAgIDEsMCwxMzEsMSwwLDEsMTI0LDYsMCwxMDYsMjYsMCwxMTYsMTIsMCwxMDYsCi0gICAgMjksMCwxMjQsMTEsMCwxMzEsMSwwLDEzMSwxLDAsMSwxMjEsMzYsMCwxMjQsCi0gICAgMCwwLDEwNiwzMCwwLDEyNCwyLDAsMTI0LDQsMCwxMjQsNiwwLDEzMSwzLAotICAgIDAsMSwxMTYsMTEsMCwxMDAsOSwwLDEyNCw0LDAsMTMxLDIsMCwxLDg3LAotICAgIDExMyw0OCwyLDQsMTE2LDMsMCwxMDcsMTAsMCwxMTQsNDQsMiwxLDEsMSwKLSAgICA4OSwxMTMsNDgsMiw4OCwxMTAsMCwwLDEyNCwxMSwwLDgzLDQwLDEyLDAsMCwKLSAgICAwLDExNywxOTAsMCwwLDAsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LAotICAgIDEwOSwxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsCi0gICAgMzIsNzMsMTEwLDExNSwxMTIsMTAxLDk5LDExNiw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLAotICAgIDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsODIsMTAxLDk3LDEwMCwxMDUsMTEwLDEwMywzMiwxMTEsMTAyLDMyLDk4LDEyMSwxMTYsCi0gICAgMTAxLDk5LDExMSwxMDAsMTAxLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsMzIsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDMyLDExNiwxMTEsMzIsOTgsMTAxLDMyLAotICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDYsMzIsODQsMTExLDMyLAotICAgIDExOSwxMTQsMTA1LDExNiwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTgsMTIxLAotICAgIDExNiwxMDEsOTksMTExLDEwMCwxMDEsNDQsMzIsMTE1LDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywKLSAgICAzMiwxMDksMTE3LDExNSwxMTYsMzIsOTcsMTA4LDExNSwxMTEsMzIsOTgsMTAxLDMyLDEwNSwxMDksCi0gICAgMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMTE3LDUsMCwwLDAsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTMsCi0gICAgMCwwLDAsMTIzLDEyNSwzMiwxMDksOTcsMTE2LDk5LDEwNCwxMDEsMTE1LDMyLDEyMywxMjUsCi0gICAgMTE3LDE5LDAsMCwwLDk5LDExMSwxMDAsMTAxLDMyLDExMSw5OCwxMDYsMTAxLDk5LDExNiwKLSAgICAzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDEyNSwxMTcsMjEsMCwwLDAsNzgsMTExLDExMCwKLSAgICA0NSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTA1LDExMCwzMiwKLSAgICAxMjMsMTI1LDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMSwxMjAsMTAxLDk5LDExNywxMiwwLAotICAgIDAsMCwxMDAsMTExLDExMCwxMTYsOTUsMTA1LDExMCwxMDQsMTAxLDExNCwxMDUsMTE2LDExNywxMCwKLSAgICAwLDAsMCwxMTksMTE0LDExMSwxMTYsMTAxLDMyLDEyMywzMywxMTQsMTI1LDc4LDg0LDQwLAotICAgIDMxLDAsMCwwLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwKLSAgICAxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDE3LAotICAgIDAsMCwwLDk5LDk3LDk5LDEwNCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMTE3LDE5LDAsMCwwLDc4LDExMSwxMTYsNzMsMTA5LDExMiwxMDgsCi0gICAgMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTAsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDExNywzLDAsMCwwLAotICAgIDEwNSwxMTAsMTE2LDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCi0gICAgMTE3LDcsMCwwLDAsNzMsNzksNjksMTE0LDExNCwxMTEsMTE0LDExNywyMCwwLDAsCi0gICAgMCw5NSw5OCwxMjEsMTE2LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTA5LDk1LDk4LDEyMSwxMTYsCi0gICAgMTAxLDk5LDExMSwxMDAsMTAxLDExNywxMSwwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDY5LDExNCwxMTQsMTExLDExNCwxMTcsOCwwLDAsMCw2OSw3OSw3MCw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LDExMSwxMTUsMTAxLDk1LAotICAgIDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw3LDAsMCwwLDEwOSw5NywxMTQsMTE1LAotICAgIDEwNCw5NywxMDgsMTE3LDUsMCwwLDAsMTA4LDExMSw5NywxMDAsMTE1LDExNywxMCwwLAotICAgIDAsMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksMTAxLDExNywxMCwwLDAsCi0gICAgMCw5NSw5OSwxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDQsMCwwLDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTE3LDE2LDAsMCwwLDk1LDEwMiwxMDUsMTIwLDk1LDk5LDExMSwKLSAgICA5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsMTE3LDYsMCwwLDAsMTAyLDExMSwKLSAgICAxMTQsMTA5LDk3LDExNiwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksCi0gICAgMTA1LDExNiwxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LAotICAgIDEwMSwxMDAsMTE3LDcsMCwwLDAsOTksMTExLDEwOSwxMTIsMTA1LDEwOCwxMDEsMTE3LDQsCi0gICAgMCwwLDAsODQsMTE0LDExNywxMDEsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LAotICAgIDE5LDAsMCwwLDEwMCwxMTEsMTEwLDExNiw5NSwxMTksMTE0LDEwNSwxMTYsMTAxLDk1LDk4LAotICAgIDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNyw5LDAsMCwwLDk4LDEyMSwxMTYsMTAxLAotICAgIDk3LDExNCwxMTQsOTcsMTIxLDExNywxMiwwLDAsMCw5NSw3Nyw2NSw3MSw3Myw2NywKLSAgICA5NSw2Niw4OSw4NCw2OSw4MywxMTcsNiwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLAotICAgIDEwMCwxMTcsNywwLDAsMCw5NSwxMTksOTUsMTA4LDExMSwxMTAsMTAzLDExNywzLDAsCi0gICAgMCwwLDEwOCwxMDEsMTEwLDExNyw1LDAsMCwwLDEwMCwxMTcsMTA5LDExMiwxMTUsMTE3LAotICAgIDE1LDAsMCwwLDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksCi0gICAgMTExLDEwMCwxMDEsNDAsMTIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsCi0gICAgMTAyLDExNyw4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsMTIsCi0gICAgMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDExNywKLSAgICAxMywwLDAsMCw5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMiwwLDAsMCwxMTUsMTE2LDExNyw0LDAsMCwwLDEwMCw5NywxMTYsCi0gICAgOTcsMTE3LDEwLDAsMCwwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDExNyw1LDAsMCwwLDEwMiwxMTEsMTE3LDExMCwxMDAsMTE3LDMsMCwwLDAsMTA5LAotICAgIDExNSwxMDMsMTE3LDEyLDAsMCwwLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTUsOTgsMTIxLAotICAgIDExNiwxMDEsMTE1LDExNywxMSwwLDAsMCw5OSwxMTEsMTAwLDEwMSw5NSwxMTEsOTgsMTA2LAotICAgIDEwMSw5OSwxMTYsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwxMTEsMTAwLDEwMSwxNjUsMywwLDAsCi0gICAgMTE1LDk4LDAsMCwwLDAsNywxNSwxLDYsMSwzLDEsMTYsMSwxMywKLSAgICAxLDExLDIsMywxLDE5LDEsMTMsMSw1LDIsMTYsMSwzLDEsMTksCi0gICAgMSwxMywxLDUsMiwzLDEsMTIsMSwzLDEsMTMsMSwxOSwxLDUsCi0gICAgMiw5LDEsNywxLDE1LDEsMTUsMSwxNiwxLDYsMSw3LDEsNCwKLSAgICAyLDYsMSwxOCwxLDE1LDEsMTUsMSw2LDEsMTIsMSw5LDEsMTMsCi0gICAgMSwyMiwxLDEyLDEsMTIsMSwxOSwxLDI1LDEsMjIsMSwzLDEsMTksCi0gICAgMSwxNywxLDEzLDEsOCwxLDExNywyMSwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsCi0gICAgMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDEzLDAsMCwwLDEyNCwwLDAsMTA2LDAsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsODMsNDAsMSwwLDAsMCwxMTcsMCwxLAotICAgIDAsMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLAotICAgIDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsCi0gICAgMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsODIsMTAxLDExMywxMTcsMTA1LDExNCwKLSAgICAxMDEsMTE1LDMyLDY5LDEyMCwxMDEsOTksMTE3LDExNiwxMDUsMTExLDExMCw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDMyLAotICAgIDk3LDExMCwxMDAsMzIsODIsMTAxLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsNzYsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5OCwKLSAgICAxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCi0gICAgMTAxLDExMCwxMTYsMTAxLDEwMCwzMiwxMTYsMTExLDMyLDEwOCwxMTEsOTcsMTAwLDMyLDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsMzIsODUsMTE1LDEwMSwzMiwxMTEsCi0gICAgMTAyLDMyLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDMyLDEwNSwxMTUsMzIsMTAwLDEwNSwKLSAgICA5OSwxMTYsOTcsMTE2LDEwMSwxMDAsMzIsOTgsMTIxLDMyLDExOSwxMDQsMTAxLDExNiwxMDQsMTAxLAotICAgIDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMDMsMTAxLDExNiw5NSw5OSwxMTEsCi0gICAgMTAwLDEwMSwzMiwxMTcsMTE1LDEwMSwxMTUsNDcsMTE5LDExNCwxMDUsMTE2LDEwMSwxMTUsMzIsOTgsCi0gICAgMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsNDAsMSwwLDAsMCwxMTcsMTIsMCwwLDAsOTUsMTA4LDExMSw5NywKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLAotICAgIDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCwKLSAgICA5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDIyNywKLSAgICAzLDAsMCwxMTUsMiwwLDAsMCwwLDgsMTE3LDI0LDAsMCwwLDgzLAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywxMDAsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDAsMTAsMCwwLDAsMTE3LDgsMCwKLSAgICAwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSwKLSAgICAxMTMsMTE3LDk3LDEwOCwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTAsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDExNiw5NywxMTYsMTE1LDExNywxNSwwLDAsMCw5NSw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNyw4LDAsMCwKLSAgICAwLDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsMTE3LDEwLDAsMCwwLDEwMywxMDEsCi0gICAgMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsCi0gICAgOTUsOTksMTExLDEwMCwxMDEsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsCi0gICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDEwNCwzLDAsMCwxMTUsMTQsMCwwLDAsMTYsCi0gICAgMiwxMiw2LDEyLDEyLDEyLDEwLDEyLDksMTIsMjIsMTIsNjIsMTE3LDEyLDAsCi0gICAgMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwKLSAgICAwLDAsMCwwLDAsMCwwLDEsMCwwLDAsNCwwLDAsMCwyLAotICAgIDAsMCwwLDExNSw5MiwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsCisgICAgMTIyLDM5LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsMTEwLDExMSwxMTYsMzIsOTcsMTE4LDk3LAorICAgIDEwNSwxMDgsOTcsOTgsMTA4LDEwMSwzMiwxMTYsMTA0LDExNCwxMTEsMTE3LDEwMywxMDQsMzIsMTAzLAorICAgIDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5Nyw0MCw0MSwxMTQsNjcsMCwwLDAsNzgsNDEsCisgICAgNSwxMTQsMjM5LDAsMCwwLDIxOCw4LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsCisgICAgMTE0LDQwLDAsMCwwLDExNCwxNTQsMCwwLDAsMTE0LDIwNCwwLDAsMCw0MSwKKyAgICA1LDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwwLDAsMCwKKyAgICAxMTQsMjAyLDAsMCwwLDIxOCwzLDEwMSwxMjAsOTksMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE3LDEsMCwwLDIzNiw1LAorICAgIDAsMCwxMTUsMTQsMCwwLDAsMCwyLDE1LDEsMywxLDE5LDEsMTgsCisgICAgMSw5LDEsMzEsMSwxMjIsMjMsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywKKyAgICAxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDIxOCw5LAorICAgIDk1LDExMSwxMTIsMTE2LDEwNSwxMDksMTA1LDEyMiwxMDEsMTE0LDI5LDAsMCwwLDk5LDMsCisgICAgMCwwLDAsMSwwLDAsMCw0LDAsMCwwLDksMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDMxLDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMjQsMSwKKyAgICAwLDEyNCwyLDAsMTAwLDEsMCwxMDAsMiwwLDEwMCwzLDAsMTAwLDQsMCwKKyAgICAxMjQsMywwLDEzMSw0LDIsODMsNDEsNSwxMjIsMTMwLDgyLDEwMSwxMTYsMTE3LDExNCwKKyAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksCisgICAgMTE2LDMyLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCisgICAgMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw4NCwxMDQsMTAxLDMyLDM5LDEwMCw5NywxMTYsOTcsMzksMzIsOTcsMTE0LDEwMywxMTcsCisgICAgMTA5LDEwMSwxMTAsMTE2LDMyLDk5LDk3LDExMCwzMiw5OCwxMDEsMzIsOTcsMTEwLDEyMSwzMiwKKyAgICAxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTE2LDEyMSwxMTIsMTAxLDMyLDExNiwxMDQsOTcsMTE2LAorICAgIDMyLDk5LDExMSwxMDksMTEyLDEwNSwxMDgsMTAxLDQwLDQxLDMyLDExNSwxMTcsMTEyLDExMiwxMTEsCisgICAgMTE0LDExNiwxMTUsNDYsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDE3NiwwLAorICAgIDAsMCwyMTgsMTIsMTAwLDExMSwxMTAsMTE2LDk1LDEwNSwxMTAsMTA0LDEwMSwxMTQsMTA1LDExNiwKKyAgICA4NCwxMTQsMTE4LDAsMCwwLDQxLDIsMTE0LDExNCwwLDAsMCwyMTgsNyw5OSwKKyAgICAxMTEsMTA5LDExMiwxMDUsMTA4LDEwMSw0MSw0LDExNCw3MSwwLDAsMCwxMTQsNTMsMCwKKyAgICAwLDAsMTE0LDM1LDAsMCwwLDExNCw0MiwxLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTQsMTE1LDExMSwxMTcsCisgICAgMTE0LDk5LDEwMSw5NSwxMTYsMTExLDk1LDk5LDExMSwxMDAsMTAxLDI0Niw1LDAsMCwxMTUsCisgICAgNCwwLDAsMCwwLDUsMTgsMSwxMjIsMjcsODMsMTExLDExNywxMTQsOTksMTAxLAorICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDExNiwxMTEsCisgICAgOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDEwLDAsCisgICAgMCwwLDQzLDAsMCwwLDY3LDAsMCwwLDExNSwxNzcsMSwwLDAsMTI0LAorICAgIDAsMCwxMDYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEwMCwxLAorICAgIDAsMTI1LDMsMCwxMjEsMTYsMCwxMTYsMSwwLDEyNCwyLDAsMTMxLDEsMCwKKyAgICAxMjUsNCwwLDg3LDExMCwyNCwwLDQsMTE2LDIsMCwxMDcsMTAsMCwxMTQsNjMsCisgICAgMCwxLDEsMSwxMDAsMSwwLDEyNSw0LDAsODksMTEwLDIwMiwwLDg4LDEyMSwKKyAgICAxOSwwLDEyNCwwLDAsMTA2LDMsMCwxMjQsMiwwLDEzMSwxLDAsMTI1LDUsCisgICAgMCw4NywxMTAsMTgsMCw0LDExNiw0LDAsMTA3LDEwLDAsMTE0LDEwMywwLDEsCisgICAgMSwxLDg5LDExMCwxNjIsMCw4OCwxMTYsNSwwLDEyNCw1LDAsMTAwLDIsMCwKKyAgICAyNSwxMzEsMSwwLDEyNSwzLDAsMTIxLDE5LDAsMTI0LDAsMCwxMDYsNiwwLAorICAgIDEyNCw0LDAsMTMxLDEsMCwxMjUsNiwwLDg3LDExMCwxOCwwLDQsMTE2LDcsCisgICAgMCwxMDcsMTAsMCwxMTQsMTU5LDAsMSwxLDEsODksMTEwLDEwNiwwLDg4LDEyMSwKKyAgICAzNCwwLDExNiw4LDAsMTI0LDYsMCwxMDAsMywwLDEyNCw1LDAsMTAwLDQsCisgICAgMCwxMjQsMSwwLDEwMCw1LDAsMTI0LDQsMCwxMzEsMSwzLDEyNSw3LDAsCisgICAgODcsMTEwLDI0LDAsNCwxMTYsOSwwLDExNiwxMCwwLDEwMiwyLDAsMTA3LDEwLAorICAgIDAsMTE0LDIyMCwwLDEsMSwxLDg5LDExMCw0NSwwLDg4LDExNiwxMSwwLDEwMCwKKyAgICA2LDAsMTI0LDQsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMTYsMTIsMCwxMjQsCisgICAgNywwLDEwMCw0LDAsMTI0LDEsMCwxMDAsNywwLDEyNCw0LDAsMTAwLDgsCisgICAgMCwxMjQsMiwwLDEzMSwxLDMsODMsMTI0LDAsMCwxMDYsNiwwLDEyNCwyLAorICAgIDAsMTMxLDEsMCwxMjUsOCwwLDEyNCwwLDAsMTA2LDEzLDAsMTI0LDgsMCwKKyAgICAxMjQsMiwwLDEzMSwyLDAsMTI1LDksMCwxMTYsMTEsMCwxMDAsOSwwLDEyNCwKKyAgICAyLDAsMTMxLDIsMCwxLDExNiwxNCwwLDEwNiwxNSwwLDEyLDExNCwxNzMsMSwKKyAgICAxMjQsNCwwLDEwMCwxLDAsMTA3LDksMCwxMTQsMTczLDEsMTI0LDMsMCwxMDAsCisgICAgMSwwLDEwNyw5LDAsMTE0LDE3MywxLDExNiwxNiwwLDEyNCw5LDAsMTI0LDMsCisgICAgMCwxMTYsMTcsMCwxMjQsOCwwLDEzMSwxLDAsMTMxLDMsMCwxMjUsNiwwLAorICAgIDEyMSwzNiwwLDEyNCwwLDAsMTA2LDE4LDAsMTI0LDIsMCwxMjQsNCwwLDEyNCwKKyAgICA2LDAsMTMxLDMsMCwxLDExNiwxMSwwLDEwMCwxMCwwLDEyNCw0LDAsMTMxLAorICAgIDIsMCwxLDg3LDExMywxNzMsMSw0LDExNiwyLDAsMTA3LDEwLDAsMTE0LDE2OSwKKyAgICAxLDEsMSwxLDg5LDExMywxNzMsMSw4OCwxMTAsMCwwLDEyNCw5LDAsODMsCisgICAgNDEsMTEsMTIyLDE5MCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwKKyAgICAxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw3MywKKyAgICAxMTAsMTE1LDExMiwxMDEsOTksMTE2LDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiwKKyAgICA5NSw5OSwxMTEsMTAwLDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICA4MiwxMDEsOTcsMTAwLDEwNSwxMTAsMTAzLDMyLDExMSwxMDIsMzIsOTgsMTIxLDExNiwxMDEsOTksCisgICAgMTExLDEwMCwxMDEsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsOTcsMTE2LAorICAgIDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsMzIsMTE2LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwzMiw4NCwxMTEsMzIsMTE5LDExNCwKKyAgICAxMDUsMTE2LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OCwxMjEsMTE2LDEwMSwKKyAgICA5OSwxMTEsMTAwLDEwMSw0NCwzMiwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LDMyLDEwOSwKKyAgICAxMTcsMTE1LDExNiwzMiw5NywxMDgsMTE1LDExMSwzMiw5OCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LAorICAgIDEwMSwxMDksMTAxLDExMCwxMTYsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiw3OCwxMTQsMTg0LDAsMCwwLDExNCwxODgsMCwwLDAsMTE0LDY3LDAsCisgICAgMCwwLDExNCwzNSwwLDAsMCwxMjIsMTMsMTIzLDEyNSwzMiwxMDksOTcsMTE2LDk5LAorICAgIDEwNCwxMDEsMTE1LDMyLDEyMywxMjUsMTE0LDE0MSwwLDAsMCwxMTQsMTQyLDAsMCwwLAorICAgIDEyMiwxOSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSw5OSwxMTYsMzIsMTAyLDExNCwKKyAgICAxMTEsMTA5LDMyLDEyMywxMjUsMTIyLDEwLDExOSwxMTQsMTExLDExNiwxMDEsMzIsMTIzLDMzLDExNCwKKyAgICAxMjUsNDEsMTksMTE0LDIzOSwwLDAsMCwxMTQsMTMyLDAsMCwwLDExNCwxMjMsMCwKKyAgICAwLDAsMTE0LDM3LDEsMCwwLDExNCwzNSwxLDAsMCwxMTQsMTQsMCwwLAorICAgIDAsMTE0LDQwLDEsMCwwLDExNCw0MCwwLDAsMCwxMTQsMTkxLDAsMCwwLAorICAgIDExNCwxNTQsMCwwLDAsMTE0LDE4NywwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwKKyAgICAxOTYsMCwwLDAsMTE0LDQ1LDEsMCwwLDExNCw3LDAsMCwwLDIxOCwxOSwKKyAgICAxMDAsMTExLDExMCwxMTYsOTUsMTE5LDExNCwxMDUsMTE2LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwKKyAgICAxMTEsMTAwLDEwMSwxMTQsMTk5LDAsMCwwLDExNCwzMSwwLDAsMCwxMTQsMzksMSwKKyAgICAwLDAsNDEsMTAsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDE0MiwKKyAgICAwLDAsMCwxMTQsMTg5LDAsMCwwLDExNCwxNDEsMCwwLDAsMjE4LDIsMTE1LAorICAgIDExNiwxMTQsNTMsMCwwLDAsMjE4LDEwLDk4LDEyMSwxMTYsMTAxLDExNSw5NSwxMDAsOTcsCisgICAgMTE2LDk3LDExNCwyMDIsMCwwLDAsOTAsMTEsOTksMTExLDEwMCwxMDEsOTUsMTExLDk4LAorICAgIDEwNiwxMDEsOTksMTE2LDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDExNCwxNiwxLDAsMCwyNTQsNSwwLDAsMTE1LDc4LDAsMCwKKyAgICAwLDAsNywxNSwxLDYsMSwzLDEsMTYsMSwxMywxLDExLDIsMywKKyAgICAxLDE5LDEsMTMsMSw1LDIsMTYsMSwzLDEsMTksMSwxMywxLDUsCisgICAgMiwzLDEsOSwxLDEyLDEsMTMsMSwxOSwxLDUsMiw5LDEsNywKKyAgICAxLDE1LDEsNiwxLDcsMSwxNSwxLDE4LDEsMTMsMSwyMiwxLDEyLAorICAgIDEsOSwxLDE1LDEsMywxLDE5LDEsMTcsMSwxMywxLDgsMSwxMjIsCisgICAgMjEsODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLAorICAgIDExNiw5NSw5OSwxMTEsMTAwLDEwMSw3OCwxMTQsMTM5LDAsMCwwLDQxLDEwLDExNCw1NywKKyAgICAwLDAsMCwxMTQsNTYsMCwwLDAsMTE0LDU4LDAsMCwwLDExNCwzNiwxLAorICAgIDAsMCwxMTQsMzcsMSwwLDAsMTE0LDM5LDEsMCwwLDExNCwzOCwxLDAsCisgICAgMCwxMTQsMTcsMSwwLDAsMTE0LDQ1LDEsMCwwLDExNCwxNiwxLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsMzQsMSwwLDAsMTk2LDUsMCwwLDExNSwxNCwwLAorICAgIDAsMCwxMiwyLDEyLDgsMTIsMTMsMTIsMTAsMTIsNywxMiwxMCwxOCw4LAorICAgIDExNCwzNCwxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLAorICAgIDAsMCw0LDAsMCwwLDAsMCwwLDAsMTE1LDExMiwwLDAsMCwxMDEsCisgICAgMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsCisgICAgMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwKKyAgICAxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsCisgICAgMCwwLDkwLDYsMCwxMDEsNywwLDEzNSwwLDAsMTAyLDEsMCwxMDAsOCwKKyAgICAwLDEwMCw5LDAsMTM0LDAsMCwxMzEsMSwwLDkwLDgsMCwxMDEsNywwLAorICAgIDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw5LDAsMTAwLAorICAgIDEyLDAsMTAwLDEzLDAsMTMyLDAsMCw5MCwxMCwwLDEzNSwwLDAsODMsNDEsCisgICAgMTQsMjE4LDEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsMTAzLDY2LAorICAgIDk3LDExNSwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCisgICAgOTksMTA4LDk3LDExNSwxMTUsMzIsMTE5LDEwNCwxMDUsOTksMTA0LDMyLDEwNSwxMDksMTEyLDEwOCwKKyAgICAxMDEsMTA5LDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDMyLDExMiwxMTQsMTExLDExNiwxMTEsOTksMTExLDEwOCwzMiwxMDksMTAxLDExNiwxMDQsMTExLAorICAgIDEwMCwxMTUsMzIsMTE2LDEwNCw5NywxMTYsMTAsMzIsMzIsMzIsMzIsMTE0LDEwMSwxMTMsMTE3LAorICAgIDEwNSwxMTQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiwKKyAgICAxMTcsMTE1LDk3LDEwMywxMDEsNDYsOTksMywwLDAsMCwwLDAsMCwwLDMsCisgICAgMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsCisgICAgMTI0LDEsMCwxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsCisgICAgMSwwLDEwMCwxLDAsODMsNDEsMiwxMjIsNzUsNjcsOTcsOTksMTA0LDEwMSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwzMiwKKyAgICA5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwxMTEsMzIsCisgICAgMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsCisgICAgMTIxLDMyLDExNiwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDEwMiwxMDUsCisgICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDc4LDQxLDIsMTE0LDY3LDAsMCwwLDExNCwzNSwwLAorICAgIDAsMCw0MSwzLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsNzIsMCwwLDAsNTUsNiwwLDAsMTE1LDQsMCwwLDAsCisgICAgMCwzLDksMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwzNCwKKyAgICAwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMDYsMCwwLDEwNywKKyAgICAyLDAsMTExLDMzLDAsMTI0LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTA2LDEsCisgICAgMCwxMDcsMiwwLDgzLDQxLDEsNzgsNDEsMiwxMTQsMjI1LDAsMCwwLDExNCwKKyAgICA2MywwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMjI4LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAyMzAsMCwwLDAsNjEsNiwwLDAsMTE1LDQsMCwwLDAsMCwxLDE4LAorICAgIDEsMTIyLDE3LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwKKyAgICAxMDEsMTEzLDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKKyAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDI2LDAsMCwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsMTE2LDAsMCwxMjQsMCwwLAorICAgIDEwNiwyLDAsMTMxLDEsMCw2NSw4Myw0MSwxLDc4LDQxLDMsMjE4LDQsMTA0LAorICAgIDk3LDExNSwxMDQsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCw0MSwxLDExNCwKKyAgICA3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsOCw5NSw5NSwxMDQsOTcsMTE1LDEwNCw5NSw5NSw2NSw2LDAsCisgICAgMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDE5LDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKKyAgICA5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDQsOTcsMTE1LDEwNCw5NSw5NSw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDMsMCwKKyAgICAwLDAsMTE1LDIyLDAsMCwwLDExNiwwLDAsMTE2LDEsMCwxMjQsMCwwLAorICAgIDEzMSwyLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwxLDAsODMsNDEsMSwxMjIsCisgICAgMTAwLDc2LDExMSw5NywxMDAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTAyLAorICAgIDExNCwxMTEsMTA5LDMyLDk3LDMyLDEwMiwxMDUsMTA4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwKKyAgICAzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsCisgICAgMzIsODUsMTE1LDEwMSwzMiwxMDEsMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICA0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwzMiwzMiwzMiwzMiw0MSwzLDIxOCw1LDExNSwxMTcsMTEyLDEwMSwxMTQsMTE0LDQ5LAorICAgIDEsMCwwLDExNCw1LDEsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwKKyAgICAxNTksMCwwLDAsNDEsMSwxMTQsMjI1LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw1LDEsMCwwLDY4LDYsMCwwLDExNSwyLAorICAgIDAsMCwwLDAsMTAsMTIyLDIyLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAorICAgIDExNCw0NiwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSw3LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCw4Myw0MSwxLAorICAgIDEyMiw1OCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsCisgICAgMTA0LDMyLDExNiwxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwKKyAgICAxMDIsMTA1LDEwOCwxMDEsMzIsOTcsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLAorICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDQxLDEsMTE0LDM1LAorICAgIDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIzOSwKKyAgICAwLDAsMCw4MCw2LDAsMCwxMTUsMiwwLDAsMCwwLDMsMTIyLDIzLAorICAgIDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMDIsCisgICAgMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLAorICAgIDMsMCwwLDAsOCwwLDAsMCw2NywwLDAsMCwxMTUsNDEsMCwwLAorICAgIDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLAorICAgIDE0MywxNywwLDEyNSwyLDAsMTI0LDIsMCwxMDYsMiwwLDEzMSwwLDAsODMsCisgICAgODcsMTAwLDIsMCw4MSw4OCwxMDAsMiwwLDgzLDQxLDMsMTIyLDM5LDgyLDEwMSwKKyAgICAxMTYsMTE3LDExNCwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDk3LDExNiw5NywzMiwxMDIsMTE0LAorICAgIDExMSwxMDksMzIsMTEyLDk3LDExNiwxMDQsMzIsOTcsMTE1LDMyLDExNCw5NywxMTksMzIsOTgsCisgICAgMTIxLDExNiwxMDEsMTE1LDQ2LDIxOCwxLDExNCw3OCw0MSwzLDExNCw0OSwwLDAsMCwKKyAgICAxMTQsNTAsMCwwLDAsOTAsNCwxMTQsMTAxLDk3LDEwMCw0MSwzLDExNCw3MSwwLAorICAgIDAsMCwxMTQsMzUsMCwwLDAsMTE0LDU0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw0MCwxLDAsMCwKKyAgICA4NSw2LDAsMCwxMTUsNCwwLDAsMCwwLDIsMjEsMSwxMjIsMTksNzAsCisgICAgMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMCw5NywKKyAgICAxMTYsOTcsNDEsMTEsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsCisgICAgMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsMjMwLDAsCisgICAgMCwwLDExNCw1MSwxLDAsMCwxMTQsMTU3LDAsMCwwLDExNCw1LDEsMCwKKyAgICAwLDExNCwyMzksMCwwLDAsMTE0LDQwLDEsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDQxLDEsMTE0LDIyNSwwLDAsMCwxMTQsNSwwLDAsCisgICAgMCwxMTQsNDksMSwwLDAsNTAsNiwwLDAsMTE1LDE0LDAsMCwwLDEyLAorICAgIDMsNiwyLDEyLDYsMTIsNCwxMiwzLDI0LDEyLDE4LDUsMTE0LDQ5LDEsCisgICAgMCwwLDk5LDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDQsCisgICAgMCwwLDAsNjQsMCwwLDAsMTE1LDY0LDAsMCwwLDEwMSwwLDAsOTAsCiAgICAgMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLAotICAgIDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDEsNSwwLDEzNSwwLDAsCi0gICAgMTAyLDEsMCwxMDAsNCwwLDEwMCw1LDAsMTM0LDAsMCwxMzEsMSwwLDkwLAotICAgIDYsMCwxMDEsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDEzMSwxLAotICAgIDAsOTAsNywwLDEwMCw4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDgsMCwKLSAgICAxMzUsMCwwLDgzLDQwLDEwLDAsMCwwLDExNywxMCwwLDAsMCw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDEwMywwLDAsMCw2Niw5NywxMTUsCi0gICAgMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDk5LDEwOCwKLSAgICA5NywxMTUsMTE1LDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKLSAgICAxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwKLSAgICAxMTIsMTE0LDExMSwxMTYsMTExLDk5LDExMSwxMDgsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE1LAotICAgIDMyLDExNiwxMDQsOTcsMTE2LDEwLDMyLDMyLDMyLDMyLDExNCwxMDEsMTEzLDExNywxMDUsMTE0LAotICAgIDEwMSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTE1LDEyMSwxMTUsMTE2LDEwMSwxMDksMzIsMTE3LDExNSwKLSAgICA5NywxMDMsMTAxLDQ2LDk5LDMsMCwwLDAsMCwwLDAsMCwzLDAsMCwKLSAgICAwLDIsMCwwLDAsNjcsMCwwLDAsMTE1LDIyLDAsMCwwLDEyNCwxLAotICAgIDAsMTI0LDAsMCw5NSwwLDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwKLSAgICAxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDc1LDAsMCwwLDY3LDk3LAotICAgIDk5LDEwNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLAotICAgIDk3LDEwOSwxMDEsMzIsOTcsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwKLSAgICAzMiwxMTYsMTExLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDIsMTExLDExNywKLSAgICAxMTAsMTAwLDMyLDk4LDEyMSwzMiwxMTYsMTA0LDEwMSwxMCwzMiwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw3OCw0MCwyLDAsMCwwLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsCi0gICAgMTA0LDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA4LDAsMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsCi0gICAgMCwxMTIsOTcsMTE2LDEwNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LAotICAgIDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLAotICAgIDYyLDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwyNDMsMywKLSAgICAwLDAsMTE1LDQsMCwwLDAsMCwzLDksMSwxMTcsMTksMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LAotICAgIDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwKLSAgICAzLDAsMCwwLDMsMCwwLDAsMTE1LDIyLDAsMCwwLDExNiwwLDAsCi0gICAgMTE2LDEsMCwxMjQsMCwwLDEzMSwyLDAsMTA2LDIsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsODMsNDAsMSwwLDAsMCwxMTcsMjYsMCwwLDAsNzYsMTExLDk3LAotICAgIDEwMCwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgOTcsMzIsMTAyLDEwNSwxMDgsMTAxLDQ2LDQwLDMsMCwwLDAsMTE3LDUsMCwwLAotICAgIDAsMTE1LDExNywxMTIsMTAxLDExNCwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwKLSAgICAxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsCi0gICAgNDAsMSwwLDAsMCwxMTcsOSwwLDAsMCw5NSw5NSw5OSwxMDgsOTcsMTE1LAotICAgIDExNSw5NSw5NSw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsMTA4LAotICAgIDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMjQ5LDMsMCwwLDExNSwyLAotICAgIDAsMCwwLDAsNSwxMTcsMjIsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDQ2LDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLAotICAgIDAsNjcsMCwwLDAsMTE1LDcsMCwwLDAsMTI0LDAsMCwxMDYsMCwwLAotICAgIDgzLDQwLDEsMCwwLDAsMTE3LDU4LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwKLSAgICAxMTAsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LDExMSwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMTUsMTExLDExNywxMTQsOTksMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiw5NywxMTUsCi0gICAgMzIsMTAyLDExMSwxMTcsMTEwLDEwMCwzMiw5OCwxMjEsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwKLSAgICAxMTAsMTAwLDEwMSwxMTQsNDYsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsCi0gICAgOTcsMTE2LDEwNCw0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsMTAzLAotICAgIDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDAsNCwwLDAsMTE1LAotICAgIDIsMCwwLDAsMCwzLDExNywyMywwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywKLSAgICAxMDksMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDgsCi0gICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQxLDAsMCwwLDExNiwwLDAsMTA2LAotICAgIDEsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwxNDMsMTcsMCwxMjUsMiwKLSAgICAwLDEyNCwyLDAsMTA2LDIsMCwxMzEsMCwwLDgzLDg3LDEwMCwyLDAsODEsCi0gICAgODgsMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywzOSwwLDAsMCw4MiwKLSAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwMCw5NywxMTYsOTcsMzIsMTAyLAotICAgIDExNCwxMTEsMTA5LDMyLDExMiw5NywxMTYsMTA0LDMyLDk3LDExNSwzMiwxMTQsOTcsMTE5LDMyLAotICAgIDk4LDEyMSwxMTYsMTAxLDExNSw0NiwxMTcsMSwwLDAsMCwxMTQsNzgsNDAsMywwLAotICAgIDAsMCwxMTcsMywwLDAsMCw5NSwxMDUsMTExLDExNyw2LDAsMCwwLDcwLAotICAgIDEwNSwxMDgsMTAxLDczLDc5LDExNyw0LDAsMCwwLDExNCwxMDEsOTcsMTAwLDQwLDMsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwKLSAgICAwLDExMiw5NywxMTYsMTA0LDExNyw0LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw0MCwwLAotICAgIDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsCi0gICAgMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsCi0gICAgOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDEwMywKLSAgICAxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNSw0LDAsMCwxMTUsNCwwLDAsMCwKLSAgICAwLDIsMjEsMSwxMTcsMTksMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDEwMCw5NywxMTYsOTcsNDAsOSwwLDAsCi0gICAgMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsCi0gICAgMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LAotICAgIDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywxMSwwLDAsMCw5NSw5OSwxMDQsMTAxLAotICAgIDk5LDEwNyw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEyLDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiwKLSAgICA5NSwxMDAsOTcsMTE2LDk3LDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LAotICAgIDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDEsCi0gICAgMCwwLDAsMTE3LDksMCwwLDAsOTUsOTUsOTksMTA4LDk3LDExNSwxMTUsOTUsCi0gICAgOTUsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxMCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAotICAgIDEwMSwxMTQsMjM4LDMsMCwwLDExNSwxMCwwLDAsMCwxNiwzLDYsMiwxMiwKLSAgICA2LDI0LDcsMTgsNSwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLAotICAgIDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDQsMCwwLDAsNjYsMCwwLDAsMTE1LDY4LDAsMCwwLDEyNCwwLAotICAgIDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsCi0gICAgMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLAotICAgIDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwwLDEwMCwKLSAgICA3LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwwLDEsOTAsNiwwLDEwMCwxMCwKLSAgICAwLDgzLDQwLDExLDAsMCwwLDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw2MiwwLDAsCi0gICAgMCw2NywxMTEsMTEwLDk5LDExNCwxMDEsMTE2LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwKLSAgICAxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiw4MywxMTEsMTE3LDExNCwKLSAgICA5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LAotICAgIDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDQ2LDk5LAotICAgIDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDM5LDAsMCwwLDExNiwwLDAsMTA2LDEsMCwxMjQsCi0gICAgMSwwLDEzMSwxLDAsMTI1LDIsMCwxMDUsMiwwLDEyNCwyLDAsMTA2LDIsCi0gICAgMCwxMDAsMSwwLDU0LDEyNCwyLDAsMTA2LDMsMCwxMDAsMiwwLDU0LDgzLAotICAgIDQwLDMsMCwwLDAsMTE3LDMzLDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDEwMSwxMTYsOTcsMTAwLDk3LDExNiw5NywzMiwxMDIsMTExLAotICAgIDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCw0NiwxMTcsNSwwLDAsMCwKLSAgICAxMDksMTE2LDEwNSwxMDksMTAxLDExNyw0LDAsMCwwLDExNSwxMDUsMTIyLDEwMSw0MCw0LAotICAgIDAsMCwwLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsCi0gICAgMTE1LDExNiw5NywxMTYsMTE3LDgsMCwwLDAsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwxMDksCi0gICAgMTAxLDExNyw3LDAsMCwwLDExNSwxMTYsOTUsMTE1LDEwNSwxMjIsMTAxLDQwLDMsMCwKLSAgICAwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDExNywyLDAsMCwwLDExNSwxMTYsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTE1LDExNiw5NywxMTYsMTE1LDE1LDQsMCwwLDExNSw0LDAsMCwwLDAsCi0gICAgMiwxNSwxLDExNywyNywwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LAotICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsCi0gICAgOTcsMTE2LDExNSw5OSw0LDAsMCwwLDAsMCwwLDAsNSwwLDAsMCwKLSAgICAxMywwLDAsMCw2NywwLDAsMCwxMTUsODEsMCwwLDAsMTIxLDIyLDAsCi0gICAgMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsMCwxMDYsMiwwLDEyNSwKLSAgICA0LDAsODcsMTEwLDI0LDAsNCwxMTYsMywwLDEwNywxMCwwLDExNCw0OCwwLAotICAgIDEsMSwxLDEwMCwxLDAsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDEyNCw0LAotICAgIDAsMTAwLDIsMCw3OSwxMjUsNCwwLDEyNCwwLDAsMTA2LDQsMCwxMjQsMiwKLSAgICAwLDEyNCwzLDAsMTAwLDMsMCwxMjQsNCwwLDEzMSwyLDEsODMsNDAsNCwKLSAgICAwLDAsMCw3OCwxMDUsMTgyLDEsMCwwLDEwNSwxMjgsMCwwLDAsMTE3LDUsCi0gICAgMCwwLDAsOTUsMTA5LDExMSwxMDAsMTAxLDQwLDUsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsOTUsMTExLDExNSwxMTcsNCwwLDAsMCwxMTUsMTE2LDk3LDExNiwxMTcsNywKLSAgICAwLDAsMCwxMTUsMTE2LDk1LDEwOSwxMTEsMTAwLDEwMSwxMTcsNywwLDAsMCw3OSwKLSAgICA4Myw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDgsMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTAwLAotICAgIDk3LDExNiw5Nyw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LAotICAgIDEwMiwxMTcsMTEsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMTMsMCwwLDAsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LDExNiw5NywxMTcsNCwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywKLSAgICAyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiwKLSAgICA2MiwxMTcsMTUsMCwwLDAsOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LAotICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwyMCw0LDAsMCwxMTUsMTIsMCwwLDAsMCwyLAotICAgIDMsMSwyMiwxLDEzLDEsMTEsMywxMCwxLDExNywzMiwwLDAsMCw4MywKLSAgICAxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDk5LDk3LDk5LDEwNCwxMDEsOTUsOTgsMTIxLDExNiwxMDEsOTksMTExLDEwMCwxMDEsMTE3LAotICAgIDUsMCwwLDAsOTUsMTA5LDExMSwxMDAsMTAxLDEwNSwxODIsMSwwLDAsOTksMywKLSAgICAwLDAsMCwxLDAsMCwwLDksMCwwLDAsMTgsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDUzLDEsMCwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwKLSAgICAwLDkyLDIsMCwxMjUsNCwwLDEyNSw1LDAsMTAzLDAsMCwxMjUsNiwwLAotICAgIDEyMCw1NCwwLDEyNCw0LDAsMTE0LDgwLDAsMTE2LDEsMCwxMjQsNCwwLDEzMSwKLSAgICAxLDAsMTIsMTE0LDgwLDAsMTE2LDAsMCwxMjQsNCwwLDEzMSwxLDAsOTIsCi0gICAgMiwwLDEyNSw0LDAsMTI1LDcsMCwxMjQsNiwwLDEwNiwyLDAsMTI0LDcsCi0gICAgMCwxMzEsMSwwLDEsMTEzLDI3LDAsODcsMTIwLDEzMiwwLDExNiwzLDAsMTI0LAotICAgIDYsMCwxMzEsMSwwLDY4LDkzLDExOCwwLDEyNSw3LDAsMTE2LDQsMCwxMjQsCi0gICAgNCwwLDEyNCw3LDAsMTMxLDIsMCwxMjUsNCwwLDEyMSwxNywwLDExNiw1LAotICAgIDAsMTA2LDYsMCwxMjQsNCwwLDEzMSwxLDAsMSw4NywxMTMsOTQsMCw0LAotICAgIDExNiw3LDAsMTA3LDEwLDAsMTE0LDE1NSwwLDEsMSwxLDExOSw5NCwwLDg5LAotICAgIDExMyw5NCwwLDQsMTE2LDgsMCwxMDcsMTAsMCwxMTQsMjExLDAsMSwxMjUsOCwKLSAgICAwLDEsMTIyLDI1LDAsMTE2LDksMCwxMDAsMSwwLDEyNCw0LDAsMTI0LDgsCi0gICAgMCwxMzEsMywwLDEsMTAwLDIsMCw4Myw4Nyw4OSwxMDAsMiwwLDEwMCwyLAotICAgIDAsMTI1LDgsMCwxMjYsOCwwLDg4LDExMyw5NCwwLDg4LDExMyw5NCwwLDg3LAotICAgIDEyMSwzMywwLDExNiwxMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwKLSAgICAzLDAsMSwxMTYsOSwwLDEwMCwzLDAsMTI0LDEsMCwxMzEsMiwwLDEsCi0gICAgODcsMTEwLDUzLDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCw0OCwxLDEsMTI1LAotICAgIDgsMCwxLDEyMiwyMSwwLDExNiw5LDAsMTAwLDEsMCwxMjQsMSwwLDEyNCwKLSAgICA4LDAsMTMxLDMsMCwxLDg3LDg5LDEwMCwyLDAsMTAwLDIsMCwxMjUsOCwKLSAgICAwLDEyNiw4LDAsODgsMTEwLDEsMCw4OCwxMDAsMiwwLDgzLDQwLDQsMCwKLSAgICAwLDAsMTE3LDI3LDAsMCwwLDg3LDExNCwxMDUsMTE2LDEwMSwzMiw5OCwxMjEsMTE2LAotICAgIDEwMSwxMTUsMzIsMTAwLDk3LDExNiw5NywzMiwxMTYsMTExLDMyLDk3LDMyLDEwMiwxMDUsMTA4LAotICAgIDEwMSw0NiwxMTcsMjcsMCwwLDAsOTksMTExLDExNywxMDgsMTAwLDMyLDExMCwxMTEsMTE2LAotICAgIDMyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwzMiwxMjMsMzMsMTE0LDEyNSw1OCwzMiwxMjMsMzMsCi0gICAgMTE0LDEyNSw3OCwxMTcsMTIsMCwwLDAsOTksMTE0LDEwMSw5NywxMTYsMTAxLDEwMCwzMiwKLSAgICAxMjMsMzMsMTE0LDEyNSw0MCwxMSwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsNiwwLDAsMCw5NywxMTIsCi0gICAgMTEyLDEwMSwxMTAsMTAwLDExNyw4LDAsMCwwLDExNCwxMDEsMTE4LDEwMSwxMTQsMTE1LDEwMSwKLSAgICAxMDAsMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwKLSAgICAxMTcsMywwLDAsMCw5NSwxMTEsMTE1LDExNyw1LDAsMCwwLDEwOSwxMDcsMTAwLAotICAgIDEwNSwxMTQsMTE3LDE1LDAsMCwwLDcwLDEwNSwxMDgsMTAxLDY5LDEyMCwxMDUsMTE1LDExNiwKLSAgICAxMTUsNjksMTE0LDExNCwxMTEsMTE0LDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsCi0gICAgMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDEzLDAsMCwwLDk1LDExOSwxMTQsMTA1LAotICAgIDExNiwxMDEsOTUsOTcsMTE2LDExMSwxMDksMTA1LDk5LDQwLDksMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDExNyw0LDAsMCwwLDEwMCw5NywxMTYsOTcsMTE3LDUsMCwwLDAsOTUsMTA5LAotICAgIDExMSwxMDAsMTAxLDExNyw2LDAsMCwwLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMTE3LDgsCi0gICAgMCwwLDAsMTAyLDEwNSwxMDgsMTAxLDExMCw5NywxMDksMTAxLDExNywxMCwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMTIsOTcsMTE0LDExNiwxMTUsMTE3LDQsMCwwLDAsMTEyLAotICAgIDk3LDExNCwxMTYsMTE3LDMsMCwwLDAsMTAxLDEyMCw5OSw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDExNSwxMDEsMTE2LDk1LAotICAgIDEwMCw5NywxMTYsOTcsMzEsNCwwLDAsMTE1LDM4LDAsMCwwLDAsMiwxOCwKLSAgICAxLDYsMiwyMiwxLDE4LDEsMTcsMiwxOSwxLDE1LDEsMywxLDE3LAotICAgIDEsMTMsMiw3LDEsMTgsMywxNiwxLDI3LDEsMywxLDE2LDEsMTcsCi0gICAgMSwxOCwyLDExNywyNSwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LAorICAgIDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsCisgICAgMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEwMCw4LDAsMTAwLAorICAgIDksMCwxMzIsMCwxLDkwLDYsMCwxMDAsMTAsMCw4Myw0MSwxMSwxMTQsOSwKKyAgICAxLDAsMCwxMjIsNjIsNjcsMTExLDExMCw5OSwxMTQsMTAxLDExNiwxMDEsMzIsMTA1LDEwOSwKKyAgICAxMTIsMTA4LDEwMSwxMDksMTAxLDExMCwxMTYsOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExMSwxMDIsMzIsCisgICAgODMsMTExLDExNywxMTQsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMTcsMTE1LDEwNSwKKyAgICAxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsCisgICAgMTAxLDEwOSw0Niw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwKKyAgICAzLDAsMCwwLDY3LDAsMCwwLDExNSwzNiwwLDAsMCwxMTYsMCwwLAorICAgIDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEwNSwyLDAsMTI0LDIsMCwxMDYsCisgICAgMSwwLDEwMCwxLDAsNTQsMTI0LDIsMCwxMDYsMiwwLDEwMCwyLDAsNTQsCisgICAgODMsNDEsMywxMjIsMzMsODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTAxLDExNiw5NywxMDAsOTcsMTE2LDk3LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExMiw5NywxMTYsMTA0LDQ2LDExNCwxODQsMCwwLDAsMTE0LDE4NSwwLDAsMCwKKyAgICA0MSwzLDExNCwzOSwwLDAsMCwyMTgsOCwxMTUsMTE2LDk1LDEwOSwxMTYsMTA1LDEwOSwKKyAgICAxMDEsOTAsNywxMTUsMTE2LDk1LDExNSwxMDUsMTIyLDEwMSw0MSwzLDExNCw3MSwwLDAsCisgICAgMCwxMTQsMzUsMCwwLDAsMTE0LDQ3LDEsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwzNywxLDAsMCw5NSwKKyAgICA2LDAsMCwxMTUsNCwwLDAsMCwwLDIsMTIsMSwxMjIsMjcsODMsMTExLAorICAgIDExNywxMTQsOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMTIsCisgICAgOTcsMTE2LDEwNCw5NSwxMTUsMTE2LDk3LDExNiwxMTUsOTksNCwwLDAsMCwwLDAsCisgICAgMCwwLDUsMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMzQsCisgICAgMCwwLDAsMTE2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDQsMCwxMjQsCisgICAgMCwwLDEwNiwxLDAsMTI0LDIsMCwxMjQsMywwLDEwMCwxLDAsMTI0LDQsCisgICAgMCwxMzEsMiwxLDgzLDQxLDIsNzgsMjE4LDUsOTUsMTA5LDExMSwxMDAsMTAxLDQxLAorICAgIDIsMTE0LDE0NSwwLDAsMCwxMTQsMzgsMSwwLDAsNDEsNSwxMTQsNzEsMCwKKyAgICAwLDAsMTE0LDE0MiwwLDAsMCwxMTQsMTQxLDAsMCwwLDExNCw1MywwLDAsCisgICAgMCwxMTQsNDIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDM5LDEsMCwwLDEwMCw2LDAsMCwxMTUsNCwKKyAgICAwLDAsMCwwLDIsMTIsMSwxMjIsMzIsODMsMTExLDExNywxMTQsOTksMTAxLDcwLAorICAgIDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5OSw5Nyw5OSwxMDQsMTAxLAorICAgIDk1LDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDExNCw1NSwxLDAsMCwxMDUsMTgyLAorICAgIDEsMCwwLDk5LDMsMCwwLDAsMSwwLDAsMCw5LDAsMCwwLAorICAgIDE3LDAsMCwwLDY3LDAsMCwwLDExNSw1MywxLDAsMCwxMTYsMCwwLAorICAgIDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDQsMCwxMjUsNSwwLDEwMywKKyAgICAwLDAsMTI1LDYsMCwxMjAsNTQsMCwxMjQsNCwwLDExNCw4MCwwLDExNiwxLAorICAgIDAsMTI0LDQsMCwxMzEsMSwwLDEyLDExNCw4MCwwLDExNiwwLDAsMTI0LDQsCisgICAgMCwxMzEsMSwwLDkyLDIsMCwxMjUsNCwwLDEyNSw3LDAsMTI0LDYsMCwKKyAgICAxMDYsMiwwLDEyNCw3LDAsMTMxLDEsMCwxLDExMywyNywwLDg3LDEyMCwxMzIsCisgICAgMCwxMTYsMywwLDEyNCw2LDAsMTMxLDEsMCw2OCw5MywxMTgsMCwxMjUsNywKKyAgICAwLDExNiw0LDAsMTI0LDQsMCwxMjQsNywwLDEzMSwyLDAsMTI1LDQsMCwKKyAgICAxMjEsMTcsMCwxMTYsNSwwLDEwNiw2LDAsMTI0LDQsMCwxMzEsMSwwLDEsCisgICAgODcsMTEzLDk0LDAsNCwxMTYsNywwLDEwNywxMCwwLDExNCwxNTUsMCwxLDEsCisgICAgMSwxMTksOTQsMCw4OSwxMTMsOTQsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LAorICAgIDIxMSwwLDEsMTI1LDgsMCwxLDEyMiwyNSwwLDExNiw5LDAsMTAwLDEsMCwKKyAgICAxMjQsNCwwLDEyNCw4LDAsMTMxLDMsMCwxLDEwMCwyLDAsODMsODcsODksCisgICAgMTAwLDIsMCwxMDAsMiwwLDEyNSw4LDAsMTI2LDgsMCw4OCwxMTMsOTQsMCwKKyAgICA4OCwxMTMsOTQsMCw4NywxMjEsMzMsMCwxMTYsMTAsMCwxMjQsMSwwLDEyNCwyLAorICAgIDAsMTI0LDMsMCwxMzEsMywwLDEsMTE2LDksMCwxMDAsMywwLDEyNCwxLAorICAgIDAsMTMxLDIsMCwxLDg3LDExMCw1MywwLDQsMTE2LDgsMCwxMDcsMTAsMCwKKyAgICAxMTQsNDgsMSwxLDEyNSw4LDAsMSwxMjIsMjEsMCwxMTYsOSwwLDEwMCwxLAorICAgIDAsMTI0LDEsMCwxMjQsOCwwLDEzMSwzLDAsMSw4Nyw4OSwxMDAsMiwwLAorICAgIDEwMCwyLDAsMTI1LDgsMCwxMjYsOCwwLDg4LDExMCwxLDAsODgsMTAwLDIsCisgICAgMCw4Myw0MSw0LDEyMiwyNyw4NywxMTQsMTA1LDExNiwxMDEsMzIsOTgsMTIxLDExNiwxMDEsCisgICAgMTE1LDMyLDEwMCw5NywxMTYsOTcsMzIsMTE2LDExMSwzMiw5NywzMiwxMDIsMTA1LDEwOCwxMDEsCisgICAgNDYsMTIyLDI3LDk5LDExMSwxMTcsMTA4LDEwMCwzMiwxMTAsMTExLDExNiwzMiw5OSwxMTQsMTAxLAorICAgIDk3LDExNiwxMDEsMzIsMTIzLDMzLDExNCwxMjUsNTgsMzIsMTIzLDMzLDExNCwxMjUsNzgsMTIyLAorICAgIDEyLDk5LDExNCwxMDEsOTcsMTE2LDEwMSwxMDAsMzIsMTIzLDMzLDExNCwxMjUsNDEsMTEsMTE0LAorICAgIDM4LDAsMCwwLDExNCw0NiwwLDAsMCwxMTQsMjI0LDAsMCwwLDExNCwzMywKKyAgICAwLDAsMCwxMTQsMjgsMCwwLDAsMTE0LDMsMCwwLDAsOTAsNSwxMDksCisgICAgMTA3LDEwMCwxMDUsMTE0LDIxOCwxNSw3MCwxMDUsMTA4LDEwMSw2OSwxMjAsMTA1LDExNSwxMTYsMTE1LAorICAgIDY5LDExNCwxMTQsMTExLDExNCwxMTQsNDAsMCwwLDAsMTE0LDE1MywwLDAsMCwxMTQsCisgICAgNTUsMCwwLDAsNDEsOSwxMTQsNzEsMCwwLDAsMTE0LDM1LDAsMCwwLAorICAgIDExNCw1MywwLDAsMCwxMTQsNTUsMSwwLDAsMTE0LDIzNCwwLDAsMCwxMTQsCisgICAgMTMxLDAsMCwwLDExNCwyNywwLDAsMCwxMTQsMjMsMCwwLDAsMTE0LDQxLAorICAgIDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDExNCwzOCwxLDAsMCwxMDUsNiwwLDAsMTE1LDM4LDAsMCwwLAorICAgIDAsMiwxOCwxLDYsMiwyMiwxLDE4LDEsMTcsMiwxOSwxLDE1LDEsCisgICAgMywxLDE3LDEsMTMsMiw3LDEsMTgsMywxNiwxLDI3LDEsMywxLAorICAgIDE2LDEsMTcsMSwxOCwyLDEyMiwyNSw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LAogICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDExNSwxMDEsMTE2LDk1LDEwMCw5NywxMTYsCi0gICAgOTcsNzgsNDAsNywwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywKLSAgICAxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsCi0gICAgMTE3LDEwLDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDExNSwxMTYsOTcsMTE2LDExNSwxMTcsCi0gICAgMTUsMCwwLDAsOTUsOTksOTcsOTksMTA0LDEwMSw5NSw5OCwxMjEsMTE2LDEwMSw5OSwKLSAgICAxMTEsMTAwLDEwMSwxMTcsOCwwLDAsMCwxMTUsMTAxLDExNiw5NSwxMDAsOTcsMTE2LDk3LAotICAgIDQwLDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsCi0gICAgMTA4LDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExLDQsMCwwLDExNSw4LDAsMCwwLDE2LDIsCi0gICAgNiwyLDEyLDUsMTIsMTEsMTE3LDE2LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwKLSAgICAwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NiwwLDAsMCwKLSAgICAxMTUsNjIsMCwwLDAsMTI0LDAsMCw2OSwxMDEsMCwwLDkwLDEsMCwxMDAsCi0gICAgMCwwLDkwLDIsMCwxMDAsMSwwLDkwLDMsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgOTAsNSwwLDEwMCw2LDAsMTAwLDcsMCwxMzIsMCwwLDkwLDYsMCwxMDAsCi0gICAgOCwwLDgzLDQwLDksMCwwLDAsMTE3LDIwLDAsMCwwLDgzLDExMSwxMTcsCi0gICAgMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNyw0NSwwLDAsMCw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTE5LDEwNCwxMDUsCi0gICAgOTksMTA0LDMyLDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsMTE1LDMyLDExNSwxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsMTA4LDEwMSwxMTUsMTE1LDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMTUsNDYsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCi0gICAgNCwwLDAsMCw2NywwLDAsMCwxMTUsMTksMCwwLDAsMTI0LDAsMCwKLSAgICAxMDYsMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDAsMiwwLDEzMSwxLDEsODMsCi0gICAgNDAsMywwLDAsMCw3OCwxMTcsMTAsMCwwLDAsMTE1LDExMSwxMTcsMTE0LDk5LAotICAgIDEwMSwxMDgsMTAxLDExNSwxMTUsODQsNDAsMiwwLDAsMCwxMTcsMTIsMCwwLDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLAotICAgIDAsODQsMTE0LDExNywxMDEsNDAsMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsCi0gICAgMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsMCwKLSAgICAwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDY0LDQsMCwwLAotICAgIDExNSwyLDAsMCwwLDAsMSwxMTcsMzIsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNDYsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDYsMCwwLDAsNiwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsMTM4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTI1LDIsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwKLSAgICAwLDEyNSwzLDAsMTI0LDAsMCwxMDYsMiwwLDEyNCwxLDAsMTI0LDMsMCwKLSAgICAxMjQsMiwwLDEwMCwwLDAsMTMxLDQsMCwxMjUsNCwwLDExNiw0LDAsMTA2LAotICAgIDUsMCwxMjQsNCwwLDEzMSwxLDAsMTI1LDUsMCwxMTYsNiwwLDEyNCw1LAotICAgIDAsMTE2LDcsMCwxMzEsMiwwLDExNCwxMDEsMCwxMTYsOCwwLDEwMCwxLDAsCi0gICAgMTI0LDIsMCwxMzEsMiwwLDEsMTI0LDUsMCw4MywxMTYsOSwwLDEwMCwyLAotICAgIDAsMTA2LDEwLDAsMTI0LDIsMCwxMzEsMSwwLDEwMCwzLDAsMTI0LDEsMCwKLSAgICAxMDAsNCwwLDEyNCwyLDAsMTMxLDEsMiwxMzAsMSwwLDEwMCwwLDAsODMsCi0gICAgNDAsNSwwLDAsMCw3OCwxMTcsMjEsMCwwLDAsOTksMTExLDEwMCwxMDEsMzIsCi0gICAgMTExLDk4LDEwNiwxMDEsOTksMTE2LDMyLDEwMiwxMTQsMTExLDEwOSwzMiwxMjMsMzMsMTE0LDEyNSwKLSAgICAxMTcsMjEsMCwwLDAsNzgsMTExLDExMCw0NSw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsCi0gICAgMTA2LDEwMSw5OSwxMTYsMzIsMTA1LDExMCwzMiwxMjMsMTI1LDExNyw0LDAsMCwwLDExMCwKLSAgICA5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDExLDAsMCwKLSAgICAwLDExNywxMiwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTAwLDk3LDExNiw5NywxMTcsCi0gICAgMjAsMCwwLDAsOTUsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMiwxMTQsMTExLDEwOSw5NSwKLSAgICA5OCwxMjEsMTE2LDEwMSw5OSwxMTEsMTAwLDEwMSwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLAotICAgIDEwMSwxMTcsNywwLDAsMCwxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDExNyw1LDAsCi0gICAgMCwwLDEwOCwxMTEsOTcsMTAwLDExNSwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLAotICAgIDExNSwxMTYsOTcsMTEwLDk5LDEwMSwxMTcsMTAsMCwwLDAsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgOTUsMTE2LDEyMSwxMTIsMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsCi0gICAgMTE1LDEwMSw5NSwxMDksMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsMTEsMCwwLDAsNzMsCi0gICAgMTA5LDExMiwxMTEsMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDYsMCwwLDAsMTAyLAotICAgIDExMSwxMTQsMTA5LDk3LDExNiw0MCw2LDAsMCwwLDExNyw0LDAsMCwwLDExNSwKLSAgICAxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsCi0gICAgMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDQsMCwwLDAsMTAwLDk3LAotICAgIDExNiw5NywxMTcsMTAsMCwwLDAsOTgsMTIxLDExNiwxMDEsMTE1LDk1LDEwMCw5NywxMTYsCi0gICAgOTcsMTE3LDUsMCwwLDAsMTAyLDExMSwxMTcsMTEwLDEwMCw0MCwwLDAsMCwwLAotICAgIDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwKLSAgICAxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LAotICAgIDk5LDExMSwxMDAsMTAxLDY3LDQsMCwwLDExNSwxOCwwLDAsMCwwLDEsMTUsCi0gICAgMSwxNSwxLDI0LDEsMTUsMSwxNSwxLDEzLDEsNCwyLDE4LDEsMTE3LAotICAgIDI5LDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsMTA1LAorICAgIDk3LDc4LDQxLDcsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsCisgICAgMCwwLDAsMTE0LDU5LDAsMCwwLDExNCwzNywxLDAsMCwxMTQsMzksMSwKKyAgICAwLDAsMTE0LDM4LDEsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw5LDEsMCwwLAorICAgIDkxLDYsMCwwLDExNSw4LDAsMCwwLDEyLDIsNiwyLDEyLDUsMTIsCisgICAgNSwxMTQsOSwxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSw0NiwwLDAsMCwKKyAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAorICAgIDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAwLDQsCisgICAgMCwxMDAsNSwwLDEzMiwwLDAsOTAsNSwwLDEwMCw2LDAsODMsNDEsNywKKyAgICAxMTQsOCwxLDAsMCwxMjIsNDUsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDMyLDExOSwxMDQsCisgICAgMTA1LDk5LDEwNCwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDExNSwzMiwxMTUsMTExLDExNywxMTQsCisgICAgOTksMTAxLDEwOCwxMDEsMTE1LDExNSwzMiwxMDIsMTA1LDEwOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsMTE1LDQ2LDk5LDIsMCwwLDAsMCwwLDAsMCw1LDAsMCwKKyAgICAwLDYsMCwwLDAsNjcsMCwwLDAsMTE1LDc2LDAsMCwwLDEyNCwwLAorICAgIDAsMTA2LDAsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsMCwwLAorICAgIDEwNiwxLDAsMTI0LDIsMCwxMzEsMSwwLDEyNSwzLDAsMTE2LDIsMCwxMjQsCisgICAgMywwLDEwMCwxLDAsMTI0LDEsMCwxMDAsMiwwLDEyNCwyLDAsMTMxLDEsCisgICAgMiwxMjUsNCwwLDExNiwzLDAsMTI0LDQsMCwxMDAsMSwwLDEyNCwxLDAsCisgICAgMTAwLDMsMCwxMjQsMiwwLDEzMSwxLDIsODMsNDEsNCw3OCwxMTQsNjcsMCwKKyAgICAwLDAsMTE0LDM1LDAsMCwwLDExNCwxNDEsMCwwLDAsNDEsNCwxMTQsMjM5LAorICAgIDAsMCwwLDExNCw0MCwxLDAsMCwxMTQsMTkxLDAsMCwwLDExNCwxOTYsMCwKKyAgICAwLDAsNDEsNSwxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsCisgICAgMCwwLDAsMTE0LDUzLDAsMCwwLDExNCw0OCwxLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTYsMSwwLAorICAgIDAsMTM4LDYsMCwwLDExNSw4LDAsMCwwLDAsMSwxNSwxLDE1LDEsCisgICAgMjQsMSwxMjIsMjksODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCiAgICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwKICAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQwLAotICAgIDIsMCwwLDAsMTE3LDM5LDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsCi0gICAgNzgsMTExLDExMCwxMDEsMzIsOTcsMTE1LDMyLDExNiwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDExNSwKLSAgICAzMiwxMTAsMTExLDMyLDExNSwxMTEsMTE3LDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsCi0gICAgNzgsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwKLSAgICAyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLAotICAgIDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LAotICAgIDExMSwxMTcsMTE0LDk5LDEwMSw3OSw0LDAsMCwxMTUsMiwwLDAsMCwwLDIsCi0gICAgMTE3LDMxLDAsMCwwLDgzLDExMSwxMTcsMTE0LDk5LDEwMSwxMDgsMTAxLDExNSwxMTUsNzAsCi0gICAgMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsNzgsNDAsNywwLDAsMCwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsCi0gICAgMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsCi0gICAgOTksOTUsOTUsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNyw4LDAsMCwwLDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLAotICAgIDExNywxMCwwLDAsMCwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDQwLAotICAgIDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAyMCwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwKLSAgICAxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw2MCw0LDAsMCwxMTUsOCwwLDAsCi0gICAgMCwxNiwyLDYsMiwxMiwzLDEyLDEyLDExNywyMCwwLDAsMCw4MywxMTEsCi0gICAgMTE3LDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsCi0gICAgMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw1LAotICAgIDAsMCwwLDY2LDAsMCwwLDExNSwxMDQsMCwwLDAsMTI0LDAsMCw2OSwKLSAgICAxMDEsMCwwLDkwLDEsMCwxMDAsMCwwLDkwLDIsMCwxMDAsMSwwLDkwLAotICAgIDMsMCwxMDAsMiwwLDEwMCwzLDAsMTMyLDAsMCw5MCw0LDAsMTAxLDUsCi0gICAgMCwxMDEsNiwwLDEwMSw3LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLDAsCi0gICAgMTMxLDEsMCwxMzEsMSwwLDEzMSwxLDAsOTAsOCwwLDEwMCw2LDAsMTAwLAotICAgIDcsMCwxMzIsMCwwLDkwLDksMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsCi0gICAgMCw5MCwxMCwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsMTEsMCwKLSAgICAxMDAsMTIsMCw4Myw0MCwxMywwLDAsMCwxMTcsMTksMCwwLDAsNjksMTIwLAotICAgIDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsMTE3LDkzLDAsMCwwLDc2LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwKLSAgICAzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwMSwzMiw5OSwxMTEsMTEwLAotICAgIDExNSwxMTYsMTE0LDExNyw5OSwxMTYsMTExLDExNCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwKLSAgICAxMDMsMTEwLDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMTksMTExLDExNCwxMDcsMzIsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDMyLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsCi0gICAgMzIsMzIsMzIsOTksMywwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCi0gICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTI0LDEsMCwKLSAgICAxMjQsMCwwLDk1LDAsMCwxMjQsMiwwLDEyNCwwLDAsOTUsMSwwLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwyLDAsMCwwLDExNyw0LAotICAgIDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw0LAotICAgIDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk2LDQsMCwwLDExNSw0LDAsCi0gICAgMCwwLDAsMSw5LDEsMTE3LDI4LDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwKLSAgICAxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LAotICAgIDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw5OSwyLDAsMCwwLDAsMCwwLDAsCi0gICAgNCwwLDAsMCwxMCwwLDAsMCw2NywwLDAsMCwxMTUsMTc1LDAsMCwKLSAgICAwLDEyNCwxLDAsMTE2LDAsMCwxMDYsMSwwLDEwNyw2LDAsMTI1LDIsMCwKLSAgICAxMjEsMTA3LDAsMTE2LDIsMCwxMTYsMywwLDEwNiw0LDAsMTI0LDEsMCwxMjQsCi0gICAgMCwwLDEwNiw1LDAsMTMxLDMsMCwxMjUsMywwLDExNiw2LDAsMTAwLDEsCi0gICAgMCwxMjQsMCwwLDEwNiw1LDAsMTMxLDIsMCwxLDEyNCwwLDAsMTA2LDcsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTE0LDExNywwLDExNiw4LDAsMTI0LDMsMCwKLSAgICAxMDAsMiwwLDEzMSwyLDAsMTIsMTE0LDExNywwLDExNiw5LDAsMTI0LDAsMCwKLSAgICAxMDYsNSwwLDEzMSwxLDAsMTAwLDMsMCwyNSwxMDMsMSwwLDEyNCwzLDAsCi0gICAgOTUsMTAsMCwxMTAsMCwwLDEyNCwzLDAsODMsODcsMTEwLDQ2LDAsMSwxLAotICAgIDEsMTI0LDIsMCwxMiwxMTQsMTYzLDAsMTI0LDEsMCwxMTYsMCwwLDEwNiwxLAotICAgIDAsMTA3LDYsMCwxMTQsMTYzLDAsMTE2LDAsMCwxMDYsMSwwLDEyNCwxLDAsCi0gICAgNjEsMTEwLDAsMCwxMzAsMCwwLDg5LDExMCwxLDAsODgsMTAwLDQsMCw4MywKLSAgICA0MCw1LDAsMCwwLDExNywyNSwwLDAsMCw3NiwxMTEsOTcsMTAwLDMyLDk3LAotICAgIDExMCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSw0NiwxMTcsMzMsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKLSAgICAxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwKLSAgICAxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsMTE3LDgsMCwwLDAsOTUsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsOTUsMTA1LDAsMCwwLDAsNzgsNDAsMTEsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLDAsMTA5LDExMSwKLSAgICAxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywyNSwwLDAsMCw5NSw5OSw5NywxMDgsMTA4LDk1LAotICAgIDExOSwxMDUsMTE2LDEwNCw5NSwxMDIsMTE0LDk3LDEwOSwxMDEsMTE1LDk1LDExNCwxMDEsMTA5LDExMSwKLSAgICAxMTgsMTAxLDEwMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsOTUsMTAwLDEyMSwxMTAsOTcsMTA5LDEwNSw5OSwxMTcsNCwwLAotICAgIDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMTYsMCwwLDAsOTUsMTE4LDEwMSwxMTQsOTgsCi0gICAgMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLAotICAgIDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNyw3LDAsMCwwLDEwNCwKLSAgICA5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDExNSwxMTIsMTA4LDEwNSwxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsOTUsNDAsNCwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwKLSAgICAxMDIsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDExNyw5LAotICAgIDAsMCwwLDEwNSwxMTUsOTUsMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwwLAotICAgIDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsCi0gICAgOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDgsMTExLDk3LDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMDAsNCwwLDAsMTE1LDI0LDAsMCwwLDAsNSwxNSwxLAotICAgIDMsMSw5LDEsMTUsMSwxNiwxLDMxLDEsMjgsMSw4LDEsMywxLAotICAgIDIyLDEsMTMsMSwxMTcsMzEsMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsCi0gICAgMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA4LDExMSw5NywKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMiwwLDAsMCwwLDAsMCwKLSAgICAwLDIsMCwwLDAsNCwwLDAsMCwzLDAsMCwwLDExNSw0OCwwLAotICAgIDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwwLDEwMCwxLAotICAgIDAsMjUsMTM3LDAsMCwxMTYsMiwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsMiwKLSAgICAwLDEwMCwzLDAsMTM0LDAsMCwxMTYsMywwLDY4LDEzMSwxLDAsMTMxLDEsCi0gICAgMCw4Myw0MCw0LDAsMCwwLDExNyw0OSwwLDAsMCw4MiwxMDEsMTE2LDExNywKLSAgICAxMTQsMTEwLDMyLDg0LDExNCwxMTcsMTAxLDMyLDEwNSwxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTAxLAotICAgIDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCi0gICAgMTA1LDExNSwzMiw5NywzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsMTA1LDEsMCwKLSAgICAwLDAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwKLSAgICAwLDAsMCw1MSwwLDAsMCwxMTUsMzEsMCwwLDAsMTI0LDAsMCw5MywKLSAgICAyMSwwLDEyNSwxLDAsMTM2LDAsMCwxMDAsMCwwLDEyNCwxLDAsMjMsMTA3LAotICAgIDIsMCw4NiwxLDExMywzLDAsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw3OCw0MCwwLAotICAgIDAsMCwwLDQwLDIsMCwwLDAsMTE3LDIsMCwwLDAsNDYsNDgsMTE3LAotICAgIDYsMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsNDAsMSwwLDAsMCwxMTcsCi0gICAgOSwwLDAsMCwxMDIsMTA1LDEwOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsCi0gICAgMTE0LDYyLDEyMSw0LDAsMCwxMTUsMiwwLDAsMCw2LDEsMTE3LDQ5LDAsCi0gICAgMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLAotICAgIDExMiwxMTQsNjIsNDAsNCwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMywwLDAsMCw5NywxMTAsMTIxLDExNywxOCwwLDAsMCw2OSw4OCwKLSAgICA4NCw2OSw3OCw4Myw3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywKLSAgICA0MCwyLDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwKLSAgICAwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCwKLSAgICA0MCwxLDAsMCwwLDExNyw5LDAsMCwwLDEwMiwxMDUsMTA4LDEwMSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsCi0gICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsCi0gICAgMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDEwNSwxMTUsOTUsMTEyLDk3LDk5LAotICAgIDEwNyw5NywxMDMsMTAxLDExOCw0LDAsMCwxMTUsNiwwLDAsMCwwLDIsMTksCi0gICAgMSwxOCwxLDExNywzMCwwLDAsMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDUsMTE1LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5OSwyLDAsMCwwLDAsMCwwLDAsMiwKLSAgICAwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLAotICAgIDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsNjMsMCwwLDAsODIsMTAxLAotICAgIDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywxMTUsMzIsOTcsMTEwLDMyLAotICAgIDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDMyLDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiw5OSwxMTQsMTAxLDk3LDExNiwxMDEsMzIsOTcsCi0gICAgMzIsOTksMTExLDEwMCwxMDEsMzIsMTExLDk4LDEwNiwxMDEsOTksMTE2LDQ2LDc4LDQwLDEsCi0gICAgMCwwLDAsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsMTAyLAotICAgIDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDgsMCwwLDAsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsCi0gICAgMTI0LDQsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjgsMCwwLDAsCi0gICAgNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLDEwMCwxMDEsOTksMiwwLDAsCi0gICAgMCwwLDAsMCwwLDIsMCwwLDAsMSwwLDAsMCw2NywwLDAsCi0gICAgMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LAotICAgIDUzLDAsMCwwLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsCisgICAgMCwwLDY3LDAsMCwwLDExNSw0LDAsMCwwLDEwMCwxLDAsODMsNDEsCisgICAgMiwxMjIsMzksODIsMTAxLDExNiwxMTcsMTE0LDExMCwzMiw3OCwxMTEsMTEwLDEwMSwzMiw5NywKKyAgICAxMTUsMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMzIsMTE1LDExMSwKKyAgICAxMTcsMTE0LDk5LDEwMSwzMiw5OSwxMTEsMTAwLDEwMSw0Niw3OCwxMTQsNCwwLDAsMCwKKyAgICA0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNywxLDAsMCwKKyAgICAxNDQsNiwwLDAsMTE1LDIsMCwwLDAsMCwyLDEyMiwzMSw4MywxMTEsMTE3LAorICAgIDExNCw5OSwxMDEsMTA4LDEwMSwxMTUsMTE1LDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAorICAgIDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDc4LDQxLDYsMTE0LAorICAgIDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LAorICAgIDAsMCwwLDExNCwxNiwxLDAsMCwxMTQsMTcsMSwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDgsMSwwLDAsMTM0LDYsMCwwLDExNSw2LDAsMCwwLDEyLAorICAgIDIsNiwyLDEyLDYsMTE0LDgsMSwwLDAsOTksMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsMywwLDAsMCw2NCwwLDAsMCwxMTUsCisgICAgMTMwLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLAorICAgIDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLAorICAgIDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsCisgICAgMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMSw3LDAsMTAwLDgsMCwKKyAgICAxMDAsOSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsMTAwLDEwLDAsMTAwLAorICAgIDExLDAsMTMyLDAsMCw5MCw5LDAsMTAwLDEyLDAsMTAwLDEzLDAsMTMyLDAsCisgICAgMCw5MCwxMCwwLDEwMCwxNCwwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTEsMCwKKyAgICAxMDEsNywwLDEwMCwxNiwwLDEwMCwxNywwLDEzMiwwLDAsMTMxLDEsMCw5MCwKKyAgICAxMiwwLDEwMCwxOCwwLDgzLDQxLDE5LDIxOCwxOSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LAorICAgIDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMjIsOTMsNzYsCisgICAgMTExLDk3LDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LAorICAgIDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw4NCwxMDQsMTAxLDMyLDk5LDExMSwxMTAsMTE1LDExNiwxMTQsMTE3LDk5LDExNiwxMTEsCisgICAgMTE0LDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTUsMTA1LDEwMywxMTAsMTAxLDEwMCwzMiwxMTYsMTExLAorICAgIDMyLDExOSwxMTEsMTE0LDEwNywzMiwxMTksMTA1LDExNiwxMDQsMzIsNzAsMTA1LDEwOCwxMDEsNzAsCisgICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5OSwzLDAsMCwKKyAgICAwLDAsMCwwLDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwyMiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsOTUsMCwwLDEyNCwKKyAgICAyLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDQxLAorICAgIDIsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCw0MSwzLDExNCw3MSwwLAorICAgIDAsMCwxMTQsNjcsMCwwLDAsMTE0LDM1LDAsMCwwLDExNCw0LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3MiwwLDAsMCwKKyAgICAxNjEsNiwwLDAsMTE1LDQsMCwwLDAsMCwxLDksMSwxMjIsMjgsNjksCisgICAgMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDM0LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEwNiwwLAorICAgIDAsMTA3LDIsMCwxMTEsMzMsMCwxMjQsMCwwLDEwNiwxLDAsMTI0LDEsMCwKKyAgICAxMDYsMSwwLDEwNywyLDAsODMsNDEsMSw3OCw0MSwyLDExNCwyMjUsMCwwLAorICAgIDAsMTE0LDYzLDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwyMjgsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDIzMCwwLDAsMCwxNjUsNiwwLDAsMTE1LDQsMCwwLDAsMCwKKyAgICAxLDE4LDEsMTIyLDI2LDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LAorICAgIDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwMSwxMTMsOTUsOTUsOTksCisgICAgMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMywwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMjYsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEwNiwKKyAgICAxLDAsMTMxLDEsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDIsMCwxMzEsMSwKKyAgICAwLDY1LDgzLDQxLDEsNzgsNDEsMywxMTQsNTAsMSwwLDAsMTE0LDY3LDAsCisgICAgMCwwLDExNCwzNSwwLDAsMCw0MSwxLDExNCw3MSwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNTEsMSwKKyAgICAwLDAsMTY5LDYsMCwwLDExNSwyLDAsMCwwLDAsMSwxMjIsMjgsNjksCisgICAgMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsNDYsOTUsOTUsMTA0LDk3LDExNSwxMDQsOTUsOTUsOTksMiwwLDAsMCwKKyAgICAwLDAsMCwwLDQsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDE4MywwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTMxLDEsMCwxNDMsMjksCisgICAgMCwxLDExNiwxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMTI0LDAsCisgICAgMCwxMDYsNCwwLDEzMSwzLDAsMTI1LDIsMCw4NywxMDAsMSwwLDgxLDg4LAorICAgIDExNiw1LDAsMTAwLDIsMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDIsMCwxLAorICAgIDEyNCwwLDAsMTA2LDYsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMjQsCisgICAgMywwLDExNCwxMjQsMCwxMTYsNywwLDEyNCwyLDAsMTAwLDMsMCwxMzEsMiwKKyAgICAwLDEyLDExNCwxMjQsMCwxMTYsOCwwLDEyNCwwLDAsMTA2LDQsMCwxMzEsMSwKKyAgICAwLDEwMCw0LDAsMjUsMTAzLDEsMCwxMjQsMiwwLDk1LDksMCwxMTAsMCwKKyAgICAwLDEyNCwwLDAsMTI0LDIsMCw5NSwxMCwwLDEyNCwyLDAsMTA2LDExLDAsCisgICAgMTI0LDIsMCw5NSwxMiwwLDEyNCwzLDAsMTE1LDE3OSwwLDEyNCwyLDAsMTA2LAorICAgIDEyLDAsMTA2LDEzLDAsMTAwLDUsMCwxMzEsMSwwLDEwMCw0LDAsMjUsMTI0LAorICAgIDIsMCw5NSwxMiwwLDExMCwwLDAsMTI0LDIsMCw4Myw0MSw2LDEyMiwyNSwKKyAgICA3NiwxMTEsOTcsMTAwLDMyLDk3LDExMCwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLAorICAgIDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0Niw3OCwxMjIsMzMsMTAxLDEyMCwxMTYsMTAxLAorICAgIDExMCwxMTUsMTA1LDExMSwxMTAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSw5NywKKyAgICAxMDAsMTAxLDEwMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTIzLDMzLDExNCwxMjUsMTE0LDI0NywwLAorICAgIDAsMCwxMTQsODQsMCwwLDAsMTE0LDExNiwwLDAsMCw0MSwxNCwxMTQsNjksCisgICAgMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTA2LDAsMCwwLDkwLDEyLDEwOCwKKyAgICAxMTEsOTcsMTAwLDk1LDEwMCwxMjEsMTEwLDk3LDEwOSwxMDUsOTksMTE0LDM1LDAsMCwwLAorICAgIDExNCwxNTMsMCwwLDAsMTE0LDIyMCwwLDAsMCwxMTQsNjAsMCwwLDAsMTE0LAorICAgIDM4LDAsMCwwLDExNCwyNDcsMCwwLDAsMTE0LDIwNSwwLDAsMCwxMTQsNTcsCisgICAgMCwwLDAsMTE0LDI1MSwwLDAsMCwxMTQsMzIsMCwwLDAsNDEsNCwxMTQsCisgICAgNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMTgwLDAsMCwwLDExNCwyMjAsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDUsMSwwLDAsMTcyLDYsMCwwLDExNSwyNCwwLDAsMCwKKyAgICAwLDUsMTMsMSw5LDEsMjEsMSwxNiwxLDE1LDEsMjIsMSwyOCwxLAorICAgIDksMSwxMiwxLDYsMSwyOCwxLDEyMiwzMSw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LAorICAgIDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDgsMTExLAorICAgIDk3LDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCw0LDAsMCwwLDMsMCwwLDAsMTE1LDQ4LAorICAgIDAsMCwwLDExNiwwLDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwxLDAsMTAwLAorICAgIDEsMCwyNSwxMzcsMCwwLDExNiwyLDAsMTM1LDAsMCwxMDIsMSwwLDEwMCwKKyAgICAyLDAsMTAwLDMsMCwxMzQsMCwwLDExNiwzLDAsNjgsMTMxLDEsMCwxMzEsCisgICAgMSwwLDgzLDQxLDQsMTIyLDQ5LDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsODQsMTE0LAorICAgIDExNywxMDEsMzIsMTA1LDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwKKyAgICAxMDUsMTExLDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMDUsMTE1LDMyLDk3LDMyLAorICAgIDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw0NiwxMTQsMjksMCwwLDAsOTksMSwwLAorICAgIDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwwLDAsMCw1MSwwLAorICAgIDAsMCwxMTUsMzEsMCwwLDAsMTI0LDAsMCw5MywyMSwwLDEyNSwxLDAsCisgICAgMTM2LDAsMCwxMDAsMCwwLDEyNCwxLDAsMjMsMTA3LDIsMCw4NiwxLDExMywKKyAgICAzLDAsMTAwLDEsMCw4Myw0MSwyLDExNCw3MiwwLDAsMCw3OCwxMTQsNCwKKyAgICAwLDAsMCw0MSwyLDExNCwyMiwwLDAsMCwyMTgsNiwxMTUsMTE3LDEwMiwxMDIsCisgICAgMTA1LDEyMCw0MSwxLDIxOCw5LDEwMiwxMDUsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNzcsMCwwLDAsMTkzLDYsCisgICAgMCwwLDExNSwyLDAsMCwwLDYsMSwxMjIsNDksNjksMTIwLDExNiwxMDEsMTEwLAorICAgIDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTA1LAorICAgIDExNSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsCisgICAgMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2Miw0MSw0LDExNCwzOCwKKyAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDc4LDAsMCwwLDIxOCwxOCw2OSwKKyAgICA4OCw4NCw2OSw3OCw4Myw3Myw3OSw3OCw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSwKKyAgICA4Myw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDQxLDEsMTE0LDU5LDEsMCwwLDExNCw1LDAsMCwwLDExNCwyMjAsCisgICAgMCwwLDAsMTkwLDYsMCwwLDExNSw2LDAsMCwwLDAsMiwxOSwxLAorICAgIDE4LDEsMTIyLDMwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwKKyAgICAxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKKyAgICAxMDMsMTAxLDk5LDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsCisgICAgMCwwLDAsNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4MywKKyAgICA0MSwyLDEyMiw2Myw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDMyLDc4LDExMSwxMTAsMTAxLDMyLAorICAgIDk3LDExNSwzMiw5NywxMTAsMzIsMTAxLDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsOTksOTcsMTEwLDExMCwxMTEsMTE2LDMyLDk5LDExNCwKKyAgICAxMDEsOTcsMTE2LDEwMSwzMiw5NywzMiw5OSwxMTEsMTAwLDEwMSwzMiwxMTEsOTgsMTA2LDEwMSwKKyAgICA5OSwxMTYsNDYsNzgsMTE0LDQsMCwwLDAsNDEsMiwxMTQsNzEsMCwwLDAsCisgICAgMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsMTYsMSwwLDAsMTk2LDYsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsMiwxMjIsMjgsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw3MCwKKyAgICAxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsMTAzLDEwMSwxMTYsOTUsOTksMTExLAorICAgIDEwMCwxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMSwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsNCwwLDAsMCwxMDAsMSwwLDgzLAorICAgIDQxLDIsMTIyLDUzLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsNzgsMTExLDExMCwxMDEsMzIsCiAgICAgOTcsMTE1LDMyLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDMyLDEwOSwxMTEsMTAwLAogICAgIDExNywxMDgsMTAxLDExNSwzMiwxMDQsOTcsMTE4LDEwMSwzMiwxMTAsMTExLDMyLDExNSwxMTEsMTE3LAotICAgIDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsNDAsMSwwLDAsMCwxMTcsCi0gICAgNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSw0MCwyLDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsOCwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsMTEwLAotICAgIDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwxMjgsNCwKLSAgICAwLDAsMTE1LDIsMCwwLDAsMCwyLDExNywzMCwwLDAsMCw2OSwxMjAsCi0gICAgMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLAotICAgIDExNCw0NiwxMDMsMTAxLDExNiw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDc4LDQwLDEyLDAsCi0gICAgMCwwLDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICAxMCwwLDAsMCw5NSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsCi0gICAgMCwwLDAsOTUsOTUsMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LAotICAgIDcsMCwwLDAsOTUsOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCwKLSAgICA5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTE3LDExLDAsMCwwLDk1LDk5LDEwNCwKLSAgICAxMDEsOTksMTA3LDk1LDExMCw5NywxMDksMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDExNiwKLSAgICA5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMTE3LDEwLDAsMCwwLDExNSwxMDEsMTE2LAotICAgIDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMCwwLDAsMCwxMDUsMTE1LDk1LDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsOCwwLDAsMCwxMDMsMTAxLDExNiw5NSw5OSwKLSAgICAxMTEsMTAwLDEwMSwxMTcsMTAsMCwwLDAsMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw0MCwxLDAsMCwwLDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLAotICAgIDk5LDk3LDEwOCwxMTUsOTUsOTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTksMCwwLDAsNjksMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsODgsNCwwLDAsMTE1LDE2LAotICAgIDAsMCwwLDE2LDYsNiwyLDEyLDQsMywxLDMsMSwyNCwxNiwxMiwKLSAgICA2LDEyLDQsMTE3LDE5LDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwKLSAgICAxMTAsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsCi0gICAgMCwwLDAsMCwxLDAsMCwwLDIsMCwwLDAsNjYsMCwwLDAsCi0gICAgMTE1LDEzNCwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwKLSAgICAwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsCi0gICAgMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwKLSAgICA5MCw1LDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsNiwwLDEwMCwKLSAgICA4LDAsMTAwLDksMCwxMzIsMCwwLDkwLDcsMCwxMDAsMTAsMCwxMDAsMTEsCi0gICAgMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTIsMCwxMDAsMTMsMCwxMzIsMCwwLAotICAgIDkwLDksMCwxMDAsMTQsMCwxMDAsMTUsMCwxMzIsMCwwLDkwLDEwLDAsMTAwLAotICAgIDE2LDAsMTAwLDE3LDAsMTMyLDAsMCw5MCwxMSwwLDEwMCwxOCwwLDEwMCwxOSwKLSAgICAwLDEzMiwwLDAsOTAsMTIsMCwxMDAsMjAsMCw4Myw0MCwyMSwwLDAsMCwKLSAgICAxMTcsMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCwKLSAgICA5NywxMTYsMTA0LDExNywzOCwxLDAsMCw4MiwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsCi0gICAgMTE2LDExNSwzMiw5NywzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMTIsCi0gICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMzksMTE1LDMyLDExMiw5NywxMTYsMTA0LDQ2LDMyLDMyLAotICAgIDczLDExNiwzMiwxMTcsMTE1LDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LAotICAgIDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMzIsMTA1LDExNiwxMTUsMzIsMTEyLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiw5NywxMTAsMTAwLDMyLDEwMiwxMTQsMTExLDEwOSwzMiwKLSAgICAxMTYsMTA0LDEwMSwxMTQsMTAxLDMyLDEwNSwxMTYsMzIsMTA4LDExMSwxMTEsMTA3LDExNSwzMiwxMTcsCi0gICAgMTEyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsMzksMTE1LDEwLDMyLAotICAgIDMyLDMyLDMyLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDQ2LDMyLDMyLDg3LDEwNCwKLSAgICAxMDEsMTEwLDMyLDExNiwxMDQsMTA1LDExNSwzMiw5OSwxMDQsOTcsMTEwLDEwMywxMDEsMTE1LDQ0LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTEsMTE5LAotICAgIDExMCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDUsMTE1LDMyLDExNCwxMDEsOTksMTExLDEwOSwxMTIsCi0gICAgMTE3LDExNiwxMDEsMTAwLDQ0LDEwLDMyLDMyLDMyLDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsCi0gICAgMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMzIsMzIsNzAsMTExLAotICAgIDExNCwzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDMyLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDM5LDExNSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwKLSAgICAzMiwzMiwxMDUsMTE1LDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDQ2LDk5LDQsCi0gICAgMCwwLDAsMCwwLDAsMCw0LDAsMCwwLDIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDUyLDAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwwLAotICAgIDAsMTI0LDIsMCwxMjQsMCwwLDk1LDEsMCwxMTYsMiwwLDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMzEsMCwwLDEzMSwxLDAsMTI0LDAsMCw5NSw0LDAsMTI0LAotICAgIDMsMCwxMjQsMCwwLDk1LDUsMCwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsNiwwLDAsMCwxMTcsNSwwLDAsMCw5NSwxMTAsOTcsMTA5LAotICAgIDEwMSwxMTcsNSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsNSwwLDAsMCwKLSAgICAxMTYsMTE3LDExMiwxMDgsMTAxLDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTIsCi0gICAgOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDExNywxNywwLDAsMCw5NSwKLSAgICAxMDgsOTcsMTE1LDExNiw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LAotICAgIDExNywxMiwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LDExMCwxMDAsMTAxLAotICAgIDExNCw0MCw0LDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsCi0gICAgNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LAotICAgIDEwNCwxMTcsMTEsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwKLSAgICAxMTQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsMTQwLDQsMCwwLDExNSw4LAotICAgIDAsMCwwLDAsMSw5LDEsOSwxLDIxLDEsMTE3LDIzLDAsMCwwLAotICAgIDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLAotICAgIDQsMCwwLDAsMywwLDAsMCw2NywwLDAsMCwxMTUsNTMsMCwwLAotICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwNiwxLDAsMTAwLDEsMCwxMzEsMSwwLAotICAgIDkyLDMsMCwxMjUsMSwwLDEyNSwyLDAsMTI1LDMsMCwxMjQsMiwwLDEwMCwKLSAgICAyLDAsMTA3LDIsMCwxMTQsNDMsMCwxMDAsNiwwLDgzLDEyNCwxLDAsMTAwLAotICAgIDUsMCwxMDIsMiwwLDgzLDQwLDcsMCwwLDAsMTE3LDYyLDAsMCwwLAotICAgIDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsMzIsCi0gICAgMTExLDEwMiwzMiw0MCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDQ1LDExMCw5NywxMDksMTAxLDQ0LDMyLDExMiw5NywxMTQsMTAxLDExMCwxMTYsNDUsMTEyLAotICAgIDk3LDExNiwxMDQsNDUsOTcsMTE2LDExNiwxMTQsNDUsMTEwLDk3LDEwOSwxMDEsNDEsMTE3LDEsCi0gICAgMCwwLDAsNDYsMTE3LDAsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwKLSAgICAxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsNDAsMiwwLDAsMCwxMTcsMywwLDAsCi0gICAgMCwxMTUsMTIxLDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCw0MCwyLDAsCi0gICAgMCwwLDExNyw1LDAsMCwwLDk1LDExMCw5NywxMDksMTAxLDExNywxMCwwLDAsCi0gICAgMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCw0MCw0LDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsNiwwLDAsMCwxMTIsOTcsCi0gICAgMTE0LDEwMSwxMTAsMTE2LDExNywzLDAsMCwwLDEwMCwxMTEsMTE2LDExNywyLDAsMCwKLSAgICAwLDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLAotICAgIDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsCi0gICAgMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDE0Niw0LDAsMCwxMTUsCi0gICAgOCwwLDAsMCwwLDIsMjcsMSwxMiwyLDQsMywxMTcsMzgsMCwwLAotICAgIDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LAotICAgIDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDk1LDExMCw5NywxMDksMTAxLDExNSw5OSwxLDAsMCwwLDAsMCwwLDAsCi0gICAgMywwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwzOCwwLDAsCi0gICAgMCwxMjQsMCwwLDEwNiwwLDAsMTMxLDAsMCw5MiwyLDAsMTI1LDEsMCwKLSAgICAxMjUsMiwwLDExNiwxLDAsMTE2LDIsMCwxMDYsMywwLDEyNCwxLDAsMjUsCi0gICAgMTI0LDIsMCwxMzEsMiwwLDgzLDQwLDEsMCwwLDAsNzgsNDAsNCwwLAotICAgIDAsMCwxMTcsMjMsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsCi0gICAgMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDExNyw3LAotICAgIDAsMCwwLDEwMywxMDEsMTE2LDk3LDExNiwxMTYsMTE0LDExNywzLDAsMCwwLDExNSwKLSAgICAxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNSw0MCwzLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiwxMTcsMTgsMCwwLAotICAgIDAsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsCi0gICAgOTcsMTA5LDEwMSwxMTcsMTQsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwKLSAgICAxMTQsOTUsMTEwLDk3LDEwOSwxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsCi0gICAgMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwxNTYsNCwwLDAsMTE1LDQsMCwwLDAsCi0gICAgMCwxLDE4LDEsMTE3LDMxLDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSwxMDMsMTAxLDExNiw5NSwxMTIsOTcsMTE0LAotICAgIDEwMSwxMTAsMTE2LDk1LDExMiw5NywxMTYsMTA0LDk5LDEsMCwwLDAsMCwwLDAsCi0gICAgMCw0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDEwMywwLAotICAgIDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLAotICAgIDAsMTI1LDEsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMDcsMywwLAotICAgIDExNCw5NiwwLDEyNCwwLDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LAotICAgIDEsMCwxMzEsMiwwLDkyLDIsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsCi0gICAgMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDg0LDAsMTI0LDMsMCwxMjQsMCwwLAotICAgIDk1LDYsMCwxMTAsMCwwLDEyNCwxLDAsMTI0LDAsMCw5NSwyLDAsMTEwLAotICAgIDAsMCwxMjQsMCwwLDEwNiw2LDAsODMsNDAsMSwwLDAsMCw3OCw0MCwKLSAgICA3LDAsMCwwLDExNyw1LDAsMCwwLDExNiwxMTcsMTEyLDEwOCwxMDEsMTE3LDE2LAotICAgIDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsMTE3LDE3LDAsMCwwLDk1LDEwOCw5NywxMTUsMTE2LDk1LDExMiw5NywKLSAgICAxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNyw1LDAsMCwwLDk1LAotICAgIDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNyw1LDAsCi0gICAgMCwwLDk1LDExMiw5NywxMTYsMTA0LDQwLDQsMCwwLDAsMTE3LDQsMCwwLAotICAgIDAsMTE1LDEwMSwxMDgsMTAyLDExNywxMSwwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgMTE3LDgsMCwwLDAsMTEwLDEwMSwxMTksOTUsMTEyLDk3LDExNiwxMDQsNDAsMCwwLAotICAgIDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTIsMCwwLDAsOTUsMTE0LAotICAgIDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDE2MCw0LDAsMCwxMTUsMTQsCi0gICAgMCwwLDAsMCwyLDE4LDEsMTUsMSwyNywzLDEyLDEsMTIsMSwxMiwKLSAgICAxLDExNywyNywwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDgwLDk3LDExNiwxMDQsNDYsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsCi0gICAgMTAxLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDExNiwwLDAsMTI0LDAsCi0gICAgMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCw4Myw0MCwxLDAsMCwwLAotICAgIDc4LDQwLDIsMCwwLDAsMTE3LDQsMCwwLDAsMTA1LDExNiwxMDEsMTE0LDExNywKLSAgICAxMiwwLDAsMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsCi0gICAgNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwKLSAgICAwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LAotICAgIDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LAotICAgIDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSwKLSAgICA5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsMTcyLDQsMCwwLDExNSwyLDAsMCwwLAotICAgIDAsMSwxMTcsMjMsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LAotICAgIDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDEwNSwxMTYsMTAxLDExNCw5NSw5NSw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSwxNiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDEsCi0gICAgMCwxMzEsMCwwLDEzMSwxLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwyLAotICAgIDAsMCwwLDExNywzLDAsMCwwLDEwOCwxMDEsMTEwLDExNywxMiwwLDAsMCwKLSAgICA5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsNDAsMSwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNywwLDAsMCw5NSw5NSwxMDgsMTAxLDExMCwKLSAgICA5NSw5NSwxNzUsNCwwLDAsMTE1LDIsMCwwLDAsMCwxLDExNywyMiwwLAotICAgIDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsCi0gICAgNDYsOTUsOTUsMTA4LDEwMSwxMTAsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwKLSAgICAwLDAsMTAwLDEsMCwxMDYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMSwKLSAgICAwLDgzLDQwLDIsMCwwLDAsNzgsMTE3LDIwLDAsMCwwLDk1LDc4LDk3LAotICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0MCwxMjMsMzMsMTE0LDEyNSwKLSAgICA0MSw0MCwyLDAsMCwwLDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywKLSAgICAxMTYsMTE3LDUsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsNDAsMSwwLDAsMCwKLSAgICAxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsNDAsMCwwLDAsMCw0MCwwLAotICAgIDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwKLSAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwKLSAgICAxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLDAsMCw5NSw5NSwxMTQsMTAxLDExMiwxMTQsCi0gICAgOTUsOTUsMTc4LDQsMCwwLDExNSwyLDAsMCwwLDAsMSwxMTcsMjMsMCwKLSAgICAwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LAotICAgIDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwyLDAsMCwwLDAsMCwKLSAgICAwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwKLSAgICAwLDAsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMCwwLDEwNywKLSAgICA2LDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNywxMiwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDk5LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsNDAsCi0gICAgMiwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwKLSAgICAwLDAsMTA1LDExNiwxMDEsMTA5LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwKLSAgICAxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywKLSAgICAxMTIsNjIsMTE3LDEyLDAsMCwwLDk1LDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsCi0gICAgMTE1LDk1LDk1LDE4MSw0LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDI3LAotICAgIDAsMCwwLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LAotICAgIDEwNCw0Niw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsMTEwLDExNSw5NSw5NSw5OSwyLAorICAgIDExNCw5OSwxMDEsMzIsOTksMTExLDEwMCwxMDEsNDYsNzgsMTE0LDQsMCwwLDAsNDEsCisgICAgMiwxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMTcsMSwwLDAsMjAwLAorICAgIDYsMCwwLDExNSwyLDAsMCwwLDAsMiwxMjIsMzAsNjksMTIwLDExNiwxMDEsCisgICAgMTEwLDExNSwxMDUsMTExLDExMCw3MCwxMDUsMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCisgICAgMTAzLDEwMSwxMTYsOTUsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSw5OSwyLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwxLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA3LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCw4Myw0MSwxLDEyMiw1OCw4MiwKKyAgICAxMDEsMTE2LDExNywxMTQsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDExNiwKKyAgICAxMTEsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMSwxMTcsMTE0LDk5LDEwMSwzMiwxMDIsMTA1LDEwOCwKKyAgICAxMDEsMzIsOTcsMTE1LDMyLDEwMiwxMTEsMTE3LDExMCwxMDAsMzIsOTgsMTIxLDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDQxLDEsMTE0LDM1LDAsMCwwLAorICAgIDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIzOSwwLDAsMCwKKyAgICAyMDQsNiwwLDAsMTE1LDIsMCwwLDAsMCwzLDEyMiwzMiw2OSwxMjAsMTE2LAorICAgIDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwKKyAgICA0NiwxMDMsMTAxLDExNiw5NSwxMDIsMTA1LDEwOCwxMDEsMTEwLDk3LDEwOSwxMDEsNzgsNDEsMTMsCisgICAgMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LAorICAgIDU5LDAsMCwwLDExNCw3MiwwLDAsMCwxMTQsMjMwLDAsMCwwLDExNCw1MSwKKyAgICAxLDAsMCwxMTQsMTU3LDAsMCwwLDExNCw1LDEsMCwwLDExNCwyMjAsMCwKKyAgICAwLDAsMTE0LDE2LDEsMCwwLDExNCwxNywxLDAsMCwxMTQsMjM5LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCw1NywxLDAsMCwxNTMsNiwwLDAsMTE1LDE4LAorICAgIDAsMCwwLDEyLDYsNiwyLDEyLDQsMTIsNCwxMiwzLDE4LDE4LDEyLAorICAgIDYsMTIsNCwxMiw0LDExNCw1NywxLDAsMCw5OSwwLDAsMCwwLDAsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDY0LDAsMCwwLDExNSwKKyAgICAxMzAsMCwwLDAsMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsCisgICAgMTAwLDEsMCw5MCwzLDAsMTAwLDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsCisgICAgNCwwLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDkwLDUsMCwxMDAsNiwKKyAgICAwLDEwMCw3LDAsMTMyLDAsMCw5MCw2LDAsMTAwLDgsMCwxMDAsOSwwLAorICAgIDEzMiwwLDAsOTAsNywwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwwLDAsOTAsCisgICAgOCwwLDEwMCwxMiwwLDEwMCwxMywwLDEzMiwwLDAsOTAsOSwwLDEwMCwxNCwKKyAgICAwLDEwMCwxNSwwLDEzMiwwLDAsOTAsMTAsMCwxMDAsMTYsMCwxMDAsMTcsMCwKKyAgICAxMzIsMCwwLDkwLDExLDAsMTAwLDE4LDAsMTAwLDE5LDAsMTMyLDAsMCw5MCwKKyAgICAxMiwwLDEwMCwyMCwwLDgzLDQxLDIxLDIxOCwxNCw5NSw3OCw5NywxMDksMTAxLDExNSwKKyAgICAxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsOTcsMzgsMSwwLDAsODIsMTAxLDExMiwKKyAgICAxMTQsMTAxLDExNSwxMDEsMTEwLDExNiwxMTUsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiwKKyAgICA5Nyw5OSwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDM5LDExNSwzMiwxMTIsOTcsCisgICAgMTE2LDEwNCw0NiwzMiwzMiw3MywxMTYsMzIsMTE3LDExNSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwLDMyLDMyLDMyLAorICAgIDMyLDExNiwxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDEwNSwxMTYsMTE1LDMyLDExMiw5NywxMTQsCisgICAgMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDQsMzIsOTcsMTEwLDEwMCwzMiwKKyAgICAxMDIsMTE0LDExMSwxMDksMzIsMTE2LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTE2LDMyLDEwOCwxMTEsCisgICAgMTExLDEwNywxMTUsMzIsMTE3LDExMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE0LDEwMSwxMTAsCisgICAgMTE2LDM5LDExNSwxMCwzMiwzMiwzMiwzMiw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwKKyAgICA0NiwzMiwzMiw4NywxMDQsMTAxLDExMCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsOTksMTA0LDk3LAorICAgIDExMCwxMDMsMTAxLDExNSw0NCwzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAzOSwxMTUsMzIsMTExLDExOSwxMTAsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTA1LDExNSwzMiwxMTQsCisgICAgMTAxLDk5LDExMSwxMDksMTEyLDExNywxMTYsMTAxLDEwMCw0NCwxMCwzMiwzMiwzMiwzMiwxMTcsCisgICAgMTE1LDEwNSwxMTAsMTAzLDMyLDExMiw5NywxMTYsMTA0LDk1LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LAorICAgIDQ2LDMyLDMyLDcwLDExMSwxMTQsMzIsMTE2LDExMSwxMTIsNDUsMTA4LDEwMSwxMTgsMTAxLDEwOCwKKyAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LAorICAgIDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzOSwxMTUsMzIsMTEyLDk3LAorICAgIDExNiwxMDQsMTAsMzIsMzIsMzIsMzIsMTA1LDExNSwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCw0Niw5OSw0LDAsMCwwLDAsMCwwLDAsNCwwLDAsMCwKKyAgICAyLDAsMCwwLDY3LDAsMCwwLDExNSw1MiwwLDAsMCwxMjQsMSwwLAorICAgIDEyNCwwLDAsOTUsMCwwLDEyNCwyLDAsMTI0LDAsMCw5NSwxLDAsMTE2LAorICAgIDIsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDAsMCwxMzEsMSwwLDEyNCwwLAorICAgIDAsOTUsNCwwLDEyNCwzLDAsMTI0LDAsMCw5NSw1LDAsMTAwLDAsMCwKKyAgICA4Myw0MSwxLDc4LDQxLDYsMTE0LDcwLDAsMCwwLDExNCwyNTQsMCwwLDAsCisgICAgMTE0LDIzMiwwLDAsMCwyMTgsMTYsOTUsMTAzLDEwMSwxMTYsOTUsMTEyLDk3LDExNCwxMDEsCisgICAgMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwyMTgsMTcsOTUsMTA4LDk3LDExNSwxMTYsOTUsMTEyLAorICAgIDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCwyMTgsMTIsOTUsMTEyLDk3LDExNiwKKyAgICAxMDQsOTUsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDEsNCwxMTQsNzEsMCwwLDAsMTE0LAorICAgIDY3LDAsMCwwLDExNCwzNSwwLDAsMCwyMTgsMTEsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDUsMCwwLDAsMTE0LDcyLDAsMCwwLDIxNyw2LDAsMCwxMTUsOCwKKyAgICAwLDAsMCwwLDEsOSwxLDksMSwyMSwxLDEyMiwyMyw5NSw3OCw5NywKKyAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsMTA1LDExMCwKKyAgICAxMDUsMTE2LDk1LDk1LDk5LDEsMCwwLDAsMCwwLDAsMCw0LDAsMCwKKyAgICAwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDUzLDAsMCwwLDEyNCwwLAorICAgIDAsMTA2LDAsMCwxMDYsMSwwLDEwMCwxLDAsMTMxLDEsMCw5MiwzLDAsCisgICAgMTI1LDEsMCwxMjUsMiwwLDEyNSwzLDAsMTI0LDIsMCwxMDAsMiwwLDEwNywKKyAgICAyLDAsMTE0LDQzLDAsMTAwLDYsMCw4MywxMjQsMSwwLDEwMCw1LDAsMTAyLAorICAgIDIsMCw4Myw0MSw3LDEyMiw2Miw4MiwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywKKyAgICAzMiwxMTYsMTE3LDExMiwxMDgsMTAxLDMyLDExMSwxMDIsMzIsNDAsMTEyLDk3LDExNCwxMDEsMTEwLAorICAgIDExNiw0NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NSwxMTAsOTcsMTA5LDEwMSw0NCwzMiwxMTIsCisgICAgOTcsMTE0LDEwMSwxMTAsMTE2LDQ1LDExMiw5NywxMTYsMTA0LDQ1LDk3LDExNiwxMTYsMTE0LDQ1LAorICAgIDExMCw5NywxMDksMTAxLDQxLDExNCwxMTYsMCwwLDAsMTE0LDMwLDAsMCwwLDExNCwKKyAgICA3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMjQ3LDAsMCwwLDQxLDIsCisgICAgMTIyLDMsMTE1LDEyMSwxMTUsMTIyLDQsMTEyLDk3LDExNiwxMDQsNDEsMiwxMTQsNzAsMCwKKyAgICAwLDAsMTE0LDMyLDAsMCwwLDQxLDQsMTE0LDcxLDAsMCwwLDExNCwyMzQsCisgICAgMCwwLDAsMjE4LDMsMTAwLDExMSwxMTYsMTE0LDk0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwyMyw5NSwxMDIsCisgICAgMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMjIzLDYsMCwwLDExNSw4LDAsMCwwLDAsMiwKKyAgICAyNywxLDEyLDIsNCwzLDEyMiwzOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCisgICAgOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDExMiw5NywxMTQsCisgICAgMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTEwLDk3LDEwOSwxMDEsMTE1LDk5LDEsCisgICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDMsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDM4LDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMzEsMCwKKyAgICAwLDkyLDIsMCwxMjUsMSwwLDEyNSwyLDAsMTE2LDEsMCwxMTYsMiwwLAorICAgIDEwNiwzLDAsMTI0LDEsMCwyNSwxMjQsMiwwLDEzMSwyLDAsODMsNDEsMSwKKyAgICA3OCw0MSw0LDExNCw2NywxLDAsMCwxMTQsNjIsMCwwLDAsMTE0LDcsMCwKKyAgICAwLDAsMTE0LDczLDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwwLDkwLDE4LAorICAgIDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTEwLDk3LAorICAgIDEwOSwxMDEsOTAsMTQsMTEyLDk3LDExNiwxMDQsOTUsOTcsMTE2LDExNiwxMTQsOTUsMTEwLDk3LAorICAgIDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDYyLDEsMCwwLDIzMyw2LDAsMCwxMTUsNCwwLDAsMCwwLAorICAgIDEsMTgsMSwxMjIsMzEsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCwKKyAgICA5NywxMTYsMTA0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLAorICAgIDAsMywwLDAsMCw2NywwLDAsMCwxMTUsMTI3LDAsMCwwLDExNiwwLAorICAgIDAsMTI0LDAsMCwxMDYsMSwwLDEzMSwwLDAsMTMxLDEsMCwxMjUsMSwwLAorICAgIDEyNCwxLDAsMTI0LDAsMCwxMDYsMiwwLDEwNywzLDAsMTE0LDEyMCwwLDEyNCwKKyAgICAwLDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDEsMCwxMzEsMiwKKyAgICAwLDEyNSwyLDAsMTI0LDIsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDEwOCwwLAorICAgIDEyNCwyLDAsMTA2LDUsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDEwOCwwLDEyNCwKKyAgICAyLDAsMTA2LDYsMCwxMTQsMTA4LDAsMTI0LDIsMCwxMDYsNiwwLDEyNCwwLAorICAgIDAsOTUsNywwLDExMywxMDgsMCwxMTAsMCwwLDEyNCwxLDAsMTI0LDAsMCwKKyAgICA5NSwyLDAsMTEwLDAsMCwxMjQsMCwwLDEwNiw3LDAsODMsNDEsMSw3OCwKKyAgICA0MSw4LDExNCwyMzIsMCwwLDAsMTE0LDYyLDEsMCwwLDExNCw2MywxLDAsCisgICAgMCwxMTQsNjQsMSwwLDAsMTE0LDcwLDAsMCwwLDExNCwxNzAsMCwwLDAsCisgICAgMTE0LDIyMSwwLDAsMCwxMTQsMjU0LDAsMCwwLDQxLDMsMTE0LDcxLDAsMCwKKyAgICAwLDkwLDExLDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDE3OCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsMTIsOTUsMTE0LDEwMSw5OSw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLAorICAgIDIzNyw2LDAsMCwxMTUsMTYsMCwwLDAsMCwyLDE4LDEsMTUsMSwyMSwKKyAgICAzLDI3LDEsOSwxLDE4LDEsMTIsMSwxMjIsMjcsOTUsNzgsOTcsMTA5LDEwMSwKKyAgICAxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQ2LDk1LDExNCwxMDEsOTksOTcsMTA4LAorICAgIDk5LDExNywxMDgsOTcsMTE2LDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMSwKKyAgICAwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwxNiwwLDAsMCwKKyAgICAxMTYsMCwwLDEyNCwwLDAsMTA2LDEsMCwxMzEsMCwwLDEzMSwxLDAsODMsCisgICAgNDEsMSw3OCw0MSwyLDIxOCw0LDEwNSwxMTYsMTAxLDExNCwxMTQsNjgsMSwwLDAsCisgICAgNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDgsOTUsOTUsMTA1LDExNiwxMDEsMTE0LDk1LDk1LAorICAgIDI1MCw2LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTIyLDIzLDk1LDc4LDk3LAorICAgIDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDUsMTE2LAorICAgIDEwMSwxMTQsOTUsOTUsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLAorICAgIDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTE2LDAsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDAsMCwxMzEsMSwwLDgzLDQxLDEsCisgICAgNzgsNDEsMiwxMTQsMzEsMCwwLDAsMTE0LDY4LDEsMCwwLDQxLDEsMTE0LAorICAgIDcxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCw3LDk1LDk1LDEwOCwxMDEsMTEwLDk1LDk1LDI1Myw2LDAsMCwKKyAgICAxMTUsMiwwLDAsMCwwLDEsMTIyLDIyLDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKKyAgICA5Nyw5OSwxMDEsODAsOTcsMTE2LDEwNCw0Niw5NSw5NSwxMDgsMTAxLDExMCw5NSw5NSw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwwLAorICAgIDY3LDAsMCwwLDExNSwxNiwwLDAsMCwxMDAsMSwwLDEwNiwwLDAsMTI0LAorICAgIDAsMCwxMDYsMSwwLDEzMSwxLDAsODMsNDEsMiw3OCwxMjIsMjAsOTUsNzgsCisgICAgOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDQwLDEyMywzMywxMTQsCisgICAgMTI1LDQxLDQxLDIsMTE0LDQ3LDAsMCwwLDExNCwyNTQsMCwwLDAsNDEsMSwKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMTE0LDEwMSwwLDAsMCwwLDcsMCwwLDExNSwyLDAsCisgICAgMCwwLDAsMSwxMjIsMjMsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwKKyAgICA4MCw5NywxMTYsMTA0LDQ2LDk1LDk1LDExNCwxMDEsMTEyLDExNCw5NSw5NSw5OSwyLDAsCisgICAgMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsCisgICAgMCwwLDExNSwxNiwwLDAsMCwxMjQsMSwwLDEyNCwwLDAsMTA2LDAsMCwKKyAgICAxMzEsMCwwLDEwNyw2LDAsODMsNDEsMSw3OCw0MSwxLDExNCw2OCwxLDAsCisgICAgMCw0MSwyLDExNCw3MSwwLDAsMCwyMTgsNCwxMDUsMTE2LDEwMSwxMDksMTE0LDQsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDEyLDk1LAorICAgIDk1LDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTE1LDk1LDk1LDMsNywwLDAsMTE1LAorICAgIDIsMCwwLDAsMCwxLDEyMiwyNyw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsCisgICAgOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTUsOTUsOTksMTExLDExMCwxMTYsOTcsMTA1LDExMCwKKyAgICAxMTUsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgMiwwLDAsMCw2NywwLDAsMCwxMTUsMjAsMCwwLDAsMTI0LDAsMCwKKyAgICAxMDYsMCwwLDEwNiwxLDAsMTI0LDEsMCwxMzEsMSwwLDEsMTAwLDAsMCwKKyAgICA4Myw0MSwxLDc4LDQxLDIsMTE0LDI1NCwwLDAsMCwxMTQsMjI0LDAsMCwwLAorICAgIDQxLDIsMTE0LDcxLDAsMCwwLDExNCw3MiwxLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjI0LDAsMCwwLAorICAgIDYsNywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyMSw5NSw3OCw5NywKKyAgICAxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTcsMTEyLDExMiwxMDEsCisgICAgMTEwLDEwMCw3OCw0MSwxMywxMTQsNTcsMCwwLDAsMTE0LDU2LDAsMCwwLDExNCwKKyAgICA1OCwwLDAsMCwxMTQsNTksMCwwLDAsMTE0LDcyLDAsMCwwLDExNCw2NywKKyAgICAxLDAsMCwxMTQsNjIsMSwwLDAsMTE0LDY4LDEsMCwwLDExNCw3MCwxLAorICAgIDAsMCwxMTQsNzEsMSwwLDAsMTE0LDEwMSwwLDAsMCwxMTQsNzMsMSwwLAorICAgIDAsMTE0LDIyNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNjEsMSwwLDAsMjEwLAorICAgIDYsMCwwLDExNSwyMCwwLDAsMCwxMiw1LDYsMiwxMiw2LDEyLDEwLAorICAgIDEyLDQsMTIsMTMsMTIsMywxMiwzLDEyLDMsMTIsMywxMTQsNjEsMSwwLAorICAgIDAsOTksMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMywwLAorICAgIDAsMCw2NCwwLDAsMCwxMTUsMTA2LDAsMCwwLDEwMSwwLDAsOTAsMSwKKyAgICAwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzIsMCwwLAorICAgIDkwLDMsMCwxMDEsNCwwLDEwMCwzLDAsMTAwLDQsMCwxMzIsMCwwLDEzMSwKKyAgICAxLDAsOTAsNSwwLDEwMCw1LDAsMTAwLDYsMCwxMzIsMCwwLDkwLDYsCisgICAgMCwxMDAsNywwLDEwMCw4LDAsMTMyLDAsMCw5MCw3LDAsMTAwLDksMCwKKyAgICAxMDAsMTAsMCwxMzIsMCwwLDkwLDgsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsCisgICAgMCwwLDkwLDksMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwwLDkwLDEwLAorICAgIDAsMTAwLDE1LDAsODMsNDEsMTYsMTE0LDI1MiwwLDAsMCw5OSw0LDAsMCwKKyAgICAwLDAsMCwwLDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSwyNSwwLDAsMCwxMTYsMCwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsCisgICAgMywwLDEzMSwzLDAsMTI0LDAsMCw5NSwxLDAsMTAwLDAsMCw4Myw0MSwKKyAgICAxLDc4LDQxLDIsMTE0LDYxLDEsMCwwLDExNCwyNTQsMCwwLDAsNDEsNCwKKyAgICAxMTQsNzEsMCwwLDAsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsCisgICAgNjUsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsCisgICAgMCwwLDAsMTE0LDcyLDAsMCwwLDEyLDcsMCwwLDExNSwyLDAsMCwKKyAgICAwLDAsMSwxMjIsMjUsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwKKyAgICAxMTEsOTcsMTAwLDEwMSwxMTQsNDYsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDk5LDIsCiAgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwwLDAsNjcsCi0gICAgMCwwLDAsMTE1LDIwLDAsMCwwLDEyNCwwLDAsMTA2LDAsMCwxMDYsMSwKLSAgICAwLDEyNCwxLDAsMTMxLDEsMCwxLDEwMCwwLDAsODMsNDAsMSwwLDAsCi0gICAgMCw3OCw0MCwyLDAsMCwwLDExNyw1LDAsMCwwLDk1LDExMiw5NywxMTYsCi0gICAgMTA0LDExNyw2LDAsMCwwLDk3LDExMiwxMTIsMTAxLDExMCwxMDAsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDQsMCwwLDAsMTA1LAotICAgIDExNiwxMDEsMTA5LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwKLSAgICAwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCi0gICAgMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LAotICAgIDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCwxODQsNCwwLDAsMTE1LDIsCi0gICAgMCwwLDAsMCwxLDExNywyMSwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwKLSAgICAxMTIsOTcsOTksMTAxLDgwLDk3LDExNiwxMDQsNDYsOTcsMTEyLDExMiwxMDEsMTEwLDEwMCw3OCwKLSAgICA0MCwxMywwLDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSwKLSAgICA5NSw5NSwxMTcsMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCi0gICAgOTUsMTE3LDEyLDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDk1LDk1LDExNyw3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDExNywyMywwLDAsMCwKLSAgICA5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMTIsOTcsMTE2LAotICAgIDEwNCw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTE3LDE2LDAsMCwwLDk1LDEwMywxMDEsMTE2LAotICAgIDk1LDExMiw5NywxMTQsMTAxLDExMCwxMTYsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDEyLDAsMCwKLSAgICAwLDk1LDExNCwxMDEsOTksOTcsMTA4LDk5LDExNywxMDgsOTcsMTE2LDEwMSwxMTcsOCwwLAotICAgIDAsMCw5NSw5NSwxMDUsMTE2LDEwMSwxMTQsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTA4LDEwMSwxMTAsOTUsOTUsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsCi0gICAgMTE0LDk1LDk1LDExNywxMiwwLDAsMCw5NSw5NSw5OSwxMTEsMTEwLDExNiw5NywxMDUsCi0gICAgMTEwLDExNSw5NSw5NSwxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDQwLAotICAgIDEsMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsCi0gICAgMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywKLSAgICAxNCwwLDAsMCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDgwLDk3LAotICAgIDExNiwxMDQsMTMzLDQsMCwwLDExNSwyMCwwLDAsMCwxNiw1LDYsMiwxMiwKLSAgICA2LDEyLDEwLDEyLDQsMTIsMTIsMTIsMywxMiwzLDEyLDMsMTIsMywxMTcsCi0gICAgMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywKLSAgICAxMTYsMTA0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDMsCi0gICAgMCwwLDAsNjYsMCwwLDAsMTE1LDY4LDAsMCwwLDEyNCwwLDAsNjksCi0gICAgMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCwxMDAsCi0gICAgMiwwLDEzMiwwLDAsOTAsMywwLDEwMSw0LDAsMTAwLDMsMCwxMDAsNCwKLSAgICAwLDEzMiwwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDYsMCwxMDAsNSwwLAotICAgIDEwMCw2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDcsMCwxMDAsNywwLDgzLAotICAgIDQwLDgsMCwwLDAsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiwKLSAgICA5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDk5LDQsMCwwLDAsMCwwLAotICAgIDAsMCw0LDAsMCwwLDQsMCwwLDAsNjcsMCwwLDAsMTE1LDI1LAotICAgIDAsMCwwLDExNiwwLDAsMTI0LDEsMCwxMjQsMiwwLDEyNCwzLDAsMTMxLAotICAgIDMsMCwxMjQsMCwwLDk1LDEsMCwxMDAsMCwwLDgzLDQwLDEsMCwwLAotICAgIDAsNzgsNDAsMiwwLDAsMCwxMTcsMTQsMCwwLDAsOTUsNzgsOTcsMTA5LAotICAgIDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDExNyw1LDAsMCwwLDk1LAotICAgIDExMiw5NywxMTYsMTA0LDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwKLSAgICAxMDgsMTAyLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDExNywxMSwwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsMTAxLDExNCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LAotICAgIDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxODksNCwwLAotICAgIDAsMTE1LDIsMCwwLDAsMCwxLDExNywyNCwwLDAsMCw3OCw5NywxMDksCi0gICAgMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0Niw5NSw5NSwxMDUsCi0gICAgMTEwLDEwNSwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwKLSAgICAwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTYsMCwwLDAsMTAwLAotICAgIDEsMCwxMDYsMCwwLDEyNCwxLDAsMTA2LDEsMCwxMzEsMSwwLDgzLDQwLAotICAgIDIsMCwwLDAsNzgsMTE3LDI1LDAsMCwwLDYwLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDM5LDEyMywxMjUsMzksMzIsNDAsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwKLSAgICAxMDEsNDEsNjIsNDAsMiwwLDAsMCwxMTcsNiwwLDAsMCwxMDIsMTExLDExNCwKLSAgICAxMDksOTcsMTE2LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LAotICAgIDQwLDIsMCwwLDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsNiwwLAotICAgIDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwwLDQwLDAsMCwKLSAgICAwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwKLSAgICAxMTQsOTcsMTEyLDYyLDExNywxMSwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMTQsMTAxLDExMiwxMTQsMTkyLDQsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsCi0gICAgMjcsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsCisgICAgMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsMCwxMjQsMSwKKyAgICAwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDEyMiwxMTUsODIsMTAxLDExNiwxMTcsCisgICAgMTE0LDExMCwzMiwxMTQsMTAxLDExMiwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsCisgICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsODQsMTA0LDEwMSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwKKyAgICAxMDEsMTEyLDExNCwxMDEsOTksOTcsMTE2LDEwMSwxMDAsNDYsMzIsMzIsODQsMTA0LDEwMSwzMiwKKyAgICAxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDksOTcsOTksMTA0LDEwNSwxMTAsMTAxLDExNCwxMjEsCisgICAgMzIsMTAwLDExMSwxMDEsMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwNiwxMTEsOTgsMzIsMTA1LDExNiwKKyAgICAxMTUsMTAxLDEwOCwxMDIsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTIyLAorICAgIDI1LDYwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEyMywzMywxMTQsMTI1LDMyLDQwLDExMCwKKyAgICA5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDQxLDYyLDQxLDIsMTE0LDQ3LDAsMCwKKyAgICAwLDExNCw1NywwLDAsMCw0MSwyLDExNCwxMiwxLDAsMCwxMTQsMTgwLDAsCisgICAgMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwKKyAgICAwLDExNCwyMDYsMCwwLDAsMTUsNywwLDAsMTE1LDIsMCwwLDAsMCwKKyAgICA3LDEyMiwyOCw5NSw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywKICAgICAxMDAsMTAxLDExNCw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTQsMTAxLDExMiwxMTQsOTksCi0gICAgMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMzIsMCwwLDAsMTE2LDAsMCwxMDAsMSwwLDEyNCwKLSAgICAwLDAsMTA2LDEsMCwxMzEsMiwwLDEsMTI0LDAsMCwxMDYsMSwwLDEyNCwKLSAgICAxLDAsOTUsMiwwLDEyNCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsMjQsCi0gICAgMCwwLDAsNzYsMTExLDk3LDEwMCwzMiw5NywzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLAotICAgIDk3LDk5LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMTcsMzgsMCwwLDAsCi0gICAgMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTEyLDk3LDExNiwKLSAgICAxMDQsMzIsMTIzLDMzLDExNCwxMjUsNDAsMywwLDAsMCwxMTcsMTYsMCwwLDAsCi0gICAgOTUsMTE4LDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsCi0gICAgMTE3LDUsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsOTUsCi0gICAgOTUsMTEyLDk3LDExNiwxMDQsOTUsOTUsNDAsMiwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwKLSAgICAxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LAotICAgIDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLAotICAgIDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTk2LDQsMCwwLAotICAgIDExNSw2LDAsMCwwLDAsMywxNiwxLDEyLDEsMTE3LDI3LDAsMCwwLAorICAgIDIsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsCisgICAgNjcsMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDc4LAorICAgIDg0LDExNCw0LDAsMCwwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLAorICAgIDAsMTE0LDIyMCwwLDAsMCwyNCw3LDAsMCwxMTUsMiwwLDAsMCwwLAorICAgIDEsMTIyLDI3LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LAorICAgIDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk5LDIsCisgICAgMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsCisgICAgMCwwLDAsMTE1LDQsMCwwLDAsMTAwLDEsMCw4Myw0MSwyLDc4LDExNCwKKyAgICAzMCwwLDAsMCwxMTQsNCwwLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwKKyAgICAxMTQsMTU5LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCwKKyAgICA1LDAsMCwwLDExNCwxNywxLDAsMCwyNyw3LDAsMCwxMTUsMiwwLAorICAgIDAsMCwwLDEsMTIyLDI3LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCisgICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDExNSwxMTEsMTE3LDExNCw5OSwKKyAgICAxMDEsOTksMiwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNiwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMjIsMCwwLDAsMTE2LDAsMCwxMDAsMSwKKyAgICAwLDEwMCwyLDAsMTAwLDMsMCwxMDAsNCwwLDEwMCw1LDAsMTMxLDMsMSwKKyAgICA4Myw0MSw2LDc4LDExNCwzMCwwLDAsMCwxMjIsOCw2MCwxMTUsMTE2LDExNCwxMDUsCisgICAgMTEwLDEwMyw2MiwxMTQsMTc2LDAsMCwwLDExNCw0MywxLDAsMCw4NCw0MSwxLAorICAgIDExNCw0NCwxLDAsMCw0MSwyLDExNCw3MSwwLDAsMCwxMTQsMTU5LDAsMCwKKyAgICAwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLAorICAgIDExNCwxNiwxLDAsMCwzMCw3LDAsMCwxMTUsMiwwLDAsMCwwLDEsCisgICAgMTIyLDI1LDk1LDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDQ2LDEwMywxMDEsMTE2LDk1LDk5LDExMSwxMDAsMTAxLDk5LDIsMCwwLDAsCisgICAgMCwwLDAsMCwyLDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDQsMCwwLDAsMTAwLDAsMCw4Myw0MSwxLDc4LDExNCw0LDAsMCwKKyAgICAwLDQxLDIsMTE0LDcxLDAsMCwwLDExNCwxODAsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDIsMSwwLAorICAgIDAsMzMsNywwLDAsMTE1LDIsMCwwLDAsMCwxLDEyMiwyOCw5NSw3OCwKKyAgICA5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCw0NiwxMDEsCisgICAgMTIwLDEwMSw5OSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5OSwyLDAsMCwwLDAsCisgICAgMCwwLDAsMiwwLDAsMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICAyOSwwLDAsMCwxMTYsMCwwLDEwMCwxLDAsMTI0LDAsMCwxMDYsMSwwLAorICAgIDEzMSwyLDAsMSwxMTYsMiwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsMiwwLAorICAgIDgzLDQxLDIsMTIyLDk4LDc2LDExMSw5NywxMDAsMzIsOTcsMzIsMTEwLDk3LDEwOSwxMDEsCisgICAgMTE1LDExMiw5Nyw5OSwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LAorICAgIDExMSwxMDAsMzIsMTA1LDExNSwzMiwxMDAsMTAxLDExMiwxMTQsMTAxLDk5LDk3LDExNiwxMDEsMTAwLAorICAgIDQ2LDMyLDMyLDg1LDExNSwxMDEsMzIsMTAxLDEyMCwxMDEsOTksOTUsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsNDAsNDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTIyLDM4LDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsCisgICAgOTksMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMDAsCisgICAgMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExMiw5NywxMTYsMTA0LDMyLDEyMywzMywxMTQsMTI1LDQxLAorICAgIDMsMTE0LDE1MywwLDAsMCwxMTQsMjU0LDAsMCwwLDExNCwxODEsMCwwLDAsCisgICAgNDEsMiwxMTQsNzEsMCwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsNSwxLDAsMCwKKyAgICAzNiw3LDAsMCwxMTUsNCwwLDAsMCwwLDcsMTYsMSwxMjIsMjgsOTUsCiAgICAgNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsNDYsCi0gICAgMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDAsOCwwLDAsCi0gICAgMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTAsCi0gICAgMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLDAsCi0gICAgMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsMTEsMCwwLDAsCi0gICAgOTksMTA4LDk3LDExNSwxMTUsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDExLDAsMCwwLAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDk1LDExNCwxMDEsMTEyLDExNCwxMTcsMTcsMCwwLDAsCi0gICAgMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywxMDAsMTAxLAotICAgIDExNCwxMTcsMTEsMCwwLDAsMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsOTUsOTUsMTA4LDExMSw5OSwKLSAgICA5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsCi0gICAgMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsCi0gICAgNjIsMTE3LDE1LDAsMCwwLDc4LDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsNzYsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDE4OCw0LDAsMCwxMTUsNiwwLDAsMCwxNiwxLAotICAgIDEyLDMsMTgsNCwxMTcsMTUsMCwwLDAsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsOTksMSwwLDAsMCwwLDAsMCwKLSAgICAwLDEsMCwwLDAsNCwwLDAsMCw2NiwwLDAsMCwxMTUsMTE5LDAsCi0gICAgMCwwLDEyNCwwLDAsNjksMTAxLDAsMCw5MCwxLDAsMTAwLDAsMCw5MCwKLSAgICAyLDAsMTAwLDEsMCw5MCwzLDAsMTAxLDQsMCwxMDAsMiwwLDEwMCwzLAotICAgIDAsMTMyLDAsMCwxMzEsMSwwLDkwLDUsMCwxMDEsNCwwLDEwMCw0LDAsCi0gICAgMTAwLDUsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNiwwLDEwMSw0LDAsMTAwLAotICAgIDYsMCwxMDAsNywwLDEzMiwwLDAsMTMxLDEsMCw5MCw3LDAsMTAxLDQsCi0gICAgMCwxMDAsOCwwLDEwMCw5LDAsMTMyLDAsMCwxMzEsMSwwLDkwLDgsMCwKLSAgICAxMDEsNCwwLDEwMCwxMiwwLDEwMCwxMCwwLDEwMCwxMSwwLDEzMiwxLDAsMTMxLAotICAgIDEsMCw5MCwxMCwwLDEwMCwxMiwwLDgzLDQwLDEzLDAsMCwwLDExNywxMCwKLSAgICAwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LDYyLDAsCi0gICAgMCwwLDc3LDEwMSwxMTYsOTcsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAyLDEwNSwxMTAsMTAwLAotICAgIDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsMzIsCi0gICAgOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsOTUsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsOTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LDk4LDExNywxMTYsMTAxLDExNSw0NiwKLSAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCw0LDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSw1OCwwLDAsMCwxMjAsNTEsMCwxMTYsMCwwLAotICAgIDEwNiwxLDAsMTA2LDIsMCwxMzEsMCwwLDY4LDkzLDM0LDAsMTI1LDEsMCwKLSAgICAxMTYsMywwLDEyNCwxLDAsMTAwLDEsMCwxMzEsMiwwLDExNCwxNiwwLDEyNCwKLSAgICAxLDAsMTA2LDQsMCwxMzEsMCwwLDEsMTEzLDE2LDAsMTEzLDE2LDAsODcsCi0gICAgMTAwLDIsMCw4Myw0MCwzLDAsMCwwLDExNywxMjUsMCwwLDAsNjcsOTcsCi0gICAgMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsCi0gICAgMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDQwLDQxLDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsCi0gICAgMTAwLDMyLDExMSwxMTAsMzIsOTcsMTA4LDEwOCwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLAotICAgIDExNiwxMTQsMTIxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNSwxMCwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDEwMCwzMiwxMDUsMTEwLDMyLDExNSwxMjEsCi0gICAgMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTUsMzIsNDAsMTE5LDEwNCwxMDEsMTE0LDEwMSwzMiwxMDUsMTA5LAotICAgIDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiwxMDEsMTAwLDQxLDQ2LDExNywxNywwLDAsMCwKLSAgICAxMDUsMTEwLDExOCw5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgMTE1LDc4LDQwLDUsMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LAotICAgIDE5LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwKLSAgICAxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsNiwwLDAsMCwxMTgsOTcsMTA4LDExNywKLSAgICAxMDEsMTE1LDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDE3LAotICAgIDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsCi0gICAgOTksMTA0LDEwMSwxMTUsNDAsMiwwLDAsMCwxMTcsMywwLDAsMCw5OSwxMDgsCi0gICAgMTE1LDExNyw2LDAsMCwwLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LAotICAgIDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMjEwLDQsCi0gICAgMCwwLDExNSw2LDAsMCwwLDAsNCwyMiwxLDE1LDEsMTE3LDI4LDAsCi0gICAgMCwwLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDUsMTEwLDExOCwKLSAgICA5NywxMDgsMTA1LDEwMCw5NywxMTYsMTAxLDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE1LDk5LDIsCi0gICAgMCwwLDAsMCwwLDAsMCwzLDAsMCwwLDEyLDAsMCwwLDY3LAotICAgIDAsMCwwLDExNSw5NCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTE1LDI4LAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsMiwwLAotICAgIDEsMTEwLDAsMCwxMjAsNTksMCwxMTYsMCwwLDEwNiwxLDAsNjgsOTMsNDQsCi0gICAgMCwxMjUsMiwwLDEyMSwxNCwwLDEyNCwyLDAsMTI0LDEsMCwxMzEsMSwwLAotICAgIDgzLDg3LDExMywzOCwwLDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsODEsMCwxLAotICAgIDEsMSwxMTksMzgsMCw4OSwxMTMsMzgsMCw4OCwxMTMsMzgsMCw4NywxMDAsMiwKLSAgICAwLDgzLDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMTEzLDAsMCwwLAotICAgIDgzLDEwMSw5NywxMTQsOTksMTA0LDMyLDExNSwxMDEsMTEzLDExNywxMDEsMTEwLDk5LDEwMSwzMiwKLSAgICAxMTEsMTAyLDMyLDEwNCwxMTEsMTExLDEwNywxMTUsMzIsMTAyLDExMSwxMTQsMzIsOTcsMzIsMTAyLAotICAgIDEwNSwxMTAsMTAwLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsMzIsMzksMTEyLDk3LDExNiwxMDQsMzksCi0gICAgNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzMsMTAyLDMyLDM5LDEwNCwKLSAgICAxMTEsMTExLDEwNywxMTUsMzksMzIsMTA1LDExNSwzMiwxMDIsOTcsMTA4LDExNSwxMDEsMzIsMTE2LAotICAgIDEwNCwxMDEsMTEwLDMyLDExNywxMTUsMTAxLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LAotICAgIDk1LDEwNCwxMTEsMTExLDEwNywxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMTE3LDIzLDAsMCwwLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwKLSAgICAxMTEsMTExLDEwNywxMTUsMzIsMTA1LDExNSwzMiwxMDEsMTA5LDExMiwxMTYsMTIxLDc4LDQwLDcsCi0gICAgMCwwLDAsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDEwLDAsMCwwLAotICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMTE3LDksMCwwLDAsOTUsCi0gICAgMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDExNyw0LDAsMCwwLDExOSw5NywxMTQsCi0gICAgMTEwLDExNywxMywwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDg3LDk3LDExNCwxMTAsCi0gICAgMTA1LDExMCwxMDMsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LAotICAgIDExNCwxMTEsMTE0LDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDQwLDMsMCwwLAotICAgIDAsMTE3LDMsMCwwLDAsOTksMTA4LDExNSwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCwxMTcsNCwwLDAsMCwxMDQsMTExLDExMSwxMDcsNDAsMCwwLDAsMCwKLSAgICA0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLAotICAgIDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsCi0gICAgMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwKLSAgICAxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwyMTgsNCwwLDAsMTE1LDE2LDAsMCwwLAotICAgIDAsNyw5LDEsMTksMSwxNiwxLDMsMSwxNCwxLDEzLDEsMTIsMiwKLSAgICAxMTcsMjIsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LAotICAgIDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsOTksMiwwLDAsMCwKLSAgICAwLDAsMCwwLDMsMCwwLDAsMTEsMCwwLDAsNjcsMCwwLDAsCi0gICAgMTE1LDkxLDAsMCwwLDEyNCwxLDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyMSwKLSAgICAwLDEwMCwyLDAsMTI1LDEsMCwxMTAsMCwwLDEyMSwxNywwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMjQsMSwwLDI1LDEyNSwyLDAsODcsMTEwLDQ2LDAsNCwxMTYsCi0gICAgMiwwLDEwNywxMCwwLDExNCw4NiwwLDEsMSwxLDEyNCwwLDAsMTA2LDMsCi0gICAgMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjQsMiwwLDExNiwwLDAsCi0gICAgMTA2LDEsMCwxMjQsMSwwLDYwLDg5LDExMCwxLDAsODgsMTI0LDIsMCw4MywKLSAgICA0MCwzLDAsMCwwLDExNywyMTAsMCwwLDAsNzEsMTAxLDExNiwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwKLSAgICAzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMDEsMTEwLDExNiwxMTQsMTIxLDMyLDEwMiwxMTQsMTExLDEwOSwKLSAgICAzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsNzMsMTAyLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMSwKLSAgICAxMTAsMTE2LDExNCwxMjEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiwxMDUsMTEwLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwxMDEsNDQsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDk3LDExMiwxMTIsMTE0LDExMSwxMTIsMTE0LDEwNSw5NywxMTYsMTAxLDMyLDEwMiwKLSAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDk3LDExMCwKLSAgICAxMDAsMzIsOTksOTcsOTksMTA0LDEwMSwzMiwxMDUsMTE2LDQ2LDMyLDczLDEwMiwzMiwxMTAsCi0gICAgMTExLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsOTcsMTE4LDk3LDEwNSwKLSAgICAxMDgsOTcsOTgsMTA4LDEwMSw0NCwzMiwxMTUsMTE2LDExMSwxMTQsMTAxLDMyLDc4LDExMSwxMTAsCi0gICAgMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNywwLDAsMCwKLSAgICAwLDExNywxLDAsMCwwLDQ2LDQwLDQsMCwwLDAsMTE3LDMsMCwwLAotICAgIDAsMTE1LDEyMSwxMTUsMTE3LDE5LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSwxMTcsOCwwLDAsCi0gICAgMCw3NSwxMDEsMTIxLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsMCwwLDAsOTUsMTEyLAotICAgIDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSw0MCwzLDAsMCwwLDExNywzLAotICAgIDAsMCwwLDk5LDEwOCwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LAotICAgIDYsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDAsMCwwLDAsMCw0MCwKLSAgICAwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwKLSAgICAzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LAotICAgIDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMjAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDIzNSwKLSAgICA0LDAsMCwxMTUsMTYsMCwwLDAsMCw4LDEyLDEsOSwxLDMsMSwKLSAgICAxNywxLDEzLDEsMTUsMSwxOCwxLDExNywzMSwwLDAsMCw4MCw5NywxMTYsCisgICAgMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNzgsNDEsMTEsMTE0LDU3LAorICAgIDAsMCwwLDExNCw1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDcyLDAsCisgICAgMCwwLDExNCwxOSwxLDAsMCwxMTQsMjA2LDAsMCwwLDExNCwyMjAsMCwwLAorICAgIDAsMTE0LDE3LDEsMCwwLDExNCwxNiwxLDAsMCwxMTQsMiwxLDAsMCwKKyAgICAxMTQsNSwxLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNSwwLDAsMCwxMTQsMjUyLDAsMCwwLDExLDcsCisgICAgMCwwLDExNSwxNCwwLDAsMCwxMiwxLDEyLDMsMTgsOSwxMiwzLDEyLAorICAgIDMsMTIsMywxMiwzLDExNCwyNTIsMCwwLDAsOTksMCwwLDAsMCwwLAorICAgIDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw2NCwwLDAsMCwxMTUsCisgICAgMTYwLDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLAorICAgIDEwMCwxLDAsOTAsMywwLDEwMSw0LDAsMTAwLDIsMCwxMDAsMywwLDEzMiwKKyAgICAwLDAsMTMxLDEsMCw5MCw1LDAsMTAxLDQsMCwxMDAsNCwwLDEwMCw1LAorICAgIDAsMTMyLDAsMCwxMzEsMSwwLDkwLDYsMCwxMDEsNCwwLDEwMCw2LDAsCisgICAgMTAwLDcsMCwxMzIsMCwwLDEzMSwxLDAsOTAsNywwLDEwMSw0LDAsMTAwLAorICAgIDgsMCwxMDAsOSwwLDEzMiwwLDAsMTMxLDEsMCw5MCw4LDAsMTAxLDQsCisgICAgMCwxMDAsMTAsMCwxMDAsMTEsMCwxMDAsMTIsMCwxMzIsMSwwLDEzMSwxLDAsCisgICAgOTAsOSwwLDEwMSw0LDAsMTAwLDEwLDAsMTAwLDEwLDAsMTAwLDEzLDAsMTAwLAorICAgIDE0LDAsMTMyLDIsMCwxMzEsMSwwLDkwLDEwLDAsMTAxLDQsMCwxMDAsMTAsCisgICAgMCwxMDAsMTUsMCwxMDAsMTYsMCwxMzIsMSwwLDEzMSwxLDAsOTAsMTEsMCwKKyAgICAxMDAsMTAsMCw4Myw0MSwxNywyMTgsMTAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwKKyAgICAxMDEsMTE0LDEyMiw2Miw3NywxMDEsMTE2LDk3LDMyLDExMiw5NywxMTYsMTA0LDMyLDEwMiwxMDUsCisgICAgMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsCisgICAgMTA0LDMyLDk3LDExMCwxMDAsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDk1LDk1LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDk1LDMyLDk3LDExNiwxMTYsMTE0LDEwNSw5OCwxMTcsMTE2LDEwMSwKKyAgICAxMTUsNDYsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsNCwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsNTgsMCwwLDAsMTIwLDUxLDAsMTE2LAorICAgIDAsMCwxMDYsMSwwLDEwNiwyLDAsMTMxLDAsMCw2OCw5MywzNCwwLDEyNSwKKyAgICAxLDAsMTE2LDMsMCwxMjQsMSwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMTYsCisgICAgMCwxMjQsMSwwLDEwNiw0LDAsMTMxLDAsMCwxLDExMywxNiwwLDExMywxNiwKKyAgICAwLDg3LDEwMCwyLDAsODMsNDEsMywxMjIsMTI1LDY3LDk3LDEwOCwxMDgsMzIsMTE2LAorICAgIDEwNCwxMDEsMzIsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSw5NSw5OSw5NywKKyAgICA5OSwxMDQsMTAxLDExNSw0MCw0MSwzMiwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMTEsMTEwLAorICAgIDMyLDk3LDEwOCwxMDgsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwzMiwKKyAgICAxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMTE1LDExNiwxMTEsMTE0LDEwMSwxMDAsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsCisgICAgMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDk1LDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsMTE1LDMyLDQwLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTA4LDEwMSwxMDksCisgICAgMTAxLDExMCwxMTYsMTAxLDEwMCw0MSw0NiwyMTgsMTcsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsCisgICAgOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw3OCw0MSw1LDExNCw3LDAsCisgICAgMCwwLDIxOCwxOSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDEsCisgICAgMTE0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMjE4LDYsMTE4LDk3LDEwOCwxMTcsMTAxLDExNSwxMTQsCisgICAgNjAsMCwwLDAsMTE0LDc1LDEsMCwwLDQxLDIsMTE0LDEyLDEsMCwwLAorICAgIDIxOCw2LDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNCw0LDAsMCwwLDExNCw0LDAsCisgICAgMCwwLDExNCw1LDAsMCwwLDExNCw3NSwxLDAsMCw1Myw3LDAsMCwKKyAgICAxMTUsNiwwLDAsMCwwLDQsMjIsMSwxNSwxLDEyMiwyOCw4MCw5NywxMTYsCisgICAgMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsCisgICAgMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw5OSwyLDAsMCwwLDAsMCwKKyAgICAwLDAsMywwLDAsMCwxMiwwLDAsMCw2NywwLDAsMCwxMTUsOTQsCisgICAgMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDExNSwyOCwwLDExNiwyLDAsMTA2LAorICAgIDMsMCwxMDAsMSwwLDExNiw0LDAsMTMxLDIsMCwxLDExMCwwLDAsMTIwLAorICAgIDU5LDAsMTE2LDAsMCwxMDYsMSwwLDY4LDkzLDQ0LDAsMTI1LDIsMCwxMjEsCisgICAgMTQsMCwxMjQsMiwwLDEyNCwxLDAsMTMxLDEsMCw4Myw4NywxMTMsMzgsMCwKKyAgICA0LDExNiw1LDAsMTA3LDEwLDAsMTE0LDgxLDAsMSwxLDEsMTE5LDM4LDAsCisgICAgODksMTEzLDM4LDAsODgsMTEzLDM4LDAsODcsMTAwLDIsMCw4MywxMDAsMiwwLAorICAgIDgzLDQxLDMsMTIyLDExMyw4MywxMDEsOTcsMTE0LDk5LDEwNCwzMiwxMTUsMTAxLDExMywxMTcsCisgICAgMTAxLDExMCw5OSwxMDEsMzIsMTExLDEwMiwzMiwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwMiwxMTEsCisgICAgMTE0LDMyLDk3LDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDM5LAorICAgIDExMiw5NywxMTYsMTA0LDM5LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLAorICAgIDczLDEwMiwzMiwzOSwxMDQsMTExLDExMSwxMDcsMTE1LDM5LDMyLDEwNSwxMTUsMzIsMTAyLDk3LAorICAgIDEwOCwxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDExMCwzMiwxMTcsMTE1LDEwMSwzMiwxMTUsMTIxLDExNSwKKyAgICA0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE1LDQ2LDEwLDEwLDMyLDMyLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDEyMiwyMywxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMDQsMTExLDExMSwxMDcsMTE1LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSw3OCwKKyAgICA0MSw2LDExNCw3LDAsMCwwLDIxOCwxMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLAorICAgIDExMSwxMDcsMTE1LDExNCwxNjcsMCwwLDAsMTE0LDE2OCwwLDAsMCwxMTQsMTY5LDAsCisgICAgMCwwLDExNCwxNTQsMCwwLDAsNDEsMywxMTQsMTIsMSwwLDAsMTE0LDM1LAorICAgIDAsMCwwLDkwLDQsMTA0LDExMSwxMTEsMTA3LDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMSw5NSwxMTIsOTcsMTE2LDEwNCw5NSwKKyAgICAxMDQsMTExLDExMSwxMDcsMTE1LDYxLDcsMCwwLDExNSwxNiwwLDAsMCwwLDcsCisgICAgOSwxLDE5LDEsMTYsMSwzLDEsMTQsMSwxMywxLDEyLDIsMTIyLDIyLAorICAgIDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMTIsOTcsMTE2LDEwNCwKKyAgICA5NSwxMDQsMTExLDExMSwxMDcsMTE1LDk5LDIsMCwwLDAsMCwwLDAsMCwzLAorICAgIDAsMCwwLDExLDAsMCwwLDY3LDAsMCwwLDExNSw5NywwLDAsMCwKKyAgICAxMjQsMSwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMjcsMCwxMTYsMCwwLDEwNiwKKyAgICAxLDAsMTMxLDAsMCwxMjUsMSwwLDExMCwwLDAsMTIxLDE3LDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEyNCwxLDAsMjUsMTI1LDIsMCw4NywxMTAsNDYsMCw0LAorICAgIDExNiw0LDAsMTA3LDEwLDAsMTE0LDkyLDAsMSwxLDEsMTI0LDAsMCwxMDYsCisgICAgNSwwLDEyNCwxLDAsMTMxLDEsMCwxMjUsMiwwLDEyNCwyLDAsMTE2LDIsCisgICAgMCwxMDYsMywwLDEyNCwxLDAsNjAsODksMTEwLDEsMCw4OCwxMjQsMiwwLAorICAgIDgzLDQxLDIsMTIyLDIxMCw3MSwxMDEsMTE2LDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLAorICAgIDEwMCwxMDEsMTE0LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LAorICAgIDMyLDEwMSwxMTAsMTE2LDExNCwxMjEsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDExNSwxMjEsMTE1LDQ2LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsCisgICAgOTksMTA0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3MywxMDIsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTAxLDExMCwxMTYsMTE0LDEyMSwzMiwKKyAgICAxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDEwNSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksOTcsCisgICAgOTksMTA0LDEwMSw0NCwzMiwxMDIsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsOTcsMTEyLAorICAgIDExMiwxMTQsMTExLDExMiwxMTQsMTA1LDk3LDExNiwxMDEsMzIsMTAyLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsOTcsMTEwLDEwMCwzMiw5OSw5Nyw5OSwKKyAgICAxMDQsMTAxLDMyLDEwNSwxMTYsNDYsMzIsNzMsMTAyLDMyLDExMCwxMTEsMzIsMTAyLDEwNSwxMTAsCisgICAgMTAwLDEwMSwxMTQsMzIsMTA1LDExNSwzMiw5NywxMTgsOTcsMTA1LDEwOCw5Nyw5OCwxMDgsMTAxLAorICAgIDQ0LDMyLDExNSwxMTYsMTExLDExNCwxMDEsMzIsNzgsMTExLDExMCwxMDEsNDYsMTAsMTAsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDMwLDAsMCwwLDQxLDYsMTE0LDMsCisgICAgMCwwLDAsMTE0LDQ1LDAsMCwwLDExNCw3LDAsMCwwLDExNCw3NiwxLAorICAgIDAsMCwxMTQsNzksMCwwLDAsMTE0LDgwLDEsMCwwLDQxLDMsMTE0LDEyLAorICAgIDEsMCwwLDExNCwzNSwwLDAsMCwxMTQsNzgsMSwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDIwLDk1LDExMiwKKyAgICA5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksCisgICAgMTA0LDEwMSw3OCw3LDAsMCwxMTUsMTYsMCwwLDAsMCw4LDEyLDEsMTUsCisgICAgMSwzLDEsMTcsMSwxMywxLDE1LDEsMTgsMSwxMjIsMzEsODAsOTcsMTE2LAogICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksCiAgICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw5OSwzLDAsMCwKLSAgICAwLDAsMCwwLDAsOCwwLDAsMCw1LDAsMCwwLDY3LDAsMCwKLSAgICAwLDExNSwxODksMCwwLDAsMTAzLDAsMCwxMjUsMywwLDEyMCwxNzYsMCwxMjQsCi0gICAgMiwwLDY4LDkzLDE1OCwwLDEyNSw0LDAsMTE2LDAsMCwxMjQsNCwwLDExNiwKLSAgICAxLDAsMTE2LDIsMCwxMDIsMiwwLDEzMSwyLDAsMTE1LDQ2LDAsMTEzLDEzLAotICAgIDAsMTEwLDAsMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDQsMCwxMzEsMSwwLAotICAgIDEyNSw1LDAsMTI0LDUsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LDEzLDAsMTE2LAotICAgIDUsMCwxMjQsNSwwLDEwMCwxLDAsMTMxLDIsMCwxMTQsMTEyLDAsMTI0LDUsCi0gICAgMCwxMDYsNiwwLDEyNCwxLDAsMTMxLDEsMCw5MiwyLDAsMTI1LDYsMCwKLSAgICAxMjUsNywwLDExMCwyMSwwLDEyNCw1LDAsMTA2LDcsMCwxMjQsMSwwLDEzMSwKLSAgICAxLDAsMTI1LDYsMCwxMDMsMCwwLDEyNSw3LDAsMTI0LDYsMCwxMDAsMiwKLSAgICAwLDEwNyw5LDAsMTE0LDE1NSwwLDEyNCw2LDAsMTI0LDMsMCwxMDIsMiwwLAotICAgIDgzLDEyNCwzLDAsMTA2LDgsMCwxMjQsNywwLDEzMSwxLDAsMSwxMTMsMTMsCi0gICAgMCwxMTMsMTMsMCw4NywxMDAsMiwwLDEyNCwzLDAsMTAyLDIsMCw4MywxMDAsCi0gICAgMiwwLDgzLDQwLDMsMCwwLDAsMTE3LDYzLDAsMCwwLDcwLDEwNSwxMTAsCi0gICAgMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsMTExLDExNCwzMiwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5NSwxMTIsOTcsMTE2LDEwNCwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMTYsMTA0LDEwNSwxMTUsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDcsMTEyLAotICAgIDk3LDk5LDEwNyw5NywxMDMsMTAxLDMyLDExMCw5NywxMDksMTAxLDQ2LDExNywxMSwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw3OCw0MCw5LDAsCi0gICAgMCwwLDExNywxMCwwLDAsMCwxMDUsMTE1LDEwNSwxMTAsMTE1LDExNiw5NywxMTAsOTksCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMTYsMTE0LDExNyw1LDAsMCwwLDk4LDEyMSwKLSAgICAxMTYsMTAxLDExNSwxMTcsMjAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw0LDAsMCwKLSAgICAwLDc4LDExMSwxMTAsMTAxLDExNyw3LDAsMCwwLDEwNCw5NywxMTUsOTcsMTE2LDExNiwKLSAgICAxMTQsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsCi0gICAgMTE0LDExNywxMSwwLDAsMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwKLSAgICAxMDEsMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsNDAsOCwwLDAsCi0gICAgMCwxMTcsMywwLDAsMCw5OSwxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTcsCi0gICAgMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsCi0gICAgMTQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsMTEyLDk3LAotICAgIDExNiwxMDQsMTE3LDUsMCwwLDAsMTAxLDExMCwxMTYsMTE0LDEyMSwxMTcsNiwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsNiwwLDAsMCwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNyw4LDAsMCwwLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwyNTIsNCwwLDAsMTE1LAotICAgIDI4LDAsMCwwLDAsNSw2LDEsMTMsMSwyMSwxLDYsMSwxNSwxLAotICAgIDEyLDEsMTUsMSwyNCwyLDE1LDEsNiwxLDEyLDIsMTAsNSwyMCwyLAotICAgIDExNywyMiwwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTAzLDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwzLDAsMCwwLAotICAgIDAsMCwwLDAsNSwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLAotICAgIDExNSw5NywwLDAsMCwxMjQsMiwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjQsCi0gICAgMCwxMTYsMSwwLDEwNiwyLDAsMTI1LDIsMCwxMTAsMCwwLDEyNCwwLDAsCi0gICAgMTA2LDMsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCw5MiwyLDAsMTI1LAotICAgIDMsMCwxMjUsNCwwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOSwwLDExNCw2NCwKLSAgICAwLDEyNCwzLDAsODMsMTI0LDQsMCwxMTQsODksMCwxMTYsNCwwLDEyNCwxLAotICAgIDAsMTI0LDQsMCwxMjQsMCwwLDEwNiwzLDAsMTMxLDMsMCw4MywxMDAsMSwKLSAgICAwLDgzLDEwMCwxLDAsODMsNDAsMiwwLDAsMCwxMTcsOTgsMCwwLDAsCi0gICAgNzAsMTA1LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCi0gICAgMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LAotICAgIDExMiw5NywxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LAotICAgIDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsCi0gICAgMTAwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LAotICAgIDEwMSw0Niw3OCw0MCw1LDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsCi0gICAgMTAxLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDExNywxMSwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLAotICAgIDc2LDExMSw5NywxMDAsMTAxLDExNCw0MCw1LDAsMCwwLDExNywzLDAsMCwwLAotICAgIDk5LDEwOCwxMTUsMTE3LDgsMCwwLDAsMTAyLDExNywxMDgsMTA4LDExMCw5NywxMDksMTAxLAotICAgIDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw2LDAsMCwwLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsMTE3LDE0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsCi0gICAgOTksMTAxLDk1LDExMiw5NywxMTYsMTA0LDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDExLDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwyMyw1LDAsMCwxMTUsMTYsMCwwLDAsMCw0LDEyLDEsCi0gICAgMTIsMSwyNCwxLDEyLDEsNCwyLDYsMywxOSwyLDExNywyMiwwLDAsCi0gICAgMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwxMTAsMTAwLAotICAgIDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDc4LDQwLDExLDAsMCwwLDExNyw4LDAsCi0gICAgMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSwKLSAgICA5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsCi0gICAgMTEzLDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsCi0gICAgOTUsMTAwLDExMSw5OSw5NSw5NSwxMTcsMTEsMCwwLDAsOTksMTA4LDk3LDExNSwxMTUsCi0gICAgMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwKLSAgICAxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMTE3LDExLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMTUsMTE3LDIwLDAsMCwKLSAgICAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsCi0gICAgOTksOTcsOTksMTA0LDEwMSwxMTcsMTEsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwxMTcsNCwwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQwLDEsCi0gICAgMCwwLDAsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSwKLSAgICA5NSw5NSw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwKLSAgICAwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwKLSAgICAwLDAsMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMjA2LDQsMCwKLSAgICAwLDExNSwxNCwwLDAsMCwxNiwyLDYsMiwxOCw4LDE4LDE3LDE4LDE3LAotICAgIDE4LDI3LDMsMSwxMTcsMTAsMCwwLDAsODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLAotICAgIDMsMCwwLDAsNjYsMCwwLDAsMTE1LDExMCwwLDAsMCwxMjQsMCwwLAotICAgIDY5LDEwMSwwLDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsCi0gICAgOTAsMywwLDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsCi0gICAgNCwwLDEwMCw1LDAsMTMyLDAsMCw5MCw1LDAsMTAxLDYsMCw5MCw3LAotICAgIDAsMTAwLDYsMCwxMDAsNywwLDEzMiwwLDAsOTAsOCwwLDEwMCw4LDAsCi0gICAgMTAwLDksMCwxMzIsMCwwLDkwLDksMCwxMDEsMTAsMCwxMDAsMTAsMCwxMDAsCi0gICAgMTEsMCwxMzIsMCwwLDEzMSwxLDAsOTAsMTEsMCwxMDAsMTIsMCwxMDAsMTMsCi0gICAgMCwxMzIsMCwwLDkwLDEyLDAsMTAwLDE0LDAsODMsNDAsMTUsMCwwLDAsCi0gICAgMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE3LAotICAgIDE3MiwwLDAsMCw3MCwxMDUsMTA4LDEwMSw0NSw5OCw5NywxMTUsMTAxLDEwMCwzMiwxMDIsCi0gICAgMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMCwxMCwzMiwzMiwzMiwzMiw3MywxMTAsMTE2LDEwMSwKLSAgICAxMTQsOTcsOTksMTE2LDEwNSwxMTEsMTEwLDExNSwzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwKLSAgICAxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLDMyLDExNSwxMjEsMTE1LDExNiwxMDEsMTA5LDMyLDk3LDExNCwKLSAgICAxMDEsMzIsOTksOTcsOTksMTA0LDEwMSwxMDAsMzIsMTAyLDExMSwxMTQsMzIsMTEyLDEwMSwxMTQsCi0gICAgMTAyLDExMSwxMTQsMTA5LDk3LDExMCw5OSwxMDEsNDQsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDEwLAotICAgIDMyLDMyLDMyLDMyLDExNCwxMDEsMTAyLDExNCwxMDEsMTE1LDEwNCwxMDEsMTAwLDMyLDExOSwxMDQsCi0gICAgMTAxLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCwxMDEsMTE0LDMyLDEwNSwxMTUsMzIsMTA0LAotICAgIDk3LDExMCwxMDAsMTA4LDEwNSwxMTAsMTAzLDMyLDEwNCw5NywxMTUsMzIsOTgsMTAxLDEwMSwxMTAsCi0gICAgMzIsMTA5LDExMSwxMDAsMTA1LDEwMiwxMDUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICA5OSwyLDAsMCwwLDAsMCwwLDAsNSwwLDAsMCw1LDAsMCwKLSAgICAwLDcsMCwwLDAsMTE1LDEyMiwwLDAsMCwxMDMsMCwwLDEyNSwzLDAsCi0gICAgMTIwLDUyLDAsMTI0LDIsMCw2OCw5Myw0NCwwLDkyLDIsMCwxMzcsMCwwLAotICAgIDEyNSw0LDAsMTI0LDMsMCwxMDYsMCwwLDEzNSwwLDAsMTAyLDEsMCwxMDAsCi0gICAgMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjQsNCwwLDY4LDEzMSwxLDAsMTMxLAotICAgIDEsMCwxLDExMywxMywwLDg3LDEyNCwzLDAsMTI0LDAsMCw5NSwxLDAsCi0gICAgMTI0LDEsMCwxMTIsNzksMCwxMDAsMywwLDEyNCwwLDAsOTUsMiwwLDEwMCwKLSAgICA2LDAsMTI0LDAsMCw5NSwzLDAsMTE2LDQsMCwxMzEsMCwwLDEyNCwwLAotICAgIDAsOTUsNSwwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwwLDk1LDYsMCwKLSAgICAxMDAsNSwwLDgzLDQwLDcsMCwwLDAsMTE3LDE1NCwwLDAsMCw3MywxMTAsCi0gICAgMTA1LDExNiwxMDUsOTcsMTA4LDEwNSwxMjIsMTAxLDMyLDExOSwxMDUsMTE2LDEwNCwzMiwxMTYsMTA0LAotICAgIDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwzMiwxMTYsMTExLDMyLDExNSwxMDEsOTcsMTE0LDk5LDEwNCwKLSAgICAzMiwxMTEsMTEwLDMyLDk3LDExMCwxMDAsMzIsOTcsMzIsMTE4LDk3LDExNCwxMDUsOTcsOTgsCi0gICAgMTA4LDEwMSwzMiwxMTAsMTE3LDEwOSw5OCwxMDEsMTE0LDMyLDExMSwxMDIsMTAsMzIsMzIsMzIsCi0gICAgMzIsMzIsMzIsMzIsMzIsNTAsNDUsMTE2LDExNywxMTIsMTA4LDEwMSwxMTUsMzIsOTksMTExLAotICAgIDExMCwxMTYsOTcsMTA1LDExMCwxMDUsMTEwLDEwMywzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LAotICAgIDEwMCwxMDEsMTE0LDMyLDk3LDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTAyLDEwNSwxMDgsMTAxLAotICAgIDMyLDExNSwxMTcsMTAyLDEwMiwxMDUsMTIwLDEwMSwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiwxMTQsMTAxLDk5LAotICAgIDExMSwxMDMsMTEwLDEwNSwxMjIsMTAxLDExNSw0Niw5OSwxLDAsMCwwLDAsMCwwLAotICAgIDAsMiwwLDAsMCwzLDAsMCwwLDUxLDAsMCwwLDExNSwyNywwLAotICAgIDAsMCwxMjQsMCwwLDkzLDE3LDAsMTI1LDEsMCwxMjQsMSwwLDEzNiwwLAotICAgIDAsMTAyLDIsMCw4NiwxLDExMywzLDAsMTAwLDAsMCw4Myw0MCwxLDAsCi0gICAgMCwwLDc4LDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsMiwwLAotICAgIDAsMCw0Niw0OCwxMTcsNiwwLDAsMCwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw0MCwKLSAgICAxLDAsMCwwLDExNyw2LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsMTAxLAotICAgIDEyMCwxMTIsMTE0LDYyLDU2LDUsMCwwLDExNSwyLDAsMCwwLDYsMCwxMTcsCi0gICAgMzgsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwKLSAgICA5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLAotICAgIDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTcsMSwwLDAsMCw0NiwKLSAgICAxMDUsMSwwLDAsMCw3OCwxMDUsMjU1LDI1NSwyNTUsMjU1LDQwLDcsMCwwLDAsCi0gICAgMTE3LDYsMCwwLDAsMTAxLDEyMCwxMTYsMTAxLDExMCwxMDAsMTE3LDgsMCwwLDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwKLSAgICAxMDQsMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwOSwxMTYsMTA1LDEwOSwKLSAgICAxMDEsMTE3LDMsMCwwLDAsMTE1LDEwMSwxMTYsMTE3LDExLDAsMCwwLDk1LDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDE5LDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTA4LDk3LDEyMCwxMDEsMTAwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwKLSAgICAxMDEsNDAsNSwwLDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LAotICAgIDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDE0LDAsMCwwLDEwOCwxMTEsOTcsCi0gICAgMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDcsMCwwLDAsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMTE3LDgsMCwwLDAsMTE1LDExNywxMDIsMTAyLAotICAgIDEwNSwxMjAsMTAxLDExNSw0MCwwLDAsMCwwLDQwLDEsMCwwLDAsMTE3LDYsCi0gICAgMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMjksMCwwLDAsNjAsMTAyLAotICAgIDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0NiwKLSAgICA5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsCi0gICAgOTUsOTUsMTA1LDExMCwxMDUsMTE2LDk1LDk1LDUwLDUsMCwwLDExNSwxNiwwLDAsCi0gICAgMCwwLDQsNiwxLDE5LDEsMzYsMSw5LDIsMTUsMSw5LDEsMTIsCi0gICAgMSwxMTcsMTksMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICA0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLDAsCi0gICAgMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsMTMsCi0gICAgMCwwLDAsMTAwLDMsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMiwwLDgzLAotICAgIDQwLDQsMCwwLDAsMTE3LDMxLDAsMCwwLDczLDExMCwxMTgsOTcsMTA4LDEwNSwKLSAgICAxMDAsOTcsMTE2LDEwMSwzMiwxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwKLSAgICAxMTQsMTIxLDMyLDEwOSwxMTYsMTA1LDEwOSwxMDEsNDYsMTA1LDEsMCwwLDAsNzgsMTA1LAotICAgIDI1NSwyNTUsMjU1LDI1NSw0MCwxLDAsMCwwLDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDksMTE2LDEwNSwxMDksMTAxLDQwLDEsMCwwLDAsMTE3LDQsCi0gICAgMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsMCwwLDAsCi0gICAgMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCwKLSAgICA5NywxMTIsNjIsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LAotICAgIDExNiwxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsNjQsNSwwLDAsMTE1LDIsMCwKLSAgICAwLDAsMCwyLDExNywyOCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLAotICAgIDEwMCwxMDEsMTE0LDQ2LDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwxMDEsOTUsOTksCi0gICAgOTcsOTksMTA0LDEwMSwxMTUsOTksMiwwLDAsMCwwLDAsMCwwLDEyLDAsCi0gICAgMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwyMTYsMSwwLDAsMTAwLAotICAgIDgsMCwxMjUsMiwwLDEyNCwxLDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLAotICAgIDAsMTAwLDIsMCwyNSwxMjUsMywwLDEyMSwyNSwwLDExNiwyLDAsMTA2LDMsCi0gICAgMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDEsMCwxMDYsNSwwLDEyNSw0LDAsCi0gICAgODcsMTEwLDI0LDAsNCwxMTYsNiwwLDEwNywxMCwwLDExNCw3NiwwLDEsMSwKLSAgICAxLDEwMCw5LDAsMTI1LDQsMCw4OSwxMTAsMSwwLDg4LDEyNCw0LDAsMTI0LAotICAgIDAsMCwxMDYsNywwLDEwNywzLDAsMTE0LDExNCwwLDEyNCwwLDAsMTA2LDgsCi0gICAgMCwxMzEsMCwwLDEsMTI0LDQsMCwxMjQsMCwwLDk1LDcsMCwxMTAsMCwKLSAgICAwLDExNiw5LDAsMTMxLDAsMCwxMTQsMTQ3LDAsMTI0LDAsMCwxMDYsMTAsMCwKLSAgICAxMjUsNSwwLDEyNCwzLDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNiwwLDExMCwKLSAgICAxNSwwLDEyNCwwLDAsMTA2LDEyLDAsMTI1LDUsMCwxMjQsMywwLDEyNSw2LAotICAgIDAsMTI0LDYsMCwxMjQsNSwwLDEwNyw2LDAsMTE0LDQ1LDEsMTE2LDEzLDAsCi0gICAgMTI0LDAsMCwxMDYsNCwwLDEyNCwzLDAsMTMxLDIsMCwxMjUsNywwLDExNiwKLSAgICAxNCwwLDEyNCw3LDAsMTMxLDEsMCwxMTQsNDUsMSwxMjAsOTEsMCwxMjQsMCwKLSAgICAwLDEwNiwxNSwwLDY4LDkzLDcxLDAsOTIsMiwwLDEyNSw4LDAsMTI1LDksCi0gICAgMCwxMDAsNCwwLDEyNCw4LDAsMjMsMTI1LDEwLDAsMTE2LDEzLDAsMTI0LDcsCi0gICAgMCwxMjQsMTAsMCwxMzEsMiwwLDEyNSwxMSwwLDExNiwxNiwwLDEyNCwxMSwwLAotICAgIDEzMSwxLDAsMTE0LDIxNCwwLDEyNCw5LDAsMTI0LDEsMCwxMjQsMTEsMCwxMzEsCi0gICAgMiwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDExMywyMTQsMCw4NywKLSAgICAxMDAsMTAsMCwxMjUsMiwwLDExMyw0NSwxLDExMCwwLDAsMTIwLDEyMCwwLDEyNCwKLSAgICAwLDAsMTA2LDE1LDAsNjgsOTMsMTA5LDAsOTIsMiwwLDEyNSw4LDAsMTI1LAotICAgIDksMCwxMTYsMTMsMCwxMjQsMCwwLDEwNiw0LDAsMTI0LDMsMCwxMjQsOCwKLSAgICAwLDIzLDEzMSwyLDAsMTI1LDExLDAsMTE2LDE4LDAsMTAwLDUsMCwxMDYsMTksCi0gICAgMCwxMjQsMTEsMCwxMzEsMSwwLDEwMCw2LDAsMTAwLDIsMCwxMzEsMSwxLAotICAgIDEsMTI0LDYsMCwxMjQsOCwwLDIzLDEyNCw1LDAsMTA3LDYsMCwxMTQsNTUsCi0gICAgMSwxMTYsMTYsMCwxMjQsMTEsMCwxMzEsMSwwLDExNCwxNjQsMSwxMjQsOSwwLAotICAgIDEyNCwxLDAsMTI0LDExLDAsMTMxLDIsMCwxMDMsMCwwLDEwMiwyLDAsODMsCi0gICAgMTEzLDU1LDEsMTEzLDU1LDEsODcsMTI0LDIsMCwxMTQsMjA2LDEsMTE2LDE4LDAsCi0gICAgMTAwLDcsMCwxMDYsMTksMCwxMjQsNywwLDEzMSwxLDAsMTMxLDEsMCwxLAotICAgIDEwMCwxMSwwLDEyNCw3LDAsMTAzLDEsMCwxMDIsMiwwLDgzLDEwMCwxMSwwLAotICAgIDEwMywwLDAsMTAyLDIsMCw4Myw0MCwxMiwwLDAsMCwxMTcsMTI1LDAsMCwKLSAgICAwLDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsMzIsMTA4LAotICAgIDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwxMTUsMTEyLAotICAgIDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLAotICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsCi0gICAgMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLAotICAgIDMyLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLDExNiwxMTcsMTE0LAotICAgIDExMCwxMTUsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsMTA1LDExNSwxMTYsCi0gICAgNDUsMTExLDEwMiw0NSwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLDQ2LDExNywxLAotICAgIDAsMCwwLDQ2LDEwNSwyLDAsMCwwLDEwNSwxLDAsMCwwLDExNyw4LAotICAgIDAsMCwwLDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSwxMTcsOSwwLDAsMCwKLSAgICAxMTYsMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNyw5LDAsMCwwLDExOCwxMDEsCi0gICAgMTE0LDk4LDExMSwxMTUsMTA1LDExNiwxMjEsMTE3LDI1LDAsMCwwLDExMiwxMTEsMTE1LDExNSwKLSAgICAxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwzMiwxMDIsCi0gICAgMTExLDExNCwzMiwxMjMsMTI1LDcwLDEwNSwyNTUsMjU1LDI1NSwyNTUsODQsNzgsNDAsMjEsMCwKLSAgICAwLDAsMTE3LDUsMCwwLDAsNzAsOTcsMTA4LDExNSwxMDEsMTE3LDEwLDAsMCwKLSAgICAwLDExNCwxMTIsOTcsMTE0LDExNiwxMDUsMTE2LDEwNSwxMTEsMTEwLDExNywzLDAsMCwwLAotICAgIDk1LDExMSwxMTUsMTE3LDQsMCwwLDAsMTE1LDExNiw5NywxMTYsMTE3LDQsMCwwLAotICAgIDAsMTEyLDk3LDExNiwxMDQsMTE3LDgsMCwwLDAsMTE1LDExNiw5NSwxMDksMTE2LDEwNSwKLSAgICAxMDksMTAxLDExNyw3LDAsMCwwLDc5LDgzLDY5LDExNCwxMTQsMTExLDExNCwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsMTE3LDExLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNywxOSwKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCwKLSAgICA5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw1LDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsCi0gICAgMTE3LDExLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDk5LDk3LDk5LDEwNCwxMDEsCi0gICAgMTE3LDEwLDAsMCwwLDk1LDExMiw5NywxMTYsMTA0LDk1LDEwNiwxMTEsMTA1LDExMCwxMTcsCi0gICAgMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDAsMTA1LDExNCwxMTcsCi0gICAgOCwwLDAsMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMTIsMCwwLAotICAgIDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDExNSwxMDIsMTA1LDEwOCwxMDEsMTE3LDQsMCwKLSAgICAwLDAsODQsMTE0LDExNywxMDEsMTE3LDE2LDAsMCwwLDk1LDExOCwxMDEsMTE0LDk4LAotICAgIDExMSwxMTUsMTAxLDk1LDEwOSwxMDEsMTE1LDExNSw5NywxMDMsMTAxLDExNyw2LDAsMCwwLAotICAgIDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsNDAsCi0gICAgMTIsMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNyw4LDAsCi0gICAgMCwwLDEwMiwxMTcsMTA4LDEwOCwxMTAsOTcsMTA5LDEwMSwxMTcsMTIsMCwwLDAsMTA1LAotICAgIDExNSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSwxMTcsMTEsMCwwLDAsCi0gICAgMTE2LDk3LDEwNSwxMDgsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDUsMCwwLDAsCi0gICAgMTA5LDExNiwxMDUsMTA5LDEwMSwxMTcsNSwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDExNywKLSAgICAxMiwwLDAsMCw5OSw5Nyw5OSwxMDQsMTAxLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAotICAgIDExNyw5LDAsMCwwLDk4LDk3LDExNSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsCi0gICAgMCwwLDAsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTE3LDYsMCwwLDAsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsMTMsMCwwLDAsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwxMDUsCi0gICAgMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwxMTcsOSwwLDAsMCwxMDIsMTE3LDEwOCwxMDgsOTUsCi0gICAgMTEyLDk3LDExNiwxMDQsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwKLSAgICAwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwKLSAgICAxMTcsMTEsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCi0gICAgNzAsNSwwLDAsMTE1LDY2LDAsMCwwLDAsMyw2LDEsMTksMSwzLAotICAgIDEsMjUsMSwxMywxLDExLDEsMTUsMSwxMCwxLDEyLDIsOSwxLDksCi0gICAgMSwxNSwyLDksMSw2LDIsMTIsMSwxOCwxLDEyLDEsMjIsMSwxMCwKLSAgICAxLDE1LDEsMTIsMSwyNiw0LDEyLDIsMjIsMSwyMiwxLDI1LDEsMTYsCi0gICAgMSwxMiwxLDI2LDEsNiwxLDE5LDEsMTMsMSwxMTcsMjIsMCwwLDAsCi0gICAgNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwxMDAsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSwxLDAsMCwwLDAsMCwwLDAsOSwKLSAgICAwLDAsMCwxMywwLDAsMCw2NywwLDAsMCwxMTUsOCwxLDAsMCwKLSAgICAxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjEsMTksMCwxMTYsMSwwLDEwNiwKLSAgICAyLDAsMTI0LDEsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDMzLDAsNCwKLSAgICAxMTYsMywwLDExNiw0LDAsMTE2LDUsMCwxMDIsMywwLDEwNywxMCwwLDExNCwKLSAgICA2MywwLDEsMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsMSwwLDg4LAotICAgIDExNiw2LDAsMTA2LDcsMCwxMDYsOCwwLDEwMCwxLDAsMTMxLDEsMCwxMTUsCi0gICAgMTAwLDAsMTE2LDksMCwxMjQsMiwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxMCwKLSAgICAwLDExMCwxMTEsMCwxMTYsOSwwLDEzMSwwLDAsMTI1LDMsMCwxMjAsOTAsMCwKLSAgICAxMjQsMiwwLDY4LDkzLDgyLDAsMTI1LDQsMCwxMjQsNCwwLDEwNiwxMSwwLAotICAgIDEwMCwyLDAsMTMxLDEsMCw5MiwzLDAsMTI1LDUsMCwxMjUsNiwwLDEyNSwKLSAgICA3LDAsMTI0LDYsMCwxMTQsMTc5LDAsMTAwLDMsMCwxMDYsMTIsMCwxMjQsNSwKLSAgICAwLDEyNCw3LDAsMTA2LDEzLDAsMTMxLDAsMCwxMzEsMiwwLDEyNSw4LDAsCi0gICAgMTEwLDYsMCwxMjQsNSwwLDEyNSw4LDAsMTI0LDMsMCwxMDYsMTQsMCwxMjQsCi0gICAgOCwwLDEzMSwxLDAsMSwxMTMsMTE2LDAsODcsMTI0LDMsMCwxMjQsMCwwLAotICAgIDk1LDEwLDAsMTE2LDYsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDE1LDAsMTMxLAotICAgIDEsMCwxMTQsNCwxLDExNiw5LDAsMTAwLDQsMCwxMDAsNSwwLDEzMiwwLAotICAgIDAsMTI0LDIsMCw2OCwxMzEsMSwwLDEzMSwxLDAsMTI0LDAsMCw5NSwxNiwKLSAgICAwLDExMCwwLDAsMTAwLDYsMCw4Myw0MCw3LDAsMCwwLDExNyw2OCwwLAotICAgIDAsMCw3MCwxMDUsMTA4LDEwOCwzMiwxMTYsMTA0LDEwMSwzMiw5OSw5Nyw5OSwxMDQsMTAxLAotICAgIDMyLDExMSwxMDIsMzIsMTEyLDExMSwxMTYsMTAxLDExMCwxMTYsMTA1LDk3LDEwOCwzMiwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE1LDMyLDEwMiwxMTEsMTE0LDMyLDExNiwxMDQsMTA1LDExNSwzMiwxMDAsMTA1LDExNCwxMDEsCi0gICAgOTksMTE2LDExMSwxMTQsMTIxLDQ2LDExNywzLDAsMCwwLDExOSwxMDUsMTEwLDExNywxLAotICAgIDAsMCwwLDQ2LDExNyw1LDAsMCwwLDEyMywxMjUsNDYsMTIzLDEyNSw5OSwxLAotICAgIDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwyLDAsMCwwLDExNSwKLSAgICAwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLDEyNSwxLAotICAgIDAsMTI0LDEsMCwxMDYsMCwwLDEzMSwwLDAsODYsMSwxMTMsMywwLDEwMCwKLSAgICAwLDAsODMsNDAsMSwwLDAsMCw3OCw0MCwxLDAsMCwwLDExNyw1LAotICAgIDAsMCwwLDEwOCwxMTEsMTE5LDEwMSwxMTQsNDAsMiwwLDAsMCwxMTcsMiwwLAotICAgIDAsMCw0Niw0OCwxMTcsMiwwLDAsMCwxMDIsMTEwLDQwLDAsMCwwLDAsCi0gICAgNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwKLSAgICAxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLAotICAgIDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDksMCwwLDAsNjAsMTAzLDEwMSwxMTAsCi0gICAgMTAxLDEyMCwxMTIsMTE0LDYyLDE0Myw1LDAsMCwxMTUsMiwwLDAsMCw2LDAsCi0gICAgMTE3LDQxLDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsCi0gICAgOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LDEwNCwxMDEsNDYsNjAsMTA4LDExMSw5OSwKLSAgICA5NywxMDgsMTE1LDYyLDQ2LDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2Miw3OCw0MCwKLSAgICAxNywwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsMywwLAotICAgIDAsMCw5NSwxMTEsMTE1LDExNyw3LDAsMCwwLDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LAotICAgIDExNCwxMTcsMTcsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzgsMTExLDExNiw3MCwxMTEsMTE3LAotICAgIDExMCwxMDAsNjksMTE0LDExNCwxMTEsMTE0LDExNywxNSwwLDAsMCw4MCwxMDEsMTE0LDEwOSwKLSAgICAxMDUsMTE1LDExNSwxMDUsMTExLDExMCw2OSwxMTQsMTE0LDExMSwxMTQsMTE3LDE4LDAsMCwwLAotICAgIDc4LDExMSwxMTYsNjUsNjgsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDY5LDExNCwxMTQsCi0gICAgMTExLDExNCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsOCwwLDAsMCwxMTIsCi0gICAgMTA4LDk3LDExNiwxMDIsMTExLDExNCwxMDksMTE3LDEwLDAsMCwwLDExNSwxMTYsOTcsMTE0LAotICAgIDExNiwxMTUsMTE5LDEwNSwxMTYsMTA0LDExNywzLDAsMCwwLDExNSwxMDEsMTE2LDExNywxMSwKLSAgICAwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNyw5LAotICAgIDAsMCwwLDExMiw5NywxMTQsMTE2LDEwNSwxMTYsMTA1LDExMSwxMTAsMTE3LDYsMCwwLAotICAgIDAsMTAyLDExMSwxMTQsMTA5LDk3LDExNiwxMTcsNSwwLDAsMCwxMDgsMTExLDExOSwxMDEsCi0gICAgMTE0LDExNywzLDAsMCwwLDk3LDEwMCwxMDAsMTE3LDI3LDAsMCwwLDk1LDY3LAotICAgIDY1LDgzLDY5LDk1LDczLDc4LDgzLDY5LDc4LDgzLDczLDg0LDczLDg2LDY5LDk1LAotICAgIDgwLDc2LDY1LDg0LDcwLDc5LDgyLDc3LDgzLDExNywxOSwwLDAsMCw5NSwxMTQsCi0gICAgMTAxLDEwOCw5NywxMjAsMTAxLDEwMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5OSw5Nyw5OSwxMDQsCi0gICAgMTAxLDQwLDksMCwwLDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDExNywKLSAgICA0LDAsMCwwLDExMiw5NywxMTYsMTA0LDExNyw4LDAsMCwwLDk5LDExMSwxMTAsCi0gICAgMTE2LDEwMSwxMTAsMTE2LDExNSwxMTcsMjEsMCwwLDAsMTA4LDExMSwxMTksMTAxLDExNCw5NSwKLSAgICAxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCw5NSw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsMTE3LAotICAgIDQsMCwwLDAsMTA1LDExNiwxMDEsMTA5LDExNyw0LDAsMCwwLDExMCw5NywxMDksCi0gICAgMTAxLDExNywzLDAsMCwwLDEwMCwxMTEsMTE2LDExNyw2LDAsMCwwLDExNSwxMTcsCi0gICAgMTAyLDEwMiwxMDUsMTIwLDExNyw4LDAsMCwwLDExMCwxMDEsMTE5LDk1LDExMCw5NywxMDksCi0gICAgMTAxLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsCi0gICAgNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSwKLSAgICA5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDExLDAsCi0gICAgMCwwLDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNCw1LDAsCi0gICAgMCwxMTUsMzQsMCwwLDAsMCwyLDksMSwzLDEsMTksMSwyMiwzLAotICAgIDExLDMsMTgsMSwxOCw3LDksMSwxMywxLDI0LDEsNiwxLDI3LDIsCi0gICAgNiwxLDE3LDEsOSwxLDE4LDEsMTE3LDIyLDAsMCwwLDcwLDEwNSwxMDgsCi0gICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LAotICAgIDk5LDEwNCwxMDEsOTksMSwwLDAsMCwwLDAsMCwwLDMsMCwwLDAsCi0gICAgMywwLDAsMCw3LDAsMCwwLDExNSwyNSwwLDAsMCwxMzUsMCwwLAotICAgIDEzNSwxLDAsMTAyLDIsMCwxMDAsMSwwLDEwMCwyLDAsMTM0LDAsMCwxMjUsCi0gICAgMiwwLDEyNCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMjAsMSwwLDAsCi0gICAgNjUsMzIsOTksMTA4LDk3LDExNSwxMTUsMzIsMTA5LDEwMSwxMTYsMTA0LDExMSwxMDAsMzIsMTE5LAotICAgIDEwNCwxMDUsOTksMTA0LDMyLDExNCwxMDEsMTE2LDExNywxMTQsMTEwLDExNSwzMiw5NywzMiw5OSwKLSAgICAxMDgsMTExLDExNSwxMTcsMTE0LDEwMSwzMiwxMTYsMTExLDMyLDExNywxMTUsMTAxLDMyLDExMSwxMTAsCi0gICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDEwLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwxMTksMTA1LDEwOCwKLSAgICAxMDgsMzIsMTE0LDEwMSwxMTYsMTE3LDExNCwxMTAsMzIsOTcsMTEwLDMyLDEwNSwxMTAsMTE1LDExNiwKLSAgICA5NywxMTAsOTksMTAxLDMyLDExNywxMTUsMTA1LDExMCwxMDMsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LAotICAgIDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDEwMCwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwKLSAgICAzMiw5NywxMTAsMTAwLDMyLDExNiwxMDQsMTAxLDMyLDExMiw5NywxMTYsMTA0LDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDk5LDk3LDEwOCwxMDgsMTAxLDEwMCwzMiwxMTEsMTEwLDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDk5LDEwOCwxMTEsMTE1LDExNywxMTQsMTAxLDQ2LDEwLDEwLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDMyLDMyLDczLDEwMiwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LAotICAgIDEwNCwzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiwKLSAgICA5OSwxMDgsMTExLDExNSwxMTcsMTE0LDEwMSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LAotICAgIDMyLDEwMCwxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNDQsMzIsNzMsMTA5LDExMiwxMTEsCi0gICAgMTE0LDExNiw2OSwxMTQsMTE0LDExMSwxMTQsMzIsMTA1LDExNSwxMCwzMiwzMiwzMiwzMiwzMiwKLSAgICAzMiwzMiwzMiwxMTQsOTcsMTA1LDExNSwxMDEsMTAwLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAotICAgIDMyLDMyLDMyLDMyLDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwKLSAgICAwLDQsMCwwLDAsMTksMCwwLDAsMTE1LDQ2LDAsMCwwLDExNiwwLAotICAgIDAsMTI0LDAsMCwxMzEsMSwwLDExNSwzMywwLDExNiwxLDAsMTAwLDEsMCwKLSAgICAxMDAsMiwwLDEyNCwwLDAsMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTM2LAotICAgIDAsMCwxMjQsMCwwLDEzNiwxLDAsMTQwLDEsMCw4Myw0MCwzLDAsMCwKLSAgICAwLDExNyw0NSwwLDAsMCw4MCw5NywxMTYsMTA0LDMyLDEwNCwxMTEsMTExLDEwNywzMiwKLSAgICAxMDIsMTExLDExNCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDEwOSw5NywKLSAgICA5OSwxMDQsMTA1LDExMCwxMDEsMTE0LDEyMSw0Niw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDQ2LDExNywzMCwwLDAsMCwxMTEsMTEwLDEwOCwxMjEsMzIsMTAwLDEwNSwxMTQsCi0gICAgMTAxLDk5LDExNiwxMTEsMTE0LDEwNSwxMDEsMTE1LDMyLDk3LDExNCwxMDEsMzIsMTE1LDExNywxMTIsCi0gICAgMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMTE3LDQsMCwwLDAsMTEyLDk3LDExNiwxMDQsNDAsCi0gICAgMiwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA1LAotICAgIDExNSwxMDAsMTA1LDExNCwxMTcsMTEsMCwwLDAsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsNDAsMSwwLDAsMCwxMTcsNCwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw0MCwyLDAsMCwwLDExNywzLDAsMCwwLDk5LDEwOCwxMTUsMTE3LAotICAgIDE0LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwxMTYsOTcsMTA1LAotICAgIDEwOCwxMTUsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI0LDAsMCwwLDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSwKLSAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDE1NSw1LDAsMCwxMTUsNiwwLDAsMCwwLAotICAgIDIsMTIsMSwyMSwxLDExNyw1NCwwLDAsMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsCi0gICAgMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw0Niw2MCwKLSAgICAxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsCisgICAgMCwwLDAsMCwwLDYsMCwwLDAsMywwLDAsMCw2NywwLDAsCisgICAgMCwxMTUsMTEzLDAsMCwwLDExNiwwLDAsMTI0LDIsMCwxMDAsMSwwLDEzMSwKKyAgICAyLDAsMTE0LDM5LDAsMTI0LDIsMCwxMDYsMSwwLDEyNCwxLDAsMTMxLDEsCisgICAgMCw5MiwyLDAsMTI1LDMsMCwxMjUsNCwwLDExMCwyMSwwLDEyNCwyLDAsCisgICAgMTA2LDIsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDMsMCwxMDMsMCwwLDEyNSwKKyAgICA0LDAsMTI0LDMsMCwxMDAsMCwwLDEwNyw5LDAsMTE0LDg1LDAsMTE2LDMsCisgICAgMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCw4MywxMTYsNCwwLDEyNCwxLAorICAgIDAsMTAwLDAsMCwxMzEsMiwwLDEyNSw1LDAsMTI0LDQsMCwxMjQsNSwwLAorICAgIDk1LDUsMCwxMjQsNSwwLDgzLDQxLDIsNzgsMTE0LDE2NiwwLDAsMCw0MSwKKyAgICA2LDExNCw2MCwwLDAsMCwxMTQsMTY2LDAsMCwwLDExNCwxNSwxLDAsMCwKKyAgICAxMTQsMTc0LDAsMCwwLDExNCwyMTcsMCwwLDAsMTE0LDIyMSwwLDAsMCw0MSwKKyAgICA2LDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwwLDExNCw3OCwxLDAsMCwKKyAgICAxMTQsMTcwLDAsMCwwLDExNCwxNzEsMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTYsCisgICAgOTUsMTA4LDEwMSwxMDMsOTcsOTksMTIxLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LAorICAgIDk1LDcsMCwwLDExNSwxOCwwLDAsMCwwLDQsMTUsMSwyNCwyLDE1LAorICAgIDEsNiwxLDEyLDEsMTMsMSwxNSwxLDksMSwxMjIsMjcsODAsOTcsMTE2LAorICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDEwOCwxMDEsMTAzLDk3LDk5LDEyMSw5NSwKKyAgICAxMDMsMTAxLDExNiw5NSwxMTUsMTEyLDEwMSw5OSw3OCw5OSw0LDAsMCwwLDAsMCwKKyAgICAwLDAsOSwwLDAsMCw1LDAsMCwwLDY3LDAsMCwwLDExNSwyNTIsCisgICAgMCwwLDAsMTAzLDAsMCwxMjUsNCwwLDEyMCwyMzksMCwxMjQsMiwwLDY4LAorICAgIDkzLDIwMywwLDEyNSw1LDAsMTE2LDAsMCwxMjQsNSwwLDExNiwxLDAsMTE2LAorICAgIDIsMCwxMDIsMiwwLDEzMSwyLDAsMTE1LDQ2LDAsMTEzLDEzLDAsMTEwLDAsCisgICAgMCwxMjQsMCwwLDEwNiwzLDAsMTI0LDUsMCwxMzEsMSwwLDEyNSw2LDAsCisgICAgMTI0LDYsMCwxMDAsMSwwLDEwNyw5LDAsMTE0LDEzLDAsMTE2LDQsMCwxMjQsCisgICAgNiwwLDEwMCwyLDAsMTMxLDIsMCwxMTQsMTA5LDAsMTI0LDYsMCwxMDYsNSwKKyAgICAwLDEyNCwxLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw3LDAsMTEwLDE4LDAsCisgICAgMTI0LDAsMCwxMDYsNiwwLDEyNCwxLDAsMTI0LDYsMCwxMzEsMiwwLDEyNSwKKyAgICA3LDAsMTI0LDcsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDE0NSwwLDExMywxMywKKyAgICAwLDExMCwwLDAsMTI0LDcsMCwxMDYsNywwLDEwMCwxLDAsMTA3LDksMCwKKyAgICAxMTQsMTY0LDAsMTI0LDcsMCw4MywxMjQsNywwLDEwNiw4LDAsMTI1LDgsMCwKKyAgICAxMjQsOCwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsMjAwLDAsMTE2LDksMCwxMDAsCisgICAgMywwLDEzMSwxLDAsMTMwLDEsMCwxMTAsMCwwLDEyNCw0LDAsMTA2LDEwLAorICAgIDAsMTI0LDgsMCwxMzEsMSwwLDEsMTEzLDEzLDAsMTEzLDEzLDAsODcsMTE2LAorICAgIDExLDAsMTI0LDEsMCwxMDAsMSwwLDEzMSwyLDAsMTI1LDcsMCwxMjQsNCwKKyAgICAwLDEyNCw3LDAsOTUsOCwwLDEyNCw3LDAsODMsMTAwLDEsMCw4Myw0MSwKKyAgICA0LDEyMiw2Myw3MCwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwKKyAgICAxMDEsMTE0LDMyLDExMSwxMTQsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5Nyw5OSwxMDEsOTUsCisgICAgMTEyLDk3LDExNiwxMDQsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDQ3LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTAsOTcsMTA5LAorICAgIDEwMSw0Niw3OCwxMTQsMTQsMSwwLDAsMTIyLDE5LDExNSwxMTIsMTAxLDk5LDMyLDEwOSwKKyAgICAxMDUsMTE1LDExNSwxMDUsMTEwLDEwMywzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDQxLDEyLDExNCwKKyAgICAxOTMsMCwwLDAsMjE4LDMsMTE1LDExNiwxMTQsMjE4LDUsOTgsMTIxLDExNiwxMDEsMTE1LAorICAgIDExNCw4MSwxLDAsMCwxMTQsNjAsMCwwLDAsMTE0LDE0LDEsMCwwLDExNCwKKyAgICA4MiwxLDAsMCwxMTQsMTcwLDAsMCwwLDExNCwyMjEsMCwwLDAsMTE0LDE1NCwKKyAgICAwLDAsMCwxMTQsMTk4LDAsMCwwLDExNCwyMTcsMCwwLDAsNDEsOSwxMTQsCisgICAgMTIsMSwwLDAsMTE0LDE1OSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LDEzLAorICAgIDEsMCwwLDIxOCwxNCwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LDk5LDEwMSw5NSwxMTIsCisgICAgOTcsMTE2LDEwNCw5MCw1LDEwMSwxMTAsMTE2LDExNCwxMjEsMTE0LDc4LDEsMCwwLDExNCwKKyAgICAxNzgsMCwwLDAsMTE0LDE3MSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOSw5NSwxMDMsMTAxLDExNiw5NSwxMTUsCisgICAgMTEyLDEwMSw5OSwxMTAsNywwLDAsMTE1LDQwLDAsMCwwLDAsNSw2LDEsCisgICAgMTMsMSwyMSwxLDYsMSwxNSwxLDEyLDEsMTUsMSwyMSwyLDE4LDEsCisgICAgMTIsMSw2LDEsMTUsMSw0LDEsOSwxLDEyLDEsMTUsNSwyMCwyLAorICAgIDE1LDEsOSwxLDEyMiwyMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCisgICAgNDYsOTUsMTAzLDEwMSwxMTYsOTUsMTE1LDExMiwxMDEsOTksOTksNCwwLDAsMCwwLAorICAgIDAsMCwwLDYsMCwwLDAsNCwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTQzLDAsMCwwLDEyNCwyLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwyNCwwLAorICAgIDExNiwwLDAsMTA2LDEsMCwxMjUsMiwwLDExMCwwLDAsMTI0LDAsMCwxMDYsCisgICAgMiwwLDEyNCwxLDAsMTI0LDIsMCwxMjQsMywwLDEzMSwzLDAsMTI1LDQsCisgICAgMCwxMjQsNCwwLDEwMCwxLDAsMTA3LDgsMCwxMTQsNjEsMCwxMDAsMSwwLAorICAgIDgzLDEyNCw0LDAsMTA2LDMsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDEzNSwwLAorICAgIDEyNCw0LDAsMTA2LDQsMCwxMjUsNSwwLDEyNCw1LDAsMTE0LDEyOCwwLDEwMCwKKyAgICAyLDAsMTI0LDQsMCw5NSw1LDAsMTE2LDYsMCwxMjQsMSwwLDEyNCw1LAorICAgIDAsMTI0LDAsMCwxMDYsMiwwLDEzMSwzLDAsMTI0LDQsMCw5NSw0LDAsCisgICAgMTI0LDQsMCw4MywxMDAsMSwwLDgzLDExMCw0LDAsMTI0LDQsMCw4MywxMDAsCisgICAgMSwwLDgzLDQxLDMsMTIyLDk4LDEwMiwxMDUsMTEwLDEwMCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTEsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywKKyAgICAxMTYsMTA0LDMyLDExMSwxMTQsMzIsMzksMTEyLDk3LDExNiwxMDQsMzksMzIsOTgsOTcsMTE1LAorICAgIDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsCisgICAgMTExLDExMSwxMDcsMTE1LDMyLDk3LDExMCwxMDAsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsCisgICAgMzIsMTE1LDEyMSwxMTUsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsCisgICAgMTAxLDExNCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDQ2LDc4LDkwLDksMTEwLDk3LDEwOSwxMDEsCisgICAgMTE1LDExMiw5Nyw5OSwxMDEsNDEsNywxMTQsNywwLDAsMCwxMTQsMzUsMCwwLAorICAgIDAsMTE0LDg2LDEsMCwwLDExNCwxNzAsMCwwLDAsMTE0LDIyMSwwLDAsMCwKKyAgICAxMTQsMjE4LDAsMCwwLDExNCw2MSwxLDAsMCw0MSw2LDExNCwxMiwxLDAsCisgICAgMCwxMTQsMTU5LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTMsMSwwLDAsCisgICAgMTE0LDE3OCwwLDAsMCwxMTQsODUsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDE0LDEsMCwwLDE0Miw3LAorICAgIDAsMCwxMTUsMjYsMCwwLDAsMCw0LDEyLDEsMTIsMSwyMSwxLDEyLAorICAgIDEsNCwxLDE1LDEsOSwxLDYsMyw5LDEsMjQsMSw0LDIsNywKKyAgICAyLDEyMiwyMCw4MCw5NywxMTYsMTA0LDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDMsMCwwLDAsMCwwLDAsMCwKKyAgICA0LDAsMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDQxLDAsMCwKKyAgICAwLDEyNCwwLDAsMTA2LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwKKyAgICAxMjUsMywwLDEyNCwzLDAsMTAwLDEsMCwxMDcsOCwwLDExNCwzNCwwLDEwMCwKKyAgICAxLDAsODMsMTI0LDMsMCwxMDYsMSwwLDgzLDQxLDIsMTIyLDE3MCwxMDIsMTA1LAorICAgIDExMCwxMDAsMzIsMTE2LDEwNCwxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTExLDExMCwKKyAgICAzMiwxMTUsMTIxLDExNSw0NiwxMTIsOTcsMTE2LDEwNCwzMiwxMTEsMTE0LDMyLDM5LDExMiw5NywKKyAgICAxMTYsMTA0LDM5LDMyLDk4LDk3LDExNSwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE1LDEyMSwxMTUsCisgICAgNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDExNSwzMiw5NywxMTAsMTAwLDEwLAorICAgIDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDExNSwxMjEsMTE1LDQ2LDExMiw5NywxMTYsMTA0LAorICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsOTUsOTksOTcsOTksMTA0LDEwMSw0NiwKKyAgICAxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw4NCwxMDQsMTA1LDExNSwzMiwxMDksCisgICAgMTAxLDExNiwxMDQsMTExLDEwMCwzMiwxMDUsMTE1LDMyLDEwMCwxMDEsMTEyLDExNCwxMDEsOTksOTcsCisgICAgMTE2LDEwMSwxMDAsNDYsMzIsMzIsODUsMTE1LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LAorICAgIDExMiwxMDEsOTksNDAsNDEsMzIsMTA1LDExMCwxMTUsMTE2LDEwMSw5NywxMDAsNDYsMTAsMTAsCisgICAgMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsNzgsNDEsMiwxMTQsMTQsMSwwLDAsCisgICAgMTE0LDE3MCwwLDAsMCw0MSw0LDExNCwxMiwxLDAsMCwxMTQsMTU5LDAsMCwKKyAgICAwLDExNCwzNSwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNSwxLDAsMCwxNjQsCisgICAgNywwLDAsMTE1LDgsMCwwLDAsMCw4LDE4LDEsMTIsMSw0LDEsCisgICAgMTIyLDIyLDgwLDk3LDExNiwxMDQsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwKKyAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDEsMTIsMTE0LDU3LDAsMCwwLDExNCwKKyAgICA1NiwwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCwxOSwKKyAgICAxLDAsMCwxMTQsNzUsMSwwLDAsMTE0LDgwLDEsMCwwLDExNCw4MSwxLAorICAgIDAsMCwxMTQsODIsMSwwLDAsMTE0LDg2LDEsMCwwLDExNCwxNCwxLDAsCisgICAgMCwxMTQsMTUsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsCisgICAgMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc0LDEsMCwwLDQ5LAorICAgIDcsMCwwLDExNSwyMiwwLDAsMCwxMiwyLDYsMiwxOCw4LDE4LDE3LAorICAgIDE4LDE3LDE4LDE1LDMsMSwxOCwzMSwzLDEsMjEsMjEsMywxLDExNCw3NCwKKyAgICAxLDAsMCw5OSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwKKyAgICAzLDAsMCwwLDY0LDAsMCwwLDExNSwxMzMsMCwwLDAsMTAxLDAsMCwKKyAgICA5MCwxLDAsMTAwLDAsMCw5MCwyLDAsMTAwLDEsMCw5MCwzLDAsMTAwLAorICAgIDIsMCwxMDAsMywwLDEzMiwwLDAsOTAsNCwwLDEwMCw0LDAsMTAwLDUsCisgICAgMCwxMzIsMCwwLDkwLDUsMCwxMDEsNiwwLDkwLDcsMCwxMDAsNiwwLAorICAgIDEwMCw3LDAsMTMyLDAsMCw5MCw4LDAsMTAwLDgsMCwxMDAsOSwwLDEzMiwKKyAgICAwLDAsOTAsOSwwLDEwMCwxMCwwLDEwMCwxMSwwLDEwMCwxMiwwLDEzMiwxLAorICAgIDAsOTAsMTAsMCwxMDAsMTMsMCwxMDAsMTQsMCwxMzIsMCwwLDkwLDExLDAsCisgICAgMTAxLDEyLDAsMTAwLDE1LDAsMTAwLDE2LDAsMTMyLDAsMCwxMzEsMSwwLDkwLAorICAgIDEzLDAsMTAwLDE3LDAsMTAwLDE4LDAsMTMyLDAsMCw5MCwxNCwwLDEwMCwxMCwKKyAgICAwLDgzLDQxLDE5LDIxOCwxMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LAorICAgIDEyMiwxNzIsNzAsMTA1LDEwOCwxMDEsNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTAyLDEwNSwxMTAsCisgICAgMTAwLDEwMSwxMTQsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNzMsMTEwLDExNiwxMDEsMTE0LDk3LAorICAgIDk5LDExNiwxMDUsMTExLDExMCwxMTUsMzIsMTE5LDEwNSwxMTYsMTA0LDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTIxLDExNSwxMTYsMTAxLDEwOSwzMiw5NywxMTQsMTAxLDMyLAorICAgIDk5LDk3LDk5LDEwNCwxMDEsMTAwLDMyLDEwMiwxMTEsMTE0LDMyLDExMiwxMDEsMTE0LDEwMiwxMTEsCisgICAgMTE0LDEwOSw5NywxMTAsOTksMTAxLDQ0LDMyLDk4LDEwMSwxMDUsMTEwLDEwMywxMCwzMiwzMiwKKyAgICAzMiwzMiwxMTQsMTAxLDEwMiwxMTQsMTAxLDExNSwxMDQsMTAxLDEwMCwzMiwxMTksMTA0LDEwMSwxMTAsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTAwLDEwNSwxMTQsMTAxLDk5LDExNiwxMTEsMTE0LDEyMSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDIsMTA1LDExMCwxMDAsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDEwNCw5NywxMTAsCisgICAgMTAwLDEwOCwxMDUsMTEwLDEwMywzMiwxMDQsOTcsMTE1LDMyLDk4LDEwMSwxMDEsMTEwLDMyLDEwOSwKKyAgICAxMTEsMTAwLDEwNSwxMDIsMTA1LDEwMSwxMDAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTksMiwKKyAgICAwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNSwwLDAsMCw3LAorICAgIDAsMCwwLDExNSwxMjIsMCwwLDAsMTAzLDAsMCwxMjUsMywwLDEyMCw1MiwKKyAgICAwLDEyNCwyLDAsNjgsOTMsNDQsMCw5MiwyLDAsMTM3LDAsMCwxMjUsNCwKKyAgICAwLDEyNCwzLDAsMTA2LDAsMCwxMzUsMCwwLDEwMiwxLDAsMTAwLDEsMCwKKyAgICAxMDAsMiwwLDEzNCwwLDAsMTI0LDQsMCw2OCwxMzEsMSwwLDEzMSwxLDAsCisgICAgMSwxMTMsMTMsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMSwwLDEyNCwxLAorICAgIDAsMTEyLDc5LDAsMTAwLDMsMCwxMjQsMCwwLDk1LDIsMCwxMDAsNiwwLAorICAgIDEyNCwwLDAsOTUsMywwLDExNiw0LDAsMTMxLDAsMCwxMjQsMCwwLDk1LAorICAgIDUsMCwxMTYsNCwwLDEzMSwwLDAsMTI0LDAsMCw5NSw2LDAsMTAwLDUsCisgICAgMCw4Myw0MSw3LDEyMiwxNTQsNzMsMTEwLDEwNSwxMTYsMTA1LDk3LDEwOCwxMDUsMTIyLDEwMSwKKyAgICAzMiwxMTksMTA1LDExNiwxMDQsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsMTE2LAorICAgIDExMSwzMiwxMTUsMTAxLDk3LDExNCw5OSwxMDQsMzIsMTExLDExMCwzMiw5NywxMTAsMTAwLDMyLAorICAgIDk3LDMyLDExOCw5NywxMTQsMTA1LDk3LDk4LDEwOCwxMDEsMzIsMTEwLDExNywxMDksOTgsMTAxLAorICAgIDExNCwzMiwxMTEsMTAyLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDUwLDQ1LDExNiwKKyAgICAxMTcsMTEyLDEwOCwxMDEsMTE1LDMyLDk5LDExMSwxMTAsMTE2LDk3LDEwNSwxMTAsMTA1LDExMCwxMDMsCisgICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiw5NywxMTAsMTAwLDMyLAorICAgIDExNiwxMDQsMTAxLDMyLDEwMiwxMDUsMTA4LDEwMSwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTAsMzIsMzIsMzIsCisgICAgMzIsMzIsMzIsMzIsMzIsMTE0LDEwMSw5OSwxMTEsMTAzLDExMCwxMDUsMTIyLDEwMSwxMTUsNDYsCisgICAgOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywwLDAsCisgICAgMCw1MSwwLDAsMCwxMTUsMjcsMCwwLDAsMTI0LDAsMCw5MywxNywwLAorICAgIDEyNSwxLDAsMTI0LDEsMCwxMzYsMCwwLDEwMiwyLDAsODYsMSwxMTMsMywKKyAgICAwLDEwMCwwLDAsODMsNDEsMSw3OCwxMTQsNCwwLDAsMCw0MSwyLDExNCwKKyAgICAyMiwwLDAsMCwxMTQsNTgsMSwwLDAsNDEsMSwxMTQsMTcwLDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NywwLDAsMCwxOTMsCisgICAgNywwLDAsMTE1LDIsMCwwLDAsNiwwLDEyMiwzOCw3MCwxMDUsMTA4LDEwMSwKKyAgICA3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDk1LDk1LDEwNSwxMTAsMTA1LDExNiw5NSw5NSw0NiwKKyAgICA2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsNjAsMTAzLDEwMSwxMTAsMTAxLDEyMCwxMTIsCisgICAgMTE0LDYyLDExNCwxMTYsMCwwLDAsMTE0LDI5LDAsMCwwLDc4LDExNCwxMzksMCwKKyAgICAwLDAsNDEsNywxMTQsMTk4LDAsMCwwLDIxOCw4LDk1LDEwOCwxMTEsOTcsMTAwLAorICAgIDEwMSwxMTQsMTE1LDExNCwzNSwwLDAsMCwyMTgsMTEsOTUsMTEyLDk3LDExNiwxMDQsOTUsCisgICAgMTA5LDExNiwxMDUsMTA5LDEwMSwyMTgsMywxMTUsMTAxLDExNiwyMTgsMTEsOTUsMTEyLDk3LDExNiwKKyAgICAxMDQsOTUsOTksOTcsOTksMTA0LDEwMSwyMTgsMTksOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDEwMSwKKyAgICAxMDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsOTksOTcsOTksMTA0LDEwMSw0MSw1LDExNCw3MSwKKyAgICAwLDAsMCwxMTQsMzUsMCwwLDAsMjE4LDE0LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgOTUsMTAwLDEwMSwxMTYsOTcsMTA1LDEwOCwxMTUsOTAsNywxMDgsMTExLDk3LDEwMCwxMDEsMTE0LAorICAgIDExNSwxMTQsMTI2LDAsMCwwLDExNCw0LDAsMCwwLDQxLDEsMTE0LDE3MCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsNzIsMCwwLDAsMTg3LDcsMCwwLAorICAgIDExNSwxNiwwLDAsMCwwLDQsNiwxLDE5LDEsMzYsMSw5LDIsMTUsCisgICAgMSw5LDEsMTIsMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLAorICAgIDExNCw0Niw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsOTUsOTUsOTksMSwwLDAsMCwwLAorICAgIDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLDAsMCwxMTUsCisgICAgMTMsMCwwLDAsMTAwLDMsMCwxMjQsMCwwLDk1LDAsMCwxMDAsMiwwLAorICAgIDgzLDQxLDQsMTIyLDMxLDczLDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsOTcsMTE2LDEwMSwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDAsMTA1LDExNCwxMDEsOTksMTE2LDExMSwxMTQsMTIxLDMyLDEwOSwxMTYsCisgICAgMTA1LDEwOSwxMDEsNDYsMTE0LDI5LDAsMCwwLDc4LDExNCwxMzksMCwwLDAsNDEsCisgICAgMSwxMTQsODksMSwwLDAsNDEsMSwxMTQsNzEsMCwwLDAsMTE0LDQsMCwKKyAgICAwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc1LDEsMCwKKyAgICAwLDIwMSw3LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDI4LDcwLDEwNSwKKyAgICAxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTA1LDExMCwxMTgsOTcsMTA4LDEwNSwxMDAsCisgICAgOTcsMTE2LDEwMSw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNSw5OSwyLDAsMCwwLDAsCisgICAgMCwwLDAsMywwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSwKKyAgICA1OSwwLDAsMCwxMjQsMCwwLDEwNiwwLDAsMTI0LDEsMCwxMzEsMSwwLAorICAgIDEyNSwyLDAsMTI0LDIsMCwxMDAsMSwwLDEwNyw4LDAsMTE0LDM3LDAsMTAwLAorICAgIDEsMCwxMDMsMCwwLDEwMiwyLDAsODMsMTI0LDIsMCwxMDYsMSwwLDEyNCwKKyAgICAyLDAsMTA2LDIsMCwxMTIsNTUsMCwxMDMsMCwwLDEwMiwyLDAsODMsNDEsCisgICAgMiwxMjIsMTk3LDg0LDExNCwxMjEsMzIsMTE2LDExMSwzMiwxMDIsMTA1LDExMCwxMDAsMzIsOTcsCisgICAgMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwzMiwxMDIsMTExLDExNCwzMiwxMTYsMTA0LDEwMSwzMiwKKyAgICAxMTUsMTEyLDEwMSw5OSwxMDUsMTAyLDEwNSwxMDEsMTAwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLAorICAgIDQ0LDMyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTE1LDExMiw5NywKKyAgICA5OSwxMDEsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTEyLDk3LDk5LDEwNyw5NywKKyAgICAxMDMsMTAxLDMyLDExMiwxMTEsMTE0LDExNiwxMDUsMTExLDExMCwxMTUsNDYsMzIsODIsMTAxLDExNiwKKyAgICAxMTcsMTE0LDExMCwxMTUsMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMDgsMTA1LAorICAgIDExNSwxMTYsNDUsMTExLDEwMiw0NSwxMTIsMTExLDExNCwxMTYsMTA1LDExMSwxMTAsMTE1LDQxLDQ2LAorICAgIDEwLDEwLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDUsMTE1LDMyLDEwOSwKKyAgICAxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDEwNSwxMTUsMzIsMTAwLDEwMSwxMTIsMTE0LDEwMSw5OSw5NywKKyAgICAxMTYsMTAxLDEwMCw0NiwzMiwzMiw4NSwxMTUsMTAxLDMyLDEwMiwxMDUsMTEwLDEwMCw5NSwxMTUsCisgICAgMTEyLDEwMSw5OSw0MCw0MSwzMiwxMDUsMTEwLDExNSwxMTYsMTAxLDk3LDEwMCw0NiwxMCwxMCwKKyAgICAzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw3OCw0MSwzLDExNCwxNCwxLDAsMCwKKyAgICAxMTQsMTcwLDAsMCwwLDExNCwyMjEsMCwwLDAsNDEsMywxMTQsNzEsMCwwLAorICAgIDAsMTE0LDE1OSwwLDAsMCwxMTQsMTc4LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwxNjYsMCwwLDAsMjA3LAorICAgIDcsMCwwLDExNSw4LDAsMCwwLDAsNywxNSwxLDEyLDEsMTAsMSwKKyAgICAxMjIsMjIsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMDIsMTA1LDExMCwKKyAgICAxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5OSw2LDAsMCwwLDAsMCwwLAorICAgIDAsNywwLDAsMCw3LDAsMCwwLDY3LDAsMCwwLDExNSw0MCwwLAorICAgIDAsMCwxMjQsMSwwLDEyNCwyLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw2LAorICAgIDAsMTE2LDAsMCwxMjQsMiwwLDEyNCwzLDAsMTAwLDEsMCwxMjQsNiwwLAorICAgIDEwMCwyLDAsMTI0LDQsMCwxMzEsMiwyLDgzLDQxLDMsNzgsMTE0LDE3MCwwLAorICAgIDAsMCwxMTQsMjIxLDAsMCwwLDQxLDEsMTE0LDI0MCwwLDAsMCw0MSw3LAorICAgIDExNCw3MSwwLDAsMCwxMTQsMjQ0LDAsMCwwLDExNCwxNTksMCwwLDAsMTE0LAorICAgIDM1LDAsMCwwLDExNCwyMjksMCwwLDAsMTE0LDEzLDEsMCwwLDExNCwxNzAsCisgICAgMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwKKyAgICAwLDAsMTE0LDg2LDEsMCwwLDIxOSw3LDAsMCwxMTUsNiwwLDAsMCwKKyAgICAwLDEsMTUsMSwxOCwxLDEyMiwyMCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKKyAgICAxMDEsMTE0LDQ2LDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTIsMTAxLDk5LDc4LDk5LDMsMCwKKyAgICAwLDAsMCwwLDAsMCwxNCwwLDAsMCwxNSwwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsMjQwLDEsMCwwLDEwMCwxLDAsMTI1LDMsMCwxMjQsMSwwLAorICAgIDEwNiwwLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwzLDAsMjUsMTI1LDQsMCwKKyAgICAxMjEsMzQsMCwxMTYsMSwwLDEyNCwwLDAsMTA2LDIsMCwxMTIsNDksMCwxMTYsCisgICAgMywwLDEwNiw0LDAsMTMxLDAsMCwxMzEsMSwwLDEwNiw1LDAsMTI1LDUsCisgICAgMCw4NywxMTAsMjQsMCw0LDExNiw2LDAsMTA3LDEwLDAsMTE0LDg1LDAsMSwKKyAgICAxLDEsMTAwLDEwLDAsMTI1LDUsMCw4OSwxMTAsMSwwLDg4LDEyNCw1LDAsCisgICAgMTI0LDAsMCwxMDYsNywwLDEwNywzLDAsMTE0LDEyMywwLDEyNCwwLDAsMTA2LAorICAgIDgsMCwxMzEsMCwwLDEsMTI0LDUsMCwxMjQsMCwwLDk1LDcsMCwxMTAsCisgICAgMCwwLDExNiw5LDAsMTMxLDAsMCwxMTQsMTU2LDAsMTI0LDAsMCwxMDYsMTAsCisgICAgMCwxMjUsNiwwLDEyNCw0LDAsMTA2LDExLDAsMTMxLDAsMCwxMjUsNywwLAorICAgIDExMCwxNSwwLDEyNCwwLDAsMTA2LDEyLDAsMTI1LDYsMCwxMjQsNCwwLDEyNSwKKyAgICA3LDAsMTI0LDcsMCwxMjQsNiwwLDEwNyw2LDAsMTE0LDUxLDEsMTE2LDEzLAorICAgIDAsMTI0LDAsMCwxMDYsMiwwLDEyNCw0LDAsMTMxLDIsMCwxMjUsOCwwLAorICAgIDEyMCwxMDMsMCwxMjQsMCwwLDEwNiwxNCwwLDY4LDkzLDc3LDAsOTIsMiwwLAorICAgIDEyNSw5LDAsMTI1LDEwLDAsMTAwLDUsMCwxMjQsOSwwLDIzLDEyNSwxMSwwLAorICAgIDExNiwxMywwLDEyNCw4LDAsMTI0LDExLDAsMTMxLDIsMCwxMjUsMTIsMCwxMTYsCisgICAgMTUsMCwxMjQsMTIsMCwxMzEsMSwwLDExNCwyMTEsMCwxMjQsMCwwLDEwNiwxNiwKKyAgICAwLDEyNCwxMCwwLDEyNCwxLDAsMTI0LDEyLDAsMTI0LDgsMCwxMDMsMSwwLAorICAgIDEyNCwyLDAsMTMxLDUsMCw4MywxMTMsMjExLDAsODcsMTE2LDE3LDAsMTI0LDgsCisgICAgMCwxMzEsMSwwLDEyNSwzLDAsMTEwLDAsMCwxMjAsMTI2LDAsMTI0LDAsMCwKKyAgICAxMDYsMTQsMCw2OCw5MywxMTUsMCw5MiwyLDAsMTI1LDksMCwxMjUsMTAsMCwKKyAgICAxMTYsMTMsMCwxMjQsMCwwLDEwNiwyLDAsMTI0LDQsMCwxMjQsOSwwLDIzLAorICAgIDEzMSwyLDAsMTI1LDEyLDAsMTE2LDE4LDAsMTAwLDYsMCwxMDYsMTksMCwxMjQsCisgICAgMTIsMCwxMzEsMSwwLDEwMCw3LDAsMTAwLDMsMCwxMzEsMSwxLDEsMTI0LAorICAgIDcsMCwxMjQsOSwwLDIzLDEyNCw2LDAsMTA3LDYsMCwxMTQsNjEsMSwxMTYsCisgICAgMTUsMCwxMjQsMTIsMCwxMzEsMSwwLDExNCwxNzYsMSwxMjQsMCwwLDEwNiwxNiwKKyAgICAwLDEyNCwxMCwwLDEyNCwxLDAsMTI0LDEyLDAsMTAwLDgsMCwxMjQsMiwwLAorICAgIDEzMSw1LDAsODMsMTEzLDYxLDEsMTEzLDYxLDEsODcsMTI0LDMsMCwxMTQsMjM2LAorICAgIDEsMTE2LDE4LDAsMTAwLDksMCwxMDYsMTksMCwxMjQsOCwwLDEzMSwxLDAsCisgICAgMTMxLDEsMCwxLDExNiwyMCwwLDEyNCwxLDAsMTAwLDgsMCwxMzEsMiwwLAorICAgIDEyNSwxMywwLDEyNCw4LDAsMTAzLDEsMCwxMjQsMTMsMCw5NSwyMSwwLDEyNCwKKyAgICAxMywwLDgzLDEwMCw4LDAsODMsNDEsMTEsMTIyLDEyNSw4NCwxMTQsMTIxLDMyLDExNiwKKyAgICAxMTEsMzIsMTAyLDEwNSwxMTAsMTAwLDMyLDk3LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMzIsCisgICAgMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLAorICAgIDEwMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NCwzMiwxMTEsMTE0LDMyLDExNiwxMDQsMTAxLAorICAgIDMyLDExMCw5NywxMDksMTAxLDExNSwxMTIsOTcsOTksMTAxLDEwLDMyLDMyLDMyLDMyLDMyLAorICAgIDMyLDMyLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTIsMTExLDExNCwxMTYsMTA1LAorICAgIDExMSwxMTAsMTE1LDQ2LDMyLDgyLDEwMSwxMTYsMTE3LDExNCwxMTAsMTE1LDMyLDQwLDEwOCwxMTEsCisgICAgOTcsMTAwLDEwMSwxMTQsNDQsMzIsMTA4LDEwNSwxMTUsMTE2LDQ1LDExMSwxMDIsNDUsMTEyLDExMSwKKyAgICAxMTQsMTE2LDEwNSwxMTEsMTEwLDExNSw0MSw0Niw3MCwxMTQsMTE2LDAsMCwwLDExNCwxMTUsCisgICAgMCwwLDAsMTE0LDI5LDAsMCwwLDExNCw3MiwwLDAsMCwxMjIsOSwxMTYsCisgICAgMTE0LDEyMSwxMDUsMTEwLDEwMywzMiwxMjMsMTI1LDExNCwxNDYsMCwwLDAsNzgsMTIyLDI1LAorICAgIDExMiwxMTEsMTE1LDExNSwxMDUsOTgsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwxMTUsMTEyLDk3LAorICAgIDk5LDEwMSwzMiwxMDIsMTExLDExNCwzMiwxMjMsMTI1LDExNCwxMzksMCwwLDAsNDEsMjIsCisgICAgMTE0LDMyLDAsMCwwLDExNCwzOSwwLDAsMCwxMTQsMzUsMCwwLDAsMTE0LAorICAgIDMsMCwwLDAsMTE0LDQ1LDAsMCwwLDExNCw1NCwxLDAsMCwxMTQsNDAsCisgICAgMCwwLDAsMTE0LDg5LDEsMCwwLDIxOCwxMSw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsCisgICAgOTksOTcsOTksMTA0LDEwMSwxMTQsNiwwLDAsMCwxMTQsOTIsMSwwLDAsMTE0LAorICAgIDE0MCwwLDAsMCwxMTQsOTEsMSwwLDAsMTE0LDI4LDAsMCwwLDExNCw4OCwKKyAgICAxLDAsMCwxMTQsNDQsMCwwLDAsMTE0LDg2LDEsMCwwLDExNCw0NiwwLAorICAgIDAsMCwxMTQsMTUzLDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMjE3LDAsMCwKKyAgICAwLDExNCwyMjEsMCwwLDAsNDEsMTQsMTE0LDcxLDAsMCwwLDExNCwxNTksMCwKKyAgICAwLDAsMTE0LDEzLDEsMCwwLDkwLDEyLDEwNSwxMTUsOTUsMTEwLDk3LDEwOSwxMDEsCisgICAgMTE1LDExMiw5Nyw5OSwxMDEsOTAsMTEsMTE2LDk3LDEwNSwxMDgsOTUsMTA5LDExMSwxMDAsMTE3LAorICAgIDEwOCwxMDEsMTE0LDE4NCwwLDAsMCw5MCw1LDk5LDk3LDk5LDEwNCwxMDEsOTAsMTIsCisgICAgOTksOTcsOTksMTA0LDEwMSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCw5LDk4LDk3LAorICAgIDExNSwxMDEsOTUsMTEyLDk3LDExNiwxMDQsMTE0LDU4LDEsMCwwLDExNCwyNDQsMCwwLAorICAgIDAsOTAsMTMsMTA1LDExMCwxMDUsMTE2LDk1LDEwMiwxMDUsMTA4LDEwMSwxMTAsOTcsMTA5LDEwMSwKKyAgICA5MCw5LDEwMiwxMTcsMTA4LDEwOCw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTc4LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCwKKyAgICAxNCwxLDAsMCwyMjQsNywwLDAsMTE1LDY4LDAsMCwwLDAsMyw2LAorICAgIDEsMTksMSwzLDEsMzQsMSwxMywxLDExLDEsMTUsMSwxMCwxLDEyLAorICAgIDIsOSwxLDksMSwxNSwyLDksMSw2LDIsMTIsMSwxOCwxLDIyLAorICAgIDEsMTAsMSwxNSwxLDEyLDEsMzIsNCwxNSwyLDIyLDEsMjIsMSwyNSwKKyAgICAxLDE2LDEsMTIsMSwzMiwxLDYsMSwxOSwxLDE1LDEsMTIsMSw0LAorICAgIDEsMTIyLDIwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTAyLDEwNSwKKyAgICAxMTAsMTAwLDk1LDExNSwxMTIsMTAxLDk5LDk5LDEsMCwwLDAsMCwwLDAsMCwKKyAgICA5LDAsMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwxNCwxLDAsCisgICAgMCwxMjQsMCwwLDEwNiwwLDAsMTI1LDEsMCwxMjEsMzEsMCwxMTYsMSwwLAorICAgIDEwNiwyLDAsMTI0LDEsMCwxMTIsMzMsMCwxMTYsMSwwLDEwNiwzLDAsMTMxLAorICAgIDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTEwLDMzLDAsNCwxMTYsNCwwLAorICAgIDExNiw1LDAsMTE2LDYsMCwxMDIsMywwLDEwNywxMCwwLDExNCw3NSwwLDEsCisgICAgMSwxLDEwMywwLDAsMTI1LDIsMCw4OSwxMTAsMSwwLDg4LDExNiw3LDAsCisgICAgMTA2LDgsMCwxMDYsOSwwLDEwMCwxLDAsMTMxLDEsMCwxMTUsMTEyLDAsMTE2LAorICAgIDEwLDAsMTI0LDIsMCwxMzEsMSwwLDEyNCwwLDAsOTUsMTEsMCwxMTAsMTExLAorICAgIDAsMTE2LDEwLDAsMTMxLDAsMCwxMjUsMywwLDEyMCw5MCwwLDEyNCwyLDAsCisgICAgNjgsOTMsODIsMCwxMjUsNCwwLDEyNCw0LDAsMTA2LDEyLDAsMTAwLDIsMCwKKyAgICAxMzEsMSwwLDkyLDMsMCwxMjUsNSwwLDEyNSw2LDAsMTI1LDcsMCwxMjQsCisgICAgNiwwLDExNCwxOTEsMCwxMDAsMywwLDEwNiwxMywwLDEyNCw1LDAsMTI0LDcsCisgICAgMCwxMDYsMTQsMCwxMzEsMCwwLDEzMSwyLDAsMTI1LDgsMCwxMTAsNiwwLAorICAgIDEyNCw1LDAsMTI1LDgsMCwxMjQsMywwLDEwNiwxNSwwLDEyNCw4LDAsMTMxLAorICAgIDEsMCwxLDExMywxMjgsMCw4NywxMjQsMywwLDEyNCwwLDAsOTUsMTEsMCwKKyAgICAxMTYsNywwLDEwNiw4LDAsMTA2LDksMCwxMTYsMTYsMCwxMzEsMSwwLDExNCwKKyAgICAxMCwxLDEwMCw0LDAsMTAwLDUsMCwxMzIsMCwwLDEyNCwyLDAsNjgsMTMxLAorICAgIDEsMCwxMjQsMCwwLDk1LDE3LDAsMTEwLDAsMCwxMDAsNiwwLDgzLDQxLAorICAgIDcsMTIyLDY4LDcwLDEwNSwxMDgsMTA4LDMyLDExNiwxMDQsMTAxLDMyLDk5LDk3LDk5LDEwNCwKKyAgICAxMDEsMzIsMTExLDEwMiwzMiwxMTIsMTExLDExNiwxMDEsMTEwLDExNiwxMDUsOTcsMTA4LDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDExNSwzMiw5NywxMTAsMTAwLDMyLDExMiw5Nyw5OSwxMDcsOTcsCisgICAgMTAzLDEwMSwxMTUsMzIsMTAyLDExMSwxMTQsMzIsMTE2LDEwNCwxMDUsMTE1LDMyLDEwMCwxMDUsMTE0LAorICAgIDEwMSw5OSwxMTYsMTExLDExNCwxMjEsNDYsMTE0LDAsMCwwLDAsMTE0LDExNiwwLDAsCisgICAgMCwxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsOTksMSwwLDAsMCwwLDAsMCwKKyAgICAwLDIsMCwwLDAsMywwLDAsMCw4MywwLDAsMCwxMTUsMjgsMCwKKyAgICAwLDAsMTA0LDAsMCwxMjQsMCwwLDkzLDE4LDAsMTI1LDEsMCwxMjQsMSwKKyAgICAwLDEwNiwwLDAsMTMxLDAsMCwxNDYsMiwwLDExMyw2LDAsODMsMTE0LDQsCisgICAgMCwwLDAsNDEsMSwxMTQsMTQwLDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwKKyAgICAwLDkwLDIsMTAyLDExMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwyNTAsOSw2MCwxMTUsMTAxLDExNiw5OSwxMTEsMTA5LDExMiw2Miw0MiwKKyAgICA4LDAsMCwxMTUsMiwwLDAsMCw5LDAsMTIyLDQxLDcwLDEwNSwxMDgsMTAxLAorICAgIDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsMTAyLDEwNSwxMDgsMTA4LDk1LDk5LDk3LDk5LAorICAgIDEwNCwxMDEsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LDYwLDExNSwxMDEsMTE2LAorICAgIDk5LDExMSwxMDksMTEyLDYyLDc4LDQxLDE4LDExNCwzNSwwLDAsMCwxMTQsMywwLAorICAgIDAsMCw5MCw3LDEwOCwxMDUsMTE1LDExNiwxMDAsMTA1LDExNCwxMTQsNDUsMCwwLDAsCisgICAgMjE4LDE3LDcwLDEwNSwxMDgsMTAxLDc4LDExMSwxMTYsNzAsMTExLDExNywxMTAsMTAwLDY5LDExNCwKKyAgICAxMTQsMTExLDExNCwyMTgsMTUsODAsMTAxLDExNCwxMDksMTA1LDExNSwxMTUsMTA1LDExMSwxMTAsNjksCisgICAgMTE0LDExNCwxMTEsMTE0LDIxOCwxOCw3OCwxMTEsMTE2LDY1LDY4LDEwNSwxMTQsMTAxLDk5LDExNiwKKyAgICAxMTEsMTE0LDEyMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDcsMCwwLDAsMTE0LDgsMCwKKyAgICAwLDAsMTE0LDksMCwwLDAsMTE0LDkwLDEsMCwwLDExNCw5MSwxLDAsCisgICAgMCwxMTQsMTM0LDAsMCwwLDExNCw0NywwLDAsMCwxMTQsMTQwLDAsMCwwLAorICAgIDIxOCwzLDk3LDEwMCwxMDAsMTE0LDEwLDAsMCwwLDExNCw5MiwxLDAsMCw0MSwKKyAgICA5LDExNCw3MSwwLDAsMCwxMTQsMzUsMCwwLDAsOTAsOCw5OSwxMTEsMTEwLAorICAgIDExNiwxMDEsMTEwLDExNiwxMTUsOTAsMjEsMTA4LDExMSwxMTksMTAxLDExNCw5NSwxMTUsMTE3LDEwMiwKKyAgICAxMDIsMTA1LDEyMCw5NSw5OSwxMTEsMTEwLDExNiwxMDEsMTEwLDExNiwxMTUsMTE0LDcyLDEsMCwKKyAgICAwLDExNCw2NywwLDAsMCwxMTQsNjYsMSwwLDAsMTE0LDU4LDEsMCwwLAorICAgIDkwLDgsMTEwLDEwMSwxMTksOTUsMTEwLDk3LDEwOSwxMDEsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDk0LDEsMCwwLDEzLDgsCisgICAgMCwwLDExNSwzNCwwLDAsMCwwLDIsOSwxLDMsMSwzMSwxLDIyLAorICAgIDMsMTEsMywxOCwxLDE4LDcsOSwxLDEzLDEsMjQsMSw2LDEsMjcsCisgICAgMiw2LDEsMTcsMSw5LDEsMTgsMSwxMjIsMjIsNzAsMTA1LDEwOCwxMDEsNzAsCisgICAgMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwxMDIsMTA1LDEwOCwxMDgsOTUsOTksOTcsOTksMTA0LAorICAgIDEwMSw5OSwxLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsCisgICAgMCwwLDcsMCwwLDAsMTE1LDI1LDAsMCwwLDEzNSwwLDAsMTM1LDEsCisgICAgMCwxMDIsMiwwLDEwMCwxLDAsMTAwLDIsMCwxMzQsMCwwLDEyNSwyLDAsCisgICAgMTI0LDIsMCw4Myw0MSwzLDk3LDIwLDEsMCwwLDY1LDMyLDk5LDEwOCw5NywKKyAgICAxMTUsMTE1LDMyLDEwOSwxMDEsMTE2LDEwNCwxMTEsMTAwLDMyLDExOSwxMDQsMTA1LDk5LDEwNCwzMiwKKyAgICAxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsOTksMTA4LDExMSwxMTUsMTE3LDExNCwKKyAgICAxMDEsMzIsMTE2LDExMSwzMiwxMTcsMTE1LDEwMSwzMiwxMTEsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LAorICAgIDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNywxMCwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE5LDEwNSwxMDgsMTA4LDMyLDExNCwxMDEsMTE2LAorICAgIDExNywxMTQsMTEwLDMyLDk3LDExMCwzMiwxMDUsMTEwLDExNSwxMTYsOTcsMTEwLDk5LDEwMSwzMiwKKyAgICAxMTcsMTE1LDEwNSwxMTAsMTAzLDMyLDExNiwxMDQsMTAxLDMyLDExNSwxMTIsMTAxLDk5LDEwNSwxMDIsCisgICAgMTA1LDEwMSwxMDAsMzIsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsMzIsOTcsMTEwLDEwMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMTIsOTcsMTE2LDEwNCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw5OSw5NywxMDgsMTA4LDEwMSwxMDAsMzIsMTExLDExMCwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKKyAgICAxMDgsMTExLDExNSwxMTcsMTE0LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwKKyAgICAzMiw3MywxMDIsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDExNiwxMDQsMzIsOTksOTcsMTA4LAorICAgIDEwOCwxMDEsMTAwLDMyLDExMSwxMTAsMzIsMTE2LDEwNCwxMDEsMzIsOTksMTA4LDExMSwxMTUsMTE3LAorICAgIDExNCwxMDEsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwzMiw5NywzMiwxMDAsMTA1LDExNCwxMDEsCisgICAgOTksMTE2LDExMSwxMTQsMTIxLDQ0LDMyLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwKKyAgICAxMTEsMTE0LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMzIsMTE0LDk3LAorICAgIDEwNSwxMTUsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwzMiwzMiwzMiwzMiw5OSwKKyAgICAxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCw0LDAsMCwwLAorICAgIDE5LDAsMCwwLDExNSw0NiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTMxLAorICAgIDEsMCwxMTUsMzMsMCwxMTYsMSwwLDEwMCwxLDAsMTAwLDIsMCwxMjQsMCwKKyAgICAwLDEzMSwxLDEsMTMwLDEsMCwxMTAsMCwwLDEzNiwwLDAsMTI0LDAsMCwKKyAgICAxMzYsMSwwLDE0MCwxLDAsODMsNDEsMywxMjIsNDUsODAsOTcsMTE2LDEwNCwzMiwKKyAgICAxMDQsMTExLDExMSwxMDcsMzIsMTAyLDExMSwxMTQsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LAorICAgIDEwNSw5OCw0NiwxMDksOTcsOTksMTA0LDEwNSwxMTAsMTAxLDExNCwxMjEsNDYsNzAsMTA1LDEwOCwKKyAgICAxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0NiwxMjIsMzAsMTExLDExMCwxMDgsMTIxLDMyLDEwMCwKKyAgICAxMDUsMTE0LDEwMSw5OSwxMTYsMTExLDExNCwxMDUsMTAxLDExNSwzMiw5NywxMTQsMTAxLDMyLDExNSwKKyAgICAxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDExNCwzNSwwLDAsMCw0MSwyLDExNCwKKyAgICA0NiwwLDAsMCwxMTQsMTU0LDAsMCwwLDQxLDEsMTE0LDM1LDAsMCwwLAorICAgIDQxLDIsMTE0LDEyLDEsMCwwLDExNCw5MywxLDAsMCwxMTQsNCwwLDAsCisgICAgMCwxMTQsNSwwLDAsMCwyMTgsMjQsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsCiAgICAgMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsCi0gICAgNDAsMCwwLDAsMCw0MCwzLDAsMCwwLDExNywzLDAsMCwwLDk5LAotICAgIDEwOCwxMTUsMTE3LDE0LDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsMTAwLDEwMSwKLSAgICAxMTYsOTcsMTA1LDEwOCwxMTUsMTE3LDI0LDAsMCwwLDExMiw5NywxMTYsMTA0LDk1LDEwNCwKLSAgICAxMTEsMTExLDEwNyw5NSwxMDIsMTExLDExNCw5NSw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwKLSAgICAxMDEsMTE0LDQwLDAsMCwwLDAsNDAsMiwwLDAsMCwxMTcsMywwLDAsCi0gICAgMCw5OSwxMDgsMTE1LDExNywxNCwwLDAsMCwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LAotICAgIDEwMCwxMDEsMTE2LDk3LDEwNSwxMDgsMTE1LDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LAotICAgIDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOSwwLDAsMCwxMTIsOTcsCi0gICAgMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTQ1LDUsMCwwLDExNSw0LDAsMCwwLAotICAgIDAsMTAsMjEsNiwxMTcsMjAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwKLSAgICAxMDAsMTAxLDExNCw0NiwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsOTksMSwwLAotICAgIDAsMCwwLDAsMCwwLDEsMCwwLDAsMiwwLDAsMCw2NywwLAotICAgIDAsMCwxMTUsMTQsMCwwLDAsMTAwLDEsMCwxMjQsMCwwLDEwNiwwLDAsCi0gICAgMTAyLDEsMCwyMiw4Myw0MCwyLDAsMCwwLDc4LDExNywxNCwwLDAsMCwKLSAgICA3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDM3LDExNCw0MSw0MCwxLAotICAgIDAsMCwwLDExNyw0LDAsMCwwLDExMiw5NywxMTYsMTA0LDQwLDEsMCwwLAotICAgIDAsMTE3LDQsMCwwLDAsMTE1LDEwMSwxMDgsMTAyLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTE0LDEwMSwxMTIsCi0gICAgMTE0LDk1LDk1LDE2Myw1LDAsMCwxMTUsMiwwLDAsMCwwLDEsMTE3LDE5LAotICAgIDAsMCwwLDcwLDEwNSwxMDgsMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsOTUsOTUsCi0gICAgMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDc4LDQwLDEzLDAsMCwwLDExNyw4LDAsMCwKLSAgICAwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywxMCwwLDAsMCw5NSw5NSwKLSAgICAxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSw5NSwxMTcsMTIsMCwwLDAsOTUsOTUsMTEzLAotICAgIDExNyw5NywxMDgsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDcsMCwwLDAsOTUsOTUsCi0gICAgMTAwLDExMSw5OSw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwxMDUsMTEwLDEwNSwxMTYsCi0gICAgOTUsOTUsMTE3LDE3LDAsMCwwLDEwNSwxMTAsMTE4LDk3LDEwOCwxMDUsMTAwLDk3LDExNiwKLSAgICAxMDEsOTUsOTksOTcsOTksMTA0LDEwMSwxMTUsMTE3LDE3LDAsMCwwLDk1LDEwMiwxMDUsCi0gICAgMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMTUsMTA0LDEwNSwxMDksMTE3LDExLAotICAgIDAsMCwwLDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTEsCi0gICAgMCwwLDAsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDExLAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTA4LDEwOCw5NSw5OSw5Nyw5OSwxMDQsMTAxLDExNywxMSwKLSAgICAwLDAsMCw5OSwxMDgsOTcsMTE1LDExNSwxMDksMTAxLDExNiwxMDQsMTExLDEwMCwxMTcsOSwKLSAgICAwLDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE3LDgsMCwwLAotICAgIDAsOTUsOTUsMTE0LDEwMSwxMTIsMTE0LDk1LDk1LDQwLDEsMCwwLDAsMTE3LDEwLAotICAgIDAsMCwwLDk1LDk1LDEwOCwxMTEsOTksOTcsMTA4LDExNSw5NSw5NSw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMCwwLDAsMCw3MCwxMDUsCi0gICAgMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQxLDUsMCwwLDExNSwxNiwwLDAsCi0gICAgMCwxNiw3LDYsMiwxMiwxNCwxMiw0LDYsMiwxMiw0NCwxMiwzMSwxOCwKLSAgICAxOCwxMTcsMTAsMCwwLDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwKLSAgICA5OSwxLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwyLDAsMCwKLSAgICAwLDY2LDAsMCwwLDExNSw1MCwwLDAsMCwxMjQsMCwwLDY5LDEwMSwwLAotICAgIDAsOTAsMSwwLDEwMCwwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLAotICAgIDEwMCwyLDAsMTAwLDMsMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCwKLSAgICA1LDAsMTMyLDAsMCw5MCw1LDAsMTAwLDYsMCw4Myw0MCw3LDAsMCwKLSAgICAwLDExNywxOCwwLDAsMCw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwKLSAgICAxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTE3LDM2LDAsMCwwLDY3LDExMSwxMTAsCi0gICAgMTE2LDEwMSwxMjAsMTE2LDMyLDEwOSw5NywxMTAsOTcsMTAzLDEwMSwxMTQsMzIsMTAyLDExMSwxMTQsCi0gICAgMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsCi0gICAgNDYsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsMSwwLAotICAgIDAsMCw2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwKLSAgICAwLDEzMSwwLDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDI0LAotICAgIDAsMCwwLDY1LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDAsMiwwLDAsCi0gICAgMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLDAsOTcsCi0gICAgOTksMTEzLDExNywxMDUsMTE0LDEwMSw5NSwxMDgsMTExLDk5LDEwNyw0MCwxLDAsMCwwLAotICAgIDExNyw0LDAsMCwwLDExNSwxMDEsMTA4LDEwMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwKLSAgICAxMTQsOTUsOTUsMTczLDUsMCwwLDExNSwyLDAsMCwwLDAsMiwxMTcsMjgsCi0gICAgMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwKLSAgICAxMTAsMTE2LDEwMSwxMjAsMTE2LDQ2LDk1LDk1LDEwMSwxMTAsMTE2LDEwMSwxMTQsOTUsOTUsOTksCi0gICAgNCwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMSwwLDAsMCwKLSAgICA2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwxMDYsMSwwLDEzMSwKLSAgICAwLDAsMSwxMDAsMSwwLDgzLDQwLDIsMCwwLDAsMTE3LDYwLDAsMCwKLSAgICAwLDgyLDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsMzIsMTE0LDEwMSwxMDMsOTcsMTE0LDEwMCwxMDgsCi0gICAgMTAxLDExNSwxMTUsMzIsMTExLDEwMiwzMiw5NywxMTAsMTIxLDMyLDExNCw5NywxMDUsMTE1LDEwMSwKLSAgICAxMDAsMzIsMTAxLDEyMCw5OSwxMDEsMTEyLDExNiwxMDUsMTExLDExMCwxMTUsNDYsNzgsNDAsMiwKLSAgICAwLDAsMCwxMTcsNCwwLDAsMCw5NSwxMDUsMTA5LDExMiwxMTcsMTIsMCwwLAotICAgIDAsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsOTUsMTA4LDExMSw5OSwxMDcsNDAsNCwwLAotICAgIDAsMCwxMTcsNCwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsMTE3LDgsMCwwLDAsCi0gICAgMTAxLDEyMCw5OSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDksMCwwLDAsMTAxLDEyMCw5OSwKLSAgICA5NSwxMTgsOTcsMTA4LDExNywxMDEsMTE3LDEzLDAsMCwwLDEwMSwxMjAsOTksOTUsMTE2LAotICAgIDExNCw5Nyw5OSwxMDEsOTgsOTcsOTksMTA3LDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsOTUsOTUsMTAxLDEyMCwxMDUsMTE2LDk1LAotICAgIDk1LDE3Nyw1LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTE3LDI3LDAsMCwKLSAgICAwLDk1LDczLDEwOSwxMTIsMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwKLSAgICAxMDEsMTIwLDExNiw0Niw5NSw5NSwxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNzgsNDAsNiwwLAotICAgIDAsMCwxMTcsOCwwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsCi0gICAgMTAsMCwwLDAsOTUsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsOTUsMTE3LDEyLAotICAgIDAsMCwwLDk1LDk1LDExMywxMTcsOTcsMTA4LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywKLSAgICA3LDAsMCwwLDk1LDk1LDEwMCwxMTEsOTksOTUsOTUsMTE3LDksMCwwLDAsCi0gICAgOTUsOTUsMTAxLDExMCwxMTYsMTAxLDExNCw5NSw5NSwxMTcsOCwwLDAsMCw5NSw5NSwKLSAgICAxMDEsMTIwLDEwNSwxMTYsOTUsOTUsNDAsMSwwLDAsMCwxMTcsMTAsMCwwLDAsCi0gICAgOTUsOTUsMTA4LDExMSw5OSw5NywxMDgsMTE1LDk1LDk1LDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE4LDAsMCwwLDk1LDczLDEwOSwxMTIsMTExLAotICAgIDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiwxNjksNSwwLAotICAgIDAsMTE1LDYsMCwwLDAsMTYsMiw2LDIsMTIsNCwxMTcsMTgsMCwwLAotICAgIDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LAotICAgIDEwMSwxMjAsMTE2LDk5LDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLAotICAgIDQsMCwwLDAsNjcsMCwwLDAsMTE1LDkxLDAsMCwwLDEyNCwxLDAsCi0gICAgMTA2LDAsMCwxMDAsMSwwLDEyNCwyLDAsMTAwLDIsMCwyNCwxMzEsMiwwLAotICAgIDEyNSwzLDAsMTE2LDEsMCwxMjQsMywwLDEzMSwxLDAsMTI0LDIsMCwxMDcsCi0gICAgMCwwLDExNCw1NSwwLDExNiwyLDAsMTAwLDMsMCwxMzEsMSwwLDEzMCwxLAotICAgIDAsMTEwLDAsMCwxMjQsMywwLDEwMCw0LDAsMjUsMTI1LDQsMCwxMjQsMCwKLSAgICAwLDExNCw4NywwLDEwMCw1LDAsMTA2LDMsMCwxMjQsNCwwLDEyNCwwLDAsCi0gICAgMTMxLDIsMCw4MywxMjQsNCwwLDgzLDQwLDYsMCwwLDAsMTE3LDUwLDAsCi0gICAgMCwwLDgyLDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDMyLDk3LDMyLDExNCwxMDEsMTA4LDk3LAotICAgIDExNiwxMDUsMTE4LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMTAsOTcsMTA5LDEwMSwKLSAgICAzMiwxMTYsMTExLDMyLDk3LDExMCwzMiw5Nyw5OCwxMTUsMTExLDEwOCwxMTcsMTE2LDEwMSwzMiwKLSAgICAxMTEsMTEwLDEwMSw0NiwxMTcsMSwwLDAsMCw0NiwxMDUsMSwwLDAsMCwxMTcsCi0gICAgNTAsMCwwLDAsOTcsMTE2LDExNiwxMDEsMTA5LDExMiwxMTYsMTAxLDEwMCwzMiwxMTQsMTAxLAotICAgIDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTgsMTAxLAotICAgIDEyMSwxMTEsMTEwLDEwMCwzMiwxMTYsMTExLDExMiw0NSwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDExMiwKLSAgICA5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMDUsMCwwLDAsMCwxMTcsNSwwLDAsMCwKLSAgICAxMjMsMTI1LDQ2LDEyMywxMjUsNDAsNCwwLDAsMCwxMTcsNiwwLDAsMCwxMTQsCi0gICAgMTE1LDExMiwxMDgsMTA1LDExNiwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsMTAsMCwKLSAgICAwLDAsODYsOTcsMTA4LDExNywxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNyw2LDAsMCwKLSAgICAwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsNDAsNSwwLDAsMCwxMTcsNCwwLDAsCi0gICAgMCwxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LDEwMywKLSAgICAxMDEsMTE3LDUsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwxMTcsNCwwLDAsMCwKLSAgICA5OCwxMDUsMTE2LDExNSwxMTcsNCwwLDAsMCw5OCw5NywxMTUsMTAxLDQwLDAsMCwKLSAgICAwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsCi0gICAgMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwKLSAgICAxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEzLDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxODIsNSwwLDAsMTE1LAotICAgIDEwLDAsMCwwLDAsMiwyMiwxLDE4LDEsMTUsMSwxMCwxLDExNywxMywKLSAgICAwLDAsMCw5NSwxMTQsMTAxLDExNSwxMTEsMTA4LDExOCwxMDEsOTUsMTEwLDk3LDEwOSwxMDEsCi0gICAgOTksMiwwLDAsMCwwLDAsMCwwLDQsMCwwLDAsMTEsMCwwLAotICAgIDAsNjcsMCwwLDAsMTE1LDEzOCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsCi0gICAgMTE1LDI4LDAsMTE2LDIsMCwxMDYsMywwLDEwMCwxLDAsMTE2LDQsMCwxMzEsCi0gICAgMiwwLDEsMTEwLDAsMCwxMjAsMTAzLDAsMTE2LDAsMCwxMDYsMSwwLDY4LAotICAgIDkzLDg4LDAsMTI1LDIsMCwxMTYsNSwwLDEzMSwwLDAsMTQzLDIzLDAsMSwKLSAgICAxMjQsMiwwLDEwNiw2LDAsMTI0LDAsMCwxMjQsMSwwLDEzMSwyLDAsMTI1LAotICAgIDMsMCw4NywxMDAsMiwwLDgxLDg4LDEyNCwzLDAsMTAwLDIsMCwxMDcsOSwKLSAgICAwLDExNCwzOCwwLDEyNCwwLDAsMTE2LDAsMCwxMDYsOCwwLDEwNyw3LDAsCi0gICAgMTE0LDEwOSwwLDEyNCwzLDAsODMsMTE2LDAsMCwxMDYsOCwwLDEyNCwwLDAsCi0gICAgMjUsMTA2LDksMCw4MywxMTMsMzgsMCwxMTMsMzgsMCw4NywxMDAsMiwwLDgzLAotICAgIDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsMjMsMCwwLDAsNzAsMTA1LAotICAgIDExMCwxMDAsMzIsOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsNDYsMTE3LDIyLDAsMCwwLDExNSwxMjEsMTE1LDQ2LDEwOSwxMDEsCi0gICAgMTE2LDk3LDk1LDExMiw5NywxMTYsMTA0LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSwKLSAgICA3OCw0MCwxMCwwLDAsMCwxMTcsMywwLDAsMCwxMTUsMTIxLDExNSwxMTcsOSwKLSAgICAwLDAsMCwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwxMTcsOSwwLDAsCi0gICAgMCw5NSwxMTksOTcsMTE0LDExMCwxMDUsMTEwLDEwMywxMTUsMTE3LDQsMCwwLDAsMTE5LAotICAgIDk3LDExNCwxMTAsMTE3LDEzLDAsMCwwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsODcsOTcsCi0gICAgMTE0LDExMCwxMDUsMTEwLDEwMywxMTcsMTgsMCwwLDAsOTUsNzMsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw3NiwxMTEsOTksMTA3LDY3LDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDExNywxMSwwLDAsCi0gICAgMCwxMDIsMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLAotICAgIDAsNzgsMTExLDExMCwxMDEsMTE3LDcsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMTE1LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LAotICAgIDQwLDQsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwxMDEsMTE3LDQsCi0gICAgMCwwLDAsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsMTAyLDEwNSwxMTAsMTAwLAotICAgIDEwMSwxMTQsMTE3LDYsMCwwLDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0MCwwLDAsCi0gICAgMCwwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLAotICAgIDEyMiwxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsCi0gICAgMTExLDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywxMiwwLDAsMCw5NSwxMDIsCi0gICAgMTA1LDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTkxLDUsMCwwLDExNSwyMCwKLSAgICAwLDAsMCwwLDIsOSwxLDE5LDEsMTYsMSwxMCwxLDI0LDEsMTIsCi0gICAgMiwxNSwxLDQsMiwyMSwyLDExNywxMiwwLDAsMCw5NSwxMDIsMTA1LDExMCwKLSAgICAxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTksMywwLDAsMCwwLDAsMCwKKyAgICA1NCw4LDAsMCwxMTUsNiwwLDAsMCwwLDIsMTIsMSwyMSwxLDEyMiwKKyAgICA1NCw3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQ2LDExMiw5NywxMTYsMTA0LAorICAgIDk1LDEwNCwxMTEsMTExLDEwNyw0Niw2MCwxMDgsMTExLDk5LDk3LDEwOCwxMTUsNjIsNDYsMTEyLAorICAgIDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LDk1LDEwMiwxMTEsMTE0LDk1LDcwLDEwNSwxMDgsCisgICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsMTE0LDQsMCwwLDAsNDEsMywxMTQsMTIsCisgICAgMSwwLDAsMTE0LDkzLDEsMCwwLDExNCwxMDAsMSwwLDAsMTE0LDQsMCwKKyAgICAwLDAsNDEsMiwxMTQsMTIsMSwwLDAsMTE0LDkzLDEsMCwwLDExNCw1LAorICAgIDAsMCwwLDIxOCw5LDExMiw5NywxMTYsMTA0LDk1LDEwNCwxMTEsMTExLDEwNyw0NCw4LAorICAgIDAsMCwxMTUsNCwwLDAsMCwwLDEwLDIxLDYsMTIyLDIwLDcwLDEwNSwxMDgsCisgICAgMTAxLDcwLDEwNSwxMTAsMTAwLDEwMSwxMTQsNDYsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsCisgICAgMTA3LDk5LDEsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDIsMCwKKyAgICAwLDAsNjcsMCwwLDAsMTE1LDE2LDAsMCwwLDEwMCwxLDAsMTA2LDAsCisgICAgMCwxMjQsMCwwLDEwNiwxLDAsMTMxLDEsMCw4Myw0MSwyLDc4LDEyMiwxNiwKKyAgICA3MCwxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDEyMywzMywxMTQsMTI1LDQxLAorICAgIDQxLDIsMTE0LDQ3LDAsMCwwLDExNCwzNSwwLDAsMCw0MSwxLDExNCw3MSwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwxMTQsMTAxLDAsMCwwLDYyLDgsMCwwLDExNSwyLDAsMCwwLAorICAgIDAsMSwxMjIsMTksNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCw0Niw5NSwKKyAgICA5NSwxMTQsMTAxLDExMiwxMTQsOTUsOTUsNDEsMTUsMTE0LDU3LDAsMCwwLDExNCw1NiwKKyAgICAwLDAsMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3MiwwLAorICAgIDAsMCwxMTQsNzUsMSwwLDAsMTE0LDE3MywwLDAsMCwxMTQsMTUsMSwwLAorICAgIDAsMTE0LDE2NiwwLDAsMCwxMTQsODYsMSwwLDAsMTE0LDE0LDEsMCwwLAorICAgIDExNCw5NCwxLDAsMCwxMTQsMTksMSwwLDAsMTE0LDEwMSwxLDAsMCwxMTQsCisgICAgMTAxLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LAorICAgIDAsMCwwLDExNCw1LDAsMCwwLDExNCw4NywxLDAsMCwxNzgsNywwLAorICAgIDAsMTE1LDIwLDAsMCwwLDEyLDcsNiwyLDEyLDE0LDEyLDQsNiwyLAorICAgIDEyLDEyLDEyLDUsMTUsNDUsMTIsMzEsMTgsMTgsMTE0LDg3LDEsMCwwLDk5LAorICAgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsCisgICAgNjQsMCwwLDAsMTE1LDQ2LDAsMCwwLDEwMSwwLDAsOTAsMSwwLDEwMCwKKyAgICAwLDAsOTAsMiwwLDEwMCwxLDAsOTAsMywwLDEwMCwyLDAsMTAwLDMsCisgICAgMCwxMzIsMCwwLDkwLDQsMCwxMDAsNCwwLDEwMCw1LDAsMTMyLDAsMCwKKyAgICA5MCw1LDAsMTAwLDYsMCw4Myw0MSw3LDIxOCwxOCw5NSw3MywxMDksMTEyLDExMSwKKyAgICAxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsMTIyLDM2LDY3LAorICAgIDExMSwxMTAsMTE2LDEwMSwxMjAsMTE2LDMyLDEwOSw5NywxMTAsOTcsMTAzLDEwMSwxMTQsMzIsMTAyLAorICAgIDExMSwxMTQsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSwKKyAgICA5OSwxMDcsNDYsOTksMSwwLDAsMCwwLDAsMCwwLDEsMCwwLDAsCisgICAgMSwwLDAsMCw2NywwLDAsMCwxMTUsMTQsMCwwLDAsMTE2LDAsMCwKKyAgICAxMDYsMSwwLDEzMSwwLDAsMSwxMDAsMSwwLDgzLDQxLDIsMTIyLDI0LDY1LAorICAgIDk5LDExMywxMTcsMTA1LDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDEsMiwxMTQsMTA2LDAsMCwwLDExNCwKKyAgICA0LDEsMCwwLDQxLDEsMTE0LDcxLDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDExNCw3NSwwLDAsMCw3MiwKKyAgICA4LDAsMCwxMTUsMiwwLDAsMCwwLDIsMTIyLDI4LDk1LDczLDEwOSwxMTIsCisgICAgMTExLDExNCwxMTYsNzYsMTExLDk5LDEwNyw2NywxMTEsMTEwLDExNiwxMDEsMTIwLDExNiw0Niw5NSwKKyAgICA5NSwxMDEsMTEwLDExNiwxMDEsMTE0LDk1LDk1LDk5LDQsMCwwLDAsMCwwLDAsCisgICAgMCw0LDAsMCwwLDEsMCwwLDAsNjcsMCwwLDAsMTE1LDE0LDAsCisgICAgMCwwLDExNiwwLDAsMTA2LDEsMCwxMzEsMCwwLDEsMTAwLDEsMCw4MywKKyAgICA0MSwyLDEyMiw2MCw4MiwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDMyLDExNiwxMDQsMTAxLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOCwxMTEsOTksMTA3LDMyLDExNCwxMDEsMTAzLDk3LAorICAgIDExNCwxMDAsMTA4LDEwMSwxMTUsMTE1LDMyLDExMSwxMDIsMzIsOTcsMTEwLDEyMSwzMiwxMTQsOTcsCisgICAgMTA1LDExNSwxMDEsMTAwLDMyLDEwMSwxMjAsOTksMTAxLDExMiwxMTYsMTA1LDExMSwxMTAsMTE1LDQ2LAorICAgIDc4LDQxLDIsMTE0LDEwNiwwLDAsMCwxMTQsMTA3LDAsMCwwLDQxLDQsMTE0LAorICAgIDcxLDAsMCwwLDkwLDgsMTAxLDEyMCw5OSw5NSwxMTYsMTIxLDExMiwxMDEsOTAsOSwKKyAgICAxMDEsMTIwLDk5LDk1LDExOCw5NywxMDgsMTE3LDEwMSw5MCwxMywxMDEsMTIwLDk5LDk1LDExNiwKKyAgICAxMTQsOTcsOTksMTAxLDk4LDk3LDk5LDEwNywxMTQsNCwwLDAsMCwxMTQsNCwwLAorICAgIDAsMCwxMTQsNSwwLDAsMCwxMTQsODEsMCwwLDAsNzYsOCwwLDAsCisgICAgMTE1LDIsMCwwLDAsMCwyLDEyMiwyNyw5NSw3MywxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsNDYsOTUsOTUsMTAxLDEyMCwKKyAgICAxMDUsMTE2LDk1LDk1LDc4LDQxLDYsMTE0LDU3LDAsMCwwLDExNCw1NiwwLDAsCisgICAgMCwxMTQsNTgsMCwwLDAsMTE0LDU5LDAsMCwwLDExNCw3NSwwLDAsMCwKKyAgICAxMTQsODEsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDEwMiwxLDAsMCw2OCw4LAorICAgIDAsMCwxMTUsNiwwLDAsMCwxMiwyLDYsMiwxMiw0LDExNCwxMDIsMSwKKyAgICAwLDAsOTksMywwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNCwKKyAgICAwLDAsMCw2NywwLDAsMCwxMTUsOTEsMCwwLDAsMTI0LDEsMCwxMDYsCisgICAgMCwwLDEwMCwxLDAsMTI0LDIsMCwxMDAsMiwwLDI0LDEzMSwyLDAsMTI1LAorICAgIDMsMCwxMTYsMSwwLDEyNCwzLDAsMTMxLDEsMCwxMjQsMiwwLDEwNywwLAorICAgIDAsMTE0LDU1LDAsMTE2LDIsMCwxMDAsMywwLDEzMSwxLDAsMTMwLDEsMCwKKyAgICAxMTAsMCwwLDEyNCwzLDAsMTAwLDQsMCwyNSwxMjUsNCwwLDEyNCwwLDAsCisgICAgMTE0LDg3LDAsMTAwLDUsMCwxMDYsMywwLDEyNCw0LDAsMTI0LDAsMCwxMzEsCisgICAgMiwwLDgzLDEyNCw0LDAsODMsNDEsNiwxMjIsNTAsODIsMTAxLDExNSwxMTEsMTA4LAorICAgIDExOCwxMDEsMzIsOTcsMzIsMTE0LDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwOSwxMTEsCisgICAgMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExNiwxMTEsMzIsOTcsMTEwLDMyLAorICAgIDk3LDk4LDExNSwxMTEsMTA4LDExNywxMTYsMTAxLDMyLDExMSwxMTAsMTAxLDQ2LDExNCwxMTYsMCwKKyAgICAwLDAsMTE0LDI5LDAsMCwwLDEyMiw1MCw5NywxMTYsMTE2LDEwMSwxMDksMTEyLDExNiwKKyAgICAxMDEsMTAwLDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiwzMiw5OCwxMDEsMTIxLDExMSwxMTAsMTAwLDMyLDExNiwxMTEsMTEyLDQ1LDEwOCwxMDEsCisgICAgMTE4LDEwMSwxMDgsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNCw4NCwwLDAsMCwKKyAgICAxMjIsNSwxMjMsMTI1LDQ2LDEyMywxMjUsNDEsNCwxMTQsMzQsMCwwLDAsMTE0LDMxLAorICAgIDAsMCwwLDExNCwxMzMsMCwwLDAsMTE0LDQ3LDAsMCwwLDQxLDUsMTE0LAorICAgIDY3LDAsMCwwLDIxOCw3LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwyMTgsNSwxMDgsCisgICAgMTAxLDExOCwxMDEsMTA4LDkwLDQsOTgsMTA1LDExNiwxMTUsMTE0LDEyOCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTMsCisgICAgOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsMTAxLDk1LDExMCw5NywxMDksMTAxLDgxLDgsMCwKKyAgICAwLDExNSwxMCwwLDAsMCwwLDIsMjIsMSwxOCwxLDE1LDEsMTAsMSwKKyAgICAxMTQsMTA1LDEsMCwwLDk5LDMsMCwwLDAsMCwwLDAsMCw0LDAsCisgICAgMCwwLDMsMCwwLDAsNjcsMCwwLDAsMTE1LDQ3LDAsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDIsMCwxMjUsMywKKyAgICAwLDEyNCwzLDAsMTAwLDAsMCwxMDcsOCwwLDExNCwzNCwwLDEwMCwwLDAsCisgICAgODMsMTE2LDEsMCwxMjQsMSwwLDEyNCwzLDAsMTMxLDIsMCw4Myw0MSwxLAorICAgIDc4LDQxLDIsMTE0LDE1LDEsMCwwLDExNCwxNzQsMCwwLDAsNDEsNCwxMTQsCisgICAgNzgsMSwwLDAsMTE0LDY3LDAsMCwwLDExNCwzNSwwLDAsMCwxMTQsMTcwLAorICAgIDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsCisgICAgMCwwLDIxOCwxNyw5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTUsMTA4LAorICAgIDEwMSwxMDMsOTcsOTksMTIxLDkwLDgsMCwwLDExNSw4LDAsMCwwLDAsMywKKyAgICAxOCwxLDEyLDEsNCwxLDExNCwxMDYsMSwwLDAsOTksMywwLDAsMCwKKyAgICAwLDAsMCwwLDksMCwwLDAsMjYsMCwwLDAsNjcsMCwwLDAsCisgICAgMTE1LDM0LDEsMCwwLDExNiwwLDAsMTA2LDEsMCwxMTUsMjgsMCwxMTYsMiwKKyAgICAwLDEwNiwzLDAsMTAwLDEsMCwxMTYsNCwwLDEzMSwyLDAsMSwxMTAsMCwKKyAgICAwLDEyNCwwLDAsMTE2LDAsMCwxMDYsNSwwLDEwNyw2LDAsMTI1LDMsMCwKKyAgICAxMjAsMjQwLDAsMTE2LDAsMCwxMDYsMSwwLDY4LDkzLDIyNSwwLDEyNSw0LDAsCisgICAgMTE2LDYsMCwxMzEsMCwwLDE0Myw5MywwLDEsMTIxLDEzLDAsMTI0LDQsMCwKKyAgICAxMDYsNywwLDEyNSw1LDAsODcsMTEwLDU0LDAsNCwxMTYsOCwwLDEwNywxMCwKKyAgICAwLDExNCwxMzgsMCwxLDEsMSwxMTYsOSwwLDEyNCw0LDAsMTI0LDAsMCwKKyAgICAxMjQsMSwwLDEzMSwzLDAsMTI1LDYsMCwxMjQsNiwwLDEwMCwyLDAsMTA3LAorICAgIDgsMCwxMTQsMTM0LDAsMTE5LDUzLDAsMTEwLDAsMCw4OSwxMTAsMTksMCw4OCwKKyAgICAxMjQsNSwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEzMSwzLDAsMTI1LAorICAgIDYsMCw4NywxMDAsMiwwLDgxLDg4LDEyNCw2LDAsMTAwLDIsMCwxMDcsOSwKKyAgICAwLDExNCw1MywwLDEyNCwzLDAsMTIsMTE0LDE1LDEsMTI0LDAsMCwxMTYsMCwKKyAgICAwLDEwNiw1LDAsMTA3LDYsMCwxMTQsMTUsMSwxMTYsMCwwLDEwNiw1LDAsCisgICAgMTI0LDAsMCwyNSwxMjUsNywwLDEyMSwxMywwLDEyNCw3LDAsMTA2LDEwLDAsCisgICAgMTI1LDgsMCw4NywxMTAsMjIsMCw0LDExNiw4LDAsMTA3LDEwLDAsMTE0LDI0NywKKyAgICAwLDEsMSwxLDEyNCw2LDAsODMsODksMTEzLDE5LDEsODgsMTI0LDgsMCwKKyAgICAxMDAsMiwwLDEwNyw4LDAsMTE0LDgsMSwxMjQsNiwwLDgzLDEyNCw4LDAsCisgICAgODMsMTEzLDIyLDEsMTI0LDYsMCw4MywxMTMsNTMsMCwxMTMsNTMsMCw4NywxMDAsCisgICAgMiwwLDgzLDEwMCwyLDAsODMsNDEsMywxMjIsMjMsNzAsMTA1LDExMCwxMDAsMzIsCisgICAgOTcsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzksMTE1LDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwKKyAgICAxMTQsNDYsMTIyLDIyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMDEsMTE2LDk3LDk1LDExMiw5NywxMTYsCisgICAgMTA0LDMyLDEwNSwxMTUsMzIsMTAxLDEwOSwxMTIsMTE2LDEyMSw3OCw0MSwxMSwxMTQsNywwLAorICAgIDAsMCwyMTgsOSwxMDksMTAxLDExNiw5Nyw5NSwxMTIsOTcsMTE2LDEwNCwxMTQsMTY3LDAsCisgICAgMCwwLDExNCwxNjgsMCwwLDAsMTE0LDE2OSwwLDAsMCwxMTQsNzMsMCwwLAorICAgIDAsMTE0LDEwMiwxLDAsMCwxMTQsMTQsMSwwLDAsMTE0LDIxMCwwLDAsMCwKKyAgICAxMTQsMTA2LDEsMCwwLDExNCwyMDksMCwwLDAsNDEsOSwxMTQsNjcsMCwwLAorICAgIDAsMTE0LDM1LDAsMCwwLDExNCwxMywxLDAsMCw5MCw5LDEwNSwxMTUsOTUsCisgICAgMTE0LDEwMSwxMDgsMTExLDk3LDEwMCwxMTQsNzgsMSwwLDAsMTE0LDE0LDEsMCwwLAorICAgIDExNCwxNzgsMCwwLDAsMTE0LDE4MCwwLDAsMCwxMTQsMjA5LDAsMCwwLDExNCwKKyAgICA0LDAsMCwwLDExNCw0LDAsMCwwLDExNCw1LDAsMCwwLDIxOCwxMCwKKyAgICA5NSwxMDIsMTA1LDExMCwxMDAsOTUsMTE1LDExMiwxMDEsOTksOTksOCwwLDAsMTE1LDQ4LAorICAgIDAsMCwwLDAsMiw5LDEsMTksNCwxNSwxLDE2LDEsMTAsMSwzLAorICAgIDEsMTMsMSwxMywxLDE4LDEsMTIsMSwxMSwyLDI0LDEsMTIsMiwyMiwKKyAgICAxLDEzLDEsMywxLDEzLDEsMTMsNCw5LDIsMTIsMSw0LDIsNywKKyAgICAyLDExLDIsMTE0LDEwOCwxLDAsMCw5OSwzLDAsMCwwLDAsMCwwLAogICAgIDAsNCwwLDAsMCw0LDAsMCwwLDY3LDAsMCwwLDExNSwxOTQsMCwKICAgICAwLDAsMTE2LDAsMCwxMjQsMCwwLDExNiwxLDAsMTMxLDIsMCwxMTUsNDUsCiAgICAgMCwxMTYsMiwwLDEwMCwxLDAsMTA2LDMsMCwxMTYsNCwwLDEyNCwwLDAsCkBAIC0zNzM3LDQ0NiArMzkwOCwzMzYgQEAKICAgICAxLDAsMTMxLDEsMCwxMzAsMSwwLDExMywxNTYsMCwxMTAsMCwwLDEyNCwwLAogICAgIDAsMTIsMTE0LDE5MCwwLDEyNCwyLDAsMTAwLDIsMCwxMDcsMiwwLDExNCwxOTAsCiAgICAgMCwxMTYsNSwwLDEwMCw2LDAsMTMxLDEsMCwxMzAsMSwwLDExMCwwLDAsCi0gICAgMTAwLDcsMCw4Myw0MCw4LDAsMCwwLDExNywyOCwwLDAsMCw4NiwxMDEsCi0gICAgMTE0LDEwNSwxMDIsMTIxLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwxMTUsMzIsOTcsCi0gICAgMTE0LDEwMSwzMiwzNCwxMTUsOTcsMTEwLDEwMSwzNCw0NiwxMTcsMzEsMCwwLDAsMTA5LAotICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMzIsMTA5LDExNywxMTUsMTE2LDMyLAotICAgIDk4LDEwMSwzMiwxMTUsMTE2LDExNCw0NCwzMiwxMTAsMTExLDExNiwzMiwxMjMsMTI1LDEwNSwwLAotICAgIDAsMCwwLDExNywxOCwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDMyLDEwOSwxMTcsCi0gICAgMTE1LDExNiwzMiw5OCwxMDEsMzIsNjIsNjEsMzIsNDgsMTE3LDMxLDAsMCwwLDk1LAotICAgIDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTAsMTExLDExNiwzMiwxMTUsCi0gICAgMTAxLDExNiwzMiwxMTYsMTExLDMyLDk3LDMyLDExNSwxMTYsMTE0LDEwNSwxMTAsMTAzLDExNyw2MSwKLSAgICAwLDAsMCw4MCw5NywxMTQsMTAxLDExMCwxMTYsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgMzIsMTIzLDMzLDExNCwxMjUsMzIsMTEwLDExMSwxMTYsMzIsMTA4LDExMSw5NywxMDAsMTAxLDEwMCwKLSAgICA0NCwzMiw5OSw5NywxMTAsMTEwLDExMSwxMTYsMzIsMTEyLDEwMSwxMTQsMTAyLDExMSwxMTQsMTA5LAotICAgIDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKLSAgICAxMTcsMTcsMCwwLDAsNjksMTA5LDExMiwxMTYsMTIxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDc4LDQwLDksMCwwLDAsMTE3LDEwLDAsMCwKLSAgICAwLDEwNSwxMTUsMTA1LDExMCwxMTUsMTE2LDk3LDExMCw5OSwxMDEsMTE3LDMsMCwwLDAsCi0gICAgMTE1LDExNiwxMTQsMTE3LDksMCwwLDAsODQsMTIxLDExMiwxMDEsNjksMTE0LDExNCwxMTEsCi0gICAgMTE0LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDQsMCwwLAotICAgIDAsMTE2LDEyMSwxMTIsMTAxLDExNywxMCwwLDAsMCw4Niw5NywxMDgsMTE3LDEwMSw2OSwKLSAgICAxMTQsMTE0LDExMSwxMTQsMTE3LDMsMCwwLDAsMTE1LDEyMSwxMTUsMTE3LDcsMCwwLAotICAgIDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE1LDExNywxMSwwLDAsMCw4MywxMjEsMTE1LAotICAgIDExNiwxMDEsMTA5LDY5LDExNCwxMTQsMTExLDExNCw0MCw0LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDExMCw5NywxMDksMTAxLDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSwxMTcsNSwwLDAsMCwxMDgsMTAxLDExOCwxMDEsMTA4LDExNywzLDAsMCwKLSAgICAwLDEwOSwxMTUsMTAzLDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksCi0gICAgMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKLSAgICAxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsCi0gICAgMTE3LDEzLDAsMCwwLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsOTksMTA0LDEwMSwKLSAgICA5OSwxMDcsMjA4LDUsMCwwLDExNSwyNCwwLDAsMCwwLDIsMTUsMSwzMCwKLSAgICAxLDEyLDEsMTUsMSw2LDEsMTUsMSwxNSwxLDE1LDEsNiwyLDI3LAotICAgIDEsMTksMSwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSwKLSAgICA5OSwxMDQsMTAxLDk5LDEwNywxMTcsMjAsMCwwLDAsNzgsMTExLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiwxMjMsMzMsMTE0LDEyNSw5OSwyLAotICAgIDAsMCwwLDAsMCwwLDAsOSwwLDAsMCwyNywwLDAsMCw2NywKLSAgICAwLDAsMCwxMTUsMTIsMiwwLDAsMTAwLDAsMCwxMjUsMiwwLDEyNCwwLAotICAgIDAsMTA2LDEsMCwxMDAsMSwwLDEzMSwxLDAsMTAwLDIsMCwyNSwxMjUsMywKLSAgICAwLDEyNCwzLDAsMTE0LDE3OCwwLDEyNCwzLDAsMTE2LDIsMCwxMDYsMywwLAotICAgIDEwNyw3LDAsMTE0LDYyLDAsMTE2LDQsMCwxMjQsMSwwLDEyNCwzLDAsMTMxLAotICAgIDIsMCwxLDExMCwwLDAsMTI0LDAsMCwxMTYsMiwwLDEwNiwzLDAsMTA3LAotICAgIDYsMCwxMTQsODgsMCwxMTYsMiwwLDEwNiwzLDAsMTI0LDAsMCwyNSw4MywKLSAgICAxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwyNSwxMjUsNCwwLDEyMSwxMywwLAotICAgIDEyNCw0LDAsMTA2LDUsMCwxMjUsMiwwLDg3LDExMywxNzgsMCw0LDExNiw2LAotICAgIDAsMTA3LDEwLDAsMTE0LDE3NCwwLDEsMSwxLDExNiw3LDAsMTAwLDMsMCwKLSAgICAyMywxMDYsOCwwLDEyNCwwLDAsMTI0LDMsMCwxMzEsMiwwLDEyNSw1LDAsCi0gICAgMTE2LDksMCwxMjQsNSwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsMSwxLDEzMCwKLSAgICAxLDAsODksMTEzLDE3OCwwLDg4LDExMCwwLDAsMTE2LDEwLDAsMTI0LDAsMCwKLSAgICAxMjQsMiwwLDEzMSwyLDAsMTI1LDYsMCwxMjQsNiwwLDEwMCwwLDAsMTA3LAotICAgIDgsMCwxMTQsMjUwLDAsMTE2LDksMCwxMTYsNywwLDEwNiw4LDAsMTI0LDAsCi0gICAgMCwxMzEsMSwwLDEwMCw0LDAsMTI0LDAsMCwxMzEsMSwxLDEyNSw3LDAsCi0gICAgMTAwLDEwLDAsMTI0LDcsMCw5NSwxMiwwLDEyNCw3LDAsMTMwLDEsMCwxMTAsCi0gICAgNDcsMCwxMjQsMCwwLDExNiwyLDAsMTA2LDMsMCwxMDcsNywwLDExNCw0MSwKLSAgICAxLDEyNCw2LDAsMTA2LDEzLDAsMTI0LDAsMCwxMzEsMSwwLDEsMTE2LDE0LAotICAgIDAsMTAwLDUsMCwxMjQsMCwwLDEyNCw2LDAsMTMxLDMsMCwxLDExMCwwLAotICAgIDAsMTE2LDIsMCwxMDYsMywwLDEyNCwwLDAsMjUsMTI1LDgsMCwxMjQsMywKLSAgICAwLDExNCwxMDUsMSwxMTYsMiwwLDEwNiwzLDAsMTI0LDMsMCwyNSwxMjUsNCwKLSAgICAwLDExNiwxNSwwLDEyNCw0LDAsMTI0LDAsMCwxMDYsMSwwLDEwMCwxLDAsCi0gICAgMTMxLDEsMCwxMDAsNiwwLDI1LDEyNCw4LDAsMTMxLDMsMCwxLDExMCwwLAotICAgIDAsMTE2LDE2LDAsMTI0LDgsMCwxMDAsNywwLDEwMCwwLDAsMTMxLDMsMCwKLSAgICAxMDAsMCwwLDEwNyw4LDAsMTE0LDIxMiwxLDEyMSw1OSwwLDEyNCw4LDAsMTA2LAotICAgIDE3LDAsMTI0LDgsMCw5NSwxOCwwLDExNiwxOSwwLDEyNCw4LDAsMTAwLDgsCi0gICAgMCwxMzEsMiwwLDExNSwxODcsMSwxMjQsOCwwLDEwNiwxOCwwLDEwNiwxLDAsCi0gICAgMTAwLDEsMCwxMzEsMSwwLDEwMCwyLDAsMjUsMTI0LDgsMCw5NSwxOCwwLAotICAgIDExMCwwLDAsODcsMTEzLDIxMiwxLDQsMTE2LDYsMCwxMDcsMTAsMCwxMTQsMjA4LAotICAgIDEsMSwxLDEsODksMTEzLDIxMiwxLDg4LDExMCwwLDAsMTE2LDE5LDAsMTI0LAotICAgIDgsMCwxMDAsOSwwLDEzMSwyLDAsMTE1LDgsMiwxMjEsMTMsMCwxMjQsNiwKLSAgICAwLDEyNCw4LDAsOTUsMjAsMCw4NywxMTMsOCwyLDQsMTE2LDYsMCwxMDcsCi0gICAgMTAsMCwxMTQsNCwyLDEsMSwxLDg5LDExMyw4LDIsODgsMTEwLDAsMCwKLSAgICAxMjQsOCwwLDgzLDQwLDExLDAsMCwwLDc4LDExNywxLDAsMCwwLDQ2LAotICAgIDEwNSwwLDAsMCwwLDExNywyMSwwLDAsMCw1OSwzMiwxMjMsMTI1LDMyLDEwNSwKLSAgICAxMTUsMzIsMTEwLDExMSwxMTYsMzIsOTcsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNywKLSAgICA0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNywxOCwwLDAsMCwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwzMiwxMjMsMzMsMTE0LDEyNSwzMiwzNSwzMiwxMjMsMzMsMTE0LDEyNSwxMDUsCi0gICAgMiwwLDAsMCwxMTcsMTEsMCwwLDAsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywKLSAgICAxMDMsMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LAotICAgIDk1LDExNywxMCwwLDAsMCw5NSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDk1LDk1LAotICAgIDg0LDQwLDIxLDAsMCwwLDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywKLSAgICAxMCwwLDAsMCwxMTQsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsMTExLDExMCwxMTcsMywKLSAgICAwLDAsMCwxMTUsMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSwxMTUsMTE3LDI1LDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsCi0gICAgMTA0LDk1LDEwMiwxMTQsOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLAotICAgIDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywxMTYsMTA0LDk1LDk1LDExNywxNCwwLAotICAgIDAsMCw2NSwxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsNjksMTE0LDExNCwxMTEsMTE0LAotICAgIDExNyw4LDAsMCwwLDk1LDY5LDgyLDgyLDk1LDc3LDgzLDcxLDExNyw2LDAsCi0gICAgMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDExLDAsMCwwLDczLDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywxMiwwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDQsMCwwLDAsODQsMTE0LAotICAgIDExNywxMDEsMTE3LDEwLDAsMCwwLDk1LDExMCwxMTEsMTE2LDk1LDEwMiwxMTEsMTE3LDExMCwKLSAgICAxMDAsMTE3LDExLDAsMCwwLDEwOCwxMTEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsCi0gICAgMTAxLDExNywxNiwwLDAsMCw5NSwxMTgsMTAxLDExNCw5OCwxMTEsMTE1LDEwMSw5NSwxMDksCi0gICAgMTAxLDExNSwxMTUsOTcsMTAzLDEwMSwxMTcsNywwLDAsMCwxMTUsMTAxLDExNiw5NywxMTYsCi0gICAgMTE2LDExNCwxMTcsNywwLDAsMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsCi0gICAgOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNyw3LDAsMCwwLAotICAgIDEwNCw5NywxMTUsOTcsMTE2LDExNiwxMTQsMTE3LDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsCi0gICAgOTcsMTAwLDEwMSwxMTQsOTUsOTUsNDAsOSwwLDAsMCwxMTcsNCwwLDAsMCwKLSAgICAxMTAsOTcsMTA5LDEwMSwxMTcsNywwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSwKLSAgICAxMTcsNCwwLDAsMCwxMTIsOTcsMTE2LDEwNCwxMTcsNiwwLDAsMCwxMTIsOTcsCi0gICAgMTE0LDEwMSwxMTAsMTE2LDExNywxMywwLDAsMCwxMTIsOTcsMTE0LDEwMSwxMTAsMTE2LDk1LAotICAgIDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywzLDAsMCwwLDEwOSwxMTUsMTAzLDExNyw2LAotICAgIDAsMCwwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDMsMCwwLDAsMTAxLDEyMCwKLSAgICA5OSwxMTcsNiwwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0MCwwLDAsMCwKLSAgICAwLDQwLDAsMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwKLSAgICAxMDEsMTEwLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLAotICAgIDExMSwxMTYsMTE1LDExNiwxMTQsOTcsMTEyLDYyLDExNywyMywwLDAsMCw5NSwxMDIsMTA1LAotICAgIDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsCi0gICAgOTksMTA3LDEwMSwxMDAsMjI3LDUsMCwwLDExNSw3NiwwLDAsMCwwLDEsNiwKLSAgICAxLDE5LDEsNiwxLDE1LDEsMTYsMiwxNSwxLDExLDIsMTMsMSwzLAotICAgIDEsMTMsMSwxMywxLDIyLDEsMjYsMSwxNSwxLDEyLDEsMjcsMyw5LAotICAgIDEsOSwxLDE1LDIsMTMsMSwxOSwyLDEzLDEsNiwyLDEzLDEsMzIsCi0gICAgMiwyNCwxLDMsMSwxMiwxLDE1LDEsMzIsMSwxMywxLDgsMiwxNSwKLSAgICAxLDMsMSwxMywxLDEzLDEsOCwxLDExNywyMywwLDAsMCw5NSwxMDIsCi0gICAgMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCw5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwKLSAgICAxMTEsOTksMTA3LDEwMSwxMDAsOTksMiwwLDAsMCwwLDAsMCwwLDMsMCwKLSAgICAwLDAsMTgsMCwwLDAsNjcsMCwwLDAsMTE1LDc1LDAsMCwwLDEyMiwKLSAgICAxNiwwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSwyLDAsODcsMTAwLAotICAgIDEsMCwxMTYsMSwwLDEwNiwyLDAsMTMxLDAsMCwxLDg4LDEyNCwyLDAsCi0gICAgMTA2LDMsMCwxMzEsMCwwLDEsMTIyLDE3LDAsMTE2LDQsMCwxMjQsMCwwLAotICAgIDEyNCwxLDAsMTMxLDIsMCw4Myw4NywxMDAsMSwwLDEyNCwyLDAsMTA2LDUsCi0gICAgMCwxMzEsMCwwLDEsODgsMTAwLDEsMCw4Myw0MCwyLDAsMCwwLDExNywKLSAgICA1NCwwLDAsMCw3MCwxMDUsMTEwLDEwMCwzMiw5NywxMTAsMTAwLDMyLDEwOCwxMTEsOTcsCi0gICAgMTAwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDk3LDExMCwKLSAgICAxMDAsMzIsMTE0LDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDAsNiwwLDAsMCwKLSAgICAxMTcsMTYsMCwwLDAsOTUsMTAzLDEwMSwxMTYsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgOTUsMTA4LDExMSw5OSwxMDcsMTE3LDQsMCwwLDAsOTUsMTA1LDEwOSwxMTIsMTE3LDEyLAotICAgIDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNywKLSAgICA3LDAsMCwwLDk3LDk5LDExMywxMTcsMTA1LDExNCwxMDEsMTE3LDIzLDAsMCwwLAorICAgIDEwMCw3LDAsODMsNDEsOCwxMjIsMjgsODYsMTAxLDExNCwxMDUsMTAyLDEyMSwzMiw5NywKKyAgICAxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMTE1LDMyLDk3LDExNCwxMDEsMzIsMzQsMTE1LDk3LAorICAgIDExMCwxMDEsMzQsNDYsMTIyLDMxLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDExMCw5NywxMDksCisgICAgMTAxLDMyLDEwOSwxMTcsMTE1LDExNiwzMiw5OCwxMDEsMzIsMTE1LDExNiwxMTQsNDQsMzIsMTEwLAorICAgIDExMSwxMTYsMzIsMTIzLDEyNSwxMTQsODQsMCwwLDAsMTIyLDE4LDEwOCwxMDEsMTE4LDEwMSwKKyAgICAxMDgsMzIsMTA5LDExNywxMTUsMTE2LDMyLDk4LDEwMSwzMiw2Miw2MSwzMiw0OCwxMjIsMzEsCisgICAgOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExMCwxMTEsMTE2LDMyLAorICAgIDExNSwxMDEsMTE2LDMyLDExNiwxMTEsMzIsOTcsMzIsMTE1LDExNiwxMTQsMTA1LDExMCwxMDMsMTIyLAorICAgIDYxLDgwLDk3LDExNCwxMDEsMTEwLDExNiwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiwxMjMsCisgICAgMzMsMTE0LDEyNSwzMiwxMTAsMTExLDExNiwzMiwxMDgsMTExLDk3LDEwMCwxMDEsMTAwLDQ0LDMyLAorICAgIDk5LDk3LDExMCwxMTAsMTExLDExNiwzMiwxMTIsMTAxLDExNCwxMDIsMTExLDExNCwxMDksMzIsMTE0LAorICAgIDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEyMiwxNywKKyAgICA2OSwxMDksMTEyLDExNiwxMjEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwKKyAgICAxMDEsNzgsNDEsOSwxMTQsMTkzLDAsMCwwLDExNCw4MywxLDAsMCwyMTgsOSwKKyAgICA4NCwxMjEsMTEyLDEwMSw2OSwxMTQsMTE0LDExMSwxMTQsMTE0LDQ3LDAsMCwwLDExNCw2NiwKKyAgICAwLDAsMCwxMTQsMTMzLDAsMCwwLDExNCw3LDAsMCwwLDExNCw3MywwLAorICAgIDAsMCwyMTgsMTEsODMsMTIxLDExNSwxMTYsMTAxLDEwOSw2OSwxMTQsMTE0LDExMSwxMTQsNDEsCisgICAgNCwxMTQsNjcsMCwwLDAsMTE0LDEwMywxLDAsMCwxMTQsMTA0LDEsMCwwLAorICAgIDExNCwxNzIsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDUsMCwwLDAsMjE4LDEzLDk1LDExNSw5NywxMTAsMTA1LDExNiwxMjEsOTUsOTksMTA0LAorICAgIDEwMSw5OSwxMDcsMTM5LDgsMCwwLDExNSwyNCwwLDAsMCwwLDIsMTUsMSwKKyAgICAzMCwxLDEyLDEsMTUsMSw2LDEsMTUsMSwxNSwxLDE1LDEsNiwyLAorICAgIDI3LDEsMTksMSwxMTQsMTExLDEsMCwwLDEyMiwxNiw3OCwxMTEsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTEwLDk3LDEwOSwxMDEsMTAwLDMyLDEyMiw0LDEyMywzMywxMTQsCisgICAgMTI1LDk5LDIsMCwwLDAsMCwwLDAsMCw4LDAsMCwwLDEyLDAsCisgICAgMCwwLDY3LDAsMCwwLDExNSw1MiwxLDAsMCwxMDAsMCwwLDEyNSwyLAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwxMDAsMiwwLAorICAgIDI1LDEyNSwzLDAsMTI0LDMsMCwxMTQsMTc4LDAsMTI0LDMsMCwxMTYsMSwwLAorICAgIDEwNiwyLDAsMTA3LDcsMCwxMTQsNjIsMCwxMTYsMywwLDEyNCwxLDAsMTI0LAorICAgIDMsMCwxMzEsMiwwLDEsMTEwLDAsMCwxMjQsMCwwLDExNiwxLDAsMTA2LAorICAgIDIsMCwxMDcsNiwwLDExNCw4OCwwLDExNiwxLDAsMTA2LDIsMCwxMjQsMCwKKyAgICAwLDI1LDgzLDExNiwxLDAsMTA2LDIsMCwxMjQsMywwLDI1LDEyNSw0LDAsCisgICAgMTIxLDEzLDAsMTI0LDQsMCwxMDYsNCwwLDEyNSwyLDAsODcsMTEzLDE3OCwwLAorICAgIDQsMTE2LDUsMCwxMDcsMTAsMCwxMTQsMTc0LDAsMSwxLDEsMTE2LDYsMCwKKyAgICAxMDAsMywwLDIzLDEwNiw3LDAsMTI0LDAsMCwxMjQsMywwLDEzMSwyLDAsCisgICAgMTI1LDUsMCwxMTYsOCwwLDEyNCw1LDAsMTAwLDQsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDEsMTMwLDEsMCw4OSwxMTMsMTc4LDAsODgsMTEwLDAsMCwxMTYsOSwwLAorICAgIDEyNCwwLDAsMTI0LDIsMCwxMzEsMiwwLDEyNSw2LDAsMTI0LDYsMCwxMDAsCisgICAgMCwwLDEwNyw4LDAsMTE0LDIzNSwwLDExNiw4LDAsMTE2LDYsMCwxMDYsNywKKyAgICAwLDEyNCwwLDAsMTMxLDEsMCwxMDAsNCwwLDEyNCwwLDAsMTMxLDEsMSwKKyAgICAxMzAsMSwwLDExMCwxOCwwLDExNiwxMCwwLDEyNCw2LDAsMTMxLDEsMCwxMDYsCisgICAgMTEsMCwxMzEsMCwwLDEyNSw3LDAsMTI0LDMsMCwxMTQsNDgsMSwxMTYsMSwKKyAgICAwLDEwNiwyLDAsMTI0LDMsMCwyNSwxMjUsNCwwLDExNiwxMiwwLDEyNCw0LAorICAgIDAsMTI0LDAsMCwxMDYsMCwwLDEwMCwxLDAsMTMxLDEsMCwxMDAsNSwwLAorICAgIDI1LDEyNCw3LDAsMTMxLDMsMCwxLDExMCwwLDAsMTI0LDcsMCw4Myw0MSwKKyAgICA2LDc4LDExNCwxMTYsMCwwLDAsMTE0LDg0LDAsMCwwLDEyMiwyMyw1OSwzMiwKKyAgICAxMjMsMzMsMTE0LDEyNSwzMiwxMDUsMTE1LDMyLDExMCwxMTEsMTE2LDMyLDk3LDMyLDExMiw5NywKKyAgICA5OSwxMDcsOTcsMTAzLDEwMSwxMTQsNjcsMCwwLDAsMTE0LDExNSwwLDAsMCw0MSwKKyAgICAxMywxMTQsMzIsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LDczLDAsMCwwLAorICAgIDExNCwxMTQsMCwwLDAsMTE0LDI0NywwLDAsMCwxMTQsMjEwLDAsMCwwLDIxOCwKKyAgICA4LDk1LDY5LDgyLDgyLDk1LDc3LDgzLDcxLDExNCw0NywwLDAsMCwxMTQsMTU0LAorICAgIDAsMCwwLDExNCwxMDgsMSwwLDAsMTE0LDE3NSwwLDAsMCwxMTQsNywxLAorICAgIDAsMCwxMTQsNjEsMCwwLDAsNDEsOCwxMTQsNjcsMCwwLDAsMjE4LDcsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTE0LDM1LDAsMCwwLDExNCwyMzQsMCwwLAorICAgIDAsOTAsMTMsMTEyLDk3LDExNCwxMDEsMTEwLDExNiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwKKyAgICAxMTQsMTcyLDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LDE4MCwwLDAsMCwxMTQsCisgICAgNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMjMsCiAgICAgOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsOTUsMTE3LAotICAgIDExMCwxMDgsMTExLDk5LDEwNywxMDEsMTAwLDExNyw3LDAsMCwwLDExNCwxMDEsMTA4LDEwMSwKLSAgICA5NywxMTUsMTAxLDQwLDMsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LDEwOSwKLSAgICAxMDEsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsMTE3LDQsMCwKLSAgICAwLDAsMTA4LDExMSw5OSwxMDcsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLAotICAgIDExNywyOSwwLDAsMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwKLSAgICAxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LAotICAgIDExMiw2MiwxMTcsMTQsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsCi0gICAgOTUsMTA4LDExMSw5NywxMDAsMjEsNiwwLDAsMTE1LDE0LDAsMCwwLDAsMiwKLSAgICAzLDEsMTYsMiwxMSwxLDEwLDEsMywxLDE3LDIsMTE3LDE0LDAsMCwKLSAgICAwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsMTAwLDk5LAotICAgIDMsMCwwLDAsMCwwLDAsMCw1LDAsMCwwLDQsMCwwLDAsCi0gICAgNjcsMCwwLDAsMTE1LDE3MiwwLDAsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LAotICAgIDEsMCwxMjQsMiwwLDEzMSwzLDAsMSwxMjQsMiwwLDEwMCwxLDAsMTA3LAotICAgIDQsMCwxMTQsNDksMCwxMTYsMSwwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwKLSAgICAwLDEzMSwzLDAsMTI1LDAsMCwxMTAsMCwwLDExNiwyLDAsMTA2LDMsMCwKLSAgICAxMzEsMCwwLDEsMTI0LDAsMCwxMTYsNCwwLDEwNiw1LDAsMTA3LDcsMCwKLSAgICAxMTQsODcsMCwxMTYsNiwwLDEyNCwwLDAsMTE2LDcsMCwxMzEsMiwwLDgzLAotICAgIDExNiw0LDAsMTA2LDUsMCwxMjQsMCwwLDI1LDEyNSwzLDAsMTI0LDMsMCwKLSAgICAxMDAsNCwwLDEwNyw4LDAsMTE0LDE1OCwwLDExNiwyLDAsMTA2LDksMCwxMzEsCi0gICAgMCwwLDEsMTAwLDIsMCwxMDYsMTAsMCwxMjQsMCwwLDEzMSwxLDAsMTI1LAotICAgIDQsMCwxMTYsMTEsMCwxMjQsNCwwLDEwMCwzLDAsMTI0LDAsMCwxMzEsMSwKLSAgICAxLDEzMCwxLDAsMTEwLDAsMCwxMTYsMTIsMCwxMjQsMCwwLDEzMSwxLDAsCi0gICAgMSwxMjQsMywwLDgzLDQwLDUsMCwwLDAsMTE3LDUwLDEsMCwwLDczLAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwKLSAgICAzMiwxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCw5NywxMTUsMTAxLAotICAgIDEwMCwzMiwxMTEsMTEwLDMyLDEwNSwxMTYsMTE1LDMyLDExMCw5NywxMDksMTAxLDQ0LDMyLDExNiwKLSAgICAxMDQsMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSwKLSAgICA5NywxMDgsMTA4LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLAotICAgIDMyLDEwOSw5NywxMDAsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSw0NCwzMiw5NywxMTAsMTAwLDMyLAotICAgIDExNiwxMDQsMTAxLDMyLDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsOTcsMTAwLDEwNiwxMTcsMTE1LDExNiwKLSAgICAxMDksMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsCi0gICAgMTAyLDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwKLSAgICAxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTE0LDEwMSw5NywxMTYsMTAxLDExNSwxMTYsCi0gICAgMzIsOTksMTExLDEwOSwxMDksMTExLDExMCwzMiwxMDAsMTAxLDExMCwxMTEsMTA5LDEwNSwxMTAsOTcsCi0gICAgMTE2LDExMSwxMTQsMzIsMTExLDEwMiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsOTcsCi0gICAgMTA4LDEwNSwxMTYsMTIxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMTYsMTE5LDEwMSwxMDEsMTEwLAotICAgIDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LAotICAgIDExMCwxMDAsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsNDYsMzIsODQsCi0gICAgMTA0LDEwNSwxMTUsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDEsMTE1LDMyLDExNSwxMDEsMTE2LAotICAgIDExNiwxMDUsMTEwLDEwMywzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsCi0gICAgMzIsMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwKLSAgICAxMDEsMTE0LDMyLDEwMCwxMDUsMTAwLDMyLDExMCwxMTEsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLAotICAgIDMyLDEwNSwwLDAsMCwwLDExNyw0MCwwLDAsMCwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiwzMiwxMTEsMTAyLDMyLDEyMywxMjUsMzIsMTA0LDk3LDEwOCwxMTYsMTAxLDEwMCw1OSwzMiwKLSAgICA3OCwxMTEsMTEwLDEwMSwzMiwxMDUsMTEwLDMyLDExNSwxMjEsMTE1LDQ2LDEwOSwxMTEsMTAwLDExNywKLSAgICAxMDgsMTAxLDExNSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw3OCw0MCwxMywwLAotICAgIDAsMCwxMTcsMTMsMCwwLDAsOTUsMTE1LDk3LDExMCwxMDUsMTE2LDEyMSw5NSw5OSwKLSAgICAxMDQsMTAxLDk5LDEwNywxMTcsMTMsMCwwLDAsOTUsMTE0LDEwMSwxMTUsMTExLDEwOCwxMTgsCi0gICAgMTAxLDk1LDExMCw5NywxMDksMTAxLDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxMiwwLDAsMCw5Nyw5OSwxMTMsMTE3LDEwNSwxMTQsMTAxLDk1LDEwOCwxMTEsOTksMTA3LAotICAgIDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw3LDAsMCwwLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNSwxMTcsMTQsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LAotICAgIDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTE3LDExLDAsMCwwLDk1LDEwMyw5OSwxMDAsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsCi0gICAgMTE3LDEyLDAsMCwwLDExNCwxMDEsMTA4LDEwMSw5NywxMTUsMTAxLDk1LDEwOCwxMTEsOTksCi0gICAgMTA3LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywxMTYsMTE3LDExLDAsMCwKLSAgICAwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsNjksMTE0LDExNCwxMTEsMTE0LDExNywxOSwwLDAsCi0gICAgMCw5NSwxMDgsMTExLDk5LDEwNyw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDk1LDEwOSwxMTEsCi0gICAgMTAwLDExNywxMDgsMTAxLDQwLDUsMCwwLDAsMTE3LDQsMCwwLDAsMTEwLDk3LAotICAgIDEwOSwxMDEsMTE3LDcsMCwwLDAsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDExNyw1LAotICAgIDAsMCwwLDEwOCwxMDEsMTE4LDEwMSwxMDgsMTE3LDYsMCwwLDAsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMTE3LDcsMCwwLDAsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTEsMCwwLDAsCi0gICAgOTUsMTAzLDk5LDEwMCw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzNCw2LDAsMCwxMTUsCi0gICAgMjgsMCwwLDAsMCw5LDE2LDEsMTIsMSwyMSwxLDEwLDEsMTUsMSwKLSAgICAxMywxLDEzLDEsMTIsMSwxMCwxLDYsMSw5LDEsMjEsMSwxMCwxLAotICAgIDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAotICAgIDk5LDMsMCwwLDAsMCwwLDAsMCw2LDAsMCwwLDE3LDAsMCwKLSAgICAwLDY3LDAsMCwwLDExNSwyNTQsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLAotICAgIDEwMCwxLDAsMTMxLDIsMCwxMTQsMjUwLDAsMTAwLDIsMCwxMjQsMSwwLDEwNywKLSAgICA2LDAsMTE0LDg5LDAsMTE2LDEsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDEsCi0gICAgMCwxMjQsMSwwLDEwNiwyLDAsMTAwLDIsMCwxMzEsMSwwLDEsMTE2LDAsCi0gICAgMCwxMjQsMCwwLDEwMCwzLDAsMTMxLDIsMCwxMTQsODksMCwxMjQsMSwwLAotICAgIDEwNiwzLDAsMTI0LDAsMCwxMDYsNCwwLDEzMSwxLDAsMSwxMTMsODksMCwKLSAgICAxMTAsMCwwLDEyMCwxNTgsMCwxMjQsMSwwLDY4LDkzLDE0NywwLDEyNSwzLDAsCi0gICAgMTE2LDAsMCwxMjQsMCwwLDEyNCwzLDAsMTMxLDIsMCwxMTUsOTYsMCwxMDAsCi0gICAgNCwwLDEwNiw1LDAsMTI0LDAsMCwxMDYsNiwwLDEyNCwzLDAsMTMxLDIsCi0gICAgMCwxMjUsNCwwLDEyMSwxNywwLDExNiw3LDAsMTI0LDIsMCwxMjQsNCwwLAotICAgIDEzMSwyLDAsMSw4NywxMTMsMjQzLDAsNCwxMTYsOCwwLDEwNywxMCwwLDExNCwKLSAgICAyMzksMCwxLDEyNSw1LDAsMSwxMjIsNTAsMCwxMTYsOSwwLDEyNCw1LDAsCi0gICAgMTAwLDUsMCwxMDAsNywwLDEzMSwzLDAsMTE0LDIxOCwwLDEyNCw1LDAsMTA2LAotICAgIDExLDAsMTI0LDQsMCwxMDcsMiwwLDExNCwyMTgsMCwxMTksOTYsMCwxMTMsMjE4LAotICAgIDAsMTEwLDAsMCwxMzAsMCwwLDg3LDg5LDEwMCw2LDAsMTAwLDYsMCwxMjUsCi0gICAgNSwwLDEyNiw1LDAsODgsMTEzLDI0MywwLDg4LDExMyw5NiwwLDExMyw5NiwwLAotICAgIDg3LDExMCwwLDAsMTI0LDAsMCw4Myw0MCw4LDAsMCwwLDExNywyMzgsMCwKLSAgICAwLDAsNzAsMTA1LDEwMywxMTcsMTE0LDEwMSwzMiwxMTEsMTE3LDExNiwzMiwxMTksMTA0LDk3LAotICAgIDExNiwzMiw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwzMiwxMTUsMTA0LDExMSwKLSAgICAxMTcsMTA4LDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwKLSAgICAzMiw4NCwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDMyLDExMiw5NywxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTYsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDk5LDk3LDEwOCwxMDgsCi0gICAgOTcsOTgsMTA4LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDk3LDEwNywxMDEsMTE1LAotICAgIDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMTA5LDExMSwxMDAsCi0gICAgMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw0NiwzMiw3MywxMTYsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwxMDEsCi0gICAgMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSw5OSwxMTEsMTE3LDExMiwxMDgsMTAxLDMyLDExNiwxMDQsCi0gICAgMTAxLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDIsMTE0LDExMSwxMDksMzIsCi0gICAgOTcsMTE1LDExNSwxMTcsMTA5LDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwKLSAgICAxMDUsOTgsMzksMTE1LDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLAotICAgIDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwxMDUsCi0gICAgMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwxMTQsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwKLSAgICAxMTcsOCwwLDAsMCw5NSw5NSwxMTIsOTcsMTE2LDEwNCw5NSw5NSwxMTcsMSwwLAotICAgIDAsMCw0MiwxMTcsNywwLDAsMCw5NSw5NSw5NywxMDgsMTA4LDk1LDk1LDExNywKLSAgICA1LDAsMCwwLDEyMywxMjUsNDYsMTIzLDEyNSwxMTcsMTAsMCwwLDAsOTUsMTEwLAotICAgIDExMSwxMTYsOTUsMTAyLDExMSwxMTcsMTEwLDEwMCw3OCw3MCw0MCwxMiwwLDAsMCwxMTcsCi0gICAgNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsMTE0LDExNyw0LDAsMCwwLAotICAgIDEwOCwxMDUsMTE1LDExNiwxMTcsNiwwLDAsMCwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMTcsCi0gICAgNiwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsNywwLDAsMCw5NSwKLSAgICA5NSw5NywxMDgsMTA4LDk1LDk1LDExNyw2LDAsMCwwLDEwMiwxMTEsMTE0LDEwOSw5NywKLSAgICAxMTYsMTE3LDgsMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDI1LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCwxMDgsOTUsMTE5LDEwNSwxMTYsMTA0LDk1LDEwMiwxMTQsCi0gICAgOTcsMTA5LDEwMSwxMTUsOTUsMTE0LDEwMSwxMDksMTExLDExOCwxMDEsMTAwLDExNywxMSwwLDAsCi0gICAgMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNywwLDAsCi0gICAgMCwxMDMsMTAxLDExNiw5NywxMTYsMTE2LDExNCwxMTcsNSwwLDAsMCw3MCw5NywxMDgsCi0gICAgMTE1LDEwMSwxMTcsNCwwLDAsMCwxMTAsOTcsMTA5LDEwMSw0MCw2LDAsMCwwLAotICAgIDExNyw2LDAsMCwwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNyw4LDAsMCwwLAotICAgIDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTE3LDcsMCwwLDAsMTA1LDEwOSwxMTIsCi0gICAgMTExLDExNCwxMTYsOTUsMTE3LDEsMCwwLDAsMTIwLDExNyw5LDAsMCwwLDEwMiwKLSAgICAxMTQsMTExLDEwOSw5NSwxMTAsOTcsMTA5LDEwMSwxMTcsMywwLDAsMCwxMDEsMTIwLDk5LAotICAgIDQwLDAsMCwwLDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsCi0gICAgMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCwKLSAgICA0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDE2LDAsMCwKLSAgICAwLDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LAotICAgIDExNiw1OCw2LDAsMCwxMTUsMzQsMCwwLDAsMCwxMCwxNSwxLDEyLDEsCi0gICAgMTIsMSwxMywxLDE1LDEsMjIsMSwxMywxLDE1LDEsMjEsMSwzLDEsCi0gICAgMTcsMSwxOCw2LDE4LDEsMTUsMSw5LDEsMzIsMSwxMTcsMTYsMCwwLAotICAgIDAsOTUsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSw5NSwxMDIsMTE0LDExMSwxMDksMTA4LDEwNSwxMTUsCi0gICAgMTE2LDk5LDEsMCwwLDAsMCwwLDAsMCwyLDAsMCwwLDIsMCwKLSAgICAwLDAsNjcsMCwwLDAsMTE1LDc4LDAsMCwwLDEyNCwwLDAsMTA2LDAsCi0gICAgMCwxMDAsMSwwLDEzMSwxLDAsMTI1LDEsMCwxMjQsMSwwLDEwMCw2LDAsCi0gICAgMTA3LDgsMCwxMTQsNzQsMCwxMjQsMCwwLDEwMCwyLDAsMjUsMTI1LDEsMCwKLSAgICAxMDAsMywwLDEyNCwwLDAsMTA3LDcsMCwxMTQsNzQsMCwxMjQsMSwwLDEwNiwKLSAgICAyLDAsMTAwLDQsMCwxMzEsMSwwLDEwMCw1LDAsMjUsMTI1LDEsMCwxMTMsCi0gICAgNzQsMCwxMTAsMCwwLDEyNCwxLDAsODMsNDAsNywwLDAsMCwxMTcsMTY3LAotICAgIDAsMCwwLDY3LDk3LDEwOCw5OSwxMTcsMTA4LDk3LDExNiwxMDEsMzIsMTE5LDEwNCw5NywKLSAgICAxMTYsMzIsOTUsOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDExNSwxMDQsCi0gICAgMTExLDExNywxMDgsMTAwLDMyLDk4LDEwMSw0NiwxMCwxMCwzMiwzMiwzMiwzMiw5NSw5NSwKLSAgICAxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsMTA1LDExNSwzMiwxMTAsMTExLDExNiwKLSAgICAzMiwxMDMsMTE3LDk3LDExNCw5NywxMTAsMTE2LDEwMSwxMDEsMTAwLDMyLDExNiwxMTEsMzIsOTgsCi0gICAgMTAxLDMyLDEwMCwxMDEsMTAyLDEwNSwxMTAsMTAxLDEwMCwzMiwxMTEsMTE0LDMyLDk5LDExMSwxMTcsCi0gICAgMTA4LDEwMCwzMiw5OCwxMDEsMzIsMTE1LDEwMSwxMTYsMzIsMTE2LDExMSwzMiw3OCwxMTEsMTEwLAotICAgIDEwMSwxMCwzMiwzMiwzMiwzMiwxMTYsMTExLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwKLSAgICAxMTAsMTE2LDMyLDExNiwxMDQsOTcsMTE2LDMyLDEwNSwxMTYsMTE1LDMyLDExMiwxMTQsMTExLDExMiwKLSAgICAxMDEsMTE0LDMyLDExOCw5NywxMDgsMTE3LDEwMSwzMiwxMDUsMTE1LDMyLDExNywxMTAsMTA3LDExMCwKLSAgICAxMTEsMTE5LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTcsMTEsMCwwLDAsOTUsCi0gICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LAotICAgIDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNyw4LDAsMCwwLDk1LDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDk1LDExNywxLDAsMCwwLDQ2LDEwNSwwLDAsMCwwLDc4LAotICAgIDQwLDMsMCwwLDAsMTE3LDMsMCwwLDAsMTAzLDEwMSwxMTYsMTE3LDQsMCwKLSAgICAwLDAsNzgsMTExLDExMCwxMDEsMTE3LDEwLDAsMCwwLDExNCwxMTIsOTcsMTE0LDExNiwKLSAgICAxMDUsMTE2LDEwNSwxMTEsMTEwLDQwLDIsMCwwLDAsMTE3LDcsMCwwLDAsMTAzLAotICAgIDEwOCwxMTEsOTgsOTcsMTA4LDExNSwxMTcsNywwLDAsMCwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsCi0gICAgMCw2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsCi0gICAgMTA1LDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsMTcsCi0gICAgMCwwLDAsOTUsOTksOTcsMTA4LDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsCi0gICAgMTAzLDEwMSw5NSw5NSw5Miw2LDAsMCwxMTUsMTIsMCwwLDAsMCw3LDE1LAotICAgIDEsMTIsMSwxMCwxLDEyLDEsMjUsMSwxMTcsMTcsMCwwLDAsOTUsOTksCi0gICAgOTcsMTA4LDk5LDk1LDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSw5OSwKLSAgICAwLDAsMCwwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLAotICAgIDY3LDAsMCwwLDExNSw1NSwwLDAsMCwxMTYsMCwwLDExNiwxLDAsMTA2LAotICAgIDIsMCwxMzEsMCwwLDEwMiwyLDAsMTI1LDAsMCwxMTYsMywwLDExNiw0LAotICAgIDAsMTAyLDIsMCwxMjUsMSwwLDExNiw1LDAsMTE2LDYsMCwxMDIsMiwwLAotICAgIDEyNSwyLDAsMTI0LDAsMCwxMjQsMSwwLDEyNCwyLDAsMTAzLDMsMCw4MywKLSAgICA0MCwxLDAsMCwwLDExNyw5NSwwLDAsMCw4MiwxMDEsMTE2LDExNywxMTQsMTEwLAotICAgIDExNSwzMiw5NywzMiwxMDgsMTA1LDExNSwxMTYsMzIsMTExLDEwMiwzMiwxMDIsMTA1LDEwOCwxMDEsCi0gICAgNDUsOTgsOTcsMTE1LDEwMSwxMDAsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsMTA4LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTUsNDYsMTAsMTAsMzIsMzIsMzIsMzIsNjksOTcsOTksMTA0LAotICAgIDMyLDEwNSwxMTYsMTAxLDEwOSwzMiwxMDUsMTE1LDMyLDk3LDMyLDExNiwxMTcsMTEyLDEwOCwxMDEsCi0gICAgMzIsNDAsMTA4LDExMSw5NywxMDAsMTAxLDExNCw0NCwzMiwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwKLSAgICAxMDEsMTE1LDQxLDQ2LDEwLDMyLDMyLDMyLDMyLDQwLDcsMCwwLDAsMTE3LDE5LAotICAgIDAsMCwwLDY5LDEyMCwxMTYsMTAxLDExMCwxMTUsMTA1LDExMSwxMTAsNzAsMTA1LDEwOCwxMDEsCi0gICAgNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNyw0LDAsMCwwLDk1LDEwNSwxMDksMTEyLDExNywKLSAgICAxOCwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw5NSwxMTUsMTE3LAotICAgIDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDExNywxNiwwLDAsMCw4MywxMTEsMTE3LDExNCw5OSwKLSAgICAxMDEsNzAsMTA1LDEwOCwxMDEsNzYsMTExLDk3LDEwMCwxMDEsMTE0LDExNywxNSwwLDAsMCwKLSAgICA4Myw3OSw4NSw4Miw2Nyw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSw4MywxMTcsCi0gICAgMjAsMCwwLDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsCi0gICAgMTA4LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE3LDAsMCwwLDY2LDg5LDg0LAotICAgIDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDQwLDMsCi0gICAgMCwwLDAsMTE3LDEwLDAsMCwwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsCi0gICAgMTEwLDExNSwxMTcsNiwwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNyw4LDAsCi0gICAgMCwwLDk4LDEyMSwxMTYsMTAxLDk5LDExMSwxMDAsMTAxLDQwLDAsMCwwLDAsNDAsCi0gICAgMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsCi0gICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwKLSAgICAxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDI3LDAsMCwwLDk1LDEwMywxMDEsMTE2LDk1LAotICAgIDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsMTA4LDEwMSw5NSwxMDgsCi0gICAgMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMDcsNiwwLDAsMTE1LDgsMCwwLDAsMCwKLSAgICA1LDE4LDEsMTIsMSwxMiwxLDExNywyNywwLDAsMCw5NSwxMDMsMTAxLDExNiwKLSAgICA5NSwxMTUsMTE3LDExMiwxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDIsMTA1LDEwOCwxMDEsOTUsCi0gICAgMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTUsOTksNSwwLDAsMCwwLDAsMCwwLAotICAgIDksMCwwLDAsNSwwLDAsMCw2NywwLDAsMCwxMTUsMjI3LDAsMCwKLSAgICAwLDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNCwyNywwLDExNiwwLDAsCi0gICAgMTI0LDAsMCwxMzEsMSwwLDEyNSw1LDAsMTEwLDU0LDAsMTI0LDEsMCwxMDAsCi0gICAgMywwLDEwNyw5LDAsMTE0LDQ1LDAsMTI0LDEsMCwxMTAsMywwLDEwNSwwLAotICAgIDAsMTI1LDYsMCwxMTYsMiwwLDEyNCw2LDAsMTMxLDEsMCwxMjUsNywwLAotICAgIDExNiwwLDAsMTI0LDAsMCwxMjQsNywwLDEyNCw0LDAsMTMxLDMsMCwxMjUsCi0gICAgNSwwLDEyNCwzLDAsMTE1LDIwNywwLDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwKLSAgICAwLDExNCwxMjIsMCwxMTYsMCwwLDEyNCwwLDAsMTA2LDMsMCwxMDAsMiwwLAotICAgIDEzMSwxLDAsMTAwLDEsMCwyNSwxMzEsMSwwLDgzLDEyNCwwLDAsMTE1LDEzMiwKLSAgICAwLDEyNCw1LDAsODMsMTE2LDQsMCwxMjQsMCwwLDEzMSwxLDAsMTE2LDQsCi0gICAgMCwxMjQsMCwwLDEwNiwzLDAsMTAwLDIsMCwxMzEsMSwwLDEwMCwxLDAsCi0gICAgMjUsMTMxLDEsMCwyNCwxMjUsOCwwLDExNiw1LDAsMTA2LDYsMCwxMjQsNSwKLSAgICAwLDEwNiw3LDAsMTAwLDMsMCwxMTYsNCwwLDEyNCw1LDAsMTA2LDcsMCwKLSAgICAxMzEsMSwwLDEyNCw4LDAsMjQsMTMzLDIsMCwyNSwyNSw4MywxMTAsMTYsMCwKLSAgICAxMTYsOCwwLDEyNCw1LDAsMTI0LDMsMCwxMTYsMCwwLDEzMSwzLDAsODMsCi0gICAgMTAwLDMsMCw4Myw0MCw0LDAsMCwwLDExNywyMTQsMSwwLDAsNzMsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwzMiw5NywzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw0NiwxMCwxMCwKLSAgICAzMiwzMiwzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsCi0gICAgMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTE3LDExNSwKLSAgICAxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTA1LDExMCwxMDIsMTAxLDExNCwzMiwxMTksMTA0LDEwMSwxMTQsCi0gICAgMTAxLDMyLDExNiwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwNSwxMTUsMzIsCi0gICAgMTExLDk5LDk5LDExNywxMTQsMTA1LDExMCwxMDMsMzIsMTAyLDExNCwxMTEsMTA5LDEwLDMyLDMyLAotICAgIDMyLDMyLDExNiwxMTEsMzIsMTA0LDk3LDExMCwxMDAsMTA4LDEwMSwzMiwxMTQsMTAxLDEwOCw5NywKLSAgICAxMTYsMTA1LDExOCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTE1LDQ2LDMyLDg0LDEwNCwKLSAgICAxMDEsMzIsMzksMTA4LDExMSw5OSw5NywxMDgsMTE1LDM5LDMyLDk3LDExNCwxMDMsMTE3LDEwOSwKLSAgICAxMDEsMTEwLDExNiwzMiwxMDUsMTE1LDMyLDEwNSwxMDMsMTEwLDExMSwxMTQsMTAxLDEwMCw0NiwzMiwKLSAgICA4NCwxMDQsMTAxLDEwLDMyLDMyLDMyLDMyLDM5LDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwKLSAgICAxMTYsMzksMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDExNSwxMTIsMTAxLDk5LAotICAgIDEwNSwxMDIsMTA1LDEwMSwxMTUsMzIsMTE5LDEwNCw5NywxMTYsMzIsMTE1LDEwNCwxMTEsMTE3LDEwOCwKLSAgICAxMDAsMzIsMTAxLDEyMCwxMDUsMTE1LDExNiwzMiw5NywxMTUsMzIsOTcsMTE2LDExNiwxMTQsMTA1LAotICAgIDk4LDExNywxMTYsMTAxLDExNSwzMiwxMTEsMTEwLDMyLDExNiwxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMDUsMTEwLDEwMywzMiwxMDUsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsOTYsOTYsMTAyLAotICAgIDExNCwxMTEsMTA5LDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDMyLDYwLDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsNjIsOTYsOTYsNDEsNDYsCi0gICAgMzIsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDgsMTAxLDExOCwxMDEsMTA4LDM5LDEwLDMyLDMyLAotICAgIDMyLDMyLDk3LDExNCwxMDMsMTE3LDEwOSwxMDEsMTEwLDExNiwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLAotICAgIDExNSwxMDEsMTEwLDExNiwxMTUsMzIsMTE2LDEwNCwxMDEsMzIsMTEyLDk3LDk5LDEwNyw5NywxMDMsCi0gICAgMTAxLDMyLDEwOCwxMTEsOTksOTcsMTE2LDEwNSwxMTEsMTEwLDMyLDExNiwxMTEsMzIsMTA1LDEwOSwKLSAgICAxMTIsMTExLDExNCwxMTYsMzIsMTAyLDExNCwxMTEsMTA5LDMyLDEwNSwxMTAsMzIsOTcsMzIsMTE0LAotICAgIDEwMSwxMDgsOTcsMTE2LDEwNSwxMTgsMTAxLDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwKLSAgICAxMTQsMTE2LDMyLDQwLDEwMSw0NiwxMDMsNDYsMzIsOTYsOTYsMTAyLDExNCwxMTEsMTA5LDMyLAotICAgIDQ2LDQ2LDExMiwxMDcsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDMyLDEwOSwxMTEsMTAwLAotICAgIDk2LDk2LDMyLDExOSwxMTEsMTE3LDEwOCwxMDAsMzIsMTA0LDk3LDExOCwxMDEsMzIsOTcsMzIsCi0gICAgMzksMTA4LDEwMSwxMTgsMTAxLDEwOCwzOSwzMiwxMTEsMTAyLDMyLDUwLDQxLDQ2LDEwLDEwLAotICAgIDMyLDMyLDMyLDMyLDEwNSwwLDAsMCwwLDExNywxLDAsMCwwLDQ2LDc4LAotICAgIDQwLDksMCwwLDAsMTE3LDExLDAsMCwwLDk1LDEwMyw5OSwxMDAsOTUsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTE3LDQsMCwwLDAsNzgsMTExLDExMCwxMDEsMTE3LDE3LAotICAgIDAsMCwwLDk1LDk5LDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LAotICAgIDEwMywxMDEsOTUsOTUsMTE3LDksMCwwLDAsMTEyLDk3LDExNCwxMTYsMTA1LDExNiwxMDUsCi0gICAgMTExLDExMCwxMTcsMywwLDAsMCwxMDgsMTAxLDExMCwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsMTEwLDk3LDEwOSwxMDEsOTUsOTUsMTE3LDE2LDAsMCwwLAotICAgIDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwKLSAgICA0MCw5LDAsMCwwLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw3LAotICAgIDAsMCwwLDEwMywxMDgsMTExLDk4LDk3LDEwOCwxMTUsMTE3LDYsMCwwLDAsMTA4LAotICAgIDExMSw5OSw5NywxMDgsMTE1LDExNyw4LDAsMCwwLDEwMiwxMTQsMTExLDEwOSwxMDgsMTA1LAotICAgIDExNSwxMTYsMTE3LDUsMCwwLDAsMTA4LDEwMSwxMTgsMTAxLDEwOCwxMTcsNiwwLDAsCi0gICAgMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsOCwwLDAsMCwxMDMsMTA4LDExMSw5OCwKLSAgICA5NywxMDgsMTE1LDk1LDExNyw3LDAsMCwwLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwKLSAgICAxMTcsNywwLDAsMCw5OSwxMTcsMTE2LDk1LDExMSwxMDIsMTAyLDQwLDAsMCwwLAotICAgIDAsNDAsMCwwLDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLAotICAgIDEwMSwxMTAsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsCi0gICAgMTExLDExNiwxMTUsMTE2LDExNCw5NywxMTIsNjIsMTE3LDEwLDAsMCwwLDk1LDk1LDEwNSwKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDk1LDk1LDExOCw2LDAsMCwxMTUsMjYsMCwwLDAsCi0gICAgMCwxMSwxMiwxLDE1LDIsMjQsMSwxMiwxLDE4LDEsNiwzLDEyLDEsCi0gICAgMjMsMSw2LDEsNCw0LDM1LDMsNDAsMiwxMTcsMTAsMCwwLDAsOTUsCi0gICAgOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsOTksMiwwLDAsMCwwLDAsCi0gICAgMCwwLDE2LDAsMCwwLDEzLDAsMCwwLDY3LDAsMCwwLDExNSwyNCwKLSAgICAzLDAsMCwxMjQsMSwwLDk3LDAsMCwxMjQsMCwwLDk3LDEsMCwxMTYsCi0gICAgMSwwLDEwNiwyLDAsMTA2LDMsMCwxMTQsMzMsMCwxMTYsNCwwLDk3LDUsCi0gICAgMCwxMTAsNiwwLDExNiw2LDAsOTcsNSwwLDExNiw3LDAsMTE2LDEsMCwKLSAgICAxMzEsMSwwLDEyNSwyLDAsMTIwLDExOSwwLDExNiwxLDAsMTA2LDgsMCwxMDYsCi0gICAgOSwwLDEzMSwwLDAsNjgsOTMsMTAyLDAsOTIsMiwwLDEyNSwzLDAsMTI1LAotICAgIDQsMCwxMTYsMTAsMCwxMjQsNCwwLDEyNCwyLDAsMTMxLDIsMCwxMTQsNjcsCi0gICAgMCwxMTYsMTEsMCwxMjQsNCwwLDEwMCwxLDAsMTMxLDIsMCwxMTUsMTY5LDAsCi0gICAgMTI0LDMsMCwxMTYsMSwwLDEwNiwxMiwwLDEwNyw2LDAsMTE0LDEzNiwwLDExNiwKLSAgICAxMywwLDEyNCw0LDAsOTUsMTQsMCwxMTMsMTY2LDAsMTE2LDAsMCwxMDYsMTUsCi0gICAgMCwxMjQsMywwLDEzMSwxLDAsMTE0LDE2NiwwLDExNiwxNiwwLDEyNCw0LDAsCi0gICAgOTUsMTQsMCwxMTMsMTY2LDAsMTEzLDE2OSwwLDExMyw2NywwLDExMyw2NywwLDg3LAotICAgIDExNiwxLDAsMTA2LDgsMCwxMTYsMTcsMCwyNSwxMjUsNSwwLDEyMCw3NiwwLAotICAgIDEwMCwyOCwwLDY4LDkzLDY4LDAsMTI1LDYsMCwxMjQsNiwwLDExNiwxLDAsCi0gICAgMTA2LDgsMCwxMDcsNywwLDExNCwyMzIsMCwxMTYsMTMsMCwxMDYsMTgsMCwxMjQsCi0gICAgNiwwLDEzMSwxLDAsMTI1LDcsMCwxMTAsMTMsMCwxMTYsMSwwLDEwNiw4LAotICAgIDAsMTI0LDYsMCwyNSwxMjUsNywwLDExNiwxOSwwLDEyNCw1LDAsMTI0LDYsCi0gICAgMCwxMjQsNywwLDEzMSwzLDAsMSwxMTMsMTkzLDAsODcsMTAwLDYsMCwxMDAsCi0gICAgNywwLDEwMywxLDAsMTAyLDIsMCwxMDAsOCwwLDEwMCw5LDAsMTAwLDcsCi0gICAgMCwxMDMsMiwwLDEwMiwyLDAsMTAwLDEwLDAsMTAwLDksMCwxMDAsNywwLAotICAgIDEwMywyLDAsMTAyLDIsMCwxMDIsMywwLDEyNSw4LDAsMTIwLDE4OSwwLDEyNCwKLSAgICA4LDAsNjgsOTMsMTY5LDAsOTIsMiwwLDEyNSw5LDAsMTI1LDEwLDAsMTE2LAotICAgIDIwLDAsMTAwLDExLDAsMTAwLDEyLDAsMTMyLDAsMCwxMjQsMTAsMCw2OCwxMzEsCi0gICAgMSwwLDEzMSwxLDAsMTE1LDEwNywxLDExNiwyMSwwLDEzMCwxLDAsMTI0LDEwLAotICAgIDAsMTAwLDEzLDAsMjUsMTI1LDExLDAsMTI0LDksMCwxMTYsMSwwLDEwNiw4LAotICAgIDAsMTA3LDYsMCwxMTQsMTQ5LDEsMTE2LDEsMCwxMDYsOCwwLDEyNCw5LDAsCi0gICAgMjUsMTI1LDEyLDAsODAsMTEzLDY0LDEsMTIxLDYwLDAsMTE2LDEzLDAsMTA2LDE4LAotICAgIDAsMTI0LDksMCwxMzEsMSwwLDEyNSwxMiwwLDEyNCw5LDAsMTAwLDEwLDAsCi0gICAgMTA3LDIsMCwxMTQsMjA3LDEsMTAwLDE0LDAsMTE2LDEsMCwxMDYsMjIsMCwxMDcsCi0gICAgNiwwLDExNCwyMDcsMSwxMjQsMTAsMCwxMDAsMTUsMCwyNSwxMjUsMTEsMCwxMTAsCi0gICAgMCwwLDgwLDg3LDExMyw2NCwxLDQsMTE2LDIzLDAsMTA3LDEwLDAsMTE0LDIzMiwKLSAgICAxLDEsMSwxLDExOSw2NCwxLDg5LDExMyw2NCwxLDg4LDExMyw2NCwxLDg3LAotICAgIDExNiwyMywwLDEwMCwxNiwwLDEzMSwxLDAsMTMwLDEsMCwxMjEsMTksMCwxMTYsCi0gICAgMTMsMCwxMDYsMTgsMCwxMDAsMTcsMCwxMzEsMSwwLDEyNSwxMywwLDg3LDExMCwKLSAgICAyNCwwLDQsMTE2LDIzLDAsMTA3LDEwLDAsMTE0LDM4LDIsMSwxLDEsMTAwLAotICAgIDI3LDAsMTI1LDEzLDAsODksMTEwLDEsMCw4OCwxMTYsMTMsMCwxMDYsMTgsMCwKLSAgICAxMDAsMTgsMCwxMzEsMSwwLDEyNSwxNCwwLDEyNCw5LDAsMTAwLDgsMCwxMDcsCi0gICAgMiwwLDExNCwxMDAsMiwxMTYsMTMsMCwxMDYsMTgsMCwxMDAsMTksMCwxMzEsMSwKLSAgICAwLDEyNSwxNSwwLDExNiwxOSwwLDEyNCw1LDAsMTAwLDIwLDAsMTI0LDE1LDAsCi0gICAgMTMxLDMsMCwxLDExMCwwLDAsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMjEsMCwKLSAgICAxMjQsMTIsMCwxMzEsMywwLDEsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMTcsMCwKLSAgICAxMjQsMTMsMCwxMzEsMywwLDEsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMTgsMCwKLSAgICAxMjQsMTQsMCwxMzEsMywwLDEsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMjIsMCwKLSAgICAxMjQsMTEsMCwxMzEsMywwLDEsMTE2LDE5LDAsMTI0LDUsMCwxMDAsMjMsMCwKLSAgICAxMTYsMjUsMCwxMjQsMTAsMCwxMzEsMSwwLDEzMSwzLDAsMSwxMTYsMTksMCwKLSAgICAxMjQsNSwwLDEwMCwyNCwwLDExNiwyNiwwLDEzMSwwLDAsMTMxLDMsMCwxLAotICAgIDExNiwyNywwLDEwNiwyOCwwLDExNiwwLDAsMTA2LDI5LDAsMTMxLDAsMCwxMzEsCi0gICAgMSwwLDEsMTI0LDksMCwxMDAsOCwwLDEwNywyLDAsMTE0LDIwLDMsMTE2LAotICAgIDMwLDAsMTA2LDMxLDAsMTAwLDI1LDAsMTMxLDEsMCwxLDEwMCwyNiwwLDExNiwKLSAgICAyNywwLDEwNyw2LDAsMTE0LDIwLDMsMTAwLDI5LDAsMTE2LDMzLDAsOTUsMzQsCi0gICAgMCwxMTMsMjAsMywxMTAsMCwwLDEwMCwyNywwLDgzLDQwLDMwLDAsMCwwLAotICAgIDExNywyNTAsMCwwLDAsODMsMTAxLDExNiwxMTcsMTEyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsCisgICAgMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsMTU5LDgsMCwwLDExNSw0MiwwLDAsMCwKKyAgICAwLDEsNiwxLDE5LDEsNiwxLDE1LDEsMTYsMiwxNSwxLDExLDEsCisgICAgMTMsMSwzLDEsMTMsMSwxMywxLDIyLDEsMjYsMSwxNSwxLDEyLDEsCisgICAgMzAsMiwxOCwxLDYsMiwxMywxLDMyLDEsMTE0LDExNCwxLDAsMCw5OSwKKyAgICAyLDAsMCwwLDAsMCwwLDAsMiwwLDAsMCwxMCwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMzYsMCwwLDAsMTE2LDAsMCwxMjQsMCwwLDEzMSwKKyAgICAxLDAsMTQzLDE4LDAsMSwxMTYsMSwwLDEyNCwwLDAsMTI0LDEsMCwxMzEsCisgICAgMiwwLDgzLDg3LDEwMCwxLDAsODEsODgsMTAwLDEsMCw4Myw0MSwyLDEyMiwKKyAgICA1NCw3MCwxMDUsMTEwLDEwMCwzMiw5NywxMTAsMTAwLDMyLDEwOCwxMTEsOTcsMTAwLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDQ0LDMyLDk3LDExMCwxMDAsMzIsMTE0LAorICAgIDEwMSwxMDgsMTAxLDk3LDExNSwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsMzIsMTA4LDExMSw5OSwxMDcsNDYsNzgsNDEsMiwxMTQsMTAzLDAsMCwwLDExNCwKKyAgICAxMTQsMSwwLDAsNDEsMiwxMTQsNjcsMCwwLDAsMTE0LDExMywxLDAsMCwKKyAgICAxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsCisgICAgMTQsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDk3LDExMCwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTg2LAorICAgIDgsMCwwLDExNSw0LDAsMCwwLDAsMiwxMywxLDExNCwxMTUsMSwwLAorICAgIDAsOTksMywwLDAsMCwwLDAsMCwwLDUsMCwwLDAsNCwwLAorICAgIDAsMCw2NywwLDAsMCwxMTUsMTcyLDAsMCwwLDExNiwwLDAsMTI0LDAsCisgICAgMCwxMjQsMSwwLDEyNCwyLDAsMTMxLDMsMCwxLDEyNCwyLDAsMTAwLDEsCisgICAgMCwxMDcsNCwwLDExNCw0OSwwLDExNiwxLDAsMTI0LDAsMCwxMjQsMSwwLAorICAgIDEyNCwyLDAsMTMxLDMsMCwxMjUsMCwwLDExMCwwLDAsMTE2LDIsMCwxMDYsCisgICAgMywwLDEzMSwwLDAsMSwxMjQsMCwwLDExNiw0LDAsMTA2LDUsMCwxMDcsCisgICAgNywwLDExNCw4NywwLDExNiw2LDAsMTI0LDAsMCwxMTYsNywwLDEzMSwyLAorICAgIDAsODMsMTE2LDQsMCwxMDYsNSwwLDEyNCwwLDAsMjUsMTI1LDMsMCwxMjQsCisgICAgMywwLDEwMCwyLDAsMTA3LDgsMCwxMTQsMTU4LDAsMTE2LDIsMCwxMDYsOCwKKyAgICAwLDEzMSwwLDAsMSwxMDAsMywwLDEwNiw5LDAsMTI0LDAsMCwxMzEsMSwKKyAgICAwLDEyNSw0LDAsMTE2LDEwLDAsMTI0LDQsMCwxMDAsNCwwLDEyNCwwLDAsCisgICAgMTMxLDEsMSwxMzAsMSwwLDExMCwwLDAsMTE2LDExLDAsMTI0LDAsMCwxMzEsCisgICAgMSwwLDEsMTI0LDMsMCw4Myw0MSw1LDk3LDUwLDEsMCwwLDczLDEwOSwKKyAgICAxMTIsMTExLDExNCwxMTYsMzIsOTcsMTEwLDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCwzMiwKKyAgICAxMTYsMTA0LDEwMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwzMiw5OCw5NywxMTUsMTAxLDEwMCwKKyAgICAzMiwxMTEsMTEwLDMyLDEwNSwxMTYsMTE1LDMyLDExMCw5NywxMDksMTAxLDQ0LDMyLDExNiwxMDQsCisgICAgMTAxLDMyLDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwzMiwxMTYsMTA0LDEwMSwzMiw5OSw5NywKKyAgICAxMDgsMTA4LDMyLDEwNSwxMTUsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwxMTAsMTAzLDMyLAorICAgIDEwOSw5NywxMDAsMTAxLDMyLDEwMiwxMTQsMTExLDEwOSw0NCwzMiw5NywxMTAsMTAwLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwOCwxMDEsMTE4LDEwMSwxMDgsMzIsOTcsMTAwLDEwNiwxMTcsMTE1LDExNiwxMDksCisgICAgMTAxLDExMCwxMTYsNDYsMTAsMTAsMzIsMzIsMzIsMzIsODQsMTA0LDEwNSwxMTUsMzIsMTAyLAorICAgIDExNywxMTAsOTksMTE2LDEwNSwxMTEsMTEwLDMyLDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsCisgICAgMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDMsMTE0LDEwMSw5NywxMTYsMTAxLDExNSwxMTYsMzIsCisgICAgOTksMTExLDEwOSwxMDksMTExLDExMCwzMiwxMDAsMTAxLDExMCwxMTEsMTA5LDEwNSwxMTAsOTcsMTE2LAorICAgIDExMSwxMTQsMzIsMTExLDEwMiwzMiwxMDIsMTE3LDExMCw5OSwxMTYsMTA1LDExMSwxMTAsOTcsMTA4LAorICAgIDEwNSwxMTYsMTIxLDEwLDMyLDMyLDMyLDMyLDk4LDEwMSwxMTYsMTE5LDEwMSwxMDEsMTEwLDMyLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDMyLDk3LDExMCwKKyAgICAxMDAsMzIsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsNDYsMzIsODQsMTA0LAorICAgIDEwNSwxMTUsMzIsMTA1LDExMCw5OSwxMDgsMTE3LDEwMCwxMDEsMTE1LDMyLDExNSwxMDEsMTE2LDExNiwKKyAgICAxMDUsMTEwLDEwMywzMiw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMzIsCisgICAgMTA1LDEwMiwxMCwzMiwzMiwzMiwzMiwxMTYsMTA0LDEwMSwzMiwxMDgsMTExLDk3LDEwMCwxMDEsCisgICAgMTE0LDMyLDEwMCwxMDUsMTAwLDMyLDExMCwxMTEsMTE2LDQ2LDEwLDEwLDMyLDMyLDMyLDMyLAorICAgIDExNCw4NCwwLDAsMCw3OCwxMjIsNDAsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsMTExLAorICAgIDEwMiwzMiwxMjMsMTI1LDMyLDEwNCw5NywxMDgsMTE2LDEwMSwxMDAsNTksMzIsNzgsMTExLDExMCwKKyAgICAxMDEsMzIsMTA1LDExMCwzMiwxMTUsMTIxLDExNSw0NiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsCisgICAgMTE0LDY3LDAsMCwwLDQxLDEyLDExNCwxMTEsMSwwLDAsMTE0LDEwNSwxLDAsCisgICAgMCwxMTQsMTA2LDAsMCwwLDExNCw0LDEsMCwwLDExNCw3LDAsMCwwLAorICAgIDExNCw3MywwLDAsMCwxMTQsMTE1LDEsMCwwLDIxOCwxMSw5NSwxMDMsOTksMTAwLAorICAgIDk1LDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDExNCwxMDcsMCwwLDAsMTE0LDQ3LDAsMCwKKyAgICAwLDExNCwxNTQsMCwwLDAsMTE0LDExMiwwLDAsMCw0MSw1LDExNCw2NywwLAorICAgIDAsMCwxMTQsMTAzLDEsMCwwLDExNCwxMDQsMSwwLDAsMTE0LDE4MCwwLDAsCisgICAgMCwxMTQsMTUyLDAsMCwwLDExNCw0LDAsMCwwLDExNCw0LDAsMCwwLAorICAgIDExNCw1LDAsMCwwLDExNCwxMTYsMSwwLDAsMTkyLDgsMCwwLDExNSwyOCwKKyAgICAwLDAsMCwwLDksMTYsMSwxMiwxLDIxLDEsMTAsMSwxNSwxLDEzLAorICAgIDEsMTMsMSwxMiwxLDEwLDEsNiwxLDksMSwyMSwxLDEwLDEsMTE0LAorICAgIDExNiwxLDAsMCw5OSwzLDAsMCwwLDAsMCwwLDAsNiwwLDAsCisgICAgMCwxNywwLDAsMCw2NywwLDAsMCwxMTUsMSwxLDAsMCwxMTYsMCwKKyAgICAwLDEyNCwwLDAsMTAwLDEsMCwxMzEsMiwwLDExNCwyNTMsMCwxMDAsMiwwLAorICAgIDEyNCwxLDAsMTA3LDYsMCwxMTQsODksMCwxMTYsMSwwLDEyNCwxLDAsMTMxLAorICAgIDEsMCwxMjUsMSwwLDEyNCwxLDAsMTA2LDIsMCwxMDAsMiwwLDEzMSwxLAorICAgIDAsMSwxMTYsMCwwLDEyNCwwLDAsMTAwLDMsMCwxMzEsMiwwLDExNCw4OSwKKyAgICAwLDEyNCwxLDAsMTA2LDMsMCwxMjQsMCwwLDEwNiw0LDAsMTMxLDEsMCwKKyAgICAxLDExMyw4OSwwLDExMCwwLDAsMTIwLDE2MSwwLDEyNCwxLDAsNjgsOTMsMTUwLAorICAgIDAsMTI1LDMsMCwxMTYsMCwwLDEyNCwwLDAsMTI0LDMsMCwxMzEsMiwwLAorICAgIDExNSw5NiwwLDEwMCw0LDAsMTA2LDUsMCwxMjQsMCwwLDEwNiw2LDAsMTI0LAorICAgIDMsMCwxMzEsMiwwLDEyNSw0LDAsMTIxLDE3LDAsMTE2LDcsMCwxMjQsMiwKKyAgICAwLDEyNCw0LDAsMTMxLDIsMCwxLDg3LDExMywyNDYsMCw0LDExNiw4LDAsCisgICAgMTA3LDEwLDAsMTE0LDI0MiwwLDEsMTI1LDUsMCwxLDEyMiw1MywwLDExNiw5LAorICAgIDAsMTI0LDUsMCwxMzEsMSwwLDEwNiwxMCwwLDExNiwxMSwwLDEzMSwxLDAsCisgICAgMTE0LDIyMSwwLDEyNCw1LDAsMTA2LDEyLDAsMTI0LDQsMCwxMDcsMiwwLDExNCwKKyAgICAyMjEsMCwxMTksOTYsMCwxMTMsMjIxLDAsMTEwLDAsMCwxMzAsMCwwLDg3LDg5LAorICAgIDEwMCw1LDAsMTAwLDUsMCwxMjUsNSwwLDEyNiw1LDAsODgsMTEzLDI0NiwwLAorICAgIDg4LDExMyw5NiwwLDExMyw5NiwwLDg3LDExMCwwLDAsMTI0LDAsMCw4Myw0MSwKKyAgICA2LDEyMiwyMzgsNzAsMTA1LDEwMywxMTcsMTE0LDEwMSwzMiwxMTEsMTE3LDExNiwzMiwxMTksMTA0LAorICAgIDk3LDExNiwzMiw5NSw5NSwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw5NSw5NSwzMiwxMTUsMTA0LAorICAgIDExMSwxMTcsMTA4LDEwMCwzMiwxMTQsMTAxLDExNiwxMTcsMTE0LDExMCw0NiwxMCwxMCwzMiwzMiwKKyAgICAzMiwzMiw4NCwxMDQsMTAxLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDk1LDMyLDExMiw5NywKKyAgICAxMTQsOTcsMTA5LDEwMSwxMTYsMTAxLDExNCwzMiwxMDUsMTE1LDMyLDk3LDMyLDk5LDk3LDEwOCwKKyAgICAxMDgsOTcsOTgsMTA4LDEwMSwzMiwxMTksMTA0LDEwNSw5OSwxMDQsMzIsMTE2LDk3LDEwNywxMDEsCisgICAgMTE1LDMyLDExNiwxMDQsMTAxLDMyLDExMCw5NywxMDksMTAxLDMyLDExMSwxMDIsMzIsMTA5LDExMSwKKyAgICAxMDAsMTE3LDEwOCwxMDEsMzIsMTE2LDExMSwxMCwzMiwzMiwzMiwzMiwxMDUsMTA5LDExMiwxMTEsCisgICAgMTE0LDExNiw0NiwzMiw3MywxMTYsMzIsMTA1LDExNSwzMiwxMTQsMTAxLDExMywxMTcsMTA1LDExNCwKKyAgICAxMDEsMTAwLDMyLDExNiwxMTEsMzIsMTAwLDEwMSw5OSwxMTEsMTE3LDExMiwxMDgsMTAxLDMyLDExNiwKKyAgICAxMDQsMTAxLDMyLDEwMiwxMTcsMTEwLDk5LDExNiwxMDUsMTExLDExMCwzMiwxMDIsMTE0LDExMSwxMDksCisgICAgMzIsOTcsMTE1LDExNSwxMTcsMTA5LDEwNSwxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDEwOCwxMDUsOTgsMzksMTE1LDEwLDMyLDMyLDMyLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LAorICAgIDMyLDEwNSwxMDksMTEyLDEwOCwxMDEsMTA5LDEwMSwxMTAsMTE2LDk3LDExNiwxMDUsMTExLDExMCwzMiwKKyAgICAxMDUsMTE1LDMyLDEwMCwxMDEsMTE1LDEwNSwxMTQsMTAxLDEwMCw0NiwxMCwxMCwzMiwzMiwzMiwKKyAgICAzMiwxMTQsMjQ3LDAsMCwwLDI1MCwxLDQyLDIxOCw3LDk1LDk1LDk3LDEwOCwxMDgsCisgICAgOTUsOTUsMTIyLDUsMTIzLDEyNSw0NiwxMjMsMTI1LDc4LDQxLDEzLDExNCw2MCwwLDAsCisgICAgMCwxMTQsMjQ2LDAsMCwwLDIxOCw2LDExNCwxMDEsMTA5LDExMSwxMTgsMTAxLDExNCwxOTgsCisgICAgMCwwLDAsMTE0LDExOCwxLDAsMCwxMTQsNDcsMCwwLDAsMTE0LDU3LDAsCisgICAgMCwwLDExNCwxMTQsMCwwLDAsMTE0LDE1NCwwLDAsMCwxMTQsODMsMSwwLAorICAgIDAsMTE0LDksMCwwLDAsMjE4LDE1LDk1LDY5LDgyLDgyLDk1LDc3LDgzLDcxLAorICAgIDk1LDgwLDgyLDY5LDcwLDczLDg4LDExNCw2NywwLDAsMCw0MSw2LDExNCwxODAsCisgICAgMCwwLDAsMjE4LDgsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwxMTQsMTEzLDEsCisgICAgMCwwLDExNCwxNiwwLDAsMCw5MCw5LDEwMiwxMTQsMTExLDEwOSw5NSwxMTAsOTcsCisgICAgMTA5LDEwMSwxMTQsNDEsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLAorICAgIDAsMTE0LDUsMCwwLDAsMjE4LDE2LDk1LDEwNCw5NywxMTAsMTAwLDEwOCwxMDEsOTUsCisgICAgMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwyMTYsOCwwLDAsMTE1LDM0LDAsMCwKKyAgICAwLDAsMTAsMTUsMSwxMiwxLDEyLDEsMTMsMSwxNSwxLDIyLDEsMTMsCisgICAgMSwxNSwxLDIxLDEsMywxLDE3LDEsMTgsNCwyMSwxLDE1LDEsOSwKKyAgICAxLDMyLDEsMTE0LDEyMiwxLDAsMCw5OSwxLDAsMCwwLDAsMCwwLAorICAgIDAsMiwwLDAsMCwyLDAsMCwwLDY3LDAsMCwwLDExNSw3OCwwLAorICAgIDAsMCwxMjQsMCwwLDEwNiwwLDAsMTAwLDEsMCwxMzEsMSwwLDEyNSwxLAorICAgIDAsMTI0LDEsMCwxMDAsMiwwLDEwNyw4LDAsMTE0LDc0LDAsMTI0LDAsMCwKKyAgICAxMDAsMywwLDI1LDEyNSwxLDAsMTAwLDQsMCwxMjQsMCwwLDEwNyw3LDAsCisgICAgMTE0LDc0LDAsMTI0LDEsMCwxMDYsMSwwLDEwMCw1LDAsMTMxLDEsMCwxMDAsCisgICAgNiwwLDI1LDEyNSwxLDAsMTEzLDc0LDAsMTEwLDAsMCwxMjQsMSwwLDgzLAorICAgIDQxLDcsMTIyLDE2Nyw2Nyw5NywxMDgsOTksMTE3LDEwOCw5NywxMTYsMTAxLDMyLDExOSwxMDQsCisgICAgOTcsMTE2LDMyLDk1LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSw5NSw5NSwzMiwxMTUsCisgICAgMTA0LDExMSwxMTcsMTA4LDEwMCwzMiw5OCwxMDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsOTUsCisgICAgOTUsMTEyLDk3LDk5LDEwNyw5NywxMDMsMTAxLDk1LDk1LDMyLDEwNSwxMTUsMzIsMTEwLDExMSwKKyAgICAxMTYsMzIsMTAzLDExNyw5NywxMTQsOTcsMTEwLDExNiwxMDEsMTAxLDEwMCwzMiwxMTYsMTExLDMyLAorICAgIDk4LDEwMSwzMiwxMDAsMTAxLDEwMiwxMDUsMTEwLDEwMSwxMDAsMzIsMTExLDExNCwzMiw5OSwxMTEsCisgICAgMTE3LDEwOCwxMDAsMzIsOTgsMTAxLDMyLDExNSwxMDEsMTE2LDMyLDExNiwxMTEsMzIsNzgsMTExLAorICAgIDExMCwxMDEsMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMTQsMTAxLDExMiwxMTQsMTAxLDExNSwKKyAgICAxMDEsMTEwLDExNiwzMiwxMTYsMTA0LDk3LDExNiwzMiwxMDUsMTE2LDExNSwzMiwxMTIsMTE0LDExMSwKKyAgICAxMTIsMTAxLDExNCwzMiwxMTgsOTcsMTA4LDExNywxMDEsMzIsMTA1LDExNSwzMiwxMTcsMTEwLDEwNywKKyAgICAxMTAsMTExLDExOSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDI1MSwwLDAsMCwKKyAgICA3OCwxMTQsNTcsMCwwLDAsMTE0LDI0NywwLDAsMCwxMTQsMTE2LDAsMCwwLAorICAgIDExNCw4NCwwLDAsMCw0MSwyLDExNCw5MywwLDAsMCwxMTQsMzIsMCwwLAorICAgIDAsNDEsMiwyMTgsNywxMDMsMTA4LDExMSw5OCw5NywxMDgsMTE1LDExNCwxMDMsMSwwLAorICAgIDAsMTE0LDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsCisgICAgMjE4LDE3LDk1LDk5LDk3LDEwOCw5OSw5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywKKyAgICAxMDEsOTUsOTUsMjQ4LDgsMCwwLDExNSwxMiwwLDAsMCwwLDcsMTUsMSwKKyAgICAxMiwxLDEwLDEsMTIsMSwyNSwxLDExNCwxMjQsMSwwLDAsOTksMCwwLAorICAgIDAsMCwwLDAsMCwwLDMsMCwwLDAsMywwLDAsMCw2NywwLAorICAgIDAsMCwxMTUsNTUsMCwwLDAsMTE2LDAsMCwxMTYsMSwwLDEwNiwyLDAsCisgICAgMTMxLDAsMCwxMDIsMiwwLDEyNSwwLDAsMTE2LDMsMCwxMTYsNCwwLDEwMiwKKyAgICAyLDAsMTI1LDEsMCwxMTYsNSwwLDExNiw2LDAsMTAyLDIsMCwxMjUsMiwKKyAgICAwLDEyNCwwLDAsMTI0LDEsMCwxMjQsMiwwLDEwMywzLDAsODMsNDEsMSwKKyAgICAxMjIsOTUsODIsMTAxLDExNiwxMTcsMTE0LDExMCwxMTUsMzIsOTcsMzIsMTA4LDEwNSwxMTUsMTE2LAorICAgIDMyLDExMSwxMDIsMzIsMTAyLDEwNSwxMDgsMTAxLDQ1LDk4LDk3LDExNSwxMDEsMTAwLDMyLDEwOSwKKyAgICAxMTEsMTAwLDExNywxMDgsMTAxLDMyLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsMTE1LDQ2LDEwLDEwLAorICAgIDMyLDMyLDMyLDMyLDY5LDk3LDk5LDEwNCwzMiwxMDUsMTE2LDEwMSwxMDksMzIsMTA1LDExNSwKKyAgICAzMiw5NywzMiwxMTYsMTE3LDExMiwxMDgsMTAxLDMyLDQwLDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsCisgICAgNDQsMzIsMTE1LDExNywxMDIsMTAyLDEwNSwxMjAsMTAxLDExNSw0MSw0NiwxMCwzMiwzMiwzMiwKKyAgICAzMiw0MSw3LDExNCw1NywxLDAsMCwxMTQsMTA2LDAsMCwwLDIxOCwxOCwxMDEsCisgICAgMTIwLDExNiwxMDEsMTEwLDExNSwxMDUsMTExLDExMCw5NSwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsCisgICAgMTE1LDExNCw5LDEsMCwwLDExNCwxMzUsMCwwLDAsMTE0LDgsMSwwLDAsCisgICAgMTE0LDIzMywwLDAsMCw0MSwzLDkwLDEwLDEwMSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwKKyAgICAxMTEsMTEwLDExNSw5MCw2LDExNSwxMTEsMTE3LDExNCw5OSwxMDEsOTAsOCw5OCwxMjEsMTE2LAorICAgIDEwMSw5OSwxMTEsMTAwLDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsCisgICAgNSwwLDAsMCwxMTQsMjQxLDAsMCwwLDcsOSwwLDAsMTE1LDgsMCwKKyAgICAwLDAsMCw1LDE4LDEsMTIsMSwxMiwxLDExNCwyNDEsMCwwLDAsOTksCisgICAgNSwwLDAsMCwwLDAsMCwwLDksMCwwLDAsNSwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMjI3LDAsMCwwLDEyNCw0LDAsMTAwLDEsMCwxMDcsCisgICAgMiwwLDExNCwyNywwLDExNiwwLDAsMTI0LDAsMCwxMzEsMSwwLDEyNSw1LAorICAgIDAsMTEwLDU0LDAsMTI0LDEsMCwxMDAsMiwwLDEwNyw5LDAsMTE0LDQ1LDAsCisgICAgMTI0LDEsMCwxMTAsMywwLDEwNSwwLDAsMTI1LDYsMCwxMTYsMSwwLDEyNCwKKyAgICA2LDAsMTMxLDEsMCwxMjUsNywwLDExNiwwLDAsMTI0LDAsMCwxMjQsNywKKyAgICAwLDEyNCw0LDAsMTMxLDMsMCwxMjUsNSwwLDEyNCwzLDAsMTE1LDIwNywwLAorICAgIDEyNCw0LDAsMTAwLDEsMCwxMDcsMiwwLDExNCwxMjIsMCwxMTYsMCwwLDEyNCwKKyAgICAwLDAsMTA2LDIsMCwxMDAsMywwLDEzMSwxLDAsMTAwLDEsMCwyNSwxMzEsCisgICAgMSwwLDgzLDEyNCwwLDAsMTE1LDEzMiwwLDEyNCw1LDAsODMsMTE2LDMsMCwKKyAgICAxMjQsMCwwLDEzMSwxLDAsMTE2LDMsMCwxMjQsMCwwLDEwNiwyLDAsMTAwLAorICAgIDMsMCwxMzEsMSwwLDEwMCwxLDAsMjUsMTMxLDEsMCwyNCwxMjUsOCwwLAorICAgIDExNiw0LDAsMTA2LDUsMCwxMjQsNSwwLDEwNiw2LDAsMTAwLDIsMCwxMTYsCisgICAgMywwLDEyNCw1LDAsMTA2LDYsMCwxMzEsMSwwLDEyNCw4LDAsMjQsMTMzLAorICAgIDIsMCwyNSwyNSw4MywxMTAsMTYsMCwxMTYsNywwLDEyNCw1LDAsMTI0LDMsCisgICAgMCwxMTYsMCwwLDEzMSwzLDAsODMsMTAwLDIsMCw4Myw0MSw0LDk3LDIxNCwKKyAgICAxLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDMyLDk3LDMyLDEwOSwxMTEsMTAwLDExNywKKyAgICAxMDgsMTAxLDQ2LDEwLDEwLDMyLDMyLDMyLDMyLDg0LDEwNCwxMDEsMzIsMzksMTAzLDEwOCwKKyAgICAxMTEsOTgsOTcsMTA4LDExNSwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsMzIsCisgICAgMTA1LDExNSwzMiwxMTcsMTE1LDEwMSwxMDAsMzIsMTE2LDExMSwzMiwxMDUsMTEwLDEwMiwxMDEsMTE0LAorICAgIDMyLDExOSwxMDQsMTAxLDExNCwxMDEsMzIsMTE2LDEwNCwxMDEsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsMzIsMTA1LDExNSwzMiwxMTEsOTksOTksMTE3LDExNCwxMDUsMTEwLDEwMywzMiwxMDIsMTE0LAorICAgIDExMSwxMDksMTAsMzIsMzIsMzIsMzIsMTE2LDExMSwzMiwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLAorICAgIDMyLDExNCwxMDEsMTA4LDk3LDExNiwxMDUsMTE4LDEwMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwKKyAgICAxMTUsNDYsMzIsODQsMTA0LDEwMSwzMiwzOSwxMDgsMTExLDk5LDk3LDEwOCwxMTUsMzksMzIsCisgICAgOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLDEwNSwxMTUsMzIsMTA1LDEwMywxMTAsMTExLAorICAgIDExNCwxMDEsMTAwLDQ2LDMyLDg0LDEwNCwxMDEsMTAsMzIsMzIsMzIsMzIsMzksMTAyLDExNCwKKyAgICAxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwzOSwzMiw5NywxMTQsMTAzLDExNywxMDksMTAxLDExMCwxMTYsCisgICAgMzIsMTE1LDExMiwxMDEsOTksMTA1LDEwMiwxMDUsMTAxLDExNSwzMiwxMTksMTA0LDk3LDExNiwzMiwKKyAgICAxMTUsMTA0LDExMSwxMTcsMTA4LDEwMCwzMiwxMDEsMTIwLDEwNSwxMTUsMTE2LDMyLDk3LDExNSwzMiwKKyAgICA5NywxMTYsMTE2LDExNCwxMDUsOTgsMTE3LDExNiwxMDEsMTE1LDMyLDExMSwxMTAsMzIsMTE2LDEwNCwKKyAgICAxMDEsMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTAsMzIsMzIsMzIsMzIsOTgsMTAxLDEwNSwKKyAgICAxMTAsMTAzLDMyLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsMzIsNDAsMTAxLDQ2LDEwMywKKyAgICA0NiwzMiw5Niw5NiwxMDIsMTE0LDExMSwxMDksMzIsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMzIsCisgICAgMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsNjAsMTAyLDExNCwxMTEsMTA5LDEwOCwxMDUsMTE1LDExNiwKKyAgICA2Miw5Niw5Niw0MSw0NiwzMiwzMiw4NCwxMDQsMTAxLDMyLDM5LDEwOCwxMDEsMTE4LDEwMSwKKyAgICAxMDgsMzksMTAsMzIsMzIsMzIsMzIsOTcsMTE0LDEwMywxMTcsMTA5LDEwMSwxMTAsMTE2LDMyLAorICAgIDExNCwxMDEsMTEyLDExNCwxMDEsMTE1LDEwMSwxMTAsMTE2LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMTIsCisgICAgOTcsOTksMTA3LDk3LDEwMywxMDEsMzIsMTA4LDExMSw5OSw5NywxMTYsMTA1LDExMSwxMTAsMzIsCisgICAgMTE2LDExMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwzMiwxMDIsMTE0LDExMSwxMDksMzIsMTA1LAorICAgIDExMCwzMiw5NywzMiwxMTQsMTAxLDEwOCw5NywxMTYsMTA1LDExOCwxMDEsMTAsMzIsMzIsMzIsCisgICAgMzIsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsMzIsNDAsMTAxLDQ2LDEwMyw0NiwzMiw5Niw5NiwKKyAgICAxMDIsMTE0LDExMSwxMDksMzIsNDYsNDYsMTEyLDEwNywxMDMsMzIsMTA1LDEwOSwxMTIsMTExLDExNCwKKyAgICAxMTYsMzIsMTA5LDExMSwxMDAsOTYsOTYsMzIsMTE5LDExMSwxMTcsMTA4LDEwMCwzMiwxMDQsOTcsCisgICAgMTE4LDEwMSwzMiw5NywzMiwzOSwxMDgsMTAxLDExOCwxMDEsMTA4LDM5LDMyLDExMSwxMDIsMzIsCisgICAgNTAsNDEsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE0LDg0LDAsMCwwLDc4LDExNCwKKyAgICAxMTYsMCwwLDAsNDEsOCwxMTQsMTE2LDEsMCwwLDExNCwxMjQsMSwwLDAsCisgICAgMTE0LDEzNCwwLDAsMCwxMTQsMzEsMCwwLDAsMTE0LDcsMCwwLDAsMTE0LAorICAgIDczLDAsMCwwLDExNCw1NywwLDAsMCwxMTQsMTIyLDEsMCwwLDQxLDksCisgICAgMTE0LDY3LDAsMCwwLDExNCwxMjMsMSwwLDAsMjE4LDYsMTA4LDExMSw5OSw5NywKKyAgICAxMDgsMTE1LDExNCwxMjEsMSwwLDAsMTE0LDEwNCwxLDAsMCwxMTQsMTgwLDAsMCwKKyAgICAwLDkwLDgsMTAzLDEwOCwxMTEsOTgsOTcsMTA4LDExNSw5NSwxMTQsMTAzLDEsMCwwLAorICAgIDkwLDcsOTksMTE3LDExNiw5NSwxMTEsMTAyLDEwMiwxMTQsNCwwLDAsMCwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNSwwLDAsMCwyMTgsMTAsOTUsOTUsMTA1LDEwOSwxMTIsMTExLAorICAgIDExNCwxMTYsOTUsOTUsMTgsOSwwLDAsMTE1LDI2LDAsMCwwLDAsMTEsMTIsCisgICAgMSwxNSwyLDI0LDEsMTIsMSwxOCwxLDYsMywxMiwxLDIzLDEsNiwKKyAgICAxLDQsNCwzNSwzLDQwLDIsMTE0LDEyNywxLDAsMCw5OSwxLDAsMCwKKyAgICAwLDAsMCwwLDAsMywwLDAsMCwzLDAsMCwwLDY3LDAsMCwKKyAgICAwLDExNSw2OCwwLDAsMCwxMTYsMCwwLDEwNiwxLDAsMTI0LDAsMCwxMzEsCisgICAgMSwwLDEyNSwxLDAsMTI0LDEsMCwxMDAsMCwwLDEwNyw4LDAsMTE0LDQ2LAorICAgIDAsMTE2LDIsMCwxMDAsMSwwLDEyNCwwLDAsMjMsMTMxLDEsMCwxMzAsMSwKKyAgICAwLDExMCwwLDAsMTE2LDMsMCwxMjQsMSwwLDEzMSwxLDAsMTI1LDIsMCwKKyAgICAxMjQsMiwwLDEwNiw0LDAsMTMxLDAsMCw4Myw0MSwyLDc4LDEyMiwyNSwxMTAsCisgICAgMTExLDMyLDk4LDExNywxMDUsMTA4LDExNiw0NSwxMDUsMTEwLDMyLDEwOSwxMTEsMTAwLDExNywxMDgsCisgICAgMTAxLDMyLDExMCw5NywxMDksMTAxLDEwMCwzMiw0MSw1LDExNCwxMSwxLDAsMCwxMTQsCisgICAgMTQsMSwwLDAsMTE0LDE1NCwwLDAsMCwxMTQsMTc1LDAsMCwwLDExNCw3LAorICAgIDEsMCwwLDQxLDMsMTE0LDY3LDAsMCwwLDExNCwxNzgsMCwwLDAsMTE0LAorICAgIDE3OSwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwKKyAgICAwLDAsMCwyMTgsMTgsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTAyLDExNCwKKyAgICAxMTEsMTA5LDk1LDExMCw5NywxMDksMTAxLDUzLDksMCwwLDExNSwxMCwwLDAsMCwKKyAgICAwLDEsMTUsMSwxMiwxLDE5LDEsMTIsMSwxMTQsMTI4LDEsMCwwLDk5LAorICAgIDIsMCwwLDAsMCwwLDAsMCwxOSwwLDAsMCwxMiwwLDAsMCwKKyAgICA2NywwLDAsMCwxMTUsMjMyLDIsMCwwLDEyNCwxLDAsOTcsMCwwLDEyNCwKKyAgICAwLDAsOTcsMSwwLDExNiwxLDAsMTA2LDIsMCwxMDYsMywwLDExNCwzMywKKyAgICAwLDExNiw0LDAsOTcsNSwwLDExMCw2LDAsMTE2LDYsMCw5Nyw1LDAsCisgICAgMTE2LDcsMCwxMTYsMSwwLDEzMSwxLDAsMTI1LDIsMCwxMjAsMTM4LDAsMTE2LAorICAgIDEsMCwxMDYsOCwwLDEwNiw5LDAsMTMxLDAsMCw2OCw5MywxMjEsMCw5MiwKKyAgICAyLDAsMTI1LDMsMCwxMjUsNCwwLDExNiwxMCwwLDEyNCw0LDAsMTI0LDIsCisgICAgMCwxMzEsMiwwLDExNCw2NywwLDEyNCwzLDAsMTE2LDEsMCwxMDYsMTEsMCwKKyAgICAxMDcsNiwwLDExNCwxMTgsMCwxMTYsMTIsMCwxMjUsNSwwLDExMCwyNywwLDExNiwKKyAgICAwLDAsMTA2LDEzLDAsMTI0LDMsMCwxMzEsMSwwLDExNCw2NywwLDExNiwxNCwKKyAgICAwLDEyNSw1LDAsMTEwLDMsMCwxMTMsNjcsMCwxMTYsMTUsMCwxMjQsNCwwLAorICAgIDEyNCw1LDAsMTMxLDIsMCwxMjUsNiwwLDExNiwxNiwwLDEyNCw2LDAsMTMxLAorICAgIDEsMCwxMjUsNywwLDEyNCw3LDAsMTA2LDE3LDAsMTI0LDQsMCwxMzEsMSwKKyAgICAwLDEsMTEzLDY3LDAsMTEzLDY3LDAsODcsMTE2LDEsMCwxMDYsOCwwLDExNiwKKyAgICAxOCwwLDI1LDEyNSw4LDAsMTIwLDczLDAsMTAwLDI2LDAsNjgsOTMsNjUsMCwKKyAgICAxMjUsOSwwLDEyNCw5LDAsMTE2LDEsMCwxMDYsOCwwLDEwNyw3LDAsMTE0LAorICAgIDI0OCwwLDExNiwxOSwwLDEyNCw5LDAsMTMxLDEsMCwxMjUsMTAsMCwxMTAsMTMsCisgICAgMCwxMTYsMSwwLDEwNiw4LDAsMTI0LDksMCwyNSwxMjUsMTAsMCwxMTYsMjAsCisgICAgMCwxMjQsOCwwLDEyNCw5LDAsMTI0LDEwLDAsMTMxLDMsMCwxLDExMywyMTIsCisgICAgMCw4NywxMDAsNSwwLDEwMCw2LDAsMTAzLDEsMCwxMDIsMiwwLDEwMCw3LAorICAgIDAsMTAwLDgsMCwxMDAsNiwwLDEwMywyLDAsMTAyLDIsMCwxMDIsMiwwLAorICAgIDEyNSwxMSwwLDEyMCwxNDYsMCwxMjQsMTEsMCw2OCw5MywxMjYsMCw5MiwyLDAsCisgICAgMTI1LDEyLDAsMTI1LDEzLDAsMTE2LDIxLDAsMTAwLDksMCwxMDAsMTAsMCwxMzIsCisgICAgMCwwLDEyNCwxMywwLDY4LDEzMSwxLDAsMTMxLDEsMCwxMTUsMTA4LDEsMTE2LAorICAgIDIyLDAsMTMwLDEsMCwxMjQsMTMsMCwxMDAsMTEsMCwyNSwxMjUsMTQsMCwxMjQsCisgICAgMTIsMCwxMTYsMSwwLDEwNiw4LDAsMTA3LDYsMCwxMTQsMTUwLDEsMTE2LDEsCisgICAgMCwxMDYsOCwwLDEyNCwxMiwwLDI1LDEyNSwxNSwwLDgwLDExMyw2NSwxLDEyMSwKKyAgICAxNywwLDExNiwxOSwwLDEyNCwxMiwwLDEzMSwxLDAsMTI1LDE1LDAsODAsODcsCisgICAgMTEzLDY1LDEsNCwxMTYsMjMsMCwxMDcsMTAsMCwxMTQsMTkwLDEsMSwxLDEsCisgICAgMTE5LDY1LDEsODksMTEzLDY1LDEsODgsMTEzLDY1LDEsODcsMTE2LDIzLDAsMTAwLAorICAgIDEyLDAsMTMxLDEsMCwxMzAsMSwwLDExNiwyMCwwLDEyNCw4LDAsMTAwLDEzLAorICAgIDAsMTI0LDE1LDAsMTMxLDMsMCwxLDExNiwyMCwwLDEyNCw4LDAsMTAwLDE0LAorICAgIDAsMTI0LDE0LDAsMTMxLDMsMCwxLDExNiwyMCwwLDEyNCw4LDAsMTAwLDE1LAorICAgIDAsMTAwLDE2LDAsMTA2LDI0LDAsMTI0LDEzLDAsMTMxLDEsMCwxMzEsMywwLAorICAgIDEsMTIxLDE2LDAsMTE2LDE5LDAsMTAwLDE3LDAsMTMxLDEsMCwxMjUsMTYsMCwKKyAgICA4NywxMTAsMjQsMCw0LDExNiwyMywwLDEwNywxMCwwLDExNCw1MCwyLDEsMSwKKyAgICAxLDEwMCwxOCwwLDEyNSwxNiwwLDg5LDExMCwxLDAsODgsMTE2LDIwLDAsMTI0LAorICAgIDgsMCwxMDAsMTcsMCwxMjQsMTYsMCwxMzEsMywwLDEsMTE2LDE5LDAsMTAwLAorICAgIDE5LDAsMTMxLDEsMCwxMjUsMTcsMCwxMTYsMjAsMCwxMjQsOCwwLDEwMCwxOSwKKyAgICAwLDEyNCwxNywwLDEzMSwzLDAsMSwxMjQsMTIsMCwxMDAsNywwLDEwNywyLAorICAgIDAsMTE0LDEzOCwyLDExNiwxOSwwLDEwMCwyMCwwLDEzMSwxLDAsMTI1LDE4LDAsCisgICAgMTE2LDIwLDAsMTI0LDgsMCwxMDAsMjEsMCwxMjQsMTgsMCwxMzEsMywwLDEsCisgICAgMTEwLDAsMCwxMTYsMjAsMCwxMjQsOCwwLDEwMCwyMiwwLDExNiwyNSwwLDEzMSwKKyAgICAwLDAsMTMxLDMsMCwxLDExNiwyNiwwLDEwNiwyNywwLDExNiwwLDAsMTA2LAorICAgIDI4LDAsMTMxLDAsMCwxMzEsMSwwLDEsMTI0LDEyLDAsMTAwLDcsMCwxMDcsCisgICAgMiwwLDExNCwyMjgsMiwxMTYsMjksMCwxMDYsMzAsMCwxMDAsMjMsMCwxMzEsMSwKKyAgICAwLDEsMTAwLDI0LDAsMTE2LDI2LDAsMTA3LDYsMCwxMTQsMjI4LDIsMTAwLDI1LAorICAgIDAsMTE2LDMxLDAsOTUsMzIsMCwxMTMsMjI4LDIsMTEwLDAsMCwxMDAsMTgsMCwKKyAgICA4Myw0MSwyNywxMjIsMjUwLDgzLDEwMSwxMTYsMTE3LDExMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAogICAgIDExNiwxMDgsMTA1LDk4LDMyLDk4LDEyMSwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDUsMTEwLAogICAgIDEwMywzMiwxMTAsMTAxLDEwMSwxMDAsMTAxLDEwMCwzMiw5OCwxMTcsMTA1LDEwOCwxMTYsNDUsMTA1LAogICAgIDExMCwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsOTcsMTEwLDEwMCwzMiwxMDUsMTEwLApAQCAtNDE5MSwxMDMgKzQyNTIsNjAgQEAKICAgICAzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsNDQsMzIsMTE2LDEwNCwxMTEsMTE1LDEwMSwzMiwKICAgICAxMTYsMTE5LDExMSwzMiwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMzIsMTA5LDExNywxMTUsMTE2LAogICAgIDMyLDk4LDEwMSwzMiwxMDEsMTIwLDExMiwxMDgsMTA1LDk5LDEwNSwxMTYsMTA4LDEyMSwzMiwxMTIsCi0gICAgOTcsMTE1LDExNSwxMDEsMTAwLDMyLDEwNSwxMTAsNDYsMTAsMTAsMzIsMzIsMzIsMzIsMTE3LAotICAgIDEwLDAsMCwwLDk1LDk1LDEwOCwxMTEsOTcsMTAwLDEwMSwxMTQsOTUsOTUsMTE3LDMsCi0gICAgMCwwLDAsOTUsMTA1LDExMSwxMTcsOSwwLDAsMCw5NSwxMTksOTcsMTE0LDExMCwKLSAgICAxMDUsMTEwLDEwMywxMTUsMTE3LDgsMCwwLDAsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsCi0gICAgMTE1LDExNyw3LDAsMCwwLDEwOSw5NywxMTQsMTE1LDEwNCw5NywxMDgsMTE3LDUsMCwKLSAgICAwLDAsMTEyLDExMSwxMTUsMTA1LDEyMCwxMTcsMSwwLDAsMCw0NywxMTcsMiwwLAotICAgIDAsMCwxMTAsMTE2LDExNywxLDAsMCwwLDkyLDExNywzLDAsMCwwLDExMSwKLSAgICAxMTUsNTAsOTksMSwwLDAsMCwwLDAsMCwwLDIsMCwwLDAsMywKLSAgICAwLDAsMCwxMTUsMCwwLDAsMTE1LDMzLDAsMCwwLDEyNCwwLDAsOTMsCi0gICAgMjMsMCwxMjUsMSwwLDExNiwwLDAsMTI0LDEsMCwxMzEsMSwwLDEwMCwwLAotICAgIDAsMTA3LDIsMCw4NiwxLDExMywzLDAsMTAwLDEsMCw4Myw0MCwyLDAsCi0gICAgMCwwLDEwNSwxLDAsMCwwLDc4LDQwLDEsMCwwLDAsMTE3LDMsMCwKLSAgICAwLDAsMTA4LDEwMSwxMTAsNDAsMiwwLDAsMCwxMTcsMiwwLDAsMCw0NiwKLSAgICA0OCwxMTcsMywwLDAsMCwxMTUsMTAxLDExMiw0MCwwLDAsMCwwLDQwLDAsCi0gICAgMCwwLDAsMTE3LDI5LDAsMCwwLDYwLDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDMyLAotICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsNDYsOTUsOTgsMTExLDExMSwxMTYsMTE1LAotICAgIDExNiwxMTQsOTcsMTEyLDYyLDExNyw5LDAsMCwwLDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsCi0gICAgMTEyLDExNCw2MiwxOTEsNiwwLDAsMTE1LDIsMCwwLDAsNiwwLDExNywyNSwKLSAgICAwLDAsMCw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDQ2LDYwLDEwOCwxMTEsOTksOTcsMTA4LAotICAgIDExNSw2Miw0Niw2MCwxMDMsMTAxLDExMCwxMDEsMTIwLDExMiwxMTQsNjIsMTA1LDAsMCwwLAotICAgIDAsMTE3LDcsMCwwLDAsNjksNzcsODgsMzIsNzEsNjcsNjcsMTA1LDEsMCwKLSAgICAwLDAsMTE3LDMwLDAsMCwwLDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsCi0gICAgMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsMTAxLDExNSwzMiwxMTIsMTExLDExNSwxMDUsMTIwLDMyLAotICAgIDExMSwxMTQsMzIsMTEwLDExNiwxMTcsNywwLDAsMCw5NSwxMTYsMTA0LDExNCwxMDEsOTcsCi0gICAgMTAwLDExNyw4LDAsMCwwLDk1LDExOSwxMDEsOTcsMTA3LDExNCwxMDEsMTAyLDExNyw2LAotICAgIDAsMCwwLDExOSwxMDUsMTEwLDExNCwxMDEsMTAzLDExNyw3LDAsMCwwLDk1LDExOSwKLSAgICAxMDUsMTEwLDExNCwxMDEsMTAzLDExNywzLDAsMCwwLDk1LDExMSwxMTUsMTE3LDgsMCwKLSAgICAwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsMTE3LDE1LDAsMCwwLDExMiwKLSAgICA5NywxMTYsMTA0LDk1LDExNSwxMDEsMTEyLDk3LDExNCw5NywxMTYsMTExLDExNCwxMTUsMTE3LDExLAotICAgIDAsMCwwLDk1LDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNyw0LAotICAgIDAsMCwwLDQ2LDExMiwxMjEsMTE5LDExNyw2LDAsMCwwLDk1LDEwMCw0NiwxMTIsCi0gICAgMTIxLDEwMCw3OCw0MCw0LDAsMCwwLDExNywzLDAsMCwwLDk1LDEwNSwxMTEsCi0gICAgMTE3LDksMCwwLDAsOTUsMTE5LDk3LDExNCwxMTAsMTA1LDExMCwxMDMsMTE1LDExNyw4LAotICAgIDAsMCwwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDExNSwxMTcsNywwLDAsMCwKLSAgICAxMDksOTcsMTE0LDExNSwxMDQsOTcsMTA4LDg0LDQwLDM1LDAsMCwwLDExNyw0LDAsCi0gICAgMCwwLDk1LDEwNSwxMDksMTEyLDExNywzLDAsMCwwLDExNSwxMjEsMTE1LDExNyw1LAotICAgIDAsMCwwLDEwMiwxMDgsOTcsMTAzLDExNSwxMTcsOCwwLDAsMCwxMTEsMTEyLDExNiwKLSAgICAxMDUsMTA5LDEwNSwxMjIsMTAxLDExNywyNywwLDAsMCw3OSw4MCw4NCw3Myw3Nyw3MywKLSAgICA5MCw2OSw2OCw5NSw2Niw4OSw4NCw2OSw2Nyw3OSw2OCw2OSw5NSw4Myw4NSw3MCwKLSAgICA3MCw3Myw4OCw2OSw4MywxMTcsMTcsMCwwLDAsNjYsODksODQsNjksNjcsNzksCi0gICAgNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsMTE3LDIzLDAsMCwwLAotICAgIDY4LDY5LDY2LDg1LDcxLDk1LDY2LDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLAotICAgIDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNyw0LDAsMCwwLDExNiwxMjEsMTEyLDEwMSwKLSAgICAxMTcsNywwLDAsMCwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTUsMTE3LDUsMCwwLAotICAgIDAsMTA1LDExNiwxMDEsMTA5LDExNSwxMTcsMTAsMCwwLDAsMTA1LDExNSwxMDUsMTEwLDExNSwKLSAgICAxMTYsOTcsMTEwLDk5LDEwMSwxMTcsNywwLDAsMCwxMDQsOTcsMTE1LDk3LDExNiwxMTYsCi0gICAgMTE0LDExNywyMCwwLDAsMCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLAotICAgIDEwMCwxMTcsMTA4LDEwMSw5NSwxMTAsOTcsMTA5LDEwMSwxMTUsMTE3LDE1LDAsMCwwLDY2LAotICAgIDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTAsCi0gICAgMCwwLDAsOTUsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCw5NSw5NSwxMTcsOSwwLAotICAgIDAsMCwxMDUsMTE1LDk1LDEwMiwxMTQsMTExLDEyMiwxMDEsMTEwLDExNywxNCwwLDAsMCwKLSAgICA3MCwxMTQsMTExLDEyMiwxMDEsMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsOCwKLSAgICAwLDAsMCw5NSw5NSwxMTAsOTcsMTA5LDEwMSw5NSw5NSwxMTcsMTEsMCwwLDAsCi0gICAgMTA4LDExMSw5NywxMDAsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDcsMCwwLDAsCi0gICAgMTE1LDEwMSwxMTYsOTcsMTE2LDExNiwxMTQsMTE3LDMsMCwwLDAsOTcsMTA4LDEwOCwxMTcsCi0gICAgMTQsMCwwLDAsNjUsMTE1LDExNSwxMDEsMTE0LDExNiwxMDUsMTExLDExMCw2OSwxMTQsMTE0LAotICAgIDExMSwxMTQsMTE3LDcsMCwwLDAsMTE4LDEwMSwxMTQsMTE1LDEwNSwxMTEsMTEwLDExNywxMSwKLSAgICAwLDAsMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDY5LDExNCwxMTQsMTExLDExNCwxMTcsNCwKLSAgICAwLDAsMCw3OCwxMTEsMTEwLDEwMSwxMTcsMywwLDAsMCwxMTUsMTAxLDExNiwxMTcsCi0gICAgMTYsMCwwLDAsOTUsMTA5LDk3LDEwNywxMDEsOTUsMTE0LDEwMSwxMDgsOTcsMTIwLDk1LAotICAgIDk5LDk3LDExNSwxMDEsMTE3LDE4LDAsMCwwLDY5LDg4LDg0LDY5LDc4LDgzLDczLAotICAgIDc5LDc4LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNyw2LDAsMCwwLAotICAgIDEwMSwxMjAsMTE2LDEwMSwxMTAsMTAwLDExNywxOCwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLAotICAgIDExNSwxMDUsMTExLDExMCw5NSwxMTUsMTE3LDEwMiwxMDIsMTA1LDEyMCwxMDEsMTE1LDExNywxNSwwLAotICAgIDAsMCw4Myw3OSw4NSw4Miw2Nyw2OSw5NSw4Myw4NSw3MCw3MCw3Myw4OCw2OSwKLSAgICA4MywxMTcsNiwwLDAsMCw5NywxMTIsMTEyLDEwMSwxMTAsMTAwLDExNyw0LDAsMCwKLSAgICAwLDg0LDExNCwxMTcsMTAxLDExNywyMSwwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LAotICAgIDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsCi0gICAgMTEsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsNjYsODUsNzMsNzYsNjgsNDAsCi0gICAgMTYsMCwwLDAsMTE3LDEwLDAsMCwwLDExNSwxMjEsMTE1LDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNywxMSwwLDAsMCw5NSwxMDUsMTA5LDExMiw5NSwxMDksMTExLDEwMCwKLSAgICAxMTcsMTA4LDEwMSwxMTcsMTEsMCwwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTE2LAotICAgIDEyMSwxMTIsMTAxLDExNyw0LDAsMCwwLDExMCw5NywxMDksMTAxLDExNyw2LDAsMCwKLSAgICAwLDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwxMTUsMTAxLDEwOCwxMDIsCi0gICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEyLDAsMCwwLDk4LDExNywxMDUsMTA4LAotICAgIDExNiwxMDUsMTEwLDk1LDExMCw5NywxMDksMTAxLDExNywxNCwwLDAsMCw5OCwxMTcsMTA1LAotICAgIDEwOCwxMTYsMTA1LDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTAsMCwwLDAsCi0gICAgMTExLDExNSw5NSwxMDAsMTAxLDExNiw5NywxMDUsMTA4LDExNSwxMTcsMTAsMCwwLDAsOTgsCi0gICAgMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsOTUsMTExLDExNSwxMTcsMTUsMCwwLDAsMTEyLDk3LAotICAgIDExNiwxMDQsOTUsMTE1LDEwMSwxMTIsOTcsMTE0LDk3LDExNiwxMTEsMTE0LDExNSwxMTcsOCwwLAotICAgIDAsMCwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTAxLDExMiwxMTcsOSwwLDAsMCwxMTEsCi0gICAgMTE1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMywwLDAsMCwxMTYsMTA0LDExNCwKLSAgICAxMDEsOTcsMTAwLDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxNCwwLDAsMCwxMTksCi0gICAgMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTMsMCwKLSAgICAwLDAsMTE5LDEwNSwxMTAsMTE0LDEwMSwxMDMsOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNDAsCi0gICAgMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCw2MCwxMDIsCi0gICAgMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDQ2LAotICAgIDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsNiwwLDAsMCwKLSAgICA5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDE1NCw2LDAsMCwxMTUsMTA2LDAsMCwwLDAsCi0gICAgOSw2LDEsNiwyLDEyLDEsOSwyLDYsMiwxMiwxLDI4LDEsMTUsCi0gICAgMSwxNSwxLDE1LDEsMTIsMSwxNSwxLDIyLDIsMTMsMSwxMywxLDE1LAotICAgIDEsMTgsMiwxMywxLDIwLDIsNDgsMSwxOSwyLDMxLDEsMTAsMSwxNSwKLSAgICAxLDEzLDEsNCwyLDMsMSwxNSwyLDI3LDEsMTMsMSw1LDEsMTMsCi0gICAgMSwxMiwyLDEyLDIsMywxLDE5LDEsMTMsMiwxMSwxLDE1LDIsMTIsCi0gICAgMSwxNSwxLDE5LDIsMTYsMSwxNiwxLDE2LDEsMTYsMSwyMiwyLDE5LAotICAgIDEsMTksMSwxMiwxLDEzLDEsMTIsMSwxMTcsNiwwLDAsMCw5NSwxMTUsCi0gICAgMTAxLDExNiwxMTcsMTEyLDk5LDIsMCwwLDAsMCwwLDAsMCwzLDAsMCwKKyAgICA5NywxMTUsMTE1LDEwMSwxMDAsMzIsMTA1LDExMCw0NiwxMCwxMCwzMiwzMiwzMiwzMiwxMTQsCisgICAgNDksMCwwLDAsMTE0LDE2NywwLDAsMCwyMTgsOCw5OCwxMTcsMTA1LDEwOCwxMTYsCisgICAgMTA1LDExMCwxMTUsMTE0LDE5MiwwLDAsMCw5MCw1LDExMiwxMTEsMTE1LDEwNSwxMjAsMjUwLAorICAgIDEsNDcsMjE4LDIsMTEwLDExNiwyNTAsMSw5Miw5OSwxLDAsMCwwLDAsMCwKKyAgICAwLDAsMiwwLDAsMCwzLDAsMCwwLDExNSwwLDAsMCwxMTUsMzMsCisgICAgMCwwLDAsMTI0LDAsMCw5MywyMywwLDEyNSwxLDAsMTE2LDAsMCwxMjQsCisgICAgMSwwLDEzMSwxLDAsMTAwLDAsMCwxMDcsMiwwLDg2LDEsMTEzLDMsMCwKKyAgICAxMDAsMSwwLDgzLDQxLDIsMTE0LDI5LDAsMCwwLDc4LDQxLDEsMTE0LDMxLAorICAgIDAsMCwwLDQxLDIsMTE0LDIyLDAsMCwwLDExNCwxMjksMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMTE0LDc3LAorICAgIDAsMCwwLDEwNSw5LDAsMCwxMTUsMiwwLDAsMCw2LDAsMTIyLDI1LAorICAgIDk1LDExNSwxMDEsMTE2LDExNywxMTIsNDYsNjAsMTA4LDExMSw5OSw5NywxMDgsMTE1LDYyLDQ2LAorICAgIDYwLDEwMywxMDEsMTEwLDEwMSwxMjAsMTEyLDExNCw2MiwxMTQsODQsMCwwLDAsMTIyLDMwLAorICAgIDEwNSwxMDksMTEyLDExMSwxMTQsMTE2LDEwOCwxMDUsOTgsMzIsMTE0LDEwMSwxMTMsMTE3LDEwNSwxMTQsCisgICAgMTAxLDExNSwzMiwxMTIsMTExLDExNSwxMDUsMTIwLDMyLDExMSwxMTQsMzIsMTEwLDExNiwxMTQsMywKKyAgICAwLDAsMCwxMTQsMjUsMCwwLDAsMTE0LDIxLDAsMCwwLDExNCwzMCwwLAorICAgIDAsMCwxMTQsODUsMCwwLDAsNzgsMTE0LDExMSwwLDAsMCw5MCw2LDExOSwKKyAgICAxMDUsMTEwLDExNCwxMDEsMTAzLDExNCwyNCwxLDAsMCwxMTQsNiwwLDAsMCwxMjIsCisgICAgNCw0NiwxMTIsMTIxLDExOSwxMjIsNiw5NSwxMDAsNDYsMTEyLDEyMSwxMDAsODQsNDEsNCwKKyAgICAxMjIsMyw5NSwxMDUsMTExLDEyMiw5LDk1LDExOSw5NywxMTQsMTEwLDEwNSwxMTAsMTAzLDExNSwKKyAgICAxMjIsOCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LDExMCwxMTUsMTIyLDcsMTA5LDk3LDExNCwxMTUsCisgICAgMTA0LDk3LDEwOCw0MSwzMywxMTQsMTA2LDAsMCwwLDExNCw3LDAsMCwwLDExNCwKKyAgICAxMTcsMCwwLDAsMTE0LDExOCwwLDAsMCwxMTQsMTIwLDAsMCwwLDExNCwyMzMsCisgICAgMCwwLDAsMTE0LDExOSwwLDAsMCwxMTQsNjYsMCwwLDAsMTE0LDczLDAsCisgICAgMCwwLDIxOCw1LDEwNSwxMTYsMTAxLDEwOSwxMTUsMTE0LDE5MywwLDAsMCwxMTQsMTU4LAorICAgIDAsMCwwLDExNCwxMSwxLDAsMCwxMTQsMTYzLDAsMCwwLDExNCwyMCwxLAorICAgIDAsMCwxMTQsMjQ4LDAsMCwwLDExNCwxNzUsMCwwLDAsMTE0LDI1NSwwLDAsCisgICAgMCwxMTQsNTcsMCwwLDAsMTE0LDEyOCwxLDAsMCwxMTQsNjEsMCwwLDAsCisgICAgMjE4LDMsOTcsMTA4LDEwOCwxMTQsMTAwLDAsMCwwLDExNCwxNTQsMCwwLDAsMTE0LAorICAgIDI2LDAsMCwwLDExNCwxMSwwLDAsMCwxMTQsNjAsMSwwLDAsMTE0LDE5OCwKKyAgICAwLDAsMCwxMTQsMTI1LDEsMCwwLDExNCwxMzUsMCwwLDAsMTE0LDIyNCwwLAorICAgIDAsMCwxMTQsMjMsMSwwLDAsMTE0LDI3LDEsMCwwLDQxLDE5LDIxOCwxMCwKKyAgICAxMTUsMTIxLDExNSw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwyMTgsMTEsOTUsMTA1LDEwOSwxMTIsCisgICAgOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTEsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsCisgICAgMTE2LDEyMSwxMTIsMTAxLDExNCw2NywwLDAsMCwxMTQsMTgwLDAsMCwwLDExNCwxNzAsCisgICAgMCwwLDAsMTE0LDE3OCwwLDAsMCwxMTQsMTc5LDAsMCwwLDkwLDExLDExNSwKKyAgICAxMDEsMTA4LDEwMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMiw5OCwxMTcsMTA1LDEwOCwKKyAgICAxMTYsMTA1LDExMCw5NSwxMTAsOTcsMTA5LDEwMSw5MCwxNCw5OCwxMTcsMTA1LDEwOCwxMTYsMTA1LAorICAgIDExMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5MCwxMCwxMTEsMTE1LDk1LDEwMCwxMDEsMTE2LAorICAgIDk3LDEwNSwxMDgsMTE1LDkwLDEwLDk4LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLDk1LDExMSwxMTUsCisgICAgMTE0LDIxLDAsMCwwLDExNCwyNSwwLDAsMCw5MCw5LDExMSwxMTUsOTUsMTA5LAorICAgIDExMSwxMDAsMTE3LDEwOCwxMDEsOTAsMTMsMTE2LDEwNCwxMTQsMTAxLDk3LDEwMCw5NSwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5MCwxNCwxMTksMTAxLDk3LDEwNywxMTQsMTAxLDEwMiw5NSwxMDksMTExLAorICAgIDEwMCwxMTcsMTA4LDEwMSw5MCwxMywxMTksMTA1LDExMCwxMTQsMTAxLDEwMyw5NSwxMDksMTExLDEwMCwKKyAgICAxMTcsMTA4LDEwMSwxMTQsNCwwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLAorICAgIDAsMCwyMTgsNiw5NSwxMTUsMTAxLDExNiwxMTcsMTEyLDYxLDksMCwwLDExNSwxMDgsCisgICAgMCwwLDAsMCw5LDYsMSw2LDIsMTIsMSw5LDIsNiwzLDEyLAorICAgIDEsMjgsMSwxNSwxLDE1LDEsOSwxLDE1LDEsOSwyLDMsMSwxNSwKKyAgICAxLDEyLDEsMjAsMywxMywxLDEzLDEsMTUsMSwxNSwyLDEzLDEsMjAsCisgICAgMywzMywxLDE5LDIsMzEsMSwxMCwxLDE1LDEsMTMsMSw0LDIsMywKKyAgICAxLDEyLDEsNSwxLDEzLDEsMTIsMiwxMiwxLDE2LDEsMTYsMSwyNSwKKyAgICAzLDMsMSwxNiwxLDEzLDIsMTEsMSwxNiwzLDEyLDEsMTYsMywxMiwKKyAgICAxLDEyLDEsMTksMywxOSwxLDE5LDEsMTIsMSwxMywxLDEyLDEsMTE0LAorICAgIDEzNywxLDAsMCw5OSwyLDAsMCwwLDAsMCwwLDAsMywwLDAsCiAgICAgMCwzLDAsMCwwLDY3LDAsMCwwLDExNSwxMzYsMCwwLDAsMTE2LDAsCiAgICAgMCwxMjQsMCwwLDEyNCwxLDAsMTMxLDIsMCwxLDExNiwxLDAsMTMxLDAsCiAgICAgMCwxMjUsMiwwLDExNiwyLDAsMTA2LDMsMCwxMDYsNCwwLDExNiw1LDAsCkBAIC00Mjk3LDEzNCArNDMxNSw2MyBAQAogICAgIDExNiwxMSwwLDEwNiwxMiwwLDEwMCwxLDAsMTA3LDIsMCwxMTQsMTE2LDAsMTE2LAogICAgIDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDEzLDAsMTMxLDEsMCwxLDExMCwKICAgICAwLDAsMTE2LDIsMCwxMDYsNywwLDEwNiw4LDAsMTE2LDE0LDAsMTMxLDEsCi0gICAgMCwxLDEwMCwyLDAsODMsNDAsMywwLDAsMCwxMTcsNTAsMCwwLDAsCi0gICAgNzMsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDMyLDk3LDExNSwzMiwxMTYsMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsCi0gICAgMTEwLDExNiw5NywxMTYsMTA1LDExMSwxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LAotICAgIDExNiw0NiwxMTcsMiwwLDAsMCwxMTAsMTE2LDc4LDQwLDE1LDAsMCwwLDExNywKLSAgICA2LDAsMCwwLDk1LDExNSwxMDEsMTE2LDExNywxMTIsMTE3LDI3LDAsMCwwLDk1LAotICAgIDEwMywxMDEsMTE2LDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LDEwMiwxMDUsCi0gICAgMTA4LDEwMSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMywwLDAsMCwxMTUsCi0gICAgMTIxLDExNSwxMTcsMTAsMCwwLDAsMTEyLDk3LDExNiwxMDQsOTUsMTA0LDExMSwxMTEsMTA3LAotICAgIDExNSwxMTcsNiwwLDAsMCwxMDEsMTIwLDExNiwxMDEsMTEwLDEwMCwxMTcsMTAsMCwwLAotICAgIDAsNzAsMTA1LDEwOCwxMDEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsOSwwLDAsMCwKLSAgICAxMTIsOTcsMTE2LDEwNCw5NSwxMDQsMTExLDExMSwxMDcsMTE3LDksMCwwLDAsMTA5LDEwMSwKLSAgICAxMTYsOTcsOTUsMTEyLDk3LDExNiwxMDQsMTE3LDYsMCwwLDAsOTcsMTEyLDExMiwxMDEsCi0gICAgMTEwLDEwMCwxMTcsMTUsMCwwLDAsNjYsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsNzMsMTA5LAotICAgIDExMiwxMTEsMTE0LDExNiwxMDEsMTE0LDExNywxNCwwLDAsMCw3MCwxMTQsMTExLDEyMiwxMDEsCi0gICAgMTEwLDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMywwLDAsMCw5NSwxMTEsCi0gICAgMTE1LDExNyw4LDAsMCwwLDk1LDk1LDExMCw5NywxMDksMTAxLDk1LDk1LDExNywyMSwKLSAgICAwLDAsMCw4NywxMDUsMTEwLDEwMCwxMTEsMTE5LDExNSw4MiwxMDEsMTAzLDEwNSwxMTUsMTE2LAotICAgIDExNCwxMjEsNzAsMTA1LDExMCwxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsODAsOTcsMTE2LAotICAgIDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDQwLDMsMCwwLDAsMTE3LDEwLDAsMCwKLSAgICAwLDExNSwxMjEsMTE1LDk1LDEwOSwxMTEsMTAwLDExNywxMDgsMTAxLDExNywxMSwwLDAsMCwKLSAgICA5NSwxMDUsMTA5LDExMiw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSwxMTcsMTcsMCwwLDAsCi0gICAgMTE1LDExNywxMTIsMTEyLDExMSwxMTQsMTE2LDEwMSwxMDAsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwKLSAgICAxMTUsNDAsMCwwLDAsMCw0MCwwLDAsMCwwLDExNywyOSwwLDAsMCwKLSAgICA2MCwxMDIsMTE0LDExMSwxMjIsMTAxLDExMCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LAotICAgIDk4LDQ2LDk1LDk4LDExMSwxMTEsMTE2LDExNSwxMTYsMTE0LDk3LDExMiw2MiwxMTcsOCwwLAotICAgIDAsMCw5NSwxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwyMzMsNiwwLDAsMTE1LDE2LAotICAgIDAsMCwwLDAsMiwxMywxLDksMSwyOCwxLDE2LDEsMTYsMSwxNSwKLSAgICAxLDE5LDEsMTE3LDgsMCwwLDAsOTUsMTA1LDExMCwxMTUsMTE2LDk3LDEwOCwxMDgsCi0gICAgNzgsNDAsMywwLDAsMCwxMTcsMywwLDAsMCwxMTksMTA1LDExMCwxMTcsNiwKLSAgICAwLDAsMCw5OSwxMjEsMTAzLDExOSwxMDUsMTEwLDExNyw2LDAsMCwwLDEwMCw5NywKLSAgICAxMTQsMTE5LDEwNSwxMTAsNDAsNzQsMCwwLDAsMTE3LDcsMCwwLDAsOTUsOTUsCi0gICAgMTAwLDExMSw5OSw5NSw5NSwxMTcsMjcsMCwwLDAsOTUsNjcsNjUsODMsNjksOTUsCi0gICAgNzMsNzgsODMsNjksNzgsODMsNzMsODQsNzMsODYsNjksOTUsODAsNzYsNjUsODQsCi0gICAgNzAsNzksODIsNzcsODMsMTE3LDE2LDAsMCwwLDk1LDEwOSw5NywxMDcsMTAxLDk1LAotICAgIDExNCwxMDEsMTA4LDk3LDEyMCw5NSw5OSw5NywxMTUsMTAxLDExNyw3LDAsMCwwLDk1LAotICAgIDExOSw5NSwxMDgsMTExLDExMCwxMDMsMTE3LDcsMCwwLDAsOTUsMTE0LDk1LDEwOCwxMTEsCi0gICAgMTEwLDEwMywxMTcsMTAsMCwwLDAsOTUsMTEyLDk3LDExNiwxMDQsOTUsMTA2LDExMSwxMDUsCi0gICAgMTEwLDExNywxMSwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMTUsMTEyLDEwOCwxMDUsCi0gICAgMTE2LDExNywxOCwwLDAsMCw5NSwxMTIsOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDk1LDEwOSwKLSAgICAxMTEsMTAwLDEwMSw5NSwxMTYsMTIxLDExMiwxMDEsMTE3LDEyLDAsMCwwLDk1LDExMiw5NywKLSAgICAxMTYsMTA0LDk1LDEwNSwxMTUsMTAyLDEwNSwxMDgsMTAxLDExNywxMSwwLDAsMCw5NSwxMTIsCi0gICAgOTcsMTE2LDEwNCw5NSwxMDUsMTE1LDEwMCwxMDUsMTE0LDExNywxMywwLDAsMCw5NSwxMTksCi0gICAgMTE0LDEwNSwxMTYsMTAxLDk1LDk3LDExNiwxMTEsMTA5LDEwNSw5OSwxMTcsNSwwLDAsMCwKLSAgICA5NSwxMTksMTE0LDk3LDExMiwxMTcsNCwwLDAsMCwxMTYsMTIxLDExMiwxMDEsMTE3LDgsCi0gICAgMCwwLDAsOTUsOTUsOTksMTExLDEwMCwxMDEsOTUsOTUsMTE3LDEwLDAsMCwwLAotICAgIDk1LDk5LDExMSwxMDAsMTAxLDk1LDExNiwxMjEsMTEyLDEwMSwxMTcsMTAsMCwwLDAsMTEwLAotICAgIDEwMSwxMTksOTUsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsMTE3LDEzLDAsMCwwLDk1LDEwOSwKLSAgICAxMTEsMTAwLDExNywxMDgsMTAxLDk1LDEwOCwxMTEsOTksMTA3LDExNSwxMTcsMTIsMCwwLDAsCi0gICAgOTUsOTgsMTA4LDExMSw5OSwxMDcsMTA1LDExMCwxMDMsOTUsMTExLDExMCwxMTcsMTIsMCwwLAotICAgIDAsODIsMTE3LDExMCwxMTYsMTA1LDEwOSwxMDEsNjksMTE0LDExNCwxMTEsMTE0LDExNywxNCwwLAotICAgIDAsMCw5NSw2OCwxMDEsOTcsMTAwLDEwOCwxMTEsOTksMTA3LDY5LDExNCwxMTQsMTExLDExNCwKLSAgICAxMTcsMTEsMCwwLDAsOTUsNzcsMTExLDEwMCwxMTcsMTA4LDEwMSw3NiwxMTEsOTksMTA3LAotICAgIDExNywxNiwwLDAsMCw5NSw2OCwxMTcsMTA5LDEwOSwxMjEsNzcsMTExLDEwMCwxMTcsMTA4LAotICAgIDEwMSw3NiwxMTEsOTksMTA3LDExNywxNiwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMDksCi0gICAgMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwxMDgsMTExLDk5LDEwNywxMTcsMTksMCwwLDAsOTUsCi0gICAgMTA4LDExMSw5OSwxMDcsOTUsMTE3LDExMCwxMDgsMTExLDk5LDEwNyw5NSwxMDksMTExLDEwMCwxMTcsCi0gICAgMTA4LDEwMSwxMTcsMjUsMCwwLDAsOTUsOTksOTcsMTA4LDEwOCw5NSwxMTksMTA1LDExNiwKLSAgICAxMDQsOTUsMTAyLDExNCw5NywxMDksMTAxLDExNSw5NSwxMTQsMTAxLDEwOSwxMTEsMTE4LDEwMSwxMDAsCi0gICAgMTE3LDMsMCwwLDAsMTExLDExNCwxMDAsMTE3LDE3LDAsMCwwLDk1LDgyLDY1LAotICAgIDg3LDk1LDc3LDY1LDcxLDczLDY3LDk1LDc4LDg1LDc3LDY2LDY5LDgyLDExNyw1LAotICAgIDAsMCwwLDk4LDEyMSwxMTYsMTAxLDExNSwxMTcsNSwwLDAsMCwxMTQsOTcsMTEwLAotICAgIDEwMywxMDEsMTE3LDEyLDAsMCwwLDk1LDc3LDY1LDcxLDczLDY3LDk1LDY2LDg5LAotICAgIDg0LDY5LDgzLDExNyw4LDAsMCwwLDk1LDgwLDg5LDY3LDY1LDY3LDcyLDY5LAotICAgIDExNywxNSwwLDAsMCw4Myw3OSw4NSw4Miw2Nyw2OSw5NSw4Myw4NSw3MCw3MCwKLSAgICA3Myw4OCw2OSw4MywxMTcsMjMsMCwwLDAsNjgsNjksNjYsODUsNzEsOTUsNjYsCi0gICAgODksODQsNjksNjcsNzksNjgsNjksOTUsODMsODUsNzAsNzAsNzMsODgsNjksODMsCi0gICAgMTE3LDI3LDAsMCwwLDc5LDgwLDg0LDczLDc3LDczLDkwLDY5LDY4LDk1LDY2LAotICAgIDg5LDg0LDY5LDY3LDc5LDY4LDY5LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLAotICAgIDExNyw0LDAsMCwwLDc4LDExMSwxMTAsMTAxLDExNywxNywwLDAsMCw5OSw5NywKLSAgICA5OSwxMDQsMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwxMTUsMTExLDExNywxMTQsOTksMTAxLDExNywKLSAgICAxNywwLDAsMCwxMTUsMTExLDExNywxMTQsOTksMTAxLDk1LDEwMiwxMTQsMTExLDEwOSw5NSwKLSAgICA5OSw5Nyw5OSwxMDQsMTAxLDExNywxNSwwLDAsMCw5NSwxMDMsMTAxLDExNiw5NSwxMTUsCi0gICAgMTExLDExNywxMTQsOTksMTAxLDEwMiwxMDUsMTA4LDEwMSwxMTcsMTYsMCwwLDAsOTUsMTE4LAotICAgIDEwMSwxMTQsOTgsMTExLDExNSwxMDEsOTUsMTA5LDEwMSwxMTUsMTE1LDk3LDEwMywxMDEsMTE3LDExLAotICAgIDAsMCwwLDExNSwxMDEsMTE2LDk1LDExMiw5Nyw5OSwxMDcsOTcsMTAzLDEwMSwxMTcsMTAsCi0gICAgMCwwLDAsMTE1LDEwMSwxMTYsOTUsMTA4LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTcsMCwKLSAgICAwLDAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsOTUsMTAyLDExMSwxMTQsOTUsMTA4LDExMSw5NywKLSAgICAxMDAsMTAxLDExNCwxMTcsMTEsMCwwLDAsOTUsOTksMTA0LDEwMSw5OSwxMDcsOTUsMTEwLAotICAgIDk3LDEwOSwxMDEsMTE3LDE3LDAsMCwwLDk1LDExNCwxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwKLSAgICAxMTUsOTUsOTgsMTE3LDEwNSwxMDgsMTE2LDEwNSwxMTAsMTE3LDE2LDAsMCwwLDk1LDExNCwKLSAgICAxMDEsMTEzLDExNywxMDUsMTE0LDEwMSwxMTUsOTUsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMTE3LDE3LAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSwxMDksMTExLDEwMCwxMTcsMTA4LDEwMSw5NSwKLSAgICAxMTUsMTA0LDEwNSwxMDksMTE3LDE1LDAsMCwwLDY2LDExNywxMDUsMTA4LDExNiwxMDUsMTEwLAotICAgIDczLDEwOSwxMTIsMTExLDExNCwxMTYsMTAxLDExNCwxMTcsMTQsMCwwLDAsNzAsMTE0LDExMSwKLSAgICAxMjIsMTAxLDExMCw3MywxMDksMTEyLDExMSwxMTQsMTE2LDEwMSwxMTQsMTE3LDIxLDAsMCwwLAotICAgIDg3LDEwNSwxMTAsMTAwLDExMSwxMTksMTE1LDgyLDEwMSwxMDMsMTA1LDExNSwxMTYsMTE0LDEyMSw3MCwKLSAgICAxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywxMywwLDAsMCw5NSw3NiwxMTEsOTcsMTAwLDEwMSwKLSAgICAxMTQsNjYsOTcsMTE1LDEwNSw5OSwxMTUsMTE3LDEyLDAsMCwwLDgzLDExMSwxMTcsMTE0LAotICAgIDk5LDEwMSw3NiwxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDEwLDAsMCwwLDcwLDEwNSwxMDgsCi0gICAgMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTYsMCwwLDAsODMsMTExLDExNywxMTQsCi0gICAgOTksMTAxLDcwLDEwNSwxMDgsMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMjAsMCwwLAotICAgIDAsODMsMTExLDExNywxMTQsOTksMTAxLDEwOCwxMDEsMTE1LDExNSw3MCwxMDUsMTA4LDEwMSw3NiwKLSAgICAxMTEsOTcsMTAwLDEwMSwxMTQsMTE3LDE4LDAsMCwwLDY5LDg4LDg0LDY5LDc4LDgzLAotICAgIDczLDc5LDc4LDk1LDgzLDg1LDcwLDcwLDczLDg4LDY5LDgzLDExNywxOSwwLDAsCi0gICAgMCw2OSwxMjAsMTE2LDEwMSwxMTAsMTE1LDEwNSwxMTEsMTEwLDcwLDEwNSwxMDgsMTAxLDc2LDExMSwKLSAgICA5NywxMDAsMTAxLDExNCwxMTcsMTQsMCwwLDAsOTUsNzgsOTcsMTA5LDEwMSwxMTUsMTEyLAotICAgIDk3LDk5LDEwMSw4MCw5NywxMTYsMTA0LDExNywxNSwwLDAsMCw3OCw5NywxMDksMTAxLAotICAgIDExNSwxMTIsOTcsOTksMTAxLDc2LDExMSw5NywxMDAsMTAxLDExNCwxMTcsMTAsMCwwLDAsCi0gICAgODAsOTcsMTE2LDEwNCw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywxMCwwLDAsMCw3MCwKLSAgICAxMDUsMTA4LDEwMSw3MCwxMDUsMTEwLDEwMCwxMDEsMTE0LDExNywxOCwwLDAsMCw5NSw3MywKLSAgICAxMDksMTEyLDExMSwxMTQsMTE2LDc2LDExMSw5OSwxMDcsNjcsMTExLDExMCwxMTYsMTAxLDEyMCwxMTYsCi0gICAgMTE3LDEzLDAsMCwwLDk1LDExNCwxMDEsMTE1LDExMSwxMDgsMTE4LDEwMSw5NSwxMTAsOTcsCi0gICAgMTA5LDEwMSwxMTcsMTIsMCwwLDAsOTUsMTAyLDEwNSwxMTAsMTAwLDk1LDEwOSwxMTEsMTAwLAotICAgIDExNywxMDgsMTAxLDExNywxMywwLDAsMCw5NSwxMTUsOTcsMTEwLDEwNSwxMTYsMTIxLDk1LAotICAgIDk5LDEwNCwxMDEsOTksMTA3LDExNyw4LDAsMCwwLDk1LDY5LDgyLDgyLDk1LDc3LAotICAgIDgzLDcxLDExNywyMywwLDAsMCw5NSwxMDIsMTA1LDExMCwxMDAsOTUsOTcsMTEwLDEwMCwKLSAgICA5NSwxMDgsMTExLDk3LDEwMCw5NSwxMTcsMTEwLDEwOCwxMTEsOTksMTA3LDEwMSwxMDAsMTE3LDE0LAotICAgIDAsMCwwLDk1LDEwMiwxMDUsMTEwLDEwMCw5NSw5NywxMTAsMTAwLDk1LDEwOCwxMTEsOTcsCi0gICAgMTAwLDExNywxMSwwLDAsMCw5NSwxMDMsOTksMTAwLDk1LDEwNSwxMDksMTEyLDExMSwxMTQsCi0gICAgMTE2LDExNywxNiwwLDAsMCw5NSwxMDQsOTcsMTEwLDEwMCwxMDgsMTAxLDk1LDEwMiwxMTQsCi0gICAgMTExLDEwOSwxMDgsMTA1LDExNSwxMTYsMTE3LDE3LDAsMCwwLDk1LDk5LDk3LDEwOCw5OSwKLSAgICA5NSw5NSw5NSwxMTIsOTcsOTksMTA3LDk3LDEwMywxMDEsOTUsOTUsMTE3LDI3LDAsMCwKLSAgICAwLDk1LDEwMywxMDEsMTE2LDk1LDExNSwxMTcsMTEyLDExMiwxMTEsMTE0LDExNiwxMDEsMTAwLDk1LAotICAgIDEwMiwxMDUsMTA4LDEwMSw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTcsMTAsMCwwLAotICAgIDAsOTUsOTUsMTA1LDEwOSwxMTIsMTExLDExNCwxMTYsOTUsOTUsMTE3LDYsMCwwLDAsCi0gICAgOTUsMTE1LDEwMSwxMTYsMTE3LDExMiwxMTcsOCwwLDAsMCw5NSwxMDUsMTEwLDExNSwxMTYsCi0gICAgOTcsMTA4LDEwOCw0MCwwLDAsMCwwLDQwLDAsMCwwLDAsNDAsMCwwLAotICAgIDAsMCwxMTcsMjksMCwwLDAsNjAsMTAyLDExNCwxMTEsMTIyLDEwMSwxMTAsMzIsMTA1LAotICAgIDEwOSwxMTIsMTExLDExNCwxMTYsMTA4LDEwNSw5OCw0Niw5NSw5OCwxMTEsMTExLDExNiwxMTUsMTE2LAotICAgIDExNCw5NywxMTIsNjIsMTE3LDgsMCwwLDAsNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsCi0gICAgNjIsOCwwLDAsMCwxMTUsMTMyLDAsMCwwLDYsMjEsNiwzLDEyLDEzLAotICAgIDEyLDE2LDEyLDEzLDEyLDEyLDEyLDEyLDEyLDEwLDEyLDYsMTIsNywxNSwyMiwKLSAgICAxMiw4LDE1LDMsMTIsMTIsNiwyLDYsMywyMiw0LDE5LDY4LDE5LDIzLAotICAgIDEyLDE5LDEyLDIwLDEyLDEwMCwzNCwxLDM3LDIsNiwyLDksMiw5LDEsCi0gICAgOSwyLDE1LDI3LDEyLDIzLDEyLDE5LDE4LDgsMTIsMTMsMTIsMTEsMTIsNTUsCi0gICAgMTIsMTgsMTIsMTEsMTIsMTEsMTIsMTcsMTksNTcsMTksNTQsMTksNTAsMTksODMsCi0gICAgMjIsMTM0LDE5LDI5LDI1LDQ5LDI1LDI1LDYsMywxOSw0NSwxOSw1NSwxOSwxOCwKLSAgICAxOSw5MSwxOSwxMjgsMTksMTMsMTIsOSwxMiwxNywxMiwxNyw2LDIsMTIsNTAsCi0gICAgMTIsMTMsMTgsMjQsMTIsMzQsMTIsMTUsMTIsMTEsMjQsMzYsMTIsNzksCisgICAgMCwxLDEwMCwyLDAsODMsNDEsMywxMjIsNTAsNzMsMTEwLDExNSwxMTYsOTcsMTA4LAorICAgIDEwOCwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiwxMDgsMTA1LDk4LDMyLDk3LDExNSwzMiwxMTYsCisgICAgMTA0LDEwMSwzMiwxMDUsMTA5LDExMiwxMDgsMTAxLDEwOSwxMDEsMTEwLDExNiw5NywxMTYsMTA1LDExMSwKKyAgICAxMTAsMzIsMTExLDEwMiwzMiwxMDUsMTA5LDExMiwxMTEsMTE0LDExNiw0NiwxMTQsMTMxLDEsMCwKKyAgICAwLDc4LDQxLDE1LDExNCwxMzcsMSwwLDAsMTE0LDI0MSwwLDAsMCwxMTQsNywKKyAgICAwLDAsMCwxMTQsNzksMSwwLDAsMTE0LDE5OCwwLDAsMCwxMTQsODcsMSwKKyAgICAwLDAsMTE0LDEwMSwxLDAsMCwxMTQsMTA3LDEsMCwwLDExNCwyMjQsMCwwLAorICAgIDAsMTE0LDExLDEsMCwwLDExNCwyMCwxLDAsMCwxMTQsMywwLDAsMCwKKyAgICAxMTQsNTcsMCwwLDAsMTE0LDIzLDEsMCwwLDExNCw3NCwxLDAsMCw0MSwKKyAgICAzLDExNCwxMzUsMSwwLDAsMTE0LDEzNiwxLDAsMCw5MCwxNywxMTUsMTE3LDExMiwKKyAgICAxMTIsMTExLDExNCwxMTYsMTAxLDEwMCw5NSwxMDgsMTExLDk3LDEwMCwxMDEsMTE0LDExNSwxMTQsNCwKKyAgICAwLDAsMCwxMTQsNCwwLDAsMCwxMTQsNSwwLDAsMCwyMTgsOCw5NSwKKyAgICAxMDUsMTEwLDExNSwxMTYsOTcsMTA4LDEwOCwxNDgsOSwwLDAsMTE1LDE2LDAsMCwwLAorICAgIDAsMiwxMywxLDksMSwyOCwxLDE2LDEsMTYsMSwxNSwxLDE5LDEsCisgICAgMTE0LDEzOCwxLDAsMCw0MSwzLDEyMiwzLDExOSwxMDUsMTEwLDExNCwxLDAsMCwKKyAgICAwLDExNCwyLDAsMCwwLDQxLDkyLDExNCw1OSwwLDAsMCwxMTQsMTAsMCwKKyAgICAwLDAsMTE0LDExLDAsMCwwLDExNCwxNywwLDAsMCwxMTQsMTksMCwwLAorICAgIDAsMTE0LDI4LDAsMCwwLDExNCwzOCwwLDAsMCwxMTQsMzksMCwwLDAsCisgICAgMTE0LDQzLDAsMCwwLDExNCw0NCwwLDAsMCwxMTQsNDYsMCwwLDAsMTE0LAorICAgIDU1LDAsMCwwLDExNCw2NSwwLDAsMCwxMTQsNjgsMCwwLDAsMTE0LDY2LAorICAgIDAsMCwwLDIxOCw4LDk1LDk1LDk5LDExMSwxMDAsMTAxLDk1LDk1LDExNCwxOTQsMCwKKyAgICAwLDAsMTE0LDY5LDAsMCwwLDExNCwxMDksMCwwLDAsMTE0LDkyLDAsMCwKKyAgICAwLDExNCw5OSwwLDAsMCwxMTQsODIsMCwwLDAsMTE0LDgzLDAsMCwwLAorICAgIDExNCwxMDIsMCwwLDAsMTE0LDEwMywwLDAsMCwxMTQsMTA1LDAsMCwwLDExNCwKKyAgICAxMTIsMCwwLDAsMTE0LDExNCwwLDAsMCwxMTQsMTUsMCwwLDAsMTE0LDE4NiwKKyAgICAwLDAsMCwxMTQsMTQsMCwwLDAsMTE0LDE4LDAsMCwwLDkwLDE3LDk1LAorICAgIDgyLDY1LDg3LDk1LDc3LDY1LDcxLDczLDY3LDk1LDc4LDg1LDc3LDY2LDY5LDgyLAorICAgIDExNCwxMjQsMCwwLDAsMTE0LDEzNSwwLDAsMCwxMTQsMTE5LDAsMCwwLDExNCwKKyAgICAxMjAsMCwwLDAsMTE0LDEzMiwwLDAsMCwxMTQsMTM2LDAsMCwwLDExNCwxNDMsCisgICAgMCwwLDAsMTE0LDE0NSwwLDAsMCwxMTQsMTUzLDAsMCwwLDExNCwxNTcsMCwKKyAgICAwLDAsMTE0LDE2MiwwLDAsMCwxMTQsMTY1LDAsMCwwLDExNCwxNzMsMCwwLAorICAgIDAsMTE0LDE4MSwwLDAsMCwxMTQsMTkxLDAsMCwwLDExNCwxOTYsMCwwLDAsCisgICAgMTE0LDE5OSwwLDAsMCwxMTQsMjA0LDAsMCwwLDExNCwyMTIsMCwwLDAsMTE0LAorICAgIDIxMywwLDAsMCwxMTQsMjE3LDAsMCwwLDExNCwxNzQsMCwwLDAsMjE4LDYsCisgICAgMTExLDk4LDEwNiwxMDEsOTksMTE2LDExNCwyNDIsMCwwLDAsMTE0LDI0MCwwLDAsMCwKKyAgICAxMTQsMjQ4LDAsMCwwLDExNCwxNzUsMCwwLDAsMTE0LDEwLDEsMCwwLDExNCwKKyAgICAxMSwxLDAsMCwxMTQsMjAsMSwwLDAsMTE0LDIzLDEsMCwwLDExNCwzMywKKyAgICAxLDAsMCwxMTQsMzQsMSwwLDAsMTE0LDQ5LDEsMCwwLDExNCw5LDEsCisgICAgMCwwLDExNCw4LDEsMCwwLDExNCw2MCwxLDAsMCwxMTQsNTcsMSwwLAorICAgIDAsMTE0LDYxLDEsMCwwLDExNCwyNTIsMCwwLDAsMTE0LDc0LDEsMCwwLAorICAgIDExNCw4NywxLDAsMCwxMTQsMTAyLDEsMCwwLDExNCwxMDUsMSwwLDAsMTE0LAorICAgIDEwNiwxLDAsMCwxMTQsMTA4LDEsMCwwLDExNCwxMTEsMSwwLDAsMTE0LDEyMCwKKyAgICAxLDAsMCwxMTQsMTEyLDEsMCwwLDExNCwxMTQsMSwwLDAsMTE0LDExNSwxLAorICAgIDAsMCwxMTQsMTE2LDEsMCwwLDExNCwxMjIsMSwwLDAsMTE0LDEyNCwxLDAsCisgICAgMCwxMTQsMjQxLDAsMCwwLDExNCwxMjcsMSwwLDAsMTE0LDEyOCwxLDAsMCwKKyAgICAxMTQsMTM3LDEsMCwwLDExNCwxMzgsMSwwLDAsMTE0LDQsMCwwLDAsMTE0LAorICAgIDQsMCwwLDAsMTE0LDQsMCwwLDAsMTE0LDUsMCwwLDAsMjE4LDgsCisgICAgNjAsMTA5LDExMSwxMDAsMTE3LDEwOCwxMDEsNjIsOCwwLDAsMCwxMTUsMTcwLDAsMCwKKyAgICAwLDYsMTcsNiwzLDEyLDEyLDEyLDUsMTIsNSwxMiw2LDEyLDEyLDEyLAorICAgIDEwLDEyLDksMTIsNSwxMiw3LDE1LDIyLDEyLDgsMTIsNCwxNSw0LDE5LAorICAgIDIwLDYsMiw2LDMsMjIsNCwxOSw2OCwxOSwyMSwxOSwxOSwxMiwxOSwxMiwKKyAgICAyMCwxMiwxMTQsMjIsMSwxOCwyLDYsMiw5LDIsOSwxLDksMiwxNSwKKyAgICAyNywxMiwyMywxMiwxOSwxMiwxMiwxOCw4LDEyLDE4LDEyLDExLDEyLDExLDEyLAorICAgIDE3LDEyLDE2LDIxLDU1LDIxLDEyLDE4LDEwLDEyLDE0LDEyLDM2LDE5LDI3LDE5LAorICAgIDEwNiwyNCwyMiw5LDMsMTIsMSwxNSw2MywxOCw0NSwxOSwyMzAsMTUsMjUsMTksCisgICAgNzAsMTksNzEsMTksNjMsMTksMjQsMjIsMTEwLDE5LDQxLDI1LDQzLDI1LDE2LDYsCisgICAgMywxOSw1NywxOSw1NywxOSwzOCwxOSwxMjksMTksMTQ2LDE5LDEzLDEyLDksMTIsCisgICAgOSwxNSw0MCwxMiwxNyw2LDEsMTAsMiwxMiwyNywxMiw2LDE4LDI0LDEyLAorICAgIDMyLDEyLDE1LDEyLDExLDI0LDM1LDEyLDgsMTIsODcsCiB9OwpkaWZmIC0tZ2l0IGEvUHl0aG9uL21hcnNoYWwuYyBiL1B5dGhvbi9tYXJzaGFsLmMKaW5kZXggY2MxNzMyOS4uNmYwZWU1ZSAxMDA2NDQKLS0tIGEvUHl0aG9uL21hcnNoYWwuYworKysgYi9QeXRob24vbWFyc2hhbC5jCkBAIC0xLDggKzEsMTAgQEAKIAogLyogV3JpdGUgUHl0aG9uIG9iamVjdHMgdG8gZmlsZXMgYW5kIHJlYWQgdGhlbSBiYWNrLgotICAgVGhpcyBpcyBpbnRlbmRlZCBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBjb21waWxlZCBQeXRob24gY29kZSBvbmx5OwotICAgYSB0cnVlIHBlcnNpc3RlbnQgc3RvcmFnZSBmYWNpbGl0eSB3b3VsZCBiZSBtdWNoIGhhcmRlciwgc2luY2UKLSAgIGl0IHdvdWxkIGhhdmUgdG8gdGFrZSBjaXJjdWxhciBsaW5rcyBhbmQgc2hhcmluZyBpbnRvIGFjY291bnQuICovCisgICBUaGlzIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igd3JpdGluZyBhbmQgcmVhZGluZyBjb21waWxlZCBQeXRob24gY29kZSwKKyAgIGV2ZW4gdGhvdWdoIGRpY3RzLCBsaXN0cywgc2V0cyBhbmQgZnJvemVuc2V0cywgbm90IGNvbW1vbmx5IHNlZW4gaW4KKyAgIGNvZGUgb2JqZWN0cywgYXJlIHN1cHBvcnRlZC4KKyAgIFZlcnNpb24gMyBvZiB0aGlzIHByb3RvY29sIHByb3Blcmx5IHN1cHBvcnRzIGNpcmN1bGFyIGxpbmtzCisgICBhbmQgc2hhcmluZy4gKi8KIAogI2RlZmluZSBQWV9TU0laRV9UX0NMRUFOCiAKQEAgLTMxLDE2ICszMywxNCBAQAogI2RlZmluZSBUWVBFX1NUT1BJVEVSICAgICAgICAgICAnUycKICNkZWZpbmUgVFlQRV9FTExJUFNJUyAgICAgICAgICAgJy4nCiAjZGVmaW5lIFRZUEVfSU5UICAgICAgICAgICAgICAgICdpJwotLyogVFlQRV9JTlQ2NCBpcyBkZXByZWNhdGVkLiBJdCBpcyBub3QKLSAgIGdlbmVyYXRlZCBhbnltb3JlLCBhbmQgc3VwcG9ydCBmb3IgcmVhZGluZyBpdAotICAgd2lsbCBiZSByZW1vdmVkIGluIFB5dGhvbiAzLjQuICovCi0jZGVmaW5lIFRZUEVfSU5UNjQgICAgICAgICAgICAgICdJJwogI2RlZmluZSBUWVBFX0ZMT0FUICAgICAgICAgICAgICAnZicKICNkZWZpbmUgVFlQRV9CSU5BUllfRkxPQVQgICAgICAgJ2cnCiAjZGVmaW5lIFRZUEVfQ09NUExFWCAgICAgICAgICAgICd4JwogI2RlZmluZSBUWVBFX0JJTkFSWV9DT01QTEVYICAgICAneScKICNkZWZpbmUgVFlQRV9MT05HICAgICAgICAgICAgICAgJ2wnCiAjZGVmaW5lIFRZUEVfU1RSSU5HICAgICAgICAgICAgICdzJworI2RlZmluZSBUWVBFX0lOVEVSTkVEICAgICAgICAgICAndCcKKyNkZWZpbmUgVFlQRV9SRUYgICAgICAgICAgICAgICAgJ3InCiAjZGVmaW5lIFRZUEVfVFVQTEUgICAgICAgICAgICAgICcoJwogI2RlZmluZSBUWVBFX0xJU1QgICAgICAgICAgICAgICAnWycKICNkZWZpbmUgVFlQRV9ESUNUICAgICAgICAgICAgICAgJ3snCkBAIC00OSw2ICs0OSwxMyBAQAogI2RlZmluZSBUWVBFX1VOS05PV04gICAgICAgICAgICAnPycKICNkZWZpbmUgVFlQRV9TRVQgICAgICAgICAgICAgICAgJzwnCiAjZGVmaW5lIFRZUEVfRlJPWkVOU0VUICAgICAgICAgICc+JworI2RlZmluZSBGTEFHX1JFRiAgICAgICAgICAgICAgICAnXHg4MCcgLyogd2l0aCBhIHR5cGUsIGFkZCBvYmogdG8gaW5kZXggKi8KKworI2RlZmluZSBUWVBFX0FTQ0lJICAgICAgICAgICAgICAnYScKKyNkZWZpbmUgVFlQRV9BU0NJSV9JTlRFUk5FRCAgICAgJ0EnCisjZGVmaW5lIFRZUEVfU01BTExfVFVQTEUgICAgICAgICcpJworI2RlZmluZSBUWVBFX1NIT1JUX0FTQ0lJICAgICAgICAneicKKyNkZWZpbmUgVFlQRV9TSE9SVF9BU0NJSV9JTlRFUk5FRCAnWicKIAogI2RlZmluZSBXRkVSUl9PSyAwCiAjZGVmaW5lIFdGRVJSX1VOTUFSU0hBTExBQkxFIDEKQEAgLTY1LDE1ICs3MiwxOCBAQAogICAgIFB5T2JqZWN0ICpjdXJyZW50X2ZpbGVuYW1lOwogICAgIGNoYXIgKnB0cjsKICAgICBjaGFyICplbmQ7CisgICAgY2hhciAqYnVmOworICAgIFB5X3NzaXplX3QgYnVmX3NpemU7CisgICAgUHlPYmplY3QgKnJlZnM7IC8qIGRpY3Qgb24gbWFyc2hhbCwgbGlzdCBvbiB1bm1hcnNoYWwgKi8KICAgICBpbnQgdmVyc2lvbjsKIH0gV0ZJTEU7CiAKICNkZWZpbmUgd19ieXRlKGMsIHApIGlmICgoKHApLT5mcCkpIHB1dGMoKGMpLCAocCktPmZwKTsgXAogICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChwKS0+cHRyICE9IChwKS0+ZW5kKSAqKHApLT5wdHIrKyA9IChjKTsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB3X21vcmUoYywgcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ugd19tb3JlKChjKSwgcCkKIAogc3RhdGljIHZvaWQKLXdfbW9yZShpbnQgYywgV0ZJTEUgKnApCit3X21vcmUoY2hhciBjLCBXRklMRSAqcCkKIHsKICAgICBQeV9zc2l6ZV90IHNpemUsIG5ld3NpemU7CiAgICAgaWYgKHAtPnN0ciA9PSBOVUxMKQpAQCAtOTAsNyArMTAwLDcgQEAKICAgICAgICAgcC0+cHRyID0gUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QgKilwLT5zdHIpICsgc2l6ZTsKICAgICAgICAgcC0+ZW5kID0KICAgICAgICAgICAgIFB5Qnl0ZXNfQVNfU1RSSU5HKChQeUJ5dGVzT2JqZWN0ICopcC0+c3RyKSArIG5ld3NpemU7Ci0gICAgICAgICpwLT5wdHIrKyA9IFB5X1NBRkVfRE9XTkNBU1QoYywgaW50LCBjaGFyKTsKKyAgICAgICAgKnAtPnB0cisrID0gYzsKICAgICB9CiB9CiAKQEAgLTE0Niw2ICsxNTYsMTMgQEAKICAgICAgICAgd19zdHJpbmcocywgbiwgcCk7CiB9CiAKK3N0YXRpYyB2b2lkCit3X3Nob3J0X3BzdHJpbmcoY29uc3QgY2hhciAqcywgUHlfc3NpemVfdCBuLCBXRklMRSAqcCkKK3sKKyAgICB3X2J5dGUoUHlfU0FGRV9ET1dOQ0FTVChuLCBQeV9zc2l6ZV90LCB1bnNpZ25lZCBjaGFyKSwgcCk7CisgICAgd19zdHJpbmcocywgbiwgcCk7Cit9CisKIC8qIFdlIGFzc3VtZSB0aGF0IFB5dGhvbiBpbnRzIGFyZSBzdG9yZWQgaW50ZXJuYWxseSBpbiBiYXNlIHNvbWUgcG93ZXIgb2YKICAgIDIqKjE1OyBmb3IgdGhlIHNha2Ugb2YgcG9ydGFiaWxpdHkgd2UnbGwgYWx3YXlzIHJlYWQgYW5kIHdyaXRlIHRoZW0gaW4gYmFzZQogICAgZXhhY3RseSAyKioxNS4gKi8KQEAgLTE1OCwxMyArMTc1LDE3IEBACiAjZW5kaWYKICNkZWZpbmUgUHlMb25nX01BUlNIQUxfUkFUSU8gKFB5TG9uZ19TSElGVCAvIFB5TG9uZ19NQVJTSEFMX1NISUZUKQogCisjZGVmaW5lIFdfVFlQRSh0LCBwKSBkbyB7IFwKKyAgICB3X2J5dGUoKHQpIHwgZmxhZywgKHApKTsgXAorfSB3aGlsZSgwKQorCiBzdGF0aWMgdm9pZAotd19QeUxvbmcoY29uc3QgUHlMb25nT2JqZWN0ICpvYiwgV0ZJTEUgKnApCit3X1B5TG9uZyhjb25zdCBQeUxvbmdPYmplY3QgKm9iLCBjaGFyIGZsYWcsIFdGSUxFICpwKQogewogICAgIFB5X3NzaXplX3QgaSwgaiwgbiwgbDsKICAgICBkaWdpdCBkOwogCi0gICAgd19ieXRlKFRZUEVfTE9ORywgcCk7CisgICAgV19UWVBFKFRZUEVfTE9ORywgcCk7CiAgICAgaWYgKFB5X1NJWkUob2IpID09IDApIHsKICAgICAgICAgd19sb25nKChsb25nKTAsIHApOwogICAgICAgICByZXR1cm47CkBAIC0yMDEsMTAgKzIyMiw2NCBAQAogICAgIH0gd2hpbGUgKGQgIT0gMCk7CiB9CiAKK3N0YXRpYyBpbnQKK3dfcmVmKFB5T2JqZWN0ICp2LCBjaGFyICpmbGFnLCBXRklMRSAqcCkKK3sKKyAgICBQeU9iamVjdCAqaWQ7CisgICAgUHlPYmplY3QgKmlkeDsKKworICAgIGlmIChwLT52ZXJzaW9uIDwgMyB8fCBwLT5yZWZzID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOyAvKiBub3Qgd3JpdGluZyBvYmplY3QgcmVmZXJlbmNlcyAqLworCisgICAgLyogaWYgaXQgaGFzIG9ubHkgb25lIHJlZmVyZW5jZSwgaXQgZGVmaW5pdGVseSBpc24ndCBzaGFyZWQgKi8KKyAgICBpZiAoUHlfUkVGQ05UKHYpID09IDEpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWQgPSBQeUxvbmdfRnJvbVZvaWRQdHIoKHZvaWQqKXYpOworICAgIGlmIChpZCA9PSBOVUxMKQorICAgICAgICBnb3RvIGVycjsKKyAgICBpZHggPSBQeURpY3RfR2V0SXRlbShwLT5yZWZzLCBpZCk7CisgICAgaWYgKGlkeCAhPSBOVUxMKSB7CisgICAgICAgIC8qIHdyaXRlIHRoZSByZWZlcmVuY2UgaW5kZXggdG8gdGhlIHN0cmVhbSAqLworICAgICAgICBsb25nIHcgPSBQeUxvbmdfQXNMb25nKGlkeCk7CisgICAgICAgIFB5X0RFQ1JFRihpZCk7CisgICAgICAgIGlmICh3ID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisgICAgICAgIC8qIHdlIGRvbid0IHN0b3JlICJsb25nIiBpbmRpY2VzIGluIHRoZSBkaWN0ICovCisgICAgICAgIGFzc2VydCgwIDw9IHcgJiYgdyA8PSAweDdmZmZmZmZmKTsKKyAgICAgICAgd19ieXRlKFRZUEVfUkVGLCBwKTsKKyAgICAgICAgd19sb25nKHcsIHApOworICAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgb2s7CisgICAgICAgIFB5X3NzaXplX3QgcyA9IFB5RGljdF9TaXplKHAtPnJlZnMpOworICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IGxvbmcgaW5kaWNlcyAqLworICAgICAgICBpZiAocyA+PSAweDdmZmZmZmZmKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgInRvbyBtYW55IG9iamVjdHMiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisgICAgICAgIGlkeCA9IFB5TG9uZ19Gcm9tU3NpemVfdChzKTsKKyAgICAgICAgb2sgPSBpZHggJiYgUHlEaWN0X1NldEl0ZW0ocC0+cmVmcywgaWQsIGlkeCkgPT0gMDsKKyAgICAgICAgUHlfREVDUkVGKGlkKTsKKyAgICAgICAgUHlfWERFQ1JFRihpZHgpOworICAgICAgICBpZiAoIW9rKQorICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgICpmbGFnIHw9IEZMQUdfUkVGOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CitlcnI6CisgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQKK3dfY29tcGxleF9vYmplY3QoUHlPYmplY3QgKnYsIGNoYXIgZmxhZywgV0ZJTEUgKnApOworCiBzdGF0aWMgdm9pZAogd19vYmplY3QoUHlPYmplY3QgKnYsIFdGSUxFICpwKQogewotICAgIFB5X3NzaXplX3QgaSwgbjsKKyAgICBjaGFyIGZsYWcgPSAnXDAnOwogCiAgICAgcC0+ZGVwdGgrKzsKIApAQCAtMjI5LDI0ICszMDQsMzUgQEAKICAgICBlbHNlIGlmICh2ID09IFB5X1RydWUpIHsKICAgICAgICAgd19ieXRlKFRZUEVfVFJVRSwgcCk7CiAgICAgfQotICAgIGVsc2UgaWYgKFB5TG9uZ19DaGVja0V4YWN0KHYpKSB7CisgICAgZWxzZSBpZiAoIXdfcmVmKHYsICZmbGFnLCBwKSkKKyAgICAgICAgd19jb21wbGV4X29iamVjdCh2LCBmbGFnLCBwKTsKKworICAgIHAtPmRlcHRoLS07Cit9CisKK3N0YXRpYyB2b2lkCit3X2NvbXBsZXhfb2JqZWN0KFB5T2JqZWN0ICp2LCBjaGFyIGZsYWcsIFdGSUxFICpwKQoreworICAgIFB5X3NzaXplX3QgaSwgbjsKKworICAgIGlmIChQeUxvbmdfQ2hlY2tFeGFjdCh2KSkgewogICAgICAgICBsb25nIHggPSBQeUxvbmdfQXNMb25nKHYpOwogICAgICAgICBpZiAoKHggPT0gLTEpICAmJiBQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICBQeUxvbmdPYmplY3QgKm9iID0gKFB5TG9uZ09iamVjdCAqKXY7CiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwotICAgICAgICAgICAgd19QeUxvbmcob2IsIHApOworICAgICAgICAgICAgd19QeUxvbmcob2IsIGZsYWcsIHApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewogI2lmIFNJWkVPRl9MT05HID4gNAogICAgICAgICAgICAgbG9uZyB5ID0gUHlfQVJJVEhNRVRJQ19SSUdIVF9TSElGVChsb25nLCB4LCAzMSk7CiAgICAgICAgICAgICBpZiAoeSAmJiB5ICE9IC0xKSB7CiAgICAgICAgICAgICAgICAgLyogVG9vIGxhcmdlIGZvciBUWVBFX0lOVCAqLwotICAgICAgICAgICAgICAgIHdfUHlMb25nKChQeUxvbmdPYmplY3QqKXYsIHApOworICAgICAgICAgICAgICAgIHdfUHlMb25nKChQeUxvbmdPYmplY3QqKXYsIGZsYWcsIHApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZQogI2VuZGlmCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd19ieXRlKFRZUEVfSU5ULCBwKTsKKyAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9JTlQsIHApOwogICAgICAgICAgICAgICAgIHdfbG9uZyh4LCBwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjU5LDcgKzM0NSw3IEBACiAgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9CSU5BUllfRkxPQVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfQklOQVJZX0ZMT0FULCBwKTsKICAgICAgICAgICAgIHdfc3RyaW5nKChjaGFyKilidWYsIDgsIHApOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgewpAQCAtMjcwLDcgKzM1Niw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbiA9IHN0cmxlbihidWYpOwotICAgICAgICAgICAgd19ieXRlKFRZUEVfRkxPQVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfRkxPQVQsIHApOwogICAgICAgICAgICAgd19ieXRlKChpbnQpbiwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZyhidWYsIG4sIHApOwogICAgICAgICAgICAgUHlNZW1fRnJlZShidWYpOwpAQCAtMjg0LDcgKzM3MCw3IEBACiAgICAgICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3X2J5dGUoVFlQRV9CSU5BUllfQ09NUExFWCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9CSU5BUllfQ09NUExFWCwgcCk7CiAgICAgICAgICAgICB3X3N0cmluZygoY2hhciopYnVmLCA4LCBwKTsKICAgICAgICAgICAgIGlmIChfUHlGbG9hdF9QYWNrOChQeUNvbXBsZXhfSW1hZ0FzRG91YmxlKHYpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgMSkgPCAwKSB7CkBAIC0yOTUsNyArMzgxLDcgQEAKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGNoYXIgKmJ1ZjsKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX0NPTVBMRVgsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfQ09NUExFWCwgcCk7CiAgICAgICAgICAgICBidWYgPSBQeU9TX2RvdWJsZV90b19zdHJpbmcoUHlDb21wbGV4X1JlYWxBc0RvdWJsZSh2KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZycsIDE3LCAwLCBOVUxMKTsKICAgICAgICAgICAgIGlmICghYnVmKSB7CkBAIC0zMTksMzEgKzQwNSw2MSBAQAogICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5Qnl0ZXNfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICB3X2J5dGUoVFlQRV9TVFJJTkcsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9TVFJJTkcsIHApOwogICAgICAgICB3X3BzdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodiksIFB5Qnl0ZXNfR0VUX1NJWkUodiksIHApOwogICAgIH0KICAgICBlbHNlIGlmIChQeVVuaWNvZGVfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICBQeU9iamVjdCAqdXRmODsKLSAgICAgICAgdXRmOCA9IFB5VW5pY29kZV9Bc0VuY29kZWRTdHJpbmcodiwgInV0ZjgiLCAic3Vycm9nYXRlcGFzcyIpOwotICAgICAgICBpZiAodXRmOCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBwLT5kZXB0aC0tOwotICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKHAtPnZlcnNpb24gPj0gNCAmJiBQeVVuaWNvZGVfSVNfQVNDSUkodikpIHsKKyAgICAgICAgICAgIGludCBpc19zaG9ydCA9IFB5VW5pY29kZV9HRVRfTEVOR1RIKHYpIDwgMjU2OworICAgICAgICAgICAgaWYgKGlzX3Nob3J0KSB7CisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfU0hPUlRfQVNDSUlfSU5URVJORUQsIHApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfU0hPUlRfQVNDSUksIHApOworICAgICAgICAgICAgICAgIHdfc2hvcnRfcHN0cmluZygoY2hhciAqKSBQeVVuaWNvZGVfMUJZVEVfREFUQSh2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodiksIHApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfQVNDSUlfSU5URVJORUQsIHApOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfQVNDSUksIHApOworICAgICAgICAgICAgICAgIHdfcHN0cmluZygoY2hhciAqKSBQeVVuaWNvZGVfMUJZVEVfREFUQSh2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHlVbmljb2RlX0dFVF9MRU5HVEgodiksIHApOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHdfYnl0ZShUWVBFX1VOSUNPREUsIHApOwotICAgICAgICB3X3BzdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodXRmOCksIFB5Qnl0ZXNfR0VUX1NJWkUodXRmOCksIHApOwotICAgICAgICBQeV9ERUNSRUYodXRmOCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgUHlPYmplY3QgKnV0Zjg7CisgICAgICAgICAgICB1dGY4ID0gUHlVbmljb2RlX0FzRW5jb2RlZFN0cmluZyh2LCAidXRmOCIsICJzdXJyb2dhdGVwYXNzIik7CisgICAgICAgICAgICBpZiAodXRmOCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcC0+ZGVwdGgtLTsKKyAgICAgICAgICAgICAgICBwLT5lcnJvciA9IFdGRVJSX1VOTUFSU0hBTExBQkxFOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwLT52ZXJzaW9uID49IDMgJiYgIFB5VW5pY29kZV9DSEVDS19JTlRFUk5FRCh2KSkKKyAgICAgICAgICAgICAgICBXX1RZUEUoVFlQRV9JTlRFUk5FRCwgcCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgV19UWVBFKFRZUEVfVU5JQ09ERSwgcCk7CisgICAgICAgICAgICB3X3BzdHJpbmcoUHlCeXRlc19BU19TVFJJTkcodXRmOCksIFB5Qnl0ZXNfR0VUX1NJWkUodXRmOCksIHApOworICAgICAgICAgICAgUHlfREVDUkVGKHV0ZjgpOworICAgICAgICB9CiAgICAgfQogICAgIGVsc2UgaWYgKFB5VHVwbGVfQ2hlY2tFeGFjdCh2KSkgewotICAgICAgICB3X2J5dGUoVFlQRV9UVVBMRSwgcCk7CiAgICAgICAgIG4gPSBQeVR1cGxlX1NpemUodik7Ci0gICAgICAgIFdfU0laRShuLCBwKTsKKyAgICAgICAgaWYgKHAtPnZlcnNpb24gPj0gNCAmJiBuIDwgMjU2KSB7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9TTUFMTF9UVVBMRSwgcCk7CisgICAgICAgICAgICB3X2J5dGUoKHVuc2lnbmVkIGNoYXIpbiwgcCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9UVVBMRSwgcCk7CisgICAgICAgICAgICBXX1NJWkUobiwgcCk7CisgICAgICAgIH0KICAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgICAgICAgd19vYmplY3QoUHlUdXBsZV9HRVRfSVRFTSh2LCBpKSwgcCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgZWxzZSBpZiAoUHlMaXN0X0NoZWNrRXhhY3QodikpIHsKLSAgICAgICAgd19ieXRlKFRZUEVfTElTVCwgcCk7CisgICAgICAgIFdfVFlQRShUWVBFX0xJU1QsIHApOwogICAgICAgICBuID0gUHlMaXN0X0dFVF9TSVpFKHYpOwogICAgICAgICBXX1NJWkUobiwgcCk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKQEAgLTM1Myw3ICs0NjksNyBAQAogICAgIGVsc2UgaWYgKFB5RGljdF9DaGVja0V4YWN0KHYpKSB7CiAgICAgICAgIFB5X3NzaXplX3QgcG9zOwogICAgICAgICBQeU9iamVjdCAqa2V5LCAqdmFsdWU7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0RJQ1QsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9ESUNULCBwKTsKICAgICAgICAgLyogVGhpcyBvbmUgaXMgTlVMTCBvYmplY3QgdGVybWluYXRlZCEgKi8KICAgICAgICAgcG9zID0gMDsKICAgICAgICAgd2hpbGUgKFB5RGljdF9OZXh0KHYsICZwb3MsICZrZXksICZ2YWx1ZSkpIHsKQEAgLTM2Niw5ICs0ODIsOSBAQAogICAgICAgICBQeU9iamVjdCAqdmFsdWUsICppdDsKIAogICAgICAgICBpZiAoUHlPYmplY3RfVHlwZUNoZWNrKHYsICZQeVNldF9UeXBlKSkKLSAgICAgICAgICAgIHdfYnl0ZShUWVBFX1NFVCwgcCk7CisgICAgICAgICAgICBXX1RZUEUoVFlQRV9TRVQsIHApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB3X2J5dGUoVFlQRV9GUk9aRU5TRVQsIHApOworICAgICAgICAgICAgV19UWVBFKFRZUEVfRlJPWkVOU0VULCBwKTsKICAgICAgICAgbiA9IFB5T2JqZWN0X1NpemUodik7CiAgICAgICAgIGlmIChuID09IC0xKSB7CiAgICAgICAgICAgICBwLT5kZXB0aC0tOwpAQCAtMzk1LDcgKzUxMSw3IEBACiAgICAgfQogICAgIGVsc2UgaWYgKFB5Q29kZV9DaGVjayh2KSkgewogICAgICAgICBQeUNvZGVPYmplY3QgKmNvID0gKFB5Q29kZU9iamVjdCAqKXY7Ci0gICAgICAgIHdfYnl0ZShUWVBFX0NPREUsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9DT0RFLCBwKTsKICAgICAgICAgd19sb25nKGNvLT5jb19hcmdjb3VudCwgcCk7CiAgICAgICAgIHdfbG9uZyhjby0+Y29fa3dvbmx5YXJnY291bnQsIHApOwogICAgICAgICB3X2xvbmcoY28tPmNvX25sb2NhbHMsIHApOwpAQCAtNDEzLDcgKzUyOSw3IEBACiAgICAgICAgIHdfb2JqZWN0KGNvLT5jb19sbm90YWIsIHApOwogICAgIH0KICAgICBlbHNlIGlmIChQeU9iamVjdF9DaGVja0J1ZmZlcih2KSkgewotICAgICAgICAvKiBXcml0ZSB1bmtub3duIGJ1ZmZlci1zdHlsZSBvYmplY3RzIGFzIGEgc3RyaW5nICovCisgICAgICAgIC8qIFdyaXRlIHVua25vd24gYnl0ZXMtbGlrZSBvYmplY3RzIGFzIGEgYnl0ZSBzdHJpbmcgKi8KICAgICAgICAgUHlfYnVmZmVyIHZpZXc7CiAgICAgICAgIGlmIChQeU9iamVjdF9HZXRCdWZmZXIodiwgJnZpZXcsIFB5QlVGX1NJTVBMRSkgIT0gMCkgewogICAgICAgICAgICAgd19ieXRlKFRZUEVfVU5LTk9XTiwgcCk7CkBAIC00MjEsMTUgKzUzNywxNCBAQAogICAgICAgICAgICAgcC0+ZXJyb3IgPSBXRkVSUl9VTk1BUlNIQUxMQUJMRTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICB3X2J5dGUoVFlQRV9TVFJJTkcsIHApOworICAgICAgICBXX1RZUEUoVFlQRV9TVFJJTkcsIHApOwogICAgICAgICB3X3BzdHJpbmcodmlldy5idWYsIHZpZXcubGVuLCBwKTsKICAgICAgICAgUHlCdWZmZXJfUmVsZWFzZSgmdmlldyk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICB3X2J5dGUoVFlQRV9VTktOT1dOLCBwKTsKKyAgICAgICAgV19UWVBFKFRZUEVfVU5LTk9XTiwgcCk7CiAgICAgICAgIHAtPmVycm9yID0gV0ZFUlJfVU5NQVJTSEFMTEFCTEU7CiAgICAgfQotICAgIHAtPmRlcHRoLS07CiB9CiAKIC8qIHZlcnNpb24gY3VycmVudGx5IGhhcyBubyBlZmZlY3QgZm9yIHdyaXRpbmcgaW50cy4gKi8KQEAgLTQ0MCw2ICs1NTUsNyBAQAogICAgIHdmLmZwID0gZnA7CiAgICAgd2YuZXJyb3IgPSBXRkVSUl9PSzsKICAgICB3Zi5kZXB0aCA9IDA7CisgICAgd2YucmVmcyA9IE5VTEw7CiAgICAgd2YudmVyc2lvbiA9IHZlcnNpb247CiAgICAgd19sb25nKHgsICZ3Zik7CiB9CkBAIC00NTEsODEgKzU2NywxMDcgQEAKICAgICB3Zi5mcCA9IGZwOwogICAgIHdmLmVycm9yID0gV0ZFUlJfT0s7CiAgICAgd2YuZGVwdGggPSAwOworICAgIGlmICh2ZXJzaW9uID49IDMpIHsKKyAgICAgICAgaWYgKCh3Zi5yZWZzID0gUHlEaWN0X05ldygpKSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuOyAvKiBjYWxsZXIgbXVzaCBjaGVjayBQeUVycl9PY2N1cnJlZCgpICovCisgICAgfSBlbHNlCisgICAgICAgIHdmLnJlZnMgPSBOVUxMOwogICAgIHdmLnZlcnNpb24gPSB2ZXJzaW9uOwogICAgIHdfb2JqZWN0KHgsICZ3Zik7CisgICAgUHlfWERFQ1JFRih3Zi5yZWZzKTsKIH0KIAogdHlwZWRlZiBXRklMRSBSRklMRTsgLyogU2FtZSBzdHJ1Y3Qgd2l0aCBkaWZmZXJlbnQgaW52YXJpYW50cyAqLwogCi0jZGVmaW5lIHJzX2J5dGUocCkgKCgocCktPnB0ciA8IChwKS0+ZW5kKSA/ICh1bnNpZ25lZCBjaGFyKSoocCktPnB0cisrIDogRU9GKQotCi1zdGF0aWMgUHlfc3NpemVfdAotcl9zdHJpbmcoY2hhciAqcywgUHlfc3NpemVfdCBuLCBSRklMRSAqcCkKK3N0YXRpYyBjaGFyICoKK3Jfc3RyaW5nKFB5X3NzaXplX3QgbiwgUkZJTEUgKnApCiB7Ci0gICAgY2hhciAqcHRyOwotICAgIFB5X3NzaXplX3QgcmVhZCwgbGVmdDsKKyAgICBQeV9zc2l6ZV90IHJlYWQgPSAtMTsKKworICAgIGlmIChwLT5wdHIgIT0gTlVMTCkgeworICAgICAgICAvKiBGYXN0IHBhdGggZm9yIGxvYWRzKCkgKi8KKyAgICAgICAgY2hhciAqcmVzID0gcC0+cHRyOworICAgICAgICBQeV9zc2l6ZV90IGxlZnQgPSBwLT5lbmQgLSBwLT5wdHI7CisgICAgICAgIGlmIChsZWZ0IDwgbikgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJzaGFsIGRhdGEgdG9vIHNob3J0Iik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwLT5wdHIgKz0gbjsKKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgaWYgKHAtPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgIHAtPmJ1ZiA9IFB5TWVtX01BTExPQyhuKTsKKyAgICAgICAgaWYgKHAtPmJ1ZiA9PSBOVUxMKSB7CisgICAgICAgICAgICBQeUVycl9Ob01lbW9yeSgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgcC0+YnVmX3NpemUgPSBuOworICAgIH0KKyAgICBlbHNlIGlmIChwLT5idWZfc2l6ZSA8IG4pIHsKKyAgICAgICAgcC0+YnVmID0gUHlNZW1fUkVBTExPQyhwLT5idWYsIG4pOworICAgICAgICBpZiAocC0+YnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBwLT5idWZfc2l6ZSA9IG47CisgICAgfQogCiAgICAgaWYgKCFwLT5yZWFkYWJsZSkgewotICAgICAgICBpZiAocC0+ZnAgIT0gTlVMTCkKLSAgICAgICAgICAgIC8qIFRoZSByZXN1bHQgZml0cyBpbnRvIGludCBiZWNhdXNlIGl0IG11c3QgYmUgPD1uLiAqLwotICAgICAgICAgICAgcmVhZCA9IGZyZWFkKHMsIDEsIG4sIHAtPmZwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsZWZ0ID0gcC0+ZW5kIC0gcC0+cHRyOwotICAgICAgICAgICAgcmVhZCA9IChsZWZ0IDwgbikgPyBsZWZ0IDogbjsKLSAgICAgICAgICAgIG1lbWNweShzLCBwLT5wdHIsIHJlYWQpOwotICAgICAgICAgICAgcC0+cHRyICs9IHJlYWQ7Ci0gICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHAtPmZwICE9IE5VTEwpOworICAgICAgICByZWFkID0gZnJlYWQocC0+YnVmLCAxLCBuLCBwLT5mcCk7CiAgICAgfQogICAgIGVsc2UgewotICAgICAgICBfUHlfSURFTlRJRklFUihyZWFkKTsKKyAgICAgICAgX1B5X0lERU5USUZJRVIocmVhZGludG8pOworICAgICAgICBQeU9iamVjdCAqcmVzLCAqbXZpZXc7CisgICAgICAgIFB5X2J1ZmZlciBidWY7CiAKLSAgICAgICAgUHlPYmplY3QgKmRhdGEgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHAtPnJlYWRhYmxlLCAmUHlJZF9yZWFkLCAibiIsIG4pOwotICAgICAgICByZWFkID0gMDsKLSAgICAgICAgaWYgKGRhdGEgIT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKCFQeUJ5dGVzX0NoZWNrKGRhdGEpKSB7Ci0gICAgICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1R5cGVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImYucmVhZCgpIHJldHVybmVkIG5vdCBieXRlcyBidXQgJS4xMDBzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+b2JfdHlwZS0+dHBfbmFtZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICByZWFkID0gUHlCeXRlc19HRVRfU0laRShkYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAocmVhZCA+IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWQgPiBuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkKCkgcmV0dXJuZWQgdG9vIG11Y2ggZGF0YTogIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiV6ZCBieXRlcyByZXF1ZXN0ZWQsICV6ZCByZXR1cm5lZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLCByZWFkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB0ciA9IFB5Qnl0ZXNfQVNfU1RSSU5HKGRhdGEpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHMsIHB0ciwgcmVhZCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBQeV9ERUNSRUYoZGF0YSk7CisgICAgICAgIGlmIChQeUJ1ZmZlcl9GaWxsSW5mbygmYnVmLCBOVUxMLCBwLT5idWYsIG4sIDAsIFB5QlVGX0NPTlRJRykgPT0gLTEpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgbXZpZXcgPSBQeU1lbW9yeVZpZXdfRnJvbUJ1ZmZlcigmYnVmKTsKKyAgICAgICAgaWYgKG12aWV3ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKworICAgICAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKHAtPnJlYWRhYmxlLCAmUHlJZF9yZWFkaW50bywgIk4iLCBtdmlldyk7CisgICAgICAgIGlmIChyZXMgIT0gTlVMTCkgeworICAgICAgICAgICAgcmVhZCA9IFB5TnVtYmVyX0FzU3NpemVfdChyZXMsIFB5RXhjX1ZhbHVlRXJyb3IpOworICAgICAgICAgICAgUHlfREVDUkVGKHJlcyk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFQeUVycl9PY2N1cnJlZCgpICYmIChyZWFkIDwgbikpIHsKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLCAiRU9GIHJlYWQgd2hlcmUgbm90IGV4cGVjdGVkIik7CisgICAgaWYgKHJlYWQgIT0gbikgeworICAgICAgICBpZiAoIVB5RXJyX09jY3VycmVkKCkpIHsKKyAgICAgICAgICAgIGlmIChyZWFkID4gbikKKyAgICAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfVmFsdWVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWQoKSByZXR1cm5lZCB0b28gbXVjaCBkYXRhOiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlemQgYnl0ZXMgcmVxdWVzdGVkLCAlemQgcmV0dXJuZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLCByZWFkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBub3QgZXhwZWN0ZWQiKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIHJlYWQ7CisgICAgcmV0dXJuIHAtPmJ1ZjsKIH0KIAotCiBzdGF0aWMgaW50CiByX2J5dGUoUkZJTEUgKnApCiB7CiAgICAgaW50IGMgPSBFT0Y7Ci0gICAgdW5zaWduZWQgY2hhciBjaDsKLSAgICBQeV9zc2l6ZV90IG47CiAKLSAgICBpZiAoIXAtPnJlYWRhYmxlKQotICAgICAgICBjID0gcC0+ZnAgPyBnZXRjKHAtPmZwKSA6IHJzX2J5dGUocCk7CisgICAgaWYgKHAtPnB0ciAhPSBOVUxMKSB7CisgICAgICAgIGlmIChwLT5wdHIgPCBwLT5lbmQpCisgICAgICAgICAgICBjID0gKHVuc2lnbmVkIGNoYXIpICpwLT5wdHIrKzsKKyAgICAgICAgcmV0dXJuIGM7CisgICAgfQorICAgIGlmICghcC0+cmVhZGFibGUpIHsKKyAgICAgICAgYXNzZXJ0KHAtPmZwKTsKKyAgICAgICAgYyA9IGdldGMocC0+ZnApOworICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgbiA9IHJfc3RyaW5nKChjaGFyICopICZjaCwgMSwgcCk7Ci0gICAgICAgIGlmIChuID4gMCkKLSAgICAgICAgICAgIGMgPSBjaDsKKyAgICAgICAgY2hhciAqcHRyID0gcl9zdHJpbmcoMSwgcCk7CisgICAgICAgIGlmIChwdHIgIT0gTlVMTCkKKyAgICAgICAgICAgIGMgPSAqKHVuc2lnbmVkIGNoYXIgKikgcHRyOwogICAgIH0KICAgICByZXR1cm4gYzsKIH0KQEAgLTUzMyw2OSArNjc1LDM3IEBACiBzdGF0aWMgaW50CiByX3Nob3J0KFJGSUxFICpwKQogewotICAgIHJlZ2lzdGVyIHNob3J0IHg7Ci0gICAgdW5zaWduZWQgY2hhciBidWZmZXJbMl07CisgICAgc2hvcnQgeCA9IC0xOworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAotICAgIHJfc3RyaW5nKChjaGFyICopIGJ1ZmZlciwgMiwgcCk7Ci0gICAgeCA9IGJ1ZmZlclswXTsKLSAgICB4IHw9IGJ1ZmZlclsxXSA8PCA4OwotICAgIC8qIFNpZ24tZXh0ZW5zaW9uLCBpbiBjYXNlIHNob3J0IGdyZWF0ZXIgdGhhbiAxNiBiaXRzICovCi0gICAgeCB8PSAtKHggJiAweDgwMDApOworICAgIGJ1ZmZlciA9ICh1bnNpZ25lZCBjaGFyICopIHJfc3RyaW5nKDIsIHApOworICAgIGlmIChidWZmZXIgIT0gTlVMTCkgeworICAgICAgICB4ID0gYnVmZmVyWzBdOworICAgICAgICB4IHw9IGJ1ZmZlclsxXSA8PCA4OworICAgICAgICAvKiBTaWduLWV4dGVuc2lvbiwgaW4gY2FzZSBzaG9ydCBncmVhdGVyIHRoYW4gMTYgYml0cyAqLworICAgICAgICB4IHw9IC0oeCAmIDB4ODAwMCk7CisgICAgfQogICAgIHJldHVybiB4OwogfQogCiBzdGF0aWMgbG9uZwogcl9sb25nKFJGSUxFICpwKQogewotICAgIHJlZ2lzdGVyIGxvbmcgeDsKLSAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls0XTsKKyAgICBsb25nIHggPSAtMTsKKyAgICB1bnNpZ25lZCBjaGFyICpidWZmZXI7CiAKLSAgICByX3N0cmluZygoY2hhciAqKSBidWZmZXIsIDQsIHApOwotICAgIHggPSBidWZmZXJbMF07Ci0gICAgeCB8PSAobG9uZylidWZmZXJbMV0gPDwgODsKLSAgICB4IHw9IChsb25nKWJ1ZmZlclsyXSA8PCAxNjsKLSAgICB4IHw9IChsb25nKWJ1ZmZlclszXSA8PCAyNDsKKyAgICBidWZmZXIgPSAodW5zaWduZWQgY2hhciAqKSByX3N0cmluZyg0LCBwKTsKKyAgICBpZiAoYnVmZmVyICE9IE5VTEwpIHsKKyAgICAgICAgeCA9IGJ1ZmZlclswXTsKKyAgICAgICAgeCB8PSAobG9uZylidWZmZXJbMV0gPDwgODsKKyAgICAgICAgeCB8PSAobG9uZylidWZmZXJbMl0gPDwgMTY7CisgICAgICAgIHggfD0gKGxvbmcpYnVmZmVyWzNdIDw8IDI0OwogI2lmIFNJWkVPRl9MT05HID4gNAotICAgIC8qIFNpZ24gZXh0ZW5zaW9uIGZvciA2NC1iaXQgbWFjaGluZXMgKi8KLSAgICB4IHw9IC0oeCAmIDB4ODAwMDAwMDBMKTsKLSNlbmRpZgotICAgIHJldHVybiB4OwotfQotCi0vKiByX2xvbmc2NCBkZWFscyB3aXRoIHRoZSBUWVBFX0lOVDY0IGNvZGUuICBPbiBhIG1hY2hpbmUgd2l0aAotICAgc2l6ZW9mKGxvbmcpID4gNCwgaXQgcmV0dXJucyBhIFB5dGhvbiBpbnQgb2JqZWN0LCBlbHNlIGEgUHl0aG9uIGxvbmcKLSAgIG9iamVjdC4gIE5vdGUgdGhhdCB3X2xvbmc2NCB3cml0ZXMgb3V0IFRZUEVfSU5UIGlmIDMyIGJpdHMgaXMgZW5vdWdoLAotICAgc28gdGhlcmUncyBubyBpbmVmZmljaWVuY3kgaGVyZSBpbiByZXR1cm5pbmcgYSBQeUxvbmcgb24gMzItYml0IGJveGVzCi0gICBmb3IgZXZlcnl0aGluZyB3cml0dGVuIHZpYSBUWVBFX0lOVDY0IChpLmUuLCBpZiBhbiBpbnQgaXMgd3JpdHRlbiB2aWEKLSAgIFRZUEVfSU5UNjQsIGl0ICpuZWVkcyogbW9yZSB0aGFuIDMyIGJpdHMpLgotKi8KLXN0YXRpYyBQeU9iamVjdCAqCi1yX2xvbmc2NChSRklMRSAqcCkKLXsKLSAgICBQeU9iamVjdCAqcmVzdWx0ID0gTlVMTDsKLSAgICBsb25nIGxvNCA9IHJfbG9uZyhwKTsKLSAgICBsb25nIGhpNCA9IHJfbG9uZyhwKTsKLQotICAgIGlmICghUHlFcnJfT2NjdXJyZWQoKSkgewotI2lmIFNJWkVPRl9MT05HID4gNAotICAgICAgICBsb25nIHggPSAoaGk0IDw8IDMyKSB8IChsbzQgJiAweEZGRkZGRkZGTCk7Ci0gICAgICAgIHJlc3VsdCA9IFB5TG9uZ19Gcm9tTG9uZyh4KTsKLSNlbHNlCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmWzhdOwotICAgICAgICBpbnQgb25lID0gMTsKLSAgICAgICAgaW50IGlzX2xpdHRsZV9lbmRpYW4gPSAoaW50KSooY2hhciopJm9uZTsKLSAgICAgICAgaWYgKGlzX2xpdHRsZV9lbmRpYW4pIHsKLSAgICAgICAgICAgIG1lbWNweShidWYsICZsbzQsIDQpOwotICAgICAgICAgICAgbWVtY3B5KGJ1Zis0LCAmaGk0LCA0KTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1lbWNweShidWYsICZoaTQsIDQpOwotICAgICAgICAgICAgbWVtY3B5KGJ1Zis0LCAmbG80LCA0KTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQgPSBfUHlMb25nX0Zyb21CeXRlQXJyYXkoYnVmLCA4LCBpc19saXR0bGVfZW5kaWFuLCAxKTsKKyAgICAgICAgLyogU2lnbiBleHRlbnNpb24gZm9yIDY0LWJpdCBtYWNoaW5lcyAqLworICAgICAgICB4IHw9IC0oeCAmIDB4ODAwMDAwMDBMKTsKICNlbmRpZgogICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiB4OwogfQogCiBzdGF0aWMgUHlPYmplY3QgKgpAQCAtNjIyLDI1ICs3MzIsMzEgQEAKICAgICBvYiA9IF9QeUxvbmdfTmV3KHNpemUpOwogICAgIGlmIChvYiA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFB5X1NJWkUob2IpID0gbiA+IDAgPyBzaXplIDogLXNpemU7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZS0xOyBpKyspIHsKICAgICAgICAgZCA9IDA7CiAgICAgICAgIGZvciAoaj0wOyBqIDwgUHlMb25nX01BUlNIQUxfUkFUSU87IGorKykgewogICAgICAgICAgICAgbWQgPSByX3Nob3J0KHApOwotICAgICAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCi0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRihvYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAobWQgPCAwIHx8IG1kID4gUHlMb25nX01BUlNIQUxfQkFTRSkKICAgICAgICAgICAgICAgICBnb3RvIGJhZF9kaWdpdDsKICAgICAgICAgICAgIGQgKz0gKGRpZ2l0KW1kIDw8IGoqUHlMb25nX01BUlNIQUxfU0hJRlQ7CiAgICAgICAgIH0KICAgICAgICAgb2ItPm9iX2RpZ2l0W2ldID0gZDsKICAgICB9CisKICAgICBkID0gMDsKICAgICBmb3IgKGo9MDsgaiA8IHNob3J0c19pbl90b3BfZGlnaXQ7IGorKykgewogICAgICAgICBtZCA9IHJfc2hvcnQocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgICAgICBQeV9ERUNSRUYob2IpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KICAgICAgICAgaWYgKG1kIDwgMCB8fCBtZCA+IFB5TG9uZ19NQVJTSEFMX0JBU0UpCiAgICAgICAgICAgICBnb3RvIGJhZF9kaWdpdDsKICAgICAgICAgLyogdG9wbW9zdCBtYXJzaGFsIGRpZ2l0IHNob3VsZCBiZSBub256ZXJvICovCkBAIC02NjcsNiArNzgzLDU5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qIGFsbG9jYXRlIHRoZSByZWZsaXN0IGluZGV4IGZvciBhIG5ldyBvYmplY3QuIFJldHVybiAtMSBvbiBmYWlsdXJlICovCitzdGF0aWMgUHlfc3NpemVfdAorcl9yZWZfcmVzZXJ2ZShpbnQgZmxhZywgUkZJTEUgKnApCit7CisgICAgaWYgKGZsYWcpIHsgLyogY3VycmVudGx5IG9ubHkgRkxBR19SRUYgaXMgZGVmaW5lZCAqLworICAgICAgICBQeV9zc2l6ZV90IGlkeCA9IFB5TGlzdF9HRVRfU0laRShwLT5yZWZzKTsKKyAgICAgICAgaWYgKGlkeCA+PSAweDdmZmZmZmZlKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKGluZGV4IGxpc3QgdG9vIGxhcmdlKSIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKHAtPnJlZnMsIFB5X05vbmUpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgcmV0dXJuIGlkeDsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qIGluc2VydCB0aGUgbmV3IG9iamVjdCAnbycgdG8gdGhlIHJlZmxpc3QgYXQgcHJldmlvdXNseQorICogYWxsb2NhdGVkIGluZGV4ICdpZHgnLgorICogJ28nIGNhbiBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIG5vdGhpbmcgaXMgZG9uZS4KKyAqIGlmICdvJyB3YXMgbm9uLU5VTEwsIGFuZCB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsICdvJyBpcyByZXR1cm5lZC4KKyAqIGlmICdvJyB3YXMgbm9uLU5VTEwsIGFuZCB0aGUgZnVuY3Rpb24gZmFpbHMsICdvJyBpcyByZWxlYXNlZCBhbmQKKyAqIE5VTEwgcmV0dXJuZWQuIFRoaXMgc2ltcGxpZmllcyBlcnJvciBjaGVja2luZyBhdCB0aGUgY2FsbCBzaXRlIHNpbmNlCisgKiBhIHNpbmdsZSB0ZXN0IGZvciBOVUxMIGZvciB0aGUgZnVuY3Rpb24gcmVzdWx0IGlzIGVub3VnaC4KKyAqLworc3RhdGljIFB5T2JqZWN0ICoKK3JfcmVmX2luc2VydChQeU9iamVjdCAqbywgUHlfc3NpemVfdCBpZHgsIGludCBmbGFnLCBSRklMRSAqcCkKK3sKKyAgICBpZiAobyAhPSBOVUxMICYmIGZsYWcpIHsgLyogY3VycmVudGx5IG9ubHkgRkxBR19SRUYgaXMgZGVmaW5lZCAqLworICAgICAgICBQeU9iamVjdCAqdG1wID0gUHlMaXN0X0dFVF9JVEVNKHAtPnJlZnMsIGlkeCk7CisgICAgICAgIFB5X0lOQ1JFRihvKTsKKyAgICAgICAgUHlMaXN0X1NFVF9JVEVNKHAtPnJlZnMsIGlkeCwgbyk7CisgICAgICAgIFB5X0RFQ1JFRih0bXApOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KKworLyogY29tYmluYXRpb24gb2YgYm90aCBhYm92ZSwgdXNlZCB3aGVuIGFuIG9iamVjdCBjYW4gYmUKKyAqIGNyZWF0ZWQgd2hlbmV2ZXIgaXQgaXMgc2VlbiBpbiB0aGUgZmlsZSwgYXMgb3Bwb3NlZCB0bworICogYWZ0ZXIgaGF2aW5nIGxvYWRlZCBpdHMgc3ViLW9iamVjdHMuCisgKi8KK3N0YXRpYyBQeU9iamVjdCAqCityX3JlZihQeU9iamVjdCAqbywgaW50IGZsYWcsIFJGSUxFICpwKQoreworICAgIGFzc2VydChmbGFnICYgRkxBR19SRUYpOworICAgIGlmIChvID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeUxpc3RfQXBwZW5kKHAtPnJlZnMsIG8pIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYobyk7IC8qIHJlbGVhc2UgdGhlIG5ldyBvYmplY3QgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJldHVybiBvOworfQogCiBzdGF0aWMgUHlPYmplY3QgKgogcl9vYmplY3QoUkZJTEUgKnApCkBAIC02NzQsOSArODQzLDE3IEBACiAgICAgLyogTlVMTCBpcyBhIHZhbGlkIHJldHVybiB2YWx1ZSwgaXQgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbnMgdGhhdAogICAgICAgIGFuIGV4Y2VwdGlvbiBpcyBzZXQuICovCiAgICAgUHlPYmplY3QgKnYsICp2MjsKKyAgICBQeV9zc2l6ZV90IGlkeCA9IDA7CiAgICAgbG9uZyBpLCBuOwotICAgIGludCB0eXBlID0gcl9ieXRlKHApOwotICAgIFB5T2JqZWN0ICpyZXR2YWw7CisgICAgaW50IHR5cGUsIGNvZGUgPSByX2J5dGUocCk7CisgICAgaW50IGZsYWcsIGlzX2ludGVybmVkID0gMDsKKyAgICBQeU9iamVjdCAqcmV0dmFsID0gTlVMTDsKKworICAgIGlmIChjb2RlID09IEVPRikgeworICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAiRU9GIHJlYWQgd2hlcmUgb2JqZWN0IGV4cGVjdGVkIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KIAogICAgIHAtPmRlcHRoKys7CiAKQEAgLTY4NiwxNiArODYzLDE3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorICAgIGZsYWcgPSBjb2RlICYgRkxBR19SRUY7CisgICAgdHlwZSA9IGNvZGUgJiB+RkxBR19SRUY7CisKKyNkZWZpbmUgUl9SRUYoTykgZG97XAorICAgIGlmIChmbGFnKSBcCisgICAgICAgIE8gPSByX3JlZihPLCBmbGFnLCBwKTtcCit9IHdoaWxlICgwKQorCiAgICAgc3dpdGNoICh0eXBlKSB7CiAKLSAgICBjYXNlIEVPRjoKLSAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX0VPRkVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOwotICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICBicmVhazsKLQogICAgIGNhc2UgVFlQRV9OVUxMOgotICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFlQRV9OT05FOgpAQCAtNzI2LDY3ICs5MDQsNjYgQEAKICAgICBjYXNlIFRZUEVfSU5UOgogICAgICAgICBuID0gcl9sb25nKHApOwogICAgICAgICByZXR2YWwgPSBQeUVycl9PY2N1cnJlZCgpID8gTlVMTCA6IFB5TG9uZ19Gcm9tTG9uZyhuKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFRZUEVfSU5UNjQ6Ci0gICAgICAgIHJldHZhbCA9IHJfbG9uZzY0KHApOworICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgVFlQRV9MT05HOgogICAgICAgICByZXR2YWwgPSByX1B5TG9uZyhwKTsKKyAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFRZUEVfRkxPQVQ6CiAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl07CisgICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdLCAqcHRyOwogICAgICAgICAgICAgZG91YmxlIGR4OwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIG4gPSByX2J5dGUocCk7CiAgICAgICAgICAgICBpZiAobiA9PSBFT0YpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyX3N0cmluZyhidWYsIG4sIHApICE9IG4pCisgICAgICAgICAgICBwdHIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHB0ciwgbik7CiAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwogICAgICAgICAgICAgZHggPSBQeU9TX3N0cmluZ190b19kb3VibGUoYnVmLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChkeCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICByZXR2YWwgPSBQeUZsb2F0X0Zyb21Eb3VibGUoZHgpOworICAgICAgICAgICAgUl9SRUYocmV0dmFsKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICBjYXNlIFRZUEVfQklOQVJZX0ZMT0FUOgogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKICAgICAgICAgICAgIGRvdWJsZSB4OwotICAgICAgICAgICAgaWYgKHJfc3RyaW5nKChjaGFyKilidWYsIDgsIHApICE9IDgpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgcl9zdHJpbmcoOCwgcCk7CisgICAgICAgICAgICBpZiAoYnVmID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICB4ID0gX1B5RmxvYXRfVW5wYWNrOChidWYsIDEpOwotICAgICAgICAgICAgaWYgKHggPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGlmICh4ID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHZhbCA9IFB5RmxvYXRfRnJvbURvdWJsZSh4KTsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgY2FzZSBUWVBFX0NPTVBMRVg6CiAgICAgICAgIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl07CisgICAgICAgICAgICBjaGFyIGJ1ZlsyNTZdLCAqcHRyOwogICAgICAgICAgICAgUHlfY29tcGxleCBjOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIG4gPSByX2J5dGUocCk7CiAgICAgICAgICAgICBpZiAobiA9PSBFT0YpIHsKICAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICJFT0YgcmVhZCB3aGVyZSBvYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyX3N0cmluZyhidWYsIG4sIHApICE9IG4pCisgICAgICAgICAgICBwdHIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG1lbWNweShidWYsIHB0ciwgbik7CiAgICAgICAgICAgICBidWZbbl0gPSAnXDAnOwogICAgICAgICAgICAgYy5yZWFsID0gUHlPU19zdHJpbmdfdG9fZG91YmxlKGJ1ZiwgTlVMTCwgTlVMTCk7CiAgICAgICAgICAgICBpZiAoYy5yZWFsID09IC0xLjAgJiYgUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTc5NywxMTIgKzk3NCwxNTEgQEAKICAgICAgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHJfc3RyaW5nKGJ1ZiwgbiwgcCkgIT0gbikKKyAgICAgICAgICAgIHB0ciA9IHJfc3RyaW5nKG4sIHApOworICAgICAgICAgICAgaWYgKHB0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbWVtY3B5KGJ1ZiwgcHRyLCBuKTsKICAgICAgICAgICAgIGJ1ZltuXSA9ICdcMCc7CiAgICAgICAgICAgICBjLmltYWcgPSBQeU9TX3N0cmluZ190b19kb3VibGUoYnVmLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIGlmIChjLmltYWcgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgcmV0dmFsID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChjKTsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgY2FzZSBUWVBFX0JJTkFSWV9DT01QTEVYOgogICAgICAgICB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGJ1Zls4XTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsKICAgICAgICAgICAgIFB5X2NvbXBsZXggYzsKLSAgICAgICAgICAgIGlmIChyX3N0cmluZygoY2hhciopYnVmLCA4LCBwKSAhPSA4KSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGJ1ZiA9ICh1bnNpZ25lZCBjaGFyICopIHJfc3RyaW5nKDgsIHApOworICAgICAgICAgICAgaWYgKGJ1ZiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgYy5yZWFsID0gX1B5RmxvYXRfVW5wYWNrOChidWYsIDEpOwotICAgICAgICAgICAgaWYgKGMucmVhbCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICAgICAgaWYgKGMucmVhbCA9PSAtMS4wICYmIFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocl9zdHJpbmcoKGNoYXIqKWJ1ZiwgOCwgcCkgIT0gOCkgewotICAgICAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgICAgICBidWYgPSAodW5zaWduZWQgY2hhciAqKSByX3N0cmluZyg4LCBwKTsKKyAgICAgICAgICAgIGlmIChidWYgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGMuaW1hZyA9IF9QeUZsb2F0X1VucGFjazgoYnVmLCAxKTsKLSAgICAgICAgICAgIGlmIChjLmltYWcgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgICAgIGlmIChjLmltYWcgPT0gLTEuMCAmJiBQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dmFsID0gUHlDb21wbGV4X0Zyb21DQ29tcGxleChjKTsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgY2FzZSBUWVBFX1NUUklORzoKLSAgICAgICAgbiA9IHJfbG9uZyhwKTsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgKnB0cjsKKyAgICAgICAgICAgIG4gPSByX2xvbmcocCk7CisgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgeworICAgICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAoc3RyaW5nIHNpemUgb3V0IG9mIHJhbmdlKSIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdiA9IFB5Qnl0ZXNfRnJvbVN0cmluZ0FuZFNpemUoKGNoYXIgKilOVUxMLCBuKTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBwdHIgPSByX3N0cmluZyhuLCBwKTsKKyAgICAgICAgICAgIGlmIChwdHIgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5X0RFQ1JFRih2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweShQeUJ5dGVzX0FTX1NUUklORyh2KSwgcHRyLCBuKTsKKyAgICAgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgICAgICBSX1JFRihyZXR2YWwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7Ci0gICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHN0cmluZyBzaXplIG91dCBvZiByYW5nZSkiKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICB2ID0gUHlCeXRlc19Gcm9tU3RyaW5nQW5kU2l6ZSgoY2hhciAqKU5VTEwsIG4pOwotICAgICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJfc3RyaW5nKFB5Qnl0ZXNfQVNfU1RSSU5HKHYpLCBuLCBwKSAhPSBuKSB7Ci0gICAgICAgICAgICBQeV9ERUNSRUYodik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dmFsID0gdjsKLSAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFRZUEVfQVNDSUlfSU5URVJORUQ6CisgICAgICAgIGlzX2ludGVybmVkID0gMTsKKyAgICBjYXNlIFRZUEVfQVNDSUk6CisgICAgICAgIG4gPSByX2xvbmcocCk7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmljb2RlIHNpemUgb3V0IG9mIHJhbmdlKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZ290byBfcmVhZF9hc2NpaTsKKworICAgIGNhc2UgVFlQRV9TSE9SVF9BU0NJSV9JTlRFUk5FRDoKKyAgICAgICAgaXNfaW50ZXJuZWQgPSAxOworICAgIGNhc2UgVFlQRV9TSE9SVF9BU0NJSToKKyAgICAgICAgbiA9IHJfYnl0ZShwKTsKKyAgICAgICAgaWYgKG4gPT0gRU9GKSB7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfRU9GRXJyb3IsCisgICAgICAgICAgICAgICAgIkVPRiByZWFkIHdoZXJlIG9iamVjdCBleHBlY3RlZCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICBfcmVhZF9hc2NpaToKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciAqcHRyOworICAgICAgICAgICAgcHRyID0gcl9zdHJpbmcobiwgcCk7CisgICAgICAgICAgICBpZiAocHRyID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB2ID0gUHlVbmljb2RlX0Zyb21LaW5kQW5kRGF0YShQeVVuaWNvZGVfMUJZVEVfS0lORCwgcHRyLCBuKTsKKyAgICAgICAgICAgIGlmICh2ID09IE5VTEwpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoaXNfaW50ZXJuZWQpCisgICAgICAgICAgICAgICAgUHlVbmljb2RlX0ludGVybkluUGxhY2UoJnYpOworICAgICAgICAgICAgcmV0dmFsID0gdjsKKyAgICAgICAgICAgIFJfUkVGKHJldHZhbCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgY2FzZSBUWVBFX0lOVEVSTkVEOgorICAgICAgICBpc19pbnRlcm5lZCA9IDE7CiAgICAgY2FzZSBUWVBFX1VOSUNPREU6CiAgICAgICAgIHsKICAgICAgICAgY2hhciAqYnVmZmVyOwogCiAgICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhICh1bmljb2RlIHNpemUgb3V0IG9mIHJhbmdlKSIpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGJ1ZmZlciA9IFB5TWVtX05FVyhjaGFyLCBuKTsKLSAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBQeUVycl9Ob01lbW9yeSgpOwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChuICE9IDApIHsKKyAgICAgICAgICAgIGJ1ZmZlciA9IHJfc3RyaW5nKG4sIHApOworICAgICAgICAgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9EZWNvZGVVVEY4KGJ1ZmZlciwgbiwgInN1cnJvZ2F0ZXBhc3MiKTsKICAgICAgICAgfQotICAgICAgICBpZiAocl9zdHJpbmcoYnVmZmVyLCBuLCBwKSAhPSBuKSB7Ci0gICAgICAgICAgICBQeU1lbV9ERUwoYnVmZmVyKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICB2ID0gUHlVbmljb2RlX05ldygwLCAwKTsKICAgICAgICAgfQotICAgICAgICB2ID0gUHlVbmljb2RlX0RlY29kZVVURjgoYnVmZmVyLCBuLCAic3Vycm9nYXRlcGFzcyIpOwotICAgICAgICBQeU1lbV9ERUwoYnVmZmVyKTsKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoaXNfaW50ZXJuZWQpCisgICAgICAgICAgICBQeVVuaWNvZGVfSW50ZXJuSW5QbGFjZSgmdik7CiAgICAgICAgIHJldHZhbCA9IHY7CisgICAgICAgIFJfUkVGKHJldHZhbCk7CiAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKKyAgICBjYXNlIFRZUEVfU01BTExfVFVQTEU6CisgICAgICAgIG4gPSAodW5zaWduZWQgY2hhcikgcl9ieXRlKHApOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBnb3RvIF9yZWFkX3R1cGxlOwogICAgIGNhc2UgVFlQRV9UVVBMRToKICAgICAgICAgbiA9IHJfbG9uZyhwKTsKLSAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CisgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKG4gPCAwIHx8IG4gPiBTSVpFMzJfTUFYKSB7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHR1cGxlIHNpemUgb3V0IG9mIHJhbmdlKSIpOwotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgX3JlYWRfdHVwbGU6CiAgICAgICAgIHYgPSBQeVR1cGxlX05ldyhuKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgUl9SRUYodik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIHYyID0gcl9vYmplY3QocCk7CiAgICAgICAgICAgICBpZiAoIHYyID09IE5VTEwgKSB7CkBAIC05MjAsMjAgKzExMzYsMTYgQEAKIAogICAgIGNhc2UgVFlQRV9MSVNUOgogICAgICAgICBuID0gcl9sb25nKHApOwotICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBpZiAobiA8IDAgfHwgbiA+IFNJWkUzMl9NQVgpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19WYWx1ZUVycm9yLCAiYmFkIG1hcnNoYWwgZGF0YSAobGlzdCBzaXplIG91dCBvZiByYW5nZSkiKTsKLSAgICAgICAgICAgIHJldHZhbCA9IE5VTEw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICB2ID0gUHlMaXN0X05ldyhuKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgUl9SRUYodik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgICAgICB2MiA9IHJfb2JqZWN0KHApOwogICAgICAgICAgICAgaWYgKCB2MiA9PSBOVUxMICkgewpAQCAtOTUxLDIwICsxMTYzLDI2IEBACiAKICAgICBjYXNlIFRZUEVfRElDVDoKICAgICAgICAgdiA9IFB5RGljdF9OZXcoKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKKyAgICAgICAgUl9SRUYodik7CisgICAgICAgIGlmICh2ID09IE5VTEwpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBmb3IgKDs7KSB7CiAgICAgICAgICAgICBQeU9iamVjdCAqa2V5LCAqdmFsOwogICAgICAgICAgICAga2V5ID0gcl9vYmplY3QocCk7CiAgICAgICAgICAgICBpZiAoa2V5ID09IE5VTEwpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB2YWwgPSByX29iamVjdChwKTsKLSAgICAgICAgICAgIGlmICh2YWwgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeURpY3RfU2V0SXRlbSh2LCBrZXksIHZhbCk7CisgICAgICAgICAgICBpZiAodmFsID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChQeURpY3RfU2V0SXRlbSh2LCBrZXksIHZhbCkgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKGtleSk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHZhbCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYoa2V5KTsKLSAgICAgICAgICAgIFB5X1hERUNSRUYodmFsKTsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih2YWwpOwogICAgICAgICB9CiAgICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CiAgICAgICAgICAgICBQeV9ERUNSRUYodik7CkBAIC05NzYsMjAgKzExOTQsMjYgQEAKICAgICBjYXNlIFRZUEVfU0VUOgogICAgIGNhc2UgVFlQRV9GUk9aRU5TRVQ6CiAgICAgICAgIG4gPSByX2xvbmcocCk7Ci0gICAgICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOworICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGlmIChuIDwgMCB8fCBuID4gU0laRTMyX01BWCkgewogICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChzZXQgc2l6ZSBvdXQgb2YgcmFuZ2UpIik7Ci0gICAgICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgdiA9ICh0eXBlID09IFRZUEVfU0VUKSA/IFB5U2V0X05ldyhOVUxMKSA6IFB5RnJvemVuU2V0X05ldyhOVUxMKTsKLSAgICAgICAgaWYgKHYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dmFsID0gTlVMTDsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAodHlwZSA9PSBUWVBFX1NFVCkgeworICAgICAgICAgICAgUl9SRUYodik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBtdXN0IHVzZSBkZWxheWVkIHJlZ2lzdHJhdGlvbiBvZiBmcm96ZW5zZXRzIGJlY2F1c2UgdGhleSBtdXN0CisgICAgICAgICAgICAgKiBiZSBpbml0IHdpdGggYSByZWZjb3VudCBvZiAxCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlkeCA9IHJfcmVmX3Jlc2VydmUoZmxhZywgcCk7CisgICAgICAgICAgICBpZiAoaWR4IDwgMCkKKyAgICAgICAgICAgICAgICBQeV9DTEVBUih2KTsgLyogc2lnbmFsIGVycm9yICovCiAgICAgICAgIH0KKyAgICAgICAgaWYgKHYgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICAgICAgIHYyID0gcl9vYmplY3QocCk7CiAgICAgICAgICAgICBpZiAoIHYyID09IE5VTEwgKSB7CkBAIC0xMDA4LDYgKzEyMzIsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgUHlfREVDUkVGKHYyKTsKICAgICAgICAgfQorICAgICAgICBpZiAodHlwZSAhPSBUWVBFX1NFVCkKKyAgICAgICAgICAgIHYgPSByX3JlZl9pbnNlcnQodiwgaWR4LCBmbGFnLCBwKTsKICAgICAgICAgcmV0dmFsID0gdjsKICAgICAgICAgYnJlYWs7CiAKQEAgLTEwMjksNiArMTI1NSwxMCBAQAogICAgICAgICAgICAgaW50IGZpcnN0bGluZW5vOwogICAgICAgICAgICAgUHlPYmplY3QgKmxub3RhYiA9IE5VTEw7CiAKKyAgICAgICAgICAgIGlkeCA9IHJfcmVmX3Jlc2VydmUoZmxhZywgcCk7CisgICAgICAgICAgICBpZiAoaWR4IDwgMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAgdiA9IE5VTEw7CiAKICAgICAgICAgICAgIC8qIFhYWCBpZ25vcmUgbG9uZy0+aW50IG92ZXJmbG93cyBmb3Igbm93ICovCkBAIC0xMDg0LDYgKzEzMTQsOCBAQAogICAgICAgICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGNvZGVfZXJyb3I7CiAgICAgICAgICAgICBmaXJzdGxpbmVubyA9IChpbnQpcl9sb25nKHApOworICAgICAgICAgICAgaWYgKGZpcnN0bGluZW5vID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBsbm90YWIgPSByX29iamVjdChwKTsKICAgICAgICAgICAgIGlmIChsbm90YWIgPT0gTlVMTCkKICAgICAgICAgICAgICAgICBnb3RvIGNvZGVfZXJyb3I7CkBAIC0xMDk0LDYgKzEzMjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUsIGNvbnN0cywgbmFtZXMsIHZhcm5hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWV2YXJzLCBjZWxsdmFycywgZmlsZW5hbWUsIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RsaW5lbm8sIGxub3RhYik7CisgICAgICAgICAgICB2ID0gcl9yZWZfaW5zZXJ0KHYsIGlkeCwgZmxhZywgcCk7CiAKICAgICAgICAgICBjb2RlX2Vycm9yOgogICAgICAgICAgICAgUHlfWERFQ1JFRihjb2RlKTsKQEAgLTExMDksMTEgKzEzNDIsMjcgQEAKICAgICAgICAgcmV0dmFsID0gdjsKICAgICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIFRZUEVfUkVGOgorICAgICAgICBuID0gcl9sb25nKHApOworICAgICAgICBpZiAobiA8IDAgfHwgbiA+PSBQeUxpc3RfR0VUX1NJWkUocC0+cmVmcykpIHsKKyAgICAgICAgICAgIGlmIChuID09IC0xICYmIFB5RXJyX09jY3VycmVkKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKGludmFsaWQgcmVmZXJlbmNlKSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgdiA9IFB5TGlzdF9HRVRfSVRFTShwLT5yZWZzLCBuKTsKKyAgICAgICAgaWYgKHYgPT0gUHlfTm9uZSkgeworICAgICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJiYWQgbWFyc2hhbCBkYXRhIChpbnZhbGlkIHJlZmVyZW5jZSkiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIFB5X0lOQ1JFRih2KTsKKyAgICAgICAgcmV0dmFsID0gdjsKKyAgICAgICAgYnJlYWs7CisKICAgICBkZWZhdWx0OgogICAgICAgICAvKiBCb2d1cyBkYXRhIGdvdCB3cml0dGVuLCB3aGljaCBpc24ndCBpZGVhbC4KICAgICAgICAgICAgVGhpcyB3aWxsIGxldCB5b3Uga2VlcCB3b3JraW5nIGFuZCByZWNvdmVyLiAqLwogICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfVmFsdWVFcnJvciwgImJhZCBtYXJzaGFsIGRhdGEgKHVua25vd24gdHlwZSBjb2RlKSIpOwotICAgICAgICByZXR2YWwgPSBOVUxMOwogICAgICAgICBicmVhazsKIAogICAgIH0KQEAgLTExMzksMjMgKzEzODgsMzMgQEAKIFB5TWFyc2hhbF9SZWFkU2hvcnRGcm9tRmlsZShGSUxFICpmcCkKIHsKICAgICBSRklMRSByZjsKKyAgICBpbnQgcmVzOwogICAgIGFzc2VydChmcCk7CiAgICAgcmYucmVhZGFibGUgPSBOVUxMOwogICAgIHJmLmZwID0gZnA7CiAgICAgcmYuY3VycmVudF9maWxlbmFtZSA9IE5VTEw7CiAgICAgcmYuZW5kID0gcmYucHRyID0gTlVMTDsKLSAgICByZXR1cm4gcl9zaG9ydCgmcmYpOworICAgIHJmLmJ1ZiA9IE5VTEw7CisgICAgcmVzID0gcl9zaG9ydCgmcmYpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOworICAgIHJldHVybiByZXM7CiB9CiAKIGxvbmcKIFB5TWFyc2hhbF9SZWFkTG9uZ0Zyb21GaWxlKEZJTEUgKmZwKQogewogICAgIFJGSUxFIHJmOworICAgIGxvbmcgcmVzOwogICAgIHJmLmZwID0gZnA7CiAgICAgcmYucmVhZGFibGUgPSBOVUxMOwogICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwogICAgIHJmLnB0ciA9IHJmLmVuZCA9IE5VTEw7Ci0gICAgcmV0dXJuIHJfbG9uZygmcmYpOworICAgIHJmLmJ1ZiA9IE5VTEw7CisgICAgcmVzID0gcl9sb25nKCZyZik7CisgICAgaWYgKHJmLmJ1ZiAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CisgICAgcmV0dXJuIHJlczsKIH0KIAogI2lmZGVmIEhBVkVfRlNUQVQKQEAgLTEyMTQsMjIgKzE0NzMsMzYgQEAKICAgICByZi5jdXJyZW50X2ZpbGVuYW1lID0gTlVMTDsKICAgICByZi5kZXB0aCA9IDA7CiAgICAgcmYucHRyID0gcmYuZW5kID0gTlVMTDsKKyAgICByZi5idWYgPSBOVUxMOworICAgIHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChyZi5yZWZzID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJlc3VsdCA9IHJfb2JqZWN0KCZyZik7CisgICAgUHlfREVDUkVGKHJmLnJlZnMpOworICAgIGlmIChyZi5idWYgIT0gTlVMTCkKKyAgICAgICAgUHlNZW1fRlJFRShyZi5idWYpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIFB5T2JqZWN0ICoKLVB5TWFyc2hhbF9SZWFkT2JqZWN0RnJvbVN0cmluZyhjaGFyICpzdHIsIFB5X3NzaXplX3QgbGVuKQorUHlNYXJzaGFsX1JlYWRPYmplY3RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgUHlfc3NpemVfdCBsZW4pCiB7CiAgICAgUkZJTEUgcmY7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKICAgICByZi5mcCA9IE5VTEw7CiAgICAgcmYucmVhZGFibGUgPSBOVUxMOwogICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwotICAgIHJmLnB0ciA9IHN0cjsKLSAgICByZi5lbmQgPSBzdHIgKyBsZW47CisgICAgcmYucHRyID0gKGNoYXIgKilzdHI7CisgICAgcmYuZW5kID0gKGNoYXIgKilzdHIgKyBsZW47CisgICAgcmYuYnVmID0gTlVMTDsKICAgICByZi5kZXB0aCA9IDA7CisgICAgcmYucmVmcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgaWYgKHJmLnJlZnMgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgcmVzdWx0ID0gcl9vYmplY3QoJnJmKTsKKyAgICBQeV9ERUNSRUYocmYucmVmcyk7CisgICAgaWYgKHJmLmJ1ZiAhPSBOVUxMKQorICAgICAgICBQeU1lbV9GUkVFKHJmLmJ1Zik7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTI0OCw3ICsxNTIxLDE1IEBACiAgICAgd2YuZXJyb3IgPSBXRkVSUl9PSzsKICAgICB3Zi5kZXB0aCA9IDA7CiAgICAgd2YudmVyc2lvbiA9IHZlcnNpb247CisgICAgaWYgKHZlcnNpb24gPj0gMykgeworICAgICAgICBpZiAoKHdmLnJlZnMgPSBQeURpY3RfTmV3KCkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIFB5X0RFQ1JFRih3Zi5zdHIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgd2YucmVmcyA9IE5VTEw7CiAgICAgd19vYmplY3QoeCwgJndmKTsKKyAgICBQeV9YREVDUkVGKHdmLnJlZnMpOwogICAgIGlmICh3Zi5zdHIgIT0gTlVMTCkgewogICAgICAgICBjaGFyICpiYXNlID0gUHlCeXRlc19BU19TVFJJTkcoKFB5Qnl0ZXNPYmplY3QgKil3Zi5zdHIpOwogICAgICAgICBpZiAod2YucHRyIC0gYmFzZSA+IFBZX1NTSVpFX1RfTUFYKSB7CkBAIC0xMzIwLDYgKzE2MDEsOCBAQAogICAgICAqIE1ha2UgYSBjYWxsIHRvIHRoZSByZWFkIG1ldGhvZCwgYnV0IHJlYWQgemVybyBieXRlcy4KICAgICAgKiBUaGlzIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBvYmplY3QgcGFzc2VkIGluIGF0IGxlYXN0CiAgICAgICogaGFzIGEgcmVhZCBtZXRob2Qgd2hpY2ggcmV0dXJucyBieXRlcy4KKyAgICAgKiBUaGlzIGNhbiBiZSByZW1vdmVkIGlmIHdlIGd1YXJhbnRlZSBnb29kIGVycm9yIGhhbmRsaW5nCisgICAgICogZm9yIHJfc3RyaW5nKCkKICAgICAgKi8KICAgICBkYXRhID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmLCAmUHlJZF9yZWFkLCAiaSIsIDApOwogICAgIGlmIChkYXRhID09IE5VTEwpCkBAIC0xMzM1LDcgKzE2MTgsMTUgQEAKICAgICAgICAgcmYuZnAgPSBOVUxMOwogICAgICAgICByZi5yZWFkYWJsZSA9IGY7CiAgICAgICAgIHJmLmN1cnJlbnRfZmlsZW5hbWUgPSBOVUxMOwotICAgICAgICByZXN1bHQgPSByZWFkX29iamVjdCgmcmYpOworICAgICAgICByZi5wdHIgPSByZi5lbmQgPSBOVUxMOworICAgICAgICByZi5idWYgPSBOVUxMOworICAgICAgICBpZiAoKHJmLnJlZnMgPSBQeUxpc3RfTmV3KDApKSAhPSBOVUxMKSB7CisgICAgICAgICAgICByZXN1bHQgPSByZWFkX29iamVjdCgmcmYpOworICAgICAgICAgICAgUHlfREVDUkVGKHJmLnJlZnMpOworICAgICAgICAgICAgaWYgKHJmLmJ1ZiAhPSBOVUxMKQorICAgICAgICAgICAgICAgIFB5TWVtX0ZSRUUocmYuYnVmKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBOVUxMOwogICAgIH0KICAgICBQeV9ERUNSRUYoZGF0YSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEzOTIsOCArMTY4MywxMSBAQAogICAgIHJmLnB0ciA9IHM7CiAgICAgcmYuZW5kID0gcyArIG47CiAgICAgcmYuZGVwdGggPSAwOworICAgIGlmICgocmYucmVmcyA9IFB5TGlzdF9OZXcoMCkpID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJlc3VsdCA9IHJlYWRfb2JqZWN0KCZyZik7CiAgICAgUHlCdWZmZXJfUmVsZWFzZSgmcCk7CisgICAgUHlfREVDUkVGKHJmLnJlZnMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTE0MzMsNiArMTcyNyw3IEBACiB2ZXJzaW9uIC0tIGluZGljYXRlcyB0aGUgZm9ybWF0IHRoYXQgdGhlIG1vZHVsZSB1c2VzLiBWZXJzaW9uIDAgaXMgdGhlXG5cCiAgICAgaGlzdG9yaWNhbCBmb3JtYXQsIHZlcnNpb24gMSBzaGFyZXMgaW50ZXJuZWQgc3RyaW5ncyBhbmQgdmVyc2lvbiAyXG5cCiAgICAgdXNlcyBhIGJpbmFyeSBmb3JtYXQgZm9yIGZsb2F0aW5nIHBvaW50IG51bWJlcnMuXG5cCisgICAgVmVyc2lvbiAzIHNoYXJlcyBjb21tb24gb2JqZWN0IHJlZmVyZW5jZXMgKE5ldyBpbiB2ZXJzaW9uIDMuNCkuXG5cCiBcblwKIEZ1bmN0aW9uczpcblwKIFxuXApkaWZmIC0tZ2l0IGEvUHl0aG9uL21vZHN1cHBvcnQuYyBiL1B5dGhvbi9tb2RzdXBwb3J0LmMKaW5kZXggNDI4OTE0Zi4uNmM5MzhkZCAxMDA2NDQKLS0tIGEvUHl0aG9uL21vZHN1cHBvcnQuYworKysgYi9QeXRob24vbW9kc3VwcG9ydC5jCkBAIC0xNjEsNyArMTYxLDE3IEBACiAgICAgLyogTm90ZSB0aGF0IHdlIGNhbid0IGJhaWwgaW1tZWRpYXRlbHkgb24gZXJyb3IgYXMgdGhpcyB3aWxsIGxlYWsKICAgICAgICByZWZjb3VudHMgb24gYW55ICdOJyBhcmd1bWVudHMuICovCiAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotICAgICAgICBQeU9iamVjdCAqdyA9IGRvX21rdmFsdWUocF9mb3JtYXQsIHBfdmEsIGZsYWdzKTsKKyAgICAgICAgUHlPYmplY3QgKnc7CisKKyAgICAgICAgaWYgKGl0ZW1mYWlsZWQpIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2YWx1ZSwgKnRiOworICAgICAgICAgICAgUHlFcnJfRmV0Y2goJmV4Y2VwdGlvbiwgJnZhbHVlLCAmdGIpOworICAgICAgICAgICAgdyA9IGRvX21rdmFsdWUocF9mb3JtYXQsIHBfdmEsIGZsYWdzKTsKKyAgICAgICAgICAgIFB5RXJyX1Jlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgdyA9IGRvX21rdmFsdWUocF9mb3JtYXQsIHBfdmEsIGZsYWdzKTsKKyAgICAgICAgfQogICAgICAgICBpZiAodyA9PSBOVUxMKSB7CiAgICAgICAgICAgICBpdGVtZmFpbGVkID0gMTsKICAgICAgICAgICAgIFB5X0lOQ1JFRihQeV9Ob25lKTsKZGlmZiAtLWdpdCBhL1B5dGhvbi9teXN0cnRvdWwuYyBiL1B5dGhvbi9teXN0cnRvdWwuYwppbmRleCA4YTU0Y2JmLi45ODQyOWQ0IDEwMDY0NAotLS0gYS9QeXRob24vbXlzdHJ0b3VsLmMKKysrIGIvUHl0aG9uL215c3RydG91bC5jCkBAIC05MiwxMSArOTIsMTEgQEAKICoqICAgICAgICAgICAgICBleGNlcHRpb25zIC0gd2UgZG9uJ3QgY2hlY2sgZm9yIHRoZW0uCiAqLwogdW5zaWduZWQgbG9uZwotUHlPU19zdHJ0b3VsKHJlZ2lzdGVyIGNoYXIgKnN0ciwgY2hhciAqKnB0ciwgaW50IGJhc2UpCitQeU9TX3N0cnRvdWwoY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKIHsKLSAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlc3VsdCA9IDA7IC8qIHJldHVybiB2YWx1ZSBvZiB0aGUgZnVuY3Rpb24gKi8KLSAgICByZWdpc3RlciBpbnQgYzsgICAgICAgICAgICAgLyogY3VycmVudCBpbnB1dCBjaGFyYWN0ZXIgKi8KLSAgICByZWdpc3RlciBpbnQgb3ZsaW1pdDsgICAgICAgLyogcmVxdWlyZWQgZGlnaXRzIHRvIG92ZXJmbG93ICovCisgICAgdW5zaWduZWQgbG9uZyByZXN1bHQgPSAwOyAvKiByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uICovCisgICAgaW50IGM7ICAgICAgICAgICAgIC8qIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyICovCisgICAgaW50IG92bGltaXQ7ICAgICAgIC8qIHJlcXVpcmVkIGRpZ2l0cyB0byBvdmVyZmxvdyAqLwogCiAgICAgLyogc2tpcCBsZWFkaW5nIHdoaXRlIHNwYWNlICovCiAgICAgd2hpbGUgKCpzdHIgJiYgUHlfSVNTUEFDRShQeV9DSEFSTUFTSygqc3RyKSkpCkBAIC0xMTEsNyArMTExLDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAweCAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMTYpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTEyMCw3ICsxMjAsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBvICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSA4KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xMjksNyArMTI5LDcgQEAKICAgICAgICAgICAgICAgICAvKiB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBkaWdpdCBhZnRlciAwYiAqLwogICAgICAgICAgICAgICAgIGlmIChfUHlMb25nX0RpZ2l0VmFsdWVbUHlfQ0hBUk1BU0soc3RyWzFdKV0gPj0gMikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTQxLDcgKzE0MSw3IEBACiAgICAgICAgICAgICAgICAgd2hpbGUgKFB5X0lTU1BBQ0UoUHlfQ0hBUk1BU0soKnN0cikpKQogICAgICAgICAgICAgICAgICAgICArK3N0cjsKICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDB4ICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAxNikgewogICAgICAgICAgICAgICAgICAgICBpZiAocHRyKQotICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrc3RyOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAgICAgICAgICAgICAgICAgLyogdGhlcmUgbXVzdCBiZSBhdCBsZWFzdCBvbmUgZGlnaXQgYWZ0ZXIgMG8gKi8KICAgICAgICAgICAgICAgICBpZiAoX1B5TG9uZ19EaWdpdFZhbHVlW1B5X0NIQVJNQVNLKHN0clsxXSldID49IDgpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICArK3N0cjsKQEAgLTE4NSw3ICsxODUsNyBAQAogICAgICAgICAgICAgICAgIC8qIHRoZXJlIG11c3QgYmUgYXQgbGVhc3Qgb25lIGRpZ2l0IGFmdGVyIDBiICovCiAgICAgICAgICAgICAgICAgaWYgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSyhzdHJbMV0pXSA+PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpCi0gICAgICAgICAgICAgICAgICAgICAgICAqcHRyID0gc3RyOworICAgICAgICAgICAgICAgICAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKytzdHI7CkBAIC0xOTcsNyArMTk3LDcgQEAKICAgICAvKiBjYXRjaCBzaWxseSBiYXNlcyAqLwogICAgIGlmIChiYXNlIDwgMiB8fCBiYXNlID4gMzYpIHsKICAgICAgICAgaWYgKHB0cikKLSAgICAgICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICAgICAqcHRyID0gKGNoYXIgKilzdHI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMjEzLDcgKzIxMyw3IEBACiAgICAgICAgIGlmIChvdmxpbWl0ID4gMCkgLyogbm8gb3ZlcmZsb3cgY2hlY2sgcmVxdWlyZWQgKi8KICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyBjOwogICAgICAgICBlbHNlIHsgLyogcmVxdWlyZXMgb3ZlcmZsb3cgY2hlY2sgKi8KLSAgICAgICAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgdGVtcF9yZXN1bHQ7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHRlbXBfcmVzdWx0OwogCiAgICAgICAgICAgICBpZiAob3ZsaW1pdCA8IDApIC8qIGd1YXJhbnRlZWQgb3ZlcmZsb3cgKi8KICAgICAgICAgICAgICAgICBnb3RvIG92ZXJmbG93ZWQ7CkBAIC0yMzksNyArMjM5LDcgQEAKIAogICAgIC8qIHNldCBwb2ludGVyIHRvIHBvaW50IHRvIHRoZSBsYXN0IGNoYXJhY3RlciBzY2FubmVkICovCiAgICAgaWYgKHB0cikKLSAgICAgICAgKnB0ciA9IHN0cjsKKyAgICAgICAgKnB0ciA9IChjaGFyICopc3RyOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIApAQCAtMjQ4LDcgKzI0OCw3IEBACiAgICAgICAgIC8qIHNwb29sIHRocm91Z2ggcmVtYWluaW5nIGRpZ2l0IGNoYXJhY3RlcnMgKi8KICAgICAgICAgd2hpbGUgKF9QeUxvbmdfRGlnaXRWYWx1ZVtQeV9DSEFSTUFTSygqc3RyKV0gPCBiYXNlKQogICAgICAgICAgICAgKytzdHI7Ci0gICAgICAgICpwdHIgPSBzdHI7CisgICAgICAgICpwdHIgPSAoY2hhciAqKXN0cjsKICAgICB9CiAgICAgZXJybm8gPSBFUkFOR0U7CiAgICAgcmV0dXJuICh1bnNpZ25lZCBsb25nKS0xOwpAQCAtMjYwLDcgKzI2MCw3IEBACiAjZGVmaW5lIFBZX0FCU19MT05HX01JTiAgICAgICAgICgwLSh1bnNpZ25lZCBsb25nKUxPTkdfTUlOKQogCiBsb25nCi1QeU9TX3N0cnRvbChjaGFyICpzdHIsIGNoYXIgKipwdHIsIGludCBiYXNlKQorUHlPU19zdHJ0b2woY29uc3QgY2hhciAqc3RyLCBjaGFyICoqcHRyLCBpbnQgYmFzZSkKIHsKICAgICBsb25nIHJlc3VsdDsKICAgICB1bnNpZ25lZCBsb25nIHVyZXN1bHQ7CmRpZmYgLS1naXQgYS9QeXRob24vb3Bjb2RlX3RhcmdldHMuaCBiL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCmluZGV4IDJkNmJjZGEuLmY5MGExN2EgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCisrKyBiL1B5dGhvbi9vcGNvZGVfdGFyZ2V0cy5oCkBAIC02OCw3ICs2OCw3IEBACiAgICAgJiZUQVJHRVRfQklOQVJZX09SLAogICAgICYmVEFSR0VUX0lOUExBQ0VfUE9XRVIsCiAgICAgJiZUQVJHRVRfR0VUX0lURVIsCi0gICAgJiZUQVJHRVRfU1RPUkVfTE9DQUxTLAorICAgICYmX3Vua25vd25fb3Bjb2RlLAogICAgICYmVEFSR0VUX1BSSU5UX0VYUFIsCiAgICAgJiZUQVJHRVRfTE9BRF9CVUlMRF9DTEFTUywKICAgICAmJlRBUkdFVF9ZSUVMRF9GUk9NLApAQCAtMTQ3LDcgKzE0Nyw3IEBACiAgICAgJiZUQVJHRVRfTElTVF9BUFBFTkQsCiAgICAgJiZUQVJHRVRfU0VUX0FERCwKICAgICAmJlRBUkdFVF9NQVBfQURELAotICAgICYmX3Vua25vd25fb3Bjb2RlLAorICAgICYmVEFSR0VUX0xPQURfQ0xBU1NERVJFRiwKICAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJl91bmtub3duX29wY29kZSwKICAgICAmJl91bmtub3duX29wY29kZSwKZGlmZiAtLWdpdCBhL1B5dGhvbi9wZWVwaG9sZS5jIGIvUHl0aG9uL3BlZXBob2xlLmMKaW5kZXggNWQ1MzY3Ny4uYzU2YzhmYyAxMDA2NDQKLS0tIGEvUHl0aG9uL3BlZXBob2xlLmMKKysrIGIvUHl0aG9uL3BlZXBob2xlLmMKQEAgLTI3NSw2ICsyNzUsNyBAQAogICAgIGxlbl9jb25zdHMgPSBQeUxpc3RfR0VUX1NJWkUoY29uc3RzKTsKICAgICBpZiAoUHlMaXN0X0FwcGVuZChjb25zdHMsIG5ld2NvbnN0KSkgewogICAgICAgICBQeV9ERUNSRUYobmV3Y29uc3QpOworICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgUHlfREVDUkVGKG5ld2NvbnN0KTsKQEAgLTI4OSw3ICsyOTAsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCAqCiBtYXJrYmxvY2tzKHVuc2lnbmVkIGNoYXIgKmNvZGUsIFB5X3NzaXplX3QgbGVuKQogewotICAgIHVuc2lnbmVkIGludCAqYmxvY2tzID0gKHVuc2lnbmVkIGludCAqKVB5TWVtX01hbGxvYyhsZW4qc2l6ZW9mKGludCkpOworICAgIHVuc2lnbmVkIGludCAqYmxvY2tzID0gUHlNZW1fTmV3KHVuc2lnbmVkIGludCwgbGVuKTsKICAgICBpbnQgaSxqLCBvcGNvZGUsIGJsb2NrY250ID0gMDsKIAogICAgIGlmIChibG9ja3MgPT0gTlVMTCkgewpAQCAtMzI3LDM3ICszMjgsNiBAQAogICAgIHJldHVybiBibG9ja3M7CiB9CiAKLS8qIEhlbHBlciB0byByZXBsYWNlIExPQURfTkFNRSBOb25lL1RydWUvRmFsc2Ugd2l0aCBMT0FEX0NPTlNUCi0gICBSZXR1cm5zOiAwIGlmIG5vIGNoYW5nZSwgMSBpZiBjaGFuZ2UsIC0xIGlmIGVycm9yICovCi1zdGF0aWMgaW50Ci1sb2FkX2dsb2JhbCh1bnNpZ25lZCBjaGFyICpjb2Rlc3RyLCBQeV9zc2l6ZV90IGksIGNoYXIgKm5hbWUsIFB5T2JqZWN0ICpjb25zdHMpCi17Ci0gICAgUHlfc3NpemVfdCBqOwotICAgIFB5T2JqZWN0ICpvYmo7Ci0gICAgaWYgKG5hbWUgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHN0cmNtcChuYW1lLCAiTm9uZSIpID09IDApCi0gICAgICAgIG9iaiA9IFB5X05vbmU7Ci0gICAgZWxzZSBpZiAoc3RyY21wKG5hbWUsICJUcnVlIikgPT0gMCkKLSAgICAgICAgb2JqID0gUHlfVHJ1ZTsKLSAgICBlbHNlIGlmIChzdHJjbXAobmFtZSwgIkZhbHNlIikgPT0gMCkKLSAgICAgICAgb2JqID0gUHlfRmFsc2U7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLSAgICBmb3IgKGogPSAwOyBqIDwgUHlMaXN0X0dFVF9TSVpFKGNvbnN0cyk7IGorKykgewotICAgICAgICBpZiAoUHlMaXN0X0dFVF9JVEVNKGNvbnN0cywgaikgPT0gb2JqKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChqID09IFB5TGlzdF9HRVRfU0laRShjb25zdHMpKSB7Ci0gICAgICAgIGlmIChQeUxpc3RfQXBwZW5kKGNvbnN0cywgb2JqKSA8IDApCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGFzc2VydChQeUxpc3RfR0VUX0lURU0oY29uc3RzLCBqKSA9PSBvYmopOwotICAgIGNvZGVzdHJbaV0gPSBMT0FEX0NPTlNUOwotICAgIFNFVEFSRyhjb2Rlc3RyLCBpLCBqKTsKLSAgICByZXR1cm4gMTsKLX0KLQogLyogUGVyZm9ybSBiYXNpYyBwZWVwaG9sZSBvcHRpbWl6YXRpb25zIHRvIGNvbXBvbmVudHMgb2YgYSBjb2RlIG9iamVjdC4KICAgIFRoZSBjb25zdHMgb2JqZWN0IHNob3VsZCBzdGlsbCBiZSBpbiBsaXN0IGZvcm0gdG8gYWxsb3cgbmV3IGNvbnN0YW50cwogICAgdG8gYmUgYXBwZW5kZWQuCkBAIC0zOTIsNyArMzYyLDYgQEAKICAgICBQeV9zc2l6ZV90IGNvbnN0X3N0YWNrX3NpemUgPSAwOwogICAgIGludCBpbl9jb25zdHMgPSAwOyAgLyogd2hldGhlciB3ZSBhcmUgaW4gYSBMT0FEX0NPTlNUIHNlcXVlbmNlICovCiAgICAgdW5zaWduZWQgaW50ICpibG9ja3MgPSBOVUxMOwotICAgIGNoYXIgKm5hbWU7CiAKICAgICAvKiBCYWlsIG91dCBpZiBhbiBleGNlcHRpb24gaXMgc2V0ICovCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpCkBAIC00MTMsOCArMzgyLDEwIEBACiAKICAgICAvKiBNYWtlIGEgbW9kaWZpYWJsZSBjb3B5IG9mIHRoZSBjb2RlIHN0cmluZyAqLwogICAgIGNvZGVzdHIgPSAodW5zaWduZWQgY2hhciAqKVB5TWVtX01hbGxvYyhjb2RlbGVuKTsKLSAgICBpZiAoY29kZXN0ciA9PSBOVUxMKQorICAgIGlmIChjb2Rlc3RyID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBleGl0RXJyb3I7CisgICAgfQogICAgIGNvZGVzdHIgPSAodW5zaWduZWQgY2hhciAqKW1lbWNweShjb2Rlc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUJ5dGVzX0FTX1NUUklORyhjb2RlKSwgY29kZWxlbik7CiAKQEAgLTQyNyw5ICszOTgsMTEgQEAKICAgICAgICAgZ290byBleGl0VW5jaGFuZ2VkOwogCiAgICAgLyogTWFwcGluZyB0byBuZXcganVtcCB0YXJnZXRzIGFmdGVyIE5PUHMgYXJlIHJlbW92ZWQgKi8KLSAgICBhZGRybWFwID0gKGludCAqKVB5TWVtX01hbGxvYyhjb2RlbGVuICogc2l6ZW9mKGludCkpOwotICAgIGlmIChhZGRybWFwID09IE5VTEwpCisgICAgYWRkcm1hcCA9IFB5TWVtX05ldyhpbnQsIGNvZGVsZW4pOworICAgIGlmIChhZGRybWFwID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfTm9NZW1vcnkoKTsKICAgICAgICAgZ290byBleGl0RXJyb3I7CisgICAgfQogCiAgICAgYmxvY2tzID0gbWFya2Jsb2Nrcyhjb2Rlc3RyLCBjb2RlbGVuKTsKICAgICBpZiAoYmxvY2tzID09IE5VTEwpCkBAIC00NzUsMjAgKzQ0OCw2IEBACiAgICAgICAgICAgICAgICAgY29kZXN0cltpKzNdID0gTk9QOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgICAgICAgICAgLyogUmVwbGFjZSBMT0FEX0dMT0JBTC9MT0FEX05BTUUgTm9uZS9UcnVlL0ZhbHNlCi0gICAgICAgICAgICAgICAgICAgd2l0aCBMT0FEX0NPTlNUIE5vbmUvVHJ1ZS9GYWxzZSAqLwotICAgICAgICAgICAgY2FzZSBMT0FEX05BTUU6Ci0gICAgICAgICAgICBjYXNlIExPQURfR0xPQkFMOgotICAgICAgICAgICAgICAgIGogPSBHRVRBUkcoY29kZXN0ciwgaSk7Ci0gICAgICAgICAgICAgICAgbmFtZSA9IF9QeVVuaWNvZGVfQXNTdHJpbmcoUHlUdXBsZV9HRVRfSVRFTShuYW1lcywgaikpOwotICAgICAgICAgICAgICAgIGggPSBsb2FkX2dsb2JhbChjb2Rlc3RyLCBpLCBuYW1lLCBjb25zdHMpOwotICAgICAgICAgICAgICAgIGlmIChoIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgZ290byBleGl0RXJyb3I7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaCA9PSAwKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBDT05TVF9TVEFDS19QVVNIX09QKGkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgICAgICAgICAgLyogU2tpcCBvdmVyIExPQURfQ09OU1QgdHJ1ZWNvbnN0CiAgICAgICAgICAgICAgICAgICAgUE9QX0pVTVBfSUZfRkFMU0UgeHguIFRoaXMgaW1wcm92ZXMKICAgICAgICAgICAgICAgICAgICAid2hpbGUgMSIgcGVyZm9ybWFuY2UuICovCmRpZmYgLS1naXQgYS9QeXRob24vcHlhcmVuYS5jIGIvUHl0aG9uL3B5YXJlbmEuYwppbmRleCAwMmEzMWQ4Li4xMDM2MDNmIDEwMDY0NAotLS0gYS9QeXRob24vcHlhcmVuYS5jCisrKyBiL1B5dGhvbi9weWFyZW5hLmMKQEAgLTc3LDcgKzc3LDcgQEAKIHsKICAgICAvKiBBbGxvY2F0ZSBoZWFkZXIgYW5kIGJsb2NrIGFzIG9uZSB1bml0LgogICAgICAgIGFiX21lbSBwb2ludHMganVzdCBwYXN0IGhlYWRlci4gKi8KLSAgICBibG9jayAqYiA9IChibG9jayAqKW1hbGxvYyhzaXplb2YoYmxvY2spICsgc2l6ZSk7CisgICAgYmxvY2sgKmIgPSAoYmxvY2sgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKGJsb2NrKSArIHNpemUpOwogICAgIGlmICghYikKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgYi0+YWJfc2l6ZSA9IHNpemU7CkBAIC05Miw3ICs5Miw3IEBACiBibG9ja19mcmVlKGJsb2NrICpiKSB7CiAgICAgd2hpbGUgKGIpIHsKICAgICAgICAgYmxvY2sgKm5leHQgPSBiLT5hYl9uZXh0OwotICAgICAgICBmcmVlKGIpOworICAgICAgICBQeU1lbV9GcmVlKGIpOwogICAgICAgICBiID0gbmV4dDsKICAgICB9CiB9CkBAIC0xMjcsMjAgKzEyNywyMCBAQAogUHlBcmVuYSAqCiBQeUFyZW5hX05ldygpCiB7Ci0gICAgUHlBcmVuYSogYXJlbmEgPSAoUHlBcmVuYSAqKW1hbGxvYyhzaXplb2YoUHlBcmVuYSkpOworICAgIFB5QXJlbmEqIGFyZW5hID0gKFB5QXJlbmEgKilQeU1lbV9NYWxsb2Moc2l6ZW9mKFB5QXJlbmEpKTsKICAgICBpZiAoIWFyZW5hKQogICAgICAgICByZXR1cm4gKFB5QXJlbmEqKVB5RXJyX05vTWVtb3J5KCk7CiAKICAgICBhcmVuYS0+YV9oZWFkID0gYmxvY2tfbmV3KERFRkFVTFRfQkxPQ0tfU0laRSk7CiAgICAgYXJlbmEtPmFfY3VyID0gYXJlbmEtPmFfaGVhZDsKICAgICBpZiAoIWFyZW5hLT5hX2hlYWQpIHsKLSAgICAgICAgZnJlZSgodm9pZCAqKWFyZW5hKTsKKyAgICAgICAgUHlNZW1fRnJlZSgodm9pZCAqKWFyZW5hKTsKICAgICAgICAgcmV0dXJuIChQeUFyZW5hKilQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICAgICBhcmVuYS0+YV9vYmplY3RzID0gUHlMaXN0X05ldygwKTsKICAgICBpZiAoIWFyZW5hLT5hX29iamVjdHMpIHsKICAgICAgICAgYmxvY2tfZnJlZShhcmVuYS0+YV9oZWFkKTsKLSAgICAgICAgZnJlZSgodm9pZCAqKWFyZW5hKTsKKyAgICAgICAgUHlNZW1fRnJlZSgodm9pZCAqKWFyZW5hKTsKICAgICAgICAgcmV0dXJuIChQeUFyZW5hKilQeUVycl9Ob01lbW9yeSgpOwogICAgIH0KICNpZiBkZWZpbmVkKFB5X0RFQlVHKQpAQCAtMTczLDcgKzE3Myw3IEBACiAgICAgKi8KIAogICAgIFB5X0RFQ1JFRihhcmVuYS0+YV9vYmplY3RzKTsKLSAgICBmcmVlKGFyZW5hKTsKKyAgICBQeU1lbV9GcmVlKGFyZW5hKTsKIH0KIAogdm9pZCAqCmRpZmYgLS1naXQgYS9QeXRob24vcHloYXNoLmMgYi9QeXRob24vcHloYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjYjU0NwotLS0gL2Rldi9udWxsCisrKyBiL1B5dGhvbi9weWhhc2guYwpAQCAtMCwwICsxLDQyNyBAQAorLyogU2V0IG9mIGhhc2ggdXRpbGl0eSBmdW5jdGlvbnMgdG8gaGVscCBtYWludGFpbmluZyB0aGUgaW52YXJpYW50IHRoYXQKKyAgICBpZiBhPT1iIHRoZW4gaGFzaChhKT09aGFzaChiKQorCisgICBBbGwgdGhlIHV0aWxpdHkgZnVuY3Rpb25zIChfUHlfSGFzaCooKSkgcmV0dXJuICItMSIgdG8gc2lnbmlmeSBhbiBlcnJvci4KKyovCisjaW5jbHVkZSAiUHl0aG9uLmgiCisKKyNpZmRlZiBfX0FQUExFX18KKyMgIGluY2x1ZGUgPGxpYmtlcm4vT1NCeXRlT3JkZXIuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9MRTY0VE9IKSAmJiBkZWZpbmVkKEhBVkVfRU5ESUFOX0gpCisjICBpbmNsdWRlIDxlbmRpYW4uaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9MRTY0VE9IKSAmJiBkZWZpbmVkKEhBVkVfU1lTX0VORElBTl9IKQorIyAgaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworX1B5X0hhc2hTZWNyZXRfdCBfUHlfSGFzaFNlY3JldDsKKworI2lmIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfRVhURVJOQUwKK2V4dGVybiBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYzsKKyNlbHNlCitzdGF0aWMgUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmM7CisjZW5kaWYKKworLyogQ291bnQgX1B5X0hhc2hCeXRlcygpIGNhbGxzICovCisjaWZkZWYgUHlfSEFTSF9TVEFUUworI2RlZmluZSBQeV9IQVNIX1NUQVRTX01BWCAzMgorc3RhdGljIFB5X3NzaXplX3QgaGFzaHN0YXRzW1B5X0hBU0hfU1RBVFNfTUFYICsgMV0gPSB7MH07CisjZW5kaWYKKworLyogRm9yIG51bWVyaWMgdHlwZXMsIHRoZSBoYXNoIG9mIGEgbnVtYmVyIHggaXMgYmFzZWQgb24gdGhlIHJlZHVjdGlvbgorICAgb2YgeCBtb2R1bG8gdGhlIHByaW1lIFAgPSAyKipfUHlIQVNIX0JJVFMgLSAxLiAgSXQncyBkZXNpZ25lZCBzbyB0aGF0CisgICBoYXNoKHgpID09IGhhc2goeSkgd2hlbmV2ZXIgeCBhbmQgeSBhcmUgbnVtZXJpY2FsbHkgZXF1YWwsIGV2ZW4gaWYKKyAgIHggYW5kIHkgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuCisKKyAgIEEgcXVpY2sgc3VtbWFyeSBvZiB0aGUgaGFzaGluZyBzdHJhdGVneToKKworICAgKDEpIEZpcnN0IGRlZmluZSB0aGUgJ3JlZHVjdGlvbiBvZiB4IG1vZHVsbyBQJyBmb3IgYW55IHJhdGlvbmFsCisgICBudW1iZXIgeDsgdGhpcyBpcyBhIHN0YW5kYXJkIGV4dGVuc2lvbiBvZiB0aGUgdXN1YWwgbm90aW9uIG9mCisgICByZWR1Y3Rpb24gbW9kdWxvIFAgZm9yIGludGVnZXJzLiAgSWYgeCA9PSBwL3EgKHdyaXR0ZW4gaW4gbG93ZXN0CisgICB0ZXJtcyksIHRoZSByZWR1Y3Rpb24gaXMgaW50ZXJwcmV0ZWQgYXMgdGhlIHJlZHVjdGlvbiBvZiBwIHRpbWVzCisgICB0aGUgaW52ZXJzZSBvZiB0aGUgcmVkdWN0aW9uIG9mIHEsIGFsbCBtb2R1bG8gUDsgaWYgcSBpcyBleGFjdGx5CisgICBkaXZpc2libGUgYnkgUCB0aGVuIGRlZmluZSB0aGUgcmVkdWN0aW9uIHRvIGJlIGluZmluaXR5LiAgU28gd2UndmUKKyAgIGdvdCBhIHdlbGwtZGVmaW5lZCBtYXAKKworICAgICAgcmVkdWNlIDogeyByYXRpb25hbCBudW1iZXJzIH0gLT4geyAwLCAxLCAyLCAuLi4sIFAtMSwgaW5maW5pdHkgfS4KKworICAgKDIpIE5vdyBmb3IgYSByYXRpb25hbCBudW1iZXIgeCwgZGVmaW5lIGhhc2goeCkgYnk6CisKKyAgICAgIHJlZHVjZSh4KSAgIGlmIHggPj0gMAorICAgICAgLXJlZHVjZSgteCkgaWYgeCA8IDAKKworICAgSWYgdGhlIHJlc3VsdCBvZiB0aGUgcmVkdWN0aW9uIGlzIGluZmluaXR5ICh0aGlzIGlzIGltcG9zc2libGUgZm9yCisgICBpbnRlZ2VycywgZmxvYXRzIGFuZCBEZWNpbWFscykgdGhlbiB1c2UgdGhlIHByZWRlZmluZWQgaGFzaCB2YWx1ZQorICAgX1B5SEFTSF9JTkYgZm9yIHggPj0gMCwgb3IgLV9QeUhBU0hfSU5GIGZvciB4IDwgMCwgaW5zdGVhZC4KKyAgIF9QeUhBU0hfSU5GLCAtX1B5SEFTSF9JTkYgYW5kIF9QeUhBU0hfTkFOIGFyZSBhbHNvIHVzZWQgZm9yIHRoZQorICAgaGFzaGVzIG9mIGZsb2F0IGFuZCBEZWNpbWFsIGluZmluaXRpZXMgYW5kIG5hbnMuCisKKyAgIEEgc2VsbGluZyBwb2ludCBmb3IgdGhlIGFib3ZlIHN0cmF0ZWd5IGlzIHRoYXQgaXQgbWFrZXMgaXQgcG9zc2libGUKKyAgIHRvIGNvbXB1dGUgaGFzaGVzIG9mIGRlY2ltYWwgYW5kIGJpbmFyeSBmbG9hdGluZy1wb2ludCBudW1iZXJzCisgICBlZmZpY2llbnRseSwgZXZlbiBpZiB0aGUgZXhwb25lbnQgb2YgdGhlIGJpbmFyeSBvciBkZWNpbWFsIG51bWJlcgorICAgaXMgbGFyZ2UuICBUaGUga2V5IHBvaW50IGlzIHRoYXQKKworICAgICAgcmVkdWNlKHggKiB5KSA9PSByZWR1Y2UoeCkgKiByZWR1Y2UoeSkgKG1vZHVsbyBfUHlIQVNIX01PRFVMVVMpCisKKyAgIHByb3ZpZGVkIHRoYXQge3JlZHVjZSh4KSwgcmVkdWNlKHkpfSAhPSB7MCwgaW5maW5pdHl9LiAgVGhlIHJlZHVjdGlvbiBvZiBhCisgICBiaW5hcnkgb3IgZGVjaW1hbCBmbG9hdCBpcyBuZXZlciBpbmZpbml0eSwgc2luY2UgdGhlIGRlbm9taW5hdG9yIGlzIGEgcG93ZXIKKyAgIG9mIDIgKGZvciBiaW5hcnkpIG9yIGEgZGl2aXNvciBvZiBhIHBvd2VyIG9mIDEwIChmb3IgZGVjaW1hbCkuICBTbyB3ZSBoYXZlLAorICAgZm9yIG5vbm5lZ2F0aXZlIHgsCisKKyAgICAgIHJlZHVjZSh4ICogMioqZSkgPT0gcmVkdWNlKHgpICogcmVkdWNlKDIqKmUpICUgX1B5SEFTSF9NT0RVTFVTCisKKyAgICAgIHJlZHVjZSh4ICogMTAqKmUpID09IHJlZHVjZSh4KSAqIHJlZHVjZSgxMCoqZSkgJSBfUHlIQVNIX01PRFVMVVMKKworICAgYW5kIHJlZHVjZSgxMCoqZSkgY2FuIGJlIGNvbXB1dGVkIGVmZmljaWVudGx5IGJ5IHRoZSB1c3VhbCBtb2R1bGFyCisgICBleHBvbmVudGlhdGlvbiBhbGdvcml0aG0uICBGb3IgcmVkdWNlKDIqKmUpIGl0J3MgZXZlbiBiZXR0ZXI6IHNpbmNlCisgICBQIGlzIG9mIHRoZSBmb3JtIDIqKm4tMSwgcmVkdWNlKDIqKmUpIGlzIDIqKihlIG1vZCBuKSwgYW5kIG11bHRpcGxpY2F0aW9uCisgICBieSAyKiooZSBtb2QgbikgbW9kdWxvIDIqKm4tMSBqdXN0IGFtb3VudHMgdG8gYSByb3RhdGlvbiBvZiBiaXRzLgorCisgICAqLworCitQeV9oYXNoX3QKK19QeV9IYXNoRG91YmxlKGRvdWJsZSB2KQoreworICAgIGludCBlLCBzaWduOworICAgIGRvdWJsZSBtOworICAgIFB5X3VoYXNoX3QgeCwgeTsKKworICAgIGlmICghUHlfSVNfRklOSVRFKHYpKSB7CisgICAgICAgIGlmIChQeV9JU19JTkZJTklUWSh2KSkKKyAgICAgICAgICAgIHJldHVybiB2ID4gMCA/IF9QeUhBU0hfSU5GIDogLV9QeUhBU0hfSU5GOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gX1B5SEFTSF9OQU47CisgICAgfQorCisgICAgbSA9IGZyZXhwKHYsICZlKTsKKworICAgIHNpZ24gPSAxOworICAgIGlmIChtIDwgMCkgeworICAgICAgICBzaWduID0gLTE7CisgICAgICAgIG0gPSAtbTsKKyAgICB9CisKKyAgICAvKiBwcm9jZXNzIDI4IGJpdHMgYXQgYSB0aW1lOyAgdGhpcyBzaG91bGQgd29yayB3ZWxsIGJvdGggZm9yIGJpbmFyeQorICAgICAgIGFuZCBoZXhhZGVjaW1hbCBmbG9hdGluZyBwb2ludC4gKi8KKyAgICB4ID0gMDsKKyAgICB3aGlsZSAobSkgeworICAgICAgICB4ID0gKCh4IDw8IDI4KSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSAyOCk7CisgICAgICAgIG0gKj0gMjY4NDM1NDU2LjA7ICAvKiAyKioyOCAqLworICAgICAgICBlIC09IDI4OworICAgICAgICB5ID0gKFB5X3VoYXNoX3QpbTsgIC8qIHB1bGwgb3V0IGludGVnZXIgcGFydCAqLworICAgICAgICBtIC09IHk7CisgICAgICAgIHggKz0geTsKKyAgICAgICAgaWYgKHggPj0gX1B5SEFTSF9NT0RVTFVTKQorICAgICAgICAgICAgeCAtPSBfUHlIQVNIX01PRFVMVVM7CisgICAgfQorCisgICAgLyogYWRqdXN0IGZvciB0aGUgZXhwb25lbnQ7ICBmaXJzdCByZWR1Y2UgaXQgbW9kdWxvIF9QeUhBU0hfQklUUyAqLworICAgIGUgPSBlID49IDAgPyBlICUgX1B5SEFTSF9CSVRTIDogX1B5SEFTSF9CSVRTLTEtKCgtMS1lKSAlIF9QeUhBU0hfQklUUyk7CisgICAgeCA9ICgoeCA8PCBlKSAmIF9QeUhBU0hfTU9EVUxVUykgfCB4ID4+IChfUHlIQVNIX0JJVFMgLSBlKTsKKworICAgIHggPSB4ICogc2lnbjsKKyAgICBpZiAoeCA9PSAoUHlfdWhhc2hfdCktMSkKKyAgICAgICAgeCA9IChQeV91aGFzaF90KS0yOworICAgIHJldHVybiAoUHlfaGFzaF90KXg7Cit9CisKK1B5X2hhc2hfdAorX1B5X0hhc2hQb2ludGVyKHZvaWQgKnApCit7CisgICAgUHlfaGFzaF90IHg7CisgICAgc2l6ZV90IHkgPSAoc2l6ZV90KXA7CisgICAgLyogYm90dG9tIDMgb3IgNCBiaXRzIGFyZSBsaWtlbHkgdG8gYmUgMDsgcm90YXRlIHkgYnkgNCB0byBhdm9pZAorICAgICAgIGV4Y2Vzc2l2ZSBoYXNoIGNvbGxpc2lvbnMgZm9yIGRpY3RzIGFuZCBzZXRzICovCisgICAgeSA9ICh5ID4+IDQpIHwgKHkgPDwgKDggKiBTSVpFT0ZfVk9JRF9QIC0gNCkpOworICAgIHggPSAoUHlfaGFzaF90KXk7CisgICAgaWYgKHggPT0gLTEpCisgICAgICAgIHggPSAtMjsKKyAgICByZXR1cm4geDsKK30KKworUHlfaGFzaF90CitfUHlfSGFzaEJ5dGVzKGNvbnN0IHZvaWQgKnNyYywgUHlfc3NpemVfdCBsZW4pCit7CisgICAgUHlfaGFzaF90IHg7CisgICAgLyoKKyAgICAgIFdlIG1ha2UgdGhlIGhhc2ggb2YgdGhlIGVtcHR5IHN0cmluZyBiZSAwLCByYXRoZXIgdGhhbiB1c2luZworICAgICAgKHByZWZpeCBeIHN1ZmZpeCksIHNpbmNlIHRoaXMgc2xpZ2h0bHkgb2JmdXNjYXRlcyB0aGUgaGFzaCBzZWNyZXQKKyAgICAqLworICAgIGlmIChsZW4gPT0gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyNpZmRlZiBQeV9IQVNIX1NUQVRTCisgICAgaGFzaHN0YXRzWyhsZW4gPD0gUHlfSEFTSF9TVEFUU19NQVgpID8gbGVuIDogMF0rKzsKKyNlbmRpZgorCisjaWYgUHlfSEFTSF9DVVRPRkYgPiAwCisgICAgaWYgKGxlbiA8IFB5X0hBU0hfQ1VUT0ZGKSB7CisgICAgICAgIC8qIE9wdGltaXplIGhhc2hpbmcgb2YgdmVyeSBzbWFsbCBzdHJpbmdzIHdpdGggaW5saW5lIERKQlgzM0EuICovCisgICAgICAgIFB5X3VoYXNoX3QgaGFzaDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IHNyYzsKKyAgICAgICAgaGFzaCA9IDUzODE7IC8qIERKQlgzM0Egc3RhcnRzIHdpdGggNTM4MSAqLworCisgICAgICAgIHN3aXRjaChsZW4pIHsKKyAgICAgICAgICAgIC8qICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnAgPT0gaGFzaCAqIDMzICsgKnAgKi8KKyAgICAgICAgICAgIGNhc2UgNzogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgNjogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgNTogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgNDogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgMzogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgMjogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgIGNhc2UgMTogaGFzaCA9ICgoaGFzaCA8PCA1KSArIGhhc2gpICsgKnArKzsgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGFzc2VydCgwKTsKKyAgICAgICAgfQorICAgICAgICBoYXNoIF49IGxlbjsKKyAgICAgICAgaGFzaCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuZGpieDMzYS5zdWZmaXg7CisgICAgICAgIHggPSAoUHlfaGFzaF90KWhhc2g7CisgICAgfQorICAgIGVsc2UKKyNlbmRpZiAvKiBQeV9IQVNIX0NVVE9GRiAqLworICAgICAgICB4ID0gUHlIYXNoX0Z1bmMuaGFzaChzcmMsIGxlbik7CisKKyAgICBpZiAoeCA9PSAtMSkKKyAgICAgICAgcmV0dXJuIC0yOworICAgIHJldHVybiB4OworfQorCit2b2lkCitfUHlIYXNoX0Zpbmkodm9pZCkKK3sKKyNpZmRlZiBQeV9IQVNIX1NUQVRTCisgICAgaW50IGk7CisgICAgUHlfc3NpemVfdCB0b3RhbCA9IDA7CisgICAgY2hhciAqZm10ID0gIiUyaSAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZCAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIjsKKworICAgIGZwcmludGYoc3RkZXJyLCAibGVuICAgY2FsbHMgICAgdG90YWxcbiIpOworICAgIGZvciAoaSA9IDE7IGkgPD0gUHlfSEFTSF9TVEFUU19NQVg7IGkrKykgeworICAgICAgICB0b3RhbCArPSBoYXNoc3RhdHNbaV07CisgICAgICAgIGZwcmludGYoc3RkZXJyLCBmbXQsIGksIGhhc2hzdGF0c1tpXSwgdG90YWwpOworICAgIH0KKyAgICB0b3RhbCArPSBoYXNoc3RhdHNbMF07CisgICAgZnByaW50ZihzdGRlcnIsICI+ICAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZCAlOCIgUFlfRk9STUFUX1NJWkVfVCAiZFxuIiwKKyAgICAgICAgICAgIGhhc2hzdGF0c1swXSwgdG90YWwpOworI2VuZGlmCit9CisKK1B5SGFzaF9GdW5jRGVmICoKK1B5SGFzaF9HZXRGdW5jRGVmKHZvaWQpCit7CisgICAgcmV0dXJuICZQeUhhc2hfRnVuYzsKK30KKworLyogT3B0aW1pemVkIG1lbWNweSgpIGZvciBXaW5kb3dzICovCisjaWZkZWYgX01TQ19WRVIKKyMgIGlmIFNJWkVPRl9QWV9VSEFTSF9UID09IDQKKyMgICAgZGVmaW5lIFBZX1VIQVNIX0NQWShkc3QsIHNyYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBkc3RbMF0gPSBzcmNbMF07IGRzdFsxXSA9IHNyY1sxXTsgZHN0WzJdID0gc3JjWzJdOyBkc3RbM10gPSBzcmNbM107IFwKKyAgICAgICB9IHdoaWxlKDApCisjICBlbGlmIFNJWkVPRl9QWV9VSEFTSF9UID09IDgKKyMgICAgZGVmaW5lIFBZX1VIQVNIX0NQWShkc3QsIHNyYykgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICBkc3RbMF0gPSBzcmNbMF07IGRzdFsxXSA9IHNyY1sxXTsgZHN0WzJdID0gc3JjWzJdOyBkc3RbM10gPSBzcmNbM107IFwKKyAgICAgICBkc3RbNF0gPSBzcmNbNF07IGRzdFs1XSA9IHNyY1s1XTsgZHN0WzZdID0gc3JjWzZdOyBkc3RbN10gPSBzcmNbN107IFwKKyAgICAgICB9IHdoaWxlKDApCisjICBlbHNlCisjICAgIGVycm9yIFNJWkVPRl9QWV9VSEFTSF9UIG11c3QgYmUgNCBvciA4CisjICBlbmRpZiAvKiBTSVpFT0ZfUFlfVUhBU0hfVCAqLworI2Vsc2UgLyogbm90IFdpbmRvd3MgKi8KKyMgIGRlZmluZSBQWV9VSEFTSF9DUFkoZHN0LCBzcmMpIG1lbWNweShkc3QsIHNyYywgU0laRU9GX1BZX1VIQVNIX1QpCisjZW5kaWYgLyogX01TQ19WRVIgKi8KKworCisjaWYgUHlfSEFTSF9BTEdPUklUSE0gPT0gUHlfSEFTSF9GTlYKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNb2RpZmllZCBGb3dsZXItTm9sbC1WbyAoRk5WKSBoYXNoIGZ1bmN0aW9uCisgKi8KK3N0YXRpYyBQeV9oYXNoX3QKK2Zudihjb25zdCB2b2lkICpzcmMsIFB5X3NzaXplX3QgbGVuKQoreworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzcmM7CisgICAgUHlfdWhhc2hfdCB4OworICAgIFB5X3NzaXplX3QgcmVtYWluZGVyLCBibG9ja3M7CisgICAgdW5pb24geworICAgICAgICBQeV91aGFzaF90IHZhbHVlOworICAgICAgICB1bnNpZ25lZCBjaGFyIGJ5dGVzW1NJWkVPRl9QWV9VSEFTSF9UXTsKKyAgICB9IGJsb2NrOworCisjaWZkZWYgUHlfREVCVUcKKyAgICBhc3NlcnQoX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQpOworI2VuZGlmCisgICAgcmVtYWluZGVyID0gbGVuICUgU0laRU9GX1BZX1VIQVNIX1Q7CisgICAgaWYgKHJlbWFpbmRlciA9PSAwKSB7CisgICAgICAgIC8qIFByb2Nlc3MgYXQgbGVhc3Qgb25lIGJsb2NrIGJ5dGUgYnkgYnl0ZSB0byByZWR1Y2UgaGFzaCBjb2xsaXNpb25zCisgICAgICAgICAqIGZvciBzdHJpbmdzIHdpdGggY29tbW9uIHByZWZpeGVzLiAqLworICAgICAgICByZW1haW5kZXIgPSBTSVpFT0ZfUFlfVUhBU0hfVDsKKyAgICB9CisgICAgYmxvY2tzID0gKGxlbiAtIHJlbWFpbmRlcikgLyBTSVpFT0ZfUFlfVUhBU0hfVDsKKworICAgIHggPSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuZm52LnByZWZpeDsKKyAgICB4IF49IChQeV91aGFzaF90KSAqcCA8PCA3OworICAgIHdoaWxlIChibG9ja3MtLSkgeworICAgICAgICBQWV9VSEFTSF9DUFkoYmxvY2suYnl0ZXMsIHApOworICAgICAgICB4ID0gKF9QeUhBU0hfTVVMVElQTElFUiAqIHgpIF4gYmxvY2sudmFsdWU7CisgICAgICAgIHAgKz0gU0laRU9GX1BZX1VIQVNIX1Q7CisgICAgfQorICAgIC8qIGFkZCByZW1haW5kZXIgKi8KKyAgICBmb3IgKDsgcmVtYWluZGVyID4gMDsgcmVtYWluZGVyLS0pCisgICAgICAgIHggPSAoX1B5SEFTSF9NVUxUSVBMSUVSICogeCkgXiAoUHlfdWhhc2hfdCkgKnArKzsKKyAgICB4IF49IChQeV91aGFzaF90KSBsZW47CisgICAgeCBePSAoUHlfdWhhc2hfdCkgX1B5X0hhc2hTZWNyZXQuZm52LnN1ZmZpeDsKKyAgICBpZiAoeCA9PSAtMSkgeworICAgICAgICB4ID0gLTI7CisgICAgfQorICAgIHJldHVybiB4OworfQorCitzdGF0aWMgUHlIYXNoX0Z1bmNEZWYgUHlIYXNoX0Z1bmMgPSB7Zm52LCAiZm52IiwgOCAqIFNJWkVPRl9QWV9IQVNIX1QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTYgKiBTSVpFT0ZfUFlfSEFTSF9UfTsKKworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfRk5WICovCisKKworI2lmIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfU0lQSEFTSDI0CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIDxNSVQgTGljZW5zZT4KKyBDb3B5cmlnaHQgKGMpIDIwMTMgIE1hcmVrIE1hamtvd3NraSA8bWFyZWtAcG9wY291bnQub3JnPgorCisgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKKyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKworIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCisgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgorIFRIRSBTT0ZUV0FSRS4KKyA8L01JVCBMaWNlbnNlPgorCisgT3JpZ2luYWwgbG9jYXRpb246CisgICAgaHR0cHM6Ly9naXRodWIuY29tL21hamVrL2NzaXBoYXNoLworCisgU29sdXRpb24gaW5zcGlyZWQgYnkgY29kZSBmcm9tOgorICAgIFNhbXVlbCBOZXZlcyAoc3VwZXJjb3AvY3J5cHRvX2F1dGgvc2lwaGFzaDI0L2xpdHRsZSkKKyAgICBkamIgKHN1cGVyY29wL2NyeXB0b19hdXRoL3NpcGhhc2gyNC9saXR0bGUyKQorICAgIEplYW4tUGhpbGlwcGUgQXVtYXNzb24gKGh0dHBzOi8vMTMxMDAyLm5ldC9zaXBoYXNoL3NpcGhhc2gyNC5jKQorCisgTW9kaWZpZWQgZm9yIFB5dGhvbiBieSBDaHJpc3RpYW4gSGVpbWVzOgorICAgIC0gQzg5IC8gTVNWQyBjb21wYXRpYmlsaXR5CisgICAgLSBQWV9VSU5UNjRfVCwgUFlfVUlOVDMyX1QgYW5kIFBZX1VJTlQ4X1QKKyAgICAtIF9yb3RsNjQoKSBvbiBXaW5kb3dzCisgICAgLSBsZXRvaDY0KCkgZmFsbGJhY2sKKyovCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBQWV9VSU5UOF9UOworCisvKiBieXRlIHN3YXAgbGl0dGxlIGVuZGlhbiB0byBob3N0IGVuZGlhbgorICogRW5kaWFuIGNvbnZlcnNpb24gbm90IG9ubHkgZW5zdXJlcyB0aGF0IHRoZSBoYXNoIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNhbWUKKyAqIHZhbHVlIG9uIGFsbCBwbGF0Zm9ybXMuIEl0IGlzIGFsc28gcmVxdWlyZWQgdG8gZm9yIGEgZ29vZCBkaXNwZXJzaW9uIG9mCisgKiB0aGUgaGFzaCB2YWx1ZXMnIGxlYXN0IHNpZ25pZmljYW50IGJpdHMuCisgKi8KKyNpZiBQWV9MSVRUTEVfRU5ESUFOCisjICBkZWZpbmUgX2xlNjR0b2goeCkgKChQWV9VSU5UNjRfVCkoeCkpCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyMgIGRlZmluZSBfbGU2NHRvaCh4KSBPU1N3YXBMaXR0bGVUb0hvc3RJbnQ2NCh4KQorI2VsaWYgZGVmaW5lZChIQVZFX0xFVE9INjQpCisjICBkZWZpbmUgX2xlNjR0b2goeCkgbGU2NHRvaCh4KQorI2Vsc2UKKyMgIGRlZmluZSBfbGU2NHRvaCh4KSAoKChQWV9VSU5UNjRfVCkoeCkgPDwgNTYpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA8PCA0MCkgJiAweGZmMDAwMDAwMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPDwgMjQpICYgMHhmZjAwMDAwMDAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA8PCA4KSAgJiAweGZmMDAwMDAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA+PiA4KSAgJiAweGZmMDAwMDAwVUxMKSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAoKChQWV9VSU5UNjRfVCkoeCkgPj4gMjQpICYgMHhmZjAwMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoKFBZX1VJTlQ2NF9UKSh4KSA+PiA0MCkgJiAweGZmMDBVTEwpIHwgXAorICAgICAgICAgICAgICAgICAgICAgICgoUFlfVUlOVDY0X1QpKHgpICA+PiA1NikpCisjZW5kaWYKKworCisjaWZkZWYgX01TQ19WRVIKKyMgIGRlZmluZSBST1RBVEUoeCwgYikgIF9yb3RsNjQoeCwgYikKKyNlbHNlCisjICBkZWZpbmUgUk9UQVRFKHgsIGIpIChQWV9VSU5UNjRfVCkoICgoeCkgPDwgKGIpKSB8ICggKHgpID4+ICg2NCAtIChiKSkpICkKKyNlbmRpZgorCisjZGVmaW5lIEhBTEZfUk9VTkQoYSxiLGMsZCxzLHQpICAgICAgICAgXAorICAgIGEgKz0gYjsgYyArPSBkOyAgICAgICAgICAgICBcCisgICAgYiA9IFJPVEFURShiLCBzKSBeIGE7ICAgICAgICAgICBcCisgICAgZCA9IFJPVEFURShkLCB0KSBeIGM7ICAgICAgICAgICBcCisgICAgYSA9IFJPVEFURShhLCAzMik7CisKKyNkZWZpbmUgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKSAgICAgICBcCisgICAgSEFMRl9ST1VORCh2MCx2MSx2Mix2MywxMywxNik7ICAgICAgXAorICAgIEhBTEZfUk9VTkQodjIsdjEsdjAsdjMsMTcsMjEpOyAgICAgIFwKKyAgICBIQUxGX1JPVU5EKHYwLHYxLHYyLHYzLDEzLDE2KTsgICAgICBcCisgICAgSEFMRl9ST1VORCh2Mix2MSx2MCx2MywxNywyMSk7CisKKworc3RhdGljIFB5X2hhc2hfdAorc2lwaGFzaDI0KGNvbnN0IHZvaWQgKnNyYywgUHlfc3NpemVfdCBzcmNfc3opIHsKKyAgICBQWV9VSU5UNjRfVCBrMCA9IF9sZTY0dG9oKF9QeV9IYXNoU2VjcmV0LnNpcGhhc2guazApOworICAgIFBZX1VJTlQ2NF9UIGsxID0gX2xlNjR0b2goX1B5X0hhc2hTZWNyZXQuc2lwaGFzaC5rMSk7CisgICAgUFlfVUlOVDY0X1QgYiA9IChQWV9VSU5UNjRfVClzcmNfc3ogPDwgNTY7CisgICAgY29uc3QgUFlfVUlOVDY0X1QgKmluID0gKFBZX1VJTlQ2NF9UKilzcmM7CisKKyAgICBQWV9VSU5UNjRfVCB2MCA9IGswIF4gMHg3MzZmNmQ2NTcwNzM2NTc1VUxMOworICAgIFBZX1VJTlQ2NF9UIHYxID0gazEgXiAweDY0NmY3MjYxNmU2NDZmNmRVTEw7CisgICAgUFlfVUlOVDY0X1QgdjIgPSBrMCBeIDB4NmM3OTY3NjU2ZTY1NzI2MVVMTDsKKyAgICBQWV9VSU5UNjRfVCB2MyA9IGsxIF4gMHg3NDY1NjQ2Mjc5NzQ2NTczVUxMOworCisgICAgUFlfVUlOVDY0X1QgdDsKKyAgICBQWV9VSU5UOF9UICpwdDsKKyAgICBQWV9VSU5UOF9UICptOworCisgICAgd2hpbGUgKHNyY19zeiA+PSA4KSB7CisgICAgICAgIFBZX1VJTlQ2NF9UIG1pID0gX2xlNjR0b2goKmluKTsKKyAgICAgICAgaW4gKz0gMTsKKyAgICAgICAgc3JjX3N6IC09IDg7CisgICAgICAgIHYzIF49IG1pOworICAgICAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworICAgICAgICB2MCBePSBtaTsKKyAgICB9CisKKyAgICB0ID0gMDsKKyAgICBwdCA9IChQWV9VSU5UOF9UICopJnQ7CisgICAgbSA9IChQWV9VSU5UOF9UICopaW47CisgICAgc3dpdGNoIChzcmNfc3opIHsKKyAgICAgICAgY2FzZSA3OiBwdFs2XSA9IG1bNl07CisgICAgICAgIGNhc2UgNjogcHRbNV0gPSBtWzVdOworICAgICAgICBjYXNlIDU6IHB0WzRdID0gbVs0XTsKKyAgICAgICAgY2FzZSA0OiBQeV9NRU1DUFkocHQsIG0sIHNpemVvZihQWV9VSU5UMzJfVCkpOyBicmVhazsKKyAgICAgICAgY2FzZSAzOiBwdFsyXSA9IG1bMl07CisgICAgICAgIGNhc2UgMjogcHRbMV0gPSBtWzFdOworICAgICAgICBjYXNlIDE6IHB0WzBdID0gbVswXTsKKyAgICB9CisgICAgYiB8PSBfbGU2NHRvaCh0KTsKKworICAgIHYzIF49IGI7CisgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICB2MCBePSBiOworICAgIHYyIF49IDB4ZmY7CisgICAgRE9VQkxFX1JPVU5EKHYwLHYxLHYyLHYzKTsKKyAgICBET1VCTEVfUk9VTkQodjAsdjEsdjIsdjMpOworCisgICAgLyogbW9kaWZpZWQgKi8KKyAgICB0ID0gKHYwIF4gdjEpIF4gKHYyIF4gdjMpOworICAgIHJldHVybiAoUHlfaGFzaF90KXQ7Cit9CisKK3N0YXRpYyBQeUhhc2hfRnVuY0RlZiBQeUhhc2hfRnVuYyA9IHtzaXBoYXNoMjQsICJzaXBoYXNoMjQiLCA2NCwgMTI4fTsKKworI2VuZGlmIC8qIFB5X0hBU0hfQUxHT1JJVEhNID09IFB5X0hBU0hfU0lQSEFTSDI0ICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9QeXRob24vcHlzdGF0ZS5jIGIvUHl0aG9uL3B5c3RhdGUuYwppbmRleCA3NzJhYTUzLi4yYWMyZmQ1IDEwMDY0NAotLS0gYS9QeXRob24vcHlzdGF0ZS5jCisrKyBiL1B5dGhvbi9weXN0YXRlLmMKQEAgLTYsMTEgKzYsMTEgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDQVVUSU9OCiAKLUFsd2F5cyB1c2UgbWFsbG9jKCkgYW5kIGZyZWUoKSBkaXJlY3RseSBpbiB0aGlzIGZpbGUuICBBIG51bWJlciBvZiB0aGVzZQotZnVuY3Rpb25zIGFyZSBhZHZlcnRpc2VkIGFzIHNhZmUgdG8gY2FsbCB3aGVuIHRoZSBHSUwgaXNuJ3QgaGVsZCwgYW5kIGluCi1hIGRlYnVnIGJ1aWxkIFB5dGhvbiByZWRpcmVjdHMgKGUuZy4pIFB5TWVtX05FVyAoZXRjKSB0byBQeXRob24ncyBkZWJ1Z2dpbmcKLW9ibWFsbG9jIGZ1bmN0aW9ucy4gIFRob3NlIGFyZW4ndCB0aHJlYWQtc2FmZSAodGhleSByZWx5IG9uIHRoZSBHSUwgdG8gYXZvaWQKLXRoZSBleHBlbnNlIG9mIGRvaW5nIHRoZWlyIG93biBsb2NraW5nKS4KK0Fsd2F5cyB1c2UgUHlNZW1fUmF3TWFsbG9jKCkgYW5kIFB5TWVtX1Jhd0ZyZWUoKSBkaXJlY3RseSBpbiB0aGlzIGZpbGUuICBBCitudW1iZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBhZHZlcnRpc2VkIGFzIHNhZmUgdG8gY2FsbCB3aGVuIHRoZSBHSUwgaXNuJ3QKK2hlbGQsIGFuZCBpbiBhIGRlYnVnIGJ1aWxkIFB5dGhvbiByZWRpcmVjdHMgKGUuZy4pIFB5TWVtX05FVyAoZXRjKSB0byBQeXRob24ncworZGVidWdnaW5nIG9ibWFsbG9jIGZ1bmN0aW9ucy4gIFRob3NlIGFyZW4ndCB0aHJlYWQtc2FmZSAodGhleSByZWx5IG9uIHRoZSBHSUwKK3RvIGF2b2lkIHRoZSBleHBlbnNlIG9mIGRvaW5nIHRoZWlyIG93biBsb2NraW5nKS4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKICNpZmRlZiBIQVZFX0RMT1BFTgpAQCAtNjAsNyArNjAsNyBAQAogUHlJbnRlcnByZXRlclN0YXRlX05ldyh2b2lkKQogewogICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwID0gKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jKHNpemVvZihQeUludGVycHJldGVyU3RhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TWVtX1Jhd01hbGxvYyhzaXplb2YoUHlJbnRlcnByZXRlclN0YXRlKSk7CiAKICAgICBpZiAoaW50ZXJwICE9IE5VTEwpIHsKICAgICAgICAgSEVBRF9JTklUKCk7CkBAIC03Miw2ICs3Miw3IEBACiAgICAgICAgIGludGVycC0+bW9kdWxlc19ieV9pbmRleCA9IE5VTEw7CiAgICAgICAgIGludGVycC0+c3lzZGljdCA9IE5VTEw7CiAgICAgICAgIGludGVycC0+YnVpbHRpbnMgPSBOVUxMOworICAgICAgICBpbnRlcnAtPmJ1aWx0aW5zX2NvcHkgPSBOVUxMOwogICAgICAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gTlVMTDsKICAgICAgICAgaW50ZXJwLT5jb2RlY19zZWFyY2hfcGF0aCA9IE5VTEw7CiAgICAgICAgIGludGVycC0+Y29kZWNfc2VhcmNoX2NhY2hlID0gTlVMTDsKQEAgLTExNSw2ICsxMTYsNyBAQAogICAgIFB5X0NMRUFSKGludGVycC0+bW9kdWxlc19ieV9pbmRleCk7CiAgICAgUHlfQ0xFQVIoaW50ZXJwLT5zeXNkaWN0KTsKICAgICBQeV9DTEVBUihpbnRlcnAtPmJ1aWx0aW5zKTsKKyAgICBQeV9DTEVBUihpbnRlcnAtPmJ1aWx0aW5zX2NvcHkpOwogICAgIFB5X0NMRUFSKGludGVycC0+aW1wb3J0bGliKTsKIH0KIApAQCAtMTQ4LDcgKzE1MCw3IEBACiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGU6IHJlbWFpbmluZyB0aHJlYWRzIik7CiAgICAgKnAgPSBpbnRlcnAtPm5leHQ7CiAgICAgSEVBRF9VTkxPQ0soKTsKLSAgICBmcmVlKGludGVycCk7CisgICAgUHlNZW1fUmF3RnJlZShpbnRlcnApOwogI2lmZGVmIFdJVEhfVEhSRUFECiAgICAgaWYgKGludGVycF9oZWFkID09IE5VTEwgJiYgaGVhZF9tdXRleCAhPSBOVUxMKSB7CiAgICAgICAgIFB5VGhyZWFkX2ZyZWVfbG9jayhoZWFkX211dGV4KTsKQEAgLTE2OCw3ICsxNzAsNyBAQAogc3RhdGljIFB5VGhyZWFkU3RhdGUgKgogbmV3X3RocmVhZHN0YXRlKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwLCBpbnQgaW5pdCkKIHsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSAoUHlUaHJlYWRTdGF0ZSAqKW1hbGxvYyhzaXplb2YoUHlUaHJlYWRTdGF0ZSkpOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IChQeVRocmVhZFN0YXRlICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZihQeVRocmVhZFN0YXRlKSk7CiAKICAgICBpZiAoX1B5VGhyZWFkU3RhdGVfR2V0RnJhbWUgPT0gTlVMTCkKICAgICAgICAgX1B5VGhyZWFkU3RhdGVfR2V0RnJhbWUgPSB0aHJlYWRzdGF0ZV9nZXRmcmFtZTsKQEAgLTE4Miw3ICsxODQsNiBAQAogICAgICAgICB0c3RhdGUtPnJlY3Vyc2lvbl9jcml0aWNhbCA9IDA7CiAgICAgICAgIHRzdGF0ZS0+dHJhY2luZyA9IDA7CiAgICAgICAgIHRzdGF0ZS0+dXNlX3RyYWNpbmcgPSAwOwotICAgICAgICB0c3RhdGUtPnRpY2tfY291bnRlciA9IDA7CiAgICAgICAgIHRzdGF0ZS0+Z2lsc3RhdGVfY291bnRlciA9IDA7CiAgICAgICAgIHRzdGF0ZS0+YXN5bmNfZXhjID0gTlVMTDsKICNpZmRlZiBXSVRIX1RIUkVBRApAQCAtMjA4LDEyICsyMDksMTcgQEAKIAogICAgICAgICB0c3RhdGUtPnRyYXNoX2RlbGV0ZV9uZXN0aW5nID0gMDsKICAgICAgICAgdHN0YXRlLT50cmFzaF9kZWxldGVfbGF0ZXIgPSBOVUxMOworICAgICAgICB0c3RhdGUtPm9uX2RlbGV0ZSA9IE5VTEw7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEgPSBOVUxMOwogCiAgICAgICAgIGlmIChpbml0KQogICAgICAgICAgICAgX1B5VGhyZWFkU3RhdGVfSW5pdCh0c3RhdGUpOwogCiAgICAgICAgIEhFQURfTE9DSygpOworICAgICAgICB0c3RhdGUtPnByZXYgPSBOVUxMOwogICAgICAgICB0c3RhdGUtPm5leHQgPSBpbnRlcnAtPnRzdGF0ZV9oZWFkOworICAgICAgICBpZiAodHN0YXRlLT5uZXh0KQorICAgICAgICAgICAgdHN0YXRlLT5uZXh0LT5wcmV2ID0gdHN0YXRlOwogICAgICAgICBpbnRlcnAtPnRzdGF0ZV9oZWFkID0gdHN0YXRlOwogICAgICAgICBIRUFEX1VOTE9DSygpOwogICAgIH0KQEAgLTMxNyw2ICszMjMsMzEgQEAKICAgICByZXR1cm4gUHlMaXN0X1NldEl0ZW0oc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgsIGluZGV4LCBQeV9Ob25lKTsKIH0KIAorLyogdXNlZCBieSBpbXBvcnQuYzpQeUltcG9ydF9DbGVhbnVwICovCit2b2lkCitfUHlTdGF0ZV9DbGVhck1vZHVsZXModm9pZCkKK3sKKyAgICBQeUludGVycHJldGVyU3RhdGUgKnN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKS0+aW50ZXJwOworICAgIGlmIChzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCkgeworICAgICAgICBQeV9zc2l6ZV90IGk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBQeUxpc3RfR0VUX1NJWkUoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpOyBpKyspIHsKKyAgICAgICAgICAgIFB5T2JqZWN0ICptID0gUHlMaXN0X0dFVF9JVEVNKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4LCBpKTsKKyAgICAgICAgICAgIGlmIChQeU1vZHVsZV9DaGVjayhtKSkgeworICAgICAgICAgICAgICAgIC8qIGNsZWFudXAgdGhlIHNhdmVkIGNvcHkgb2YgbW9kdWxlIGRpY3RzICovCisgICAgICAgICAgICAgICAgUHlNb2R1bGVEZWYgKm1kID0gUHlNb2R1bGVfR2V0RGVmKG0pOworICAgICAgICAgICAgICAgIGlmIChtZCkKKyAgICAgICAgICAgICAgICAgICAgUHlfQ0xFQVIobWQtPm1fYmFzZS5tX2NvcHkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIFNldHRpbmcgbW9kdWxlc19ieV9pbmRleCB0byBOVUxMIGNvdWxkIGJlIGRhbmdlcm91cywgc28gd2UKKyAgICAgICAgICAgY2xlYXIgdGhlIGxpc3QgaW5zdGVhZC4gKi8KKyAgICAgICAgaWYgKFB5TGlzdF9TZXRTbGljZShzdGF0ZS0+bW9kdWxlc19ieV9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBQeUxpc3RfR0VUX1NJWkUoc3RhdGUtPm1vZHVsZXNfYnlfaW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKQorICAgICAgICAgICAgUHlFcnJfV3JpdGVVbnJhaXNhYmxlKHN0YXRlLT5tb2R1bGVzX2J5X2luZGV4KTsKKyAgICB9Cit9CisKIHZvaWQKIFB5VGhyZWFkU3RhdGVfQ2xlYXIoUHlUaHJlYWRTdGF0ZSAqdHN0YXRlKQogewpAQCAtMzQ5LDM3ICszODAsMjMgQEAKIHRzdGF0ZV9kZWxldGVfY29tbW9uKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKIHsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycDsKLSAgICBQeVRocmVhZFN0YXRlICoqcDsKLSAgICBQeVRocmVhZFN0YXRlICpwcmV2X3AgPSBOVUxMOwogICAgIGlmICh0c3RhdGUgPT0gTlVMTCkKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlUaHJlYWRTdGF0ZV9EZWxldGU6IE5VTEwgdHN0YXRlIik7CiAgICAgaW50ZXJwID0gdHN0YXRlLT5pbnRlcnA7CiAgICAgaWYgKGludGVycCA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeVRocmVhZFN0YXRlX0RlbGV0ZTogTlVMTCBpbnRlcnAiKTsKICAgICBIRUFEX0xPQ0soKTsKLSAgICBmb3IgKHAgPSAmaW50ZXJwLT50c3RhdGVfaGVhZDsgOyBwID0gJigqcCktPm5leHQpIHsKLSAgICAgICAgaWYgKCpwID09IE5VTEwpCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKAotICAgICAgICAgICAgICAgICJQeVRocmVhZFN0YXRlX0RlbGV0ZTogaW52YWxpZCB0c3RhdGUiKTsKLSAgICAgICAgaWYgKCpwID09IHRzdGF0ZSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAvKiBTYW5pdHkgY2hlY2suICBUaGVzZSBzdGF0ZXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBidXQgaWYKLSAgICAgICAgICogdGhleSBkbyB3ZSBtdXN0IGFib3J0LiAgT3RoZXJ3aXNlIHdlJ2xsIGVuZCB1cCBzcGlubmluZyBpbgotICAgICAgICAgKiBpbiBhIHRpZ2h0IGxvb3Agd2l0aCB0aGUgbG9jayBoZWxkLiAgQSBzaW1pbGFyIGNoZWNrIGlzIGRvbmUKLSAgICAgICAgICogaW4gdGhyZWFkLmMgZmluZF9rZXkoKS4gICovCi0gICAgICAgIGlmICgqcCA9PSBwcmV2X3ApCi0gICAgICAgICAgICBQeV9GYXRhbEVycm9yKAotICAgICAgICAgICAgICAgICJQeVRocmVhZFN0YXRlX0RlbGV0ZTogc21hbGwgY2lyY3VsYXIgbGlzdCghKSIKLSAgICAgICAgICAgICAgICAiIGFuZCB0c3RhdGUgbm90IGZvdW5kLiIpOwotICAgICAgICBwcmV2X3AgPSAqcDsKLSAgICAgICAgaWYgKCgqcCktPm5leHQgPT0gaW50ZXJwLT50c3RhdGVfaGVhZCkKLSAgICAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCi0gICAgICAgICAgICAgICAgIlB5VGhyZWFkU3RhdGVfRGVsZXRlOiBjaXJjdWxhciBsaXN0KCEpIGFuZCIKLSAgICAgICAgICAgICAgICAiIHRzdGF0ZSBub3QgZm91bmQuIik7Ci0gICAgfQotICAgICpwID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPnByZXYpCisgICAgICAgIHRzdGF0ZS0+cHJldi0+bmV4dCA9IHRzdGF0ZS0+bmV4dDsKKyAgICBlbHNlCisgICAgICAgIGludGVycC0+dHN0YXRlX2hlYWQgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+bmV4dCkKKyAgICAgICAgdHN0YXRlLT5uZXh0LT5wcmV2ID0gdHN0YXRlLT5wcmV2OwogICAgIEhFQURfVU5MT0NLKCk7Ci0gICAgZnJlZSh0c3RhdGUpOworICAgIGlmICh0c3RhdGUtPm9uX2RlbGV0ZSAhPSBOVUxMKSB7CisgICAgICAgIHRzdGF0ZS0+b25fZGVsZXRlKHRzdGF0ZS0+b25fZGVsZXRlX2RhdGEpOworICAgIH0KKyAgICBQeU1lbV9SYXdGcmVlKHRzdGF0ZSk7CiB9CiAKIApAQCAtNDE0LDYgKzQzMSw0MyBAQAogI2VuZGlmIC8qIFdJVEhfVEhSRUFEICovCiAKIAorLyoKKyAqIERlbGV0ZSBhbGwgdGhyZWFkIHN0YXRlcyBleGNlcHQgdGhlIG9uZSBwYXNzZWQgYXMgYXJndW1lbnQuCisgKiBOb3RlIHRoYXQsIGlmIHRoZXJlIGlzIGEgY3VycmVudCB0aHJlYWQgc3RhdGUsIGl0ICptdXN0KiBiZSB0aGUgb25lCisgKiBwYXNzZWQgYXMgYXJndW1lbnQuICBBbHNvLCB0aGlzIHdvbid0IHRvdWNoIGFueSBvdGhlciBpbnRlcnByZXRlcnMKKyAqIHRoYW4gdGhlIGN1cnJlbnQgb25lLCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoaWNoIHRocmVhZCBzdGF0ZSBzaG91bGQKKyAqIGJlIGtlcHQgaW4gdGhvc2Ugb3RoZXIgaW50ZXJwcmV0ZXJlcy4KKyAqLwordm9pZAorX1B5VGhyZWFkU3RhdGVfRGVsZXRlRXhjZXB0KFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSkKK3sKKyAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IHRzdGF0ZS0+aW50ZXJwOworICAgIFB5VGhyZWFkU3RhdGUgKnAsICpuZXh0LCAqZ2FyYmFnZTsKKyAgICBIRUFEX0xPQ0soKTsKKyAgICAvKiBSZW1vdmUgYWxsIHRocmVhZCBzdGF0ZXMsIGV4Y2VwdCB0c3RhdGUsIGZyb20gdGhlIGxpbmtlZCBsaXN0IG9mCisgICAgICAgdGhyZWFkIHN0YXRlcy4gIFRoaXMgd2lsbCBhbGxvdyBjYWxsaW5nIFB5VGhyZWFkU3RhdGVfQ2xlYXIoKQorICAgICAgIHdpdGhvdXQgaG9sZGluZyB0aGUgbG9jay4gKi8KKyAgICBnYXJiYWdlID0gaW50ZXJwLT50c3RhdGVfaGVhZDsKKyAgICBpZiAoZ2FyYmFnZSA9PSB0c3RhdGUpCisgICAgICAgIGdhcmJhZ2UgPSB0c3RhdGUtPm5leHQ7CisgICAgaWYgKHRzdGF0ZS0+cHJldikKKyAgICAgICAgdHN0YXRlLT5wcmV2LT5uZXh0ID0gdHN0YXRlLT5uZXh0OworICAgIGlmICh0c3RhdGUtPm5leHQpCisgICAgICAgIHRzdGF0ZS0+bmV4dC0+cHJldiA9IHRzdGF0ZS0+cHJldjsKKyAgICB0c3RhdGUtPnByZXYgPSB0c3RhdGUtPm5leHQgPSBOVUxMOworICAgIGludGVycC0+dHN0YXRlX2hlYWQgPSB0c3RhdGU7CisgICAgSEVBRF9VTkxPQ0soKTsKKyAgICAvKiBDbGVhciBhbmQgZGVhbGxvY2F0ZSBhbGwgc3RhbGUgdGhyZWFkIHN0YXRlcy4gIEV2ZW4gaWYgdGhpcworICAgICAgIGV4ZWN1dGVzIFB5dGhvbiBjb2RlLCB3ZSBzaG91bGQgYmUgc2FmZSBzaW5jZSBpdCBleGVjdXRlcworICAgICAgIGluIHRoZSBjdXJyZW50IHRocmVhZCwgbm90IG9uZSBvZiB0aGUgc3RhbGUgdGhyZWFkcy4gKi8KKyAgICBmb3IgKHAgPSBnYXJiYWdlOyBwOyBwID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gcC0+bmV4dDsKKyAgICAgICAgUHlUaHJlYWRTdGF0ZV9DbGVhcihwKTsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShwKTsKKyAgICB9Cit9CisKKwogUHlUaHJlYWRTdGF0ZSAqCiBQeVRocmVhZFN0YXRlX0dldCh2b2lkKQogewpAQCAtNjcxLDE4ICs3MjUsMTggQEAKIAogICAgICAgIFRoZSBvbmx5IHNpdHVhdGlvbiB3aGVyZSB5b3UgY2FuIGxlZ2l0aW1hdGVseSBoYXZlIG1vcmUgdGhhbiBvbmUKICAgICAgICB0aHJlYWQgc3RhdGUgZm9yIGFuIE9TIGxldmVsIHRocmVhZCBpcyB3aGVuIHRoZXJlIGFyZSBtdWx0aXBsZQotICAgICAgIGludGVycHJldGVycywgd2hlbjoKKyAgICAgICBpbnRlcnByZXRlcnMuCiAKLSAgICAgICAgICAgYSkgWW91IHNob3VsZG4ndCByZWFsbHkgYmUgdXNpbmcgdGhlIFB5R0lMU3RhdGVfIEFQSXMgYW55d2F5LAotICAgICAgICAgIGFuZDoKKyAgICAgICBZb3Ugc2hvdWxkbid0IHJlYWxseSBiZSB1c2luZyB0aGUgUHlHSUxTdGF0ZV8gQVBJcyBhbnl3YXkgKHNlZSBpc3N1ZXMKKyAgICAgICAjMTA5MTUgYW5kICMxNTc1MSkuCiAKLSAgICAgICAgICAgYikgVGhlIHNsaWdodGx5IG9kZCB3YXkgUHlUaHJlYWRfc2V0X2tleV92YWx1ZSB3b3JrcyAoc2VlCi0gICAgICAgICAgY29tbWVudHMgYnkgaXRzIGltcGxlbWVudGF0aW9uKSBtZWFucyB0aGF0IHRoZSBmaXJzdCB0aHJlYWQKLSAgICAgICAgICBzdGF0ZSBjcmVhdGVkIGZvciB0aGF0IGdpdmVuIE9TIGxldmVsIHRocmVhZCB3aWxsICJ3aW4iLAotICAgICAgICAgIHdoaWNoIHNlZW1zIHJlYXNvbmFibGUgYmVoYXZpb3VyLgorICAgICAgIFRoZSBmaXJzdCB0aHJlYWQgc3RhdGUgY3JlYXRlZCBmb3IgdGhhdCBnaXZlbiBPUyBsZXZlbCB0aHJlYWQgd2lsbAorICAgICAgICJ3aW4iLCB3aGljaCBzZWVtcyByZWFzb25hYmxlIGJlaGF2aW91ci4KICAgICAqLwotICAgIGlmIChQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXksICh2b2lkICopdHN0YXRlKSA8IDApCi0gICAgICAgIFB5X0ZhdGFsRXJyb3IoIkNvdWxkbid0IGNyZWF0ZSBhdXRvVExTa2V5IG1hcHBpbmciKTsKKyAgICBpZiAoUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChQeVRocmVhZF9zZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXksICh2b2lkICopdHN0YXRlKSA8IDApCisgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJDb3VsZG4ndCBjcmVhdGUgYXV0b1RMU2tleSBtYXBwaW5nIik7CisgICAgfQogCiAgICAgLyogUHlHSUxTdGF0ZV9SZWxlYXNlIG11c3Qgbm90IHRyeSB0byBkZWxldGUgdGhpcyB0aHJlYWQgc3RhdGUuICovCiAgICAgdHN0YXRlLT5naWxzdGF0ZV9jb3VudGVyID0gMTsKQEAgLTY5Nyw2ICs3NTEsMTUgQEAKICAgICByZXR1cm4gKFB5VGhyZWFkU3RhdGUgKilQeVRocmVhZF9nZXRfa2V5X3ZhbHVlKGF1dG9UTFNrZXkpOwogfQogCitpbnQKK1B5R0lMU3RhdGVfQ2hlY2sodm9pZCkKK3sKKyAgICAvKiBjYW4ndCB1c2UgUHlUaHJlYWRTdGF0ZV9HZXQoKSBzaW5jZSBpdCB3aWxsIGFzc2VydCB0aGF0IGl0IGhhcyB0aGUgR0lMICovCisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gKFB5VGhyZWFkU3RhdGUqKV9QeV9hdG9taWNfbG9hZF9yZWxheGVkKAorICAgICAgICAmX1B5VGhyZWFkU3RhdGVfQ3VycmVudCk7CisgICAgcmV0dXJuIHRzdGF0ZSAmJiAodHN0YXRlID09IFB5R0lMU3RhdGVfR2V0VGhpc1RocmVhZFN0YXRlKCkpOworfQorCiBQeUdJTFN0YXRlX1NUQVRFCiBQeUdJTFN0YXRlX0Vuc3VyZSh2b2lkKQogewpAQCAtNzEwLDYgKzc3MywxMSBAQAogICAgIGFzc2VydChhdXRvSW50ZXJwcmV0ZXJTdGF0ZSk7IC8qIFB5X0luaXRpYWxpemUoKSBoYXNuJ3QgYmVlbiBjYWxsZWQhICovCiAgICAgdGN1ciA9IChQeVRocmVhZFN0YXRlICopUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShhdXRvVExTa2V5KTsKICAgICBpZiAodGN1ciA9PSBOVUxMKSB7CisgICAgICAgIC8qIEF0IHN0YXJ0dXAsIFB5dGhvbiBoYXMgbm8gY29uY3JldGUgR0lMLiBJZiBQeUdJTFN0YXRlX0Vuc3VyZSgpIGlzCisgICAgICAgICAgIGNhbGxlZCBmcm9tIGEgbmV3IHRocmVhZCBmb3IgdGhlIGZpcnN0IHRpbWUsIHdlIG5lZWQgdGhlIGNyZWF0ZSB0aGUKKyAgICAgICAgICAgR0lMLiAqLworICAgICAgICBQeUV2YWxfSW5pdFRocmVhZHMoKTsKKwogICAgICAgICAvKiBDcmVhdGUgYSBuZXcgdGhyZWFkIHN0YXRlIGZvciB0aGlzIHRocmVhZCAqLwogICAgICAgICB0Y3VyID0gUHlUaHJlYWRTdGF0ZV9OZXcoYXV0b0ludGVycHJldGVyU3RhdGUpOwogICAgICAgICBpZiAodGN1ciA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5c3RydG9kLmMgYi9QeXRob24vcHlzdHJ0b2QuYwppbmRleCA0YWI4ZjA4Li4yMDljOTA4IDEwMDY0NAotLS0gYS9QeXRob24vcHlzdHJ0b2QuYworKysgYi9QeXRob24vcHlzdHJ0b2QuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiBfUHlPU19hc2NpaV9zdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cikKIHsKICAgICBjaGFyICpmYWlsX3BvczsKLSAgICBkb3VibGUgdmFsID0gLTEuMDsKKyAgICBkb3VibGUgdmFsOwogICAgIHN0cnVjdCBsY29udiAqbG9jYWxlX2RhdGE7CiAgICAgY29uc3QgY2hhciAqZGVjaW1hbF9wb2ludDsKICAgICBzaXplX3QgZGVjaW1hbF9wb2ludF9sZW47CkBAIC0zMjUsNyArMzI1LDcgQEAKIAogICAgT24gb3ZlcmZsb3cgKGUuZy4sIHdoZW4gdHJ5aW5nIHRvIGNvbnZlcnQgJzFlNTAwJyBvbiBhbiBJRUVFIDc1NCBtYWNoaW5lKSwKICAgIGlmIG92ZXJmbG93X2V4Y2VwdGlvbiBpcyBOVUxMIHRoZW4gKy1QeV9IVUdFX1ZBTCBpcyByZXR1cm5lZCwgYW5kIG5vIFB5dGhvbgotICAgZXhjZXB0aW9uIGlzIHJhaXNlZC4gIE90aGVyd2lzZSwgb3ZlcmZsb3dfZXhjZXB0aW9uIHNob3VsZCBwb2ludCB0byBhCisgICBleGNlcHRpb24gaXMgcmFpc2VkLiAgT3RoZXJ3aXNlLCBvdmVyZmxvd19leGNlcHRpb24gc2hvdWxkIHBvaW50IHRvCiAgICBhIFB5dGhvbiBleGNlcHRpb24sIHRoaXMgZXhjZXB0aW9uIHdpbGwgYmUgcmFpc2VkLCAtMS4wIHdpbGwgYmUgcmV0dXJuZWQsCiAgICBhbmQgKmVuZHB0ciB3aWxsIHBvaW50IGp1c3QgcGFzdCB0aGUgZW5kIG9mIHRoZSBjb252ZXJ0ZWQgdmFsdWUuCiAKQEAgLTkyMyw3ICs5MjMsNyBAQAogCiBzdGF0aWMgY2hhciAqCiBmb3JtYXRfZmxvYXRfc2hvcnQoZG91YmxlIGQsIGNoYXIgZm9ybWF0X2NvZGUsCi0gICAgICAgICAgICAgICAgICAgaW50IG1vZGUsIFB5X3NzaXplX3QgcHJlY2lzaW9uLAorICAgICAgICAgICAgICAgICAgIGludCBtb2RlLCBpbnQgcHJlY2lzaW9uLAogICAgICAgICAgICAgICAgICAgIGludCBhbHdheXNfYWRkX3NpZ24sIGludCBhZGRfZG90XzBfaWZfaW50ZWdlciwKICAgICAgICAgICAgICAgICAgICBpbnQgdXNlX2FsdF9mb3JtYXR0aW5nLCBjaGFyICoqZmxvYXRfc3RyaW5ncywgaW50ICp0eXBlKQogewpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKICAgICAvKiBpZiB1c2luZyBhbiBleHBvbmVudCwgcmVzZXQgZGVjaW1hbCBwb2ludCBwb3NpdGlvbiB0byAxIGFuZCBhZGp1c3QKICAgICAgICBleHBvbmVudCBhY2NvcmRpbmdseS4qLwogICAgIGlmICh1c2VfZXhwKSB7Ci0gICAgICAgIGV4cCA9IGRlY3B0IC0gMTsKKyAgICAgICAgZXhwID0gKGludClkZWNwdCAtIDE7CiAgICAgICAgIGRlY3B0ID0gMTsKICAgICB9CiAgICAgLyogZW5zdXJlIHZkaWdpdHNfc3RhcnQgPCBkZWNwdCA8PSB2ZGlnaXRzX2VuZCwgb3IgdmRpZ2l0c19zdGFydCA8CmRpZmYgLS1naXQgYS9QeXRob24vcHl0aG9ucnVuLmMgYi9QeXRob24vcHl0aG9ucnVuLmMKaW5kZXggOTFkNTZiNy4uMDk2N2E0NyAxMDA2NDQKLS0tIGEvUHl0aG9uL3B5dGhvbnJ1bi5jCisrKyBiL1B5dGhvbi9weXRob25ydW4uYwpAQCAtMzUsMTIgKzM1LDQ2IEBACiAjZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KICNlbmRpZgogCisjaWZkZWYgX19nbnVfaHVyZF9fCisjZGVmaW5lIFBBVEhfTUFYIE1BWFBBVEhMRU4KKyNlbmRpZgorCitfUHlfSURFTlRJRklFUihidWlsdGlucyk7CitfUHlfSURFTlRJRklFUihleGNlcHRob29rKTsKK19QeV9JREVOVElGSUVSKGZsdXNoKTsKK19QeV9JREVOVElGSUVSKGxhc3RfdHJhY2ViYWNrKTsKK19QeV9JREVOVElGSUVSKGxhc3RfdHlwZSk7CitfUHlfSURFTlRJRklFUihsYXN0X3ZhbHVlKTsKK19QeV9JREVOVElGSUVSKG5hbWUpOworX1B5X0lERU5USUZJRVIocHMxKTsKK19QeV9JREVOVElGSUVSKHBzMik7CitfUHlfSURFTlRJRklFUihzdGRpbik7CitfUHlfSURFTlRJRklFUihzdGRvdXQpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKK19QeV9zdGF0aWNfc3RyaW5nKFB5SWRfc3RyaW5nLCAiPHN0cmluZz4iKTsKKworI2lmZGVmIFB5X1JFRl9ERUJVRworc3RhdGljCit2b2lkIF9wcmludF90b3RhbF9yZWZzKHZvaWQpIHsKKyAgICBQeU9iamVjdCAqeG9wdGlvbnMsICp2YWx1ZTsKKyAgICBfUHlfSURFTlRJRklFUihzaG93cmVmY291bnQpOworCisgICAgeG9wdGlvbnMgPSBQeVN5c19HZXRYT3B0aW9ucygpOworICAgIGlmICh4b3B0aW9ucyA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgdmFsdWUgPSBfUHlEaWN0X0dldEl0ZW1JZCh4b3B0aW9ucywgJlB5SWRfc2hvd3JlZmNvdW50KTsKKyAgICBpZiAodmFsdWUgPT0gUHlfVHJ1ZSkKKyAgICAgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgIlslIiBQWV9GT1JNQVRfU0laRV9UICJkIHJlZnMsICIKKyAgICAgICAgICAgICAgICAiJSIgUFlfRk9STUFUX1NJWkVfVCAiZCBibG9ja3NdXG4iLAorICAgICAgICAgICAgICAgIF9QeV9HZXRSZWZUb3RhbCgpLCBfUHlfR2V0QWxsb2NhdGVkQmxvY2tzKCkpOworfQorI2VuZGlmCisKICNpZm5kZWYgUHlfUkVGX0RFQlVHCiAjZGVmaW5lIFBSSU5UX1RPVEFMX1JFRlMoKQogI2Vsc2UgLyogUHlfUkVGX0RFQlVHICovCi0jZGVmaW5lIFBSSU5UX1RPVEFMX1JFRlMoKSBmcHJpbnRmKHN0ZGVyciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgIlslIiBQWV9GT1JNQVRfU0laRV9UICJkIHJlZnNdXG4iLCAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgX1B5X0dldFJlZlRvdGFsKCkpCisjZGVmaW5lIFBSSU5UX1RPVEFMX1JFRlMoKSBfcHJpbnRfdG90YWxfcmVmcygpCiAjZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCkBAIC01Nyw3ICs5MSw3IEBACiBzdGF0aWMgdm9pZCBpbml0c2l0ZSh2b2lkKTsKIHN0YXRpYyBpbnQgaW5pdHN0ZGlvKHZvaWQpOwogc3RhdGljIHZvaWQgZmx1c2hfaW8odm9pZCk7Ci1zdGF0aWMgUHlPYmplY3QgKnJ1bl9tb2QobW9kX3R5LCBjb25zdCBjaGFyICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICosCitzdGF0aWMgUHlPYmplY3QgKnJ1bl9tb2QobW9kX3R5LCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKiwgUHlBcmVuYSAqKTsKIHN0YXRpYyBQeU9iamVjdCAqcnVuX3B5Y19maWxlKEZJTEUgKiwgY29uc3QgY2hhciAqLCBQeU9iamVjdCAqLCBQeU9iamVjdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICopOwpAQCAtNjgsMTEgKzEwMiwxNSBAQAogc3RhdGljIHZvaWQgd2FpdF9mb3JfdGhyZWFkX3NodXRkb3duKHZvaWQpOwogc3RhdGljIHZvaWQgY2FsbF9sbF9leGl0ZnVuY3Modm9pZCk7CiBleHRlcm4gaW50IF9QeVVuaWNvZGVfSW5pdCh2b2lkKTsKK2V4dGVybiBpbnQgX1B5U3RydWN0U2VxdWVuY2VfSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9QeVVuaWNvZGVfRmluaSh2b2lkKTsKIGV4dGVybiBpbnQgX1B5TG9uZ19Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgUHlMb25nX0Zpbmkodm9pZCk7CiBleHRlcm4gaW50IF9QeUZhdWx0aGFuZGxlcl9Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgX1B5RmF1bHRoYW5kbGVyX0Zpbmkodm9pZCk7CitleHRlcm4gdm9pZCBfUHlIYXNoX0Zpbmkodm9pZCk7CitleHRlcm4gaW50IF9QeVRyYWNlTWFsbG9jX0luaXQodm9pZCk7CitleHRlcm4gaW50IF9QeVRyYWNlTWFsbG9jX0Zpbmkodm9pZCk7CiAKICNpZmRlZiBXSVRIX1RIUkVBRAogZXh0ZXJuIHZvaWQgX1B5R0lMU3RhdGVfSW5pdChQeUludGVycHJldGVyU3RhdGUgKiwgUHlUaHJlYWRTdGF0ZSAqKTsKQEAgLTkzLDYgKzEzMSw3IEBACiBpbnQgUHlfTm9Vc2VyU2l0ZURpcmVjdG9yeSA9IDA7IC8qIGZvciAtcyBhbmQgc2l0ZS5weSAqLwogaW50IFB5X1VuYnVmZmVyZWRTdGRpb0ZsYWcgPSAwOyAvKiBVbmJ1ZmZlcmVkIGJpbmFyeSBzdGR7aW4sb3V0LGVycn0gKi8KIGludCBQeV9IYXNoUmFuZG9taXphdGlvbkZsYWcgPSAwOyAvKiBmb3IgLVIgYW5kIFBZVEhPTkhBU0hTRUVEICovCitpbnQgUHlfSXNvbGF0ZWRGbGFnID0gMDsgLyogZm9yIC1JLCBpc29sYXRlIGZyb20gdXNlcidzIGVudiAqLwogCiBQeVRocmVhZFN0YXRlICpfUHlfRmluYWxpemluZyA9IE5VTEw7CiAKQEAgLTExOCw2ICsxNTcsNDUgQEAKICAgICByZXR1cm4gaW5pdGlhbGl6ZWQ7CiB9CiAKKy8qIEhlbHBlciB0byBhbGxvdyBhbiBlbWJlZGRpbmcgYXBwbGljYXRpb24gdG8gb3ZlcnJpZGUgdGhlIG5vcm1hbAorICogbWVjaGFuaXNtIHRoYXQgYXR0ZW1wdHMgdG8gZmlndXJlIG91dCBhbiBhcHByb3ByaWF0ZSBJTyBlbmNvZGluZworICovCisKK3N0YXRpYyBjaGFyICpfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyA9IE5VTEw7CitzdGF0aWMgY2hhciAqX1B5X1N0YW5kYXJkU3RyZWFtRXJyb3JzID0gTlVMTDsKKworaW50CitQeV9TZXRTdGFuZGFyZFN0cmVhbUVuY29kaW5nKGNvbnN0IGNoYXIgKmVuY29kaW5nLCBjb25zdCBjaGFyICplcnJvcnMpCit7CisgICAgaWYgKFB5X0lzSW5pdGlhbGl6ZWQoKSkgeworICAgICAgICAvKiBUaGlzIGlzIHRvbyBsYXRlIHRvIGhhdmUgYW55IGVmZmVjdCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qIENhbid0IGNhbGwgUHlFcnJfTm9NZW1vcnkoKSBvbiBlcnJvcnMsIGFzIFB5dGhvbiBoYXNuJ3QgYmVlbgorICAgICAqIGluaXRpYWxpc2VkIHlldC4KKyAgICAgKgorICAgICAqIEhvd2V2ZXIsIHRoZSByYXcgbWVtb3J5IGFsbG9jYXRvcnMgYXJlIGluaXRpYWxpc2VkIGFwcHJvcHJpYXRlbHkKKyAgICAgKiBhcyBDIHN0YXRpYyB2YXJpYWJsZXMsIHNvIF9QeU1lbV9SYXdTdHJkdXAgaXMgT0sgZXZlbiB0aG91Z2gKKyAgICAgKiBQeV9Jbml0aWFsaXplIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuCisgICAgICovCisgICAgaWYgKGVuY29kaW5nKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nID0gX1B5TWVtX1Jhd1N0cmR1cChlbmNvZGluZyk7CisgICAgICAgIGlmICghX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoZXJyb3JzKSB7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IF9QeU1lbV9SYXdTdHJkdXAoZXJyb3JzKTsKKyAgICAgICAgaWYgKCFfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnMpIHsKKyAgICAgICAgICAgIGlmIChfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZykgeworICAgICAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCiAvKiBHbG9iYWwgaW5pdGlhbGl6YXRpb25zLiAgQ2FuIGJlIHVuZG9uZSBieSBQeV9GaW5hbGl6ZSgpLiAgRG9uJ3QKICAgIGNhbGwgdGhpcyB0d2ljZSB3aXRob3V0IGFuIGludGVydmVuaW5nIFB5X0ZpbmFsaXplKCkgY2FsbC4gIFdoZW4KICAgIGluaXRpYWxpemF0aW9ucyBmYWlsLCBhIGZhdGFsIGVycm9yIGlzIGlzc3VlZCBhbmQgdGhlIGZ1bmN0aW9uIGRvZXMKQEAgLTE0Niw3ICsyMjQsNiBAQAogewogICAgIGNoYXIgKm5hbWVfdXRmOCwgKm5hbWVfc3RyOwogICAgIFB5T2JqZWN0ICpjb2RlYywgKm5hbWUgPSBOVUxMOwotICAgIF9QeV9JREVOVElGSUVSKG5hbWUpOwogCiAgICAgY29kZWMgPSBfUHlDb2RlY19Mb29rdXAoZW5jb2RpbmcpOwogICAgIGlmICghY29kZWMpCkBAIC0xNjAsNyArMjM3LDcgQEAKICAgICBuYW1lX3V0ZjggPSBfUHlVbmljb2RlX0FzU3RyaW5nKG5hbWUpOwogICAgIGlmIChuYW1lX3V0ZjggPT0gTlVMTCkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBuYW1lX3N0ciA9IHN0cmR1cChuYW1lX3V0ZjgpOworICAgIG5hbWVfc3RyID0gX1B5TWVtX1Jhd1N0cmR1cChuYW1lX3V0ZjgpOwogICAgIFB5X0RFQ1JFRihuYW1lKTsKICAgICBpZiAobmFtZV9zdHIgPT0gTlVMTCkgewogICAgICAgICBQeUVycl9Ob01lbW9yeSgpOwpAQCAtMzEzLDcgKzM5MCw4IEBACiAgICAgaWYgKCFQeUJ5dGVBcnJheV9Jbml0KCkpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgYnl0ZWFycmF5Iik7CiAKLSAgICBfUHlGbG9hdF9Jbml0KCk7CisgICAgaWYgKCFfUHlGbG9hdF9Jbml0KCkpCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXQgZmxvYXQiKTsKIAogICAgIGludGVycC0+bW9kdWxlcyA9IFB5RGljdF9OZXcoKTsKICAgICBpZiAoaW50ZXJwLT5tb2R1bGVzID09IE5VTEwpCkBAIC0zMjIsNiArNDAwLDggQEAKICAgICAvKiBJbml0IFVuaWNvZGUgaW1wbGVtZW50YXRpb247IHJlbGllcyBvbiB0aGUgY29kZWMgcmVnaXN0cnkgKi8KICAgICBpZiAoX1B5VW5pY29kZV9Jbml0KCkgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBpbml0aWFsaXplIHVuaWNvZGUiKTsKKyAgICBpZiAoX1B5U3RydWN0U2VxdWVuY2VfSW5pdCgpIDwgMCkKKyAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfSW5pdGlhbGl6ZTogY2FuJ3QgaW5pdGlhbGl6ZSBzdHJ1Y3RzZXEiKTsKIAogICAgIGJpbW9kID0gX1B5QnVpbHRpbl9Jbml0KCk7CiAgICAgaWYgKGJpbW9kID09IE5VTEwpCkBAIC0zNTIsNyArNDMyLDcgQEAKICAgICBwc3RkZXJyID0gUHlGaWxlX05ld1N0ZFByaW50ZXIoZmlsZW5vKHN0ZGVycikpOwogICAgIGlmIChwc3RkZXJyID09IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IHNldCBwcmVsaW1pbmFyeSBzdGRlcnIiKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZGVyciIsIHBzdGRlcnIpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIsIHBzdGRlcnIpOwogICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHBzdGRlcnIpOwogICAgIFB5X0RFQ1JFRihwc3RkZXJyKTsKIApAQCAtMzgwLDYgKzQ2MCw5IEBACiAgICAgaWYgKGluc3RhbGxfc2lncykKICAgICAgICAgaW5pdHNpZ3MoKTsgLyogU2lnbmFsIGhhbmRsaW5nIHN0dWZmLCBpbmNsdWRpbmcgaW5pdGludHIoKSAqLwogCisgICAgaWYgKF9QeVRyYWNlTWFsbG9jX0luaXQoKSA8IDApCisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGluaXRpYWxpemUgdHJhY2VtYWxsb2MiKTsKKwogICAgIGluaXRtYWluKGludGVycCk7IC8qIE1vZHVsZSBfX21haW5fXyAqLwogICAgIGlmIChpbml0c3RkaW8oKSA8IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoCkBAIC00MzcsMTAgKzUyMCw5IEBACiBzdGF0aWMgdm9pZAogZmx1c2hfc3RkX2ZpbGVzKHZvaWQpCiB7Ci0gICAgUHlPYmplY3QgKmZvdXQgPSBQeVN5c19HZXRPYmplY3QoInN0ZG91dCIpOwotICAgIFB5T2JqZWN0ICpmZXJyID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRlcnIiKTsKKyAgICBQeU9iamVjdCAqZm91dCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOworICAgIFB5T2JqZWN0ICpmZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CiAgICAgUHlPYmplY3QgKnRtcDsKLSAgICBfUHlfSURFTlRJRklFUihmbHVzaCk7CiAKICAgICBpZiAoZm91dCAhPSBOVUxMICYmIGZvdXQgIT0gUHlfTm9uZSAmJiAhZmlsZV9pc19jbG9zZWQoZm91dCkpIHsKICAgICAgICAgdG1wID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmb3V0LCAmUHlJZF9mbHVzaCwgIiIpOwpAQCAtNTA0LDcgKzU4Niw3IEBACiAgICAgX1B5X0ZpbmFsaXppbmcgPSB0c3RhdGU7CiAgICAgaW5pdGlhbGl6ZWQgPSAwOwogCi0gICAgLyogRmx1c2ggc3Rkb3V0K3N0ZGVyciAqLworICAgIC8qIEZsdXNoIHN5cy5zdGRvdXQgYW5kIHN5cy5zdGRlcnIgKi8KICAgICBmbHVzaF9zdGRfZmlsZXMoKTsKIAogICAgIC8qIERpc2FibGUgc2lnbmFsIGhhbmRsaW5nICovCkBAIC01MzAsMTQgKzYxMiwxMCBAQAogICAgIHdoaWxlIChQeUdDX0NvbGxlY3QoKSA+IDApCiAgICAgICAgIC8qIG5vdGhpbmcgKi87CiAjZW5kaWYKLSAgICAvKiBXZSBydW4gdGhpcyB3aGlsZSBtb3N0IGludGVycHJldGVyIHN0YXRlIGlzIHN0aWxsIGFsaXZlLCBzbyB0aGF0Ci0gICAgICAgZGVidWcgaW5mb3JtYXRpb24gY2FuIGJlIHByaW50ZWQgb3V0ICovCi0gICAgX1B5R0NfRmluaSgpOwotCiAgICAgLyogRGVzdHJveSBhbGwgbW9kdWxlcyAqLwogICAgIFB5SW1wb3J0X0NsZWFudXAoKTsKIAotICAgIC8qIEZsdXNoIHN0ZG91dCtzdGRlcnIgKGFnYWluLCBpbiBjYXNlIG1vcmUgd2FzIHByaW50ZWQpICovCisgICAgLyogRmx1c2ggc3lzLnN0ZG91dCBhbmQgc3lzLnN0ZGVyciAoYWdhaW4sIGluIGNhc2UgbW9yZSB3YXMgcHJpbnRlZCkgKi8KICAgICBmbHVzaF9zdGRfZmlsZXMoKTsKIAogICAgIC8qIENvbGxlY3QgZmluYWwgZ2FyYmFnZS4gIFRoaXMgZGlzcG9zZXMgb2YgY3ljbGVzIGNyZWF0ZWQgYnkKQEAgLTU1OSw2ICs2MzcsMTAgQEAKICAgICBQeUdDX0NvbGxlY3QoKTsKICNlbmRpZgogCisgICAgLyogRGlzYWJsZSB0cmFjZW1hbGxvYyBhZnRlciBhbGwgUHl0aG9uIG9iamVjdHMgaGF2ZSBiZWVuIGRlc3Ryb3llZCwKKyAgICAgICBzbyBpdCBpcyBwb3NzaWJsZSB0byB1c2UgdHJhY2VtYWxsb2MgaW4gb2JqZWN0cyBkZXN0cnVjdG9yLiAqLworICAgIF9QeVRyYWNlTWFsbG9jX0ZpbmkoKTsKKwogICAgIC8qIERlc3Ryb3kgdGhlIGRhdGFiYXNlIHVzZWQgYnkgX1B5SW1wb3J0X3tGaXh1cCxGaW5kfUV4dGVuc2lvbiAqLwogICAgIF9QeUltcG9ydF9GaW5pKCk7CiAKQEAgLTU3Miw2ICs2NTQsOCBAQAogI2lmZGVmIENPVU5UX0FMTE9DUwogICAgIGR1bXBfY291bnRzKHN0ZG91dCk7CiAjZW5kaWYKKyAgICAvKiBkdW1wIGhhc2ggc3RhdHMgKi8KKyAgICBfUHlIYXNoX0ZpbmkoKTsKIAogICAgIFBSSU5UX1RPVEFMX1JFRlMoKTsKIApAQCAtNTk2LDExICs2ODAsNiBAQAogCiAgICAgX1B5RXhjX0ZpbmkoKTsKIAotICAgIC8qIENsZWFudXAgYXV0by10aHJlYWQtc3RhdGUgKi8KLSNpZmRlZiBXSVRIX1RIUkVBRAotICAgIF9QeUdJTFN0YXRlX0ZpbmkoKTsKLSNlbmRpZiAvKiBXSVRIX1RIUkVBRCAqLwotCiAgICAgLyogU3VuZHJ5IGZpbmFsaXplcnMgKi8KICAgICBQeU1ldGhvZF9GaW5pKCk7CiAgICAgUHlGcmFtZV9GaW5pKCk7CkBAIC02MTQsMTcgKzY5MywxNSBAQAogICAgIFB5RmxvYXRfRmluaSgpOwogICAgIFB5RGljdF9GaW5pKCk7CiAgICAgUHlTbGljZV9GaW5pKCk7CisgICAgX1B5R0NfRmluaSgpOworICAgIF9QeVJhbmRvbV9GaW5pKCk7CiAKICAgICAvKiBDbGVhbnVwIFVuaWNvZGUgaW1wbGVtZW50YXRpb24gKi8KICAgICBfUHlVbmljb2RlX0ZpbmkoKTsKIAotICAgIC8qIERlbGV0ZSBjdXJyZW50IHRocmVhZC4gQWZ0ZXIgdGhpcywgbWFueSBDIEFQSSBjYWxscyBiZWNvbWUgY3Jhc2h5LiAqLwotICAgIFB5VGhyZWFkU3RhdGVfU3dhcChOVUxMKTsKLSAgICBQeUludGVycHJldGVyU3RhdGVfRGVsZXRlKGludGVycCk7Ci0KICAgICAvKiByZXNldCBmaWxlIHN5c3RlbSBkZWZhdWx0IGVuY29kaW5nICovCiAgICAgaWYgKCFQeV9IYXNGaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nICYmIFB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpIHsKLSAgICAgICAgZnJlZSgoY2hhciopUHlfRmlsZVN5c3RlbURlZmF1bHRFbmNvZGluZyk7CisgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKGNoYXIqKVB5X0ZpbGVTeXN0ZW1EZWZhdWx0RW5jb2RpbmcpOwogICAgICAgICBQeV9GaWxlU3lzdGVtRGVmYXVsdEVuY29kaW5nID0gTlVMTDsKICAgICB9CiAKQEAgLTYzNiw2ICs3MTMsMTUgQEAKIAogICAgIFB5R3JhbW1hcl9SZW1vdmVBY2NlbGVyYXRvcnMoJl9QeVBhcnNlcl9HcmFtbWFyKTsKIAorICAgIC8qIENsZWFudXAgYXV0by10aHJlYWQtc3RhdGUgKi8KKyNpZmRlZiBXSVRIX1RIUkVBRAorICAgIF9QeUdJTFN0YXRlX0ZpbmkoKTsKKyNlbmRpZiAvKiBXSVRIX1RIUkVBRCAqLworCisgICAgLyogRGVsZXRlIGN1cnJlbnQgdGhyZWFkLiBBZnRlciB0aGlzLCBtYW55IEMgQVBJIGNhbGxzIGJlY29tZSBjcmFzaHkuICovCisgICAgUHlUaHJlYWRTdGF0ZV9Td2FwKE5VTEwpOworICAgIFB5SW50ZXJwcmV0ZXJTdGF0ZV9EZWxldGUoaW50ZXJwKTsKKwogI2lmZGVmIFB5X1RSQUNFX1JFRlMKICAgICAvKiBEaXNwbGF5IGFkZHJlc3NlcyAoJiByZWZjbnRzKSBvZiBhbGwgb2JqZWN0cyBzdGlsbCBhbGl2ZS4KICAgICAgKiBBbiBhZGRyZXNzIGNhbiBiZSB1c2VkIHRvIGZpbmQgdGhlIHJlcHIgb2YgdGhlIG9iamVjdCwgcHJpbnRlZApAQCAtNzE4LDcgKzgwNCw3IEBACiAgICAgICAgIHBzdGRlcnIgPSBQeUZpbGVfTmV3U3RkUHJpbnRlcihmaWxlbm8oc3RkZXJyKSk7CiAgICAgICAgIGlmIChwc3RkZXJyID09IE5VTEwpCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9Jbml0aWFsaXplOiBjYW4ndCBzZXQgcHJlbGltaW5hcnkgc3RkZXJyIik7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgic3RkZXJyIiwgcHN0ZGVycik7CisgICAgICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIsIHBzdGRlcnIpOwogICAgICAgICBQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBwc3RkZXJyKTsKICAgICAgICAgUHlfREVDUkVGKHBzdGRlcnIpOwogCkBAIC03NzMsNiArODU5LDkgQEAKICAgICAgICAgUHlfRmF0YWxFcnJvcigiUHlfRW5kSW50ZXJwcmV0ZXI6IHRocmVhZCBpcyBub3QgY3VycmVudCIpOwogICAgIGlmICh0c3RhdGUtPmZyYW1lICE9IE5VTEwpCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0VuZEludGVycHJldGVyOiB0aHJlYWQgc3RpbGwgaGFzIGEgZnJhbWUiKTsKKworICAgIHdhaXRfZm9yX3RocmVhZF9zaHV0ZG93bigpOworCiAgICAgaWYgKHRzdGF0ZSAhPSBpbnRlcnAtPnRzdGF0ZV9oZWFkIHx8IHRzdGF0ZS0+bmV4dCAhPSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJQeV9FbmRJbnRlcnByZXRlcjogbm90IHRoZSBsYXN0IHRocmVhZCIpOwogCkBAIC04MDIsNyArODkxLDcgQEAKIH0KIAogc3RhdGljIHdjaGFyX3QgKmRlZmF1bHRfaG9tZSA9IE5VTEw7Ci1zdGF0aWMgd2NoYXJfdCBlbnZfaG9tZVtQQVRIX01BWCsxXTsKK3N0YXRpYyB3Y2hhcl90IGVudl9ob21lW01BWFBBVEhMRU4rMV07CiAKIHZvaWQKIFB5X1NldFB5dGhvbkhvbWUod2NoYXJfdCAqaG9tZSkKQEAgLTgzMiw3ICs5MjEsNyBAQAogc3RhdGljIHZvaWQKIGluaXRtYWluKFB5SW50ZXJwcmV0ZXJTdGF0ZSAqaW50ZXJwKQogewotICAgIFB5T2JqZWN0ICptLCAqZDsKKyAgICBQeU9iamVjdCAqbSwgKmQsICpsb2FkZXI7CiAgICAgbSA9IFB5SW1wb3J0X0FkZE1vZHVsZSgiX19tYWluX18iKTsKICAgICBpZiAobSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBjcmVhdGUgX19tYWluX18gbW9kdWxlIik7CkBAIC04NTMsNyArOTQyLDggQEAKICAgICAgKiBiZSBzZXQgaWYgX19tYWluX18gZ2V0cyBmdXJ0aGVyIGluaXRpYWxpemVkIGxhdGVyIGluIHRoZSBzdGFydHVwCiAgICAgICogcHJvY2Vzcy4KICAgICAgKi8KLSAgICBpZiAoUHlEaWN0X0dldEl0ZW1TdHJpbmcoZCwgIl9fbG9hZGVyX18iKSA9PSBOVUxMKSB7CisgICAgbG9hZGVyID0gUHlEaWN0X0dldEl0ZW1TdHJpbmcoZCwgIl9fbG9hZGVyX18iKTsKKyAgICBpZiAobG9hZGVyID09IE5VTEwgfHwgbG9hZGVyID09IFB5X05vbmUpIHsKICAgICAgICAgUHlPYmplY3QgKmxvYWRlciA9IFB5T2JqZWN0X0dldEF0dHJTdHJpbmcoaW50ZXJwLT5pbXBvcnRsaWIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJCdWlsdGluSW1wb3J0ZXIiKTsKICAgICAgICAgaWYgKGxvYWRlciA9PSBOVUxMKSB7CkBAIC05MDMsNiArOTkzLDcgQEAKICAgICBQeU9iamVjdCAqbTsKICAgICBtID0gUHlJbXBvcnRfSW1wb3J0TW9kdWxlKCJzaXRlIik7CiAgICAgaWYgKG0gPT0gTlVMTCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBpbXBvcnQgdGhlIHNpdGUgbW9kdWxlXG4iKTsKICAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgUHlfRmluYWxpemUoKTsKICAgICAgICAgZXhpdCgxKTsKQEAgLTkxMiw2ICsxMDAzLDIxIEBACiAgICAgfQogfQogCisvKiBDaGVjayBpZiBhIGZpbGUgZGVzY3JpcHRvciBpcyB2YWxpZCBvciBub3QuCisgICBSZXR1cm4gMCBpZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGlzIGludmFsaWQsIHJldHVybiBub24temVybyBvdGhlcndpc2UuICovCitzdGF0aWMgaW50Citpc192YWxpZF9mZChpbnQgZmQpCit7CisgICAgaW50IGZkMjsKKyAgICBpZiAoZmQgPCAwIHx8ICFfUHlWZXJpZnlfZmQoZmQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBmZDIgPSBkdXAoZmQpOworICAgIGlmIChmZDIgPj0gMCkKKyAgICAgICAgY2xvc2UoZmQyKTsKKyAgICByZXR1cm4gZmQyID49IDA7Cit9CisKKy8qIHJldHVybnMgUHlfTm9uZSBpZiB0aGUgZmQgaXMgbm90IHZhbGlkICovCiBzdGF0aWMgUHlPYmplY3QqCiBjcmVhdGVfc3RkaW8oUHlPYmplY3QqIGlvLAogICAgIGludCBmZCwgaW50IHdyaXRlX21vZGUsIGNoYXIqIG5hbWUsCkBAIC05MjUsOSArMTAzMSwxMSBAQAogICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwogICAgIF9QeV9JREVOVElGSUVSKGlzYXR0eSk7CiAgICAgX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7Ci0gICAgX1B5X0lERU5USUZJRVIobmFtZSk7CiAgICAgX1B5X0lERU5USUZJRVIobW9kZSk7CiAKKyAgICBpZiAoIWlzX3ZhbGlkX2ZkKGZkKSkKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisKICAgICAvKiBzdGRpbiBpcyBhbHdheXMgb3BlbmVkIGluIGJ1ZmZlcmVkIG1vZGUsIGZpcnN0IGJlY2F1c2UgaXQgc2hvdWxkbid0CiAgICAgICAgbWFrZSBhIGRpZmZlcmVuY2UgaW4gY29tbW9uIHVzZSBjYXNlcywgc2Vjb25kIGJlY2F1c2UgVGV4dElPV3JhcHBlcgogICAgICAgIGRlcGVuZHMgb24gdGhlIHByZXNlbmNlIG9mIGEgcmVhZDEoKSBtZXRob2Qgd2hpY2ggb25seSBleGlzdHMgb24KQEAgLTEwMDksMjAgKzExMTcsMTUgQEAKICAgICBQeV9YREVDUkVGKHN0cmVhbSk7CiAgICAgUHlfWERFQ1JFRih0ZXh0KTsKICAgICBQeV9YREVDUkVGKHJhdyk7Ci0gICAgcmV0dXJuIE5VTEw7Ci19CiAKLXN0YXRpYyBpbnQKLWlzX3ZhbGlkX2ZkKGludCBmZCkKLXsKLSAgICBpbnQgZHVtbXlfZmQ7Ci0gICAgaWYgKGZkIDwgMCB8fCAhX1B5VmVyaWZ5X2ZkKGZkKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZHVtbXlfZmQgPSBkdXAoZmQpOwotICAgIGlmIChkdW1teV9mZCA8IDApCi0gICAgICAgIHJldHVybiAwOwotICAgIGNsb3NlKGR1bW15X2ZkKTsKLSAgICByZXR1cm4gMTsKKyAgICBpZiAoUHlFcnJfRXhjZXB0aW9uTWF0Y2hlcyhQeUV4Y19PU0Vycm9yKSAmJiAhaXNfdmFsaWRfZmQoZmQpKSB7CisgICAgICAgIC8qIElzc3VlICMyNDg5MTogdGhlIGZpbGUgZGVzY3JpcHRvciB3YXMgY2xvc2VkIGFmdGVyIHRoZSBmaXJzdAorICAgICAgICAgICBpc192YWxpZF9mZCgpIGNoZWNrIHdhcyBjYWxsZWQuIElnbm9yZSB0aGUgT1NFcnJvciBhbmQgc2V0IHRoZQorICAgICAgICAgICBzdHJlYW0gdG8gTm9uZS4gKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICAgICAgUHlfUkVUVVJOX05PTkU7CisgICAgfQorICAgIHJldHVybiBOVUxMOwogfQogCiAvKiBJbml0aWFsaXplIHN5cy5zdGRpbiwgc3Rkb3V0LCBzdGRlcnIgYW5kIGJ1aWx0aW5zLm9wZW4gKi8KQEAgLTEwMzUsNyArMTEzOCw3IEBACiAgICAgUHlPYmplY3QgKnN0ZCA9IE5VTEw7CiAgICAgaW50IHN0YXR1cyA9IDAsIGZkOwogICAgIFB5T2JqZWN0ICogZW5jb2RpbmdfYXR0cjsKLSAgICBjaGFyICplbmNvZGluZyA9IE5VTEwsICplcnJvcnM7CisgICAgY2hhciAqcHl0aG9uaW9lbmNvZGluZyA9IE5VTEwsICplbmNvZGluZywgKmVycm9yczsKIAogICAgIC8qIEhhY2sgdG8gYXZvaWQgYSBuYXN0eSByZWN1cnNpb24gaXNzdWUgd2hlbiBQeXRob24gaXMgaW52b2tlZAogICAgICAgIGluIHZlcmJvc2UgbW9kZTogcHJlLWltcG9ydCB0aGUgTGF0aW4tMSBhbmQgVVRGLTggY29kZWNzICovCkBAIC0xMDY3LDE0ICsxMTcwLDI4IEBACiAgICAgfQogICAgIFB5X0RFQ1JFRih3cmFwcGVyKTsKIAotICAgIGVuY29kaW5nID0gUHlfR0VURU5WKCJQWVRIT05JT0VOQ09ESU5HIik7Ci0gICAgZXJyb3JzID0gTlVMTDsKLSAgICBpZiAoZW5jb2RpbmcpIHsKLSAgICAgICAgZW5jb2RpbmcgPSBzdHJkdXAoZW5jb2RpbmcpOwotICAgICAgICBlcnJvcnMgPSBzdHJjaHIoZW5jb2RpbmcsICc6Jyk7Ci0gICAgICAgIGlmIChlcnJvcnMpIHsKLSAgICAgICAgICAgICplcnJvcnMgPSAnXDAnOwotICAgICAgICAgICAgZXJyb3JzKys7CisgICAgZW5jb2RpbmcgPSBfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZzsKKyAgICBlcnJvcnMgPSBfUHlfU3RhbmRhcmRTdHJlYW1FcnJvcnM7CisgICAgaWYgKCFlbmNvZGluZyB8fCAhZXJyb3JzKSB7CisgICAgICAgIHB5dGhvbmlvZW5jb2RpbmcgPSBQeV9HRVRFTlYoIlBZVEhPTklPRU5DT0RJTkciKTsKKyAgICAgICAgaWYgKHB5dGhvbmlvZW5jb2RpbmcpIHsKKyAgICAgICAgICAgIGNoYXIgKmVycjsKKyAgICAgICAgICAgIHB5dGhvbmlvZW5jb2RpbmcgPSBfUHlNZW1fU3RyZHVwKHB5dGhvbmlvZW5jb2RpbmcpOworICAgICAgICAgICAgaWYgKHB5dGhvbmlvZW5jb2RpbmcgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIFB5RXJyX05vTWVtb3J5KCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVyciA9IHN0cmNocihweXRob25pb2VuY29kaW5nLCAnOicpOworICAgICAgICAgICAgaWYgKGVycikgeworICAgICAgICAgICAgICAgICplcnIgPSAnXDAnOworICAgICAgICAgICAgICAgIGVycisrOworICAgICAgICAgICAgICAgIGlmICgqZXJyICYmICFlcnJvcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICgqcHl0aG9uaW9lbmNvZGluZyAmJiAhZW5jb2RpbmcpIHsKKyAgICAgICAgICAgICAgICBlbmNvZGluZyA9IHB5dGhvbmlvZW5jb2Rpbmc7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwODQsNjMgKzEyMDEsNTEgQEAKICAgICAgKiBhbmQgZmlsZW5vKCkgbWF5IHBvaW50IHRvIGFuIGludmFsaWQgZmlsZSBkZXNjcmlwdG9yLiBGb3IgZXhhbXBsZQogICAgICAqIEdVSSBhcHBzIGRvbid0IGhhdmUgdmFsaWQgc3RhbmRhcmQgc3RyZWFtcyBieSBkZWZhdWx0LgogICAgICAqLwotICAgIGlmICghaXNfdmFsaWRfZmQoZmQpKSB7Ci0gICAgICAgIHN0ZCA9IFB5X05vbmU7Ci0gICAgICAgIFB5X0lOQ1JFRihzdGQpOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgc3RkID0gY3JlYXRlX3N0ZGlvKGlvbW9kLCBmZCwgMCwgIjxzdGRpbj4iLCBlbmNvZGluZywgZXJyb3JzKTsKLSAgICAgICAgaWYgKHN0ZCA9PSBOVUxMKQotICAgICAgICAgICAgZ290byBlcnJvcjsKLSAgICB9IC8qIGlmIChmZCA8IDApICovCisgICAgc3RkID0gY3JlYXRlX3N0ZGlvKGlvbW9kLCBmZCwgMCwgIjxzdGRpbj4iLCBlbmNvZGluZywgZXJyb3JzKTsKKyAgICBpZiAoc3RkID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZGluX18iLCBzdGQpOwotICAgIFB5U3lzX1NldE9iamVjdCgic3RkaW4iLCBzdGQpOworICAgIF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRpbiwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogICAgIC8qIFNldCBzeXMuc3Rkb3V0ICovCiAgICAgZmQgPSBmaWxlbm8oc3Rkb3V0KTsKLSAgICBpZiAoIWlzX3ZhbGlkX2ZkKGZkKSkgewotICAgICAgICBzdGQgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoc3RkKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZCA9IGNyZWF0ZV9zdGRpbyhpb21vZCwgZmQsIDEsICI8c3Rkb3V0PiIsIGVuY29kaW5nLCBlcnJvcnMpOwotICAgICAgICBpZiAoc3RkID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgIH0gLyogaWYgKGZkIDwgMCkgKi8KKyAgICBzdGQgPSBjcmVhdGVfc3RkaW8oaW9tb2QsIGZkLCAxLCAiPHN0ZG91dD4iLCBlbmNvZGluZywgZXJyb3JzKTsKKyAgICBpZiAoc3RkID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgUHlTeXNfU2V0T2JqZWN0KCJfX3N0ZG91dF9fIiwgc3RkKTsKLSAgICBQeVN5c19TZXRPYmplY3QoInN0ZG91dCIsIHN0ZCk7CisgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3N0ZG91dCwgc3RkKTsKICAgICBQeV9ERUNSRUYoc3RkKTsKIAogI2lmIDEgLyogRGlzYWJsZSB0aGlzIGlmIHlvdSBoYXZlIHRyb3VibGUgZGVidWdnaW5nIGJvb3RzdHJhcCBzdHVmZiAqLwogICAgIC8qIFNldCBzeXMuc3RkZXJyLCByZXBsYWNlcyB0aGUgcHJlbGltaW5hcnkgc3RkZXJyICovCiAgICAgZmQgPSBmaWxlbm8oc3RkZXJyKTsKLSAgICBpZiAoIWlzX3ZhbGlkX2ZkKGZkKSkgewotICAgICAgICBzdGQgPSBQeV9Ob25lOwotICAgICAgICBQeV9JTkNSRUYoc3RkKTsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAgIHN0ZCA9IGNyZWF0ZV9zdGRpbyhpb21vZCwgZmQsIDEsICI8c3RkZXJyPiIsIGVuY29kaW5nLCAiYmFja3NsYXNocmVwbGFjZSIpOwotICAgICAgICBpZiAoc3RkID09IE5VTEwpCi0gICAgICAgICAgICBnb3RvIGVycm9yOwotICAgIH0gLyogaWYgKGZkIDwgMCkgKi8KKyAgICBzdGQgPSBjcmVhdGVfc3RkaW8oaW9tb2QsIGZkLCAxLCAiPHN0ZGVycj4iLCBlbmNvZGluZywgImJhY2tzbGFzaHJlcGxhY2UiKTsKKyAgICBpZiAoc3RkID09IE5VTEwpCisgICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICAvKiBTYW1lIGFzIGhhY2sgYWJvdmUsIHByZS1pbXBvcnQgc3RkZXJyJ3MgY29kZWMgdG8gYXZvaWQgcmVjdXJzaW9uCiAgICAgICAgd2hlbiBpbXBvcnQuYyB0cmllcyB0byB3cml0ZSB0byBzdGRlcnIgaW4gdmVyYm9zZSBtb2RlLiAqLwogICAgIGVuY29kaW5nX2F0dHIgPSBQeU9iamVjdF9HZXRBdHRyU3RyaW5nKHN0ZCwgImVuY29kaW5nIik7CiAgICAgaWYgKGVuY29kaW5nX2F0dHIgIT0gTlVMTCkgewotICAgICAgICBjb25zdCBjaGFyICogZW5jb2Rpbmc7Ci0gICAgICAgIGVuY29kaW5nID0gX1B5VW5pY29kZV9Bc1N0cmluZyhlbmNvZGluZ19hdHRyKTsKLSAgICAgICAgaWYgKGVuY29kaW5nICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFB5T2JqZWN0ICpjb2RlY19pbmZvID0gX1B5Q29kZWNfTG9va3VwKGVuY29kaW5nKTsKKyAgICAgICAgY29uc3QgY2hhciAqIHN0ZF9lbmNvZGluZzsKKyAgICAgICAgc3RkX2VuY29kaW5nID0gX1B5VW5pY29kZV9Bc1N0cmluZyhlbmNvZGluZ19hdHRyKTsKKyAgICAgICAgaWYgKHN0ZF9lbmNvZGluZyAhPSBOVUxMKSB7CisgICAgICAgICAgICBQeU9iamVjdCAqY29kZWNfaW5mbyA9IF9QeUNvZGVjX0xvb2t1cChzdGRfZW5jb2RpbmcpOwogICAgICAgICAgICAgUHlfWERFQ1JFRihjb2RlY19pbmZvKTsKICAgICAgICAgfQogICAgICAgICBQeV9ERUNSRUYoZW5jb2RpbmdfYXR0cik7CiAgICAgfQogICAgIFB5RXJyX0NsZWFyKCk7ICAvKiBOb3QgYSBmYXRhbCBlcnJvciBpZiBjb2RlYyBpc24ndCBhdmFpbGFibGUgKi8KIAotICAgIFB5U3lzX1NldE9iamVjdCgiX19zdGRlcnJfXyIsIHN0ZCk7Ci0gICAgUHlTeXNfU2V0T2JqZWN0KCJzdGRlcnIiLCBzdGQpOworICAgIGlmIChQeVN5c19TZXRPYmplY3QoIl9fc3RkZXJyX18iLCBzdGQpIDwgMCkgeworICAgICAgICBQeV9ERUNSRUYoc3RkKTsKKyAgICAgICAgZ290byBlcnJvcjsKKyAgICB9CisgICAgaWYgKF9QeVN5c19TZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIsIHN0ZCkgPCAwKSB7CisgICAgICAgIFB5X0RFQ1JFRihzdGQpOworICAgICAgICBnb3RvIGVycm9yOworICAgIH0KICAgICBQeV9ERUNSRUYoc3RkKTsKICNlbmRpZgogCkBAIC0xMTQ5LDggKzEyNTQsMTYgQEAKICAgICAgICAgc3RhdHVzID0gLTE7CiAgICAgfQogCi0gICAgaWYgKGVuY29kaW5nKQotICAgICAgICBmcmVlKGVuY29kaW5nKTsKKyAgICAvKiBXZSB3b24ndCBuZWVkIHRoZW0gYW55bW9yZS4gKi8KKyAgICBpZiAoX1B5X1N0YW5kYXJkU3RyZWFtRW5jb2RpbmcpIHsKKyAgICAgICAgUHlNZW1fUmF3RnJlZShfUHlfU3RhbmRhcmRTdHJlYW1FbmNvZGluZyk7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVuY29kaW5nID0gTlVMTDsKKyAgICB9CisgICAgaWYgKF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycykgeworICAgICAgICBQeU1lbV9SYXdGcmVlKF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyk7CisgICAgICAgIF9QeV9TdGFuZGFyZFN0cmVhbUVycm9ycyA9IE5VTEw7CisgICAgfQorICAgIFB5TWVtX0ZyZWUocHl0aG9uaW9lbmNvZGluZyk7CiAgICAgUHlfWERFQ1JFRihiaW1vZCk7CiAgICAgUHlfWERFQ1JFRihpb21vZCk7CiAgICAgcmV0dXJuIHN0YXR1czsKQEAgLTExNzUsMzYgKzEyODgsNDcgQEAKIH0KIAogaW50Ci1QeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWUsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCitQeVJ1bl9JbnRlcmFjdGl2ZUxvb3BGbGFncyhGSUxFICpmcCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQogewotICAgIFB5T2JqZWN0ICp2OwotICAgIGludCByZXQ7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lLCAqdjsKKyAgICBpbnQgcmV0LCBlcnI7CiAgICAgUHlDb21waWxlckZsYWdzIGxvY2FsX2ZsYWdzOwogCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKwogICAgIGlmIChmbGFncyA9PSBOVUxMKSB7CiAgICAgICAgIGZsYWdzID0gJmxvY2FsX2ZsYWdzOwogICAgICAgICBsb2NhbF9mbGFncy5jZl9mbGFncyA9IDA7CiAgICAgfQotICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInBzMSIpOworICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMxKTsKICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgicHMxIiwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCI+Pj4gIikpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfcHMxLCB2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIj4+PiAiKSk7CiAgICAgICAgIFB5X1hERUNSRUYodik7CiAgICAgfQotICAgIHYgPSBQeVN5c19HZXRPYmplY3QoInBzMiIpOworICAgIHYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfcHMyKTsKICAgICBpZiAodiA9PSBOVUxMKSB7Ci0gICAgICAgIFB5U3lzX1NldE9iamVjdCgicHMyIiwgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKCIuLi4gIikpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfcHMyLCB2ID0gUHlVbmljb2RlX0Zyb21TdHJpbmcoIi4uLiAiKSk7CiAgICAgICAgIFB5X1hERUNSRUYodik7CiAgICAgfQorICAgIGVyciA9IC0xOwogICAgIGZvciAoOzspIHsKLSAgICAgICAgcmV0ID0gUHlSdW5fSW50ZXJhY3RpdmVPbmVGbGFncyhmcCwgZmlsZW5hbWUsIGZsYWdzKTsKKyAgICAgICAgcmV0ID0gUHlSdW5fSW50ZXJhY3RpdmVPbmVPYmplY3QoZnAsIGZpbGVuYW1lLCBmbGFncyk7CiAgICAgICAgIFBSSU5UX1RPVEFMX1JFRlMoKTsKLSAgICAgICAgaWYgKHJldCA9PSBFX0VPRikKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBpZiAocmV0ID09IEVfRU9GKSB7CisgICAgICAgICAgICBlcnIgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgLyoKICAgICAgICAgaWYgKHJldCA9PSBFX05PTUVNKQotICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICovCiAgICAgfQorICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIGVycjsKIH0KIAogLyogY29tcHV0ZSBwYXJzZXIgZmxhZ3MgYmFzZWQgb24gY29tcGlsZXIgZmxhZ3MgKi8KQEAgLTEyMzIsMTggKzEzNTYsMjUgQEAKICNlbmRpZgogCiBpbnQKLVB5UnVuX0ludGVyYWN0aXZlT25lRmxhZ3MoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzKQorUHlSdW5fSW50ZXJhY3RpdmVPbmVPYmplY3QoRklMRSAqZnAsIFB5T2JqZWN0ICpmaWxlbmFtZSwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqbSwgKmQsICp2LCAqdywgKm9lbmMgPSBOVUxMOworICAgIFB5T2JqZWN0ICptLCAqZCwgKnYsICp3LCAqb2VuYyA9IE5VTEwsICptb2RfbmFtZTsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5QXJlbmEgKmFyZW5hOwogICAgIGNoYXIgKnBzMSA9ICIiLCAqcHMyID0gIiIsICplbmMgPSBOVUxMOwogICAgIGludCBlcnJjb2RlID0gMDsKICAgICBfUHlfSURFTlRJRklFUihlbmNvZGluZyk7CisgICAgX1B5X0lERU5USUZJRVIoX19tYWluX18pOworCisgICAgbW9kX25hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9fX21haW5fXyk7IC8qIGJvcnJvd2VkICovCisgICAgaWYgKG1vZF9uYW1lID09IE5VTEwpIHsKKyAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KIAogICAgIGlmIChmcCA9PSBzdGRpbikgewogICAgICAgICAvKiBGZXRjaCBlbmNvZGluZyBmcm9tIHN5cy5zdGRpbiBpZiBwb3NzaWJsZS4gKi8KLSAgICAgICAgdiA9IFB5U3lzX0dldE9iamVjdCgic3RkaW4iKTsKKyAgICAgICAgdiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRpbik7CiAgICAgICAgIGlmICh2ICYmIHYgIT0gUHlfTm9uZSkgewogICAgICAgICAgICAgb2VuYyA9IF9QeU9iamVjdF9HZXRBdHRySWQodiwgJlB5SWRfZW5jb2RpbmcpOwogICAgICAgICAgICAgaWYgKG9lbmMpCkBAIC0xMjUyLDcgKzEzODMsNyBAQAogICAgICAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgdiA9IFB5U3lzX0dldE9iamVjdCgicHMxIik7CisgICAgdiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wczEpOwogICAgIGlmICh2ICE9IE5VTEwpIHsKICAgICAgICAgdiA9IFB5T2JqZWN0X1N0cih2KTsKICAgICAgICAgaWYgKHYgPT0gTlVMTCkKQEAgLTEyNjUsNyArMTM5Niw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgdyA9IFB5U3lzX0dldE9iamVjdCgicHMyIik7CisgICAgdyA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wczIpOwogICAgIGlmICh3ICE9IE5VTEwpIHsKICAgICAgICAgdyA9IFB5T2JqZWN0X1N0cih3KTsKICAgICAgICAgaWYgKHcgPT0gTlVMTCkKQEAgLTEyODUsOSArMTQxNiw5IEBACiAgICAgICAgIFB5X1hERUNSRUYob2VuYyk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGUoZnAsIGZpbGVuYW1lLCBlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfc2luZ2xlX2lucHV0LCBwczEsIHBzMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgJmVycmNvZGUsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeV9zaW5nbGVfaW5wdXQsIHBzMSwgcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCAmZXJyY29kZSwgYXJlbmEpOwogICAgIFB5X1hERUNSRUYodik7CiAgICAgUHlfWERFQ1JFRih3KTsKICAgICBQeV9YREVDUkVGKG9lbmMpOwpAQCAtMTMwMCw3ICsxNDMxLDcgQEAKICAgICAgICAgUHlFcnJfUHJpbnQoKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KLSAgICBtID0gUHlJbXBvcnRfQWRkTW9kdWxlKCJfX21haW5fXyIpOworICAgIG0gPSBQeUltcG9ydF9BZGRNb2R1bGVPYmplY3QobW9kX25hbWUpOwogICAgIGlmIChtID09IE5VTEwpIHsKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtMTMwOCwxNSArMTQzOSwzMyBAQAogICAgIGQgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwogICAgIHYgPSBydW5fbW9kKG1vZCwgZmlsZW5hbWUsIGQsIGQsIGZsYWdzLCBhcmVuYSk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKLSAgICBmbHVzaF9pbygpOwogICAgIGlmICh2ID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfUHJpbnQoKTsKKyAgICAgICAgZmx1c2hfaW8oKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KICAgICBQeV9ERUNSRUYodik7CisgICAgZmx1c2hfaW8oKTsKICAgICByZXR1cm4gMDsKIH0KIAoraW50CitQeVJ1bl9JbnRlcmFjdGl2ZU9uZUZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIGludCByZXM7CisKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9QcmludCgpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJlcyA9IFB5UnVuX0ludGVyYWN0aXZlT25lT2JqZWN0KGZwLCBmaWxlbmFtZSwgZmxhZ3MpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIHJlczsKK30KKworCiAvKiBDaGVjayB3aGV0aGVyIGEgZmlsZSBtYXliZSBhIHB5YyBmaWxlOiBMb29rIGF0IHRoZSBleHRlbnNpb24sCiAgICB0aGUgZmlsZSB0eXBlLCBhbmQsIGlmIHdlIG1heSBjbG9zZSBpdCwgYXQgdGhlIGZpcnN0IGZldyBieXRlcy4gKi8KIApAQCAtMTM1Nyw4ICsxNTA2LDggQEAKICAgICByZXR1cm4gMDsKIH0KIAotaW50Ci1zdGF0aWMgc2V0X21haW5fbG9hZGVyKFB5T2JqZWN0ICpkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqbG9hZGVyX25hbWUpCitzdGF0aWMgaW50CitzZXRfbWFpbl9sb2FkZXIoUHlPYmplY3QgKmQsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpsb2FkZXJfbmFtZSkKIHsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycDsKICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CkBAIC0xNDI1LDcgKzE1NzQsNyBAQAogICAgICAgICAvKiBUcnkgdG8gcnVuIGEgcHljIGZpbGUuIEZpcnN0LCByZS1vcGVuIGluIGJpbmFyeSAqLwogICAgICAgICBpZiAoY2xvc2VpdCkKICAgICAgICAgICAgIGZjbG9zZShmcCk7Ci0gICAgICAgIGlmICgocHljX2ZwID0gZm9wZW4oZmlsZW5hbWUsICJyYiIpKSA9PSBOVUxMKSB7CisgICAgICAgIGlmICgocHljX2ZwID0gX1B5X2ZvcGVuKGZpbGVuYW1lLCAicmIiKSkgPT0gTlVMTCkgewogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJweXRob246IENhbid0IHJlb3BlbiAucHljIGZpbGVcbiIpOwogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICB9CkBAIC0xNDg0LDggKzE2MzMsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1wYXJzZV9zeW50YXhfZXJyb3IoUHlPYmplY3QgKmVyciwgUHlPYmplY3QgKiptZXNzYWdlLCBjb25zdCBjaGFyICoqZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgaW50ICpsaW5lbm8sIGludCAqb2Zmc2V0LCBjb25zdCBjaGFyICoqdGV4dCkKK3BhcnNlX3N5bnRheF9lcnJvcihQeU9iamVjdCAqZXJyLCBQeU9iamVjdCAqKm1lc3NhZ2UsIFB5T2JqZWN0ICoqZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgaW50ICpsaW5lbm8sIGludCAqb2Zmc2V0LCBQeU9iamVjdCAqKnRleHQpCiB7CiAgICAgbG9uZyBob2xkOwogICAgIFB5T2JqZWN0ICp2OwpAQCAtMTQ5Niw2ICsxNjQ1LDcgQEAKICAgICBfUHlfSURFTlRJRklFUih0ZXh0KTsKIAogICAgICptZXNzYWdlID0gTlVMTDsKKyAgICAqZmlsZW5hbWUgPSBOVUxMOwogCiAgICAgLyogbmV3IHN0eWxlIGVycm9ycy4gIGBlcnInIGlzIGFuIGluc3RhbmNlICovCiAgICAgKm1lc3NhZ2UgPSBfUHlPYmplY3RfR2V0QXR0cklkKGVyciwgJlB5SWRfbXNnKTsKQEAgLTE1MDcsMTMgKzE2NTcsMTMgQEAKICAgICAgICAgZ290byBmaW5hbGx5OwogICAgIGlmICh2ID09IFB5X05vbmUpIHsKICAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICAqZmlsZW5hbWUgPSBOVUxMOworICAgICAgICAqZmlsZW5hbWUgPSBfUHlVbmljb2RlX0Zyb21JZCgmUHlJZF9zdHJpbmcpOworICAgICAgICBpZiAoKmZpbGVuYW1lID09IE5VTEwpCisgICAgICAgICAgICBnb3RvIGZpbmFsbHk7CisgICAgICAgIFB5X0lOQ1JFRigqZmlsZW5hbWUpOwogICAgIH0KICAgICBlbHNlIHsKLSAgICAgICAgKmZpbGVuYW1lID0gX1B5VW5pY29kZV9Bc1N0cmluZyh2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICBpZiAoISpmaWxlbmFtZSkKLSAgICAgICAgICAgIGdvdG8gZmluYWxseTsKKyAgICAgICAgKmZpbGVuYW1lID0gdjsKICAgICB9CiAKICAgICB2ID0gX1B5T2JqZWN0X0dldEF0dHJJZChlcnIsICZQeUlkX2xpbmVubyk7CkBAIC0xNTQ3LDE1ICsxNjk3LDEzIEBACiAgICAgICAgICp0ZXh0ID0gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7Ci0gICAgICAgICp0ZXh0ID0gX1B5VW5pY29kZV9Bc1N0cmluZyh2KTsKLSAgICAgICAgUHlfREVDUkVGKHYpOwotICAgICAgICBpZiAoISp0ZXh0KQotICAgICAgICAgICAgZ290byBmaW5hbGx5OworICAgICAgICAqdGV4dCA9IHY7CiAgICAgfQogICAgIHJldHVybiAxOwogCiBmaW5hbGx5OgogICAgIFB5X1hERUNSRUYoKm1lc3NhZ2UpOworICAgIFB5X1hERUNSRUYoKmZpbGVuYW1lKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMTU2Niw5ICsxNzE0LDE1IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1wcmludF9lcnJvcl90ZXh0KFB5T2JqZWN0ICpmLCBpbnQgb2Zmc2V0LCBjb25zdCBjaGFyICp0ZXh0KQorcHJpbnRfZXJyb3JfdGV4dChQeU9iamVjdCAqZiwgaW50IG9mZnNldCwgUHlPYmplY3QgKnRleHRfb2JqKQogeworICAgIGNoYXIgKnRleHQ7CiAgICAgY2hhciAqbmw7CisKKyAgICB0ZXh0ID0gX1B5VW5pY29kZV9Bc1N0cmluZyh0ZXh0X29iaik7CisgICAgaWYgKHRleHQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCiAgICAgaWYgKG9mZnNldCA+PSAwKSB7CiAgICAgICAgIGlmIChvZmZzZXQgPiAwICYmIG9mZnNldCA9PSBzdHJsZW4odGV4dCkgJiYgdGV4dFtvZmZzZXQgLSAxXSA9PSAnXG4nKQogICAgICAgICAgICAgb2Zmc2V0LS07CkBAIC0xNjI3LDcgKzE3ODEsMTIgQEAKICAgICBpZiAoUHlMb25nX0NoZWNrKHZhbHVlKSkKICAgICAgICAgZXhpdGNvZGUgPSAoaW50KVB5TG9uZ19Bc0xvbmcodmFsdWUpOwogICAgIGVsc2UgewotICAgICAgICBQeU9iamVjdCAqc3lzX3N0ZGVyciA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgICAgIFB5T2JqZWN0ICpzeXNfc3RkZXJyID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZGVycik7CisgICAgICAgIC8qIFdlIGNsZWFyIHRoZSBleGNlcHRpb24gaGVyZSB0byBhdm9pZCB0cmlnZ2VyaW5nIHRoZSBhc3NlcnRpb24KKyAgICAgICAgICogaW4gUHlPYmplY3RfU3RyIHRoYXQgZW5zdXJlcyBpdCB3b24ndCBzaWxlbnRseSBsb3NlIGV4Y2VwdGlvbgorICAgICAgICAgKiBkZXRhaWxzLgorICAgICAgICAgKi8KKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgaWYgKHN5c19zdGRlcnIgIT0gTlVMTCAmJiBzeXNfc3RkZXJyICE9IFB5X05vbmUpIHsKICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZU9iamVjdCh2YWx1ZSwgc3lzX3N0ZGVyciwgUHlfUFJJTlRfUkFXKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTE2NzAsMTEgKzE4MjksMTEgQEAKICAgICAgICAgcmV0dXJuOwogICAgIC8qIE5vdyB3ZSBrbm93IHYgIT0gTlVMTCB0b28gKi8KICAgICBpZiAoc2V0X3N5c19sYXN0X3ZhcnMpIHsKLSAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJsYXN0X3R5cGUiLCBleGNlcHRpb24pOwotICAgICAgICBQeVN5c19TZXRPYmplY3QoImxhc3RfdmFsdWUiLCB2KTsKLSAgICAgICAgUHlTeXNfU2V0T2JqZWN0KCJsYXN0X3RyYWNlYmFjayIsIHRiKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX2xhc3RfdHlwZSwgZXhjZXB0aW9uKTsKKyAgICAgICAgX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX2xhc3RfdmFsdWUsIHYpOworICAgICAgICBfUHlTeXNfU2V0T2JqZWN0SWQoJlB5SWRfbGFzdF90cmFjZWJhY2ssIHRiKTsKICAgICB9Ci0gICAgaG9vayA9IFB5U3lzX0dldE9iamVjdCgiZXhjZXB0aG9vayIpOworICAgIGhvb2sgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfZXhjZXB0aG9vayk7CiAgICAgaWYgKGhvb2spIHsKICAgICAgICAgUHlPYmplY3QgKmFyZ3MgPSBQeVR1cGxlX1BhY2soMywgZXhjZXB0aW9uLCB2LCB0Yik7CiAgICAgICAgIFB5T2JqZWN0ICpyZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChob29rLCBhcmdzKTsKQEAgLTE3MjQsOSArMTg4MywxMSBAQAogICAgIF9QeV9JREVOVElGSUVSKHByaW50X2ZpbGVfYW5kX2xpbmUpOwogCiAgICAgaWYgKCFQeUV4Y2VwdGlvbkluc3RhbmNlX0NoZWNrKHZhbHVlKSkgewotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIlR5cGVFcnJvcjogcHJpbnRfZXhjZXB0aW9uKCk6IEV4Y2VwdGlvbiBleHBlY3RlZCBmb3IgdmFsdWUsICIsIGYpOwotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoUHlfVFlQRSh2YWx1ZSktPnRwX25hbWUsIGYpOwotICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIiBmb3VuZFxuIiwgZik7CisgICAgICAgIGVyciA9IFB5RmlsZV9Xcml0ZVN0cmluZygiVHlwZUVycm9yOiBwcmludF9leGNlcHRpb24oKTogRXhjZXB0aW9uIGV4cGVjdGVkIGZvciB2YWx1ZSwgIiwgZik7CisgICAgICAgIGVyciArPSBQeUZpbGVfV3JpdGVTdHJpbmcoUHlfVFlQRSh2YWx1ZSktPnRwX25hbWUsIGYpOworICAgICAgICBlcnIgKz0gUHlGaWxlX1dyaXRlU3RyaW5nKCIgZm91bmRcbiIsIGYpOworICAgICAgICBpZiAoZXJyKQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTczOSwyNyArMTkwMCwzMCBAQAogICAgIGlmIChlcnIgPT0gMCAmJgogICAgICAgICBfUHlPYmplY3RfSGFzQXR0cklkKHZhbHVlLCAmUHlJZF9wcmludF9maWxlX2FuZF9saW5lKSkKICAgICB7Ci0gICAgICAgIFB5T2JqZWN0ICptZXNzYWdlOwotICAgICAgICBjb25zdCBjaGFyICpmaWxlbmFtZSwgKnRleHQ7CisgICAgICAgIFB5T2JqZWN0ICptZXNzYWdlLCAqZmlsZW5hbWUsICp0ZXh0OwogICAgICAgICBpbnQgbGluZW5vLCBvZmZzZXQ7CiAgICAgICAgIGlmICghcGFyc2Vfc3ludGF4X2Vycm9yKHZhbHVlLCAmbWVzc2FnZSwgJmZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGluZW5vLCAmb2Zmc2V0LCAmdGV4dCkpCiAgICAgICAgICAgICBQeUVycl9DbGVhcigpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIgYnVmWzEwXTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiICBGaWxlIFwiIiwgZik7Ci0gICAgICAgICAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoIjxzdHJpbmc+IiwgZik7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgUHlGaWxlX1dyaXRlU3RyaW5nKGZpbGVuYW1lLCBmKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXCIsIGxpbmUgIiwgZik7Ci0gICAgICAgICAgICBQeU9TX3NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZCIsIGxpbmVubyk7Ci0gICAgICAgICAgICBQeUZpbGVfV3JpdGVTdHJpbmcoYnVmLCBmKTsKLSAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygiXG4iLCBmKTsKLSAgICAgICAgICAgIGlmICh0ZXh0ICE9IE5VTEwpCi0gICAgICAgICAgICAgICAgcHJpbnRfZXJyb3JfdGV4dChmLCBvZmZzZXQsIHRleHQpOworICAgICAgICAgICAgUHlPYmplY3QgKmxpbmU7CisKICAgICAgICAgICAgIFB5X0RFQ1JFRih2YWx1ZSk7CiAgICAgICAgICAgICB2YWx1ZSA9IG1lc3NhZ2U7CisKKyAgICAgICAgICAgIGxpbmUgPSBQeVVuaWNvZGVfRnJvbUZvcm1hdCgiICBGaWxlIFwiJVVcIiwgbGluZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lLCBsaW5lbm8pOworICAgICAgICAgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGlmIChsaW5lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBQeUZpbGVfV3JpdGVPYmplY3QobGluZSwgZiwgUHlfUFJJTlRfUkFXKTsKKyAgICAgICAgICAgICAgICBQeV9ERUNSRUYobGluZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0ZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludF9lcnJvcl90ZXh0KGYsIG9mZnNldCwgdGV4dCk7CisgICAgICAgICAgICAgICAgUHlfREVDUkVGKHRleHQpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvKiBDYW4ndCBiZSBib3RoZXJlZCB0byBjaGVjayBhbGwgdGhvc2UKICAgICAgICAgICAgICAgIFB5RmlsZV9Xcml0ZVN0cmluZygpIGNhbGxzICovCiAgICAgICAgICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkKQEAgLTE3ODgsMTAgKzE5NTIsOSBAQAogICAgICAgICAgICAgZXJyID0gUHlGaWxlX1dyaXRlU3RyaW5nKCI8dW5rbm93bj4iLCBmKTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNoYXIqIG1vZHN0ciA9IF9QeVVuaWNvZGVfQXNTdHJpbmcobW9kdWxlTmFtZSk7Ci0gICAgICAgICAgICBpZiAobW9kc3RyICYmIHN0cmNtcChtb2RzdHIsICJidWlsdGlucyIpKQorICAgICAgICAgICAgaWYgKF9QeVVuaWNvZGVfQ29tcGFyZVdpdGhJZChtb2R1bGVOYW1lLCAmUHlJZF9idWlsdGlucykgIT0gMCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVTdHJpbmcobW9kc3RyLCBmKTsKKyAgICAgICAgICAgICAgICBlcnIgPSBQeUZpbGVfV3JpdGVPYmplY3QobW9kdWxlTmFtZSwgZiwgUHlfUFJJTlRfUkFXKTsKICAgICAgICAgICAgICAgICBlcnIgKz0gUHlGaWxlX1dyaXRlU3RyaW5nKCIuIiwgZik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBQeV9ERUNSRUYobW9kdWxlTmFtZSk7CkBAIC0xODg0LDcgKzIwNDcsNyBAQAogUHlFcnJfRGlzcGxheShQeU9iamVjdCAqZXhjZXB0aW9uLCBQeU9iamVjdCAqdmFsdWUsIFB5T2JqZWN0ICp0YikKIHsKICAgICBQeU9iamVjdCAqc2VlbjsKLSAgICBQeU9iamVjdCAqZiA9IFB5U3lzX0dldE9iamVjdCgic3RkZXJyIik7CisgICAgUHlPYmplY3QgKmYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICBpZiAoUHlFeGNlcHRpb25JbnN0YW5jZV9DaGVjayh2YWx1ZSkKICAgICAgICAgJiYgdGIgIT0gTlVMTCAmJiBQeVRyYWNlQmFja19DaGVjayh0YikpIHsKICAgICAgICAgLyogUHV0IHRoZSB0cmFjZWJhY2sgb24gdGhlIGV4Y2VwdGlvbiwgb3RoZXJ3aXNlIGl0IHdvbid0IGdldApAQCAtMTkyMCwzNyArMjA4Myw1NCBAQAogewogICAgIFB5T2JqZWN0ICpyZXQgPSBOVUxMOwogICAgIG1vZF90eSBtb2Q7Ci0gICAgUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIFB5QXJlbmEgKmFyZW5hOworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKworICAgIGZpbGVuYW1lID0gX1B5VW5pY29kZV9Gcm9tSWQoJlB5SWRfc3RyaW5nKTsgLyogYm9ycm93ZWQgKi8KKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CiAgICAgaWYgKGFyZW5hID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZyhzdHIsICI8c3RyaW5nPiIsIHN0YXJ0LCBmbGFncywgYXJlbmEpOworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CiAgICAgaWYgKG1vZCAhPSBOVUxMKQotICAgICAgICByZXQgPSBydW5fbW9kKG1vZCwgIjxzdHJpbmc+IiwgZ2xvYmFscywgbG9jYWxzLCBmbGFncywgYXJlbmEpOworICAgICAgICByZXQgPSBydW5fbW9kKG1vZCwgZmlsZW5hbWUsIGdsb2JhbHMsIGxvY2FscywgZmxhZ3MsIGFyZW5hKTsKICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgIHJldHVybiByZXQ7CiB9CiAKIFB5T2JqZWN0ICoKLVB5UnVuX0ZpbGVFeEZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LCBQeU9iamVjdCAqZ2xvYmFscywKK1B5UnVuX0ZpbGVFeEZsYWdzKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmaWxlbmFtZV9zdHIsIGludCBzdGFydCwgUHlPYmplY3QgKmdsb2JhbHMsCiAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqbG9jYWxzLCBpbnQgY2xvc2VpdCwgUHlDb21waWxlckZsYWdzICpmbGFncykKIHsKLSAgICBQeU9iamVjdCAqcmV0OworICAgIFB5T2JqZWN0ICpyZXQgPSBOVUxMOwogICAgIG1vZF90eSBtb2Q7Ci0gICAgUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOwotICAgIGlmIChhcmVuYSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBQeUFyZW5hICphcmVuYSA9IE5VTEw7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOwogCi0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbUZpbGUoZnAsIGZpbGVuYW1lLCBOVUxMLCBzdGFydCwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncywgTlVMTCwgYXJlbmEpOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICBnb3RvIGV4aXQ7CisKKyAgICBhcmVuYSA9IFB5QXJlbmFfTmV3KCk7CisgICAgaWYgKGFyZW5hID09IE5VTEwpCisgICAgICAgIGdvdG8gZXhpdDsKKworICAgIG1vZCA9IFB5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KGZwLCBmaWxlbmFtZSwgTlVMTCwgc3RhcnQsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsIE5VTEwsIGFyZW5hKTsKICAgICBpZiAoY2xvc2VpdCkKICAgICAgICAgZmNsb3NlKGZwKTsKICAgICBpZiAobW9kID09IE5VTEwpIHsKLSAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGdvdG8gZXhpdDsKICAgICB9CiAgICAgcmV0ID0gcnVuX21vZChtb2QsIGZpbGVuYW1lLCBnbG9iYWxzLCBsb2NhbHMsIGZsYWdzLCBhcmVuYSk7Ci0gICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKKworZXhpdDoKKyAgICBQeV9YREVDUkVGKGZpbGVuYW1lKTsKKyAgICBpZiAoYXJlbmEgIT0gTlVMTCkKKyAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xOTU5LDEyICsyMTM5LDExIEBACiB7CiAgICAgUHlPYmplY3QgKmYsICpyOwogICAgIFB5T2JqZWN0ICp0eXBlLCAqdmFsdWUsICp0cmFjZWJhY2s7Ci0gICAgX1B5X0lERU5USUZJRVIoZmx1c2gpOwogCiAgICAgLyogU2F2ZSB0aGUgY3VycmVudCBleGNlcHRpb24gKi8KICAgICBQeUVycl9GZXRjaCgmdHlwZSwgJnZhbHVlLCAmdHJhY2ViYWNrKTsKIAotICAgIGYgPSBQeVN5c19HZXRPYmplY3QoInN0ZGVyciIpOworICAgIGYgPSBfUHlTeXNfR2V0T2JqZWN0SWQoJlB5SWRfc3RkZXJyKTsKICAgICBpZiAoZiAhPSBOVUxMKSB7CiAgICAgICAgIHIgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGYsICZQeUlkX2ZsdXNoLCAiIik7CiAgICAgICAgIGlmIChyKQpAQCAtMTk3Miw3ICsyMTUxLDcgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICB9Ci0gICAgZiA9IFB5U3lzX0dldE9iamVjdCgic3Rkb3V0Iik7CisgICAgZiA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRvdXQpOwogICAgIGlmIChmICE9IE5VTEwpIHsKICAgICAgICAgciA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoZiwgJlB5SWRfZmx1c2gsICIiKTsKICAgICAgICAgaWYgKHIpCkBAIC0xOTg1LDEyICsyMTY0LDEyIEBACiB9CiAKIHN0YXRpYyBQeU9iamVjdCAqCi1ydW5fbW9kKG1vZF90eSBtb2QsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBQeU9iamVjdCAqZ2xvYmFscywgUHlPYmplY3QgKmxvY2FscywKLSAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQorcnVuX21vZChtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5T2JqZWN0ICpnbG9iYWxzLCBQeU9iamVjdCAqbG9jYWxzLAorICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgUHlBcmVuYSAqYXJlbmEpCiB7CiAgICAgUHlDb2RlT2JqZWN0ICpjbzsKICAgICBQeU9iamVjdCAqdjsKLSAgICBjbyA9IFB5QVNUX0NvbXBpbGUobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIGFyZW5hKTsKKyAgICBjbyA9IFB5QVNUX0NvbXBpbGVPYmplY3QobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIC0xLCBhcmVuYSk7CiAgICAgaWYgKGNvID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHYgPSBQeUV2YWxfRXZhbENvZGUoKFB5T2JqZWN0KiljbywgZ2xvYmFscywgbG9jYWxzKTsKQEAgLTIwMzIsOCArMjIxMSw4IEBACiB9CiAKIFB5T2JqZWN0ICoKLVB5X0NvbXBpbGVTdHJpbmdFeEZsYWdzKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBzdGFydCwKLSAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCBvcHRpbWl6ZSkKK1B5X0NvbXBpbGVTdHJpbmdPYmplY3QoY29uc3QgY2hhciAqc3RyLCBQeU9iamVjdCAqZmlsZW5hbWUsIGludCBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQogewogICAgIFB5Q29kZU9iamVjdCAqY287CiAgICAgbW9kX3R5IG1vZDsKQEAgLTIwNDEsNyArMjIyMCw3IEBACiAgICAgaWYgKGFyZW5hID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZyhzdHIsIGZpbGVuYW1lLCBzdGFydCwgZmxhZ3MsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCBmbGFncywgYXJlbmEpOwogICAgIGlmIChtb2QgPT0gTlVMTCkgewogICAgICAgICBQeUFyZW5hX0ZyZWUoYXJlbmEpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIwNTEsMTEgKzIyMzAsMjQgQEAKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9Ci0gICAgY28gPSBQeUFTVF9Db21waWxlRXgobW9kLCBmaWxlbmFtZSwgZmxhZ3MsIG9wdGltaXplLCBhcmVuYSk7CisgICAgY28gPSBQeUFTVF9Db21waWxlT2JqZWN0KG1vZCwgZmlsZW5hbWUsIGZsYWdzLCBvcHRpbWl6ZSwgYXJlbmEpOwogICAgIFB5QXJlbmFfRnJlZShhcmVuYSk7CiAgICAgcmV0dXJuIChQeU9iamVjdCAqKWNvOwogfQogCitQeU9iamVjdCAqCitQeV9Db21waWxlU3RyaW5nRXhGbGFncyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50IG9wdGltaXplKQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZSwgKmNvOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBjbyA9IFB5X0NvbXBpbGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBvcHRpbWl6ZSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gY287Cit9CisKIC8qIEZvciB1c2UgaW4gUHlfTElNSVRFRF9BUEkgKi8KICN1bmRlZiBQeV9Db21waWxlU3RyaW5nCiBQeU9iamVjdCAqCkBAIC0yMDY1LDQ2ICsyMjU3LDYyIEBACiB9CiAKIHN0cnVjdCBzeW10YWJsZSAqCi1QeV9TeW10YWJsZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgc3RhcnQpCitQeV9TeW10YWJsZVN0cmluZ09iamVjdChjb25zdCBjaGFyICpzdHIsIFB5T2JqZWN0ICpmaWxlbmFtZSwgaW50IHN0YXJ0KQogewogICAgIHN0cnVjdCBzeW10YWJsZSAqc3Q7CiAgICAgbW9kX3R5IG1vZDsKICAgICBQeUNvbXBpbGVyRmxhZ3MgZmxhZ3M7Ci0gICAgUHlBcmVuYSAqYXJlbmEgPSBQeUFyZW5hX05ldygpOworICAgIFB5QXJlbmEgKmFyZW5hOworCisgICAgYXJlbmEgPSBQeUFyZW5hX05ldygpOwogICAgIGlmIChhcmVuYSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIGZsYWdzLmNmX2ZsYWdzID0gMDsKLSAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCAmZmxhZ3MsIGFyZW5hKTsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tU3RyaW5nT2JqZWN0KHN0ciwgZmlsZW5hbWUsIHN0YXJ0LCAmZmxhZ3MsIGFyZW5hKTsKICAgICBpZiAobW9kID09IE5VTEwpIHsKICAgICAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIHN0ID0gUHlTeW10YWJsZV9CdWlsZChtb2QsIGZpbGVuYW1lLCAwKTsKKyAgICBzdCA9IFB5U3ltdGFibGVfQnVpbGRPYmplY3QobW9kLCBmaWxlbmFtZSwgMCk7CiAgICAgUHlBcmVuYV9GcmVlKGFyZW5hKTsKICAgICByZXR1cm4gc3Q7CiB9CiAKK3N0cnVjdCBzeW10YWJsZSAqCitQeV9TeW10YWJsZVN0cmluZyhjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0KQoreworICAgIFB5T2JqZWN0ICpmaWxlbmFtZTsKKyAgICBzdHJ1Y3Qgc3ltdGFibGUgKnN0OworCisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0ID0gUHlfU3ltdGFibGVTdHJpbmdPYmplY3Qoc3RyLCBmaWxlbmFtZSwgc3RhcnQpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIHN0OworfQorCiAvKiBQcmVmZXJyZWQgYWNjZXNzIHRvIHBhcnNlciBpcyB0aHJvdWdoIEFTVC4gKi8KIG1vZF90eQotUHlQYXJzZXJfQVNURnJvbVN0cmluZyhjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IHN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKK1B5UGFyc2VyX0FTVEZyb21TdHJpbmdPYmplY3QoY29uc3QgY2hhciAqcywgUHlPYmplY3QgKmZpbGVuYW1lLCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIFB5QXJlbmEgKmFyZW5hKQogewogICAgIG1vZF90eSBtb2Q7CiAgICAgUHlDb21waWxlckZsYWdzIGxvY2FsZmxhZ3M7CiAgICAgcGVycmRldGFpbCBlcnI7CiAgICAgaW50IGlmbGFncyA9IFBBUlNFUl9GTEFHUyhmbGFncyk7CiAKLSAgICBub2RlICpuID0gUHlQYXJzZXJfUGFyc2VTdHJpbmdGbGFnc0ZpbGVuYW1lRXgocywgZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsIHN0YXJ0LCAmZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlmbGFncyk7CisgICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlU3RyaW5nT2JqZWN0KHMsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsIHN0YXJ0LCAmZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaWZsYWdzKTsKICAgICBpZiAoZmxhZ3MgPT0gTlVMTCkgewogICAgICAgICBsb2NhbGZsYWdzLmNmX2ZsYWdzID0gMDsKICAgICAgICAgZmxhZ3MgPSAmbG9jYWxmbGFnczsKICAgICB9CiAgICAgaWYgKG4pIHsKICAgICAgICAgZmxhZ3MtPmNmX2ZsYWdzIHw9IGlmbGFncyAmIFB5Q0ZfTUFTSzsKLSAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGUobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CisgICAgICAgIG1vZCA9IFB5QVNUX0Zyb21Ob2RlT2JqZWN0KG4sIGZsYWdzLCBmaWxlbmFtZSwgYXJlbmEpOwogICAgICAgICBQeU5vZGVfRnJlZShuKTsKICAgICB9CiAgICAgZWxzZSB7CkBAIC0yMTE2LDI2ICsyMzI0LDQwIEBACiB9CiAKIG1vZF90eQotUHlQYXJzZXJfQVNURnJvbUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyKiBlbmMsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc3RhcnQsIGNoYXIgKnBzMSwKLSAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBzMiwgUHlDb21waWxlckZsYWdzICpmbGFncywgaW50ICplcnJjb2RlLAotICAgICAgICAgICAgICAgICAgICAgUHlBcmVuYSAqYXJlbmEpCitQeVBhcnNlcl9BU1RGcm9tU3RyaW5nKGNvbnN0IGNoYXIgKnMsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgaW50IHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBQeUFyZW5hICphcmVuYSkKK3sKKyAgICBQeU9iamVjdCAqZmlsZW5hbWU7CisgICAgbW9kX3R5IG1vZDsKKyAgICBmaWxlbmFtZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoZmlsZW5hbWVfc3RyKTsKKyAgICBpZiAoZmlsZW5hbWUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgbW9kID0gUHlQYXJzZXJfQVNURnJvbVN0cmluZ09iamVjdChzLCBmaWxlbmFtZSwgc3RhcnQsIGZsYWdzLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gbW9kOworfQorCittb2RfdHkKK1B5UGFyc2VyX0FTVEZyb21GaWxlT2JqZWN0KEZJTEUgKmZwLCBQeU9iamVjdCAqZmlsZW5hbWUsIGNvbnN0IGNoYXIqIGVuYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydCwgY2hhciAqcHMxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqcHMyLCBQeUNvbXBpbGVyRmxhZ3MgKmZsYWdzLCBpbnQgKmVycmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUFyZW5hICphcmVuYSkKIHsKICAgICBtb2RfdHkgbW9kOwogICAgIFB5Q29tcGlsZXJGbGFncyBsb2NhbGZsYWdzOwogICAgIHBlcnJkZXRhaWwgZXJyOwogICAgIGludCBpZmxhZ3MgPSBQQVJTRVJfRkxBR1MoZmxhZ3MpOwogCi0gICAgbm9kZSAqbiA9IFB5UGFyc2VyX1BhcnNlRmlsZUZsYWdzRXgoZnAsIGZpbGVuYW1lLCBlbmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfUHlQYXJzZXJfR3JhbW1hciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgcHMxLCBwczIsICZlcnIsICZpZmxhZ3MpOworICAgIG5vZGUgKm4gPSBQeVBhcnNlcl9QYXJzZUZpbGVPYmplY3QoZnAsIGZpbGVuYW1lLCBlbmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX1B5UGFyc2VyX0dyYW1tYXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydCwgcHMxLCBwczIsICZlcnIsICZpZmxhZ3MpOwogICAgIGlmIChmbGFncyA9PSBOVUxMKSB7CiAgICAgICAgIGxvY2FsZmxhZ3MuY2ZfZmxhZ3MgPSAwOwogICAgICAgICBmbGFncyA9ICZsb2NhbGZsYWdzOwogICAgIH0KICAgICBpZiAobikgewogICAgICAgICBmbGFncy0+Y2ZfZmxhZ3MgfD0gaWZsYWdzICYgUHlDRl9NQVNLOwotICAgICAgICBtb2QgPSBQeUFTVF9Gcm9tTm9kZShuLCBmbGFncywgZmlsZW5hbWUsIGFyZW5hKTsKKyAgICAgICAgbW9kID0gUHlBU1RfRnJvbU5vZGVPYmplY3QobiwgZmxhZ3MsIGZpbGVuYW1lLCBhcmVuYSk7CiAgICAgICAgIFB5Tm9kZV9GcmVlKG4pOwogICAgIH0KICAgICBlbHNlIHsKQEAgLTIxNDgsNiArMjM3MCwyMyBAQAogICAgIHJldHVybiBtb2Q7CiB9CiAKK21vZF90eQorUHlQYXJzZXJfQVNURnJvbUZpbGUoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZpbGVuYW1lX3N0ciwgY29uc3QgY2hhciogZW5jLAorICAgICAgICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBjaGFyICpwczEsCisgICAgICAgICAgICAgICAgICAgICBjaGFyICpwczIsIFB5Q29tcGlsZXJGbGFncyAqZmxhZ3MsIGludCAqZXJyY29kZSwKKyAgICAgICAgICAgICAgICAgICAgIFB5QXJlbmEgKmFyZW5hKQoreworICAgIG1vZF90eSBtb2Q7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIGZpbGVuYW1lID0gUHlVbmljb2RlX0RlY29kZUZTRGVmYXVsdChmaWxlbmFtZV9zdHIpOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBtb2QgPSBQeVBhcnNlcl9BU1RGcm9tRmlsZU9iamVjdChmcCwgZmlsZW5hbWUsIGVuYywgc3RhcnQsIHBzMSwgcHMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLCBlcnJjb2RlLCBhcmVuYSk7CisgICAgUHlfREVDUkVGKGZpbGVuYW1lKTsKKyAgICByZXR1cm4gbW9kOworfQorCiAvKiBTaW1wbGlmaWVkIGludGVyZmFjZSB0byBwYXJzZWZpbGUgLS0gcmV0dXJuIG5vZGUgb3Igc2V0IGV4Y2VwdGlvbiAqLwogCiBub2RlICoKQEAgLTIzNDMsNDkgKzI1ODIsMTMzIEBACiAgICAgfQogfQogCisvKiBQcmludCB0aGUgY3VycmVudCBleGNlcHRpb24gKGlmIGFuIGV4Y2VwdGlvbiBpcyBzZXQpIHdpdGggaXRzIHRyYWNlYmFjaywKKyAqIG9yIGRpc3BsYXkgdGhlIGN1cnJlbnQgUHl0aG9uIHN0YWNrLgorICoKKyAqIERvbid0IGNhbGwgUHlFcnJfUHJpbnRFeCgpIGFuZCB0aGUgZXhjZXB0IGhvb2ssIGJlY2F1c2UgUHlfRmF0YWxFcnJvcigpIGlzCisgKiBjYWxsZWQgb24gY2F0YXN0cm9waGljIGNhc2VzLiAqLworCitzdGF0aWMgdm9pZAorX1B5X1ByaW50RmF0YWxFcnJvcihpbnQgZmQpCit7CisgICAgUHlPYmplY3QgKmZlcnIsICpyZXM7CisgICAgUHlPYmplY3QgKmV4Y2VwdGlvbiwgKnYsICp0YjsKKyAgICBpbnQgaGFzX3RiOworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZTsKKworICAgIFB5RXJyX0ZldGNoKCZleGNlcHRpb24sICZ2LCAmdGIpOworICAgIGlmIChleGNlcHRpb24gPT0gTlVMTCkgeworICAgICAgICAvKiBObyBjdXJyZW50IGV4Y2VwdGlvbiAqLworICAgICAgICBnb3RvIGRpc3BsYXlfc3RhY2s7CisgICAgfQorCisgICAgZmVyciA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9zdGRlcnIpOworICAgIGlmIChmZXJyID09IE5VTEwgfHwgZmVyciA9PSBQeV9Ob25lKSB7CisgICAgICAgIC8qIHN5cy5zdGRlcnIgaXMgbm90IHNldCB5ZXQgb3Igc2V0IHRvIE5vbmUsCisgICAgICAgICAgIG5vIG5lZWQgdG8gdHJ5IHRvIGRpc3BsYXkgdGhlIGV4Y2VwdGlvbiAqLworICAgICAgICBnb3RvIGRpc3BsYXlfc3RhY2s7CisgICAgfQorCisgICAgUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCZleGNlcHRpb24sICZ2LCAmdGIpOworICAgIGlmICh0YiA9PSBOVUxMKSB7CisgICAgICAgIHRiID0gUHlfTm9uZTsKKyAgICAgICAgUHlfSU5DUkVGKHRiKTsKKyAgICB9CisgICAgUHlFeGNlcHRpb25fU2V0VHJhY2ViYWNrKHYsIHRiKTsKKyAgICBpZiAoZXhjZXB0aW9uID09IE5VTEwpIHsKKyAgICAgICAgLyogUHlFcnJfTm9ybWFsaXplRXhjZXB0aW9uKCkgZmFpbGVkICovCisgICAgICAgIGdvdG8gZGlzcGxheV9zdGFjazsKKyAgICB9CisKKyAgICBoYXNfdGIgPSAodGIgIT0gTlVMTCAmJiB0YiAhPSBQeV9Ob25lKTsKKyAgICBQeUVycl9EaXNwbGF5KGV4Y2VwdGlvbiwgdiwgdGIpOworICAgIFB5X1hERUNSRUYoZXhjZXB0aW9uKTsKKyAgICBQeV9YREVDUkVGKHYpOworICAgIFB5X1hERUNSRUYodGIpOworCisgICAgLyogc3lzLnN0ZGVyciBtYXkgYmUgYnVmZmVyZWQ6IGNhbGwgc3lzLnN0ZGVyci5mbHVzaCgpICovCisgICAgcmVzID0gX1B5T2JqZWN0X0NhbGxNZXRob2RJZChmZXJyLCAmUHlJZF9mbHVzaCwgIiIpOworICAgIGlmIChyZXMgPT0gTlVMTCkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKyAgICBlbHNlCisgICAgICAgIFB5X0RFQ1JFRihyZXMpOworCisgICAgaWYgKGhhc190YikKKyAgICAgICAgcmV0dXJuOworCitkaXNwbGF5X3N0YWNrOgorI2lmZGVmIFdJVEhfVEhSRUFECisgICAgLyogUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKSB3b3JrcyBldmVuIGlmIHRoZSBHSUwgd2FzIHJlbGVhc2VkICovCisgICAgdHN0YXRlID0gUHlHSUxTdGF0ZV9HZXRUaGlzVGhyZWFkU3RhdGUoKTsKKyNlbHNlCisgICAgdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyNlbmRpZgorICAgIGlmICh0c3RhdGUgPT0gTlVMTCkgeworICAgICAgICAvKiBfUHlfRHVtcFRyYWNlYmFja1RocmVhZHMoKSByZXF1aXJlcyB0aGUgdGhyZWFkIHN0YXRlIHRvIGRpc3BsYXkKKyAgICAgICAgICogZnJhbWVzICovCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmcHV0YygnXG4nLCBzdGRlcnIpOworICAgIGZmbHVzaChzdGRlcnIpOworCisgICAgLyogZGlzcGxheSB0aGUgY3VycmVudCBQeXRob24gc3RhY2sgKi8KKyAgICBfUHlfRHVtcFRyYWNlYmFja1RocmVhZHMoZmQsIHRzdGF0ZS0+aW50ZXJwLCB0c3RhdGUpOworfQorCiAvKiBQcmludCBmYXRhbCBlcnJvciBtZXNzYWdlIGFuZCBhYm9ydCAqLwogCiB2b2lkCiBQeV9GYXRhbEVycm9yKGNvbnN0IGNoYXIgKm1zZykKIHsKICAgICBjb25zdCBpbnQgZmQgPSBmaWxlbm8oc3RkZXJyKTsKLSAgICBQeVRocmVhZFN0YXRlICp0c3RhdGU7CisgICAgc3RhdGljIGludCByZWVudHJhbnQgPSAwOworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBzaXplX3QgbGVuOworICAgIFdDSEFSKiBidWZmZXI7CisgICAgc2l6ZV90IGk7CisjZW5kaWYKKworICAgIGlmIChyZWVudHJhbnQpIHsKKyAgICAgICAgLyogUHlfRmF0YWxFcnJvcigpIGNhdXNlZCBhIHNlY29uZCBmYXRhbCBlcnJvci4KKyAgICAgICAgICAgRXhhbXBsZTogZmx1c2hfc3RkX2ZpbGVzKCkgcmFpc2VzIGEgcmVjdXJzaW9uIGVycm9yLiAqLworICAgICAgICBnb3RvIGV4aXQ7CisgICAgfQorICAgIHJlZW50cmFudCA9IDE7CiAKICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhdGFsIFB5dGhvbiBlcnJvcjogJXNcbiIsIG1zZyk7CiAgICAgZmZsdXNoKHN0ZGVycik7IC8qIGl0IGhlbHBzIGluIFdpbmRvd3MgZGVidWcgYnVpbGQgKi8KLSAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewotICAgICAgICBQeUVycl9QcmludEV4KDApOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICAgdHN0YXRlID0gX1B5X2F0b21pY19sb2FkX3JlbGF4ZWQoJl9QeVRocmVhZFN0YXRlX0N1cnJlbnQpOwotICAgICAgICBpZiAodHN0YXRlICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGZwdXRjKCdcbicsIHN0ZGVycik7Ci0gICAgICAgICAgICBmZmx1c2goc3RkZXJyKTsKLSAgICAgICAgICAgIF9QeV9EdW1wVHJhY2ViYWNrVGhyZWFkcyhmZCwgdHN0YXRlLT5pbnRlcnAsIHRzdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgX1B5RmF1bHRoYW5kbGVyX0ZpbmkoKTsKLSAgICB9CisKKyAgICAvKiBQcmludCB0aGUgZXhjZXB0aW9uIChpZiBhbiBleGNlcHRpb24gaXMgc2V0KSB3aXRoIGl0cyB0cmFjZWJhY2ssCisgICAgICogb3IgZGlzcGxheSB0aGUgY3VycmVudCBQeXRob24gc3RhY2suICovCisgICAgX1B5X1ByaW50RmF0YWxFcnJvcihmZCk7CisKKyAgICAvKiBGbHVzaCBzeXMuc3Rkb3V0IGFuZCBzeXMuc3RkZXJyICovCisgICAgZmx1c2hfc3RkX2ZpbGVzKCk7CisKKyAgICAvKiBUaGUgbWFpbiBwdXJwb3NlIG9mIGZhdWx0aGFuZGxlciBpcyB0byBkaXNwbGF5IHRoZSB0cmFjZWJhY2suIFdlIGFscmVhZHkKKyAgICAgKiBkaWQgb3VyIGJlc3QgdG8gZGlzcGxheSBpdC4gU28gZmF1bHRoYW5kbGVyIGNhbiBub3cgYmUgZGlzYWJsZWQuCisgICAgICogKERvbid0IHRyaWdnZXIgaXQgb24gYWJvcnQoKS4pICovCisgICAgX1B5RmF1bHRoYW5kbGVyX0ZpbmkoKTsKIAogI2lmZGVmIE1TX1dJTkRPV1MKLSAgICB7Ci0gICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4obXNnKTsKLSAgICAgICAgV0NIQVIqIGJ1ZmZlcjsKLSAgICAgICAgc2l6ZV90IGk7CisgICAgbGVuID0gc3RybGVuKG1zZyk7CiAKLSAgICAgICAgLyogQ29udmVydCB0aGUgbWVzc2FnZSB0byB3Y2hhcl90LiBUaGlzIHVzZXMgYSBzaW1wbGUgb25lLXRvLW9uZQotICAgICAgICBjb252ZXJzaW9uLCBhc3N1bWluZyB0aGF0IHRoZSB0aGlzIGVycm9yIG1lc3NhZ2UgYWN0dWFsbHkgdXNlcyBBU0NJSQotICAgICAgICBvbmx5LiBJZiB0aGlzIGNlYXNlcyB0byBiZSB0cnVlLCB3ZSB3aWxsIGhhdmUgdG8gY29udmVydC4gKi8KLSAgICAgICAgYnVmZmVyID0gYWxsb2NhKCAobGVuKzEpICogKHNpemVvZiAqYnVmZmVyKSk7Ci0gICAgICAgIGZvciggaT0wOyBpPD1sZW47ICsraSkKLSAgICAgICAgICAgIGJ1ZmZlcltpXSA9IG1zZ1tpXTsKLSAgICAgICAgT3V0cHV0RGVidWdTdHJpbmdXKEwiRmF0YWwgUHl0aG9uIGVycm9yOiAiKTsKLSAgICAgICAgT3V0cHV0RGVidWdTdHJpbmdXKGJ1ZmZlcik7Ci0gICAgICAgIE91dHB1dERlYnVnU3RyaW5nVyhMIlxuIik7Ci0gICAgfQotI2lmZGVmIF9ERUJVRworICAgIC8qIENvbnZlcnQgdGhlIG1lc3NhZ2UgdG8gd2NoYXJfdC4gVGhpcyB1c2VzIGEgc2ltcGxlIG9uZS10by1vbmUKKyAgICBjb252ZXJzaW9uLCBhc3N1bWluZyB0aGF0IHRoZSB0aGlzIGVycm9yIG1lc3NhZ2UgYWN0dWFsbHkgdXNlcyBBU0NJSQorICAgIG9ubHkuIElmIHRoaXMgY2Vhc2VzIHRvIGJlIHRydWUsIHdlIHdpbGwgaGF2ZSB0byBjb252ZXJ0LiAqLworICAgIGJ1ZmZlciA9IGFsbG9jYSggKGxlbisxKSAqIChzaXplb2YgKmJ1ZmZlcikpOworICAgIGZvciggaT0wOyBpPD1sZW47ICsraSkKKyAgICAgICAgYnVmZmVyW2ldID0gbXNnW2ldOworICAgIE91dHB1dERlYnVnU3RyaW5nVyhMIkZhdGFsIFB5dGhvbiBlcnJvcjogIik7CisgICAgT3V0cHV0RGVidWdTdHJpbmdXKGJ1ZmZlcik7CisgICAgT3V0cHV0RGVidWdTdHJpbmdXKEwiXG4iKTsKKyNlbmRpZiAvKiBNU19XSU5ET1dTICovCisKK2V4aXQ6CisjaWYgZGVmaW5lZChNU19XSU5ET1dTKSAmJiBkZWZpbmVkKF9ERUJVRykKICAgICBEZWJ1Z0JyZWFrKCk7CiAjZW5kaWYKLSNlbmRpZiAvKiBNU19XSU5ET1dTICovCiAgICAgYWJvcnQoKTsKIH0KIApAQCAtMjQ4NCw2ICsyODA3LDkgQEAKICAgICBQeU9TX3NldHNpZyhTSUdYRlNaLCBTSUdfSUdOKTsKICNlbmRpZgogICAgIFB5T1NfSW5pdEludGVycnVwdHMoKTsgLyogTWF5IGltcGx5IGluaXRzaWduYWwoKSAqLworICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKSB7CisgICAgICAgIFB5X0ZhdGFsRXJyb3IoIlB5X0luaXRpYWxpemU6IGNhbid0IGltcG9ydCBzaWduYWwiKTsKKyAgICB9CiB9CiAKIApkaWZmIC0tZ2l0IGEvUHl0aG9uL3B5dGltZS5jIGIvUHl0aG9uL3B5dGltZS5jCmluZGV4IGJlZWFiODcuLmRlNmE0MWYgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9weXRpbWUuYworKysgYi9QeXRob24vcHl0aW1lLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiBzdGF0aWMgaW50CiBfUHlUaW1lX09iamVjdFRvRGVub21pbmF0b3IoUHlPYmplY3QgKm9iaiwgdGltZV90ICpzZWMsIGxvbmcgKm51bWVyYXRvciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgZGVub21pbmF0b3IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIGRlbm9taW5hdG9yLCBfUHlUaW1lX3JvdW5kX3Qgcm91bmQpCiB7CiAgICAgYXNzZXJ0KGRlbm9taW5hdG9yIDw9IExPTkdfTUFYKTsKICAgICBpZiAoUHlGbG9hdF9DaGVjayhvYmopKSB7CkBAIC0xNjcsNiArMTY3LDIwIEBACiAgICAgICAgICAgICBpbnRwYXJ0IC09IDEuMDsKICAgICAgICAgfQogCisgICAgICAgIGZsb2F0cGFydCAqPSBkZW5vbWluYXRvcjsKKyAgICAgICAgaWYgKHJvdW5kID09IF9QeVRpbWVfUk9VTkRfVVApIHsKKyAgICAgICAgICAgIGlmIChpbnRwYXJ0ID49IDApIHsKKyAgICAgICAgICAgICAgICBmbG9hdHBhcnQgPSBjZWlsKGZsb2F0cGFydCk7CisgICAgICAgICAgICAgICAgaWYgKGZsb2F0cGFydCA+PSBkZW5vbWluYXRvcikgeworICAgICAgICAgICAgICAgICAgICBmbG9hdHBhcnQgPSAwLjA7CisgICAgICAgICAgICAgICAgICAgIGludHBhcnQgKz0gMS4wOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGZsb2F0cGFydCA9IGZsb29yKGZsb2F0cGFydCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwogICAgICAgICAqc2VjID0gKHRpbWVfdClpbnRwYXJ0OwogICAgICAgICBlcnIgPSBpbnRwYXJ0IC0gKGRvdWJsZSkqc2VjOwogICAgICAgICBpZiAoZXJyIDw9IC0xLjAgfHwgZXJyID49IDEuMCkgewpAQCAtMTc0LDcgKzE4OCw2IEBACiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KIAotICAgICAgICBmbG9hdHBhcnQgKj0gZGVub21pbmF0b3I7CiAgICAgICAgICpudW1lcmF0b3IgPSAobG9uZylmbG9hdHBhcnQ7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE4OCwxMiArMjAxLDE4IEBACiB9CiAKIGludAotX1B5VGltZV9PYmplY3RUb1RpbWVfdChQeU9iamVjdCAqb2JqLCB0aW1lX3QgKnNlYykKK19QeVRpbWVfT2JqZWN0VG9UaW1lX3QoUHlPYmplY3QgKm9iaiwgdGltZV90ICpzZWMsIF9QeVRpbWVfcm91bmRfdCByb3VuZCkKIHsKICAgICBpZiAoUHlGbG9hdF9DaGVjayhvYmopKSB7CiAgICAgICAgIGRvdWJsZSBkLCBpbnRwYXJ0LCBlcnI7CiAKICAgICAgICAgZCA9IFB5RmxvYXRfQXNEb3VibGUob2JqKTsKKyAgICAgICAgaWYgKHJvdW5kID09IF9QeVRpbWVfUk9VTkRfVVApIHsKKyAgICAgICAgICAgIGlmIChkID49IDApCisgICAgICAgICAgICAgICAgZCA9IGNlaWwoZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZCA9IGZsb29yKGQpOworICAgICAgICB9CiAgICAgICAgICh2b2lkKW1vZGYoZCwgJmludHBhcnQpOwogCiAgICAgICAgICpzZWMgPSAodGltZV90KWludHBhcnQ7CkBAIC0yMTMsMTUgKzIzMiwxNyBAQAogfQogCiBpbnQKLV9QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhQeU9iamVjdCAqb2JqLCB0aW1lX3QgKnNlYywgbG9uZyAqbnNlYykKK19QeVRpbWVfT2JqZWN0VG9UaW1lc3BlYyhQeU9iamVjdCAqb2JqLCB0aW1lX3QgKnNlYywgbG9uZyAqbnNlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICBfUHlUaW1lX3JvdW5kX3Qgcm91bmQpCiB7Ci0gICAgcmV0dXJuIF9QeVRpbWVfT2JqZWN0VG9EZW5vbWluYXRvcihvYmosIHNlYywgbnNlYywgMWU5KTsKKyAgICByZXR1cm4gX1B5VGltZV9PYmplY3RUb0Rlbm9taW5hdG9yKG9iaiwgc2VjLCBuc2VjLCAxZTksIHJvdW5kKTsKIH0KIAogaW50Ci1fUHlUaW1lX09iamVjdFRvVGltZXZhbChQeU9iamVjdCAqb2JqLCB0aW1lX3QgKnNlYywgbG9uZyAqdXNlYykKK19QeVRpbWVfT2JqZWN0VG9UaW1ldmFsKFB5T2JqZWN0ICpvYmosIHRpbWVfdCAqc2VjLCBsb25nICp1c2VjLAorICAgICAgICAgICAgICAgICAgICAgICAgX1B5VGltZV9yb3VuZF90IHJvdW5kKQogewotICAgIHJldHVybiBfUHlUaW1lX09iamVjdFRvRGVub21pbmF0b3Iob2JqLCBzZWMsIHVzZWMsIDFlNik7CisgICAgcmV0dXJuIF9QeVRpbWVfT2JqZWN0VG9EZW5vbWluYXRvcihvYmosIHNlYywgdXNlYywgMWU2LCByb3VuZCk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL1B5dGhvbi9yYW5kb20uYyBiL1B5dGhvbi9yYW5kb20uYwppbmRleCAzMzdiZTg2Li5hZjNkMGJkIDEwMDY0NAotLS0gYS9QeXRob24vcmFuZG9tLmMKKysrIGIvUHl0aG9uL3JhbmRvbS5jCkBAIC0zLDYgKzMsOSBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCiAjaW5jbHVkZSA8ZmNudGwuaD4KKyNpZmRlZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCiAjZW5kaWYKIAogI2lmZGVmIFB5X0RFQlVHCkBAIC0xMiw0MyArMTUsMTQgQEAKICNlbmRpZgogCiAjaWZkZWYgTVNfV0lORE9XUwotdHlwZWRlZiBCT09MIChXSU5BUEkgKkNSWVBUQUNRVUlSRUNPTlRFWFRBKShIQ1JZUFRQUk9WICpwaFByb3YsXAotICAgICAgICAgICAgICBMUENTVFIgcHN6Q29udGFpbmVyLCBMUENTVFIgcHN6UHJvdmlkZXIsIERXT1JEIGR3UHJvdlR5cGUsXAotICAgICAgICAgICAgICBEV09SRCBkd0ZsYWdzICk7Ci10eXBlZGVmIEJPT0wgKFdJTkFQSSAqQ1JZUFRHRU5SQU5ET00pKEhDUllQVFBST1YgaFByb3YsIERXT1JEIGR3TGVuLFwKLSAgICAgICAgICAgICAgQllURSAqcGJCdWZmZXIgKTsKLQotc3RhdGljIENSWVBUR0VOUkFORE9NIHBDcnlwdEdlblJhbmRvbSA9IE5VTEw7Ci0vKiBUaGlzIGhhbmRsZSBpcyBuZXZlciBleHBsaWNpdGx5IHJlbGVhc2VkLiBJbnN0ZWFkLCB0aGUgb3BlcmF0aW5nCi0gICBzeXN0ZW0gd2lsbCByZWxlYXNlIGl0IHdoZW4gdGhlIHByb2Nlc3MgdGVybWluYXRlcy4gKi8KIHN0YXRpYyBIQ1JZUFRQUk9WIGhDcnlwdFByb3YgPSAwOwogCiBzdGF0aWMgaW50CiB3aW4zMl91cmFuZG9tX2luaXQoaW50IHJhaXNlKQogewotICAgIEhJTlNUQU5DRSBoQWR2QVBJMzIgPSBOVUxMOwotICAgIENSWVBUQUNRVUlSRUNPTlRFWFRBIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gTlVMTDsKLQotICAgIC8qIE9idGFpbiBoYW5kbGUgdG8gdGhlIERMTCBjb250YWluaW5nIENyeXB0b0FQSS4gVGhpcyBzaG91bGQgbm90IGZhaWwuICovCi0gICAgaEFkdkFQSTMyID0gR2V0TW9kdWxlSGFuZGxlKCJhZHZhcGkzMi5kbGwiKTsKLSAgICBpZihoQWR2QVBJMzIgPT0gTlVMTCkKLSAgICAgICAgZ290byBlcnJvcjsKLQotICAgIC8qIE9idGFpbiBwb2ludGVycyB0byB0aGUgQ3J5cHRvQVBJIGZ1bmN0aW9ucy4gVGhpcyB3aWxsIGZhaWwgb24gc29tZSBlYXJseQotICAgICAgIHZlcnNpb25zIG9mIFdpbjk1LiAqLwotICAgIHBDcnlwdEFjcXVpcmVDb250ZXh0ID0gKENSWVBUQUNRVUlSRUNPTlRFWFRBKUdldFByb2NBZGRyZXNzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhBZHZBUEkzMiwgIkNyeXB0QWNxdWlyZUNvbnRleHRBIik7Ci0gICAgaWYgKHBDcnlwdEFjcXVpcmVDb250ZXh0ID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KLSAgICBwQ3J5cHRHZW5SYW5kb20gPSAoQ1JZUFRHRU5SQU5ET00pR2V0UHJvY0FkZHJlc3MoaEFkdkFQSTMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ3J5cHRHZW5SYW5kb20iKTsKLSAgICBpZiAocENyeXB0R2VuUmFuZG9tID09IE5VTEwpCi0gICAgICAgIGdvdG8gZXJyb3I7Ci0KICAgICAvKiBBY3F1aXJlIGNvbnRleHQgKi8KLSAgICBpZiAoISBwQ3J5cHRBY3F1aXJlQ29udGV4dCgmaENyeXB0UHJvdiwgTlVMTCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9WX1JTQV9GVUxMLCBDUllQVF9WRVJJRllDT05URVhUKSkKKyAgICBpZiAoIUNyeXB0QWNxdWlyZUNvbnRleHQoJmhDcnlwdFByb3YsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1ZfUlNBX0ZVTEwsIENSWVBUX1ZFUklGWUNPTlRFWFQpKQogICAgICAgICBnb3RvIGVycm9yOwogCiAgICAgcmV0dXJuIDA7CkBAIC02Miw3ICszNiw3IEBACiB9CiAKIC8qIEZpbGwgYnVmZmVyIHdpdGggc2l6ZSBwc2V1ZG8tcmFuZG9tIGJ5dGVzIGdlbmVyYXRlZCBieSB0aGUgV2luZG93cyBDcnlwdG9HZW4KLSAgIEFQSS4gUmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgLTEgb24gZXJyb3IuICovCisgICBBUEkuIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwogc3RhdGljIGludAogd2luMzJfdXJhbmRvbSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSwgaW50IHJhaXNlKQogewpAQCAtNzcsNyArNTEsNyBAQAogICAgIHdoaWxlIChzaXplID4gMCkKICAgICB7CiAgICAgICAgIGNodW5rID0gc2l6ZSA+IElOVF9NQVggPyBJTlRfTUFYIDogc2l6ZTsKLSAgICAgICAgaWYgKCFwQ3J5cHRHZW5SYW5kb20oaENyeXB0UHJvdiwgY2h1bmssIGJ1ZmZlcikpCisgICAgICAgIGlmICghQ3J5cHRHZW5SYW5kb20oaENyeXB0UHJvdiwgKERXT1JEKWNodW5rLCBidWZmZXIpKQogICAgICAgICB7CiAgICAgICAgICAgICAvKiBDcnlwdEdlblJhbmRvbSgpIGZhaWxlZCAqLwogICAgICAgICAgICAgaWYgKHJhaXNlKQpAQCAtOTIsNDMgKzY2LDY0IEBACiAgICAgfQogICAgIHJldHVybiAwOwogfQotI2VuZGlmIC8qIE1TX1dJTkRPV1MgKi8KIAorLyogSXNzdWUgIzI1MDAzOiBEb24nIHVzZSBnZXRlbnRyb3B5KCkgb24gU29sYXJpcyAoYXZhaWxhYmxlIHNpbmNlCisgKiBTb2xhcmlzIDExLjMpLCBpdCBpcyBibG9ja2luZyB3aGVyZWFzIG9zLnVyYW5kb20oKSBzaG91bGQgbm90IGJsb2NrLiAqLworI2VsaWYgZGVmaW5lZChIQVZFX0dFVEVOVFJPUFkpICYmICFkZWZpbmVkKHN1bikKKyNkZWZpbmUgUFlfR0VURU5UUk9QWSAxCiAKLSNpZmRlZiBfX1ZNUwotLyogVXNlIG9wZW5zc2wgcmFuZG9tIHJvdXRpbmUgKi8KLSNpbmNsdWRlIDxvcGVuc3NsL3JhbmQuaD4KKy8qIEZpbGwgYnVmZmVyIHdpdGggc2l6ZSBwc2V1ZG8tcmFuZG9tIGJ5dGVzIGdlbmVyYXRlZCBieSBnZXRlbnRyb3B5KCkuCisgICBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciByYWlzZSBhbiBleGNlcHRpb24gYW5kIHJldHVybiAtMSBvbiBlcnJvci4KKworICAgSWYgZmF0YWwgaXMgbm9uemVybywgY2FsbCBQeV9GYXRhbEVycm9yKCkgaW5zdGVhZCBvZiByYWlzaW5nIGFuIGV4Y2VwdGlvbgorICAgb24gZXJyb3IuICovCiBzdGF0aWMgaW50Ci12bXNfdXJhbmRvbSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSwgaW50IHJhaXNlKQorcHlfZ2V0ZW50cm9weSh1bnNpZ25lZCBjaGFyICpidWZmZXIsIFB5X3NzaXplX3Qgc2l6ZSwgaW50IGZhdGFsKQogewotICAgIGlmIChSQU5EX3BzZXVkb19ieXRlcyhidWZmZXIsIHNpemUpIDwgMCkgewotICAgICAgICBpZiAocmFpc2UpIHsKLSAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19WYWx1ZUVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICJSQU5EX3BzZXVkb19ieXRlcyIpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUHlfRmF0YWxFcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHJhbmRvbWl6ZWQgaGFzaCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJzZWNyZXQgdXNpbmcgUkFORF9wc2V1ZG9fYnl0ZXMiKTsKKyAgICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICAgICAgUHlfc3NpemVfdCBsZW4gPSBQeV9NSU4oc2l6ZSwgMjU2KTsKKyAgICAgICAgaW50IHJlczsKKworICAgICAgICBpZiAoIWZhdGFsKSB7CisgICAgICAgICAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCisgICAgICAgICAgICByZXMgPSBnZXRlbnRyb3B5KGJ1ZmZlciwgbGVuKTsKKyAgICAgICAgICAgIFB5X0VORF9BTExPV19USFJFQURTCisKKyAgICAgICAgICAgIGlmIChyZXMgPCAwKSB7CisgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgcmVzID0gZ2V0ZW50cm9weShidWZmZXIsIGxlbik7CisgICAgICAgICAgICBpZiAocmVzIDwgMCkKKyAgICAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJnZXRlbnRyb3B5KCkgZmFpbGVkIik7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXIgKz0gbGVuOworICAgICAgICBzaXplIC09IGxlbjsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9Ci0jZW5kaWYgLyogX19WTVMgKi8KIAotCi0jaWYgIWRlZmluZWQoTVNfV0lORE9XUykgJiYgIWRlZmluZWQoX19WTVMpCisjZWxzZQorc3RhdGljIHN0cnVjdCB7CisgICAgaW50IGZkOworICAgIGRldl90IHN0X2RldjsKKyAgICBpbm9fdCBzdF9pbm87Cit9IHVyYW5kb21fY2FjaGUgPSB7IC0xIH07CiAKIC8qIFJlYWQgc2l6ZSBieXRlcyBmcm9tIC9kZXYvdXJhbmRvbSBpbnRvIGJ1ZmZlci4KICAgIENhbGwgUHlfRmF0YWxFcnJvcigpIG9uIGVycm9yLiAqLwogc3RhdGljIHZvaWQKLWRldl91cmFuZG9tX25vcmFpc2UoY2hhciAqYnVmZmVyLCBQeV9zc2l6ZV90IHNpemUpCitkZXZfdXJhbmRvbV9ub3JhaXNlKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgUHlfc3NpemVfdCBzaXplKQogewogICAgIGludCBmZDsKICAgICBQeV9zc2l6ZV90IG47CiAKICAgICBhc3NlcnQgKDAgPCBzaXplKTsKIAotICAgIGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOworICAgIGZkID0gX1B5X29wZW4oIi9kZXYvdXJhbmRvbSIsIE9fUkRPTkxZKTsKICAgICBpZiAoZmQgPCAwKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJGYWlsZWQgdG8gb3BlbiAvZGV2L3VyYW5kb20iKTsKIApAQCAtMTU2LDIyICsxNTEsNTYgQEAKIHsKICAgICBpbnQgZmQ7CiAgICAgUHlfc3NpemVfdCBuOworICAgIHN0cnVjdCBzdGF0IHN0OwogCiAgICAgaWYgKHNpemUgPD0gMCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBQeV9CRUdJTl9BTExPV19USFJFQURTCi0gICAgZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7Ci0gICAgUHlfRU5EX0FMTE9XX1RIUkVBRFMKLSAgICBpZiAoZmQgPCAwKQotICAgIHsKLSAgICAgICAgaWYgKGVycm5vID09IEVOT0VOVCB8fCBlcnJubyA9PSBFTlhJTyB8fAotICAgICAgICAgICAgZXJybm8gPT0gRU5PREVWIHx8IGVycm5vID09IEVBQ0NFUykKLSAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19Ob3RJbXBsZW1lbnRlZEVycm9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvZGV2L3VyYW5kb20gKG9yIGVxdWl2YWxlbnQpIG5vdCBmb3VuZCIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7Ci0gICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAodXJhbmRvbV9jYWNoZS5mZCA+PSAwKSB7CisgICAgICAgIC8qIERvZXMgdGhlIGZkIHBvaW50IHRvIHRoZSBzYW1lIHRoaW5nIGFzIGJlZm9yZT8gKGlzc3VlICMyMTIwNykgKi8KKyAgICAgICAgaWYgKGZzdGF0KHVyYW5kb21fY2FjaGUuZmQsICZzdCkKKyAgICAgICAgICAgIHx8IHN0LnN0X2RldiAhPSB1cmFuZG9tX2NhY2hlLnN0X2RldgorICAgICAgICAgICAgfHwgc3Quc3RfaW5vICE9IHVyYW5kb21fY2FjaGUuc3RfaW5vKSB7CisgICAgICAgICAgICAvKiBTb21ldGhpbmcgY2hhbmdlZDogZm9yZ2V0IHRoZSBjYWNoZWQgZmQgKGJ1dCBkb24ndCBjbG9zZSBpdCwKKyAgICAgICAgICAgICAgIHNpbmNlIGl0IHByb2JhYmx5IHBvaW50cyB0byBzb21ldGhpbmcgaW1wb3J0YW50IGZvciBzb21lCisgICAgICAgICAgICAgICB0aGlyZC1wYXJ0eSBjb2RlKS4gKi8KKyAgICAgICAgICAgIHVyYW5kb21fY2FjaGUuZmQgPSAtMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodXJhbmRvbV9jYWNoZS5mZCA+PSAwKQorICAgICAgICBmZCA9IHVyYW5kb21fY2FjaGUuZmQ7CisgICAgZWxzZSB7CisgICAgICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKKyAgICAgICAgZmQgPSBfUHlfb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOworICAgICAgICBQeV9FTkRfQUxMT1dfVEhSRUFEUworICAgICAgICBpZiAoZmQgPCAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PRU5UIHx8IGVycm5vID09IEVOWElPIHx8CisgICAgICAgICAgICAgICAgZXJybm8gPT0gRU5PREVWIHx8IGVycm5vID09IEVBQ0NFUykKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfTm90SW1wbGVtZW50ZWRFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9kZXYvdXJhbmRvbSAob3IgZXF1aXZhbGVudCkgbm90IGZvdW5kIik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgUHlFcnJfU2V0RnJvbUVycm5vKFB5RXhjX09TRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGlmICh1cmFuZG9tX2NhY2hlLmZkID49IDApIHsKKyAgICAgICAgICAgIC8qIHVyYW5kb21fZmQgd2FzIGluaXRpYWxpemVkIGJ5IGFub3RoZXIgdGhyZWFkIHdoaWxlIHdlIHdlcmUKKyAgICAgICAgICAgICAgIG5vdCBob2xkaW5nIHRoZSBHSUwsIGtlZXAgaXQuICovCisgICAgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICAgICBmZCA9IHVyYW5kb21fY2FjaGUuZmQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoZnN0YXQoZmQsICZzdCkpIHsKKyAgICAgICAgICAgICAgICBQeUVycl9TZXRGcm9tRXJybm8oUHlFeGNfT1NFcnJvcik7CisgICAgICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHVyYW5kb21fY2FjaGUuZmQgPSBmZDsKKyAgICAgICAgICAgICAgICB1cmFuZG9tX2NhY2hlLnN0X2RldiA9IHN0LnN0X2RldjsKKyAgICAgICAgICAgICAgICB1cmFuZG9tX2NhY2hlLnN0X2lubyA9IHN0LnN0X2lubzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0KIAogICAgIFB5X0JFR0lOX0FMTE9XX1RIUkVBRFMKQEAgLTE5NSwxMyArMjI0LDIxIEBACiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfUnVudGltZUVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVhZCAlemkgYnl0ZXMgZnJvbSAvZGV2L3VyYW5kb20iLAogICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUpOwotICAgICAgICBjbG9zZShmZCk7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9Ci0gICAgY2xvc2UoZmQpOwogICAgIHJldHVybiAwOwogfQotI2VuZGlmIC8qICFkZWZpbmVkKE1TX1dJTkRPV1MpICYmICFkZWZpbmVkKF9fVk1TKSAqLworCitzdGF0aWMgdm9pZAorZGV2X3VyYW5kb21fY2xvc2Uodm9pZCkKK3sKKyAgICBpZiAodXJhbmRvbV9jYWNoZS5mZCA+PSAwKSB7CisgICAgICAgIGNsb3NlKHVyYW5kb21fY2FjaGUuZmQpOworICAgICAgICB1cmFuZG9tX2NhY2hlLmZkID0gLTE7CisgICAgfQorfQorCisjZW5kaWYgLyogSEFWRV9HRVRFTlRST1BZICovCiAKIC8qIEZpbGwgYnVmZmVyIHdpdGggcHNldWRvLXJhbmRvbSBieXRlcyBnZW5lcmF0ZWQgYnkgYSBsaW5lYXIgY29uZ3J1ZW50CiAgICBnZW5lcmF0b3IgKExDRyk6CkBAIC0yMjUsNyArMjYyLDcgQEAKIH0KIAogLyogRmlsbCBidWZmZXIgd2l0aCBzaXplIHBzZXVkby1yYW5kb20gYnl0ZXMgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbSByYW5kb20KLSAgIG51bWJlciBnZW5lcmF0b3IgKFJORykuIEl0IGlzIHN1aXRhYmxlIGZvciBmb3IgbW9zdCBjcnlwdG9ncmFwaGljIHB1cnBvc2VzCisgICBudW1iZXIgZ2VuZXJhdG9yIChSTkcpLiBJdCBpcyBzdWl0YWJsZSBmb3IgbW9zdCBjcnlwdG9ncmFwaGljIHB1cnBvc2VzCiAgICBleGNlcHQgbG9uZyBsaXZpbmcgcHJpdmF0ZSBrZXlzIGZvciBhc3ltbWV0cmljIGVuY3J5cHRpb24uCiAKICAgIFJldHVybiAwIG9uIHN1Y2Nlc3MsIHJhaXNlIGFuIGV4Y2VwdGlvbiBhbmQgcmV0dXJuIC0xIG9uIGVycm9yLiAqLwpAQCAtMjQyLDEyICsyNzksMTAgQEAKIAogI2lmZGVmIE1TX1dJTkRPV1MKICAgICByZXR1cm4gd2luMzJfdXJhbmRvbSgodW5zaWduZWQgY2hhciAqKWJ1ZmZlciwgc2l6ZSwgMSk7CisjZWxpZiBkZWZpbmVkKFBZX0dFVEVOVFJPUFkpCisgICAgcmV0dXJuIHB5X2dldGVudHJvcHkoYnVmZmVyLCBzaXplLCAwKTsKICNlbHNlCi0jIGlmZGVmIF9fVk1TCi0gICAgcmV0dXJuIHZtc191cmFuZG9tKCh1bnNpZ25lZCBjaGFyICopYnVmZmVyLCBzaXplLCAxKTsKLSMgZWxzZQogICAgIHJldHVybiBkZXZfdXJhbmRvbV9weXRob24oKGNoYXIqKWJ1ZmZlciwgc2l6ZSk7Ci0jIGVuZGlmCiAjZW5kaWYKIH0KIApAQCAtMjU1LDggKzI5MCw5IEBACiBfUHlSYW5kb21fSW5pdCh2b2lkKQogewogICAgIGNoYXIgKmVudjsKLSAgICB2b2lkICpzZWNyZXQgPSAmX1B5X0hhc2hTZWNyZXQ7CisgICAgdW5zaWduZWQgY2hhciAqc2VjcmV0ID0gKHVuc2lnbmVkIGNoYXIgKikmX1B5X0hhc2hTZWNyZXQudWM7CiAgICAgUHlfc3NpemVfdCBzZWNyZXRfc2l6ZSA9IHNpemVvZihfUHlfSGFzaFNlY3JldF90KTsKKyAgICBhc3NlcnQoc2VjcmV0X3NpemUgPT0gc2l6ZW9mKF9QeV9IYXNoU2VjcmV0LnVjKSk7CiAKICAgICBpZiAoX1B5X0hhc2hTZWNyZXRfSW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NCwxOCArMzIwLDMxIEBACiAgICAgICAgICAgICBtZW1zZXQoc2VjcmV0LCAwLCBzZWNyZXRfc2l6ZSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBsY2dfdXJhbmRvbShzZWVkLCAodW5zaWduZWQgY2hhciopc2VjcmV0LCBzZWNyZXRfc2l6ZSk7CisgICAgICAgICAgICBsY2dfdXJhbmRvbShzZWVkLCBzZWNyZXQsIHNlY3JldF9zaXplKTsKICAgICAgICAgfQogICAgIH0KICAgICBlbHNlIHsKICNpZmRlZiBNU19XSU5ET1dTCi0gICAgICAgICh2b2lkKXdpbjMyX3VyYW5kb20oKHVuc2lnbmVkIGNoYXIgKilzZWNyZXQsIHNlY3JldF9zaXplLCAwKTsKLSNlbHNlIC8qICNpZmRlZiBNU19XSU5ET1dTICovCi0jIGlmZGVmIF9fVk1TCi0gICAgICAgIHZtc191cmFuZG9tKCh1bnNpZ25lZCBjaGFyICopc2VjcmV0LCBzZWNyZXRfc2l6ZSwgMCk7Ci0jIGVsc2UKLSAgICAgICAgZGV2X3VyYW5kb21fbm9yYWlzZSgoY2hhciopc2VjcmV0LCBzZWNyZXRfc2l6ZSk7Ci0jIGVuZGlmCisgICAgICAgICh2b2lkKXdpbjMyX3VyYW5kb20oc2VjcmV0LCBzZWNyZXRfc2l6ZSwgMCk7CisjZWxpZiBkZWZpbmVkKFBZX0dFVEVOVFJPUFkpCisgICAgICAgICh2b2lkKXB5X2dldGVudHJvcHkoc2VjcmV0LCBzZWNyZXRfc2l6ZSwgMSk7CisjZWxzZQorICAgICAgICBkZXZfdXJhbmRvbV9ub3JhaXNlKHNlY3JldCwgc2VjcmV0X3NpemUpOwogI2VuZGlmCiAgICAgfQogfQorCit2b2lkCitfUHlSYW5kb21fRmluaSh2b2lkKQoreworI2lmZGVmIE1TX1dJTkRPV1MKKyAgICBpZiAoaENyeXB0UHJvdikgeworICAgICAgICBDcnlwdFJlbGVhc2VDb250ZXh0KGhDcnlwdFByb3YsIDApOworICAgICAgICBoQ3J5cHRQcm92ID0gMDsKKyAgICB9CisjZWxpZiBkZWZpbmVkKFBZX0dFVEVOVFJPUFkpCisgICAgLyogbm90aGluZyB0byBjbGVhbiAqLworI2Vsc2UKKyAgICBkZXZfdXJhbmRvbV9jbG9zZSgpOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9QeXRob24vc3RyZHVwLmMgYi9QeXRob24vc3RyZHVwLmMKaW5kZXggMjAxODdlMC4uNzY5ZDNkYiAxMDA2NDQKLS0tIGEvUHl0aG9uL3N0cmR1cC5jCisrKyBiL1B5dGhvbi9zdHJkdXAuYwpAQCAtNiw3ICs2LDcgQEAKIHN0cmR1cChjb25zdCBjaGFyICpzdHIpCiB7CiAJaWYgKHN0ciAhPSBOVUxMKSB7Ci0JCXJlZ2lzdGVyIGNoYXIgKmNvcHkgPSBtYWxsb2Moc3RybGVuKHN0cikgKyAxKTsKKwkJY2hhciAqY29weSA9IG1hbGxvYyhzdHJsZW4oc3RyKSArIDEpOwogCQlpZiAoY29weSAhPSBOVUxMKQogCQkJcmV0dXJuIHN0cmNweShjb3B5LCBzdHIpOwogCX0KZGlmZiAtLWdpdCBhL1B5dGhvbi9zeW10YWJsZS5jIGIvUHl0aG9uL3N5bXRhYmxlLmMKaW5kZXggMWUxM2I3OTAuLjk1MTI2NzMgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zeW10YWJsZS5jCisrKyBiL1B5dGhvbi9zeW10YWJsZS5jCkBAIC0zNywyNCArMzcsMTQgQEAKICAgICBzdGUtPnN0ZV90YWJsZSA9IHN0OwogICAgIHN0ZS0+c3RlX2lkID0gazsgLyogc3RlIG93bnMgcmVmZXJlbmNlIHRvIGsgKi8KIAotICAgIHN0ZS0+c3RlX25hbWUgPSBuYW1lOwogICAgIFB5X0lOQ1JFRihuYW1lKTsKKyAgICBzdGUtPnN0ZV9uYW1lID0gbmFtZTsKIAogICAgIHN0ZS0+c3RlX3N5bWJvbHMgPSBOVUxMOwogICAgIHN0ZS0+c3RlX3Zhcm5hbWVzID0gTlVMTDsKICAgICBzdGUtPnN0ZV9jaGlsZHJlbiA9IE5VTEw7CiAKLSAgICBzdGUtPnN0ZV9zeW1ib2xzID0gUHlEaWN0X05ldygpOwotICAgIGlmIChzdGUtPnN0ZV9zeW1ib2xzID09IE5VTEwpCi0gICAgICAgIGdvdG8gZmFpbDsKLQotICAgIHN0ZS0+c3RlX3Zhcm5hbWVzID0gUHlMaXN0X05ldygwKTsKLSAgICBpZiAoc3RlLT5zdGVfdmFybmFtZXMgPT0gTlVMTCkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgc3RlLT5zdGVfY2hpbGRyZW4gPSBQeUxpc3RfTmV3KDApOwotICAgIGlmIChzdGUtPnN0ZV9jaGlsZHJlbiA9PSBOVUxMKQotICAgICAgICBnb3RvIGZhaWw7CisgICAgc3RlLT5zdGVfZGlyZWN0aXZlcyA9IE5VTEw7CiAKICAgICBzdGUtPnN0ZV90eXBlID0gYmxvY2s7CiAgICAgc3RlLT5zdGVfdW5vcHRpbWl6ZWQgPSAwOwpAQCAtNzUsNiArNjUsMTUgQEAKICAgICBzdGUtPnN0ZV9jaGlsZF9mcmVlID0gMDsKICAgICBzdGUtPnN0ZV9nZW5lcmF0b3IgPSAwOwogICAgIHN0ZS0+c3RlX3JldHVybnNfdmFsdWUgPSAwOworICAgIHN0ZS0+c3RlX25lZWRzX2NsYXNzX2Nsb3N1cmUgPSAwOworCisgICAgc3RlLT5zdGVfc3ltYm9scyA9IFB5RGljdF9OZXcoKTsKKyAgICBzdGUtPnN0ZV92YXJuYW1lcyA9IFB5TGlzdF9OZXcoMCk7CisgICAgc3RlLT5zdGVfY2hpbGRyZW4gPSBQeUxpc3RfTmV3KDApOworICAgIGlmIChzdGUtPnN0ZV9zeW1ib2xzID09IE5VTEwKKyAgICAgICAgfHwgc3RlLT5zdGVfdmFybmFtZXMgPT0gTlVMTAorICAgICAgICB8fCBzdGUtPnN0ZV9jaGlsZHJlbiA9PSBOVUxMKQorICAgICAgICBnb3RvIGZhaWw7CiAKICAgICBpZiAoUHlEaWN0X1NldEl0ZW0oc3QtPnN0X2Jsb2Nrcywgc3RlLT5zdGVfaWQsIChQeU9iamVjdCAqKXN0ZSkgPCAwKQogICAgICAgICBnb3RvIGZhaWw7CkBAIC0xMDIsNiArMTAxLDcgQEAKICAgICBQeV9YREVDUkVGKHN0ZS0+c3RlX3N5bWJvbHMpOwogICAgIFB5X1hERUNSRUYoc3RlLT5zdGVfdmFybmFtZXMpOwogICAgIFB5X1hERUNSRUYoc3RlLT5zdGVfY2hpbGRyZW4pOworICAgIFB5X1hERUNSRUYoc3RlLT5zdGVfZGlyZWN0aXZlcyk7CiAgICAgUHlPYmplY3RfRGVsKHN0ZSk7CiB9CiAKQEAgLTE4OCw3ICsxODgsNyBAQAogCiBzdGF0aWMgaWRlbnRpZmllciB0b3AgPSBOVUxMLCBsYW1iZGEgPSBOVUxMLCBnZW5leHByID0gTlVMTCwKICAgICBsaXN0Y29tcCA9IE5VTEwsIHNldGNvbXAgPSBOVUxMLCBkaWN0Y29tcCA9IE5VTEwsCi0gICAgX19jbGFzc19fID0gTlVMTCwgX19sb2NhbHNfXyA9IE5VTEw7CisgICAgX19jbGFzc19fID0gTlVMTDsKIAogI2RlZmluZSBHRVRfSURFTlRJRklFUihWQVIpIFwKICAgICAoKFZBUikgPyAoVkFSKSA6ICgoVkFSKSA9IFB5VW5pY29kZV9JbnRlcm5Gcm9tU3RyaW5nKCMgVkFSKSkpCkBAIC0yMzMsNyArMjMzLDcgQEAKICNkZWZpbmUgQ09NUElMRVJfU1RBQ0tfRlJBTUVfU0NBTEUgMwogCiBzdHJ1Y3Qgc3ltdGFibGUgKgotUHlTeW10YWJsZV9CdWlsZChtb2RfdHkgbW9kLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgUHlGdXR1cmVGZWF0dXJlcyAqZnV0dXJlKQorUHlTeW10YWJsZV9CdWlsZE9iamVjdChtb2RfdHkgbW9kLCBQeU9iamVjdCAqZmlsZW5hbWUsIFB5RnV0dXJlRmVhdHVyZXMgKmZ1dHVyZSkKIHsKICAgICBzdHJ1Y3Qgc3ltdGFibGUgKnN0ID0gc3ltdGFibGVfbmV3KCk7CiAgICAgYXNkbF9zZXEgKnNlcTsKQEAgLTI0Miw3ICsyNDIsMTIgQEAKICAgICBpbnQgcmVjdXJzaW9uX2xpbWl0ID0gUHlfR2V0UmVjdXJzaW9uTGltaXQoKTsKIAogICAgIGlmIChzdCA9PSBOVUxMKQotICAgICAgICByZXR1cm4gc3Q7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChmaWxlbmFtZSA9PSBOVUxMKSB7CisgICAgICAgIFB5U3ltdGFibGVfRnJlZShzdCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBQeV9JTkNSRUYoZmlsZW5hbWUpOwogICAgIHN0LT5zdF9maWxlbmFtZSA9IGZpbGVuYW1lOwogICAgIHN0LT5zdF9mdXR1cmUgPSBmdXR1cmU7CiAKQEAgLTMwNiw5ICszMTEsMjMgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RydWN0IHN5bXRhYmxlICoKK1B5U3ltdGFibGVfQnVpbGQobW9kX3R5IG1vZCwgY29uc3QgY2hhciAqZmlsZW5hbWVfc3RyLCBQeUZ1dHVyZUZlYXR1cmVzICpmdXR1cmUpCit7CisgICAgUHlPYmplY3QgKmZpbGVuYW1lOworICAgIHN0cnVjdCBzeW10YWJsZSAqc3Q7CisgICAgZmlsZW5hbWUgPSBQeVVuaWNvZGVfRGVjb2RlRlNEZWZhdWx0KGZpbGVuYW1lX3N0cik7CisgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIHN0ID0gUHlTeW10YWJsZV9CdWlsZE9iamVjdChtb2QsIGZpbGVuYW1lLCBmdXR1cmUpOworICAgIFB5X0RFQ1JFRihmaWxlbmFtZSk7CisgICAgcmV0dXJuIHN0OworfQorCiB2b2lkCiBQeVN5bXRhYmxlX0ZyZWUoc3RydWN0IHN5bXRhYmxlICpzdCkKIHsKKyAgICBQeV9YREVDUkVGKHN0LT5zdF9maWxlbmFtZSk7CiAgICAgUHlfWERFQ1JFRihzdC0+c3RfYmxvY2tzKTsKICAgICBQeV9YREVDUkVGKHN0LT5zdF9zdGFjayk7CiAgICAgUHlNZW1fRnJlZSgodm9pZCAqKXN0KTsKQEAgLTM0Niw2ICszNjUsMjQgQEAKICAgICByZXR1cm4gKFB5TG9uZ19BU19MT05HKHYpID4+IFNDT1BFX09GRlNFVCkgJiBTQ09QRV9NQVNLOwogfQogCitzdGF0aWMgaW50CitlcnJvcl9hdF9kaXJlY3RpdmUoUHlTVEVudHJ5T2JqZWN0ICpzdGUsIFB5T2JqZWN0ICpuYW1lKQoreworICAgIFB5X3NzaXplX3QgaTsKKyAgICBQeU9iamVjdCAqZGF0YTsKKyAgICBhc3NlcnQoc3RlLT5zdGVfZGlyZWN0aXZlcyk7CisgICAgZm9yIChpID0gMDsgOyBpKyspIHsKKyAgICAgICAgZGF0YSA9IFB5TGlzdF9HRVRfSVRFTShzdGUtPnN0ZV9kaXJlY3RpdmVzLCBpKTsKKyAgICAgICAgYXNzZXJ0KFB5VHVwbGVfQ2hlY2tFeGFjdChkYXRhKSk7CisgICAgICAgIGlmIChQeVR1cGxlX0dFVF9JVEVNKGRhdGEsIDApID09IG5hbWUpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgUHlFcnJfU3ludGF4TG9jYXRpb25PYmplY3Qoc3RlLT5zdGVfdGFibGUtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Bc0xvbmcoUHlUdXBsZV9HRVRfSVRFTShkYXRhLCAxKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0FzTG9uZyhQeVR1cGxlX0dFVF9JVEVNKGRhdGEsIDIpKSk7CisgICAgcmV0dXJuIDA7Cit9CisKIAogLyogQW5hbHl6ZSByYXcgc3ltYm9sIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSBzY29wZSBvZiBlYWNoIG5hbWUuCiAKQEAgLTQyMCwxNiArNDU3LDEzIEBACiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSAnJVUnIGlzIHBhcmFtZXRlciBhbmQgZ2xvYmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdGUtPnN0ZV90YWJsZS0+c3RfZmlsZW5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZS0+c3RlX2xpbmVubywgc3RlLT5zdGVfY29sX29mZnNldCk7Ci0KLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGlmIChmbGFncyAmIERFRl9OT05MT0NBTCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJuYW1lICclVScgaXMgbm9ubG9jYWwgYW5kIGdsb2JhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBTRVRfU0NPUEUoc2NvcGVzLCBuYW1lLCBHTE9CQUxfRVhQTElDSVQpOwogICAgICAgICBpZiAoUHlTZXRfQWRkKGdsb2JhbCwgbmFtZSkgPCAwKQpAQCAtNDQzLDE5ICs0NzcsMTkgQEAKICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSAnJVUnIGlzIHBhcmFtZXRlciBhbmQgbm9ubG9jYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gZXJyb3JfYXRfZGlyZWN0aXZlKHN0ZSwgbmFtZSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFib3VuZCkgewogICAgICAgICAgICAgUHlFcnJfRm9ybWF0KFB5RXhjX1N5bnRheEVycm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICJub25sb2NhbCBkZWNsYXJhdGlvbiBub3QgYWxsb3dlZCBhdCBtb2R1bGUgbGV2ZWwiKTsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIGVycm9yX2F0X2RpcmVjdGl2ZShzdGUsIG5hbWUpOwogICAgICAgICB9CiAgICAgICAgIGlmICghUHlTZXRfQ29udGFpbnMoYm91bmQsIG5hbWUpKSB7CiAgICAgICAgICAgICBQeUVycl9Gb3JtYXQoUHlFeGNfU3ludGF4RXJyb3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGJpbmRpbmcgZm9yIG5vbmxvY2FsICclVScgZm91bmQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUpOwogCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBlcnJvcl9hdF9kaXJlY3RpdmUoc3RlLCBuYW1lKTsKICAgICAgICAgfQogICAgICAgICBTRVRfU0NPUEUoc2NvcGVzLCBuYW1lLCBGUkVFKTsKICAgICAgICAgc3RlLT5zdGVfZnJlZSA9IDE7CkBAIC01MDAsMTMgKzUzNCwxMCBAQAogCiAgICBOb3RlIHRoYXQgdGhlIGN1cnJlbnQgYmxvY2sncyBmcmVlIHZhcmlhYmxlcyBhcmUgaW5jbHVkZWQgaW4gZnJlZS4KICAgIFRoYXQncyBzYWZlIGJlY2F1c2Ugbm8gbmFtZSBjYW4gYmUgZnJlZSBhbmQgbG9jYWwgaW4gdGhlIHNhbWUgc2NvcGUuCi0KLSAgIFRoZSAncmVzdHJpY3RlZCcgYXJndW1lbnQgbWF5IGJlIHNldCB0byBhIHN0cmluZyB0byByZXN0cmljdCB0aGUgYW5hbHlzaXMKLSAgIHRvIHRoZSBvbmUgdmFyaWFibGUgd2hvc2UgbmFtZSBlcXVhbHMgdGhhdCBzdHJpbmcgKGUuZy4gIl9fY2xhc3NfXyIpLgogKi8KIAogc3RhdGljIGludAotYW5hbHl6ZV9jZWxscyhQeU9iamVjdCAqc2NvcGVzLCBQeU9iamVjdCAqZnJlZSwgY29uc3QgY2hhciAqcmVzdHJpY3RlZCkKK2FuYWx5emVfY2VsbHMoUHlPYmplY3QgKnNjb3BlcywgUHlPYmplY3QgKmZyZWUpCiB7CiAgICAgUHlPYmplY3QgKm5hbWUsICp2LCAqdl9jZWxsOwogICAgIGludCBzdWNjZXNzID0gMDsKQEAgLTUyMyw5ICs1NTQsNiBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmICghUHlTZXRfQ29udGFpbnMoZnJlZSwgbmFtZSkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKHJlc3RyaWN0ZWQgIT0gTlVMTCAmJgotICAgICAgICAgICAgUHlVbmljb2RlX0NvbXBhcmVXaXRoQVNDSUlTdHJpbmcobmFtZSwgcmVzdHJpY3RlZCkpCi0gICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgLyogUmVwbGFjZSBMT0NBTCB3aXRoIENFTEwgZm9yIHRoaXMgbmFtZSwgYW5kIHJlbW92ZQogICAgICAgICAgICBmcm9tIGZyZWUuIEl0IGlzIHNhZmUgdG8gcmVwbGFjZSB0aGUgdmFsdWUgb2YgbmFtZQogICAgICAgICAgICBpbiB0aGUgZGljdCwgYmVjYXVzZSBpdCB3aWxsIG5vdCBjYXVzZSBhIHJlc2l6ZS4KQEAgLTU0MSwzMiArNTY5LDE4IEBACiAgICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLS8qIENoZWNrIGZvciBpbGxlZ2FsIHN0YXRlbWVudHMgaW4gdW5vcHRpbWl6ZWQgbmFtZXNwYWNlcyAqLwogc3RhdGljIGludAotY2hlY2tfdW5vcHRpbWl6ZWQoY29uc3QgUHlTVEVudHJ5T2JqZWN0KiBzdGUpIHsKLSAgICBjb25zdCBjaGFyKiB0cmFpbGVyOwotCi0gICAgaWYgKHN0ZS0+c3RlX3R5cGUgIT0gRnVuY3Rpb25CbG9jayB8fCAhc3RlLT5zdGVfdW5vcHRpbWl6ZWQKLSAgICAgICAgfHwgIShzdGUtPnN0ZV9mcmVlIHx8IHN0ZS0+c3RlX2NoaWxkX2ZyZWUpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIHRyYWlsZXIgPSAoc3RlLT5zdGVfY2hpbGRfZnJlZSA/Ci0gICAgICAgICAgICAgICAgICAgImNvbnRhaW5zIGEgbmVzdGVkIGZ1bmN0aW9uIHdpdGggZnJlZSB2YXJpYWJsZXMiIDoKLSAgICAgICAgICAgICAgICAgICAiaXMgYSBuZXN0ZWQgZnVuY3Rpb24iKTsKLQotICAgIHN3aXRjaCAoc3RlLT5zdGVfdW5vcHRpbWl6ZWQpIHsKLSAgICBjYXNlIE9QVF9UT1BMRVZFTDogLyogaW1wb3J0ICogYXQgdG9wLWxldmVsIGlzIGZpbmUgKi8KLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBPUFRfSU1QT1JUX1NUQVI6Ci0gICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwKLSAgICAgICAgICAgICAgICAgICAgICJpbXBvcnQgKiBpcyBub3QgYWxsb3dlZCBpbiBmdW5jdGlvbiAnJVUnIGJlY2F1c2UgaXQgJXMiLAotICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfbmFtZSwgdHJhaWxlcik7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3RlLT5zdGVfdGFibGUtPnN0X2ZpbGVuYW1lLCBzdGUtPnN0ZV9vcHRfbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfb3B0X2NvbF9vZmZzZXQpOwotICAgIHJldHVybiAwOworZHJvcF9jbGFzc19mcmVlKFB5U1RFbnRyeU9iamVjdCAqc3RlLCBQeU9iamVjdCAqZnJlZSkKK3sKKyAgICBpbnQgcmVzOworICAgIGlmICghR0VUX0lERU5USUZJRVIoX19jbGFzc19fKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmVzID0gUHlTZXRfRGlzY2FyZChmcmVlLCBfX2NsYXNzX18pOworICAgIGlmIChyZXMgPCAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAocmVzKQorICAgICAgICBzdGUtPnN0ZV9uZWVkc19jbGFzc19jbG9zdXJlID0gMTsKKyAgICByZXR1cm4gMTsKIH0KIAogLyogRW50ZXIgdGhlIGZpbmFsIHNjb3BlIGluZm9ybWF0aW9uIGludG8gdGhlIHN0ZV9zeW1ib2xzIGRpY3QuCkBAIC03NzEsNyArNzg1LDYgQEAKICAgICAgICAgLyogU3BlY2lhbC1jYXNlIF9fY2xhc3NfXyAqLwogICAgICAgICBpZiAoIUdFVF9JREVOVElGSUVSKF9fY2xhc3NfXykpCiAgICAgICAgICAgICBnb3RvIGVycm9yOwotICAgICAgICBhc3NlcnQoUHlTZXRfQ29udGFpbnMobG9jYWwsIF9fY2xhc3NfXykgPT0gMSk7CiAgICAgICAgIGlmIChQeVNldF9BZGQobmV3Ym91bmQsIF9fY2xhc3NfXykgPCAwKQogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICB9CkBAIC04MDQsMTggKzgxNywxNCBAQAogICAgIFB5X0RFQ1JFRih0ZW1wKTsKIAogICAgIC8qIENoZWNrIGlmIGFueSBsb2NhbCB2YXJpYWJsZXMgbXVzdCBiZSBjb252ZXJ0ZWQgdG8gY2VsbCB2YXJpYWJsZXMgKi8KLSAgICBpZiAoc3RlLT5zdGVfdHlwZSA9PSBGdW5jdGlvbkJsb2NrICYmICFhbmFseXplX2NlbGxzKHNjb3BlcywgbmV3ZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKQorICAgIGlmIChzdGUtPnN0ZV90eXBlID09IEZ1bmN0aW9uQmxvY2sgJiYgIWFuYWx5emVfY2VsbHMoc2NvcGVzLCBuZXdmcmVlKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBlbHNlIGlmIChzdGUtPnN0ZV90eXBlID09IENsYXNzQmxvY2sgJiYgIWFuYWx5emVfY2VsbHMoc2NvcGVzLCBuZXdmcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiX19jbGFzc19fIikpCisgICAgZWxzZSBpZiAoc3RlLT5zdGVfdHlwZSA9PSBDbGFzc0Jsb2NrICYmICFkcm9wX2NsYXNzX2ZyZWUoc3RlLCBuZXdmcmVlKSkKICAgICAgICAgZ290byBlcnJvcjsKICAgICAvKiBSZWNvcmRzIHRoZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcyBpbiB0aGUgc3ltYm9sIHRhYmxlIGVudHJ5ICovCiAgICAgaWYgKCF1cGRhdGVfc3ltYm9scyhzdGUtPnN0ZV9zeW1ib2xzLCBzY29wZXMsIGJvdW5kLCBuZXdmcmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RlLT5zdGVfdHlwZSA9PSBDbGFzc0Jsb2NrKSkKICAgICAgICAgZ290byBlcnJvcjsKLSAgICBpZiAoIWNoZWNrX3Vub3B0aW1pemVkKHN0ZSkpCi0gICAgICAgIGdvdG8gZXJyb3I7CiAKICAgICB0ZW1wID0gUHlOdW1iZXJfSW5QbGFjZU9yKGZyZWUsIG5ld2ZyZWUpOwogICAgIGlmICghdGVtcCkKQEAgLTg5OSwxNSArOTA4LDIwIEBACiBzdGF0aWMgaW50CiBzeW10YWJsZV93YXJuKHN0cnVjdCBzeW10YWJsZSAqc3QsIGNoYXIgKm1zZywgaW50IGxpbmVubykKIHsKLSAgICBpZiAoUHlFcnJfV2FybkV4cGxpY2l0KFB5RXhjX1N5bnRheFdhcm5pbmcsIG1zZywgc3QtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBOVUxMLCBOVUxMKSA8IDApICAgICB7CisgICAgUHlPYmplY3QgKm1lc3NhZ2UgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhtc2cpOworICAgIGlmIChtZXNzYWdlID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChQeUVycl9XYXJuRXhwbGljaXRPYmplY3QoUHlFeGNfU3ludGF4V2FybmluZywgbWVzc2FnZSwgc3QtPnN0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZW5vLCBOVUxMLCBOVUxMKSA8IDApICAgICB7CisgICAgICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKICAgICAgICAgaWYgKFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfU3ludGF4V2FybmluZykpIHsKICAgICAgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19TeW50YXhFcnJvciwgbXNnKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLCBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdC0+c3RfZmlsZW5hbWUsIHN0LT5zdF9jdXItPnN0ZV9saW5lbm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIFB5X0RFQ1JFRihtZXNzYWdlKTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtOTkwLDkgKzEwMDQsOSBAQAogICAgICAgICBpZiAoKGZsYWcgJiBERUZfUEFSQU0pICYmICh2YWwgJiBERUZfUEFSQU0pKSB7CiAgICAgICAgICAgICAvKiBJcyBpdCBiZXR0ZXIgdG8gdXNlICdtYW5nbGVkJyBvciAnbmFtZScgaGVyZT8gKi8KICAgICAgICAgICAgIFB5RXJyX0Zvcm1hdChQeUV4Y19TeW50YXhFcnJvciwgRFVQTElDQVRFX0FSR1VNRU5ULCBuYW1lKTsKLSAgICAgICAgICAgIFB5RXJyX1N5bnRheExvY2F0aW9uRXgoc3QtPnN0X2ZpbGVuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfY29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdC0+c3RfZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+c3RfY3VyLT5zdGVfbGluZW5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICB2YWwgfD0gZmxhZzsKQEAgLTExMDIsNiArMTExNiwyNSBAQAogCiAKIHN0YXRpYyBpbnQKK3N5bXRhYmxlX3JlY29yZF9kaXJlY3RpdmUoc3RydWN0IHN5bXRhYmxlICpzdCwgaWRlbnRpZmllciBuYW1lLCBzdG10X3R5IHMpCit7CisgICAgUHlPYmplY3QgKmRhdGE7CisgICAgaW50IHJlczsKKyAgICBpZiAoIXN0LT5zdF9jdXItPnN0ZV9kaXJlY3RpdmVzKSB7CisgICAgICAgIHN0LT5zdF9jdXItPnN0ZV9kaXJlY3RpdmVzID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgaWYgKCFzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBkYXRhID0gUHlfQnVpbGRWYWx1ZSgiKE9paSkiLCBuYW1lLCBzLT5saW5lbm8sIHMtPmNvbF9vZmZzZXQpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmVzID0gUHlMaXN0X0FwcGVuZChzdC0+c3RfY3VyLT5zdGVfZGlyZWN0aXZlcywgZGF0YSk7CisgICAgUHlfREVDUkVGKGRhdGEpOworICAgIHJldHVybiByZXMgPT0gMDsKK30KKworCitzdGF0aWMgaW50CiBzeW10YWJsZV92aXNpdF9zdG10KHN0cnVjdCBzeW10YWJsZSAqc3QsIHN0bXRfdHkgcykKIHsKICAgICBpZiAoKytzdC0+cmVjdXJzaW9uX2RlcHRoID4gc3QtPnJlY3Vyc2lvbl9saW1pdCkgewpAQCAtMTE0NiwxMyArMTE3OSw2IEBACiAgICAgICAgIGlmICghc3ltdGFibGVfZW50ZXJfYmxvY2soc3QsIHMtPnYuQ2xhc3NEZWYubmFtZSwgQ2xhc3NCbG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXMsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCkpCiAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKLSAgICAgICAgaWYgKCFHRVRfSURFTlRJRklFUihfX2NsYXNzX18pIHx8Ci0gICAgICAgICAgICAhc3ltdGFibGVfYWRkX2RlZihzdCwgX19jbGFzc19fLCBERUZfTE9DQUwpIHx8Ci0gICAgICAgICAgICAhR0VUX0lERU5USUZJRVIoX19sb2NhbHNfXykgfHwKLSAgICAgICAgICAgICFzeW10YWJsZV9hZGRfZGVmKHN0LCBfX2xvY2Fsc19fLCBERUZfUEFSQU0pKSB7Ci0gICAgICAgICAgICBzeW10YWJsZV9leGl0X2Jsb2NrKHN0LCBzKTsKLSAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOwotICAgICAgICB9CiAgICAgICAgIHRtcCA9IHN0LT5zdF9wcml2YXRlOwogICAgICAgICBzdC0+c3RfcHJpdmF0ZSA9IHMtPnYuQ2xhc3NEZWYubmFtZTsKICAgICAgICAgVklTSVRfU0VRKHN0LCBzdG10LCBzLT52LkNsYXNzRGVmLmJvZHkpOwpAQCAtMTI0MCwxNCArMTI2Niw3IEBACiAgICAgICAgIGFzZGxfc2VxICpzZXEgPSBzLT52Lkdsb2JhbC5uYW1lczsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFzZGxfc2VxX0xFTihzZXEpOyBpKyspIHsKICAgICAgICAgICAgIGlkZW50aWZpZXIgbmFtZSA9IChpZGVudGlmaWVyKWFzZGxfc2VxX0dFVChzZXEsIGkpOwotICAgICAgICAgICAgbG9uZyBjdXI7Ci0gICAgICAgICAgICBpZiAoc3QtPnN0X2N1ci0+c3RlX3R5cGUgPT0gQ2xhc3NCbG9jayAmJgotICAgICAgICAgICAgICAgICFQeVVuaWNvZGVfQ29tcGFyZVdpdGhBU0NJSVN0cmluZyhuYW1lLCAiX19jbGFzc19fIikpIHsKLSAgICAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsICJjYW5ub3QgbWFrZSBfX2NsYXNzX18gZ2xvYmFsIik7Ci0gICAgICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdC0+c3RfZmlsZW5hbWUsIHMtPmxpbmVubywgcy0+Y29sX29mZnNldCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXIgPSBzeW10YWJsZV9sb29rdXAoc3QsIG5hbWUpOworICAgICAgICAgICAgbG9uZyBjdXIgPSBzeW10YWJsZV9sb29rdXAoc3QsIG5hbWUpOwogICAgICAgICAgICAgaWYgKGN1ciA8IDApCiAgICAgICAgICAgICAgICAgVklTSVRfUVVJVChzdCwgMCk7CiAgICAgICAgICAgICBpZiAoY3VyICYgKERFRl9MT0NBTCB8IFVTRSkpIHsKQEAgLTEyNjgsNiArMTI4Nyw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIG5hbWUsIERFRl9HTE9CQUwpKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOworICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0LCBuYW1lLCBzKSkKKyAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjk3LDYgKzEzMTgsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9hZGRfZGVmKHN0LCBuYW1lLCBERUZfTk9OTE9DQUwpKQogICAgICAgICAgICAgICAgIFZJU0lUX1FVSVQoc3QsIDApOworICAgICAgICAgICAgaWYgKCFzeW10YWJsZV9yZWNvcmRfZGlyZWN0aXZlKHN0LCBuYW1lLCBzKSkKKyAgICAgICAgICAgICAgICBWSVNJVF9RVUlUKHN0LCAwKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNDA3LDYgKzE0MzAsNyBAQAogICAgIGNhc2UgU3RyX2tpbmQ6CiAgICAgY2FzZSBCeXRlc19raW5kOgogICAgIGNhc2UgRWxsaXBzaXNfa2luZDoKKyAgICBjYXNlIE5hbWVDb25zdGFudF9raW5kOgogICAgICAgICAvKiBOb3RoaW5nIHRvIGRvIGhlcmUuICovCiAgICAgICAgIGJyZWFrOwogICAgIC8qIFRoZSBmb2xsb3dpbmcgZXhwcnMgY2FuIGJlIGFzc2lnbm1lbnQgdGFyZ2V0cy4gKi8KQEAgLTE0OTksMTAgKzE1MjMsMTAgQEAKIAogICAgIGlmIChhLT5hcmdzICYmICFzeW10YWJsZV92aXNpdF9hcmdhbm5vdGF0aW9ucyhzdCwgYS0+YXJncykpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhLT52YXJhcmdhbm5vdGF0aW9uKQotICAgICAgICBWSVNJVChzdCwgZXhwciwgYS0+dmFyYXJnYW5ub3RhdGlvbik7Ci0gICAgaWYgKGEtPmt3YXJnYW5ub3RhdGlvbikKLSAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPmt3YXJnYW5ub3RhdGlvbik7CisgICAgaWYgKGEtPnZhcmFyZyAmJiBhLT52YXJhcmctPmFubm90YXRpb24pCisgICAgICAgIFZJU0lUKHN0LCBleHByLCBhLT52YXJhcmctPmFubm90YXRpb24pOworICAgIGlmIChhLT5rd2FyZyAmJiBhLT5rd2FyZy0+YW5ub3RhdGlvbikKKyAgICAgICAgVklTSVQoc3QsIGV4cHIsIGEtPmt3YXJnLT5hbm5vdGF0aW9uKTsKICAgICBpZiAoYS0+a3dvbmx5YXJncyAmJiAhc3ltdGFibGVfdmlzaXRfYXJnYW5ub3RhdGlvbnMoc3QsIGEtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAocy0+di5GdW5jdGlvbkRlZi5yZXR1cm5zKQpAQCAtMTUyMSwxMiArMTU0NSwxMiBAQAogICAgIGlmIChhLT5rd29ubHlhcmdzICYmICFzeW10YWJsZV92aXNpdF9wYXJhbXMoc3QsIGEtPmt3b25seWFyZ3MpKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoYS0+dmFyYXJnKSB7Ci0gICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgYS0+dmFyYXJnLCBERUZfUEFSQU0pKQorICAgICAgICBpZiAoIXN5bXRhYmxlX2FkZF9kZWYoc3QsIGEtPnZhcmFyZy0+YXJnLCBERUZfUEFSQU0pKQogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHN0LT5zdF9jdXItPnN0ZV92YXJhcmdzID0gMTsKICAgICB9CiAgICAgaWYgKGEtPmt3YXJnKSB7Ci0gICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgYS0+a3dhcmcsIERFRl9QQVJBTSkpCisgICAgICAgIGlmICghc3ltdGFibGVfYWRkX2RlZihzdCwgYS0+a3dhcmctPmFyZywgREVGX1BBUkFNKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBzdC0+c3RfY3VyLT5zdGVfdmFya2V5d29yZHMgPSAxOwogICAgIH0KQEAgLTE1ODcsNyArMTYxMSw3IEBACiAgICAgICAgICAgICBpbnQgbGluZW5vID0gc3QtPnN0X2N1ci0+c3RlX2xpbmVubzsKICAgICAgICAgICAgIGludCBjb2xfb2Zmc2V0ID0gc3QtPnN0X2N1ci0+c3RlX2NvbF9vZmZzZXQ7CiAgICAgICAgICAgICBQeUVycl9TZXRTdHJpbmcoUHlFeGNfU3ludGF4RXJyb3IsIElNUE9SVF9TVEFSX1dBUk5JTkcpOwotICAgICAgICAgICAgUHlFcnJfU3ludGF4TG9jYXRpb25FeChzdC0+c3RfZmlsZW5hbWUsIGxpbmVubywgY29sX29mZnNldCk7CisgICAgICAgICAgICBQeUVycl9TeW50YXhMb2NhdGlvbk9iamVjdChzdC0+c3RfZmlsZW5hbWUsIGxpbmVubywgY29sX29mZnNldCk7CiAgICAgICAgICAgICBQeV9ERUNSRUYoc3RvcmVfbmFtZSk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3N5c21vZHVsZS5jIGIvUHl0aG9uL3N5c21vZHVsZS5jCmluZGV4IDJmNzAwZTYuLjI5MGVlYzEgMTAwNjQ0Ci0tLSBhL1B5dGhvbi9zeXNtb2R1bGUuYworKysgYi9QeXRob24vc3lzbW9kdWxlLmMKQEAgLTMyLDE1ICszMiwzMSBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKlB5V2luX0RMTFZlcnNpb25TdHJpbmc7CiAjZW5kaWYKIAotI2lmZGVmIF9fVk1TCi0jaW5jbHVkZSA8dW5peGxpYi5oPgotI2VuZGlmCi0KICNpZmRlZiBIQVZFX0xBTkdJTkZPX0gKICNpbmNsdWRlIDxsb2NhbGUuaD4KICNpbmNsdWRlIDxsYW5naW5mby5oPgogI2VuZGlmCiAKK19QeV9JREVOVElGSUVSKF8pOworX1B5X0lERU5USUZJRVIoX19zaXplb2ZfXyk7CitfUHlfSURFTlRJRklFUihidWZmZXIpOworX1B5X0lERU5USUZJRVIoYnVpbHRpbnMpOworX1B5X0lERU5USUZJRVIoZW5jb2RpbmcpOworX1B5X0lERU5USUZJRVIocGF0aCk7CitfUHlfSURFTlRJRklFUihzdGRvdXQpOworX1B5X0lERU5USUZJRVIoc3RkZXJyKTsKK19QeV9JREVOVElGSUVSKHdyaXRlKTsKKworUHlPYmplY3QgKgorX1B5U3lzX0dldE9iamVjdElkKF9QeV9JZGVudGlmaWVyICprZXkpCit7CisgICAgUHlUaHJlYWRTdGF0ZSAqdHN0YXRlID0gUHlUaHJlYWRTdGF0ZV9HRVQoKTsKKyAgICBQeU9iamVjdCAqc2QgPSB0c3RhdGUtPmludGVycC0+c3lzZGljdDsKKyAgICBpZiAoc2QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcmV0dXJuIF9QeURpY3RfR2V0SXRlbUlkKHNkLCBrZXkpOworfQorCiBQeU9iamVjdCAqCiBQeVN5c19HZXRPYmplY3QoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTUyLDYgKzY4LDIxIEBACiB9CiAKIGludAorX1B5U3lzX1NldE9iamVjdElkKF9QeV9JZGVudGlmaWVyICprZXksIFB5T2JqZWN0ICp2KQoreworICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IFB5VGhyZWFkU3RhdGVfR0VUKCk7CisgICAgUHlPYmplY3QgKnNkID0gdHN0YXRlLT5pbnRlcnAtPnN5c2RpY3Q7CisgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICBpZiAoX1B5RGljdF9HZXRJdGVtSWQoc2QsIGtleSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gX1B5RGljdF9EZWxJdGVtSWQoc2QsIGtleSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIF9QeURpY3RfU2V0SXRlbUlkKHNkLCBrZXksIHYpOworfQorCitpbnQKIFB5U3lzX1NldE9iamVjdChjb25zdCBjaGFyICpuYW1lLCBQeU9iamVjdCAqdikKIHsKICAgICBQeVRocmVhZFN0YXRlICp0c3RhdGUgPSBQeVRocmVhZFN0YXRlX0dFVCgpOwpAQCAtNzksOCArMTEwLDYgQEAKICAgICBQeU9iamVjdCAqZW5jb2RlZCwgKmVzY2FwZWRfc3RyLCAqcmVwcl9zdHIsICpidWZmZXIsICpyZXN1bHQ7CiAgICAgY2hhciAqc3Rkb3V0X2VuY29kaW5nX3N0cjsKICAgICBpbnQgcmV0OwotICAgIF9QeV9JREVOVElGSUVSKGVuY29kaW5nKTsKLSAgICBfUHlfSURFTlRJRklFUihidWZmZXIpOwogCiAgICAgc3Rkb3V0X2VuY29kaW5nID0gX1B5T2JqZWN0X0dldEF0dHJJZChvdXRmLCAmUHlJZF9lbmNvZGluZyk7CiAgICAgaWYgKHN0ZG91dF9lbmNvZGluZyA9PSBOVUxMKQpAQCAtMTAxLDcgKzEzMCw2IEBACiAKICAgICBidWZmZXIgPSBfUHlPYmplY3RfR2V0QXR0cklkKG91dGYsICZQeUlkX2J1ZmZlcik7CiAgICAgaWYgKGJ1ZmZlcikgewotICAgICAgICBfUHlfSURFTlRJRklFUih3cml0ZSk7CiAgICAgICAgIHJlc3VsdCA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoYnVmZmVyLCAmUHlJZF93cml0ZSwgIihPKSIsIGVuY29kZWQpOwogICAgICAgICBQeV9ERUNSRUYoYnVmZmVyKTsKICAgICAgICAgUHlfREVDUkVGKGVuY29kZWQpOwpAQCAtMTM3LDEwICsxNjUsMTEgQEAKICAgICBQeU9iamVjdCAqb3V0ZjsKICAgICBQeUludGVycHJldGVyU3RhdGUgKmludGVycCA9IFB5VGhyZWFkU3RhdGVfR0VUKCktPmludGVycDsKICAgICBQeU9iamVjdCAqbW9kdWxlcyA9IGludGVycC0+bW9kdWxlczsKLSAgICBQeU9iamVjdCAqYnVpbHRpbnMgPSBQeURpY3RfR2V0SXRlbVN0cmluZyhtb2R1bGVzLCAiYnVpbHRpbnMiKTsKKyAgICBQeU9iamVjdCAqYnVpbHRpbnM7CisgICAgc3RhdGljIFB5T2JqZWN0ICpuZXdsaW5lID0gTlVMTDsKICAgICBpbnQgZXJyOwotICAgIF9QeV9JREVOVElGSUVSKF8pOwogCisgICAgYnVpbHRpbnMgPSBfUHlEaWN0X0dldEl0ZW1JZChtb2R1bGVzLCAmUHlJZF9idWlsdGlucyk7CiAgICAgaWYgKGJ1aWx0aW5zID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImxvc3QgYnVpbHRpbnMgbW9kdWxlIik7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTU1LDcgKzE4NCw3IEBACiAgICAgfQogICAgIGlmIChfUHlPYmplY3RfU2V0QXR0cklkKGJ1aWx0aW5zLCAmUHlJZF9fLCBQeV9Ob25lKSAhPSAwKQogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBvdXRmID0gUHlTeXNfR2V0T2JqZWN0KCJzdGRvdXQiKTsKKyAgICBvdXRmID0gX1B5U3lzX0dldE9iamVjdElkKCZQeUlkX3N0ZG91dCk7CiAgICAgaWYgKG91dGYgPT0gTlVMTCB8fCBvdXRmID09IFB5X05vbmUpIHsKICAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1J1bnRpbWVFcnJvciwgImxvc3Qgc3lzLnN0ZG91dCIpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE3Myw3ICsyMDIsMTIgQEAKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChQeUZpbGVfV3JpdGVTdHJpbmcoIlxuIiwgb3V0ZikgIT0gMCkKKyAgICBpZiAobmV3bGluZSA9PSBOVUxMKSB7CisgICAgICAgIG5ld2xpbmUgPSBQeVVuaWNvZGVfRnJvbVN0cmluZygiXG4iKTsKKyAgICAgICAgaWYgKG5ld2xpbmUgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBpZiAoUHlGaWxlX1dyaXRlT2JqZWN0KG5ld2xpbmUsIG91dGYsIFB5X1BSSU5UX1JBVykgIT0gMCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKF9QeU9iamVjdF9TZXRBdHRySWQoYnVpbHRpbnMsICZQeUlkX18sIG8pICE9IDApCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzI5LDE1ICszNjMsMTkgQEAKIAogCiBzdGF0aWMgUHlPYmplY3QgKgotY2FsbF90cmFtcG9saW5lKFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSwgUHlPYmplY3QqIGNhbGxiYWNrLAorY2FsbF90cmFtcG9saW5lKFB5T2JqZWN0KiBjYWxsYmFjaywKICAgICAgICAgICAgICAgICBQeUZyYW1lT2JqZWN0ICpmcmFtZSwgaW50IHdoYXQsIFB5T2JqZWN0ICphcmcpCiB7Ci0gICAgUHlPYmplY3QgKmFyZ3MgPSBQeVR1cGxlX05ldygzKTsKKyAgICBQeU9iamVjdCAqYXJnczsKICAgICBQeU9iamVjdCAqd2hhdHN0cjsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogCisgICAgYXJncyA9IFB5VHVwbGVfTmV3KDMpOwogICAgIGlmIChhcmdzID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOworICAgIGlmIChQeUZyYW1lX0Zhc3RUb0xvY2Fsc1dpdGhFcnJvcihmcmFtZSkgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKwogICAgIFB5X0lOQ1JFRihmcmFtZSk7CiAgICAgd2hhdHN0ciA9IHdoYXRzdHJpbmdzW3doYXRdOwogICAgIFB5X0lOQ1JFRih3aGF0c3RyKTsKQEAgLTM0OSw3ICszODcsNiBAQAogICAgIFB5VHVwbGVfU0VUX0lURU0oYXJncywgMiwgYXJnKTsKIAogICAgIC8qIGNhbGwgdGhlIFB5dGhvbi1sZXZlbCBmdW5jdGlvbiAqLwotICAgIFB5RnJhbWVfRmFzdFRvTG9jYWxzKGZyYW1lKTsKICAgICByZXN1bHQgPSBQeUV2YWxfQ2FsbE9iamVjdChjYWxsYmFjaywgYXJncyk7CiAgICAgUHlGcmFtZV9Mb2NhbHNUb0Zhc3QoZnJhbWUsIDEpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKQEAgLTM2NCwxMiArNDAxLDExIEBACiBwcm9maWxlX3RyYW1wb2xpbmUoUHlPYmplY3QgKnNlbGYsIFB5RnJhbWVPYmplY3QgKmZyYW1lLAogICAgICAgICAgICAgICAgICAgIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IGZyYW1lLT5mX3RzdGF0ZTsKICAgICBQeU9iamVjdCAqcmVzdWx0OwogCiAgICAgaWYgKGFyZyA9PSBOVUxMKQogICAgICAgICBhcmcgPSBQeV9Ob25lOwotICAgIHJlc3VsdCA9IGNhbGxfdHJhbXBvbGluZSh0c3RhdGUsIHNlbGYsIGZyYW1lLCB3aGF0LCBhcmcpOworICAgIHJlc3VsdCA9IGNhbGxfdHJhbXBvbGluZShzZWxmLCBmcmFtZSwgd2hhdCwgYXJnKTsKICAgICBpZiAocmVzdWx0ID09IE5VTEwpIHsKICAgICAgICAgUHlFdmFsX1NldFByb2ZpbGUoTlVMTCwgTlVMTCk7CiAgICAgICAgIHJldHVybiAtMTsKQEAgLTM4Miw3ICs0MTgsNiBAQAogdHJhY2VfdHJhbXBvbGluZShQeU9iamVjdCAqc2VsZiwgUHlGcmFtZU9iamVjdCAqZnJhbWUsCiAgICAgICAgICAgICAgICAgIGludCB3aGF0LCBQeU9iamVjdCAqYXJnKQogewotICAgIFB5VGhyZWFkU3RhdGUgKnRzdGF0ZSA9IGZyYW1lLT5mX3RzdGF0ZTsKICAgICBQeU9iamVjdCAqY2FsbGJhY2s7CiAgICAgUHlPYmplY3QgKnJlc3VsdDsKIApAQCAtMzkyLDcgKzQyNyw3IEBACiAgICAgICAgIGNhbGxiYWNrID0gZnJhbWUtPmZfdHJhY2U7CiAgICAgaWYgKGNhbGxiYWNrID09IE5VTEwpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJlc3VsdCA9IGNhbGxfdHJhbXBvbGluZSh0c3RhdGUsIGNhbGxiYWNrLCBmcmFtZSwgd2hhdCwgYXJnKTsKKyAgICByZXN1bHQgPSBjYWxsX3RyYW1wb2xpbmUoY2FsbGJhY2ssIGZyYW1lLCB3aGF0LCBhcmcpOwogICAgIGlmIChyZXN1bHQgPT0gTlVMTCkgewogICAgICAgICBQeUV2YWxfU2V0VHJhY2UoTlVMTCwgTlVMTCk7CiAgICAgICAgIFB5X0NMRUFSKGZyYW1lLT5mX3RyYWNlKTsKQEAgLTYxNiw3ICs2NTEsNyBAQAogImhhc2hfaW5mb1xuXAogXG5cCiBBIHN0cnVjdCBzZXF1ZW5jZSBwcm92aWRpbmcgcGFyYW1ldGVycyB1c2VkIGZvciBjb21wdXRpbmdcblwKLW51bWVyaWMgaGFzaGVzLiAgVGhlIGF0dHJpYnV0ZXMgYXJlIHJlYWQgb25seS4iKTsKK2hhc2hlcy4gVGhlIGF0dHJpYnV0ZXMgYXJlIHJlYWQgb25seS4iKTsKIAogc3RhdGljIFB5U3RydWN0U2VxdWVuY2VfRmllbGQgaGFzaF9pbmZvX2ZpZWxkc1tdID0gewogICAgIHsid2lkdGgiLCAid2lkdGggb2YgdGhlIHR5cGUgdXNlZCBmb3IgaGFzaGluZywgaW4gYml0cyJ9LApAQCAtNjI1LDYgKzY2MCwxMSBAQAogICAgIHsiaW5mIiwgInZhbHVlIHRvIGJlIHVzZWQgZm9yIGhhc2ggb2YgYSBwb3NpdGl2ZSBpbmZpbml0eSJ9LAogICAgIHsibmFuIiwgInZhbHVlIHRvIGJlIHVzZWQgZm9yIGhhc2ggb2YgYSBuYW4ifSwKICAgICB7ImltYWciLCAibXVsdGlwbGllciB1c2VkIGZvciB0aGUgaW1hZ2luYXJ5IHBhcnQgb2YgYSBjb21wbGV4IG51bWJlciJ9LAorICAgIHsiYWxnb3JpdGhtIiwgIm5hbWUgb2YgdGhlIGFsZ29yaXRobSBmb3IgaGFzaGluZyBvZiBzdHIsIGJ5dGVzIGFuZCAiCisgICAgICAgICAgICAgICAgICAibWVtb3J5dmlld3MifSwKKyAgICB7Imhhc2hfYml0cyIsICJpbnRlcm5hbCBvdXRwdXQgc2l6ZSBvZiBoYXNoIGFsZ29yaXRobSJ9LAorICAgIHsic2VlZF9iaXRzIiwgInNlZWQgc2l6ZSBvZiBoYXNoIGFsZ29yaXRobSJ9LAorICAgIHsiY3V0b2ZmIiwgInNtYWxsIHN0cmluZyBvcHRpbWl6YXRpb24gY3V0b2ZmIn0sCiAgICAge05VTEwsIE5VTEx9CiB9OwogCkBAIC02MzIsNyArNjcyLDcgQEAKICAgICAic3lzLmhhc2hfaW5mbyIsCiAgICAgaGFzaF9pbmZvX2RvYywKICAgICBoYXNoX2luZm9fZmllbGRzLAotICAgIDUsCisgICAgOSwKIH07CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC02NDAsOSArNjgwLDExIEBACiB7CiAgICAgUHlPYmplY3QgKmhhc2hfaW5mbzsKICAgICBpbnQgZmllbGQgPSAwOworICAgIFB5SGFzaF9GdW5jRGVmICpoYXNoZnVuYzsKICAgICBoYXNoX2luZm8gPSBQeVN0cnVjdFNlcXVlbmNlX05ldygmSGFzaF9JbmZvVHlwZSk7CiAgICAgaWYgKGhhc2hfaW5mbyA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBoYXNoZnVuYyA9IFB5SGFzaF9HZXRGdW5jRGVmKCk7CiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoOCpzaXplb2YoUHlfaGFzaF90KSkpOwogICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLApAQCAtNjUzLDYgKzY5NSwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKF9QeUhBU0hfTkFOKSk7CiAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoX1B5SEFTSF9JTUFHKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZyhoYXNoZnVuYy0+bmFtZSkpOworICAgIFB5U3RydWN0U2VxdWVuY2VfU0VUX0lURU0oaGFzaF9pbmZvLCBmaWVsZCsrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKGhhc2hmdW5jLT5oYXNoX2JpdHMpKTsKKyAgICBQeVN0cnVjdFNlcXVlbmNlX1NFVF9JVEVNKGhhc2hfaW5mbywgZmllbGQrKywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19Gcm9tTG9uZyhoYXNoZnVuYy0+c2VlZF9iaXRzKSk7CisgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9TRVRfSVRFTShoYXNoX2luZm8sIGZpZWxkKyssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQeUxvbmdfRnJvbUxvbmcoUHlfSEFTSF9DVVRPRkYpKTsKICAgICBpZiAoUHlFcnJfT2NjdXJyZWQoKSkgewogICAgICAgICBQeV9DTEVBUihoYXNoX2luZm8pOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTc3Nyw3ICs4MjcsNyBAQAogaW50ZXJwcmV0ZXIgbG9hZHMgZXh0ZW5zaW9uIG1vZHVsZXMuICBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgd2lsbCBlbmFibGVcblwKIGEgbGF6eSByZXNvbHZpbmcgb2Ygc3ltYm9scyB3aGVuIGltcG9ydGluZyBhIG1vZHVsZSwgaWYgY2FsbGVkIGFzXG5cCiBzeXMuc2V0ZGxvcGVuZmxhZ3MoMCkuICBUbyBzaGFyZSBzeW1ib2xzIGFjcm9zcyBleHRlbnNpb24gbW9kdWxlcywgY2FsbCBhc1xuXAotc3lzLnNldGRsb3BlbmZsYWdzKGN0eXBlcy5SVExEX0dMT0JBTCkuICBTeW1ib2xpYyBuYW1lcyBmb3IgdGhlIGZsYWcgbW9kdWxlc1xuXAorc3lzLnNldGRsb3BlbmZsYWdzKG9zLlJUTERfR0xPQkFMKS4gIFN5bWJvbGljIG5hbWVzIGZvciB0aGUgZmxhZyBtb2R1bGVzXG5cCiBjYW4gYmUgZm91bmQgaW4gdGhlIG9zIG1vZHVsZSAoUlRMRF94eHggY29uc3RhbnRzLCBlLmcuIG9zLlJUTERfTEFaWSkuIik7CiAKIHN0YXRpYyBQeU9iamVjdCAqCkBAIC03OTMsNyArODQzLDcgQEAKICJnZXRkbG9wZW5mbGFncygpIC0+IGludFxuXAogXG5cCiBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGZsYWdzIHRoYXQgYXJlIHVzZWQgZm9yIGRsb3BlbiBjYWxscy5cblwKLVRoZSBmbGFnIGNvbnN0YW50cyBhcmUgZGVmaW5lZCBpbiB0aGUgY3R5cGVzIGFuZCBETEZDTiBtb2R1bGVzLiIpOworVGhlIGZsYWcgY29uc3RhbnRzIGFyZSBkZWZpbmVkIGluIHRoZSBvcyBtb2R1bGUuIik7CiAKICNlbmRpZiAgLyogSEFWRV9ETE9QRU4gKi8KIApAQCAtODEzLDMwICs4NjMsMTYgQEAKIH0KICNlbmRpZiAvKiBVU0VfTUFMTE9QVCAqLwogCi1zdGF0aWMgUHlPYmplY3QgKgotc3lzX2dldHNpemVvZihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQorc2l6ZV90CitfUHlTeXNfR2V0U2l6ZU9mKFB5T2JqZWN0ICpvKQogewogICAgIFB5T2JqZWN0ICpyZXMgPSBOVUxMOwotICAgIHN0YXRpYyBQeU9iamVjdCAqZ2NfaGVhZF9zaXplID0gTlVMTDsKLSAgICBzdGF0aWMgY2hhciAqa3dsaXN0W10gPSB7Im9iamVjdCIsICJkZWZhdWx0IiwgMH07Ci0gICAgUHlPYmplY3QgKm8sICpkZmx0ID0gTlVMTDsKICAgICBQeU9iamVjdCAqbWV0aG9kOwotICAgIF9QeV9JREVOVElGSUVSKF9fc2l6ZW9mX18pOwotCi0gICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpnZXRzaXplb2YiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm8sICZkZmx0KSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKiBJbml0aWFsaXplIHN0YXRpYyB2YXJpYWJsZSBmb3IgR0MgaGVhZCBzaXplICovCi0gICAgaWYgKGdjX2hlYWRfc2l6ZSA9PSBOVUxMKSB7Ci0gICAgICAgIGdjX2hlYWRfc2l6ZSA9IFB5TG9uZ19Gcm9tU3NpemVfdChzaXplb2YoUHlHQ19IZWFkKSk7Ci0gICAgICAgIGlmIChnY19oZWFkX3NpemUgPT0gTlVMTCkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KKyAgICBQeV9zc2l6ZV90IHNpemU7CiAKICAgICAvKiBNYWtlIHN1cmUgdGhlIHR5cGUgaXMgaW5pdGlhbGl6ZWQuIGZsb2F0IGdldHMgaW5pdGlhbGl6ZWQgbGF0ZSAqLwogICAgIGlmIChQeVR5cGVfUmVhZHkoUHlfVFlQRShvKSkgPCAwKQotICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgcmV0dXJuIChzaXplX3QpLTE7CiAKICAgICBtZXRob2QgPSBfUHlPYmplY3RfTG9va3VwU3BlY2lhbChvLCAmUHlJZF9fX3NpemVvZl9fKTsKICAgICBpZiAobWV0aG9kID09IE5VTEwpIHsKQEAgLTg1MCwyNCArODg2LDUwIEBACiAgICAgICAgIFB5X0RFQ1JFRihtZXRob2QpOwogICAgIH0KIAotICAgIC8qIEhhcyBhIGRlZmF1bHQgdmFsdWUgYmVlbiBnaXZlbiAqLwotICAgIGlmICgocmVzID09IE5VTEwpICYmIChkZmx0ICE9IE5VTEwpICYmCi0gICAgICAgIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfVHlwZUVycm9yKSkKLSAgICB7Ci0gICAgICAgIFB5RXJyX0NsZWFyKCk7Ci0gICAgICAgIFB5X0lOQ1JFRihkZmx0KTsKLSAgICAgICAgcmV0dXJuIGRmbHQ7CisgICAgaWYgKHJlcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKHNpemVfdCktMTsKKworICAgIHNpemUgPSBQeUxvbmdfQXNTc2l6ZV90KHJlcyk7CisgICAgUHlfREVDUkVGKHJlcyk7CisgICAgaWYgKHNpemUgPT0gLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkKKyAgICAgICAgcmV0dXJuIChzaXplX3QpLTE7CisKKyAgICBpZiAoc2l6ZSA8IDApIHsKKyAgICAgICAgUHlFcnJfU2V0U3RyaW5nKFB5RXhjX1ZhbHVlRXJyb3IsICJfX3NpemVvZl9fKCkgc2hvdWxkIHJldHVybiA+PSAwIik7CisgICAgICAgIHJldHVybiAoc2l6ZV90KS0xOwogICAgIH0KLSAgICBlbHNlIGlmIChyZXMgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIHJlczsKIAogICAgIC8qIGFkZCBnY19oZWFkIHNpemUgKi8KLSAgICBpZiAoUHlPYmplY3RfSVNfR0MobykpIHsKLSAgICAgICAgUHlPYmplY3QgKnRtcCA9IHJlczsKLSAgICAgICAgcmVzID0gUHlOdW1iZXJfQWRkKHRtcCwgZ2NfaGVhZF9zaXplKTsKLSAgICAgICAgUHlfREVDUkVGKHRtcCk7CisgICAgaWYgKFB5T2JqZWN0X0lTX0dDKG8pKQorICAgICAgICByZXR1cm4gKChzaXplX3Qpc2l6ZSkgKyBzaXplb2YoUHlHQ19IZWFkKTsKKyAgICByZXR1cm4gKHNpemVfdClzaXplOworfQorCitzdGF0aWMgUHlPYmplY3QgKgorc3lzX2dldHNpemVvZihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2RzKQoreworICAgIHN0YXRpYyBjaGFyICprd2xpc3RbXSA9IHsib2JqZWN0IiwgImRlZmF1bHQiLCAwfTsKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICBQeU9iamVjdCAqbywgKmRmbHQgPSBOVUxMOworCisgICAgaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dkcywgIk98TzpnZXRzaXplb2YiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGt3bGlzdCwgJm8sICZkZmx0KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzaXplID0gX1B5U3lzX0dldFNpemVPZihvKTsKKworICAgIGlmIChzaXplID09IChzaXplX3QpLTEgJiYgUHlFcnJfT2NjdXJyZWQoKSkgeworICAgICAgICAvKiBIYXMgYSBkZWZhdWx0IHZhbHVlIGJlZW4gZ2l2ZW4gKi8KKyAgICAgICAgaWYgKGRmbHQgIT0gTlVMTCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX1R5cGVFcnJvcikpIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CisgICAgICAgICAgICBQeV9JTkNSRUYoZGZsdCk7CisgICAgICAgICAgICByZXR1cm4gZGZsdDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgcmV0dXJuIHJlczsKKworICAgIHJldHVybiBQeUxvbmdfRnJvbVNpemVfdChzaXplKTsKIH0KIAogUHlEb2NfU1RSVkFSKGdldHNpemVvZl9kb2MsCkBAIC04OTcsNiArOTU5LDE5IEBACiByZWZlcmVuY2UgYXMgYW4gYXJndW1lbnQgdG8gZ2V0cmVmY291bnQoKS4iCiApOwogCitzdGF0aWMgUHlPYmplY3QgKgorc3lzX2dldGFsbG9jYXRlZGJsb2NrcyhQeU9iamVjdCAqc2VsZikKK3sKKyAgICByZXR1cm4gUHlMb25nX0Zyb21Tc2l6ZV90KF9QeV9HZXRBbGxvY2F0ZWRCbG9ja3MoKSk7Cit9CisKK1B5RG9jX1NUUlZBUihnZXRhbGxvY2F0ZWRibG9ja3NfZG9jLAorImdldGFsbG9jYXRlZGJsb2NrcygpIC0+IGludGVnZXJcblwKK1xuXAorUmV0dXJuIHRoZSBudW1iZXIgb2YgbWVtb3J5IGJsb2NrcyBjdXJyZW50bHkgYWxsb2NhdGVkLCByZWdhcmRsZXNzIG9mIHRoZWlyXG5cCitzaXplLiIKKyk7CisKICNpZmRlZiBDT1VOVF9BTExPQ1MKIHN0YXRpYyBQeU9iamVjdCAqCiBzeXNfZ2V0Y291bnRzKFB5T2JqZWN0ICpzZWxmKQpAQCAtMTA2NSw2ICsxMTQwLDggQEAKICAgICB7ImdldGRsb3BlbmZsYWdzIiwgKFB5Q0Z1bmN0aW9uKXN5c19nZXRkbG9wZW5mbGFncywgTUVUSF9OT0FSR1MsCiAgICAgIGdldGRsb3BlbmZsYWdzX2RvY30sCiAjZW5kaWYKKyAgICB7ImdldGFsbG9jYXRlZGJsb2NrcyIsIChQeUNGdW5jdGlvbilzeXNfZ2V0YWxsb2NhdGVkYmxvY2tzLCBNRVRIX05PQVJHUywKKyAgICAgIGdldGFsbG9jYXRlZGJsb2Nrc19kb2N9LAogI2lmZGVmIENPVU5UX0FMTE9DUwogICAgIHsiZ2V0Y291bnRzIiwgICAgICAgKFB5Q0Z1bmN0aW9uKXN5c19nZXRjb3VudHMsIE1FVEhfTk9BUkdTfSwKICNlbmRpZgpAQCAtMTExNyw3ICsxMTk0LDcgQEAKICAgICB7InNldHRyYWNlIiwgICAgICAgIHN5c19zZXR0cmFjZSwgTUVUSF9PLCBzZXR0cmFjZV9kb2N9LAogICAgIHsiZ2V0dHJhY2UiLCAgICAgICAgc3lzX2dldHRyYWNlLCBNRVRIX05PQVJHUywgZ2V0dHJhY2VfZG9jfSwKICAgICB7ImNhbGxfdHJhY2luZyIsIHN5c19jYWxsX3RyYWNpbmcsIE1FVEhfVkFSQVJHUywgY2FsbF90cmFjaW5nX2RvY30sCi0gICAgeyJfZGVidWdtYWxsb2NzdGF0cyIsIHN5c19kZWJ1Z21hbGxvY3N0YXRzLCBNRVRIX1ZBUkFSR1MsCisgICAgeyJfZGVidWdtYWxsb2NzdGF0cyIsIHN5c19kZWJ1Z21hbGxvY3N0YXRzLCBNRVRIX05PQVJHUywKICAgICAgZGVidWdtYWxsb2NzdGF0c19kb2N9LAogICAgIHtOVUxMLCAgICAgICAgICAgICAgTlVMTH0gICAgICAgICAgIC8qIHNlbnRpbmVsICovCiB9OwpAQCAtMTI4NiwxMSArMTM2MywxMiBAQAogZXhlY3V0YWJsZSAtLSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlIGJpbmFyeSBvZiB0aGUgUHl0aG9uIGludGVycHJldGVyXG5cCiBmbG9hdF9pbmZvIC0tIGEgc3RydWN0IHNlcXVlbmNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZsb2F0IGltcGxlbWVudGF0aW9uLlxuXAogZmxvYXRfcmVwcl9zdHlsZSAtLSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgc3R5bGUgb2YgcmVwcigpIG91dHB1dCBmb3IgZmxvYXRzXG5cCitoYXNoX2luZm8gLS0gYSBzdHJ1Y3Qgc2VxdWVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFzaCBhbGdvcml0aG0uXG5cCiBoZXh2ZXJzaW9uIC0tIHZlcnNpb24gaW5mb3JtYXRpb24gZW5jb2RlZCBhcyBhIHNpbmdsZSBpbnRlZ2VyXG5cCiBpbXBsZW1lbnRhdGlvbiAtLSBQeXRob24gaW1wbGVtZW50YXRpb24gaW5mb3JtYXRpb24uXG5cCiBpbnRfaW5mbyAtLSBhIHN0cnVjdCBzZXF1ZW5jZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpbnQgaW1wbGVtZW50YXRpb24uXG5cCiBtYXhzaXplIC0tIHRoZSBsYXJnZXN0IHN1cHBvcnRlZCBsZW5ndGggb2YgY29udGFpbmVycy5cblwKLW1heHVuaWNvZGUgLS0gdGhlIHZhbHVlIG9mIHRoZSBsYXJnZXN0IFVuaWNvZGUgY29kZXBvaW50XG5cCittYXh1bmljb2RlIC0tIHRoZSB2YWx1ZSBvZiB0aGUgbGFyZ2VzdCBVbmljb2RlIGNvZGUgcG9pbnRcblwKIHBsYXRmb3JtIC0tIHBsYXRmb3JtIGlkZW50aWZpZXJcblwKIHByZWZpeCAtLSBwcmVmaXggdXNlZCB0byBmaW5kIHRoZSBQeXRob24gbGlicmFyeVxuXAogdGhyZWFkX2luZm8gLS0gYSBzdHJ1Y3Qgc2VxdWVuY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdGhyZWFkIGltcGxlbWVudGF0aW9uLlxuXApAQCAtMTM1MiwxNCArMTQzMCwxMiBAQAogICAgIHsibm9fc2l0ZSIsICAgICAgICAgICAgICAgICAiLVMifSwKICAgICB7Imlnbm9yZV9lbnZpcm9ubWVudCIsICAgICAgIi1FIn0sCiAgICAgeyJ2ZXJib3NlIiwgICAgICAgICAgICAgICAgICItdiJ9LAotI2lmZGVmIFJJU0NPUwotICAgIHsicmlzY29zX3dpbXAiLCAgICAgICAgICAgICAiPz8/In0sCi0jZW5kaWYKICAgICAvKiB7InVuYnVmZmVyZWQiLCAgICAgICAgICAgICAgICAgICAiLXUifSwgKi8KICAgICAvKiB7InNraXBfZmlyc3QiLCAgICAgICAgICAgICAgICAgICAiLXgifSwgKi8KICAgICB7ImJ5dGVzX3dhcm5pbmciLCAgICAgICAgICAgIi1iIn0sCiAgICAgeyJxdWlldCIsICAgICAgICAgICAgICAgICAgICItcSJ9LAogICAgIHsiaGFzaF9yYW5kb21pemF0aW9uIiwgICAgICAiLVIifSwKKyAgICB7Imlzb2xhdGVkIiwgICAgICAgICAgICAgICAgIi1JIn0sCiAgICAgezB9CiB9OwogCkBAIC0xMzY3LDExICsxNDQzLDcgQEAKICAgICAic3lzLmZsYWdzIiwgICAgICAgIC8qIG5hbWUgKi8KICAgICBmbGFnc19fZG9jX18sICAgICAgIC8qIGRvYyAqLwogICAgIGZsYWdzX2ZpZWxkcywgICAgICAgLyogZmllbGRzICovCi0jaWZkZWYgUklTQ09TCiAgICAgMTMKLSNlbHNlCi0gICAgMTIKLSNlbmRpZgogfTsKIAogc3RhdGljIFB5T2JqZWN0KgpAQCAtMTM5NiwxNCArMTQ2OCwxMiBAQAogICAgIFNldEZsYWcoUHlfTm9TaXRlRmxhZyk7CiAgICAgU2V0RmxhZyhQeV9JZ25vcmVFbnZpcm9ubWVudEZsYWcpOwogICAgIFNldEZsYWcoUHlfVmVyYm9zZUZsYWcpOwotI2lmZGVmIFJJU0NPUwotICAgIFNldEZsYWcoUHlfUklTQ09TV2ltcEZsYWcpOwotI2VuZGlmCiAgICAgLyogU2V0RmxhZyhzYXdfdW5idWZmZXJlZF9mbGFnKTsgKi8KICAgICAvKiBTZXRGbGFnKHNraXBmaXJzdGxpbmUpOyAqLwogICAgIFNldEZsYWcoUHlfQnl0ZXNXYXJuaW5nRmxhZyk7CiAgICAgU2V0RmxhZyhQeV9RdWlldEZsYWcpOwogICAgIFNldEZsYWcoUHlfSGFzaFJhbmRvbWl6YXRpb25GbGFnKTsKKyAgICBTZXRGbGFnKFB5X0lzb2xhdGVkRmxhZyk7CiAjdW5kZWYgU2V0RmxhZwogCiAgICAgaWYgKFB5RXJyX09jY3VycmVkKCkpIHsKQEAgLTE0ODksNyArMTU1OSw3IEBACiAjZGVmaW5lIFNUUklGWShuYW1lKSBRVU9URShuYW1lKQogI2RlZmluZSBNQUpPUiBTVFJJRlkoUFlfTUFKT1JfVkVSU0lPTikKICNkZWZpbmUgTUlOT1IgU1RSSUZZKFBZX01JTk9SX1ZFUlNJT04pCi0jZGVmaW5lIFRBRyBOQU1FICItIiBNQUpPUiBNSU5PUjsKKyNkZWZpbmUgVEFHIE5BTUUgIi0iIE1BSk9SIE1JTk9SCiBjb25zdCBjaGFyICpfUHlTeXNfSW1wbENhY2hlVGFnID0gVEFHOwogI3VuZGVmIE5BTUUKICN1bmRlZiBRVU9URQpAQCAtMTU2NCwxOCArMTYzNCwzNCBAQAogUHlPYmplY3QgKgogX1B5U3lzX0luaXQodm9pZCkKIHsKLSAgICBQeU9iamVjdCAqbSwgKnYsICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOwotICAgIGNoYXIgKnM7CisgICAgUHlPYmplY3QgKm0sICpzeXNkaWN0LCAqdmVyc2lvbl9pbmZvOworICAgIGludCByZXM7CiAKICAgICBtID0gUHlNb2R1bGVfQ3JlYXRlKCZzeXNtb2R1bGUpOwogICAgIGlmIChtID09IE5VTEwpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN5c2RpY3QgPSBQeU1vZHVsZV9HZXREaWN0KG0pOwotI2RlZmluZSBTRVRfU1lTX0ZST01fU1RSSU5HKGtleSwgdmFsdWUpICAgICAgICAgICAgICAgICBcCi0gICAgdiA9IHZhbHVlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAodiAhPSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCBrZXksIHYpOyAgICAgICAgICBcCi0gICAgUHlfWERFQ1JFRih2KQorI2RlZmluZSBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVyhrZXksIHZhbHVlKSAgICAgICAgICAgICBcCisgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUHlPYmplY3QgKnYgPSAodmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAodiA9PSBOVUxMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmVzID0gUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwga2V5LCB2KTsgICAgICAgXAorICAgICAgICBpZiAocmVzIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFNFVF9TWVNfRlJPTV9TVFJJTkcoa2V5LCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBQeU9iamVjdCAqdiA9ICh2YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICh2ID09IE5VTEwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByZXMgPSBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCBrZXksIHYpOyAgICAgICBcCisgICAgICAgIFB5X0RFQ1JFRih2KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHJlcyA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQogCiAgICAgLyogQ2hlY2sgdGhhdCBzdGRpbiBpcyBub3QgYSBkaXJlY3RvcnkKICAgICBVc2luZyBzaGVsbCByZWRpcmVjdGlvbiwgeW91IGNhbiByZWRpcmVjdCBzdGRpbiB0byBhIGRpcmVjdG9yeSwKQEAgLTE1OTcsMTAgKzE2ODMsMTAgQEAKIAogICAgIC8qIHN0ZGluL3N0ZG91dC9zdGRlcnIgYXJlIG5vdyBzZXQgYnkgcHl0aG9ucnVuLmMgKi8KIAotICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJfX2Rpc3BsYXlob29rX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJkaXNwbGF5aG9vayIpKTsKLSAgICBQeURpY3RfU2V0SXRlbVN0cmluZyhzeXNkaWN0LCAiX19leGNlcHRob29rX18iLAotICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJleGNlcHRob29rIikpOworICAgIFNFVF9TWVNfRlJPTV9TVFJJTkdfQk9SUk9XKCJfX2Rpc3BsYXlob29rX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJkaXNwbGF5aG9vayIpKTsKKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygiX19leGNlcHRob29rX18iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5RGljdF9HZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJleGNlcHRob29rIikpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoInZlcnNpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKFB5X0dldFZlcnNpb24oKSkpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImhleHZlcnNpb24iLApAQCAtMTYzNCwyOCArMTcyMCwyNCBAQAogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImludF9pbmZvIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFB5TG9uZ19HZXRJbmZvKCkpOwogICAgIC8qIGluaXRpYWxpemUgaGFzaF9pbmZvICovCi0gICAgaWYgKEhhc2hfSW5mb1R5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZIYXNoX0luZm9UeXBlLCAmaGFzaF9pbmZvX2Rlc2MpOworICAgIGlmIChIYXNoX0luZm9UeXBlLnRwX25hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJkhhc2hfSW5mb1R5cGUsICZoYXNoX2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImhhc2hfaW5mbyIsCiAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfaGFzaF9pbmZvKCkpOwogICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoIm1heHVuaWNvZGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Mb25nKDB4MTBGRkZGKSk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnVpbHRpbl9tb2R1bGVfbmFtZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9idWlsdGluX21vZHVsZV9uYW1lcygpKTsKLSAgICB7Ci0gICAgICAgIC8qIEFzc3VtZXMgdGhhdCBsb25ncyBhcmUgYXQgbGVhc3QgMiBieXRlcyBsb25nLgotICAgICAgICAgICBTaG91bGQgYmUgc2FmZSEgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyBudW1iZXIgPSAxOwotICAgICAgICBjaGFyICp2YWx1ZTsKKyNpZiBQWV9CSUdfRU5ESUFOCisgICAgU0VUX1NZU19GUk9NX1NUUklORygiYnl0ZW9yZGVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKCJiaWciKSk7CisjZWxzZQorICAgIFNFVF9TWVNfRlJPTV9TVFJJTkcoImJ5dGVvcmRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICBQeVVuaWNvZGVfRnJvbVN0cmluZygibGl0dGxlIikpOworI2VuZGlmCiAKLSAgICAgICAgcyA9IChjaGFyICopICZudW1iZXI7Ci0gICAgICAgIGlmIChzWzBdID09IDApCi0gICAgICAgICAgICB2YWx1ZSA9ICJiaWciOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB2YWx1ZSA9ICJsaXR0bGUiOwotICAgICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJieXRlb3JkZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB5VW5pY29kZV9Gcm9tU3RyaW5nKHZhbHVlKSk7Ci0gICAgfQogI2lmZGVmIE1TX0NPUkVETEwKICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJkbGxoYW5kbGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgUHlMb25nX0Zyb21Wb2lkUHRyKFB5V2luX0RMTGhNb2R1bGUpKTsKQEAgLTE2NjgsNDcgKzE3NTAsNTkgQEAKICNlbmRpZgogICAgIGlmICh3YXJub3B0aW9ucyA9PSBOVUxMKSB7CiAgICAgICAgIHdhcm5vcHRpb25zID0gUHlMaXN0X05ldygwKTsKKyAgICAgICAgaWYgKHdhcm5vcHRpb25zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIFB5X0lOQ1JFRih3YXJub3B0aW9ucyk7CiAgICAgfQotICAgIGlmICh3YXJub3B0aW9ucyAhPSBOVUxMKSB7Ci0gICAgICAgIFB5RGljdF9TZXRJdGVtU3RyaW5nKHN5c2RpY3QsICJ3YXJub3B0aW9ucyIsIHdhcm5vcHRpb25zKTsKLSAgICB9CisgICAgU0VUX1NZU19GUk9NX1NUUklOR19CT1JST1coIndhcm5vcHRpb25zIiwgd2Fybm9wdGlvbnMpOwogCi0gICAgdiA9IGdldF94b3B0aW9ucygpOwotICAgIGlmICh2ICE9IE5VTEwpIHsKLSAgICAgICAgUHlEaWN0X1NldEl0ZW1TdHJpbmcoc3lzZGljdCwgIl94b3B0aW9ucyIsIHYpOwotICAgIH0KKyAgICBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVygiX3hvcHRpb25zIiwgZ2V0X3hvcHRpb25zKCkpOwogCiAgICAgLyogdmVyc2lvbl9pbmZvICovCi0gICAgaWYgKFZlcnNpb25JbmZvVHlwZS50cF9uYW1lID09IDApCi0gICAgICAgIFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUoJlZlcnNpb25JbmZvVHlwZSwgJnZlcnNpb25faW5mb19kZXNjKTsKKyAgICBpZiAoVmVyc2lvbkluZm9UeXBlLnRwX25hbWUgPT0gTlVMTCkgeworICAgICAgICBpZiAoUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZTIoJlZlcnNpb25JbmZvVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJzaW9uX2luZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIHZlcnNpb25faW5mbyA9IG1ha2VfdmVyc2lvbl9pbmZvKCk7CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygidmVyc2lvbl9pbmZvIiwgdmVyc2lvbl9pbmZvKTsKICAgICAvKiBwcmV2ZW50IHVzZXIgZnJvbSBjcmVhdGluZyBuZXcgaW5zdGFuY2VzICovCiAgICAgVmVyc2lvbkluZm9UeXBlLnRwX2luaXQgPSBOVUxMOwogICAgIFZlcnNpb25JbmZvVHlwZS50cF9uZXcgPSBOVUxMOworICAgIHJlcyA9IFB5RGljdF9EZWxJdGVtU3RyaW5nKFZlcnNpb25JbmZvVHlwZS50cF9kaWN0LCAiX19uZXdfXyIpOworICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICBQeUVycl9DbGVhcigpOwogCiAgICAgLyogaW1wbGVtZW50YXRpb24gKi8KICAgICBTRVRfU1lTX0ZST01fU1RSSU5HKCJpbXBsZW1lbnRhdGlvbiIsIG1ha2VfaW1wbF9pbmZvKHZlcnNpb25faW5mbykpOwogCiAgICAgLyogZmxhZ3MgKi8KLSAgICBpZiAoRmxhZ3NUeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmRmxhZ3NUeXBlLCAmZmxhZ3NfZGVzYyk7CisgICAgaWYgKEZsYWdzVHlwZS50cF9uYW1lID09IDApIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZGbGFnc1R5cGUsICZmbGFnc19kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgU0VUX1NZU19GUk9NX1NUUklORygiZmxhZ3MiLCBtYWtlX2ZsYWdzKCkpOwogICAgIC8qIHByZXZlbnQgdXNlciBmcm9tIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXMgKi8KICAgICBGbGFnc1R5cGUudHBfaW5pdCA9IE5VTEw7CiAgICAgRmxhZ3NUeXBlLnRwX25ldyA9IE5VTEw7Ci0KKyAgICByZXMgPSBQeURpY3RfRGVsSXRlbVN0cmluZyhGbGFnc1R5cGUudHBfZGljdCwgIl9fbmV3X18iKTsKKyAgICBpZiAocmVzIDwgMCAmJiBQeUVycl9FeGNlcHRpb25NYXRjaGVzKFB5RXhjX0tleUVycm9yKSkKKyAgICAgICAgUHlFcnJfQ2xlYXIoKTsKIAogI2lmIGRlZmluZWQoTVNfV0lORE9XUykKICAgICAvKiBnZXR3aW5kb3dzdmVyc2lvbiAqLwogICAgIGlmIChXaW5kb3dzVmVyc2lvblR5cGUudHBfbmFtZSA9PSAwKQotICAgICAgICBQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlKCZXaW5kb3dzVmVyc2lvblR5cGUsICZ3aW5kb3dzX3ZlcnNpb25fZGVzYyk7CisgICAgICAgIGlmIChQeVN0cnVjdFNlcXVlbmNlX0luaXRUeXBlMigmV2luZG93c1ZlcnNpb25UeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJndpbmRvd3NfdmVyc2lvbl9kZXNjKSA8IDApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAvKiBwcmV2ZW50IHVzZXIgZnJvbSBjcmVhdGluZyBuZXcgaW5zdGFuY2VzICovCiAgICAgV2luZG93c1ZlcnNpb25UeXBlLnRwX2luaXQgPSBOVUxMOwogICAgIFdpbmRvd3NWZXJzaW9uVHlwZS50cF9uZXcgPSBOVUxMOworICAgIHJlcyA9IFB5RGljdF9EZWxJdGVtU3RyaW5nKFdpbmRvd3NWZXJzaW9uVHlwZS50cF9kaWN0LCAiX19uZXdfXyIpOworICAgIGlmIChyZXMgPCAwICYmIFB5RXJyX0V4Y2VwdGlvbk1hdGNoZXMoUHlFeGNfS2V5RXJyb3IpKQorICAgICAgICBQeUVycl9DbGVhcigpOwogI2VuZGlmCiAKICAgICAvKiBmbG9hdCByZXByIHN0eWxlOiAwLjAzIChzaG9ydCkgdnMgMC4wMjk5OTk5OTk5OTk5OTk5OTkgKGxlZ2FjeSkgKi8KQEAgLTE3MjUsNiArMTgxOSw3IEBACiAjZW5kaWYKIAogI3VuZGVmIFNFVF9TWVNfRlJPTV9TVFJJTkcKKyN1bmRlZiBTRVRfU1lTX0ZST01fU1RSSU5HX0JPUlJPVwogICAgIGlmIChQeUVycl9PY2N1cnJlZCgpKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICByZXR1cm4gbTsKQEAgLTE3NjksNyArMTg2NCw3IEBACiAgICAgUHlPYmplY3QgKnY7CiAgICAgaWYgKCh2ID0gbWFrZXBhdGhvYmplY3QocGF0aCwgREVMSU0pKSA9PSBOVUxMKQogICAgICAgICBQeV9GYXRhbEVycm9yKCJjYW4ndCBjcmVhdGUgc3lzLnBhdGgiKTsKLSAgICBpZiAoUHlTeXNfU2V0T2JqZWN0KCJwYXRoIiwgdikgIT0gMCkKKyAgICBpZiAoX1B5U3lzX1NldE9iamVjdElkKCZQeUlkX3BhdGgsIHYpICE9IDApCiAgICAgICAgIFB5X0ZhdGFsRXJyb3IoImNhbid0IGFzc2lnbiBzeXMucGF0aCIpOwogICAgIFB5X0RFQ1JFRih2KTsKIH0KQEAgLTE3ODgsMjIgKzE4ODMsNyBAQAogICAgIGlmIChhdiAhPSBOVUxMKSB7CiAgICAgICAgIGludCBpOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0jaWZkZWYgX19WTVMKLSAgICAgICAgICAgIFB5T2JqZWN0ICp2OwotCi0gICAgICAgICAgICAvKiBhcmd2WzBdIGlzIHRoZSBzY3JpcHQgcGF0aG5hbWUgaWYga25vd24gKi8KLSAgICAgICAgICAgIGlmIChpID09IDApIHsKLSAgICAgICAgICAgICAgICBjaGFyKiBmbiA9IGRlY2MkdHJhbnNsYXRlX3Ztcyhhcmd2WzBdKTsKLSAgICAgICAgICAgICAgICBpZiAoKGZuID09IChjaGFyICopMCkgfHwgZm4gPT0gKGNoYXIgKiktMSkKLSAgICAgICAgICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKGFyZ3ZbMF0pOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdiA9IFB5VW5pY29kZV9Gcm9tU3RyaW5nKAotICAgICAgICAgICAgICAgICAgICAgICAgZGVjYyR0cmFuc2xhdGVfdm1zKGFyZ3ZbMF0pKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIHYgPSBQeVVuaWNvZGVfRnJvbVN0cmluZyhhcmd2W2ldKTsKLSNlbHNlCiAgICAgICAgICAgICBQeU9iamVjdCAqdiA9IFB5VW5pY29kZV9Gcm9tV2lkZUNoYXIoYXJndltpXSwgLTEpOwotI2VuZGlmCiAgICAgICAgICAgICBpZiAodiA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgUHlfREVDUkVGKGF2KTsKICAgICAgICAgICAgICAgICBhdiA9IE5VTEw7CkBAIC0xODM4LDcgKzE5MTgsNyBAQAogICAgIHdjaGFyX3QgZnVsbHBhdGhbTUFYX1BBVEhdOwogI2VuZGlmCiAKLSAgICBwYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7CisgICAgcGF0aCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wYXRoKTsKICAgICBpZiAocGF0aCA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAKQEAgLTE5MzcsNyArMjAxNyw3IEBACiB2b2lkCiBQeVN5c19TZXRBcmd2KGludCBhcmdjLCB3Y2hhcl90ICoqYXJndikKIHsKLSAgICBQeVN5c19TZXRBcmd2RXgoYXJnYywgYXJndiwgMSk7CisgICAgUHlTeXNfU2V0QXJndkV4KGFyZ2MsIGFyZ3YsIFB5X0lzb2xhdGVkRmxhZyA9PSAwKTsKIH0KIAogLyogUmVpbXBsZW1lbnRhdGlvbiBvZiBQeUZpbGVfV3JpdGVTdHJpbmcoKSBubyBjYWxsaW5nIGluZGlyZWN0bHkKQEAgLTE5NDgsNyArMjAyOCw2IEBACiB7CiAgICAgUHlPYmplY3QgKndyaXRlciA9IE5VTEwsICphcmdzID0gTlVMTCwgKnJlc3VsdCA9IE5VTEw7CiAgICAgaW50IGVycjsKLSAgICBfUHlfSURFTlRJRklFUih3cml0ZSk7CiAKICAgICBpZiAoZmlsZSA9PSBOVUxMKQogICAgICAgICByZXR1cm4gLTE7CkBAIC0yMDI1LDcgKzIxMDQsNyBAQAogICovCiAKIHN0YXRpYyB2b2lkCi1zeXNfd3JpdGUoY2hhciAqbmFtZSwgRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZvcm1hdCwgdmFfbGlzdCB2YSkKK3N5c193cml0ZShfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlOwogICAgIFB5T2JqZWN0ICplcnJvcl90eXBlLCAqZXJyb3JfdmFsdWUsICplcnJvcl90cmFjZWJhY2s7CkBAIC0yMDMzLDcgKzIxMTIsNyBAQAogICAgIGludCB3cml0dGVuOwogCiAgICAgUHlFcnJfRmV0Y2goJmVycm9yX3R5cGUsICZlcnJvcl92YWx1ZSwgJmVycm9yX3RyYWNlYmFjayk7Ci0gICAgZmlsZSA9IFB5U3lzX0dldE9iamVjdChuYW1lKTsKKyAgICBmaWxlID0gX1B5U3lzX0dldE9iamVjdElkKGtleSk7CiAgICAgd3JpdHRlbiA9IFB5T1NfdnNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIGZvcm1hdCwgdmEpOwogICAgIGlmIChzeXNfcHlmaWxlX3dyaXRlKGJ1ZmZlciwgZmlsZSkgIT0gMCkgewogICAgICAgICBQeUVycl9DbGVhcigpOwpAQCAtMjA1Myw3ICsyMTMyLDcgQEAKICAgICB2YV9saXN0IHZhOwogCiAgICAgdmFfc3RhcnQodmEsIGZvcm1hdCk7Ci0gICAgc3lzX3dyaXRlKCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c193cml0ZSgmUHlJZF9zdGRvdXQsIHN0ZG91dCwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KIApAQCAtMjA2MywxOSArMjE0MiwxOSBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfd3JpdGUoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX3dyaXRlKCZQeUlkX3N0ZGVyciwgc3RkZXJyLCBmb3JtYXQsIHZhKTsKICAgICB2YV9lbmQodmEpOwogfQogCiBzdGF0aWMgdm9pZAotc3lzX2Zvcm1hdChjaGFyICpuYW1lLCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQorc3lzX2Zvcm1hdChfUHlfSWRlbnRpZmllciAqa2V5LCBGSUxFICpmcCwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IHZhKQogewogICAgIFB5T2JqZWN0ICpmaWxlLCAqbWVzc2FnZTsKICAgICBQeU9iamVjdCAqZXJyb3JfdHlwZSwgKmVycm9yX3ZhbHVlLCAqZXJyb3JfdHJhY2ViYWNrOwogICAgIGNoYXIgKnV0Zjg7CiAKICAgICBQeUVycl9GZXRjaCgmZXJyb3JfdHlwZSwgJmVycm9yX3ZhbHVlLCAmZXJyb3JfdHJhY2ViYWNrKTsKLSAgICBmaWxlID0gUHlTeXNfR2V0T2JqZWN0KG5hbWUpOworICAgIGZpbGUgPSBfUHlTeXNfR2V0T2JqZWN0SWQoa2V5KTsKICAgICBtZXNzYWdlID0gUHlVbmljb2RlX0Zyb21Gb3JtYXRWKGZvcm1hdCwgdmEpOwogICAgIGlmIChtZXNzYWdlICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHN5c19weWZpbGVfd3JpdGVfdW5pY29kZShtZXNzYWdlLCBmaWxlKSAhPSAwKSB7CkBAIC0yMDk1LDcgKzIxNzQsNyBAQAogICAgIHZhX2xpc3QgdmE7CiAKICAgICB2YV9zdGFydCh2YSwgZm9ybWF0KTsKLSAgICBzeXNfZm9ybWF0KCJzdGRvdXQiLCBzdGRvdXQsIGZvcm1hdCwgdmEpOworICAgIHN5c19mb3JtYXQoJlB5SWRfc3Rkb3V0LCBzdGRvdXQsIGZvcm1hdCwgdmEpOwogICAgIHZhX2VuZCh2YSk7CiB9CiAKQEAgLTIxMDUsNiArMjE4NCw2IEBACiAgICAgdmFfbGlzdCB2YTsKIAogICAgIHZhX3N0YXJ0KHZhLCBmb3JtYXQpOwotICAgIHN5c19mb3JtYXQoInN0ZGVyciIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CisgICAgc3lzX2Zvcm1hdCgmUHlJZF9zdGRlcnIsIHN0ZGVyciwgZm9ybWF0LCB2YSk7CiAgICAgdmFfZW5kKHZhKTsKIH0KZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWQuYyBiL1B5dGhvbi90aHJlYWQuYwppbmRleCBlNTVkMzQyLi44MTA2OTFmIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkLmMKKysrIGIvUHl0aG9uL3RocmVhZC5jCkBAIC0zMSw3ICszMSw3IEBACiAgICB0aHJlYWRzLgogCiAgICBUaGlzIGlzIHZhbGlkIGZvciBIUC1VWCAxMS4yMyBydW5uaW5nIG9uIGFuIGlhNjQgc3lzdGVtLiBJZiBuZWVkZWQsIGFkZAotICAgYSBjaGVjayBvZiBfX2lhNjQgdG8gdmVyaWZ5IHRoYXQgd2UncmUgcnVubmluZyBvbiBhIGlhNjQgc3lzdGVtIGluc3RlYWQKKyAgIGEgY2hlY2sgb2YgX19pYTY0IHRvIHZlcmlmeSB0aGF0IHdlJ3JlIHJ1bm5pbmcgb24gYW4gaWE2NCBzeXN0ZW0gaW5zdGVhZAogICAgb2YgYSBwYS1yaXNjIHN5c3RlbS4KICovCiAjaWZkZWYgX19ocHV4CkBAIC05MSwxMCArOTEsNiBAQAogI2luY2x1ZGUgInRocmVhZF9udC5oIgogI2VuZGlmCiAKLSNpZmRlZiBPUzJfVEhSRUFEUwotI2RlZmluZSBQWVRIUkVBRF9OQU1FICJvczIiCi0jaW5jbHVkZSAidGhyZWFkX29zMi5oIgotI2VuZGlmCiAKIC8qCiAjaWZkZWYgRk9PQkFSX1RIUkVBRFMKQEAgLTIwOSw3ICsyMDUsNyBAQAogICogc2VnZmF1bHRzLiAgTm93IHdlIGxvY2sgdGhlIHdob2xlIHJvdXRpbmUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga2V5ICoKLWZpbmRfa2V5KGludCBrZXksIHZvaWQgKnZhbHVlKQorZmluZF9rZXkoaW50IHNldF92YWx1ZSwgaW50IGtleSwgdm9pZCAqdmFsdWUpCiB7CiAgICAgc3RydWN0IGtleSAqcCwgKnByZXZfcDsKICAgICBsb25nIGlkID0gUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpOwpAQCAtMjE5LDEwICsyMTUsMTMgQEAKICAgICBQeVRocmVhZF9hY3F1aXJlX2xvY2soa2V5bXV0ZXgsIDEpOwogICAgIHByZXZfcCA9IE5VTEw7CiAgICAgZm9yIChwID0ga2V5aGVhZDsgcCAhPSBOVUxMOyBwID0gcC0+bmV4dCkgewotICAgICAgICBpZiAocC0+aWQgPT0gaWQgJiYgcC0+a2V5ID09IGtleSkKKyAgICAgICAgaWYgKHAtPmlkID09IGlkICYmIHAtPmtleSA9PSBrZXkpIHsKKyAgICAgICAgICAgIGlmIChzZXRfdmFsdWUpCisgICAgICAgICAgICAgICAgcC0+dmFsdWUgPSB2YWx1ZTsKICAgICAgICAgICAgIGdvdG8gRG9uZTsKKyAgICAgICAgfQogICAgICAgICAvKiBTYW5pdHkgY2hlY2suICBUaGVzZSBzdGF0ZXMgc2hvdWxkIG5ldmVyIGhhcHBlbiBidXQgaWYKLSAgICAgICAgICogdGhleSBkbyB3ZSBtdXN0IGFib3J0LiAgT3RoZXJ3aXNlIHdlJ2xsIGVuZCB1cCBzcGlubmluZyBpbgorICAgICAgICAgKiB0aGV5IGRvIHdlIG11c3QgYWJvcnQuICBPdGhlcndpc2Ugd2UnbGwgZW5kIHVwIHNwaW5uaW5nCiAgICAgICAgICAqIGluIGEgdGlnaHQgbG9vcCB3aXRoIHRoZSBsb2NrIGhlbGQuICBBIHNpbWlsYXIgY2hlY2sgaXMgZG9uZQogICAgICAgICAgKiBpbiBweXN0YXRlLmMgdHN0YXRlX2RlbGV0ZV9jb21tb24oKS4gICovCiAgICAgICAgIGlmIChwID09IHByZXZfcCkKQEAgLTIzMSwxMSArMjMwLDExIEBACiAgICAgICAgIGlmIChwLT5uZXh0ID09IGtleWhlYWQpCiAgICAgICAgICAgICBQeV9GYXRhbEVycm9yKCJ0bHMgZmluZF9rZXk6IGNpcmN1bGFyIGxpc3QoISkiKTsKICAgICB9Ci0gICAgaWYgKHZhbHVlID09IE5VTEwpIHsKKyAgICBpZiAoIXNldF92YWx1ZSAmJiB2YWx1ZSA9PSBOVUxMKSB7CiAgICAgICAgIGFzc2VydChwID09IE5VTEwpOwogICAgICAgICBnb3RvIERvbmU7CiAgICAgfQotICAgIHAgPSAoc3RydWN0IGtleSAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGtleSkpOworICAgIHAgPSAoc3RydWN0IGtleSAqKVB5TWVtX1Jhd01hbGxvYyhzaXplb2Yoc3RydWN0IGtleSkpOwogICAgIGlmIChwICE9IE5VTEwpIHsKICAgICAgICAgcC0+aWQgPSBpZDsKICAgICAgICAgcC0+a2V5ID0ga2V5OwpAQCAtMjc0LDcgKzI3Myw3IEBACiAgICAgd2hpbGUgKChwID0gKnEpICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHAtPmtleSA9PSBrZXkpIHsKICAgICAgICAgICAgICpxID0gcC0+bmV4dDsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilwKTsKKyAgICAgICAgICAgIFB5TWVtX1Jhd0ZyZWUoKHZvaWQgKilwKTsKICAgICAgICAgICAgIC8qIE5CIFRoaXMgZG9lcyAqbm90KiBmcmVlIHAtPnZhbHVlISAqLwogICAgICAgICB9CiAgICAgICAgIGVsc2UKQEAgLTI4MywxOSArMjgyLDEyIEBACiAgICAgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKGtleW11dGV4KTsKIH0KIAotLyogQ29uZnVzaW5nOiAgSWYgdGhlIGN1cnJlbnQgdGhyZWFkIGhhcyBhbiBhc3NvY2lhdGlvbiBmb3Iga2V5LAotICogdmFsdWUgaXMgaWdub3JlZCwgYW5kIDAgaXMgcmV0dXJuZWQuICBFbHNlIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBjcmVhdGUKLSAqIGFuIGFzc29jaWF0aW9uIG9mIGtleSB0byB2YWx1ZSBmb3IgdGhlIGN1cnJlbnQgdGhyZWFkLiAgMCBpcyByZXR1cm5lZAotICogaWYgdGhhdCBzdWNjZWVkcywgYnV0IC0xIGlzIHJldHVybmVkIGlmIHRoZXJlJ3Mgbm90IGVub3VnaCBtZW1vcnkKLSAqIHRvIGNyZWF0ZSB0aGUgYXNzb2NpYXRpb24uICB2YWx1ZSBtdXN0IG5vdCBiZSBOVUxMLgotICovCiBpbnQKIFB5VGhyZWFkX3NldF9rZXlfdmFsdWUoaW50IGtleSwgdm9pZCAqdmFsdWUpCiB7CiAgICAgc3RydWN0IGtleSAqcDsKIAotICAgIGFzc2VydCh2YWx1ZSAhPSBOVUxMKTsKLSAgICBwID0gZmluZF9rZXkoa2V5LCB2YWx1ZSk7CisgICAgcCA9IGZpbmRfa2V5KDEsIGtleSwgdmFsdWUpOwogICAgIGlmIChwID09IE5VTEwpCiAgICAgICAgIHJldHVybiAtMTsKICAgICBlbHNlCkBAIC0zMDgsNyArMzAwLDcgQEAKIHZvaWQgKgogUHlUaHJlYWRfZ2V0X2tleV92YWx1ZShpbnQga2V5KQogewotICAgIHN0cnVjdCBrZXkgKnAgPSBmaW5kX2tleShrZXksIE5VTEwpOworICAgIHN0cnVjdCBrZXkgKnAgPSBmaW5kX2tleSgwLCBrZXksIE5VTEwpOwogCiAgICAgaWYgKHAgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0zMjgsNyArMzIwLDcgQEAKICAgICB3aGlsZSAoKHAgPSAqcSkgIT0gTlVMTCkgewogICAgICAgICBpZiAocC0+a2V5ID09IGtleSAmJiBwLT5pZCA9PSBpZCkgewogICAgICAgICAgICAgKnEgPSBwLT5uZXh0OwotICAgICAgICAgICAgZnJlZSgodm9pZCAqKXApOworICAgICAgICAgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXApOwogICAgICAgICAgICAgLyogTkIgVGhpcyBkb2VzICpub3QqIGZyZWUgcC0+dmFsdWUhICovCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMzYxLDcgKzM1Myw3IEBACiAgICAgd2hpbGUgKChwID0gKnEpICE9IE5VTEwpIHsKICAgICAgICAgaWYgKHAtPmlkICE9IGlkKSB7CiAgICAgICAgICAgICAqcSA9IHAtPm5leHQ7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopcCk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopcCk7CiAgICAgICAgICAgICAvKiBOQiBUaGlzIGRvZXMgKm5vdCogZnJlZSBwLT52YWx1ZSEgKi8KICAgICAgICAgfQogICAgICAgICBlbHNlCkBAIC00MDMsOCArMzk1LDEwIEBACiAgICAgaW50IGxlbjsKICNlbmRpZgogCi0gICAgaWYgKFRocmVhZEluZm9UeXBlLnRwX25hbWUgPT0gMCkKLSAgICAgICAgUHlTdHJ1Y3RTZXF1ZW5jZV9Jbml0VHlwZSgmVGhyZWFkSW5mb1R5cGUsICZ0aHJlYWRpbmZvX2Rlc2MpOworICAgIGlmIChUaHJlYWRJbmZvVHlwZS50cF9uYW1lID09IDApIHsKKyAgICAgICAgaWYgKFB5U3RydWN0U2VxdWVuY2VfSW5pdFR5cGUyKCZUaHJlYWRJbmZvVHlwZSwgJnRocmVhZGluZm9fZGVzYykgPCAwKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogCiAgICAgdGhyZWFkaW5mbyA9IFB5U3RydWN0U2VxdWVuY2VfTmV3KCZUaHJlYWRJbmZvVHlwZSk7CiAgICAgaWYgKHRocmVhZGluZm8gPT0gTlVMTCkKZGlmZiAtLWdpdCBhL1B5dGhvbi90aHJlYWRfbnQuaCBiL1B5dGhvbi90aHJlYWRfbnQuaAppbmRleCBiMTU3ZmM1Li44NDQ1MmNkIDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX250LmgKKysrIGIvUHl0aG9uL3RocmVhZF9udC5oCkBAIC0zNCw3ICszNCw3IEBACiBQTlJNVVRFWAogQWxsb2NOb25SZWN1cnNpdmVNdXRleCgpCiB7Ci0gICAgUE5STVVURVggbSA9IChQTlJNVVRFWCltYWxsb2Moc2l6ZW9mKE5STVVURVgpKTsKKyAgICBQTlJNVVRFWCBtID0gKFBOUk1VVEVYKVB5TWVtX1Jhd01hbGxvYyhzaXplb2YoTlJNVVRFWCkpOwogICAgIGlmICghbSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKFB5Q09ORF9JTklUKCZtLT5jdikpCkBAIC00Niw3ICs0Niw3IEBACiAgICAgbS0+bG9ja2VkID0gMDsKICAgICByZXR1cm4gbTsKIGZhaWw6Ci0gICAgZnJlZShtKTsKKyAgICBQeU1lbV9SYXdGcmVlKG0pOwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC01Niw3ICs1Niw3IEBACiAgICAgaWYgKG11dGV4KSB7CiAgICAgICAgIFB5Q09ORF9GSU5JKCZtdXRleC0+Y3YpOwogICAgICAgICBQeU1VVEVYX0ZJTkkoJm11dGV4LT5jcyk7Ci0gICAgICAgIGZyZWUobXV0ZXgpOworICAgICAgICBQeU1lbV9SYXdGcmVlKG11dGV4KTsKICAgICB9CiB9CiAKQEAgLTEwNyw3ICsxMDcsNyBAQAogICAgIHJlc3VsdCA9IFB5Q09ORF9TSUdOQUwoJm11dGV4LT5jdik7CiAgICAgcmVzdWx0ICY9IFB5TVVURVhfVU5MT0NLKCZtdXRleC0+Y3MpOwogICAgIHJldHVybiByZXN1bHQ7Ci19ICAgIAorfQogCiAjZWxzZSAvKiBpZiAhIF9QWV9VU0VfQ1ZfTE9DS1MgKi8KIApAQCAtMTMwLDcgKzEzMCw3IEBACiBEV09SRAogRW50ZXJOb25SZWN1cnNpdmVNdXRleChQTlJNVVRFWCBtdXRleCwgRFdPUkQgbWlsbGlzZWNvbmRzKQogewotICAgIHJldHVybiBXYWl0Rm9yU2luZ2xlT2JqZWN0KG11dGV4LCBtaWxsaXNlY29uZHMpOworICAgIHJldHVybiBXYWl0Rm9yU2luZ2xlT2JqZWN0RXgobXV0ZXgsIG1pbGxpc2Vjb25kcywgRkFMU0UpOwogfQogCiBCT09MCkBAIC0zODksMjAgKzM4OSwxMSBAQAogICAgIFRsc0ZyZWUoa2V5KTsKIH0KIAotLyogV2UgbXVzdCBiZSBjYXJlZnVsIHRvIGVtdWxhdGUgdGhlIHN0cmFuZ2Ugc2VtYW50aWNzIGltcGxlbWVudGVkIGluIHRocmVhZC5jLAotICogd2hlcmUgdGhlIHZhbHVlIGlzIG9ubHkgc2V0IGlmIGl0IGhhc24ndCBiZWVuIHNldCBiZWZvcmUuCi0gKi8KIGludAogUHlUaHJlYWRfc2V0X2tleV92YWx1ZShpbnQga2V5LCB2b2lkICp2YWx1ZSkKIHsKICAgICBCT09MIG9rOwotICAgIHZvaWQgKm9sZHZhbHVlOwogCi0gICAgYXNzZXJ0KHZhbHVlICE9IE5VTEwpOwotICAgIG9sZHZhbHVlID0gVGxzR2V0VmFsdWUoa2V5KTsKLSAgICBpZiAob2xkdmFsdWUgIT0gTlVMTCkKLSAgICAgICAgLyogaWdub3JlIHZhbHVlIGlmIGFscmVhZHkgc2V0ICovCi0gICAgICAgIHJldHVybiAwOwogICAgIG9rID0gVGxzU2V0VmFsdWUoa2V5LCB2YWx1ZSk7CiAgICAgaWYgKCFvaykKICAgICAgICAgcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9vczIuaCBiL1B5dGhvbi90aHJlYWRfb3MyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFiMjY0YjUuLjAwMDAwMDAKLS0tIGEvUHl0aG9uL3RocmVhZF9vczIuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2NyArMCwwIEBACi0vKiBUaGlzIGNvZGUgaW1wbGVtZW50ZWQgYnkgY3ZhbGVAbmV0Y29tLmNvbSAqLwotCi0jZGVmaW5lIElOQ0xfRE9TUFJPQ0VTUwotI2RlZmluZSBJTkNMX0RPU1NFTUFQSE9SRVMKLSNpbmNsdWRlICJvczIuaCIKLSNpbmNsdWRlICJsaW1pdHMuaCIKLQotI2luY2x1ZGUgInByb2Nlc3MuaCIKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0jaW5jbHVkZSA8c3lzL2J1aWx0aW4uaD4KLSNpbmNsdWRlIDxzeXMvZm11dGV4Lmg+Ci0jZWxzZQotbG9uZyBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KHZvaWQpOwotI2VuZGlmCi0KLS8qIGRlZmF1bHQgdGhyZWFkIHN0YWNrIHNpemUgb2YgNjRrQiAqLwotI2lmICFkZWZpbmVkKFRIUkVBRF9TVEFDS19TSVpFKQotI2RlZmluZSBUSFJFQURfU1RBQ0tfU0laRSAgICAgICAweDEwMDAwCi0jZW5kaWYKLQotI2RlZmluZSBPUzJfU1RBQ0tTSVpFKHgpICAgICAgICAoeCA/IHggOiBUSFJFQURfU1RBQ0tfU0laRSkKLQotLyoKLSAqIEluaXRpYWxpemF0aW9uIG9mIHRoZSBDIHBhY2thZ2UsIHNob3VsZCBub3QgYmUgbmVlZGVkLgotICovCi1zdGF0aWMgdm9pZAotUHlUaHJlYWRfX2luaXRfdGhyZWFkKHZvaWQpCi17Ci19Ci0KLS8qCi0gKiBUaHJlYWQgc3VwcG9ydC4KLSAqLwotbG9uZwotUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCh2b2lkICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKQotewotICAgIGludCB0aHJlYWRfaWQ7Ci0KLSAgICB0aHJlYWRfaWQgPSBfYmVnaW50aHJlYWQoZnVuYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9TMl9TVEFDS1NJWkUoX3B5dGhyZWFkX3N0YWNrc2l6ZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnKTsKLQotICAgIGlmICh0aHJlYWRfaWQgPT0gLTEpIHsKLSAgICAgICAgZHByaW50ZigoIl9iZWdpbnRocmVhZCBmYWlsZWQuIHJldHVybiAlbGRcbiIsIGVycm5vKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRocmVhZF9pZDsKLX0KLQotbG9uZwotUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCh2b2lkKQotewotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIFBQSUIgcGliOwotICAgIFBUSUIgdGliOwotI2VuZGlmCi0KLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICByZXR1cm4gX2dldHRpZCgpOwotI2Vsc2UKLSAgICBEb3NHZXRJbmZvQmxvY2tzKCZ0aWIsICZwaWIpOwotICAgIHJldHVybiB0aWItPnRpYl9wdGliMi0+dGliMl91bHRpZDsKLSNlbmRpZgotfQotCi12b2lkCi1QeVRocmVhZF9leGl0X3RocmVhZCh2b2lkKQotewotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2V4aXRfdGhyZWFkIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCkpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBleGl0KDApOwotICAgIF9lbmR0aHJlYWQoKTsKLX0KLQotLyoKLSAqIExvY2sgc3VwcG9ydC4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgd2l0aCBhbiBldmVudCBzZW1hcGhvcmUgYW5kIGNyaXRpY2FsCi0gKiBzZWN0aW9ucyB0byBtYWtlIGl0IGJlaGF2ZSBtb3JlIGxpa2UgYSBwb3NpeCBtdXRleCB0aGFuIGl0cyBPUy8yCi0gKiBjb3VudGVycGFydHMuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgb3MyX2xvY2tfdCB7Ci0gICAgaW50IGlzX3NldDsKLSAgICBIRVYgY2hhbmdlZDsKLX0gKnR5cGVfb3MyX2xvY2s7Ci0KLVB5VGhyZWFkX3R5cGVfbG9jawotUHlUaHJlYWRfYWxsb2NhdGVfbG9jayh2b2lkKQotewotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgX2ZtdXRleCAqc2VtID0gbWFsbG9jKHNpemVvZihfZm11dGV4KSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkKLSAgICAgICAgUHlUaHJlYWRfaW5pdF90aHJlYWQoKTsKLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgLT4gJWx4XG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICAobG9uZylzZW0pKTsKLSAgICBpZiAoX2ZtdXRleF9jcmVhdGUoc2VtLCAwKSkgewotICAgICAgICBmcmVlKHNlbSk7Ci0gICAgICAgIHNlbSA9IE5VTEw7Ci0gICAgfQotICAgIHJldHVybiAoUHlUaHJlYWRfdHlwZV9sb2NrKXNlbTsKLSNlbHNlCi0gICAgQVBJUkVUIHJjOwotICAgIHR5cGVfb3MyX2xvY2sgbG9jayA9ICh0eXBlX29zMl9sb2NrKW1hbGxvYyhzaXplb2Yoc3RydWN0IG9zMl9sb2NrX3QpKTsKLQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrIGNhbGxlZFxuIikpOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0KLSAgICBsb2NrLT5pc19zZXQgPSAwOwotCi0gICAgRG9zQ3JlYXRlRXZlbnRTZW0oTlVMTCwgJmxvY2stPmNoYW5nZWQsIDAsIDApOwotCi0gICAgZHByaW50ZigoIiVsZDogUHlUaHJlYWRfYWxsb2NhdGVfbG9jaygpIC0+ICVwXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICBsb2NrLT5jaGFuZ2VkKSk7Ci0KLSAgICByZXR1cm4gKFB5VGhyZWFkX3R5cGVfbG9jaylsb2NrOwotI2VuZGlmCi19Ci0KLXZvaWQKLVB5VGhyZWFkX2ZyZWVfbG9jayhQeVRocmVhZF90eXBlX2xvY2sgYUxvY2spCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgdHlwZV9vczJfbG9jayBsb2NrID0gKHR5cGVfb3MyX2xvY2spYUxvY2s7Ci0jZW5kaWYKLQotICAgIGRwcmludGYoKCIlbGQ6IFB5VGhyZWFkX2ZyZWVfbG9jayglcCkgY2FsbGVkXG4iLAotICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSxhTG9jaykpOwotCi0jaWYgZGVmaW5lZChQWUNDX0dDQykKLSAgICBpZiAoYUxvY2spIHsKLSAgICAgICAgX2ZtdXRleF9jbG9zZSgoX2ZtdXRleCAqKWFMb2NrKTsKLSAgICAgICAgZnJlZSgoX2ZtdXRleCAqKWFMb2NrKTsKLSAgICB9Ci0jZWxzZQotICAgIERvc0Nsb3NlRXZlbnRTZW0obG9jay0+Y2hhbmdlZCk7Ci0gICAgZnJlZShhTG9jayk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIFJldHVybiAxIG9uIHN1Y2Nlc3MgaWYgdGhlIGxvY2sgd2FzIGFjcXVpcmVkCi0gKgotICogYW5kIDAgaWYgdGhlIGxvY2sgd2FzIG5vdCBhY3F1aXJlZC4KLSAqLwotaW50Ci1QeVRocmVhZF9hY3F1aXJlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGFMb2NrLCBpbnQgd2FpdGZsYWcpCi17Ci0jaWYgIWRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaW50ICAgZG9uZSA9IDA7Ci0gICAgVUxPTkcgY291bnQ7Ci0gICAgUElEICAgcGlkID0gMDsKLSAgICBUSUQgICB0aWQgPSAwOwotICAgIHR5cGVfb3MyX2xvY2sgbG9jayA9ICh0eXBlX29zMl9sb2NrKWFMb2NrOwotI2VuZGlmCi0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9hY3F1aXJlX2xvY2soJXAsICVkKSBjYWxsZWRcbiIsCi0gICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgIGFMb2NrLAotICAgICAgICAgICAgIHdhaXRmbGFnKSk7Ci0KLSNpZiBkZWZpbmVkKFBZQ0NfR0NDKQotICAgIC8qIGFsd2F5cyBzdWNjZXNzZnVsIGlmIHRoZSBsb2NrIGRvZXNuJ3QgZXhpc3QgKi8KLSAgICBpZiAoYUxvY2sgJiYKLSAgICAgICAgX2ZtdXRleF9yZXF1ZXN0KChfZm11dGV4ICopYUxvY2ssIHdhaXRmbGFnID8gMCA6IF9GTVJfTk9XQUlUKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0jZWxzZQotICAgIHdoaWxlICghZG9uZSkgewotICAgICAgICAvKiBpZiB0aGUgbG9jayBpcyBjdXJyZW50bHkgc2V0LCB3ZSBoYXZlIHRvIHdhaXQgZm9yCi0gICAgICAgICAqIHRoZSBzdGF0ZSB0byBjaGFuZ2UKLSAgICAgICAgICovCi0gICAgICAgIGlmIChsb2NrLT5pc19zZXQpIHsKLSAgICAgICAgICAgIGlmICghd2FpdGZsYWcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBEb3NXYWl0RXZlbnRTZW0obG9jay0+Y2hhbmdlZCwgU0VNX0lOREVGSU5JVEVfV0FJVCk7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBlbnRlciBhIGNyaXRpY2FsIHNlY3Rpb24gYW5kIHRyeSB0byBnZXQgdGhlIHNlbWFwaG9yZS4gIElmCi0gICAgICAgICAqIGl0IGlzIHN0aWxsIGxvY2tlZCwgd2Ugd2lsbCB0cnkgYWdhaW4uCi0gICAgICAgICAqLwotICAgICAgICBpZiAoRG9zRW50ZXJDcml0U2VjKCkpCi0gICAgICAgICAgICByZXR1cm4gMDsKLQotICAgICAgICBpZiAoIWxvY2stPmlzX3NldCkgewotICAgICAgICAgICAgbG9jay0+aXNfc2V0ID0gMTsKLSAgICAgICAgICAgIERvc1Jlc2V0RXZlbnRTZW0obG9jay0+Y2hhbmdlZCwgJmNvdW50KTsKLSAgICAgICAgICAgIGRvbmUgPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgRG9zRXhpdENyaXRTZWMoKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIHJldHVybiAxOwotfQotCi12b2lkCi1QeVRocmVhZF9yZWxlYXNlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGFMb2NrKQotewotI2lmICFkZWZpbmVkKFBZQ0NfR0NDKQotICAgIHR5cGVfb3MyX2xvY2sgbG9jayA9ICh0eXBlX29zMl9sb2NrKWFMb2NrOwotI2VuZGlmCi0KLSAgICBkcHJpbnRmKCgiJWxkOiBQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGNhbGxlZFxuIiwKLSAgICAgICAgICAgICBQeVRocmVhZF9nZXRfdGhyZWFkX2lkZW50KCksCi0gICAgICAgICAgICAgYUxvY2spKTsKLQotI2lmIGRlZmluZWQoUFlDQ19HQ0MpCi0gICAgaWYgKGFMb2NrKQotICAgICAgICBfZm11dGV4X3JlbGVhc2UoKF9mbXV0ZXggKilhTG9jayk7Ci0jZWxzZQotICAgIGlmICghbG9jay0+aXNfc2V0KSB7Ci0gICAgICAgIGRwcmludGYoKCIlbGQ6IENvdWxkIG5vdCBQeVRocmVhZF9yZWxlYXNlX2xvY2soJXApIGVycm9yOiAlbFxuIiwKLSAgICAgICAgICAgICAgICAgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCgpLAotICAgICAgICAgICAgICAgICBhTG9jaywKLSAgICAgICAgICAgICAgICAgR2V0TGFzdEVycm9yKCkpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChEb3NFbnRlckNyaXRTZWMoKSkgewotICAgICAgICBkcHJpbnRmKCgiJWxkOiBDb3VsZCBub3QgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKCVwKSBlcnJvcjogJWxcbiIsCi0gICAgICAgICAgICAgICAgIFB5VGhyZWFkX2dldF90aHJlYWRfaWRlbnQoKSwKLSAgICAgICAgICAgICAgICAgYUxvY2ssCi0gICAgICAgICAgICAgICAgIEdldExhc3RFcnJvcigpKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBsb2NrLT5pc19zZXQgPSAwOwotICAgIERvc1Bvc3RFdmVudFNlbShsb2NrLT5jaGFuZ2VkKTsKLQotICAgIERvc0V4aXRDcml0U2VjKCk7Ci0jZW5kaWYKLX0KLQotLyogbWluaW11bS9tYXhpbXVtIHRocmVhZCBzdGFjayBzaXplcyBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUgVEhSRUFEX01JTl9TVEFDS1NJWkUgICAgMHg4MDAwICAgICAgICAgIC8qIDMya0IgKi8KLSNkZWZpbmUgVEhSRUFEX01BWF9TVEFDS1NJWkUgICAgMHgyMDAwMDAwICAgICAgIC8qIDMyTUIgKi8KLQotLyogc2V0IHRoZSB0aHJlYWQgc3RhY2sgc2l6ZS4KLSAqIFJldHVybiAwIGlmIHNpemUgaXMgdmFsaWQsIC0xIG90aGVyd2lzZS4KLSAqLwotc3RhdGljIGludAotX3B5dGhyZWFkX29zMl9zZXRfc3RhY2tzaXplKHNpemVfdCBzaXplKQotewotICAgIC8qIHNldCB0byBkZWZhdWx0ICovCi0gICAgaWYgKHNpemUgPT0gMCkgewotICAgICAgICBfcHl0aHJlYWRfc3RhY2tzaXplID0gMDsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyogdmFsaWQgcmFuZ2U/ICovCi0gICAgaWYgKHNpemUgPj0gVEhSRUFEX01JTl9TVEFDS1NJWkUgJiYgc2l6ZSA8IFRIUkVBRF9NQVhfU1RBQ0tTSVpFKSB7Ci0gICAgICAgIF9weXRocmVhZF9zdGFja3NpemUgPSBzaXplOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gLTE7Ci19Ci0KLSNkZWZpbmUgVEhSRUFEX1NFVF9TVEFDS1NJWkUoeCkgX3B5dGhyZWFkX29zMl9zZXRfc3RhY2tzaXplKHgpCmRpZmYgLS1naXQgYS9QeXRob24vdGhyZWFkX3B0aC5oIGIvUHl0aG9uL3RocmVhZF9wdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTcwNDI2Ni4uMDAwMDAwMAotLS0gYS9QeXRob24vdGhyZWFkX3B0aC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTc3ICswLDAgQEAKLQotLyogR05VIHB0aCB0aHJlYWRzIGludGVyZmFjZQotICAgaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL3B0aAotICAgMjAwMC0wNS0wMyBBbmR5IER1c3RtYW4gPGFuZHlAZHVzdG1hbi5uZXQ+Ci0KLSAgIEFkYXB0ZWQgZnJvbSBQb3NpeCB0aHJlYWRzIGludGVyZmFjZQotICAgMTIgTWF5IDE5OTcgLS0gZGF2aWQgYXJub2xkIDxkYXZpZGFAcG9ib3guY29tPgotICovCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxwdGguaD4KLQotLyogQSBwdGggbXV0ZXggaXNuJ3Qgc3VmZmljaWVudCB0byBtb2RlbCB0aGUgUHl0aG9uIGxvY2sgdHlwZQotICogYmVjYXVzZSBwdGggbXV0ZXhlcyBjYW4gYmUgYWNxdWlyZWQgbXVsdGlwbGUgdGltZXMgYnkgdGhlCi0gKiBzYW1lIHRocmVhZC4KLSAqCi0gKiBUaGUgcHRoX2xvY2sgc3RydWN0IGltcGxlbWVudHMgYSBQeXRob24gbG9jayBhcyBhICJsb2NrZWQ/IiBiaXQKLSAqIGFuZCBhIDxjb25kaXRpb24sIG11dGV4PiBwYWlyLiAgSW4gZ2VuZXJhbCwgaWYgdGhlIGJpdCBjYW4gYmUgYWNxdWlyZWQKLSAqIGluc3RhbnRseSwgaXQgaXMsIGVsc2UgdGhlIHBhaXIgaXMgdXNlZCB0byBibG9jayB0aGUgdGhyZWFkIHVudGlsIHRoZQotICogYml0IGlzIGNsZWFyZWQuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgewotICAgIGNoYXIgICAgICAgICAgICAgbG9ja2VkOyAvKiAwPXVubG9ja2VkLCAxPWxvY2tlZCAqLwotICAgIC8qIGEgPGNvbmQsIG11dGV4PiBwYWlyIHRvIGhhbmRsZSBhbiBhY3F1aXJlIG9mIGEgbG9ja2VkIGxvY2sgKi8KLSAgICBwdGhfY29uZF90ICAgbG9ja19yZWxlYXNlZDsKLSAgICBwdGhfbXV0ZXhfdCAgbXV0OwotfSBwdGhfbG9jazsKLQotI2RlZmluZSBDSEVDS19TVEFUVVMobmFtZSkgIGlmIChzdGF0dXMgPT0gLTEpIHsgcHJpbnRmKCIlZCAiLCBzdGF0dXMpOyBwZXJyb3IobmFtZSk7IGVycm9yID0gMTsgfQotCi1wdGhfYXR0cl90IFB5VGhyZWFkX2F0dHI7Ci0KLS8qCi0gKiBJbml0aWFsaXphdGlvbi4KLSAqLwotCi1zdGF0aWMgdm9pZCBQeVRocmVhZF9faW5pdF90aHJlYWQodm9pZCkKLXsKLSAgICBwdGhfaW5pdCgpOwotICAgIFB5VGhyZWFkX2F0dHIgPSBwdGhfYXR0cl9uZXcoKTsKLSAgICBwdGhfYXR0cl9zZXQoUHlUaHJlYWRfYXR0ciwgUFRIX0FUVFJfU1RBQ0tfU0laRSwgMTw8MTgpOwotICAgIHB0aF9hdHRyX3NldChQeVRocmVhZF9hdHRyLCBQVEhfQVRUUl9KT0lOQUJMRSwgRkFMU0UpOwotfQotCi0vKgotICogVGhyZWFkIHN1cHBvcnQuCi0gKi8KLQotCi1sb25nIFB5VGhyZWFkX3N0YXJ0X25ld190aHJlYWQodm9pZCAoKmZ1bmMpKHZvaWQgKiksIHZvaWQgKmFyZykKLXsKLSAgICBwdGhfdCB0aDsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfc3RhcnRfbmV3X3RocmVhZCBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotCi0gICAgdGggPSBwdGhfc3Bhd24oUHlUaHJlYWRfYXR0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQqICgqKSh2b2lkICopKWZ1bmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYXJnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7Ci0KLSAgICByZXR1cm4gdGg7Ci19Ci0KLWxvbmcgUHlUaHJlYWRfZ2V0X3RocmVhZF9pZGVudCh2b2lkKQotewotICAgIHZvbGF0aWxlIHB0aF90IHRocmVhZGlkOwotICAgIGlmICghaW5pdGlhbGl6ZWQpCi0gICAgICAgIFB5VGhyZWFkX2luaXRfdGhyZWFkKCk7Ci0gICAgdGhyZWFkaWQgPSBwdGhfc2VsZigpOwotICAgIHJldHVybiAobG9uZykgdGhyZWFkaWQ7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfZXhpdF90aHJlYWQodm9pZCkKLXsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfZXhpdF90aHJlYWQgY2FsbGVkXG4iKSk7Ci0gICAgaWYgKCFpbml0aWFsaXplZCkgewotICAgICAgICBleGl0KDApOwotICAgIH0KLX0KLQotLyoKLSAqIExvY2sgc3VwcG9ydC4KLSAqLwotUHlUaHJlYWRfdHlwZV9sb2NrIFB5VGhyZWFkX2FsbG9jYXRlX2xvY2sodm9pZCkKLXsKLSAgICBwdGhfbG9jayAqbG9jazsKLSAgICBpbnQgc3RhdHVzLCBlcnJvciA9IDA7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWxsb2NhdGVfbG9jayBjYWxsZWRcbiIpKTsKLSAgICBpZiAoIWluaXRpYWxpemVkKQotICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwotCi0gICAgbG9jayA9IChwdGhfbG9jayAqKSBtYWxsb2Moc2l6ZW9mKHB0aF9sb2NrKSk7Ci0gICAgbWVtc2V0KCh2b2lkICopbG9jaywgJ1wwJywgc2l6ZW9mKHB0aF9sb2NrKSk7Ci0gICAgaWYgKGxvY2spIHsKLSAgICAgICAgbG9jay0+bG9ja2VkID0gMDsKLSAgICAgICAgc3RhdHVzID0gcHRoX211dGV4X2luaXQoJmxvY2stPm11dCk7Ci0gICAgICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X2luaXQiKTsKLSAgICAgICAgc3RhdHVzID0gcHRoX2NvbmRfaW5pdCgmbG9jay0+bG9ja19yZWxlYXNlZCk7Ci0gICAgICAgIENIRUNLX1NUQVRVUygicHRoX2NvbmRfaW5pdCIpOwotICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgIGZyZWUoKHZvaWQgKilsb2NrKTsKLSAgICAgICAgICAgIGxvY2sgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQotICAgIGRwcmludGYoKCJQeVRocmVhZF9hbGxvY2F0ZV9sb2NrKCkgLT4gJXBcbiIsIGxvY2spKTsKLSAgICByZXR1cm4gKFB5VGhyZWFkX3R5cGVfbG9jaykgbG9jazsKLX0KLQotdm9pZCBQeVRocmVhZF9mcmVlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2spCi17Ci0gICAgcHRoX2xvY2sgKnRoZWxvY2sgPSAocHRoX2xvY2sgKilsb2NrOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2ZyZWVfbG9jayglcCkgY2FsbGVkXG4iLCBsb2NrKSk7Ci0KLSAgICBmcmVlKCh2b2lkICopdGhlbG9jayk7Ci19Ci0KLWludCBQeVRocmVhZF9hY3F1aXJlX2xvY2soUHlUaHJlYWRfdHlwZV9sb2NrIGxvY2ssIGludCB3YWl0ZmxhZykKLXsKLSAgICBpbnQgc3VjY2VzczsKLSAgICBwdGhfbG9jayAqdGhlbG9jayA9IChwdGhfbG9jayAqKWxvY2s7Ci0gICAgaW50IHN0YXR1cywgZXJyb3IgPSAwOwotCi0gICAgZHByaW50ZigoIlB5VGhyZWFkX2FjcXVpcmVfbG9jayglcCwgJWQpIGNhbGxlZFxuIiwgbG9jaywgd2FpdGZsYWcpKTsKLQotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9hY3F1aXJlKCZ0aGVsb2NrLT5tdXQsICF3YWl0ZmxhZywgTlVMTCk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfYWNxdWlyZVsxXSIpOwotICAgIHN1Y2Nlc3MgPSB0aGVsb2NrLT5sb2NrZWQgPT0gMDsKLSAgICBpZiAoc3VjY2VzcykgdGhlbG9jay0+bG9ja2VkID0gMTsKLSAgICBzdGF0dXMgPSBwdGhfbXV0ZXhfcmVsZWFzZSggJnRoZWxvY2stPm11dCApOwotICAgIENIRUNLX1NUQVRVUygicHRoX211dGV4X3JlbGVhc2VbMV0iKTsKLQotICAgIGlmICggIXN1Y2Nlc3MgJiYgd2FpdGZsYWcgKSB7Ci0gICAgICAgIC8qIGNvbnRpbnVlIHRyeWluZyB1bnRpbCB3ZSBnZXQgdGhlIGxvY2sgKi8KLQotICAgICAgICAvKiBtdXQgbXVzdCBiZSBsb2NrZWQgYnkgbWUgLS0gcGFydCBvZiB0aGUgY29uZGl0aW9uCi0gICAgICAgICAqIHByb3RvY29sICovCi0gICAgICAgIHN0YXR1cyA9IHB0aF9tdXRleF9hY3F1aXJlKCAmdGhlbG9jay0+bXV0LCAhd2FpdGZsYWcsIE5VTEwgKTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfYWNxdWlyZVsyXSIpOwotICAgICAgICB3aGlsZSAoIHRoZWxvY2stPmxvY2tlZCApIHsKLSAgICAgICAgICAgIHN0YXR1cyA9IHB0aF9jb25kX2F3YWl0KCZ0aGVsb2NrLT5sb2NrX3JlbGVhc2VkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRoZWxvY2stPm11dCwgTlVMTCk7Ci0gICAgICAgICAgICBDSEVDS19TVEFUVVMoInB0aF9jb25kX2F3YWl0Iik7Ci0gICAgICAgIH0KLSAgICAgICAgdGhlbG9jay0+bG9ja2VkID0gMTsKLSAgICAgICAgc3RhdHVzID0gcHRoX211dGV4X3JlbGVhc2UoICZ0aGVsb2NrLT5tdXQgKTsKLSAgICAgICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfcmVsZWFzZVsyXSIpOwotICAgICAgICBzdWNjZXNzID0gMTsKLSAgICB9Ci0gICAgaWYgKGVycm9yKSBzdWNjZXNzID0gMDsKLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfYWNxdWlyZV9sb2NrKCVwLCAlZCkgLT4gJWRcbiIsIGxvY2ssIHdhaXRmbGFnLCBzdWNjZXNzKSk7Ci0gICAgcmV0dXJuIHN1Y2Nlc3M7Ci19Ci0KLXZvaWQgUHlUaHJlYWRfcmVsZWFzZV9sb2NrKFB5VGhyZWFkX3R5cGVfbG9jayBsb2NrKQotewotICAgIHB0aF9sb2NrICp0aGVsb2NrID0gKHB0aF9sb2NrICopbG9jazsKLSAgICBpbnQgc3RhdHVzLCBlcnJvciA9IDA7Ci0KLSAgICBkcHJpbnRmKCgiUHlUaHJlYWRfcmVsZWFzZV9sb2NrKCVwKSBjYWxsZWRcbiIsIGxvY2spKTsKLQotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9hY3F1aXJlKCAmdGhlbG9jay0+bXV0LCAwLCBOVUxMICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfYWNxdWlyZVszXSIpOwotCi0gICAgdGhlbG9jay0+bG9ja2VkID0gMDsKLQotICAgIHN0YXR1cyA9IHB0aF9tdXRleF9yZWxlYXNlKCAmdGhlbG9jay0+bXV0ICk7Ci0gICAgQ0hFQ0tfU1RBVFVTKCJwdGhfbXV0ZXhfcmVsZWFzZVszXSIpOwotCi0gICAgLyogd2FrZSB1cCBzb21lb25lIChhbnlvbmUsIGlmIGFueSkgd2FpdGluZyBvbiB0aGUgbG9jayAqLwotICAgIHN0YXR1cyA9IHB0aF9jb25kX25vdGlmeSggJnRoZWxvY2stPmxvY2tfcmVsZWFzZWQsIDAgKTsKLSAgICBDSEVDS19TVEFUVVMoInB0aF9jb25kX25vdGlmeSIpOwotfQpkaWZmIC0tZ2l0IGEvUHl0aG9uL3RocmVhZF9wdGhyZWFkLmggYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAppbmRleCBlOTBhZTdlLi5kOWY3Yzc2IDEwMDY0NAotLS0gYS9QeXRob24vdGhyZWFkX3B0aHJlYWQuaAorKysgYi9QeXRob24vdGhyZWFkX3B0aHJlYWQuaApAQCAtMjgyLDE0ICsyODIsMTQgQEAKICAgICBpZiAoIWluaXRpYWxpemVkKQogICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwogCi0gICAgbG9jayA9IChzZW1fdCAqKW1hbGxvYyhzaXplb2Yoc2VtX3QpKTsKKyAgICBsb2NrID0gKHNlbV90ICopUHlNZW1fUmF3TWFsbG9jKHNpemVvZihzZW1fdCkpOwogCiAgICAgaWYgKGxvY2spIHsKICAgICAgICAgc3RhdHVzID0gc2VtX2luaXQobG9jaywwLDEpOwogICAgICAgICBDSEVDS19TVEFUVVMoInNlbV9pbml0Iik7CiAKICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopbG9jayk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopbG9jayk7CiAgICAgICAgICAgICBsb2NrID0gTlVMTDsKICAgICAgICAgfQogICAgIH0KQEAgLTMxMyw3ICszMTMsNyBAQAogICAgIHN0YXR1cyA9IHNlbV9kZXN0cm95KHRoZWxvY2spOwogICAgIENIRUNLX1NUQVRVUygic2VtX2Rlc3Ryb3kiKTsKIAotICAgIGZyZWUoKHZvaWQgKil0aGVsb2NrKTsKKyAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopdGhlbG9jayk7CiB9CiAKIC8qCkBAIC00MTAsNyArNDEwLDcgQEAKICAgICBpZiAoIWluaXRpYWxpemVkKQogICAgICAgICBQeVRocmVhZF9pbml0X3RocmVhZCgpOwogCi0gICAgbG9jayA9IChwdGhyZWFkX2xvY2sgKikgbWFsbG9jKHNpemVvZihwdGhyZWFkX2xvY2spKTsKKyAgICBsb2NrID0gKHB0aHJlYWRfbG9jayAqKSBQeU1lbV9SYXdNYWxsb2Moc2l6ZW9mKHB0aHJlYWRfbG9jaykpOwogICAgIGlmIChsb2NrKSB7CiAgICAgICAgIG1lbXNldCgodm9pZCAqKWxvY2ssICdcMCcsIHNpemVvZihwdGhyZWFkX2xvY2spKTsKICAgICAgICAgbG9jay0+bG9ja2VkID0gMDsKQEAgLTQzMCw3ICs0MzAsNyBAQAogICAgICAgICBDSEVDS19TVEFUVVMoInB0aHJlYWRfY29uZF9pbml0Iik7CiAKICAgICAgICAgaWYgKGVycm9yKSB7Ci0gICAgICAgICAgICBmcmVlKCh2b2lkICopbG9jayk7CisgICAgICAgICAgICBQeU1lbV9SYXdGcmVlKCh2b2lkICopbG9jayk7CiAgICAgICAgICAgICBsb2NrID0gMDsKICAgICAgICAgfQogICAgIH0KQEAgLTQ1Nyw3ICs0NTcsNyBAQAogICAgIHN0YXR1cyA9IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSggJnRoZWxvY2stPm11dCApOwogICAgIENIRUNLX1NUQVRVUygicHRocmVhZF9tdXRleF9kZXN0cm95Iik7CiAKLSAgICBmcmVlKCh2b2lkICopdGhlbG9jayk7CisgICAgUHlNZW1fUmF3RnJlZSgodm9pZCAqKXRoZWxvY2spOwogfQogCiBQeUxvY2tTdGF0dXMKQEAgLTYyNyw5ICs2MjcsNiBAQAogUHlUaHJlYWRfc2V0X2tleV92YWx1ZShpbnQga2V5LCB2b2lkICp2YWx1ZSkKIHsKICAgICBpbnQgZmFpbDsKLSAgICB2b2lkICpvbGRWYWx1ZSA9IHB0aHJlYWRfZ2V0c3BlY2lmaWMoa2V5KTsKLSAgICBpZiAob2xkVmFsdWUgIT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDA7CiAgICAgZmFpbCA9IHB0aHJlYWRfc2V0c3BlY2lmaWMoa2V5LCB2YWx1ZSk7CiAgICAgcmV0dXJuIGZhaWwgPyAtMSA6IDA7CiB9CmRpZmYgLS1naXQgYS9QeXRob24vdHJhY2ViYWNrLmMgYi9QeXRob24vdHJhY2ViYWNrLmMKaW5kZXggNzQwNzVjOS4uN2QxZmMyZSAxMDA2NDQKLS0tIGEvUHl0aG9uL3RyYWNlYmFjay5jCisrKyBiL1B5dGhvbi90cmFjZWJhY2suYwpAQCAtMTMsNyArMTMsNyBAQAogCiAjZGVmaW5lIE9GRih4KSBvZmZzZXRvZihQeVRyYWNlYmFja09iamVjdCwgeCkKIAotI2RlZmluZSBQVVRTKGZkLCBzdHIpIHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKQorI2RlZmluZSBQVVRTKGZkLCBzdHIpIHdyaXRlKGZkLCBzdHIsIChpbnQpc3RybGVuKHN0cikpCiAjZGVmaW5lIE1BWF9TVFJJTkdfTEVOR1RIIDUwMAogI2RlZmluZSBNQVhfRlJBTUVfREVQVEggMTAwCiAjZGVmaW5lIE1BWF9OVEhSRUFEUyAxMDAKQEAgLTIxLDYgKzIxLDExIEBACiAvKiBGdW5jdGlvbiBmcm9tIFBhcnNlci90b2tlbml6ZXIuYyAqLwogZXh0ZXJuIGNoYXIgKiBQeVRva2VuaXplcl9GaW5kRW5jb2RpbmdGaWxlbmFtZShpbnQsIFB5T2JqZWN0ICopOwogCitfUHlfSURFTlRJRklFUihUZXh0SU9XcmFwcGVyKTsKK19QeV9JREVOVElGSUVSKGNsb3NlKTsKK19QeV9JREVOVElGSUVSKG9wZW4pOworX1B5X0lERU5USUZJRVIocGF0aCk7CisKIHN0YXRpYyBQeU9iamVjdCAqCiB0Yl9kaXIoUHlUcmFjZWJhY2tPYmplY3QgKnNlbGYpCiB7CkBAIC0xMzcsNiArMTQyLDM5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKy8qIEluc2VydCBhIGZyYW1lIGludG8gdGhlIHRyYWNlYmFjayBmb3IgKGZ1bmNuYW1lLCBmaWxlbmFtZSwgbGluZW5vKS4gKi8KK3ZvaWQgX1B5VHJhY2ViYWNrX0FkZChjb25zdCBjaGFyICpmdW5jbmFtZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBsaW5lbm8pCit7CisgICAgUHlPYmplY3QgKmdsb2JhbHMgPSBOVUxMOworICAgIFB5Q29kZU9iamVjdCAqY29kZSA9IE5VTEw7CisgICAgUHlGcmFtZU9iamVjdCAqZnJhbWUgPSBOVUxMOworICAgIFB5T2JqZWN0ICpleGNlcHRpb24sICp2YWx1ZSwgKnRiOworCisgICAgLyogU2F2ZSBhbmQgY2xlYXIgdGhlIGN1cnJlbnQgZXhjZXB0aW9uLiBQeXRob24gZnVuY3Rpb25zIG11c3Qgbm90IGJlCisgICAgICAgY2FsbGVkIHdpdGggYW4gZXhjZXB0aW9uIHNldC4gQ2FsbGluZyBQeXRob24gZnVuY3Rpb25zIGhhcHBlbnMgd2hlbgorICAgICAgIHRoZSBjb2RlYyBvZiB0aGUgZmlsZXN5c3RlbSBlbmNvZGluZyBpcyBpbXBsZW1lbnRlZCBpbiBwdXJlIFB5dGhvbi4gKi8KKyAgICBQeUVycl9GZXRjaCgmZXhjZXB0aW9uLCAmdmFsdWUsICZ0Yik7CisKKyAgICBnbG9iYWxzID0gUHlEaWN0X05ldygpOworICAgIGlmICghZ2xvYmFscykKKyAgICAgICAgZ290byBkb25lOworICAgIGNvZGUgPSBQeUNvZGVfTmV3RW1wdHkoZmlsZW5hbWUsIGZ1bmNuYW1lLCBsaW5lbm8pOworICAgIGlmICghY29kZSkKKyAgICAgICAgZ290byBkb25lOworICAgIGZyYW1lID0gUHlGcmFtZV9OZXcoUHlUaHJlYWRTdGF0ZV9HZXQoKSwgY29kZSwgZ2xvYmFscywgTlVMTCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgZ290byBkb25lOworICAgIGZyYW1lLT5mX2xpbmVubyA9IGxpbmVubzsKKworICAgIFB5RXJyX1Jlc3RvcmUoZXhjZXB0aW9uLCB2YWx1ZSwgdGIpOworICAgIFB5VHJhY2VCYWNrX0hlcmUoZnJhbWUpOworCitkb25lOgorICAgIFB5X1hERUNSRUYoZ2xvYmFscyk7CisgICAgUHlfWERFQ1JFRihjb2RlKTsKKyAgICBQeV9YREVDUkVGKGZyYW1lKTsKK30KKwogc3RhdGljIFB5T2JqZWN0ICoKIF9QeV9GaW5kU291cmNlRmlsZShQeU9iamVjdCAqZmlsZW5hbWUsIGNoYXIqIG5hbWVidWYsIHNpemVfdCBuYW1lbGVuLCBQeU9iamVjdCAqaW8pCiB7CkBAIC0xNTIsNyArMTkwLDYgQEAKICAgICBjb25zdCBjaGFyKiBmaWxlcGF0aDsKICAgICBQeV9zc2l6ZV90IGxlbjsKICAgICBQeU9iamVjdCogcmVzdWx0OwotICAgIF9QeV9JREVOVElGSUVSKG9wZW4pOwogCiAgICAgZmlsZWJ5dGVzID0gUHlVbmljb2RlX0VuY29kZUZTRGVmYXVsdChmaWxlbmFtZSk7CiAgICAgaWYgKGZpbGVieXRlcyA9PSBOVUxMKSB7CkBAIC0xNjksNyArMjA2LDcgQEAKICAgICAgICAgdGFpbCsrOwogICAgIHRhaWxsZW4gPSBzdHJsZW4odGFpbCk7CiAKLSAgICBzeXNwYXRoID0gUHlTeXNfR2V0T2JqZWN0KCJwYXRoIik7CisgICAgc3lzcGF0aCA9IF9QeVN5c19HZXRPYmplY3RJZCgmUHlJZF9wYXRoKTsKICAgICBpZiAoc3lzcGF0aCA9PSBOVUxMIHx8ICFQeUxpc3RfQ2hlY2soc3lzcGF0aCkpCiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgbnBhdGggPSBQeUxpc3RfU2l6ZShzeXNwYXRoKTsKQEAgLTIzMiw5ICsyNjksNiBAQAogICAgIGNoYXIgYnVmW01BWFBBVEhMRU4rMV07CiAgICAgaW50IGtpbmQ7CiAgICAgdm9pZCAqZGF0YTsKLSAgICBfUHlfSURFTlRJRklFUihjbG9zZSk7Ci0gICAgX1B5X0lERU5USUZJRVIob3Blbik7Ci0gICAgX1B5X0lERU5USUZJRVIoVGV4dElPV3JhcHBlcik7CiAKICAgICAvKiBvcGVuIHRoZSBmaWxlICovCiAgICAgaWYgKGZpbGVuYW1lID09IE5VTEwpCkBAIC0yNDYsMTAgKzI4MCwxMiBAQAogICAgIGJpbmFyeSA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoaW8sICZQeUlkX29wZW4sICJPcyIsIGZpbGVuYW1lLCAicmIiKTsKIAogICAgIGlmIChiaW5hcnkgPT0gTlVMTCkgeworICAgICAgICBQeUVycl9DbGVhcigpOworCiAgICAgICAgIGJpbmFyeSA9IF9QeV9GaW5kU291cmNlRmlsZShmaWxlbmFtZSwgYnVmLCBzaXplb2YoYnVmKSwgaW8pOwogICAgICAgICBpZiAoYmluYXJ5ID09IE5VTEwpIHsKICAgICAgICAgICAgIFB5X0RFQ1JFRihpbyk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjYxLDYgKzI5Nyw4IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBmb3VuZF9lbmNvZGluZyA9IFB5VG9rZW5pemVyX0ZpbmRFbmNvZGluZ0ZpbGVuYW1lKGZkLCBmaWxlbmFtZSk7CisgICAgaWYgKGZvdW5kX2VuY29kaW5nID09IE5VTEwpCisgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgZW5jb2RpbmcgPSAoZm91bmRfZW5jb2RpbmcgIT0gTlVMTCkgPyBmb3VuZF9lbmNvZGluZyA6ICJ1dGYtOCI7CiAgICAgLyogUmVzZXQgcG9zaXRpb24gKi8KICAgICBpZiAobHNlZWsoZmQsIDAsIFNFRUtfU0VUKSA9PSAob2ZmX3QpLTEpIHsKQEAgLTI3MSwxOSArMzA5LDI3IEBACiAgICAgfQogICAgIGZvYiA9IF9QeU9iamVjdF9DYWxsTWV0aG9kSWQoaW8sICZQeUlkX1RleHRJT1dyYXBwZXIsICJPcyIsIGJpbmFyeSwgZW5jb2RpbmcpOwogICAgIFB5X0RFQ1JFRihpbyk7Ci0gICAgUHlfREVDUkVGKGJpbmFyeSk7CiAgICAgUHlNZW1fRlJFRShmb3VuZF9lbmNvZGluZyk7CiAKICAgICBpZiAoZm9iID09IE5VTEwpIHsKICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKKworICAgICAgICByZXMgPSBfUHlPYmplY3RfQ2FsbE1ldGhvZElkKGJpbmFyeSwgJlB5SWRfY2xvc2UsICIiKTsKKyAgICAgICAgUHlfREVDUkVGKGJpbmFyeSk7CisgICAgICAgIGlmIChyZXMpCisgICAgICAgICAgICBQeV9ERUNSRUYocmVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgUHlFcnJfQ2xlYXIoKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIFB5X0RFQ1JFRihiaW5hcnkpOwogCiAgICAgLyogZ2V0IHRoZSBsaW5lIG51bWJlciBsaW5lbm8gKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgbGluZW5vOyBpKyspIHsKICAgICAgICAgUHlfWERFQ1JFRihsaW5lb2JqKTsKICAgICAgICAgbGluZW9iaiA9IFB5RmlsZV9HZXRMaW5lKGZvYiwgLTEpOwogICAgICAgICBpZiAoIWxpbmVvYmopIHsKKyAgICAgICAgICAgIFB5RXJyX0NsZWFyKCk7CiAgICAgICAgICAgICBlcnIgPSAtMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC00NjksMTMgKzUxNSwxMyBAQAogICAgIHdyaXRlKGZkLCBidWZmZXIsIGxlbik7CiB9CiAKLS8qIEZvcm1hdCBhbiBpbnRlZ2VyIGluIHJhbmdlIFswOyAweGZmZmZmZmZmXSB0byBoZXhkZWNpbWFsIG9mICd3aWR0aCcgZGlnaXRzLAorLyogRm9ybWF0IGFuIGludGVnZXIgaW4gcmFuZ2UgWzA7IDB4ZmZmZmZmZmZdIHRvIGhleGFkZWNpbWFsIG9mICd3aWR0aCcgZGlnaXRzLAogICAgYW5kIHdyaXRlIGl0IGludG8gdGhlIGZpbGUgZmQuCiAKICAgIFRoaXMgZnVuY3Rpb24gaXMgc2lnbmFsIHNhZmUuICovCiAKIHN0YXRpYyB2b2lkCi1kdW1wX2hleGFkZWNpbWFsKGludCB3aWR0aCwgdW5zaWduZWQgbG9uZyB2YWx1ZSwgaW50IGZkKQorZHVtcF9oZXhhZGVjaW1hbChpbnQgZmQsIHVuc2lnbmVkIGxvbmcgdmFsdWUsIGludCB3aWR0aCkKIHsKICAgICBpbnQgbGVuOwogICAgIGNoYXIgYnVmZmVyW3NpemVvZih1bnNpZ25lZCBsb25nKSAqIDIgKyAxXTsKQEAgLTU0MiwxNSArNTg4LDE1IEBACiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoY2ggPCAweGZmKSB7CiAgICAgICAgICAgICBQVVRTKGZkLCAiXFx4Iik7Ci0gICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKDIsIGNoLCBmZCk7CisgICAgICAgICAgICBkdW1wX2hleGFkZWNpbWFsKGZkLCBjaCwgMik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSBpZiAoY2ggPCAweGZmZmYpIHsKICAgICAgICAgICAgIFBVVFMoZmQsICJcXHUiKTsKLSAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoNCwgY2gsIGZkKTsKKyAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoZmQsIGNoLCA0KTsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIFBVVFMoZmQsICJcXFUiKTsKLSAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoOCwgY2gsIGZkKTsKKyAgICAgICAgICAgIGR1bXBfaGV4YWRlY2ltYWwoZmQsIGNoLCA4KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAodHJ1bmNhdGVkKQpAQCAtNjAxLDcgKzY0Nyw3IEBACiAgICAgdW5zaWduZWQgaW50IGRlcHRoOwogCiAgICAgaWYgKHdyaXRlX2hlYWRlcikKLSAgICAgICAgUFVUUyhmZCwgIlRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6XG4iKTsKKyAgICAgICAgUFVUUyhmZCwgIlN0YWNrIChtb3N0IHJlY2VudCBjYWxsIGZpcnN0KTpcbiIpOwogCiAgICAgZnJhbWUgPSBfUHlUaHJlYWRTdGF0ZV9HZXRGcmFtZSh0c3RhdGUpOwogICAgIGlmIChmcmFtZSA9PSBOVUxMKQpAQCAtNjM5LDggKzY4NSw4IEBACiAgICAgICAgIFBVVFMoZmQsICJDdXJyZW50IHRocmVhZCAweCIpOwogICAgIGVsc2UKICAgICAgICAgUFVUUyhmZCwgIlRocmVhZCAweCIpOwotICAgIGR1bXBfaGV4YWRlY2ltYWwoc2l6ZW9mKGxvbmcpKjIsICh1bnNpZ25lZCBsb25nKXRzdGF0ZS0+dGhyZWFkX2lkLCBmZCk7Ci0gICAgUFVUUyhmZCwgIjpcbiIpOworICAgIGR1bXBfaGV4YWRlY2ltYWwoZmQsICh1bnNpZ25lZCBsb25nKXRzdGF0ZS0+dGhyZWFkX2lkLCBzaXplb2YobG9uZykqMik7CisgICAgUFVUUyhmZCwgIiAobW9zdCByZWNlbnQgY2FsbCBmaXJzdCk6XG4iKTsKIH0KIAogY29uc3QgY2hhcioKZGlmZiAtLWdpdCBhL1JFQURNRSBiL1JFQURNRQppbmRleCAzY2E0ODJjLi4xYWUxNWE3IDEwMDY0NAotLS0gYS9SRUFETUUKKysrIGIvUkVBRE1FCkBAIC0xLDQgKzEsNCBAQAotVGhpcyBpcyBQeXRob24gdmVyc2lvbiAzLjMuNgorVGhpcyBpcyBQeXRob24gdmVyc2lvbiAzLjQuNQogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCiBDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsCkBAIC01Miw5ICs1Miw5IEBACiAtLS0tLS0tLS0tCiAKIFdlIHRyeSB0byBoYXZlIGEgY29tcHJlaGVuc2l2ZSBvdmVydmlldyBvZiB0aGUgY2hhbmdlcyBpbiB0aGUgIldoYXQncyBOZXcgaW4KLVB5dGhvbiAzLjMiIGRvY3VtZW50LCBmb3VuZCBhdAorUHl0aG9uIDMuNCIgZG9jdW1lbnQsIGZvdW5kIGF0CiAKLSAgICBodHRwOi8vZG9jcy5weXRob24ub3JnLzMuMy93aGF0c25ldy8zLjMuaHRtbAorICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40L3doYXRzbmV3LzMuNC5odG1sCiAKIEZvciBhIG1vcmUgZGV0YWlsZWQgY2hhbmdlIGxvZywgcmVhZCBNaXNjL05FV1MgKHRob3VnaCB0aGlzIGZpbGUsIHRvbywgaXMKIGluY29tcGxldGUsIGFuZCBhbHNvIGRvZXNuJ3QgbGlzdCBhbnl0aGluZyBtZXJnZWQgaW4gZnJvbSB0aGUgMi43IHJlbGVhc2UgdW5kZXIKQEAgLTY3LDkgKzY3LDkgQEAKIERvY3VtZW50YXRpb24KIC0tLS0tLS0tLS0tLS0KIAotRG9jdW1lbnRhdGlvbiBmb3IgUHl0aG9uIDMuMyBpcyBvbmxpbmUsIHVwZGF0ZWQgZGFpbHk6CitEb2N1bWVudGF0aW9uIGZvciBQeXRob24gMy40IGlzIG9ubGluZSwgdXBkYXRlZCBkYWlseToKIAotICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy4zLworICAgIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvMy40LwogCiBJdCBjYW4gYWxzbyBiZSBkb3dubG9hZGVkIGluIG1hbnkgZm9ybWF0cyBmb3IgZmFzdGVyIGFjY2Vzcy4gIFRoZSBkb2N1bWVudGF0aW9uCiBpcyBkb3dubG9hZGFibGUgaW4gSFRNTCwgUERGLCBhbmQgcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXRzOyB0aGUgbGF0dGVyIHZlcnNpb24KQEAgLTk0LDcgKzk0LDcgQEAKIEEgc291cmNlLXRvLXNvdXJjZSB0cmFuc2xhdGlvbiB0b29sLCAiMnRvMyIsIGNhbiB0YWtlIGNhcmUgb2YgdGhlIG11bmRhbmUgdGFzawogb2YgY29udmVydGluZyBsYXJnZSBhbW91bnRzIG9mIHNvdXJjZSBjb2RlLiAgSXQgaXMgbm90IGEgY29tcGxldGUgc29sdXRpb24gYnV0CiBpcyBjb21wbGVtZW50ZWQgYnkgdGhlIGRlcHJlY2F0aW9uIHdhcm5pbmdzIGluIDIuNi4gIFNlZQotaHR0cDovL2RvY3MucHl0aG9uLm9yZy8zLjMvbGlicmFyeS8ydG8zLmh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitodHRwOi8vZG9jcy5weXRob24ub3JnLzMuNC9saWJyYXJ5LzJ0bzMuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogCiBUZXN0aW5nCkBAIC0xMzIsNyArMTMyLDcgQEAKIEluc3RhbGwgdGhhdCB2ZXJzaW9uIHVzaW5nICJtYWtlIGluc3RhbGwiLiAgSW5zdGFsbCBhbGwgb3RoZXIgdmVyc2lvbnMgdXNpbmcKICJtYWtlIGFsdGluc3RhbGwiLgogCi1Gb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gaW5zdGFsbCBQeXRob24gMi42LCAyLjcgYW5kIDMuMyB3aXRoIDIuNyBiZWluZyB0aGUKK0ZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBpbnN0YWxsIFB5dGhvbiAyLjYsIDIuNyBhbmQgMy40IHdpdGggMi43IGJlaW5nIHRoZQogcHJpbWFyeSB2ZXJzaW9uLCB5b3Ugd291bGQgZXhlY3V0ZSAibWFrZSBpbnN0YWxsIiBpbiB5b3VyIDIuNyBidWlsZCBkaXJlY3RvcnkKIGFuZCAibWFrZSBhbHRpbnN0YWxsIiBpbiB0aGUgb3RoZXJzLgogCkBAIC0xNjgsNyArMTY4LDcgQEAKIFJlbGVhc2UgU2NoZWR1bGUKIC0tLS0tLS0tLS0tLS0tLS0KIAotU2VlIFBFUCAzOTggZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wMzk4LworU2VlIFBFUCA0MjkgZm9yIHJlbGVhc2UgZGV0YWlsczogaHR0cDovL3d3dy5weXRob24ub3JnL2Rldi9wZXBzL3BlcC0wNDI5LwogCiAKIENvcHlyaWdodCBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbgpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvUkVBRE1FLnRjbHRrLUFNRDY0IGIvVG9vbHMvYnVpbGRib3QvUkVBRE1FLnRjbHRrLUFNRDY0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGM4OWViLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL2J1aWxkYm90L1JFQURNRS50Y2x0ay1BTUQ2NAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLUNvbW1lbnRzIG9uIGJ1aWxkaW5nIHRjbC90ayBmb3IgQU1ENjQgd2l0aCB0aGUgTVMgU0RLIGNvbXBpbGVyCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1JIGRpZCBoYXZlIHRvIGJ1aWxkIHRjbC90ayBtYW51YWxseS4KLQotRmlyc3QsIEkgaGFkIHRvIGJ1aWxkIHRoZSBubWFrZWhscC5leGUgaGVscGVyIHV0aWxpdHkgbWFudWFsbHkgYnkgZXhlY3V0aW5nCi0gICBjbCBubWFrZWhscC5jIC9saW5rIGJ1ZmZlcm92ZXJmbG93VS5saWIKLWluIGJvdGggdGhlIHRjbDguNC4xMlx3aW4gYW5kIHRrOC40LjEyXHdpbiBkaXJlY3Rvcmllcy4KLQotU2Vjb25kLCB0aGUgQU1ENjQgY29tcGlsZXIgcmVmdXNlcyB0byBjb21waWxlIHRoZSBmaWxlCi10Y2w4LjQuMTJcZ2VuZXJpY1x0Y2xFeGVjdXRlLmMgYmVjYXVzZSBpdCBpbnNpc3RzIG9uIHVzaW5nIGludHJpbnNpY3MKLWZvciB0aGUgJ2NlaWwnIGFuZCAnZmxvb3InIGZ1bmN0aW9uczoKLQotICAuLlxnZW5lcmljXHRjbEV4ZWN1dGUuYygzOTQpIDogZXJyb3IgQzIwOTk6IGluaXRpYWxpemVyIGlzIG5vdCBhIGNvbnN0YW50Ci0gIC4uXGdlbmVyaWNcdGNsRXhlY3V0ZS5jKDM5OCkgOiBlcnJvciBDMjA5OTogaW5pdGlhbGl6ZXIgaXMgbm90IGEgY29uc3RhbnQKLQotSSBkaWQgY29tbWVudCBvdXQgdGhlc2UgbGluZXM7IGFuIGFsdGVybmF0aXZlIHdvdWxkIGhhdmUgYmVlbiB0byB1c2UKLXRoZSAvT2ktIGNvbXBpbGVyIGZsYWcgdG8gZGlzYWJsZSB0aGUgaW50cmluc2ljIGZ1bmN0aW9ucy4KLVRoZSBjb21tYW5kcyB0aGVuIHVzZWQgd2VyZSB0aGVzZToKLQotICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvdGNsOC40LjEyCi0gICBjZCB0Y2w4LjQuMTJcd2luCi0gICBSRU0KLSAgIGVjaG8gcGF0Y2ggdGhlIHRjbDguNC4xMlxnZW5lcmljXHRjbEV4ZWN1dGUuYyBmaWxlCi0gICBwYXVzZSAKLSAgIFJFTQotICAgY2wgbm1ha2VobHAuYyAvbGluayBidWZmZXJvdmVyZmxvd1UubGliCi0gICBubWFrZSAtZiBtYWtlZmlsZS52YyBNQUNISU5FPUFNRDY0Ci0gICBubWFrZSAtZiBtYWtlZmlsZS52YyBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLSAgIGNkIC4uXC4uCi0gICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90azguNC4xMgotICAgY2QgdGs4LjQuMTJcd2luCi0gICBjbCBubWFrZWhscC5jIC9saW5rIGJ1ZmZlcm92ZXJmbG93VS5saWIKLSAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIFRDTERJUj0uLlwuLlx0Y2w4LjQuMTIgTUFDSElORT1BTUQ2NAotICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgVENMRElSPS4uXC4uXHRjbDguNC4xMiBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGluc3RhbGwKLSAgIGNkIC4uXC4uCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9idWlsZC1hbWQ2NC5iYXQgYi9Ub29scy9idWlsZGJvdC9idWlsZC1hbWQ2NC5iYXQKaW5kZXggNDkzZTc0ZC4uZjc3NDA3YiAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvYnVpbGQtYW1kNjQuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2J1aWxkLWFtZDY0LmJhdApAQCAtMSw2ICsxLDUgQEAKLUByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgImNvbXBpbGUiIHN0ZXAuCi1jbWQgL2MgVG9vbHNcYnVpbGRib3RcZXh0ZXJuYWwtYW1kNjQuYmF0Ci1jYWxsICIlVlMxMDBDT01OVE9PTFMlXC4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiIHg4Nl9hbWQ2NAotY21kIC9jIFRvb2xzXGJ1aWxkYm90XGNsZWFuLWFtZDY0LmJhdAotCi1tc2J1aWxkIFBDYnVpbGRccGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1EZWJ1ZyAvcDpQbGF0Zm9ybT14NjQKK0ByZW0gRm9ybWVybHkgdXNlZCBieSB0aGUgYnVpbGRib3QgImNvbXBpbGUiIHN0ZXAuDQorQGVjaG8gVGhpcyBzY3JpcHQgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuDQorQGVjaG8gVG8gZ2V0IHRoZSBzYW1lIGVmZmVjdCBhcyB0aGlzIHNjcmlwdCwgdXNlDQorQGVjaG8gICAgIFBDYnVpbGRcYnVpbGQuYmF0IC1kIC1lIC1rIC1wIHg2NA0KK2NhbGwgIiV+ZHAwYnVpbGQuYmF0IiAtcCB4NjQgJSoNCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9idWlsZC5iYXQgYi9Ub29scy9idWlsZGJvdC9idWlsZC5iYXQKaW5kZXggYmU3OWIxMC4uNWU4NDBjYyAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvYnVpbGQuYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2J1aWxkLmJhdApAQCAtMSw3ICsxLDE3IEBACi1AcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJjb21waWxlIiBzdGVwLgotY21kIC9jIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdAotY2FsbCAiJVZTMTAwQ09NTlRPT0xTJXZzdmFyczMyLmJhdCIKLWNtZCAvYyBUb29sc1xidWlsZGJvdFxjbGVhbi5iYXQKLQotbXNidWlsZCBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249RGVidWcgL3A6UGxhdGZvcm09V2luMzIKLQorQHJlbSBVc2VkIGJ5IHRoZSBidWlsZGJvdCAiY29tcGlsZSIgc3RlcC4NCisNCitAcmVtIENsZWFuIHVwDQorY2FsbCAiJX5kcDBjbGVhbi5iYXQiICUqDQorDQorQHJlbSBJZiB5b3UgbmVlZCB0aGUgYnVpbGRib3RzIHRvIHN0YXJ0IGZyZXNoIChzdWNoIGFzIHdoZW4gdXBncmFkaW5nIHRvDQorQHJlbSBhIG5ldyB2ZXJzaW9uIG9mIGFuIGV4dGVybmFsIGxpYnJhcnksIGVzcGVjaWFsbHkgVGNsL1RrKToNCitAcmVtIDEpIHVuY29tbWVudCB0aGUgZm9sbG93aW5nIGxpbmU6DQorDQorQHJlbSAgICBjYWxsICIlfmRwMC4uXC4uXFBDYnVpbGRcZ2V0X2V4dGVybmFscy5iYXQiIC0tY2xlYW4tb25seQ0KKw0KK0ByZW0gMikgY29tbWl0IGFuZCBwdXNoDQorQHJlbSAzKSB3YWl0IGZvciBhbGwgV2luZG93cyBib3RzIHRvIHN0YXJ0IGEgYnVpbGQgd2l0aCB0aGF0IGNoYW5nZXNldA0KK0ByZW0gNCkgcmUtY29tbWVudCwgY29tbWl0IGFuZCBwdXNoIGFnYWluDQorDQorQHJlbSBEbyB0aGUgYnVpbGQNCitjYWxsICIlfmRwMC4uXC4uXFBDYnVpbGRcYnVpbGQuYmF0IiAtZSAtZCAtayAtdiAlKg0KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2J1aWxkbXNpLmJhdCBiL1Rvb2xzL2J1aWxkYm90L2J1aWxkbXNpLmJhdAppbmRleCBhZTkzZTY3Li40Y2E1NjA0IDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9idWlsZG1zaS5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvYnVpbGRtc2kuYmF0CkBAIC0xLDIxICsxLDIxIEBACi1AcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJidWlsZG1zaSIgc3RlcC4KLQotY21kIC9jIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdAotQHJlbSBidWlsZCByZWxlYXNlIHZlcnNpb25zIG9mIHRoaW5ncwotY2FsbCAiJVZTMTAwQ09NTlRPT0xTJXZzdmFyczMyLmJhdCIKLQotQHJlbSBidWlsZCBQeXRob24KLW1zYnVpbGQgL3A6dXNlZW52PXRydWUgUENidWlsZFxwY2J1aWxkLnNsbiAvcDpDb25maWd1cmF0aW9uPVJlbGVhc2UgL3A6UGxhdGZvcm09V2luMzIKLQotQHJlbSBidWlsZCB0aGUgZG9jdW1lbnRhdGlvbgotYmFzaC5leGUgLWMgJ2NkIERvYzttYWtlIFBZVEhPTj1weXRob24yLjUgdXBkYXRlIGh0bWxoZWxwJwotIiVQcm9ncmFtRmlsZXMlXEhUTUwgSGVscCBXb3Jrc2hvcFxoaGMuZXhlIiBEb2NcYnVpbGRcaHRtbGhlbHBccHl0aG9uMjZhMy5oaHAKLQotQHJlbSBidWlsZCB0aGUgTVNJIGZpbGUKLWNkIFBDCi1ubWFrZSAvZiBpY29ucy5tYWsKLWNkIC4uXFRvb2xzXG1zaQotZGVsICoubXNpCi1ubWFrZSAvZiBtc2lzdXBwb3J0Lm1hawotJUhPU1RfUFlUSE9OJSBtc2kucHkKLQorQHJlbSBVc2VkIGJ5IHRoZSBidWlsZGJvdCAiYnVpbGRtc2kiIHN0ZXAuDQorDQorY21kIC9jIFRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLmJhdA0KK0ByZW0gYnVpbGQgcmVsZWFzZSB2ZXJzaW9ucyBvZiB0aGluZ3MNCitjYWxsICIlVlMxMDBDT01OVE9PTFMldnN2YXJzMzIuYmF0Ig0KKw0KK0ByZW0gYnVpbGQgUHl0aG9uDQorbXNidWlsZCAvcDp1c2VlbnY9dHJ1ZSBQQ2J1aWxkXHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249UmVsZWFzZSAvcDpQbGF0Zm9ybT1XaW4zMg0KKw0KK0ByZW0gYnVpbGQgdGhlIGRvY3VtZW50YXRpb24NCitiYXNoLmV4ZSAtYyAnY2QgRG9jO21ha2UgUFlUSE9OPXB5dGhvbjIuNSB1cGRhdGUgaHRtbGhlbHAnDQorIiVQcm9ncmFtRmlsZXMlXEhUTUwgSGVscCBXb3Jrc2hvcFxoaGMuZXhlIiBEb2NcYnVpbGRcaHRtbGhlbHBccHl0aG9uMjZhMy5oaHANCisNCitAcmVtIGJ1aWxkIHRoZSBNU0kgZmlsZQ0KK2NkIFBDDQorbm1ha2UgL2YgaWNvbnMubWFrDQorY2QgLi5cVG9vbHNcbXNpDQorZGVsICoubXNpDQorbm1ha2UgL2YgbXNpc3VwcG9ydC5tYWsNCislSE9TVF9QWVRIT04lIG1zaS5weQ0KKw0KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2NsZWFuLWFtZDY0LmJhdCBiL1Rvb2xzL2J1aWxkYm90L2NsZWFuLWFtZDY0LmJhdAppbmRleCAyNDY2MGFmLi5iNTNjN2MxIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC9jbGVhbi1hbWQ2NC5iYXQKKysrIGIvVG9vbHMvYnVpbGRib3QvY2xlYW4tYW1kNjQuYmF0CkBAIC0xLDEwICsxLDUgQEAKLUByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgImNsZWFuIiBzdGVwLgotY2FsbCAiJVZTMTAwQ09NTlRPT0xTJVwuLlwuLlxWQ1x2Y3ZhcnNhbGwuYmF0IiB4ODZfYW1kNjQKLUBlY2hvIERlbGV0aW5nIC5weWMvLnB5byBmaWxlcyAuLi4KLWRlbCAvcyBMaWJcKi5weWMgTGliXCoucHlvCi1AZWNobyBEZWxldGluZyB0ZXN0IGxlZnRvdmVycyAuLi4KLXJtZGlyIC9zIC9xIGJ1aWxkCi1jZCBQQ2J1aWxkCi1tc2J1aWxkIC90YXJnZXQ6Y2xlYW4gcGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtVGFyZ2V0PXg2NAotbXNidWlsZCAvdGFyZ2V0OmNsZWFuIHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249RGVidWcgL3A6UGxhdGZvcm1UYXJnZXQ9eDY0Ci1jZCAuLgorQHJlbSBGb3JtZXJseSB1c2VkIGJ5IHRoZSBidWlsZGJvdCAiY2xlYW4iIHN0ZXAuDQorQGVjaG8gVGhpcyBzY3JpcHQgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuDQorQGVjaG8gVG8gZ2V0IHRoZSBzYW1lIGVmZmVjdCBhcyB0aGlzIHNjcmlwdCwgdXNlIGBjbGVhbi5iYXRgIGZyb20gdGhpcw0KK0BlY2hvIGRpcmVjdG9yeSBhbmQgcGFzcyBgLXAgeDY0YCBhcyB0d28gYXJndW1lbnRzLg0KK2NhbGwgIiV+ZHAwY2xlYW4uYmF0IiAtcCB4NjQgJSoNCmRpZmYgLS1naXQgYS9Ub29scy9idWlsZGJvdC9jbGVhbi5iYXQgYi9Ub29scy9idWlsZGJvdC9jbGVhbi5iYXQKaW5kZXggMjE4ZmFjYy4uMGZjNjhmZCAxMDA2NDQKLS0tIGEvVG9vbHMvYnVpbGRib3QvY2xlYW4uYmF0CisrKyBiL1Rvb2xzL2J1aWxkYm90L2NsZWFuLmJhdApAQCAtMSw4ICsxLDE2IEBACi1AcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJjbGVhbiIgc3RlcC4KLWNhbGwgIiVWUzEwMENPTU5UT09MUyV2c3ZhcnMzMi5iYXQiCi1AZWNobyBEZWxldGluZyB0ZXN0IGxlZnRvdmVycyAuLi4KLXJtZGlyIC9zIC9xIGJ1aWxkCi1jZCBQQ2J1aWxkCi1tc2J1aWxkIC90YXJnZXQ6Y2xlYW4gcGNidWlsZC5zbG4gL3A6Q29uZmlndXJhdGlvbj1SZWxlYXNlIC9wOlBsYXRmb3JtVGFyZ2V0PXg4NgotbXNidWlsZCAvdGFyZ2V0OmNsZWFuIHBjYnVpbGQuc2xuIC9wOkNvbmZpZ3VyYXRpb249RGVidWcgL3A6UGxhdGZvcm1UYXJnZXQ9eDg2Ci1jZCAuLgorQGVjaG8gb2ZmDQorcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJjbGVhbiIgc3RlcC4NCisNCitzZXRsb2NhbA0KK3NldCByb290PSV+ZHAwLi5cLi4NCitzZXQgcGNidWlsZD0lcm9vdCVcUENidWlsZA0KKw0KK2VjaG8gRGVsZXRpbmcgYnVpbGQNCitjYWxsICIlcGNidWlsZCVcYnVpbGQuYmF0IiAtdCBDbGVhbiAtayAlKg0KK2NhbGwgIiVwY2J1aWxkJVxidWlsZC5iYXQiIC10IENsZWFuIC1rIC1kICUqDQorDQorZWNobyBEZWxldGluZyAucHljLy5weW8gZmlsZXMgLi4uDQorZGVsIC9zICIlcm9vdCVcTGliXCoucHljIiAiJXJvb3QlXExpYlwqLnB5byINCisNCitlY2hvIERlbGV0aW5nIHRlc3QgbGVmdG92ZXJzIC4uLg0KK3JtZGlyIC9zIC9xICIlcm9vdCVcYnVpbGQiDQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwtYW1kNjQuYmF0CmluZGV4IGQyZmYyNTUuLmJmYWVmMDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWFtZDY0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1hbWQ2NC5iYXQKQEAgLTEsMjEgKzEsMyBAQAotQHJlbSBGZXRjaGVzIChhbmQgYnVpbGRzIGlmIG5lY2Vzc2FyeSkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzCi0KLUByZW0gQXNzdW1lIHdlIHN0YXJ0IGluc2lkZSB0aGUgUHl0aG9uIHNvdXJjZSBkaXJlY3RvcnkKLWNhbGwgIlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLWNvbW1vbi5iYXQiCi1jYWxsICIlVlMxMDBDT01OVE9PTFMlXC4uXC4uXFZDXHZjdmFyc2FsbC5iYXQiIHg4Nl9hbWQ2NAotCi1pZiBub3QgZXhpc3QgdGNsdGs2NFxiaW5cdGNsODVnLmRsbCAoCi0gICAgY2QgdGNsLTguNS4xMS4wXHdpbgotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIERFQlVHPTEgTUFDSElORT1BTUQ2NCBJTlNUQUxMRElSPS4uXC4uXHRjbHRrNjQgY2xlYW4gYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBpbnN0YWxsCi0gICAgY2QgLi5cLi4KLSkKLQotaWYgbm90IGV4aXN0IHRjbHRrNjRcYmluXHRrODVnLmRsbCAoCi0gICAgY2QgdGstOC41LjExLjBcd2luICAgIAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBNQUNISU5FPUFNRDY0IElOU1RBTExESVI9Li5cLi5cdGNsdGs2NCBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGFsbAotICAgIG5tYWtlIC1mIG1ha2VmaWxlLnZjIENPTVBJTEVSRkxBR1M9LURXSU5WRVI9MHgwNTAwIE9QVFM9bm94cCBERUJVRz0xIE1BQ0hJTkU9QU1ENjQgSU5TVEFMTERJUj0uLlwuLlx0Y2x0azY0IFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgaW5zdGFsbAotICAgIGNkIC4uXC4uCi0pCi0KK0BlY2hvIFRoaXMgc2NyaXB0IGlzIG5vIGxvbmdlciB1c2VkIGFuZCBtYXkgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLg0KK0BlY2hvIFBsZWFzZSB1c2UgUENidWlsZFxnZXRfZXh0ZXJuYWxzLmJhdCBpbnN0ZWFkLg0KK0AiJX5kcDAuLlwuLlxQQ2J1aWxkXGdldF9leHRlcm5hbHMuYmF0IiAlKg0KZGlmZiAtLWdpdCBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC1jb21tb24uYmF0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNjI3OGIyLi4wMDAwMDAwCi0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLWNvbW1vbi5iYXQKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi1AcmVtIENvbW1vbiBmaWxlIHNoYXJlZCBiZXR3ZWVuIGV4dGVybmFsLmJhdCBhbmQgZXh0ZXJuYWwtYW1kNjQuYmF0LiAgUmVzcG9uc2libGUgZm9yCi1AcmVtIGZldGNoaW5nIGV4dGVybmFsIGNvbXBvbmVudHMgaW50byB0aGUgcm9vdFwuLiBidWlsZGJvdCBkaXJlY3Rvcmllcy4KLQotY2QgLi4KLUByZW0gWFhYOiBJZiB5b3UgbmVlZCB0byBmb3JjZSB0aGUgYnVpbGRib3RzIHRvIHN0YXJ0IGZyb20gYSBmcmVzaCBlbnZpcm9ubWVudCwgdW5jb21tZW50Ci1AcmVtIHRoZSBmb2xsb3dpbmcsIGNoZWNrIGl0IGluLCB0aGVuIGNoZWNrIGl0IG91dCwgY29tbWVudCBpdCBvdXQsIHRoZW4gY2hlY2sgaXQgYmFjayBpbi4KLUByZW0gaWYgZXhpc3QgYnppcDItMS4wLjYgcmQgL3MvcSBiemlwMi0xLjAuNgotQHJlbSBpZiBleGlzdCB0Y2x0ayByZCAvcy9xIHRjbHRrCi1AcmVtIGlmIGV4aXN0IHRjbHRrNjQgcmQgL3MvcSB0Y2x0azY0Ci1AcmVtIGlmIGV4aXN0IHRjbDguNC4xMiByZCAvcy9xIHRjbDguNC4xMgotQHJlbSBpZiBleGlzdCB0Y2w4LjQuMTYgcmQgL3MvcSB0Y2w4LjQuMTYKLUByZW0gaWYgZXhpc3QgdGNsLTguNC4xOC4xIHJkIC9zL3EgdGNsLTguNC4xOC4xCi1AcmVtIGlmIGV4aXN0IHRrOC40LjEyIHJkIC9zL3EgdGs4LjQuMTIKLUByZW0gaWYgZXhpc3QgdGs4LjQuMTYgcmQgL3MvcSB0azguNC4xNgotQHJlbSBpZiBleGlzdCB0ay04LjQuMTguMSByZCAvcy9xIHRrLTguNC4xOC4xCi1AcmVtIGlmIGV4aXN0IGRiLTQuNC4yMCByZCAvcy9xIGRiLTQuNC4yMAotQHJlbSBpZiBleGlzdCBvcGVuc3NsLTEuMC4xZSByZCAvcy9xIG9wZW5zc2wtMS4wLjFlCi1AcmVtIGlmIGV4aXN0IHNxbGl0ZS0zLjcuMTIgcmQgL3MvcSBzcWxpdGUtMy43LjEyICAgIAotCi1AcmVtIGJ6aXAKLWlmIG5vdCBleGlzdCBiemlwMi0xLjAuNiAoCi0gICByZCAvcy9xIGJ6aXAyLTEuMC41Ci0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL2J6aXAyLTEuMC42Ci0pCi0KLUByZW0gT3BlblNTTAotaWYgbm90IGV4aXN0IG9wZW5zc2wtMS4wLjFlICgKLSAgICByZCAvcy9xIG9wZW5zc2wtMS4wLjFkCi0gICAgc3ZuIGV4cG9ydCBodHRwOi8vc3ZuLnB5dGhvbi5vcmcvcHJvamVjdHMvZXh0ZXJuYWwvb3BlbnNzbC0xLjAuMWUKLSkKLQotQHJlbSB0Y2wvdGsKLWlmIG5vdCBleGlzdCB0Y2wtOC41LjExLjAgKAotICAgcmQgL3MvcSB0Y2x0ayB0Y2x0azY0Ci0gICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90Y2wtOC41LjExLjAKLSkKLWlmIG5vdCBleGlzdCB0ay04LjUuMTEuMCBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC90ay04LjUuMTEuMAotCi1AcmVtIHNxbGl0ZTMKLWlmIG5vdCBleGlzdCBzcWxpdGUtMy43LjEyICgKLSAgcmQgL3MvcSBzcWxpdGUtc291cmNlLTMuNy40Ci0gIHN2biBleHBvcnQgaHR0cDovL3N2bi5weXRob24ub3JnL3Byb2plY3RzL2V4dGVybmFsL3NxbGl0ZS0zLjcuMTIKLSkKLQotQHJlbSBsem1hCi1pZiBub3QgZXhpc3QgeHotNS4wLjMgKAotICBzdm4gZXhwb3J0IGh0dHA6Ly9zdm4ucHl0aG9uLm9yZy9wcm9qZWN0cy9leHRlcm5hbC94ei01LjAuMwotKQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0IGIvVG9vbHMvYnVpbGRib3QvZXh0ZXJuYWwuYmF0CmluZGV4IGVkNWMxMGUuLmJmYWVmMDUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2J1aWxkYm90L2V4dGVybmFsLmJhdAorKysgYi9Ub29scy9idWlsZGJvdC9leHRlcm5hbC5iYXQKQEAgLTEsMjEgKzEsMyBAQAotQHJlbSBGZXRjaGVzIChhbmQgYnVpbGRzIGlmIG5lY2Vzc2FyeSkgZXh0ZXJuYWwgZGVwZW5kZW5jaWVzCi0KLUByZW0gQXNzdW1lIHdlIHN0YXJ0IGluc2lkZSB0aGUgUHl0aG9uIHNvdXJjZSBkaXJlY3RvcnkKLWNhbGwgIlRvb2xzXGJ1aWxkYm90XGV4dGVybmFsLWNvbW1vbi5iYXQiCi1jYWxsICIlVlMxMDBDT01OVE9PTFMlXHZzdmFyczMyLmJhdCIKLQotaWYgbm90IGV4aXN0IHRjbHRrXGJpblx0Y2w4NWcuZGxsICgKLSAgICBAcmVtIGFsbCBhbmQgaW5zdGFsbCBuZWVkIHRvIGJlIHNlcGFyYXRlIGludm9jYXRpb25zLCBvdGhlcndpc2Ugbm1ha2VobHAgaXMgbm90IGZvdW5kIG9uIGluc3RhbGwKLSAgICBjZCB0Y2wtOC41LjExLjBcd2luCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIGNsZWFuIGFsbCAKLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBERUJVRz0xIElOU1RBTExESVI9Li5cLi5cdGNsdGsgaW5zdGFsbAotICAgIGNkIC4uXC4uCi0pCi0KLWlmIG5vdCBleGlzdCB0Y2x0a1xiaW5cdGs4NWcuZGxsICgKLSAgICBjZCB0ay04LjUuMTEuMFx3aW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgY2xlYW4KLSAgICBubWFrZSAtZiBtYWtlZmlsZS52YyBDT01QSUxFUkZMQUdTPS1EV0lOVkVSPTB4MDUwMCBPUFRTPW5veHAgREVCVUc9MSBJTlNUQUxMRElSPS4uXC4uXHRjbHRrIFRDTERJUj0uLlwuLlx0Y2wtOC41LjExLjAgYWxsCi0gICAgbm1ha2UgLWYgbWFrZWZpbGUudmMgQ09NUElMRVJGTEFHUz0tRFdJTlZFUj0weDA1MDAgT1BUUz1ub3hwIERFQlVHPTEgSU5TVEFMTERJUj0uLlwuLlx0Y2x0ayBUQ0xESVI9Li5cLi5cdGNsLTguNS4xMS4wIGluc3RhbGwKLSAgICBjZCAuLlwuLgotKQorQGVjaG8gVGhpcyBzY3JpcHQgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuDQorQGVjaG8gUGxlYXNlIHVzZSBQQ2J1aWxkXGdldF9leHRlcm5hbHMuYmF0IGluc3RlYWQuDQorQCIlfmRwMC4uXC4uXFBDYnVpbGRcZ2V0X2V4dGVybmFscy5iYXQiICUqDQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvdGVzdC1hbWQ2NC5iYXQgYi9Ub29scy9idWlsZGJvdC90ZXN0LWFtZDY0LmJhdAppbmRleCAxYmYxMjRjLi5lNDgzMjljIDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC90ZXN0LWFtZDY0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC90ZXN0LWFtZDY0LmJhdApAQCAtMSwzICsxLDYgQEAKLUByZW0gVXNlZCBieSB0aGUgYnVpbGRib3QgInRlc3QiIHN0ZXAuCi1jZCBQQ2J1aWxkCi1jYWxsIHJ0LmJhdCAtZCAtcSAteDY0IC11YWxsIC1yd1cgLW4gJTEgJTIgJTMgJTQgJTUgJTYgJTcgJTggJTkKK0ByZW0gRm9ybWVybHkgdXNlZCBieSB0aGUgYnVpbGRib3QgInRlc3QiIHN0ZXAuDQorQGVjaG8gVGhpcyBzY3JpcHQgaXMgbm8gbG9uZ2VyIHVzZWQgYW5kIG1heSBiZSByZW1vdmVkIGluIHRoZSBmdXR1cmUuDQorQGVjaG8gVG8gZ2V0IHRoZSBzYW1lIGVmZmVjdCBhcyB0aGlzIHNjcmlwdCwgdXNlDQorQGVjaG8gICAgIFBDYnVpbGRccnQuYmF0IC1xIC1kIC14NjQgLXVhbGwgLXJ3Vw0KK0BlY2hvIG9yIHVzZSBgdGVzdC5iYXRgIGluIHRoaXMgZGlyZWN0b3J5IGFuZCBwYXNzIGAteDY0YCBhcyBhbiBhcmd1bWVudC4NCitjYWxsICIlfmRwMHRlc3QuYmF0IiAteDY0ICUqDQpkaWZmIC0tZ2l0IGEvVG9vbHMvYnVpbGRib3QvdGVzdC5iYXQgYi9Ub29scy9idWlsZGJvdC90ZXN0LmJhdAppbmRleCA0ZjRjNmFhLi4xNTRkZmE1IDEwMDY0NAotLS0gYS9Ub29scy9idWlsZGJvdC90ZXN0LmJhdAorKysgYi9Ub29scy9idWlsZGJvdC90ZXN0LmJhdApAQCAtMSwzICsxLDE1IEBACi1AcmVtIFVzZWQgYnkgdGhlIGJ1aWxkYm90ICJ0ZXN0IiBzdGVwLgotY2QgUENidWlsZAotY2FsbCBydC5iYXQgLWQgLXEgLXVhbGwgLXJ3VyAtbiAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQorQHJlbSBVc2VkIGJ5IHRoZSBidWlsZGJvdCAidGVzdCIgc3RlcC4NCitAc2V0bG9jYWwNCisNCitAc2V0IGhlcmU9JX5kcDANCitAc2V0IHJ0X29wdHM9LXEgLWQNCisNCis6Q2hlY2tPcHRzDQorQGlmICclMSc9PScteDY0JyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitAaWYgJyUxJz09Jy1kJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitAaWYgJyUxJz09Jy1PJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitAaWYgJyUxJz09Jy1xJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHMlICUxKSAmIHNoaWZ0ICYgZ290byBDaGVja09wdHMNCitAaWYgJyUxJz09JytkJyAoc2V0IHJ0X29wdHM9JXJ0X29wdHM6LWQ9JSkgJiBzaGlmdCAmIGdvdG8gQ2hlY2tPcHRzDQorQGlmICclMSc9PScrcScgKHNldCBydF9vcHRzPSVydF9vcHRzOi1xPSUpICYgc2hpZnQgJiBnb3RvIENoZWNrT3B0cw0KKw0KK2NhbGwgIiVoZXJlJS4uXC4uXFBDYnVpbGRccnQuYmF0IiAlcnRfb3B0cyUgLXVhbGwgLXJ3VyAtbiAtLXRpbWVvdXQ9MzYwMCAlMSAlMiAlMyAlNCAlNSAlNiAlNyAlOCAlOQ0KZGlmZiAtLWdpdCBhL1Rvb2xzL2NsaW5pYy9jbGluaWMucHkgYi9Ub29scy9jbGluaWMvY2xpbmljLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmM2YWMzYjkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9jbGluaWMvY2xpbmljLnB5CkBAIC0wLDAgKzEsNDE5NiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIworIyBBcmd1bWVudCBDbGluaWMKKyMgQ29weXJpZ2h0IDIwMTItMjAxMyBieSBMYXJyeSBIYXN0aW5ncy4KKyMgTGljZW5zZWQgdG8gdGhlIFBTRiB1bmRlciBhIGNvbnRyaWJ1dG9yIGFncmVlbWVudC4KKyMKKworaW1wb3J0IGFiYworaW1wb3J0IGFzdAoraW1wb3J0IGF0ZXhpdAoraW1wb3J0IGNvbGxlY3Rpb25zCitpbXBvcnQgY29udGV4dGxpYgoraW1wb3J0IGNvcHkKK2ltcG9ydCBjcHAKK2ltcG9ydCBmdW5jdG9vbHMKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgaW5zcGVjdAoraW1wb3J0IGlvCitpbXBvcnQgaXRlcnRvb2xzCitpbXBvcnQgb3MKK2ltcG9ydCBwcHJpbnQKK2ltcG9ydCByZQoraW1wb3J0IHNobGV4CitpbXBvcnQgc3RyaW5nCitpbXBvcnQgc3lzCitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCB0ZXh0d3JhcAoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IHV1aWQKKworIyBUT0RPOgorIworIyBzb29uOgorIworIyAqIGFsbG93IG1peGluZyBhbnkgdHdvIG9mIHtwb3NpdGlvbmFsLW9ubHksIHBvc2l0aW9uYWwtb3Ita2V5d29yZCwKKyMgICBrZXl3b3JkLW9ubHl9CisjICAgICAgICogZGljdCBjb25zdHJ1Y3RvciB1c2VzIHBvc2l0aW9uYWwtb25seSBhbmQga2V5d29yZC1vbmx5CisjICAgICAgICogbWF4IGFuZCBtaW4gdXNlIHBvc2l0aW9uYWwgb25seSB3aXRoIGFuIG9wdGlvbmFsIGdyb3VwCisjICAgICAgICAgYW5kIGtleXdvcmQtb25seQorIworCit2ZXJzaW9uID0gJzEnCisKK19lbXB0eSA9IGluc3BlY3QuX2VtcHR5Citfdm9pZCA9IGluc3BlY3QuX3ZvaWQKKworTm9uZVR5cGUgPSB0eXBlKE5vbmUpCisKK2NsYXNzIFVuc3BlY2lmaWVkOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8VW5zcGVjaWZpZWQ+JworCit1bnNwZWNpZmllZCA9IFVuc3BlY2lmaWVkKCkKKworCitjbGFzcyBOdWxsOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8TnVsbD4nCisKK05VTEwgPSBOdWxsKCkKKworCitjbGFzcyBVbmtub3duOgorICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICc8VW5rbm93bj4nCisKK3Vua25vd24gPSBVbmtub3duKCkKKworCitkZWYgX3RleHRfYWNjdW11bGF0b3IoKToKKyAgICB0ZXh0ID0gW10KKyAgICBkZWYgb3V0cHV0KCk6CisgICAgICAgIHMgPSAnJy5qb2luKHRleHQpCisgICAgICAgIHRleHQuY2xlYXIoKQorICAgICAgICByZXR1cm4gcworICAgIHJldHVybiB0ZXh0LCB0ZXh0LmFwcGVuZCwgb3V0cHV0CisKKworZGVmIHRleHRfYWNjdW11bGF0b3IoKToKKyAgICAiIiIKKyAgICBDcmVhdGVzIGEgc2ltcGxlIHRleHQgYWNjdW11bGF0b3IgLyBqb2luZXIuCisKKyAgICBSZXR1cm5zIGEgcGFpciBvZiBjYWxsYWJsZXM6CisgICAgICAgIGFwcGVuZCwgb3V0cHV0CisgICAgImFwcGVuZCIgYXBwZW5kcyBhIHN0cmluZyB0byB0aGUgYWNjdW11bGF0b3IuCisgICAgIm91dHB1dCIgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGFjY3VtdWxhdG9yCisgICAgICAgam9pbmVkIHRvZ2V0aGVyICgnJy5qb2luKGFjY3VtdWxhdG9yKSkgYW5kCisgICAgICAgZW1wdGllcyB0aGUgYWNjdW11bGF0b3IuCisgICAgIiIiCisgICAgdGV4dCwgYXBwZW5kLCBvdXRwdXQgPSBfdGV4dF9hY2N1bXVsYXRvcigpCisgICAgcmV0dXJuIGFwcGVuZCwgb3V0cHV0CisKKworZGVmIHdhcm5fb3JfZmFpbChmYWlsPUZhbHNlLCAqYXJncywgZmlsZW5hbWU9Tm9uZSwgbGluZV9udW1iZXI9Tm9uZSk6CisgICAgam9pbmVkID0gIiAiLmpvaW4oW3N0cihhKSBmb3IgYSBpbiBhcmdzXSkKKyAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgIGlmIGZhaWw6CisgICAgICAgIGFkZCgiRXJyb3IiKQorICAgIGVsc2U6CisgICAgICAgIGFkZCgiV2FybmluZyIpCisgICAgaWYgY2xpbmljOgorICAgICAgICBpZiBmaWxlbmFtZSBpcyBOb25lOgorICAgICAgICAgICAgZmlsZW5hbWUgPSBjbGluaWMuZmlsZW5hbWUKKyAgICAgICAgaWYgZ2V0YXR0cihjbGluaWMsICdibG9ja19wYXJzZXInLCBOb25lKSBhbmQgKGxpbmVfbnVtYmVyIGlzIE5vbmUpOgorICAgICAgICAgICAgbGluZV9udW1iZXIgPSBjbGluaWMuYmxvY2tfcGFyc2VyLmxpbmVfbnVtYmVyCisgICAgaWYgZmlsZW5hbWUgaXMgbm90IE5vbmU6CisgICAgICAgIGFkZCgnIGluIGZpbGUgIicgKyBmaWxlbmFtZSArICciJykKKyAgICBpZiBsaW5lX251bWJlciBpcyBub3QgTm9uZToKKyAgICAgICAgYWRkKCIgb24gbGluZSAiICsgc3RyKGxpbmVfbnVtYmVyKSkKKyAgICBhZGQoJzpcbicpCisgICAgYWRkKGpvaW5lZCkKKyAgICBwcmludChvdXRwdXQoKSkKKyAgICBpZiBmYWlsOgorICAgICAgICBzeXMuZXhpdCgtMSkKKworCitkZWYgd2FybigqYXJncywgZmlsZW5hbWU9Tm9uZSwgbGluZV9udW1iZXI9Tm9uZSk6CisgICAgcmV0dXJuIHdhcm5fb3JfZmFpbChGYWxzZSwgKmFyZ3MsIGZpbGVuYW1lPWZpbGVuYW1lLCBsaW5lX251bWJlcj1saW5lX251bWJlcikKKworZGVmIGZhaWwoKmFyZ3MsIGZpbGVuYW1lPU5vbmUsIGxpbmVfbnVtYmVyPU5vbmUpOgorICAgIHJldHVybiB3YXJuX29yX2ZhaWwoVHJ1ZSwgKmFyZ3MsIGZpbGVuYW1lPWZpbGVuYW1lLCBsaW5lX251bWJlcj1saW5lX251bWJlcikKKworCitkZWYgcXVvdGVkX2Zvcl9jX3N0cmluZyhzKToKKyAgICBmb3Igb2xkLCBuZXcgaW4gKAorICAgICAgICAoJ1xcJywgJ1xcXFwnKSwgIyBtdXN0IGJlIGZpcnN0IQorICAgICAgICAoJyInLCAnXFwiJyksCisgICAgICAgICgiJyIsICJcXCciKSwKKyAgICAgICAgKToKKyAgICAgICAgcyA9IHMucmVwbGFjZShvbGQsIG5ldykKKyAgICByZXR1cm4gcworCitkZWYgY19yZXByKHMpOgorICAgIHJldHVybiAnIicgKyBzICsgJyInCisKKworaXNfbGVnYWxfY19pZGVudGlmaWVyID0gcmUuY29tcGlsZSgnXltBLVphLXpfXVtBLVphLXowLTlfXSokJykubWF0Y2gKKworZGVmIGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIocyk6CisgICAgcmV0dXJuIGFsbChpc19sZWdhbF9jX2lkZW50aWZpZXIoZmllbGQpIGZvciBmaWVsZCBpbiBzLnNwbGl0KCcuJykpCisKKyMgaWRlbnRpZmllcnMgdGhhdCBhcmUgb2theSBpbiBQeXRob24gYnV0IGFyZW4ndCBhIGdvb2QgaWRlYSBpbiBDLgorIyBzbyBpZiB0aGV5J3JlIHVzZWQgQXJndW1lbnQgQ2xpbmljIHdpbGwgYWRkICJfdmFsdWUiIHRvIHRoZSBlbmQKKyMgb2YgdGhlIG5hbWUgaW4gQy4KK2Nfa2V5d29yZHMgPSBzZXQoIiIiCithc20gYXV0byBicmVhayBjYXNlIGNoYXIgY29uc3QgY29udGludWUgZGVmYXVsdCBkbyBkb3VibGUKK2Vsc2UgZW51bSBleHRlcm4gZmxvYXQgZm9yIGdvdG8gaWYgaW5saW5lIGludCBsb25nCityZWdpc3RlciByZXR1cm4gc2hvcnQgc2lnbmVkIHNpemVvZiBzdGF0aWMgc3RydWN0IHN3aXRjaAordHlwZWRlZiB0eXBlb2YgdW5pb24gdW5zaWduZWQgdm9pZCB2b2xhdGlsZSB3aGlsZQorIiIiLnN0cmlwKCkuc3BsaXQoKSkKKworZGVmIGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIocyk6CisgICAgIyBmb3Igbm93LCBqdXN0IGNvbXBsYWluIGlmIHdoYXQgd2UncmUgZ2l2ZW4gaXNuJ3QgbGVnYWwKKyAgICBpZiBub3QgaXNfbGVnYWxfY19pZGVudGlmaWVyKHMpOgorICAgICAgICBmYWlsKCJJbGxlZ2FsIEMgaWRlbnRpZmllcjoge30iLmZvcm1hdChzKSkKKyAgICAjIGJ1dCBpZiB3ZSBwaWNrZWQgYSBDIGtleXdvcmQsIHBpY2sgc29tZXRoaW5nIGVsc2UKKyAgICBpZiBzIGluIGNfa2V5d29yZHM6CisgICAgICAgIHJldHVybiBzICsgIl92YWx1ZSIKKyAgICByZXR1cm4gcworCitkZWYgcnN0cmlwX2xpbmVzKHMpOgorICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgIGZvciBsaW5lIGluIHMuc3BsaXQoJ1xuJyk6CisgICAgICAgIGFkZChsaW5lLnJzdHJpcCgpKQorICAgICAgICBhZGQoJ1xuJykKKyAgICB0ZXh0LnBvcCgpCisgICAgcmV0dXJuIG91dHB1dCgpCisKK2RlZiBsaW5lYXJfZm9ybWF0KHMsICoqa3dhcmdzKToKKyAgICAiIiIKKyAgICBQZXJmb3JtIHN0ci5mb3JtYXQtbGlrZSBzdWJzdGl0dXRpb24sIGV4Y2VwdDoKKyAgICAgICogVGhlIHN0cmluZ3Mgc3Vic3RpdHV0ZWQgbXVzdCBiZSBvbiBsaW5lcyBieQorICAgICAgICB0aGVtc2VsdmVzLiAgKFRoaXMgbGluZSBpcyB0aGUgInNvdXJjZSBsaW5lIi4pCisgICAgICAqIElmIHRoZSBzdWJzdGl0dXRpb24gdGV4dCBpcyBlbXB0eSwgdGhlIHNvdXJjZSBsaW5lCisgICAgICAgIGlzIHJlbW92ZWQgaW4gdGhlIG91dHB1dC4KKyAgICAgICogSWYgdGhlIGZpZWxkIGlzIG5vdCByZWNvZ25pemVkLCB0aGUgb3JpZ2luYWwgbGluZQorICAgICAgICBpcyBwYXNzZWQgdW5tb2RpZmllZCB0aHJvdWdoIHRvIHRoZSBvdXRwdXQuCisgICAgICAqIElmIHRoZSBzdWJzdGl0dXRpb24gdGV4dCBpcyBub3QgZW1wdHk6CisgICAgICAgICAgKiBFYWNoIGxpbmUgb2YgdGhlIHN1YnN0aXR1dGVkIHRleHQgaXMgaW5kZW50ZWQKKyAgICAgICAgICAgIGJ5IHRoZSBpbmRlbnQgb2YgdGhlIHNvdXJjZSBsaW5lLgorICAgICAgICAgICogQSBuZXdsaW5lIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGVuZC4KKyAgICAiIiIKKworICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgZm9yIGxpbmUgaW4gcy5zcGxpdCgnXG4nKToKKyAgICAgICAgaW5kZW50LCBjdXJseSwgdHJhaWxpbmcgPSBsaW5lLnBhcnRpdGlvbigneycpCisgICAgICAgIGlmIG5vdCBjdXJseToKKyAgICAgICAgICAgIGFkZChsaW5lKQorICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIG5hbWUsIGN1cmwsIHRyYWlsaW5nID0gdHJhaWxpbmcucGFydGl0aW9uKCd9JykKKyAgICAgICAgaWYgbm90IGN1cmx5IG9yIG5hbWUgbm90IGluIGt3YXJnczoKKyAgICAgICAgICAgIGFkZChsaW5lKQorICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIGlmIHRyYWlsaW5nOgorICAgICAgICAgICAgZmFpbCgiVGV4dCBmb3VuZCBhZnRlciB7IiArIG5hbWUgKyAifSBibG9jayBtYXJrZXIhICBJdCBtdXN0IGJlIG9uIGEgbGluZSBieSBpdHNlbGYuIikKKyAgICAgICAgaWYgaW5kZW50LnN0cmlwKCk6CisgICAgICAgICAgICBmYWlsKCJOb24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIGZvdW5kIGJlZm9yZSB7IiArIG5hbWUgKyAifSBibG9jayBtYXJrZXIhICBJdCBtdXN0IGJlIG9uIGEgbGluZSBieSBpdHNlbGYuIikKKworICAgICAgICB2YWx1ZSA9IGt3YXJnc1tuYW1lXQorICAgICAgICBpZiBub3QgdmFsdWU6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgIHZhbHVlID0gdGV4dHdyYXAuaW5kZW50KHJzdHJpcF9saW5lcyh2YWx1ZSksIGluZGVudCkKKyAgICAgICAgYWRkKHZhbHVlKQorICAgICAgICBhZGQoJ1xuJykKKworICAgIHJldHVybiBvdXRwdXQoKVs6LTFdCisKK2RlZiBpbmRlbnRfYWxsX2xpbmVzKHMsIHByZWZpeCk6CisgICAgIiIiCisgICAgUmV0dXJucyAncycsIHdpdGggJ3ByZWZpeCcgcHJlcGVuZGVkIHRvIGFsbCBsaW5lcy4KKworICAgIElmIHRoZSBsYXN0IGxpbmUgaXMgZW1wdHksIHByZWZpeCBpcyBub3QgcHJlcGVuZGVkCisgICAgdG8gaXQuICAoSWYgcyBpcyBibGFuaywgcmV0dXJucyBzIHVuY2hhbmdlZC4pCisKKyAgICAodGV4dHdyYXAuaW5kZW50IG9ubHkgYWRkcyB0byBub24tYmxhbmsgbGluZXMuKQorICAgICIiIgorICAgIHNwbGl0ID0gcy5zcGxpdCgnXG4nKQorICAgIGxhc3QgPSBzcGxpdC5wb3AoKQorICAgIGZpbmFsID0gW10KKyAgICBmb3IgbGluZSBpbiBzcGxpdDoKKyAgICAgICAgZmluYWwuYXBwZW5kKHByZWZpeCkKKyAgICAgICAgZmluYWwuYXBwZW5kKGxpbmUpCisgICAgICAgIGZpbmFsLmFwcGVuZCgnXG4nKQorICAgIGlmIGxhc3Q6CisgICAgICAgIGZpbmFsLmFwcGVuZChwcmVmaXgpCisgICAgICAgIGZpbmFsLmFwcGVuZChsYXN0KQorICAgIHJldHVybiAnJy5qb2luKGZpbmFsKQorCitkZWYgc3VmZml4X2FsbF9saW5lcyhzLCBzdWZmaXgpOgorICAgICIiIgorICAgIFJldHVybnMgJ3MnLCB3aXRoICdzdWZmaXgnIGFwcGVuZGVkIHRvIGFsbCBsaW5lcy4KKworICAgIElmIHRoZSBsYXN0IGxpbmUgaXMgZW1wdHksIHN1ZmZpeCBpcyBub3QgYXBwZW5kZWQKKyAgICB0byBpdC4gIChJZiBzIGlzIGJsYW5rLCByZXR1cm5zIHMgdW5jaGFuZ2VkLikKKyAgICAiIiIKKyAgICBzcGxpdCA9IHMuc3BsaXQoJ1xuJykKKyAgICBsYXN0ID0gc3BsaXQucG9wKCkKKyAgICBmaW5hbCA9IFtdCisgICAgZm9yIGxpbmUgaW4gc3BsaXQ6CisgICAgICAgIGZpbmFsLmFwcGVuZChsaW5lKQorICAgICAgICBmaW5hbC5hcHBlbmQoc3VmZml4KQorICAgICAgICBmaW5hbC5hcHBlbmQoJ1xuJykKKyAgICBpZiBsYXN0OgorICAgICAgICBmaW5hbC5hcHBlbmQobGFzdCkKKyAgICAgICAgZmluYWwuYXBwZW5kKHN1ZmZpeCkKKyAgICByZXR1cm4gJycuam9pbihmaW5hbCkKKworCitkZWYgdmVyc2lvbl9zcGxpdHRlcihzKToKKyAgICAiIiJTcGxpdHMgYSB2ZXJzaW9uIHN0cmluZyBpbnRvIGEgdHVwbGUgb2YgaW50ZWdlcnMuCisKKyAgICBUaGUgZm9sbG93aW5nIEFTQ0lJIGNoYXJhY3RlcnMgYXJlIGFsbG93ZWQsIGFuZCBlbXBsb3kKKyAgICB0aGUgZm9sbG93aW5nIGNvbnZlcnNpb25zOgorICAgICAgICBhIC0+IC0zCisgICAgICAgIGIgLT4gLTIKKyAgICAgICAgYyAtPiAtMQorICAgIChUaGlzIHBlcm1pdHMgUHl0aG9uLXN0eWxlIHZlcnNpb24gc3RyaW5ncyBzdWNoIGFzICIxLjRiMyIuKQorICAgICIiIgorICAgIHZlcnNpb24gPSBbXQorICAgIGFjY3VtdWxhdG9yID0gW10KKyAgICBkZWYgZmx1c2goKToKKyAgICAgICAgaWYgbm90IGFjY3VtdWxhdG9yOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVW5zdXBwb3J0ZWQgdmVyc2lvbiBzdHJpbmc6ICcgKyByZXByKHMpKQorICAgICAgICB2ZXJzaW9uLmFwcGVuZChpbnQoJycuam9pbihhY2N1bXVsYXRvcikpKQorICAgICAgICBhY2N1bXVsYXRvci5jbGVhcigpCisKKyAgICBmb3IgYyBpbiBzOgorICAgICAgICBpZiBjLmlzZGlnaXQoKToKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZChjKQorICAgICAgICBlbGlmIGMgPT0gJy4nOgorICAgICAgICAgICAgZmx1c2goKQorICAgICAgICBlbGlmIGMgaW4gJ2FiYyc6CisgICAgICAgICAgICBmbHVzaCgpCisgICAgICAgICAgICB2ZXJzaW9uLmFwcGVuZCgnYWJjJy5pbmRleChjKSAtIDMpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdJbGxlZ2FsIGNoYXJhY3RlciAnICsgcmVwcihjKSArICcgaW4gdmVyc2lvbiBzdHJpbmcgJyArIHJlcHIocykpCisgICAgZmx1c2goKQorICAgIHJldHVybiB0dXBsZSh2ZXJzaW9uKQorCitkZWYgdmVyc2lvbl9jb21wYXJpdG9yKHZlcnNpb24xLCB2ZXJzaW9uMik6CisgICAgaXRlcmF0b3IgPSBpdGVydG9vbHMuemlwX2xvbmdlc3QodmVyc2lvbl9zcGxpdHRlcih2ZXJzaW9uMSksIHZlcnNpb25fc3BsaXR0ZXIodmVyc2lvbjIpLCBmaWxsdmFsdWU9MCkKKyAgICBmb3IgaSwgKGEsIGIpIGluIGVudW1lcmF0ZShpdGVyYXRvcik6CisgICAgICAgIGlmIGEgPCBiOgorICAgICAgICAgICAgcmV0dXJuIC0xCisgICAgICAgIGlmIGEgPiBiOgorICAgICAgICAgICAgcmV0dXJuIDEKKyAgICByZXR1cm4gMAorCisKK2NsYXNzIENSZW5kZXJEYXRhOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgdG8gZGVjbGFyZSB2YXJpYWJsZXMuCisgICAgICAgICMgU2hvdWxkIGJlIGZ1bGwgbGluZXMgd2l0aCBcbiBlb2wgY2hhcmFjdGVycy4KKyAgICAgICAgc2VsZi5kZWNsYXJhdGlvbnMgPSBbXQorCisgICAgICAgICMgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBpbml0aWFsaXplIHRoZSB2YXJpYWJsZXMgYmVmb3JlIHRoZSBwYXJzZSBjYWxsLgorICAgICAgICAjIFNob3VsZCBiZSBmdWxsIGxpbmVzIHdpdGggXG4gZW9sIGNoYXJhY3RlcnMuCisgICAgICAgIHNlbGYuaW5pdGlhbGl6ZXJzID0gW10KKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgbmVlZGVkIHRvIGR5bmFtaWNhbGx5IG1vZGlmeSB0aGUgdmFsdWVzCisgICAgICAgICMgcGFyc2VkIGJ5IHRoZSBwYXJzZSBjYWxsLCBiZWZvcmUgY2FsbGluZyB0aGUgaW1wbC4KKyAgICAgICAgc2VsZi5tb2RpZmljYXRpb25zID0gW10KKworICAgICAgICAjIFRoZSBlbnRyaWVzIGZvciB0aGUgImtleXdvcmRzIiBhcnJheSBmb3IgUHlBcmdfUGFyc2VUdXBsZS4KKyAgICAgICAgIyBTaG91bGQgYmUgaW5kaXZpZHVhbCBzdHJpbmdzIHJlcHJlc2VudGluZyB0aGUgbmFtZXMuCisgICAgICAgIHNlbGYua2V5d29yZHMgPSBbXQorCisgICAgICAgICMgVGhlICJmb3JtYXQgdW5pdHMiIGZvciBQeUFyZ19QYXJzZVR1cGxlLgorICAgICAgICAjIFNob3VsZCBiZSBpbmRpdmlkdWFsIHN0cmluZ3MgdGhhdCB3aWxsIGdldAorICAgICAgICBzZWxmLmZvcm1hdF91bml0cyA9IFtdCisKKyAgICAgICAgIyBUaGUgdmFyYXJncyBhcmd1bWVudHMgZm9yIFB5QXJnX1BhcnNlVHVwbGUuCisgICAgICAgIHNlbGYucGFyc2VfYXJndW1lbnRzID0gW10KKworICAgICAgICAjIFRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zIGZvciB0aGUgaW1wbCBmdW5jdGlvbi4KKyAgICAgICAgc2VsZi5pbXBsX3BhcmFtZXRlcnMgPSBbXQorCisgICAgICAgICMgVGhlIGFyZ3VtZW50cyB0byB0aGUgaW1wbCBmdW5jdGlvbiBhdCB0aGUgdGltZSBpdCdzIGNhbGxlZC4KKyAgICAgICAgc2VsZi5pbXBsX2FyZ3VtZW50cyA9IFtdCisKKyAgICAgICAgIyBGb3IgcmV0dXJuIGNvbnZlcnRlcnM6IHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZSB0aGF0CisgICAgICAgICMgc2hvdWxkIHJlY2VpdmUgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoZSBpbXBsLgorICAgICAgICBzZWxmLnJldHVybl92YWx1ZSA9ICJyZXR1cm5fdmFsdWUiCisKKyAgICAgICAgIyBGb3IgcmV0dXJuIGNvbnZlcnRlcnM6IHRoZSBjb2RlIHRvIGNvbnZlcnQgdGhlIHJldHVybgorICAgICAgICAjIHZhbHVlIGZyb20gdGhlIHBhcnNlIGZ1bmN0aW9uLiAgVGhpcyBpcyBhbHNvIHdoZXJlCisgICAgICAgICMgeW91IHNob3VsZCBjaGVjayB0aGUgX3JldHVybl92YWx1ZSBmb3IgZXJyb3JzLCBhbmQKKyAgICAgICAgIyAiZ290byBleGl0IiBpZiB0aGVyZSBhcmUgYW55LgorICAgICAgICBzZWxmLnJldHVybl9jb252ZXJzaW9uID0gW10KKworICAgICAgICAjIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gY2xlYW4gdXAgYWZ0ZXIgdGhlIGltcGwgY2FsbC4KKyAgICAgICAgc2VsZi5jbGVhbnVwID0gW10KKworCitjbGFzcyBGb3JtYXRDb3VudGVyRm9ybWF0dGVyKHN0cmluZy5Gb3JtYXR0ZXIpOgorICAgICIiIgorICAgIFRoaXMgY291bnRzIGhvdyBtYW55IGluc3RhbmNlcyBvZiBlYWNoIGZvcm1hdHRlcgorICAgICJyZXBsYWNlbWVudCBzdHJpbmciIGFwcGVhciBpbiB0aGUgZm9ybWF0IHN0cmluZy4KKworICAgIGUuZy4gYWZ0ZXIgZXZhbHVhdGluZyAic3RyaW5nIHthfSwge2J9LCB7Y30sIHthfSIKKyAgICAgICAgIHRoZSBjb3VudHMgZGljdCB3b3VsZCBub3cgbG9vayBsaWtlCisgICAgICAgICB7J2EnOiAyLCAnYic6IDEsICdjJzogMX0KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuY291bnRzID0gY29sbGVjdGlvbnMuQ291bnRlcigpCisKKyAgICBkZWYgZ2V0X3ZhbHVlKHNlbGYsIGtleSwgYXJncywga3dhcmdzKToKKyAgICAgICAgc2VsZi5jb3VudHNba2V5XSArPSAxCisgICAgICAgIHJldHVybiAnJworCitjbGFzcyBMYW5ndWFnZShtZXRhY2xhc3M9YWJjLkFCQ01ldGEpOgorCisgICAgc3RhcnRfbGluZSA9ICIiCisgICAgYm9keV9wcmVmaXggPSAiIgorICAgIHN0b3BfbGluZSA9ICIiCisgICAgY2hlY2tzdW1fbGluZSA9ICIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWUpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJjLmFic3RyYWN0bWV0aG9kCisgICAgZGVmIHJlbmRlcihzZWxmLCBjbGluaWMsIHNpZ25hdHVyZXMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2VfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHZhbGlkYXRlKHNlbGYpOgorICAgICAgICBkZWYgYXNzZXJ0X29ubHlfb25lKGF0dHIsICphZGRpdGlvbmFsX2ZpZWxkcyk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIEVuc3VyZXMgdGhhdCB0aGUgc3RyaW5nIGZvdW5kIGF0IGdldGF0dHIoc2VsZiwgYXR0cikKKyAgICAgICAgICAgIGNvbnRhaW5zIGV4YWN0bHkgb25lIGZvcm1hdHRlciByZXBsYWNlbWVudCBzdHJpbmcgZm9yCisgICAgICAgICAgICBlYWNoIHZhbGlkIGZpZWxkLiAgVGhlIGxpc3Qgb2YgdmFsaWQgZmllbGRzIGlzCisgICAgICAgICAgICBbJ2RzbF9uYW1lJ10gZXh0ZW5kZWQgYnkgYWRkaXRpb25hbF9maWVsZHMuCisKKyAgICAgICAgICAgIGUuZy4KKyAgICAgICAgICAgICAgICBzZWxmLmZtdCA9ICJ7ZHNsX25hbWV9IHthfSB7Yn0iCisKKyAgICAgICAgICAgICAgICAjIHRoaXMgcGFzc2VzCisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfb25seV9vbmUoJ2ZtdCcsICdhJywgJ2InKQorCisgICAgICAgICAgICAgICAgIyB0aGlzIGZhaWxzLCB0aGUgZm9ybWF0IHN0cmluZyBoYXMgYSB7Yn0gaW4gaXQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9vbmx5X29uZSgnZm10JywgJ2EnKQorCisgICAgICAgICAgICAgICAgIyB0aGlzIGZhaWxzLCB0aGUgZm9ybWF0IHN0cmluZyBkb2Vzbid0IGhhdmUgYSB7Y30gaW4gaXQKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9vbmx5X29uZSgnZm10JywgJ2EnLCAnYicsICdjJykKKworICAgICAgICAgICAgICAgICMgdGhpcyBmYWlscywgdGhlIGZvcm1hdCBzdHJpbmcgaGFzIHR3byB7YX1zIGluIGl0LAorICAgICAgICAgICAgICAgICMgaXQgbXVzdCBjb250YWluIGV4YWN0bHkgb25lCisgICAgICAgICAgICAgICAgc2VsZi5mbXQyID0gJ3tkc2xfbmFtZX0ge2F9IHthfScKKyAgICAgICAgICAgICAgICBzZWxmLmFzc2VydF9vbmx5X29uZSgnZm10MicsICdhJykKKworICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBmaWVsZHMgPSBbJ2RzbF9uYW1lJ10KKyAgICAgICAgICAgIGZpZWxkcy5leHRlbmQoYWRkaXRpb25hbF9maWVsZHMpCisgICAgICAgICAgICBsaW5lID0gZ2V0YXR0cihzZWxmLCBhdHRyKQorICAgICAgICAgICAgZmNmID0gRm9ybWF0Q291bnRlckZvcm1hdHRlcigpCisgICAgICAgICAgICBmY2YuZm9ybWF0KGxpbmUpCisgICAgICAgICAgICBkZWYgbG9jYWxfZmFpbChzaG91bGRfYmVfdGhlcmVfYnV0X2lzbnQpOgorICAgICAgICAgICAgICAgIGlmIHNob3VsZF9iZV90aGVyZV9idXRfaXNudDoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgie30ge30gbXVzdCBjb250YWluIHt7e319fSBleGFjdGx5IG9uY2UhIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0ciwgbmFtZSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgie30ge30gbXVzdCBub3QgY29udGFpbiB7e3t9fX0hIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9fY2xhc3NfXy5fX25hbWVfXywgYXR0ciwgbmFtZSkpCisKKyAgICAgICAgICAgIGZvciBuYW1lLCBjb3VudCBpbiBmY2YuY291bnRzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgaWYgbmFtZSBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgICAgIGlmIGNvdW50ID4gMToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2ZhaWwoVHJ1ZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBsb2NhbF9mYWlsKEZhbHNlKQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmllbGRzOgorICAgICAgICAgICAgICAgIGlmIGZjZi5jb3VudHMuZ2V0KG5hbWUpICE9IDE6CisgICAgICAgICAgICAgICAgICAgIGxvY2FsX2ZhaWwoVHJ1ZSkKKworICAgICAgICBhc3NlcnRfb25seV9vbmUoJ3N0YXJ0X2xpbmUnKQorICAgICAgICBhc3NlcnRfb25seV9vbmUoJ3N0b3BfbGluZScpCisKKyAgICAgICAgZmllbGQgPSAiYXJndW1lbnRzIiBpZiAie2FyZ3VtZW50c30iIGluIHNlbGYuY2hlY2tzdW1fbGluZSBlbHNlICJjaGVja3N1bSIKKyAgICAgICAgYXNzZXJ0X29ubHlfb25lKCdjaGVja3N1bV9saW5lJywgZmllbGQpCisKKworCitjbGFzcyBQeXRob25MYW5ndWFnZShMYW5ndWFnZSk6CisKKyAgICBsYW5ndWFnZSAgICAgID0gJ1B5dGhvbicKKyAgICBzdGFydF9saW5lICAgID0gIiMvKlt7ZHNsX25hbWV9IGlucHV0XSIKKyAgICBib2R5X3ByZWZpeCAgID0gIiMiCisgICAgc3RvcF9saW5lICAgICA9ICIjW3tkc2xfbmFtZX0gc3RhcnQgZ2VuZXJhdGVkIGNvZGVdKi8iCisgICAgY2hlY2tzdW1fbGluZSA9ICIjLypbe2RzbF9uYW1lfSBlbmQgZ2VuZXJhdGVkIGNvZGU6IHthcmd1bWVudHN9XSovIgorCisKK2RlZiBwZXJtdXRlX2xlZnRfb3B0aW9uX2dyb3VwcyhsKToKKyAgICAiIiIKKyAgICBHaXZlbiBbMSwgMiwgM10sIHNob3VsZCB5aWVsZDoKKyAgICAgICAoKQorICAgICAgICgzLCkKKyAgICAgICAoMiwgMykKKyAgICAgICAoMSwgMiwgMykKKyAgICAiIiIKKyAgICB5aWVsZCB0dXBsZSgpCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGZvciBncm91cCBpbiByZXZlcnNlZChsKToKKyAgICAgICAgYWNjdW11bGF0b3IgPSBsaXN0KGdyb3VwKSArIGFjY3VtdWxhdG9yCisgICAgICAgIHlpZWxkIHR1cGxlKGFjY3VtdWxhdG9yKQorCisKK2RlZiBwZXJtdXRlX3JpZ2h0X29wdGlvbl9ncm91cHMobCk6CisgICAgIiIiCisgICAgR2l2ZW4gWzEsIDIsIDNdLCBzaG91bGQgeWllbGQ6CisgICAgICAoKQorICAgICAgKDEsKQorICAgICAgKDEsIDIpCisgICAgICAoMSwgMiwgMykKKyAgICAiIiIKKyAgICB5aWVsZCB0dXBsZSgpCisgICAgYWNjdW11bGF0b3IgPSBbXQorICAgIGZvciBncm91cCBpbiBsOgorICAgICAgICBhY2N1bXVsYXRvci5leHRlbmQoZ3JvdXApCisgICAgICAgIHlpZWxkIHR1cGxlKGFjY3VtdWxhdG9yKQorCisKK2RlZiBwZXJtdXRlX29wdGlvbmFsX2dyb3VwcyhsZWZ0LCByZXF1aXJlZCwgcmlnaHQpOgorICAgICIiIgorICAgIEdlbmVyYXRvciBmdW5jdGlvbiB0aGF0IGNvbXB1dGVzIHRoZSBzZXQgb2YgYWNjZXB0YWJsZQorICAgIGFyZ3VtZW50IGxpc3RzIGZvciB0aGUgcHJvdmlkZWQgaXRlcmFibGVzIG9mCisgICAgYXJndW1lbnQgZ3JvdXBzLiAgKEFjdHVhbGx5IGl0IGdlbmVyYXRlcyBhIHR1cGxlIG9mIHR1cGxlcy4pCisKKyAgICBBbGdvcml0aG06IHByZWZlciBsZWZ0IG9wdGlvbnMgb3ZlciByaWdodCBvcHRpb25zLgorCisgICAgSWYgcmVxdWlyZWQgaXMgZW1wdHksIGxlZnQgbXVzdCBhbHNvIGJlIGVtcHR5LgorICAgICIiIgorICAgIHJlcXVpcmVkID0gdHVwbGUocmVxdWlyZWQpCisgICAgcmVzdWx0ID0gW10KKworICAgIGlmIG5vdCByZXF1aXJlZDoKKyAgICAgICAgYXNzZXJ0IG5vdCBsZWZ0CisKKyAgICBhY2N1bXVsYXRvciA9IFtdCisgICAgY291bnRzID0gc2V0KCkKKyAgICBmb3IgciBpbiBwZXJtdXRlX3JpZ2h0X29wdGlvbl9ncm91cHMocmlnaHQpOgorICAgICAgICBmb3IgbCBpbiBwZXJtdXRlX2xlZnRfb3B0aW9uX2dyb3VwcyhsZWZ0KToKKyAgICAgICAgICAgIHQgPSBsICsgcmVxdWlyZWQgKyByCisgICAgICAgICAgICBpZiBsZW4odCkgaW4gY291bnRzOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBjb3VudHMuYWRkKGxlbih0KSkKKyAgICAgICAgICAgIGFjY3VtdWxhdG9yLmFwcGVuZCh0KQorCisgICAgYWNjdW11bGF0b3Iuc29ydChrZXk9bGVuKQorICAgIHJldHVybiB0dXBsZShhY2N1bXVsYXRvcikKKworCitkZWYgc3RyaXBfbGVhZGluZ19hbmRfdHJhaWxpbmdfYmxhbmtfbGluZXMocyk6CisgICAgbGluZXMgPSBzLnJzdHJpcCgpLnNwbGl0KCdcbicpCisgICAgd2hpbGUgbGluZXM6CisgICAgICAgIGxpbmUgPSBsaW5lc1swXQorICAgICAgICBpZiBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICBicmVhaworICAgICAgICBkZWwgbGluZXNbMF0KKyAgICByZXR1cm4gJ1xuJy5qb2luKGxpbmVzKQorCitAZnVuY3Rvb2xzLmxydV9jYWNoZSgpCitkZWYgbm9ybWFsaXplX3NuaXBwZXQocywgKiwgaW5kZW50PTApOgorICAgICIiIgorICAgIFJlZm9ybWF0cyBzOgorICAgICAgICAqIHJlbW92ZXMgbGVhZGluZyBhbmQgdHJhaWxpbmcgYmxhbmsgbGluZXMKKyAgICAgICAgKiBlbnN1cmVzIHRoYXQgaXQgZG9lcyBub3QgZW5kIHdpdGggYSBuZXdsaW5lCisgICAgICAgICogZGVkZW50cyBzbyB0aGUgZmlyc3Qgbm9ud2hpdGUgY2hhcmFjdGVyIG9uIGFueSBsaW5lIGlzIGF0IGNvbHVtbiAiaW5kZW50IgorICAgICIiIgorICAgIHMgPSBzdHJpcF9sZWFkaW5nX2FuZF90cmFpbGluZ19ibGFua19saW5lcyhzKQorICAgIHMgPSB0ZXh0d3JhcC5kZWRlbnQocykKKyAgICBpZiBpbmRlbnQ6CisgICAgICAgIHMgPSB0ZXh0d3JhcC5pbmRlbnQocywgJyAnICogaW5kZW50KQorICAgIHJldHVybiBzCisKKworY2xhc3MgQ0xhbmd1YWdlKExhbmd1YWdlKToKKworICAgIGJvZHlfcHJlZml4ICAgPSAiIyIKKyAgICBsYW5ndWFnZSAgICAgID0gJ0MnCisgICAgc3RhcnRfbGluZSAgICA9ICIvKlt7ZHNsX25hbWV9IGlucHV0XSIKKyAgICBib2R5X3ByZWZpeCAgID0gIiIKKyAgICBzdG9wX2xpbmUgICAgID0gIlt7ZHNsX25hbWV9IHN0YXJ0IGdlbmVyYXRlZCBjb2RlXSovIgorICAgIGNoZWNrc3VtX2xpbmUgPSAiLypbe2RzbF9uYW1lfSBlbmQgZ2VuZXJhdGVkIGNvZGU6IHthcmd1bWVudHN9XSovIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGVuYW1lKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5jcHAgPSBjcHAuTW9uaXRvcihmaWxlbmFtZSkKKyAgICAgICAgc2VsZi5jcHAuZmFpbCA9IGZhaWwKKworICAgIGRlZiBwYXJzZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLmNwcC53cml0ZWxpbmUobGluZSkKKworICAgIGRlZiByZW5kZXIoc2VsZiwgY2xpbmljLCBzaWduYXR1cmVzKToKKyAgICAgICAgZnVuY3Rpb24gPSBOb25lCisgICAgICAgIGZvciBvIGluIHNpZ25hdHVyZXM6CisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKG8sIEZ1bmN0aW9uKToKKyAgICAgICAgICAgICAgICBpZiBmdW5jdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiWW91IG1heSBzcGVjaWZ5IGF0IG1vc3Qgb25lIGZ1bmN0aW9uIHBlciBibG9jay5cbkZvdW5kIGEgYmxvY2sgY29udGFpbmluZyBhdCBsZWFzdCB0d286XG5cdCIgKyByZXByKGZ1bmN0aW9uKSArICIgYW5kICIgKyByZXByKG8pKQorICAgICAgICAgICAgICAgIGZ1bmN0aW9uID0gbworICAgICAgICByZXR1cm4gc2VsZi5yZW5kZXJfZnVuY3Rpb24oY2xpbmljLCBmdW5jdGlvbikKKworICAgIGRlZiBkb2NzdHJpbmdfZm9yX2Nfc3RyaW5nKHNlbGYsIGYpOgorICAgICAgICB0ZXh0LCBhZGQsIG91dHB1dCA9IF90ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgIyB0dXJuIGRvY3N0cmluZyBpbnRvIGEgcHJvcGVybHkgcXVvdGVkIEMgc3RyaW5nCisgICAgICAgIGZvciBsaW5lIGluIGYuZG9jc3RyaW5nLnNwbGl0KCdcbicpOgorICAgICAgICAgICAgYWRkKCciJykKKyAgICAgICAgICAgIGFkZChxdW90ZWRfZm9yX2Nfc3RyaW5nKGxpbmUpKQorICAgICAgICAgICAgYWRkKCdcXG4iXG4nKQorCisgICAgICAgIHRleHQucG9wKCkKKyAgICAgICAgYWRkKCciJykKKyAgICAgICAgcmV0dXJuICcnLmpvaW4odGV4dCkKKworICAgIGRlZiBvdXRwdXRfdGVtcGxhdGVzKHNlbGYsIGYpOgorICAgICAgICBwYXJhbWV0ZXJzID0gbGlzdChmLnBhcmFtZXRlcnMudmFsdWVzKCkpCisgICAgICAgIGFzc2VydCBwYXJhbWV0ZXJzCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcmFtZXRlcnNbMF0uY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcikKKyAgICAgICAgZGVsIHBhcmFtZXRlcnNbMF0KKyAgICAgICAgY29udmVydGVycyA9IFtwLmNvbnZlcnRlciBmb3IgcCBpbiBwYXJhbWV0ZXJzXQorCisgICAgICAgIGhhc19vcHRpb25fZ3JvdXBzID0gcGFyYW1ldGVycyBhbmQgKHBhcmFtZXRlcnNbMF0uZ3JvdXAgb3IgcGFyYW1ldGVyc1stMV0uZ3JvdXApCisgICAgICAgIGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlciA9IChub3QgZi5yZXR1cm5fY29udmVydGVyIG9yCisgICAgICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIudHlwZSA9PSAnUHlPYmplY3QgKicpCisKKyAgICAgICAgcG9zaXRpb25hbCA9IHBhcmFtZXRlcnMgYW5kIChwYXJhbWV0ZXJzWy0xXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSkKKyAgICAgICAgYWxsX2JvcmluZ19vYmplY3RzID0gRmFsc2UgIyB5ZXMsIHRoaXMgd2lsbCBiZSBmYWxzZSBpZiB0aGVyZSBhcmUgMCBwYXJhbWV0ZXJzLCBpdCdzIGZpbmUKKyAgICAgICAgZmlyc3Rfb3B0aW9uYWwgPSBsZW4ocGFyYW1ldGVycykKKyAgICAgICAgZm9yIGksIHAgaW4gZW51bWVyYXRlKHBhcmFtZXRlcnMpOgorICAgICAgICAgICAgYyA9IHAuY29udmVydGVyCisgICAgICAgICAgICBpZiB0eXBlKGMpICE9IG9iamVjdF9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGMuZm9ybWF0X3VuaXQgIT0gJ08nOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBwLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgICAgIGZpcnN0X29wdGlvbmFsID0gbWluKGZpcnN0X29wdGlvbmFsLCBpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWxsX2JvcmluZ19vYmplY3RzID0gVHJ1ZQorCisgICAgICAgIG5ld19vcl9pbml0ID0gZi5raW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkKKworICAgICAgICBtZXRoX28gPSAobGVuKHBhcmFtZXRlcnMpID09IDEgYW5kCisgICAgICAgICAgICAgIHBhcmFtZXRlcnNbMF0ua2luZCA9PSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkgYW5kCisgICAgICAgICAgICAgIG5vdCBjb252ZXJ0ZXJzWzBdLmlzX29wdGlvbmFsKCkgYW5kCisgICAgICAgICAgICAgIGlzaW5zdGFuY2UoY29udmVydGVyc1swXSwgb2JqZWN0X2NvbnZlcnRlcikgYW5kCisgICAgICAgICAgICAgIGNvbnZlcnRlcnNbMF0uZm9ybWF0X3VuaXQgPT0gJ08nIGFuZAorICAgICAgICAgICAgICBub3QgbmV3X29yX2luaXQpCisKKyAgICAgICAgIyB3ZSBoYXZlIHRvIHNldCB0aGVzZSB0aGluZ3MgYmVmb3JlIHdlJ3JlIGRvbmU6CisgICAgICAgICMKKyAgICAgICAgIyBkb2NzdHJpbmdfcHJvdG90eXBlCisgICAgICAgICMgZG9jc3RyaW5nX2RlZmluaXRpb24KKyAgICAgICAgIyBpbXBsX3Byb3RvdHlwZQorICAgICAgICAjIG1ldGhvZGRlZl9kZWZpbmUKKyAgICAgICAgIyBwYXJzZXJfcHJvdG90eXBlCisgICAgICAgICMgcGFyc2VyX2RlZmluaXRpb24KKyAgICAgICAgIyBpbXBsX2RlZmluaXRpb24KKyAgICAgICAgIyBjcHBfaWYKKyAgICAgICAgIyBjcHBfZW5kaWYKKyAgICAgICAgIyBtZXRob2RkZWZfaWZuZGVmCisKKyAgICAgICAgcmV0dXJuX3ZhbHVlX2RlY2xhcmF0aW9uID0gIlB5T2JqZWN0ICpyZXR1cm5fdmFsdWUgPSBOVUxMOyIKKworICAgICAgICBtZXRob2RkZWZfZGVmaW5lID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAjZGVmaW5lIHttZXRob2RkZWZfbmFtZX0gICAgXFwKKyAgICAgICAgICAgICAgICB7eyJ7bmFtZX0iLCAoUHlDRnVuY3Rpb24pe2NfYmFzZW5hbWV9LCB7bWV0aG9kZGVmX2ZsYWdzfSwge2NfYmFzZW5hbWV9X19kb2NfX319LAorICAgICAgICAgICAgIiIiKQorICAgICAgICBpZiBuZXdfb3JfaW5pdCBhbmQgbm90IGYuZG9jc3RyaW5nOgorICAgICAgICAgICAgZG9jc3RyaW5nX3Byb3RvdHlwZSA9IGRvY3N0cmluZ19kZWZpbml0aW9uID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGRvY3N0cmluZ19wcm90b3R5cGUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBQeURvY19WQVIoe2NfYmFzZW5hbWV9X19kb2NfXyk7CisgICAgICAgICAgICAgICAgIiIiKQorICAgICAgICAgICAgZG9jc3RyaW5nX2RlZmluaXRpb24gPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBQeURvY19TVFJWQVIoe2NfYmFzZW5hbWV9X19kb2NfXywKKyAgICAgICAgICAgICAgICB7ZG9jc3RyaW5nfSk7CisgICAgICAgICAgICAgICAgIiIiKQorICAgICAgICBpbXBsX2RlZmluaXRpb24gPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgIHN0YXRpYyB7aW1wbF9yZXR1cm5fdHlwZX0KKyAgICAgICAgICAgIHtjX2Jhc2VuYW1lfV9pbXBsKHtpbXBsX3BhcmFtZXRlcnN9KQorICAgICAgICAgICAgIiIiKQorICAgICAgICBpbXBsX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfZGVmaW5pdGlvbiA9IE5vbmUKKworICAgICAgICBwYXJzZXJfcHJvdG90eXBlX2tleXdvcmQgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgIHN0YXRpYyBQeU9iamVjdCAqCisgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCisgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgcGFyc2VyX3Byb3RvdHlwZV92YXJhcmdzID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgICAgICAge2NfYmFzZW5hbWV9KHtzZWxmX3R5cGV9e3NlbGZfbmFtZX0sIFB5T2JqZWN0ICphcmdzKQorICAgICAgICAgICAgIiIiKQorCisgICAgICAgICMgcGFyc2VyX2JvZHlfZmllbGRzIHJlbWVtYmVycyB0aGUgZmllbGRzIHBhc3NlZCBpbiB0byB0aGUKKyAgICAgICAgIyBwcmV2aW91cyBjYWxsIHRvIHBhcnNlcl9ib2R5LiB0aGlzIGlzIHVzZWQgZm9yIGFuIGF3ZnVsIGhhY2suCisgICAgICAgIHBhcnNlcl9ib2R5X2ZpZWxkcyA9ICgpCisgICAgICAgIGRlZiBwYXJzZXJfYm9keShwcm90b3R5cGUsICpmaWVsZHMpOgorICAgICAgICAgICAgbm9ubG9jYWwgcGFyc2VyX2JvZHlfZmllbGRzCisgICAgICAgICAgICBhZGQsIG91dHB1dCA9IHRleHRfYWNjdW11bGF0b3IoKQorICAgICAgICAgICAgYWRkKHByb3RvdHlwZSkKKyAgICAgICAgICAgIHBhcnNlcl9ib2R5X2ZpZWxkcyA9IGZpZWxkcworCisgICAgICAgICAgICBmaWVsZHMgPSBsaXN0KGZpZWxkcykKKyAgICAgICAgICAgIGZpZWxkcy5pbnNlcnQoMCwgbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAge3sKKyAgICAgICAgICAgICAgICAgICAge3JldHVybl92YWx1ZV9kZWNsYXJhdGlvbn0KKyAgICAgICAgICAgICAgICAgICAge2RlY2xhcmF0aW9uc30KKyAgICAgICAgICAgICAgICAgICAge2luaXRpYWxpemVyc30KKyAgICAgICAgICAgICAgICAiIiIpICsgIlxuIikKKyAgICAgICAgICAgICMganVzdCBpbWFnaW5lLS15b3VyIGNvZGUgaXMgaGVyZSBpbiB0aGUgbWlkZGxlCisgICAgICAgICAgICBmaWVsZHMuYXBwZW5kKG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICB7bW9kaWZpY2F0aW9uc30KKyAgICAgICAgICAgICAgICAgICAge3JldHVybl92YWx1ZX0gPSB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICAgICAgICAgICAgICAgICAge3JldHVybl9jb252ZXJzaW9ufQorCisgICAgICAgICAgICAgICAge2V4aXRfbGFiZWx9CisgICAgICAgICAgICAgICAgICAgIHtjbGVhbnVwfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuX3ZhbHVlOworICAgICAgICAgICAgICAgIH19CisgICAgICAgICAgICAgICAgIiIiKSkKKyAgICAgICAgICAgIGZvciBmaWVsZCBpbiBmaWVsZHM6CisgICAgICAgICAgICAgICAgYWRkKCdcbicpCisgICAgICAgICAgICAgICAgYWRkKGZpZWxkKQorICAgICAgICAgICAgcmV0dXJuIG91dHB1dCgpCisKKyAgICAgICAgZGVmIGluc2VydF9rZXl3b3JkcyhzKToKKyAgICAgICAgICAgIHJldHVybiBsaW5lYXJfZm9ybWF0KHMsIGRlY2xhcmF0aW9ucz0ic3RhdGljIGNoYXIgKl9rZXl3b3Jkc1tdID0ge3t7a2V5d29yZHN9LCBOVUxMfX07XG57ZGVjbGFyYXRpb25zfSIpCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnM6CisgICAgICAgICAgICAjIG5vIHBhcmFtZXRlcnMsIE1FVEhfTk9BUkdTCisKKyAgICAgICAgICAgIGZsYWdzID0gIk1FVEhfTk9BUkdTIgorCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gbm9ybWFsaXplX3NuaXBwZXQoIiIiCisgICAgICAgICAgICAgICAgc3RhdGljIFB5T2JqZWN0ICoKKyAgICAgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKlB5X1VOVVNFRChpZ25vcmVkKSkKKyAgICAgICAgICAgICAgICAiIiIpCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9wcm90b3R5cGUKKworICAgICAgICAgICAgaWYgZGVmYXVsdF9yZXR1cm5fY29udmVydGVyOgorICAgICAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX3Byb3RvdHlwZSArICdcbicgKyBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICAgICAge3sKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7Y19iYXNlbmFtZX1faW1wbCh7aW1wbF9hcmd1bWVudHN9KTsKKyAgICAgICAgICAgICAgICAgICAgfX0KKyAgICAgICAgICAgICAgICAgICAgIiIiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUpCisKKyAgICAgICAgZWxpZiBtZXRoX286CisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX08iCisKKyAgICAgICAgICAgIG1ldGhfb19wcm90b3R5cGUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBzdGF0aWMgUHlPYmplY3QgKgorICAgICAgICAgICAgICAgIHtjX2Jhc2VuYW1lfSh7aW1wbF9wYXJhbWV0ZXJzfSkKKyAgICAgICAgICAgICAgICAiIiIpCisKKyAgICAgICAgICAgIGlmIGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlcjoKKyAgICAgICAgICAgICAgICAjIG1hcHMgcGVyZmVjdGx5IHRvIE1FVEhfTywgZG9lc24ndCBuZWVkIGEgcmV0dXJuIGNvbnZlcnRlci4KKyAgICAgICAgICAgICAgICAjIHNvIHdlIHNraXAgbWFraW5nIGEgcGFyc2UgZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAjIGFuZCBjYWxsIGRpcmVjdGx5IGludG8gdGhlIGltcGwgZnVuY3Rpb24uCisgICAgICAgICAgICAgICAgaW1wbF9wcm90b3R5cGUgPSBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX2RlZmluaXRpb24gPSAnJworICAgICAgICAgICAgICAgIGltcGxfZGVmaW5pdGlvbiA9IG1ldGhfb19wcm90b3R5cGUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBTTElHSFQgSEFDSworICAgICAgICAgICAgICAgICMgdXNlIGltcGxfcGFyYW1ldGVycyBmb3IgdGhlIHBhcnNlciBoZXJlIQorICAgICAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBtZXRoX29fcHJvdG90eXBlCisgICAgICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfYm9keShwYXJzZXJfcHJvdG90eXBlKQorCisgICAgICAgIGVsaWYgaGFzX29wdGlvbl9ncm91cHM6CisgICAgICAgICAgICAjIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB3aXRoIG9wdGlvbiBncm91cHMKKyAgICAgICAgICAgICMgKHdlIGhhdmUgdG8gZ2VuZXJhdGUgbG90cyBvZiBQeUFyZ19QYXJzZVR1cGxlIGNhbGxzCisgICAgICAgICAgICAjICBpbiBhIGJpZyBzd2l0Y2ggc3RhdGVtZW50KQorCisgICAgICAgICAgICBmbGFncyA9ICJNRVRIX1ZBUkFSR1MiCisgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZV92YXJhcmdzCisKKyAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gcGFyc2VyX2JvZHkocGFyc2VyX3Byb3RvdHlwZSwgJyAgICB7b3B0aW9uX2dyb3VwX3BhcnNpbmd9JykKKworICAgICAgICBlbGlmIHBvc2l0aW9uYWwgYW5kIGFsbF9ib3Jpbmdfb2JqZWN0czoKKyAgICAgICAgICAgICMgcG9zaXRpb25hbC1vbmx5LCBidXQgbm8gb3B0aW9uIGdyb3VwcywKKyAgICAgICAgICAgICMgYW5kIG5vdGhpbmcgYnV0IG5vcm1hbCBvYmplY3RzOgorICAgICAgICAgICAgIyBQeUFyZ19VbnBhY2tUdXBsZSEKKworICAgICAgICAgICAgZmxhZ3MgPSAiTUVUSF9WQVJBUkdTIgorICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGVfdmFyYXJncworCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfVW5wYWNrVHVwbGUoYXJncywgIntuYW1lfSIsCisgICAgICAgICAgICAgICAgICAgIHt1bnBhY2tfbWlufSwge3VucGFja19tYXh9LAorICAgICAgICAgICAgICAgICAgICB7cGFyc2VfYXJndW1lbnRzfSkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsKKyAgICAgICAgICAgICAgICAiIiIsIGluZGVudD00KSkKKworICAgICAgICBlbGlmIHBvc2l0aW9uYWw6CisgICAgICAgICAgICAjIHBvc2l0aW9uYWwtb25seSwgYnV0IG5vIG9wdGlvbiBncm91cHMKKyAgICAgICAgICAgICMgd2Ugb25seSBuZWVkIG9uZSBjYWxsIHRvIFB5QXJnX1BhcnNlVHVwbGUKKworICAgICAgICAgICAgZmxhZ3MgPSAiTUVUSF9WQVJBUkdTIgorICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSA9IHBhcnNlcl9wcm90b3R5cGVfdmFyYXJncworCisgICAgICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9ib2R5KHBhcnNlcl9wcm90b3R5cGUsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLAorICAgICAgICAgICAgICAgICAgICAie2Zvcm1hdF91bml0c306e25hbWV9IiwKKyAgICAgICAgICAgICAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgIiIiLCBpbmRlbnQ9NCkpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgICMgcG9zaXRpb25hbC1vci1rZXl3b3JkIGFyZ3VtZW50cworICAgICAgICAgICAgZmxhZ3MgPSAiTUVUSF9WQVJBUkdTfE1FVEhfS0VZV09SRFMiCisKKyAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBwYXJzZXJfcHJvdG90eXBlX2tleXdvcmQKKworICAgICAgICAgICAgYm9keSA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRzKGFyZ3MsIGt3YXJncywKKyAgICAgICAgICAgICAgICAgICAgIntmb3JtYXRfdW5pdHN9OntuYW1lfSIsIF9rZXl3b3JkcywKKyAgICAgICAgICAgICAgICAgICAge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAiIiIsIGluZGVudD00KQorICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfYm9keShwYXJzZXJfcHJvdG90eXBlLCBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGVBbmRLZXl3b3JkcyhhcmdzLCBrd2FyZ3MsCisgICAgICAgICAgICAgICAgICAgICJ7Zm9ybWF0X3VuaXRzfTp7bmFtZX0iLCBfa2V5d29yZHMsCisgICAgICAgICAgICAgICAgICAgIHtwYXJzZV9hcmd1bWVudHN9KSkKKyAgICAgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICAgICAgICAgICIiIiwgaW5kZW50PTQpKQorICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBpbnNlcnRfa2V5d29yZHMocGFyc2VyX2RlZmluaXRpb24pCisKKworICAgICAgICBpZiBuZXdfb3JfaW5pdDoKKyAgICAgICAgICAgIG1ldGhvZGRlZl9kZWZpbmUgPSAnJworCisgICAgICAgICAgICBpZiBmLmtpbmQgPT0gTUVUSE9EX05FVzoKKyAgICAgICAgICAgICAgICBwYXJzZXJfcHJvdG90eXBlID0gcGFyc2VyX3Byb3RvdHlwZV9rZXl3b3JkCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybl92YWx1ZV9kZWNsYXJhdGlvbiA9ICJpbnQgcmV0dXJuX3ZhbHVlID0gLTE7IgorICAgICAgICAgICAgICAgIHBhcnNlcl9wcm90b3R5cGUgPSBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljIGludAorICAgICAgICAgICAgICAgICAgICB7Y19iYXNlbmFtZX0oe3NlbGZfdHlwZX17c2VsZl9uYW1lfSwgUHlPYmplY3QgKmFyZ3MsIFB5T2JqZWN0ICprd2FyZ3MpCisgICAgICAgICAgICAgICAgICAgICIiIikKKworICAgICAgICAgICAgZmllbGRzID0gbGlzdChwYXJzZXJfYm9keV9maWVsZHMpCisgICAgICAgICAgICBwYXJzZXNfcG9zaXRpb25hbCA9ICdNRVRIX05PQVJHUycgbm90IGluIGZsYWdzCisgICAgICAgICAgICBwYXJzZXNfa2V5d29yZHMgPSAnTUVUSF9LRVlXT1JEUycgaW4gZmxhZ3MKKyAgICAgICAgICAgIGlmIHBhcnNlc19rZXl3b3JkczoKKyAgICAgICAgICAgICAgICBhc3NlcnQgcGFyc2VzX3Bvc2l0aW9uYWwKKworICAgICAgICAgICAgaWYgbm90IHBhcnNlc19rZXl3b3JkczoKKyAgICAgICAgICAgICAgICBmaWVsZHMuaW5zZXJ0KDAsIG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICBpZiAoe3NlbGZfdHlwZV9jaGVja30hX1B5QXJnX05vS2V5d29yZHMoIntuYW1lfSIsIGt3YXJncykpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICIiIiwgaW5kZW50PTQpKQorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXJzZXNfcG9zaXRpb25hbDoKKyAgICAgICAgICAgICAgICAgICAgZmllbGRzLmluc2VydCgwLCBub3JtYWxpemVfc25pcHBldCgiIiIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh7c2VsZl90eXBlX2NoZWNrfSFfUHlBcmdfTm9Qb3NpdGlvbmFsKCJ7bmFtZX0iLCBhcmdzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7CisgICAgICAgICAgICAgICAgICAgICAgICAiIiIsIGluZGVudD00KSkKKworICAgICAgICAgICAgcGFyc2VyX2RlZmluaXRpb24gPSBwYXJzZXJfYm9keShwYXJzZXJfcHJvdG90eXBlLCAqZmllbGRzKQorICAgICAgICAgICAgaWYgcGFyc2VzX2tleXdvcmRzOgorICAgICAgICAgICAgICAgIHBhcnNlcl9kZWZpbml0aW9uID0gaW5zZXJ0X2tleXdvcmRzKHBhcnNlcl9kZWZpbml0aW9uKQorCisKKyAgICAgICAgaWYgZi5tZXRob2RkZWZfZmxhZ3M6CisgICAgICAgICAgICBmbGFncyArPSAnfCcgKyBmLm1ldGhvZGRlZl9mbGFncworCisgICAgICAgIG1ldGhvZGRlZl9kZWZpbmUgPSBtZXRob2RkZWZfZGVmaW5lLnJlcGxhY2UoJ3ttZXRob2RkZWZfZmxhZ3N9JywgZmxhZ3MpCisKKyAgICAgICAgbWV0aG9kZGVmX2lmbmRlZiA9ICcnCisgICAgICAgIGNvbmRpdGlvbmFsID0gc2VsZi5jcHAuY29uZGl0aW9uKCkKKyAgICAgICAgaWYgbm90IGNvbmRpdGlvbmFsOgorICAgICAgICAgICAgY3BwX2lmID0gY3BwX2VuZGlmID0gJycKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNwcF9pZiA9ICIjaWYgIiArIGNvbmRpdGlvbmFsCisgICAgICAgICAgICBjcHBfZW5kaWYgPSAiI2VuZGlmIC8qICIgKyBjb25kaXRpb25hbCArICIgKi8iCisKKyAgICAgICAgICAgIGlmIG1ldGhvZGRlZl9kZWZpbmU6CisgICAgICAgICAgICAgICAgbWV0aG9kZGVmX2lmbmRlZiA9IG5vcm1hbGl6ZV9zbmlwcGV0KCIiIgorICAgICAgICAgICAgICAgICAgICAjaWZuZGVmIHttZXRob2RkZWZfbmFtZX0KKyAgICAgICAgICAgICAgICAgICAgICAgICNkZWZpbmUge21ldGhvZGRlZl9uYW1lfQorICAgICAgICAgICAgICAgICAgICAjZW5kaWYgLyogIWRlZmluZWQoe21ldGhvZGRlZl9uYW1lfSkgKi8KKyAgICAgICAgICAgICAgICAgICAgIiIiKQorCisKKyAgICAgICAgIyBhZGQgJzsnIHRvIHRoZSBlbmQgb2YgcGFyc2VyX3Byb3RvdHlwZSBhbmQgaW1wbF9wcm90b3R5cGUKKyAgICAgICAgIyAodGhleSBtdXN0bid0IGJlIE5vbmUsIGJ1dCB0aGV5IGNvdWxkIGJlIGFuIGVtcHR5IHN0cmluZy4pCisgICAgICAgIGFzc2VydCBwYXJzZXJfcHJvdG90eXBlIGlzIG5vdCBOb25lCisgICAgICAgIGlmIHBhcnNlcl9wcm90b3R5cGU6CisgICAgICAgICAgICBhc3NlcnQgbm90IHBhcnNlcl9wcm90b3R5cGUuZW5kc3dpdGgoJzsnKQorICAgICAgICAgICAgcGFyc2VyX3Byb3RvdHlwZSArPSAnOycKKworICAgICAgICBpZiBpbXBsX3Byb3RvdHlwZSBpcyBOb25lOgorICAgICAgICAgICAgaW1wbF9wcm90b3R5cGUgPSBpbXBsX2RlZmluaXRpb24KKyAgICAgICAgaWYgaW1wbF9wcm90b3R5cGU6CisgICAgICAgICAgICBpbXBsX3Byb3RvdHlwZSArPSAiOyIKKworICAgICAgICBwYXJzZXJfZGVmaW5pdGlvbiA9IHBhcnNlcl9kZWZpbml0aW9uLnJlcGxhY2UoIntyZXR1cm5fdmFsdWVfZGVjbGFyYXRpb259IiwgcmV0dXJuX3ZhbHVlX2RlY2xhcmF0aW9uKQorCisgICAgICAgIGQgPSB7CisgICAgICAgICAgICAiZG9jc3RyaW5nX3Byb3RvdHlwZSIgOiBkb2NzdHJpbmdfcHJvdG90eXBlLAorICAgICAgICAgICAgImRvY3N0cmluZ19kZWZpbml0aW9uIiA6IGRvY3N0cmluZ19kZWZpbml0aW9uLAorICAgICAgICAgICAgImltcGxfcHJvdG90eXBlIiA6IGltcGxfcHJvdG90eXBlLAorICAgICAgICAgICAgIm1ldGhvZGRlZl9kZWZpbmUiIDogbWV0aG9kZGVmX2RlZmluZSwKKyAgICAgICAgICAgICJwYXJzZXJfcHJvdG90eXBlIiA6IHBhcnNlcl9wcm90b3R5cGUsCisgICAgICAgICAgICAicGFyc2VyX2RlZmluaXRpb24iIDogcGFyc2VyX2RlZmluaXRpb24sCisgICAgICAgICAgICAiaW1wbF9kZWZpbml0aW9uIiA6IGltcGxfZGVmaW5pdGlvbiwKKyAgICAgICAgICAgICJjcHBfaWYiIDogY3BwX2lmLAorICAgICAgICAgICAgImNwcF9lbmRpZiIgOiBjcHBfZW5kaWYsCisgICAgICAgICAgICAibWV0aG9kZGVmX2lmbmRlZiIgOiBtZXRob2RkZWZfaWZuZGVmLAorICAgICAgICB9CisKKyAgICAgICAgIyBtYWtlIHN1cmUgd2UgZGlkbid0IGZvcmdldCB0byBhc3NpZ24gc29tZXRoaW5nLAorICAgICAgICAjIGFuZCB3cmFwIGVhY2ggbm9uLWVtcHR5IHZhbHVlIGluIFxuJ3MKKyAgICAgICAgZDIgPSB7fQorICAgICAgICBmb3IgbmFtZSwgdmFsdWUgaW4gZC5pdGVtcygpOgorICAgICAgICAgICAgYXNzZXJ0IHZhbHVlIGlzIG5vdCBOb25lLCAiZ290IGEgTm9uZSB2YWx1ZSBmb3IgdGVtcGxhdGUgIiArIHJlcHIobmFtZSkKKyAgICAgICAgICAgIGlmIHZhbHVlOgorICAgICAgICAgICAgICAgIHZhbHVlID0gJ1xuJyArIHZhbHVlICsgJ1xuJworICAgICAgICAgICAgZDJbbmFtZV0gPSB2YWx1ZQorICAgICAgICByZXR1cm4gZDIKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShncm91cCk6CisgICAgICAgIGFkamVjdGl2ZSA9ICJsZWZ0XyIgaWYgZ3JvdXAgPCAwIGVsc2UgInJpZ2h0XyIKKyAgICAgICAgcmV0dXJuICJncm91cF8iICsgYWRqZWN0aXZlICsgc3RyKGFicyhncm91cCkpCisKKyAgICBkZWYgcmVuZGVyX29wdGlvbl9ncm91cF9wYXJzaW5nKHNlbGYsIGYsIHRlbXBsYXRlX2RpY3QpOgorICAgICAgICAjIHBvc2l0aW9uYWwgb25seSwgZ3JvdXBlZCwgb3B0aW9uYWwgYXJndW1lbnRzIQorICAgICAgICAjIGNhbiBiZSBvcHRpb25hbCBvbiB0aGUgbGVmdCBvciByaWdodC4KKyAgICAgICAgIyBoZXJlJ3MgYW4gZXhhbXBsZToKKyAgICAgICAgIworICAgICAgICAjIFsgWyBbIEExIEEyIF0gQjEgQjIgQjMgXSBDMSBDMiBdIEQxIEQyIEQzIFsgRTEgRTIgRTMgWyBGMSBGMiBGMyBdIF0KKyAgICAgICAgIworICAgICAgICAjIEhlcmUgZ3JvdXAgRCBhcmUgcmVxdWlyZWQsIGFuZCBhbGwgb3RoZXIgZ3JvdXBzIGFyZSBvcHRpb25hbC4KKyAgICAgICAgIyAoR3JvdXAgRCdzICJncm91cCIgaXMgYWN0dWFsbHkgTm9uZS4pCisgICAgICAgICMgV2UgY2FuIGZpZ3VyZSBvdXQgd2hpY2ggc2V0cyBvZiBhcmd1bWVudHMgd2UgaGF2ZSBiYXNlZCBvbgorICAgICAgICAjIGhvdyBtYW55IGFyZ3VtZW50cyBhcmUgaW4gdGhlIHR1cGxlLgorICAgICAgICAjCisgICAgICAgICMgTm90ZSB0aGF0IHlvdSBuZWVkIHRvIGNvdW50IHVwIG9uIGJvdGggc2lkZXMuICBGb3IgZXhhbXBsZSwKKyAgICAgICAgIyB5b3UgY291bGQgaGF2ZSBncm91cHMgQytELCBvciBDK0QrRSwgb3IgQytEK0UrRi4KKyAgICAgICAgIworICAgICAgICAjIFdoYXQgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgbGVhZHMgdXMgdG8gYW4gYW1iaWd1b3VzIHJlc3VsdD8KKyAgICAgICAgIyBDbGluaWMgcHJlZmVycyBncm91cHMgb24gdGhlIGxlZnQuICBTbyBpbiB0aGUgYWJvdmUgZXhhbXBsZSwKKyAgICAgICAgIyBmaXZlIGFyZ3VtZW50cyB3b3VsZCBtYXAgdG8gQitDLCBub3QgQytELgorCisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHBhcmFtZXRlcnMgPSBsaXN0KGYucGFyYW1ldGVycy52YWx1ZXMoKSkKKyAgICAgICAgaWYgaXNpbnN0YW5jZShwYXJhbWV0ZXJzWzBdLmNvbnZlcnRlciwgc2VsZl9jb252ZXJ0ZXIpOgorICAgICAgICAgICAgZGVsIHBhcmFtZXRlcnNbMF0KKworICAgICAgICBncm91cHMgPSBbXQorICAgICAgICBncm91cCA9IE5vbmUKKyAgICAgICAgbGVmdCA9IFtdCisgICAgICAgIHJpZ2h0ID0gW10KKyAgICAgICAgcmVxdWlyZWQgPSBbXQorICAgICAgICBsYXN0ID0gdW5zcGVjaWZpZWQKKworICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzOgorICAgICAgICAgICAgZ3JvdXBfaWQgPSBwLmdyb3VwCisgICAgICAgICAgICBpZiBncm91cF9pZCAhPSBsYXN0OgorICAgICAgICAgICAgICAgIGxhc3QgPSBncm91cF9pZAorICAgICAgICAgICAgICAgIGdyb3VwID0gW10KKyAgICAgICAgICAgICAgICBpZiBncm91cF9pZCA8IDA6CisgICAgICAgICAgICAgICAgICAgIGxlZnQuYXBwZW5kKGdyb3VwKQorICAgICAgICAgICAgICAgIGVsaWYgZ3JvdXBfaWQgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPSByZXF1aXJlZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0LmFwcGVuZChncm91cCkKKyAgICAgICAgICAgIGdyb3VwLmFwcGVuZChwKQorCisgICAgICAgIGNvdW50X21pbiA9IHN5cy5tYXhzaXplCisgICAgICAgIGNvdW50X21heCA9IC0xCisKKyAgICAgICAgYWRkKCJzd2l0Y2ggKFB5VHVwbGVfR0VUX1NJWkUoYXJncykpIHt7XG4iKQorICAgICAgICBmb3Igc3Vic2V0IGluIHBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKGxlZnQsIHJlcXVpcmVkLCByaWdodCk6CisgICAgICAgICAgICBjb3VudCA9IGxlbihzdWJzZXQpCisgICAgICAgICAgICBjb3VudF9taW4gPSBtaW4oY291bnRfbWluLCBjb3VudCkKKyAgICAgICAgICAgIGNvdW50X21heCA9IG1heChjb3VudF9tYXgsIGNvdW50KQorCisgICAgICAgICAgICBpZiBjb3VudCA9PSAwOgorICAgICAgICAgICAgICAgIGFkZCgiIiIgICAgY2FzZSAwOgorICAgICAgICBicmVhazsKKyIiIikKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICBncm91cF9pZHMgPSB7cC5ncm91cCBmb3IgcCBpbiBzdWJzZXR9ICAjIGVsaW1pbmF0ZSBkdXBsaWNhdGVzCisgICAgICAgICAgICBkID0ge30KKyAgICAgICAgICAgIGRbJ2NvdW50J10gPSBjb3VudAorICAgICAgICAgICAgZFsnbmFtZSddID0gZi5uYW1lCisgICAgICAgICAgICBkWydncm91cHMnXSA9IHNvcnRlZChncm91cF9pZHMpCisgICAgICAgICAgICBkWydmb3JtYXRfdW5pdHMnXSA9ICIiLmpvaW4ocC5jb252ZXJ0ZXIuZm9ybWF0X3VuaXQgZm9yIHAgaW4gc3Vic2V0KQorCisgICAgICAgICAgICBwYXJzZV9hcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgZm9yIHAgaW4gc3Vic2V0OgorICAgICAgICAgICAgICAgIHAuY29udmVydGVyLnBhcnNlX2FyZ3VtZW50KHBhcnNlX2FyZ3VtZW50cykKKyAgICAgICAgICAgIGRbJ3BhcnNlX2FyZ3VtZW50cyddID0gIiwgIi5qb2luKHBhcnNlX2FyZ3VtZW50cykKKworICAgICAgICAgICAgZ3JvdXBfaWRzLmRpc2NhcmQoMCkKKyAgICAgICAgICAgIGxpbmVzID0gW3NlbGYuZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShnKSArICIgPSAxOyIgZm9yIGcgaW4gZ3JvdXBfaWRzXQorICAgICAgICAgICAgbGluZXMgPSAiXG4iLmpvaW4obGluZXMpCisKKyAgICAgICAgICAgIHMgPSAiIiIKKyAgICBjYXNlIHtjb3VudH06CisgICAgICAgIGlmICghUHlBcmdfUGFyc2VUdXBsZShhcmdzLCAie2Zvcm1hdF91bml0c306e25hbWV9Iiwge3BhcnNlX2FyZ3VtZW50c30pKQorICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB7Z3JvdXBfYm9vbGVhbnN9CisgICAgICAgIGJyZWFrOworIiIiWzE6XQorICAgICAgICAgICAgcyA9IGxpbmVhcl9mb3JtYXQocywgZ3JvdXBfYm9vbGVhbnM9bGluZXMpCisgICAgICAgICAgICBzID0gcy5mb3JtYXRfbWFwKGQpCisgICAgICAgICAgICBhZGQocykKKworICAgICAgICBhZGQoIiAgICBkZWZhdWx0OlxuIikKKyAgICAgICAgcyA9ICcgICAgICAgIFB5RXJyX1NldFN0cmluZyhQeUV4Y19UeXBlRXJyb3IsICJ7fSByZXF1aXJlcyB7fSB0byB7fSBhcmd1bWVudHMiKTtcbicKKyAgICAgICAgYWRkKHMuZm9ybWF0KGYuZnVsbF9uYW1lLCBjb3VudF9taW4sIGNvdW50X21heCkpCisgICAgICAgIGFkZCgnICAgICAgICBnb3RvIGV4aXQ7XG4nKQorICAgICAgICBhZGQoIn19IikKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnb3B0aW9uX2dyb3VwX3BhcnNpbmcnXSA9IG91dHB1dCgpCisKKyAgICBkZWYgcmVuZGVyX2Z1bmN0aW9uKHNlbGYsIGNsaW5pYywgZik6CisgICAgICAgIGlmIG5vdCBmOgorICAgICAgICAgICAgcmV0dXJuICIiCisKKyAgICAgICAgYWRkLCBvdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgZGF0YSA9IENSZW5kZXJEYXRhKCkKKworICAgICAgICBhc3NlcnQgZi5wYXJhbWV0ZXJzLCAiV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgJ3NlbGYnIGF0IHRoaXMgcG9pbnQhIgorICAgICAgICBwYXJhbWV0ZXJzID0gZi5yZW5kZXJfcGFyYW1ldGVycworICAgICAgICBjb252ZXJ0ZXJzID0gW3AuY29udmVydGVyIGZvciBwIGluIHBhcmFtZXRlcnNdCisKKyAgICAgICAgdGVtcGxhdGVzID0gc2VsZi5vdXRwdXRfdGVtcGxhdGVzKGYpCisKKyAgICAgICAgZl9zZWxmID0gcGFyYW1ldGVyc1swXQorICAgICAgICBzZWxmbGVzcyA9IHBhcmFtZXRlcnNbMTpdCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZfc2VsZi5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKSwgIk5vIHNlbGYgcGFyYW1ldGVyIGluICIgKyByZXByKGYuZnVsbF9uYW1lKSArICIhIgorCisgICAgICAgIGxhc3RfZ3JvdXAgPSAwCisgICAgICAgIGZpcnN0X29wdGlvbmFsID0gbGVuKHNlbGZsZXNzKQorICAgICAgICBwb3NpdGlvbmFsID0gc2VsZmxlc3MgYW5kIHNlbGZsZXNzWy0xXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorICAgICAgICBuZXdfb3JfaW5pdCA9IGYua2luZCBpbiAoTUVUSE9EX05FVywgTUVUSE9EX0lOSVQpCisgICAgICAgIGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlciA9IChub3QgZi5yZXR1cm5fY29udmVydGVyIG9yCisgICAgICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIudHlwZSA9PSAnUHlPYmplY3QgKicpCisgICAgICAgIGhhc19vcHRpb25fZ3JvdXBzID0gRmFsc2UKKworICAgICAgICAjIG9mZnNldCBpIGJ5IC0xIGJlY2F1c2UgZmlyc3Rfb3B0aW9uYWwgbmVlZHMgdG8gaWdub3JlIHNlbGYKKyAgICAgICAgZm9yIGksIHAgaW4gZW51bWVyYXRlKHBhcmFtZXRlcnMsIC0xKToKKyAgICAgICAgICAgIGMgPSBwLmNvbnZlcnRlcgorCisgICAgICAgICAgICBpZiAoaSAhPSAtMSkgYW5kIChwLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkKToKKyAgICAgICAgICAgICAgICBmaXJzdF9vcHRpb25hbCA9IG1pbihmaXJzdF9vcHRpb25hbCwgaSkKKworICAgICAgICAgICAgIyBpbnNlcnQgZ3JvdXAgdmFyaWFibGUKKyAgICAgICAgICAgIGdyb3VwID0gcC5ncm91cAorICAgICAgICAgICAgaWYgbGFzdF9ncm91cCAhPSBncm91cDoKKyAgICAgICAgICAgICAgICBsYXN0X2dyb3VwID0gZ3JvdXAKKyAgICAgICAgICAgICAgICBpZiBncm91cDoKKyAgICAgICAgICAgICAgICAgICAgZ3JvdXBfbmFtZSA9IHNlbGYuZ3JvdXBfdG9fdmFyaWFibGVfbmFtZShncm91cCkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5pbXBsX2FyZ3VtZW50cy5hcHBlbmQoZ3JvdXBfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgZGF0YS5kZWNsYXJhdGlvbnMuYXBwZW5kKCJpbnQgIiArIGdyb3VwX25hbWUgKyAiID0gMDsiKQorICAgICAgICAgICAgICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoImludCAiICsgZ3JvdXBfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgaGFzX29wdGlvbl9ncm91cHMgPSBUcnVlCisKKyAgICAgICAgICAgIGMucmVuZGVyKHAsIGRhdGEpCisKKyAgICAgICAgaWYgaGFzX29wdGlvbl9ncm91cHMgYW5kIChub3QgcG9zaXRpb25hbCk6CisgICAgICAgICAgICBmYWlsKCJZb3UgY2Fubm90IHVzZSBvcHRpb25hbCBncm91cHMgKCdbJyBhbmQgJ10nKVxudW5sZXNzIGFsbCBwYXJhbWV0ZXJzIGFyZSBwb3NpdGlvbmFsLW9ubHkgKCcvJykuIikKKworICAgICAgICAjIEhBQ0sKKyAgICAgICAgIyB3aGVuIHdlJ3JlIE1FVEhfTywgYnV0IGhhdmUgYSBjdXN0b20gcmV0dXJuIGNvbnZlcnRlciwKKyAgICAgICAgIyB3ZSB1c2UgImltcGxfcGFyYW1ldGVycyIgZm9yIHRoZSBwYXJzaW5nIGZ1bmN0aW9uCisgICAgICAgICMgYmVjYXVzZSB0aGF0IHdvcmtzIGJldHRlci4gIGJ1dCB0aGF0IG1lYW5zIHdlIG11c3QKKyAgICAgICAgIyBzdXBwcmVzcyBhY3R1YWxseSBkZWNsYXJpbmcgdGhlIGltcGwncyBwYXJhbWV0ZXJzCisgICAgICAgICMgYXMgdmFyaWFibGVzIGluIHRoZSBwYXJzaW5nIGZ1bmN0aW9uLiAgYnV0IHNpbmNlIGl0J3MKKyAgICAgICAgIyBNRVRIX08sIHdlIGhhdmUgZXhhY3RseSBvbmUgYW55d2F5LCBzbyB3ZSBrbm93IGV4YWN0bHkKKyAgICAgICAgIyB3aGVyZSBpdCBpcy4KKyAgICAgICAgaWYgKCJNRVRIX08iIGluIHRlbXBsYXRlc1snbWV0aG9kZGVmX2RlZmluZSddIGFuZAorICAgICAgICAgICAgbm90IGRlZmF1bHRfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5wb3AoMCkKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0ID0ge30KKworICAgICAgICBmdWxsX25hbWUgPSBmLmZ1bGxfbmFtZQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydmdWxsX25hbWUnXSA9IGZ1bGxfbmFtZQorCisgICAgICAgIGlmIG5ld19vcl9pbml0OgorICAgICAgICAgICAgbmFtZSA9IGYuY2xzLm5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIG5hbWUgPSBmLm5hbWUKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0WyduYW1lJ10gPSBuYW1lCisKKyAgICAgICAgaWYgZi5jX2Jhc2VuYW1lOgorICAgICAgICAgICAgY19iYXNlbmFtZSA9IGYuY19iYXNlbmFtZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmllbGRzID0gZnVsbF9uYW1lLnNwbGl0KCIuIikKKyAgICAgICAgICAgIGlmIGZpZWxkc1stMV0gPT0gJ19fbmV3X18nOgorICAgICAgICAgICAgICAgIGZpZWxkcy5wb3AoKQorICAgICAgICAgICAgY19iYXNlbmFtZSA9ICJfIi5qb2luKGZpZWxkcykKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0WydjX2Jhc2VuYW1lJ10gPSBjX2Jhc2VuYW1lCisKKyAgICAgICAgbWV0aG9kZGVmX25hbWUgPSAie31fTUVUSE9EREVGIi5mb3JtYXQoY19iYXNlbmFtZS51cHBlcigpKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydtZXRob2RkZWZfbmFtZSddID0gbWV0aG9kZGVmX25hbWUKKworICAgICAgICB0ZW1wbGF0ZV9kaWN0Wydkb2NzdHJpbmcnXSA9IHNlbGYuZG9jc3RyaW5nX2Zvcl9jX3N0cmluZyhmKQorCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3NlbGZfbmFtZSddID0gdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlJ10gPSB0ZW1wbGF0ZV9kaWN0WydzZWxmX3R5cGVfY2hlY2snXSA9ICcnCisgICAgICAgIGZfc2VsZi5jb252ZXJ0ZXIuc2V0X3RlbXBsYXRlX2RpY3QodGVtcGxhdGVfZGljdCkKKworICAgICAgICBmLnJldHVybl9jb252ZXJ0ZXIucmVuZGVyKGYsIGRhdGEpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcmV0dXJuX3R5cGUnXSA9IGYucmV0dXJuX2NvbnZlcnRlci50eXBlCisKKyAgICAgICAgdGVtcGxhdGVfZGljdFsnZGVjbGFyYXRpb25zJ10gPSAiXG4iLmpvaW4oZGF0YS5kZWNsYXJhdGlvbnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2luaXRpYWxpemVycyddID0gIlxuXG4iLmpvaW4oZGF0YS5pbml0aWFsaXplcnMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ21vZGlmaWNhdGlvbnMnXSA9ICdcblxuJy5qb2luKGRhdGEubW9kaWZpY2F0aW9ucykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsna2V5d29yZHMnXSA9ICciJyArICciLCAiJy5qb2luKGRhdGEua2V5d29yZHMpICsgJyInCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2Zvcm1hdF91bml0cyddID0gJycuam9pbihkYXRhLmZvcm1hdF91bml0cykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsncGFyc2VfYXJndW1lbnRzJ10gPSAnLCAnLmpvaW4oZGF0YS5wYXJzZV9hcmd1bWVudHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2ltcGxfcGFyYW1ldGVycyddID0gIiwgIi5qb2luKGRhdGEuaW1wbF9wYXJhbWV0ZXJzKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydpbXBsX2FyZ3VtZW50cyddID0gIiwgIi5qb2luKGRhdGEuaW1wbF9hcmd1bWVudHMpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3JldHVybl9jb252ZXJzaW9uJ10gPSAiIi5qb2luKGRhdGEucmV0dXJuX2NvbnZlcnNpb24pLnJzdHJpcCgpCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ2NsZWFudXAnXSA9ICIiLmpvaW4oZGF0YS5jbGVhbnVwKQorICAgICAgICB0ZW1wbGF0ZV9kaWN0WydyZXR1cm5fdmFsdWUnXSA9IGRhdGEucmV0dXJuX3ZhbHVlCisKKyAgICAgICAgIyB1c2VkIGJ5IHVucGFjayB0dXBsZSBjb2RlIGdlbmVyYXRvcgorICAgICAgICBpZ25vcmVfc2VsZiA9IC0xIGlmIGlzaW5zdGFuY2UoY29udmVydGVyc1swXSwgc2VsZl9jb252ZXJ0ZXIpIGVsc2UgMAorICAgICAgICB1bnBhY2tfbWluID0gZmlyc3Rfb3B0aW9uYWwKKyAgICAgICAgdW5wYWNrX21heCA9IGxlbihzZWxmbGVzcykKKyAgICAgICAgdGVtcGxhdGVfZGljdFsndW5wYWNrX21pbiddID0gc3RyKHVucGFja19taW4pCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3VucGFja19tYXgnXSA9IHN0cih1bnBhY2tfbWF4KQorCisgICAgICAgIGlmIGhhc19vcHRpb25fZ3JvdXBzOgorICAgICAgICAgICAgc2VsZi5yZW5kZXJfb3B0aW9uX2dyb3VwX3BhcnNpbmcoZiwgdGVtcGxhdGVfZGljdCkKKworICAgICAgICBmb3IgbmFtZSwgZGVzdGluYXRpb24gaW4gY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbbmFtZV0KKyAgICAgICAgICAgIGlmIGhhc19vcHRpb25fZ3JvdXBzOgorICAgICAgICAgICAgICAgIHRlbXBsYXRlID0gbGluZWFyX2Zvcm1hdCh0ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbl9ncm91cF9wYXJzaW5nPXRlbXBsYXRlX2RpY3RbJ29wdGlvbl9ncm91cF9wYXJzaW5nJ10pCisgICAgICAgICAgICB0ZW1wbGF0ZSA9IGxpbmVhcl9mb3JtYXQodGVtcGxhdGUsCisgICAgICAgICAgICAgICAgZGVjbGFyYXRpb25zPXRlbXBsYXRlX2RpY3RbJ2RlY2xhcmF0aW9ucyddLAorICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJzaW9uPXRlbXBsYXRlX2RpY3RbJ3JldHVybl9jb252ZXJzaW9uJ10sCisgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZXJzPXRlbXBsYXRlX2RpY3RbJ2luaXRpYWxpemVycyddLAorICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnM9dGVtcGxhdGVfZGljdFsnbW9kaWZpY2F0aW9ucyddLAorICAgICAgICAgICAgICAgIGNsZWFudXA9dGVtcGxhdGVfZGljdFsnY2xlYW51cCddLAorICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgIyBPbmx5IGdlbmVyYXRlIHRoZSAiZXhpdDoiIGxhYmVsCisgICAgICAgICAgICAjIGlmIHdlIGhhdmUgYW55IGdvdG9zCisgICAgICAgICAgICBuZWVkX2V4aXRfbGFiZWwgPSAiZ290byBleGl0OyIgaW4gdGVtcGxhdGUKKyAgICAgICAgICAgIHRlbXBsYXRlID0gbGluZWFyX2Zvcm1hdCh0ZW1wbGF0ZSwKKyAgICAgICAgICAgICAgICBleGl0X2xhYmVsPSJleGl0OiIgaWYgbmVlZF9leGl0X2xhYmVsIGVsc2UgJycKKyAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgIHMgPSB0ZW1wbGF0ZS5mb3JtYXRfbWFwKHRlbXBsYXRlX2RpY3QpCisKKyAgICAgICAgICAgIGlmIGNsaW5pYy5saW5lX3ByZWZpeDoKKyAgICAgICAgICAgICAgICBzID0gaW5kZW50X2FsbF9saW5lcyhzLCBjbGluaWMubGluZV9wcmVmaXgpCisgICAgICAgICAgICBpZiBjbGluaWMubGluZV9zdWZmaXg6CisgICAgICAgICAgICAgICAgcyA9IHN1ZmZpeF9hbGxfbGluZXMocywgY2xpbmljLmxpbmVfc3VmZml4KQorCisgICAgICAgICAgICBkZXN0aW5hdGlvbi5hcHBlbmQocykKKworICAgICAgICByZXR1cm4gY2xpbmljLmdldF9kZXN0aW5hdGlvbignYmxvY2snKS5kdW1wKCkKKworCisKKworQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKK2RlZiBPdmVycmlkZVN0ZGlvV2l0aChzdGRvdXQpOgorICAgIHNhdmVkX3N0ZG91dCA9IHN5cy5zdGRvdXQKKyAgICBzeXMuc3Rkb3V0ID0gc3Rkb3V0CisgICAgdHJ5OgorICAgICAgICB5aWVsZAorICAgIGZpbmFsbHk6CisgICAgICAgIGFzc2VydCBzeXMuc3Rkb3V0IGlzIHN0ZG91dAorICAgICAgICBzeXMuc3Rkb3V0ID0gc2F2ZWRfc3Rkb3V0CisKKworZGVmIGNyZWF0ZV9yZWdleChiZWZvcmUsIGFmdGVyLCB3b3JkPVRydWUsIHdob2xlX2xpbmU9VHJ1ZSk6CisgICAgIiIiQ3JlYXRlIGFuIHJlIG9iamVjdCBmb3IgbWF0Y2hpbmcgbWFya2VyIGxpbmVzLiIiIgorICAgIGdyb3VwX3JlID0gIlx3KyIgaWYgd29yZCBlbHNlICIuKyIKKyAgICBwYXR0ZXJuID0gcid7fSh7fSl7fScKKyAgICBpZiB3aG9sZV9saW5lOgorICAgICAgICBwYXR0ZXJuID0gJ14nICsgcGF0dGVybiArICckJworICAgIHBhdHRlcm4gPSBwYXR0ZXJuLmZvcm1hdChyZS5lc2NhcGUoYmVmb3JlKSwgZ3JvdXBfcmUsIHJlLmVzY2FwZShhZnRlcikpCisgICAgcmV0dXJuIHJlLmNvbXBpbGUocGF0dGVybikKKworCitjbGFzcyBCbG9jazoKKyAgICByIiIiCisgICAgUmVwcmVzZW50cyBhIHNpbmdsZSBibG9jayBvZiB0ZXh0IGVtYmVkZGVkIGluCisgICAgYW5vdGhlciBmaWxlLiAgSWYgZHNsX25hbWUgaXMgTm9uZSwgdGhlIGJsb2NrIHJlcHJlc2VudHMKKyAgICB2ZXJiYXRpbSB0ZXh0LCByYXcgb3JpZ2luYWwgdGV4dCBmcm9tIHRoZSBmaWxlLCBpbgorICAgIHdoaWNoIGNhc2UgImlucHV0IiB3aWxsIGJlIHRoZSBvbmx5IG5vbi1mYWxzZSBtZW1iZXIuCisgICAgSWYgZHNsX25hbWUgaXMgbm90IE5vbmUsIHRoZSBibG9jayByZXByZXNlbnRzIGEgQ2xpbmljCisgICAgYmxvY2suCisKKyAgICBpbnB1dCBpcyBhbHdheXMgc3RyLCB3aXRoIGVtYmVkZGVkIFxuIGNoYXJhY3RlcnMuCisgICAgaW5wdXQgcmVwcmVzZW50cyB0aGUgb3JpZ2luYWwgdGV4dCBmcm9tIHRoZSBmaWxlOworICAgIGlmIGl0J3MgYSBDbGluaWMgYmxvY2ssIGl0IGlzIHRoZSBvcmlnaW5hbCB0ZXh0IHdpdGgKKyAgICB0aGUgYm9keV9wcmVmaXggYW5kIHJlZHVuZGFudCBsZWFkaW5nIHdoaXRlc3BhY2UgcmVtb3ZlZC4KKworICAgIGRzbF9uYW1lIGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIElmIHN0ciwgaXQncyB0aGUgdGV4dAorICAgIGZvdW5kIG9uIHRoZSBzdGFydCBsaW5lIG9mIHRoZSBibG9jayBiZXR3ZWVuIHRoZSBzcXVhcmUKKyAgICBicmFja2V0cy4KKworICAgIHNpZ25hdHVyZXMgaXMgZWl0aGVyIGxpc3Qgb3IgTm9uZS4gIElmIGl0J3MgYSBsaXN0LAorICAgIGl0IG1heSBvbmx5IGNvbnRhaW4gY2xpbmljLk1vZHVsZSwgY2xpbmljLkNsYXNzLCBhbmQKKyAgICBjbGluaWMuRnVuY3Rpb24gb2JqZWN0cy4gIEF0IHRoZSBtb21lbnQgaXQgc2hvdWxkCisgICAgY29udGFpbiBhdCBtb3N0IG9uZSBvZiBlYWNoLgorCisgICAgb3V0cHV0IGlzIGVpdGhlciBzdHIgb3IgTm9uZS4gIElmIHN0ciwgaXQncyB0aGUgb3V0cHV0CisgICAgZnJvbSB0aGlzIGJsb2NrLCB3aXRoIGVtYmVkZGVkICdcbicgY2hhcmFjdGVycy4KKworICAgIGluZGVudCBpcyBlaXRoZXIgc3RyIG9yIE5vbmUuICBJdCdzIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UKKyAgICB0aGF0IHdhcyBmb3VuZCBvbiBldmVyeSBsaW5lIG9mIGlucHV0LiAgKElmIGJvZHlfcHJlZml4IGlzCisgICAgbm90IGVtcHR5LCB0aGlzIGlzIHRoZSBpbmRlbnQgKmFmdGVyKiByZW1vdmluZyB0aGUKKyAgICBib2R5X3ByZWZpeC4pCisKKyAgICBwcmVpbmRlbnQgaXMgZWl0aGVyIHN0ciBvciBOb25lLiAgSXQncyB0aGUgd2hpdGVzcGFjZSB0aGF0CisgICAgd2FzIGZvdW5kIGluIGZyb250IG9mIGV2ZXJ5IGxpbmUgb2YgaW5wdXQgKmJlZm9yZSogdGhlCisgICAgImJvZHlfcHJlZml4IiAoc2VlIHRoZSBMYW5ndWFnZSBvYmplY3QpLiAgSWYgYm9keV9wcmVmaXgKKyAgICBpcyBlbXB0eSwgcHJlaW5kZW50IG11c3QgYWx3YXlzIGJlIGVtcHR5IHRvby4KKworICAgIFRvIGlsbHVzdHJhdGUgaW5kZW50IGFuZCBwcmVpbmRlbnQ6IEFzc3VtZSB0aGF0ICdfJworICAgIHJlcHJlc2VudHMgd2hpdGVzcGFjZS4gIElmIHRoZSBibG9jayBwcm9jZXNzZWQgd2FzIGluIGEKKyAgICBQeXRob24gZmlsZSwgYW5kIGxvb2tlZCBsaWtlIHRoaXM6CisgICAgICBfX19fIy8qW3B5dGhvbl0KKyAgICAgIF9fX18jX19mb3IgYSBpbiByYW5nZSgyMCk6CisgICAgICBfX19fI19fX19wcmludChhKQorICAgICAgX19fXyNbcHl0aG9uXSovCisgICAgInByZWluZGVudCIgd291bGQgYmUgIl9fX18iIGFuZCAiaW5kZW50IiB3b3VsZCBiZSAiX18iLgorCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0LCBkc2xfbmFtZT1Ob25lLCBzaWduYXR1cmVzPU5vbmUsIG91dHB1dD1Ob25lLCBpbmRlbnQ9JycsIHByZWluZGVudD0nJyk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGlucHV0LCBzdHIpCisgICAgICAgIHNlbGYuaW5wdXQgPSBpbnB1dAorICAgICAgICBzZWxmLmRzbF9uYW1lID0gZHNsX25hbWUKKyAgICAgICAgc2VsZi5zaWduYXR1cmVzID0gc2lnbmF0dXJlcyBvciBbXQorICAgICAgICBzZWxmLm91dHB1dCA9IG91dHB1dAorICAgICAgICBzZWxmLmluZGVudCA9IGluZGVudAorICAgICAgICBzZWxmLnByZWluZGVudCA9IHByZWluZGVudAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICBkc2xfbmFtZSA9IHNlbGYuZHNsX25hbWUgb3IgInRleHQiCisgICAgICAgIGRlZiBzdW1tYXJpemUocyk6CisgICAgICAgICAgICBzID0gcmVwcihzKQorICAgICAgICAgICAgaWYgbGVuKHMpID4gMzA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNbOjI2XSArICIuLi4iICsgc1swXQorICAgICAgICAgICAgcmV0dXJuIHMKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oKAorICAgICAgICAgICAgIjxCbG9jayAiLCBkc2xfbmFtZSwgIiBpbnB1dD0iLCBzdW1tYXJpemUoc2VsZi5pbnB1dCksICIgb3V0cHV0PSIsIHN1bW1hcml6ZShzZWxmLm91dHB1dCksICI+IikpCisKKworY2xhc3MgQmxvY2tQYXJzZXI6CisgICAgIiIiCisgICAgQmxvY2stb3JpZW50ZWQgcGFyc2VyIGZvciBBcmd1bWVudCBDbGluaWMuCisgICAgSXRlcmF0b3IsIHlpZWxkcyBCbG9jayBvYmplY3RzLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGlucHV0LCBsYW5ndWFnZSwgKiwgdmVyaWZ5PVRydWUpOgorICAgICAgICAiIiIKKyAgICAgICAgImlucHV0IiBzaG91bGQgYmUgYSBzdHIgb2JqZWN0CisgICAgICAgIHdpdGggZW1iZWRkZWQgXG4gY2hhcmFjdGVycy4KKworICAgICAgICAibGFuZ3VhZ2UiIHNob3VsZCBiZSBhIExhbmd1YWdlIG9iamVjdC4KKyAgICAgICAgIiIiCisgICAgICAgIGxhbmd1YWdlLnZhbGlkYXRlKCkKKworICAgICAgICBzZWxmLmlucHV0ID0gY29sbGVjdGlvbnMuZGVxdWUocmV2ZXJzZWQoaW5wdXQuc3BsaXRsaW5lcyhrZWVwZW5kcz1UcnVlKSkpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyID0gMAorCisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBiZWZvcmUsIF8sIGFmdGVyID0gbGFuZ3VhZ2Uuc3RhcnRfbGluZS5wYXJ0aXRpb24oJ3tkc2xfbmFtZX0nKQorICAgICAgICBhc3NlcnQgXyA9PSAne2RzbF9uYW1lfScKKyAgICAgICAgc2VsZi5maW5kX3N0YXJ0X3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIsIHdob2xlX2xpbmU9RmFsc2UpCisgICAgICAgIHNlbGYuc3RhcnRfcmUgPSBjcmVhdGVfcmVnZXgoYmVmb3JlLCBhZnRlcikKKyAgICAgICAgc2VsZi52ZXJpZnkgPSB2ZXJpZnkKKyAgICAgICAgc2VsZi5sYXN0X2NoZWNrc3VtX3JlID0gTm9uZQorICAgICAgICBzZWxmLmxhc3RfZHNsX25hbWUgPSBOb25lCisgICAgICAgIHNlbGYuZHNsX25hbWUgPSBOb25lCisgICAgICAgIHNlbGYuZmlyc3RfYmxvY2sgPSBUcnVlCisKKyAgICBkZWYgX19pdGVyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgX19uZXh0X18oc2VsZik6CisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgICAgICByYWlzZSBTdG9wSXRlcmF0aW9uCisKKyAgICAgICAgICAgIGlmIHNlbGYuZHNsX25hbWU6CisgICAgICAgICAgICAgICAgcmV0dXJuX3ZhbHVlID0gc2VsZi5wYXJzZV9jbGluaWNfYmxvY2soc2VsZi5kc2xfbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmRzbF9uYW1lID0gTm9uZQorICAgICAgICAgICAgICAgIHNlbGYuZmlyc3RfYmxvY2sgPSBGYWxzZQorICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5fdmFsdWUKKyAgICAgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZV92ZXJiYXRpbV9ibG9jaygpCisgICAgICAgICAgICBpZiBzZWxmLmZpcnN0X2Jsb2NrIGFuZCBub3QgYmxvY2suaW5wdXQ6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHNlbGYuZmlyc3RfYmxvY2sgPSBGYWxzZQorICAgICAgICAgICAgcmV0dXJuIGJsb2NrCisKKworICAgIGRlZiBpc19zdGFydF9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBtYXRjaCA9IHNlbGYuc3RhcnRfcmUubWF0Y2gobGluZS5sc3RyaXAoKSkKKyAgICAgICAgcmV0dXJuIG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorCisgICAgZGVmIF9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLmxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAgbGluZSA9IHNlbGYuaW5wdXQucG9wKCkKKyAgICAgICAgc2VsZi5sYW5ndWFnZS5wYXJzZV9saW5lKGxpbmUpCisgICAgICAgIHJldHVybiBsaW5lCisKKyAgICBkZWYgcGFyc2VfdmVyYmF0aW1fYmxvY2soc2VsZik6CisgICAgICAgIGFkZCwgb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyCisKKyAgICAgICAgd2hpbGUgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9saW5lKCkKKyAgICAgICAgICAgIGRzbF9uYW1lID0gc2VsZi5pc19zdGFydF9saW5lKGxpbmUpCisgICAgICAgICAgICBpZiBkc2xfbmFtZToKKyAgICAgICAgICAgICAgICBzZWxmLmRzbF9uYW1lID0gZHNsX25hbWUKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgYWRkKGxpbmUpCisKKyAgICAgICAgcmV0dXJuIEJsb2NrKG91dHB1dCgpKQorCisgICAgZGVmIHBhcnNlX2NsaW5pY19ibG9jayhzZWxmLCBkc2xfbmFtZSk6CisgICAgICAgIGlucHV0X2FkZCwgaW5wdXRfb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIHNlbGYuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIgPSBzZWxmLmxpbmVfbnVtYmVyICsgMQorICAgICAgICBzdG9wX2xpbmUgPSBzZWxmLmxhbmd1YWdlLnN0b3BfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpCisgICAgICAgIGJvZHlfcHJlZml4ID0gc2VsZi5sYW5ndWFnZS5ib2R5X3ByZWZpeC5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpCisKKyAgICAgICAgZGVmIGlzX3N0b3BfbGluZShsaW5lKToKKyAgICAgICAgICAgICMgbWFrZSBzdXJlIHRvIHJlY29nbml6ZSBzdG9wIGxpbmUgZXZlbiBpZiBpdAorICAgICAgICAgICAgIyBkb2Vzbid0IGVuZCB3aXRoIEVPTCAoaXQgY291bGQgYmUgdGhlIHZlcnkgZW5kIG9mIHRoZSBmaWxlKQorICAgICAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChzdG9wX2xpbmUpOgorICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgcmVtYWluZGVyID0gbGluZVtsZW4oc3RvcF9saW5lKTpdCisgICAgICAgICAgICByZXR1cm4gKG5vdCByZW1haW5kZXIpIG9yIHJlbWFpbmRlci5pc3NwYWNlKCkKKworICAgICAgICAjIGNvbnN1bWUgYm9keSBvZiBwcm9ncmFtCisgICAgICAgIHdoaWxlIHNlbGYuaW5wdXQ6CisgICAgICAgICAgICBsaW5lID0gc2VsZi5fbGluZSgpCisgICAgICAgICAgICBpZiBpc19zdG9wX2xpbmUobGluZSkgb3Igc2VsZi5pc19zdGFydF9saW5lKGxpbmUpOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBpZiBib2R5X3ByZWZpeDoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZS5sc3RyaXAoKQorICAgICAgICAgICAgICAgIGFzc2VydCBsaW5lLnN0YXJ0c3dpdGgoYm9keV9wcmVmaXgpCisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbbGVuKGJvZHlfcHJlZml4KTpdCisgICAgICAgICAgICBpbnB1dF9hZGQobGluZSkKKworICAgICAgICAjIGNvbnN1bWUgb3V0cHV0IGFuZCBjaGVja3N1bSBsaW5lLCBpZiBwcmVzZW50LgorICAgICAgICBpZiBzZWxmLmxhc3RfZHNsX25hbWUgPT0gZHNsX25hbWU6CisgICAgICAgICAgICBjaGVja3N1bV9yZSA9IHNlbGYubGFzdF9jaGVja3N1bV9yZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYmVmb3JlLCBfLCBhZnRlciA9IHNlbGYubGFuZ3VhZ2UuY2hlY2tzdW1fbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUsIGFyZ3VtZW50cz0ne2FyZ3VtZW50c30nKS5wYXJ0aXRpb24oJ3thcmd1bWVudHN9JykKKyAgICAgICAgICAgIGFzc2VydCBfID09ICd7YXJndW1lbnRzfScKKyAgICAgICAgICAgIGNoZWNrc3VtX3JlID0gY3JlYXRlX3JlZ2V4KGJlZm9yZSwgYWZ0ZXIsIHdvcmQ9RmFsc2UpCisgICAgICAgICAgICBzZWxmLmxhc3RfZHNsX25hbWUgPSBkc2xfbmFtZQorICAgICAgICAgICAgc2VsZi5sYXN0X2NoZWNrc3VtX3JlID0gY2hlY2tzdW1fcmUKKworICAgICAgICAjIHNjYW4gZm9yd2FyZCBmb3IgY2hlY2tzdW0gbGluZQorICAgICAgICBvdXRwdXRfYWRkLCBvdXRwdXRfb3V0cHV0ID0gdGV4dF9hY2N1bXVsYXRvcigpCisgICAgICAgIGFyZ3VtZW50cyA9IE5vbmUKKyAgICAgICAgd2hpbGUgc2VsZi5pbnB1dDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLl9saW5lKCkKKyAgICAgICAgICAgIG1hdGNoID0gY2hlY2tzdW1fcmUubWF0Y2gobGluZS5sc3RyaXAoKSkKKyAgICAgICAgICAgIGFyZ3VtZW50cyA9IG1hdGNoLmdyb3VwKDEpIGlmIG1hdGNoIGVsc2UgTm9uZQorICAgICAgICAgICAgaWYgYXJndW1lbnRzOgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBvdXRwdXRfYWRkKGxpbmUpCisgICAgICAgICAgICBpZiBzZWxmLmlzX3N0YXJ0X2xpbmUobGluZSk6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICBvdXRwdXQgPSBvdXRwdXRfb3V0cHV0KCkKKyAgICAgICAgaWYgYXJndW1lbnRzOgorICAgICAgICAgICAgZCA9IHt9CisgICAgICAgICAgICBmb3IgZmllbGQgaW4gc2hsZXguc3BsaXQoYXJndW1lbnRzKToKKyAgICAgICAgICAgICAgICBuYW1lLCBlcXVhbHMsIHZhbHVlID0gZmllbGQucGFydGl0aW9uKCc9JykKKyAgICAgICAgICAgICAgICBpZiBub3QgZXF1YWxzOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJNYW5nbGVkIEFyZ3VtZW50IENsaW5pYyBtYXJrZXIgbGluZTogeyFyfSIuZm9ybWF0KGxpbmUpKQorICAgICAgICAgICAgICAgIGRbbmFtZS5zdHJpcCgpXSA9IHZhbHVlLnN0cmlwKCkKKworICAgICAgICAgICAgaWYgc2VsZi52ZXJpZnk6CisgICAgICAgICAgICAgICAgaWYgJ2lucHV0JyBpbiBkOgorICAgICAgICAgICAgICAgICAgICBjaGVja3N1bSA9IGRbJ291dHB1dCddCisgICAgICAgICAgICAgICAgICAgIGlucHV0X2NoZWNrc3VtID0gZFsnaW5wdXQnXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGNoZWNrc3VtID0gZFsnY2hlY2tzdW0nXQorICAgICAgICAgICAgICAgICAgICBpbnB1dF9jaGVja3N1bSA9IE5vbmUKKworICAgICAgICAgICAgICAgIGNvbXB1dGVkID0gY29tcHV0ZV9jaGVja3N1bShvdXRwdXQsIGxlbihjaGVja3N1bSkpCisgICAgICAgICAgICAgICAgaWYgY2hlY2tzdW0gIT0gY29tcHV0ZWQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkNoZWNrc3VtIG1pc21hdGNoIVxuRXhwZWN0ZWQ6IHt9XG5Db21wdXRlZDoge31cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU3VnZ2VzdGVkIGZpeDogcmVtb3ZlIGFsbCBnZW5lcmF0ZWQgY29kZSBpbmNsdWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgZW5kIG1hcmtlcixcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAib3IgdXNlIHRoZSAnLWYnIG9wdGlvbi4iCisgICAgICAgICAgICAgICAgICAgICAgICAuZm9ybWF0KGNoZWNrc3VtLCBjb21wdXRlZCkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIHB1dCBiYWNrIG91dHB1dAorICAgICAgICAgICAgb3V0cHV0X2xpbmVzID0gb3V0cHV0LnNwbGl0bGluZXMoa2VlcGVuZHM9VHJ1ZSkKKyAgICAgICAgICAgIHNlbGYubGluZV9udW1iZXIgLT0gbGVuKG91dHB1dF9saW5lcykKKyAgICAgICAgICAgIHNlbGYuaW5wdXQuZXh0ZW5kKHJldmVyc2VkKG91dHB1dF9saW5lcykpCisgICAgICAgICAgICBvdXRwdXQgPSBOb25lCisKKyAgICAgICAgcmV0dXJuIEJsb2NrKGlucHV0X291dHB1dCgpLCBkc2xfbmFtZSwgb3V0cHV0PW91dHB1dCkKKworCitjbGFzcyBCbG9ja1ByaW50ZXI6CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGFuZ3VhZ2UsIGY9Tm9uZSk6CisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBzZWxmLmYgPSBmIG9yIGlvLlN0cmluZ0lPKCkKKworICAgIGRlZiBwcmludF9ibG9jayhzZWxmLCBibG9jayk6CisgICAgICAgIGlucHV0ID0gYmxvY2suaW5wdXQKKyAgICAgICAgb3V0cHV0ID0gYmxvY2sub3V0cHV0CisgICAgICAgIGRzbF9uYW1lID0gYmxvY2suZHNsX25hbWUKKyAgICAgICAgd3JpdGUgPSBzZWxmLmYud3JpdGUKKworICAgICAgICBhc3NlcnQgbm90ICgoZHNsX25hbWUgPT0gTm9uZSkgXiAob3V0cHV0ID09IE5vbmUpKSwgInlvdSBtdXN0IHNwZWNpZnkgZHNsX25hbWUgYW5kIG91dHB1dCB0b2dldGhlciwgZHNsX25hbWUgIiArIHJlcHIoZHNsX25hbWUpCisKKyAgICAgICAgaWYgbm90IGRzbF9uYW1lOgorICAgICAgICAgICAgd3JpdGUoaW5wdXQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLnN0YXJ0X2xpbmUuZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKSkKKyAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICBib2R5X3ByZWZpeCA9IHNlbGYubGFuZ3VhZ2UuYm9keV9wcmVmaXguZm9ybWF0KGRzbF9uYW1lPWRzbF9uYW1lKQorICAgICAgICBpZiBub3QgYm9keV9wcmVmaXg6CisgICAgICAgICAgICB3cml0ZShpbnB1dCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGlucHV0LnNwbGl0KCdcbicpOgorICAgICAgICAgICAgICAgIHdyaXRlKGJvZHlfcHJlZml4KQorICAgICAgICAgICAgICAgIHdyaXRlKGxpbmUpCisgICAgICAgICAgICAgICAgd3JpdGUoIlxuIikKKworICAgICAgICB3cml0ZShzZWxmLmxhbmd1YWdlLnN0b3BfbGluZS5mb3JtYXQoZHNsX25hbWU9ZHNsX25hbWUpKQorICAgICAgICB3cml0ZSgiXG4iKQorCisgICAgICAgIGlucHV0ID0gJycuam9pbihibG9jay5pbnB1dCkKKyAgICAgICAgb3V0cHV0ID0gJycuam9pbihibG9jay5vdXRwdXQpCisgICAgICAgIGlmIG91dHB1dDoKKyAgICAgICAgICAgIGlmIG5vdCBvdXRwdXQuZW5kc3dpdGgoJ1xuJyk6CisgICAgICAgICAgICAgICAgb3V0cHV0ICs9ICdcbicKKyAgICAgICAgICAgIHdyaXRlKG91dHB1dCkKKworICAgICAgICBhcmd1bWVudHM9Im91dHB1dD17fSBpbnB1dD17fSIuZm9ybWF0KGNvbXB1dGVfY2hlY2tzdW0ob3V0cHV0LCAxNiksIGNvbXB1dGVfY2hlY2tzdW0oaW5wdXQsIDE2KSkKKyAgICAgICAgd3JpdGUoc2VsZi5sYW5ndWFnZS5jaGVja3N1bV9saW5lLmZvcm1hdChkc2xfbmFtZT1kc2xfbmFtZSwgYXJndW1lbnRzPWFyZ3VtZW50cykpCisgICAgICAgIHdyaXRlKCJcbiIpCisKKyAgICBkZWYgd3JpdGUoc2VsZiwgdGV4dCk6CisgICAgICAgIHNlbGYuZi53cml0ZSh0ZXh0KQorCisKK2NsYXNzIERlc3RpbmF0aW9uOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCB0eXBlLCBjbGluaWMsICphcmdzKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisgICAgICAgIHNlbGYuY2xpbmljID0gY2xpbmljCisgICAgICAgIHZhbGlkX3R5cGVzID0gKCdidWZmZXInLCAnZmlsZScsICdzdXBwcmVzcycsICd0d28tcGFzcycpCisgICAgICAgIGlmIHR5cGUgbm90IGluIHZhbGlkX3R5cGVzOgorICAgICAgICAgICAgZmFpbCgiSW52YWxpZCBkZXN0aW5hdGlvbiB0eXBlICIgKyByZXByKHR5cGUpICsgIiBmb3IgIiArIG5hbWUgKyAiICwgbXVzdCBiZSAiICsgJywgJy5qb2luKHZhbGlkX3R5cGVzKSkKKyAgICAgICAgZXh0cmFfYXJndW1lbnRzID0gMSBpZiB0eXBlID09ICJmaWxlIiBlbHNlIDAKKyAgICAgICAgaWYgbGVuKGFyZ3MpIDwgZXh0cmFfYXJndW1lbnRzOgorICAgICAgICAgICAgZmFpbCgiTm90IGVub3VnaCBhcmd1bWVudHMgZm9yIGRlc3RpbmF0aW9uICIgKyBuYW1lICsgIiBuZXcgIiArIHR5cGUpCisgICAgICAgIGlmIGxlbihhcmdzKSA+IGV4dHJhX2FyZ3VtZW50czoKKyAgICAgICAgICAgIGZhaWwoIlRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZGVzdGluYXRpb24gIiArIG5hbWUgKyAiIG5ldyAiICsgdHlwZSkKKyAgICAgICAgaWYgdHlwZSA9PSdmaWxlJzoKKyAgICAgICAgICAgIGQgPSB7fQorICAgICAgICAgICAgZmlsZW5hbWUgPSBjbGluaWMuZmlsZW5hbWUKKyAgICAgICAgICAgIGRbJ3BhdGgnXSA9IGZpbGVuYW1lCisgICAgICAgICAgICBkaXJuYW1lLCBiYXNlbmFtZSA9IG9zLnBhdGguc3BsaXQoZmlsZW5hbWUpCisgICAgICAgICAgICBpZiBub3QgZGlybmFtZToKKyAgICAgICAgICAgICAgICBkaXJuYW1lID0gJy4nCisgICAgICAgICAgICBkWydkaXJuYW1lJ10gPSBkaXJuYW1lCisgICAgICAgICAgICBkWydiYXNlbmFtZSddID0gYmFzZW5hbWUKKyAgICAgICAgICAgIGRbJ2Jhc2VuYW1lX3Jvb3QnXSwgZFsnYmFzZW5hbWVfZXh0ZW5zaW9uJ10gPSBvcy5wYXRoLnNwbGl0ZXh0KGZpbGVuYW1lKQorICAgICAgICAgICAgc2VsZi5maWxlbmFtZSA9IGFyZ3NbMF0uZm9ybWF0X21hcChkKQorICAgICAgICBpZiB0eXBlID09ICd0d28tcGFzcyc6CisgICAgICAgICAgICBzZWxmLmlkID0gTm9uZQorCisgICAgICAgIHNlbGYudGV4dCwgc2VsZi5hcHBlbmQsIHNlbGYuX2R1bXAgPSBfdGV4dF9hY2N1bXVsYXRvcigpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIGlmIHNlbGYudHlwZSA9PSAnZmlsZSc6CisgICAgICAgICAgICBmaWxlX3JlcHIgPSAiICIgKyByZXByKHNlbGYuZmlsZW5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmaWxlX3JlcHIgPSAnJworICAgICAgICByZXR1cm4gIiIuam9pbigoIjxEZXN0aW5hdGlvbiAiLCBzZWxmLm5hbWUsICIgIiwgc2VsZi50eXBlLCBmaWxlX3JlcHIsICI+IikpCisKKyAgICBkZWYgY2xlYXIoc2VsZik6CisgICAgICAgIGlmIHNlbGYudHlwZSAhPSAnYnVmZmVyJzoKKyAgICAgICAgICAgIGZhaWwoIkNhbid0IGNsZWFyIGRlc3RpbmF0aW9uIiArIHNlbGYubmFtZSArICIgLCBpdCdzIG5vdCBvZiB0eXBlIGJ1ZmZlciIpCisgICAgICAgIHNlbGYudGV4dC5jbGVhcigpCisKKyAgICBkZWYgZHVtcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi50eXBlID09ICd0d28tcGFzcyc6CisgICAgICAgICAgICBpZiBzZWxmLmlkIGlzIE5vbmU6CisgICAgICAgICAgICAgICAgc2VsZi5pZCA9IHN0cih1dWlkLnV1aWQ0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaWQKKyAgICAgICAgICAgIGZhaWwoIllvdSBjYW4gb25seSBkdW1wIGEgdHdvLXBhc3MgYnVmZmVyIGV4YWN0bHkgb25jZSEiKQorICAgICAgICByZXR1cm4gc2VsZi5fZHVtcCgpCisKKworIyBtYXBzIHN0cmluZ3MgdG8gTGFuZ3VhZ2Ugb2JqZWN0cy4KKyMgImxhbmd1YWdlcyIgbWFwcyB0aGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgKCJDIiwgIlB5dGhvbiIpLgorIyAiZXh0ZW5zaW9ucyIgbWFwcyB0aGUgZmlsZSBleHRlbnNpb24gKCJjIiwgInB5IikuCitsYW5ndWFnZXMgPSB7ICdDJzogQ0xhbmd1YWdlLCAnUHl0aG9uJzogUHl0aG9uTGFuZ3VhZ2UgfQorZXh0ZW5zaW9ucyA9IHsgbmFtZTogQ0xhbmd1YWdlIGZvciBuYW1lIGluICJjIGNjIGNwcCBjeHggaCBoaCBocHAgaHh4Ii5zcGxpdCgpIH0KK2V4dGVuc2lvbnNbJ3B5J10gPSBQeXRob25MYW5ndWFnZQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlc2UgY2FsbGFibGVzIG11c3QgYmUgb2YgdGhlIGZvcm06CisjICAgZGVmIGZvbyhuYW1lLCBkZWZhdWx0LCAqLCAuLi4pCisjIFRoZSBjYWxsYWJsZSBtYXkgaGF2ZSBhbnkgbnVtYmVyIG9mIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorIyBUaGUgY2FsbGFibGUgbXVzdCByZXR1cm4gYSBDQ29udmVydGVyIG9iamVjdC4KKyMgVGhlIGNhbGxhYmxlIHNob3VsZCBub3QgY2FsbCBidWlsdGlucy5wcmludC4KK2NvbnZlcnRlcnMgPSB7fQorCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZXNlIGNhbGxhYmxlcyBmb2xsb3cgdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2UgZm9yICJjb252ZXJ0ZXJzIiBhYm92ZS4KKyMgbm90ZSBob3dldmVyIHRoYXQgdGhleSB3aWxsIG5ldmVyIGJlIGNhbGxlZCB3aXRoIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorbGVnYWN5X2NvbnZlcnRlcnMgPSB7fQorCisKKyMgbWFwcyBzdHJpbmdzIHRvIGNhbGxhYmxlcy4KKyMgdGhlc2UgY2FsbGFibGVzIG11c3QgYmUgb2YgdGhlIGZvcm06CisjICAgZGVmIGZvbygqLCAuLi4pCisjIFRoZSBjYWxsYWJsZSBtYXkgaGF2ZSBhbnkgbnVtYmVyIG9mIGtleXdvcmQtb25seSBwYXJhbWV0ZXJzLgorIyBUaGUgY2FsbGFibGUgbXVzdCByZXR1cm4gYSBDQ29udmVydGVyIG9iamVjdC4KKyMgVGhlIGNhbGxhYmxlIHNob3VsZCBub3QgY2FsbCBidWlsdGlucy5wcmludC4KK3JldHVybl9jb252ZXJ0ZXJzID0ge30KKworY2xpbmljID0gTm9uZQorY2xhc3MgQ2xpbmljOgorCisgICAgcHJlc2V0c190ZXh0ID0gIiIiCitwcmVzZXQgYmxvY2sKK2V2ZXJ5dGhpbmcgYmxvY2sKK2RvY3N0cmluZ19wcm90b3R5cGUgc3VwcHJlc3MKK3BhcnNlcl9wcm90b3R5cGUgc3VwcHJlc3MKK2NwcF9pZiBzdXBwcmVzcworY3BwX2VuZGlmIHN1cHByZXNzCittZXRob2RkZWZfaWZuZGVmIGJ1ZmZlcgorCitwcmVzZXQgb3JpZ2luYWwKK2V2ZXJ5dGhpbmcgYmxvY2sKK2RvY3N0cmluZ19wcm90b3R5cGUgc3VwcHJlc3MKK3BhcnNlcl9wcm90b3R5cGUgc3VwcHJlc3MKK2NwcF9pZiBzdXBwcmVzcworY3BwX2VuZGlmIHN1cHByZXNzCittZXRob2RkZWZfaWZuZGVmIGJ1ZmZlcgorCitwcmVzZXQgZmlsZQorZXZlcnl0aGluZyBmaWxlCitkb2NzdHJpbmdfcHJvdG90eXBlIHN1cHByZXNzCitwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCitpbXBsX2RlZmluaXRpb24gYmxvY2sKKworcHJlc2V0IGJ1ZmZlcgorZXZlcnl0aGluZyBidWZmZXIKK2RvY3N0cmluZ19wcm90b3R5cGUgc3VwcHJlc3MKK2ltcGxfcHJvdG90eXBlIHN1cHByZXNzCitwYXJzZXJfcHJvdG90eXBlIHN1cHByZXNzCitpbXBsX2RlZmluaXRpb24gYmxvY2sKKworcHJlc2V0IHBhcnRpYWwtYnVmZmVyCitldmVyeXRoaW5nIGJ1ZmZlcgorZG9jc3RyaW5nX3Byb3RvdHlwZSBibG9jaworaW1wbF9wcm90b3R5cGUgc3VwcHJlc3MKK21ldGhvZGRlZl9kZWZpbmUgYmxvY2sKK3BhcnNlcl9wcm90b3R5cGUgYmxvY2sKK2ltcGxfZGVmaW5pdGlvbiBibG9jaworCitwcmVzZXQgdHdvLXBhc3MKK2V2ZXJ5dGhpbmcgYnVmZmVyCitkb2NzdHJpbmdfcHJvdG90eXBlIHR3by1wYXNzCitpbXBsX3Byb3RvdHlwZSBzdXBwcmVzcworbWV0aG9kZGVmX2RlZmluZSB0d28tcGFzcworcGFyc2VyX3Byb3RvdHlwZSB0d28tcGFzcworaW1wbF9kZWZpbml0aW9uIGJsb2NrCisKKyIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxhbmd1YWdlLCBwcmludGVyPU5vbmUsICosIGZvcmNlPUZhbHNlLCB2ZXJpZnk9VHJ1ZSwgZmlsZW5hbWU9Tm9uZSk6CisgICAgICAgICMgbWFwcyBzdHJpbmdzIHRvIFBhcnNlciBvYmplY3RzLgorICAgICAgICAjIChpbnN0YW50aWF0ZWQgZnJvbSB0aGUgInBhcnNlcnMiIGdsb2JhbC4pCisgICAgICAgIHNlbGYucGFyc2VycyA9IHt9CisgICAgICAgIHNlbGYubGFuZ3VhZ2UgPSBsYW5ndWFnZQorICAgICAgICBpZiBwcmludGVyOgorICAgICAgICAgICAgZmFpbCgiQ3VzdG9tIHByaW50ZXJzIGFyZSBicm9rZW4gcmlnaHQgbm93IikKKyAgICAgICAgc2VsZi5wcmludGVyID0gcHJpbnRlciBvciBCbG9ja1ByaW50ZXIobGFuZ3VhZ2UpCisgICAgICAgIHNlbGYudmVyaWZ5ID0gdmVyaWZ5CisgICAgICAgIHNlbGYuZm9yY2UgPSBmb3JjZQorICAgICAgICBzZWxmLmZpbGVuYW1lID0gZmlsZW5hbWUKKyAgICAgICAgc2VsZi5tb2R1bGVzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuZnVuY3Rpb25zID0gW10KKworICAgICAgICBzZWxmLmxpbmVfcHJlZml4ID0gc2VsZi5saW5lX3N1ZmZpeCA9ICcnCisKKyAgICAgICAgc2VsZi5kZXN0aW5hdGlvbnMgPSB7fQorICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigiYmxvY2siLCAiYnVmZmVyIikKKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oInN1cHByZXNzIiwgInN1cHByZXNzIikKKyAgICAgICAgc2VsZi5hZGRfZGVzdGluYXRpb24oImJ1ZmZlciIsICJidWZmZXIiKQorICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigidHdvLXBhc3MiLCAidHdvLXBhc3MiKQorICAgICAgICBpZiBmaWxlbmFtZToKKyAgICAgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJmaWxlIiwgImZpbGUiLCAie2Rpcm5hbWV9L2NsaW5pYy97YmFzZW5hbWV9LmgiKQorCisgICAgICAgIGQgPSBzZWxmLmRlc3RpbmF0aW9ucy5nZXQKKyAgICAgICAgc2VsZi5maWVsZF9kZXN0aW5hdGlvbnMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgoCisgICAgICAgICAgICAoJ2NwcF9pZicsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICAgICAgKCdkb2NzdHJpbmdfcHJvdG90eXBlJywgZCgnc3VwcHJlc3MnKSksCisgICAgICAgICAgICAoJ2RvY3N0cmluZ19kZWZpbml0aW9uJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ21ldGhvZGRlZl9kZWZpbmUnLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgnaW1wbF9wcm90b3R5cGUnLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgncGFyc2VyX3Byb3RvdHlwZScsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICAgICAgKCdwYXJzZXJfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICAgICAgKCdjcHBfZW5kaWYnLCBkKCdzdXBwcmVzcycpKSwKKyAgICAgICAgICAgICgnbWV0aG9kZGVmX2lmbmRlZicsIGQoJ2J1ZmZlcicpKSwKKyAgICAgICAgICAgICgnaW1wbF9kZWZpbml0aW9uJywgZCgnYmxvY2snKSksCisgICAgICAgICkpCisKKyAgICAgICAgc2VsZi5maWVsZF9kZXN0aW5hdGlvbnNfc3RhY2sgPSBbXQorCisgICAgICAgIHNlbGYucHJlc2V0cyA9IHt9CisgICAgICAgIHByZXNldCA9IE5vbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5wcmVzZXRzX3RleHQuc3RyaXAoKS5zcGxpdCgnXG4nKToKKyAgICAgICAgICAgIGxpbmUgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgICAgIGlmIG5vdCBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBuYW1lLCB2YWx1ZSA9IGxpbmUuc3BsaXQoKQorICAgICAgICAgICAgaWYgbmFtZSA9PSAncHJlc2V0JzoKKyAgICAgICAgICAgICAgICBzZWxmLnByZXNldHNbdmFsdWVdID0gcHJlc2V0ID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID0gc2VsZi5nZXRfZGVzdGluYXRpb24odmFsdWUpCisKKyAgICAgICAgICAgIGlmIG5hbWUgPT0gJ2V2ZXJ5dGhpbmcnOgorICAgICAgICAgICAgICAgIGZvciBuYW1lIGluIHNlbGYuZmllbGRfZGVzdGluYXRpb25zOgorICAgICAgICAgICAgICAgICAgICBwcmVzZXRbbmFtZV0gPSBkZXN0aW5hdGlvbgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGFzc2VydCBuYW1lIGluIHNlbGYuZmllbGRfZGVzdGluYXRpb25zCisgICAgICAgICAgICBwcmVzZXRbbmFtZV0gPSBkZXN0aW5hdGlvbgorCisgICAgICAgIGdsb2JhbCBjbGluaWMKKyAgICAgICAgY2xpbmljID0gc2VsZgorCisgICAgZGVmIGdldF9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCBkZWZhdWx0PXVuc3BlY2lmaWVkKToKKyAgICAgICAgZCA9IHNlbGYuZGVzdGluYXRpb25zLmdldChuYW1lKQorICAgICAgICBpZiBub3QgZDoKKyAgICAgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0CisgICAgICAgICAgICBmYWlsKCJEZXN0aW5hdGlvbiBkb2VzIG5vdCBleGlzdDogIiArIHJlcHIobmFtZSkpCisgICAgICAgIHJldHVybiBkCisKKyAgICBkZWYgYWRkX2Rlc3RpbmF0aW9uKHNlbGYsIG5hbWUsIHR5cGUsICphcmdzKToKKyAgICAgICAgaWYgbmFtZSBpbiBzZWxmLmRlc3RpbmF0aW9uczoKKyAgICAgICAgICAgIGZhaWwoIkRlc3RpbmF0aW9uIGFscmVhZHkgZXhpc3RzOiAiICsgcmVwcihuYW1lKSkKKyAgICAgICAgc2VsZi5kZXN0aW5hdGlvbnNbbmFtZV0gPSBEZXN0aW5hdGlvbihuYW1lLCB0eXBlLCBzZWxmLCAqYXJncykKKworICAgIGRlZiBwYXJzZShzZWxmLCBpbnB1dCk6CisgICAgICAgIHByaW50ZXIgPSBzZWxmLnByaW50ZXIKKyAgICAgICAgc2VsZi5ibG9ja19wYXJzZXIgPSBCbG9ja1BhcnNlcihpbnB1dCwgc2VsZi5sYW5ndWFnZSwgdmVyaWZ5PXNlbGYudmVyaWZ5KQorICAgICAgICBmb3IgYmxvY2sgaW4gc2VsZi5ibG9ja19wYXJzZXI6CisgICAgICAgICAgICBkc2xfbmFtZSA9IGJsb2NrLmRzbF9uYW1lCisgICAgICAgICAgICBpZiBkc2xfbmFtZToKKyAgICAgICAgICAgICAgICBpZiBkc2xfbmFtZSBub3QgaW4gc2VsZi5wYXJzZXJzOgorICAgICAgICAgICAgICAgICAgICBhc3NlcnQgZHNsX25hbWUgaW4gcGFyc2VycywgIk5vIHBhcnNlciB0byBoYW5kbGUgeyFyfSBibG9jay4iLmZvcm1hdChkc2xfbmFtZSkKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wYXJzZXJzW2RzbF9uYW1lXSA9IHBhcnNlcnNbZHNsX25hbWVdKHNlbGYpCisgICAgICAgICAgICAgICAgcGFyc2VyID0gc2VsZi5wYXJzZXJzW2RzbF9uYW1lXQorICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICAgICAgICAgICAgICAgIGZhaWwoJ0V4Y2VwdGlvbiByYWlzZWQgZHVyaW5nIHBhcnNpbmc6XG4nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICB0cmFjZWJhY2suZm9ybWF0X2V4YygpLnJzdHJpcCgpKQorICAgICAgICAgICAgcHJpbnRlci5wcmludF9ibG9jayhibG9jaykKKworICAgICAgICBzZWNvbmRfcGFzc19yZXBsYWNlbWVudHMgPSB7fQorCisgICAgICAgIGZvciBuYW1lLCBkZXN0aW5hdGlvbiBpbiBzZWxmLmRlc3RpbmF0aW9ucy5pdGVtcygpOgorICAgICAgICAgICAgaWYgZGVzdGluYXRpb24udHlwZSA9PSAnc3VwcHJlc3MnOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBvdXRwdXQgPSBkZXN0aW5hdGlvbi5fZHVtcCgpCisKKyAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uLnR5cGUgPT0gJ3R3by1wYXNzJzoKKyAgICAgICAgICAgICAgICBpZiBkZXN0aW5hdGlvbi5pZDoKKyAgICAgICAgICAgICAgICAgICAgc2Vjb25kX3Bhc3NfcmVwbGFjZW1lbnRzW2Rlc3RpbmF0aW9uLmlkXSA9IG91dHB1dAorICAgICAgICAgICAgICAgIGVsaWYgb3V0cHV0OgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJUd28tcGFzcyBidWZmZXIgIiArIHJlcHIobmFtZSkgKyAiIG5vdCBlbXB0eSBhdCBlbmQgb2YgZmlsZSEiKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGlmIG91dHB1dDoKKworICAgICAgICAgICAgICAgIGJsb2NrID0gQmxvY2soIiIsIGRzbF9uYW1lPSJjbGluaWMiLCBvdXRwdXQ9b3V0cHV0KQorCisgICAgICAgICAgICAgICAgaWYgZGVzdGluYXRpb24udHlwZSA9PSAnYnVmZmVyJzoKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suaW5wdXQgPSAiZHVtcCAiICsgbmFtZSArICJcbiIKKyAgICAgICAgICAgICAgICAgICAgd2FybigiRGVzdGluYXRpb24gYnVmZmVyICIgKyByZXByKG5hbWUpICsgIiBub3QgZW1wdHkgYXQgZW5kIG9mIGZpbGUsIGVtcHR5aW5nLiIpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZXIud3JpdGUoIlxuIikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRlci5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgICAgIGlmIGRlc3RpbmF0aW9uLnR5cGUgPT0gJ2ZpbGUnOgorICAgICAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgICAgICBkaXJuYW1lID0gb3MucGF0aC5kaXJuYW1lKGRlc3RpbmF0aW9uLmZpbGVuYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zLm1ha2VkaXJzKGRpcm5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgRmlsZUV4aXN0c0Vycm9yOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKGRpcm5hbWUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCJDYW4ndCB3cml0ZSB0byBkZXN0aW5hdGlvbiB7fSwgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBtYWtlIGRpcmVjdG9yeSB7fSEiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5maWxlbmFtZSwgZGlybmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZlcmlmeToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIG9wZW4oZGVzdGluYXRpb24uZmlsZW5hbWUsICJydCIpIGFzIGY6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcl8yID0gQmxvY2tQYXJzZXIoZi5yZWFkKCksIGxhbmd1YWdlPXNlbGYubGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrcyA9IGxpc3QocGFyc2VyXzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsZW4oYmxvY2tzKSAhPSAxKSBvciAoYmxvY2tzWzBdLmlucHV0ICE9ICdwcmVzZXJ2ZVxuJyk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCJNb2RpZmllZCBkZXN0aW5hdGlvbiBmaWxlICIgKyByZXByKGRlc3RpbmF0aW9uLmZpbGVuYW1lKSArICIsIG5vdCBvdmVyd3JpdGluZyEiKQorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgYmxvY2suaW5wdXQgPSAncHJlc2VydmVcbicKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRlcl8yID0gQmxvY2tQcmludGVyKHNlbGYubGFuZ3VhZ2UpCisgICAgICAgICAgICAgICAgICAgIHByaW50ZXJfMi5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgICAgICAgICAgICAgd2l0aCBvcGVuKGRlc3RpbmF0aW9uLmZpbGVuYW1lLCAid3QiKSBhcyBmOgorICAgICAgICAgICAgICAgICAgICAgICAgZi53cml0ZShwcmludGVyXzIuZi5nZXR2YWx1ZSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICB0ZXh0ID0gcHJpbnRlci5mLmdldHZhbHVlKCkKKworICAgICAgICBpZiBzZWNvbmRfcGFzc19yZXBsYWNlbWVudHM6CisgICAgICAgICAgICBwcmludGVyXzIgPSBCbG9ja1ByaW50ZXIoc2VsZi5sYW5ndWFnZSkKKyAgICAgICAgICAgIHBhcnNlcl8yID0gQmxvY2tQYXJzZXIodGV4dCwgc2VsZi5sYW5ndWFnZSkKKyAgICAgICAgICAgIGNoYW5nZWQgPSBGYWxzZQorICAgICAgICAgICAgZm9yIGJsb2NrIGluIHBhcnNlcl8yOgorICAgICAgICAgICAgICAgIGlmIGJsb2NrLmRzbF9uYW1lOgorICAgICAgICAgICAgICAgICAgICBmb3IgaWQsIHJlcGxhY2VtZW50IGluIHNlY29uZF9wYXNzX3JlcGxhY2VtZW50cy5pdGVtcygpOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgaWQgaW4gYmxvY2sub3V0cHV0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSBUcnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2sub3V0cHV0ID0gYmxvY2sub3V0cHV0LnJlcGxhY2UoaWQsIHJlcGxhY2VtZW50KQorICAgICAgICAgICAgICAgIHByaW50ZXJfMi5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgICAgIGlmIGNoYW5nZWQ6CisgICAgICAgICAgICAgICAgdGV4dCA9IHByaW50ZXJfMi5mLmdldHZhbHVlKCkKKworICAgICAgICByZXR1cm4gdGV4dAorCisKKyAgICBkZWYgX21vZHVsZV9hbmRfY2xhc3Moc2VsZiwgZmllbGRzKToKKyAgICAgICAgIiIiCisgICAgICAgIGZpZWxkcyBzaG91bGQgYmUgYW4gaXRlcmFibGUgb2YgZmllbGQgbmFtZXMuCisgICAgICAgIHJldHVybnMgYSB0dXBsZSBvZiAobW9kdWxlLCBjbGFzcykuCisgICAgICAgIHRoZSBtb2R1bGUgb2JqZWN0IGNvdWxkIGFjdHVhbGx5IGJlIHNlbGYgKGEgY2xpbmljIG9iamVjdCkuCisgICAgICAgIHRoaXMgZnVuY3Rpb24gaXMgb25seSBldmVyIHVzZWQgdG8gZmluZCB0aGUgcGFyZW50IG9mIHdoZXJlCisgICAgICAgIGEgbmV3IGNsYXNzL21vZHVsZSBzaG91bGQgZ28uCisgICAgICAgICIiIgorICAgICAgICBpbl9jbGFzc2VzID0gRmFsc2UKKyAgICAgICAgcGFyZW50ID0gbW9kdWxlID0gc2VsZgorICAgICAgICBjbHMgPSBOb25lCisgICAgICAgIHNvX2ZhciA9IFtdCisKKyAgICAgICAgZm9yIGZpZWxkIGluIGZpZWxkczoKKyAgICAgICAgICAgIHNvX2Zhci5hcHBlbmQoZmllbGQpCisgICAgICAgICAgICBpZiBub3QgaW5fY2xhc3NlczoKKyAgICAgICAgICAgICAgICBjaGlsZCA9IHBhcmVudC5tb2R1bGVzLmdldChmaWVsZCkKKyAgICAgICAgICAgICAgICBpZiBjaGlsZDoKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gbW9kdWxlID0gY2hpbGQKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpbl9jbGFzc2VzID0gVHJ1ZQorICAgICAgICAgICAgaWYgbm90IGhhc2F0dHIocGFyZW50LCAnY2xhc3NlcycpOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2R1bGUsIGNscworICAgICAgICAgICAgY2hpbGQgPSBwYXJlbnQuY2xhc3Nlcy5nZXQoZmllbGQpCisgICAgICAgICAgICBpZiBub3QgY2hpbGQ6CisgICAgICAgICAgICAgICAgZmFpbCgnUGFyZW50IGNsYXNzIG9yIG1vZHVsZSAnICsgJy4nLmpvaW4oc29fZmFyKSArICIgZG9lcyBub3QgZXhpc3QuIikKKyAgICAgICAgICAgIGNscyA9IHBhcmVudCA9IGNoaWxkCisKKyAgICAgICAgcmV0dXJuIG1vZHVsZSwgY2xzCisKKworZGVmIHBhcnNlX2ZpbGUoZmlsZW5hbWUsICosIGZvcmNlPUZhbHNlLCB2ZXJpZnk9VHJ1ZSwgb3V0cHV0PU5vbmUsIGVuY29kaW5nPSd1dGYtOCcpOgorICAgIGV4dGVuc2lvbiA9IG9zLnBhdGguc3BsaXRleHQoZmlsZW5hbWUpWzFdWzE6XQorICAgIGlmIG5vdCBleHRlbnNpb246CisgICAgICAgIGZhaWwoIkNhbid0IGV4dHJhY3QgZmlsZSB0eXBlIGZvciBmaWxlICIgKyByZXByKGZpbGVuYW1lKSkKKworICAgIHRyeToKKyAgICAgICAgbGFuZ3VhZ2UgPSBleHRlbnNpb25zW2V4dGVuc2lvbl0oZmlsZW5hbWUpCisgICAgZXhjZXB0IEtleUVycm9yOgorICAgICAgICBmYWlsKCJDYW4ndCBpZGVudGlmeSBmaWxlIHR5cGUgZm9yIGZpbGUgIiArIHJlcHIoZmlsZW5hbWUpKQorCisgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAncicsIGVuY29kaW5nPWVuY29kaW5nKSBhcyBmOgorICAgICAgICByYXcgPSBmLnJlYWQoKQorCisgICAgIyBleGl0IHF1aWNrbHkgaWYgdGhlcmUgYXJlIG5vIGNsaW5pYyBtYXJrZXJzIGluIHRoZSBmaWxlCisgICAgZmluZF9zdGFydF9yZSA9IEJsb2NrUGFyc2VyKCIiLCBsYW5ndWFnZSkuZmluZF9zdGFydF9yZQorICAgIGlmIG5vdCBmaW5kX3N0YXJ0X3JlLnNlYXJjaChyYXcpOgorICAgICAgICByZXR1cm4KKworICAgIGNsaW5pYyA9IENsaW5pYyhsYW5ndWFnZSwgZm9yY2U9Zm9yY2UsIHZlcmlmeT12ZXJpZnksIGZpbGVuYW1lPWZpbGVuYW1lKQorICAgIGNvb2tlZCA9IGNsaW5pYy5wYXJzZShyYXcpCisgICAgaWYgKGNvb2tlZCA9PSByYXcpIGFuZCBub3QgZm9yY2U6CisgICAgICAgIHJldHVybgorCisgICAgZGlyZWN0b3J5ID0gb3MucGF0aC5kaXJuYW1lKGZpbGVuYW1lKSBvciAnLicKKworICAgIHdpdGggdGVtcGZpbGUuVGVtcG9yYXJ5RGlyZWN0b3J5KHByZWZpeD0iY2xpbmljIiwgZGlyPWRpcmVjdG9yeSkgYXMgdG1wZGlyOgorICAgICAgICBieXRlcyA9IGNvb2tlZC5lbmNvZGUoZW5jb2RpbmcpCisgICAgICAgIHRtcGZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRtcGRpciwgb3MucGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpCisgICAgICAgIHdpdGggb3Blbih0bXBmaWxlbmFtZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoYnl0ZXMpCisgICAgICAgIG9zLnJlcGxhY2UodG1wZmlsZW5hbWUsIG91dHB1dCBvciBmaWxlbmFtZSkKKworCitkZWYgY29tcHV0ZV9jaGVja3N1bShpbnB1dCwgbGVuZ3RoPU5vbmUpOgorICAgIGlucHV0ID0gaW5wdXQgb3IgJycKKyAgICBzID0gaGFzaGxpYi5zaGExKGlucHV0LmVuY29kZSgndXRmLTgnKSkuaGV4ZGlnZXN0KCkKKyAgICBpZiBsZW5ndGg6CisgICAgICAgIHMgPSBzWzpsZW5ndGhdCisgICAgcmV0dXJuIHMKKworCisKKworY2xhc3MgUHl0aG9uUGFyc2VyOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjbGluaWMpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBzID0gaW8uU3RyaW5nSU8oKQorICAgICAgICB3aXRoIE92ZXJyaWRlU3RkaW9XaXRoKHMpOgorICAgICAgICAgICAgZXhlYyhibG9jay5pbnB1dCkKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gcy5nZXR2YWx1ZSgpCisKKworY2xhc3MgTW9kdWxlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuYW1lLCBtb2R1bGU9Tm9uZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5tb2R1bGUgPSBzZWxmLnBhcmVudCA9IG1vZHVsZQorCisgICAgICAgIHNlbGYubW9kdWxlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBzZWxmLmZ1bmN0aW9ucyA9IFtdCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiPGNsaW5pYy5Nb2R1bGUgIiArIHJlcHIoc2VsZi5uYW1lKSArICIgYXQgIiArIHN0cihpZChzZWxmKSkgKyAiPiIKKworY2xhc3MgQ2xhc3M6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIG1vZHVsZT1Ob25lLCBjbHM9Tm9uZSwgdHlwZWRlZj1Ob25lLCB0eXBlX29iamVjdD1Ob25lKToKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorICAgICAgICBzZWxmLm1vZHVsZSA9IG1vZHVsZQorICAgICAgICBzZWxmLmNscyA9IGNscworICAgICAgICBzZWxmLnR5cGVkZWYgPSB0eXBlZGVmCisgICAgICAgIHNlbGYudHlwZV9vYmplY3QgPSB0eXBlX29iamVjdAorICAgICAgICBzZWxmLnBhcmVudCA9IGNscyBvciBtb2R1bGUKKworICAgICAgICBzZWxmLmNsYXNzZXMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYuZnVuY3Rpb25zID0gW10KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICI8Y2xpbmljLkNsYXNzICIgKyByZXByKHNlbGYubmFtZSkgKyAiIGF0ICIgKyBzdHIoaWQoc2VsZikpICsgIj4iCisKK3Vuc3VwcG9ydGVkX3NwZWNpYWxfbWV0aG9kcyA9IHNldCgiIiIKKworX19hYnNfXworX19hZGRfXworX19hbmRfXworX19ieXRlc19fCitfX2NhbGxfXworX19jb21wbGV4X18KK19fZGVsaXRlbV9fCitfX2Rpdm1vZF9fCitfX2VxX18KK19fZmxvYXRfXworX19mbG9vcmRpdl9fCitfX2dlX18KK19fZ2V0YXR0cl9fCitfX2dldGF0dHJpYnV0ZV9fCitfX2dldGl0ZW1fXworX19ndF9fCitfX2hhc2hfXworX19pYWRkX18KK19faWFuZF9fCitfX2lmbG9vcmRpdl9fCitfX2lsc2hpZnRfXworX19pbW9kX18KK19faW11bF9fCitfX2luZGV4X18KK19faW50X18KK19faW52ZXJ0X18KK19faW9yX18KK19faXBvd19fCitfX2lyc2hpZnRfXworX19pc3ViX18KK19faXRlcl9fCitfX2l0cnVlZGl2X18KK19faXhvcl9fCitfX2xlX18KK19fbGVuX18KK19fbHNoaWZ0X18KK19fbHRfXworX19tb2RfXworX19tdWxfXworX19uZWdfXworX19uZXdfXworX19uZXh0X18KK19fb3JfXworX19wb3NfXworX19wb3dfXworX19yYWRkX18KK19fcmFuZF9fCitfX3JkaXZtb2RfXworX19yZXByX18KK19fcmZsb29yZGl2X18KK19fcmxzaGlmdF9fCitfX3Jtb2RfXworX19ybXVsX18KK19fcm9yX18KK19fcm91bmRfXworX19ycG93X18KK19fcnJzaGlmdF9fCitfX3JzaGlmdF9fCitfX3JzdWJfXworX19ydHJ1ZWRpdl9fCitfX3J4b3JfXworX19zZXRhdHRyX18KK19fc2V0aXRlbV9fCitfX3N0cl9fCitfX3N1Yl9fCitfX3RydWVkaXZfXworX194b3JfXworCisiIiIuc3RyaXAoKS5zcGxpdCgpKQorCisKK0lOVkFMSUQsIENBTExBQkxFLCBTVEFUSUNfTUVUSE9ELCBDTEFTU19NRVRIT0QsIE1FVEhPRF9JTklULCBNRVRIT0RfTkVXID0gIiIiCitJTlZBTElELCBDQUxMQUJMRSwgU1RBVElDX01FVEhPRCwgQ0xBU1NfTUVUSE9ELCBNRVRIT0RfSU5JVCwgTUVUSE9EX05FVworIiIiLnJlcGxhY2UoIiwiLCAiIikuc3RyaXAoKS5zcGxpdCgpCisKK2NsYXNzIEZ1bmN0aW9uOgorICAgICIiIgorICAgIE11dGFibGUgZHVjayB0eXBlIGZvciBpbnNwZWN0LkZ1bmN0aW9uLgorCisgICAgZG9jc3RyaW5nIC0gYSBzdHIgY29udGFpbmluZworICAgICAgICAqIGVtYmVkZGVkIGxpbmUgYnJlYWtzCisgICAgICAgICogdGV4dCBvdXRkZW50ZWQgdG8gdGhlIGxlZnQgbWFyZ2luCisgICAgICAgICogbm8gdHJhaWxpbmcgd2hpdGVzcGFjZS4KKyAgICAgICAgSXQgd2lsbCBhbHdheXMgYmUgdHJ1ZSB0aGF0CisgICAgICAgICAgICAobm90IGRvY3N0cmluZykgb3IgKChub3QgZG9jc3RyaW5nWzBdLmlzc3BhY2UoKSkgYW5kIChkb2NzdHJpbmcucnN0cmlwKCkgPT0gZG9jc3RyaW5nKSkKKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJhbWV0ZXJzPU5vbmUsICosIG5hbWUsCisgICAgICAgICAgICAgICAgIG1vZHVsZSwgY2xzPU5vbmUsIGNfYmFzZW5hbWU9Tm9uZSwKKyAgICAgICAgICAgICAgICAgZnVsbF9uYW1lPU5vbmUsCisgICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIsIHJldHVybl9hbm5vdGF0aW9uPV9lbXB0eSwKKyAgICAgICAgICAgICAgICAgZG9jc3RyaW5nPU5vbmUsIGtpbmQ9Q0FMTEFCTEUsIGNvZXhpc3Q9RmFsc2UsCisgICAgICAgICAgICAgICAgIGRvY3N0cmluZ19vbmx5PUZhbHNlKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJzID0gcGFyYW1ldGVycyBvciBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIHNlbGYucmV0dXJuX2Fubm90YXRpb24gPSByZXR1cm5fYW5ub3RhdGlvbgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuZnVsbF9uYW1lID0gZnVsbF9uYW1lCisgICAgICAgIHNlbGYubW9kdWxlID0gbW9kdWxlCisgICAgICAgIHNlbGYuY2xzID0gY2xzCisgICAgICAgIHNlbGYucGFyZW50ID0gY2xzIG9yIG1vZHVsZQorICAgICAgICBzZWxmLmNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lCisgICAgICAgIHNlbGYucmV0dXJuX2NvbnZlcnRlciA9IHJldHVybl9jb252ZXJ0ZXIKKyAgICAgICAgc2VsZi5kb2NzdHJpbmcgPSBkb2NzdHJpbmcgb3IgJycKKyAgICAgICAgc2VsZi5raW5kID0ga2luZAorICAgICAgICBzZWxmLmNvZXhpc3QgPSBjb2V4aXN0CisgICAgICAgIHNlbGYuc2VsZl9jb252ZXJ0ZXIgPSBOb25lCisgICAgICAgICMgZG9jc3RyaW5nX29ubHkgbWVhbnMgImRvbid0IGdlbmVyYXRlIGEgbWFjaGluZS1yZWFkYWJsZQorICAgICAgICAjIHNpZ25hdHVyZSwganVzdCBhIG5vcm1hbCBkb2NzdHJpbmciLiAgaXQncyBUcnVlIGZvcgorICAgICAgICAjIGZ1bmN0aW9ucyB3aXRoIG9wdGlvbmFsIGdyb3VwcyBiZWNhdXNlIHdlIGNhbid0IHJlcHJlc2VudAorICAgICAgICAjIHRob3NlIGFjY3VyYXRlbHkgd2l0aCBpbnNwZWN0LlNpZ25hdHVyZSBpbiAzLjQuCisgICAgICAgIHNlbGYuZG9jc3RyaW5nX29ubHkgPSBkb2NzdHJpbmdfb25seQorCisgICAgICAgIHNlbGYucmVuZGVyZWRfcGFyYW1ldGVycyA9IE5vbmUKKworICAgIF9fcmVuZGVyX3BhcmFtZXRlcnNfXyA9IE5vbmUKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVuZGVyX3BhcmFtZXRlcnMoc2VsZik6CisgICAgICAgIGlmIG5vdCBzZWxmLl9fcmVuZGVyX3BhcmFtZXRlcnNfXzoKKyAgICAgICAgICAgIHNlbGYuX19yZW5kZXJfcGFyYW1ldGVyc19fID0gbCA9IFtdCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLnBhcmFtZXRlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgcCA9IHAuY29weSgpCisgICAgICAgICAgICAgICAgcC5jb252ZXJ0ZXIucHJlX3JlbmRlcigpCisgICAgICAgICAgICAgICAgbC5hcHBlbmQocCkKKyAgICAgICAgcmV0dXJuIHNlbGYuX19yZW5kZXJfcGFyYW1ldGVyc19fCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbWV0aG9kZGVmX2ZsYWdzKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmtpbmQgaW4gKE1FVEhPRF9JTklULCBNRVRIT0RfTkVXKToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGZsYWdzID0gW10KKyAgICAgICAgaWYgc2VsZi5raW5kID09IENMQVNTX01FVEhPRDoKKyAgICAgICAgICAgIGZsYWdzLmFwcGVuZCgnTUVUSF9DTEFTUycpCisgICAgICAgIGVsaWYgc2VsZi5raW5kID09IFNUQVRJQ19NRVRIT0Q6CisgICAgICAgICAgICBmbGFncy5hcHBlbmQoJ01FVEhfU1RBVElDJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmtpbmQgPT0gQ0FMTEFCTEUsICJ1bmtub3duIGtpbmQ6ICIgKyByZXByKHNlbGYua2luZCkKKyAgICAgICAgaWYgc2VsZi5jb2V4aXN0OgorICAgICAgICAgICAgZmxhZ3MuYXBwZW5kKCdNRVRIX0NPRVhJU1QnKQorICAgICAgICByZXR1cm4gJ3wnLmpvaW4oZmxhZ3MpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPGNsaW5pYy5GdW5jdGlvbiAnICsgc2VsZi5uYW1lICsgJz4nCisKKyAgICBkZWYgY29weShzZWxmLCAqKm92ZXJyaWRlcyk6CisgICAgICAgIGt3YXJncyA9IHsKKyAgICAgICAgICAgICduYW1lJzogc2VsZi5uYW1lLCAnbW9kdWxlJzogc2VsZi5tb2R1bGUsICdwYXJhbWV0ZXJzJzogc2VsZi5wYXJhbWV0ZXJzLAorICAgICAgICAgICAgJ2Nscyc6IHNlbGYuY2xzLCAnY19iYXNlbmFtZSc6IHNlbGYuY19iYXNlbmFtZSwKKyAgICAgICAgICAgICdmdWxsX25hbWUnOiBzZWxmLmZ1bGxfbmFtZSwKKyAgICAgICAgICAgICdyZXR1cm5fY29udmVydGVyJzogc2VsZi5yZXR1cm5fY29udmVydGVyLCAncmV0dXJuX2Fubm90YXRpb24nOiBzZWxmLnJldHVybl9hbm5vdGF0aW9uLAorICAgICAgICAgICAgJ2RvY3N0cmluZyc6IHNlbGYuZG9jc3RyaW5nLCAna2luZCc6IHNlbGYua2luZCwgJ2NvZXhpc3QnOiBzZWxmLmNvZXhpc3QsCisgICAgICAgICAgICAnZG9jc3RyaW5nX29ubHknOiBzZWxmLmRvY3N0cmluZ19vbmx5LAorICAgICAgICAgICAgfQorICAgICAgICBrd2FyZ3MudXBkYXRlKG92ZXJyaWRlcykKKyAgICAgICAgZiA9IEZ1bmN0aW9uKCoqa3dhcmdzKQorCisgICAgICAgIHBhcmFtZXRlcnMgPSBjb2xsZWN0aW9ucy5PcmRlcmVkRGljdCgpCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBmLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY29weShmdW5jdGlvbj1mKQorICAgICAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlCisgICAgICAgIGYucGFyYW1ldGVycyA9IHBhcmFtZXRlcnMKKyAgICAgICAgcmV0dXJuIGYKKworCitjbGFzcyBQYXJhbWV0ZXI6CisgICAgIiIiCisgICAgTXV0YWJsZSBkdWNrIHR5cGUgb2YgaW5zcGVjdC5QYXJhbWV0ZXIuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSwga2luZCwgKiwgZGVmYXVsdD1fZW1wdHksCisgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBjb252ZXJ0ZXIsIGFubm90YXRpb249X2VtcHR5LAorICAgICAgICAgICAgICAgICBkb2NzdHJpbmc9Tm9uZSwgZ3JvdXA9MCk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5raW5kID0ga2luZAorICAgICAgICBzZWxmLmRlZmF1bHQgPSBkZWZhdWx0CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLmNvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICBzZWxmLmFubm90YXRpb24gPSBhbm5vdGF0aW9uCisgICAgICAgIHNlbGYuZG9jc3RyaW5nID0gZG9jc3RyaW5nIG9yICcnCisgICAgICAgIHNlbGYuZ3JvdXAgPSBncm91cAorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gJzxjbGluaWMuUGFyYW1ldGVyICcgKyBzZWxmLm5hbWUgKyAnPicKKworICAgIGRlZiBpc19rZXl3b3JkX29ubHkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuS0VZV09SRF9PTkxZCisKKyAgICBkZWYgaXNfcG9zaXRpb25hbF9vbmx5KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorCisgICAgZGVmIGNvcHkoc2VsZiwgKipvdmVycmlkZXMpOgorICAgICAgICBrd2FyZ3MgPSB7CisgICAgICAgICAgICAnbmFtZSc6IHNlbGYubmFtZSwgJ2tpbmQnOiBzZWxmLmtpbmQsICdkZWZhdWx0JzpzZWxmLmRlZmF1bHQsCisgICAgICAgICAgICAgICAgICdmdW5jdGlvbic6IHNlbGYuZnVuY3Rpb24sICdjb252ZXJ0ZXInOiBzZWxmLmNvbnZlcnRlciwgJ2Fubm90YXRpb24nOiBzZWxmLmFubm90YXRpb24sCisgICAgICAgICAgICAgICAgICdkb2NzdHJpbmcnOiBzZWxmLmRvY3N0cmluZywgJ2dyb3VwJzogc2VsZi5ncm91cCwKKyAgICAgICAgICAgIH0KKyAgICAgICAga3dhcmdzLnVwZGF0ZShvdmVycmlkZXMpCisgICAgICAgIGlmICdjb252ZXJ0ZXInIG5vdCBpbiBvdmVycmlkZXM6CisgICAgICAgICAgICBjb252ZXJ0ZXIgPSBjb3B5LmNvcHkoc2VsZi5jb252ZXJ0ZXIpCisgICAgICAgICAgICBjb252ZXJ0ZXIuZnVuY3Rpb24gPSBrd2FyZ3NbJ2Z1bmN0aW9uJ10KKyAgICAgICAgICAgIGt3YXJnc1snY29udmVydGVyJ10gPSBjb252ZXJ0ZXIKKyAgICAgICAgcmV0dXJuIFBhcmFtZXRlcigqKmt3YXJncykKKworCisKK2NsYXNzIExhbmRNaW5lOgorICAgICMgdHJ5IHRvIGFjY2VzcyBhbnkKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbWVzc2FnZSk6CisgICAgICAgIHNlbGYuX19tZXNzYWdlX18gPSBtZXNzYWdlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAnPExhbmRNaW5lICcgKyByZXByKHNlbGYuX19tZXNzYWdlX18pICsgIj4iCisKKyAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKToKKyAgICAgICAgaWYgbmFtZSBpbiAoJ19fcmVwcl9fJywgJ19fbWVzc2FnZV9fJyk6CisgICAgICAgICAgICByZXR1cm4gc3VwZXIoKS5fX2dldGF0dHJpYnV0ZV9fKG5hbWUpCisgICAgICAgICMgcmFpc2UgUnVudGltZUVycm9yKHJlcHIobmFtZSkpCisgICAgICAgIGZhaWwoIlN0ZXBwZWQgb24gYSBsYW5kIG1pbmUsIHRyeWluZyB0byBhY2Nlc3MgYXR0cmlidXRlICIgKyByZXByKG5hbWUpICsgIjpcbiIgKyBzZWxmLl9fbWVzc2FnZV9fKQorCisKK2RlZiBhZGRfY19jb252ZXJ0ZXIoZiwgbmFtZT1Ob25lKToKKyAgICBpZiBub3QgbmFtZToKKyAgICAgICAgbmFtZSA9IGYuX19uYW1lX18KKyAgICAgICAgaWYgbm90IG5hbWUuZW5kc3dpdGgoJ19jb252ZXJ0ZXInKToKKyAgICAgICAgICAgIHJldHVybiBmCisgICAgICAgIG5hbWUgPSBuYW1lWzotbGVuKCdfY29udmVydGVyJyldCisgICAgY29udmVydGVyc1tuYW1lXSA9IGYKKyAgICByZXR1cm4gZgorCitkZWYgYWRkX2RlZmF1bHRfbGVnYWN5X2NfY29udmVydGVyKGNscyk6CisgICAgIyBhdXRvbWF0aWNhbGx5IGFkZCBjb252ZXJ0ZXIgZm9yIGRlZmF1bHQgZm9ybWF0IHVuaXQKKyAgICAjIChidXQgd2l0aG91dCBzdG9tcGluZyBvbiB0aGUgZXhpc3Rpbmcgb25lIGlmIGl0J3MgYWxyZWFkeQorICAgICMgc2V0LCBpbiBjYXNlIHlvdSBzdWJjbGFzcykKKyAgICBpZiAoKGNscy5mb3JtYXRfdW5pdCBub3QgaW4gKCdPJicsICcnKSkgYW5kCisgICAgICAgIChjbHMuZm9ybWF0X3VuaXQgbm90IGluIGxlZ2FjeV9jb252ZXJ0ZXJzKSk6CisgICAgICAgIGxlZ2FjeV9jb252ZXJ0ZXJzW2Nscy5mb3JtYXRfdW5pdF0gPSBjbHMKKyAgICByZXR1cm4gY2xzCisKK2RlZiBhZGRfbGVnYWN5X2NfY29udmVydGVyKGZvcm1hdF91bml0LCAqKmt3YXJncyk6CisgICAgIiIiCisgICAgQWRkcyBhIGxlZ2FjeSBjb252ZXJ0ZXIuCisgICAgIiIiCisgICAgZGVmIGNsb3N1cmUoZik6CisgICAgICAgIGlmIG5vdCBrd2FyZ3M6CisgICAgICAgICAgICBhZGRlZF9mID0gZgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkZWRfZiA9IGZ1bmN0b29scy5wYXJ0aWFsKGYsICoqa3dhcmdzKQorICAgICAgICBpZiBmb3JtYXRfdW5pdDoKKyAgICAgICAgICAgIGxlZ2FjeV9jb252ZXJ0ZXJzW2Zvcm1hdF91bml0XSA9IGFkZGVkX2YKKyAgICAgICAgcmV0dXJuIGYKKyAgICByZXR1cm4gY2xvc3VyZQorCitjbGFzcyBDQ29udmVydGVyQXV0b1JlZ2lzdGVyKHR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICBhZGRfY19jb252ZXJ0ZXIoY2xzKQorICAgICAgICBhZGRfZGVmYXVsdF9sZWdhY3lfY19jb252ZXJ0ZXIoY2xzKQorCitjbGFzcyBDQ29udmVydGVyKG1ldGFjbGFzcz1DQ29udmVydGVyQXV0b1JlZ2lzdGVyKToKKyAgICAiIiIKKyAgICBGb3IgdGhlIGluaXQgZnVuY3Rpb24sIHNlbGYsIG5hbWUsIGZ1bmN0aW9uLCBhbmQgZGVmYXVsdAorICAgIG11c3QgYmUga2V5d29yZC1vci1wb3NpdGlvbmFsIHBhcmFtZXRlcnMuICBBbGwgb3RoZXIKKyAgICBwYXJhbWV0ZXJzIG11c3QgYmUga2V5d29yZC1vbmx5LgorICAgICIiIgorCisgICAgIyBUaGUgQyBuYW1lIHRvIHVzZSBmb3IgdGhpcyB2YXJpYWJsZS4KKyAgICBuYW1lID0gTm9uZQorCisgICAgIyBUaGUgUHl0aG9uIG5hbWUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgIHB5X25hbWUgPSBOb25lCisKKyAgICAjIFRoZSBDIHR5cGUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICMgJ3R5cGUnIHNob3VsZCBiZSBhIFB5dGhvbiBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdHlwZSwgZS5nLiAiaW50Ii4KKyAgICAjIElmIHRoaXMgaXMgYSBwb2ludGVyIHR5cGUsIHRoZSB0eXBlIHN0cmluZyBzaG91bGQgZW5kIHdpdGggJyAqJy4KKyAgICB0eXBlID0gTm9uZQorCisgICAgIyBUaGUgUHl0aG9uIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgcGFyYW1ldGVyLCBhcyBhIFB5dGhvbiB2YWx1ZS4KKyAgICAjIE9yIHRoZSBtYWdpYyB2YWx1ZSAidW5zcGVjaWZpZWQiIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgIyBPciB0aGUgbWFnaWMgdmFsdWUgInVua25vd24iIGlmIHRoaXMgdmFsdWUgaXMgYSBjYW5ub3QgYmUgZXZhbHVhdGVkCisgICAgIyBhdCBBcmd1bWVudC1DbGluaWMtcHJlcHJvY2Vzc2luZyB0aW1lIChidXQgaXMgcHJlc3VtZWQgdG8gYmUgdmFsaWQKKyAgICAjIGF0IHJ1bnRpbWUpLgorICAgIGRlZmF1bHQgPSB1bnNwZWNpZmllZAorCisgICAgIyBJZiBub3QgTm9uZSwgZGVmYXVsdCBtdXN0IGJlIGlzaW5zdGFuY2UoKSBvZiB0aGlzIHR5cGUuCisgICAgIyAoWW91IGNhbiBhbHNvIHNwZWNpZnkgYSB0dXBsZSBvZiB0eXBlcy4pCisgICAgZGVmYXVsdF90eXBlID0gTm9uZQorCisgICAgIyAiZGVmYXVsdCIgY29udmVydGVkIGludG8gYSBDIHZhbHVlLCBhcyBhIHN0cmluZy4KKyAgICAjIE9yIE5vbmUgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBjX2RlZmF1bHQgPSBOb25lCisKKyAgICAjICJkZWZhdWx0IiBjb252ZXJ0ZWQgaW50byBhIFB5dGhvbiB2YWx1ZSwgYXMgYSBzdHJpbmcuCisgICAgIyBPciBOb25lIGlmIHRoZXJlIGlzIG5vIGRlZmF1bHQuCisgICAgcHlfZGVmYXVsdCA9IE5vbmUKKworICAgICMgVGhlIGRlZmF1bHQgdmFsdWUgdXNlZCB0byBpbml0aWFsaXplIHRoZSBDIHZhcmlhYmxlIHdoZW4KKyAgICAjIHRoZXJlIGlzIG5vIGRlZmF1bHQsIGJ1dCBub3Qgc3BlY2lmeWluZyBhIGRlZmF1bHQgbWF5CisgICAgIyByZXN1bHQgaW4gYW4gInVuaW5pdGlhbGl6ZWQgdmFyaWFibGUiIHdhcm5pbmcuICBUaGlzIGNhbgorICAgICMgZWFzaWx5IGhhcHBlbiB3aGVuIHVzaW5nIG9wdGlvbiBncm91cHMtLWFsdGhvdWdoCisgICAgIyBwcm9wZXJseS13cml0dGVuIGNvZGUgd29uJ3QgYWN0dWFsbHkgdXNlIHRoZSB2YXJpYWJsZSwKKyAgICAjIHRoZSB2YXJpYWJsZSBkb2VzIGdldCBwYXNzZWQgaW4gdG8gdGhlIF9pbXBsLiAgKEFoLCBpZgorICAgICMgb25seSBkYXRhZmxvdyBhbmFseXNpcyBjb3VsZCBpbmxpbmUgdGhlIHN0YXRpYyBmdW5jdGlvbiEpCisgICAgIworICAgICMgVGhpcyB2YWx1ZSBpcyBzcGVjaWZpZWQgYXMgYSBzdHJpbmcuCisgICAgIyBFdmVyeSBub24tYWJzdHJhY3Qgc3ViY2xhc3Mgc2hvdWxkIHN1cHBseSBhIHZhbGlkIHZhbHVlLgorICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gJ05VTEwnCisKKyAgICAjIFRoZSBDIGNvbnZlcnRlciAqZnVuY3Rpb24qIHRvIGJlIHVzZWQsIGlmIGFueS4KKyAgICAjIChJZiB0aGlzIGlzIG5vdCBOb25lLCBmb3JtYXRfdW5pdCBtdXN0IGJlICdPJicuKQorICAgIGNvbnZlcnRlciA9IE5vbmUKKworICAgICMgU2hvdWxkIEFyZ3VtZW50IENsaW5pYyBhZGQgYSAnJicgYmVmb3JlIHRoZSBuYW1lIG9mCisgICAgIyB0aGUgdmFyaWFibGUgd2hlbiBwYXNzaW5nIGl0IGludG8gdGhlIF9pbXBsIGZ1bmN0aW9uPworICAgIGltcGxfYnlfcmVmZXJlbmNlID0gRmFsc2UKKworICAgICMgU2hvdWxkIEFyZ3VtZW50IENsaW5pYyBhZGQgYSAnJicgYmVmb3JlIHRoZSBuYW1lIG9mCisgICAgIyB0aGUgdmFyaWFibGUgd2hlbiBwYXNzaW5nIGl0IGludG8gUHlBcmdfUGFyc2VUdXBsZSAoQW5kS2V5d29yZHMpPworICAgIHBhcnNlX2J5X3JlZmVyZW5jZSA9IFRydWUKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMgWW91IHNob3VsZG4ndCBuZWVkIHRvIHJlYWQgYW55dGhpbmcgYmVsb3cgdGhpcyBwb2ludCB0byAjIworICAgICMjIHdyaXRlIHlvdXIgb3duIGNvbnZlcnRlciBmdW5jdGlvbnMuICAgICAgICAgICAgICAgICAgICAgIyMKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisgICAgIyBUaGUgImZvcm1hdCB1bml0IiB0byBzcGVjaWZ5IGZvciB0aGlzIHZhcmlhYmxlIHdoZW4KKyAgICAjIHBhcnNpbmcgYXJndW1lbnRzIHVzaW5nIFB5QXJnX1BhcnNlVHVwbGUgKEFuZEtleXdvcmRzKS4KKyAgICAjIEN1c3RvbSBjb252ZXJ0ZXJzIHNob3VsZCBhbHdheXMgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIG9mICdPJicuCisgICAgZm9ybWF0X3VuaXQgPSAnTyYnCisKKyAgICAjIFdoYXQgZW5jb2RpbmcgZG8gd2Ugd2FudCBmb3IgdGhpcyB2YXJpYWJsZT8gIE9ubHkgdXNlZAorICAgICMgYnkgZm9ybWF0IHVuaXRzIHN0YXJ0aW5nIHdpdGggJ2UnLgorICAgIGVuY29kaW5nID0gTm9uZQorCisgICAgIyBTaG91bGQgdGhpcyBvYmplY3QgYmUgcmVxdWlyZWQgdG8gYmUgYSBzdWJjbGFzcyBvZiBhIHNwZWNpZmljIHR5cGU/CisgICAgIyBJZiBub3QgTm9uZSwgc2hvdWxkIGJlIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIHBvaW50ZXIgdG8gYQorICAgICMgUHlUeXBlT2JqZWN0IChlLmcuICImUHlVbmljb2RlX1R5cGUiKS4KKyAgICAjIE9ubHkgdXNlZCBieSB0aGUgJ08hJyBmb3JtYXQgdW5pdCAoYW5kIHRoZSAib2JqZWN0IiBjb252ZXJ0ZXIpLgorICAgIHN1YmNsYXNzX29mID0gTm9uZQorCisgICAgIyBEbyB3ZSB3YW50IGFuIGFkamFjZW50ICdfbGVuZ3RoJyB2YXJpYWJsZSBmb3IgdGhpcyB2YXJpYWJsZT8KKyAgICAjIE9ubHkgdXNlZCBieSBmb3JtYXQgdW5pdHMgZW5kaW5nIHdpdGggJyMnLgorICAgIGxlbmd0aCA9IEZhbHNlCisKKyAgICAjIFNob3VsZCB3ZSBzaG93IHRoaXMgcGFyYW1ldGVyIGluIHRoZSBnZW5lcmF0ZWQKKyAgICAjIF9fdGV4dF9zaWduYXR1cmVfXz8gVGhpcyBpcyAqYWxtb3N0KiBhbHdheXMgVHJ1ZS4KKyAgICAjIChJdCdzIG9ubHkgRmFsc2UgZm9yIF9fbmV3X18sIF9faW5pdF9fLCBhbmQgTUVUSF9TVEFUSUMgZnVuY3Rpb25zLikKKyAgICBzaG93X2luX3NpZ25hdHVyZSA9IFRydWUKKworICAgICMgT3ZlcnJpZGVzIHRoZSBuYW1lIHVzZWQgaW4gYSB0ZXh0IHNpZ25hdHVyZS4KKyAgICAjIFRoZSBuYW1lIHVzZWQgZm9yIGEgInNlbGYiIHBhcmFtZXRlciBtdXN0IGJlIG9uZSBvZgorICAgICMgc2VsZiwgdHlwZSwgb3IgbW9kdWxlOyBob3dldmVyIHVzZXJzIGNhbiBzZXQgdGhlaXIgb3duLgorICAgICMgVGhpcyBsZXRzIHRoZSBzZWxmX2NvbnZlcnRlciBvdmVycnVsZSB0aGUgdXNlci1zZXR0YWJsZQorICAgICMgbmFtZSwgKmp1c3QqIGZvciB0aGUgdGV4dCBzaWduYXR1cmUuCisgICAgIyBPbmx5IHNldCBieSBzZWxmX2NvbnZlcnRlci4KKyAgICBzaWduYXR1cmVfbmFtZSA9IE5vbmUKKworICAgICMga2VlcCBpbiBzeW5jIHdpdGggc2VsZl9jb252ZXJ0ZXIuX19pbml0X18hCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIHB5X25hbWUsIGZ1bmN0aW9uLCBkZWZhdWx0PXVuc3BlY2lmaWVkLCAqLCBjX2RlZmF1bHQ9Tm9uZSwgcHlfZGVmYXVsdD1Ob25lLCBhbm5vdGF0aW9uPXVuc3BlY2lmaWVkLCAqKmt3YXJncyk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKyAgICAgICAgc2VsZi5weV9uYW1lID0gcHlfbmFtZQorCisgICAgICAgIGlmIGRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkOgorICAgICAgICAgICAgaWYgc2VsZi5kZWZhdWx0X3R5cGUgYW5kIG5vdCBpc2luc3RhbmNlKGRlZmF1bHQsIChzZWxmLmRlZmF1bHRfdHlwZSwgVW5rbm93bikpOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0X3R5cGUsIHR5cGUpOgorICAgICAgICAgICAgICAgICAgICB0eXBlc19zdHIgPSBzZWxmLmRlZmF1bHRfdHlwZS5fX25hbWVfXworICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHR5cGVzX3N0ciA9ICcsICcuam9pbigoY2xzLl9fbmFtZV9fIGZvciBjbHMgaW4gc2VsZi5kZWZhdWx0X3R5cGUpKQorICAgICAgICAgICAgICAgIGZhaWwoInt9OiBkZWZhdWx0IHZhbHVlIHshcn0gZm9yIGZpZWxkIHt9IGlzIG5vdCBvZiB0eXBlIHt9Ii5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHNlbGYuX19jbGFzc19fLl9fbmFtZV9fLCBkZWZhdWx0LCBuYW1lLCB0eXBlc19zdHIpKQorICAgICAgICAgICAgc2VsZi5kZWZhdWx0ID0gZGVmYXVsdAorCisgICAgICAgIGlmIGNfZGVmYXVsdDoKKyAgICAgICAgICAgIHNlbGYuY19kZWZhdWx0ID0gY19kZWZhdWx0CisgICAgICAgIGlmIHB5X2RlZmF1bHQ6CisgICAgICAgICAgICBzZWxmLnB5X2RlZmF1bHQgPSBweV9kZWZhdWx0CisKKyAgICAgICAgaWYgYW5ub3RhdGlvbiAhPSB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIGZhaWwoIlRoZSAnYW5ub3RhdGlvbicgcGFyYW1ldGVyIGlzIG5vdCBjdXJyZW50bHkgcGVybWl0dGVkLiIpCisKKyAgICAgICAgIyB0aGlzIGlzIGRlbGliZXJhdGUsIHRvIHByZXZlbnQgeW91IGZyb20gY2FjaGluZyBpbmZvcm1hdGlvbgorICAgICAgICAjIGFib3V0IHRoZSBmdW5jdGlvbiBpbiB0aGUgaW5pdC4KKyAgICAgICAgIyAodGhhdCBicmVha3MgaWYgd2UgZ2V0IGNsb25lZC4pCisgICAgICAgICMgc28gYWZ0ZXIgdGhpcyBjaGFuZ2Ugd2Ugd2lsbCBub2lzaWx5IGZhaWwuCisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBMYW5kTWluZSgiRG9uJ3QgYWNjZXNzIG1lbWJlcnMgb2Ygc2VsZi5mdW5jdGlvbiBpbnNpZGUgY29udmVydGVyX2luaXQhIikKKyAgICAgICAgc2VsZi5jb252ZXJ0ZXJfaW5pdCgqKmt3YXJncykKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBpc19vcHRpb25hbChzZWxmKToKKyAgICAgICAgcmV0dXJuIChzZWxmLmRlZmF1bHQgaXMgbm90IHVuc3BlY2lmaWVkKQorCisgICAgZGVmIF9yZW5kZXJfc2VsZihzZWxmLCBwYXJhbWV0ZXIsIGRhdGEpOgorICAgICAgICBzZWxmLnBhcmFtZXRlciA9IHBhcmFtZXRlcgorICAgICAgICBvcmlnaW5hbF9uYW1lID0gc2VsZi5uYW1lCisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKG9yaWdpbmFsX25hbWUpCisKKyAgICAgICAgIyBpbXBsX2FyZ3VtZW50cworICAgICAgICBzID0gKCImIiBpZiBzZWxmLmltcGxfYnlfcmVmZXJlbmNlIGVsc2UgIiIpICsgbmFtZQorICAgICAgICBkYXRhLmltcGxfYXJndW1lbnRzLmFwcGVuZChzKQorICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHMuYXBwZW5kKHNlbGYubGVuZ3RoX25hbWUoKSkKKworICAgICAgICAjIGltcGxfcGFyYW1ldGVycworICAgICAgICBkYXRhLmltcGxfcGFyYW1ldGVycy5hcHBlbmQoc2VsZi5zaW1wbGVfZGVjbGFyYXRpb24oYnlfcmVmZXJlbmNlPXNlbGYuaW1wbF9ieV9yZWZlcmVuY2UpKQorICAgICAgICBpZiBzZWxmLmxlbmd0aDoKKyAgICAgICAgICAgIGRhdGEuaW1wbF9wYXJhbWV0ZXJzLmFwcGVuZCgiUHlfc3NpemVfY2xlYW5fdCAiICsgc2VsZi5sZW5ndGhfbmFtZSgpKQorCisgICAgZGVmIF9yZW5kZXJfbm9uX3NlbGYoc2VsZiwgcGFyYW1ldGVyLCBkYXRhKToKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXIgPSBwYXJhbWV0ZXIKKyAgICAgICAgb3JpZ2luYWxfbmFtZSA9IHNlbGYubmFtZQorICAgICAgICBuYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihvcmlnaW5hbF9uYW1lKQorCisgICAgICAgICMgZGVjbGFyYXRpb25zCisgICAgICAgIGQgPSBzZWxmLmRlY2xhcmF0aW9uKCkKKyAgICAgICAgZGF0YS5kZWNsYXJhdGlvbnMuYXBwZW5kKGQpCisKKyAgICAgICAgIyBpbml0aWFsaXplcnMKKyAgICAgICAgaW5pdGlhbGl6ZXJzID0gc2VsZi5pbml0aWFsaXplKCkKKyAgICAgICAgaWYgaW5pdGlhbGl6ZXJzOgorICAgICAgICAgICAgZGF0YS5pbml0aWFsaXplcnMuYXBwZW5kKCcvKiBpbml0aWFsaXplcnMgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIGluaXRpYWxpemVycy5yc3RyaXAoKSkKKworICAgICAgICAjIG1vZGlmaWNhdGlvbnMKKyAgICAgICAgbW9kaWZpY2F0aW9ucyA9IHNlbGYubW9kaWZ5KCkKKyAgICAgICAgaWYgbW9kaWZpY2F0aW9uczoKKyAgICAgICAgICAgIGRhdGEubW9kaWZpY2F0aW9ucy5hcHBlbmQoJy8qIG1vZGlmaWNhdGlvbnMgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIG1vZGlmaWNhdGlvbnMucnN0cmlwKCkpCisKKyAgICAgICAgIyBrZXl3b3JkcworICAgICAgICBkYXRhLmtleXdvcmRzLmFwcGVuZChwYXJhbWV0ZXIubmFtZSkKKworICAgICAgICAjIGZvcm1hdF91bml0cworICAgICAgICBpZiBzZWxmLmlzX29wdGlvbmFsKCkgYW5kICd8JyBub3QgaW4gZGF0YS5mb3JtYXRfdW5pdHM6CisgICAgICAgICAgICBkYXRhLmZvcm1hdF91bml0cy5hcHBlbmQoJ3wnKQorICAgICAgICBpZiBwYXJhbWV0ZXIuaXNfa2V5d29yZF9vbmx5KCkgYW5kICckJyBub3QgaW4gZGF0YS5mb3JtYXRfdW5pdHM6CisgICAgICAgICAgICBkYXRhLmZvcm1hdF91bml0cy5hcHBlbmQoJyQnKQorICAgICAgICBkYXRhLmZvcm1hdF91bml0cy5hcHBlbmQoc2VsZi5mb3JtYXRfdW5pdCkKKworICAgICAgICAjIHBhcnNlX2FyZ3VtZW50cworICAgICAgICBzZWxmLnBhcnNlX2FyZ3VtZW50KGRhdGEucGFyc2VfYXJndW1lbnRzKQorCisgICAgICAgICMgY2xlYW51cAorICAgICAgICBjbGVhbnVwID0gc2VsZi5jbGVhbnVwKCkKKyAgICAgICAgaWYgY2xlYW51cDoKKyAgICAgICAgICAgIGRhdGEuY2xlYW51cC5hcHBlbmQoJy8qIENsZWFudXAgZm9yICcgKyBuYW1lICsgJyAqL1xuJyArIGNsZWFudXAucnN0cmlwKCkgKyAiXG4iKQorCisgICAgZGVmIHJlbmRlcihzZWxmLCBwYXJhbWV0ZXIsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgcGFyYW1ldGVyIGlzIGEgY2xpbmljLlBhcmFtZXRlciBpbnN0YW5jZS4KKyAgICAgICAgZGF0YSBpcyBhIENSZW5kZXJEYXRhIGluc3RhbmNlLgorICAgICAgICAiIiIKKyAgICAgICAgc2VsZi5fcmVuZGVyX3NlbGYocGFyYW1ldGVyLCBkYXRhKQorICAgICAgICBzZWxmLl9yZW5kZXJfbm9uX3NlbGYocGFyYW1ldGVyLCBkYXRhKQorCisgICAgZGVmIGxlbmd0aF9uYW1lKHNlbGYpOgorICAgICAgICAiIiJDb21wdXRlcyB0aGUgbmFtZSBvZiB0aGUgYXNzb2NpYXRlZCAibGVuZ3RoIiB2YXJpYWJsZS4iIiIKKyAgICAgICAgaWYgbm90IHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKSArICJfbGVuZ3RoIgorCisgICAgIyBXaHkgaXMgdGhpcyBvbmUgYnJva2VuIG91dCBzZXBhcmF0ZWx5PworICAgICMgRm9yICJwb3NpdGlvbmFsLW9ubHkiIGZ1bmN0aW9uIHBhcnNpbmcsCisgICAgIyB3aGljaCBnZW5lcmF0ZXMgYSBidW5jaCBvZiBQeUFyZ19QYXJzZVR1cGxlIGNhbGxzLgorICAgIGRlZiBwYXJzZV9hcmd1bWVudChzZWxmLCBsaXN0KToKKyAgICAgICAgYXNzZXJ0IG5vdCAoc2VsZi5jb252ZXJ0ZXIgYW5kIHNlbGYuZW5jb2RpbmcpCisgICAgICAgIGlmIHNlbGYuZm9ybWF0X3VuaXQgPT0gJ08mJzoKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmNvbnZlcnRlcgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZi5jb252ZXJ0ZXIpCisKKyAgICAgICAgaWYgc2VsZi5lbmNvZGluZzoKKyAgICAgICAgICAgIGxpc3QuYXBwZW5kKGNfcmVwcihzZWxmLmVuY29kaW5nKSkKKyAgICAgICAgZWxpZiBzZWxmLnN1YmNsYXNzX29mOgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoc2VsZi5zdWJjbGFzc19vZikKKworICAgICAgICBsZWdhbF9uYW1lID0gZW5zdXJlX2xlZ2FsX2NfaWRlbnRpZmllcihzZWxmLm5hbWUpCisgICAgICAgIHMgPSAoIiYiIGlmIHNlbGYucGFyc2VfYnlfcmVmZXJlbmNlIGVsc2UgIiIpICsgbGVnYWxfbmFtZQorICAgICAgICBsaXN0LmFwcGVuZChzKQorCisgICAgICAgIGlmIHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgbGlzdC5hcHBlbmQoIiYiICsgc2VsZi5sZW5ndGhfbmFtZSgpKQorCisgICAgIworICAgICMgQWxsIHRoZSBmdW5jdGlvbnMgYWZ0ZXIgaGVyZSBhcmUgaW50ZW5kZWQgYXMgZXh0ZW5zaW9uIHBvaW50cy4KKyAgICAjCisKKyAgICBkZWYgc2ltcGxlX2RlY2xhcmF0aW9uKHNlbGYsIGJ5X3JlZmVyZW5jZT1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBDb21wdXRlcyB0aGUgYmFzaWMgZGVjbGFyYXRpb24gb2YgdGhlIHZhcmlhYmxlLgorICAgICAgICBVc2VkIGluIGNvbXB1dGluZyB0aGUgcHJvdG90eXBlIGRlY2xhcmF0aW9uIGFuZCB0aGUKKyAgICAgICAgdmFyaWFibGUgZGVjbGFyYXRpb24uCisgICAgICAgICIiIgorICAgICAgICBwcm90b3R5cGUgPSBbc2VsZi50eXBlXQorICAgICAgICBpZiBieV9yZWZlcmVuY2Ugb3Igbm90IHNlbGYudHlwZS5lbmRzd2l0aCgnKicpOgorICAgICAgICAgICAgcHJvdG90eXBlLmFwcGVuZCgiICIpCisgICAgICAgIGlmIGJ5X3JlZmVyZW5jZToKKyAgICAgICAgICAgIHByb3RvdHlwZS5hcHBlbmQoJyonKQorICAgICAgICBwcm90b3R5cGUuYXBwZW5kKGVuc3VyZV9sZWdhbF9jX2lkZW50aWZpZXIoc2VsZi5uYW1lKSkKKyAgICAgICAgcmV0dXJuICIiLmpvaW4ocHJvdG90eXBlKQorCisgICAgZGVmIGRlY2xhcmF0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIEMgc3RhdGVtZW50IHRvIGRlY2xhcmUgdGhpcyB2YXJpYWJsZS4KKyAgICAgICAgIiIiCisgICAgICAgIGRlY2xhcmF0aW9uID0gW3NlbGYuc2ltcGxlX2RlY2xhcmF0aW9uKCldCisgICAgICAgIGRlZmF1bHQgPSBzZWxmLmNfZGVmYXVsdAorICAgICAgICBpZiBub3QgZGVmYXVsdCBhbmQgc2VsZi5wYXJhbWV0ZXIuZ3JvdXA6CisgICAgICAgICAgICBkZWZhdWx0ID0gc2VsZi5jX2lnbm9yZWRfZGVmYXVsdAorICAgICAgICBpZiBkZWZhdWx0OgorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCIgPSAiKQorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKGRlZmF1bHQpCisgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZCgiOyIpCisgICAgICAgIGlmIHNlbGYubGVuZ3RoOgorICAgICAgICAgICAgZGVjbGFyYXRpb24uYXBwZW5kKCdcblB5X3NzaXplX2NsZWFuX3QgJykKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLmFwcGVuZChzZWxmLmxlbmd0aF9uYW1lKCkpCisgICAgICAgICAgICBkZWNsYXJhdGlvbi5hcHBlbmQoJzsnKQorICAgICAgICBzID0gIiIuam9pbihkZWNsYXJhdGlvbikKKyAgICAgICAgIyBkb3VibGUgdXAgY3VybHktYnJhY2VzLCB0aGlzIHN0cmluZyB3aWxsIGJlIHVzZWQKKyAgICAgICAgIyBhcyBwYXJ0IG9mIGEgZm9ybWF0X21hcCgpIHRlbXBsYXRlIGxhdGVyCisgICAgICAgIHMgPSBzLnJlcGxhY2UoInsiLCAie3siKQorICAgICAgICBzID0gcy5yZXBsYWNlKCJ9IiwgIn19IikKKyAgICAgICAgcmV0dXJuIHMKKworICAgIGRlZiBpbml0aWFsaXplKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhlIEMgc3RhdGVtZW50cyByZXF1aXJlZCB0byBzZXQgdXAgdGhpcyB2YXJpYWJsZSBiZWZvcmUgcGFyc2luZy4KKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoaXMgY29kZSBpbmRlbnRlZCBhdCBjb2x1bW4gMC4KKyAgICAgICAgSWYgbm8gaW5pdGlhbGl6YXRpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIG1vZGlmeShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoZSBDIHN0YXRlbWVudHMgcmVxdWlyZWQgdG8gbW9kaWZ5IHRoaXMgdmFyaWFibGUgYWZ0ZXIgcGFyc2luZy4KKyAgICAgICAgUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHRoaXMgY29kZSBpbmRlbnRlZCBhdCBjb2x1bW4gMC4KKyAgICAgICAgSWYgbm8gaW5pdGlhbGl6YXRpb24gaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBUaGUgQyBzdGF0ZW1lbnRzIHJlcXVpcmVkIHRvIGNsZWFuIHVwIGFmdGVyIHRoaXMgdmFyaWFibGUuCisgICAgICAgIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyB0aGlzIGNvZGUgaW5kZW50ZWQgYXQgY29sdW1uIDAuCisgICAgICAgIElmIG5vIGNsZWFudXAgaXMgbmVjZXNzYXJ5LCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZy4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiAiIgorCisgICAgZGVmIHByZV9yZW5kZXIoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBBIHNlY29uZCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiwgbGlrZSBjb252ZXJ0ZXJfaW5pdCwKKyAgICAgICAgY2FsbGVkIGp1c3QgYmVmb3JlIHJlbmRlcmluZy4KKyAgICAgICAgWW91IGFyZSBwZXJtaXR0ZWQgdG8gZXhhbWluZSBzZWxmLmZ1bmN0aW9uIGhlcmUuCisgICAgICAgICIiIgorICAgICAgICBwYXNzCisKKworY2xhc3MgYm9vbF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZGVmYXVsdF90eXBlID0gYm9vbAorICAgIGZvcm1hdF91bml0ID0gJ3AnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAnMCcKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5kZWZhdWx0IGlzIG5vdCB1bnNwZWNpZmllZDoKKyAgICAgICAgICAgIHNlbGYuZGVmYXVsdCA9IGJvb2woc2VsZi5kZWZhdWx0KQorICAgICAgICAgICAgc2VsZi5jX2RlZmF1bHQgPSBzdHIoaW50KHNlbGYuZGVmYXVsdCkpCisKK2NsYXNzIGNoYXJfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnY2hhcicKKyAgICBkZWZhdWx0X3R5cGUgPSBzdHIKKyAgICBmb3JtYXRfdW5pdCA9ICdjJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIidcMCciCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZi5kZWZhdWx0LCBzdHIpIGFuZCAobGVuKHNlbGYuZGVmYXVsdCkgIT0gMSk6CisgICAgICAgICAgICBmYWlsKCJjaGFyX2NvbnZlcnRlcjogaWxsZWdhbCBkZWZhdWx0IHZhbHVlICIgKyByZXByKHNlbGYuZGVmYXVsdCkpCisKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0InLCBiaXR3aXNlPVRydWUpCitjbGFzcyB1bnNpZ25lZF9jaGFyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ3Vuc2lnbmVkIGNoYXInCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnYicKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICInXDAnIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGJpdHdpc2U9RmFsc2UpOgorICAgICAgICBpZiBiaXR3aXNlOgorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICdCJworCitjbGFzcyBieXRlX2NvbnZlcnRlcih1bnNpZ25lZF9jaGFyX2NvbnZlcnRlcik6IHBhc3MKKworY2xhc3Mgc2hvcnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnc2hvcnQnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnaCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9zaG9ydF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBzaG9ydCcKKyAgICBkZWZhdWx0X3R5cGUgPSBpbnQKKyAgICBmb3JtYXRfdW5pdCA9ICdIJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gIjAiCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgYml0d2lzZT1GYWxzZSk6CisgICAgICAgIGlmIG5vdCBiaXR3aXNlOgorICAgICAgICAgICAgZmFpbCgiVW5zaWduZWQgc2hvcnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ0MnLCB0eXBlcz0nc3RyJykKK2NsYXNzIGludF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnaScKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdpbnQnKToKKyAgICAgICAgaWYgdHlwZXMgPT0gJ3N0cic6CisgICAgICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gJ0MnCisgICAgICAgIGVsaWYgdHlwZXMgIT0gJ2ludCc6CisgICAgICAgICAgICBmYWlsKCJpbnRfY29udmVydGVyOiBpbGxlZ2FsICd0eXBlcycgYXJndW1lbnQiKQorCitjbGFzcyB1bnNpZ25lZF9pbnRfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgaW50JworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ0knCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBpbnRzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdsb25nJworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ2wnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworY2xhc3MgdW5zaWduZWRfbG9uZ19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBsb25nJworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ2snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBsb25ncyBtdXN0IGJlIGJpdHdpc2UgKGZvciBub3cpLiIpCisKK2NsYXNzIFBZX0xPTkdfTE9OR19jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQWV9MT05HX0xPTkcnCisgICAgZGVmYXVsdF90eXBlID0gaW50CisgICAgZm9ybWF0X3VuaXQgPSAnTCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwIgorCitjbGFzcyB1bnNpZ25lZF9QWV9MT05HX0xPTkdfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAndW5zaWduZWQgUFlfTE9OR19MT05HJworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ0snCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBiaXR3aXNlPUZhbHNlKToKKyAgICAgICAgaWYgbm90IGJpdHdpc2U6CisgICAgICAgICAgICBmYWlsKCJVbnNpZ25lZCBQWV9MT05HX0xPTkdzIG11c3QgYmUgYml0d2lzZSAoZm9yIG5vdykuIikKKworY2xhc3MgUHlfc3NpemVfdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9zc2l6ZV90JworICAgIGRlZmF1bHRfdHlwZSA9IGludAorICAgIGZvcm1hdF91bml0ID0gJ24nCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMCIKKworCitjbGFzcyBmbG9hdF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdmbG9hdCcKKyAgICBkZWZhdWx0X3R5cGUgPSBmbG9hdAorICAgIGZvcm1hdF91bml0ID0gJ2YnCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAiMC4wIgorCitjbGFzcyBkb3VibGVfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnZG91YmxlJworICAgIGRlZmF1bHRfdHlwZSA9IGZsb2F0CisgICAgZm9ybWF0X3VuaXQgPSAnZCcKKyAgICBjX2lnbm9yZWRfZGVmYXVsdCA9ICIwLjAiCisKKworY2xhc3MgUHlfY29tcGxleF9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9jb21wbGV4JworICAgIGRlZmF1bHRfdHlwZSA9IGNvbXBsZXgKKyAgICBmb3JtYXRfdW5pdCA9ICdEJworICAgIGNfaWdub3JlZF9kZWZhdWx0ID0gInswLjAsIDAuMH0iCisKKworY2xhc3Mgb2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnTycKKworICAgIGRlZiBjb252ZXJ0ZXJfaW5pdChzZWxmLCAqLCBjb252ZXJ0ZXI9Tm9uZSwgdHlwZT1Ob25lLCBzdWJjbGFzc19vZj1Ob25lKToKKyAgICAgICAgaWYgY29udmVydGVyOgorICAgICAgICAgICAgaWYgc3ViY2xhc3Nfb2Y6CisgICAgICAgICAgICAgICAgZmFpbCgib2JqZWN0OiBDYW5ub3QgcGFzcyBpbiBib3RoICdjb252ZXJ0ZXInIGFuZCAnc3ViY2xhc3Nfb2YnIikKKyAgICAgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSAnTyYnCisgICAgICAgICAgICBzZWxmLmNvbnZlcnRlciA9IGNvbnZlcnRlcgorICAgICAgICBlbGlmIHN1YmNsYXNzX29mOgorICAgICAgICAgICAgc2VsZi5mb3JtYXRfdW5pdCA9ICdPIScKKyAgICAgICAgICAgIHNlbGYuc3ViY2xhc3Nfb2YgPSBzdWJjbGFzc19vZgorCisgICAgICAgIGlmIHR5cGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICBzZWxmLnR5cGUgPSB0eXBlCisKKworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MjJywgbGVuZ3RoPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneScsIHR5cGVzPSJieXRlcyIpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigneSMnLCB0eXBlcz0iYnl0ZXMiLCBsZW5ndGg9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6JywgbnVsbGFibGU9VHJ1ZSkKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6IycsIG51bGxhYmxlPVRydWUsIGxlbmd0aD1UcnVlKQorY2xhc3Mgc3RyX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2NvbnN0IGNoYXIgKicKKyAgICBkZWZhdWx0X3R5cGUgPSAoc3RyLCBOdWxsLCBOb25lVHlwZSkKKyAgICBmb3JtYXRfdW5pdCA9ICdzJworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIGVuY29kaW5nPU5vbmUsIHR5cGVzPSJzdHIiLAorICAgICAgICBsZW5ndGg9RmFsc2UsIG51bGxhYmxlPUZhbHNlLCB6ZXJvZXM9RmFsc2UpOgorCisgICAgICAgIHR5cGVzID0gc2V0KHR5cGVzLnN0cmlwKCkuc3BsaXQoKSkKKyAgICAgICAgYnl0ZXNfdHlwZSA9IHNldCgoImJ5dGVzIiwpKQorICAgICAgICBzdHJfdHlwZSA9IHNldCgoInN0ciIsKSkKKyAgICAgICAgYWxsXzNfdHlwZSA9IHNldCgoImJ5dGVhcnJheSIsKSkgfCBieXRlc190eXBlIHwgc3RyX3R5cGUKKyAgICAgICAgaXNfYnl0ZXMgPSB0eXBlcyA9PSBieXRlc190eXBlCisgICAgICAgIGlzX3N0ciA9IHR5cGVzID09IHN0cl90eXBlCisgICAgICAgIGlzX2FsbF8zID0gdHlwZXMgPT0gYWxsXzNfdHlwZQorCisgICAgICAgIHNlbGYubGVuZ3RoID0gYm9vbChsZW5ndGgpCisgICAgICAgIGZvcm1hdF91bml0ID0gTm9uZQorCisgICAgICAgIGlmIGVuY29kaW5nOgorICAgICAgICAgICAgc2VsZi5lbmNvZGluZyA9IGVuY29kaW5nCisKKyAgICAgICAgICAgIGlmIGlzX3N0ciBhbmQgbm90IChsZW5ndGggb3IgemVyb2VzIG9yIG51bGxhYmxlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcycKKyAgICAgICAgICAgIGVsaWYgaXNfYWxsXzMgYW5kIG5vdCAobGVuZ3RoIG9yIHplcm9lcyBvciBudWxsYWJsZSk6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAnZXQnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCB6ZXJvZXMgYW5kIG5vdCBudWxsYWJsZToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdlcyMnCisgICAgICAgICAgICBlbGlmIGlzX2FsbF8zIGFuZCBsZW5ndGggYW5kIG5vdCAobnVsbGFibGUgb3IgemVyb2VzKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICdldCMnCisKKyAgICAgICAgICAgIGlmIGZvcm1hdF91bml0LmVuZHN3aXRoKCcjJyk6CisgICAgICAgICAgICAgICAgZmFpbCgiU29ycnk6IGNvZGUgdXNpbmcgZm9ybWF0IHVuaXQgIiwgcmVwcihmb3JtYXRfdW5pdCksICJwcm9iYWJseSBkb2Vzbid0IHdvcmsgcHJvcGVybHkgeWV0LlxuR2l2ZSBMYXJyeSB5b3VyIHRlc3QgY2FzZSBhbmQgaGUnbGwgaXQuIikKKyAgICAgICAgICAgICAgICAjIFRPRE8gc2V0IHBvaW50ZXIgdG8gTlVMTAorICAgICAgICAgICAgICAgICMgVE9ETyBhZGQgY2xlYW51cCBmb3IgYnVmZmVyCisgICAgICAgICAgICAgICAgcGFzcworCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiB6ZXJvZXM6CisgICAgICAgICAgICAgICAgZmFpbCgic3RyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMgKHplcm9lcyBpcyBvbmx5IGxlZ2FsIHdpdGggYW4gZW5jb2RpbmcpIikKKworICAgICAgICAgICAgaWYgaXNfYnl0ZXMgYW5kIG5vdCAobnVsbGFibGUgb3IgbGVuZ3RoKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd5JworICAgICAgICAgICAgZWxpZiBpc19ieXRlcyBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAneSMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbm90IChudWxsYWJsZSBvciBsZW5ndGgpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3MnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbGVuZ3RoIGFuZCBub3QgbnVsbGFibGU6CisgICAgICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncyMnCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgIGFuZCBub3QgbGVuZ3RoOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3onCisgICAgICAgICAgICBlbGlmIGlzX3N0ciBhbmQgbnVsbGFibGUgYW5kIGxlbmd0aDoKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd6IycKKworICAgICAgICBpZiBub3QgZm9ybWF0X3VuaXQ6CisgICAgICAgICAgICBmYWlsKCJzdHJfY29udmVydGVyOiBpbGxlZ2FsIGNvbWJpbmF0aW9uIG9mIGFyZ3VtZW50cyIpCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisKK2NsYXNzIFB5Qnl0ZXNPYmplY3RfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlCeXRlc09iamVjdCAqJworICAgIGZvcm1hdF91bml0ID0gJ1MnCisKK2NsYXNzIFB5Qnl0ZUFycmF5T2JqZWN0X2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5Qnl0ZUFycmF5T2JqZWN0IConCisgICAgZm9ybWF0X3VuaXQgPSAnWScKKworY2xhc3MgdW5pY29kZV9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeU9iamVjdCAqJworICAgIGRlZmF1bHRfdHlwZSA9IChzdHIsIE51bGwsIE5vbmVUeXBlKQorICAgIGZvcm1hdF91bml0ID0gJ1UnCisKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd1IycsIGxlbmd0aD1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1onLCBudWxsYWJsZT1UcnVlKQorQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ1ojJywgbnVsbGFibGU9VHJ1ZSwgbGVuZ3RoPVRydWUpCitjbGFzcyBQeV9VTklDT0RFX2NvbnZlcnRlcihDQ29udmVydGVyKToKKyAgICB0eXBlID0gJ1B5X1VOSUNPREUgKicKKyAgICBkZWZhdWx0X3R5cGUgPSAoc3RyLCBOdWxsLCBOb25lVHlwZSkKKyAgICBmb3JtYXRfdW5pdCA9ICd1JworCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIG51bGxhYmxlPUZhbHNlLCBsZW5ndGg9RmFsc2UpOgorICAgICAgICBmb3JtYXRfdW5pdCA9ICdaJyBpZiBudWxsYWJsZSBlbHNlICd1JworICAgICAgICBpZiBsZW5ndGg6CisgICAgICAgICAgICBmb3JtYXRfdW5pdCArPSAnIycKKyAgICAgICAgICAgIHNlbGYubGVuZ3RoID0gVHJ1ZQorICAgICAgICBzZWxmLmZvcm1hdF91bml0ID0gZm9ybWF0X3VuaXQKKworIworIyBXZSBkZWZpbmUgdGhyZWUgc3RyaW5nIGNvbnZlbnRpb25zIGZvciBidWZmZXIgdHlwZXMgaW4gdGhlICd0eXBlcycgYXJndW1lbnQ6CisjICAnYnVmZmVyJyA6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZQorIyAgJ3J3YnVmZmVyJzogYW55IG9iamVjdCBzdXBwb3J0aW5nIHRoZSBidWZmZXIgaW50ZXJmYWNlLCBidXQgbXVzdCBiZSB3cml0ZWFibGUKKyMgICdyb2J1ZmZlcic6IGFueSBvYmplY3Qgc3VwcG9ydGluZyB0aGUgYnVmZmVyIGludGVyZmFjZSwgYnV0IG11c3Qgbm90IGJlIHdyaXRlYWJsZQorIworQGFkZF9sZWdhY3lfY19jb252ZXJ0ZXIoJ3MqJywgdHlwZXM9J3N0ciBieXRlcyBieXRlYXJyYXkgYnVmZmVyJykKK0BhZGRfbGVnYWN5X2NfY29udmVydGVyKCd6KicsIHR5cGVzPSdzdHIgYnl0ZXMgYnl0ZWFycmF5IGJ1ZmZlcicsIG51bGxhYmxlPVRydWUpCitAYWRkX2xlZ2FjeV9jX2NvbnZlcnRlcigndyonLCB0eXBlcz0nYnl0ZWFycmF5IHJ3YnVmZmVyJykKK2NsYXNzIFB5X2J1ZmZlcl9jb252ZXJ0ZXIoQ0NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdQeV9idWZmZXInCisgICAgZm9ybWF0X3VuaXQgPSAneSonCisgICAgaW1wbF9ieV9yZWZlcmVuY2UgPSBUcnVlCisgICAgY19pZ25vcmVkX2RlZmF1bHQgPSAie05VTEwsIE5VTEx9IgorCisgICAgZGVmIGNvbnZlcnRlcl9pbml0KHNlbGYsICosIHR5cGVzPSdieXRlcyBieXRlYXJyYXkgYnVmZmVyJywgbnVsbGFibGU9RmFsc2UpOgorICAgICAgICBpZiBzZWxmLmRlZmF1bHQgbm90IGluICh1bnNwZWNpZmllZCwgTm9uZSk6CisgICAgICAgICAgICBmYWlsKCJUaGUgb25seSBsZWdhbCBkZWZhdWx0IHZhbHVlIGZvciBQeV9idWZmZXIgaXMgTm9uZS4iKQorICAgICAgICBzZWxmLmNfZGVmYXVsdCA9IHNlbGYuY19pZ25vcmVkX2RlZmF1bHQKKyAgICAgICAgdHlwZXMgPSBzZXQodHlwZXMuc3RyaXAoKS5zcGxpdCgpKQorICAgICAgICBieXRlc190eXBlID0gc2V0KCgnYnl0ZXMnLCkpCisgICAgICAgIGJ5dGVhcnJheV90eXBlID0gc2V0KCgnYnl0ZWFycmF5JywpKQorICAgICAgICBidWZmZXJfdHlwZSA9IHNldCgoJ2J1ZmZlcicsKSkKKyAgICAgICAgcndidWZmZXJfdHlwZSA9IHNldCgoJ3J3YnVmZmVyJywpKQorICAgICAgICByb2J1ZmZlcl90eXBlID0gc2V0KCgncm9idWZmZXInLCkpCisgICAgICAgIHN0cl90eXBlID0gc2V0KCgnc3RyJywpKQorICAgICAgICBieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUgPSBieXRlc190eXBlIHwgYnl0ZWFycmF5X3R5cGUgfCBidWZmZXJfdHlwZQorCisgICAgICAgIGZvcm1hdF91bml0ID0gTm9uZQorICAgICAgICBpZiB0eXBlcyA9PSAoc3RyX3R5cGUgfCBieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUpOgorICAgICAgICAgICAgZm9ybWF0X3VuaXQgPSAncyonIGlmIG5vdCBudWxsYWJsZSBlbHNlICd6KicKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIG51bGxhYmxlOgorICAgICAgICAgICAgICAgIGZhaWwoJ1B5X2J1ZmZlcl9jb252ZXJ0ZXI6IGlsbGVnYWwgY29tYmluYXRpb24gb2YgYXJndW1lbnRzIChudWxsYWJsZT1UcnVlKScpCisgICAgICAgICAgICBlbGlmIHR5cGVzID09IChieXRlc19ieXRlYXJyYXlfYnVmZmVyX3R5cGUpOgorICAgICAgICAgICAgICAgIGZvcm1hdF91bml0ID0gJ3kqJworICAgICAgICAgICAgZWxpZiB0eXBlcyA9PSAoYnl0ZWFycmF5X3R5cGUgfCByd2J1ZmZlcl90eXBlKToKKyAgICAgICAgICAgICAgICBmb3JtYXRfdW5pdCA9ICd3KicKKyAgICAgICAgaWYgbm90IGZvcm1hdF91bml0OgorICAgICAgICAgICAgZmFpbCgiUHlfYnVmZmVyX2NvbnZlcnRlcjogaWxsZWdhbCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMiKQorCisgICAgICAgIHNlbGYuZm9ybWF0X3VuaXQgPSBmb3JtYXRfdW5pdAorCisgICAgZGVmIGNsZWFudXAoc2VsZik6CisgICAgICAgIG5hbWUgPSBlbnN1cmVfbGVnYWxfY19pZGVudGlmaWVyKHNlbGYubmFtZSkKKyAgICAgICAgcmV0dXJuICIiLmpvaW4oWyJpZiAoIiwgbmFtZSwgIi5vYmopXG4gICBQeUJ1ZmZlcl9SZWxlYXNlKCYiLCBuYW1lLCAiKTtcbiJdKQorCisKK2RlZiBjb3JyZWN0X25hbWVfZm9yX3NlbGYoZik6CisgICAgaWYgZi5raW5kIGluIChDQUxMQUJMRSwgTUVUSE9EX0lOSVQpOgorICAgICAgICBpZiBmLmNsczoKKyAgICAgICAgICAgIHJldHVybiAiUHlPYmplY3QgKiIsICJzZWxmIgorICAgICAgICByZXR1cm4gIlB5TW9kdWxlRGVmICoiLCAibW9kdWxlIgorICAgIGlmIGYua2luZCA9PSBTVEFUSUNfTUVUSE9EOgorICAgICAgICByZXR1cm4gInZvaWQgKiIsICJudWxsIgorICAgIGlmIGYua2luZCBpbiAoQ0xBU1NfTUVUSE9ELCBNRVRIT0RfTkVXKToKKyAgICAgICAgcmV0dXJuICJQeVR5cGVPYmplY3QgKiIsICJ0eXBlIgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigiVW5oYW5kbGVkIHR5cGUgb2YgZnVuY3Rpb24gZjogIiArIHJlcHIoZi5raW5kKSkKKworZGVmIHJlcXVpcmVkX3R5cGVfZm9yX3NlbGZfZm9yX3BhcnNlcihmKToKKyAgICB0eXBlLCBfID0gY29ycmVjdF9uYW1lX2Zvcl9zZWxmKGYpCisgICAgaWYgZi5raW5kIGluIChNRVRIT0RfSU5JVCwgTUVUSE9EX05FVywgU1RBVElDX01FVEhPRCwgQ0xBU1NfTUVUSE9EKToKKyAgICAgICAgcmV0dXJuIHR5cGUKKyAgICByZXR1cm4gTm9uZQorCisKK2NsYXNzIHNlbGZfY29udmVydGVyKENDb252ZXJ0ZXIpOgorICAgICIiIgorICAgIEEgc3BlY2lhbC1jYXNlIGNvbnZlcnRlcjoKKyAgICB0aGlzIGlzIHRoZSBkZWZhdWx0IGNvbnZlcnRlciB1c2VkIGZvciAic2VsZiIuCisgICAgIiIiCisgICAgdHlwZSA9IE5vbmUKKyAgICBmb3JtYXRfdW5pdCA9ICcnCisKKyAgICBkZWYgY29udmVydGVyX2luaXQoc2VsZiwgKiwgdHlwZT1Ob25lKToKKyAgICAgICAgc2VsZi5zcGVjaWZpZWRfdHlwZSA9IHR5cGUKKworICAgIGRlZiBwcmVfcmVuZGVyKHNlbGYpOgorICAgICAgICBmID0gc2VsZi5mdW5jdGlvbgorICAgICAgICBkZWZhdWx0X3R5cGUsIGRlZmF1bHRfbmFtZSA9IGNvcnJlY3RfbmFtZV9mb3Jfc2VsZihmKQorICAgICAgICBzZWxmLnNpZ25hdHVyZV9uYW1lID0gZGVmYXVsdF9uYW1lCisgICAgICAgIHNlbGYudHlwZSA9IHNlbGYuc3BlY2lmaWVkX3R5cGUgb3Igc2VsZi50eXBlIG9yIGRlZmF1bHRfdHlwZQorCisgICAgICAgIGtpbmQgPSBzZWxmLmZ1bmN0aW9uLmtpbmQKKyAgICAgICAgbmV3X29yX2luaXQgPSBraW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkKKworICAgICAgICBpZiAoa2luZCA9PSBTVEFUSUNfTUVUSE9EKSBvciBuZXdfb3JfaW5pdDoKKyAgICAgICAgICAgIHNlbGYuc2hvd19pbl9zaWduYXR1cmUgPSBGYWxzZQorCisgICAgIyB0cF9uZXcgKE1FVEhPRF9ORVcpIGZ1bmN0aW9ucyBhcmUgb2YgdHlwZSBuZXdmdW5jOgorICAgICMgICAgIHR5cGVkZWYgUHlPYmplY3QgKigqbmV3ZnVuYykoc3RydWN0IF90eXBlb2JqZWN0ICosIFB5T2JqZWN0ICosIFB5T2JqZWN0ICopOworICAgICMgUHlUeXBlT2JqZWN0IGlzIGEgdHlwZWRlZiBmb3Igc3RydWN0IF90eXBlb2JqZWN0LgorICAgICMKKyAgICAjIHRwX2luaXQgKE1FVEhPRF9JTklUKSBmdW5jdGlvbnMgYXJlIG9mIHR5cGUgaW5pdHByb2M6CisgICAgIyAgICAgdHlwZWRlZiBpbnQgKCppbml0cHJvYykoUHlPYmplY3QgKiwgUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgIworICAgICMgQWxsIG90aGVyIGZ1bmN0aW9ucyBnZW5lcmF0ZWQgYnkgQXJndW1lbnQgQ2xpbmljIGFyZSBzdG9yZWQgaW4KKyAgICAjIFB5TWV0aG9kRGVmIHN0cnVjdHVyZXMsIGluIHRoZSBtbF9tZXRoIHNsb3QsIHdoaWNoIGlzIG9mIHR5cGUgUHlDRnVuY3Rpb246CisgICAgIyAgICAgdHlwZWRlZiBQeU9iamVjdCAqKCpQeUNGdW5jdGlvbikoUHlPYmplY3QgKiwgUHlPYmplY3QgKik7CisgICAgIyBIb3dldmVyISAgV2UgaGFiaXR1YWxseSBjYXN0IHRoZXNlIGZ1bmN0aW9ucyB0byBQeUNGdW5jdGlvbiwKKyAgICAjIHNpbmNlIGZ1bmN0aW9ucyB0aGF0IGFjY2VwdCBrZXl3b3JkIGFyZ3VtZW50cyBkb24ndCBmaXQgdGhpcyBzaWduYXR1cmUKKyAgICAjIGJ1dCBhcmUgc3RvcmVkIHRoZXJlIGFueXdheS4gIFNvIHN0cmljdCB0eXBlIGVxdWFsaXR5IGlzbid0IGltcG9ydGFudAorICAgICMgZm9yIHRoZXNlIGZ1bmN0aW9ucy4KKyAgICAjCisgICAgIyBTbzoKKyAgICAjCisgICAgIyAqIFRoZSBuYW1lIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIGltcGwgYW5kIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIHdpbGwgYWx3YXlzCisgICAgIyAgIGJlIHNlbGYubmFtZS4KKyAgICAjCisgICAgIyAqIFRoZSB0eXBlIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIGltcGwgd2lsbCBhbHdheXMgYmUgb2Ygc2VsZi50eXBlLgorICAgICMKKyAgICAjICogSWYgdGhlIGZ1bmN0aW9uIGlzIG5laXRoZXIgdHBfbmV3IChNRVRIT0RfTkVXKSBub3IgdHBfaW5pdCAoTUVUSE9EX0lOSVQpOgorICAgICMgICAqIFRoZSB0eXBlIG9mIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gdGhlIHBhcnNpbmcgZnVuY3Rpb24gaXMgYWxzbyBzZWxmLnR5cGUuCisgICAgIyAgICAgVGhpcyBtZWFucyB0aGF0IGlmIHlvdSBzdGVwIGludG8gdGhlIHBhcnNpbmcgZnVuY3Rpb24sIHlvdXIgInNlbGYiIHBhcmFtZXRlcgorICAgICMgICAgIGlzIG9mIHRoZSBjb3JyZWN0IHR5cGUsIHdoaWNoIG1heSBtYWtlIGRlYnVnZ2luZyBtb3JlIHBsZWFzYW50LgorICAgICMKKyAgICAjICogRWxzZSBpZiB0aGUgZnVuY3Rpb24gaXMgdHBfbmV3IChNRVRIT0RfTkVXKToKKyAgICAjICAgKiBUaGUgdHlwZSBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGlzICJQeVR5cGVPYmplY3QgKiIsCisgICAgIyAgICAgc28gdGhlIHR5cGUgc2lnbmF0dXJlIG9mIHRoZSBmdW5jdGlvbiBjYWxsIGlzIGFuIGV4YWN0IG1hdGNoLgorICAgICMgICAqIElmIHNlbGYudHlwZSAhPSAiUHlUeXBlT2JqZWN0ICoiLCB3ZSBjYXN0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gc2VsZi50eXBlCisgICAgIyAgICAgaW4gdGhlIGltcGwgY2FsbC4KKyAgICAjCisgICAgIyAqIEVsc2UgaWYgdGhlIGZ1bmN0aW9uIGlzIHRwX2luaXQgKE1FVEhPRF9JTklUKToKKyAgICAjICAgKiBUaGUgdHlwZSBvZiB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHRoZSBwYXJzaW5nIGZ1bmN0aW9uIGlzICJQeU9iamVjdCAqIiwKKyAgICAjICAgICBzbyB0aGUgdHlwZSBzaWduYXR1cmUgb2YgdGhlIGZ1bmN0aW9uIGNhbGwgaXMgYW4gZXhhY3QgbWF0Y2guCisgICAgIyAgICogSWYgc2VsZi50eXBlICE9ICJQeU9iamVjdCAqIiwgd2UgY2FzdCB0aGUgZmlyc3QgcGFyYW1ldGVyIHRvIHNlbGYudHlwZQorICAgICMgICAgIGluIHRoZSBpbXBsIGNhbGwuCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcGFyc2VyX3R5cGUoc2VsZik6CisgICAgICAgIHJldHVybiByZXF1aXJlZF90eXBlX2Zvcl9zZWxmX2Zvcl9wYXJzZXIoc2VsZi5mdW5jdGlvbikgb3Igc2VsZi50eXBlCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIHBhcmFtZXRlciwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBwYXJhbWV0ZXIgaXMgYSBjbGluaWMuUGFyYW1ldGVyIGluc3RhbmNlLgorICAgICAgICBkYXRhIGlzIGEgQ1JlbmRlckRhdGEgaW5zdGFuY2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxmLmZ1bmN0aW9uLmtpbmQgPT0gU1RBVElDX01FVEhPRDoKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYuX3JlbmRlcl9zZWxmKHBhcmFtZXRlciwgZGF0YSkKKworICAgICAgICBpZiBzZWxmLnR5cGUgIT0gc2VsZi5wYXJzZXJfdHlwZToKKyAgICAgICAgICAgICMgaW5zZXJ0IGNhc3QgdG8gaW1wbF9hcmd1bWVudFswXSwgYWthIHNlbGYuCisgICAgICAgICAgICAjIHdlIGtub3cgd2UncmUgaW4gdGhlIGZpcnN0IHNsb3QgaW4gYWxsIHRoZSBDUmVuZGVyRGF0YSBsaXN0cywKKyAgICAgICAgICAgICMgYmVjYXVzZSB3ZSByZW5kZXIgcGFyYW1ldGVycyBpbiBvcmRlciwgYW5kIHNlbGYgaXMgYWx3YXlzIGZpcnN0LgorICAgICAgICAgICAgYXNzZXJ0IGxlbihkYXRhLmltcGxfYXJndW1lbnRzKSA9PSAxCisgICAgICAgICAgICBhc3NlcnQgZGF0YS5pbXBsX2FyZ3VtZW50c1swXSA9PSBzZWxmLm5hbWUKKyAgICAgICAgICAgIGRhdGEuaW1wbF9hcmd1bWVudHNbMF0gPSAnKCcgKyBzZWxmLnR5cGUgKyAiKSIgKyBkYXRhLmltcGxfYXJndW1lbnRzWzBdCisKKyAgICBkZWYgc2V0X3RlbXBsYXRlX2RpY3Qoc2VsZiwgdGVtcGxhdGVfZGljdCk6CisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3NlbGZfbmFtZSddID0gc2VsZi5uYW1lCisgICAgICAgIHRlbXBsYXRlX2RpY3RbJ3NlbGZfdHlwZSddID0gc2VsZi5wYXJzZXJfdHlwZQorICAgICAgICBraW5kID0gc2VsZi5mdW5jdGlvbi5raW5kCisgICAgICAgIGNscyA9IHNlbGYuZnVuY3Rpb24uY2xzCisKKyAgICAgICAgaWYgKChraW5kIGluIChNRVRIT0RfTkVXLCBNRVRIT0RfSU5JVCkpIGFuZCBjbHMgYW5kIGNscy50eXBlZGVmKToKKyAgICAgICAgICAgIGlmIGtpbmQgPT0gTUVUSE9EX05FVzoKKyAgICAgICAgICAgICAgICBwYXNzZWRfaW5fdHlwZSA9IHNlbGYubmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXNzZWRfaW5fdHlwZSA9ICdQeV9UWVBFKHt9KScuZm9ybWF0KHNlbGYubmFtZSkKKworICAgICAgICAgICAgbGluZSA9ICcoe3Bhc3NlZF9pbl90eXBlfSA9PSB7dHlwZV9vYmplY3R9KSAmJlxuICAgICAgICAnCisgICAgICAgICAgICBkID0geworICAgICAgICAgICAgICAgICd0eXBlX29iamVjdCc6IHNlbGYuZnVuY3Rpb24uY2xzLnR5cGVfb2JqZWN0LAorICAgICAgICAgICAgICAgICdwYXNzZWRfaW5fdHlwZSc6IHBhc3NlZF9pbl90eXBlCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgdGVtcGxhdGVfZGljdFsnc2VsZl90eXBlX2NoZWNrJ10gPSBsaW5lLmZvcm1hdF9tYXAoZCkKKworCisKK2RlZiBhZGRfY19yZXR1cm5fY29udmVydGVyKGYsIG5hbWU9Tm9uZSk6CisgICAgaWYgbm90IG5hbWU6CisgICAgICAgIG5hbWUgPSBmLl9fbmFtZV9fCisgICAgICAgIGlmIG5vdCBuYW1lLmVuZHN3aXRoKCdfcmV0dXJuX2NvbnZlcnRlcicpOgorICAgICAgICAgICAgcmV0dXJuIGYKKyAgICAgICAgbmFtZSA9IG5hbWVbOi1sZW4oJ19yZXR1cm5fY29udmVydGVyJyldCisgICAgcmV0dXJuX2NvbnZlcnRlcnNbbmFtZV0gPSBmCisgICAgcmV0dXJuIGYKKworCitjbGFzcyBDUmV0dXJuQ29udmVydGVyQXV0b1JlZ2lzdGVyKHR5cGUpOgorICAgIGRlZiBfX2luaXRfXyhjbHMsIG5hbWUsIGJhc2VzLCBjbGFzc2RpY3QpOgorICAgICAgICBhZGRfY19yZXR1cm5fY29udmVydGVyKGNscykKKworY2xhc3MgQ1JldHVybkNvbnZlcnRlcihtZXRhY2xhc3M9Q1JldHVybkNvbnZlcnRlckF1dG9SZWdpc3Rlcik6CisKKyAgICAjIFRoZSBDIHR5cGUgdG8gdXNlIGZvciB0aGlzIHZhcmlhYmxlLgorICAgICMgJ3R5cGUnIHNob3VsZCBiZSBhIFB5dGhvbiBzdHJpbmcgc3BlY2lmeWluZyB0aGUgdHlwZSwgZS5nLiAiaW50Ii4KKyAgICAjIElmIHRoaXMgaXMgYSBwb2ludGVyIHR5cGUsIHRoZSB0eXBlIHN0cmluZyBzaG91bGQgZW5kIHdpdGggJyAqJy4KKyAgICB0eXBlID0gJ1B5T2JqZWN0IConCisKKyAgICAjIFRoZSBQeXRob24gZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBwYXJhbWV0ZXIsIGFzIGEgUHl0aG9uIHZhbHVlLgorICAgICMgT3IgdGhlIG1hZ2ljIHZhbHVlICJ1bnNwZWNpZmllZCIgaWYgdGhlcmUgaXMgbm8gZGVmYXVsdC4KKyAgICBkZWZhdWx0ID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICosIHB5X2RlZmF1bHQ9Tm9uZSwgKiprd2FyZ3MpOgorICAgICAgICBzZWxmLnB5X2RlZmF1bHQgPSBweV9kZWZhdWx0CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYucmV0dXJuX2NvbnZlcnRlcl9pbml0KCoqa3dhcmdzKQorICAgICAgICBleGNlcHQgVHlwZUVycm9yIGFzIGU6CisgICAgICAgICAgICBzID0gJywgJy5qb2luKG5hbWUgKyAnPScgKyByZXByKHZhbHVlKSBmb3IgbmFtZSwgdmFsdWUgaW4ga3dhcmdzLml0ZW1zKCkpCisgICAgICAgICAgICBzeXMuZXhpdChzZWxmLl9fY2xhc3NfXy5fX25hbWVfXyArICcoJyArIHMgKyAnKVxuJyArIHN0cihlKSkKKworICAgIGRlZiByZXR1cm5fY29udmVydGVyX2luaXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBkZWNsYXJlKHNlbGYsIGRhdGEsIG5hbWU9Il9yZXR1cm5fdmFsdWUiKToKKyAgICAgICAgbGluZSA9IFtdCisgICAgICAgIGFkZCA9IGxpbmUuYXBwZW5kCisgICAgICAgIGFkZChzZWxmLnR5cGUpCisgICAgICAgIGlmIG5vdCBzZWxmLnR5cGUuZW5kc3dpdGgoJyonKToKKyAgICAgICAgICAgIGFkZCgnICcpCisgICAgICAgIGFkZChuYW1lICsgJzsnKQorICAgICAgICBkYXRhLmRlY2xhcmF0aW9ucy5hcHBlbmQoJycuam9pbihsaW5lKSkKKyAgICAgICAgZGF0YS5yZXR1cm5fdmFsdWUgPSBuYW1lCisKKyAgICBkZWYgZXJyX29jY3VycmVkX2lmKHNlbGYsIGV4cHIsIGRhdGEpOgorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgnaWYgKCh7fSkgJiYgUHlFcnJfT2NjdXJyZWQoKSlcbiAgICBnb3RvIGV4aXQ7XG4nLmZvcm1hdChleHByKSkKKworICAgIGRlZiBlcnJfb2NjdXJyZWRfaWZfbnVsbF9wb2ludGVyKHNlbGYsIHZhcmlhYmxlLCBkYXRhKToKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoJ2lmICh7fSA9PSBOVUxMKVxuICAgIGdvdG8gZXhpdDtcbicuZm9ybWF0KHZhcmlhYmxlKSkKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgZnVuY3Rpb24gaXMgYSBjbGluaWMuRnVuY3Rpb24gaW5zdGFuY2UuCisgICAgICAgIGRhdGEgaXMgYSBDUmVuZGVyRGF0YSBpbnN0YW5jZS4KKyAgICAgICAgIiIiCisgICAgICAgIHBhc3MKKworYWRkX2NfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyLCAnb2JqZWN0JykKKworY2xhc3MgTm9uZVR5cGVfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKCcnJworaWYgKF9yZXR1cm5fdmFsdWUgIT0gUHlfTm9uZSkKKyAgICBnb3RvIGV4aXQ7CityZXR1cm5fdmFsdWUgPSBQeV9Ob25lOworUHlfSU5DUkVGKFB5X05vbmUpOworJycnLnN0cmlwKCkpCisKK2NsYXNzIGJvb2xfcmV0dXJuX2NvbnZlcnRlcihDUmV0dXJuQ29udmVydGVyKToKKyAgICB0eXBlID0gJ2ludCcKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgncmV0dXJuX3ZhbHVlID0gUHlCb29sX0Zyb21Mb25nKChsb25nKV9yZXR1cm5fdmFsdWUpO1xuJykKKworY2xhc3MgbG9uZ19yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnbG9uZycKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tTG9uZycKKyAgICBjYXN0ID0gJycKKworICAgIGRlZiByZW5kZXIoc2VsZiwgZnVuY3Rpb24sIGRhdGEpOgorICAgICAgICBzZWxmLmRlY2xhcmUoZGF0YSkKKyAgICAgICAgc2VsZi5lcnJfb2NjdXJyZWRfaWYoIl9yZXR1cm5fdmFsdWUgPT0gLTEiLCBkYXRhKQorICAgICAgICBkYXRhLnJldHVybl9jb252ZXJzaW9uLmFwcGVuZCgKKyAgICAgICAgICAgICcnLmpvaW4oKCdyZXR1cm5fdmFsdWUgPSAnLCBzZWxmLmNvbnZlcnNpb25fZm4sICcoJywgc2VsZi5jYXN0LCAnX3JldHVybl92YWx1ZSk7XG4nKSkpCisKK2NsYXNzIGludF9yZXR1cm5fY29udmVydGVyKGxvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICdpbnQnCisgICAgY2FzdCA9ICcobG9uZyknCisKK2NsYXNzIGluaXRfcmV0dXJuX2NvbnZlcnRlcihsb25nX3JldHVybl9jb252ZXJ0ZXIpOgorICAgICIiIgorICAgIFNwZWNpYWwgcmV0dXJuIGNvbnZlcnRlciBmb3IgX19pbml0X18gZnVuY3Rpb25zLgorICAgICIiIgorICAgIHR5cGUgPSAnaW50JworICAgIGNhc3QgPSAnKGxvbmcpJworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHBhc3MKKworY2xhc3MgdW5zaWduZWRfbG9uZ19yZXR1cm5fY29udmVydGVyKGxvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBsb25nJworICAgIGNvbnZlcnNpb25fZm4gPSAnUHlMb25nX0Zyb21VbnNpZ25lZExvbmcnCisKK2NsYXNzIHVuc2lnbmVkX2ludF9yZXR1cm5fY29udmVydGVyKHVuc2lnbmVkX2xvbmdfcmV0dXJuX2NvbnZlcnRlcik6CisgICAgdHlwZSA9ICd1bnNpZ25lZCBpbnQnCisgICAgY2FzdCA9ICcodW5zaWduZWQgbG9uZyknCisKK2NsYXNzIFB5X3NzaXplX3RfcmV0dXJuX2NvbnZlcnRlcihsb25nX3JldHVybl9jb252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnUHlfc3NpemVfdCcKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tU3NpemVfdCcKKworY2xhc3Mgc2l6ZV90X3JldHVybl9jb252ZXJ0ZXIobG9uZ19yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ3NpemVfdCcKKyAgICBjb252ZXJzaW9uX2ZuID0gJ1B5TG9uZ19Gcm9tU2l6ZV90JworCisKK2NsYXNzIGRvdWJsZV9yZXR1cm5fY29udmVydGVyKENSZXR1cm5Db252ZXJ0ZXIpOgorICAgIHR5cGUgPSAnZG91YmxlJworICAgIGNhc3QgPSAnJworCisgICAgZGVmIHJlbmRlcihzZWxmLCBmdW5jdGlvbiwgZGF0YSk6CisgICAgICAgIHNlbGYuZGVjbGFyZShkYXRhKQorICAgICAgICBzZWxmLmVycl9vY2N1cnJlZF9pZigiX3JldHVybl92YWx1ZSA9PSAtMS4wIiwgZGF0YSkKKyAgICAgICAgZGF0YS5yZXR1cm5fY29udmVyc2lvbi5hcHBlbmQoCisgICAgICAgICAgICAncmV0dXJuX3ZhbHVlID0gUHlGbG9hdF9Gcm9tRG91YmxlKCcgKyBzZWxmLmNhc3QgKyAnX3JldHVybl92YWx1ZSk7XG4nKQorCitjbGFzcyBmbG9hdF9yZXR1cm5fY29udmVydGVyKGRvdWJsZV9yZXR1cm5fY29udmVydGVyKToKKyAgICB0eXBlID0gJ2Zsb2F0JworICAgIGNhc3QgPSAnKGRvdWJsZSknCisKKworY2xhc3MgRGVjb2RlRlNEZWZhdWx0X3JldHVybl9jb252ZXJ0ZXIoQ1JldHVybkNvbnZlcnRlcik6CisgICAgdHlwZSA9ICdjaGFyIConCisKKyAgICBkZWYgcmVuZGVyKHNlbGYsIGZ1bmN0aW9uLCBkYXRhKToKKyAgICAgICAgc2VsZi5kZWNsYXJlKGRhdGEpCisgICAgICAgIHNlbGYuZXJyX29jY3VycmVkX2lmX251bGxfcG9pbnRlcigiX3JldHVybl92YWx1ZSIsIGRhdGEpCisgICAgICAgIGRhdGEucmV0dXJuX2NvbnZlcnNpb24uYXBwZW5kKAorICAgICAgICAgICAgJ3JldHVybl92YWx1ZSA9IFB5VW5pY29kZV9EZWNvZGVGU0RlZmF1bHQoX3JldHVybl92YWx1ZSk7XG4nKQorCisKK2NsYXNzIEluZGVudFN0YWNrOgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pbmRlbnRzID0gW10KKyAgICAgICAgc2VsZi5tYXJnaW4gPSBOb25lCisKKyAgICBkZWYgX2Vuc3VyZShzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoJ0luZGVudFN0YWNrIGV4cGVjdGVkIGluZGVudHMsIGJ1dCBub25lIGFyZSBkZWZpbmVkLicpCisKKyAgICBkZWYgbWVhc3VyZShzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgbGluZSdzIG1hcmdpbi4KKyAgICAgICAgIiIiCisgICAgICAgIGlmICdcdCcgaW4gbGluZToKKyAgICAgICAgICAgIGZhaWwoJ1RhYiBjaGFyYWN0ZXJzIGFyZSBpbGxlZ2FsIGluIHRoZSBBcmd1bWVudCBDbGluaWMgRFNMLicpCisgICAgICAgIHN0cmlwcGVkID0gbGluZS5sc3RyaXAoKQorICAgICAgICBpZiBub3QgbGVuKHN0cmlwcGVkKToKKyAgICAgICAgICAgICMgd2UgY2FuJ3QgdGVsbCBhbnl0aGluZyBmcm9tIGFuIGVtcHR5IGxpbmUKKyAgICAgICAgICAgICMgc28ganVzdCBwcmV0ZW5kIGl0J3MgaW5kZW50ZWQgbGlrZSBvdXIgY3VycmVudCBpbmRlbnQKKyAgICAgICAgICAgIHNlbGYuX2Vuc3VyZSgpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRlbnRzWy0xXQorICAgICAgICByZXR1cm4gbGVuKGxpbmUpIC0gbGVuKHN0cmlwcGVkKQorCisgICAgZGVmIGluZmVyKHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgSW5mZXIgd2hhdCBpcyBub3cgdGhlIGN1cnJlbnQgbWFyZ2luIGJhc2VkIG9uIHRoaXMgbGluZS4KKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIDEgaWYgd2UgaGF2ZSBpbmRlbnRlZCAob3IgdGhpcyBpcyB0aGUgZmlyc3QgbWFyZ2luKQorICAgICAgICAgICAgMCBpZiB0aGUgbWFyZ2luIGhhcyBub3QgY2hhbmdlZAorICAgICAgICAgICAtTiBpZiB3ZSBoYXZlIGRlZGVudGVkIE4gdGltZXMKKyAgICAgICAgIiIiCisgICAgICAgIGluZGVudCA9IHNlbGYubWVhc3VyZShsaW5lKQorICAgICAgICBtYXJnaW4gPSAnICcgKiBpbmRlbnQKKyAgICAgICAgaWYgbm90IHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgIGN1cnJlbnQgPSBzZWxmLmluZGVudHNbLTFdCisgICAgICAgIGlmIGluZGVudCA9PSBjdXJyZW50OgorICAgICAgICAgICAgcmV0dXJuIDAKKyAgICAgICAgaWYgaW5kZW50ID4gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5hcHBlbmQoaW5kZW50KQorICAgICAgICAgICAgc2VsZi5tYXJnaW4gPSBtYXJnaW4KKyAgICAgICAgICAgIHJldHVybiAxCisgICAgICAgICMgaW5kZW50IDwgY3VycmVudAorICAgICAgICBpZiBpbmRlbnQgbm90IGluIHNlbGYuaW5kZW50czoKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgb3V0ZGVudC4iKQorICAgICAgICBvdXRkZW50X2NvdW50ID0gMAorICAgICAgICB3aGlsZSBpbmRlbnQgIT0gY3VycmVudDoKKyAgICAgICAgICAgIHNlbGYuaW5kZW50cy5wb3AoKQorICAgICAgICAgICAgY3VycmVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgICAgIG91dGRlbnRfY291bnQgLT0gMQorICAgICAgICBzZWxmLm1hcmdpbiA9IG1hcmdpbgorICAgICAgICByZXR1cm4gb3V0ZGVudF9jb3VudAorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGRlcHRoKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyBob3cgbWFueSBtYXJnaW5zIGFyZSBjdXJyZW50bHkgZGVmaW5lZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5pbmRlbnRzKQorCisgICAgZGVmIGluZGVudChzZWxmLCBsaW5lKToKKyAgICAgICAgIiIiCisgICAgICAgIEluZGVudHMgYSBsaW5lIGJ5IHRoZSBjdXJyZW50bHkgZGVmaW5lZCBtYXJnaW4uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gc2VsZi5tYXJnaW4gKyBsaW5lCisKKyAgICBkZWYgZGVkZW50KHNlbGYsIGxpbmUpOgorICAgICAgICAiIiIKKyAgICAgICAgRGVkZW50cyBhIGxpbmUgYnkgdGhlIGN1cnJlbnRseSBkZWZpbmVkIG1hcmdpbi4KKyAgICAgICAgKFRoZSBpbnZlcnNlIG9mICdpbmRlbnQnLikKKyAgICAgICAgIiIiCisgICAgICAgIG1hcmdpbiA9IHNlbGYubWFyZ2luCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50c1stMV0KKyAgICAgICAgaWYgbm90IGxpbmUuc3RhcnRzd2l0aChtYXJnaW4pOgorICAgICAgICAgICAgZmFpbCgnQ2Fubm90IGRlZGVudCwgbGluZSBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmV2aW91cyBtYXJnaW46JykKKyAgICAgICAgcmV0dXJuIGxpbmVbaW5kZW50Ol0KKworCitjbGFzcyBEU0xQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHNlbGYuY2xpbmljID0gY2xpbmljCisKKyAgICAgICAgc2VsZi5kaXJlY3RpdmVzID0ge30KKyAgICAgICAgZm9yIG5hbWUgaW4gZGlyKHNlbGYpOgorICAgICAgICAgICAgIyBmdW5jdGlvbnMgdGhhdCBzdGFydCB3aXRoIGRpcmVjdGl2ZV8gYXJlIGFkZGVkIHRvIGRpcmVjdGl2ZXMKKyAgICAgICAgICAgIF8sIHMsIGtleSA9IG5hbWUucGFydGl0aW9uKCJkaXJlY3RpdmVfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzW2tleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgICAgICMgZnVuY3Rpb25zIHRoYXQgc3RhcnQgd2l0aCBhdF8gYXJlIHRvbywgd2l0aCBhbiBAIGluIGZyb250CisgICAgICAgICAgICBfLCBzLCBrZXkgPSBuYW1lLnBhcnRpdGlvbigiYXRfIikKKyAgICAgICAgICAgIGlmIHM6CisgICAgICAgICAgICAgICAgc2VsZi5kaXJlY3RpdmVzWydAJyArIGtleV0gPSBnZXRhdHRyKHNlbGYsIG5hbWUpCisKKyAgICAgICAgc2VsZi5yZXNldCgpCisKKyAgICBkZWYgcmVzZXQoc2VsZik6CisgICAgICAgIHNlbGYuZnVuY3Rpb24gPSBOb25lCisgICAgICAgIHNlbGYuc3RhdGUgPSBzZWxmLnN0YXRlX2RzbF9zdGFydAorICAgICAgICBzZWxmLnBhcmFtZXRlcl9pbmRlbnQgPSBOb25lCisgICAgICAgIHNlbGYua2V5d29yZF9vbmx5ID0gRmFsc2UKKyAgICAgICAgc2VsZi5ncm91cCA9IDAKKyAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3N0YXJ0CisgICAgICAgIHNlbGYuc2Vlbl9wb3NpdGlvbmFsX3dpdGhfZGVmYXVsdCA9IEZhbHNlCisgICAgICAgIHNlbGYuaW5kZW50ID0gSW5kZW50U3RhY2soKQorICAgICAgICBzZWxmLmtpbmQgPSBDQUxMQUJMRQorICAgICAgICBzZWxmLmNvZXhpc3QgPSBGYWxzZQorICAgICAgICBzZWxmLnBhcmFtZXRlcl9jb250aW51YXRpb24gPSAnJworICAgICAgICBzZWxmLnByZXNlcnZlX291dHB1dCA9IEZhbHNlCisKKyAgICBkZWYgZGlyZWN0aXZlX3ZlcnNpb24oc2VsZiwgcmVxdWlyZWQpOgorICAgICAgICBnbG9iYWwgdmVyc2lvbgorICAgICAgICBpZiB2ZXJzaW9uX2NvbXBhcml0b3IodmVyc2lvbiwgcmVxdWlyZWQpIDwgMDoKKyAgICAgICAgICAgIGZhaWwoIkluc3VmZmljaWVudCBDbGluaWMgdmVyc2lvbiFcbiAgVmVyc2lvbjogIiArIHZlcnNpb24gKyAiXG4gIFJlcXVpcmVkOiAiICsgcmVxdWlyZWQpCisKKyAgICBkZWYgZGlyZWN0aXZlX21vZHVsZShzZWxmLCBuYW1lKToKKyAgICAgICAgZmllbGRzID0gbmFtZS5zcGxpdCgnLicpCisgICAgICAgIG5ldyA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKyAgICAgICAgaWYgY2xzOgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgbmVzdCBhIG1vZHVsZSBpbnNpZGUgYSBjbGFzcyEiKQorCisgICAgICAgIGlmIG5hbWUgaW4gbW9kdWxlLmNsYXNzZXM6CisgICAgICAgICAgICBmYWlsKCJBbHJlYWR5IGRlZmluZWQgbW9kdWxlICIgKyByZXByKG5hbWUpICsgIiEiKQorCisgICAgICAgIG0gPSBNb2R1bGUobmFtZSwgbW9kdWxlKQorICAgICAgICBtb2R1bGUubW9kdWxlc1tuYW1lXSA9IG0KKyAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChtKQorCisgICAgZGVmIGRpcmVjdGl2ZV9jbGFzcyhzZWxmLCBuYW1lLCB0eXBlZGVmLCB0eXBlX29iamVjdCk6CisgICAgICAgIGZpZWxkcyA9IG5hbWUuc3BsaXQoJy4nKQorICAgICAgICBpbl9jbGFzc2VzID0gRmFsc2UKKyAgICAgICAgcGFyZW50ID0gc2VsZgorICAgICAgICBuYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgIHNvX2ZhciA9IFtdCisgICAgICAgIG1vZHVsZSwgY2xzID0gc2VsZi5jbGluaWMuX21vZHVsZV9hbmRfY2xhc3MoZmllbGRzKQorCisgICAgICAgIHBhcmVudCA9IGNscyBvciBtb2R1bGUKKyAgICAgICAgaWYgbmFtZSBpbiBwYXJlbnQuY2xhc3NlczoKKyAgICAgICAgICAgIGZhaWwoIkFscmVhZHkgZGVmaW5lZCBjbGFzcyAiICsgcmVwcihuYW1lKSArICIhIikKKworICAgICAgICBjID0gQ2xhc3MobmFtZSwgbW9kdWxlLCBjbHMsIHR5cGVkZWYsIHR5cGVfb2JqZWN0KQorICAgICAgICBwYXJlbnQuY2xhc3Nlc1tuYW1lXSA9IGMKKyAgICAgICAgc2VsZi5ibG9jay5zaWduYXR1cmVzLmFwcGVuZChjKQorCisgICAgZGVmIGRpcmVjdGl2ZV9zZXQoc2VsZiwgbmFtZSwgdmFsdWUpOgorICAgICAgICBpZiBuYW1lIG5vdCBpbiAoImxpbmVfcHJlZml4IiwgImxpbmVfc3VmZml4Iik6CisgICAgICAgICAgICBmYWlsKCJ1bmtub3duIHZhcmlhYmxlIiwgcmVwcihuYW1lKSkKKworICAgICAgICB2YWx1ZSA9IHZhbHVlLmZvcm1hdF9tYXAoeworICAgICAgICAgICAgJ2Jsb2NrIGNvbW1lbnQgc3RhcnQnOiAnLyonLAorICAgICAgICAgICAgJ2Jsb2NrIGNvbW1lbnQgZW5kJzogJyovJywKKyAgICAgICAgICAgIH0pCisKKyAgICAgICAgc2VsZi5jbGluaWMuX19kaWN0X19bbmFtZV0gPSB2YWx1ZQorCisgICAgZGVmIGRpcmVjdGl2ZV9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCBjb21tYW5kLCAqYXJncyk6CisgICAgICAgIGlmIGNvbW1hbmQgPT0gJ25ldyc6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5hZGRfZGVzdGluYXRpb24obmFtZSwgKmFyZ3MpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBjb21tYW5kID09ICdjbGVhcic6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5nZXRfZGVzdGluYXRpb24obmFtZSkuY2xlYXIoKQorICAgICAgICBmYWlsKCJ1bmtub3duIGRlc3RpbmF0aW9uIGNvbW1hbmQiLCByZXByKGNvbW1hbmQpKQorCisKKyAgICBkZWYgZGlyZWN0aXZlX291dHB1dChzZWxmLCBmaWVsZCwgZGVzdGluYXRpb249JycpOgorICAgICAgICBmZCA9IHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9ucworCisgICAgICAgIGlmIGZpZWxkID09ICJwcmVzZXQiOgorICAgICAgICAgICAgcHJlc2V0ID0gc2VsZi5jbGluaWMucHJlc2V0cy5nZXQoZGVzdGluYXRpb24pCisgICAgICAgICAgICBpZiBub3QgcHJlc2V0OgorICAgICAgICAgICAgICAgIGZhaWwoIlVua25vd24gcHJlc2V0ICIgKyByZXByKGRlc3RpbmF0aW9uKSArICIhIikKKyAgICAgICAgICAgIGZkLnVwZGF0ZShwcmVzZXQpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBmaWVsZCA9PSAicHVzaCI6CisgICAgICAgICAgICBzZWxmLmNsaW5pYy5maWVsZF9kZXN0aW5hdGlvbnNfc3RhY2suYXBwZW5kKGZkLmNvcHkoKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZpZWxkID09ICJwb3AiOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9uc19zdGFjazoKKyAgICAgICAgICAgICAgICBmYWlsKCJDYW4ndCAnb3V0cHV0IHBvcCcsIHN0YWNrIGlzIGVtcHR5ISIpCisgICAgICAgICAgICBwcmV2aW91c19mZCA9IHNlbGYuY2xpbmljLmZpZWxkX2Rlc3RpbmF0aW9uc19zdGFjay5wb3AoKQorICAgICAgICAgICAgZmQudXBkYXRlKHByZXZpb3VzX2ZkKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBzZWNyZXQgY29tbWFuZCBmb3IgZGVidWdnaW5nIQorICAgICAgICBpZiBmaWVsZCA9PSAicHJpbnQiOgorICAgICAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKHBwcmludC5wZm9ybWF0KGZkKSkKKyAgICAgICAgICAgIHNlbGYuYmxvY2sub3V0cHV0LmFwcGVuZCgnXG4nKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgZCA9IHNlbGYuY2xpbmljLmdldF9kZXN0aW5hdGlvbihkZXN0aW5hdGlvbikKKworICAgICAgICBpZiBmaWVsZCA9PSAiZXZlcnl0aGluZyI6CisgICAgICAgICAgICBmb3IgbmFtZSBpbiBsaXN0KGZkKToKKyAgICAgICAgICAgICAgICBmZFtuYW1lXSA9IGQKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIGZpZWxkIG5vdCBpbiBmZDoKKyAgICAgICAgICAgIGZhaWwoIkludmFsaWQgZmllbGQgIiArIHJlcHIoZmllbGQpICsgIiwgbXVzdCBiZSBvbmUgb2Y6XG4gIHByZXNldCBwdXNoIHBvcCBwcmludCBldmVyeXRoaW5nICIgKyAiICIuam9pbihmZCkpCisgICAgICAgIGZkW2ZpZWxkXSA9IGQKKworICAgIGRlZiBkaXJlY3RpdmVfZHVtcChzZWxmLCBuYW1lKToKKyAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKHNlbGYuY2xpbmljLmdldF9kZXN0aW5hdGlvbihuYW1lKS5kdW1wKCkpCisKKyAgICBkZWYgZGlyZWN0aXZlX3ByaW50KHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5ibG9jay5vdXRwdXQuYXBwZW5kKCcgJy5qb2luKGFyZ3MpKQorICAgICAgICBzZWxmLmJsb2NrLm91dHB1dC5hcHBlbmQoJ1xuJykKKworICAgIGRlZiBkaXJlY3RpdmVfcHJlc2VydmUoc2VsZik6CisgICAgICAgIGlmIHNlbGYucHJlc2VydmVfb3V0cHV0OgorICAgICAgICAgICAgZmFpbCgiQ2FuJ3QgaGF2ZSBwcmVzZXJ2ZSB0d2ljZSBpbiBvbmUgYmxvY2shIikKKyAgICAgICAgc2VsZi5wcmVzZXJ2ZV9vdXRwdXQgPSBUcnVlCisKKyAgICBkZWYgYXRfY2xhc3NtZXRob2Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYua2luZCBpcyBub3QgQ0FMTEFCTEU6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBzZXQgQGNsYXNzbWV0aG9kLCBmdW5jdGlvbiBpcyBub3QgYSBub3JtYWwgY2FsbGFibGUiKQorICAgICAgICBzZWxmLmtpbmQgPSBDTEFTU19NRVRIT0QKKworICAgIGRlZiBhdF9zdGF0aWNtZXRob2Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYua2luZCBpcyBub3QgQ0FMTEFCTEU6CisgICAgICAgICAgICBmYWlsKCJDYW4ndCBzZXQgQHN0YXRpY21ldGhvZCwgZnVuY3Rpb24gaXMgbm90IGEgbm9ybWFsIGNhbGxhYmxlIikKKyAgICAgICAgc2VsZi5raW5kID0gU1RBVElDX01FVEhPRAorCisgICAgZGVmIGF0X2NvZXhpc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuY29leGlzdDoKKyAgICAgICAgICAgIGZhaWwoIkNhbGxlZCBAY29leGlzdCB0d2ljZSEiKQorICAgICAgICBzZWxmLmNvZXhpc3QgPSBUcnVlCisKKyAgICBkZWYgcGFyc2Uoc2VsZiwgYmxvY2spOgorICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgc2VsZi5ibG9jayA9IGJsb2NrCisgICAgICAgIHNlbGYuc2F2ZWRfb3V0cHV0ID0gc2VsZi5ibG9jay5vdXRwdXQKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gW10KKyAgICAgICAgYmxvY2tfc3RhcnQgPSBzZWxmLmNsaW5pYy5ibG9ja19wYXJzZXIubGluZV9udW1iZXIKKyAgICAgICAgbGluZXMgPSBibG9jay5pbnB1dC5zcGxpdCgnXG4nKQorICAgICAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGxpbmVzLCBzZWxmLmNsaW5pYy5ibG9ja19wYXJzZXIuYmxvY2tfc3RhcnRfbGluZV9udW1iZXIpOgorICAgICAgICAgICAgaWYgJ1x0JyBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGZhaWwoJ1RhYiBjaGFyYWN0ZXJzIGFyZSBpbGxlZ2FsIGluIHRoZSBDbGluaWMgRFNMLlxuXHQnICsgcmVwcihsaW5lKSwgbGluZV9udW1iZXI9YmxvY2tfc3RhcnQpCisgICAgICAgICAgICBzZWxmLnN0YXRlKGxpbmUpCisKKyAgICAgICAgc2VsZi5uZXh0KHNlbGYuc3RhdGVfdGVybWluYWwpCisgICAgICAgIHNlbGYuc3RhdGUoTm9uZSkKKworICAgICAgICBibG9jay5vdXRwdXQuZXh0ZW5kKHNlbGYuY2xpbmljLmxhbmd1YWdlLnJlbmRlcihjbGluaWMsIGJsb2NrLnNpZ25hdHVyZXMpKQorCisgICAgICAgIGlmIHNlbGYucHJlc2VydmVfb3V0cHV0OgorICAgICAgICAgICAgaWYgYmxvY2sub3V0cHV0OgorICAgICAgICAgICAgICAgIGZhaWwoIidwcmVzZXJ2ZScgb25seSB3b3JrcyBmb3IgYmxvY2tzIHRoYXQgZG9uJ3QgcHJvZHVjZSBhbnkgb3V0cHV0ISIpCisgICAgICAgICAgICBibG9jay5vdXRwdXQgPSBzZWxmLnNhdmVkX291dHB1dAorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgIyBpZ25vcmUgY29tbWVudC1vbmx5IGxpbmVzCisgICAgICAgIGlmIGxpbmUubHN0cmlwKCkuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAjIElnbm9yZSBlbXB0eSBsaW5lcyB0b28KKyAgICAgICAgIyAoYnV0IG5vdCBpbiBkb2NzdHJpbmcgc2VjdGlvbnMhKQorICAgICAgICBpZiBub3QgbGluZS5zdHJpcCgpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2FsY3VsYXRlX2luZGVudChsaW5lKToKKyAgICAgICAgcmV0dXJuIGxlbihsaW5lKSAtIGxlbihsaW5lLnN0cmlwKCkpCisKKyAgICBkZWYgbmV4dChzZWxmLCBzdGF0ZSwgbGluZT1Ob25lKToKKyAgICAgICAgIyByZWFsX3ByaW50KHNlbGYuc3RhdGUuX19uYW1lX18sICItPiIsIHN0YXRlLl9fbmFtZV9fLCAiLCBsaW5lPSIsIGxpbmUpCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZQorICAgICAgICBpZiBsaW5lIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2VsZi5zdGF0ZShsaW5lKQorCisgICAgZGVmIHN0YXRlX2RzbF9zdGFydChzZWxmLCBsaW5lKToKKyAgICAgICAgIyBzZWxmLmJsb2NrID0gc2VsZi5DbGluaWNPdXRwdXRCbG9jayhzZWxmKQorICAgICAgICBpZiBzZWxmLmlnbm9yZV9saW5lKGxpbmUpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBpcyBpdCBhIGRpcmVjdGl2ZT8KKyAgICAgICAgZmllbGRzID0gc2hsZXguc3BsaXQobGluZSkKKyAgICAgICAgZGlyZWN0aXZlX25hbWUgPSBmaWVsZHNbMF0KKyAgICAgICAgZGlyZWN0aXZlID0gc2VsZi5kaXJlY3RpdmVzLmdldChkaXJlY3RpdmVfbmFtZSwgTm9uZSkKKyAgICAgICAgaWYgZGlyZWN0aXZlOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSgqZmllbGRzWzE6XSkKKyAgICAgICAgICAgIGV4Y2VwdCBUeXBlRXJyb3IgYXMgZToKKyAgICAgICAgICAgICAgICBmYWlsKHN0cihlKSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX21vZHVsZW5hbWVfbmFtZSwgbGluZSkKKworICAgIGRlZiBzdGF0ZV9tb2R1bGVuYW1lX25hbWUoc2VsZiwgbGluZSk6CisgICAgICAgICMgbG9va2luZyBmb3IgZGVjbGFyYXRpb24sIHdoaWNoIGVzdGFibGlzaGVzIHRoZSBsZWZ0bW9zdCBjb2x1bW4KKyAgICAgICAgIyBsaW5lIHNob3VsZCBiZQorICAgICAgICAjICAgICBtb2R1bGVuYW1lLmZubmFtZSBbYXMgY19iYXNlbmFtZV0gWy0+IHJldHVybiBhbm5vdGF0aW9uXQorICAgICAgICAjIHNxdWFyZSBicmFja2V0cyBkZW5vdGUgb3B0aW9uYWwgc3ludGF4LgorICAgICAgICAjCisgICAgICAgICMgYWx0ZXJuYXRpdmVseToKKyAgICAgICAgIyAgICAgbW9kdWxlbmFtZS5mbm5hbWUgW2FzIGNfYmFzZW5hbWVdID0gbW9kdWxlbmFtZS5leGlzdGluZ19mbl9uYW1lCisgICAgICAgICMgY2xvbmVzIHRoZSBwYXJhbWV0ZXJzIGFuZCByZXR1cm4gY29udmVydGVyIGZyb20gdGhhdAorICAgICAgICAjIGZ1bmN0aW9uLiAgeW91IGNhbid0IG1vZGlmeSB0aGVtLiAgeW91IG11c3QgZW50ZXIgYQorICAgICAgICAjIG5ldyBkb2NzdHJpbmcuCisgICAgICAgICMKKyAgICAgICAgIyAoYnV0IHdlIG1pZ2h0IGZpbmQgYSBkaXJlY3RpdmUgZmlyc3QhKQorICAgICAgICAjCisgICAgICAgICMgdGhpcyBsaW5lIGlzIHBlcm1pdHRlZCB0byBzdGFydCB3aXRoIHdoaXRlc3BhY2UuCisgICAgICAgICMgd2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgRiAoZm9yICJmdW5jdGlvbiIpLgorCisgICAgICAgIGlmIG5vdCBsaW5lLnN0cmlwKCk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzZWxmLmluZGVudC5pbmZlcihsaW5lKQorCisgICAgICAgICMgYXJlIHdlIGNsb25pbmc/CisgICAgICAgIGJlZm9yZSwgZXF1YWxzLCBleGlzdGluZyA9IGxpbmUucnBhcnRpdGlvbignPScpCisgICAgICAgIGlmIGVxdWFsczoKKyAgICAgICAgICAgIGZ1bGxfbmFtZSwgXywgY19iYXNlbmFtZSA9IGJlZm9yZS5wYXJ0aXRpb24oJyBhcyAnKQorICAgICAgICAgICAgZnVsbF9uYW1lID0gZnVsbF9uYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lLnN0cmlwKCkKKyAgICAgICAgICAgIGV4aXN0aW5nID0gZXhpc3Rpbmcuc3RyaXAoKQorICAgICAgICAgICAgaWYgKGlzX2xlZ2FsX3B5X2lkZW50aWZpZXIoZnVsbF9uYW1lKSBhbmQKKyAgICAgICAgICAgICAgICAobm90IGNfYmFzZW5hbWUgb3IgaXNfbGVnYWxfY19pZGVudGlmaWVyKGNfYmFzZW5hbWUpKSBhbmQKKyAgICAgICAgICAgICAgICBpc19sZWdhbF9weV9pZGVudGlmaWVyKGV4aXN0aW5nKSk6CisgICAgICAgICAgICAgICAgIyB3ZSdyZSBjbG9uaW5nIQorICAgICAgICAgICAgICAgIGZpZWxkcyA9IFt4LnN0cmlwKCkgZm9yIHggaW4gZXhpc3Rpbmcuc3BsaXQoJy4nKV0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbl9uYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisKKyAgICAgICAgICAgICAgICBmb3IgZXhpc3RpbmdfZnVuY3Rpb24gaW4gKGNscyBvciBtb2R1bGUpLmZ1bmN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgaWYgZXhpc3RpbmdfZnVuY3Rpb24ubmFtZSA9PSBmdW5jdGlvbl9uYW1lOgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBleGlzdGluZ19mdW5jdGlvbiA9IE5vbmUKKyAgICAgICAgICAgICAgICBpZiBub3QgZXhpc3RpbmdfZnVuY3Rpb246CisgICAgICAgICAgICAgICAgICAgIHByaW50KCJjbGFzcyIsIGNscywgIm1vZHVsZSIsIG1vZHVsZSwgImV4aXN0aW5nIiwgZXhpc3RpbmcpCisgICAgICAgICAgICAgICAgICAgIHByaW50KCJjbHMuIGZ1bmN0aW9ucyIsIGNscy5mdW5jdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkNvdWxkbid0IGZpbmQgZXhpc3RpbmcgZnVuY3Rpb24gIiArIHJlcHIoZXhpc3RpbmcpICsgIiEiKQorCisgICAgICAgICAgICAgICAgZmllbGRzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBmdWxsX25hbWUuc3BsaXQoJy4nKV0KKyAgICAgICAgICAgICAgICBmdW5jdGlvbl9uYW1lID0gZmllbGRzLnBvcCgpCisgICAgICAgICAgICAgICAgbW9kdWxlLCBjbHMgPSBzZWxmLmNsaW5pYy5fbW9kdWxlX2FuZF9jbGFzcyhmaWVsZHMpCisKKyAgICAgICAgICAgICAgICBpZiBub3QgKGV4aXN0aW5nX2Z1bmN0aW9uLmtpbmQgPT0gc2VsZi5raW5kIGFuZCBleGlzdGluZ19mdW5jdGlvbi5jb2V4aXN0ID09IHNlbGYuY29leGlzdCk6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIidraW5kJyBvZiBmdW5jdGlvbiBhbmQgY2xvbmVkIGZ1bmN0aW9uIGRvbid0IG1hdGNoISAgKEBjbGFzc21ldGhvZC9Ac3RhdGljbWV0aG9kL0Bjb2V4aXN0KSIpCisgICAgICAgICAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGV4aXN0aW5nX2Z1bmN0aW9uLmNvcHkobmFtZT1mdW5jdGlvbl9uYW1lLCBmdWxsX25hbWU9ZnVsbF9uYW1lLCBtb2R1bGU9bW9kdWxlLCBjbHM9Y2xzLCBjX2Jhc2VuYW1lPWNfYmFzZW5hbWUsIGRvY3N0cmluZz0nJykKKworICAgICAgICAgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoc2VsZi5mdW5jdGlvbikKKyAgICAgICAgICAgICAgICAoY2xzIG9yIG1vZHVsZSkuZnVuY3Rpb25zLmFwcGVuZChzZWxmLmZ1bmN0aW9uKQorICAgICAgICAgICAgICAgIHNlbGYubmV4dChzZWxmLnN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZykKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsaW5lLCBfLCByZXR1cm5zID0gbGluZS5wYXJ0aXRpb24oJy0+JykKKworICAgICAgICBmdWxsX25hbWUsIF8sIGNfYmFzZW5hbWUgPSBsaW5lLnBhcnRpdGlvbignIGFzICcpCisgICAgICAgIGZ1bGxfbmFtZSA9IGZ1bGxfbmFtZS5zdHJpcCgpCisgICAgICAgIGNfYmFzZW5hbWUgPSBjX2Jhc2VuYW1lLnN0cmlwKCkgb3IgTm9uZQorCisgICAgICAgIGlmIG5vdCBpc19sZWdhbF9weV9pZGVudGlmaWVyKGZ1bGxfbmFtZSk6CisgICAgICAgICAgICBmYWlsKCJJbGxlZ2FsIGZ1bmN0aW9uIG5hbWU6IHt9Ii5mb3JtYXQoZnVsbF9uYW1lKSkKKyAgICAgICAgaWYgY19iYXNlbmFtZSBhbmQgbm90IGlzX2xlZ2FsX2NfaWRlbnRpZmllcihjX2Jhc2VuYW1lKToKKyAgICAgICAgICAgIGZhaWwoIklsbGVnYWwgQyBiYXNlbmFtZToge30iLmZvcm1hdChjX2Jhc2VuYW1lKSkKKworICAgICAgICByZXR1cm5fY29udmVydGVyID0gTm9uZQorICAgICAgICBpZiByZXR1cm5zOgorICAgICAgICAgICAgYXN0X2lucHV0ID0gImRlZiB4KCkgLT4ge306IHBhc3MiLmZvcm1hdChyZXR1cm5zKQorICAgICAgICAgICAgbW9kdWxlID0gTm9uZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAgICAgcGFzcworICAgICAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgICAgICBmYWlsKCJCYWRseS1mb3JtZWQgYW5ub3RhdGlvbiBmb3IgIiArIGZ1bGxfbmFtZSArICI6ICIgKyByZXR1cm5zKQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG5hbWUsIGxlZ2FjeSwga3dhcmdzID0gc2VsZi5wYXJzZV9jb252ZXJ0ZXIobW9kdWxlLmJvZHlbMF0ucmV0dXJucykKKyAgICAgICAgICAgICAgICBpZiBsZWdhY3k6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkxlZ2FjeSBjb252ZXJ0ZXIgeyFyfSBub3QgYWxsb3dlZCBhcyBhIHJldHVybiBjb252ZXJ0ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAgLmZvcm1hdChuYW1lKSkKKyAgICAgICAgICAgICAgICBpZiBuYW1lIG5vdCBpbiByZXR1cm5fY29udmVydGVyczoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiTm8gYXZhaWxhYmxlIHJldHVybiBjb252ZXJ0ZXIgY2FsbGVkICIgKyByZXByKG5hbWUpKQorICAgICAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSByZXR1cm5fY29udmVydGVyc1tuYW1lXSgqKmt3YXJncykKKyAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOgorICAgICAgICAgICAgICAgIGZhaWwoIkJhZGx5LWZvcm1lZCBhbm5vdGF0aW9uIGZvciAiICsgZnVsbF9uYW1lICsgIjogIiArIHJldHVybnMpCisKKyAgICAgICAgZmllbGRzID0gW3guc3RyaXAoKSBmb3IgeCBpbiBmdWxsX25hbWUuc3BsaXQoJy4nKV0KKyAgICAgICAgZnVuY3Rpb25fbmFtZSA9IGZpZWxkcy5wb3AoKQorICAgICAgICBtb2R1bGUsIGNscyA9IHNlbGYuY2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzKGZpZWxkcykKKworICAgICAgICBmaWVsZHMgPSBmdWxsX25hbWUuc3BsaXQoJy4nKQorICAgICAgICBpZiBmaWVsZHNbLTFdID09ICdfX25ld19fJzoKKyAgICAgICAgICAgIGlmIChzZWxmLmtpbmQgIT0gQ0xBU1NfTUVUSE9EKSBvciAobm90IGNscyk6CisgICAgICAgICAgICAgICAgZmFpbCgiX19uZXdfXyBtdXN0IGJlIGEgY2xhc3MgbWV0aG9kISIpCisgICAgICAgICAgICBzZWxmLmtpbmQgPSBNRVRIT0RfTkVXCisgICAgICAgIGVsaWYgZmllbGRzWy0xXSA9PSAnX19pbml0X18nOgorICAgICAgICAgICAgaWYgKHNlbGYua2luZCAhPSBDQUxMQUJMRSkgb3IgKG5vdCBjbHMpOgorICAgICAgICAgICAgICAgIGZhaWwoIl9faW5pdF9fIG11c3QgYmUgYSBub3JtYWwgbWV0aG9kLCBub3QgYSBjbGFzcyBvciBzdGF0aWMgbWV0aG9kISIpCisgICAgICAgICAgICBzZWxmLmtpbmQgPSBNRVRIT0RfSU5JVAorICAgICAgICAgICAgaWYgbm90IHJldHVybl9jb252ZXJ0ZXI6CisgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlciA9IGluaXRfcmV0dXJuX2NvbnZlcnRlcigpCisgICAgICAgIGVsaWYgZmllbGRzWy0xXSBpbiB1bnN1cHBvcnRlZF9zcGVjaWFsX21ldGhvZHM6CisgICAgICAgICAgICBmYWlsKGZpZWxkc1stMV0gKyAiIGlzIGEgc3BlY2lhbCBtZXRob2QgYW5kIGNhbm5vdCBiZSBjb252ZXJ0ZWQgdG8gQXJndW1lbnQgQ2xpbmljISAgKFlldC4pIikKKworICAgICAgICBpZiBub3QgcmV0dXJuX2NvbnZlcnRlcjoKKyAgICAgICAgICAgIHJldHVybl9jb252ZXJ0ZXIgPSBDUmV0dXJuQ29udmVydGVyKCkKKworICAgICAgICBpZiBub3QgbW9kdWxlOgorICAgICAgICAgICAgZmFpbCgiVW5kZWZpbmVkIG1vZHVsZSB1c2VkIGluIGRlY2xhcmF0aW9uIG9mICIgKyByZXByKGZ1bGxfbmFtZS5zdHJpcCgpKSArICIuIikKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IEZ1bmN0aW9uKG5hbWU9ZnVuY3Rpb25fbmFtZSwgZnVsbF9uYW1lPWZ1bGxfbmFtZSwgbW9kdWxlPW1vZHVsZSwgY2xzPWNscywgY19iYXNlbmFtZT1jX2Jhc2VuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuX2NvbnZlcnRlcj1yZXR1cm5fY29udmVydGVyLCBraW5kPXNlbGYua2luZCwgY29leGlzdD1zZWxmLmNvZXhpc3QpCisgICAgICAgIHNlbGYuYmxvY2suc2lnbmF0dXJlcy5hcHBlbmQoc2VsZi5mdW5jdGlvbikKKworICAgICAgICAjIGluc2VydCBhIHNlbGYgY29udmVydGVyIGF1dG9tYXRpY2FsbHkKKyAgICAgICAgdHlwZSwgbmFtZSA9IGNvcnJlY3RfbmFtZV9mb3Jfc2VsZihzZWxmLmZ1bmN0aW9uKQorICAgICAgICBrd2FyZ3MgPSB7fQorICAgICAgICBpZiBjbHMgYW5kIHR5cGUgPT0gIlB5T2JqZWN0ICoiOgorICAgICAgICAgICAga3dhcmdzWyd0eXBlJ10gPSBjbHMudHlwZWRlZgorICAgICAgICBzYyA9IHNlbGYuZnVuY3Rpb24uc2VsZl9jb252ZXJ0ZXIgPSBzZWxmX2NvbnZlcnRlcihuYW1lLCBuYW1lLCBzZWxmLmZ1bmN0aW9uLCAqKmt3YXJncykKKyAgICAgICAgcF9zZWxmID0gUGFyYW1ldGVyKHNjLm5hbWUsIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWSwgZnVuY3Rpb249c2VsZi5mdW5jdGlvbiwgY29udmVydGVyPXNjKQorICAgICAgICBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnNbc2MubmFtZV0gPSBwX3NlbGYKKworICAgICAgICAoY2xzIG9yIG1vZHVsZSkuZnVuY3Rpb25zLmFwcGVuZChzZWxmLmZ1bmN0aW9uKQorICAgICAgICBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJzX3N0YXJ0KQorCisgICAgIyBOb3cgZW50ZXJpbmcgdGhlIHBhcmFtZXRlcnMgc2VjdGlvbi4gIFRoZSBydWxlcywgZm9ybWFsbHkgc3RhdGVkOgorICAgICMKKyAgICAjICAgKiBBbGwgbGluZXMgbXVzdCBiZSBpbmRlbnRlZCB3aXRoIHNwYWNlcyBvbmx5LgorICAgICMgICAqIFRoZSBmaXJzdCBsaW5lIG11c3QgYmUgYSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24uCisgICAgIyAgICogVGhlIGZpcnN0IGxpbmUgbXVzdCBiZSBpbmRlbnRlZC4KKyAgICAjICAgICAgICogVGhpcyBmaXJzdCBsaW5lIGVzdGFibGlzaGVzIHRoZSBpbmRlbnQgZm9yIHBhcmFtZXRlcnMuCisgICAgIyAgICAgICAqIFdlJ2xsIGNhbGwgdGhpcyBudW1iZXIgb2Ygc3BhY2VzIFAgKGZvciAicGFyYW1ldGVyIikuCisgICAgIyAgICogVGhlbmNlZm9ydGg6CisgICAgIyAgICAgICAqIExpbmVzIGluZGVudGVkIHdpdGggUCBzcGFjZXMgc3BlY2lmeSBhIHBhcmFtZXRlci4KKyAgICAjICAgICAgICogTGluZXMgaW5kZW50ZWQgd2l0aCA+IFAgc3BhY2VzIGFyZSBkb2NzdHJpbmdzIGZvciB0aGUgcHJldmlvdXMKKyAgICAjICAgICAgICAgcGFyYW1ldGVyLgorICAgICMgICAgICAgICAgICogV2UnbGwgY2FsbCB0aGlzIG51bWJlciBvZiBzcGFjZXMgRCAoZm9yICJkb2NzdHJpbmciKS4KKyAgICAjICAgICAgICAgICAqIEFsbCBzdWJzZXF1ZW50IGxpbmVzIGluZGVudGVkIHdpdGggPj0gRCBzcGFjZXMgYXJlIHN0b3JlZCBhcworICAgICMgICAgICAgICAgICAgcGFydCBvZiB0aGUgcGVyLXBhcmFtZXRlciBkb2NzdHJpbmcuCisgICAgIyAgICAgICAgICAgKiBBbGwgbGluZXMgd2lsbCBoYXZlIHRoZSBmaXJzdCBEIHNwYWNlcyBvZiB0aGUgaW5kZW50IHN0cmlwcGVkCisgICAgIyAgICAgICAgICAgICBiZWZvcmUgdGhleSBhcmUgc3RvcmVkLgorICAgICMgICAgICAgICAgICogSXQncyBpbGxlZ2FsIHRvIGhhdmUgYSBsaW5lIHN0YXJ0aW5nIHdpdGggYSBudW1iZXIgb2Ygc3BhY2VzIFgKKyAgICAjICAgICAgICAgICAgIHN1Y2ggdGhhdCBQIDwgWCA8IEQuCisgICAgIyAgICAgICAqIEEgbGluZSB3aXRoIDwgUCBzcGFjZXMgaXMgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGZ1bmN0aW9uCisgICAgIyAgICAgICAgIGRvY3N0cmluZywgd2hpY2ggZW5kcyBwcm9jZXNzaW5nIGZvciBwYXJhbWV0ZXJzIGFuZCBwZXItcGFyYW1ldGVyCisgICAgIyAgICAgICAgIGRvY3N0cmluZ3MuCisgICAgIyAgICAgICAgICAgKiBUaGUgZmlyc3QgbGluZSBvZiB0aGUgZnVuY3Rpb24gZG9jc3RyaW5nIG11c3QgYmUgYXQgdGhlIHNhbWUKKyAgICAjICAgICAgICAgICAgIGluZGVudCBhcyB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uCisgICAgIyAgICAgICAqIEl0J3MgaWxsZWdhbCB0byBoYXZlIGFueSBsaW5lIGluIHRoZSBwYXJhbWV0ZXJzIHNlY3Rpb24gc3RhcnRpbmcKKyAgICAjICAgICAgICAgd2l0aCBYIHNwYWNlcyBzdWNoIHRoYXQgRiA8IFggPCBQLiAgKEFzIGJlZm9yZSwgRiBpcyB0aGUgaW5kZW50CisgICAgIyAgICAgICAgIG9mIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbi4pCisgICAgIworICAgICMgQWxzbywgY3VycmVudGx5IEFyZ3VtZW50IENsaW5pYyBwbGFjZXMgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgb24gZ3JvdXBzOgorICAgICMgICAqIEVhY2ggZ3JvdXAgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuCisgICAgIyAgICogRWFjaCBncm91cCBtYXkgY29udGFpbiBhdCBtb3N0IG9uZSBncm91cCwgd2hpY2ggbXVzdCBiZSB0aGUgZnVydGhlc3QKKyAgICAjICAgICB0aGluZyBpbiB0aGUgZ3JvdXAgZnJvbSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycy4gIChUaGUgbmVzdGVkIGdyb3VwCisgICAgIyAgICAgbXVzdCBiZSB0aGUgZmlyc3QgaW4gdGhlIGdyb3VwIHdoZW4gaXQncyBiZWZvcmUgdGhlIHJlcXVpcmVkCisgICAgIyAgICAgcGFyYW1ldGVycywgYW5kIHRoZSBsYXN0IHRoaW5nIGluIHRoZSBncm91cCB3aGVuIGFmdGVyIHRoZSByZXF1aXJlZAorICAgICMgICAgIHBhcmFtZXRlcnMuKQorICAgICMgICAqIFRoZXJlIG1heSBiZSBhdCBtb3N0IG9uZSAodG9wLWxldmVsKSBncm91cCB0byB0aGUgbGVmdCBvciByaWdodCBvZgorICAgICMgICAgIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgICAqIFlvdSBtdXN0IHNwZWNpZnkgYSBzbGFzaCwgYW5kIGl0IG11c3QgYmUgYWZ0ZXIgYWxsIHBhcmFtZXRlcnMuCisgICAgIyAgICAgKEluIG90aGVyIHdvcmRzOiBlaXRoZXIgYWxsIHBhcmFtZXRlcnMgYXJlIHBvc2l0aW9uYWwtb25seSwKKyAgICAjICAgICAgb3Igbm9uZSBhcmUuKQorICAgICMKKyAgICAjICBTYWlkIGFub3RoZXIgd2F5OgorICAgICMgICAqIEVhY2ggZ3JvdXAgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIuCisgICAgIyAgICogQWxsIGxlZnQgc3F1YXJlIGJyYWNrZXRzIGJlZm9yZSB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBtdXN0IGJlCisgICAgIyAgICAgY29uc2VjdXRpdmUuICAoWW91IGNhbid0IGhhdmUgYSBsZWZ0IHNxdWFyZSBicmFja2V0IGZvbGxvd2VkCisgICAgIyAgICAgYnkgYSBwYXJhbWV0ZXIsIHRoZW4gYW5vdGhlciBsZWZ0IHNxdWFyZSBicmFja2V0LiAgWW91IGNhbid0CisgICAgIyAgICAgaGF2ZSBhIGxlZnQgc3F1YXJlIGJyYWNrZXQsIGEgcGFyYW1ldGVyLCBhIHJpZ2h0IHNxdWFyZSBicmFja2V0LAorICAgICMgICAgIGFuZCB0aGVuIGEgbGVmdCBzcXVhcmUgYnJhY2tldC4pCisgICAgIyAgICogQWxsIHJpZ2h0IHNxdWFyZSBicmFja2V0cyBhZnRlciB0aGUgcmVxdWlyZWQgcGFyYW1ldGVycyBtdXN0IGJlCisgICAgIyAgICAgY29uc2VjdXRpdmUuCisgICAgIworICAgICMgVGhlc2UgcnVsZXMgYXJlIGVuZm9yY2VkIHdpdGggYSBzaW5nbGUgc3RhdGUgdmFyaWFibGU6CisgICAgIyAicGFyYW1ldGVyX3N0YXRlIi4gIChQcmV2aW91c2x5IHRoZSBjb2RlIHdhcyBhIG1pYXNtYSBvZiBpZnMgYW5kCisgICAgIyBzZXBhcmF0ZSBib29sZWFuIHN0YXRlIHZhcmlhYmxlcy4pICBUaGUgc3RhdGVzIGFyZToKKyAgICAjCisgICAgIyAgWyBbIGEsIGIsIF0gYywgXSBkLCBlLCBmPTMsIFsgZywgaCwgWyBpIF0gXSAvICAgPC0gbGluZQorICAgICMgMDEgICAyICAgICAgICAgIDMgICAgICAgNCAgICA1ICAgICAgICAgICA2ICAgNyAgIDwtIHN0YXRlIHRyYW5zaXRpb25zCisgICAgIworICAgICMgMDogcHNfc3RhcnQuICBiZWZvcmUgd2UndmUgc2VlbiBhbnl0aGluZy4gIGxlZ2FsIHRyYW5zaXRpb25zIGFyZSB0byAxIG9yIDMuCisgICAgIyAxOiBwc19sZWZ0X3NxdWFyZV9iZWZvcmUuICBsZWZ0IHNxdWFyZSBicmFja2V0cyBiZWZvcmUgcmVxdWlyZWQgcGFyYW1ldGVycy4KKyAgICAjIDI6IHBzX2dyb3VwX2JlZm9yZS4gIGluIGEgZ3JvdXAsIGJlZm9yZSByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgMzogcHNfcmVxdWlyZWQuICByZXF1aXJlZCBwYXJhbWV0ZXJzLCBwb3NpdGlvbmFsLW9yLWtleXdvcmQgb3IgcG9zaXRpb25hbC1vbmx5CisgICAgIyAgICAgKHdlIGRvbid0IGtub3cgeWV0KS4gIChyZW51bWJlciBsZWZ0IGdyb3VwcyEpCisgICAgIyA0OiBwc19vcHRpb25hbC4gIHBvc2l0aW9uYWwtb3Ita2V5d29yZCBvciBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycyB0aGF0CisgICAgIyAgICBub3cgbXVzdCBoYXZlIGRlZmF1bHQgdmFsdWVzLgorICAgICMgNTogcHNfZ3JvdXBfYWZ0ZXIuICBpbiBhIGdyb3VwLCBhZnRlciByZXF1aXJlZCBwYXJhbWV0ZXJzLgorICAgICMgNjogcHNfcmlnaHRfc3F1YXJlX2FmdGVyLiAgcmlnaHQgc3F1YXJlIGJyYWNrZXRzIGFmdGVyIHJlcXVpcmVkIHBhcmFtZXRlcnMuCisgICAgIyA3OiBwc19zZWVuX3NsYXNoLiAgc2VlbiBzbGFzaC4KKyAgICBwc19zdGFydCwgcHNfbGVmdF9zcXVhcmVfYmVmb3JlLCBwc19ncm91cF9iZWZvcmUsIHBzX3JlcXVpcmVkLCBcCisgICAgcHNfb3B0aW9uYWwsIHBzX2dyb3VwX2FmdGVyLCBwc19yaWdodF9zcXVhcmVfYWZ0ZXIsIHBzX3NlZW5fc2xhc2ggPSByYW5nZSg4KQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcnNfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIGlmIHNlbGYuaWdub3JlX2xpbmUobGluZSk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICAjIGlmIHRoaXMgbGluZSBpcyBub3QgaW5kZW50ZWQsIHdlIGhhdmUgbm8gcGFyYW1ldGVycworICAgICAgICBpZiBub3Qgc2VsZi5pbmRlbnQuaW5mZXIobGluZSk6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiA9ICcnCisgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXIsIGxpbmUpCisKKworICAgIGRlZiB0b19yZXF1aXJlZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRyYW5zaXRpb24gdG8gdGhlICJyZXF1aXJlZCIgcGFyYW1ldGVyIHN0YXRlLgorICAgICAgICAiIiIKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgIT0gc2VsZi5wc19yZXF1aXJlZDoKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19yZXF1aXJlZAorICAgICAgICAgICAgZm9yIHAgaW4gc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpOgorICAgICAgICAgICAgICAgIHAuZ3JvdXAgPSAtcC5ncm91cAorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcihzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfY29udGludWF0aW9uOgorICAgICAgICAgICAgbGluZSA9IHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiArICcgJyArIGxpbmUubHN0cmlwKCkKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX2NvbnRpbnVhdGlvbiA9ICcnCisKKyAgICAgICAgaWYgc2VsZi5pZ25vcmVfbGluZShsaW5lKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAyCisgICAgICAgIGluZGVudCA9IHNlbGYuaW5kZW50LmluZmVyKGxpbmUpCisgICAgICAgIGlmIGluZGVudCA9PSAtMToKKyAgICAgICAgICAgICMgd2Ugb3V0ZGVudGVkLCBtdXN0IGJlIHRvIGRlZmluaXRpb24gY29sdW1uCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGlmIGluZGVudCA9PSAxOgorICAgICAgICAgICAgIyB3ZSBpbmRlbnRlZCwgbXVzdCBiZSB0byBuZXcgcGFyYW1ldGVyIGRvY3N0cmluZyBjb2x1bW4KKyAgICAgICAgICAgIHJldHVybiBzZWxmLm5leHQoc2VsZi5zdGF0ZV9wYXJhbWV0ZXJfZG9jc3RyaW5nX3N0YXJ0LCBsaW5lKQorCisgICAgICAgIGxpbmUgPSBsaW5lLnJzdHJpcCgpCisgICAgICAgIGlmIGxpbmUuZW5kc3dpdGgoJ1xcJyk6CisgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9jb250aW51YXRpb24gPSBsaW5lWzotMV0KKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGxpbmUgPSBsaW5lLmxzdHJpcCgpCisKKyAgICAgICAgaWYgbGluZSBpbiAoJyonLCAnLycsICdbJywgJ10nKToKKyAgICAgICAgICAgIHNlbGYucGFyc2Vfc3BlY2lhbF9zeW1ib2wobGluZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3N0YXJ0LCBzZWxmLnBzX3JlcXVpcmVkKToKKyAgICAgICAgICAgIHNlbGYudG9fcmVxdWlyZWQoKQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlOgorICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX2dyb3VwX2JlZm9yZQorICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfZ3JvdXBfYmVmb3JlOgorICAgICAgICAgICAgaWYgbm90IHNlbGYuZ3JvdXA6CisgICAgICAgICAgICAgICAgc2VsZi50b19yZXF1aXJlZCgpCisgICAgICAgIGVsaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfZ3JvdXBfYWZ0ZXIsIHNlbGYucHNfb3B0aW9uYWwpOgorICAgICAgICAgICAgcGFzcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIi5hKSIpCisKKyAgICAgICAgIyBoYW5kbGUgImFzIiBmb3IgIHBhcmFtZXRlcnMgdG9vCisgICAgICAgIGNfbmFtZSA9IE5vbmUKKyAgICAgICAgbmFtZSwgaGF2ZV9hc190b2tlbiwgdHJhaWxpbmcgPSBsaW5lLnBhcnRpdGlvbignIGFzICcpCisgICAgICAgIGlmIGhhdmVfYXNfdG9rZW46CisgICAgICAgICAgICBuYW1lID0gbmFtZS5zdHJpcCgpCisgICAgICAgICAgICBpZiAnICcgbm90IGluIG5hbWU6CisgICAgICAgICAgICAgICAgZmllbGRzID0gdHJhaWxpbmcuc3RyaXAoKS5zcGxpdCgnICcpCisgICAgICAgICAgICAgICAgaWYgbm90IGZpZWxkczoKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiSW52YWxpZCAnYXMnIGNsYXVzZSEiKQorICAgICAgICAgICAgICAgIGNfbmFtZSA9IGZpZWxkc1swXQorICAgICAgICAgICAgICAgIGlmIGNfbmFtZS5lbmRzd2l0aCgnOicpOgorICAgICAgICAgICAgICAgICAgICBuYW1lICs9ICc6JworICAgICAgICAgICAgICAgICAgICBjX25hbWUgPSBjX25hbWVbOi0xXQorICAgICAgICAgICAgICAgIGZpZWxkc1swXSA9IG5hbWUKKyAgICAgICAgICAgICAgICBsaW5lID0gJyAnLmpvaW4oZmllbGRzKQorCisgICAgICAgIGJhc2UsIGVxdWFscywgZGVmYXVsdCA9IGxpbmUucnBhcnRpdGlvbignPScpCisgICAgICAgIGlmIG5vdCBlcXVhbHM6CisgICAgICAgICAgICBiYXNlID0gZGVmYXVsdAorICAgICAgICAgICAgZGVmYXVsdCA9IE5vbmUKKworICAgICAgICBtb2R1bGUgPSBOb25lCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGFzdF9pbnB1dCA9ICJkZWYgeCh7fSk6IHBhc3MiLmZvcm1hdChiYXNlKQorICAgICAgICAgICAgbW9kdWxlID0gYXN0LnBhcnNlKGFzdF9pbnB1dCkKKyAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICMgdGhlIGxhc3QgPSB3YXMgcHJvYmFibHkgaW5zaWRlIGEgZnVuY3Rpb24gY2FsbCwgbGlrZQorICAgICAgICAgICAgICAgICMgICBpOiBpbnQobnVsbGFibGU9VHJ1ZSkKKyAgICAgICAgICAgICAgICAjIHNvIGFzc3VtZSB0aGVyZSB3YXMgbm8gYWN0dWFsIGRlZmF1bHQgdmFsdWUuCisgICAgICAgICAgICAgICAgZGVmYXVsdCA9IE5vbmUKKyAgICAgICAgICAgICAgICBhc3RfaW5wdXQgPSAiZGVmIHgoe30pOiBwYXNzIi5mb3JtYXQobGluZSkKKyAgICAgICAgICAgICAgICBtb2R1bGUgPSBhc3QucGFyc2UoYXN0X2lucHV0KQorICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yOgorICAgICAgICAgICAgICAgIHBhc3MKKyAgICAgICAgaWYgbm90IG1vZHVsZToKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiBpbnZhbGlkIHBhcmFtZXRlciBkZWNsYXJhdGlvbjpcblx0IiArIGxpbmUpCisKKyAgICAgICAgZnVuY3Rpb25fYXJncyA9IG1vZHVsZS5ib2R5WzBdLmFyZ3MKKyAgICAgICAgcGFyYW1ldGVyID0gZnVuY3Rpb25fYXJncy5hcmdzWzBdCisKKyAgICAgICAgcGFyYW1ldGVyX25hbWUgPSBwYXJhbWV0ZXIuYXJnCisgICAgICAgIG5hbWUsIGxlZ2FjeSwga3dhcmdzID0gc2VsZi5wYXJzZV9jb252ZXJ0ZXIocGFyYW1ldGVyLmFubm90YXRpb24pCisKKyAgICAgICAgaWYgbm90IGRlZmF1bHQ6CisgICAgICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9PSBzZWxmLnBzX29wdGlvbmFsOgorICAgICAgICAgICAgICAgIGZhaWwoIkNhbid0IGhhdmUgYSBwYXJhbWV0ZXIgd2l0aG91dCBhIGRlZmF1bHQgKCIgKyByZXByKHBhcmFtZXRlcl9uYW1lKSArICIpXG5hZnRlciBhIHBhcmFtZXRlciB3aXRoIGEgZGVmYXVsdCEiKQorICAgICAgICAgICAgdmFsdWUgPSB1bnNwZWNpZmllZAorICAgICAgICAgICAgaWYgJ3B5X2RlZmF1bHQnIGluIGt3YXJnczoKKyAgICAgICAgICAgICAgICBmYWlsKCJZb3UgY2FuJ3Qgc3BlY2lmeSBweV9kZWZhdWx0IHdpdGhvdXQgc3BlY2lmeWluZyBhIGRlZmF1bHQgdmFsdWUhIikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlID09IHNlbGYucHNfcmVxdWlyZWQ6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX29wdGlvbmFsCisgICAgICAgICAgICBkZWZhdWx0ID0gZGVmYXVsdC5zdHJpcCgpCisgICAgICAgICAgICBiYWQgPSBGYWxzZQorICAgICAgICAgICAgYXN0X2lucHV0ID0gInggPSB7fSIuZm9ybWF0KGRlZmF1bHQpCisgICAgICAgICAgICBiYWQgPSBGYWxzZQorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIG1vZHVsZSA9IGFzdC5wYXJzZShhc3RfaW5wdXQpCisKKyAgICAgICAgICAgICAgICBpZiAnY19kZWZhdWx0JyBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgICAgICAgICAjIHdlIGNhbiBvbmx5IHJlcHJlc2VudCB2ZXJ5IHNpbXBsZSBkYXRhIHZhbHVlcyBpbiBDLgorICAgICAgICAgICAgICAgICAgICAjIGRldGVjdCB3aGV0aGVyIGRlZmF1bHQgaXMgb2theSwgdmlhIGEgYmxhY2tsaXN0CisgICAgICAgICAgICAgICAgICAgICMgb2YgZGlzYWxsb3dlZCBhc3Qgbm9kZXMuCisgICAgICAgICAgICAgICAgICAgIGNsYXNzIERldGVjdEJhZE5vZGVzKGFzdC5Ob2RlVmlzaXRvcik6CisgICAgICAgICAgICAgICAgICAgICAgICBiYWQgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZGVmIGJhZF9ub2RlKHNlbGYsIG5vZGUpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYmFkID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGlubGluZSBmdW5jdGlvbiBjYWxsCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9DYWxsID0gYmFkX25vZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaW5saW5lIGlmIHN0YXRlbWVudCAoInggPSAzIGlmIHkgZWxzZSB6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHZpc2l0X0lmRXhwID0gYmFkX25vZGUKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21wcmVoZW5zaW9ucyBhbmQgZ2VuZXJhdG9yIGV4cHJlc3Npb25zCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9MaXN0Q29tcCA9IHZpc2l0X1NldENvbXAgPSBiYWRfbm9kZQorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfRGljdENvbXAgPSB2aXNpdF9HZW5lcmF0b3JFeHAgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjIGxpdGVyYWxzIGZvciBhZHZhbmNlZCB0eXBlcworICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfRGljdCA9IHZpc2l0X1NldCA9IGJhZF9ub2RlCisgICAgICAgICAgICAgICAgICAgICAgICB2aXNpdF9MaXN0ID0gdmlzaXRfVHVwbGUgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAjICJzdGFycmVkIjogImEgPSBbMSwgMiwgM107ICphIgorICAgICAgICAgICAgICAgICAgICAgICAgdmlzaXRfU3RhcnJlZCA9IGJhZF9ub2RlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYWxsb3cgZWxsaXBzaXMsIGZvciBub3cKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdmlzaXRfRWxsaXBzaXMgPSBiYWRfbm9kZQorCisgICAgICAgICAgICAgICAgICAgIGJsYWNrbGlzdCA9IERldGVjdEJhZE5vZGVzKCkKKyAgICAgICAgICAgICAgICAgICAgYmxhY2tsaXN0LnZpc2l0KG1vZHVsZSkKKyAgICAgICAgICAgICAgICAgICAgYmFkID0gYmxhY2tsaXN0LmJhZAorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICMgaWYgdGhleSBzcGVjaWZ5IGEgY19kZWZhdWx0LCB3ZSBjYW4gYmUgbW9yZSBsZW5pZW50IGFib3V0IHRoZSBkZWZhdWx0IHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAjIGJ1dCBhdCBsZWFzdCBtYWtlIGFuIGF0dGVtcHQgYXQgZW5zdXJpbmcgaXQncyBhIHZhbGlkIGV4cHJlc3Npb24uCisgICAgICAgICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZXZhbChkZWZhdWx0KQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgPT0gdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiJ3Vuc3BlY2lmaWVkJyBpcyBub3QgYSBsZWdhbCBkZWZhdWx0IHZhbHVlISIpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzICMgcHJvYmFibHkgYSBuYW1lZCBjb25zdGFudAorICAgICAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgICAgICAgICAgICAgICBmYWlsKCJNYWxmb3JtZWQgZXhwcmVzc2lvbiBnaXZlbiBhcyBkZWZhdWx0IHZhbHVlXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7IXJ9IGNhdXNlZCB7IXJ9Ii5mb3JtYXQoZGVmYXVsdCwgZSkpCisgICAgICAgICAgICAgICAgaWYgYmFkOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJVbnN1cHBvcnRlZCBleHByZXNzaW9uIGFzIGRlZmF1bHQgdmFsdWU6ICIgKyByZXByKGRlZmF1bHQpKQorCisgICAgICAgICAgICAgICAgZXhwciA9IG1vZHVsZS5ib2R5WzBdLnZhbHVlCisgICAgICAgICAgICAgICAgIyBtaWxkIGhhY2s6IGV4cGxpY2l0bHkgc3VwcG9ydCBOVUxMIGFzIGEgZGVmYXVsdCB2YWx1ZQorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZXhwciwgYXN0Lk5hbWUpIGFuZCBleHByLmlkID09ICdOVUxMJzoKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOVUxMCisgICAgICAgICAgICAgICAgICAgIHB5X2RlZmF1bHQgPSAnTm9uZScKKyAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0gIk5VTEwiCisgICAgICAgICAgICAgICAgZWxpZiAoaXNpbnN0YW5jZShleHByLCBhc3QuQmluT3ApIG9yCisgICAgICAgICAgICAgICAgICAgIChpc2luc3RhbmNlKGV4cHIsIGFzdC5VbmFyeU9wKSBhbmQgbm90IGlzaW5zdGFuY2UoZXhwci5vcGVyYW5kLCBhc3QuTnVtKSkpOgorICAgICAgICAgICAgICAgICAgICBjX2RlZmF1bHQgPSBrd2FyZ3MuZ2V0KCJjX2RlZmF1bHQiKQorICAgICAgICAgICAgICAgICAgICBpZiBub3QgKGlzaW5zdGFuY2UoY19kZWZhdWx0LCBzdHIpIGFuZCBjX2RlZmF1bHQpOgorICAgICAgICAgICAgICAgICAgICAgICAgZmFpbCgiV2hlbiB5b3Ugc3BlY2lmeSBhbiBleHByZXNzaW9uICgiICsgcmVwcihkZWZhdWx0KSArICIpIGFzIHlvdXIgZGVmYXVsdCB2YWx1ZSxcbnlvdSBNVVNUIHNwZWNpZnkgYSB2YWxpZCBjX2RlZmF1bHQuIikKKyAgICAgICAgICAgICAgICAgICAgcHlfZGVmYXVsdCA9IGRlZmF1bHQKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmtub3duCisgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGV4cHIsIGFzdC5BdHRyaWJ1dGUpOgorICAgICAgICAgICAgICAgICAgICBhID0gW10KKyAgICAgICAgICAgICAgICAgICAgbiA9IGV4cHIKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgaXNpbnN0YW5jZShuLCBhc3QuQXR0cmlidXRlKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGEuYXBwZW5kKG4uYXR0cikKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSBuLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKG4sIGFzdC5OYW1lKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoIlVuc3VwcG9ydGVkIGRlZmF1bHQgdmFsdWUgIiArIHJlcHIoZGVmYXVsdCkgKyAiIChsb29rZWQgbGlrZSBhIFB5dGhvbiBjb25zdGFudCkiKQorICAgICAgICAgICAgICAgICAgICBhLmFwcGVuZChuLmlkKQorICAgICAgICAgICAgICAgICAgICBweV9kZWZhdWx0ID0gIi4iLmpvaW4ocmV2ZXJzZWQoYSkpCisKKyAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0ga3dhcmdzLmdldCgiY19kZWZhdWx0IikKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IChpc2luc3RhbmNlKGNfZGVmYXVsdCwgc3RyKSBhbmQgY19kZWZhdWx0KToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZhaWwoIldoZW4geW91IHNwZWNpZnkgYSBuYW1lZCBjb25zdGFudCAoIiArIHJlcHIocHlfZGVmYXVsdCkgKyAiKSBhcyB5b3VyIGRlZmF1bHQgdmFsdWUsXG55b3UgTVVTVCBzcGVjaWZ5IGEgdmFsaWQgY19kZWZhdWx0LiIpCisKKyAgICAgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBldmFsKHB5X2RlZmF1bHQpCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdCBOYW1lRXJyb3I6CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVua25vd24KKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzdC5saXRlcmFsX2V2YWwoZXhwcikKKyAgICAgICAgICAgICAgICAgICAgcHlfZGVmYXVsdCA9IHJlcHIodmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UodmFsdWUsIChib29sLCBOb25lLl9fY2xhc3NfXykpOgorICAgICAgICAgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0gIlB5XyIgKyBweV9kZWZhdWx0CisgICAgICAgICAgICAgICAgICAgIGVsaWYgaXNpbnN0YW5jZSh2YWx1ZSwgc3RyKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVmYXVsdCA9IGNfcmVwcih2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNfZGVmYXVsdCA9IHB5X2RlZmF1bHQKKworICAgICAgICAgICAgZXhjZXB0IFN5bnRheEVycm9yIGFzIGU6CisgICAgICAgICAgICAgICAgZmFpbCgiU3ludGF4IGVycm9yOiAiICsgcmVwcihlLnRleHQpKQorICAgICAgICAgICAgZXhjZXB0IChWYWx1ZUVycm9yLCBBdHRyaWJ1dGVFcnJvcik6CisgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmtub3duCisgICAgICAgICAgICAgICAgY19kZWZhdWx0ID0ga3dhcmdzLmdldCgiY19kZWZhdWx0IikKKyAgICAgICAgICAgICAgICBweV9kZWZhdWx0ID0gZGVmYXVsdAorICAgICAgICAgICAgICAgIGlmIG5vdCAoaXNpbnN0YW5jZShjX2RlZmF1bHQsIHN0cikgYW5kIGNfZGVmYXVsdCk6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIldoZW4geW91IHNwZWNpZnkgYSBuYW1lZCBjb25zdGFudCAoIiArIHJlcHIocHlfZGVmYXVsdCkgKyAiKSBhcyB5b3VyIGRlZmF1bHQgdmFsdWUsXG55b3UgTVVTVCBzcGVjaWZ5IGEgdmFsaWQgY19kZWZhdWx0LiIpCisKKyAgICAgICAgICAgIGt3YXJncy5zZXRkZWZhdWx0KCdjX2RlZmF1bHQnLCBjX2RlZmF1bHQpCisgICAgICAgICAgICBrd2FyZ3Muc2V0ZGVmYXVsdCgncHlfZGVmYXVsdCcsIHB5X2RlZmF1bHQpCisKKyAgICAgICAgZGljdCA9IGxlZ2FjeV9jb252ZXJ0ZXJzIGlmIGxlZ2FjeSBlbHNlIGNvbnZlcnRlcnMKKyAgICAgICAgbGVnYWN5X3N0ciA9ICJsZWdhY3kgIiBpZiBsZWdhY3kgZWxzZSAiIgorICAgICAgICBpZiBuYW1lIG5vdCBpbiBkaWN0OgorICAgICAgICAgICAgZmFpbCgne30gaXMgbm90IGEgdmFsaWQge31jb252ZXJ0ZXInLmZvcm1hdChuYW1lLCBsZWdhY3lfc3RyKSkKKyAgICAgICAgIyBpZiB5b3UgdXNlIGEgY19uYW1lIGZvciB0aGUgcGFyYW1ldGVyLCB3ZSBqdXN0IGdpdmUgdGhhdCBuYW1lIHRvIHRoZSBjb252ZXJ0ZXIKKyAgICAgICAgIyBidXQgdGhlIHBhcmFtZXRlciBvYmplY3QgZ2V0cyB0aGUgcHl0aG9uIG5hbWUKKyAgICAgICAgY29udmVydGVyID0gZGljdFtuYW1lXShjX25hbWUgb3IgcGFyYW1ldGVyX25hbWUsIHBhcmFtZXRlcl9uYW1lLCBzZWxmLmZ1bmN0aW9uLCB2YWx1ZSwgKiprd2FyZ3MpCisKKyAgICAgICAga2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSBpZiBzZWxmLmtleXdvcmRfb25seSBlbHNlIGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT1JfS0VZV09SRAorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcik6CisgICAgICAgICAgICBpZiBsZW4oc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzKSA9PSAxOgorICAgICAgICAgICAgICAgIGlmIChzZWxmLnBhcmFtZXRlcl9zdGF0ZSAhPSBzZWxmLnBzX3JlcXVpcmVkKToKKyAgICAgICAgICAgICAgICAgICAgZmFpbCgiQSAnc2VsZicgcGFyYW1ldGVyIGNhbm5vdCBiZSBtYXJrZWQgb3B0aW9uYWwuIikKKyAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgdW5zcGVjaWZpZWQ6CisgICAgICAgICAgICAgICAgICAgIGZhaWwoIkEgJ3NlbGYnIHBhcmFtZXRlciBjYW5ub3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUuIikKKyAgICAgICAgICAgICAgICBpZiBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJBICdzZWxmJyBwYXJhbWV0ZXIgY2Fubm90IGJlIGluIGFuIG9wdGlvbmFsIGdyb3VwLiIpCisgICAgICAgICAgICAgICAga2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorICAgICAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19zdGFydAorICAgICAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy5jbGVhcigpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZhaWwoIkEgJ3NlbGYnIHBhcmFtZXRlciwgaWYgc3BlY2lmaWVkLCBtdXN0IGJlIHRoZSB2ZXJ5IGZpcnN0IHRoaW5nIGluIHRoZSBwYXJhbWV0ZXIgYmxvY2suIikKKworICAgICAgICBwID0gUGFyYW1ldGVyKHBhcmFtZXRlcl9uYW1lLCBraW5kLCBmdW5jdGlvbj1zZWxmLmZ1bmN0aW9uLCBjb252ZXJ0ZXI9Y29udmVydGVyLCBkZWZhdWx0PXZhbHVlLCBncm91cD1zZWxmLmdyb3VwKQorCisgICAgICAgIGlmIHBhcmFtZXRlcl9uYW1lIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVyczoKKyAgICAgICAgICAgIGZhaWwoIllvdSBjYW4ndCBoYXZlIHR3byBwYXJhbWV0ZXJzIG5hbWVkICIgKyByZXByKHBhcmFtZXRlcl9uYW1lKSArICIhIikKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzW3BhcmFtZXRlcl9uYW1lXSA9IHAKKworICAgIGRlZiBwYXJzZV9jb252ZXJ0ZXIoc2VsZiwgYW5ub3RhdGlvbik6CisgICAgICAgIGlmIGlzaW5zdGFuY2UoYW5ub3RhdGlvbiwgYXN0LlN0cik6CisgICAgICAgICAgICByZXR1cm4gYW5ub3RhdGlvbi5zLCBUcnVlLCB7fQorCisgICAgICAgIGlmIGlzaW5zdGFuY2UoYW5ub3RhdGlvbiwgYXN0Lk5hbWUpOgorICAgICAgICAgICAgcmV0dXJuIGFubm90YXRpb24uaWQsIEZhbHNlLCB7fQorCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKGFubm90YXRpb24sIGFzdC5DYWxsKToKKyAgICAgICAgICAgIGZhaWwoIkFubm90YXRpb25zIG11c3QgYmUgZWl0aGVyIGEgbmFtZSwgYSBmdW5jdGlvbiBjYWxsLCBvciBhIHN0cmluZy4iKQorCisgICAgICAgIG5hbWUgPSBhbm5vdGF0aW9uLmZ1bmMuaWQKKyAgICAgICAga3dhcmdzID0ge25vZGUuYXJnOiBhc3QubGl0ZXJhbF9ldmFsKG5vZGUudmFsdWUpIGZvciBub2RlIGluIGFubm90YXRpb24ua2V5d29yZHN9CisgICAgICAgIHJldHVybiBuYW1lLCBGYWxzZSwga3dhcmdzCisKKyAgICBkZWYgcGFyc2Vfc3BlY2lhbF9zeW1ib2woc2VsZiwgc3ltYm9sKToKKyAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPT0gc2VsZi5wc19zZWVuX3NsYXNoOgorICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICIgKyBzeW1ib2wgKyAiIGFmdGVyIC8sIHdoaWNoIGlzIHVuc3VwcG9ydGVkLiIpCisKKyAgICAgICAgaWYgc3ltYm9sID09ICcqJzoKKyAgICAgICAgICAgIGlmIHNlbGYua2V5d29yZF9vbmx5OgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIHVzZXMgJyonIG1vcmUgdGhhbiBvbmNlLiIpCisgICAgICAgICAgICBzZWxmLmtleXdvcmRfb25seSA9IFRydWUKKyAgICAgICAgZWxpZiBzeW1ib2wgPT0gJ1snOgorICAgICAgICAgICAgaWYgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgaW4gKHNlbGYucHNfc3RhcnQsIHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfbGVmdF9zcXVhcmVfYmVmb3JlCisgICAgICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX2dyb3VwX2FmdGVyKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYWZ0ZXIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIHVuc3VwcG9ydGVkIGdyb3VwIGNvbmZpZ3VyYXRpb24uIChVbmV4cGVjdGVkIHN0YXRlICIgKyBzdHIoc2VsZi5wYXJhbWV0ZXJfc3RhdGUpICsgIi5iKSIpCisgICAgICAgICAgICBzZWxmLmdyb3VwICs9IDEKKyAgICAgICAgICAgIHNlbGYuZnVuY3Rpb24uZG9jc3RyaW5nX29ubHkgPSBUcnVlCisgICAgICAgIGVsaWYgc3ltYm9sID09ICddJzoKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhIF0gd2l0aG91dCBhIG1hdGNoaW5nIFsuIikKKyAgICAgICAgICAgIGlmIG5vdCBhbnkocC5ncm91cCA9PSBzZWxmLmdyb3VwIGZvciBwIGluIHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKSk6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgaGFzIGFuIGVtcHR5IGdyb3VwLlxuQWxsIGdyb3VwcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHBhcmFtZXRlci4iKQorICAgICAgICAgICAgc2VsZi5ncm91cCAtPSAxCisgICAgICAgICAgICBpZiBzZWxmLnBhcmFtZXRlcl9zdGF0ZSBpbiAoc2VsZi5wc19sZWZ0X3NxdWFyZV9iZWZvcmUsIHNlbGYucHNfZ3JvdXBfYmVmb3JlKToKKyAgICAgICAgICAgICAgICBzZWxmLnBhcmFtZXRlcl9zdGF0ZSA9IHNlbGYucHNfZ3JvdXBfYmVmb3JlCisgICAgICAgICAgICBlbGlmIHNlbGYucGFyYW1ldGVyX3N0YXRlIGluIChzZWxmLnBzX2dyb3VwX2FmdGVyLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlcik6CisgICAgICAgICAgICAgICAgc2VsZi5wYXJhbWV0ZXJfc3RhdGUgPSBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlcgorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgIiArIHN0cihzZWxmLnBhcmFtZXRlcl9zdGF0ZSkgKyAiLmMpIikKKyAgICAgICAgZWxpZiBzeW1ib2wgPT0gJy8nOgorICAgICAgICAgICAgIyBwc19yZXF1aXJlZCBhbmQgcHNfb3B0aW9uYWwgYXJlIGFsbG93ZWQgaGVyZSwgdGhhdCBhbGxvd3MgcG9zaXRpb25hbC1vbmx5IHdpdGhvdXQgb3B0aW9uIGdyb3VwcworICAgICAgICAgICAgIyB0byB3b3JrIChhbmQgaGF2ZSBkZWZhdWx0IHZhbHVlcyEpCisgICAgICAgICAgICBpZiAoc2VsZi5wYXJhbWV0ZXJfc3RhdGUgbm90IGluIChzZWxmLnBzX3JlcXVpcmVkLCBzZWxmLnBzX29wdGlvbmFsLCBzZWxmLnBzX3JpZ2h0X3NxdWFyZV9hZnRlciwgc2VsZi5wc19ncm91cF9iZWZvcmUpKSBvciBzZWxmLmdyb3VwOgorICAgICAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhbiB1bnN1cHBvcnRlZCBncm91cCBjb25maWd1cmF0aW9uLiAoVW5leHBlY3RlZCBzdGF0ZSAiICsgc3RyKHNlbGYucGFyYW1ldGVyX3N0YXRlKSArICIuZCkiKQorICAgICAgICAgICAgaWYgc2VsZi5rZXl3b3JkX29ubHk6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgbWl4ZXMga2V5d29yZC1vbmx5IGFuZCBwb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgd2hpY2ggaXMgdW5zdXBwb3J0ZWQuIikKKyAgICAgICAgICAgIHNlbGYucGFyYW1ldGVyX3N0YXRlID0gc2VsZi5wc19zZWVuX3NsYXNoCisgICAgICAgICAgICAjIGZpeHVwIHByZWNlZGluZyBwYXJhbWV0ZXJzCisgICAgICAgICAgICBmb3IgcCBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMudmFsdWVzKCk6CisgICAgICAgICAgICAgICAgaWYgKHAua2luZCAhPSBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09SX0tFWVdPUkQgYW5kIG5vdCBpc2luc3RhbmNlKHAuY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcikpOgorICAgICAgICAgICAgICAgICAgICBmYWlsKCJGdW5jdGlvbiAiICsgc2VsZi5mdW5jdGlvbi5uYW1lICsgIiBtaXhlcyBrZXl3b3JkLW9ubHkgYW5kIHBvc2l0aW9uYWwtb25seSBwYXJhbWV0ZXJzLCB3aGljaCBpcyB1bnN1cHBvcnRlZC4iKQorICAgICAgICAgICAgICAgIHAua2luZCA9IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWQorCisgICAgZGVmIHN0YXRlX3BhcmFtZXRlcl9kb2NzdHJpbmdfc3RhcnQoc2VsZiwgbGluZSk6CisgICAgICAgIHNlbGYucGFyYW1ldGVyX2RvY3N0cmluZ19pbmRlbnQgPSBsZW4oc2VsZi5pbmRlbnQubWFyZ2luKQorICAgICAgICBhc3NlcnQgc2VsZi5pbmRlbnQuZGVwdGggPT0gMworICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZywgbGluZSkKKworICAgICMgZXZlcnkgbGluZSBvZiB0aGUgZG9jc3RyaW5nIG11c3Qgc3RhcnQgd2l0aCBhdCBsZWFzdCBGIHNwYWNlcywKKyAgICAjIHdoZXJlIEYgPiBQLgorICAgICMgdGhlc2UgRiBzcGFjZXMgd2lsbCBiZSBzdHJpcHBlZC4KKyAgICBkZWYgc3RhdGVfcGFyYW1ldGVyX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgc3RyaXBwZWQgPSBsaW5lLnN0cmlwKCkKKyAgICAgICAgaWYgc3RyaXBwZWQuc3RhcnRzd2l0aCgnIycpOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaW5kZW50ID0gc2VsZi5pbmRlbnQubWVhc3VyZShsaW5lKQorICAgICAgICBpZiBpbmRlbnQgPCBzZWxmLnBhcmFtZXRlcl9kb2NzdHJpbmdfaW5kZW50OgorICAgICAgICAgICAgc2VsZi5pbmRlbnQuaW5mZXIobGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA8IDMKKyAgICAgICAgICAgIGlmIHNlbGYuaW5kZW50LmRlcHRoID09IDI6CisgICAgICAgICAgICAgICAgIyBiYWNrIHRvIGEgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYubmV4dChzZWxmLnN0YXRlX3BhcmFtZXRlciwgbGluZSkKKyAgICAgICAgICAgIGFzc2VydCBzZWxmLmluZGVudC5kZXB0aCA9PSAxCisgICAgICAgICAgICByZXR1cm4gc2VsZi5uZXh0KHNlbGYuc3RhdGVfZnVuY3Rpb25fZG9jc3RyaW5nLCBsaW5lKQorCisgICAgICAgIGFzc2VydCBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMKKyAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3Qoc2VsZi5mdW5jdGlvbi5wYXJhbWV0ZXJzLnZhbHVlcygpKSkpCisKKyAgICAgICAgbmV3X2RvY3N0cmluZyA9IGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZworCisgICAgICAgIGlmIG5ld19kb2NzdHJpbmc6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9ICdcbicKKyAgICAgICAgaWYgc3RyaXBwZWQ6CisgICAgICAgICAgICBuZXdfZG9jc3RyaW5nICs9IHNlbGYuaW5kZW50LmRlZGVudChsaW5lKQorCisgICAgICAgIGxhc3RfcGFyYW1ldGVyLmRvY3N0cmluZyA9IG5ld19kb2NzdHJpbmcKKworICAgICMgdGhlIGZpbmFsIHN0YW56YSBvZiB0aGUgRFNMIGlzIHRoZSBkb2NzdHJpbmcuCisgICAgZGVmIHN0YXRlX2Z1bmN0aW9uX2RvY3N0cmluZyhzZWxmLCBsaW5lKToKKyAgICAgICAgaWYgc2VsZi5ncm91cDoKKyAgICAgICAgICAgIGZhaWwoIkZ1bmN0aW9uICIgKyBzZWxmLmZ1bmN0aW9uLm5hbWUgKyAiIGhhcyBhIF0gd2l0aG91dCBhIG1hdGNoaW5nIFsuIikKKworICAgICAgICBzdHJpcHBlZCA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBzdHJpcHBlZC5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBuZXdfZG9jc3RyaW5nID0gc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcKKyAgICAgICAgaWYgbmV3X2RvY3N0cmluZzoKKyAgICAgICAgICAgIG5ld19kb2NzdHJpbmcgKz0gIlxuIgorICAgICAgICBpZiBzdHJpcHBlZDoKKyAgICAgICAgICAgIGxpbmUgPSBzZWxmLmluZGVudC5kZWRlbnQobGluZSkucnN0cmlwKCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGxpbmUgPSAnJworICAgICAgICBuZXdfZG9jc3RyaW5nICs9IGxpbmUKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBuZXdfZG9jc3RyaW5nCisKKyAgICBkZWYgZm9ybWF0X2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZiA9IHNlbGYuZnVuY3Rpb24KKworICAgICAgICBuZXdfb3JfaW5pdCA9IGYua2luZCBpbiAoTUVUSE9EX05FVywgTUVUSE9EX0lOSVQpCisgICAgICAgIGlmIG5ld19vcl9pbml0IGFuZCBub3QgZi5kb2NzdHJpbmc6CisgICAgICAgICAgICAjIGRvbid0IHJlbmRlciBhIGRvY3N0cmluZyBhdCBhbGwsIG5vIHNpZ25hdHVyZSwgbm90aGluZy4KKyAgICAgICAgICAgIHJldHVybiBmLmRvY3N0cmluZworCisgICAgICAgIHRleHQsIGFkZCwgb3V0cHV0ID0gX3RleHRfYWNjdW11bGF0b3IoKQorICAgICAgICBwYXJhbWV0ZXJzID0gZi5yZW5kZXJfcGFyYW1ldGVycworCisgICAgICAgICMjCisgICAgICAgICMjIGRvY3N0cmluZyBmaXJzdCBsaW5lCisgICAgICAgICMjCisKKyAgICAgICAgaWYgbmV3X29yX2luaXQ6CisgICAgICAgICAgICAjIGNsYXNzZXMgZ2V0ICpqdXN0KiB0aGUgbmFtZSBvZiB0aGUgY2xhc3MKKyAgICAgICAgICAgICMgbm90IF9fbmV3X18sIG5vdCBfX2luaXRfXywgYW5kIG5vdCBtb2R1bGUuY2xhc3NuYW1lCisgICAgICAgICAgICBhc3NlcnQgZi5jbHMKKyAgICAgICAgICAgIGFkZChmLmNscy5uYW1lKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgYWRkKGYubmFtZSkKKyAgICAgICAgYWRkKCcoJykKKworICAgICAgICAjIHBvcHVsYXRlICJyaWdodF9icmFja2V0X2NvdW50IiBmaWVsZCBmb3IgZXZlcnkgcGFyYW1ldGVyCisgICAgICAgIGFzc2VydCBwYXJhbWV0ZXJzLCAiV2Ugc2hvdWxkIGFsd2F5cyBoYXZlIGEgc2VsZiBwYXJhbWV0ZXIuICIgKyByZXByKGYpCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcmFtZXRlcnNbMF0uY29udmVydGVyLCBzZWxmX2NvbnZlcnRlcikKKyAgICAgICAgcGFyYW1ldGVyc1swXS5yaWdodF9icmFja2V0X2NvdW50ID0gMAorICAgICAgICBwYXJhbWV0ZXJzX2FmdGVyX3NlbGYgPSBwYXJhbWV0ZXJzWzE6XQorICAgICAgICBpZiBwYXJhbWV0ZXJzX2FmdGVyX3NlbGY6CisgICAgICAgICAgICAjIGZvciBub3csIHRoZSBvbmx5IHdheSBDbGluaWMgc3VwcG9ydHMgcG9zaXRpb25hbC1vbmx5IHBhcmFtZXRlcnMKKyAgICAgICAgICAgICMgaXMgaWYgYWxsIG9mIHRoZW0gYXJlIHBvc2l0aW9uYWwtb25seS4uLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyAuLi4gZXhjZXB0IGZvciBzZWxmISAgc2VsZiBpcyBhbHdheXMgcG9zaXRpb25hbC1vbmx5LgorCisgICAgICAgICAgICBwb3NpdGlvbmFsX29ubHlfcGFyYW1ldGVycyA9IFtwLmtpbmQgPT0gaW5zcGVjdC5QYXJhbWV0ZXIuUE9TSVRJT05BTF9PTkxZIGZvciBwIGluIHBhcmFtZXRlcnNfYWZ0ZXJfc2VsZl0KKyAgICAgICAgICAgIGlmIHBhcmFtZXRlcnNfYWZ0ZXJfc2VsZlswXS5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLlBPU0lUSU9OQUxfT05MWToKKyAgICAgICAgICAgICAgICBhc3NlcnQgYWxsKHBvc2l0aW9uYWxfb25seV9wYXJhbWV0ZXJzKQorICAgICAgICAgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICAgICAgICAgIHAucmlnaHRfYnJhY2tldF9jb3VudCA9IGFicyhwLmdyb3VwKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGRvbid0IHB1dCBhbnkgcmlnaHQgYnJhY2tldHMgYXJvdW5kIG5vbi1wb3NpdGlvbmFsLW9ubHkgcGFyYW1ldGVycywgZXZlci4KKyAgICAgICAgICAgICAgICBmb3IgcCBpbiBwYXJhbWV0ZXJzX2FmdGVyX3NlbGY6CisgICAgICAgICAgICAgICAgICAgIHAucmlnaHRfYnJhY2tldF9jb3VudCA9IDAKKworICAgICAgICByaWdodF9icmFja2V0X2NvdW50ID0gMAorCisgICAgICAgIGRlZiBmaXhfcmlnaHRfYnJhY2tldF9jb3VudChkZXNpcmVkKToKKyAgICAgICAgICAgIG5vbmxvY2FsIHJpZ2h0X2JyYWNrZXRfY291bnQKKyAgICAgICAgICAgIHMgPSAnJworICAgICAgICAgICAgd2hpbGUgcmlnaHRfYnJhY2tldF9jb3VudCA8IGRlc2lyZWQ6CisgICAgICAgICAgICAgICAgcyArPSAnWycKKyAgICAgICAgICAgICAgICByaWdodF9icmFja2V0X2NvdW50ICs9IDEKKyAgICAgICAgICAgIHdoaWxlIHJpZ2h0X2JyYWNrZXRfY291bnQgPiBkZXNpcmVkOgorICAgICAgICAgICAgICAgIHMgKz0gJ10nCisgICAgICAgICAgICAgICAgcmlnaHRfYnJhY2tldF9jb3VudCAtPSAxCisgICAgICAgICAgICByZXR1cm4gcworCisgICAgICAgIG5lZWRfc2xhc2ggPSBGYWxzZQorICAgICAgICBhZGRlZF9zbGFzaCA9IEZhbHNlCisgICAgICAgIG5lZWRfYV90cmFpbGluZ19zbGFzaCA9IEZhbHNlCisKKyAgICAgICAgIyB3ZSBvbmx5IG5lZWQgYSB0cmFpbGluZyBzbGFzaDoKKyAgICAgICAgIyAgICogaWYgdGhpcyBpcyBub3QgYSAiZG9jc3RyaW5nX29ubHkiIHNpZ25hdHVyZQorICAgICAgICAjICAgKiBhbmQgaWYgdGhlIGxhc3QgKnNob3duKiBwYXJhbWV0ZXIgaXMKKyAgICAgICAgIyAgICAgcG9zaXRpb25hbCBvbmx5CisgICAgICAgIGlmIG5vdCBmLmRvY3N0cmluZ19vbmx5OgorICAgICAgICAgICAgZm9yIHAgaW4gcmV2ZXJzZWQocGFyYW1ldGVycyk6CisgICAgICAgICAgICAgICAgaWYgbm90IHAuY29udmVydGVyLnNob3dfaW5fc2lnbmF0dXJlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGlmIHAuaXNfcG9zaXRpb25hbF9vbmx5KCk6CisgICAgICAgICAgICAgICAgICAgIG5lZWRfYV90cmFpbGluZ19zbGFzaCA9IFRydWUKKyAgICAgICAgICAgICAgICBicmVhaworCisKKyAgICAgICAgYWRkZWRfc3RhciA9IEZhbHNlCisKKyAgICAgICAgZmlyc3RfcGFyYW1ldGVyID0gVHJ1ZQorICAgICAgICBsYXN0X3AgPSBwYXJhbWV0ZXJzWy0xXQorICAgICAgICBsaW5lX2xlbmd0aCA9IGxlbignJy5qb2luKHRleHQpKQorICAgICAgICBpbmRlbnQgPSAiICIgKiBsaW5lX2xlbmd0aAorICAgICAgICBkZWYgYWRkX3BhcmFtZXRlcih0ZXh0KToKKyAgICAgICAgICAgIG5vbmxvY2FsIGxpbmVfbGVuZ3RoCisgICAgICAgICAgICBub25sb2NhbCBmaXJzdF9wYXJhbWV0ZXIKKyAgICAgICAgICAgIGlmIGZpcnN0X3BhcmFtZXRlcjoKKyAgICAgICAgICAgICAgICBzID0gdGV4dAorICAgICAgICAgICAgICAgIGZpcnN0X3BhcmFtZXRlciA9IEZhbHNlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHMgPSAnICcgKyB0ZXh0CisgICAgICAgICAgICAgICAgaWYgbGluZV9sZW5ndGggKyBsZW4ocykgPj0gNzI6CisgICAgICAgICAgICAgICAgICAgIGFkZCgnXG4nKQorICAgICAgICAgICAgICAgICAgICBhZGQoaW5kZW50KQorICAgICAgICAgICAgICAgICAgICBsaW5lX2xlbmd0aCA9IGxlbihpbmRlbnQpCisgICAgICAgICAgICAgICAgICAgIHMgPSB0ZXh0CisgICAgICAgICAgICBsaW5lX2xlbmd0aCArPSBsZW4ocykKKyAgICAgICAgICAgIGFkZChzKQorCisgICAgICAgIGZvciBwIGluIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBpZiBub3QgcC5jb252ZXJ0ZXIuc2hvd19pbl9zaWduYXR1cmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGFzc2VydCBwLm5hbWUKKworICAgICAgICAgICAgaXNfc2VsZiA9IGlzaW5zdGFuY2UocC5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKQorICAgICAgICAgICAgaWYgaXNfc2VsZiBhbmQgZi5kb2NzdHJpbmdfb25seToKKyAgICAgICAgICAgICAgICAjIHRoaXMgaXNuJ3QgYSByZWFsIG1hY2hpbmUtcGFyc2FibGUgc2lnbmF0dXJlLAorICAgICAgICAgICAgICAgICMgc28gbGV0J3Mgbm90IHByaW50IHRoZSAic2VsZiIgcGFyYW1ldGVyCisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgaWYgcC5pc19wb3NpdGlvbmFsX29ubHkoKToKKyAgICAgICAgICAgICAgICBuZWVkX3NsYXNoID0gbm90IGYuZG9jc3RyaW5nX29ubHkKKyAgICAgICAgICAgIGVsaWYgbmVlZF9zbGFzaCBhbmQgbm90IChhZGRlZF9zbGFzaCBvciBwLmlzX3Bvc2l0aW9uYWxfb25seSgpKToKKyAgICAgICAgICAgICAgICBhZGRlZF9zbGFzaCA9IFRydWUKKyAgICAgICAgICAgICAgICBhZGRfcGFyYW1ldGVyKCcvLCcpCisKKyAgICAgICAgICAgIGlmIHAuaXNfa2V5d29yZF9vbmx5KCkgYW5kIG5vdCBhZGRlZF9zdGFyOgorICAgICAgICAgICAgICAgIGFkZGVkX3N0YXIgPSBUcnVlCisgICAgICAgICAgICAgICAgYWRkX3BhcmFtZXRlcignKiwnKQorCisgICAgICAgICAgICBwX2FkZCwgcF9vdXRwdXQgPSB0ZXh0X2FjY3VtdWxhdG9yKCkKKyAgICAgICAgICAgIHBfYWRkKGZpeF9yaWdodF9icmFja2V0X2NvdW50KHAucmlnaHRfYnJhY2tldF9jb3VudCkpCisKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UocC5jb252ZXJ0ZXIsIHNlbGZfY29udmVydGVyKToKKyAgICAgICAgICAgICAgICAjIGFubm90YXRlIGZpcnN0IHBhcmFtZXRlciBhcyBiZWluZyBhICJzZWxmIi4KKyAgICAgICAgICAgICAgICAjCisgICAgICAgICAgICAgICAgIyBpZiBpbnNwZWN0LlNpZ25hdHVyZSBnZXRzIHRoaXMgZnVuY3Rpb24sCisgICAgICAgICAgICAgICAgIyBhbmQgaXQncyBhbHJlYWR5IGJvdW5kLCB0aGUgc2VsZiBwYXJhbWV0ZXIKKyAgICAgICAgICAgICAgICAjIHdpbGwgYmUgc3RyaXBwZWQgb2ZmLgorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIGlmIGl0J3Mgbm90IGJvdW5kLCBpdCBzaG91bGQgYmUgbWFya2VkCisgICAgICAgICAgICAgICAgIyBhcyBwb3NpdGlvbmFsLW9ubHkuCisgICAgICAgICAgICAgICAgIworICAgICAgICAgICAgICAgICMgbm90ZTogd2UgZG9uJ3QgcHJpbnQgInNlbGYiIGZvciBfX2luaXRfXywKKyAgICAgICAgICAgICAgICAjIGJlY2F1c2UgdGhpcyBpc24ndCBhY3R1YWxseSB0aGUgc2lnbmF0dXJlCisgICAgICAgICAgICAgICAgIyBmb3IgX19pbml0X18uICAoaXQgY2FuJ3QgYmUsIF9faW5pdF9fIGRvZXNuJ3QKKyAgICAgICAgICAgICAgICAjIGhhdmUgYSBkb2NzdHJpbmcuKSAgaWYgdGhpcyBpcyBhbiBfX2luaXRfXworICAgICAgICAgICAgICAgICMgKG9yIF9fbmV3X18pLCB0aGVuIHRoaXMgc2lnbmF0dXJlIGlzIGZvcgorICAgICAgICAgICAgICAgICMgY2FsbGluZyB0aGUgY2xhc3MgdG8gY29uc3RydWN0IGEgbmV3IGluc3RhbmNlLgorICAgICAgICAgICAgICAgIHBfYWRkKCckJykKKworICAgICAgICAgICAgbmFtZSA9IHAuY29udmVydGVyLnNpZ25hdHVyZV9uYW1lIG9yIHAubmFtZQorICAgICAgICAgICAgcF9hZGQobmFtZSkKKworICAgICAgICAgICAgaWYgcC5jb252ZXJ0ZXIuaXNfb3B0aW9uYWwoKToKKyAgICAgICAgICAgICAgICBwX2FkZCgnPScpCisgICAgICAgICAgICAgICAgdmFsdWUgPSBwLmNvbnZlcnRlci5weV9kZWZhdWx0CisgICAgICAgICAgICAgICAgaWYgbm90IHZhbHVlOgorICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlcHIocC5jb252ZXJ0ZXIuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICBwX2FkZCh2YWx1ZSkKKworICAgICAgICAgICAgaWYgKHAgIT0gbGFzdF9wKSBvciBuZWVkX2FfdHJhaWxpbmdfc2xhc2g6CisgICAgICAgICAgICAgICAgcF9hZGQoJywnKQorCisgICAgICAgICAgICBhZGRfcGFyYW1ldGVyKHBfb3V0cHV0KCkpCisKKyAgICAgICAgYWRkKGZpeF9yaWdodF9icmFja2V0X2NvdW50KDApKQorICAgICAgICBpZiBuZWVkX2FfdHJhaWxpbmdfc2xhc2g6CisgICAgICAgICAgICBhZGRfcGFyYW1ldGVyKCcvJykKKyAgICAgICAgYWRkKCcpJykKKworICAgICAgICAjIFBFUCA4IHNheXM6CisgICAgICAgICMKKyAgICAgICAgIyAgICAgVGhlIFB5dGhvbiBzdGFuZGFyZCBsaWJyYXJ5IHdpbGwgbm90IHVzZSBmdW5jdGlvbiBhbm5vdGF0aW9ucworICAgICAgICAjICAgICBhcyB0aGF0IHdvdWxkIHJlc3VsdCBpbiBhIHByZW1hdHVyZSBjb21taXRtZW50IHRvIGEgcGFydGljdWxhcgorICAgICAgICAjICAgICBhbm5vdGF0aW9uIHN0eWxlLiBJbnN0ZWFkLCB0aGUgYW5ub3RhdGlvbnMgYXJlIGxlZnQgZm9yIHVzZXJzCisgICAgICAgICMgICAgIHRvIGRpc2NvdmVyIGFuZCBleHBlcmltZW50IHdpdGggdXNlZnVsIGFubm90YXRpb24gc3R5bGVzLgorICAgICAgICAjCisgICAgICAgICMgdGhlcmVmb3JlIHRoaXMgaXMgY29tbWVudGVkIG91dDoKKyAgICAgICAgIworICAgICAgICAjIGlmIGYucmV0dXJuX2NvbnZlcnRlci5weV9kZWZhdWx0OgorICAgICAgICAjICAgICBhZGQoJyAtPiAnKQorICAgICAgICAjICAgICBhZGQoZi5yZXR1cm5fY29udmVydGVyLnB5X2RlZmF1bHQpCisKKyAgICAgICAgaWYgbm90IGYuZG9jc3RyaW5nX29ubHk6CisgICAgICAgICAgICBhZGQoIlxuLS1cbiIpCisKKyAgICAgICAgZG9jc3RyaW5nX2ZpcnN0X2xpbmUgPSBvdXRwdXQoKQorCisgICAgICAgICMgbm93IGZpeCB1cCB0aGUgcGxhY2VzIHdoZXJlIHRoZSBicmFja2V0cyBsb29rIHdyb25nCisgICAgICAgIGRvY3N0cmluZ19maXJzdF9saW5lID0gZG9jc3RyaW5nX2ZpcnN0X2xpbmUucmVwbGFjZSgnLCBdJywgJyxdICcpCisKKyAgICAgICAgIyBva2F5LiAgbm93IHdlJ3JlIG9mZmljaWFsbHkgYnVpbGRpbmcgdGhlICJwYXJhbWV0ZXJzIiBzZWN0aW9uLgorICAgICAgICAjIGNyZWF0ZSBzdWJzdGl0dXRpb24gdGV4dCBmb3Ige3BhcmFtZXRlcnN9CisgICAgICAgIHNwYWNlcl9saW5lID0gRmFsc2UKKyAgICAgICAgZm9yIHAgaW4gcGFyYW1ldGVyczoKKyAgICAgICAgICAgIGlmIG5vdCBwLmRvY3N0cmluZy5zdHJpcCgpOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBzcGFjZXJfbGluZToKKyAgICAgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3BhY2VyX2xpbmUgPSBUcnVlCisgICAgICAgICAgICBhZGQoIiAgIikKKyAgICAgICAgICAgIGFkZChwLm5hbWUpCisgICAgICAgICAgICBhZGQoJ1xuJykKKyAgICAgICAgICAgIGFkZCh0ZXh0d3JhcC5pbmRlbnQocnN0cmlwX2xpbmVzKHAuZG9jc3RyaW5nLnJzdHJpcCgpKSwgIiAgICAiKSkKKyAgICAgICAgcGFyYW1ldGVycyA9IG91dHB1dCgpCisgICAgICAgIGlmIHBhcmFtZXRlcnM6CisgICAgICAgICAgICBwYXJhbWV0ZXJzICs9ICdcbicKKworICAgICAgICAjIworICAgICAgICAjIyBkb2NzdHJpbmcgYm9keQorICAgICAgICAjIworCisgICAgICAgIGRvY3N0cmluZyA9IGYuZG9jc3RyaW5nLnJzdHJpcCgpCisgICAgICAgIGxpbmVzID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gZG9jc3RyaW5nLnNwbGl0KCdcbicpXQorCisgICAgICAgICMgRW5mb3JjZSB0aGUgc3VtbWFyeSBsaW5lIQorICAgICAgICAjIFRoZSBmaXJzdCBsaW5lIG9mIGEgZG9jc3RyaW5nIHNob3VsZCBiZSBhIHN1bW1hcnkgb2YgdGhlIGZ1bmN0aW9uLgorICAgICAgICAjIEl0IHNob3VsZCBmaXQgb24gb25lIGxpbmUgKDgwIGNvbHVtbnM/IDc5IG1heWJlPykgYW5kIGJlIGEgcGFyYWdyYXBoCisgICAgICAgICMgYnkgaXRzZWxmLgorICAgICAgICAjCisgICAgICAgICMgQXJndW1lbnQgQ2xpbmljIGVuZm9yY2VzIHRoZSBmb2xsb3dpbmcgcnVsZToKKyAgICAgICAgIyAgKiBlaXRoZXIgdGhlIGRvY3N0cmluZyBpcyBlbXB0eSwKKyAgICAgICAgIyAgKiBvciBpdCBtdXN0IGhhdmUgYSBzdW1tYXJ5IGxpbmUuCisgICAgICAgICMKKyAgICAgICAgIyBHdWlkbyBzYWlkIENsaW5pYyBzaG91bGQgZW5mb3JjZSB0aGlzOgorICAgICAgICAjIGh0dHA6Ly9tYWlsLnB5dGhvbi5vcmcvcGlwZXJtYWlsL3B5dGhvbi1kZXYvMjAxMy1KdW5lLzEyNzExMC5odG1sCisKKyAgICAgICAgaWYgbGVuKGxpbmVzKSA+PSAyOgorICAgICAgICAgICAgaWYgbGluZXNbMV06CisgICAgICAgICAgICAgICAgZmFpbCgiRG9jc3RyaW5nIGZvciAiICsgZi5mdWxsX25hbWUgKyAiIGRvZXMgbm90IGhhdmUgYSBzdW1tYXJ5IGxpbmUhXG4iICsKKyAgICAgICAgICAgICAgICAgICAgIkV2ZXJ5IG5vbi1ibGFuayBmdW5jdGlvbiBkb2NzdHJpbmcgbXVzdCBzdGFydCB3aXRoXG4iICsKKyAgICAgICAgICAgICAgICAgICAgImEgc2luZ2xlIGxpbmUgc3VtbWFyeSBmb2xsb3dlZCBieSBhbiBlbXB0eSBsaW5lLiIpCisgICAgICAgIGVsaWYgbGVuKGxpbmVzKSA9PSAxOgorICAgICAgICAgICAgIyB0aGUgZG9jc3RyaW5nIGlzIG9ubHkgb25lIGxpbmUgcmlnaHQgbm93LS10aGUgc3VtbWFyeSBsaW5lLgorICAgICAgICAgICAgIyBhZGQgYW4gZW1wdHkgbGluZSBhZnRlciB0aGUgc3VtbWFyeSBsaW5lIHNvIHdlIGhhdmUgc3BhY2UKKyAgICAgICAgICAgICMgYmV0d2VlbiBpdCBhbmQgdGhlIHtwYXJhbWV0ZXJzfSB3ZSdyZSBhYm91dCB0byBhZGQuCisgICAgICAgICAgICBsaW5lcy5hcHBlbmQoJycpCisKKyAgICAgICAgcGFyYW1ldGVyc19tYXJrZXJfY291bnQgPSBsZW4oZG9jc3RyaW5nLnNwbGl0KCd7cGFyYW1ldGVyc30nKSkgLSAxCisgICAgICAgIGlmIHBhcmFtZXRlcnNfbWFya2VyX2NvdW50ID4gMToKKyAgICAgICAgICAgIGZhaWwoJ1lvdSBtYXkgbm90IHNwZWNpZnkge3BhcmFtZXRlcnN9IG1vcmUgdGhhbiBvbmNlIGluIGEgZG9jc3RyaW5nIScpCisKKyAgICAgICAgaWYgbm90IHBhcmFtZXRlcnNfbWFya2VyX2NvdW50OgorICAgICAgICAgICAgIyBpbnNlcnQgYWZ0ZXIgc3VtbWFyeSBsaW5lCisgICAgICAgICAgICBsaW5lcy5pbnNlcnQoMiwgJ3twYXJhbWV0ZXJzfScpCisKKyAgICAgICAgIyBpbnNlcnQgYXQgZnJvbnQgb2YgZG9jc3RyaW5nCisgICAgICAgIGxpbmVzLmluc2VydCgwLCBkb2NzdHJpbmdfZmlyc3RfbGluZSkKKworICAgICAgICBkb2NzdHJpbmcgPSAiXG4iLmpvaW4obGluZXMpCisKKyAgICAgICAgYWRkKGRvY3N0cmluZykKKyAgICAgICAgZG9jc3RyaW5nID0gb3V0cHV0KCkKKworICAgICAgICBkb2NzdHJpbmcgPSBsaW5lYXJfZm9ybWF0KGRvY3N0cmluZywgcGFyYW1ldGVycz1wYXJhbWV0ZXJzKQorICAgICAgICBkb2NzdHJpbmcgPSBkb2NzdHJpbmcucnN0cmlwKCkKKworICAgICAgICByZXR1cm4gZG9jc3RyaW5nCisKKyAgICBkZWYgc3RhdGVfdGVybWluYWwoc2VsZiwgbGluZSk6CisgICAgICAgICIiIgorICAgICAgICBDYWxsZWQgd2hlbiBwcm9jZXNzaW5nIHRoZSBibG9jayBpcyBkb25lLgorICAgICAgICAiIiIKKyAgICAgICAgYXNzZXJ0IG5vdCBsaW5lCisKKyAgICAgICAgaWYgbm90IHNlbGYuZnVuY3Rpb246CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBzZWxmLmtleXdvcmRfb25seToKKyAgICAgICAgICAgIHZhbHVlcyA9IHNlbGYuZnVuY3Rpb24ucGFyYW1ldGVycy52YWx1ZXMoKQorICAgICAgICAgICAgaWYgbm90IHZhbHVlczoKKyAgICAgICAgICAgICAgICBub19wYXJhbWV0ZXJfYWZ0ZXJfc3RhciA9IFRydWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgbGFzdF9wYXJhbWV0ZXIgPSBuZXh0KHJldmVyc2VkKGxpc3QodmFsdWVzKSkpCisgICAgICAgICAgICAgICAgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXIgPSBsYXN0X3BhcmFtZXRlci5raW5kICE9IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWQorICAgICAgICAgICAgaWYgbm9fcGFyYW1ldGVyX2FmdGVyX3N0YXI6CisgICAgICAgICAgICAgICAgZmFpbCgiRnVuY3Rpb24gIiArIHNlbGYuZnVuY3Rpb24ubmFtZSArICIgc3BlY2lmaWVzICcqJyB3aXRob3V0IGFueSBwYXJhbWV0ZXJzIGFmdGVyd2FyZHMuIikKKworICAgICAgICAjIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGZyb20gYWxsIHBhcmFtZXRlciBkb2NzdHJpbmdzCisgICAgICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBzZWxmLmZ1bmN0aW9uLnBhcmFtZXRlcnMuaXRlbXMoKToKKyAgICAgICAgICAgIGlmIG5vdCB2YWx1ZToKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgdmFsdWUuZG9jc3RyaW5nID0gdmFsdWUuZG9jc3RyaW5nLnJzdHJpcCgpCisKKyAgICAgICAgc2VsZi5mdW5jdGlvbi5kb2NzdHJpbmcgPSBzZWxmLmZvcm1hdF9kb2NzdHJpbmcoKQorCisKKworCisjIG1hcHMgc3RyaW5ncyB0byBjYWxsYWJsZXMuCisjIHRoZSBjYWxsYWJsZSBzaG91bGQgcmV0dXJuIGFuIG9iamVjdAorIyB0aGF0IGltcGxlbWVudHMgdGhlIGNsaW5pYyBwYXJzZXIKKyMgaW50ZXJmYWNlIChfX2luaXRfXyBhbmQgcGFyc2UpLgorIworIyBleGFtcGxlIHBhcnNlcnM6CisjICAgImNsaW5pYyIsIGhhbmRsZXMgdGhlIENsaW5pYyBEU0wKKyMgICAicHl0aG9uIiwgaGFuZGxlcyBydW5uaW5nIFB5dGhvbiBjb2RlCisjCitwYXJzZXJzID0geydjbGluaWMnIDogRFNMUGFyc2VyLCAncHl0aG9uJzogUHl0aG9uUGFyc2VyfQorCisKK2NsaW5pYyA9IE5vbmUKKworCitkZWYgbWFpbihhcmd2KToKKyAgICBpbXBvcnQgc3lzCisKKyAgICBpZiBzeXMudmVyc2lvbl9pbmZvLm1ham9yIDwgMyBvciBzeXMudmVyc2lvbl9pbmZvLm1pbm9yIDwgMzoKKyAgICAgICAgc3lzLmV4aXQoIkVycm9yOiBjbGluaWMucHkgcmVxdWlyZXMgUHl0aG9uIDMuMyBvciBncmVhdGVyLiIpCisKKyAgICBpbXBvcnQgYXJncGFyc2UKKyAgICBjbWRsaW5lID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIGNtZGxpbmUuYWRkX2FyZ3VtZW50KCItZiIsICItLWZvcmNlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLW8iLCAiLS1vdXRwdXQiLCB0eXBlPXN0cikKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLXYiLCAiLS12ZXJib3NlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLS1jb252ZXJ0ZXJzIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiLS1tYWtlIiwgYWN0aW9uPSdzdG9yZV90cnVlJykKKyAgICBjbWRsaW5lLmFkZF9hcmd1bWVudCgiZmlsZW5hbWUiLCB0eXBlPXN0ciwgbmFyZ3M9IioiKQorICAgIG5zID0gY21kbGluZS5wYXJzZV9hcmdzKGFyZ3YpCisKKyAgICBpZiBucy5jb252ZXJ0ZXJzOgorICAgICAgICBpZiBucy5maWxlbmFtZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3Qgc3BlY2lmeSAtLWNvbnZlcnRlcnMgYW5kIGEgZmlsZW5hbWUgYXQgdGhlIHNhbWUgdGltZS4iKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgtMSkKKyAgICAgICAgY29udmVydGVycyA9IFtdCisgICAgICAgIHJldHVybl9jb252ZXJ0ZXJzID0gW10KKyAgICAgICAgaWdub3JlZCA9IHNldCgiIiIKKyAgICAgICAgICAgIGFkZF9jX2NvbnZlcnRlcgorICAgICAgICAgICAgYWRkX2NfcmV0dXJuX2NvbnZlcnRlcgorICAgICAgICAgICAgYWRkX2RlZmF1bHRfbGVnYWN5X2NfY29udmVydGVyCisgICAgICAgICAgICBhZGRfbGVnYWN5X2NfY29udmVydGVyCisgICAgICAgICAgICAiIiIuc3RyaXAoKS5zcGxpdCgpKQorICAgICAgICBtb2R1bGUgPSBnbG9iYWxzKCkKKyAgICAgICAgZm9yIG5hbWUgaW4gbW9kdWxlOgorICAgICAgICAgICAgZm9yIHN1ZmZpeCwgaWRzIGluICgKKyAgICAgICAgICAgICAgICAoIl9yZXR1cm5fY29udmVydGVyIiwgcmV0dXJuX2NvbnZlcnRlcnMpLAorICAgICAgICAgICAgICAgICgiX2NvbnZlcnRlciIsIGNvbnZlcnRlcnMpLAorICAgICAgICAgICAgKToKKyAgICAgICAgICAgICAgICBpZiBuYW1lIGluIGlnbm9yZWQ6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgaWYgbmFtZS5lbmRzd2l0aChzdWZmaXgpOgorICAgICAgICAgICAgICAgICAgICBpZHMuYXBwZW5kKChuYW1lLCBuYW1lWzotbGVuKHN1ZmZpeCldKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgcHJpbnQoKQorCisgICAgICAgIHByaW50KCJMZWdhY3kgY29udmVydGVyczoiKQorICAgICAgICBsZWdhY3kgPSBzb3J0ZWQobGVnYWN5X2NvbnZlcnRlcnMpCisgICAgICAgIHByaW50KCcgICAgJyArICcgJy5qb2luKGMgZm9yIGMgaW4gbGVnYWN5IGlmIGNbMF0uaXN1cHBlcigpKSkKKyAgICAgICAgcHJpbnQoJyAgICAnICsgJyAnLmpvaW4oYyBmb3IgYyBpbiBsZWdhY3kgaWYgY1swXS5pc2xvd2VyKCkpKQorICAgICAgICBwcmludCgpCisKKyAgICAgICAgZm9yIHRpdGxlLCBhdHRyaWJ1dGUsIGlkcyBpbiAoCisgICAgICAgICAgICAoIkNvbnZlcnRlcnMiLCAnY29udmVydGVyX2luaXQnLCBjb252ZXJ0ZXJzKSwKKyAgICAgICAgICAgICgiUmV0dXJuIGNvbnZlcnRlcnMiLCAncmV0dXJuX2NvbnZlcnRlcl9pbml0JywgcmV0dXJuX2NvbnZlcnRlcnMpLAorICAgICAgICApOgorICAgICAgICAgICAgcHJpbnQodGl0bGUgKyAiOiIpCisgICAgICAgICAgICBsb25nZXN0ID0gLTEKKyAgICAgICAgICAgIGZvciBuYW1lLCBzaG9ydF9uYW1lIGluIGlkczoKKyAgICAgICAgICAgICAgICBsb25nZXN0ID0gbWF4KGxvbmdlc3QsIGxlbihzaG9ydF9uYW1lKSkKKyAgICAgICAgICAgIGZvciBuYW1lLCBzaG9ydF9uYW1lIGluIHNvcnRlZChpZHMsIGtleT1sYW1iZGEgeDogeFsxXS5sb3dlcigpKToKKyAgICAgICAgICAgICAgICBjbHMgPSBtb2R1bGVbbmFtZV0KKyAgICAgICAgICAgICAgICBjYWxsYWJsZSA9IGdldGF0dHIoY2xzLCBhdHRyaWJ1dGUsIE5vbmUpCisgICAgICAgICAgICAgICAgaWYgbm90IGNhbGxhYmxlOgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IGluc3BlY3Quc2lnbmF0dXJlKGNhbGxhYmxlKQorICAgICAgICAgICAgICAgIHBhcmFtZXRlcnMgPSBbXQorICAgICAgICAgICAgICAgIGZvciBwYXJhbWV0ZXJfbmFtZSwgcGFyYW1ldGVyIGluIHNpZ25hdHVyZS5wYXJhbWV0ZXJzLml0ZW1zKCk6CisgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5raW5kID09IGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBhcmFtZXRlci5kZWZhdWx0ICE9IGluc3BlY3QuUGFyYW1ldGVyLmVtcHR5OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMgPSAne309eyFyfScuZm9ybWF0KHBhcmFtZXRlcl9uYW1lLCBwYXJhbWV0ZXIuZGVmYXVsdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcyA9IHBhcmFtZXRlcl9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLmFwcGVuZChzKQorICAgICAgICAgICAgICAgIHByaW50KCcgICAge30oe30pJy5mb3JtYXQoc2hvcnRfbmFtZSwgJywgJy5qb2luKHBhcmFtZXRlcnMpKSkKKyAgICAgICAgICAgIHByaW50KCkKKyAgICAgICAgcHJpbnQoIkFsbCBjb252ZXJ0ZXJzIGFsc28gYWNjZXB0IChjX2RlZmF1bHQ9Tm9uZSwgcHlfZGVmYXVsdD1Ob25lLCBhbm5vdGF0aW9uPU5vbmUpLiIpCisgICAgICAgIHByaW50KCJBbGwgcmV0dXJuIGNvbnZlcnRlcnMgYWxzbyBhY2NlcHQgKHB5X2RlZmF1bHQ9Tm9uZSkuIikKKyAgICAgICAgc3lzLmV4aXQoMCkKKworICAgIGlmIG5zLm1ha2U6CisgICAgICAgIGlmIG5zLm91dHB1dCBvciBucy5maWxlbmFtZToKKyAgICAgICAgICAgIHByaW50KCJVc2FnZSBlcnJvcjogY2FuJ3QgdXNlIC1vIG9yIGZpbGVuYW1lcyB3aXRoIC0tbWFrZS4iKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgY21kbGluZS5wcmludF91c2FnZSgpCisgICAgICAgICAgICBzeXMuZXhpdCgtMSkKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsoJy4nKToKKyAgICAgICAgICAgIGZvciByY3NfZGlyIGluICgnLnN2bicsICcuZ2l0JywgJy5oZycsICdidWlsZCcsICdleHRlcm5hbHMnKToKKyAgICAgICAgICAgICAgICBpZiByY3NfZGlyIGluIGRpcnM6CisgICAgICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKHJjc19kaXIpCisgICAgICAgICAgICBmb3IgZmlsZW5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgaWYgbm90IChmaWxlbmFtZS5lbmRzd2l0aCgnLmMnKSBvciBmaWxlbmFtZS5lbmRzd2l0aCgnLmgnKSk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbihyb290LCBmaWxlbmFtZSkKKyAgICAgICAgICAgICAgICBpZiBucy52ZXJib3NlOgorICAgICAgICAgICAgICAgICAgICBwcmludChwYXRoKQorICAgICAgICAgICAgICAgIHBhcnNlX2ZpbGUocGF0aCwgZm9yY2U9bnMuZm9yY2UsIHZlcmlmeT1ub3QgbnMuZm9yY2UpCisgICAgICAgIHJldHVybgorCisgICAgaWYgbm90IG5zLmZpbGVuYW1lOgorICAgICAgICBjbWRsaW5lLnByaW50X3VzYWdlKCkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKKyAgICBpZiBucy5vdXRwdXQgYW5kIGxlbihucy5maWxlbmFtZSkgPiAxOgorICAgICAgICBwcmludCgiVXNhZ2UgZXJyb3I6IGNhbid0IHVzZSAtbyB3aXRoIG11bHRpcGxlIGZpbGVuYW1lcy4iKQorICAgICAgICBwcmludCgpCisgICAgICAgIGNtZGxpbmUucHJpbnRfdXNhZ2UoKQorICAgICAgICBzeXMuZXhpdCgtMSkKKworICAgIGZvciBmaWxlbmFtZSBpbiBucy5maWxlbmFtZToKKyAgICAgICAgaWYgbnMudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KGZpbGVuYW1lKQorICAgICAgICBwYXJzZV9maWxlKGZpbGVuYW1lLCBvdXRwdXQ9bnMub3V0cHV0LCBmb3JjZT1ucy5mb3JjZSwgdmVyaWZ5PW5vdCBucy5mb3JjZSkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHN5cy5leGl0KG1haW4oc3lzLmFyZ3ZbMTpdKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weSBiL1Rvb2xzL2NsaW5pYy9jbGluaWNfdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDIxMDAwCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvY2xpbmljL2NsaW5pY190ZXN0LnB5CkBAIC0wLDAgKzEsODAxIEBACisjIEFyZ3VtZW50IENsaW5pYworIyBDb3B5cmlnaHQgMjAxMi0yMDEzIGJ5IExhcnJ5IEhhc3RpbmdzLgorIyBMaWNlbnNlZCB0byB0aGUgUFNGIHVuZGVyIGEgY29udHJpYnV0b3IgYWdyZWVtZW50LgorIworCitpbXBvcnQgYnVpbHRpbnMKK2ltcG9ydCBjbGluaWMKK2Zyb20gY2xpbmljIGltcG9ydCBEU0xQYXJzZXIKK2ltcG9ydCBjb2xsZWN0aW9ucworaW1wb3J0IGluc3BlY3QKK2Zyb20gdGVzdCBpbXBvcnQgc3VwcG9ydAoraW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0Citmcm9tIHVuaXR0ZXN0IGltcG9ydCBUZXN0Q2FzZQorCisKK2NsYXNzIEZha2VDb252ZXJ0ZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG5hbWUsIGFyZ3MpOgorICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCisgICAgICAgIHNlbGYuYXJncyA9IGFyZ3MKKworCitjbGFzcyBGYWtlQ29udmVydGVyRmFjdG9yeToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZSk6CisgICAgICAgIHNlbGYubmFtZSA9IG5hbWUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBuYW1lLCBkZWZhdWx0LCAqKmt3YXJncyk6CisgICAgICAgIHJldHVybiBGYWtlQ29udmVydGVyKHNlbGYubmFtZSwga3dhcmdzKQorCisKK2NsYXNzIEZha2VDb252ZXJ0ZXJzRGljdDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYudXNlZF9jb252ZXJ0ZXJzID0ge30KKworICAgIGRlZiBnZXQoc2VsZiwgbmFtZSwgZGVmYXVsdCk6CisgICAgICAgIHJldHVybiBzZWxmLnVzZWRfY29udmVydGVycy5zZXRkZWZhdWx0KG5hbWUsIEZha2VDb252ZXJ0ZXJGYWN0b3J5KG5hbWUpKQorCitjbGluaWMuQ2xpbmljLnByZXNldHNfdGV4dCA9ICcnCitjID0gY2xpbmljLkNsaW5pYyhsYW5ndWFnZT0nQycpCisKK2NsYXNzIEZha2VDbGluaWM6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNvbnZlcnRlcnMgPSBGYWtlQ29udmVydGVyc0RpY3QoKQorICAgICAgICBzZWxmLmxlZ2FjeV9jb252ZXJ0ZXJzID0gRmFrZUNvbnZlcnRlcnNEaWN0KCkKKyAgICAgICAgc2VsZi5sYW5ndWFnZSA9IGNsaW5pYy5DTGFuZ3VhZ2UoTm9uZSkKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IE5vbmUKKyAgICAgICAgc2VsZi5ibG9ja19wYXJzZXIgPSBjbGluaWMuQmxvY2tQYXJzZXIoJycsIHNlbGYubGFuZ3VhZ2UpCisgICAgICAgIHNlbGYubW9kdWxlcyA9IGNvbGxlY3Rpb25zLk9yZGVyZWREaWN0KCkKKyAgICAgICAgc2VsZi5jbGFzc2VzID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKQorICAgICAgICBjbGluaWMuY2xpbmljID0gc2VsZgorICAgICAgICBzZWxmLm5hbWUgPSAiRmFrZUNsaW5pYyIKKyAgICAgICAgc2VsZi5saW5lX3ByZWZpeCA9IHNlbGYubGluZV9zdWZmaXggPSAnJworICAgICAgICBzZWxmLmRlc3RpbmF0aW9ucyA9IHt9CisgICAgICAgIHNlbGYuYWRkX2Rlc3RpbmF0aW9uKCJibG9jayIsICJidWZmZXIiKQorICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigiZmlsZSIsICJidWZmZXIiKQorICAgICAgICBzZWxmLmFkZF9kZXN0aW5hdGlvbigic3VwcHJlc3MiLCAic3VwcHJlc3MiKQorICAgICAgICBkID0gc2VsZi5kZXN0aW5hdGlvbnMuZ2V0CisgICAgICAgIHNlbGYuZmllbGRfZGVzdGluYXRpb25zID0gY29sbGVjdGlvbnMuT3JkZXJlZERpY3QoKAorICAgICAgICAgICAgKCdkb2NzdHJpbmdfcHJvdG90eXBlJywgZCgnc3VwcHJlc3MnKSksCisgICAgICAgICAgICAoJ2RvY3N0cmluZ19kZWZpbml0aW9uJywgZCgnYmxvY2snKSksCisgICAgICAgICAgICAoJ21ldGhvZGRlZl9kZWZpbmUnLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgnaW1wbF9wcm90b3R5cGUnLCBkKCdibG9jaycpKSwKKyAgICAgICAgICAgICgncGFyc2VyX3Byb3RvdHlwZScsIGQoJ3N1cHByZXNzJykpLAorICAgICAgICAgICAgKCdwYXJzZXJfZGVmaW5pdGlvbicsIGQoJ2Jsb2NrJykpLAorICAgICAgICAgICAgKCdpbXBsX2RlZmluaXRpb24nLCBkKCdibG9jaycpKSwKKyAgICAgICAgKSkKKworICAgIGRlZiBnZXRfZGVzdGluYXRpb24oc2VsZiwgbmFtZSk6CisgICAgICAgIGQgPSBzZWxmLmRlc3RpbmF0aW9ucy5nZXQobmFtZSkKKyAgICAgICAgaWYgbm90IGQ6CisgICAgICAgICAgICBzeXMuZXhpdCgiRGVzdGluYXRpb24gZG9lcyBub3QgZXhpc3Q6ICIgKyByZXByKG5hbWUpKQorICAgICAgICByZXR1cm4gZAorCisgICAgZGVmIGFkZF9kZXN0aW5hdGlvbihzZWxmLCBuYW1lLCB0eXBlLCAqYXJncyk6CisgICAgICAgIGlmIG5hbWUgaW4gc2VsZi5kZXN0aW5hdGlvbnM6CisgICAgICAgICAgICBzeXMuZXhpdCgiRGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHM6ICIgKyByZXByKG5hbWUpKQorICAgICAgICBzZWxmLmRlc3RpbmF0aW9uc1tuYW1lXSA9IGNsaW5pYy5EZXN0aW5hdGlvbihuYW1lLCB0eXBlLCBzZWxmLCAqYXJncykKKworICAgIGRlZiBpc19kaXJlY3RpdmUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lID09ICJtb2R1bGUiCisKKyAgICBkZWYgZGlyZWN0aXZlKHNlbGYsIG5hbWUsIGFyZ3MpOgorICAgICAgICBzZWxmLmNhbGxlZF9kaXJlY3RpdmVzW25hbWVdID0gYXJncworCisgICAgX21vZHVsZV9hbmRfY2xhc3MgPSBjbGluaWMuQ2xpbmljLl9tb2R1bGVfYW5kX2NsYXNzCisKK2NsYXNzIENsaW5pY1dob2xlRmlsZVRlc3QoVGVzdENhc2UpOgorICAgIGRlZiB0ZXN0X2VvbChzZWxmKToKKyAgICAgICAgIyByZWdyZXNzaW9uIHRlc3Q6CisgICAgICAgICMgY2xpbmljJ3MgYmxvY2sgcGFyc2VyIGRpZG4ndCByZWNvZ25pemUKKyAgICAgICAgIyB0aGUgImVuZCBsaW5lIiBmb3IgdGhlIGJsb2NrIGlmIGl0CisgICAgICAgICMgZGlkbid0IGVuZCBpbiAiXG4iIChhcyBpbiwgdGhlIGxhc3QpCisgICAgICAgICMgYnl0ZSBvZiB0aGUgZmlsZSB3YXMgJy8nLgorICAgICAgICAjIHNvIGl0IHdvdWRsIHNwaXQgb3V0IGFuIGVuZCBsaW5lIGZvciB5b3UuCisgICAgICAgICMgYW5kIHNpbmNlIHlvdSByZWFsbHkgYWxyZWFkeSBoYWQgb25lLAorICAgICAgICAjIHRoZSBsYXN0IGxpbmUgb2YgdGhlIGJsb2NrIGdvdCBjb3JydXB0ZWQuCisgICAgICAgIGMgPSBjbGluaWMuQ2xpbmljKGNsaW5pYy5DTGFuZ3VhZ2UoTm9uZSkpCisgICAgICAgIHJhdyA9ICIvKltjbGluaWNdXG5mb29cbltjbGluaWNdKi8iCisgICAgICAgIGNvb2tlZCA9IGMucGFyc2UocmF3KS5zcGxpdGxpbmVzKCkKKyAgICAgICAgZW5kX2xpbmUgPSBjb29rZWRbMl0ucnN0cmlwKCkKKyAgICAgICAgIyB0aGlzIHRlc3QgaXMgcmVkdW5kYW50LCBpdCdzIGp1c3QgaGVyZSBleHBsaWNpdGx5IHRvIGNhdGNoCisgICAgICAgICMgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzbyB3ZSBkb24ndCBmb3JnZXQgd2hhdCBpdCBsb29rZWQgbGlrZQorICAgICAgICBzZWxmLmFzc2VydE5vdEVxdWFsKGVuZF9saW5lLCAiW2NsaW5pY10qL1tjbGluaWNdKi8iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGVuZF9saW5lLCAiW2NsaW5pY10qLyIpCisKKworCitjbGFzcyBDbGluaWNHcm91cFBlcm11dGVyVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIF90ZXN0KHNlbGYsIGwsIG0sIHIsIG91dHB1dCk6CisgICAgICAgIGNvbXB1dGVkID0gY2xpbmljLnBlcm11dGVfb3B0aW9uYWxfZ3JvdXBzKGwsIG0sIHIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwob3V0cHV0LCBjb21wdXRlZCkKKworICAgIGRlZiB0ZXN0X3JhbmdlKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtbJ3N0YXJ0J11dLCBbJ3N0b3AnXSwgW1snc3RlcCddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgICAoJ3N0b3AnLCksCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3N0b3AnLCksCisgICAgICAgICAgICAoJ3N0YXJ0JywgJ3N0b3AnLCAnc3RlcCcsKSwKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfYWRkX3dpbmRvdyhzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdChbWyd4JywgJ3knXV0sIFsnY2gnXSwgW1snYXR0ciddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgICAoJ2NoJywpLAorICAgICAgICAgICAgKCdjaCcsICdhdHRyJyksCisgICAgICAgICAgICAoJ3gnLCAneScsICdjaCcsKSwKKyAgICAgICAgICAgICgneCcsICd5JywgJ2NoJywgJ2F0dHInKSwKKyAgICAgICAgICApKQorCisgICAgZGVmIHRlc3RfbHVkaWNyb3VzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtbJ2ExJywgJ2EyJywgJ2EzJ10sIFsnYjEnLCAnYjInXV0sIFsnYzEnXSwgW1snZDEnLCAnZDInXSwgWydlMScsICdlMicsICdlMyddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgKCdjMScsKSwKKyAgICAgICAgICAoJ2IxJywgJ2IyJywgJ2MxJyksCisgICAgICAgICAgKCdiMScsICdiMicsICdjMScsICdkMScsICdkMicpLAorICAgICAgICAgICgnYTEnLCAnYTInLCAnYTMnLCAnYjEnLCAnYjInLCAnYzEnKSwKKyAgICAgICAgICAoJ2ExJywgJ2EyJywgJ2EzJywgJ2IxJywgJ2IyJywgJ2MxJywgJ2QxJywgJ2QyJyksCisgICAgICAgICAgKCdhMScsICdhMicsICdhMycsICdiMScsICdiMicsICdjMScsICdkMScsICdkMicsICdlMScsICdlMicsICdlMycpLAorICAgICAgICAgICkpCisKKyAgICBkZWYgdGVzdF9yaWdodF9vbmx5KHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KFtdLCBbXSwgW1snYSddLFsnYiddLFsnYyddXSwKKyAgICAgICAgICAoCisgICAgICAgICAgKCksCisgICAgICAgICAgKCdhJywpLAorICAgICAgICAgICgnYScsICdiJyksCisgICAgICAgICAgKCdhJywgJ2InLCAnYycpCisgICAgICAgICAgKSkKKworICAgIGRlZiB0ZXN0X2hhdmVfbGVmdF9vcHRpb25zX2J1dF9yZXF1aXJlZF9pc19lbXB0eShzZWxmKToKKyAgICAgICAgZGVmIGZuKCk6CisgICAgICAgICAgICBjbGluaWMucGVybXV0ZV9vcHRpb25hbF9ncm91cHMoWydhJ10sIFtdLCBbXSkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoQXNzZXJ0aW9uRXJyb3IsIGZuKQorCisKK2NsYXNzIENsaW5pY0xpbmVhckZvcm1hdFRlc3QoVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCBpbnB1dCwgb3V0cHV0LCAqKmt3YXJncyk6CisgICAgICAgIGNvbXB1dGVkID0gY2xpbmljLmxpbmVhcl9mb3JtYXQoaW5wdXQsICoqa3dhcmdzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKG91dHB1dCwgY29tcHV0ZWQpCisKKyAgICBkZWYgdGVzdF9lbXB0eV9zdHJpbmdzKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCcnLCAnJykKKworICAgIGRlZiB0ZXN0X3NvbG9fbmV3bGluZShzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgnXG4nLCAnXG4nKQorCisgICAgZGVmIHRlc3Rfbm9fc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZW1wdHlfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIHtuYW1lfQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCBuYW1lPScnKQorCisgICAgZGVmIHRlc3Rfc2luZ2xlX2xpbmVfc3Vic3RpdHV0aW9uKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0KCIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIHtuYW1lfQorICAgICAgICAgIGRlZgorICAgICAgICAgICIiIiwgIiIiCisgICAgICAgICAgYWJjCisgICAgICAgICAgR0FSR0xFCisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCBuYW1lPSdHQVJHTEUnKQorCisgICAgZGVmIHRlc3RfbXVsdGlsaW5lX3N1YnN0aXR1dGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5fdGVzdCgiIiIKKyAgICAgICAgICBhYmMKKyAgICAgICAgICB7bmFtZX0KKyAgICAgICAgICBkZWYKKyAgICAgICAgICAiIiIsICIiIgorICAgICAgICAgIGFiYworICAgICAgICAgIGJpbmdsZQorICAgICAgICAgIGJ1bmdsZQorCisgICAgICAgICAgZGVmCisgICAgICAgICAgIiIiLCBuYW1lPSdiaW5nbGVcbmJ1bmdsZVxuJykKKworY2xhc3MgSW5lcnRQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNsaW5pYyk6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBwYXJzZShzZWxmLCBibG9jayk6CisgICAgICAgIHBhc3MKKworY2xhc3MgQ29weVBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY2xpbmljKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGJsb2NrKToKKyAgICAgICAgYmxvY2sub3V0cHV0ID0gYmxvY2suaW5wdXQKKworCitjbGFzcyBDbGluaWNCbG9ja1BhcnNlclRlc3QoVGVzdENhc2UpOgorICAgIGRlZiBfdGVzdChzZWxmLCBpbnB1dCwgb3V0cHV0KToKKyAgICAgICAgbGFuZ3VhZ2UgPSBjbGluaWMuQ0xhbmd1YWdlKE5vbmUpCisKKyAgICAgICAgYmxvY2tzID0gbGlzdChjbGluaWMuQmxvY2tQYXJzZXIoaW5wdXQsIGxhbmd1YWdlKSkKKyAgICAgICAgd3JpdGVyID0gY2xpbmljLkJsb2NrUHJpbnRlcihsYW5ndWFnZSkKKyAgICAgICAgZm9yIGJsb2NrIGluIGJsb2NrczoKKyAgICAgICAgICAgIHdyaXRlci5wcmludF9ibG9jayhibG9jaykKKyAgICAgICAgb3V0cHV0ID0gd3JpdGVyLmYuZ2V0dmFsdWUoKQorICAgICAgICBhc3NlcnQgb3V0cHV0ID09IGlucHV0LCAib3V0cHV0ICE9IGlucHV0IVxuXG5vdXRwdXQgIiArIHJlcHIob3V0cHV0KSArICJcblxuIGlucHV0ICIgKyByZXByKGlucHV0KQorCisgICAgZGVmIHJvdW5kX3RyaXAoc2VsZiwgaW5wdXQpOgorICAgICAgICByZXR1cm4gc2VsZi5fdGVzdChpbnB1dCwgaW5wdXQpCisKKyAgICBkZWYgdGVzdF9yb3VuZF90cmlwXzEoc2VsZik6CisgICAgICAgIHNlbGYucm91bmRfdHJpcCgiIiIKKyAgICB2ZXJiYXRpbSB0ZXh0IGhlcmUKKyAgICBsYWggZGVlIGRhaAorIiIiKQorICAgIGRlZiB0ZXN0X3JvdW5kX3RyaXBfMihzZWxmKToKKyAgICAgICAgc2VsZi5yb3VuZF90cmlwKCIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltpbmVydF0KK2FiYworW2luZXJ0XSovCitkZWYKKy8qW2luZXJ0IGNoZWNrc3VtOiA3YjE4ZDAxN2Y4OWY2MWNmMTdkNDdmOTI3NDllYTY5MzBhM2YxZGViXSovCit4eXoKKyIiIikKKworICAgIGRlZiBfdGVzdF9jbGluaWMoc2VsZiwgaW5wdXQsIG91dHB1dCk6CisgICAgICAgIGxhbmd1YWdlID0gY2xpbmljLkNMYW5ndWFnZShOb25lKQorICAgICAgICBjID0gY2xpbmljLkNsaW5pYyhsYW5ndWFnZSkKKyAgICAgICAgYy5wYXJzZXJzWydpbmVydCddID0gSW5lcnRQYXJzZXIoYykKKyAgICAgICAgYy5wYXJzZXJzWydjb3B5J10gPSBDb3B5UGFyc2VyKGMpCisgICAgICAgIGNvbXB1dGVkID0gYy5wYXJzZShpbnB1dCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChvdXRwdXQsIGNvbXB1dGVkKQorCisgICAgZGVmIHRlc3RfY2xpbmljXzEoc2VsZik6CisgICAgICAgIHNlbGYuX3Rlc3RfY2xpbmljKCIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltjb3B5IGlucHV0XQorZGVmCitbY29weSBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworYWJjCisvKltjb3B5IGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTAzY2ZkNzQzNjYxZjA3OTcgaW5wdXQ9N2IxOGQwMTdmODlmNjFjZl0qLworeHl6CisiIiIsICIiIgorICAgIHZlcmJhdGltIHRleHQgaGVyZQorICAgIGxhaCBkZWUgZGFoCisvKltjb3B5IGlucHV0XQorZGVmCitbY29weSBzdGFydCBnZW5lcmF0ZWQgY29kZV0qLworZGVmCisvKltjb3B5IGVuZCBnZW5lcmF0ZWQgY29kZTogb3V0cHV0PTdiMThkMDE3Zjg5ZjYxY2YgaW5wdXQ9N2IxOGQwMTdmODlmNjFjZl0qLworeHl6CisiIiIpCisKKworY2xhc3MgQ2xpbmljUGFyc2VyVGVzdChUZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfdHJpdmlhbChzZWxmKToKKyAgICAgICAgcGFyc2VyID0gRFNMUGFyc2VyKEZha2VDbGluaWMoKSkKKyAgICAgICAgYmxvY2sgPSBjbGluaWMuQmxvY2soIm1vZHVsZSBvc1xub3MuYWNjZXNzIikKKyAgICAgICAgcGFyc2VyLnBhcnNlKGJsb2NrKQorICAgICAgICBtb2R1bGUsIGZ1bmN0aW9uID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhY2Nlc3MiLCBmdW5jdGlvbi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvcyIsIG1vZHVsZS5uYW1lKQorCisgICAgZGVmIHRlc3RfaWdub3JlX2xpbmUoc2VsZik6CisgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZSgiI1xubW9kdWxlIG9zXG5vcy5hY2Nlc3MiKQorICAgICAgICBtb2R1bGUsIGZ1bmN0aW9uID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJhY2Nlc3MiLCBmdW5jdGlvbi5uYW1lKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJvcyIsIG1vZHVsZS5uYW1lKQorCisgICAgZGVmIHRlc3RfcGFyYW0oc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgIHBhdGg6IGludCIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoImFjY2VzcyIsIGZ1bmN0aW9uLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMiwgbGVuKGZ1bmN0aW9uLnBhcmFtZXRlcnMpKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ3BhdGgnLCBwLm5hbWUpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShwLmNvbnZlcnRlciwgY2xpbmljLmludF9jb252ZXJ0ZXIpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9kZWZhdWx0KHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIm1vZHVsZSBvc1xub3MuYWNjZXNzXG4gICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKFRydWUsIHAuZGVmYXVsdCkKKworICAgIGRlZiB0ZXN0X3BhcmFtX3dpdGhfY29udGludWF0aW9ucyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIGZvbGxvd19zeW1saW5rczogXFxcbiAgIGJvb2wgXFxcbiAgID1cXFxuICAgIFRydWUiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChUcnVlLCBwLmRlZmF1bHQpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9kZWZhdWx0X2V4cHJlc3Npb24oc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBmb2xsb3dfc3ltbGlua3M6IGludChjX2RlZmF1bHQ9J01BWFNJWkUnKSA9IHN5cy5tYXhzaXplIikKKyAgICAgICAgcCA9IGZ1bmN0aW9uLnBhcmFtZXRlcnNbJ2ZvbGxvd19zeW1saW5rcyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3lzLm1heHNpemUsIHAuZGVmYXVsdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiTUFYU0laRSIsIHAuY29udmVydGVyLmNfZGVmYXVsdCkKKworICAgICAgICBzID0gc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICBmb2xsb3dfc3ltbGlua3M6IGludCA9IHN5cy5tYXhzaXplIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLCAiRXJyb3Igb24gbGluZSAwOlxuV2hlbiB5b3Ugc3BlY2lmeSBhIG5hbWVkIGNvbnN0YW50ICgnc3lzLm1heHNpemUnKSBhcyB5b3VyIGRlZmF1bHQgdmFsdWUsXG55b3UgTVVTVCBzcGVjaWZ5IGEgdmFsaWQgY19kZWZhdWx0LlxuIikKKworICAgIGRlZiB0ZXN0X3BhcmFtX25vX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5hY2Nlc3MKKyAgICBmb2xsb3dfc3ltbGlua3M6IGJvb2wgPSBUcnVlCisgICAgc29tZXRoaW5nX2Vsc2U6IHN0ciA9ICcnIiIiKQorICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1snZm9sbG93X3N5bWxpbmtzJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgzLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZShmdW5jdGlvbi5wYXJhbWV0ZXJzWydzb21ldGhpbmdfZWxzZSddLmNvbnZlcnRlciwgY2xpbmljLnN0cl9jb252ZXJ0ZXIpCisKKyAgICBkZWYgdGVzdF9wYXJhbV9kZWZhdWx0X3BhcmFtZXRlcnNfb3V0X29mX29yZGVyKHNlbGYpOgorICAgICAgICBzID0gc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBvcworb3MuYWNjZXNzCisgICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZQorICAgIHNvbWV0aGluZ19lbHNlOiBzdHIiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocywgIiIiRXJyb3Igb24gbGluZSAwOgorQ2FuJ3QgaGF2ZSBhIHBhcmFtZXRlciB3aXRob3V0IGEgZGVmYXVsdCAoJ3NvbWV0aGluZ19lbHNlJykKK2FmdGVyIGEgcGFyYW1ldGVyIHdpdGggYSBkZWZhdWx0IQorIiIiKQorCisgICAgZGVmIGRpc2FibGVkX3Rlc3RfY29udmVydGVyX2FyZ3VtZW50cyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLmFjY2Vzc1xuICAgIHBhdGg6IHBhdGhfdChhbGxvd19mZD0xKSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydwYXRoJ10KKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBwLmNvbnZlcnRlci5hcmdzWydhbGxvd19mZCddKQorCisgICAgZGVmIHRlc3RfZnVuY3Rpb25fZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLnN0YXQgYXMgb3Nfc3RhdF9mbgorCisgICBwYXRoOiBzdHIKKyAgICAgICBQYXRoIHRvIGJlIGV4YW1pbmVkCisKK1BlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLiIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiIKK3N0YXQoJG1vZHVsZSwgLywgcGF0aCkKKy0tCisKK1BlcmZvcm0gYSBzdGF0IHN5c3RlbSBjYWxsIG9uIHRoZSBnaXZlbiBwYXRoLgorCisgIHBhdGgKKyAgICBQYXRoIHRvIGJlIGV4YW1pbmVkCisiIiIuc3RyaXAoKSwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfZXhwbGljaXRfcGFyYW1ldGVyc19pbl9kb2NzdHJpbmcoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgeDogaW50CisgICAgIERvY3VtZW50YXRpb24gZm9yIHguCisgIHk6IGludAorCitUaGlzIGlzIHRoZSBkb2N1bWVudGF0aW9uIGZvciBmb28uCisKK09rYXksIHdlJ3JlIGRvbmUgaGVyZS4KKyIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgiIiIKK2JhcigkbW9kdWxlLCAvLCB4LCB5KQorLS0KKworVGhpcyBpcyB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZm9vLgorCisgIHgKKyAgICBEb2N1bWVudGF0aW9uIGZvciB4LgorCitPa2F5LCB3ZSdyZSBkb25lIGhlcmUuCisiIiIuc3RyaXAoKSwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfcGFyc2VyX3JlZ3Jlc3Npb25fc3BlY2lhbF9jaGFyYWN0ZXJfaW5fcGFyYW1ldGVyX2NvbHVtbl9vZl9kb2NzdHJpbmdfZmlyc3RfbGluZShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIG9zCitvcy5zdGF0CisgICAgcGF0aDogc3RyCitUaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljIQorIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJzdGF0KCRtb2R1bGUsIC8sIHBhdGgpXG4tLVxuXG5UaGlzL3VzZWQgdG8gYnJlYWsgQ2xpbmljISIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKworICAgIGRlZiB0ZXN0X2NfbmFtZShzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLnN0YXQgYXMgb3Nfc3RhdF9mbiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIm9zX3N0YXRfZm4iLCBmdW5jdGlvbi5jX2Jhc2VuYW1lKQorCisgICAgZGVmIHRlc3RfcmV0dXJuX2NvbnZlcnRlcihzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgb3Ncbm9zLnN0YXQgLT4gaW50IikKKyAgICAgICAgc2VsZi5hc3NlcnRJc0luc3RhbmNlKGZ1bmN0aW9uLnJldHVybl9jb252ZXJ0ZXIsIGNsaW5pYy5pbnRfcmV0dXJuX2NvbnZlcnRlcikKKworICAgIGRlZiB0ZXN0X3N0YXIoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigibW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgICAqXG4gICAgZm9sbG93X3N5bWxpbmtzOiBib29sID0gVHJ1ZSIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydmb2xsb3dfc3ltbGlua3MnXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGluc3BlY3QuUGFyYW1ldGVyLktFWVdPUkRfT05MWSwgcC5raW5kKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKDAsIHAuZ3JvdXApCisKKyAgICBkZWYgdGVzdF9ncm91cChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCJtb2R1bGUgd2luZG93XG53aW5kb3cuYm9yZGVyXG4gW1xuIGxzIDogaW50XG4gXVxuIC9cbiIpCisgICAgICAgIHAgPSBmdW5jdGlvbi5wYXJhbWV0ZXJzWydscyddCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoMSwgcC5ncm91cCkKKworICAgIGRlZiB0ZXN0X2xlZnRfZ3JvdXAoc2VsZik6CisgICAgICAgIGZ1bmN0aW9uID0gc2VsZi5wYXJzZV9mdW5jdGlvbigiIiIKK21vZHVsZSBjdXJzZXMKK2N1cnNlcy5hZGRjaAorICAgWworICAgeTogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIHg6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICBdCisgICBjaDogY2hhcgorICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICAgWworICAgYXR0cjogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgXQorICAgLworIiIiKQorICAgICAgICBmb3IgbmFtZSwgZ3JvdXAgaW4gKAorICAgICAgICAgICAgKCd5JywgLTEpLCAoJ3gnLCAtMSksCisgICAgICAgICAgICAoJ2NoJywgMCksCisgICAgICAgICAgICAoJ2F0dHInLCAxKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdyb3VwLCBncm91cCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5raW5kLCBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoZnVuY3Rpb24uZG9jc3RyaW5nLnN0cmlwKCksICIiIgorYWRkY2goW3ksIHgsXSBjaCwgW2F0dHJdKQorCisKKyAgeQorICAgIFktY29vcmRpbmF0ZS4KKyAgeAorICAgIFgtY29vcmRpbmF0ZS4KKyAgY2gKKyAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICBhdHRyCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgICAgICAgICAgICIiIi5zdHJpcCgpKQorCisgICAgZGVmIHRlc3RfbmVzdGVkX2dyb3VwcyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGN1cnNlcworY3Vyc2VzLmltYWdpbmFyeQorICAgWworICAgWworICAgeTE6IGludAorICAgICBZLWNvb3JkaW5hdGUuCisgICB5MjogaW50CisgICAgIFktY29vcmRpbmF0ZS4KKyAgIF0KKyAgIHgxOiBpbnQKKyAgICAgWC1jb29yZGluYXRlLgorICAgeDI6IGludAorICAgICBYLWNvb3JkaW5hdGUuCisgICBdCisgICBjaDogY2hhcgorICAgICBDaGFyYWN0ZXIgdG8gYWRkLgorICAgWworICAgYXR0cjE6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHIyOiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyMzogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgWworICAgYXR0cjQ6IGxvbmcKKyAgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgIGF0dHI1OiBsb25nCisgICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICBhdHRyNjogbG9uZworICAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICAgXQorICAgXQorICAgLworIiIiKQorICAgICAgICBmb3IgbmFtZSwgZ3JvdXAgaW4gKAorICAgICAgICAgICAgKCd5MScsIC0yKSwgKCd5MicsIC0yKSwKKyAgICAgICAgICAgICgneDEnLCAtMSksICgneDInLCAtMSksCisgICAgICAgICAgICAoJ2NoJywgMCksCisgICAgICAgICAgICAoJ2F0dHIxJywgMSksICgnYXR0cjInLCAxKSwgKCdhdHRyMycsIDEpLAorICAgICAgICAgICAgKCdhdHRyNCcsIDIpLCAoJ2F0dHI1JywgMiksICgnYXR0cjYnLCAyKSwKKyAgICAgICAgICAgICk6CisgICAgICAgICAgICBwID0gZnVuY3Rpb24ucGFyYW1ldGVyc1tuYW1lXQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChwLmdyb3VwLCBncm91cCkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocC5raW5kLCBpbnNwZWN0LlBhcmFtZXRlci5QT1NJVElPTkFMX09OTFkpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmdW5jdGlvbi5kb2NzdHJpbmcuc3RyaXAoKSwgIiIiCitpbWFnaW5hcnkoW1t5MSwgeTIsXSB4MSwgeDIsXSBjaCwgW2F0dHIxLCBhdHRyMiwgYXR0cjMsIFthdHRyNCwgYXR0cjUsCisgICAgICAgICAgYXR0cjZdXSkKKworCisgIHkxCisgICAgWS1jb29yZGluYXRlLgorICB5MgorICAgIFktY29vcmRpbmF0ZS4KKyAgeDEKKyAgICBYLWNvb3JkaW5hdGUuCisgIHgyCisgICAgWC1jb29yZGluYXRlLgorICBjaAorICAgIENoYXJhY3RlciB0byBhZGQuCisgIGF0dHIxCisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjIKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyMworICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgIGF0dHI0CisgICAgQXR0cmlidXRlcyBmb3IgdGhlIGNoYXJhY3Rlci4KKyAgYXR0cjUKKyAgICBBdHRyaWJ1dGVzIGZvciB0aGUgY2hhcmFjdGVyLgorICBhdHRyNgorICAgIEF0dHJpYnV0ZXMgZm9yIHRoZSBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgICAgIiIiLnN0cmlwKCkpCisKKyAgICBkZWYgcGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoc2VsZiwgcyk6CisgICAgICAgIHdpdGggc3VwcG9ydC5jYXB0dXJlZF9zdGRvdXQoKSBhcyBzdGRvdXQ6CisgICAgICAgICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFN5c3RlbUV4aXQpOgorICAgICAgICAgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb24ocykKKyAgICAgICAgcmV0dXJuIHN0ZG91dC5nZXR2YWx1ZSgpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX190d29fdG9wX2dyb3Vwc19vbl9sZWZ0KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby50d29fdG9wX2dyb3Vwc19vbl9sZWZ0CisgICAgWworICAgIGdyb3VwMSA6IGludAorICAgIF0KKyAgICBbCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgIHBhcmFtOiBpbnQKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChzLAorICAgICAgICAgICAgKCdFcnJvciBvbiBsaW5lIDA6XG4nCisgICAgICAgICAgICAnRnVuY3Rpb24gdHdvX3RvcF9ncm91cHNfb25fbGVmdCBoYXMgYW4gdW5zdXBwb3J0ZWQgZ3JvdXAgY29uZmlndXJhdGlvbi4gKFVuZXhwZWN0ZWQgc3RhdGUgMi5iKVxuJykpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX190d29fdG9wX2dyb3Vwc19vbl9yaWdodChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby50d29fdG9wX2dyb3Vwc19vbl9yaWdodAorICAgIHBhcmFtOiBpbnQKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIFsKKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgICAgICAgICAiIiIpCisKKyAgICBkZWYgdGVzdF9kaXNhbGxvd2VkX2dyb3VwaW5nX19wYXJhbWV0ZXJfYWZ0ZXJfZ3JvdXBfb25fcmlnaHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28ucGFyYW1ldGVyX2FmdGVyX2dyb3VwX29uX3JpZ2h0CisgICAgcGFyYW06IGludAorICAgIFsKKyAgICBbCisgICAgZ3JvdXAxIDogaW50CisgICAgXQorICAgIGdyb3VwMiA6IGludAorICAgIF0KKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX2dyb3VwX2FmdGVyX3BhcmFtZXRlcl9vbl9sZWZ0KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmdyb3VwX2FmdGVyX3BhcmFtZXRlcl9vbl9sZWZ0CisgICAgWworICAgIGdyb3VwMiA6IGludAorICAgIFsKKyAgICBncm91cDEgOiBpbnQKKyAgICBdCisgICAgXQorICAgIHBhcmFtOiBpbnQKKyAgICAgICAgICAgICIiIikKKworICAgIGRlZiB0ZXN0X2Rpc2FsbG93ZWRfZ3JvdXBpbmdfX2VtcHR5X2dyb3VwX29uX2xlZnQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uZW1wdHlfZ3JvdXAKKyAgICBbCisgICAgWworICAgIF0KKyAgICBncm91cDIgOiBpbnQKKyAgICBdCisgICAgcGFyYW06IGludAorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3RfZGlzYWxsb3dlZF9ncm91cGluZ19fZW1wdHlfZ3JvdXBfb25fcmlnaHQoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uZW1wdHlfZ3JvdXAKKyAgICBwYXJhbTogaW50CisgICAgWworICAgIFsKKyAgICBdCisgICAgZ3JvdXAyIDogaW50CisgICAgXQorICAgICAgICAgICAgIiIiKQorCisgICAgZGVmIHRlc3Rfbm9fcGFyYW1ldGVycyhzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorCitEb2NzdHJpbmcKKworIiIiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCJiYXIoJG1vZHVsZSwgLylcbi0tXG5cbkRvY3N0cmluZyIsIGZ1bmN0aW9uLmRvY3N0cmluZykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpICMgc2VsZiEKKworICAgIGRlZiB0ZXN0X2luaXRfd2l0aF9ub19wYXJhbWV0ZXJzKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgZm9vCitjbGFzcyBmb28uQmFyICJ1bnVzZWQiICJub3RuZWVkZWQiCitmb28uQmFyLl9faW5pdF9fCisKK0RvY3N0cmluZworCisiIiIsIHNpZ25hdHVyZXNfaW5fYmxvY2s9MywgZnVuY3Rpb25faW5kZXg9MikKKyAgICAgICAgIyBzZWxmIGlzIG5vdCBpbiB0aGUgc2lnbmF0dXJlCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIkJhcigpXG4tLVxuXG5Eb2NzdHJpbmciLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisgICAgICAgICMgYnV0IGl0ICppcyogYSBwYXJhbWV0ZXIKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgxLCBsZW4oZnVuY3Rpb24ucGFyYW1ldGVycykpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX21vZHVsZV9saW5lKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhciA9PiBpbnQKKyAgICAvCisiIiIpCisKKyAgICBkZWYgdGVzdF9pbGxlZ2FsX2NfYmFzZW5hbWUoc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyIGFzIDkzNQorICAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X3NpbmdsZV9zdGFyKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgICoKKyAgICAqCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aG91dF9pbml0aWFsX3BhcmFtZXRlcnNfb3JfZG9jc3RyaW5nKHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgICoKKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRob3V0X2luaXRpYWxfcGFyYW1ldGVyc193aXRoX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICAqCitEb2NzdHJpbmcgaGVyZS4KKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfcmVxdWlyZWRfYWZ0ZXJfc3Rhcl93aXRoX2luaXRpYWxfcGFyYW1ldGVyc193aXRob3V0X2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICB0aGlzOiBpbnQKKyAgICAqCisiIiIpCisKKyAgICBkZWYgdGVzdF9wYXJhbWV0ZXJzX3JlcXVpcmVkX2FmdGVyX3N0YXJfd2l0aF9pbml0aWFsX3BhcmFtZXRlcnNfYW5kX2RvY3N0cmluZyhzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgICB0aGlzOiBpbnQKKyAgICAqCitEb2NzdHJpbmcuCisiIiIpCisKKyAgICBkZWYgdGVzdF9zaW5nbGVfc2xhc2goc2VsZik6CisgICAgICAgIHNlbGYucGFyc2VfZnVuY3Rpb25fc2hvdWxkX2ZhaWwoIiIiCittb2R1bGUgZm9vCitmb28uYmFyCisgICAgLworICAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X21peF9zdGFyX2FuZF9zbGFzaChzZWxmKToKKyAgICAgICAgc2VsZi5wYXJzZV9mdW5jdGlvbl9zaG91bGRfZmFpbCgiIiIKK21vZHVsZSBmb28KK2Zvby5iYXIKKyAgIHg6IGludAorICAgeTogaW50CisgICAqCisgICB6OiBpbnQKKyAgIC8KKyIiIikKKworICAgIGRlZiB0ZXN0X3BhcmFtZXRlcnNfbm90X3Blcm1pdHRlZF9hZnRlcl9zbGFzaF9mb3Jfbm93KHNlbGYpOgorICAgICAgICBzZWxmLnBhcnNlX2Z1bmN0aW9uX3Nob3VsZF9mYWlsKCIiIgorbW9kdWxlIGZvbworZm9vLmJhcgorICAgIC8KKyAgICB4OiBpbnQKKyIiIikKKworICAgIGRlZiB0ZXN0X2Z1bmN0aW9uX25vdF9hdF9jb2x1bW5fMChzZWxmKToKKyAgICAgICAgZnVuY3Rpb24gPSBzZWxmLnBhcnNlX2Z1bmN0aW9uKCIiIgorICBtb2R1bGUgZm9vCisgIGZvby5iYXIKKyAgICB4OiBpbnQKKyAgICAgIE5lc3RlZCBkb2NzdHJpbmcgaGVyZSwgZ29ldGguCisgICAgKgorICAgIHk6IHN0cgorICBOb3QgYXQgY29sdW1uIDAhCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIiCitiYXIoJG1vZHVsZSwgLywgeCwgKiwgeSkKKy0tCisKK05vdCBhdCBjb2x1bW4gMCEKKworICB4CisgICAgTmVzdGVkIGRvY3N0cmluZyBoZXJlLCBnb2V0aC4KKyIiIi5zdHJpcCgpLCBmdW5jdGlvbi5kb2NzdHJpbmcpCisKKyAgICBkZWYgdGVzdF9wYXJzZXJfcmVncmVzc2lvbl9zcGVjaWFsX2NoYXJhY3Rlcl9pbl9wYXJhbWV0ZXJfY29sdW1uX29mX2RvY3N0cmluZ19maXJzdF9saW5lKHNlbGYpOgorICAgICAgICBmdW5jdGlvbiA9IHNlbGYucGFyc2VfZnVuY3Rpb24oIiIiCittb2R1bGUgb3MKK29zLnN0YXQKKyAgICBwYXRoOiBzdHIKK1RoaXMvdXNlZCB0byBicmVhayBDbGluaWMhCisiIiIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoInN0YXQoJG1vZHVsZSwgLywgcGF0aClcbi0tXG5cblRoaXMvdXNlZCB0byBicmVhayBDbGluaWMhIiwgZnVuY3Rpb24uZG9jc3RyaW5nKQorCisgICAgZGVmIHRlc3RfZGlyZWN0aXZlKHNlbGYpOgorICAgICAgICBjID0gRmFrZUNsaW5pYygpCisgICAgICAgIHBhcnNlciA9IERTTFBhcnNlcihjKQorICAgICAgICBwYXJzZXIuZmxhZyA9IEZhbHNlCisgICAgICAgIHBhcnNlci5kaXJlY3RpdmVzWydzZXRmbGFnJ10gPSBsYW1iZGEgOiBzZXRhdHRyKHBhcnNlciwgJ2ZsYWcnLCBUcnVlKQorICAgICAgICBibG9jayA9IGNsaW5pYy5CbG9jaygic2V0ZmxhZyIpCisgICAgICAgIHBhcnNlci5wYXJzZShibG9jaykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHBhcnNlci5mbGFnKQorCisgICAgZGVmIHRlc3RfbGVnYWN5X2NvbnZlcnRlcnMoc2VsZik6CisgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZSgnbW9kdWxlIG9zXG5vcy5hY2Nlc3NcbiAgIHBhdGg6ICJzIicpCisgICAgICAgIG1vZHVsZSwgZnVuY3Rpb24gPSBibG9jay5zaWduYXR1cmVzCisgICAgICAgIHNlbGYuYXNzZXJ0SXNJbnN0YW5jZSgoZnVuY3Rpb24ucGFyYW1ldGVyc1sncGF0aCddKS5jb252ZXJ0ZXIsIGNsaW5pYy5zdHJfY29udmVydGVyKQorCisgICAgZGVmIHBhcnNlKHNlbGYsIHRleHQpOgorICAgICAgICBjID0gRmFrZUNsaW5pYygpCisgICAgICAgIHBhcnNlciA9IERTTFBhcnNlcihjKQorICAgICAgICBibG9jayA9IGNsaW5pYy5CbG9jayh0ZXh0KQorICAgICAgICBwYXJzZXIucGFyc2UoYmxvY2spCisgICAgICAgIHJldHVybiBibG9jaworCisgICAgZGVmIHBhcnNlX2Z1bmN0aW9uKHNlbGYsIHRleHQsIHNpZ25hdHVyZXNfaW5fYmxvY2s9MiwgZnVuY3Rpb25faW5kZXg9MSk6CisgICAgICAgIGJsb2NrID0gc2VsZi5wYXJzZSh0ZXh0KQorICAgICAgICBzID0gYmxvY2suc2lnbmF0dXJlcworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihzKSwgc2lnbmF0dXJlc19pbl9ibG9jaykKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc1swXSwgY2xpbmljLk1vZHVsZSkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uoc1tmdW5jdGlvbl9pbmRleF0sIGNsaW5pYy5GdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIHNbZnVuY3Rpb25faW5kZXhdCisKKyAgICBkZWYgdGVzdF9zY2FmZm9sZGluZyhzZWxmKToKKyAgICAgICAgIyB0ZXN0IHJlcHIgb24gc3BlY2lhbCB2YWx1ZXMKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNsaW5pYy51bnNwZWNpZmllZCksICc8VW5zcGVjaWZpZWQ+JykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZXByKGNsaW5pYy5OVUxMKSwgJzxOdWxsPicpCisKKyAgICAgICAgIyB0ZXN0IHRoYXQgZmFpbCBmYWlscworICAgICAgICB3aXRoIHN1cHBvcnQuY2FwdHVyZWRfc3Rkb3V0KCkgYXMgc3Rkb3V0OgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhTeXN0ZW1FeGl0KToKKyAgICAgICAgICAgICAgICBjbGluaWMuZmFpbCgnVGhlIGlnbG9vcyBhcmUgbWVsdGluZyEnLCBmaWxlbmFtZT0nY2xvd24udHh0JywgbGluZV9udW1iZXI9NjkpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc3Rkb3V0LmdldHZhbHVlKCksICdFcnJvciBpbiBmaWxlICJjbG93bi50eHQiIG9uIGxpbmUgNjk6XG5UaGUgaWdsb29zIGFyZSBtZWx0aW5nIVxuJykKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvVG9vbHMvY2xpbmljL2NwcC5weSBiL1Rvb2xzL2NsaW5pYy9jcHAucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA5OTU5MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2NsaW5pYy9jcHAucHkKQEAgLTAsMCArMSwxOTEgQEAKK2ltcG9ydCByZQoraW1wb3J0IHN5cworCitkZWYgbmVnYXRlKGNvbmRpdGlvbik6CisgICAgIiIiCisgICAgUmV0dXJucyBhIENQUCBjb25kaXRpb25hbCB0aGF0IGlzIHRoZSBvcHBvc2l0ZSBvZiB0aGUgY29uZGl0aW9uYWwgcGFzc2VkIGluLgorICAgICIiIgorICAgIGlmIGNvbmRpdGlvbi5zdGFydHN3aXRoKCchJyk6CisgICAgICAgIHJldHVybiBjb25kaXRpb25bMTpdCisgICAgcmV0dXJuICIhIiArIGNvbmRpdGlvbgorCitjbGFzcyBNb25pdG9yOgorICAgICIiIgorICAgIEEgc2ltcGxlIEMgcHJlcHJvY2Vzc29yIHRoYXQgc2NhbnMgQyBzb3VyY2UgYW5kIGNvbXB1dGVzLCBsaW5lIGJ5IGxpbmUsCisgICAgd2hhdCB0aGUgY3VycmVudCBDIHByZXByb2Nlc3NvciAjaWYgc3RhdGUgaXMuCisKKyAgICBEb2Vzbid0IGhhbmRsZSBldmVyeXRoaW5nLS1mb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgLyogaW5zaWRlIGEgQyBzdHJpbmcsCisgICAgd2l0aG91dCBhIG1hdGNoaW5nICovIChhbHNvIGluc2lkZSBhIEMgc3RyaW5nKSwgb3Igd2l0aCBhICovIGluc2lkZSBhIEMKKyAgICBzdHJpbmcgYnV0IG9uIGFub3RoZXIgbGluZSBhbmQgd2l0aCBwcmVwcm9jZXNzb3IgbWFjcm9zIGluIGJldHdlZW4uLi4KKyAgICB0aGUgcGFyc2VyIHdpbGwgZ2V0IGxvc3QuCisKKyAgICBBbnl3YXkgdGhpcyBpbXBsZW1lbnRhdGlvbiBzZWVtcyB0byB3b3JrIHdlbGwgZW5vdWdoIGZvciB0aGUgQ1B5dGhvbiBzb3VyY2VzLgorICAgICIiIgorCisgICAgaXNfYV9zaW1wbGVfZGVmaW5lZCA9IHJlLmNvbXBpbGUocideZGVmaW5lZFxzKlwoXHMqW0EtWmEtejAtOV9dK1xzKlwpJCcpLm1hdGNoCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZW5hbWU9Tm9uZSwgKiwgdmVyYm9zZT1GYWxzZSk6CisgICAgICAgIHNlbGYuc3RhY2sgPSBbXQorICAgICAgICBzZWxmLmluX2NvbW1lbnQgPSBGYWxzZQorICAgICAgICBzZWxmLmNvbnRpbnVhdGlvbiA9IE5vbmUKKyAgICAgICAgc2VsZi5saW5lX251bWJlciA9IDAKKyAgICAgICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCisgICAgICAgIHNlbGYudmVyYm9zZSA9IHZlcmJvc2UKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICcnLmpvaW4oKAorICAgICAgICAgICAgJzxNb25pdG9yICcsCisgICAgICAgICAgICBzdHIoaWQoc2VsZikpLAorICAgICAgICAgICAgIiBsaW5lPSIsIHN0cihzZWxmLmxpbmVfbnVtYmVyKSwKKyAgICAgICAgICAgICIgY29uZGl0aW9uPSIsIHJlcHIoc2VsZi5jb25kaXRpb24oKSksCisgICAgICAgICAgICAiPiIpKQorCisgICAgZGVmIHN0YXR1cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmLmxpbmVfbnVtYmVyKS5yanVzdCg0KSArICI6ICIgKyBzZWxmLmNvbmRpdGlvbigpCisKKyAgICBkZWYgY29uZGl0aW9uKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB0aGUgY3VycmVudCBwcmVwcm9jZXNzb3Igc3RhdGUsIGFzIGEgc2luZ2xlICNpZiBjb25kaXRpb24uCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gIiAmJiAiLmpvaW4oY29uZGl0aW9uIGZvciB0b2tlbiwgY29uZGl0aW9uIGluIHNlbGYuc3RhY2spCisKKyAgICBkZWYgZmFpbChzZWxmLCAqYSk6CisgICAgICAgIGlmIHNlbGYuZmlsZW5hbWU6CisgICAgICAgICAgICBmaWxlbmFtZSA9ICIgIiArIHNlbGYuZmlsZW5hbWUKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGZpbGVuYW1lID0gJycKKyAgICAgICAgcHJpbnQoIkVycm9yIGF0IiArIGZpbGVuYW1lLCAibGluZSIsIHNlbGYubGluZV9udW1iZXIsICI6IikKKyAgICAgICAgcHJpbnQoIiAgICIsICcgJy5qb2luKHN0cih4KSBmb3IgeCBpbiBhKSkKKyAgICAgICAgc3lzLmV4aXQoLTEpCisKKyAgICBkZWYgY2xvc2Uoc2VsZik6CisgICAgICAgIGlmIHNlbGYuc3RhY2s6CisgICAgICAgICAgICBzZWxmLmZhaWwoIkVuZGVkIGZpbGUgd2hpbGUgc3RpbGwgaW4gYSBwcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwgYmxvY2shIikKKworICAgIGRlZiB3cml0ZShzZWxmLCBzKToKKyAgICAgICAgZm9yIGxpbmUgaW4gcy5zcGxpdCgiXG4iKToKKyAgICAgICAgICAgIHNlbGYud3JpdGVsaW5lKGxpbmUpCisKKyAgICBkZWYgd3JpdGVsaW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBzZWxmLmxpbmVfbnVtYmVyICs9IDEKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorCisgICAgICAgIGRlZiBwb3Bfc3RhY2soKToKKyAgICAgICAgICAgIGlmIG5vdCBzZWxmLnN0YWNrOgorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiIyIgKyB0b2tlbiArICIgd2l0aG91dCBtYXRjaGluZyAjaWYgLyAjaWZkZWYgLyAjaWZuZGVmISIpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5zdGFjay5wb3AoKQorCisgICAgICAgIGlmIHNlbGYuY29udGludWF0aW9uOgorICAgICAgICAgICAgbGluZSA9IHNlbGYuY29udGludWF0aW9uICsgbGluZQorICAgICAgICAgICAgc2VsZi5jb250aW51YXRpb24gPSBOb25lCisKKyAgICAgICAgaWYgbm90IGxpbmU6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBpZiBsaW5lLmVuZHN3aXRoKCdcXCcpOgorICAgICAgICAgICAgc2VsZi5jb250aW51YXRpb24gPSBsaW5lWzotMV0ucnN0cmlwKCkgKyAiICIKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgd2UgaGF2ZSB0byBpZ25vcmUgcHJlcHJvY2Vzc29yIGNvbW1hbmRzIGluc2lkZSBjb21tZW50cworICAgICAgICAjCisgICAgICAgICMgd2UgYWxzbyBoYXZlIHRvIGhhbmRsZSB0aGlzOgorICAgICAgICAjICAgICAvKiBzdGFydAorICAgICAgICAjICAgICAuLi4KKyAgICAgICAgIyAgICAgKi8gICAvKiAgICA8LS0gdHJpY2t5IQorICAgICAgICAjICAgICAuLi4KKyAgICAgICAgIyAgICAgKi8KKyAgICAgICAgIyBhbmQgdGhpczoKKyAgICAgICAgIyAgICAgLyogc3RhcnQKKyAgICAgICAgIyAgICAgLi4uCisgICAgICAgICMgICAgICovICAgLyogYWxzbyB0cmlja3khICovCisgICAgICAgIGlmIHNlbGYuaW5fY29tbWVudDoKKyAgICAgICAgICAgIGlmICcqLycgaW4gbGluZToKKyAgICAgICAgICAgICAgICAjIHNuaXAgb3V0IHRoZSBjb21tZW50IGFuZCBjb250aW51ZQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICAjIEdDQyBhbGxvd3MKKyAgICAgICAgICAgICAgICAjICAgIC8qIGNvbW1lbnQKKyAgICAgICAgICAgICAgICAjICAgICovICNpbmNsdWRlIDxzdGRpby5oPgorICAgICAgICAgICAgICAgICMgbWF5YmUgb3RoZXIgY29tcGlsZXJzIHRvbz8KKyAgICAgICAgICAgICAgICBfLCBfLCBsaW5lID0gbGluZS5wYXJ0aXRpb24oJyovJykKKyAgICAgICAgICAgICAgICBzZWxmLmluX2NvbW1lbnQgPSBGYWxzZQorCisgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICBpZiAnLyonIGluIGxpbmU6CisgICAgICAgICAgICAgICAgaWYgc2VsZi5pbl9jb21tZW50OgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIk5lc3RlZCBibG9jayBjb21tZW50ISIpCisKKyAgICAgICAgICAgICAgICBiZWZvcmUsIF8sIHJlbWFpbmRlciA9IGxpbmUucGFydGl0aW9uKCcvKicpCisgICAgICAgICAgICAgICAgY29tbWVudCwgY29tbWVudF9lbmRzLCBhZnRlciA9IHJlbWFpbmRlci5wYXJ0aXRpb24oJyovJykKKyAgICAgICAgICAgICAgICBpZiBjb21tZW50X2VuZHM6CisgICAgICAgICAgICAgICAgICAgICMgc25pcCBvdXQgdGhlIGNvbW1lbnQKKyAgICAgICAgICAgICAgICAgICAgbGluZSA9IGJlZm9yZS5yc3RyaXAoKSArICcgJyArIGFmdGVyLmxzdHJpcCgpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIyBjb21tZW50IGNvbnRpbnVlcyB0byBlb2wKKyAgICAgICAgICAgICAgICBzZWxmLmluX2NvbW1lbnQgPSBUcnVlCisgICAgICAgICAgICAgICAgbGluZSA9IGJlZm9yZS5yc3RyaXAoKQorICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAjIHdlIGFjdHVhbGx5IGhhdmUgc29tZSAvLyBjb21tZW50cworICAgICAgICAjIChidXQgYmxvY2sgY29tbWVudHMgdGFrZSBwcmVjZWRlbmNlKQorICAgICAgICBiZWZvcmUsIGxpbmVfY29tbWVudCwgY29tbWVudCA9IGxpbmUucGFydGl0aW9uKCcvLycpCisgICAgICAgIGlmIGxpbmVfY29tbWVudDoKKyAgICAgICAgICAgIGxpbmUgPSBiZWZvcmUucnN0cmlwKCkKKworICAgICAgICBpZiBub3QgbGluZS5zdGFydHN3aXRoKCcjJyk6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBsaW5lID0gbGluZVsxOl0ubHN0cmlwKCkKKyAgICAgICAgYXNzZXJ0IGxpbmUKKworICAgICAgICBmaWVsZHMgPSBsaW5lLnNwbGl0KCkKKyAgICAgICAgdG9rZW4gPSBmaWVsZHNbMF0ubG93ZXIoKQorICAgICAgICBjb25kaXRpb24gPSAnICcuam9pbihmaWVsZHNbMTpdKS5zdHJpcCgpCisKKyAgICAgICAgaWZfdG9rZW5zID0geydpZicsICdpZmRlZicsICdpZm5kZWYnfQorICAgICAgICBhbGxfdG9rZW5zID0gaWZfdG9rZW5zIHwgeydlbGlmJywgJ2Vsc2UnLCAnZW5kaWYnfQorCisgICAgICAgIGlmIHRva2VuIG5vdCBpbiBhbGxfdG9rZW5zOgorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgIyBjaGVhdCBhIGxpdHRsZSBoZXJlLCB0byByZXVzZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgaWYKKyAgICAgICAgaWYgdG9rZW4gPT0gJ2VsaWYnOgorICAgICAgICAgICAgcG9wX3N0YWNrKCkKKyAgICAgICAgICAgIHRva2VuID0gJ2lmJworCisgICAgICAgIGlmIHRva2VuIGluIGlmX3Rva2VuczoKKyAgICAgICAgICAgIGlmIG5vdCBjb25kaXRpb246CisgICAgICAgICAgICAgICAgc2VsZi5mYWlsKCJJbnZhbGlkIGZvcm1hdCBmb3IgIyIgKyB0b2tlbiArICIgbGluZTogbm8gYXJndW1lbnQhIikKKyAgICAgICAgICAgIGlmIHRva2VuID09ICdpZic6CisgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYuaXNfYV9zaW1wbGVfZGVmaW5lZChjb25kaXRpb24pOgorICAgICAgICAgICAgICAgICAgICBjb25kaXRpb24gPSAiKCIgKyBjb25kaXRpb24gKyAiKSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZmllbGRzID0gY29uZGl0aW9uLnNwbGl0KCkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZmllbGRzKSAhPSAxOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIkludmFsaWQgZm9ybWF0IGZvciAjIiArIHRva2VuICsgIiBsaW5lOiBzaG91bGQgYmUgZXhhY3RseSBvbmUgYXJndW1lbnQhIikKKyAgICAgICAgICAgICAgICBzeW1ib2wgPSBmaWVsZHNbMF0KKyAgICAgICAgICAgICAgICBjb25kaXRpb24gPSAnZGVmaW5lZCgnICsgc3ltYm9sICsgJyknCisgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gJ2lmbmRlZic6CisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9ICchJyArIGNvbmRpdGlvbgorCisgICAgICAgICAgICBzZWxmLnN0YWNrLmFwcGVuZCgoImlmIiwgY29uZGl0aW9uKSkKKyAgICAgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgICAgICBwcmludChzZWxmLnN0YXR1cygpKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcHJldmlvdXNfdG9rZW4sIHByZXZpb3VzX2NvbmRpdGlvbiA9IHBvcF9zdGFjaygpCisKKyAgICAgICAgaWYgdG9rZW4gPT0gJ2Vsc2UnOgorICAgICAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQoKCdlbHNlJywgbmVnYXRlKHByZXZpb3VzX2NvbmRpdGlvbikpKQorICAgICAgICBlbGlmIHRva2VuID09ICdlbmRpZic6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIGlmIHNlbGYudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50KHNlbGYuc3RhdHVzKCkpCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAgZm9yIGZpbGVuYW1lIGluIHN5cy5hcmd2WzE6XToKKyAgICAgICAgd2l0aCBvcGVuKGZpbGVuYW1lLCAicnQiKSBhcyBmOgorICAgICAgICAgICAgY3BwID0gTW9uaXRvcihmaWxlbmFtZSwgdmVyYm9zZT1UcnVlKQorICAgICAgICAgICAgcHJpbnQoKQorICAgICAgICAgICAgcHJpbnQoZmlsZW5hbWUpCisgICAgICAgICAgICBmb3IgbGluZV9udW1iZXIsIGxpbmUgaW4gZW51bWVyYXRlKGYucmVhZCgpLnNwbGl0KCdcbicpLCAxKToKKyAgICAgICAgICAgICAgICBjcHAud3JpdGVsaW5lKGxpbmUpCmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvYmtmaWxlLnB5IGIvVG9vbHMvZnJlZXplL2JrZmlsZS5weQppbmRleCAwZTg5NWYyLi42YWJhY2M5IDEwMDY0NAotLS0gYS9Ub29scy9mcmVlemUvYmtmaWxlLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9ia2ZpbGUucHkKQEAgLTEsNCArMSw0IEBACi1fb3JpZ19vcGVuID0gb3BlbgorZnJvbSBidWlsdGlucyBpbXBvcnQgb3BlbiBhcyBfb3JpZ19vcGVuCiAKIGNsYXNzIF9Ca0ZpbGU6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIG1vZGUsIGJ1ZnNpemUpOgpAQCAtNywxMSArNywxMSBAQAogICAgICAgICBzZWxmLl9fYmFja3VwID0gZmlsZSArICd+JwogICAgICAgICB0cnk6CiAgICAgICAgICAgICBvcy51bmxpbmsoc2VsZi5fX2JhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVuYW1lKGZpbGUsIHNlbGYuX19iYWNrdXApCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBzZWxmLl9fYmFja3VwID0gTm9uZQogICAgICAgICBzZWxmLl9fZmlsZSA9IF9vcmlnX29wZW4oZmlsZSwgbW9kZSwgYnVmc2l6ZSkKICAgICAgICAgc2VsZi5jbG9zZWQgPSBzZWxmLl9fZmlsZS5jbG9zZWQKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS9jaGVja2V4dGVuc2lvbnNfd2luMzIucHkgYi9Ub29scy9mcmVlemUvY2hlY2tleHRlbnNpb25zX3dpbjMyLnB5CmluZGV4IGVlNDQ2ZTcuLmM5Y2I1NzYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9jaGVja2V4dGVuc2lvbnNfd2luMzIucHkKKysrIGIvVG9vbHMvZnJlZXplL2NoZWNrZXh0ZW5zaW9uc193aW4zMi5weQpAQCAtMTE4LDcgKzExOCw3IEBACiAKICAgICBmb3IgZXhjIGluIGV4Y2x1ZGU6CiAgICAgICAgIGlmIGV4YyBpbiBtb2R1bGUuc291cmNlRmlsZXM6Ci0gICAgICAgICAgICBtb2R1bGVzLnNvdXJjZUZpbGVzLnJlbW92ZShleGMpCisgICAgICAgICAgICBtb2R1bGUuc291cmNlRmlsZXMucmVtb3ZlKGV4YykKIAogICAgIHJldHVybiBtb2R1bGUKIApkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weSBiL1Rvb2xzL2ZyZWV6ZS9mcmVlemUucHkKaW5kZXggYTQxMjY3YS4uZTBjNmMyYyAxMDA3NTUKLS0tIGEvVG9vbHMvZnJlZXplL2ZyZWV6ZS5weQorKysgYi9Ub29scy9mcmVlemUvZnJlZXplLnB5CkBAIC0xMjUsNyArMTI1LDcgQEAKICAgICAjIGRlZmF1bHQgdGhlIGV4Y2x1ZGUgbGlzdCBmb3IgZWFjaCBwbGF0Zm9ybQogICAgIGlmIHdpbjogZXhjbHVkZSA9IGV4Y2x1ZGUgKyBbCiAgICAgICAgICdkb3MnLCAnZG9zcGF0aCcsICdtYWMnLCAnbWFjcGF0aCcsICdtYWNmcycsICdNQUNGUycsICdwb3NpeCcsCi0gICAgICAgICdvczInLCAnY2UnLAorICAgICAgICAnY2UnLAogICAgICAgICBdCiAKICAgICBmYWlsX2ltcG9ydCA9IGV4Y2x1ZGVbOl0KQEAgLTIxOSw2ICsyMTksNyBAQAogCiAgICAgIyBsb2NhdGlvbnMgZGVyaXZlZCBmcm9tIG9wdGlvbnMKICAgICB2ZXJzaW9uID0gc3lzLnZlcnNpb25bOjNdCisgICAgZmxhZ2dlZF92ZXJzaW9uID0gdmVyc2lvbiArIHN5cy5hYmlmbGFncwogICAgIGlmIHdpbjoKICAgICAgICAgZXh0ZW5zaW9uc19jID0gJ2Zyb3plbl9leHRlbnNpb25zLmMnCiAgICAgaWYgaXNob21lOgpAQCAtMjMzLDEwICsyMzQsMTEgQEAKICAgICAgICAgICAgIGZyb3plbmRsbG1haW5fYyA9IG9zLnBhdGguam9pbihleGVjX3ByZWZpeCwgJ1BjXFxmcm96ZW5fZGxsbWFpbi5jJykKICAgICBlbHNlOgogICAgICAgICBiaW5saWIgPSBvcy5wYXRoLmpvaW4oZXhlY19wcmVmaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbGliJywgJ3B5dGhvbiVzJyAlIHZlcnNpb24sICdjb25maWcnKQotICAgICAgICBpbmNsZGlyID0gb3MucGF0aC5qb2luKHByZWZpeCwgJ2luY2x1ZGUnLCAncHl0aG9uJXMnICUgdmVyc2lvbikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsaWInLCAncHl0aG9uJXMnICUgdmVyc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWctJXMnICUgZmxhZ2dlZF92ZXJzaW9uKQorICAgICAgICBpbmNsZGlyID0gb3MucGF0aC5qb2luKHByZWZpeCwgJ2luY2x1ZGUnLCAncHl0aG9uJXMnICUgZmxhZ2dlZF92ZXJzaW9uKQogICAgICAgICBjb25maWdfaF9kaXIgPSBvcy5wYXRoLmpvaW4oZXhlY19wcmVmaXgsICdpbmNsdWRlJywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdweXRob24lcycgJSB2ZXJzaW9uKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3B5dGhvbiVzJyAlIGZsYWdnZWRfdmVyc2lvbikKICAgICAgICAgY29uZmlnX2NfaW4gPSBvcy5wYXRoLmpvaW4oYmlubGliLCAnY29uZmlnLmMuaW4nKQogICAgICAgICBmcm96ZW5tYWluX2MgPSBvcy5wYXRoLmpvaW4oYmlubGliLCAnZnJvemVubWFpbi5jJykKICAgICAgICAgbWFrZWZpbGVfaW4gPSBvcy5wYXRoLmpvaW4oYmlubGliLCAnTWFrZWZpbGUnKQpAQCAtMzExLDcgKzMxMyw3IEBACiAgICAgICAgIHRyeToKICAgICAgICAgICAgIG9zLm1rZGlyKG9kaXIpCiAgICAgICAgICAgICBwcmludCgiQ3JlYXRlZCBvdXRwdXQgZGlyZWN0b3J5Iiwgb2RpcikKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgdXNhZ2UoJyVzOiBta2RpciBmYWlsZWQgKCVzKScgJSAob2Rpciwgc3RyKG1zZykpKQogICAgIGJhc2UgPSAnJwogICAgIGlmIG9kaXI6CkBAIC0zNjMsNiArMzY1LDEwIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBtZi5sb2FkX2ZpbGUobW9kKQogCisgICAgIyBBbGlhcyAiaW1wb3J0bGliLl9ib290c3RyYXAiIHRvICJfZnJvemVuX2ltcG9ydGxpYiIgc28gdGhhdCB0aGUKKyAgICAjIGltcG9ydCBtYWNoaW5lcnkgY2FuIGJvb3RzdHJhcC4KKyAgICBtZi5tb2R1bGVzWyJfZnJvemVuX2ltcG9ydGxpYiJdID0gbWYubW9kdWxlc1siaW1wb3J0bGliLl9ib290c3RyYXAiXQorCiAgICAgIyBBZGQgdGhlIG1haW4gc2NyaXB0IGFzIGVpdGhlciBfX21haW5fXywgb3IgdGhlIGFjdHVhbCBtb2R1bGUgbmFtZS4KICAgICBpZiBweXRob25fZW50cnlfaXNfbWFpbjoKICAgICAgICAgbWYucnVuX3NjcmlwdChzY3JpcHRmaWxlKQpAQCAtNDU1LDcgKzQ2MSw3IEBACiAKICAgICBjZmxhZ3MgPSBbJyQoT1BUKSddCiAgICAgY3BwZmxhZ3MgPSBkZWZpbmVzICsgaW5jbHVkZXMKLSAgICBsaWJzID0gW29zLnBhdGguam9pbihiaW5saWIsICdsaWJweXRob24kKFZFUlNJT04pLmEnKV0KKyAgICBsaWJzID0gW29zLnBhdGguam9pbihiaW5saWIsICckKExETElCUkFSWSknKV0KIAogICAgIHNvbWV2YXJzID0ge30KICAgICBpZiBvcy5wYXRoLmV4aXN0cyhtYWtlZmlsZV9pbik6CmRpZmYgLS1naXQgYS9Ub29scy9mcmVlemUvbWFrZWNvbmZpZy5weSBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CmluZGV4IDAxODk5MmMuLmZhYmFhY2UgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CisrKyBiL1Rvb2xzL2ZyZWV6ZS9tYWtlY29uZmlnLnB5CkBAIC0zLDcgKzMsNyBAQAogCiAjIFdyaXRlIHRoZSBjb25maWcuYyBmaWxlCiAKLW5ldmVyID0gWydtYXJzaGFsJywgJ2ltcCcsICdfYXN0JywgJ19fbWFpbl9fJywgJ2J1aWx0aW5zJywKK25ldmVyID0gWydtYXJzaGFsJywgJ19pbXAnLCAnX2FzdCcsICdfX21haW5fXycsICdidWlsdGlucycsCiAgICAgICAgICAnc3lzJywgJ2djJywgJ193YXJuaW5ncyddCiAKIGRlZiBtYWtlY29uZmlnKGluZnAsIG91dGZwLCBtb2R1bGVzLCB3aXRoX2lmZGVmPTApOgpkaWZmIC0tZ2l0IGEvVG9vbHMvZnJlZXplL3Rlc3QvTWFrZWZpbGUgYi9Ub29scy9mcmVlemUvdGVzdC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjc5ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvZnJlZXplL3Rlc3QvTWFrZWZpbGUKQEAgLTAsMCArMSwxMSBAQAorIyBNYWtlZmlsZSB0byB0ZXN0IGZyZWV6ZQorIyBzZXQgUFlUSE9OIHRvIHBhdGggb2YgUHl0aG9uIGludGVycHJldGVyIHRvIHRlc3QKK1BZVEhPTj1weXRob24KKyMgc2V0IE9VVERJUiB0byB0aGUgdGVtcCBkaXJlY3RvcnkgZm9yIGZyZWV6ZQorT1VURElSPW91dGRpcgorCit0ZXN0OgorCSQoUFlUSE9OKSAuLi9mcmVlemUucHkgLW8gJChPVVRESVIpIG9rLnB5CisJbWFrZSAtQyAkKE9VVERJUikKKwkkKE9VVERJUikvb2sKKwkKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZyZWV6ZS90ZXN0L29rLnB5IGIvVG9vbHMvZnJlZXplL3Rlc3Qvb2sucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE1ZTBiNAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL2ZyZWV6ZS90ZXN0L29rLnB5CkBAIC0wLDAgKzEsMiBAQAoraW1wb3J0IHN5cworc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkgYi9Ub29scy9nZGIvbGlicHl0aG9uLnB5CmluZGV4IDFjMmMzY2IuLjMyMzQxZTcgMTAwNzU1Ci0tLSBhL1Rvb2xzL2dkYi9saWJweXRob24ucHkKKysrIGIvVG9vbHMvZ2RiL2xpYnB5dGhvbi5weQpAQCAtOTEsNyArOTEsNyBAQAogCiAKIGRlZiBzYWZldHlfbGltaXQodmFsKToKLSAgICAjIEdpdmVuIGEgaW50ZWdlciB2YWx1ZSBmcm9tIHRoZSBwcm9jZXNzIGJlaW5nIGRlYnVnZ2VkLCBsaW1pdCBpdCB0byBzb21lCisgICAgIyBHaXZlbiBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gdGhlIHByb2Nlc3MgYmVpbmcgZGVidWdnZWQsIGxpbWl0IGl0IHRvIHNvbWUKICAgICAjIHNhZmV0eSB0aHJlc2hvbGQgc28gdGhhdCBhcmJpdHJhcnkgYnJlYWthZ2Ugd2l0aGluIHNhaWQgcHJvY2VzcyBkb2Vzbid0CiAgICAgIyBicmVhayB0aGUgZ2RiIHByb2Nlc3MgdG9vIG11Y2ggKGUuZy4gc2l6ZXMgb2YgaXRlcmF0aW9ucywgc2l6ZXMgb2YgbGlzdHMpCiAgICAgcmV0dXJuIG1pbih2YWwsIDEwMDApCkBAIC0xNTgsNyArMTU4LDcgQEAKIAogY2xhc3MgUHlPYmplY3RQdHIob2JqZWN0KToKICAgICAiIiIKLSAgICBDbGFzcyB3cmFwcGluZyBhIGdkYi5WYWx1ZSB0aGF0J3MgYSBlaXRoZXIgYSAoUHlPYmplY3QqKSB3aXRoaW4gdGhlCisgICAgQ2xhc3Mgd3JhcHBpbmcgYSBnZGIuVmFsdWUgdGhhdCdzIGVpdGhlciBhIChQeU9iamVjdCopIHdpdGhpbiB0aGUKICAgICBpbmZlcmlvciBwcm9jZXNzLCBvciBzb21lIHN1YmNsYXNzIHBvaW50ZXIgZS5nLiAoUHlCeXRlc09iamVjdCopCiAKICAgICBUaGVyZSB3aWxsIGJlIGEgc3ViY2xhc3MgZm9yIGV2ZXJ5IHJlZmluZWQgUHlPYmplY3QgdHlwZSB0aGF0IHdlIGNhcmUKQEAgLTkzOSwyMSArOTM5LDI2IEBACiBjbGFzcyBQeVNldE9iamVjdFB0cihQeU9iamVjdFB0cik6CiAgICAgX3R5cGVuYW1lID0gJ1B5U2V0T2JqZWN0JwogCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIF9kdW1teV9rZXkoc2VsZik6CisgICAgICAgIHJldHVybiBnZGIubG9va3VwX2dsb2JhbF9zeW1ib2woJ19QeVNldF9EdW1teScpLnZhbHVlKCkKKworICAgIGRlZiBfX2l0ZXJfXyhzZWxmKToKKyAgICAgICAgZHVtbXlfcHRyID0gc2VsZi5fZHVtbXlfa2V5KCkKKyAgICAgICAgdGFibGUgPSBzZWxmLmZpZWxkKCd0YWJsZScpCisgICAgICAgIGZvciBpIGluIHNhZmVfcmFuZ2Uoc2VsZi5maWVsZCgnbWFzaycpICsgMSk6CisgICAgICAgICAgICBzZXRlbnRyeSA9IHRhYmxlW2ldCisgICAgICAgICAgICBrZXkgPSBzZXRlbnRyeVsna2V5J10KKyAgICAgICAgICAgIGlmIGtleSAhPSAwIGFuZCBrZXkgIT0gZHVtbXlfcHRyOgorICAgICAgICAgICAgICAgIHlpZWxkIFB5T2JqZWN0UHRyLmZyb21fcHlvYmplY3RfcHRyKGtleSkKKwogICAgIGRlZiBwcm94eXZhbChzZWxmLCB2aXNpdGVkKToKICAgICAgICAgIyBHdWFyZCBhZ2FpbnN0IGluZmluaXRlIGxvb3BzOgogICAgICAgICBpZiBzZWxmLmFzX2FkZHJlc3MoKSBpbiB2aXNpdGVkOgogICAgICAgICAgICAgcmV0dXJuIFByb3h5QWxyZWFkeVZpc2l0ZWQoJyVzKC4uLiknICUgc2VsZi5zYWZlX3RwX25hbWUoKSkKICAgICAgICAgdmlzaXRlZC5hZGQoc2VsZi5hc19hZGRyZXNzKCkpCiAKLSAgICAgICAgbWVtYmVycyA9IFtdCi0gICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQotICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKLSAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KLSAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQotICAgICAgICAgICAgaWYga2V5ICE9IDA6Ci0gICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gUHlPYmplY3RQdHIuZnJvbV9weW9iamVjdF9wdHIoa2V5KS5wcm94eXZhbCh2aXNpdGVkKQotICAgICAgICAgICAgICAgIGlmIGtleV9wcm94eSAhPSAnPGR1bW15IGtleT4nOgotICAgICAgICAgICAgICAgICAgICBtZW1iZXJzLmFwcGVuZChrZXlfcHJveHkpCisgICAgICAgIG1lbWJlcnMgPSAoa2V5LnByb3h5dmFsKHZpc2l0ZWQpIGZvciBrZXkgaW4gc2VsZikKICAgICAgICAgaWYgc2VsZi5zYWZlX3RwX25hbWUoKSA9PSAnZnJvemVuc2V0JzoKICAgICAgICAgICAgIHJldHVybiBmcm96ZW5zZXQobWVtYmVycykKICAgICAgICAgZWxzZToKQEAgLTk4MiwxOCArOTg3LDExIEBACiAKICAgICAgICAgb3V0LndyaXRlKCd7JykKICAgICAgICAgZmlyc3QgPSBUcnVlCi0gICAgICAgIHRhYmxlID0gc2VsZi5maWVsZCgndGFibGUnKQotICAgICAgICBmb3IgaSBpbiBzYWZlX3JhbmdlKHNlbGYuZmllbGQoJ21hc2snKSsxKToKLSAgICAgICAgICAgIHNldGVudHJ5ID0gdGFibGVbaV0KLSAgICAgICAgICAgIGtleSA9IHNldGVudHJ5WydrZXknXQotICAgICAgICAgICAgaWYga2V5ICE9IDA6Ci0gICAgICAgICAgICAgICAgcHlvcF9rZXkgPSBQeU9iamVjdFB0ci5mcm9tX3B5b2JqZWN0X3B0cihrZXkpCi0gICAgICAgICAgICAgICAga2V5X3Byb3h5ID0gcHlvcF9rZXkucHJveHl2YWwodmlzaXRlZCkgIyBGSVhNRSEKLSAgICAgICAgICAgICAgICBpZiBrZXlfcHJveHkgIT0gJzxkdW1teSBrZXk+JzoKLSAgICAgICAgICAgICAgICAgICAgaWYgbm90IGZpcnN0OgotICAgICAgICAgICAgICAgICAgICAgICAgb3V0LndyaXRlKCcsICcpCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKLSAgICAgICAgICAgICAgICAgICAgcHlvcF9rZXkud3JpdGVfcmVwcihvdXQsIHZpc2l0ZWQpCisgICAgICAgIGZvciBrZXkgaW4gc2VsZjoKKyAgICAgICAgICAgIGlmIG5vdCBmaXJzdDoKKyAgICAgICAgICAgICAgICBvdXQud3JpdGUoJywgJykKKyAgICAgICAgICAgIGZpcnN0ID0gRmFsc2UKKyAgICAgICAgICAgIGtleS53cml0ZV9yZXByKG91dCwgdmlzaXRlZCkKICAgICAgICAgb3V0LndyaXRlKCd9JykKIAogICAgICAgICBpZiB0cF9uYW1lICE9ICdzZXQnOgpAQCAtMTE3Nyw3ICsxMTc1LDkgQEAKICAgICAgICAgIyBDb252ZXJ0IHRoZSBpbnQgY29kZSBwb2ludHMgdG8gdW5pY29kZSBjaGFyYWN0ZXJzLCBhbmQgZ2VuZXJhdGUgYQogICAgICAgICAjIGxvY2FsIHVuaWNvZGUgaW5zdGFuY2UuCiAgICAgICAgICMgVGhpcyBzcGxpdHMgc3Vycm9nYXRlIHBhaXJzIGlmIHNpemVvZihQeV9VTklDT0RFKSBpcyAyIGhlcmUgKGluIGdkYikuCi0gICAgICAgIHJlc3VsdCA9IHUnJy5qb2luKFtfdW5pY2hyKHVjcykgZm9yIHVjcyBpbiBQeV9VTklDT0RFc10pCisgICAgICAgIHJlc3VsdCA9IHUnJy5qb2luKFsKKyAgICAgICAgICAgIChfdW5pY2hyKHVjcykgaWYgdWNzIDw9IDB4MTBmZmZmIGVsc2UgJ1x1ZmZmZCcpCisgICAgICAgICAgICBmb3IgdWNzIGluIFB5X1VOSUNPREVzXSkKICAgICAgICAgcmV0dXJuIHJlc3VsdAogCiAgICAgZGVmIHdyaXRlX3JlcHIoc2VsZiwgb3V0LCB2aXNpdGVkKToKZGlmZiAtLWdpdCBhL1Rvb2xzL2kxOG4vbWFrZWxvY2FsZWFsaWFzLnB5IGIvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKaW5kZXggOGI5MmFlMS4uMTA4ODdjZSAxMDA3NTUKLS0tIGEvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKKysrIGIvVG9vbHMvaTE4bi9tYWtlbG9jYWxlYWxpYXMucHkKQEAgLTcsNiArNyw3IEBACiAKICIiIgogaW1wb3J0IGxvY2FsZQoraW1wb3J0IHN5cwogCiAjIExvY2F0aW9uIG9mIHRoZSBhbGlhcyBmaWxlCiBMT0NBTEVfQUxJQVMgPSAnL3Vzci9zaGFyZS9YMTEvbG9jYWxlL2xvY2FsZS5hbGlhcycKQEAgLTY1LDkgKzY2LDM1IEBACiAgICAgICAgICAgICAgICAgICAoaywgb2xkZGF0YVtrXSwgZGF0YVtrXSkpCiAgICAgICAgICMgQWRkaXRpb25zIGFyZSBub3QgbWVudGlvbmVkCiAKK2RlZiBvcHRpbWl6ZShkYXRhKToKKyAgICBsb2NhbGVfYWxpYXMgPSBsb2NhbGUubG9jYWxlX2FsaWFzCisgICAgbG9jYWxlLmxvY2FsZV9hbGlhcyA9IGRhdGEuY29weSgpCisgICAgZm9yIGssIHYgaW4gZGF0YS5pdGVtcygpOgorICAgICAgICBkZWwgbG9jYWxlLmxvY2FsZV9hbGlhc1trXQorICAgICAgICBpZiBsb2NhbGUubm9ybWFsaXplKGspICE9IHY6CisgICAgICAgICAgICBsb2NhbGUubG9jYWxlX2FsaWFzW2tdID0gdgorICAgIG5ld2RhdGEgPSBsb2NhbGUubG9jYWxlX2FsaWFzCisgICAgZXJyb3JzID0gY2hlY2soZGF0YSkKKyAgICBsb2NhbGUubG9jYWxlX2FsaWFzID0gbG9jYWxlX2FsaWFzCisgICAgaWYgZXJyb3JzOgorICAgICAgICBzeXMuZXhpdCgxKQorICAgIHJldHVybiBuZXdkYXRhCisKK2RlZiBjaGVjayhkYXRhKToKKyAgICAjIENoZWNrIHRoYXQgYWxsIGFsaWFzIGRlZmluaXRpb25zIGZyb20gdGhlIFgxMSBmaWxlCisgICAgIyBhcmUgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBjb3JyZWN0IGFsaWFzIGxvY2FsZXMuCisgICAgZXJyb3JzID0gMAorICAgIGZvciBrLCB2IGluIGRhdGEuaXRlbXMoKToKKyAgICAgICAgaWYgbG9jYWxlLm5vcm1hbGl6ZShrKSAhPSB2OgorICAgICAgICAgICAgcHJpbnQoJ0VSUk9SOiAlYSAtPiAlYSAhPSAlYScgJSAoaywgbG9jYWxlLm5vcm1hbGl6ZShrKSwgdiksCisgICAgICAgICAgICAgICAgICBmaWxlPXN5cy5zdGRlcnIpCisgICAgICAgICAgICBlcnJvcnMgKz0gMQorICAgIHJldHVybiBlcnJvcnMKKwogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICBkYXRhID0gbG9jYWxlLmxvY2FsZV9hbGlhcy5jb3B5KCkKICAgICBkYXRhLnVwZGF0ZShwYXJzZShMT0NBTEVfQUxJQVMpKQorICAgIGRhdGEgPSBvcHRpbWl6ZShkYXRhKQogICAgIHByaW50X2RpZmZlcmVuY2VzKGRhdGEsIGxvY2FsZS5sb2NhbGVfYWxpYXMpCiAgICAgcHJpbnQoKQogICAgIHByaW50KCdsb2NhbGVfYWxpYXMgPSB7JykKZGlmZiAtLWdpdCBhL1Rvb2xzL2kxOG4vbXNnZm10LnB5IGIvVG9vbHMvaTE4bi9tc2dmbXQucHkKaW5kZXggY2Q5MDY5MS4uYjA3NTFhMSAxMDA3NTUKLS0tIGEvVG9vbHMvaTE4bi9tc2dmbXQucHkKKysrIGIvVG9vbHMvaTE4bi9tc2dmbXQucHkKQEAgLTIxOCw3ICsyMTgsNyBAQAogICAgICAgICBpZiBvcHQgaW4gKCctaCcsICctLWhlbHAnKToKICAgICAgICAgICAgIHVzYWdlKDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLVYnLCAnLS12ZXJzaW9uJyk6Ci0gICAgICAgICAgICBwcmludCgibXNnZm10LnB5IiwgX192ZXJzaW9uX18sIGZpbGU9c3lzLnN0ZGVycikKKyAgICAgICAgICAgIHByaW50KCJtc2dmbXQucHkiLCBfX3ZlcnNpb25fXykKICAgICAgICAgICAgIHN5cy5leGl0KDApCiAgICAgICAgIGVsaWYgb3B0IGluICgnLW8nLCAnLS1vdXRwdXQtZmlsZScpOgogICAgICAgICAgICAgb3V0ZmlsZSA9IGFyZwpkaWZmIC0tZ2l0IGEvVG9vbHMvaW1wb3J0YmVuY2gvaW1wb3J0YmVuY2gucHkgYi9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQppbmRleCA3MTRjMGU0Li42MzVkZDU2IDEwMDY0NAotLS0gYS9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQorKysgYi9Ub29scy9pbXBvcnRiZW5jaC9pbXBvcnRiZW5jaC5weQpAQCAtNDYsOCArNDYsNyBAQAogICAgIG1vZHVsZS5fX3BhY2thZ2VfXyA9ICcnCiAgICAgd2l0aCB1dGlsLnVuY2FjaGUobmFtZSk6CiAgICAgICAgIHN5cy5tb2R1bGVzW25hbWVdID0gbW9kdWxlCi0gICAgICAgIGZvciByZXN1bHQgaW4gYmVuY2gobmFtZSwgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKToKLSAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICB5aWVsZCBmcm9tIGJlbmNoKG5hbWUsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcykKIAogCiBkZWYgYnVpbHRpbl9tb2Qoc2Vjb25kcywgcmVwZWF0KToKQEAgLTU2LDkgKzU1LDggQEAKICAgICBpZiBuYW1lIGluIHN5cy5tb2R1bGVzOgogICAgICAgICBkZWwgc3lzLm1vZHVsZXNbbmFtZV0KICAgICAjIFJlbHlpbmcgb24gYnVpbHQtaW4gaW1wb3J0ZXIgYmVpbmcgaW1wbGljaXQuCi0gICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgIHlpZWxkIHJlc3VsdAorICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAKIAogZGVmIHNvdXJjZV93b19ieXRlY29kZShzZWNvbmRzLCByZXBlYXQpOgpAQCAtNzMsOSArNzEsOCBAQAogICAgICAgICAgICAgbG9hZGVyID0gKGltcG9ydGxpYi5tYWNoaW5lcnkuU291cmNlRmlsZUxvYWRlciwKICAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRsaWIubWFjaGluZXJ5LlNPVVJDRV9TVUZGSVhFUywgVHJ1ZSkKICAgICAgICAgICAgIHN5cy5wYXRoX2hvb2tzLmFwcGVuZChpbXBvcnRsaWIubWFjaGluZXJ5LkZpbGVGaW5kZXIucGF0aF9ob29rKGxvYWRlcikpCi0gICAgICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogICAgIGZpbmFsbHk6CiAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gRmFsc2UKIApAQCAtODksOSArODYsOCBAQAogICAgICAgICAgICAgb3MudW5saW5rKGJ5dGVjb2RlX3BhdGgpCiAgICAgICAgIHN5cy5kb250X3dyaXRlX2J5dGVjb2RlID0gVHJ1ZQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgICAgIHlpZWxkIHJlc3VsdAorICAgICAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0PXJlcGVhdCwgc2Vjb25kcz1zZWNvbmRzKQogICAgICAgICBmaW5hbGx5OgogICAgICAgICAgICAgc3lzLmRvbnRfd3JpdGVfYnl0ZWNvZGUgPSBGYWxzZQogCkBAIC0xMjcsOCArMTIzLDcgQEAKICAgICAgICAgZGVmIGNsZWFudXAoKToKICAgICAgICAgICAgIHN5cy5tb2R1bGVzLnBvcChuYW1lKQogICAgICAgICAgICAgb3MudW5saW5rKGltcC5jYWNoZV9mcm9tX3NvdXJjZShtb2R1bGUuX19maWxlX18pKQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGNsZWFudXAsIHJlcGVhdD1yZXBlYXQsIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBjbGVhbnVwLCByZXBlYXQ9cmVwZWF0LCBzZWNvbmRzPXNlY29uZHMpCiAKICAgICB3cml0aW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fID0gKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0aW5nX2J5dGVjb2RlX2JlbmNobWFyay5fX2RvY19fLmZvcm1hdChuYW1lKSkKQEAgLTE0OCw5ICsxNDMsOCBAQAogICAgICAgICBzeXMucGF0aF9ob29rcy5hcHBlbmQoaW1wb3J0bGliLm1hY2hpbmVyeS5GaWxlRmluZGVyLnBhdGhfaG9vayhsb2FkZXIpKQogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobWFwcGluZ1tuYW1lXSkKICAgICAgICAgYXNzZXJ0IG9zLnBhdGguZXhpc3RzKGltcC5jYWNoZV9mcm9tX3NvdXJjZShtYXBwaW5nW25hbWVdKSkKLSAgICAgICAgZm9yIHJlc3VsdCBpbiBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpOgotICAgICAgICAgICAgeWllbGQgcmVzdWx0CisgICAgICAgIHlpZWxkIGZyb20gYmVuY2gobmFtZSwgbGFtYmRhOiBzeXMubW9kdWxlcy5wb3AobmFtZSksIHJlcGVhdD1yZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kcz1zZWNvbmRzKQogCiAKIGRlZiBfdXNpbmdfYnl0ZWNvZGUobW9kdWxlKToKQEAgLTE1OCw5ICsxNTIsOCBAQAogICAgIGRlZiB1c2luZ19ieXRlY29kZV9iZW5jaG1hcmsoc2Vjb25kcywgcmVwZWF0KToKICAgICAgICAgIiIiU291cmNlIHcvIGJ5dGVjb2RlOiB7fSIiIgogICAgICAgICBweV9jb21waWxlLmNvbXBpbGUobW9kdWxlLl9fZmlsZV9fKQotICAgICAgICBmb3IgcmVzdWx0IGluIGJlbmNoKG5hbWUsIGxhbWJkYTogc3lzLm1vZHVsZXMucG9wKG5hbWUpLCByZXBlYXQ9cmVwZWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZHM9c2Vjb25kcyk6Ci0gICAgICAgICAgICB5aWVsZCByZXN1bHQKKyAgICAgICAgeWllbGQgZnJvbSBiZW5jaChuYW1lLCBsYW1iZGE6IHN5cy5tb2R1bGVzLnBvcChuYW1lKSwgcmVwZWF0PXJlcGVhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWNvbmRzPXNlY29uZHMpCiAKICAgICB1c2luZ19ieXRlY29kZV9iZW5jaG1hcmsuX19kb2NfXyA9ICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNpbmdfYnl0ZWNvZGVfYmVuY2htYXJrLl9fZG9jX18uZm9ybWF0KG5hbWUpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5IGIvVG9vbHMvaW9iZW5jaC9pb2JlbmNoLnB5CmluZGV4IDUzMGJjNzkuLjcxMmU1ODQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2lvYmVuY2gvaW9iZW5jaC5weQorKysgYi9Ub29scy9pb2JlbmNoL2lvYmVuY2gucHkKQEAgLTI0LDYgKzI0LDggQEAKICAgICB0cnk6CiAgICAgICAgIHJldHVybiBvcGVuKGZuLCBtb2RlLCBlbmNvZGluZz1lbmNvZGluZyBvciBURVhUX0VOQ09ESU5HKQogICAgIGV4Y2VwdCBUeXBlRXJyb3I6CisgICAgICAgIGlmICdyJyBpbiBtb2RlOgorICAgICAgICAgICAgbW9kZSArPSAnVScgIyAnVScgbW9kZSBpcyBuZWVkZWQgb25seSBpbiBQeXRob24gMi54CiAgICAgICAgIHJldHVybiBvcGVuKGZuLCBtb2RlKQogCiBkZWYgZ2V0X2ZpbGVfc2l6ZXMoKToKQEAgLTM4MCw3ICszODIsNyBAQAogICAgICAgICAgICAgZi53cml0ZShvcy51cmFuZG9tKHNpemUpKQogICAgICMgVGV4dCBmaWxlcwogICAgIGNodW5rID0gW10KLSAgICB3aXRoIHRleHRfb3BlbihfX2ZpbGVfXywgInJVIiwgZW5jb2Rpbmc9J3V0ZjgnKSBhcyBmOgorICAgIHdpdGggdGV4dF9vcGVuKF9fZmlsZV9fLCAiciIsIGVuY29kaW5nPSd1dGY4JykgYXMgZjoKICAgICAgICAgZm9yIGxpbmUgaW4gZjoKICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgiIyA8aW9iZW5jaCB0ZXh0IGNodW5rIG1hcmtlcj4iKToKICAgICAgICAgICAgICAgICBicmVhawpkaWZmIC0tZ2l0IGEvVG9vbHMvbXNpL21zaS5weSBiL1Rvb2xzL21zaS9tc2kucHkKaW5kZXggNWVkMDI1ZC4uZDc0NTNhNSAxMDA2NDQKLS0tIGEvVG9vbHMvbXNpL21zaS5weQorKysgYi9Ub29scy9tc2kvbXNpLnB5CkBAIC05OSw3ICs5OSw5IEBACiAgICAgJ19tdWx0aXByb2Nlc3NpbmcucHlkJywKICAgICAnX2x6bWEucHlkJywKICAgICAnX2RlY2ltYWwucHlkJywKLSAgICAnX3Rlc3RidWZmZXIucHlkJworICAgICdfdGVzdGJ1ZmZlci5weWQnLAorICAgICdfdGVzdGltcG9ydG11bHRpcGxlLnB5ZCcsCisgICAgJ19vdmVybGFwcGVkLnB5ZCcsCiBdCiAKICMgV2VsbC1rbm93biBjb21wb25lbnQgVVVJRHMKQEAgLTExOSw2ICsxMjEsNyBAQAogICAgICIzMSI6Ins0YWZjYmEwYi0xM2U0LTQ3YzMtYmViZS00Nzc0MjhiNDY5MTN9IiwKICAgICAiMzIiOiJ7M2ZmOTUzMTUtMTA5Ni00ZDMxLWJkODYtNjAxZDU0MzhhZDVlfSIsCiAgICAgIjMzIjoie2Y3NTgxY2E0LWQzNjgtNGVlYS04ZjgyLWQ0OGM2NGM0ZjA0N30iLAorICAgICIzNCI6Ins3QTBDNTgxMi0yNTgzLTQwRDktQkNCQi1DRDc0ODVGMTEzNzd9IiwKICAgICB9IFttYWpvcittaW5vcl0KIAogIyBDb21wdXRlIHRoZSBuYW1lIHRoYXQgU3BoaW54IGdpdmVzIHRvIHRoZSBkb2NmaWxlCkBAIC00MTcsNiArNDIwLDggQEAKIAogICAgIGNvbXBpbGVhcmdzID0gcictV2kgIltUQVJHRVRESVJdTGliXGNvbXBpbGVhbGwucHkiIC1mIC14ICJiYWRfY29kaW5nfGJhZHN5bnRheHxzaXRlLXBhY2thZ2VzfHB5Ml98bGliMnRvM1xcdGVzdHN8dmVudlxcc2NyaXB0cyIgIltUQVJHRVRESVJdTGliIicKICAgICBsaWIydG8zYXJncyA9IHInLWMgImltcG9ydCBsaWIydG8zLnB5Z3JhbSwgbGliMnRvMy5wYXRjb21wO2xpYjJ0bzMucGF0Y29tcC5QYXR0ZXJuQ29tcGlsZXIoKSInCisgICAgdXBkYXRlcGlwYXJncyA9IHInLW0gZW5zdXJlcGlwIC1VIC0tZGVmYXVsdC1waXAnCisgICAgcmVtb3ZlcGlwYXJncyA9IHInLUIgLW0gZW5zdXJlcGlwLl91bmluc3RhbGwnCiAgICAgIyBTZWUgIkN1c3RvbUFjdGlvbiBUYWJsZSIKICAgICBhZGRfZGF0YShkYiwgIkN1c3RvbUFjdGlvbiIsIFsKICAgICAgICAgIyBtc2lkYkN1c3RvbUFjdGlvblR5cGVGaXJzdFNlcXVlbmNlICsgbXNpZGJDdXN0b21BY3Rpb25UeXBlVGV4dERhdGEgKyBtc2lkYkN1c3RvbUFjdGlvblR5cGVQcm9wZXJ0eQpAQCAtNDMwLDkgKzQzNSwxMyBAQAogICAgICAgICAoIlNldExhdW5jaGVyRGlyVG9XaW5kb3dzIiwgMzA3LCAiTEFVTkNIRVJESVIiLCAiW1dpbmRvd3NGb2xkZXJdIiksCiAgICAgICAgICMgbXNpZGJDdXN0b21BY3Rpb25UeXBlRXhlICsgbXNpZGJDdXN0b21BY3Rpb25UeXBlU291cmNlRmlsZQogICAgICAgICAjIFNlZSAiQ3VzdG9tIEFjdGlvbiBUeXBlIDE4IgotICAgICAgICAoIkNvbXBpbGVQeWMiLCAxOCwgInB5dGhvbi5leGUiLCBjb21waWxlYXJncyksCi0gICAgICAgICgiQ29tcGlsZVB5byIsIDE4LCAicHl0aG9uLmV4ZSIsICItTyAiK2NvbXBpbGVhcmdzKSwKLSAgICAgICAgKCJDb21waWxlR3JhbW1hciIsIDE4LCAicHl0aG9uLmV4ZSIsIGxpYjJ0bzNhcmdzKSwKKyAgICAgICAgIyBtc2lkYkN1c3RvbUFjdGlvblR5cGVJblNjcmlwdCAoMTAyNCk7IHJ1biBkdXJpbmcgYWN0dWFsIGluc3RhbGxhdGlvbgorICAgICAgICAjIG1zaWRiQ3VzdG9tQWN0aW9uVHlwZU5vSW1wZXJzb25hdGUgKDIwNDgpOyBydW4gYWN0aW9uIGluIHN5c3RlbSBhY2NvdW50LCBub3QgdXNlciBhY2NvdW50CisgICAgICAgICgiQ29tcGlsZVB5YyIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCBjb21waWxlYXJncyksCisgICAgICAgICgiQ29tcGlsZVB5byIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCAiLU8gIitjb21waWxlYXJncyksCisgICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAxOCsxMDI0KzIwNDgsICJweXRob24uZXhlIiwgbGliMnRvM2FyZ3MpLAorICAgICAgICAoIlVwZGF0ZVBpcCIsIDE4KzEwMjQrMjA0OCwgInB5dGhvbi5leGUiLCB1cGRhdGVwaXBhcmdzKSwKKyAgICAgICAgKCJSZW1vdmVQaXAiLCAxOCsxMDI0KzIwNDgsICJweXRob24uZXhlIiwgcmVtb3ZlcGlwYXJncyksCiAgICAgICAgIF0pCiAKICAgICAjIFVJIFNlcXVlbmNlcywgc2VlICJJbnN0YWxsVUlTZXF1ZW5jZSBUYWJsZSIsICJVc2luZyBhIFNlcXVlbmNlIFRhYmxlIgpAQCAtNDU5LDcgKzQ2OCw3IEBACiAKICAgICAjIFByZXBlbmQgVEFSR0VURElSIHRvIHRoZSBzeXN0ZW0gcGF0aCwgYW5kIHJlbW92ZSBpdCBvbiB1bmluc3RhbGwuCiAgICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCi0gICAgICAgICAgICAgWygiUGF0aEFkZGl0aW9uIiwgIj0tKlBhdGgiLCAiW1RBUkdFVERJUl07W35dIiwgIlJFR0lTVFJZLnBhdGgiKV0pCisgICAgICAgICAgICAgWygiUGF0aEFkZGl0aW9uIiwgIj0tKlBhdGgiLCAiW1RBUkdFVERJUl07W1RBUkdFVERJUl1TY3JpcHRzO1t+XSIsICJSRUdJU1RSWS5wYXRoIildKQogCiAgICAgIyBFeGVjdXRlIFNlcXVlbmNlcwogICAgIGFkZF9kYXRhKGRiLCAiSW5zdGFsbEV4ZWN1dGVTZXF1ZW5jZSIsCkBAIC00NjksMTcgKzQ3OCwyMCBAQAogICAgICAgICAgICAgICgiU2V0TGF1bmNoZXJEaXJUb1dpbmRvd3MiLCAnTEFVTkNIRVJESVI9IiIgYW5kICcgKyBzeXMzMmNvbmQsIDc1MyksCiAgICAgICAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvVGFyZ2V0IiwgJ0xBVU5DSEVSRElSPSIiIGFuZCBub3QgJyArIHN5czMyY29uZCwgNzU0KSwKICAgICAgICAgICAgICAoIlVwZGF0ZUVkaXRJRExFIiwgTm9uZSwgMTA1MCksCi0gICAgICAgICAgICAgKCJDb21waWxlUHljIiwgIkNPTVBJTEVBTEwiLCA2ODAwKSwKLSAgICAgICAgICAgICAoIkNvbXBpbGVQeW8iLCAiQ09NUElMRUFMTCIsIDY4MDEpLAotICAgICAgICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAiQ09NUElMRUFMTCIsIDY4MDIpLAorICAgICAgICAgICAgICMgcnVuIGNvbW1hbmQgaWYgaW5zdGFsbCBzdGF0ZSBvZiBwaXAgY2hhbmdlcyB0byBJTlNUQUxMU1RBVEVfTE9DQUwKKyAgICAgICAgICAgICAjIHJ1biBhZnRlciBJbnN0YWxsRmlsZXMKKyAgICAgICAgICAgICAoIlVwZGF0ZVBpcCIsICImcGlwX2ZlYXR1cmU9MyIsIDQwMDEpLAorICAgICAgICAgICAgICMgcmVtb3ZlIHBpcCB3aGVuIHN0YXRlIGNoYW5nZXMgdG8gSU5TVEFMTFNUQVRFX0FCU0VOVAorICAgICAgICAgICAgICMgcnVuIGJlZm9yZSBSZW1vdmVGaWxlcworICAgICAgICAgICAgICgiUmVtb3ZlUGlwIiwgIiZwaXBfZmVhdHVyZT0yIiwgMzQ5OSksCisgICAgICAgICAgICAgKCJDb21waWxlUHljIiwgIkNPTVBJTEVBTEwiLCA0MDAyKSwKKyAgICAgICAgICAgICAoIkNvbXBpbGVQeW8iLCAiQ09NUElMRUFMTCIsIDQwMDMpLAorICAgICAgICAgICAgICgiQ29tcGlsZUdyYW1tYXIiLCAiQ09NUElMRUFMTCIsIDQwMDQpLAogICAgICAgICAgICAgXSkKICAgICBhZGRfZGF0YShkYiwgIkFkbWluRXhlY3V0ZVNlcXVlbmNlIiwKICAgICAgICAgICAgIFsoIkluaXRpYWxUYXJnZXREaXIiLCAnVEFSR0VURElSPSIiJywgNzUwKSwKICAgICAgICAgICAgICAoIlNldERMTERpclRvVGFyZ2V0IiwgJ0RMTERJUj0iIicsIDc1MSksCiAgICAgICAgICAgICAgKCJTZXRMYXVuY2hlckRpclRvVGFyZ2V0IiwgJ0xBVU5DSEVSRElSPSIiJywgNzUyKSwKLSAgICAgICAgICAgICAoIkNvbXBpbGVQeWMiLCAiQ09NUElMRUFMTCIsIDY4MDApLAotICAgICAgICAgICAgICgiQ29tcGlsZVB5byIsICJDT01QSUxFQUxMIiwgNjgwMSksCi0gICAgICAgICAgICAgKCJDb21waWxlR3JhbW1hciIsICJDT01QSUxFQUxMIiwgNjgwMiksCiAgICAgICAgICAgICBdKQogCiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC03NDgsNyArNzYwLDggQEAKICAgICBhZHZhbmNlZCA9IFB5RGlhbG9nKGRiLCAiQWR2YW5jZWREbGciLCB4LCB5LCB3LCBoLCBtb2RhbCwgdGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ29tcGlsZVB5YyIsICJPayIsICJPayIpCiAgICAgYWR2YW5jZWQudGl0bGUoIkFkdmFuY2VkIE9wdGlvbnMgZm9yIFtQcm9kdWN0TmFtZV0iKQotICAgICMgQSByYWRpbyBncm91cCB3aXRoIHR3byBvcHRpb25zOiBhbGx1c2VycywganVzdG1lCisKKyAgICAjIEEgY2hlY2tib3ggd2hldGhlciB0byBidWlsZCBweWMgZmlsZXMKICAgICBhZHZhbmNlZC5jaGVja2JveCgiQ29tcGlsZVB5YyIsIDEzNSwgNjAsIDIzMCwgNTAsIDMsCiAgICAgICAgICAgICAgICAgICAgICAgIkNPTVBJTEVBTEwiLCAiQ29tcGlsZSAucHkgZmlsZXMgdG8gYnl0ZSBjb2RlIGFmdGVyIGluc3RhbGxhdGlvbiIsICJPayIpCiAKQEAgLTg0NSw3ICs4NTgsOCBAQAogICAgICMgKGkuZS4gYWRkaXRpb25hbCBQeXRob24gbGlicmFyaWVzKSBuZWVkIHRvIGZvbGxvdyB0aGUgcGFyZW50IGZlYXR1cmUuCiAgICAgIyBGZWF0dXJlcyB0aGF0IGhhdmUgbm8gYWR2ZXJ0aXNlbWVudCB0cmlnZ2VyIChlLmcuIHRoZSB0ZXN0IHN1aXRlKQogICAgICMgbXVzdCBub3Qgc3VwcG9ydCBhZHZlcnRpc2VtZW50Ci0gICAgZ2xvYmFsIGRlZmF1bHRfZmVhdHVyZSwgdGNsdGssIGh0bWxmaWxlcywgdG9vbHMsIHRlc3RzdWl0ZSwgZXh0X2ZlYXR1cmUsIHByaXZhdGVfY3J0LCBwcmVwZW5kX3BhdGgKKyAgICBnbG9iYWwgZGVmYXVsdF9mZWF0dXJlLCB0Y2x0aywgaHRtbGZpbGVzLCB0b29scywgdGVzdHN1aXRlCisgICAgZ2xvYmFsIGV4dF9mZWF0dXJlLCBwcml2YXRlX2NydCwgcHJlcGVuZF9wYXRoLCBwaXBfZmVhdHVyZQogICAgIGRlZmF1bHRfZmVhdHVyZSA9IEZlYXR1cmUoZGIsICJEZWZhdWx0RmVhdHVyZSIsICJQeXRob24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiBJbnRlcnByZXRlciBhbmQgTGlicmFyaWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIGRpcmVjdG9yeSA9ICJUQVJHRVRESVIiKQpAQCAtODY3LDggKzg4MSwxNCBAQAogICAgIHRvb2xzID0gRmVhdHVyZShkYiwgIlRvb2xzIiwgIlV0aWxpdHkgU2NyaXB0cyIsCiAgICAgICAgICAgICAgICAgICAgICJQeXRob24gdXRpbGl0eSBzY3JpcHRzIChUb29scy8pIiwgOSwKICAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTIpCisgICAgIyBwaXAgaW5zdGFsbGF0aW9uIGlzbid0IGVuYWJsZWQgYnkgZGVmYXVsdCB1bnRpbCBhIGNsZWFuIHVuaW5zdGFsbCBwcm9jZWR1cmUKKyAgICAjIGJlY29tZXMgcG9zc2libGUKKyAgICBwaXBfZmVhdHVyZSA9IEZlYXR1cmUoZGIsICJwaXBfZmVhdHVyZSIsICJwaXAiLAorICAgICAgICAgICAgICAgICAgICAiSW5zdGFsbCAob3IgdXBncmFkZSBmcm9tIGFuIGVhcmxpZXIgdmVyc2lvbikgcGlwLCAiCisgICAgICAgICAgICAgICAgICAgICJhIHRvb2wgZm9yIGluc3RhbGxpbmcgYW5kIG1hbmFnaW5nIFB5dGhvbiBwYWNrYWdlcy4iLCAxMSwKKyAgICAgICAgICAgICAgICAgICAgcGFyZW50ID0gZGVmYXVsdF9mZWF0dXJlLCBhdHRyaWJ1dGVzPTJ8OCkKICAgICB0ZXN0c3VpdGUgPSBGZWF0dXJlKGRiLCAiVGVzdHN1aXRlIiwgIlRlc3Qgc3VpdGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgIlB5dGhvbiB0ZXN0IHN1aXRlIChMaWIvdGVzdC8pIiwgMTEsCisgICAgICAgICAgICAgICAgICAgICAgICAiUHl0aG9uIHRlc3Qgc3VpdGUgKExpYi90ZXN0LykiLCAxMywKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgpCiAgICAgIyBwcmVwZW5kX3BhdGggaXMgYW4gYWRkaXRpb25hbCBmZWF0dXJlIHdoaWNoIGlzIHRvIGJlIG9mZiBieSBkZWZhdWx0LgogICAgICMgU2luY2UgdGhlIGRlZmF1bHQgbGV2ZWwgZm9yIHRoZSBhYm92ZSBmZWF0dXJlcyBpcyAxLCB0aGlzIG5lZWRzIHRvIGJlCkBAIC04NzYsNyArODk2LDcgQEAKICAgICBwcmVwZW5kX3BhdGggPSBGZWF0dXJlKGRiLCAiUHJlcGVuZFBhdGgiLCAiQWRkIHB5dGhvbi5leGUgdG8gUGF0aCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiUHJlcGVuZCBbVEFSR0VURElSXSB0byB0aGUgc3lzdGVtIFBhdGggdmFyaWFibGUuICIKICAgICAgICAgICAgICAgICAgICAgICAgICJUaGlzIGFsbG93cyB5b3UgdG8gdHlwZSAncHl0aG9uJyBpbnRvIGEgY29tbWFuZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAicHJvbXB0IHdpdGhvdXQgbmVlZGluZyB0aGUgZnVsbCBwYXRoLiIsIDEzLAorICAgICAgICAgICAgICAgICAgICAgICAgInByb21wdCB3aXRob3V0IG5lZWRpbmcgdGhlIGZ1bGwgcGF0aC4iLCAxNSwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudCA9IGRlZmF1bHRfZmVhdHVyZSwgYXR0cmlidXRlcz0yfDgsCiAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbD0yKQogCkBAIC05MDksOSArOTI5LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAoIlRrIiwgInRrOCoiLCAibGljZW5zZS50ZXJtcyIpLAogICAgICAgICAgICAgICAgICAgICAgICgiVGl4IiwgInRpeC0qIiwgImxpY2Vuc2UudGVybXMiKSk6CiAgICAgICAgIG91dC53cml0ZSgiXG5UaGlzIGNvcHkgb2YgUHl0aG9uIGluY2x1ZGVzIGEgY29weSBvZiAlcywgd2hpY2ggaXMgbGljZW5zZWQgdW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczpcblxuIiAlIG5hbWUpCi0gICAgICAgIGRpcnMgPSBnbG9iLmdsb2Ioc3JjZGlyKyIvLi4vIitwYXQpCisgICAgICAgIGRpcnMgPSBnbG9iLmdsb2Ioc3JjZGlyKyIvZXh0ZXJuYWxzLyIrcGF0KQogICAgICAgICBpZiBub3QgZGlyczoKLSAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IsICJDb3VsZCBub3QgZmluZCAiK3NyY2RpcisiLy4uLyIrcGF0CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yLCAiQ291bGQgbm90IGZpbmQgIitzcmNkaXIrIi9leHRlcm5hbHMvIitwYXQKICAgICAgICAgaWYgbGVuKGRpcnMpID4gMiBhbmQgbm90IHNuYXBzaG90OgogICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvciwgIk11bHRpcGxlIGNvcGllcyBvZiAiK3BhdAogICAgICAgICBkaXIgPSBkaXJzWzBdCkBAIC05NTQsOCArOTc0LDYgQEAKICAgICAjIEFkZCBhbGwgZXhlY3V0YWJsZXMsIGljb25zLCB0ZXh0IGZpbGVzIGludG8gdGhlIFRBUkdFVERJUiBjb21wb25lbnQKICAgICByb290ID0gUHlEaXJlY3RvcnkoZGIsIGNhYiwgTm9uZSwgc3JjZGlyLCAiVEFSR0VURElSIiwgIlNvdXJjZURpciIpCiAgICAgZGVmYXVsdF9mZWF0dXJlLnNldF9jdXJyZW50KCkKLSAgICBpZiBub3QgbXNpbGliLldpbjY0OgotICAgICAgICByb290LmFkZF9maWxlKCIlcy93OXhwb3Blbi5leGUiICUgUENCVUlMRCkKICAgICByb290LmFkZF9maWxlKCJSRUFETUUudHh0Iiwgc3JjPSJSRUFETUUiKQogICAgIHJvb3QuYWRkX2ZpbGUoIk5FV1MudHh0Iiwgc3JjPSJNaXNjL05FV1MiKQogICAgIGdlbmVyYXRlX2xpY2Vuc2UoKQpAQCAtOTgwLDEyICs5OTgsMTQgQEAKICAgICBpZiBsYXVuY2hlcnNyYy5sb3dlcigpID09ICdwY2J1aWxkXFxhbWQ2NCc6CiAgICAgICAgIGxhdW5jaGVyc3JjID0gJ1BDQnVpbGQnCiAgICAgbGF1bmNoZXIgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBsYXVuY2hlcnNyYywgInB5LmV4ZSIpCi0gICAgbGF1bmNoZXJkaXIuc3RhcnRfY29tcG9uZW50KCJsYXVuY2hlciIsIGZsYWdzID0gOCsyNTYsIGtleWZpbGU9InB5LmV4ZSIpCisgICAgbGF1bmNoZXJkaXIuc3RhcnRfY29tcG9uZW50KCJsYXVuY2hlciIsIGZsYWdzID0gOCsyNTYsIGtleWZpbGU9InB5LmV4ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV1aWQ9IntCNTEwNzQwMi02OTU4LTQ2MUItOEIwQS00MDM3RDMzMjcxNjB9IikKICAgICBsYXVuY2hlcmRpci5hZGRfZmlsZShsYXVuY2hlciwKICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPWluc3RhbGxlci5GaWxlVmVyc2lvbihsYXVuY2hlciwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2U9aW5zdGFsbGVyLkZpbGVWZXJzaW9uKGxhdW5jaGVyLCAxKSkKICAgICBsYXVuY2hlcncgPSBvcy5wYXRoLmpvaW4oc3JjZGlyLCBsYXVuY2hlcnNyYywgInB5dy5leGUiKQotICAgIGxhdW5jaGVyZGlyLnN0YXJ0X2NvbXBvbmVudCgibGF1bmNoZXJ3IiwgZmxhZ3MgPSA4KzI1Niwga2V5ZmlsZT0icHl3LmV4ZSIpCisgICAgbGF1bmNoZXJkaXIuc3RhcnRfY29tcG9uZW50KCJsYXVuY2hlcnciLCBmbGFncyA9IDgrMjU2LCBrZXlmaWxlPSJweXcuZXhlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXVpZD0iezhFNTJCOENELTQ4QkItNEQ3NC04NENELTYyMzhCQ0QxMUYyMH0iKQogICAgIGxhdW5jaGVyZGlyLmFkZF9maWxlKGxhdW5jaGVydywKICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uPWluc3RhbGxlci5GaWxlVmVyc2lvbihsYXVuY2hlcncsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlPWluc3RhbGxlci5GaWxlVmVyc2lvbihsYXVuY2hlcncsIDEpKQpAQCAtMTA5Nyw3ICsxMTE3LDcgQEAKICAgICAgICAgICAgIGxpYi5zdGFydF9jb21wb25lbnQoIlRrRExMcyIsIHRjbHRrKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJfdGtpbnRlci5weWQiKQogICAgICAgICAgICAgZGxscy5hcHBlbmQoIl90a2ludGVyLnB5ZCIpCi0gICAgICAgICAgICB0Y2xkaXIgPSBvcy5wYXRoLm5vcm1wYXRoKHNyY2RpcisoIi8uLi90Y2x0ayVzL2JpbiIgJSB0Y2xzdWZmaXgpKQorICAgICAgICAgICAgdGNsZGlyID0gb3MucGF0aC5ub3JtcGF0aChzcmNkaXIrKCIvZXh0ZXJuYWxzL3RjbHRrJXMvYmluIiAlIHRjbHN1ZmZpeCkpCiAgICAgICAgICAgICBmb3IgZiBpbiBnbG9iLmdsb2IxKHRjbGRpciwgIiouZGxsIik6CiAgICAgICAgICAgICAgICAgbGliLmFkZF9maWxlKGYsIHNyYz1vcy5wYXRoLmpvaW4odGNsZGlyLCBmKSkKICAgICAjIGNoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIGFueSB1bmtub3duIGV4dGVuc2lvbnMKQEAgLTExMjIsNyArMTE0Miw3IEBACiAgICAgICAgIGxpYi5hZGRfZmlsZSgnbGlicHl0aG9uJXMlcy5hJyAlIChtYWpvciwgbWlub3IpKQogICAgIGlmIGhhdmVfdGNsOgogICAgICAgICAjIEFkZCBUY2wvVGsKLSAgICAgICAgdGNsZGlycyA9IFsocm9vdCwgJy4uL3RjbHRrJXMvbGliJyAlIHRjbHN1ZmZpeCwgJ3RjbCcpXQorICAgICAgICB0Y2xkaXJzID0gWyhyb290LCAnZXh0ZXJuYWxzL3RjbHRrJXMvbGliJyAlIHRjbHN1ZmZpeCwgJ3RjbCcpXQogICAgICAgICB0Y2x0ay5zZXRfY3VycmVudCgpCiAgICAgICAgIHdoaWxlIHRjbGRpcnM6CiAgICAgICAgICAgICBwYXJlbnQsIHBoeXMsIGRpciA9IHRjbGRpcnMucG9wKCkKQEAgLTExNDAsNyArMTE2MCw3IEBACiAgICAgZm9yIGYgaW4gWydpMThuJywgJ3B5bmNoZScsICdTY3JpcHRzJ106CiAgICAgICAgIGxpYiA9IFB5RGlyZWN0b3J5KGRiLCBjYWIsIHRvb2xkaXIsIGYsIGYsICIlc3wlcyIgJSAodG9vbGRpci5tYWtlX3Nob3J0KGYpLCBmKSkKICAgICAgICAgbGliLmdsb2IoIioucHkiKQotICAgICAgICBsaWIuZ2xvYigiKi5weXciLCBleGNsdWRlPVsncHlkb2NndWkucHl3J10pCisgICAgICAgIGxpYi5nbG9iKCIqLnB5dyIpCiAgICAgICAgIGxpYi5yZW1vdmVfcHljKCkKICAgICAgICAgbGliLmdsb2IoIioudHh0IikKICAgICAgICAgaWYgZiA9PSAicHluY2hlIjoKQEAgLTExNTIsOSArMTE3Miw2IEBACiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoIjJ0bzMucHkiLCBzcmM9IjJ0bzMiKQogICAgICAgICAgICAgbGliLmFkZF9maWxlKCJweWRvYzMucHkiLCBzcmM9InB5ZG9jMyIpCiAgICAgICAgICAgICBsaWIuYWRkX2ZpbGUoInB5dmVudi5weSIsIHNyYz0icHl2ZW52IikKLSAgICAgICAgICAgIGlmIGhhdmVfdGNsOgotICAgICAgICAgICAgICAgIGxpYi5zdGFydF9jb21wb25lbnQoInB5ZG9jZ3VpLnB5dyIsIHRjbHRrLCBrZXlmaWxlPSJweWRvY2d1aS5weXciKQotICAgICAgICAgICAgICAgIGxpYi5hZGRfZmlsZSgicHlkb2NndWkucHl3IikKICAgICAjIEFkZCBkb2N1bWVudGF0aW9uCiAgICAgaHRtbGZpbGVzLnNldF9jdXJyZW50KCkKICAgICBsaWIgPSBQeURpcmVjdG9yeShkYiwgY2FiLCByb290LCAiRG9jIiwgIkRvYyIsICJET0N8RG9jIikKQEAgLTExODUsNiArMTIwMiw4IEBACiAgICAgICAgICAgICAgICAiRG9jdW1lbnRhdGlvbiIpLAogICAgICAgICAgICAgICAoIlJFR0lTVFJZLnBhdGgiLCBtc2lsaWIuZ2VuX3V1aWQoKSwgIlRBUkdFVERJUiIsIHJlZ2lzdHJ5X2NvbXBvbmVudCwgTm9uZSwKICAgICAgICAgICAgICAgTm9uZSksCisgICAgICAgICAgICAgICgiUkVHSVNUUlkuZW5zdXJlcGlwIiwgbXNpbGliLmdlbl91dWlkKCksICJUQVJHRVRESVIiLCByZWdpc3RyeV9jb21wb25lbnQsICJFbnN1cmVQaXBSdW4iLAorICAgICAgICAgICAgICBOb25lKSwKICAgICAgICAgICAgICAgKCJSRUdJU1RSWS5kZWYiLCBtc2lsaWIuZ2VuX3V1aWQoKSwgIlRBUkdFVERJUiIsIHJlZ2lzdHJ5X2NvbXBvbmVudCwKICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUpXSArIHRjbGRhdGEpCiAgICAgIyBTZWUgIkZlYXR1cmVDb21wb25lbnRzIFRhYmxlIi4KQEAgLTEyMDIsNiArMTIyMSw3IEBACiAgICAgICAgICAgICAgWyhkZWZhdWx0X2ZlYXR1cmUuaWQsICJSRUdJU1RSWSIpLAogICAgICAgICAgICAgICAoaHRtbGZpbGVzLmlkLCAiUkVHSVNUUlkuZG9jIiksCiAgICAgICAgICAgICAgIChwcmVwZW5kX3BhdGguaWQsICJSRUdJU1RSWS5wYXRoIiksCisgICAgICAgICAgICAgIChwaXBfZmVhdHVyZS5pZCwgIlJFR0lTVFJZLmVuc3VyZXBpcCIpLAogICAgICAgICAgICAgICAoZXh0X2ZlYXR1cmUuaWQsICJSRUdJU1RSWS5kZWYiKV0gKwogICAgICAgICAgICAgICB0Y2xkYXRhCiAgICAgICAgICAgICAgICkKQEAgLTEyNjksNiArMTI4OSwxMCBAQAogICAgICAgICAgICAgICAiezYwMjU0Q0E1LTk1M0ItMTFDRi04Qzk2LTAwQUEwMEI4NzA4Q30iLCAiUkVHSVNUUlkuZGVmIiksCiAgICAgICAgICAgICBdKQogCisgICAgIyBQQVRIRVhUCisgICAgYWRkX2RhdGEoZGIsICJFbnZpcm9ubWVudCIsCisgICAgICAgICAgICAgWygiUGF0aEV4dEFkZGl0aW9uIiwgIj0tKlBhdGhFeHQiLCAiW35dOy5QWSIsICJSRUdJU1RSWS5kZWYiKV0pCisKICAgICAjIFJlZ2lzdHJ5IGtleXMKICAgICBwcmVmaXggPSByIlNvZnR3YXJlXCVzUHl0aG9uXFB5dGhvbkNvcmVcJXMiICUgKHRlc3RwcmVmaXgsIHNob3J0X3ZlcnNpb24pCiAgICAgYWRkX2RhdGEoZGIsICJSZWdpc3RyeSIsCkBAIC0xMjg0LDcgKzEzMDgsOSBAQAogICAgICAgICAgICAgICAgIiIsIHIiW1RBUkdFVERJUl1QeXRob24uZXhlIiwgIlJFR0lTVFJZLmRlZiIpLAogICAgICAgICAgICAgICAoIkRpc3BsYXlJY29uIiwgLTEsCiAgICAgICAgICAgICAgICByIlNvZnR3YXJlXE1pY3Jvc29mdFxXaW5kb3dzXEN1cnJlbnRWZXJzaW9uXFVuaW5zdGFsbFwlcyIgJSBwcm9kdWN0X2NvZGUsCi0gICAgICAgICAgICAgICAiRGlzcGxheUljb24iLCAiW1RBUkdFVERJUl1weXRob24uZXhlIiwgIlJFR0lTVFJZIikKKyAgICAgICAgICAgICAgICJEaXNwbGF5SWNvbiIsICJbVEFSR0VURElSXXB5dGhvbi5leGUiLCAiUkVHSVNUUlkiKSwKKyAgICAgICAgICAgICAgIyBGYWtlIHJlZ2lzdHJ5IGVudHJ5IHRvIGFsbG93IGluc3RhbGxlciB0byB0cmFjayB3aGV0aGVyIGVuc3VyZXBpcCBoYXMgYmVlbiBydW4KKyAgICAgICAgICAgICAgKCJFbnN1cmVQaXBSdW4iLCAtMSwgcHJlZml4K3IiXEVuc3VyZVBpcFJ1biIsICIiLCAiIzEiLCAiUkVHSVNUUlkuZW5zdXJlcGlwIiksCiAgICAgICAgICAgICAgIF0pCiAgICAgIyBTaG9ydGN1dHMsIHNlZSAiU2hvcnRjdXQgVGFibGUiCiAgICAgYWRkX2RhdGEoZGIsICJEaXJlY3RvcnkiLApAQCAtMTI5MywyNyArMTMxOSwzOCBAQAogICAgIGFkZF9kYXRhKGRiLCAiUmVtb3ZlRmlsZSIsCiAgICAgICAgICAgICAgWygiTWVudURpciIsICJUQVJHRVRESVIiLCBOb25lLCAiTWVudURpciIsIDIpXSkKICAgICB0Y2x0a3Nob3J0Y3V0cyA9IFtdCisgICAgaWYgbXNpbGliLldpbjY0OgorICAgICAgICBiaXR0ZWQgPSAiNjQgYml0IgorICAgIGVsc2U6CisgICAgICAgIGJpdHRlZCA9ICIzMiBiaXQiCiAgICAgaWYgaGF2ZV90Y2w6CiAgICAgICAgIHRjbHRrc2hvcnRjdXRzID0gWwotICAgICAgICAgICAgICAoIklETEUiLCAiTWVudURpciIsICJJRExFfElETEUgKFB5dGhvbiBHVUkpIiwgInB5dGhvbncuZXhlIiwKLSAgICAgICAgICAgICAgIHRjbHRrLmlkLCByJyJbVEFSR0VURElSXUxpYlxpZGxlbGliXGlkbGUucHl3IicsIE5vbmUsIE5vbmUsICJweXRob25faWNvbi5leGUiLCAwLCBOb25lLCAiVEFSR0VURElSIiksCi0gICAgICAgICAgICAgICgiUHlEb2MiLCAiTWVudURpciIsICJNT0RET0NTfE1vZHVsZSBEb2NzIiwgInB5dGhvbncuZXhlIiwKLSAgICAgICAgICAgICAgIHRjbHRrLmlkLCByJyJbVEFSR0VURElSXVRvb2xzXHNjcmlwdHNccHlkb2NndWkucHl3IicsIE5vbmUsIE5vbmUsICJweXRob25faWNvbi5leGUiLCAwLCBOb25lLCAiVEFSR0VURElSIiksCisgICAgICAgICAgICAgICgiSURMRSIsICJNZW51RGlyIiwKKyAgICAgICAgICAgICAgICJJRExFfElETEUgKFB5dGhvbiAiK3Nob3J0X3ZlcnNpb24rIiBHVUkgLSAiK2JpdHRlZCsiKSIsCisgICAgICAgICAgICAgICAicHl0aG9udy5leGUiLCB0Y2x0ay5pZCwgciciW1RBUkdFVERJUl1MaWJcaWRsZWxpYlxpZGxlLnB5dyInLAorICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgInB5dGhvbl9pY29uLmV4ZSIsIDAsIE5vbmUsICJUQVJHRVRESVIiKSwKICAgICAgICAgICAgICAgXQogICAgIGFkZF9kYXRhKGRiLCAiU2hvcnRjdXQiLAogICAgICAgICAgICAgIHRjbHRrc2hvcnRjdXRzICsKICAgICAgICAgICAgICBbIyBBZHZlcnRpc2VkIHNob3J0Y3V0czogdGFyZ2V0cyBhcmUgZmVhdHVyZXMsIG5vdCBmaWxlcwotICAgICAgICAgICAgICAoIlB5dGhvbiIsICJNZW51RGlyIiwgIlBZVEhPTnxQeXRob24gKGNvbW1hbmQgbGluZSkiLCAicHl0aG9uLmV4ZSIsCi0gICAgICAgICAgICAgICBkZWZhdWx0X2ZlYXR1cmUuaWQsIE5vbmUsIE5vbmUsIE5vbmUsICJweXRob25faWNvbi5leGUiLCAyLCBOb25lLCAiVEFSR0VURElSIiksCisgICAgICAgICAgICAgICgiUHl0aG9uIiwgIk1lbnVEaXIiLAorICAgICAgICAgICAgICAgIlBZVEhPTnxQeXRob24gIitzaG9ydF92ZXJzaW9uKyIgKGNvbW1hbmQgbGluZSAtICIrYml0dGVkKyIpIiwKKyAgICAgICAgICAgICAgICJweXRob24uZXhlIiwgZGVmYXVsdF9mZWF0dXJlLmlkLCBOb25lLCBOb25lLCBOb25lLAorICAgICAgICAgICAgICAgInB5dGhvbl9pY29uLmV4ZSIsIDIsIE5vbmUsICJUQVJHRVRESVIiKSwKICAgICAgICAgICAgICAgIyBBZHZlcnRpc2luZyB0aGUgTWFudWFsIGJyZWFrcyBvbiAoc29tZT8pIFdpbjk4LCBhbmQgdGhlIHNob3J0Y3V0IGxhY2tzIGFuCiAgICAgICAgICAgICAgICMgaWNvbiBmaXJzdC4KICAgICAgICAgICAgICAgIygiTWFudWFsIiwgIk1lbnVEaXIiLCAiTUFOVUFMfFB5dGhvbiBNYW51YWxzIiwgImRvY3VtZW50YXRpb24iLAogICAgICAgICAgICAgICAjIGh0bWxmaWxlcy5pZCwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCiAgICAgICAgICAgICAgICMjIE5vbi1hZHZlcnRpc2VkIHNob3J0Y3V0czogbXVzdCBiZSBhc3NvY2lhdGVkIHdpdGggYSByZWdpc3RyeSBjb21wb25lbnQKLSAgICAgICAgICAgICAgKCJNYW51YWwiLCAiTWVudURpciIsICJNQU5VQUx8UHl0aG9uIE1hbnVhbHMiLCAiUkVHSVNUUlkuZG9jIiwKLSAgICAgICAgICAgICAgICJbIyVzXSIgJSBkb2NmaWxlLCBOb25lLAotICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSwgTm9uZSksCi0gICAgICAgICAgICAgICgiVW5pbnN0YWxsIiwgIk1lbnVEaXIiLCAiVU5JTlNUfFVuaW5zdGFsbCBQeXRob24iLCAiUkVHSVNUUlkiLAorICAgICAgICAgICAgICAoIk1hbnVhbCIsICJNZW51RGlyIiwgIk1BTlVBTHxQeXRob24gIitzaG9ydF92ZXJzaW9uKyIgTWFudWFscyIsCisgICAgICAgICAgICAgICAiUkVHSVNUUlkuZG9jIiwgIlsjJXNdIiAlIGRvY2ZpbGUsCisgICAgICAgICAgICAgICBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lLCBOb25lKSwKKyAgICAgICAgICAgICAgKCJQeURvYyIsICJNZW51RGlyIiwKKyAgICAgICAgICAgICAgICJNT0RET0NTfFB5dGhvbiAiK3Nob3J0X3ZlcnNpb24rIiBEb2NzIFNlcnZlciAocHlkb2MgLSAiKworICAgICAgICAgICAgICAgYml0dGVkKyIpIiwgInB5dGhvbi5leGUiLCBkZWZhdWx0X2ZlYXR1cmUuaWQsIHInLW0gcHlkb2MgLWInLAorICAgICAgICAgICAgICAgTm9uZSwgTm9uZSwgInB5dGhvbl9pY29uLmV4ZSIsIDAsIE5vbmUsICJUQVJHRVRESVIiKSwKKyAgICAgICAgICAgICAgKCJVbmluc3RhbGwiLCAiTWVudURpciIsICJVTklOU1R8VW5pbnN0YWxsIFB5dGhvbiAiKworICAgICAgICAgICAgICAgc2hvcnRfdmVyc2lvbisiICgiK2JpdHRlZCsiKSIsICJSRUdJU1RSWSIsCiAgICAgICAgICAgICAgICBTeXN0ZW1Gb2xkZXJOYW1lKyJtc2lleGVjIiwgICIveCVzIiAlIHByb2R1Y3RfY29kZSwKICAgICAgICAgICAgICAgIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUsIE5vbmUpLAogICAgICAgICAgICAgICBdKQpkaWZmIC0tZ2l0IGEvVG9vbHMvcGFyc2VyL3VucGFyc2UucHkgYi9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQppbmRleCBiNTVlMmM2Li44MzdjZDgxIDEwMDY0NAotLS0gYS9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQorKysgYi9Ub29scy9wYXJzZXIvdW5wYXJzZS5weQpAQCAtMzA3LDYgKzMwNyw5IEBACiAgICAgZGVmIF9OYW1lKHNlbGYsIHQpOgogICAgICAgICBzZWxmLndyaXRlKHQuaWQpCiAKKyAgICBkZWYgX05hbWVDb25zdGFudChzZWxmLCB0KToKKyAgICAgICAgc2VsZi53cml0ZShyZXByKHQudmFsdWUpKQorCiAgICAgZGVmIF9OdW0oc2VsZiwgdCk6CiAgICAgICAgICMgU3Vic3RpdHV0ZSBvdmVyZmxvd2luZyBkZWNpbWFsIGxpdGVyYWwgZm9yIEFTVCBpbmZpbml0aWVzLgogICAgICAgICBzZWxmLndyaXRlKHJlcHIodC5uKS5yZXBsYWNlKCJpbmYiLCBJTkZTVFIpKQpAQCAtNTE1LDEwICs1MTgsMTAgQEAKICAgICAgICAgICAgIGVsc2U6IHNlbGYud3JpdGUoIiwgIikKICAgICAgICAgICAgIHNlbGYud3JpdGUoIioiKQogICAgICAgICAgICAgaWYgdC52YXJhcmc6Ci0gICAgICAgICAgICAgICAgc2VsZi53cml0ZSh0LnZhcmFyZykKLSAgICAgICAgICAgICAgICBpZiB0LnZhcmFyZ2Fubm90YXRpb246CisgICAgICAgICAgICAgICAgc2VsZi53cml0ZSh0LnZhcmFyZy5hcmcpCisgICAgICAgICAgICAgICAgaWYgdC52YXJhcmcuYW5ub3RhdGlvbjoKICAgICAgICAgICAgICAgICAgICAgc2VsZi53cml0ZSgiOiAiKQotICAgICAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQudmFyYXJnYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0LnZhcmFyZy5hbm5vdGF0aW9uKQogCiAgICAgICAgICMga2V5d29yZC1vbmx5IGFyZ3VtZW50cwogICAgICAgICBpZiB0Lmt3b25seWFyZ3M6CkBAIC01MzQsMTAgKzUzNywxMCBAQAogICAgICAgICBpZiB0Lmt3YXJnOgogICAgICAgICAgICAgaWYgZmlyc3Q6Zmlyc3QgPSBGYWxzZQogICAgICAgICAgICAgZWxzZTogc2VsZi53cml0ZSgiLCAiKQotICAgICAgICAgICAgc2VsZi53cml0ZSgiKioiK3Qua3dhcmcpCi0gICAgICAgICAgICBpZiB0Lmt3YXJnYW5ub3RhdGlvbjoKKyAgICAgICAgICAgIHNlbGYud3JpdGUoIioqIit0Lmt3YXJnLmFyZykKKyAgICAgICAgICAgIGlmIHQua3dhcmcuYW5ub3RhdGlvbjoKICAgICAgICAgICAgICAgICBzZWxmLndyaXRlKCI6ICIpCi0gICAgICAgICAgICAgICAgc2VsZi5kaXNwYXRjaCh0Lmt3YXJnYW5ub3RhdGlvbikKKyAgICAgICAgICAgICAgICBzZWxmLmRpc3BhdGNoKHQua3dhcmcuYW5ub3RhdGlvbikKIAogICAgIGRlZiBfa2V5d29yZChzZWxmLCB0KToKICAgICAgICAgc2VsZi53cml0ZSh0LmFyZykKZGlmZiAtLWdpdCBhL1Rvb2xzL3B5bmNoZS9Db2xvckRCLnB5IGIvVG9vbHMvcHluY2hlL0NvbG9yREIucHkKaW5kZXggZmNmMWI4Ny4uNWNlZDBlNyAxMDA2NDQKLS0tIGEvVG9vbHMvcHluY2hlL0NvbG9yREIucHkKKysrIGIvVG9vbHMvcHluY2hlL0NvbG9yREIucHkKQEAgLTIzLDcgKzIzLDYgQEAKIGltcG9ydCBzeXMKIGltcG9ydCByZQogZnJvbSB0eXBlcyBpbXBvcnQgKgotaW1wb3J0IG9wZXJhdG9yCiAKIGNsYXNzIEJhZENvbG9yKEV4Y2VwdGlvbik6CiAgICAgcGFzcwpAQCAtMjMwLDkgKzIyOSw4IEBACiAgICAgcmV0dXJuIGhleG5hbWUKIAogCi1fbWF4dHVwbGUgPSAoMjU2LjAsKSAqIDMKIGRlZiB0cmlwbGV0X3RvX2ZyYWN0aW9uYWxfcmdiKHJnYnR1cGxlKToKLSAgICByZXR1cm4gbGlzdChtYXAob3BlcmF0b3IuX19kaXZfXywgcmdidHVwbGUsIF9tYXh0dXBsZSkpCisgICAgcmV0dXJuIFt4IC8gMjU2IGZvciB4IGluIHJnYnR1cGxlXQogCiAKIGRlZiB0cmlwbGV0X3RvX2JyaWdodG5lc3MocmdidHVwbGUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9SRUFETUUgYi9Ub29scy9zY3JpcHRzL1JFQURNRQppbmRleCBkNjVkMWZkLi5jNmIyMjgyIDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL1JFQURNRQorKysgYi9Ub29scy9zY3JpcHRzL1JFQURNRQpAQCAtMiw2NCArMiw2OCBAQAogdXNlZnVsIHdoaWxlIGJ1aWxkaW5nLCBleHRlbmRpbmcgb3IgbWFuYWdpbmcgUHl0aG9uLiAgU29tZSAoZS5nLiwgZHV0cmVlIG9yIGxsbCkKIGFyZSBhbHNvIGdlbmVyYWxseSB1c2VmdWwgVU5JWCB0b29scy4KIAotMnRvMyAgICAgICAgICAgICAgICAgICAgTWFpbiBzY3JpcHQgZm9yIHJ1bm5pbmcgdGhlIDJ0bzMgY29udmVyc2lvbiB0b29sCi1hbmFseXplX2R4cC5weSAgICAgICAgICBBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQotYnlleHQucHkgICAgICAgICAgICAgICAgUHJpbnQgbGluZXMvd29yZHMvY2hhcnMgc3RhdHMgb2YgZmlsZXMgYnkgZXh0ZW5zaW9uCi1ieXRleWVhcnMucHkgICAgICAgICAgICBQcmludCBwcm9kdWN0IG9mIGEgZmlsZSdzIHNpemUgYW5kIGFnZQotY2hlY2tweWMucHkgICAgICAgICAgICAgQ2hlY2sgcHJlc2VuY2UgYW5kIHZhbGlkaXR5IG9mICIucHljIiBmaWxlcwotY2xlYW5mdXR1cmUucHkgICAgICAgICAgRml4IHJlZHVuZGFudCBQeXRob24gX19mdXR1cmVfXyBzdGF0ZW1lbnRzCi1jb21iaW5lcmVmcy5weSAgICAgICAgICBBIGhlbHBlciBmb3IgYW5hbHl6aW5nIFBZVEhPTkRVTVBSRUZTIG91dHB1dAotY29weXRpbWUucHkgICAgICAgICAgICAgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCi1jcmxmLnB5ICAgICAgICAgICAgICAgICBDaGFuZ2UgQ1JMRiBsaW5lIGVuZGluZ3MgdG8gTEYgKFdpbmRvd3MgdG8gVW5peCkKLWRiMnBpY2tsZS5weSAgICAgICAgICAgIER1bXAgYSBkYXRhYmFzZSBmaWxlIHRvIGEgcGlja2xlCi1kaWZmLnB5ICAgICAgICAgICAgICAgICBQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKLWR1dHJlZS5weSAgICAgICAgICAgICAgIEZvcm1hdCBkdSgxKSBvdXRwdXQgYXMgYSB0cmVlIHNvcnRlZCBieSBzaXplCi1lcHRhZ3MucHkgICAgICAgICAgICAgICBDcmVhdGUgRW1hY3MgVEFHUyBmaWxlIGZvciBQeXRob24gbW9kdWxlcwotZmluZF9yZWN1cnNpb25saW1pdC5weSAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lCi1maW5kZGl2LnB5ICAgICAgICAgICAgICBBIGdyZXAtbGlrZSB0b29sIHRoYXQgbG9va3MgZm9yIGRpdmlzaW9uIG9wZXJhdG9ycwotZmluZGxpbmtzdG8ucHkgICAgICAgICAgUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4Ci1maW5kbm9jb2RpbmcucHkgICAgICAgICBGaW5kIHNvdXJjZSBmaWxlcyB3aGljaCBuZWVkIGFuIGVuY29kaW5nIGRlY2xhcmF0aW9uCi1maXhjaWQucHkgICAgICAgICAgICAgICBNYXNzaXZlIGlkZW50aWZpZXIgc3Vic3RpdHV0aW9uIG9uIEMgc291cmNlIGZpbGVzCi1maXhkaXYucHkgICAgICAgICAgICAgICBUb29sIHRvIGZpeCBkaXZpc2lvbiBvcGVyYXRvcnMuCi1maXhoZWFkZXIucHkgICAgICAgICAgICBBZGQgc29tZSBjcHAgbWFnaWMgdG8gYSBDIGluY2x1ZGUgZmlsZQotZml4bm90aWNlLnB5ICAgICAgICAgICAgRml4IHRoZSBjb3B5cmlnaHQgbm90aWNlIGluIHNvdXJjZSBmaWxlcwotZml4cHMucHkgICAgICAgICAgICAgICAgRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKLWZ0cG1pcnJvci5weSAgICAgICAgICAgIEZUUCBtaXJyb3Igc2NyaXB0Ci1nb29nbGUucHkgICAgICAgICAgICAgICBPcGVuIGEgd2ViYnJvd3NlciB3aXRoIEdvb2dsZQotZ3Byb2YyaHRtbC5weSAgICAgICAgICAgVHJhbnNmb3JtIGdwcm9mKDEpIG91dHB1dCBpbnRvIHVzZWZ1bCBIVE1MCi1oMnB5LnB5ICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCi1oaWdobGlnaHQucHkgICAgICAgICAgICBQeXRob24gc3ludGF4IGhpZ2hsaWdodGluZyB3aXRoIEhUTUwgb3V0cHV0Ci1pZGxlMyAgICAgICAgICAgICAgICAgICBNYWluIHByb2dyYW0gdG8gc3RhcnQgSURMRQotaWZkZWYucHkgICAgICAgICAgICAgICAgUmVtb3ZlICNpZihuKWRlZiBncm91cHMgZnJvbSBDIHNvdXJjZXMKLWxmY3IucHkgICAgICAgICAgICAgICAgIENoYW5nZSBMRiBsaW5lIGVuZGluZ3MgdG8gQ1JMRiAoVW5peCB0byBXaW5kb3dzKQotbGlua3RyZWUucHkgICAgICAgICAgICAgTWFrZSBhIGNvcHkgb2YgYSB0cmVlIHdpdGggbGlua3MgdG8gb3JpZ2luYWwgZmlsZXMKLWxsbC5weSAgICAgICAgICAgICAgICAgIEZpbmQgYW5kIGxpc3Qgc3ltYm9saWMgbGlua3MgaW4gY3VycmVudCBkaXJlY3RvcnkKLW1haWxlcmRhZW1vbi5weSAgICAgICAgIFBhcnNlIGVycm9yIG1lc3NhZ2VzIGZyb20gbWFpbGVyIGRhZW1vbnMgKFNqb2VyZCZKYWNrKQotbWFrZV9jdHlwZS5weSAgICAgICAgICAgR2VuZXJhdGUgY3R5cGUuaCByZXBsYWNlbWVudCBpbiBzdHJpbmdvYmplY3QuYwotbWQ1c3VtLnB5ICAgICAgICAgICAgICAgUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcwotbWtyZWFsLnB5ICAgICAgICAgICAgICAgVHVybiBhIHN5bWJvbGljIGxpbmsgaW50byBhIHJlYWwgZmlsZSBvciBkaXJlY3RvcnkKLW5kaWZmLnB5ICAgICAgICAgICAgICAgIEludGVsbGlnZW50IGRpZmYgYmV0d2VlbiB0ZXh0IGZpbGVzIChUaW0gUGV0ZXJzKQotbm0yZGVmLnB5ICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKLW9iamdyYXBoLnB5ICAgICAgICAgICAgIFByaW50IG9iamVjdCBncmFwaCBmcm9tIG5tIG91dHB1dCBvbiBhIGxpYnJhcnkKLXBhcnNlZW50aXRpZXMucHkgICAgICAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTCBlbnRpdHkgZGVmaW5pdGlvbnMKLXBhdGNoY2hlY2sucHkgICAgICAgICAgIFBlcmZvcm0gY29tbW9uIGNoZWNrcyBhbmQgY2xlYW51cCBiZWZvcmUgY29tbWl0dGluZwotcGF0aGZpeC5weSAgICAgICAgICAgICAgQ2hhbmdlICMhL3Vzci9sb2NhbC9iaW4vcHl0aG9uIGludG8gc29tZXRoaW5nIGVsc2UKLXBkZXBzLnB5ICAgICAgICAgICAgICAgIFByaW50IGRlcGVuZGVuY2llcyBiZXR3ZWVuIFB5dGhvbiBtb2R1bGVzCi1waWNrbGUyZGIucHkgICAgICAgICAgICBMb2FkIGEgcGlja2xlIGdlbmVyYXRlZCBieSBkYjJwaWNrbGUucHkgdG8gYSBkYXRhYmFzZQotcGluZGVudC5weSAgICAgICAgICAgICAgSW5kZW50IFB5dGhvbiBjb2RlLCBnaXZpbmcgYmxvY2stY2xvc2luZyBjb21tZW50cwotcHRhZ3MucHkgICAgICAgICAgICAgICAgQ3JlYXRlIHZpIHRhZ3MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKLXB5ZG9jMyAgICAgICAgICAgICAgICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uIGJyb3dzZXIKLXB5c291cmNlLnB5ICAgICAgICAgICAgIEZpbmQgUHl0aG9uIHNvdXJjZSBmaWxlcwotcmVkZW1vLnB5ICAgICAgICAgICAgICAgQmFzaWMgcmVndWxhciBleHByZXNzaW9uIGRlbW9uc3RyYXRpb24gZmFjaWxpdHkKLXJlaW5kZW50LnB5ICAgICAgICAgICAgIENoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cwotcmVpbmRlbnQtcnN0LnB5ICAgICAgICAgRml4LXVwIHJlU3RydWN0dXJlZFRleHQgZmlsZSB3aGl0ZXNwYWNlCi1yZ3JlcC5weSAgICAgICAgICAgICAgICBSZXZlcnNlIGdyZXAgdGhyb3VnaCBhIGZpbGUgKHVzZWZ1bCBmb3IgYmlnIGxvZ2ZpbGVzKQotcnVuX3Rlc3RzLnB5ICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHN1aXRlIHdpdGggbW9yZSBzZW5zaWJsZSBkZWZhdWx0IG9wdGlvbnMKLXNlcnZlLnB5ICAgICAgICAgICAgICAgIFNtYWxsIHdzZ2lyZWYtYmFzZWQgd2ViIHNlcnZlciwgdXNlZCBpbiBtYWtlIHNlcnZlIGluIERvYwotc3VmZi5weSAgICAgICAgICAgICAgICAgU29ydCBhIGxpc3Qgb2YgZmlsZXMgYnkgc3VmZml4Ci1zdm5lb2wucHkgICAgICAgICAgICAgICBTZXQgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5Ci10ZXhpMmh0bWwucHkgICAgICAgICAgICBDb252ZXJ0IEdOVSB0ZXhpbmZvIGZpbGVzIGludG8gSFRNTAotdHJlZXN5bmMucHkgICAgICAgICAgICAgU3luY2hyb25pemUgc291cmNlIHRyZWVzICh2ZXJ5IGlkaW9zeW5jcmF0aWMpCi11bnRhYmlmeS5weSAgICAgICAgICAgICBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgaW4gYXJndW1lbnQgZmlsZXMKLXdpbl9hZGQycGF0aC5weSAgICAgICAgIEFkZCBQeXRob24gdG8gdGhlIHNlYXJjaCBwYXRoIG9uIFdpbmRvd3MKLXdoaWNoLnB5ICAgICAgICAgICAgICAgIEZpbmQgYSBwcm9ncmFtIGluICRQQVRICisydG8zICAgICAgICAgICAgICAgICAgICAgIE1haW4gc2NyaXB0IGZvciBydW5uaW5nIHRoZSAydG8zIGNvbnZlcnNpb24gdG9vbAorYWJpdHlwZS5weSAgICAgICAgICAgICAgICBDb252ZXJ0cyBhIEMgZmlsZSB0byB1c2UgdGhlIFBFUCAzODQgdHlwZSBkZWZpbml0aW9uIEFQSQorYW5hbHl6ZV9keHAucHkgICAgICAgICAgICBBbmFseXplcyB0aGUgcmVzdWx0IG9mIHN5cy5nZXRkeHAoKQorYnlleHQucHkgICAgICAgICAgICAgICAgICBQcmludCBsaW5lcy93b3Jkcy9jaGFycyBzdGF0cyBvZiBmaWxlcyBieSBleHRlbnNpb24KK2J5dGV5ZWFycy5weSAgICAgICAgICAgICAgUHJpbnQgcHJvZHVjdCBvZiBhIGZpbGUncyBzaXplIGFuZCBhZ2UKK2NoZWNrcHljLnB5ICAgICAgICAgICAgICAgQ2hlY2sgcHJlc2VuY2UgYW5kIHZhbGlkaXR5IG9mICIucHljIiBmaWxlcworY2xlYW5mdXR1cmUucHkgICAgICAgICAgICBGaXggcmVkdW5kYW50IFB5dGhvbiBfX2Z1dHVyZV9fIHN0YXRlbWVudHMKK2NvbWJpbmVyZWZzLnB5ICAgICAgICAgICAgQSBoZWxwZXIgZm9yIGFuYWx5emluZyBQWVRIT05EVU1QUkVGUyBvdXRwdXQKK2NvcHl0aW1lLnB5ICAgICAgICAgICAgICAgQ29weSBvbmUgZmlsZSdzIGF0aW1lIGFuZCBtdGltZSB0byBhbm90aGVyCitjcmxmLnB5ICAgICAgICAgICAgICAgICAgIENoYW5nZSBDUkxGIGxpbmUgZW5kaW5ncyB0byBMRiAoV2luZG93cyB0byBVbml4KQorZGIycGlja2xlLnB5ICAgICAgICAgICAgICBEdW1wIGEgZGF0YWJhc2UgZmlsZSB0byBhIHBpY2tsZQorZGlmZi5weSAgICAgICAgICAgICAgICAgICBQcmludCBmaWxlIGRpZmZzIGluIGNvbnRleHQsIHVuaWZpZWQsIG9yIG5kaWZmIGZvcm1hdHMKK2R1dHJlZS5weSAgICAgICAgICAgICAgICAgRm9ybWF0IGR1KDEpIG91dHB1dCBhcyBhIHRyZWUgc29ydGVkIGJ5IHNpemUKK2VwdGFncy5weSAgICAgICAgICAgICAgICAgQ3JlYXRlIEVtYWNzIFRBR1MgZmlsZSBmb3IgUHl0aG9uIG1vZHVsZXMKK2ZpbmRkaXYucHkgICAgICAgICAgICAgICAgQSBncmVwLWxpa2UgdG9vbCB0aGF0IGxvb2tzIGZvciBkaXZpc2lvbiBvcGVyYXRvcnMKK2ZpbmRsaW5rc3RvLnB5ICAgICAgICAgICAgUmVjdXJzaXZlbHkgZmluZCBzeW1ib2xpYyBsaW5rcyB0byBhIGdpdmVuIHBhdGggcHJlZml4CitmaW5kbm9jb2RpbmcucHkgICAgICAgICAgIEZpbmQgc291cmNlIGZpbGVzIHdoaWNoIG5lZWQgYW4gZW5jb2RpbmcgZGVjbGFyYXRpb24KK2ZpbmRfcmVjdXJzaW9ubGltaXQucHkgICAgRmluZCB0aGUgbWF4aW11bSByZWN1cnNpb24gbGltaXQgb24gdGhpcyBtYWNoaW5lCitmaW5kLXVuYW1lLnB5ICAgICAgICAgICAgIExvb2sgZm9yIHRoZSBnaXZlbiBhcmd1bWVudHMgaW4gdGhlIHNldHMgb2YgYWxsIFVuaWNvZGUgbmFtZXMKK2ZpeGNpZC5weSAgICAgICAgICAgICAgICAgTWFzc2l2ZSBpZGVudGlmaWVyIHN1YnN0aXR1dGlvbiBvbiBDIHNvdXJjZSBmaWxlcworZml4ZGl2LnB5ICAgICAgICAgICAgICAgICBUb29sIHRvIGZpeCBkaXZpc2lvbiBvcGVyYXRvcnMuCitmaXhoZWFkZXIucHkgICAgICAgICAgICAgIEFkZCBzb21lIGNwcCBtYWdpYyB0byBhIEMgaW5jbHVkZSBmaWxlCitmaXhub3RpY2UucHkgICAgICAgICAgICAgIEZpeCB0aGUgY29weXJpZ2h0IG5vdGljZSBpbiBzb3VyY2UgZmlsZXMKK2ZpeHBzLnB5ICAgICAgICAgICAgICAgICAgRml4IFB5dGhvbiBzY3JpcHRzJyBmaXJzdCBsaW5lIChpZiAjISkKK2Z0cG1pcnJvci5weSAgICAgICAgICAgICAgRlRQIG1pcnJvciBzY3JpcHQKK2dldC1yZW1vdGUtY2VydGlmaWNhdGUucHkgRmV0Y2ggdGhlIGNlcnRpZmljYXRlIHRoYXQgdGhlIHNlcnZlcihzKSBhcmUgcHJvdmlkaW5nIGluIFBFTSBmb3JtCitnb29nbGUucHkgICAgICAgICAgICAgICAgIE9wZW4gYSB3ZWJicm93c2VyIHdpdGggR29vZ2xlCitncHJvZjJodG1sLnB5ICAgICAgICAgICAgIFRyYW5zZm9ybSBncHJvZigxKSBvdXRwdXQgaW50byB1c2VmdWwgSFRNTAoraDJweS5weSAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgI2RlZmluZSdzIGludG8gUHl0aG9uIGFzc2lnbm1lbnRzCitoaWdobGlnaHQucHkgICAgICAgICAgICAgIFB5dGhvbiBzeW50YXggaGlnaGxpZ2h0aW5nIHdpdGggSFRNTCBvdXRwdXQKK2lkbGUzICAgICAgICAgICAgICAgICAgICAgTWFpbiBwcm9ncmFtIHRvIHN0YXJ0IElETEUKK2lmZGVmLnB5ICAgICAgICAgICAgICAgICAgUmVtb3ZlICNpZihuKWRlZiBncm91cHMgZnJvbSBDIHNvdXJjZXMKK2ltcG9ydF9kaWFnbm9zdGljcy5weSAgICAgTWlzY2VsbGFuZW91cyBkaWFnbm9zdGljcyBmb3IgdGhlIGltcG9ydCBzeXN0ZW0KK2xmY3IucHkgICAgICAgICAgICAgICAgICAgQ2hhbmdlIExGIGxpbmUgZW5kaW5ncyB0byBDUkxGIChVbml4IHRvIFdpbmRvd3MpCitsaW5rdHJlZS5weSAgICAgICAgICAgICAgIE1ha2UgYSBjb3B5IG9mIGEgdHJlZSB3aXRoIGxpbmtzIHRvIG9yaWdpbmFsIGZpbGVzCitsbGwucHkgICAgICAgICAgICAgICAgICAgIEZpbmQgYW5kIGxpc3Qgc3ltYm9saWMgbGlua3MgaW4gY3VycmVudCBkaXJlY3RvcnkKK21haWxlcmRhZW1vbi5weSAgICAgICAgICAgUGFyc2UgZXJyb3IgbWVzc2FnZXMgZnJvbSBtYWlsZXIgZGFlbW9ucyAoU2pvZXJkJkphY2spCittYWtlX2N0eXBlLnB5ICAgICAgICAgICAgIEdlbmVyYXRlIGN0eXBlLmggcmVwbGFjZW1lbnQgaW4gc3RyaW5nb2JqZWN0LmMKK21kNXN1bS5weSAgICAgICAgICAgICAgICAgUHJpbnQgTUQ1IGNoZWNrc3VtcyBvZiBhcmd1bWVudCBmaWxlcworbWtyZWFsLnB5ICAgICAgICAgICAgICAgICBUdXJuIGEgc3ltYm9saWMgbGluayBpbnRvIGEgcmVhbCBmaWxlIG9yIGRpcmVjdG9yeQorbmRpZmYucHkgICAgICAgICAgICAgICAgICBJbnRlbGxpZ2VudCBkaWZmIGJldHdlZW4gdGV4dCBmaWxlcyAoVGltIFBldGVycykKK25tMmRlZi5weSAgICAgICAgICAgICAgICAgQ3JlYXRlIGEgdGVtcGxhdGUgZm9yIFBDL3B5dGhvbl9udC5kZWYgKE1hcmMgTGVtYnVyZykKK29iamdyYXBoLnB5ICAgICAgICAgICAgICAgUHJpbnQgb2JqZWN0IGdyYXBoIGZyb20gbm0gb3V0cHV0IG9uIGEgbGlicmFyeQorcGFyc2VlbnRpdGllcy5weSAgICAgICAgICBVdGlsaXR5IGZvciBwYXJzaW5nIEhUTUwgZW50aXR5IGRlZmluaXRpb25zCitwYXJzZV9odG1sNV9lbnRpdGllcy5weSAgIFV0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTDUgZW50aXR5IGRlZmluaXRpb25zCitwYXRjaGNoZWNrLnB5ICAgICAgICAgICAgIFBlcmZvcm0gY29tbW9uIGNoZWNrcyBhbmQgY2xlYW51cCBiZWZvcmUgY29tbWl0dGluZworcGF0aGZpeC5weSAgICAgICAgICAgICAgICBDaGFuZ2UgIyEvdXNyL2xvY2FsL2Jpbi9weXRob24gaW50byBzb21ldGhpbmcgZWxzZQorcGRlcHMucHkgICAgICAgICAgICAgICAgICBQcmludCBkZXBlbmRlbmNpZXMgYmV0d2VlbiBQeXRob24gbW9kdWxlcworcGlja2xlMmRiLnB5ICAgICAgICAgICAgICBMb2FkIGEgcGlja2xlIGdlbmVyYXRlZCBieSBkYjJwaWNrbGUucHkgdG8gYSBkYXRhYmFzZQorcGluZGVudC5weSAgICAgICAgICAgICAgICBJbmRlbnQgUHl0aG9uIGNvZGUsIGdpdmluZyBibG9jay1jbG9zaW5nIGNvbW1lbnRzCitwdGFncy5weSAgICAgICAgICAgICAgICAgIENyZWF0ZSB2aSB0YWdzIGZpbGUgZm9yIFB5dGhvbiBtb2R1bGVzCitweWRvYzMgICAgICAgICAgICAgICAgICAgIFB5dGhvbiBkb2N1bWVudGF0aW9uIGJyb3dzZXIKK3B5c291cmNlLnB5ICAgICAgICAgICAgICAgRmluZCBQeXRob24gc291cmNlIGZpbGVzCityZWluZGVudC5weSAgICAgICAgICAgICAgIENoYW5nZSAucHkgZmlsZXMgdG8gdXNlIDQtc3BhY2UgaW5kZW50cworcmVpbmRlbnQtcnN0LnB5ICAgICAgICAgICBGaXgtdXAgcmVTdHJ1Y3R1cmVkVGV4dCBmaWxlIHdoaXRlc3BhY2UKK3JncmVwLnB5ICAgICAgICAgICAgICAgICAgUmV2ZXJzZSBncmVwIHRocm91Z2ggYSBmaWxlICh1c2VmdWwgZm9yIGJpZyBsb2dmaWxlcykKK3J1bl90ZXN0cy5weSAgICAgICAgICAgICAgUnVuIHRoZSB0ZXN0IHN1aXRlIHdpdGggbW9yZSBzZW5zaWJsZSBkZWZhdWx0IG9wdGlvbnMKK3NlcnZlLnB5ICAgICAgICAgICAgICAgICAgU21hbGwgd3NnaXJlZi1iYXNlZCB3ZWIgc2VydmVyLCB1c2VkIGluIG1ha2Ugc2VydmUgaW4gRG9jCitzdWZmLnB5ICAgICAgICAgICAgICAgICAgIFNvcnQgYSBsaXN0IG9mIGZpbGVzIGJ5IHN1ZmZpeAorc3ZuZW9sLnB5ICAgICAgICAgICAgICAgICBTZXQgc3ZuOmVvbC1zdHlsZSBvbiBhbGwgZmlsZXMgaW4gZGlyZWN0b3J5Cit0ZXhpMmh0bWwucHkgICAgICAgICAgICAgIENvbnZlcnQgR05VIHRleGluZm8gZmlsZXMgaW50byBIVE1MCit0cmVlc3luYy5weSAgICAgICAgICAgICAgIFN5bmNocm9uaXplIHNvdXJjZSB0cmVlcyAodmVyeSBpZGlvc3luY3JhdGljKQordW50YWJpZnkucHkgICAgICAgICAgICAgICBSZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgaW4gYXJndW1lbnQgZmlsZXMKK3doaWNoLnB5ICAgICAgICAgICAgICAgICAgRmluZCBhIHByb2dyYW0gaW4gJFBBVEgKK3dpbl9hZGQycGF0aC5weSAgICAgICAgICAgQWRkIFB5dGhvbiB0byB0aGUgc2VhcmNoIHBhdGggb24gV2luZG93cwpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weSBiL1Rvb2xzL3NjcmlwdHMvYnlleHQucHkKaW5kZXggYjc5ZmYzNy4uNzM2YTQ0MSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9ieWV4dC5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5ZXh0LnB5CkBAIC0yNSw3ICsyNSw3IEBACiAgICAgICAgIHNlbGYuYWRkc3RhdHMoIjxkaXI+IiwgImRpcnMiLCAxKQogICAgICAgICB0cnk6CiAgICAgICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlyKQotICAgICAgICBleGNlcHQgb3MuZXJyb3IgYXMgZXJyOgorICAgICAgICBleGNlcHQgT1NFcnJvciBhcyBlcnI6CiAgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCJDYW4ndCBsaXN0ICVzOiAlc1xuIiAlIChkaXIsIGVycikpCiAgICAgICAgICAgICBzZWxmLmFkZHN0YXRzKCI8ZGlyPiIsICJ1bmxpc3RhYmxlIiwgMSkKICAgICAgICAgICAgIHJldHVybgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ieXRleWVhcnMucHkgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQppbmRleCA0OTBiMzdmLi5mNThjMzQ2IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQorKysgYi9Ub29scy9zY3JpcHRzL2J5dGV5ZWFycy5weQpAQCAtNDMsNyArNDMsNyBAQAogICAgIGZvciBmaWxlbmFtZSBpbiBzeXMuYXJndlsxOl06CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIHN0ID0gc3RhdGZ1bmMoZmlsZW5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoImNhbid0IHN0YXQgJXI6ICVyXG4iICUgKGZpbGVuYW1lLCBtc2cpKQogICAgICAgICAgICAgc3RhdHVzID0gMQogICAgICAgICAgICAgc3QgPSAoKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9jaGVja3BpcC5weSBiL1Rvb2xzL3NjcmlwdHMvY2hlY2twaXAucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGE2NGVkYQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3NjcmlwdHMvY2hlY2twaXAucHkKQEAgLTAsMCArMSwzMiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIiIiCitDaGVja3MgdGhhdCB0aGUgdmVyc2lvbiBvZiB0aGUgcHJvamVjdHMgYnVuZGxlZCBpbiBlbnN1cmVwaXAgYXJlIHRoZSBsYXRlc3QKK3ZlcnNpb25zIGF2YWlsYWJsZS4KKyIiIgoraW1wb3J0IGVuc3VyZXBpcAoraW1wb3J0IGpzb24KK2ltcG9ydCB1cmxsaWIucmVxdWVzdAoraW1wb3J0IHN5cworCisKK2RlZiBtYWluKCk6CisgICAgb3V0b2ZkYXRlID0gRmFsc2UKKworICAgIGZvciBwcm9qZWN0LCB2ZXJzaW9uIGluIGVuc3VyZXBpcC5fUFJPSkVDVFM6CisgICAgICAgIGRhdGEgPSBqc29uLmxvYWRzKHVybGxpYi5yZXF1ZXN0LnVybG9wZW4oCisgICAgICAgICAgICAiaHR0cHM6Ly9weXBpLnB5dGhvbi5vcmcvcHlwaS97fS9qc29uIi5mb3JtYXQocHJvamVjdCksCisgICAgICAgICAgICBjYWRlZmF1bHQ9VHJ1ZSwKKyAgICAgICAgKS5yZWFkKCkuZGVjb2RlKCJ1dGY4IikpCisgICAgICAgIHVwc3RyZWFtX3ZlcnNpb24gPSBkYXRhWyJpbmZvIl1bInZlcnNpb24iXQorCisgICAgICAgIGlmIHZlcnNpb24gIT0gdXBzdHJlYW1fdmVyc2lvbjoKKyAgICAgICAgICAgIG91dG9mZGF0ZSA9IFRydWUKKyAgICAgICAgICAgIHByaW50KCJUaGUgbGF0ZXN0IHZlcnNpb24gb2Yge30gb24gUHlQSSBpcyB7fSwgYnV0IGVuc3VyZXBpcCAiCisgICAgICAgICAgICAgICAgICAiaGFzIHt9Ii5mb3JtYXQocHJvamVjdCwgdXBzdHJlYW1fdmVyc2lvbiwgdmVyc2lvbikpCisKKyAgICBpZiBvdXRvZmRhdGU6CisgICAgICAgIHN5cy5leGl0KDEpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBtYWluKCkKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkgYi9Ub29scy9zY3JpcHRzL2NoZWNrcHljLnB5CmluZGV4IGQ0ZmRjZTIuLmJiYWEzZDEgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvY2hlY2tweWMucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9jaGVja3B5Yy5weQpAQCAtNSwxMSArNSwxMSBAQAogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBmcm9tIHN0YXQgaW1wb3J0IFNUX01USU1FCi1pbXBvcnQgaW1wCitpbXBvcnQgaW1wb3J0bGliLnV0aWwKIAogIyBQRVAgMzE0NyBjb21wYXRpYmlsaXR5IChQWUMgUmVwb3NpdG9yeSBEaXJlY3RvcmllcykKLWNhY2hlX2Zyb21fc291cmNlID0gKGltcC5jYWNoZV9mcm9tX3NvdXJjZSBpZiBoYXNhdHRyKGltcCwgJ2dldF90YWcnKSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICBsYW1iZGEgcGF0aDogcGF0aCArICdjJykKK2NhY2hlX2Zyb21fc291cmNlID0gKGltcG9ydGxpYi51dGlsLmNhY2hlX2Zyb21fc291cmNlIGlmIHN5cy5pbXBsZW1lbnRhdGlvbi5jYWNoZV90YWcKKyAgICAgICAgICAgICAgICAgICAgIGVsc2UgbGFtYmRhIHBhdGg6IHBhdGggKyAnYycpCiAKIAogZGVmIG1haW4oKToKQEAgLTE4LDEzICsxOCwxMyBAQAogICAgICAgICBzaWxlbnQgPSAoc3lzLmFyZ3ZbMV0gPT0gJy1zJykKICAgICBlbHNlOgogICAgICAgICB2ZXJib3NlID0gc2lsZW50ID0gRmFsc2UKLSAgICBNQUdJQyA9IGltcC5nZXRfbWFnaWMoKQorICAgIE1BR0lDID0gaW1wb3J0bGliLnV0aWwuTUFHSUNfTlVNQkVSCiAgICAgaWYgbm90IHNpbGVudDoKICAgICAgICAgcHJpbnQoJ1VzaW5nIE1BR0lDIHdvcmQnLCByZXByKE1BR0lDKSkKICAgICBmb3IgZGlybmFtZSBpbiBzeXMucGF0aDoKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgbmFtZXMgPSBvcy5saXN0ZGlyKGRpcm5hbWUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICBwcmludCgnQ2Fubm90IGxpc3QgZGlyZWN0b3J5JywgcmVwcihkaXJuYW1lKSkKICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgIGlmIG5vdCBzaWxlbnQ6CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgICAgICAgICAgbmFtZSA9IG9zLnBhdGguam9pbihkaXJuYW1lLCBuYW1lKQogICAgICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICAgICAgICAgICAgICBwcmludCgnQ2Fubm90IHN0YXQnLCByZXByKG5hbWUpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZQogICAgICAgICAgICAgICAgIGlmIHZlcmJvc2U6CmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5IGIvVG9vbHMvc2NyaXB0cy9jb3B5dGltZS5weQppbmRleCBlMDIyMGI1Li43MTU2ODNmIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2NvcHl0aW1lLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvY29weXRpbWUucHkKQEAgLTEzLDEyICsxMywxMiBAQAogICAgIGZpbGUxLCBmaWxlMiA9IHN5cy5hcmd2WzFdLCBzeXMuYXJndlsyXQogICAgIHRyeToKICAgICAgICAgc3RhdDEgPSBvcy5zdGF0KGZpbGUxKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZShmaWxlMSArICc6IGNhbm5vdCBzdGF0XG4nKQogICAgICAgICBzeXMuZXhpdCgxKQogICAgIHRyeToKICAgICAgICAgb3MudXRpbWUoZmlsZTIsIChzdGF0MVtTVF9BVElNRV0sIHN0YXQxW1NUX01USU1FXSkpCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBzeXMuc3RkZXJyLndyaXRlKGZpbGUyICsgJzogY2Fubm90IGNoYW5nZSB0aW1lXG4nKQogICAgICAgICBzeXMuZXhpdCgyKQogCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2RpZmYucHkgYi9Ub29scy9zY3JpcHRzL2RpZmYucHkKaW5kZXggZjliMTRiZi4uOGJlNTI3ZiAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9kaWZmLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZGlmZi5weQpAQCAtMzgsOSArMzgsOSBAQAogCiAgICAgZnJvbWRhdGUgPSBmaWxlX210aW1lKGZyb21maWxlKQogICAgIHRvZGF0ZSA9IGZpbGVfbXRpbWUodG9maWxlKQotICAgIHdpdGggb3Blbihmcm9tZmlsZSwgJ1UnKSBhcyBmZjoKKyAgICB3aXRoIG9wZW4oZnJvbWZpbGUpIGFzIGZmOgogICAgICAgICBmcm9tbGluZXMgPSBmZi5yZWFkbGluZXMoKQotICAgIHdpdGggb3Blbih0b2ZpbGUsICdVJykgYXMgdGY6CisgICAgd2l0aCBvcGVuKHRvZmlsZSkgYXMgdGY6CiAgICAgICAgIHRvbGluZXMgPSB0Zi5yZWFkbGluZXMoKQogCiAgICAgaWYgb3B0aW9ucy51OgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5IGIvVG9vbHMvc2NyaXB0cy9maW5kZGl2LnB5CmluZGV4IGYyNGE3MDIuLmE3MDVmNTYgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZmluZGRpdi5weQorKysgYi9Ub29scy9zY3JpcHRzL2ZpbmRkaXYucHkKQEAgLTcwLDcgKzcwLDcgQEAKIGRlZiBwcm9jZXNzZGlyKGRpciwgbGlzdG5hbWVzKToKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXIpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IGxpc3QgZGlyZWN0b3J5OiAlc1xuIiAlIGRpcikKICAgICAgICAgcmV0dXJuIDEKICAgICBmaWxlcyA9IFtdCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5IGIvVG9vbHMvc2NyaXB0cy9maW5kbGlua3N0by5weQppbmRleCBiNGMwOWVmLi5iOTI0ZjI3IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2ZpbmRsaW5rc3RvLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZmluZGxpbmtzdG8ucHkKQEAgLTM2LDcgKzM2LDcgQEAKICAgICAgICAgICAgIGxpbmt0byA9IG9zLnJlYWRsaW5rKG5hbWUpCiAgICAgICAgICAgICBpZiBwcm9nLnNlYXJjaChsaW5rdG8pIGlzIG5vdCBOb25lOgogICAgICAgICAgICAgICAgIHByaW50KG5hbWUsICctPicsIGxpbmt0bykKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHBhc3MKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvZml4Y2lkLnB5IGIvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKaW5kZXggODdlMmEwOS4uMWU0YzQyOCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9maXhjaWQucHkKQEAgLTk3LDcgKzk3LDcgQEAKICAgICBiYWQgPSAwCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIoZGlybmFtZSkKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKGRpcm5hbWUgKyAnOiBjYW5ub3QgbGlzdCBkaXJlY3Rvcnk6ICcgKyBzdHIobXNnKSArICdcbicpCiAgICAgICAgIHJldHVybiAxCiAgICAgbmFtZXMuc29ydCgpCkBAIC0xNzUsMTcgKzE3NSwxNyBAQAogICAgIHRyeToKICAgICAgICAgc3RhdGJ1ZiA9IG9zLnN0YXQoZmlsZW5hbWUpCiAgICAgICAgIG9zLmNobW9kKHRlbXBuYW1lLCBzdGF0YnVmW1NUX01PREVdICYgMG83Nzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIodGVtcG5hbWUgKyAnOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCcgKyBzdHIobXNnKSArICcpXG4nKQogICAgICMgVGhlbiBtYWtlIGEgYmFja3VwIG9mIHRoZSBvcmlnaW5hbCBmaWxlIGFzIGZpbGVuYW1lfgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBmaWxlbmFtZSArICd+JykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgZXJyKGZpbGVuYW1lICsgJzogd2FybmluZzogYmFja3VwIGZhaWxlZCAoJyArIHN0cihtc2cpICsgJylcbicpCiAgICAgIyBOb3cgbW92ZSB0aGUgdGVtcCBmaWxlIHRvIHRoZSBvcmlnaW5hbCBmaWxlCiAgICAgdHJ5OgogICAgICAgICBvcy5yZW5hbWUodGVtcG5hbWUsIGZpbGVuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoZmlsZW5hbWUgKyAnOiByZW5hbWUgZmFpbGVkICgnICsgc3RyKG1zZykgKyAnKVxuJykKICAgICAgICAgcmV0dXJuIDEKICAgICAjIFJldHVybiBzdWNjZXNzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL2ZpeGRpdi5weSBiL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CmluZGV4IDRlY2JlYTEuLjIwZjMzODYgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvZml4ZGl2LnB5CkBAIC0zMzUsOCArMzM1LDYgQEAKICAgICAgICAgc2VsZi5idWZmZXIuYXBwZW5kKGxpbmUpCiAgICAgICAgIHNlbGYubGluZW5vICs9IDEKICAgICAgICAgcmV0dXJuIGxpbmUKLSAgICBkZWYgdHJ1bmNhdGUoc2VsZik6Ci0gICAgICAgIGRlbCBzZWxmLmJ1ZmZlclstd2luZG93Ol0KICAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaW5kZXgpOgogICAgICAgICBzZWxmLmZpbGwoKQogICAgICAgICBidWZzdGFydCA9IHNlbGYubGluZW5vIC0gbGVuKHNlbGYuYnVmZmVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9ncHJvZjJodG1sLnB5IGIvVG9vbHMvc2NyaXB0cy9ncHJvZjJodG1sLnB5CmluZGV4IGFkODI4MzUuLjRjYTcwNWMgMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvZ3Byb2YyaHRtbC5weQorKysgYi9Ub29scy9zY3JpcHRzL2dwcm9mMmh0bWwucHkKQEAgLTIsNyArMiwxMSBAQAogCiAiIiJUcmFuc2Zvcm0gZ3Byb2YoMSkgb3V0cHV0IGludG8gdXNlZnVsIEhUTUwuIiIiCiAKLWltcG9ydCByZSwgb3MsIHN5cywgY2dpLCB3ZWJicm93c2VyCitpbXBvcnQgaHRtbAoraW1wb3J0IG9zCitpbXBvcnQgcmUKK2ltcG9ydCBzeXMKK2ltcG9ydCB3ZWJicm93c2VyCiAKIGhlYWRlciA9ICIiIlwKIDxodG1sPgpAQCAtMjIsNyArMjYsNyBAQAogZGVmIGFkZF9lc2NhcGVzKGZpbGVuYW1lKToKICAgICB3aXRoIG9wZW4oZmlsZW5hbWUpIGFzIGZwOgogICAgICAgICBmb3IgbGluZSBpbiBmcDoKLSAgICAgICAgICAgIHlpZWxkIGNnaS5lc2NhcGUobGluZSkKKyAgICAgICAgICAgIHlpZWxkIGh0bWwuZXNjYXBlKGxpbmUpCiAKIAogZGVmIG1haW4oKToKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvaDJweS5weSBiL1Rvb2xzL3NjcmlwdHMvaDJweS5weQppbmRleCA0Zjg3MWQ5Li4wOTY3ZmMyIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL2gycHkucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9oMnB5LnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICdeW1x0IF0qI1tcdCBdKmRlZmluZVtcdCBdKycKICAgJyhbYS16QS1aMC05X10rKVwoKFtfYS16QS1aXVtfYS16QS1aMC05XSopXClbXHQgXSsnKQogCi1wX2luY2x1ZGUgPSByZS5jb21waWxlKCdeW1x0IF0qI1tcdCBdKmluY2x1ZGVbXHQgXSs8KFthLXpBLVowLTlfL1wuXSspJykKK3BfaW5jbHVkZSA9IHJlLmNvbXBpbGUoJ15bXHQgXSojW1x0IF0qaW5jbHVkZVtcdCBdKzwoW14+XG5dKyk+JykKIAogcF9jb21tZW50ID0gcmUuY29tcGlsZShyJy9cKihbXipdK3xcKitbXi9dKSooXCorLyk/JykKIHBfY3BwX2NvbW1lbnQgPSByZS5jb21waWxlKCcvLy4qJykKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvaGlnaGxpZ2h0LnB5IGIvVG9vbHMvc2NyaXB0cy9oaWdobGlnaHQucHkKaW5kZXggYWZmNWNhZS4uNjZhZDg2OCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9oaWdobGlnaHQucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9oaWdobGlnaHQucHkKQEAgLTMsMTEgKzMsMTIgQEAKIAogX19hdXRob3JfXyA9ICdSYXltb25kIEhldHRpbmdlcicKIAotaW1wb3J0IGtleXdvcmQsIHRva2VuaXplLCBjZ2ksIHJlLCBmdW5jdG9vbHMKLXRyeToKLSAgICBpbXBvcnQgYnVpbHRpbnMKLWV4Y2VwdCBJbXBvcnRFcnJvcjoKLSAgICBpbXBvcnQgX19idWlsdGluX18gYXMgYnVpbHRpbnMKK2ltcG9ydCBidWlsdGlucworaW1wb3J0IGZ1bmN0b29scworaW1wb3J0IGh0bWwgYXMgaHRtbF9tb2R1bGUKK2ltcG9ydCBrZXl3b3JkCitpbXBvcnQgcmUKK2ltcG9ydCB0b2tlbml6ZQogCiAjIyMjIEFuYWx5emUgUHl0aG9uIFNvdXJjZSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtMTAxLDcgKzEwMiw3IEBACiAgICAgZm9yIGtpbmQsIHRleHQgaW4gY2xhc3NpZmllZF90ZXh0OgogICAgICAgICBpZiBraW5kOgogICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgnPHNwYW4gY2xhc3M9IiVzIj4nICUga2luZCkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChjZ2kuZXNjYXBlKHRleHQpKQorICAgICAgICByZXN1bHQuYXBwZW5kKGh0bWxfbW9kdWxlLmVzY2FwZSh0ZXh0KSkKICAgICAgICAgaWYga2luZDoKICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJzwvc3Bhbj4nKQogICAgIHJlc3VsdC5hcHBlbmQoY2xvc2VyKQpAQCAtMTQwLDcgKzE0MSw3IEBACiAgICAgJ0NyZWF0ZSBhIGNvbXBsZXRlIEhUTUwgcGFnZSB3aXRoIGNvbG9yaXplZCBzb3VyY2UgY29kZScKICAgICBjc3Nfc3RyID0gJ1xuJy5qb2luKFsnJXMgJXMnICUgaXRlbSBmb3IgaXRlbSBpbiBjc3MuaXRlbXMoKV0pCiAgICAgcmVzdWx0ID0gaHRtbF9oaWdobGlnaHQoY2xhc3NpZmllZF90ZXh0KQotICAgIHRpdGxlID0gY2dpLmVzY2FwZSh0aXRsZSkKKyAgICB0aXRsZSA9IGh0bWxfbW9kdWxlLmVzY2FwZSh0aXRsZSkKICAgICByZXR1cm4gaHRtbC5mb3JtYXQodGl0bGU9dGl0bGUsIGNzcz1jc3Nfc3RyLCBib2R5PXJlc3VsdCkKIAogIyMjIyBMYVRlWCBPdXRwdXQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xOTMsNyArMTk0LDExIEBACiAKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgICBpbXBvcnQgc3lzLCBhcmdwYXJzZSwgd2ViYnJvd3Nlciwgb3MsIHRleHR3cmFwCisgICAgaW1wb3J0IGFyZ3BhcnNlCisgICAgaW1wb3J0IG9zLnBhdGgKKyAgICBpbXBvcnQgc3lzCisgICAgaW1wb3J0IHRleHR3cmFwCisgICAgaW1wb3J0IHdlYmJyb3dzZXIKIAogICAgIHBhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKAogICAgICAgICAgICAgZGVzY3JpcHRpb24gPSAnQWRkIHN5bnRheCBoaWdobGlnaHRpbmcgdG8gUHl0aG9uIHNvdXJjZSBjb2RlJywKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkgYi9Ub29scy9zY3JpcHRzL2xpbmt0cmVlLnB5CmluZGV4IDk4MmY0ODAuLmU4M2YxOTggMTAwNzU1Ci0tLSBhL1Rvb2xzL3NjcmlwdHMvbGlua3RyZWUucHkKKysrIGIvVG9vbHMvc2NyaXB0cy9saW5rdHJlZS5weQpAQCAtMzIsMTMgKzMyLDEzIEBACiAgICAgICAgIHJldHVybiAxCiAgICAgdHJ5OgogICAgICAgICBvcy5ta2RpcihuZXd0cmVlLCAwbzc3NykKLSAgICBleGNlcHQgb3MuZXJyb3IgYXMgbXNnOgorICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgcHJpbnQobmV3dHJlZSArICc6IGNhbm5vdCBta2RpcjonLCBtc2cpCiAgICAgICAgIHJldHVybiAxCiAgICAgbGlua25hbWUgPSBvcy5wYXRoLmpvaW4obmV3dHJlZSwgbGluaykKICAgICB0cnk6CiAgICAgICAgIG9zLnN5bWxpbmsob3MucGF0aC5qb2luKG9zLnBhcmRpciwgb2xkdHJlZSksIGxpbmtuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBpZiBub3QgbGlua19tYXlfZmFpbDoKICAgICAgICAgICAgIHByaW50KGxpbmtuYW1lICsgJzogY2Fubm90IHN5bWxpbms6JywgbXNnKQogICAgICAgICAgICAgcmV0dXJuIDEKQEAgLTUxLDcgKzUxLDcgQEAKICAgICBpZiBkZWJ1ZzogcHJpbnQoJ2xpbmtuYW1lcycsIChvbGQsIG5ldywgbGluaykpCiAgICAgdHJ5OgogICAgICAgICBuYW1lcyA9IG9zLmxpc3RkaXIob2xkKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBwcmludChvbGQgKyAnOiB3YXJuaW5nOiBjYW5ub3QgbGlzdGRpcjonLCBtc2cpCiAgICAgICAgIHJldHVybgogICAgIGZvciBuYW1lIGluIG5hbWVzOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy9tZDVzdW0ucHkgYi9Ub29scy9zY3JpcHRzL21kNXN1bS5weQppbmRleCA1MjE5NjBjLi45Y2Y0YmRjIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL21kNXN1bS5weQorKysgYi9Ub29scy9zY3JpcHRzL21kNXN1bS5weQpAQCAtOSw3ICs5LDcgQEAKIHJtb2RlID0gJ3JiJwogCiB1c2FnZSA9ICIiIgotdXNhZ2U6IHN1bTUgWy1iXSBbLXRdIFstbF0gWy1zIGJ1ZnNpemVdIFtmaWxlIC4uLl0KK3VzYWdlOiBtZDVzdW0ucHkgWy1iXSBbLXRdIFstbF0gWy1zIGJ1ZnNpemVdIFtmaWxlIC4uLl0KIC1iICAgICAgICA6IHJlYWQgZmlsZXMgaW4gYmluYXJ5IG1vZGUgKGRlZmF1bHQpCiAtdCAgICAgICAgOiByZWFkIGZpbGVzIGluIHRleHQgbW9kZSAoeW91IGFsbW9zdCBjZXJ0YWlubHkgZG9uJ3Qgd2FudCB0aGlzISkKIC1sICAgICAgICA6IHByaW50IGxhc3QgcGF0aG5hbWUgY29tcG9uZW50IG9ubHkKQEAgLTE3LDYgKzE3LDcgQEAKIGZpbGUgLi4uICA6IGZpbGVzIHRvIHN1bTsgJy0nIG9yIG5vIGZpbGVzIG1lYW5zIHN0ZGluCiAiIiIgJSBidWZzaXplCiAKK2ltcG9ydCBpbwogaW1wb3J0IHN5cwogaW1wb3J0IG9zCiBpbXBvcnQgZ2V0b3B0CkBAIC0yNCw3ICsyNSw3IEBACiAKIGRlZiBzdW0oKmZpbGVzKToKICAgICBzdHMgPSAwCi0gICAgaWYgZmlsZXMgYW5kIGlzaW5zdGFuY2UoZmlsZXNbLTFdLCBmaWxlKToKKyAgICBpZiBmaWxlcyBhbmQgaXNpbnN0YW5jZShmaWxlc1stMV0sIGlvLklPQmFzZSk6CiAgICAgICAgIG91dCwgZmlsZXMgPSBmaWxlc1stMV0sIGZpbGVzWzotMV0KICAgICBlbHNlOgogICAgICAgICBvdXQgPSBzeXMuc3Rkb3V0CkBAIC01MywxMiArNTQsMTQgQEAKICAgICByZXR1cm4gc3RzCiAKIGRlZiBwcmludHN1bWZwKGZwLCBmaWxlbmFtZSwgb3V0PXN5cy5zdGRvdXQpOgotICAgIG0gPSBtZDUubmV3KCkKKyAgICBtID0gbWQ1KCkKICAgICB0cnk6CiAgICAgICAgIHdoaWxlIDE6CiAgICAgICAgICAgICBkYXRhID0gZnAucmVhZChidWZzaXplKQogICAgICAgICAgICAgaWYgbm90IGRhdGE6CiAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YSwgc3RyKToKKyAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5lbmNvZGUoZnAuZW5jb2RpbmcpCiAgICAgICAgICAgICBtLnVwZGF0ZShkYXRhKQogICAgIGV4Y2VwdCBJT0Vycm9yIGFzIG1zZzoKICAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgnJXM6IEkvTyBlcnJvcjogJXNcbicgJSAoZmlsZW5hbWUsIG1zZykpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL25kaWZmLnB5IGIvVG9vbHMvc2NyaXB0cy9uZGlmZi5weQppbmRleCAyNDIyMDkxLi5jNmQwOWI4IDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL25kaWZmLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvbmRpZmYucHkKQEAgLTYwLDcgKzYwLDcgQEAKICMgY291bGRuJ3QgYmUgb3BlbmVkCiBkZWYgZm9wZW4oZm5hbWUpOgogICAgIHRyeToKLSAgICAgICAgcmV0dXJuIG9wZW4oZm5hbWUsICdVJykKKyAgICAgICAgcmV0dXJuIG9wZW4oZm5hbWUpCiAgICAgZXhjZXB0IElPRXJyb3IgYXMgZGV0YWlsOgogICAgICAgICByZXR1cm4gZmFpbCgiY291bGRuJ3Qgb3BlbiAiICsgZm5hbWUgKyAiOiAiICsgc3RyKGRldGFpbCkpCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3NjcmlwdHMvcGFyc2VfaHRtbDVfZW50aXRpZXMucHkgYi9Ub29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMwMTEzMjgKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9zY3JpcHRzL3BhcnNlX2h0bWw1X2VudGl0aWVzLnB5CkBAIC0wLDAgKzEsMTA1IEBACisjIS91c3IvYmluL2VudiBweXRob24zCisiIiIKK1V0aWxpdHkgZm9yIHBhcnNpbmcgSFRNTDUgZW50aXR5IGRlZmluaXRpb25zIGF2YWlsYWJsZSBmcm9tOgorCisgICAgaHR0cDovL2Rldi53My5vcmcvaHRtbDUvc3BlYy9lbnRpdGllcy5qc29uCisKK1dyaXR0ZW4gYnkgRXppbyBNZWxvdHRpIGFuZCBJdWxpaWEgUHJvc2t1cm5pYS4KKworIiIiCisKK2ltcG9ydCBvcworaW1wb3J0IHN5cworaW1wb3J0IGpzb24KK2Zyb20gdXJsbGliLnJlcXVlc3QgaW1wb3J0IHVybG9wZW4KK2Zyb20gaHRtbC5lbnRpdGllcyBpbXBvcnQgaHRtbDUKKworZW50aXRpZXNfdXJsID0gJ2h0dHA6Ly9kZXYudzMub3JnL2h0bWw1L3NwZWMvZW50aXRpZXMuanNvbicKKworZGVmIGdldF9qc29uKHVybCk6CisgICAgIiIiRG93bmxvYWQgdGhlIGpzb24gZmlsZSBmcm9tIHRoZSB1cmwgYW5kIHJldHVybnMgYSBkZWNvZGVkIG9iamVjdC4iIiIKKyAgICB3aXRoIHVybG9wZW4odXJsKSBhcyBmOgorICAgICAgICBkYXRhID0gZi5yZWFkKCkuZGVjb2RlKCd1dGYtOCcpCisgICAgcmV0dXJuIGpzb24ubG9hZHMoZGF0YSkKKworZGVmIGNyZWF0ZV9kaWN0KGVudGl0aWVzKToKKyAgICAiIiJDcmVhdGUgdGhlIGh0bWw1IGRpY3QgZnJvbSB0aGUgZGVjb2RlZCBqc29uIG9iamVjdC4iIiIKKyAgICBuZXdfaHRtbDUgPSB7fQorICAgIGZvciBuYW1lLCB2YWx1ZSBpbiBlbnRpdGllcy5pdGVtcygpOgorICAgICAgICBuZXdfaHRtbDVbbmFtZS5sc3RyaXAoJyYnKV0gPSB2YWx1ZVsnY2hhcmFjdGVycyddCisgICAgcmV0dXJuIG5ld19odG1sNQorCitkZWYgY29tcGFyZV9kaWN0cyhvbGQsIG5ldyk6CisgICAgIiIiQ29tcGFyZSB0aGUgb2xkIGFuZCBuZXcgZGljdHMgYW5kIHByaW50IHRoZSBkaWZmZXJlbmNlcy4iIiIKKyAgICBhZGRlZCA9IG5ldy5rZXlzKCkgLSBvbGQua2V5cygpCisgICAgaWYgYWRkZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiBhZGRlZDonLmZvcm1hdChsZW4oYWRkZWQpKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gc29ydGVkKGFkZGVkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBuZXdbbmFtZV0pKQorICAgIHJlbW92ZWQgPSBvbGQua2V5cygpIC0gbmV3LmtleXMoKQorICAgIGlmIHJlbW92ZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiByZW1vdmVkOicuZm9ybWF0KGxlbihyZW1vdmVkKSkpCisgICAgICAgIGZvciBuYW1lIGluIHNvcnRlZChyZW1vdmVkKToKKyAgICAgICAgICAgIHByaW50KCcgIHshcn06IHshcn0nLmZvcm1hdChuYW1lLCBvbGRbbmFtZV0pKQorICAgIGNoYW5nZWQgPSBzZXQoKQorICAgIGZvciBuYW1lIGluIChvbGQua2V5cygpICYgbmV3LmtleXMoKSk6CisgICAgICAgIGlmIG9sZFtuYW1lXSAhPSBuZXdbbmFtZV06CisgICAgICAgICAgICBjaGFuZ2VkLmFkZCgobmFtZSwgb2xkW25hbWVdLCBuZXdbbmFtZV0pKQorICAgIGlmIGNoYW5nZWQ6CisgICAgICAgIHByaW50KCd7fSBlbnRpdGllKHMpIGhhdmUgYmVlbiBtb2RpZmllZDonLmZvcm1hdChsZW4oY2hhbmdlZCkpKQorICAgICAgICBmb3IgaXRlbSBpbiBzb3J0ZWQoY2hhbmdlZCk6CisgICAgICAgICAgICBwcmludCgnICB7IXJ9OiB7IXJ9IC0+IHshcn0nLmZvcm1hdCgqaXRlbSkpCisKK2RlZiB3cml0ZV9pdGVtcyhlbnRpdGllcywgZmlsZT1zeXMuc3Rkb3V0KToKKyAgICAiIiJXcml0ZSB0aGUgaXRlbXMgb2YgdGhlIGRpY3Rpb25hcnkgaW4gdGhlIHNwZWNpZmllZCBmaWxlLiIiIgorICAgICMgVGhlIGtleXMgaW4gdGhlIGdlbmVyYXRlZCBkaWN0aW9uYXJ5IHNob3VsZCBiZSBzb3J0ZWQKKyAgICAjIGluIGEgY2FzZS1pbnNlbnNpdGl2ZSB3YXksIGhvd2V2ZXIsIHdoZW4gdHdvIGtleXMgYXJlIGVxdWFsLAorICAgICMgdGhlIHVwcGVyY2FzZSB2ZXJzaW9uIHNob3VsZCBjb21lIGZpcnN0IHNvIHRoYXQgdGhlIHJlc3VsdAorICAgICMgbG9va3MgbGlrZTogWydBYWN1dGUnLCAnYWFjdXRlJywgJ0FhY3V0ZTsnLCAnYWFjdXRlOycsIC4uLl0KKyAgICAjIFRvIGRvIHRoaXMgd2UgZmlyc3Qgc29ydCBpbiBhIGNhc2Utc2Vuc2l0aXZlIHdheSAoc28gYWxsIHRoZQorICAgICMgdXBwZXJjYXNlIGNoYXJzIGNvbWUgZmlyc3QpIGFuZCB0aGVuIHNvcnQgd2l0aCBrZXk9c3RyLmxvd2VyLgorICAgICMgU2luY2UgdGhlIHNvcnRpbmcgaXMgc3RhYmxlIHRoZSB1cHBlcmNhc2Uga2V5cyB3aWxsIGV2ZW50dWFsbHkKKyAgICAjIGJlIGJlZm9yZSB0aGVpciBlcXVpdmFsZW50IGxvd2VyY2FzZSB2ZXJzaW9uLgorICAgIGtleXMgPSBzb3J0ZWQoZW50aXRpZXMua2V5cygpKQorICAgIGtleXMgPSBzb3J0ZWQoa2V5cywga2V5PXN0ci5sb3dlcikKKyAgICBwcmludCgnaHRtbDUgPSB7JywgZmlsZT1maWxlKQorICAgIGZvciBuYW1lIGluIGtleXM6CisgICAgICAgIHByaW50KCcgICAgeyFyfTogeyFhfSwnLmZvcm1hdChuYW1lLCBlbnRpdGllc1tuYW1lXSksIGZpbGU9ZmlsZSkKKyAgICBwcmludCgnfScsIGZpbGU9ZmlsZSkKKworCitpZiBfX25hbWVfXyA9PSAnX19tYWluX18nOgorICAgICMgd2l0aG91dCBhcmdzIHByaW50IGEgZGlmZiBiZXR3ZWVuIGh0bWwuZW50aXRpZXMuaHRtbDUgYW5kIG5ld19odG1sNQorICAgICMgd2l0aCAtLWNyZWF0ZSBwcmludCB0aGUgbmV3IGh0bWw1IGRpY3QKKyAgICAjIHdpdGggLS1wYXRjaCBwYXRjaCB0aGUgTGliL2h0bWwvZW50aXRpZXMucHkgZmlsZQorICAgIG5ld19odG1sNSA9IGNyZWF0ZV9kaWN0KGdldF9qc29uKGVudGl0aWVzX3VybCkpCisgICAgaWYgJy0tY3JlYXRlJyBpbiBzeXMuYXJndjoKKyAgICAgICAgcHJpbnQoJyMgbWFwIHRoZSBIVE1MNSBuYW1lZCBjaGFyYWN0ZXIgcmVmZXJlbmNlcyB0byB0aGUgJworICAgICAgICAgICAgICAnZXF1aXZhbGVudCBVbmljb2RlIGNoYXJhY3RlcihzKScpCisgICAgICAgIHByaW50KCcjIEdlbmVyYXRlZCBieSB7fS4gIERvIG5vdCBlZGl0IG1hbnVhbGx5LicuZm9ybWF0KF9fZmlsZV9fKSkKKyAgICAgICAgd3JpdGVfaXRlbXMobmV3X2h0bWw1KQorICAgIGVsaWYgJy0tcGF0Y2gnIGluIHN5cy5hcmd2OgorICAgICAgICBmbmFtZSA9ICdMaWIvaHRtbC9lbnRpdGllcy5weScKKyAgICAgICAgdGVtcF9mbmFtZSA9IGZuYW1lICsgJy50ZW1wJworICAgICAgICB3aXRoIG9wZW4oZm5hbWUpIGFzIGYxLCBvcGVuKHRlbXBfZm5hbWUsICd3JykgYXMgZjI6CisgICAgICAgICAgICBza2lwID0gRmFsc2UKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGYxOgorICAgICAgICAgICAgICAgIGlmIGxpbmUuc3RhcnRzd2l0aCgnaHRtbDUgPSB7Jyk6CisgICAgICAgICAgICAgICAgICAgIHdyaXRlX2l0ZW1zKG5ld19odG1sNSwgZmlsZT1mMikKKyAgICAgICAgICAgICAgICAgICAgc2tpcCA9IFRydWUKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBpZiBza2lwOgorICAgICAgICAgICAgICAgICAgICAjIHNraXAgdGhlIG9sZCBpdGVtcyB1bnRpbCB0aGUgfQorICAgICAgICAgICAgICAgICAgICBpZiBsaW5lLnN0YXJ0c3dpdGgoJ30nKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNraXAgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgICAgIGYyLndyaXRlKGxpbmUpCisgICAgICAgIG9zLnJlbW92ZShmbmFtZSkKKyAgICAgICAgb3MucmVuYW1lKHRlbXBfZm5hbWUsIGZuYW1lKQorICAgIGVsc2U6CisgICAgICAgIGlmIGh0bWw1ID09IG5ld19odG1sNToKKyAgICAgICAgICAgIHByaW50KCdUaGUgY3VycmVudCBkaWN0aW9uYXJ5IGlzIHVwZGF0ZWQuJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGNvbXBhcmVfZGljdHMoaHRtbDUsIG5ld19odG1sNSkKKyAgICAgICAgICAgIHByaW50KCdSdW4gIi4vcHl0aG9uIHswfSAtLXBhdGNoIiB0byB1cGRhdGUgTGliL2h0bWwvZW50aXRpZXMuaHRtbCAnCisgICAgICAgICAgICAgICAgICAnb3IgIi4vcHl0aG9uIHswfSAtLWNyZWF0ZSIgdG8gc2VlIHRoZSBnZW5lcmF0ZWQgJyAnZGljdGlvbmFyeS4nLmZvcm1hdChfX2ZpbGVfXykpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkgYi9Ub29scy9zY3JpcHRzL3BhdGNoY2hlY2sucHkKaW5kZXggNmY5ODIxYi4uNThiMDgxYSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wYXRjaGNoZWNrLnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGF0Y2hjaGVjay5weQpAQCAtNDksMTUgKzQ5LDMxIEBACiBAc3RhdHVzKCJHZXR0aW5nIHRoZSBsaXN0IG9mIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGFkZGVkL2NoYW5nZWQiLAogICAgICAgICBpbmZvPWxhbWJkYSB4OiBuX2ZpbGVzX3N0cihsZW4oeCkpKQogZGVmIGNoYW5nZWRfZmlsZXMoKToKLSAgICAiIiJHZXQgdGhlIGxpc3Qgb2YgY2hhbmdlZCBvciBhZGRlZCBmaWxlcyBmcm9tIE1lcmN1cmlhbC4iIiIKLSAgICBpZiBub3Qgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oU1JDRElSLCAnLmhnJykpOgotICAgICAgICBzeXMuZXhpdCgnbmVlZCBhIGNoZWNrb3V0IHRvIGdldCBtb2RpZmllZCBmaWxlcycpCi0KLSAgICBjbWQgPSAnaGcgc3RhdHVzIC0tYWRkZWQgLS1tb2RpZmllZCAtLW5vLXN0YXR1cycKLSAgICBpZiBtcV9wYXRjaGVzX2FwcGxpZWQoKToKLSAgICAgICAgY21kICs9ICcgLS1yZXYgcXBhcmVudCcKLSAgICB3aXRoIHN1YnByb2Nlc3MuUG9wZW4oY21kLnNwbGl0KCksIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUpIGFzIHN0OgotICAgICAgICByZXR1cm4gW3guZGVjb2RlKCkucnN0cmlwKCkgZm9yIHggaW4gc3Quc3Rkb3V0XQorICAgICIiIkdldCB0aGUgbGlzdCBvZiBjaGFuZ2VkIG9yIGFkZGVkIGZpbGVzIGZyb20gTWVyY3VyaWFsIG9yIGdpdC4iIiIKKyAgICBpZiBvcy5wYXRoLmlzZGlyKG9zLnBhdGguam9pbihTUkNESVIsICcuaGcnKSk6CisgICAgICAgIGNtZCA9ICdoZyBzdGF0dXMgLS1hZGRlZCAtLW1vZGlmaWVkIC0tbm8tc3RhdHVzJworICAgICAgICBpZiBtcV9wYXRjaGVzX2FwcGxpZWQoKToKKyAgICAgICAgICAgIGNtZCArPSAnIC0tcmV2IHFwYXJlbnQnCisgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihjbWQuc3BsaXQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgc3Q6CisgICAgICAgICAgICByZXR1cm4gW3guZGVjb2RlKCkucnN0cmlwKCkgZm9yIHggaW4gc3Quc3Rkb3V0XQorICAgIGVsaWYgb3MucGF0aC5pc2Rpcihvcy5wYXRoLmpvaW4oU1JDRElSLCAnLmdpdCcpKToKKyAgICAgICAgY21kID0gJ2dpdCBzdGF0dXMgLS1wb3JjZWxhaW4nCisgICAgICAgIGZpbGVuYW1lcyA9IFtdCisgICAgICAgIHdpdGggc3VicHJvY2Vzcy5Qb3BlbihjbWQuc3BsaXQoKSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkgYXMgc3Q6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBzdC5zdGRvdXQ6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmUuZGVjb2RlKCkucnN0cmlwKCkKKyAgICAgICAgICAgICAgICBzdGF0dXMgPSBzZXQobGluZVs6Ml0pCisgICAgICAgICAgICAgICAgIyBtb2RpZmllZCwgYWRkZWQgb3IgdW5tZXJnZWQgZmlsZXMKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzLmludGVyc2VjdGlvbignTUFVJyk6CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBsaW5lWzM6XQorICAgICAgICAgICAgICAgIGlmICcgLT4gJyBpbiBmaWxlbmFtZToKKyAgICAgICAgICAgICAgICAgICAgIyBmaWxlIGlzIHJlbmFtZWQKKyAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZS5zcGxpdCgnIC0+ICcsIDIpWzFdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBmaWxlbmFtZXMuYXBwZW5kKGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gZmlsZW5hbWVzCisgICAgZWxzZToKKyAgICAgICAgc3lzLmV4aXQoJ25lZWQgYSBNZXJjdXJpYWwgb3IgZ2l0IGNoZWNrb3V0IHRvIGdldCBtb2RpZmllZCBmaWxlcycpCiAKIAogZGVmIHJlcG9ydF9tb2RpZmllZF9maWxlcyhmaWxlX3BhdGhzKToKQEAgLTE1Miw3ICsxNjgsOCBAQAogICAgIGZpbGVfcGF0aHMgPSBjaGFuZ2VkX2ZpbGVzKCkKICAgICBweXRob25fZmlsZXMgPSBbZm4gZm9yIGZuIGluIGZpbGVfcGF0aHMgaWYgZm4uZW5kc3dpdGgoJy5weScpXQogICAgIGNfZmlsZXMgPSBbZm4gZm9yIGZuIGluIGZpbGVfcGF0aHMgaWYgZm4uZW5kc3dpdGgoKCcuYycsICcuaCcpKV0KLSAgICBkb2NfZmlsZXMgPSBbZm4gZm9yIGZuIGluIGZpbGVfcGF0aHMgaWYgZm4uc3RhcnRzd2l0aCgnRG9jJyldCisgICAgZG9jX2ZpbGVzID0gW2ZuIGZvciBmbiBpbiBmaWxlX3BhdGhzIGlmIGZuLnN0YXJ0c3dpdGgoJ0RvYycpIGFuZAorICAgICAgICAgICAgICAgICBmbi5lbmRzd2l0aCgoJy5yc3QnLCAnLmluYycpKV0KICAgICBtaXNjX2ZpbGVzID0ge29zLnBhdGguam9pbignTWlzYycsICdBQ0tTJyksIG9zLnBhdGguam9pbignTWlzYycsICdORVdTJyl9XAogICAgICAgICAgICAgJiBzZXQoZmlsZV9wYXRocykKICAgICAjIFBFUCA4IHdoaXRlc3BhY2UgcnVsZXMgZW5mb3JjZW1lbnQuCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkgYi9Ub29scy9zY3JpcHRzL3BhdGhmaXgucHkKaW5kZXggMTNjYTg2Ni4uMjI0MzJkMSAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9wYXRoZml4LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGF0aGZpeC5weQpAQCAtNzMsNyArNzMsNyBAQAogICAgIGJhZCA9IDAKICAgICB0cnk6CiAgICAgICAgIG5hbWVzID0gb3MubGlzdGRpcihkaXJuYW1lKQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiBjYW5ub3QgbGlzdCBkaXJlY3Rvcnk6ICVyXG4nICUgKGRpcm5hbWUsIG1zZykpCiAgICAgICAgIHJldHVybiAxCiAgICAgbmFtZXMuc29ydCgpCkBAIC0xMzEsMjQgKzEzMSwyNCBAQAogICAgICAgICBtdGltZSA9IHN0YXRidWYuc3RfbXRpbWUKICAgICAgICAgYXRpbWUgPSBzdGF0YnVmLnN0X2F0aW1lCiAgICAgICAgIG9zLmNobW9kKHRlbXBuYW1lLCBzdGF0YnVmW1NUX01PREVdICYgMG83Nzc3KQotICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgZXhjZXB0IE9TRXJyb3IgYXMgbXNnOgogICAgICAgICBlcnIoJyVzOiB3YXJuaW5nOiBjaG1vZCBmYWlsZWQgKCVyKVxuJyAlICh0ZW1wbmFtZSwgbXNnKSkKICAgICAjIFRoZW4gbWFrZSBhIGJhY2t1cCBvZiB0aGUgb3JpZ2luYWwgZmlsZSBhcyBmaWxlbmFtZX4KICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgZmlsZW5hbWUgKyAnficpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHdhcm5pbmc6IGJhY2t1cCBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAjIE5vdyBtb3ZlIHRoZSB0ZW1wIGZpbGUgdG8gdGhlIG9yaWdpbmFsIGZpbGUKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZSh0ZW1wbmFtZSwgZmlsZW5hbWUpCi0gICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICBleGNlcHQgT1NFcnJvciBhcyBtc2c6CiAgICAgICAgIGVycignJXM6IHJlbmFtZSBmYWlsZWQgKCVyKVxuJyAlIChmaWxlbmFtZSwgbXNnKSkKICAgICAgICAgcmV0dXJuIDEKICAgICBpZiBwcmVzZXJ2ZV90aW1lc3RhbXBzOgogICAgICAgICBpZiBhdGltZSBhbmQgbXRpbWU6CiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgb3MudXRpbWUoZmlsZW5hbWUsIChhdGltZSwgbXRpbWUpKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yIGFzIG1zZzoKKyAgICAgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgICAgICBlcnIoJyVzOiByZXNldCBvZiB0aW1lc3RhbXAgZmFpbGVkICglcilcbicgJSAoZmlsZW5hbWUsIG1zZykpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDEKICAgICAjIFJldHVybiBzdWNjZXNzCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkgYi9Ub29scy9zY3JpcHRzL3BpbmRlbnQucHkKaW5kZXggMjg3MmRjMC4uMzMzMzQyMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy9waW5kZW50LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcGluZGVudC5weQpAQCAtMzc2LDEzICszNzYsMTMgQEAKICAgICBpZiBvcy5wYXRoLmxleGlzdHMoYmFja3VwKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MucmVtb3ZlKGJhY2t1cCkKLSAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIHByaW50KCJDYW4ndCByZW1vdmUgYmFja3VwICVyIiAlIChiYWNrdXAsKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICAjIGVuZCB0cnkKICAgICAjIGVuZCBpZgogICAgIHRyeToKICAgICAgICAgb3MucmVuYW1lKGZpbGVuYW1lLCBiYWNrdXApCi0gICAgZXhjZXB0IG9zLmVycm9yOgorICAgIGV4Y2VwdCBPU0Vycm9yOgogICAgICAgICBwcmludCgiQ2FuJ3QgcmVuYW1lICVyIHRvICVyIiAlIChmaWxlbmFtZSwgYmFja3VwKSwgZmlsZT1zeXMuc3RkZXJyKQogICAgICMgZW5kIHRyeQogIyBlbmQgZGVmIG1ha2VfYmFja3VwCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3B5ZG9jZ3VpLnB5dyBiL1Rvb2xzL3NjcmlwdHMvcHlkb2NndWkucHl3CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTlhM2Q2Li4wMDAwMDAwCi0tLSBhL1Rvb2xzL3NjcmlwdHMvcHlkb2NndWkucHl3CisrKyAvZGV2L251bGwKQEAgLTEsNyArMCwwIEBACi0jIE5vdGU6ICB0aGlzIGZpbGUgbXVzdCBub3QgYmUgbmFtZWQgcHlkb2MucHl3LCBsZXN0IGl0IGp1c3QgZW5kIHVwCi0jIGltcG9ydGluZyBpdHNlbGYgKFB5dGhvbiBiZWdhbiBhbGxvd2luZyBpbXBvcnQgb2YgLnB5dyBmaWxlcwotIyBiZXR3ZWVuIDIuMmExIGFuZCAyLjJhMikuCi1pbXBvcnQgcHlkb2MKLQotaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKLSAgIHB5ZG9jLmd1aSgpCmRpZmYgLS1naXQgYS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5IGIvVG9vbHMvc2NyaXB0cy9yZWluZGVudC5weQppbmRleCA0YTkxNmVhLi4xODQyNGRlIDEwMDc1NQotLS0gYS9Ub29scy9zY3JpcHRzL3JlaW5kZW50LnB5CisrKyBiL1Rvb2xzL3NjcmlwdHMvcmVpbmRlbnQucHkKQEAgLTUyLDggKzUyLDggQEAKIHJlY3Vyc2UgPSBGYWxzZQogZHJ5cnVuID0gRmFsc2UKIG1ha2ViYWNrdXAgPSBUcnVlCisjIEEgc3BlY2lmaWVkIG5ld2xpbmUgdG8gYmUgdXNlZCBpbiB0aGUgb3V0cHV0IChzZXQgYnkgLS1uZXdsaW5lIG9wdGlvbikKIHNwZWNfbmV3bGluZSA9IE5vbmUKLSIiIkEgc3BlY2lmaWVkIG5ld2xpbmUgdG8gYmUgdXNlZCBpbiB0aGUgb3V0cHV0IChzZXQgYnkgLS1uZXdsaW5lIG9wdGlvbikiIiIKIAogCiBkZWYgdXNhZ2UobXNnPU5vbmUpOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weSBiL1Rvb2xzL3NjcmlwdHMvdHJlZXN5bmMucHkKaW5kZXggYjI2NDljNC4uNjUyZDM5NCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy90cmVlc3luYy5weQorKysgYi9Ub29scy9zY3JpcHRzL3RyZWVzeW5jLnB5CkBAIC03OCw3ICs3OCw3IEBACiAgICAgICAgIHByaW50KCJjcmVhdGluZyBzbGF2ZSBkaXJlY3RvcnkiLCBzbGF2ZSkKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgb3MubWtkaXIoc2xhdmUpCi0gICAgICAgIGV4Y2VwdCBvcy5lcnJvciBhcyBtc2c6CisgICAgICAgIGV4Y2VwdCBPU0Vycm9yIGFzIG1zZzoKICAgICAgICAgICAgIHByaW50KCJjYW4ndCBtYWtlIHNsYXZlIGRpcmVjdG9yeSIsIHNsYXZlLCAiOiIsIG1zZykKICAgICAgICAgICAgIHJldHVybgogICAgICAgICBlbHNlOgpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weSBiL1Rvb2xzL3NjcmlwdHMvdW50YWJpZnkucHkKaW5kZXggNGI2N2MxNS4uODYxYzgzYyAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy91bnRhYmlmeS5weQorKysgYi9Ub29scy9zY3JpcHRzL3VudGFiaWZ5LnB5CkBAIC0zOSwxMSArMzksMTEgQEAKICAgICBiYWNrdXAgPSBmaWxlbmFtZSArICJ+IgogICAgIHRyeToKICAgICAgICAgb3MudW5saW5rKGJhY2t1cCkKLSAgICBleGNlcHQgb3MuZXJyb3I6CisgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgIHBhc3MKICAgICB0cnk6CiAgICAgICAgIG9zLnJlbmFtZShmaWxlbmFtZSwgYmFja3VwKQotICAgIGV4Y2VwdCBvcy5lcnJvcjoKKyAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgcGFzcwogICAgIHdpdGggb3BlbihmaWxlbmFtZSwgInciLCBlbmNvZGluZz1lbmNvZGluZykgYXMgZjoKICAgICAgICAgZi53cml0ZShuZXd0ZXh0KQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy93aGljaC5weSBiL1Rvb2xzL3NjcmlwdHMvd2hpY2gucHkKaW5kZXggNGZjMzdhMC4uZGY1NGNlMCAxMDA3NTUKLS0tIGEvVG9vbHMvc2NyaXB0cy93aGljaC5weQorKysgYi9Ub29scy9zY3JpcHRzL3doaWNoLnB5CkBAIC0yOSw3ICsyOSw3IEBACiAgICAgICAgICAgICBmaWxlbmFtZSA9IG9zLnBhdGguam9pbihkaXIsIHByb2cpCiAgICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICAgc3QgPSBvcy5zdGF0KGZpbGVuYW1lKQotICAgICAgICAgICAgZXhjZXB0IG9zLmVycm9yOgorICAgICAgICAgICAgZXhjZXB0IE9TRXJyb3I6CiAgICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgIGlmIG5vdCBTX0lTUkVHKHN0W1NUX01PREVdKToKICAgICAgICAgICAgICAgICBtc2coZmlsZW5hbWUgKyAnOiBub3QgYSBkaXNrIGZpbGUnKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc2NyaXB0cy93aW5fYWRkMnBhdGgucHkgYi9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQppbmRleCA5MjU5YjQ0Li5jODViZWE1IDEwMDY0NAotLS0gYS9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQorKysgYi9Ub29scy9zY3JpcHRzL3dpbl9hZGQycGF0aC5weQpAQCAtMzAsNyArMzAsNyBAQAogICAgIHdpdGggd2lucmVnLkNyZWF0ZUtleShIS0NVLCBFTlYpIGFzIGtleToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgZW52cGF0aCA9IHdpbnJlZy5RdWVyeVZhbHVlRXgoa2V5LCBQQVRIKVswXQotICAgICAgICBleGNlcHQgV2luZG93c0Vycm9yOgorICAgICAgICBleGNlcHQgT1NFcnJvcjoKICAgICAgICAgICAgIGVudnBhdGggPSBERUZBVUxUCiAKICAgICAgICAgcGF0aHMgPSBbZW52cGF0aF0KZGlmZiAtLWdpdCBhL1Rvb2xzL3NzbC9tYWtlX3NzbF9kYXRhLnB5IGIvVG9vbHMvc3NsL21ha2Vfc3NsX2RhdGEucHkKaW5kZXggMTAyNDRkMS4uM2ZiNDk4NSAxMDA3NTUKLS0tIGEvVG9vbHMvc3NsL21ha2Vfc3NsX2RhdGEucHkKKysrIGIvVG9vbHMvc3NsL21ha2Vfc3NsX2RhdGEucHkKQEAgLTUsOCArNSw3IEBACiBgbGlicmFyeWAgYW5kIGByZWFzb25gIG1uZW1ub25pY3MgdG8gYSBtb3JlIHJlY2VudCBPcGVuU1NMIHZlcnNpb24uCiAKIEl0IHRha2VzIHR3byBhcmd1bWVudHM6Ci0tIHRoZSBwYXRoIHRvIHRoZSBPcGVuU1NMIGluY2x1ZGUgZmlsZXMnIGRpcmVjdG9yeQotICAoZS5nLiBvcGVuc3NsLTEuMC4xLWJldGEzL2luY2x1ZGUvb3BlbnNzbC8pCistIHRoZSBwYXRoIHRvIHRoZSBPcGVuU1NMIHNvdXJjZSB0cmVlIChlLmcuIGdpdCBjaGVja291dCkKIC0gdGhlIHBhdGggdG8gdGhlIEMgZmlsZSB0byBiZSBnZW5lcmF0ZWQKICAgKHByb2JhYmx5IE1vZHVsZXMvX3NzbF9kYXRhLmgpCiAiIiIKQEAgLTE1LDkgKzE0LDEwIEBACiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHN5cworaW1wb3J0IF9zc2wKIAogCi1kZWYgcGFyc2VfZXJyb3JfY29kZXMoaF9maWxlLCBwcmVmaXgpOgorZGVmIHBhcnNlX2Vycm9yX2NvZGVzKGhfZmlsZSwgcHJlZml4LCBsaWJjb2RlKToKICAgICBwYXQgPSByZS5jb21waWxlKHIiI2RlZmluZVxXKyglcyhbXHddKykpXFcrKFxkKylcYiIgJSByZS5lc2NhcGUocHJlZml4KSkKICAgICBjb2RlcyA9IFtdCiAgICAgd2l0aCBvcGVuKGhfZmlsZSwgInIiLCBlbmNvZGluZz0ibGF0aW4xIikgYXMgZjoKQEAgLTI2LDcgKzI2LDggQEAKICAgICAgICAgICAgIGlmIG1hdGNoOgogICAgICAgICAgICAgICAgIGNvZGUsIG5hbWUsIG51bSA9IG1hdGNoLmdyb3VwcygpCiAgICAgICAgICAgICAgICAgbnVtID0gaW50KG51bSkKLSAgICAgICAgICAgICAgICBjb2Rlcy5hcHBlbmQoKGNvZGUsIG5hbWUsIG51bSkpCisgICAgICAgICAgICAgICAgIyBlLmcuICgiU1NMX1JfQkFEX0RBVEEiLCAoIkVSUl9MSUJfU1NMIiwgIkJBRF9EQVRBIiwgMzkwKSkKKyAgICAgICAgICAgICAgICBjb2Rlcy5hcHBlbmQoKGNvZGUsIChsaWJjb2RlLCBuYW1lLCBudW0pKSkKICAgICByZXR1cm4gY29kZXMKIAogaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKQEAgLTM0LDEyICszNSwzMiBAQAogICAgIG91dGZpbGUgPSBzeXMuYXJndlsyXQogICAgIHVzZV9zdGRvdXQgPSBvdXRmaWxlID09ICctJwogICAgIGYgPSBzeXMuc3Rkb3V0IGlmIHVzZV9zdGRvdXQgZWxzZSBvcGVuKG91dGZpbGUsICJ3IikKLSAgICBlcnJvcl9saWJyYXJpZXMgPSAoCi0gICAgICAgICMgKGxpYnJhcnkgY29kZSwgbW5lbW9uaWMsIGVycm9yIHByZWZpeCwgaGVhZGVyIGZpbGUpCi0gICAgICAgICgnRVJSX0xJQl9QRU0nLCAnUEVNJywgJ1BFTV9SXycsICdwZW0uaCcpLAotICAgICAgICAoJ0VSUl9MSUJfU1NMJywgJ1NTTCcsICdTU0xfUl8nLCAnc3NsLmgnKSwKLSAgICAgICAgKCdFUlJfTElCX1g1MDknLCAnWDUwOScsICdYNTA5X1JfJywgJ3g1MDkuaCcpLAotICAgICAgICApCisgICAgZXJyb3JfbGlicmFyaWVzID0geworICAgICAgICAjIG1uZW1vbmljIC0+IChsaWJyYXJ5IGNvZGUsIGVycm9yIHByZWZpeCwgaGVhZGVyIGZpbGUpCisgICAgICAgICdQRU0nOiAoJ0VSUl9MSUJfUEVNJywgJ1BFTV9SXycsICdjcnlwdG8vcGVtL3BlbS5oJyksCisgICAgICAgICdTU0wnOiAoJ0VSUl9MSUJfU1NMJywgJ1NTTF9SXycsICdzc2wvc3NsLmgnKSwKKyAgICAgICAgJ1g1MDknOiAoJ0VSUl9MSUJfWDUwOScsICdYNTA5X1JfJywgJ2NyeXB0by94NTA5L3g1MDkuaCcpLAorICAgICAgICB9CisKKyAgICAjIFJlYWQgY29kZXMgZnJvbSBsaWJyYXJpZXMKKyAgICBuZXdfY29kZXMgPSBbXQorICAgIGZvciBsaWJjb2RlLCBwcmVmaXgsIGhfZmlsZSBpbiBzb3J0ZWQoZXJyb3JfbGlicmFyaWVzLnZhbHVlcygpKToKKyAgICAgICAgbmV3X2NvZGVzICs9IHBhcnNlX2Vycm9yX2NvZGVzKG9zLnBhdGguam9pbihvcGVuc3NsX2luYywgaF9maWxlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCwgbGliY29kZSkKKyAgICBuZXdfY29kZV9udW1zID0gc2V0KChsaWJjb2RlLCBudW0pCisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvZGUsIChsaWJjb2RlLCBuYW1lLCBudW0pKSBpbiBuZXdfY29kZXMpCisKKyAgICAjIE1lcmdlIHdpdGggZXhpc3RpbmcgY29kZXMgKGluIGNhc2Ugc29tZSBvbGQgY29kZXMgZGlzYXBwZWFyZWQpLgorICAgIGNvZGVzID0ge30KKyAgICBmb3IgZXJybmFtZSwgKGxpYm51bSwgZXJybnVtKSBpbiBfc3NsLmVycl9uYW1lc190b19jb2Rlcy5pdGVtcygpOgorICAgICAgICBsaWIgPSBlcnJvcl9saWJyYXJpZXNbX3NzbC5saWJfY29kZXNfdG9fbmFtZXNbbGlibnVtXV0KKyAgICAgICAgbGliY29kZSA9IGxpYlswXSAgICAgICAgICAgICAgIyBlLmcuIEVSUl9MSUJfUEVNCisgICAgICAgIGVycmNvZGUgPSBsaWJbMV0gKyBlcnJuYW1lICAgICMgZS5nLiBTU0xfUl9CQURfU1NMX1NFU1NJT05fSURfTEVOR1RICisgICAgICAgICMgT25seSBrZWVwIGl0IGlmIHRoZSBudW1lcmljIGNvZGVzIHdlcmVuJ3QgcmV1c2VkCisgICAgICAgIGlmIChsaWJjb2RlLCBlcnJudW0pIG5vdCBpbiBuZXdfY29kZV9udW1zOgorICAgICAgICAgICAgY29kZXNbZXJyY29kZV0gPSBsaWJjb2RlLCBlcnJuYW1lLCBlcnJudW0KKyAgICBjb2Rlcy51cGRhdGUoZGljdChuZXdfY29kZXMpKQorCiAgICAgZGVmIHcobCk6CiAgICAgICAgIGYud3JpdGUobCArICJcbiIpCiAgICAgdygiLyogRmlsZSBnZW5lcmF0ZWQgYnkgVG9vbHMvc3NsL21ha2Vfc3NsX2RhdGEucHkgKi8iKQpAQCAtNDcsMjEgKzY4LDE5IEBACiAgICAgdygiIikKIAogICAgIHcoInN0YXRpYyBzdHJ1Y3QgcHlfc3NsX2xpYnJhcnlfY29kZSBsaWJyYXJ5X2NvZGVzW10gPSB7IikKLSAgICBmb3IgbGliY29kZSwgbW5lbW8sIF8sIF8gaW4gZXJyb3JfbGlicmFyaWVzOgorICAgIGZvciBtbmVtbywgKGxpYmNvZGUsIF8sIF8pIGluIHNvcnRlZChlcnJvcl9saWJyYXJpZXMuaXRlbXMoKSk6CiAgICAgICAgIHcoJyAgICB7IiVzIiwgJXN9LCcgJSAobW5lbW8sIGxpYmNvZGUpKQogICAgIHcoJyAgICB7IE5VTEwgfScpCiAgICAgdygnfTsnKQogICAgIHcoIiIpCiAKICAgICB3KCJzdGF0aWMgc3RydWN0IHB5X3NzbF9lcnJvcl9jb2RlIGVycm9yX2NvZGVzW10gPSB7IikKLSAgICBmb3IgbGliY29kZSwgXywgcHJlZml4LCBoX2ZpbGUgaW4gZXJyb3JfbGlicmFyaWVzOgotICAgICAgICBjb2RlcyA9IHBhcnNlX2Vycm9yX2NvZGVzKG9zLnBhdGguam9pbihvcGVuc3NsX2luYywgaF9maWxlKSwgcHJlZml4KQotICAgICAgICBmb3IgY29kZSwgbmFtZSwgbnVtIGluIHNvcnRlZChjb2Rlcyk6Ci0gICAgICAgICAgICB3KCcgICNpZmRlZiAlcycgJSAoY29kZSkpCi0gICAgICAgICAgICB3KCcgICAgeyIlcyIsICVzLCAlc30sJyAlIChuYW1lLCBsaWJjb2RlLCBjb2RlKSkKLSAgICAgICAgICAgIHcoJyAgI2Vsc2UnKQotICAgICAgICAgICAgdygnICAgIHsiJXMiLCAlcywgJWR9LCcgJSAobmFtZSwgbGliY29kZSwgbnVtKSkKLSAgICAgICAgICAgIHcoJyAgI2VuZGlmJykKKyAgICBmb3IgZXJyY29kZSwgKGxpYmNvZGUsIG5hbWUsIG51bSkgaW4gc29ydGVkKGNvZGVzLml0ZW1zKCkpOgorICAgICAgICB3KCcgICNpZmRlZiAlcycgJSAoZXJyY29kZSkpCisgICAgICAgIHcoJyAgICB7IiVzIiwgJXMsICVzfSwnICUgKG5hbWUsIGxpYmNvZGUsIGVycmNvZGUpKQorICAgICAgICB3KCcgICNlbHNlJykKKyAgICAgICAgdygnICAgIHsiJXMiLCAlcywgJWR9LCcgJSAobmFtZSwgbGliY29kZSwgbnVtKSkKKyAgICAgICAgdygnICAjZW5kaWYnKQogICAgIHcoJyAgICB7IE5VTEwgfScpCiAgICAgdygnfTsnKQogICAgIGlmIG5vdCB1c2Vfc3Rkb3V0OgpkaWZmIC0tZ2l0IGEvVG9vbHMvc3NsL3Rlc3RfbXVsdGlwbGVfdmVyc2lvbnMucHkgYi9Ub29scy9zc2wvdGVzdF9tdWx0aXBsZV92ZXJzaW9ucy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZDU3ZGNmCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvc3NsL3Rlc3RfbXVsdGlwbGVfdmVyc2lvbnMucHkKQEAgLTAsMCArMSwyNDEgQEAKKyMuL3B5dGhvbgorIiIiUnVuIFB5dGhvbiB0ZXN0cyB3aXRoIG11bHRpcGxlIGluc3RhbGxhdGlvbnMgb2YgT3BlblNTTAorCitUaGUgc2NyaXB0CisKKyAgKDEpIGRvd25sb2FkcyBPcGVuU1NMIHRhciBidW5kbGUKKyAgKDIpIGV4dHJhY3RzIGl0IHRvIC4uL29wZW5zc2wvc3JjL29wZW5zc2wtVkVSU0lPTi8KKyAgKDMpIGNvbXBpbGVzIE9wZW5TU0wKKyAgKDQpIGluc3RhbGxzIE9wZW5TU0wgaW50byAuLi9vcGVuc3NsL1ZFUlNJT04vCisgICg1KSBmb3JjZXMgYSByZWNvbXBpbGF0aW9uIG9mIFB5dGhvbiBtb2R1bGVzIHVzaW5nIHRoZQorICAgICAgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGZyb20gLi4vb3BlbnNzbC9WRVJTSU9OLworICAoNikgcnVucyBQeXRob24ncyB0ZXN0IHN1aXRlCisKK1RoZSBzY3JpcHQgbXVzdCBiZSBydW4gd2l0aCBQeXRob24ncyBidWlsZCBkaXJlY3RvcnkgYXMgY3VycmVudCB3b3JraW5nCitkaXJlY3Rvcnk6CisKKyAgICAuL3B5dGhvbiBUb29scy9zc2wvdGVzdF9tdWx0aXBsZV92ZXJzaW9ucy5weQorCitUaGUgc2NyaXB0IHVzZXMgTERfUlVOX1BBVEgsIExEX0xJQlJBUllfUEFUSCwgQ1BQRkxBR1MgYW5kIExERkxBR1MgdG8gYmVuZAorc2VhcmNoIHBhdGhzIGZvciBoZWFkZXIgZmlsZXMgYW5kIHNoYXJlZCBsaWJyYXJpZXMuIEl0J3Mga25vd24gdG8gd29yayBvbgorTGludXggd2l0aCBHQ0MgNC54LgorCisoYykgMjAxMyBDaHJpc3RpYW4gSGVpbWVzIDxjaHJpc3RpYW5AcHl0aG9uLm9yZz4KKyIiIgoraW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworaW1wb3J0IHRhcmZpbGUKK2ltcG9ydCBzaHV0aWwKK2ltcG9ydCBzdWJwcm9jZXNzCitpbXBvcnQgc3lzCitmcm9tIHVybGxpYi5yZXF1ZXN0IGltcG9ydCB1cmxvcGVuCisKK2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJtdWx0aXNzbCIpCisKK09QRU5TU0xfVkVSU0lPTlMgPSBbCisgICAgIjAuOS43bSIsICIwLjkuOGkiLCAiMC45LjhsIiwgIjAuOS44bSIsICIwLjkuOHkiLCAiMS4wLjBrIiwgIjEuMC4xZSIKK10KK0ZVTExfVEVTVFMgPSBbCisgICAgInRlc3RfYXN5bmNpbyIsICJ0ZXN0X2Z0cGxpYiIsICJ0ZXN0X2hhc2hsaWIiLCAidGVzdF9odHRwbGliIiwKKyAgICAidGVzdF9pbWFwbGliIiwgInRlc3Rfbm50cGxpYiIsICJ0ZXN0X3BvcGxpYiIsICJ0ZXN0X3NtdHBsaWIiLAorICAgICJ0ZXN0X3NtdHBuZXQiLCAidGVzdF91cmxsaWIyX2xvY2FsbmV0IiwgInRlc3RfdmVudiIKK10KK01JTklNQUxfVEVTVFMgPSBbInRlc3Rfc3NsIiwgInRlc3RfaGFzaGxpYiJdCitDQURFRkFVTFQgPSBUcnVlCitIRVJFID0gb3MucGF0aC5hYnNwYXRoKG9zLmdldGN3ZCgpKQorREVTVF9ESVIgPSBvcy5wYXRoLmFic3BhdGgob3MucGF0aC5qb2luKEhFUkUsIG9zLnBhcmRpciwgIm9wZW5zc2wiKSkKKworCitjbGFzcyBCdWlsZFNTTDoKKyAgICB1cmxfdGVtcGxhdGUgPSAiaHR0cHM6Ly93d3cub3BlbnNzbC5vcmcvc291cmNlL29wZW5zc2wte30udGFyLmd6IgorCisgICAgbW9kdWxlX2ZpbGVzID0gWyJNb2R1bGVzL19zc2wuYyIsCisgICAgICAgICAgICAgICAgICAgICJNb2R1bGVzL3NvY2tldG1vZHVsZS5jIiwKKyAgICAgICAgICAgICAgICAgICAgIk1vZHVsZXMvX2hhc2hvcGVuc3NsLmMiXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZlcnNpb24sIG9wZW5zc2xfY29tcGlsZV9hcmdzPSgpLCBkZXN0ZGlyPURFU1RfRElSKToKKyAgICAgICAgc2VsZi5fY2hlY2tfcHl0aG9uX2J1aWxkZGlyKCkKKyAgICAgICAgc2VsZi52ZXJzaW9uID0gdmVyc2lvbgorICAgICAgICBzZWxmLm9wZW5zc2xfY29tcGlsZV9hcmdzID0gb3BlbnNzbF9jb21waWxlX2FyZ3MKKyAgICAgICAgIyBpbnN0YWxsYXRpb24gZGlyZWN0b3J5CisgICAgICAgIHNlbGYuaW5zdGFsbF9kaXIgPSBvcy5wYXRoLmpvaW4oZGVzdGRpciwgdmVyc2lvbikKKyAgICAgICAgIyBzb3VyY2UgZmlsZQorICAgICAgICBzZWxmLnNyY19maWxlID0gb3MucGF0aC5qb2luKGRlc3RkaXIsICJzcmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuc3NsLXt9LnRhci5neiIuZm9ybWF0KHZlcnNpb24pKQorICAgICAgICAjIGJ1aWxkIGRpcmVjdG9yeSAocmVtb3ZlZCBhZnRlciBpbnN0YWxsKQorICAgICAgICBzZWxmLmJ1aWxkX2RpciA9IG9zLnBhdGguam9pbihkZXN0ZGlyLCAic3JjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZW5zc2wte30iLmZvcm1hdCh2ZXJzaW9uKSkKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvcGVuc3NsX2NsaShzZWxmKToKKyAgICAgICAgIiIib3BlbnNzbCBDTEkgYmluYXJ5IiIiCisgICAgICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc2VsZi5pbnN0YWxsX2RpciwgImJpbiIsICJvcGVuc3NsIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBvcGVuc3NsX3ZlcnNpb24oc2VsZik6CisgICAgICAgICIiIm91dHB1dCBvZiAnYmluL29wZW5zc2wgdmVyc2lvbiciIiIKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJMRF9MSUJSQVJZX1BBVEgiXSA9IHNlbGYubGliX2RpcgorICAgICAgICBjbWQgPSBbc2VsZi5vcGVuc3NsX2NsaSwgInZlcnNpb24iXQorICAgICAgICByZXR1cm4gc2VsZi5fc3VicHJvY2Vzc19vdXRwdXQoY21kLCBlbnY9ZW52KQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHB5c3NsX3ZlcnNpb24oc2VsZik6CisgICAgICAgICIiIlZhbHVlIG9mIHNzbC5PUEVOU1NMX1ZFUlNJT04iIiIKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJMRF9MSUJSQVJZX1BBVEgiXSA9IHNlbGYubGliX2RpcgorICAgICAgICBjbWQgPSBbIi4vcHl0aG9uIiwgIi1jIiwgImltcG9ydCBzc2w7IHByaW50KHNzbC5PUEVOU1NMX1ZFUlNJT04pIl0KKyAgICAgICAgcmV0dXJuIHNlbGYuX3N1YnByb2Nlc3Nfb3V0cHV0KGNtZCwgZW52PWVudikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpbmNsdWRlX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyLCAiaW5jbHVkZSIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbGliX2RpcihzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguam9pbihzZWxmLmluc3RhbGxfZGlyLCAibGliIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBoYXNfb3BlbnNzbChzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNmaWxlKHNlbGYub3BlbnNzbF9jbGkpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgaGFzX3NyYyhzZWxmKToKKyAgICAgICAgcmV0dXJuIG9zLnBhdGguaXNmaWxlKHNlbGYuc3JjX2ZpbGUpCisKKyAgICBkZWYgX3N1YnByb2Nlc3NfY2FsbChzZWxmLCBjbWQsIHN0ZG91dD1zdWJwcm9jZXNzLkRFVk5VTEwsIGVudj1Ob25lLAorICAgICAgICAgICAgICAgICAgICAgICAgICoqa3dhcmdzKToKKyAgICAgICAgbG9nLmRlYnVnKCJDYWxsICd7fSciLmZvcm1hdCgiICIuam9pbihjbWQpKSkKKyAgICAgICAgcmV0dXJuIHN1YnByb2Nlc3MuY2hlY2tfY2FsbChjbWQsIHN0ZG91dD1zdGRvdXQsIGVudj1lbnYsICoqa3dhcmdzKQorCisgICAgZGVmIF9zdWJwcm9jZXNzX291dHB1dChzZWxmLCBjbWQsIGVudj1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGxvZy5kZWJ1ZygiQ2FsbCAne30nIi5mb3JtYXQoIiAiLmpvaW4oY21kKSkpCisgICAgICAgIG91dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KGNtZCwgZW52PWVudikKKyAgICAgICAgcmV0dXJuIG91dC5zdHJpcCgpLmRlY29kZSgidXRmLTgiKQorCisgICAgZGVmIF9jaGVja19weXRob25fYnVpbGRkaXIoc2VsZik6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZSgicHl0aG9uIikgb3Igbm90IG9zLnBhdGguaXNmaWxlKCJzZXR1cC5weSIpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigiU2NyaXB0IG11c3QgYmUgcnVuIGluIFB5dGhvbiBidWlsZCBkaXJlY3RvcnkiKQorCisgICAgZGVmIF9kb3dubG9hZF9vcGVuc3NsKHNlbGYpOgorICAgICAgICAiIiJEb3dubG9hZCBPcGVuU1NMIHNvdXJjZSBkaXN0IiIiCisgICAgICAgIHNyY19kaXIgPSBvcy5wYXRoLmRpcm5hbWUoc2VsZi5zcmNfZmlsZSkKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIoc3JjX2Rpcik6CisgICAgICAgICAgICBvcy5tYWtlZGlycyhzcmNfZGlyKQorICAgICAgICB1cmwgPSBzZWxmLnVybF90ZW1wbGF0ZS5mb3JtYXQoc2VsZi52ZXJzaW9uKQorICAgICAgICBsb2cuaW5mbygiRG93bmxvYWRpbmcgT3BlblNTTCBmcm9tIHt9Ii5mb3JtYXQodXJsKSkKKyAgICAgICAgcmVxID0gdXJsb3Blbih1cmwsIGNhZGVmYXVsdD1DQURFRkFVTFQpCisgICAgICAgICMgS0lTUywgcmVhZCBhbGwsIHdyaXRlIGFsbAorICAgICAgICBkYXRhID0gcmVxLnJlYWQoKQorICAgICAgICBsb2cuaW5mbygiU3RvcmluZyB7fSIuZm9ybWF0KHNlbGYuc3JjX2ZpbGUpKQorICAgICAgICB3aXRoIG9wZW4oc2VsZi5zcmNfZmlsZSwgIndiIikgYXMgZjoKKyAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKworICAgIGRlZiBfdW5wYWNrX29wZW5zc2woc2VsZik6CisgICAgICAgICIiIlVucGFjayB0YXIuZ3ogYnVuZGxlIiIiCisgICAgICAgICMgY2xlYW51cAorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHNlbGYuYnVpbGRfZGlyKToKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoc2VsZi5idWlsZF9kaXIpCisgICAgICAgIG9zLm1ha2VkaXJzKHNlbGYuYnVpbGRfZGlyKQorCisgICAgICAgIHRmID0gdGFyZmlsZS5vcGVuKHNlbGYuc3JjX2ZpbGUpCisgICAgICAgIGJhc2UgPSAib3BlbnNzbC17fS8iLmZvcm1hdChzZWxmLnZlcnNpb24pCisgICAgICAgICMgZm9yY2UgZXh0cmFjdGlvbiBpbnRvIGJ1aWxkIGRpcgorICAgICAgICBtZW1iZXJzID0gdGYuZ2V0bWVtYmVycygpCisgICAgICAgIGZvciBtZW1iZXIgaW4gbWVtYmVyczoKKyAgICAgICAgICAgIGlmIG5vdCBtZW1iZXIubmFtZS5zdGFydHN3aXRoKGJhc2UpOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IobWVtYmVyLm5hbWUpCisgICAgICAgICAgICBtZW1iZXIubmFtZSA9IG1lbWJlci5uYW1lW2xlbihiYXNlKTpdCisgICAgICAgIGxvZy5pbmZvKCJVbnBhY2tpbmcgZmlsZXMgdG8ge30iLmZvcm1hdChzZWxmLmJ1aWxkX2RpcikpCisgICAgICAgIHRmLmV4dHJhY3RhbGwoc2VsZi5idWlsZF9kaXIsIG1lbWJlcnMpCisKKyAgICBkZWYgX2J1aWxkX29wZW5zc2woc2VsZik6CisgICAgICAgICIiIk5vdyBidWlsZCBvcGVuc3NsIiIiCisgICAgICAgIGxvZy5pbmZvKCJSdW5uaW5nIGJ1aWxkIGluIHt9Ii5mb3JtYXQoc2VsZi5pbnN0YWxsX2RpcikpCisgICAgICAgIGN3ZCA9IHNlbGYuYnVpbGRfZGlyCisgICAgICAgIGNtZCA9IFsiLi9jb25maWciLCAic2hhcmVkIiwgIi0tcHJlZml4PXt9Ii5mb3JtYXQoc2VsZi5pbnN0YWxsX2RpcildCisgICAgICAgIGNtZC5leHRlbmQoc2VsZi5vcGVuc3NsX2NvbXBpbGVfYXJncykKKyAgICAgICAgc2VsZi5fc3VicHJvY2Vzc19jYWxsKGNtZCwgY3dkPWN3ZCkKKyAgICAgICAgc2VsZi5fc3VicHJvY2Vzc19jYWxsKFsibWFrZSJdLCBjd2Q9Y3dkKQorCisgICAgZGVmIF9pbnN0YWxsX29wZW5zc2woc2VsZiwgcmVtb3ZlPVRydWUpOgorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzX2NhbGwoWyJtYWtlIiwgImluc3RhbGwiXSwgY3dkPXNlbGYuYnVpbGRfZGlyKQorICAgICAgICBpZiByZW1vdmU6CisgICAgICAgICAgICBzaHV0aWwucm10cmVlKHNlbGYuYnVpbGRfZGlyKQorCisgICAgZGVmIGluc3RhbGxfb3BlbnNzbChzZWxmKToKKyAgICAgICAgaWYgbm90IHNlbGYuaGFzX29wZW5zc2w6CisgICAgICAgICAgICBpZiBub3Qgc2VsZi5oYXNfc3JjOgorICAgICAgICAgICAgICAgIHNlbGYuX2Rvd25sb2FkX29wZW5zc2woKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBsb2cuZGVidWcoIkFscmVhZHkgaGFzIHNyYyB7fSIuZm9ybWF0KHNlbGYuc3JjX2ZpbGUpKQorICAgICAgICAgICAgc2VsZi5fdW5wYWNrX29wZW5zc2woKQorICAgICAgICAgICAgc2VsZi5fYnVpbGRfb3BlbnNzbCgpCisgICAgICAgICAgICBzZWxmLl9pbnN0YWxsX29wZW5zc2woKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgbG9nLmluZm8oIkFscmVhZHkgaGFzIGluc3RhbGxhdGlvbiB7fSIuZm9ybWF0KHNlbGYuaW5zdGFsbF9kaXIpKQorICAgICAgICAjIHZhbGlkYXRlIGluc3RhbGxhdGlvbgorICAgICAgICB2ZXJzaW9uID0gc2VsZi5vcGVuc3NsX3ZlcnNpb24KKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uIG5vdCBpbiB2ZXJzaW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih2ZXJzaW9uKQorCisgICAgZGVmIHRvdWNoX3B5bW9kcyhzZWxmKToKKyAgICAgICAgIyBmb3JjZSBhIHJlYnVpbGQgb2YgYWxsIG1vZHVsZXMgdGhhdCB1c2UgT3BlblNTTCBBUElzCisgICAgICAgIGZvciBmbmFtZSBpbiBzZWxmLm1vZHVsZV9maWxlczoKKyAgICAgICAgICAgIG9zLnV0aW1lKGZuYW1lKQorCisgICAgZGVmIHJlY29tcGlsZV9weW1vZHMoc2VsZik6CisgICAgICAgIGxvZy5pbmZvKCJVc2luZyBPcGVuU1NMIGJ1aWxkIGZyb20ge30iLmZvcm1hdChzZWxmLmJ1aWxkX2RpcikpCisgICAgICAgICMgb3ZlcndyaXRlIGhlYWRlciBhbmQgbGlicmFyeSBzZWFyY2ggcGF0aHMKKyAgICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgICAgZW52WyJDUFBGTEFHUyJdID0gIi1Je30iLmZvcm1hdChzZWxmLmluY2x1ZGVfZGlyKQorICAgICAgICBlbnZbIkxERkxBR1MiXSA9ICItTHt9Ii5mb3JtYXQoc2VsZi5saWJfZGlyKQorICAgICAgICAjIHNldCBycGF0aAorICAgICAgICBlbnZbIkxEX1JVTl9QQVRIIl0gPSBzZWxmLmxpYl9kaXIKKworICAgICAgICBsb2cuaW5mbygiUmVidWlsZGluZyBQeXRob24gbW9kdWxlcyIpCisgICAgICAgIHNlbGYudG91Y2hfcHltb2RzKCkKKyAgICAgICAgY21kID0gWyIuL3B5dGhvbiIsICJzZXR1cC5weSIsICJidWlsZCJdCisgICAgICAgIHNlbGYuX3N1YnByb2Nlc3NfY2FsbChjbWQsIGVudj1lbnYpCisKKyAgICBkZWYgY2hlY2tfcHlzc2woc2VsZik6CisgICAgICAgIHZlcnNpb24gPSBzZWxmLnB5c3NsX3ZlcnNpb24KKyAgICAgICAgaWYgc2VsZi52ZXJzaW9uIG5vdCBpbiB2ZXJzaW9uOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcih2ZXJzaW9uKQorCisgICAgZGVmIHJ1bl9weXRlc3RzKHNlbGYsICphcmdzKToKKyAgICAgICAgY21kID0gWyIuL3B5dGhvbiIsICItbSIsICJ0ZXN0Il0KKyAgICAgICAgY21kLmV4dGVuZChhcmdzKQorICAgICAgICBzZWxmLl9zdWJwcm9jZXNzX2NhbGwoY21kLCBzdGRvdXQ9Tm9uZSkKKworICAgIGRlZiBydW5fcHl0aG9uX3Rlc3RzKHNlbGYsICphcmdzKToKKyAgICAgICAgc2VsZi5yZWNvbXBpbGVfcHltb2RzKCkKKyAgICAgICAgc2VsZi5jaGVja19weXNzbCgpCisgICAgICAgIHNlbGYucnVuX3B5dGVzdHMoKmFyZ3MpCisKKworZGVmIG1haW4oKmFyZ3MpOgorICAgIGJ1aWxkZXJzID0gW10KKyAgICBmb3IgdmVyc2lvbiBpbiBPUEVOU1NMX1ZFUlNJT05TOgorICAgICAgICBpZiB2ZXJzaW9uIGluICgiMC45LjhpIiwgIjAuOS44bCIpOgorICAgICAgICAgICAgb3BlbnNzbF9jb21waWxlX2FyZ3MgPSAoIm5vLWFzbSIsKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgb3BlbnNzbF9jb21waWxlX2FyZ3MgPSAoKQorICAgICAgICBidWlsZGVyID0gQnVpbGRTU0wodmVyc2lvbiwgb3BlbnNzbF9jb21waWxlX2FyZ3MpCisgICAgICAgIGJ1aWxkZXIuaW5zdGFsbF9vcGVuc3NsKCkKKyAgICAgICAgYnVpbGRlcnMuYXBwZW5kKGJ1aWxkZXIpCisKKyAgICBmb3IgYnVpbGRlciBpbiBidWlsZGVyczoKKyAgICAgICAgYnVpbGRlci5ydW5fcHl0aG9uX3Rlc3RzKCphcmdzKQorICAgICMgZmluYWwgdG91Y2gKKyAgICBidWlsZGVyLnRvdWNoX3B5bW9kcygpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKGxldmVsPWxvZ2dpbmcuSU5GTywKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdD0iKioqICUobGV2ZWxuYW1lKXMgJShtZXNzYWdlKXMiKQorICAgIGFyZ3MgPSBzeXMuYXJndlsxOl0KKyAgICBpZiBub3QgYXJnczoKKyAgICAgICAgYXJncyA9IFsiLXVuZXR3b3JrIiwgIi12Il0KKyAgICAgICAgYXJncy5leHRlbmQoRlVMTF9URVNUUykKKyAgICBtYWluKCphcmdzKQpkaWZmIC0tZ2l0IGEvVG9vbHMvc3RyaW5nYmVuY2gvc3RyaW5nYmVuY2gucHkgYi9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQppbmRleCAxNDJiM2NhLi41YWJjMjVhIDEwMDY0NAotLS0gYS9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQorKysgYi9Ub29scy9zdHJpbmdiZW5jaC9zdHJpbmdiZW5jaC5weQpAQCAtODA4LDcgKzgwOCw3IEBACiBwcm9ncmFtbWVycyByZXBvcnQgc3Vic3RhbnRpYWwgcHJvZHVjdGl2aXR5IGdhaW5zIGFuZCBmZWVsIHRoZSBsYW5ndWFnZQogZW5jb3VyYWdlcyB0aGUgZGV2ZWxvcG1lbnQgb2YgaGlnaGVyIHF1YWxpdHksIG1vcmUgbWFpbnRhaW5hYmxlIGNvZGUuCiAKLVB5dGhvbiBydW5zIG9uIFdpbmRvd3MsIExpbnV4L1VuaXgsIE1hYyBPUyBYLCBPUy8yLCBBbWlnYSwgUGFsbQorUHl0aG9uIHJ1bnMgb24gV2luZG93cywgTGludXgvVW5peCwgTWFjIE9TIFgsIEFtaWdhLCBQYWxtCiBIYW5kaGVsZHMsIGFuZCBOb2tpYSBtb2JpbGUgcGhvbmVzLiBQeXRob24gaGFzIGFsc28gYmVlbiBwb3J0ZWQgdG8gdGhlCiBKYXZhIGFuZCAuTkVUIHZpcnR1YWwgbWFjaGluZXMuCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkgYi9Ub29scy91bmljb2RlL2dlbmNvZGVjLnB5CmluZGV4IGY1YTFhZjMuLjk4YjM5NzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL3VuaWNvZGUvZ2VuY29kZWMucHkKKysrIGIvVG9vbHMvdW5pY29kZS9nZW5jb2RlYy5weQpAQCAtMzQsNyArMzQsNyBAQAogIyBTdGFuZGFyZCB1bmRlZmluZWQgVW5pY29kZSBjb2RlIHBvaW50CiBVTklfVU5ERUZJTkVEID0gY2hyKDB4RkZGRSkKIAotIyBQbGFjZWhvbGRlciBmb3IgYSBtaXNzaW5nIGNvZGVwb2ludAorIyBQbGFjZWhvbGRlciBmb3IgYSBtaXNzaW5nIGNvZGUgcG9pbnQKIE1JU1NJTkdfQ09ERSA9IC0xCiAKIG1hcFJFID0gcmUuY29tcGlsZSgnKCg/OjB4WzAtOWEtZkEtRl0rXCs/KSspJwpAQCAtMjkwLDI3ICsyOTAsMjcgQEAKIAogY2xhc3MgQ29kZWMoY29kZWNzLkNvZGVjKToKIAotICAgIGRlZiBlbmNvZGUoc2VsZixpbnB1dCxlcnJvcnM9J3N0cmljdCcpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LGVycm9ycyxlbmNvZGluZ18lcykKKyAgICBkZWYgZW5jb2RlKHNlbGYsIGlucHV0LCBlcnJvcnM9J3N0cmljdCcpOgorICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZW5jb2RlKGlucHV0LCBlcnJvcnMsIGVuY29kaW5nXyVzKQogCi0gICAgZGVmIGRlY29kZShzZWxmLGlucHV0LGVycm9ycz0nc3RyaWN0Jyk6Ci0gICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsZXJyb3JzLGRlY29kaW5nXyVzKQorICAgIGRlZiBkZWNvZGUoc2VsZiwgaW5wdXQsIGVycm9ycz0nc3RyaWN0Jyk6CisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsIGVycm9ycywgZGVjb2RpbmdfJXMpCiAnJycgJSAoZW5jb2RpbmduYW1lLCBuYW1lLCBzdWZmaXgsIHN1ZmZpeCldCiAgICAgbC5hcHBlbmQoJycnXAogY2xhc3MgSW5jcmVtZW50YWxFbmNvZGVyKGNvZGVjcy5JbmNyZW1lbnRhbEVuY29kZXIpOgogICAgIGRlZiBlbmNvZGUoc2VsZiwgaW5wdXQsIGZpbmFsPUZhbHNlKToKLSAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCxzZWxmLmVycm9ycyxlbmNvZGluZ18lcylbMF0KKyAgICAgICAgcmV0dXJuIGNvZGVjcy5jaGFybWFwX2VuY29kZShpbnB1dCwgc2VsZi5lcnJvcnMsIGVuY29kaW5nXyVzKVswXQogCiBjbGFzcyBJbmNyZW1lbnRhbERlY29kZXIoY29kZWNzLkluY3JlbWVudGFsRGVjb2Rlcik6CiAgICAgZGVmIGRlY29kZShzZWxmLCBpbnB1dCwgZmluYWw9RmFsc2UpOgotICAgICAgICByZXR1cm4gY29kZWNzLmNoYXJtYXBfZGVjb2RlKGlucHV0LHNlbGYuZXJyb3JzLGRlY29kaW5nXyVzKVswXScnJyAlCisgICAgICAgIHJldHVybiBjb2RlY3MuY2hhcm1hcF9kZWNvZGUoaW5wdXQsIHNlbGYuZXJyb3JzLCBkZWNvZGluZ18lcylbMF0nJycgJQogICAgICAgICAoc3VmZml4LCBzdWZmaXgpKQogCiAgICAgbC5hcHBlbmQoJycnCi1jbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsY29kZWNzLlN0cmVhbVdyaXRlcik6CitjbGFzcyBTdHJlYW1Xcml0ZXIoQ29kZWMsIGNvZGVjcy5TdHJlYW1Xcml0ZXIpOgogICAgIHBhc3MKIAotY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLGNvZGVjcy5TdHJlYW1SZWFkZXIpOgorY2xhc3MgU3RyZWFtUmVhZGVyKENvZGVjLCBjb2RlY3MuU3RyZWFtUmVhZGVyKToKICAgICBwYXNzCiAKICMjIyBlbmNvZGluZ3MgbW9kdWxlIEFQSQpAQCAtMzQzLDcgKzM0Myw3IEBACiAgICAgaWYgZGVjb2RpbmdfdGFibGVfY29kZToKICAgICAgICAgbC5hcHBlbmQoJycnCiAjIyMgRW5jb2RpbmcgdGFibGUKLWVuY29kaW5nX3RhYmxlPWNvZGVjcy5jaGFybWFwX2J1aWxkKGRlY29kaW5nX3RhYmxlKQorZW5jb2RpbmdfdGFibGUgPSBjb2RlY3MuY2hhcm1hcF9idWlsZChkZWNvZGluZ190YWJsZSkKICcnJykKICAgICBlbHNlOgogICAgICAgICBsLmFwcGVuZCgnJycKZGlmZiAtLWdpdCBhL1Rvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWNzLmJhdCBiL1Rvb2xzL3VuaWNvZGUvZ2Vud2luY29kZWNzLmJhdAppbmRleCA0M2NhYjBkLi5hZDQ1YzZjIDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL2dlbndpbmNvZGVjcy5iYXQKKysrIGIvVG9vbHMvdW5pY29kZS9nZW53aW5jb2RlY3MuYmF0CkBAIC0xLDcgKzEsNyBAQAotQHJlbSBSZWNyZWF0ZSBzb21lIHB5dGhvbiBjaGFybWFwIGNvZGVjcyBmcm9tIHRoZSBXaW5kb3dzIGZ1bmN0aW9uCi1AcmVtIE11bHRpQnl0ZVRvV2lkZUNoYXIuCi0KLUBjZCAvZCAlfmRwMAotQG1rZGlyIGJ1aWxkCi1AcmVtIEFyYWJpYyBET1MgY29kZSBwYWdlCi1jOlxweXRob24zMFxweXRob24gZ2Vud2luY29kZWMucHkgNzIwID4gYnVpbGQvY3A3MjAucHkKK0ByZW0gUmVjcmVhdGUgc29tZSBweXRob24gY2hhcm1hcCBjb2RlY3MgZnJvbSB0aGUgV2luZG93cyBmdW5jdGlvbg0KK0ByZW0gTXVsdGlCeXRlVG9XaWRlQ2hhci4NCisNCitAY2QgL2QgJX5kcDANCitAbWtkaXIgYnVpbGQNCitAcmVtIEFyYWJpYyBET1MgY29kZSBwYWdlDQorYzpccHl0aG9uMzBccHl0aG9uIGdlbndpbmNvZGVjLnB5IDcyMCA+IGJ1aWxkL2NwNzIwLnB5DQpkaWZmIC0tZ2l0IGEvVG9vbHMvdW5pY29kZS9tYWtldW5pY29kZWRhdGEucHkgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQppbmRleCBiYzNkMGNiLi43NjM2YTk1IDEwMDY0NAotLS0gYS9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQorKysgYi9Ub29scy91bmljb2RlL21ha2V1bmljb2RlZGF0YS5weQpAQCAtMzcsNyArMzcsMTIgQEAKIFZFUlNJT04gPSAiMy4yIgogCiAjIFRoZSBVbmljb2RlIERhdGFiYXNlCi1VTklEQVRBX1ZFUlNJT04gPSAiNi4xLjAiCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFdoZW4gY2hhbmdpbmcgVUNEIHZlcnNpb24gcGxlYXNlIHVwZGF0ZQorIyAgICogRG9jL2xpYnJhcnkvc3RkdHlwZXMucnN0LCBhbmQKKyMgICAqIERvYy9saWJyYXJ5L3VuaWNvZGVkYXRhLnJzdAorIyAgICogRG9jL3JlZmVyZW5jZS9sZXhpY2FsX2FuYWx5c2lzLnJzdCAodHdvIG9jY3VycmVuY2VzKQorVU5JREFUQV9WRVJTSU9OID0gIjYuMy4wIgogVU5JQ09ERV9EQVRBID0gIlVuaWNvZGVEYXRhJXMudHh0IgogQ09NUE9TSVRJT05fRVhDTFVTSU9OUyA9ICJDb21wb3NpdGlvbkV4Y2x1c2lvbnMlcy50eHQiCiBFQVNUQVNJQU5fV0lEVEggPSAiRWFzdEFzaWFuV2lkdGglcy50eHQiCkBAIC02OCw3ICs3Myw3IEBACiAKIEJJRElSRUNUSU9OQUxfTkFNRVMgPSBbICIiLCAiTCIsICJMUkUiLCAiTFJPIiwgIlIiLCAiQUwiLCAiUkxFIiwgIlJMTyIsCiAgICAgIlBERiIsICJFTiIsICJFUyIsICJFVCIsICJBTiIsICJDUyIsICJOU00iLCAiQk4iLCAiQiIsICJTIiwgIldTIiwKLSAgICAiT04iIF0KKyAgICAiT04iLCAiTFJJIiwgIlJMSSIsICJGU0kiLCAiUERJIiBdCiAKIEVBU1RBU0lBTldJRFRIX05BTUVTID0gWyAiRiIsICJIIiwgIlciLCAiTmEiLCAiQSIsICJOIiBdCiAKQEAgLTU1Miw3ICs1NTcsNyBAQAogICAgIHByaW50KCIvKiBSZXR1cm5zIDEgZm9yIFVuaWNvZGUgY2hhcmFjdGVycyBoYXZpbmcgdGhlIGJpZGlyZWN0aW9uYWwiLCBmaWxlPWZwKQogICAgIHByaW50KCIgKiB0eXBlICdXUycsICdCJyBvciAnUycgb3IgdGhlIGNhdGVnb3J5ICdacycsIDAgb3RoZXJ3aXNlLiIsIGZpbGU9ZnApCiAgICAgcHJpbnQoIiAqLyIsIGZpbGU9ZnApCi0gICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShyZWdpc3RlciBjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCisgICAgcHJpbnQoJ2ludCBfUHlVbmljb2RlX0lzV2hpdGVzcGFjZShjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCiAgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQogICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCiAKQEAgLTU3MCw3ICs1NzUsNyBAQAogICAgIHByaW50KCIgKiBwcm9wZXJ0eSAnQksnLCAnQ1InLCAnTEYnIG9yICdOTCcgb3IgaGF2aW5nIGJpZGlyZWN0aW9uYWwiLCBmaWxlPWZwKQogICAgIHByaW50KCIgKiB0eXBlICdCJywgMCBvdGhlcndpc2UuIiwgZmlsZT1mcCkKICAgICBwcmludCgiICovIiwgZmlsZT1mcCkKLSAgICBwcmludCgnaW50IF9QeVVuaWNvZGVfSXNMaW5lYnJlYWsocmVnaXN0ZXIgY29uc3QgUHlfVUNTNCBjaCknLCBmaWxlPWZwKQorICAgIHByaW50KCdpbnQgX1B5VW5pY29kZV9Jc0xpbmVicmVhayhjb25zdCBQeV9VQ1M0IGNoKScsIGZpbGU9ZnApCiAgICAgcHJpbnQoJ3snLCBmaWxlPWZwKQogICAgIHByaW50KCcgICAgc3dpdGNoIChjaCkgeycsIGZpbGU9ZnApCiAgICAgZm9yIGNvZGVwb2ludCBpbiBzb3J0ZWQobGluZWJyZWFrcyk6CmRpZmYgLS1naXQgYS9Ub29scy91bmljb2RlL3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQgYi9Ub29scy91bmljb2RlL3B5dGhvbi1tYXBwaW5ncy9DUDI3My5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiNWUxOAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL3VuaWNvZGUvcHl0aG9uLW1hcHBpbmdzL0NQMjczLlRYVApAQCAtMCwwICsxLDI1OCBAQAorMHgwMAkweDAwMDAJI05VTEwgKE5VTCkKKzB4MDEJMHgwMDAxCSNTVEFSVCBPRiBIRUFESU5HIChTT0gpCisweDAyCTB4MDAwMgkjU1RBUlQgT0YgVEVYVCAoU1RYKQorMHgwMwkweDAwMDMJI0VORCBPRiBURVhUIChFVFgpCisweDA0CTB4MDA5QwkjU1RSSU5HIFRFUk1JTkFUT1IgKFNUKQorMHgwNQkweDAwMDkJI0NIQVJBQ1RFUiBUQUJVTEFUSU9OIChIVCkKKzB4MDYJMHgwMDg2CSNTVEFSVCBPRiBTRUxFQ1RFRCBBUkVBIChTU0EpCisweDA3CTB4MDA3RgkjREVMRVRFIChERUwpCisweDA4CTB4MDA5NwkjRU5EIE9GIEdVQVJERUQgQVJFQSAoRVBBKQorMHgwOQkweDAwOEQJI1JFVkVSU0UgTElORSBGRUVEIChSSSkKKzB4MEEJMHgwMDhFCSNTSU5HTEUtU0hJRlQgVFdPIChTUzIpCisweDBCCTB4MDAwQgkjTElORSBUQUJVTEFUSU9OIChWVCkKKzB4MEMJMHgwMDBDCSNGT1JNIEZFRUQgKEZGKQorMHgwRAkweDAwMEQJI0NBUlJJQUdFIFJFVFVSTiAoQ1IpCisweDBFCTB4MDAwRQkjU0hJRlQgT1VUIChTTykKKzB4MEYJMHgwMDBGCSNTSElGVCBJTiAoU0kpCisweDEwCTB4MDAxMAkjREFUQUxJTksgRVNDQVBFIChETEUpCisweDExCTB4MDAxMQkjREVWSUNFIENPTlRST0wgT05FIChEQzEpCisweDEyCTB4MDAxMgkjREVWSUNFIENPTlRST0wgVFdPIChEQzIpCisweDEzCTB4MDAxMwkjREVWSUNFIENPTlRST0wgVEhSRUUgKERDMykKKzB4MTQJMHgwMDlECSNPUEVSQVRJTkcgU1lTVEVNIENPTU1BTkQgKE9TQykKKzB4MTUJMHgwMDg1CSNORVhUIExJTkUgKE5FTCkKKzB4MTYJMHgwMDA4CSNCQUNLU1BBQ0UgKEJTKQorMHgxNwkweDAwODcJI0VORCBPRiBTRUxFQ1RFRCBBUkVBIChFU0EpCisweDE4CTB4MDAxOAkjQ0FOQ0VMIChDQU4pCisweDE5CTB4MDAxOQkjRU5EIE9GIE1FRElVTSAoRU0pCisweDFBCTB4MDA5MgkjUFJJVkFURSBVU0UgVFdPIChQVTIpCisweDFCCTB4MDA4RgkjU0lOR0xFLVNISUZUIFRIUkVFIChTUzMpCisweDFDCTB4MDAxQwkjRklMRSBTRVBBUkFUT1IgKElTNCkKKzB4MUQJMHgwMDFECSNHUk9VUCBTRVBBUkFUT1IgKElTMykKKzB4MUUJMHgwMDFFCSNSRUNPUkQgU0VQQVJBVE9SIChJUzIpCisweDFGCTB4MDAxRgkjVU5JVCBTRVBBUkFUT1IgKElTMSkKKzB4MjAJMHgwMDgwCSNQQURESU5HIENIQVJBQ1RFUiAoUEFEKQorMHgyMQkweDAwODEJI0hJR0ggT0NURVQgUFJFU0VUIChIT1ApCisweDIyCTB4MDA4MgkjQlJFQUsgUEVSTUlUVEVEIEhFUkUgKEJQSCkKKzB4MjMJMHgwMDgzCSNOTyBCUkVBSyBIRVJFIChOQkgpCisweDI0CTB4MDA4NAkjSU5ERVggKElORCkKKzB4MjUJMHgwMDBBCSNMSU5FIEZFRUQgKExGKQorMHgyNgkweDAwMTcJI0VORCBPRiBUUkFOU01JU1NJT04gQkxPQ0sgKEVUQikKKzB4MjcJMHgwMDFCCSNFU0NBUEUgKEVTQykKKzB4MjgJMHgwMDg4CSNDSEFSQUNURVIgVEFCVUxBVElPTiBTRVQgKEhUUykKKzB4MjkJMHgwMDg5CSNDSEFSQUNURVIgVEFCVUxBVElPTiBXSVRIIEpVU1RJRklDQVRJT04gKEhUSikKKzB4MkEJMHgwMDhBCSNMSU5FIFRBQlVMQVRJT04gU0VUIChWVFMpCisweDJCCTB4MDA4QgkjUEFSVElBTCBMSU5FIEZPUldBUkQgKFBMRCkKKzB4MkMJMHgwMDhDCSNQQVJUSUFMIExJTkUgQkFDS1dBUkQgKFBMVSkKKzB4MkQJMHgwMDA1CSNFTlFVSVJZIChFTlEpCisweDJFCTB4MDAwNgkjQUNLTk9XTEVER0UgKEFDSykKKzB4MkYJMHgwMDA3CSNCRUxMIChCRUwpCisweDMwCTB4MDA5MAkjREVWSUNFIENPTlRST0wgU1RSSU5HIChEQ1MpCisweDMxCTB4MDA5MQkjUFJJVkFURSBVU0UgT05FIChQVTEpCisweDMyCTB4MDAxNgkjU1lOQ0hST05PVVMgSURMRSAoU1lOKQorMHgzMwkweDAwOTMJI1NFVCBUUkFOU01JVCBTVEFURSAoU1RTKQorMHgzNAkweDAwOTQJI0NBTkNFTCBDSEFSQUNURVIgKENDSCkKKzB4MzUJMHgwMDk1CSNNRVNTQUdFIFdBSVRJTkcgKE1XKQorMHgzNgkweDAwOTYJI1NUQVJUIE9GIEdVQVJERUQgQVJFQSAoU1BBKQorMHgzNwkweDAwMDQJI0VORCBPRiBUUkFOU01JU1NJT04gKEVPVCkKKzB4MzgJMHgwMDk4CSNTVEFSVCBPRiBTVFJJTkcgKFNPUykKKzB4MzkJMHgwMDk5CSNTSU5HTEUgR1JBUEhJQyBDSEFSQUNURVIgSU5UUk9EVUNFUiAoU0dDSSkKKzB4M0EJMHgwMDlBCSNTSU5HTEUgQ0hBUkFDVEVSIElOVFJPRFVDRVIgKFNDSSkKKzB4M0IJMHgwMDlCCSNDT05UUk9MIFNFUVVFTkNFIElOVFJPRFVDRVIgKENTSSkKKzB4M0MJMHgwMDE0CSNERVZJQ0UgQ09OVFJPTCBGT1VSIChEQzQpCisweDNECTB4MDAxNQkjTkVHQVRJVkUgQUNLTk9XTEVER0UgKE5BSykKKzB4M0UJMHgwMDlFCSNQUklWQUNZIE1FU1NBR0UgKFBNKQorMHgzRgkweDAwMUEJI1NVQlNUSVRVVEUgKFNVQikKKzB4NDAJMHgwMDIwCSNTUEFDRQorMHg0MQkweDAwQTAJI05PLUJSRUFLIFNQQUNFCisweDQyCTB4MDBFMgkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBDSVJDVU1GTEVYCisweDQzCTB4MDA3QgkjTEVGVCBDVVJMWSBCUkFDS0VUCisweDQ0CTB4MDBFMAkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBHUkFWRQorMHg0NQkweDAwRTEJI0xBVElOIFNNQUxMIExFVFRFUiBBIFdJVEggQUNVVEUKKzB4NDYJMHgwMEUzCSNMQVRJTiBTTUFMTCBMRVRURVIgQSBXSVRIIFRJTERFCisweDQ3CTB4MDBFNQkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBSSU5HIEFCT1ZFCisweDQ4CTB4MDBFNwkjTEFUSU4gU01BTEwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisweDQ5CTB4MDBGMQkjTEFUSU4gU01BTEwgTEVUVEVSIE4gV0lUSCBUSUxERQorMHg0QQkweDAwQzQJI0xBVElOIENBUElUQUwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzB4NEIJMHgwMDJFCSNGVUxMIFNUT1AKKzB4NEMJMHgwMDNDCSNMRVNTLVRIQU4gU0lHTgorMHg0RAkweDAwMjgJI0xFRlQgUEFSRU5USEVTSVMKKzB4NEUJMHgwMDJCCSNQTFVTIFNJR04KKzB4NEYJMHgwMDIxCSNFWENMQU1BVElPTiBNQVJLCisweDUwCTB4MDAyNgkjQU1QRVJTQU5ECisweDUxCTB4MDBFOQkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBBQ1VURQorMHg1MgkweDAwRUEJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorMHg1MwkweDAwRUIJI0xBVElOIFNNQUxMIExFVFRFUiBFIFdJVEggRElBRVJFU0lTCisweDU0CTB4MDBFOAkjTEFUSU4gU01BTEwgTEVUVEVSIEUgV0lUSCBHUkFWRQorMHg1NQkweDAwRUQJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggQUNVVEUKKzB4NTYJMHgwMEVFCSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIENJUkNVTUZMRVgKKzB4NTcJMHgwMEVGCSNMQVRJTiBTTUFMTCBMRVRURVIgSSBXSVRIIERJQUVSRVNJUworMHg1OAkweDAwRUMJI0xBVElOIFNNQUxMIExFVFRFUiBJIFdJVEggR1JBVkUKKzB4NTkJMHgwMDdFCSNUSUxERQorMHg1QQkweDAwREMJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBESUFFUkVTSVMKKzB4NUIJMHgwMDI0CSNET0xMQVIgU0lHTgorMHg1QwkweDAwMkEJI0FTVEVSSVNLCisweDVECTB4MDAyOQkjUklHSFQgUEFSRU5USEVTSVMKKzB4NUUJMHgwMDNCCSNTRU1JQ09MT04KKzB4NUYJMHgwMDVFCSNDSVJDVU1GTEVYIEFDQ0VOVAorMHg2MAkweDAwMkQJI0hZUEhFTi1NSU5VUworMHg2MQkweDAwMkYJI1NPTElEVVMKKzB4NjIJMHgwMEMyCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQ0lSQ1VNRkxFWAorMHg2MwkweDAwNUIJI0xFRlQgU1FVQVJFIEJSQUNLRVQKKzB4NjQJMHgwMEMwCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggR1JBVkUKKzB4NjUJMHgwMEMxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggQUNVVEUKKzB4NjYJMHgwMEMzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggVElMREUKKzB4NjcJMHgwMEM1CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBIFdJVEggUklORyBBQk9WRQorMHg2OAkweDAwQzcJI0xBVElOIENBUElUQUwgTEVUVEVSIEMgV0lUSCBDRURJTExBCisweDY5CTB4MDBEMQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTiBXSVRIIFRJTERFCisweDZBCTB4MDBGNgkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBESUFFUkVTSVMKKzB4NkIJMHgwMDJDCSNDT01NQQorMHg2QwkweDAwMjUJI1BFUkNFTlQgU0lHTgorMHg2RAkweDAwNUYJI0xPVyBMSU5FCisweDZFCTB4MDAzRQkjR1JFQVRFUi1USEFOIFNJR04KKzB4NkYJMHgwMDNGCSNRVUVTVElPTiBNQVJLCisweDcwCTB4MDBGOAkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBTVFJPS0UKKzB4NzEJMHgwMEM5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQUNVVEUKKzB4NzIJMHgwMENBCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggQ0lSQ1VNRkxFWAorMHg3MwkweDAwQ0IJI0xBVElOIENBUElUQUwgTEVUVEVSIEUgV0lUSCBESUFFUkVTSVMKKzB4NzQJMHgwMEM4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBFIFdJVEggR1JBVkUKKzB4NzUJMHgwMENECSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQUNVVEUKKzB4NzYJMHgwMENFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggQ0lSQ1VNRkxFWAorMHg3NwkweDAwQ0YJI0xBVElOIENBUElUQUwgTEVUVEVSIEkgV0lUSCBESUFFUkVTSVMKKzB4NzgJMHgwMENDCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBJIFdJVEggR1JBVkUKKzB4NzkJMHgwMDYwCSNHUkFWRSBBQ0NFTlQKKzB4N0EJMHgwMDNBCSNDT0xPTgorMHg3QgkweDAwMjMJI05VTUJFUiBTSUdOCisweDdDCTB4MDBBNwkjU0VDVElPTiBTSUdOCisweDdECTB4MDAyNwkjQVBPU1RST1BIRQorMHg3RQkweDAwM0QJI0VRVUFMUyBTSUdOCisweDdGCTB4MDAyMgkjUVVPVEFUSU9OIE1BUksKKzB4ODAJMHgwMEQ4CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBPIFdJVEggU1RST0tFCisweDgxCTB4MDA2MQkjTEFUSU4gU01BTEwgTEVUVEVSIEEKKzB4ODIJMHgwMDYyCSNMQVRJTiBTTUFMTCBMRVRURVIgQgorMHg4MwkweDAwNjMJI0xBVElOIFNNQUxMIExFVFRFUiBDCisweDg0CTB4MDA2NAkjTEFUSU4gU01BTEwgTEVUVEVSIEQKKzB4ODUJMHgwMDY1CSNMQVRJTiBTTUFMTCBMRVRURVIgRQorMHg4NgkweDAwNjYJI0xBVElOIFNNQUxMIExFVFRFUiBGCisweDg3CTB4MDA2NwkjTEFUSU4gU01BTEwgTEVUVEVSIEcKKzB4ODgJMHgwMDY4CSNMQVRJTiBTTUFMTCBMRVRURVIgSAorMHg4OQkweDAwNjkJI0xBVElOIFNNQUxMIExFVFRFUiBJCisweDhBCTB4MDBBQgkjTEVGVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKzB4OEIJMHgwMEJCCSNSSUdIVC1QT0lOVElORyBET1VCTEUgQU5HTEUgUVVPVEFUSU9OIE1BUksKKzB4OEMJMHgwMEYwCSNMQVRJTiBTTUFMTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisweDhECTB4MDBGRAkjTEFUSU4gU01BTEwgTEVUVEVSIFkgV0lUSCBBQ1VURQorMHg4RQkweDAwRkUJI0xBVElOIFNNQUxMIExFVFRFUiBUSE9STiAoSWNlbGFuZGljKQorMHg4RgkweDAwQjEJI1BMVVMtTUlOVVMgU0lHTgorMHg5MAkweDAwQjAJI0RFR1JFRSBTSUdOCisweDkxCTB4MDA2QQkjTEFUSU4gU01BTEwgTEVUVEVSIEoKKzB4OTIJMHgwMDZCCSNMQVRJTiBTTUFMTCBMRVRURVIgSworMHg5MwkweDAwNkMJI0xBVElOIFNNQUxMIExFVFRFUiBMCisweDk0CTB4MDA2RAkjTEFUSU4gU01BTEwgTEVUVEVSIE0KKzB4OTUJMHgwMDZFCSNMQVRJTiBTTUFMTCBMRVRURVIgTgorMHg5NgkweDAwNkYJI0xBVElOIFNNQUxMIExFVFRFUiBPCisweDk3CTB4MDA3MAkjTEFUSU4gU01BTEwgTEVUVEVSIFAKKzB4OTgJMHgwMDcxCSNMQVRJTiBTTUFMTCBMRVRURVIgUQorMHg5OQkweDAwNzIJI0xBVElOIFNNQUxMIExFVFRFUiBSCisweDlBCTB4MDBBQQkjRkVNSU5JTkUgT1JESU5BTCBJTkRJQ0FUT1IKKzB4OUIJMHgwMEJBCSNNQVNDVUxJTkUgT1JESU5BTCBJTkRJQ0FUT1IKKzB4OUMJMHgwMEU2CSNMQVRJTiBTTUFMTCBMRVRURVIgQUUKKzB4OUQJMHgwMEI4CSNDRURJTExBCisweDlFCTB4MDBDNgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQUUKKzB4OUYJMHgwMEE0CSNDVVJSRU5DWSBTSUdOCisweEEwCTB4MDBCNQkjTUlDUk8gU0lHTgorMHhBMQkweDAwREYJI0xBVElOIFNNQUxMIExFVFRFUiBTSEFSUCBTIChHZXJtYW4pCisweEEyCTB4MDA3MwkjTEFUSU4gU01BTEwgTEVUVEVSIFMKKzB4QTMJMHgwMDc0CSNMQVRJTiBTTUFMTCBMRVRURVIgVAorMHhBNAkweDAwNzUJI0xBVElOIFNNQUxMIExFVFRFUiBVCisweEE1CTB4MDA3NgkjTEFUSU4gU01BTEwgTEVUVEVSIFYKKzB4QTYJMHgwMDc3CSNMQVRJTiBTTUFMTCBMRVRURVIgVworMHhBNwkweDAwNzgJI0xBVElOIFNNQUxMIExFVFRFUiBYCisweEE4CTB4MDA3OQkjTEFUSU4gU01BTEwgTEVUVEVSIFkKKzB4QTkJMHgwMDdBCSNMQVRJTiBTTUFMTCBMRVRURVIgWgorMHhBQQkweDAwQTEJI0lOVkVSVEVEIEVYQ0xBTUFUSU9OIE1BUksKKzB4QUIJMHgwMEJGCSNJTlZFUlRFRCBRVUVTVElPTiBNQVJLCisweEFDCTB4MDBEMAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRVRIIChJY2VsYW5kaWMpCisweEFECTB4MDBERAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWSBXSVRIIEFDVVRFCisweEFFCTB4MDBERQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVEhPUk4gKEljZWxhbmRpYykKKzB4QUYJMHgwMEFFCSNSRUdJU1RFUkVEIFNJR04KKzB4QjAJMHgwMEEyCSNDRU5UIFNJR04KKzB4QjEJMHgwMEEzCSNQT1VORCBTSUdOCisweEIyCTB4MDBBNQkjWUVOIFNJR04KKzB4QjMJMHgwMEI3CSNNSURETEUgRE9UCisweEI0CTB4MDBBOQkjQ09QWVJJR0hUIFNJR04KKzB4QjUJMHgwMDQwCSNDT01NRVJDSUFMIEFUCisweEI2CTB4MDBCNgkjUElMQ1JPVyBTSUdOCisweEI3CTB4MDBCQwkjVlVMR0FSIEZSQUNUSU9OIE9ORSBRVUFSVEVSCisweEI4CTB4MDBCRAkjVlVMR0FSIEZSQUNUSU9OIE9ORSBIQUxGCisweEI5CTB4MDBCRQkjVlVMR0FSIEZSQUNUSU9OIFRIUkVFIFFVQVJURVJTCisweEJBCTB4MDBBQwkjTk9UIFNJR04KKzB4QkIJMHgwMDdDCSNWRVJUSUNBTCBMSU5FCisweEJDCTB4MjAzRQkjT1ZFUkxJTkUKKzB4QkQJMHgwMEE4CSNESUFFUkVTSVMKKzB4QkUJMHgwMEI0CSNBQ1VURSBBQ0NFTlQKKzB4QkYJMHgwMEQ3CSNNVUxUSVBMSUNBVElPTiBTSUdOCisweEMwCTB4MDBFNAkjTEFUSU4gU01BTEwgTEVUVEVSIEEgV0lUSCBESUFFUkVTSVMKKzB4QzEJMHgwMDQxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBBCisweEMyCTB4MDA0MgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgQgorMHhDMwkweDAwNDMJI0xBVElOIENBUElUQUwgTEVUVEVSIEMKKzB4QzQJMHgwMDQ0CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBECisweEM1CTB4MDA0NQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgRQorMHhDNgkweDAwNDYJI0xBVElOIENBUElUQUwgTEVUVEVSIEYKKzB4QzcJMHgwMDQ3CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBHCisweEM4CTB4MDA0OAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgSAorMHhDOQkweDAwNDkJI0xBVElOIENBUElUQUwgTEVUVEVSIEkKKzB4Q0EJMHgwMEFECSNTT0ZUIEhZUEhFTgorMHhDQgkweDAwRjQJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggQ0lSQ1VNRkxFWAorMHhDQwkweDAwQTYJI0JST0tFTiBCQVIKKzB4Q0QJMHgwMEYyCSNMQVRJTiBTTUFMTCBMRVRURVIgTyBXSVRIIEdSQVZFCisweENFCTB4MDBGMwkjTEFUSU4gU01BTEwgTEVUVEVSIE8gV0lUSCBBQ1VURQorMHhDRgkweDAwRjUJI0xBVElOIFNNQUxMIExFVFRFUiBPIFdJVEggVElMREUKKzB4RDAJMHgwMEZDCSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIERJQUVSRVNJUworMHhEMQkweDAwNEEJI0xBVElOIENBUElUQUwgTEVUVEVSIEoKKzB4RDIJMHgwMDRCCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBLCisweEQzCTB4MDA0QwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTAorMHhENAkweDAwNEQJI0xBVElOIENBUElUQUwgTEVUVEVSIE0KKzB4RDUJMHgwMDRFCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBOCisweEQ2CTB4MDA0RgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTworMHhENwkweDAwNTAJI0xBVElOIENBUElUQUwgTEVUVEVSIFAKKzB4RDgJMHgwMDUxCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBRCisweEQ5CTB4MDA1MgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgUgorMHhEQQkweDAwQjkJI1NVUEVSU0NSSVBUIE9ORQorMHhEQgkweDAwRkIJI0xBVElOIFNNQUxMIExFVFRFUiBVIFdJVEggQ0lSQ1VNRkxFWAorMHhEQwkweDAwN0QJI1JJR0hUIENVUkxZIEJSQUNLRVQKKzB4REQJMHgwMEY5CSNMQVRJTiBTTUFMTCBMRVRURVIgVSBXSVRIIEdSQVZFCisweERFCTB4MDBGQQkjTEFUSU4gU01BTEwgTEVUVEVSIFUgV0lUSCBBQ1VURQorMHhERgkweDAwRkYJI0xBVElOIFNNQUxMIExFVFRFUiBZIFdJVEggRElBRVJFU0lTCisweEUwCTB4MDBENgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIERJQUVSRVNJUworMHhFMQkweDAwRjcJI0RJVklTSU9OIFNJR04KKzB4RTIJMHgwMDUzCSNMQVRJTiBDQVBJVEFMIExFVFRFUiBTCisweEUzCTB4MDA1NAkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVAorMHhFNAkweDAwNTUJI0xBVElOIENBUElUQUwgTEVUVEVSIFUKKzB4RTUJMHgwMDU2CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBWCisweEU2CTB4MDA1NwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVworMHhFNwkweDAwNTgJI0xBVElOIENBUElUQUwgTEVUVEVSIFgKKzB4RTgJMHgwMDU5CSNMQVRJTiBDQVBJVEFMIExFVFRFUiBZCisweEU5CTB4MDA1QQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgWgorMHhFQQkweDAwQjIJI1NVUEVSU0NSSVBUIFRXTworMHhFQgkweDAwRDQJI0xBVElOIENBUElUQUwgTEVUVEVSIE8gV0lUSCBDSVJDVU1GTEVYCisweEVDCTB4MDA1QwkjUkVWRVJTRSBTT0xJRFVTCisweEVECTB4MDBEMgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEdSQVZFCisweEVFCTB4MDBEMwkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIEFDVVRFCisweEVGCTB4MDBENQkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgTyBXSVRIIFRJTERFCisweEYwCTB4MDAzMAkjRElHSVQgWkVSTworMHhGMQkweDAwMzEJI0RJR0lUIE9ORQorMHhGMgkweDAwMzIJI0RJR0lUIFRXTworMHhGMwkweDAwMzMJI0RJR0lUIFRIUkVFCisweEY0CTB4MDAzNAkjRElHSVQgRk9VUgorMHhGNQkweDAwMzUJI0RJR0lUIEZJVkUKKzB4RjYJMHgwMDM2CSNESUdJVCBTSVgKKzB4RjcJMHgwMDM3CSNESUdJVCBTRVZFTgorMHhGOAkweDAwMzgJI0RJR0lUIEVJR0hUCisweEY5CTB4MDAzOQkjRElHSVQgTklORQorMHhGQQkweDAwQjMJI1NVUEVSU0NSSVBUIFRIUkVFCisweEZCCTB4MDBEQgkjTEFUSU4gQ0FQSVRBTCBMRVRURVIgVSBXSVRIIENJUkNVTUZMRVgKKzB4RkMJMHgwMDVECSNSSUdIVCBTUVVBUkUgQlJBQ0tFVAorMHhGRAkweDAwRDkJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBHUkFWRQorMHhGRQkweDAwREEJI0xBVElOIENBUElUQUwgTEVUVEVSIFUgV0lUSCBBQ1VURQorMHhGRgkweDAwOUYJI0FQUExJQ0FUSU9OIFBST0dSQU0gQ09NTUFORCAoQVBDKQorCisgCSAgCSAKZGlmZiAtLWdpdCBhL2FjbG9jYWwubTQgYi9hY2xvY2FsLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkMjVmYjkKLS0tIC9kZXYvbnVsbAorKysgYi9hY2xvY2FsLm00CkBAIC0wLDAgKzEsMjI5IEBACisjIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xNC4xIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCittNF9pZm5kZWYoW0FDX0NPTkZJR19NQUNST19ESVJTXSwgW200X2RlZnVuKFtfQU1fQ09ORklHX01BQ1JPX0RJUlNdLCBbXSltNF9kZWZ1bihbQUNfQ09ORklHX01BQ1JPX0RJUlNdLCBbX0FNX0NPTkZJR19NQUNST19ESVJTKCRAKV0pXSkKKyMgcGtnLm00IC0gTWFjcm9zIHRvIGxvY2F0ZSBhbmQgdXRpbGlzZSBwa2ctY29uZmlnLiAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgc2VyaWFsIDEgKHBrZy1jb25maWctMC4yNCkKKyMgCisjIENvcHlyaWdodCDCqSAyMDA0IFNjb3R0IEphbWVzIFJlbW5hbnQgPHNjb3R0QG5ldHNwbGl0LmNvbT4uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBQS0dfUFJPR19QS0dfQ09ORklHKFtNSU4tVkVSU0lPTl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtQS0dfUFJPR19QS0dfQ09ORklHXSwKK1ttNF9wYXR0ZXJuX2ZvcmJpZChbXl8/UEtHX1tBLVpfXSskXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHKF8oUEFUSHxMSUJESVJ8U1lTUk9PVF9ESVJ8QUxMT1dfU1lTVEVNXyhDRkxBR1N8TElCUykpKT8kXSkKK200X3BhdHRlcm5fYWxsb3coW15QS0dfQ09ORklHXyhESVNBQkxFX1VOSU5TVEFMTEVEfFRPUF9CVUlMRF9ESVJ8REVCVUdfU1BFVykkXSkKK0FDX0FSR19WQVIoW1BLR19DT05GSUddLCBbcGF0aCB0byBwa2ctY29uZmlnIHV0aWxpdHldKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR19QQVRIXSwgW2RpcmVjdG9yaWVzIHRvIGFkZCB0byBwa2ctY29uZmlnJ3Mgc2VhcmNoIHBhdGhdKQorQUNfQVJHX1ZBUihbUEtHX0NPTkZJR19MSUJESVJdLCBbcGF0aCBvdmVycmlkaW5nIHBrZy1jb25maWcncyBidWlsdC1pbiBzZWFyY2ggcGF0aF0pCisKK2lmIHRlc3QgIngkYWNfY3ZfZW52X1BLR19DT05GSUdfc2V0IiAhPSAieHNldCI7IHRoZW4KKwlBQ19QQVRIX1RPT0woW1BLR19DT05GSUddLCBbcGtnLWNvbmZpZ10pCitmaQoraWYgdGVzdCAtbiAiJFBLR19DT05GSUciOyB0aGVuCisJX3BrZ19taW5fdmVyc2lvbj1tNF9kZWZhdWx0KFskMV0sIFswLjkuMF0pCisJQUNfTVNHX0NIRUNLSU5HKFtwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb25dKQorCWlmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAkX3BrZ19taW5fdmVyc2lvbjsgdGhlbgorCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQorCWVsc2UKKwkJQUNfTVNHX1JFU1VMVChbbm9dKQorCQlQS0dfQ09ORklHPSIiCisJZmkKK2ZpW11kbmwKK10pIyBQS0dfUFJPR19QS0dfQ09ORklHCisKKyMgUEtHX0NIRUNLX0VYSVNUUyhNT0RVTEVTLCBbQUNUSU9OLUlGLUZPVU5EXSwgW0FDVElPTi1JRi1OT1QtRk9VTkRdKQorIworIyBDaGVjayB0byBzZWUgd2hldGhlciBhIHBhcnRpY3VsYXIgc2V0IG9mIG1vZHVsZXMgZXhpc3RzLiAgU2ltaWxhcgorIyB0byBQS0dfQ0hFQ0tfTU9EVUxFUygpLCBidXQgZG9lcyBub3Qgc2V0IHZhcmlhYmxlcyBvciBwcmludCBlcnJvcnMuCisjCisjIFBsZWFzZSByZW1lbWJlciB0aGF0IG00IGV4cGFuZHMgQUNfUkVRVUlSRShbUEtHX1BST0dfUEtHX0NPTkZJR10pCisjIG9ubHkgYXQgdGhlIGZpcnN0IG9jY3VyZW5jZSBpbiBjb25maWd1cmUuYWMsIHNvIGlmIHRoZSBmaXJzdCBwbGFjZQorIyBpdCdzIGNhbGxlZCBtaWdodCBiZSBza2lwcGVkIChzdWNoIGFzIGlmIGl0IGlzIHdpdGhpbiBhbiAiaWYiLCB5b3UKKyMgaGF2ZSB0byBjYWxsIFBLR19DSEVDS19FWElTVFMgbWFudWFsbHkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtQS0dfQ0hFQ0tfRVhJU1RTXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKK2lmIHRlc3QgLW4gIiRQS0dfQ09ORklHIiAmJiBcCisgICAgQUNfUlVOX0xPRyhbJFBLR19DT05GSUcgLS1leGlzdHMgLS1wcmludC1lcnJvcnMgIiQxIl0pOyB0aGVuCisgIG00X2RlZmF1bHQoWyQyXSwgWzpdKQorbTRfaWZ2YWxuKFskM10sIFtlbHNlCisgICQzXSlkbmwKK2ZpXSkKKworIyBfUEtHX0NPTkZJRyhbVkFSSUFCTEVdLCBbQ09NTUFORF0sIFtNT0RVTEVTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19QS0dfQ09ORklHXSwKK1tpZiB0ZXN0IC1uICIkJDEiOyB0aGVuCisgICAgcGtnX2N2X1tdJDE9IiQkMSIKKyBlbGlmIHRlc3QgLW4gIiRQS0dfQ09ORklHIjsgdGhlbgorICAgIFBLR19DSEVDS19FWElTVFMoWyQzXSwKKyAgICAgICAgICAgICAgICAgICAgIFtwa2dfY3ZfW10kMT1gJFBLR19DT05GSUcgLS1bXSQyICIkMyIgMj4vZGV2L251bGxgCisJCSAgICAgIHRlc3QgIngkPyIgIT0gIngwIiAmJiBwa2dfZmFpbGVkPXllcyBdLAorCQkgICAgIFtwa2dfZmFpbGVkPXllc10pCisgZWxzZQorICAgIHBrZ19mYWlsZWQ9dW50cmllZAorZmlbXWRubAorXSkjIF9QS0dfQ09ORklHCisKKyMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVEXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSkKK2lmICRQS0dfQ09ORklHIC0tYXRsZWFzdC1wa2djb25maWctdmVyc2lvbiAwLjIwOyB0aGVuCisgICAgICAgIF9wa2dfc2hvcnRfZXJyb3JzX3N1cHBvcnRlZD15ZXMKK2Vsc2UKKyAgICAgICAgX3BrZ19zaG9ydF9lcnJvcnNfc3VwcG9ydGVkPW5vCitmaVtdZG5sCitdKSMgX1BLR19TSE9SVF9FUlJPUlNfU1VQUE9SVEVECisKKworIyBQS0dfQ0hFQ0tfTU9EVUxFUyhWQVJJQUJMRS1QUkVGSVgsIE1PRFVMRVMsIFtBQ1RJT04tSUYtRk9VTkRdLAorIyBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjCisjCisjIE5vdGUgdGhhdCBpZiB0aGVyZSBpcyBhIHBvc3NpYmlsaXR5IHRoZSBmaXJzdCBjYWxsIHRvCisjIFBLR19DSEVDS19NT0RVTEVTIG1pZ2h0IG5vdCBoYXBwZW4sIHlvdSBzaG91bGQgYmUgc3VyZSB0byBpbmNsdWRlIGFuCisjIGV4cGxpY2l0IGNhbGwgdG8gUEtHX1BST0dfUEtHX0NPTkZJRyBpbiB5b3VyIGNvbmZpZ3VyZS5hYworIworIworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW1BLR19DSEVDS19NT0RVTEVTXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKK0FDX0FSR19WQVIoWyQxXVtfQ0ZMQUdTXSwgW0MgY29tcGlsZXIgZmxhZ3MgZm9yICQxLCBvdmVycmlkaW5nIHBrZy1jb25maWddKWRubAorQUNfQVJHX1ZBUihbJDFdW19MSUJTXSwgW2xpbmtlciBmbGFncyBmb3IgJDEsIG92ZXJyaWRpbmcgcGtnLWNvbmZpZ10pZG5sCisKK3BrZ19mYWlsZWQ9bm8KK0FDX01TR19DSEVDS0lORyhbZm9yICQxXSkKKworX1BLR19DT05GSUcoWyQxXVtfQ0ZMQUdTXSwgW2NmbGFnc10sIFskMl0pCitfUEtHX0NPTkZJRyhbJDFdW19MSUJTXSwgW2xpYnNdLCBbJDJdKQorCittNF9kZWZpbmUoW19QS0dfVEVYVF0sIFtBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzICQxW11fQ0ZMQUdTCithbmQgJDFbXV9MSUJTIHRvIGF2b2lkIHRoZSBuZWVkIHRvIGNhbGwgcGtnLWNvbmZpZy4KK1NlZSB0aGUgcGtnLWNvbmZpZyBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLl0pCisKK2lmIHRlc3QgJHBrZ19mYWlsZWQgPSB5ZXM7IHRoZW4KKyAgIAlBQ19NU0dfUkVTVUxUKFtub10pCisgICAgICAgIF9QS0dfU0hPUlRfRVJST1JTX1NVUFBPUlRFRAorICAgICAgICBpZiB0ZXN0ICRfcGtnX3Nob3J0X2Vycm9yc19zdXBwb3J0ZWQgPSB5ZXM7IHRoZW4KKwkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1zaG9ydC1lcnJvcnMgLS1wcmludC1lcnJvcnMgLS1jZmxhZ3MgLS1saWJzICIkMiIgMj4mMWAKKyAgICAgICAgZWxzZSAKKwkgICAgICAgICQxW11fUEtHX0VSUk9SUz1gJFBLR19DT05GSUcgLS1wcmludC1lcnJvcnMgLS1jZmxhZ3MgLS1saWJzICIkMiIgMj4mMWAKKyAgICAgICAgZmkKKwkjIFB1dCB0aGUgbmFzdHkgZXJyb3IgbWVzc2FnZSBpbiBjb25maWcubG9nIHdoZXJlIGl0IGJlbG9uZ3MKKwllY2hvICIkJDFbXV9QS0dfRVJST1JTIiA+JkFTX01FU1NBR0VfTE9HX0ZECisKKwltNF9kZWZhdWx0KFskNF0sIFtBQ19NU0dfRVJST1IoCitbUGFja2FnZSByZXF1aXJlbWVudHMgKCQyKSB3ZXJlIG5vdCBtZXQ6CisKKyQkMV9QS0dfRVJST1JTCisKK0NvbnNpZGVyIGFkanVzdGluZyB0aGUgUEtHX0NPTkZJR19QQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHlvdQoraW5zdGFsbGVkIHNvZnR3YXJlIGluIGEgbm9uLXN0YW5kYXJkIHByZWZpeC4KKworX1BLR19URVhUXSlbXWRubAorICAgICAgICBdKQorZWxpZiB0ZXN0ICRwa2dfZmFpbGVkID0gdW50cmllZDsgdGhlbgorICAgICAJQUNfTVNHX1JFU1VMVChbbm9dKQorCW00X2RlZmF1bHQoWyQ0XSwgW0FDX01TR19GQUlMVVJFKAorW1RoZSBwa2ctY29uZmlnIHNjcmlwdCBjb3VsZCBub3QgYmUgZm91bmQgb3IgaXMgdG9vIG9sZC4gIE1ha2Ugc3VyZSBpdAoraXMgaW4geW91ciBQQVRIIG9yIHNldCB0aGUgUEtHX0NPTkZJRyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZnVsbAorcGF0aCB0byBwa2ctY29uZmlnLgorCitfUEtHX1RFWFQKKworVG8gZ2V0IHBrZy1jb25maWcsIHNlZSA8aHR0cDovL3BrZy1jb25maWcuZnJlZWRlc2t0b3Aub3JnLz4uXSlbXWRubAorICAgICAgICBdKQorZWxzZQorCSQxW11fQ0ZMQUdTPSRwa2dfY3ZfW10kMVtdX0NGTEFHUworCSQxW11fTElCUz0kcGtnX2N2X1tdJDFbXV9MSUJTCisgICAgICAgIEFDX01TR19SRVNVTFQoW3llc10pCisJJDMKK2ZpW11kbmwKK10pIyBQS0dfQ0hFQ0tfTU9EVUxFUworCisKKyMgUEtHX0lOU1RBTExESVIoRElSRUNUT1JZKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFN1YnN0aXR1dGVzIHRoZSB2YXJpYWJsZSBwa2djb25maWdkaXIgYXMgdGhlIGxvY2F0aW9uIHdoZXJlIGEgbW9kdWxlCisjIHNob3VsZCBpbnN0YWxsIHBrZy1jb25maWcgLnBjIGZpbGVzLiBCeSBkZWZhdWx0IHRoZSBkaXJlY3RvcnkgaXMKKyMgJGxpYmRpci9wa2djb25maWcsIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZCBieSBwYXNzaW5nCisjIERJUkVDVE9SWS4gVGhlIHVzZXIgY2FuIG92ZXJyaWRlIHRocm91Z2ggdGhlIC0td2l0aC1wa2djb25maWdkaXIKKyMgcGFyYW1ldGVyLgorQUNfREVGVU4oW1BLR19JTlNUQUxMRElSXSwKK1ttNF9wdXNoZGVmKFtwa2dfZGVmYXVsdF0sIFttNF9kZWZhdWx0KFskMV0sIFsnJHtsaWJkaXJ9L3BrZ2NvbmZpZyddKV0pCittNF9wdXNoZGVmKFtwa2dfZGVzY3JpcHRpb25dLAorICAgIFtwa2ctY29uZmlnIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkgQDw6QF1wa2dfZGVmYXVsdFtAOj5AXSkKK0FDX0FSR19XSVRIKFtwa2djb25maWdkaXJdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBrZ2NvbmZpZ2Rpcl0sIHBrZ19kZXNjcmlwdGlvbildLCwKKyAgICBbd2l0aF9wa2djb25maWdkaXI9XXBrZ19kZWZhdWx0KQorQUNfU1VCU1QoW3BrZ2NvbmZpZ2Rpcl0sIFskd2l0aF9wa2djb25maWdkaXJdKQorbTRfcG9wZGVmKFtwa2dfZGVmYXVsdF0pCittNF9wb3BkZWYoW3BrZ19kZXNjcmlwdGlvbl0pCitdKSBkbmwgUEtHX0lOU1RBTExESVIKKworCisjIFBLR19OT0FSQ0hfSU5TVEFMTERJUihESVJFQ1RPUlkpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU3Vic3RpdHV0ZXMgdGhlIHZhcmlhYmxlIG5vYXJjaF9wa2djb25maWdkaXIgYXMgdGhlIGxvY2F0aW9uIHdoZXJlIGEKKyMgbW9kdWxlIHNob3VsZCBpbnN0YWxsIGFyY2gtaW5kZXBlbmRlbnQgcGtnLWNvbmZpZyAucGMgZmlsZXMuIEJ5CisjIGRlZmF1bHQgdGhlIGRpcmVjdG9yeSBpcyAkZGF0YWRpci9wa2djb25maWcsIGJ1dCB0aGUgZGVmYXVsdCBjYW4gYmUKKyMgY2hhbmdlZCBieSBwYXNzaW5nIERJUkVDVE9SWS4gVGhlIHVzZXIgY2FuIG92ZXJyaWRlIHRocm91Z2ggdGhlCisjIC0td2l0aC1ub2FyY2gtcGtnY29uZmlnZGlyIHBhcmFtZXRlci4KK0FDX0RFRlVOKFtQS0dfTk9BUkNIX0lOU1RBTExESVJdLAorW200X3B1c2hkZWYoW3BrZ19kZWZhdWx0XSwgW200X2RlZmF1bHQoWyQxXSwgWycke2RhdGFkaXJ9L3BrZ2NvbmZpZyddKV0pCittNF9wdXNoZGVmKFtwa2dfZGVzY3JpcHRpb25dLAorICAgIFtwa2ctY29uZmlnIGFyY2gtaW5kZXBlbmRlbnQgaW5zdGFsbGF0aW9uIGRpcmVjdG9yeSBAPDpAXXBrZ19kZWZhdWx0W0A6PkBdKQorQUNfQVJHX1dJVEgoW25vYXJjaC1wa2djb25maWdkaXJdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLW5vYXJjaC1wa2djb25maWdkaXJdLCBwa2dfZGVzY3JpcHRpb24pXSwsCisgICAgW3dpdGhfbm9hcmNoX3BrZ2NvbmZpZ2Rpcj1dcGtnX2RlZmF1bHQpCitBQ19TVUJTVChbbm9hcmNoX3BrZ2NvbmZpZ2Rpcl0sIFskd2l0aF9ub2FyY2hfcGtnY29uZmlnZGlyXSkKK200X3BvcGRlZihbcGtnX2RlZmF1bHRdKQorbTRfcG9wZGVmKFtwa2dfZGVzY3JpcHRpb25dKQorXSkgZG5sIFBLR19OT0FSQ0hfSU5TVEFMTERJUgorCisKKyMgUEtHX0NIRUNLX1ZBUihWQVJJQUJMRSwgTU9EVUxFLCBDT05GSUctVkFSSUFCTEUsCisjIFtBQ1RJT04tSUYtRk9VTkRdLCBbQUNUSU9OLUlGLU5PVC1GT1VORF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmV0cmlldmVzIHRoZSB2YWx1ZSBvZiB0aGUgcGtnLWNvbmZpZyB2YXJpYWJsZSBmb3IgdGhlIGdpdmVuIG1vZHVsZS4KK0FDX0RFRlVOKFtQS0dfQ0hFQ0tfVkFSXSwKK1tBQ19SRVFVSVJFKFtQS0dfUFJPR19QS0dfQ09ORklHXSlkbmwKK0FDX0FSR19WQVIoWyQxXSwgW3ZhbHVlIG9mICQzIGZvciAkMiwgb3ZlcnJpZGluZyBwa2ctY29uZmlnXSlkbmwKKworX1BLR19DT05GSUcoWyQxXSwgW3ZhcmlhYmxlPSJdWyQzXVsiXSwgWyQyXSkKK0FTX1ZBUl9DT1BZKFskMV0sIFtwa2dfY3ZfXVskMV0pCisKK0FTX1ZBUl9JRihbJDFdLCBbIiJdLCBbJDVdLCBbJDRdKWRubAorXSkjIFBLR19DSEVDS19WQVIKKwpkaWZmIC0tZ2l0IGEvY29uZmlnLmd1ZXNzIGIvY29uZmlnLmd1ZXNzCmluZGV4IGI3OTI1MmQuLjFmNWM1MGMgMTAwNzU1Ci0tLSBhL2NvbmZpZy5ndWVzcworKysgYi9jb25maWcuZ3Vlc3MKQEAgLTEsOCArMSw4IEBACiAjISAvYmluL3NoCiAjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMTMtMDYtMTAnCit0aW1lc3RhbXA9JzIwMTQtMDMtMjMnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTUwLDcgKzUwLDcgQEAKIEdOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCiAKIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KLUNvcHlyaWdodCAxOTkyLTIwMTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCiBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTwogd2FycmFudHk7IG5vdCBldmVuIGZvciBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIgpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJTElCQz1nbnUKIAkjZW5kaWYKIAlFT0YKLQlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeTElCQycgfCBzZWQgJ3MsICwsZydgCiAJOzsKIGVzYWMKIApAQCAtODI2LDcgKzgyNiw3IEBACiAgICAgKjpNSU5HVyo6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbWluZ3czMgogCWV4aXQgOzsKLSAgICBpKjpNU1lTKjoqKQorICAgICo6TVNZUyo6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXN5cwogCWV4aXQgOzsKICAgICBpKjp3aW5kb3dzMzIqOiopCkBAIC05NjksMTAgKzk2OSwxMCBAQAogCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKIAl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtJHtMSUJDfSI7IGV4aXQ7IH0KIAk7OwotICAgIG9yMWs6TGludXg6KjoqKQotCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LSR7TElCQ30KKyAgICBvcGVucmlzYyo6TGludXg6KjoqKQorCWVjaG8gb3Ixay11bmtub3duLWxpbnV4LSR7TElCQ30KIAlleGl0IDs7Ci0gICAgb3IzMjpMaW51eDoqOiopCisgICAgb3IzMjpMaW51eDoqOiogfCBvcjFrKjpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtJHtMSUJDfQogCWV4aXQgOzsKICAgICBwYWRyZTpMaW51eDoqOiopCkBAIC0xMjYwLDE2ICsxMjYwLDI2IEBACiAJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSB1bmtub3duIDsgdGhlbgogCSAgICBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYwogCWZpCi0JaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCi0JICAgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAotCQkoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAotCQlncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAotCSAgICB0aGVuCi0JCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgotCQkgICAgaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OwotCQkgICAgcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OwotCQllc2FjCisJaWYgdGVzdCBgZWNobyAiJFVOQU1FX1JFTEVBU0UiIHwgc2VkIC1lICdzL1wuLiovLydgIC1sZSAxMCA7IHRoZW4KKwkgICAgaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJCWlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkgICAgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8IFwKKwkJICAgIGdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJCXRoZW4KKwkJICAgIGNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCQkJaTM4NikgVU5BTUVfUFJPQ0VTU09SPXg4Nl82NCA7OworCQkJcG93ZXJwYykgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGM2NCA7OworCQkgICAgZXNhYworCQlmaQogCSAgICBmaQorCWVsaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSBpMzg2IDsgdGhlbgorCSAgICAjIEF2b2lkIGV4ZWN1dGluZyBjYyBvbiBPUyBYIDEwLjksIGFzIGl0IHNoaXBzIHdpdGggYSBzdHViCisJICAgICMgdGhhdCBwdXRzIHVwIGEgZ3JhcGhpY2FsIGFsZXJ0IHByb21wdGluZyB0byBpbnN0YWxsCisJICAgICMgZGV2ZWxvcGVyIHRvb2xzLiAgQW55IHN5c3RlbSBydW5uaW5nIE1hYyBPUyBYIDEwLjcgb3IKKwkgICAgIyBsYXRlciAoRGFyd2luIDExIGFuZCBsYXRlcikgaXMgcmVxdWlyZWQgdG8gaGF2ZSBhIDY0LWJpdAorCSAgICAjIHByb2Nlc3Nvci4gVGhpcyBpcyBub3QgdHJ1ZSBvZiB0aGUgQVJNIHZlcnNpb24gb2YgRGFyd2luCisJICAgICMgdGhhdCBBcHBsZSB1c2VzIGluIHBvcnRhYmxlIGRldmljZXMuCisJICAgIFVOQU1FX1BST0NFU1NPUj14ODZfNjQKIAlmaQogCWVjaG8gJHtVTkFNRV9QUk9DRVNTT1J9LWFwcGxlLWRhcndpbiR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CkBAIC0xMzYxLDE1NCArMTM3MSw2IEBACiAJZXhpdCA7OwogZXNhYwogCi1ldmFsICRzZXRfY2NfZm9yX2J1aWxkCi1jYXQgPiRkdW1teS5jIDw8RU9GCi0jaWZkZWYgX1NFUVVFTlRfCi0jIGluY2x1ZGUgPHN5cy90eXBlcy5oPgotIyBpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgotI2VuZGlmCi1tYWluICgpCi17Ci0jaWYgZGVmaW5lZCAoc29ueSkKLSNpZiBkZWZpbmVkIChNSVBTRUIpCi0gIC8qIEJGRCB3YW50cyAiYnNkIiBpbnN0ZWFkIG9mICJuZXdzb3MiLiAgUGVyaGFwcyBCRkQgc2hvdWxkIGJlIGNoYW5nZWQsCi0gICAgIEkgZG9uJ3Qga25vdy4uLi4gICovCi0gIHByaW50ZiAoIm1pcHMtc29ueS1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbHNlCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0gIHByaW50ZiAoIm02OGstc29ueS1uZXdzb3Mlc1xuIiwKLSNpZmRlZiBORVdTT1M0Ci0JIjQiCi0jZWxzZQotCSIiCi0jZW5kaWYKLQkpOyBleGl0ICgwKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfX2FybSkgJiYgZGVmaW5lZCAoX19hY29ybikgJiYgZGVmaW5lZCAoX191bml4KQotICBwcmludGYgKCJhcm0tYWNvcm4tcmlzY2l4XG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQgKGhwMzAwKSAmJiAhZGVmaW5lZCAoaHB1eCkKLSAgcHJpbnRmICgibTY4ay1ocC1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoTmVYVCkKLSNpZiAhZGVmaW5lZCAoX19BUkNISVRFQ1RVUkVfXykKLSNkZWZpbmUgX19BUkNISVRFQ1RVUkVfXyAibTY4ayIKLSNlbmRpZgotICBpbnQgdmVyc2lvbjsKLSAgdmVyc2lvbj1gKGhvc3RpbmZvIHwgc2VkIC1uICdzLy4qTmVYVCBNYWNoIFwoWzAtOV0qXCkuKi9cMS9wJykgMj4vZGV2L251bGxgOwotICBpZiAodmVyc2lvbiA8IDQpCi0gICAgcHJpbnRmICgiJXMtbmV4dC1uZXh0c3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKLSAgZWxzZQotICAgIHByaW50ZiAoIiVzLW5leHQtb3BlbnN0ZXAlZFxuIiwgX19BUkNISVRFQ1RVUkVfXywgdmVyc2lvbik7Ci0gIGV4aXQgKDApOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChNVUxUSU1BWCkgfHwgZGVmaW5lZCAobjE2KQotI2lmIGRlZmluZWQgKFVNQVhWKQotICBwcmludGYgKCJuczMyay1lbmNvcmUtc3lzdlxuIik7IGV4aXQgKDApOwotI2Vsc2UKLSNpZiBkZWZpbmVkIChDTVUpCi0gIHByaW50ZiAoIm5zMzJrLWVuY29yZS1tYWNoXG4iKTsgZXhpdCAoMCk7Ci0jZWxzZQotICBwcmludGYgKCJuczMyay1lbmNvcmUtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChfXzM4NkJTRF9fKQotICBwcmludGYgKCJpMzg2LXBjLWJzZFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChzZXF1ZW50KQotI2lmIGRlZmluZWQgKGkzODYpCi0gIHByaW50ZiAoImkzODYtc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0jaWYgZGVmaW5lZCAobnMzMjAwMCkKLSAgcHJpbnRmICgibnMzMmstc2VxdWVudC1keW5peFxuIik7IGV4aXQgKDApOwotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9TRVFVRU5UXykKLSAgICBzdHJ1Y3QgdXRzbmFtZSB1bjsKLQotICAgIHVuYW1lKCZ1bik7Ci0KLSAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjIiLCAyKSA9PSAwKSB7Ci0JcHJpbnRmICgiaTM4Ni1zZXF1ZW50LXB0eDJcbiIpOyBleGl0ICgwKTsKLSAgICB9Ci0gICAgaWYgKHN0cm5jbXAodW4udmVyc2lvbiwgIlYxIiwgMikgPT0gMCkgeyAvKiBYWFggaXMgVjEgY29ycmVjdD8gKi8KLQlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MVxuIik7IGV4aXQgKDApOwotICAgIH0KLSAgICBwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4XG4iKTsgZXhpdCAoMCk7Ci0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAodmF4KQotIyBpZiAhZGVmaW5lZCAodWx0cml4KQotIyAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jICBpZiBkZWZpbmVkIChCU0QpCi0jICAgaWYgQlNEID09IDQzCi0gICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM1xuIik7IGV4aXQgKDApOwotIyAgIGVsc2UKLSMgICAgaWYgQlNEID09IDE5OTAwNgotICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2Q0LjNyZW5vXG4iKTsgZXhpdCAoMCk7Ci0jICAgIGVsc2UKLSAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7Ci0jICAgIGVuZGlmCi0jICAgZW5kaWYKLSMgIGVsc2UKLSAgICBwcmludGYgKCJ2YXgtZGVjLWJzZFxuIik7IGV4aXQgKDApOwotIyAgZW5kaWYKLSMgZWxzZQotICAgIHByaW50ZiAoInZheC1kZWMtdWx0cml4XG4iKTsgZXhpdCAoMCk7Ci0jIGVuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKGFsbGlhbnQpICYmIGRlZmluZWQgKGk4NjApCi0gIHByaW50ZiAoImk4NjAtYWxsaWFudC1ic2RcbiIpOyBleGl0ICgwKTsKLSNlbmRpZgotCi0gIGV4aXQgKDEpOwotfQotRU9GCi0KLSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jIDI+L2Rldi9udWxsICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCi0JeyBlY2hvICIkU1lTVEVNX05BTUUiOyBleGl0OyB9Ci0KLSMgQXBvbGxvcyBwdXQgdGhlIHN5c3RlbSB0eXBlIGluIHRoZSBlbnZpcm9ubWVudC4KLQotdGVzdCAtZCAvdXNyL2Fwb2xsbyAmJiB7IGVjaG8gJHtJU1B9LWFwb2xsby0ke1NZU1RZUEV9OyBleGl0OyB9Ci0KLSMgQ29udmV4IHZlcnNpb25zIHRoYXQgcHJlZGF0ZSB1bmFtZSBjYW4gdXNlIGdldHN5c2luZm8oMSkKLQotaWYgWyAteCAvdXNyL2NvbnZleC9nZXRzeXNpbmZvIF0KLXRoZW4KLSAgICBjYXNlIGBnZXRzeXNpbmZvIC1mIGNwdV90eXBlYCBpbgotICAgIGMxKikKLQllY2hvIGMxLWNvbnZleC1ic2QKLQlleGl0IDs7Ci0gICAgYzIqKQotCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYwotCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAotCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCi0JZmkKLQlleGl0IDs7Ci0gICAgYzM0KikKLQllY2hvIGMzNC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIGMzOCopCi0JZWNobyBjMzgtY29udmV4LWJzZAotCWV4aXQgOzsKLSAgICBjNCopCi0JZWNobyBjNC1jb252ZXgtYnNkCi0JZXhpdCA7OwotICAgIGVzYWMKLWZpCi0KIGNhdCA+JjIgPDxFT0YKICQwOiB1bmFibGUgdG8gZ3Vlc3Mgc3lzdGVtIHR5cGUKIApkaWZmIC0tZ2l0IGEvY29uZmlnLnN1YiBiL2NvbmZpZy5zdWIKaW5kZXggOTYzM2RiNy4uZDY1NGQwMyAxMDA3NTUKLS0tIGEvY29uZmlnLnN1YgorKysgYi9jb25maWcuc3ViCkBAIC0xLDggKzEsOCBAQAogIyEgL2Jpbi9zaAogIyBDb25maWd1cmF0aW9uIHZhbGlkYXRpb24gc3Vicm91dGluZSBzY3JpcHQuCi0jICAgQ29weXJpZ2h0IDE5OTItMjAxMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBDb3B5cmlnaHQgMTk5Mi0yMDE0IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogCi10aW1lc3RhbXA9JzIwMTMtMDgtMTAnCit0aW1lc3RhbXA9JzIwMTQtMDUtMDEnCiAKICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTY4LDcgKzY4LDcgQEAKIHZlcnNpb249IlwKIEdOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQogCi1Db3B5cmlnaHQgMTk5Mi0yMDEzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IDE5OTItMjAxNCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKQEAgLTI2NSw2ICsyNjUsNyBAQAogCXwgaGV4YWdvbiBcCiAJfCBpMzcwIHwgaTg2MCB8IGk5NjAgfCBpYTY0IFwKIAl8IGlwMmsgfCBpcTIwMDAgXAorCXwgazFvbSBcCiAJfCBsZTMyIHwgbGU2NCBcCiAJfCBsbTMyIFwKIAl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXApAQCAtMjgyLDggKzI4MywxMCBAQAogCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAogCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAogCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKKwl8IG1pcHNpc2EzMnI2IHwgbWlwc2lzYTMycjZlbCBcCiAJfCBtaXBzaXNhNjQgfCBtaXBzaXNhNjRlbCBcCiAJfCBtaXBzaXNhNjRyMiB8IG1pcHNpc2E2NHIyZWwgXAorCXwgbWlwc2lzYTY0cjYgfCBtaXBzaXNhNjRyNmVsIFwKIAl8IG1pcHNpc2E2NHNiMSB8IG1pcHNpc2E2NHNiMWVsIFwKIAl8IG1pcHNpc2E2NHNyNzFrIHwgbWlwc2lzYTY0c3I3MWtlbCBcCiAJfCBtaXBzcjU5MDAgfCBtaXBzcjU5MDBlbCBcCkBAIC0yOTUsOCArMjk4LDcgQEAKIAl8IG5kczMyIHwgbmRzMzJsZSB8IG5kczMyYmUgXAogCXwgbmlvcyB8IG5pb3MyIHwgbmlvczJlYiB8IG5pb3MyZWwgXAogCXwgbnMxNmsgfCBuczMyayBcCi0JfCBvcGVuOCBcCi0JfCBvcjFrIHwgb3IzMiBcCisJfCBvcGVuOCB8IG9yMWsgfCBvcjFrbmQgfCBvcjMyIFwKIAl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCiAJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgXAogCXwgcHlyYW1pZCBcCkBAIC0zMjQsNyArMzI2LDcgQEAKIAljNngpCiAJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgogCQk7OwotCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IHBpY29jaGlwKQorCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMiB8IG02OGhjczEyeCB8IG52cHR4IHwgcGljb2NoaXApCiAJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgogCQlvcz0tbm9uZQogCQk7OwpAQCAtMzgxLDYgKzM4Myw3IEBACiAJfCBoZXhhZ29uLSogXAogCXwgaSo4Ni0qIHwgaTg2MC0qIHwgaTk2MC0qIHwgaWE2NC0qIFwKIAl8IGlwMmstKiB8IGlxMjAwMC0qIFwKKwl8IGsxb20tKiBcCiAJfCBsZTMyLSogfCBsZTY0LSogXAogCXwgbG0zMi0qIFwKIAl8IG0zMmMtKiB8IG0zMnItKiB8IG0zMnJsZS0qIFwKQEAgLTQwMCw4ICs0MDMsMTAgQEAKIAl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCiAJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAogCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhMzJyNi0qIHwgbWlwc2lzYTMycjZlbC0qIFwKIAl8IG1pcHNpc2E2NC0qIHwgbWlwc2lzYTY0ZWwtKiBcCiAJfCBtaXBzaXNhNjRyMi0qIHwgbWlwc2lzYTY0cjJlbC0qIFwKKwl8IG1pcHNpc2E2NHI2LSogfCBtaXBzaXNhNjRyNmVsLSogXAogCXwgbWlwc2lzYTY0c2IxLSogfCBtaXBzaXNhNjRzYjFlbC0qIFwKIAl8IG1pcHNpc2E2NHNyNzFrLSogfCBtaXBzaXNhNjRzcjcxa2VsLSogXAogCXwgbWlwc3I1OTAwLSogfCBtaXBzcjU5MDBlbC0qIFwKQEAgLTQxMyw2ICs0MTgsNyBAQAogCXwgbmlvcy0qIHwgbmlvczItKiB8IG5pb3MyZWItKiB8IG5pb3MyZWwtKiBcCiAJfCBub25lLSogfCBucDEtKiB8IG5zMTZrLSogfCBuczMyay0qIFwKIAl8IG9wZW44LSogXAorCXwgb3IxayotKiBcCiAJfCBvcmlvbi0qIFwKIAl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAogCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogXApAQCAtMTM3NCw3ICsxMzgwLDcgQEAKIAkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCiAJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCiAJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKLQkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyopCisJICAgICAgfCAtc2t5b3MqIHwgLWhhaWt1KiB8IC1yZG9zKiB8IC10b3BwZXJzKiB8IC1kcm9wcyogfCAtZXMqIHwgLXRpcnRvcyopCiAJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgogCQk7OwogCS1xbngqKQpAQCAtMTU5Miw5ICsxNTk4LDYgQEAKIAltaXBzKi0qKQogCQlvcz0tZWxmCiAJCTs7Ci0Jb3Ixay0qKQotCQlvcz0tZWxmCi0JCTs7CiAJb3IzMi0qKQogCQlvcz0tY29mZgogCQk7OwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGMyNzhjOGUuLjdiOTFmOTEgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsNiArMSw2IEBACiAjISAvYmluL3NoCiAjIEd1ZXNzIHZhbHVlcyBmb3Igc3lzdGVtLWRlcGVuZGVudCB2YXJpYWJsZXMgYW5kIGNyZWF0ZSBNYWtlZmlsZXMuCi0jIEdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OSBmb3IgcHl0aG9uIDMuMy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5IGZvciBweXRob24gMy40LgogIwogIyBSZXBvcnQgYnVncyB0byA8aHR0cDovL2J1Z3MucHl0aG9uLm9yZy8+LgogIwpAQCAtNTgwLDggKzU4MCw4IEBACiAjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KIFBBQ0tBR0VfTkFNRT0ncHl0aG9uJwogUEFDS0FHRV9UQVJOQU1FPSdweXRob24nCi1QQUNLQUdFX1ZFUlNJT049JzMuMycKLVBBQ0tBR0VfU1RSSU5HPSdweXRob24gMy4zJworUEFDS0FHRV9WRVJTSU9OPSczLjQnCitQQUNLQUdFX1NUUklORz0ncHl0aG9uIDMuNCcKIFBBQ0tBR0VfQlVHUkVQT1JUPSdodHRwOi8vYnVncy5weXRob24ub3JnLycKIFBBQ0tBR0VfVVJMPScnCiAKQEAgLTYyMyw4ICs2MjMsMTEgQEAKICNlbmRpZiIKIAogYWNfc3Vic3RfdmFycz0nTFRMSUJPQkpTCitFTlNVUkVQSVAKIFNSQ0RJUlMKIFRIUkVBREhFQURFUlMKK0xJQlBMCitQWV9FTkFCTEVfU0hBUkVECiBFWFRfU1VGRklYCiBTT0FCSQogTElCQwpAQCAtNjQ3LDYgKzY1MCw4IEBACiBUQ0xUS19MSUJTCiBUQ0xUS19JTkNMVURFUwogTElCRkZJX0lOQ0xVREVESVIKK1BLR19DT05GSUdfTElCRElSCitQS0dfQ09ORklHX1BBVEgKIFBLR19DT05GSUcKIFNITElCUwogQ0ZMQUdTRk9SU0hBUkVECkBAIC02NTksNiArNjY0LDcgQEAKIExJQlRPT0xfQ1JVRlQKIE9USEVSX0xJQlRPT0xfT1BUCiBVTklWRVJTQUxfQVJDSF9GTEFHUworQ0ZMQUdTX05PRElTVAogQkFTRUNGTEFHUwogT1BUCiBBQklGTEFHUwpAQCAtNzA1LDExICs3MTEsMTMgQEAKIENDCiBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCiBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUCitQTEFURElSCiBTR0lfQUJJCiBfUFlUSE9OX0hPU1RfUExBVEZPUk0KIE1BQ0hERVAKIEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYCiBGUkFNRVdPUktVTklYVE9PTFNQUkVGSVgKK0ZSQU1FV09SS1BZVEhPTlcKIEZSQU1FV09SS0FMVElOU1RBTExMQVNUCiBGUkFNRVdPUktBTFRJTlNUQUxMRklSU1QKIEZSQU1FV09SS0lOU1RBTExMQVNUCkBAIC03OTAsNiArNzk4LDcgQEAKIGVuYWJsZV9zaGFyZWQKIGVuYWJsZV9wcm9maWxpbmcKIHdpdGhfcHlkZWJ1Zword2l0aF9oYXNoX2FsZ29yaXRobQogd2l0aF9saWJzCiB3aXRoX3N5c3RlbV9leHBhdAogd2l0aF9zeXN0ZW1fZmZpCkBAIC04MTEsNiArODIwLDcgQEAKIHdpdGhfbGliYwogZW5hYmxlX2JpZ19kaWdpdHMKIHdpdGhfY29tcHV0ZWRfZ290b3MKK3dpdGhfZW5zdXJlcGlwCiAnCiAgICAgICBhY19wcmVjaW91c192YXJzPSdidWlsZF9hbGlhcwogaG9zdF9hbGlhcwpAQCAtODIxLDcgKzgzMSwxMCBAQAogTERGTEFHUwogTElCUwogQ1BQRkxBR1MKLUNQUCcKK0NQUAorUEtHX0NPTkZJRworUEtHX0NPTkZJR19QQVRICitQS0dfQ09ORklHX0xJQkRJUicKIAogCiAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCkBAIC0xMzYyLDcgKzEzNzUsNyBAQAogICAjIE9taXQgc29tZSBpbnRlcm5hbCBvciBvYnNvbGV0ZSBvcHRpb25zIHRvIG1ha2UgdGhlIGxpc3QgbGVzcyBpbXBvc2luZy4KICAgIyBUaGlzIG1lc3NhZ2UgaXMgdG9vIGxvbmcgdG8gYmUgYSBzdHJpbmcgaW4gdGhlIEEvVVggMy4xIHNoLgogICBjYXQgPDxfQUNFT0YKLVxgY29uZmlndXJlJyBjb25maWd1cmVzIHB5dGhvbiAzLjMgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgcHl0aG9uIDMuNCB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCiAKIFVzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgogCkBAIC0xNDI3LDcgKzE0NDAsNyBAQAogCiBpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgogICBjYXNlICRhY19pbml0X2hlbHAgaW4KLSAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIHB5dGhvbiAzLjM6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBweXRob24gMy40OiI7OwogICAgZXNhYwogICBjYXQgPDxcX0FDRU9GCiAKQEAgLTE0NTMsNyArMTQ2Niw3IEBACiAgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKICAgLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNICiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIjY0LWJpdCIsICIzLXdheSIsICJpbnRlbCIsICJpbnRlbC0zMiIsIG9yICJhbGwiKQogICAtLXdpdGgtZnJhbWV3b3JrLW5hbWU9RlJBTUVXT1JLCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgYW4gYWx0ZXJuYXRlIG5hbWUgb2YgdGhlIGZyYW1ld29yayBidWlsdAogICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIC0tZW5hYmxlLWZyYW1ld29yawpAQCAtMTQ2Myw2ICsxNDc2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZXIKICAgLS13aXRoLXN1ZmZpeD0uZXhlICAgICAgc2V0IGV4ZWN1dGFibGUgc3VmZml4CiAgIC0td2l0aC1weWRlYnVnICAgICAgICAgIGJ1aWxkIHdpdGggUHlfREVCVUcgZGVmaW5lZAorICAtLXdpdGgtaGFzaC1hbGdvcml0aG09W2ZudnxzaXBoYXNoMjRdCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCBoYXNoIGFsZ29yaXRobQogICAtLXdpdGgtbGlicz0nbGliMSAuLi4nICBsaW5rIGFnYWluc3QgYWRkaXRpb25hbCBsaWJzCiAgIC0td2l0aC1zeXN0ZW0tZXhwYXQgICAgIGJ1aWxkIHB5ZXhwYXQgbW9kdWxlIHVzaW5nIGFuIGluc3RhbGxlZCBleHBhdAogICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5CkBAIC0xNDkyLDYgKzE1MDcsOCBAQAogICAtLXdpdGgob3V0KS1jb21wdXRlZC1nb3RvcwogICAgICAgICAgICAgICAgICAgICAgICAgICBVc2UgY29tcHV0ZWQgZ290b3MgaW4gZXZhbHVhdGlvbiBsb29wIChlbmFibGVkIGJ5CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQgb24gc3VwcG9ydGVkIGNvbXBpbGVycykKKyAgLS13aXRoKG91dCktZW5zdXJlcGlwPVs9dXBncmFkZV0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcAogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKICAgTUFDSERFUCAgICAgbmFtZSBmb3IgbWFjaGluZS1kZXBlbmRlbnQgbGlicmFyeSBmaWxlcwpAQCAtMTUwMyw2ICsxNTIwLDExIEBACiAgIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKICAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CiAgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCisgIFBLR19DT05GSUcgIHBhdGggdG8gcGtnLWNvbmZpZyB1dGlsaXR5CisgIFBLR19DT05GSUdfUEFUSAorICAgICAgICAgICAgICBkaXJlY3RvcmllcyB0byBhZGQgdG8gcGtnLWNvbmZpZydzIHNlYXJjaCBwYXRoCisgIFBLR19DT05GSUdfTElCRElSCisgICAgICAgICAgICAgIHBhdGggb3ZlcnJpZGluZyBwa2ctY29uZmlnJ3MgYnVpbHQtaW4gc2VhcmNoIHBhdGgKIAogVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKIGl0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KQEAgLTE1NzAsNyArMTU5Miw3IEBACiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0ICRhY19zdGF0dXMKIGlmICRhY19pbml0X3ZlcnNpb247IHRoZW4KICAgY2F0IDw8XF9BQ0VPRgotcHl0aG9uIGNvbmZpZ3VyZSAzLjMKK3B5dGhvbiBjb25maWd1cmUgMy40CiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkKIAogQ29weXJpZ2h0IChDKSAyMDEyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgpAQCAtMjQwOSw3ICsyNDMxLDcgQEAKIFRoaXMgZmlsZSBjb250YWlucyBhbnkgbWVzc2FnZXMgcHJvZHVjZWQgYnkgY29tcGlsZXJzIHdoaWxlCiBydW5uaW5nIGNvbmZpZ3VyZSwgdG8gYWlkIGRlYnVnZ2luZyBpZiBjb25maWd1cmUgbWFrZXMgYSBtaXN0YWtlLgogCi1JdCB3YXMgY3JlYXRlZCBieSBweXRob24gJGFzX21lIDMuMywgd2hpY2ggd2FzCitJdCB3YXMgY3JlYXRlZCBieSBweXRob24gJGFzX21lIDMuNCwgd2hpY2ggd2FzCiBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNjkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKIAogICAkICQwICRACkBAIC0yOTM5LDYgKzI5NjEsOSBAQAogCiAKIAorIyBweWJ1aWxkZGlyLnR4dCB3aWxsIGJlIGNyZWF0ZWQgYnkgLS1nZW5lcmF0ZS1wb3NpeC12YXJzIGluIHRoZSBNYWtlZmlsZQorcm0gLWYgcHlidWlsZGRpci50eHQKKwogaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBweXRob24gaW50ZXJwcmV0ZXIgZm9yIGNyb3NzIGJ1aWxkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIGZvciBweXRob24gaW50ZXJwcmV0ZXIgZm9yIGNyb3NzIGJ1aWxkLi4uICIgPiY2OyB9CkBAIC0yOTc5LDcgKzMwMDQsNyBAQAogbXYgY29uZmRlZnMuaC5uZXcgY29uZmRlZnMuaAogCiAKLVZFUlNJT049My4zCitWRVJTSU9OPTMuNAogCiAjIFZlcnNpb24gbnVtYmVyIG9mIFB5dGhvbidzIG93biBzaGFyZWQgbGlicmFyeSBmaWxlLgogCkBAIC0zMDM1LDcgKzMwNjAsNyBAQAogCQkjIExvY2F0ZSB0aGUgYmVzdCB1c2FibGUgU0RLLCBzZWUgTWFjL1JFQURNRS50eHQgZm9yIG1vcmUKIAkJIyBpbmZvcm1hdGlvbgogCQllbmFibGV2YWw9ImAvdXNyL2Jpbi94Y29kZWJ1aWxkIC12ZXJzaW9uIC1zZGsgbWFjb3N4IFBhdGggMj4vZGV2L251bGxgIgotCQlpZiB0ZXN0IC16ICIke2VuYWJsZXZhbH0iCisJCWlmICEgKCBlY2hvICRlbmFibGV2YWwgfCBncmVwIC1FICdcLnNkaycgMT4vZGV2L251bGwgKQogCQl0aGVuCiAJCQllbmFibGV2YWw9L0RldmVsb3Blci9TREtzL01hY09TWDEwLjR1LnNkawogCQkJaWYgdGVzdCAhIC1kICIke2VuYWJsZXZhbH0iCkBAIC0zMDc4LDYgKzMxMDMsNyBAQAogCiAKIAorQVJDSF9SVU5fMzJCSVQ9IiIKIAogIyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSByZWFzb25zIHdlIHByZWZlciB0byBzZWxlY3QgJzMyLWJpdCcgaWYgYXZhaWxhYmxlLAogIyBvdGhlcndpc2UgdXNlICdpbnRlbCcKQEAgLTMwODYsNyArMzExMiw3IEBACiB0aGVuCiAJaWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgogCXRoZW4KLQkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCisJCWlmIHRlc3QgLXogImAvdXNyL2Jpbi9maWxlIC1MICIke1VOSVZFUlNBTFNES30vdXNyL2xpYi9saWJTeXN0ZW0uZHlsaWIiIHwgZ3JlcCBwcGNgIgogCQl0aGVuCiAJCQlVTklWRVJTQUxfQVJDSFM9ImludGVsIgogCQlmaQpAQCAtMzEwMCwxOSArMzEyNiwxOCBAQAogIyBDaGVjayB3aGV0aGVyIC0td2l0aC11bml2ZXJzYWwtYXJjaHMgd2FzIGdpdmVuLgogaWYgdGVzdCAiJHt3aXRoX3VuaXZlcnNhbF9hcmNocytzZXR9IiA9IHNldDsgdGhlbiA6CiAgIHdpdGh2YWw9JHdpdGhfdW5pdmVyc2FsX2FyY2hzOwotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkd2l0aHZhbCIgPiY1Ci0kYXNfZWNobyAiJHdpdGh2YWwiID4mNjsgfQogCVVOSVZFUlNBTF9BUkNIUz0iJHdpdGh2YWwiCiAKLWVsc2UKLQotIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHtVTklWRVJTQUxfQVJDSFN9IiA+JjUKLSRhc19lY2hvICIke1VOSVZFUlNBTF9BUkNIU30iID4mNjsgfQotCiBmaQogCi0KLQoraWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgordGhlbgorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAke1VOSVZFUlNBTF9BUkNIU30iID4mNQorJGFzX2VjaG8gIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPiY2OyB9CitlbHNlCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQogCiAKICMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZnJhbWV3b3JrLW5hbWUgd2FzIGdpdmVuLgpAQCAtMzE0Nyw2ICszMTcyLDcgQEAKIAkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9CiAJCUZSQU1FV09SS0FMVElOU1RBTExGSVJTVD0KIAkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJCUZSQU1FV09SS1BZVEhPTlc9CiAJCWlmIHRlc3QgIngke3ByZWZpeH0iID0gInhOT05FIjsgdGhlbgogCQkJRlJBTUVXT1JLVU5JWFRPT0xTUFJFRklYPSIke2FjX2RlZmF1bHRfcHJlZml4fSIKIAkJZWxzZQpAQCAtMzE2MSw2ICszMTg3LDcgQEAKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTEZJUlNUPSJmcmFtZXdvcmtpbnN0YWxsc3RydWN0dXJlICIKIAkJRlJBTUVXT1JLSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JraW5zdGFsbHVuaXh0b29scyIKIAkJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9ImZyYW1ld29ya2luc3RhbGxtYWNsaWIgZnJhbWV3b3JraW5zdGFsbGFwcHMgZnJhbWV3b3JrYWx0aW5zdGFsbHVuaXh0b29scyIKKwkJRlJBTUVXT1JLUFlUSE9OVz0iZnJhbWV3b3JrcHl0aG9udyIKIAkJRlJBTUVXT1JLSU5TVEFMTEFQUFNQUkVGSVg9Ii9BcHBsaWNhdGlvbnMiCiAKIAkJaWYgdGVzdCAieCR7cHJlZml4fSIgPSAieE5PTkUiIDsgdGhlbgpAQCAtMzIyOCw2ICszMjU1LDcgQEAKIAlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJRlJBTUVXT1JLUFlUSE9OVz0KIAlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJZWxzZQpAQCAtMzI1MCw2ICszMjc4LDcgQEAKIAogCiAKKwogIyNBQ19BUkdfV0lUSChkeWxkLAogIyMgICAgICAgICAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWR5bGRdLAogIyMgICAgICAgICAgICAgICAgICAgICAgICAgICBbVXNlIChPcGVuU3RlcHxSaGFwc29keSkgZHluYW1pYyBsaW5rZXJdKSkKQEAgLTM0MzEsNiArMzQ2MCwyMSBAQAogCiBmaQogCisjIE9uIEhQLVVYIG1ic3RhdGVfdCByZXF1aXJlcyBfSU5DTFVERV9fU1REQ19BMV9TT1VSQ0UKK2Nhc2UgJGFjX3N5c19zeXN0ZW0gaW4KKyAgaHAqfEhQKikKKyAgICBkZWZpbmVfc3RkY19hMT15ZXM7OworICAqKQorICAgIGRlZmluZV9zdGRjX2ExPW5vOzsKK2VzYWMKKworaWYgdGVzdCAkZGVmaW5lX3N0ZGNfYTEgPSB5ZXMKK3RoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgX0lOQ0xVREVfX1NURENfQTFfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCitmaQorCiAjCiAjIFNHSSBjb21waWxlcnMgYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGJvdGggdGhlIEFCSSBhbmQgdGhlCiAjIElTQSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlc2Ugc3dpdGNoZXMsCkBAIC0zNDUwLDYgKzM0OTQsOSBAQAogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUNIREVQIiA+JjUKICRhc19lY2hvICIkTUFDSERFUCIgPiY2OyB9CiAKKworUExBVERJUj1wbGF0LSRNQUNIREVQCisKICMgUmVjb3JkIHRoZSBjb25maWd1cmUtdGltZSB2YWx1ZSBvZiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQsCiAjIGl0IG1heSBpbmZsdWVuY2UgdGhlIHdheSB3ZSBjYW4gYnVpbGQgZXh0ZW5zaW9ucywgc28gZGlzdHV0aWxzCiAjIG5lZWRzIHRvIGNoZWNrIGl0CkBAIC00ODAxLDE2ICs0ODQ4LDE2IEBACiBmaQogaWYgdGVzdCAiJHByZXNldF9jeHgiICE9ICIkQ1hYIgogdGhlbgotICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfToKIAogICBCeSBkZWZhdWx0LCBkaXN0dXRpbHMgd2lsbCBidWlsZCBDKysgZXh0ZW5zaW9uIG1vZHVsZXMgd2l0aCBcIiRDWFhcIi4KICAgSWYgdGhpcyBpcyBub3QgaW50ZW5kZWQsIHRoZW4gc2V0IENYWCBvbiB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KICAgIiA+JjUKLSRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6CiskYXNfZWNobyAiJGFzX21lOgogCiAgIEJ5IGRlZmF1bHQsIGRpc3R1dGlscyB3aWxsIGJ1aWxkIEMrKyBleHRlbnNpb24gbW9kdWxlcyB3aXRoIFwiJENYWFwiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgotICAiID4mMjt9CisgICIgPiY2O30KIGZpCiAKIApAQCAtNTU4NCw2ICs1NjMxLDcgQEAKIAogIyBPdGhlciBwbGF0Zm9ybXMgZm9sbG93CiBpZiB0ZXN0ICRlbmFibGVfc2hhcmVkID0gInllcyI7IHRoZW4KKyAgUFlfRU5BQkxFX1NIQVJFRD0xCiAKICRhc19lY2hvICIjZGVmaW5lIFB5X0VOQUJMRV9TSEFSRUQgMSIgPj5jb25mZGVmcy5oCiAKQEAgLTU2MzIsNyArNTY4MCw3IEBACiAgICAgRGFyd2luKikKICAgICAJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuZHlsaWInCiAJQkxETElCUkFSWT0nLUwuIC1scHl0aG9uJChMRFZFUlNJT04pJwotCVJVTlNIQVJFRD0nRFlMRF9MSUJSQVJZX1BBVEg9YHB3ZGAke0RZTERfTElCUkFSWV9QQVRIOis6JHtEWUxEX0xJQlJBUllfUEFUSH19JworCVJVTlNIQVJFRD1EWUxEX0xJQlJBUllfUEFUSD1gcHdkYCR7RFlMRF9MSUJSQVJZX1BBVEg6Kzoke0RZTERfTElCUkFSWV9QQVRIfX0KIAk7OwogICAgIEFJWCopCiAJTERMSUJSQVJZPSdsaWJweXRob24kKExEVkVSU0lPTikuc28nCkBAIC01NjQxLDYgKzU2ODksNyBAQAogCiAgIGVzYWMKIGVsc2UgIyBzaGFyZWQgaXMgZGlzYWJsZWQKKyAgUFlfRU5BQkxFX1NIQVJFRD0wCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQogICAgICAgICAgIEJMRExJQlJBUlk9JyQoTElCUkFSWSknCkBAIC02MjM4LDcgKzYyODcsMTEgQEAKIAkgICAgaWYgdGVzdCAiJFB5X0RFQlVHIiA9ICd0cnVlJyA7IHRoZW4KIAkJIyBPcHRpbWl6YXRpb24gbWVzc2VzIHVwIGRlYnVnZ2Vycywgc28gdHVybiBpdCBvZmYgZm9yCiAJCSMgZGVidWcgYnVpbGRzLgotCQlPUFQ9Ii1nIC1PMCAtV2FsbCAkU1RSSUNUX1BST1RPIgorICAgICAgICAgICAgICAgIGlmICIkQ0MiIC12IC0taGVscCAyPi9kZXYvbnVsbCB8Z3JlcCAtLSAtT2cgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgT1BUPSItZyAtT2cgLVdhbGwgJFNUUklDVF9QUk9UTyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIE9QVD0iLWcgLU8wIC1XYWxsICRTVFJJQ1RfUFJPVE8iCisgICAgICAgICAgICAgICAgZmkKIAkgICAgZWxzZQogCQlPUFQ9Ii1nICRXUkFQIC1PMyAtV2FsbCAkU1RSSUNUX1BST1RPIgogCSAgICBmaQpAQCAtNjI2MSw2ICs2MzE0LDcgQEAKIAogCiAKKwogIyBUaGUgLWFyY2ggZmxhZ3MgZm9yIHVuaXZlcnNhbCBidWlsZHMgb24gT1NYCiBVTklWRVJTQUxfQVJDSF9GTEFHUz0KIApAQCAtNjM4MSw2ICs2NDM1LDQ5IEBACiAgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV25vLXVudXNlZC1yZXN1bHQiCiAgICAgZmkKIAorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudC4uLiAiID4mNjsgfQorICAgICBhY19zYXZlX2NjPSIkQ0MiCisgICAgIENDPSIkQ0MgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisgICAgIHNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorICAgICBpZiAke2FjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CisKK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPXllcworCitlbHNlCisKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9bm8KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKKworICAgICBDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKyAgICAgQ0M9IiRhY19zYXZlX2NjIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmciID4mNQorJGFzX2VjaG8gIiRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyIgPiY2OyB9CisKKyAgICBpZiB0ZXN0ICRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyA9IHllcworICAgIHRoZW4KKyAgICAgIENGTEFHU19OT0RJU1Q9IiRDRkxBR1NfTk9ESVNUIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgIGZpCisKICAgICAjIGlmIHVzaW5nIGdjYyBvbiBhbHBoYSwgdXNlIC1taWVlZSB0byBnZXQgKG5lYXIpIGZ1bGwgSUVFRSA3NTQKICAgICAjIHN1cHBvcnQuICBXaXRob3V0IHRoaXMsIHRyZWF0bWVudCBvZiBzdWJub3JtYWxzIGRvZXNuJ3QgZm9sbG93CiAgICAgIyB0aGUgc3RhbmRhcmQuCkBAIC02Mzk0LDExMyArNjQ5MSwxMzAgQEAKIAlTQ09fU1YqKQogCSAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtbTQ4NiAtRFNDTzUiCiAJICAgIDs7Ci0JIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPwotCURhcndpbiopCi0JICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCi0JICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgotICAgICAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCi0JICAgIHRoZW4KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCIgPiY1CisKKyAgICAjIGlzIHRoZXJlIGFueSBvdGhlciBjb21waWxlciBvbiBEYXJ3aW4gYmVzaWRlcyBnY2M/CisgICAgRGFyd2luKikKKyAgICAgICAgIyAtV25vLWxvbmctZG91YmxlLCAtbm8tY3BwLXByZWNvbXAsIGFuZCAtbW5vLWZ1c2VkLW1hZGQKKyAgICAgICAgIyB1c2VkIHRvIGJlIGhlcmUsIGJ1dCBub24tQXBwbGUgZ2NjIGRvZXNuJ3QgYWNjZXB0IHRoZW0uCisgICAgICAgIGlmIHRlc3QgIiR7Q0N9IiA9IGdjYworICAgICAgICB0aGVuCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkLi4uICIgPiY2OyB9Ci0JCWNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KLQkJKi9NYWNPU1gxMC40dS5zZGspCi0JCQkjIEJ1aWxkIHVzaW5nIDEwLjQgU0RLLCBmb3JjZSB1c2FnZSBvZiBnY2Mgd2hlbiB0aGUKLQkJCSMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQotCQkJIyBjb25mdXNpbmcgZXJyb3IgbWVzc2FnZXMgd2hlbiBidWlsZGluZyBvbiBPU1ggMTAuNgotCQkJQ0M9Z2NjLTQuMAotCQkJQ1BQPWNwcC00LjAKLQkJCTs7Ci0JCWVzYWMKLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRDQyIgPiY1CisgICAgICAgICAgICBjYXNlICIke1VOSVZFUlNBTFNES30iIGluCisgICAgICAgICAgICAqL01hY09TWDEwLjR1LnNkaykKKyAgICAgICAgICAgICAgICAjIEJ1aWxkIHVzaW5nIDEwLjQgU0RLLCBmb3JjZSB1c2FnZSBvZiBnY2Mgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAjIGNvbXBpbGVyIGlzIGdjYywgb3RoZXJ3aXNlIHRoZSB1c2VyIHdpbGwgZ2V0IHZlcnkKKyAgICAgICAgICAgICAgICAjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42CisgICAgICAgICAgICAgICAgQ0M9Z2NjLTQuMAorICAgICAgICAgICAgICAgIENQUD1jcHAtNC4wCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQogJGFzX2VjaG8gIiRDQyIgPiY2OyB9Ci0JICAgIGZpCisgICAgICAgIGZpCiAKKyAgICAgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSIKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgIDMyLWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgNjQtYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGFsbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsLTMyKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDMtd2F5KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJwcm9wZXIgdXNhZ2UgaXMgLS13aXRoLXVuaXZlcnNhbC1hcmNoPTMyLWJpdHw2NC1iaXR8YWxsfGludGVsfDMtd2F5IiAiJExJTkVOTyIgNQorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKIAotCSAgICBpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgotCQlVTklWRVJTQUxfQVJDSF9GTEFHUz0iIgotCSAgICAgICAgaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMzItYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYyAtYXJjaCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iIgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICI2NC1iaXQiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSIiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgorICAgICAgICAgICAgQ0ZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7Q0ZMQUdTfSIKKyAgICAgICAgICAgIExERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKKyAgICAgICAgICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCisgICAgICAgICAgICBmaQorICAgICAgICBmaQogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICMgQ2FsY3VsYXRlIGFuIGFwcHJvcHJpYXRlIGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkOgorICAgICAgICAjIFRoZSBkZXBsb3ltZW50IHRhcmdldCB2YWx1ZSBpcyB1c2VkIGV4cGxpY2l0bHkgdG8gZW5hYmxlIGNlcnRhaW4KKyAgICAgICAgIyBmZWF0dXJlcyBhcmUgZW5hYmxlZCAoc3VjaCBhcyBidWlsdGluIGxpYmVkaXQgc3VwcG9ydCBmb3IgcmVhZGxpbmUpCisgICAgICAgICMgdGhyb3VnaCB0aGUgdXNlIG9mIEFwcGxlJ3MgQXZhaWxhYmlsaXkgTWFjcm9zIGFuZCBpcyB1c2VkIGFzIGEKKyAgICAgICAgIyBjb21wb25lbnQgb2YgdGhlIHN0cmluZyByZXR1cm5lZCBieSBkaXN0dXRpbHMuZ2V0X3BsYXRmb3JtKCkuCisgICAgICAgICMKKyAgICAgICAgIyBVc2UgdGhlIHZhbHVlIGZyb206CisgICAgICAgICMgMS4gdGhlIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBzcGVjaWZpZWQKKyAgICAgICAgIyAyLiB0aGUgb3BlcmF0aW5nIHN5c3RlbSB2ZXJzaW9uIG9mIHRoZSBidWlsZCBtYWNoaW5lIGlmID49IDEwLjYKKyAgICAgICAgIyAzLiBJZiBydW5uaW5nIG9uIE9TIFggMTAuMyB0aHJvdWdoIDEwLjUsIHVzZSB0aGUgbGVnYWN5IHRlc3RzCisgICAgICAgICMgICAgICAgYmVsb3cgdG8gcGljayBlaXRoZXIgMTAuMywgMTAuNCwgb3IgMTAuNSBhcyB0aGUgdGFyZ2V0LgorICAgICAgICAjIDQuIElmIHdlIGFyZSBydW5uaW5nIG9uIE9TIFggMTAuMiBvciBlYXJsaWVyLCBnb29kIGx1Y2shCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImludGVsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGljaCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8gdXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoaWNoIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCB0byB1c2UuLi4gIiA+JjY7IH0KKyAgICAgICAgY3VyX3RhcmdldF9tYWpvcj1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBcCisgICAgICAgICAgICAgICAgc2VkICdzL1woWzAtOV0qXClcLlwoWzAtOV0qXCkuKi9cMS8nYAorICAgICAgICBjdXJfdGFyZ2V0X21pbm9yPWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKS4qL1wyLydgCisgICAgICAgIGN1cl90YXJnZXQ9IiR7Y3VyX3RhcmdldF9tYWpvcn0uJHtjdXJfdGFyZ2V0X21pbm9yfSIKKyAgICAgICAgaWYgdGVzdCAke2N1cl90YXJnZXRfbWFqb3J9IC1lcSAxMCAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0X21pbm9yfSAtZ2UgMyAmJiBcCisgICAgICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0X21pbm9yfSAtbGUgNQorICAgICAgICB0aGVuCisgICAgICAgICAgICAjIE9TIFggMTAuMyB0aHJvdWdoIDEwLjUKKyAgICAgICAgICAgIGN1cl90YXJnZXQ9MTAuMworICAgICAgICAgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9CisgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgICAgICBhbGx8My13YXl8aW50ZWx8NjQtYml0KQorICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIGNvbmZpZ3VyYXRpb25zIHdlcmUgZmlyc3Qgc3VwcG9ydGVkIGluIDEwLjUKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0nMTAuNScKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiIKKyAgICAgICAgICAgICAgICB0aGVuCisgICAgICAgICAgICAgICAgICAgICMgMTAuNCB3YXMgdGhlIGZpcnN0IHJlbGVhc2UgdG8gc3VwcG9ydCBJbnRlbCBhcmNocworICAgICAgICAgICAgICAgICAgICBjdXJfdGFyZ2V0PSIxMC40IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19CiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMtd2F5IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgcHBjNzQwMCAtZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCisgICAgICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKKyAgICAgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCisgICAgICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKKyAgICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIiA+JjUKKyRhc19lY2hvICIkTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIiA+JjY7IH0KIAotCQkgZWxzZQotCSAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gInByb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXkiICIkTElORU5PIiA1Ci0KLQkJIGZpCi0KLQotCQlDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQlpZiB0ZXN0ICIke1VOSVZFUlNBTFNES30iICE9ICIvIgotCQl0aGVuCi0JCQlDRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgotCQkJTERGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgotCQkJQ1BQRkxBR1M9Ii1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDUFBGTEFHU30iCi0JCWZpCi0JICAgIGZpCi0KLQkgICAgIyBDYWxjdWxhdGUgdGhlIHJpZ2h0IGRlcGxveW1lbnQgdGFyZ2V0IGZvciB0aGlzIGJ1aWxkLgotCSAgICAjCi0JICAgIGN1cl90YXJnZXQ9YHN3X3ZlcnMgLXByb2R1Y3RWZXJzaW9uIHwgc2VkICdzL1woMTBcLlswLTldKlwpLiovXDEvJ2AKLQkgICAgaWYgdGVzdCAke2N1cl90YXJnZXR9ICc+JyAxMC4yICYmIFwKLQkgICAgICAgdGVzdCAke2N1cl90YXJnZXR9ICc8JyAxMC42Ci0JICAgIHRoZW4KLQkJICAgIGN1cl90YXJnZXQ9MTAuMwotCQkgICAgaWYgdGVzdCAke2VuYWJsZV91bml2ZXJzYWxzZGt9OyB0aGVuCi0JCQkgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxfQVJDSFN9IiA9ICJhbGwiOyB0aGVuCi0JCQkJICAgICMgRW5zdXJlIHRoYXQgdGhlIGRlZmF1bHQgcGxhdGZvcm0gZm9yIGEKLQkJCQkgICAgIyA0LXdheSB1bml2ZXJzYWwgYnVpbGQgaXMgT1NYIDEwLjUsCi0JCQkJICAgICMgdGhhdCdzIHRoZSBmaXJzdCBPUyByZWxlYXNlIHdoZXJlCi0JCQkJICAgICMgNC13YXkgYnVpbGRzIG1ha2Ugc2Vuc2UuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiMy13YXkiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiaW50ZWwiOyB0aGVuCi0JCQkJICAgIGN1cl90YXJnZXQ9JzEwLjUnCi0KLQkJCSAgICBlbGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiNjQtYml0IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCQkJICAgIGZpCi0JCSAgICBlbHNlCi0JCQkgICAgaWYgdGVzdCBgL3Vzci9iaW4vYXJjaGAgPSAiaTM4NiI7IHRoZW4KLQkJCQkgICAgIyBPbiBJbnRlbCBtYWNzIGRlZmF1bHQgdG8gYSBkZXBsb3ltZW50Ci0JCQkJICAgICMgdGFyZ2V0IG9mIDEwLjQsIHRoYXQncyB0aGUgZmlyc3QgT1NYCi0JCQkJICAgICMgcmVsZWFzZSB3aXRoIEludGVsIHN1cHBvcnQuCi0JCQkJICAgIGN1cl90YXJnZXQ9IjEwLjQiCi0JCQkgICAgZmkKLQkJICAgIGZpCi0JICAgIGZpCi0JICAgIENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQ9JHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtJHtjdXJfdGFyZ2V0fX0KLQotCSAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCi0JICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKLQkgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCi0JICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KLQkgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKLQkgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAotCSAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCi0KLQkgICAgOzsKKyAgICAgICAgIyBlbmQgb2YgRGFyd2luKiB0ZXN0cworICAgICAgICA7OwogICAgIGVzYWMKICAgICA7OwogCkBAIC02NTI3LDQ0ICs2NjQxLDYgQEAKIAlCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAkYWNfYXJjaF9mbGFncyIKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciBHQ0Mgc3VwcG9ydHMgUHlBcmdfUGFyc2VUdXBsZSBmb3JtYXQKLWlmIHRlc3QgIiRHQ0MiID0gInllcyIKLXRoZW4KLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18iID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBnY2Mgc3VwcG9ydHMgUGFyc2VUdXBsZSBfX2Zvcm1hdF9fLi4uICIgPiY2OyB9Ci0gIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQiCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotICAgIHZvaWQgZihjaGFyKiwuLi4pX19hdHRyaWJ1dGUoKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAxLCAyKSkpOwotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUgMSIgPj5jb25mZGVmcy5oCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotCi1lbHNlCi0KLSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCi1maQotCiAjIE9uIHNvbWUgY29tcGlsZXJzLCBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgZnVydGhlciBvcHRpb25zCiAjIChlLmcuIE1hY09TIFgpLiBPbiBzb21lIG9mIHRoZXNlIHN5c3RlbXMsIHRoZSBjb21waWxlciB3aWxsIG5vdAogIyBjb21wbGFpbiBpZiB1bmFjY2VwdGVkIG9wdGlvbnMgYXJlIHBhc3NlZCAoZS5nLiBnY2Mgb24gTWFjIE9TIFgpLgpAQCAtNjkyMiwxMSArNjk5OCw5IEBACiAKIGZpCiAKLWFjX3NhdmVfY3BwZmxhZ3M9IiRDUFBGTEFHUyIKLUNQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyL2luY2x1ZGUvbmN1cnNlc3ciCi1mb3IgYWNfaGVhZGVyIGluIGFzbS90eXBlcy5oIGNvbmlvLmggY3Vyc2VzLmggZGlyZWN0LmggZGxmY24uaCBlcnJuby5oIFwKK2ZvciBhY19oZWFkZXIgaW4gYXNtL3R5cGVzLmggY29uaW8uaCBkaXJlY3QuaCBkbGZjbi5oIGVycm5vLmggXAogZmNudGwuaCBncnAuaCBcCi1pZWVlZnAuaCBpby5oIGxhbmdpbmZvLmggbGliaW50bC5oIG5jdXJzZXMuaCBwcm9jZXNzLmggcHRocmVhZC5oIFwKK2llZWVmcC5oIGlvLmggbGFuZ2luZm8uaCBsaWJpbnRsLmggcHJvY2Vzcy5oIHB0aHJlYWQuaCBcCiBzY2hlZC5oIHNoYWRvdy5oIHNpZ25hbC5oIHN0ZGludC5oIHN0cm9wdHMuaCB0ZXJtaW9zLmggXAogdW5pc3RkLmggdXRpbWUuaCBcCiBwb2xsLmggc3lzL2RldnBvbGwuaCBzeXMvZXBvbGwuaCBzeXMvcG9sbC5oIFwKQEAgLTY5MzYsNyArNzAxMCw4IEBACiBzeXMvc3RhdC5oIHN5cy9zeXNjYWxsLmggc3lzL3N5c19kb21haW4uaCBzeXMvdGVybWlvLmggc3lzL3RpbWUuaCBcCiBzeXMvdGltZXMuaCBzeXMvdHlwZXMuaCBzeXMvdWlvLmggc3lzL3VuLmggc3lzL3V0c25hbWUuaCBzeXMvd2FpdC5oIHB0eS5oIFwKIGxpYnV0aWwuaCBzeXMvcmVzb3VyY2UuaCBuZXRwYWNrZXQvcGFja2V0Lmggc3lzZXhpdHMuaCBibHVldG9vdGguaCBcCi1ibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKK3N5cy9lbmRpYW4uaAogZG8gOgogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCiBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKQEAgLTY5NDksNyArNzAyNCw2IEBACiAKIGRvbmUKIAotQ1BQRkxBR1M9JGFjX3NhdmVfY3BwZmxhZ3MKIGFjX2hlYWRlcl9kaXJlbnQ9bm8KIGZvciBhY19oZHIgaW4gZGlyZW50Lmggc3lzL25kaXIuaCBzeXMvZGlyLmggbmRpci5oOyBkbwogICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfZGlyZW50XyRhY19oZHIiIHwgJGFzX3RyX3NoYApAQCAtNzE4NiwyNiArNzI2MCw2IEBACiBkb25lCiAKIAotCi0jIE9uIFNvbGFyaXMsIHRlcm0uaCByZXF1aXJlcyBjdXJzZXMuaAotZm9yIGFjX2hlYWRlciBpbiB0ZXJtLmgKLWRvIDoKLSAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInRlcm0uaCIgImFjX2N2X2hlYWRlcl90ZXJtX2giICIKLSNpZmRlZiBIQVZFX0NVUlNFU19ICi0jaW5jbHVkZSA8Y3Vyc2VzLmg+Ci0jZW5kaWYKLQotIgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGVybV9oIiA9IHh5ZXM7IHRoZW4gOgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfVEVSTV9IIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQogIyBPbiBMaW51eCwgbmV0bGluay5oIHJlcXVpcmVzIGFzbS90eXBlcy5oCiBmb3IgYWNfaGVhZGVyIGluIGxpbnV4L25ldGxpbmsuaAogZG8gOgpAQCAtNzIyOSw3ICs3MjgzLDcgQEAKIAogCiAjIE9uIExpbnV4LCBjYW4uaCBhbmQgY2FuL3Jhdy5oIHJlcXVpcmUgc3lzL3NvY2tldC5oCi1mb3IgYWNfaGVhZGVyIGluIGxpbnV4L2Nhbi5oIGxpbnV4L2Nhbi9yYXcuaAorZm9yIGFjX2hlYWRlciBpbiBsaW51eC9jYW4uaCBsaW51eC9jYW4vcmF3LmggbGludXgvY2FuL2JjbS5oCiBkbyA6CiAgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgpAQCAtNzMxMCw2ICs3MzY0LDQzIEBACiAKIGZpCiAKKyMgYnl0ZSBzd2FwcGluZworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGU2NHRvaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGU2NHRvaC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWZkZWYgSEFWRV9FTkRJQU5fSAorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1NZU19FTkRJQU5fSCkKKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgIGxlNjR0b2goMSkKKyAgOworICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hhc19sZTY0dG9oPXllcworZWxzZQorICBhY19jdl9oYXNfbGU2NHRvaD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hhc19sZTY0dG9oIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGFzX2xlNjR0b2giID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X2hhc19sZTY0dG9oIiA9ICJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSFRPTEU2NCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKwogIyBFbmFibGluZyBMRlMgb24gU29sYXJpcyAoMi42IHRvIDkpIHdpdGggZ2NjIDIuOTUgdHJpZ2dlcnMgYSBidWcgaW4KICMgdGhlIHN5c3RlbSBoZWFkZXJzOiBJZiBfWE9QRU5fU09VUkNFIGFuZCBfTEFSR0VGSUxFX1NPVVJDRSBhcmUKICMgZGVmaW5lZCwgYnV0IHRoZSBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IHByYWdtYSByZWRlZmluZV9leHRuYW1lLApAQCAtODI3Niw3ICs4MzY3LDYgQEAKIGVzYWMKIAogCi1BUkNIX1JVTl8zMkJJVD0iIgogCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vWzAxNTY3XVwuLiopCkBAIC04MzQ4LDE0ICs4NDM4LDEyIEBACiAgICAgCQk7OwogICAgIAllc2FjCiAKLQkjQVJDSF9SVU5fMzJCSVQ9InRydWUiCiAgICAgZmkKIAogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQiIC1sU3lzdGVtIC1sU3lzdGVtU3R1YnMgLWFyY2hfb25seSAke01BQ09TWF9ERUZBVUxUX0FSQ0h9IgogICAgIExJQlRPT0xfQ1JVRlQ9JExJQlRPT0xfQ1JVRlQnIC1pbnN0YWxsX25hbWUgJChQWVRIT05GUkFNRVdPUktJTlNUQUxMRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtY29tcGF0aWJpbGl0eV92ZXJzaW9uICQoVkVSU0lPTikgLWN1cnJlbnRfdmVyc2lvbiAkKFZFUlNJT04pJzs7CiBlc2FjCi0KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC0tZW5hYmxlLWZyYW1ld29yayIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgLS1lbmFibGUtZnJhbWV3b3JrLi4uICIgPiY2OyB9CiBpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIKQEAgLTg0ODEsMTUgKzg1NjksMTQgQEAKIAkJIyBVc2UgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCB3aGVuZXZlciBwb3NzaWJsZSAoMTAuMyBhbmQgbGF0ZXIpLgogCQkjIFRoaXMgYWxsb3dzIGFuIGV4dGVuc2lvbiB0byBiZSB1c2VkIGluIGFueSBQeXRob24KIAotCQlpZiB0ZXN0ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSAnPicgMTAuMgorCQlkZXBfdGFyZ2V0X21ham9yPWBlY2hvICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSB8IFwKKwkJCQlzZWQgJ3MvXChbMC05XSpcKVwuXChbMC05XSpcKS4qL1wxLydgCisJCWRlcF90YXJnZXRfbWlub3I9YGVjaG8gJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IHwgXAorCQkJCXNlZCAncy9cKFswLTldKlwpXC5cKFswLTldKlwpLiovXDIvJ2AKKwkJaWYgdGVzdCAke2RlcF90YXJnZXRfbWFqb3J9IC1lcSAxMCAmJiBcCisJCSAgIHRlc3QgJHtkZXBfdGFyZ2V0X21pbm9yfSAtbGUgMgogCQl0aGVuCi0JCQlpZiB0ZXN0ICIke2VuYWJsZV91bml2ZXJzYWxzZGt9IjsgdGhlbgotCQkJCUxERkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtMREZMQUdTfSIKLQkJCWZpCi0JCQlMRFNIQVJFRD0nJChDQykgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwotCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCi0JCQlCTERTSEFSRUQ9IiRMRFNIQVJFRCIKLQkJZWxzZQorCQkJIyBidWlsZGluZyBmb3IgT1MgWCAxMC4wIHRocm91Z2ggMTAuMgogCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUnCiAJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUnCiAJCQlpZiB0ZXN0ICIkZW5hYmxlX2ZyYW1ld29yayIgOyB0aGVuCkBAIC04NTAzLDYgKzg1OTAsMTEgQEAKIAkJCQlMRFNIQVJFRD0iJExEU0hBUkVEICInLWJ1bmRsZV9sb2FkZXIgJChCSU5ESVIpL3B5dGhvbiQoVkVSU0lPTikkKEVYRSknCiAJCQkJTERDWFhTSEFSRUQ9IiRMRENYWFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQkJZmkKKwkJZWxzZQorCQkJIyBidWlsZGluZyBmb3IgT1MgWCAxMC4zIGFuZCBsYXRlcgorCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJworCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCiAJCWZpCiAJCTs7CiAJTGludXgqfEdOVSp8UU5YKikKQEAgLTg2MTMsNiArODcwNSwxMiBAQAogCSMgLXUgbGlic3lzX3MgcHVsbHMgaW4gYWxsIHN5bWJvbHMgaW4gbGlic3lzCiAJRGFyd2luLyopCiAJCUxJTktGT1JTSEFSRUQ9IiRleHRyYV91bmRlZnMgLWZyYW1ld29yayBDb3JlRm91bmRhdGlvbiIKKworCQkjIElzc3VlICMxODA3NTogdGhlIGRlZmF1bHQgbWF4aW11bSBzdGFjayBzaXplICg4TUJ5dGVzKSBpcyB0b28KKwkJIyBzbWFsbCBmb3IgdGhlIGRlZmF1bHQgcmVjdXJzaW9uIGxpbWl0LiBJbmNyZWFzZSB0aGUgc3RhY2sgc2l6ZQorCQkjIHRvIGVuc3VyZSB0aGF0IHRlc3RzIGRvbid0IGNyYXNoCisJCUxJTktGT1JTSEFSRUQ9Ii1XbCwtc3RhY2tfc2l6ZSwxMDAwMDAwICRMSU5LRk9SU0hBUkVEIgorCiAJCWlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIgogCQl0aGVuCiAJCQlMSU5LRk9SU0hBUkVEPSIkTElOS0ZPUlNIQVJFRCAiJyQoUFlUSE9ORlJBTUVXT1JLRElSKS9WZXJzaW9ucy8kKFZFUlNJT04pLyQoUFlUSE9ORlJBTUVXT1JLKScKQEAgLTg4MjMsNiArODkyMSw0OCBAQAogCiBmaQogCSMgRHluYW1pYyBsaW5raW5nIGZvciBIUC1VWAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgUkFORF9lZ2QgaW4gLWxjcnlwdG8iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFJBTkRfZWdkIGluIC1sY3J5cHRvLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9jcnlwdG9fUkFORF9lZ2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGNyeXB0byAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgUkFORF9lZ2QgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBSQU5EX2VnZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfY3J5cHRvX1JBTkRfZWdkPXllcworZWxzZQorICBhY19jdl9saWJfY3J5cHRvX1JBTkRfZWdkPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlwdG9fUkFORF9lZ2QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfY3J5cHRvX1JBTkRfZWdkIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19SQU5EX2VnZCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9SQU5EX0VHRCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKwogCiAjIG9ubHkgY2hlY2sgZm9yIHNlbV9pbml0IGlmIHRocmVhZCBzdXBwb3J0IGlzIHJlcXVlc3RlZAogaWYgdGVzdCAiJHdpdGhfdGhyZWFkcyIgPSAieWVzIiAtbyAteiAiJHdpdGhfdGhyZWFkcyI7IHRoZW4KQEAgLTg5NjcsNiArOTEwNyw3OSBAQAogCSopIDs7CiBlc2FjCiAKKyMgY2hlY2sgZm9yIHN5c3RlbXMgdGhhdCByZXF1aXJlIGFsaWduZWQgbWVtb3J5IGFjY2VzcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkLi4uICIgPiY2OyB9CitpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGFsaWduZWRfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50IG1haW4oKQoreworICAgIGNoYXIgc1sxNl07CisgICAgaW50IGksICpwMSwgKnAyOworICAgIGZvciAoaT0wOyBpIDwgMTY7IGkrKykKKyAgICAgICAgc1tpXSA9IGk7CisgICAgcDEgPSAoaW50KikocysxKTsKKyAgICBwMiA9IChpbnQqKShzKzIpOworICAgIGlmICgqcDEgPT0gKnAyKQorICAgICAgICByZXR1cm4gMTsKKyAgICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWxpZ25lZF9yZXF1aXJlZD1ubworZWxzZQorICBhbGlnbmVkX3JlcXVpcmVkPXllcworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCisKKworaWYgdGVzdCAiJGFsaWduZWRfcmVxdWlyZWQiID0geWVzIDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMSUdORURfUkVRVUlSRUQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFsaWduZWRfcmVxdWlyZWQiID4mNQorJGFzX2VjaG8gIiRhbGlnbmVkX3JlcXVpcmVkIiA+JjY7IH0KKworCisjIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcgaGFzaCBhbGdvcml0aG0KKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtaGFzaC1hbGdvcml0aG0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC0td2l0aC1oYXNoLWFsZ29yaXRobS4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWhhc2hfYWxnb3JpdGhtIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9oYXNoX2FsZ29yaXRobStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfaGFzaF9hbGdvcml0aG07Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gIiR3aXRodmFsIiA+JjY7IH0KK2Nhc2UgIiR3aXRodmFsIiBpbgorICAgIHNpcGhhc2gyNCkKKyAgICAgICAgJGFzX2VjaG8gIiNkZWZpbmUgUHlfSEFTSF9BTEdPUklUSE0gMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgOzsKKyAgICBmbnYpCisgICAgICAgICRhc19lY2hvICIjZGVmaW5lIFB5X0hBU0hfQUxHT1JJVEhNIDIiID4+Y29uZmRlZnMuaAorCisgICAgICAgIDs7CisgICAgKikKKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gInVua25vd24gaGFzaCBhbGdvcml0aG0gJyR3aXRodmFsJyIgIiRMSU5FTk8iIDUKKyAgICAgICAgOzsKK2VzYWMKKworZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogZGVmYXVsdCIgPiY1CiskYXNfZWNobyAiZGVmYXVsdCIgPiY2OyB9CitmaQorCisKICMgTW9zdCBTVlI0IHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBuZWVkIC1sc29ja2V0IGFuZCAtbG5zbC4KIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHRfb3BlbiBpbiAtbG5zbCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgdF9vcGVuIGluIC1sbnNsLi4uICIgPiY2OyB9CkBAIC05MDY1LDcgKzkyNzgsMTUgQEAKIGZpCiAKIAotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorCisKKworCisKKworCitpZiB0ZXN0ICJ4JGFjX2N2X2Vudl9QS0dfQ09ORklHX3NldCIgIT0gInhzZXQiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cGtnLWNvbmZpZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1wa2ctY29uZmlnOyBhY193b3JkPSQyCiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CkBAIC05MTYzLDYgKzkzODQsMjAgQEAKICAgUEtHX0NPTkZJRz0iJGFjX2N2X3BhdGhfUEtHX0NPTkZJRyIKIGZpCiAKK2ZpCitpZiB0ZXN0IC1uICIkUEtHX0NPTkZJRyI7IHRoZW4KKwlfcGtnX21pbl92ZXJzaW9uPTAuOS4wCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBwa2ctY29uZmlnIGlzIGF0IGxlYXN0IHZlcnNpb24gJF9wa2dfbWluX3ZlcnNpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgcGtnLWNvbmZpZyBpcyBhdCBsZWFzdCB2ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uLi4uICIgPiY2OyB9CisJaWYgJFBLR19DT05GSUcgLS1hdGxlYXN0LXBrZ2NvbmZpZy12ZXJzaW9uICRfcGtnX21pbl92ZXJzaW9uOyB0aGVuCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJZWxzZQorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJUEtHX0NPTkZJRz0iIgorCWZpCitmaQogCiAjIENoZWNrIGZvciB1c2Ugb2YgdGhlIHN5c3RlbSBleHBhdCBsaWJyYXJ5CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtLXdpdGgtc3lzdGVtLWV4cGF0IiA+JjUKQEAgLTEwMzA4LDkgKzEwNTQzLDkgQEAKIAogIyBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCiBmb3IgYWNfZnVuYyBpbiBhbGFybSBhY2NlcHQ0IHNldGl0aW1lciBnZXRpdGltZXIgYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgY2hvd24gXAotIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBleGVjdiBmYWNjZXNzYXQgZmNobW9kIGZjaG1vZGF0IGZjaG93biBmY2hvd25hdCBcCisgY2xvY2sgY29uZnN0ciBjdGVybWlkIGR1cDMgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAogIGZleGVjdmUgZmRvcGVuZGlyIGZvcmsgZnBhdGhjb25mIGZzdGF0YXQgZnRpbWUgZnRydW5jYXRlIGZ1dGltZXNhdCBcCi0gZnV0aW1lbnMgZnV0aW1lcyBnYWlfc3RyZXJyb3IgXAorIGZ1dGltZW5zIGZ1dGltZXMgZ2FpX3N0cmVycm9yIGdldGVudHJvcHkgXAogIGdldGdyb3VwbGlzdCBnZXRncm91cHMgZ2V0bG9naW4gZ2V0bG9hZGF2ZyBnZXRwZWVybmFtZSBnZXRwZ2lkIGdldHBpZCBcCiAgZ2V0cHJpb3JpdHkgZ2V0cmVzdWlkIGdldHJlc2dpZCBnZXRwd2VudCBnZXRzcG5hbSBnZXRzcGVudCBnZXRzaWQgZ2V0d2QgXAogIGlmX25hbWVpbmRleCBcCkBAIC0xMDMyOCw3ICsxMDU2Myw3IEBACiAgc2lndGltZWR3YWl0IHNpZ3dhaXQgc2lnd2FpdGluZm8gc25wcmludGYgc3RyZnRpbWUgc3RybGNweSBzeW1saW5rYXQgc3luYyBcCiAgc3lzY29uZiB0Y2dldHBncnAgdGNzZXRwZ3JwIHRlbXBuYW0gdGltZWdtIHRpbWVzIHRtcGZpbGUgdG1wbmFtIHRtcG5hbV9yIFwKICB0cnVuY2F0ZSB1bmFtZSB1bmxpbmthdCB1bnNldGVudiB1dGltZW5zYXQgdXRpbWVzIHdhaXRpZCB3YWl0cGlkIHdhaXQzIHdhaXQ0IFwKLSB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd3JpdGV2IF9nZXRwdHkKKyB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd21lbWNtcCB3cml0ZXYgX2dldHB0eQogZG8gOgogICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKQEAgLTEwNTgxLDYgKzEwODE2LDM1IEBACiAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBybGltaXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBybGltaXQuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKK2ludAorbWFpbiAoKQorewordm9pZCAqeD1wcmxpbWl0CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QUkxJTUlUIDEiID4+Y29uZmRlZnMuaAorCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCiAjIE9uIHNvbWUgc3lzdGVtcyAoZWcuIEZyZWVCU0QgNSksIHdlIHdvdWxkIGZpbmQgYSBkZWZpbml0aW9uIG9mIHRoZQogIyBmdW5jdGlvbnMgY3Rlcm1pZF9yLCBzZXRncm91cHMgaW4gdGhlIGxpYnJhcnksIGJ1dCBubyBwcm90b3R5cGUKICMgKGUuZy4gYmVjYXVzZSB3ZSB1c2UgX1hPUEVOX1NPVVJDRSkuIFNlZSB3aGV0aGVyIHdlIGNhbiB0YWtlIHRoZWlyCkBAIC0xMTQxMiwxOSArMTE2NzYsNiBAQAogCiBmaQogCi1hY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRjd2QiICJhY19jdl9mdW5jX2dldGN3ZCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19nZXRjd2QiID0geHllczsgdGhlbiA6Ci0gICRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUQ1dEIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiIGdldGN3ZC4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgZ2V0Y3dkLiRhY19vYmpleHQiCi0gOzsKLWVzYWMKLQotZmkKLQogYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RyZHVwIiAiYWNfY3ZfZnVuY19zdHJkdXAiCiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RyZHVwIiA9IHh5ZXM7IHRoZW4gOgogICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUkRVUCAxIiA+PmNvbmZkZWZzLmgKQEAgLTEzNzc4LDYgKzE0MDI5LDEwIEBACiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExEVkVSU0lPTiIgPiY1CiAkYXNfZWNobyAiJExEVkVSU0lPTiIgPiY2OyB9CiAKKworTElCUEw9JyQocHJlZml4KSciL2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCisKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHJpZ2h0IHNoaWZ0IGV4dGVuZHMgdGhlIHNpZ24gYml0IiA+JjUKQEAgLTE0NDk5LDggKzE0NzU0LDQzIEBACiAKIGZpCiAKKyMgZmlyc3QgY3Vyc2VzIGhlYWRlciBjaGVjawogYWNfc2F2ZV9jcHBmbGFncz0iJENQUEZMQUdTIgogQ1BQRkxBR1M9IiRDUFBGTEFHUyAtSS91c3IvaW5jbHVkZS9uY3Vyc2VzdyIKKworZm9yIGFjX2hlYWRlciBpbiBjdXJzZXMuaCBuY3Vyc2VzLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjIE9uIFNvbGFyaXMsIHRlcm0uaCByZXF1aXJlcyBjdXJzZXMuaAorZm9yIGFjX2hlYWRlciBpbiB0ZXJtLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInRlcm0uaCIgImFjX2N2X2hlYWRlcl90ZXJtX2giICIKKyNpZmRlZiBIQVZFX0NVUlNFU19ICisjaW5jbHVkZSA8Y3Vyc2VzLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGVybV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVEVSTV9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKwogIyBPbiBIUC9VWCAxMS4wLCBtdndkZWxjaCBpcyBhIGJsb2NrIHdpdGggYSByZXR1cm4gc3RhdGVtZW50CiB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbXZ3ZGVsY2ggaXMgYW4gZXhwcmVzc2lvbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIG12d2RlbGNoIGlzIGFuIGV4cHJlc3Npb24uLi4gIiA+JjY7IH0KQEAgLTE1MTg1LDggKzE1NDc1LDMzIEBACiAgICAgZXNhYwogZmkKIAorIyBlbnN1cmVwaXAgb3B0aW9uCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlbnN1cmVwaXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGVuc3VyZXBpcC4uLiAiID4mNjsgfQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVuc3VyZXBpcCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW5zdXJlcGlwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbnN1cmVwaXA7CitlbHNlCisgIHdpdGhfZW5zdXJlcGlwPXVwZ3JhZGUKK2ZpCisKK2Nhc2UgJHdpdGhfZW5zdXJlcGlwIGluICMoCisgIHllc3x1cGdyYWRlKSA6CisgICAgRU5TVVJFUElQPXVwZ3JhZGUgOzsgIygKKyAgaW5zdGFsbCkgOgorICAgIEVOU1VSRVBJUD1pbnN0YWxsIDs7ICMoCisgIG5vKSA6CisgICAgRU5TVVJFUElQPW5vIDs7ICMoCisgICopIDoKKyAgICBhc19mbl9lcnJvciAkPyAiLS13aXRoLWVuc3VyZXBpcD11cGdyYWRlfGluc3RhbGx8bm8iICIkTElORU5PIiA1IDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEVOU1VSRVBJUCIgPiY1CiskYXNfZWNobyAiJEVOU1VSRVBJUCIgPiY2OyB9CisKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLWFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMiCithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCIKIAogYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1vZHVsZXMvbGRfc29fYWl4IgogCkBAIC0xNTY5Nyw3ICsxNjAxMiw3IEBACiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKICMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCiBhY19sb2c9IgotVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBweXRob24gJGFzX21lIDMuMywgd2hpY2ggd2FzCitUaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IHB5dGhvbiAkYXNfbWUgMy40LCB3aGljaCB3YXMKIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKQEAgLTE1NzU5LDcgKzE2MDc0LDcgQEAKIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1weXRob24gY29uZmlnLnN0YXR1cyAzLjMKK3B5dGhvbiBjb25maWcuc3RhdHVzIDMuNAogY29uZmlndXJlZCBieSAkMCwgZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY5LAogICB3aXRoIG9wdGlvbnMgXFwiXCRhY19jc19jb25maWdcXCIKIApAQCAtMTU4OTAsNiArMTYyMDUsNyBAQAogICAgICJNYWtlZmlsZS5wcmUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUucHJlIiA7OwogICAgICJNb2R1bGVzL1NldHVwLmNvbmZpZyIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNb2R1bGVzL1NldHVwLmNvbmZpZyIgOzsKICAgICAiTWlzYy9weXRob24ucGMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWlzYy9weXRob24ucGMiIDs7CisgICAgIk1pc2MvcHl0aG9uLWNvbmZpZy5zaCIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNaXNjL3B5dGhvbi1jb25maWcuc2giIDs7CiAgICAgIk1vZHVsZXMvbGRfc29fYWl4IikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIE1vZHVsZXMvbGRfc29fYWl4IiA7OwogCiAgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDBlNjdmMDMuLjMzOTRkODQgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTMsNyArMyw3IEBACiBkbmwgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogIyBTZXQgVkVSU0lPTiBzbyB3ZSBvbmx5IG5lZWQgdG8gZWRpdCBpbiBvbmUgcGxhY2UgKGkuZS4sIGhlcmUpCi1tNF9kZWZpbmUoUFlUSE9OX1ZFUlNJT04sIDMuMykKK200X2RlZmluZShQWVRIT05fVkVSU0lPTiwgMy40KQogCiBBQ19QUkVSRVEoMi42NSkKIApAQCAtNTMsNiArNTMsOSBAQAogQUNfU1VCU1QoYnVpbGQpCiBBQ19TVUJTVChob3N0KQogCisjIHB5YnVpbGRkaXIudHh0IHdpbGwgYmUgY3JlYXRlZCBieSAtLWdlbmVyYXRlLXBvc2l4LXZhcnMgaW4gdGhlIE1ha2VmaWxlCitybSAtZiBweWJ1aWxkZGlyLnR4dAorCiBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgogICAgIEFDX01TR19DSEVDS0lORyhbZm9yIHB5dGhvbiBpbnRlcnByZXRlciBmb3IgY3Jvc3MgYnVpbGRdKQogICAgIGlmIHRlc3QgLXogIiRQWVRIT05fRk9SX0JVSUxEIjsgdGhlbgpAQCAtMTUyLDcgKzE1NSw3IEBACiAJCSMgTG9jYXRlIHRoZSBiZXN0IHVzYWJsZSBTREssIHNlZSBNYWMvUkVBRE1FLnR4dCBmb3IgbW9yZQogCQkjIGluZm9ybWF0aW9uCiAJCWVuYWJsZXZhbD0iYC91c3IvYmluL3hjb2RlYnVpbGQgLXZlcnNpb24gLXNkayBtYWNvc3ggUGF0aCAyPi9kZXYvbnVsbGAiCi0JCWlmIHRlc3QgLXogIiR7ZW5hYmxldmFsfSIKKwkJaWYgISAoIGVjaG8gJGVuYWJsZXZhbCB8IGdyZXAgLUUgJ1wuc2RrJyAxPi9kZXYvbnVsbCApCiAJCXRoZW4KIAkJCWVuYWJsZXZhbD0vRGV2ZWxvcGVyL1NES3MvTWFjT1NYMTAuNHUuc2RrCiAJCQlpZiB0ZXN0ICEgLWQgIiR7ZW5hYmxldmFsfSIKQEAgLTE4OSw2ICsxOTIsNyBAQAogQUNfU1VCU1QoVU5JVkVSU0FMU0RLKQogCiBBQ19TVUJTVChBUkNIX1JVTl8zMkJJVCkKK0FSQ0hfUlVOXzMyQklUPSIiCiAKICMgRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgcmVhc29ucyB3ZSBwcmVmZXIgdG8gc2VsZWN0ICczMi1iaXQnIGlmIGF2YWlsYWJsZSwKICMgb3RoZXJ3aXNlIHVzZSAnaW50ZWwnCkBAIC0xOTcsNyArMjAxLDcgQEAKIHRoZW4KIAlpZiB0ZXN0IC1uICIke1VOSVZFUlNBTFNES30iCiAJdGhlbgotCQlpZiB0ZXN0IC16ICJgL3Vzci9iaW4vZmlsZSAiJHtVTklWRVJTQUxTREt9L3Vzci9saWIvbGliU3lzdGVtLmR5bGliIiB8IGdyZXAgcHBjYCIKKwkJaWYgdGVzdCAteiAiYC91c3IvYmluL2ZpbGUgLUwgIiR7VU5JVkVSU0FMU0RLfS91c3IvbGliL2xpYlN5c3RlbS5keWxpYiIgfCBncmVwIHBwY2AiCiAJCXRoZW4KIAkJCVVOSVZFUlNBTF9BUkNIUz0iaW50ZWwiCiAJCWZpCkBAIC0yMDcsMTYgKzIxMSwxNyBAQAogQUNfU1VCU1QoTElQT18zMkJJVF9GTEFHUykKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXVuaXZlcnNhbC1hcmNocykKIEFDX0FSR19XSVRIKHVuaXZlcnNhbC1hcmNocywKLSAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiBvciAiYWxsIildKSwKKyAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLXVuaXZlcnNhbC1hcmNocz1BUkNIXSwgW3NlbGVjdCBhcmNoaXRlY3R1cmVzIGZvciB1bml2ZXJzYWwgYnVpbGQgKCIzMi1iaXQiLCAiNjQtYml0IiwgIjMtd2F5IiwgImludGVsIiwgImludGVsLTMyIiwgb3IgImFsbCIpXSksCiBbCi0JQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKIAlVTklWRVJTQUxfQVJDSFM9IiR3aXRodmFsIgogXSwKLVsKLSAJQUNfTVNHX1JFU1VMVCgke1VOSVZFUlNBTF9BUkNIU30pCi1dKQotCi0KK1tdKQoraWYgdGVzdCAtbiAiJHtVTklWRVJTQUxTREt9IgordGhlbgorCUFDX01TR19SRVNVTFQoJHtVTklWRVJTQUxfQVJDSFN9KQorZWxzZQorCUFDX01TR19SRVNVTFQobm8pCitmaQogCiBBQ19BUkdfV0lUSChmcmFtZXdvcmstbmFtZSwKICAgICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1mcmFtZXdvcmstbmFtZT1GUkFNRVdPUktdLApAQCAtMjQ4LDYgKzI1Myw3IEBACiAJCUZSQU1FV09SS0lOU1RBTExMQVNUPQogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJCUZSQU1FV09SS0FMVElOU1RBTExMQVNUPQorCQlGUkFNRVdPUktQWVRIT05XPQogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSI7IHRoZW4KIAkJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJCWVsc2UKQEAgLTI2Miw2ICsyNjgsNyBAQAogCQlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9ImZyYW1ld29ya2luc3RhbGxzdHJ1Y3R1cmUgIgogCQlGUkFNRVdPUktJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmtpbnN0YWxsdW5peHRvb2xzIgogCQlGUkFNRVdPUktBTFRJTlNUQUxMTEFTVD0iZnJhbWV3b3JraW5zdGFsbG1hY2xpYiBmcmFtZXdvcmtpbnN0YWxsYXBwcyBmcmFtZXdvcmthbHRpbnN0YWxsdW5peHRvb2xzIgorCQlGUkFNRVdPUktQWVRIT05XPSJmcmFtZXdvcmtweXRob253IgogCQlGUkFNRVdPUktJTlNUQUxMQVBQU1BSRUZJWD0iL0FwcGxpY2F0aW9ucyIKIAogCQlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCkBAIC0zMjMsNiArMzMwLDcgQEAKIAlGUkFNRVdPUktJTlNUQUxMTEFTVD0KIAlGUkFNRVdPUktBTFRJTlNUQUxMRklSU1Q9CiAJRlJBTUVXT1JLQUxUSU5TVEFMTExBU1Q9CisJRlJBTUVXT1JLUFlUSE9OVz0KIAlpZiB0ZXN0ICJ4JHtwcmVmaXh9IiA9ICJ4Tk9ORSIgOyB0aGVuCiAJCUZSQU1FV09SS1VOSVhUT09MU1BSRUZJWD0iJHthY19kZWZhdWx0X3ByZWZpeH0iCiAJZWxzZQpAQCAtMzQwLDYgKzM0OCw3IEBACiBBQ19TVUJTVChGUkFNRVdPUktJTlNUQUxMTEFTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExGSVJTVCkKIEFDX1NVQlNUKEZSQU1FV09SS0FMVElOU1RBTExMQVNUKQorQUNfU1VCU1QoRlJBTUVXT1JLUFlUSE9OVykKIEFDX1NVQlNUKEZSQU1FV09SS1VOSVhUT09MU1BSRUZJWCkKIEFDX1NVQlNUKEZSQU1FV09SS0lOU1RBTExBUFBTUFJFRklYKQogCkBAIC01MTYsNiArNTI1LDE5IEBACiAgIEFDX0RFRklORShfUE9TSVhfQ19TT1VSQ0UsIDIwMDgwOUwsIERlZmluZSB0byBhY3RpdmF0ZSBmZWF0dXJlcyBmcm9tIElFRUUgU3RkcyAxMDAzLjEtMjAwOCkKIGZpCiAKKyMgT24gSFAtVVggbWJzdGF0ZV90IHJlcXVpcmVzIF9JTkNMVURFX19TVERDX0ExX1NPVVJDRQorY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgorICBocCp8SFAqKQorICAgIGRlZmluZV9zdGRjX2ExPXllczs7CisgICopCisgICAgZGVmaW5lX3N0ZGNfYTE9bm87OworZXNhYworCitpZiB0ZXN0ICRkZWZpbmVfc3RkY19hMSA9IHllcwordGhlbgorICBBQ19ERUZJTkUoX0lOQ0xVREVfX1NURENfQTFfU09VUkNFLCAxLCBEZWZpbmUgdG8gaW5jbHVkZSBtYnN0YXRlX3QgZm9yIG1icnRvd2MpCitmaQorCiAjCiAjIFNHSSBjb21waWxlcnMgYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGJvdGggdGhlIEFCSSBhbmQgdGhlCiAjIElTQSBvbiB0aGUgY29tbWFuZCBsaW5lLiAgRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZXMgb2YgdGhlc2Ugc3dpdGNoZXMsCkBAIC01MzQsNiArNTU2LDkgQEAKIGZpCiBBQ19NU0dfUkVTVUxUKCRNQUNIREVQKQogCitBQ19TVUJTVChQTEFURElSKQorUExBVERJUj1wbGF0LSRNQUNIREVQCisKICMgUmVjb3JkIHRoZSBjb25maWd1cmUtdGltZSB2YWx1ZSBvZiBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQsCiAjIGl0IG1heSBpbmZsdWVuY2UgdGhlIHdheSB3ZSBjYW4gYnVpbGQgZXh0ZW5zaW9ucywgc28gZGlzdHV0aWxzCiAjIG5lZWRzIHRvIGNoZWNrIGl0CkBAIC02OTEsNyArNzE2LDcgQEAKIGZpCiBpZiB0ZXN0ICIkcHJlc2V0X2N4eCIgIT0gIiRDWFgiCiB0aGVuCi0gICAgICAgIEFDX01TR19XQVJOKFsKKyAgICAgICAgQUNfTVNHX05PVElDRShbCiAKICAgQnkgZGVmYXVsdCwgZGlzdHV0aWxzIHdpbGwgYnVpbGQgQysrIGV4dGVuc2lvbiBtb2R1bGVzIHdpdGggIiRDWFgiLgogICBJZiB0aGlzIGlzIG5vdCBpbnRlbmRlZCwgdGhlbiBzZXQgQ1hYIG9uIHRoZSBjb25maWd1cmUgY29tbWFuZCBsaW5lLgpAQCAtOTE3LDYgKzk0Miw3IEBACiAKICMgT3RoZXIgcGxhdGZvcm1zIGZvbGxvdwogaWYgdGVzdCAkZW5hYmxlX3NoYXJlZCA9ICJ5ZXMiOyB0aGVuCisgIFBZX0VOQUJMRV9TSEFSRUQ9MQogICBBQ19ERUZJTkUoUHlfRU5BQkxFX1NIQVJFRCwgMSwgW0RlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkuXSkKICAgY2FzZSAkYWNfc3lzX3N5c3RlbSBpbgogICAgIENZR1dJTiopCkBAIC05NjMsNyArOTg5LDcgQEAKICAgICBEYXJ3aW4qKQogICAgIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5keWxpYicKIAlCTERMSUJSQVJZPSctTC4gLWxweXRob24kKExEVkVSU0lPTiknCi0JUlVOU0hBUkVEPSdEWUxEX0xJQlJBUllfUEFUSD1gcHdkYCR7RFlMRF9MSUJSQVJZX1BBVEg6Kzoke0RZTERfTElCUkFSWV9QQVRIfX0nCisJUlVOU0hBUkVEPURZTERfTElCUkFSWV9QQVRIPWBwd2RgJHtEWUxEX0xJQlJBUllfUEFUSDorOiR7RFlMRF9MSUJSQVJZX1BBVEh9fQogCTs7CiAgICAgQUlYKikKIAlMRExJQlJBUlk9J2xpYnB5dGhvbiQoTERWRVJTSU9OKS5zbycKQEAgLTk3Miw2ICs5OTgsNyBAQAogCiAgIGVzYWMKIGVsc2UgIyBzaGFyZWQgaXMgZGlzYWJsZWQKKyAgUFlfRU5BQkxFX1NIQVJFRD0wCiAgIGNhc2UgJGFjX3N5c19zeXN0ZW0gaW4KICAgICBDWUdXSU4qKQogICAgICAgICAgIEJMRExJQlJBUlk9JyQoTElCUkFSWSknCkBAIC0xMDk1LDcgKzExMjIsMTEgQEAKIAkgICAgaWYgdGVzdCAiJFB5X0RFQlVHIiA9ICd0cnVlJyA7IHRoZW4KIAkJIyBPcHRpbWl6YXRpb24gbWVzc2VzIHVwIGRlYnVnZ2Vycywgc28gdHVybiBpdCBvZmYgZm9yCiAJCSMgZGVidWcgYnVpbGRzLgotCQlPUFQ9Ii1nIC1PMCAtV2FsbCAkU1RSSUNUX1BST1RPIgorICAgICAgICAgICAgICAgIGlmICIkQ0MiIC12IC0taGVscCAyPi9kZXYvbnVsbCB8Z3JlcCAtLSAtT2cgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgT1BUPSItZyAtT2cgLVdhbGwgJFNUUklDVF9QUk9UTyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIE9QVD0iLWcgLU8wIC1XYWxsICRTVFJJQ1RfUFJPVE8iCisgICAgICAgICAgICAgICAgZmkKIAkgICAgZWxzZQogCQlPUFQ9Ii1nICRXUkFQIC1PMyAtV2FsbCAkU1RSSUNUX1BST1RPIgogCSAgICBmaQpAQCAtMTExNyw2ICsxMTQ4LDcgQEAKIGZpCiAKIEFDX1NVQlNUKEJBU0VDRkxBR1MpCitBQ19TVUJTVChDRkxBR1NfTk9ESVNUKQogCiAjIFRoZSAtYXJjaCBmbGFncyBmb3IgdW5pdmVyc2FsIGJ1aWxkcyBvbiBPU1gKIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPQpAQCAtMTE4Miw2ICsxMjE0LDI4IEBACiAgICAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtV25vLXVudXNlZC1yZXN1bHQiCiAgICAgZmkKIAorICAgIEFDX01TR19DSEVDS0lORyhmb3IgLVdlcnJvcj1kZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQpCisgICAgIGFjX3NhdmVfY2M9IiRDQyIKKyAgICAgQ0M9IiRDQyAtV2Vycm9yPWRlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKyAgICAgc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisgICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZywKKyAgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgIFsKKwkgICBBQ19MQU5HX1BST0dSQU0oW1tdXSwgW1tdXSkKKwkgXSxbCisgICAgICAgICAgIGFjX2N2X2RlY2xhcmF0aW9uX2FmdGVyX3N0YXRlbWVudF93YXJuaW5nPXllcworCSBdLFsKKyAgICAgICAgICAgYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmc9bm8KKwkgXSkpCisgICAgIENGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorICAgICBDQz0iJGFjX3NhdmVfY2MiCisgICAgQUNfTVNHX1JFU1VMVCgkYWNfY3ZfZGVjbGFyYXRpb25fYWZ0ZXJfc3RhdGVtZW50X3dhcm5pbmcpCisKKyAgICBpZiB0ZXN0ICRhY19jdl9kZWNsYXJhdGlvbl9hZnRlcl9zdGF0ZW1lbnRfd2FybmluZyA9IHllcworICAgIHRoZW4KKyAgICAgIENGTEFHU19OT0RJU1Q9IiRDRkxBR1NfTk9ESVNUIC1XZXJyb3I9ZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorICAgIGZpCisKICAgICAjIGlmIHVzaW5nIGdjYyBvbiBhbHBoYSwgdXNlIC1taWVlZSB0byBnZXQgKG5lYXIpIGZ1bGwgSUVFRSA3NTQKICAgICAjIHN1cHBvcnQuICBXaXRob3V0IHRoaXMsIHRyZWF0bWVudCBvZiBzdWJub3JtYWxzIGRvZXNuJ3QgZm9sbG93CiAgICAgIyB0aGUgc3RhbmRhcmQuCkBAIC0xMTk1LDExMSArMTI0OSwxMjYgQEAKIAlTQ09fU1YqKQogCSAgICBCQVNFQ0ZMQUdTPSIkQkFTRUNGTEFHUyAtbTQ4NiAtRFNDTzUiCiAJICAgIDs7Ci0JIyBpcyB0aGVyZSBhbnkgb3RoZXIgY29tcGlsZXIgb24gRGFyd2luIGJlc2lkZXMgZ2NjPwotCURhcndpbiopCi0JICAgICMgLVduby1sb25nLWRvdWJsZSwgLW5vLWNwcC1wcmVjb21wLCBhbmQgLW1uby1mdXNlZC1tYWRkCi0JICAgICMgdXNlZCB0byBiZSBoZXJlLCBidXQgbm9uLUFwcGxlIGdjYyBkb2Vzbid0IGFjY2VwdCB0aGVtLgotICAgICAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCi0JICAgIHRoZW4KLQkJQUNfTVNHX0NIRUNLSU5HKHdoaWNoIGNvbXBpbGVyIHNob3VsZCBiZSB1c2VkKQotCQljYXNlICIke1VOSVZFUlNBTFNES30iIGluCi0JCSovTWFjT1NYMTAuNHUuc2RrKQotCQkJIyBCdWlsZCB1c2luZyAxMC40IFNESywgZm9yY2UgdXNhZ2Ugb2YgZ2NjIHdoZW4gdGhlIAotCQkJIyBjb21waWxlciBpcyBnY2MsIG90aGVyd2lzZSB0aGUgdXNlciB3aWxsIGdldCB2ZXJ5Ci0JCQkjIGNvbmZ1c2luZyBlcnJvciBtZXNzYWdlcyB3aGVuIGJ1aWxkaW5nIG9uIE9TWCAxMC42Ci0JCQlDQz1nY2MtNC4wCi0JCQlDUFA9Y3BwLTQuMAotCQkJOzsKLQkJZXNhYwotCQlBQ19NU0dfUkVTVUxUKCRDQykKLQkgICAgZmkKIAorICAgICMgaXMgdGhlcmUgYW55IG90aGVyIGNvbXBpbGVyIG9uIERhcndpbiBiZXNpZGVzIGdjYz8KKyAgICBEYXJ3aW4qKQorICAgICAgICAjIC1Xbm8tbG9uZy1kb3VibGUsIC1uby1jcHAtcHJlY29tcCwgYW5kIC1tbm8tZnVzZWQtbWFkZAorICAgICAgICAjIHVzZWQgdG8gYmUgaGVyZSwgYnV0IG5vbi1BcHBsZSBnY2MgZG9lc24ndCBhY2NlcHQgdGhlbS4KKyAgICAgICAgaWYgdGVzdCAiJHtDQ30iID0gZ2NjCisgICAgICAgIHRoZW4KKyAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyh3aGljaCBjb21waWxlciBzaG91bGQgYmUgdXNlZCkKKyAgICAgICAgICAgIGNhc2UgIiR7VU5JVkVSU0FMU0RLfSIgaW4KKyAgICAgICAgICAgICovTWFjT1NYMTAuNHUuc2RrKQorICAgICAgICAgICAgICAgICMgQnVpbGQgdXNpbmcgMTAuNCBTREssIGZvcmNlIHVzYWdlIG9mIGdjYyB3aGVuIHRoZQorICAgICAgICAgICAgICAgICMgY29tcGlsZXIgaXMgZ2NjLCBvdGhlcndpc2UgdGhlIHVzZXIgd2lsbCBnZXQgdmVyeQorICAgICAgICAgICAgICAgICMgY29uZnVzaW5nIGVycm9yIG1lc3NhZ2VzIHdoZW4gYnVpbGRpbmcgb24gT1NYIDEwLjYKKyAgICAgICAgICAgICAgICBDQz1nY2MtNC4wCisgICAgICAgICAgICAgICAgQ1BQPWNwcC00LjAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgQUNfTVNHX1JFU1VMVCgkQ0MpCisgICAgICAgIGZpCiAKLQkgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJVU5JVkVSU0FMX0FSQ0hfRkxBR1M9IiIKLQkgICAgICAgIGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gIjMyLWJpdCIgOyB0aGVuCi0JCSAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKLQkJICAgQVJDSF9SVU5fMzJCSVQ9IiIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiNjQtYml0IiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKLQkJICAgTElQT18zMkJJVF9GTEFHUz0iIgotCQkgICBBUkNIX1JVTl8zMkJJVD0idHJ1ZSIKKyAgICAgICAgaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSIKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgY2FzZSAiJFVOSVZFUlNBTF9BUkNIUyIgaW4KKyAgICAgICAgICAgIDMyLWJpdCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBwcGMgLWFyY2ggaTM4NiIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgNjQtYml0KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIHBwYzY0IC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9IiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSJ0cnVlIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGFsbCkKKyAgICAgICAgICAgICAgIFVOSVZFUlNBTF9BUkNIX0ZMQUdTPSItYXJjaCBpMzg2IC1hcmNoIHBwYyAtYXJjaCBwcGM2NCAtYXJjaCB4ODZfNjQiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiAtcHBjIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgorICAgICAgICAgICAgICAgTElQT18zMkJJVF9GTEFHUz0iLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGludGVsLTMyKQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYiCisgICAgICAgICAgICAgICBMSVBPXzMyQklUX0ZMQUdTPSIiCisgICAgICAgICAgICAgICBBUkNIX1JVTl8zMkJJVD0iIgorICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIDMtd2F5KQorICAgICAgICAgICAgICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggcHBjIC1hcmNoIHg4Nl82NCIKKyAgICAgICAgICAgICAgIExJUE9fMzJCSVRfRkxBR1M9Ii1leHRyYWN0IHBwYzc0MDAgLWV4dHJhY3QgaTM4NiIKKyAgICAgICAgICAgICAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgIEFDX01TR19FUlJPUihbcHJvcGVyIHVzYWdlIGlzIC0td2l0aC11bml2ZXJzYWwtYXJjaD0zMi1iaXR8NjQtYml0fGFsbHxpbnRlbHwzLXdheV0pCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYwogCi0JICAgICAgICAgZWxpZiB0ZXN0ICIkVU5JVkVSU0FMX0FSQ0hTIiA9ICJhbGwiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggcHBjNjQgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgICAgICBDRkxBR1M9IiR7VU5JVkVSU0FMX0FSQ0hfRkxBR1N9IC1pc3lzcm9vdCAke1VOSVZFUlNBTFNES30gJHtDRkxBR1N9IgorICAgICAgICAgICAgTERGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0xERkxBR1N9IgorICAgICAgICAgICAgaWYgdGVzdCAiJHtVTklWRVJTQUxTREt9IiAhPSAiLyIKKyAgICAgICAgICAgIHRoZW4KKyAgICAgICAgICAgICAgICBDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCiAKLQkgICAgICAgICBlbGlmIHRlc3QgIiRVTklWRVJTQUxfQVJDSFMiID0gImludGVsIiA7IHRoZW4KLQkJICAgVU5JVkVSU0FMX0FSQ0hfRkxBR1M9Ii1hcmNoIGkzODYgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBpMzg2IgotCQkgICBBUkNIX1JVTl8zMkJJVD0iL3Vzci9iaW4vYXJjaCAtaTM4NiIKKyAgICAgICAgIyBDYWxjdWxhdGUgYW4gYXBwcm9wcmlhdGUgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQ6CisgICAgICAgICMgVGhlIGRlcGxveW1lbnQgdGFyZ2V0IHZhbHVlIGlzIHVzZWQgZXhwbGljaXRseSB0byBlbmFibGUgY2VydGFpbgorICAgICAgICAjIGZlYXR1cmVzIGFyZSBlbmFibGVkIChzdWNoIGFzIGJ1aWx0aW4gbGliZWRpdCBzdXBwb3J0IGZvciByZWFkbGluZSkKKyAgICAgICAgIyB0aHJvdWdoIHRoZSB1c2Ugb2YgQXBwbGUncyBBdmFpbGFiaWxpeSBNYWNyb3MgYW5kIGlzIHVzZWQgYXMgYQorICAgICAgICAjIGNvbXBvbmVudCBvZiB0aGUgc3RyaW5nIHJldHVybmVkIGJ5IGRpc3R1dGlscy5nZXRfcGxhdGZvcm0oKS4KKyAgICAgICAgIworICAgICAgICAjIFVzZSB0aGUgdmFsdWUgZnJvbToKKyAgICAgICAgIyAxLiB0aGUgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUIGVudmlyb25tZW50IHZhcmlhYmxlIGlmIHNwZWNpZmllZAorICAgICAgICAjIDIuIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHZlcnNpb24gb2YgdGhlIGJ1aWxkIG1hY2hpbmUgaWYgPj0gMTAuNgorICAgICAgICAjIDMuIElmIHJ1bm5pbmcgb24gT1MgWCAxMC4zIHRocm91Z2ggMTAuNSwgdXNlIHRoZSBsZWdhY3kgdGVzdHMKKyAgICAgICAgIyAgICAgICBiZWxvdyB0byBwaWNrIGVpdGhlciAxMC4zLCAxMC40LCBvciAxMC41IGFzIHRoZSB0YXJnZXQuCisgICAgICAgICMgNC4gSWYgd2UgYXJlIHJ1bm5pbmcgb24gT1MgWCAxMC4yIG9yIGVhcmxpZXIsIGdvb2QgbHVjayEKIAotCSAgICAgICAgIGVsaWYgdGVzdCAiJFVOSVZFUlNBTF9BUkNIUyIgPSAiMy13YXkiIDsgdGhlbgotCQkgICBVTklWRVJTQUxfQVJDSF9GTEFHUz0iLWFyY2ggaTM4NiAtYXJjaCBwcGMgLWFyY2ggeDg2XzY0IgotCQkgICBMSVBPXzMyQklUX0ZMQUdTPSItZXh0cmFjdCBwcGM3NDAwIC1leHRyYWN0IGkzODYiCi0JCSAgIEFSQ0hfUlVOXzMyQklUPSIvdXNyL2Jpbi9hcmNoIC1pMzg2IC1wcGMiCisgICAgICAgIEFDX01TR19DSEVDS0lORyh3aGljaCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQgdG8gdXNlKQorICAgICAgICBjdXJfdGFyZ2V0X21ham9yPWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMS8nYAorICAgICAgICBjdXJfdGFyZ2V0X21pbm9yPWBzd192ZXJzIC1wcm9kdWN0VmVyc2lvbiB8IFwKKyAgICAgICAgICAgICAgICBzZWQgJ3MvXChbWzAtOV1dKlwpXC5cKFtbMC05XV0qXCkuKi9cMi8nYAorICAgICAgICBjdXJfdGFyZ2V0PSIke2N1cl90YXJnZXRfbWFqb3J9LiR7Y3VyX3RhcmdldF9taW5vcn0iCisgICAgICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0X21ham9yfSAtZXEgMTAgJiYgXAorICAgICAgICAgICB0ZXN0ICR7Y3VyX3RhcmdldF9taW5vcn0gLWdlIDMgJiYgXAorICAgICAgICAgICB0ZXN0ICR7Y3VyX3RhcmdldF9taW5vcn0gLWxlIDUKKyAgICAgICAgdGhlbgorICAgICAgICAgICAgIyBPUyBYIDEwLjMgdGhyb3VnaCAxMC41CisgICAgICAgICAgICBjdXJfdGFyZ2V0PTEwLjMKKyAgICAgICAgICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfQorICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgIGNhc2UgIiRVTklWRVJTQUxfQVJDSFMiIGluCisgICAgICAgICAgICAgICAgYWxsfDMtd2F5fGludGVsfDY0LWJpdCkKKyAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSBjb25maWd1cmF0aW9ucyB3ZXJlIGZpcnN0IHN1cHBvcnRlZCBpbiAxMC41CisgICAgICAgICAgICAgICAgICAgIGN1cl90YXJnZXQ9JzEwLjUnCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiCisgICAgICAgICAgICAgICAgdGhlbgorICAgICAgICAgICAgICAgICAgICAjIDEwLjQgd2FzIHRoZSBmaXJzdCByZWxlYXNlIHRvIHN1cHBvcnQgSW50ZWwgYXJjaHMKKyAgICAgICAgICAgICAgICAgICAgY3VyX3RhcmdldD0iMTAuNCIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0ke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0ke2N1cl90YXJnZXR9fQogCi0JCSBlbHNlCi0JICAgICAgICAgICBBQ19NU0dfRVJST1IoW3Byb3BlciB1c2FnZSBpcyAtLXdpdGgtdW5pdmVyc2FsLWFyY2g9MzItYml0fDY0LWJpdHxhbGx8aW50ZWx8My13YXldKQorICAgICAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlCisgICAgICAgICMgZW52aXJvbm1lbnQgd2l0aCBhIHZhbHVlIHRoYXQgaXMgdGhlIHNhbWUgYXMgd2hhdCB3ZSdsbCB1c2UKKyAgICAgICAgIyBpbiB0aGUgTWFrZWZpbGUgdG8gZW5zdXJlIHRoYXQgd2UnbGwgZ2V0IHRoZSBzYW1lIGNvbXBpbGVyCisgICAgICAgICMgZW52aXJvbm1lbnQgZHVyaW5nIGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGltZS4KKyAgICAgICAgTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSIkQ09ORklHVVJFX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCIKKyAgICAgICAgZXhwb3J0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVAorICAgICAgICBFWFBPUlRfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPScnCisgICAgICAgIEFDX01TR19SRVNVTFQoJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCkKIAotCQkgZmkKLQotCi0JCUNGTEFHUz0iJHtVTklWRVJTQUxfQVJDSF9GTEFHU30gLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCWlmIHRlc3QgIiR7VU5JVkVSU0FMU0RLfSIgIT0gIi8iCi0JCXRoZW4KLQkJCUNGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NGTEFHU30iCi0JCQlMREZMQUdTPSItaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlDUFBGTEFHUz0iLWlzeXNyb290ICR7VU5JVkVSU0FMU0RLfSAke0NQUEZMQUdTfSIKLQkJZmkKLQkgICAgZmkKLQotCSAgICAjIENhbGN1bGF0ZSB0aGUgcmlnaHQgZGVwbG95bWVudCB0YXJnZXQgZm9yIHRoaXMgYnVpbGQuCi0JICAgICMKLQkgICAgY3VyX3RhcmdldD1gc3dfdmVycyAtcHJvZHVjdFZlcnNpb24gfCBzZWQgJ3MvXCgxMFwuW1swLTldXSpcKS4qL1wxLydgCi0JICAgIGlmIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPicgMTAuMiAmJiBcCi0JICAgICAgIHRlc3QgJHtjdXJfdGFyZ2V0fSAnPCcgMTAuNgotCSAgICB0aGVuCi0JCSAgICBjdXJfdGFyZ2V0PTEwLjMKLQkJICAgIGlmIHRlc3QgJHtlbmFibGVfdW5pdmVyc2Fsc2RrfTsgdGhlbgotCQkJICAgIGlmIHRlc3QgIiR7VU5JVkVSU0FMX0FSQ0hTfSIgPSAiYWxsIjsgdGhlbgotCQkJCSAgICAjIEVuc3VyZSB0aGF0IHRoZSBkZWZhdWx0IHBsYXRmb3JtIGZvciBhIAotCQkJCSAgICAjIDQtd2F5IHVuaXZlcnNhbCBidWlsZCBpcyBPU1ggMTAuNSwgCi0JCQkJICAgICMgdGhhdCdzIHRoZSBmaXJzdCBPUyByZWxlYXNlIHdoZXJlIAotCQkJCSAgICAjIDQtd2F5IGJ1aWxkcyBtYWtlIHNlbnNlLgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjMtd2F5IjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gImludGVsIjsgdGhlbgotCQkJCSAgICBjdXJfdGFyZ2V0PScxMC41JwotCi0JCQkgICAgZWxpZiB0ZXN0ICIke1VOSVZFUlNBTF9BUkNIU30iID0gIjY0LWJpdCI7IHRoZW4KLQkJCQkgICAgY3VyX3RhcmdldD0nMTAuNScKLQkJCSAgICBmaQotCQkgICAgZWxzZQotCQkJICAgIGlmIHRlc3QgYC91c3IvYmluL2FyY2hgID0gImkzODYiOyB0aGVuCi0JCQkJICAgICMgT24gSW50ZWwgbWFjcyBkZWZhdWx0IHRvIGEgZGVwbG95bWVudAotCQkJCSAgICAjIHRhcmdldCBvZiAxMC40LCB0aGF0J3MgdGhlIGZpcnN0IE9TWAotCQkJCSAgICAjIHJlbGVhc2Ugd2l0aCBJbnRlbCBzdXBwb3J0LgotCQkJCSAgICBjdXJfdGFyZ2V0PSIxMC40IgotCQkJICAgIGZpCi0JCSAgICBmaQotCSAgICBmaQotCSAgICBDT05GSUdVUkVfTUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUPSR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULSR7Y3VyX3RhcmdldH19Ci0JICAgIAotCSAgICAjIE1ha2Ugc3VyZSB0aGF0IE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCBpcyBzZXQgaW4gdGhlIAotCSAgICAjIGVudmlyb25tZW50IHdpdGggYSB2YWx1ZSB0aGF0IGlzIHRoZSBzYW1lIGFzIHdoYXQgd2UnbGwgdXNlCi0JICAgICMgaW4gdGhlIE1ha2VmaWxlIHRvIGVuc3VyZSB0aGF0IHdlJ2xsIGdldCB0aGUgc2FtZSBjb21waWxlcgotCSAgICAjIGVudmlyb25tZW50IGR1cmluZyBjb25maWd1cmUgYW5kIGJ1aWxkIHRpbWUuCi0JICAgIE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0iJENPTkZJR1VSRV9NQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiCi0JICAgIGV4cG9ydCBNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQKLQkgICAgRVhQT1JUX01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVD0nJwotCi0JICAgIDs7CisgICAgICAgICMgZW5kIG9mIERhcndpbiogdGVzdHMKKyAgICAgICAgOzsKICAgICBlc2FjCiAgICAgOzsKIApAQCAtMTMyNiwyNCArMTM5NSw2IEBACiAJQkFTRUNGTEFHUz0iJEJBU0VDRkxBR1MgJGFjX2FyY2hfZmxhZ3MiCiBmaQogCi0jIENoZWNrIHdoZXRoZXIgR0NDIHN1cHBvcnRzIFB5QXJnX1BhcnNlVHVwbGUgZm9ybWF0Ci1pZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiCi10aGVuCi0gIEFDX01TR19DSEVDS0lORyh3aGV0aGVyIGdjYyBzdXBwb3J0cyBQYXJzZVR1cGxlIF9fZm9ybWF0X18pCi0gIHNhdmVfQ0ZMQUdTPSRDRkxBR1MKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdmb3JtYXQiCi0gIEFDX0NPTVBJTEVfSUZFTFNFKFsKLSAgICBBQ19MQU5HX1BST0dSQU0oW1t2b2lkIGYoY2hhciosLi4uKV9fYXR0cmlidXRlKChmb3JtYXQoUHlBcmdfUGFyc2VUdXBsZSwgMSwgMikpKTtdXSwgW1tdXSkKLSAgXSxbCi0gICAgQUNfREVGSU5FKEhBVkVfQVRUUklCVVRFX0ZPUk1BVF9QQVJTRVRVUExFLCAxLAotICAgICAgW0RlZmluZSBpZiBHQ0Mgc3VwcG9ydHMgX19hdHRyaWJ1dGVfXygoZm9ybWF0KFB5QXJnX1BhcnNlVHVwbGUsIDIsIDMpKSldKQotICAgIEFDX01TR19SRVNVTFQoeWVzKQotICBdLFsKLSAgICBBQ19NU0dfUkVTVUxUKG5vKQotICBdKQotICBDRkxBR1M9JHNhdmVfQ0ZMQUdTCi1maQotCiAjIE9uIHNvbWUgY29tcGlsZXJzLCBwdGhyZWFkcyBhcmUgYXZhaWxhYmxlIHdpdGhvdXQgZnVydGhlciBvcHRpb25zCiAjIChlLmcuIE1hY09TIFgpLiBPbiBzb21lIG9mIHRoZXNlIHN5c3RlbXMsIHRoZSBjb21waWxlciB3aWxsIG5vdAogIyBjb21wbGFpbiBpZiB1bmFjY2VwdGVkIG9wdGlvbnMgYXJlIHBhc3NlZCAoZS5nLiBnY2Mgb24gTWFjIE9TIFgpLgpAQCAtMTUxMiwxMSArMTU2Myw5IEBACiAKICMgY2hlY2tzIGZvciBoZWFkZXIgZmlsZXMKIEFDX0hFQURFUl9TVERDCi1hY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCi1DUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgotQUNfQ0hFQ0tfSEVBREVSUyhhc20vdHlwZXMuaCBjb25pby5oIGN1cnNlcy5oIGRpcmVjdC5oIGRsZmNuLmggZXJybm8uaCBcCitBQ19DSEVDS19IRUFERVJTKGFzbS90eXBlcy5oIGNvbmlvLmggZGlyZWN0LmggZGxmY24uaCBlcnJuby5oIFwKIGZjbnRsLmggZ3JwLmggXAotaWVlZWZwLmggaW8uaCBsYW5naW5mby5oIGxpYmludGwuaCBuY3Vyc2VzLmggcHJvY2Vzcy5oIHB0aHJlYWQuaCBcCitpZWVlZnAuaCBpby5oIGxhbmdpbmZvLmggbGliaW50bC5oIHByb2Nlc3MuaCBwdGhyZWFkLmggXAogc2NoZWQuaCBzaGFkb3cuaCBzaWduYWwuaCBzdGRpbnQuaCBzdHJvcHRzLmggdGVybWlvcy5oIFwKIHVuaXN0ZC5oIHV0aW1lLmggXAogcG9sbC5oIHN5cy9kZXZwb2xsLmggc3lzL2Vwb2xsLmggc3lzL3BvbGwuaCBcCkBAIC0xNTI2LDggKzE1NzUsOCBAQAogc3lzL3N0YXQuaCBzeXMvc3lzY2FsbC5oIHN5cy9zeXNfZG9tYWluLmggc3lzL3Rlcm1pby5oIHN5cy90aW1lLmggXAogc3lzL3RpbWVzLmggc3lzL3R5cGVzLmggc3lzL3Vpby5oIHN5cy91bi5oIHN5cy91dHNuYW1lLmggc3lzL3dhaXQuaCBwdHkuaCBcCiBsaWJ1dGlsLmggc3lzL3Jlc291cmNlLmggbmV0cGFja2V0L3BhY2tldC5oIHN5c2V4aXRzLmggYmx1ZXRvb3RoLmggXAotYmx1ZXRvb3RoL2JsdWV0b290aC5oIGxpbnV4L3RpcGMuaCBzcGF3bi5oIHV0aWwuaCBhbGxvY2EuaCkKLUNQUEZMQUdTPSRhY19zYXZlX2NwcGZsYWdzCitibHVldG9vdGgvYmx1ZXRvb3RoLmggbGludXgvdGlwYy5oIHNwYXduLmggdXRpbC5oIGFsbG9jYS5oIGVuZGlhbi5oIFwKK3N5cy9lbmRpYW4uaCkKIEFDX0hFQURFUl9ESVJFTlQKIEFDX0hFQURFUl9NQUpPUgogCkBAIC0xNTQ3LDE0ICsxNTk2LDYgQEAKICNlbmRpZgogXSkKIAotCi0jIE9uIFNvbGFyaXMsIHRlcm0uaCByZXF1aXJlcyBjdXJzZXMuaAotQUNfQ0hFQ0tfSEVBREVSUyh0ZXJtLmgsLCxbCi0jaWZkZWYgSEFWRV9DVVJTRVNfSAotI2luY2x1ZGUgPGN1cnNlcy5oPgotI2VuZGlmCi1dKQotCiAjIE9uIExpbnV4LCBuZXRsaW5rLmggcmVxdWlyZXMgYXNtL3R5cGVzLmgKIEFDX0NIRUNLX0hFQURFUlMobGludXgvbmV0bGluay5oLCwsWwogI2lmZGVmIEhBVkVfQVNNX1RZUEVTX0gKQEAgLTE1NjYsNyArMTYwNyw3IEBACiBdKQogCiAjIE9uIExpbnV4LCBjYW4uaCBhbmQgY2FuL3Jhdy5oIHJlcXVpcmUgc3lzL3NvY2tldC5oCi1BQ19DSEVDS19IRUFERVJTKGxpbnV4L2Nhbi5oIGxpbnV4L2Nhbi9yYXcuaCwsLFsKK0FDX0NIRUNLX0hFQURFUlMobGludXgvY2FuLmggbGludXgvY2FuL3Jhdy5oIGxpbnV4L2Nhbi9iY20uaCwsLFsKICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtMTU5Nyw2ICsxNjM4LDIyIEBACiAgICAgQUNfREVGSU5FKEhBVkVfTUFLRURFViwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdSBoYXZlIHRoZSBtYWtlZGV2IG1hY3JvLl0pCiBmaQogCisjIGJ5dGUgc3dhcHBpbmcKK0FDX01TR19DSEVDS0lORyhmb3IgbGU2NHRvaCkKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpZmRlZiBIQVZFX0VORElBTl9ICisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX0VORElBTl9IKQorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbmRpZgorXV0sIFtbCisgICBsZTY0dG9oKDEpIF1dKQorXSxbYWNfY3ZfaGFzX2xlNjR0b2g9eWVzXSxbYWNfY3ZfaGFzX2xlNjR0b2g9bm9dKQorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfaGFzX2xlNjR0b2gpCitpZiB0ZXN0ICIkYWNfY3ZfaGFzX2xlNjR0b2giID0gInllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9IVE9MRTY0LCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgbGU2NHRvaCgpXSkKK2ZpCisKICMgRW5hYmxpbmcgTEZTIG9uIFNvbGFyaXMgKDIuNiB0byA5KSB3aXRoIGdjYyAyLjk1IHRyaWdnZXJzIGEgYnVnIGluCiAjIHRoZSBzeXN0ZW0gaGVhZGVyczogSWYgX1hPUEVOX1NPVVJDRSBhbmQgX0xBUkdFRklMRV9TT1VSQ0UgYXJlCiAjIGRlZmluZWQsIGJ1dCB0aGUgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBwcmFnbWEgcmVkZWZpbmVfZXh0bmFtZSwKQEAgLTE3OTgsNyArMTg1NSw2IEBACiBlc2FjCiAKIAotQVJDSF9SVU5fMzJCSVQ9IiIKIEFDX1NVQlNUKExJQlRPT0xfQ1JVRlQpCiBjYXNlICRhY19zeXNfc3lzdGVtLyRhY19zeXNfcmVsZWFzZSBpbgogICBEYXJ3aW4vQDw6QDAxNTY3QDo+QFwuLiopIApAQCAtMTg1NSwxNCArMTkxMSwxMiBAQAogICAgIAkJOzsKICAgICAJZXNhYwogCi0JI0FSQ0hfUlVOXzMyQklUPSJ0cnVlIgogICAgIGZpCiAKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUIiAtbFN5c3RlbSAtbFN5c3RlbVN0dWJzIC1hcmNoX29ubHkgJHtNQUNPU1hfREVGQVVMVF9BUkNIfSIKICAgICBMSUJUT09MX0NSVUZUPSRMSUJUT09MX0NSVUZUJyAtaW5zdGFsbF9uYW1lICQoUFlUSE9ORlJBTUVXT1JLSU5TVEFMTERJUikvVmVyc2lvbnMvJChWRVJTSU9OKS8kKFBZVEhPTkZSQU1FV09SSyknCiAgICAgTElCVE9PTF9DUlVGVD0kTElCVE9PTF9DUlVGVCcgLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkKFZFUlNJT04pIC1jdXJyZW50X3ZlcnNpb24gJChWRVJTSU9OKSc7OwogZXNhYwotCiBBQ19NU0dfQ0hFQ0tJTkcoZm9yIC0tZW5hYmxlLWZyYW1ld29yaykKIGlmIHRlc3QgIiRlbmFibGVfZnJhbWV3b3JrIgogdGhlbgpAQCAtMTk4MCwxNSArMjAzNCwxNCBAQAogCQkjIFVzZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwIHdoZW5ldmVyIHBvc3NpYmxlICgxMC4zIGFuZCBsYXRlcikuCiAJCSMgVGhpcyBhbGxvd3MgYW4gZXh0ZW5zaW9uIHRvIGJlIHVzZWQgaW4gYW55IFB5dGhvbgogCi0JCWlmIHRlc3QgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9ICc+JyAxMC4yCisJCWRlcF90YXJnZXRfbWFqb3I9YGVjaG8gJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IHwgXAorCQkJCXNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wxLydgCisJCWRlcF90YXJnZXRfbWlub3I9YGVjaG8gJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IHwgXAorCQkJCXNlZCAncy9cKFtbMC05XV0qXClcLlwoW1swLTldXSpcKS4qL1wyLydgCisJCWlmIHRlc3QgJHtkZXBfdGFyZ2V0X21ham9yfSAtZXEgMTAgJiYgXAorCQkgICB0ZXN0ICR7ZGVwX3RhcmdldF9taW5vcn0gLWxlIDIKIAkJdGhlbgotCQkJaWYgdGVzdCAiJHtlbmFibGVfdW5pdmVyc2Fsc2RrfSI7IHRoZW4KLQkJCQlMREZMQUdTPSIke1VOSVZFUlNBTF9BUkNIX0ZMQUdTfSAtaXN5c3Jvb3QgJHtVTklWRVJTQUxTREt9ICR7TERGTEFHU30iCi0JCQlmaQotCQkJTERTSEFSRUQ9JyQoQ0MpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKLQkJCUxEQ1hYU0hBUkVEPSckKENYWCkgLWJ1bmRsZSAtdW5kZWZpbmVkIGR5bmFtaWNfbG9va3VwJwotCQkJQkxEU0hBUkVEPSIkTERTSEFSRUQiCi0JCWVsc2UKKwkJCSMgYnVpbGRpbmcgZm9yIE9TIFggMTAuMCB0aHJvdWdoIDEwLjIKIAkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlJwogCQkJTERDWFhTSEFSRUQ9JyQoQ1hYKSAtYnVuZGxlJwogCQkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiIDsgdGhlbgpAQCAtMjAwMiw2ICsyMDU1LDExIEBACiAJCQkJTERTSEFSRUQ9IiRMRFNIQVJFRCAiJy1idW5kbGVfbG9hZGVyICQoQklORElSKS9weXRob24kKFZFUlNJT04pJChFWEUpJwogCQkJCUxEQ1hYU0hBUkVEPSIkTERDWFhTSEFSRUQgIictYnVuZGxlX2xvYWRlciAkKEJJTkRJUikvcHl0aG9uJChWRVJTSU9OKSQoRVhFKScKIAkJCWZpCisJCWVsc2UKKwkJCSMgYnVpbGRpbmcgZm9yIE9TIFggMTAuMyBhbmQgbGF0ZXIKKwkJCUxEU0hBUkVEPSckKENDKSAtYnVuZGxlIC11bmRlZmluZWQgZHluYW1pY19sb29rdXAnCisJCQlMRENYWFNIQVJFRD0nJChDWFgpIC1idW5kbGUgLXVuZGVmaW5lZCBkeW5hbWljX2xvb2t1cCcKKwkJCUJMRFNIQVJFRD0iJExEU0hBUkVEIgogCQlmaQogCQk7OwogCUxpbnV4KnxHTlUqfFFOWCopCkBAIC0yMTA4LDYgKzIxNjYsMTIgQEAKIAkjIC11IGxpYnN5c19zIHB1bGxzIGluIGFsbCBzeW1ib2xzIGluIGxpYnN5cwogCURhcndpbi8qKSAKIAkJTElOS0ZPUlNIQVJFRD0iJGV4dHJhX3VuZGVmcyAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIgorCisJCSMgSXNzdWUgIzE4MDc1OiB0aGUgZGVmYXVsdCBtYXhpbXVtIHN0YWNrIHNpemUgKDhNQnl0ZXMpIGlzIHRvbworCQkjIHNtYWxsIGZvciB0aGUgZGVmYXVsdCByZWN1cnNpb24gbGltaXQuIEluY3JlYXNlIHRoZSBzdGFjayBzaXplCisJCSMgdG8gZW5zdXJlIHRoYXQgdGVzdHMgZG9uJ3QgY3Jhc2gKKwkJTElOS0ZPUlNIQVJFRD0iLVdsLC1zdGFja19zaXplLDEwMDAwMDAgJExJTktGT1JTSEFSRUQiCisKIAkJaWYgdGVzdCAiJGVuYWJsZV9mcmFtZXdvcmsiCiAJCXRoZW4KIAkJCUxJTktGT1JTSEFSRUQ9IiRMSU5LRk9SU0hBUkVEICInJChQWVRIT05GUkFNRVdPUktESVIpL1ZlcnNpb25zLyQoVkVSU0lPTikvJChQWVRIT05GUkFNRVdPUkspJwpAQCAtMjE4MSw2ICsyMjQ1LDkgQEAKIEFDX0NIRUNLX0xJQihzZW5kZmlsZSwgc2VuZGZpbGUpCiBBQ19DSEVDS19MSUIoZGwsIGRsb3BlbikJIyBEeW5hbWljIGxpbmtpbmcgZm9yIFN1bk9TL1NvbGFyaXMgYW5kIFNZU1YKIEFDX0NIRUNLX0xJQihkbGQsIHNobF9sb2FkKQkjIER5bmFtaWMgbGlua2luZyBmb3IgSFAtVVgKK0FDX0NIRUNLX0xJQihjcnlwdG8sIFJBTkRfZWdkLAorICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX1JBTkRfRUdELCAxLAorICAgICAgICAgICAgIFtEZWZpbmUgaWYgdGhlIGxpYmNyeXB0byBoYXMgUkFORF9lZ2RdKSkKIAogIyBvbmx5IGNoZWNrIGZvciBzZW1faW5pdCBpZiB0aHJlYWQgc3VwcG9ydCBpcyByZXF1ZXN0ZWQKIGlmIHRlc3QgIiR3aXRoX3RocmVhZHMiID0gInllcyIgLW8gLXogIiR3aXRoX3RocmVhZHMiOyB0aGVuCkBAIC0yMjEyLDYgKzIyNzksNTkgQEAKIAkqKSA7OwogZXNhYwogCisjIGNoZWNrIGZvciBzeXN0ZW1zIHRoYXQgcmVxdWlyZSBhbGlnbmVkIG1lbW9yeSBhY2Nlc3MKK0FDX01TR19DSEVDS0lORyhhbGlnbmVkIG1lbW9yeSBhY2Nlc3MgaXMgcmVxdWlyZWQpCitBQ19UUllfUlVOKFsKK2ludCBtYWluKCkKK3sKKyAgICBjaGFyIHNbMTZdOworICAgIGludCBpLCAqcDEsICpwMjsKKyAgICBmb3IgKGk9MDsgaSA8IDE2OyBpKyspCisgICAgICAgIHNbaV0gPSBpOworICAgIHAxID0gKGludCopKHMrMSk7CisgICAgcDIgPSAoaW50KikocysyKTsKKyAgICBpZiAoKnAxID09ICpwMikKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisgICAgICAgICAgICAgIF0sCisgICAgIFthbGlnbmVkX3JlcXVpcmVkPW5vXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSwKKyAgICAgW2FsaWduZWRfcmVxdWlyZWQ9eWVzXSkKKworaWYgdGVzdCAiJGFsaWduZWRfcmVxdWlyZWQiID0geWVzIDsgdGhlbgorICBBQ19ERUZJTkUoW0hBVkVfQUxJR05FRF9SRVFVSVJFRF0sIFsxXSwKKyAgICBbRGVmaW5lIGlmIGFsaWduZWQgbWVtb3J5IGFjY2VzcyBpcyByZXF1aXJlZF0pCitmaQorQUNfTVNHX1JFU1VMVCgkYWxpZ25lZF9yZXF1aXJlZCkKKworCisjIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcgaGFzaCBhbGdvcml0aG0KK0FIX1RFTVBMQVRFKFB5X0hBU0hfQUxHT1JJVEhNLAorICBbRGVmaW5lIGhhc2ggYWxnb3JpdGhtIGZvciBzdHIsIGJ5dGVzIGFuZCBtZW1vcnl2aWV3LgorICAgU2lwSGFzaDI0OiAxLCBGTlY6IDIsIGV4dGVybmFsbHkgZGVmaW5lZDogMF0pCisKK0FDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLWhhc2gtYWxnb3JpdGhtKQorZG5sIHF1YWRyaWdyYXBocyAiQDw6QCIgYW5kICJAOj5AIiBwcm9kdWNlICJbIiBhbmQgIl0iIGluIHRoZSBvdXRwdXQKK0FDX0FSR19XSVRIKGhhc2hfYWxnb3JpdGhtLAorICAgICAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1oYXNoLWFsZ29yaXRobT1APDpAZm52fHNpcGhhc2gyNEA6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGVjdCBoYXNoIGFsZ29yaXRobV0pLAorWworQUNfTVNHX1JFU1VMVCgkd2l0aHZhbCkKK2Nhc2UgIiR3aXRodmFsIiBpbgorICAgIHNpcGhhc2gyNCkKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAxKQorICAgICAgICA7OworICAgIGZudikKKyAgICAgICAgQUNfREVGSU5FKFB5X0hBU0hfQUxHT1JJVEhNLCAyKQorICAgICAgICA7OworICAgICopCisgICAgICAgIEFDX01TR19FUlJPUihbdW5rbm93biBoYXNoIGFsZ29yaXRobSAnJHdpdGh2YWwnXSkKKyAgICAgICAgOzsKK2VzYWMKK10sCitbQUNfTVNHX1JFU1VMVChkZWZhdWx0KV0pCisKICMgTW9zdCBTVlI0IHBsYXRmb3JtcyAoZS5nLiBTb2xhcmlzKSBuZWVkIC1sc29ja2V0IGFuZCAtbG5zbC4KIEFDX0NIRUNLX0xJQihuc2wsIHRfb3BlbiwgW0xJQlM9Ii1sbnNsICRMSUJTIl0pICMgU1ZSNAogQUNfQ0hFQ0tfTElCKHNvY2tldCwgc29ja2V0LCBbTElCUz0iLWxzb2NrZXQgJExJQlMiXSwgW10sICRMSUJTKSAjIFNWUjQgc29ja2V0cwpAQCAtMjIyNSw3ICsyMzQ1LDcgQEAKIF0sCiBbQUNfTVNHX1JFU1VMVChubyldKQogCi1BQ19QQVRIX1RPT0woW1BLR19DT05GSUddLCBbcGtnLWNvbmZpZ10pCitQS0dfUFJPR19QS0dfQ09ORklHCiAKICMgQ2hlY2sgZm9yIHVzZSBvZiB0aGUgc3lzdGVtIGV4cGF0IGxpYnJhcnkKIEFDX01TR19DSEVDS0lORyhmb3IgLS13aXRoLXN5c3RlbS1leHBhdCkKQEAgLTI4MjMsOSArMjk0Myw5IEBACiAKICMgY2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucwogQUNfQ0hFQ0tfRlVOQ1MoYWxhcm0gYWNjZXB0NCBzZXRpdGltZXIgZ2V0aXRpbWVyIGJpbmRfdGV4dGRvbWFpbl9jb2Rlc2V0IGNob3duIFwKLSBjbG9jayBjb25mc3RyIGN0ZXJtaWQgZXhlY3YgZmFjY2Vzc2F0IGZjaG1vZCBmY2htb2RhdCBmY2hvd24gZmNob3duYXQgXAorIGNsb2NrIGNvbmZzdHIgY3Rlcm1pZCBkdXAzIGV4ZWN2IGZhY2Nlc3NhdCBmY2htb2QgZmNobW9kYXQgZmNob3duIGZjaG93bmF0IFwKICBmZXhlY3ZlIGZkb3BlbmRpciBmb3JrIGZwYXRoY29uZiBmc3RhdGF0IGZ0aW1lIGZ0cnVuY2F0ZSBmdXRpbWVzYXQgXAotIGZ1dGltZW5zIGZ1dGltZXMgZ2FpX3N0cmVycm9yIFwKKyBmdXRpbWVucyBmdXRpbWVzIGdhaV9zdHJlcnJvciBnZXRlbnRyb3B5IFwKICBnZXRncm91cGxpc3QgZ2V0Z3JvdXBzIGdldGxvZ2luIGdldGxvYWRhdmcgZ2V0cGVlcm5hbWUgZ2V0cGdpZCBnZXRwaWQgXAogIGdldHByaW9yaXR5IGdldHJlc3VpZCBnZXRyZXNnaWQgZ2V0cHdlbnQgZ2V0c3BuYW0gZ2V0c3BlbnQgZ2V0c2lkIGdldHdkIFwKICBpZl9uYW1laW5kZXggXApAQCAtMjg0Myw3ICsyOTYzLDcgQEAKICBzaWd0aW1lZHdhaXQgc2lnd2FpdCBzaWd3YWl0aW5mbyBzbnByaW50ZiBzdHJmdGltZSBzdHJsY3B5IHN5bWxpbmthdCBzeW5jIFwKICBzeXNjb25mIHRjZ2V0cGdycCB0Y3NldHBncnAgdGVtcG5hbSB0aW1lZ20gdGltZXMgdG1wZmlsZSB0bXBuYW0gdG1wbmFtX3IgXAogIHRydW5jYXRlIHVuYW1lIHVubGlua2F0IHVuc2V0ZW52IHV0aW1lbnNhdCB1dGltZXMgd2FpdGlkIHdhaXRwaWQgd2FpdDMgd2FpdDQgXAotIHdjc2NvbGwgd2NzZnRpbWUgd2NzeGZybSB3cml0ZXYgX2dldHB0eSkKKyB3Y3Njb2xsIHdjc2Z0aW1lIHdjc3hmcm0gd21lbWNtcCB3cml0ZXYgX2dldHB0eSkKIAogQUNfQ0hFQ0tfREVDTChkaXJmZCwKICAgICBBQ19ERUZJTkUoSEFWRV9ESVJGRCwgMSwKQEAgLTI5MTAsNiArMzAzMCwxNiBAQAogICAgQUNfTVNHX1JFU1VMVCh5ZXMpXSwKICAgW0FDX01TR19SRVNVTFQobm8pCiBdKQorQUNfTVNHX0NIRUNLSU5HKGZvciBwcmxpbWl0KQorQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisgICAgXV0sIFtbdm9pZCAqeD1wcmxpbWl0XV0pXSwKKyAgW0FDX0RFRklORShIQVZFX1BSTElNSVQsIDEsIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ3BybGltaXQnIGZ1bmN0aW9ucy4pCisgICBBQ19NU0dfUkVTVUxUKHllcyldLAorICBbQUNfTVNHX1JFU1VMVChubykKK10pCisKICMgT24gc29tZSBzeXN0ZW1zIChlZy4gRnJlZUJTRCA1KSwgd2Ugd291bGQgZmluZCBhIGRlZmluaXRpb24gb2YgdGhlCiAjIGZ1bmN0aW9ucyBjdGVybWlkX3IsIHNldGdyb3VwcyBpbiB0aGUgbGlicmFyeSwgYnV0IG5vIHByb3RvdHlwZQogIyAoZS5nLiBiZWNhdXNlIHdlIHVzZSBfWE9QRU5fU09VUkNFKS4gU2VlIHdoZXRoZXIgd2UgY2FuIHRha2UgdGhlaXIKQEAgLTMxMTAsNyArMzI0MCw3IEBACiAjIGNoZWNrIGZvciBsb25nIGZpbGUgc3VwcG9ydCBmdW5jdGlvbnMKIEFDX0NIRUNLX0ZVTkNTKGZzZWVrNjQgZnNlZWtvIGZzdGF0dmZzIGZ0ZWxsNjQgZnRlbGxvIHN0YXR2ZnMpCiAKLUFDX1JFUExBQ0VfRlVOQ1MoZHVwMiBnZXRjd2Qgc3RyZHVwKQorQUNfUkVQTEFDRV9GVU5DUyhkdXAyIHN0cmR1cCkKIEFDX0NIRUNLX0ZVTkNTKGdldHBncnAsIAogICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPHVuaXN0ZC5oPl1dLCBbW2dldHBncnAoMCk7XV0pXSwKICAgICBbQUNfREVGSU5FKEdFVFBHUlBfSEFWRV9BUkcsIDEsIFtEZWZpbmUgaWYgZ2V0cGdycCgpIG11c3QgYmUgY2FsbGVkIGFzIGdldHBncnAoMCkuXSldLApAQCAtMzk4Myw2ICs0MTEzLDExIEBACiBMRFZFUlNJT049JyQoVkVSU0lPTikkKEFCSUZMQUdTKScKIEFDX01TR19SRVNVTFQoJExEVkVSU0lPTikKIAorZG5sIGRlZmluZSBMSUJQTCBhZnRlciBBQklGTEFHUyBhbmQgTERWRVJTSU9OIGlzIGRlZmluZWQuCitBQ19TVUJTVChQWV9FTkFCTEVfU0hBUkVEKQorTElCUEw9JyQocHJlZml4KSciL2xpYi9weXRob24ke1ZFUlNJT059L2NvbmZpZy0ke0xEVkVSU0lPTn0iCitBQ19TVUJTVChMSUJQTCkKKwogIyBDaGVjayB3aGV0aGVyIHJpZ2h0IHNoaWZ0aW5nIGEgbmVnYXRpdmUgaW50ZWdlciBleHRlbmRzIHRoZSBzaWduIGJpdAogIyBvciBmaWxscyB3aXRoIHplcm9zIChsaWtlIHRoZSBDcmF5IEo5MCwgYWNjb3JkaW5nIHRvIFRpbSBQZXRlcnMpLgogQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgcmlnaHQgc2hpZnQgZXh0ZW5kcyB0aGUgc2lnbiBiaXQpCkBAIC00MjcyLDggKzQ0MDcsMTkgQEAKICAgW0RlZmluZSBpZiB5b3UgaGF2ZSBzdHJ1Y3Qgc3RhdC5zdF9tdGltZW5zZWNdKQogZmkKIAorIyBmaXJzdCBjdXJzZXMgaGVhZGVyIGNoZWNrCiBhY19zYXZlX2NwcGZsYWdzPSIkQ1BQRkxBR1MiCiBDUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9pbmNsdWRlL25jdXJzZXN3IgorCitBQ19DSEVDS19IRUFERVJTKGN1cnNlcy5oIG5jdXJzZXMuaCkKKworIyBPbiBTb2xhcmlzLCB0ZXJtLmggcmVxdWlyZXMgY3Vyc2VzLmgKK0FDX0NIRUNLX0hFQURFUlModGVybS5oLCwsWworI2lmZGVmIEhBVkVfQ1VSU0VTX0gKKyNpbmNsdWRlIDxjdXJzZXMuaD4KKyNlbmRpZgorXSkKKwogIyBPbiBIUC9VWCAxMS4wLCBtdndkZWxjaCBpcyBhIGJsb2NrIHdpdGggYSByZXR1cm4gc3RhdGVtZW50CiBBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciBtdndkZWxjaCBpcyBhbiBleHByZXNzaW9uKQogQUNfQ0FDSEVfVkFMKGFjX2N2X212d2RlbGNoX2lzX2V4cHJlc3Npb24sCkBAIC00NjYxLDggKzQ4MDcsMjMgQEAKICAgICBlc2FjCiBmaQogCisjIGVuc3VyZXBpcCBvcHRpb24KK0FDX01TR19DSEVDS0lORyhmb3IgZW5zdXJlcGlwKQorQUNfQVJHX1dJVEgoZW5zdXJlcGlwLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoKG91dCktZW5zdXJlcGlwPUA8OkA9dXBncmFkZUA6PkBdLAorICAgICAgICBbImluc3RhbGwiIG9yICJ1cGdyYWRlIiB1c2luZyBidW5kbGVkIHBpcF0pXSwKKyAgICBbXSwKKyAgICBbd2l0aF9lbnN1cmVwaXA9dXBncmFkZV0pCitBU19DQVNFKCR3aXRoX2Vuc3VyZXBpcCwKKyAgICBbeWVzfHVwZ3JhZGVdLFtFTlNVUkVQSVA9dXBncmFkZV0sCisgICAgW2luc3RhbGxdLFtFTlNVUkVQSVA9aW5zdGFsbF0sCisgICAgW25vXSxbRU5TVVJFUElQPW5vXSwKKyAgICBbQUNfTVNHX0VSUk9SKFstLXdpdGgtZW5zdXJlcGlwPXVwZ3JhZGV8aW5zdGFsbHxub10pXSkKK0FDX01TR19SRVNVTFQoJEVOU1VSRVBJUCkKK0FDX1NVQlNUKEVOU1VSRVBJUCkKKwogIyBnZW5lcmF0ZSBvdXRwdXQgZmlsZXMKLUFDX0NPTkZJR19GSUxFUyhNYWtlZmlsZS5wcmUgTW9kdWxlcy9TZXR1cC5jb25maWcgTWlzYy9weXRob24ucGMpCitBQ19DT05GSUdfRklMRVMoTWFrZWZpbGUucHJlIE1vZHVsZXMvU2V0dXAuY29uZmlnIE1pc2MvcHl0aG9uLnBjIE1pc2MvcHl0aG9uLWNvbmZpZy5zaCkKIEFDX0NPTkZJR19GSUxFUyhbTW9kdWxlcy9sZF9zb19haXhdLCBbY2htb2QgK3ggTW9kdWxlcy9sZF9zb19haXhdKQogQUNfT1VUUFVUCiAKZGlmZiAtLWdpdCBhL3B5Y29uZmlnLmguaW4gYi9weWNvbmZpZy5oLmluCmluZGV4IDAwMjAzMDAuLjg1NDkwYzggMTAwNjQ0Ci0tLSBhL3B5Y29uZmlnLmguaW4KKysrIGIvcHljb25maWcuaC5pbgpAQCAtNDksNiArNDksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhbGFybScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BTEFSTQogCisvKiBEZWZpbmUgaWYgYWxpZ25lZCBtZW1vcnkgYWNjZXNzIGlzIHJlcXVpcmVkICovCisjdW5kZWYgSEFWRV9BTElHTkVEX1JFUVVJUkVECisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YWxsb2NhLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfQUxMT0NBX0gKIApAQCAtNjQsOSArNjcsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdGFuaCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BVEFOSAogCi0vKiBEZWZpbmUgaWYgR0NDIHN1cHBvcnRzIF9fYXR0cmlidXRlX18oKGZvcm1hdChQeUFyZ19QYXJzZVR1cGxlLCAyLCAzKSkpICovCi0jdW5kZWYgSEFWRV9BVFRSSUJVVEVfRk9STUFUX1BBUlNFVFVQTEUKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiaW5kX3RleHRkb21haW5fY29kZXNldCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9CSU5EX1RFWFRET01BSU5fQ09ERVNFVAogCkBAIC0xOTYsOSArMTk2LDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDInIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRFVQMgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGR1cDMnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRFVQMworCiAvKiBEZWZpbmVkIHdoZW4gYW55IGR5bmFtaWMgbW9kdWxlIGxvYWRpbmcgaXMgZW5hYmxlZC4gKi8KICN1bmRlZiBIQVZFX0RZTkFNSUNfTE9BRElORwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0VORElBTl9ICisKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgJ2Vwb2xsJyBmdW5jdGlvbnMuICovCiAjdW5kZWYgSEFWRV9FUE9MTAogCkBAIC0zMjAsMTIgKzMyNiwxMiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXRhZGRyaW5mbyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVEFERFJJTkZPCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0Y3dkJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVENXRAotCiAvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBmbG9ja2ZpbGUoKSwgZ2V0Y191bmxvY2tlZCgpLCBhbmQgZnVubG9ja2ZpbGUoKSAqLwogI3VuZGVmIEhBVkVfR0VUQ19VTkxPQ0tFRAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGVudHJvcHknIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VURU5UUk9QWQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGdyb3VwbGlzdCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRHUk9VUExJU1QKIApAQCAtNDExLDYgKzQxNyw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdoc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSFNUUkVSUk9SCiAKKy8qIERlZmluZSB0aGlzIGlmIHlvdSBoYXZlIGxlNjR0b2goKSAqLworI3VuZGVmIEhBVkVfSFRPTEU2NAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGh5cG90JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0hZUE9UCiAKQEAgLTUwNCw2ICs1MTMsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsaW5rYXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTElOS0FUCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvY2FuL2JjbS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTlVYX0NBTl9CQ01fSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbnV4L2Nhbi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX0NBTl9ICiAKQEAgLTYyNyw2ICs2MzksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9QUkVBRAogCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlICdwcmxpbWl0JyBmdW5jdGlvbnMuICovCisjdW5kZWYgSEFWRV9QUkxJTUlUCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cHJvY2Vzcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BST0NFU1NfSAogCkBAIC02NjAsNiArNjc1LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHdyaXRlJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1BXUklURQogCisvKiBEZWZpbmUgaWYgdGhlIGxpYmNyeXB0byBoYXMgUkFORF9lZ2QgKi8KKyN1bmRlZiBIQVZFX1JBTkRfRUdECisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmVhZGxpbmsnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfUkVBRExJTksKIApAQCAtOTI0LDYgKzk0Miw5IEBACiAgICAqLwogI3VuZGVmIEhBVkVfU1lTX0RJUl9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2VuZGlhbi5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19FTkRJQU5fSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9lcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19FUE9MTF9ICiAKQEAgLTExMjEsNiArMTE0Miw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdjc3hmcm0nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfV0NTWEZSTQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHdtZW1jbXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfV01FTUNNUAorCiAvKiBEZWZpbmUgaWYgdHpzZXQoKSBhY3R1YWxseSBzd2l0Y2hlcyB0aGUgbG9jYWwgdGltZXpvbmUgaW4gYSBtZWFuaW5nZnVsIHdheS4KICAgICovCiAjdW5kZWYgSEFWRV9XT1JLSU5HX1RaU0VUCkBAIC0xMTg3LDYgKzEyMTEsMTAgQEAKIC8qIERlZmluZWQgaWYgUHl0aG9uIGlzIGJ1aWx0IGFzIGEgc2hhcmVkIGxpYnJhcnkuICovCiAjdW5kZWYgUHlfRU5BQkxFX1NIQVJFRAogCisvKiBEZWZpbmUgaGFzaCBhbGdvcml0aG0gZm9yIHN0ciwgYnl0ZXMgYW5kIG1lbW9yeXZpZXcuIFNpcEhhc2gyNDogMSwgRk5WOiAyLAorICAgZXh0ZXJuYWxseSBkZWZpbmVkOiAwICovCisjdW5kZWYgUHlfSEFTSF9BTEdPUklUSE0KKwogLyogYXNzdW1lIEM4OSBzZW1hbnRpY3MgdGhhdCBSRVRTSUdUWVBFIGlzIGFsd2F5cyB2b2lkICovCiAjdW5kZWYgUkVUU0lHVFlQRQogCkBAIC0xMzYwLDYgKzEzODgsOSBAQAogLyogRGVmaW5lIG9uIExpbnV4IHRvIGFjdGl2YXRlIGFsbCBsaWJyYXJ5IGZlYXR1cmVzICovCiAjdW5kZWYgX0dOVV9TT1VSQ0UKIAorLyogRGVmaW5lIHRvIGluY2x1ZGUgbWJzdGF0ZV90IGZvciBtYnJ0b3djICovCisjdW5kZWYgX0lOQ0xVREVfX1NURENfQTFfU09VUkNFCisKIC8qIFRoaXMgbXVzdCBiZSBkZWZpbmVkIG9uIHNvbWUgc3lzdGVtcyB0byBlbmFibGUgbGFyZ2UgZmlsZSBzdXBwb3J0LiAqLwogI3VuZGVmIF9MQVJHRUZJTEVfU09VUkNFCiAKZGlmZiAtLWdpdCBhL3NldHVwLnB5IGIvc2V0dXAucHkKaW5kZXggZDU5NGUwMi4uMjc3OTY1OCAxMDA2NDQKLS0tIGEvc2V0dXAucHkKKysrIGIvc2V0dXAucHkKQEAgLTEsOCArMSwxMCBAQAogIyBBdXRvZGV0ZWN0aW5nIHNldHVwLnB5IHNjcmlwdCBmb3IgYnVpbGRpbmcgdGhlIFB5dGhvbiBleHRlbnNpb25zCiAjCiAKLWltcG9ydCBzeXMsIG9zLCBpbXAsIHJlLCBvcHRwYXJzZQoraW1wb3J0IHN5cywgb3MsIGltcG9ydGxpYi5tYWNoaW5lcnksIHJlLCBvcHRwYXJzZQogZnJvbSBnbG9iIGltcG9ydCBnbG9iCitpbXBvcnQgaW1wb3J0bGliLl9ib290c3RyYXAKK2ltcG9ydCBpbXBvcnRsaWIudXRpbAogaW1wb3J0IHN5c2NvbmZpZwogCiBmcm9tIGRpc3R1dGlscyBpbXBvcnQgbG9nCkBAIC0xNyw2ICsxOSwxMiBAQAogCiBjcm9zc19jb21waWxpbmcgPSAiX1BZVEhPTl9IT1NUX1BMQVRGT1JNIiBpbiBvcy5lbnZpcm9uCiAKKyMgQWRkIHNwZWNpYWwgQ0ZMQUdTIHJlc2VydmVkIGZvciBidWlsZGluZyB0aGUgaW50ZXJwcmV0ZXIgYW5kIHRoZSBzdGRsaWIKKyMgbW9kdWxlcyAoSXNzdWUgIzIxMTIxKS4KK2NmbGFncyA9IHN5c2NvbmZpZy5nZXRfY29uZmlnX3ZhcignQ0ZMQUdTJykKK3B5X2NmbGFnc19ub2Rpc3QgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ1BZX0NGTEFHU19OT0RJU1QnKQorc3lzY29uZmlnLmdldF9jb25maWdfdmFycygpWydDRkxBR1MnXSA9IGNmbGFncyArICcgJyArIHB5X2NmbGFnc19ub2Rpc3QKKwogZGVmIGdldF9wbGF0Zm9ybSgpOgogICAgICMgY3Jvc3MgYnVpbGQKICAgICBpZiAiX1BZVEhPTl9IT1NUX1BMQVRGT1JNIiBpbiBvcy5lbnZpcm9uOgpAQCAtMjQ0LDcgKzI1Miw3IEBACiAKICAgICAgICAgYnVpbGRfZXh0LmJ1aWxkX2V4dGVuc2lvbnMoc2VsZikKIAotICAgICAgICBsb25nZXN0ID0gbWF4KFtsZW4oZS5uYW1lKSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdKQorICAgICAgICBsb25nZXN0ID0gbWF4KFtsZW4oZS5uYW1lKSBmb3IgZSBpbiBzZWxmLmV4dGVuc2lvbnNdLCBkZWZhdWx0PTApCiAgICAgICAgIGlmIHNlbGYuZmFpbGVkOgogICAgICAgICAgICAgbG9uZ2VzdCA9IG1heChsb25nZXN0LCBtYXgoW2xlbihuYW1lKSBmb3IgbmFtZSBpbiBzZWxmLmZhaWxlZF0pKQogCkBAIC0yNTksOCArMjY3LDkgQEAKIAogICAgICAgICBpZiBtaXNzaW5nOgogICAgICAgICAgICAgcHJpbnQoKQotICAgICAgICAgICAgcHJpbnQoIlB5dGhvbiBidWlsZCBmaW5pc2hlZCwgYnV0IHRoZSBuZWNlc3NhcnkgYml0cyB0byBidWlsZCAiCi0gICAgICAgICAgICAgICAgICAgInRoZXNlIG1vZHVsZXMgd2VyZSBub3QgZm91bmQ6IikKKyAgICAgICAgICAgIHByaW50KCJQeXRob24gYnVpbGQgZmluaXNoZWQgc3VjY2Vzc2Z1bGx5ISIpCisgICAgICAgICAgICBwcmludCgiVGhlIG5lY2Vzc2FyeSBiaXRzIHRvIGJ1aWxkIHRoZXNlIG9wdGlvbmFsIG1vZHVsZXMgd2VyZSBub3QgIgorICAgICAgICAgICAgICAgICAgImZvdW5kOiIpCiAgICAgICAgICAgICBwcmludF90aHJlZV9jb2x1bW4obWlzc2luZykKICAgICAgICAgICAgIHByaW50KCJUbyBmaW5kIHRoZSBuZWNlc3NhcnkgYml0cywgbG9vayBpbiBzZXR1cC5weSBpbiIKICAgICAgICAgICAgICAgICAgICIgZGV0ZWN0X21vZHVsZXMoKSBmb3IgdGhlIG1vZHVsZSdzIG5hbWUuIikKQEAgLTMyNSw4ICszMzQsMTEgQEAKICAgICAgICAgaWYgY3Jvc3NfY29tcGlsaW5nOgogICAgICAgICAgICAgcmV0dXJuCiAKKyAgICAgICAgbG9hZGVyID0gaW1wb3J0bGliLm1hY2hpbmVyeS5FeHRlbnNpb25GaWxlTG9hZGVyKGV4dC5uYW1lLCBleHRfZmlsZW5hbWUpCisgICAgICAgIHNwZWMgPSBpbXBvcnRsaWIudXRpbC5zcGVjX2Zyb21fZmlsZV9sb2NhdGlvbihleHQubmFtZSwgZXh0X2ZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyPWxvYWRlcikKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgaW1wLmxvYWRfZHluYW1pYyhleHQubmFtZSwgZXh0X2ZpbGVuYW1lKQorICAgICAgICAgICAgaW1wb3J0bGliLl9ib290c3RyYXAuX1NwZWNNZXRob2RzKHNwZWMpLmxvYWQoKQogICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgd2h5OgogICAgICAgICAgICAgc2VsZi5mYWlsZWQuYXBwZW5kKGV4dC5uYW1lKQogICAgICAgICAgICAgc2VsZi5hbm5vdW5jZSgnKioqIFdBUk5JTkc6IHJlbmFtaW5nICIlcyIgc2luY2UgaW1wb3J0aW5nIGl0JwpAQCAtNTg4LDEwICs2MDAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRzPVsndGVzdGNhcGlfbG9uZy5oJ10pICkKICAgICAgICAgIyBQeXRob24gUEVQLTMxMTggKGJ1ZmZlciBwcm90b2NvbCkgdGVzdCBtb2R1bGUKICAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3Rlc3RidWZmZXInLCBbJ190ZXN0YnVmZmVyLmMnXSkgKQorICAgICAgICAjIFRlc3QgbG9hZGluZyBtdWx0aXBsZSBtb2R1bGVzIGZyb20gb25lIGNvbXBpbGVkIGZpbGUgKGh0dHA6Ly9idWdzLnB5dGhvbi5vcmcvaXNzdWUxNjQyMSkKKyAgICAgICAgZXh0cy5hcHBlbmQoIEV4dGVuc2lvbignX3Rlc3RpbXBvcnRtdWx0aXBsZScsIFsnX3Rlc3RpbXBvcnRtdWx0aXBsZS5jJ10pICkKICAgICAgICAgIyBwcm9maWxlciAoX2xzcHJvZiBpcyBmb3IgY1Byb2ZpbGUucHkpCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ19sc3Byb2YnLCBbJ19sc3Byb2YuYycsICdyb3RhdGluZ3RyZWUuYyddKSApCiAgICAgICAgICMgc3RhdGljIFVuaWNvZGUgY2hhcmFjdGVyIGRhdGFiYXNlCiAgICAgICAgIGV4dHMuYXBwZW5kKCBFeHRlbnNpb24oJ3VuaWNvZGVkYXRhJywgWyd1bmljb2RlZGF0YS5jJ10pICkKKyAgICAgICAgIyBfb3Bjb2RlIG1vZHVsZQorICAgICAgICBleHRzLmFwcGVuZCggRXh0ZW5zaW9uKCdfb3Bjb2RlJywgWydfb3Bjb2RlLmMnXSkgKQogCiAgICAgICAgICMgTW9kdWxlcyB3aXRoIHNvbWUgVU5JWCBkZXBlbmRlbmNpZXMgLS0gb24gYnkgZGVmYXVsdDoKICAgICAgICAgIyAoSWYgeW91IGhhdmUgYSByZWFsbHkgYmFja3dhcmQgVU5JWCwgc2VsZWN0IGFuZCBzb2NrZXQgbWF5IG5vdCBiZQpAQCAtNjg3LDcgKzcwMyw5IEBACiAgICAgICAgIGlmIGhvc3RfcGxhdGZvcm0gPT0gJ2Rhcndpbic6CiAgICAgICAgICAgICBvc19yZWxlYXNlID0gaW50KG9zLnVuYW1lKClbMl0uc3BsaXQoJy4nKVswXSkKICAgICAgICAgICAgIGRlcF90YXJnZXQgPSBzeXNjb25maWcuZ2V0X2NvbmZpZ192YXIoJ01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCcpCi0gICAgICAgICAgICBpZiBkZXBfdGFyZ2V0IGFuZCBkZXBfdGFyZ2V0LnNwbGl0KCcuJykgPCBbJzEwJywgJzUnXToKKyAgICAgICAgICAgIGlmIChkZXBfdGFyZ2V0IGFuZAorICAgICAgICAgICAgICAgICAgICAodHVwbGUoaW50KG4pIGZvciBuIGluIGRlcF90YXJnZXQuc3BsaXQoJy4nKVswOjJdKQorICAgICAgICAgICAgICAgICAgICAgICAgPCAoMTAsIDUpICkgKToKICAgICAgICAgICAgICAgICBvc19yZWxlYXNlID0gOAogICAgICAgICAgICAgaWYgb3NfcmVsZWFzZSA8IDk6CiAgICAgICAgICAgICAgICAgIyBNYWNPU1ggMTAuNCBoYXMgYSBicm9rZW4gcmVhZGxpbmUuIERvbid0IHRyeSB0byBidWlsZApAQCAtNzg0LDEwICs4MDIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgZm9yIGxpbmUgaW4gaW5jZmlsZToKICAgICAgICAgICAgICAgICAgICAgICAgIG0gPSBvcGVuc3NsX3Zlcl9yZS5tYXRjaChsaW5lKQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgbToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuc3NsX3ZlciA9IGV2YWwobS5ncm91cCgxKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuc3NsX3ZlciA9IGludChtLmdyb3VwKDEpLCAxNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICAgZXhjZXB0IElPRXJyb3IgYXMgbXNnOgogICAgICAgICAgICAgICAgIHByaW50KCJJT0Vycm9yIHdoaWxlIHJlYWRpbmcgb3BlbnNzaHYuaDoiLCBtc2cpCi0gICAgICAgICAgICAgICAgcGFzcwogCiAgICAgICAgICNwcmludCgnb3BlbnNzbF92ZXIgPSAweCUwOHgnICUgb3BlbnNzbF92ZXIpCiAgICAgICAgIG1pbl9vcGVuc3NsX3ZlciA9IDB4MDA5MDcwMDAKQEAgLTEwMTIsOCArMTAzMCwxNiBAQAogICAgICAgICAgICAgaWYgZGJfc2V0dXBfZGVidWc6CiAgICAgICAgICAgICAgICAgcHJpbnQoImJzZGRiIHVzaW5nIEJlcmtlbGV5REIgbGliOiIsIGRiX3ZlciwgZGJsaWIpCiAgICAgICAgICAgICAgICAgcHJpbnQoImJzZGRiIGxpYiBkaXI6IiwgZGJsaWJfZGlyLCAiIGluYyBkaXI6IiwgZGJfaW5jZGlyKQotICAgICAgICAgICAgZGJfaW5jcyA9IFtkYl9pbmNkaXJdCiAgICAgICAgICAgICBkYmxpYnMgPSBbZGJsaWJdCisgICAgICAgICAgICAjIE9ubHkgYWRkIHRoZSBmb3VuZCBsaWJyYXJ5IGFuZCBpbmNsdWRlIGRpcmVjdG9yaWVzIGlmIHRoZXkgYXJlbid0CisgICAgICAgICAgICAjIGFscmVhZHkgYmVpbmcgc2VhcmNoZWQuIFRoaXMgYXZvaWRzIGFuIGV4cGxpY2l0IHJ1bnRpbWUgbGlicmFyeQorICAgICAgICAgICAgIyBkZXBlbmRlbmN5LgorICAgICAgICAgICAgaWYgZGJfaW5jZGlyIGluIGluY19kaXJzOgorICAgICAgICAgICAgICAgIGRiX2luY3MgPSBOb25lCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRiX2luY3MgPSBbZGJfaW5jZGlyXQorICAgICAgICAgICAgaWYgZGJsaWJfZGlyWzBdIGluIGxpYl9kaXJzOgorICAgICAgICAgICAgICAgIGRibGliX2RpciA9IE5vbmUKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIGlmIGRiX3NldHVwX2RlYnVnOiBwcmludCgiZGI6IG5vIGFwcHJvcHJpYXRlIGxpYnJhcnkgZm91bmQiKQogICAgICAgICAgICAgZGJfaW5jcyA9IE5vbmUKQEAgLTExMjQsNiArMTE1MCw5IEBACiAgICAgICAgICAgICAjIGNhbiBlbmQgdXAgd2l0aCBhIGJhZCBzZWFyY2ggcGF0aCBvcmRlci4KICAgICAgICAgICAgIGlmIHNxbGl0ZV9pbmNkaXIgbm90IGluIHNlbGYuY29tcGlsZXIuaW5jbHVkZV9kaXJzOgogICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycy5hcHBlbmQoc3FsaXRlX2luY2RpcikKKyAgICAgICAgICAgICMgYXZvaWQgYSBydW50aW1lIGxpYnJhcnkgcGF0aCBmb3IgYSBzeXN0ZW0gbGlicmFyeSBkaXIKKyAgICAgICAgICAgIGlmIHNxbGl0ZV9saWJkaXIgYW5kIHNxbGl0ZV9saWJkaXJbMF0gaW4gbGliX2RpcnM6CisgICAgICAgICAgICAgICAgc3FsaXRlX2xpYmRpciA9IE5vbmUKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKEV4dGVuc2lvbignX3NxbGl0ZTMnLCBzcWxpdGVfc3JjcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPXNxbGl0ZV9kZWZpbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVfZGlycz1pbmNsdWRlX2RpcnMsCkBAIC0xMTkyLDcgKzEyMjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgPSBnZGJtX2xpYnMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgICBlbGlmIGNhbmQgPT0gImJkYiI6Ci0gICAgICAgICAgICAgICAgICAgIGlmIGRiX2luY3MgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgICAgIGlmIGRibGliczoKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGRibV9zZXR1cF9kZWJ1ZzogcHJpbnQoImJ1aWxkaW5nIGRibSB1c2luZyBiZGIiKQogICAgICAgICAgICAgICAgICAgICAgICAgZGJtZXh0ID0gRXh0ZW5zaW9uKCdfZGJtJywgWydfZGJtbW9kdWxlLmMnXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5X2RpcnM9ZGJsaWJfZGlyLApAQCAtMTUwOCwxMCArMTUzNyw2IEBACiAKICAgICAgICAgaWYgaG9zdF9wbGF0Zm9ybSA9PSAnZGFyd2luJzoKICAgICAgICAgICAgIGV4dHMuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19nZXN0YWx0JywgWydfZ2VzdGFsdC5jJ10sCi0gICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bJy1mcmFtZXdvcmsnLCAnQ2FyYm9uJ10pCi0gICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGV4dHMuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICAgICBFeHRlbnNpb24oJ19zY3Byb3h5JywgWydfc2Nwcm94eS5jJ10sCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhX2xpbmtfYXJncz1bCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLWZyYW1ld29yaycsICdTeXN0ZW1Db25maWd1cmF0aW9uJywKQEAgLTE1MzIsNyArMTU1Nyw3IEBACiAKICAgICAgICAgaWYgJ2QnIG5vdCBpbiBzeXMuYWJpZmxhZ3M6CiAgICAgICAgICAgICBleHQgPSBFeHRlbnNpb24oJ3h4bGltaXRlZCcsIFsneHhsaW1pdGVkLmMnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZpbmVfbWFjcm9zPVsoJ1B5X0xJTUlURURfQVBJJywgMSldKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmluZV9tYWNyb3M9WygnUHlfTElNSVRFRF9BUEknLCAnMHgwMzA0MDAwMCcpXSkKICAgICAgICAgICAgIHNlbGYuZXh0ZW5zaW9ucy5hcHBlbmQoZXh0KQogCiAgICAgICAgIHJldHVybiBtaXNzaW5nCkBAIC0yMTU1LDcgKzIxODAsNyBAQAogcHJvZ3JhbW1hYmxlIGludGVyZmFjZS4KIAogVGhlIFB5dGhvbiBpbXBsZW1lbnRhdGlvbiBpcyBwb3J0YWJsZTogaXQgcnVucyBvbiBtYW55IGJyYW5kcyBvZiBVTklYLAotb24gV2luZG93cywgRE9TLCBPUy8yLCBNYWMsIEFtaWdhLi4uIElmIHlvdXIgZmF2b3JpdGUgc3lzdGVtIGlzbid0CitvbiBXaW5kb3dzLCBET1MsIE1hYywgQW1pZ2EuLi4gSWYgeW91ciBmYXZvcml0ZSBzeXN0ZW0gaXNuJ3QKIGxpc3RlZCBoZXJlLCBpdCBtYXkgc3RpbGwgYmUgc3VwcG9ydGVkLCBpZiB0aGVyZSdzIGEgQyBjb21waWxlciBmb3IKIGl0LiBBc2sgYXJvdW5kIG9uIGNvbXAubGFuZy5weXRob24gLS0gb3IganVzdCB0cnkgY29tcGlsaW5nIFB5dGhvbgogeW91cnNlbGYuCg==